Built motion from commit (unavailable).|2.4.3
authorAndrea Bianco <andrea.bianco@xcally.com>
Wed, 15 Jan 2020 17:20:25 +0000 (18:20 +0100)
committerAndrea Bianco <andrea.bianco@xcally.com>
Wed, 15 Jan 2020 17:20:25 +0000 (18:20 +0100)
1130 files changed:
apidoc/api_project.js
apidoc/api_project.json
package.json
public/app/main/apps/dashboards/i18n/ar.json
public/app/main/apps/dashboards/i18n/da.json
public/app/main/apps/dashboards/i18n/de.json
public/app/main/apps/dashboards/i18n/en.json
public/app/main/apps/dashboards/i18n/es.json
public/app/main/apps/dashboards/i18n/fa.json
public/app/main/apps/dashboards/i18n/fi.json
public/app/main/apps/dashboards/i18n/fr.json
public/app/main/apps/dashboards/i18n/he.json
public/app/main/apps/dashboards/i18n/hi.json
public/app/main/apps/dashboards/i18n/id.json
public/app/main/apps/dashboards/i18n/it.json
public/app/main/apps/dashboards/i18n/ja.json
public/app/main/apps/dashboards/i18n/ko.json
public/app/main/apps/dashboards/i18n/lv.json
public/app/main/apps/dashboards/i18n/nl.json
public/app/main/apps/dashboards/i18n/no.json
public/app/main/apps/dashboards/i18n/pl.json
public/app/main/apps/dashboards/i18n/pt-BR.json
public/app/main/apps/dashboards/i18n/pt-PT.json
public/app/main/apps/dashboards/i18n/ru.json
public/app/main/apps/dashboards/i18n/sv.json
public/app/main/apps/dashboards/i18n/tr.json
public/app/main/apps/dashboards/i18n/zh-CN.json
public/app/main/apps/dashboards/i18n/zh-TW.json
public/app/main/apps/settings/i18n/ar.json
public/app/main/apps/settings/i18n/da.json
public/app/main/apps/settings/i18n/de.json
public/app/main/apps/settings/i18n/en.json
public/app/main/apps/settings/i18n/es.json
public/app/main/apps/settings/i18n/fa.json
public/app/main/apps/settings/i18n/fi.json
public/app/main/apps/settings/i18n/fr.json
public/app/main/apps/settings/i18n/he.json
public/app/main/apps/settings/i18n/hi.json
public/app/main/apps/settings/i18n/id.json
public/app/main/apps/settings/i18n/it.json
public/app/main/apps/settings/i18n/ja.json
public/app/main/apps/settings/i18n/ko.json
public/app/main/apps/settings/i18n/lv.json
public/app/main/apps/settings/i18n/nl.json
public/app/main/apps/settings/i18n/no.json
public/app/main/apps/settings/i18n/pl.json
public/app/main/apps/settings/i18n/pt-BR.json
public/app/main/apps/settings/i18n/pt-PT.json
public/app/main/apps/settings/i18n/ru.json
public/app/main/apps/settings/i18n/sv.json
public/app/main/apps/settings/i18n/tr.json
public/app/main/apps/settings/i18n/zh-CN.json
public/app/main/apps/settings/i18n/zh-TW.json
public/app/main/apps/staff/i18n/ar.json
public/app/main/apps/staff/i18n/da.json
public/app/main/apps/staff/i18n/de.json
public/app/main/apps/staff/i18n/en.json
public/app/main/apps/staff/i18n/es.json
public/app/main/apps/staff/i18n/fa.json
public/app/main/apps/staff/i18n/fi.json
public/app/main/apps/staff/i18n/fr.json
public/app/main/apps/staff/i18n/he.json
public/app/main/apps/staff/i18n/hi.json
public/app/main/apps/staff/i18n/id.json
public/app/main/apps/staff/i18n/it.json
public/app/main/apps/staff/i18n/ja.json
public/app/main/apps/staff/i18n/ko.json
public/app/main/apps/staff/i18n/lv.json
public/app/main/apps/staff/i18n/nl.json
public/app/main/apps/staff/i18n/no.json
public/app/main/apps/staff/i18n/pl.json
public/app/main/apps/staff/i18n/pt-BR.json
public/app/main/apps/staff/i18n/pt-PT.json
public/app/main/apps/staff/i18n/ru.json
public/app/main/apps/staff/i18n/sv.json
public/app/main/apps/staff/i18n/tr.json
public/app/main/apps/staff/i18n/zh-CN.json
public/app/main/apps/staff/i18n/zh-TW.json
public/index.html
public/scripts/app.60c6cd52.js [moved from public/scripts/app.bef8ee9b.js with 90% similarity]
server/api/action/action.attributes.js
server/api/action/action.controller.js
server/api/action/action.model.js
server/api/action/action.rpc.js
server/api/action/index.js
server/api/analyticCustomReport/analyticCustomReport.attributes.js
server/api/analyticCustomReport/analyticCustomReport.controller.js
server/api/analyticCustomReport/analyticCustomReport.model.js
server/api/analyticCustomReport/analyticCustomReport.rpc.js
server/api/analyticCustomReport/index.js
server/api/analyticDefaultReport/analyticDefaultReport.attributes.js
server/api/analyticDefaultReport/analyticDefaultReport.controller.js
server/api/analyticDefaultReport/analyticDefaultReport.model.js
server/api/analyticDefaultReport/analyticDefaultReport.rpc.js
server/api/analyticDefaultReport/index.js
server/api/analyticExtractedReport/analyticExtractedReport.attributes.js
server/api/analyticExtractedReport/analyticExtractedReport.controller.js
server/api/analyticExtractedReport/analyticExtractedReport.model.js
server/api/analyticExtractedReport/analyticExtractedReport.rpc.js
server/api/analyticExtractedReport/index.js
server/api/analyticFieldReport/analyticFieldReport.attributes.js
server/api/analyticFieldReport/analyticFieldReport.controller.js
server/api/analyticFieldReport/analyticFieldReport.model.js
server/api/analyticFieldReport/analyticFieldReport.rpc.js
server/api/analyticFieldReport/index.js
server/api/analyticMetric/analyticMetric.attributes.js
server/api/analyticMetric/analyticMetric.controller.js
server/api/analyticMetric/analyticMetric.model.js
server/api/analyticMetric/analyticMetric.rpc.js
server/api/analyticMetric/index.js
server/api/analyticTreeReport/analyticTreeReport.attributes.js
server/api/analyticTreeReport/analyticTreeReport.controller.js
server/api/analyticTreeReport/analyticTreeReport.model.js
server/api/analyticTreeReport/analyticTreeReport.rpc.js
server/api/analyticTreeReport/index.js
server/api/attachment/attachment.attributes.js
server/api/attachment/attachment.controller.js
server/api/attachment/attachment.model.js
server/api/attachment/attachment.rpc.js
server/api/attachment/index.js
server/api/authGoogle/authGoogle.controller.js
server/api/authGoogle/index.js
server/api/authLocal/authLocal.controller.js
server/api/authLocal/index.js
server/api/automation/automation.attributes.js
server/api/automation/automation.controller.js
server/api/automation/automation.model.js
server/api/automation/automation.rpc.js
server/api/automation/index.js
server/api/campaign/campaign.attributes.js
server/api/campaign/campaign.controller.js
server/api/campaign/campaign.model.js
server/api/campaign/campaign.rpc.js
server/api/campaign/index.js
server/api/cannedAnswer/cannedAnswer.attributes.js
server/api/cannedAnswer/cannedAnswer.controller.js
server/api/cannedAnswer/cannedAnswer.model.js
server/api/cannedAnswer/cannedAnswer.rpc.js
server/api/cannedAnswer/index.js
server/api/cdr/cdr.attributes.js
server/api/cdr/cdr.controller.js
server/api/cdr/cdr.model.js
server/api/cdr/cdr.rpc.js
server/api/cdr/index.js
server/api/chatApplication/chatApplication.attributes.js
server/api/chatApplication/chatApplication.controller.js
server/api/chatApplication/chatApplication.model.js
server/api/chatApplication/chatApplication.rpc.js
server/api/chatApplication/index.js
server/api/chatGroup/chatGroup.attributes.js
server/api/chatGroup/chatGroup.controller.js
server/api/chatGroup/chatGroup.events.js
server/api/chatGroup/chatGroup.model.js
server/api/chatGroup/chatGroup.rpc.js
server/api/chatGroup/chatGroup.socket.js
server/api/chatGroup/index.js
server/api/chatInteraction/chatInteraction.attributes.js
server/api/chatInteraction/chatInteraction.controller.js
server/api/chatInteraction/chatInteraction.events.js
server/api/chatInteraction/chatInteraction.model.js
server/api/chatInteraction/chatInteraction.rpc.js
server/api/chatInteraction/chatInteraction.socket.js
server/api/chatInteraction/index.js
server/api/chatInternalMessage/chatInternalMessage.attributes.js
server/api/chatInternalMessage/chatInternalMessage.controller.js
server/api/chatInternalMessage/chatInternalMessage.events.js
server/api/chatInternalMessage/chatInternalMessage.model.js
server/api/chatInternalMessage/chatInternalMessage.rpc.js
server/api/chatInternalMessage/chatInternalMessage.socket.js
server/api/chatInternalMessage/index.js
server/api/chatMessage/chatMessage.attributes.js
server/api/chatMessage/chatMessage.controller.js
server/api/chatMessage/chatMessage.events.js
server/api/chatMessage/chatMessage.model.js
server/api/chatMessage/chatMessage.rpc.js
server/api/chatMessage/chatMessage.socket.js
server/api/chatMessage/index.js
server/api/chatOfflineMessage/chatOfflineMessage.attributes.js
server/api/chatOfflineMessage/chatOfflineMessage.controller.js
server/api/chatOfflineMessage/chatOfflineMessage.model.js
server/api/chatOfflineMessage/chatOfflineMessage.rpc.js
server/api/chatOfflineMessage/index.js
server/api/chatProactiveAction/chatProactiveAction.attributes.js
server/api/chatProactiveAction/chatProactiveAction.controller.js
server/api/chatProactiveAction/chatProactiveAction.model.js
server/api/chatProactiveAction/chatProactiveAction.rpc.js
server/api/chatProactiveAction/index.js
server/api/chatQueue/chatQueue.attributes.js
server/api/chatQueue/chatQueue.controller.js
server/api/chatQueue/chatQueue.events.js
server/api/chatQueue/chatQueue.model.js
server/api/chatQueue/chatQueue.rpc.js
server/api/chatQueue/chatQueue.socket.js
server/api/chatQueue/index.js
server/api/chatQueueReport/chatQueueReport.attributes.js
server/api/chatQueueReport/chatQueueReport.controller.js
server/api/chatQueueReport/chatQueueReport.model.js
server/api/chatQueueReport/chatQueueReport.rpc.js
server/api/chatQueueReport/index.js
server/api/chatTransferReport/chatTransferReport.attributes.js
server/api/chatTransferReport/chatTransferReport.controller.js
server/api/chatTransferReport/chatTransferReport.model.js
server/api/chatTransferReport/chatTransferReport.rpc.js
server/api/chatTransferReport/index.js
server/api/chatWebsite/chatWebsite.attributes.js
server/api/chatWebsite/chatWebsite.controller.js
server/api/chatWebsite/chatWebsite.events.js
server/api/chatWebsite/chatWebsite.model.js
server/api/chatWebsite/chatWebsite.rpc.js
server/api/chatWebsite/chatWebsite.socket.js
server/api/chatWebsite/index.js
server/api/cmCompany/cmCompany.attributes.js
server/api/cmCompany/cmCompany.controller.js
server/api/cmCompany/cmCompany.model.js
server/api/cmCompany/cmCompany.rpc.js
server/api/cmCompany/index.js
server/api/cmContact/cmContact.attributes.js
server/api/cmContact/cmContact.controller.js
server/api/cmContact/cmContact.events.js
server/api/cmContact/cmContact.model.js
server/api/cmContact/cmContact.rpc.js
server/api/cmContact/cmContact.socket.js
server/api/cmContact/index.js
server/api/cmCustomField/cmCustomField.attributes.js
server/api/cmCustomField/cmCustomField.controller.js
server/api/cmCustomField/cmCustomField.model.js
server/api/cmCustomField/cmCustomField.rpc.js
server/api/cmCustomField/index.js
server/api/cmHopper/cmHopper.attributes.js
server/api/cmHopper/cmHopper.controller.js
server/api/cmHopper/cmHopper.model.js
server/api/cmHopper/cmHopper.rpc.js
server/api/cmHopper/index.js
server/api/cmHopperBlack/cmHopperBlack.attributes.js
server/api/cmHopperBlack/cmHopperBlack.controller.js
server/api/cmHopperBlack/cmHopperBlack.model.js
server/api/cmHopperBlack/cmHopperBlack.rpc.js
server/api/cmHopperBlack/index.js
server/api/cmHopperFinal/cmHopperFinal.attributes.js
server/api/cmHopperFinal/cmHopperFinal.controller.js
server/api/cmHopperFinal/cmHopperFinal.model.js
server/api/cmHopperFinal/cmHopperFinal.rpc.js
server/api/cmHopperFinal/index.js
server/api/cmHopperHistory/cmHopperHistory.attributes.js
server/api/cmHopperHistory/cmHopperHistory.controller.js
server/api/cmHopperHistory/cmHopperHistory.model.js
server/api/cmHopperHistory/cmHopperHistory.rpc.js
server/api/cmHopperHistory/index.js
server/api/cmList/cmList.attributes.js
server/api/cmList/cmList.controller.js
server/api/cmList/cmList.events.js
server/api/cmList/cmList.model.js
server/api/cmList/cmList.rpc.js
server/api/cmList/cmList.socket.js
server/api/cmList/index.js
server/api/condition/condition.attributes.js
server/api/condition/condition.controller.js
server/api/condition/condition.model.js
server/api/condition/condition.rpc.js
server/api/condition/index.js
server/api/dashboard/dashboard.attributes.js
server/api/dashboard/dashboard.controller.js
server/api/dashboard/dashboard.events.js
server/api/dashboard/dashboard.model.js
server/api/dashboard/dashboard.rpc.js
server/api/dashboard/dashboard.socket.js
server/api/dashboard/index.js
server/api/dashboardItem/dashboardItem.attributes.js
server/api/dashboardItem/dashboardItem.controller.js
server/api/dashboardItem/dashboardItem.events.js
server/api/dashboardItem/dashboardItem.model.js
server/api/dashboardItem/dashboardItem.rpc.js
server/api/dashboardItem/dashboardItem.socket.js
server/api/dashboardItem/index.js
server/api/disposition/disposition.attributes.js
server/api/disposition/disposition.controller.js
server/api/disposition/disposition.model.js
server/api/disposition/disposition.rpc.js
server/api/disposition/index.js
server/api/faxAccount/faxAccount.attributes.js
server/api/faxAccount/faxAccount.controller.js
server/api/faxAccount/faxAccount.events.js
server/api/faxAccount/faxAccount.model.js
server/api/faxAccount/faxAccount.rpc.js
server/api/faxAccount/faxAccount.socket.js
server/api/faxAccount/index.js
server/api/faxApplication/faxApplication.attributes.js
server/api/faxApplication/faxApplication.controller.js
server/api/faxApplication/faxApplication.model.js
server/api/faxApplication/faxApplication.rpc.js
server/api/faxApplication/index.js
server/api/faxInteraction/faxInteraction.attributes.js
server/api/faxInteraction/faxInteraction.controller.js
server/api/faxInteraction/faxInteraction.events.js
server/api/faxInteraction/faxInteraction.model.js
server/api/faxInteraction/faxInteraction.rpc.js
server/api/faxInteraction/faxInteraction.socket.js
server/api/faxInteraction/index.js
server/api/faxMessage/faxMessage.attributes.js
server/api/faxMessage/faxMessage.controller.js
server/api/faxMessage/faxMessage.events.js
server/api/faxMessage/faxMessage.model.js
server/api/faxMessage/faxMessage.rpc.js
server/api/faxMessage/faxMessage.socket.js
server/api/faxMessage/index.js
server/api/faxQueue/faxQueue.attributes.js
server/api/faxQueue/faxQueue.controller.js
server/api/faxQueue/faxQueue.events.js
server/api/faxQueue/faxQueue.model.js
server/api/faxQueue/faxQueue.rpc.js
server/api/faxQueue/faxQueue.socket.js
server/api/faxQueue/index.js
server/api/faxQueueReport/faxQueueReport.attributes.js
server/api/faxQueueReport/faxQueueReport.controller.js
server/api/faxQueueReport/faxQueueReport.model.js
server/api/faxQueueReport/faxQueueReport.rpc.js
server/api/faxQueueReport/index.js
server/api/faxTransferReport/faxTransferReport.attributes.js
server/api/faxTransferReport/faxTransferReport.controller.js
server/api/faxTransferReport/faxTransferReport.model.js
server/api/faxTransferReport/faxTransferReport.rpc.js
server/api/faxTransferReport/index.js
server/api/intDeskAccount/index.js
server/api/intDeskAccount/intDeskAccount.attributes.js
server/api/intDeskAccount/intDeskAccount.controller.js
server/api/intDeskAccount/intDeskAccount.model.js
server/api/intDeskAccount/intDeskAccount.rpc.js
server/api/intDeskConfiguration/index.js
server/api/intDeskConfiguration/intDeskConfiguration.attributes.js
server/api/intDeskConfiguration/intDeskConfiguration.controller.js
server/api/intDeskConfiguration/intDeskConfiguration.model.js
server/api/intDeskConfiguration/intDeskConfiguration.rpc.js
server/api/intDeskField/index.js
server/api/intDeskField/intDeskField.attributes.js
server/api/intDeskField/intDeskField.controller.js
server/api/intDeskField/intDeskField.model.js
server/api/intDeskField/intDeskField.rpc.js
server/api/intDynamics365Account/index.js
server/api/intDynamics365Account/intDynamics365Account.attributes.js
server/api/intDynamics365Account/intDynamics365Account.controller.js
server/api/intDynamics365Account/intDynamics365Account.model.js
server/api/intDynamics365Account/intDynamics365Account.rpc.js
server/api/intDynamics365Configuration/index.js
server/api/intDynamics365Configuration/intDynamics365Configuration.attributes.js
server/api/intDynamics365Configuration/intDynamics365Configuration.controller.js
server/api/intDynamics365Configuration/intDynamics365Configuration.model.js
server/api/intDynamics365Configuration/intDynamics365Configuration.rpc.js
server/api/intDynamics365Field/index.js
server/api/intDynamics365Field/intDynamics365Field.attributes.js
server/api/intDynamics365Field/intDynamics365Field.controller.js
server/api/intDynamics365Field/intDynamics365Field.model.js
server/api/intDynamics365Field/intDynamics365Field.rpc.js
server/api/intFreshdeskAccount/index.js
server/api/intFreshdeskAccount/intFreshdeskAccount.attributes.js
server/api/intFreshdeskAccount/intFreshdeskAccount.controller.js
server/api/intFreshdeskAccount/intFreshdeskAccount.model.js
server/api/intFreshdeskAccount/intFreshdeskAccount.rpc.js
server/api/intFreshdeskConfiguration/index.js
server/api/intFreshdeskConfiguration/intFreshdeskConfiguration.attributes.js
server/api/intFreshdeskConfiguration/intFreshdeskConfiguration.controller.js
server/api/intFreshdeskConfiguration/intFreshdeskConfiguration.model.js
server/api/intFreshdeskConfiguration/intFreshdeskConfiguration.rpc.js
server/api/intFreshdeskField/index.js
server/api/intFreshdeskField/intFreshdeskField.attributes.js
server/api/intFreshdeskField/intFreshdeskField.controller.js
server/api/intFreshdeskField/intFreshdeskField.model.js
server/api/intFreshdeskField/intFreshdeskField.rpc.js
server/api/intSalesforceAccount/index.js
server/api/intSalesforceAccount/intSalesforceAccount.attributes.js
server/api/intSalesforceAccount/intSalesforceAccount.controller.js
server/api/intSalesforceAccount/intSalesforceAccount.model.js
server/api/intSalesforceAccount/intSalesforceAccount.rpc.js
server/api/intSalesforceConfiguration/index.js
server/api/intSalesforceConfiguration/intSalesforceConfiguration.attributes.js
server/api/intSalesforceConfiguration/intSalesforceConfiguration.controller.js
server/api/intSalesforceConfiguration/intSalesforceConfiguration.model.js
server/api/intSalesforceConfiguration/intSalesforceConfiguration.rpc.js
server/api/intSalesforceField/index.js
server/api/intSalesforceField/intSalesforceField.attributes.js
server/api/intSalesforceField/intSalesforceField.controller.js
server/api/intSalesforceField/intSalesforceField.model.js
server/api/intSalesforceField/intSalesforceField.rpc.js
server/api/intServicenowAccount/index.js
server/api/intServicenowAccount/intServicenowAccount.attributes.js
server/api/intServicenowAccount/intServicenowAccount.controller.js
server/api/intServicenowAccount/intServicenowAccount.model.js
server/api/intServicenowAccount/intServicenowAccount.rpc.js
server/api/intServicenowConfiguration/index.js
server/api/intServicenowConfiguration/intServicenowConfiguration.attributes.js
server/api/intServicenowConfiguration/intServicenowConfiguration.controller.js
server/api/intServicenowConfiguration/intServicenowConfiguration.model.js
server/api/intServicenowConfiguration/intServicenowConfiguration.rpc.js
server/api/intServicenowField/index.js
server/api/intServicenowField/intServicenowField.attributes.js
server/api/intServicenowField/intServicenowField.controller.js
server/api/intServicenowField/intServicenowField.model.js
server/api/intServicenowField/intServicenowField.rpc.js
server/api/intSugarcrmAccount/index.js
server/api/intSugarcrmAccount/intSugarcrmAccount.attributes.js
server/api/intSugarcrmAccount/intSugarcrmAccount.controller.js
server/api/intSugarcrmAccount/intSugarcrmAccount.model.js
server/api/intSugarcrmAccount/intSugarcrmAccount.rpc.js
server/api/intSugarcrmConfiguration/index.js
server/api/intSugarcrmConfiguration/intSugarcrmConfiguration.attributes.js
server/api/intSugarcrmConfiguration/intSugarcrmConfiguration.controller.js
server/api/intSugarcrmConfiguration/intSugarcrmConfiguration.model.js
server/api/intSugarcrmConfiguration/intSugarcrmConfiguration.rpc.js
server/api/intSugarcrmField/index.js
server/api/intSugarcrmField/intSugarcrmField.attributes.js
server/api/intSugarcrmField/intSugarcrmField.controller.js
server/api/intSugarcrmField/intSugarcrmField.model.js
server/api/intSugarcrmField/intSugarcrmField.rpc.js
server/api/intVtigerAccount/index.js
server/api/intVtigerAccount/intVtigerAccount.attributes.js
server/api/intVtigerAccount/intVtigerAccount.controller.js
server/api/intVtigerAccount/intVtigerAccount.model.js
server/api/intVtigerAccount/intVtigerAccount.rpc.js
server/api/intVtigerConfiguration/index.js
server/api/intVtigerConfiguration/intVtigerConfiguration.attributes.js
server/api/intVtigerConfiguration/intVtigerConfiguration.controller.js
server/api/intVtigerConfiguration/intVtigerConfiguration.model.js
server/api/intVtigerConfiguration/intVtigerConfiguration.rpc.js
server/api/intVtigerField/index.js
server/api/intVtigerField/intVtigerField.attributes.js
server/api/intVtigerField/intVtigerField.controller.js
server/api/intVtigerField/intVtigerField.model.js
server/api/intVtigerField/intVtigerField.rpc.js
server/api/intZendeskAccount/index.js
server/api/intZendeskAccount/intZendeskAccount.attributes.js
server/api/intZendeskAccount/intZendeskAccount.controller.js
server/api/intZendeskAccount/intZendeskAccount.model.js
server/api/intZendeskAccount/intZendeskAccount.rpc.js
server/api/intZendeskConfiguration/index.js
server/api/intZendeskConfiguration/intZendeskConfiguration.attributes.js
server/api/intZendeskConfiguration/intZendeskConfiguration.controller.js
server/api/intZendeskConfiguration/intZendeskConfiguration.model.js
server/api/intZendeskConfiguration/intZendeskConfiguration.rpc.js
server/api/intZendeskField/index.js
server/api/intZendeskField/intZendeskField.attributes.js
server/api/intZendeskField/intZendeskField.controller.js
server/api/intZendeskField/intZendeskField.model.js
server/api/intZendeskField/intZendeskField.rpc.js
server/api/intZohoAccount/index.js
server/api/intZohoAccount/intZohoAccount.attributes.js
server/api/intZohoAccount/intZohoAccount.controller.js
server/api/intZohoAccount/intZohoAccount.model.js
server/api/intZohoAccount/intZohoAccount.rpc.js
server/api/intZohoConfiguration/index.js
server/api/intZohoConfiguration/intZohoConfiguration.attributes.js
server/api/intZohoConfiguration/intZohoConfiguration.controller.js
server/api/intZohoConfiguration/intZohoConfiguration.model.js
server/api/intZohoConfiguration/intZohoConfiguration.rpc.js
server/api/intZohoField/index.js
server/api/intZohoField/intZohoField.attributes.js
server/api/intZohoField/intZohoField.controller.js
server/api/intZohoField/intZohoField.model.js
server/api/intZohoField/intZohoField.rpc.js
server/api/integration/index.js
server/api/integration/integration.attributes.js
server/api/integration/integration.controller.js
server/api/integration/integration.model.js
server/api/integration/integration.rpc.js
server/api/integrationReport/index.js
server/api/integrationReport/integrationReport.attributes.js
server/api/integrationReport/integrationReport.controller.js
server/api/integrationReport/integrationReport.model.js
server/api/integrationReport/integrationReport.rpc.js
server/api/interval/index.js
server/api/interval/interval.attributes.js
server/api/interval/interval.controller.js
server/api/interval/interval.model.js
server/api/interval/interval.rpc.js
server/api/jira/index.js
server/api/jira/jira.controller.js
server/api/jscriptyAnswerReport/index.js
server/api/jscriptyAnswerReport/jscriptyAnswerReport.attributes.js
server/api/jscriptyAnswerReport/jscriptyAnswerReport.controller.js
server/api/jscriptyAnswerReport/jscriptyAnswerReport.model.js
server/api/jscriptyAnswerReport/jscriptyAnswerReport.rpc.js
server/api/jscriptyProject/index.js
server/api/jscriptyProject/jscriptyProject.attributes.js
server/api/jscriptyProject/jscriptyProject.controller.js
server/api/jscriptyProject/jscriptyProject.model.js
server/api/jscriptyProject/jscriptyProject.rpc.js
server/api/jscriptyQuestionReport/index.js
server/api/jscriptyQuestionReport/jscriptyQuestionReport.attributes.js
server/api/jscriptyQuestionReport/jscriptyQuestionReport.controller.js
server/api/jscriptyQuestionReport/jscriptyQuestionReport.model.js
server/api/jscriptyQuestionReport/jscriptyQuestionReport.rpc.js
server/api/jscriptySessionReport/index.js
server/api/jscriptySessionReport/jscriptySessionReport.attributes.js
server/api/jscriptySessionReport/jscriptySessionReport.controller.js
server/api/jscriptySessionReport/jscriptySessionReport.model.js
server/api/jscriptySessionReport/jscriptySessionReport.rpc.js
server/api/license/index.js
server/api/license/license.attributes.js
server/api/license/license.controller.js
server/api/license/license.model.js
server/api/license/license.rpc.js
server/api/mailAccount/index.js
server/api/mailAccount/mailAccount.attributes.js
server/api/mailAccount/mailAccount.controller.js
server/api/mailAccount/mailAccount.events.js
server/api/mailAccount/mailAccount.model.js
server/api/mailAccount/mailAccount.rpc.js
server/api/mailAccount/mailAccount.socket.js
server/api/mailApplication/index.js
server/api/mailApplication/mailApplication.attributes.js
server/api/mailApplication/mailApplication.controller.js
server/api/mailApplication/mailApplication.model.js
server/api/mailApplication/mailApplication.rpc.js
server/api/mailInteraction/index.js
server/api/mailInteraction/mailInteraction.attributes.js
server/api/mailInteraction/mailInteraction.controller.js
server/api/mailInteraction/mailInteraction.events.js
server/api/mailInteraction/mailInteraction.model.js
server/api/mailInteraction/mailInteraction.rpc.js
server/api/mailInteraction/mailInteraction.socket.js
server/api/mailMessage/index.js
server/api/mailMessage/mailMessage.attributes.js
server/api/mailMessage/mailMessage.controller.js
server/api/mailMessage/mailMessage.events.js
server/api/mailMessage/mailMessage.model.js
server/api/mailMessage/mailMessage.rpc.js
server/api/mailMessage/mailMessage.socket.js
server/api/mailQueue/index.js
server/api/mailQueue/mailQueue.attributes.js
server/api/mailQueue/mailQueue.controller.js
server/api/mailQueue/mailQueue.events.js
server/api/mailQueue/mailQueue.model.js
server/api/mailQueue/mailQueue.rpc.js
server/api/mailQueue/mailQueue.socket.js
server/api/mailQueueReport/index.js
server/api/mailQueueReport/mailQueueReport.attributes.js
server/api/mailQueueReport/mailQueueReport.controller.js
server/api/mailQueueReport/mailQueueReport.model.js
server/api/mailQueueReport/mailQueueReport.rpc.js
server/api/mailServerIn/index.js
server/api/mailServerIn/mailServerIn.attributes.js
server/api/mailServerIn/mailServerIn.model.js
server/api/mailServerIn/mailServerIn.rpc.js
server/api/mailServerOut/index.js
server/api/mailServerOut/mailServerOut.attributes.js
server/api/mailServerOut/mailServerOut.controller.js
server/api/mailServerOut/mailServerOut.model.js
server/api/mailServerOut/mailServerOut.rpc.js
server/api/mailSubstatus/index.js
server/api/mailSubstatus/mailSubstatus.attributes.js
server/api/mailSubstatus/mailSubstatus.controller.js
server/api/mailSubstatus/mailSubstatus.model.js
server/api/mailSubstatus/mailSubstatus.rpc.js
server/api/mailTransferReport/index.js
server/api/mailTransferReport/mailTransferReport.attributes.js
server/api/mailTransferReport/mailTransferReport.controller.js
server/api/mailTransferReport/mailTransferReport.model.js
server/api/mailTransferReport/mailTransferReport.rpc.js
server/api/memberReport/index.js
server/api/memberReport/memberReport.attributes.js
server/api/memberReport/memberReport.controller.js
server/api/memberReport/memberReport.model.js
server/api/memberReport/memberReport.rpc.js
server/api/migration/index.js
server/api/migration/migration.attributes.js
server/api/migration/migration.controller.js
server/api/migration/migration.model.js
server/api/migration/migration.rpc.js
server/api/network/index.js
server/api/network/network.attributes.js
server/api/network/network.controller.js
server/api/network/network.model.js
server/api/network/network.rpc.js
server/api/openchannelAccount/index.js
server/api/openchannelAccount/openchannelAccount.attributes.js
server/api/openchannelAccount/openchannelAccount.controller.js
server/api/openchannelAccount/openchannelAccount.events.js
server/api/openchannelAccount/openchannelAccount.model.js
server/api/openchannelAccount/openchannelAccount.rpc.js
server/api/openchannelAccount/openchannelAccount.socket.js
server/api/openchannelApplication/index.js
server/api/openchannelApplication/openchannelApplication.attributes.js
server/api/openchannelApplication/openchannelApplication.controller.js
server/api/openchannelApplication/openchannelApplication.model.js
server/api/openchannelApplication/openchannelApplication.rpc.js
server/api/openchannelInteraction/index.js
server/api/openchannelInteraction/openchannelInteraction.attributes.js
server/api/openchannelInteraction/openchannelInteraction.controller.js
server/api/openchannelInteraction/openchannelInteraction.events.js
server/api/openchannelInteraction/openchannelInteraction.model.js
server/api/openchannelInteraction/openchannelInteraction.rpc.js
server/api/openchannelInteraction/openchannelInteraction.socket.js
server/api/openchannelMessage/index.js
server/api/openchannelMessage/openchannelMessage.attributes.js
server/api/openchannelMessage/openchannelMessage.controller.js
server/api/openchannelMessage/openchannelMessage.events.js
server/api/openchannelMessage/openchannelMessage.model.js
server/api/openchannelMessage/openchannelMessage.rpc.js
server/api/openchannelMessage/openchannelMessage.socket.js
server/api/openchannelQueue/index.js
server/api/openchannelQueue/openchannelQueue.attributes.js
server/api/openchannelQueue/openchannelQueue.controller.js
server/api/openchannelQueue/openchannelQueue.events.js
server/api/openchannelQueue/openchannelQueue.model.js
server/api/openchannelQueue/openchannelQueue.rpc.js
server/api/openchannelQueue/openchannelQueue.socket.js
server/api/openchannelQueueReport/index.js
server/api/openchannelQueueReport/openchannelQueueReport.attributes.js
server/api/openchannelQueueReport/openchannelQueueReport.controller.js
server/api/openchannelQueueReport/openchannelQueueReport.model.js
server/api/openchannelQueueReport/openchannelQueueReport.rpc.js
server/api/openchannelTransferReport/index.js
server/api/openchannelTransferReport/openchannelTransferReport.attributes.js
server/api/openchannelTransferReport/openchannelTransferReport.controller.js
server/api/openchannelTransferReport/openchannelTransferReport.model.js
server/api/openchannelTransferReport/openchannelTransferReport.rpc.js
server/api/pause/index.js
server/api/pause/pause.attributes.js
server/api/pause/pause.controller.js
server/api/pause/pause.model.js
server/api/pause/pause.rpc.js
server/api/plugin/index.js
server/api/plugin/plugin.attributes.js
server/api/plugin/plugin.controller.js
server/api/plugin/plugin.events.js
server/api/plugin/plugin.model.js
server/api/plugin/plugin.rpc.js
server/api/plugin/plugin.socket.js
server/api/pm2/index.js
server/api/pm2/pm2.controller.js
server/api/reportAgentPreview/index.js
server/api/reportAgentPreview/reportAgentPreview.attributes.js
server/api/reportAgentPreview/reportAgentPreview.model.js
server/api/reportAgentPreview/reportAgentPreview.rpc.js
server/api/rpc/index.js
server/api/rpc/rpc.controller.js
server/api/schedule/index.js
server/api/schedule/schedule.attributes.js
server/api/schedule/schedule.controller.js
server/api/schedule/schedule.model.js
server/api/schedule/schedule.rpc.js
server/api/screenRecording/index.js
server/api/screenRecording/screenRecording.attributes.js
server/api/screenRecording/screenRecording.controller.js
server/api/screenRecording/screenRecording.model.js
server/api/screenRecording/screenRecording.rpc.js
server/api/setting/index.js
server/api/setting/setting.attributes.js
server/api/setting/setting.controller.js
server/api/setting/setting.model.js
server/api/setting/setting.rpc.js
server/api/smsAccount/index.js
server/api/smsAccount/smsAccount.attributes.js
server/api/smsAccount/smsAccount.controller.js
server/api/smsAccount/smsAccount.events.js
server/api/smsAccount/smsAccount.model.js
server/api/smsAccount/smsAccount.rpc.js
server/api/smsAccount/smsAccount.socket.js
server/api/smsApplication/index.js
server/api/smsApplication/smsApplication.attributes.js
server/api/smsApplication/smsApplication.controller.js
server/api/smsApplication/smsApplication.model.js
server/api/smsApplication/smsApplication.rpc.js
server/api/smsInteraction/index.js
server/api/smsInteraction/smsInteraction.attributes.js
server/api/smsInteraction/smsInteraction.controller.js
server/api/smsInteraction/smsInteraction.events.js
server/api/smsInteraction/smsInteraction.model.js
server/api/smsInteraction/smsInteraction.rpc.js
server/api/smsInteraction/smsInteraction.socket.js
server/api/smsMessage/index.js
server/api/smsMessage/smsMessage.attributes.js
server/api/smsMessage/smsMessage.controller.js
server/api/smsMessage/smsMessage.events.js
server/api/smsMessage/smsMessage.model.js
server/api/smsMessage/smsMessage.rpc.js
server/api/smsMessage/smsMessage.socket.js
server/api/smsQueue/index.js
server/api/smsQueue/smsQueue.attributes.js
server/api/smsQueue/smsQueue.controller.js
server/api/smsQueue/smsQueue.events.js
server/api/smsQueue/smsQueue.model.js
server/api/smsQueue/smsQueue.rpc.js
server/api/smsQueue/smsQueue.socket.js
server/api/smsQueueReport/index.js
server/api/smsQueueReport/smsQueueReport.attributes.js
server/api/smsQueueReport/smsQueueReport.controller.js
server/api/smsQueueReport/smsQueueReport.model.js
server/api/smsQueueReport/smsQueueReport.rpc.js
server/api/smsTransferReport/index.js
server/api/smsTransferReport/smsTransferReport.attributes.js
server/api/smsTransferReport/smsTransferReport.controller.js
server/api/smsTransferReport/smsTransferReport.model.js
server/api/smsTransferReport/smsTransferReport.rpc.js
server/api/sound/index.js
server/api/sound/sound.attributes.js
server/api/sound/sound.controller.js
server/api/sound/sound.model.js
server/api/sound/sound.rpc.js
server/api/squareMessage/index.js
server/api/squareMessage/squareMessage.attributes.js
server/api/squareMessage/squareMessage.controller.js
server/api/squareMessage/squareMessage.model.js
server/api/squareMessage/squareMessage.rpc.js
server/api/squareOdbc/index.js
server/api/squareOdbc/squareOdbc.attributes.js
server/api/squareOdbc/squareOdbc.controller.js
server/api/squareOdbc/squareOdbc.model.js
server/api/squareOdbc/squareOdbc.rpc.js
server/api/squareProject/index.js
server/api/squareProject/squareProject.attributes.js
server/api/squareProject/squareProject.controller.js
server/api/squareProject/squareProject.events.js
server/api/squareProject/squareProject.model.js
server/api/squareProject/squareProject.rpc.js
server/api/squareProject/squareProject.socket.js
server/api/squareRecording/index.js
server/api/squareRecording/squareRecording.attributes.js
server/api/squareRecording/squareRecording.controller.js
server/api/squareRecording/squareRecording.model.js
server/api/squareRecording/squareRecording.rpc.js
server/api/squareReport/index.js
server/api/squareReport/squareReport.attributes.js
server/api/squareReport/squareReport.controller.js
server/api/squareReport/squareReport.model.js
server/api/squareReport/squareReport.rpc.js
server/api/squareReportDetail/index.js
server/api/squareReportDetail/squareReportDetail.attributes.js
server/api/squareReportDetail/squareReportDetail.controller.js
server/api/squareReportDetail/squareReportDetail.model.js
server/api/squareReportDetail/squareReportDetail.rpc.js
server/api/system/index.js
server/api/system/system.controller.js
server/api/tag/index.js
server/api/tag/tag.attributes.js
server/api/tag/tag.controller.js
server/api/tag/tag.model.js
server/api/tag/tag.rpc.js
server/api/team/index.js
server/api/team/team.attributes.js
server/api/team/team.controller.js
server/api/team/team.events.js
server/api/team/team.model.js
server/api/team/team.rpc.js
server/api/team/team.socket.js
server/api/template/index.js
server/api/template/template.attributes.js
server/api/template/template.controller.js
server/api/template/template.model.js
server/api/template/template.rpc.js
server/api/trigger/index.js
server/api/trigger/trigger.attributes.js
server/api/trigger/trigger.controller.js
server/api/trigger/trigger.model.js
server/api/trigger/trigger.rpc.js
server/api/trunk/index.js
server/api/trunk/trunk.attributes.js
server/api/trunk/trunk.controller.js
server/api/trunk/trunk.model.js
server/api/trunk/trunk.rpc.js
server/api/user/index.js
server/api/user/user.attributes.js
server/api/user/user.controller.js
server/api/user/user.events.js
server/api/user/user.model.js
server/api/user/user.rpc.js
server/api/user/user.socket.js
server/api/userChatQueue/index.js
server/api/userChatQueue/userChatQueue.attributes.js
server/api/userChatQueue/userChatQueue.model.js
server/api/userChatQueue/userChatQueue.rpc.js
server/api/userFaxQueue/index.js
server/api/userFaxQueue/userFaxQueue.attributes.js
server/api/userFaxQueue/userFaxQueue.model.js
server/api/userFaxQueue/userFaxQueue.rpc.js
server/api/userMailQueue/index.js
server/api/userMailQueue/userMailQueue.attributes.js
server/api/userMailQueue/userMailQueue.model.js
server/api/userMailQueue/userMailQueue.rpc.js
server/api/userOpenchannelQueue/index.js
server/api/userOpenchannelQueue/userOpenchannelQueue.attributes.js
server/api/userOpenchannelQueue/userOpenchannelQueue.model.js
server/api/userOpenchannelQueue/userOpenchannelQueue.rpc.js
server/api/userProfile/index.js
server/api/userProfile/userProfile.attributes.js
server/api/userProfile/userProfile.controller.js
server/api/userProfile/userProfile.events.js
server/api/userProfile/userProfile.model.js
server/api/userProfile/userProfile.rpc.js
server/api/userProfile/userProfile.socket.js
server/api/userProfileResource/index.js
server/api/userProfileResource/userProfileResource.attributes.js
server/api/userProfileResource/userProfileResource.controller.js
server/api/userProfileResource/userProfileResource.model.js
server/api/userProfileResource/userProfileResource.rpc.js
server/api/userProfileSection/index.js
server/api/userProfileSection/userProfileSection.attributes.js
server/api/userProfileSection/userProfileSection.controller.js
server/api/userProfileSection/userProfileSection.model.js
server/api/userProfileSection/userProfileSection.rpc.js
server/api/userSmsQueue/index.js
server/api/userSmsQueue/userSmsQueue.attributes.js
server/api/userSmsQueue/userSmsQueue.model.js
server/api/userSmsQueue/userSmsQueue.rpc.js
server/api/userVoiceQueue/index.js
server/api/userVoiceQueue/userVoiceQueue.attributes.js
server/api/userVoiceQueue/userVoiceQueue.model.js
server/api/userVoiceQueue/userVoiceQueue.rpc.js
server/api/userVoiceQueueRt/index.js
server/api/userVoiceQueueRt/userVoiceQueueRt.attributes.js
server/api/userVoiceQueueRt/userVoiceQueueRt.events.js
server/api/userVoiceQueueRt/userVoiceQueueRt.model.js
server/api/userVoiceQueueRt/userVoiceQueueRt.rpc.js
server/api/userVoiceQueueRt/userVoiceQueueRt.socket.js
server/api/variable/index.js
server/api/variable/variable.attributes.js
server/api/variable/variable.controller.js
server/api/variable/variable.model.js
server/api/variable/variable.rpc.js
server/api/version/index.js
server/api/version/version.controller.js
server/api/voiceAgentReport/index.js
server/api/voiceAgentReport/voiceAgentReport.attributes.js
server/api/voiceAgentReport/voiceAgentReport.controller.js
server/api/voiceAgentReport/voiceAgentReport.model.js
server/api/voiceAgentReport/voiceAgentReport.rpc.js
server/api/voiceCallReport/index.js
server/api/voiceCallReport/voiceCallReport.attributes.js
server/api/voiceCallReport/voiceCallReport.controller.js
server/api/voiceCallReport/voiceCallReport.model.js
server/api/voiceCallReport/voiceCallReport.rpc.js
server/api/voiceChanSpy/index.js
server/api/voiceChanSpy/voiceChanSpy.attributes.js
server/api/voiceChanSpy/voiceChanSpy.controller.js
server/api/voiceChanSpy/voiceChanSpy.model.js
server/api/voiceChanSpy/voiceChanSpy.rpc.js
server/api/voiceContext/index.js
server/api/voiceContext/voiceContext.attributes.js
server/api/voiceContext/voiceContext.controller.js
server/api/voiceContext/voiceContext.model.js
server/api/voiceContext/voiceContext.rpc.js
server/api/voiceDialReport/index.js
server/api/voiceDialReport/voiceDialReport.attributes.js
server/api/voiceDialReport/voiceDialReport.controller.js
server/api/voiceDialReport/voiceDialReport.model.js
server/api/voiceDialReport/voiceDialReport.rpc.js
server/api/voiceExtension/index.js
server/api/voiceExtension/voiceExtension.attributes.js
server/api/voiceExtension/voiceExtension.controller.js
server/api/voiceExtension/voiceExtension.events.js
server/api/voiceExtension/voiceExtension.model.js
server/api/voiceExtension/voiceExtension.rpc.js
server/api/voiceExtension/voiceExtension.socket.js
server/api/voiceMail/index.js
server/api/voiceMail/voiceMail.attributes.js
server/api/voiceMail/voiceMail.controller.js
server/api/voiceMail/voiceMail.model.js
server/api/voiceMail/voiceMail.rpc.js
server/api/voiceMailMessage/index.js
server/api/voiceMailMessage/voiceMailMessage.attributes.js
server/api/voiceMailMessage/voiceMailMessage.controller.js
server/api/voiceMailMessage/voiceMailMessage.model.js
server/api/voiceMailMessage/voiceMailMessage.rpc.js
server/api/voiceMusicOnHold/index.js
server/api/voiceMusicOnHold/voiceMusicOnHold.attributes.js
server/api/voiceMusicOnHold/voiceMusicOnHold.controller.js
server/api/voiceMusicOnHold/voiceMusicOnHold.model.js
server/api/voiceMusicOnHold/voiceMusicOnHold.rpc.js
server/api/voicePrefix/index.js
server/api/voicePrefix/voicePrefix.attributes.js
server/api/voicePrefix/voicePrefix.controller.js
server/api/voicePrefix/voicePrefix.events.js
server/api/voicePrefix/voicePrefix.model.js
server/api/voicePrefix/voicePrefix.rpc.js
server/api/voicePrefix/voicePrefix.socket.js
server/api/voiceQueue/index.js
server/api/voiceQueue/voiceQueue.attributes.js
server/api/voiceQueue/voiceQueue.controller.js
server/api/voiceQueue/voiceQueue.events.js
server/api/voiceQueue/voiceQueue.model.js
server/api/voiceQueue/voiceQueue.rpc.js
server/api/voiceQueue/voiceQueue.socket.js
server/api/voiceQueueReport/index.js
server/api/voiceQueueReport/voiceQueueReport.attributes.js
server/api/voiceQueueReport/voiceQueueReport.controller.js
server/api/voiceQueueReport/voiceQueueReport.events.js
server/api/voiceQueueReport/voiceQueueReport.model.js
server/api/voiceQueueReport/voiceQueueReport.rpc.js
server/api/voiceQueueReport/voiceQueueReport.socket.js
server/api/voiceQueuesLog/index.js
server/api/voiceQueuesLog/voiceQueuesLog.attributes.js
server/api/voiceQueuesLog/voiceQueuesLog.controller.js
server/api/voiceQueuesLog/voiceQueuesLog.model.js
server/api/voiceQueuesLog/voiceQueuesLog.rpc.js
server/api/voiceRecording/index.js
server/api/voiceRecording/voiceRecording.attributes.js
server/api/voiceRecording/voiceRecording.controller.js
server/api/voiceRecording/voiceRecording.model.js
server/api/voiceRecording/voiceRecording.rpc.js
server/api/voiceTransferReport/index.js
server/api/voiceTransferReport/voiceTransferReport.attributes.js
server/api/voiceTransferReport/voiceTransferReport.controller.js
server/api/voiceTransferReport/voiceTransferReport.model.js
server/api/voiceTransferReport/voiceTransferReport.rpc.js
server/app.js
server/components/auth/service.js
server/components/encryptor/index.js
server/components/export/csv.js
server/components/export/pdf.js
server/components/export/xlsx.js
server/components/extensions/rewrite.js
server/components/import/cm/csv.js
server/components/import/cm/csv2.js
server/components/integrations/configuration.js
server/components/interaction/service.js
server/components/license/service.js
server/components/parsers/qs.js
server/config/express.js
server/config/license/hardware.js
server/config/license/index.js
server/config/license/util.js
server/config/local.env.js
server/config/logger.js
server/config/pm2/config.js
server/config/pm2/index.js
server/config/schedule/chat.js
server/config/schedule/index.js
server/config/seedContact.js
server/config/seedUsers.js
server/config/socketio.js
server/config/triggers/index.js
server/config/utils.js
server/errors/index.js
server/migrations/2.4.3.js [new file with mode: 0644]
server/mysqldb/index.js
server/routes.js
server/rpc/index.js
server/services/agi/channel.js
server/services/agi/error.js
server/services/agi/graph/index.js
server/services/agi/index.js
server/services/agi/mailRpc/index.js
server/services/agi/reply.js
server/services/agi/rpc/index.js
server/services/agi/scripts/aws/index.js
server/services/agi/scripts/aws/lex/index.js
server/services/agi/scripts/aws/lex/lib/api.js
server/services/agi/scripts/aws/polly/index.js
server/services/agi/scripts/aws/polly/lib/api.js
server/services/agi/scripts/google/asr/index.js
server/services/agi/scripts/google/asr/lib/api.js
server/services/agi/scripts/google/index.js
server/services/agi/scripts/index.js
server/services/agi/scripts/sestek/index.js
server/services/agi/scripts/sestek/nda/index.js
server/services/agi/scripts/tilde/asr/index.js
server/services/agi/scripts/tilde/asr/lib/api.js
server/services/agi/scripts/tilde/index.js
server/services/agi/server.js
server/services/agi/vertices.js
server/services/ami/acw/index.js
server/services/ami/ami.js
server/services/ami/client.js
server/services/ami/dialer/action.js
server/services/ami/dialer/agentComplete.js
server/services/ami/dialer/final.js
server/services/ami/dialer/hangup.js
server/services/ami/dialer/history.js
server/services/ami/dialer/index.js
server/services/ami/dialer/queueCallerAbandon.js
server/services/ami/fax/action.js
server/services/ami/fax/index.js
server/services/ami/fax/rpcDb.js
server/services/ami/fax/util/gs.js
server/services/ami/fax/util/util.js
server/services/ami/index.js
server/services/ami/model/agent.js
server/services/ami/model/campaign.js
server/services/ami/model/channel.js
server/services/ami/model/deskAccount.js
server/services/ami/model/dynamics365Account.js
server/services/ami/model/faxAccount.js
server/services/ami/model/freshdeskAccount.js
server/services/ami/model/queueReport.js
server/services/ami/model/salesforceAccount.js
server/services/ami/model/servicenowAccount.js
server/services/ami/model/sugarcrmAccount.js
server/services/ami/model/telephone.js
server/services/ami/model/template.js
server/services/ami/model/trigger.js
server/services/ami/model/trunk.js
server/services/ami/model/voiceExtension.js
server/services/ami/model/voiceQueue.js
server/services/ami/model/vtigerAccount.js
server/services/ami/model/zendeskAccount.js
server/services/ami/model/zohoAccount.js
server/services/ami/preview/action.js
server/services/ami/preview/index.js
server/services/ami/preview/rpcDb.js
server/services/ami/preview/util/util.js
server/services/ami/properties.js
server/services/ami/realtime/index.js
server/services/ami/report/index.js
server/services/ami/report/userReport.js
server/services/ami/report/voiceAgentReport.js
server/services/ami/report/voiceCallReport.js
server/services/ami/report/voiceDialReport.js
server/services/ami/report/voiceQueueReport.js
server/services/ami/rpc/agentReportPreview.js
server/services/ami/rpc/attachment.js
server/services/ami/rpc/campaign.js
server/services/ami/rpc/cmContact.js
server/services/ami/rpc/cmHopper.js
server/services/ami/rpc/cmHopperBlack.js
server/services/ami/rpc/cmHopperFinal.js
server/services/ami/rpc/cmHopperHistory.js
server/services/ami/rpc/faxAccount.js
server/services/ami/rpc/faxMessage.js
server/services/ami/rpc/integrations/desk.js
server/services/ami/rpc/integrations/dynamics365.js
server/services/ami/rpc/integrations/freshdesk.js
server/services/ami/rpc/integrations/salesforce.js
server/services/ami/rpc/integrations/servicenow.js
server/services/ami/rpc/integrations/sugarcrm.js
server/services/ami/rpc/integrations/vtiger.js
server/services/ami/rpc/integrations/zendesk.js
server/services/ami/rpc/integrations/zoho.js
server/services/ami/rpc/memberReport.js
server/services/ami/rpc/template.js
server/services/ami/rpc/trigger.js
server/services/ami/rpc/trunk.js
server/services/ami/rpc/user.js
server/services/ami/rpc/voiceAgentReport.js
server/services/ami/rpc/voiceCallReport.js
server/services/ami/rpc/voiceDialReport.js
server/services/ami/rpc/voiceExtension.js
server/services/ami/rpc/voiceQueue.js
server/services/ami/rpc/voiceQueueReport.js
server/services/ami/rpc/voiceQueueRt.js
server/services/ami/rpc/voiceRecording.js
server/services/ami/rpc/voiceTransferReport.js
server/services/ami/server/index.js
server/services/ami/trigger/cmContact/index.js
server/services/ami/trigger/index.js
server/services/ami/trigger/integration/desk.js
server/services/ami/trigger/integration/dynamics365.js
server/services/ami/trigger/integration/freshdesk.js
server/services/ami/trigger/integration/index.js
server/services/ami/trigger/integration/salesforce.js
server/services/ami/trigger/integration/servicenow.js
server/services/ami/trigger/integration/sugarcrm.js
server/services/ami/trigger/integration/util.js
server/services/ami/trigger/integration/vtiger.js
server/services/ami/trigger/integration/zendesk.js
server/services/ami/trigger/integration/zoho.js
server/services/ami/trigger/script/index.js
server/services/ami/trigger/urlforward/index.js
server/services/email/client.js
server/services/email/index.js
server/services/email/lib/email.js
server/services/email/lib/imap.js
server/services/email/lib/smtp.js
server/services/email/lib/utils.js
server/services/email/model/mailAccount.js
server/services/email/realtime/index.js
server/services/email/rpc/mailAccount.js
server/services/email/server/index.js
server/services/express/index.js
server/services/routing/client.js
server/services/routing/index.js
server/services/routing/lib/rule-engine.js
server/services/routing/mailRpc/index.js
server/services/routing/model/agent.js
server/services/routing/model/chatQueue.js
server/services/routing/model/faxQueue.js
server/services/routing/model/interval.js
server/services/routing/model/mailQueue.js
server/services/routing/model/openchannelQueue.js
server/services/routing/model/smsQueue.js
server/services/routing/realtime/index.js
server/services/routing/rpc/chatInteraction.js
server/services/routing/rpc/chatMessage.js
server/services/routing/rpc/chatQueue.js
server/services/routing/rpc/chatQueueReport.js
server/services/routing/rpc/faxInteraction.js
server/services/routing/rpc/faxMessage.js
server/services/routing/rpc/faxQueue.js
server/services/routing/rpc/faxQueueReport.js
server/services/routing/rpc/interval.js
server/services/routing/rpc/mailInteraction.js
server/services/routing/rpc/mailMessage.js
server/services/routing/rpc/mailQueue.js
server/services/routing/rpc/mailQueueReport.js
server/services/routing/rpc/openchannelInteraction.js
server/services/routing/rpc/openchannelMessage.js
server/services/routing/rpc/openchannelQueue.js
server/services/routing/rpc/openchannelQueueReport.js
server/services/routing/rpc/smsInteraction.js
server/services/routing/rpc/smsMessage.js
server/services/routing/rpc/smsQueue.js
server/services/routing/rpc/smsQueueReport.js
server/services/routing/rpc/user.js
server/services/routing/server/applications/agent.js
server/services/routing/server/applications/amazonlex.js
server/services/routing/server/applications/autoreply.js
server/services/routing/server/applications/close.js
server/services/routing/server/applications/dialogflow.js
server/services/routing/server/applications/gotoif.js
server/services/routing/server/applications/gotop.js
server/services/routing/server/applications/message.js
server/services/routing/server/applications/noop.js
server/services/routing/server/applications/queue.js
server/services/routing/server/applications/strategy/agent.js
server/services/routing/server/applications/strategy/beepall.js
server/services/routing/server/applications/strategy/index.js
server/services/routing/server/applications/strategy/rrmemory.js
server/services/routing/server/applications/strategy/util.js
server/services/routing/server/applications/system.js
server/services/routing/server/applications/tag.js
server/services/routing/server/applications/utils.js
server/services/routing/server/index.js
server/services/routing/server/interval.js
server/services/xdr/agents.controller.js
server/services/xdr/calls.controller.js
server/services/xdr/core.controller.js
server/services/xdr/dials.controller.js
server/services/xdr/index.js
server/services/xdr/members.controller.js
server/services/xdr/queues.controller.js
server/services/xdr/recordings.controller.js
server/services/xdr/transfers.controller.js
server/services/xdr/utils.js

index 719d5e5..f803013 100644 (file)
@@ -1 +1 @@
-define({\r  "name": "xCALLY Motion API",\r  "version": "2.4.2",\r  "description": "Thank you for choosing xCALLY MOTION, one of the first Omni Channel solution integrated with AsteriskTM and the most innovative real time solutions available on the market.",\r  "title": "xCALLY MOTION API",\r  "header": {\r    "title": "Introduction",\r    "content": "<h2>The API</h2>\n<p>This is the documentation for the xCALLY MOTION API.</p>\n<p>We make changes to the APIs from time to time. For more information, see <a href=\"https://wiki.xcallymotion.com/display/XMV/Motion+GUI\">Changelog</a>.</p>\n<p>The xCALLY MOTION API consists of several different APIs. Use the left sidebar menu to select one.</p>\n<p>The API is a JSON API. XML is not supported. To learn more, see [Working with JSON].</p>\n<p>Endpoints are documented with the HTTP method for the request and a partial resource identifier.\nExample:</p>\n<pre><code class=\"language-sh\">GET /api/users\n</code></pre>\n<p>Prepend your xCALLY URL to the resource identifier to get the full endpoint URL:</p>\n<pre><code class=\"language-sh\">https://motion.xcally.com/api/users\n</code></pre>\n<p>Curly braces, <code>{}</code>, indicate values you have to supply. Example:</p>\n<pre><code class=\"language-sh\">GET  /api/users/{id}\n</code></pre>\n<p>The examples in the docs are cURL statements. You can run the statements on a command line to try out different API requests. To learn more, see [Installing and using cURL]. In Windows, you'll need to modify some of the examples in the docs to make them work. See [Using cURL in Windows].</p>\n<p>The examples use basic authentication requiring a xCALLY username and password.</p>\n<h2>Security and Authentication</h2>\n<p>This is an SSL-only API, regardless of how your account is configured. You can authorize against the API using either basic authentication with your username and password or with an OAuth access token or API Key.</p>\n<p>Client-side CORS requests are supported if the request is authenticated with an OAuth access token. The requests are not supported if the request uses basic authentication or API Key.</p>\n<h3>Basic authentication</h3>\n<p>Use the following authentication format with your username and password:\n<code>{username}:{password}</code></p>\n<p>Example:</p>\n<pre><code class=\"language-sh\">curl -u admin:password https://motion.xcally.com/api/users\n</code></pre>\n<h3>OAuth access token</h3>\n<p>The xCALLY API supports OAuth authorization flows.</p>\n<p>OAuth access tokens also permit client-side API requests.</p>\n<p>In your requests, specify the access token in an Authorization header as follows:\n<code>Authorization: Bearer {token}</code></p>\n<p>Example:</p>\n<pre><code class=\"language-sh\">curl -H &quot;Authorization: Bearer gErypPlm4dOVgGRvA1ZzMH5MQ3nLo8bo&quot; https://motion.xcally.com/api/users\n</code></pre>\n<h3>API Key</h3>\n<p>In your request, specify the API Key in apikey query parameter</p>\n<p>Example:</p>\n<pre><code class=\"language-sh\">curl https://motion.xcally.com/api/users?apikey=eyJhbGciOiJIUzUxMiIsInR5cC...\n</code></pre>\n<h2>Request Format</h2>\n<p>The xCALLY API is a JSON API. You must supply a <code>Content-Type: application/json</code> header in <code>PUT</code> and <code>POST</code> requests. You must set an <code>Accept: application/json</code> header on all requests. You may get a <code>text/plain</code> response in case of an error like a bad request. You should treat this as an error you need to fix.</p>\n<h2>Response Format</h2>\n<p>The xCALLY API responds to successful requests with HTTP status codes in the 200 or 300 range. When you create or update a resource, the API renders the resulting JSON representation in the response body.</p>\n<p>Responses may have the status codes described in the following sections.</p>\n<h3>200 range</h3>\n<p>The request was successful. The status is 200 for successful GET and PUT requests, 201 for most POST requests, and 204 for DELETE requests.</p>\n<h3>400 range</h3>\n<p>The request was not successful. The content type of the response may be <code>text/plain</code> for API-level error messages, such as when trying to call the API without SSL. The content type is <code>application/json</code> for business-level error messages because the response includes a JSON object with information about the error.</p>\n<p>If you see a response from a known endpoint that looks like plain text, you probably made a syntax error in your request. This type of response commonly occurs when making a request to a nonexistent xCALLY Support instance.</p>\n<h3>500 range</h3>\n<p>When building an API client, we recommend treating any 500 status codes as a warning or temporary state. However, if the status persists and we don't have a publicly announced maintenance or service disruption, contact us at support@xcally.com.</p>\n<p>If submitting a ticket to Support, provide the complete HTTP response. This helps the Support team track down the request in the logs more quickly.</p>\n<h2>Data Types</h2>\n<p>The API returns and accepts JSON values, which can be strings in double quotes, numbers, objects, arrays, true or false, or null. Most programming languages have tools to parse this data.</p>\n<h2>ID integers</h2>\n<p>Most xCALLY Support resources such as queues and users are identified by the integer specified by the id attribute of API responses.</p>\n<p>The default numeric type in JavaScript, Ruby, Python, and PHP is sufficient to represent xCALLY Support ID integers.</p>\n<h2>Time stamps</h2>\n<p>Time stamps use UTC time and are formatted as ISO 8601 strings. Example: <code>2017-04-16T09:14:57Z</code></p>\n"\r  },\r  "template": {\r    "withGenerator": false,\r    "withCompare": false,\r    "forceLanguage": "en"\r  },\r  "sampleUrl": false,\r  "defaultVersion": "0.0.0",\r  "apidoc": "0.3.0",\r  "generator": {\r    "name": "apidoc",\r    "time": "2020-01-12T15:41:50.104Z",\r    "url": "http://apidocjs.com",\r    "version": "0.17.7"\r  }\r});
+define({\r  "name": "xCALLY Motion API",\r  "version": "2.4.3",\r  "description": "Thank you for choosing xCALLY MOTION, one of the first Omni Channel solution integrated with AsteriskTM and the most innovative real time solutions available on the market.",\r  "title": "xCALLY MOTION API",\r  "header": {\r    "title": "Introduction",\r    "content": "<h2>The API</h2>\n<p>This is the documentation for the xCALLY MOTION API.</p>\n<p>We make changes to the APIs from time to time. For more information, see <a href=\"https://wiki.xcallymotion.com/display/XMV/Motion+GUI\">Changelog</a>.</p>\n<p>The xCALLY MOTION API consists of several different APIs. Use the left sidebar menu to select one.</p>\n<p>The API is a JSON API. XML is not supported. To learn more, see [Working with JSON].</p>\n<p>Endpoints are documented with the HTTP method for the request and a partial resource identifier.\nExample:</p>\n<pre><code class=\"language-sh\">GET /api/users\n</code></pre>\n<p>Prepend your xCALLY URL to the resource identifier to get the full endpoint URL:</p>\n<pre><code class=\"language-sh\">https://motion.xcally.com/api/users\n</code></pre>\n<p>Curly braces, <code>{}</code>, indicate values you have to supply. Example:</p>\n<pre><code class=\"language-sh\">GET  /api/users/{id}\n</code></pre>\n<p>The examples in the docs are cURL statements. You can run the statements on a command line to try out different API requests. To learn more, see [Installing and using cURL]. In Windows, you'll need to modify some of the examples in the docs to make them work. See [Using cURL in Windows].</p>\n<p>The examples use basic authentication requiring a xCALLY username and password.</p>\n<h2>Security and Authentication</h2>\n<p>This is an SSL-only API, regardless of how your account is configured. You can authorize against the API using either basic authentication with your username and password or with an OAuth access token or API Key.</p>\n<p>Client-side CORS requests are supported if the request is authenticated with an OAuth access token. The requests are not supported if the request uses basic authentication or API Key.</p>\n<h3>Basic authentication</h3>\n<p>Use the following authentication format with your username and password:\n<code>{username}:{password}</code></p>\n<p>Example:</p>\n<pre><code class=\"language-sh\">curl -u admin:password https://motion.xcally.com/api/users\n</code></pre>\n<h3>OAuth access token</h3>\n<p>The xCALLY API supports OAuth authorization flows.</p>\n<p>OAuth access tokens also permit client-side API requests.</p>\n<p>In your requests, specify the access token in an Authorization header as follows:\n<code>Authorization: Bearer {token}</code></p>\n<p>Example:</p>\n<pre><code class=\"language-sh\">curl -H &quot;Authorization: Bearer gErypPlm4dOVgGRvA1ZzMH5MQ3nLo8bo&quot; https://motion.xcally.com/api/users\n</code></pre>\n<h3>API Key</h3>\n<p>In your request, specify the API Key in apikey query parameter</p>\n<p>Example:</p>\n<pre><code class=\"language-sh\">curl https://motion.xcally.com/api/users?apikey=eyJhbGciOiJIUzUxMiIsInR5cC...\n</code></pre>\n<h2>Request Format</h2>\n<p>The xCALLY API is a JSON API. You must supply a <code>Content-Type: application/json</code> header in <code>PUT</code> and <code>POST</code> requests. You must set an <code>Accept: application/json</code> header on all requests. You may get a <code>text/plain</code> response in case of an error like a bad request. You should treat this as an error you need to fix.</p>\n<h2>Response Format</h2>\n<p>The xCALLY API responds to successful requests with HTTP status codes in the 200 or 300 range. When you create or update a resource, the API renders the resulting JSON representation in the response body.</p>\n<p>Responses may have the status codes described in the following sections.</p>\n<h3>200 range</h3>\n<p>The request was successful. The status is 200 for successful GET and PUT requests, 201 for most POST requests, and 204 for DELETE requests.</p>\n<h3>400 range</h3>\n<p>The request was not successful. The content type of the response may be <code>text/plain</code> for API-level error messages, such as when trying to call the API without SSL. The content type is <code>application/json</code> for business-level error messages because the response includes a JSON object with information about the error.</p>\n<p>If you see a response from a known endpoint that looks like plain text, you probably made a syntax error in your request. This type of response commonly occurs when making a request to a nonexistent xCALLY Support instance.</p>\n<h3>500 range</h3>\n<p>When building an API client, we recommend treating any 500 status codes as a warning or temporary state. However, if the status persists and we don't have a publicly announced maintenance or service disruption, contact us at support@xcally.com.</p>\n<p>If submitting a ticket to Support, provide the complete HTTP response. This helps the Support team track down the request in the logs more quickly.</p>\n<h2>Data Types</h2>\n<p>The API returns and accepts JSON values, which can be strings in double quotes, numbers, objects, arrays, true or false, or null. Most programming languages have tools to parse this data.</p>\n<h2>ID integers</h2>\n<p>Most xCALLY Support resources such as queues and users are identified by the integer specified by the id attribute of API responses.</p>\n<p>The default numeric type in JavaScript, Ruby, Python, and PHP is sufficient to represent xCALLY Support ID integers.</p>\n<h2>Time stamps</h2>\n<p>Time stamps use UTC time and are formatted as ISO 8601 strings. Example: <code>2017-04-16T09:14:57Z</code></p>\n"\r  },\r  "template": {\r    "withGenerator": false,\r    "withCompare": false,\r    "forceLanguage": "en"\r  },\r  "sampleUrl": false,\r  "defaultVersion": "0.0.0",\r  "apidoc": "0.3.0",\r  "generator": {\r    "name": "apidoc",\r    "time": "2020-01-15T17:14:21.752Z",\r    "url": "http://apidocjs.com",\r    "version": "0.17.7"\r  }\r});
index d94c048..a58dabd 100644 (file)
@@ -1 +1 @@
-{\r  "name": "xCALLY Motion API",\r  "version": "2.4.2",\r  "description": "Thank you for choosing xCALLY MOTION, one of the first Omni Channel solution integrated with AsteriskTM and the most innovative real time solutions available on the market.",\r  "title": "xCALLY MOTION API",\r  "header": {\r    "title": "Introduction",\r    "content": "<h2>The API</h2>\n<p>This is the documentation for the xCALLY MOTION API.</p>\n<p>We make changes to the APIs from time to time. For more information, see <a href=\"https://wiki.xcallymotion.com/display/XMV/Motion+GUI\">Changelog</a>.</p>\n<p>The xCALLY MOTION API consists of several different APIs. Use the left sidebar menu to select one.</p>\n<p>The API is a JSON API. XML is not supported. To learn more, see [Working with JSON].</p>\n<p>Endpoints are documented with the HTTP method for the request and a partial resource identifier.\nExample:</p>\n<pre><code class=\"language-sh\">GET /api/users\n</code></pre>\n<p>Prepend your xCALLY URL to the resource identifier to get the full endpoint URL:</p>\n<pre><code class=\"language-sh\">https://motion.xcally.com/api/users\n</code></pre>\n<p>Curly braces, <code>{}</code>, indicate values you have to supply. Example:</p>\n<pre><code class=\"language-sh\">GET  /api/users/{id}\n</code></pre>\n<p>The examples in the docs are cURL statements. You can run the statements on a command line to try out different API requests. To learn more, see [Installing and using cURL]. In Windows, you'll need to modify some of the examples in the docs to make them work. See [Using cURL in Windows].</p>\n<p>The examples use basic authentication requiring a xCALLY username and password.</p>\n<h2>Security and Authentication</h2>\n<p>This is an SSL-only API, regardless of how your account is configured. You can authorize against the API using either basic authentication with your username and password or with an OAuth access token or API Key.</p>\n<p>Client-side CORS requests are supported if the request is authenticated with an OAuth access token. The requests are not supported if the request uses basic authentication or API Key.</p>\n<h3>Basic authentication</h3>\n<p>Use the following authentication format with your username and password:\n<code>{username}:{password}</code></p>\n<p>Example:</p>\n<pre><code class=\"language-sh\">curl -u admin:password https://motion.xcally.com/api/users\n</code></pre>\n<h3>OAuth access token</h3>\n<p>The xCALLY API supports OAuth authorization flows.</p>\n<p>OAuth access tokens also permit client-side API requests.</p>\n<p>In your requests, specify the access token in an Authorization header as follows:\n<code>Authorization: Bearer {token}</code></p>\n<p>Example:</p>\n<pre><code class=\"language-sh\">curl -H &quot;Authorization: Bearer gErypPlm4dOVgGRvA1ZzMH5MQ3nLo8bo&quot; https://motion.xcally.com/api/users\n</code></pre>\n<h3>API Key</h3>\n<p>In your request, specify the API Key in apikey query parameter</p>\n<p>Example:</p>\n<pre><code class=\"language-sh\">curl https://motion.xcally.com/api/users?apikey=eyJhbGciOiJIUzUxMiIsInR5cC...\n</code></pre>\n<h2>Request Format</h2>\n<p>The xCALLY API is a JSON API. You must supply a <code>Content-Type: application/json</code> header in <code>PUT</code> and <code>POST</code> requests. You must set an <code>Accept: application/json</code> header on all requests. You may get a <code>text/plain</code> response in case of an error like a bad request. You should treat this as an error you need to fix.</p>\n<h2>Response Format</h2>\n<p>The xCALLY API responds to successful requests with HTTP status codes in the 200 or 300 range. When you create or update a resource, the API renders the resulting JSON representation in the response body.</p>\n<p>Responses may have the status codes described in the following sections.</p>\n<h3>200 range</h3>\n<p>The request was successful. The status is 200 for successful GET and PUT requests, 201 for most POST requests, and 204 for DELETE requests.</p>\n<h3>400 range</h3>\n<p>The request was not successful. The content type of the response may be <code>text/plain</code> for API-level error messages, such as when trying to call the API without SSL. The content type is <code>application/json</code> for business-level error messages because the response includes a JSON object with information about the error.</p>\n<p>If you see a response from a known endpoint that looks like plain text, you probably made a syntax error in your request. This type of response commonly occurs when making a request to a nonexistent xCALLY Support instance.</p>\n<h3>500 range</h3>\n<p>When building an API client, we recommend treating any 500 status codes as a warning or temporary state. However, if the status persists and we don't have a publicly announced maintenance or service disruption, contact us at support@xcally.com.</p>\n<p>If submitting a ticket to Support, provide the complete HTTP response. This helps the Support team track down the request in the logs more quickly.</p>\n<h2>Data Types</h2>\n<p>The API returns and accepts JSON values, which can be strings in double quotes, numbers, objects, arrays, true or false, or null. Most programming languages have tools to parse this data.</p>\n<h2>ID integers</h2>\n<p>Most xCALLY Support resources such as queues and users are identified by the integer specified by the id attribute of API responses.</p>\n<p>The default numeric type in JavaScript, Ruby, Python, and PHP is sufficient to represent xCALLY Support ID integers.</p>\n<h2>Time stamps</h2>\n<p>Time stamps use UTC time and are formatted as ISO 8601 strings. Example: <code>2017-04-16T09:14:57Z</code></p>\n"\r  },\r  "template": {\r    "withGenerator": false,\r    "withCompare": false,\r    "forceLanguage": "en"\r  },\r  "sampleUrl": false,\r  "defaultVersion": "0.0.0",\r  "apidoc": "0.3.0",\r  "generator": {\r    "name": "apidoc",\r    "time": "2020-01-12T15:41:50.104Z",\r    "url": "http://apidocjs.com",\r    "version": "0.17.7"\r  }\r}
+{\r  "name": "xCALLY Motion API",\r  "version": "2.4.3",\r  "description": "Thank you for choosing xCALLY MOTION, one of the first Omni Channel solution integrated with AsteriskTM and the most innovative real time solutions available on the market.",\r  "title": "xCALLY MOTION API",\r  "header": {\r    "title": "Introduction",\r    "content": "<h2>The API</h2>\n<p>This is the documentation for the xCALLY MOTION API.</p>\n<p>We make changes to the APIs from time to time. For more information, see <a href=\"https://wiki.xcallymotion.com/display/XMV/Motion+GUI\">Changelog</a>.</p>\n<p>The xCALLY MOTION API consists of several different APIs. Use the left sidebar menu to select one.</p>\n<p>The API is a JSON API. XML is not supported. To learn more, see [Working with JSON].</p>\n<p>Endpoints are documented with the HTTP method for the request and a partial resource identifier.\nExample:</p>\n<pre><code class=\"language-sh\">GET /api/users\n</code></pre>\n<p>Prepend your xCALLY URL to the resource identifier to get the full endpoint URL:</p>\n<pre><code class=\"language-sh\">https://motion.xcally.com/api/users\n</code></pre>\n<p>Curly braces, <code>{}</code>, indicate values you have to supply. Example:</p>\n<pre><code class=\"language-sh\">GET  /api/users/{id}\n</code></pre>\n<p>The examples in the docs are cURL statements. You can run the statements on a command line to try out different API requests. To learn more, see [Installing and using cURL]. In Windows, you'll need to modify some of the examples in the docs to make them work. See [Using cURL in Windows].</p>\n<p>The examples use basic authentication requiring a xCALLY username and password.</p>\n<h2>Security and Authentication</h2>\n<p>This is an SSL-only API, regardless of how your account is configured. You can authorize against the API using either basic authentication with your username and password or with an OAuth access token or API Key.</p>\n<p>Client-side CORS requests are supported if the request is authenticated with an OAuth access token. The requests are not supported if the request uses basic authentication or API Key.</p>\n<h3>Basic authentication</h3>\n<p>Use the following authentication format with your username and password:\n<code>{username}:{password}</code></p>\n<p>Example:</p>\n<pre><code class=\"language-sh\">curl -u admin:password https://motion.xcally.com/api/users\n</code></pre>\n<h3>OAuth access token</h3>\n<p>The xCALLY API supports OAuth authorization flows.</p>\n<p>OAuth access tokens also permit client-side API requests.</p>\n<p>In your requests, specify the access token in an Authorization header as follows:\n<code>Authorization: Bearer {token}</code></p>\n<p>Example:</p>\n<pre><code class=\"language-sh\">curl -H &quot;Authorization: Bearer gErypPlm4dOVgGRvA1ZzMH5MQ3nLo8bo&quot; https://motion.xcally.com/api/users\n</code></pre>\n<h3>API Key</h3>\n<p>In your request, specify the API Key in apikey query parameter</p>\n<p>Example:</p>\n<pre><code class=\"language-sh\">curl https://motion.xcally.com/api/users?apikey=eyJhbGciOiJIUzUxMiIsInR5cC...\n</code></pre>\n<h2>Request Format</h2>\n<p>The xCALLY API is a JSON API. You must supply a <code>Content-Type: application/json</code> header in <code>PUT</code> and <code>POST</code> requests. You must set an <code>Accept: application/json</code> header on all requests. You may get a <code>text/plain</code> response in case of an error like a bad request. You should treat this as an error you need to fix.</p>\n<h2>Response Format</h2>\n<p>The xCALLY API responds to successful requests with HTTP status codes in the 200 or 300 range. When you create or update a resource, the API renders the resulting JSON representation in the response body.</p>\n<p>Responses may have the status codes described in the following sections.</p>\n<h3>200 range</h3>\n<p>The request was successful. The status is 200 for successful GET and PUT requests, 201 for most POST requests, and 204 for DELETE requests.</p>\n<h3>400 range</h3>\n<p>The request was not successful. The content type of the response may be <code>text/plain</code> for API-level error messages, such as when trying to call the API without SSL. The content type is <code>application/json</code> for business-level error messages because the response includes a JSON object with information about the error.</p>\n<p>If you see a response from a known endpoint that looks like plain text, you probably made a syntax error in your request. This type of response commonly occurs when making a request to a nonexistent xCALLY Support instance.</p>\n<h3>500 range</h3>\n<p>When building an API client, we recommend treating any 500 status codes as a warning or temporary state. However, if the status persists and we don't have a publicly announced maintenance or service disruption, contact us at support@xcally.com.</p>\n<p>If submitting a ticket to Support, provide the complete HTTP response. This helps the Support team track down the request in the logs more quickly.</p>\n<h2>Data Types</h2>\n<p>The API returns and accepts JSON values, which can be strings in double quotes, numbers, objects, arrays, true or false, or null. Most programming languages have tools to parse this data.</p>\n<h2>ID integers</h2>\n<p>Most xCALLY Support resources such as queues and users are identified by the integer specified by the id attribute of API responses.</p>\n<p>The default numeric type in JavaScript, Ruby, Python, and PHP is sufficient to represent xCALLY Support ID integers.</p>\n<h2>Time stamps</h2>\n<p>Time stamps use UTC time and are formatted as ISO 8601 strings. Example: <code>2017-04-16T09:14:57Z</code></p>\n"\r  },\r  "template": {\r    "withGenerator": false,\r    "withCompare": false,\r    "forceLanguage": "en"\r  },\r  "sampleUrl": false,\r  "defaultVersion": "0.0.0",\r  "apidoc": "0.3.0",\r  "generator": {\r    "name": "apidoc",\r    "time": "2020-01-15T17:14:21.752Z",\r    "url": "http://apidocjs.com",\r    "version": "0.17.7"\r  }\r}
index e483223..41e4969 100644 (file)
@@ -1,6 +1,6 @@
 {
     "name": "motion",
-    "version": "2.4.2",
+    "version": "2.4.3",
     "description": "xCALLY Motion is the new Realtime asynchronous solution for your multichannel contact center over Asterisk.",
     "main": "server/app.js",
     "engines": {
index cf45d27..4bb4606 100644 (file)
         "OVERWRITE": "الكتابة فوق",
         "SAVE_AS_DRAFT": "حفظ كمسودة",
         "UNTITLED": "بدون عنوان",
-        "UPDATE_DRAFT": "تحديث المسودة"
+        "UPDATE_DRAFT": "تحديث المسودة",
+        "NO_AVAILABLE_INTERACTION": "لا يوجد تفاعل متاح"
     }
 }
\ No newline at end of file
index fdb2d13..98cdd77 100644 (file)
         "OVERWRITE": "Overskriv",
         "SAVE_AS_DRAFT": "Gem som kladde",
         "UNTITLED": "Untitled",
-        "UPDATE_DRAFT": "Opdater udkast"
+        "UPDATE_DRAFT": "Opdater udkast",
+        "NO_AVAILABLE_INTERACTION": "Ingen tilgængelig interaktion"
     }
 }
\ No newline at end of file
index 7aa6541..f7d5195 100644 (file)
         "OVERWRITE": "Überschreiben",
         "SAVE_AS_DRAFT": "Als Entwurf speichern",
         "UNTITLED": "Ohne Titel",
-        "UPDATE_DRAFT": "Entwurf aktualisieren"
+        "UPDATE_DRAFT": "Entwurf aktualisieren",
+        "NO_AVAILABLE_INTERACTION": "Keine verfügbare Interaktion"
     }
 }
\ No newline at end of file
index 7a8b1e3..2610b6e 100644 (file)
         "CANCEL": "Cancel",
         "UNTITLED": "Untitled",
         "SAVE_AS_DRAFT": "Save as draft",
-        "UPDATE_DRAFT": "Update draft"
+        "UPDATE_DRAFT": "Update draft",
+        "NO_AVAILABLE_INTERACTION": "No available interaction"
     }
 }
\ No newline at end of file
index 1d3b6f1..0590f5b 100644 (file)
         "OVERWRITE": "Sobrescribir",
         "SAVE_AS_DRAFT": "Guardar como borrador",
         "UNTITLED": "Intitulado",
-        "UPDATE_DRAFT": "Actualizar borrador"
+        "UPDATE_DRAFT": "Actualizar borrador",
+        "NO_AVAILABLE_INTERACTION": "No hay interacción disponible."
     }
 }
\ No newline at end of file
index 6343fd7..a0dd696 100644 (file)
         "OVERWRITE": "زیاد نوشتن",
         "SAVE_AS_DRAFT": "ذخیره به عنوان پیش نویس",
         "UNTITLED": "بدون عنوان",
-        "UPDATE_DRAFT": "پیش نویس را به روز کنید"
+        "UPDATE_DRAFT": "پیش نویس را به روز کنید",
+        "NO_AVAILABLE_INTERACTION": "تعامل در دسترس نیست"
     }
 }
\ No newline at end of file
index c789a52..3c457b9 100644 (file)
         "OVERWRITE": "päälleäänittävän",
         "SAVE_AS_DRAFT": "Tallenna luonnoksena",
         "UNTITLED": "nimetön",
-        "UPDATE_DRAFT": "Päivitä luonnos"
+        "UPDATE_DRAFT": "Päivitä luonnos",
+        "NO_AVAILABLE_INTERACTION": "Ei käytettävissä olevaa vuorovaikutusta"
     }
 }
\ No newline at end of file
index 39535f7..9b67de1 100644 (file)
         "OVERWRITE": "Écraser",
         "SAVE_AS_DRAFT": "Enregistrer comme brouillon",
         "UNTITLED": "Sans titre",
-        "UPDATE_DRAFT": "Mettre à jour le brouillon"
+        "UPDATE_DRAFT": "Mettre à jour le brouillon",
+        "NO_AVAILABLE_INTERACTION": "Aucune interaction disponible"
     }
 }
\ No newline at end of file
index 1d44f43..f28abcc 100644 (file)
         "OVERWRITE": "להחליף",
         "SAVE_AS_DRAFT": "לשמור כטיוטה",
         "UNTITLED": "ללא כותרת",
-        "UPDATE_DRAFT": "עדכן טיוטה"
+        "UPDATE_DRAFT": "עדכן טיוטה",
+        "NO_AVAILABLE_INTERACTION": "אין אינטראקציה זמינה"
     }
 }
\ No newline at end of file
index 12577d2..9019e29 100644 (file)
         "OVERWRITE": "ओवरराइट",
         "SAVE_AS_DRAFT": "मसौदे के रूप में संचित करें",
         "UNTITLED": "शीर्षकहीन",
-        "UPDATE_DRAFT": "ड्राफ्ट अपडेट करें"
+        "UPDATE_DRAFT": "ड्राफ्ट अपडेट करें",
+        "NO_AVAILABLE_INTERACTION": "उपलब्ध बातचीत नहीं"
     }
 }
\ No newline at end of file
index f2cf017..daaca78 100644 (file)
         "OVERWRITE": "Timpa",
         "SAVE_AS_DRAFT": "Simpan sebagai draf",
         "UNTITLED": "Tanpa judul",
-        "UPDATE_DRAFT": "Perbarui konsep"
+        "UPDATE_DRAFT": "Perbarui konsep",
+        "NO_AVAILABLE_INTERACTION": "Tidak ada interaksi yang tersedia"
     }
 }
\ No newline at end of file
index 29e31c1..a880266 100644 (file)
         "CANCEL": "Annulla",
         "UNTITLED": "Senza nome",
         "SAVE_AS_DRAFT": "Salva come bozza",
-        "UPDATE_DRAFT": "Aggiorna bozza"
+        "UPDATE_DRAFT": "Aggiorna bozza",
+        "NO_AVAILABLE_INTERACTION": "Nessuna interazione disponibile"
     }
 }
\ No newline at end of file
index 6655332..184d3a0 100644 (file)
         "OVERWRITE": "上書きする",
         "SAVE_AS_DRAFT": "下書きとして保存",
         "UNTITLED": "無題",
-        "UPDATE_DRAFT": "下書きを更新"
+        "UPDATE_DRAFT": "下書きを更新",
+        "NO_AVAILABLE_INTERACTION": "利用可能なインタラクションがありません"
     }
 }
\ No newline at end of file
index 3de6203..898005f 100644 (file)
         "OVERWRITE": "덮어 쓰기",
         "SAVE_AS_DRAFT": "임시 보관함에 저장",
         "UNTITLED": "제목 없음",
-        "UPDATE_DRAFT": "초안 업데이트"
+        "UPDATE_DRAFT": "초안 업데이트",
+        "NO_AVAILABLE_INTERACTION": "사용 가능한 상호 작용이 없습니다."
     }
 }
\ No newline at end of file
index b9ba556..2afd86f 100644 (file)
         "OVERWRITE": "Pārrakstīt",
         "SAVE_AS_DRAFT": "Saglabāt kā melnrakstu",
         "UNTITLED": "Bez nosaukuma",
-        "UPDATE_DRAFT": "Atjaunināt melnrakstu"
+        "UPDATE_DRAFT": "Atjaunināt melnrakstu",
+        "NO_AVAILABLE_INTERACTION": "Nav pieejama mijiedarbība"
     }
 }
\ No newline at end of file
index 1dc4299..1eed4c3 100644 (file)
         "OVERWRITE": "overschrijven",
         "SAVE_AS_DRAFT": "Opslaan als concept",
         "UNTITLED": "Ongetiteld",
-        "UPDATE_DRAFT": "Concept bijwerken"
+        "UPDATE_DRAFT": "Concept bijwerken",
+        "NO_AVAILABLE_INTERACTION": "Geen beschikbare interactie"
     }
 }
\ No newline at end of file
index 8a8be50..29f8b6b 100644 (file)
         "OVERWRITE": "Overskriv",
         "SAVE_AS_DRAFT": "Lagre som kladd",
         "UNTITLED": "Uten navn",
-        "UPDATE_DRAFT": "Oppdater utkast"
+        "UPDATE_DRAFT": "Oppdater utkast",
+        "NO_AVAILABLE_INTERACTION": "Ingen tilgjengelige samhandlinger"
     }
 }
\ No newline at end of file
index 7f3f0e7..927d778 100644 (file)
         "OVERWRITE": "Przepisać",
         "SAVE_AS_DRAFT": "Zapisz jako szkic",
         "UNTITLED": "Nieuprawny",
-        "UPDATE_DRAFT": "Zaktualizuj wersję roboczą"
+        "UPDATE_DRAFT": "Zaktualizuj wersję roboczą",
+        "NO_AVAILABLE_INTERACTION": "Brak dostępnych interakcji"
     }
 }
\ No newline at end of file
index befc1d9..7815737 100644 (file)
         "OVERWRITE": "Substituir",
         "SAVE_AS_DRAFT": "Salvar como rascunho",
         "UNTITLED": "Sem título",
-        "UPDATE_DRAFT": "Atualizar rascunho"
+        "UPDATE_DRAFT": "Atualizar rascunho",
+        "NO_AVAILABLE_INTERACTION": "Nenhuma interação disponível"
     }
 }
\ No newline at end of file
index 356ce6e..bde2bb7 100644 (file)
         "OVERWRITE": "Substituir",
         "SAVE_AS_DRAFT": "Salvar como rascunho",
         "UNTITLED": "Sem título",
-        "UPDATE_DRAFT": "Atualizar rascunho"
+        "UPDATE_DRAFT": "Atualizar rascunho",
+        "NO_AVAILABLE_INTERACTION": "Nenhuma interação disponível"
     }
 }
\ No newline at end of file
index eb17f21..d7cfb48 100644 (file)
         "OVERWRITE": "Переписать",
         "SAVE_AS_DRAFT": "Сохранить как черновик",
         "UNTITLED": "Без названия",
-        "UPDATE_DRAFT": "Обновить черновик"
+        "UPDATE_DRAFT": "Обновить черновик",
+        "NO_AVAILABLE_INTERACTION": "Нет доступного взаимодействия"
     }
 }
\ No newline at end of file
index c17d28c..6a4cba8 100644 (file)
         "OVERWRITE": "Skriva över",
         "SAVE_AS_DRAFT": "Spara som utkast",
         "UNTITLED": "Ofrälse",
-        "UPDATE_DRAFT": "Uppdatera utkastet"
+        "UPDATE_DRAFT": "Uppdatera utkastet",
+        "NO_AVAILABLE_INTERACTION": "Ingen tillgänglig interaktion"
     }
 }
\ No newline at end of file
index 0656aa4..5546a5a 100644 (file)
         "OVERWRITE": "Üzerine Yaz",
         "SAVE_AS_DRAFT": "Taslak olarak kaydet",
         "UNTITLED": "Başlıksız",
-        "UPDATE_DRAFT": "Taslağı güncelle"
+        "UPDATE_DRAFT": "Taslağı güncelle",
+        "NO_AVAILABLE_INTERACTION": "Kullanılabilir etkileşim yok"
     }
 }
\ No newline at end of file
index b1da543..8573214 100644 (file)
         "OVERWRITE": "覆写",
         "SAVE_AS_DRAFT": "保存为草稿",
         "UNTITLED": "无标题",
-        "UPDATE_DRAFT": "更新草稿"
+        "UPDATE_DRAFT": "更新草稿",
+        "NO_AVAILABLE_INTERACTION": "没有可用的互动"
     }
 }
\ No newline at end of file
index c49fc97..13af065 100644 (file)
         "OVERWRITE": "覆寫",
         "SAVE_AS_DRAFT": "保存為草稿",
         "UNTITLED": "無標題",
-        "UPDATE_DRAFT": "更新草稿"
+        "UPDATE_DRAFT": "更新草稿",
+        "NO_AVAILABLE_INTERACTION": "沒有可用的互動"
     }
 }
\ No newline at end of file
index c322171..30dc1bb 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "مسار تسجيل الشاشة",
         "SCREENRECORDING": "تسجيل الشاشة",
         "VIDEO": "فيديو",
-        "ALLOWEDLOGINATTEMPTS": "محاولات تسجيل الدخول المسموح بها قبل قفل المستخدم",
         "BLOCKDURATION": "دقائق للانتظار قبل الفتح التلقائي",
-        "SECURITY": "الأمان"
+        "SECURITY": "الأمان",
+        "ALLOWEDLOGINATTEMPTS": "محاولات تسجيل الدخول المسموح بها قبل قفل المستخدم / الوكيل"
     }
 }
\ No newline at end of file
index 2406ba5..20dd972 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Skærmoptagelsessti",
         "SCREENRECORDING": "Skærmoptagelse",
         "VIDEO": "video",
-        "ALLOWEDLOGINATTEMPTS": "Tilladte loginforsøg, før brugeren låses",
         "BLOCKDURATION": "Minutter, der skal vente, før automatisk oplåsning",
-        "SECURITY": "Sikkerhed"
+        "SECURITY": "Sikkerhed",
+        "ALLOWEDLOGINATTEMPTS": "Tilladte loginforsøg, før bruger / agent låses"
     }
 }
\ No newline at end of file
index bce9685..d9701b7 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Bildschirmaufzeichnungspfad",
         "SCREENRECORDING": "Bildschirmaufnahme",
         "VIDEO": "Video",
-        "ALLOWEDLOGINATTEMPTS": "Zulässige Anmeldeversuche vor dem Sperren des Benutzers",
         "BLOCKDURATION": "Minuten vor dem automatischen Entsperren warten",
-        "SECURITY": "Sicherheit"
+        "SECURITY": "Sicherheit",
+        "ALLOWEDLOGINATTEMPTS": "Zulässige Anmeldeversuche vor dem Sperren des Benutzers / Agenten"
     }
 }
\ No newline at end of file
index 04b4ae1..897fa8a 100644 (file)
         "ENTER_LICENSE": "Enter your license",
         "UPDATE_LICENSE_MANUALLY": "Do you want to update your license manually?",
         "SECURITY": "Security",
-        "ALLOWEDLOGINATTEMPTS": "Allowed login attempts before locking the user",
+        "ALLOWEDLOGINATTEMPTS": "Allowed login attempts before locking the user/agent",
         "BLOCKDURATION": "Minutes to wait before automatic unlock"
     }
 }
\ No newline at end of file
index ecfea13..02e2282 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Ruta de grabación de pantalla",
         "SCREENRECORDING": "Grabación de pantalla",
         "VIDEO": "Vídeo",
-        "ALLOWEDLOGINATTEMPTS": "Intentos de inicio de sesión permitidos antes de bloquear al usuario",
         "BLOCKDURATION": "Minutos para esperar antes del desbloqueo automático",
-        "SECURITY": "Seguridad"
+        "SECURITY": "Seguridad",
+        "ALLOWEDLOGINATTEMPTS": "Intentos de inicio de sesión permitidos antes de bloquear al usuario / agente"
     }
 }
\ No newline at end of file
index bfd7fb0..16b994b 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "مسیر ضبط صفحه",
         "SCREENRECORDING": "ضبط صفحه",
         "VIDEO": "فیلم",
-        "ALLOWEDLOGINATTEMPTS": "قبل از قفل کردن کاربر ، ورود به سیستم مجاز است",
         "BLOCKDURATION": "دقیقه قبل از باز کردن قفل خودکار صبر کنید",
-        "SECURITY": "امنیت"
+        "SECURITY": "امنیت",
+        "ALLOWEDLOGINATTEMPTS": "ورود به سیستم مجاز قبل از قفل کردن کاربر / نماینده است"
     }
 }
\ No newline at end of file
index 32daa75..2992aea 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Näytön tallennuspolku",
         "SCREENRECORDING": "Näytön tallennus",
         "VIDEO": "Video",
-        "ALLOWEDLOGINATTEMPTS": "Sallitut kirjautumisyritykset ennen käyttäjän lukitsemista",
         "BLOCKDURATION": "Minuutin odottaa ennen automaattista lukituksen avaamista",
-        "SECURITY": "turvallisuus"
+        "SECURITY": "turvallisuus",
+        "ALLOWEDLOGINATTEMPTS": "Sallitut kirjautumisyritykset ennen käyttäjän / edustajan lukitsemista"
     }
 }
\ No newline at end of file
index f86b64d..e305f56 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Chemin d'enregistrement d'écran",
         "SCREENRECORDING": "Enregistrement d'écran",
         "VIDEO": "Vidéo",
-        "ALLOWEDLOGINATTEMPTS": "Tentatives de connexion autorisées avant de verrouiller l'utilisateur",
         "BLOCKDURATION": "Minutes à attendre avant le déverrouillage automatique",
-        "SECURITY": "Sécurité"
+        "SECURITY": "Sécurité",
+        "ALLOWEDLOGINATTEMPTS": "Tentatives de connexion autorisées avant de verrouiller l'utilisateur / l'agent"
     }
 }
\ No newline at end of file
index 6dbce38..b30ccdb 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "נתיב הקלטת מסך",
         "SCREENRECORDING": "הקלטת מסך",
         "VIDEO": "וידאו",
-        "ALLOWEDLOGINATTEMPTS": "ניסיונות כניסה מותרים לפני נעילת המשתמש",
         "BLOCKDURATION": "דקות להמתין לפני הנעילה האוטומטית",
-        "SECURITY": "אבטחה"
+        "SECURITY": "אבטחה",
+        "ALLOWEDLOGINATTEMPTS": "ניסיונות כניסה מורשים לפני נעילת המשתמש / סוכן"
     }
 }
\ No newline at end of file
index 7f4817a..41eeea6 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "स्क्रीन रिकॉर्डिंग पथ",
         "SCREENRECORDING": "स्क्रीन रिकॉर्डिंग",
         "VIDEO": "वीडियो",
-        "ALLOWEDLOGINATTEMPTS": "उपयोगकर्ता को लॉक करने से पहले अनुमत लॉगिन प्रयास",
         "BLOCKDURATION": "स्वचालित अनलॉक से पहले प्रतीक्षा करने के लिए मिनट",
-        "SECURITY": "सुरक्षा"
+        "SECURITY": "सुरक्षा",
+        "ALLOWEDLOGINATTEMPTS": "उपयोगकर्ता / एजेंट को लॉक करने से पहले अनुमत लॉगिन प्रयास"
     }
 }
\ No newline at end of file
index 20fbba6..d96c16e 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Jalur Perekaman Layar",
         "SCREENRECORDING": "Rekaman Layar",
         "VIDEO": "Video",
-        "ALLOWEDLOGINATTEMPTS": "Upaya masuk yang diizinkan sebelum mengunci pengguna",
         "BLOCKDURATION": "Beberapa menit untuk menunggu sebelum membuka kunci otomatis",
-        "SECURITY": "Keamanan"
+        "SECURITY": "Keamanan",
+        "ALLOWEDLOGINATTEMPTS": "Upaya masuk yang diizinkan sebelum mengunci pengguna / agen"
     }
 }
\ No newline at end of file
index 4d6a136..201e25b 100644 (file)
         "ENTER_LICENSE": "Inserisci la licenza",
         "UPDATE_LICENSE_MANUALLY": "Vuoi aggiornare la licenza manualmente?",
         "SECURITY": "Sicurezza",
-        "ALLOWEDLOGINATTEMPTS": "Tentativi di login permessi prima del blocco dell'utente",
-        "BLOCKDURATION": "Tempo necessario prima dello sblocco automatico"
+        "BLOCKDURATION": "Tempo necessario prima dello sblocco automatico",
+        "ALLOWEDLOGINATTEMPTS": "Tentativi di accesso consentiti prima di bloccare l'utente / agente"
     }
 }
\ No newline at end of file
index d8a226e..d467901 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "画面記録パス",
         "SCREENRECORDING": "スクリーン録画",
         "VIDEO": "ビデオ",
-        "ALLOWEDLOGINATTEMPTS": "ユーザーをロックする前に許可されたログイン試行",
         "BLOCKDURATION": "自動ロック解除までの待機時間",
-        "SECURITY": "セキュリティ"
+        "SECURITY": "セキュリティ",
+        "ALLOWEDLOGINATTEMPTS": "ユーザー/エージェントをロックする前に許可されたログイン試行"
     }
 }
\ No newline at end of file
index 43e3633..95eec6f 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "화면 녹화 경로",
         "SCREENRECORDING": "화면 녹화",
         "VIDEO": "비디오",
-        "ALLOWEDLOGINATTEMPTS": "사용자를 잠그기 전에 허용 된 로그인 시도",
         "BLOCKDURATION": "자동 잠금 해제 전 대기 시간",
-        "SECURITY": "보안"
+        "SECURITY": "보안",
+        "ALLOWEDLOGINATTEMPTS": "사용자 / 에이전트를 잠그기 전에 허용 된 로그인 시도"
     }
 }
\ No newline at end of file
index 5802b87..f795bbe 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Ekrāna ierakstīšanas ceļš",
         "SCREENRECORDING": "Ekrāna ierakstīšana",
         "VIDEO": "Video",
-        "ALLOWEDLOGINATTEMPTS": "Pirms lietotāja bloķēšanas atļauti pieteikšanās mēģinājumi",
         "BLOCKDURATION": "Pirms automātiskās atbloķēšanas jāgaida minūtes",
-        "SECURITY": "Drošība"
+        "SECURITY": "Drošība",
+        "ALLOWEDLOGINATTEMPTS": "Pirms lietotāja / aģenta bloķēšanas atļauti pieteikšanās mēģinājumi"
     }
 }
\ No newline at end of file
index 0ebfaf3..c1fd96f 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Scherm voor schermopname",
         "SCREENRECORDING": "Schermopname",
         "VIDEO": "Video",
-        "ALLOWEDLOGINATTEMPTS": "Toegestane inlogpogingen voordat de gebruiker wordt vergrendeld",
         "BLOCKDURATION": "Minuten wachten voordat automatisch ontgrendelen",
-        "SECURITY": "Veiligheid"
+        "SECURITY": "Veiligheid",
+        "ALLOWEDLOGINATTEMPTS": "Toegestane inlogpogingen voordat de gebruiker / agent wordt vergrendeld"
     }
 }
\ No newline at end of file
index 2cbdd2e..deca8ee 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Skjermopptaksbane",
         "SCREENRECORDING": "Skjermopptak",
         "VIDEO": "video",
-        "ALLOWEDLOGINATTEMPTS": "Tillatte påloggingsforsøk før du låser brukeren",
         "BLOCKDURATION": "Minutter å vente før automatisk opplåsing",
-        "SECURITY": "Sikkerhet"
+        "SECURITY": "Sikkerhet",
+        "ALLOWEDLOGINATTEMPTS": "Tillatte påloggingsforsøk før du låser brukeren / agenten"
     }
 }
\ No newline at end of file
index 964f1cf..957ddd3 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Ścieżka nagrywania ekranu",
         "SCREENRECORDING": "Nagrywanie ekranu",
         "VIDEO": "Wideo",
-        "ALLOWEDLOGINATTEMPTS": "Dozwolone próby logowania przed zablokowaniem użytkownika",
         "BLOCKDURATION": "Minuty oczekiwania przed automatycznym odblokowaniem",
-        "SECURITY": "Bezpieczeństwo"
+        "SECURITY": "Bezpieczeństwo",
+        "ALLOWEDLOGINATTEMPTS": "Dozwolone próby logowania przed zablokowaniem użytkownika / agenta"
     }
 }
\ No newline at end of file
index 19dd853..83097fc 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Caminho de gravação de tela",
         "SCREENRECORDING": "Gravação de tela",
         "VIDEO": "Vídeo",
-        "ALLOWEDLOGINATTEMPTS": "Tentativas de login permitidas antes de bloquear o usuário",
         "BLOCKDURATION": "Minutos para esperar antes do desbloqueio automático",
-        "SECURITY": "Segurança"
+        "SECURITY": "Segurança",
+        "ALLOWEDLOGINATTEMPTS": "Tentativas de login permitidas antes de bloquear o usuário / agente"
     }
 }
\ No newline at end of file
index 19e13bd..75e02b4 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Caminho de gravação de tela",
         "SCREENRECORDING": "Gravação de tela",
         "VIDEO": "Vídeo",
-        "ALLOWEDLOGINATTEMPTS": "Tentativas de login permitidas antes de bloquear o usuário",
         "BLOCKDURATION": "Minutos para esperar antes do desbloqueio automático",
-        "SECURITY": "Segurança"
+        "SECURITY": "Segurança",
+        "ALLOWEDLOGINATTEMPTS": "Tentativas de login permitidas antes de bloquear o usuário / agente"
     }
 }
\ No newline at end of file
index 902449b..a10dced 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Путь записи экрана",
         "SCREENRECORDING": "Запись экрана",
         "VIDEO": "видео",
-        "ALLOWEDLOGINATTEMPTS": "Разрешенные попытки входа в систему перед блокировкой пользователя",
         "BLOCKDURATION": "Минуты ожидания до автоматической разблокировки",
-        "SECURITY": "Безопасность"
+        "SECURITY": "Безопасность",
+        "ALLOWEDLOGINATTEMPTS": "Разрешенные попытки входа в систему перед блокировкой пользователя / агента"
     }
 }
\ No newline at end of file
index 61e7fe5..55cd0c9 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Skärminspelningsväg",
         "SCREENRECORDING": "Skärminspelning",
         "VIDEO": "Video",
-        "ALLOWEDLOGINATTEMPTS": "Tillåtna inloggningsförsök innan användaren låses",
         "BLOCKDURATION": "Minuter att vänta innan automatisk upplåsning",
-        "SECURITY": "säkerhet"
+        "SECURITY": "säkerhet",
+        "ALLOWEDLOGINATTEMPTS": "Tillåtna inloggningsförsök innan användaren / agenten låses"
     }
 }
\ No newline at end of file
index 6dd1d21..1088bd4 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "Ekran kayıt yolu",
         "SCREENRECORDING": "Ekran kayıt",
         "VIDEO": "Video",
-        "ALLOWEDLOGINATTEMPTS": "Kullanıcıyı kilitlemeden önce izin verilen giriş denemeleri",
         "BLOCKDURATION": "Otomatik kilit açma işleminden önce beklenecek dakika",
-        "SECURITY": "Güvenlik"
+        "SECURITY": "Güvenlik",
+        "ALLOWEDLOGINATTEMPTS": "Kullanıcıyı / aracıyı kilitlemeden önce izin verilen giriş denemeleri"
     }
 }
\ No newline at end of file
index 0053414..d19c497 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "屏幕记录路径",
         "SCREENRECORDING": "屏幕录像",
         "VIDEO": "视频",
-        "ALLOWEDLOGINATTEMPTS": "锁定用户之前允许登录尝试",
         "BLOCKDURATION": "分钟,然后等待自动解锁",
-        "SECURITY": "安全"
+        "SECURITY": "安全",
+        "ALLOWEDLOGINATTEMPTS": "锁定用户/代理之前允许的登录尝试"
     }
 }
\ No newline at end of file
index 471d45c..a86c33f 100644 (file)
         "DEFAULTSCREENRECORDINGPATH": "屏幕記錄路徑",
         "SCREENRECORDING": "屏幕錄像",
         "VIDEO": "視頻",
-        "ALLOWEDLOGINATTEMPTS": "鎖定用戶之前允許登錄嘗試",
         "BLOCKDURATION": "分鐘,然後等待自動解鎖",
-        "SECURITY": "安全"
+        "SECURITY": "安全",
+        "ALLOWEDLOGINATTEMPTS": "鎖定用戶/代理之前允許的登錄嘗試"
     }
 }
\ No newline at end of file
index a4fa48e..44405b2 100644 (file)
@@ -63,8 +63,8 @@
             "CUSTOM_DASHBOARDS_PERMISSIONS": "تتم إدارة أذونات Dashboards المخصصة في وحدة الأدوات",
             "APIKEY": "يرجى استخدام زر \"API key manager\" على شريط الأدوات لإدارة هذا المفتاح",
             "ENABLEAUTOMATICSCREENRECORDING": "تتوفر الوظيفة للقناة الصوتية فقط",
-            "BLOCKED": "قم بالتبديل إلى حظر / إلغاء حظر المستخدم مؤقتًا",
-            "DISABLED": "التبديل إلى تعطيل / تنشيط المستخدم بشكل دائم"
+            "BLOCKED": "قم بإيقاف التشغيل لفتح حساب محظور",
+            "DISABLED": "تعطيل / تمكين الحساب"
         },
         "ADD_AGENT": "إضافة ممثل خدمة",
         "ADD_USER": "إضافة المستخدم",
index 617a3b3..988b0c0 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Tilpassede Dashboards tilladelser administreres i modulet Værktøjer",
             "APIKEY": "Brug knappen 'API-nøglemanager' på værktøjslinjen til at administrere denne nøgle",
             "ENABLEAUTOMATICSCREENRECORDING": "Funktionaliteten er kun tilgængelig for stemmekanal",
-            "BLOCKED": "Skift til midlertidigt blokering / fjernelse af blokering af bruger",
-            "DISABLED": "Skift til permanent deaktivere / aktivere bruger"
+            "BLOCKED": "Sluk for at låse en blokeret konto op",
+            "DISABLED": "Deaktiver / aktiver kontoen"
         },
         "NEW_PASSWORD": "Ny adgangskode",
         "CONFIRM_PASSWORD": "Bekræft adgangskode",
index 661f051..631771b 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Berechtigungen für benutzerdefinierte Dashboards werden im Modul Tools verwaltet",
             "APIKEY": "Verwenden Sie die Schaltfläche \"API-Schlüsselmanager\" in der Symbolleiste, um diesen Schlüssel zu verwalten",
             "ENABLEAUTOMATICSCREENRECORDING": "Die Funktionalität ist nur für Sprachkanäle verfügbar",
-            "BLOCKED": "Zum vorübergehenden Sperren / Entsperren des Benutzers wechseln",
-            "DISABLED": "Zum dauerhaften Deaktivieren / Aktivieren des Benutzers wechseln"
+            "BLOCKED": "Ausschalten, um ein gesperrtes Konto zu entsperren",
+            "DISABLED": "Deaktivieren / Aktivieren Sie das Konto"
         },
         "NEW_PASSWORD": "Neues Kennwort",
         "CONFIRM_PASSWORD": "Passwort bestätigen",
index 6d083ba..7fe8cce 100644 (file)
         "DISABLED": "Disabled",
         "BLOCKED": "Blocked",
         "HELP": {
-            "DISABLED": "Switch to permanently disable / activate user",
-            "BLOCKED": "Switch to temporarily block / unblock user",
+            "DISABLED": "Disable/Enable the account",
+            "BLOCKED": "Switch off to unlock a blocked account",
             "APIKEY": "Please use 'API key manager' button on toolbar to manage this key",
             "LAST_PASSWORD_RESET_AT": "Last date and time the password has been changed. If Secure Suite General Setting is enabled, the password will expire after 90 days.",
             "DTLSCERTFILE": "Link to the valid TLS certificate(.crt file). Default value: '/etc/pki/tls/certs/motion.crt'.",
index cc3474f..b3d553a 100644 (file)
@@ -24,8 +24,8 @@
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Los permisos de paneles personalizados se administran en el módulo Herramientas",
             "APIKEY": "Utilice el botón 'API key manager' en la barra de herramientas para administrar esta clave",
             "ENABLEAUTOMATICSCREENRECORDING": "La funcionalidad solo está disponible para el canal de voz",
-            "BLOCKED": "Cambiar para bloquear / desbloquear temporalmente al usuario",
-            "DISABLED": "Cambiar a deshabilitar / activar permanentemente al usuario"
+            "BLOCKED": "Desactivar para desbloquear una cuenta bloqueada",
+            "DISABLED": "Deshabilitar / Habilitar la cuenta"
         },
         "ERRORS": {
             "ACCOUNTNAME_REQUIRED": "Campo obligatorio",
index 3ea64ab..a4db600 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "مجوزهای داشبوردهای سفارشی در ماژول Tools مدیریت می شوند",
             "APIKEY": "لطفاً برای مدیریت این کلید از دکمه \"مدیر کلید API\" در نوار ابزار استفاده کنید",
             "ENABLEAUTOMATICSCREENRECORDING": "این عملکرد فقط برای کانال صوتی در دسترس است",
-            "BLOCKED": "به کاربر موقتاً مسدود / انسداد تغییر دهید",
-            "DISABLED": "به کاربر غیرفعال یا فعال کردن دائمی تغییر دهید"
+            "BLOCKED": "خاموش شود تا حساب مسدود شده را باز کنید",
+            "DISABLED": "غیرفعال کردن / فعال کردن حساب"
         },
         "NEW_PASSWORD": "اسم رمز جدید",
         "CONFIRM_PASSWORD": "تأیید رمز ورود",
index 5d99aee..3ab2719 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Mukautettujen hallintapaneelien käyttöoikeuksia hallitaan Työkalut-moduulissa",
             "APIKEY": "Käytä työkalurivin API-avainten hallinta -painiketta tämän avaimen hallintaan",
             "ENABLEAUTOMATICSCREENRECORDING": "Toiminto on saatavana vain äänikanaville",
-            "BLOCKED": "Vaihda käyttäjän väliaikaiseen estämiseen / poistamiseen",
-            "DISABLED": "Vaihda käyttäjän pysyvään käytöstä poistamiseen / aktivointiin"
+            "BLOCKED": "Sammuta tili, kun haluat lukita tilin",
+            "DISABLED": "Poista tili käytöstä / ota se käyttöön"
         },
         "NEW_PASSWORD": "Uusi salasana",
         "CONFIRM_PASSWORD": "Vahvista salasana",
index 6c6f1ec..5cc18b5 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Les autorisations de tableaux de bord personnalisés sont gérées dans le module Outils",
             "APIKEY": "Veuillez utiliser le bouton 'Gestionnaire de clés d'API' sur la barre d'outils pour gérer cette clé.",
             "ENABLEAUTOMATICSCREENRECORDING": "La fonctionnalité est disponible uniquement pour le canal vocal",
-            "BLOCKED": "Passer pour bloquer / débloquer temporairement l'utilisateur",
-            "DISABLED": "Passer pour désactiver / activer définitivement l'utilisateur"
+            "BLOCKED": "Désactiver pour déverrouiller un compte bloqué",
+            "DISABLED": "Désactiver / activer le compte"
         },
         "NEW_PASSWORD": "Nouveau mot de passe",
         "CONFIRM_PASSWORD": "Confirmer le mot de passe",
index 551a9dc..83e2d8a 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "הרשאות לוח המחוונים המותאמות אישית מנוהלות במודול הכלים",
             "APIKEY": "אנא השתמש בכפתור 'מנהל מקש API' בסרגל הכלים כדי לנהל מפתח זה",
             "ENABLEAUTOMATICSCREENRECORDING": "הפונקציונליות זמינה רק לערוץ קולי",
-            "BLOCKED": "עבור לחסימה / ביטול חסימה של משתמש באופן זמני",
-            "DISABLED": "עבור להשבית / הפעלה של משתמש לצמיתות"
+            "BLOCKED": "כבה לביטול נעילת חשבון חסום",
+            "DISABLED": "השבת / הפעל את החשבון"
         },
         "NEW_PASSWORD": "סיסמה חדשה",
         "CONFIRM_PASSWORD": "אשר סיסמה",
index 734c6c6..d8eb14f 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "कस्टम डैशबोर्ड अनुमतियाँ टूल मॉड्यूल में प्रबंधित की जाती हैं",
             "APIKEY": "कृपया इस कुंजी को प्रबंधित करने के लिए टूलबार पर 'एपीआई कुंजी प्रबंधक' बटन का उपयोग करें",
             "ENABLEAUTOMATICSCREENRECORDING": "कार्यक्षमता केवल वॉयस चैनल के लिए उपलब्ध है",
-            "BLOCKED": "उपयोगकर्ता को अस्थायी रूप से ब्लॉक / अनब्लॉक करने के लिए स्विच करें",
-            "DISABLED": "उपयोगकर्ता को स्थायी रूप से अक्षम / सक्रिय करने के लिए स्विच करें"
+            "BLOCKED": "अवरुद्ध खाते को अनलॉक करने के लिए स्विच ऑफ करें",
+            "DISABLED": "खाता अक्षम / सक्षम करें"
         },
         "NEW_PASSWORD": "नया पासवर्ड",
         "CONFIRM_PASSWORD": "पासवर्ड की पुष्टि करें:",
index 02dfea5..3b51536 100644 (file)
@@ -63,8 +63,8 @@
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Izin Dasbor Kustom dikelola dalam modul Alat",
             "APIKEY": "Silakan gunakan tombol 'Manajer kunci API' pada bilah alat untuk mengelola kunci ini",
             "ENABLEAUTOMATICSCREENRECORDING": "Fungsionalitas hanya tersedia untuk saluran suara",
-            "BLOCKED": "Beralih ke untuk sementara memblokir / membuka blokir pengguna",
-            "DISABLED": "Beralih ke menonaktifkan / mengaktifkan pengguna secara permanen"
+            "BLOCKED": "Nonaktifkan untuk membuka kunci akun yang diblokir",
+            "DISABLED": "Nonaktifkan / Aktifkan akun"
         },
         "ACCOUNT": "Rekening",
         "ACCOUNTNAME": "Nama akun",
index 5a009c7..27b0861 100644 (file)
         "DISABLED": "Disabilitato",
         "BLOCKED": "Bloccato",
         "HELP": {
-            "DISABLED": "Seleziona per abilitare / disabilitare permanentemente l'utente",
-            "BLOCKED": "Seleziona per bloccare / sbloccare temporaneamente l'utente",
             "LAST_PASSWORD_RESET_AT": "Ultimo cambio password. Se la Suite Sicurezza nelle Impostazioni Generali è stata abilitata, la password scadrà dopo 90 giorni",
             "DTLSCERTFILE": "Link al certificato valido TLS(.crt file). Valore di default: '/etc/pki/tls/certs/motion.crt'.",
             "DTLSPRIVATEKEY": "Link alla chiave privata del certificato TLS(.key file). Valore di default: '/etc/pki/tls/private/motion.key'.",
             "SAVE_PERMISSIONS": "Ogni sezione che ha delle modifiche in sospeso verrà salvata",
             "CUSTOM_DASHBOARDS_PERMISSIONS": "I permessi delle Custom Dashboards sono gestiti nel modulo Tools",
             "APIKEY": "Utilizzare il pulsante \"Gestione API Key\" sulla barra degli strumenti per gestire questa chiave",
-            "ENABLEAUTOMATICSCREENRECORDING": " La funzionalità è attiva solo per il canale voce"
+            "ENABLEAUTOMATICSCREENRECORDING": " La funzionalità è attiva solo per il canale voce",
+            "BLOCKED": "Spegni per sbloccare un account bloccato",
+            "DISABLED": "Disabilita / Abilita l'account"
         },
         "NEW_PASSWORD": "Nuova Password",
         "CONFIRM_PASSWORD": "Conferma Password",
index 4b64292..32ce33c 100644 (file)
@@ -63,8 +63,8 @@
             "CUSTOM_DASHBOARDS_PERMISSIONS": "カスタムダッシュボードの権限は、ツールモジュールで管理されます",
             "APIKEY": "このキーを管理するには、ツールバーの「APIキーマネージャー」ボタンを使用してください",
             "ENABLEAUTOMATICSCREENRECORDING": "この機能は音声チャンネルでのみ利用可能です",
-            "BLOCKED": "ユーザーを一時的にブロック/ブロック解除する切り替え",
-            "DISABLED": "ユーザーを永続的に無効化/有効化するスイッチ"
+            "BLOCKED": "ブロックされたアカウントのロックを解除するには、スイッチをオフにしてください",
+            "DISABLED": "アカウントを無効/有効にする"
         },
         "ACCOUNT": "アカウント",
         "ACCOUNTNAME": "アカウント名",
index 9fd43b7..7f7c51e 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "사용자 정의 대시 보드 권한은 도구 모듈에서 관리됩니다.",
             "APIKEY": "이 키를 관리하려면 툴바의 'API 키 관리자'버튼을 사용하십시오",
             "ENABLEAUTOMATICSCREENRECORDING": "이 기능은 음성 채널에만 사용할 수 있습니다",
-            "BLOCKED": "사용자를 일시적으로 차단 / 차단 해제로 전환",
-            "DISABLED": "사용자를 영구적으로 비활성화 / 활성화로 전환"
+            "BLOCKED": "차단 된 계정을 잠금 해제하려면 끄십시오",
+            "DISABLED": "계정 비활성화 / 활성화"
         },
         "NEW_PASSWORD": "신규 비밀번호",
         "CONFIRM_PASSWORD": "비밀번호 확인",
index 26801ff..632b9bb 100644 (file)
@@ -63,8 +63,8 @@
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Pielāgotu informācijas paneļu atļaujas tiek pārvaldītas modulī Rīki",
             "APIKEY": "Lai pārvaldītu šo atslēgu, izmantojiet rīkjoslas pogu “API atslēgu pārvaldnieks”",
             "ENABLEAUTOMATICSCREENRECORDING": "Funkcija ir pieejama tikai balss kanālam",
-            "BLOCKED": "Pārslēgties uz īslaicīgu lietotāja bloķēšanu / atbloķēšanu",
-            "DISABLED": "Pārslēgties uz pastāvīgu lietotāja deaktivizēšanu / aktivizēšanu"
+            "BLOCKED": "Izslēdziet, lai atbloķētu bloķētu kontu",
+            "DISABLED": "Atspējot / iespējot kontu"
         },
         "NO_PASSWORD_CHANGE": "Nav paroles maiņas",
         "SECURITY_SUITE": "Drošības komplekts",
index 71e4c09..55baeb0 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Aangepaste Dashboards-machtigingen worden beheerd in de module Tools",
             "APIKEY": "Gebruik de knop 'API-sleutelbeheer' op de werkbalk om deze sleutel te beheren",
             "ENABLEAUTOMATICSCREENRECORDING": "De functionaliteit is alleen beschikbaar voor spraakkanaal",
-            "BLOCKED": "Schakel over om gebruiker tijdelijk te blokkeren / deblokkeren",
-            "DISABLED": "Schakel over naar permanent uitschakelen / activeren gebruiker"
+            "BLOCKED": "Schakel uit om een geblokkeerde account te ontgrendelen",
+            "DISABLED": "Schakel het account uit / in"
         },
         "NEW_PASSWORD": "Nieuw wachtwoord",
         "CONFIRM_PASSWORD": "Wachtwoord bevestigen",
index 06da81a..74ad686 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Tilpassede Dashboards-tillatelser administreres i Verktøy-modulen",
             "APIKEY": "Bruk knappen API-nøkkelbehandling på verktøylinjen for å administrere denne nøkkelen",
             "ENABLEAUTOMATICSCREENRECORDING": "Funksjonaliteten er bare tilgjengelig for talekanal",
-            "BLOCKED": "Bytt til midlertidig blokkering / oppheving av blokkering av bruker",
-            "DISABLED": "Bytt til permanent deaktivere / aktivere brukeren"
+            "BLOCKED": "Slå av for å låse opp en blokkert konto",
+            "DISABLED": "Deaktiver / aktiver kontoen"
         },
         "NEW_PASSWORD": "Nytt passord",
         "CONFIRM_PASSWORD": "Bekreft passord",
index 6951e99..72cb038 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Niestandardowymi uprawnieniami do paneli kontrolnych zarządza się w module Narzędzia",
             "APIKEY": "Użyj przycisku „Menedżer kluczy API” na pasku narzędzi, aby zarządzać tym kluczem",
             "ENABLEAUTOMATICSCREENRECORDING": "Ta funkcja jest dostępna tylko dla kanału głosowego",
-            "BLOCKED": "Przełącz, aby tymczasowo zablokować / odblokować użytkownika",
-            "DISABLED": "Przełącz, aby trwale wyłączyć / aktywować użytkownika"
+            "BLOCKED": "Wyłącz, aby odblokować zablokowane konto",
+            "DISABLED": "Wyłącz / Włącz konto"
         },
         "NEW_PASSWORD": "Nowe hasło",
         "CONFIRM_PASSWORD": "Potwierdź hasło",
index 2de20ee..1aa1986 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "As permissões de painéis personalizados são gerenciadas no módulo Ferramentas",
             "APIKEY": "Use o botão 'API key manager' na barra de ferramentas para gerenciar essa chave",
             "ENABLEAUTOMATICSCREENRECORDING": "A funcionalidade está disponível apenas para canal de voz",
-            "BLOCKED": "Mudar para bloquear / desbloquear temporariamente o usuário",
-            "DISABLED": "Alterne para desativar / ativar permanentemente o usuário"
+            "BLOCKED": "Desative para desbloquear uma conta bloqueada",
+            "DISABLED": "Desativar / Ativar a conta"
         },
         "NEW_PASSWORD": "Nova Senha",
         "CONFIRM_PASSWORD": "Confirmar a Senha",
index b8cfd32..c9f0b88 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "As permissões de painéis personalizados são gerenciadas no módulo Ferramentas",
             "APIKEY": "Use o botão 'API key manager' na barra de ferramentas para gerenciar essa chave",
             "ENABLEAUTOMATICSCREENRECORDING": "A funcionalidade está disponível apenas para canal de voz",
-            "BLOCKED": "Mudar para bloquear / desbloquear temporariamente o usuário",
-            "DISABLED": "Alterne para desativar / ativar permanentemente o usuário"
+            "BLOCKED": "Desative para desbloquear uma conta bloqueada",
+            "DISABLED": "Desativar / Ativar a conta"
         },
         "NEW_PASSWORD": "Nova Senha",
         "CONFIRM_PASSWORD": "Confirmar Senha",
index 0a75959..2563dd8 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Пользовательские разрешения Dashboards управляются в модуле Инструменты",
             "APIKEY": "Пожалуйста, используйте кнопку «API key manager» на панели инструментов для управления этим ключом",
             "ENABLEAUTOMATICSCREENRECORDING": "Функциональность доступна только для голосового канала",
-            "BLOCKED": "Переключиться на временную блокировку / разблокировку пользователя",
-            "DISABLED": "Переключить на постоянное отключение / активацию пользователя"
+            "BLOCKED": "Выключите, чтобы разблокировать заблокированный аккаунт",
+            "DISABLED": "Отключить / Включить учетную запись"
         },
         "NEW_PASSWORD": "Новый пароль",
         "CONFIRM_PASSWORD": "Подтвердите пароль",
index 815d2a6..58095a3 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Anpassade Dashboards-behörigheter hanteras i Verktygsmodulen",
             "APIKEY": "Använd knappen \"API-nyckelhanterare\" i verktygsfältet för att hantera den här nyckeln",
             "ENABLEAUTOMATICSCREENRECORDING": "Funktionaliteten är endast tillgänglig för röstkanal",
-            "BLOCKED": "Byt till att tillfälligt blockera / avblockera användaren",
-            "DISABLED": "Byt till permanent avaktivera / aktivera användare"
+            "BLOCKED": "Stäng av för att låsa upp ett blockerat konto",
+            "DISABLED": "Inaktivera / aktivera kontot"
         },
         "NEW_PASSWORD": "Nytt lösenord",
         "CONFIRM_PASSWORD": "Bekräfta lösenord",
index 6f8cb1b..fbc50ef 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Özel Pano izinleri Araçlar modülünde yönetilir",
             "APIKEY": "Lütfen bu anahtarı yönetmek için araç çubuğundaki 'API anahtar yöneticisi' düğmesini kullanın",
             "ENABLEAUTOMATICSCREENRECORDING": "İşlevsellik yalnızca ses kanalı için kullanılabilir.",
-            "BLOCKED": "Geçici olarak kullanıcıyı engelle / engelini kaldır",
-            "DISABLED": "Kullanıcıyı kalıcı olarak devre dışı bırakmak / etkinleştirmek için geçiş yapın"
+            "BLOCKED": "Engellenen bir hesabın kilidini açmak için kapatın",
+            "DISABLED": "Hesabı devre dışı bırak / etkinleştir"
         },
         "NEW_PASSWORD": "Yeni Parola",
         "CONFIRM_PASSWORD": "Parolayı Onayla",
index dde3182..dac734e 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "自定义仪表板权限在“工具”模块中进行管理",
             "APIKEY": "请使用工具栏上的“API密钥管理器”按钮来管理此密钥",
             "ENABLEAUTOMATICSCREENRECORDING": "该功能仅适用于语音通道",
-            "BLOCKED": "切换为临时阻止/取消阻止用户",
-            "DISABLED": "切换为永久禁用/激活用户"
+            "BLOCKED": "关闭以解锁被阻止的帐户",
+            "DISABLED": "禁用/启用帐户"
         },
         "NEW_PASSWORD": "新的密码。",
         "CONFIRM_PASSWORD": "确认密码",
index 6f43bba..d1b217b 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "自定義儀表板權限在“工具”模塊中進行管理",
             "APIKEY": "請使用工具欄上的“API密鑰管理器”按鈕來管理此密鑰",
             "ENABLEAUTOMATICSCREENRECORDING": "該功能僅適用於語音通道",
-            "BLOCKED": "切換為臨時阻止/取消阻止用戶",
-            "DISABLED": "切換為永久禁用/激活用戶"
+            "BLOCKED": "關閉以解鎖被阻止的帳戶",
+            "DISABLED": "禁用/啟用帳戶"
         },
         "NEW_PASSWORD": "新密碼",
         "CONFIRM_PASSWORD": "確認密碼",
index 3717b03..3ea874c 100644 (file)
@@ -58,7 +58,7 @@
 
     <script src="scripts/vendor.340e778b.js"></script>
 
-    <script src="scripts/app.bef8ee9b.js"></script>
+    <script src="scripts/app.60c6cd52.js"></script>
 
     <!-- CKEDITOR -->
     <script src="assets/plugins/ckeditor/ckeditor.js"></script>
similarity index 90%
rename from public/scripts/app.bef8ee9b.js
rename to public/scripts/app.60c6cd52.js
index 42781c6..07743a2 100644 (file)
@@ -1 +1 @@
-!function(){"use strict";angular.module("app.auth",[])}(),function(){"use strict";angular.module("app.core",["ngAnimate","ngAria","ngCookies","ngMessages","ngResource","ngSanitize","ngMaterial","pascalprecht.translate","ui.router","gridster","ds.clock","angucomplete-alt"])}(),function(){"use strict";function e(e,t){e.state("app.errors_error-404",{url:"/errors/error-404",views:{"main@":{templateUrl:"app/core/layouts/content-only.html",controller:"MainController as vm"},"content@app.errors_error-404":{templateUrl:"app/errors/404/error-404.html",controller:"Error404Controller as vm"}},params:{status:404,statusText:"",data:{},config:{}},bodyClass:"error-404"}),t.addPart("app/errors/404")}e.$inject=["$stateProvider","$translatePartialLoaderProvider"],angular.module("app.errors.error-404",[]).config(e)}(),function(){"use strict";function e(e,t){e.state("app.errors_error-500",{url:"/errors/error-500",views:{"main@":{templateUrl:"app/core/layouts/content-only.html",controller:"MainController as vm"},"content@app.errors_error-500":{templateUrl:"app/errors/500/error-500.html",controller:"Error500Controller as vm"}},params:{status:500,statusText:"",data:{},config:{}},bodyClass:"error-500"}),t.addPart("app/errors/500")}e.$inject=["$stateProvider","$translatePartialLoaderProvider"],angular.module("app.errors.error-500",[]).config(e)}(),function(){"use strict";angular.module("app.errors",["app.errors.error-404","app.errors.error-500"])}(),function(){"use strict";function e(e){e.addPart("app/footer")}e.$inject=["$translatePartialLoaderProvider"],angular.module("app.footer",[]).config(e)}(),function(){"use strict";function e(e,t){e.state("app.forgot",{url:"/forgot",views:{"main@":{templateUrl:"app/core/layouts/content-only.html",controller:"MainController as vm"},"content@app.forgot":{templateUrl:"app/forgot/forgot.html",controller:"ForgotPasswordController as vm"}},bodyClass:"forgot"}),t.addPart("app/forgot")}e.$inject=["$stateProvider","$translatePartialLoaderProvider"],angular.module("app.forgot",[]).config(e)}(),function(){"use strict";function e(e){e.addPart("app/header")}e.$inject=["$translatePartialLoaderProvider"],angular.module("app.header",[]).config(e)}(),function(){"use strict";angular.module("motion",["angular-toasty","app.core","app.auth","app.navigation","app.toolbar","app.quick-panel","app.header","app.footer","app.dashboards","app.staff","app.contactmanager","app.voice","app.chat","app.mail","app.sms","app.openchannel","app.fax","app.tools","app.callysquare","app.analytics","app.integrations","app.settings","app.motiondialer","app.help","app.jscripty","app.marketplace","app.plugins","app.video","app.login","app.forgot","app.reset","app.errors"])}(),function(){"use strict";function e(e,t){e.state("app.login",{url:"/login?token&userId",views:{"main@":{templateUrl:"app/core/layouts/content-only.html",controller:"MainController as vm"},"content@app.login":{templateUrl:"app/login/login.html",controller:"LoginController as vm"}},bodyClass:"login"}),t.addPart("app/login")}e.$inject=["$stateProvider","$translatePartialLoaderProvider"],angular.module("app.login",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.analytics",{abstract:!0,url:"/analytics"}).state("app.analytics.metrics",{url:"/metrics",views:{"content@app":{templateUrl:"app/main/apps/analytics/views/metrics/metrics.html",controller:"MetricsController as vm"}},resolve:{metrics:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("analyticMetric@get",{fields:"createdAt,updatedAt,id,name,table,metric,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Metrics",fields:"createdAt,updatedAt,id,name,table,metric,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1201})}]},authenticate:!0,permissionId:1201,bodyClass:"analytics"}).state("app.analytics.extractedReports",{url:"/extractedReports",views:{"content@app":{templateUrl:"app/main/apps/analytics/views/extractedReports/extractedReports.html",controller:"ExtractedReportsController as vm"}},resolve:{extractedReports:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("analyticExtractedReport@get",{fields:"createdAt,updatedAt,id,name,basename,savename,type,startDate,endDate,status,output,reportId,reportType",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ExtractedReports",fields:"createdAt,updatedAt,id,name,basename,savename,type,startDate,endDate,status,output,reportId,reportType",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1202})}]},authenticate:!0,permissionId:1202,bodyClass:"analytics"}),t.addPart("app/main/apps/analytics")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.analytics",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.analytics.reports"]).config(e)}(),function(){"use strict";function e(e){e.state("app.analytics.reports",{url:"/reports",views:{"content@app":{templateUrl:"app/main/apps/analytics/views/reports/reports.html",controller:"ReportsController as vm"}},resolve:{treeReports:["apiResolver",function(e){return e.resolve("analyticTreeReport@get",{fields:"id,tree",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1203})}]},authenticate:!0,permissionId:1203,bodyClass:"analytics"}).state("app.analytics.reports.edit",{url:"/:id?tab",views:{"content@app":{templateUrl:"app/main/apps/analytics/views/reports/edit/view.html",controller:"ReportController as vm"}},resolve:{report:["apiResolver","$stateParams","$q","describeTable",function(e,t,a,i){var s;return e.resolve("analyticCustomReport@get",{fields:"createdAt,updatedAt,id,name,description,table,conditions,joins",id:t.id}).then(function(e){var t=[];if((s=e).joins)try{s.joins=JSON.parse(s.joins);for(var n=0;n<s.joins.length;n+=1)t.push(i.getColumns(s.joins[n].foreignTable))}catch(e){console.log(e)}return a.all(t)}).then(function(e){for(var t=0;t<e.length;t+=1)s.joins[t].foreignTableFields=_.difference(_.keys(e[t]),["$promise","$resolved"]);return s})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1203})}]},authenticate:!0,permissionId:1203,bodyClass:"analytics"})}e.$inject=["$stateProvider"],angular.module("app.analytics.reports",["ngJsTree"]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.callysquare",{abstract:!0,url:"/callysquare"}).state("app.callysquare.odbcs",{url:"/odbcs",views:{"content@app":{templateUrl:"app/main/apps/callysquare/views/odbcs/odbcs.html",controller:"OdbcsController as vm"}},resolve:{odbcs:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("squareOdbc@get",{fields:"createdAt,updatedAt,id,name,dsn,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ODBC",fields:"createdAt,updatedAt,id,name,dsn,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1101})}]},authenticate:!0,permissionId:1101,bodyClass:"callysquare"}).state("app.callysquare.squareRecordings",{url:"/squareRecordings",views:{"content@app":{templateUrl:"app/main/apps/callysquare/views/squareRecordings/squareRecordings.html",controller:"SquareRecordingsController as vm"}},resolve:{squareRecordings:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("squareRecording@get",{fields:"createdAt,updatedAt,id,filename,projectName,uniqueid,callerid,extension,audio",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SquareRecordings",fields:"createdAt,updatedAt,id,filename,projectName,uniqueid,callerid,extension,audio",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1102})}]},authenticate:!0,permissionId:1102,bodyClass:"callysquare"}),t.addPart("app/main/apps/callysquare")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.callysquare",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.callysquare.projects"]).config(e)}(),function(){"use strict";function e(e){e.state("app.callysquare.projects",{url:"/projects",views:{"content@app":{templateUrl:"app/main/apps/callysquare/views/projects/projects.html",controller:"ProjectsController as vm"}},resolve:{projects:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("squareProject@get",{fields:"id,name,description,notes",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SquareProjects",fields:"id,name,description,notes",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1103})}]},authenticate:!0,permissionId:1103,bodyClass:"callysquare"}).state("app.callysquare.projects.edit",{url:"/:id",views:{"content@app":{templateUrl:"app/main/apps/callysquare/views/projects/edit/view.html",controller:"ProjectController as vm"}},params:{crudPermissions:void 0},resolve:{project:["apiResolver","$stateParams",function(e,t){return e.resolve("squareProject@get",{id:t.id})}],users:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,fullname,role",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Users",mergeResources:!0,fields:"id,fullname,role",sort:"name",nolimit:!0})}],trunks:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("trunk@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Trunks",fields:"id,name",sort:"name",nolimit:!0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"inbound",fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",type:"inbound",fields:"id,name",sort:"name",nolimit:!0})}],sounds:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("sound@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Sounds",fields:"id,name",sort:"name",nolimit:!0})}],variables:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("variable@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Variables",fields:"id,name",sort:"name",nolimit:!0})}],databases:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("squareOdbc@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ODBC",fields:"id,name",sort:"name",nolimit:!0})}],projects:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("squareProject@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SquareProjects",fields:"id,name",sort:"name",nolimit:!0})}],contexts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceContext@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Contexts",fields:"id,name",sort:"name",nolimit:!0})}],intervals:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("interval@get",{fields:"id,name,IntervalId",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Intervals",fields:"id,name,IntervalId",sort:"name",nolimit:!0})}],mailAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailAccount@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MailAccounts",fields:"id,name",sort:"name",nolimit:!0})}],templates:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("template@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Templates",fields:"id,name",sort:"name",nolimit:!0})}],lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Lists",fields:"id,name",sort:"name",nolimit:!0})}],smsAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("smsAccount@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SmsAccounts",fields:"id,name",sort:"name",nolimit:!0})}],pauses:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("pause@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Pauses",fields:"id,name",sort:"name",nolimit:!0})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1103})}]},authenticate:!0,permissionId:1103,bodyClass:"callysquare"})}e.$inject=["$stateProvider"],angular.module("app.callysquare.projects",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.chat",{abstract:!0,url:"/chat"}).state("app.chat.chatQueues",{url:"/chatQueues",views:{"content@app":{templateUrl:"app/main/apps/chat/views/chatQueues/chatQueues.html",controller:"ChatQueuesController as vm"}},resolve:{chatQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("chatQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"chat",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ChatQueues",fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"chat",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:501})}]},authenticate:!0,permissionId:501,bodyClass:"chat"}).state("app.chat.chatQueues.edit",{url:"/:id?tab",params:{chatQueue:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/chat/views/chatQueues/edit/view.html",controller:"ChatQueueController as vm"}},resolve:{chatQueue:["apiResolver","$stateParams",function(e,t){return e.resolve("chatQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:501})}]},authenticate:!0,permissionId:501,bodyClass:"chat"}).state("app.chat.chatWebsites",{url:"/chatWebsites",views:{"content@app":{templateUrl:"app/main/apps/chat/views/chatWebsites/chatWebsites.html",controller:"ChatWebsitesController as vm"}},resolve:{chatWebsites:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("chatWebsite@get",{fields:"createdAt,updatedAt,id,token,agentIdentifier,customerAlias,messageFontSize,name,key,address,remote,ListId,fidelity,timeout,agentAlias,closingQuestion,formSubmitSuccessMessage,formSubmitFailureMessage,color,color_focus,color_button,textColor,backgroundColor,fontSize,header_shape,showAgentAvatar,showCustomerAvatar,alignment,verticalAlignment,messagesAlignment,defaultTitle,animation,defaultWhiteLabel,whiteLabel,defaultLogo,conditionAgreement,autoclose,enableUnmanagedNote,unmanagedMessage,skipUnmanaged,sendUnmanaged,enableCustomerWriting,waitingTitle,waitingMessage,closingMessage,noteTitle,placeholderMessage,skipMessageButton,enableRating,ratingType,ratingStarsNumber,enableFeedback,forwardTranscript,forwardTranscriptMessage,closingMessageButton,download_transcript,enableCustomerAttachment,enableCustomerCheckmarks,systemAlias,enquiry_enable,enquiry_forwarding,enquiry_forwarding_address,name_title,username_placeholder,email_title,email_placeholder,header_online,hideWhenOffline,header_offline,start_chat_button,offline_chat_button,offlineMessageSubject,offlineMessageBody,offline_message,message_title,enquiry_message_placeholder,enquiry_button,rating_message,rating_send,rating_skip,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ChatWebsites",fields:"createdAt,updatedAt,id,token,agentIdentifier,customerAlias,messageFontSize,name,key,address,remote,ListId,fidelity,timeout,agentAlias,closingQuestion,formSubmitSuccessMessage,formSubmitFailureMessage,color,color_focus,color_button,textColor,backgroundColor,fontSize,header_shape,showAgentAvatar,showCustomerAvatar,alignment,verticalAlignment,messagesAlignment,defaultTitle,animation,defaultWhiteLabel,whiteLabel,defaultLogo,conditionAgreement,autoclose,enableUnmanagedNote,unmanagedMessage,skipUnmanaged,sendUnmanaged,enableCustomerWriting,waitingTitle,waitingMessage,closingMessage,noteTitle,placeholderMessage,skipMessageButton,enableRating,ratingType,ratingStarsNumber,enableFeedback,forwardTranscript,forwardTranscriptMessage,closingMessageButton,download_transcript,enableCustomerAttachment,enableCustomerCheckmarks,systemAlias,enquiry_enable,enquiry_forwarding,enquiry_forwarding_address,name_title,username_placeholder,email_title,email_placeholder,header_online,hideWhenOffline,header_offline,start_chat_button,offline_chat_button,offlineMessageSubject,offlineMessageBody,offline_message,message_title,enquiry_message_placeholder,enquiry_button,rating_message,rating_send,rating_skip,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:502})}]},authenticate:!0,permissionId:502,bodyClass:"chat"}).state("app.chat.chatWebsites.edit",{url:"/:id?tab",params:{chatWebsite:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/chat/views/chatWebsites/edit/view.html",controller:"ChatWebsiteController as vm"}},resolve:{chatWebsite:["apiResolver","$stateParams",function(e,t){return e.resolve("chatWebsite@get",{fields:"createdAt,updatedAt,id,token,agentIdentifier,customerAlias,messageFontSize,name,key,address,remote,ListId,fidelity,timeout,agentAlias,closingQuestion,formSubmitSuccessMessage,formSubmitFailureMessage,color,color_focus,color_button,textColor,backgroundColor,fontSize,header_shape,showAgentAvatar,showCustomerAvatar,alignment,verticalAlignment,messagesAlignment,defaultTitle,animation,defaultWhiteLabel,whiteLabel,defaultLogo,conditionAgreement,autoclose,enableUnmanagedNote,unmanagedMessage,skipUnmanaged,sendUnmanaged,enableCustomerWriting,waitingTitle,waitingMessage,closingMessage,noteTitle,placeholderMessage,skipMessageButton,enableRating,ratingType,ratingStarsNumber,enableFeedback,forwardTranscript,forwardTranscriptMessage,closingMessageButton,download_transcript,enableCustomerAttachment,enableCustomerCheckmarks,systemAlias,enquiry_enable,enquiry_forwarding,enquiry_forwarding_address,name_title,username_placeholder,email_title,email_placeholder,header_online,hideWhenOffline,header_offline,start_chat_button,offline_chat_button,offlineMessageSubject,offlineMessageBody,offline_message,message_title,enquiry_message_placeholder,enquiry_button,rating_message,rating_send,rating_skip,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:502})}]},authenticate:!0,permissionId:502,bodyClass:"chat"}),t.addPart("app/main/apps/chat")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.chat",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.chat.realtime"]).config(e)}(),function(){"use strict";function e(e){e.state("app.chat.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/chat/views/realtime/realtime.html",controller:"ChatRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:510})}]},authenticate:!0,permissionId:510}).state("app.chat.realtime.agents",{url:"/agents",controller:"AgentsChatRealtimeController as vm",templateUrl:"app/main/apps/chat/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:510}).state("app.chat.realtime.queues",{url:"/queues",controller:"QueuesChatRealtimeController as vm",templateUrl:"app/main/apps/chat/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("chatQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ChatQueues",channel:"chat",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:501})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getChatQueues")}]},authenticate:!0,permissionId:510})}e.$inject=["$stateProvider"],angular.module("app.chat.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.contactmanager",{abstract:!0,url:"/contactmanager"}).state("app.contactmanager.lists",{url:"/lists",views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/lists/lists.html",controller:"ListsController as vm"}},resolve:{lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"createdAt,updatedAt,id,name,description,dialPrefix",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Lists",fields:"createdAt,updatedAt,id,name,description,dialPrefix",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:301})}]},authenticate:!0,permissionId:301,bodyClass:"contactmanager"}).state("app.contactmanager.lists.edit",{url:"/:id?tab",params:{list:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/lists/edit/view.html",controller:"ListController as vm"}},resolve:{list:["apiResolver","$stateParams",function(e,t){return e.resolve("cmList@get",{fields:"createdAt,updatedAt,id,name,description,dialPrefix",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:301})}]},authenticate:!0,permissionId:301,bodyClass:"contactmanager"}).state("app.contactmanager.companies",{url:"/companies",views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/companies/companies.html",controller:"CompaniesController as vm"}},resolve:{companies:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmCompany@get",{fields:"createdAt,updatedAt,id,name,phone,vat,fax,companyId,type,website,emailDomain,email,description,sStreet,sPostalCode,sCity,sCountry,street,postalCode,city,country",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Companies",fields:"createdAt,updatedAt,id,name,phone,vat,fax,companyId,type,website,emailDomain,email,description,sStreet,sPostalCode,sCity,sCountry,street,postalCode,city,country",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:302})}]},authenticate:!0,permissionId:302,bodyClass:"contactmanager"}).state("app.contactmanager.companies.edit",{url:"/:id?tab",params:{company:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/companies/edit/view.html",controller:"CompanyController as vm"}},resolve:{company:["apiResolver","$stateParams",function(e,t){return e.resolve("cmCompany@get",{fields:"createdAt,updatedAt,id,name,phone,vat,fax,companyId,type,website,emailDomain,email,description,sStreet,sPostalCode,sCity,sCountry,street,postalCode,city,country",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:302})}]},authenticate:!0,permissionId:302,bodyClass:"contactmanager"}).state("app.contactmanager.globalCustomFields",{url:"/globalCustomFields",views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/globalCustomFields/globalCustomFields.html",controller:"GlobalCustomFieldsController as vm"}},resolve:{globalCustomFields:["apiResolver","Auth",function(e,t){return e.resolve("cmCustomField@get",{fields:"createdAt,updatedAt,id,alias,type,values,required",sort:"-updatedAt",ListId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:304})}]},authenticate:!0,permissionId:304,bodyClass:"contactmanager"}),t.addPart("app/main/apps/contactmanager")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.contactmanager",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.contactmanager.contacts"]).config(e)}(),function(){"use strict";function e(e){e.state("app.contactmanager.contacts",{url:"/contacts?ListId&CompanyId",views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/contacts/contacts.html",controller:"ContactsController as vm"}},resolve:{contacts:["apiResolver","Auth","$stateParams",function(e,t,n){return t.hasRole("admin")?e.resolve("cmContact@get",_.merge({includeAll:!0,sort:"-updatedAt",limit:10,offset:0},n)):e.resolve("userProfile@getResources",_.merge({id:t.getCurrentUser().userProfileId,section:"Contacts",includeAll:!0,sort:"-updatedAt",limit:10,offset:0},n))}],lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Lists",fields:"id,name",sort:"-updatedAt",nolimit:!0})}],listsMap:["lists",function(e){for(var t={},n=0;n<e.rows.length;n++)t[e.rows[n].id]=e.rows[n].name;return t}],companies:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmCompany@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Companies",fields:"id,name",sort:"name",nolimit:!0})}],companiesMap:["companies",function(e){for(var t={},n=0;n<e.rows.length;n++)t[e.rows[n].id]=e.rows[n].name;return t}],tags:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("tag@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Tags",fields:"id,name",sort:"name",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:303})}]},authenticate:!0,permissionId:303,bodyClass:"contactmanager"}).state("app.contactmanager.contacts.edit",{url:"/:id?tab",params:{crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/contacts/edit/view.html",controller:"ContactController as vm"}},resolve:{contact:["apiResolver","$stateParams",function(e,t){return e.resolve("cmContact@get",{id:t.id}).then(function(e){return e.dateOfBirth&&(e.dateOfBirth=new Date(e.dateOfBirth)),e}).catch(function(e){console.error(e)})}],hoppers:["apiResolver","$stateParams",function(e,t){return e.resolve("cmContact@getHoppers",{id:t.id,fields:"id,phone,scheduledat,priority,recallme,VoiceQueueId,CampaignId,UserId",sort:"-updatedAt",limit:10,offset:0})}],finals:["apiResolver","$stateParams",function(e,t){return e.resolve("cmContact@getHopperFinals",{id:t.id,fields:"id,uniqueid,calleridnum,statedesc,starttime,disposition",sort:"-updatedAt",limit:10,offset:0})}],histories:["apiResolver","$stateParams",function(e,t){return e.resolve("cmContact@getHopperHistories",{id:t.id,fields:"id,uniqueid,calleridnum,statedesc,scheduledat,starttime,endtime",sort:"-updatedAt",limit:10,offset:0})}],jscriptySessions:["apiResolver","$stateParams",function(e,t){return e.resolve("cmContact@getJscriptySessions",{id:t.id,fields:"id,starttime,endtime,membername,projectname",sort:"-starttime",limit:10,offset:0})}],companies:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmCompany@get"):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Companies"})}],lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"id,name",sort:"-updatedAt",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Lists",fields:"id,name",sort:"-updatedAt",nolimit:!0})}],customFields:["apiResolver","contact",function(e,t){return t.ListId?e.resolve("cmList@getCustomFields",{id:t.ListId}):null}],tags:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("tag@get"):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Tags"})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:303})}]},authenticate:!0,permissionId:303,bodyClass:"contactmanager"})}e.$inject=["$stateProvider"],angular.module("app.contactmanager.contacts",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.dashboards",{abstract:!0,url:"/dashboards"}),t.addPart("app/main/apps/dashboards")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.dashboards",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.dashboards.general","app.dashboards.custom"]).config(e)}(),function(){"use strict";function e(e){e.state("app.dashboards.custom",{url:"/custom/:id",views:{"content@app":{templateUrl:"app/main/apps/dashboards/views/custom/custom.html",controller:"DashboardCustomController as vm"}},resolve:{voiceQueues:["apiResolver","Auth",function(t,e){var a;return(e.hasRole("admin")?t.resolve("voiceQueue@get",{fields:"id,name",nolimit:!0}):t.resolve("userProfile@getResources",{id:e.getCurrentUser().userProfileId,section:"VoiceQueues",mergeResources:!0,fields:"id,name",channel:"voice",nolimit:!0})).then(function(e){return a=e,t.resolve("rpc@getVoiceQueues")}).then(function(e){if(e)for(var t,n=0;n<e.rows.length;n+=1)(t=_.find(a.rows,{id:e.rows[n].id}))&&_.merge(t,_.pick(e.rows[n],["waiting","total","talking","answered","unmanaged","abandoned"]));return a})}],userProfile:["apiResolver","Auth",function(e,t){return e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:100})}]},authenticate:!0,bodyClass:"dashboards"})}e.$inject=["$stateProvider"],angular.module("app.dashboards.custom",[]).config(e)}(),function(){"use strict";function e(e){e.state("app.dashboards.general",{url:"/general",data:{selectedTab:0},views:{"content@app":{templateProvider:["$stateParams","$templateFactory","Auth",function(e,t,n){var a=n.getCurrentUser();return a&&"agent"===a.role?t.fromUrl("app/main/apps/dashboards/views/general/agent/agent.general.html",e):t.fromUrl("app/main/apps/dashboards/views/general/user/user.general.html",e)}],controllerProvider:["Auth",function(e){var t=e.getCurrentUser();return t&&"agent"===t.role?"AgentDashboardGeneralController as vm":"UserDashboardGeneralController as vm"}]}},resolve:{globalUserLists:["apiResolver","Auth",function(e,t){return e.resolve("user@getLists",{id:t.getCurrentUser().id,sort:"name",nolimit:!0})}],globalLists:["apiResolver","Auth",function(e,t){return e.resolve("cmList@get",{sort:"name",nolimit:!0})}],globalTags:["apiResolver",function(e){return e.resolve("tag@get",{sort:"name",nolimit:!0})}],globalCompanies:["apiResolver",function(e){return e.resolve("cmCompany@get",{sort:"name",nolimit:!0})}]},authenticate:!0,bodyClass:"dashboards"})}e.$inject=["$stateProvider"],angular.module("app.dashboards.general",["ngMaterialDateRangePicker","app.dashboards.general.user"]).config(e)}(),function(){"use strict";function e(e){e.state("app.dashboards.general.voice",{url:"/voice",data:{selectedTab:0},views:{voice:{templateUrl:"app/main/apps/dashboards/views/general/user/voice/user.general.voice.html",controller:"UserVoiceDashboardGeneralController as vm"}},resolve:{rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueues")}],inboundQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{fields:"id,name",type:"inbound",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",fields:"id,name",type:"inbound",channel:"voice",nolimit:!0})}],outbound:["apiResolver",function(e){return e.resolve("rpc@getOutbound")}]},authenticate:!0,bodyClass:"dashboards"}).state("app.dashboards.general.dialer",{url:"/dialer",data:{selectedTab:1},views:{dialer:{templateUrl:"app/main/apps/dashboards/views/general/user/dialer/user.general.dialer.html",controller:"UserVoiceDashboardDialerController as vm"}},resolve:{rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueues")}],outboundQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{fields:"id,name",type:"outbound",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"QueueCampaigns",fields:"id,name",type:"outbound",channel:"voice",nolimit:!0})}],rpcCampaigns:["apiResolver",function(e){return e.resolve("rpc@getCampaigns")}]},authenticate:!0,bodyClass:"dashboards"}).state("app.dashboards.general.chat",{url:"/chat",data:{selectedTab:2},views:{chat:{templateUrl:"app/main/apps/dashboards/views/general/user/chat/user.general.chat.html",controller:"UserChatDashboardGeneralController as vm"}},resolve:{chatInteractions:["apiResolver",function(e){return e.resolve("chatInteraction@get",{dateStart:moment().startOf("day").toString(),dateEnd:moment().endOf("day").toString()})}],chatWebsites:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("chatWebsite@get",{fields:"createdAt,updatedAt,id,token,agentIdentifier,customerAlias,messageFontSize,name,key,address,remote,ListId,fidelity,timeout,agentAlias,closingQuestion,formSubmitSuccessMessage,formSubmitFailureMessage,color,color_focus,color_button,textColor,backgroundColor,fontSize,header_shape,showAgentAvatar,showCustomerAvatar,alignment,verticalAlignment,messagesAlignment,defaultTitle,animation,defaultWhiteLabel,whiteLabel,defaultLogo,conditionAgreement,autoclose,enableUnmanagedNote,unmanagedMessage,skipUnmanaged,sendUnmanaged,enableCustomerWriting,waitingTitle,waitingMessage,closingMessage,noteTitle,placeholderMessage,skipMessageButton,enableRating,ratingType,ratingStarsNumber,enableFeedback,forwardTranscript,forwardTranscriptMessage,closingMessageButton,download_transcript,enableCustomerAttachment,systemAlias,enquiry_enable,enquiry_forwarding,enquiry_forwarding_address,name_title,username_placeholder,email_title,email_placeholder,header_online,hideWhenOffline,header_offline,start_chat_button,offline_chat_button,offlineMessageSubject,offlineMessageBody,header_offline,offline_message,message_title,enquiry_message_placeholder,enquiry_button,rating_message,rating_send,rating_skip,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardTranscript,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,description,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ChatWebsites",fields:"createdAt,updatedAt,id,token,agentIdentifier,customerAlias,messageFontSize,name,key,address,remote,ListId,fidelity,timeout,agentAlias,closingQuestion,formSubmitSuccessMessage,formSubmitFailureMessage,color,color_focus,color_button,textColor,backgroundColor,fontSize,header_shape,showAgentAvatar,showCustomerAvatar,alignment,verticalAlignment,messagesAlignment,defaultTitle,animation,defaultWhiteLabel,whiteLabel,defaultLogo,conditionAgreement,autoclose,enableUnmanagedNote,unmanagedMessage,skipUnmanaged,sendUnmanaged,enableCustomerWriting,waitingTitle,waitingMessage,closingMessage,noteTitle,placeholderMessage,skipMessageButton,enableRating,ratingType,ratingStarsNumber,enableFeedback,forwardTranscript,forwardTranscriptMessage,closingMessageButton,download_transcript,enableCustomerAttachment,systemAlias,enquiry_enable,enquiry_forwarding,enquiry_forwarding_address,name_title,username_placeholder,email_title,email_placeholder,header_online,hideWhenOffline,header_offline,start_chat_button,offline_chat_button,offlineMessageSubject,offlineMessageBody,header_offline,offline_message,message_title,enquiry_message_placeholder,enquiry_button,rating_message,rating_send,rating_skip,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardTranscript,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,description,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,bodyClass:"dashboards"}).state("app.dashboards.general.mail",{url:"/mail",data:{selectedTab:3},views:{mail:{templateUrl:"app/main/apps/dashboards/views/general/user/mail/user.general.mail.html",controller:"UserMailDashboardGeneralController as vm"}},resolve:{mailInteractions:["apiResolver",function(e){return e.resolve("mailInteraction@get",{dateStart:moment().startOf("day").toString(),dateEnd:moment().endOf("day").toString()})}],mailAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailAccount@get",{fields:"createdAt,updatedAt,id,name,key,email,ListId,active,cservice,Imap.service,Imap.host,Imap.port,Imap.tls,Imap.authentication,Imap.user,Imap.password,Imap.mailbox,Imap.connTimeout,Imap.authTimeout,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,cauthentication,cuser,cpassword,fontFamily,fontSize,template,markAsUnread,waitForTheAssignedAgent,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MailAccounts",fields:"createdAt,updatedAt,id,name,key,email,ListId,active,cservice,Imap.service,Imap.host,Imap.port,Imap.tls,Imap.authentication,Imap.user,Imap.password,Imap.mailbox,Imap.connTimeout,Imap.authTimeout,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,cauthentication,cuser,cpassword,fontFamily,fontSize,template,markAsUnread,waitForTheAssignedAgent,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,bodyClass:"dashboards"}).state("app.dashboards.general.sms",{url:"/sms",data:{selectedTab:4},views:{sms:{templateUrl:"app/main/apps/dashboards/views/general/user/sms/user.general.sms.html",controller:"UserSmsDashboardGeneralController as vm"}},resolve:{smsInteractions:["apiResolver",function(e){return e.resolve("smsInteraction@get",{dateStart:moment().startOf("day").toString(),dateEnd:moment().endOf("day").toString()})}],smsAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("smsAccount@get",{fields:"createdAt,updatedAt,id,name,key,token,remote,ListId,phone,type,accountSid,authId,authToken,smsMethod,username,password,senderString,deliveryReport,waitForTheAssignedAgent,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SmsAccounts",fields:"createdAt,updatedAt,id,name,key,token,remote,ListId,phone,type,accountSid,authId,authToken,smsMethod,username,password,senderString,deliveryReport,waitForTheAssignedAgent,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,bodyClass:"dashboards"}).state("app.dashboards.general.openchannel",{url:"/openchannel",data:{selectedTab:5},views:{openchannel:{templateUrl:"app/main/apps/dashboards/views/general/user/openchannel/user.general.openchannel.html",controller:"UserOpenchannelDashboardGeneralController as vm"}},resolve:{openchannelInteractions:["apiResolver",function(e){return e.resolve("openchannelInteraction@get",{dateStart:moment().startOf("day").toString(),dateEnd:moment().endOf("day").toString()})}],openchannelAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("openchannelAccount@get",{fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,description,receiveUri,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"OpenchannelAccounts",fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,description,receiveUri,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",nolimit:!0})}]},authenticate:!0,bodyClass:"dashboards"}).state("app.dashboards.general.fax",{url:"/fax",data:{selectedTab:6},views:{fax:{templateUrl:"app/main/apps/dashboards/views/general/user/fax/user.general.fax.html",controller:"UserFaxDashboardGeneralController as vm"}},resolve:{faxInteractions:["apiResolver",function(e){return e.resolve("faxInteraction@get",{dateStart:moment().startOf("day").toString(),dateEnd:moment().endOf("day").toString()})}],faxAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("faxAccount@get",{fields:"createdAt,updatedAt,id,name,key,headerinfo,TrunkId,localstationid,ListId,waitForTheAssignedAgent,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"FaxAccounts",fields:"createdAt,updatedAt,id,name,key,headerinfo,TrunkId,localstationid,ListId,waitForTheAssignedAgent,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,bodyClass:"dashboards"})}e.$inject=["$stateProvider"],angular.module("app.dashboards.general.user",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.fax",{abstract:!0,url:"/fax"}).state("app.fax.faxQueues",{url:"/faxQueues",views:{"content@app":{templateUrl:"app/main/apps/fax/views/faxQueues/faxQueues.html",controller:"FaxQueuesController as vm"}},resolve:{faxQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("faxQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"fax",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"FaxQueues",fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"fax",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:901})}]},authenticate:!0,permissionId:901,bodyClass:"fax"}).state("app.fax.faxQueues.edit",{url:"/:id?tab",params:{faxQueue:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/fax/views/faxQueues/edit/view.html",controller:"FaxQueueController as vm"}},resolve:{faxQueue:["apiResolver","$stateParams",function(e,t){return e.resolve("faxQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:901})}]},authenticate:!0,permissionId:901,bodyClass:"fax"}).state("app.fax.faxAccounts",{url:"/faxAccounts",views:{"content@app":{templateUrl:"app/main/apps/fax/views/faxAccounts/faxAccounts.html",controller:"FaxAccountsController as vm"}},resolve:{faxAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("faxAccount@get",{fields:"createdAt,updatedAt,id,name,key,headerinfo,TrunkId,localstationid,ListId,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"FaxAccounts",fields:"createdAt,updatedAt,id,name,key,headerinfo,TrunkId,localstationid,ListId,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:902})}]},authenticate:!0,permissionId:902,bodyClass:"fax"}).state("app.fax.faxAccounts.edit",{url:"/:id?tab",params:{faxAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/fax/views/faxAccounts/edit/view.html",controller:"FaxAccountController as vm"}},resolve:{faxAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("faxAccount@get",{fields:"createdAt,updatedAt,id,name,key,headerinfo,TrunkId,localstationid,ListId,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:902})}]},authenticate:!0,permissionId:902,bodyClass:"fax"}),t.addPart("app/main/apps/fax")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.fax",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.fax.realtime"]).config(e)}(),function(){"use strict";function e(e){e.state("app.fax.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/fax/views/realtime/realtime.html",controller:"FaxRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:910})}]},authenticate:!0,permissionId:910}).state("app.fax.realtime.agents",{url:"/agents",controller:"AgentsFaxRealtimeController as vm",templateUrl:"app/main/apps/fax/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:910}).state("app.fax.realtime.trunks",{url:"/trunks",controller:"TrunksFaxRealtimeController as vm",templateUrl:"app/main/apps/fax/views/realtime/trunks/view.html",resolve:{trunks:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("trunk@get",{fields:"id,name",active:!0,sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Trunks",fields:"id,name",active:!0,sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1011})}],rpcTrunks:["apiResolver",function(e){return e.resolve("rpc@getTrunks")}]},authenticate:!0,permissionId:910}).state("app.fax.realtime.queues",{url:"/queues",controller:"QueuesFaxRealtimeController as vm",templateUrl:"app/main/apps/fax/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("faxQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"FaxQueues",channel:"fax",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:901})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getFaxQueues")}]},authenticate:!0,permissionId:910}).state("app.fax.realtime.accounts",{url:"/accounts",controller:"FaxAccountsRealtimeController as vm",templateUrl:"app/main/apps/fax/views/realtime/accounts/view.html",resolve:{faxAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("faxAccount@get",{sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"FaxAccounts",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:902})}],rpcFaxAccounts:["apiResolver",function(e){return e.resolve("rpc@getFaxAccounts")}]},authenticate:!0,permissionId:910})}e.$inject=["$stateProvider"],angular.module("app.fax.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.help",{abstract:!0,url:"/help"}),t.addPart("app/main/apps/help")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.help",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.help.about"]).config(e)}(),function(){"use strict";function e(e){e.state("app.help.about",{url:"/about",views:{"content@app":{templateUrl:"app/main/apps/help/views/about/about.html",controller:"AboutController as vm"}},resolve:{info:["apiResolver",function(e){return e.resolve("version@get")}]},authenticate:!0,permissionId:1600,bodyClass:"help"})}e.$inject=["$stateProvider"],angular.module("app.help.about",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.integrations",{abstract:!0,url:"/integrations"}).state("app.integrations.zendeskAccounts",{url:"/zendeskAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/zendeskAccounts/zendeskAccounts.html",controller:"ZendeskAccountsController as vm"}},resolve:{zendeskAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intZendeskAccount@get",{fields:"createdAt,updatedAt,id,name,type,username,remoteUri,authType,password,token,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ZendeskAccounts",fields:"createdAt,updatedAt,id,name,type,username,remoteUri,authType,password,token,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1301})}]},authenticate:!0,permissionId:1301,bodyClass:"integrations"}).state("app.integrations.zendeskAccounts.edit",{url:"/:id?tab",params:{zendeskAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/zendeskAccounts/edit/view.html",controller:"ZendeskAccountController as vm"}},resolve:{zendeskAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intZendeskAccount@get",{fields:"createdAt,updatedAt,id,name,type,username,remoteUri,authType,password,token,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1301})}]},authenticate:!0,permissionId:1301,bodyClass:"integrations"}).state("app.integrations.salesforceAccounts",{url:"/salesforceAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/salesforceAccounts/salesforceAccounts.html",controller:"SalesforceAccountsController as vm"}},resolve:{salesforceAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intSalesforceAccount@get",{fields:"createdAt,updatedAt,id,name,type,username,remoteUri,password,clientId,clientSecret,securityToken,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SalesforceAccounts",fields:"createdAt,updatedAt,id,name,type,username,remoteUri,password,clientId,clientSecret,securityToken,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1302})}]},authenticate:!0,permissionId:1302,bodyClass:"integrations"}).state("app.integrations.salesforceAccounts.edit",{url:"/:id?tab",params:{salesforceAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/salesforceAccounts/edit/view.html",controller:"SalesforceAccountController as vm"}},resolve:{salesforceAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intSalesforceAccount@get",{fields:"createdAt,updatedAt,id,name,type,username,remoteUri,password,clientId,clientSecret,securityToken,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1302})}]},authenticate:!0,permissionId:1302,bodyClass:"integrations"}).state("app.integrations.freshdeskAccounts",{url:"/freshdeskAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/freshdeskAccounts.html",controller:"FreshdeskAccountsController as vm"}},resolve:{freshdeskAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intFreshdeskAccount@get",{fields:"createdAt,updatedAt,id,name,username,remoteUri,apiKey,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"FreshdeskAccounts",fields:"createdAt,updatedAt,id,name,username,remoteUri,apiKey,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1303})}]},authenticate:!0,permissionId:1303,bodyClass:"integrations"}).state("app.integrations.freshdeskAccounts.edit",{url:"/:id?tab",params:{freshdeskAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/edit/view.html",controller:"FreshdeskAccountController as vm"}},resolve:{freshdeskAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intFreshdeskAccount@get",{fields:"createdAt,updatedAt,id,name,username,remoteUri,apiKey,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1303})}]},authenticate:!0,permissionId:1303,bodyClass:"integrations"}).state("app.integrations.sugarcrmAccounts",{url:"/sugarcrmAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/sugarcrmAccounts.html",controller:"SugarcrmAccountsController as vm"}},resolve:{sugarcrmAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intSugarcrmAccount@get",{fields:"createdAt,updatedAt,id,name,username,remoteUri,password,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SugarcrmAccounts",fields:"createdAt,updatedAt,id,name,username,remoteUri,password,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1305})}]},authenticate:!0,permissionId:1305,bodyClass:"integrations"}).state("app.integrations.sugarcrmAccounts.edit",{url:"/:id?tab",params:{sugarcrmAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/edit/view.html",controller:"SugarcrmAccountController as vm"}},resolve:{sugarcrmAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intSugarcrmAccount@get",{fields:"createdAt,updatedAt,id,name,username,remoteUri,password,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1305})}]},authenticate:!0,permissionId:1305,bodyClass:"integrations"}).state("app.integrations.deskAccounts",{url:"/deskAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/deskAccounts/deskAccounts.html",controller:"DeskAccountsController as vm"}},resolve:{deskAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intDeskAccount@get",{fields:"createdAt,updatedAt,id,name,type,remoteUri,authType,username,password,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"DeskAccounts",fields:"createdAt,updatedAt,id,name,type,remoteUri,authType,username,password,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1306})}]},authenticate:!0,permissionId:1306,bodyClass:"integrations"}).state("app.integrations.deskAccounts.edit",{url:"/:id?tab",params:{deskAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/deskAccounts/edit/view.html",controller:"DeskAccountController as vm"}},resolve:{deskAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intDeskAccount@get",{fields:"createdAt,updatedAt,id,name,type,remoteUri,authType,username,password,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1306})}]},authenticate:!0,permissionId:1306,bodyClass:"integrations"}).state("app.integrations.zohoAccounts",{url:"/zohoAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/zohoAccounts/zohoAccounts.html",controller:"ZohoAccountsController as vm"}},resolve:{zohoAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intZohoAccount@get",{fields:"createdAt,updatedAt,id,name,host,authToken,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ZohoAccounts",fields:"createdAt,updatedAt,id,name,host,authToken,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1307})}]},authenticate:!0,permissionId:1307,bodyClass:"integrations"}).state("app.integrations.zohoAccounts.edit",{url:"/:id?tab",params:{zohoAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/zohoAccounts/edit/view.html",controller:"ZohoAccountController as vm"}},resolve:{zohoAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intZohoAccount@get",{fields:"createdAt,updatedAt,id,name,host,authToken,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1307})}]},authenticate:!0,permissionId:1307,bodyClass:"integrations"}).state("app.integrations.vtigerAccounts",{url:"/vtigerAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/vtigerAccounts/vtigerAccounts.html",controller:"VtigerAccountsController as vm"}},resolve:{vtigerAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intVtigerAccount@get",{fields:"createdAt,updatedAt,id,name,description,username,accessKey,remoteUri,serverUrl",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VtigerAccounts",fields:"createdAt,updatedAt,id,name,description,username,accessKey,remoteUri,serverUrl",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1308})}]},authenticate:!0,permissionId:1308,bodyClass:"integrations"}).state("app.integrations.vtigerAccounts.edit",{url:"/:id?tab",params:{vtigerAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/vtigerAccounts/edit/view.html",controller:"VtigerAccountController as vm"}},resolve:{vtigerAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intVtigerAccount@get",{fields:"createdAt,updatedAt,id,name,description,username,accessKey,remoteUri,serverUrl",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1308})}]},authenticate:!0,permissionId:1308,bodyClass:"integrations"}).state("app.integrations.dynamics365Accounts",{url:"/dynamics365Accounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/dynamics365Accounts.html",controller:"Dynamics365AccountsController as vm"}},resolve:{dynamics365Accounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intDynamics365Account@get",{fields:"createdAt,updatedAt,id,name,username,password,remoteUri,tenantId,clientId,clientSecret,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Dynamics365Accounts",fields:"createdAt,updatedAt,id,name,username,password,remoteUri,tenantId,clientId,clientSecret,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1309})}]},authenticate:!0,permissionId:1309,bodyClass:"integrations"}).state("app.integrations.dynamics365Accounts.edit",{url:"/:id?tab",params:{dynamics365Account:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/edit/view.html",controller:"Dynamics365AccountController as vm"}},resolve:{dynamics365Account:["apiResolver","$stateParams",function(e,t){return e.resolve("intDynamics365Account@get",{fields:"createdAt,updatedAt,id,name,username,password,remoteUri,tenantId,clientId,clientSecret,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1309})}]},authenticate:!0,permissionId:1309,bodyClass:"integrations"}).state("app.integrations.servicenowAccounts",{url:"/servicenowAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/servicenowAccounts/servicenowAccounts.html",controller:"ServicenowAccountsController as vm"}},resolve:{servicenowAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intServicenowAccount@get",{fields:"createdAt,updatedAt,id,name,username,password,email,remoteUri,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ServicenowAccounts",fields:"createdAt,updatedAt,id,name,username,password,email,remoteUri,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1310})}]},authenticate:!0,permissionId:1310,bodyClass:"integrations"}).state("app.integrations.servicenowAccounts.edit",{url:"/:id?tab",params:{servicenowAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/servicenowAccounts/edit/view.html",controller:"ServicenowAccountController as vm"}},resolve:{servicenowAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intServicenowAccount@get",{fields:"createdAt,updatedAt,id,name,username,password,email,remoteUri,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1310})}]},authenticate:!0,permissionId:1310,bodyClass:"integrations"}),t.addPart("app/main/apps/integrations")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.integrations",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter"]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.jscripty",{abstract:!0,url:"/jscripty"}).state("app.jscripty.projects",{url:"/projects",views:{"content@app":{templateUrl:"app/main/apps/jscripty/views/projects/projects.html",controller:"JscriptyProjectsController as vm"}},resolve:{projects:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("jscriptyProject@get",{fields:"createdAt,updatedAt,id,name,enableUncompleteSave,description,formData",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Projects",fields:"createdAt,updatedAt,id,name,enableUncompleteSave,description,formData",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1701})}]},authenticate:!0,permissionId:1701,bodyClass:"jscripty"}).state("app.jscripty.projects.edit",{url:"/:id?tab",params:{project:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/jscripty/views/projects/edit/view.html",controller:"JscriptyProjectController as vm"}},resolve:{project:["apiResolver","$stateParams",function(e,t){return e.resolve("jscriptyProject@get",{fields:"createdAt,updatedAt,id,name,enableUncompleteSave,description,formData",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1701})}]},authenticate:!0,permissionId:1701,bodyClass:"jscripty"}),t.addPart("app/main/apps/jscripty")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.jscripty",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter"]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.mail",{abstract:!0,url:"/mail"}).state("app.mail.mailQueues",{url:"/mailQueues",views:{"content@app":{templateUrl:"app/main/apps/mail/views/mailQueues/mailQueues.html",controller:"MailQueuesController as vm"}},resolve:{mailQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"mail",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MailQueues",fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"mail",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:601})}]},authenticate:!0,permissionId:601,bodyClass:"mail"}).state("app.mail.mailQueues.edit",{url:"/:id?tab",params:{mailQueue:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/mail/views/mailQueues/edit/view.html",controller:"MailQueueController as vm"}},resolve:{mailQueue:["apiResolver","$stateParams",function(e,t){return e.resolve("mailQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:601})}]},authenticate:!0,permissionId:601,bodyClass:"mail"}).state("app.mail.mailAccounts",{url:"/mailAccounts",views:{"content@app":{templateUrl:"app/main/apps/mail/views/mailAccounts/mailAccounts.html",controller:"MailAccountsController as vm"}},resolve:{mailAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailAccount@get",{fields:"createdAt,updatedAt,id,name,key,email,ListId,active,cservice,Imap.service,Imap.host,Imap.port,Imap.tls,Imap.authentication,Imap.user,Imap.password,Imap.mailbox,Imap.connTimeout,Imap.authTimeout,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,cauthentication,cuser,cpassword,fontFamily,fontSize,template,markAsUnread,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MailAccounts",fields:"createdAt,updatedAt,id,name,key,email,ListId,active,cservice,Imap.service,Imap.host,Imap.port,Imap.tls,Imap.authentication,Imap.user,Imap.password,Imap.mailbox,Imap.connTimeout,Imap.authTimeout,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,cauthentication,cuser,cpassword,fontFamily,fontSize,template,markAsUnread,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:602})}]},authenticate:!0,permissionId:602,bodyClass:"mail"}).state("app.mail.mailAccounts.edit",{url:"/:id?tab",params:{mailAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/mail/views/mailAccounts/edit/view.html",controller:"MailAccountController as vm"}},resolve:{mailAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("mailAccount@get",{fields:"createdAt,updatedAt,id,name,key,email,ListId,active,cservice,Imap.service,Imap.host,Imap.port,Imap.tls,Imap.authentication,Imap.user,Imap.password,Imap.mailbox,Imap.connTimeout,Imap.authTimeout,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,cauthentication,cuser,cpassword,fontFamily,fontSize,template,markAsUnread,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:602})}]},authenticate:!0,permissionId:602,bodyClass:"mail"}).state("app.mail.mailSubtatuses",{url:"/mailSubtatuses",views:{"content@app":{templateUrl:"app/main/apps/mail/views/mailSubtatuses/mailSubtatuses.html",controller:"MailSubstatusesController as vm"}},resolve:{mailSubtatuses:["apiResolver","Auth",function(e,t){return e.resolve("mailSubstatus@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:603})}]},authenticate:!0,permissionId:603,bodyClass:"mail"}),t.addPart("app/main/apps/mail")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.mail",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.mail.realtime"]).config(e)}(),function(){"use strict";function e(e){e.state("app.mail.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/mail/views/realtime/realtime.html",controller:"MailRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:610})}]},authenticate:!0,permissionId:610}).state("app.mail.realtime.agents",{url:"/agents",controller:"AgentsMailRealtimeController as vm",templateUrl:"app/main/apps/mail/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:610}).state("app.mail.realtime.queues",{url:"/queues",controller:"QueuesMailRealtimeController as vm",templateUrl:"app/main/apps/mail/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MailQueues",channel:"mail",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:601})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getMailQueues")}]},authenticate:!0,permissionId:610}).state("app.mail.realtime.accounts",{url:"/accounts",controller:"MailAccountsRealtimeController as vm",templateUrl:"app/main/apps/mail/views/realtime/accounts/view.html",resolve:{mailAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailAccount@get",{sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MailAccounts",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:602})}],rpcMailAccounts:["apiResolver",function(e){return e.resolve("rpc@getMailAccounts")}]},authenticate:!0,permissionId:610})}e.$inject=["$stateProvider"],angular.module("app.mail.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.marketplace",{abstract:!0,url:"/marketplace"}).state("app.marketplace.plugins",{url:"/plugins",views:{"content@app":{templateUrl:"app/main/apps/marketplace/views/plugins/plugins.html",controller:"MarketplacePluginsController as vm"}},resolve:{plugins:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("plugin@get",{fields:"createdAt,updatedAt,id,name,type,active,description,icon,sidebar,path,adminUrl,agentUrl,scriptName,scriptPath,version",sort:"name",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Plugins",fields:"createdAt,updatedAt,id,name,type,active,description,icon,sidebar,path,adminUrl,agentUrl,scriptName,scriptPath,version",sort:"name",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1801})}]},authenticate:!0,permissionId:1801,bodyClass:"marketplace"}).state("app.marketplace.plugins.edit",{url:"/:id?tab",params:{plugin:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/marketplace/views/plugins/edit/view.html",controller:"MarketplacePluginController as vm"}},resolve:{plugin:["apiResolver","$stateParams",function(e,t){return e.resolve("plugin@get",{fields:"createdAt,updatedAt,id,name,type,active,description,icon,sidebar,path,adminUrl,agentUrl,scriptName,scriptPath,version",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1801})}]},authenticate:!0,permissionId:1801,bodyClass:"marketplace"}),t.addPart("app/main/apps/marketplace")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.marketplace",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter"]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.motiondialer",{abstract:!0,url:"/motiondialer"}).state("app.motiondialer.queueCampaigns",{url:"/queueCampaigns",views:{"content@app":{templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/queueCampaigns.html",controller:"QueueCampaignsController as vm"}},resolve:{queueCampaigns:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{fields:"createdAt,updatedAt,id,name,dialActive,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,dialOrderByScheduledAt,dialRecallMeTimeout,dialRecallInQueue,dialGlobalInterval,dialTimezone,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength,dialMethod,dialPowerLevel,dialPredictiveOptimization,dialPredictiveOptimizationPercentage,dialPredictiveInterval,dialLimitQueue,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialPrefix,dialQueueOptions,dialQueueTimeout,strategy,timeout,retry,wrapuptime,weight,musiconhold,dialQueueProject,dialQueueProject2,dialAgiAfterHangupAgent,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,description,mandatoryDisposition,mandatoryDispositionPauseId,dialPredictiveIntervalMaxThreshold,dialPredictiveIntervalMinThreshold",type:"outbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"QueueCampaigns",fields:"createdAt,updatedAt,id,name,dialActive,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,dialOrderByScheduledAt,dialRecallMeTimeout,dialRecallInQueue,dialGlobalInterval,dialTimezone,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength,dialMethod,dialPowerLevel,dialPredictiveOptimization,dialPredictiveOptimizationPercentage,dialPredictiveInterval,dialLimitQueue,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialPrefix,dialQueueOptions,dialQueueTimeout,strategy,timeout,retry,wrapuptime,weight,musiconhold,dialQueueProject,dialQueueProject2,dialAgiAfterHangupAgent,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,description,mandatoryDisposition,mandatoryDispositionPauseId,dialPredictiveIntervalMaxThreshold,dialPredictiveIntervalMinThreshold",type:"outbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1501})}]},authenticate:!0,permissionId:1501,bodyClass:"motiondialer"}).state("app.motiondialer.queueCampaigns.edit",{url:"/:id?tab",params:{queueCampaign:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/view.html",controller:"QueueCampaignController as vm"}},resolve:{queueCampaign:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceQueue@get",{fields:"createdAt,updatedAt,id,name,dialActive,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,dialOrderByScheduledAt,dialRecallMeTimeout,dialRecallInQueue,dialGlobalInterval,dialTimezone,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength,dialMethod,dialPowerLevel,dialPredictiveOptimization,dialPredictiveOptimizationPercentage,dialPredictiveInterval,dialLimitQueue,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialPrefix,dialQueueOptions,dialQueueTimeout,strategy,timeout,retry,wrapuptime,weight,musiconhold,dialQueueProject,dialQueueProject2,dialAgiAfterHangupAgent,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,description,mandatoryDisposition,mandatoryDispositionPauseId,dialPredictiveIntervalMaxThreshold,dialPredictiveIntervalMinThreshold",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1501})}]},authenticate:!0,permissionId:1501,bodyClass:"motiondialer"}).state("app.motiondialer.ivrCampaigns",{url:"/ivrCampaigns",views:{"content@app":{templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/ivrCampaigns.html",controller:"IvrCampaignsController as vm"}},resolve:{ivrCampaigns:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("campaign@get",{fields:"createdAt,updatedAt,id,name,active,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,SquareProjectId,limitCalls,description,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,dialOrderByScheduledAt,dialGlobalInterval,dialTimezone,dialPrefix,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength",type:"ivr",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"IvrCampaigns",fields:"createdAt,updatedAt,id,name,active,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,SquareProjectId,limitCalls,description,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,dialOrderByScheduledAt,dialGlobalInterval,dialTimezone,dialPrefix,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength",type:"ivr",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1502})}]},authenticate:!0,permissionId:1502,bodyClass:"motiondialer"}).state("app.motiondialer.ivrCampaigns.edit",{url:"/:id?tab",params:{ivrCampaign:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/view.html",controller:"IvrCampaignController as vm"}},resolve:{ivrCampaign:["apiResolver","$stateParams",function(e,t){return e.resolve("campaign@get",{fields:"createdAt,updatedAt,id,name,active,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,SquareProjectId,limitCalls,description,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,dialOrderByScheduledAt,dialGlobalInterval,dialTimezone,dialPrefix,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1502})}]},authenticate:!0,permissionId:1502,bodyClass:"motiondialer"}),t.addPart("app/main/apps/motiondialer")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.motiondialer",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.motiondialer.realtime"]).config(e)}(),function(){"use strict";function e(e){e.state("app.motiondialer.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/motiondialer/views/realtime/realtime.html",controller:"MotionDialerRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1510})}]},authenticate:!0,permissionId:1510}).state("app.motiondialer.realtime.agents",{url:"/agents",controller:"AgentsMotionDialerRealtimeController as vm",templateUrl:"app/main/apps/motiondialer/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:1510}).state("app.motiondialer.realtime.queues",{url:"/queues",controller:"QueuesMotionDialerRealtimeController as vm",templateUrl:"app/main/apps/motiondialer/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"outbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"QueueCampaigns",channel:"voice",type:"outbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1501})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueues")}]},authenticate:!0,permissionId:1510}).state("app.motiondialer.realtime.queue_calls",{url:"/queue_calls",controller:"QueueCallsMotionDialerRealtimeController as vm",templateUrl:"app/main/apps/motiondialer/views/realtime/queue_calls/view.html",resolve:{agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,role,context",role:"agent",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,role,context",role:"agent",nolimit:!0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"outbound",sort:"-updatedAt",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"QueueCampaigns",channel:"voice",type:"outbound",sort:"-updatedAt",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1501})}],rpcVoiceQueuesChannels:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueuesChannels")}]},authenticate:!0,permissionId:1510}).state("app.motiondialer.realtime.abandonedcalls",{url:"/abandonedcalls",controller:"AbandonedCallsMotionDialerRealtimeController as vm",templateUrl:"app/main/apps/motiondialer/views/realtime/abandonedcalls/view.html",resolve:{agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,role,context",role:"agent",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,role,context",role:"agent",nolimit:!0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"outbound",sort:"-updatedAt",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"QueueCampaigns",channel:"voice",type:"outbound",sort:"-updatedAt",nolimit:!0})}],dispositions:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("disposition@get",{fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Dispositions",fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1501})}]},authenticate:!0,permissionId:1510}).state("app.motiondialer.realtime.queue_params",{url:"/queue_params",controller:"QueueParamsMotionDialerRealtimeController as vm",templateUrl:"app/main/apps/motiondialer/views/realtime/queue_params/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"outbound",fields:"id,name",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"QueueCampaigns",channel:"voice",type:"outbound",sort:"-updatedAt",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1501})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueues")}]},authenticate:!0,permissionId:1510}).state("app.motiondialer.realtime.ivr_campaigns",{url:"/ivr_campaigns",controller:"IvrCampaignsMotionDialerRealtimeController as vm",templateUrl:"app/main/apps/motiondialer/views/realtime/ivr_campaigns/view.html",resolve:{campaigns:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("campaign@get",{sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"IvrCampaigns",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1502})}],rpcCampaigns:["apiResolver",function(e){return e.resolve("rpc@getCampaigns")}]},authenticate:!0,permissionId:1510})}e.$inject=["$stateProvider"],angular.module("app.motiondialer.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.openchannel",{abstract:!0,url:"/openchannel"}).state("app.openchannel.openchannelQueues",{url:"/openchannelQueues",views:{"content@app":{templateUrl:"app/main/apps/openchannel/views/openchannelQueues/openchannelQueues.html",controller:"OpenchannelQueuesController as vm"}},resolve:{openchannelQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("openchannelQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"openchannel",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"OpenchannelQueues",fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"openchannel",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:801})}]},authenticate:!0,permissionId:801,bodyClass:"openchannel"}).state("app.openchannel.openchannelQueues.edit",{url:"/:id?tab",params:{openchannelQueue:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/view.html",controller:"OpenchannelQueueController as vm"}},resolve:{openchannelQueue:["apiResolver","$stateParams",function(e,t){return e.resolve("openchannelQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:801})}]},authenticate:!0,permissionId:801,bodyClass:"openchannel"}).state("app.openchannel.openchannelAccounts",{url:"/openchannelAccounts",views:{"content@app":{templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/openchannelAccounts.html",controller:"OpenchannelAccountsController as vm"}},resolve:{openchannelAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("openchannelAccount@get",{fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"OpenchannelAccounts",fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:802})}]},authenticate:!0,permissionId:802,bodyClass:"openchannel"}).state("app.openchannel.openchannelAccounts.edit",{url:"/:id?tab",params:{openchannelAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/view.html",controller:"OpenchannelAccountController as vm"}},resolve:{openchannelAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("openchannelAccount@get",{fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:802})}]},authenticate:!0,permissionId:802,bodyClass:"openchannel"}),t.addPart("app/main/apps/openchannel")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.openchannel",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.openchannel.realtime"]).config(e)}(),function(){"use strict";function e(e){e.state("app.openchannel.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/openchannel/views/realtime/realtime.html",controller:"OpenchannelRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:810})}]},authenticate:!0,permissionId:810}).state("app.openchannel.realtime.agents",{url:"/agents",controller:"AgentsOpenchannelRealtimeController as vm",templateUrl:"app/main/apps/openchannel/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:810}).state("app.openchannel.realtime.queues",{url:"/queues",controller:"QueuesOpenchannelRealtimeController as vm",templateUrl:"app/main/apps/openchannel/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("openchannelQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"OpenchannelQueues",channel:"openchannel",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:801})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getOpenchannelQueues")}]},authenticate:!0,permissionId:810})}e.$inject=["$stateProvider"],angular.module("app.openchannel.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.plugins",{abstract:!0,url:"/plugins"}),t.addPart("app/main/apps/plugins")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.plugins",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.plugins.plugin"]).config(e)}(),function(){"use strict";function e(e){e.state("app.plugins.plugin",{url:"/plugin/:id",views:{"content@app":{templateUrl:"app/main/apps/plugins/views/plugin/plugin.html",controller:"PluginController as vm"}},resolve:{},authenticate:!0,bodyClass:"plugins"})}e.$inject=["$stateProvider"],angular.module("app.plugins.plugin",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.settings",{abstract:!0,url:"/settings"}).state("app.settings.generals",{url:"/generals",views:{"content@app":{templateUrl:"app/main/apps/settings/views/generals/generals.html",controller:"GeneralsController as vm"}},resolve:{generals:["apiResolver",function(e){return e.resolve("setting@get",{fields:"createdAt,updatedAt,id,min_internal,securePassword,callRecordingEncryption,chatTimeout,stunaddr,turnaddr,turnusername,turnpassword,phoneBarAutoUpdater,defaultScreenRecordingPath,phoneBarAutoUpdaterUrl,enableEmailPreview,split,splitSizeCsv,splitSizePdf,splitSizeXlsx,messagesAlignment,phoneBarRememberMeEnabled,rtlSupport,allowedLoginAttempts,blockDuration",limit:10,offset:0})}]},authenticate:!0,permissionId:1400,bodyClass:"settings"}).state("app.settings.smtps",{url:"/smtps",views:{"content@app":{templateUrl:"app/main/apps/settings/views/smtps/smtps.html",controller:"SmtpController as vm"}},resolve:{smtps:["apiResolver",function(e){return e.resolve("mailAccount@get",{fields:"createdAt,updatedAt,id,service,name,email,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,description",service:"1",limit:10,offset:0})}]},authenticate:!0,permissionId:1400,bodyClass:"settings"}).state("app.settings.networks",{url:"/networks",views:{"content@app":{templateUrl:"app/main/apps/settings/views/networks/networks.html",controller:"NetworksController as vm"}},resolve:{networks:["apiResolver",function(e){return e.resolve("network@get",{fields:"createdAt,updatedAt,id,type,value",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1400,bodyClass:"settings"}).state("app.settings.customizations",{url:"/customizations",views:{"content@app":{templateUrl:"app/main/apps/settings/views/customizations/customizations.html",controller:"CustomizationsController as vm"}},resolve:{customizations:["apiResolver",function(e){return e.resolve("setting@get",{fields:"createdAt,updatedAt,id,defaultLogo,defaultLoginLogo,defaultHeaderWhiteLabel,headerWhiteLabel,defaultPageTitle,pageTitle,defaultPreferred",limit:10,offset:0})}]},authenticate:!0,permissionId:1400,bodyClass:"settings"}),t.addPart("app/main/apps/settings")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.settings",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.settings.updates","app.settings.license","app.settings.system"]).config(e)}(),function(){"use strict";function e(e){e.state("app.settings.license",{url:"/license",views:{"content@app":{templateUrl:"app/main/apps/settings/views/license/license.html",controller:"LicenseController as vm"}},authenticate:!0,permissionId:1400,bodyClass:"settings"})}e.$inject=["$stateProvider"],angular.module("app.settings.license",[]).config(e)}(),function(){"use strict";function e(e){e.state("app.settings.system",{url:"/system?tab",views:{"content@app":{templateUrl:"app/main/apps/settings/views/system/system.html",controller:"SystemController as vm"}},resolve:{system:["apiResolver",function(e){return e.resolve("system@get")}],processes:["apiResolver",function(e){return e.resolve("pm2@get")}]},authenticate:!0,permissionId:1400,bodyClass:"settings"})}e.$inject=["$stateProvider"],angular.module("app.settings.system",[]).config(e)}(),function(){"use strict";function e(e){e.state("app.settings.updates",{url:"/updates",views:{"content@app":{templateUrl:"app/main/apps/settings/views/updates/updates.html",controller:"UpdatesController as vm"}},resolve:{version:["apiResolver",function(e){return e.resolve("version@get",{latest:!0})}],userProfile:["apiResolver","Auth",function(e,t){return e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1400})}]},authenticate:!0,permissionId:1400,bodyClass:"settings"})}e.$inject=["$stateProvider"],angular.module("app.settings.updates",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.sms",{abstract:!0,url:"/sms"}).state("app.sms.smsQueues",{url:"/smsQueues",views:{"content@app":{templateUrl:"app/main/apps/sms/views/smsQueues/smsQueues.html",controller:"SmsQueuesController as vm"}},resolve:{smsQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("smsQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"sms",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SmsQueues",fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"sms",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:701})}]},authenticate:!0,permissionId:701,bodyClass:"sms"}).state("app.sms.smsQueues.edit",{url:"/:id?tab",params:{smsQueue:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/sms/views/smsQueues/edit/view.html",controller:"SmsQueueController as vm"}},resolve:{smsQueue:["apiResolver","$stateParams",function(e,t){return e.resolve("smsQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:701})}]},authenticate:!0,permissionId:701,bodyClass:"sms"}).state("app.sms.smsAccounts",{url:"/smsAccounts",views:{"content@app":{templateUrl:"app/main/apps/sms/views/smsAccounts/smsAccounts.html",controller:"SmsAccountsController as vm"}},resolve:{smsAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("smsAccount@get",{fields:"createdAt,updatedAt,id,name,key,token,remote,ListId,type,phone,accountSid,authId,authToken,smsMethod,username,password,baseUrl,apiKey,senderString,deliveryReport,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SmsAccounts",fields:"createdAt,updatedAt,id,name,key,token,remote,ListId,type,phone,accountSid,authId,authToken,smsMethod,username,password,baseUrl,apiKey,senderString,deliveryReport,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:702})}]},authenticate:!0,permissionId:702,bodyClass:"sms"}).state("app.sms.smsAccounts.edit",{url:"/:id?tab",params:{smsAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/sms/views/smsAccounts/edit/view.html",controller:"SmsAccountController as vm"}},resolve:{smsAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("smsAccount@get",{fields:"createdAt,updatedAt,id,name,key,token,remote,ListId,type,phone,accountSid,authId,authToken,smsMethod,username,password,baseUrl,apiKey,senderString,deliveryReport,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:702})}]},authenticate:!0,permissionId:702,bodyClass:"sms"}),t.addPart("app/main/apps/sms")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.sms",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.sms.realtime"]).config(e)}(),function(){"use strict";function e(e){e.state("app.sms.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/sms/views/realtime/realtime.html",controller:"SmsRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:710})}]},authenticate:!0,permissionId:710}).state("app.sms.realtime.agents",{url:"/agents",controller:"AgentsSmsRealtimeController as vm",templateUrl:"app/main/apps/sms/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:710}).state("app.sms.realtime.queues",{url:"/queues",controller:"QueuesSmsRealtimeController as vm",templateUrl:"app/main/apps/sms/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("smsQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SmsQueues",channel:"sms",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:701})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getSmsQueues")}]},authenticate:!0,permissionId:710})}e.$inject=["$stateProvider"],angular.module("app.sms.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.staff",{abstract:!0,url:"/staff"}).state("app.staff.users",{url:"/users",views:{"content@app":{templateUrl:"app/main/apps/staff/views/users/users.html",controller:"UsersController as vm"}},resolve:{users:["apiResolver","Auth",function(e,t){return e.resolve("user@get",{fields:"createdAt,updatedAt,role,userProfileId,id,fullname,name,email,phone,mobile,userpic,password,description,autointernal,internal,transport,nat,allow,context,callgroup,pickupgroup,passwordResetAt,apiKey,videosupport,disabled,blocked",role:"admin,user",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:201})}]},authenticate:!0,permissionId:201,bodyClass:"staff"}).state("app.staff.users.edit",{url:"/:id?tab",params:{user:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/staff/views/users/edit/view.html",controller:"UserController as vm"}},resolve:{user:["apiResolver","$stateParams",function(e,t){return e.resolve("user@get",{fields:"createdAt,updatedAt,role,userProfileId,id,fullname,name,email,phone,mobile,userpic,password,description,autointernal,internal,transport,nat,allow,context,callgroup,pickupgroup,passwordResetAt,apiKey,videosupport,disabled,blocked",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:201})}]},authenticate:!0,permissionId:201,bodyClass:"staff"}).state("app.staff.agents",{url:"/agents",views:{"content@app":{templateUrl:"app/main/apps/staff/views/agents/agents.html",controller:"AgentsController as vm"}},resolve:{agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"createdAt,updatedAt,id,role,fullname,name,alias,showWebBar,email,phone,mobile,userpic,password,hotdesk,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,videosupport,extensionMonitor,chatCapacity,mailCapacity,faxCapacity,smsCapacity,openchannelCapacity,phoneBarEnableSettings,phoneBarAutoAnswer,phoneBarAutoAnswerDelay,phoneBarRingInUse,phoneBarEnableRecording,phoneBarEnableDtmfTone,phoneBarDnd,phoneBarUnansweredCallBadge,phoneBarEnableJaws,phoneBarOutboundProxy,phoneBarUnconditional,phoneBarUnconditionalNumber,phoneBarRemoteControl,phoneBarRemoteControlPort,phoneBarExpires,phoneBarListenPort,permissions,allowmessenger,phoneBarPrefixRequired,passwordResetAt,disabled,blocked,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"createdAt,updatedAt,id,role,fullname,name,alias,showWebBar,email,phone,mobile,userpic,password,hotdesk,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,videosupport,extensionMonitor,chatCapacity,mailCapacity,faxCapacity,smsCapacity,openchannelCapacity,phoneBarEnableSettings,phoneBarAutoAnswer,phoneBarAutoAnswerDelay,phoneBarRingInUse,phoneBarEnableRecording,phoneBarEnableDtmfTone,phoneBarDnd,phoneBarUnansweredCallBadge,phoneBarEnableJaws,phoneBarOutboundProxy,phoneBarUnconditional,phoneBarUnconditionalNumber,phoneBarRemoteControl,phoneBarRemoteControlPort,phoneBarExpires,phoneBarListenPort,permissions,allowmessenger,phoneBarPrefixRequired,passwordResetAt,disabled,blocked,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}]},authenticate:!0,permissionId:202,bodyClass:"staff"}).state("app.staff.agents.edit",{url:"/:id?tab",params:{agent:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/staff/views/agents/edit/view.html",controller:"AgentController as vm"}},resolve:{agent:["apiResolver","$stateParams",function(e,t){return e.resolve("user@get",{fields:"createdAt,updatedAt,id,role,fullname,name,alias,showWebBar,email,phone,mobile,userpic,password,hotdesk,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,videosupport,extensionMonitor,chatCapacity,mailCapacity,faxCapacity,smsCapacity,openchannelCapacity,phoneBarEnableSettings,phoneBarAutoAnswer,phoneBarAutoAnswerDelay,phoneBarRingInUse,phoneBarEnableRecording,phoneBarEnableDtmfTone,phoneBarDnd,phoneBarUnansweredCallBadge,phoneBarEnableJaws,phoneBarOutboundProxy,phoneBarUnconditional,phoneBarUnconditionalNumber,phoneBarRemoteControl,phoneBarRemoteControlPort,phoneBarExpires,phoneBarListenPort,permissions,allowmessenger,phoneBarPrefixRequired,passwordResetAt,disabled,blocked,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}]},authenticate:!0,permissionId:202,bodyClass:"staff"}).state("app.staff.telephones",{url:"/telephones",views:{"content@app":{templateUrl:"app/main/apps/staff/views/telephones/telephones.html",controller:"TelephonesController as vm"}},resolve:{telephones:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"createdAt,updatedAt,id,role,fullname,name,email,password,description,autointernal,internal,voicemail,transport,nat,allow,callerid,context,callgroup,pickupgroup,videosupport,encryption,phone,mobile",role:"telephone",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Telephones",fields:"createdAt,updatedAt,id,role,fullname,name,email,password,description,autointernal,internal,voicemail,transport,nat,allow,callerid,context,callgroup,pickupgroup,videosupport,encryption,phone,mobile",role:"telephone",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:203})}]},authenticate:!0,permissionId:203,bodyClass:"staff"}).state("app.staff.telephones.edit",{url:"/:id?tab",params:{telephone:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/staff/views/telephones/edit/view.html",controller:"TelephoneController as vm"}},resolve:{telephone:["apiResolver","$stateParams",function(e,t){return e.resolve("user@get",{fields:"createdAt,updatedAt,id,role,fullname,name,email,password,description,autointernal,internal,voicemail,transport,nat,allow,callerid,context,callgroup,pickupgroup,videosupport,encryption,phone,mobile",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:203})}]},authenticate:!0,permissionId:203,bodyClass:"staff"}).state("app.staff.teams",{url:"/teams",views:{"content@app":{templateUrl:"app/main/apps/staff/views/teams/teams.html",controller:"TeamsController as vm"}},resolve:{teams:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("team@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Teams",fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:204})}]},authenticate:!0,permissionId:204,bodyClass:"staff"}).state("app.staff.userProfiles",{url:"/userProfiles",views:{"content@app":{templateUrl:"app/main/apps/staff/views/userProfiles/userProfiles.html",controller:"UserProfilesController as vm"}},resolve:{userProfiles:["apiResolver","Auth",function(e,t){return e.resolve("userProfile@get",{fields:"createdAt,updatedAt,id,name,description,crudPermissions",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:205})}]},authenticate:!0,permissionId:205,bodyClass:"staff"}).state("app.staff.userProfiles.edit",{url:"/:id?tab",params:{userProfile:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/staff/views/userProfiles/edit/view.html",controller:"UserProfileController as vm"}},resolve:{userProfile:["apiResolver","$stateParams",function(e,t){return e.resolve("userProfile@get",{fields:"createdAt,updatedAt,id,name,description,crudPermissions",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:205})}]},authenticate:!0,permissionId:205,bodyClass:"staff"}),t.addPart("app/main/apps/staff")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.staff",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter"]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.tools",{abstract:!0,url:"/tools"}).state("app.tools.cannedAnswers",{url:"/cannedAnswers",views:{"content@app":{templateUrl:"app/main/apps/tools/views/cannedAnswers/cannedAnswers.html",controller:"CannedAnswersController as vm"}},resolve:{cannedAnswers:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cannedAnswer@get",{fields:"createdAt,updatedAt,id,key,value,description",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"CannedAnswers",fields:"createdAt,updatedAt,id,key,value,description",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1001})}]},authenticate:!0,permissionId:1001,bodyClass:"tools"}).state("app.tools.dispositions",{url:"/dispositions",views:{"content@app":{templateUrl:"app/main/apps/tools/views/dispositions/dispositions.html",controller:"DispositionsController as vm"}},resolve:{dispositions:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("disposition@get",{fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Dispositions",fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1002})}]},authenticate:!0,permissionId:1002,bodyClass:"tools"}).state("app.tools.customDashboards",{url:"/customDashboards",views:{"content@app":{templateUrl:"app/main/apps/tools/views/customDashboards/customDashboards.html",controller:"CustomDashboardsController as vm"}},resolve:{customDashboards:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("dashboard@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"CustomDashboards",fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1003})}]},authenticate:!0,permissionId:1003,bodyClass:"tools"}).state("app.tools.customDashboards.edit",{url:"/:id?tab",params:{customDashboard:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/tools/views/customDashboards/edit/view.html",controller:"CustomDashboardController as vm"}},resolve:{customDashboard:["apiResolver","$stateParams",function(e,t){return e.resolve("dashboard@get",{fields:"createdAt,updatedAt,id,name,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1003})}]},authenticate:!0,permissionId:1003,bodyClass:"tools"}).state("app.tools.intervals",{url:"/intervals",views:{"content@app":{templateUrl:"app/main/apps/tools/views/intervals/intervals.html",controller:"IntervalsController as vm"}},resolve:{intervals:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("interval@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",IntervalId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Intervals",fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",IntervalId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1004})}]},authenticate:!0,permissionId:1004,bodyClass:"tools"}).state("app.tools.intervals.edit",{url:"/:id?tab",params:{interval:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/tools/views/intervals/edit/view.html",controller:"IntervalController as vm"}},resolve:{interval:["apiResolver","$stateParams",function(e,t){return e.resolve("interval@get",{fields:"createdAt,updatedAt,id,name,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1004})}]},authenticate:!0,permissionId:1004,bodyClass:"tools"}).state("app.tools.pauses",{url:"/pauses",views:{"content@app":{templateUrl:"app/main/apps/tools/views/pauses/pauses.html",controller:"PausesController as vm"}},resolve:{pauses:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("pause@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Pauses",fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1005})}]},authenticate:!0,permissionId:1005,bodyClass:"tools"}).state("app.tools.schedules",{url:"/schedules",views:{"content@app":{templateUrl:"app/main/apps/tools/views/schedules/schedules.html",controller:"SchedulesController as vm"}},resolve:{schedules:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("schedule@get",{fields:"createdAt,updatedAt,id,name,CustomReportId,DefaultReportId,output,active,startAt,endAt,cron,subtractNumber,subtractUnit,sendMail,MailAccountId,email,cc,bcc,sendIfEmpty,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Scheduler",fields:"createdAt,updatedAt,id,name,CustomReportId,DefaultReportId,output,active,startAt,endAt,cron,subtractNumber,subtractUnit,sendMail,MailAccountId,email,cc,bcc,sendIfEmpty,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1006})}]},authenticate:!0,permissionId:1006,bodyClass:"tools"}).state("app.tools.sounds",{url:"/sounds",views:{"content@app":{templateUrl:"app/main/apps/tools/views/sounds/sounds.html",controller:"SoundsController as vm"}},resolve:{sounds:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("sound@get",{fields:"createdAt,updatedAt,id,save_name,converted_format,name,audio,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Sounds",fields:"createdAt,updatedAt,id,save_name,converted_format,name,audio,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1007})}]},authenticate:!0,permissionId:1007,bodyClass:"tools"}).state("app.tools.tags",{url:"/tags",views:{"content@app":{templateUrl:"app/main/apps/tools/views/tags/tags.html",controller:"TagsController as vm"}},resolve:{tags:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("tag@get",{fields:"createdAt,updatedAt,id,name,description,color",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Tags",fields:"createdAt,updatedAt,id,name,description,color",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1008})}]},authenticate:!0,permissionId:1008,bodyClass:"tools"}).state("app.tools.templates",{url:"/templates",views:{"content@app":{templateUrl:"app/main/apps/tools/views/templates/templates.html",controller:"TemplatesController as vm"}},resolve:{templates:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("template@get",{fields:"createdAt,updatedAt,id,name,html,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Templates",fields:"createdAt,updatedAt,id,name,html,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1009})}]},authenticate:!0,permissionId:1009,bodyClass:"tools"}).state("app.tools.triggers",{url:"/triggers",views:{"content@app":{templateUrl:"app/main/apps/tools/views/triggers/triggers.html",controller:"TriggersController as vm"}},resolve:{triggers:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("trigger@get",{fields:"createdAt,updatedAt,id,name,channel,status,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Triggers",fields:"createdAt,updatedAt,id,name,channel,status,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1010})}]},authenticate:!0,permissionId:1010,bodyClass:"tools"}).state("app.tools.triggers.edit",{url:"/:id?tab",params:{trigger:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/tools/views/triggers/edit/view.html",controller:"TriggerController as vm"}},resolve:{trigger:["apiResolver","$stateParams",function(e,t){return e.resolve("trigger@get",{fields:"createdAt,updatedAt,id,name,channel,status,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1010})}]},authenticate:!0,permissionId:1010,bodyClass:"tools"}).state("app.tools.trunks",{url:"/trunks",views:{"content@app":{templateUrl:"app/main/apps/tools/views/trunks/trunks.html",controller:"TrunksController as vm"}},resolve:{trunks:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("trunk@get",{fields:"createdAt,updatedAt,id,name,active,host,secret,defaultuser,context,callerid,type,dtmfmode,nat,qualify,allow,insecure,call_limit,registry,description,directmedia,callcounter,fromdomain,fromuser,outboundproxy,usereqphone,trustrpid,sendrpid,encryption,port,transport,t38pt_udptl,videosupport,otherFields",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Trunks",fields:"createdAt,updatedAt,id,name,active,host,secret,defaultuser,context,callerid,type,dtmfmode,nat,qualify,allow,insecure,call_limit,registry,description,directmedia,callcounter,fromdomain,fromuser,outboundproxy,usereqphone,trustrpid,sendrpid,encryption,port,transport,t38pt_udptl,videosupport,otherFields",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1011})}]},authenticate:!0,permissionId:1011,bodyClass:"tools"}).state("app.tools.trunks.edit",{url:"/:id?tab",params:{trunk:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/tools/views/trunks/edit/view.html",controller:"TrunkController as vm"}},resolve:{trunk:["apiResolver","$stateParams",function(e,t){return e.resolve("trunk@get",{fields:"createdAt,updatedAt,id,name,active,host,secret,defaultuser,context,callerid,type,dtmfmode,nat,qualify,allow,insecure,call_limit,registry,description,directmedia,callcounter,fromdomain,fromuser,outboundproxy,usereqphone,trustrpid,sendrpid,encryption,port,transport,t38pt_udptl,videosupport,otherFields",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1011})}]},authenticate:!0,permissionId:1011,bodyClass:"tools"}).state("app.tools.variables",{url:"/variables",views:{"content@app":{templateUrl:"app/main/apps/tools/views/variables/variables.html",controller:"VariablesController as vm"}},resolve:{variables:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("variable@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Variables",fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1012})}]},authenticate:!0,permissionId:1012,bodyClass:"tools"}),t.addPart("app/main/apps/tools")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.tools",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter"]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.video",{abstract:!0,url:"/video"}).state("app.video.screenRecordings",{url:"/screenRecordings",views:{"content@app":{templateUrl:"app/main/apps/video/views/screenRecordings/screenRecordings.html",controller:"ScreenRecordingsController as vm"}},resolve:{screenRecordings:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("screenRecording@get",{fields:"createdAt,updatedAt,id,interactionid,channel,format,value,rating,UserId,duration,startedAt,closedAt",includeAll:"true",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ScreenRecordings",fields:"createdAt,updatedAt,id,interactionid,channel,format,value,rating,UserId,duration,startedAt,closedAt",includeAll:"true",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:2001})}]},authenticate:!0,permissionId:2001,bodyClass:"video"}),t.addPart("app/main/apps/video")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.video",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter"]).config(e)}(),function(){"use strict";function e(e){e.state("app.voice.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/voice/views/realtime/realtime.html",controller:"VoiceRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:411})}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.agents",{url:"/agents",controller:"AgentsVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.telephones",{url:"/telephones",controller:"TelephonesVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/telephones/view.html",resolve:{telephones:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,fullname,userpic,internal",role:"telephone",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Telephones",fields:"id,fullname,userpic,internal",role:"telephone",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:203})}],rpcTelephones:["apiResolver",function(e){return e.resolve("rpc@getTelephones")}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.trunks",{url:"/trunks",controller:"TrunksVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/trunks/view.html",resolve:{trunks:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("trunk@get",{fields:"id,name",active:!0,sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Trunks",fields:"id,name",active:!0,sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1011})}],rpcTrunks:["apiResolver",function(e){return e.resolve("rpc@getTrunks")}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.queues",{url:"/queues",controller:"QueuesVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",channel:"voice",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:401})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueues")}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.queue_calls",{url:"/queue_calls",controller:"QueueCallsVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/queue_calls/view.html",resolve:{agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,role,context",role:"agent",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,role,context",role:"agent",nolimit:!0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"inbound",sort:"-updatedAt",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",channel:"voice",type:"inbound",sort:"-updatedAt",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:401})}],rpcVoiceQueuesChannels:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueuesChannels")}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.abandonedcalls",{url:"/abandonedcalls",controller:"AbandonedCallsVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/abandonedcalls/view.html",resolve:{agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,role,context",role:"agent",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,role,context",role:"agent",nolimit:!0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"inbound",sort:"-updatedAt",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",channel:"voice",type:"inbound",sort:"-updatedAt",nolimit:!0})}],dispositions:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("disposition@get",{fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Dispositions",fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:401})}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.queue_params",{url:"/queue_params",controller:"QueueParamsVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/queue_params/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"inbound",fields:"id,name",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",channel:"voice",type:"inbound",sort:"-updatedAt",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:401})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueues")}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.outbound_calls",{url:"/outbound_calls",controller:"OutboundCallsVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/outbound_calls/view.html",resolve:{rpcCalls:["apiResolver",function(e){return e.resolve("rpc@getOutboundChannels")}]},authenticate:!0,permissionId:411})}e.$inject=["$stateProvider"],angular.module("app.voice.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.voice",{abstract:!0,url:"/voice"}).state("app.voice.voiceQueues",{url:"/voiceQueues",views:{"content@app":{templateUrl:"app/main/apps/voice/views/voiceQueues/voiceQueues.html",controller:"VoiceQueuesController as vm"}},resolve:{voiceQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{fields:"createdAt,updatedAt,id,name,type,strategy,timeout,maxlen,retry,wrapuptime,weight,joinempty,leavewhenempty,musiconhold,announce,description,periodic_announce,queue_reporthold,queue_youarenext,queue_thereare,queue_callswaiting,queue_holdtime,queue_minutes,queue_minute,queue_seconds,queue_thankyou,announce_frequency,min_announce_frequency,periodic_announce_frequency,random_periodic_announce,announce_holdtime,announce_position,announce_position_limit,reportholdtime,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,mandatoryDisposition,mandatoryDispositionPauseId",type:"inbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",fields:"createdAt,updatedAt,id,name,type,strategy,timeout,maxlen,retry,wrapuptime,weight,joinempty,leavewhenempty,musiconhold,announce,description,periodic_announce,queue_reporthold,queue_youarenext,queue_thereare,queue_callswaiting,queue_holdtime,queue_minutes,queue_minute,queue_seconds,queue_thankyou,announce_frequency,min_announce_frequency,periodic_announce_frequency,random_periodic_announce,announce_holdtime,announce_position,announce_position_limit,reportholdtime,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,mandatoryDisposition,mandatoryDispositionPauseId",type:"inbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:401})}]},authenticate:!0,permissionId:401,bodyClass:"voice"}).state("app.voice.voiceQueues.edit",{url:"/:id?tab",params:{voiceQueue:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/voice/views/voiceQueues/edit/view.html",controller:"VoiceQueueController as vm"}},resolve:{voiceQueue:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceQueue@get",{fields:"createdAt,updatedAt,id,name,type,strategy,timeout,maxlen,retry,wrapuptime,weight,joinempty,leavewhenempty,musiconhold,announce,description,periodic_announce,queue_reporthold,queue_youarenext,queue_thereare,queue_callswaiting,queue_holdtime,queue_minutes,queue_minute,queue_seconds,queue_thankyou,announce_frequency,min_announce_frequency,periodic_announce_frequency,random_periodic_announce,announce_holdtime,announce_position,announce_position_limit,reportholdtime,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,mandatoryDisposition,mandatoryDispositionPauseId",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:401})}]},authenticate:!0,permissionId:401,bodyClass:"voice"}).state("app.voice.inboundroutes",{url:"/inboundroutes",views:{"content@app":{templateUrl:"app/main/apps/voice/views/inboundroutes/inboundroutes.html",controller:"InboundRoutesController as vm"}},resolve:{inboundroutes:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"inbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"InboundRoutes",fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"inbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:402})}]},authenticate:!0,permissionId:402,bodyClass:"voice"}).state("app.voice.inboundroutes.edit",{url:"/:id?tab",params:{inboundroute:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/voice/views/inboundroutes/edit/view.html",controller:"InboundRouteController as vm"}},resolve:{inboundroute:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:402})}]},authenticate:!0,permissionId:402,bodyClass:"voice"}).state("app.voice.outboundroutes",{url:"/outboundroutes",views:{"content@app":{templateUrl:"app/main/apps/voice/views/outboundroutes/outboundroutes.html",controller:"OutboundRoutesController as vm"}},resolve:{outboundroutes:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,recordingFormat,cutdigits,description",type:"outbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"OutboundRoutes",fields:"createdAt,updatedAt,id,appdata,type,exten,context,recordingFormat,cutdigits,description",type:"outbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:403})}]},authenticate:!0,permissionId:403,bodyClass:"voice"}).state("app.voice.outboundroutes.edit",{url:"/:id?tab",params:{outboundroute:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/voice/views/outboundroutes/edit/view.html",controller:"OutboundRouteController as vm"}},resolve:{outboundroute:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,recordingFormat,cutdigits,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:403})}]},authenticate:!0,permissionId:403,bodyClass:"voice"}).state("app.voice.internalroutes",{url:"/internalroutes",views:{"content@app":{templateUrl:"app/main/apps/voice/views/internalroutes/internalroutes.html",controller:"InternalRoutesController as vm"}},resolve:{internalroutes:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"internal",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"InternalRoutes",fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"internal",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:404})}]},authenticate:!0,permissionId:404,bodyClass:"voice"}).state("app.voice.internalroutes.edit",{url:"/:id?tab",params:{internalroute:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/voice/views/internalroutes/edit/view.html",controller:"InternalRouteController as vm"}},resolve:{internalroute:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:404})}]},authenticate:!0,permissionId:404,bodyClass:"voice"}).state("app.voice.contexts",{url:"/contexts",views:{"content@app":{templateUrl:"app/main/apps/voice/views/contexts/contexts.html",controller:"ContextsController as vm"}},resolve:{contexts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceContext@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",defaultEntry:"false",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Contexts",fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",defaultEntry:"false",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:405})}]},authenticate:!0,permissionId:405,bodyClass:"voice"}).state("app.voice.voicemails",{url:"/voicemails",views:{"content@app":{templateUrl:"app/main/apps/voice/views/voicemails/voicemails.html",controller:"VoicemailsController as vm"}},resolve:{voicemails:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceMail@get",{fields:"createdAt,updatedAt,id,customer_id,fullname,email,password,mailbox,context,tz,attach,envelope,delete,emailbody,emailsubject,maxsecs,maxmsg",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Voicemails",fields:"createdAt,updatedAt,id,customer_id,fullname,email,password,mailbox,context,tz,attach,envelope,delete,emailbody,emailsubject,maxsecs,maxmsg",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:406})}]},authenticate:!0,permissionId:406,bodyClass:"voice"}).state("app.voice.voicemails.edit",{url:"/:id?tab",params:{voicemail:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/voice/views/voicemails/edit/view.html",controller:"VoicemailController as vm"}},resolve:{voicemail:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceMail@get",{fields:"createdAt,updatedAt,id,customer_id,fullname,email,password,mailbox,context,tz,attach,envelope,delete,emailbody,emailsubject,maxsecs,maxmsg",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:406})}]},authenticate:!0,permissionId:406,bodyClass:"voice"}).state("app.voice.musiconholds",{url:"/musiconholds",views:{"content@app":{templateUrl:"app/main/apps/voice/views/musiconholds/musiconholds.html",controller:"MusicOnHoldsController as vm"}},resolve:{musiconholds:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceMusicOnHold@get",{fields:"createdAt,updatedAt,id,name,mode,directory,application,format,sort",defaultEntry:"false",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MusicOnHolds",fields:"createdAt,updatedAt,id,name,mode,directory,application,format,sort",defaultEntry:"false",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:407})}]},authenticate:!0,permissionId:407,bodyClass:"voice"}).state("app.voice.musiconholds.edit",{url:"/:id?tab",params:{musiconhold:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/voice/views/musiconholds/edit/view.html",controller:"MusicOnHoldController as vm"}},resolve:{musiconhold:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceMusicOnHold@get",{fields:"createdAt,updatedAt,id,name,mode,directory,application,format,sort",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:407})}]},authenticate:!0,permissionId:407,bodyClass:"voice"}).state("app.voice.voiceRecordings",{url:"/voiceRecordings",views:{"content@app":{templateUrl:"app/main/apps/voice/views/voiceRecordings/voiceRecordings.html",controller:"VoiceRecordingsController as vm"}},resolve:{voiceRecordings:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceRecording@get",{fields:"createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,membername,rating,audio,userDisposition",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceRecordings",fields:"createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,membername,rating,audio,userDisposition",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:408})}]},authenticate:!0,permissionId:408,bodyClass:"voice"}).state("app.voice.chanSpies",{url:"/chanSpies",views:{"content@app":{templateUrl:"app/main/apps/voice/views/chanSpies/chanSpies.html",controller:"ChanSpiesController as vm"}},resolve:{chanSpies:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceChanSpy@get",{fields:"createdAt,updatedAt,id,name,prefix,options,auth,password,record,recordingFormat,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ChanSpies",fields:"createdAt,updatedAt,id,name,prefix,options,auth,password,record,recordingFormat,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:409})}]},authenticate:!0,permissionId:409,bodyClass:"voice"}).state("app.voice.voicePrefixes",{url:"/voicePrefixes",views:{"content@app":{templateUrl:"app/main/apps/voice/views/voicePrefixes/voicePrefixes.html",controller:"VoicePrefixesController as vm"}},resolve:{voicePrefixes:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voicePrefix@get",{fields:"createdAt,updatedAt,id,name,VoiceExtensionId,callerIdAll,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoicePrefixes",fields:"createdAt,updatedAt,id,name,VoiceExtensionId,callerIdAll,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:410})}]},authenticate:!0,permissionId:410,bodyClass:"voice"}),t.addPart("app/main/apps/voice")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.voice",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.voice.realtime"]).config(e)}(),function(){"use strict";angular.module("app.navigation",[]).config(function(){})}(),function(){"use strict";function e(e,t){e.addPart("app/quick-panel")}e.$inject=["$translatePartialLoaderProvider","msApiProvider"],angular.module("app.quick-panel",[]).config(e)}(),function(){"use strict";function e(e,t){e.state("app.reset",{url:"/reset/:token",views:{"main@":{templateUrl:"app/core/layouts/content-only.html",controller:"MainController as vm"},"content@app.reset":{templateUrl:"app/reset/reset.html",controller:"ResetPasswordController as vm"}},bodyClass:"reset"}),t.addPart("app/reset")}e.$inject=["$stateProvider","$translatePartialLoaderProvider"],angular.module("app.reset",[]).config(e)}(),function(){"use strict";function e(e){e.addPart("app/toolbar")}e.$inject=["$translatePartialLoaderProvider"],angular.module("app.toolbar",[]).config(e)}(),function(){"use strict";function e(e){e.interceptors.push("authInterceptor")}e.$inject=["$httpProvider"],angular.module("app.auth").config(e)}(),function(){"use strict";function e(e,n,t,a){e.$on("$stateChangeStart",function(e,t){return t.hasOwnProperty("authenticate")&&t.authenticate&&!a.isLoggedIn()?(e.preventDefault(),n.go("app.login",{},{reload:!0,notify:!0})):a.isLoggedIn()&&t.hasOwnProperty("permissionId")&&t.permissionId&&!a.hasRole("admin")?a.reloadPermissions().then(function(){if(!a.hasPermission(t.permissionId))return e.preventDefault(),n.go("app.dashboards.general",{},{reload:!0,notify:!0})}).catch(function(){return e.preventDefault(),n.go("app.dashboards.general",{},{reload:!0,notify:!0})}):void 0})}e.$inject=["$rootScope","$state","$window","Auth"],angular.module("app.auth").run(e)}(),function(){"use strict";function e(a,i,s,o,t,r){var l,d=["id","role","fullname","name","internal","email","userpic","permissions","md5secret","phoneBarAutoAnswer","phoneBarAutoAnswerDelay","phoneBarEnableRecording","phoneBarEnableDtmfTone","voicePause","chatPause","mailPause","faxPause","smsPause","openchannelPause","phoneBarEnableSettings","phoneBarExpires","pauseType","showWebBar","phoneBarRemoteControlPort","phoneBarRemoteControl","lastLoginAt","lastPauseAt","crudPermissions","allowmessenger","passwordResetAt","alias","phoneBarPrefixRequired","hotdesk","userProfileId"];function c(e){var t=s.defer();return m("agent")&&0!==l.showWebBar?o.user.login({id:l.id,device:"web",intrf:e}).$promise.then(function(){console.log("AGENT LOGGED IN"),t.resolve()}).catch(function(e){console.error(e),t.reject(e)}):m("admin")||m("user")?o.user.update({id:l.id},{online:!0,lastLoginAt:moment().format("YYYY-MM-DD HH:mm:ss")}).$promise.catch(function(e){console.error(e)}).finally(function(){t.resolve()}):t.resolve(),t.promise}function n(){if(i.remove("motion.user"),i.remove("motion.token"),l&&l.id){var e=l.id;l=null,t.localStorage.removeItem("motion.user:"+e)}}function m(e){return!!l&&l.role===e}function u(e){return!!l&&_.includes(l.permissions,e)}function e(){return i.get("motion.token")}function p(e){return l=_.assign(l,_.pick(e,d)),i.put("motion.user",JSON.stringify(l)),m("user")&&g().then(function(e){l.permissions=e}),l}function g(){var i=[];return s(function(t,n){var a=[];return l||t(a),o.userProfileSection.get({userProfileId:l.userProfileId}).$promise.then(function(e){return i=e&&e.rows?e.rows:[],_.isEmpty(i)||(a=_.map(_.filter(i,function(e){return e.enabled}),function(e){return e.sectionId})),a}).then(function(t){if(_.includes(t,100)){var e=_.find(i,{sectionId:100});return e.autoAssociation?(t.push(101),t):o.userProfileResource.get({sectionId:e.id}).$promise.then(function(e){return(e&&e.rows?e.rows[0]:null)&&t.push(101),t})}return t}).then(function(t){if(_.includes(t,1003)||_.some(i,{enabled:!1,sectionId:1003})){var e=_.find(i,{sectionId:1003});return e.autoAssociation?o.dashboard.get().$promise.then(function(e){return(e&&e.rows?e.rows:[]).forEach(function(e){t.push(e.id+99999)}),t}):o.userProfileResource.get({sectionId:e.id}).$promise.then(function(e){return(e&&e.rows?e.rows:[]).forEach(function(e){t.push(e.resourceId+99999)}),t})}return t}).then(function(t){if(_.includes(t,1801)||_.some(i,{enabled:!1,sectionId:1801})){var e=_.find(i,{sectionId:1801});return e.autoAssociation?o.plugin.get().$promise.then(function(e){return(e&&e.rows?e.rows:[]).forEach(function(e){t.push(e.id+88888)}),t}):o.userProfileResource.get({sectionId:e.id}).$promise.then(function(e){return(e&&e.rows?e.rows:[]).forEach(function(e){t.push(e.resourceId+88888)}),t})}return t}).then(function(e){t(e)}).catch(function(e){n("Error retrieving user profile permissions",e)})})}function v(){return s(function(t,n){g().then(function(e){l.permissions=e,t()}).catch(function(e){n(e)})})}return function(){if(i.get("motion.user"))l=JSON.parse(i.get("motion.user")),o.user.get({id:l.id,fields:d.join(",")}).$promise.then(function(e){if(e)return p(e)}).catch(function(e){console.log("Error retrieving user",e)})}(),{login:function(e){var t,n=s.defer();return o.auth.local(e).$promise.then(function(e){return t=e,i.put("motion.token",e.token),o.user.get({id:e.id,fields:d.join(",")}).$promise}).then(function(e){(l=e).lastLoginAt=moment(),i.put("motion.user",JSON.stringify(e))}).then(function(){if(m("agent")&&1==l.showWebBar&&l.hotdesk)return a.show({controller:"HotDeskDialogController",controllerAs:"vm",templateUrl:"app/auth/services/hotdesk/dialog.html",parent:angular.element(r.body),clickOutsideToClose:!1,resolve:{telephones:["apiResolver","Auth",function(e,t){return e.resolve("user@get",{fields:"id,fullname,name,internal",role:"telephone",nolimit:!0})}]}})}).then(function(e){return c(e)}).catch(function(e){n.reject(e.data)}).finally(function(){o.user.get({id:t.id,fields:d.join(",")}).$promise.then(function(e){l=e,m("user")&&g().then(function(e){l.permissions=e}),n.resolve()}).catch(function(e){console.log("Error update user login",e),n.reject(e.data)})}),n.promise},logout:function(e){var t;return s.defer(),e?(n(),s.resolve()):(t=s.defer(),m("agent")&&0!==l.showWebBar?o.user.logout({id:l.id,device:"web"}).$promise.then(function(){console.log("AGENT LOGGED OUT")}).catch(function(e){console.error(e)}).finally(function(){t.resolve()}):m("admin")||m("user")?o.user.update({id:l.id},{online:!1}).$promise.catch(function(e){console.error(e)}).finally(function(){t.resolve()}):t.resolve(),t.promise).then(n).catch(function(e){console.error(e)})},queueLogin:c,isLoggedIn:function(){return!(!l||!e())},getPermissions:g,reloadPermissions:v,hasChildrenPermissions:function(e){return!!e&&_.some(e,function(e){return u(e)})},hasModulePermissions:function(i){return s(function(a,t){m("admin")?a(!0):o.userProfileSection.get({userProfileId:l.userProfileId}).$promise.then(function(e){var t=e&&e.rows?e.rows:[];if(_.isEmpty(t))a(!1);else{var n=_.filter(t,function(e){return e.enabled});a(_.some(n,["category",i]))}}).catch(function(e){t(e)})})},hasModulesPermissions:function(i){return s(function(n,t){var a={};m("admin")?(i.forEach(function(e){a[e]=!0}),n(a)):o.userProfileSection.get({userProfileId:l.userProfileId}).$promise.then(function(e){var t=e&&e.rows?e.rows:[];_.isEmpty(t)?n({}):(_(t).filter(function(e){return e.enabled&&_.includes(i,e.category)}).uniqBy(function(e){return e.category}).map(function(e){return e.category}).value().forEach(function(e){a[e]=!0}),n(a))}).catch(function(e){t(e)})})},hasRole:m,hasPermission:u,hasSectionPermissions:function(a){return s(function(e,t){var n={};return v().then(function(){_.includes(l.permissions,a)&&(n[a]=!0),e(n)}).catch(function(e){t(e)})})},hasSectionsPermissions:function(a){return s(function(e,t){var n={};if(!m("admin"))return v().then(function(){a.forEach(function(e){_.includes(l.permissions,e)&&(n[e]=!0)}),e(n)}).catch(function(e){t(e)});a.forEach(function(e){n[e]=!0}),e(n)})},getToken:e,getCurrentUser:function(){return l},parseCrudPermissions:function(e){return m("admin")?{readOnly:!1,canEdit:!0,canDelete:!0}:e?{readOnly:!(!_.includes(e,"r")||1!==e.length),canEdit:!!_.includes(e,"e"),canDelete:!!_.includes(e,"d")}:{readOnly:!0,canEdit:!1,canDelete:!1}},updateCurrentUser:p,removeCookies:n}}e.$inject=["$mdDialog","$cookies","$q","api","$window","$document"],angular.module("app.auth").factory("Auth",e)}(),function(){"use strict";function e(t,e){this.telephones=e,this.closeDialog=function(e){t.hide(e)},e.count&&(this.name=e.rows[0].name)}e.$inject=["$mdDialog","telephones"],angular.module("app.auth").controller("HotDeskDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s;return{request:function(e){var t=n.get("motion.token");return e.headers=e.headers||{},i.isSameOrigin(e.url)&&t&&(e.headers.Authorization="Bearer "+t),e},responseError:function(e){switch(e.status){case 401:n.remove("motion.user"),n.remove("motion.token"),(s||(s=a.get("$state"))).go("app.login")}return t.reject(e)}}}e.$inject=["$rootScope","$q","$cookies","$injector","Util"],angular.module("app.auth").factory("authInterceptor",e)}(),function(){"use strict";function e(t){var n={safeCb:function(e){return angular.isFunction(e)?e:angular.noop},urlParse:function(e){var t=document.createElement("a");return t.href=e,""===t.host&&(t.href=t.href),t},isSameOrigin:function(i,e){return i=n.urlParse(i),(e=(e=e&&[].concat(e)||[]).map(n.urlParse)).push(t.location),1<=(e=e.filter(function(e){var t=i.hostname===e.hostname,n=i.protocol===e.protocol,a=i.port===e.port||""===e.port&&("80"===i.port||"443"===i.port);return t&&n&&a})).length}};return n}e.$inject=["$window"],angular.module("app.auth").factory("Util",e)}(),function(){"use strict";angular.module("app.core").provider("motionConfig",function(){var n={disableCustomScrollbars:!1,disableMdInkRippleOnMobile:!0,disableCustomScrollbarsOnMobile:!0};this.config=function(e){n=angular.extend({},n,e)},this.$get=function(){var e={getConfig:function(e){if(angular.isUndefined(n[e]))return!1;return n[e]},setConfig:function(e,t){n[e]=t}};return e}})}(),function(){"use strict";function e(e,t,n,a){t.debugEnabled(!0),e.config({tabindex:!1}),a.config({disableCustomScrollbars:!1,disableCustomScrollbarsOnMobile:!0,disableMdInkRippleOnMobile:!0}),n.config({wheelPropagation:!0})}e.$inject=["$ariaProvider","$logProvider","msScrollConfigProvider","motionConfigProvider"],angular.module("app.core").config(e)}(),function(){"use strict";function e(e,t,n){(t.generate(),n.getConfig("disableMdInkRippleOnMobile")&&e.isMobile())&&angular.element("body").attr("md-no-ink",!0);e.isMobile()&&angular.element("html").addClass("is-mobile");var a=e.detectBrowser();if(a){var i=a.browser+" "+a.version+" "+a.os;angular.element("html").addClass(i)}}e.$inject=["msUtils","motionGenerator","motionConfig"],angular.module("app.core").run(e)}(),function(){"use strict";function e(o,l,d){return{restrict:"E",compile:function(e,t){var s;return t.code||(s=e.html(),e.empty()),function(n,a,r){r.code&&(s=n.$eval(r.code));var i=n.$eval(r.shouldInterpolate);l.when(s).then(function(e){if(e){i&&(e=d(e)(n));var t=angular.element('<pre><code class="highlight" ng-non-bindable></code></pre>');a.append(t),o(function(){!function(e,t){var n=t.find("code"),a=e.split("\n"),i=(a=a.filter(function(e){return e.trim().length}))[0].match(/^\s*/)[0],s=new RegExp("^"+i);a=a.map(function(e){return e.replace(s,"").replace(/\s+$/,"")});var o=hljs.highlight(r.language||r.lang,a.join("\n"),!0);o.value=o.value.replace(/=<span class="hljs-value">""<\/span>/gi,"").replace("<head>","").replace("<head/>",""),n.append(o.value).addClass("highlight")}(e,t)},34,!1)}})}}}}e.$inject=["$timeout","$q","$interpolate"],angular.module("app.core").directive("hljs",e)}(),function(){"use strict";angular.module("app.core").directive("msAdvancedFilter",function(){return{restrict:"E",scope:{options:"="},controller:["$scope",function(l){l.conditions=[],l.getValues=function(e){l.options.getFieldValues(e);var t=null;switch(e.type){case"text":l.conditions=[{name:"Contains",value:"LIKE"},{name:"Equals",value:"="}];break;case"autocomplete":t=[];break;case"date":t={dateStart:null};break;case"number":l.conditions=[{name:"Equals",value:"="},{name:"Greater than",value:">"},{name:"Lower than",value:"<"}]}var n=-1<["select","autocomplete"].indexOf(e.type)?"is":l.options.selectedCondition,a=_.find(l.options.activeConditions,{name:e.name,condition:n});l.options.selectedValue=a?a.values:t},l.searchText=function(e,t){l.options.searchItem(e,t)},l.addNewCondition=function(e,t,n){var a,i,s=[];switch(e.type){case"select":case"autocomplete":i=_.map(n,"name").join(" or "),a={name:"Is",value:"IS"},s=n;break;case"date":var o=moment(n.dateStart).format("YYYY-MM-DD"),r=moment(n.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format("YYYY-MM-DD");i="from "+o+" to "+r;break;default:a=t,i=n,s.push({name:n})}l.options.addCondition(e,a,n,i)},l.removeCondition=function(){_.isEmpty(l.options.activeConditions)&&l.options.getResults()},l.clearConditions=function(){l.options.activeConditions=[],l.options.getResults()},l.applyFilter=function(){l.options.getResults()}}],templateUrl:"app/core/directives/ms-advanced-filter/ms-advanced-filter.html"}})}(),function(){"use strict";angular.module("app.core").directive("msCard",function(){return{restrict:"E",scope:{templatePath:"=template",card:"=ngModel",vm:"=viewModel"},template:'<div class="ms-card-content-wrapper" ng-include="templatePath" onload="cardTemplateLoaded()"></div>',compile:function(e){return e.addClass("ms-card"),function(e,t){e.cardTemplateLoaded=function(){e.$emit("msCard::cardTemplateLoaded",t)}}}}})}(),function(){"use strict";angular.module("app.core").directive("msClickToCall",function(){return{restrict:"E",scope:{type:"=",disabled:"=",target:"=",prefix:"=",license:"="},controller:["$scope","$rootScope","$http","$translate","$document","$mdDialog","Auth","toasty","api",function(n,t,a,i,s,o,e,r,l){function d(e){switch(n.currentUser.showWebBar){case 0:return m("http://127.0.0.1:"+(n.currentUser.phoneBarRemoteControlPort||"9888")+"/api/originate/"+c(e));case 2:return t.$broadcast("webrtc::call",{target:c(e)})}}function c(e){return _.isNil(e)?"":e.replace(/[^\w.+#*\-]+/g,"")}function m(e){return a.get(e).success(function(){r.success({title:"Successful call",msg:"Call properly handled!"})}).error(function(e){r.error({title:"PhoneBar API Error",msg:i.instant("CONTACTMANAGER.ERRORS.PHONEBAR_API")})})}n.currentUser=e.getCurrentUser(),n.showMenu=function(){return n.target&&n.target.indexOf("@")<0&&n.target!=n.currentUser.internal&&n.target!=n.currentUser.name&&(0==n.currentUser.showWebBar&&n.currentUser.phoneBarRemoteControl||2==n.currentUser.showWebBar&&n.license.webrtc)&&!n.disabled},n.call=function(e){return 2!==n.currentUser.showWebBar?(t=e,l.user.getVoicePrefixes({id:n.currentUser.id}).$promise.then(function(e){if(e.count)return o.show({controller:"PrefixDialogController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/prefix/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!0,locals:{prefixes:e,required:n.currentUser.phoneBarPrefixRequired}})}).then(function(e){n.currentUser.phoneBarPrefixRequired?e&&-1!==e&&d(e+t):e&&-1!==e?d(e+t):e||d(t)})):d(e);var t},n.transfer=function(e){switch(n.currentUser.showWebBar){case 0:return m("http://127.0.0.1:"+(n.currentUser.phoneBarRemoteControlPort||"9888")+"/api/transfer?number="+c(e));case 2:t.$broadcast("webrtc::transfer",{target:c(e)})}}}],templateUrl:"app/core/directives/ms-click-to-call/ms-click-to-call.html"}})}(),function(){"use strict";function e(i){return{require:"ngModel",priority:1,link:function(e,t,n,a){a.$formatters.push(i.formatter),a.$parsers.push(i.parser)}}}e.$inject=["msDatepickerFixConfig"],angular.module("app.core").provider("msDatepickerFixConfig",function(){var t={formatter:function(e){return e?""===e?e:new Date(e):""},parser:function(e){return e?moment(e).add(moment(e).utcOffset(),"m").toDate():""}};this.config=function(e){t=angular.extend({},t,e)},this.$get=function(){return t}}).directive("msDatepickerFix",e)}(),function(){"use strict";function e(s){return{restrict:"E",scope:{id:"=",model:"=",element:"=",title:"=",path:"="},replace:!0,link:function(t,e){var n=!1,a={};a.id=t.id,_.isNil(t.path)||(a.path=t.path);var i=document.createElement(t.element);i.setAttribute("preload","none"),i.setAttribute("controls","true"),"audio"===t.element&&i.setAttribute("style","width: 265px;"),"video"===t.element&&i.setAttribute("style","max-width: 500px;"),i.setAttribute("title",t.title),i.setAttribute("src"," "),i.onplay=function(e){n||(n=!0,e.preventDefault(),s[t.model].download(a).$promise.then(function(e){var t=[e.buffer],n=new Blob(t,{type:e.type});i.setAttribute("type",e.type),i.setAttribute("src",URL.createObjectURL(n)),i.play()}).catch(function(e){console.error(e)}))},e.append(i)}}}e.$inject=["api"],angular.module("app.core").directive("msDialogRecording",e)}(),function(){"use strict";angular.module("app.core").directive("msDualMultiselect",function(){return{restrict:"E",scope:{options:"="},controller:["$scope",function(o){o.canTransfer=function(e,t,n){if(!t.readOnly)return void 0!==e.isValid&&e.isValid?n?o.transfer(t.selectedItems,t.items,t.selectedItems.indexOf(e),n):o.transfer(t.items,t.selectedItems,t.items.indexOf(e),n):void 0},o.transfer=function(e,t,n,a){var i=[];if(0<=n)i.push(e[n]),t.push(e[n]),e.splice(n,1);else{for(var s=0;s<e.length;s++)void 0!==e[s].isValid&&e[s].isValid&&t.push(e[s]);for(var s=e.length-1;0<=s;s--)e[s].isValid&&e.splice(s,1);i=t}o.options.transferCallback&&o.options.transferCallback(i,a)},o.getLine=function(e,t){var n="";if(_.isNil(t))return n;if(_.isArray(t)){for(var a=0;a<t.length;a++)n+=" "+(e[t[a]]?e[t[a]]:"");return n}return e[t]?e[t]:""}}],templateUrl:"app/core/directives/ms-dual-multiselect/ms-dual-multiselect.html"}})}(),function(){"use strict";function e(a){return{restrict:"E",replace:!0,scope:{onReply:"&",ngModel:"=",ctrlMethods:"=",pickerPosition:"=",search:"=",recentEmojis:"=",placeholder:"="},template:'<textarea class="emojionearea"></textarea>',link:function(n,e){var t=e.emojioneArea({pickerPosition:n.pickerPosition,search:n.search,recentEmojis:n.recentEmojis,placeholder:a.instant(n.placeholder||"Type a message"),attributes:{spellcheck:!0},events:{keypress:function(e,t){n.ngModel=this.getText(),n.onReply({event:t,body:this.getText()})},emojibtn_click:function(){n.ngModel=this.getText()}}});n.ngModel&&t[0].emojioneArea.setText(n.ngModel),n.internalControl=n.ctrlMethods||{},n.internalControl.setText=function(e){t[0].emojioneArea.setText(e)},n.internalControl.getText=function(){return t[0].emojioneArea.getText()},n.$watch("ngModel",function(e){e||t[0].emojioneArea.setText("")})}}}e.$inject=["$translate"],angular.module("app.core").directive("msEmojiArea",e)}(),function(){"use strict";angular.module("app.core").directive("msFontFamily",function(){return{restrict:"E",scope:{ngModel:"="},controller:["$scope",function(e){e.fonts=[{option:"Arial",value:"Arial,Helvetica,sans-serif"},{option:"Comic Sans MS",value:"Comic Sans MS,cursive"},{option:"Courier New",value:"Courier New,Courier,monospace"},{option:"Georgia",value:"Georgia,serif"},{option:"Lucida Sans Unicode",value:"Lucida Sans Unicode,Lucida Grande,sans-serif"},{option:"Tahoma",value:"Tahoma,Geneva,sans-serif"},{option:"Times New Roman",value:"Times New Roman,Times,serif"},{option:"Trebuchet MS",value:"Trebuchet MS,Helvetica,sans-serif"},{option:"Verdana",value:"Verdana,Geneva,sans-serif"}]}],templateUrl:"app/core/directives/ms-font-family/ms-font-family.html"}})}(),function(){"use strict";angular.module("app.core").controller("MsFormWizardController",function(){var t=this;function e(){return t.forms.length}function n(){return 0===t.selectedIndex}function a(){return t.selectedIndex===e()-1}t.forms=[],t.selectedIndex=0,t.registerForm=function(e){t.forms.push(e)},t.previousStep=function(){if(n())return;t.selectedIndex--},t.nextStep=function(){if(a())return;t.selectedIndex++},t.firstStep=function(){t.selectedIndex=0},t.lastStep=function(){t.selectedIndex=e()-1},t.totalSteps=e,t.isFirstStep=n,t.isLastStep=a,t.currentStepInvalid=function(){return angular.isDefined(t.forms[t.selectedIndex])&&t.forms[t.selectedIndex].$invalid},t.previousStepInvalid=function(){return 0<t.selectedIndex&&angular.isDefined(t.forms[t.selectedIndex-1])&&t.forms[t.selectedIndex-1].$invalid},t.formsIncomplete=function(){for(var e=0;e<t.forms.length;e++)if(t.forms[e].$invalid)return!0;return!1},t.resetForm=function(){for(var e=t.selectedIndex=0;e<t.forms.length;e++)t.forms[e].$setPristine(),t.forms[e].$setUntouched()}}).directive("msFormWizard",function(){return{restrict:"E",scope:!0,controller:"MsFormWizardController as msWizard",compile:function(e){return e.addClass("ms-form-wizard"),function(){}}}}).directive("msFormWizardForm",function(){return{restrict:"A",require:["form","^msFormWizard"],compile:function(e){return e.addClass("ms-form-wizard-form"),function(e,t,n,a){var i=a[0],s=a[1];s.registerForm(i)}}}})}(),function(){"use strict";function e(i){return{restrict:"E",scope:{onClose:"&"},transclude:!0,templateUrl:"app/core/directives/ms-info-bar/ms-info-bar.html",link:function(e,t){var n=i.find("ms-info-bar-active"),a="ms-info-bar-active";n.addClass(a),e.removeInfoBar=function(){n.removeClass(a),t.remove(),e.onClose&&e.onClose(),e.$destroy()}}}}e.$inject=["$document"],angular.module("app.core").directive("msInfoBar",e)}(),function(){"use strict";function e(r,a,l,e){var d=this,t={columnCount:5,respectItemOrder:!1,reLayoutDebounce:400,responsive:{md:3,sm:2,xs:1}},n=!0;function i(){n&&e.cancel(n),n=e(function(){!function(){d.containerPos=d.container[0].getBoundingClientRect(),function(){d.columnCount=d.options.columnCount,l("gt-md")?d.columnCount=d.options.columnCount:l("md")?d.columnCount=d.columnCount>d.options.responsive.md?d.options.responsive.md:d.columnCount:l("sm")?d.columnCount=d.columnCount>d.options.responsive.sm?d.options.responsive.sm:d.columnCount:d.columnCount=d.options.responsive.xs;d.columnWidth=d.containerPos.width/d.columnCount}(),r.$broadcast("msMasonry:relayoutStarted"),d.items=d.container.find("ms-masonry-item");for(var e=Array.apply(null,new Array(d.columnCount)).map(function(){return 0}),t=0;t<d.items.length;t++){var n,a,i,s,o=d.items[t];(o=angular.element(o)).scope()&&o.scope().$broadcast("msMasonryItem:startReLayout"),o.css({width:d.columnWidth}),d.options.respectItemOrder?(i=t%d.columnCount,s=e[i]):(s=Math.min.apply(Math,e),i=e.indexOf(s)),e[i]=s+o[0].getBoundingClientRect().height,n=Math.round(i*d.columnWidth),a=s,o.css({transform:"translate3d("+n+"px,"+a+"px,0px)"}),o.addClass("placed"),o.scope()&&o.scope().$broadcast("msMasonryItem:finishReLayout")}}(),r.$broadcast("msMasonry:relayoutFinished")},d.options.reLayoutDebounce)}d.options=null,d.container=[],d.containerPos="",d.columnWidth="",d.items=[],d.reLayout=i,d.initialize=function(){d.options=d.options?angular.extend(t,d.options):t,r.$watch(function(){return d.container.width()},function(e,t){e!==t&&i()})},d.waitImagesLoaded=function(e,t){if("undefined"!=typeof imagesLoaded){var n=a.imagesLoaded(e);n.on("done",function(){t()})}else t()},r.$on("msMasonry:relayout",function(){i()})}function t(o){return{restrict:"AEC",controller:"msMasonryController",compile:function(i,s){return{pre:function(e,t,n,a){a.options=angular.fromJson(s.options||"{}"),a.container=i},post:function(e,t,n,a){o(function(){a.initialize()})}}}}}e.$inject=["$scope","$window","$mdMedia","$timeout"],t.$inject=["$timeout"],angular.module("app.core").controller("msMasonryController",e).directive("msMasonry",t).directive("msMasonryItem",function(){return{restrict:"AEC",require:"^msMasonry",priority:1,link:function(e,t,n,a){a.waitImagesLoaded(t,function(){a.reLayout()}),e.$on("msMasonryItem:finishReLayout",function(){e.$watch(function(){return t.height()},function(e,t){e!==t&&a.reLayout()})}),t.on("$destroy",function(){a.reLayout()})}}})}(),function(){"use strict";function e(n,e,a,i){var s=this;function o(e,t){s.selectedPalette=e,s.selectedHues=t}function r(){o(!(s.selectedColor={palette:"",hue:"",class:""}),!1),d()}function l(e,t){s.selectedColor={palette:e,hue:t,class:"md-"+e+"-"+t+"-bg",bgColorValue:i.rgba(s.palettes[e][t].value),fgColorValue:i.rgba(s.palettes[e][t].contrast)},"obj"!==s.msModelType||angular.equals(s.selectedColor,s.modelCtrl.$viewValue)||d(),o(e,s.palettes[e]),n.$selectedColor=s.selectedColor}function d(){"class"===s.msModelType?s.modelCtrl.$setViewValue(s.selectedColor.class):"obj"===s.msModelType&&s.modelCtrl.$setViewValue(s.selectedColor)}s.palettes=e,s.selectedPalette=!1,s.selectedHues=!1,n.$selectedColor={},s.activateHueSelection=o,s.selectColor=function(e,t){l(e,t),d(),a.hide()},s.removeColor=r,n.$watch("ngModel",function(){if(!s.modelCtrl.$viewValue||""===s.modelCtrl.$viewValue)return void r();var e,t;if("class"===s.msModelType){var n=s.modelCtrl.$viewValue.split("-");t=5<=n.length?(e=n[1]+"-"+n[2],n[3]):(e=n[1],n[2])}else"obj"===s.msModelType&&(e=s.modelCtrl.$viewValue.palette,t=s.modelCtrl.$viewValue.hue||500);l(e,t)})}e.$inject=["$scope","$mdColorPalette","$mdMenu","motionGenerator"],angular.module("app.core").controller("msMaterialColorPickerController",e).directive("msMaterialColorPicker",function(){return{require:["msMaterialColorPicker","ngModel"],restrict:"E",scope:{ngModel:"=",msModelType:"@?"},controller:"msMaterialColorPickerController as vm",transclude:!0,templateUrl:"app/core/directives/ms-material-color-picker/ms-material-color-picker.html",link:function(e,t,n,a,i){var s=a[0];s.modelCtrl=a[1],s.msModelType=e.msModelType||"class",i(e,function(e){(e=e.filter(function(e,t){return 1===t.nodeType})).length&&t.find("ms-color-picker-button").replaceWith(e)})}}})}(),function(){"use strict";function e(p,g,v){return{restrict:"A",link:function(e,t,n){var a="true"===n.msNavIsFolded,i=!1,s=angular.element(p[0].body),o=angular.element('<div id="ms-nav-fold-open-overlay"></div>'),r=angular.element('<div id="ms-nav-fold-close-overlay"></div>'),l=t.parent();function d(){s.addClass("ms-nav-folded"),g.$broadcast("msNav::forceCollapse"),t.scrollTop(0),l.append(o),o.on("mouseenter touchstart",function(e){c(e),i=!0})}function c(e){angular.isDefined(e)&&e.preventDefault(),s.addClass("ms-nav-folded-open"),g.$broadcast("msNav::expandMatchingToggles"),l.find(o).remove(),l.parent().append(r),r.on("mouseenter touchstart",function(e){m(e),i=!1})}function m(e){angular.isDefined(e)&&e.preventDefault(),g.$broadcast("msNav::forceCollapse"),t.scrollTop(0),s.removeClass("ms-nav-folded-open"),l.parent().find(r).remove(),l.append(o),o.on("mouseenter touchstart",function(e){c(e),i=!0})}function u(){s.removeClass("ms-nav-folded ms-nav-folded-open"),g.$broadcast("msNav::expandMatchingToggles"),t.off("mouseenter mouseleave")}v.setFoldable(e,t,a),a?d():u(),e.toggleFold=function(){(a=!a)?d():u()},e.openFolded=c,e.closeFolded=m,e.isNavFoldedOpen=function(){return i},e.$on("$destroy",function(){o.off("mouseenter touchstart"),r.off("mouseenter touchstart"),t.off("mouseenter mouseleave")})}}}function t(n,a,i){return{restrict:"E",scope:{},controller:"MsNavController",compile:function(e){return e.addClass("ms-nav"),function(e){n.$broadcast("msNav::expandMatchingToggles");var t=n.$on("$stateChangeSuccess",function(){n.$broadcast("msNav::expandMatchingToggles"),a.when("navigation").then(function(e){e.close(),i.isNavFoldedOpen()&&i.closeFolded()})});e.$on("$destroy",function(){t()})}}}}function n(m,u,p,g){return{restrict:"A",require:"^msNav",scope:!0,compile:function(e,t){return e.addClass("ms-nav-toggle"),angular.isUndefined(t.collapsed)&&(t.collapsed=!0),e.attr("collapsed",t.collapsed),function(a,i,e,n){var s={expanded:"expanded",expandAnimation:"expand-animation",collapseAnimation:"collapse-animation"},t=i.find("a"),o=[],r=/\(.*\)/g;function l(){return"true"===i.attr("collapsed")}function d(){var e=u.defer();if(!l())return e.reject({error:!0}),e.promise;i.attr("collapsed",!1);var t=angular.element(i.find("ms-nav-toggle-items")[0]);t.css({position:"absolute",visibility:"hidden",display:"block",height:"auto"});var n=t[0].offsetHeight;return t.css({position:"",visibility:"",display:"",height:""}),a.$evalAsync(function(){p.animate(t,{display:"block",height:"0px"},{height:n+"px"},s.expandAnimation).then(function(){t.addClass(s.expanded),t.css({height:""}),e.resolve({success:!0})})}),e.promise}function c(){var e=u.defer();if(l())return e.reject({error:!0}),e.promise;i.attr("collapsed",!0);var t=angular.element(i.find("ms-nav-toggle-items")[0]),n=t[0].offsetHeight;return a.$evalAsync(function(){p.animate(t,{height:n+"px"},{height:"0px"},s.collapseAnimation).then(function(){t.removeClass(s.expanded),t.css({display:"",height:""}),e.resolve({success:!0})})}),e.promise}angular.forEach(t,function(e){var t=angular.element(e).attr("ui-sref");angular.isUndefined(t)||(t=t.replace(r,""),o.push(t))}),n.setToggleItem(i,a),i.children(".ms-nav-button").on("click",function(){if(n.isDisabled())return;n.disable(),l()?(n.clearLockedItems(),a.$emit("msNav::pushToLockedList"),m.$broadcast("msNav::collapse"),d().then(function(){n.enable()})):a.$broadcast("msNav::forceCollapse")}),a.$on("$destroy",function(){i.children(".ms-nav-button").off("click")}),a.$on("msNav::collapse",function(){var e=n.getLockedItems(),t=!1;angular.forEach(e,function(e){angular.equals(e.scope,a)&&(t=!0)}),t||c().then(function(){n.enable()})}),a.$on("msNav::forceCollapse",function(){c().then(function(){n.enable()})}),a.$on("msNav::expandMatchingToggles",function(){var t=g.current.name,n=!1;angular.forEach(o,function(e){t===e&&(n=!0)}),n?d():c()}),a.$on("msNav::pushToLockedList",function(){n.setLockedItem(i,a)})}}}}e.$inject=["$document","$rootScope","msNavFoldService"],t.$inject=["$rootScope","$mdComponentRegistry","msNavFoldService"],n.$inject=["$rootScope","$q","$animate","$state"],angular.module("app.core").factory("msNavFoldService",function(){var n={};return{setFoldable:function(e,t){n={scope:e,element:t}},isNavFoldedOpen:function(){return n.scope.isNavFoldedOpen()},toggleFold:function(){n.scope.toggleFold()},openFolded:function(){n.scope.openFolded()},closeFolded:function(){n.scope.closeFolded()}}}).directive("msNavIsFolded",e).controller("MsNavController",function(){var e=this,t=!1,n=[],a=[];e.isDisabled=function(){return t},e.enable=function(){t=!1},e.disable=function(){t=!0},e.setToggleItem=function(e,t){n.push({element:e,scope:t})},e.getLockedItems=function(){return a},e.setLockedItem=function(e,t){a.push({element:e,scope:t})},e.clearLockedItems=function(){a=[]}}).directive("msNav",t).directive("msNavTitle",function(){return{restrict:"A",compile:function(e){return e.addClass("ms-nav-title"),function(){}}}}).directive("msNavButton",function(){return{restrict:"AE",compile:function(e){return e.addClass("ms-nav-button"),function(){}}}}).directive("msNavToggle",n)}(),function(){"use strict";function e(e,t){e.root?this.navigation=t.getNavigation(e.root):this.navigation=t.getNavigation(),this.toggleHorizontalMobileMenu=function(){angular.element("body").toggleClass("ms-navigation-horizontal-mobile-menu-active")},t.sort()}function t(c,m,u,p){return{restrict:"E",scope:{folded:"=",root:"@"},controller:"MsNavigationController as vm",templateUrl:"app/core/directives/ms-navigation/templates/vertical.html",transclude:!0,compile:function(e){return e.addClass("ms-navigation"),function(e,t){var n=angular.element("body"),a=angular.element('<div id="ms-navigation-fold-expander"></div>'),i=angular.element('<div id="ms-navigation-fold-collapser"></div>'),s=u("navigation");function o(e){if(p.setFolded(e),e)c.$broadcast("msNavigation::collapse"),n.addClass("ms-navigation-folded"),r();else{var t=p.getActiveItem();t&&t.scope.$emit("msNavigation::stateMatched"),n.removeClass("ms-navigation-folded ms-navigation-folded-open"),i.remove()}}function r(){t.parent().append(a),m(function(){a.on("mouseenter touchstart",l)})}function l(e){e&&e.preventDefault(),p.setFoldedOpen(!0);var t=p.getActiveItem();t&&t.scope.$emit("msNavigation::stateMatched"),n.addClass("ms-navigation-folded-open"),a.remove(),n.find("#main").append(i),i.on("mouseenter touchstart",d)}function d(e){e&&e.preventDefault(),p.setFoldedOpen(!1),c.$broadcast("msNavigation::collapse"),n.removeClass("ms-navigation-folded-open"),i.remove(),r()}p.setNavigationScope(e),function(){null===p.getFolded()&&p.setFolded(e.folded);p.getFolded()&&(m(function(){c.$broadcast("msNavigation::collapse")}),n.addClass("ms-navigation-folded"),r())}(),e.$watch(function(){return s.isLockedOpen()},function(e,t){if(!angular.isUndefined(e)&&!angular.equals(e,t)&&p.getFolded())if(e)c.$broadcast("msNavigation::collapse");else{var n=p.getActiveItem();n&&n.scope.$emit("msNavigation::stateMatched")}}),e.$watch("folded",function(e,t){angular.isUndefined(e)||angular.equals(e,t)||o(e)}),e.toggleFolded=function(){o(!p.getFolded())},e.$on("$stateChangeStart",function(){s.close()}),e.$on("$destroy",function(){i.off("mouseenter touchstart"),a.off("mouseenter touchstart")})}}}}function n(n,e,a,i,t,s){var o=this;o.element=e,o.node=n.node,o.hasChildren=void 0,o.collapsed=void 0,o.collapsable=void 0,o.group=void 0,o.animateHeightClass="animate-height",o.toggleCollapsed=function(){o.collapsed?o.expand():o.collapse()},o.collapse=function(){var e=o.element.children("ul"),t=e[0].offsetHeight;n.$evalAsync(function(){o.collapsed=!0,o.element.addClass("collapsing"),i.animate(e,{display:"block",height:t+"px"},{height:"0px"},o.animateHeightClass).then(function(){e.css({display:"",height:""}),o.element.removeClass("collapsing")}),n.$broadcast("msNavigation::collapse")})},o.expand=function(){var e=o.element.children("ul");e.css({position:"absolute",visibility:"hidden",display:"block",height:"auto"});var t=e[0].offsetHeight;e.css({position:"",visibility:"",display:"",height:""}),n.$evalAsync(function(){o.collapsed=!1,o.element.addClass("expanding"),i.animate(e,{display:"block",height:"0px"},{height:t+"px"},o.animateHeightClass).then(function(){e.css({height:""}),o.element.removeClass("expanding")}),a.$broadcast("msNavigation::collapse",o.node._path)})},o.getClass=function(){return o.node.class},o.isHidden=function(){if(angular.isDefined(o.node.hidden)&&angular.isFunction(o.node.hidden))return o.node.hidden();return!1},function(){o.hasChildren=0<o.node.children.length,o.group=!(!angular.isDefined(o.node.group)||!0!==o.node.group),!o.hasChildren||o.group?o.collapsable=!1:o.collapsable=!(!angular.isUndefined(o.node.collapsable)&&"boolean"==typeof o.node.collapsable&&!0!==o.node.collapsable);o.collapsable?o.collapsed=!(!angular.isUndefined(o.node.collapsed)&&"boolean"==typeof o.node.collapsed&&!0!==o.node.collapsed):o.collapsed=!1;if(o.node.state===t.current.name||t.includes(o.node.state)){if(angular.isDefined(o.node.stateParams)&&angular.isDefined(t.params)&&!angular.equals(o.node.stateParams,t.params))return;n.$emit("msNavigation::stateMatched"),s.setActiveItem(o.node,n)}n.$on("msNavigation::stateMatched",function(){o.collapsable&&o.collapsed&&n.$evalAsync(function(){o.collapsed=!1})}),n.$on("msNavigation::collapse",function(e,t){if(!o.collapsed&&o.collapsable)if(angular.isUndefined(t))o.collapse();else{var n=t.split("."),a=[],i=s.getActiveItem();if(i&&(a=i.node._path.split(".")),-1<n.indexOf(o.node._id))return;if(-1<a.indexOf(o.node._id))return;o.collapse()}}),n.$on("$stateChangeSuccess",function(){if(o.node.state===t.current.name){if(angular.isDefined(o.node.stateParams)&&angular.isDefined(t.params)&&!angular.equals(o.node.stateParams,t.params))return;s.setActiveItem(o.node,n),a.$broadcast("msNavigation::collapse",o.node._path)}if(t.includes(o.node.state)){if(angular.isDefined(o.node.stateParams)&&angular.isDefined(t.params)&&!angular.equals(o.node.stateParams,t.params))return;n.$emit("msNavigation::stateMatched")}})}()}function a(t){return{restrict:"E",scope:{root:"@"},controller:"MsNavigationController as vm",templateUrl:"app/core/directives/ms-navigation/templates/horizontal.html",transclude:!0,compile:function(e){return e.addClass("ms-navigation-horizontal"),function(e){t.setNavigationScope(e)}}}}function i(n,e,t,a,i){var s=this;s.element=e,s.node=n.node,s.hasChildren=void 0,s.group=void 0,s.getClass=function(){return s.node.class},function(){if(s.isActive=!1,s.hasChildren=0<s.node.children.length,s.group=!(!angular.isDefined(s.node.group)||!0!==s.node.group),s.node.state===a.current.name||a.includes(s.node.state)){if(angular.isDefined(s.node.stateParams)&&angular.isDefined(a.params)&&!angular.equals(s.node.stateParams,a.params))return;n.$emit("msNavigation::stateMatched"),i.setActiveItem(s.node,n)}n.$on("msNavigation::stateMatched",function(){s.hasChildren&&n.$evalAsync(function(){s.isActive=!0})}),n.$on("msNavigation::clearActive",function(){if(s.hasChildren){var e=[],t=i.getActiveItem();t&&(e=t.node._path.split(".")),-1<e.indexOf(s.node._id)?n.$evalAsync(function(){s.isActive=!0}):n.$evalAsync(function(){s.isActive=!1})}}),n.$on("$stateChangeSuccess",function(){if(s.node.state===a.current.name||a.includes(s.node.state)){if(angular.isDefined(s.node.stateParams)&&angular.isDefined(a.params)&&!angular.equals(s.node.stateParams,a.params))return;i.setActiveItem(s.node,n),t.$broadcast("msNavigation::clearActive")}})}()}function s(i){return{restrict:"A",require:"^msNavigationHorizontalNode",compile:function(e){return e.addClass("ms-navigation-horizontal-item"),function(e,t,n,a){t.on("click",function(){if(!a.hasChildren||i("gt-md"))return;t.toggleClass("expanded")}),e.$on("$destroy",function(){t.off("click")})}}}}e.$inject=["$scope","msNavigationService"],t.$inject=["$rootScope","$timeout","$mdSidenav","msNavigationService"],n.$inject=["$scope","$element","$rootScope","$animate","$state","msNavigationService"],a.$inject=["msNavigationService"],i.$inject=["$scope","$element","$rootScope","$state","msNavigationService"],s.$inject=["$mdMedia"],angular.module("app.core").provider("msNavigationService",function(){var r=angular.injector(["ng"]).get("$log"),l=[];function o(e,t){if(angular.isString(e)){for(var n=e.split("."),a=n[n.length-1],i=function(e){var t=l;if(1===e.length)return t;e.pop();for(var n=0;n<e.length;n++){for(var a=e[n],i=!0,s=0;s<t.length;s++)if(t[s]._id===a){t=t[s].children,i=!1;break}if(i){var o={_id:a,_path:e.join("."),title:a,weight:1,children:[]};t.push(o),t=o.children}}return t}(n),s=!1,o=0;o<i.length;o++)if(i[o]._id===a){s=i[o];break}s?(angular.extend(s,t),s.uisref=m(s)):(t.children=[],!angular.isUndefined(t.weight)&&angular.isNumber(t.weight)||(t.weight=1),t._id=a,t._path=e,t.uisref=m(t),i.push(t))}else r.error("path must be a string (eg. `dashboard.project`)")}function d(e){if(angular.isString(e)){for(var t=l,n=e.split("."),a=0;a<n.length;a++)for(var i=n[a],s=0;s<t.length;s++)if(t[s]._id===i){if(t[s]._path===e)return t.splice(s,1),!0;t=t[s].children;break}return!1}r.error("path must be a string (eg. `dashboard.project`)")}function c(e){e||(e=l).sort(a);for(var t=0;t<e.length;t++){var n=e[t].children;1<n.length&&n.sort(a),0<n.length&&c(n)}}function a(e,t){return parseInt(e.weight)-parseInt(t.weight)}function m(e){var t="";return angular.isDefined(e.state)&&(t=e.state,angular.isDefined(e.stateParams)&&angular.isObject(e.stateParams)&&(t=t+"("+angular.toJson(e.stateParams)+")")),t}this.saveItem=o,this.deleteItem=d,this.sortByWeight=c,this.$get=function(){var n=null,t=null,a=null,i=null,e={saveItem:o,deleteItem:d,sort:c,clearNavigation:function(){l=[],t&&(t.vm.navigation=l)},setActiveItem:function(e,t){n={node:e,scope:t}},getActiveItem:function(){return n},getNavigation:s,getFlatNavigation:function(e){return function e(t){var n=[];for(var a=0;a<t.length;a++){var i=angular.copy(t[a]);i.children=[],n.push(i),0<t[a].children.length&&(n=n.concat(e(t[a].children)))}return n}(s(e))},setNavigationScope:function(e){t=e},setFolded:function(e){a=e},getFolded:function(){return a},setFoldedOpen:function(e){i=e},getFoldedOpen:function(){return i},toggleFolded:function(){t.toggleFolded()}};return e;function s(e){if(e){for(var t=0;t<l.length;t++)if(l[t]._id===e)return[l[t]];return null}return l}}}).controller("MsNavigationController",e).directive("msNavigation",t).controller("MsNavigationNodeController",n).directive("msNavigationNode",function(){return{restrict:"A",bindToController:{node:"=msNavigationNode"},controller:"MsNavigationNodeController as vm",compile:function(e){return e.addClass("ms-navigation-node"),function(e,t,n,a){t.addClass(a.getClass()),a.group&&t.addClass("group")}}}}).directive("msNavigationItem",function(){return{restrict:"A",require:"^msNavigationNode",compile:function(e){return e.addClass("ms-navigation-item"),function(e,t,n,a){a.collapsable&&t.on("click",a.toggleCollapsed),e.$on("$destroy",function(){t.off("click")})}}}}).directive("msNavigationHorizontal",a).controller("MsNavigationHorizontalNodeController",i).directive("msNavigationHorizontalNode",function(){return{restrict:"A",bindToController:{node:"=msNavigationHorizontalNode"},controller:"MsNavigationHorizontalNodeController as vm",compile:function(e){return e.addClass("ms-navigation-horizontal-node"),function(e,t,n,a){t.addClass(a.getClass()),a.group&&t.addClass("group")}}}}).directive("msNavigationHorizontalItem",s)}(),function(){"use strict";function e(i,n,s,e,a,o,t,r,l,d,c){var m=this,u=["ringingId","speakerId","microphoneId","ringingVolume","speakerVolume","microphoneVolume","ringingMute","speakerMute","microphoneMute"],p=JSON.parse(t.localStorage.getItem("motion2.user:"+m.conf.id))||{webrtc:{ringingVolume:.5,speakerVolume:.5,microphoneVolume:1,ringingMute:!1,speakerMute:!1,microphoneMute:!1}};function g(){if(void 0!==jabra)return jabra.getUserDeviceMediaExt({}).then(function(e){var t=e.stream,n=e.deviceInfo,a=n.browserAudioInputId;!jabra.isDeviceSelectedForInput(t,n)||a!==m.conf.microphoneId&&a!==m.conf.speakerId&&a!==m.conf.ringingId?m.isJabraEnabled=!1:(m.isJabraEnabled=!0,console.log("jabra device attached"),jabra.onHook(),jabra.addEventListener("device attached",function(e){console.log("jabra device attached"),g()}),jabra.addEventListener("device detached",function(e){m.isJabraEnabled=!1,m.jabraSession=null}),jabra.addEventListener("reject",function(e){}),jabra.addEventListener("mute",function(e){jabra.mute(),m.conf.microphoneMute=!0}),jabra.addEventListener("unmute",function(e){jabra.unmute(),m.conf.microphoneMute=!1}),jabra.addEventListener("acceptcall",function(e){if(0<m.sessions.length){var t=m.sessions[m.sessions.length-1],n=!0;_.has(t,"localHold")&&t.localHold&&(n=!1),"incoming"===t.direction&&n&&(m.jabraSession=t,m.answer(t))}}),jabra.addEventListener("error",function(e){console.log(e)}),jabra.addEventListener("linebusy",function(e){}),jabra.addEventListener("endcall",function(e){if(e.data.ringing){if(0<m.sessions.length){var t=m.sessions[m.sessions.length-1];"incoming"===t.direction&&(m.jabraSession=t,m.answer(t))}}else m.isInConference?m.buttonClicked||(m.jabraClicked=!0,v(m.jabraSession.id,!0).then(function(e){jabra.onHook(),jabra.offHook(),m.jabraSession=e})):new Promise(function(e,t){for(var n=null,a=0;a<m.sessions.length;a++)_.has(m.sessions[a],"localHold")&&m.sessions[a].localHold||(n=m.sessions[a]);e(n)}).then(function(e){null!==e&&(e.terminate(),m.jabraSession=null)}),m.buttonClicked=!1}),jabra.addEventListener("flash",function(e){m.jabraSession.localHold?(m.jabraSession.unhold({useUpdate:!1}),jabra.resume(),jabra.offHook()):(m.jabraSession.hold({useUpdate:!1}),jabra.onHook(),jabra.hold())}))},function(e){e.horror;m.isJabraEnabled=!1,console.log("Jabra device not recognized")});m.isJabraEnabled=!1}function v(a,i){return new Promise(function(e,t){var n=null;return m.sessions[0]._id===a?(n=m.sessions[1],i&&m.sessions[0].terminate()):(n=m.sessions[0],i&&m.sessions[1].terminate()),e(n)})}function h(e){switch(e){case"ringing":m.conf.ringingMute?m.soundPlayer.muted=!0:m.soundPlayer.muted=!1,m.conf.ringingId&&m.soundPlayer.setSinkId(m.conf.ringingId).then(function(){m.soundPlayer.volume=m.conf.ringingVolume}).then(A).catch(function(e){console.info(e.message,m.conf.ringingId)});break;case"speaker":m.conf.speakerMute?m.remotePlayer.muted=!0:m.remotePlayer.muted=!1,m.conf.speakerId&&m.remotePlayer.setSinkId(m.conf.speakerId).then(function(){m.remotePlayer.volume=m.conf.speakerVolume}).then(A).catch(function(e){console.info(e.message,m.conf.speakerId)});break;case"microphone":for(var t=0;t<m.sessions.length;t+=1)m.conf.microphoneMute?(m.sessions[t].mute(),m.isJabraEnabled&&jabra.mute()):(m.sessions[t].unmute(),m.isJabraEnabled&&jabra.unmute());A();break;default:console.log("unknown device")}}function f(e,t,n){m.calls.unshift({target:e,fullname:n||e,inbound:t,time:moment().format("HH:mm")}),50<m.calls.length&&m.calls.pop()}function b(){return m.conf.license&&m.conf.isWebRTCSupported&&m.conf.hasMicrophone&&m.conf.hasSpeakers&&"https"===m.conf.protocol&&("chrome"===m.conf.browserName.toLowerCase()||"opera"===m.conf.browserName.toLowerCase()||"safari"===m.conf.browserName.toLowerCase())}function A(){p.webrtc=_.pick(m.conf,u),t.localStorage.setItem("motion2.user:"+m.conf.id,JSON.stringify(p))}function E(e){this.remotePlayer.srcObject=e.stream,this.remotePlayer.play()}function y(e){var t,n,a=e.session;switch(m.isJabraEnabled&&jabra.ring(),e.originator){case"local":a.outgoing=!0,a.name=e.request.ruri.user,a.user=e.request.ruri.user,f(a.user,!1);break;case"remote":a.incoming=!0,a.name=e.request.from.display_name,a.user=e.request.from.uri.user,t=e.session,n=t.name?t.name+" <"+t.user+">":t.user,c.create("Incoming call from: ",n,null,function(){t.answer(m.sessionConf)},function(){t.terminate()}).then(function(e){t.notification=e}).catch(function(e){console.error(e)}),f(e.session.user,!0),m.conf.autoAnswer&&s(function(){a.isInProgress()&&(a.autoAnswer=!0,m.conf.microphoneId?m.sessionConf.mediaConstraints.audio={deviceId:m.conf.microphoneId}:m.sessionConf.mediaConstraints.audio=!0,a.answer(m.sessionConf))},m.conf.autoAnswerDelay?1e3*m.conf.autoAnswerDelay:0)}a.call_id=e.request.call_id,a.connection&&(a.connection.onaddstream=E.bind(this)),a.on("progress",function(e,t){var n=!1;switch(t.originator){case"local":this.conf.ringingMute||(this.soundPlayer.setAttribute("src","assets/ms-phonebar/sounds/incoming-call.ogg"),n=!0);break;case"remote":this.putOtherCallsOnHold(e),this.soundPlayer.setAttribute("src","assets/ms-phonebar/sounds/outgoing-call.ogg"),n=!0}n&&(this.soundPlayer.loop="loop",this.soundPlayer.play().catch(function(e){console.log(e.message)}))}.bind(this,a)),a.on("confirmed",function(n,e){return n.confirmed=!0,"remote"===e.originator&&n.connection&&(n.connection.onaddstream=E.bind(this),_.head(n.connection.getRemoteStreams())&&(this.remotePlayer.srcObject=_.head(n.connection.getRemoteStreams()),this.remotePlayer.play())),this.soundPlayer.pause(),this.soundPlayer.loop=null,this.putOtherCallsOnHold(n),h("speaker"),h("microphone"),n.autoAnswer&&(this.soundPlayer.setAttribute("src","assets/ms-phonebar/sounds/beep.ogg"),this.soundPlayer.play().catch(function(e){console.log(e.message)})),2==m.sessions.length?m.canGoInConference=!0:m.canGoInConference=!1,m.isJabraEnabled&&(jabra.offHook(),m.jabraSession=n),d.rpc.getVoiceChannels().$promise.then(function(e){var t=_.find(e.rows,function(e){return e.sipcalllinkedid===n.call_id?e:e.sipcalluniqueid===n.call_id?e:null});t&&(n.monitor=t.monitor,n.uniqueid=t.uniqueid,n.monitors=t.monitors)}).catch(function(e){console.error(e)})}.bind(this,a)),a.on("hold",function(e,t){"local"===t.originator&&(e.localHold=!0)}.bind(this,a)),a.on("unhold",function(e,t){"local"===t.originator&&(e.localHold=!1)}.bind(this,a)),a.on("ended",function(e,t){m.isInConference?_.includes(m.currentConferenceSessions,e.id)&&(O(),m.buttonClicked=!0,m.isJabraEnabled&&!m.jabraClicked?v(e.id,!1).then(function(e){m.jabraSession=e,jabra.offHook()}):jabra.offHook(),m.jabraClicked=!1):m.isJabraEnabled&&(m.jabraSession=null,jabra.onHook()),_.remove(this.sessions,{id:e.id}),2!==m.sessions.length&&(m.canGoInConference=!1)}.bind(this,a)),a.on("failed",function(e,t){this.soundPlayer.pause(),this.soundPlayer.loop=null,e.notification&&e.notification.close(),m.isInConference&&_.includes(m.currentConferenceSessions,e.id)&&O(),_.remove(this.sessions,{id:e.id}),2!==m.sessions.length&&(m.canGoInConference=!1),m.isJabraEnabled&&jabra.onHook()}.bind(this,a)),this.sessions.push(a),i.$$phase||i.$root.$$phase||i.$apply()}function S(){m.target="",document.getElementById("ms-target").blur(),document.getElementById("ms-target").value="",i.$broadcast("angucomplete-alt:clearInput","ms-target-wrap")}function T(e,t,n,a){return function(){o.show(o.simple().textContent(t).position(n).hideDelay(a)),e.terminate()}}function I(t){return d.user.getVoicePrefixes({id:m.conf.id}).$promise.then(function(e){if(e.count)return a.show({controller:"PrefixDialogController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/prefix/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{prefixes:e,required:m.conf.phoneBarPrefixRequired}})}).then(function(e){if(m.conf.phoneBarPrefixRequired){if(e&&-1!==e)return e+t}else{if(e&&-1!==e)return e+t;if(!e)return t}})}function C(){new AudioContext;if(m.isInConference){var e=m.sessions[0].connection.getReceivers()[0],t=m.sessions[1].connection.getReceivers()[0],n=new MediaStream;n.addTrack(e.track),n.addTrack(t.track);var a=document.getElementById("remote-audio");a.srcObject=n;var i=a.play();void 0!==i&&i.then(function(){}).catch(function(e){console.log(e)})}}function O(){m.canGoInConference=!1,m.isInConference=!1,m.currentconferenceSessions=[]}e(function(){},999),m.direction="right",m.selectedMode="md-scale",m.target="",m.showDialpad=!1,m.soundPlayer=document.createElement("audio"),m.remotePlayer=document.getElementById(m.conf.remotePlayerId),m.soundPlayer.volume=1,m.sessionConf={mediaConstraints:{audio:!0,video:!1}},m.sessions=[],m.calls=[],m.canGoInConference=!1,m.isInConference=!1,m.currentConferenceSessions=[],m.ua=new JsSIP.UA({sockets:[new JsSIP.WebSocketInterface("wss://"+m.conf.host+":8089/ws")],uri:new JsSIP.URI("sip",m.conf.name,m.conf.host,5060,null,null).toString(),authorization_user:m.conf.name,ha1:m.conf.ha1,realm:m.conf.realm,user_agent:m.conf.ua,session_timers_refresh_method:"invite",register_expires:m.conf.phoneBarExpires||60,register:!0}),m.conf=_.merge(p.webrtc,m.conf),m.isJabraEnabled=!1,m.jabraSession=null,m.jabraClicked=!1,m.buttonClicked=!1,n.bind("keyup",function(e){switch(e.keyCode){case 27:s(function(){m.showDialpad=!1})}}),m.$onInit=function(){h("ringing"),h("speaker"),jabra.init().then(function(){return jabra.getInstallInfo()}).then(function(e){e.installationOk?g():m.isJabraEnabled=!1}),this.ua.on("registered",function(){this.registered=!0}.bind(this)),this.ua.on("unregistered",function(){this.registered=!1}.bind(this)),this.ua.on("newRTCSession",y.bind(this)),DetectRTC.load(function(){this.conf.hasMicrophone=DetectRTC.hasMicrophone,this.conf.hasSpeakers="Chrome"!==DetectRTC.browser.name&&"Edge"!==DetectRTC.browser.name&&"Opera"!==DetectRTC.browser.name||DetectRTC.hasSpeakers,this.conf.isWebRTCSupported=DetectRTC.isWebRTCSupported,this.conf.osName=DetectRTC.osName,this.conf.osVersion=DetectRTC.osVersion,this.conf.browserName=DetectRTC.browser.name,this.conf.browserVersion=DetectRTC.browser.version,b()?this.ua.start():this.conf.license||l.warning({title:r.instant("TOOLBAR.WARNING"),msg:r.instant("TOOLBAR.WEBRTC_LICENSE_NOT_ENABELD"),clickToClose:!0,showClose:!0,shake:!1,timeout:!1,position:"bottom-right"})}.bind(this))}.bind(this),m.type=function(e,t){var n=e;switch(m.target||(m.target=""),t&&(m.target+=e,i.$broadcast("angucomplete-alt:changeInput","ms-target-wrap",m.target)),e){case"*":n="asterisk";break;case"#":n="pound"}m.conf.enableDtmfTone&&(m.soundPlayer.setAttribute("src","assets/ms-phonebar/sounds/dialpad/"+n+".ogg"),m.soundPlayer.play().catch(function(e){console.log(e.message)}));for(var a=0;a<m.sessions.length;a+=1)m.sessions[a].isEstablished()&&!m.sessions[a].isOnHold().local&&m.sessions[a].sendDTMF(e)},m.call=function(){if(m.target&&m.target!==m.conf.name&&m.target!==m.conf.internal){m.conf.microphoneId?m.sessionConf.mediaConstraints.audio={deviceId:m.conf.microphoneId}:m.sessionConf.mediaConstraints.audio=!0;var e=m.target.replace(/ /g,"");return I(e=(e=e.replace(/\(/g,"")).replace(/\)/g,"")).then(function(e){e&&m.ua.call(e,m.sessionConf)}).then(function(){S()})}},m.hold=function(e){e.hold({useUpdate:!1}),m.isJabraEnabled&&(jabra.hold(),jabra.onHook())},m.refer=function(t){var e=a.prompt().title("Transfer").textContent("Type the target").placeholder("Target").ariaLabel("Target").ok("Transfer").cancel("Cancel");a.show(e).then(function(e){return I(e)}).then(function(e){t.refer(e,{eventHandlers:{requestSucceeded:T(t,"requestSucceeded","top right",3e3),requestFailed:T(t,"requestFailed","top right",3e3)}})})},m.record=function(e){a.show({controller:"RecordDialogController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/record/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{session:e,sessions:m.sessions}})},m.unhold=function(e){e.unhold({useUpdate:!1}),m.putOtherCallsOnHold(e),m.isJabraEnabled&&(jabra.resume(),jabra.offHook())},m.answer=function(e){m.conf.microphoneId?m.sessionConf.mediaConstraints.audio={deviceId:m.conf.microphoneId}:m.sessionConf.mediaConstraints.audio=!0,e.answer(m.sessionConf),m.isJabraEnabled&&(jabra.offHook(),m.jabraSession=e)},m.terminate=function(e){e.terminate(),m.isJabraEnabled&&0===m.sessions.length&&jabra.onHook()},m.selectSession=function(e){e.unhold({useUpdate:!1}),m.putOtherCallsOnHold(e)},m.typeWrapper=function(e){switch(e.key.toLowerCase()){case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"*":case"#":m.type(e.key);break;case"enter":m.call()}},m.toggleDialpad=function(){m.showDialpad=!m.showDialpad},m.referAttended=function(e){a.show({controller:"ReferAttendedDialogController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/referAttended/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{session:e,sessions:_.reject(m.sessions,{id:e.id})}})},m.closeDialpad=function(){m.showDialpad=!1},m.initDevice=h,m.putOtherCallsOnHold=function(e){if(1<m.sessions.length)for(var t=0;t<m.sessions.length;t+=1)m.sessions[t].id===e.id||m.sessions[t].isOnHold().remote||m.sessions[t].hold({useUpdate:!1})},m.targetChanged=function(e){e?/^(\w|\.|\+|#|\*|\(|\)|\s|\-)*$/.test(e)?(m.target=e,i.$broadcast("angucomplete-alt:changeInput","ms-target-wrap",m.target)):m.target?i.$broadcast("angucomplete-alt:changeInput","ms-target-wrap",m.target):S():S()},m.targetSelected=function(e){e&&(m.target=e.originalObject.target,m.call(),S())},m.start3WayConf=function(){m.isInConference=!0,m.canGoInConference=!1,m.currentConferenceSessions.push(m.sessions[0].id),m.currentConferenceSessions.push(m.sessions[1].id);var e=new AudioContext,t=m.sessions[0].connection.getSenders()[0],n=m.sessions[0].connection.getReceivers()[0];n.track.addEventListener("unmute",function(e){setTimeout(function(){C()},1e3)},!1);var a=m.sessions[1].connection.getSenders()[0],i=m.sessions[1].connection.getReceivers()[0];i.track.addEventListener("unmute",function(e){setTimeout(function(){C()},1e3)},!1),m.sessions[0].unhold({useUpdate:!1}),m.sessions[1].unhold({useUpdate:!1}),n.track.enabled=!0,i.track.enabled=!0;var s=new MediaStream,o=e.createMediaStreamDestination();o=(e=new AudioContext).createMediaStreamDestination(),e.createMediaStreamSource(new MediaStream([i.track])).connect(o),e.createMediaStreamSource(new MediaStream([t.track])).connect(o),t.replaceTrack(o.stream.getTracks()[0]).then(function(){}),o=e.createMediaStreamDestination(),e.createMediaStreamSource(new MediaStream([n.track])).connect(o),e.createMediaStreamSource(new MediaStream([a.track])).connect(o),a.replaceTrack(o.stream.getTracks()[0]).then(function(){s.addTrack(n.track),s.addTrack(i.track);var e=document.getElementById("remote-audio");e.srcObject=s;var t=e.play();void 0!==t&&t.then(function(){}).catch(function(e){console.log(e)})})},m.patchConference=C,i.$on("webrtc::settings",function(e){a.show({controller:"SettingsController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/settings/settings.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,resolve:{devices:function(){return navigator.mediaDevices.enumerateDevices()}},locals:{conf:m.conf}}).then(function(e){e&&(m.conf=e,h("ringing"),h("speaker"),g())})}),i.$on("webrtc::logout",function(){m.ua.stop()}),i.$on("webrtc::call",function(e,t){t.target&&(m.target=t.target,m.call())}),i.$on("webrtc::transfer",function(e,t){if(t.target)for(var n=0;n<m.sessions.length;n+=1)if(m.sessions[n].isEstablished()&&!m.sessions[n].isOnHold().local)return I(t.target).then(function(e){e&&m.sessions[n].refer(e,{eventHandlers:{requestSucceeded:T(m.sessions[n],"requestSucceeded","top right",3e3),requestFailed:T(m.sessions[n],"requestFailed","top right",3e3)}})})})}e.$inject=["$scope","$document","$timeout","$interval","$mdDialog","$mdToast","$window","$translate","toasty","api","motNotification"],angular.module("app.core").controller("MsPhonebarController",e).directive("msPhonebar",function(){return{restrict:"E",scope:{conf:"="},require:"msPhonebar",controller:"MsPhonebarController",controllerAs:"vm_pb",bindToController:!0,templateUrl:"assets/ms-phonebar/ms-phonebar.html"}})}(),function(){"use strict";function e(t,e,n){var a=this;a.prefixes=e,a.required=n,a.closeDialog=function(e){t.hide(e)},a.call=function(){t.hide(a.prefix)}}e.$inject=["$mdDialog","prefixes","required"],angular.module("app.core").controller("PrefixDialogController",e)}(),function(){"use strict";function e(i){return{restrict:"C",controller:["$scope","$element",function(e,t){function n(){t.css("display","inline"),i(a,1e3)}function a(){t.css("display","none"),i(n,1e3)}n()}],replace:!0}}function t(t,i,s,e,n){var o=this;function a(t,e){console.log("startMonitor");var n=i.defer(),a=(e||t.filename.replace(/^.*[\\\/]/,"")).split(".")[0];return s.rpc.startMonitor({uniqueid:o.session.uniqueid,filename:a,format:"wav"}).$promise.then(function(e){t.filename=a+".wav",t.mixmonitorid=e.mixmonitorid,t.status="rec",o.session.monitor=!0,n.resolve(t)}).catch(function(e){n.reject(e)}),n.promise}o.title="Record",o.sessions=e,o.session=n,o.closeDialog=function(){t.hide()},o.addRecording=function(){var e=t.prompt({skipHide:!0}).title("Start new recording").textContent("Type the file name.").placeholder("File name").ariaLabel("File name").initialValue(function(){function e(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()}()).ok("Start").cancel("Cancel");t.show(e).then(function(e){return a({},e)}).then(function(e){o.session.monitors.push(e)})},o.stop=function(t){return console.log("stopMonitor"),s.rpc.stopMonitor({uniqueid:o.session.uniqueid,mixmonitorid:t.mixmonitorid}).$promise.then(function(e){t.status="pause",o.session.monitor=_.includes(o.session.monitors,{status:"rec"})}).catch(function(e){console.error(e)})},o.start=a}e.$inject=["$timeout"],t.$inject=["$mdDialog","$q","api","sessions","session"],angular.module("app.core").directive("msBlink",e).controller("RecordDialogController",t)}(),function(){"use strict";function e(t,a,i,e){var s=this;function o(e){t.hide(e)}s.title="Refer Attended",s.sessions=i,s.session=e,s.sessionTarget=null,i.length&&(s.target=i[0].user),s.closeDialog=o,s.transfer=function(){var e,t,n=_.find(i,function(e){if(e.user===s.target)return e});t=n.outgoing?(e=n,s.session):(e=s.session,n);t.refer(e.user,{replaces:e,eventHandlers:{requestSucceeded:function(e){a.show(a.simple().textContent("requestSucceeded").position("top right").hideDelay(3e3)),o(),t.terminate()},requestFailed:function(e){a.show(a.simple().textContent("requestFailed").position("top right").hideDelay(3e3)),o(),t.terminate()}}})}}e.$inject=["$mdDialog","$mdToast","sessions","session"],angular.module("app.core").controller("ReferAttendedDialogController",e)}(),function(){"use strict";function e(e,s,t){var n=this;function a(e,t,n){var a;if(s[n]){if(a=_.find(e,function(e){return e.deviceId===s[n]}))return a.deviceId;var i=_.findIndex(e,function(e){return e.kind===t});if(0<=i)return e[i].deviceId}else(a=_.find(e,function(e){return e.kind===t}))&&(s[n]=a.deviceId);return s[n]||null}s.ringingId=a(t,"audiooutput","ringingId"),s.speakerId=a(t,"audiooutput","speakerId"),s.microphoneId=a(t,"audioinput","microphoneId"),s.ringingVolume=s.ringingVolume||.5,s.speakerVolume=s.speakerVolume||.5,s.microphoneVolume=s.microphoneVolume||1,s.ringingMute=s.ringingMute||!1,s.speakerMute=s.speakerMute||!1,s.microphoneMute=s.microphoneMute||!1,n.conf=angular.copy(s),n.devices=t,n.saveSettings=function(){e.hide(n.conf)},n.closeDialog=function(){e.hide()},n.isCompatibleBrowser=function(){return"chrome"===n.conf.browserName.toLowerCase()||"opera"===n.conf.browserName.toLowerCase()||"safari"===n.conf.browserName.toLowerCase()}}e.$inject=["$mdDialog","conf","devices"],angular.module("app.toolbar").controller("SettingsController",e)}(),function(){"use strict";angular.module("app.core").directive("msRandomClass",function(){return{restrict:"A",scope:{msRandomClass:"="},link:function(e,t){var n=e.msRandomClass[Math.floor(Math.random()*e.msRandomClass.length)];t.addClass(n)}}})}(),function(){"use strict";function e(i){return{restrict:"E",scope:{id:"=",model:"=",download:"="},replace:!0,link:function(t,e){var n=!1,a=document.createElement("audio");t.download||a.setAttribute("controlsList","nodownload"),a.setAttribute("preload","none"),a.setAttribute("controls",""),a.setAttribute("style","width: 265px;"),a.setAttribute("src"," "),a.onplay=function(e){n||(n=!0,e.preventDefault(),i[t.model||"voiceRecording"].download({id:t.id}).$promise.then(function(e){var t=[e.buffer],n=new Blob(t,{type:e.type});a.setAttribute("type",e.type),a.setAttribute("src",URL.createObjectURL(n)),a.play()}).catch(function(e){console.error(e)}))},e.append(a)}}}e.$inject=["api"],angular.module("app.core").directive("msRecording",e)}(),function(){"use strict";angular.module("app.core").directive("msResponsiveTable",function(){return{restrict:"A",link:function(e,t){var n=angular.element('<div class="ms-responsive-table-wrapper"></div>');t.after(n),n.append(t)}}})}(),function(){"use strict";function e(s,o,t,n){return{restrict:"AE",compile:function(e){if(!(n.getConfig("disableCustomScrollbars")||n.getConfig("disableCustomScrollbarsOnMobile")&&t.isMobile()))return e.addClass("ms-scroll"),function(e,t,n){var a={};function i(){PerfectScrollbar.update(t[0])}n.msScroll&&(a=e.$eval(n.msScroll)),a=angular.extend({},o.getConfig(),a),s(function(){PerfectScrollbar.initialize(t[0],a)},0),t.on("mouseenter",i),e.$watch(function(){return t.prop("scrollHeight")},function(e,t){angular.isUndefined(e)||angular.equals(e,t)||i()}),e.$watch(function(){return t.prop("scrollWidth")},function(e,t){angular.isUndefined(e)||angular.equals(e,t)||i()}),e.$on("$destroy",function(){t.off("mouseenter"),PerfectScrollbar.destroy(t[0])})}}}}e.$inject=["$timeout","msScrollConfig","msUtils","motionConfig"],angular.module("app.core").provider("msScrollConfig",function(){var t={wheelSpeed:1,wheelPropagation:!1,swipePropagation:!0,minScrollbarLength:null,maxScrollbarLength:null,useBothWheelAxes:!1,useKeyboard:!0,suppressScrollX:!1,suppressScrollY:!1,scrollXMarginOffset:0,scrollYMarginOffset:0,stopPropagationOnClick:!0};this.config=function(e){t=angular.extend({},t,e)},this.$get=function(){var e={getConfig:function(){return t}};return e}}).directive("msScroll",e)}(),function(){"use strict";function e(s,i,e){var o=this;o.collapsed=!0,o.query=void 0,o.queryOptions={debounce:o.debounce||0};var t=!(!o.collapseOnBlur||"true"!=o.collapseOnBlur);o.resultsLoading=!1,o.results=null,o.selectedResultIndex=0,o.ignoreMouseEvents=!1,o.onInit=function(){s.$watch("MsSearchBar.query",function(e,t){if(!angular.isUndefined(e)&&!angular.equals(e,t)){if(o.collapsed){if(!e)return;s.expand()}var n=s.$parent.$eval(o.onSearch,{query:e}),a=angular.isArray(n),i=n&&!!n.then;a&&o.populateResults(n),i&&(o.resultsLoading=!0,n.then(function(e){o.populateResults(e)},function(){o.populateResults([])}).finally(function(){o.resultsLoading=!1}))}})},o.populateResults=function(e){if(o.collapsed)return;var t=angular.isArray(e),n=null===e;if(!t&&!n)return;o.selectedResultIndex=0,o.results=e},o.expand=function(){o.collapsed=!1,s.expand(),o.onExpand&&angular.isFunction(o.onExpand)&&o.onExpand()},o.collapse=function(){o.query="",o.populateResults(null),o.collapsed=!0,s.collapse(),o.onCollapse&&angular.isFunction(o.onCollapse)&&o.onCollapse()},o.blurCollapse=function(){if(!t)return;o.collapse()},o.absorbEvent=function(e){e.preventDefault()},o.handleKeydown=function(e){var t=e.keyCode;-1<[27,38,40].indexOf(t)&&e.preventDefault();switch(t){case 13:if(!o.results)return;o.handleResultClick(o.results[o.selectedResultIndex]);break;case 27:o.collapse();break;case 38:0<=o.selectedResultIndex-1&&(o.selectedResultIndex--,o.ensureSelectedResultIsVisible());break;case 40:if(!o.results)return;o.selectedResultIndex+1<o.results.length&&(o.selectedResultIndex++,o.ensureSelectedResultIsVisible())}},o.handleMouseenter=function(e){if(o.ignoreMouseEvents)return;o.selectedResultIndex=e},o.temporarilyIgnoreMouseEvents=function(){o.ignoreMouseEvents=!0,e.cancel(o.mouseEventIgnoreTimeout),o.mouseEventIgnoreTimeout=e(function(){o.ignoreMouseEvents=!1},250)},o.handleResultClick=function(e){o.onResultClick&&o.onResultClick({item:e});o.collapse()},o.ensureSelectedResultIsVisible=function(){var e=i.find(".ms-search-bar-results"),t=angular.element(e.find(".result")[o.selectedResultIndex]);if(e&&t){var n=t.position().top-8,a=t.position().top+t.outerHeight()+8;o.temporarilyIgnoreMouseEvents(),e.scrollTop()>n&&e.scrollTop(n),a>e.height()+e.scrollTop()&&e.scrollTop(a-e.height())}}}function t(i){return{restrict:"E",scope:{},require:"msSearchBar",controller:"MsSearchBarController as MsSearchBar",bindToController:{query:"=?",debounce:"=?",direction:"@",onSearch:"@",onResultClick:"&?",onExpand:"&?",onCollapse:"&?",collapseOnBlur:"@"},templateUrl:"app/core/directives/ms-search-bar/ms-search-bar.html",compile:function(e){return e.addClass("ms-search-bar"),function(e,t){var n,a=i.find("body");e.collapse=function(){t.removeClass("expanded"),a.removeClass("ms-search-bar-expanded")},e.expand=function(){t.addClass("expanded"),"down"===e.MsSearchBar.direction&&t.addClass("down");a.addClass("ms-search-bar-expanded"),n.focus()},n=t.find("#ms-search-bar-input")}}}}e.$inject=["$scope","$element","$timeout"],t.$inject=["$document"],angular.module("app.core").controller("MsSearchBarController",e).directive("msSearchBar",t)}(),function(){"use strict";function e(e,n,i,o,r,l){var d=this;d.query="",d.queryOptions={debounce:300},d.resultsLoading=!1,d.selectedResultIndex=0,d.ignoreMouseEvents=!1,d.mobileBarActive=!1,d.results=null,d.shortcuts=[],d.sortableOptions={ghostClass:"ghost",forceFallback:!0,fallbackClass:"dragging",onSort:function(){d.saveShortcuts()}},d.populateResults=function(){for(var e=[],t=l.getFlatNavigation(),n=r.defer(),a=0;a<t.length;a++)t[a].uisref&&e.push(t[a]);if(d.query){e=e.filter(function(e){if(-1<angular.lowercase(e.title).search(angular.lowercase(d.query)))return!0});for(var i=0;i<e.length;i++){e[i].hasShortcut=!1;for(var s=0;s<d.shortcuts.length;s++)if(d.shortcuts[s]._id===e[i]._id){e[i].hasShortcut=!0;break}}}else 0<d.shortcuts.length&&(e=d.shortcuts);return d.selectedResultIndex=0,o(function(){n.resolve(e)},250),n.promise},d.loadShortcuts=function(){var e=r.defer(),t=angular.fromJson(n.get("motion.shortcuts"));angular.isUndefined(t)&&(t=[{title:"Agents",icon:"icon-account-multiple",state:"app.staff.agents",weight:5,children:[],uisref:"app.staff.agents",hasShortcut:!0},{title:"License",icon:"icon-cog",state:"app.settings.license",weight:10,children:[],uisref:"app.settings.license",hasShortcut:!0}],n.put("motion.shortcuts",angular.toJson(t)));return e.resolve(t),e.promise},d.saveShortcuts=function(){var e=r.defer();return n.put("motion.shortcuts",angular.toJson(d.shortcuts)),o(function(){e.resolve({success:!0})},250),e.promise},d.addShortcut=function(e){e.hasShortcut=!0,d.shortcuts.push(e),d.saveShortcuts()},d.removeShortcut=function(e){e.hasShortcut=!1;for(var t=0;t<d.shortcuts.length;t++)d.shortcuts[t]._id===e._id&&(d.shortcuts.splice(t,1),d.query||(0===d.shortcuts.length?d.results=null:t>=d.shortcuts.length&&(d.selectedResultIndex=d.shortcuts.length-1)));d.saveShortcuts()},d.handleResultClick=function(e){e.hasShortcut?d.removeShortcut(e):d.addShortcut(e)},d.absorbEvent=function(e){e.preventDefault()},d.handleKeydown=function(e){var t=e.keyCode;-1<[38,40].indexOf(t)&&e.preventDefault();switch(t){case 13:d.handleResultClick(d.results[d.selectedResultIndex]);break;case 38:0<=d.selectedResultIndex-1&&(d.selectedResultIndex--,d.ensureSelectedResultIsVisible());break;case 40:d.selectedResultIndex+1<d.results.length&&(d.selectedResultIndex++,d.ensureSelectedResultIsVisible())}},d.handleMouseenter=function(e){if(d.ignoreMouseEvents)return;d.selectedResultIndex=e},d.temporarilyIgnoreMouseEvents=function(){d.ignoreMouseEvents=!0,o.cancel(d.mouseEventIgnoreTimeout),d.mouseEventIgnoreTimeout=o(function(){d.ignoreMouseEvents=!1},250)},d.ensureSelectedResultIsVisible=function(){var e=i.find("#ms-shortcut-add-menu").find(".results"),t=angular.element(e.find(".result")[d.selectedResultIndex]);if(e&&t){var n=t.position().top-8,a=t.position().top+t.outerHeight()+8;d.temporarilyIgnoreMouseEvents(),e.scrollTop()>n&&e.scrollTop(n),a>e.height()+e.scrollTop()&&e.scrollTop(a-e.height())}},d.toggleMobileBar=function(){d.mobileBarActive=!d.mobileBarActive},d.loadShortcuts().then(function(e){d.shortcuts=e,0<d.shortcuts.length&&(d.results=e)}),e.$watch("MsShortcuts.query",function(e,t){angular.isUndefined(e)||angular.equals(e,t)||(d.resultsLoading=!0,d.populateResults().then(function(e){d.results=e},function(){d.results=[]}).finally(function(){d.resultsLoading=!1}))})}e.$inject=["$scope","$cookies","$document","$timeout","$q","msNavigationService"],angular.module("app.core").controller("MsShortcutsController",e).directive("msShortcuts",function(){return{restrict:"E",scope:{},require:"msShortcuts",controller:"MsShortcutsController as MsShortcuts",bindToController:{},templateUrl:"app/core/directives/ms-shortcuts/ms-shortcuts.html",compile:function(e){return e.addClass("ms-shortcuts"),function(e,t){}}}})}(),function(){"use strict";angular.module("app.core").directive("msSidenavHelper",function(){return{restrict:"A",require:"^mdSidenav",link:function(e,t,n,a){e.$watch(function(){return a.isOpen()&&!a.isLockedOpen()},function(e){angular.isUndefined(e)||(t.parent().toggleClass("full-height",e),angular.element("html").toggleClass("sidenav-open",e))})}}})}(),function(){"use strict";function e(a){return{restrict:"E",link:function(e,t){var n=e.$on("msSplashScreen::remove",function(){a.leave(t).then(function(){n(),e=t=null})})}}}e.$inject=["$animate"],angular.module("app.core").directive("msSplashScreen",e)}(),function(){"use strict";function e(e){var i=this;function t(){i.setCurrentStep(1)}function n(e){return o(e)?i.steps[e-1].scope.optionalStep:null}function a(e){return o(e)?!!i.steps[e-1].scope.hideStep:null}function s(e){return o(e)?!!n(e)||i.steps[e-1].form.$valid:null}function o(e){return!(angular.isUndefined(e)||e<1||e>i.steps.length)}i.mainForm=void 0,i.orientation="horizontal",i.steps=[],i.currentStep=void 0,i.currentStepNumber=1,i.setOrientation=function(e){i.orientation=e||"horizontal"},i.registerMainForm=function(e){i.mainForm=e},i.registerStep=function(e,t,n){var a={element:e,scope:t,form:n,stepNumber:t.step||i.steps.length+1,stepTitle:t.stepTitle,stepTitleTranslate:t.stepTitleTranslate};return i.steps.push(a),i.steps.sort(function(e,t){return e.stepNumber-t.stepNumber}),a},i.setupSteps=function(){i.setCurrentStep(i.currentStepNumber)},i.resetForm=function(){e(function(){for(var e=0;e<i.steps.length;e++)i.steps[e].form.$setPristine(),i.steps[e].form.$setUntouched();i.mainForm.$setPristine(),i.mainForm.$setUntouched(),t()})},i.setCurrentStep=function(e){if(!o(e))return;if(i.currentStepNumber=e,"horizontal"===i.orientation){for(var t=0;t<i.steps.length;t++)i.steps[t].element.hide();i.steps[i.currentStepNumber-1].element.show()}else if("vertical"===i.orientation){for(var n=0;n<i.steps.length;n++)i.steps[n].element.find(".ms-stepper-step-content").hide();i.steps[i.currentStepNumber-1].element.find(".ms-stepper-step-content").show()}},i.gotoStep=function(e){if(a(e))return;i.setCurrentStep(e)},i.gotoPreviousStep=function(){for(var e=i.currentStepNumber-1,t=e;1<=t;t--)if(!a(t)){e=t;break}i.setCurrentStep(e)},i.gotoNextStep=function(){for(var e=i.currentStepNumber+1,t=e;t<=i.steps.length;t++)if(!a(t)){e=t;break}i.setCurrentStep(e)},i.gotoFirstStep=t,i.gotoLastStep=function(){i.setCurrentStep(i.steps.length)},i.isFirstStep=function(){return 1===i.currentStepNumber},i.isLastStep=function(){return i.currentStepNumber===i.steps.length},i.isStepCurrent=function(e){return o(e)?i.currentStepNumber===e:null},i.isStepDisabled=function(e){if(!o(e))return null;for(var t=!1,n=1;n<e;n++)if(!s(n)){t=!0;break}return t},i.isStepOptional=n,i.isStepHidden=a,i.filterHiddenStep=function(e){return!a(e.stepNumber)},i.isStepValid=s,i.isStepNumberValid=o,i.isFormValid=function(){return i.mainForm.$valid}}function t(o){return{restrict:"A",scope:{},require:["form","msVerticalStepper"],priority:1001,controller:"MsStepperController as MsStepper",bindToController:{model:"=ngModel"},transclude:!0,templateUrl:"app/core/directives/ms-stepper/templates/vertical/vertical.html",compile:function(e){return e.addClass("ms-stepper"),function(e,t,n,a){var i=a[0],s=a[1];o(function(){s.setOrientation("vertical"),s.registerMainForm(i),s.setupSteps()})}}}}e.$inject=["$timeout"],t.$inject=["$timeout"],angular.module("app.core").controller("MsStepperController",e).directive("msHorizontalStepper",function(){return{restrict:"A",scope:{},require:["form","msHorizontalStepper"],priority:1001,controller:"MsStepperController as MsStepper",bindToController:{model:"=ngModel"},transclude:!0,templateUrl:"app/core/directives/ms-stepper/templates/horizontal/horizontal.html",compile:function(e){return e.addClass("ms-stepper"),function(e,t,n,a){var i=a[0],s=a[1];s.setOrientation("horizontal"),s.registerMainForm(i),s.setupSteps()}}}}).directive("msHorizontalStepperStep",function(){return{restrict:"E",require:["form","^msHorizontalStepper"],priority:1e3,scope:{step:"=?",stepTitle:"=?",stepTitleTranslate:"=?",optionalStep:"=?",hideStep:"=?"},compile:function(e){return e.addClass("ms-stepper-step"),function(e,t,n,a){var i=a[0],s=a[1];e.optionalStep=angular.isDefined(n.optionalStep),s.registerStep(t,e,i),t.hide()}}}}).directive("msVerticalStepper",t).directive("msVerticalStepperStep",function(){return{restrict:"E",require:["form","^msVerticalStepper"],priority:1e3,scope:{step:"=?",stepTitle:"=?",stepTitleTranslate:"=?",optionalStep:"=?",hideStep:"=?"},transclude:!0,templateUrl:"app/core/directives/ms-stepper/templates/vertical/step/vertical-step.html",compile:function(e){return e.addClass("ms-stepper-step"),function(e,t,n,a){var i=a[0],s=a[1];e.optionalStep=angular.isDefined(n.optionalStep),e.stepInfo=s.registerStep(t,e,i),e.MsStepper=s,t.find(".ms-stepper-step-content").hide()}}}})}(),function(){"use strict";function e(e){return{restrict:"E",scope:{},transclude:!0,controller:"MsTabScrollController",controllerAs:"vm",bindToController:!0,templateUrl:"app/core/directives/ms-tab-scroll/ms-tab-scroll.html",compile:function(e){return e.addClass("ms-tab-scroll"),function(e,t){}}}}e.$inject=["$document"],angular.module("app.core").controller("MsTabScrollController",function(){function t(){var e=document.getElementById("bar-container"),t=document.getElementById("tab-container");return t.scrollWidth>e.scrollWidth&&0==e.scrollLeft&&0==t.scrollLeft?"right":t.scrollWidth>e.scrollWidth&&t.scrollLeft>e.scrollLeft&&e.scrollWidth+t.scrollLeft>=t.scrollWidth?"left":t.scrollWidth>e.scrollWidth&&t.scrollLeft>e.scrollLeft&&e.scrollWidth+t.scrollLeft<t.scrollWidth?"both":"none"}this.onTabScroll=function(e){"left"==e?$("#tab-container").stop().animate({scrollLeft:"-=400"},1e3):$("#tab-container").stop().animate({scrollLeft:"+=400"},1e3)},this.canScroll=function(e){switch(t()){case"both":return!0;case"left":return"left"==e;case"right":return"right"==e;case"none":default:return!1}}}).directive("msTabScroll",e)}(),function(){"use strict";function e(m,u){return{scope:!0,require:"^msTimeline",compile:function(e){return e.addClass("ms-timeline-item").addClass("hidden"),function(e,n,t,a){var i=72,s=!1,o=!1,r=a.getScrollEl();!function(){n.find("ms-card")?e.$on("msCard::cardTemplateLoaded",function(e,t){var n=angular.element(t[0]);d(n).then(function(){m(function(){s=!0})})}):d(n).then(function(){m(function(){s=!0})});r.on("scroll",c),c()}();var l=e.$watch(function(){return s&&o},function(e,t){angular.equals(e,t)||e&&(n.removeClass("hidden").addClass("animate"),l())},!0);function d(e){var t=u.defer(),n=e.find("img");return 0<n.length?n.on("load",function(){t.resolve("Image is loaded")}):t.resolve("No images"),t.promise}function c(){r.scrollTop()+r.height()>n.position().top+i&&(m(function(){o=!0}),r.off("scroll",c))}}}}}e.$inject=["$timeout","$q"],angular.module("app.core").controller("MsTimelineController",function(){var t=this;t.scrollEl=void 0,t.setScrollEl=function(e){t.scrollEl=e},t.getScrollEl=function(){return t.scrollEl}}).directive("msTimeline",function(){return{scope:{msTimeline:"=?",loadMore:"&?msTimelineLoadMore"},controller:"MsTimelineController",compile:function(e){return e.addClass("ms-timeline"),function(e,t,n,a){var i=angular.element('<div class="ms-timeline-loader md-accent-bg md-whiteframe-4dp"><span class="spinner animate-rotate"></span></div>');t.append(i);var s={scrollEl:"#content"};s=angular.extend(s,e.msTimeline,{});var o=angular.element(s.scrollEl);a.setScrollEl(o);var r=144;function l(){o.scrollTop()+o.height()+r>i.position().top&&(i.addClass("show"),c(),e.loadMore().then(function(){i.removeClass("show"),d()},function(){i.remove()}))}function d(){o.on("scroll",l)}function c(){o.off("scroll",l)}d(),e.$on("$destroy",function(){c()})}}}}).directive("msTimelineItem",e)}(),function(){"use strict";function e(a,e,t,n,i,s,o,r,l){function d(){a.timeoutId&&clearTimeout(a.timeoutId)}function c(){void 0!==o.startTime&&(a.millis=moment().diff(moment(a.startTime))),a.maxTimeUnit&&"day"!==a.maxTimeUnit?"second"===a.maxTimeUnit?(a.seconds=Math.floor(a.millis/1e3),a.minutes=0,a.hours=0,a.days=0,a.months=0,a.years=0):"minute"===a.maxTimeUnit?(a.seconds=Math.floor(a.millis/1e3%60),a.minutes=Math.floor(a.millis/6e4),a.hours=0,a.days=0,a.months=0,a.years=0):"hour"===a.maxTimeUnit?(a.seconds=Math.floor(a.millis/1e3%60),a.minutes=Math.floor(a.millis/6e4%60),a.hours=Math.floor(a.millis/36e5),a.days=0,a.months=0,a.years=0):"month"===a.maxTimeUnit?(a.seconds=Math.floor(a.millis/1e3%60),a.minutes=Math.floor(a.millis/6e4%60),a.hours=Math.floor(a.millis/36e5%24),a.days=Math.floor(a.millis/36e5/24%30),a.months=Math.floor(a.millis/36e5/24/30),a.years=0):"year"===a.maxTimeUnit&&(a.seconds=Math.floor(a.millis/1e3%60),a.minutes=Math.floor(a.millis/6e4%60),a.hours=Math.floor(a.millis/36e5%24),a.days=Math.floor(a.millis/36e5/24%30),a.months=Math.floor(a.millis/36e5/24/30%12),a.years=Math.floor(a.millis/36e5/24/365)):(a.seconds=Math.floor(a.millis/1e3%60),a.minutes=Math.floor(a.millis/6e4%60),a.hours=Math.floor(a.millis/36e5%24),a.days=Math.floor(a.millis/36e5/24),a.months=0,a.years=0),a.secondsS=1===a.seconds||0===a.seconds?"":"s",a.minutesS=1===a.minutes||0===a.minutes?"":"s",a.hoursS=1===a.hours||0===a.hours?"":"s",a.daysS=1===a.days||0===a.days?"":"s",a.monthsS=1===a.months||0===a.months?"":"s",a.yearsS=1===a.years||0===a.years?"":"s",a.sseconds=a.seconds<10?"0"+a.seconds:a.seconds,a.mminutes=a.minutes<10?"0"+a.minutes:a.minutes,a.hhours=a.hours<10?"0"+a.hours:a.hours,a.ddays=a.days<10?"0"+a.days:a.days,a.mmonths=a.months<10?"0"+a.months:a.months,a.yyears=a.years<10?"0"+a.years:a.years}"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),a.autoStart=o.autoStart||o.autostart,0===r.html().trim().length?r.append(l("<span>{{millis}}</span>")(a)):r.append(l(r.contents())(a)),a.interval=a.intervalAttr||1e3,a.startTime=null,a.endTime=null,a.timeoutId=null,a.countdown=a.countdownAttr&&0<=parseInt(a.countdownAttr,10)?parseInt(a.countdownAttr,10):void 0,a.isRunning=!1,a.$watch("startTimeAttr",function(e,t){e!==t&&a.isRunning&&a.start()}),a.$on("timer-start",function(){a.start()}),a.$on("timer-resume",function(){a.resume()}),a.$on("timer-stop",function(){a.stop()}),a.$on("timer-clear",function(){a.clear()}),a.$on("timer-set-countdown",function(e,t){a.countdown=t}),a.start=r[0].start=function(){var e=moment(),t=a.startTimeAttr?moment(a.startTimeAttr):null;a.startTime=!t||e<t?e:t;var n=a.endTimeAttr?moment(a.endTimeAttr):null;a.endTime=!n||n<e?null:n,a.countdown||(a.countdown=a.countdownAttr&&0<parseInt(a.countdownAttr,10)?parseInt(a.countdownattr,10):void 0),d(),m(),a.isRunning=!0},a.resume=r[0].resume=function(){d(),a.countdownAttr&&(a.countdown+=1),a.startTime=moment().diff(moment(a.stoppedTime).diff(moment(a.startTime))),m(),a.isRunning=!0},a.stop=a.pause=r[0].stop=r[0].pause=function(){a.clear(),a.$emit("timer-stopped",{timeoutId:a.timeoutId,millis:a.millis,seconds:a.seconds,minutes:a.minutes,hours:a.hours,days:a.days})},a.clear=r[0].clear=function(){a.stoppedTime=moment(),d(),a.timeoutId=null,a.isRunning=!1},r.bind("$destroy",function(){d(),a.isRunning=!1});var m=function(){a.millis=moment().diff(a.startTime);var e=a.millis%1e3;if(a.endTimeAttr&&(a.millis=moment(a.endTime).diff(moment()),e=a.interval-a.millis%1e3),a.countdownAttr&&(a.millis=1e3*a.countdown),a.millis<0)return a.stop(),a.millis=0,c(),void(a.finishCallback&&a.$eval(a.finishCallback));c(),a.timeoutId=setTimeout(function(){m(),a.$digest()},a.interval-e),a.$emit("timer-tick",{timeoutId:a.timeoutId,millis:a.millis}),0<a.countdown?a.countdown--:a.countdown<=0&&(a.stop(),a.finishCallback&&a.$eval(a.finishCallback))};void 0!==a.autoStart&&!0!==a.autoStart||a.start()}e.$inject=["$scope","$document","$timeout","$interval","$window","$translate","$attrs","$element","$compile"],angular.module("app.core").controller("MsTimerController",e).directive("timer",function(){return{restrict:"EA",replace:!1,scope:{intervalAttr:"=interval",startTimeAttr:"=startTime",endTimeAttr:"=endTime",countdownAttr:"=countdown",autoStart:"&autoStart",maxTimeUnit:"="},controller:"MsTimerController"}})}(),function(){"use strict";angular.module("app.core").directive("msTimezone",function(){return{restrict:"E",scope:{ngModel:"="},controller:["$scope",function(e){e.timezone=[{name:"Europe/Andorra",utcOffset:60,offsetStr:"+01:00",countries:["AD"]},{name:"Asia/Dubai",utcOffset:240,offsetStr:"+04:00",countries:["AE","OM"]},{name:"Asia/Kabul",utcOffset:270,offsetStr:"+04:30",countries:["AF"]},{name:"Europe/Tirane",utcOffset:60,offsetStr:"+01:00",countries:["AL"]},{name:"Asia/Yerevan",utcOffset:240,offsetStr:"+04:00",countries:["AM"]},{name:"Antarctica/Rothera",utcOffset:-180,offsetStr:"-03:00",countries:["AQ"]},{name:"Antarctica/Palmer",utcOffset:-180,offsetStr:"-03:00",countries:["AQ"]},{name:"Antarctica/Mawson",utcOffset:300,offsetStr:"+05:00",countries:["AQ"]},{name:"Antarctica/Davis",utcOffset:420,offsetStr:"+07:00",countries:["AQ"]},{name:"Antarctica/Casey",utcOffset:480,offsetStr:"+08:00",countries:["AQ"]},{name:"Antarctica/Vostok",utcOffset:360,offsetStr:"+06:00",countries:["AQ"]},{name:"Antarctica/DumontDUrville",utcOffset:600,offsetStr:"+10:00",countries:["AQ"]},{name:"Antarctica/Syowa",utcOffset:180,offsetStr:"+03:00",countries:["AQ"]},{name:"Antarctica/Troll",utcOffset:0,offsetStr:"+00:00",countries:["AQ"]},{name:"America/Argentina/Buenos_Aires",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Cordoba",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Salta",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Jujuy",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Tucuman",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Catamarca",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/La_Rioja",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/San_Juan",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Mendoza",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/San_Luis",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Rio_Gallegos",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Ushuaia",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"Pacific/Pago_Pago",utcOffset:-660,offsetStr:"-11:00",countries:["AS","UM"]},{name:"Europe/Vienna",utcOffset:60,offsetStr:"+01:00",countries:["AT"]},{name:"Australia/Lord_Howe",utcOffset:660,offsetStr:"+11:00",countries:["AU"]},{name:"Antarctica/Macquarie",utcOffset:660,offsetStr:"+11:00",countries:["AU"]},{name:"Australia/Hobart",utcOffset:660,offsetStr:"+11:00",countries:["AU"]},{name:"Australia/Currie",utcOffset:660,offsetStr:"+11:00",countries:["AU"]},{name:"Australia/Melbourne",utcOffset:660,offsetStr:"+11:00",countries:["AU"]},{name:"Australia/Sydney",utcOffset:660,offsetStr:"+11:00",countries:["AU"]},{name:"Australia/Broken_Hill",utcOffset:630,offsetStr:"+10:30",countries:["AU"]},{name:"Australia/Brisbane",utcOffset:600,offsetStr:"+10:00",countries:["AU"]},{name:"Australia/Lindeman",utcOffset:600,offsetStr:"+10:00",countries:["AU"]},{name:"Australia/Adelaide",utcOffset:630,offsetStr:"+10:30",countries:["AU"]},{name:"Australia/Darwin",utcOffset:570,offsetStr:"+09:30",countries:["AU"]},{name:"Australia/Perth",utcOffset:480,offsetStr:"+08:00",countries:["AU"]},{name:"Australia/Eucla",utcOffset:525,offsetStr:"+08:45",countries:["AU"]},{name:"Asia/Baku",utcOffset:240,offsetStr:"+04:00",countries:["AZ"]},{name:"America/Barbados",utcOffset:-240,offsetStr:"-04:00",countries:["BB"]},{name:"Asia/Dhaka",utcOffset:360,offsetStr:"+06:00",countries:["BD"]},{name:"Europe/Brussels",utcOffset:60,offsetStr:"+01:00",countries:["BE"]},{name:"Europe/Sofia",utcOffset:120,offsetStr:"+02:00",countries:["BG"]},{name:"Atlantic/Bermuda",utcOffset:-240,offsetStr:"-04:00",countries:["BM"]},{name:"Asia/Brunei",utcOffset:480,offsetStr:"+08:00",countries:["BN"]},{name:"America/La_Paz",utcOffset:-240,offsetStr:"-04:00",countries:["BO"]},{name:"America/Noronha",utcOffset:-120,offsetStr:"-02:00",countries:["BR"]},{name:"America/Belem",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Fortaleza",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Recife",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Araguaina",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Maceio",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Bahia",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Sao_Paulo",utcOffset:-120,offsetStr:"-02:00",countries:["BR"]},{name:"America/Campo_Grande",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Cuiaba",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Santarem",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Porto_Velho",utcOffset:-240,offsetStr:"-04:00",countries:["BR"]},{name:"America/Boa_Vista",utcOffset:-240,offsetStr:"-04:00",countries:["BR"]},{name:"America/Manaus",utcOffset:-240,offsetStr:"-04:00",countries:["BR"]},{name:"America/Eirunepe",utcOffset:-300,offsetStr:"-05:00",countries:["BR"]},{name:"America/Rio_Branco",utcOffset:-300,offsetStr:"-05:00",countries:["BR"]},{name:"America/Nassau",utcOffset:-300,offsetStr:"-05:00",countries:["BS"]},{name:"Asia/Thimphu",utcOffset:360,offsetStr:"+06:00",countries:["BT"]},{name:"Europe/Minsk",utcOffset:180,offsetStr:"+03:00",countries:["BY"]},{name:"America/Belize",utcOffset:-360,offsetStr:"-06:00",countries:["BZ"]},{name:"America/St_Johns",utcOffset:-210,offsetStr:"-03:30",countries:["CA"]},{name:"America/Halifax",utcOffset:-240,offsetStr:"-04:00",countries:["CA"]},{name:"America/Glace_Bay",utcOffset:-240,offsetStr:"-04:00",countries:["CA"]},{name:"America/Moncton",utcOffset:-240,offsetStr:"-04:00",countries:["CA"]},{name:"America/Goose_Bay",utcOffset:-240,offsetStr:"-04:00",countries:["CA"]},{name:"America/Blanc-Sablon",utcOffset:-240,offsetStr:"-04:00",countries:["CA"]},{name:"America/Toronto",utcOffset:-300,offsetStr:"-05:00",countries:["CA"]},{name:"America/Nipigon",utcOffset:-300,offsetStr:"-05:00",countries:["CA"]},{name:"America/Thunder_Bay",utcOffset:-300,offsetStr:"-05:00",countries:["CA"]},{name:"America/Iqaluit",utcOffset:-300,offsetStr:"-05:00",countries:["CA"]},{name:"America/Pangnirtung",utcOffset:-300,offsetStr:"-05:00",countries:["CA"]},{name:"America/Resolute",utcOffset:-360,offsetStr:"-06:00",countries:["CA"]},{name:"America/Atikokan",utcOffset:-300,offsetStr:"-05:00",countries:["CA"]},{name:"America/Rankin_Inlet",utcOffset:-360,offsetStr:"-06:00",countries:["CA"]},{name:"America/Winnipeg",utcOffset:-360,offsetStr:"-06:00",countries:["CA"]},{name:"America/Rainy_River",utcOffset:-360,offsetStr:"-06:00",countries:["CA"]},{name:"America/Regina",utcOffset:-360,offsetStr:"-06:00",countries:["CA"]},{name:"America/Swift_Current",utcOffset:-360,offsetStr:"-06:00",countries:["CA"]},{name:"America/Edmonton",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Cambridge_Bay",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Yellowknife",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Inuvik",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Creston",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Dawson_Creek",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Fort_Nelson",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Vancouver",utcOffset:-480,offsetStr:"-08:00",countries:["CA"]},{name:"America/Whitehorse",utcOffset:-480,offsetStr:"-08:00",countries:["CA"]},{name:"America/Dawson",utcOffset:-480,offsetStr:"-08:00",countries:["CA"]},{name:"Indian/Cocos",utcOffset:390,offsetStr:"+06:30",countries:["CC"]},{name:"Europe/Zurich",utcOffset:60,offsetStr:"+01:00",countries:["CH","DE","LI"]},{name:"Africa/Abidjan",utcOffset:0,offsetStr:"+00:00",countries:["CI","BF","GM","GN","ML","MR","SH","SL","SN","ST","TG"]},{name:"Pacific/Rarotonga",utcOffset:-600,offsetStr:"-10:00",countries:["CK"]},{name:"America/Santiago",utcOffset:-180,offsetStr:"-03:00",countries:["CL"]},{name:"Pacific/Easter",utcOffset:-300,offsetStr:"-05:00",countries:["CL"]},{name:"Asia/Shanghai",utcOffset:480,offsetStr:"+08:00",countries:["CN"]},{name:"Asia/Urumqi",utcOffset:360,offsetStr:"+06:00",countries:["CN"]},{name:"America/Bogota",utcOffset:-300,offsetStr:"-05:00",countries:["CO"]},{name:"America/Costa_Rica",utcOffset:-360,offsetStr:"-06:00",countries:["CR"]},{name:"America/Havana",utcOffset:-300,offsetStr:"-05:00",countries:["CU"]},{name:"Atlantic/Cape_Verde",utcOffset:-60,offsetStr:"-01:00",countries:["CV"]},{name:"America/Curacao",utcOffset:-240,offsetStr:"-04:00",countries:["CW","AW","BQ","SX"]},{name:"Indian/Christmas",utcOffset:420,offsetStr:"+07:00",countries:["CX"]},{name:"Asia/Nicosia",utcOffset:120,offsetStr:"+02:00",countries:["CY"]},{name:"Europe/Prague",utcOffset:60,offsetStr:"+01:00",countries:["CZ","SK"]},{name:"Europe/Berlin",utcOffset:60,offsetStr:"+01:00",countries:["DE"]},{name:"Europe/Copenhagen",utcOffset:60,offsetStr:"+01:00",countries:["DK"]},{name:"America/Santo_Domingo",utcOffset:-240,offsetStr:"-04:00",countries:["DO"]},{name:"Africa/Algiers",utcOffset:60,offsetStr:"+01:00",countries:["DZ"]},{name:"America/Guayaquil",utcOffset:-300,offsetStr:"-05:00",countries:["EC"]},{name:"Pacific/Galapagos",utcOffset:-360,offsetStr:"-06:00",countries:["EC"]},{name:"Europe/Tallinn",utcOffset:120,offsetStr:"+02:00",countries:["EE"]},{name:"Africa/Cairo",utcOffset:120,offsetStr:"+02:00",countries:["EG"]},{name:"Africa/El_Aaiun",utcOffset:0,offsetStr:"+00:00",countries:["EH"]},{name:"Europe/Madrid",utcOffset:60,offsetStr:"+01:00",countries:["ES"]},{name:"Africa/Ceuta",utcOffset:60,offsetStr:"+01:00",countries:["ES"]},{name:"Atlantic/Canary",utcOffset:0,offsetStr:"+00:00",countries:["ES"]},{name:"Europe/Helsinki",utcOffset:120,offsetStr:"+02:00",countries:["FI","AX"]},{name:"Pacific/Fiji",utcOffset:720,offsetStr:"+12:00",countries:["FJ"]},{name:"Atlantic/Stanley",utcOffset:-180,offsetStr:"-03:00",countries:["FK"]},{name:"Pacific/Chuuk",utcOffset:600,offsetStr:"+10:00",countries:["FM"]},{name:"Pacific/Pohnpei",utcOffset:660,offsetStr:"+11:00",countries:["FM"]},{name:"Pacific/Kosrae",utcOffset:660,offsetStr:"+11:00",countries:["FM"]},{name:"Atlantic/Faroe",utcOffset:0,offsetStr:"+00:00",countries:["FO"]},{name:"Europe/Paris",utcOffset:60,offsetStr:"+01:00",countries:["FR"]},{name:"Europe/London",utcOffset:0,offsetStr:"+00:00",countries:["GB","GG","IM","JE"]},{name:"Asia/Tbilisi",utcOffset:240,offsetStr:"+04:00",countries:["GE"]},{name:"America/Cayenne",utcOffset:-180,offsetStr:"-03:00",countries:["GF"]},{name:"Africa/Accra",utcOffset:0,offsetStr:"+00:00",countries:["GH"]},{name:"Europe/Gibraltar",utcOffset:60,offsetStr:"+01:00",countries:["GI"]},{name:"America/Godthab",utcOffset:-180,offsetStr:"-03:00",countries:["GL"]},{name:"America/Danmarkshavn",utcOffset:0,offsetStr:"+00:00",countries:["GL"]},{name:"America/Scoresbysund",utcOffset:-60,offsetStr:"-01:00",countries:["GL"]},{name:"America/Thule",utcOffset:-240,offsetStr:"-04:00",countries:["GL"]},{name:"Europe/Athens",utcOffset:120,offsetStr:"+02:00",countries:["GR"]},{name:"Atlantic/South_Georgia",utcOffset:-120,offsetStr:"-02:00",countries:["GS"]},{name:"America/Guatemala",utcOffset:-360,offsetStr:"-06:00",countries:["GT"]},{name:"Pacific/Guam",utcOffset:600,offsetStr:"+10:00",countries:["GU","MP"]},{name:"Africa/Bissau",utcOffset:0,offsetStr:"+00:00",countries:["GW"]},{name:"America/Guyana",utcOffset:-240,offsetStr:"-04:00",countries:["GY"]},{name:"Asia/Hong_Kong",utcOffset:480,offsetStr:"+08:00",countries:["HK"]},{name:"America/Tegucigalpa",utcOffset:-360,offsetStr:"-06:00",countries:["HN"]},{name:"America/Port-au-Prince",utcOffset:-300,offsetStr:"-05:00",countries:["HT"]},{name:"Europe/Budapest",utcOffset:60,offsetStr:"+01:00",countries:["HU"]},{name:"Asia/Jakarta",utcOffset:420,offsetStr:"+07:00",countries:["ID"]},{name:"Asia/Pontianak",utcOffset:420,offsetStr:"+07:00",countries:["ID"]},{name:"Asia/Makassar",utcOffset:480,offsetStr:"+08:00",countries:["ID"]},{name:"Asia/Jayapura",utcOffset:540,offsetStr:"+09:00",countries:["ID"]},{name:"Europe/Dublin",utcOffset:0,offsetStr:"+00:00",countries:["IE"]},{name:"Asia/Jerusalem",utcOffset:120,offsetStr:"+02:00",countries:["IL"]},{name:"Asia/Kolkata",utcOffset:330,offsetStr:"+05:30",countries:["IN"]},{name:"Indian/Chagos",utcOffset:360,offsetStr:"+06:00",countries:["IO"]},{name:"Asia/Baghdad",utcOffset:180,offsetStr:"+03:00",countries:["IQ"]},{name:"Asia/Tehran",utcOffset:210,offsetStr:"+03:30",countries:["IR"]},{name:"Atlantic/Reykjavik",utcOffset:0,offsetStr:"+00:00",countries:["IS"]},{name:"Europe/Rome",utcOffset:60,offsetStr:"+01:00",countries:["IT","SM","VA"]},{name:"America/Jamaica",utcOffset:-300,offsetStr:"-05:00",countries:["JM"]},{name:"Asia/Amman",utcOffset:120,offsetStr:"+02:00",countries:["JO"]},{name:"Asia/Tokyo",utcOffset:540,offsetStr:"+09:00",countries:["JP"]},{name:"Africa/Nairobi",utcOffset:180,offsetStr:"+03:00",countries:["KE","DJ","ER","ET","KM","MG","SO","TZ","UG","YT"]},{name:"Asia/Bishkek",utcOffset:360,offsetStr:"+06:00",countries:["KG"]},{name:"Pacific/Tarawa",utcOffset:720,offsetStr:"+12:00",countries:["KI"]},{name:"Pacific/Enderbury",utcOffset:780,offsetStr:"+13:00",countries:["KI"]},{name:"Pacific/Kiritimati",utcOffset:840,offsetStr:"+14:00",countries:["KI"]},{name:"Asia/Pyongyang",utcOffset:510,offsetStr:"+08:30",countries:["KP"]},{name:"Asia/Seoul",utcOffset:540,offsetStr:"+09:00",countries:["KR"]},{name:"America/Cayman",utcOffset:-300,offsetStr:"-05:00",countries:["KY"]},{name:"Asia/Almaty",utcOffset:360,offsetStr:"+06:00",countries:["KZ"]},{name:"Asia/Qyzylorda",utcOffset:360,offsetStr:"+06:00",countries:["KZ"]},{name:"Asia/Aqtobe",utcOffset:300,offsetStr:"+05:00",countries:["KZ"]},{name:"Asia/Aqtau",utcOffset:300,offsetStr:"+05:00",countries:["KZ"]},{name:"Asia/Oral",utcOffset:300,offsetStr:"+05:00",countries:["KZ"]},{name:"Asia/Beirut",utcOffset:120,offsetStr:"+02:00",countries:["LB"]},{name:"Asia/Colombo",utcOffset:330,offsetStr:"+05:30",countries:["LK"]},{name:"Africa/Monrovia",utcOffset:0,offsetStr:"+00:00",countries:["LR"]},{name:"Europe/Vilnius",utcOffset:120,offsetStr:"+02:00",countries:["LT"]},{name:"Europe/Luxembourg",utcOffset:60,offsetStr:"+01:00",countries:["LU"]},{name:"Europe/Riga",utcOffset:120,offsetStr:"+02:00",countries:["LV"]},{name:"Africa/Tripoli",utcOffset:120,offsetStr:"+02:00",countries:["LY"]},{name:"Africa/Casablanca",utcOffset:0,offsetStr:"+00:00",countries:["MA"]},{name:"Europe/Monaco",utcOffset:60,offsetStr:"+01:00",countries:["MC"]},{name:"Europe/Chisinau",utcOffset:120,offsetStr:"+02:00",countries:["MD"]},{name:"Pacific/Majuro",utcOffset:720,offsetStr:"+12:00",countries:["MH"]},{name:"Pacific/Kwajalein",utcOffset:720,offsetStr:"+12:00",countries:["MH"]},{name:"Asia/Rangoon",utcOffset:390,offsetStr:"+06:30",countries:["MM"]},{name:"Asia/Ulaanbaatar",utcOffset:480,offsetStr:"+08:00",countries:["MN"]},{name:"Asia/Hovd",utcOffset:420,offsetStr:"+07:00",countries:["MN"]},{name:"Asia/Choibalsan",utcOffset:480,offsetStr:"+08:00",countries:["MN"]},{name:"Asia/Macau",utcOffset:480,offsetStr:"+08:00",countries:["MO"]},{name:"America/Martinique",utcOffset:-240,offsetStr:"-04:00",countries:["MQ"]},{name:"Europe/Malta",utcOffset:60,offsetStr:"+01:00",countries:["MT"]},{name:"Indian/Mauritius",utcOffset:240,offsetStr:"+04:00",countries:["MU"]},{name:"Indian/Maldives",utcOffset:300,offsetStr:"+05:00",countries:["MV"]},{name:"America/Mexico_City",utcOffset:-360,offsetStr:"-06:00",countries:["MX"]},{name:"America/Cancun",utcOffset:-300,offsetStr:"-05:00",countries:["MX"]},{name:"America/Merida",utcOffset:-360,offsetStr:"-06:00",countries:["MX"]},{name:"America/Monterrey",utcOffset:-360,offsetStr:"-06:00",countries:["MX"]},{name:"America/Matamoros",utcOffset:-360,offsetStr:"-06:00",countries:["MX"]},{name:"America/Mazatlan",utcOffset:-420,offsetStr:"-07:00",countries:["MX"]},{name:"America/Chihuahua",utcOffset:-420,offsetStr:"-07:00",countries:["MX"]},{name:"America/Ojinaga",utcOffset:-420,offsetStr:"-07:00",countries:["MX"]},{name:"America/Hermosillo",utcOffset:-420,offsetStr:"-07:00",countries:["MX"]},{name:"America/Tijuana",utcOffset:-480,offsetStr:"-08:00",countries:["MX"]},{name:"America/Santa_Isabel",utcOffset:-480,offsetStr:"-08:00",countries:["MX"]},{name:"America/Bahia_Banderas",utcOffset:-360,offsetStr:"-06:00",countries:["MX"]},{name:"Asia/Kuala_Lumpur",utcOffset:480,offsetStr:"+08:00",countries:["MY"]},{name:"Asia/Kuching",utcOffset:480,offsetStr:"+08:00",countries:["MY"]},{name:"Africa/Maputo",utcOffset:120,offsetStr:"+02:00",countries:["MZ","BI","BW","CD","MW","RW","ZM","ZW"]},{name:"Africa/Windhoek",utcOffset:120,offsetStr:"+02:00",countries:["NA"]},{name:"Pacific/Noumea",utcOffset:660,offsetStr:"+11:00",countries:["NC"]},{name:"Pacific/Norfolk",utcOffset:660,offsetStr:"+11:00",countries:["NF"]},{name:"Africa/Lagos",utcOffset:60,offsetStr:"+01:00",countries:["NG","AO","BJ","CD","CF","CG","CM","GA","GQ","NE"]},{name:"America/Managua",utcOffset:-360,offsetStr:"-06:00",countries:["NI"]},{name:"Europe/Amsterdam",utcOffset:60,offsetStr:"+01:00",countries:["NL"]},{name:"Europe/Oslo",utcOffset:60,offsetStr:"+01:00",countries:["NO","SJ"]},{name:"Asia/Kathmandu",utcOffset:345,offsetStr:"+05:45",countries:["NP"]},{name:"Pacific/Nauru",utcOffset:720,offsetStr:"+12:00",countries:["NR"]},{name:"Pacific/Niue",utcOffset:-660,offsetStr:"-11:00",countries:["NU"]},{name:"Pacific/Auckland",utcOffset:780,offsetStr:"+13:00",countries:["NZ","AQ"]},{name:"Pacific/Chatham",utcOffset:825,offsetStr:"+13:45",countries:["NZ"]},{name:"America/Panama",utcOffset:-300,offsetStr:"-05:00",countries:["PA"]},{name:"America/Lima",utcOffset:-300,offsetStr:"-05:00",countries:["PE"]},{name:"Pacific/Tahiti",utcOffset:-600,offsetStr:"-10:00",countries:["PF"]},{name:"Pacific/Marquesas",utcOffset:-570,offsetStr:"-09:30",countries:["PF"]},{name:"Pacific/Gambier",utcOffset:-540,offsetStr:"-09:00",countries:["PF"]},{name:"Pacific/Port_Moresby",utcOffset:600,offsetStr:"+10:00",countries:["PG"]},{name:"Pacific/Bougainville",utcOffset:660,offsetStr:"+11:00",countries:["PG"]},{name:"Asia/Manila",utcOffset:480,offsetStr:"+08:00",countries:["PH"]},{name:"Asia/Karachi",utcOffset:300,offsetStr:"+05:00",countries:["PK"]},{name:"Europe/Warsaw",utcOffset:60,offsetStr:"+01:00",countries:["PL"]},{name:"America/Miquelon",utcOffset:-180,offsetStr:"-03:00",countries:["PM"]},{name:"Pacific/Pitcairn",utcOffset:-480,offsetStr:"-08:00",countries:["PN"]},{name:"America/Puerto_Rico",utcOffset:-240,offsetStr:"-04:00",countries:["PR"]},{name:"Asia/Gaza",utcOffset:120,offsetStr:"+02:00",countries:["PS"]},{name:"Asia/Hebron",utcOffset:120,offsetStr:"+02:00",countries:["PS"]},{name:"Europe/Lisbon",utcOffset:0,offsetStr:"+00:00",countries:["PT"]},{name:"Atlantic/Madeira",utcOffset:0,offsetStr:"+00:00",countries:["PT"]},{name:"Atlantic/Azores",utcOffset:-60,offsetStr:"-01:00",countries:["PT"]},{name:"Pacific/Palau",utcOffset:540,offsetStr:"+09:00",countries:["PW"]},{name:"America/Asuncion",utcOffset:-180,offsetStr:"-03:00",countries:["PY"]},{name:"Asia/Qatar",utcOffset:180,offsetStr:"+03:00",countries:["QA","BH"]},{name:"Indian/Reunion",utcOffset:240,offsetStr:"+04:00",countries:["RE","TF"]},{name:"Europe/Bucharest",utcOffset:120,offsetStr:"+02:00",countries:["RO"]},{name:"Europe/Belgrade",utcOffset:60,offsetStr:"+01:00",countries:["RS","BA","HR","ME","MK","SI"]},{name:"Europe/Kaliningrad",utcOffset:120,offsetStr:"+02:00",countries:["RU"]},{name:"Europe/Moscow",utcOffset:180,offsetStr:"+03:00",countries:["RU"]},{name:"Europe/Simferopol",utcOffset:180,offsetStr:"+03:00",countries:["RU"]},{name:"Europe/Volgograd",utcOffset:180,offsetStr:"+03:00",countries:["RU"]},{name:"Europe/Samara",utcOffset:240,offsetStr:"+04:00",countries:["RU"]},{name:"Asia/Yekaterinburg",utcOffset:300,offsetStr:"+05:00",countries:["RU"]},{name:"Asia/Omsk",utcOffset:360,offsetStr:"+06:00",countries:["RU"]},{name:"Asia/Novosibirsk",utcOffset:360,offsetStr:"+06:00",countries:["RU"]},{name:"Asia/Novokuznetsk",utcOffset:420,offsetStr:"+07:00",countries:["RU"]},{name:"Asia/Krasnoyarsk",utcOffset:420,offsetStr:"+07:00",countries:["RU"]},{name:"Asia/Irkutsk",utcOffset:480,offsetStr:"+08:00",countries:["RU"]},{name:"Asia/Chita",utcOffset:480,offsetStr:"+08:00",countries:["RU"]},{name:"Asia/Yakutsk",utcOffset:540,offsetStr:"+09:00",countries:["RU"]},{name:"Asia/Khandyga",utcOffset:540,offsetStr:"+09:00",countries:["RU"]},{name:"Asia/Vladivostok",utcOffset:600,offsetStr:"+10:00",countries:["RU"]},{name:"Asia/Sakhalin",utcOffset:600,offsetStr:"+10:00",countries:["RU"]},{name:"Asia/Ust-Nera",utcOffset:600,offsetStr:"+10:00",countries:["RU"]},{name:"Asia/Magadan",utcOffset:600,offsetStr:"+10:00",countries:["RU"]},{name:"Asia/Srednekolymsk",utcOffset:660,offsetStr:"+11:00",countries:["RU"]},{name:"Asia/Kamchatka",utcOffset:720,offsetStr:"+12:00",countries:["RU"]},{name:"Asia/Anadyr",utcOffset:720,offsetStr:"+12:00",countries:["RU"]},{name:"Asia/Riyadh",utcOffset:180,offsetStr:"+03:00",countries:["SA","KW","YE"]},{name:"Pacific/Guadalcanal",utcOffset:660,offsetStr:"+11:00",countries:["SB"]},{name:"Indian/Mahe",utcOffset:240,offsetStr:"+04:00",countries:["SC"]},{name:"Africa/Khartoum",utcOffset:180,offsetStr:"+03:00",countries:["SD","SS"]},{name:"Europe/Stockholm",utcOffset:60,offsetStr:"+01:00",countries:["SE"]},{name:"Asia/Singapore",utcOffset:480,offsetStr:"+08:00",countries:["SG"]},{name:"America/Paramaribo",utcOffset:-180,offsetStr:"-03:00",countries:["SR"]},{name:"America/El_Salvador",utcOffset:-360,offsetStr:"-06:00",countries:["SV"]},{name:"Asia/Damascus",utcOffset:120,offsetStr:"+02:00",countries:["SY"]},{name:"America/Grand_Turk",utcOffset:-240,offsetStr:"-04:00",countries:["TC"]},{name:"Africa/Ndjamena",utcOffset:60,offsetStr:"+01:00",countries:["TD"]},{name:"Indian/Kerguelen",utcOffset:300,offsetStr:"+05:00",countries:["TF"]},{name:"Asia/Bangkok",utcOffset:420,offsetStr:"+07:00",countries:["TH","KH","LA","VN"]},{name:"Asia/Dushanbe",utcOffset:300,offsetStr:"+05:00",countries:["TJ"]},{name:"Pacific/Fakaofo",utcOffset:780,offsetStr:"+13:00",countries:["TK"]},{name:"Asia/Dili",utcOffset:540,offsetStr:"+09:00",countries:["TL"]},{name:"Asia/Ashgabat",utcOffset:300,offsetStr:"+05:00",countries:["TM"]},{name:"Africa/Tunis",utcOffset:60,offsetStr:"+01:00",countries:["TN"]},{name:"Pacific/Tongatapu",utcOffset:780,offsetStr:"+13:00",countries:["TO"]},{name:"Europe/Istanbul",utcOffset:120,offsetStr:"+02:00",countries:["TR"]},{name:"America/Port_of_Spain",utcOffset:-240,offsetStr:"-04:00",countries:["TT","AG","AI","BL","DM","GD","GP","KN","LC","MF","MS","VC","VG","VI"]},{name:"Pacific/Funafuti",utcOffset:720,offsetStr:"+12:00",countries:["TV"]},{name:"Asia/Taipei",utcOffset:480,offsetStr:"+08:00",countries:["TW"]},{name:"Europe/Kiev",utcOffset:120,offsetStr:"+02:00",countries:["UA"]},{name:"Europe/Uzhgorod",utcOffset:120,offsetStr:"+02:00",countries:["UA"]},{name:"Europe/Zaporozhye",utcOffset:120,offsetStr:"+02:00",countries:["UA"]},{name:"Pacific/Wake",utcOffset:720,offsetStr:"+12:00",countries:["UM"]},{name:"America/New_York",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Detroit",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Kentucky/Louisville",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Kentucky/Monticello",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Indiana/Indianapolis",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Indiana/Vincennes",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Indiana/Winamac",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Indiana/Marengo",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Indiana/Petersburg",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Indiana/Vevay",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Chicago",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/Indiana/Tell_City",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/Indiana/Knox",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/Menominee",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/North_Dakota/Center",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/North_Dakota/New_Salem",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/North_Dakota/Beulah",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/Denver",utcOffset:-420,offsetStr:"-07:00",countries:["US"]},{name:"America/Boise",utcOffset:-420,offsetStr:"-07:00",countries:["US"]},{name:"America/Phoenix",utcOffset:-420,offsetStr:"-07:00",countries:["US"]},{name:"America/Los_Angeles",utcOffset:-480,offsetStr:"-08:00",countries:["US"]},{name:"America/Metlakatla",utcOffset:-480,offsetStr:"-08:00",countries:["US"]},{name:"America/Anchorage",utcOffset:-540,offsetStr:"-09:00",countries:["US"]},{name:"America/Juneau",utcOffset:-540,offsetStr:"-09:00",countries:["US"]},{name:"America/Sitka",utcOffset:-540,offsetStr:"-09:00",countries:["US"]},{name:"America/Yakutat",utcOffset:-540,offsetStr:"-09:00",countries:["US"]},{name:"America/Nome",utcOffset:-540,offsetStr:"-09:00",countries:["US"]},{name:"America/Adak",utcOffset:-600,offsetStr:"-10:00",countries:["US"]},{name:"Pacific/Honolulu",utcOffset:-600,offsetStr:"-10:00",countries:["US","UM"]},{name:"America/Montevideo",utcOffset:-180,offsetStr:"-03:00",countries:["UY"]},{name:"Asia/Samarkand",utcOffset:300,offsetStr:"+05:00",countries:["UZ"]},{name:"Asia/Tashkent",utcOffset:300,offsetStr:"+05:00",countries:["UZ"]},{name:"America/Caracas",utcOffset:-270,offsetStr:"-04:30",countries:["VE"]},{name:"Asia/Ho_Chi_Minh",utcOffset:420,offsetStr:"+07:00",countries:["VN"]},{name:"Pacific/Efate",utcOffset:660,offsetStr:"+11:00",countries:["VU"]},{name:"Pacific/Wallis",utcOffset:720,offsetStr:"+12:00",countries:["WF"]},{name:"Pacific/Apia",utcOffset:840,offsetStr:"+14:00",countries:["WS"]},{name:"Africa/Johannesburg",utcOffset:120,offsetStr:"+02:00",countries:["ZA","LS","SZ"]}]}],templateUrl:"app/core/directives/ms-timezone/ms-timezone.html"}})}(),function(){"use strict";angular.module("app.core").controller("MsWidgetEngineCounterController",function(){var a=this;a.filter=[],a.filtered=!1,a.fontSize=20,a.getCount=function(e){var t=0;if(e){a.fontSize=e.attrs[2]&&e.attrs[2].value?parseInt(e.attrs[2].value)-parseInt(e.attrs[2].value)%2:20,e.attrs[1].value&&e.attrs[1].value.length?(a.filtered=!0,a.filter=_.intersection(e.voiceQueuesSelected,e.attrs[1].value)):(a.filtered=!1,a.filter=e.voiceQueuesSelected);for(var n=0;n<e.voiceQueues.rows.length;n+=1)_.includes(a.filter,e.voiceQueues.rows[n].id)&&(t+=e.voiceQueues.rows[n][e.attrs[0].value]?parseInt(e.voiceQueues.rows[n][e.attrs[0].value]):0)}return t}})}(),function(){"use strict";function e(o,e){var r=this;r.filter=[],r.filtered=!1,r.properties=[],r.multiBarChart={labels:["QUEUE_NAME"],series:["TOTAL"],data:[[50]],options:{responsive:!0,legend:{display:!0,fontColor:"#2196f3"},scales:{xAxes:[{gridLines:{display:!0},ticks:{fontColor:"#2196f3",stepSize:1,beginAtZero:!0}}],yAxes:[{gridLines:{display:!1},ticks:{fontColor:"#2196f3"}}]}}},r.getMultiBarChart=function(e){e&&(e.attrs&&function(e){r.properties=_.map(_.filter(e.attrs,function(e){return e.name&&0<=e.name.indexOf("attrSerie")&&e.value&&"null"!==e.value}),"value"),e.attrs[3].value&&e.attrs[3].value.length?(r.filtered=!0,r.filter=_.intersection(e.voiceQueuesSelected,e.attrs[3].value)):(r.filtered=!1,r.filter=e.voiceQueuesSelected);if(r.multiBarChart.series.length>r.properties.length){var t=r.multiBarChart.series.length-r.properties.length;r.multiBarChart.series.splice(0,t),r.multiBarChart.data.splice(0,t)}for(var n=0;n<r.properties.length;n+=1){if(r.multiBarChart.series[n]=o.instant("TOOLS."+r.properties[n].toUpperCase()),_.isNil(r.multiBarChart.data[n])&&(r.multiBarChart.data[n]=[]),r.multiBarChart.labels.length>r.filter.length){var a=r.multiBarChart.labels.length-r.filter.length;r.multiBarChart.labels.splice(0,a),r.multiBarChart.data[n].splice(0,a)}for(var i=0,s=0;i<e.voiceQueues.rows.length;i+=1)_.includes(r.filter,e.voiceQueues.rows[i].id)&&(r.multiBarChart.labels[s]=e.voiceQueues.rows[i].name,r.multiBarChart.data[n][s]=e.voiceQueues.rows[i][r.properties[n]]?parseInt(e.voiceQueues.rows[i][r.properties[n]]):0,s+=1)}}(e),e.foreground&&function(e){r.multiBarChart.options.legend.fontColor=e.foreground;for(var t=0;t<r.multiBarChart.options.scales.xAxes.length;t+=1)r.multiBarChart.options.scales.xAxes[t].ticks.fontColor=e.foreground;for(var n=0;n<r.multiBarChart.options.scales.yAxes.length;n+=1)r.multiBarChart.options.scales.yAxes[n].ticks.fontColor=e.foreground}(e))}}e.$inject=["$translate","socket"],angular.module("app.core").controller("MsWidgetEngineMultibarChartController",e)}(),function(){"use strict";function e(s){var o=this;o.filter=[],o.filtered=!1,o.properties=[],o.pieChart={labels:["ANSWERED"],data:[30],options:{responsive:!0,legend:{display:!0}}},o.getPieChart=function(e){e&&(e.attrs&&function(e){o.properties=_.map(_.filter(e.attrs,function(e){return e.name&&0<=e.name.indexOf("attrSerie")&&e.value&&"null"!==e.value}),"value"),e.attrs[3].value&&e.attrs[3].value.length?(o.filtered=!0,o.filter=_.intersection(e.voiceQueuesSelected,e.attrs[3].value)):(o.filtered=!1,o.filter=e.voiceQueuesSelected);if(o.pieChart.labels.length>o.properties.length){var t=o.pieChart.labels.length-o.properties.length;o.pieChart.labels.splice(0,t),o.pieChart.data.splice(0,t)}for(var n=0,a=0;n<o.properties.length;n+=1){o.pieChart.labels[n]=s.instant("TOOLS."+o.properties[n].toUpperCase());for(var i=0;i<e.voiceQueues.rows.length;i+=1)_.includes(o.filter,e.voiceQueues.rows[i].id)&&(a+=e.voiceQueues.rows[i][o.properties[n]]?parseInt(e.voiceQueues.rows[i][o.properties[n]]):0);o.pieChart.data[n]=a,a=0}}(e),e.foreground&&(t=e,o.pieChart.options.legend.fontColor=t.foreground));var t}}e.$inject=["$translate"],angular.module("app.core").controller("MsWidgetEnginePieChartController",e)}(),function(){"use strict";function e(e,n,a,i){var s=this;function t(e){s.results=e||{count:0,rows:[]}}function o(){s.query.offset=(s.query.page-1)*s.query.limit,s.promise=i[s.reportRoute].run(s.query,t).$promise}s.countDown=0,s.refresh=0,s.title="",s.columns=[],s.results={rows:[],count:0},s.query={limit:10,page:1,startDate:moment().startOf("day").format("YYYY-MM-DD HH:mm:ss"),endDate:moment().endOf("day").format("YYYY-MM-DD HH:mm:ss"),output:"web"},s.onInit=function e(t){t&&t.attrs&&(t.attrs[0]&&t.attrs[0].value&&(s.query.id=t.attrs[0].value,i.analyticFieldReport.get({fields:"field,alias",nolimit:!0,DefaultReportId:"default"===t.attrs[0].type?t.attrs[0].value:void 0,CustomReportId:"custom"===t.attrs[0].type?t.attrs[0].value:void 0}).$promise.then(function(e){switch(e&&e.rows&&(s.columns=e.rows),t.attrs[0].type){case"default":s.reportRoute="analyticDefaultReport";break;case"custom":s.reportRoute="analyticCustomReport"}return i[s.reportRoute].get({id:t.attrs[0].value,fields:"id,name"}).$promise}).then(function(e){e&&e.name&&(s.title=e.name),o()}).catch(function(e){console.log(e)})),t.attrs[1]&&t.attrs[1].value&&(s.refresh=parseInt(t.attrs[1].value),!_.isNaN(s.refresh)&&0<s.refresh?(s.countDown=parseInt(t.attrs[1].value),s.interval=a(function(){s.countDown-=1},1e3,0),s.timeout=n(function(){s.interval&&a.cancel(s.interval),e(t)},1e3*s.refresh)):(s.interval&&a.cancel(s.interval),s.timeout&&n.cancel(s.timeout))))},s.getResults=o,s.valueReplacer=function(e,t){moment(t,"YYYY-MM-DDTHH:mm:ssZ",!0).isValid()&&(t=moment(t,"").format("YYYY-MM-DD HH:mm:ss"));return t},e.$on("$destroy",function(){s.interval&&a.cancel(s.interval),s.timeout&&n.cancel(s.timeout)})}e.$inject=["$scope","$timeout","$interval","api"],angular.module("app.core").controller("MsWidgetEngineWebReportController",e)}(),function(){"use strict";function e(e,t){this.getTrustedURL=function(e){return t.trustAsResourceUrl(e)}}function t(e){return{restrict:"E",scope:{config:"=?",onEdit:"&?",onDelete:"&?"},require:"msWidgetEngine",controller:"MsWidgetEngineController",controllerAs:"vm",bindToController:!0,templateUrl:"app/core/directives/ms-widget-engine/ms-widget-engine.html"}}e.$inject=["$mdDialog","$sce"],t.$inject=["$document"],angular.module("app.core").controller("MsWidgetEngineController",e).directive("msWidgetEngine",t)}(),function(){"use strict";function e(e,t){var n=this;n.flipped=!1,n.flip=function(){if(!angular.isDefined(e.flippable)||!0!==e.flippable)return;n.flipped=!n.flipped,t.toggleClass("flipped",n.flipped)}}e.$inject=["$scope","$element"],angular.module("app.core").controller("MsWidgetController",e).directive("msWidget",function(){return{restrict:"E",scope:{flippable:"=?"},controller:"MsWidgetController",transclude:!0,compile:function(e){return e.addClass("ms-widget"),function(e,t,n,a,i){i(function(e){t.empty(),t.append(e)})}}}}).directive("msWidgetFront",function(){return{restrict:"E",require:"^msWidget",transclude:!0,compile:function(e){return e.addClass("ms-widget-front"),function(e,t,n,a,i){i(function(e){t.empty(),t.append(e)}),e.flipWidget=a.flip}}}}).directive("msWidgetBack",function(){return{restrict:"E",require:"^msWidget",transclude:!0,compile:function(e){return e.addClass("ms-widget-back"),function(e,t,n,a,i){i(function(e){t.empty(),t.append(e)}),e.flipWidget=a.flip}}}})}(),function(){"use strict";angular.module("app.core").filter("altDate",function(){return function(e){var t=Date.now()-new Date(e);return t<36e5?moment(e).fromNow():t<864e5?moment(e).format("HH:mm"):t<6048e5?moment(e).format("dddd"):moment(e).calendar()}})}(),function(){"use strict";function e(t){return function(e){return t.trustAsHtml(e)}}e.$inject=["$sce"],angular.module("app.core").filter("toTrusted",e).filter("htmlToPlaintext",function(){return function(e){return String(e).replace(/<[^>]+>/gm,"")}}).filter("nospace",function(){return function(e){return e?e.replace(/ /g,""):""}}).filter("humanizeDoc",function(){return function(e){if(e)return"directive"===e.type?e.name.replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()}):e.label||e.name}})}(),function(){"use strict";angular.module("app.core").filter("filterByIds",function(){return function(e,t){if(0===e.length||!t)return e;if(0===t.length)return[];for(var n=[],a=0;a<e.length;a++){for(var i=e[a],s=!1,o=0;o<t.length;o++){var r=t[o];if(i.id===r){s=!0;break}}s&&n.push(i)}return n}})}(),function(){"use strict";angular.module("app.core").filter("filterByPropIds",function(){return function(e,t,n){if(0===e.length||!n||0===n.length)return e;for(var a=[],i=0;i<e.length;i++){for(var s=e[i],o=!1,r=0;r<n.length;r++){var l=n[r];if(-1<s[t].indexOf(l)){o=!0;break}}o&&a.push(s)}return a}})}(),function(){"use strict";angular.module("app.core").filter("filterByTags",function(){return function(e,n){if(0===e.length||0===n.length)return e;var a=[];return e.forEach(function(e){var t=n.every(function(t){var n=!1;return e.tags.forEach(function(e){e.name!==t.name||(n=!0)}),n});t&&a.push(e)}),a}}).filter("filterSingleByTags",function(){return function(e,t){if(0!==e.length&&0!==t.length){if(e.length<t.length)return[];var n=[],a=t.every(function(t){var n=!1;return e.forEach(function(e){e.name!==t.name||(n=!0)}),n});return a&&n.push(e),n}}})}(),function(){"use strict";function c(e,t,n,a){this.id=Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15),this.title=e,this.body=t,this.accept=n,this.reject=a,this.close=i}function m(){return/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)}function i(){var n=this;navigator.serviceWorker.ready.then(function(e){e.getNotifications().then(function(e){var t=_.find(e,function(e){return e.data.id===n.id});t&&t.close()})})}angular.module("app.dashboards").provider("motNotification",function(){return{$get:[function(){var l,n,d=[];"serviceWorker"in navigator&&m()?navigator.serviceWorker.register("notification.js").then(function(e){(l=e).update(),l.installing?n=l.installing:l.waiting?n=l.waiting:l.active&&(n=l.active)}).catch(function(e){console.error("Service worker registration failed",e)}):console.error("Service Worker is not supported");return navigator.serviceWorker.addEventListener("message",function(e){if(e.source===n){var t=_.find(d,{id:e.data.id});if(t)switch(e.data.action){case"accept":t.accept&&t.accept();break;case"reject":t.reject&&t.reject()}}}),{create:function(e,i,s,o,r){return new Promise(function(t,n){var a;m()&&(window.document.hidden||window.document.mozHidden||window.document.webkitHidden)?(a=new c(e||"MyTitle",i||"MyBody",o,r),d.push(a),a?window.Notification.requestPermission().then(function(e){if("granted"===e)return l.showNotification(a.title,{body:a.body,requireInteraction:!0,icon:s||"assets/images/business/queueCampaigns.jpg",data:{id:a.id},actions:[{action:"accept",title:"Accept"},{action:"reject",title:"Reject"}]})}).then(function(e){t(a)}).catch(function(e){n(e)}):n(new Error("Notification creating error"))):t()})}}}]}})}(),function(){"use strict";function e(l,d,c){return{resolve:function(e,t){var n=e.split("@"),a=n[0],i=n[1],s=t||{};if(!a||!i)return d.error("apiResolver.resolve requires correct action parameter (ResourceName@methodName)"),!1;var o=l.defer(),r=function(e){for(var t=e.split("."),n=c,a=0;a<t.length;a++){if(angular.isUndefined(n[t[a]])){d.error('Resource part "'+t[a]+'" is not defined!'),n=!1;break}n=n[t[a]]}return n||!1}(a);r?r[i](s,function(e){o.resolve(e)},function(e){o.reject(e)}):(d.error('Resource "'+a+'" is not defined in the api service!'),o.reject('Resource "'+a+'" is not defined in the api service!'));return o.promise}}}e.$inject=["$q","$log","api"],angular.module("app.core").factory("apiResolver",e)}(),function(){"use strict";angular.module("app.core").provider("msApi",function(){var n=angular.injector(["ng"]).get("$log"),a="",v=[];function t(e){a=e}function i(){return a}function s(e,t){angular.isString(e)?angular.isArray(t)?v[e]={url:a+(t[0]||""),paramDefaults:t[1]||[],actions:t[2]||[],options:t[3]||{}}:n.error('"resource" must be an array and it must follow $resource definition'):n.error('"path" must be a string (eg. `dashboard.project`)')}this.setBaseUrl=t,this.getBaseUrl=i,this.getApiObject=function(){return v},this.register=s,this.$get=["$log","$q","$resource","$rootScope",function(m,u,p,g){var e={setBaseUrl:t,getBaseUrl:i,register:s,resolve:function(e,t){g.$broadcast("msApi::resolveStart");var n=e.split("@"),a=n[0],i=n[1],s=t||{};if(!a||!i)return m.error("msApi.resolve requires correct action parameter (resourceName@methodName)"),!1;var o=u.defer(),r=v[a];if(r){var l=p(r.url,r.paramDefaults,r.actions,r.options);l[i](s,function(e){o.resolve(e),g.$broadcast("msApi::resolveSuccess")},function(e){o.reject(e),g.$broadcast("msApi::resolveError")})}else m.error('Resource "'+a+'" is not defined in the api service!'),o.reject('Resource "'+a+'" is not defined in the api service!');return o.promise},request:function(e,t,n,a){g.$broadcast("msApi::requestStart");var i=e.split("@"),s=i[0],o=i[1],r=t||{};if(!s||!o)return m.error("msApi.resolve requires correct action parameter (resourceName@methodName)"),!1;var l=u.defer(),d=v[s];if(d){var c=p(d.url,d.paramDefaults,d.actions,d.options);c[o](r,function(e){g.$broadcast("msApi::requestSuccess"),l.resolve(e),angular.isDefined(n)&&angular.isFunction(n)&&n(e)},function(e){g.$broadcast("msApi::requestError"),l.reject(e),angular.isDefined(a)&&angular.isFunction(a)&&a(e)})}else m.error('Resource "'+s+'" is not defined in the api service!'),l.reject('Resource "'+s+'" is not defined in the api service!');return l.promise}};return e}]})}(),function(){"use strict";function e(l){var e=new MobileDetect(l.navigator.userAgent),d=null;return{exists:function(e,t){return-1<t.indexOf(e)},detectBrowser:function(){if(d)return d;var e=[{string:l.navigator.userAgent,subString:"Edge",versionSearch:"Edge",identity:"Edge"},{string:l.navigator.userAgent,subString:"Chrome",identity:"Chrome"},{string:l.navigator.userAgent,subString:"OmniWeb",versionSearch:"OmniWeb/",identity:"OmniWeb"},{string:l.navigator.vendor,subString:"Apple",versionSearch:"Version",identity:"Safari"},{prop:l.opera,identity:"Opera"},{string:l.navigator.vendor,subString:"iCab",identity:"iCab"},{string:l.navigator.vendor,subString:"KDE",identity:"Konqueror"},{string:l.navigator.userAgent,subString:"Firefox",identity:"Firefox"},{string:l.navigator.vendor,subString:"Camino",identity:"Camino"},{string:l.navigator.userAgent,subString:"Netscape",identity:"Netscape"},{string:l.navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE"},{string:l.navigator.userAgent,subString:"Trident/7",identity:"Explorer",versionSearch:"rv"},{string:l.navigator.userAgent,subString:"Gecko",identity:"Mozilla",versionSearch:"rv"},{string:l.navigator.userAgent,subString:"Mozilla",identity:"Netscape",versionSearch:"Mozilla"}],t=[{string:l.navigator.platform,subString:"Win",identity:"Windows"},{string:l.navigator.platform,subString:"Mac",identity:"Mac"},{string:l.navigator.platform,subString:"Linux",identity:"Linux"},{string:l.navigator.platform,subString:"iPhone",identity:"iPhone"},{string:l.navigator.platform,subString:"iPod",identity:"iPod"},{string:l.navigator.platform,subString:"iPad",identity:"iPad"},{string:l.navigator.platform,subString:"Android",identity:"Android"}],i="";function n(e){for(var t=0;t<e.length;t++){var n=e[t].string,a=e[t].prop;if(i=e[t].versionSearch||e[t].identity,n){if(-1!==n.indexOf(e[t].subString))return e[t].identity}else if(a)return e[t].identity}}function a(e){var t=e.indexOf(i);if(-1!==t)return parseInt(e.substring(t+i.length+1))}var s=n(e)||"unknown-browser",o=a(l.navigator.userAgent)||a(l.navigator.appVersion)||"unknown-version",r=n(t)||"unknown-os";return s=s.toLowerCase(),o=s+"-"+o,r=r.toLowerCase(),d={browser:s,version:o,os:r}},guidGenerator:function(){var e=function(){return(65536*(1+Math.random())||0).toString(16).substring(1)};return e()+e()+e()+e()+e()+e()},isMobile:function(){return e.mobile()},toggleInArray:function(e,t){-1===t.indexOf(e)?t.push(e):t.splice(t.indexOf(e),1)}}}e.$inject=["$window"],angular.module("app.core").factory("msUtils",e)}(),function(){"use strict";function e(e,t){var n=this;n.themes=t.themes,n.layoutModes=[{label:"Boxed",value:"boxed"},{label:"Wide",value:"wide"}],n.layoutStyles=[{label:"Vertical Navigation",value:"verticalNavigation",figure:"/assets/images/theme-options/vertical-nav.jpg"},{label:"Vertical Navigation with Fullwidth Toolbar",value:"verticalNavigationFullwidthToolbar",figure:"/assets/images/theme-options/vertical-nav-with-full-toolbar.jpg"},{label:"Vertical Navigation with Fullwidth Toolbar 2",value:"verticalNavigationFullwidthToolbar2",figure:"/assets/images/theme-options/vertical-nav-with-full-toolbar-2.jpg"},{label:"Horizontal Navigation",value:"horizontalNavigation",figure:"/assets/images/theme-options/horizontal-nav.jpg"},{label:"Content with Toolbar",value:"contentWithToolbar",figure:"/assets/images/theme-options/content-with-toolbar.jpg"},{label:"Content Only",value:"contentOnly",figure:"/assets/images/theme-options/content-only.jpg"}],n.layoutMode="wide",n.layoutStyle=e.get("motion.layoutStyle")||"verticalNavigation",n.setActiveTheme=function(e){t.setActiveTheme(e)},n.getActiveTheme=function(){return t.themes.active},n.updateLayoutMode=function(){angular.element("body").toggleClass("boxed","boxed"===n.layoutMode)},n.updateLayoutStyle=function(){e.put("motion.layoutStyle",n.layoutStyle),location.reload()}}function t(t){return{restrict:"E",scope:{},controller:"MsThemeOptionsController as vm",templateUrl:"app/core/theme-options/theme-options.html",compile:function(e){return e.addClass("ms-theme-options"),function(e){e.toggleOptionsSidenav=function(){t("motion-theme-options").toggle()}}}}}e.$inject=["$cookies","motionTheming"],t.$inject=["$mdSidenav"],angular.module("app.core").controller("MsThemeOptionsController",e).directive("msThemeOptions",t)}(),function(){"use strict";function e(i,a,s){var o={};return{generate:function(){var e=angular.copy(s.getRegisteredThemes()),a=angular.copy(s.getRegisteredPalettes());angular.forEach(e,function(n){o[n.name]={},angular.forEach(n.colors,function(e,t){o[n.name][t]={name:e.name,levels:{default:{color:l(a[e.name][e.hues.default].value),contrast1:l(a[e.name][e.hues.default].contrast,1),contrast2:l(a[e.name][e.hues.default].contrast,2),contrast3:l(a[e.name][e.hues.default].contrast,3),contrast4:l(a[e.name][e.hues.default].contrast,4)},hue1:{color:l(a[e.name][e.hues["hue-1"]].value),contrast1:l(a[e.name][e.hues["hue-1"]].contrast,1),contrast2:l(a[e.name][e.hues["hue-1"]].contrast,2),contrast3:l(a[e.name][e.hues["hue-1"]].contrast,3),contrast4:l(a[e.name][e.hues["hue-1"]].contrast,4)},hue2:{color:l(a[e.name][e.hues["hue-2"]].value),contrast1:l(a[e.name][e.hues["hue-2"]].contrast,1),contrast2:l(a[e.name][e.hues["hue-2"]].contrast,2),contrast3:l(a[e.name][e.hues["hue-2"]].contrast,3),contrast4:l(a[e.name][e.hues["hue-2"]].contrast,4)},hue3:{color:l(a[e.name][e.hues["hue-3"]].value),contrast1:l(a[e.name][e.hues["hue-3"]].contrast,1),contrast2:l(a[e.name][e.hues["hue-3"]].contrast,2),contrast3:l(a[e.name][e.hues["hue-3"]].contrast,3),contrast4:l(a[e.name][e.hues["hue-3"]].contrast,4)}}}})}),function(e){var t=angular.copy(e);angular.forEach(t,function(n){angular.forEach(n,function(e,t){n[t]=e.levels,n[t].color=e.levels.default.color,n[t].contrast1=e.levels.default.contrast1,n[t].contrast2=e.levels.default.contrast2,n[t].contrast3=e.levels.default.contrast3,n[t].contrast4=e.levels.default.contrast4,delete n[t].default})}),s.setThemesList(t);var n=i.get("motion.selectedTheme");n?s.setActiveTheme(n):s.setActiveTheme("default")}(o);var r={};angular.forEach(o,function(e,t){var n,a,i,s,o;(r={})["@themeName"]=t,angular.forEach(e,function(e,a){angular.forEach(e.levels,function(e,n){angular.forEach(e,function(e,t){r["@"+a+d(n)+d(t)]=e})})}),n=r,a=new RegExp(Object.keys(n).join("|"),"gi"),i='/* Content hack because they wont fix */\n/* https://github.com/angular/material/pull/8067 */\n[md-theme="@themeName"] md-content.md-hue-1,\nmd-content.md-@themeName-theme.md-hue-1 {\n    color: @backgroundHue1Contrast1;\n    background-color: @backgroundHue1Color;\n}\n\n[md-theme="@themeName"] md-content.md-hue-2,\nmd-content.md-@themeName-theme.md-hue-2 {\n    color: @backgroundHue2Contrast1;\n    background-color: @backgroundHue2Color;\n}\n\n[md-theme="@themeName"] md-content.md-hue-3,\n md-content.md-@themeName-theme.md-hue-3 {\n    color: @backgroundHue3Contrast1;\n    background-color: @backgroundHue3Color;\n}\n\n/* Text Colors */\n[md-theme="@themeName"] a {\n    color: @accentDefaultColor;\n}\n\n[md-theme="@themeName"] .secondary-text,\n[md-theme="@themeName"] .icon {\n    color: @backgroundDefaultContrast2;\n}\n\n[md-theme="@themeName"] .hint-text,\n[md-theme="@themeName"] .disabled-text {\n    color: @backgroundDefaultContrast3;\n}\n\n[md-theme="@themeName"] .fade-text,\n[md-theme="@themeName"] .divider {\n    color: @backgroundDefaultContrast4;\n}\n\n/* Primary */\n[md-theme="@themeName"] .md-primary-bg {\n    background-color: @primaryDefaultColor;\n    color: @primaryDefaultContrast1;\n}\n\n[md-theme="@themeName"] .md-primary-bg .secondary-text,\n[md-theme="@themeName"] .md-primary-bg .icon {\n    color: @primaryDefaultContrast2;\n}\n\n[md-theme="@themeName"] .md-primary-bg .hint-text,\n[md-theme="@themeName"] .md-primary-bg .disabled-text {\n    color: @primaryDefaultContrast3;\n}\n\n[md-theme="@themeName"] .md-primary-bg .fade-text,\n[md-theme="@themeName"] .md-primary-bg .divider {\n    color: @primaryDefaultContrast4;\n}\n\n/* Primary, Hue-1 */\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 {\n    background-color: @primaryHue1Color;\n    color: @primaryHue1Contrast1;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 .secondary-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 .icon {\n    color: @primaryHue1Contrast2;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 .hint-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 .disabled-text {\n    color: @primaryHue1Contrast3;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 .fade-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 .divider {\n    color: @primaryHue1Contrast4;\n}\n\n/* Primary, Hue-2 */\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 {\n    background-color: @primaryHue2Color;\n    color: @primaryHue2Contrast1;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 .secondary-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 .icon {\n    color: @primaryHue2Contrast2;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 .hint-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 .disabled-text {\n    color: @primaryHue2Contrast3;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 .fade-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 .divider {\n    color: @primaryHue2Contrast4;\n}\n\n/* Primary, Hue-3 */\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 {\n    background-color: @primaryHue3Color;\n    color: @primaryHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 .secondary-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 .icon {\n    color: @primaryHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 .hint-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 .disabled-text {\n    color: @primaryHue3Contrast3;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 .fade-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 .divider {\n    color: @primaryHue3Contrast4;\n}\n\n/* Primary foreground */\n[md-theme="@themeName"] .md-primary-fg {\n    color: @primaryDefaultColor !important;\n}\n\n/* Primary foreground, Hue-1 */\n[md-theme="@themeName"] .md-primary-fg.md-hue-1 {\n    color: @primaryHue1Color !important;\n}\n\n/* Primary foreground, Hue-2 */\n[md-theme="@themeName"] .md-primary-fg.md-hue-2 {\n    color: @primaryHue2Color !important;\n}\n\n/* Primary foreground, Hue-3 */\n[md-theme="@themeName"] .md-primary-fg.md-hue-3 {\n    color: @primaryHue3Color !important;\n}\n\n/* Accent */\n[md-theme="@themeName"] .md-accent-bg {\n    background-color: @accentDefaultColor;\n    color: @accentDefaultContrast1;\n}\n\n[md-theme="@themeName"] .md-accent-bg .secondary-text,\n[md-theme="@themeName"] .md-accent-bg .icon {\n    color: @accentDefaultContrast2;\n}\n\n[md-theme="@themeName"] .md-accent-bg .hint-text,\n[md-theme="@themeName"] .md-accent-bg .disabled-text {\n    color: @accentDefaultContrast3;\n}\n\n[md-theme="@themeName"] .md-accent-bg .fade-text,\n[md-theme="@themeName"] .md-accent-bg .divider {\n    color: @accentDefaultContrast4;\n}\n\n/* Accent, Hue-1 */\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 {\n    background-color: @accentHue1Color;\n    color: @accentHue1Contrast1;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 .secondary-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 .icon {\n    color: @accentHue1Contrast2;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 .hint-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 .disabled-text {\n    color: @accentHue1Contrast3;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 .fade-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 .divider {\n    color: @accentHue1Contrast4;\n}\n\n/* Accent, Hue-2 */\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 {\n    background-color: @accentHue2Color;\n    color: @accentHue2Contrast1;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 .secondary-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 .icon {\n    color: @accentHue2Contrast2;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 .hint-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 .disabled-text {\n    color: @accentHue2Contrast3;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 .fade-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 .divider {\n    color: @accentHue2Contrast4;\n}\n\n/* Accent, Hue-3 */\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 {\n    background-color: @accentHue3Color;\n    color: @accentHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 .secondary-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 .icon {\n    color: @accentHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 .hint-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 .disabled-text {\n    color: @accentHue3Contrast3;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 .fade-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 .divider {\n    color: @accentHue3Contrast4;\n}\n\n/* Accent foreground */\n[md-theme="@themeName"] .md-accent-fg {\n    color: @accentDefaultColor !important;\n}\n\n/* Accent foreground, Hue-1 */\n[md-theme="@themeName"] .md-accent-fg.md-hue-1 {\n    color: @accentHue1Color !important;\n}\n\n/* Accent foreground, Hue-2 */\n[md-theme="@themeName"] .md-accent-fg.md-hue-2 {\n    color: @accentHue2Color !important;\n}\n\n/* Accent foreground, Hue-3 */\n[md-theme="@themeName"] .md-accent-fg.md-hue-3 {\n    color: @accentHue3Color !important;\n}\n\n/* Warn */\n[md-theme="@themeName"] .md-warn-bg {\n    background-color: @warnDefaultColor;\n    color: @warnDefaultContrast1;\n}\n\n[md-theme="@themeName"] .md-warn-bg .secondary-text,\n[md-theme="@themeName"] .md-warn-bg .icon {\n    color: @warnDefaultContrast2;\n}\n\n[md-theme="@themeName"] .md-warn-bg .hint-text,\n[md-theme="@themeName"] .md-warn-bg .disabled-text {\n    color: @warnDefaultContrast3;\n}\n\n[md-theme="@themeName"] .md-warn-bg .fade-text,\n[md-theme="@themeName"] .md-warn-bg .divider {\n    color: @warnDefaultContrast4;\n}\n\n/* Warn, Hue-1 */\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 {\n    background-color: @warnHue1Color;\n    color: @warnHue1Contrast1;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 .secondary-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 .icon {\n    color: @warnHue1Contrast2;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 .hint-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 .disabled-text {\n    color: @warnHue1Contrast3;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 .fade-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 .divider {\n    color: @warnHue1Contrast4;\n}\n\n/* Warn, Hue-2 */\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 {\n    background-color: @warnHue2Color;\n    color: @warnHue2Contrast1;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 .secondary-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 .icon {\n    color: @warnHue2Contrast2;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 .hint-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 .disabled-text {\n    color: @warnHue2Contrast3;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 .fade-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 .divider {\n    color: @warnHue2Contrast4;\n}\n\n/* Warn, Hue-3 */\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 {\n    background-color: @warnHue3Color;\n    color: @warnHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 .secondary-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 .icon {\n    color: @warnHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 .hint-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 .disabled-text {\n    color: @warnHue3Contrast3;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 .fade-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 .divider {\n    color: @warnHue3Contrast4;\n}\n\n/* Warn foreground */\n[md-theme="@themeName"] .md-warn-fg {\n    color: @warnDefaultColor !important;\n}\n\n/* Warn foreground, Hue-1 */\n[md-theme="@themeName"] .md-warn-fg.md-hue-1 {\n    color: @warnHue1Color !important;\n}\n\n/* Warn foreground, Hue-2 */\n[md-theme="@themeName"] .md-warn-fg.md-hue-2 {\n    color: @warnHue2Color !important;\n}\n\n/* Warn foreground, Hue-3 */\n[md-theme="@themeName"] .md-warn-fg.md-hue-3 {\n    color: @warnHue3Color !important;\n}\n\n/* Background */\n[md-theme="@themeName"] .md-background-bg {\n    background-color: @backgroundDefaultColor;\n    color: @backgroundDefaultContrast1;\n}\n\n[md-theme="@themeName"] .md-background-bg .secondary-text,\n[md-theme="@themeName"] .md-background-bg .icon {\n    color: @backgroundDefaultContrast2;\n}\n\n[md-theme="@themeName"] .md-background-bg .hint-text,\n[md-theme="@themeName"] .md-background-bg .disabled-text {\n    color: @backgroundDefaultContrast3;\n}\n\n[md-theme="@themeName"] .md-background-bg .fade-text,\n[md-theme="@themeName"] .md-background-bg .divider {\n    color: @backgroundDefaultContrast4;\n}\n\n/* Background, Hue-1 */\n[md-theme="@themeName"] .md-background-bg.md-hue-1 {\n    background-color: @backgroundHue1Color;\n    color: @backgroundHue1Contrast1;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-1 .secondary-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-1 .icon {\n    color: @backgroundHue1Contrast2;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-1 .hint-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-1 .disabled-text {\n    color: @backgroundHue1Contrast3;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-1 .fade-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-1 .divider {\n    color: @backgroundHue1Contrast4;\n}\n\n/* Background, Hue-2 */\n[md-theme="@themeName"] .md-background-bg.md-hue-2 {\n    background-color: @backgroundHue2Color;\n    color: @backgroundHue2Contrast1;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-2 .secondary-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-2 .icon {\n    color: @backgroundHue2Contrast2;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-2 .hint-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-2 .disabled-text {\n    color: @backgroundHue2Contrast3;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-2 .fade-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-2 .divider {\n    color: @backgroundHue2Contrast4;\n}\n\n/* Background, Hue-3 */\n[md-theme="@themeName"] .md-background-bg.md-hue-3 {\n    background-color: @backgroundHue3Color;\n    color: @backgroundHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-3 .secondary-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-3 .icon {\n    color: @backgroundHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-3 .hint-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-3 .disabled-text {\n    color: @backgroundHue3Contrast3;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-3 .fade-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-3 .divider {\n    color: @backgroundHue3Contrast4;\n}\n\n/* Background foreground */\n[md-theme="@themeName"] .md-background-fg {\n    color: @backgroundDefaultColor !important;\n}\n\n/* Background foreground, Hue-1 */\n[md-theme="@themeName"] .md-background-fg.md-hue-1 {\n    color: @backgroundHue1Color !important;\n}\n\n/* Background foreground, Hue-2 */\n[md-theme="@themeName"] .md-background-fg.md-hue-2 {\n    color: @backgroundHue2Color !important;\n}\n\n/* Background foreground, Hue-3 */\n[md-theme="@themeName"] .md-background-fg.md-hue-3 {\n    color: @backgroundHue3Color !important;\n}'.replace(a,function(e){return n[e]}),s=angular.element("head"),(o=angular.element('<style type="text/css"></style>')).html(i),s.append(o)})},rgba:l};function l(e,t){var n=t||!1;return 4===e.length&&255===e[0]&&255===e[1]&&255===e[2]&&e.splice(3,4),n&&(e=function(e,t){var n={white:{1:"1",2:"0.7",3:"0.3",4:"0.12"},black:{1:"0.87",2:"0.54",3:"0.26",4:"0.12"}};255===e[0]&&255===e[1]&&255===e[2]?e[3]=n.white[t]:0===e[0]&&0===e[1]&&0===e[2]&&(e[3]=n.black[t]);return e}(e,n)),3===e.length?"rgb("+e.join(",")+")":4===e.length?"rgba("+e.join(",")+")":void a.error("Invalid number of arguments supplied in the color array: "+e.length+"\nThe array must have 3 or 4 colors.")}function d(e){return e.charAt(0).toUpperCase()+e.slice(1)}}e.$inject=["$cookies","$log","motionTheming"],angular.module("app.core").factory("motionGenerator",e)}(),function(){"use strict";angular.module("app.core").constant("motionPalettes",[{name:"motion-blue",options:{50:"#ebf1fa",100:"#c2d4ef",200:"#9ab8e5",300:"#78a0dc",400:"#5688d3",500:"#3470ca",600:"#2e62b1",700:"#275498",800:"#21467e",900:"#1a3865",A100:"#c2d4ef",A200:"#9ab8e5",A400:"#5688d3",A700:"#275498",contrastDefaultColor:"light",contrastDarkColors:"50 100 200 A100",contrastStrongLightColors:"300 400"}},{name:"motion-paleblue",options:{50:"#ececee",100:"#c5c6cb",200:"#9ea1a9",300:"#7d818c",400:"#5c616f",500:"#3c4252",600:"#353a48",700:"#2d323e",800:"#262933",900:"#1e2129",A100:"#c5c6cb",A200:"#9ea1a9",A400:"#5c616f",A700:"#2d323e",contrastDefaultColor:"light",contrastDarkColors:"50 100 200 A100",contrastStrongLightColors:"300 400"}}])}(),function(){"use strict";angular.module("app.core").constant("motionThemes",{default:{primary:{name:"motion-paleblue",hues:{default:"700","hue-1":"500","hue-2":"600","hue-3":"400"}},accent:{name:"light-blue",hues:{default:"600","hue-1":"400","hue-2":"700","hue-3":"A100"}},warn:{name:"red"},background:{name:"grey",hues:{default:"A100","hue-1":"A100","hue-2":"100","hue-3":"300"}}},pinkTheme:{primary:{name:"blue-grey",hues:{default:"800","hue-1":"600","hue-2":"400","hue-3":"A100"}},accent:{name:"pink",hues:{default:"400","hue-1":"300","hue-2":"600","hue-3":"A100"}},warn:{name:"blue"},background:{name:"grey",hues:{default:"A100","hue-1":"A100","hue-2":"100","hue-3":"300"}}},tealTheme:{primary:{name:"motion-blue",hues:{default:"900","hue-1":"600","hue-2":"500","hue-3":"A100"}},accent:{name:"teal",hues:{default:"500","hue-1":"400","hue-2":"600","hue-3":"A100"}},warn:{name:"deep-orange"},background:{name:"grey",hues:{default:"A100","hue-1":"A100","hue-2":"100","hue-3":"300"}}}})}(),function(){"use strict";function e(n,e,t){var a;angular.injector(["ngCookies"]).invoke(["$cookies",function(e){a=e}]);var i=a.getObject("motion.customTheme");i&&(t.custom=i),n.alwaysWatchTheme(!0),angular.forEach(e,function(e){n.definePalette(e.name,e.options)}),angular.forEach(t,function(e,t){n.theme(t).primaryPalette(e.primary.name,e.primary.hues).accentPalette(e.accent.name,e.accent.hues).warnPalette(e.warn.name,e.warn.hues).backgroundPalette(e.background.name,e.background.hues)})}e.$inject=["$mdThemingProvider","motionPalettes","motionThemes"],angular.module("app.core").config(e)}(),function(){"use strict";function e(t,n,e){var a={getRegisteredPalettes:function(){return e.PALETTES},getRegisteredThemes:function(){return e.THEMES},setActiveTheme:function(e){if(angular.isUndefined(a.themes.list[e]))return angular.isUndefined(a.themes.list.default)?void n.error('You must have at least one theme named "default"'):(n.warn('The theme "'+e+'" does not exist! Falling back to the "default" theme.'),a.themes.active.name="default",a.themes.active.theme=a.themes.list.default,void t.put("motion.selectedTheme",a.themes.active.name));a.themes.active.name=e,a.themes.active.theme=a.themes.list[e],t.put("motion.selectedTheme",e)},setThemesList:function(e){a.themes.list=e},themes:{list:{},active:{name:"",theme:{}}}};return a}e.$inject=["$cookies","$log","$mdTheming"],angular.module("app.core").service("motionTheming",e)}(),function(){"use strict";function e(t,s,o,r){this.search=function(t){for(var e=[],n=r.getFlatNavigation(),a=o.defer(),i=0;i<n.length;i+=1)n[i].uisref&&e.push(n[i]);t&&(e=e.filter(function(e){if(-1<angular.lowercase(e.title).search(angular.lowercase(t)))return!0}));return s(function(){a.resolve(e)},1e3),a.promise},this.searchResultClick=function(e){e.uisref&&(e.stateParams?t.go(e.state,e.stateParams):t.go(e.state))}}e.$inject=["$state","$timeout","$q","msNavigationService"],angular.module("app.errors.error-404").controller("Error404Controller",e)}(),function(){"use strict";function e(e,t){var n=this;n.code="",n.send=!1,n.error=e.params,n.sendReport=function(){t.post("/api/jira",n.error).then(function(e){n.send=!0,e.data&&(n.code=e.data.id)},function(e){n.send=!1})}}e.$inject=["$state","$http"],angular.module("app.errors.error-500").controller("Error500Controller",e)}(),function(){"use strict";function e(e,t){var n=this;n.currentUser=e.getCurrentUser(),n.cookieAlertHide=t.get("motion.cookieAlertHide:"+n.currentUser.id)||!1,n.cookieAlertOnClose=function(){t.put("motion.cookieAlertHide:"+n.currentUser.id,!0)}}e.$inject=["Auth","$cookies"],angular.module("app.footer").controller("FooterController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;s.form={},s.forgotPassword=function(){return i.auth.forgot(s.form).$promise.then(function(){t.success({title:n.instant("FORGOTPASSWORD.LINK_SENT"),msg:n.instant("FORGOTPASSWORD.LINNK_SENT_MESSAGE")})}).catch(function(e){e&&t.error({title:n.instant("FORGOTPASSWORD.PASSWORD_RESET_ERROR"),msg:e.data?e.data.message||e.message||e:e.message||e})})},s.onInit=function(){e.isLoggedIn()&&a.go("app.dashboards.general")}}e.$inject=["Auth","toasty","$translate","$state","api"],angular.module("app.forgot").controller("ForgotPasswordController",e)}(),function(){"use strict";function e(e,t){var n=this;n.currentUser=e.getCurrentUser(),n.newsAlertHide=t.get("motion.newsAlertHide:"+n.currentUser.id)||!1,n.newsAlertOnClose=function(){t.put("motion.newsAlertHide:"+n.currentUser.id,!0)}}e.$inject=["Auth","$cookies"],angular.module("app.header").controller("HeaderController",e)}(),function(){"use strict";function e(e){var t={baseUrl:"api/"};return t.auth=e(t.baseUrl+"auth/local",{},{local:{method:"post",url:t.baseUrl+"auth/local"},forgot:{method:"post",url:t.baseUrl+"auth/local/forgot"},reset:{method:"post",url:t.baseUrl+"auth/local/reset/:token",params:{token:"@token"}},google:{method:"post",url:t.baseUrl+"auth/google"}}),t.jira=e(t.baseUrl+"jira"),t.rpc=e(t.baseUrl+"rpc",{},{startMonitor:{method:"get",url:t.baseUrl+"rpc/voice/channels/:uniqueid/mixmonitor",params:{uniqueid:"@uniqueid"}},stopMonitor:{method:"get",url:t.baseUrl+"rpc/voice/channels/:uniqueid/stopmixmonitor",params:{uniqueid:"@uniqueid"}},getVoiceChannels:{method:"get",url:t.baseUrl+"rpc/voice/channels"},getVoiceQueues:{method:"get",url:t.baseUrl+"rpc/voice/queues"},getChatQueues:{method:"get",url:t.baseUrl+"rpc/chat/queues"},getMailQueues:{method:"get",url:t.baseUrl+"rpc/mail/queues"},getSmsQueues:{method:"get",url:t.baseUrl+"rpc/sms/queues"},getOpenchannelQueues:{method:"get",url:t.baseUrl+"rpc/openchannel/queues"},getFaxQueues:{method:"get",url:t.baseUrl+"rpc/fax/queues"},getVoiceQueuesPreview:{method:"get",url:t.baseUrl+"rpc/voice/queues/preview/:id"},getVoiceQueuesChannels:{method:"get",url:t.baseUrl+"rpc/voice/queues/channels"},getVoiceQueuesChannel:{method:"get",url:t.baseUrl+"rpc/voice/queues/channels/:uniqueid"},getVoiceQueuesChannelHangup:{method:"get",url:t.baseUrl+"rpc/voice/queues/channels/:uniqueid/hangup"},getVoiceQueuesChannelRedirect:{method:"get",url:t.baseUrl+"rpc/voice/queues/channels/:uniqueid/redirect/:exten"},getOutbound:{method:"get",url:t.baseUrl+"rpc/outbound"},getOutboundChannels:{method:"get",url:t.baseUrl+"rpc/outbound/channels"},getAgents:{method:"get",url:t.baseUrl+"rpc/agents"},setAgentCapacity:{method:"put",url:t.baseUrl+"rpc/agents/:id/capacity",params:{id:"@id"}},getTelephones:{method:"get",url:t.baseUrl+"rpc/telephones"},getTrunks:{method:"get",url:t.baseUrl+"rpc/trunks"},getCampaigns:{method:"get",url:t.baseUrl+"rpc/campaigns"},getMailAccounts:{method:"get",url:t.baseUrl+"rpc/mail/accounts"},getFaxAccounts:{method:"get",url:t.baseUrl+"rpc/fax/accounts"},getChatQueuesWaitingInteractions:{method:"get",url:t.baseUrl+"rpc/chat/queues/waitinginteractions"},getMailQueuesWaitingInteractions:{method:"get",url:t.baseUrl+"rpc/mail/queues/waitinginteractions"},getOpenchannelQueuesWaitingInteractions:{method:"get",url:t.baseUrl+"rpc/openchannel/queues/waitinginteractions"},getSmsQueuesWaitingInteractions:{method:"get",url:t.baseUrl+"rpc/sms/queues/waitinginteractions"},getFaxQueuesWaitingInteractions:{method:"get",url:t.baseUrl+"rpc/fax/queues/waitinginteractions"},mailQueueNotify:{method:"post",url:t.baseUrl+"rpc/mail/queues/:id/notify",params:{id:"@id"}},chatQueueNotify:{method:"post",url:t.baseUrl+"rpc/chat/queues/:id/notify",params:{id:"@id"}},faxQueueNotify:{method:"post",url:t.baseUrl+"rpc/fax/queues/:id/notify",params:{id:"@id"}},smsQueueNotify:{method:"post",url:t.baseUrl+"rpc/sms/queues/:id/notify",params:{id:"@id"}},openchannelQueueNotify:{method:"post",url:t.baseUrl+"rpc/openchannel/queues/:id/notify",params:{id:"@id"}},agentNotify:{method:"post",url:t.baseUrl+"rpc/agents/:id/notify",params:{id:"@id"}}}),t.version=e(t.baseUrl+"version",{},{fetch:{method:"get",url:t.baseUrl+"version/fetch"},reset:{method:"get",url:t.baseUrl+"version/reset"},pull:{method:"get",url:t.baseUrl+"version/pull"},restart:{method:"get",url:t.baseUrl+"version/restart"},migrations:{method:"get",url:t.baseUrl+"version/migrations"}}),t.system=e(t.baseUrl+"system",{},{killProcess:{method:"get",url:t.baseUrl+"system/process/:pid/kill",params:{pid:"@pid"}}}),t.pm2=e(t.baseUrl+"pm2/:id",{id:"@id"},{update:{method:"put",isArray:!0}}),t.user=e(t.baseUrl+"users/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"users/describe"},clone:{method:"post",url:t.baseUrl+"users/:id/clone",params:{includeAll:"@includeAll"}},bulkCreate:{method:"post",url:t.baseUrl+"users/create_many",isArray:!0},addContacts:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/contacts"},changePassword:{isArray:!1,method:"put",url:t.baseUrl+"users/:id/password"},addQueues:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/queues"},removeQueues:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/queues"},addAvatar:{isArray:!1,method:"post",url:t.baseUrl+"users/:id/avatar"},getAvatar:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/avatar"},getContacts:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/contacts"},getQueues:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/queues"},getVoiceQueuesRt:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/queues_rt"},getGroups:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/groups"},getRecordings:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/recordings"},getScreenRecordings:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/screen_recordings"},getChatInteractions:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/chat/interactions"},getOpenchannelInteractions:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/openchannel/interactions"},getMailInteractions:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/mail/interactions"},getSmsInteractions:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/sms/interactions"},getFaxInteractions:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/fax/interactions"},login:{isArray:!1,method:"post",url:t.baseUrl+"users/:id/login"},logout:{isArray:!1,method:"post",url:t.baseUrl+"users/:id/logout"},pause:{isArray:!1,method:"post",url:t.baseUrl+"users/:id/pause"},unpause:{isArray:!1,method:"post",url:t.baseUrl+"users/:id/unpause"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/teams"},getLists:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/lists"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/agents"},addChatInteractions:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/chat_interactions"},removeChatInteractions:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/chat_interactions"},addMailInteractions:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/mail_interactions"},removeMailInteractions:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/mail_interactions"},addFaxInteractions:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/fax_interactions"},removeFaxInteractions:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/fax_interactions"},addSmsInteractions:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/sms_interactions"},removeSmsInteractions:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/sms_interactions"},addOpenchannelInteractions:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/openchannel_interactions"},removeOpenchannelInteractions:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/openchannel_interactions"},getVoicePrefixes:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/prefixes"},getFaxAccounts:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/fax_accounts"},addFaxAccounts:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/fax_accounts"},removeFaxAccounts:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/fax_accounts"},getMailAccounts:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/mail_accounts"},addMailAccounts:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/mail_accounts"},removeMailAccounts:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/mail_accounts"},getOpenchannelAccounts:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/openchannel_accounts"},addOpenchannelAccounts:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/openchannel_accounts"},removeOpenchannelAccounts:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/openchannel_accounts"},getSmsAccounts:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/sms_accounts"},addSmsAccounts:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/sms_accounts"},removeSmsAccounts:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/sms_accounts"},getChatWebsites:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/chat_websites"},addChatWebsites:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/chat_websites"},removeChatWebsites:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/chat_websites"},getSquareProjects:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/square_projects"},addSquareProjects:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/square_projects"},removeSquareProjects:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/square_projects"},getScheduledCalls:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/scheduled_calls"},getApiKey:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/api_key"},createApiKey:{isArray:!1,method:"post",url:t.baseUrl+"users/:id/api_key"},removeApiKey:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/api_key"}}),t.voiceChanSpy=e(t.baseUrl+"voice/chanspy/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/chanspy/describe"},clone:{method:"post",url:t.baseUrl+"voice/chanspy/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceContext=e(t.baseUrl+"voice/contexts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/contexts/describe"},clone:{method:"post",url:t.baseUrl+"voice/contexts/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceExtension=e(t.baseUrl+"voice/extensions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/extensions/describe"},clone:{method:"post",url:t.baseUrl+"voice/extensions/:id/clone",params:{includeAll:"@includeAll"}},addApplications:{isArray:!1,method:"post",url:t.baseUrl+"voice/extensions/:id/applications"}}),t.voiceMusicOnHold=e(t.baseUrl+"voice/mohs/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/mohs/describe"},clone:{method:"post",url:t.baseUrl+"voice/mohs/:id/clone",params:{includeAll:"@includeAll"}},addSound:{isArray:!1,method:"post",url:t.baseUrl+"voice/mohs/:id/sounds"},removeSound:{isArray:!1,method:"delete",url:t.baseUrl+"voice/mohs/:id/sounds/:id2"},getSounds:{isArray:!1,method:"get",url:t.baseUrl+"voice/mohs/:id/sounds"}}),t.voiceQueue=e(t.baseUrl+"voice/queues/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/queues/describe"},clone:{method:"post",url:t.baseUrl+"voice/queues/:id/clone",params:{includeAll:"@includeAll"}},getHoppers:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/hoppers"},getHopperHistories:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/hopper_histories"},getHopperFinals:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/hopper_finals"},getHopperBlacks:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/hopper_black"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"voice/queues/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"voice/queues/:id/teams"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"voice/queues/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"voice/queues/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/users"},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/members"},getLists:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/lists"},addLists:{isArray:!0,method:"post",url:t.baseUrl+"voice/queues/:id/lists"},removeLists:{isArray:!0,method:"delete",url:t.baseUrl+"voice/queues/:id/lists"},getBlackLists:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/blacklists"},addBlackLists:{isArray:!0,method:"post",url:t.baseUrl+"voice/queues/:id/blacklists"},removeBlackLists:{isArray:!0,method:"delete",url:t.baseUrl+"voice/queues/:id/blacklists"}}),t.voiceRecording=e(t.baseUrl+"voice/recordings/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/recordings/describe"},clone:{method:"post",url:t.baseUrl+"voice/recordings/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"voice/recordings/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}},downloads:{isArray:!1,method:"get",url:t.baseUrl+"voice/recordings/:id/downloads"}}),t.screenRecording=e(t.baseUrl+"screen/recordings/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"screen/recordings/describe"},clone:{method:"post",url:t.baseUrl+"screen/recordings/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"screen/recordings/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.voiceMail=e(t.baseUrl+"voice/mails/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/mails/describe"},clone:{method:"post",url:t.baseUrl+"voice/mails/:id/clone",params:{includeAll:"@includeAll"}},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"voice/mails/:id/messages"}}),t.voiceMailMessage=e(t.baseUrl+"voice/mails/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/mails/messages/describe"},clone:{method:"post",url:t.baseUrl+"voice/mails/messages/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"voice/mails/messages/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.voiceCallReport=e(t.baseUrl+"voice/calls/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/calls/reports/describe"},clone:{method:"post",url:t.baseUrl+"voice/calls/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceDialReport=e(t.baseUrl+"voice/dials/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/dials/reports/describe"},clone:{method:"post",url:t.baseUrl+"voice/dials/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceAgentReport=e(t.baseUrl+"voice/agents/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/agents/reports/describe"},clone:{method:"post",url:t.baseUrl+"voice/agents/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceQueueReport=e(t.baseUrl+"voice/queues/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/queues/reports/describe"},clone:{method:"post",url:t.baseUrl+"voice/queues/reports/:id/clone",params:{includeAll:"@includeAll"}},getVoiceQueuesReport:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/reports/index"}}),t.memberReport=e(t.baseUrl+"members/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"members/reports/describe"},clone:{method:"post",url:t.baseUrl+"members/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.trunk=e(t.baseUrl+"trunks/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"trunks/describe"},clone:{method:"post",url:t.baseUrl+"trunks/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceTransferReport=e(t.baseUrl+"voice/transfers/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/transfers/reports/describe"},clone:{method:"post",url:t.baseUrl+"voice/transfers/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.mailServerOut=e(t.baseUrl+"mail/out_servers/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/out_servers/describe"},clone:{method:"post",url:t.baseUrl+"mail/out_servers/:id/clone",params:{includeAll:"@includeAll"}}}),t.mailAccount=e(t.baseUrl+"mail/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/accounts/describe"},clone:{method:"post",url:t.baseUrl+"mail/accounts/:id/clone",params:{includeAll:"@includeAll"}},addDisposition:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/dispositions"},getDispositions:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/dispositions"},removeDispositions:{isArray:!1,method:"delete",url:t.baseUrl+"mail/accounts/:id/dispositions"},addAnswer:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/canned_answers"},getAnswers:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/canned_answers"},removeAnswers:{isArray:!1,method:"delete",url:t.baseUrl+"mail/accounts/:id/canned_answers"},getImap:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/in_servers"},addImap:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/in_servers"},removeImap:{isArray:!1,method:"delete",url:t.baseUrl+"mail/accounts/:id/in_servers"},getSmtp:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/out_servers"},addSmtp:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/out_servers"},removeSmtp:{isArray:!1,method:"delete",url:t.baseUrl+"mail/accounts/:id/out_servers"},addInteraction:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/interactions"},getInteractions:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/interactions"},addApplications:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/applications"},getApplications:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/applications"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/messages"},send:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/send"},verifySmtp:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/verify"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"mail/accounts/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"mail/accounts/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/users"}}),t.mailQueue=e(t.baseUrl+"mail/queues/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/queues/describe"},clone:{method:"post",url:t.baseUrl+"mail/queues/:id/clone",params:{includeAll:"@includeAll"}},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"mail/queues/:id/members"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"mail/queues/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"mail/queues/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"mail/queues/:id/teams"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"mail/queues/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"mail/queues/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"mail/queues/:id/users"}}),t.mailSubstatus=e(t.baseUrl+"mail/substatuses/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/substatuses/describe"},clone:{method:"post",url:t.baseUrl+"mail/substatuses/:id/clone",params:{includeAll:"@includeAll"}}}),t.mailInteraction=e(t.baseUrl+"mail/interactions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/interactions/describe"},clone:{method:"post",url:t.baseUrl+"mail/interactions/:id/clone",params:{includeAll:"@includeAll"}},addMessage:{isArray:!1,method:"post",url:t.baseUrl+"mail/interactions/:id/messages"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"mail/interactions/:id/messages"},addTags:{isArray:!1,method:"post",url:t.baseUrl+"mail/interactions/:id/tags"},removeTags:{isArray:!1,method:"delete",url:t.baseUrl+"mail/interactions/:id/tags"},download:{isArray:!1,method:"get",url:t.baseUrl+"mail/interactions/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.mailMessage=e(t.baseUrl+"mail/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/messages/describe"},clone:{method:"post",url:t.baseUrl+"mail/messages/:id/clone",params:{includeAll:"@includeAll"}},accept:{isArray:!1,method:"put",url:t.baseUrl+"mail/messages/:id/accept"},reject:{isArray:!1,method:"put",url:t.baseUrl+"mail/messages/:id/reject"},download:{isArray:!1,method:"get",url:t.baseUrl+"mail/messages/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.mailApplication=e(t.baseUrl+"mail/applications/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/applications/describe"},clone:{method:"post",url:t.baseUrl+"mail/applications/:id/clone",params:{includeAll:"@includeAll"}}}),t.mailQueueReport=e(t.baseUrl+"mail/reports/queue/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/reports/queue/describe"},clone:{method:"post",url:t.baseUrl+"mail/reports/queue/:id/clone",params:{includeAll:"@includeAll"}}}),t.dashboard=e(t.baseUrl+"dashboards/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"dashboards/describe"},clone:{method:"post",url:t.baseUrl+"dashboards/:id/clone",params:{includeAll:"@includeAll"}},addItem:{isArray:!1,method:"post",url:t.baseUrl+"dashboards/:id/items"},getItems:{isArray:!1,method:"get",url:t.baseUrl+"dashboards/:id/items"}}),t.dashboardItem=e(t.baseUrl+"dashboards/items/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"dashboards/items/describe"},clone:{method:"post",url:t.baseUrl+"dashboards/items/:id/clone",params:{includeAll:"@includeAll"}}}),t.faxAccount=e(t.baseUrl+"fax/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/accounts/describe"},clone:{method:"post",url:t.baseUrl+"fax/accounts/:id/clone",params:{includeAll:"@includeAll"}},addDisposition:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/:id/dispositions"},getDispositions:{isArray:!1,method:"get",url:t.baseUrl+"fax/accounts/:id/dispositions"},removeDispositions:{isArray:!1,method:"delete",url:t.baseUrl+"fax/accounts/:id/dispositions"},addAnswer:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/:id/canned_answers"},getAnswers:{isArray:!1,method:"get",url:t.baseUrl+"fax/accounts/:id/canned_answers"},removeAnswers:{isArray:!1,method:"delete",url:t.baseUrl+"fax/accounts/:id/canned_answers"},addInteraction:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/:id/interactions"},getInteractions:{isArray:!1,method:"get",url:t.baseUrl+"fax/accounts/:id/interactions"},addApplications:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/:id/applications"},getApplications:{isArray:!1,method:"get",url:t.baseUrl+"fax/accounts/:id/applications"},addAccountApplications:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/addaccountapplications"},updateAccountApplications:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/updateaccountapplications"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"fax/accounts/:id/messages"},send:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/:id/send"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"fax/accounts/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"fax/accounts/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"fax/accounts/:id/users"}}),t.faxApplication=e(t.baseUrl+"fax/applications/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/applications/describe"},clone:{method:"post",url:t.baseUrl+"fax/applications/:id/clone",params:{includeAll:"@includeAll"}}}),t.faxInteraction=e(t.baseUrl+"fax/interactions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/interactions/describe"},clone:{method:"post",url:t.baseUrl+"fax/interactions/:id/clone",params:{includeAll:"@includeAll"}},addMessage:{isArray:!1,method:"post",url:t.baseUrl+"fax/interactions/:id/messages"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"fax/interactions/:id/messages"},addTags:{isArray:!1,method:"post",url:t.baseUrl+"fax/interactions/:id/tags"},removeTags:{isArray:!1,method:"delete",url:t.baseUrl+"fax/interactions/:id/tags"},download:{isArray:!1,method:"get",url:t.baseUrl+"fax/interactions/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.faxMessage=e(t.baseUrl+"fax/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/messages/describe"},clone:{method:"post",url:t.baseUrl+"fax/messages/:id/clone",params:{includeAll:"@includeAll"}},accept:{isArray:!1,method:"put",url:t.baseUrl+"fax/messages/:id/accept"},reject:{isArray:!1,method:"put",url:t.baseUrl+"fax/messages/:id/reject"},download:{isArray:!1,method:"get",url:t.baseUrl+"fax/messages/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.faxQueue=e(t.baseUrl+"fax/queues/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/queues/describe"},clone:{method:"post",url:t.baseUrl+"fax/queues/:id/clone",params:{includeAll:"@includeAll"}},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"fax/queues/:id/members"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"fax/queues/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"fax/queues/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"fax/queues/:id/teams"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"fax/queues/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"fax/queues/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"fax/queues/:id/users"}}),t.faxQueueReport=e(t.baseUrl+"fax/reports/queue/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/reports/queue/describe"},clone:{method:"post",url:t.baseUrl+"fax/reports/queue/:id/clone",params:{includeAll:"@includeAll"}}}),t.smsAccount=e(t.baseUrl+"sms/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/accounts/describe"},clone:{method:"post",url:t.baseUrl+"sms/accounts/:id/clone",params:{includeAll:"@includeAll"}},addDisposition:{isArray:!1,method:"post",url:t.baseUrl+"sms/accounts/:id/dispositions"},getDispositions:{isArray:!1,method:"get",url:t.baseUrl+"sms/accounts/:id/dispositions"},removeDispositions:{isArray:!1,method:"delete",url:t.baseUrl+"sms/accounts/:id/dispositions"},addAnswer:{isArray:!1,method:"post",url:t.baseUrl+"sms/accounts/:id/canned_answers"},getAnswers:{isArray:!1,method:"get",url:t.baseUrl+"sms/accounts/:id/canned_answers"},removeAnswers:{isArray:!1,method:"delete",url:t.baseUrl+"sms/accounts/:id/canned_answers"},notify:{isArray:!1,method:"post",url:t.baseUrl+"sms/accounts/:id/notify"},addApplications:{isArray:!1,method:"post",url:t.baseUrl+"sms/accounts/:id/applications"},getApplications:{isArray:!1,method:"get",url:t.baseUrl+"sms/accounts/:id/applications"},getInteractions:{isArray:!1,method:"get",url:t.baseUrl+"sms/accounts/:id/interactions"},send:{isArray:!1,method:"post",url:t.baseUrl+"sms/accounts/:id/send"},status:{isArray:!1,method:"post",url:t.baseUrl+"sms/accounts/:id/status"},statusGet:{isArray:!1,method:"get",url:t.baseUrl+"sms/accounts/:id/status"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"sms/accounts/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"sms/accounts/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"sms/accounts/:id/users"}}),t.smsApplication=e(t.baseUrl+"sms/applications/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/applications/describe"},clone:{method:"post",url:t.baseUrl+"sms/applications/:id/clone",params:{includeAll:"@includeAll"}}}),t.smsInteraction=e(t.baseUrl+"sms/interactions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/interactions/describe"},clone:{method:"post",url:t.baseUrl+"sms/interactions/:id/clone",params:{includeAll:"@includeAll"}},addMessage:{isArray:!1,method:"post",url:t.baseUrl+"sms/interactions/:id/messages"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"sms/interactions/:id/messages"},addTags:{isArray:!1,method:"post",url:t.baseUrl+"sms/interactions/:id/tags"},removeTags:{isArray:!1,method:"delete",url:t.baseUrl+"sms/interactions/:id/tags"},download:{isArray:!1,method:"get",url:t.baseUrl+"sms/interactions/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.smsMessage=e(t.baseUrl+"sms/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/messages/describe"},clone:{method:"post",url:t.baseUrl+"sms/messages/:id/clone",params:{includeAll:"@includeAll"}},accept:{isArray:!1,method:"put",url:t.baseUrl+"sms/messages/:id/accept"},reject:{isArray:!1,method:"put",url:t.baseUrl+"sms/messages/:id/reject"},status:{isArray:!1,method:"post",url:t.baseUrl+"sms/messages/:id/status"}}),t.smsQueue=e(t.baseUrl+"sms/queues/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/queues/describe"},clone:{method:"post",url:t.baseUrl+"sms/queues/:id/clone",params:{includeAll:"@includeAll"}},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"sms/queues/:id/members"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"sms/queues/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"sms/queues/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"sms/queues/:id/teams"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"sms/queues/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"sms/queues/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"sms/queues/:id/users"}}),t.openchannelAccount=e(t.baseUrl+"openchannel/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/accounts/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/accounts/:id/clone",params:{includeAll:"@includeAll"}},addDisposition:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/accounts/:id/dispositions"},getDispositions:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/accounts/:id/dispositions"},removeDispositions:{isArray:!1,method:"delete",url:t.baseUrl+"openchannel/accounts/:id/dispositions"},addAnswer:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/accounts/:id/canned_answers"},getAnswers:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/accounts/:id/canned_answers"},removeAnswers:{isArray:!1,method:"delete",url:t.baseUrl+"openchannel/accounts/:id/canned_answers"},notify:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/accounts/:id/notify"},addApplications:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/accounts/:id/applications"},getApplications:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/accounts/:id/applications"},getInteractions:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/accounts/:id/interactions"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"openchannel/accounts/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"openchannel/accounts/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/accounts/:id/users"},send:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/accounts/:id/send"}}),t.openchannelApplication=e(t.baseUrl+"openchannel/applications/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/applications/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/applications/:id/clone",params:{includeAll:"@includeAll"}}}),t.openchannelInteraction=e(t.baseUrl+"openchannel/interactions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/interactions/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/interactions/:id/clone",params:{includeAll:"@includeAll"}},addMessage:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/interactions/:id/messages"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/interactions/:id/messages"},addTags:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/interactions/:id/tags"},removeTags:{isArray:!1,method:"delete",url:t.baseUrl+"openchannel/interactions/:id/tags"},download:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/interactions/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.openchannelMessage=e(t.baseUrl+"openchannel/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/messages/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/messages/:id/clone",params:{includeAll:"@includeAll"}},accept:{isArray:!1,method:"put",url:t.baseUrl+"openchannel/messages/:id/accept"},reject:{isArray:!1,method:"put",url:t.baseUrl+"openchannel/messages/:id/reject"}}),t.openchannelQueue=e(t.baseUrl+"openchannel/queues/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/queues/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/queues/:id/clone",params:{includeAll:"@includeAll"}},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/queues/:id/members"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/queues/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"openchannel/queues/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"openchannel/queues/:id/teams"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"openchannel/queues/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"openchannel/queues/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/queues/:id/users"}}),t.chatWebsite=e(t.baseUrl+"chat/websites/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/websites/describe"},clone:{method:"post",url:t.baseUrl+"chat/websites/:id/clone",params:{includeAll:"@includeAll"}},addDisposition:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/dispositions"},getDispositions:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/dispositions"},removeDispositions:{isArray:!1,method:"delete",url:t.baseUrl+"chat/websites/:id/dispositions"},addAnswer:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/canned_answers"},getAnswers:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/canned_answers"},removeAnswers:{isArray:!1,method:"delete",url:t.baseUrl+"chat/websites/:id/canned_answers"},addLogo:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/logo"},addAvatar:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/avatar"},addCustomerAvatar:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/customer_avatar"},addSystemAvatar:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/system_avatar"},getLogo:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/logo"},getAvatar:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/avatar"},getCustomerAvatar:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/customer_avatar"},getSystemAvatar:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/system_avatar"},notify:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/notify"},offline:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/offline"},addInteraction:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/interactions"},getInteractions:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/interactions"},getSnippet:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/snippet"},addApplications:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/applications"},getApplications:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/applications"},addProactiveActions:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/proactive_actions"},getProactiveActions:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/proactive_actions"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/fields"},getOfflineMessages:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/offline_messages"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"chat/websites/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"chat/websites/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/users"}}),t.openchannelQueueReport=e(t.baseUrl+"openchannel/reports/queue/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/reports/queue/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/reports/queue/:id/clone",params:{includeAll:"@includeAll"}}}),t.chatApplication=e(t.baseUrl+"chat/applications/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/applications/describe"},clone:{method:"post",url:t.baseUrl+"chat/applications/:id/clone",params:{includeAll:"@includeAll"}}}),t.chatInteraction=e(t.baseUrl+"chat/interactions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/interactions/describe"},clone:{method:"post",url:t.baseUrl+"chat/interactions/:id/clone",params:{includeAll:"@includeAll"}},customUpdate:{isArray:!1,method:"put",url:t.baseUrl+"chat/interactions/:id/custom_update"},abandon:{isArray:!1,method:"put",url:t.baseUrl+"chat/interactions/:id/abandon"},attachmentUpload:{isArray:!1,method:"post",url:t.baseUrl+"chat/interactions/:id/attachment_upload"},attachmentDownload:{isArray:!1,method:"get",url:t.baseUrl+"chat/interactions/:id/attachment_download"},close:{isArray:!1,method:"put",url:t.baseUrl+"chat/interactions/:id/close"},addMessage:{isArray:!1,method:"post",url:t.baseUrl+"chat/interactions/:id/messages"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"chat/interactions/:id/messages"},getMyMessages:{isArray:!1,method:"get",url:t.baseUrl+"chat/interactions/:id/my_messages"},addTags:{isArray:!1,method:"post",url:t.baseUrl+"chat/interactions/:id/tags"},removeTags:{isArray:!1,method:"delete",url:t.baseUrl+"chat/interactions/:id/tags"},download:{isArray:!1,method:"get",url:t.baseUrl+"chat/interactions/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.chatMessage=e(t.baseUrl+"chat/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/messages/describe"},clone:{method:"post",url:t.baseUrl+"chat/messages/:id/clone",params:{includeAll:"@includeAll"}},accept:{isArray:!1,method:"put",url:t.baseUrl+"chat/messages/:id/accept"},reject:{isArray:!1,method:"put",url:t.baseUrl+"chat/messages/:id/reject"}}),t.chatOfflineMessage=e(t.baseUrl+"chat/offline_messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/offline_messages/describe"},clone:{method:"post",url:t.baseUrl+"chat/offline_messages/:id/clone",params:{includeAll:"@includeAll"}}}),t.chatQueue=e(t.baseUrl+"chat/queues/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/queues/describe"},clone:{method:"post",url:t.baseUrl+"chat/queues/:id/clone",params:{includeAll:"@includeAll"}},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"chat/queues/:id/members"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"chat/queues/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"chat/queues/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"chat/queues/:id/teams"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"chat/queues/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"chat/queues/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"chat/queues/:id/users"}}),t.chatGroup=e(t.baseUrl+"chat/groups/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/groups/describe"},clone:{method:"post",url:t.baseUrl+"chat/groups/:id/clone",params:{includeAll:"@includeAll"}},getUnread:{isArray:!1,method:"get",url:t.baseUrl+"chat/groups/:id/unread"},addMembers:{isArray:!0,method:"post",url:t.baseUrl+"chat/groups/:id/members"},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"chat/groups/:id/members"},removeMembers:{isArray:!1,method:"delete",url:t.baseUrl+"chat/groups/:id/members"},addMessage:{isArray:!1,method:"post",url:t.baseUrl+"chat/groups/:id/messages"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"chat/groups/:id/messages"}}),t.chatProactiveAction=e(t.baseUrl+"chat/proactive_actions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/proactive_actions/describe"},clone:{method:"post",url:t.baseUrl+"chat/proactive_actions/:id/clone",params:{includeAll:"@includeAll"}}}),t.cmCompany=e(t.baseUrl+"cm/companies/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/companies/describe"},clone:{method:"post",url:t.baseUrl+"cm/companies/:id/clone",params:{includeAll:"@includeAll"}},addContacts:{isArray:!1,method:"post",url:t.baseUrl+"cm/companies/:id/contacts"},getContacts:{isArray:!1,method:"get",url:t.baseUrl+"cm/companies/:id/contacts"}}),t.cmContact=e(t.baseUrl+"cm/contacts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/contacts/describe"},clone:{method:"post",url:t.baseUrl+"cm/contacts/:id/clone",params:{includeAll:"@includeAll"}},merge:{isArray:!1,method:"post",url:t.baseUrl+"cm/contacts/merge"},bulkCreate:{isArray:!1,method:"post",url:t.baseUrl+"cm/contacts/create_many"},getTags:{isArray:!1,method:"get",url:t.baseUrl+"cm/contacts/:id/tags"},setTags:{isArray:!0,method:"post",url:t.baseUrl+"cm/contacts/:id/tags"},getHoppers:{isArray:!1,method:"get",url:t.baseUrl+"cm/contacts/:id/hoppers"},getHopperHistories:{isArray:!1,method:"get",url:t.baseUrl+"cm/contacts/:id/hopper_histories"},getHopperFinals:{isArray:!1,method:"get",url:t.baseUrl+"cm/contacts/:id/hopper_finals"},getJscriptySessions:{isArray:!1,method:"get",url:t.baseUrl+"cm/contacts/:id/jscripty_sessions"},uploadCsv:{isArray:!1,method:"post",url:t.baseUrl+"cm/contacts/csv"},upload:{isArray:!1,method:"post",url:t.baseUrl+"cm/contacts/upload"},import:{isArray:!1,method:"post",url:t.baseUrl+"cm/contacts/upload/:id"}}),t.cmHopper=e(t.baseUrl+"cm/hopper/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/hopper/describe"},clone:{method:"post",url:t.baseUrl+"cm/hopper/:id/clone",params:{includeAll:"@includeAll"}},getPreview:{isArray:!1,method:"post",url:t.baseUrl+"cm/hopper/preview"},getOpenContacts:{isArray:!1,method:"get",url:t.baseUrl+"cm/hopper/opencontacts"}}),t.cmHopperBlack=e(t.baseUrl+"cm/hopper_black/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/hopper_black/describe"},clone:{method:"post",url:t.baseUrl+"cm/hopper_black/:id/clone",params:{includeAll:"@includeAll"}}}),t.cmHopperFinal=e(t.baseUrl+"cm/hopper_final/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/hopper_final/describe"},clone:{method:"post",url:t.baseUrl+"cm/hopper_final/:id/clone",params:{includeAll:"@includeAll"}},countContactsQueueCampaignHopperFinal:{isArray:!0,method:"get",url:t.baseUrl+"cm/hopper_final/voice/queue/countAttributes/:id"},countContactsIvrCampaignHopperFinal:{isArray:!0,method:"get",url:t.baseUrl+"cm/hopper_final/campaign/countAttributes/:id"},moveContactsQueueCampaignHopperFinal:{isArray:!0,method:"post",url:t.baseUrl+"cm/hopper_final/voice/queue/moveContacts/:id"},moveContactsIvrCampaignHopperFinal:{isArray:!0,method:"post",url:t.baseUrl+"cm/hopper_final/voice/campaign/moveContacts/:id"},checkContactHopper:{isArray:!1,method:"post",url:t.baseUrl+"cm/hopper_final/checkContactHopper"}}),t.cmHopperHistory=e(t.baseUrl+"cm/hopper_history/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/hopper_history/describe"},clone:{method:"post",url:t.baseUrl+"cm/hopper_history/:id/clone",params:{includeAll:"@includeAll"}}}),t.cmCustomField=e(t.baseUrl+"cm/custom_fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/custom_fields/describe"},clone:{method:"post",url:t.baseUrl+"cm/custom_fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.action=e(t.baseUrl+"actions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"actions/describe"},clone:{method:"post",url:t.baseUrl+"actions/:id/clone",params:{includeAll:"@includeAll"}}}),t.automation=e(t.baseUrl+"automations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"automations/describe"},clone:{method:"post",url:t.baseUrl+"automations/:id/clone",params:{includeAll:"@includeAll"}},addConditions:{isArray:!1,method:"post",url:t.baseUrl+"automations/:id/conditions"},getConditions:{isArray:!1,method:"get",url:t.baseUrl+"automations/:id/conditions"},addActions:{isArray:!1,method:"post",url:t.baseUrl+"automations/:id/actions"},getActions:{isArray:!1,method:"get",url:t.baseUrl+"automations/:id/actions"}}),t.cannedAnswer=e(t.baseUrl+"canned_answers/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"canned_answers/describe"},clone:{method:"post",url:t.baseUrl+"canned_answers/:id/clone",params:{includeAll:"@includeAll"}}}),t.disposition=e(t.baseUrl+"dispositions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"dispositions/describe"},clone:{method:"post",url:t.baseUrl+"dispositions/:id/clone",params:{includeAll:"@includeAll"}}}),t.condition=e(t.baseUrl+"conditions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"conditions/describe"},clone:{method:"post",url:t.baseUrl+"conditions/:id/clone",params:{includeAll:"@includeAll"}}}),t.interval=e(t.baseUrl+"intervals/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"intervals/describe"},clone:{method:"post",url:t.baseUrl+"intervals/:id/clone",params:{includeAll:"@includeAll"}},addInterval:{isArray:!1,method:"post",url:t.baseUrl+"intervals/:id/sub_intervals"},getIntervals:{isArray:!1,method:"get",url:t.baseUrl+"intervals/:id/sub_intervals"},addIntervals:{isArray:!0,method:"post",url:t.baseUrl+"intervals/:id/sub_intervals/create_many"}}),t.pause=e(t.baseUrl+"pauses/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"pauses/describe"},clone:{method:"post",url:t.baseUrl+"pauses/:id/clone",params:{includeAll:"@includeAll"}}}),t.cdr=e(t.baseUrl+"cdr/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cdr/describe"},clone:{method:"post",url:t.baseUrl+"cdr/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceQueuesLog=e(t.baseUrl+"voiceQueuesLog/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voiceQueuesLog/describe"},clone:{method:"post",url:t.baseUrl+"voiceQueuesLog/:id/clone",params:{includeAll:"@includeAll"}}}),t.schedule=e(t.baseUrl+"schedules/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"schedules/describe"},clone:{method:"post",url:t.baseUrl+"schedules/:id/clone",params:{includeAll:"@includeAll"}},run:{isArray:!1,method:"get",url:t.baseUrl+"schedules/:id/run"}}),t.sound=e(t.baseUrl+"sounds/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sounds/describe"},clone:{method:"post",url:t.baseUrl+"sounds/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"sounds/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}},delete:{isArray:!1,method:"delete",url:t.baseUrl+"sounds/:id"}}),t.tag=e(t.baseUrl+"tags/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"tags/describe"},clone:{method:"post",url:t.baseUrl+"tags/:id/clone",params:{includeAll:"@includeAll"}}}),t.template=e(t.baseUrl+"templates/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"templates/describe"},clone:{method:"post",url:t.baseUrl+"templates/:id/clone",params:{includeAll:"@includeAll"}}}),t.trigger=e(t.baseUrl+"triggers/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"triggers/describe"},clone:{method:"post",url:t.baseUrl+"triggers/:id/clone",params:{includeAll:"@includeAll"}},addAllCondition:{isArray:!1,method:"post",url:t.baseUrl+"triggers/:id/all_conditions"},addAnyCondition:{isArray:!1,method:"post",url:t.baseUrl+"triggers/:id/any_conditions"},getAllConditions:{isArray:!1,method:"get",url:t.baseUrl+"triggers/:id/all_conditions"},getAnyConditions:{isArray:!1,method:"get",url:t.baseUrl+"triggers/:id/any_conditions"},addAction:{isArray:!1,method:"post",url:t.baseUrl+"triggers/:id/actions"},getActions:{isArray:!1,method:"get",url:t.baseUrl+"triggers/:id/actions"}}),t.variable=e(t.baseUrl+"variables/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"variables/describe"},clone:{method:"post",url:t.baseUrl+"variables/:id/clone",params:{includeAll:"@includeAll"}}}),t.integration=e(t.baseUrl+"integrations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/:id/clone",params:{includeAll:"@includeAll"}}}),t.integrationReport=e(t.baseUrl+"integrations/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/reports/describe"},clone:{method:"post",url:t.baseUrl+"integrations/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.analyticCustomReport=e(t.baseUrl+"analytics/custom_reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"analytics/custom_reports/describe"},clone:{method:"post",url:t.baseUrl+"analytics/custom_reports/:id/clone",params:{includeAll:"@includeAll"}},preview:{isArray:!0,method:"get",url:t.baseUrl+"analytics/custom_reports/:id/preview"},run:{isArray:!1,method:"get",url:t.baseUrl+"analytics/custom_reports/:id/run"},query:{isArray:!1,method:"get",url:t.baseUrl+"analytics/custom_reports/:id/query"}}),t.analyticDefaultReport=e(t.baseUrl+"analytics/default_reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"analytics/default_reports/describe"},clone:{method:"post",url:t.baseUrl+"analytics/default_reports/:id/clone",params:{includeAll:"@includeAll"}},preview:{isArray:!0,method:"get",url:t.baseUrl+"analytics/default_reports/:id/preview"},run:{isArray:!1,method:"get",url:t.baseUrl+"analytics/default_reports/:id/run"},query:{isArray:!1,method:"get",url:t.baseUrl+"analytics/default_reports/:id/query"}}),t.analyticExtractedReport=e(t.baseUrl+"analytics/extracted_reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"analytics/extracted_reports/describe"},clone:{method:"post",url:t.baseUrl+"analytics/extracted_reports/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"analytics/extracted_reports/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.analyticMetric=e(t.baseUrl+"analytics/metrics/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"analytics/metrics/describe"},clone:{method:"post",url:t.baseUrl+"analytics/metrics/:id/clone",params:{includeAll:"@includeAll"}}}),t.analyticFieldReport=e(t.baseUrl+"analytics/field_reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"analytics/field_reports/describe"},clone:{method:"post",url:t.baseUrl+"analytics/field_reports/:id/clone",params:{includeAll:"@includeAll"}},bulkCreate:{method:"post",url:t.baseUrl+"analytics/field_reports/create_many",isArray:!0},bulkDestroy:{method:"delete",url:t.baseUrl+"analytics/field_reports/destroy_many",isArray:!0},addFields:{isArray:!0,method:"post",url:t.baseUrl+"analytics/field_reports/:id/create_many"}}),t.analyticTreeReport=e(t.baseUrl+"analytics/tree_reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"analytics/tree_reports/describe"},clone:{method:"post",url:t.baseUrl+"analytics/tree_reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.intSalesforceAccount=e(t.baseUrl+"integrations/salesforce/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/salesforce/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/salesforce/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/salesforce/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/salesforce/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/salesforce/accounts/:id/fields"}}),t.intSalesforceConfiguration=e(t.baseUrl+"integrations/salesforce/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/salesforce/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/salesforce/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/salesforce/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/salesforce/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/salesforce/configurations/:id/descriptions"}}),t.intSalesforceField=e(t.baseUrl+"integrations/salesforce/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/salesforce/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/salesforce/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intSugarcrmAccount=e(t.baseUrl+"integrations/sugarcrm/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/sugarcrm/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/sugarcrm/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/sugarcrm/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/sugarcrm/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/sugarcrm/accounts/:id/fields"}}),t.intSugarcrmConfiguration=e(t.baseUrl+"integrations/sugarcrm/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/sugarcrm/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/sugarcrm/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/sugarcrm/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/sugarcrm/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/sugarcrm/configurations/:id/descriptions"}}),t.intSugarcrmField=e(t.baseUrl+"integrations/sugarcrm/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/sugarcrm/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/sugarcrm/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intDeskAccount=e(t.baseUrl+"integrations/desk/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/desk/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/desk/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/desk/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/desk/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/desk/accounts/:id/fields"}}),t.intDeskConfiguration=e(t.baseUrl+"integrations/desk/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/desk/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/desk/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/desk/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/desk/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/desk/configurations/:id/descriptions"},getTags:{isArray:!1,method:"get",url:t.baseUrl+"integrations/desk/configurations/:id/tags"},setTags:{isArray:!0,method:"post",url:t.baseUrl+"integrations/desk/configurations/:id/tags"}}),t.intDeskField=e(t.baseUrl+"integrations/desk/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/desk/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/desk/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intZohoAccount=e(t.baseUrl+"integrations/zoho/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/zoho/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/zoho/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zoho/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/zoho/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zoho/accounts/:id/fields"}}),t.intZohoConfiguration=e(t.baseUrl+"integrations/zoho/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/zoho/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/zoho/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zoho/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zoho/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zoho/configurations/:id/descriptions"}}),t.intZohoField=e(t.baseUrl+"integrations/zoho/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/zoho/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/zoho/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intZendeskAccount=e(t.baseUrl+"integrations/zendesk/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/zendesk/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/zendesk/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zendesk/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/zendesk/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zendesk/accounts/:id/fields"}}),t.intZendeskConfiguration=e(t.baseUrl+"integrations/zendesk/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/zendesk/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/zendesk/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zendesk/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zendesk/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zendesk/configurations/:id/descriptions"},getTags:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zendesk/configurations/:id/tags"},setTags:{isArray:!0,method:"post",url:t.baseUrl+"integrations/zendesk/configurations/:id/tags"}}),t.intZendeskField=e(t.baseUrl+"integrations/zendesk/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/zendesk/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/zendesk/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intFreshdeskAccount=e(t.baseUrl+"integrations/freshdesk/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/freshdesk/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/freshdesk/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/freshdesk/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/freshdesk/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/freshdesk/accounts/:id/fields"}}),t.intFreshdeskConfiguration=e(t.baseUrl+"integrations/freshdesk/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/freshdesk/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/freshdesk/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/freshdesk/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/freshdesk/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/freshdesk/configurations/:id/descriptions"},getTags:{isArray:!1,method:"get",url:t.baseUrl+"integrations/freshdesk/configurations/:id/tags"},setTags:{isArray:!0,method:"post",url:t.baseUrl+"integrations/freshdesk/configurations/:id/tags"}}),t.intFreshdeskField=e(t.baseUrl+"integrations/freshdesk/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/freshdesk/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/freshdesk/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intVtigerAccount=e(t.baseUrl+"integrations/vtiger/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/vtiger/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/vtiger/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/vtiger/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/vtiger/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/vtiger/accounts/:id/fields"}}),t.intVtigerConfiguration=e(t.baseUrl+"integrations/vtiger/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/vtiger/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/vtiger/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/vtiger/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/vtiger/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/vtiger/configurations/:id/descriptions"}}),t.intVtigerField=e(t.baseUrl+"integrations/vtiger/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/vtiger/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/vtiger/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intServicenowAccount=e(t.baseUrl+"integrations/servicenow/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/servicenow/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/servicenow/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/servicenow/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/servicenow/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/servicenow/accounts/:id/fields"}}),t.intServicenowConfiguration=e(t.baseUrl+"integrations/servicenow/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/servicenow/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/servicenow/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/servicenow/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/servicenow/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/servicenow/configurations/:id/descriptions"}}),t.intServicenowField=e(t.baseUrl+"integrations/servicenow/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/servicenow/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/servicenow/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intDynamics365Account=e(t.baseUrl+"integrations/dynamics365/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/dynamics365/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/dynamics365/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/dynamics365/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/dynamics365/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/dynamics365/accounts/:id/fields"}}),t.intDynamics365Configuration=e(t.baseUrl+"integrations/dynamics365/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/dynamics365/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/dynamics365/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/dynamics365/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/dynamics365/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/dynamics365/configurations/:id/descriptions"}}),t.intDynamics365Field=e(t.baseUrl+"integrations/dynamics365/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/dynamics365/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/dynamics365/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.network=e(t.baseUrl+"networks/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"networks/describe"},clone:{method:"post",url:t.baseUrl+"networks/:id/clone",params:{includeAll:"@includeAll"}}}),t.chatQueueReport=e(t.baseUrl+"chat/reports/queue/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/reports/queue/describe"},clone:{method:"post",url:t.baseUrl+"chat/reports/queue/:id/clone",params:{includeAll:"@includeAll"}}}),t.chatInternalMessage=e(t.baseUrl+"chat/internal/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/internal/messages/describe"},clone:{method:"post",url:t.baseUrl+"chat/internal/messages/:id/clone",params:{includeAll:"@includeAll"}},getUsers:{isArray:!1,method:"get",url:t.baseUrl+"chat/internal/messages/users"}}),t.jscriptyAnswerReport=e(t.baseUrl+"jscripty/answers/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"jscripty/answers/reports/describe"},clone:{method:"post",url:t.baseUrl+"jscripty/answers/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.jscriptyQuestionReport=e(t.baseUrl+"jscripty/questions/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"jscripty/questions/reports/describe"},clone:{method:"post",url:t.baseUrl+"jscripty/questions/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.jscriptySessionReport=e(t.baseUrl+"jscripty/sessions/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"jscripty/sessions/reports/describe"},clone:{method:"post",url:t.baseUrl+"jscripty/sessions/reports/:id/clone",params:{includeAll:"@includeAll"}},getQuestions:{isArray:!1,method:"get",url:t.baseUrl+"jscripty/sessions/reports/:id/questions"}}),t.smsQueueReport=e(t.baseUrl+"sms/reports/queue/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/reports/queue/describe"},clone:{method:"post",url:t.baseUrl+"sms/reports/queue/:id/clone",params:{includeAll:"@includeAll"}}}),t.squareReport=e(t.baseUrl+"square/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"square/reports/describe"},clone:{method:"post",url:t.baseUrl+"square/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.squareReportDetail=e(t.baseUrl+"square/details/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"square/details/reports/describe"},clone:{method:"post",url:t.baseUrl+"square/details/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.jscriptyProject=e(t.baseUrl+"jscripty/projects/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"jscripty/projects/describe"},clone:{method:"post",url:t.baseUrl+"jscripty/projects/:id/clone",params:{includeAll:"@includeAll"}},getSessions:{isArray:!1,method:"get",url:t.baseUrl+"jscripty/projects/:id/sessions"},getAnswers:{isArray:!1,method:"get",url:t.baseUrl+"jscripty/projects/:id/answers"},getSummary:{isArray:!1,method:"get",url:t.baseUrl+"jscripty/projects/:id/summary",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.setting=e(t.baseUrl+"settings/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"settings/describe"},clone:{method:"post",url:t.baseUrl+"settings/:id/clone",params:{includeAll:"@includeAll"}},addLogo:{isArray:!1,method:"post",url:t.baseUrl+"settings/:id/logo"},addLogoLogin:{isArray:!1,method:"post",url:t.baseUrl+"settings/:id/logo_login"},getLogo:{isArray:!1,method:"get",url:t.baseUrl+"settings/:id/logo"},getLogoLogin:{isArray:!1,method:"get",url:t.baseUrl+"settings/:id/logo_login"},gdpr:{isArray:!1,method:"get",url:t.baseUrl+"settings/:id/gdpr"},addPreferred:{isArray:!1,method:"post",url:t.baseUrl+"settings/:id/preferred"},getPreferred:{isArray:!1,method:"get",url:t.baseUrl+"settings/:id/preferred"}}),t.squareOdbc=e(t.baseUrl+"square/odbc/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"square/odbc/describe"},clone:{method:"post",url:t.baseUrl+"square/odbc/:id/clone",params:{includeAll:"@includeAll"}},test:{isArray:!1,method:"get",url:t.baseUrl+"square/odbc/:id/test"}}),t.squareProject=e(t.baseUrl+"square/projects/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"square/projects/describe"},clone:{method:"post",url:t.baseUrl+"square/projects/:id/clone",params:{includeAll:"@includeAll"}},addUsers:{isArray:!0,method:"post",url:t.baseUrl+"square/projects/:id/users"},removeUsers:{isArray:!1,method:"delete",url:t.baseUrl+"square/projects/:id/users"},getUsers:{isArray:!1,method:"get",url:t.baseUrl+"square/projects/:id/users"}}),t.squareRecording=e(t.baseUrl+"square/recordings/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"square/recordings/describe"},clone:{method:"post",url:t.baseUrl+"square/recordings/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"square/recordings/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.squareMessage=e(t.baseUrl+"square/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"square/messages/describe"},clone:{method:"post",url:t.baseUrl+"square/messages/:id/clone",params:{includeAll:"@includeAll"}}}),t.team=e(t.baseUrl+"teams/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"teams/describe"},clone:{method:"post",url:t.baseUrl+"teams/:id/clone",params:{includeAll:"@includeAll"}},getQueues:{isArray:!0,method:"get",url:t.baseUrl+"teams/:id/queues"},addQueues:{isArray:!0,method:"post",url:t.baseUrl+"teams/:id/queues"},removeQueues:{isArray:!1,method:"delete",url:t.baseUrl+"teams/:id/queues"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"teams/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"teams/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"teams/:id/users"}}),t.license=e(t.baseUrl+"license/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"license/describe"},clone:{method:"post",url:t.baseUrl+"license/:id/clone",params:{includeAll:"@includeAll"}}}),t.campaign=e(t.baseUrl+"campaigns/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"campaigns/describe"},clone:{method:"post",url:t.baseUrl+"campaigns/:id/clone",params:{includeAll:"@includeAll"}},getHoppers:{isArray:!1,method:"get",url:t.baseUrl+"campaigns/:id/hoppers"},getHopperHistories:{isArray:!1,method:"get",url:t.baseUrl+"campaigns/:id/hopper_histories"},getHopperFinals:{isArray:!1,method:"get",url:t.baseUrl+"campaigns/:id/hopper_finals"},getHopperBlacks:{isArray:!1,method:"get",url:t.baseUrl+"campaigns/:id/hopper_black"},getLists:{isArray:!1,method:"get",url:t.baseUrl+"campaigns/:id/lists"},addLists:{isArray:!0,method:"post",url:t.baseUrl+"campaigns/:id/lists"},removeLists:{isArray:!0,method:"delete",url:t.baseUrl+"campaigns/:id/lists"},getBlackLists:{isArray:!1,method:"get",url:t.baseUrl+"campaigns/:id/blacklists"},addBlackLists:{isArray:!0,method:"post",url:t.baseUrl+"campaigns/:id/blacklists"},removeBlackLists:{isArray:!0,method:"delete",url:t.baseUrl+"campaigns/:id/blacklists"}}),t.migration=e(t.baseUrl+"migrations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"migrations/describe"},clone:{method:"post",url:t.baseUrl+"migrations/:id/clone",params:{includeAll:"@includeAll"}}}),t.attachment=e(t.baseUrl+"attachments/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"attachments/describe"},clone:{method:"post",url:t.baseUrl+"attachments/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"attachments/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.plugin=e(t.baseUrl+"plugins/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"plugins/describe"},clone:{method:"post",url:t.baseUrl+"plugins/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"plugins/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}},upload:{isArray:!1,method:"post",url:t.baseUrl+"plugins/"},delete:{isArray:!1,method:"delete",url:t.baseUrl+"plugins/:id"},webhookGet:{isArray:!1,method:"get",url:t.baseUrl+"plugins/webhook"},webhookPost:{isArray:!1,method:"post",url:t.baseUrl+"plugins/webhook"}}),t.mailTransferReport=e(t.baseUrl+"mail/reports/transfer/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/reports/transfer/describe"},clone:{method:"post",url:t.baseUrl+"mail/reports/transfer/:id/clone",params:{includeAll:"@includeAll"}}}),t.chatTransferReport=e(t.baseUrl+"chat/reports/transfer/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/reports/transfer/describe"},clone:{method:"post",url:t.baseUrl+"chat/reports/transfer/:id/clone",params:{includeAll:"@includeAll"}}}),t.faxTransferReport=e(t.baseUrl+"fax/reports/transfer/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/reports/transfer/describe"},clone:{method:"post",url:t.baseUrl+"fax/reports/transfer/:id/clone",params:{includeAll:"@includeAll"}}}),t.openchannelTransferReport=e(t.baseUrl+"openchannel/reports/transfer/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/reports/transfer/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/reports/transfer/:id/clone",params:{includeAll:"@includeAll"}}}),t.smsTransferReport=e(t.baseUrl+"sms/reports/transfer/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/reports/transfer/describe"},clone:{method:"post",url:t.baseUrl+"sms/reports/transfer/:id/clone",params:{includeAll:"@includeAll"}}}),t.cmList=e(t.baseUrl+"cm/lists/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/lists/describe"},clone:{method:"post",url:t.baseUrl+"cm/lists/:id/clone",params:{includeAll:"@includeAll"}},addDisposition:{isArray:!1,method:"post",url:t.baseUrl+"cm/lists/:id/dispositions"},getDispositions:{isArray:!1,method:"get",url:t.baseUrl+"cm/lists/:id/dispositions"},removeDispositions:{isArray:!1,method:"delete",url:t.baseUrl+"cm/lists/:id/dispositions"},addContacts:{isArray:!1,method:"post",url:t.baseUrl+"cm/lists/:id/contacts"},getContacts:{isArray:!0,method:"get",url:t.baseUrl+"cm/lists/:id/contacts"},getContactsCsv:{isArray:!1,method:"get",url:t.baseUrl+"cm/lists/:id/contacts/csv",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}},addCustomField:{isArray:!1,method:"post",url:t.baseUrl+"cm/lists/:id/fields"},getCustomFields:{isArray:!1,method:"get",url:t.baseUrl+"cm/lists/:id/fields"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"cm/lists/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"cm/lists/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"cm/lists/:id/users"}}),t.voicePrefix=e(t.baseUrl+"voice/prefixes/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/prefixes/describe"},clone:{method:"post",url:t.baseUrl+"voice/prefixes/:id/clone",params:{includeAll:"@includeAll"}},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"voice/prefixes/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"voice/prefixes/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"voice/prefixes/:id/users"}}),t.userProfile=e(t.baseUrl+"userProfiles/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"userProfiles/describe"},clone:{method:"post",url:t.baseUrl+"userProfiles/:id/clone",params:{includeAll:"@includeAll"}},addSections:{isArray:!0,method:"post",url:t.baseUrl+"userProfiles/:id/sections"},removeSections:{isArray:!1,method:"delete",url:t.baseUrl+"userProfiles/:id/sections"},addResources:{isArray:!0,method:"post",url:t.baseUrl+"userProfiles/:id/resources"},removeResources:{isArray:!1,method:"delete",url:t.baseUrl+"userProfiles/:id/resources"},getResources:{isArray:!1,method:"get",url:t.baseUrl+"userProfiles/:id/resources"}}),t.userProfileSection=e(t.baseUrl+"userProfile/sections/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"userProfile/sections/describe"},clone:{method:"post",url:t.baseUrl+"userProfile/sections/:id/clone",params:{includeAll:"@includeAll"}}}),t.userProfileResource=e(t.baseUrl+"userProfile/resources/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"userProfile/resources/describe"},clone:{method:"post",url:t.baseUrl+"userProfile/resources/:id/clone",params:{includeAll:"@includeAll"}}}),t}e.$inject=["$resource"],angular.module("motion").factory("api",e)}(),function(){"use strict";function e(e,t){t.setConfig({position:"top-right",sound:!1,html:!0,theme:"material"}),e.useLoader("$translatePartialLoader",{urlTemplate:"{part}/i18n/{lang}.json"}),e.preferredLanguage("en"),e.useSanitizeValueStrategy(null)}e.$inject=["$translateProvider","toastyConfigProvider"],angular.module("motion").config(e)}(),function(){"use strict";angular.module("motion")}(),function(){"use strict";function e(e,t,n,a){var i=this;i.themes=e.themes,i.direction="ltr";var s=n.get("motion.language");s&&(t.use(s),0<=["ar","fa","he"].indexOf(s)&&a.setting.get({id:1}).$promise.then(function(e){e&&e.rtlSupport&&(i.direction="rtl")}).catch(function(e){e&&toasty.error({title:"Error",msg:e.data?e.data.message||e.message||e:e.message||e})}))}e.$inject=["motionTheming","$translate","$cookies","api"],angular.module("motion").controller("IndexController",e)}(),function(){"use strict";function e(a,i){return function(e){var t=new Date,n=new Date(e);return n.getDate()===t.getDate()&&n.getMonth()===t.getMonth()&&n.getFullYear()===t.getFullYear()?a("date")(n.getTime(),"shortTime"):n.getDate()===t.getDate()-1&&n.getMonth()===t.getMonth()&&n.getFullYear()===t.getFullYear()?i.instant("DASHBOARDS.YESTERDAY")+" "+a("date")(n.getTime(),"shortTime"):a("date")(n.getTime(),"MMM d, y h:mm a")}}function t(e){return{Today:e.instant("DASHBOARDS.TODAY"),Yesterday:e.instant("DASHBOARDS.YESTERDAY"),"This Week":e.instant("DASHBOARDS.THIS_WEEK"),"Last Week":e.instant("DASHBOARDS.LAST_WEEK"),"This Month":e.instant("DASHBOARDS.THIS_MONTH"),"Last Month":e.instant("DASHBOARDS.LAST_MONTH"),"This Year":e.instant("DASHBOARDS.THIS_YEAR"),"Last Year":e.instant("DASHBOARDS.LAST_YEAR"),January:e.instant("DASHBOARDS.JANUARY"),February:e.instant("DASHBOARDS.FEBRUARY"),March:e.instant("DASHBOARDS.MARCH"),April:e.instant("DASHBOARDS.APRIL"),May:e.instant("DASHBOARDS.MAY"),June:e.instant("DASHBOARDS.JUNE"),July:e.instant("DASHBOARDS.JULY"),August:e.instant("DASHBOARDS.AUGUST"),September:e.instant("DASHBOARDS.SEPTEMBER"),October:e.instant("DASHBOARDS.OCTOBER"),November:e.instant("DASHBOARDS.NOVEMBER"),December:e.instant("DASHBOARDS.DECEMBER"),Mon:e.instant("DASHBOARDS.MON"),Tue:e.instant("DASHBOARDS.TUE"),Wed:e.instant("DASHBOARDS.WED"),Thu:e.instant("DASHBOARDS.THU"),Fri:e.instant("DASHBOARDS.FRI"),Sat:e.instant("DASHBOARDS.SAT"),Sun:e.instant("DASHBOARDS.SUN")}}e.$inject=["$filter","$translate"],t.$inject=["$translate"],angular.module("motion").filter("limitObjectFromTo",function(){return function(e,t,n){var a,i={},s=0;for(a in e)if(n<=s&&(i[a]=e[a]),++s===n+t)break;return i}}).filter("formatdate",e).factory("IndexFactory",function(){var e=[{value:"jan"},{value:"feb"},{value:"mar"},{value:"apr"},{value:"may"},{value:"jun"},{value:"jul"},{value:"aug"},{value:"sep"},{value:"oct"},{value:"nov"},{value:"dec"}],t=[{value:"1"},{value:"2"},{value:"3"},{value:"4"},{value:"5"},{value:"6"},{value:"7"},{value:"8"},{value:"9"},{value:"10"},{value:"11"},{value:"12"}],n=[{value:"mon"},{value:"tue"},{value:"wed"},{value:"thu"},{value:"fri"},{value:"sat"},{value:"sun"}],a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];return{getMonthName:function(){return e},getMonthNumber:function(){return t},getDaysOfWeek:function(){return n},getDaysOfMonth:function(){return a}}}).factory("dateFilterLocalizationFactory",t).factory("Sequence",function(){return{enqueue:function(e){this.tail=this.tail?this.tail.finally(e):e()}}})}(),function(){"use strict";function e(e,t,n){var a;n.html5Mode(!0),t.otherwise("/dashboards/general"),angular.injector(["ngCookies"]).invoke(["$cookies",function(e){a=e}]);var i=a.get("motion.layoutStyle")||"verticalNavigation",s={verticalNavigation:{main:"app/core/layouts/vertical-navigation.html",toolbar:"app/toolbar/layouts/vertical-navigation/toolbar.html",navigation:"app/navigation/layouts/vertical-navigation/navigation.html",header:"app/header/layouts/vertical-navigation/header.html",footer:"app/footer/layouts/vertical-navigation/footer.html"},verticalNavigationFullwidthToolbar:{main:"app/core/layouts/vertical-navigation-fullwidth-toolbar.html",toolbar:"app/toolbar/layouts/vertical-navigation-fullwidth-toolbar/toolbar.html",navigation:"app/navigation/layouts/vertical-navigation/navigation.html"},verticalNavigationFullwidthToolbar2:{main:"app/core/layouts/vertical-navigation-fullwidth-toolbar-2.html",toolbar:"app/toolbar/layouts/vertical-navigation-fullwidth-toolbar-2/toolbar.html",navigation:"app/navigation/layouts/vertical-navigation-fullwidth-toolbar-2/navigation.html"},horizontalNavigation:{main:"app/core/layouts/horizontal-navigation.html",toolbar:"app/toolbar/layouts/horizontal-navigation/toolbar.html",navigation:"app/navigation/layouts/horizontal-navigation/navigation.html"},contentOnly:{main:"app/core/layouts/content-only.html",toolbar:"",navigation:""},contentWithToolbar:{main:"app/core/layouts/content-with-toolbar.html",toolbar:"app/toolbar/layouts/content-with-toolbar/toolbar.html",navigation:""}};e.state("app",{abstract:!0,views:{"main@":{templateUrl:s[i].main,controller:"MainController as vm"},"toolbar@app":{templateUrl:s[i].toolbar,controller:"ToolbarController as vm"},"navigation@app":{templateUrl:s[i].navigation,controller:"NavigationController as vm"},"quickPanel@app":{templateUrl:"app/quick-panel/quick-panel.html",controller:"QuickPanelController as vm"},"header@app":{templateUrl:s[i].header,controller:"HeaderController as vm"},"footer@app":{templateUrl:s[i].footer,controller:"FooterController as vm"}},resolve:{license:["apiResolver",function(e){return e.resolve("license@get")}],setting:["apiResolver",function(e){return e.resolve("setting@get",{id:1})}]}})}e.$inject=["$stateProvider","$urlRouterProvider","$locationProvider"],angular.module("motion").config(e)}(),function(){"use strict";function e(e,t,n){var a=e.$on("$stateChangeStart",function(){e.loadingProgress=!0}),i=e.$on("$stateChangeSuccess",function(){t(function(){e.loadingProgress=!1})});e.state=n,e.$on("$destroy",function(){a(),i()})}e.$inject=["$rootScope","$timeout","$state"],angular.module("motion").run(e)}(),function(){"use strict";function e(a,e){var i;function s(){i=io({query:"id="+e.getCurrentUser().id,transports:["websocket","polling"]})}return{connect:s,on:function(e,t){t=t||angular.noop,i||s(),i.on(e,function(){var e=arguments;a.$apply(function(){t.apply(i,e)})})},onWithoutApply:function(e,t){t=t||angular.noop,i||s(),i.on(e,function(){t.apply(i,arguments)})},emit:function(e,t,n){n=n||angular.noop,i||s(),i.emit(e,t,function(){var e=arguments;a.$apply(function(){n.apply(i,e)})})},removeAllListeners:function(e){i||s(),i.removeAllListeners(e)},removeListener:function(e,t){i||s(),i.removeListener(e,t)},disconnect:function(){i||s(),i.disconnect()}}}e.$inject=["$rootScope","Auth"],angular.module("motion").factory("socket",e)}(),function(){"use strict";function e(t,n,e,a,i,s){var o=this;o.progresslogin=!1,o.login=function(){return o.progresslogin=!0,o.message="",s.login(o.form).then(function(){return t.go("app.dashboards.general")}).catch(function(e){o.message=e.message}).finally(function(){o.progresslogin=!1})},o.loginOauth=function(e){o.message="",n.location.href="/api/auth/"+e},o.onInit=function(){{if(t.params.token&&t.params.userId)return s.removeCookies(),o.progresslogin=!0,e.put("motion.token",t.params.token),i.user.get({id:t.params.userId}).$promise.then(function(e){e&&(s.updateCurrentUser(e),t.go("app.dashboards.general"))}).finally(function(){o.progresslogin=!1});s.isLoggedIn()&&t.go("app.dashboards.general")}},o.onInit()}e.$inject=["$state","$window","$cookies","$timeout","api","Auth"],angular.module("app.login").controller("LoginController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="ANALYTICS.EDIT_EXTRACTEDREPORT",g.extractedReport=angular.copy(l),g.extractedReports=r,g.newExtractedReport=!1,g.extractedReport||(g.extractedReport={},g.title="ANALYTICS.NEW_EXTRACTEDREPORT",g.newExtractedReport=!0),g.addNewExtractedReport=function(){g.errors=[],d.analyticExtractedReport.save(g.extractedReport).$promise.then(function(e){g.extractedReports.unshift(e.toJSON()),o.success({title:"ExtractedReport properly created",msg:g.extractedReport.name?g.extractedReport.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.analyticExtractedReport.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticExtractedReport.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveExtractedReport=function(){g.errors=[],d.analyticExtractedReport.update({id:g.extractedReport.id},g.extractedReport).$promise.then(function(e){var t=_.find(g.extractedReports,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ExtractedReport properly saved!",msg:g.extractedReport.name?g.extractedReport.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.analyticExtractedReport.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticExtractedReport.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteExtractedReport=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The extractedReport will be deleted.").ariaLabel("Delete ExtractedReport").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.analyticExtractedReport.delete({id:g.extractedReport.id}).$promise.then(function(){_.remove(g.extractedReports,{id:g.extractedReport.id}),o.success({title:"ExtractedReport properly deleted!",msg:(g.extractedReport.name||"extractedReport")+" has been deleted!"}),v(g.extractedReport)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.analyticExtractedReport.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticExtractedReport.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","extractedReports","extractedReport","api","Auth","license","setting","crudPermissions"],angular.module("app.analytics").controller("CreateOrEditExtractedReportDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.extractedReports=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="extractedReports",b.listOrder="",b.listOrderAsc=null,b.selectedExtractedReports=[],b.query={fields:"createdAt,updatedAt,id,name,basename,savename,type,startDate,endDate,status,output,reportId,reportType",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditExtractedReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/extractedReports/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{extractedReport:e,extractedReports:b.extractedReports.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.downloadfile2=function(s,e){return m.analyticExtractedReport.download({id:s.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=s.savename;var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticExtractedReport.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("extractedReport")+"?").htmlContent("<b>"+(e.name||"extractedReport")+"</b> will be deleted.").ariaLabel("delete extractedReport").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getExtractedReports=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.analyticExtractedReport.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ExtractedReports",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditExtractedReport=function(e,t){i.show({controller:"CreateOrEditExtractedReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/extractedReports/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{extractedReport:t,extractedReports:b.extractedReports.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteExtractedReport=S,b.exportSelectedExtractedReports=function(){var e=angular.copy(b.selectedExtractedReports);return b.selectedExtractedReports=[],e},b.deleteSelectedExtractedReports=function(e){var t=i.confirm().title("Are you sure want to delete the selected extractedReports?").htmlContent("<b>"+b.selectedExtractedReports.length+" selected</b> will be deleted.").ariaLabel("delete ExtractedReports").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedExtractedReports.forEach(function(e){S(e)}),b.selectedExtractedReports=[]})},b.deselectExtractedReports=function(){b.selectedExtractedReports=[]},b.selectAllExtractedReports=function(){b.selectedExtractedReports=b.extractedReports.rows};var A=!0,E=1;function y(e){b.extractedReports=e||{count:0,rows:[]}}function S(e){m.analyticExtractedReport.delete({id:e.id}).$promise.then(function(){_.remove(b.extractedReports.rows,{id:e.id}),b.extractedReports.count-=1,b.extractedReports.rows.length||b.getExtractedReports(),p.success({title:_.startCase("ExtractedReport")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEanalyticExtractedReport"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEanalyticExtractedReport",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getExtractedReports())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","extractedReports","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.analytics").controller("ExtractedReportsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="ANALYTICS.EDIT_METRIC",g.metric=angular.copy(l),g.metrics=r,g.newMetric=!1,g.metric||(g.metric={table:"report_agent"},g.title="ANALYTICS.NEW_METRIC",g.newMetric=!0),g.addNewMetric=function(){g.errors=[],d.analyticMetric.save(g.metric).$promise.then(function(e){g.metrics.unshift(e.toJSON()),o.success({title:"Metric properly created",msg:g.metric.name?g.metric.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.analyticMetric.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticMetric.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMetric=function(){g.errors=[],d.analyticMetric.update({id:g.metric.id},g.metric).$promise.then(function(e){var t=_.find(g.metrics,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Metric properly saved!",msg:g.metric.name?g.metric.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.analyticMetric.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticMetric.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMetric=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The metric will be deleted.").ariaLabel("Delete Metric").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.analyticMetric.delete({id:g.metric.id}).$promise.then(function(){_.remove(g.metrics,{id:g.metric.id}),o.success({title:"Metric properly deleted!",msg:(g.metric.name||"metric")+" has been deleted!"}),v(g.metric)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.analyticMetric.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticMetric.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","metrics","metric","api","Auth","license","setting","crudPermissions"],angular.module("app.analytics").controller("CreateOrEditMetricDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.metrics=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="metrics",b.listOrder="",b.listOrderAsc=null,b.selectedMetrics=[],b.query={fields:"createdAt,updatedAt,id,name,table,metric,description",sort:"-updatedAt",limit:10,page:1},b.arraytable=_.keyBy([{option:"Agent Report",value:"'report_agent'"},{option:"Call Report",value:"'report_call'"},{option:"Contacts",value:"'cm_contacts'"},{option:"CSquare Report",value:"'report_square'"},{option:"CSquare Details Report",value:"'report_square_details'"},{option:"Dialer Hopper Processing",value:"'cm_hopper'"},{option:"Dialer Hopper Logs",value:"'cm_hopper_history'"},{option:"Dialer Hopper Final",value:"'cm_hopper_final'"},{option:"Integration Report",value:"'report_integration'"},{option:"Jscripty Sessions",value:"'report_jscripty_sessions'"},{option:"Jscripty Questions",value:"'report_jscripty_questions'"},{option:"Jscripty Answers",value:"'report_jscripty_answers'"},{option:"Lists",value:"'cm_lists'"},{option:"Member Report",value:"'report_member'"},{option:"Queue Report",value:"'report_queue'"},{option:"Users",value:"'users'"},{option:"Voice Recordings",value:"'voice_recordings'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editdialog=function(e,t){i.show({controller:"CreateOrEditMetricDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/metrics/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{metric:e,metrics:b.metrics.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("metric")+"?").htmlContent("<b>"+(e.name||"metric")+"</b> will be deleted.").ariaLabel("delete metric").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getMetrics=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.analyticMetric.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Metrics",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditMetric=function(e,t){i.show({controller:"CreateOrEditMetricDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/metrics/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{metric:t,metrics:b.metrics.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteMetric=S,b.exportSelectedMetrics=function(){var e=angular.copy(b.selectedMetrics);return b.selectedMetrics=[],e},b.deleteSelectedMetrics=function(e){var t=i.confirm().title("Are you sure want to delete the selected metrics?").htmlContent("<b>"+b.selectedMetrics.length+" selected</b> will be deleted.").ariaLabel("delete Metrics").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedMetrics.forEach(function(e){S(e)}),b.selectedMetrics=[]})},b.deselectMetrics=function(){b.selectedMetrics=[]},b.selectAllMetrics=function(){b.selectedMetrics=b.metrics.rows};var A=!0,E=1;function y(e){b.metrics=e||{count:0,rows:[]}}function S(e){m.analyticMetric.delete({id:e.id}).$promise.then(function(){_.remove(b.metrics.rows,{id:e.id}),b.metrics.count-=1,b.metrics.rows.length||b.getMetrics(),p.success({title:_.startCase("Metric")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEanalyticMetric"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEanalyticMetric",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getMetrics())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","metrics","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.analytics").controller("MetricsController",e)}(),function(){"use strict";function e(e,t,a,n,i,s,o){var r=this;function l(){t.hide()}r.errors=[],r.report=angular.copy(n),r.report.name+="-copy",r.treeCustomData=o,r.treeCustomConfig={core:{multiple:!1,animation:!0,error:function(e){console.error("treeCtrl: error from js tree - "+angular.toJson(e))},check_callback:!0,worker:!0},version:1,plugins:["wholerow"]},r.treeCustomEvents={select_node:function(e,t){r.currentNode=t.node}},r.copyReport=function(){var n;r.errors=[],i.analyticCustomReport.save({name:r.report.name,description:r.report.description,table:r.report.table,conditions:r.report.conditions,joins:r.report.joins,parent:r.currentNode.id}).$promise.then(function(e){n=e,a.success({title:"Report properly copied!",msg:r.report.name?r.report.name+" has been copied!":""});var t={fields:"field,alias,function,format,groupBy,orderBy,custom,MetricId",nolimit:!0};return t["analyticCustomReport"===s?"CustomReportId":"DefaultReportId"]=r.report.id,i.analyticFieldReport.get(t).$promise}).then(function(e){var e=_.map(e.rows,function(e){return _.extend({},e,{CustomReportId:n.id})});return i.analyticFieldReport.bulkCreate(e).$promise}).then(function(){a.success({title:"Fields copied!",msg:"Fields has been copied!"}),l()}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:COPYREPORT",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$location","$mdDialog","toasty","report","api","apiName","treeCustomData"],angular.module("app.analytics").controller("CopyReportDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;function m(){t.hide()}c.errors=[],c.joinTables=[],c.title="ANALYTICS.EDIT_REPORT",c.crudPermissions=d,c.report=angular.copy(i),c.reports=a,c.newReport=!1,c.tables=l.getMap(),c.joinTypes=[{key:"join",value:"Join"},{key:"left_join",value:"Left Join"},{key:"right_join",value:"Right Join"},{key:"cross_join",value:"Cross Join"}],c.report||(c.report={name:"",table:"report_agent",description:"",parent:r.id},c.title="ANALYTICS.NEW_REPORT",c.newReport=!0),c.addNewReport=function(){c.errors=[],c.report.joins=_.map(c.joinTables||[],function(e){return{parentKey:e.parentKey,foreignTable:e.name,foreignKey:e.foreignKey,type:e.type.toLowerCase()}}),c.report.joins=JSON.stringify(c.report.joins),s[o].save(c.report).$promise.then(function(e){c.reports.unshift(e),n.success({title:"Report properly created",msg:c.report.name?c.report.name+" has been created!":""}),m()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){c.errors=e.data.errors||[{message:e.toString(),type:"api.analyticReport.save"}];for(var t=0;t<e.data.errors.length;t++)n.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticReport.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.saveReport=function(){c.errors=[],s[o].update({id:c.report.id},c.report).$promise.then(function(e){var t=_.find(c.reports,{id:e.id});t&&_.merge(t,e),n.success({title:"Report properly saved!",msg:c.report.name?c.report.name+" has been saved!":""}),m()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){c.errors=e.data.errors||[{message:e.toString(),type:"api.analyticReport.update"}];for(var t=0;t<e.data.errors.length;t++)n.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticReport.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.deleteReport=function(){c.errors=[];var e=t.confirm().title("Are you sure?").content("The report will be deleted.").ariaLabel("Delete Report").ok("Delete").cancel("Cancel").targetEvent(event);t.show(e).then(function(){s[o].delete({id:c.report.id}).$promise.then(function(){_.remove(c.reports,{id:c.report.id}),n.success({title:"Report properly deleted!",msg:c.report.name?c.report.name+" has been deleted!":""}),m()}).catch(function(e){c.errors=e.data.errors||[{message:e.toString(),type:"api.analyticReport.delete"}]})},function(){})},c.closeDialog=m,c.selectedTableChange=function(e){e&&(delete c.selectedItem,c.joinTables.push(e))},c.removeJoin=function(e){c.joinTables.splice(e,1)},c.getFields=function(t,n,e){var a=_.find(c.tables,{name:e});a&&a.api&&s[a.api].describe().$promise.then(function(e){t[n]=_.difference(_.keys(e),["$promise","$resolved"])}).catch(function(e){console.error(e)})}}e.$inject=["$location","$mdDialog","toasty","reports","report","api","apiName","currentNode","describeTable","crudPermissions"],angular.module("app.analytics").controller("CreateOrEditReportDialogController",e)}(),function(){"use strict";function e(i,s,o,e){var r=this;r.report={},r.conditions=e.getConditions,r.init=function(e,t){r.report=e,r.report.condition=angular.fromJson(e.conditions)||{group:{operator:"AND",rules:[]}},r.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1};for(var n=0;n<r.report.condition.group.rules.length;n++)if(r.report.condition.group.rules[n].field){var a=r.report.condition.group.rules[n].field.split(".");1===a.length&&(r.report.condition.group.rules[n].field=r.report.table+"."+r.report.condition.group.rules[n].field)}s.getColumns(r.report.table).then(function(e){r.columns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt"])}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DESCRIBE",msg:e.data?JSON.stringify(e.data):e.toString()})})},r.addCondition=function(e){e.unshift({condition:"=",field:"",value:""})},r.addGroup=function(e){e.push({group:{operator:"AND",rules:[]}})},r.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the item?").htmlContent("The item will be deleted.").ariaLabel("delete item").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){e.splice(t,1)},function(){console.log("CANCEL")})},r.isValueByCondition=function(e){return!_.includes(["IS NULL","IS NOT NULL","IS EMPTY","IS NOT EMPTY"],e)}}e.$inject=["$mdDialog","describeTable","toasty","sqlUtil"],angular.module("app.analytics").controller("ReportConditionsController",e)}(),function(){"use strict";function e(t){var a={cm_contacts:"cmContact",cm_hopper:"cmHopper",cm_hopper_final:"cmHopperFinal",cm_hopper_history:"cmHopperHistory",cm_lists:"cmList",chat_websites:"chatWebsite",chat_queues:"chatQueue",chat_interactions:"chatInteraction",chat_messages:"chatMessage",chat_offline_messages:"chatOfflineMessage",report_chat_queue:"chatQueueReport",report_chat_transfer:"chatTransferReport",mail_accounts:"mailAccount",mail_queues:"mailQueue",mail_interactions:"mailInteraction",mail_messages:"mailMessage",report_mail_queue:"mailQueueReport",report_mail_transfer:"mailTransferReport",openchannel_accounts:"openchannelAccount",openchannel_queues:"openchannelQueue",openchannel_interactions:"openchannelInteraction",openchannel_messages:"openchannelMessage",report_openchannel_queue:"openchannelQueueReport",report_openchannel_transfer:"openchannelTransferReport",sms_accounts:"smsAccount",sms_queues:"smsQueue",sms_interactions:"smsInteraction",sms_messages:"smsMessage",report_sms_queue:"smsQueueReport",report_sms_transfer:"smsTransferReport",fax_accounts:"faxAccount",fax_queues:"faxQueue",fax_interactions:"faxInteraction",fax_messages:"faxMessage",report_fax_transfer:"faxTransferReport",report_fax_queue:"faxQueueReport",report_call:"voiceCallReport",report_agent:"voiceAgentReport",report_square:"squareReport",report_member:"memberReport",report_queue:"voiceQueueReport",report_square_details:"squareReportDetail",report_dial:"voiceDialReport",report_jscripty_sessions:"jscriptySessionReport",report_jscripty_questions:"jscriptyQuestionReport",report_jscripty_answers:"jscriptyAnswerReport",users:"user",voice_recordings:"voiceRecording",cdr:"cdr"};return{getMap:function(){var n=[];return _.forIn(a,function(e,t){n.push({name:t,api:e})}),n},getColumns:function(e){return t[a[e]].describe().$promise}}}e.$inject=["api"],angular.module("app.analytics").factory("describeTable",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;(u.errors=[],u.title="Edit Report Field",u.report=i,u.reportField=angular.copy(o),u.reportFields=s,u.metrics=r,u.columns=l,u.sqlUtil=d,u.newReportField=!1,u.crudPermissions=m,u.reportField)?(u.reportField.type=u.reportField.custom?"custom":u.reportField.MetricId?"metric":"column",u.reportField.field&&!u.reportField.custom&&_.isNil(u.reportField.MetricId)&&1===u.reportField.field.split(".").length&&(u.reportField.field=u.report.table+"."+u.reportField.field)):(u.reportField={type:"column",function:null,format:null,groupBy:!1,orderBy:null},u.title="New Report Field",u.newReportField=!0);function p(){n.hide()}u.addNewReportField=function(){u.errors=[],u.reportField.custom="custom"===u.reportField.type,u.reportField.MetricId="metric"===u.reportField.type?u.reportField.MetricId:null,u.reportField.CustomReportId=u.report.id,c.analyticFieldReport.save(u.reportField).$promise.then(function(e){u.reportFields.push(e),a.success({title:"Report field properly created",msg:u.reportField.field?u.reportField.field+" has been created!":u.reportField.type+" has been created!"}),p()}).catch(function(e){u.errors=e.data.errors||[{message:e.toString(),type:"api.analyticFieldReport.save"}]})},u.saveReportField=function(){u.errors=[],u.reportField.custom="custom"===u.reportField.type,u.reportField.MetricId="metric"===u.reportField.type?u.reportField.MetricId:null,c.analyticFieldReport.update({id:u.reportField.id},u.reportField).$promise.then(function(e){var t=_.find(u.reportFields,{id:e.id});t&&_.merge(t,e),a.success({title:"Report Field properly saved!",msg:u.reportField.field?u.reportField.field+" has been saved!":""}),p()}).catch(function(e){u.errors=e.data.errors||[{message:e.toString(),type:"api.analyticFieldReport.update"}]})},u.deleteReportField=function(e){u.errors=[];var t=n.confirm().title("Are you sure?").content("The field will be deleted.").ariaLabel("Delete Report").ok("Delete").cancel("Cancel").targetEvent(e);n.show(t).then(function(){c.analyticFieldReport.delete({id:u.reportField.id}).$promise.then(function(){_.remove(u.reportFields,{id:u.reportField.id}),a.success({title:"Report Field properly deleted!",msg:u.reportField.field?u.reportField.field+" has been deleted!":""}),p()}).catch(function(e){u.errors=e.data.errors||[{message:e.toString(),type:"api.analyticReportField.delete"}]})},function(){})},u.closeDialog=p}e.$inject=["$scope","$location","$mdDialog","toasty","report","reportFields","reportField","metrics","columns","sqlUtil","api","crudPermissions"],angular.module("app.analytics").controller("CreateOrEditReportFieldDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.report={},c.reportFields={count:0,rows:[]},c.functions=_.keyBy(l.getFunctions,"value"),c.formats=_.keyBy(l.getFormats,"value"),c.groupBy=_.keyBy(l.getGroupBy,"value"),c.orderBy=_.keyBy(l.getOrderBy,"value"),c.selectedReportFields=[],c.query={fields:"createdAt,updatedAt,id,field,alias,function,format,groupBy,orderBy,custom,MetricId",nolimit:!0},c.sortableTable={animation:100,onSort:function(e){o.analyticFieldReport.addFields({id:c.report.id},e.models).$promise.then(function(e){c.reportFields.rows=e}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ADDFIELDS"})})}},c.init=function(e,t){c.report=e,c.query.CustomReportId=c.report.id,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.sortableTable.disabled=!c.crudPermissions.canEdit,r.getColumns(c.report.table).then(function(e){return c.columns=_.difference(_.keys(e),["$promise","$resolved"]),o.analyticMetric.get({fields:"id,name,metric,table",nolimit:!0}).$promise}).then(function(e){c.metrics=e.rows}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DESCRIBE",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.getReportFields()},c.deleteConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>"+e.field+"</b> will be deleted.").ariaLabel("delete field").targetEvent(t).ok("OK").cancel("CANCEL");a.show(n).then(function(){p(e)},function(){console.log("CANCEL")})},c.success=u,c.getReportFields=function(){c.promise=o.analyticFieldReport.get(c.query,u).$promise},c.createOrEditReportField=function(e,t){a.show({controller:"CreateOrEditReportFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/reports/edit/field/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{report:c.report,reportField:t,reportFields:c.reportFields.rows,metrics:c.metrics,columns:c.columns,setting:null,crudPermissions:c.crudPermissions}})},c.deleteReportField=p,c.deleteSelectedReportFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+c.selectedReportFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){c.selectedReportFields.forEach(function(e){p(e)}),c.selectedReportFields=[]})},c.getMetricName=function(e){var t=_.find(c.metrics,{id:e});return t?t.name:d.instant("ANALYTICS.NO_METRIC_FOUND")},c.getMetricValue=function(e){var t=_.find(c.metrics,{id:e});return t?t.metric:d.instant("ANALYTICS.NO_METRIC_FOUND")};var m=!0;function u(e){c.reportFields=e||{count:0,rows:[]}}function p(e){o.analyticFieldReport.delete({id:e.id}).$promise.then(function(){c.selectedReportFields=[],_.remove(c.reportFields.rows,{id:e.id}),c.reportFields.count-=1,c.reportFields.rows.length||c.getReportFields(),s.success({title:"Field deleted!",msg:e.field?e.field+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}t.$watch("vm_rf.query.filter",function(e,t){m?n(function(){m=!1}):c.getReportFields()})}e.$inject=["$cookies","$scope","$timeout","$mdDialog","$document","toasty","api","describeTable","sqlUtil","$translate"],angular.module("app.analytics").controller("ReportFieldsController",e)}(),function(){"use strict";angular.module("app.analytics").factory("sqlUtil",function(){return{getFunctions:[{value:"SUM",option:function(e){return"SUM ("+e+")"}},{value:"COUNT",option:function(e){return"COUNT ("+e+")"}},{value:"COUNT DISTINCT",option:function(e){return"COUNT (DISTINCT "+e+")"}},{value:"MAX",option:function(e){return"MAX ("+e+")"}},{value:"MIN",option:function(e){return"MIN ("+e+")"}},{value:"AVG",option:function(e){return"AVG ("+e+")"}},{value:"GROUP_CONCAT",option:function(e){return"GROUP_CONCAT ("+e+")"}},{value:"GROUP_CONCAT ASC",option:function(e){return"GROUP_CONCAT ("+e+" ORDER BY "+e+" ASC)"}},{value:"GROUP_CONCAT DESC",option:function(e){return"GROUP_CONCAT ("+e+" ORDER BY "+e+" DESC)"}}],getFormats:[{value:"SEC_TO_TIME",option:function(e){return"SEC_TO_TIME ("+e+")"}},{value:"DATE",option:function(e){return"DATE ("+e+")"}},{value:"HOUR",option:function(e){return"HOUR ("+e+")"}},{value:"ROUND",option:function(e){return"ROUND ("+e+")"}},{value:"UNIX_TIMESTAMP",option:function(e){return"UNIX_TIMESTAMP ("+e+")"}}],getGroupBy:[{value:!1,option:function(){return"No"}},{value:!0,option:function(e){return"GROUP BY "+e}}],getOrderBy:[{value:"ASC",option:function(e){return"ORDER BY "+e+" ASC"}},{value:"DESC",option:function(e){return"ORDER BY "+e+" DESC"}}],getConditions:["=","!=","<","<=",">",">=","LIKE","NOT LIKE","IS NULL","IS NOT NULL","IS EMPTY","IS NOT EMPTY"]}})}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;function r(e){return _.isArray(e)}o.report=a||{},o.userProfileSection=s&&1==s.count?s.rows[0]:null,o.crudPermissions=i.parseCrudPermissions(o.userProfileSection?o.userProfileSection.crudPermissions:null),o.selectedTab=e.params.tab||0,o.gotoReports=function(){e.go("app.analytics.reports")},o.saveReport=function(){o.report.conditions=angular.toJson(o.report.condition),n.analyticCustomReport.update({id:o.report.id},_.omit(o.report,"joins")).$promise.then(function(){t.success({title:"Report updated!",msg:o.report.name?o.report.name+" has been updated!":""})}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETreport",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.previewReport=function(){o.columns=[],o.rows=[],o.error=!1,n.analyticFieldReport.get({fields:"field,alias",nolimit:!0,CustomReportId:o.report.id}).$promise.then(function(e){return o.columns=e?e.rows:[],n.analyticCustomReport.preview({id:o.report.id}).$promise}).then(function(e){o.rows=e}).catch(function(e){console.log(e),o.error={title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:analyticFieldReport",msg:e.data?e.data.message:e.toString(),sql:e.data&&e.data.parent?e.data.parent.sql:"NO QUERY"},t.error(o.error)})},o.queryReport=function(){return o.queryResult="Loading...",n.analyticCustomReport.query({id:o.report.id}).$promise.then(function(e){o.queryResult=e.sql}).catch(function(e){o.queryResult="",console.log(e),o.error={title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:analyticFieldReport",msg:e.data?e.data.message:e.toString(),sql:e.data&&e.data.parent?e.data.parent.sql:"NO QUERY"},t.error(o.error)})},o.mapArray=function(e,t){if(r(e))return _.map(e,t).join(",");return""},o.isArray=r,o.valueReplacer=function(e,t){moment(t,"YYYY-MM-DDTHH:mm:ssZ",!0).isValid()&&(t=moment(t,"").format("YYYY-MM-DD HH:mm:ss"));return t}}e.$inject=["$state","toasty","api","report","Auth","userProfileSection"],angular.module("app.analytics").controller("ReportController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;o.errors=[],o.report=angular.copy(a),o.valueReplacer=function(e,t){moment(t,"YYYY-MM-DDTHH:mm:ssZ",!0).isValid()&&(t=moment(t,"").format("YYYY-MM-DD HH:mm:ss"));return t},o.closeDialog=function(){t.hide()},function(){o.columns=[],o.rows=[],o.error=!1;var e={fields:"field,alias",nolimit:!0};e["analyticCustomReport"===s?"CustomReportId":"DefaultReportId"]=o.report.id,o.promise=i.analyticFieldReport.get(e).$promise.then(function(e){return o.columns=e?e.rows:[],i[s].preview({id:o.report.id}).$promise}).then(function(e){o.rows=e}).catch(function(e){console.log(e),o.error={title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:analyticFieldReport",msg:e.data?e.data.message:e.toString(),sql:e.data&&e.data.parent?e.data.parent.sql:"NO QUERY"},n.error(o.error)})}()}e.$inject=["$location","$mdDialog","toasty","report","api","apiName"],angular.module("app.analytics").controller("PreviewReportDialogController",e)}(),function(){"use strict";function e(e,n,a,i,s,o,t,r,l,d,c,m,u){var p=this;p.currentUser=u.getCurrentUser(),p.reports={count:0,rows:[]},p.userProfile=r,p.userProfileSection=l&&1==l.count?l.rows[0]:null,p.crudPermissions=u.parseCrudPermissions(p.userProfileSection?p.userProfileSection.crudPermissions:null),p.selectedReports=[],p.query={fields:"createdAt,updatedAt,id,name,description,table,parent,conditions,joins",limit:10,page:1,sort:"-updatedAt"},p.apiName=null,p.currentPath="",p.customTree=!0,p.editstate=function(e,t){s.go("app.analytics.reports.edit",{id:e.id,crudPermissions:p.crudPermissions})},p.copydialog=function(e,t){i.show({controller:"CopyReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/reports/copy/dialog.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{report:e,apiName:p.apiName,treeCustomData:p.treeCustomInstance.jstree(!0).get_json("#")}}).finally(function(){})},p.previewdialog=function(e,t){i.show({controller:"PreviewReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/reports/preview/dialog.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{report:e,apiName:p.apiName}})},p.rundialog=function(e,t){i.show({controller:"RunReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/reports/run/dialog.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{report:e,apiName:p.apiName,currentPath:p.currentPath}})},p.downloadfile=function(a,e){var i;d.analyticMetric.get({fields:"id,name,metric,table",nolimit:!0}).$promise.then(function(e){i=_.keyBy(e.rows,"id");var t={fields:"field,alias,function,format,groupBy,orderBy,custom,MetricId",nolimit:!0};return t["analyticCustomReport"===p.apiName?"CustomReportId":"DefaultReportId"]=a.id,d.analyticFieldReport.get(t).$promise}).then(function(e){for(var t=0;t<e.rows.length;t+=1)e.rows[t].MetricId&&(e.rows[t].field=i[e.rows[t].MetricId].metric,e.rows[t].custom=!0),delete e.rows[t].MetricId;var n=o.document.createElement("a");n.href="data:text/json;charset=utf-8,"+o.encodeURIComponent(angular.toJson({name:a.name,description:a.description,table:a.table,conditions:a.conditions,joins:a.joins,fields:e.rows})),n.download=a.name+".json",n.target="_self",n.click(),m.success({title:"Report downloaded!",msg:a.name?a.name+" has been downloaded!":""})}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DOWNLOADJSON",msg:e.data?JSON.stringify(e.data):e.toString()})})},p.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the report?").htmlContent("<b>"+e.name+"</b> will be deleted.").ariaLabel("delete report").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){b(e)},function(){console.log("CANCEL")})},p.success=h,p.getReports=f,p.createOrEditReport=function(e,t){i.show({controller:"CreateOrEditReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/reports/create/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{report:t,reports:p.reports.rows,apiName:p.apiName,currentNode:p.currentNode,setting:null,crudPermissions:p.crudPermissions}})},p.importReport=function(e,t,n){if("application/json"===e.file.type){var a=new FileReader;a.onload=function(e){console.log(e.target.result);try{var n=atob(e.target.result.split(",")[1]);n=angular.fromJson(n),d.analyticCustomReport.save({name:n.name,description:n.description,table:n.table,conditions:n.conditions,joins:n.joins,parent:p.currentNode.id}).$promise.then(function(t){p.reports.rows.unshift(t),m.success({title:"Report saved!",msg:t.name?t.name+" has been saved!":""});var e=_.map(n.fields,function(e){return _.extend({},e,{CustomReportId:t.id})});return d.analyticFieldReport.bulkCreate(e).$promise}).then(function(e){m.success({title:"Fields saved!",msg:"Fields has been saved!"})}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETanalyticReport",msg:e.data?JSON.stringify(e.data):e.toString()})})}catch(e){console.error(e),m.error({title:"Decode File Error",msg:e.toString()})}},a.readAsDataURL(e.file)}else m.error({title:"Format Error",msg:"Please use only json files"})},p.deleteReport=b,p.exportSelectedReports=function(){var e=angular.copy(p.selectedReports);return p.selectedReports=[],e},p.deleteSelectedReports=function(e){var t=i.confirm().title("Are you sure want to delete the selected reports?").htmlContent("<b>"+p.selectedReports.length+" selected</b> will be deleted.").ariaLabel("delete Reports").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){p.selectedReports.forEach(function(e){b(e)}),p.selectedReports=[]})},p.deselectReports=function(){p.selectedReports=[]},p.selectAllReports=function(){p.selectedReports=p.reports.rows},p.treeDefaultData=c.rows[0]?angular.fromJson(c.rows[0].tree):[],p.treeCustomData=c.rows[1]?angular.fromJson(c.rows[1].tree):[],p.treeDefaultConfig=S(!1),p.treeCustomConfig=S(!0),p.treeDefaultEvents=T(!1),p.treeCustomEvents=T(!0);var g=!0,v=1;function h(e){p.reports=e||{count:0,rows:[]}}function f(){if(p.query.offset=(p.query.page-1)*p.query.limit,p.apiName)if("admin"===p.currentUser.role||p.userProfileSection.autoAssociation)p.promise=d[p.apiName].get(p.query,h).$promise;else{var a=[];p.promise=d[p.apiName].get(p.query).$promise.then(function(e){return 0<(a=e&&e.rows?e.rows:[]).length?d.userProfileResource.get({sectionId:p.userProfileSection.id,type:"analyticDefaultReport"===p.apiName?"DefaultReports":"CustomReports"}).$promise.then(function(e){var t=e&&e.rows?e.rows:[];if(0<t.length){var n=[];return a.forEach(function(e){_.find(t,["resourceId",e.id])&&n.push(e)}),h({count:n.length,rows:n})}return h(null)}):h(null)})}}function b(e){p.apiName&&d[p.apiName].delete({id:e.id}).$promise.then(function(){_.remove(p.reports.rows,{id:e.id}),p.reports.count-=1,p.reports.rows.length||p.getReports(),m.success({title:"Report deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.analyticreport.delete"}];for(var t=0;t<e.data.errors.length;t++)m.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticreport.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}function A(e,t){p.treeDefaultInstance.jstree(!0).deselect_all(),p.treeDefaultInstance.jstree(!0).close_all(),p.currentNode=t.node,p.currentNode.custom=!0,p.currentPath=p.treeCustomInstance.jstree(!0).get_path(p.currentNode).join("/ "),p.apiName="analyticCustomReport",p.query.parent=t.node.id,f()}function E(e,t){p.treeCustomInstance.jstree(!0).deselect_all(),p.treeCustomInstance.jstree(!0).close_all(),p.currentNode=t.node,p.currentNode.custom=!1,p.currentPath=p.treeDefaultInstance.jstree(!0).get_path(p.currentNode).join("/ "),p.apiName="analyticDefaultReport",p.query.parent=t.node.id,f()}function y(e,t){var n=angular.toJson(p.treeCustomInstance.jstree(!0).get_json("#"));d.analyticTreeReport.update({id:2,tree:n}).$promise.then(function(){c.rows[1]&&(c.rows[1].tree=n),m.success({title:"Node Updated",msg:t.node.text?t.node.text+" has been updated!":"Node has been updated!"})}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEanalyticTreeReport",msg:e.data?JSON.stringify(e.data):e.toString()})})}function S(e){return{core:{multiple:!1,animation:!0,error:function(e){console.error("treeCtrl: error from js tree - "+angular.toJson(e))},check_callback:!0,worker:!0},version:1,plugins:e?["contextmenu","dnd","search","state","wholerow"]:["search","state","wholerow"],contextmenu:{items:function(n){var e={};return p.crudPermissions.canEdit&&_.assign(e,{create:{label:t.instant("ANALYTICS.CREATE"),action:function(){n=p.treeCustomInstance.jstree(!0).create_node(n),p.treeCustomInstance.jstree(!0).edit(n)}},rename:{_disabled:"#"===n.parent,label:t.instant("ANALYTICS.RENAME"),action:function(){p.treeCustomInstance.jstree(!0).edit(n)}}}),p.crudPermissions.canDelete&&_.assign(e,{remove:{_disabled:"#"===n.parent,label:t.instant("ANALYTICS.REMOVE"),action:function(){var e=i.confirm().title("Are you sure want to delete the node?").htmlContent("<b>"+(n.text?n.text:"Node")+"</b> and its subnode will be deleted.").ariaLabel("delete node").ok("OK").cancel("CANCEL");i.show(e).then(function(){var e,t=p.treeCustomInstance.jstree(!0).get_parent(n);t=p.treeCustomInstance.jstree(!0).get_node(t),p.treeCustomInstance.jstree(!0).delete_node(n),e=[n.id].concat(n.children_d||[]),d.analyticCustomReport.get({parent:e.join(","),fields:"id,name"}).$promise.then(function(e){e&&e.rows&&e.rows.forEach(function(e){b(e)})}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEreportsByParents",msg:e.data?JSON.stringify(e.data):e.toString()})}),p.treeCustomInstance.jstree(!0).select_node(t)})}}}),e}}}}function T(e){return e?{create_node:y,rename_node:y,move_node:y,delete_node:y,select_node:A}:{select_node:E}}e.$watch("vm.query.filter",function(e,t){g?n(function(){g=!1}):(t||(v=p.query.page),e!==t&&(p.query.page=1),e||(p.query.page=v),p.getReports())}),e.$watch("vm.search",function(e,t){p.treeDefaultInstance&&p.treeDefaultInstance.jstree(!0).search(e),p.treeCustomInstance&&p.treeCustomInstance.jstree(!0).search(e)})}e.$inject=["$scope","$timeout","$document","$mdDialog","$state","$window","$translate","userProfile","userProfileSection","api","treeReports","toasty","Auth"],angular.module("app.analytics").controller("ReportsController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r){var l=this;function d(){l.export={id:l.report.id,name:l.report.name,startDate:new Date(moment().startOf("day")),endDate:new Date(moment().endOf("day")),output:"xlsx",fullPath:r?r+"/"+l.report.name:l.report.name}}function c(){n.hide()}l.errors=[],l.report=angular.copy(t),l.export={},l.runReport=function(t){l.errors=[],l.exportDate=_.assign({},l.export,{startDate:moment(l.export.startDate).format("YYYY-MM-DD HH:mm:ss"),endDate:moment(l.export.endDate).format("YYYY-MM-DD HH:mm:ss")}),i[s].run(l.exportDate).$promise.then(function(e){"web"===l.export.output?n.show({controller:"WebReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/reports/run/web/dialog.html",parent:angular.element(o.body),targetEvent:t,skipHide:!0,locals:{apiName:s,exportDate:l.exportDate,results:e},resolve:{columns:["apiResolver",function(e){var t={fields:"field,alias",nolimit:!0};return t["analyticCustomReport"===s?"CustomReportId":"DefaultReportId"]=l.report.id,e.resolve("analyticFieldReport@get",t)}]}}):(a.success({title:"Report properly run!",msg:l.report.name?l.report.name+" has been run!":""}),c())}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DESCRIBE",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},l.closeDialog=c,(l.refreshDate=d)()}e.$inject=["$location","$mdDialog","toasty","report","api","apiName","$document","currentPath"],angular.module("app.analytics").controller("RunReportDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o){var r=this;function l(e){r.results=e||{count:0,rows:[]}}r.errors=[],r.columns=a?a.rows:[],r.results=i||{rows:[],count:0},r.query={limit:10,page:1},r.closeDialog=function(){e.hide()},r.getResults=function(){o.offset=(r.query.page-1)*r.query.limit,o.limit=r.query.limit,r.promise=n[s].run(o,l).$promise},r.valueReplacer=function(e,t){moment(t,"YYYY-MM-DDTHH:mm:ssZ",!0).isValid()&&(t=moment(t,"").format("YYYY-MM-DD HH:mm:ss"));return t}}e.$inject=["$mdDialog","toasty","api","columns","results","apiName","exportDate"],angular.module("app.analytics").controller("WebReportDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CALLYSQUARE.EDIT_ODBC",g.odbc=angular.copy(l),g.odbcs=r,g.newOdbc=!1,g.odbc||(g.odbc={},g.title="CALLYSQUARE.NEW_ODBC",g.newOdbc=!0),g.addNewOdbc=function(){g.errors=[],d.squareOdbc.save(g.odbc).$promise.then(function(e){g.odbcs.unshift(e.toJSON()),o.success({title:"Odbc properly created",msg:g.odbc.name?g.odbc.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.squareOdbc.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareOdbc.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveOdbc=function(){g.errors=[],d.squareOdbc.update({id:g.odbc.id},g.odbc).$promise.then(function(e){var t=_.find(g.odbcs,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Odbc properly saved!",msg:g.odbc.name?g.odbc.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.squareOdbc.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareOdbc.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteOdbc=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The odbc will be deleted.").ariaLabel("Delete Odbc").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.squareOdbc.delete({id:g.odbc.id}).$promise.then(function(){_.remove(g.odbcs,{id:g.odbc.id}),o.success({title:"Odbc properly deleted!",msg:(g.odbc.name||"odbc")+" has been deleted!"}),v(g.odbc)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.squareOdbc.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareOdbc.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","odbcs","odbc","api","Auth","license","setting","crudPermissions"],angular.module("app.callysquare").controller("CreateOrEditOdbcDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.odbcs=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="odbcs",b.listOrder="",b.listOrderAsc=null,b.selectedODBC=[],b.query={fields:"createdAt,updatedAt,id,name,dsn,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditOdbcDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/odbcs/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{odbc:e,odbcs:b.odbcs.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.testtestOdbc=function(e,t){return m.squareOdbc.test({id:e.id}).$promise.then(function(){p.success({title:"Square ODBC properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"Square ODBC properly tested",msg:e.data?JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("odbc")+"?").htmlContent("<b>"+(e.name||"odbc")+"</b> will be deleted.").ariaLabel("delete odbc").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getODBC=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.squareOdbc.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ODBC",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditOdbc=function(e,t){i.show({controller:"CreateOrEditOdbcDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/odbcs/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{odbc:t,odbcs:b.odbcs.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteOdbc=S,b.exportSelectedODBC=function(){var e=angular.copy(b.selectedODBC);return b.selectedODBC=[],e},b.deleteSelectedODBC=function(e){var t=i.confirm().title("Are you sure want to delete the selected odbcs?").htmlContent("<b>"+b.selectedODBC.length+" selected</b> will be deleted.").ariaLabel("delete Odbcs").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedODBC.forEach(function(e){S(e)}),b.selectedODBC=[]})},b.deselectODBC=function(){b.selectedODBC=[]},b.selectAllODBC=function(){b.selectedODBC=b.odbcs.rows};var A=!0,E=1;function y(e){b.odbcs=e||{count:0,rows:[]}}function S(e){m.squareOdbc.delete({id:e.id}).$promise.then(function(){_.remove(b.odbcs.rows,{id:e.id}),b.odbcs.count-=1,b.odbcs.rows.length||b.getODBC(),p.success({title:_.startCase("Odbc")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsquareOdbc"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEsquareOdbc",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getODBC())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","odbcs","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.callysquare").controller("OdbcsController",e)}(),function(){"use strict";function e(t,n,a,i,s,e,o,r,l,d){var c=this;function m(e){t.hide(e)}c.errors=[],c.title="CALLYSQUARE.EDIT_PROJECT",c.crudPermissions=d,c.project=angular.copy(o),c.newWindow=!0,c.projects=e,c.newProject=!1,c.openFromEditor=l,c.project||(c.project={name:"",description:""},c.title="CALLYSQUARE.NEW_PROJECT",c.newProject=!0),c.addNewProject=function(){c.errors=[],r.squareProject.save(c.project).$promise.then(function(e){return r.user.addSquareProjects({id:i.getCurrentUser().id,ids:[e.id]}).$promise,e}).then(function(e){c.projects.unshift(e),s.success({title:"Project properly created",msg:c.project.name?c.project.name+" has been created!":""}),m(e),c.openFromEditor&&(c.newWindow?n.open("/callysquare/projects/"+e.id,"_blank"):a.go("app.callysquare.projects.edit",{id:e.id}))}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){c.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.save"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareProject.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.saveProject=function(){c.errors=[],r.squareProject.update({id:c.project.id},c.project).$promise.then(function(e){var t=_.find(c.projects,{id:e.id});t&&_.merge(t,e),s.success({title:"Project properly saved!",msg:c.project.name?c.project.name+" has been saved!":""}),m(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){c.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.update"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareProject.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.deleteProject=function(){c.errors=[];var e=t.confirm().title("Are you sure?").content("The project will be deleted.").ariaLabel("Delete Project").ok("Delete").cancel("Cancel").targetEvent(event);t.show(e).then(function(){r.squareProject.delete({id:c.project.id}).$promise.then(function(){return r.squareProject.getUsers({id:c.project.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(r.user.removeSquareProjects({id:i.getCurrentUser().id,ids:[c.project.id]}).$promise);return $q.all(t)}).then(function(){_.remove(c.projects,{id:c.project.id}),s.success({title:"Project properly deleted!",msg:c.project.name?c.project.name+" has been deleted!":""}),m(c.project)}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.delete"}]})},function(){})},c.closeDialog=m}e.$inject=["$mdDialog","$window","$state","Auth","toasty","projects","project","api","openFromEditor","crudPermissions"],angular.module("app.callysquare").controller("CreateOrEditSquareProjectDialogController",e)}(),function(){"use strict";function e(t,n,a,e,i,s,o,r,l,d,c,m,u,p,g,v,h,f,b,A,E,y,S,T,I,C,O,x,w,R){var N=this,D={playback:["file_id"],answer:["timeout"],menu:["file_id","digit","response","retry"],getdigits:["file_id","variable_id","mindigit","maxdigit","retry"],getsecretdigits:["file_id","variable_id","mindigit","maxdigit","hiddendigitsnum","retry"],vswitch:["variable_id"],database:["odbc_id","query"],ext_dial:["trunk_name","phone","timeout"],set:["variable_id"],math:["variable_id"],gotoc:["context","extension","priority"],system:["command"],agi:["command"],gotoif:["condition"],saydigits:["digits"],saynumber:["number"],sayphonetic:["text"],record:["file","timeout"],goal:["goalname"],dial:["sip_id","timeout"],queue:["queue_id","timeout"],callback:["list_id","name","phone","delay"],gotoiftime:["interval_id"],voicemail:["mailbox"],subproject:["project_id"],sendSMS:["sms_account_id","to","sms_text"],sendMail:["account_id","to"],sendFax:["account_id","to","attachment_path"],tts:["text"],ispeechtts:["text","key","speed"],ispeechasr:["key","timeout"],custom_app:["application"],googleasr:["key","timeout"],awspolly:["aws_access_key_id","aws_secret_access_key","text","aws_text_type"],lumenvoxtts:["text"],sestektts:["text"],lumenvoxasr:["grammar"],sestekasr:["grammar"],tildeasr:["appid","appsecret","uri"],login:["findBy"],pause:["findBy","pause_id"],unpause:["findBy"],logout:["findBy"],dialogflow:["key","text","dialogflow_language"],awslex:["aws_access_key_id","aws_secret_access_key","aws_lex_region","aws_bot_name","text"],sesteknda:["text","ndauth_url","username","password","ndassistant_url"]},P={queue:["file_id"],database:["variable_id"],pause:["pause_id"]},L={sendMail:["to","cc","bcc"],voicemail:["mailbox"]};function k(e,t,n,a){return _.map(e,function(e){return{value:e[t],option:e[n],group:a?e[a]:void 0,canSelect:void 0===e.canSelect||e.canSelect}})}function M(){var e=Number(_.find(N.attributes,{name:"sip_id"}).value);if(!_.some(l,{id:e})&&0<e)return n.user.get({id:e,fields:"id,fullname,role"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,l.push(t),N.values.sip_id=k(l,"id","fullname","role")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_USER",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.sip_id=k(l,"id","fullname","role")}function U(){var e=Number(_.find(N.attributes,{name:"list_id"}).value);if(!_.some(A,{id:e})&&0<e)return n.cmList.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,A.push(t),N.values.list_id=k(A,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_LIST",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.list_id=k(A,"id","name")}function F(){var e=Number(_.find(N.attributes,{name:"trunk_id"}).value);if(!_.some(d,{id:e})&&0<e)return n.trunk.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,d.push(t),N.values.trunk_id=k(d,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_TRUNK",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.trunk_id=k(d,"id","name")}function $(){var e=_.find(N.attributes,{name:"trunk_name"}).value;if(!_.some(d,{name:e})&&e)return n.trunk.get({name:e,fields:"id,name"}).$promise.then(function(e){if(0<e.count&&0<e.rows.length){var t=e.rows[0];t.canSelect=!1,d.push(t),N.values.trunk_name=k(d,"name","name")}}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_TRUNK",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.trunk_name=k(d,"name","name")}function q(){var e=Number(_.find(N.attributes,{name:"queue_id"}).value);if(!_.some(c,{id:e})&&0<e)return n.voiceQueue.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,c.push(t),N.values.queue_id=k(c,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_QUEUE",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.queue_id=k(c,"id","name")}function G(){var e=Number(_.find(N.attributes,{name:"file_id"}).value);if(!_.some(m,{id:e})&&0<e)return n.sound.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,m.push(t),N.values.file_id=k(m,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_SOUND",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.file_id=k(m,"id","name")}function H(){var e=Number(_.find(N.attributes,{name:"variable_id"}).value);if(!_.some(u,{id:e})&&0<e)return n.variable.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,u.push(t),N.values.variable_id=k(u,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_VARIABLE",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.variable_id=k(u,"id","name")}function V(){var e=Number(_.find(N.attributes,{name:"odbc_id"}).value);if(!_.some(p,{id:e})&&0<e)return n.squareOdbc.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,p.push(t),N.values.odbc_id=k(p,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_ODBC",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.odbc_id=k(p,"id","name")}function B(){var e=Number(_.find(N.attributes,{name:"project_id"}).value);if(!_.some(g,{id:e})&&0<e)return n.squareProject.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,g.push(t),N.values.project_id=k(g,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_PROJECT",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.project_id=k(g,"id","name")}function Q(){var e=Number(_.find(N.attributes,{name:"context"}).value);if(!_.some(v,{id:e})&&0<e)return n.voiceContext.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,v.push(t),N.values.context=k(v,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_CONTEXT",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.context=k(v,"id","name")}function W(){var e=Number(_.find(N.attributes,{name:"interval_id"}).value);if(!_.some(h,{id:e})&&0<e)return n.interval.get({id:e,fields:"id,name,IntervalId"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,h.push(t),N.values.interval_id=k(h,"id","name","IntervalId")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_INTERVAL",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.interval_id=k(h,"id","name","IntervalId")}function Y(){var e=Number(_.find(N.attributes,{name:"account_id"}).value);if(!_.some(f,{id:e})&&0<e)return n.mailAccount.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,f.push(t),N.values.account_id=k(f,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_MAIL_ACCOUNT",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.account_id=k(f,"id","name")}function j(){var e=Number(_.find(N.attributes,{name:"sms_account_id"}).value);if(!_.some(I,{id:e})&&0<e)return n.smsAccount.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,I.push(t),N.values.sms_account_id=k(I,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_SMS_ACCOUNT",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.sms_account_id=k(I,"id","name")}function z(){var e=Number(_.find(N.attributes,{name:"template_id"}).value);if(!_.some(b,{id:e})&&0<e)return n.template.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,b.push(t),N.values.template_id=k(b,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_TEMPLATE",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.template_id=k(b,"id","name")}function J(){var e=Number(_.find(N.attributes,{name:"pause_id"}).value);if(!_.some(C,{id:e})&&0<e)return n.pause.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,C.push(t),N.values.pause_id=k(C,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_PAUSE",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.pause_id=k(C,"id","name")}N.cellName=E.tagName,N.attributes=_.map(E.attributes,function(e){return{name:e.name,value:e.value,defaultValue:P[N.cellName]&&_.includes(P[N.cellName],e.name),required:D[N.cellName]&&_.includes(D[N.cellName],e.name),help:L[N.cellName]&&_.includes(L[N.cellName],e.name)}}),N.values={answer:[{value:"yes",option:"Yes"},{value:"no",option:"No"}],ndagenerate_audio:[{value:1,option:"Yes"},{value:0,option:"No"}],ndaactivity_type:[{value:"message",option:"Message"},{value:"conversationUpdate",option:"Conversation Update"},{value:"contactRelationUpdate",option:"Contact Relation Update"},{value:"endOfConversation",option:"End of Conversation"}],hiddendigitspos:[{value:"first",option:"First"},{value:"last",option:"Last"}],recordingFormat:[{value:"wav",option:"Wav"},{value:"gsm",option:"Gsm"}],intkey:[{value:"#",option:"#"},{value:"*",option:"*"}],beep:[{value:"BEEP",option:"Yes"},{value:"NOBEEP",option:"No"}],model:e,ispeech_asr_language:i,ispeech_tts_language:o,google_tts_language:r,google_asr_language:s,aws_polly_region:T,aws_polly_voice:S,aws_text_type:[{value:"text",option:"Text"},{value:"ssml",option:"SSML"}],callback_priority:[{option:"Highest",value:4},{option:"High",value:3},{option:"Medium",value:2},{option:"Low",value:1},{option:"Lowest",value:0}],findBy:[{value:"internal",option:"Internal"},{value:"phone",option:"Phone"},{value:"mobile",option:"Mobile"}],dialogflow_language:O,aws_lex_region:x},N.crudPermissions=R,N.onInit=function(){w.hasRole("admin")?(e={sip_id:k(l,"id","fullname","role"),trunk_name:k(d,"name","name"),trunk_id:k(d,"id","name"),queue_id:k(c,"id","name"),file_id:k(m,"id","name"),variable_id:k(u,"id","name"),odbc_id:k(p,"id","name"),project_id:k(g,"id","name"),context:k(v,"id","name"),interval_id:(n=h,a="id",i="name",s="IntervalId",o=_.filter(n,function(e){return null===e[s]}),r=[],_.forEach(o,function(t){r.push({value:t[a],option:t[i]});var e=_.filter(n,function(e){return e[s]===t.id});_.forEach(e,function(e){r.push({value:e[a],option:" - "+e[i]})})}),r),account_id:k(f,"id","name"),template_id:k(b,"id","name"),list_id:k(A,"id","name"),sms_account_id:k(I,"id","name"),pause_id:k(C,"id","name")},t=_.merge(N.values,e),N.values=t):function(){for(var e=["sip_id","trunk_name","trunk_id","queue_id","file_id","variable_id","odbc_id","project_id","context","interval_id","account_id","template_id","list_id","sms_account_id","pause_id"],t=0;t<N.attributes.length;t++)if(_.includes(e,N.attributes[t].name))switch(N.attributes[t].name){case"sip_id":M();break;case"trunk_name":$();break;case"trunk_id":F();break;case"queue_id":q();break;case"file_id":G();break;case"variable_id":H();break;case"odbc_id":V();break;case"project_id":B();break;case"context":Q();break;case"interval_id":W();break;case"account_id":Y();break;case"template_id":z();break;case"list_id":U();break;case"sms_account_id":j();break;case"pause_id":J()}}();var e,t,n,a,i,s,o,r},N.closeDialog=function(e){e&&y(N.attributes),t.hide()},N.getMap=k}e.$inject=["$mdDialog","api","toasty","ispeechAsrModel","ispeechAsrLanguage","googleAsrLanguage","ispeechTtsLanguage","googleTtsLanguage","users","trunks","queues","sounds","variables","databases","projects","contexts","intervals","mailAccounts","templates","lists","cell","saveCallback","awsPollyVoice","awsPollyRegion","smsAccounts","pauses","dialogFlowLanguage","awsLexRegion","Auth","crudPermissions"],angular.module("app.callysquare").controller("MxGraphDialogController",e)}(),function(){"use strict";angular.module("app.callysquare").directive("stringToNumber",function(){return{require:"ngModel",link:function(e,t,n,a){a.$parsers.push(function(e){return""+e}),a.$formatters.push(function(e){return parseFloat(e)})}}})}(),function(){"use strict";angular.module("app.callysquare").factory("ispeechAsrModel",function(){return[{value:"0",option:"Default"},{value:"date",option:"Date"},{value:"usmoney",option:"US Money"},{value:"numbersto9",option:"Numbers to 9"},{value:"numbersto99",option:"Numbers to 99"},{value:"numbersto999",option:"Numbers to 999"},{value:"time",option:"Time"},{value:"phonenumber",option:"Phone number"},{value:"streets",option:"Streets"},{value:"citystate",option:"US City/States"}]}).factory("ispeechAsrLanguage",function(){return[{value:"en-US",option:"English (US)"},{value:"en-CA",option:"English (Canada)"},{value:"en-GB",option:"English (UK)"},{value:"en-AU",option:"English (Australia)"},{value:"es-ES",option:"Spanish (Spain)"},{value:"es-MX",option:"Spanish (Mexico)"},{value:"it-IT",option:"Italian (Italy) / Finnish (Finland)"},{value:"fr-FR",option:"German (Germany)"},{value:"fr-CA",option:"French (Canada)"},{value:"pl-PL",option:"Polish (Poland)"},{value:"pt-PT",option:"Portuguese (Portugal)"},{value:"ca-ES",option:"Catalan (Catalan)"},{value:"zh-TW",option:"Chinese (Taiwan)"},{value:"da-DK",option:"Danish (Denmark)"},{value:"ja-JP",option:"Japanese (Japan)"},{value:"ko-KR",option:"Korean (Korea)"},{value:"nl-NL",option:"Dutch (Netherlands)"},{value:"nb-NO",option:"Norwegian (Norway)"},{value:"pt-BR",option:"Portuguese (Brazil)"},{value:"ru-RU",option:"Russian (Russia)"},{value:"sv-SE",option:"Swedish (Sweden)"},{value:"zh-CN",option:"Chinese (China)"},{value:"zh-HK",option:"Chinese (Hong Kong)"}]}).factory("ispeechTtsLanguage",function(){return[{value:"usenglishfemale",option:"US English Female"},{value:"usenglishmale",option:"US English Male"},{value:"ukenglishfemale",option:"UK English Female"},{value:"ukenglishmale",option:"UK English Male"},{value:"auenglishfemale",option:"Australian English"},{value:"usspanishfemale",option:"US Spanish Female"},{value:"usspanishmale",option:"US Spanish Male"},{value:"chchinesefemale",option:"Chinese Female"},{value:"chchinesemale",option:"Chinese Male"},{value:"hkchinesefemale",option:"Hong Kong Cantonese Female"},{value:"twchinesefemale",option:"Taiwan Chinese Female"},{value:"jpjapanesefemale",option:"Japanese Female"},{value:"jpjapanesemale",option:"Japanese Male"},{value:"krkoreanfemale",option:"Korean Female"},{value:"krkoreanmale",option:"Korean Male"},{value:"caenglishfemale",option:"Canadian English Female"},{value:"huhungarianfemale",option:"Hungarian Female"},{value:"brportuguesefemale",option:"Brazilian Portuguese Female"},{value:"eurportuguesefemale",option:"European Portuguese Female"},{value:"eurportuguesemale",option:"European Portuguese Male"},{value:"eurspanishfemale",option:"European Spanish Female"},{value:"eurspanishmale",option:"European Spanish Male"},{value:"eurcatalanfemale",option:"European Catalan Female"},{value:"eurczechfemale",option:"European Czech Female"},{value:"eurdanishfemale",option:"European Danish Female"},{value:"eurfinnishfemale",option:"European Finnish Female"},{value:"eurfrenchfemale",option:"European French Female"},{value:"eurfrenchmale",option:"European French Male"},{value:"eurnorwegianfemale",option:"European Norwegian Female"},{value:"eurdutchfemale",option:"European Dutch Female"},{value:"eurpolishfemale",option:"European Polish Female"},{value:"euritalianfemale",option:"European Italian Female"},{value:"euritalianmale",option:"European Italian Male"},{value:"eurturkishfemale",option:"European Turkish Female"},{value:"eurturkishmale",option:"European Turkish Male"},{value:"eurgermanfemale",option:"European German Female"},{value:"eurgermanmale",option:"European German Male"},{value:"rurussianfemale",option:"Russian Female"},{value:"rurussianmale",option:"Russian Male"},{value:"swswedishfemale",option:"Swedish Female"},{value:"cafrenchfemale",option:"Canadian French Female"},{value:"cafrenchmale",option:"Canadian French Male"}]}).factory("googleTtsLanguage",function(){return[{value:"af",option:"Afrikaans"},{value:"sq",option:"Albanian"},{value:"am",option:"Amharic"},{value:"ar",option:"Arabic"},{value:"hy",option:"Armenian"},{value:"az",option:"Azerbaijani"},{value:"eu",option:"Basque"},{value:"be",option:"Belarusian"},{value:"bn",option:"Bengali"},{value:"bh",option:"Bihari"},{value:"bs",option:"Bosnian"},{value:"br",option:"Breton"},{value:"bg",option:"Bulgarian"},{value:"km",option:"Cambodian"},{value:"ca",option:"Catalan"},{value:"zh-CN",option:"Chinese (Simplified)"},{value:"zh-TW",option:"Chinese (Traditional)"},{value:"co",option:"Corsican"},{value:"hr",option:"Croatian"},{value:"cs",option:"Czech"},{value:"da",option:"Danish"},{value:"nl",option:"Dutch"},{value:"en",option:"English"},{value:"eo",option:"Esperanto"},{value:"et",option:"Estonian"},{value:"fo",option:"Faroese"},{value:"tl",option:"Filipino"},{value:"fi",option:"Finnish"},{value:"fr",option:"French"},{value:"fy",option:"Frisian"},{value:"gl",option:"Galician"},{value:"ka",option:"Georgian"},{value:"de",option:"German"},{value:"el",option:"Greek"},{value:"gn",option:"Guarani"},{value:"gu",option:"Gujarati"},{value:"xx-hacker",option:"Hacker"},{value:"ha",option:"Hausa"},{value:"iw",option:"Hebrew"},{value:"hi",option:"Hindi"},{value:"hu",option:"Hungarian"},{value:"is",option:"Icelandic"},{value:"id",option:"Indonesian"},{value:"ia",option:"Interlingua"},{value:"ga",option:"Irish"},{value:"it",option:"Italian"},{value:"jw",option:"Javanese"},{value:"ja",option:"Japanese"},{value:"kn",option:"Kannada"},{value:"kk",option:"Kazakh"},{value:"rw",option:"Kinyarwanda"},{value:"rn",option:"Kirundi"},{value:"xx-klingon",option:"Klingon"},{value:"ku",option:"Kurdish"},{value:"ko",option:"Korean"},{value:"ky",option:"Kyrgyz"},{value:"lo",option:"Laothian"},{value:"la",option:"Latin"},{value:"lv",option:"Latvian"},{value:"ln",option:"Lingala"},{value:"lt",option:"Lithuanian"},{value:"mk",option:"Macedonian"},{value:"mg",option:"Malagasy"},{value:"ml",option:"Malayalam"},{value:"mt",option:"Maltese"},{value:"mi",option:"Maori"},{value:"mr",option:"Marathi"},{value:"mo",option:"Moldavian"},{value:"mn",option:"Mongolian"},{value:"sr-ME",option:"Montenegrin"},{value:"ne",option:"Nepali"},{value:"no",option:"Norwegian"},{value:"nn",option:"Norwegian (Nynorsk)"},{value:"oc",option:"Occitan"},{value:"or",option:"Oriya"},{value:"om",option:"Oromo"},{value:"ps",option:"Pashto"},{value:"fa",option:"Persian"},{value:"xx-pirate",option:"Pirate"},{value:"pl",option:"Polish"},{value:"pt-BR",option:"Portuguese (Brazil)"},{value:"pt-PT",option:"Portuguese (Portugal)"},{value:"pa",option:"Punjabi"},{value:"qu",option:"Quechua"},{value:"ro",option:"Romanian"},{value:"rm",option:"Romansh"},{value:"ru",option:"Russian"},{value:"gd",option:"Scots Gaelic"},{value:"sr",option:"Serbian"},{value:"sh",option:"Serbo-Croatian"},{value:"st",option:"Sesotho"},{value:"sn",option:"Shona"},{value:"sd",option:"Sindhi"},{value:"si",option:"Sinhalese"},{value:"sk",option:"Slovak"},{value:"sl",option:"Slovenian"},{value:"so",option:"Somali"},{value:"es",option:"Spanish"},{value:"su",option:"Sundanese"},{value:"sw",option:"Swahili"},{value:"sv",option:"Swedish"},{value:"tg",option:"Tajik"},{value:"ta",option:"Tamil"},{value:"tt",option:"Tatar"},{value:"te",option:"Telugu"},{value:"th",option:"Thai"},{value:"ti",option:"Tigrinya"},{value:"to",option:"Tonga"},{value:"tr",option:"Turkish"},{value:"tk",option:"Turkmen"},{value:"tw",option:"Twi"},{value:"ug",option:"Uighur"},{value:"uk",option:"Ukrainian"},{value:"ur",option:"Urdu"},{value:"uz",option:"Uzbek"},{value:"vi",option:"Vietnamese"},{value:"cy",option:"Welsh"},{value:"xh",option:"Xhosa"},{value:"yi",option:"Yiddish"},{value:"yo",option:"Yoruba"},{value:"zu",option:"Zulu"}]}).factory("googleAsrLanguage",function(){return[{value:"af-ZA",option:"Afrikaans (South Africa)"},{value:"am-ET",option:"Amharic (Ethiopia)"},{value:"hy-AM",option:"Armenian (Armenia)"},{value:"az-AZ",option:"Azerbaijani (Azerbaijan)"},{value:"id-ID",option:"Indonesian (Indonesia)"},{value:"ms-MY",option:"Malay (Malaysia)"},{value:"bn-BD",option:"Bengali (Bangladesh)"},{value:"bn-IN",option:"Bengali (India)"},{value:"ca-ES",option:"Catalan (Spain)"},{value:"cs-CZ",option:"Czech (Czech Republic)"},{value:"da-DK",option:"Danish (Denmark)"},{value:"de-DE",option:"German (Germany)"},{value:"en-AU",option:"English (Australia)"},{value:"en-CA",option:"English (Canada)"},{value:"en-GH",option:"English (Ghana)"},{value:"en-GB",option:"English (United Kingdom)"},{value:"en-IN",option:"English (India)"},{value:"en-IE",option:"English (Ireland)"},{value:"en-KE",option:"English (Kenya)"},{value:"en-NZ",option:"English (New Zealand)"},{value:"en-NG",option:"English (Nigeria)"},{value:"en-PH",option:"English (Philippines)"},{value:"en-ZA",option:"English (South Africa)"},{value:"en-TZ",option:"English (Tanzania)"},{value:"en-US",option:"English (United States)"},{value:"es-AR",option:"Spanish (Argentina)"},{value:"es-BO",option:"Spanish (Bolivia)"},{value:"es-CL",option:"Spanish (Chile)"},{value:"es-CO",option:"Spanish (Colombia)"},{value:"es-CR",option:"Spanish (Costa Rica)"},{value:"es-EC",option:"Spanish (Ecuador)"},{value:"es-SV",option:"Spanish (El Salvador)"},{value:"es-ES",option:"Spanish (Spain)"},{value:"es-US",option:"Spanish (United States)"},{value:"es-GT",option:"Spanish (Guatemala)"},{value:"es-HN",option:"Spanish (Honduras)"},{value:"es-MX",option:"Spanish (Mexico)"},{value:"es-NI",option:"Spanish (Nicaragua)"},{value:"es-PA",option:"Spanish (Panama)"},{value:"es-PY",option:"Spanish (Paraguay)"},{value:"es-PE",option:"Spanish (Peru)"},{value:"es-PR",option:"Spanish (Puerto Rico)"},{value:"es-DO",option:"Spanish (Dominican Republic)"},{value:"es-UY",option:"Spanish (Uruguay)"},{value:"es-VE",option:"Spanish (Venezuela)"},{value:"eu-ES",option:"Basque (Spain)"},{value:"fil-PH",option:"Filipino (Philippines)"},{value:"fr-CA",option:"French (Canada)"},{value:"fr-FR",option:"French (France)"},{value:"gl-ES",option:"Galician (Spain)"},{value:"ka-GE",option:"Georgian (Georgia)"},{value:"gu-IN",option:"Gujarati (India)"},{value:"hr-HR",option:"Croatian (Croatia)"},{value:"zu-ZA",option:"Zulu (South Africa)"},{value:"is-IS",option:"Icelandic (Iceland)"},{value:"it-IT",option:"Italian (Italy)"},{value:"jv-ID",option:"Javanese (Indonesia)"},{value:"kn-IN",option:"Kannada (India)"},{value:"km-KH",option:"Khmer (Cambodia)"},{value:"lo-LA",option:"Lao (Laos)"},{value:"lv-LV",option:"Latvian (Latvia)"},{value:"lt-LT",option:"Lithuanian (Lithuania)"},{value:"hu-HU",option:"Hungarian (Hungary)"},{value:"ml-IN",option:"Malayalam (India)"},{value:"mr-IN",option:"Marathi (India)"},{value:"nl-NL",option:"Dutch (Netherlands)"},{value:"ne-NP",option:"Nepali (Nepal)"},{value:"nb-NO",option:"Norwegian Bokmal (Norway)"},{value:"pl-PL",option:"Polish (Poland)"},{value:"pt-BR",option:"Portuguese (Brazil)"},{value:"pt-PT",option:"Portuguese (Portugal)"},{value:"ro-RO",option:"Romanian (Romania)"},{value:"si-LK",option:"Sinhala (Srilanka)"},{value:"sk-SK",option:"Slovak (Slovakia)"},{value:"sl-SI",option:"Slovenian (Slovenia)"},{value:"su-ID",option:"Sundanese (Indonesia)"},{value:"sw-TZ",option:"Swahili (Tanzania)"},{value:"sw-KE",option:"Swahili (Kenya)"},{value:"fi-FI",option:"Finnish (Finland)"},{value:"sv-SE",option:"Swedish (Sweden)"},{value:"ta-IN",option:"Tamil (India)"},{value:"ta-SG",option:"Tamil (Singapore)"},{value:"ta-LK",option:"Tamil (Sri Lanka)"},{value:"ta-MY",option:"Tamil (Malaysia)"},{value:"te-IN",option:"Telugu (India)"},{value:"vi-VN",option:"Vietnamese (Vietnam)"},{value:"tr-TR",option:"Turkish (Turkey)"},{value:"ur-PK",option:"Urdu (Pakistan)"},{value:"ur-IN",option:"Urdu (India)"},{value:"el-GR",option:"Greek (Greece)"},{value:"bg-BG",option:"Bulgarian (Bulgaria)"},{value:"ru-RU",option:"Russian (Russia)"},{value:"sr-RS",option:"Serbian (Serbia)"},{value:"uk-UA",option:"Ukrainian (Ukraine)"},{value:"he-IL",option:"Hebrew (Israel)"},{value:"ar-IL",option:"Arabic (Israel)"},{value:"ar-JO",option:"Arabic (Jordan)"},{value:"ar-AE",option:"Arabic (United Arab Emirates)"},{value:"ar-BH",option:"Arabic (Bahrain)"},{value:"ar-DZ",option:"Arabic (Algeria)"},{value:"ar-SA",option:"Arabic (Saudi Arabia)"},{value:"ar-IQ",option:"Arabic (Iraq)"},{value:"ar-KW",option:"Arabic (Kuwait)"},{value:"ar-MA",option:"Arabic (Morocco)"},{value:"ar-TN",option:"Arabic (Tunisia)"},{value:"ar-OM",option:"Arabic (Oman)"},{value:"ar-PS",option:"Arabic (State of Palestine)"},{value:"ar-QA",option:"Arabic (Qatar)"},{value:"ar-LB",option:"Arabic (Lebanon)"},{value:"ar-EG",option:"Arabic (Egypt)"},{value:"fa-IR",option:"Persian (Iran)"},{value:"hi-IN",option:"Hindi (India)"},{value:"th-TH",option:"Thai (Thailand)"},{value:"ko-KR",option:"Korean (South Korea)"},{value:"cmn-Hant-TW",option:"Chinese, Mandarin (Traditional, Taiwan)"},{value:"yue-Hant-HK",option:"Chinese, Cantonese (Traditional, Hong Kong)"},{value:"ja-JP",option:"Japanese (Japan)"},{value:"cmn-Hans-HK",option:"Chinese, Mandarin (Simplified, Hong Kong)"},{value:"cmn-Hans-CN",option:"Chinese, Mandarin (Simplified, China)"}]}).factory("awsPollyVoice",function(){return[{value:"Amy",option:"Amy (English, British, Female)"},{value:"Astrid",option:"Astrid (Swedish, Female)"},{value:"Brian",option:"Brian (English, British, Male)"},{value:"Carla",option:"Carla (Italian, Female)"},{value:"Carmen",option:"Carmen (Romanian, Female)"},{value:"Celine",option:"Celine (French, Female)"},{value:"Chantal",option:"Chantal (French, Canadian, Female)"},{value:"Conchita",option:"Conchita (Spanish, Castilian, Female)"},{value:"Cristiano",option:"Cristiano (Portuguese, Male)"},{value:"Dora",option:"Dora (Icelandic, Female)"},{value:"Emma",option:"Emma (English, British, Female)"},{value:"Enrique",option:"Enrique (Spanish, Castilian, Male)"},{value:"Ewa",option:"Ewa (Polish, Female)"},{value:"Filiz",option:"Filiz (Turkish, Female)"},{value:"Geraint",option:"Geraint (English, Welsh, Male)"},{value:"Giorgio",option:"Giorgio (Italian, Male)"},{value:"Gwineth",option:"Gwineth (Welsh, Female)"},{value:"Hans",option:"Hans (German, Male)"},{value:"Ines",option:"Ines (Portuguese, Female)"},{value:"Ivy",option:"Ivy (English, US, Female)"},{value:"Jacek",option:"Jacek (Polish, Male)"},{value:"Jan",option:"Jan (Polish, Male)"},{value:"Joanna",option:"Joanna (English, US, Female)"},{value:"Joey",option:"Joey (English, US, Male)"},{value:"Justin",option:"Justin (English, US, Male)"},{value:"Karl",option:"Karl (Icelandic, Male)"},{value:"Kendra",option:"Kendra (English, US, Female)"},{value:"Kimberly",option:"Kimberly (English, US, Female)"},{value:"Liv",option:"Liv (Norwegian, Female)"},{value:"Lotte",option:"Lotte (Dutch, Female)"},{value:"Mads",option:"Mads (Danish, Male)"},{value:"Maja",option:"Maja (Polish, Female)"},{value:"Marlene",option:"Marlene (German, Female)"},{value:"Mathieu",option:"Mathieu (French, Male)"},{value:"Maxim",option:"Maxim (Russian, Male)"},{value:"Miguel",option:"Miguel (Spanish, US, Male)"},{value:"Mizuki",option:"Mizuki (Japanese, Female)"},{value:"Naja",option:"Naja (Danish, Female)"},{value:"Nicole",option:"Nicole (English, Austrialian, Female)"},{value:"Penelope",option:"Penelope (Spanish, US, Female)"},{value:"Raveena",option:"Raveena (English, Indian, Female)"},{value:"Ricardo",option:"Ricardo (Portuguese, Brazilian, Male)"},{value:"Ruben",option:"Ruben (Dutch, Male)"},{value:"Russell",option:"Russell (English, Austrialian, Male)"},{value:"Salli",option:"Salli (English, US, Female)"},{value:"Tatyana",option:"Tatyana (Russian, Female)"},{value:"Vitoria",option:"Vitoria (Portuguese, Brazilian, Female)"}]}).factory("awsPollyRegion",function(){return[{value:"us-east-1",option:"US East (N. Virginia)"},{value:"us-east-2",option:"US East (Ohio)"},{value:"us-west-1",option:"US West (N. California)"},{value:"us-west-2",option:"US West (Oregon)"},{value:"ca-central-1",option:"Canada (Central)"},{value:"eu-west-1",option:"EU (Ireland)"},{value:"eu-central-1",option:"EU (Frankfurt)"},{value:"eu-west-2",option:"EU (London)"},{value:"eu-west-3",option:"EU (Paris)"},{value:"ap-southeast-1",option:"Asia Pacific (Singapore)"},{value:"ap-southeast-2",option:"Asia Pacific (Sydney)"},{value:"ap-northeast-2",option:"Asia Pacific (Seoul)"},{value:"ap-northeast-1",option:"Asia Pacific (Tokyo)"},{value:"ap-south-1",option:"Asia Pacific (Mumbai)"},{value:"sa-east-1",option:"South America (São Paulo)"}]}).factory("awsLexRegion",function(){return[{value:"us-east-1",option:"US East (N. Virginia)"},{value:"us-west-2",option:"US West (Oregon)"},{value:"eu-west-1",option:"EU (Ireland)"},{value:"ap-southeast-2",option:"Asia Pacific (Sydney)"}]}).factory("dialogFlowLanguage",function(){return[{value:"da",option:"Danish"},{value:"en",option:"English"},{value:"de",option:"German"},{value:"it",option:"Italian"},{value:"es",option:"Spanish"},{value:"fr",option:"French"},{value:"id",option:"Indonesian"},{value:"ja",option:"Japanese"},{value:"ko",option:"Korean (South Korea)"},{value:"nl",option:"Dutch"},{value:"no",option:"Norwegian"},{value:"pt",option:"Portuguese (European)"},{value:"pt-br",option:"Portuguese (Nrazilian)"},{value:"ru",option:"Russian"},{value:"sv",option:"Swedish"},{value:"th",option:"Thai"},{value:"uk",option:"Ukrainian"},{value:"zh-CN",option:"Chinese (Simplified)"},{value:"zh-HK",option:"Chinese (Hong Kong)"},{value:"zh-TW",option:"Chinese (Traditional)"}]})}(),function(){"use strict";function e(t,e,n,a){var i=this;i.project={preproduction:n},i.closeDialog=function(e){e?(a(i.project.preproduction),t.hide(i.project.preproduction)):t.hide()}}e.$inject=["$mdDialog","toasty","currentXML","saveCallback"],angular.module("app.callysquare").controller("MxGraphEditXMLController",e)}(),function(){"use strict";function e(t,n){var a=this;function i(e){e?(n(e),t.hide(e)):t.hide()}a.errors=[],a.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:5242880,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},a.ngFlow={flow:{}},a.dropping=!1,a.closeDialog=i,a.fileAdded=function(e){a.errors=[];_.includes(["xml"],e.getExtension())||a.errors.push({message:"The extension "+e.getExtension()+" is not supported!"});5242880<e.size&&a.errors.push({message:"The file is too big. The max allowed size is 5MB"});if(!a.errors.length){var t=new FileReader;t.onload=function(e){i(e.target.result)},t.readAsText(e.file)}}}e.$inject=["$mdDialog","saveCallback"],angular.module("app.callysquare").controller("MxGraphImportXMLController",e)}(),function(){"use strict";function e(t,n,e,a){var i=this;i.project=_.clone(e),i.closeDialog=function(){t.hide()},i.save=function(){i.errors=[],a.squareProject.update({id:i.project.id},{notes:i.project.notes,description:i.project.description}).$promise.then(function(e){n.success({title:"Project updated!",msg:i.project.name?i.project.name+" has been updated!":""}),t.hide(e)}).catch(function(e){console.error(e),i.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.update"}]})}}e.$inject=["$mdDialog","toasty","project","api"],angular.module("app.callysquare").controller("MxGraphUpdateInfoController",e)}(),function(){"use strict";function e(t,e,n,a,i){var s=this;s.projects=n,s.id="",s.newWindow=!0,s.closeDialog=function(e){s.errors=[],e?(t.hide(),s.newWindow?a.open("/callysquare/projects/"+s.id,"_blank"):i.go("app.callysquare.projects.edit",{id:s.id})):t.hide()}}e.$inject=["$mdDialog","toasty","projects","$window","$state"],angular.module("app.callysquare").controller("MxGraphOpenProjectController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o){var r=this;function l(){return a.squareProject.getUsers({id:r.project.id,fields:"id,name,fullname,internal",nolimit:!0,role:"user"}).$promise.then(function(e){return r.selectedItems=e.rows?_.map(e.rows,function(e){return e}):[],r.dualMultiselectOptions.selectedItems=r.selectedItems,a.user.get({fields:"id,fullname,name,internal",role:"user",nolimit:!0}).$promise}).then(function(e){r.items=e.rows?_.map(e.rows,function(e){return e}):[],r.dualMultiselectOptions.items=_.differenceBy(r.items,r.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS",msg:e.status?JSON.stringify(e.data):e.toString()})})}r.project=t,r.penalty=0,r.items=[],r.selectedItems=[],r.closeDialog=function(){e.hide()},r.dualMultiselectOptions={readOnly:!1,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("CALLYSQUARE.ALL_USERS"),labelSelected:s.instant("CALLYSQUARE.SELECTED_USERS"),transferCallback:function(e,t){a.squareProject[t?"removeUsers":"addUsers"]({id:r.project.id,ids:_.map(e,"id"),penalty:r.penalty||0}).$promise.then(function(){n.success({title:"Project properly "+(t?"removed":"added"),msg:"Project has been "+(t?"removed":"added")+"!"}),t||l()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:squareProjects.ADDUSERS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},l()}e.$inject=["$mdDialog","toasty","api","project","projects","$translate","Auth"],angular.module("app.callysquare").controller("ProjectspermissionaddController",e)}(),function(){"use strict";function e(t,n,e,a,i,s,o){var r=this;r.project=angular.copy(e),r.project.name+="_new",r.project.preproduction=a,r.newWindow=!0,r.closeDialog=function(){t.hide()},r.save=function(){delete r.project.id,i.squareProject.save(r.project).$promise.then(function(e){n.success({title:"Project properly created",msg:r.project.name?r.project.name+" has been created!":""}),t.hide(e),r.newWindow?s.open("/callysquare/projects/"+e.id,"_blank"):o.go("app.callysquare.projects.edit",{id:e.id})}).catch(function(e){console.error(e),r.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.save"}]})}}e.$inject=["$mdDialog","toasty","project","currentXML","api","$window","$state"],angular.module("app.callysquare").controller("MxGraphSaveProjectAsController",e)}(),function(){"use strict";function e(e,n,a,i,s,o,r,t,l,d,c,m,u,p,g,v,h,f,b,A,E,y,S,T){var I=this;I.currentUser=T.getCurrentUser(),I.project=t||{},I.userProfileSection=S&&1==S.count?S.rows[0]:null,I.crudPermissions=T.parseCrudPermissions(I.userProfileSection?I.userProfileSection.crudPermissions:null),I.onInit=function(){new EditorUi(I,new Editor,document.getElementById("geEditor")).openString(I.project.preproduction,I.project.name,I.project)},I.saveOrPublishProject=function(e,t){var n={preproduction:e};t&&(n.production=e);r.squareProject.update({id:I.project.id},n).$promise.then(function(e){o.success({title:"Project "+(t?"published":"saved")+"!",msg:I.project.name?I.project.name+" has been "+(t?"published":"saved")+"!":""}),I.project.preproduction=e.preproduction}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsquareProject",msg:e.data?JSON.stringify(e.data):e.toString()})})},I.openDialog=function(e,t){a.show({controller:"MxGraphDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/dialog/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{users:l.rows||[],trunks:d.rows||[],queues:c.rows||[],sounds:m.rows||[],variables:u.rows||[],databases:p.rows||[],contexts:g.rows||[],projects:v.rows||[],intervals:h.rows||[],mailAccounts:f.rows||[],smsAccounts:E.rows||[],pauses:y.rows||[],templates:b.rows||[],lists:A.rows||[],cell:e,saveCallback:t,crudPermissions:I.crudPermissions}})},I.newProject=function(e){a.show({controller:"CreateOrEditSquareProjectDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/create/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{project:e,projects:v.rows,openFromEditor:!0,license:null,setting:null,crudPermissions:I.crudPermissions}})},I.openProject=function(){a.show({controller:"MxGraphOpenProjectController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/open/open.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{projects:v.rows||[]}})},I.saveProjectAs=function(e){a.show({controller:"MxGraphSaveProjectAsController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/saveAs/saveAs.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{project:I.project,currentXML:e}}).then(function(e){e&&v.rows.push(e)})},I.newVariable=function(t){return i(function(a,t){return r.userProfileSection.get({userProfileId:I.currentUser.userProfileId,sectionId:1012}).$promise.then(function(e){var t=e.rows?e.rows[0]:null,n=T.parseCrudPermissions(t?t.crudPermissions:null);a(n)}).catch(function(e){t(e)})}).then(function(e){e.canEdit?a.show({controller:"CreateOrEditVariableDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/variables/create/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{variable:t,variables:u.rows,license:null,setting:null,crudPermissions:e}}):o.info({title:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_CREATION_MESSAGE")})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"API:NEW_VARIABLE",msg:e.data?JSON.stringify(e.data):e.toString()})})},I.updateInfo=function(e){a.show({controller:"MxGraphUpdateInfoController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/info/info.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:I.project}}).then(function(e){e&&_.merge(I.project,e)})},I.editXML=function(e,t){a.show({controller:"MxGraphEditXMLController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/edit/edit.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{currentXML:e,saveCallback:t}}).then(function(e){e&&(I.project.preproduction=e)})},I.importXML=function(e){a.show({controller:"MxGraphImportXMLController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/import/import.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{saveCallback:e}}).then(function(e){e&&(I.project.preproduction=e)})},I.gotoProjects=function(){e.go("app.callysquare.projects")}}e.$inject=["$state","$document","$mdDialog","$q","$translate","toasty","api","project","users","trunks","queues","sounds","variables","databases","contexts","projects","intervals","mailAccounts","templates","lists","smsAccounts","pauses","userProfileSection","Auth"],angular.module("app.callysquare").controller("ProjectController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m,u){var p=this;p.currentUser=u.getCurrentUser(),p.projects=a||{count:0,rows:[]},p.userProfile=i,p.userProfileSection=s&&1==s.count?s.rows[0]:null,p.crudPermissions=u.parseCrudPermissions(p.userProfileSection?p.userProfileSection.crudPermissions:null),p.table="projects",p.listOrder="",p.listOrderAsc=null,p.selectedProjects=[],p.query={fields:"id,name,description,notes",sort:"-updatedAt",limit:10,page:1},p.editstate=function(e,t){n.go("app.callysquare.projects.edit",{id:e.id,crudPermissions:p.crudPermissions})},p.deleteconfirm=function(e,t){var n=l.confirm().title("Are you sure want to delete the project?").htmlContent("<b>"+e.name+"</b> will be deleted.").ariaLabel("delete project").targetEvent(t).ok("OK").cancel("CANCEL");l.show(n).then(function(){f(e)},function(){console.log("CANCEL")})},p.success=h,p.getProjects=function(){p.query.offset=(p.query.page-1)*p.query.limit,u.hasRole("admin")?p.promise=o.squareProject.get(p.query,h).$promise:(p.query.id=p.userProfile.id,p.query.section="SquareProjects",p.promise=o.userProfile.getResources(p.query,h).$promise)},p.createOrEditProject=function(e,t){l.show({controller:"CreateOrEditSquareProjectDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/create/dialog.html",parent:angular.element(d.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:t,projects:p.projects.rows,openFromEditor:null,setting:null,crudPermissions:p.crudPermissions}})},p.deleteProject=f,p.exportSelectedProjects=function(){var e=angular.copy(p.selectedProjects);return p.selectedProjects=[],e},p.deleteSelectedProjects=function(e){var t=l.confirm().title("Are you sure want to delete the selected projects?").htmlContent("<b>"+p.selectedProjects.length+" selected</b> will be deleted.").ariaLabel("delete Projects").targetEvent(e).ok("OK").cancel("CANCEL");l.show(t).then(function(){p.selectedProjects.forEach(function(e){f(e)}),p.selectedProjects=[]})},p.deselectProjects=function(){p.selectedProjects=[]},p.selectAllProjects=function(){p.selectedProjects=p.projects.rows};var g=!0,v=1;function h(e){p.projects=e||{count:0,rows:[]}}function f(e){o.squareProject.delete({id:e.id}).$promise.then(function(){_.remove(p.projects.rows,{id:e.id}),p.projects.count-=1,p.projects.rows.length||p.getProjects(),m.success({title:"Project deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.project.delete"}];for(var t=0;t<e.data.errors.length;t++)m.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.project.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){g?c(function(){g=!1}):(t||(v=p.query.page),e!==t&&(p.query.page=1),e||(p.query.page=v),p.getProjects())})}e.$inject=["$scope","$state","$mdSidenav","projects","userProfile","userProfileSection","api","msUtils","$mdDialog","$document","$timeout","toasty","Auth"],angular.module("app.callysquare").controller("ProjectsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CALLYSQUARE.EDIT_SQUARERECORDING",g.squareRecording=angular.copy(l),g.squareRecordings=r,g.newSquareRecording=!1,g.squareRecording||(g.squareRecording={},g.title="CALLYSQUARE.NEW_SQUARERECORDING",g.newSquareRecording=!0),g.addNewSquareRecording=function(){g.errors=[],d.squareRecording.save(g.squareRecording).$promise.then(function(e){g.squareRecordings.unshift(e.toJSON()),o.success({title:"SquareRecording properly created",msg:g.squareRecording.name?g.squareRecording.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.squareRecording.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSquareRecording=function(){g.errors=[],d.squareRecording.update({id:g.squareRecording.id},g.squareRecording).$promise.then(function(e){var t=_.find(g.squareRecordings,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SquareRecording properly saved!",msg:g.squareRecording.name?g.squareRecording.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.squareRecording.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareRecording.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSquareRecording=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The squareRecording will be deleted.").ariaLabel("Delete SquareRecording").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.squareRecording.delete({id:g.squareRecording.id}).$promise.then(function(){_.remove(g.squareRecordings,{id:g.squareRecording.id}),o.success({title:"SquareRecording properly deleted!",msg:(g.squareRecording.name||"squareRecording")+" has been deleted!"}),v(g.squareRecording)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.squareRecording.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareRecording.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","squareRecordings","squareRecording","api","Auth","license","setting","crudPermissions"],angular.module("app.callysquare").controller("CreateOrEditSquareRecordingDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.squareRecordings=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="squareRecordings",b.listOrder="",b.listOrderAsc=null,b.selectedSquareRecordings=[],b.query={fields:"createdAt,updatedAt,id,filename,projectName,uniqueid,callerid,extension,audio",sort:"-updatedAt",limit:10,page:1},b.downloadfile2=function(r,e){return m.squareRecording.download({id:r.id}).$promise.then(function(e){var t,n,a=[e.buffer],i="download",s=new Blob(a,{type:e.type});t=r.value,n=-1<t.lastIndexOf("/")?t.substring(t.lastIndexOf("/")+1):-1<t.lastIndexOf("\\")?t.substring(t.lastIndexOf("\\")+1):t,i=(n=n.substring(0,n.lastIndexOf(".")))+".wav";var o=window.document.createElement("a");o.setAttribute("href",URL.createObjectURL(s)),o.setAttribute("download",i),document.body.appendChild(o),o.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("squareRecording")+"?").htmlContent("<b>"+(e.name||"squareRecording")+"</b> will be deleted.").ariaLabel("delete squareRecording").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getSquareRecordings=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.squareRecording.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="SquareRecordings",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSquareRecording=function(e,t){i.show({controller:"CreateOrEditSquareRecordingDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/squareRecordings/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{squareRecording:t,squareRecordings:b.squareRecordings.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSquareRecording=S,b.exportSelectedSquareRecordings=function(){var e=angular.copy(b.selectedSquareRecordings);return b.selectedSquareRecordings=[],e},b.deleteSelectedSquareRecordings=function(e){var t=i.confirm().title("Are you sure want to delete the selected squareRecordings?").htmlContent("<b>"+b.selectedSquareRecordings.length+" selected</b> will be deleted.").ariaLabel("delete SquareRecordings").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedSquareRecordings.forEach(function(e){S(e)}),b.selectedSquareRecordings=[]})},b.deselectSquareRecordings=function(){b.selectedSquareRecordings=[]},b.selectAllSquareRecordings=function(){b.selectedSquareRecordings=b.squareRecordings.rows};var A=!0,E=1;function y(e){b.squareRecordings=e||{count:0,rows:[]}}function S(e){m.squareRecording.delete({id:e.id}).$promise.then(function(){_.remove(b.squareRecordings.rows,{id:e.id}),b.squareRecordings.count-=1,b.squareRecordings.rows.length||b.getSquareRecordings(),p.success({title:_.startCase("SquareRecording")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsquareRecording"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEsquareRecording",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getSquareRecordings())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","squareRecordings","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.callysquare").controller("SquareRecordingsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.chatQueues=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="chatQueues",b.listOrder="",b.listOrderAsc=null,b.selectedChatQueues=[],b.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"chat",limit:10,page:1},b.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.chat.chatQueues.edit",{id:e.id,chatQueue:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"ChatQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatQueue:e,chatQueues:b.chatQueues?b.chatQueues.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"ChatQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatQueue:e,chatQueues:b.chatQueues?b.chatQueues.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("chatQueue")+"?").htmlContent("<b>"+(e.name||"chatQueue")+"</b> will be deleted.").ariaLabel("delete chatQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:510}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.chat.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.chat.realtime.queues",{})}},b.success=y,b.getChatQueues=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.chatQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ChatQueues",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditChatQueue=function(e,t){i.show({controller:"CreateOrEditChatQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatQueue:t,chatQueues:b.chatQueues.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteChatQueue=S,b.exportSelectedChatQueues=function(){var e=angular.copy(b.selectedChatQueues);return b.selectedChatQueues=[],e},b.deleteSelectedChatQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected chatQueues?").htmlContent("<b>"+b.selectedChatQueues.length+" selected</b> will be deleted.").ariaLabel("delete ChatQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedChatQueues.forEach(function(e){S(e)}),b.selectedChatQueues=[]})},b.deselectChatQueues=function(){b.selectedChatQueues=[]},b.selectAllChatQueues=function(){b.selectedChatQueues=b.chatQueues.rows};var A=!0,E=1;function y(e){b.chatQueues=e||{count:0,rows:[]}}function S(e){m.chatQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.chatQueues.rows,{id:e.id}),b.chatQueues.count-=1,b.chatQueues.rows.length||b.getChatQueues(),p.success({title:_.startCase("ChatQueue")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEchatQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEchatQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getChatQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","chatQueues","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.chat").controller("ChatQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CHAT.EDIT_CHATQUEUE",g.chatQueue=angular.copy(l),g.chatQueues=r,g.newChatQueue=!1,g.chatQueue||(g.chatQueue={strategy:"beepall",timeout:10},g.title="CHAT.NEW_CHATQUEUE",g.newChatQueue=!0),g.addNewChatQueue=function(){g.errors=[],d.chatQueue.save(g.chatQueue).$promise.then(function(e){g.chatQueues.unshift(e.toJSON()),o.success({title:"ChatQueue properly created",msg:g.chatQueue.name?g.chatQueue.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveChatQueue=function(){g.errors=[],d.chatQueue.update({id:g.chatQueue.id},g.chatQueue).$promise.then(function(e){var t=_.find(g.chatQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatQueue properly saved!",msg:g.chatQueue.name?g.chatQueue.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteChatQueue=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The chatQueue will be deleted.").ariaLabel("Delete ChatQueue").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.chatQueue.delete({id:g.chatQueue.id}).$promise.then(function(){_.remove(g.chatQueues,{id:g.chatQueue.id}),o.success({title:"ChatQueue properly deleted!",msg:(g.chatQueue.name||"chatQueue")+" has been deleted!"}),v(g.chatQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","chatQueues","chatQueue","api","Auth","license","setting","crudPermissions"],angular.module("app.chat").controller("CreateOrEditChatQueueDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.chatQueue.getAgents({id:c.chatQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserChatQueue?"penalty "+e.UserChatQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.chatQueue=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.chatQueue.removeAgents({id:c.chatQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.chatQueue.addAgents({id:c.chatQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("CHAT.ALL_AGENTS"),labelSelected:r.instant("CHAT.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","chatQueue","chatQueues","realtime","$translate","Auth","crudPermissions"],angular.module("app.chat").controller("ChatQueueagentaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r){var l=this;function d(){return a(function(n,t){return a(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.chatQueue.getTeams({id:l.chatQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.chatQueue=t,l.crudPermissions=r,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("CHAT.ALL_TEAMS"),labelSelected:n.instant("CHAT.SELECTED_TEAMS"),transferCallback:function(e,t){var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.chatQueue.removeTeams({id:l.chatQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.chatQueue.addTeams({id:l.chatQueue.id,teams:_.map(n,function(e){return _.pick(e,["id"])})}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),i.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","chatQueue","$translate","Auth","crudPermissions"],angular.module("app.chat").controller("ChatQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.chatQueue=c||e.params.chatQueue||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.teamadddialog=function(e,t){n.show({controller:"ChatQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/teamadd/teamadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatQueue:e,chatQueues:u.chatQueues?u.chatQueues.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){n.show({controller:"ChatQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatQueue:e,chatQueues:u.chatQueues?u.chatQueues.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoChatQueues=function(){e.go("app.chat.chatQueues")},u.saveChatQueue=function(){r.chatQueue.update({id:u.chatQueue.id},u.chatQueue).$promise.then(function(){l.success({title:"ChatQueue updated!",msg:u.chatQueue.name?u.chatQueue.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","chatQueue","userProfileSection"],angular.module("app.chat").controller("ChatQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.chatWebsites=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="chatWebsites",b.listOrder="",b.listOrderAsc=null,b.selectedChatWebsites=[],b.query={fields:"createdAt,updatedAt,id,token,agentIdentifier,customerAlias,messageFontSize,name,key,address,remote,ListId,fidelity,timeout,agentAlias,closingQuestion,formSubmitSuccessMessage,formSubmitFailureMessage,color,color_focus,color_button,textColor,backgroundColor,fontSize,header_shape,showAgentAvatar,showCustomerAvatar,alignment,verticalAlignment,messagesAlignment,defaultTitle,animation,defaultWhiteLabel,whiteLabel,defaultLogo,conditionAgreement,autoclose,enableUnmanagedNote,unmanagedMessage,skipUnmanaged,sendUnmanaged,enableCustomerWriting,waitingTitle,waitingMessage,closingMessage,noteTitle,placeholderMessage,skipMessageButton,enableRating,ratingType,ratingStarsNumber,enableFeedback,forwardTranscript,forwardTranscriptMessage,closingMessageButton,download_transcript,enableCustomerAttachment,enableCustomerCheckmarks,systemAlias,enquiry_enable,enquiry_forwarding,enquiry_forwarding_address,name_title,username_placeholder,email_title,email_placeholder,header_online,hideWhenOffline,header_offline,start_chat_button,offline_chat_button,offlineMessageSubject,offlineMessageBody,offline_message,message_title,enquiry_message_placeholder,enquiry_button,rating_message,rating_send,rating_skip,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},b.arrayagentIdentifier=_.keyBy([{option:"WebsiteAlias",value:"'website_alias'"},{option:"AgentAlias",value:"'agent_alias'"},{option:"AgentFullname",value:"'agent_fullname'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayheader_shape=_.keyBy([{option:"Rounded",value:"'rounded'"},{option:"Squared",value:"'squared'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayalignment=_.keyBy([{option:"bottom_right",value:"'bottom_right'"},{option:"right",value:"'right'"},{option:"left",value:"'left'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraymessagesAlignment=_.keyBy([{option:"alternate",value:"'alternate'"},{option:"centered",value:"'centered'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayratingType=_.keyBy([{option:"Star",value:"'star'"},{option:"Thumb",value:"'thumb'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.chat.chatWebsites.edit",{id:e.id,chatWebsite:e,crudPermissions:b.crudPermissions})},b.interactionsgoto=function(e,t){n.go("app.chat.chatWebsites.edit",{id:e.id,tab:9})},b.offlinemessagesgoto=function(e,t){n.go("app.chat.chatWebsites.edit",{id:e.id,tab:10})},b.agentadddialog=function(e,t){i.show({controller:"ChatWebsiteagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatWebsite:e,chatWebsites:b.chatWebsites?b.chatWebsites.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("chatWebsite")+"?").htmlContent("<b>"+(e.name||"chatWebsite")+"</b> will be deleted.").ariaLabel("delete chatWebsite").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getChatWebsites=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.chatWebsite.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ChatWebsites",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditChatWebsite=function(e,t){i.show({controller:"CreateOrEditChatWebsiteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:t,chatWebsites:b.chatWebsites.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteChatWebsite=S,b.exportSelectedChatWebsites=function(){var e=angular.copy(b.selectedChatWebsites);return b.selectedChatWebsites=[],e},b.deleteSelectedChatWebsites=function(e){var t=i.confirm().title("Are you sure want to delete the selected chatWebsites?").htmlContent("<b>"+b.selectedChatWebsites.length+" selected</b> will be deleted.").ariaLabel("delete ChatWebsites").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedChatWebsites.forEach(function(e){S(e)}),b.selectedChatWebsites=[]})},b.deselectChatWebsites=function(){b.selectedChatWebsites=[]},b.selectAllChatWebsites=function(){b.selectedChatWebsites=b.chatWebsites.rows},g.hasRole("admin")?m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.lists,{id:e.resourceId})}),n=null;if(b.chatWebsite&&(n=_.find(b.lists,{id:Number(b.chatWebsite.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.lists,{id:n.id});a.canSelect=!1,t.push(a)}b.lists=t})}else{var n=[],a=null;b.chatWebsite&&(a=_.find(b.lists,{id:Number(b.chatWebsite.ListId)}));for(var i=0;i<b.lists.length;i++)a&&b.lists[i].id===a.id&&(b.lists[i].canSelect=!1,n.push(b.lists[i]));b.lists=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),g.hasRole("admin")?m.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){b.interval=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){b.interval=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.interval,{id:e.resourceId})}),n=null;if(b.chatWebsite&&(n=_.find(b.interval,{id:Number(b.chatWebsite.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.interval,{id:n.id});a.canSelect=!1,t.push(a)}b.interval=t})}else{var n=[],a=null;b.chatWebsite&&(a=_.find(b.interval,{id:Number(b.chatWebsite.IntervalId)}));for(var i=0;i<b.interval.length;i++)a&&b.interval[i].id===a.id&&(b.interval[i].canSelect=!1,n.push(b.interval[i]));b.interval=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.chatWebsites=e||{count:0,rows:[]}}function S(e){m.chatWebsite.delete({id:e.id}).$promise.then(function(){_.remove(b.chatWebsites.rows,{id:e.id}),b.chatWebsites.count-=1,b.chatWebsites.rows.length||b.getChatWebsites(),p.success({title:_.startCase("ChatWebsite")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEchatWebsite"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getChatWebsites())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","chatWebsites","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.chat").controller("ChatWebsitesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CHAT.EDIT_CHATWEBSITE",g.chatWebsite=angular.copy(l),g.chatWebsites=r,g.newChatWebsite=!1,g.chatWebsite||(g.chatWebsite={remote:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():""),header_shape:"rounded",alignment:"bottom_right",verticalAlignment:30,messagesAlignment:"alternate",IntervalId:"null",timezone:"null",waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},g.title="CHAT.NEW_CHATWEBSITE",g.newChatWebsite=!0),t.params.id&&(g.chatWebsite.ChatWebsiteId=t.params.id),g.addNewChatWebsite=function(){g.errors=[],d.chatWebsite.save(g.chatWebsite).$promise.then(function(e){g.chatWebsites.unshift(e.toJSON()),o.success({title:"ChatWebsite properly created",msg:g.chatWebsite.name?g.chatWebsite.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatWebsite.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatWebsite.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveChatWebsite=function(){g.errors=[],d.chatWebsite.update({id:g.chatWebsite.id},g.chatWebsite).$promise.then(function(e){var t=_.find(g.chatWebsites,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatWebsite properly saved!",msg:g.chatWebsite.name?g.chatWebsite.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatWebsite.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatWebsite.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteChatWebsite=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The chatWebsite will be deleted.").ariaLabel("Delete ChatWebsite").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.chatWebsite.delete({id:g.chatWebsite.id}).$promise.then(function(){_.remove(g.chatWebsites,{id:g.chatWebsite.id}),o.success({title:"ChatWebsite properly deleted!",msg:(g.chatWebsite.name||"chatWebsite")+" has been deleted!"}),v(g.chatWebsite)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatWebsite.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatWebsite.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.lists,{id:e.resourceId})}),n=null;if(g.chatWebsite&&(n=_.find(g.lists,{id:Number(g.chatWebsite.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.lists,{id:n.id});a.canSelect=!1,t.push(a)}g.lists=t})}else{var n=[],a=null;g.chatWebsite&&(a=_.find(g.lists,{id:Number(g.chatWebsite.ListId)}));for(var i=0;i<g.lists.length;i++)a&&g.lists[i].id===a.id&&(g.lists[i].canSelect=!1,n.push(g.lists[i]));g.lists=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.hasRole("admin")?d.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){g.interval=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){g.interval=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.interval,{id:e.resourceId})}),n=null;if(g.chatWebsite&&(n=_.find(g.interval,{id:Number(g.chatWebsite.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.interval,{id:n.id});a.canSelect=!1,t.push(a)}g.interval=t})}else{var n=[],a=null;g.chatWebsite&&(a=_.find(g.interval,{id:Number(g.chatWebsite.IntervalId)}));for(var i=0;i<g.interval.length;i++)a&&g.interval[i].id===a.id&&(g.interval[i].canSelect=!1,n.push(g.interval[i]));g.interval=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","chatWebsites","chatWebsite","api","Auth","license","setting","crudPermissions"],angular.module("app.chat").controller("CreateOrEditChatWebsiteDialogController",e)}(),function(){"use strict";function e(o,i,a,s,e){var r=this;function t(e,t){if(r.chatWebsiteApps.rows.length){var n=r.chatWebsiteApps.rows[t]?r.chatWebsiteApps.rows[t]:r.chatWebsiteApps.rows[0];i.show({controller:"EditChatWebsiteApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsiteApp:n,chatWebsite:r.chatWebsite,crudPermissions:r.crudPermissions}}).then(function(e){e&&(e.id?r.chatWebsiteApps.rows[t]=e:r.chatWebsiteApps.rows.splice(t,0,e),l())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function l(){for(var e=1,t=[],n=0;n<r.chatWebsiteApps.rows.length;n++,0){var a=r.chatWebsiteApps.rows[n],i=[],s=[];a.intervals="*,*,*,*"!==a.interval?[a.interval]:a.IntervalId?_.map(_.filter(r.intervals.rows,{IntervalId:a.IntervalId}),"interval"):[],a.context=r.chatWebsite.context,a.exten=r.chatWebsite.exten,a.type&&(a.type=a.type.toLowerCase()),a.priority=i.length?_.last(i).priority+1:e,e=(s.length?_.last(s).priority:a.priority)+1,t=_.concat(t,i,[a],s)}o.chatWebsite.addApplications({id:r.chatWebsite.id},_.sortBy(t,"priority")).$promise.then(function(e){r.chatWebsiteApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){r.chatWebsiteApps=e||{count:0,rows:[]}}r.currentUser=e.getCurrentUser(),r.chatWebsite={},r.chatWebsiteApps={count:0,rows:[]},r.selectedChatWebsiteApps=[],r.crudPermissions,r.query={sort:"priority"},r.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",types:["always","custom","list"],fields:[],isApp:!1},{app:"noop",appType:"noop",type:"noop",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,fields:[{title:"Value",name:"value",type:"text",param:0}]},{app:"system",appType:"system",type:"system",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,extraApi:[{name:"variables",field:{name:"variable",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1012}}],fields:[{title:"Command",name:"command",type:"text",required:!0,param:0},{title:"Variable",name:"variable",type:"apiselect",values:"variables",value:"variable.name",option:"variable.name",defaultValues:[{value:"''",option:"None"}],defaultValue:"''",param:1}]},{app:"gotop",appType:"gotop",type:"goto",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Priority",name:"priority",type:"number",required:!0,min:0,param:0}]},{app:"gotoif",appType:"gotoif",type:"gotoif",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Condition",name:"condition",type:"text",required:!0,param:0},{title:"truepriority",name:"truepriority",type:"number",min:1,required:!0,param:1},{title:"falsepriority",name:"falsepriority",type:"number",min:1,required:!0,param:2}]},{app:"queue",appType:"queue",foreignKey:"ChatQueueId",type:"queue",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"queues",field:{name:"queue",key:"name"},route:"chatQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:501}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",defaultValue:300,required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:300,param:1}]},{app:"agent",appType:"agent",type:"agent",foreignKey:"UserId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"agents",field:{name:"agent",key:"name"},route:"user",filters:{fields:"id,name",role:"agent",sort:"name",nolimit:!0},permissions:{section:202}}],fields:[{title:"Agent",name:"agent",type:"apiselect",values:"agents",value:"agent.name",option:"agent.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:30,param:1}]},{app:"close",appType:"close",type:"close",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Disposition",name:"disposition",type:"text",required:!0,param:0}]},{app:"autoreply",appType:"autoreply",type:"autoreply",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"times",name:"times",type:"select",defaultValue:"1",values:[{option:"One Time",value:"1"},{option:"Always",value:"0"}],required:!0,param:0},{title:"Text",name:"text",type:"textarea",required:!0,param:1}]},{app:"tag",appType:"tag",type:"tag",foreignKey:"TagId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"tags",field:{name:"tag",key:"name"},route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1008}}],fields:[{title:"Tag",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",required:!0,param:0}]},{app:"dialogflow",appType:"dialogflow",type:"dialogflow",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Key",name:"key",type:"text",required:!0,param:0},{title:"language",name:"language",type:"select",defaultValue:"'en'",values:[{option:"Danish",value:"'da'"},{option:"English",value:"'en'"},{option:"German",value:"'de'"},{option:"Italian",value:"'it'"},{option:"Spanish",value:"'es'"},{option:"French",value:"'fr'"},{option:"Indonesian",value:"'id'"},{option:"Japanese",value:"'ja'"},{option:"Korean (South Korea)",value:"'ko'"},{option:"Dutch",value:"'nl'"},{option:"Norwegian",value:"'no'"},{option:"Portuguese (European)",value:"'pt'"},{option:"Portuguese (Nrazilian)",value:"'pt-br'"},{option:"Russian",value:"'ru'"},{option:"Swedish",value:"'sv'"},{option:"Thai",value:"'th'"},{option:"Ukrainian",value:"'uk'"},{option:"Chinese (Simplified)",value:"'zh-CN'"},{option:"Chinese (Hong Kong)",value:"'zh-HK'"},{option:"Chinese (Traditional)",value:"'zh-TW'"}],required:!0,param:1},{title:"welcomemessage",name:"welcomemessage",type:"textarea",maxlength:255,param:2,help:!0}]},{app:"amazonlex",appType:"amazonlex",type:"amazonlex",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"accesskeyid",name:"accesskeyid",type:"text",required:!0,param:0},{title:"secretaccesskey",name:"secretaccesskey",type:"text",required:!0,param:1},{title:"lexregion",name:"lexregion",type:"select",defaultValue:"'us-east-1'",values:[{option:"US East (N. Virginia)",value:"'us-east-1'"},{option:"US West (Oregon)",value:"'us-west-2'"},{option:"EU (Ireland)",value:"'eu-west-1'"},{option:"Asia Pacific (Sydney)",value:"'ap-southeast-2'"}],required:!0,param:2},{title:"botname",name:"botname",type:"text",required:!0,param:3},{title:"welcomemessage",name:"welcomemessage",type:"textarea",maxlength:255,param:4,help:!0}]}],["app"]),{isApp:!1}),r.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},r.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){l()}},r.init=function(e,t){r.chatWebsite=e,r.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},r.applications.disabled=!r.crudPermissions.canEdit,r.query.id=e.id,r.query.isApp=!0,r.query.nolimit=!0,r.getChatWebsiteApps(),r.getIntervals()},r.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){r.chatWebsiteApps.rows.splice(t,1),l()},function(){console.log("CANCEL")})},r.getChatWebsiteApps=function(){r.promise=o.chatWebsite.getApplications(r.query,n).$promise},r.editChatWebsiteApp=t,r.editInterval=function(e,t){if(r.chatWebsiteApps.rows.length){var n=r.chatWebsiteApps.rows[t]?r.chatWebsiteApps.rows[t]:r.chatWebsiteApps.rows[0];i.show({controller:"EditChatWebsiteAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:r.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,l())})}},r.deleteChatWebsiteApp=function(e){_.remove(r.chatWebsiteApps.rows,{id:e.id}),l(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},r.deleteSelectedChatWebsiteApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+r.selectedChatWebsiteApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){r.selectedChatWebsiteApps.forEach(function(e){_.remove(r.chatWebsiteApps.rows,{id:e.id})}),r.selectedChatWebsiteApps=[],l()})},r.rewriteRouting=l,r.getIntervals=function(){return o.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){r.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.chat").controller("ChatWebsiteActionsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.chatWebsite.getAgents({id:c.chatWebsite.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserChatWebsite?"penalty "+e.UserChatWebsite.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.chatWebsite=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.chatWebsite.removeAgents({id:c.chatWebsite.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.chatWebsite.addAgents({id:c.chatWebsite.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("CHAT.ALL_AGENTS"),labelSelected:r.instant("CHAT.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","chatWebsite","chatWebsites","realtime","$translate","Auth","crudPermissions"],angular.module("app.chat").controller("ChatWebsiteagentaddController",e)}(),function(){"use strict";function e(e,a){var i=this;i.chatWebsite={},i.crudPermissions,i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.chatWebsite.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.chatWebsite.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e,t){i.chatWebsite=angular.copy(e),i.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.ngFlowOptions.target="/api/chat/websites/:id/avatar".replace(":id",i.chatWebsite.id),i.chatWebsite.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.chat").controller("ChatWebsiteagentAvatarController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.agent=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agent.appdata)switch(l.agent.appType?l.agent.appType.toLowerCase():l.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agent.appdata.split(",");l.agent.key=d[0],l.agent.language=d[1],l.agent.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agent.appdata.split(",");l.agent.accesskeyid=d[0],l.agent.secretaccesskey=d[1],l.agent.lexregion=d[2],l.agent.botname=d[3],l.agent.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agent.appdata.split(",");l.agent.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agent.text=d.slice(1,d.length).join(",");break;case"message":l.agent.text=l.agent.appdata;break;case"set":l.agent.name=l.agent.appdata.split("=")[0],l.agent.value=l.agent.appdata.split("=")[1];break;case"agi":l.agent.project=l.agent.appdata;break;default:var c=l.agent.appdata.split(",");l.agent.agent=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.agent.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.agent.timeout=30;function m(e){t.hide(e)}l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outbounddial"===l.agent.appType.toLowerCase()&&(l.agent.prefix=l.agent.phone?l.agent.phone.split("$")[0]:void 0,l.agent.callerId=l.agent.callerID?"CALLERID(all)="+l.agent.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outboundDial"===l.agent.appType&&(l.agent.phone=i.cutdigits?(l.agent.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agent.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agent.options+="U(xcally-mixmonitor-context)"):l.agent.options=l.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.agents,{name:l.agent.agent});t&&(l.agent.UserId=t.id);if(l.agent.appType&&"custom"===l.agent.appType);else switch((l.agent.app||l.agent.appType).toLowerCase()){case"set":l.agent.appdata=l.agent.name+"="+l.agent.value;break;case"custom":break;default:e[0]=l.agent.agent,e[1]=l.agent.timeout,l.agent.appdata=e.join(",")}m(l.agent)},l.closeDialog=m,o.hasRole("admin")?s.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){l.agents=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){l.agents=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.agents,{id:e.resourceId})}),n=null;if(l.agent&&(n=_.find(l.agents,{name:l.agent.agent})),n&&!_.some(t,["id",n.id])){var a=_.find(l.agents,{id:n.id});a.canSelect=!1,t.push(a)}l.agents=t})}else{var n=[],a=null;l.agent&&(a=_.find(l.agents,{name:l.agent.agent}));for(var i=0;i<l.agents.length;i++)a&&l.agents[i].id===a.id&&(l.agents[i].canSelect=!1,n.push(l.agents[i]));l.agents=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.amazonlex=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.amazonlex.appdata)switch(l.amazonlex.appType?l.amazonlex.appType.toLowerCase():l.amazonlex.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.amazonlex.appdata.split(",");l.amazonlex.key=d[0],l.amazonlex.language=d[1],l.amazonlex.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.amazonlex.appdata.split(",");l.amazonlex.accesskeyid=d[0],l.amazonlex.secretaccesskey=d[1],l.amazonlex.lexregion=d[2],l.amazonlex.botname=d[3],l.amazonlex.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.amazonlex.appdata.split(",");l.amazonlex.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.amazonlex.text=d.slice(1,d.length).join(",");break;case"message":l.amazonlex.text=l.amazonlex.appdata;break;case"set":l.amazonlex.name=l.amazonlex.appdata.split("=")[0],l.amazonlex.value=l.amazonlex.appdata.split("=")[1];break;case"agi":l.amazonlex.project=l.amazonlex.appdata;break;default:var c=l.amazonlex.appdata.split(",");l.amazonlex.accesskeyid=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.amazonlex.secretaccesskey=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.amazonlex.lexregion=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.amazonlex.botname=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10),l.amazonlex.welcomemessage=_.isEmpty(c[4])?c[4]:isNaN(c[4])?c[4]:parseInt(c[4],10)}else l.amazonlex.lexregion="us-east-1";function m(e){t.hide(e)}l.amazonlex.type&&"outbound"===l.amazonlex.type.toLowerCase()&&"outbounddial"===l.amazonlex.appType.toLowerCase()&&(l.amazonlex.prefix=l.amazonlex.phone?l.amazonlex.phone.split("$")[0]:void 0,l.amazonlex.callerId=l.amazonlex.callerID?"CALLERID(all)="+l.amazonlex.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.amazonlex.type&&"outbound"===l.amazonlex.type.toLowerCase()&&"outboundDial"===l.amazonlex.appType&&(l.amazonlex.phone=i.cutdigits?(l.amazonlex.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.amazonlex.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.amazonlex.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.amazonlex.options+="U(xcally-mixmonitor-context)"):l.amazonlex.options=l.amazonlex.options.replace("U(xcally-mixmonitor-context)",""));if(l.amazonlex.appType&&"custom"===l.amazonlex.appType);else switch((l.amazonlex.app||l.amazonlex.appType).toLowerCase()){case"set":l.amazonlex.appdata=l.amazonlex.name+"="+l.amazonlex.value;break;case"custom":break;default:e[0]=l.amazonlex.accesskeyid,e[1]=l.amazonlex.secretaccesskey,e[2]=l.amazonlex.lexregion,e[3]=l.amazonlex.botname,e[4]=l.amazonlex.welcomemessage,l.amazonlex.appdata=e.join(",")}m(l.amazonlex)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppamazonlexDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.autoreply=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.autoreply.appdata)switch(l.autoreply.appType?l.autoreply.appType.toLowerCase():l.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.autoreply.appdata.split(",");l.autoreply.key=d[0],l.autoreply.language=d[1],l.autoreply.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.autoreply.appdata.split(",");l.autoreply.accesskeyid=d[0],l.autoreply.secretaccesskey=d[1],l.autoreply.lexregion=d[2],l.autoreply.botname=d[3],l.autoreply.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.autoreply.appdata.split(",");l.autoreply.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.autoreply.text=d.slice(1,d.length).join(",");break;case"message":l.autoreply.text=l.autoreply.appdata;break;case"set":l.autoreply.name=l.autoreply.appdata.split("=")[0],l.autoreply.value=l.autoreply.appdata.split("=")[1];break;case"agi":l.autoreply.project=l.autoreply.appdata;break;default:var c=l.autoreply.appdata.split(",");l.autoreply.times=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.autoreply.text=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.autoreply.times=1;function m(e){t.hide(e)}l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outbounddial"===l.autoreply.appType.toLowerCase()&&(l.autoreply.prefix=l.autoreply.phone?l.autoreply.phone.split("$")[0]:void 0,l.autoreply.callerId=l.autoreply.callerID?"CALLERID(all)="+l.autoreply.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outboundDial"===l.autoreply.appType&&(l.autoreply.phone=i.cutdigits?(l.autoreply.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.autoreply.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.autoreply.options+="U(xcally-mixmonitor-context)"):l.autoreply.options=l.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(l.autoreply.appType&&"custom"===l.autoreply.appType);else switch((l.autoreply.app||l.autoreply.appType).toLowerCase()){case"set":l.autoreply.appdata=l.autoreply.name+"="+l.autoreply.value;break;case"custom":break;default:e[0]=l.autoreply.times,e[1]=l.autoreply.text,l.autoreply.appdata=e.join(",")}m(l.autoreply)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.close=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.close.appdata)switch(l.close.appType?l.close.appType.toLowerCase():l.close.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.close.appdata.split(",");l.close.key=d[0],l.close.language=d[1],l.close.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.close.appdata.split(",");l.close.accesskeyid=d[0],l.close.secretaccesskey=d[1],l.close.lexregion=d[2],l.close.botname=d[3],l.close.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.close.appdata.split(",");l.close.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.close.text=d.slice(1,d.length).join(",");break;case"message":l.close.text=l.close.appdata;break;case"set":l.close.name=l.close.appdata.split("=")[0],l.close.value=l.close.appdata.split("=")[1];break;case"agi":l.close.project=l.close.appdata;break;default:var c=l.close.appdata.split(",");l.close.disposition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outbounddial"===l.close.appType.toLowerCase()&&(l.close.prefix=l.close.phone?l.close.phone.split("$")[0]:void 0,l.close.callerId=l.close.callerID?"CALLERID(all)="+l.close.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outboundDial"===l.close.appType&&(l.close.phone=i.cutdigits?(l.close.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.close.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.close.options+="U(xcally-mixmonitor-context)"):l.close.options=l.close.options.replace("U(xcally-mixmonitor-context)",""));if(l.close.appType&&"custom"===l.close.appType);else switch((l.close.app||l.close.appType).toLowerCase()){case"set":l.close.appdata=l.close.name+"="+l.close.value;break;case"custom":break;default:e[0]=l.close.disposition,l.close.appdata=e.join(",")}m(l.close)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.dialogflow=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.dialogflow.appdata)switch(l.dialogflow.appType?l.dialogflow.appType.toLowerCase():l.dialogflow.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.dialogflow.appdata.split(",");l.dialogflow.key=d[0],l.dialogflow.language=d[1],l.dialogflow.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.dialogflow.appdata.split(",");l.dialogflow.accesskeyid=d[0],l.dialogflow.secretaccesskey=d[1],l.dialogflow.lexregion=d[2],l.dialogflow.botname=d[3],l.dialogflow.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.dialogflow.appdata.split(",");l.dialogflow.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.dialogflow.text=d.slice(1,d.length).join(",");break;case"message":l.dialogflow.text=l.dialogflow.appdata;break;case"set":l.dialogflow.name=l.dialogflow.appdata.split("=")[0],l.dialogflow.value=l.dialogflow.appdata.split("=")[1];break;case"agi":l.dialogflow.project=l.dialogflow.appdata;break;default:var c=l.dialogflow.appdata.split(",");l.dialogflow.key=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.dialogflow.language=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.dialogflow.welcomemessage=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}else l.dialogflow.language="en";function m(e){t.hide(e)}l.dialogflow.type&&"outbound"===l.dialogflow.type.toLowerCase()&&"outbounddial"===l.dialogflow.appType.toLowerCase()&&(l.dialogflow.prefix=l.dialogflow.phone?l.dialogflow.phone.split("$")[0]:void 0,l.dialogflow.callerId=l.dialogflow.callerID?"CALLERID(all)="+l.dialogflow.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.dialogflow.type&&"outbound"===l.dialogflow.type.toLowerCase()&&"outboundDial"===l.dialogflow.appType&&(l.dialogflow.phone=i.cutdigits?(l.dialogflow.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.dialogflow.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.dialogflow.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.dialogflow.options+="U(xcally-mixmonitor-context)"):l.dialogflow.options=l.dialogflow.options.replace("U(xcally-mixmonitor-context)",""));if(l.dialogflow.appType&&"custom"===l.dialogflow.appType);else switch((l.dialogflow.app||l.dialogflow.appType).toLowerCase()){case"set":l.dialogflow.appdata=l.dialogflow.name+"="+l.dialogflow.value;break;case"custom":break;default:e[0]=l.dialogflow.key,e[1]=l.dialogflow.language,e[2]=l.dialogflow.welcomemessage,l.dialogflow.appdata=e.join(",")}m(l.dialogflow)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppdialogflowDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotoif=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotoif.appdata)switch(l.gotoif.appType?l.gotoif.appType.toLowerCase():l.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotoif.appdata.split(",");l.gotoif.key=d[0],l.gotoif.language=d[1],l.gotoif.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotoif.appdata.split(",");l.gotoif.accesskeyid=d[0],l.gotoif.secretaccesskey=d[1],l.gotoif.lexregion=d[2],l.gotoif.botname=d[3],l.gotoif.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotoif.appdata.split(",");l.gotoif.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotoif.text=d.slice(1,d.length).join(",");break;case"message":l.gotoif.text=l.gotoif.appdata;break;case"set":l.gotoif.name=l.gotoif.appdata.split("=")[0],l.gotoif.value=l.gotoif.appdata.split("=")[1];break;case"agi":l.gotoif.project=l.gotoif.appdata;break;default:var c=l.gotoif.appdata.split(",");l.gotoif.condition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.gotoif.truepriority=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.gotoif.falsepriority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outbounddial"===l.gotoif.appType.toLowerCase()&&(l.gotoif.prefix=l.gotoif.phone?l.gotoif.phone.split("$")[0]:void 0,l.gotoif.callerId=l.gotoif.callerID?"CALLERID(all)="+l.gotoif.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outboundDial"===l.gotoif.appType&&(l.gotoif.phone=i.cutdigits?(l.gotoif.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotoif.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotoif.options+="U(xcally-mixmonitor-context)"):l.gotoif.options=l.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotoif.appType&&"custom"===l.gotoif.appType);else switch((l.gotoif.app||l.gotoif.appType).toLowerCase()){case"set":l.gotoif.appdata=l.gotoif.name+"="+l.gotoif.value;break;case"custom":break;default:e[0]=l.gotoif.condition,e[1]=l.gotoif.truepriority,e[2]=l.gotoif.falsepriority,l.gotoif.appdata=e.join(",")}m(l.gotoif)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotop.appdata)switch(l.gotop.appType?l.gotop.appType.toLowerCase():l.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotop.appdata.split(",");l.gotop.key=d[0],l.gotop.language=d[1],l.gotop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotop.appdata.split(",");l.gotop.accesskeyid=d[0],l.gotop.secretaccesskey=d[1],l.gotop.lexregion=d[2],l.gotop.botname=d[3],l.gotop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotop.appdata.split(",");l.gotop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotop.text=d.slice(1,d.length).join(",");break;case"message":l.gotop.text=l.gotop.appdata;break;case"set":l.gotop.name=l.gotop.appdata.split("=")[0],l.gotop.value=l.gotop.appdata.split("=")[1];break;case"agi":l.gotop.project=l.gotop.appdata;break;default:var c=l.gotop.appdata.split(",");l.gotop.priority=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outbounddial"===l.gotop.appType.toLowerCase()&&(l.gotop.prefix=l.gotop.phone?l.gotop.phone.split("$")[0]:void 0,l.gotop.callerId=l.gotop.callerID?"CALLERID(all)="+l.gotop.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outboundDial"===l.gotop.appType&&(l.gotop.phone=i.cutdigits?(l.gotop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotop.options+="U(xcally-mixmonitor-context)"):l.gotop.options=l.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotop.appType&&"custom"===l.gotop.appType);else switch((l.gotop.app||l.gotop.appType).toLowerCase()){case"set":l.gotop.appdata=l.gotop.name+"="+l.gotop.value;break;case"custom":break;default:e[0]=l.gotop.priority,l.gotop.appdata=e.join(",")}m(l.gotop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditChatWebsiteAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.noop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.noop.appdata)switch(l.noop.appType?l.noop.appType.toLowerCase():l.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.noop.appdata.split(",");l.noop.key=d[0],l.noop.language=d[1],l.noop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.noop.appdata.split(",");l.noop.accesskeyid=d[0],l.noop.secretaccesskey=d[1],l.noop.lexregion=d[2],l.noop.botname=d[3],l.noop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.noop.appdata.split(",");l.noop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.noop.text=d.slice(1,d.length).join(",");break;case"message":l.noop.text=l.noop.appdata;break;case"set":l.noop.name=l.noop.appdata.split("=")[0],l.noop.value=l.noop.appdata.split("=")[1];break;case"agi":l.noop.project=l.noop.appdata;break;default:var c=l.noop.appdata.split(",");l.noop.value=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outbounddial"===l.noop.appType.toLowerCase()&&(l.noop.prefix=l.noop.phone?l.noop.phone.split("$")[0]:void 0,l.noop.callerId=l.noop.callerID?"CALLERID(all)="+l.noop.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outboundDial"===l.noop.appType&&(l.noop.phone=i.cutdigits?(l.noop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.noop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.noop.options+="U(xcally-mixmonitor-context)"):l.noop.options=l.noop.options.replace("U(xcally-mixmonitor-context)",""));if(l.noop.appType&&"custom"===l.noop.appType);else switch((l.noop.app||l.noop.appType).toLowerCase()){case"set":l.noop.appdata=l.noop.name+"="+l.noop.value;break;case"custom":break;default:e[0]=l.noop.value,l.noop.appdata=e.join(",")}m(l.noop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppnoopDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.queue.queue=300,l.queue.timeout=300;function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.queues,{name:l.queue.queue});t&&(l.queue[_.capitalize("chat")+"QueueId"]=t.id);if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.timeout,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.chatQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.chatQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:501}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppqueueDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.system=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.system.appdata)switch(l.system.appType?l.system.appType.toLowerCase():l.system.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.system.appdata.split(",");l.system.key=d[0],l.system.language=d[1],l.system.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.system.appdata.split(",");l.system.accesskeyid=d[0],l.system.secretaccesskey=d[1],l.system.lexregion=d[2],l.system.botname=d[3],l.system.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.system.appdata.split(",");l.system.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.system.text=d.slice(1,d.length).join(",");break;case"message":l.system.text=l.system.appdata;break;case"set":l.system.name=l.system.appdata.split("=")[0],l.system.value=l.system.appdata.split("=")[1];break;case"agi":l.system.project=l.system.appdata;break;default:var c=l.system.appdata.split(",");l.system.command=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.system.variable=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.system.variable="";function m(e){t.hide(e)}l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outbounddial"===l.system.appType.toLowerCase()&&(l.system.prefix=l.system.phone?l.system.phone.split("$")[0]:void 0,l.system.callerId=l.system.callerID?"CALLERID(all)="+l.system.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outboundDial"===l.system.appType&&(l.system.phone=i.cutdigits?(l.system.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.system.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.system.options+="U(xcally-mixmonitor-context)"):l.system.options=l.system.options.replace("U(xcally-mixmonitor-context)",""));if(l.system.appType&&"custom"===l.system.appType);else switch((l.system.app||l.system.appType).toLowerCase()){case"set":l.system.appdata=l.system.name+"="+l.system.value;break;case"custom":break;default:e[0]=l.system.command,e[1]=l.system.variable,l.system.appdata=e.join(",")}m(l.system)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.system&&(n=_.find(l.variables,{name:l.system.variable})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.system&&(a=_.find(l.variables,{name:l.system.variable}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppsystemDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.tag=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.tag.appdata)switch(l.tag.appType?l.tag.appType.toLowerCase():l.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.tag.appdata.split(",");l.tag.key=d[0],l.tag.language=d[1],l.tag.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.tag.appdata.split(",");l.tag.accesskeyid=d[0],l.tag.secretaccesskey=d[1],l.tag.lexregion=d[2],l.tag.botname=d[3],l.tag.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.tag.appdata.split(",");l.tag.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.tag.text=d.slice(1,d.length).join(",");break;case"message":l.tag.text=l.tag.appdata;break;case"set":l.tag.name=l.tag.appdata.split("=")[0],l.tag.value=l.tag.appdata.split("=")[1];break;case"agi":l.tag.project=l.tag.appdata;break;default:var c=l.tag.appdata.split(",");l.tag.tag=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outbounddial"===l.tag.appType.toLowerCase()&&(l.tag.prefix=l.tag.phone?l.tag.phone.split("$")[0]:void 0,l.tag.callerId=l.tag.callerID?"CALLERID(all)="+l.tag.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outboundDial"===l.tag.appType&&(l.tag.phone=i.cutdigits?(l.tag.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.tag.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.tag.options+="U(xcally-mixmonitor-context)"):l.tag.options=l.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.tags,{name:l.tag.tag});t&&(l.tag.TagId=t.id);if(l.tag.appType&&"custom"===l.tag.appType);else switch((l.tag.app||l.tag.appType).toLowerCase()){case"set":l.tag.appdata=l.tag.name+"="+l.tag.value;break;case"custom":break;default:e[0]=l.tag.tag,l.tag.appdata=e.join(",")}m(l.tag)},l.closeDialog=m,o.hasRole("admin")?s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1008}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.tags,{id:e.resourceId})}),n=null;if(l.tag&&(n=_.find(l.tags,{name:l.tag.tag})),n&&!_.some(t,["id",n.id])){var a=_.find(l.tags,{id:n.id});a.canSelect=!1,t.push(a)}l.tags=t})}else{var n=[],a=null;l.tag&&(a=_.find(l.tags,{name:l.tag.tag}));for(var i=0;i<l.tags.length;i++)a&&l.tags[i].id===a.id&&(l.tags[i].canSelect=!1,n.push(l.tags[i]));l.tags=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtags",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteApptagDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteChatCannedAnswers={count:0,rows:[]},c.selectedChatWebsiteChatCannedAnswers=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,key,value,description",limit:10,page:1},c.init=function(e,t){c.chatWebsite=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.chatWebsite.id,c.query.ChatWebsiteId=c.chatWebsite.id,c.getChatWebsiteChatCannedAnswers()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the chatCannedAnswer?").htmlContent("<b>"+(e.name||"chatCannedAnswer")+"</b> will be deleted.").ariaLabel("delete chatCannedAnswer").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getChatWebsiteChatCannedAnswers=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.chatWebsite.getAnswers(c.query,p).$promise},c.createOrEditChatWebsiteChatCannedAnswer=function(e,t){s.show({controller:"CreateOrEditChatCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/chatCannedAnswers/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,chatCannedAnswer:t,chatCannedAnswers:c.chatWebsiteChatCannedAnswers.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedChatWebsiteChatCannedAnswers=function(){var e=angular.copy(c.selectedChatWebsiteChatCannedAnswers);return c.selectedChatWebsiteChatCannedAnswers=[],e},c.deleteChatWebsiteChatCannedAnswer=g,c.deleteSelectedChatWebsiteChatCannedAnswers=function(e){var t=s.confirm().title("Are you sure want to delete the selected chatCannedAnswers?").htmlContent("<b>"+c.selectedChatWebsiteChatCannedAnswers.length+" selected</b> will be deleted.").ariaLabel("delete chatCannedAnswers").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedChatWebsiteChatCannedAnswers.forEach(function(e){g(e)}),c.selectedChatWebsiteChatCannedAnswers=[]})};var m=!0,u=1;function p(e){c.chatWebsiteChatCannedAnswers=e||{count:0,rows:[]}}function g(e){l.cannedAnswer.delete({id:e.id}).$promise.then(function(){_.remove(c.chatWebsiteChatCannedAnswers.rows,{id:e.id}),c.chatWebsiteChatCannedAnswers.count-=1,c.chatWebsiteChatCannedAnswers.rows.length||c.getChatWebsiteChatCannedAnswers(),r.success({title:"ChatCannedAnswer deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETchatWebsite"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getChatWebsiteChatCannedAnswers())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.chat").controller("ChatWebsiteChatCannedAnswersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CHAT.EDIT_CHATCANNEDANSWER",g.chatCannedAnswer=angular.copy(l),g.chatCannedAnswers=r,g.newChatCannedAnswer=!1,g.chatCannedAnswer||(g.chatCannedAnswer={},g.title="CHAT.NEW_CHATCANNEDANSWER",g.newChatCannedAnswer=!0),t.params.id&&(g.chatCannedAnswer.ChatWebsiteId=t.params.id),g.addNewChatCannedAnswer=function(){g.errors=[],d.cannedAnswer.save(g.chatCannedAnswer).$promise.then(function(e){g.chatCannedAnswers.unshift(e.toJSON()),o.success({title:"ChatCannedAnswer properly created",msg:g.chatCannedAnswer.name?g.chatCannedAnswer.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveChatCannedAnswer=function(){g.errors=[],d.cannedAnswer.update({id:g.chatCannedAnswer.id},g.chatCannedAnswer).$promise.then(function(e){var t=_.find(g.chatCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatCannedAnswer properly saved!",msg:g.chatCannedAnswer.name?g.chatCannedAnswer.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteChatCannedAnswer=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The chatCannedAnswer will be deleted.").ariaLabel("Delete ChatCannedAnswer").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cannedAnswer.delete({id:g.chatCannedAnswer.id}).$promise.then(function(){_.remove(g.chatCannedAnswers,{id:g.chatCannedAnswer.id}),o.success({title:"ChatCannedAnswer properly deleted!",msg:(g.chatCannedAnswer.name||"chatCannedAnswer")+" has been deleted!"}),v(g.chatCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","chatCannedAnswers","chatCannedAnswer","api","Auth","license","setting","crudPermissions"],angular.module("app.chat").controller("CreateOrEditChatCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteChatDispositions={count:0,rows:[]},c.selectedChatWebsiteChatDispositions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e,t){c.chatWebsite=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.chatWebsite.id,c.query.ChatWebsiteId=c.chatWebsite.id,c.getChatWebsiteChatDispositions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the chatDisposition?").htmlContent("<b>"+(e.name||"chatDisposition")+"</b> will be deleted.").ariaLabel("delete chatDisposition").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getChatWebsiteChatDispositions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.chatWebsite.getDispositions(c.query,p).$promise},c.createOrEditChatWebsiteChatDisposition=function(e,t){s.show({controller:"CreateOrEditChatDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/chatDispositions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,chatDisposition:t,chatDispositions:c.chatWebsiteChatDispositions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedChatWebsiteChatDispositions=function(){var e=angular.copy(c.selectedChatWebsiteChatDispositions);return c.selectedChatWebsiteChatDispositions=[],e},c.deleteChatWebsiteChatDisposition=g,c.deleteSelectedChatWebsiteChatDispositions=function(e){var t=s.confirm().title("Are you sure want to delete the selected chatDispositions?").htmlContent("<b>"+c.selectedChatWebsiteChatDispositions.length+" selected</b> will be deleted.").ariaLabel("delete chatDispositions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedChatWebsiteChatDispositions.forEach(function(e){g(e)}),c.selectedChatWebsiteChatDispositions=[]})};var m=!0,u=1;function p(e){c.chatWebsiteChatDispositions=e||{count:0,rows:[]}}function g(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(c.chatWebsiteChatDispositions.rows,{id:e.id}),c.chatWebsiteChatDispositions.count-=1,c.chatWebsiteChatDispositions.rows.length||c.getChatWebsiteChatDispositions(),r.success({title:"ChatDisposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETchatWebsite"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getChatWebsiteChatDispositions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.chat").controller("ChatWebsiteChatDispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CHAT.EDIT_CHATDISPOSITION",g.chatDisposition=angular.copy(l),g.chatDispositions=r,g.newChatDisposition=!1,g.chatDisposition||(g.chatDisposition={},g.title="CHAT.NEW_CHATDISPOSITION",g.newChatDisposition=!0),t.params.id&&(g.chatDisposition.ChatWebsiteId=t.params.id),g.addNewChatDisposition=function(){g.errors=[],d.disposition.save(g.chatDisposition).$promise.then(function(e){g.chatDispositions.unshift(e.toJSON()),o.success({title:"ChatDisposition properly created",msg:g.chatDisposition.name?g.chatDisposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveChatDisposition=function(){g.errors=[],d.disposition.update({id:g.chatDisposition.id},g.chatDisposition).$promise.then(function(e){var t=_.find(g.chatDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatDisposition properly saved!",msg:g.chatDisposition.name?g.chatDisposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteChatDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The chatDisposition will be deleted.").ariaLabel("Delete ChatDisposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.chatDisposition.id}).$promise.then(function(){_.remove(g.chatDispositions,{id:g.chatDisposition.id}),o.success({title:"ChatDisposition properly deleted!",msg:(g.chatDisposition.name||"chatDisposition")+" has been deleted!"}),v(g.chatDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","chatDispositions","chatDisposition","api","Auth","license","setting","crudPermissions"],angular.module("app.chat").controller("CreateOrEditChatDispositionDialogController",e)}(),function(){"use strict";function e(n,e,a){var i=this;i.chatWebsite={},i.offlineForm={},i.buttons=[{type:"label",name:"Label",icon:"icon-label"},{type:"chooseFromList",name:"Select",icon:"icon-playlist-plus"},{type:"input",name:"Input",icon:"icon-keyboard"},{type:"textarea",name:"Textarea",icon:"icon-format-text"},{type:"multipleChoices",name:"Radio Buttons",icon:"icon-radiobox-marked"},{type:"checkboxes",name:"Checkboxes",icon:"icon-checkbox-multiple-marked-outline"},{type:"agreement",name:"Agreement",icon:"icon-checkbox-marked-outline"}],i.init=function(e){i.fields=[],i.customFields=[],i.uselessFields=["id","createdAt","updatedAt","ListId","CompanyId","$promise","$resolved"],i.chatWebsite=e,_.isEmpty(i.chatWebsite.offlineForm)&&(i.chatWebsite.offlineForm={items:[],fromKey:null});a.cmList.getCustomFields({id:i.chatWebsite.ListId}).$promise.then(function(e){for(var t=0;t<e.rows.length;t++)i.customFields.push({key:"cf_"+e.rows[t].id,value:e.rows[t].alias});return a.cmContact.describe().$promise}).then(function(e){for(var t=_.keys(e),n=0;n<t.length;n++)_.includes(i.uselessFields,t[n])||_.startsWith(t[n],"cf_")||i.fields.unshift({key:t[n],value:t[n]});return a.variable.get().$promise}).then(function(e){i.variables=e.rows}).catch(function(e){console.error(e)})},i.up=function(e,t){if(0!==t){var n=i.chatWebsite.offlineForm.items[t-1];i.chatWebsite.offlineForm.items[t]=n,i.chatWebsite.offlineForm.items[t-1]=angular.copy(e),i.chatWebsite.offlineForm.fromKey===t?i.chatWebsite.offlineForm.fromKey--:i.chatWebsite.offlineForm.fromKey===t-1&&i.chatWebsite.offlineForm.fromKey++}},i.down=function(e,t){if(t!==i.chatWebsite.offlineForm.items.length-1){var n=i.chatWebsite.offlineForm.items[t+1];i.chatWebsite.offlineForm.items[t]=n,i.chatWebsite.offlineForm.items[t+1]=angular.copy(e),i.chatWebsite.offlineForm.fromKey===t?i.chatWebsite.offlineForm.fromKey++:i.chatWebsite.offlineForm.fromKey===t+1&&i.chatWebsite.offlineForm.fromKey--}},i.add=function(e){i.chatWebsite.offlineForm.items.push({type:e,cmField:null,variable:null})},i.remove=function(e){var t=n.confirm().title("The component will be deleted.").textContent("Are you sure?").ariaLabel("Lucky day").ok("Ok").cancel("Cancel");n.show(t).then(function(){i.chatWebsite.offlineForm.items.splice(e,1)})}}e.$inject=["$mdDialog","$document","api"],angular.module("app.chat").controller("ChatWebsiteofflineFormController",e)}(),function(){"use strict";function e(n,e,a){var i=this;i.chatWebsite={},i.onlineForm={},i.buttons=[{type:"label",name:"Label",icon:"icon-label"},{type:"chooseFromList",name:"Select",icon:"icon-playlist-plus"},{type:"input",name:"Input",icon:"icon-keyboard"},{type:"textarea",name:"Textarea",icon:"icon-format-text"},{type:"multipleChoices",name:"Radio Buttons",icon:"icon-radiobox-marked"},{type:"checkboxes",name:"Checkboxes",icon:"icon-checkbox-multiple-marked-outline"},{type:"agreement",name:"Agreement",icon:"icon-checkbox-marked-outline"}],i.init=function(e){i.fields=[],i.customFields=[],i.uselessFields=["id","createdAt","updatedAt","ListId","CompanyId","$promise","$resolved"],i.chatWebsite=e,_.isEmpty(i.chatWebsite.onlineForm)&&(i.chatWebsite.onlineForm={items:[],fromKey:null});a.cmList.getCustomFields({id:i.chatWebsite.ListId}).$promise.then(function(e){for(var t=0;t<e.rows.length;t++)i.customFields.push({key:"cf_"+e.rows[t].id,value:e.rows[t].alias});return a.cmContact.describe().$promise}).then(function(e){for(var t=_.keys(e),n=0;n<t.length;n++)_.includes(i.uselessFields,t[n])||_.startsWith(t[n],"cf_")||i.fields.unshift({key:t[n],value:t[n]});return a.variable.get().$promise}).then(function(e){i.variables=e.rows}).catch(function(e){console.error(e)})},i.up=function(e,t){if(0!==t){var n=i.chatWebsite.onlineForm.items[t-1];i.chatWebsite.onlineForm.items[t]=n,i.chatWebsite.onlineForm.items[t-1]=angular.copy(e),i.chatWebsite.onlineForm.fromKey===t?i.chatWebsite.onlineForm.fromKey--:i.chatWebsite.onlineForm.fromKey===t-1&&i.chatWebsite.onlineForm.fromKey++}},i.down=function(e,t){if(t!==i.chatWebsite.onlineForm.items.length-1){var n=i.chatWebsite.onlineForm.items[t+1];i.chatWebsite.onlineForm.items[t]=n,i.chatWebsite.onlineForm.items[t+1]=angular.copy(e),i.chatWebsite.onlineForm.fromKey===t?i.chatWebsite.onlineForm.fromKey++:i.chatWebsite.onlineForm.fromKey===t+1&&i.chatWebsite.onlineForm.fromKey--}},i.add=function(e){i.chatWebsite.onlineForm.items.push({type:e,cmField:null,variable:null})},i.remove=function(e){var t=n.confirm().title("The component will be deleted.").textContent("Are you sure?").ariaLabel("Lucky day").ok("Ok").cancel("Cancel");n.show(t).then(function(){i.chatWebsite.onlineForm.fromKey===e&&(i.chatWebsite.onlineForm.fromKey=null),i.chatWebsite.onlineForm.items.splice(e,1),i.chatWebsite.onlineForm.items.length||(i.chatWebsite.onlineForm.fromKey=null)})}}e.$inject=["$mdDialog","$document","api"],angular.module("app.chat").controller("ChatWebsiteonlineFormController",e)}(),function(){"use strict";function e(e,a){var i=this;i.chatWebsite={},i.crudPermissions,i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.chatWebsite.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.chatWebsite.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e,t){i.chatWebsite=angular.copy(e),i.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.ngFlowOptions.target="/api/chat/websites/:id/customer_avatar".replace(":id",i.chatWebsite.id),i.chatWebsite.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.chat").controller("ChatWebsitecustomerAvatarController",e)}(),function(){"use strict";function e(e,a,t,n,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteInteractions={count:0,rows:[]},c.selectedChatWebsiteInteractions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,UserId,ContactId,ChatWebsiteId,id,closedAt,Contact.firstName,Owner.name,disposition,ratingValue,ratingType,note,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e,t){c.chatWebsite=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.chatWebsite.id,c.getChatWebsiteInteractions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the interaction?").htmlContent("<b>"+(e.name||"interaction")+"</b> will be deleted.").ariaLabel("delete interaction").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.chatInteractionDownload=function(s,e,t){return l.chatInteraction.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="interaction"+s.id,a=new Blob(t,{type:e.type});n="chat-interaction"+s.id+".zip";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatWebsite.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getChatWebsiteInteractions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.chatWebsite.getInteractions(c.query,p).$promise},c.createOrEditChatWebsiteInteraction=function(e,t){s.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/interactions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,interaction:t,interactions:c.chatWebsiteInteractions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.spychatInteraction=function(e,n){s.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,onShowing:function(e,t){e.vm.init({id:1,channel:"chat",interaction:n,spy:!0},a.$parent.vm.setting)}})},c.exportSelectedChatWebsiteInteractions=function(){var e=angular.copy(c.selectedChatWebsiteInteractions);return c.selectedChatWebsiteInteractions=[],e},c.deleteChatWebsiteInteraction=g,c.deleteSelectedChatWebsiteInteractions=function(e){var t=s.confirm().title("Are you sure want to delete the selected interactions?").htmlContent("<b>"+c.selectedChatWebsiteInteractions.length+" selected</b> will be deleted.").ariaLabel("delete interactions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedChatWebsiteInteractions.forEach(function(e){g(e)}),c.selectedChatWebsiteInteractions=[]})};var m=!0,u=1;function p(e){c.chatWebsiteInteractions=e||{count:0,rows:[]}}function g(e){l.chatInteraction.delete({id:e.id}).$promise.then(function(){_.remove(c.chatWebsiteInteractions.rows,{id:e.id}),c.chatWebsiteInteractions.count-=1,c.chatWebsiteInteractions.rows.length||c.getChatWebsiteInteractions(),r.success({title:"Interaction deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETchatWebsite"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}a.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getChatWebsiteInteractions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.chat").controller("ChatWebsiteInteractionsController",e)}(),function(){"use strict";function e(e,a){var i=this;i.chatWebsite={},i.crudPermissions,i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.chatWebsite.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.chatWebsite.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e,t){i.chatWebsite=angular.copy(e),i.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.ngFlowOptions.target="/api/chat/websites/:id/logo".replace(":id",i.chatWebsite.id),i.chatWebsite.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.chat").controller("ChatWebsitelogoController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteOfflineMessages={count:0,rows:[]},c.selectedChatWebsiteOfflineMessages=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,ContactId",sort:"-createdAt",limit:10,page:1},c.init=function(e,t){c.chatWebsite=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.chatWebsite.id,c.getChatWebsiteOfflineMessages()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the offlineMessage?").htmlContent("<b>"+(e.name||"offlineMessage")+"</b> will be deleted.").ariaLabel("delete offlineMessage").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getChatWebsiteOfflineMessages=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.chatWebsite.getOfflineMessages(c.query,p).$promise},c.createOrEditChatWebsiteOfflineMessage=function(e,t){s.show({controller:"CreateOrEditOfflineMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/offlineMessages/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,offlineMessage:t,offlineMessages:c.chatWebsiteOfflineMessages.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.showOfflineMessageChatWebsiteOfflineMessage=function(e,n){s.show({controller:"ShowOfflineMessageOfflineMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/offlineMessages/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,resolve:{message:["apiResolver","$stateParams",function(e,t){return e.resolve("chatOfflineMessage@get",{fields:"id,body",id:n.id})}]}})},c.exportSelectedChatWebsiteOfflineMessages=function(){var e=angular.copy(c.selectedChatWebsiteOfflineMessages);return c.selectedChatWebsiteOfflineMessages=[],e},c.deleteChatWebsiteOfflineMessage=g,c.deleteSelectedChatWebsiteOfflineMessages=function(e){var t=s.confirm().title("Are you sure want to delete the selected offlineMessages?").htmlContent("<b>"+c.selectedChatWebsiteOfflineMessages.length+" selected</b> will be deleted.").ariaLabel("delete offlineMessages").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedChatWebsiteOfflineMessages.forEach(function(e){g(e)}),c.selectedChatWebsiteOfflineMessages=[]})},l.cmContact.get({fields:"id,firstName,lastName",nolimit:"true"}).$promise.then(function(e){c.contacts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTACTS",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=!0,u=1;function p(e){c.chatWebsiteOfflineMessages=e||{count:0,rows:[]}}function g(e){l.chatOfflineMessage.delete({id:e.id}).$promise.then(function(){_.remove(c.chatWebsiteOfflineMessages.rows,{id:e.id}),c.chatWebsiteOfflineMessages.count-=1,c.chatWebsiteOfflineMessages.rows.length||c.getChatWebsiteOfflineMessages(),r.success({title:"OfflineMessage deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETchatWebsite"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getChatWebsiteOfflineMessages())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.chat").controller("ChatWebsiteOfflineMessagesController",e)}(),function(){"use strict";function e(t,e){this.title="CHAT.OFFLINE_MESSAGE",this.message=e,this.closeDialog=function(e){t.hide(e)}}e.$inject=["$mdDialog","message"],angular.module("app.chat").controller("ShowOfflineMessageOfflineMessageDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteProactiveActions={count:0,rows:[]},c.selectedChatWebsiteProactiveActions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name,type,selector,timeout",limit:10,page:1},c.arraytype=_.keyBy([{option:"MouseOver",value:"'mouseOver'"},{option:"Timeout",value:"'timeout'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.chatWebsite=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.chatWebsite.id,c.query.ChatWebsiteId=c.chatWebsite.id,c.getChatWebsiteProactiveActions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the chatProactiveAction?").htmlContent("<b>"+(e.name||"chatProactiveAction")+"</b> will be deleted.").ariaLabel("delete chatProactiveAction").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getChatWebsiteProactiveActions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.chatWebsite.getProactiveActions(c.query,p).$promise},c.createOrEditChatWebsiteChatProactiveAction=function(e,t){s.show({controller:"CreateOrEditChatProactiveActionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/proactive/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,chatProactiveAction:t,proactive:c.chatWebsiteProactiveActions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedChatWebsiteProactiveActions=function(){var e=angular.copy(c.selectedChatWebsiteProactiveActions);return c.selectedChatWebsiteProactiveActions=[],e},c.deleteChatWebsiteChatProactiveAction=g,c.deleteSelectedChatWebsiteProactiveActions=function(e){var t=s.confirm().title("Are you sure want to delete the selected proactive?").htmlContent("<b>"+c.selectedChatWebsiteProactiveActions.length+" selected</b> will be deleted.").ariaLabel("delete proactive").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedChatWebsiteProactiveActions.forEach(function(e){g(e)}),c.selectedChatWebsiteProactiveActions=[]})};var m=!0,u=1;function p(e){c.chatWebsiteProactiveActions=e||{count:0,rows:[]}}function g(e){l.chatProactiveAction.delete({id:e.id}).$promise.then(function(){_.remove(c.chatWebsiteProactiveActions.rows,{id:e.id}),c.chatWebsiteProactiveActions.count-=1,c.chatWebsiteProactiveActions.rows.length||c.getChatWebsiteProactiveActions(),r.success({title:"ChatProactiveAction deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETchatWebsite"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getChatWebsiteProactiveActions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.chat").controller("ChatWebsiteProactiveActionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CHAT.EDIT_CHATPROACTIVEACTION",g.chatProactiveAction=angular.copy(l),g.proactive=r,g.newChatProactiveAction=!1,g.chatProactiveAction||(g.chatProactiveAction={type:"mouseOver"},g.title="CHAT.NEW_CHATPROACTIVEACTION",g.newChatProactiveAction=!0),t.params.id&&(g.chatProactiveAction.ChatWebsiteId=t.params.id),g.addNewChatProactiveAction=function(){g.errors=[],d.chatProactiveAction.save(g.chatProactiveAction).$promise.then(function(e){g.proactive.unshift(e.toJSON()),o.success({title:"ChatProactiveAction properly created",msg:g.chatProactiveAction.name?g.chatProactiveAction.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatProactiveAction.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatProactiveAction.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveChatProactiveAction=function(){g.errors=[],d.chatProactiveAction.update({id:g.chatProactiveAction.id},g.chatProactiveAction).$promise.then(function(e){var t=_.find(g.proactive,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatProactiveAction properly saved!",msg:g.chatProactiveAction.name?g.chatProactiveAction.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatProactiveAction.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatProactiveAction.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteChatProactiveAction=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The chatProactiveAction will be deleted.").ariaLabel("Delete ChatProactiveAction").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.chatProactiveAction.delete({id:g.chatProactiveAction.id}).$promise.then(function(){_.remove(g.proactive,{id:g.chatProactiveAction.id}),o.success({title:"ChatProactiveAction properly deleted!",msg:(g.chatProactiveAction.name||"chatProactiveAction")+" has been deleted!"}),v(g.chatProactiveAction)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatProactiveAction.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatProactiveAction.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","proactive","chatProactiveAction","api","Auth","license","setting","crudPermissions"],angular.module("app.chat").controller("CreateOrEditChatProactiveActionDialogController",e)}(),function(){"use strict";function e(e){var t=this;t.chatWebsite={},t.init=function(e){t.chatWebsite=e,t.start="\n\x3c!-- START Motion Chat Script --\x3e",t.script='\n    <script src="'+t.chatWebsite.remote+"/api/chat/websites/"+t.chatWebsite.id+"/snippet?token="+t.chatWebsite.token+'"><\/script>',t.end="\n\x3c!-- START Motion Chat Script --\x3e"},t.info={},e.$watch("vm_ac.chatWebsite.remote",function(e){t.script='\n    <script src="'+t.chatWebsite.remote+"/api/chat/websites/"+t.chatWebsite.id+"/snippet?token="+t.chatWebsite.token+'"><\/script>'})}e.$inject=["$scope"],angular.module("app.chat").controller("ChatWebsiteScriptController",e)}(),function(){"use strict";function e(e,a){var i=this;i.chatWebsite={},i.crudPermissions,i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.chatWebsite.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.chatWebsite.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e,t){i.chatWebsite=angular.copy(e),i.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.ngFlowOptions.target="/api/chat/websites/:id/system_avatar".replace(":id",i.chatWebsite.id),i.chatWebsite.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.chat").controller("ChatWebsitesystemAvatarController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.chatWebsite=c||e.params.chatWebsite||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.agentadddialog=function(e,t){n.show({controller:"ChatWebsiteagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatWebsite:e,chatWebsites:u.chatWebsites?u.chatWebsites.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoChatWebsites=function(){e.go("app.chat.chatWebsites")},u.saveChatWebsite=function(){r.chatWebsite.update({id:u.chatWebsite.id},u.chatWebsite).$promise.then(function(){l.success({title:"ChatWebsite updated!",msg:u.chatWebsite.name?u.chatWebsite.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.lists,{id:e.resourceId})}),n=null;if(u.chatWebsite&&(n=_.find(u.lists,{id:Number(u.chatWebsite.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.lists,{id:n.id});a.canSelect=!1,t.push(a)}u.lists=t})}else{var n=[],a=null;u.chatWebsite&&(a=_.find(u.lists,{id:Number(u.chatWebsite.ListId)}));for(var i=0;i<u.lists.length;i++)a&&u.lists[i].id===a.id&&(u.lists[i].canSelect=!1,n.push(u.lists[i]));u.lists=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.interval,{id:e.resourceId})}),n=null;if(u.chatWebsite&&(n=_.find(u.interval,{id:Number(u.chatWebsite.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.interval,{id:n.id});a.canSelect=!1,t.push(a)}u.interval=t})}else{var n=[],a=null;u.chatWebsite&&(a=_.find(u.interval,{id:Number(u.chatWebsite.IntervalId)}));for(var i=0;i<u.interval.length;i++)a&&u.interval[i].id===a.id&&(u.interval[i].canSelect=!1,n.push(u.interval[i]));u.interval=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","chatWebsite","userProfileSection"],angular.module("app.chat").controller("ChatWebsiteController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"chat",direction:"inbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsChatRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.chatQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].ChatQueueId].paused++,g.queues[e[t].rows[n].ChatQueueId].loggedInDb++,g.queues[e[t].rows[n].ChatQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].ChatQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"chat",type:"inbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.chatQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="ChatQueues",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditChatQueue=function(e,t){a.show({controller:"CreateOrEditChatQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatQueue:t,chatQueues:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.agentAdd=function(e,t){a.show({controller:"ChatQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatQueue:t,chatQueues:g.queues?g.queues.rows:[],realtime:!1,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.chatQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&_.merge(g.queues[e.id],_.pick(e,v))},g.onSaveMember=function(e){g.queues[e.ChatQueueId]&&g.queues[e.ChatQueueId].loggedInDb++},g.onRemoveMember=function(e){g.queues[e.ChatQueueId]&&g.queues[e.ChatQueueId].loggedInDb--},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.ChatQueueId]&&(g.queues[e.ChatQueueId].loggedInDb+=1,g.queues[e.ChatQueueId].agents[e.UserId]=e.ChatQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.ChatQueueId]&&0<g.queues[e.ChatQueueId].loggedInDb&&(g.queues[e.ChatQueueId].loggedInDb-=1,delete g.queues[e.ChatQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.on("chat_queue:save",g.onSave),d.on("userChatQueue:save",g.onSaveMember),d.on("userChatQueue:remove",g.onRemoveMember),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("chat_queue:save"),d.removeAllListeners("userChatQueue:remove"),d.removeAllListeners("userChatQueue:save"),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.chat").controller("QueuesChatRealtimeController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){switch(t.disconnect(),t.connect(),this.selectedTab=0,n.current.name){case"app.chat.realtime.agents":this.selectedTab=0;break;case"app.chat.realtime.queues":this.selectedTab=1;break;default:this.selectedTab=0,n.go("app.chat.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.chat.realtime.agents");break;case 1:n.go("app.chat.realtime.queues");break;default:n.go("app.chat.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.chat").controller("ChatRealtimeController",e)}(),function(){"use strict";function e(e,t,a,n,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.companies=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="companies",b.listOrder="",b.listOrderAsc=null,b.selectedCompanies=[],b.query={fields:"createdAt,updatedAt,id,name,phone,vat,fax,companyId,type,website,emailDomain,email,description,sStreet,sPostalCode,sCity,sCountry,street,postalCode,city,country",sort:"-updatedAt",limit:10,page:1},b.editstate=function(e,t){a.go("app.contactmanager.companies.edit",{id:e.id,company:e,crudPermissions:b.crudPermissions})},b.gotocontactsgoto=function(n,e){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:303}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?a.go("app.contactmanager.contacts",{CompanyId:n.id}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});a.go("app.contactmanager.contacts",{CompanyId:n.id})}},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("company")+"?").htmlContent("<b>"+(e.name||"company")+"</b> will be deleted.").ariaLabel("delete company").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getCompanies=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.cmCompany.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Companies",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditCompany=function(e,t){i.show({controller:"CreateOrEditCompanyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/companies/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{company:t,companies:b.companies.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteCompany=S,b.exportSelectedCompanies=function(){var e=angular.copy(b.selectedCompanies);return b.selectedCompanies=[],e},b.deleteSelectedCompanies=function(e){var t=i.confirm().title("Are you sure want to delete the selected companies?").htmlContent("<b>"+b.selectedCompanies.length+" selected</b> will be deleted.").ariaLabel("delete Companys").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedCompanies.forEach(function(e){S(e)}),b.selectedCompanies=[]})},b.deselectCompanies=function(){b.selectedCompanies=[]},b.selectAllCompanies=function(){b.selectedCompanies=b.companies.rows};var A=!0,E=1;function y(e){b.companies=e||{count:0,rows:[]}}function S(e){m.cmCompany.delete({id:e.id}).$promise.then(function(){_.remove(b.companies.rows,{id:e.id}),b.companies.count-=1,b.companies.rows.length||b.getCompanies(),p.success({title:_.startCase("Company")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcmCompany"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEcmCompany",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getCompanies())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","companies","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.contactmanager").controller("CompaniesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CONTACTMANAGER.EDIT_COMPANY",g.company=angular.copy(l),g.companies=r,g.newCompany=!1,g.company||(g.company={},g.title="CONTACTMANAGER.NEW_COMPANY",g.newCompany=!0),g.addNewCompany=function(){g.errors=[],d.cmCompany.save(g.company).$promise.then(function(e){g.companies.unshift(e.toJSON()),o.success({title:"Company properly created",msg:g.company.name?g.company.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCompany.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCompany.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveCompany=function(){g.errors=[],d.cmCompany.update({id:g.company.id},g.company).$promise.then(function(e){var t=_.find(g.companies,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Company properly saved!",msg:g.company.name?g.company.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCompany.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCompany.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteCompany=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The company will be deleted.").ariaLabel("Delete Company").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cmCompany.delete({id:g.company.id}).$promise.then(function(){_.remove(g.companies,{id:g.company.id}),o.success({title:"Company properly deleted!",msg:(g.company.name||"company")+" has been deleted!"}),v(g.company)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCompany.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCompany.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","companies","company","api","Auth","license","setting","crudPermissions"],angular.module("app.contactmanager").controller("CreateOrEditCompanyDialogController",e)}(),function(){"use strict";function e(a,e,t,n,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.company=c||a.params.company||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=a.params.tab||0,u.gotogoto=function(n,e){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:303}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?a.go("app.contactmanager.contacts",{CompanyId:n.id}):l.info({title:i.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:i.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});a.go("app.contactmanager.contacts",{CompanyId:n.id})}},u.alert=l.info,u.gotoCompanies=function(){a.go("app.contactmanager.companies")},u.saveCompany=function(){r.cmCompany.update({id:u.company.id},u.company).$promise.then(function(){l.success({title:"Company updated!",msg:u.company.name?u.company.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcmCompany",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","company","userProfileSection"],angular.module("app.contactmanager").controller("CompanyController",e)}(),function(){"use strict";function e(t,i,n,a,e,s,o,r,l,d,c,m,u,p,g,v,h,f,b){var A=this;A.currentUser=f.getCurrentUser(),A.license=b,A.userProfile=r,A.userProfileSection=l&&1==l.count?l.rows[0]:null,A.crudPermissions=f.parseCrudPermissions(A.userProfileSection?A.userProfileSection.crudPermissions:null);var E=60,y=1024*E*1024;A.ngFlowOptions={target:"api/cm/contacts/upload",singleFile:!0,maxChunkRetries:1,chunkSize:y,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},A.contacts=c||{count:0,rows:[]},A.options={hidden:!1,hover:!1,isOpen:!1},A.table="cm_contacts",A.selectedContacts=[],A.lists=m||{rows:[],count:0},A.companies=p||{rows:[],count:0},A.tags=v||{rows:[],count:0},A.listsMap=u,A.companiesMap=g,A.selectedTags=[],A.selectedList=null,A.selectedCompany=null,A.query=_.merge({includeAll:!0,sort:"-updatedAt",limit:10,offset:0,page:1},e),A.editdialog=function(e,t){a.go("app.contactmanager.contacts.edit",{id:e.id,crudPermissions:A.crudPermissions})},A.deleteconfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the contact?").htmlContent("<b>"+(e.firstName||e.email||e.phone||"Contact")+"</b> will be deleted.").ariaLabel("delete contact").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){C(e)})},A.success=I,A.getContacts=function(){A.query.offset=(A.query.page-1)*A.query.limit,f.hasRole("admin")?A.promise=d.cmContact.get(A.query,I).$promise:(A.query.id=A.userProfile.id,A.query.ListId=A.query.ListId?A.query.ListId:_.map(A.lists.rows,"id"),A.query.CompanyId=A.query.CompanyId?A.query.CompanyId:_(A.companies.rows).filter({canSelect:void 0}).map("id").value(),A.query.section="Contacts",A.promise=d.userProfile.getResources(A.query,I).$promise)},A.getAssignedCompanies=function(){if(!f.hasRole("admin")){var e=_(A.contacts.rows).map(function(e){return{id:e.CompanyId}}).uniqBy("id").filter(function(e){return e.id&&0<e.id}).pullAllBy(A.companies.rows,"id").value();if(!_.isEmpty(e)){var t=[];e.forEach(function(e){t.push(d.cmCompany.get({id:e.id,fields:"id,name"}).$promise)}),o.all(t).then(function(e){e.forEach(function(e){var t=e.toJSON();t.canSelect=!1,A.companies.rows.push(t);var n={};n[t.id]=t.name,A.companiesMap=_.assignIn(A.companiesMap,n)})}).catch(function(e){h.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_COMPANY",msg:e.data?JSON.stringify(e.data.message):e.toString()})})}}},A.mergeContact=function(e,t){s.show({controller:"MergeContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/merge/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:t.id})}],lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"id,name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Lists",fields:"id,name",nolimit:!0})}]},locals:{contacts:A.contacts.rows}})},A.duplicateContact=function(e,t){s.show({controller:"DuplicateContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:t.id})}],lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"id,name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Lists",fields:"id,name",nolimit:!0})}]},locals:{contacts:A.contacts.rows}})},A.createOrEditContact=function(e,t){t&&t.dateOfBirth&&(t.dateOfBirth=new Date(t.dateOfBirth));s.show({controller:"CreateOrEditContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{ListId:A.query.ListId||a.params.ListId,CompanyId:A.query.CompanyId||a.params.CompanyId,contact:t,contacts:A.contacts.rows,companies:A.companies,lists:A.lists,setting:null,crudPermissions:A.crudPermissions}})},A.deleteContact=C,A.exportSelectedContacts=function(){var e=angular.copy(A.selectedContacts);return A.selectedContacts=[],e},A.deleteSelectedContacts=function(e){var t=s.confirm().title("Are you sure want to delete the selected contacts?").htmlContent("<b>"+A.selectedContacts.length+" selected</b> will be deleted.").ariaLabel("delete Contacts").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){A.selectedContacts.forEach(function(e){C(e)}),A.selectedContacts=[]})},A.deselectContacts=function(){A.selectedContacts=[]},A.selectAllContacts=function(){A.selectedContacts=A.contacts.rows},A.createTag=function(e){var t=s.prompt().title("What would you name your tag?").placeholder("Tag name").ariaLabel("Tag name").targetEvent(e).ok("Ok").cancel("Cancel");return s.show(t).then(function(e){if(e)return d.tag.save({name:e});h.error({title:"Error creating tag!",msg:"Invalid tag name."})}).then(function(e){e&&(A.tags.rows.push(e),h.success({title:"Tag properly created!",msg:e.tag?e.name+" has been created!":""}))})},A.createList=function(e){var t=s.prompt().title("What would you name your list?").placeholder("List name").ariaLabel("List name").targetEvent(e).ok("Ok").cancel("Cancel");return s.show(t).then(function(e){if(e)return d.cmList.save({name:e});h.error({title:"Error creating list!",msg:"Invalid list name."})}).then(function(e){e&&(A.lists.rows.push(e),h.success({title:"List properly created!",msg:e.name?e.name+" has been created!":""}))})},A.createCompany=function(e){var t=s.prompt().title("What would you name your company?").placeholder("Company name").ariaLabel("Company name").targetEvent(e).ok("Ok").cancel("Cancel");return s.show(t).then(function(e){if(e)return d.cmCompany.save({name:e});h.error({title:"Error creating company!",msg:"Invalid company name."})}).then(function(e){e&&(A.companies.rows.push(e),h.success({title:"Company properly created!",msg:e.name?e.name+" has been created!":""}))})},A.importContacts=function(e,t,n){var a=JSON.parse(t);s.show({controller:"ImportContactsDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/import/import.html",parent:angular.element(i.body),clickOutsideToClose:!1,locals:{lists:m,companies:p,file:a.file,fields:a.fields,license:A.license}}).then(function(){A.getContacts()}).catch(function(e){console.error()})},A.hasPermission=function(){return f.hasPermission(303)||f.hasRole("admin")},A.fileAdded=function(e){var t=["csv"];if(!_.includes(t,e.getExtension()))return h.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(e.size>y)return h.error({title:"File too big",msg:"The max allowed size is "+E+"MB"}),!1;return!0},a.params.ListId&&(A.selectedList=a.params.ListId),a.params.CompanyId&&(A.selectedCompany=a.params.CompanyId),t.$watch("vm.options.isOpen",function(e){e?n(function(){t.tooltipVisible=A.options.isOpen},600):t.tooltipVisible=A.options.isOpen});var S=!0,T=1;function I(e){A.contacts=e||{count:0,rows:[]}}function C(e){d.cmContact.delete({id:e.id}).$promise.then(function(){_.remove(A.contacts.rows,{id:e.id}),A.contacts.count-=1,A.contacts.rows.length||A.getContacts(),h.success({title:"Contact deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){A.errors=e.data.errors||[{message:e.toString(),type:"api.contact.delete"}];for(var t=0;t<e.data.errors.length;t++)h.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else h.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.contact.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm.query.filter",function(e,t){S?n(function(){S=!1}):(t||(T=A.query.page),e!==t&&(A.query.page=1),e||(A.query.page=T),A.getContacts())},!0),t.$watch("vm.selectedList",function(e,t){e!==t&&(A.query.ListId=A.selectedList||void 0,A.getContacts())}),t.$watch("vm.selectedCompany",function(e,t){e!==t&&(A.query.CompanyId=A.selectedCompany||void 0,A.getContacts())}),t.$watch("vm.selectedTags",function(e,t){(e.length||t.length)&&A.getContacts()})}e.$inject=["$scope","$document","$timeout","$state","$stateParams","$mdDialog","$q","userProfile","userProfileSection","api","contacts","lists","listsMap","companies","companiesMap","tags","toasty","Auth","license"],angular.module("app.contactmanager").controller("ContactsController",e)}(),function(){"use strict";function e(n,a,e,t,i,s,o,r,l,d){var c=this;function m(){n.hide()}c.errors=[],c.title="CONTACTMANAGER.EDIT_CONTACT",c.crudPermissions=d,c.contact=angular.copy(s),c.contacts=e||{rows:[],count:0},c.lists=t||{rows:[],count:0},c.companies=i||{rows:[],count:0},c.customFields={rows:[],count:0},c.newContact=!1,c.contact?(delete c.contact.List,c.ListId=c.contact.ListId||void 0):(c.contact={ListId:o?parseInt(o,10):void 0,CompanyId:r?parseInt(r,10):void 0},c.title="CONTACTMANAGER.NEW_CONTACT",c.newContact=!0),c.addNewContact=function(){c.errors=[],l.cmContact.save(c.contact).$promise.then(function(e){c.contacts.unshift(e),a.success({title:"Contact properly created",msg:c.contact.name?c.contact.name+" has been created!":""}),m()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){c.errors=e.data.errors||[{message:e.toString(),type:"api.user.save"}];for(var t=0;t<e.data.errors.length;t++)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.contacts.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.saveContact=function(){c.errors=[],l.cmContact.update({id:c.contact.id},c.contact).$promise.then(function(e){var t=_.find(c.contacts,{id:e.id});t&&_.merge(t,e),a.success({title:"Contact properly saved!",msg:c.contact.name?c.contact.name+" has been saved!":""}),m()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){c.errors=e.data.errors||[{message:e.toString(),type:"api.contact.update"}];for(var t=0;t<e.data.errors.length;t++)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.contact.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.deleteContact=function(e){c.errors=[];var t=n.confirm().title("Are you sure?").content("The contact will be deleted.").ariaLabel("Delete Contact").ok("Delete").cancel("Cancel").targetEvent(e);n.show(t).then(function(){l.cmContact.delete({id:c.contact.id}).$promise.then(function(){_.remove(c.contacts,{id:c.contact.id}),a.success({title:"Contact properly deleted!",msg:c.contact.name?c.contact.name+" has been deleted!":""}),m()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.contact.delete"}]})},function(){})},c.closeDialog=m,c.getCustomFields=function(e){{if(e)return l.cmList.getCustomFields({id:e}).$promise.then(function(e){e&&(c.customFields=e)}).catch(function(e){console.error(e)});c.customFields={rows:[],count:0}}},c.getDateFromString=function(e){return null===e?void 0:new Date(e)}}e.$inject=["$mdDialog","toasty","contacts","lists","companies","contact","ListId","CompanyId","api","crudPermissions"],angular.module("app.tools").controller("CreateOrEditContactDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;function r(){e.hide()}o.errors=[],o.title="CONTACTMANAGER.COPY_CONTACT",o.contact=angular.copy(n),o.lists=i||{rows:[],count:0},o.addNewContact=function(){o.errors=[],delete o.contact.id,o.contact.tags&&!o.contact.tags.length&&delete o.contact.tags;s.cmContact.save(o.contact).$promise.then(function(e){a.unshift(e),t.success({title:"Contact properly created",msg:o.contact.name?o.contact.name+" has been created!":""}),r()}).catch(function(e){console.error(e),o.errors=e.data.errors||[{message:e.toString(),type:"api.contact.save"}]})},o.closeDialog=r}e.$inject=["$mdDialog","toasty","contact","contacts","lists","api"],angular.module("app.tools").controller("DuplicateContactDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l){var d=this;function c(e){a.hide(e)}d.errors=[],d.title="CONTACTMANAGER.EDIT_HOPPER",d.hopper=angular.copy(o),d.hoppers=s,d.newHopper=!1,d.crudPermissions=l,d.hopper||(d.hopper={},d.title="CONTACTMANAGER.NEW_HOPPER",d.newHopper=!0),d.saveHopper=function(){d.errors=[],r.cmHopper.update({id:d.hopper.id},d.hopper).$promise.then(function(e){var t=_.find(d.hoppers,{id:e.id});t&&_.merge(t,e),i.success({title:"Hopper properly saved!",msg:d.hopper.name?d.hopper.name+" has been saved!":""}),c(e)}).catch(function(e){console.error(e),d.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.update"}]})},d.getDateFromString=function(e){return null===e?void 0:new Date(e)},d.closeDialog=c}e.$inject=["$scope","$state","$location","$mdDialog","toasty","hoppers","hopper","api","crudPermissions"],angular.module("app.contactmanager.contacts").controller("EditHopperDialogController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f,b,A){var E=this;E.currentUser=b.getCurrentUser(),E.license=f,E.journey=[],E.contact=r||{},E.hoppers=l||{rows:[],count:0},E.finals=d||{rows:[],count:0},E.histories=c||{rows:[],count:0},E.companies=u||{rows:[],count:0},E.lists=p||{rows:[],count:0},E.customFields=g||{rows:[],count:0},E.tags=v||{rows:[],count:0},E.jscriptySessions=h||{rows:[],count:0},E.timelineOptions={scrollEl:"#interaction-content"},E.userProfileSection=A&&1==A.count?A.rows[0]:null,E.crudPermissions=b.parseCrudPermissions(E.userProfileSection?E.userProfileSection.crudPermissions:null),E.arraypriority=_.keyBy([{option:"Highest",value:"'4'"},{option:"High",value:"'3'"},{option:"Medium",value:"'2'"},{option:"Low",value:"'1'"},{option:"Lowest",value:"'0'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),E.queryHopper={fields:"id,phone,scheduledat,priority,recallme,VoiceQueueId,CampaignId,UserId",sort:"-updatedAt",limit:10,page:1},E.queryFinal={fields:"id,uniqueid,calleridnum,statedesc,starttime,disposition",sort:"-id",limit:10,page:1},E.queryHistory={fields:"id,uniqueid,calleridnum,statedesc,scheduledat,starttime,endtime",sort:"-id",limit:10,page:1},E.queryJscriptySession={fields:"id,starttime,endtime,membername,projectname",sort:"-starttime",limit:10,page:1},E.selectedTab=t.params.tab||0,E.onInit=function(){b.hasRole("admin")||(function(){if(!_.some(E.companies.rows,{id:E.contact.CompanyId}))o.cmCompany.get({id:E.contact.CompanyId,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,E.companies.rows.push(t)}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_COMPANY",msg:e.data?JSON.stringify(e.data.message):e.toString()})})}(),function(){var e=_.map(E.contact.Tags,function(e){return{id:e.id,name:e.name}});if(!_.isEmpty(e))for(var t=0;t<e.length;t++)_.some(E.tags.rows,{id:e.id})||(e[t].canSelect=!1,E.tags.rows.push(e[t]))}());return o.user.get({fields:"id,fullname",nolimit:!0}).$promise.then(function(e){E.users=e||{count:0,rows:[]},E.usersMap=_.mapValues(_.keyBy(E.users.rows,"id"),"fullname"),E.Tags=_.map(E.contact.Tags,"id")}).then(function(e){var t=["mail","chat","sms","openchannel","fax"];if(e&&e.id){for(var n=0;n<t.length;n++)o[t[n]+"Interaction"].get({ContactId:e.id,includeAll:!0}).$promise.then(I);o.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(I).catch(function(e){console.error(e)})}}(r))},E.gotoContacts=function(){t.go("app.contactmanager.contacts",{},{reload:!0,notify:!0})},E.duplicateContact=function(e){i.show({controller:"DuplicateContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,resolve:{lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"id,name"}):e.resolve("userProfile@getResources",{id:E.currentUser.userProfileId,section:"Lists",fields:"id,name"})}]},locals:{contacts:m.rows,contact:r}})},E.saveContact=function(){o.cmContact.update({id:E.contact.id},E.contact).$promise.then(function(){s.success({title:"Contact updated!",msg:E.contact.name?E.contact.name+" has been updated!":""})}).then(function(){return o.cmContact.setTags({id:E.contact.id,ids:E.Tags}).$promise}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEcontact",msg:e.data?JSON.stringify(e.data):e.toString()})})},E.editCompany=function(e,t){var n=_.find(E.companies.rows,{id:t});i.show({controller:"CreateOrEditCompanyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/companies/create/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{companies:[],license:null,setting:null,crudPermissions:!1===n.canSelect?{readOnly:!0,canEdit:!1,canDelete:!1}:o.userProfileSection.get({userProfileId:E.currentUser.userProfileId,sectionId:302}).$promise.then(function(e){var t=e.rows?e.rows[0]:null;return b.parseCrudPermissions(t?t.crudPermissions:null)}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"API:GET_COMPANY_SECTION",msg:e.data?JSON.stringify(e.data):e.toString()})})},resolve:{company:["apiResolver",function(e){return e.resolve("cmCompany@get",{id:t})}]}})},E.onSelectList=function(e){if(E.contact.ListId){var t=i.confirm().title("You are selecting the list number: "+E.contact.ListId).textContent("Warning! You won't select a different list for the contact "+E.contact.firstName||E.contact.lastName||E.contact.id).targetEvent(e).ok("Ok").cancel("Cancel");return i.show(t).then(E.onSelectListSuccess).catch(function(){E.contact.ListId=null})}},E.onSelectListSuccess=function(){return o.cmList.getCustomFields({id:E.contact.ListId}).$promise.then(function(e){E.customFields=e||{rows:[],count:0}}).catch(function(e){console.error(e)})},E.getDateFromString=function(e){return null===e?void 0:new Date(e)},E.getHoppers=function(){E.queryHopper.offset=(E.queryHopper.page-1)*E.queryHopper.limit,E.queryHopper.id=E.contact.id,E.promise=o.cmContact.getHoppers(E.queryHopper,T("hoppers")).$promise},E.getFinals=function(){E.queryFinal.offset=(E.queryFinal.page-1)*E.queryFinal.limit,E.queryFinal.id=E.contact.id,E.promise=o.cmContact.getHopperFinals(E.queryFinal,T("finals")).$promise},E.getHistories=function(){E.queryHistory.offset=(E.queryHistory.page-1)*E.queryHistory.limit,E.queryHistory.id=E.contact.id,E.promise=o.cmContact.getHopperHistories(E.queryHistory,T("histories")).$promise},E.getJscriptySessions=function(){E.queryJscriptySession.offset=(E.queryJscriptySession.page-1)*E.queryJscriptySession.limit,E.queryJscriptySession.id=E.contact.id,E.promise=o.cmContact.getJscriptySessions(E.queryJscriptySession,T("jscriptySessions")).$promise},E.deleteconfirm=function(t,e){var n=i.confirm().title("Are you sure want to delete the agent?").htmlContent("<b>"+(t.phone||"hopper")+"</b> will be deleted.").ariaLabel("delete hopper").targetEvent(e).ok("OK").cancel("CANCEL");i.show(n).then(function(){var e;e=t,o.cmHopper.delete({id:e.id}).$promise.then(function(){_.remove(E.hoppers.rows,{id:e.id}),E.hoppers.count--,E.hoppers.rows.length||E.getHoppers(),s.success({title:"Hopper deleted!",msg:e.phone?e.phone+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEhopper",msg:e.data?JSON.stringify(e.data):e.toString()})})},function(){console.log("CANCEL")})},E.editHopper=function(e,t){i.show({controller:"CreateOrEditHopperVoiceQueueIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hoppers/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{hopper:t,hoppers:E.hoppers.rows,license:null,setting:null,crudPermissions:E.crudPermissions}})},E.createOrEditIvrCampaignHopper=function(e,t){i.show({controller:"CreateOrEditHopperCampaignIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hoppers/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{hopper:t,hoppers:E.hoppers.rows,license:null,setting:null,crudPermissions:E.crudPermissions}})},E.getColorByItem=function(e){var t="";e.FaxAccountId?t="fax":e.OpenchannelAccountId?t="openchannel":e.SmsAccountId?t="sms":e.MailAccountId?t="mail":e.ChatWebsiteId?t="chat":e.amaflags&&(t="voice");return function(e){switch(e){case"chat":return"green-A700";case"mail":return"teal";case"sms":return"orange";case"openchannel":return"amber-A200";case"fax":return"blue-grey-A200";default:return"blue-A700"}}(t)};var y=!0,S=1;function T(t){return function(e){E[t]=e||{count:0,rows:[]}}}function I(e){e&&e.count&&e.rows.length&&(E.journey=_.concat(E.journey,e.rows))}e.$watch("vm.queryHopper.filter",function(e,t){y?n(function(){y=!1}):(t||(S=E.queryHopper.page),e!==t&&(E.queryHopper.page=1),e||(E.queryHopper.page=S),E.getHoppers())}),e.$watch("vm.queryFinal.filter",function(e,t){y?n(function(){y=!1}):(t||(S=E.queryFinal.page),e!==t&&(E.queryFinal.page=1),e||(E.queryFinal.page=S),E.getFinals())}),e.$watch("vm.queryHistory.filter",function(e,t){y?n(function(){y=!1}):(t||(S=E.queryHistory.page),e!==t&&(E.queryHistory.page=1),e||(E.queryHistory.page=S),E.getHistories())})}e.$inject=["$scope","$timeout","$state","$document","$mdDialog","toasty","api","contact","hoppers","finals","histories","contacts","companies","lists","customFields","tags","jscriptySessions","license","Auth","userProfileSection"],angular.module("app.contactmanager.contacts").controller("ContactController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;g.processing=!1,g.stopping=!0,g.license=p,g.pid=0,g.result={finish:!1,rows:0,affectedRows:0,failedRows:0,duplicatedRows:0,errors:[]},g.contactFields=[{key:"firstName",required:!0},{key:"lastName",required:!1},{key:"phone",required:!0},{key:"mobile",required:!1},{key:"email",required:!1},{key:"dateOfBirth",required:!1},{key:"country",required:!1},{key:"city",required:!1},{key:"street",required:!1},{key:"postalCode",required:!1},{key:"fax",required:!1}],g.motionBullFields=[{key:"UserId",required:!1},{key:"scheduledat",required:!1},{key:"priority",required:!1}],g.binding={},g.duplicate=[],g.lists=s||{rows:[],count:0},g.companies=o||{rows:[],count:0},g.customFields={rows:[],count:0},g.fields=u||[],g.closeDialog=function(){d.removeAllListeners("contact:import:"+v),t.hide()},g.onChangeList=function(){return l.cmList.getCustomFields({id:g.ListId}).$promise.then(function(e){g.customFields=e}).catch(function(e){console.error(e)})},g.uploadCsv=function(){g.processing=moment(),l.cmContact.import({id:m.filename,binding:g.binding,ListId:g.ListId,CompanyId:g.CompanyId,duplicates:g.duplicates,socket_timestamp:v}).$promise.then(function(e){g.stopping=!1,e&&e.pid&&(g.pid=e.pid)}).catch(function(e){g.processing=!1,r.error({title:"Import process failed!",msg:"Please retry with a new file"})})},g.getHeaderErrors=function(){var e=u;return e.push("contact_import_error"),e},g.getArrayErrors=function(){for(var e=[],t=0;t<g.result.errors.length;t+=1){var n=g.result.errors[t].row;n.contact_import_error=g.result.errors[t].message,e.push(n)}return e},g.stopUpload=function(){if(g.stopping=!0,g.pid)return l.system.killProcess({pid:g.pid}).$promise.then(function(e){r.success({title:"CSV import process stopped!",msg:"Import has been stopped!"})}).catch(function(e){r.error({title:"CSV stop import process failed!",msg:"pid is unknown"})})};var v=moment().unix();d.on("contact:import:"+v,function(n){i(function(){if(g.result.rows=n.rows,n.errors)for(var e=0;e<n.errors.length;e++)g.result.errors.push(n.errors[e]);if(n.finish){g.result.finish=!0,g.result.affectedRows=n.affectedRows,g.result.failedRows=g.result.errors.length;var t=g.result.rows-g.result.affectedRows-g.result.errors.length;t&&0<t&&(g.duplicates.length?g.result.duplicatedRows=t:g.result.failedRows+=t),g.result.elapsed=moment().diff(g.processing,"seconds")}})}),c.$on("$destroy",function(){d.removeAllListeners("contact:import:"+v)})}e.$inject=["$cookies","$mdDialog","$interval","$q","$timeout","lists","companies","toasty","api","socket","$scope","file","fields","license"],angular.module("app.tools").controller("ImportContactsDialogController",e)}(),function(){"use strict";function e(i,e,s,t,o,n,r){var a=this;a.errors=[],a.title="CONTACTMANAGER.MERGE_CONTACT",a.contact=angular.copy(t),a.lists=n||[],a.change=function(){a.searchTerm?r.cmContact.get({fields:"id,firstName,lastName,phone,email",filter:a.searchTerm,ListId:t.ListId}).$promise.then(function(e){a.contacts=e.rows}).catch(function(e){console.error(e)}):a.contacts=[]},a.showConfirm=function(e,t,n){var a=i.confirm({skipHide:!0}).title("Would you like to merge your contacs?").textContent("All unfilled values of the contact #"+n.id+" will be overwritten by the fields of the contact #"+t.id+".").targetEvent(e).ok("Ok").cancel("Cancel");i.show(a).then(function(){return r.cmContact.merge({to:n.id,from:t.id}).$promise}).then(function(e){i.hide({new:e,to:n,from:t}),_.remove(o,{id:n.id}),_.remove(o,{id:t.id}),o.unshift(e)}).then(function(){s.success({title:"Contact properly merged!"})}).catch(function(e){e&&e.status&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:MERGE_CONTACT",msg:e.data?JSON.stringify(e.data):e.toString()})})},a.closeDialog=function(){i.hide()}}e.$inject=["$mdDialog","$scope","toasty","contact","contacts","lists","api"],angular.module("app.tools").controller("MergeContactDialogController",e)}(),function(){"use strict";function e(a,e,t,n,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){n.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CONTACTMANAGER.EDIT_GLOBALCUSTOMFIELD",g.sortable={animation:800,sort:!0,onSort:function(e){a.globalCustomFieldForm.$pristine=!1}},g.globalCustomField=l,g.globalCustomFields=r,g.newGlobalCustomField=!1,g.globalCustomField||(g.globalCustomField={type:"text"},g.title="CONTACTMANAGER.NEW_GLOBALCUSTOMFIELD",g.newGlobalCustomField=!0),a.$watch("vm.globalCustomField.type",function(e,t){if(e!==t)switch(e){case"text":g.globalCustomField.values="";break;case"select":g.globalCustomField.values=[]}}),g.addNewGlobalCustomField=function(){g.errors=[],d.cmCustomField.save(g.globalCustomField).$promise.then(function(e){g.globalCustomFields.unshift(e.toJSON()),o.success({title:"GlobalCustomField properly created",msg:g.globalCustomField.name?g.globalCustomField.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCustomField.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCustomField.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveGlobalCustomField=function(){g.errors=[],d.cmCustomField.update({id:g.globalCustomField.id},g.globalCustomField).$promise.then(function(e){var t=_.find(g.globalCustomFields,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"GlobalCustomField properly saved!",msg:g.globalCustomField.name?g.globalCustomField.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCustomField.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCustomField.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteGlobalCustomField=function(e){g.errors=[];var t=n.confirm().title("Are you sure?").content("The globalCustomField will be deleted.").ariaLabel("Delete GlobalCustomField").ok("Delete").cancel("Cancel").targetEvent(e);n.show(t).then(function(){d.cmCustomField.delete({id:g.globalCustomField.id}).$promise.then(function(){_.remove(g.globalCustomFields,{id:g.globalCustomField.id}),o.success({title:"GlobalCustomField properly deleted!",msg:(g.globalCustomField.name||"globalCustomField")+" has been deleted!"}),v(g.globalCustomField)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCustomField.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCustomField.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.addItem=function(e){e.push({value:"New Item"}),a.globalCustomFieldForm.$pristine=!1},g.removeItem=function(e,t){e.splice(t,1),a.globalCustomFieldForm.$pristine=!1},g.removeItems=function(e){for(var t=e.length,n=0;n<t;n++)e.splice(0,1);a.globalCustomFieldForm.$pristine=!1},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","globalCustomFields","globalCustomField","api","Auth","license","setting","crudPermissions"],angular.module("app.contactmanager").controller("CreateOrEditGlobalCustomFieldDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.globalCustomFields=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="globalCustomFields",b.listOrder="",b.listOrderAsc=null,b.selectedGlobalCustomFields=[],b.query={fields:"createdAt,updatedAt,id,alias,type,values,required",sort:"-updatedAt",ListId:"null",limit:10,page:1},b.arraytype=_.keyBy([{option:"Text",value:"'text'"},{option:"Select",value:"'select'"},{option:"Number",value:"'number'"},{option:"Switch",value:"'switch'"},{option:"Datetime",value:"'datetime'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editdialog=function(e,t){i.show({controller:"CreateOrEditGlobalCustomFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/globalCustomFields/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{globalCustomField:e,globalCustomFields:b.globalCustomFields.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("globalCustomField")+"?").htmlContent("<b>"+(e.name||"globalCustomField")+"</b> will be deleted.").ariaLabel("delete globalCustomField").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getGlobalCustomFields=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.cmCustomField.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="GlobalCustomFields",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditGlobalCustomField=function(e,t){i.show({controller:"CreateOrEditGlobalCustomFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/globalCustomFields/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{globalCustomField:t,globalCustomFields:b.globalCustomFields.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteGlobalCustomField=S,b.exportSelectedGlobalCustomFields=function(){var e=angular.copy(b.selectedGlobalCustomFields);return b.selectedGlobalCustomFields=[],e},b.deleteSelectedGlobalCustomFields=function(e){var t=i.confirm().title("Are you sure want to delete the selected globalCustomFields?").htmlContent("<b>"+b.selectedGlobalCustomFields.length+" selected</b> will be deleted.").ariaLabel("delete GlobalCustomFields").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedGlobalCustomFields.forEach(function(e){S(e)}),b.selectedGlobalCustomFields=[]})},b.deselectGlobalCustomFields=function(){b.selectedGlobalCustomFields=[]},b.selectAllGlobalCustomFields=function(){b.selectedGlobalCustomFields=b.globalCustomFields.rows};var A=!0,E=1;function y(e){b.globalCustomFields=e||{count:0,rows:[]}}function S(e){m.cmCustomField.delete({id:e.id}).$promise.then(function(){_.remove(b.globalCustomFields.rows,{id:e.id}),b.globalCustomFields.count-=1,b.globalCustomFields.rows.length||b.getGlobalCustomFields(),p.success({title:_.startCase("GlobalCustomField")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcmCustomField"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEcmCustomField",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getGlobalCustomFields())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","globalCustomFields","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.contactmanager").controller("GlobalCustomFieldsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CONTACTMANAGER.EDIT_LIST",g.list=angular.copy(l),g.lists=r,g.newList=!1,g.list||(g.list={},g.title="CONTACTMANAGER.NEW_LIST",g.newList=!0),g.addNewList=function(){g.errors=[],d.cmList.save(g.list).$promise.then(function(e){g.lists.unshift(e.toJSON()),o.success({title:"List properly created",msg:g.list.name?g.list.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmList.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmList.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveList=function(){g.errors=[],d.cmList.update({id:g.list.id},g.list).$promise.then(function(e){var t=_.find(g.lists,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"List properly saved!",msg:g.list.name?g.list.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmList.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmList.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteList=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The list will be deleted.").ariaLabel("Delete List").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cmList.delete({id:g.list.id}).$promise.then(function(){_.remove(g.lists,{id:g.list.id}),o.success({title:"List properly deleted!",msg:(g.list.name||"list")+" has been deleted!"}),v(g.list)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmList.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmList.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","lists","list","api","Auth","license","setting","crudPermissions"],angular.module("app.contactmanager").controller("CreateOrEditListDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.cmList.getAgents({id:c.list.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserList?"penalty "+e.UserList.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.list=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.cmList.removeAgents({id:c.list.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.cmList.addAgents({id:c.list.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("CONTACTMANAGER.ALL_AGENTS"),labelSelected:r.instant("CONTACTMANAGER.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","list","lists","realtime","$translate","Auth","crudPermissions"],angular.module("app.contactmanager").controller("ListagentaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.list={},c.listCustomFields={count:0,rows:[]},c.selectedListCustomFields=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,alias,type,values,required",limit:10,page:1},c.arraytype=_.keyBy([{option:"Text",value:"'text'"},{option:"Select",value:"'select'"},{option:"Number",value:"'number'"},{option:"Switch",value:"'switch'"},{option:"Datetime",value:"'datetime'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.list=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.list.id,c.query.ListId=c.list.id,c.getListCustomFields()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the customField?").htmlContent("<b>"+(e.name||"customField")+"</b> will be deleted.").ariaLabel("delete customField").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getListCustomFields=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.cmList.getCustomFields(c.query,p).$promise},c.createOrEditListCustomField=function(e,t){s.show({controller:"CreateOrEditCustomFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/customFields/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{list:c.list,customField:t,customFields:c.listCustomFields.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedListCustomFields=function(){var e=angular.copy(c.selectedListCustomFields);return c.selectedListCustomFields=[],e},c.deleteListCustomField=g,c.deleteSelectedListCustomFields=function(e){var t=s.confirm().title("Are you sure want to delete the selected customFields?").htmlContent("<b>"+c.selectedListCustomFields.length+" selected</b> will be deleted.").ariaLabel("delete customFields").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedListCustomFields.forEach(function(e){g(e)}),c.selectedListCustomFields=[]})};var m=!0,u=1;function p(e){c.listCustomFields=e||{count:0,rows:[]}}function g(e){l.cmCustomField.delete({id:e.id}).$promise.then(function(){_.remove(c.listCustomFields.rows,{id:e.id}),c.listCustomFields.count-=1,c.listCustomFields.rows.length||c.getListCustomFields(),r.success({title:"CustomField deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETcmList"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcmList",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getListCustomFields())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.contactmanager").controller("ListCustomFieldsController",e)}(),function(){"use strict";function e(a,e,t,n,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){n.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CONTACTMANAGER.EDIT_CUSTOMFIELD",g.sortable={animation:800,sort:!0,onSort:function(e){a.customFieldForm.$pristine=!1}},g.customField=l,g.customFields=r,g.newCustomField=!1,g.customField||(g.customField={type:"text"},g.title="CONTACTMANAGER.NEW_CUSTOMFIELD",g.newCustomField=!0),e.params.id&&(g.customField.ListId=e.params.id),a.$watch("vm.customField.type",function(e,t){if(e!==t)switch(e){case"text":g.customField.values="";break;case"select":g.customField.values=[]}}),g.addNewCustomField=function(){g.errors=[],d.cmList.addCustomField({id:e.params.id},g.customField).$promise.then(function(e){g.customFields.unshift(e.toJSON()),o.success({title:"CustomField properly created",msg:g.customField.name?g.customField.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCustomField.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCustomField.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveCustomField=function(){g.errors=[],d.cmCustomField.update({id:g.customField.id},g.customField).$promise.then(function(e){var t=_.find(g.customFields,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"CustomField properly saved!",msg:g.customField.name?g.customField.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCustomField.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCustomField.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteCustomField=function(e){g.errors=[];var t=n.confirm().title("Are you sure?").content("The customField will be deleted.").ariaLabel("Delete CustomField").ok("Delete").cancel("Cancel").targetEvent(e);n.show(t).then(function(){d.cmCustomField.delete({id:g.customField.id}).$promise.then(function(){_.remove(g.customFields,{id:g.customField.id}),o.success({title:"CustomField properly deleted!",msg:(g.customField.name||"customField")+" has been deleted!"}),v(g.customField)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCustomField.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCustomField.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.addItem=function(e){e.push({value:"New Item"}),a.customFieldForm.$pristine=!1},g.removeItem=function(e,t){e.splice(t,1),a.customFieldForm.$pristine=!1},g.removeItems=function(e){for(var t=e.length,n=0;n<t;n++)e.splice(0,1);a.customFieldForm.$pristine=!1},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","customFields","customField","api","Auth","license","setting","crudPermissions"],angular.module("app.contactmanager").controller("CreateOrEditCustomFieldDialogController",e)}(),function(){"use strict";function e(a,e,n,i,s,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.list=c||a.params.list||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=a.params.tab||0,u.gotogoto=function(n,e){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:303}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?a.go("app.contactmanager.contacts",{ListId:n.id}):l.info({title:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});a.go("app.contactmanager.contacts",{ListId:n.id})}},u.agentadddialog=function(e,t){n.show({controller:"ListagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{list:e,lists:u.lists?u.lists.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoLists=function(){a.go("app.contactmanager.lists")},u.saveList=function(){r.cmList.update({id:u.list.id},u.list).$promise.then(function(){l.success({title:"List updated!",msg:u.list.name?u.list.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcmList",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","list","userProfileSection"],angular.module("app.contactmanager").controller("ListController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.list={},c.listVoiceDispositions={count:0,rows:[]},c.selectedListVoiceDispositions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e,t){c.list=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.list.id,c.query.ListId=c.list.id,c.getListVoiceDispositions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the voiceDisposition?").htmlContent("<b>"+(e.name||"voiceDisposition")+"</b> will be deleted.").ariaLabel("delete voiceDisposition").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getListVoiceDispositions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.cmList.getDispositions(c.query,p).$promise},c.createOrEditListVoiceDisposition=function(e,t){s.show({controller:"CreateOrEditVoiceDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/voiceDispositions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{list:c.list,voiceDisposition:t,voiceDispositions:c.listVoiceDispositions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedListVoiceDispositions=function(){var e=angular.copy(c.selectedListVoiceDispositions);return c.selectedListVoiceDispositions=[],e},c.deleteListVoiceDisposition=g,c.deleteSelectedListVoiceDispositions=function(e){var t=s.confirm().title("Are you sure want to delete the selected voiceDispositions?").htmlContent("<b>"+c.selectedListVoiceDispositions.length+" selected</b> will be deleted.").ariaLabel("delete voiceDispositions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedListVoiceDispositions.forEach(function(e){g(e)}),c.selectedListVoiceDispositions=[]})};var m=!0,u=1;function p(e){c.listVoiceDispositions=e||{count:0,rows:[]}}function g(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(c.listVoiceDispositions.rows,{id:e.id}),c.listVoiceDispositions.count-=1,c.listVoiceDispositions.rows.length||c.getListVoiceDispositions(),r.success({title:"VoiceDisposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETcmList"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcmList",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getListVoiceDispositions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.contactmanager").controller("ListVoiceDispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CONTACTMANAGER.EDIT_VOICEDISPOSITION",g.voiceDisposition=angular.copy(l),g.voiceDispositions=r,g.newVoiceDisposition=!1,g.voiceDisposition||(g.voiceDisposition={},g.title="CONTACTMANAGER.NEW_VOICEDISPOSITION",g.newVoiceDisposition=!0),t.params.id&&(g.voiceDisposition.ListId=t.params.id),g.addNewVoiceDisposition=function(){g.errors=[],d.disposition.save(g.voiceDisposition).$promise.then(function(e){g.voiceDispositions.unshift(e.toJSON()),o.success({title:"VoiceDisposition properly created",msg:g.voiceDisposition.name?g.voiceDisposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVoiceDisposition=function(){g.errors=[],d.disposition.update({id:g.voiceDisposition.id},g.voiceDisposition).$promise.then(function(e){var t=_.find(g.voiceDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VoiceDisposition properly saved!",msg:g.voiceDisposition.name?g.voiceDisposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVoiceDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The voiceDisposition will be deleted.").ariaLabel("Delete VoiceDisposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.voiceDisposition.id}).$promise.then(function(){_.remove(g.voiceDispositions,{id:g.voiceDisposition.id}),o.success({title:"VoiceDisposition properly deleted!",msg:(g.voiceDisposition.name||"voiceDisposition")+" has been deleted!"}),v(g.voiceDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","voiceDispositions","voiceDisposition","api","Auth","license","setting","crudPermissions"],angular.module("app.contactmanager").controller("CreateOrEditVoiceDispositionDialogController",e)}(),function(){"use strict";function e(e,t,a,n,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.lists=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="lists",b.listOrder="",b.listOrderAsc=null,b.selectedLists=[],b.query={fields:"createdAt,updatedAt,id,name,description,dialPrefix",sort:"-updatedAt",limit:10,page:1},b.editstate=function(e,t){a.go("app.contactmanager.lists.edit",{id:e.id,list:e,crudPermissions:b.crudPermissions})},b.gotocontactsgoto=function(n,e){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:303}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?a.go("app.contactmanager.contacts",{ListId:n.id}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});a.go("app.contactmanager.contacts",{ListId:n.id})}},b.exportcsvcontactsexport=function(i,e){return m.cmList.getContactsCsv({id:i.id,nolimit:!0}).$promise.then(function(e){if(void 0!==e.length){var t=[e.buffer],n=new Blob(t,{type:e.type}),a=window.document.createElement("a");a.setAttribute("href",URL.createObjectURL(n)),a.setAttribute("download","exportContacts_"+i.id+".csv"),a.click()}else p.info({title:"EXPORT",msg:"The list is empty"})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcmList",msg:e.data?JSON.stringify(e.data):e.toString()})})},b.agentadddialog=function(e,t){i.show({controller:"ListagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{list:e,lists:b.lists?b.lists.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("list")+"?").htmlContent("<b>"+(e.name||"list")+"</b> will be deleted.").ariaLabel("delete list").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getLists=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.cmList.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Lists",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditList=function(e,t){i.show({controller:"CreateOrEditListDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{list:t,lists:b.lists.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteList=S,b.exportSelectedLists=function(){var e=angular.copy(b.selectedLists);return b.selectedLists=[],e},b.deleteSelectedLists=function(e){var t=i.confirm().title("Are you sure want to delete the selected lists?").htmlContent("<b>"+b.selectedLists.length+" selected</b> will be deleted.").ariaLabel("delete Lists").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedLists.forEach(function(e){S(e)}),b.selectedLists=[]})},b.deselectLists=function(){b.selectedLists=[]},b.selectAllLists=function(){b.selectedLists=b.lists.rows};var A=!0,E=1;function y(e){b.lists=e||{count:0,rows:[]}}function S(e){m.cmList.delete({id:e.id}).$promise.then(function(){_.remove(b.lists.rows,{id:e.id}),b.lists.count-=1,b.lists.rows.length||b.getLists(),p.success({title:_.startCase("List")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcmList"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEcmList",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getLists())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","lists","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.contactmanager").controller("ListsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l){var d=this;d.currentUser=s.getCurrentUser(),d.userProfile=r,d.userProfileSection=l&&1==l.count?l.rows[0]:null,d.crudPermissions=s.parseCrudPermissions(d.userProfileSection?d.userProfileSection.crudPermissions:null),d.customDashboard={},d.voiceQueues=o&&o.count?o:{count:0,rows:[]},d.voiceQueuesSelected=o&&o.count?_.map(o.rows,"id"):[],d.interval=t(function(){},1e3),d.onChangeVoiceQueues=function(){for(var e=0;e<d.customDashboard.widgets.length;e+=1)d.customDashboard.widgets[e].voiceQueuesSelected=d.voiceQueuesSelected},d.goToEdit=function(){e.go("app.tools.customDashboards.edit",{id:d.customDashboard.id,tab:1})},i.onWithoutApply("voice_queue:save",function(e){var t=_.find(d.voiceQueues.rows,{id:e.id});t&&_.merge(t,_.pick(e,_.keys(t)))}),a.dashboard.get({id:e.params.id}).$promise.then(function(e){if(e)return d.customDashboard=e,d.customDashboard.widgets=[],d.customDashboard.preview=!0,d.customDashboard.draggable={enabled:!1},d.customDashboard.resizable={enabled:!1},a.dashboard.getItems({id:d.customDashboard.id}).$promise}).then(function(e){if(e&&e.count&&e.rows)for(var t=0;t<e.rows.length;t+=1)e.rows[t].templateUrl="app/core/directives/ms-widget-engine/ms-widget-engine-"+e.rows[t].type+"/ms-widget-engine."+e.rows[t].type+".html",e.rows[t].voiceQueues=d.voiceQueues,e.rows[t].voiceQueuesSelected=d.voiceQueuesSelected,d.customDashboard.widgets.push(e.rows[t])}).catch(function(e){d.customDashboard=void 0}),n.$on("$destroy",function(){i.removeAllListeners("voice_queue:save"),d.interval&&t.cancel(d.interval)})}e.$inject=["$state","$interval","$scope","api","socket","Auth","voiceQueues","userProfile","userProfileSection"],angular.module("app.dashboards.custom").controller("DashboardCustomController",e)}(),function(){"use strict";function e(e,i,a,o,s,t,r,n,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=p,b.setting=g;function A(e){var t={};for(var n in b.tabs)b.tabs.hasOwnProperty(n)&&(t[n]=b.tabs[n],b.tabs[n].interaction&&(t[n].interaction=_.pick(b.tabs[n].interaction,["id","OpenchannelAccountId","MailAccountId","ChatWebsiteId","FaxAccountId","SmsAccountId","closed","draft"])));a.localStorage.setItem("motion2.user:"+b.user.id,JSON.stringify({tabs:t,currentTab:b.currentTab})),e&&E(e)}function E(e){if(_.isNil(e)||e&&"interaction"===e.type){var t={id:b.user.id,online:!0,capacity:{mail:0,fax:0,sms:0,openchannel:0,chat:0},interaction:{mail:[],fax:[],sms:[],openchannel:[],chat:[]}};for(var n in b.tabs)b.tabs.hasOwnProperty(n)&&t.capacity.hasOwnProperty(b.tabs[n].channel)&&b.tabs[n].interaction&&!b.tabs[n].interaction.closed&&(t.capacity[b.tabs[n].channel]+=1,t.interaction[b.tabs[n].channel].push(b.tabs[n].interaction.id));if(!_.isEqual(b.agentCapacity,t.capacity))return b.agentCapacity=t.capacity,r.rpc.setAgentCapacity(t)}}function y(t){if(b.tabs[t.id]&&(function(e){if(e.channel&&e.interaction)r.user["remove"+_.upperFirst(e.channel)+"Interactions"]({id:b.user.id,ids:[e.interaction.id]}).$promise.catch(function(e){console.error(e)})}(b.tabs[t.id]),delete b.tabs[t.id],b.currentTab=0,A(t),"interaction"===t.type))return r[t.channel+"Interaction"].get({id:t.interaction.id}).$promise.then(function(e){return r.user["remove"+_.upperFirst(t.channel)+"Interactions"]({id:b.user.id,ids:[e.id]}).$promise}).catch(function(e){console.error(e)})}function S(e){e.id=_.random(1e10),e.openedAt=new Date,e.saved=!1,e.badges=0,b.tabs[e.id]=e,b.currentTab=e.id,A(e)}function T(t,n){var e=_.find(b.tabs,function(e){return"interaction"===e.type&&e.interaction&&e.interaction.id===n.id&&e.channel===t});e?(e.isDraft=n.isDraft||!1,b.currentTab=e.id):S(e={type:"interaction",title:t?t.toUpperCase():"openchannel",icon:function(e){switch(e){case"chat":return"icon-hangouts";case"mail":return"icon-email";case"sms":return"icon-message-text";case"openchannel":return"icon-google-earth";case"fax":return"icon-deskphone";default:return"icon-hangouts"}}(t),color:function(e){switch(e){case"chat":return"green-A700";case"mail":return"teal";case"sms":return"orange";case"openchannel":return"amber-A200";case"fax":return"blue-grey-A200";default:return"grey"}}(t),channel:t,interaction:n,isDraft:n.isDraft||!1})}function I(e){e&&e.uniqueid&&b.notifications[e.uniqueid]&&(l.clear(b.notifications[e.uniqueid]),delete b.notifications[e.uniqueid])}function C(t,e,n){return function(){if(_.find(n.calls,function(e){return e.uniqueid===t}))return r.voiceCallReport.update({id:t,ContactId:e}).$promise.catch(function(e){console.error(e)})}}function O(e,t){return 0<=t&&(e.calls[t].disposedAt=new Date,!0)}function x(){return function(e){if(404===e.status)l.warning({title:o.instant("DASHBOARDS.ATTENTION"),msg:o.instant("DASHBOARDS.ACCEPT_ELSEWHERE")});else if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelMessage.accept"}];for(var t=0;t<e.data.errors.length;t+=1)l.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelMessage.accept",msg:e.data?JSON.stringify(e.data.message):e.toString()})}}b.detectBrowser=h.detectBrowser(),b.user=t.getCurrentUser(),b.currentTab=0,b.notifications={},b.tabs={},b.agentCapacity={},b.globalUserLists=d||{count:0,rows:[]},b.globalLists=c||{count:0,rows:[]},b.globalCompanies=m||{count:0,rows:[]},b.globalTags=u||{count:0,rows:[]},b.onContactManager=function(t){var e={ListId:t.ListId,limit:1,offset:0,sort:"-updatedAt"},n=!1,a=t.calleridname&&"<unknown>"!==t.calleridname?t.calleridname:t.calleridnum||t.uniqueid,i=t.calleridnum;_.isNil(t["xmd-contactid"])?_.isNil(t.routeId)?e.phone=t.calleridnum:(e.phone=t.destcalleridnum,a=t.destcalleridname&&"<unknown>"!==t.destcalleridname?t.destcalleridname:t.destcalleridnum||t.uniqueid,i=t.destcalleridnum):(e.id=t["xmd-contactid"],n=!0,_.isNil(t["xmd-listid"])||parseInt(t["xmd-listid"],10)===t.ListId||t["xmd-contactid2"]&&(e.id=t["xmd-contactid2"]));return r.cmContact.get(e).$promise.then(function(e){n?e&&b.addContactTab(e,t):e.count&&e.rows[0]?b.addContactTab(e.rows[0],t):b.addContactTab({firstName:a,ListId:t.ListId,phone:i},t)}).catch(x())},b.onJscripty=function(n){return r.jscriptyProject.get({id:n.ProjectId}).$promise.then(function(t){if(t){if(!_.isUndefined(n["xmd-contactid"]))return r.cmContact.get({id:n["xmd-contactid"]}).$promise.then(function(e){try{t.formData=Mustache.render(t.formData,_.merge(n,{user:b.user,contact:e}))}catch(e){console.error(e)}S({type:"jscripty",title:t.name,icon:"icon-script",color:"grey",project:t,call:n,contact:e})}).catch(x());try{t.formData=Mustache.render(t.formData,_.merge(n,{user:b.user}))}catch(e){console.error(e)}S({type:"jscripty",title:t.name,icon:"icon-script",color:"grey",project:t,call:n})}}).catch(x())},b.onBot=function(t){var n=t.calleridname&&"<unknown>"!==t.calleridname?t.calleridname:t.calleridnum,a=t.calleridnum;return r.squareMessage.get({fields:"id",limit:1,offset:0,uniqueid:t.uniqueid}).$promise.then(function(e){e.count&&S({type:"bot",title:n+" <"+a+">",icon:"fas fa-robot",color:"pink",data:{uniqueid:t.uniqueid}})})},b.onBrowserUrl=function(e){if(e&&e.uri)if(e.uri=_.replace(e.uri,"&lt%3B",""),e.uri=_.replace(e.uri,"=&gt%3B=",""),e.uriLocation)switch(e.uriLocation){case"0":a.open(e.uri);break;case"1":a.open(e.uri,"_blank","width="+(e.windowWidth||"800")+",height="+e.windowHeight||"600");break;default:a.open(e.uri)}else a.open(e.uri)},b.onBrowserPopup=function(e){e&&e.html&&S({type:"popup",title:e.calleridnum||"popup",icon:"icon-tablet",color:"grey",html:e.html})},b.onNotificationSave=function(e){if(e&&e.uniqueid){n=e,v.isSupported()?v.requestPermission().then(function(){var e,t;t={autoClose:!0,duration:10,showOnPageHidden:!0,icon:"../../../../../../../assets/images/avatars/customer.png",body:(e=n).queue?"Queue: "+e.queue:"",focusOnclick:!0,closeOnClick:!0},v.show(e.title,t)},function(e){console.error("Please enable browser notifications!",e)}):console.error("Browser notifications are not supported by the browser. Normal notifications will be used.");var t=b.alreadyExistsTab(e);if(t){if(r[e.channel+"Message"])return b.currentTab!==t.id&&(t.badges+=1),r[e.channel+"Message"].accept({id:e.id,UserId:b.user.id}).$promise.catch(x())}else l.wait({title:e.title,msg:e.msg||"",showClose:!1,clickToClose:!1,timeout:!1,sound:e.sound,html:!0,shake:e.shake||!1,onAdd:function(){b.notifications[e.uniqueid]=this.id},onAccept:function(){if(I(e),r[e.channel+"Message"])return r[e.channel+"Message"].accept({id:e.id,UserId:b.user.id,manual:!0}).$promise.then(function(e){T(e.channel,e.interaction),l.success({title:"Message properly accepted!",msg:"Message has been accepted!"})}).catch(x())},onReject:function(){if(I(e),r[e.channel+"Message"])return r[e.channel+"Message"].reject({id:e.id,UserId:b.user.id}).$promise.then(function(e){l.success({title:"Message properly rejected!",msg:"Message has been rejected!"})}).catch(x())}})}var n},b.onNotificationRemove=I,b.onVoiceChannelRemove=function(t){for(var e in b.tabs)if(b.tabs.hasOwnProperty(e)){var n=b.tabs[e],a=_.findLastIndex(n.calls,function(e){return e.uniqueid===t.uniqueid});if(!O(n,a)){var i=_.find(b.tabs,{calls:[{uniqueid:t.uniqueid}]});if(i){var s=_.findLastIndex(i.calls,function(e){return e.uniqueid===t.uniqueid});O(i,s)}}b.contact&&b.contact.id&&$timeout(C(t.uniqueid,b.contact.id,n),1e3)}},b.onClickTab=function(e){b.currentTab=e,A(b.tabs[e])},b.isActiveTab=function(e){return e===b.currentTab},b.alreadyExistsTab=function(t){return _.find(b.tabs,function(e){return"interaction"===e.type&&e.interaction&&e.interaction.id==t.interactionId&&e.channel==t.channel})},b.addContactTab=function(t,n){var a={type:"contact",title:t?function(e){var t="";e&&(e.firstName||e.lastName?(e.firstName&&(t+=e.firstName+" "),e.lastName&&(t+=e.lastName)):e.phone&&(t=e.phone));return t}(t):o.instant("DASHBOARDS.NEW_CONTACT"),icon:"icon-account-circle",color:"red",contact:t,userLists:d,lists:c,companies:m,tags:u,calls:n?[n]:[],autoCreate:n?n.autoCreate:0};if(n){if(n["xmd-cdrtype"]&&"dialer"===n["xmd-cdrtype"])n.answeredAt=n.agentcalledAt?moment(n.agentcalledAt,"YYYY-MM-DD HH:mm:ss").toDate():new Date;else if(n.uniqueid){var e=n.uniqueid.split(".")[0];n.answeredAt=e?new Date(1e3*parseInt(e)):new Date}(n.agentcompleteAt||n.endtime)&&(n.disposedAt=new Date)}if(t){var i=_.find(b.tabs,function(e){return e.contact&&e.contact.id?"contact"===e.type&&e.contact&&e.contact.id==t.id:"contact"===e.type&&e.contact&&e.contact.phone==t.phone});if(i){if(n)if(i.calls){var s=_.find(i.calls,function(e){return e.uniqueid===n.uniqueid});s||i.calls.push(n)}else i.calls=[n];b.currentTab=i.id}else{if(t.ListId)return r.disposition.get({ListId:t.ListId}).$promise.then(function(e){return a.dispositions=e,r.cmList.getCustomFields({id:t.ListId}).$promise}).then(function(e){a.customFields=e}).catch(x()).finally(function(){S(a)});S(a)}}else S(a)},b.addInteractionTab=T,b.addTab=S,b.removeTab=y,b.updateLocalStorage=A,b.closeTab=function(e){var t=i.confirm().title("interaction"===e.type?"Do you want to close the interaction?":"Are you sure want to close the "+e.type+"?").textContent("interaction"===e.type?"":"The "+e.type+" has been modified. Closing will lose all changes!").ariaLabel("Close Contact").ok("interaction"===e.type?"YES":"OK").cancel("interaction"===e.type?"NO":"CANCEL");{if(!e.saved){var n=b.user.voicePause||b.user.chatPause||b.user.mailPause||b.user.openchannelPause||b.user.faxPause,a=!1;return"interaction"===e.type&&(a=e.interaction.Account.mandatoryDisposition),i.show(t).then(function(){"interaction"===e.type&&i.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(s.body),onRemoving:function(e,t){b.user&&a&&!n&&r.user.unpause({id:b.user.id}).$promise.catch(function(e){console.error(e)})},clickOutsideToClose:!a,escapeToClose:!a,locals:{user:b.user,channel:e.channel,interaction:e.interaction}}),y(e)}).catch(function(){"interaction"===e.type&&y(e)})}var a=!1;if(_.forEach(e.calls,function(e){e.mandatoryDisposition&&(a=!0)}),"contact"===e.type&&0<e.calls.length){if(!a)return t._options.textContent="There is a call that hasn't been disposed yet.",i.show(t).then(function(){y(e)});alert=i.alert().title("Warning").textContent("There is a call that hasn't been disposed yet.").ok("OK"),i.show(alert).finally(function(){alert=void 0})}else y(e)}},n.on("trigger:contactmanager",b.onContactManager),n.on("trigger:jscripty",b.onJscripty),n.on("trigger:bot",b.onBot),n.on("trigger:browser:url",b.onBrowserUrl),n.on("trigger:browser:popup",b.onBrowserPopup),n.on("notification:save",b.onNotificationSave),n.on("notification:remove",b.onNotificationRemove),n.on("voice_queue_channel:remove",b.onVoiceChannelRemove),n.on("voice_outbound_channel:remove",b.onVoiceChannelRemove),function(){var e=a.localStorage.getItem("motion2.user:"+b.user.id);if(e)try{e=JSON.parse(e),b.tabs=e.tabs?e.tabs:{},b.currentTab=e.currentTab?e.currentTab:0,E(b.tabs[b.currentTab])}catch(e){console.error(e)}}(),e.$on("$destroy",function(){for(var e in b.notifications)b.notifications.hasOwnProperty(e)&&I({uniqueid:e});n.removeAllListeners("trigger:contactmanager"),n.removeAllListeners("trigger:jscripty"),n.removeAllListeners("trigger:browser:url"),n.removeAllListeners("trigger:browser:popup"),n.removeAllListeners("notification:save"),n.removeAllListeners("notification:remove"),n.removeAllListeners("voice_queue_channel:remove"),n.removeAllListeners("voice_outbound_channel:remove")})}function t(n,a,t,i){var s={},o={},r={},l={};function d(){if(o=i.getCurrentUser(),r=JSON.parse(t.localStorage.getItem("motion2.home:"+o.id)).currentSidebarTab,l=t.localStorage.getItem("motion2.home."+r+":"+o.id)){var e=JSON.parse(l);e.drafts||(e.drafts={}),l=e}else l={drafts:{}};return l.drafts}function c(){_.isEmpty(s.drafts)?delete l.drafts:l.drafts=s.drafts,t.localStorage.setItem("motion2.home."+r+":"+o.id,JSON.stringify(l))}return s.init=function(){s.drafts=d()},s.getByInteraction=function(t){return s.drafts=d(),_.find(_.values(s.drafts),function(e){return e.interaction&&e.interaction.id===t})},s.removeByInteraction=function(t){s.drafts=d();var e=_.find(_.values(s.drafts),function(e){return e.interaction&&e.interaction.id===t});e&&(delete s.drafts[e.id],c())},s.add=function(e){s.drafts=d();var t=a.instant("DASHBOARDS.UNTITLED");e.contact?t=e.contact.firstName||e.contact.email:_.isEmpty(e.message.subject)||(t=e.message.subject);var n={type:"draft",title:e.account.key+" - "+t,channel:e.channel,content:e.message,account:e.account,interaction:e.interaction,id:_.random(1e10),openedAt:new Date,saved:!1};s.drafts[n.id]=n,c()},s.update=function(e){s.drafts=d();var t=s.drafts[e.id];t&&(t.content=e.message,s.drafts[e.id]=t,c())},s.open=function(e){s.drafts=d();var t=s.drafts[e];t&&n.$broadcast("open"+_.startCase(r)+"Draft",t)},s.remove=function(e){s.drafts=d(),s.drafts[e]&&(delete s.drafts[e],c())},s}e.$inject=["$scope","$mdDialog","$window","$translate","$document","Auth","api","socket","toasty","globalUserLists","globalLists","globalCompanies","globalTags","license","setting","desktopNotification","msUtils","draftManager"],t.$inject=["$rootScope","$translate","$window","Auth"],angular.module("app.dashboards").controller("AgentDashboardGeneralController",e).factory("draftManager",t)}(),function(){"use strict";angular.module("app.dashboards").provider("desktopNotification",function(){var f={autoClose:!0,duration:5,showOnPageHidden:!1};return{config:function(e){for(var t in e)f.hasOwnProperty(t)&&null!=e[t]&&(f[t]=e[t])},$get:["$q","$timeout","$window","PERMISSIONS",function(e,u,t,p){var g=t.Notification||t.mozNotification||t.webkitNotification;return{isSupported:v,currentPermission:h,requestPermission:function(){if(!v())return e.reject("Notification API not supported");var n=e.defer();Promise.resolve(g.requestPermission)==g.requestPermission?g.requestPermission().then(function(e){p.GRANTED===e?n.resolve(e):n.reject(e)}):g.requestPermission(function(e,t){p.GRANTED===e?n.resolve(e):n.reject(e)});return n.promise},show:function(e,t){if(t=t||{},!v()||(n=e,a=t,i=angular.isString(n),s=!a.onClick||angular.isFunction(a.onClick),!i||!s)||function(e){if(e||f.showOnPageHidden)return!(window.document.hidden||window.document.mozHidden||window.document.webkitHidden)}(t.showOnPageHidden)||h()!==p.GRANTED)return;var n,a,i,s;var o=new g(e,t),r=t.duration||f.duration,l=void 0===t.autoClose?f.autoClose:t.autoClose;o.onclick=function(){t.onClick&&t.onClick(),t.focusOnclick&&window.focus(),t.closeOnClick&&o.close()},l&&(d=o,c=r,m=1e3*c,u(d.close.bind(d),m,!1));var d,c,m;return o},permissions:{default:p.DEFAULT,granted:p.GRANTED,denied:p.DENIED}};function v(){return!(void 0===g)}function h(){return(g||{}).permission}}]}}).provider("msNavigationAgentService",function(){var r=angular.injector(["ng"]).get("$log"),l=[];function t(e,t){if(angular.isString(e)){for(var n=e.split("."),a=n[n.length-1],i=function(e){var t=l;if(1===e.length)return t;e.pop();for(var n=0;n<e.length;n++){for(var a=e[n],i=!0,s=0;s<t.length;s++)if(t[s]._id===a){t=t[s].children,i=!1;break}if(i){var o={_id:a,_path:e.join("."),title:a,weight:1,children:[]};t.push(o),t=o.children}}return t}(n),s=!1,o=0;o<i.length;o++)if(i[o]._id===a){s=i[o];break}s?(angular.extend(s,t),s.uisref=d(s)):(t.children=[],!angular.isUndefined(t.weight)&&angular.isNumber(t.weight)||(t.weight=1),t._id=a,t._path=e,t.uisref=d(t),i.push(t))}else r.error("path must be a string (eg. `dashboard.project`)")}function d(e){var t="";return angular.isDefined(e.state)&&(t=e.state,angular.isDefined(e.stateParams)&&angular.isObject(e.stateParams)&&(t=t+"("+angular.toJson(e.stateParams)+")")),t}this.saveItem=t,this.deleteItem=function(e){if(!angular.isString(e))return void r.error("path must be a string (eg. `dashboard.project`)");for(var t=l,n=e.split("."),a=0;a<n.length;a++)for(var i=n[a],s=0;s<t.length;s++)if(t[s]._id===i){if(t[s]._path===e)return t.splice(s,1),!0;t=t[s].children;break}return!1},this.$get=function(){var e={saveItem:t,getNavigation:function(e){if(e){for(var t=0;t<l.length;t++)if(l[t]._id===e)return[l[t]];return null}return l}};return e}}).constant("PERMISSIONS",{DEFAULT:"default",GRANTED:"granted",DENIED:"denied"})}(),function(){"use strict";function e(n){var a=this;a.setting={},a.messages={count:0,rows:[]},a.showInteraction=!1,a.init=function(e,t){{if(a.setting=t,a.tab=e,a.tab.saved=!0,a.tab&&a.tab.data&&a.tab.data.uniqueid)return n.squareMessage.get({uniqueid:a.tab.data.uniqueid}).$promise.then(function(e){a.messages=e}).finally(function(){a.showInteraction=!0});a.showInteraction=!0}},a.getMessagesAlignment=function(e){switch(a.setting.messagesAlignment){case"left":return"in"==e.direction?e.direction:"out-left-aligned";case"right":return"in"==e.direction?"in-right-aligned":e.direction;default:return e.direction}}}e.$inject=["api"],angular.module("app.dashboards").controller("AgentGeneralBotController",e)}(),function(){"use strict";function e(d,c,n,m,u,p,t,e,s,a){var g=this;function i(e){e&&e.count&&e.rows.length&&(g.journey=_.concat(g.journey,e.rows))}g.user=t.getCurrentUser(),g.detectBrowser=a.detectBrowser(),g.journey=[],g.queryHopper={fields:"id,phone,scheduledat",sort:"-updatedAt",limit:10,page:1},g.queryFinal={fields:"uniqueid,calleridnum,statedesc,starttime,disposition",sort:"-updatedAt",limit:10,page:1},g.queryHistory={fields:"uniqueid,calleridnum,statedesc,scheduledat,starttime,endtime",sort:"-updatedAt",limit:10,page:1},g.hoppers={rows:[],count:0},g.finals={rows:[],count:0},g.histories={rows:[],count:0},g.addNewContact=function(){g.errors=[],u.cmContact.save(g.contact).$promise.then(function(e){return g.contact.id=e.id,g.newContact=!1,g.tab.title=e.firstName||e.phone,g.tab.contact=g.contact,u.user.addContacts({id:t.getCurrentUser().id,ids:[e.id]})}).then(function(){g.detailForm.$pristine=!0,g.customFieldsForm.$pristine=!0,p.success({title:"Contact properly created",msg:g.contact.firstName?g.contact.firstName+" has been created!":""})}).then(function(){return u.cmContact.setTags({id:g.contact.id,ids:g.tab.Tags}).$promise}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.contact.save"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.contact.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveContact=function(){g.errors=[],u.cmContact.update({id:g.contact.id},g.contact).$promise.then(function(e){return g.tab.title=e.firstName||e.phone,g.tab.contact=g.contact,m.$parent.vm.updateLocalStorage(),u.user.addContacts({id:t.getCurrentUser().id,ids:[e.id]})}).then(function(){return u.cmContact.setTags({id:g.contact.id,ids:g.tab.Tags}).$promise}).then(function(){g.detailForm.$pristine=!0,g.customFieldsForm.$pristine=!0,p.success({title:"Contact properly updated!",msg:g.contact.name?g.contact.name+" has been updated!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.contact.save"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.contact.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getCustomFields=function(e){return u.cmList.getCustomFields({id:e}).$promise.then(function(e){g.tab.customFields=e}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"LIST:GETCustomFields",msg:e.data?JSON.stringify(e.data):e.toString()})})},g.call=m.$parent.vm.call,g.disposeCall=function(e,a){var n=g.user.voicePause||g.user.chatPause||g.user.mailPause||g.user.openchannelPause||g.user.faxPause,i=a.mandatoryDisposition;if(g.newContact)return void p.error({title:"ATTENTION",msg:"Please save the contact before disposing!"});d.show({controller:"DisposeCallDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/contact/dispose/dialog.html",parent:angular.element(c.body),targetEvent:a,clickOutsideToClose:!a.mandatoryDisposition,escapeToClose:!a.mandatoryDisposition,resolve:{globalDispositions:["apiResolver",function(e){return e.resolve("disposition@get",{MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null"})}]},onRemoving:function(e,t){g.user&&i&&!n&&u.user.unpause({id:g.user.id}).$promise.catch(function(e){console.error(e)})},locals:{dispositions:g.tab.dispositions,contact:g.contact,call:a}}).then(function(e){for(var t in e&&("BLACKLIST"===e?p.success({title:s.instant("DASHBOARDS.INFO"),msg:s.instant("DASHBOARDS.CALL_DISPOSED")+" "+e}):"RECALLME"===e||"RESCHEDULE"===e||p.success({title:s.instant("DASHBOARDS.INFO"),msg:s.instant("DASHBOARDS.CALL_SAVED")})),m.$parent.$parent.$parent.vm.tabs)if(m.$parent.$parent.$parent.vm.tabs.hasOwnProperty(t)){var n=m.$parent.$parent.$parent.vm.tabs[t];_.remove(n.calls,function(e){return e.uniqueid===a.uniqueid})}})},g.duplicateContact=function(e){d.show({controller:"DuplicateContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",parent:angular.element(c.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:g.contact.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:t.getCurrentUser().id,fields:"id,name"})}]},locals:{contacts:[]}})},g.mergeContact=function(e){d.show({controller:"MergeContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/merge/dialog.html",parent:angular.element(c.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:g.contact.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:t.getCurrentUser().id,fields:"id,name"})}]},locals:{contacts:[]}}).then(function(e){if(e){for(var t in m.$parent.$parent.$parent.vm.tabs)if(m.$parent.$parent.$parent.vm.tabs.hasOwnProperty(t)){var n=m.$parent.$parent.$parent.vm.tabs[t];n&&n.contact&&(e.from&&e.from.id&&e.from.id===n.contact.id&&m.$parent.$parent.$parent.vm.removeTab(n),e.to&&e.to.id&&e.to.id===n.contact.id&&m.$parent.$parent.$parent.vm.removeTab(n))}e.new&&m.$parent.$parent.$parent.vm.addContactTab(e.new)}})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.addJscriptyTab=function(e){try{e.formData=Mustache.render(e.formData,{contact:g.contact,user:g.user})}catch(e){console.error(e)}try{m.$parent.$parent.$parent.vm.addTab({type:"jscripty",title:e.name,icon:"icon-script",color:"grey",project:e,contact:g.contact})}catch(e){p.error({title:"ERROR OPENING JSCRIPTY PROJECT",msg:"The project cannot be started"+JSON.stringify(e)})}},g.getHoppers=function(){g.contact&&g.contact.id&&(g.queryHopper.ContactId=g.contact.id,g.queryHopper.offset=(g.queryHopper.page-1)*g.queryHopper.limit,g.promise=u.cmHopper.get(g.queryHopper,l("hoppers")).$promise)},g.getFinals=function(){g.contact&&g.contact.id&&(g.queryFinal.ContactId=g.contact.id,g.queryFinal.offset=(g.queryFinal.page-1)*g.queryFinal.limit,g.promise=u.cmHopperFinal.get(g.queryFinal,l("finals")).$promise)},g.getHistories=function(){g.contact&&g.contact.id&&(g.queryHistory.ContactId=g.contact.id,g.queryHistory.offset=(g.queryHistory.page-1)*g.queryHistory.limit,g.promise=u.cmHopperHistory.get(g.queryHistory,l("histories")).$promise)},g.getJscriptyProjects=function(){u.jscriptyProject.get({fields:"createdAt,updatedAt,id,name,description,createdAt,formData,enableUncompleteSave",sort:"-updatedAt",nolimit:!0}).$promise.then(function(e){g.jscriptyProjects=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.jscripty.account"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.jscripty.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getMailAccounts=function(){u.user.getMailAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.mailAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mail.account"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mail.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getFaxAccounts=function(){u.user.getFaxAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.faxAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.fax.account"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.fax.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getSmsAccounts=function(){u.user.getSmsAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.smsAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.sms.account"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.sms.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getOpenchannelAccounts=function(){u.user.getOpenchannelAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.openchannelAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.sms.account"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannel.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getChatWebsites=function(){u.user.getChatWebsites({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.chatAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatAccounts.account"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatAccounts.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getLists=function(){u.user.getLists({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.lists=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cm.lists"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cm.lists",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.composeInteraction=function(e,o,r,t){var l=o.toLowerCase();d.show({controller:"Compose"+o+"InteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/compose"+o+"/dialog.html",parent:angular.element(c.body),clickOutsideToClose:!1,locals:{account:r,message:{to:"mail"==l?t:t.split(",")},type:"new",interaction:{Contact:g.contact}},fullscreen:!0}).then(function(s){return u[l+"Account"].send({id:r.id},s).$promise.then(function(e){if("Mail"===o){var t=e;if(t&&t.Messages&&t.Messages.length){if(s.attachments&&s.attachments.length)for(var n=0;n<s.attachments.length;n+=1)u.attachment.update({id:s.attachments[n].id},{MailMessageId:_.head(t.Messages).id});if(p.success({title:"Message properly sent!",msg:"Message has been sent!"}),t.closed){t.disposition=null;var a=!r.mandatoryDisposition,i=g.user.voicePause||g.user.chatPause||g.user.mailPause||g.user.openchannelPause||g.user.faxPause;d.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(c.body),onRemoving:function(e,t){g.user&&r.mandatoryDisposition&&!i&&u.user.unpause({id:g.user.id}).$promise.catch(function(e){console.error(e)})},clickOutsideToClose:a,escapeToClose:a,locals:{user:g.user,channel:"mail",interaction:t}})}else m.$parent.vm.addInteractionTab("mail",t)}}else p.success({title:"Message properly sent!",msg:"Message has been sent!"}),m.$parent.vm.addInteractionTab(l,e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else"fax"===l?p.error({title:"FAX:SEND",msg:e.data?JSON.stringify(e.data):e.message||e.toString()}):p.error({title:e.status?"API:"+e.status+" - "+e.statusText:o.toUpperCase()+"ACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})})},g.init=function(e,t){g.tab=e,m.$watchGroup(["vm.detailForm.$pristine","vm.customFieldsForm.$pristine"],function(e){g.tab.saved=e[0]&&e[1]}),g.license=t,g.contact=g.tab.contact,g.newContact=!1,g.currentTab=0,g.contact&&g.contact.id?(u.user.addContacts({id:g.user.id,ids:[g.contact.id]}),g.contact.ListId&&(g.tab.userLists.rows=_.unionBy(g.tab.userLists.rows,_.filter(g.tab.lists.rows,{id:g.contact.ListId}),"id"),g.list=_.find(g.tab.userLists.rows,{id:g.contact.ListId})),g.getHoppers(),g.getFinals(),g.getHistories(),g.getMailAccounts(),g.getFaxAccounts(),g.getSmsAccounts(),g.getOpenchannelAccounts(),g.getChatWebsites(),g.getLists()):(g.newContact=!0,e.autoCreate&&(console.log("autoCreate"),g.addNewContact()));u.user.get({fields:"id,fullname",nolimit:!0}).$promise.then(function(e){g.users=e||{count:0,rows:[]},g.usersMap=_.mapValues(_.keyBy(g.users.rows,"id"),"fullname")}).then(function(){if(g.contact&&g.contact.id)return u.cmContact.getTags({id:g.contact.id}).$promise}).then(function(e){e&&(g.tab.Tags=_.map(e.rows,"id"))}).then(function(e){var t=["mail","chat","sms","openchannel","fax"];if(e&&e.id){for(var n=0;n<t.length;n++)u[t[n]+"Interaction"].get({ContactId:e.id,includeAll:!0}).$promise.then(i);u.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(i).catch(function(e){console.error(e)})}}(g.contact))},g.hasPermission=function(e){return t.hasPermission(e)},g.openInteraction=function(e,t){try{if(t.MailAccountId)return m.$parent.$parent.$parent.vm.addInteractionTab("mail",t);if(t.ChatWebsiteId)return m.$parent.$parent.$parent.vm.addInteractionTab("chat",t);if(t.SmsAccountId)return m.$parent.$parent.$parent.vm.addInteractionTab("sms",t);if(t.OpenchannelAccountId)return m.$parent.$parent.$parent.vm.addInteractionTab("openchannel",t);if(t.FaxAccountId)return m.$parent.$parent.$parent.vm.addInteractionTab("fax",t)}catch(e){p.error({title:"ERROR OPEN INTERACTION",msg:"Customer Journey can't open the interaction"})}},g.getColorByItem=function(e){var t="";e.FaxAccountId?t="fax":e.OpenchannelAccountId?t="openchannel":e.SmsAccountId?t="sms":e.MailAccountId?t="mail":e.ChatWebsiteId?t="chat":e.amaflags&&(t="voice");return function(e){switch(e){case"chat":return"green-A700";case"mail":return"teal";case"sms":return"orange";case"openchannel":return"amber-A200";case"fax":return"blue-grey-A200";default:return"blue-A700"}}(t)},g.isMyAccount=function(e){{if(e.FaxAccountId)return _.includes(_.map(g.faxAccounts?g.faxAccounts.rows:[],"id"),e.FaxAccountId);if(e.OpenchannelAccountId)return _.includes(_.map(g.openchannelAccounts?g.openchannelAccounts.rows:[],"id"),e.OpenchannelAccountId);if(e.SmsAccountId)return _.includes(_.map(g.smsAccounts?g.smsAccounts.rows:[],"id"),e.SmsAccountId);if(e.MailAccountId)return _.includes(_.map(g.mailAccounts?g.mailAccounts.rows:[],"id"),e.MailAccountId);if(e.ChatWebsiteId)return _.includes(_.map(g.chatAccounts?g.chatAccounts.rows:[],"id"),e.ChatWebsiteId);if(e.amaflags)return!0}return!1},g.getJscriptyProjects(),m.$watch("currentTab",function(e,t){1===g.currentTab&&(g.getHoppers(),g.getFinals(),g.getHistories())});var o=!0,r=1;function l(t){return function(e){g[t]=e||{count:0,rows:[]}}}m.$watch("queryHopper.filter",function(e,t){o?n(function(){o=!1}):(t||(r=g.queryHopper.page),e!==t&&(g.queryHopper.page=1),e||(g.queryHopper.page=r),g.getHoppers())}),m.$watch("queryFinal.filter",function(e,t){o?n(function(){o=!1}):(t||(r=g.queryFinal.page),e!==t&&(g.queryFinal.page=1),e||(g.queryFinal.page=r),g.getFinals())}),m.$watch("queryHistory.filter",function(e,t){o?n(function(){o=!1}):(t||(r=g.queryHistory.page),e!==t&&(g.queryHistory.page=1),e||(g.queryHistory.page=r),g.getHistories())}),m.$on("$destroy",function(){})}e.$inject=["$mdDialog","$document","$timeout","$scope","api","toasty","Auth","socket","$translate","msUtils"],angular.module("app.dashboards").controller("AgentGeneralContactController",e)}(),function(){"use strict";function e(t,i,s,o,e,n,a,r,l,d){var c=this;function m(){var e=c.choice?c.choice.toLowerCase():void 0;return{id:c.call.uniqueid,disposition:c.choice,dispositionat:moment(),amd:"amd"===e,fax:"fax"===e,blacklist:"blacklist"===e,recallme:"recallme"===e,UserId:"recallme"===e?l.getCurrentUser().id:null,OwnerId:l.getCurrentUser().id}}c.choice=null,c.isReschedule=!1,c.recallme=!1,c.queueCampaigns={count:0,rows:[]},c.queueCampaign=void 0,c.dispositions=e,c.globalDispositions=n,c.contact=r,c.call=a,c.note=c.call.note||void 0,c.dialerCall=!1,c.hasBlackLists=!1,c.hopper={minDate:new Date,dateTime:new Date},c.call&&c.call.variables&&c.call.variables["xmd-voicequeueid"]?(c.dialerCall=!0,o.voiceQueue.getBlackLists({id:c.call.variables["xmd-voicequeueid"]}).$promise.then(function(e){e&&e.rows&&0<e.rows.length&&(c.hasBlackLists=!0)}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.getBlackLists",msg:e.data?JSON.stringify(e.data):e.toString()})})):o.user.getQueues({id:l.getCurrentUser().id,fields:"id,name,dialActive",channel:"voice",type:"outbound",nolimit:!0}).$promise.then(function(e){c.queueCampaigns=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}),c.saveDisposition=function(e){c.choice=_.isNil(e)?c.choice:e,c.call.note=c.note,o.voiceCallReport.update({id:c.call.uniqueid,userDisposition:c.choice,note:c.note,UserId:l.getCurrentUser().id,ContactId:c.contact.id}).$promise.catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEVOICECALLREPORT",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.voiceRecording.get({uniqueid:c.call.uniqueid}).$promise.then(function(e){if(e)for(var t=0;t<e.rows.length;t+=1)o.voiceRecording.update({id:e.rows[t].id,userDisposition:c.choice}).$promise.catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEVOICERECORDING",msg:e.data?JSON.stringify(e.data):e.toString()})})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEVOICERECORDING",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.dialerCall&&(o.cmHopperFinal.update(m()).$promise.catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECMHOPPERFINAL",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.cmHopperHistory.update(m()).$promise.catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECMHOPPERHISTORY",msg:e.data?JSON.stringify(e.data):e.toString()})}));if(_.isNil(c.choice))t.hide(c.choice?c.choice.toUpperCase():"");else switch(c.choice.toLowerCase()){case"blacklist":c.call&&c.call.variables&&c.call.variables["xmd-voicequeueid"]&&function(e){if(e)o.voiceQueue.getBlackLists({id:e,type:"outbound",fields:"id"}).$promise.then(function(e){var t=[];if(e&&0<e.count){for(var n=0;n<e.rows.length;n+=1){var a=angular.copy(c.contact);delete a.id,a.ListId=e.rows[n].id,t.push(o.cmContact.save(a).$promise)}return i.all(t)}s.success({title:d.instant("DASHBOARDS.INFO"),msg:d.instant("DASHBOARDS.NOTAVAILABLE")+" "+c.choice}),c.choice=void 0}).then(function(e){e&&t.hide(c.choice?c.choice.toUpperCase():"")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEBLACKLIST",msg:e.data?JSON.stringify(e.data):e.toString()}),t.hide(c.choice?c.choice.toUpperCase():"")})}(c.call.variables["xmd-voicequeueid"]);break;case"reschedule":c.isReschedule=!0,c.recallme=!1;break;case"recallme":c.isReschedule=!0,c.recallme=!0;break;default:t.hide(c.choice?c.choice.toUpperCase():"")}},c.closeDialog=function(){t.cancel()},c.saveReschedule=function(){return c.disable=!0,o.cmHopper.save({phone:c.contact.phone,UserId:c.recallme?l.getCurrentUser().id:null,ContactId:c.contact.id,ListId:c.contact.ListId,VoiceQueueId:c.dialerCall?Number(c.call["xmd-voicequeueid"]):c.queueCampaign?c.queueCampaign.id:null,scheduledat:moment(c.hopper.dateTime).format("YYYY-MM-DD HH:mm:ss"),priority:3,recallme:c.recallme,OwnerId:l.getCurrentUser().id}).$promise.then(function(){c.dialerCall&&o.cmHopperFinal.update({id:c.call.uniqueid,rescheduled:!0,rescheduledat:moment(c.hopper.dateTime).format("YYYY-MM-DD HH:mm:ss"),recallme:c.recallme}).$promise.catch(function(e){console.log(e)})}).then(function(){s.success({title:d.instant("DASHBOARDS.INFO"),msg:d.instant("DASHBOARDS.CALL_DISPOSED")+" "+(c.recallme?d.instant("DASHBOARDS.RECALLME"):d.instant("DASHBOARDS.RESCHEDULE"))})}).catch(function(e){t.hide(c.choice?c.choice.toUpperCase():"")}).finally(function(){c.disable=!1,t.hide(c.choice?c.choice.toUpperCase():"")})}}e.$inject=["$mdDialog","$q","toasty","api","dispositions","globalDispositions","call","contact","Auth","$translate"],angular.module("app.staff").controller("DisposeCallDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.call=l,u.contact=r,u.hopper={minDate:new Date,dateTime:new Date},u.closeDialog=function(){a.cancel()},u.saveDialog=function(){return u.disable=!0,o.cmHopper.save({phone:u.contact.phone,UserId:c?d.getCurrentUser().id:null,ContactId:u.contact.id,ListId:u.contact.ListId,VoiceQueueId:Number(u.call["xmd-voicequeueid"]),scheduledat:moment(u.hopper.dateTime).format("YYYY-MM-DD HH:mm:ss"),priority:3,recallme:c,OwnerId:d.getCurrentUser().id}).$promise.then(function(){o.cmHopperFinal.update({id:u.call.uniqueid,rescheduled:!0,rescheduledat:moment(u.hopper.dateTime).format("YYYY-MM-DD HH:mm:ss"),recallme:c}).$promise}).then(function(){s.success({title:m.instant("DASHBOARDS.INFO"),msg:m.instant("DASHBOARDS.CALL_DISPOSED")+" "+(c?m.instant("DASHBOARDS.RECALLME"):m.instant("DASHBOARDS.RESCHEDULE"))}),a.hide()}).catch(function(e){a.cancel(e)}).finally(function(){u.disable=!1})}}e.$inject=["$scope","$state","$location","$mdDialog","$timeout","toasty","api","contact","call","Auth","recallme","$translate"],angular.module("app.staff").controller("RescheduleCallDialogController",e)}(),function(){"use strict";function e(e,t){var n=t(function(){},999);e.$on("$destroy",function(){n&&(t.cancel(n),n=null)})}e.$inject=["$scope","$interval"],angular.module("app.dashboards").controller("AgentHomeAbandonedController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c){var m=this;function u(){var e=i.localStorage.getItem("motion2.home.abandoned.bull.calls:"+m.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(m.query=_.merge(e.query,_.omit(m.query,["sort","limit","page"])),m.query=_.omit(m.query,"filter")),o.disposition.get({MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null"}).$promise.then(function(e){m.disposition=e?e.rows:[]}).catch(function(e){console.log(e)}),o.user.getQueues({id:r.getCurrentUser().id,fields:"id,name",channel:"voice",type:"outbound",nolimit:!0}).$promise.then(function(e){m.queues=e||{count:0,rows:[]},m.queuesMap=_.mapValues(_.keyBy(m.queues.rows,"name"),"name"),m.defaultQueues=m.queues.rows?_.map(m.queues.rows,"name").join(","):void 0}).catch(function(e){console.error(e)}).finally(function(){m.isSearchBarVisible=!!m.query.filter,m.getAbandonedCalls()})}function p(e){m.abandonedCalls=e||{count:0,rows:[]},!1,m.refresh=!0}m.showTooltip=!1,m.refresh=!0,m.disable=[],m.disposition={count:0,rows:[]},m.currentUser=r.getCurrentUser(),m.localizationMap=c,m.pickerModel={dateStart:null},m.queues={},m.abandonedCalls={count:0,rows:[]},m.query={fields:"id,type,calleridnum,calleridname,queue,queuecallerabandonAt,queuecallerexitAt,queuecallerexitreason,assigned,lastAssignedTo,updatedAt,disposition",type:"outbound",queuecallerexitreason:"TIMEOUT,ABANDONED",sort:"-updatedAt",limit:10,page:1},m.clearAll=function(){m.pickerModel={dateStart:null},m.getAbandonedCalls()},m.getAbandonedCalls=function(){if(m.pickerModel.dateStart){var e=moment(m.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();m.query.createdAt={$gte:m.pickerModel.dateStart,$lte:e}}else m.query.createdAt=void 0;m.query.queue=m.query.queue||m.defaultQueues,m.query.offset=(m.query.page-1)*m.query.limit,i.localStorage.setItem("motion2.home.abandoned.bull.calls:"+m.currentUser.id,JSON.stringify({query:_.omit(m.query,"queue")})),m.promise=o.voiceQueueReport.getVoiceQueuesReport(m.query,p).$promise},m.refreshAbandonedCalls=function(){m.showTooltip=!1,m.getAbandonedCalls()},m.onInit=u,m.reserved=function(e,t){e&&(m.disable[e.id]=!0,o.voiceQueueReport.update({id:e.id,lastAssignedTo:e.assigned?m.currentUser.name:null,assigned:e.assigned,disposition:t||null}).$promise.catch(function(e){console.log(e)}).finally(function(){m.disable[e.id]=!1}))},m.onSavevoiceQueueReport=function(e){m.queuesMap&&"outbound"===e.type&&m.queuesMap[e.queue]&&(m.showTooltip=!0)},m.onUpdatevoiceQueueReport=function(e){if(e){var t=_.findIndex(m.abandonedCalls.rows,["id",e.id]);0<=t&&_.merge(m.abandonedCalls.rows[t],e)}},m.call=e.$parent.$parent.$parent.$parent.vm.call,m.transfer=e.$parent.$parent.$parent.$parent.vm.transfer,m.webcall=e.$parent.$parent.$parent.$parent.vm.webcall,m.webtransfer=e.$parent.$parent.$parent.$parent.vm.webtransfer,m.onSearchBarCollapse=function(){m.query.filter=void 0,m.isSearchBarVisible=!1},m.onSearchBarExpand=function(){m.isSearchBarVisible=!0},l.onWithoutApply("voiceQueueReport:save",m.onSavevoiceQueueReport),l.onWithoutApply("voiceQueueReport:update",m.onUpdatevoiceQueueReport),u();var g=!0,v=1;e.$watch("vm_bull.query.filter",function(e,t){g?n(function(){g=!1}):(t||(v=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=v),m.getAbandonedCalls())}),e.$on("$destroy",function(){l.removeAllListeners("voiceQueueReport:save"),l.removeAllListeners("voiceQueueReport:update")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeAbandonedBullController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c){var m=this;function u(){var e=i.localStorage.getItem("motion2.home.abandoned.voice.calls:"+m.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(m.query=_.merge(e.query,_.omit(m.query,["sort","limit","page"])),m.query=_.omit(m.query,"filter")),o.disposition.get({MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null"}).$promise.then(function(e){m.disposition=e?e.rows:[]}).catch(function(e){console.log(e)}),o.user.getQueues({id:r.getCurrentUser().id,fields:"id,name",channel:"voice",type:"inbound",nolimit:!0}).$promise.then(function(e){m.queues=e||{count:0,rows:[]},m.queuesMap=_.mapValues(_.keyBy(m.queues.rows,"name"),"name"),m.defaultQueues=m.queues.rows?_.map(m.queues.rows,"name").join(","):void 0}).catch(function(e){console.error(e)}).finally(function(){m.isSearchBarVisible=!!m.query.filter,m.getAbandonedCalls()})}function p(e){m.abandonedCalls=e||{count:0,rows:[]},!1,m.refresh=!0}m.showTooltip=!1,m.refresh=!0,m.disable=[],m.disposition={count:0,rows:[]},m.currentUser=r.getCurrentUser(),m.localizationMap=c,m.pickerModel={dateStart:null},m.queues={},m.abandonedCalls={count:0,rows:[]},m.query={fields:"id,type,calleridnum,calleridname,queue,queuecallerabandonAt,queuecallerexitAt,queuecallerexitreason,assigned,lastAssignedTo,updatedAt,disposition",type:"inbound",queuecallerexitreason:"TIMEOUT,ABANDONED",sort:"-updatedAt",limit:10,page:1},m.clearAll=function(){m.pickerModel={dateStart:null},m.getAbandonedCalls()},m.getAbandonedCalls=function(){if(m.pickerModel.dateStart){var e=moment(m.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();m.query.createdAt={$gte:m.pickerModel.dateStart,$lte:e}}else m.query.createdAt=void 0;m.query.queue=m.query.queue||m.defaultQueues,m.query.offset=(m.query.page-1)*m.query.limit,i.localStorage.setItem("motion2.home.abandoned.voice.calls:"+m.currentUser.id,JSON.stringify({query:_.omit(m.query,"queue")})),m.promise=o.voiceQueueReport.getVoiceQueuesReport(m.query,p).$promise},m.refreshAbandonedCalls=function(){m.showTooltip=!1,m.getAbandonedCalls()},m.onInit=u,m.reserved=function(e,t){e&&(m.disable[e.id]=!0,o.voiceQueueReport.update({id:e.id,lastAssignedTo:e.assigned?m.currentUser.name:null,assigned:e.assigned,disposition:t||null}).$promise.catch(function(e){console.log(e)}).finally(function(){m.disable[e.id]=!1}))},m.onSavevoiceQueueReport=function(e){m.queuesMap&&"inbound"===e.type&&m.queuesMap[e.queue]&&(m.showTooltip=!0)},m.onUpdatevoiceQueueReport=function(e){if(e){var t=_.findIndex(m.abandonedCalls.rows,["id",e.id]);0<=t&&_.merge(m.abandonedCalls.rows[t],e)}},m.call=e.$parent.$parent.$parent.$parent.vm.call,m.transfer=e.$parent.$parent.$parent.$parent.vm.transfer,m.webcall=e.$parent.$parent.$parent.$parent.vm.webcall,m.webtransfer=e.$parent.$parent.$parent.$parent.vm.webtransfer,m.onSearchBarCollapse=function(){m.query.filter=void 0,m.isSearchBarVisible=!1},m.onSearchBarExpand=function(){m.isSearchBarVisible=!0},l.onWithoutApply("voiceQueueReport:save",m.onSavevoiceQueueReport),l.onWithoutApply("voiceQueueReport:update",m.onUpdatevoiceQueueReport),u();var g=!0,v=1;e.$watch("vm_voice.query.filter",function(e,t){g?n(function(){g=!1}):(t||(v=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=v),m.getAbandonedCalls())}),e.$on("$destroy",function(){l.removeAllListeners("voiceQueueReport:save"),l.removeAllListeners("voiceQueueReport:update")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeAbandonedVoiceController",e)}(),function(){"use strict";function e(t,e,a,n,i,s,o,r,l){var d=this;d.user=s.getCurrentUser(),d.license={},d.plugin={},d.setting={},d.sidebar="dashboard",d.draftManager=l,d.selectedAllText=n.instant("DASHBOARDS.ALL"),d.noResourcesAvailableText=n.instant("DASHBOARDS.NONE"),d.noTagsSelectedText=n.instant("DASHBOARDS.TAGS"),d.navigation=r.getNavigation(),d.addContactTab=t.$parent.vm.addContactTab,d.addInteractionTab=t.$parent.vm.addInteractionTab,d.init=function(e,t){d.license=e,d.setting=t;var n=a.localStorage.getItem("motion2.home:"+d.user.id);if(n){try{n=JSON.parse(n),d.sidebar=n.currentSidebarTab?n.currentSidebarTab:"dashboard"}catch(e){console.error(e),d.sidebar="dashboard"}"mail"===d.sidebar&&d.draftManager.init()}},d.changeSidebarTab=function(e){d.sidebar=e.view,"plugin"===d.sidebar&&(d.plugin=e.stateParams,d.pluginId=e.id,t.$broadcast("pluginUpdated",{plugin:d.plugin}));a.localStorage.setItem("motion2.home:"+d.user.id,JSON.stringify({currentSidebarTab:e.view}))},d.hasPermission=function(e){return s.hasPermission(e)},t.$on("quickFilter-setSelectedText",function(e,t,n){var i={};t.forEach(function(e){var t=e.queryParam,n=e.resources,a=e.key;_.isEmpty(n)?i[a]=d.noResourcesAvailableText:"tag"!==a||t&&!_.isEmpty(t)?t.length===n.length?i[a]=d.selectedAllText:i[a]=_(n).filter(function(e){return _.includes(t,e.id)}).map("name").value().join(", "):i[a]=d.noTagsSelectedText}),n(i)}),t.$watch("vm_home.sidebar",function(e,t){"mail"===e?d.draftManager.init():d.draftManager.drafts={}})}e.$inject=["$scope","$timeout","$window","$translate","api","Auth","socket","msNavigationAgentService","draftManager"],angular.module("app.dashboards").controller("AgentGeneralHomeController",e)}(),function(){"use strict";function e(a,n,e,t,i,s,o,r,l,d,c){var m=this;function u(e){m.chatInteractions=e||{count:0,rows:[]};for(var t=0;t<m.chatInteractions.rows.length;t+=1)g(m.chatInteractions.rows[t])}function p(e,t){e||(m.query.page=1),m.pickerModel.dateStart?m.query.createdAt={$gte:moment(m.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(m.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:m.query.createdAt=void 0,m.query.offset=(m.query.page-1)*m.query.limit;var n=i.localStorage.getItem("motion2.home.chat:"+m.user.id);(n=n?JSON.parse(n):{}).query=m.query,i.localStorage.setItem("motion2.home.chat:"+m.user.id,JSON.stringify(n)),m.promise=o.chatInteraction.get(m.query,u).$promise,a.$emit("quickFilter-setSelectedText",[{queryParam:m.query.ChatWebsiteId,resources:m.chatAccounts.rows,key:"account"},{queryParam:m.query.tag,resources:m.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){m.quickFilterSelectedText[t]=e})})}function g(e){e.Contact?e.contactName=(e.Contact.firstName||"")+" "+(e.Contact.lastName||""):e.contactName=s.instant("DASHBOARDS.UNKNOWN")}m.user=r.getCurrentUser(),m.license={},m.setting={},m.tags={count:0,rows:[]},m.chatInteractions={count:0,rows:[]},m.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null},m.filter={activeConditions:[],fields:[{name:"Id",column:"id",tableAlias:"i",type:"number"},{name:"Contact",column:"ContactId",valueColumn:"id",tableAlias:"i",type:"text"},{name:"Body",column:"plainBody",tableAlias:"me",type:"text"},{name:"Status",column:"closed",tableAlias:"i",type:"select"},{name:"Substatus",column:"substatus",tableAlias:"i",type:"select"},{name:"Agent",column:"UserId",tableAlias:"i",valueColumn:"id",type:"autocomplete"},{name:"Chat Website",column:"ChatWebsiteId",tableAlias:"i",type:"select"},{name:"Tags",column:"TagId",tableAlias:"t",valueColumn:"id",type:"select"},{name:"Start Date",column:"createdAt",tableAlias:"i",type:"date"},{name:"Read",column:"Messages.count",tableAlias:"me",type:"select"}],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Chat Website":t.values=m.chatAccounts.rows;break;case"Agent":o.user.get({role:"agent",fields:"id,name,fullname"}).$promise.then(function(e){t.source=e.rows||[]}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_AGENTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"Read":t.values=[{id:1,name:"Read",value:1},{id:2,name:"Unread",value:0}];break;case"Status":t.values=[{id:1,name:"Opened",value:0},{id:2,name:"Closed",value:1}];break;case"Substatus":t.values=m.subStatuses.rows;break;case"Tags":t.values=m.tags.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(m.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?m.filter.activeConditions.splice(i,1,s):m.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(m.filter.activeConditions)?m.query.advancedFilter=void 0:(m.query.advancedFilter={},_.forEach(m.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:e.condition};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,m.query.advancedFilter[e.column]?_.isArray(m.query.advancedFilter[e.column])?m.query.advancedFilter[e.column].push(t):m.query.advancedFilter[e.column]=[].concat(m.query.advancedFilter[e.column],t):m.query.advancedFilter[e.column]=t})),p()}},m.isAdvancedFilterVisible=!1,m.quickFilterSelectedText={tag:s.instant("DASHBOARDS.TAGS"),account:s.instant("DASHBOARDS.ALL")},m.success=u,m.getChatInteractions=p,m.showChatInteraction=function(e,t){a.$parent.vm.addInteractionTab("chat",t)},m.downloadChatInteraction=function(e,s,t){o.chatInteraction.download({id:s.id,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="chat-interaction"+s.id+".zip",a=new Blob(t,{type:e.type}),i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)d.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"downloadChatInteraction",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getContactLabel=g,m.getUserLabel=function(e){if(e.UserId)return e.UserId===r.getCurrentUser().id?s.instant("DASHBOARDS.ME"):m.usersByKey[e.UserId].fullname+" <"+m.usersByKey[e.UserId].internal+">";return s.instant("DASHBOARDS.NOT_ASSIGNED")},m.getChatWebsiteLabel=function(e){if(e.Account)return e.Account.key;return s.instant("DASHBOARDS.UNKNOWN")},m.clearAll=function(){m.calendarModel={dateStart:null},m.pickerModel={dateStart:null},m.serviceModel={dateStart:null},m.getChatInteractions()},m.clearSelection=function(e){switch(e){case"account":m.query.ChatWebsiteId=[].concat(m.chatAccounts.rows[0].id);break;case"tag":m.query.tag=[]}m.getChatInteractions()},m.selectAll=function(e){switch(e){case"account":m.query.ChatWebsiteId=_.map(m.chatAccounts.rows,"id");break;case"tag":m.query.tag=_.map(m.tags.rows,"id")}m.getChatInteractions()},m.onInit=function(e,t){return m.license=e,m.setting=t,o.user["get"+_.upperFirst("ChatWebsites")]({id:m.user.id,nolimit:!0}).$promise.then(function(e){return m.chatAccounts=e||{count:0,rows:[]},o.tag.get().$promise}).then(function(e){m.tags=e||{count:0,rows:[]}}).then(function(){return o.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){m.usersByKey=_.keyBy(e.rows,"id")}).catch(function(e){console.error(e)}).finally(function(){var e=i.localStorage.getItem("motion2.home.chat:"+m.user.id);if(e)try{(e=JSON.parse(e)).query&&(m.query=_.merge(m.query,e.query),m.query=_.omit(m.query,"filter"),m.query.sort&&0<=m.query.sort.indexOf("lastMessage")&&(m.query=_.omit(m.query,"sort")),m.query.includeAll=!0,m.isSearchBarVisible=!!m.query.filter,m.isAdvancedFilterVisible=!!m.query.advancedFilter),e.filterConditions&&(m.filter.activeConditions=e.filterConditions)}catch(e){console.error(e)}else m.query.ChatWebsiteId=_.map(m.chatAccounts.rows,"id");l.on("chatInteraction:save",m.onChatInteractionSave),l.on("chatInteraction:update",m.onChatInteractionSave),l.on("chatInteractionTags:save",m.onChatInteractionTagsSave),l.on("chatMessage:save",m.onChatMessageSave),l.on("chatMessage:update",m.onChatMessageSave),l.on("user_has_chat_interactions:save",m.onChatInteractionOpen),l.on("user_has_chat_interactions:remove",m.onChatInteractionClose),m.getChatInteractions(m.query.page)})},m.onChatInteractionSave=function(e){if(e){var t=_.find(m.chatInteractions.rows,{id:e.id});if(t){if(t.Users=[],e.closed&&(t.unreadMessages=0),m.query.sort){var n=_.startsWith(m.query.sort,"-")?"desc":"asc";m.chatInteractions.rows=_.orderBy(m.chatInteractions.rows,_.trimStart(m.query.sort,"-"),n)}_.merge(t,_.pick(e,_.keys(t)))}else p(m.query.page)}},m.onChatInteractionTagsSave=function(e){if(e){var t=_.find(m.chatInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},m.onChatMessageSave=function(e){if(e&&!e.secret){var t=_.find(m.chatInteractions.rows,{id:e.ChatInteractionId});if(t){var n=_.find(t.Messages,{id:e.id});n?_.merge(n,_.pick(e,_.keys(n))):(_.isNil(t.Messages)&&(t.Messages={count:0}),e.read||(t.Messages.count+=1))}}},m.onChatInteractionOpen=function(e){var t=_.find(m.chatInteractions.rows,{id:e.ChatInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},m.onChatInteractionClose=function(e){var t=_.find(m.chatInteractions.rows,{id:e.ChatInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},m.onSearchBarCollapse=function(){m.query.advancedFilter=void 0,m.isSearchBarVisible=!1},m.onSearchBarExpand=function(){m.isSearchBarVisible=!0},m.localizationMap=c,m.pickerModel={dateStart:null};var v=!0,h=1;a.$watch("vm.query.filter",function(e,t){v?n(function(){v=!1}):(t||(h=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=h),m.getChatInteractions(m.query.page))}),a.$on("$destroy",function(){l.removeAllListeners("chatMessage:save"),l.removeAllListeners("chatMessage:update"),l.removeAllListeners("chatInteraction:save"),l.removeAllListeners("chatInteractionTags:save"),l.removeAllListeners("chatInteraction:update"),l.removeAllListeners("user_has_chat_interactions:save"),l.removeAllListeners("user_has_chat_interactions:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeChatController",e)}(),function(){"use strict";function e(n,t,e,a,i,s,o,r,l){var d=this;function c(e){d.contacts=e||{count:0,rows:[]}}function m(){r.cmContact.describe({id:d.query.ListId}).$promise.then(function(e){var t=e.toJSON();d.filter.fields=[],Object.entries(t).forEach(function(e){var t=function(e){var t={name:_.startCase(e.displayName),tableAlias:"c"};if(e.custom)switch(e.custom.type){case"text":t.type="text";break;case"select":t.type="select",t.values=_.map(JSON.parse(e.custom.values),function(e,t){return{id:t,name:e.value,value:e.value}});break;case"switch":t.type="select",t.values=[{id:1,name:"Disabled",value:0},{id:2,name:"Enabled",value:1}];break;case"number":t.type="number";break;case"datetime":t.type="date"}else switch(e.columnName){case"dateOfBirth":t.type="date",t.column=e.columnName;break;case"CompanyId":t.name="Company",t.type="select",t.column=e.columnName;break;case"ListId":t.name="List",t.type="select",t.column=e.columnName;break;default:_.includes(e.type.toLowerCase(),"int")?t.type="number":_.includes(e.type.toLowerCase(),"date")?t.type="date":t.type="text",t.column=e.columnName}return t}(e[1]);d.filter.fields.push(t)})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"DESCRIBE_CM_CONTACTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})}),d.query.offset=(d.query.page-1)*d.query.limit,s.localStorage.setItem("motion2.home.contacts:"+d.currentUser.id,JSON.stringify({query:d.query,filterConditions:d.filter.activeConditions})),d.promise=r.cmContact.get(d.query,c).$promise,t.$emit("quickFilter-setSelectedText",[{queryParam:d.query.ListId,resources:d.lists.rows,key:"list"},{queryParam:d.query.tag,resources:d.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){d.quickFilterSelectedText[t]=e})})}d.currentUser=o.getCurrentUser(),d.isAdvancedFilterVisible=!1,d.quickFilterSelectedText={tag:e.instant("DASHBOARDS.TAGS"),list:e.instant("DASHBOARDS.ALL")},d.lists={},d.contacts={count:0,rows:[]},d.tags={count:0,rows:[]},d.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1},d.filter={activeConditions:[],fields:[],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Company":r.cmCompany.get().$promise.then(function(e){t.values=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_COMPANIES",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"List":t.values=d.lists.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(d.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?d.filter.activeConditions.splice(i,1,s):d.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(d.filter.activeConditions)?d.query.advancedFilter=void 0:(d.query.advancedFilter={},_.forEach(d.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:e.condition.value};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,d.query.advancedFilter[e.column]?_.isArray(d.query.advancedFilter[e.column])?d.query.advancedFilter[e.column].push(t):d.query.advancedFilter[e.column]=[].concat(d.query.advancedFilter[e.column],t):d.query.advancedFilter[e.column]=t})),m()}},d.getContacts=m,d.refreshContacts=function(){d.getContacts()},d.mergeContact=function(e,t){i.show({controller:"MergeContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/merge/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:t.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:d.currentUser.id,fields:"id,name"})}]},locals:{contacts:d.contacts.rows}})},d.duplicateContact=function(e,t){i.show({controller:"DuplicateContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:t.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:d.currentUser.id,fields:"id,name"})}]},locals:{contacts:d.contacts.rows}})},d.openContact=function(e){return r.cmContact.get({id:e}).$promise.then(function(e){t.$parent.vm.addContactTab(e)})},d.call=t.$parent.vm.call,d.clearSelection=function(e){switch(e){case"list":d.query.ListId=[].concat(d.lists.rows[0].id);break;case"tag":d.query.tag=[]}d.getContacts()},d.selectAll=function(e){switch(e){case"list":d.query.ListId=_.map(d.lists.rows,"id");break;case"tag":d.query.tag=_.map(d.tags.rows,"id")}d.getContacts()},d.onInit=function(){r.user.getLists({id:d.currentUser.id,fields:"id,name,dialPrefix",sort:"name",nolimit:!0}).$promise.then(function(e){return d.lists=e||{count:0,rows:[]},d.listsMap=_.keyBy(d.lists.rows,"id"),r.tag.get().$promise}).then(function(e){d.tags=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){var e=s.localStorage.getItem("motion2.home.contacts:"+d.currentUser.id);e?((e=JSON.parse(e))&&e.query&&(d.query=_.merge(d.query,e.query),d.query=_.omit(d.query,"filter"),d.query.advancedFilter&&_.mapKeys(d.query.advancedFilter,function(e,t){d.filter.activeConditions.push()})),e.filterConditions&&(d.filter.activeConditions=e.filterConditions)):d.query.ListId=_.isEmpty(d.lists.rows)?"null":_.map(d.lists.rows,"id"),d.isSearchBarVisible=!!d.query.filter,d.isAdvancedFilterVisible=!!d.query.advancedFilter,d.getContacts()})},d.onSearchBarCollapse=function(){d.query.advancedFilter=void 0,d.isSearchBarVisible=!1},d.onSearchBarExpand=function(){d.isSearchBarVisible=!0};var u=!0,p=1;t.$watch("vm.query.filter",function(e,t){u?a(function(){u=!1}):(t||(p=d.query.page),e!==t&&(d.query.page=1),e||(d.query.page=p),d.getContacts())})}e.$inject=["$document","$scope","$translate","$timeout","$mdDialog","$window","Auth","api","toasty"],angular.module("app.dashboards").controller("AgentHomeContactsController",e)}(),function(){"use strict";function e(e,t){var n=t(function(){},999);e.$on("$destroy",function(){n&&(t.cancel(n),n=null)})}e.$inject=["$scope","$interval"],angular.module("app.dashboards").controller("AgentHomeDashboardController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["type","waiting","dialMethod","dialActive"];function u(e){c.voiceQueuesTotal=e.count?e.count:0,c.voiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.voiceQueues,function(e,t){c.rpcVoiceQueues[t]&&(c.voiceQueues[t].waiting=c.rpcVoiceQueues[t].waiting||0)})}c.voiceQueues={},c.voiceQueuesTotal=0,c.rpcVoiceQueues={},c.getVoiceQueues={},c.rpcVoiceQueuesChannels={},c.addVoiceQueuesChannels={},c.deleteVoiceQueuesChannels=[],c.load=!0,c.query={id:r.getCurrentUser().id,fields:"id,name,type,dialMethod,dialActive",channel:"voice",type:"outbound",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=u,c.getVoiceQueues=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,u).$promise},c.getSize=function(e){return _.size(e)},c.onSaveQueue=function(e){c.voiceQueues[e.id]&&c.rpcVoiceQueues[e.id]&&(c.rpcVoiceQueues[e.id]=e,_.merge(c.voiceQueues[e.id],_.pick(e,m)))},c.onSaveChannel=function(e){"outbound"===e.type&&(e.queuecallerleaveAt?(delete c.rpcVoiceQueuesChannels[e.uniqueid],c.load&&c.deleteVoiceQueuesChannels.push(e.uniqueid)):(c.rpcVoiceQueuesChannels[e.uniqueid]=e,c.load&&(c.addVoiceQueuesChannels[e.uniqueid]=e)))},c.onUserVoiceQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getVoiceQueues()},c.onSaveVoiceQueue=function(e){_.isNil(e)||(c.rpcVoiceQueues[e.id]=_.pick(e,m))},c.onUpdateVoiceQueue=function(e){_.isNil(e)||(c.rpcVoiceQueues[e.id]&&_.merge(c.rpcVoiceQueues[e.id],_.pick(e,m)),c.voiceQueues[e.id]&&_.merge(c.voiceQueues[e.id],_.pick(e,m)))},c.onRemoveVoiceQueue=function(e){_.isNil(e)||(delete c.rpcVoiceQueues[e.id],delete c.voiceQueues[e.id])},l.onWithoutApply("voice_queue:save",c.onSaveQueue),l.onWithoutApply("voice_queue_channel:save",c.onSaveChannel),l.onWithoutApply("userVoiceQueue:save",c.onUserVoiceQueue),l.onWithoutApply("userVoiceQueue:remove",c.onUserVoiceQueue),l.onWithoutApply("voiceQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("voiceQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("voiceQueue:update",c.onUpdateVoiceQueue),o.rpc.getVoiceQueues().$promise.then(function(e){return c.rpcVoiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},o.rpc.getVoiceQueuesChannels().$promise}).then(function(e){c.rpcVoiceQueuesChannels=e?_.keyBy(e.rows?_.filter(e.rows,{type:"outbound",queuecallerleaveAt:null}):[],"uniqueid"):{}}).catch(function(e){console.error(e)}).finally(function(){_.merge(c.rpcVoiceQueuesChannels,c.addVoiceQueuesChannels);for(var e=0;e<c.deleteVoiceQueuesChannels.length;e+=1)delete c.rpcVoiceQueuesChannels[c.deleteVoiceQueuesChannels[e]];c.load=!1,c.addVoiceQueuesChannels={},c.deleteVoiceQueuesChannels=[],c.getVoiceQueues()});var p=!0,g=1;e.$watch("vm_dc.query.filter",function(e,t){p?n(function(){p=!1}):(t||(g=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=g),c.getVoiceQueues())}),e.$on("$destroy",function(){l.removeAllListeners("voice_queue:save"),l.removeAllListeners("voice_queue_channel:save"),l.removeAllListeners("userVoiceQueue:save"),l.removeAllListeners("userVoiceQueue:remove"),l.removeAllListeners("voiceQueue:save"),l.removeAllListeners("voiceQueue:update"),l.removeAllListeners("voiceQueue:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardBullController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["id","name","mapAgentsId","waiting"],u=!0;function p(){var e=(c.queryChannels.page-1)*c.queryChannels.limit;c.paginatedInteractions=_.orderBy(c.rpcChatQueuesWaitingInteractions,["joinAt"],["desc"]),c.interactions=_.drop(c.paginatedInteractions,e).slice(0,c.queryChannels.limit)}function g(e){c.chatQueuesTotal=e.count?e.count:0,c.chatQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.chatQueues,function(e,t){c.rpcChatQueues[t]&&(c.chatQueues[t].waiting=c.rpcChatQueues[t].waiting||0)})}function v(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,g).$promise}c.chatQueues={},c.chatQueuesTotal=0,c.rpcChatQueues={},c.paginatedInteractions=[],c.deleteChatQueuesWaitingInteractions=[],c.rpcChatQueuesWaitingInteractions={},c.query={id:r.getCurrentUser().id,channel:"chat",fields:"id,name,mapAgentsId,waiting",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=g,c.getChatQueues=v,c.getSize=function(e){return _.size(e)},c.getColorByChannel=function(e){switch(e){case"chat":return"green-A700-bg";case"mail":return"teal-bg";case"sms":return"orange-bg";case"openchannel":return"amber-A200-bg";case"fax":return"blue-grey-A200-bg";default:return"white-bg"}},c.paginate=p,c.onSaveQueue=function(e){c.chatQueues[e.id]&&c.rpcChatQueues[e.id]&&(_.merge(c.rpcChatQueues[e.id],_.pick(e,m)),_.merge(c.chatQueues[e.id],_.pick(e,m)))},c.onSaveChatQueue=function(e){_.isNil(e)||(c.rpcChatQueues[e.id]=_.pick(e,m))},c.onUpdateChatQueue=function(e){_.isNil(e)||(c.rpcChatQueues[e.id]&&_.merge(c.rpcChatQueues[e.id],_.pick(e,m)),c.chatQueues[e.id]&&_.merge(c.chatQueues[e.id],_.pick(e,m)))},c.onRemoveChatQueue=function(e){_.isNil(e)||(delete c.rpcChatQueues[e.id],delete c.chatQueues[e.id])},c.onSaveUserChatQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getChatQueues()},c.onRemoveUserChatQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getChatQueues()},c.onSaveChatQueueChannel=function(e){c.chatQueues[e.queue_id]&&(c.rpcChatQueuesWaitingInteractions[e.id]=e,p())},c.onRemoveChatQueueChannel=function(e){delete c.rpcChatQueuesWaitingInteractions[e.id],u&&c.deleteChatQueuesWaitingInteractions.push(e.id);p()},l.onWithoutApply("chat_queue:save",c.onSaveQueue),l.onWithoutApply("chatQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("chatQueue:update",c.onUpdateVoiceQueue),l.onWithoutApply("chatQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("userChatQueue:save",c.onSaveUserChatQueue),l.onWithoutApply("userChatQueue:remove",c.onRemoveUserChatQueue),l.onWithoutApply("chat_queue_waiting_interaction:save",c.onSaveChatQueueChannel),l.onWithoutApply("chat_queue_waiting_interaction:remove",c.onRemoveChatQueueChannel),o.rpc.getChatQueues().$promise.then(function(e){c.rpcChatQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return o.user.getQueues({id:r.getCurrentUser().id,channel:"chat"}).$promise}).then(function(e){return c.myQueues=e.rows,o.rpc.getChatQueuesWaitingInteractions().$promise}).then(function(e){var t=_.filter(e.rows,function(e){return _.includes(c.myQueues,{id:e.queue_id})});e.rows=t,e.count=t.length,_.merge(c.rpcChatQueuesWaitingInteractions,e?_.keyBy(e.rows?e.rows:[],"id"):{})}).catch(function(e){console.error(e)}).finally(function(){for(var e=0;e<c.deleteChatQueuesWaitingInteractions.length;e+=1)delete c.rpcChatQueuesWaitingInteractions[c.deleteChatQueuesWaitingInteractions[e]];u=!1,c.deleteChatQueuesWaitingInteractions=[],v(),p()});var h=!0,f=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=f),c.getChatQueues())}),e.$on("$destroy",function(){l.removeAllListeners("chat_queue:save"),l.removeAllListeners("chatQueue:save"),l.removeAllListeners("chatQueue:update"),l.removeAllListeners("chatQueue:remove"),l.removeAllListeners("userChatQueue:save"),l.removeAllListeners("userChatQueue:remove"),l.removeAllListeners("chat_queue_waiting_interaction:save"),l.removeAllListeners("chat_queue_waiting_interaction:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardMultiChannelChatController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["id","name","mapAgentsId","waiting"],u=!0;function p(){var e=(c.queryChannels.page-1)*c.queryChannels.limit;c.paginatedInteractions=_.orderBy(c.rpcFaxQueuesWaitingInteractions,["joinAt"],["desc"]),c.interactions=_.drop(c.paginatedInteractions,e).slice(0,c.queryChannels.limit)}function g(e){c.faxQueuesTotal=e.count?e.count:0,c.faxQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.faxQueues,function(e,t){c.rpcFaxQueues[t]&&(c.faxQueues[t].waiting=c.rpcFaxQueues[t].waiting||0)})}function v(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,g).$promise}c.faxQueues={},c.faxQueuesTotal=0,c.rpcFaxQueues={},c.paginatedInteractions=[],c.deleteFaxQueuesWaitingInteractions=[],c.rpcFaxQueuesWaitingInteractions={},c.query={id:r.getCurrentUser().id,channel:"fax",fields:"id,name,mapAgentsId,waiting",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=g,c.getFaxQueues=v,c.getSize=function(e){return _.size(e)},c.getColorByChannel=function(e){switch(e){case"chat":return"green-A700-bg";case"mail":return"teal-bg";case"sms":return"orange-bg";case"openchannel":return"amber-A200-bg";case"fax":return"blue-grey-A200-bg";default:return"white-bg"}},c.paginate=p,c.onSaveQueue=function(e){c.faxQueues[e.id]&&c.rpcFaxQueues[e.id]&&(_.merge(c.rpcFaxQueues[e.id],_.pick(e,m)),_.merge(c.faxQueues[e.id],_.pick(e,m)))},c.onSaveFaxQueue=function(e){_.isNil(e)||(c.rpcFaxQueues[e.id]=_.pick(e,m))},c.onUpdateFaxQueue=function(e){_.isNil(e)||(c.rpcFaxQueues[e.id]&&_.merge(c.rpcFaxQueues[e.id],_.pick(e,m)),c.faxQueues[e.id]&&_.merge(c.faxQueues[e.id],_.pick(e,m)))},c.onRemoveFaxQueue=function(e){_.isNil(e)||(delete c.rpcFaxQueues[e.id],delete c.faxQueues[e.id])},c.onSaveUserFaxQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getFaxQueues()},c.onRemoveUserFaxQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getFaxQueues()},c.onSaveFaxQueueChannel=function(e){c.faxQueues[e.queue_id]&&(c.rpcFaxQueuesWaitingInteractions[e.id]=e,p())},c.onRemoveFaxQueueChannel=function(e){delete c.rpcFaxQueuesWaitingInteractions[e.id],u&&c.deleteFaxQueuesWaitingInteractions.push(e.id);p()},l.onWithoutApply("fax_queue:save",c.onSaveQueue),l.onWithoutApply("faxQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("faxQueue:update",c.onUpdateVoiceQueue),l.onWithoutApply("faxQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("userFaxQueue:save",c.onSaveUserFaxQueue),l.onWithoutApply("userFaxQueue:remove",c.onRemoveUserFaxQueue),l.onWithoutApply("fax_queue_waiting_interaction:save",c.onSaveFaxQueueChannel),l.onWithoutApply("fax_queue_waiting_interaction:remove",c.onRemoveFaxQueueChannel),o.rpc.getFaxQueues().$promise.then(function(e){c.rpcFaxQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return o.user.getQueues({id:r.getCurrentUser().id,channel:"fax"}).$promise}).then(function(e){return c.myQueues=e.rows,o.rpc.getFaxQueuesWaitingInteractions().$promise}).then(function(e){var t=_.filter(e.rows,function(e){return _.includes(c.myQueues,{id:e.queue_id})});e.rows=t,e.count=t.length,_.merge(c.rpcFaxQueuesWaitingInteractions,e?_.keyBy(e.rows?e.rows:[],"id"):{})}).catch(function(e){console.error(e)}).finally(function(){for(var e=0;e<c.deleteFaxQueuesWaitingInteractions.length;e+=1)delete c.rpcFaxQueuesWaitingInteractions[c.deleteFaxQueuesWaitingInteractions[e]];u=!1,c.deleteFaxQueuesWaitingInteractions=[],v(),p()});var h=!0,f=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=f),c.getFaxQueues())}),e.$on("$destroy",function(){l.removeAllListeners("fax_queue:save"),l.removeAllListeners("faxQueue:save"),l.removeAllListeners("faxQueue:update"),l.removeAllListeners("faxQueue:remove"),l.removeAllListeners("userFaxQueue:save"),l.removeAllListeners("userFaxQueue:remove"),l.removeAllListeners("fax_queue_waiting_interaction:save"),l.removeAllListeners("fax_queue_waiting_interaction:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardMultiChannelFaxController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["id","name","mapAgentsId","waiting"],u=!0;function p(){var e=(c.queryChannels.page-1)*c.queryChannels.limit;c.paginatedInteractions=_.orderBy(c.rpcMailQueuesWaitingInteractions,["joinAt"],["desc"]),c.interactions=_.drop(c.paginatedInteractions,e).slice(0,c.queryChannels.limit)}function g(e){c.mailQueuesTotal=e.count?e.count:0,c.mailQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.mailQueues,function(e,t){c.rpcMailQueues[t]&&(c.mailQueues[t].waiting=c.rpcMailQueues[t].waiting||0)})}function v(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,g).$promise}c.mailQueues={},c.mailQueuesTotal=0,c.rpcMailQueues={},c.paginatedInteractions=[],c.deleteMailQueuesWaitingInteractions=[],c.rpcMailQueuesWaitingInteractions={},c.query={id:r.getCurrentUser().id,channel:"mail",fields:"id,name,mapAgentsId,waiting",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=g,c.getMailQueues=v,c.getSize=function(e){return _.size(e)},c.getColorByChannel=function(e){switch(e){case"chat":return"green-A700-bg";case"mail":return"teal-bg";case"sms":return"orange-bg";case"openchannel":return"amber-A200-bg";case"fax":return"blue-grey-A200-bg";default:return"white-bg"}},c.paginate=p,c.onSaveQueue=function(e){c.mailQueues[e.id]&&c.rpcMailQueues[e.id]&&(_.merge(c.rpcMailQueues[e.id],_.pick(e,m)),_.merge(c.mailQueues[e.id],_.pick(e,m)))},c.onSaveMailQueue=function(e){_.isNil(e)||(c.rpcMailQueues[e.id]=_.pick(e,m))},c.onUpdateMailQueue=function(e){_.isNil(e)||(c.rpcMailQueues[e.id]&&_.merge(c.rpcMailQueues[e.id],_.pick(e,m)),c.mailQueues[e.id]&&_.merge(c.mailQueues[e.id],_.pick(e,m)))},c.onRemoveMailQueue=function(e){_.isNil(e)||(delete c.rpcMailQueues[e.id],delete c.mailQueues[e.id])},c.onSaveUserMailQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getMailQueues()},c.onRemoveUserMailQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getMailQueues()},c.onSaveMailQueueChannel=function(e){c.mailQueues[e.queue_id]&&(c.rpcMailQueuesWaitingInteractions[e.id]=e,p())},c.onRemoveMailQueueChannel=function(e){delete c.rpcMailQueuesWaitingInteractions[e.id],u&&c.deleteMailQueuesWaitingInteractions.push(e.id);p()},l.onWithoutApply("mail_queue:save",c.onSaveQueue),l.onWithoutApply("mailQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("mailQueue:update",c.onUpdateVoiceQueue),l.onWithoutApply("mailQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("userMailQueue:save",c.onSaveUserMailQueue),l.onWithoutApply("userMailQueue:remove",c.onRemoveUserMailQueue),l.onWithoutApply("mail_queue_waiting_interaction:save",c.onSaveMailQueueChannel),l.onWithoutApply("mail_queue_waiting_interaction:remove",c.onRemoveMailQueueChannel),o.rpc.getMailQueues().$promise.then(function(e){c.rpcMailQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return o.user.getQueues({id:r.getCurrentUser().id,channel:"mail"}).$promise}).then(function(e){return c.myQueues=e.rows,o.rpc.getMailQueuesWaitingInteractions().$promise}).then(function(e){var t=_.filter(e.rows,function(e){return _.includes(c.myQueues,{id:e.queue_id})});e.rows=t,e.count=t.length,_.merge(c.rpcMailQueuesWaitingInteractions,e?_.keyBy(e.rows?e.rows:[],"id"):{})}).catch(function(e){console.error(e)}).finally(function(){for(var e=0;e<c.deleteMailQueuesWaitingInteractions.length;e+=1)delete c.rpcMailQueuesWaitingInteractions[c.deleteMailQueuesWaitingInteractions[e]];u=!1,c.deleteMailQueuesWaitingInteractions=[],v(),p()});var h=!0,f=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=f),c.getMailQueues())}),e.$on("$destroy",function(){l.removeAllListeners("mail_queue:save"),l.removeAllListeners("mailQueue:save"),l.removeAllListeners("mailQueue:update"),l.removeAllListeners("mailQueue:remove"),l.removeAllListeners("userMailQueue:save"),l.removeAllListeners("userMailQueue:remove"),l.removeAllListeners("mail_queue_waiting_interaction:save"),l.removeAllListeners("mail_queue_waiting_interaction:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardMultiChannelMailController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["id","name","mapAgentsId","waiting"],u=!0;function p(){var e=(c.queryChannels.page-1)*c.queryChannels.limit;c.paginatedInteractions=_.orderBy(c.rpcOpenchannelQueuesWaitingInteractions,["joinAt"],["desc"]),c.interactions=_.drop(c.paginatedInteractions,e).slice(0,c.queryChannels.limit)}function g(e){c.openchannelQueuesTotal=e.count?e.count:0,c.openchannelQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.openchannelQueues,function(e,t){c.rpcOpenchannelQueues[t]&&(c.openchannelQueues[t].waiting=c.rpcOpenchannelQueues[t].waiting||0)})}function v(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,g).$promise}c.openchannelQueues={},c.openchannelQueuesTotal=0,c.rpcOpenchannelQueues={},c.paginatedInteractions=[],c.deleteOpenchannelQueuesWaitingInteractions=[],c.rpcOpenchannelQueuesWaitingInteractions={},c.query={id:r.getCurrentUser().id,channel:"openchannel",fields:"id,name,mapAgentsId,waiting",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=g,c.getOpenchannelQueues=v,c.getSize=function(e){return _.size(e)},c.getColorByChannel=function(e){switch(e){case"chat":return"green-A700-bg";case"mail":return"teal-bg";case"sms":return"orange-bg";case"openchannel":return"amber-A200-bg";case"fax":return"blue-grey-A200-bg";default:return"white-bg"}},c.paginate=p,c.onSaveQueue=function(e){c.openchannelQueues[e.id]&&c.rpcOpenchannelQueues[e.id]&&(_.merge(c.rpcOpenchannelQueues[e.id],_.pick(e,m)),_.merge(c.openchannelQueues[e.id],_.pick(e,m)))},c.onSaveOpenchannelQueue=function(e){_.isNil(e)||(c.rpcOpenchannelQueues[e.id]=_.pick(e,m))},c.onUpdateOpenchannelQueue=function(e){_.isNil(e)||(c.rpcOpenchannelQueues[e.id]&&_.merge(c.rpcOpenchannelQueues[e.id],_.pick(e,m)),c.openchannelQueues[e.id]&&_.merge(c.openchannelQueues[e.id],_.pick(e,m)))},c.onRemoveOpenchannelQueue=function(e){_.isNil(e)||(delete c.rpcOpenchannelQueues[e.id],delete c.openchannelQueues[e.id])},c.onSaveUserOpenchannelQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getOpenchannelQueues()},c.onRemoveUserOpenchannelQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getOpenchannelQueues()},c.onSaveOpenchannelQueueChannel=function(e){c.openchannelQueues[e.queue_id]&&(c.rpcOpenchannelQueuesWaitingInteractions[e.id]=e,p())},c.onRemoveOpenchannelQueueChannel=function(e){delete c.rpcOpenchannelQueuesWaitingInteractions[e.id],u&&c.deleteOpenchannelQueuesWaitingInteractions.push(e.id);p()},l.onWithoutApply("openchannel_queue:save",c.onSaveQueue),l.onWithoutApply("openchannelQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("openchannelQueue:update",c.onUpdateVoiceQueue),l.onWithoutApply("openchannelQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("userOpenchannelQueue:save",c.onSaveUserOpenchannelQueue),l.onWithoutApply("userOpenchannelQueue:remove",c.onRemoveUserOpenchannelQueue),l.onWithoutApply("openchannel_queue_waiting_interaction:save",c.onSaveOpenchannelQueueChannel),l.onWithoutApply("openchannel_queue_waiting_interaction:remove",c.onRemoveOpenchannelQueueChannel),o.rpc.getOpenchannelQueues().$promise.then(function(e){c.rpcOpenchannelQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return o.user.getQueues({id:r.getCurrentUser().id,channel:"openchannel"}).$promise}).then(function(e){return c.myQueues=e.rows,o.rpc.getOpenchannelQueuesWaitingInteractions().$promise}).then(function(e){var t=_.filter(e.rows,function(e){return _.includes(c.myQueues,{id:e.queue_id})});e.rows=t,e.count=t.length,_.merge(c.rpcOpenchannelQueuesWaitingInteractions,e?_.keyBy(e.rows?e.rows:[],"id"):{})}).catch(function(e){console.error(e)}).finally(function(){for(var e=0;e<c.deleteOpenchannelQueuesWaitingInteractions.length;e+=1)delete c.rpcOpenchannelQueuesWaitingInteractions[c.deleteOpenchannelQueuesWaitingInteractions[e]];u=!1,c.deleteOpenchannelQueuesWaitingInteractions=[],v(),p()});var h=!0,f=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=f),c.getOpenchannelQueues())}),e.$on("$destroy",function(){l.removeAllListeners("openchannel_queue:save"),l.removeAllListeners("openchannelQueue:save"),l.removeAllListeners("openchannelQueue:update"),l.removeAllListeners("openchannelQueue:remove"),l.removeAllListeners("userOpenchannelQueue:save"),l.removeAllListeners("userOpenchannelQueue:remove"),l.removeAllListeners("openchannel_queue_waiting_interaction:save"),l.removeAllListeners("openchannel_queue_waiting_interaction:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardMultiChannelOpenchannelController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["id","name","mapAgentsId","waiting"],u=!0;function p(){var e=(c.queryChannels.page-1)*c.queryChannels.limit;c.paginatedInteractions=_.orderBy(c.rpcSmsQueuesWaitingInteractions,["joinAt"],["desc"]),c.interactions=_.drop(c.paginatedInteractions,e).slice(0,c.queryChannels.limit)}function g(e){c.smsQueuesTotal=e.count?e.count:0,c.smsQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.smsQueues,function(e,t){c.rpcSmsQueues[t]&&(c.smsQueues[t].waiting=c.rpcSmsQueues[t].waiting||0)})}function v(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,g).$promise}c.smsQueues={},c.smsQueuesTotal=0,c.rpcSmsQueues={},c.paginatedInteractions=[],c.deleteSmsQueuesWaitingInteractions=[],c.rpcSmsQueuesWaitingInteractions={},c.query={id:r.getCurrentUser().id,channel:"sms",fields:"id,name,mapAgentsId,waiting",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=g,c.getSmsQueues=v,c.getSize=function(e){return _.size(e)},c.getColorByChannel=function(e){switch(e){case"chat":return"green-A700-bg";case"mail":return"teal-bg";case"sms":return"orange-bg";case"openchannel":return"amber-A200-bg";case"fax":return"blue-grey-A200-bg";default:return"white-bg"}},c.paginate=p,c.onSaveQueue=function(e){c.smsQueues[e.id]&&c.rpcSmsQueues[e.id]&&(_.merge(c.rpcSmsQueues[e.id],_.pick(e,m)),_.merge(c.smsQueues[e.id],_.pick(e,m)))},c.onSaveSmsQueue=function(e){_.isNil(e)||(c.rpcSmsQueues[e.id]=_.pick(e,m))},c.onUpdateSmsQueue=function(e){_.isNil(e)||(c.rpcSmsQueues[e.id]&&_.merge(c.rpcSmsQueues[e.id],_.pick(e,m)),c.smsQueues[e.id]&&_.merge(c.smsQueues[e.id],_.pick(e,m)))},c.onRemoveSmsQueue=function(e){_.isNil(e)||(delete c.rpcSmsQueues[e.id],delete c.smsQueues[e.id])},c.onSaveUserSmsQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getSmsQueues()},c.onRemoveUserSmsQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getSmsQueues()},c.onSaveSmsQueueChannel=function(e){c.smsQueues[e.queue_id]&&(c.rpcSmsQueuesWaitingInteractions[e.id]=e,p())},c.onRemoveSmsQueueChannel=function(e){delete c.rpcSmsQueuesWaitingInteractions[e.id],u&&c.deleteSmsQueuesWaitingInteractions.push(e.id);p()},l.onWithoutApply("sms_queue:save",c.onSaveQueue),l.onWithoutApply("smsQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("smsQueue:update",c.onUpdateVoiceQueue),l.onWithoutApply("smsQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("userSmsQueue:save",c.onSaveUserSmsQueue),l.onWithoutApply("userSmsQueue:remove",c.onRemoveUserSmsQueue),l.onWithoutApply("sms_queue_waiting_interaction:save",c.onSaveSmsQueueChannel),l.onWithoutApply("sms_queue_waiting_interaction:remove",c.onRemoveSmsQueueChannel),o.rpc.getSmsQueues().$promise.then(function(e){c.rpcSmsQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return o.user.getQueues({id:r.getCurrentUser().id,channel:"sms"}).$promise}).then(function(e){return c.myQueues=e.rows,o.rpc.getSmsQueuesWaitingInteractions().$promise}).then(function(e){var t=_.filter(e.rows,function(e){return _.includes(c.myQueues,{id:e.queue_id})});e.rows=t,e.count=t.length,_.merge(c.rpcSmsQueuesWaitingInteractions,e?_.keyBy(e.rows?e.rows:[],"id"):{})}).catch(function(e){console.error(e)}).finally(function(){for(var e=0;e<c.deleteSmsQueuesWaitingInteractions.length;e+=1)delete c.rpcSmsQueuesWaitingInteractions[c.deleteSmsQueuesWaitingInteractions[e]];u=!1,c.deleteSmsQueuesWaitingInteractions=[],v(),p()});var h=!0,f=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=f),c.getSmsQueues())}),e.$on("$destroy",function(){l.removeAllListeners("sms_queue:save"),l.removeAllListeners("smsQueue:save"),l.removeAllListeners("smsQueue:update"),l.removeAllListeners("smsQueue:remove"),l.removeAllListeners("userSmsQueue:save"),l.removeAllListeners("userSmsQueue:remove"),l.removeAllListeners("sms_queue_waiting_interaction:save"),l.removeAllListeners("sms_queue_waiting_interaction:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardMultiChannelSmsController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["type","waiting","dialMethod","dialActive"];function u(e){c.voiceQueuesTotal=e.count?e.count:0,c.voiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.voiceQueues,function(e,t){c.rpcVoiceQueues[t]&&(c.voiceQueues[t].waiting=c.rpcVoiceQueues[t].waiting||0)})}c.voiceQueues={},c.voiceQueuesTotal=0,c.rpcVoiceQueues={},c.getVoiceQueues={},c.rpcVoiceQueuesChannels={},c.addVoiceQueuesChannels={},c.deleteVoiceQueuesChannels=[],c.load=!0,c.query={id:r.getCurrentUser().id,fields:"id,name,type,dialMethod,dialActive",channel:"voice",type:"inbound",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=u,c.getVoiceQueues=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,u).$promise},c.getSize=function(e){return _.size(e)},c.onSaveQueue=function(e){c.voiceQueues[e.id]&&c.rpcVoiceQueues[e.id]&&(c.rpcVoiceQueues[e.id]=e,_.merge(c.voiceQueues[e.id],_.pick(e,m)))},c.onSaveChannel=function(e){"inbound"===e.type&&(e.queuecallerleaveAt?(delete c.rpcVoiceQueuesChannels[e.uniqueid],c.load&&c.deleteVoiceQueuesChannels.push(e.uniqueid)):(c.rpcVoiceQueuesChannels[e.uniqueid]=e,c.load&&(c.addVoiceQueuesChannels[e.uniqueid]=e)))},c.onUserVoiceQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getVoiceQueues()},c.onSaveVoiceQueue=function(e){_.isNil(e)||(c.rpcVoiceQueues[e.id]=_.pick(e,m))},c.onUpdateVoiceQueue=function(e){_.isNil(e)||(c.rpcVoiceQueues[e.id]&&_.merge(c.rpcVoiceQueues[e.id],_.pick(e,m)),c.voiceQueues[e.id]&&_.merge(c.voiceQueues[e.id],_.pick(e,m)))},c.onRemoveVoiceQueue=function(e){_.isNil(e)||(delete c.rpcVoiceQueues[e.id],delete c.voiceQueues[e.id])},l.onWithoutApply("voice_queue:save",c.onSaveQueue),l.onWithoutApply("voice_queue_channel:save",c.onSaveChannel),l.onWithoutApply("userVoiceQueue:save",c.onUserVoiceQueue),l.onWithoutApply("userVoiceQueue:remove",c.onUserVoiceQueue),l.onWithoutApply("voiceQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("voiceQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("voiceQueue:update",c.onUpdateVoiceQueue),o.user.getQueues(c.query).$promise.then(function(e){return c.myQueues=e,o.rpc.getVoiceQueues().$promise}).then(function(e){for(var t=e.rows,n=_.keyBy(t,"id"),a=0;a<c.myQueues.count;a++){var i=c.myQueues.rows[a];c.rpcVoiceQueues[i.id]=n[i.id]}return o.rpc.getVoiceQueuesChannels().$promise}).then(function(e){c.rpcVoiceQueuesChannels=e?_.keyBy(e.rows?_.filter(e.rows,function(e){return!("inbound"!==e.type||e.queuecallerleaveAt||!_.find(c.myQueues.rows,{name:e.queue}))}):[],"uniqueid"):{}}).catch(function(e){console.error(e)}).finally(function(){_.merge(c.rpcVoiceQueuesChannels,c.addVoiceQueuesChannels);for(var e=0;e<c.deleteVoiceQueuesChannels.length;e+=1)delete c.rpcVoiceQueuesChannels[c.deleteVoiceQueuesChannels[e]];c.load=!1,c.addVoiceQueuesChannels={},c.deleteVoiceQueuesChannels=[],c.getVoiceQueues()});var p=!0,g=1;e.$watch("vm_dc.query.filter",function(e,t){p?n(function(){p=!1}):(t||(g=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=g),c.getVoiceQueues())}),e.$on("$destroy",function(){l.removeAllListeners("voice_queue:save"),l.removeAllListeners("voice_queue_channel:save"),l.removeAllListeners("userVoiceQueue:save"),l.removeAllListeners("userVoiceQueue:remove"),l.removeAllListeners("voiceQueue:save"),l.removeAllListeners("voiceQueue:update"),l.removeAllListeners("voiceQueue:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardVoiceController",e)}(),function(){"use strict";function e(i,n,t,s,a,o,r,l,d,c,e,m){var u=this;function p(e){u.faxInteractions=e||{count:0,rows:[]};for(var t=0;t<u.faxInteractions.rows.length;t+=1)v(u.faxInteractions.rows[t])}function g(e,t){e||(u.query.page=1),u.pickerModel.dateStart?u.query.createdAt={$gte:moment(u.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(u.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:u.query.createdAt=void 0,u.query.offset=(u.query.page-1)*u.query.limit;var n=a.localStorage.getItem("motion2.home.fax:"+u.user.id);(n=n?JSON.parse(n):{}).query=u.query,a.localStorage.setItem("motion2.home.fax:"+u.user.id,JSON.stringify(n)),u.promise=r.faxInteraction.get(u.query,p).$promise,i.$emit("quickFilter-setSelectedText",[{queryParam:u.query.FaxAccountId,resources:u.faxAccounts.rows,key:"account"},{queryParam:u.query.tag,resources:u.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){u.quickFilterSelectedText[t]=e})})}function v(e){e.Contact?(e.contactName=(e.Contact.firstName||"")+" "+(e.Contact.lastName||""),e.contactInfo=e.Contact.fax):e.contactName=o.instant("DASHBOARDS.UNKNOWN")}u.user=l.getCurrentUser(),u.license={},u.setting={},u.tags={count:0,rows:[]},u.faxInteractions={count:0,rows:[]},u.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null},u.filter={activeConditions:[],fields:[{name:"Id",column:"id",tableAlias:"i",type:"number"},{name:"Contact",column:"ContactId",valueColumn:"id",tableAlias:"i",type:"text"},{name:"Body",column:"plainBody",tableAlias:"me",type:"text"},{name:"Status",column:"closed",tableAlias:"i",type:"select"},{name:"Substatus",column:"substatus",tableAlias:"i",type:"select"},{name:"Agent",column:"UserId",tableAlias:"i",valueColumn:"id",type:"autocomplete"},{name:"Account",column:"",valueColumn:"id",tableAlias:"i",type:"select"},{name:"Tags",column:"TagId",tableAlias:"t",valueColumn:"id",type:"select"},{name:"Start Date",column:"createdAt",tableAlias:"i",type:"date"},{name:"Read",column:"Messages.count",tableAlias:"me",type:"select"}],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Account":t.values=u.faxAccounts.rows;break;case"Agent":r.user.get({role:"agent",fields:"id,name,fullname"}).$promise.then(function(e){t.source=e.rows||[]}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_AGENTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"Read":t.values=[{id:1,name:"Read",value:1},{id:2,name:"Unread",value:0}];break;case"Status":t.values=[{id:1,name:"Opened",value:0},{id:2,name:"Closed",value:1}];break;case"Substatus":t.values=u.subStatuses.rows;break;case"Tags":t.values=u.tags.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(u.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?u.filter.activeConditions.splice(i,1,s):u.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(u.filter.activeConditions)?u.query.advancedFilter=void 0:(u.query.advancedFilter={},_.forEach(u.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:e.condition};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,u.query.advancedFilter[e.column]?_.isArray(u.query.advancedFilter[e.column])?u.query.advancedFilter[e.column].push(t):u.query.advancedFilter[e.column]=[].concat(u.query.advancedFilter[e.column],t):u.query.advancedFilter[e.column]=t})),g()}},u.isAdvancedFilterVisible=!1,u.quickFilterSelectedText={tag:o.instant("DASHBOARDS.TAGS"),account:o.instant("DASHBOARDS.ALL")},u.success=p,u.getFaxInteractions=g,u.showFaxInteraction=function(e,t){i.$parent.vm.addInteractionTab("fax",t)},u.downloadFaxInteraction=function(e,s,t){r.faxInteraction.download({id:s.id,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="fax-interaction"+s.id+".zip",a=new Blob(t,{type:e.type}),i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"downloadFaxInteraction",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.getContactLabel=v,u.getUserLabel=function(e){if(e.UserId)return e.UserId===l.getCurrentUser().id?o.instant("DASHBOARDS.ME"):u.usersByKey[e.UserId].fullname+" <"+u.usersByKey[e.UserId].internal+">";return o.instant("DASHBOARDS.NOT_ASSIGNED")},u.getFaxAccountLabel=function(e){if(e.Account)return e.Account.key;return o.instant("DASHBOARDS.UNKNOWN")},u.clearAll=function(){u.calendarModel={dateStart:null},u.pickerModel={dateStart:null},u.serviceModel={dateStart:null},u.getFaxInteractions()},u.clearSelection=function(e){switch(e){case"account":u.query.FaxAccountId=[].concat(u.faxAccounts.rows[0].id);break;case"tag":u.query.tag=[]}u.getFaxInteractions()},u.selectAll=function(e){switch(e){case"account":u.query.FaxAccountId=_.map(u.faxAccounts.rows,"id");break;case"tag":u.query.tag=_.map(u.tags.rows,"id")}u.getFaxInteractions()},u.composeFaxInteraction=function(e,a){t.show({controller:"ComposeFaxInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeFax/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:a,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var t=e;return r.faxAccount.send({id:a.id},t).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("fax",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:"FAX:SEND",msg:e.data?JSON.stringify(e.data):e.message||e.toString()})})}var n={channel:"fax",account:a,message:e.message,contact:e.contact};m.add(n)}})},u.onInit=function(e,t){return u.license=e,u.setting=t,r.user["get"+_.upperFirst("faxAccounts")]({id:u.user.id,nolimit:!0}).$promise.then(function(e){return u.faxAccounts=e||{count:0,rows:[]},r.tag.get().$promise}).then(function(e){u.tags=e||{count:0,rows:[]}}).then(function(){return r.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){u.usersByKey=_.keyBy(e.rows,"id")}).catch(function(e){console.error(e)}).finally(function(){var e=a.localStorage.getItem("motion2.home.fax:"+u.user.id);if(e)try{(e=JSON.parse(e)).query&&(u.query=_.merge(u.query,e.query),u.query=_.omit(u.query,"filter"),u.query.sort&&0<=u.query.sort.indexOf("lastMessage")&&(u.query=_.omit(u.query,"sort")),u.query.includeAll=!0,u.isSearchBarVisible=!!u.query.filter,u.isAdvancedFilterVisible=!!u.query.advancedFilter),e.filterConditions&&(u.filter.activeConditions=e.filterConditions)}catch(e){console.error(e)}else u.query.FaxAccountId=_.map(u.faxAccounts.rows,"id");d.on("faxInteraction:save",u.onFaxInteractionSave),d.on("faxInteraction:update",u.onFaxInteractionSave),d.on("faxInteractionTags:save",u.onFaxInteractionTagsSave),d.on("faxMessage:save",u.onFaxMessageSave),d.on("faxMessage:update",u.onFaxMessageSave),d.on("user_has_fax_interactions:save",u.onFaxInteractionOpen),d.on("user_has_fax_interactions:remove",u.onFaxInteractionClose),u.getFaxInteractions(u.query.page)})},u.onFaxInteractionSave=function(e){if(e){var t=_.find(u.faxInteractions.rows,{id:e.id});if(t){if(t.Users=[],e.closed&&(t.unreadMessages=0),u.query.sort){var n=_.startsWith(u.query.sort,"-")?"desc":"asc";u.faxInteractions.rows=_.orderBy(u.faxInteractions.rows,_.trimStart(u.query.sort,"-"),n)}_.merge(t,_.pick(e,_.keys(t)))}else g(u.query.page)}},u.onFaxInteractionTagsSave=function(e){if(e){var t=_.find(u.faxInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},u.onFaxMessageSave=function(e){if(e&&!e.secret){var t=_.find(u.faxInteractions.rows,{id:e.FaxInteractionId});if(t){var n=_.find(t.Messages,{id:e.id});n?_.merge(n,_.pick(e,_.keys(n))):(_.isNil(t.Messages)&&(t.Messages={count:0}),e.read||(t.Messages.count+=1))}}},u.onFaxInteractionOpen=function(e){var t=_.find(u.faxInteractions.rows,{id:e.FaxInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},u.onFaxInteractionClose=function(e){var t=_.find(u.faxInteractions.rows,{id:e.FaxInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},u.onSearchBarCollapse=function(){u.query.advancedFilter=void 0,u.isSearchBarVisible=!1},u.onSearchBarExpand=function(){u.isSearchBarVisible=!0},u.localizationMap=e,u.pickerModel={dateStart:null},i.$on("openFaxDraft",function(e,a){a.interaction?(a.interaction.isDraft=!0,showMailInteraction(null,a.interaction)):t.show({controller:"ComposeFaxInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeFax/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:a.account,message:a.content,type:"draft",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var t=e;return r.faxAccount.send({id:account.id},t).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("fax",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:"FAX:SEND",msg:e.data?JSON.stringify(e.data):e.message||e.toString()})})}var n={id:a.id,channel:"fax",account:e.account,message:e.message};m.update(n)}})});var h=!0,f=1;i.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=f),u.getFaxInteractions(u.query.page))}),i.$on("$destroy",function(){d.removeAllListeners("faxMessage:save"),d.removeAllListeners("faxMessage:update"),d.removeAllListeners("faxInteraction:save"),d.removeAllListeners("faxInteractionTags:save"),d.removeAllListeners("faxInteraction:update"),d.removeAllListeners("user_has_fax_interactions:save"),d.removeAllListeners("user_has_fax_interactions:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory","draftManager"],angular.module("app.dashboards").controller("AgentHomeFaxController",e)}(),function(){"use strict";function e(o,n,r,l,a,t,d,i,s,c,e,m){var u=this;function p(e){u.mailInteractions=e||{count:0,rows:[]};for(var t=0;t<u.mailInteractions.rows.length;t+=1)h(u.mailInteractions.rows[t])}function g(e,t){e||(u.query.page=1),u.pickerModel.dateStart?u.query.createdAt={$gte:moment(u.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(u.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:u.query.createdAt=void 0,u.query.offset=(u.query.page-1)*u.query.limit;var n=a.localStorage.getItem("motion2.home.mail:"+u.user.id);(n=n?JSON.parse(n):{}).query=u.query,a.localStorage.setItem("motion2.home.mail:"+u.user.id,JSON.stringify(n)),u.promise=d.mailInteraction.get(u.query,p).$promise,o.$emit("quickFilter-setSelectedText",[{queryParam:u.query.MailAccountId,resources:u.mailAccounts.rows,key:"account"},{queryParam:u.query.tag,resources:u.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){u.quickFilterSelectedText[t]=e})})}function v(e,t){o.$parent.vm.addInteractionTab("mail",t)}function h(e){_.isEmpty(e.to)||!e.Account||_.includes(e.to,e.Account.email)?e.Contact?(e.contactName=(e.Contact.firstName||"")+" "+(e.Contact.lastName||""),e.contactInfo=e.Contact.email||""):e.contactName=t.instant("DASHBOARDS.UNKNOWN"):(e.contactName=e.to.split(" <")[0],e.contactInfo=e.to.split("<").pop().split(">")[0])}u.user=i.getCurrentUser(),u.license={},u.setting={},u.tags={count:0,rows:[]},u.mailInteractions={count:0,rows:[]},u.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null},u.filter={activeConditions:[],fields:[{name:"Id",column:"id",tableAlias:"i",type:"number"},{name:"Contact",column:"ContactId",valueColumn:"id",tableAlias:"i",type:"text"},{name:"Subject",column:"subject",tableAlias:"i",type:"text"},{name:"Body",column:"plainBody",tableAlias:"me",type:"text"},{name:"Status",column:"closed",tableAlias:"i",type:"select"},{name:"Substatus",column:"substatus",tableAlias:"i",type:"select"},{name:"Agent",column:"UserId",tableAlias:"i",valueColumn:"id",type:"autocomplete"},{name:"Account",column:"",valueColumn:"id",tableAlias:"i",type:"select"},{name:"Tags",column:"TagId",tableAlias:"t",valueColumn:"id",type:"select"},{name:"Start Date",column:"createdAt",tableAlias:"i",type:"date"},{name:"Read",column:"Messages.count",tableAlias:"me",type:"select"}],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Account":t.values=u.mailAccounts.rows;break;case"Agent":d.user.get({role:"agent",fields:"id,name,fullname"}).$promise.then(function(e){t.source=e.rows||[]}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_AGENTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"Read":t.values=[{id:1,name:"Read",value:1},{id:2,name:"Unread",value:0}];break;case"Status":t.values=[{id:1,name:"Opened",value:0},{id:2,name:"Closed",value:1}];break;case"Substatus":t.values=u.subStatuses.rows;break;case"Tags":t.values=u.tags.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(u.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?u.filter.activeConditions.splice(i,1,s):u.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(u.filter.activeConditions)?u.query.advancedFilter=void 0:(u.query.advancedFilter={},_.forEach(u.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:e.condition};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,u.query.advancedFilter[e.column]?_.isArray(u.query.advancedFilter[e.column])?u.query.advancedFilter[e.column].push(t):u.query.advancedFilter[e.column]=[].concat(u.query.advancedFilter[e.column],t):u.query.advancedFilter[e.column]=t})),g()}},u.isAdvancedFilterVisible=!1,u.quickFilterSelectedText={tag:t.instant("DASHBOARDS.TAGS"),account:t.instant("DASHBOARDS.ALL")},u.success=p,u.getMailInteractions=g,u.showMailInteraction=v,u.downloadMailInteraction=function(e,s,t){d.mailInteraction.download({id:s.id,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="mail-interaction"+s.id+".zip",a=new Blob(t,{type:e.type}),i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"downloadMailInteraction",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.getContactLabel=h,u.getUserLabel=function(e){if(e.UserId)return e.UserId===i.getCurrentUser().id?t.instant("DASHBOARDS.ME"):u.usersByKey[e.UserId].fullname+" <"+u.usersByKey[e.UserId].internal+">";return t.instant("DASHBOARDS.NOT_ASSIGNED")},u.getMailAccountLabel=function(e){if(e.Account)return e.Account.key;return t.instant("DASHBOARDS.UNKNOWN")},u.clearAll=function(){u.calendarModel={dateStart:null},u.pickerModel={dateStart:null},u.serviceModel={dateStart:null},u.getMailInteractions()},u.clearSelection=function(e){switch(e){case"account":u.query.MailAccountId=[].concat(u.mailAccounts.rows[0].id);break;case"tag":u.query.tag=[]}u.getMailInteractions()},u.selectAll=function(e){switch(e){case"account":u.query.MailAccountId=_.map(u.mailAccounts.rows,"id");break;case"tag":u.query.tag=_.map(u.tags.rows,"id")}u.getMailInteractions()},u.composeMailInteraction=function(e,s){r.show({controller:"ComposeMailInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeMail/dialog.html",parent:angular.element(l.body),clickOutsideToClose:!1,locals:{account:s,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var i=e;return d.mailAccount.send({id:s.id},i).$promise.then(function(e){if(e&&e.Messages&&e.Messages.length){if(i.attachments&&i.attachments.length)for(var t=0;t<i.attachments.length;t+=1)d.attachment.update({id:i.attachments[t].id},{MailMessageId:_.head(e.Messages).id});if(c.success({title:"Message properly sent!",msg:"Message has been sent!"}),e.closed){e.disposition=null;var n=!s.mandatoryDisposition,a=u.user.voicePause||u.user.chatPause||u.user.mailPause||u.user.openchannelPause||u.user.faxPause;r.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(l.body),onRemoving:function(e,t){u.user&&s.mandatoryDisposition&&!a&&d.user.unpause({id:u.user.id}).$promise.catch(function(e){console.error(e)})},clickOutsideToClose:n,escapeToClose:n,locals:{user:u.user,channel:"mail",interaction:e}})}else o.$parent.vm.addInteractionTab("mail",e)}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"MAILACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}var t={channel:"mail",account:s,message:e.message,contact:e.contact};m.add(t)}})},u.onInit=function(e,t){return u.license=e,u.setting=t,d.user["get"+_.upperFirst("mailAccounts")]({id:u.user.id,nolimit:!0}).$promise.then(function(e){return u.mailAccounts=e||{count:0,rows:[]},d.tag.get().$promise}).then(function(e){u.tags=e||{count:0,rows:[]}}).then(function(){return d.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){u.usersByKey=_.keyBy(e.rows,"id")}).then(function(){return d.mailSubstatus.get({nolimit:!0}).$promise}).then(function(e){u.subStatuses=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){var e=a.localStorage.getItem("motion2.home.mail:"+u.user.id);if(e)try{(e=JSON.parse(e)).query&&(u.query=_.merge(u.query,e.query),u.query=_.omit(u.query,"filter"),u.query.sort&&0<=u.query.sort.indexOf("lastMessage")&&(u.query=_.omit(u.query,"sort")),u.query.includeAll=!0,u.isSearchBarVisible=!!u.query.filter,u.isAdvancedFilterVisible=!!u.query.advancedFilter),e.filterConditions&&(u.filter.activeConditions=e.filterConditions)}catch(e){console.error(e)}else u.query.MailAccountId=_.map(u.mailAccounts.rows,"id");s.on("mailInteraction:save",u.onMailInteractionSave),s.on("mailInteraction:update",u.onMailInteractionSave),s.on("mailInteractionTags:save",u.onMailInteractionTagsSave),s.on("mailMessage:save",u.onMailMessageSave),s.on("mailMessage:update",u.onMailMessageSave),s.on("user_has_mail_interactions:save",u.onMailInteractionOpen),s.on("user_has_mail_interactions:remove",u.onMailInteractionClose),u.getMailInteractions(u.query.page)})},u.onMailInteractionSave=function(e){if(e){var t=_.find(u.mailInteractions.rows,{id:e.id});if(t){if(t.Users=[],e.closed&&(t.unreadMessages=0),u.query.sort){var n=_.startsWith(u.query.sort,"-")?"desc":"asc";u.mailInteractions.rows=_.orderBy(u.mailInteractions.rows,_.trimStart(u.query.sort,"-"),n)}_.merge(t,_.pick(e,_.keys(t)))}else g(u.query.page)}},u.onMailInteractionTagsSave=function(e){if(e){var t=_.find(u.mailInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},u.onMailMessageSave=function(e){if(e&&!e.secret){var t=_.find(u.mailInteractions.rows,{id:e.MailInteractionId});if(t){var n=_.find(t.Messages,{id:e.id});n?_.merge(n,_.pick(e,_.keys(n))):(_.isNil(t.Messages)&&(t.Messages={count:0}),e.read||(t.Messages.count+=1))}}},u.onMailInteractionOpen=function(e){var t=_.find(u.mailInteractions.rows,{id:e.MailInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},u.onMailInteractionClose=function(e){var t=_.find(u.mailInteractions.rows,{id:e.MailInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},u.onSearchBarCollapse=function(){u.query.advancedFilter=void 0,u.isSearchBarVisible=!1},u.onSearchBarExpand=function(){u.isSearchBarVisible=!0},u.localizationMap=e,u.pickerModel={dateStart:null},o.$on("openMailDraft",function(e,n){n.interaction?(n.interaction.isDraft=!0,v(null,n.interaction)):r.show({controller:"ComposeMailInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeMail/dialog.html",parent:angular.element(l.body),clickOutsideToClose:!1,locals:{account:n.account,message:n.content,type:"draft",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var i=e;return d.mailAccount.send({id:account.id},i).$promise.then(function(e){if(e&&e.Messages&&e.Messages.length){if(i.attachments&&i.attachments.length)for(var t=0;t<i.attachments.length;t+=1)d.attachment.update({id:i.attachments[t].id},{MailMessageId:_.head(e.Messages).id});if(c.success({title:"Message properly sent!",msg:"Message has been sent!"}),e.closed){e.disposition=null;var n=!account.mandatoryDisposition,a=u.user.voicePause||u.user.chatPause||u.user.mailPause||u.user.openchannelPause||u.user.faxPause;r.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(l.body),onRemoving:function(e,t){u.user&&account.mandatoryDisposition&&!a&&d.user.unpause({id:u.user.id}).$promise.catch(function(e){console.error(e)})},clickOutsideToClose:n,escapeToClose:n,locals:{user:u.user,channel:"mail",interaction:e}})}else o.$parent.vm.addInteractionTab("mail",e)}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"MAILACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}var t={id:n.id,channel:"mail",account:e.account,message:e.message};m.update(t)}})});var f=!0,b=1;o.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=b),u.getMailInteractions(u.query.page))}),o.$on("$destroy",function(){s.removeAllListeners("mailMessage:save"),s.removeAllListeners("mailMessage:update"),s.removeAllListeners("mailInteraction:save"),s.removeAllListeners("mailInteractionTags:save"),s.removeAllListeners("mailInteraction:update"),s.removeAllListeners("user_has_mail_interactions:save"),s.removeAllListeners("user_has_mail_interactions:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory","draftManager"],angular.module("app.dashboards").controller("AgentHomeMailController",e)}(),function(){"use strict";function e(n,e,a,i,s,t,o,r){var l=this;function d(e){l.contacts=e||{count:0,rows:[]}}function c(){o.cmContact.describe({id:l.query.ListId}).$promise.then(function(e){var t=e.toJSON();l.filter.fields=[],Object.entries(t).forEach(function(e){var t=function(e){var t={name:_.startCase(e.displayName),tableAlias:"c"};if(e.custom)switch(e.custom.type){case"text":t.type="text";break;case"select":t.type="select",t.values=_.map(JSON.parse(e.custom.values),function(e,t){return{id:t,name:e.value,value:e.value}});break;case"switch":t.type="select",t.values=[{id:1,name:"Disabled",value:0},{id:2,name:"Enabled",value:1}];break;case"number":t.type="number";break;case"datetime":t.type="date"}else switch(e.columnName){case"dateOfBirth":t.type="date",t.column=e.columnName;break;case"CompanyId":t.name="Company",t.type="select",t.column=e.columnName;break;case"ListId":t.name="List",t.type="select",t.column=e.columnName;break;default:_.includes(e.type.toLowerCase(),"int")?t.type="number":_.includes(e.type.toLowerCase(),"date")?t.type="date":t.type="text",t.column=e.columnName}return t}(e[1]);l.filter.fields.push(t)})}).catch(function(e){toasty.error({title:e.status?"API:"+e.status+" - "+e.statusText:"DESCRIBE_CM_CONTACTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})}),l.query.offset=(l.query.page-1)*l.query.limit,r.localStorage.setItem("motion2.home.mycontacts:"+l.currentUser.id,JSON.stringify({query:l.query,filterConditions:l.filter.activeConditions})),l.promise=o.user.getContacts(l.query,d).$promise,a.$emit("quickFilter-setSelectedText",[{queryParam:l.query.ListId,resources:l.lists.rows,key:"list"},{queryParam:l.query.tag,resources:l.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){l.quickFilterSelectedText[t]=e})})}l.currentUser=t.getCurrentUser(),l.isAdvancedFilterVisible=!1,l.quickFilterSelectedText={tag:e.instant("DASHBOARDS.TAGS"),list:e.instant("DASHBOARDS.ALL")},l.lists={},l.contacts={count:0,rows:[]},l.tags={count:0,rows:[]},l.query={includeAll:!0,id:l.currentUser.id,sort:"-updatedAt",limit:10,page:1},l.filter={activeConditions:[],fields:[],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Company":o.cmCompany.get().$promise.then(function(e){t.values=e.rows||[]}).catch(function(e){toasty.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_COMPANIES",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"List":t.values=l.lists.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(l.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?l.filter.activeConditions.splice(i,1,s):l.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(l.filter.activeConditions)?l.query.advancedFilter=void 0:(l.query.advancedFilter={},_.forEach(l.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:{name:e.condition.name,value:e.condition.value}};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,l.query.advancedFilter[e.column]?_.isArray(l.query.advancedFilter[e.column])?l.query.advancedFilter[e.column].push(t):l.query.advancedFilter[e.column]=[].concat(l.query.advancedFilter[e.column],t):l.query.advancedFilter[e.column]=t})),c()}},l.getContacts=c,l.refreshContacts=function(){l.getContacts()},l.mergeContact=function(e,t){s.show({controller:"MergeContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/merge/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:t.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:l.currentUser.id,fields:"id,name"})}]},locals:{contacts:l.contacts.rows}})},l.duplicateContact=function(e,t){s.show({controller:"DuplicateContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:t.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:l.currentUser.id,fields:"id,name"})}]},locals:{contacts:l.contacts.rows}})},l.openContact=function(e,t){a.$parent.vm.addContactTab(t)},l.call=a.$parent.vm.call,l.clearSelection=function(e){switch(e){case"list":l.query.ListId=[].concat(l.lists.rows[0].id);break;case"tag":l.query.tag=[]}l.getContacts()},l.selectAll=function(e){switch(e){case"list":l.query.ListId=_.map(l.lists.rows,"id");break;case"tag":l.query.tag=_.map(l.tags.rows,"id")}l.getContacts()},l.onInit=function(){o.cmList.get({fields:"id,name,dialPrefix",sort:"name",nolimit:!0}).$promise.then(function(e){return l.lists=e||{count:0,rows:[]},l.listsMap=_.keyBy(l.lists.rows,"id"),o.tag.get().$promise}).then(function(e){l.tags=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){var e=r.localStorage.getItem("motion2.home.mycontacts:"+l.currentUser.id);if(e)try{(e=JSON.parse(e)).query&&(l.query=_.omit(e.query,"filter")),e.filterConditions&&(l.filter.activeConditions=e.filterConditions)}catch(e){console.error(e)}else l.query.ListId=_.isEmpty(l.lists.rows)?"null":_.map(l.lists.rows,"id");l.isSearchBarVisible=!!l.query.filter,l.isAdvancedFilterVisible=!!l.query.advancedFilter,l.getContacts()})},l.onSearchBarCollapse=function(){l.query.advancedFilter=void 0,l.isSearchBarVisible=!1},l.onSearchBarExpand=function(){l.isSearchBarVisible=!0};var m=!0,u=1;a.$watch("vm.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=l.query.page),e!==t&&(l.query.page=1),e||(l.query.page=u),l.getContacts())})}e.$inject=["$document","$translate","$scope","$timeout","$mdDialog","Auth","api","$window"],angular.module("app.dashboards").controller("AgentHomeMyContactsController",e)}(),function(){"use strict";function e(i,n,t,s,a,o,r,l,d,c,e,m){var u=this;function p(e){u.openchannelInteractions=e||{count:0,rows:[]};for(var t=0;t<u.openchannelInteractions.rows.length;t+=1)v(u.openchannelInteractions.rows[t])}function g(e,t){e||(u.query.page=1),u.pickerModel.dateStart?u.query.createdAt={$gte:moment(u.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(u.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:u.query.createdAt=void 0,u.query.offset=(u.query.page-1)*u.query.limit;var n=a.localStorage.getItem("motion2.home.openchannel:"+u.user.id);(n=n?JSON.parse(n):{}).query=u.query,a.localStorage.setItem("motion2.home.openchannel:"+u.user.id,JSON.stringify(n)),u.promise=r.openchannelInteraction.get(u.query,p).$promise,i.$emit("quickFilter-setSelectedText",[{queryParam:u.query.OpenchannelAccountId,resources:u.openchannelAccounts.rows,key:"account"},{queryParam:u.query.tag,resources:u.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){u.quickFilterSelectedText[t]=e})})}function v(e){e.from?e.contactName=e.from:e.Contact?e.contactName=(e.Contact.firstName||"")+" "+(e.Contact.lastName||""):e.contactName=o.instant("DASHBOARDS.UNKNOWN")}u.user=l.getCurrentUser(),u.license={},u.setting={},u.tags={count:0,rows:[]},u.openchannelInteractions={count:0,rows:[]},u.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null},u.filter={activeConditions:[],fields:[{name:"Id",column:"id",tableAlias:"i",type:"number"},{name:"Contact",column:"ContactId",valueColumn:"id",tableAlias:"i",type:"text"},{name:"Body",column:"plainBody",tableAlias:"me",type:"text"},{name:"Status",column:"closed",tableAlias:"i",type:"select"},{name:"Substatus",column:"substatus",tableAlias:"i",type:"select"},{name:"Agent",column:"UserId",tableAlias:"i",valueColumn:"id",type:"autocomplete"},{name:"Account",column:"",valueColumn:"id",tableAlias:"i",type:"select"},{name:"Tags",column:"TagId",tableAlias:"t",valueColumn:"id",type:"select"},{name:"Start Date",column:"createdAt",tableAlias:"i",type:"date"},{name:"Read",column:"Messages.count",tableAlias:"me",type:"select"}],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Account":t.values=u.openchannelAccounts.rows;break;case"Agent":r.user.get({role:"agent",fields:"id,name,fullname"}).$promise.then(function(e){t.source=e.rows||[]}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_AGENTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"Read":t.values=[{id:1,name:"Read",value:1},{id:2,name:"Unread",value:0}];break;case"Status":t.values=[{id:1,name:"Opened",value:0},{id:2,name:"Closed",value:1}];break;case"Substatus":t.values=u.subStatuses.rows;break;case"Tags":t.values=u.tags.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(u.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?u.filter.activeConditions.splice(i,1,s):u.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(u.filter.activeConditions)?u.query.advancedFilter=void 0:(u.query.advancedFilter={},_.forEach(u.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:e.condition};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,u.query.advancedFilter[e.column]?_.isArray(u.query.advancedFilter[e.column])?u.query.advancedFilter[e.column].push(t):u.query.advancedFilter[e.column]=[].concat(u.query.advancedFilter[e.column],t):u.query.advancedFilter[e.column]=t})),g()}},u.isAdvancedFilterVisible=!1,u.quickFilterSelectedText={tag:o.instant("DASHBOARDS.TAGS"),account:o.instant("DASHBOARDS.ALL")},u.success=p,u.getOpenchannelInteractions=g,u.showOpenchannelInteraction=function(e,t){i.$parent.vm.addInteractionTab("openchannel",t)},u.downloadOpenchannelInteraction=function(e,s,t){r.openchannelInteraction.download({id:s.id,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="openchannel-interaction"+s.id+".zip",a=new Blob(t,{type:e.type}),i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"downloadOpenchannelInteraction",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.getContactLabel=v,u.getUserLabel=function(e){if(e.UserId)return e.UserId===l.getCurrentUser().id?o.instant("DASHBOARDS.ME"):u.usersByKey[e.UserId].fullname+" <"+u.usersByKey[e.UserId].internal+">";return o.instant("DASHBOARDS.NOT_ASSIGNED")},u.getOpenchannelAccountLabel=function(e){if(e.Account)return e.Account.key;return o.instant("DASHBOARDS.UNKNOWN")},u.clearAll=function(){u.calendarModel={dateStart:null},u.pickerModel={dateStart:null},u.serviceModel={dateStart:null},u.getOpenchannelInteractions()},u.clearSelection=function(e){switch(e){case"account":u.query.OpenchannelAccountId=[].concat(u.openchannelAccounts.rows[0].id);break;case"tag":u.query.tag=[]}u.getOpenchannelInteractions()},u.selectAll=function(e){switch(e){case"account":u.query.OpenchannelAccountId=_.map(u.openchannelAccounts.rows,"id");break;case"tag":u.query.tag=_.map(u.tags.rows,"id")}u.getOpenchannelInteractions()},u.composeOpenchannelInteraction=function(e,a){t.show({controller:"ComposeOpenchannelInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeOpenchannel/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:a,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var t=e;return r.openchannelAccount.send({id:a.id},t).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("openchannel",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"OPENCHANNELACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}var n={channel:"openchannel",account:a,message:e.message,contact:e.contact};m.add(n)}})},u.onInit=function(e,t){return u.license=e,u.setting=t,r.user["get"+_.upperFirst("openchannelAccounts")]({id:u.user.id,nolimit:!0}).$promise.then(function(e){return u.openchannelAccounts=e||{count:0,rows:[]},r.tag.get().$promise}).then(function(e){u.tags=e||{count:0,rows:[]}}).then(function(){return r.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){u.usersByKey=_.keyBy(e.rows,"id")}).catch(function(e){console.error(e)}).finally(function(){var e=a.localStorage.getItem("motion2.home.openchannel:"+u.user.id);if(e)try{(e=JSON.parse(e)).query&&(u.query=_.merge(u.query,e.query),u.query=_.omit(u.query,"filter"),u.query.sort&&0<=u.query.sort.indexOf("lastMessage")&&(u.query=_.omit(u.query,"sort")),u.query.includeAll=!0,u.isSearchBarVisible=!!u.query.filter,u.isAdvancedFilterVisible=!!u.query.advancedFilter),e.filterConditions&&(u.filter.activeConditions=e.filterConditions)}catch(e){console.error(e)}else u.query.OpenchannelAccountId=_.map(u.openchannelAccounts.rows,"id");d.on("openchannelInteraction:save",u.onOpenchannelInteractionSave),d.on("openchannelInteraction:update",u.onOpenchannelInteractionSave),d.on("openchannelInteractionTags:save",u.onOpenchannelInteractionTagsSave),d.on("openchannelMessage:save",u.onOpenchannelMessageSave),d.on("openchannelMessage:update",u.onOpenchannelMessageSave),d.on("user_has_openchannel_interactions:save",u.onOpenchannelInteractionOpen),d.on("user_has_openchannel_interactions:remove",u.onOpenchannelInteractionClose),u.getOpenchannelInteractions(u.query.page)})},u.onOpenchannelInteractionSave=function(e){if(e){var t=_.find(u.openchannelInteractions.rows,{id:e.id});if(t){if(t.Users=[],e.closed&&(t.unreadMessages=0),u.query.sort){var n=_.startsWith(u.query.sort,"-")?"desc":"asc";u.openchannelInteractions.rows=_.orderBy(u.openchannelInteractions.rows,_.trimStart(u.query.sort,"-"),n)}_.merge(t,_.pick(e,_.keys(t)))}else g(u.query.page)}},u.onOpenchannelInteractionTagsSave=function(e){if(e){var t=_.find(u.openchannelInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},u.onOpenchannelMessageSave=function(e){if(e&&!e.secret){var t=_.find(u.openchannelInteractions.rows,{id:e.OpenchannelInteractionId});if(t){var n=_.find(t.Messages,{id:e.id});n?_.merge(n,_.pick(e,_.keys(n))):(_.isNil(t.Messages)&&(t.Messages={count:0}),e.read||(t.Messages.count+=1))}}},u.onOpenchannelInteractionOpen=function(e){var t=_.find(u.openchannelInteractions.rows,{id:e.OpenchannelInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},u.onOpenchannelInteractionClose=function(e){var t=_.find(u.openchannelInteractions.rows,{id:e.OpenchannelInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},u.onSearchBarCollapse=function(){u.query.advancedFilter=void 0,u.isSearchBarVisible=!1},u.onSearchBarExpand=function(){u.isSearchBarVisible=!0},u.localizationMap=e,u.pickerModel={dateStart:null},i.$on("openOpenchannelDraft",function(e,a){a.interaction?(a.interaction.isDraft=!0,showMailInteraction(null,a.interaction)):t.show({controller:"ComposeOpenchannelInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeOpenchannel/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:a.account,message:a.content,type:"draft",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var t=e;return r.openchannelAccount.send({id:account.id},t).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("openchannel",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"OPENCHANNELACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}var n={id:a.id,channel:"openchannel",account:e.account,message:e.message};m.update(n)}})});var h=!0,f=1;i.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=f),u.getOpenchannelInteractions(u.query.page))}),i.$on("$destroy",function(){d.removeAllListeners("openchannelMessage:save"),d.removeAllListeners("openchannelMessage:update"),d.removeAllListeners("openchannelInteraction:save"),d.removeAllListeners("openchannelInteractionTags:save"),d.removeAllListeners("openchannelInteraction:update"),d.removeAllListeners("user_has_openchannel_interactions:save"),d.removeAllListeners("user_has_openchannel_interactions:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory","draftManager"],angular.module("app.dashboards").controller("AgentHomeOpenchannelController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l){var d=this;function c(e,t,n){d.license=e,d.setting=t,d.plugin=n}d.currentUser=o.getCurrentUser(),d.plugin={},d.onInit=c,d.getTrustedURL=function(){return s.trustAsResourceUrl(d.plugin.agentUrl)},c(),t.$on("pluginUpdated",function(e,t){d.plugin=t.plugin})}e.$inject=["$document","$scope","$timeout","$mdDialog","$stateParams","$sce","Auth","api","$window"],angular.module("app.dashboards").controller("AgentHomePluginsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(e){p.voiceRecordings=e||{count:0,rows:[]}}p.currentUser=c.getCurrentUser(),p.voiceRecordings={},p.localizationMap=u,p.pickerModel={dateStart:null},p.table="voiceRecordings",p.query={UserId:p.currentUser.id,fields:"createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,rating,audio,UserId",sort:"-updatedAt",limit:10,page:1,type:null},p.downloadfile=function(i,e){return r.voiceRecording.download({id:i.id,exists:!0}).$promise.then(function(e){var t=[e.buffer],n=new Blob(t,{type:e.type}),a=window.document.createElement("a");a.setAttribute("href",URL.createObjectURL(n)),a.setAttribute("download",i.uniqueid+i.format),a.click()}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceRecording",msg:e.data?JSON.stringify(e.data):e.toString()})})},p.success=g,p.getVoiceRecordings=function(){p.pickerModel.dateStart?p.query.createdAt={$gte:moment(p.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(p.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:p.query.createdAt=void 0;p.query.offset=(p.query.page-1)*p.query.limit,t.localStorage.setItem("motion2.home.recordings:"+p.currentUser.id,JSON.stringify({query:p.query})),p.promise=r.voiceRecording.get(p.query,g).$promise},p.onInit=function(){var e=t.localStorage.getItem("motion2.home.recordings:"+p.currentUser.id);if(e)try{(e=JSON.parse(e)).query&&(p.query=_.omit(e.query,["filter","id"]),p.query.fields="createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,rating,audio,UserId",p.query.UserId=p.currentUser.id)}catch(e){console.error(e)}p.isSearchBarVisible=!!p.query.filter,p.getVoiceRecordings()},p.clearAll=function(){p.pickerModel={dateStart:null},p.getVoiceRecordings()},p.onSearchBarCollapse=function(){p.query.filter=void 0,p.isSearchBarVisible=!1},p.onSearchBarExpand=function(){p.isSearchBarVisible=!0};var v=!0,h=1;e.$watch("vm.query.filter",function(e,t){v?o(function(){v=!1}):(t||(h=p.query.page),e!==t&&(p.query.page=1),e||(p.query.page=h),p.getVoiceRecordings())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","api","msUtils","toasty","Auth","$translate","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeRecordingsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l){var d=this;function c(e){d.scheduledCalls=e||{count:0,rows:[]}}d.currentUser=r.getCurrentUser(),d.priorities=["Lowest","Low","Medium","High","Highest"],d.crudPermissions={readOnly:!1,canEdit:!0,canDelete:!0},d.localizationMap=l,d.pickerModel={dateStart:null},d.scheduledCalls={},d.query={id:d.currentUser.id,fields:"id,phone,scheduledat,recallme,priority,UserId,OwnerId",sort:"scheduledat",limit:10,page:1},d.queueCampaigns={rows:[],count:0},d.success=c,d.getScheduledCalls=function(){d.pickerModel.dateStart?d.query.createdAt={$gte:moment(d.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(d.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:d.query.createdAt=void 0;d.query.id=d.currentUser.id,d.query.includeAll=!0,d.query.offset=(d.query.page-1)*d.query.limit,t.localStorage.setItem("motion2.home.scheduled:"+d.currentUser.id,JSON.stringify({query:d.query})),d.promise=o.user.getScheduledCalls(d.query,c).$promise},d.onInit=function(){var e=t.localStorage.getItem("motion2.home.scheduled:"+d.currentUser.id);if(e)try{(e=JSON.parse(e)).query&&(d.query=_.omit(e.query,["filter"]))}catch(e){console.error(e)}o.user.getQueues({id:r.getCurrentUser().id,fields:"id,name",channel:"voice",type:"outbound",nolimit:!0}).$promise.then(function(e){d.queueCampaigns=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){d.getScheduledCalls()})},d.clearAll=function(){d.pickerModel={dateStart:null},d.getScheduledCalls()},d.isDateBeforeToday=function(e){return moment(e).isBefore(moment())},d.createOrEditQueueCampaignHopper=function(e,t){a.show({controller:"CreateOrEditHopperVoiceQueueIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hoppers/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:null,hopper:t,hoppers:d.scheduledCalls.rows,license:null,setting:null,crudPermissions:d.crudPermissions}})},d.deleteConfirm=function(t,e){var n=a.confirm().title("Are you sure want to delete the scheduled call?").htmlContent("<b>Scheduled call</b> will be deleted.").ariaLabel("delete scheduled call").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){var e;e=t,o.cmHopper.delete({id:e.id}).$promise.then(function(){_.remove(d.scheduledCalls.rows,{id:e.id}),d.scheduledCalls.count-=1,d.scheduledCalls.rows.length||d.getScheduledCalls(),s.success({title:"Scheduled call deleted!",msg:e.name?"Scheduled call has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){d.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETE_HOPPER"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETE_HOPPER",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){console.log("CANCEL")})};var m=!0,u=1;e.$watch("vm.query.filter",function(e,t){m?n(function(){m=!1}):(t||(u=d.query.page),e!==t&&(d.query.page=1),e||(d.query.page=u),d.getScheduledCalls())})}e.$inject=["$scope","$window","$timeout","$mdDialog","$document","toasty","api","Auth","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeScheduledCallsController",e)}(),function(){"use strict";function e(i,n,t,s,a,o,r,l,d,c,e,m){var u=this;function p(e){u.smsInteractions=e||{count:0,rows:[]};for(var t=0;t<u.smsInteractions.rows.length;t+=1)v(u.smsInteractions.rows[t])}function g(e,t){e||(u.query.page=1),u.pickerModel.dateStart?u.query.createdAt={$gte:moment(u.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(u.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:u.query.createdAt=void 0,u.query.offset=(u.query.page-1)*u.query.limit;var n=a.localStorage.getItem("motion2.home.sms:"+u.user.id);(n=n?JSON.parse(n):{}).query=u.query,a.localStorage.setItem("motion2.home.sms:"+u.user.id,JSON.stringify(n)),u.promise=r.smsInteraction.get(u.query,p).$promise,i.$emit("quickFilter-setSelectedText",[{queryParam:u.query.SmsAccountId,resources:u.smsAccounts.rows,key:"account"},{queryParam:u.query.tag,resources:u.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){u.quickFilterSelectedText[t]=e})})}function v(e){e.Contact?(e.contactName=(e.Contact.firstName||"")+" "+(e.Contact.lastName||""),e.contactInfo=e.Contact.mobile):e.contactName=o.instant("DASHBOARDS.UNKNOWN")}u.user=l.getCurrentUser(),u.license={},u.setting={},u.tags={count:0,rows:[]},u.smsInteractions={count:0,rows:[]},u.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null},u.filter={activeConditions:[],fields:[{name:"Id",column:"id",tableAlias:"i",type:"number"},{name:"Contact",column:"ContactId",valueColumn:"id",tableAlias:"i",type:"text"},{name:"Body",column:"plainBody",tableAlias:"me",type:"text"},{name:"Status",column:"closed",tableAlias:"i",type:"select"},{name:"Substatus",column:"substatus",tableAlias:"i",type:"select"},{name:"Agent",column:"UserId",tableAlias:"i",valueColumn:"id",type:"autocomplete"},{name:"Account",column:"",valueColumn:"id",tableAlias:"i",type:"select"},{name:"Tags",column:"TagId",tableAlias:"t",valueColumn:"id",type:"select"},{name:"Start Date",column:"createdAt",tableAlias:"i",type:"date"},{name:"Read",column:"Messages.count",tableAlias:"me",type:"select"}],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Account":t.values=u.smsAccounts.rows;break;case"Agent":r.user.get({role:"agent",fields:"id,name,fullname"}).$promise.then(function(e){t.source=e.rows||[]}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_AGENTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"Read":t.values=[{id:1,name:"Read",value:1},{id:2,name:"Unread",value:0}];break;case"Status":t.values=[{id:1,name:"Opened",value:0},{id:2,name:"Closed",value:1}];break;case"Substatus":t.values=u.subStatuses.rows;break;case"Tags":t.values=u.tags.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(u.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?u.filter.activeConditions.splice(i,1,s):u.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(u.filter.activeConditions)?u.query.advancedFilter=void 0:(u.query.advancedFilter={},_.forEach(u.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:e.condition};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,u.query.advancedFilter[e.column]?_.isArray(u.query.advancedFilter[e.column])?u.query.advancedFilter[e.column].push(t):u.query.advancedFilter[e.column]=[].concat(u.query.advancedFilter[e.column],t):u.query.advancedFilter[e.column]=t})),g()}},u.isAdvancedFilterVisible=!1,u.quickFilterSelectedText={tag:o.instant("DASHBOARDS.TAGS"),account:o.instant("DASHBOARDS.ALL")},u.success=p,u.getSmsInteractions=g,u.showSmsInteraction=function(e,t){i.$parent.vm.addInteractionTab("sms",t)},u.downloadSmsInteraction=function(e,s,t){r.smsInteraction.download({id:s.id,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="sms-interaction"+s.id+".zip",a=new Blob(t,{type:e.type}),i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"downloadSmsInteraction",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.getContactLabel=v,u.getUserLabel=function(e){if(e.UserId)return e.UserId===l.getCurrentUser().id?o.instant("DASHBOARDS.ME"):u.usersByKey[e.UserId].fullname+" <"+u.usersByKey[e.UserId].internal+">";return o.instant("DASHBOARDS.NOT_ASSIGNED")},u.getSmsAccountLabel=function(e){if(e.Account)return e.Account.key;return o.instant("DASHBOARDS.UNKNOWN")},u.clearAll=function(){u.calendarModel={dateStart:null},u.pickerModel={dateStart:null},u.serviceModel={dateStart:null},u.getSmsInteractions()},u.clearSelection=function(e){switch(e){case"account":u.query.SmsAccountId=[].concat(u.smsAccounts.rows[0].id);break;case"tag":u.query.tag=[]}u.getSmsInteractions()},u.selectAll=function(e){switch(e){case"account":u.query.SmsAccountId=_.map(u.smsAccounts.rows,"id");break;case"tag":u.query.tag=_.map(u.tags.rows,"id")}u.getSmsInteractions()},u.composeSmsInteraction=function(e,a){t.show({controller:"ComposeSmsInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeSms/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:a,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var t=e;return r.smsAccount.send({id:a.id},t).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("sms",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SMSACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}var n={channel:"sms",account:a,message:e.message,contact:e.contact};m.add(n)}})},u.onInit=function(e,t){return u.license=e,u.setting=t,r.user["get"+_.upperFirst("smsAccounts")]({id:u.user.id,nolimit:!0}).$promise.then(function(e){return u.smsAccounts=e||{count:0,rows:[]},r.tag.get().$promise}).then(function(e){u.tags=e||{count:0,rows:[]}}).then(function(){return r.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){u.usersByKey=_.keyBy(e.rows,"id")}).catch(function(e){console.error(e)}).finally(function(){var e=a.localStorage.getItem("motion2.home.sms:"+u.user.id);if(e)try{(e=JSON.parse(e)).query&&(u.query=_.merge(u.query,e.query),u.query=_.omit(u.query,"filter"),u.query.sort&&0<=u.query.sort.indexOf("lastMessage")&&(u.query=_.omit(u.query,"sort")),u.query.includeAll=!0,u.isSearchBarVisible=!!u.query.filter,u.isAdvancedFilterVisible=!!u.query.advancedFilter),e.filterConditions&&(u.filter.activeConditions=e.filterConditions)}catch(e){console.error(e)}else u.query.SmsAccountId=_.map(u.smsAccounts.rows,"id");d.on("smsInteraction:save",u.onSmsInteractionSave),d.on("smsInteraction:update",u.onSmsInteractionSave),d.on("smsInteractionTags:save",u.onSmsInteractionTagsSave),d.on("smsMessage:save",u.onSmsMessageSave),d.on("smsMessage:update",u.onSmsMessageSave),d.on("user_has_sms_interactions:save",u.onSmsInteractionOpen),d.on("user_has_sms_interactions:remove",u.onSmsInteractionClose),u.getSmsInteractions(u.query.page)})},u.onSmsInteractionSave=function(e){if(e){var t=_.find(u.smsInteractions.rows,{id:e.id});if(t){if(t.Users=[],e.closed&&(t.unreadMessages=0),u.query.sort){var n=_.startsWith(u.query.sort,"-")?"desc":"asc";u.smsInteractions.rows=_.orderBy(u.smsInteractions.rows,_.trimStart(u.query.sort,"-"),n)}_.merge(t,_.pick(e,_.keys(t)))}else g(u.query.page)}},u.onSmsInteractionTagsSave=function(e){if(e){var t=_.find(u.smsInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},u.onSmsMessageSave=function(e){if(e&&!e.secret){var t=_.find(u.smsInteractions.rows,{id:e.SmsInteractionId});if(t){var n=_.find(t.Messages,{id:e.id});n?_.merge(n,_.pick(e,_.keys(n))):(_.isNil(t.Messages)&&(t.Messages={count:0}),e.read||(t.Messages.count+=1))}}},u.onSmsInteractionOpen=function(e){var t=_.find(u.smsInteractions.rows,{id:e.SmsInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},u.onSmsInteractionClose=function(e){var t=_.find(u.smsInteractions.rows,{id:e.SmsInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},u.onSearchBarCollapse=function(){u.query.advancedFilter=void 0,u.isSearchBarVisible=!1},u.onSearchBarExpand=function(){u.isSearchBarVisible=!0},u.localizationMap=e,u.pickerModel={dateStart:null},i.$on("openSmsDraft",function(e,a){a.interaction?(a.interaction.isDraft=!0,showMailInteraction(null,a.interaction)):t.show({controller:"ComposeSmsInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeSms/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:a.account,message:a.content,type:"draft",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var t=e;return r.smsAccount.send({id:account.id},t).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("sms",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SMSACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}var n={id:a.id,channel:"sms",account:e.account,message:e.message};m.update(n)}})});var h=!0,f=1;i.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=f),u.getSmsInteractions(u.query.page))}),i.$on("$destroy",function(){d.removeAllListeners("smsMessage:save"),d.removeAllListeners("smsMessage:update"),d.removeAllListeners("smsInteraction:save"),d.removeAllListeners("smsInteractionTags:save"),d.removeAllListeners("smsInteraction:update"),d.removeAllListeners("user_has_sms_interactions:save"),d.removeAllListeners("user_has_sms_interactions:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory","draftManager"],angular.module("app.dashboards").controller("AgentHomeSmsController",e)}(),function(){"use strict";function e(t,n,e,a,i,s,o,r,l,d){var c=this;function m(e){c.voiceCalls=e||{count:0,rows:[]}}c.currentUser=i.getCurrentUser(),c.voiceCalls={},c.localizationMap=d,c.pickerModel={dateStart:null},c.table="voiceCalls",c.query={UserId:c.currentUser.id,fields:"id,type,uniqueid,tag,starttime,endtime,source,destination,userDisposition,note,duration,billableseconds,answertime",sort:"-updatedAt",limit:10,page:1,type:null},c.success=m,c.getVoiceCalls=function(){c.pickerModel.dateStart?c.query.createdAt={$gte:moment(c.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(c.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:c.query.createdAt=void 0;c.query.offset=(c.query.page-1)*c.query.limit,o.localStorage.setItem("motion2.home.voice:"+c.currentUser.id,JSON.stringify({query:c.query})),c.promise=e.voiceCallReport.get(c.query,m).$promise},c.onInit=function(){return e.tag.get().$promise.then(function(e){c.tags=e||{count:0,rows:[]}}).catch(function(e){a.error({title:"Init error",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()}),c.tags={count:0,rows:[]}}).finally(function(){var e=o.localStorage.getItem("motion2.home.voice:"+c.currentUser.id);if(e)try{(e=JSON.parse(e)).query&&(c.query=_.omit(e.query,"filter"))}catch(e){console.error(e)}c.getVoiceCalls()})},c.showDetails=function(e){t.show({controller:"AgentHomeVoiceDetailsController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/home/voice/details/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{call:e}})},c.clearAll=function(){c.pickerModel={dateStart:null},c.getVoiceCalls()},c.onSearchBarCollapse=function(){c.query.filter=void 0,c.isSearchBarVisible=!1},c.onSearchBarExpand=function(){c.isSearchBarVisible=!0};var u=!0,p=1;r.$watch("vm.query.filter",function(e,t){u?l(function(){u=!1}):(t||(p=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=p),c.getVoiceCalls())})}e.$inject=["$mdDialog","$document","api","toasty","Auth","$translate","$window","$scope","$timeout","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeVoiceController",e)}(),function(){"use strict";function e(e,t){this.call=t,this.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","call"],angular.module("app.dashboards").controller("AgentHomeVoiceDetailsController",e)}(),function(){"use strict";function e(e,t,a,i,s,o,r,n,l,d,c,m,u,p){var g=this,v=25,h=1024*v*1024;function f(){var n=g.user.voicePause||g.user.chatPause||g.user.mailPause||g.user.openchannelPause||g.user.faxPause,e=!g.tab.interaction.Account.mandatoryDisposition;s.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(a.body),clickOutsideToClose:e,escapeToClose:e,onRemoving:function(e,t){g.user&&g.interaction.Account.mandatoryDisposition&&!n&&l.user.unpause({id:g.user.id}).$promise.catch(function(e){console.error(e)})},locals:{user:g.user,channel:g.tab.channel,interaction:g.tab.interaction}}).then(function(e){g.tab.saved=Boolean(e),e&&i.$parent.$parent.$parent.vm.closeTab(g.tab)})}function b(e,t){g.tab.message&&!g.draft||(g.tab.message=t),s.show({controller:"ComposeMailInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeMail/dialog.html",parent:angular.element(a.body),clickOutsideToClose:!1,locals:{account:g.account,message:g.tab.message,type:e,interaction:g.interaction},fullscreen:!0,skipHide:Boolean(g.tab.spy)}).then(function(e){if(e)if(e.message&&e.message.savedAsDraft)g.draft?p.update({id:g.draft.id,channel:"mail",account:g.account,message:e.message,contact:g.contact,interaction:g.interaction}):p.add({channel:"mail",account:g.account,message:e.message,contact:g.contact,interaction:g.interaction}),g.draft=p.getByInteraction(g.tab.interaction.id);else{var t=e;t&&E(t),t.Interaction&&g.interaction&&g.interaction.id&&(t.Interaction.id=g.interaction.id,l.mailInteraction.update(t.Interaction).$promise.then(function(e){e&&e.closed?(g.tab.saved=!0,g.interaction.closed=!0,f()):null!==t.Interaction.substatus&&(g.tab.saved=!0,g.tab.interaction.substatus=t.Interaction.substatus,i.$parent.$parent.$parent.vm.closeTab(g.tab))}).catch(function(e){console.error(e)}))}}).finally(function(){g.tab.isDraft=!1})}function A(){"mail"!==g.tab.channel&&t(function(){var e=angular.element(a.find("md-content[name*='interaction-content-"+g.tab.id+"']"));e&&e[0]&&(e[0].scrollTop=e[0].scrollHeight)},0)}function E(n){if(n)return n["chat"===g.tab.channel?"ChatWebsiteId":_.capitalize(g.tab.channel)+"AccountId"]=g.interaction["chat"===g.tab.channel?"ChatWebsiteId":_.capitalize(g.tab.channel)+"AccountId"],n[_.capitalize(g.tab.channel)+"InteractionId"]=g.interaction.id,n.UserId=g.user.id,n.ContactId=g.interaction.ContactId,n.direction="out",n.secret=Boolean(g.tab.spy||n.secret),l[g.tab.channel+"Message"].save(n).$promise.then(function(e){if(e&&e.id&&n.attachments&&n.attachments.length)for(var t=0;t<n.attachments.length;t+=1)l.attachment.update({id:n.attachments[t].id},{MailMessageId:e.id})}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:SENDMESSAGE",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){n.isDraft&&(p.removeByInteraction(g.interaction.id),g.draft=null),g.tab.areaText="",A()})}function y(e){switch(e){case"chat":return"green-A700";case"mail":return"teal";case"sms":return"orange";case"openchannel":return"amber-A200";case"fax":return"blue-grey-A200";default:return"blue-A700"}}function S(e){e&&e.count&&e.rows.length&&(g.journey=_.concat(g.journey,e.rows))}function T(){switch(g.tab.channel){case"mail":b(g.draft.type,g.draft.content)}}g.showFooter=!1,g.showInteraction=!1,g.user=c.getCurrentUser(),g.detectBrowser=u.detectBrowser(),g.journey=[],g.acceptedMessages=[],g.omniChannels=["mail","chat","sms","openchannel","fax"],g.ngFlowOptions={target:"api/attachments",singleFile:!0,maxChunkRetries:1,chunkSize:h,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},g.ngFlow={flow:{}},g.selectedMailShowDetails={},g.selectedMailShowSystemMessage={},g.setting={},g.ctrlMethods={},g.embedOptions={fontSmiley:!0,sanitizeHtml:!0,emoji:!0,link:!0,linkTarget:"_blank"},g.init=function(e,t){g.tab=e,g.tab.saved=!0,g.tab.badges=0,g.setting=t||{},g.tab&&g.tab.channel&&g.tab.interaction&&(g.interaction=g.tab.interaction,l[g.tab.channel+"Interaction"].get({id:g.tab.interaction.id,includeAll:!0}).$promise.then(function(e){return e&&(g.interaction=e,g.tab.interaction=e),g.tab.saved=g.interaction.closed,g.queryMessage={id:g.interaction.id,includeAll:!0},"mail"===g.tab.channel?(g.queryMessage.sort="-id",g.queryMessage.offset=0,g.queryMessage.limit=3):(g.queryMessage.sort="id",g.queryMessage.nolimit=!0),l[g.tab.channel+"Interaction"].getMessages(g.queryMessage).$promise}).then(function(e){return g.messages=e||{count:0,rows:[]},l["chat"===g.tab.channel?"chatWebsite":g.tab.channel+"Account"].get({id:g.interaction["chat"===g.tab.channel?"ChatWebsiteId":_.capitalize(g.tab.channel)+"AccountId"]}).$promise}).then(function(e){if(g.account=e,g.tab.title=g.account.key||g.account.name,g.interaction.ContactId)return l.cmContact.get({id:g.interaction.ContactId}).$promise}).then(function(e){return e&&(g.contact=e),g.showInteraction=!0,g.contact?(!function(e){if(e&&e.id){for(var t=0;t<g.omniChannels.length;t++)l[g.omniChannels[t]+"Interaction"].get({ContactId:e.id,includeAll:!0}).$promise.then(S);l.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(S)}}(g.contact),g.tab.title+=" - "+g.contact.firstName):g.tab.title+=" - "+n.instant(g.tab.channel.toUpperCase()+".UNKNOWN"),l.user.get({fields:"id,fullname",nolimit:!0}).$promise}).then(function(e){g.users=e||{count:0,rows:[]},g.usersMap=_.mapValues(_.keyBy(g.users.rows,"id"),"fullname")}).then(function(){if(g.tab.channel&&g.interaction)return l.user["add"+_.upperFirst(g.tab.channel)+"Interactions"]({id:g.user.id,ids:[g.interaction.id]})}).then(function(){return l.mailSubstatus.get({nolimit:!0}).$promise}).then(function(e){g.subStatuses=e||{count:0,rows:[]}}).then(function(){return g.getMailAccounts()}).then(function(){return g.getFaxAccounts()}).then(function(){return g.getSmsAccounts()}).then(function(){return g.getOpenchannelAccounts()}).then(function(){return g.getChatWebsites()}).then(function(){return g.getLists()}).catch(function(e){g.showInteraction=!0}).finally(function(){!function(){if(!g.tab.spy&&!g.interaction.closed)for(var e=0;e<g.messages.rows.length;e+=1)"in"!==g.messages.rows[e].direction||g.messages.rows[e].read||(l[g.tab.channel+"Message"].accept({id:g.messages.rows[e].id,UserId:g.user.id}),g.acceptedMessages.push(g.messages.rows[e].id))}(),A(),m.on(g.tab.channel+"Message:save",g.onMessageSave),m.on(g.tab.channel+"Message:update",g.onMessageSave),m.on(g.tab.channel+"Interaction:save",g.onInteractionSave),m.on(g.tab.channel+"Interaction:update",g.onInteractionSave),m.on("user_has_"+g.tab.channel+"_interactions:save",g.onInteractionOpen),m.on("user_has_"+g.tab.channel+"_interactions:remove",g.onInteractionClose),g.tab.areaText=g.tab.areaText?g.tab.areaText:"",g.showFooter=!0,g.draft=p.getByInteraction(g.tab.interaction.id),g.tab.isDraft&&(g.tab.interaction.closed?(p.removeByInteraction(g.tab.interaction.id),g.draft=null):T())}))},g.getLabelByMessage=function(e){var t="loading...";if(e)return"in"===e.direction?e.Contact?e.Contact.firstName||"Anonymous":t:e.UserId?g.usersMap?g.usersMap[e.UserId]:t:"System"},g.openContact=function(e,t){try{g.tab&&!g.tab.spy&&i.$parent.$parent.$parent.vm.addContactTab(t||g.contact)}catch(e){d.error({title:"ERROR OPEN CONTACT",msg:"Unable to open the contact"})}},g.openInteraction=function(e,t){try{if(t.MailAccountId)return i.$parent.$parent.$parent.vm.addInteractionTab("mail",t);if(t.ChatWebsiteId)return i.$parent.$parent.$parent.vm.addInteractionTab("chat",t);if(t.SmsAccountId)return i.$parent.$parent.$parent.vm.addInteractionTab("sms",t);if(t.OpenchannelAccountId)return i.$parent.$parent.$parent.vm.addInteractionTab("openchannel",t);if(t.FaxAccountId)return i.$parent.$parent.$parent.vm.addInteractionTab("fax",t)}catch(e){d.error({title:"ERROR OPEN INTERACTION",msg:"Customer Journey can't open the interaction"})}},g.disposeInteraction=f,g.tagInteraction=function(){s.show({controller:"TagInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/tag/dialog.html",parent:angular.element(a.body),clickOutsideToClose:!0,skipHide:Boolean(g.tab.spy),resolve:{tags:["apiResolver",function(e){return e.resolve("tag@get",{nolimit:!0,fields:"id,name,color"})}]},locals:{channel:g.tab.channel,interaction:g.tab.interaction}})},g.composeMailInteraction=function(t,e){if(e.inReplyTo){var n=_.find(g.messages.rows,{messageId:e.inReplyTo});if(!n)return l.mailMessage.get({messageId:e.inReplyTo}).$promise.then(function(e){b(t,e&&e.count?e.rows[0]:void 0)}).catch(function(e){console.error(e),b(t,void 0)});b(t,n)}else b(t,e)},g.composeFaxInteraction=function(e){var t={to:[]};t.to.push(g.contact.fax),s.show({controller:"ComposeFaxInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeFax/dialog.html",parent:angular.element(a.body),clickOutsideToClose:!1,locals:{account:g.account,message:t,type:e},fullscreen:!0}).then(function(e){return l.faxAccount.send({id:g.account.id},e).$promise.then(function(e){d.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("fax",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)d.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else d.error({title:"FAX:SEND",msg:e.data?JSON.stringify(e.data):e.message||e.toString()})})})},g.composeSmsInteraction=function(e,t){s.show({controller:"ComposeSmsInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeSms/dialog.html",parent:angular.element(a.body),clickOutsideToClose:!1,locals:{account:g.account,message:t,type:e},fullscreen:!0,skipHide:Boolean(g.tab.spy)}).then(function(e){e&&E(e)})},g.transferLastMessage=function(){if(g.interaction){var e=_.findLast(g.messages.rows,function(e){return"in"===e.direction});e?s.show({controller:"TransferMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/transfer/dialog.html",parent:angular.element(a.body),clickOutsideToClose:!1,locals:{account:g.account,interaction:g.interaction,message:e,channel:g.tab.channel}}).then(function(e){g.tab.saved=Boolean(e),e&&i.$parent.$parent.$parent.vm.closeTab(g.tab)}):d.error({title:"Invalid transfer",msg:"Message not found!"})}},g.downloadMessage=function(s,e){g.tab.channel&&s.id&&l[g.tab.channel+"Message"].download({id:s.id,attachments:e}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=g.tab.channel+"-message"+s.id+".eml";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)d.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.downloadMessage.get",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.downloadInteraction=function(s,e){g.tab.channel&&s.id&&l[g.tab.channel+"Interaction"].download({id:s.id,attachments:e}).$promise.then(function(e){var t=[e.buffer],n=g.tab.channel+"-interaction"+s.id+".zip",a=new Blob(t,{type:e.type}),i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)d.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.inteactionMessage.get",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.openDraft=T,g.getMailAccounts=function(){l.user.getMailAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.mailAccounts=e||{count:0,rows:[]}})},g.getFaxAccounts=function(){l.user.getFaxAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.faxAccounts=e||{count:0,rows:[]}})},g.getSmsAccounts=function(){l.user.getSmsAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.smsAccounts=e||{count:0,rows:[]}})},g.getOpenchannelAccounts=function(){l.user.getOpenchannelAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.openchannelAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mail.account"}];for(var t=0;t<e.data.errors.length;t+=1)d.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mail.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getChatWebsites=function(){l.user.getChatWebsites({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.chatAccounts=e||{count:0,rows:[]}})},g.getLists=function(){l.user.getLists({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.voiceAccounts=e||{count:0,rows:[]}})},g.reply=function(e,t){if(e&&13===e.keyCode&&e.shiftKey)return;if(e&&13!==e.keyCode)return;if(""===t.trim())return;E(function(e){var t={},n="chat"===g.tab.channel?"ChatWebsiteId":_.capitalize(g.tab.channel)+"AccountId";t[n]=g.interaction[n].toString(),t[_.capitalize(g.tab.channel)+"InteractionId"]=g.interaction.id,"sms"===g.tab.channel&&(t.phone=g.interaction.phone);e&&(t.UserId=g.user.id,t.ContactId=g.interaction.ContactId,t.body=e,t.createdAt=Date.now());return t}(t.replace(/\n$/,"")))},g.upload=function(){g.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},g.ngFlow.flow.upload()},g.fileAdded=function(e){if(e.size>h)return d.error({title:"File too big",msg:"The max allowed size is "+v+"MB"}),!1;return!0},g.fileSuccess=function(e,t){var n=JSON.parse(t),a=n.name;"chat"===g.tab.channel&&(a='<a href="'+(g.account.remote?g.account.remote:r.protocol()+"://"+r.host())+"/api/chat/interactions/"+g.interaction.id+"/attachment_download?attachId="+n.id+"&token="+g.account.token+'" target="_self">'+n.name+"</a>");E({body:a,AttachmentId:n.id})},g.onMessageSave=function(e){if(e&&g.interaction.id!=e[_.capitalize(g.tab.channel)+"InteractionId"])return;var t=!1;g.messages?t=_.find(g.messages.rows,{id:e.id}):g.messages={rows:[],count:0};t?_.merge(t,e):("mail"===g.tab.channel?g.messages.rows.unshift(e):g.messages.rows.push(e),A())},g.onInteractionSave=function(e){if(e&&g.interaction.id!==e.id)return;e.closed&&(g.tab.saved=!0);_.merge(g.interaction,e)},g.searchTextChange=function(t){var n=o.defer(),a=[],e={},i="chat"===g.tab.channel?"ChatWebsiteId":_.capitalize(g.tab.channel)+"AccountId";return e.filter=t,e[i]=g.account.id,l.cannedAnswer.get(e).$promise.then(function(e){return a=_.concat(a,e.rows),l.cannedAnswer.get({filter:t}).$promise}).then(function(e){a=_.concat(a,_.filter(e.rows,function(e){return!(e.MailAccountId||e.FaxAccountId||e.SmsAccountId||e.OpenchannelAccountId||e.ChatWebsiteId)})),n.resolve(a)}).catch(function(e){n.reject(e)}),n.promise},g.selectedItemChange=function(t){if(t){try{_.templateSettings.interpolate=/{{([\s\S]+?)}}/g;var e=_.template(t.value),n={user:g.user,account:g.account,interaction:g.interaction,contact:g.interaction&&g.interaction.Contact?g.interaction.Contact:{}};g.tab.areaText+=" "+e(n),g.ctrlMethods.setText(g.tab.areaText)}catch(e){g.tab.areaText+=" "+t.value,g.ctrlMethods.setText(g.tab.areaText)}g.selectedItem=null,g.changeDisplayCannedAnswerInputValue()}},g.getIconByChannel=function(e){switch(e){case"chat":return"icon-hangouts";case"mail":return"icon-email";case"sms":return"icon-message-text";case"openchannel":return"icon-google-earth";case"fax":return"icon-deskphone";default:return"icon-hangouts"}},g.getColorByChannel=y,g.getColorByItem=function(e){var t="";e.FaxAccountId?t="fax":e.OpenchannelAccountId?t="openchannel":e.SmsAccountId?t="sms":e.MailAccountId?t="mail":e.ChatWebsiteId?t="chat":e.amaflags&&(t="voice");return y(t)},g.getMessagesAlignment=function(e){if(e.secret&&g.user.id!=e.UserId)return"in";switch(g.setting.messagesAlignment){case"left":return"in"==e.direction?e.direction:"out-left-aligned";case"right":return"in"==e.direction?"in-right-aligned":e.direction;default:return e.direction}},g.displayCannedAnswerInput=!1,g.changeDisplayCannedAnswerInputValue=function(){g.displayCannedAnswerInput=!g.displayCannedAnswerInput},g.setAs=function(e){g.tab.channel&&g.interaction&&g.interaction.id&&l[g.tab.channel+"Interaction"].update({id:g.interaction.id,substatus:e}).$promise.catch(function(e){console.error(e)})},g.markAsUnread=function(){if(g.tab.channel&&g.interaction&&g.interaction.id)if(g.acceptedMessages.length)for(var e=0;e<g.acceptedMessages.length;e+=1)l[g.tab.channel+"Message"].update({id:g.acceptedMessages[e],read:!1,UserId:null});else for(var t=0;t<g.messages.rows.length;t+=1)if("in"===g.messages.rows[t].direction){g.messages.rows[t].UserId===g.user.id?l[g.tab.channel+"Message"].update({id:g.messages.rows[t].id,read:!1,UserId:null}):d.error({title:"You can't mark as unread",msg:"You are not the owner of the last message!"});break}g.tab.saved=!0,i.$parent.$parent.$parent.vm.closeTab(g.tab)},g.isMyAccount=function(e){{if(e.FaxAccountId)return _.includes(_.map(g.faxAccounts?g.faxAccounts.rows:[],"id"),e.FaxAccountId);if(e.OpenchannelAccountId)return _.includes(_.map(g.openchannelAccounts?g.openchannelAccounts.rows:[],"id"),e.OpenchannelAccountId);if(e.SmsAccountId)return _.includes(_.map(g.smsAccounts?g.smsAccounts.rows:[],"id"),e.SmsAccountId);if(e.MailAccountId)return _.includes(_.map(g.mailAccounts?g.mailAccounts.rows:[],"id"),e.MailAccountId);if(e.ChatWebsiteId)return _.includes(_.map(g.chatAccounts?g.chatAccounts.rows:[],"id"),e.ChatWebsiteId);if(e.amaflags)return!0}return!1},g.getAttachments=function(t){return l.attachment.get({MailMessageId:t.id}).$promise.then(function(e){e&&e.rows&&(t.attachments=e.rows)}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"ATTACHMENTS:GET",msg:e.data?JSON.stringify(e.data):e.toString()})})},g.getAttachment=function(i){return l.attachment.download({id:i.id}).$promise.then(function(e){if(e){var t=new Blob([e.buffer],{type:e.type}),n=document.createElement("a"),a=window.URL.createObjectURL(t);n.href=a,n.target="_self",n.download=i.name,document.body.appendChild(n),n.click(),setTimeout(function(){document.body.removeChild(n),window.URL.revokeObjectURL(a)},100)}}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"ATTACHMENTS:GET",msg:e.data?JSON.stringify(e.data):e.toString()})})},g.htmlToPlaintext=function(e){return e?String(e).replace(/<[^>]+>/gm,""):""},g.onInteractionOpen=function(e){var t;g.interaction.id==e[_.upperFirst(g.tab.channel)+"InteractionId"]&&(g.interaction.Users&&(t=_.find(g.interaction.Users,{id:e.UserId})),t||g.interaction.Users.push({id:e.UserId}))},g.onInteractionClose=function(e){g.interaction.id==e[_.upperFirst(g.tab.channel)+"InteractionId"]&&g.interaction.Users&&_.remove(g.interaction.Users,{id:e.UserId})},g.loadNextPage=function(){var n=o.defer();if(g.queryMessage)return g.queryMessage.offset=g.messages.rows.length,l[g.tab.channel+"Interaction"].getMessages(g.queryMessage).$promise.then(function(e){for(var t=0;t<e.rows.length;t+=1)g.messages.rows.push(e.rows[t]),g.interaction.closed||"in"!==e.rows[t].direction||e.rows[t].read||(l[g.tab.channel+"Message"].accept({id:e.rows[t].id,UserId:g.user.id}),g.acceptedMessages.push(e.rows[t].id));return n.resolve(e)}).catch(function(e){return n.reject(e)});return n.reject()},g.timelineOptions={scrollEl:"#interaction-content"},i.$on("$destroy",function(){m.removeAllListeners(g.tab.channel+"Message:save"),m.removeAllListeners(g.tab.channel+"Message:update"),m.removeAllListeners(g.tab.channel+"Interaction:save"),m.removeAllListeners(g.tab.channel+"Interaction:update"),m.removeAllListeners("user_has_"+g.tab.channel+"_interactions:save"),m.removeAllListeners("user_has_"+g.tab.channel+"_interactions:remove")})}function t(a){return{scope:{ngBindHtmlUnsafe:"="},template:"<div ng-bind-html='trustedHtml'></div>",link:function(n){n.updateView=function(){var e,t=_.replace(n.ngBindHtmlUnsafe,'<div id="xm-mail-content"','<a style="cursor:pointer" class="toggle-details md-accent-color" onclick="document.getElementById(\''+(e="xm-mail-content-"+Math.floor(9999*Math.random()+1))+"').style.display='block'; this.parentNode.removeChild(this)\">See More</a><div id=\""+e+'" style="display:none"');n.trustedHtml=a.trustAsHtml(t)},n.$watch("ngBindHtmlUnsafe",function(e,t){n.updateView(e)})}}}e.$inject=["$cookies","$timeout","$document","$scope","$mdDialog","$q","$location","$translate","api","toasty","Auth","socket","msUtils","draftManager"],t.$inject=["$sce"],angular.module("app.dashboards").directive("ngBindHtmlUnsafe",t).filter("getChannelByItem",function(){return function(e,t,n,a){for(var i=[],s=0;s<e.length;s+=1){var o=!0;switch(t){case"voice":o=Boolean(e[s].uniqueid);break;case"chat":o=Boolean(e[s].ChatWebsiteId);break;case"mail":o=Boolean(e[s].MailAccountId);break;case"sms":o=Boolean(e[s].SmsAccountId);break;case"fax":o=Boolean(e[s].FaxAccountId);break;case"openchannel":o=Boolean(e[s].OpenchannelAccountId);break;default:o=!0}o&&n&&a&&(o=moment(e[s].createdAt).isBetween(moment(n).utcOffset(0,!0),moment(a).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds"))),o&&i.push(e[s])}return i}}).controller("AgentGeneralInteractionController",e)}(),function(){"use strict";angular.module("app.dashboards").factory("Emojis",function(){return{watchEmbedData:!1,sanitizeHtml:!1,fontSmiley:!1,emoji:!0,link:!0,linkTarget:"_blank",pdf:{embed:!0},image:{embed:!0},audio:{embed:!0},basicVideo:!1,gdevAuth:"xxxxxxxx",video:{embed:!1,width:null,height:null,ytTheme:"dark",details:!1,thumbnailQuality:"medium",autoPlay:!0},twitchtvEmbed:!0,dailymotionEmbed:!0,tedEmbed:!0,dotsubEmbed:!0,liveleakEmbed:!0,ustreamEmbed:!0,soundCloudEmbed:!0,soundCloudOptions:{height:160,themeColor:"f50000",autoPlay:!1,hideRelated:!1,showComments:!0,showUser:!0,showReposts:!1,visual:!1,download:!1},spotifyEmbed:!0,tweetEmbed:!0,tweetOptions:{maxWidth:550,hideMedia:!1,hideThread:!1,align:"none",lang:"en"},code:{highlight:!0,lineNumbers:!1},codepenEmbed:!0,codepenHeight:300,jsfiddleEmbed:!0,jsfiddleHeight:300,jsbinEmbed:!0,jsbinHeight:300,plunkerEmbed:!0,githubgistEmbed:!0,ideoneEmbed:!0,ideoneHeight:300}})}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this,m=25,u=1024*m*1024;c.separatorKeys=[a.KEY_CODE.ENTER,a.KEY_CODE.COMMA,a.KEY_CODE.TAB],c.message={from:i.localstationid,to:_.isNil(s.to)||_.isEmpty(s.to)?[]:s.to,attachments:[]},c.ngFlowOptions={target:"api/attachments",singleFile:!0,maxChunkRetries:1,chunkSize:u,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},c.ngFlow={flow:{}},c.send=function(e){1===c.message.attachments.length?c.message.to.length?(s.draft=void 0,n.hide({from:c.message.from,to:c.message.to,attach:c.message.attachments.length,attachments:c.message.attachments})):l.error("To is mandatory"):l.error("Attachment is mandatory")},c.upload=function(){c.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},c.ngFlow.flow.upload()},c.fileSuccess=function(e,t){try{(t=JSON.parse(t)).size=e.size,c.message.attachments.push(t)}catch(e){console.error(e)}},c.fileAdded=function(e){var t=["pdf","tif"];if(!_.includes(t,e.getExtension()))return l.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extensions: "+t.join()}),!1;if(e.size>u)return l.error({title:"File too big",msg:"The max allowed size is "+m+"MB"}),!1;return!0},c.getContact=function(e){var t="";e.firstName&&e.firstName!==e.fax&&(t+=e.firstName+" ");e.lastName&&e.lastName!==e.fax&&(t+=e.lastName+" ");return t+="<"+e.fax+">"},c.contactSearch=function(e){return i&&i.ListId?r.cmContact.get({ListId:i.ListId,nolimit:!0,filter:e,fields:"firstName,lastName,fax"}).$promise.then(function(e){return e.rows}):[]},c.transformContact=function(e){var t=e;if(_.isObject(e))return e.fax;if(n=t,!/[&\/\\#,()$~%.'":;*?<>{}\s\\|a-zA-Z\pS!òàùè…_§°çéì-]/.test(n))return t;var n;return l.error("Fax "+t+" is not valid"),null},c.closeDialog=function(){s.draft=c.message,n.cancel()}}e.$inject=["$cookies","$window","$mdDialog","$mdConstant","account","message","type","api","toasty","$q"],angular.module("app.dashboards").controller("ComposeFaxInteractionDialogController",e)}(),function(){"use strict";function e(t,e,i,n,a,s,o,r,l,d,c,m,u,p){var g=this,v=25,h=1024*v*1024;g.currentUser=m.getCurrentUser(),g.secret="note"===r,g.hiddenCC=!0,g.hiddenBCC=!0,g.verifySmtp=!0,g.errors=[],g.separatorKeys=[n.KEY_CODE.ENTER,n.KEY_CODE.COMMA,n.KEY_CODE.TAB],g.searchTextChange=function(t){var n=c.defer(),a=[];return l.cannedAnswer.get({filter:t,MailAccountId:s.id}).$promise.then(function(e){return a=_.concat(a,e.rows),l.cannedAnswer.get({filter:t}).$promise}).then(function(e){a=_.concat(a,_.filter(e.rows,function(e){return!(e.MailAccountId||e.FaxAccountId||e.SmsAccountId||e.OpenchannelAccountId||e.ChatWebsiteId)})),n.resolve(a)}).catch(function(e){n.reject(e)}),n.promise},g.selectedItemChange=function(t){if(t&&t.value&&g.ckEditorInstance)try{var e=_.template(t.value),n={user:g.currentUser,account:s,interaction:u,contact:u&&u.Contact?u.Contact:{}};g.ckEditorInstance.insertHtml(e(n))}catch(e){console.error(e),g.ckEditorInstance.insertHtml(t.value)}document.getElementById("html-area").focus(),g.selectedItem=null},g.onReadyEditor=function(e){try{g.ckEditorInstance=CKEDITOR.instances["html-area"]}catch(e){console.error("Unable to get Html Editor instance",e)}},_.templateSettings.interpolate=/{{([\s\S]+?)}}/g,g.fromTemplate=_.template("{{ name }} <{{ email }}>"),g.replyTemplate=_.template("On {{ date }}, at {{ time }}, {{ from }} wrote:"),g.forwardTemplate=_.template("Begin forwarded message:<br><br><strong>From:</strong> {{ from }}<br><strong>Subject:</strong> {{ subject }}<br><strong>Date:</strong> {{ date }}, at {{ time }}<br><strong>To:</strong> {{ to }}"),g.message={from:g.fromTemplate({name:s.name,email:s.email||s.Smtp.user}),to:[],cc:[],bcc:[],body:y(),type:r,attachments:[],showLastMessage:!0},g.draft=null,g.ckeditor={skin:"office2013",startupFocus:!0,language:"en",allowedContent:!0,extraPlugins:"font,colorbutton,autogrow,autoembed,autocorrect,googlethisterm,pastebase64",toolbarGroups:[{name:"styles",groups:["styles"]},{name:"clipboard",groups:["undo"]},{name:"colors",groups:["colors"]},{name:"basicstyles",groups:["basicstyles"]},{name:"paragraph",groups:["list","indent","align"]}],autoGrow_onStartup:!0,autoGrow_minHeight:g.secret?160:300,autoGrow_maxHeight:e.innerHeight-400,autocorrect_enabled:!0,disableNativeSpellChecker:!1,enterMode:CKEDITOR.ENTER_BR,font_defaultLabel:s.fontFamily?s.fontFamily.split(",")[0]:"Arial",fontSize_defaultLabel:s.fontSize||"12",removePlugins:"magicline"};for(var f=[],b=8;b<=72;b++)f.push(b+"/"+b+"pt");switch(g.ckeditor.fontSize_sizes=f.join(";"),g.ngFlowOptions={target:"api/attachments",singleFile:!0,maxChunkRetries:1,chunkSize:h,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},g.ngFlow={flow:{}},g.reply=function(e){angular.isDefined(o)&&(g.message.type="reply",g.message.to="in"===o.direction?o.from.split(","):o.to.split(","),g.message.subject=_.startsWith(o.subject,"Re:")?o.subject:"Re: "+o.subject,g.message.inReplyTo=o.messageId,g.message.body=y(),g.message.attachments=[],e&&o.cc&&(g.hiddenCC=!1,g.message.cc=o.cc.split(",")),g.message.showLastMessage=!1)},g.newMail=function(){angular.isDefined(o)&&(g.message.type="new",g.message.to=o.to?o.to.split(","):[])},g.forward=function(){if(angular.isDefined(o)){if(g.message.type="forward",g.message.subject=_.startsWith(o.subject,"Fwd:")?o.subject:"Fwd: "+o.subject,g.message.body=y(),o.Attachments&&o.Attachments.length)for(var e=0;e<o.Attachments.length;e++)g.message.attachments.push(o.Attachments[e]);g.message.showLastMessage=!1}},g.editDraft=function(){g.isDraft=!0,angular.isDefined(o)&&(o.savedAsDraft=!1,g.message=angular.copy(o),_.isEmpty(g.message.cc)||(g.hiddenCC=!1),_.isEmpty(g.message.bcc)||(g.hiddenBCC=!1))},g.send=function(e,t,n){if(g.message.to&&g.message.body)if(g.message.to.length)if(_.isEmpty(g.message.subject)){var a=i.confirm({skipHide:!0}).title("Warning").textContent("This message has no subject. Are you sure you want to send it?").ariaLabel("Warning").targetEvent(e).ok("Send Anyway").cancel("Cancel");i.show(a).then(function(){A(t,n)})}else A(t,n);else d.error("To is mandatory")},g.note=function(){g.type="note",g.secret=!0,g.message.body='<div style="font-family:'+s.fontFamily+";font-size:"+s.fontSize+'pt"><p></p></div>'},g.addNote=function(){g.message.body&&i.hide({secret:!0,body:g.message.body,attach:g.message.attachments.length,attachments:g.message.attachments})},g.upload=function(e){g.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+t.get("motion.token")},g.ngFlow.flow.upload()},g.fileSuccess=function(e,t){try{(t=JSON.parse(t)).size=e.size,g.message.attachments.push(t)}catch(e){console.error(e)}},g.deleteAttachment=function(e){g.message.attachments=_.reject(g.message.attachments,{id:e.id}),l.attachment.delete({id:e.id}).$promise.then(function(){d.success({title:"Attachment deleted!",msg:e.name?e.name+" has been deleted!":""})})},g.fileAdded=function(e){if(e.size>h)return d.error({title:"File too big",msg:"The max allowed size is "+v+"MB"}),!1;return!0},g.getContact=function(e){var t="";e.firstName&&e.firstName!==e.email&&(t+=e.firstName+" ");e.lastName&&e.lastName!==e.email&&(t+=e.lastName+" ");return t+="<"+e.email+">"},g.contactSearch=function(e){return s&&s.ListId?l.cmContact.get({ListId:s.ListId,nolimit:!0,filter:e,fields:"firstName,lastName,email"}).$promise.then(function(e){return e.rows}):[]},g.transformContact=function(e,t){if(_.isObject(e))return(g.contact=e).email;if(_.isString(e)){if(E(e))return g.contact={email:e},e;for(var n=e.split(","),a=0;a<n.length;a+=1)E(n[a])?_.isArray(t)&&_.indexOf(t,n[a])<0&&t.push(n[a]):d.error("Email "+n[a]+" is not valid");return g.contact={email:e.split(",")[0]},null}return d.error("Email field is not valid"),null},g.saveDraft=function(){g.message.savedAsDraft=!0,g.draft=p.getByInteraction(u.id);var e={account:s,message:g.message,contact:g.contact,interaction:u};if(g.draft&&!g.isDraft){var t=i.confirm({skipHide:!0}).title(a.instant("DASHBOARDS.DRAFT_SAVE_WARNING_TITLE")).content(a.instant("DASHBOARDS.DRAFT_SAVE_WARNING_MESSAGE")).ariaLabel("Save draft").ok(a.instant("DASHBOARDS.OVERWRITE")).cancel(a.instant("DASHBOARDS.CANCEL"));i.show(t).then(function(){i.hide(e)})}else i.hide(e)},g.closeDialog=function(){i.cancel()},g.loadLastMessage=function(){g.message.body+=S(g.message.type)},r){case"reply":g.reply(!1);break;case"replyAll":g.reply(!0);break;case"forward":g.forward();break;case"draft":g.editDraft();break;case"new":g.newMail();break;case"note":g.note()}function A(e,t){var n={from:g.message.from,to:g.message.to.join(","),cc:g.message.cc.join(","),bcc:g.message.bcc.join(","),subject:g.message.subject,body:g.message.showLastMessage?g.message.body:g.message.body+S(g.message.type),inReplyTo:g.message.inReplyTo,attach:g.message.attachments.length,attachments:g.message.attachments,Interaction:{lastMsgDirection:"out",lastMsgBody:g.message.body,substatus:t},isDraft:g.isDraft};n.html='<div id="xm-mail-content">'+_.replace(n.body,'<div id="xm-mail-content"',"<div")+"</div>",e&&(n.Interaction.closed=!0),i.hide(n)}function E(e){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)}function y(){return'<div style="font-family:'+s.fontFamily+";font-size:"+s.fontSize+'pt">'+function(){if(_.isNil(s.template))return"";try{return _.template(s.template)({user:g.currentUser,account:s,interaction:u,contact:u&&u.Contact?u.Contact:{}})}catch(e){return console.error(e),""}}()+"</div>"}function S(e){var t,n,a='<div id="xm-mail-content"><blockquote type="cite">';switch(e){case"reply":case"replyAll":a+=g.replyTemplate({date:moment(o.createdAt).format("D MMM YYYY")||"",time:moment(o.createdAt).format("HH:mm")||"",from:_.escape(o.from)||""});break;case"forward":a+=g.forwardTemplate({date:moment(o.createdAt).format("D MMM YYYY")||"",time:moment(o.createdAt).format("HH:mm")||"",from:_.escape(o.from)||"",to:_.escape(o.to)||"",subject:_.escape(o.subject)||""})}return a+="<br><br>",a+=(t=o.body?_.replace(o.body,'<div id="xm-mail-content"',"<div"):"",(n=t.match(/\<body[^>]*\>([^]*)\<\/body/m))?n[1]:t),a+="</blockquote></div>",e?a:""}l.mailSubstatus.get({nolimit:!0}).$promise.then(function(e){g.subStatuses=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}),g.secret||l.mailAccount.verifySmtp({id:s.id}).$promise.catch(function(e){g.verifySmtp=!1,g.errors.push({message:e.data,type:e.status}),g.errors.push({message:"You can't reply or send an email. Please contact the administrator!",type:"500"})})}e.$inject=["$cookies","$window","$mdDialog","$mdConstant","$translate","account","message","type","api","toasty","$q","Auth","interaction","draftManager"],angular.module("app.dashboards").controller("ComposeMailInteractionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;switch(p.currentUser=u.getCurrentUser(),p.errors=[],p.separatorKeys=[i.KEY_CODE.ENTER,i.KEY_CODE.COMMA,i.KEY_CODE.TAB],p.searchTextChange=function(t){var n=c.defer(),a=[];return l.cannedAnswer.get({filter:t,OpenchannelAccountId:s.id}).$promise.then(function(e){return a=_.concat(a,e.rows),l.cannedAnswer.get({filter:t}).$promise}).then(function(e){a=_.concat(a,_.filter(e.rows,function(e){return!(e.MailAccountId||e.FaxAccountId||e.SmsAccountId||e.OpenchannelAccountId||e.ChatWebsiteId)})),n.resolve(a)}).catch(function(e){n.reject(e)}),n.promise},p.selectedItemChange=function(t){if(t){try{_.templateSettings.interpolate=/{{([\s\S]+?)}}/g;var e=_.template(t.value),n={user:p.currentUser,account:s};p.message.body+=" "+e(n),p.ctrlMethods.setText(p.message.body)}catch(e){p.message.body+=" "+t.value,p.ctrlMethods.setText(p.message.body)}p.selectedItem=null}},p.note=function(){p.secret=!0},p.addNote=function(){p.message.body&&a.hide({secret:!0,body:p.message.body})},p.ctrlMethods={},p.message={from:s.phone,to:_.isNil(o.to)||_.isEmpty(o.to)?[]:o.to,body:""},p.send=function(e){p.message.to&&p.message.body&&(p.message.to.length?(t=p.message.body,a.hide({to:p.message.to.join(","),body:t})):d.error("To is mandatory"));var t},p.getContact=function(e){var t="";e.firstName&&e.firstName!==e[s.mapKey]&&(t+=e.firstName+" ");e.lastName&&e.lastName!==e[s.mapKey]&&(t+=e.lastName+" ");return t+="<"+e[s.mapKey]+">"},p.closeDialog=function(){a.cancel()},p.contactSearch=function(e){if(s&&s.ListId){var t="firstName,lastName,phone,mobile";return s.mapKey&&(t+=","+s.mapKey),l.cmContact.get({ListId:s.ListId,nolimit:!0,filter:e,fields:t}).$promise.then(function(e){return e.rows})}return[]},p.transformContact=function(e){var t=e;if(_.isObject(t))return e[s.mapKey];return t},r){case"note":p.note()}}e.$inject=["$cookies","$timeout","$window","$mdDialog","$mdConstant","account","message","type","api","toasty","$q","$translate","Auth"],angular.module("app.dashboards").controller("ComposeOpenchannelInteractionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;switch(p.currentUser=u.getCurrentUser(),p.errors=[],p.separatorKeys=[i.KEY_CODE.ENTER,i.KEY_CODE.COMMA,i.KEY_CODE.TAB],p.searchTextChange=function(t){var n=c.defer(),a=[];return l.cannedAnswer.get({filter:t,SmsAccountId:s.id}).$promise.then(function(e){return a=_.concat(a,e.rows),l.cannedAnswer.get({filter:t}).$promise}).then(function(e){a=_.concat(a,_.filter(e.rows,function(e){return!(e.MailAccountId||e.FaxAccountId||e.SmsAccountId||e.OpenchannelAccountId||e.ChatWebsiteId)})),n.resolve(a)}).catch(function(e){n.reject(e)}),n.promise},p.selectedItemChange=function(t){if(t){try{_.templateSettings.interpolate=/{{([\s\S]+?)}}/g;var e=_.template(t.value),n={user:p.currentUser,account:s};p.message.body+=" "+e(n),p.ctrlMethods.setText(p.message.body)}catch(e){p.message.body+=" "+t.value,p.ctrlMethods.setText(p.message.body)}p.selectedItem=null}},p.note=function(){p.secret=!0},p.addNote=function(){p.message.body&&a.hide({secret:!0,body:p.message.body})},p.ctrlMethods={},p.message={from:s.phone,to:_.isNil(o.to)||_.isEmpty(o.to)?[]:o.to,body:""},p.send=function(e){p.message.to&&p.message.body&&(p.message.to.length?(t=p.message.body,a.hide({to:p.message.to.join(","),body:t})):d.error("To is mandatory"));var t},p.getContact=function(e){var t="";e.firstName&&e.firstName!==e.mobile&&(t+=e.firstName+" ");e.lastName&&e.lastName!==e.mobile&&(t+=e.lastName+" ");return t+="<"+e.mobile+">"},p.closeDialog=function(){a.cancel()},p.contactSearch=function(e){if(s&&s.ListId)return l.cmContact.get({ListId:s.ListId,nolimit:!0,filter:e,fields:"firstName,lastName,mobile"}).$promise.then(function(e){return e.rows});return[]},p.transformContact=function(e){var t=e;if(_.isObject(t))return e.mobile;if(n=t,/^(\+|\d)[0-9]{7,16}$/.test(n))return t;var n;return d.error("Mobile "+t+" is not valid"),null},r){case"note":p.note()}}e.$inject=["$cookies","$timeout","$window","$mdDialog","$mdConstant","account","message","type","api","toasty","$q","$translate","Auth"],angular.module("app.dashboards").controller("ComposeSmsInteractionDialogController",e)}(),function(){"use strict";function e(t,n,a,e,i,s,o){var r,l=this;function d(e){t.hide(e)}l.errors=[],l.dispositions={count:0,rows:[]},l.globalDispositions={count:0,rows:[]},l.interaction=angular.copy(e),l.interaction.disposition||(l.interaction.disposition=null),l.channel=i,l.apiRoute=l.channel+"Interaction",l.apiAccountRoute=l.channel+("chat"===l.channel?"Website":"Account"),l.accountProperty=_.capitalize(l.channel)+("chat"===l.channel?"Website":"Account")+"Id",l.mandatoryDisposition=!1,l.mandatoryDispositionPause="",l.wasUserInPause=s.voicePause||s.chatPause||s.mailPause||s.openchannelPause||s.faxPause,l.saveDisposition=function(e){l.errors=[],l.interaction.UserId=s.id,l.interaction.closed=!0,l.interaction.closeReason="agent",a[l.apiRoute]?a[l.apiRoute].update(_.pick(l.interaction,["MailAccountId","FaxAccountId","SmsAccountId","ChatWebsiteId","OpenchannelAccountId","closed","closeReason","disposition","id","note","UserId"])).$promise.then(function(e){l.interaction=e,o.removeByInteraction(l.interaction.id),n.success({title:"Interaction properly closed!",msg:"Interaction has been closed!"})}).then(function(){d(!0)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){l.errors=e.data.errors||[{message:e.toString(),type:"api.variable.update"}];for(var t=0;t<e.data.errors.length;t++)n.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.variable.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})}):d(!1)},l.closeDialog=d,(r={fields:"id,name",sort:"name",nolimit:!0})[l.accountProperty]=e[l.accountProperty],a[l.apiAccountRoute].get({id:e[l.accountProperty]}).$promise.then(function(e){l.mandatoryDisposition=e.mandatoryDisposition,l.mandatoryDisposition&&(l.mandatoryDispositionPause=e.mandatoryDispositionPause.name)}).then(function(){l.mandatoryDisposition&&!l.wasUserInPause&&a.user.pause({id:s.id,type:l.mandatoryDispositionPause||"DEFAULT PAUSE"}).$promise.then(function(e){}).catch(function(e){console.error(e)})}),a.disposition.get(r).$promise.then(function(e){l.dispositions=e}).catch(function(e){console.error(e)}),a.disposition.get({MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null"}).$promise.then(function(e){l.globalDispositions=e}).catch(function(e){console.error(e)})}e.$inject=["$mdDialog","toasty","api","interaction","channel","user","draftManager"],angular.module("app.dashboards").controller("DisposeInteractionDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i,s){var o=this;function r(e){t.hide(e)}o.errors=[],o.tags=s,o.interaction=angular.copy(a),o.interaction.Tags=_.map(o.interaction.Tags,function(e){return{id:e.id,name:e.name,color:e.color}}),o.channel=i,o.autocompleteRequireMatch=!0,o.saveTag=function(){{if(o.errors=[],e[o.apiRoute])return e[o.apiRoute].addTags({id:o.interaction.id,ids:_.map(o.interaction.Tags,"id")}).$promise.then(function(){n.success({title:"Interaction properly tagged!",msg:"Interaction has been tagged!"}),a.Tags=o.interaction.Tags,r(!0)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)n.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.variable.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})});r(!1)}},o.closeDialog=r,o.apiRoute=o.channel+"Interaction"}e.$inject=["$mdDialog","toasty","api","interaction","channel","tags"],angular.module("app.dashboards").controller("TagInteractionDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;function d(e){t.hide(e)}l.currentUser=n.getCurrentUser(),l.channel=s.toLowerCase(),l.message=o,l.account=r,l.transfer={id:0,type:"queue"},l.agents=l.queues={count:0,rows:[]},l.queueMethod=l.channel+"Queue",l.queueNotifyMethod=l.channel+"QueueNotify",l.onTransfer=function(){d(!0),e(function(){return a.rpc["agent"===l.transfer.type?"agentNotify":l.queueNotifyMethod]({id:l.transfer.id,messageId:l.message.id,channel:l.channel}).$promise.then(function(e){i.success({title:"Trasfer properly done!",msg:"Transfer "+l.transfer.type+" has been done!"})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){l.errors=e.data.errors||[{message:e.toString(),type:"api.rpc.notify"}];for(var t=0;t<e.data.errors.length;t++)i.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.rpc.notify",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},5e3)},l.closeDialog=d,l.init=function(){return a.user.get({fields:"id,name",role:"agent",nolimit:!0}).$promise.then(function(e){return l.agents=e||{count:0,rows:[]},a[l.queueMethod].get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){l.queues=e||{count:0,rows:[]}}).catch(function(e){console.error(e)})},l.init()}e.$inject=["$mdDialog","$timeout","Auth","api","toasty","channel","message","account"],angular.module("app.dashboards").controller("TransferMessageDialogController",e)}(),function(){"use strict";function e(i,s,o,e,l,d,t,n,a,r,c){var m=this;function u(){try{i.$parent.$parent.$parent.vm.updateLocalStorage()}catch(e){d.error({title:"ERROR UPDATE LOCAL TABS",msg:"Error updating locally stored tabs"})}}function p(n,e){var r=t.getCurrentUser();l.jscriptySessionReport.save({starttime:m.starttime,membername:m.call&&m.call.membername?m.call.membername:r.name,calleridname:m.call&&m.call.calleridname?m.call.calleridname:void 0,calleridnum:m.call&&m.call.calleridnum?m.call.calleridnum:void 0,queue:m.call&&m.call.queue?m.call.queue:void 0,uniqueid:m.call&&m.call.uniqueid?m.call.uniqueid:void 0,VoiceQueueId:m.call&&m.call["xmd-voicequeueid"]?m.call["xmd-voicequeueid"]:void 0,ProjectId:m.project&&m.project.id?m.project.id:void 0,projectname:m.project&&m.project.name?m.project.name:void 0,ContactId:m.contact&&m.contact.id?m.contact.id:void 0,completed:e}).$promise.then(function(e){if(e)for(var t=m.getResponseSheetHeaders(),n=m.getResponseSheetRow(),a=m.getQuestionWithResponseList(),i=0;i<t.length;i+=1)if(!_.isEmpty(n[i])){l.jscriptyQuestionReport.save({question:t[i],answer:n[i],questionId:a[i].id,membername:m.call&&m.call.membername?m.call.membername:r.name,calleridname:m.call&&m.call.calleridname?m.call.calleridname:void 0,calleridnum:m.call&&m.call.calleridnum?m.call.calleridnum:void 0,queue:m.call&&m.call.queue?m.call.queue:void 0,uniqueid:m.call&&m.call.uniqueid?m.call.uniqueid:void 0,SessionId:e.id,ProjectId:m.project.id,projectname:m.project.name});for(var s=n[i].toString().split(";"),o=0;o<s.length;o+=1)l.jscriptyAnswerReport.save({question:t[i],questionId:a[i].id,answer:s[o].trim(),membername:m.call&&m.call.membername?m.call.membername:r.name,calleridname:m.call&&m.call.calleridname?m.call.calleridname:void 0,calleridnum:m.call&&m.call.calleridnum?m.call.calleridnum:void 0,queue:m.call&&m.call.queue?m.call.queue:void 0,uniqueid:m.call&&m.call.uniqueid?m.call.uniqueid:void 0,SessionId:e.id,ProjectId:m.project.id,projectname:m.project.name})}return e}).then(function(e){e?n.resolve(!0):n.reject()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.contact.save"}];for(var t=0;t<e.data.errors.length;t+=1)d.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.contact.save",msg:e.data?JSON.stringify(e.data.message):e.toString()});n.reject()})}m.formViewer={},m.showResetButton=!0,m.showIncompleteSubmitButton=!1,m.detectBrowser=c.detectBrowser(),m.onSubmit=function(e,t){var n=s.defer();if(t){var a=o.confirm().title("Would you like to save your survey?").textContent("").ariaLabel("survey").targetEvent(e).ok("YES").cancel("NO");o.show(a).then(function(){p(n,!1)},function(){n.resolve()})}else p(n,!0);return n.promise.then(function(e){e&&(d.success({title:"Session saved",msg:"Your survey session has been properly saved!"}),function(e){try{i.$parent.$parent.$parent.vm.removeTab(e)}catch(e){d.error({title:"ERROR REMOVE TAB",msg:"Error while removing tab"})}}(m.tab))}).catch(function(e){d.error({title:"Session save error",msg:"There has been an error while trying to save your survey session!"})})},m.openContact=function(e,t){try{i.$parent.$parent.$parent.vm.addContactTab(t)}catch(e){d.error({title:"ERROR OPEN CONTACT",msg:"Jscripty can't open the contact"})}},m.isJsonString=function(e){if(_.isNil(e))return!1;try{JSON.parse(e)}catch(e){return!1}return!0},m.getResponseSheet=function(){return e.getResponseSheet(m.project.formData,m.project.responseData,!1)},m.getResponseSheetRow=function(){return e.getResponseSheetRow(m.project.formData,m.project.responseData)},m.getResponseSheetHeaders=function(){return e.getResponseSheetHeaders(m.project.formData,!1)},m.getQuestionWithResponseList=function(){return e.getQuestionWithResponseList(m.project.formData,m.project.responseData)},m.init=function(e){m.tab=e,m.tab&&(m.call=m.tab.call,m.starttime=m.tab.openedAt,m.contact=m.tab.contact,m.project=m.tab.project,m.project&&(_.isObjectLike(m.project.formData)?m.project.formData=m.project.formData:m.isJsonString(m.project.formData)?m.project.formData=JSON.parse(m.project.formData):m.project.formData=void 0,m.project.responseData=m.project.responseData||{},void 0!==m.project.currentPage&&r(function(){a.$broadcast("mwForm.pageEvents.changePage",{page:m.project.currentPage})}),i.$on("mwForm.pageEvents.pageCurrentChanged",function(e,t){if(t.currentPage&&(m.project.currentPage=t.currentPage.number-1,u(),m.project.enableUncompleteSave&&(1<=t.currentPage.number&&t.currentPage.number<m.project.formData.pages.length?m.showIncompleteSubmitButton=!0:m.showIncompleteSubmitButton=!1),m.project.formData&&m.project.formData.pages))for(var n=0,a=m.project.formData.pages.length;n<a;n++)if(t.currentPage.number<n+1&&m.project.formData.pages[n].elements)for(var i=0,s=m.project.formData.pages[n].elements.length;i<s;i++)"question"===m.project.formData.pages[n].elements[i].type&&m.project.formData.pages[n].elements[i].question&&delete m.project.responseData[m.project.formData.pages[n].elements[i].question.id]})))},m.resetViewer=function(e){if(m.formViewer.reset){var t=o.confirm().title(n.instant("JSCRIPTY.DO_YOU_WANT_TO_RESET_SESSION")).content(n.instant("JSCRIPTY.ALL_SURVEY_DATA_WILL_BE_LOST")).textContent("").ariaLabel("survey").targetEvent(e).ok(n.instant("JSCRIPTY.YES")).cancel(n.instant("JSCRIPTY.NO"));o.show(t).then(function(){m.showIncompleteSubmitButton=!1,m.project.currentPage=void 0,u(),m.formViewer.reset()})}}}e.$inject=["$scope","$q","$mdDialog","mwFormResponseUtils","api","toasty","Auth","$translate","$rootScope","$timeout","msUtils"],angular.module("app.dashboards").controller("AgentGeneralJscriptyController",e)}(),function(){"use strict";function e(n,a,e,t,i){var s=this;function o(){return function(e){if(404===e.status)a.info({title:n.instant("DASHBOARDS.ATTENTION"),msg:n.instant("DASHBOARDS.ACCEPT_ELSEWHERE")});else if(e.data&&e.data.errors&&e.data.errors.length){s.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelMessage.accept"}];for(var t=0;t<e.data.errors.length;t+=1)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelMessage.accept",msg:e.data?JSON.stringify(e.data.message):e.toString()})}}s.notification=e,s.user=i.getCurrentUser(),s.accept=function(e){{if(t[s.notification.channel+"Message"])return t[s.notification.channel+"Message"].accept({id:s.notification.id,UserId:s.user.id,manual:!0}).$promise.then(function(e){a.success({title:"Message properly accepted!",msg:"Message has been accepted!"})}).catch(o());a.error({title:"API:ERROR",msg:"API accept message not found: "+s.notification.channel+"Message"})}},s.reject=function(e){{if(t[s.notification.channel+"Message"])return t[s.notification.channel+"Message"].reject({id:s.notification.id,UserId:s.user.id}).$promise.then(function(e){a.success({title:"Message properly rejected!",msg:"Message has been rejected!"})}).catch(o());a.error({title:"API:ERROR",msg:"API reject message not found: "+s.notification.channel+"Message"})}}}e.$inject=["$translate","toasty","notification","api","Auth"],angular.module("app.dashboards").controller("NotificationController",e)}(),function(){"use strict";angular.module("app.dashboards").controller("AgentGeneralPopupController",function(){var t=this;t.init=function(e){t.tab=e,t.tab&&(t.tab.saved=!0,t.html=t.tab.html)}})}(),function(){"use strict";function e(e,t,n,a){var i=this,s=[];function o(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(s,e.id)||(i.inbound.talking+=1,s.push(e.id),!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),e.closed&&"abandoned"===e.disposition?(i.inbound.abandoned+=1,!t&&i.inbound.waiting&&(i.inbound.waiting-=1)):e.closed&&!e.UserId&&e.disposition?(i.inbound.unmanaged+=1,!t&&i.inbound.waiting&&(i.inbound.waiting-=1)):e.closed&&e.UserId&&(i.inbound.sumBillable+=moment(e.closedAt).diff(moment(e.read1stAt),i.config.unit),i.inbound.sumHoldTime+=moment(e.read1stAt).diff(moment(e.createdAt),i.config.unit),i.inbound.answered+=1,!t&&i.inbound.talking&&(i.inbound.talking-=1)),t&&(i.inbound.total+=1)}function r(){i.inbound.abandonRate=Math.round((i.inbound.abandoned+i.inbound.unmanaged)/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.answerRate=Math.round(i.inbound.answered/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.avgHoldTime=moment.duration(Math.round(i.inbound.sumHoldTime/i.inbound.answered),i.config.unit).format(i.config.format,i.config),i.inbound.avgTalkTime=moment.duration(Math.round(i.inbound.sumBillable/i.inbound.answered),i.config.unit).format(i.config.format,i.config)}function l(e){return!!_.some(i.chatWebsites,{id:e.ChatWebsiteId})}function d(e){return moment(e).isBetween(moment().startOf("day").toString(),moment().endOf("day").toString())}i.config={format:"hh:mm:ss",unit:"seconds",trim:!1},i.inbound={waiting:0,talking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0},i.chatWebsites=a?_.keyBy(a.rows?a.rows:[],"id"):{},i.onSaveChatInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!0),r())},i.onUpdateChatInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!1),r())},t.on("chatInteraction:save",i.onSaveChatInteraction),t.on("chatInteraction:update",i.onUpdateChatInteraction),function(){if(0<Object.keys(i.chatWebsites).length)for(var e=0;e<n.rows.length;e+=1)if(l(n.rows[e])){var t=n.rows[e];o(t,!0),r()}}(),e.$on("$destroy",function(){t.removeAllListeners("chatInteraction:save"),t.removeAllListeners("chatInteraction:update")})}e.$inject=["$scope","socket","chatInteractions","chatWebsites"],angular.module("app.dashboards").controller("UserChatDashboardGeneralController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r){var l=this;function d(){s({queues:l.outboundQueues,rpcQueues:l.rpcQueues}).then(function(e){l.inbound=e})}function c(){o({rpcCampaigns:l.rpcCampaigns}).then(function(e){l.ivr=e})}l.outboundQueues=a?_.keyBy(a.rows?a.rows:[],"id"):{},l.rpcQueues=i?_.keyBy(i.rows?i.rows:[],"id"):{},l.rpcCampaigns=r?_.keyBy(r.rows?r.rows:[],"id"):{},l.ivr={originated:0,limitCalls:0},l.inbound={waiting:0,talking:0,pTalking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0,outboundDropCallsDayCallersExit:0,outboundDropCallsDayTimeout:0},l.onSaveQueue=function(e){l.outboundQueues[e.id]&&l.rpcQueues[e.id]&&(l.rpcQueues[e.id]=e)},l.onSaveCampaign=function(e){l.rpcCampaigns[e.id]&&(l.rpcCampaigns[e.id]=e)},n.onWithoutApply("voice_queue:save",l.onSaveQueue),l.interval=t(function(){d(),c()},999),n.onWithoutApply("campaign:save",l.onSaveCampaign),d(),c(),e.$on("$destroy",function(){n.removeAllListeners("voice_queue:save"),n.removeAllListeners("campaign:save"),l.interval&&t.cancel(l.interval)})}e.$inject=["$scope","$interval","socket","outboundQueues","rpcQueues","initializeRealtimeQueue","initializeRealtimeCampaign","rpcCampaigns"],angular.module("app.dashboards").controller("UserVoiceDashboardDialerController",e)}(),function(){"use strict";function e(e,t,n,a){var i=this,s=[];function o(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(s,e.id)||(i.inbound.talking+=1,s.push(e.id),!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),e.closed&&e.UserId&&(i.inbound.sumBillable+=moment(e.closedAt).diff(moment(e.read1stAt),i.config.unit),i.inbound.sumHoldTime+=moment(e.read1stAt).diff(moment(e.createdAt),i.config.unit),i.inbound.answered+=1,!t&&i.inbound.talking&&(i.inbound.talking-=1)),e.closed&&!e.UserId&&(i.inbound.unmanaged+=1,!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),t&&(i.inbound.total+=1)}function r(){i.inbound.abandonRate=Math.round((i.inbound.abandoned+i.inbound.unmanaged)/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.answerRate=Math.round(i.inbound.answered/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.avgHoldTime=moment.duration(Math.round(i.inbound.sumHoldTime/i.inbound.answered),i.config.unit).format(i.config.format,i.config),i.inbound.avgTalkTime=moment.duration(Math.round(i.inbound.sumBillable/i.inbound.answered),i.config.unit).format(i.config.format,i.config)}function l(e){return!!_.some(i.faxAccounts,{id:e.FaxAccountId})}function d(e){return moment(e).isBetween(moment().startOf("day").toString(),moment().endOf("day").toString())}i.config={format:"hh:mm:ss",unit:"seconds",trim:!1},i.inbound={waiting:0,talking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0},i.faxAccounts=a?_.keyBy(a.rows?a.rows:[],"id"):{},i.onSaveFaxInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!0),r())},i.onUpdateFaxInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!1),r())},t.on("faxInteraction:save",i.onSaveFaxInteraction),t.on("faxInteraction:update",i.onUpdateFaxInteraction),function(){if(0<Object.keys(i.faxAccounts).length)for(var e=0;e<n.rows.length;e+=1)if(l(n.rows[e])){var t=n.rows[e];o(t,!0),r()}}(),e.$on("$destroy",function(){t.removeAllListeners("faxInteraction:save"),t.removeAllListeners("faxInteraction:update")})}e.$inject=["$scope","socket","faxInteractions","faxAccounts"],angular.module("app.dashboards").controller("UserFaxDashboardGeneralController",e)}(),function(){"use strict";function e(e,t,n,a){var i=this,s=[];function o(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(s,e.id)||(i.inbound.talking+=1,s.push(e.id),!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),e.closed&&e.UserId&&(i.inbound.sumBillable+=moment(e.closedAt).diff(moment(e.read1stAt),i.config.unit),i.inbound.sumHoldTime+=moment(e.read1stAt).diff(moment(e.createdAt),i.config.unit),i.inbound.answered+=1,!t&&i.inbound.talking&&(i.inbound.talking-=1)),e.closed&&!e.UserId&&(i.inbound.unmanaged+=1,!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),t&&(i.inbound.total+=1)}function r(){i.inbound.abandonRate=Math.round((i.inbound.abandoned+i.inbound.unmanaged)/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.answerRate=Math.round(i.inbound.answered/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.avgHoldTime=moment.duration(Math.round(i.inbound.sumHoldTime/i.inbound.answered),i.config.unit).format(i.config.format,i.config),i.inbound.avgTalkTime=moment.duration(Math.round(i.inbound.sumBillable/i.inbound.answered),i.config.unit).format(i.config.format,i.config)}function l(e){return!!_.some(i.mailAccounts,{id:e.MailAccountId})}function d(e){return moment(e).isBetween(moment().startOf("day").toString(),moment().endOf("day").toString())}i.config={format:"hh:mm:ss",unit:"seconds",trim:!1},i.inbound={waiting:0,talking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0},i.mailAccounts=a?_.keyBy(a.rows?a.rows:[],"id"):{},i.onSaveMailInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!0),r())},i.onUpdateMailInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!1),r())},t.on("mailInteraction:save",i.onSaveMailInteraction),t.on("mailInteraction:update",i.onUpdateMailInteraction),function(){if(0<Object.keys(i.mailAccounts).length)for(var e=0;e<n.rows.length;e+=1)if(l(n.rows[e])){var t=n.rows[e];o(t,!0),r()}}(),e.$on("$destroy",function(){t.removeAllListeners("mailInteraction:save"),t.removeAllListeners("mailInteraction:update")})}e.$inject=["$scope","socket","mailInteractions","mailAccounts"],angular.module("app.dashboards").controller("UserMailDashboardGeneralController",e)}(),function(){"use strict";function e(e,t,n,a){var i=this,s=[];function o(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(s,e.id)||(i.inbound.talking+=1,s.push(e.id),!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),e.closed&&e.UserId&&(i.inbound.sumBillable+=moment(e.closedAt).diff(moment(e.read1stAt),i.config.unit),i.inbound.sumHoldTime+=moment(e.read1stAt).diff(moment(e.createdAt),i.config.unit),i.inbound.answered+=1,!t&&i.inbound.talking&&(i.inbound.talking-=1)),e.closed&&!e.UserId&&(i.inbound.unmanaged+=1,!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),t&&(i.inbound.total+=1)}function r(){i.inbound.abandonRate=Math.round((i.inbound.abandoned+i.inbound.unmanaged)/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.answerRate=Math.round(i.inbound.answered/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.avgHoldTime=moment.duration(Math.round(i.inbound.sumHoldTime/i.inbound.answered),i.config.unit).format(i.config.format,i.config),i.inbound.avgTalkTime=moment.duration(Math.round(i.inbound.sumBillable/i.inbound.answered),i.config.unit).format(i.config.format,i.config)}function l(e){return!!_.some(i.openchannelAccounts,{id:e.OpenchannelAccountId})}function d(e){return moment(e).isBetween(moment().startOf("day").toString(),moment().endOf("day").toString())}i.config={format:"hh:mm:ss",unit:"seconds",trim:!1},i.inbound={waiting:0,talking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0},i.openchannelAccounts=a?_.keyBy(a.rows?a.rows:[],"id"):{},i.onSaveOpenchannelInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!0),r())},i.onUpdateOpenchannelInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!1),r())},t.on("openchannelInteraction:save",i.onSaveOpenchannelInteraction),t.on("openchannelInteraction:update",i.onUpdateOpenchannelInteraction),function(){if(0<Object.keys(i.openchannelAccounts).length)for(var e=0;e<n.rows.length;e+=1)if(l(n.rows[e])){var t=n.rows[e];o(t,!0),r()}}(),e.$on("$destroy",function(){t.removeAllListeners("openchannelInteraction:save"),t.removeAllListeners("openchannelInteraction:update")})}e.$inject=["$scope","socket","openchannelInteractions","openchannelAccounts"],angular.module("app.dashboards").controller("UserOpenchannelDashboardGeneralController",e)}(),function(){"use strict";function e(e,t,n,a){var i=this,s=[];function o(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(s,e.id)||(i.inbound.talking+=1,s.push(e.id),!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),e.closed&&e.UserId&&(i.inbound.sumBillable+=moment(e.closedAt).diff(moment(e.read1stAt),i.config.unit),i.inbound.sumHoldTime+=moment(e.read1stAt).diff(moment(e.createdAt),i.config.unit),i.inbound.answered+=1,!t&&i.inbound.talking&&(i.inbound.talking-=1)),e.closed&&!e.UserId&&(i.inbound.unmanaged+=1,!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),t&&(i.inbound.total+=1)}function r(){i.inbound.abandonRate=Math.round((i.inbound.abandoned+i.inbound.unmanaged)/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.answerRate=Math.round(i.inbound.answered/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.avgHoldTime=moment.duration(Math.round(i.inbound.sumHoldTime/i.inbound.answered),i.config.unit).format(i.config.format,i.config),i.inbound.avgTalkTime=moment.duration(Math.round(i.inbound.sumBillable/i.inbound.answered),i.config.unit).format(i.config.format,i.config)}function l(e){return!!_.some(i.smsAccounts,{id:e.SmsAccountId})}function d(e){return moment(e).isBetween(moment().startOf("day").toString(),moment().endOf("day").toString())}i.config={format:"hh:mm:ss",unit:"seconds",trim:!1},i.inbound={waiting:0,talking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0},i.smsAccounts=a?_.keyBy(a.rows?a.rows:[],"id"):{},i.onSaveSmsInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!0),r())},i.onUpdateSmsInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!1),r())},t.on("smsInteraction:save",i.onSaveSmsInteraction),t.on("smsInteraction:update",i.onUpdateSmsInteraction),function(){if(0<Object.keys(i.smsAccounts).length)for(var e=0;e<n.rows.length;e+=1)if(l(n.rows[e])){var t=n.rows[e];o(t,!0),r()}}(),e.$on("$destroy",function(){t.removeAllListeners("smsInteraction:save"),t.removeAllListeners("smsInteraction:update")})}e.$inject=["$scope","socket","smsInteractions","smsAccounts"],angular.module("app.dashboards").controller("UserSmsDashboardGeneralController",e)}(),function(){"use strict";function e(n){var i=[],s=function(){var n=i[0],a={waiting:0,talking:0,pTalking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0,originated:0,outboundDropCallsDayCallersExit:0,outboundDropCallsDayTimeout:0};_.forIn(n.queues,function(e,t){n.rpcQueues[t]&&(a.waiting+=n.rpcQueues[t].waiting||0,a.talking+=(n.rpcQueues[t].talking||0)+(n.rpcQueues[t].pTalking||0),a.answered+=n.rpcQueues[t].answered||0,a.abandoned+=n.rpcQueues[t].abandoned||0,a.sumHoldTime+=n.rpcQueues[t].sumHoldTime||0,a.sumBillable+=n.rpcQueues[t].sumBillable||0,a.total+=n.rpcQueues[t].total||0,a.originated+=n.rpcQueues[t].originated||0,a.outboundDropCallsDayCallersExit+=n.rpcQueues[t].outboundDropCallsDayCallersExit||0,a.outboundDropCallsDayTimeout+=n.rpcQueues[t].outboundDropCallsDayTimeout||0)});var e=a.total-a.answered-a.abandoned;a.unmanaged=0<e?e:0,a.avgHoldTime=Math.round(0<a.total?a.sumHoldTime/a.total:0),a.avgHoldTime=new Date(1e3*a.avgHoldTime).toISOString().substr(11,8),a.avgTalkTime=Math.round(0<a.answered?a.sumBillable/a.answered:0),a.avgTalkTime=new Date(1e3*a.avgTalkTime).toISOString().substr(11,8),a.answerRate=Math.round((0<a.total?a.answered/a.total*100:0)*Math.pow(10,1))/Math.pow(10,1),a.abandonRate=Math.round((0<a.total?a.abandoned/a.total*100:0)*Math.pow(10,1))/Math.pow(10,1),a.outboundDropRate=Math.round((0<a.total?a.outboundDropCallsDayTimeout/a.total*100:0)*Math.pow(10,1))/Math.pow(10,1),a.outboundAbandonRate=Math.round((0<a.total?a.outboundDropCallsDayCallersExit/a.total*100:0)*Math.pow(10,1))/Math.pow(10,1),a.outboundanswerRate=0<100-a.outboundDropRate-a.outboundAbandonRate&&a.total?100-a.outboundDropRate-a.outboundAbandonRate:0,i.shift(),n.defer.resolve(a),0<i.length&&s()};return function(e){var t=n.defer();return i.push({queues:e.queues,rpcQueues:e.rpcQueues,defer:t}),1===i.length&&s(),t.promise}}function t(n){var i=[],s=function(){var n=i[0],a={originated:0,limitCalls:0};_.forIn(n.rpcCampaigns,function(e,t){n.rpcCampaigns[t]&&(a.originated+=n.rpcCampaigns[t].originated||0,a.limitCalls+=n.rpcCampaigns[t].limitCalls||0)}),i.shift(),n.defer.resolve(a),0<i.length&&s()};return function(e){var t=n.defer();return i.push({rpcCampaigns:e.rpcCampaigns,defer:t}),1===i.length&&s(),t.promise}}function n(e,o,t,n){var r=this;r.hasPermission=function(){return t.hasPermission(101)||t.hasRole("admin")},r.license=n,e.$on("$stateChangeSuccess",function(e,t,n,a,i){var s=[];r.license.voice&&s.push("app.dashboards.general.voice"),r.license.dialer&&s.push("app.dashboards.general.dialer"),r.license.chat&&s.push("app.dashboards.general.chat"),r.license.mail&&s.push("app.dashboards.general.mail"),r.license.messaging&&s.push("app.dashboards.general.sms"),r.license.openchannel&&s.push("app.dashboards.general.openchannel"),r.license.fax&&s.push("app.dashboards.general.fax"),r.selectedTab=_.indexOf(s,t.name),r.selectedTab<0&&(r.selectedTab=0)<s.length&&o.go(_.first(s))})}e.$inject=["$q"],t.$inject=["$q"],n.$inject=["$scope","$state","Auth","license"],angular.module("app.dashboards").filter("secToTime",function(){return function(e){return new Date(1e3*e).toISOString().substr(11,8)}}).factory("initializeRealtimeQueue",e).factory("initializeRealtimeCampaign",t).controller("UserDashboardGeneralController",n)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;function r(){s({queues:o.inboundQueues,rpcQueues:o.rpcQueues}).then(function(e){o.inbound=e})}o.inboundQueues=n?_.keyBy(n.rows?n.rows:[],"id"):{},o.rpcQueues=a?_.keyBy(a.rows?a.rows:[],"id"):{},o.inbound={waiting:0,talking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0},o.outbound=i||{answered:0,sumBillable:0,sumDuration:0,sumHoldTime:0,total:0},o.onSaveQueue=function(e){o.inboundQueues[e.id]&&o.rpcQueues[e.id]&&(o.rpcQueues[e.id]=e,r())},o.onSaveOutbound=function(e){o.outbound=e},t.on("voice_queue:save",o.onSaveQueue),t.on("voice_outbound:save",o.onSaveOutbound),r(),e.$on("$destroy",function(){t.removeAllListeners("voice_queue:save"),t.removeAllListeners("voice_outbound:save")})}e.$inject=["$scope","socket","inboundQueues","rpcQueues","outbound","initializeRealtimeQueue"],angular.module("app.dashboards").controller("UserVoiceDashboardGeneralController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="FAX.EDIT_FAXACCOUNT",g.faxAccount=angular.copy(l),g.faxAccounts=r,g.newFaxAccount=!1,g.faxAccount||(g.faxAccount={waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},g.title="FAX.NEW_FAXACCOUNT",g.newFaxAccount=!0),t.params.id&&(g.faxAccount.FaxAccountId=t.params.id),g.addNewFaxAccount=function(){g.errors=[],d.faxAccount.addAccountApplications(g.faxAccount).$promise.then(function(e){g.faxAccounts.unshift(e.toJSON()),o.success({title:"FaxAccount properly created",msg:g.faxAccount.name?g.faxAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.faxAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveFaxAccount=function(){g.errors=[],d.faxAccount.updateAccountApplications(g.faxAccount).$promise.then(function(e){var t=_.find(g.faxAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FaxAccount properly saved!",msg:g.faxAccount.name?g.faxAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.faxAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteFaxAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The faxAccount will be deleted.").ariaLabel("Delete FaxAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.faxAccount.delete({id:g.faxAccount.id}).$promise.then(function(){_.remove(g.faxAccounts,{id:g.faxAccount.id}),o.success({title:"FaxAccount properly deleted!",msg:(g.faxAccount.name||"faxAccount")+" has been deleted!"}),v(g.faxAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.faxAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.trunks=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.trunks=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.trunks,{id:e.resourceId})}),n=null;if(g.faxAccount&&(n=_.find(g.trunks,{id:Number(g.faxAccount.TrunkId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.trunks,{id:n.id});a.canSelect=!1,t.push(a)}g.trunks=t})}else{var n=[],a=null;g.faxAccount&&(a=_.find(g.trunks,{id:Number(g.faxAccount.TrunkId)}));for(var i=0;i<g.trunks.length;i++)a&&g.trunks[i].id===a.id&&(g.trunks[i].canSelect=!1,n.push(g.trunks[i]));g.trunks=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.hasRole("admin")?d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.lists,{id:e.resourceId})}),n=null;if(g.faxAccount&&(n=_.find(g.lists,{id:Number(g.faxAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.lists,{id:n.id});a.canSelect=!1,t.push(a)}g.lists=t})}else{var n=[],a=null;g.faxAccount&&(a=_.find(g.lists,{id:Number(g.faxAccount.ListId)}));for(var i=0;i<g.lists.length;i++)a&&g.lists[i].id===a.id&&(g.lists[i].canSelect=!1,n.push(g.lists[i]));g.lists=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","faxAccounts","faxAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.fax").controller("CreateOrEditFaxAccountDialogController",e)}(),function(){"use strict";function e(o,i,a,s,e){var r=this;function t(e,t){if(r.faxAccountApps.rows.length){var n=r.faxAccountApps.rows[t]?r.faxAccountApps.rows[t]:r.faxAccountApps.rows[0];i.show({controller:"EditFaxAccountApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccountApp:n,faxAccount:r.faxAccount,crudPermissions:r.crudPermissions}}).then(function(e){e&&(e.id?r.faxAccountApps.rows[t]=e:r.faxAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function l(){for(var e=1,t=[],n=0;n<r.faxAccountApps.rows.length;n++,0){var a=r.faxAccountApps.rows[n],i=[],s=[];a.intervals="*,*,*,*"!==a.interval?[a.interval]:a.IntervalId?_.map(_.filter(r.intervals.rows,{IntervalId:a.IntervalId}),"interval"):[],a.context=r.faxAccount.context,a.exten=r.faxAccount.exten,a.type&&(a.type=a.type.toLowerCase()),a.priority=i.length?_.last(i).priority+1:e,e=(s.length?_.last(s).priority:a.priority)+1,t=_.concat(t,i,[a],s)}o.faxAccount.addApplications({id:r.faxAccount.id},_.sortBy(t,"priority")).$promise.then(function(e){r.faxAccountApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){r.faxAccountApps=e||{count:0,rows:[]}}r.currentUser=e.getCurrentUser(),r.faxAccount={},r.faxAccountApps={count:0,rows:[]},r.selectedFaxAccountApps=[],r.crudPermissions,r.query={sort:"priority"},r.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",types:["always","custom","list"],fields:[],isApp:!1},{app:"noop",appType:"noop",type:"noop",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,fields:[{title:"Value",name:"value",type:"text",param:0}]},{app:"system",appType:"system",type:"system",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,extraApi:[{name:"variables",field:{name:"variable",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1012}}],fields:[{title:"Command",name:"command",type:"text",required:!0,param:0},{title:"Variable",name:"variable",type:"apiselect",values:"variables",value:"variable.name",option:"variable.name",defaultValues:[{value:"''",option:"None"}],defaultValue:"''",param:1}]},{app:"gotop",appType:"gotop",type:"goto",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Priority",name:"priority",type:"number",required:!0,min:0,param:0}]},{app:"gotoif",appType:"gotoif",type:"gotoif",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Condition",name:"condition",type:"text",required:!0,param:0},{title:"truepriority",name:"truepriority",type:"number",min:1,required:!0,param:1},{title:"falsepriority",name:"falsepriority",type:"number",min:1,required:!0,param:2}]},{app:"queue",appType:"queue",foreignKey:"FaxQueueId",type:"queue",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"queues",field:{name:"queue",key:"name"},route:"faxQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:901}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",defaultValue:300,required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,defaultValue:300,required:!0,param:1}]},{app:"agent",appType:"agent",type:"agent",foreignKey:"UserId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"agents",field:{name:"agent",key:"name"},route:"user",filters:{fields:"id,name",sort:"name",role:"agent",nolimit:!0},permissions:{section:202}}],fields:[{title:"Agent",name:"agent",type:"apiselect",values:"agents",value:"agent.name",option:"agent.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:30,param:1}]},{app:"close",appType:"close",type:"close",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Disposition",name:"disposition",type:"text",required:!0,param:0}]},{app:"tag",appType:"tag",type:"tag",foreignKey:"TagId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"tags",field:{name:"tag",key:"name"},route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1008}}],fields:[{title:"Tag",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",required:!0,param:0}]}],["app"]),{isApp:!1}),r.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},r.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){l()}},r.init=function(e,t){r.faxAccount=e,r.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},r.applications.disabled=!r.crudPermissions.canEdit,r.query.id=e.id,r.query.isApp=!0,r.query.nolimit=!0,r.getFaxAccountApps(),r.getIntervals()},r.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){r.faxAccountApps.rows.splice(t,1),l()},function(){console.log("CANCEL")})},r.getFaxAccountApps=function(){r.promise=o.faxAccount.getApplications(r.query,n).$promise},r.editFaxAccountApp=t,r.editInterval=function(e,t){if(r.faxAccountApps.rows.length){var n=r.faxAccountApps.rows[t]?r.faxAccountApps.rows[t]:r.faxAccountApps.rows[0];i.show({controller:"EditFaxAccountAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:r.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,l())})}},r.deleteFaxAccountApp=function(e){_.remove(r.faxAccountApps.rows,{id:e.id}),l(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},r.deleteSelectedFaxAccountApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+r.selectedFaxAccountApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){r.selectedFaxAccountApps.forEach(function(e){_.remove(r.faxAccountApps.rows,{id:e.id})}),r.selectedFaxAccountApps=[],l()})},r.rewriteRouting=l,r.getIntervals=function(){return o.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){r.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.fax").controller("FaxAccountActionsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.faxAccount.getAgents({id:c.faxAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserFaxAccount?"penalty "+e.UserFaxAccount.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.faxAccount=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.faxAccount.removeAgents({id:c.faxAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.faxAccount.addAgents({id:c.faxAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("FAX.ALL_AGENTS"),labelSelected:r.instant("FAX.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","faxAccount","faxAccounts","realtime","$translate","Auth","crudPermissions"],angular.module("app.fax").controller("FaxAccountagentaddController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.agent=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agent.appdata)switch(l.agent.appType?l.agent.appType.toLowerCase():l.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agent.appdata.split(",");l.agent.key=d[0],l.agent.language=d[1],l.agent.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agent.appdata.split(",");l.agent.accesskeyid=d[0],l.agent.secretaccesskey=d[1],l.agent.lexregion=d[2],l.agent.botname=d[3],l.agent.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agent.appdata.split(",");l.agent.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agent.text=d.slice(1,d.length).join(",");break;case"message":l.agent.text=l.agent.appdata;break;case"set":l.agent.name=l.agent.appdata.split("=")[0],l.agent.value=l.agent.appdata.split("=")[1];break;case"agi":l.agent.project=l.agent.appdata;break;default:var c=l.agent.appdata.split(",");l.agent.agent=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.agent.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.agent.timeout=30;function m(e){t.hide(e)}l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outbounddial"===l.agent.appType.toLowerCase()&&(l.agent.prefix=l.agent.phone?l.agent.phone.split("$")[0]:void 0,l.agent.callerId=l.agent.callerID?"CALLERID(all)="+l.agent.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outboundDial"===l.agent.appType&&(l.agent.phone=i.cutdigits?(l.agent.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agent.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agent.options+="U(xcally-mixmonitor-context)"):l.agent.options=l.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.agents,{name:l.agent.agent});t&&(l.agent.UserId=t.id);if(l.agent.appType&&"custom"===l.agent.appType);else switch((l.agent.app||l.agent.appType).toLowerCase()){case"set":l.agent.appdata=l.agent.name+"="+l.agent.value;break;case"custom":break;default:e[0]=l.agent.agent,e[1]=l.agent.timeout,l.agent.appdata=e.join(",")}m(l.agent)},l.closeDialog=m,o.hasRole("admin")?s.user.get({fields:"id,name",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){l.agents=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.user.get({fields:"id,name",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){l.agents=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.agents,{id:e.resourceId})}),n=null;if(l.agent&&(n=_.find(l.agents,{name:l.agent.agent})),n&&!_.some(t,["id",n.id])){var a=_.find(l.agents,{id:n.id});a.canSelect=!1,t.push(a)}l.agents=t})}else{var n=[],a=null;l.agent&&(a=_.find(l.agents,{name:l.agent.agent}));for(var i=0;i<l.agents.length;i++)a&&l.agents[i].id===a.id&&(l.agents[i].canSelect=!1,n.push(l.agents[i]));l.agents=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.close=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.close.appdata)switch(l.close.appType?l.close.appType.toLowerCase():l.close.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.close.appdata.split(",");l.close.key=d[0],l.close.language=d[1],l.close.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.close.appdata.split(",");l.close.accesskeyid=d[0],l.close.secretaccesskey=d[1],l.close.lexregion=d[2],l.close.botname=d[3],l.close.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.close.appdata.split(",");l.close.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.close.text=d.slice(1,d.length).join(",");break;case"message":l.close.text=l.close.appdata;break;case"set":l.close.name=l.close.appdata.split("=")[0],l.close.value=l.close.appdata.split("=")[1];break;case"agi":l.close.project=l.close.appdata;break;default:var c=l.close.appdata.split(",");l.close.disposition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outbounddial"===l.close.appType.toLowerCase()&&(l.close.prefix=l.close.phone?l.close.phone.split("$")[0]:void 0,l.close.callerId=l.close.callerID?"CALLERID(all)="+l.close.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outboundDial"===l.close.appType&&(l.close.phone=i.cutdigits?(l.close.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.close.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.close.options+="U(xcally-mixmonitor-context)"):l.close.options=l.close.options.replace("U(xcally-mixmonitor-context)",""));if(l.close.appType&&"custom"===l.close.appType);else switch((l.close.app||l.close.appType).toLowerCase()){case"set":l.close.appdata=l.close.name+"="+l.close.value;break;case"custom":break;default:e[0]=l.close.disposition,l.close.appdata=e.join(",")}m(l.close)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotoif=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotoif.appdata)switch(l.gotoif.appType?l.gotoif.appType.toLowerCase():l.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotoif.appdata.split(",");l.gotoif.key=d[0],l.gotoif.language=d[1],l.gotoif.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotoif.appdata.split(",");l.gotoif.accesskeyid=d[0],l.gotoif.secretaccesskey=d[1],l.gotoif.lexregion=d[2],l.gotoif.botname=d[3],l.gotoif.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotoif.appdata.split(",");l.gotoif.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotoif.text=d.slice(1,d.length).join(",");break;case"message":l.gotoif.text=l.gotoif.appdata;break;case"set":l.gotoif.name=l.gotoif.appdata.split("=")[0],l.gotoif.value=l.gotoif.appdata.split("=")[1];break;case"agi":l.gotoif.project=l.gotoif.appdata;break;default:var c=l.gotoif.appdata.split(",");l.gotoif.condition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.gotoif.truepriority=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.gotoif.falsepriority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outbounddial"===l.gotoif.appType.toLowerCase()&&(l.gotoif.prefix=l.gotoif.phone?l.gotoif.phone.split("$")[0]:void 0,l.gotoif.callerId=l.gotoif.callerID?"CALLERID(all)="+l.gotoif.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outboundDial"===l.gotoif.appType&&(l.gotoif.phone=i.cutdigits?(l.gotoif.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotoif.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotoif.options+="U(xcally-mixmonitor-context)"):l.gotoif.options=l.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotoif.appType&&"custom"===l.gotoif.appType);else switch((l.gotoif.app||l.gotoif.appType).toLowerCase()){case"set":l.gotoif.appdata=l.gotoif.name+"="+l.gotoif.value;break;case"custom":break;default:e[0]=l.gotoif.condition,e[1]=l.gotoif.truepriority,e[2]=l.gotoif.falsepriority,l.gotoif.appdata=e.join(",")}m(l.gotoif)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotop.appdata)switch(l.gotop.appType?l.gotop.appType.toLowerCase():l.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotop.appdata.split(",");l.gotop.key=d[0],l.gotop.language=d[1],l.gotop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotop.appdata.split(",");l.gotop.accesskeyid=d[0],l.gotop.secretaccesskey=d[1],l.gotop.lexregion=d[2],l.gotop.botname=d[3],l.gotop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotop.appdata.split(",");l.gotop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotop.text=d.slice(1,d.length).join(",");break;case"message":l.gotop.text=l.gotop.appdata;break;case"set":l.gotop.name=l.gotop.appdata.split("=")[0],l.gotop.value=l.gotop.appdata.split("=")[1];break;case"agi":l.gotop.project=l.gotop.appdata;break;default:var c=l.gotop.appdata.split(",");l.gotop.priority=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outbounddial"===l.gotop.appType.toLowerCase()&&(l.gotop.prefix=l.gotop.phone?l.gotop.phone.split("$")[0]:void 0,l.gotop.callerId=l.gotop.callerID?"CALLERID(all)="+l.gotop.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outboundDial"===l.gotop.appType&&(l.gotop.phone=i.cutdigits?(l.gotop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotop.options+="U(xcally-mixmonitor-context)"):l.gotop.options=l.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotop.appType&&"custom"===l.gotop.appType);else switch((l.gotop.app||l.gotop.appType).toLowerCase()){case"set":l.gotop.appdata=l.gotop.name+"="+l.gotop.value;break;case"custom":break;default:e[0]=l.gotop.priority,l.gotop.appdata=e.join(",")}m(l.gotop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditFaxAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.noop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.noop.appdata)switch(l.noop.appType?l.noop.appType.toLowerCase():l.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.noop.appdata.split(",");l.noop.key=d[0],l.noop.language=d[1],l.noop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.noop.appdata.split(",");l.noop.accesskeyid=d[0],l.noop.secretaccesskey=d[1],l.noop.lexregion=d[2],l.noop.botname=d[3],l.noop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.noop.appdata.split(",");l.noop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.noop.text=d.slice(1,d.length).join(",");break;case"message":l.noop.text=l.noop.appdata;break;case"set":l.noop.name=l.noop.appdata.split("=")[0],l.noop.value=l.noop.appdata.split("=")[1];break;case"agi":l.noop.project=l.noop.appdata;break;default:var c=l.noop.appdata.split(",");l.noop.value=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outbounddial"===l.noop.appType.toLowerCase()&&(l.noop.prefix=l.noop.phone?l.noop.phone.split("$")[0]:void 0,l.noop.callerId=l.noop.callerID?"CALLERID(all)="+l.noop.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outboundDial"===l.noop.appType&&(l.noop.phone=i.cutdigits?(l.noop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.noop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.noop.options+="U(xcally-mixmonitor-context)"):l.noop.options=l.noop.options.replace("U(xcally-mixmonitor-context)",""));if(l.noop.appType&&"custom"===l.noop.appType);else switch((l.noop.app||l.noop.appType).toLowerCase()){case"set":l.noop.appdata=l.noop.name+"="+l.noop.value;break;case"custom":break;default:e[0]=l.noop.value,l.noop.appdata=e.join(",")}m(l.noop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.queue.queue=300,l.queue.timeout=300;function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.queues,{name:l.queue.queue});t&&(l.queue[_.capitalize("fax")+"QueueId"]=t.id);if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.timeout,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.faxQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.faxQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:901}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.system=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.system.appdata)switch(l.system.appType?l.system.appType.toLowerCase():l.system.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.system.appdata.split(",");l.system.key=d[0],l.system.language=d[1],l.system.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.system.appdata.split(",");l.system.accesskeyid=d[0],l.system.secretaccesskey=d[1],l.system.lexregion=d[2],l.system.botname=d[3],l.system.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.system.appdata.split(",");l.system.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.system.text=d.slice(1,d.length).join(",");break;case"message":l.system.text=l.system.appdata;break;case"set":l.system.name=l.system.appdata.split("=")[0],l.system.value=l.system.appdata.split("=")[1];break;case"agi":l.system.project=l.system.appdata;break;default:var c=l.system.appdata.split(",");l.system.command=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.system.variable=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.system.variable="";function m(e){t.hide(e)}l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outbounddial"===l.system.appType.toLowerCase()&&(l.system.prefix=l.system.phone?l.system.phone.split("$")[0]:void 0,l.system.callerId=l.system.callerID?"CALLERID(all)="+l.system.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outboundDial"===l.system.appType&&(l.system.phone=i.cutdigits?(l.system.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.system.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.system.options+="U(xcally-mixmonitor-context)"):l.system.options=l.system.options.replace("U(xcally-mixmonitor-context)",""));if(l.system.appType&&"custom"===l.system.appType);else switch((l.system.app||l.system.appType).toLowerCase()){case"set":l.system.appdata=l.system.name+"="+l.system.value;break;case"custom":break;default:e[0]=l.system.command,e[1]=l.system.variable,l.system.appdata=e.join(",")}m(l.system)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.system&&(n=_.find(l.variables,{name:l.system.variable})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.system&&(a=_.find(l.variables,{name:l.system.variable}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.tag=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.tag.appdata)switch(l.tag.appType?l.tag.appType.toLowerCase():l.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.tag.appdata.split(",");l.tag.key=d[0],l.tag.language=d[1],l.tag.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.tag.appdata.split(",");l.tag.accesskeyid=d[0],l.tag.secretaccesskey=d[1],l.tag.lexregion=d[2],l.tag.botname=d[3],l.tag.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.tag.appdata.split(",");l.tag.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.tag.text=d.slice(1,d.length).join(",");break;case"message":l.tag.text=l.tag.appdata;break;case"set":l.tag.name=l.tag.appdata.split("=")[0],l.tag.value=l.tag.appdata.split("=")[1];break;case"agi":l.tag.project=l.tag.appdata;break;default:var c=l.tag.appdata.split(",");l.tag.tag=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outbounddial"===l.tag.appType.toLowerCase()&&(l.tag.prefix=l.tag.phone?l.tag.phone.split("$")[0]:void 0,l.tag.callerId=l.tag.callerID?"CALLERID(all)="+l.tag.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outboundDial"===l.tag.appType&&(l.tag.phone=i.cutdigits?(l.tag.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.tag.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.tag.options+="U(xcally-mixmonitor-context)"):l.tag.options=l.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.tags,{name:l.tag.tag});t&&(l.tag.TagId=t.id);if(l.tag.appType&&"custom"===l.tag.appType);else switch((l.tag.app||l.tag.appType).toLowerCase()){case"set":l.tag.appdata=l.tag.name+"="+l.tag.value;break;case"custom":break;default:e[0]=l.tag.tag,l.tag.appdata=e.join(",")}m(l.tag)},l.closeDialog=m,o.hasRole("admin")?s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1008}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.tags,{id:e.resourceId})}),n=null;if(l.tag&&(n=_.find(l.tags,{name:l.tag.tag})),n&&!_.some(t,["id",n.id])){var a=_.find(l.tags,{id:n.id});a.canSelect=!1,t.push(a)}l.tags=t})}else{var n=[],a=null;l.tag&&(a=_.find(l.tags,{name:l.tag.tag}));for(var i=0;i<l.tags.length;i++)a&&l.tags[i].id===a.id&&(l.tags[i].canSelect=!1,n.push(l.tags[i]));l.tags=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtags",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountApptagDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.faxAccount={},c.faxAccountFaxDispositions={count:0,rows:[]},c.selectedFaxAccountFaxDispositions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e,t){c.faxAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.faxAccount.id,c.query.FaxAccountId=c.faxAccount.id,c.getFaxAccountFaxDispositions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the faxDisposition?").htmlContent("<b>"+(e.name||"faxDisposition")+"</b> will be deleted.").ariaLabel("delete faxDisposition").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getFaxAccountFaxDispositions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.faxAccount.getDispositions(c.query,p).$promise},c.createOrEditFaxAccountFaxDisposition=function(e,t){s.show({controller:"CreateOrEditFaxDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/faxDispositions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccount:c.faxAccount,faxDisposition:t,faxDispositions:c.faxAccountFaxDispositions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedFaxAccountFaxDispositions=function(){var e=angular.copy(c.selectedFaxAccountFaxDispositions);return c.selectedFaxAccountFaxDispositions=[],e},c.deleteFaxAccountFaxDisposition=g,c.deleteSelectedFaxAccountFaxDispositions=function(e){var t=s.confirm().title("Are you sure want to delete the selected faxDispositions?").htmlContent("<b>"+c.selectedFaxAccountFaxDispositions.length+" selected</b> will be deleted.").ariaLabel("delete faxDispositions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedFaxAccountFaxDispositions.forEach(function(e){g(e)}),c.selectedFaxAccountFaxDispositions=[]})};var m=!0,u=1;function p(e){c.faxAccountFaxDispositions=e||{count:0,rows:[]}}function g(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(c.faxAccountFaxDispositions.rows,{id:e.id}),c.faxAccountFaxDispositions.count-=1,c.faxAccountFaxDispositions.rows.length||c.getFaxAccountFaxDispositions(),r.success({title:"FaxDisposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETfaxAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getFaxAccountFaxDispositions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.fax").controller("FaxAccountFaxDispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="FAX.EDIT_FAXDISPOSITION",g.faxDisposition=angular.copy(l),g.faxDispositions=r,g.newFaxDisposition=!1,g.faxDisposition||(g.faxDisposition={},g.title="FAX.NEW_FAXDISPOSITION",g.newFaxDisposition=!0),t.params.id&&(g.faxDisposition.FaxAccountId=t.params.id),g.addNewFaxDisposition=function(){g.errors=[],d.disposition.save(g.faxDisposition).$promise.then(function(e){g.faxDispositions.unshift(e.toJSON()),o.success({title:"FaxDisposition properly created",msg:g.faxDisposition.name?g.faxDisposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveFaxDisposition=function(){g.errors=[],d.disposition.update({id:g.faxDisposition.id},g.faxDisposition).$promise.then(function(e){var t=_.find(g.faxDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FaxDisposition properly saved!",msg:g.faxDisposition.name?g.faxDisposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteFaxDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The faxDisposition will be deleted.").ariaLabel("Delete FaxDisposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.faxDisposition.id}).$promise.then(function(){_.remove(g.faxDispositions,{id:g.faxDisposition.id}),o.success({title:"FaxDisposition properly deleted!",msg:(g.faxDisposition.name||"faxDisposition")+" has been deleted!"}),v(g.faxDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","faxDispositions","faxDisposition","api","Auth","license","setting","crudPermissions"],angular.module("app.fax").controller("CreateOrEditFaxDispositionDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.faxAccount={},c.faxAccountInteractions={count:0,rows:[]},c.selectedFaxAccountInteractions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,Contact.firstName,Owner.name,closedAt,disposition,note,UserId,ContactId,FaxAccountId,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e,t){c.faxAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.faxAccount.id,c.getFaxAccountInteractions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the interaction?").htmlContent("<b>"+(e.name||"interaction")+"</b> will be deleted.").ariaLabel("delete interaction").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.faxInteractionDownload=function(s,e,t){return l.faxInteraction.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="interaction"+s.id,a=new Blob(t,{type:e.type});n="fax-interaction"+s.id+".zip";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getFaxAccountInteractions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.faxAccount.getInteractions(c.query,p).$promise},c.createOrEditFaxAccountInteraction=function(e,t){s.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/interactions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccount:c.faxAccount,interaction:t,interactions:c.faxAccountInteractions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.spyfaxInteraction=function(e,n){s.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,onShowing:function(e,t){e.vm.init({id:1,channel:"fax",interaction:n,spy:!0},a.$parent.vm.setting)}})},c.exportSelectedFaxAccountInteractions=function(){var e=angular.copy(c.selectedFaxAccountInteractions);return c.selectedFaxAccountInteractions=[],e},c.deleteFaxAccountInteraction=g,c.deleteSelectedFaxAccountInteractions=function(e){var t=s.confirm().title("Are you sure want to delete the selected interactions?").htmlContent("<b>"+c.selectedFaxAccountInteractions.length+" selected</b> will be deleted.").ariaLabel("delete interactions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedFaxAccountInteractions.forEach(function(e){g(e)}),c.selectedFaxAccountInteractions=[]})};var m=!0,u=1;function p(e){c.faxAccountInteractions=e||{count:0,rows:[]}}function g(e){l.faxInteraction.delete({id:e.id}).$promise.then(function(){_.remove(c.faxAccountInteractions.rows,{id:e.id}),c.faxAccountInteractions.count-=1,c.faxAccountInteractions.rows.length||c.getFaxAccountInteractions(),r.success({title:"Interaction deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETfaxAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}a.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getFaxAccountInteractions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.fax").controller("FaxAccountInteractionsController",e)}(),function(){"use strict";function e(n,e,a,i,s,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.faxAccount=c||n.params.faxAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.gotogoto=function(e,t){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:910}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.fax.realtime.accounts",{}):l.info({title:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.fax.realtime.accounts",{})}},u.agentadddialog=function(e,t){a.show({controller:"FaxAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxAccount:e,faxAccounts:u.faxAccounts?u.faxAccounts.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoFaxAccounts=function(){n.go("app.fax.faxAccounts")},u.saveFaxAccount=function(){r.faxAccount.updateAccountApplications(u.faxAccount).$promise.then(function(){l.success({title:"FaxAccount updated!",msg:u.faxAccount.name?u.faxAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.trunks,{id:e.resourceId})}),n=null;if(u.faxAccount&&(n=_.find(u.trunks,{id:Number(u.faxAccount.TrunkId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.trunks,{id:n.id});a.canSelect=!1,t.push(a)}u.trunks=t})}else{var n=[],a=null;u.faxAccount&&(a=_.find(u.trunks,{id:Number(u.faxAccount.TrunkId)}));for(var i=0;i<u.trunks.length;i++)a&&u.trunks[i].id===a.id&&(u.trunks[i].canSelect=!1,n.push(u.trunks[i]));u.trunks=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.lists,{id:e.resourceId})}),n=null;if(u.faxAccount&&(n=_.find(u.lists,{id:Number(u.faxAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.lists,{id:n.id});a.canSelect=!1,t.push(a)}u.lists=t})}else{var n=[],a=null;u.faxAccount&&(a=_.find(u.lists,{id:Number(u.faxAccount.ListId)}));for(var i=0;i<u.lists.length;i++)a&&u.lists[i].id===a.id&&(u.lists[i].canSelect=!1,n.push(u.lists[i]));u.lists=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","faxAccount","userProfileSection"],angular.module("app.fax").controller("FaxAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.faxAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="faxAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedFaxAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,key,headerinfo,TrunkId,localstationid,ListId,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},b.arrayecm=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayminrate=_.keyBy([{option:"2400",value:"'2400'"},{option:"4800",value:"'4800'"},{option:"7200",value:"'7200'"},{option:"9600",value:"'9600'"},{option:"12000",value:"'12000'"},{option:"14400",value:"'14400'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraymaxrate=_.keyBy([{option:"2400",value:"'2400'"},{option:"4800",value:"'4800'"},{option:"7200",value:"'7200'"},{option:"9600",value:"'9600'"},{option:"12000",value:"'12000'"},{option:"14400",value:"'14400'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytech=_.keyBy([{option:"SIP",value:"'SIP'"},{option:"IAX",value:"'IAX'"},{option:"DADHI",value:"'DADHI'"},{option:"KHOMP",value:"'KHOMP'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.fax.faxAccounts.edit",{id:e.id,faxAccount:e,crudPermissions:b.crudPermissions})},b.interactionsgoto=function(e,t){n.go("app.fax.faxAccounts.edit",{id:e.id,tab:5})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:910}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.fax.realtime.accounts",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.fax.realtime.accounts",{})}},b.agentadddialog=function(e,t){i.show({controller:"FaxAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxAccount:e,faxAccounts:b.faxAccounts?b.faxAccounts.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("faxAccount")+"?").htmlContent("<b>"+(e.name||"faxAccount")+"</b> will be deleted.").ariaLabel("delete faxAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getFaxAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.faxAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="FaxAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditFaxAccount=function(e,t){i.show({controller:"CreateOrEditFaxAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccount:t,faxAccounts:b.faxAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteFaxAccount=S,b.exportSelectedFaxAccounts=function(){var e=angular.copy(b.selectedFaxAccounts);return b.selectedFaxAccounts=[],e},b.deleteSelectedFaxAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected faxAccounts?").htmlContent("<b>"+b.selectedFaxAccounts.length+" selected</b> will be deleted.").ariaLabel("delete FaxAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedFaxAccounts.forEach(function(e){S(e)}),b.selectedFaxAccounts=[]})},b.deselectFaxAccounts=function(){b.selectedFaxAccounts=[]},b.selectAllFaxAccounts=function(){b.selectedFaxAccounts=b.faxAccounts.rows},g.hasRole("admin")?m.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.trunks=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.trunks=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(b.trunks,{id:e.resourceId})}),a=null;a=[],b.faxAccounts.rows.forEach(function(e){var t=_.find(b.trunks,{id:Number(e.TrunkId)});a.push(t)}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(b.trunks,{id:e.id});t.canSelect=!1,n.push(t)}}),b.trunks=n})}else{var n=[],a=[];b.faxAccounts.rows.forEach(function(e){var t=_.find(b.trunks,{id:Number(e.TrunkId)});a.push(t)});for(var i=0;i<b.trunks.length;i++){_.some(a,{id:b.trunks[i].id})&&(b.trunks[i].canSelect=!1,n.push(b.trunks[i]))}b.trunks=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),g.hasRole("admin")?m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.lists,{id:e.resourceId})}),n=null;if(b.faxAccount&&(n=_.find(b.lists,{id:Number(b.faxAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.lists,{id:n.id});a.canSelect=!1,t.push(a)}b.lists=t})}else{var n=[],a=null;b.faxAccount&&(a=_.find(b.lists,{id:Number(b.faxAccount.ListId)}));for(var i=0;i<b.lists.length;i++)a&&b.lists[i].id===a.id&&(b.lists[i].canSelect=!1,n.push(b.lists[i]));b.lists=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.faxAccounts=e||{count:0,rows:[]}}function S(e){m.faxAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.faxAccounts.rows,{id:e.id}),b.faxAccounts.count-=1,b.faxAccounts.rows.length||b.getFaxAccounts(),p.success({title:_.startCase("FaxAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEfaxAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEfaxAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getFaxAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","faxAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.fax").controller("FaxAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="FAX.EDIT_FAXQUEUE",g.faxQueue=angular.copy(l),g.faxQueues=r,g.newFaxQueue=!1,g.faxQueue||(g.faxQueue={strategy:"beepall",timeout:10},g.title="FAX.NEW_FAXQUEUE",g.newFaxQueue=!0),g.addNewFaxQueue=function(){g.errors=[],d.faxQueue.save(g.faxQueue).$promise.then(function(e){g.faxQueues.unshift(e.toJSON()),o.success({title:"FaxQueue properly created",msg:g.faxQueue.name?g.faxQueue.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.faxQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveFaxQueue=function(){g.errors=[],d.faxQueue.update({id:g.faxQueue.id},g.faxQueue).$promise.then(function(e){var t=_.find(g.faxQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FaxQueue properly saved!",msg:g.faxQueue.name?g.faxQueue.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.faxQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteFaxQueue=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The faxQueue will be deleted.").ariaLabel("Delete FaxQueue").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.faxQueue.delete({id:g.faxQueue.id}).$promise.then(function(){_.remove(g.faxQueues,{id:g.faxQueue.id}),o.success({title:"FaxQueue properly deleted!",msg:(g.faxQueue.name||"faxQueue")+" has been deleted!"}),v(g.faxQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.faxQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","faxQueues","faxQueue","api","Auth","license","setting","crudPermissions"],angular.module("app.fax").controller("CreateOrEditFaxQueueDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.faxQueue.getAgents({id:c.faxQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserFaxQueue?"penalty "+e.UserFaxQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.faxQueue=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.faxQueue.removeAgents({id:c.faxQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.faxQueue.addAgents({id:c.faxQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("FAX.ALL_AGENTS"),labelSelected:r.instant("FAX.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","faxQueue","faxQueues","realtime","$translate","Auth","crudPermissions"],angular.module("app.fax").controller("FaxQueueagentaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r){var l=this;function d(){return a(function(n,t){return a(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.faxQueue.getTeams({id:l.faxQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.faxQueue=t,l.crudPermissions=r,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("FAX.ALL_TEAMS"),labelSelected:n.instant("FAX.SELECTED_TEAMS"),transferCallback:function(e,t){var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.faxQueue.removeTeams({id:l.faxQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.faxQueue.addTeams({id:l.faxQueue.id,teams:_.map(n,function(e){return _.pick(e,["id"])})}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),i.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","faxQueue","$translate","Auth","crudPermissions"],angular.module("app.fax").controller("FaxQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.faxQueue=c||e.params.faxQueue||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.teamadddialog=function(e,t){n.show({controller:"FaxQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/teamadd/teamadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxQueue:e,faxQueues:u.faxQueues?u.faxQueues.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){n.show({controller:"FaxQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxQueue:e,faxQueues:u.faxQueues?u.faxQueues.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoFaxQueues=function(){e.go("app.fax.faxQueues")},u.saveFaxQueue=function(){r.faxQueue.update({id:u.faxQueue.id},u.faxQueue).$promise.then(function(){l.success({title:"FaxQueue updated!",msg:u.faxQueue.name?u.faxQueue.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","faxQueue","userProfileSection"],angular.module("app.fax").controller("FaxQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.faxQueues=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="faxQueues",b.listOrder="",b.listOrderAsc=null,b.selectedFaxQueues=[],b.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"fax",limit:10,page:1},b.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.fax.faxQueues.edit",{id:e.id,faxQueue:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"FaxQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxQueue:e,faxQueues:b.faxQueues?b.faxQueues.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"FaxQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxQueue:e,faxQueues:b.faxQueues?b.faxQueues.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("faxQueue")+"?").htmlContent("<b>"+(e.name||"faxQueue")+"</b> will be deleted.").ariaLabel("delete faxQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:910}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.fax.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.fax.realtime.queues",{})}},b.success=y,b.getFaxQueues=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.faxQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="FaxQueues",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditFaxQueue=function(e,t){i.show({controller:"CreateOrEditFaxQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxQueue:t,faxQueues:b.faxQueues.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteFaxQueue=S,b.exportSelectedFaxQueues=function(){var e=angular.copy(b.selectedFaxQueues);return b.selectedFaxQueues=[],e},b.deleteSelectedFaxQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected faxQueues?").htmlContent("<b>"+b.selectedFaxQueues.length+" selected</b> will be deleted.").ariaLabel("delete FaxQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedFaxQueues.forEach(function(e){S(e)}),b.selectedFaxQueues=[]})},b.deselectFaxQueues=function(){b.selectedFaxQueues=[]},b.selectAllFaxQueues=function(){b.selectedFaxQueues=b.faxQueues.rows};var A=!0,E=1;function y(e){b.faxQueues=e||{count:0,rows:[]}}function S(e){m.faxQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.faxQueues.rows,{id:e.id}),b.faxQueues.count-=1,b.faxQueues.rows.length||b.getFaxQueues(),p.success({title:_.startCase("FaxQueue")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEfaxQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEfaxQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getFaxQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","faxQueues","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.fax").controller("FaxQueuesController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){_.forIn(p.faxAccounts,function(e,t){p.rpcFaxAccounts[t]&&_.merge(e,p.rpcFaxAccounts[t])}),_.forIn(p.faxAccounts,function(t,e){var n={id:e,sort:"-id",direction:"in",limit:1,offset:0,$gte:"createdAt,"+moment().startOf("day").format("YYYY-MM-DD HH:mm:ss")};s.faxAccount.getMessages(n).$promise.then(function(e){return e&&(t.in=e.count||0,t.lastIn=e.rows&&e.rows.length?e.rows[0].createdAt:void 0),n.direction="out",s.faxAccount.getMessages(n).$promise}).then(function(e){e&&(t.out=e.count||0,t.lastOut=e.rows&&e.rows.length?e.rows[0].createdAt:void 0)}).catch(function(e){console.log(e)})})}p.currentUser=u.getCurrentUser(),p.count=l&&l.count?l.count:0,p.faxAccounts=l?_.keyBy(l.rows?l.rows:[],"id"):{},p.rpcFaxAccounts=d?_.keyBy(d.rows?d.rows:[],"id"):{},p.userProfile=c,p.userProfileSection=m&&1==m.count?m.rows[0]:null,p.crudPermissions=u.parseCrudPermissions(p.userProfileSection?p.userProfileSection.crudPermissions:null),p.query={sort:"-name",limit:10,page:1},p.success=f,p.$onInit=g,p.getFaxAccounts=function(){p.query.offset=(p.query.page-1)*p.query.limit,u.hasRole("admin")?p.promise=s.faxAccount.get(p.query,f).$promise:(p.query.id=p.userProfile.id,p.query.section="FaxAccounts",p.promise=s.userProfile.getResources(p.query,f).$promise)},p.onSave=function(e){p.faxAccounts[e.id]&&_.merge(p.faxAccounts[e.id],e)},p.onFaxMessageSave=function(e){p.faxAccounts[e.FaxAccountId]&&("in"==e.direction?(p.faxAccounts[e.FaxAccountId].in+=1,p.faxAccounts[e.FaxAccountId].lastIn=e.createdAt):(p.faxAccounts[e.FaxAccountId].out+=1,p.faxAccounts[e.FaxAccountId].lastOut=e.createdAt))},p.goToFaxAccount=function(e,t){i.go("app.fax.faxAccounts.edit",{id:t.id,faxAccount:t})},p.order=[],_.forIn(p.faxAccounts,function(e,t){p.order.push(e.id)}),o.on("faxAccount:save",p.onSave),o.on("faxAccount:update",p.onSave),o.on("faxMessage:save",p.onFaxMessageSave);var v=!0,h=1;function f(e){if(p.faxAccounts=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){p.order=[];for(var t=0;t<e.rows.length;t++)p.order.push(e.rows[t].id)}g()}e.$watch("vm.query.filter",function(e,t){v?n(function(){v=!1}):(t||(h=p.query.page),e!==t&&(p.query.page=1),e||(p.query.page=h),p.getFaxAccounts())}),e.$on("$destroy",function(){o.removeAllListeners("faxAccount:save"),o.removeAllListeners("faxAccount:update"),o.removeAllListeners("faxMessage:save")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$state","api","socket","toasty","faxAccounts","rpcFaxAccounts","userProfile","userProfileSection","Auth"],angular.module("app.fax").controller("FaxAccountsRealtimeController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"fax",direction:"inbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsFaxRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.faxQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].FaxQueueId].paused++,g.queues[e[t].rows[n].FaxQueueId].loggedInDb++,g.queues[e[t].rows[n].FaxQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].FaxQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"fax",type:"inbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.faxQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="FaxQueues",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditFaxQueue=function(e,t){a.show({controller:"CreateOrEditFaxQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxQueue:t,faxQueues:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.agentAdd=function(e,t){a.show({controller:"FaxQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxQueue:t,faxQueues:g.queues?g.queues.rows:[],realtime:!1,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.faxQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&_.merge(g.queues[e.id],_.pick(e,v))},g.onSaveMember=function(e){g.queues[e.FaxQueueId]&&g.queues[e.FaxQueueId].loggedInDb++},g.onRemoveMember=function(e){g.queues[e.FaxQueueId]&&g.queues[e.FaxQueueId].loggedInDb--},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.FaxQueueId]&&(g.queues[e.FaxQueueId].loggedInDb+=1,g.queues[e.FaxQueueId].agents[e.UserId]=e.FaxQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.FaxQueueId]&&0<g.queues[e.FaxQueueId].loggedInDb&&(g.queues[e.FaxQueueId].loggedInDb-=1,delete g.queues[e.FaxQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.on("fax_queue:save",g.onSave),d.on("userFaxQueue:save",g.onSaveMember),d.on("userFaxQueue:remove",g.onRemoveMember),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("fax_queue:save"),d.removeAllListeners("userFaxQueue:remove"),d.removeAllListeners("userFaxQueue:save"),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.fax").controller("QueuesFaxRealtimeController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){switch(t.disconnect(),t.connect(),this.selectedTab=0,n.current.name){case"app.fax.realtime.agents":this.selectedTab=0;break;case"app.fax.realtime.trunks":this.selectedTab=1;break;case"app.fax.realtime.queues":this.selectedTab=2;break;case"app.fax.realtime.accounts":this.selectedTab=3;break;default:this.selectedTab=0,n.go("app.fax.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.fax.realtime.agents");break;case 1:n.go("app.fax.realtime.trunks");break;case 2:n.go("app.fax.realtime.queues");break;case 3:n.go("app.fax.realtime.accounts");break;default:n.go("app.fax.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.fax").controller("FaxRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m){var u=this,p=["status","stateRegistry","registry","host","port","internal","state","status"];function g(){for(var e,t=0;t<u.trunks.length;t+=1)0<=(e=_.findIndex(u.rpcTrunks,["id",u.trunks[t].id]))&&_.merge(u.trunks[t],_.pick(u.rpcTrunks[e],p))}function v(e,t,n){0<=t&&_.merge(e[t],_.pick(n,p))}u.currentUser=m.getCurrentUser(),u.count=a.count,u.trunks=a?a.rows:[],u.rpcTrunks=i&&i.rows?i.rows:[],u.query={fields:"id,name",active:!0,sort:"-updatedAt",limit:10,page:1},u.statusClass=r.status,u.stateClass=r.state,u.userProfile=d,u.userProfileSection=c&&1==c.count?c.rows[0]:null,u.crudPermissions=m.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.success=b,u.$onInit=g,u.showInfo=function(e){t.show(t.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},u.getTrunks=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=s.trunk.get(u.query,b).$promise:(u.query.id=u.userProfile.id,u.query.section="Trunks",u.promise=s.userProfile.getResources(u.query,b).$promise)},u.goToTrunk=function(e,t){l.go("app.tools.trunks.edit",{id:t.id})},u.onSave=function(e){var t=_.findIndex(u.trunks,["id",e.id]),n=_.findIndex(u.rpcTrunks,["id",e.id]);v(u.trunks,t,e),v(u.rpcTrunks,n,e)},o.on("trunk:save",u.onSave);var h=!0,f=1;function b(e){u.count=e.count,u.trunks=e&&e.rows?e.rows:[],g()}e.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=f),u.getTrunks())}),e.$on("$destroy",function(){o.removeAllListeners("trunk:save")})}e.$inject=["$scope","$timeout","$mdDialog","trunks","rpcTrunks","api","socket","helperClasses","$state","userProfile","userProfileSection","Auth"],angular.module("app.fax").controller("TrunksFaxRealtimeController",e)}(),function(){"use strict";function e(e,t){this.info=e,this.license=t}e.$inject=["info","license"],angular.module("app.help.about").controller("AboutController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_DESKACCOUNT",g.deskAccount=angular.copy(l),g.deskAccounts=r,g.newDeskAccount=!1,g.deskAccount||(g.deskAccount={type:"integrationTab",authType:"basic",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_DESKACCOUNT",g.newDeskAccount=!0),g.addNewDeskAccount=function(){g.errors=[],d.intDeskAccount.save(g.deskAccount).$promise.then(function(e){g.deskAccounts.unshift(e.toJSON()),o.success({title:"DeskAccount properly created",msg:g.deskAccount.name?g.deskAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDeskAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDeskAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveDeskAccount=function(){g.errors=[],d.intDeskAccount.update({id:g.deskAccount.id},g.deskAccount).$promise.then(function(e){var t=_.find(g.deskAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"DeskAccount properly saved!",msg:g.deskAccount.name?g.deskAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDeskAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDeskAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteDeskAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The deskAccount will be deleted.").ariaLabel("Delete DeskAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intDeskAccount.delete({id:g.deskAccount.id}).$promise.then(function(){_.remove(g.deskAccounts,{id:g.deskAccount.id}),o.success({title:"DeskAccount properly deleted!",msg:(g.deskAccount.name||"deskAccount")+" has been deleted!"}),v(g.deskAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDeskAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDeskAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","deskAccounts","deskAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditDeskAccountDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.deskAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="deskAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedDeskAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,type,remoteUri,authType,username,password,serverUrl,description",limit:10,page:1},b.arraytype=_.keyBy([{option:"Integration_Tab",value:"'integrationTab'"},{option:"New_Tab",value:"'newTab'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayauthType=_.keyBy([{option:"Basic",value:"'basic'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.integrations.deskAccounts.edit",{id:e.id,deskAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intDeskAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"DeskAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"DeskAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("deskAccount")+"?").htmlContent("<b>"+(e.name||"deskAccount")+"</b> will be deleted.").ariaLabel("delete deskAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getDeskAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intDeskAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="DeskAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditDeskAccount=function(e,t){i.show({controller:"CreateOrEditDeskAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/deskAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{deskAccount:t,deskAccounts:b.deskAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteDeskAccount=S,b.exportSelectedDeskAccounts=function(){var e=angular.copy(b.selectedDeskAccounts);return b.selectedDeskAccounts=[],e},b.deleteSelectedDeskAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected deskAccounts?").htmlContent("<b>"+b.selectedDeskAccounts.length+" selected</b> will be deleted.").ariaLabel("delete DeskAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedDeskAccounts.forEach(function(e){S(e)}),b.selectedDeskAccounts=[]})},b.deselectDeskAccounts=function(){b.selectedDeskAccounts=[]},b.selectAllDeskAccounts=function(){b.selectedDeskAccounts=b.deskAccounts.rows};var A=!0,E=1;function y(e){b.deskAccounts=e||{count:0,rows:[]}}function S(e){m.intDeskAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.deskAccounts.rows,{id:e.id}),b.deskAccounts.count-=1,b.deskAccounts.rows.length||b.getDeskAccounts(),p.success({title:_.startCase("DeskAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintDeskAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintDeskAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getDeskAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","deskAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("DeskAccountsController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intDeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intDeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intDeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.deskAccount={},o.deskConfiguration={},o.configurations=[],o.selectedDeskConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.deskAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intDeskAccount.getConfigurations({id:o.deskAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getDeskConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getDeskConfiguration=function(e){o.deskConfiguration=o.configurations[e],o.selectedDeskConfiguration=e,i.intDeskConfiguration.getSubjects({id:o.deskConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intDeskConfiguration.getDescriptions({id:o.deskConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intDeskConfiguration.getFields({id:o.deskConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.intDeskConfiguration.getTags({id:o.deskConfiguration.id}).$promise.then(function(e){o.selectedTags=e.rows?_.map(e.rows,"id"):[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditDeskConfiguration=function(e,t){a.show({controller:"CreateOrEditDeskConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/deskAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{deskConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getDeskConfiguration(0)})},o.deleteDeskConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the deskConfiguration?").htmlContent("<b>"+(t.name||"deskConfiguration")+"</b> will be deleted.").ariaLabel("delete deskConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intDeskConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"DeskConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getDeskConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.deskConfiguration.id},o.deskConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedTags=[],o.selectTagsChanged=function(e){i.intDeskConfiguration.setTags({id:o.deskConfiguration.id,ids:o.selectedTags}).$promise.then(function(){s.success({title:"Tags set!",msg:"Tags has been set!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ADDTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},i.tag.get({nolimit:!0,sort:"name"}).$promise.then(function(e){o.tags=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditDeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/deskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.deskConfiguration,account:o.deskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditDeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/deskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.deskConfiguration,account:o.deskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditDeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/deskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.deskConfiguration,account:o.deskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("DeskAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_DESKCONFIGURATION",g.deskConfiguration=angular.copy(l),g.configurations=r,g.newDeskConfiguration=!1,g.deskConfiguration||(g.deskConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_DESKCONFIGURATION",g.newDeskConfiguration=!0),g.addNewDeskConfiguration=function(){g.errors=[],d.intDeskAccount.addConfiguration({id:t.params.id},g.deskConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"DeskConfiguration properly created",msg:g.deskConfiguration.name?g.deskConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDeskConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDeskConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveDeskConfiguration=function(){g.errors=[],d.intDeskConfiguration.update({id:g.deskConfiguration.id},g.deskConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"DeskConfiguration properly saved!",msg:g.deskConfiguration.name?g.deskConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDeskConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDeskConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteDeskConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The deskConfiguration will be deleted.").ariaLabel("Delete DeskConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intDeskConfiguration.delete({id:g.deskConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.deskConfiguration.id}),o.success({title:"DeskConfiguration properly deleted!",msg:(g.deskConfiguration.name||"deskConfiguration")+" has been deleted!"}),v(g.deskConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDeskConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDeskConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","deskConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditDeskConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intDeskField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intDeskField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intDeskField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intDeskAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditDeskAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.deskAccount=c||e.params.deskAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoDeskAccounts=function(){e.go("app.integrations.deskAccounts")},u.saveDeskAccount=function(){r.intDeskAccount.update({id:u.deskAccount.id},u.deskAccount).$promise.then(function(){l.success({title:"DeskAccount updated!",msg:u.deskAccount.name?u.deskAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintDeskAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","deskAccount","userProfileSection"],angular.module("app.integrations").controller("DeskAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_DYNAMICS365ACCOUNT",g.dynamics365Account=angular.copy(l),g.dynamics365Accounts=r,g.newDynamics365Account=!1,g.dynamics365Account||(g.dynamics365Account={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_DYNAMICS365ACCOUNT",g.newDynamics365Account=!0),g.addNewDynamics365Account=function(){g.errors=[],d.intDynamics365Account.save(g.dynamics365Account).$promise.then(function(e){g.dynamics365Accounts.unshift(e.toJSON()),o.success({title:"Dynamics365Account properly created",msg:g.dynamics365Account.name?g.dynamics365Account.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDynamics365Account.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDynamics365Account.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveDynamics365Account=function(){g.errors=[],d.intDynamics365Account.update({id:g.dynamics365Account.id},g.dynamics365Account).$promise.then(function(e){var t=_.find(g.dynamics365Accounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Dynamics365Account properly saved!",msg:g.dynamics365Account.name?g.dynamics365Account.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDynamics365Account.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDynamics365Account.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteDynamics365Account=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The dynamics365Account will be deleted.").ariaLabel("Delete Dynamics365Account").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intDynamics365Account.delete({id:g.dynamics365Account.id}).$promise.then(function(){_.remove(g.dynamics365Accounts,{id:g.dynamics365Account.id}),o.success({title:"Dynamics365Account properly deleted!",msg:(g.dynamics365Account.name||"dynamics365Account")+" has been deleted!"}),v(g.dynamics365Account)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDynamics365Account.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDynamics365Account.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","dynamics365Accounts","dynamics365Account","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditDynamics365AccountDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.dynamics365Accounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="dynamics365Accounts",b.listOrder="",b.listOrderAsc=null,b.selectedDynamics365Accounts=[],b.query={fields:"createdAt,updatedAt,id,name,username,password,remoteUri,tenantId,clientId,clientSecret,serverUrl,description",limit:10,page:1},b.editstate=function(e,t){n.go("app.integrations.dynamics365Accounts.edit",{id:e.id,dynamics365Account:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intDynamics365Account.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"Dynamics365Account properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"Dynamics365Account properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("dynamics365Account")+"?").htmlContent("<b>"+(e.name||"dynamics365Account")+"</b> will be deleted.").ariaLabel("delete dynamics365Account").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getDynamics365Accounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intDynamics365Account.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Dynamics365Accounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditDynamics365Account=function(e,t){i.show({controller:"CreateOrEditDynamics365AccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{dynamics365Account:t,dynamics365Accounts:b.dynamics365Accounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteDynamics365Account=S,b.exportSelectedDynamics365Accounts=function(){var e=angular.copy(b.selectedDynamics365Accounts);return b.selectedDynamics365Accounts=[],e},b.deleteSelectedDynamics365Accounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected dynamics365Accounts?").htmlContent("<b>"+b.selectedDynamics365Accounts.length+" selected</b> will be deleted.").ariaLabel("delete Dynamics365Accounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedDynamics365Accounts.forEach(function(e){S(e)}),b.selectedDynamics365Accounts=[]})},b.deselectDynamics365Accounts=function(){b.selectedDynamics365Accounts=[]},b.selectAllDynamics365Accounts=function(){b.selectedDynamics365Accounts=b.dynamics365Accounts.rows};var A=!0,E=1;function y(e){b.dynamics365Accounts=e||{count:0,rows:[]}}function S(e){m.intDynamics365Account.delete({id:e.id}).$promise.then(function(){_.remove(b.dynamics365Accounts.rows,{id:e.id}),b.dynamics365Accounts.count-=1,b.dynamics365Accounts.rows.length||b.getDynamics365Accounts(),p.success({title:_.startCase("Dynamics365Account")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintDynamics365Account"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintDynamics365Account",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getDynamics365Accounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","dynamics365Accounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("Dynamics365AccountsController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intDynamics365Field.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intDynamics365Field.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intDynamics365Field.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.dynamics365Account={},o.dynamics365Configuration={},o.configurations=[],o.selectedDynamics365Configuration=-1,o.crudPermissions,o.init=function(e,t){o.dynamics365Account=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intDynamics365Account.getConfigurations({id:o.dynamics365Account.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getDynamics365Configuration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getDynamics365Configuration=function(e){o.dynamics365Configuration=o.configurations[e],o.selectedDynamics365Configuration=e,i.intDynamics365Configuration.getSubjects({id:o.dynamics365Configuration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intDynamics365Configuration.getDescriptions({id:o.dynamics365Configuration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intDynamics365Configuration.getFields({id:o.dynamics365Configuration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditDynamics365Configuration=function(e,t){a.show({controller:"CreateOrEditDynamics365ConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{dynamics365Configuration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getDynamics365Configuration(0)})},o.deleteDynamics365Configuration=function(e,t){var n=a.confirm().title("Are you sure want to delete the dynamics365Configuration?").htmlContent("<b>"+(t.name||"dynamics365Configuration")+"</b> will be deleted.").ariaLabel("delete dynamics365Configuration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intDynamics365Configuration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"Dynamics365Configuration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getDynamics365Configuration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.dynamics365Configuration.id},o.dynamics365Configuration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditDynamics365AccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.dynamics365Configuration,account:o.dynamics365Account,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditDynamics365AccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.dynamics365Configuration,account:o.dynamics365Account,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditDynamics365AccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.dynamics365Configuration,account:o.dynamics365Account,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("Dynamics365AccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_DYNAMICS365CONFIGURATION",g.dynamics365Configuration=angular.copy(l),g.configurations=r,g.newDynamics365Configuration=!1,g.dynamics365Configuration||(g.dynamics365Configuration={channel:"voice",type:"inbound",ticketType:"incident"},g.title="INTEGRATIONS.NEW_DYNAMICS365CONFIGURATION",g.newDynamics365Configuration=!0),g.addNewDynamics365Configuration=function(){g.errors=[],d.intDynamics365Account.addConfiguration({id:t.params.id},g.dynamics365Configuration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"Dynamics365Configuration properly created",msg:g.dynamics365Configuration.name?g.dynamics365Configuration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDynamics365Configuration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDynamics365Configuration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveDynamics365Configuration=function(){g.errors=[],d.intDynamics365Configuration.update({id:g.dynamics365Configuration.id},g.dynamics365Configuration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Dynamics365Configuration properly saved!",msg:g.dynamics365Configuration.name?g.dynamics365Configuration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDynamics365Configuration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDynamics365Configuration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteDynamics365Configuration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The dynamics365Configuration will be deleted.").ariaLabel("Delete Dynamics365Configuration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intDynamics365Configuration.delete({id:g.dynamics365Configuration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.dynamics365Configuration.id}),o.success({title:"Dynamics365Configuration properly deleted!",msg:(g.dynamics365Configuration.name||"dynamics365Configuration")+" has been deleted!"}),v(g.dynamics365Configuration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDynamics365Configuration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDynamics365Configuration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","dynamics365Configuration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditDynamics365ConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intDynamics365Field.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intDynamics365Field.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intDynamics365Field.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intDynamics365Account.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditDynamics365AccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.dynamics365Account=c||e.params.dynamics365Account||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoDynamics365Accounts=function(){e.go("app.integrations.dynamics365Accounts")},u.saveDynamics365Account=function(){r.intDynamics365Account.update({id:u.dynamics365Account.id},u.dynamics365Account).$promise.then(function(){l.success({title:"Dynamics365Account updated!",msg:u.dynamics365Account.name?u.dynamics365Account.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintDynamics365Account",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","dynamics365Account","userProfileSection"],angular.module("app.integrations").controller("Dynamics365AccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_FRESHDESKACCOUNT",g.freshdeskAccount=angular.copy(l),g.freshdeskAccounts=r,g.newFreshdeskAccount=!1,g.freshdeskAccount||(g.freshdeskAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_FRESHDESKACCOUNT",g.newFreshdeskAccount=!0),g.addNewFreshdeskAccount=function(){g.errors=[],d.intFreshdeskAccount.save(g.freshdeskAccount).$promise.then(function(e){g.freshdeskAccounts.unshift(e.toJSON()),o.success({title:"FreshdeskAccount properly created",msg:g.freshdeskAccount.name?g.freshdeskAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intFreshdeskAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intFreshdeskAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveFreshdeskAccount=function(){g.errors=[],d.intFreshdeskAccount.update({id:g.freshdeskAccount.id},g.freshdeskAccount).$promise.then(function(e){var t=_.find(g.freshdeskAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FreshdeskAccount properly saved!",msg:g.freshdeskAccount.name?g.freshdeskAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intFreshdeskAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intFreshdeskAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteFreshdeskAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The freshdeskAccount will be deleted.").ariaLabel("Delete FreshdeskAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intFreshdeskAccount.delete({id:g.freshdeskAccount.id}).$promise.then(function(){_.remove(g.freshdeskAccounts,{id:g.freshdeskAccount.id}),o.success({title:"FreshdeskAccount properly deleted!",msg:(g.freshdeskAccount.name||"freshdeskAccount")+" has been deleted!"}),v(g.freshdeskAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intFreshdeskAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intFreshdeskAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","freshdeskAccounts","freshdeskAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditFreshdeskAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intFreshdeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intFreshdeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intFreshdeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.freshdeskAccount={},o.freshdeskConfiguration={},o.configurations=[],o.selectedFreshdeskConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.freshdeskAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intFreshdeskAccount.getConfigurations({id:o.freshdeskAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getFreshdeskConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getFreshdeskConfiguration=function(e){o.freshdeskConfiguration=o.configurations[e],o.selectedFreshdeskConfiguration=e,i.intFreshdeskConfiguration.getSubjects({id:o.freshdeskConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intFreshdeskConfiguration.getDescriptions({id:o.freshdeskConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intFreshdeskConfiguration.getFields({id:o.freshdeskConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.intFreshdeskConfiguration.getTags({id:o.freshdeskConfiguration.id}).$promise.then(function(e){o.selectedTags=e.rows?_.map(e.rows,"id"):[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditFreshdeskConfiguration=function(e,t){a.show({controller:"CreateOrEditFreshdeskConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{freshdeskConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getFreshdeskConfiguration(0)})},o.deleteFreshdeskConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the freshdeskConfiguration?").htmlContent("<b>"+(t.name||"freshdeskConfiguration")+"</b> will be deleted.").ariaLabel("delete freshdeskConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intFreshdeskConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"FreshdeskConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getFreshdeskConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.freshdeskConfiguration.id},o.freshdeskConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedTags=[],o.selectTagsChanged=function(e){i.intFreshdeskConfiguration.setTags({id:o.freshdeskConfiguration.id,ids:o.selectedTags}).$promise.then(function(){s.success({title:"Tags set!",msg:"Tags has been set!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ADDTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},i.tag.get({nolimit:!0,sort:"name"}).$promise.then(function(e){o.tags=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditFreshdeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.freshdeskConfiguration,account:o.freshdeskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditFreshdeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.freshdeskConfiguration,account:o.freshdeskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditFreshdeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.freshdeskConfiguration,account:o.freshdeskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("FreshdeskAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_FRESHDESKCONFIGURATION",g.freshdeskConfiguration=angular.copy(l),g.configurations=r,g.newFreshdeskConfiguration=!1,g.freshdeskConfiguration||(g.freshdeskConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_FRESHDESKCONFIGURATION",g.newFreshdeskConfiguration=!0),g.addNewFreshdeskConfiguration=function(){g.errors=[],d.intFreshdeskAccount.addConfiguration({id:t.params.id},g.freshdeskConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"FreshdeskConfiguration properly created",msg:g.freshdeskConfiguration.name?g.freshdeskConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intFreshdeskConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intFreshdeskConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveFreshdeskConfiguration=function(){g.errors=[],d.intFreshdeskConfiguration.update({id:g.freshdeskConfiguration.id},g.freshdeskConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FreshdeskConfiguration properly saved!",msg:g.freshdeskConfiguration.name?g.freshdeskConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intFreshdeskConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intFreshdeskConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteFreshdeskConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The freshdeskConfiguration will be deleted.").ariaLabel("Delete FreshdeskConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intFreshdeskConfiguration.delete({id:g.freshdeskConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.freshdeskConfiguration.id}),o.success({title:"FreshdeskConfiguration properly deleted!",msg:(g.freshdeskConfiguration.name||"freshdeskConfiguration")+" has been deleted!"}),v(g.freshdeskConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intFreshdeskConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intFreshdeskConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","freshdeskConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditFreshdeskConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intFreshdeskField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intFreshdeskField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intFreshdeskField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intFreshdeskAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditFreshdeskAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.freshdeskAccount=c||e.params.freshdeskAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoFreshdeskAccounts=function(){e.go("app.integrations.freshdeskAccounts")},u.saveFreshdeskAccount=function(){r.intFreshdeskAccount.update({id:u.freshdeskAccount.id},u.freshdeskAccount).$promise.then(function(){l.success({title:"FreshdeskAccount updated!",msg:u.freshdeskAccount.name?u.freshdeskAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintFreshdeskAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","freshdeskAccount","userProfileSection"],angular.module("app.integrations").controller("FreshdeskAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.freshdeskAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="freshdeskAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedFreshdeskAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,username,remoteUri,apiKey,serverUrl,description",limit:10,page:1},b.editstate=function(e,t){n.go("app.integrations.freshdeskAccounts.edit",{id:e.id,freshdeskAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intFreshdeskAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"FreshdeskAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"FreshdeskAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("freshdeskAccount")+"?").htmlContent("<b>"+(e.name||"freshdeskAccount")+"</b> will be deleted.").ariaLabel("delete freshdeskAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getFreshdeskAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intFreshdeskAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="FreshdeskAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditFreshdeskAccount=function(e,t){i.show({controller:"CreateOrEditFreshdeskAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{freshdeskAccount:t,freshdeskAccounts:b.freshdeskAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteFreshdeskAccount=S,b.exportSelectedFreshdeskAccounts=function(){var e=angular.copy(b.selectedFreshdeskAccounts);return b.selectedFreshdeskAccounts=[],e},b.deleteSelectedFreshdeskAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected freshdeskAccounts?").htmlContent("<b>"+b.selectedFreshdeskAccounts.length+" selected</b> will be deleted.").ariaLabel("delete FreshdeskAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedFreshdeskAccounts.forEach(function(e){S(e)}),b.selectedFreshdeskAccounts=[]})},b.deselectFreshdeskAccounts=function(){b.selectedFreshdeskAccounts=[]},b.selectAllFreshdeskAccounts=function(){b.selectedFreshdeskAccounts=b.freshdeskAccounts.rows};var A=!0,E=1;function y(e){b.freshdeskAccounts=e||{count:0,rows:[]}}function S(e){m.intFreshdeskAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.freshdeskAccounts.rows,{id:e.id}),b.freshdeskAccounts.count-=1,b.freshdeskAccounts.rows.length||b.getFreshdeskAccounts(),p.success({title:_.startCase("FreshdeskAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintFreshdeskAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintFreshdeskAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getFreshdeskAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","freshdeskAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("FreshdeskAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_SALESFORCEACCOUNT",g.salesforceAccount=angular.copy(l),g.salesforceAccounts=r,g.newSalesforceAccount=!1,g.salesforceAccount||(g.salesforceAccount={type:"integrationTab",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_SALESFORCEACCOUNT",g.newSalesforceAccount=!0),g.addNewSalesforceAccount=function(){g.errors=[],d.intSalesforceAccount.save(g.salesforceAccount).$promise.then(function(e){g.salesforceAccounts.unshift(e.toJSON()),o.success({title:"SalesforceAccount properly created",msg:g.salesforceAccount.name?g.salesforceAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSalesforceAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSalesforceAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSalesforceAccount=function(){g.errors=[],d.intSalesforceAccount.update({id:g.salesforceAccount.id},g.salesforceAccount).$promise.then(function(e){var t=_.find(g.salesforceAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SalesforceAccount properly saved!",msg:g.salesforceAccount.name?g.salesforceAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSalesforceAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSalesforceAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSalesforceAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The salesforceAccount will be deleted.").ariaLabel("Delete SalesforceAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intSalesforceAccount.delete({id:g.salesforceAccount.id}).$promise.then(function(){_.remove(g.salesforceAccounts,{id:g.salesforceAccount.id}),o.success({title:"SalesforceAccount properly deleted!",msg:(g.salesforceAccount.name||"salesforceAccount")+" has been deleted!"}),v(g.salesforceAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSalesforceAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSalesforceAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","salesforceAccounts","salesforceAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditSalesforceAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intSalesforceField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intSalesforceField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intSalesforceField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.salesforceAccount={},o.salesforceConfiguration={},o.configurations=[],o.selectedSalesforceConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.salesforceAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intSalesforceAccount.getConfigurations({id:o.salesforceAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getSalesforceConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getSalesforceConfiguration=function(e){o.salesforceConfiguration=o.configurations[e],o.selectedSalesforceConfiguration=e,i.intSalesforceConfiguration.getSubjects({id:o.salesforceConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intSalesforceConfiguration.getDescriptions({id:o.salesforceConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intSalesforceConfiguration.getFields({id:o.salesforceConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditSalesforceConfiguration=function(e,t){a.show({controller:"CreateOrEditSalesforceConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/salesforceAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{salesforceConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getSalesforceConfiguration(0)})},o.deleteSalesforceConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the salesforceConfiguration?").htmlContent("<b>"+(t.name||"salesforceConfiguration")+"</b> will be deleted.").ariaLabel("delete salesforceConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intSalesforceConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"SalesforceConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getSalesforceConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.salesforceConfiguration.id},o.salesforceConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditSalesforceAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/salesforceAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.salesforceConfiguration,account:o.salesforceAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditSalesforceAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/salesforceAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.salesforceConfiguration,account:o.salesforceAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditSalesforceAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/salesforceAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.salesforceConfiguration,account:o.salesforceAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("SalesforceAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_SALESFORCECONFIGURATION",g.salesforceConfiguration=angular.copy(l),g.configurations=r,g.newSalesforceConfiguration=!1,g.salesforceConfiguration||(g.salesforceConfiguration={channel:"voice",type:"inbound",ticketType:"Task"},g.title="INTEGRATIONS.NEW_SALESFORCECONFIGURATION",g.newSalesforceConfiguration=!0),g.addNewSalesforceConfiguration=function(){g.errors=[],d.intSalesforceAccount.addConfiguration({id:t.params.id},g.salesforceConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"SalesforceConfiguration properly created",msg:g.salesforceConfiguration.name?g.salesforceConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSalesforceConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSalesforceConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSalesforceConfiguration=function(){g.errors=[],d.intSalesforceConfiguration.update({id:g.salesforceConfiguration.id},g.salesforceConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SalesforceConfiguration properly saved!",msg:g.salesforceConfiguration.name?g.salesforceConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSalesforceConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSalesforceConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSalesforceConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The salesforceConfiguration will be deleted.").ariaLabel("Delete SalesforceConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intSalesforceConfiguration.delete({id:g.salesforceConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.salesforceConfiguration.id}),o.success({title:"SalesforceConfiguration properly deleted!",msg:(g.salesforceConfiguration.name||"salesforceConfiguration")+" has been deleted!"}),v(g.salesforceConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSalesforceConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSalesforceConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","salesforceConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditSalesforceConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intSalesforceField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intSalesforceField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intSalesforceField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intSalesforceAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditSalesforceAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.salesforceAccount=c||e.params.salesforceAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoSalesforceAccounts=function(){e.go("app.integrations.salesforceAccounts")},u.saveSalesforceAccount=function(){r.intSalesforceAccount.update({id:u.salesforceAccount.id},u.salesforceAccount).$promise.then(function(){l.success({title:"SalesforceAccount updated!",msg:u.salesforceAccount.name?u.salesforceAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintSalesforceAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","salesforceAccount","userProfileSection"],angular.module("app.integrations").controller("SalesforceAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.salesforceAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="salesforceAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedSalesforceAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,type,username,remoteUri,password,clientId,clientSecret,securityToken,serverUrl,description",limit:10,page:1},b.arraytype=_.keyBy([{option:"Integration_Tab",value:"'integrationTab'"},{option:"New_Tab",value:"'newTab'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.integrations.salesforceAccounts.edit",{id:e.id,salesforceAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intSalesforceAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"SalesforceAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"SalesforceAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("salesforceAccount")+"?").htmlContent("<b>"+(e.name||"salesforceAccount")+"</b> will be deleted.").ariaLabel("delete salesforceAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getSalesforceAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intSalesforceAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="SalesforceAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSalesforceAccount=function(e,t){i.show({controller:"CreateOrEditSalesforceAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/salesforceAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{salesforceAccount:t,salesforceAccounts:b.salesforceAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSalesforceAccount=S,b.exportSelectedSalesforceAccounts=function(){var e=angular.copy(b.selectedSalesforceAccounts);return b.selectedSalesforceAccounts=[],e},b.deleteSelectedSalesforceAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected salesforceAccounts?").htmlContent("<b>"+b.selectedSalesforceAccounts.length+" selected</b> will be deleted.").ariaLabel("delete SalesforceAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedSalesforceAccounts.forEach(function(e){S(e)}),b.selectedSalesforceAccounts=[]})},b.deselectSalesforceAccounts=function(){b.selectedSalesforceAccounts=[]},b.selectAllSalesforceAccounts=function(){b.selectedSalesforceAccounts=b.salesforceAccounts.rows};var A=!0,E=1;function y(e){b.salesforceAccounts=e||{count:0,rows:[]}}function S(e){m.intSalesforceAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.salesforceAccounts.rows,{id:e.id}),b.salesforceAccounts.count-=1,b.salesforceAccounts.rows.length||b.getSalesforceAccounts(),p.success({title:_.startCase("SalesforceAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintSalesforceAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintSalesforceAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getSalesforceAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","salesforceAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("SalesforceAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_SERVICENOWACCOUNT",g.servicenowAccount=angular.copy(l),g.servicenowAccounts=r,g.newServicenowAccount=!1,g.servicenowAccount||(g.servicenowAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_SERVICENOWACCOUNT",g.newServicenowAccount=!0),g.addNewServicenowAccount=function(){g.errors=[],d.intServicenowAccount.save(g.servicenowAccount).$promise.then(function(e){g.servicenowAccounts.unshift(e.toJSON()),o.success({title:"ServicenowAccount properly created",msg:g.servicenowAccount.name?g.servicenowAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intServicenowAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intServicenowAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveServicenowAccount=function(){g.errors=[],d.intServicenowAccount.update({id:g.servicenowAccount.id},g.servicenowAccount).$promise.then(function(e){var t=_.find(g.servicenowAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ServicenowAccount properly saved!",msg:g.servicenowAccount.name?g.servicenowAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intServicenowAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intServicenowAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteServicenowAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The servicenowAccount will be deleted.").ariaLabel("Delete ServicenowAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intServicenowAccount.delete({id:g.servicenowAccount.id}).$promise.then(function(){_.remove(g.servicenowAccounts,{id:g.servicenowAccount.id}),o.success({title:"ServicenowAccount properly deleted!",msg:(g.servicenowAccount.name||"servicenowAccount")+" has been deleted!"}),v(g.servicenowAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intServicenowAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intServicenowAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","servicenowAccounts","servicenowAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditServicenowAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intServicenowField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intServicenowField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intServicenowField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.servicenowAccount={},o.servicenowConfiguration={},o.configurations=[],o.selectedServicenowConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.servicenowAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intServicenowAccount.getConfigurations({id:o.servicenowAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getServicenowConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getServicenowConfiguration=function(e){o.servicenowConfiguration=o.configurations[e],o.selectedServicenowConfiguration=e,i.intServicenowConfiguration.getSubjects({id:o.servicenowConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intServicenowConfiguration.getDescriptions({id:o.servicenowConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intServicenowConfiguration.getFields({id:o.servicenowConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditServicenowConfiguration=function(e,t){a.show({controller:"CreateOrEditServicenowConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/servicenowAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{servicenowConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getServicenowConfiguration(0)})},o.deleteServicenowConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the servicenowConfiguration?").htmlContent("<b>"+(t.name||"servicenowConfiguration")+"</b> will be deleted.").ariaLabel("delete servicenowConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intServicenowConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"ServicenowConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getServicenowConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.servicenowConfiguration.id},o.servicenowConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditServicenowAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/servicenowAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.servicenowConfiguration,account:o.servicenowAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditServicenowAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/servicenowAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.servicenowConfiguration,account:o.servicenowAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditServicenowAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/servicenowAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.servicenowConfiguration,account:o.servicenowAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("ServicenowAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_SERVICENOWCONFIGURATION",g.servicenowConfiguration=angular.copy(l),g.configurations=r,g.newServicenowConfiguration=!1,g.servicenowConfiguration||(g.servicenowConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_SERVICENOWCONFIGURATION",g.newServicenowConfiguration=!0),g.addNewServicenowConfiguration=function(){g.errors=[],d.intServicenowAccount.addConfiguration({id:t.params.id},g.servicenowConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"ServicenowConfiguration properly created",msg:g.servicenowConfiguration.name?g.servicenowConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intServicenowConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intServicenowConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveServicenowConfiguration=function(){g.errors=[],d.intServicenowConfiguration.update({id:g.servicenowConfiguration.id},g.servicenowConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ServicenowConfiguration properly saved!",msg:g.servicenowConfiguration.name?g.servicenowConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intServicenowConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intServicenowConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteServicenowConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The servicenowConfiguration will be deleted.").ariaLabel("Delete ServicenowConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intServicenowConfiguration.delete({id:g.servicenowConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.servicenowConfiguration.id}),o.success({title:"ServicenowConfiguration properly deleted!",msg:(g.servicenowConfiguration.name||"servicenowConfiguration")+" has been deleted!"}),v(g.servicenowConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intServicenowConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intServicenowConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","servicenowConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditServicenowConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intServicenowField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intServicenowField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intServicenowField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intServicenowAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditServicenowAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.servicenowAccount=c||e.params.servicenowAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoServicenowAccounts=function(){e.go("app.integrations.servicenowAccounts")},u.saveServicenowAccount=function(){r.intServicenowAccount.update({id:u.servicenowAccount.id},u.servicenowAccount).$promise.then(function(){l.success({title:"ServicenowAccount updated!",msg:u.servicenowAccount.name?u.servicenowAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintServicenowAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","servicenowAccount","userProfileSection"],angular.module("app.integrations").controller("ServicenowAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.servicenowAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="servicenowAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedServicenowAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,username,password,email,remoteUri,serverUrl,description",limit:10,page:1},b.editstate=function(e,t){n.go("app.integrations.servicenowAccounts.edit",{id:e.id,servicenowAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intServicenowAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"ServicenowAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"ServicenowAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("servicenowAccount")+"?").htmlContent("<b>"+(e.name||"servicenowAccount")+"</b> will be deleted.").ariaLabel("delete servicenowAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getServicenowAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intServicenowAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ServicenowAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditServicenowAccount=function(e,t){i.show({controller:"CreateOrEditServicenowAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/servicenowAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{servicenowAccount:t,servicenowAccounts:b.servicenowAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteServicenowAccount=S,b.exportSelectedServicenowAccounts=function(){var e=angular.copy(b.selectedServicenowAccounts);return b.selectedServicenowAccounts=[],e},b.deleteSelectedServicenowAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected servicenowAccounts?").htmlContent("<b>"+b.selectedServicenowAccounts.length+" selected</b> will be deleted.").ariaLabel("delete ServicenowAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedServicenowAccounts.forEach(function(e){S(e)}),b.selectedServicenowAccounts=[]})},b.deselectServicenowAccounts=function(){b.selectedServicenowAccounts=[]},b.selectAllServicenowAccounts=function(){b.selectedServicenowAccounts=b.servicenowAccounts.rows};var A=!0,E=1;function y(e){b.servicenowAccounts=e||{count:0,rows:[]}}function S(e){m.intServicenowAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.servicenowAccounts.rows,{id:e.id}),b.servicenowAccounts.count-=1,b.servicenowAccounts.rows.length||b.getServicenowAccounts(),p.success({title:_.startCase("ServicenowAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintServicenowAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintServicenowAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getServicenowAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","servicenowAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("ServicenowAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_SUGARCRMACCOUNT",g.sugarcrmAccount=angular.copy(l),g.sugarcrmAccounts=r,g.newSugarcrmAccount=!1,g.sugarcrmAccount||(g.sugarcrmAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_SUGARCRMACCOUNT",g.newSugarcrmAccount=!0),g.addNewSugarcrmAccount=function(){g.errors=[],d.intSugarcrmAccount.save(g.sugarcrmAccount).$promise.then(function(e){g.sugarcrmAccounts.unshift(e.toJSON()),o.success({title:"SugarcrmAccount properly created",msg:g.sugarcrmAccount.name?g.sugarcrmAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSugarcrmAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSugarcrmAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSugarcrmAccount=function(){g.errors=[],d.intSugarcrmAccount.update({id:g.sugarcrmAccount.id},g.sugarcrmAccount).$promise.then(function(e){var t=_.find(g.sugarcrmAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SugarcrmAccount properly saved!",msg:g.sugarcrmAccount.name?g.sugarcrmAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSugarcrmAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSugarcrmAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSugarcrmAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The sugarcrmAccount will be deleted.").ariaLabel("Delete SugarcrmAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intSugarcrmAccount.delete({id:g.sugarcrmAccount.id}).$promise.then(function(){_.remove(g.sugarcrmAccounts,{id:g.sugarcrmAccount.id}),o.success({title:"SugarcrmAccount properly deleted!",msg:(g.sugarcrmAccount.name||"sugarcrmAccount")+" has been deleted!"}),v(g.sugarcrmAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSugarcrmAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSugarcrmAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","sugarcrmAccounts","sugarcrmAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditSugarcrmAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intSugarcrmField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intSugarcrmField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intSugarcrmField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.sugarcrmAccount={},o.sugarcrmConfiguration={},o.configurations=[],o.selectedSugarcrmConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.sugarcrmAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intSugarcrmAccount.getConfigurations({id:o.sugarcrmAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getSugarcrmConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getSugarcrmConfiguration=function(e){o.sugarcrmConfiguration=o.configurations[e],o.selectedSugarcrmConfiguration=e,i.intSugarcrmConfiguration.getSubjects({id:o.sugarcrmConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intSugarcrmConfiguration.getDescriptions({id:o.sugarcrmConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intSugarcrmConfiguration.getFields({id:o.sugarcrmConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditSugarcrmConfiguration=function(e,t){a.show({controller:"CreateOrEditSugarcrmConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{sugarcrmConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getSugarcrmConfiguration(0)})},o.deleteSugarcrmConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the sugarcrmConfiguration?").htmlContent("<b>"+(t.name||"sugarcrmConfiguration")+"</b> will be deleted.").ariaLabel("delete sugarcrmConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intSugarcrmConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"SugarcrmConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getSugarcrmConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.sugarcrmConfiguration.id},o.sugarcrmConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditSugarcrmAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.sugarcrmConfiguration,account:o.sugarcrmAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditSugarcrmAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.sugarcrmConfiguration,account:o.sugarcrmAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditSugarcrmAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.sugarcrmConfiguration,account:o.sugarcrmAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("SugarcrmAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_SUGARCRMCONFIGURATION",g.sugarcrmConfiguration=angular.copy(l),g.configurations=r,g.newSugarcrmConfiguration=!1,g.sugarcrmConfiguration||(g.sugarcrmConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_SUGARCRMCONFIGURATION",g.newSugarcrmConfiguration=!0),g.addNewSugarcrmConfiguration=function(){g.errors=[],d.intSugarcrmAccount.addConfiguration({id:t.params.id},g.sugarcrmConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"SugarcrmConfiguration properly created",msg:g.sugarcrmConfiguration.name?g.sugarcrmConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSugarcrmConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSugarcrmConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSugarcrmConfiguration=function(){g.errors=[],d.intSugarcrmConfiguration.update({id:g.sugarcrmConfiguration.id},g.sugarcrmConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SugarcrmConfiguration properly saved!",msg:g.sugarcrmConfiguration.name?g.sugarcrmConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSugarcrmConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSugarcrmConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSugarcrmConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The sugarcrmConfiguration will be deleted.").ariaLabel("Delete SugarcrmConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intSugarcrmConfiguration.delete({id:g.sugarcrmConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.sugarcrmConfiguration.id}),o.success({title:"SugarcrmConfiguration properly deleted!",msg:(g.sugarcrmConfiguration.name||"sugarcrmConfiguration")+" has been deleted!"}),v(g.sugarcrmConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSugarcrmConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSugarcrmConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","sugarcrmConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditSugarcrmConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intSugarcrmField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intSugarcrmField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intSugarcrmField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intSugarcrmAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditSugarcrmAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.sugarcrmAccount=c||e.params.sugarcrmAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoSugarcrmAccounts=function(){e.go("app.integrations.sugarcrmAccounts")},u.saveSugarcrmAccount=function(){r.intSugarcrmAccount.update({id:u.sugarcrmAccount.id},u.sugarcrmAccount).$promise.then(function(){l.success({title:"SugarcrmAccount updated!",msg:u.sugarcrmAccount.name?u.sugarcrmAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintSugarcrmAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","sugarcrmAccount","userProfileSection"],angular.module("app.integrations").controller("SugarcrmAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.sugarcrmAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="sugarcrmAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedSugarcrmAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,username,remoteUri,password,serverUrl,description",limit:10,page:1},b.editstate=function(e,t){n.go("app.integrations.sugarcrmAccounts.edit",{id:e.id,sugarcrmAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intSugarcrmAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"SugarcrmAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"SugarcrmAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("sugarcrmAccount")+"?").htmlContent("<b>"+(e.name||"sugarcrmAccount")+"</b> will be deleted.").ariaLabel("delete sugarcrmAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getSugarcrmAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intSugarcrmAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="SugarcrmAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSugarcrmAccount=function(e,t){i.show({controller:"CreateOrEditSugarcrmAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{sugarcrmAccount:t,sugarcrmAccounts:b.sugarcrmAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSugarcrmAccount=S,b.exportSelectedSugarcrmAccounts=function(){var e=angular.copy(b.selectedSugarcrmAccounts);return b.selectedSugarcrmAccounts=[],e},b.deleteSelectedSugarcrmAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected sugarcrmAccounts?").htmlContent("<b>"+b.selectedSugarcrmAccounts.length+" selected</b> will be deleted.").ariaLabel("delete SugarcrmAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedSugarcrmAccounts.forEach(function(e){S(e)}),b.selectedSugarcrmAccounts=[]})},b.deselectSugarcrmAccounts=function(){b.selectedSugarcrmAccounts=[]},b.selectAllSugarcrmAccounts=function(){b.selectedSugarcrmAccounts=b.sugarcrmAccounts.rows};var A=!0,E=1;function y(e){b.sugarcrmAccounts=e||{count:0,rows:[]}}function S(e){m.intSugarcrmAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.sugarcrmAccounts.rows,{id:e.id}),b.sugarcrmAccounts.count-=1,b.sugarcrmAccounts.rows.length||b.getSugarcrmAccounts(),p.success({title:_.startCase("SugarcrmAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintSugarcrmAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintSugarcrmAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getSugarcrmAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","sugarcrmAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("SugarcrmAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_VTIGERACCOUNT",g.vtigerAccount=angular.copy(l),g.vtigerAccounts=r,g.newVtigerAccount=!1,g.vtigerAccount||(g.vtigerAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_VTIGERACCOUNT",g.newVtigerAccount=!0),g.addNewVtigerAccount=function(){g.errors=[],d.intVtigerAccount.save(g.vtigerAccount).$promise.then(function(e){g.vtigerAccounts.unshift(e.toJSON()),o.success({title:"VtigerAccount properly created",msg:g.vtigerAccount.name?g.vtigerAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intVtigerAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intVtigerAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVtigerAccount=function(){g.errors=[],d.intVtigerAccount.update({id:g.vtigerAccount.id},g.vtigerAccount).$promise.then(function(e){var t=_.find(g.vtigerAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VtigerAccount properly saved!",msg:g.vtigerAccount.name?g.vtigerAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intVtigerAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intVtigerAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVtigerAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The vtigerAccount will be deleted.").ariaLabel("Delete VtigerAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intVtigerAccount.delete({id:g.vtigerAccount.id}).$promise.then(function(){_.remove(g.vtigerAccounts,{id:g.vtigerAccount.id}),o.success({title:"VtigerAccount properly deleted!",msg:(g.vtigerAccount.name||"vtigerAccount")+" has been deleted!"}),v(g.vtigerAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intVtigerAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intVtigerAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","vtigerAccounts","vtigerAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditVtigerAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intVtigerField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intVtigerField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intVtigerField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.vtigerAccount={},o.vtigerConfiguration={},o.configurations=[],o.selectedVtigerConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.vtigerAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intVtigerAccount.getConfigurations({id:o.vtigerAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getVtigerConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getVtigerConfiguration=function(e){o.vtigerConfiguration=o.configurations[e],o.selectedVtigerConfiguration=e,i.intVtigerConfiguration.getSubjects({id:o.vtigerConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intVtigerConfiguration.getDescriptions({id:o.vtigerConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intVtigerConfiguration.getFields({id:o.vtigerConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditVtigerConfiguration=function(e,t){a.show({controller:"CreateOrEditVtigerConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/vtigerAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{vtigerConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getVtigerConfiguration(0)})},o.deleteVtigerConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the vtigerConfiguration?").htmlContent("<b>"+(t.name||"vtigerConfiguration")+"</b> will be deleted.").ariaLabel("delete vtigerConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intVtigerConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"VtigerConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getVtigerConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.vtigerConfiguration.id},o.vtigerConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditVtigerAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/vtigerAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.vtigerConfiguration,account:o.vtigerAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditVtigerAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/vtigerAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.vtigerConfiguration,account:o.vtigerAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditVtigerAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/vtigerAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.vtigerConfiguration,account:o.vtigerAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("VtigerAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_VTIGERCONFIGURATION",g.vtigerConfiguration=angular.copy(l),g.configurations=r,g.newVtigerConfiguration=!1,g.vtigerConfiguration||(g.vtigerConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_VTIGERCONFIGURATION",g.newVtigerConfiguration=!0),g.addNewVtigerConfiguration=function(){g.errors=[],d.intVtigerAccount.addConfiguration({id:t.params.id},g.vtigerConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"VtigerConfiguration properly created",msg:g.vtigerConfiguration.name?g.vtigerConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intVtigerConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intVtigerConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVtigerConfiguration=function(){g.errors=[],d.intVtigerConfiguration.update({id:g.vtigerConfiguration.id},g.vtigerConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VtigerConfiguration properly saved!",msg:g.vtigerConfiguration.name?g.vtigerConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intVtigerConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intVtigerConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVtigerConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The vtigerConfiguration will be deleted.").ariaLabel("Delete VtigerConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intVtigerConfiguration.delete({id:g.vtigerConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.vtigerConfiguration.id}),o.success({title:"VtigerConfiguration properly deleted!",msg:(g.vtigerConfiguration.name||"vtigerConfiguration")+" has been deleted!"}),v(g.vtigerConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intVtigerConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intVtigerConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","vtigerConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditVtigerConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intVtigerField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intVtigerField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intVtigerField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intVtigerAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditVtigerAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.vtigerAccount=c||e.params.vtigerAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoVtigerAccounts=function(){e.go("app.integrations.vtigerAccounts")},u.saveVtigerAccount=function(){r.intVtigerAccount.update({id:u.vtigerAccount.id},u.vtigerAccount).$promise.then(function(){l.success({title:"VtigerAccount updated!",msg:u.vtigerAccount.name?u.vtigerAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintVtigerAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","vtigerAccount","userProfileSection"],angular.module("app.integrations").controller("VtigerAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.vtigerAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="vtigerAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedVtigerAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,description,username,accessKey,remoteUri,serverUrl",limit:10,page:1},b.editstate=function(e,t){n.go("app.integrations.vtigerAccounts.edit",{id:e.id,vtigerAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intVtigerAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"VtigerAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"VtigerAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("vtigerAccount")+"?").htmlContent("<b>"+(e.name||"vtigerAccount")+"</b> will be deleted.").ariaLabel("delete vtigerAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getVtigerAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intVtigerAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="VtigerAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditVtigerAccount=function(e,t){i.show({controller:"CreateOrEditVtigerAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/vtigerAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{vtigerAccount:t,vtigerAccounts:b.vtigerAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteVtigerAccount=S,b.exportSelectedVtigerAccounts=function(){var e=angular.copy(b.selectedVtigerAccounts);return b.selectedVtigerAccounts=[],e},b.deleteSelectedVtigerAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected vtigerAccounts?").htmlContent("<b>"+b.selectedVtigerAccounts.length+" selected</b> will be deleted.").ariaLabel("delete VtigerAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedVtigerAccounts.forEach(function(e){S(e)}),b.selectedVtigerAccounts=[]})},b.deselectVtigerAccounts=function(){b.selectedVtigerAccounts=[]},b.selectAllVtigerAccounts=function(){b.selectedVtigerAccounts=b.vtigerAccounts.rows};var A=!0,E=1;function y(e){b.vtigerAccounts=e||{count:0,rows:[]}}function S(e){m.intVtigerAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.vtigerAccounts.rows,{id:e.id}),b.vtigerAccounts.count-=1,b.vtigerAccounts.rows.length||b.getVtigerAccounts(),p.success({title:_.startCase("VtigerAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintVtigerAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintVtigerAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getVtigerAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","vtigerAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("VtigerAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_ZENDESKACCOUNT",g.zendeskAccount=angular.copy(l),g.zendeskAccounts=r,g.newZendeskAccount=!1,g.zendeskAccount||(g.zendeskAccount={type:"integrationTab",authType:"password",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_ZENDESKACCOUNT",g.newZendeskAccount=!0),g.addNewZendeskAccount=function(){g.errors=[],d.intZendeskAccount.save(g.zendeskAccount).$promise.then(function(e){g.zendeskAccounts.unshift(e.toJSON()),o.success({title:"ZendeskAccount properly created",msg:g.zendeskAccount.name?g.zendeskAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZendeskAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZendeskAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveZendeskAccount=function(){g.errors=[],d.intZendeskAccount.update({id:g.zendeskAccount.id},g.zendeskAccount).$promise.then(function(e){var t=_.find(g.zendeskAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZendeskAccount properly saved!",msg:g.zendeskAccount.name?g.zendeskAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZendeskAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZendeskAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteZendeskAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The zendeskAccount will be deleted.").ariaLabel("Delete ZendeskAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intZendeskAccount.delete({id:g.zendeskAccount.id}).$promise.then(function(){_.remove(g.zendeskAccounts,{id:g.zendeskAccount.id}),o.success({title:"ZendeskAccount properly deleted!",msg:(g.zendeskAccount.name||"zendeskAccount")+" has been deleted!"}),v(g.zendeskAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZendeskAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZendeskAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","zendeskAccounts","zendeskAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditZendeskAccountDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intZendeskField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intZendeskField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intZendeskField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intZendeskAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditZendeskAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.zendeskAccount=c||e.params.zendeskAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoZendeskAccounts=function(){e.go("app.integrations.zendeskAccounts")},u.saveZendeskAccount=function(){r.intZendeskAccount.update({id:u.zendeskAccount.id},u.zendeskAccount).$promise.then(function(){l.success({title:"ZendeskAccount updated!",msg:u.zendeskAccount.name?u.zendeskAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintZendeskAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","zendeskAccount","userProfileSection"],angular.module("app.integrations").controller("ZendeskAccountController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intZendeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intZendeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intZendeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.zendeskAccount={},o.zendeskConfiguration={},o.zendeskConfigurations=[],o.selectedZendeskConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.zendeskAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intZendeskAccount.getConfigurations({id:o.zendeskAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.zendeskConfigurations=e.rows?e.rows:[],o.zendeskConfigurations.length&&o.getZendeskConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getZendeskConfiguration=function(e){o.zendeskConfiguration=o.zendeskConfigurations[e],o.selectedZendeskConfiguration=e,i.intZendeskConfiguration.getSubjects({id:o.zendeskConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intZendeskConfiguration.getDescriptions({id:o.zendeskConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intZendeskConfiguration.getFields({id:o.zendeskConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.intZendeskConfiguration.getTags({id:o.zendeskConfiguration.id}).$promise.then(function(e){o.selectedTags=e.rows?_.map(e.rows,"id"):[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditZendeskConfiguration=function(e,t){a.show({controller:"CreateOrEditZendeskConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zendeskAccounts/edit/zendeskConfigurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{zendeskConfiguration:t,zendeskConfigurations:o.zendeskConfigurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getZendeskConfiguration(0)})},o.deleteZendeskConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the zendeskConfiguration?").htmlContent("<b>"+(t.name||"zendeskConfiguration")+"</b> will be deleted.").ariaLabel("delete zendeskConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intZendeskConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.zendeskConfigurations,{id:t.id}),s.success({title:"ZendeskConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getZendeskConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.zendeskConfiguration.id},o.zendeskConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedTags=[],o.selectTagsChanged=function(e){i.intZendeskConfiguration.setTags({id:o.zendeskConfiguration.id,ids:o.selectedTags}).$promise.then(function(){s.success({title:"Tags set!",msg:"Tags has been set!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ADDTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},i.tag.get({nolimit:!0,sort:"name"}).$promise.then(function(e){o.tags=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditZendeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zendeskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.zendeskConfiguration,account:o.zendeskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditZendeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zendeskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.zendeskConfiguration,account:o.zendeskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditZendeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zendeskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.zendeskConfiguration,account:o.zendeskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("ZendeskAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_ZENDESKCONFIGURATION",g.zendeskConfiguration=angular.copy(l),g.zendeskConfigurations=r,g.newZendeskConfiguration=!1,g.zendeskConfiguration||(g.zendeskConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_ZENDESKCONFIGURATION",g.newZendeskConfiguration=!0),g.addNewZendeskConfiguration=function(){g.errors=[],d.intZendeskAccount.addConfiguration({id:t.params.id},g.zendeskConfiguration).$promise.then(function(e){g.zendeskConfigurations.unshift(e.toJSON()),o.success({title:"ZendeskConfiguration properly created",msg:g.zendeskConfiguration.name?g.zendeskConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZendeskConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZendeskConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveZendeskConfiguration=function(){g.errors=[],d.intZendeskConfiguration.update({id:g.zendeskConfiguration.id},g.zendeskConfiguration).$promise.then(function(e){var t=_.find(g.zendeskConfigurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZendeskConfiguration properly saved!",msg:g.zendeskConfiguration.name?g.zendeskConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZendeskConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZendeskConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteZendeskConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The zendeskConfiguration will be deleted.").ariaLabel("Delete ZendeskConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intZendeskConfiguration.delete({id:g.zendeskConfiguration.id}).$promise.then(function(){_.remove(g.zendeskConfigurations,{id:g.zendeskConfiguration.id}),o.success({title:"ZendeskConfiguration properly deleted!",msg:(g.zendeskConfiguration.name||"zendeskConfiguration")+" has been deleted!"}),v(g.zendeskConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZendeskConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZendeskConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","zendeskConfigurations","zendeskConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditZendeskConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.zendeskAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="zendeskAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedZendeskAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,type,username,remoteUri,authType,password,token,serverUrl,description",limit:10,page:1},b.arraytype=_.keyBy([{option:"Integration_Tab",value:"'integrationTab'"},{option:"New_Tab",value:"'newTab'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayauthType=_.keyBy([{option:"Password",value:"'password'"},{option:"Token",value:"'token'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.integrations.zendeskAccounts.edit",{id:e.id,zendeskAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intZendeskAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"ZendeskAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"ZendeskAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("zendeskAccount")+"?").htmlContent("<b>"+(e.name||"zendeskAccount")+"</b> will be deleted.").ariaLabel("delete zendeskAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getZendeskAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intZendeskAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ZendeskAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditZendeskAccount=function(e,t){i.show({controller:"CreateOrEditZendeskAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zendeskAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{zendeskAccount:t,zendeskAccounts:b.zendeskAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteZendeskAccount=S,b.exportSelectedZendeskAccounts=function(){var e=angular.copy(b.selectedZendeskAccounts);return b.selectedZendeskAccounts=[],e},b.deleteSelectedZendeskAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected zendeskAccounts?").htmlContent("<b>"+b.selectedZendeskAccounts.length+" selected</b> will be deleted.").ariaLabel("delete ZendeskAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedZendeskAccounts.forEach(function(e){S(e)}),b.selectedZendeskAccounts=[]})},b.deselectZendeskAccounts=function(){b.selectedZendeskAccounts=[]},b.selectAllZendeskAccounts=function(){b.selectedZendeskAccounts=b.zendeskAccounts.rows};var A=!0,E=1;function y(e){b.zendeskAccounts=e||{count:0,rows:[]}}function S(e){m.intZendeskAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.zendeskAccounts.rows,{id:e.id}),b.zendeskAccounts.count-=1,b.zendeskAccounts.rows.length||b.getZendeskAccounts(),p.success({title:_.startCase("ZendeskAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintZendeskAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintZendeskAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getZendeskAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","zendeskAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("ZendeskAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_ZOHOACCOUNT",g.zohoAccount=angular.copy(l),g.zohoAccounts=r,g.newZohoAccount=!1,g.zohoAccount||(g.zohoAccount={host:"zoho.com",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_ZOHOACCOUNT",g.newZohoAccount=!0),g.addNewZohoAccount=function(){g.errors=[],d.intZohoAccount.save(g.zohoAccount).$promise.then(function(e){g.zohoAccounts.unshift(e.toJSON()),o.success({title:"ZohoAccount properly created",msg:g.zohoAccount.name?g.zohoAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZohoAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZohoAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveZohoAccount=function(){g.errors=[],d.intZohoAccount.update({id:g.zohoAccount.id},g.zohoAccount).$promise.then(function(e){var t=_.find(g.zohoAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZohoAccount properly saved!",msg:g.zohoAccount.name?g.zohoAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZohoAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZohoAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteZohoAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The zohoAccount will be deleted.").ariaLabel("Delete ZohoAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intZohoAccount.delete({id:g.zohoAccount.id}).$promise.then(function(){_.remove(g.zohoAccounts,{id:g.zohoAccount.id}),o.success({title:"ZohoAccount properly deleted!",msg:(g.zohoAccount.name||"zohoAccount")+" has been deleted!"}),v(g.zohoAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZohoAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZohoAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","zohoAccounts","zohoAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditZohoAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intZohoField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intZohoField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intZohoField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.zohoAccount={},o.zohoConfiguration={},o.configurations=[],o.selectedZohoConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.zohoAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intZohoAccount.getConfigurations({id:o.zohoAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getZohoConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getZohoConfiguration=function(e){o.zohoConfiguration=o.configurations[e],o.selectedZohoConfiguration=e,i.intZohoConfiguration.getSubjects({id:o.zohoConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intZohoConfiguration.getDescriptions({id:o.zohoConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intZohoConfiguration.getFields({id:o.zohoConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditZohoConfiguration=function(e,t){a.show({controller:"CreateOrEditZohoConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zohoAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{zohoConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getZohoConfiguration(0)})},o.deleteZohoConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the zohoConfiguration?").htmlContent("<b>"+(t.name||"zohoConfiguration")+"</b> will be deleted.").ariaLabel("delete zohoConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intZohoConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"ZohoConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getZohoConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.zohoConfiguration.id},o.zohoConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditZohoAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zohoAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.zohoConfiguration,account:o.zohoAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditZohoAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zohoAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.zohoConfiguration,account:o.zohoAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditZohoAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zohoAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.zohoConfiguration,account:o.zohoAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("ZohoAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_ZOHOCONFIGURATION",g.zohoConfiguration=angular.copy(l),g.configurations=r,g.newZohoConfiguration=!1,g.zohoConfiguration||(g.zohoConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_ZOHOCONFIGURATION",g.newZohoConfiguration=!0),g.addNewZohoConfiguration=function(){g.errors=[],d.intZohoAccount.addConfiguration({id:t.params.id},g.zohoConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"ZohoConfiguration properly created",msg:g.zohoConfiguration.name?g.zohoConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZohoConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZohoConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveZohoConfiguration=function(){g.errors=[],d.intZohoConfiguration.update({id:g.zohoConfiguration.id},g.zohoConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZohoConfiguration properly saved!",msg:g.zohoConfiguration.name?g.zohoConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZohoConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZohoConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteZohoConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The zohoConfiguration will be deleted.").ariaLabel("Delete ZohoConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intZohoConfiguration.delete({id:g.zohoConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.zohoConfiguration.id}),o.success({title:"ZohoConfiguration properly deleted!",msg:(g.zohoConfiguration.name||"zohoConfiguration")+" has been deleted!"}),v(g.zohoConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZohoConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZohoConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","zohoConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditZohoConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intZohoField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intZohoField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intZohoField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intZohoAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditZohoAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.zohoAccount=c||e.params.zohoAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoZohoAccounts=function(){e.go("app.integrations.zohoAccounts")},u.saveZohoAccount=function(){r.intZohoAccount.update({id:u.zohoAccount.id},u.zohoAccount).$promise.then(function(){l.success({title:"ZohoAccount updated!",msg:u.zohoAccount.name?u.zohoAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintZohoAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","zohoAccount","userProfileSection"],angular.module("app.integrations").controller("ZohoAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.zohoAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="zohoAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedZohoAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,host,authToken,serverUrl,description",limit:10,page:1},b.arrayhost=_.keyBy([{option:"zoho.com",value:"'zoho.com'"},{option:"zoho.eu",value:"'zoho.eu'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.integrations.zohoAccounts.edit",{id:e.id,zohoAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intZohoAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"ZohoAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"ZohoAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("zohoAccount")+"?").htmlContent("<b>"+(e.name||"zohoAccount")+"</b> will be deleted.").ariaLabel("delete zohoAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getZohoAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intZohoAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ZohoAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditZohoAccount=function(e,t){i.show({controller:"CreateOrEditZohoAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zohoAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{zohoAccount:t,zohoAccounts:b.zohoAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteZohoAccount=S,b.exportSelectedZohoAccounts=function(){var e=angular.copy(b.selectedZohoAccounts);return b.selectedZohoAccounts=[],e},b.deleteSelectedZohoAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected zohoAccounts?").htmlContent("<b>"+b.selectedZohoAccounts.length+" selected</b> will be deleted.").ariaLabel("delete ZohoAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedZohoAccounts.forEach(function(e){S(e)}),b.selectedZohoAccounts=[]})},b.deselectZohoAccounts=function(){b.selectedZohoAccounts=[]},b.selectAllZohoAccounts=function(){b.selectedZohoAccounts=b.zohoAccounts.rows};var A=!0,E=1;function y(e){b.zohoAccounts=e||{count:0,rows:[]}}function S(e){m.intZohoAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.zohoAccounts.rows,{id:e.id}),b.zohoAccounts.count-=1,b.zohoAccounts.rows.length||b.getZohoAccounts(),p.success({title:_.startCase("ZohoAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintZohoAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintZohoAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getZohoAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","zohoAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("ZohoAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="JSCRIPTY.EDIT_PROJECT",g.project=angular.copy(l),g.projects=r,g.newProject=!1,g.project||(g.project={enableUncompleteSave:!0},g.title="JSCRIPTY.NEW_PROJECT",g.newProject=!0),g.addNewProject=function(){g.errors=[],d.jscriptyProject.save(g.project).$promise.then(function(e){g.projects.unshift(e.toJSON()),o.success({title:"Project properly created",msg:g.project.name?g.project.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.jscriptyProject.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.jscriptyProject.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveProject=function(){g.errors=[],d.jscriptyProject.update({id:g.project.id},g.project).$promise.then(function(e){var t=_.find(g.projects,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Project properly saved!",msg:g.project.name?g.project.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.jscriptyProject.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.jscriptyProject.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteProject=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The project will be deleted.").ariaLabel("Delete Project").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.jscriptyProject.delete({id:g.project.id}).$promise.then(function(){_.remove(g.projects,{id:g.project.id}),o.success({title:"Project properly deleted!",msg:(g.project.name||"project")+" has been deleted!"}),v(g.project)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.jscriptyProject.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.jscriptyProject.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","projects","project","api","Auth","license","setting","crudPermissions"],angular.module("app.jscripty").controller("CreateOrEditProjectDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;o.project={},o.localizationMap=s;var r=new Date;r.setHours(0,0,0,0),o.pickerModel={dateStart:r,dateEnd:null,selectedTemplate:"TD"},o.init=function(e){o.project=e,o.getAnswers()},o.getSummary=function(){return a.jscriptyProject.getSummary({id:o.project.id,startTime:{$gte:o.pickerModel.dateStart,$lte:moment(o.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format()},nolimit:!0}).$promise.then(function(e){if(void 0!==e.length){var t=[e.buffer],n=new Blob(t,{type:e.type}),a=window.document.createElement("a");a.setAttribute("href",URL.createObjectURL(n)),a.setAttribute("download","jscriptyProjectSummary_"+o.project.id+".csv"),a.click()}else i.info({title:"EXPORT",msg:"No answers available"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.jscriptyProject.getSummary",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getAnswers=function(){return o.hasIdAnswers=!1,a.jscriptyProject.getAnswers({id:o.project.id,sort:"-createdAt,questionId",createdAt:{$gte:o.pickerModel.dateStart,$lte:moment(o.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format()},nolimit:!0}).$promise.then(function(e){if(e&&e.rows&&e.hasOwnProperty("count")){o.answers={};for(var t=0,n=e.count;t<n;t++)e.rows[t].questionId&&(o.hasIdAnswers=!0,o.answers.hasOwnProperty(e.rows[t].questionId)||(o.answers[e.rows[t].questionId]={question:e.rows[t].question,answers:{},sum:0}),""===e.rows[t].answer&&(e.rows[t].answer="NO_ANSWER"),o.answers[e.rows[t].questionId].answers[e.rows[t].answer]?o.answers[e.rows[t].questionId].answers[e.rows[t].answer]+=1:o.answers[e.rows[t].questionId].answers[e.rows[t].answer]=1,o.answers[e.rows[t].questionId].sum+=1)}}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETANSWERS",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$mdDialog","$document","$window","api","toasty","dateFilterLocalizationFactory"],angular.module("app.jscripty").controller("ProjectAnswersController",e)}(),function(){"use strict";angular.module("app.jscripty").controller("ProjectBuilderController",function(){var t=this;t.project={},t.optionsBuilder={questionTypes:["text","textarea","radio","checkbox","select","number","date","time","email","range","url"],elementTypes:["question","paragraph"]},t.init=function(e){t.project=e,_.isObjectLike(e.formData)?t.project.formData=e.formData:t.isJsonString(e.formData)?t.project.formData=JSON.parse(e.formData):t.project.formData={}},t.isJsonString=function(e){if(_.isNil(e))return!1;try{JSON.parse(e)}catch(e){return!1}return!0}})}(),function(){"use strict";function e(t,n,a,e,i,s,o){var r=this;function l(e){t.hide(e)}r.newProject=!0,r.project=angular.copy(i),r.projects=s,r.title=o.instant("JSCRIPTY.CLONE_PROJECT"),i&&i.name&&(r.title+=": "+i.name),r.cloneProject=function(){return e.jscriptyProject.clone({id:i.id},r.project).$promise.then(function(e){r.projects.unshift(e.toJSON()),a.success({title:"Project properly cloned",msg:r.project.name?r.project.name+" has been cloned!":""}),n.go("app.jscripty.projects.edit",{id:e.id}),l(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){r.errors=e.data.errors||[{message:e.toString(),type:"api.jscriptyProject.clone"}];for(var t=0;t<e.data.errors.length;t+=1)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.jscriptyProject.clone",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$mdDialog","$state","toasty","api","project","projects","$translate"],angular.module("app.jscripty").controller("ProjectcloneController",e)}(),function(){"use strict";function e(a,i,t){var o=this;o.project={},o.responseData={},o.formViewer={},o.init=function(e){o.project=e,t.$on("mwForm.pageEvents.pageCurrentChanged",function(e,t){if(t.currentPage&&o.project.formData&&o.project.formData.pages)for(var n=0,a=o.project.formData.pages.length;n<a;n++)if(t.currentPage.number<n+1&&o.project.formData.pages[n].elements)for(var i=0,s=o.project.formData.pages[n].elements.length;i<s;i++)"question"===o.project.formData.pages[n].elements[i].type&&o.project.formData.pages[n].elements[i].question&&delete o.responseData[o.project.formData.pages[n].elements[i].question.id]})},o.onSubmit=function(e){var t=a.defer(),n=i.confirm().title("Would you like to save your survey?").textContent("").ariaLabel("survey").targetEvent(e).ok("SAVE").cancel("CANCEL");return i.show(n).then(function(){t.resolve(!0)},function(){t.reject()}),t.promise},o.resetViewer=function(){o.formViewer.reset&&o.formViewer.reset()}}e.$inject=["$q","$mdDialog","$scope"],angular.module("app.jscripty").controller("ProjectViewerController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.project={},c.projectSessions={count:0,rows:[]},c.selectedProjectSessions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,starttime,endtime,membername,calleridnum,completed",sort:"-starttime",limit:10,page:1},c.init=function(e,t){c.project=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.project.id,c.getProjectSessions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the session?").htmlContent("<b>"+(e.name||"session")+"</b> will be deleted.").ariaLabel("delete session").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getProjectSessions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.jscriptyProject.getSessions(c.query,p).$promise},c.createOrEditProjectSession=function(e,t){s.show({controller:"CreateOrEditSessionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/sessions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:c.project,session:t,sessions:c.projectSessions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.showQuestionsProjectSession=function(e,n){s.show({controller:"ShowQuestionsSessionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/sessions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,resolve:{questions:["apiResolver","$stateParams",function(e,t){return e.resolve("jscriptySessionReport@getQuestions",{fields:"question,answer",sort:"id",id:n.id})}]},locals:{project:c.project,session:n}})},c.exportSelectedProjectSessions=function(){var e=angular.copy(c.selectedProjectSessions);return c.selectedProjectSessions=[],e},c.deleteProjectSession=g,c.deleteSelectedProjectSessions=function(e){var t=s.confirm().title("Are you sure want to delete the selected sessions?").htmlContent("<b>"+c.selectedProjectSessions.length+" selected</b> will be deleted.").ariaLabel("delete sessions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedProjectSessions.forEach(function(e){g(e)}),c.selectedProjectSessions=[]})};var m=!0,u=1;function p(e){c.projectSessions=e||{count:0,rows:[]}}function g(e){l.jscriptySessionReport.delete({id:e.id}).$promise.then(function(){_.remove(c.projectSessions.rows,{id:e.id}),c.projectSessions.count-=1,c.projectSessions.rows.length||c.getProjectSessions(),r.success({title:"Session deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETjscriptyProject"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETjscriptyProject",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getProjectSessions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.jscripty").controller("ProjectSessionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l){this.title="JSCRIPTY.SESSION_RESULTS",this.session=s,this.questions=o,this.project=r,this.closeDialog=function(e){a.hide(e)}}e.$inject=["$scope","$state","$location","$mdDialog","toasty","session","questions","project","api"],angular.module("app.jscripty").controller("ShowQuestionsSessionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.project=c||e.params.project||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.clonedialog=function(e,t){n.show({controller:"ProjectcloneController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/clone/clone.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{project:e,projects:u.projects?u.projects.rows:[],crudPermissions:u.crudPermissions}})},u.alert=l.info,u.gotoProjects=function(){e.go("app.jscripty.projects")},u.saveProject=function(){r.jscriptyProject.update({id:u.project.id},u.project).$promise.then(function(){l.success({title:"Project updated!",msg:u.project.name?u.project.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETjscriptyProject",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","project","userProfileSection"],angular.module("app.jscripty").controller("JscriptyProjectController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.projects=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="projects",b.listOrder="",b.listOrderAsc=null,b.selectedProjects=[],b.query={fields:"createdAt,updatedAt,id,name,enableUncompleteSave,description,formData",sort:"-updatedAt",limit:10,page:1},b.editstate=function(e,t){n.go("app.jscripty.projects.edit",{id:e.id,project:e,crudPermissions:b.crudPermissions})},b.clonedialog=function(e,t){i.show({controller:"ProjectcloneController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{project:e,projects:b.projects?b.projects.rows:[],crudPermissions:b.crudPermissions}})},b.sessionsgoto=function(e,t){n.go("app.jscripty.projects.edit",{id:e.id,tab:3})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("project")+"?").htmlContent("<b>"+(e.name||"project")+"</b> will be deleted.").ariaLabel("delete project").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getProjects=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.jscriptyProject.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Projects",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditProject=function(e,t){i.show({controller:"CreateOrEditProjectDialogController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:t,projects:b.projects.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteProject=S,b.exportSelectedProjects=function(){var e=angular.copy(b.selectedProjects);return b.selectedProjects=[],e},b.deleteSelectedProjects=function(e){var t=i.confirm().title("Are you sure want to delete the selected projects?").htmlContent("<b>"+b.selectedProjects.length+" selected</b> will be deleted.").ariaLabel("delete Projects").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedProjects.forEach(function(e){S(e)}),b.selectedProjects=[]})},b.deselectProjects=function(){b.selectedProjects=[]},b.selectAllProjects=function(){b.selectedProjects=b.projects.rows};var A=!0,E=1;function y(e){b.projects=e||{count:0,rows:[]}}function S(e){m.jscriptyProject.delete({id:e.id}).$promise.then(function(){_.remove(b.projects.rows,{id:e.id}),b.projects.count-=1,b.projects.rows.length||b.getProjects(),p.success({title:_.startCase("Project")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEjscriptyProject"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEjscriptyProject",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getProjects())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","projects","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.jscripty").controller("JscriptyProjectsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MAIL.EDIT_MAILACCOUNT",g.mailAccount=angular.copy(l),g.mailAccounts=r,g.newMailAccount=!1,g.mailAccount||(g.mailAccount={active:!0,cservice:"null",cauthentication:!0,fontSize:13,waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},g.title="MAIL.NEW_MAILACCOUNT",g.newMailAccount=!0),t.params.id&&(g.mailAccount.MailAccountId=t.params.id),g.addNewMailAccount=function(){g.errors=[],d.mailAccount.save(g.mailAccount).$promise.then(function(e){g.mailAccounts.unshift(e.toJSON()),o.success({title:"MailAccount properly created",msg:g.mailAccount.name?g.mailAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMailAccount=function(){g.errors=[],d.mailAccount.update({id:g.mailAccount.id},g.mailAccount).$promise.then(function(e){var t=_.find(g.mailAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailAccount properly saved!",msg:g.mailAccount.name?g.mailAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMailAccount=function(e){if(g.mailAccount.service)return o.error({title:"Mail Account not deleted!",msg:"You can't remove service account"});g.errors=[];var t=a.confirm().title("Are you sure?").content("The mailAccount will be deleted.").ariaLabel("Delete MailAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.mailAccount.delete({id:g.mailAccount.id}).$promise.then(function(){_.remove(g.mailAccounts,{id:g.mailAccount.id}),o.success({title:"MailAccount properly deleted!",msg:(g.mailAccount.name||"mailAccount")+" has been deleted!"}),v(g.mailAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.lists,{id:e.resourceId})}),n=null;if(g.mailAccount&&(n=_.find(g.lists,{id:Number(g.mailAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.lists,{id:n.id});a.canSelect=!1,t.push(a)}g.lists=t})}else{var n=[],a=null;g.mailAccount&&(a=_.find(g.lists,{id:Number(g.mailAccount.ListId)}));for(var i=0;i<g.lists.length;i++)a&&g.lists[i].id===a.id&&(g.lists[i].canSelect=!1,n.push(g.lists[i]));g.lists=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","mailAccounts","mailAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.mail").controller("CreateOrEditMailAccountDialogController",e)}(),function(){"use strict";function e(o,i,a,s,e){var r=this;function t(e,t){if(r.mailAccountApps.rows.length){var n=r.mailAccountApps.rows[t]?r.mailAccountApps.rows[t]:r.mailAccountApps.rows[0];i.show({controller:"EditMailAccountApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccountApp:n,mailAccount:r.mailAccount,crudPermissions:r.crudPermissions}}).then(function(e){e&&(e.id?r.mailAccountApps.rows[t]=e:r.mailAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function l(){for(var e=1,t=[],n=0;n<r.mailAccountApps.rows.length;n++,0){var a=r.mailAccountApps.rows[n],i=[],s=[];a.intervals="*,*,*,*"!==a.interval?[a.interval]:a.IntervalId?_.map(_.filter(r.intervals.rows,{IntervalId:a.IntervalId}),"interval"):[],a.context=r.mailAccount.context,a.exten=r.mailAccount.exten,a.type&&(a.type=a.type.toLowerCase()),a.priority=i.length?_.last(i).priority+1:e,e=(s.length?_.last(s).priority:a.priority)+1,t=_.concat(t,i,[a],s)}o.mailAccount.addApplications({id:r.mailAccount.id},_.sortBy(t,"priority")).$promise.then(function(e){r.mailAccountApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){r.mailAccountApps=e||{count:0,rows:[]}}r.currentUser=e.getCurrentUser(),r.mailAccount={},r.mailAccountApps={count:0,rows:[]},r.selectedMailAccountApps=[],r.crudPermissions,r.query={sort:"priority"},r.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",types:["always","custom","list"],fields:[],isApp:!1},{app:"noop",appType:"noop",type:"noop",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,fields:[{title:"Value",name:"value",type:"text",param:0}]},{app:"system",appType:"system",type:"system",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,extraApi:[{name:"variables",field:{name:"variable",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1012}}],fields:[{title:"Command",name:"command",type:"text",required:!0,param:0},{title:"Variable",name:"variable",type:"apiselect",values:"variables",value:"variable.name",option:"variable.name",defaultValues:[{value:"''",option:"None"}],defaultValue:"''",param:1}]},{app:"gotop",appType:"gotop",type:"goto",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Priority",name:"priority",type:"number",required:!0,min:0,param:0}]},{app:"gotoif",appType:"gotoif",type:"gotoif",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Condition",name:"condition",type:"text",required:!0,param:0},{title:"truepriority",name:"truepriority",type:"number",min:1,required:!0,param:1},{title:"falsepriority",name:"falsepriority",type:"number",min:1,required:!0,param:2}]},{app:"queue",appType:"queue",foreignKey:"MailQueueId",type:"queue",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"queues",field:{name:"queue",key:"name"},route:"mailQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:601}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",defaultValue:300,required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:300,param:1}]},{app:"agent",appType:"agent",type:"agent",foreignKey:"UserId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"agents",field:{name:"agent",key:"name"},route:"user",filters:{fields:"id,name",sort:"name",nolimit:!0,role:"agent"},permissions:{section:202}}],fields:[{title:"Agent",name:"agent",type:"apiselect",values:"agents",value:"agent.name",option:"agent.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:30,param:1}]},{app:"autoreply",appType:"autoreply",type:"autoreply",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"times",name:"times",type:"select",defaultValue:"1",values:[{option:"One Time",value:"1"},{option:"Always",value:"0"}],required:!0,param:0},{title:"Text",name:"text",type:"html",required:!0,param:1}]},{app:"close",appType:"close",type:"close",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Disposition",name:"disposition",type:"text",required:!0,param:0}]},{app:"tag",appType:"tag",type:"tag",foreignKey:"TagId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"tags",field:{name:"tag",key:"name"},route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1008}}],fields:[{title:"Tag",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",required:!0,param:0}]}],["app"]),{isApp:!1}),r.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},r.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){l()}},r.init=function(e,t){r.mailAccount=e,r.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},r.applications.disabled=!r.crudPermissions.canEdit,r.query.id=e.id,r.query.isApp=!0,r.query.nolimit=!0,r.getMailAccountApps(),r.getIntervals()},r.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){r.mailAccountApps.rows.splice(t,1),l()},function(){console.log("CANCEL")})},r.getMailAccountApps=function(){r.promise=o.mailAccount.getApplications(r.query,n).$promise},r.editMailAccountApp=t,r.editInterval=function(e,t){if(r.mailAccountApps.rows.length){var n=r.mailAccountApps.rows[t]?r.mailAccountApps.rows[t]:r.mailAccountApps.rows[0];i.show({controller:"EditMailAccountAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:r.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,l())})}},r.deleteMailAccountApp=function(e){_.remove(r.mailAccountApps.rows,{id:e.id}),l(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},r.deleteSelectedMailAccountApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+r.selectedMailAccountApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){r.selectedMailAccountApps.forEach(function(e){_.remove(r.mailAccountApps.rows,{id:e.id})}),r.selectedMailAccountApps=[],l()})},r.rewriteRouting=l,r.getIntervals=function(){return o.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){r.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.mail").controller("MailAccountActionsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.mailAccount.getAgents({id:c.mailAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserMailAccount?"penalty "+e.UserMailAccount.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.mailAccount=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.mailAccount.removeAgents({id:c.mailAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.mailAccount.addAgents({id:c.mailAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("MAIL.ALL_AGENTS"),labelSelected:r.instant("MAIL.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","mailAccount","mailAccounts","realtime","$translate","Auth","crudPermissions"],angular.module("app.mail").controller("MailAccountagentaddController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.agent=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agent.appdata)switch(l.agent.appType?l.agent.appType.toLowerCase():l.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agent.appdata.split(",");l.agent.key=d[0],l.agent.language=d[1],l.agent.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agent.appdata.split(",");l.agent.accesskeyid=d[0],l.agent.secretaccesskey=d[1],l.agent.lexregion=d[2],l.agent.botname=d[3],l.agent.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agent.appdata.split(",");l.agent.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agent.text=d.slice(1,d.length).join(",");break;case"message":l.agent.text=l.agent.appdata;break;case"set":l.agent.name=l.agent.appdata.split("=")[0],l.agent.value=l.agent.appdata.split("=")[1];break;case"agi":l.agent.project=l.agent.appdata;break;default:var c=l.agent.appdata.split(",");l.agent.agent=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.agent.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.agent.timeout=30;function m(e){t.hide(e)}l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outbounddial"===l.agent.appType.toLowerCase()&&(l.agent.prefix=l.agent.phone?l.agent.phone.split("$")[0]:void 0,l.agent.callerId=l.agent.callerID?"CALLERID(all)="+l.agent.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outboundDial"===l.agent.appType&&(l.agent.phone=i.cutdigits?(l.agent.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agent.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agent.options+="U(xcally-mixmonitor-context)"):l.agent.options=l.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.agents,{name:l.agent.agent});t&&(l.agent.UserId=t.id);if(l.agent.appType&&"custom"===l.agent.appType);else switch((l.agent.app||l.agent.appType).toLowerCase()){case"set":l.agent.appdata=l.agent.name+"="+l.agent.value;break;case"custom":break;default:e[0]=l.agent.agent,e[1]=l.agent.timeout,l.agent.appdata=e.join(",")}m(l.agent)},l.closeDialog=m,o.hasRole("admin")?s.user.get({fields:"id,name",sort:"name",nolimit:"true",role:"agent"}).$promise.then(function(e){l.agents=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.user.get({fields:"id,name",sort:"name",nolimit:"true",role:"agent"}).$promise.then(function(e){l.agents=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.agents,{id:e.resourceId})}),n=null;if(l.agent&&(n=_.find(l.agents,{name:l.agent.agent})),n&&!_.some(t,["id",n.id])){var a=_.find(l.agents,{id:n.id});a.canSelect=!1,t.push(a)}l.agents=t})}else{var n=[],a=null;l.agent&&(a=_.find(l.agents,{name:l.agent.agent}));for(var i=0;i<l.agents.length;i++)a&&l.agents[i].id===a.id&&(l.agents[i].canSelect=!1,n.push(l.agents[i]));l.agents=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.autoreply=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.autoreply.appdata)switch(l.autoreply.appType?l.autoreply.appType.toLowerCase():l.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.autoreply.appdata.split(",");l.autoreply.key=d[0],l.autoreply.language=d[1],l.autoreply.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.autoreply.appdata.split(",");l.autoreply.accesskeyid=d[0],l.autoreply.secretaccesskey=d[1],l.autoreply.lexregion=d[2],l.autoreply.botname=d[3],l.autoreply.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.autoreply.appdata.split(",");l.autoreply.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.autoreply.text=d.slice(1,d.length).join(",");break;case"message":l.autoreply.text=l.autoreply.appdata;break;case"set":l.autoreply.name=l.autoreply.appdata.split("=")[0],l.autoreply.value=l.autoreply.appdata.split("=")[1];break;case"agi":l.autoreply.project=l.autoreply.appdata;break;default:var c=l.autoreply.appdata.split(",");l.autoreply.times=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.autoreply.text=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.autoreply.times=1;function m(e){t.hide(e)}l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outbounddial"===l.autoreply.appType.toLowerCase()&&(l.autoreply.prefix=l.autoreply.phone?l.autoreply.phone.split("$")[0]:void 0,l.autoreply.callerId=l.autoreply.callerID?"CALLERID(all)="+l.autoreply.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outboundDial"===l.autoreply.appType&&(l.autoreply.phone=i.cutdigits?(l.autoreply.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.autoreply.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.autoreply.options+="U(xcally-mixmonitor-context)"):l.autoreply.options=l.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(l.autoreply.appType&&"custom"===l.autoreply.appType);else switch((l.autoreply.app||l.autoreply.appType).toLowerCase()){case"set":l.autoreply.appdata=l.autoreply.name+"="+l.autoreply.value;break;case"custom":break;default:e[0]=l.autoreply.times,e[1]=l.autoreply.text,l.autoreply.appdata=e.join(",")}m(l.autoreply)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.close=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.close.appdata)switch(l.close.appType?l.close.appType.toLowerCase():l.close.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.close.appdata.split(",");l.close.key=d[0],l.close.language=d[1],l.close.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.close.appdata.split(",");l.close.accesskeyid=d[0],l.close.secretaccesskey=d[1],l.close.lexregion=d[2],l.close.botname=d[3],l.close.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.close.appdata.split(",");l.close.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.close.text=d.slice(1,d.length).join(",");break;case"message":l.close.text=l.close.appdata;break;case"set":l.close.name=l.close.appdata.split("=")[0],l.close.value=l.close.appdata.split("=")[1];break;case"agi":l.close.project=l.close.appdata;break;default:var c=l.close.appdata.split(",");l.close.disposition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outbounddial"===l.close.appType.toLowerCase()&&(l.close.prefix=l.close.phone?l.close.phone.split("$")[0]:void 0,l.close.callerId=l.close.callerID?"CALLERID(all)="+l.close.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outboundDial"===l.close.appType&&(l.close.phone=i.cutdigits?(l.close.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.close.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.close.options+="U(xcally-mixmonitor-context)"):l.close.options=l.close.options.replace("U(xcally-mixmonitor-context)",""));if(l.close.appType&&"custom"===l.close.appType);else switch((l.close.app||l.close.appType).toLowerCase()){case"set":l.close.appdata=l.close.name+"="+l.close.value;break;case"custom":break;default:e[0]=l.close.disposition,l.close.appdata=e.join(",")}m(l.close)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotoif=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotoif.appdata)switch(l.gotoif.appType?l.gotoif.appType.toLowerCase():l.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotoif.appdata.split(",");l.gotoif.key=d[0],l.gotoif.language=d[1],l.gotoif.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotoif.appdata.split(",");l.gotoif.accesskeyid=d[0],l.gotoif.secretaccesskey=d[1],l.gotoif.lexregion=d[2],l.gotoif.botname=d[3],l.gotoif.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotoif.appdata.split(",");l.gotoif.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotoif.text=d.slice(1,d.length).join(",");break;case"message":l.gotoif.text=l.gotoif.appdata;break;case"set":l.gotoif.name=l.gotoif.appdata.split("=")[0],l.gotoif.value=l.gotoif.appdata.split("=")[1];break;case"agi":l.gotoif.project=l.gotoif.appdata;break;default:var c=l.gotoif.appdata.split(",");l.gotoif.condition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.gotoif.truepriority=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.gotoif.falsepriority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outbounddial"===l.gotoif.appType.toLowerCase()&&(l.gotoif.prefix=l.gotoif.phone?l.gotoif.phone.split("$")[0]:void 0,l.gotoif.callerId=l.gotoif.callerID?"CALLERID(all)="+l.gotoif.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outboundDial"===l.gotoif.appType&&(l.gotoif.phone=i.cutdigits?(l.gotoif.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotoif.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotoif.options+="U(xcally-mixmonitor-context)"):l.gotoif.options=l.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotoif.appType&&"custom"===l.gotoif.appType);else switch((l.gotoif.app||l.gotoif.appType).toLowerCase()){case"set":l.gotoif.appdata=l.gotoif.name+"="+l.gotoif.value;break;case"custom":break;default:e[0]=l.gotoif.condition,e[1]=l.gotoif.truepriority,e[2]=l.gotoif.falsepriority,l.gotoif.appdata=e.join(",")}m(l.gotoif)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotop.appdata)switch(l.gotop.appType?l.gotop.appType.toLowerCase():l.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotop.appdata.split(",");l.gotop.key=d[0],l.gotop.language=d[1],l.gotop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotop.appdata.split(",");l.gotop.accesskeyid=d[0],l.gotop.secretaccesskey=d[1],l.gotop.lexregion=d[2],l.gotop.botname=d[3],l.gotop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotop.appdata.split(",");l.gotop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotop.text=d.slice(1,d.length).join(",");break;case"message":l.gotop.text=l.gotop.appdata;break;case"set":l.gotop.name=l.gotop.appdata.split("=")[0],l.gotop.value=l.gotop.appdata.split("=")[1];break;case"agi":l.gotop.project=l.gotop.appdata;break;default:var c=l.gotop.appdata.split(",");l.gotop.priority=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outbounddial"===l.gotop.appType.toLowerCase()&&(l.gotop.prefix=l.gotop.phone?l.gotop.phone.split("$")[0]:void 0,l.gotop.callerId=l.gotop.callerID?"CALLERID(all)="+l.gotop.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outboundDial"===l.gotop.appType&&(l.gotop.phone=i.cutdigits?(l.gotop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotop.options+="U(xcally-mixmonitor-context)"):l.gotop.options=l.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotop.appType&&"custom"===l.gotop.appType);else switch((l.gotop.app||l.gotop.appType).toLowerCase()){case"set":l.gotop.appdata=l.gotop.name+"="+l.gotop.value;break;case"custom":break;default:e[0]=l.gotop.priority,l.gotop.appdata=e.join(",")}m(l.gotop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditMailAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.noop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.noop.appdata)switch(l.noop.appType?l.noop.appType.toLowerCase():l.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.noop.appdata.split(",");l.noop.key=d[0],l.noop.language=d[1],l.noop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.noop.appdata.split(",");l.noop.accesskeyid=d[0],l.noop.secretaccesskey=d[1],l.noop.lexregion=d[2],l.noop.botname=d[3],l.noop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.noop.appdata.split(",");l.noop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.noop.text=d.slice(1,d.length).join(",");break;case"message":l.noop.text=l.noop.appdata;break;case"set":l.noop.name=l.noop.appdata.split("=")[0],l.noop.value=l.noop.appdata.split("=")[1];break;case"agi":l.noop.project=l.noop.appdata;break;default:var c=l.noop.appdata.split(",");l.noop.value=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outbounddial"===l.noop.appType.toLowerCase()&&(l.noop.prefix=l.noop.phone?l.noop.phone.split("$")[0]:void 0,l.noop.callerId=l.noop.callerID?"CALLERID(all)="+l.noop.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outboundDial"===l.noop.appType&&(l.noop.phone=i.cutdigits?(l.noop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.noop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.noop.options+="U(xcally-mixmonitor-context)"):l.noop.options=l.noop.options.replace("U(xcally-mixmonitor-context)",""));if(l.noop.appType&&"custom"===l.noop.appType);else switch((l.noop.app||l.noop.appType).toLowerCase()){case"set":l.noop.appdata=l.noop.name+"="+l.noop.value;break;case"custom":break;default:e[0]=l.noop.value,l.noop.appdata=e.join(",")}m(l.noop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.queue.queue=300,l.queue.timeout=300;function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.queues,{name:l.queue.queue});t&&(l.queue[_.capitalize("mail")+"QueueId"]=t.id);if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.timeout,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.mailQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.mailQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:601}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.system=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.system.appdata)switch(l.system.appType?l.system.appType.toLowerCase():l.system.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.system.appdata.split(",");l.system.key=d[0],l.system.language=d[1],l.system.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.system.appdata.split(",");l.system.accesskeyid=d[0],l.system.secretaccesskey=d[1],l.system.lexregion=d[2],l.system.botname=d[3],l.system.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.system.appdata.split(",");l.system.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.system.text=d.slice(1,d.length).join(",");break;case"message":l.system.text=l.system.appdata;break;case"set":l.system.name=l.system.appdata.split("=")[0],l.system.value=l.system.appdata.split("=")[1];break;case"agi":l.system.project=l.system.appdata;break;default:var c=l.system.appdata.split(",");l.system.command=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.system.variable=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.system.variable="";function m(e){t.hide(e)}l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outbounddial"===l.system.appType.toLowerCase()&&(l.system.prefix=l.system.phone?l.system.phone.split("$")[0]:void 0,l.system.callerId=l.system.callerID?"CALLERID(all)="+l.system.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outboundDial"===l.system.appType&&(l.system.phone=i.cutdigits?(l.system.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.system.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.system.options+="U(xcally-mixmonitor-context)"):l.system.options=l.system.options.replace("U(xcally-mixmonitor-context)",""));if(l.system.appType&&"custom"===l.system.appType);else switch((l.system.app||l.system.appType).toLowerCase()){case"set":l.system.appdata=l.system.name+"="+l.system.value;break;case"custom":break;default:e[0]=l.system.command,e[1]=l.system.variable,l.system.appdata=e.join(",")}m(l.system)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.system&&(n=_.find(l.variables,{name:l.system.variable})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.system&&(a=_.find(l.variables,{name:l.system.variable}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.tag=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.tag.appdata)switch(l.tag.appType?l.tag.appType.toLowerCase():l.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.tag.appdata.split(",");l.tag.key=d[0],l.tag.language=d[1],l.tag.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.tag.appdata.split(",");l.tag.accesskeyid=d[0],l.tag.secretaccesskey=d[1],l.tag.lexregion=d[2],l.tag.botname=d[3],l.tag.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.tag.appdata.split(",");l.tag.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.tag.text=d.slice(1,d.length).join(",");break;case"message":l.tag.text=l.tag.appdata;break;case"set":l.tag.name=l.tag.appdata.split("=")[0],l.tag.value=l.tag.appdata.split("=")[1];break;case"agi":l.tag.project=l.tag.appdata;break;default:var c=l.tag.appdata.split(",");l.tag.tag=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outbounddial"===l.tag.appType.toLowerCase()&&(l.tag.prefix=l.tag.phone?l.tag.phone.split("$")[0]:void 0,l.tag.callerId=l.tag.callerID?"CALLERID(all)="+l.tag.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outboundDial"===l.tag.appType&&(l.tag.phone=i.cutdigits?(l.tag.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.tag.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.tag.options+="U(xcally-mixmonitor-context)"):l.tag.options=l.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.tags,{name:l.tag.tag});t&&(l.tag.TagId=t.id);if(l.tag.appType&&"custom"===l.tag.appType);else switch((l.tag.app||l.tag.appType).toLowerCase()){case"set":l.tag.appdata=l.tag.name+"="+l.tag.value;break;case"custom":break;default:e[0]=l.tag.tag,l.tag.appdata=e.join(",")}m(l.tag)},l.closeDialog=m,o.hasRole("admin")?s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1008}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.tags,{id:e.resourceId})}),n=null;if(l.tag&&(n=_.find(l.tags,{name:l.tag.tag})),n&&!_.some(t,["id",n.id])){var a=_.find(l.tags,{id:n.id});a.canSelect=!1,t.push(a)}l.tags=t})}else{var n=[],a=null;l.tag&&(a=_.find(l.tags,{name:l.tag.tag}));for(var i=0;i<l.tags.length;i++)a&&l.tags[i].id===a.id&&(l.tags[i].canSelect=!1,n.push(l.tags[i]));l.tags=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtags",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountApptagDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.mailAccount={},c.mailAccountInteractions={count:0,rows:[]},c.selectedMailAccountInteractions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,UserId,ContactId,MailAccountId,id,Contact.firstName,Owner.name,closedAt,disposition,note,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e,t){c.mailAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.mailAccount.id,c.getMailAccountInteractions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the interaction?").htmlContent("<b>"+(e.name||"interaction")+"</b> will be deleted.").ariaLabel("delete interaction").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.mailInteractionDownload=function(s,e,t){return l.mailInteraction.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="interaction"+s.id,a=new Blob(t,{type:e.type});n="mail-interaction"+s.id+".zip";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getMailAccountInteractions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.mailAccount.getInteractions(c.query,p).$promise},c.createOrEditMailAccountInteraction=function(e,t){s.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/interactions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:c.mailAccount,interaction:t,interactions:c.mailAccountInteractions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.spymailInteraction=function(e,n){s.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,onShowing:function(e,t){e.vm.init({id:1,channel:"mail",interaction:n,spy:!0},a.$parent.vm.setting)}})},c.exportSelectedMailAccountInteractions=function(){var e=angular.copy(c.selectedMailAccountInteractions);return c.selectedMailAccountInteractions=[],e},c.deleteMailAccountInteraction=g,c.deleteSelectedMailAccountInteractions=function(e){var t=s.confirm().title("Are you sure want to delete the selected interactions?").htmlContent("<b>"+c.selectedMailAccountInteractions.length+" selected</b> will be deleted.").ariaLabel("delete interactions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedMailAccountInteractions.forEach(function(e){g(e)}),c.selectedMailAccountInteractions=[]})};var m=!0,u=1;function p(e){c.mailAccountInteractions=e||{count:0,rows:[]}}function g(e){l.mailInteraction.delete({id:e.id}).$promise.then(function(){_.remove(c.mailAccountInteractions.rows,{id:e.id}),c.mailAccountInteractions.count-=1,c.mailAccountInteractions.rows.length||c.getMailAccountInteractions(),r.success({title:"Interaction deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETmailAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}a.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getMailAccountInteractions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.mail").controller("MailAccountInteractionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.mailAccount={},c.mailAccountMailCannedAnswers={count:0,rows:[]},c.selectedMailAccountMailCannedAnswers=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,key,value,description",limit:10,page:1},c.init=function(e,t){c.mailAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.mailAccount.id,c.query.MailAccountId=c.mailAccount.id,c.getMailAccountMailCannedAnswers()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the mailCannedAnswer?").htmlContent("<b>"+(e.name||"mailCannedAnswer")+"</b> will be deleted.").ariaLabel("delete mailCannedAnswer").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getMailAccountMailCannedAnswers=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.mailAccount.getAnswers(c.query,p).$promise},c.createOrEditMailAccountMailCannedAnswer=function(e,t){s.show({controller:"CreateOrEditMailCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/mailCannedAnswers/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:c.mailAccount,mailCannedAnswer:t,mailCannedAnswers:c.mailAccountMailCannedAnswers.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedMailAccountMailCannedAnswers=function(){var e=angular.copy(c.selectedMailAccountMailCannedAnswers);return c.selectedMailAccountMailCannedAnswers=[],e},c.deleteMailAccountMailCannedAnswer=g,c.deleteSelectedMailAccountMailCannedAnswers=function(e){var t=s.confirm().title("Are you sure want to delete the selected mailCannedAnswers?").htmlContent("<b>"+c.selectedMailAccountMailCannedAnswers.length+" selected</b> will be deleted.").ariaLabel("delete mailCannedAnswers").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedMailAccountMailCannedAnswers.forEach(function(e){g(e)}),c.selectedMailAccountMailCannedAnswers=[]})};var m=!0,u=1;function p(e){c.mailAccountMailCannedAnswers=e||{count:0,rows:[]}}function g(e){l.cannedAnswer.delete({id:e.id}).$promise.then(function(){_.remove(c.mailAccountMailCannedAnswers.rows,{id:e.id}),c.mailAccountMailCannedAnswers.count-=1,c.mailAccountMailCannedAnswers.rows.length||c.getMailAccountMailCannedAnswers(),r.success({title:"MailCannedAnswer deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETmailAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getMailAccountMailCannedAnswers())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.mail").controller("MailAccountMailCannedAnswersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MAIL.EDIT_MAILCANNEDANSWER",g.mailCannedAnswer=angular.copy(l),g.mailCannedAnswers=r,g.newMailCannedAnswer=!1,g.mailCannedAnswer||(g.mailCannedAnswer={},g.title="MAIL.NEW_MAILCANNEDANSWER",g.newMailCannedAnswer=!0),t.params.id&&(g.mailCannedAnswer.MailAccountId=t.params.id),g.addNewMailCannedAnswer=function(){g.errors=[],d.cannedAnswer.save(g.mailCannedAnswer).$promise.then(function(e){g.mailCannedAnswers.unshift(e.toJSON()),o.success({title:"MailCannedAnswer properly created",msg:g.mailCannedAnswer.name?g.mailCannedAnswer.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMailCannedAnswer=function(){g.errors=[],d.cannedAnswer.update({id:g.mailCannedAnswer.id},g.mailCannedAnswer).$promise.then(function(e){var t=_.find(g.mailCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailCannedAnswer properly saved!",msg:g.mailCannedAnswer.name?g.mailCannedAnswer.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMailCannedAnswer=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The mailCannedAnswer will be deleted.").ariaLabel("Delete MailCannedAnswer").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cannedAnswer.delete({id:g.mailCannedAnswer.id}).$promise.then(function(){_.remove(g.mailCannedAnswers,{id:g.mailCannedAnswer.id}),o.success({title:"MailCannedAnswer properly deleted!",msg:(g.mailCannedAnswer.name||"mailCannedAnswer")+" has been deleted!"}),v(g.mailCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","mailCannedAnswers","mailCannedAnswer","api","Auth","license","setting","crudPermissions"],angular.module("app.mail").controller("CreateOrEditMailCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.mailAccount={},c.mailAccountMailDispositions={count:0,rows:[]},c.selectedMailAccountMailDispositions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e,t){c.mailAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.mailAccount.id,c.query.MailAccountId=c.mailAccount.id,c.getMailAccountMailDispositions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the mailDisposition?").htmlContent("<b>"+(e.name||"mailDisposition")+"</b> will be deleted.").ariaLabel("delete mailDisposition").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getMailAccountMailDispositions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.mailAccount.getDispositions(c.query,p).$promise},c.createOrEditMailAccountMailDisposition=function(e,t){s.show({controller:"CreateOrEditMailDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/mailDispositions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:c.mailAccount,mailDisposition:t,mailDispositions:c.mailAccountMailDispositions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedMailAccountMailDispositions=function(){var e=angular.copy(c.selectedMailAccountMailDispositions);return c.selectedMailAccountMailDispositions=[],e},c.deleteMailAccountMailDisposition=g,c.deleteSelectedMailAccountMailDispositions=function(e){var t=s.confirm().title("Are you sure want to delete the selected mailDispositions?").htmlContent("<b>"+c.selectedMailAccountMailDispositions.length+" selected</b> will be deleted.").ariaLabel("delete mailDispositions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedMailAccountMailDispositions.forEach(function(e){g(e)}),c.selectedMailAccountMailDispositions=[]})};var m=!0,u=1;function p(e){c.mailAccountMailDispositions=e||{count:0,rows:[]}}function g(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(c.mailAccountMailDispositions.rows,{id:e.id}),c.mailAccountMailDispositions.count-=1,c.mailAccountMailDispositions.rows.length||c.getMailAccountMailDispositions(),r.success({title:"MailDisposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETmailAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getMailAccountMailDispositions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.mail").controller("MailAccountMailDispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MAIL.EDIT_MAILDISPOSITION",g.mailDisposition=angular.copy(l),g.mailDispositions=r,g.newMailDisposition=!1,g.mailDisposition||(g.mailDisposition={},g.title="MAIL.NEW_MAILDISPOSITION",g.newMailDisposition=!0),t.params.id&&(g.mailDisposition.MailAccountId=t.params.id),g.addNewMailDisposition=function(){g.errors=[],d.disposition.save(g.mailDisposition).$promise.then(function(e){g.mailDispositions.unshift(e.toJSON()),o.success({title:"MailDisposition properly created",msg:g.mailDisposition.name?g.mailDisposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMailDisposition=function(){g.errors=[],d.disposition.update({id:g.mailDisposition.id},g.mailDisposition).$promise.then(function(e){var t=_.find(g.mailDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailDisposition properly saved!",msg:g.mailDisposition.name?g.mailDisposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMailDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The mailDisposition will be deleted.").ariaLabel("Delete MailDisposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.mailDisposition.id}).$promise.then(function(){_.remove(g.mailDispositions,{id:g.mailDisposition.id}),o.success({title:"MailDisposition properly deleted!",msg:(g.mailDisposition.name||"mailDisposition")+" has been deleted!"}),v(g.mailDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","mailDispositions","mailDisposition","api","Auth","license","setting","crudPermissions"],angular.module("app.mail").controller("CreateOrEditMailDispositionDialogController",e)}(),function(){"use strict";function e(n,e,a,i,s,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.mailAccount=c||n.params.mailAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.gotogoto=function(e,t){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:610}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.mail.realtime.accounts",{}):l.info({title:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.mail.realtime.accounts",{})}},u.agentadddialog=function(e,t){a.show({controller:"MailAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailAccount:e,mailAccounts:u.mailAccounts?u.mailAccounts.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoMailAccounts=function(){n.go("app.mail.mailAccounts")},u.saveMailAccount=function(){r.mailAccount.update({id:u.mailAccount.id},u.mailAccount).$promise.then(function(){l.success({title:"MailAccount updated!",msg:u.mailAccount.name?u.mailAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.lists,{id:e.resourceId})}),n=null;if(u.mailAccount&&(n=_.find(u.lists,{id:Number(u.mailAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.lists,{id:n.id});a.canSelect=!1,t.push(a)}u.lists=t})}else{var n=[],a=null;u.mailAccount&&(a=_.find(u.lists,{id:Number(u.mailAccount.ListId)}));for(var i=0;i<u.lists.length;i++)a&&u.lists[i].id===a.id&&(u.lists[i].canSelect=!1,n.push(u.lists[i]));u.lists=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","mailAccount","userProfileSection"],angular.module("app.mail").controller("MailAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.mailAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="mailAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedMailAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,key,email,ListId,active,cservice,Imap.service,Imap.host,Imap.port,Imap.tls,Imap.authentication,Imap.user,Imap.password,Imap.mailbox,Imap.connTimeout,Imap.authTimeout,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,cauthentication,cuser,cpassword,fontFamily,fontSize,template,markAsUnread,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},b.arraycservice=_.keyBy([{option:"Custom",value:"null"},{option:"Gmail",value:"'gmail'"},{option:"Hotmail",value:"'hotmail'"},{option:"Yahoo",value:"'yahoo'"},{option:"Outlook365",value:"'outlook365'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b["arrayImap.service"]=_.keyBy([{option:"Custom",value:"null"},{option:"Gmail",value:"'gmail'"},{option:"Hotmail",value:"'hotmail'"},{option:"Yahoo",value:"'yahoo'"},{option:"Outlook365",value:"'outlook365'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b["arraySmtp.service"]=_.keyBy([{option:"Custom",value:"null"},{option:"Gmail",value:"'gmail'"},{option:"Hotmail",value:"'hotmail'"},{option:"Yahoo",value:"'yahoo'"},{option:"Outlook365",value:"'outlook365'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.mail.mailAccounts.edit",{id:e.id,mailAccount:e,crudPermissions:b.crudPermissions})},b.verifysmtpverifysmtp=function(e,t){{if(e&&e.id)return m.mailAccount.verifySmtp({id:e.id}).$promise.then(function(){p.success({title:"Smtp properly verified",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"Smtp properly verified",msg:e.data?JSON.stringify(e.data):e.toString()})});p.error({title:"Smtp properly verified",msg:"Smpt id unknown"})}},b.interactionsgoto=function(e,t){n.go("app.mail.mailAccounts.edit",{id:e.id,tab:7})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:610}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.mail.realtime.accounts",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.mail.realtime.accounts",{})}},b.agentadddialog=function(e,t){i.show({controller:"MailAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailAccount:e,mailAccounts:b.mailAccounts?b.mailAccounts.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("mailAccount")+"?").htmlContent("<b>"+(e.name||"mailAccount")+"</b> will be deleted.").ariaLabel("delete mailAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getMailAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.mailAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="MailAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditMailAccount=function(e,t){i.show({controller:"CreateOrEditMailAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:t,mailAccounts:b.mailAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteMailAccount=S,b.exportSelectedMailAccounts=function(){var e=angular.copy(b.selectedMailAccounts);return b.selectedMailAccounts=[],e},b.deleteSelectedMailAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected mailAccounts?").htmlContent("<b>"+b.selectedMailAccounts.length+" selected</b> will be deleted.").ariaLabel("delete MailAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedMailAccounts.forEach(function(e){S(e)}),b.selectedMailAccounts=[]})},b.deselectMailAccounts=function(){b.selectedMailAccounts=[]},b.selectAllMailAccounts=function(){b.selectedMailAccounts=b.mailAccounts.rows},g.hasRole("admin")?m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.lists,{id:e.resourceId})}),n=null;if(b.mailAccount&&(n=_.find(b.lists,{id:Number(b.mailAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.lists,{id:n.id});a.canSelect=!1,t.push(a)}b.lists=t})}else{var n=[],a=null;b.mailAccount&&(a=_.find(b.lists,{id:Number(b.mailAccount.ListId)}));for(var i=0;i<b.lists.length;i++)a&&b.lists[i].id===a.id&&(b.lists[i].canSelect=!1,n.push(b.lists[i]));b.lists=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.mailAccounts=e||{count:0,rows:[]}}function S(e){if(e.service)return p.error({title:"Mail Account not deleted!",msg:"You can't remove service account"});m.mailAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.mailAccounts.rows,{id:e.id}),b.mailAccounts.count-=1,b.mailAccounts.rows.length||b.getMailAccounts(),p.success({title:_.startCase("MailAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEmailAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEmailAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getMailAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","mailAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.mail").controller("MailAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MAIL.EDIT_MAILQUEUE",g.mailQueue=angular.copy(l),g.mailQueues=r,g.newMailQueue=!1,g.mailQueue||(g.mailQueue={strategy:"beepall",timeout:10},g.title="MAIL.NEW_MAILQUEUE",g.newMailQueue=!0),g.addNewMailQueue=function(){g.errors=[],d.mailQueue.save(g.mailQueue).$promise.then(function(e){g.mailQueues.unshift(e.toJSON()),o.success({title:"MailQueue properly created",msg:g.mailQueue.name?g.mailQueue.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMailQueue=function(){g.errors=[],d.mailQueue.update({id:g.mailQueue.id},g.mailQueue).$promise.then(function(e){var t=_.find(g.mailQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailQueue properly saved!",msg:g.mailQueue.name?g.mailQueue.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMailQueue=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The mailQueue will be deleted.").ariaLabel("Delete MailQueue").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.mailQueue.delete({id:g.mailQueue.id}).$promise.then(function(){_.remove(g.mailQueues,{id:g.mailQueue.id}),o.success({title:"MailQueue properly deleted!",msg:(g.mailQueue.name||"mailQueue")+" has been deleted!"}),v(g.mailQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","mailQueues","mailQueue","api","Auth","license","setting","crudPermissions"],angular.module("app.mail").controller("CreateOrEditMailQueueDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.mailQueue.getAgents({id:c.mailQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserMailQueue?"penalty "+e.UserMailQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.mailQueue=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.mailQueue.removeAgents({id:c.mailQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.mailQueue.addAgents({id:c.mailQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("MAIL.ALL_AGENTS"),labelSelected:r.instant("MAIL.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","mailQueue","mailQueues","realtime","$translate","Auth","crudPermissions"],angular.module("app.mail").controller("MailQueueagentaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r){var l=this;function d(){return a(function(n,t){return a(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.mailQueue.getTeams({id:l.mailQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.mailQueue=t,l.crudPermissions=r,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("MAIL.ALL_TEAMS"),labelSelected:n.instant("MAIL.SELECTED_TEAMS"),transferCallback:function(e,t){var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.mailQueue.removeTeams({id:l.mailQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.mailQueue.addTeams({id:l.mailQueue.id,teams:_.map(n,function(e){return _.pick(e,["id"])})}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),i.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","mailQueue","$translate","Auth","crudPermissions"],angular.module("app.mail").controller("MailQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.mailQueue=c||e.params.mailQueue||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.teamadddialog=function(e,t){n.show({controller:"MailQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/teamadd/teamadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailQueue:e,mailQueues:u.mailQueues?u.mailQueues.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){n.show({controller:"MailQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailQueue:e,mailQueues:u.mailQueues?u.mailQueues.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoMailQueues=function(){e.go("app.mail.mailQueues")},u.saveMailQueue=function(){r.mailQueue.update({id:u.mailQueue.id},u.mailQueue).$promise.then(function(){l.success({title:"MailQueue updated!",msg:u.mailQueue.name?u.mailQueue.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","mailQueue","userProfileSection"],angular.module("app.mail").controller("MailQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.mailQueues=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="mailQueues",b.listOrder="",b.listOrderAsc=null,b.selectedMailQueues=[],b.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"mail",limit:10,page:1},b.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.mail.mailQueues.edit",{id:e.id,mailQueue:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"MailQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailQueue:e,mailQueues:b.mailQueues?b.mailQueues.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"MailQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailQueue:e,mailQueues:b.mailQueues?b.mailQueues.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("mailQueue")+"?").htmlContent("<b>"+(e.name||"mailQueue")+"</b> will be deleted.").ariaLabel("delete mailQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:610}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.mail.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.mail.realtime.queues",{})}},b.success=y,b.getMailQueues=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.mailQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="MailQueues",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditMailQueue=function(e,t){i.show({controller:"CreateOrEditMailQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailQueue:t,mailQueues:b.mailQueues.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteMailQueue=S,b.exportSelectedMailQueues=function(){var e=angular.copy(b.selectedMailQueues);return b.selectedMailQueues=[],e},b.deleteSelectedMailQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected mailQueues?").htmlContent("<b>"+b.selectedMailQueues.length+" selected</b> will be deleted.").ariaLabel("delete MailQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedMailQueues.forEach(function(e){S(e)}),b.selectedMailQueues=[]})},b.deselectMailQueues=function(){b.selectedMailQueues=[]},b.selectAllMailQueues=function(){b.selectedMailQueues=b.mailQueues.rows};var A=!0,E=1;function y(e){b.mailQueues=e||{count:0,rows:[]}}function S(e){m.mailQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.mailQueues.rows,{id:e.id}),b.mailQueues.count-=1,b.mailQueues.rows.length||b.getMailQueues(),p.success({title:_.startCase("MailQueue")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEmailQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEmailQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getMailQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","mailQueues","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.mail").controller("MailQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MAIL.EDIT_MAILSUBSTATUS",g.mailSubstatus=angular.copy(l),g.mailSubtatuses=r,g.newMailSubstatus=!1,g.mailSubstatus||(g.mailSubstatus={},g.title="MAIL.NEW_MAILSUBSTATUS",g.newMailSubstatus=!0),g.addNewMailSubstatus=function(){g.errors=[],d.mailSubstatus.save(g.mailSubstatus).$promise.then(function(e){g.mailSubtatuses.unshift(e.toJSON()),o.success({title:"MailSubstatus properly created",msg:g.mailSubstatus.name?g.mailSubstatus.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailSubstatus.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailSubstatus.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMailSubstatus=function(){g.errors=[],d.mailSubstatus.update({id:g.mailSubstatus.id},g.mailSubstatus).$promise.then(function(e){var t=_.find(g.mailSubtatuses,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailSubstatus properly saved!",msg:g.mailSubstatus.name?g.mailSubstatus.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailSubstatus.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailSubstatus.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMailSubstatus=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The mailSubstatus will be deleted.").ariaLabel("Delete MailSubstatus").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.mailSubstatus.delete({id:g.mailSubstatus.id}).$promise.then(function(){_.remove(g.mailSubtatuses,{id:g.mailSubstatus.id}),o.success({title:"MailSubstatus properly deleted!",msg:(g.mailSubstatus.name||"mailSubstatus")+" has been deleted!"}),v(g.mailSubstatus)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailSubstatus.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailSubstatus.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","mailSubtatuses","mailSubstatus","api","Auth","license","setting","crudPermissions"],angular.module("app.mail").controller("CreateOrEditMailSubstatusDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.mailSubtatuses=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="mailSubtatuses",b.listOrder="",b.listOrderAsc=null,b.selectedMailSubstatuses=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditMailSubstatusDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailSubtatuses/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailSubstatus:e,mailSubtatuses:b.mailSubtatuses.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("mailSubstatus")+"?").htmlContent("<b>"+(e.name||"mailSubstatus")+"</b> will be deleted.").ariaLabel("delete mailSubstatus").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getMailSubstatuses=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.mailSubstatus.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="MailSubstatuses",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditMailSubstatus=function(e,t){i.show({controller:"CreateOrEditMailSubstatusDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailSubtatuses/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailSubstatus:t,mailSubtatuses:b.mailSubtatuses.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteMailSubstatus=S,b.exportSelectedMailSubstatuses=function(){var e=angular.copy(b.selectedMailSubstatuses);return b.selectedMailSubstatuses=[],e},b.deleteSelectedMailSubstatuses=function(e){var t=i.confirm().title("Are you sure want to delete the selected mailSubtatuses?").htmlContent("<b>"+b.selectedMailSubstatuses.length+" selected</b> will be deleted.").ariaLabel("delete MailSubstatuss").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedMailSubstatuses.forEach(function(e){S(e)}),b.selectedMailSubstatuses=[]})},b.deselectMailSubstatuses=function(){b.selectedMailSubstatuses=[]},b.selectAllMailSubstatuses=function(){b.selectedMailSubstatuses=b.mailSubtatuses.rows};var A=!0,E=1;function y(e){b.mailSubtatuses=e||{count:0,rows:[]}}function S(e){m.mailSubstatus.delete({id:e.id}).$promise.then(function(){_.remove(b.mailSubtatuses.rows,{id:e.id}),b.mailSubtatuses.count-=1,b.mailSubtatuses.rows.length||b.getMailSubstatuses(),p.success({title:_.startCase("MailSubstatus")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEmailSubstatus"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEmailSubstatus",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getMailSubstatuses())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","mailSubtatuses","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.mail").controller("MailSubstatusesController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){_.forIn(p.mailAccounts,function(e,t){p.rpcMailAccounts[t]&&_.merge(e,p.rpcMailAccounts[t])}),_.forIn(p.mailAccounts,function(t,e){var n={id:e,sort:"-id",direction:"in",limit:1,offset:0,$gte:"createdAt,"+moment().startOf("day").format("YYYY-MM-DD HH:mm:ss")};s.mailAccount.getMessages(n).$promise.then(function(e){return e&&(t.in=e.count||0,t.lastIn=e.rows&&e.rows.length?e.rows[0].createdAt:void 0),n.direction="out",s.mailAccount.getMessages(n).$promise}).then(function(e){e&&(t.out=e.count||0,t.lastOut=e.rows&&e.rows.length?e.rows[0].createdAt:void 0)}).catch(function(e){console.log(e)})})}p.currentUser=u.getCurrentUser(),p.count=l&&l.count?l.count:0,p.mailAccounts=l?_.keyBy(l.rows?l.rows:[],"id"):{},p.rpcMailAccounts=d?_.keyBy(d.rows?d.rows:[],"id"):{},p.userProfile=c,p.userProfileSection=m&&1==m.count?m.rows[0]:null,p.crudPermissions=u.parseCrudPermissions(p.userProfileSection?p.userProfileSection.crudPermissions:null),p.query={sort:"-name",limit:10,page:1},p.success=f,p.$onInit=g,p.getMailAccounts=function(){p.query.offset=(p.query.page-1)*p.query.limit,u.hasRole("admin")?p.promise=s.mailAccount.get(p.query,f).$promise:(p.query.id=p.userProfile.id,p.query.section="MailAccounts",p.promise=s.userProfile.getResources(p.query,f).$promise)},p.onSave=function(e){p.mailAccounts[e.id]&&_.merge(p.mailAccounts[e.id],e)},p.onMailMessageSave=function(e){p.mailAccounts[e.MailAccountId]&&("in"==e.direction?(p.mailAccounts[e.MailAccountId].in+=1,p.mailAccounts[e.MailAccountId].lastIn=e.createdAt):(p.mailAccounts[e.MailAccountId].out+=1,p.mailAccounts[e.MailAccountId].lastOut=e.createdAt))},p.goToMailAccount=function(e,t){i.go("app.mail.mailAccounts.edit",{id:t.id,mailAccount:t})},p.verifySmtp=function(e,t){{if(t&&t.id)return s.mailAccount.verifySmtp({id:t.id}).$promise.then(function(){r.success({title:"Smtp properly verified",msg:"Connection succeded!"})}).catch(function(e){r.error({title:"Smtp properly verified",msg:e.data?JSON.stringify(e.data):e.toString()})});r.error({title:"Smtp properly verified",msg:"Smpt id unknown"})}},p.order=[],_.forIn(p.mailAccounts,function(e,t){p.order.push(e.id)}),o.on("mailAccount:save",p.onSave),o.on("mailAccount:update",p.onSave),o.on("mailMessage:save",p.onMailMessageSave);var v=!0,h=1;function f(e){if(p.mailAccounts=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){p.order=[];for(var t=0;t<e.rows.length;t++)p.order.push(e.rows[t].id)}g()}e.$watch("vm.query.filter",function(e,t){v?n(function(){v=!1}):(t||(h=p.query.page),e!==t&&(p.query.page=1),e||(p.query.page=h),p.getMailAccounts())}),e.$on("$destroy",function(){o.removeAllListeners("mailAccount:save"),o.removeAllListeners("mailAccount:update"),o.removeAllListeners("mailMessage:save")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$state","api","socket","toasty","mailAccounts","rpcMailAccounts","userProfile","userProfileSection","Auth"],angular.module("app.mail").controller("MailAccountsRealtimeController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"mail",direction:"inbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsMailRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.mailQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].MailQueueId].paused++,g.queues[e[t].rows[n].MailQueueId].loggedInDb++,g.queues[e[t].rows[n].MailQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].MailQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"mail",type:"inbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.mailQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="MailQueues",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditMailQueue=function(e,t){a.show({controller:"CreateOrEditMailQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailQueue:t,mailQueues:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.agentAdd=function(e,t){a.show({controller:"MailQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailQueue:t,mailQueues:g.queues?g.queues.rows:[],realtime:!1,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.mailQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&_.merge(g.queues[e.id],_.pick(e,v))},g.onSaveMember=function(e){g.queues[e.MailQueueId]&&g.queues[e.MailQueueId].loggedInDb++},g.onRemoveMember=function(e){g.queues[e.MailQueueId]&&g.queues[e.MailQueueId].loggedInDb--},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.MailQueueId]&&(g.queues[e.MailQueueId].loggedInDb+=1,g.queues[e.MailQueueId].agents[e.UserId]=e.MailQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.MailQueueId]&&0<g.queues[e.MailQueueId].loggedInDb&&(g.queues[e.MailQueueId].loggedInDb-=1,delete g.queues[e.MailQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.on("mail_queue:save",g.onSave),d.on("userMailQueue:save",g.onSaveMember),d.on("userMailQueue:remove",g.onRemoveMember),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("mail_queue:save"),d.removeAllListeners("userMailQueue:remove"),d.removeAllListeners("userMailQueue:save"),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.mail").controller("QueuesMailRealtimeController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){switch(t.disconnect(),t.connect(),this.selectedTab=0,n.current.name){case"app.mail.realtime.agents":this.selectedTab=0;break;case"app.mail.realtime.queues":this.selectedTab=1;break;case"app.mail.realtime.accounts":this.selectedTab=2;break;default:this.selectedTab=0,n.go("app.mail.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.mail.realtime.agents");break;case 1:n.go("app.mail.realtime.queues");break;case 2:n.go("app.mail.realtime.accounts");break;default:n.go("app.mail.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.mail").controller("MailRealtimeController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MARKETPLACE.EDIT_PLUGIN",g.plugin=angular.copy(l),g.plugins=r,g.newPlugin=!1,g.plugin||(g.plugin={},g.title="MARKETPLACE.NEW_PLUGIN",g.newPlugin=!0),g.addNewPlugin=function(){g.errors=[],d.plugin.save(g.plugin).$promise.then(function(e){g.plugins.unshift(e.toJSON()),o.success({title:"Plugin properly created",msg:g.plugin.name?g.plugin.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.plugin.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.savePlugin=function(){g.errors=[],d.plugin.update({id:g.plugin.id},g.plugin).$promise.then(function(e){var t=_.find(g.plugins,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Plugin properly saved!",msg:g.plugin.name?g.plugin.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.plugin.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deletePlugin=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The plugin will be deleted.").ariaLabel("Delete Plugin").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.plugin.delete({id:g.plugin.id}).$promise.then(function(){_.remove(g.plugins,{id:g.plugin.id}),o.success({title:"Plugin properly deleted!",msg:(g.plugin.name||"plugin")+" has been deleted!"}),v(g.plugin)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.plugin.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","plugins","plugin","api","Auth","license","setting","crudPermissions"],angular.module("app.marketplace").controller("CreateOrEditPluginDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.plugin=c||e.params.plugin||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoPlugins=function(){e.go("app.marketplace.plugins")},u.savePlugin=function(){r.plugin.update({id:u.plugin.id},u.plugin).$promise.then(function(){l.success({title:"Plugin updated!",msg:u.plugin.name?u.plugin.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETplugin",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","plugin","userProfileSection"],angular.module("app.marketplace").controller("MarketplacePluginController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.plugins=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="plugins",b.listOrder="",b.listOrderAsc=null,b.selectedPlugins=[],b.query={fields:"createdAt,updatedAt,id,name,type,active,description,icon,sidebar,path,adminUrl,agentUrl,scriptName,scriptPath,version",sort:"name",limit:10,page:1},b.installing=!1,b.arraysidebar=_.keyBy([{option:"Always",value:"'always'"},{option:"Admin Only",value:"'adminOnly'"},{option:"Agent Only",value:"'agentOnly'"},{option:"Never",value:"'never'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.installplugin=function(e){{if("script"!==e.type)return e.active=!0,m.plugin.update({id:e.id},e).$promise.then(function(){p.success({title:"Plugin installed!",msg:e.name?e.name+" has been installed!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.update"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.plugin.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})});b.installing=!0,m.pm2.save({name:e.scriptName,script:e.path+"/"+e.scriptPath}).$promise.then(function(){return e.active=!0,m.plugin.update({id:e.id},e).$promise}).then(function(){b.installing=!1,p.success({title:"Plugin installed!",msg:e.name?e.name+" has been installed!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.pm2.save"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pm2.save",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}},b.editstate=function(e,t){n.go("app.marketplace.plugins.edit",{id:e.id,plugin:e,crudPermissions:b.crudPermissions})},b.stopplugin=function(e,t){var n=i.confirm().title("Are you sure want to stop the plugin attached process?").htmlContent("<b>"+(e.name||"plugin")+"</b> attached process will be stoppped.").ariaLabel("stop plugin process").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){var n;n=e,m.pm2.get().$promise.then(function(e){if(!e||!e.rows)throw new Error("Failed to retrieve pm2 processes");var t=_.find(e.rows,{name:n.scriptName});if(!t)throw new Error("No corresponding process found");m.pm2.update({id:t.pm_id,status:"stopped"}).$promise.then(function(){p.success({title:"Process stopped!",msg:"Attached pm2 process successfully stopped"})})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.pm2.update"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pm2.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){console.log("CANCEL")})},b.restartplugin=function(e,t){var n=i.confirm().title("Are you sure want to restart the plugin attached process?").htmlContent("<b>"+(e.name||"plugin")+"</b> attached process will be restarted.").ariaLabel("restart plugin process").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){var n;n=e,m.pm2.get().$promise.then(function(e){if(!e||!e.rows)throw new Error("Failed to retrieve pm2 processes");var t=_.find(e.rows,{name:n.scriptName});if(!t)throw new Error("No corresponding process found");m.pm2.update({id:t.pm_id,status:"online"}).$promise.then(function(){p.success({title:"Process restarted!",msg:"Attached pm2 process successfully restarted"})})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.pm2.update"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pm2.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){console.log("CANCEL")})},b.downloadfile2=function(s,e){return m.plugin.download({id:s.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=s.name.replace(" ","_").toLowerCase()+".zip";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.plugin.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.uninstallplugin=function(e,t){var n=i.confirm().title("Are you sure want to uninstall the plugin?").htmlContent("<b>"+(e.name||"plugin")+"</b> will be uninstalled.").ariaLabel("uninstall plugin").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){!function(n){"script"===n.type&&m.pm2.get().$promise.then(function(e){if(!e||!e.rows)throw new Error("Failed to retrieve pm2 processes");var t=_.find(e.rows,{name:n.scriptName});if(!t)throw new Error("No corresponding process found");m.pm2.delete({id:t.pm_id,name:n.scriptName}).$promise}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pm2.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})});n.active=!1,m.plugin.update({id:n.id},n).$promise.then(function(){p.success({title:"Plugin uninstalled!",msg:n.name?n.name+" has been uninstalled!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.update"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.plugin.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}(e)},function(){console.log("CANCEL")})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("plugin")+"?").htmlContent("<b>"+(e.name||"plugin")+"</b> will be deleted.").ariaLabel("delete plugin").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getPlugins=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.plugin.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Plugins",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditPlugin=function(e,t){i.show({controller:"CreateOrEditPluginDialogController",controllerAs:"vm",templateUrl:"app/main/apps/marketplace/views/plugins/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{plugin:t,plugins:b.plugins.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deletePlugin=S,b.exportSelectedPlugins=function(){var e=angular.copy(b.selectedPlugins);return b.selectedPlugins=[],e},b.deleteSelectedPlugins=function(e){var t=i.confirm().title("Are you sure want to delete the selected plugins?").htmlContent("<b>"+b.selectedPlugins.length+" selected</b> will be deleted.").ariaLabel("delete Plugins").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedPlugins.forEach(function(e){S(e)}),b.selectedPlugins=[]})},b.deselectPlugins=function(){b.selectedPlugins=[]},b.selectAllPlugins=function(){b.selectedPlugins=b.plugins.rows},b.uploadPlugin=function(e){i.show({controller:"UploadPluginDialogController",controllerAs:"vm",templateUrl:"app/main/apps/marketplace/views/plugins/upload/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{plugins:b.plugins.rows}})};var A=!0,E=1;function y(e){b.plugins=e||{count:0,rows:[]}}function S(n){n.active&&"script"==n.type&&m.pm2.get().$promise.then(function(e){if(!e||!e.rows)return p.error({title:"Plugin not deleted!",msg:"Failed to retrieve pm2 processes"});var t=_.find(e.rows,{name:n.scriptName});t?m.pm2.delete({id:t.pm_id,name:n.scriptName}).$promise:console.log("No '%s' process found",n.scriptName)}).catch(function(e){return p.error({title:"PM2 process not found!",msg:"Failed to delete the attached pm2 process"})}),m.plugin.delete({id:n.id}).$promise.then(function(){_.remove(b.plugins.rows,{id:n.id}),b.plugins.count-=1,b.plugins.rows.length||b.getPlugins(),p.success({title:_.startCase("Plugin")+" deleted!",msg:n.name?n.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEplugin"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEplugin",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getPlugins())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","plugins","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.marketplace").controller("MarketplacePluginsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this,r=2,l=1024*r*1024;o.currentUser=s.getCurrentUser(),o.errors=[],o.title="MARKETPLACE.UPLOAD_PLUGIN",o.plugins=a,o.uploadPlugins=[],o.uploadState="none",o.plugin={},o.ngFlowOptions={maxChunkRetries:1,chunkSize:l,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0,target:"api/plugins"},o.ngFlow={flow:{}},o.dropping=!1,o.fileAdded=function(e){var t=["zip"];if(!_.includes(t,e.getExtension()))return n.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(e.size>l)return n.error({title:"File too big",msg:"The max allowed size is "+r+"MB"}),!1;return o.plugin={id:e.uniqueIdentifier,file:e},o.uploadPlugins.unshift(o.plugin),!0},o.upload=function(){o.uploadState="uploading",o.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},o.ngFlow.flow.opts.query={role:o.currentUser.role,userProfileId:o.currentUser.userProfileId},o.ngFlow.flow.upload()},o.fileSuccess=function(a,e){o.plugins.unshift(JSON.parse(e)),angular.forEach(o.uploadPlugins,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result}}})},o.uploadError=function(e,t){o.ngFlow.flow.cancel(),n.error({title:"Upload error",msg:"Cannot upload the plugin"}),o.uploadState="failed"},o.uploadComplete=function(){"failed"!==o.uploadState&&(o.uploadState="completed",n.success({title:"Upload completed",msg:o.plugin.file.name+" uploaded successfully"}))},o.closeDialog=function(){t.hide()}}e.$inject=["$cookies","$mdDialog","toasty","plugins","api","Auth"],angular.module("app.marketplace").controller("UploadPluginDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MOTIONDIALER.EDIT_IVRCAMPAIGN",g.ivrCampaign=angular.copy(l),g.ivrCampaigns=r,g.newIvrCampaign=!1,g.ivrCampaign||(g.ivrCampaign={active:!0,type:"ivr",dialCheckDuplicateType:"always",dialCutDigit:0,limitCalls:30,dialRandomLastDigitCallerIdNumber:0,dialOriginateTimeout:30,dialGlobalMaxRetry:4,dialCongestionMaxRetry:3,dialCongestionRetryFrequency:150,dialBusyMaxRetry:3,dialBusyRetryFrequency:150,dialNoAnswerMaxRetry:3,dialNoAnswerRetryFrequency:150,dialOrderByScheduledAt:"ASC",dialGlobalInterval:"07:00-22:00,*,*,*",dialAMDInitialSilence:2500,dialAMDGreeting:1500,dialAMDAfterGreetingSilence:800,dialAMDTotalAnalysisTime:5e3,dialAMDMinWordLength:100,dialAMDBetweenWordsSilence:50,dialAMDMaximumNumberOfWords:3,dialAMDSilenceThreshold:256,dialAMDMaximumWordLength:5e3},g.title="MOTIONDIALER.NEW_IVRCAMPAIGN",g.newIvrCampaign=!0),g.addNewIvrCampaign=function(){g.errors=[],d.campaign.save(g.ivrCampaign).$promise.then(function(e){g.ivrCampaigns.unshift(e.toJSON()),o.success({title:"IvrCampaign properly created",msg:g.ivrCampaign.name?g.ivrCampaign.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.campaign.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.campaign.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveIvrCampaign=function(){g.errors=[],d.campaign.update({id:g.ivrCampaign.id},g.ivrCampaign).$promise.then(function(e){var t=_.find(g.ivrCampaigns,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"IvrCampaign properly saved!",msg:g.ivrCampaign.name?g.ivrCampaign.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.campaign.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.campaign.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteIvrCampaign=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The ivrCampaign will be deleted.").ariaLabel("Delete IvrCampaign").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.campaign.delete({id:g.ivrCampaign.id}).$promise.then(function(){_.remove(g.ivrCampaigns,{id:g.ivrCampaign.id}),o.success({title:"IvrCampaign properly deleted!",msg:(g.ivrCampaign.name||"ivrCampaign")+" has been deleted!"}),v(g.ivrCampaign)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.campaign.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.campaign.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.trunk.get({fields:"id,name",sort:"name",table:"true"}).$promise.then(function(e){g.trunks=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.trunk.get({fields:"id,name",sort:"name",table:"true"}).$promise.then(function(e){g.trunks=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.trunks,{id:e.resourceId})});g.trunks.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),g.trunks=t})}else g.trunks=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.hasRole("admin")?d.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.projects=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.projects=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1103}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.projects,{id:e.resourceId})}),n=null;if(g.ivrCampaign&&(n=_.find(g.projects,{id:Number(g.ivrCampaign.SquareProjectId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.projects,{id:n.id});a.canSelect=!1,t.push(a)}g.projects=t})}else{var n=[],a=null;g.ivrCampaign&&(a=_.find(g.projects,{id:Number(g.ivrCampaign.SquareProjectId)}));for(var i=0;i<g.projects.length;i++)a&&g.projects[i].id===a.id&&(g.projects[i].canSelect=!1,n.push(g.projects[i]));g.projects=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.hasRole("admin")?d.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){g.interval=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){g.interval=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.interval,{id:e.resourceId})}),n=null;if(g.ivrCampaign&&(n=_.find(g.interval,{id:Number(g.ivrCampaign.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.interval,{id:n.id});a.canSelect=!1,t.push(a)}g.interval=t})}else{var n=[],a=null;g.ivrCampaign&&(a=_.find(g.interval,{id:Number(g.ivrCampaign.IntervalId)}));for(var i=0;i<g.interval.length;i++)a&&g.interval[i].id===a.id&&(g.interval[i].canSelect=!1,n.push(g.interval[i]));g.interval=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","ivrCampaigns","ivrCampaign","api","Auth","license","setting","crudPermissions"],angular.module("app.motiondialer").controller("CreateOrEditIvrCampaignDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l){var d=this;function c(){return a(function(n,t){return a(function(t,n){return s.cmList.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return d.items=e.rows?e.rows:[],r.hasRole("admin")?e:d.section?d.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:d.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return d.allowedItems=_.map(t,function(e){return _.find(d.items,{id:r.hasRole("admin")||d.section.autoAssociation?e.id:e.resourceId})}),d.startingAllowedItems=angular.copy(d.allowedItems),d.items.forEach(function(e){var t=_.find(d.allowedItems,{id:e.id});"admin"===d.currentUser.role?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s[d.apiRoute][d.getApi]({id:d.ivrCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];d.selectedItems=_.map(t,function(e){return _.find(d.items,{id:e.id})}),d.startingSelectedItems=angular.copy(d.selectedItems),d.dualMultiselectOptions.selectedItems=d.selectedItems,d.dualMultiselectOptions.items=_.differenceBy(d.allowedItems,d.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}d.currentUser=r.getCurrentUser(),d.ivrCampaign=t,d.crudPermissions=l,d.apiRoute="voiceQueue",d.getApi="getBlackLists",d.addApi="addBlackLists",d.removeApi="removeBlackLists",d.items=[],d.allowedItems=[],d.selectedItems=[],d.startingAllowedItems=[],d.startingSelectedItems=[],d.pendingChanges=!1,d.loading=!1,d.dualMultiselectOptions={readOnly:!d.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:n.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){var n=_.xorBy(d.startingSelectedItems,d.selectedItems,"id");d.pendingChanges=!_.isEmpty(n)}},d.onInit=function(){return r.hasRole("admin")?c().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:d.currentUser.userProfileId,name:"Lists"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return d.section=e,c()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},d.saveLists=function(){d.loading=!0;var e=_.differenceBy(d.startingSelectedItems,d.selectedItems,"id"),t=_.differenceBy(d.selectedItems,d.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.removeApi]({id:d.ivrCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.addApi]({id:d.ivrCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){d.pendingChanges=!1,d.startingAllowedItems=angular.copy(d.allowedItems),d.startingSelectedItems=angular.copy(d.selectedItems),i.success({title:"SUCCESS",msg:"Lists association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){d.loading=!1});var n},d.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","ivrCampaign","$translate","$timeout","Auth","crudPermissions"],angular.module("app.motiondialer").controller("IvrCampaignblacklistaddController",e)}(),function(){"use strict";function e(t,n,a,e,i,s,o){var r=this;function l(e){t.hide(e)}r.newIvrCampaign=!0,r.ivrCampaign=angular.copy(i),r.ivrCampaigns=s,r.title=o.instant("MOTIONDIALER.CLONE_IVRCAMPAIGN"),i&&i.name&&(r.title+=": "+i.name),r.cloneIvrCampaign=function(){return e.campaign.clone({id:i.id},r.ivrCampaign).$promise.then(function(e){r.ivrCampaigns.unshift(e.toJSON()),a.success({title:"IvrCampaign properly cloned",msg:r.ivrCampaign.name?r.ivrCampaign.name+" has been cloned!":""}),n.go("app.motiondialer.ivrCampaigns.edit",{id:e.id}),l(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){r.errors=e.data.errors||[{message:e.toString(),type:"api.campaign.clone"}];for(var t=0;t<e.data.errors.length;t+=1)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.campaign.clone",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$mdDialog","$state","toasty","api","ivrCampaign","ivrCampaigns","$translate"],angular.module("app.motiondialer").controller("IvrCampaigncloneController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.ivrCampaign={},c.ivrCampaignHopperBlacks={count:0,rows:[]},c.selectedIvrCampaignHopperBlacks=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,ContactId,phone",sort:"-id",limit:10,page:1},c.init=function(e,t){c.ivrCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHopperBlacks()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopperBlack?").htmlContent("<b>"+(e.name||"hopperBlack")+"</b> will be deleted.").ariaLabel("delete hopperBlack").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getIvrCampaignHopperBlacks=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.campaign.getHopperBlacks(c.query,p).$promise},c.createOrEditIvrCampaignHopperBlack=function(e,t){s.show({controller:"CreateOrEditHopperBlackDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hopperBlacks/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopperBlack:t,hopperBlacks:c.ivrCampaignHopperBlacks.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedIvrCampaignHopperBlacks=function(){var e=angular.copy(c.selectedIvrCampaignHopperBlacks);return c.selectedIvrCampaignHopperBlacks=[],e},c.deleteIvrCampaignHopperBlack=g,c.deleteSelectedIvrCampaignHopperBlacks=function(e){var t=s.confirm().title("Are you sure want to delete the selected hopperBlacks?").htmlContent("<b>"+c.selectedIvrCampaignHopperBlacks.length+" selected</b> will be deleted.").ariaLabel("delete hopperBlacks").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedIvrCampaignHopperBlacks.forEach(function(e){g(e)}),c.selectedIvrCampaignHopperBlacks=[]})};var m=!0,u=1;function p(e){c.ivrCampaignHopperBlacks=e||{count:0,rows:[]}}function g(e){l.hopperBlack.delete({id:e.id}).$promise.then(function(){_.remove(c.ivrCampaignHopperBlacks.rows,{id:e.id}),c.ivrCampaignHopperBlacks.count-=1,c.ivrCampaignHopperBlacks.rows.length||c.getIvrCampaignHopperBlacks(),r.success({title:"HopperBlack deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETcampaign"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getIvrCampaignHopperBlacks())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("IvrCampaignHopperBlacksController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.contacts={},c.ivrCampaign={},c.ivrCampaignHopperFinals={count:0,rows:[]},c.selectedIvrCampaignHopperFinals=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,uniqueid,ContactId,calleridnum,calleridname,statedesc,countcongestionretry,countbusyretry,countnoanswerretry,countglobal,scheduledat,starttime,responsetime,endtime,disposition,ListId,UserId,VoiceQueueId,CampaignId,recallme,deleted,campaign",sort:"-id",limit:10,page:1},c.init=function(e,t){c.ivrCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHopperFinals()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopperFinal?").htmlContent("<b>"+(e.name||"hopperFinal")+"</b> will be deleted.").ariaLabel("delete hopperFinal").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getIvrCampaignHopperFinals=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.campaign.getHopperFinals(c.query,p).$promise},c.createOrEditIvrCampaignHopperFinal=function(e,t){s.show({controller:"CreateOrEditHopperFinalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hopperFinals/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopperFinal:t,hopperFinals:c.ivrCampaignHopperFinals.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedIvrCampaignHopperFinals=function(){var e=angular.copy(c.selectedIvrCampaignHopperFinals);return c.selectedIvrCampaignHopperFinals=[],e},c.deleteIvrCampaignHopperFinal=g,c.deleteSelectedIvrCampaignHopperFinals=function(e){var t=s.confirm().title("Are you sure want to delete the selected hopperFinals?").htmlContent("<b>"+c.selectedIvrCampaignHopperFinals.length+" selected</b> will be deleted.").ariaLabel("delete hopperFinals").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedIvrCampaignHopperFinals.forEach(function(e){g(e)}),c.selectedIvrCampaignHopperFinals=[]})},c.moveIvrCampaignHopperFinal=v,c.moveContactsIvrCampaignHopperFinal=function(e){l.cmHopperFinal.moveContactsIvrCampaignHopperFinal({id:c.query.id,state:e}).$promise.then(function(e){_.isNil(e)&&_.isNil(e[0])?r.info({title:"Restored Contacts",msg:"0"}):r.info({title:"Restored Contacts",msg:JSON.stringify(e[0].affectedRows)})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},c.countContactsIvrCampaignHopperFinal=function(e){l.cmHopperFinal.countContactsIvrCampaignHopperFinal({id:e}).$promise.then(function(e){_.merge(c.contacts,e[0])}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},c.moveConfirm=function(e,t){var n=s.confirm().title("Are you sure want to restore the contact?").htmlContent("<b>Contact</b> will be restored.").ariaLabel("Restore Contact").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){v(e)},function(){console.log("CANCEL")})},c.moveSelectedIvrCampaignHopperFinals=function(e){var t=s.confirm().title("Are you sure want to restore the selected contacts?").htmlContent("<b> Contacts selected</b> will be restored.").ariaLabel("Restore Contacts").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedIvrCampaignHopperFinals.forEach(function(e){v(e)}),c.selectedIvrCampaignHopperFinals=[]})};var m=!0,u=1;function p(e){c.ivrCampaignHopperFinals=e||{count:0,rows:[]}}function g(e){l.hopperFinal.delete({id:e.id}).$promise.then(function(){_.remove(c.ivrCampaignHopperFinals.rows,{id:e.id}),c.ivrCampaignHopperFinals.count-=1,c.ivrCampaignHopperFinals.rows.length||c.getIvrCampaignHopperFinals(),r.success({title:"HopperFinal deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETcampaign"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}function v(a){l.cmHopperFinal.checkContactHopper(a).$promise.then(function(e){r.info({title:"The contact is in the hopper",msg:"Contact ID "+e.ContactId})}).catch(function(e){var t,n;"Not Found"===e.data?l.cmHopper.save((t=a,n={},n.phone=t.calleridnum,n.scheduledat=moment().format("YYYY-MM-DD HH:mm:ss"),n.countbusyretry=0,n.countcongestionretry=0,n.countnoanswerretry=0,n.countglobal=0,n.ContactId=t.ContactId,n.ListId=t.ListId,n.UserId=t.deleted?null:t.UserId,n.VoiceQueueId=t.VoiceQueueId,n.CampaignId=t.CampaignId,n.priority=t.recallme?3:2,n.recallme=!!t.recallme,n)).$promise.then(function(e){var t,n;r.info({title:"Restored Contact",msg:"Contact ID "+e.ContactId}),e.ContactId&&l.cmHopperHistory.save(((n={}).calleridnum=(t=a).calleridnum,n.calleridname=t.calleridname,n.scheduledat=moment().format("YYYY-MM-DD HH:mm:ss"),n.countbusyretry=t.countbusyretry,n.countcongestionretry=t.countcongestionretry,n.countnoanswerretry=t.countnoanswerretry,n.countglobal=t.countglobal,n.ContactId=t.ContactId,n.ListId=t.ListId,n.UserId=d.getCurrentUser().id,n.VoiceQueueId=t.VoiceQueueId,n.CampaignId=t.CampaignId,n.editedat=moment().format("YYYY-MM-DD HH:mm:ss"),n.edited=!0,n.state=25,n.statedesc="Restored",n.campaign=t.campaign,n.campaigntype=t.VoiceQueueId?"queue":"ivr",n))}).catch(function(e){_.isNil(e.data)||"Validation error"!==e.data.message?r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()}):r.info({title:"The contact is in the hopper",msg:"Contact ID "+a.ContactId})}):r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getIvrCampaignHopperFinals())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("IvrCampaignHopperFinalsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.ivrCampaign={},c.ivrCampaignHopperHistories={count:0,rows:[]},c.selectedIvrCampaignHopperHistories=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,uniqueid,ContactId,calleridnum,calleridname,statedesc,scheduledat,starttime,responsetime,endtime",sort:"-id",limit:10,page:1},c.init=function(e,t){c.ivrCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHopperHistories()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopperHistory?").htmlContent("<b>"+(e.name||"hopperHistory")+"</b> will be deleted.").ariaLabel("delete hopperHistory").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getIvrCampaignHopperHistories=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.campaign.getHopperHistories(c.query,p).$promise},c.createOrEditIvrCampaignHopperHistory=function(e,t){s.show({controller:"CreateOrEditHopperHistoryDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hopperHistories/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopperHistory:t,hopperHistories:c.ivrCampaignHopperHistories.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedIvrCampaignHopperHistories=function(){var e=angular.copy(c.selectedIvrCampaignHopperHistories);return c.selectedIvrCampaignHopperHistories=[],e},c.deleteIvrCampaignHopperHistory=g,c.deleteSelectedIvrCampaignHopperHistories=function(e){var t=s.confirm().title("Are you sure want to delete the selected hopperHistories?").htmlContent("<b>"+c.selectedIvrCampaignHopperHistories.length+" selected</b> will be deleted.").ariaLabel("delete hopperHistories").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedIvrCampaignHopperHistories.forEach(function(e){g(e)}),c.selectedIvrCampaignHopperHistories=[]})};var m=!0,u=1;function p(e){c.ivrCampaignHopperHistories=e||{count:0,rows:[]}}function g(e){l.hopperHistory.delete({id:e.id}).$promise.then(function(){_.remove(c.ivrCampaignHopperHistories.rows,{id:e.id}),c.ivrCampaignHopperHistories.count-=1,c.ivrCampaignHopperHistories.rows.length||c.getIvrCampaignHopperHistories(),r.success({title:"HopperHistory deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETcampaign"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getIvrCampaignHopperHistories())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("IvrCampaignHopperHistoriesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.ivrCampaign={},c.ivrCampaignHoppers={count:0,rows:[]},c.selectedIvrCampaignHoppers=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,ContactId,phone,countcongestionretry,countbusyretry,countnoanswerretry,scheduledat,priority",sort:"-updatedAt",limit:10,page:1},c.arraypriority=_.keyBy([{option:"Highest",value:"'4'"},{option:"High",value:"'3'"},{option:"Medium",value:"'2'"},{option:"Low",value:"'1'"},{option:"Lowest",value:"'0'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.ivrCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHoppers()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopper?").htmlContent("<b>"+(e.name||"hopper")+"</b> will be deleted.").ariaLabel("delete hopper").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getIvrCampaignHoppers=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.campaign.getHoppers(c.query,p).$promise},c.createOrEditIvrCampaignHopper=function(e,t){s.show({controller:"CreateOrEditHopperCampaignIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hoppers/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopper:t,hoppers:c.ivrCampaignHoppers.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedIvrCampaignHoppers=function(){var e=angular.copy(c.selectedIvrCampaignHoppers);return c.selectedIvrCampaignHoppers=[],e},c.deleteIvrCampaignHopper=g,c.deleteSelectedIvrCampaignHoppers=function(e){var t=s.confirm().title("Are you sure want to delete the selected hoppers?").htmlContent("<b>"+c.selectedIvrCampaignHoppers.length+" selected</b> will be deleted.").ariaLabel("delete hoppers").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedIvrCampaignHoppers.forEach(function(e){g(e)}),c.selectedIvrCampaignHoppers=[]})},d.hasRole("admin")?l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(c.agents,{id:e.resourceId})});c.agents.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),c.agents=t})}else c.agents=[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=!0,u=1;function p(e){c.ivrCampaignHoppers=e||{count:0,rows:[]}}function g(e){l.cmHopper.delete({id:e.id}).$promise.then(function(){_.remove(c.ivrCampaignHoppers.rows,{id:e.id}),c.ivrCampaignHoppers.count-=1,c.ivrCampaignHoppers.rows.length||c.getIvrCampaignHoppers(),r.success({title:"Hopper deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETcampaign"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getIvrCampaignHoppers())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("IvrCampaignHoppersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MOTIONDIALER.EDIT_HOPPER",g.hopper=angular.copy(l),g.hoppers=r,g.newHopper=!1,g.hopper||(g.hopper={},g.title="MOTIONDIALER.NEW_HOPPER",g.newHopper=!0),t.params.id&&(g.hopper.CampaignId=t.params.id),g.addNewHopper=function(){g.errors=[],d.cmHopper.save(g.hopper).$promise.then(function(e){g.hoppers.unshift(e.toJSON()),o.success({title:"Hopper properly created",msg:g.hopper.name?g.hopper.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmHopper.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveHopper=function(){var n,a,i,s;g.errors=[],g.hopper.UserId=g.hopper.recallme?g.hopper.UserId:null,g.hopper.OwnerId=c.getCurrentUser().id,d.cmHopper.get({id:g.hopper.id,attributes:["scheduledat"]}).$promise.then(function(e){n=_.isNil(e)||_.isEmpty(e)?moment().format("YYYY-MM-DD HH:mm:ss"):e.scheduledat}).finally(function(){d.cmHopper.update({id:g.hopper.id},_.omit(g.hopper,["VoiceQueueId","CampaignId","ContactId","ListId"])).$promise.then(function(e){a=e,d.cmContact.get({id:a.ContactId,attributes:["firstName","lastName"]}).$promise.then(function(e){_.isNil(e)||_.isNil(e.firstName)||(i=e.firstName,_.isNil(e.lastName)||(i+=" "+e.lastName))}).catch(function(){i=void 0}).finally(function(){d.campaign.get({raw:!1,id:a.CampaignId,attributes:["name"]}).$promise.then(function(e){s=e.name}).catch(function(e){s=void 0}).finally(function(){d.cmHopperHistory.save({state:24,statedesc:"Edited",scheduledat:n,calleridnum:a.phone,calleridname:i,campaigntype:a.VoiceQueueId?"queue":"ivr",campaign:s,editedat:moment().format("YYYY-MM-DD HH:mm:ss"),edited:!0,ListId:a.ListId,UserId:c.getCurrentUser().id,VoiceQueueId:a.VoiceQueueId,CampaignId:a.CampaignId,ContactId:a.ContactId,callback:a.callback,callbackuniqueid:a.callbackuniqueid,countbusyretry:a.countbusyretry,countcongestionretry:a.countcongestionretry,countglobal:a.countglobal,countnoanswerretry:a.countnoanswerretry,followuptime:a.followuptime,recallme:a.recallme})})});var t=_.find(g.hoppers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Hopper properly saved!",msg:g.hopper.name?g.hopper.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmHopper.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})})},g.deleteHopper=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The hopper will be deleted.").ariaLabel("Delete Hopper").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cmHopper.delete({id:g.hopper.id}).$promise.then(function(){_.remove(g.hoppers,{id:g.hopper.id}),o.success({title:"Hopper properly deleted!",msg:(g.hopper.name||"hopper")+" has been deleted!"}),v(g.hopper)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmHopper.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){g.agents=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){g.agents=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.agents,{id:e.resourceId})});g.agents.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),g.agents=t})}else g.agents=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","hoppers","hopper","api","Auth","license","setting","crudPermissions"],angular.module("app.motiondialer").controller("CreateOrEditHopperCampaignIdDialogController",e)}(),function(){"use strict";function e(n,a){var i=this;i.ivrCampaign={},i.init=function(t){i.ivrCampaign=t,n.cmHopper.get({limit:0,CampaignId:t.id}).$promise.then(function(e){return i.total=e.count||0,n.cmHopper.get({limit:0,CampaignId:t.id,active:!1,countbusyretry:0,countcongestionretry:0,countnoanswerretry:0}).$promise}).then(function(e){return i.fresh=e.count||0,n.cmHopperFinal.get({limit:0,CampaignId:t.id}).$promise}).then(function(e){i.closed=e.count||0}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["api","toasty"],angular.module("app.motiondialer").controller("IvrCampaignHopperStatisticsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l){var d=this;function c(){return a(function(n,t){return a(function(t,n){return s.cmList.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return d.items=e.rows?e.rows:[],r.hasRole("admin")?e:d.section?d.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:d.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return d.allowedItems=_.map(t,function(e){return _.find(d.items,{id:r.hasRole("admin")||d.section.autoAssociation?e.id:e.resourceId})}),d.startingAllowedItems=angular.copy(d.allowedItems),d.items.forEach(function(e){var t=_.find(d.allowedItems,{id:e.id});"admin"===d.currentUser.role?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s[d.apiRoute][d.getApi]({id:d.ivrCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];d.selectedItems=_.map(t,function(e){return _.find(d.items,{id:e.id})}),d.startingSelectedItems=angular.copy(d.selectedItems),d.dualMultiselectOptions.selectedItems=d.selectedItems,d.dualMultiselectOptions.items=_.differenceBy(d.allowedItems,d.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}d.currentUser=r.getCurrentUser(),d.ivrCampaign=t,d.crudPermissions=l,d.apiRoute="campaign",d.getApi="getLists",d.addApi="addLists",d.removeApi="removeLists",d.items=[],d.allowedItems=[],d.selectedItems=[],d.startingAllowedItems=[],d.startingSelectedItems=[],d.pendingChanges=!1,d.loading=!1,d.dualMultiselectOptions={readOnly:!d.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:n.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){var n=_.xorBy(d.startingSelectedItems,d.selectedItems,"id");d.pendingChanges=!_.isEmpty(n)}},d.onInit=function(){return r.hasRole("admin")?c().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:d.currentUser.userProfileId,name:"Lists"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return d.section=e,c()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},d.saveLists=function(){d.loading=!0;var e=_.differenceBy(d.startingSelectedItems,d.selectedItems,"id"),t=_.differenceBy(d.selectedItems,d.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.removeApi]({id:d.ivrCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.addApi]({id:d.ivrCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){d.pendingChanges=!1,d.startingAllowedItems=angular.copy(d.allowedItems),d.startingSelectedItems=angular.copy(d.selectedItems),i.success({title:"SUCCESS",msg:"Lists association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){d.loading=!1});var n},d.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","ivrCampaign","$translate","$timeout","Auth","crudPermissions"],angular.module("app.motiondialer").controller("IvrCampaignlistaddController",e)}(),function(){"use strict";function e(e,t,a,i,s,n,o,r){var l=this;function d(){t.hide()}function c(e,t){var n=t.id;o.enqueue(function(){return i.campaign.removeLists({id:e,ids:n}).$promise.then(function(){return i.campaign.addLists({id:e,ids:n,dialCheckDuplicateType:"never"}).$promise}).then(function(){a.success({title:"Reset Succesfull",msg:"List "+t.name+" has been reset"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:queueCampaign.RESETLIST",msg:e.status?JSON.stringify(e.data):e.toString()})})})}l.selected=[],l.items=n||[],l.loading=!1,l.closeDialog=d,l.exists=function(e,t){return-1<t.indexOf(e)},l.toggle=function(e,t){var n=t.indexOf(e);-1<n?t.splice(n,1):t.push(e)},l.isIndeterminate=function(){return 0!==l.selected.length&&l.selected.length!==l.items.length},l.isChecked=function(){return l.selected.length===l.items.length},l.toggleAll=function(){l.selected.length===l.items.length?l.selected=[]:(0===l.selected.length||0<l.selected.length)&&(l.selected=l.items.slice(0))},l.listSelected=function(){l.loading=!0,r(function(e,t){for(var n=0;n<l.selected.length;n+=1)c(s.id,l.selected[n]);var a;a=e,o.enqueue(function(){return a()})}).finally(function(){l.loading=!1,d()})}}e.$inject=["$scope","$mdDialog","toasty","api","ivrCampaign","listsCampaign","Sequence","$q"],angular.module("app.motiondialer").controller("IvrCampaignresetlistController",e)}(),function(){"use strict";function e(n,e,i,s,a,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.ivrCampaign=c||n.params.ivrCampaign||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.clonedialog=function(e,t){i.show({controller:"IvrCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:u.ivrCampaigns?u.ivrCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.listadddialog=function(e,t){i.show({controller:"IvrCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/listadd/listadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:u.ivrCampaigns?u.ivrCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.blacklistadddialog=function(e,t){i.show({controller:"IvrCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:u.ivrCampaigns?u.ivrCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.resetlistdialog=function(t,n){r.campaign.getLists({id:t.id,fields:"id,name",nolimit:!0}).$promise.then(function(a){if(_.isNil(a.rows)||_.isEmpty(a.rows))l.info({title:"Campaign Without Lists"});else if(1===a.rows.length){var e=i.confirm().title("Are you sure want to reset the list "+a.rows[0].name+" ?").htmlContent("<b>"+a.rows[0].name+"</b> will be reset.").ariaLabel("Reset List").targetEvent(n).ok("OK").cancel("CANCEL");i.show(e).then(function(){var e,t,n;e=u.ivrCampaign.id,t=a.rows[0],n=t.id,r.campaign.removeLists({id:e,ids:n}).$promise.then(function(){return r.campaign.addLists({id:e,ids:n,dialCheckDuplicateType:"never"}).$promise}).then(function(){l.success({title:"Reset Succesfull",msg:"List "+t.name+" has been reset"})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ivrCampaign.REMOVELIST",msg:e.status?JSON.stringify(e.data):e.toString()})})})}else i.show({controller:"IvrCampaignresetlistController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/resetlist/resetlist.html",parent:angular.element(s.body),targetEvent:n,clickOutsideToClose:!1,locals:{ivrCampaign:t,listsCampaign:a?a.rows:[]}})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:RESETLIST",msg:e.status?JSON.stringify(e.data):e.toString()})})},u.gotogoto=function(e,t){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:1510}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.motiondialer.realtime.ivr_campaigns",{}):l.info({title:a.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:a.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.motiondialer.realtime.ivr_campaigns",{})}},u.alert=l.info,u.gotoIvrCampaigns=function(){n.go("app.motiondialer.ivrCampaigns")},u.saveIvrCampaign=function(){r.campaign.update({id:u.ivrCampaign.id},u.ivrCampaign).$promise.then(function(){l.success({title:"IvrCampaign updated!",msg:u.ivrCampaign.name?u.ivrCampaign.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.trunks,{id:e.resourceId})});u.trunks.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.trunks=t})}else u.trunks=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.projects=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.projects=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1103}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.projects,{id:e.resourceId})}),n=null;if(u.ivrCampaign&&(n=_.find(u.projects,{id:Number(u.ivrCampaign.SquareProjectId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.projects,{id:n.id});a.canSelect=!1,t.push(a)}u.projects=t})}else{var n=[],a=null;u.ivrCampaign&&(a=_.find(u.projects,{id:Number(u.ivrCampaign.SquareProjectId)}));for(var i=0;i<u.projects.length;i++)a&&u.projects[i].id===a.id&&(u.projects[i].canSelect=!1,n.push(u.projects[i]));u.projects=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.interval,{id:e.resourceId})}),n=null;if(u.ivrCampaign&&(n=_.find(u.interval,{id:Number(u.ivrCampaign.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.interval,{id:n.id});a.canSelect=!1,t.push(a)}u.interval=t})}else{var n=[],a=null;u.ivrCampaign&&(a=_.find(u.interval,{id:Number(u.ivrCampaign.IntervalId)}));for(var i=0;i<u.interval.length;i++)a&&u.interval[i].id===a.id&&(u.interval[i].canSelect=!1,n.push(u.interval[i]));u.interval=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","ivrCampaign","userProfileSection"],angular.module("app.motiondialer").controller("IvrCampaignController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.ivrCampaigns=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="ivrCampaigns",b.listOrder="",b.listOrderAsc=null,b.selectedIvrCampaigns=[],b.query={fields:"createdAt,updatedAt,id,name,active,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,SquareProjectId,limitCalls,description,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,dialOrderByScheduledAt,dialGlobalInterval,dialTimezone,dialPrefix,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength",type:"ivr",sort:"-updatedAt",limit:10,page:1},b.arraydialCheckDuplicateType=_.keyBy([{option:"ALWAYS",value:"'always'"},{option:"NEVER",value:"'never'"},{option:"ONLY_IF_OPEN",value:"'onlyIfOpen'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydialOrderByScheduledAt=_.keyBy([{option:"DESC",value:"'DESC'"},{option:"ASC",value:"'ASC'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.motiondialer.ivrCampaigns.edit",{id:e.id,ivrCampaign:e,crudPermissions:b.crudPermissions})},b.clonedialog=function(e,t){i.show({controller:"IvrCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:b.ivrCampaigns?b.ivrCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.listadddialog=function(e,t){i.show({controller:"IvrCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/listadd/listadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:b.ivrCampaigns?b.ivrCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.blacklistadddialog=function(e,t){i.show({controller:"IvrCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:b.ivrCampaigns?b.ivrCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("ivrCampaign")+"?").htmlContent("<b>"+(e.name||"ivrCampaign")+"</b> will be deleted.").ariaLabel("delete ivrCampaign").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:1510}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.motiondialer.realtime.ivr_campaigns",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.motiondialer.realtime.ivr_campaigns",{})}},b.success=y,b.getIvrCampaigns=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.campaign.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="IvrCampaigns",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditIvrCampaign=function(e,t){i.show({controller:"CreateOrEditIvrCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:t,ivrCampaigns:b.ivrCampaigns.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteIvrCampaign=S,b.exportSelectedIvrCampaigns=function(){var e=angular.copy(b.selectedIvrCampaigns);return b.selectedIvrCampaigns=[],e},b.deleteSelectedIvrCampaigns=function(e){var t=i.confirm().title("Are you sure want to delete the selected ivrCampaigns?").htmlContent("<b>"+b.selectedIvrCampaigns.length+" selected</b> will be deleted.").ariaLabel("delete IvrCampaigns").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedIvrCampaigns.forEach(function(e){S(e)}),b.selectedIvrCampaigns=[]})},b.deselectIvrCampaigns=function(){b.selectedIvrCampaigns=[]},b.selectAllIvrCampaigns=function(){b.selectedIvrCampaigns=b.ivrCampaigns.rows},g.hasRole("admin")?m.trunk.get({fields:"id,name",sort:"name",table:"true"}).$promise.then(function(e){b.trunks=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.trunk.get({fields:"id,name",sort:"name",table:"true"}).$promise.then(function(e){b.trunks=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.trunks,{id:e.resourceId})});b.trunks.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),b.trunks=t})}else b.trunks=[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),g.hasRole("admin")?m.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.projects=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.projects=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1103}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(b.projects,{id:e.resourceId})}),a=null;a=[],b.ivrCampaigns.rows.forEach(function(e){var t=_.find(b.projects,{id:Number(e.SquareProjectId)});a.push(t)}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(b.projects,{id:e.id});t.canSelect=!1,n.push(t)}}),b.projects=n})}else{var n=[],a=[];b.ivrCampaigns.rows.forEach(function(e){var t=_.find(b.projects,{id:Number(e.SquareProjectId)});a.push(t)});for(var i=0;i<b.projects.length;i++){_.some(a,{id:b.projects[i].id})&&(b.projects[i].canSelect=!1,n.push(b.projects[i]))}b.projects=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),g.hasRole("admin")?m.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){b.interval=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){b.interval=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.interval,{id:e.resourceId})}),n=null;if(b.ivrCampaign&&(n=_.find(b.interval,{id:Number(b.ivrCampaign.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.interval,{id:n.id});a.canSelect=!1,t.push(a)}b.interval=t})}else{var n=[],a=null;b.ivrCampaign&&(a=_.find(b.interval,{id:Number(b.ivrCampaign.IntervalId)}));for(var i=0;i<b.interval.length;i++)a&&b.interval[i].id===a.id&&(b.interval[i].canSelect=!1,n.push(b.interval[i]));b.interval=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.ivrCampaigns=e||{count:0,rows:[]}}function S(e){m.campaign.delete({id:e.id}).$promise.then(function(){_.remove(b.ivrCampaigns.rows,{id:e.id}),b.ivrCampaigns.count-=1,b.ivrCampaigns.rows.length||b.getIvrCampaigns(),p.success({title:_.startCase("IvrCampaign")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcampaign"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getIvrCampaigns())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","ivrCampaigns","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.motiondialer").controller("IvrCampaignsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MOTIONDIALER.EDIT_QUEUECAMPAIGN",g.queueCampaign=angular.copy(l),g.queueCampaigns=r,g.newQueueCampaign=!1,g.queueCampaign||(g.queueCampaign={dialActive:!0,type:"outbound",dialCheckDuplicateType:"always",dialCutDigit:0,autopause:"no",ringinuse:"no",timeoutrestart:"no",setinterfacevar:"no",setqueuevar:"no",setqueueentryvar:"no",dialOrderByScheduledAt:"ASC",dialGlobalInterval:"07:00-22:00,*,*,*",dialAMDInitialSilence:2500,dialAMDGreeting:1500,dialAMDAfterGreetingSilence:800,dialAMDTotalAnalysisTime:5e3,dialAMDMinWordLength:100,dialAMDBetweenWordsSilence:50,dialAMDMaximumNumberOfWords:3,dialAMDSilenceThreshold:256,dialAMDMaximumWordLength:5e3,dialMethod:"progressive",dialPowerLevel:1,dialPredictiveOptimization:"dropRate",dialPredictiveOptimizationPercentage:3,dialPredictiveInterval:10,dialLimitQueue:0,dialRandomLastDigitCallerIdNumber:0,dialOriginateTimeout:30,dialQueueOptions:"tTxX",dialQueueTimeout:3,strategy:"rrmemory",timeout:3,retry:3,weight:1,dialGlobalMaxRetry:4,dialCongestionMaxRetry:3,dialCongestionRetryFrequency:150,dialBusyMaxRetry:3,dialBusyRetryFrequency:150,dialNoAnswerMaxRetry:3,dialNoAnswerRetryFrequency:150,dialPredictiveIntervalMaxThreshold:20,dialPredictiveIntervalMinThreshold:10},g.title="MOTIONDIALER.NEW_QUEUECAMPAIGN",g.newQueueCampaign=!0),g.addNewQueueCampaign=function(){g.errors=[],d.voiceQueue.save(g.queueCampaign).$promise.then(function(e){g.queueCampaigns.unshift(e.toJSON()),o.success({title:"QueueCampaign properly created",msg:g.queueCampaign.name?g.queueCampaign.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveQueueCampaign=function(){g.errors=[],d.voiceQueue.update({id:g.queueCampaign.id},g.queueCampaign).$promise.then(function(e){var t=_.find(g.queueCampaigns,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"QueueCampaign properly saved!",msg:g.queueCampaign.name?g.queueCampaign.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteQueueCampaign=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The queueCampaign will be deleted.").ariaLabel("Delete QueueCampaign").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceQueue.delete({id:g.queueCampaign.id}).$promise.then(function(){_.remove(g.queueCampaigns,{id:g.queueCampaign.id}),o.success({title:"QueueCampaign properly deleted!",msg:(g.queueCampaign.name||"queueCampaign")+" has been deleted!"}),v(g.queueCampaign)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.trunks=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.trunks=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.trunks,{id:e.resourceId})}),n=null;if(g.queueCampaign&&(n=_.find(g.trunks,{id:Number(g.queueCampaign.TrunkId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.trunks,{id:n.id});a.canSelect=!1,t.push(a)}g.trunks=t})}else{var n=[],a=null;g.queueCampaign&&(a=_.find(g.trunks,{id:Number(g.queueCampaign.TrunkId)}));for(var i=0;i<g.trunks.length;i++)a&&g.trunks[i].id===a.id&&(g.trunks[i].canSelect=!1,n.push(g.trunks[i]));g.trunks=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.hasRole("admin")?d.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){g.interval=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){g.interval=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.interval,{id:e.resourceId})}),n=null;if(g.queueCampaign&&(n=_.find(g.interval,{id:Number(g.queueCampaign.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.interval,{id:n.id});a.canSelect=!1,t.push(a)}g.interval=t})}else{var n=[],a=null;g.queueCampaign&&(a=_.find(g.interval,{id:Number(g.queueCampaign.IntervalId)}));for(var i=0;i<g.interval.length;i++)a&&g.interval[i].id===a.id&&(g.interval[i].canSelect=!1,n.push(g.interval[i]));g.interval=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","queueCampaigns","queueCampaign","api","Auth","license","setting","crudPermissions"],angular.module("app.motiondialer").controller("CreateOrEditQueueCampaignDialogController",e)}(),function(){"use strict";function e(e,l,a,d,t,n,i,s,o,r){var c=this;function m(){return l(function(n,t){return l(function(t,n){return d.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],o.hasRole("admin")?e:c.section?c.section.autoAssociation?e:l(function(t,n){return d.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:o.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),l(function(t,n){return d.voiceQueue.getAgents({id:c.queueCampaign.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=o.getCurrentUser(),c.queueCampaign=t,c.crudPermissions=r,c.penalty=0,c.realtime=i,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return o.hasRole("admin")?m().catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):l(function(n,t){d.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceWith(c.selectedItems,c.startingSelectedItems,function(e,t){return e.id===t.id&&e.penalty===t.penalty});return(n=e,l(function(e,t){_.isEmpty(n)?e():d.voiceQueue.removeAgents({id:c.queueCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return r=t,l(function(e,t){if(_.isEmpty(r))e();else{for(var n=[],a=_.groupBy(r,"penalty"),i=0;i<Object.keys(a).length;i++){var s=Object.keys(a)[i],o=_.filter(r,["penalty",s]);n.push(d.voiceQueue.addAgents({id:c.queueCampaign.id,ids:_.map(o,"id"),penalty:_.trim(s,"penalty "),realtime:c.realtime||!1}).$promise)}l.all(n).then(function(){e()}).catch(function(e){t(e)})}});var r}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),a.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("MOTIONDIALER.ALL_AGENTS"),labelSelected:s.instant("MOTIONDIALER.SELECTED_AGENTS"),transferCallback:function(e,t){t?e.forEach(function(e){e.penalty=void 0}):e.forEach(function(e){e.penalty="penalty "+c.penalty});var n=_.xorWith(c.startingSelectedItems,c.selectedItems,function(e,t){return e.id===t.id&&e.penalty===t.penalty});c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","queueCampaign","queueCampaigns","realtime","$translate","Auth","crudPermissions"],angular.module("app.motiondialer").controller("QueueCampaignagentaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l){var d=this;function c(){return a(function(n,t){return a(function(t,n){return s.cmList.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return d.items=e.rows?e.rows:[],r.hasRole("admin")?e:d.section?d.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:d.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return d.allowedItems=_.map(t,function(e){return _.find(d.items,{id:r.hasRole("admin")||d.section.autoAssociation?e.id:e.resourceId})}),d.startingAllowedItems=angular.copy(d.allowedItems),d.items.forEach(function(e){var t=_.find(d.allowedItems,{id:e.id});"admin"===d.currentUser.role?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s[d.apiRoute][d.getApi]({id:d.queueCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];d.selectedItems=_.map(t,function(e){return _.find(d.items,{id:e.id})}),d.startingSelectedItems=angular.copy(d.selectedItems),d.dualMultiselectOptions.selectedItems=d.selectedItems,d.dualMultiselectOptions.items=_.differenceBy(d.allowedItems,d.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}d.currentUser=r.getCurrentUser(),d.queueCampaign=t,d.crudPermissions=l,d.apiRoute="voiceQueue",d.getApi="getBlackLists",d.addApi="addBlackLists",d.removeApi="removeBlackLists",d.items=[],d.allowedItems=[],d.selectedItems=[],d.startingAllowedItems=[],d.startingSelectedItems=[],d.pendingChanges=!1,d.loading=!1,d.dualMultiselectOptions={readOnly:!d.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:n.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){var n=_.xorBy(d.startingSelectedItems,d.selectedItems,"id");d.pendingChanges=!_.isEmpty(n)}},d.onInit=function(){return r.hasRole("admin")?c().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:d.currentUser.userProfileId,name:"Lists"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return d.section=e,c()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},d.saveLists=function(){d.loading=!0;var e=_.differenceBy(d.startingSelectedItems,d.selectedItems,"id"),t=_.differenceBy(d.selectedItems,d.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.removeApi]({id:d.queueCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.addApi]({id:d.queueCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){d.pendingChanges=!1,d.startingAllowedItems=angular.copy(d.allowedItems),d.startingSelectedItems=angular.copy(d.selectedItems),i.success({title:"SUCCESS",msg:"Lists association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){d.loading=!1});var n},d.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","queueCampaign","$translate","$timeout","Auth","crudPermissions"],angular.module("app.motiondialer").controller("QueueCampaignblacklistaddController",e)}(),function(){"use strict";function e(t,n,a,e,i,s,o){var r=this;function l(e){t.hide(e)}r.newQueueCampaign=!0,r.queueCampaign=angular.copy(i),r.queueCampaigns=s,r.title=o.instant("MOTIONDIALER.CLONE_QUEUECAMPAIGN"),i&&i.name&&(r.title+=": "+i.name),r.cloneQueueCampaign=function(){return e.voiceQueue.clone({id:i.id},r.queueCampaign).$promise.then(function(e){r.queueCampaigns.unshift(e.toJSON()),a.success({title:"QueueCampaign properly cloned",msg:r.queueCampaign.name?r.queueCampaign.name+" has been cloned!":""}),n.go("app.motiondialer.queueCampaigns.edit",{id:e.id}),l(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){r.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.clone"}];for(var t=0;t<e.data.errors.length;t+=1)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.clone",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$mdDialog","$state","toasty","api","queueCampaign","queueCampaigns","$translate"],angular.module("app.motiondialer").controller("QueueCampaigncloneController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.queueCampaign={},c.queueCampaignHopperBlacks={count:0,rows:[]},c.selectedQueueCampaignHopperBlacks=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,ContactId,phone",sort:"-id",limit:10,page:1},c.init=function(e,t){c.queueCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHopperBlacks()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopperBlack?").htmlContent("<b>"+(e.name||"hopperBlack")+"</b> will be deleted.").ariaLabel("delete hopperBlack").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getQueueCampaignHopperBlacks=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.voiceQueue.getHopperBlacks(c.query,p).$promise},c.createOrEditQueueCampaignHopperBlack=function(e,t){s.show({controller:"CreateOrEditHopperBlackDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hopperBlacks/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopperBlack:t,hopperBlacks:c.queueCampaignHopperBlacks.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedQueueCampaignHopperBlacks=function(){var e=angular.copy(c.selectedQueueCampaignHopperBlacks);return c.selectedQueueCampaignHopperBlacks=[],e},c.deleteQueueCampaignHopperBlack=g,c.deleteSelectedQueueCampaignHopperBlacks=function(e){var t=s.confirm().title("Are you sure want to delete the selected hopperBlacks?").htmlContent("<b>"+c.selectedQueueCampaignHopperBlacks.length+" selected</b> will be deleted.").ariaLabel("delete hopperBlacks").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedQueueCampaignHopperBlacks.forEach(function(e){g(e)}),c.selectedQueueCampaignHopperBlacks=[]})};var m=!0,u=1;function p(e){c.queueCampaignHopperBlacks=e||{count:0,rows:[]}}function g(e){l.hopperBlack.delete({id:e.id}).$promise.then(function(){_.remove(c.queueCampaignHopperBlacks.rows,{id:e.id}),c.queueCampaignHopperBlacks.count-=1,c.queueCampaignHopperBlacks.rows.length||c.getQueueCampaignHopperBlacks(),r.success({title:"HopperBlack deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETvoiceQueue"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getQueueCampaignHopperBlacks())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("QueueCampaignHopperBlacksController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.contacts={},c.queueCampaign={},c.queueCampaignHopperFinals={count:0,rows:[]},c.selectedQueueCampaignHopperFinals=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,uniqueid,ContactId,calleridnum,calleridname,statedesc,countcongestionretry,countbusyretry,countnoanswerretry,countglobal,scheduledat,starttime,responsetime,endtime,disposition,ListId,UserId,VoiceQueueId,CampaignId,recallme,deleted,campaign",sort:"-id",limit:10,page:1},c.init=function(e,t){c.queueCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHopperFinals()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopperFinal?").htmlContent("<b>"+(e.name||"hopperFinal")+"</b> will be deleted.").ariaLabel("delete hopperFinal").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getQueueCampaignHopperFinals=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.voiceQueue.getHopperFinals(c.query,p).$promise},c.createOrEditQueueCampaignHopperFinal=function(e,t){s.show({controller:"CreateOrEditHopperFinalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hopperFinals/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopperFinal:t,hopperFinals:c.queueCampaignHopperFinals.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedQueueCampaignHopperFinals=function(){var e=angular.copy(c.selectedQueueCampaignHopperFinals);return c.selectedQueueCampaignHopperFinals=[],e},c.deleteQueueCampaignHopperFinal=g,c.deleteSelectedQueueCampaignHopperFinals=function(e){var t=s.confirm().title("Are you sure want to delete the selected hopperFinals?").htmlContent("<b>"+c.selectedQueueCampaignHopperFinals.length+" selected</b> will be deleted.").ariaLabel("delete hopperFinals").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedQueueCampaignHopperFinals.forEach(function(e){g(e)}),c.selectedQueueCampaignHopperFinals=[]})},c.moveQueueCampaignHopperFinal=v,c.moveContactsQueueCampaignHopperFinal=function(e){l.cmHopperFinal.moveContactsQueueCampaignHopperFinal({id:c.query.id,state:e}).$promise.then(function(e){_.isNil(e)&&_.isNil(e[0])?r.info({title:"Restored Contacts",msg:"0"}):r.info({title:"Restored Contacts",msg:JSON.stringify(e[0].affectedRows)})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},c.countContactsQueueCampaignHopperFinal=function(e){l.cmHopperFinal.countContactsQueueCampaignHopperFinal({id:e}).$promise.then(function(e){_.merge(c.contacts,e[0])}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},c.moveConfirm=function(e,t){var n=s.confirm().title("Are you sure want to restore the contact?").htmlContent("<b>Contact</b> will be restored.").ariaLabel("Restore Contact").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){v(e)},function(){console.log("CANCEL")})},c.moveSelectedQueueCampaignHopperFinals=function(e){var t=s.confirm().title("Are you sure want to restore the selected contacts?").htmlContent("<b> Contacts selected</b> will be restored.").ariaLabel("Restore Contacts").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedQueueCampaignHopperFinals.forEach(function(e){v(e)}),c.selectedQueueCampaignHopperFinals=[]})};var m=!0,u=1;function p(e){c.queueCampaignHopperFinals=e||{count:0,rows:[]}}function g(e){l.hopperFinal.delete({id:e.id}).$promise.then(function(){_.remove(c.queueCampaignHopperFinals.rows,{id:e.id}),c.queueCampaignHopperFinals.count-=1,c.queueCampaignHopperFinals.rows.length||c.getQueueCampaignHopperFinals(),r.success({title:"HopperFinal deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETvoiceQueue"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}function v(a){l.cmHopperFinal.checkContactHopper(a).$promise.then(function(e){r.info({title:"The contact is in the hopper",msg:"Contact ID "+e.ContactId})}).catch(function(e){var t,n;"Not Found"===e.data?l.cmHopper.save((t=a,n={},n.phone=t.calleridnum,n.scheduledat=moment().format("YYYY-MM-DD HH:mm:ss"),n.countbusyretry=0,n.countcongestionretry=0,n.countnoanswerretry=0,n.countglobal=0,n.ContactId=t.ContactId,n.ListId=t.ListId,n.UserId=t.deleted?null:t.UserId,n.VoiceQueueId=t.VoiceQueueId,n.CampaignId=t.CampaignId,n.priority=t.recallme?3:2,n.recallme=!!t.recallme,n)).$promise.then(function(e){var t,n;r.info({title:"Restored Contact",msg:"Contact ID "+e.ContactId}),e.ContactId&&l.cmHopperHistory.save(((n={}).calleridnum=(t=a).calleridnum,n.calleridname=t.calleridname,n.scheduledat=moment().format("YYYY-MM-DD HH:mm:ss"),n.countbusyretry=t.countbusyretry,n.countcongestionretry=t.countcongestionretry,n.countnoanswerretry=t.countnoanswerretry,n.countglobal=t.countglobal,n.ContactId=t.ContactId,n.ListId=t.ListId,n.UserId=d.getCurrentUser().id,n.VoiceQueueId=t.VoiceQueueId,n.CampaignId=t.CampaignId,n.editedat=moment().format("YYYY-MM-DD HH:mm:ss"),n.edited=!0,n.state=25,n.statedesc="Restored",n.campaign=t.campaign,n.campaigntype=t.VoiceQueueId?"queue":"ivr",n))}).catch(function(e){_.isNil(e.data)||"Validation error"!==e.data.message?r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()}):r.info({title:"The contact is in the hopper",msg:"Contact ID "+a.ContactId})}):r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getQueueCampaignHopperFinals())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("QueueCampaignHopperFinalsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.queueCampaign={},c.queueCampaignHopperHistories={count:0,rows:[]},c.selectedQueueCampaignHopperHistories=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,uniqueid,ContactId,calleridnum,calleridname,statedesc,scheduledat,starttime,responsetime,endtime",sort:"-id",limit:10,page:1},c.init=function(e,t){c.queueCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHopperHistories()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopperHistory?").htmlContent("<b>"+(e.name||"hopperHistory")+"</b> will be deleted.").ariaLabel("delete hopperHistory").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getQueueCampaignHopperHistories=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.voiceQueue.getHopperHistories(c.query,p).$promise},c.createOrEditQueueCampaignHopperHistory=function(e,t){s.show({controller:"CreateOrEditHopperHistoryDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hopperHistories/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopperHistory:t,hopperHistories:c.queueCampaignHopperHistories.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedQueueCampaignHopperHistories=function(){var e=angular.copy(c.selectedQueueCampaignHopperHistories);return c.selectedQueueCampaignHopperHistories=[],e},c.deleteQueueCampaignHopperHistory=g,c.deleteSelectedQueueCampaignHopperHistories=function(e){var t=s.confirm().title("Are you sure want to delete the selected hopperHistories?").htmlContent("<b>"+c.selectedQueueCampaignHopperHistories.length+" selected</b> will be deleted.").ariaLabel("delete hopperHistories").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedQueueCampaignHopperHistories.forEach(function(e){g(e)}),c.selectedQueueCampaignHopperHistories=[]})};var m=!0,u=1;function p(e){c.queueCampaignHopperHistories=e||{count:0,rows:[]}}function g(e){l.hopperHistory.delete({id:e.id}).$promise.then(function(){_.remove(c.queueCampaignHopperHistories.rows,{id:e.id}),c.queueCampaignHopperHistories.count-=1,c.queueCampaignHopperHistories.rows.length||c.getQueueCampaignHopperHistories(),r.success({title:"HopperHistory deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETvoiceQueue"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getQueueCampaignHopperHistories())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("QueueCampaignHopperHistoriesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.queueCampaign={},c.queueCampaignHoppers={count:0,rows:[]},c.selectedQueueCampaignHoppers=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,ContactId,phone,countcongestionretry,countbusyretry,countnoanswerretry,scheduledat,priority,recallme,UserId",sort:"-updatedAt",limit:10,page:1},c.arraypriority=_.keyBy([{option:"Highest",value:"'4'"},{option:"High",value:"'3'"},{option:"Medium",value:"'2'"},{option:"Low",value:"'1'"},{option:"Lowest",value:"'0'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.queueCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHoppers()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopper?").htmlContent("<b>"+(e.name||"hopper")+"</b> will be deleted.").ariaLabel("delete hopper").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getQueueCampaignHoppers=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.voiceQueue.getHoppers(c.query,p).$promise},c.createOrEditQueueCampaignHopper=function(e,t){s.show({controller:"CreateOrEditHopperVoiceQueueIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hoppers/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopper:t,hoppers:c.queueCampaignHoppers.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedQueueCampaignHoppers=function(){var e=angular.copy(c.selectedQueueCampaignHoppers);return c.selectedQueueCampaignHoppers=[],e},c.deleteQueueCampaignHopper=g,c.deleteSelectedQueueCampaignHoppers=function(e){var t=s.confirm().title("Are you sure want to delete the selected hoppers?").htmlContent("<b>"+c.selectedQueueCampaignHoppers.length+" selected</b> will be deleted.").ariaLabel("delete hoppers").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedQueueCampaignHoppers.forEach(function(e){g(e)}),c.selectedQueueCampaignHoppers=[]})},d.hasRole("admin")?l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(c.agents,{id:e.resourceId})}),n=null;if(c.queueCampaign&&(n=_.find(c.agents,{id:Number(c.queueCampaign.UserId)})),n&&!_.some(t,["id",n.id])){var a=_.find(c.agents,{id:n.id});a.canSelect=!1,t.push(a)}c.agents=t})}else{var n=[],a=null;c.queueCampaign&&(a=_.find(c.agents,{id:Number(c.queueCampaign.UserId)}));for(var i=0;i<c.agents.length;i++)a&&c.agents[i].id===a.id&&(c.agents[i].canSelect=!1,n.push(c.agents[i]));c.agents=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=!0,u=1;function p(e){c.queueCampaignHoppers=e||{count:0,rows:[]}}function g(e){l.cmHopper.delete({id:e.id}).$promise.then(function(){_.remove(c.queueCampaignHoppers.rows,{id:e.id}),c.queueCampaignHoppers.count-=1,c.queueCampaignHoppers.rows.length||c.getQueueCampaignHoppers(),r.success({title:"Hopper deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETvoiceQueue"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getQueueCampaignHoppers())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("QueueCampaignHoppersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MOTIONDIALER.EDIT_HOPPER",g.hopper=angular.copy(l),g.hoppers=r,g.newHopper=!1,g.hopper||(g.hopper={},g.title="MOTIONDIALER.NEW_HOPPER",g.newHopper=!0),t.params.id&&(g.hopper.VoiceQueueId=t.params.id),g.addNewHopper=function(){g.errors=[],d.cmHopper.save(g.hopper).$promise.then(function(e){g.hoppers.unshift(e.toJSON()),o.success({title:"Hopper properly created",msg:g.hopper.name?g.hopper.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmHopper.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveHopper=function(){var n,a,i,s;g.errors=[],g.hopper.UserId=g.hopper.recallme?g.hopper.UserId:null,g.hopper.OwnerId=c.getCurrentUser().id,d.cmHopper.get({id:g.hopper.id,attributes:["scheduledat"]}).$promise.then(function(e){n=_.isNil(e)||_.isEmpty(e)?moment().format("YYYY-MM-DD HH:mm:ss"):e.scheduledat}).finally(function(){d.cmHopper.update({id:g.hopper.id},_.omit(g.hopper,["VoiceQueueId","CampaignId","ContactId","ListId"])).$promise.then(function(e){a=e,d.cmContact.get({id:a.ContactId,attributes:["firstName","lastName"]}).$promise.then(function(e){_.isNil(e)||_.isNil(e.firstName)||(i=e.firstName,_.isNil(e.lastName)||(i+=" "+e.lastName))}).catch(function(){i=void 0}).finally(function(){d.voiceQueue.get({raw:!1,id:a.VoiceQueueId,attributes:["name"]}).$promise.then(function(e){s=e.name}).catch(function(e){s=void 0}).finally(function(){d.cmHopperHistory.save({state:24,statedesc:"Edited",scheduledat:n,calleridnum:a.phone,calleridname:i,campaigntype:a.VoiceQueueId?"queue":"ivr",campaign:s,editedat:moment().format("YYYY-MM-DD HH:mm:ss"),edited:!0,ListId:a.ListId,UserId:c.getCurrentUser().id,VoiceQueueId:a.VoiceQueueId,CampaignId:a.CampaignId,ContactId:a.ContactId,callback:a.callback,callbackuniqueid:a.callbackuniqueid,countbusyretry:a.countbusyretry,countcongestionretry:a.countcongestionretry,countglobal:a.countglobal,countnoanswerretry:a.countnoanswerretry,followuptime:a.followuptime,recallme:a.recallme})})});var t=_.find(g.hoppers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Hopper properly saved!",msg:g.hopper.name?g.hopper.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmHopper.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})})},g.deleteHopper=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The hopper will be deleted.").ariaLabel("Delete Hopper").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cmHopper.delete({id:g.hopper.id}).$promise.then(function(){_.remove(g.hoppers,{id:g.hopper.id}),o.success({title:"Hopper properly deleted!",msg:(g.hopper.name||"hopper")+" has been deleted!"}),v(g.hopper)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmHopper.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){g.agents=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){g.agents=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.agents,{id:e.resourceId})}),n=null;if(g.hopper&&(n=_.find(g.agents,{id:Number(g.hopper.UserId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.agents,{id:n.id});a.canSelect=!1,t.push(a)}g.agents=t})}else{var n=[],a=null;g.hopper&&(a=_.find(g.agents,{id:Number(g.hopper.UserId)}));for(var i=0;i<g.agents.length;i++)a&&g.agents[i].id===a.id&&(g.agents[i].canSelect=!1,n.push(g.agents[i]));g.agents=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","hoppers","hopper","api","Auth","license","setting","crudPermissions"],angular.module("app.motiondialer").controller("CreateOrEditHopperVoiceQueueIdDialogController",e)}(),function(){"use strict";function e(n,a){var i=this;i.queueCampaign={},i.init=function(t){i.queueCampaign=t,n.cmHopper.get({limit:0,VoiceQueueId:t.id}).$promise.then(function(e){return i.total=e.count||0,n.cmHopper.get({limit:0,VoiceQueueId:t.id,active:!1,countbusyretry:0,countcongestionretry:0,countnoanswerretry:0}).$promise}).then(function(e){return i.fresh=e.count||0,n.cmHopperFinal.get({limit:0,VoiceQueueId:t.id}).$promise}).then(function(e){i.closed=e.count||0}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["api","toasty"],angular.module("app.motiondialer").controller("QueueCampaignHopperStatisticsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l){var d=this;function c(){return a(function(n,t){return a(function(t,n){return s.cmList.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return d.items=e.rows?e.rows:[],r.hasRole("admin")?e:d.section?d.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:d.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return d.allowedItems=_.map(t,function(e){return _.find(d.items,{id:r.hasRole("admin")||d.section.autoAssociation?e.id:e.resourceId})}),d.startingAllowedItems=angular.copy(d.allowedItems),d.items.forEach(function(e){var t=_.find(d.allowedItems,{id:e.id});"admin"===d.currentUser.role?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s[d.apiRoute][d.getApi]({id:d.queueCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];d.selectedItems=_.map(t,function(e){return _.find(d.items,{id:e.id})}),d.startingSelectedItems=angular.copy(d.selectedItems),d.dualMultiselectOptions.selectedItems=d.selectedItems,d.dualMultiselectOptions.items=_.differenceBy(d.allowedItems,d.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}d.currentUser=r.getCurrentUser(),d.queueCampaign=t,d.crudPermissions=l,d.apiRoute="voiceQueue",d.getApi="getLists",d.addApi="addLists",d.removeApi="removeLists",d.items=[],d.allowedItems=[],d.selectedItems=[],d.startingAllowedItems=[],d.startingSelectedItems=[],d.pendingChanges=!1,d.loading=!1,d.dualMultiselectOptions={readOnly:!d.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:n.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){var n=_.xorBy(d.startingSelectedItems,d.selectedItems,"id");d.pendingChanges=!_.isEmpty(n)}},d.onInit=function(){return r.hasRole("admin")?c().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:d.currentUser.userProfileId,name:"Lists"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return d.section=e,c()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},d.saveLists=function(){d.loading=!0;var e=_.differenceBy(d.startingSelectedItems,d.selectedItems,"id"),t=_.differenceBy(d.selectedItems,d.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.removeApi]({id:d.queueCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.addApi]({id:d.queueCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){d.pendingChanges=!1,d.startingAllowedItems=angular.copy(d.allowedItems),d.startingSelectedItems=angular.copy(d.selectedItems),i.success({title:"SUCCESS",msg:"Lists association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){d.loading=!1});var n},d.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","queueCampaign","$translate","$timeout","Auth","crudPermissions"],angular.module("app.motiondialer").controller("QueueCampaignlistaddController",e)}(),function(){"use strict";function e(e,t,a,i,s,n,o,r){var l=this;function d(){t.hide()}function c(e,t){var n=t.id;o.enqueue(function(){return i.voiceQueue.removeLists({id:e,ids:n}).$promise.then(function(){return i.voiceQueue.addLists({id:e,ids:n,dialCheckDuplicateType:"never"}).$promise}).then(function(){a.success({title:"Reset Succesfull",msg:"List "+t.name+" has been reset"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:queueCampaign.RESETLIST",msg:e.status?JSON.stringify(e.data):e.toString()})})})}l.selected=[],l.items=n||[],l.loading=!1,l.closeDialog=d,l.exists=function(e,t){return-1<t.indexOf(e)},l.toggle=function(e,t){var n=t.indexOf(e);-1<n?t.splice(n,1):t.push(e)},l.isIndeterminate=function(){return 0!==l.selected.length&&l.selected.length!==l.items.length},l.isChecked=function(){return l.selected.length===l.items.length},l.toggleAll=function(){l.selected.length===l.items.length?l.selected=[]:(0===l.selected.length||0<l.selected.length)&&(l.selected=l.items.slice(0))},l.listSelected=function(){l.loading=!0,r(function(e,t){for(var n=0;n<l.selected.length;n+=1)c(s.id,l.selected[n]);var a;a=e,o.enqueue(function(){return a()})}).finally(function(){l.loading=!1,d()})}}e.$inject=["$scope","$mdDialog","toasty","api","queueCampaign","listsCampaign","Sequence","$q"],angular.module("app.motiondialer").controller("QueueCampaignresetlistController",e)}(),function(){"use strict";function e(e,i,a,s,t,n,o,r){var l=this;function d(){return i(function(n,t){return i(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:i(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),i(function(t,n){return s.voiceQueue.getTeams({id:l.queueCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.queueCampaign=t,l.crudPermissions=r,l.penalty=0,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("MOTIONDIALER.ALL_TEAMS"),labelSelected:n.instant("MOTIONDIALER.SELECTED_TEAMS"),transferCallback:function(e,t){t?e.forEach(function(e){e.penalty=void 0}):e.forEach(function(e){e.penalty="penalty "+l.penalty});var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):i(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,i(function(e,t){_.isEmpty(n)?e():s.voiceQueue.removeTeams({id:l.queueCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return a=t,i(function(e,t){if(!_.isEmpty(a)){var n=_.map(a,function(e){return{id:e.id,penalty:_.trim(e.penalty,"penalty ")}});return s.voiceQueue.addTeams({id:l.queueCampaign.id,teams:n}).$promise.then(function(){e()}).catch(function(e){t(e)})}e()});var a}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),a.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","queueCampaign","$translate","Auth","crudPermissions"],angular.module("app.motiondialer").controller("QueueCampaignteamaddController",e)}(),function(){"use strict";function e(n,e,i,s,a,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.queueCampaign=c||n.params.queueCampaign||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.clonedialog=function(e,t){i.show({controller:"QueueCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:u.queueCampaigns?u.queueCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.listadddialog=function(e,t){i.show({controller:"QueueCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/listadd/listadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:u.queueCampaigns?u.queueCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.blacklistadddialog=function(e,t){i.show({controller:"QueueCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:u.queueCampaigns?u.queueCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.teamadddialog=function(e,t){i.show({controller:"QueueCampaignteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:u.queueCampaigns?u.queueCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){i.show({controller:"QueueCampaignagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:u.queueCampaigns?u.queueCampaigns.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.resetlistdialog=function(t,n){r.voiceQueue.getLists({id:t.id,fields:"id,name",nolimit:!0}).$promise.then(function(a){if(_.isNil(a.rows)||_.isEmpty(a.rows))l.info({title:"Campaign Without Lists"});else if(1===a.rows.length){var e=i.confirm().title("Are you sure want to reset the list "+a.rows[0].name+" ?").htmlContent("<b>"+a.rows[0].name+"</b> will be reset.").ariaLabel("Reset List").targetEvent(n).ok("OK").cancel("CANCEL");i.show(e).then(function(){var e,t,n;e=u.queueCampaign.id,t=a.rows[0],n=t.id,r.voiceQueue.removeLists({id:e,ids:n}).$promise.then(function(){return r.voiceQueue.addLists({id:e,ids:n,dialCheckDuplicateType:"never"}).$promise}).then(function(){l.success({title:"Reset Succesfull",msg:"List "+t.name+" has been reset"})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:queueCampaign.REMOVELIST",msg:e.status?JSON.stringify(e.data):e.toString()})})})}else i.show({controller:"QueueCampaignresetlistController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/resetlist/resetlist.html",parent:angular.element(s.body),targetEvent:n,clickOutsideToClose:!1,locals:{queueCampaign:t,listsCampaign:a?a.rows:[]}})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:RESETLIST",msg:e.status?JSON.stringify(e.data):e.toString()})})},u.gotogoto=function(e,t){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:1510}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.motiondialer.realtime.queues",{}):l.info({title:a.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:a.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.motiondialer.realtime.queues",{})}},u.alert=l.info,u.gotoQueueCampaigns=function(){n.go("app.motiondialer.queueCampaigns")},u.saveQueueCampaign=function(){r.voiceQueue.update({id:u.queueCampaign.id},u.queueCampaign).$promise.then(function(){l.success({title:"QueueCampaign updated!",msg:u.queueCampaign.name?u.queueCampaign.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceMusicOnHold.get({fields:"id,name",nolimit:"true"}).$promise.then(function(e){u.musiconholds=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MUSICONHOLDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceMusicOnHold.get({fields:"id,name",nolimit:"true"}).$promise.then(function(e){u.musiconholds=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:407}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.musiconholds,{id:e.resourceId})}),n=null;if(u.queueCampaign&&(n=_.find(u.musiconholds,{name:u.queueCampaign.musiconhold})),n&&!_.some(t,["id",n.id])){var a=_.find(u.musiconholds,{id:n.id});a.canSelect=!1,t.push(a)}u.musiconholds=t}):r.voiceMusicOnHold.get({fields:"id,name",nolimit:"true",defaultEntry:1}).$promise.then(function(e){u.musiconholds=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmusiconholds",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.trunks,{id:e.resourceId})}),n=null;if(u.queueCampaign&&(n=_.find(u.trunks,{id:Number(u.queueCampaign.TrunkId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.trunks,{id:n.id});a.canSelect=!1,t.push(a)}u.trunks=t})}else{var n=[],a=null;u.queueCampaign&&(a=_.find(u.trunks,{id:Number(u.queueCampaign.TrunkId)}));for(var i=0;i<u.trunks.length;i++)a&&u.trunks[i].id===a.id&&(u.trunks[i].canSelect=!1,n.push(u.trunks[i]));u.trunks=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.projects=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.projects=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1103}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.projects,{id:e.resourceId})}),n=null;if(u.queueCampaign&&(n=_.find(u.projects,{name:u.queueCampaign.dialQueueProject})),n&&!_.some(t,["id",n.id])){var a=_.find(u.projects,{id:n.id});a.canSelect=!1,t.push(a)}u.projects=t})}else{var n=[],a=null;u.queueCampaign&&(a=_.find(u.projects,{name:u.queueCampaign.dialQueueProject}));for(var i=0;i<u.projects.length;i++)a&&u.projects[i].id===a.id&&(u.projects[i].canSelect=!1,n.push(u.projects[i]));u.projects=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.interval,{id:e.resourceId})}),n=null;if(u.queueCampaign&&(n=_.find(u.interval,{id:Number(u.queueCampaign.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.interval,{id:n.id});a.canSelect=!1,t.push(a)}u.interval=t})}else{var n=[],a=null;u.queueCampaign&&(a=_.find(u.interval,{id:Number(u.queueCampaign.IntervalId)}));for(var i=0;i<u.interval.length;i++)a&&u.interval[i].id===a.id&&(u.interval[i].canSelect=!1,n.push(u.interval[i]));u.interval=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","queueCampaign","userProfileSection"],angular.module("app.motiondialer").controller("QueueCampaignController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.queueCampaigns=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="queueCampaigns",b.listOrder="",b.listOrderAsc=null,b.selectedQueueCampaigns=[],b.query={fields:"createdAt,updatedAt,id,name,dialActive,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,dialOrderByScheduledAt,dialRecallMeTimeout,dialRecallInQueue,dialGlobalInterval,dialTimezone,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength,dialMethod,dialPowerLevel,dialPredictiveOptimization,dialPredictiveOptimizationPercentage,dialPredictiveInterval,dialLimitQueue,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialPrefix,dialQueueOptions,dialQueueTimeout,strategy,timeout,retry,wrapuptime,weight,musiconhold,dialQueueProject,dialQueueProject2,dialAgiAfterHangupAgent,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,description,mandatoryDisposition,mandatoryDispositionPauseId,dialPredictiveIntervalMaxThreshold,dialPredictiveIntervalMinThreshold",type:"outbound",sort:"-updatedAt",channel:"voice",limit:10,page:1},b.arraydialCheckDuplicateType=_.keyBy([{option:"ALWAYS",value:"'always'"},{option:"NEVER",value:"'never'"},{option:"ONLY_IF_OPEN",value:"'onlyIfOpen'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayautopause=_.keyBy([{option:"Yes",value:"'all'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayringinuse=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytimeoutrestart=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraymonitor_format=_.keyBy([{option:"Inactive",value:"''"},{option:"wav",value:"'wav'"},{option:"wav49",value:"'wav49'"},{option:"gsm",value:"'gsm'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysetinterfacevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysetqueuevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysetqueueentryvar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydialOrderByScheduledAt=_.keyBy([{option:"DESC",value:"'DESC'"},{option:"ASC",value:"'ASC'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydialMethod=_.keyBy([{option:"Progressive",value:"'progressive'"},{option:"PowerDialing",value:"'power'"},{option:"Predictive",value:"'predictive'"},{option:"Preview",value:"'preview'"},{option:"BookedProgressive",value:"'booked'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydialPredictiveOptimization=_.keyBy([{option:"AgentBusyFactor",value:"'agentBusyFactor'"},{option:"DropRate",value:"'dropRate'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraystrategy=_.keyBy([{option:"Round Robin Memory",value:"'rrmemory'"},{option:"Round Robin",value:"'roundrobin'",ngIf:"vm.queueCampaign.dialMethod === 'booked'"},{option:"Least Recent",value:"'leastrecent'",ngIf:"vm.queueCampaign.dialMethod !== 'booked'"},{option:"Fewest Calls",value:"'fewestcalls'",ngIf:"vm.queueCampaign.dialMethod !== 'booked'"},{option:"Random",value:"'random'",ngIf:"vm.queueCampaign.dialMethod !== 'booked'"},{option:"Linear",value:"'linear'",ngIf:"vm.queueCampaign.dialMethod !== 'booked'"},{option:"Weight Random",value:"'wrandom'",ngIf:"vm.queueCampaign.dialMethod !== 'booked'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.motiondialer.queueCampaigns.edit",{id:e.id,queueCampaign:e,crudPermissions:b.crudPermissions})},b.clonedialog=function(e,t){i.show({controller:"QueueCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:b.queueCampaigns?b.queueCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.listadddialog=function(e,t){i.show({controller:"QueueCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/listadd/listadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:b.queueCampaigns?b.queueCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.blacklistadddialog=function(e,t){i.show({controller:"QueueCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:b.queueCampaigns?b.queueCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.teamadddialog=function(e,t){i.show({controller:"QueueCampaignteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:b.queueCampaigns?b.queueCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"QueueCampaignagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:b.queueCampaigns?b.queueCampaigns.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("queueCampaign")+"?").htmlContent("<b>"+(e.name||"queueCampaign")+"</b> will be deleted.").ariaLabel("delete queueCampaign").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:1510}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.motiondialer.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.motiondialer.realtime.queues",{})}},b.success=y,b.getQueueCampaigns=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="QueueCampaigns",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditQueueCampaign=function(e,t){i.show({controller:"CreateOrEditQueueCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:t,queueCampaigns:b.queueCampaigns.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteQueueCampaign=S,b.exportSelectedQueueCampaigns=function(){var e=angular.copy(b.selectedQueueCampaigns);return b.selectedQueueCampaigns=[],e},b.deleteSelectedQueueCampaigns=function(e){var t=i.confirm().title("Are you sure want to delete the selected queueCampaigns?").htmlContent("<b>"+b.selectedQueueCampaigns.length+" selected</b> will be deleted.").ariaLabel("delete QueueCampaigns").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedQueueCampaigns.forEach(function(e){S(e)}),b.selectedQueueCampaigns=[]})},b.deselectQueueCampaigns=function(){b.selectedQueueCampaigns=[]},b.selectAllQueueCampaigns=function(){b.selectedQueueCampaigns=b.queueCampaigns.rows},g.hasRole("admin")?m.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.trunks=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.trunks=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(b.trunks,{id:e.resourceId})}),a=null;a=[],b.queueCampaigns.rows.forEach(function(e){var t=_.find(b.trunks,{id:Number(e.TrunkId)});a.push(t)}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(b.trunks,{id:e.id});t.canSelect=!1,n.push(t)}}),b.trunks=n})}else{var n=[],a=[];b.queueCampaigns.rows.forEach(function(e){var t=_.find(b.trunks,{id:Number(e.TrunkId)});a.push(t)});for(var i=0;i<b.trunks.length;i++){_.some(a,{id:b.trunks[i].id})&&(b.trunks[i].canSelect=!1,n.push(b.trunks[i]))}b.trunks=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),g.hasRole("admin")?m.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){b.interval=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){b.interval=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.interval,{id:e.resourceId})}),n=null;if(b.queueCampaign&&(n=_.find(b.interval,{id:Number(b.queueCampaign.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.interval,{id:n.id});a.canSelect=!1,t.push(a)}b.interval=t})}else{var n=[],a=null;b.queueCampaign&&(a=_.find(b.interval,{id:Number(b.queueCampaign.IntervalId)}));for(var i=0;i<b.interval.length;i++)a&&b.interval[i].id===a.id&&(b.interval[i].canSelect=!1,n.push(b.interval[i]));b.interval=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.queueCampaigns=e||{count:0,rows:[]}}function S(e){m.voiceQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.queueCampaigns.rows,{id:e.id}),b.queueCampaigns.count-=1,b.queueCampaigns.rows.length||b.getQueueCampaigns(),p.success({title:_.startCase("QueueCampaign")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getQueueCampaigns())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","queueCampaigns","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.motiondialer").controller("QueueCampaignsController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m,u,p,g){var v=this,h=!0;function f(){var e=i.localStorage.getItem("motion2.realtime.abandoned.bull.contacts:"+v.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(v.query=_.merge(e.query,_.omit(v.query,["sort","limit","page"])),v.query=_.omit(v.query,"filter")),d.hasRole("admin")?o.user.getQueues({id:d.getCurrentUser().id,fields:"id,name",channel:"voice",type:"outbound",nolimit:!0}).$promise.then(function(e){v.queues=e||{count:0,rows:[]},v.queuesMap=_.mapValues(_.keyBy(v.queues.rows,"name"),"name")}).catch(function(e){console.error(e)}).finally(function(){v.getContacts()}):o.userProfile.getResources({id:v.currentUser.userProfileId,section:"QueueCampaigns",channel:"voice",type:"outbound",sort:"-updatedAt",nolimit:!0}).$promise.then(function(e){v.queues=e||{count:0,rows:[]},v.queuesMap=_.mapValues(_.keyBy(v.queues.rows,"name"),"name")}).catch(function(e){console.error(e)}).finally(function(){v.getContacts()})}function b(e){v.contacts=e||{count:0,rows:[]},h=!1,v.refresh=!0}v.showTooltip=!1,v.refresh=!0,v.disable=[],v.agents=p||[],v.currentUser=d.getCurrentUser(),v.localizationMap=u,v.pickerModel={dateStart:null,dateEnd:null},v.queues={},v.contacts={count:0,rows:[]},v.dispositions=g,v.userProfile=r,v.userProfileSection=l&&1==l.count?l.rows[0]:null,v.crudPermissions=d.parseCrudPermissions(v.userProfileSection?v.userProfileSection.crudPermissions:null),v.query={fields:"id,type,calleridnum,calleridname,queue,queuecallerabandonAt,queuecallerexitAt,queuecallerexitreason,assigned,lastAssignedTo,updatedAt,disposition",type:"outbound",queuecallerexitreason:"TIMEOUT,ABANDONED",sort:"-updatedAt",limit:10,page:1},v.clearAll=function(){v.query.createdAt=void 0,v.pickerModel={dateStart:null,dateEnd:null},v.getContacts()},v.getContacts=function(){if(v.refresh=!1,v.pickerModel.dateStart&&!h){var e=moment(v.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();v.query.createdAt={$gte:v.pickerModel.dateStart,$lte:e}}else v.query.createdAt=void 0;v.query.queue=v.query.queue,v.query.offset=(v.query.page-1)*v.query.limit,i.localStorage.setItem("motion2.realtime.abandoned.bull.contacts:"+v.currentUser.id,JSON.stringify({query:_.omit(v.query,"queue")})),v.promise=o.voiceQueueReport.getVoiceQueuesReport(v.query,b).$promise},v.refreshContacts=function(){v.showTooltip=!1,v.getContacts()},v.onInit=f,v.assignedA=function(e,t){e&&(v.disable[e.id]=!0,o.voiceQueueReport.update({id:e.id,lastAssignedTo:t?t.name:null,assigned:!!t}).$promise.catch(function(e){console.log(e)}).finally(function(){v.disable[e.id]=!1}))},v.disposed=function(e,t){e&&o.voiceQueueReport.update({id:e.id,disposition:t||null}).$promise.catch(function(e){console.log(e)})},v.onSavevoiceQueueReport=function(e){e&&v.queuesMap&&"outbound"===e.type&&v.queuesMap[e.queue]&&(v.showTooltip=!0)},v.onUpdatevoiceQueueReport=function(e){if(e){var t=_.findIndex(v.contacts.rows,["id",e.id]);0<=t&&_.merge(v.contacts.rows[t],e)}},c.onWithoutApply("voiceQueueReport:save",v.onSavevoiceQueueReport),c.on("voiceQueueReport:update",v.onUpdatevoiceQueueReport),f();var A=!0,E=1;e.$watch("vm.query.filter",function(e,t){A?n(function(){A=!1}):(t||(E=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=E),v.getContacts())}),e.$on("$destroy",function(){c.removeAllListeners("voiceQueueReport:save"),c.removeAllListeners("voiceQueueReport:update")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","userProfile","userProfileSection","Auth","socket","toasty","dateFilterLocalizationFactory","agents","dispositions"],angular.module("app.motiondialer").controller("AbandonedCallsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"voice",direction:"outbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,n,a,i,t,s,o,r,l,d,c,m){var u=this,p=["name","active","limitCalls","message","originated","IntervalId","SquareProjectId","Trunk","TrunkId","ivrAnswerCallsDay","dialQueueProject","ivrTotalCallsDays","description"];function g(){_.forIn(u.campaigns,function(e,t){u.rpcCampaigns[t]&&_.merge(e,_.pick(u.rpcCampaigns[t],p))})}u.currentUser=m.getCurrentUser(),u.count=o.count,u.campaigns=o?_.keyBy(o.rows?o.rows:[],"id"):{},u.rpcCampaigns=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.userProfile=d,u.userProfileSection=c&&1==c.count?c.rows[0]:null,u.crudPermissions=m.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.query={sort:"-updatedAt",limit:10,page:1},u.success=f,u.getCampaigns=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=r.campaign.get(u.query,f).$promise:(u.query.id=u.userProfile.id,u.query.section="IvrCampaigns",u.promise=r.userProfile.getResources(u.query,f).$promise)},u.onSave=function(e){u.campaigns[e.id]&&(_.merge(u.campaigns[e.id],_.pick(e,p)),_.merge(u.rpcCampaigns[e.id],_.pick(e,p)))},u.$onInit=g,u.createOrEditIvrCampaign=function(e,t){a.show({controller:"CreateOrEditIvrCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:t,ivrCampaigns:_.values(u.campaigns),license:null,setting:null,crudPermissions:u.crudPermissions}})},l.onWithoutApply("campaign:save",u.onSave),u.interval=t(function(){},999);var v=!0,h=1;function f(e){u.count=e.count,u.campaigns=e?_.keyBy(e.rows?e.rows:[],"id"):{},g()}e.$watch("vm.query.filter",function(e,t){v?n(function(){v=!1}):(t||(h=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=h),u.getCampaigns())}),e.$on("$destroy",function(){l.removeAllListeners("campaign:save"),u.interval&&t.cancel(u.interval)})}e.$inject=["$scope","$timeout","$mdDialog","$document","$interval","rpcCampaigns","campaigns","api","socket","userProfile","userProfileSection","Auth"],angular.module("app.motiondialer").controller("IvrCampaignsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,t,a,n,i,s,o,r,l,d,c,m,u){var p=this;p.currentUser=u.getCurrentUser(),p.agents=n||{count:0,rows:[]},p.queues=i?_.keyBy(i.rows?i.rows:[],"name"):{},p.rpcVoiceQueuesChannelsTmp=s?_.keyBy(s.rows?_.filter(s.rows,{type:"outbound"}):[],"uniqueid"):{},p.rpcVoiceQueuesChannels={},p.userProfile=c,p.userProfileSection=m&&1==m.count?m.rows[0]:null,p.crudPermissions=u.parseCrudPermissions(p.userProfileSection?p.userProfileSection.crudPermissions:null),p.queryChannels={limit:10,page:1},p.getSize=function(e){return _.size(e)},p.$onInit=function(){_.forIn(p.rpcVoiceQueuesChannelsTmp,function(e,t){_.find(p.queues,{name:e.name})&&(p.rpcVoiceQueuesChannels[t]=e)})},p.onSave=function(e){"outbound"===e.type&&_.find(p.queues,{name:e.name})&&(p.rpcVoiceQueuesChannels[e.uniqueid]=e)},p.onRemove=function(e){p.rpcVoiceQueuesChannels[e.uniqueid]&&delete p.rpcVoiceQueuesChannels[e.uniqueid]},p.hangup=function(t){return o.rpc.getVoiceQueuesChannelHangup({uniqueid:t}).$promise.then(function(e){d.success({title:"Channel "+t+" properly hangup!",msg:e.message||""})}).catch(function(e){d.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},p.redirectToAgent=function(t,e,n){return o.rpc.getVoiceQueuesChannelRedirect({uniqueid:t,exten:e,context:n}).$promise.then(function(e){d.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){d.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},p.redirectToNumber=function(e,t){var n=a.prompt().title("Which number do you want transfer the call to?").placeholder("Number").targetEvent(e).ok("Ok").cancel("Cancel");return a.show(n).then(function(e){return o.rpc.getVoiceQueuesChannelRedirect({uniqueid:t,exten:e}).$promise}).then(function(e){d.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){d.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},r.on("voice_queue_channel:save",p.onSave),r.on("voice_queue_channel:remove",p.onRemove),e.$on("$destroy",function(){r.removeAllListeners("voice_queue_channel:save"),r.removeAllListeners("voice_queue_channel:remove")})}e.$inject=["$scope","$timeout","$mdDialog","agents","queues","rpcVoiceQueuesChannels","api","socket","helperClasses","toasty","userProfile","userProfileSection","Auth"],angular.module("app.motiondialer").controller("QueueCallsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["total","answered","sumHoldTime","sumDuration","sumBillable","outboundNoAnswerCallsDay","outboundBusyCallsDay","outboundCongestionCallsDay","outboundNoSuchCallsDay","outboundUnknownCallsDay","outboundDropCallsDayTimeout","outboundDropCallsDayCallersExit","outboundBlacklistCallsDay","outboundOriginateFailureCallsDay","outboundAnswerAgiCallsDay","outboundReCallsDay","outboundRejectCallsDay"];function u(){_.forIn(c.queues,function(e,t){c.rpcQueues[t]&&_.merge(e,_.pick(c.rpcQueues[t],m))})}c.count=a.count,c.queues=a?_.keyBy(a.rows?a.rows:[],"id"):{},c.rpcQueues=i?_.keyBy(i.rows?i.rows:[],"id"):{},c.userProfile=r,c.userProfileSection=l&&1==l.count?l.rows[0]:null,c.crudPermissions=d.parseCrudPermissions(c.userProfileSection?c.userProfileSection.crudPermissions:null),d.hasRole("admin")?c.query={type:"outbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1}:c.query={id:d.getCurrentUser().id,channel:"voice",type:"outbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1},c.success=v,c.getQueues=function(){c.query.offset=(c.query.page-1)*c.query.limit,d.hasRole("admin")?c.promise=s.voiceQueue.get(c.query,v).$promise:(c.query.id=c.userProfile.id,c.query.section="QueueCampaigns",c.promise=s.userProfile.getResources(c.query,v).$promise)},c.onSave=function(e){c.queues[e.id]&&_.merge(c.queues[e.id],_.pick(e,m))},c.$onInit=u,o.onWithoutApply("voice_queue:save",c.onSave),c.interval=t(function(){},999);var p=!0,g=1;function v(e){c.count=e.count,c.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},u()}e.$watch("vm.query.filter",function(e,t){p?n(function(){p=!1}):(t||(g=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=g),c.getQueues())}),e.$on("$destroy",function(){o.removeAllListeners("voice_queue:save"),c.interval&&t.cancel(c.interval)})}e.$inject=["$scope","$timeout","$interval","queues","rpcQueues","api","socket","userProfile","userProfileSection","Auth"],angular.module("app.motiondialer").controller("QueueParamsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused","startPredictive","startProgressive","erlangCalls","erlangCallToSecond","erlangAbandonmentRate","erlangBusyFactor","dialPredictiveInterval","dialPredictiveIntervalMaxThreshold","dialPredictiveIntervalMinThreshold","predictiveIntervalAvailable","predictiveIntervalTotalCalls","predictiveIntervalAnsweredCalls","predictiveIntervalDroppedCallsTimeout","predictiveIntervalDroppedCallsCallersExit","predictiveIntervalAvgHoldtime","predictiveIntervalAvgTalktime"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.voiceQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].VoiceQueueId].paused++,g.queues[e[t].rows[n].VoiceQueueId].loggedInDb++,g.queues[e[t].rows[n].VoiceQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].VoiceQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"outbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"voice",type:"outbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.voiceQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="QueueCampaigns",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditMotionDialerQueue=function(e,t){a.show({controller:"CreateOrEditQueueCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:t,queueCampaigns:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.showPredictiveQueueCampaignInfo=function(e,t){a.show({controller:"PredictiveQueueCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/realtime/queues/predictive/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:t}})},g.agentAdd=function(e,t){a.show({controller:"QueueCampaignagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:t,queueCampaigns:g.queues?g.queues.rows:[],realtime:!0,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.voiceQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&(_.merge(g.queues[e.id],_.pick(e,v)),_.isNil(e.startPredictive)&&(g.queues[e.id].startPredictive=void 0))},g.onSaveMember=function(e){g.queues[e.MotionDialerQueueId]&&g.queues[e.MotionDialerQueueId].loggedInDb++},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.VoiceQueueId]&&(g.queues[e.VoiceQueueId].loggedInDb+=1,g.queues[e.VoiceQueueId].agents[e.UserId]=e.VoiceQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.VoiceQueueId]&&0<g.queues[e.VoiceQueueId].loggedInDb&&(g.queues[e.VoiceQueueId].loggedInDb-=1,delete g.queues[e.VoiceQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.onWithoutApply("voice_queue:save",g.onSave),g.interval=s(function(){},999),d.on("userVoiceQueueRt:save",g.onSaveMember),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("voice_queue:save"),g.interval&&s.cancel(g.interval),d.removeAllListeners("userVoiceQueueRt:save"),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.motiondialer").controller("QueuesMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,t,n){this.queueCampaign=n,this.addMinutes=function(e,t){return moment(e).add("m",t).format("HH:mm:ss")},this.setFormatTime=function(e){return moment(e).format("HH:mm:ss")},this.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$interval","queueCampaign"],angular.module("app.motiondialer").controller("PredictiveQueueCampaignDialogController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){switch(t.disconnect(),t.connect(),this.selectedTab=0,n.current.name){case"app.motiondialer.realtime.agents":this.selectedTab=0;break;case"app.motiondialer.realtime.queues":this.selectedTab=1;break;case"app.motiondialer.realtime.queue_calls":this.selectedTab=2;break;case"app.motiondialer.realtime.abandonedcalls":this.selectedTab=3;break;case"app.motiondialer.realtime.queue_params":this.selectedTab=4;break;case"app.motiondialer.realtime.ivr_campaigns":this.selectedTab=5;break;default:this.selectedTab=0,n.go("app.motiondialer.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.motiondialer.realtime.agents");break;case 1:n.go("app.motiondialer.realtime.queues");break;case 2:n.go("app.motiondialer.realtime.queue_calls");break;case 3:n.go("app.motiondialer.realtime.abandonedcalls");break;case 4:n.go("app.motiondialer.realtime.queue_params");break;case 5:n.go("app.motiondialer.realtime.ivr_campaigns");break;default:n.go("app.motiondialer.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.motiondialer").controller("MotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="OPENCHANNEL.EDIT_OPENCHANNELACCOUNT",g.openchannelAccount=angular.copy(l),g.openchannelAccounts=r,g.newOpenchannelAccount=!1,g.openchannelAccount||(g.openchannelAccount={waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},g.title="OPENCHANNEL.NEW_OPENCHANNELACCOUNT",g.newOpenchannelAccount=!0),t.params.id&&(g.openchannelAccount.OpenchannelAccountId=t.params.id),g.addNewOpenchannelAccount=function(){g.errors=[],d.openchannelAccount.save(g.openchannelAccount).$promise.then(function(e){g.openchannelAccounts.unshift(e.toJSON()),o.success({title:"OpenchannelAccount properly created",msg:g.openchannelAccount.name?g.openchannelAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveOpenchannelAccount=function(){g.errors=[],d.openchannelAccount.update({id:g.openchannelAccount.id},g.openchannelAccount).$promise.then(function(e){var t=_.find(g.openchannelAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelAccount properly saved!",msg:g.openchannelAccount.name?g.openchannelAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteOpenchannelAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The openchannelAccount will be deleted.").ariaLabel("Delete OpenchannelAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.openchannelAccount.delete({id:g.openchannelAccount.id}).$promise.then(function(){_.remove(g.openchannelAccounts,{id:g.openchannelAccount.id}),o.success({title:"OpenchannelAccount properly deleted!",msg:(g.openchannelAccount.name||"openchannelAccount")+" has been deleted!"}),v(g.openchannelAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.lists,{id:e.resourceId})}),n=null;if(g.openchannelAccount&&(n=_.find(g.lists,{id:Number(g.openchannelAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.lists,{id:n.id});a.canSelect=!1,t.push(a)}g.lists=t})}else{var n=[],a=null;g.openchannelAccount&&(a=_.find(g.lists,{id:Number(g.openchannelAccount.ListId)}));for(var i=0;i<g.lists.length;i++)a&&g.lists[i].id===a.id&&(g.lists[i].canSelect=!1,n.push(g.lists[i]));g.lists=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","openchannelAccounts","openchannelAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelAccountDialogController",e)}(),function(){"use strict";function e(o,i,a,s,e){var r=this;function t(e,t){if(r.openchannelAccountApps.rows.length){var n=r.openchannelAccountApps.rows[t]?r.openchannelAccountApps.rows[t]:r.openchannelAccountApps.rows[0];i.show({controller:"EditOpenchannelAccountApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccountApp:n,openchannelAccount:r.openchannelAccount,crudPermissions:r.crudPermissions}}).then(function(e){e&&(e.id?r.openchannelAccountApps.rows[t]=e:r.openchannelAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function l(){for(var e=1,t=[],n=0;n<r.openchannelAccountApps.rows.length;n++,0){var a=r.openchannelAccountApps.rows[n],i=[],s=[];a.intervals="*,*,*,*"!==a.interval?[a.interval]:a.IntervalId?_.map(_.filter(r.intervals.rows,{IntervalId:a.IntervalId}),"interval"):[],a.context=r.openchannelAccount.context,a.exten=r.openchannelAccount.exten,a.type&&(a.type=a.type.toLowerCase()),a.priority=i.length?_.last(i).priority+1:e,e=(s.length?_.last(s).priority:a.priority)+1,t=_.concat(t,i,[a],s)}o.openchannelAccount.addApplications({id:r.openchannelAccount.id},_.sortBy(t,"priority")).$promise.then(function(e){r.openchannelAccountApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){r.openchannelAccountApps=e||{count:0,rows:[]}}r.currentUser=e.getCurrentUser(),r.openchannelAccount={},r.openchannelAccountApps={count:0,rows:[]},r.selectedOpenchannelAccountApps=[],r.crudPermissions,r.query={sort:"priority"},r.apps=_.reject(_.sortBy([{app:"dialogflow",appType:"dialogflow",type:"dialogflow",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Key",name:"key",type:"text",required:!0,param:0},{title:"language",name:"language",type:"select",defaultValue:"'en'",values:[{option:"Danish",value:"'da'"},{option:"English",value:"'en'"},{option:"German",value:"'de'"},{option:"Italian",value:"'it'"},{option:"Spanish",value:"'es'"},{option:"French",value:"'fr'"},{option:"Indonesian",value:"'id'"},{option:"Japanese",value:"'ja'"},{option:"Korean (South Korea)",value:"'ko'"},{option:"Dutch",value:"'nl'"},{option:"Norwegian",value:"'no'"},{option:"Portuguese (European)",value:"'pt'"},{option:"Portuguese (Nrazilian)",value:"'pt-br'"},{option:"Russian",value:"'ru'"},{option:"Swedish",value:"'sv'"},{option:"Thai",value:"'th'"},{option:"Ukrainian",value:"'uk'"},{option:"Chinese (Simplified)",value:"'zh-CN'"},{option:"Chinese (Hong Kong)",value:"'zh-HK'"},{option:"Chinese (Traditional)",value:"'zh-TW'"}],required:!0,param:1},{title:"welcomemessage",name:"welcomemessage",type:"textarea",maxlength:255,required:!1,param:2,help:!0}]},{app:"amazonlex",appType:"amazonlex",type:"amazonlex",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"accesskeyid",name:"accesskeyid",type:"text",required:!0,param:0},{title:"secretaccesskey",name:"secretaccesskey",type:"text",required:!0,param:1},{title:"lexregion",name:"lexregion",type:"select",defaultValue:"'us-east-1'",values:[{option:"US East (N. Virginia)",value:"'us-east-1'"},{option:"US West (Oregon)",value:"'us-west-2'"},{option:"EU (Ireland)",value:"'eu-west-1'"},{option:"Asia Pacific (Sydney)",value:"'ap-southeast-2'"}],required:!0,param:2},{title:"botname",name:"botname",type:"text",required:!0,param:3},{title:"welcomemessage",name:"welcomemessage",type:"textarea",maxlength:255,required:!1,param:4,help:!0}]},{app:"Interval",appType:"interval",types:["always","custom","list"],fields:[],isApp:!1},{app:"noop",appType:"noop",type:"noop",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,fields:[{title:"Value",name:"value",type:"text",param:0}]},{app:"system",appType:"system",type:"system",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,extraApi:[{name:"variables",field:{name:"variable",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1012}}],fields:[{title:"Command",name:"command",type:"text",required:!0,param:0},{title:"Variable",name:"variable",type:"apiselect",values:"variables",value:"variable.name",option:"variable.name",defaultValues:[{value:"''",option:"None"}],defaultValue:"''",param:1}]},{app:"gotop",appType:"gotop",type:"goto",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Priority",name:"priority",type:"number",required:!0,min:0,param:0}]},{app:"gotoif",appType:"gotoif",type:"gotoif",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Condition",name:"condition",type:"text",required:!0,param:0},{title:"truepriority",name:"truepriority",type:"number",min:1,required:!0,param:1},{title:"falsepriority",name:"falsepriority",type:"number",min:1,required:!0,param:2}]},{app:"queue",appType:"queue",foreignKey:"OpenchannelQueueId",type:"queue",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"queues",field:{name:"queue",key:"name"},route:"openchannelQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:801}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",defaultValue:300,required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,defaultValue:300,required:!0,param:1}]},{app:"agent",appType:"agent",type:"agent",foreignKey:"UserId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"agents",field:{name:"agent",key:"name"},route:"user",filters:{fields:"id,name",sort:"name",role:"agent",nolimit:!0},permissions:{section:202}}],fields:[{title:"Agent",name:"agent",type:"apiselect",values:"agents",value:"agent.name",option:"agent.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:30,param:1}]},{app:"autoreply",appType:"autoreply",type:"autoreply",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"times",name:"times",type:"select",defaultValue:"1",values:[{option:"One Time",value:"1"},{option:"Always",value:"0"}],required:!0,param:0},{title:"Text",name:"text",type:"textarea",required:!0,param:1}]},{app:"close",appType:"close",type:"close",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Disposition",name:"disposition",type:"text",required:!0,param:0}]},{app:"tag",appType:"tag",type:"tag",foreignKey:"TagId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"tags",field:{name:"tag",key:"name"},route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1008}}],fields:[{title:"Tag",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",required:!0,param:0}]}],["app"]),{isApp:!1}),r.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},r.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){l()}},r.init=function(e,t){r.openchannelAccount=e,r.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},r.applications.disabled=!r.crudPermissions.canEdit,r.query.id=e.id,r.query.isApp=!0,r.query.nolimit=!0,r.getOpenchannelAccountApps(),r.getIntervals()},r.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){r.openchannelAccountApps.rows.splice(t,1),l()},function(){console.log("CANCEL")})},r.getOpenchannelAccountApps=function(){r.promise=o.openchannelAccount.getApplications(r.query,n).$promise},r.editOpenchannelAccountApp=t,r.editInterval=function(e,t){if(r.openchannelAccountApps.rows.length){var n=r.openchannelAccountApps.rows[t]?r.openchannelAccountApps.rows[t]:r.openchannelAccountApps.rows[0];i.show({controller:"EditOpenchannelAccountAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:r.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,l())})}},r.deleteOpenchannelAccountApp=function(e){_.remove(r.openchannelAccountApps.rows,{id:e.id}),l(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},r.deleteSelectedOpenchannelAccountApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+r.selectedOpenchannelAccountApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){r.selectedOpenchannelAccountApps.forEach(function(e){_.remove(r.openchannelAccountApps.rows,{id:e.id})}),r.selectedOpenchannelAccountApps=[],l()})},r.rewriteRouting=l,r.getIntervals=function(){return o.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){r.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.openchannel").controller("OpenchannelAccountActionsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.openchannelAccount.getAgents({id:c.openchannelAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserOpenchannelAccount?"penalty "+e.UserOpenchannelAccount.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.openchannelAccount=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.openchannelAccount.removeAgents({id:c.openchannelAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.openchannelAccount.addAgents({id:c.openchannelAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("OPENCHANNEL.ALL_AGENTS"),labelSelected:r.instant("OPENCHANNEL.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","openchannelAccount","openchannelAccounts","realtime","$translate","Auth","crudPermissions"],angular.module("app.openchannel").controller("OpenchannelAccountagentaddController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.agent=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agent.appdata)switch(l.agent.appType?l.agent.appType.toLowerCase():l.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agent.appdata.split(",");l.agent.key=d[0],l.agent.language=d[1],l.agent.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agent.appdata.split(",");l.agent.accesskeyid=d[0],l.agent.secretaccesskey=d[1],l.agent.lexregion=d[2],l.agent.botname=d[3],l.agent.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agent.appdata.split(",");l.agent.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agent.text=d.slice(1,d.length).join(",");break;case"message":l.agent.text=l.agent.appdata;break;case"set":l.agent.name=l.agent.appdata.split("=")[0],l.agent.value=l.agent.appdata.split("=")[1];break;case"agi":l.agent.project=l.agent.appdata;break;default:var c=l.agent.appdata.split(",");l.agent.agent=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.agent.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.agent.timeout=30;function m(e){t.hide(e)}l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outbounddial"===l.agent.appType.toLowerCase()&&(l.agent.prefix=l.agent.phone?l.agent.phone.split("$")[0]:void 0,l.agent.callerId=l.agent.callerID?"CALLERID(all)="+l.agent.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outboundDial"===l.agent.appType&&(l.agent.phone=i.cutdigits?(l.agent.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agent.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agent.options+="U(xcally-mixmonitor-context)"):l.agent.options=l.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.agents,{name:l.agent.agent});t&&(l.agent.UserId=t.id);if(l.agent.appType&&"custom"===l.agent.appType);else switch((l.agent.app||l.agent.appType).toLowerCase()){case"set":l.agent.appdata=l.agent.name+"="+l.agent.value;break;case"custom":break;default:e[0]=l.agent.agent,e[1]=l.agent.timeout,l.agent.appdata=e.join(",")}m(l.agent)},l.closeDialog=m,o.hasRole("admin")?s.user.get({fields:"id,name",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){l.agents=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.user.get({fields:"id,name",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){l.agents=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.agents,{id:e.resourceId})}),n=null;if(l.agent&&(n=_.find(l.agents,{name:l.agent.agent})),n&&!_.some(t,["id",n.id])){var a=_.find(l.agents,{id:n.id});a.canSelect=!1,t.push(a)}l.agents=t})}else{var n=[],a=null;l.agent&&(a=_.find(l.agents,{name:l.agent.agent}));for(var i=0;i<l.agents.length;i++)a&&l.agents[i].id===a.id&&(l.agents[i].canSelect=!1,n.push(l.agents[i]));l.agents=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.amazonlex=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.amazonlex.appdata)switch(l.amazonlex.appType?l.amazonlex.appType.toLowerCase():l.amazonlex.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.amazonlex.appdata.split(",");l.amazonlex.key=d[0],l.amazonlex.language=d[1],l.amazonlex.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.amazonlex.appdata.split(",");l.amazonlex.accesskeyid=d[0],l.amazonlex.secretaccesskey=d[1],l.amazonlex.lexregion=d[2],l.amazonlex.botname=d[3],l.amazonlex.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.amazonlex.appdata.split(",");l.amazonlex.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.amazonlex.text=d.slice(1,d.length).join(",");break;case"message":l.amazonlex.text=l.amazonlex.appdata;break;case"set":l.amazonlex.name=l.amazonlex.appdata.split("=")[0],l.amazonlex.value=l.amazonlex.appdata.split("=")[1];break;case"agi":l.amazonlex.project=l.amazonlex.appdata;break;default:var c=l.amazonlex.appdata.split(",");l.amazonlex.accesskeyid=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.amazonlex.secretaccesskey=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.amazonlex.lexregion=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.amazonlex.botname=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10),l.amazonlex.welcomemessage=_.isEmpty(c[4])?c[4]:isNaN(c[4])?c[4]:parseInt(c[4],10)}else l.amazonlex.lexregion="us-east-1";function m(e){t.hide(e)}l.amazonlex.type&&"outbound"===l.amazonlex.type.toLowerCase()&&"outbounddial"===l.amazonlex.appType.toLowerCase()&&(l.amazonlex.prefix=l.amazonlex.phone?l.amazonlex.phone.split("$")[0]:void 0,l.amazonlex.callerId=l.amazonlex.callerID?"CALLERID(all)="+l.amazonlex.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.amazonlex.type&&"outbound"===l.amazonlex.type.toLowerCase()&&"outboundDial"===l.amazonlex.appType&&(l.amazonlex.phone=i.cutdigits?(l.amazonlex.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.amazonlex.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.amazonlex.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.amazonlex.options+="U(xcally-mixmonitor-context)"):l.amazonlex.options=l.amazonlex.options.replace("U(xcally-mixmonitor-context)",""));if(l.amazonlex.appType&&"custom"===l.amazonlex.appType);else switch((l.amazonlex.app||l.amazonlex.appType).toLowerCase()){case"set":l.amazonlex.appdata=l.amazonlex.name+"="+l.amazonlex.value;break;case"custom":break;default:e[0]=l.amazonlex.accesskeyid,e[1]=l.amazonlex.secretaccesskey,e[2]=l.amazonlex.lexregion,e[3]=l.amazonlex.botname,e[4]=l.amazonlex.welcomemessage,l.amazonlex.appdata=e.join(",")}m(l.amazonlex)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppamazonlexDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.autoreply=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.autoreply.appdata)switch(l.autoreply.appType?l.autoreply.appType.toLowerCase():l.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.autoreply.appdata.split(",");l.autoreply.key=d[0],l.autoreply.language=d[1],l.autoreply.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.autoreply.appdata.split(",");l.autoreply.accesskeyid=d[0],l.autoreply.secretaccesskey=d[1],l.autoreply.lexregion=d[2],l.autoreply.botname=d[3],l.autoreply.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.autoreply.appdata.split(",");l.autoreply.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.autoreply.text=d.slice(1,d.length).join(",");break;case"message":l.autoreply.text=l.autoreply.appdata;break;case"set":l.autoreply.name=l.autoreply.appdata.split("=")[0],l.autoreply.value=l.autoreply.appdata.split("=")[1];break;case"agi":l.autoreply.project=l.autoreply.appdata;break;default:var c=l.autoreply.appdata.split(",");l.autoreply.times=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.autoreply.text=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.autoreply.times=1;function m(e){t.hide(e)}l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outbounddial"===l.autoreply.appType.toLowerCase()&&(l.autoreply.prefix=l.autoreply.phone?l.autoreply.phone.split("$")[0]:void 0,l.autoreply.callerId=l.autoreply.callerID?"CALLERID(all)="+l.autoreply.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outboundDial"===l.autoreply.appType&&(l.autoreply.phone=i.cutdigits?(l.autoreply.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.autoreply.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.autoreply.options+="U(xcally-mixmonitor-context)"):l.autoreply.options=l.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(l.autoreply.appType&&"custom"===l.autoreply.appType);else switch((l.autoreply.app||l.autoreply.appType).toLowerCase()){case"set":l.autoreply.appdata=l.autoreply.name+"="+l.autoreply.value;break;case"custom":break;default:e[0]=l.autoreply.times,e[1]=l.autoreply.text,l.autoreply.appdata=e.join(",")}m(l.autoreply)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.close=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.close.appdata)switch(l.close.appType?l.close.appType.toLowerCase():l.close.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.close.appdata.split(",");l.close.key=d[0],l.close.language=d[1],l.close.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.close.appdata.split(",");l.close.accesskeyid=d[0],l.close.secretaccesskey=d[1],l.close.lexregion=d[2],l.close.botname=d[3],l.close.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.close.appdata.split(",");l.close.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.close.text=d.slice(1,d.length).join(",");break;case"message":l.close.text=l.close.appdata;break;case"set":l.close.name=l.close.appdata.split("=")[0],l.close.value=l.close.appdata.split("=")[1];break;case"agi":l.close.project=l.close.appdata;break;default:var c=l.close.appdata.split(",");l.close.disposition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outbounddial"===l.close.appType.toLowerCase()&&(l.close.prefix=l.close.phone?l.close.phone.split("$")[0]:void 0,l.close.callerId=l.close.callerID?"CALLERID(all)="+l.close.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outboundDial"===l.close.appType&&(l.close.phone=i.cutdigits?(l.close.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.close.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.close.options+="U(xcally-mixmonitor-context)"):l.close.options=l.close.options.replace("U(xcally-mixmonitor-context)",""));if(l.close.appType&&"custom"===l.close.appType);else switch((l.close.app||l.close.appType).toLowerCase()){case"set":l.close.appdata=l.close.name+"="+l.close.value;break;case"custom":break;default:e[0]=l.close.disposition,l.close.appdata=e.join(",")}m(l.close)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.dialogflow=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.dialogflow.appdata)switch(l.dialogflow.appType?l.dialogflow.appType.toLowerCase():l.dialogflow.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.dialogflow.appdata.split(",");l.dialogflow.key=d[0],l.dialogflow.language=d[1],l.dialogflow.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.dialogflow.appdata.split(",");l.dialogflow.accesskeyid=d[0],l.dialogflow.secretaccesskey=d[1],l.dialogflow.lexregion=d[2],l.dialogflow.botname=d[3],l.dialogflow.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.dialogflow.appdata.split(",");l.dialogflow.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.dialogflow.text=d.slice(1,d.length).join(",");break;case"message":l.dialogflow.text=l.dialogflow.appdata;break;case"set":l.dialogflow.name=l.dialogflow.appdata.split("=")[0],l.dialogflow.value=l.dialogflow.appdata.split("=")[1];break;case"agi":l.dialogflow.project=l.dialogflow.appdata;break;default:var c=l.dialogflow.appdata.split(",");l.dialogflow.key=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.dialogflow.language=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.dialogflow.welcomemessage=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}else l.dialogflow.language="en";function m(e){t.hide(e)}l.dialogflow.type&&"outbound"===l.dialogflow.type.toLowerCase()&&"outbounddial"===l.dialogflow.appType.toLowerCase()&&(l.dialogflow.prefix=l.dialogflow.phone?l.dialogflow.phone.split("$")[0]:void 0,l.dialogflow.callerId=l.dialogflow.callerID?"CALLERID(all)="+l.dialogflow.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.dialogflow.type&&"outbound"===l.dialogflow.type.toLowerCase()&&"outboundDial"===l.dialogflow.appType&&(l.dialogflow.phone=i.cutdigits?(l.dialogflow.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.dialogflow.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.dialogflow.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.dialogflow.options+="U(xcally-mixmonitor-context)"):l.dialogflow.options=l.dialogflow.options.replace("U(xcally-mixmonitor-context)",""));if(l.dialogflow.appType&&"custom"===l.dialogflow.appType);else switch((l.dialogflow.app||l.dialogflow.appType).toLowerCase()){case"set":l.dialogflow.appdata=l.dialogflow.name+"="+l.dialogflow.value;break;case"custom":break;default:e[0]=l.dialogflow.key,e[1]=l.dialogflow.language,e[2]=l.dialogflow.welcomemessage,l.dialogflow.appdata=e.join(",")}m(l.dialogflow)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppdialogflowDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotoif=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotoif.appdata)switch(l.gotoif.appType?l.gotoif.appType.toLowerCase():l.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotoif.appdata.split(",");l.gotoif.key=d[0],l.gotoif.language=d[1],l.gotoif.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotoif.appdata.split(",");l.gotoif.accesskeyid=d[0],l.gotoif.secretaccesskey=d[1],l.gotoif.lexregion=d[2],l.gotoif.botname=d[3],l.gotoif.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotoif.appdata.split(",");l.gotoif.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotoif.text=d.slice(1,d.length).join(",");break;case"message":l.gotoif.text=l.gotoif.appdata;break;case"set":l.gotoif.name=l.gotoif.appdata.split("=")[0],l.gotoif.value=l.gotoif.appdata.split("=")[1];break;case"agi":l.gotoif.project=l.gotoif.appdata;break;default:var c=l.gotoif.appdata.split(",");l.gotoif.condition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.gotoif.truepriority=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.gotoif.falsepriority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outbounddial"===l.gotoif.appType.toLowerCase()&&(l.gotoif.prefix=l.gotoif.phone?l.gotoif.phone.split("$")[0]:void 0,l.gotoif.callerId=l.gotoif.callerID?"CALLERID(all)="+l.gotoif.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outboundDial"===l.gotoif.appType&&(l.gotoif.phone=i.cutdigits?(l.gotoif.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotoif.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotoif.options+="U(xcally-mixmonitor-context)"):l.gotoif.options=l.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotoif.appType&&"custom"===l.gotoif.appType);else switch((l.gotoif.app||l.gotoif.appType).toLowerCase()){case"set":l.gotoif.appdata=l.gotoif.name+"="+l.gotoif.value;break;case"custom":break;default:e[0]=l.gotoif.condition,e[1]=l.gotoif.truepriority,e[2]=l.gotoif.falsepriority,l.gotoif.appdata=e.join(",")}m(l.gotoif)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotop.appdata)switch(l.gotop.appType?l.gotop.appType.toLowerCase():l.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotop.appdata.split(",");l.gotop.key=d[0],l.gotop.language=d[1],l.gotop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotop.appdata.split(",");l.gotop.accesskeyid=d[0],l.gotop.secretaccesskey=d[1],l.gotop.lexregion=d[2],l.gotop.botname=d[3],l.gotop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotop.appdata.split(",");l.gotop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotop.text=d.slice(1,d.length).join(",");break;case"message":l.gotop.text=l.gotop.appdata;break;case"set":l.gotop.name=l.gotop.appdata.split("=")[0],l.gotop.value=l.gotop.appdata.split("=")[1];break;case"agi":l.gotop.project=l.gotop.appdata;break;default:var c=l.gotop.appdata.split(",");l.gotop.priority=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outbounddial"===l.gotop.appType.toLowerCase()&&(l.gotop.prefix=l.gotop.phone?l.gotop.phone.split("$")[0]:void 0,l.gotop.callerId=l.gotop.callerID?"CALLERID(all)="+l.gotop.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outboundDial"===l.gotop.appType&&(l.gotop.phone=i.cutdigits?(l.gotop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotop.options+="U(xcally-mixmonitor-context)"):l.gotop.options=l.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotop.appType&&"custom"===l.gotop.appType);else switch((l.gotop.app||l.gotop.appType).toLowerCase()){case"set":l.gotop.appdata=l.gotop.name+"="+l.gotop.value;break;case"custom":break;default:e[0]=l.gotop.priority,l.gotop.appdata=e.join(",")}m(l.gotop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditOpenchannelAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.noop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.noop.appdata)switch(l.noop.appType?l.noop.appType.toLowerCase():l.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.noop.appdata.split(",");l.noop.key=d[0],l.noop.language=d[1],l.noop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.noop.appdata.split(",");l.noop.accesskeyid=d[0],l.noop.secretaccesskey=d[1],l.noop.lexregion=d[2],l.noop.botname=d[3],l.noop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.noop.appdata.split(",");l.noop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.noop.text=d.slice(1,d.length).join(",");break;case"message":l.noop.text=l.noop.appdata;break;case"set":l.noop.name=l.noop.appdata.split("=")[0],l.noop.value=l.noop.appdata.split("=")[1];break;case"agi":l.noop.project=l.noop.appdata;break;default:var c=l.noop.appdata.split(",");l.noop.value=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outbounddial"===l.noop.appType.toLowerCase()&&(l.noop.prefix=l.noop.phone?l.noop.phone.split("$")[0]:void 0,l.noop.callerId=l.noop.callerID?"CALLERID(all)="+l.noop.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outboundDial"===l.noop.appType&&(l.noop.phone=i.cutdigits?(l.noop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.noop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.noop.options+="U(xcally-mixmonitor-context)"):l.noop.options=l.noop.options.replace("U(xcally-mixmonitor-context)",""));if(l.noop.appType&&"custom"===l.noop.appType);else switch((l.noop.app||l.noop.appType).toLowerCase()){case"set":l.noop.appdata=l.noop.name+"="+l.noop.value;break;case"custom":break;default:e[0]=l.noop.value,l.noop.appdata=e.join(",")}m(l.noop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.queue.queue=300,l.queue.timeout=300;function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.queues,{name:l.queue.queue});t&&(l.queue[_.capitalize("openChannel")+"QueueId"]=t.id);if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.timeout,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.openchannelQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.openchannelQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:801}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.system=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.system.appdata)switch(l.system.appType?l.system.appType.toLowerCase():l.system.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.system.appdata.split(",");l.system.key=d[0],l.system.language=d[1],l.system.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.system.appdata.split(",");l.system.accesskeyid=d[0],l.system.secretaccesskey=d[1],l.system.lexregion=d[2],l.system.botname=d[3],l.system.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.system.appdata.split(",");l.system.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.system.text=d.slice(1,d.length).join(",");break;case"message":l.system.text=l.system.appdata;break;case"set":l.system.name=l.system.appdata.split("=")[0],l.system.value=l.system.appdata.split("=")[1];break;case"agi":l.system.project=l.system.appdata;break;default:var c=l.system.appdata.split(",");l.system.command=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.system.variable=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.system.variable="";function m(e){t.hide(e)}l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outbounddial"===l.system.appType.toLowerCase()&&(l.system.prefix=l.system.phone?l.system.phone.split("$")[0]:void 0,l.system.callerId=l.system.callerID?"CALLERID(all)="+l.system.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outboundDial"===l.system.appType&&(l.system.phone=i.cutdigits?(l.system.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.system.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.system.options+="U(xcally-mixmonitor-context)"):l.system.options=l.system.options.replace("U(xcally-mixmonitor-context)",""));if(l.system.appType&&"custom"===l.system.appType);else switch((l.system.app||l.system.appType).toLowerCase()){case"set":l.system.appdata=l.system.name+"="+l.system.value;break;case"custom":break;default:e[0]=l.system.command,e[1]=l.system.variable,l.system.appdata=e.join(",")}m(l.system)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.system&&(n=_.find(l.variables,{name:l.system.variable})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.system&&(a=_.find(l.variables,{name:l.system.variable}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.tag=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.tag.appdata)switch(l.tag.appType?l.tag.appType.toLowerCase():l.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.tag.appdata.split(",");l.tag.key=d[0],l.tag.language=d[1],l.tag.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.tag.appdata.split(",");l.tag.accesskeyid=d[0],l.tag.secretaccesskey=d[1],l.tag.lexregion=d[2],l.tag.botname=d[3],l.tag.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.tag.appdata.split(",");l.tag.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.tag.text=d.slice(1,d.length).join(",");break;case"message":l.tag.text=l.tag.appdata;break;case"set":l.tag.name=l.tag.appdata.split("=")[0],l.tag.value=l.tag.appdata.split("=")[1];break;case"agi":l.tag.project=l.tag.appdata;break;default:var c=l.tag.appdata.split(",");l.tag.tag=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outbounddial"===l.tag.appType.toLowerCase()&&(l.tag.prefix=l.tag.phone?l.tag.phone.split("$")[0]:void 0,l.tag.callerId=l.tag.callerID?"CALLERID(all)="+l.tag.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outboundDial"===l.tag.appType&&(l.tag.phone=i.cutdigits?(l.tag.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.tag.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.tag.options+="U(xcally-mixmonitor-context)"):l.tag.options=l.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.tags,{name:l.tag.tag});t&&(l.tag.TagId=t.id);if(l.tag.appType&&"custom"===l.tag.appType);else switch((l.tag.app||l.tag.appType).toLowerCase()){case"set":l.tag.appdata=l.tag.name+"="+l.tag.value;break;case"custom":break;default:e[0]=l.tag.tag,l.tag.appdata=e.join(",")}m(l.tag)},l.closeDialog=m,o.hasRole("admin")?s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1008}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.tags,{id:e.resourceId})}),n=null;if(l.tag&&(n=_.find(l.tags,{name:l.tag.tag})),n&&!_.some(t,["id",n.id])){var a=_.find(l.tags,{id:n.id});a.canSelect=!1,t.push(a)}l.tags=t})}else{var n=[],a=null;l.tag&&(a=_.find(l.tags,{name:l.tag.tag}));for(var i=0;i<l.tags.length;i++)a&&l.tags[i].id===a.id&&(l.tags[i].canSelect=!1,n.push(l.tags[i]));l.tags=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtags",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountApptagDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.openchannelAccount={},c.openchannelAccountInteractions={count:0,rows:[]},c.selectedOpenchannelAccountInteractions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,Contact.firstName,Owner.name,closedAt,disposition,note,UserId,ContactId,OpenchannelAccountId,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e,t){c.openchannelAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.openchannelAccount.id,c.getOpenchannelAccountInteractions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the interaction?").htmlContent("<b>"+(e.name||"interaction")+"</b> will be deleted.").ariaLabel("delete interaction").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.openchannelInteractionDownload=function(s,e,t){return l.openchannelInteraction.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="interaction"+s.id,a=new Blob(t,{type:e.type});n="openchannel-interaction"+s.id+".zip";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getOpenchannelAccountInteractions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.openchannelAccount.getInteractions(c.query,p).$promise},c.createOrEditOpenchannelAccountInteraction=function(e,t){s.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/interactions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:c.openchannelAccount,interaction:t,interactions:c.openchannelAccountInteractions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.spyopenchannelInteraction=function(e,n){s.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,onShowing:function(e,t){e.vm.init({id:1,channel:"openchannel",interaction:n,spy:!0},a.$parent.vm.setting)}})},c.exportSelectedOpenchannelAccountInteractions=function(){var e=angular.copy(c.selectedOpenchannelAccountInteractions);return c.selectedOpenchannelAccountInteractions=[],e},c.deleteOpenchannelAccountInteraction=g,c.deleteSelectedOpenchannelAccountInteractions=function(e){var t=s.confirm().title("Are you sure want to delete the selected interactions?").htmlContent("<b>"+c.selectedOpenchannelAccountInteractions.length+" selected</b> will be deleted.").ariaLabel("delete interactions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedOpenchannelAccountInteractions.forEach(function(e){g(e)}),c.selectedOpenchannelAccountInteractions=[]})};var m=!0,u=1;function p(e){c.openchannelAccountInteractions=e||{count:0,rows:[]}}function g(e){l.openchannelInteraction.delete({id:e.id}).$promise.then(function(){_.remove(c.openchannelAccountInteractions.rows,{id:e.id}),c.openchannelAccountInteractions.count-=1,c.openchannelAccountInteractions.rows.length||c.getOpenchannelAccountInteractions(),r.success({title:"Interaction deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETopenchannelAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}a.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getOpenchannelAccountInteractions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.openchannel").controller("OpenchannelAccountInteractionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.openchannelAccount={},c.openchannelAccountOpenchannelCannedAnswers={count:0,rows:[]},c.selectedOpenchannelAccountOpenchannelCannedAnswers=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,key,value,description",limit:10,page:1},c.init=function(e,t){c.openchannelAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.openchannelAccount.id,c.query.OpenchannelAccountId=c.openchannelAccount.id,c.getOpenchannelAccountOpenchannelCannedAnswers()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the openchannelCannedAnswer?").htmlContent("<b>"+(e.name||"openchannelCannedAnswer")+"</b> will be deleted.").ariaLabel("delete openchannelCannedAnswer").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getOpenchannelAccountOpenchannelCannedAnswers=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.openchannelAccount.getAnswers(c.query,p).$promise},c.createOrEditOpenchannelAccountOpenchannelCannedAnswer=function(e,t){s.show({controller:"CreateOrEditOpenchannelCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/openchannelCannedAnswers/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:c.openchannelAccount,openchannelCannedAnswer:t,openchannelCannedAnswers:c.openchannelAccountOpenchannelCannedAnswers.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedOpenchannelAccountOpenchannelCannedAnswers=function(){var e=angular.copy(c.selectedOpenchannelAccountOpenchannelCannedAnswers);return c.selectedOpenchannelAccountOpenchannelCannedAnswers=[],e},c.deleteOpenchannelAccountOpenchannelCannedAnswer=g,c.deleteSelectedOpenchannelAccountOpenchannelCannedAnswers=function(e){var t=s.confirm().title("Are you sure want to delete the selected openchannelCannedAnswers?").htmlContent("<b>"+c.selectedOpenchannelAccountOpenchannelCannedAnswers.length+" selected</b> will be deleted.").ariaLabel("delete openchannelCannedAnswers").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedOpenchannelAccountOpenchannelCannedAnswers.forEach(function(e){g(e)}),c.selectedOpenchannelAccountOpenchannelCannedAnswers=[]})};var m=!0,u=1;function p(e){c.openchannelAccountOpenchannelCannedAnswers=e||{count:0,rows:[]}}function g(e){l.cannedAnswer.delete({id:e.id}).$promise.then(function(){_.remove(c.openchannelAccountOpenchannelCannedAnswers.rows,{id:e.id}),c.openchannelAccountOpenchannelCannedAnswers.count-=1,c.openchannelAccountOpenchannelCannedAnswers.rows.length||c.getOpenchannelAccountOpenchannelCannedAnswers(),r.success({title:"OpenchannelCannedAnswer deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETopenchannelAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getOpenchannelAccountOpenchannelCannedAnswers())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.openchannel").controller("OpenchannelAccountOpenchannelCannedAnswersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="OPENCHANNEL.EDIT_OPENCHANNELCANNEDANSWER",g.openchannelCannedAnswer=angular.copy(l),g.openchannelCannedAnswers=r,g.newOpenchannelCannedAnswer=!1,g.openchannelCannedAnswer||(g.openchannelCannedAnswer={},g.title="OPENCHANNEL.NEW_OPENCHANNELCANNEDANSWER",g.newOpenchannelCannedAnswer=!0),t.params.id&&(g.openchannelCannedAnswer.OpenchannelAccountId=t.params.id),g.addNewOpenchannelCannedAnswer=function(){g.errors=[],d.cannedAnswer.save(g.openchannelCannedAnswer).$promise.then(function(e){g.openchannelCannedAnswers.unshift(e.toJSON()),o.success({title:"OpenchannelCannedAnswer properly created",msg:g.openchannelCannedAnswer.name?g.openchannelCannedAnswer.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveOpenchannelCannedAnswer=function(){g.errors=[],d.cannedAnswer.update({id:g.openchannelCannedAnswer.id},g.openchannelCannedAnswer).$promise.then(function(e){var t=_.find(g.openchannelCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelCannedAnswer properly saved!",msg:g.openchannelCannedAnswer.name?g.openchannelCannedAnswer.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteOpenchannelCannedAnswer=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The openchannelCannedAnswer will be deleted.").ariaLabel("Delete OpenchannelCannedAnswer").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cannedAnswer.delete({id:g.openchannelCannedAnswer.id}).$promise.then(function(){_.remove(g.openchannelCannedAnswers,{id:g.openchannelCannedAnswer.id}),o.success({title:"OpenchannelCannedAnswer properly deleted!",msg:(g.openchannelCannedAnswer.name||"openchannelCannedAnswer")+" has been deleted!"}),v(g.openchannelCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","openchannelCannedAnswers","openchannelCannedAnswer","api","Auth","license","setting","crudPermissions"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.openchannelAccount={},c.openchannelAccountOpenchannelDispositions={count:0,rows:[]},c.selectedOpenchannelAccountOpenchannelDispositions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e,t){c.openchannelAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.openchannelAccount.id,c.query.OpenchannelAccountId=c.openchannelAccount.id,c.getOpenchannelAccountOpenchannelDispositions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the openchannelDisposition?").htmlContent("<b>"+(e.name||"openchannelDisposition")+"</b> will be deleted.").ariaLabel("delete openchannelDisposition").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getOpenchannelAccountOpenchannelDispositions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.openchannelAccount.getDispositions(c.query,p).$promise},c.createOrEditOpenchannelAccountOpenchannelDisposition=function(e,t){s.show({controller:"CreateOrEditOpenchannelDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/openchannelDispositions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:c.openchannelAccount,openchannelDisposition:t,openchannelDispositions:c.openchannelAccountOpenchannelDispositions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedOpenchannelAccountOpenchannelDispositions=function(){var e=angular.copy(c.selectedOpenchannelAccountOpenchannelDispositions);return c.selectedOpenchannelAccountOpenchannelDispositions=[],e},c.deleteOpenchannelAccountOpenchannelDisposition=g,c.deleteSelectedOpenchannelAccountOpenchannelDispositions=function(e){var t=s.confirm().title("Are you sure want to delete the selected openchannelDispositions?").htmlContent("<b>"+c.selectedOpenchannelAccountOpenchannelDispositions.length+" selected</b> will be deleted.").ariaLabel("delete openchannelDispositions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedOpenchannelAccountOpenchannelDispositions.forEach(function(e){g(e)}),c.selectedOpenchannelAccountOpenchannelDispositions=[]})};var m=!0,u=1;function p(e){c.openchannelAccountOpenchannelDispositions=e||{count:0,rows:[]}}function g(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(c.openchannelAccountOpenchannelDispositions.rows,{id:e.id}),c.openchannelAccountOpenchannelDispositions.count-=1,c.openchannelAccountOpenchannelDispositions.rows.length||c.getOpenchannelAccountOpenchannelDispositions(),r.success({title:"OpenchannelDisposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETopenchannelAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getOpenchannelAccountOpenchannelDispositions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.openchannel").controller("OpenchannelAccountOpenchannelDispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="OPENCHANNEL.EDIT_OPENCHANNELDISPOSITION",g.openchannelDisposition=angular.copy(l),g.openchannelDispositions=r,g.newOpenchannelDisposition=!1,g.openchannelDisposition||(g.openchannelDisposition={},g.title="OPENCHANNEL.NEW_OPENCHANNELDISPOSITION",g.newOpenchannelDisposition=!0),t.params.id&&(g.openchannelDisposition.OpenchannelAccountId=t.params.id),g.addNewOpenchannelDisposition=function(){g.errors=[],d.disposition.save(g.openchannelDisposition).$promise.then(function(e){g.openchannelDispositions.unshift(e.toJSON()),o.success({title:"OpenchannelDisposition properly created",msg:g.openchannelDisposition.name?g.openchannelDisposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveOpenchannelDisposition=function(){g.errors=[],d.disposition.update({id:g.openchannelDisposition.id},g.openchannelDisposition).$promise.then(function(e){var t=_.find(g.openchannelDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelDisposition properly saved!",msg:g.openchannelDisposition.name?g.openchannelDisposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteOpenchannelDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The openchannelDisposition will be deleted.").ariaLabel("Delete OpenchannelDisposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.openchannelDisposition.id}).$promise.then(function(){_.remove(g.openchannelDispositions,{id:g.openchannelDisposition.id}),o.success({title:"OpenchannelDisposition properly deleted!",msg:(g.openchannelDisposition.name||"openchannelDisposition")+" has been deleted!"}),v(g.openchannelDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","openchannelDispositions","openchannelDisposition","api","Auth","license","setting","crudPermissions"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.openchannelAccount=c||e.params.openchannelAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.agentadddialog=function(e,t){n.show({controller:"OpenchannelAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelAccount:e,openchannelAccounts:u.openchannelAccounts?u.openchannelAccounts.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoOpenchannelAccounts=function(){e.go("app.openchannel.openchannelAccounts")},u.saveOpenchannelAccount=function(){r.openchannelAccount.update({id:u.openchannelAccount.id},u.openchannelAccount).$promise.then(function(){l.success({title:"OpenchannelAccount updated!",msg:u.openchannelAccount.name?u.openchannelAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.lists,{id:e.resourceId})}),n=null;if(u.openchannelAccount&&(n=_.find(u.lists,{id:Number(u.openchannelAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.lists,{id:n.id});a.canSelect=!1,t.push(a)}u.lists=t})}else{var n=[],a=null;u.openchannelAccount&&(a=_.find(u.lists,{id:Number(u.openchannelAccount.ListId)}));for(var i=0;i<u.lists.length;i++)a&&u.lists[i].id===a.id&&(u.lists[i].canSelect=!1,n.push(u.lists[i]));u.lists=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),r.cmContact.describe({id:u.openchannelAccount.ListId}).$promise.then(function(e){u.fields=[];e=_.values(e.toJSON());for(var t=["id","createdAt","updatedAt","deletedAt","scheduledat","ListId","CompanyId"],n=0;n<e.length;n++)_.includes(t,e[n].columnName)||u.fields.push(e[n])}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FIELDS",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","openchannelAccount","userProfileSection"],angular.module("app.openchannel").controller("OpenchannelAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.openchannelAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="openchannelAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedOpenchannelAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},b.editstate=function(e,t){n.go("app.openchannel.openchannelAccounts.edit",{id:e.id,openchannelAccount:e,crudPermissions:b.crudPermissions})},b.interactionsgoto=function(e,t){n.go("app.openchannel.openchannelAccounts.edit",{id:e.id,tab:5})},b.agentadddialog=function(e,t){i.show({controller:"OpenchannelAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelAccount:e,openchannelAccounts:b.openchannelAccounts?b.openchannelAccounts.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("openchannelAccount")+"?").htmlContent("<b>"+(e.name||"openchannelAccount")+"</b> will be deleted.").ariaLabel("delete openchannelAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getOpenchannelAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.openchannelAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="OpenchannelAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditOpenchannelAccount=function(e,t){i.show({controller:"CreateOrEditOpenchannelAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:t,openchannelAccounts:b.openchannelAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteOpenchannelAccount=S,b.exportSelectedOpenchannelAccounts=function(){var e=angular.copy(b.selectedOpenchannelAccounts);return b.selectedOpenchannelAccounts=[],e},b.deleteSelectedOpenchannelAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected openchannelAccounts?").htmlContent("<b>"+b.selectedOpenchannelAccounts.length+" selected</b> will be deleted.").ariaLabel("delete OpenchannelAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedOpenchannelAccounts.forEach(function(e){S(e)}),b.selectedOpenchannelAccounts=[]})},b.deselectOpenchannelAccounts=function(){b.selectedOpenchannelAccounts=[]},b.selectAllOpenchannelAccounts=function(){b.selectedOpenchannelAccounts=b.openchannelAccounts.rows},g.hasRole("admin")?m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.lists,{id:e.resourceId})}),n=null;if(b.openchannelAccount&&(n=_.find(b.lists,{id:Number(b.openchannelAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.lists,{id:n.id});a.canSelect=!1,t.push(a)}b.lists=t})}else{var n=[],a=null;b.openchannelAccount&&(a=_.find(b.lists,{id:Number(b.openchannelAccount.ListId)}));for(var i=0;i<b.lists.length;i++)a&&b.lists[i].id===a.id&&(b.lists[i].canSelect=!1,n.push(b.lists[i]));b.lists=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.openchannelAccounts=e||{count:0,rows:[]}}function S(e){m.openchannelAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.openchannelAccounts.rows,{id:e.id}),b.openchannelAccounts.count-=1,b.openchannelAccounts.rows.length||b.getOpenchannelAccounts(),p.success({title:_.startCase("OpenchannelAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEopenchannelAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEopenchannelAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getOpenchannelAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","openchannelAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.openchannel").controller("OpenchannelAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="OPENCHANNEL.EDIT_OPENCHANNELQUEUE",g.openchannelQueue=angular.copy(l),g.openchannelQueues=r,g.newOpenchannelQueue=!1,g.openchannelQueue||(g.openchannelQueue={strategy:"beepall",timeout:10},g.title="OPENCHANNEL.NEW_OPENCHANNELQUEUE",g.newOpenchannelQueue=!0),g.addNewOpenchannelQueue=function(){g.errors=[],d.openchannelQueue.save(g.openchannelQueue).$promise.then(function(e){g.openchannelQueues.unshift(e.toJSON()),o.success({title:"OpenchannelQueue properly created",msg:g.openchannelQueue.name?g.openchannelQueue.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveOpenchannelQueue=function(){g.errors=[],d.openchannelQueue.update({id:g.openchannelQueue.id},g.openchannelQueue).$promise.then(function(e){var t=_.find(g.openchannelQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelQueue properly saved!",msg:g.openchannelQueue.name?g.openchannelQueue.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteOpenchannelQueue=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The openchannelQueue will be deleted.").ariaLabel("Delete OpenchannelQueue").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.openchannelQueue.delete({id:g.openchannelQueue.id}).$promise.then(function(){_.remove(g.openchannelQueues,{id:g.openchannelQueue.id}),o.success({title:"OpenchannelQueue properly deleted!",msg:(g.openchannelQueue.name||"openchannelQueue")+" has been deleted!"}),v(g.openchannelQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","openchannelQueues","openchannelQueue","api","Auth","license","setting","crudPermissions"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelQueueDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.openchannelQueue.getAgents({id:c.openchannelQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserOpenchannelQueue?"penalty "+e.UserOpenchannelQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.openchannelQueue=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.openchannelQueue.removeAgents({id:c.openchannelQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.openchannelQueue.addAgents({id:c.openchannelQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("OPENCHANNEL.ALL_AGENTS"),labelSelected:r.instant("OPENCHANNEL.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","openchannelQueue","openchannelQueues","realtime","$translate","Auth","crudPermissions"],angular.module("app.openchannel").controller("OpenchannelQueueagentaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r){var l=this;function d(){return a(function(n,t){return a(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.openchannelQueue.getTeams({id:l.openchannelQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.openchannelQueue=t,l.crudPermissions=r,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("OPENCHANNEL.ALL_TEAMS"),labelSelected:n.instant("OPENCHANNEL.SELECTED_TEAMS"),transferCallback:function(e,t){var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.openchannelQueue.removeTeams({id:l.openchannelQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.openchannelQueue.addTeams({id:l.openchannelQueue.id,teams:_.map(n,function(e){return _.pick(e,["id"])})}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),i.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","openchannelQueue","$translate","Auth","crudPermissions"],angular.module("app.openchannel").controller("OpenchannelQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.openchannelQueue=c||e.params.openchannelQueue||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.teamadddialog=function(e,t){n.show({controller:"OpenchannelQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/teamadd/teamadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelQueue:e,openchannelQueues:u.openchannelQueues?u.openchannelQueues.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){n.show({controller:"OpenchannelQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelQueue:e,openchannelQueues:u.openchannelQueues?u.openchannelQueues.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoOpenchannelQueues=function(){e.go("app.openchannel.openchannelQueues")},u.saveOpenchannelQueue=function(){r.openchannelQueue.update({id:u.openchannelQueue.id},u.openchannelQueue).$promise.then(function(){l.success({title:"OpenchannelQueue updated!",msg:u.openchannelQueue.name?u.openchannelQueue.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","openchannelQueue","userProfileSection"],angular.module("app.openchannel").controller("OpenchannelQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.openchannelQueues=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="openchannelQueues",b.listOrder="",b.listOrderAsc=null,b.selectedOpenchannelQueues=[],b.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"openchannel",limit:10,page:1},b.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.openchannel.openchannelQueues.edit",{id:e.id,openchannelQueue:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"OpenchannelQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelQueue:e,openchannelQueues:b.openchannelQueues?b.openchannelQueues.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"OpenchannelQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelQueue:e,openchannelQueues:b.openchannelQueues?b.openchannelQueues.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("openchannelQueue")+"?").htmlContent("<b>"+(e.name||"openchannelQueue")+"</b> will be deleted.").ariaLabel("delete openchannelQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:810}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.openchannel.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.openchannel.realtime.queues",{})}},b.success=y,b.getOpenchannelQueues=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.openchannelQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="OpenchannelQueues",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditOpenchannelQueue=function(e,t){i.show({controller:"CreateOrEditOpenchannelQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelQueue:t,openchannelQueues:b.openchannelQueues.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteOpenchannelQueue=S,b.exportSelectedOpenchannelQueues=function(){var e=angular.copy(b.selectedOpenchannelQueues);return b.selectedOpenchannelQueues=[],e},b.deleteSelectedOpenchannelQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected openchannelQueues?").htmlContent("<b>"+b.selectedOpenchannelQueues.length+" selected</b> will be deleted.").ariaLabel("delete OpenchannelQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedOpenchannelQueues.forEach(function(e){S(e)}),b.selectedOpenchannelQueues=[]})},b.deselectOpenchannelQueues=function(){b.selectedOpenchannelQueues=[]},b.selectAllOpenchannelQueues=function(){b.selectedOpenchannelQueues=b.openchannelQueues.rows};var A=!0,E=1;function y(e){b.openchannelQueues=e||{count:0,rows:[]}}function S(e){m.openchannelQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.openchannelQueues.rows,{id:e.id}),b.openchannelQueues.count-=1,b.openchannelQueues.rows.length||b.getOpenchannelQueues(),p.success({title:_.startCase("OpenchannelQueue")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEopenchannelQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEopenchannelQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getOpenchannelQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","openchannelQueues","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.openchannel").controller("OpenchannelQueuesController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"openchannel",direction:"inbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsOpenchannelRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.openchannelQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].OpenchannelQueueId].paused++,g.queues[e[t].rows[n].OpenchannelQueueId].loggedInDb++,g.queues[e[t].rows[n].OpenchannelQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].OpenchannelQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"openchannel",type:"inbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.openchannelQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="OpenchannelQueues",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditOpenchannelQueue=function(e,t){a.show({controller:"CreateOrEditOpenchannelQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelQueue:t,openchannelQueues:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.agentAdd=function(e,t){a.show({controller:"OpenchannelQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelQueue:t,openchannelQueues:g.queues?g.queues.rows:[],realtime:!1,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.openchannelQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&_.merge(g.queues[e.id],_.pick(e,v))},g.onSaveMember=function(e){g.queues[e.OpenchannelQueueId]&&g.queues[e.OpenchannelQueueId].loggedInDb++},g.onRemoveMember=function(e){g.queues[e.OpenchannelQueueId]&&g.queues[e.OpenchannelQueueId].loggedInDb--},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.OpenchannelQueueId]&&(g.queues[e.OpenchannelQueueId].loggedInDb+=1,g.queues[e.OpenchannelQueueId].agents[e.UserId]=e.OpenchannelQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.OpenchannelQueueId]&&0<g.queues[e.OpenchannelQueueId].loggedInDb&&(g.queues[e.OpenchannelQueueId].loggedInDb-=1,delete g.queues[e.OpenchannelQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.on("openchannel_queue:save",g.onSave),d.on("userOpenchannelQueue:save",g.onSaveMember),d.on("userOpenchannelQueue:remove",g.onRemoveMember),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("openchannel_queue:save"),d.removeAllListeners("userOpenchannelQueue:remove"),d.removeAllListeners("userOpenchannelQueue:save"),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.openchannel").controller("QueuesOpenchannelRealtimeController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){switch(t.disconnect(),t.connect(),this.selectedTab=0,n.current.name){case"app.openchannel.realtime.agents":this.selectedTab=0;break;case"app.openchannel.realtime.queues":this.selectedTab=1;break;default:this.selectedTab=0,n.go("app.openchannel.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.openchannel.realtime.agents");break;case 1:n.go("app.openchannel.realtime.queues");break;default:n.go("app.openchannel.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.openchannel").controller("OpenchannelRealtimeController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;o.currentUser=s.getCurrentUser(),o.plugin={},o.getTrustedURL=function(){return n.trustAsResourceUrl(o.plugin.adminUrl)},a.plugin.get({id:e.params.id}).$promise.then(function(e){if(e)return o.plugin=e,a.plugin.get({id:o.plugin.id}).$promise}).catch(function(e){o.plugin=void 0})}e.$inject=["$state","$scope","$sce","api","socket","Auth"],angular.module("app.plugins.plugin").controller("PluginController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SETTINGS.EDIT_CUSTOMIZATION",g.customization=angular.copy(l),g.customizations=r,g.newCustomization=!1,g.customization||(g.customization={},g.title="SETTINGS.NEW_CUSTOMIZATION",g.newCustomization=!0),g.addNewCustomization=function(){g.errors=[],d.setting.save(g.customization).$promise.then(function(e){g.customizations.unshift(e.toJSON()),o.success({title:"Customization properly created",msg:g.customization.name?g.customization.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.setting.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.setting.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveCustomization=function(){g.errors=[],d.setting.update({id:g.customization.id},g.customization).$promise.then(function(e){var t=_.find(g.customizations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Customization properly saved!",msg:g.customization.name?g.customization.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.setting.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.setting.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteCustomization=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The customization will be deleted.").ariaLabel("Delete Customization").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.setting.delete({id:g.customization.id}).$promise.then(function(){_.remove(g.customizations,{id:g.customization.id}),o.success({title:"Customization properly deleted!",msg:(g.customization.name||"customization")+" has been deleted!"}),v(g.customization)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.setting.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.setting.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","customizations","customization","api","Auth","license","setting","crudPermissions"],angular.module("app.settings").controller("CreateOrEditCustomizationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;s.currentUser=i.getCurrentUser(),s.license=a,s.customizations=e,s.customization={},s.customizations&&s.customizations.rows&&s.customizations.rows.length&&(s.customization=s.customizations.rows[0]),s.saveCustomization=function(){s.customization.id?t.setting.update({id:s.customization.id},s.customization).$promise.then(function(){n.success({title:"Customization updated!",msg:s.customization.name?s.customization.name+" has been updated!":""})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsetting",msg:e.data?JSON.stringify(e.data):e.toString()})}):t.setting.save(s.customization).$promise.then(function(e){_.merge(s.customization,e),n.success({title:"Customization updated!",msg:s.customization.name?s.customization.name+" has been updated!":""})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsetting",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["customizations","api","toasty","license","Auth"],angular.module("app.settings").controller("CustomizationsController",e)}(),function(){"use strict";function e(e,a){var i=this;i.customization={},i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.customization.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.customization.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e){i.customization=angular.copy(e),i.ngFlowOptions.target="/api/settings/1/logo".replace(":id",i.customization.id),i.customization.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.settings").controller("CustomizationlogoController",e)}(),function(){"use strict";function e(e,a){var i=this;i.customization={},i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.customization.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.customization.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e){i.customization=angular.copy(e),i.ngFlowOptions.target="/api/settings/1/logo_login".replace(":id",i.customization.id),i.customization.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.settings").controller("CustomizationlogologinController",e)}(),function(){"use strict";function e(e,a){var i=this;i.customization={},i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.customization.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.customization.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e){i.customization=angular.copy(e),i.ngFlowOptions.target="/api/settings/1/preferred".replace(":id",i.customization.id),i.customization.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.settings").controller("CustomizationpreferredController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SETTINGS.EDIT_GENERAL",g.general=angular.copy(l),g.generals=r,g.newGeneral=!1,g.general||(g.general={min_internal:1e3,chatTimeout:30,phoneBarAutoUpdater:!0,phoneBarAutoUpdaterUrl:"https://www.xcally.com/bar/phonebar/autoupdater.xml",splitSizeCsv:5e3,splitSizePdf:1e3,splitSizeXlsx:5e3,messagesAlignment:"alternate",phoneBarRememberMeEnabled:!0,allowedLoginAttempts:5,blockDuration:10},g.title="SETTINGS.NEW_GENERAL",g.newGeneral=!0),g.addNewGeneral=function(){g.errors=[],d.setting.save(g.general).$promise.then(function(e){g.generals.unshift(e.toJSON()),o.success({title:"General properly created",msg:g.general.name?g.general.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.setting.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.setting.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveGeneral=function(){g.errors=[],d.setting.update({id:g.general.id},g.general).$promise.then(function(e){var t=_.find(g.generals,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"General properly saved!",msg:g.general.name?g.general.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.setting.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.setting.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteGeneral=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The general will be deleted.").ariaLabel("Delete General").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.setting.delete({id:g.general.id}).$promise.then(function(){_.remove(g.generals,{id:g.general.id}),o.success({title:"General properly deleted!",msg:(g.general.name||"general")+" has been deleted!"}),v(g.general)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.setting.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.setting.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","generals","general","api","Auth","license","setting","crudPermissions"],angular.module("app.settings").controller("CreateOrEditGeneralDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;s.currentUser=i.getCurrentUser(),s.license=a,s.generals=e,s.general={},s.generals&&s.generals.rows&&s.generals.rows.length&&(s.general=s.generals.rows[0]),s.saveGeneral=function(){s.general.id?t.setting.update({id:s.general.id},s.general).$promise.then(function(){n.success({title:"General updated!",msg:s.general.name?s.general.name+" has been updated!":""})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsetting",msg:e.data?JSON.stringify(e.data):e.toString()})}):t.setting.save(s.general).$promise.then(function(e){_.merge(s.general,e),n.success({title:"General updated!",msg:s.general.name?s.general.name+" has been updated!":""})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsetting",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["generals","api","toasty","license","Auth"],angular.module("app.settings").controller("GeneralsController",e)}(),function(){"use strict";function e(t,n,a,i,e,s){var o=this;o.license=i||{},o.agents=0,o.users=0,o.telephones=0,o.channels=[{name:"voice",icon:"icon-phone"},{name:"chat",icon:"icon-hangouts"},{name:"mail",icon:"icon-email"},{name:"messaging",icon:"icon-message-text"},{name:"fax",icon:"icon-deskphone"},{name:"openchannel",icon:"icon-google-earth"}],o.modules=[{name:"cm",icon:"icon-account-circle"},{name:"dialer",icon:"icon-crosshairs"},{name:"jscripty",icon:"icon-console"}],o.addons=[{name:"webrtc",icon:"icon-server-plus"},{name:"jaws",icon:"icon-fish"},{name:"custom",icon:"icon-table-edit"},{name:"screenrecording",icon:"icon-video"}],o.sessions=[{name:"callysquare",icon:"icon-sitemap",restart:!0,label:"channels",enabled:"voice"},{name:"virtual",icon:"icon-dots-horizontal",restart:!1,label:"sessions",enabled:"chat"}],o.others=[{name:"update",icon:"icon-cloud-download"}],o.requestLicense=function(e){n.show({controller:"RequestLicenseDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/license/request/dialog.html",parent:angular.element(t.body),targetEvent:e,clickOutsideToClose:!0,locals:{license:i,channels:o.channels,modules:o.modules,addons:o.addons,sessions:o.sessions,others:o.others}})},o.updateLicense=function(e){n.show({controller:"UpdateLicenseDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/license/update/dialog.html",parent:angular.element(t.body),targetEvent:e,clickOutsideToClose:!0,locals:{license:i}})},o.gotoProcess=function(e){a.go("app.settings.system",{tab:1})},s.user.get({fields:"id",role:"agent",online:!0}).$promise.then(function(e){return o.agents=e&&e.count?e.count:0,s.user.get({fields:"id",role:"user,admin"}).$promise}).then(function(e){return o.users=e&&e.count?e.count:0,s.user.get({fields:"id",role:"telephone"}).$promise}).then(function(e){o.telephones=e&&e.count?e.count:0}).catch(function(e){console.log(e)})}e.$inject=["$document","$mdDialog","$state","license","toasty","api"],angular.module("app.settings.license").controller("LicenseController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c){var m=this;function u(){e.hide()}m.errors=[],m.user=d.getCurrentUser(),m.license=angular.copy(n),m.channels=a,m.modules=i,m.addons=s,m.sessions=o,m.others=r,m.license.name=m.user.fullname,m.license.email=m.user.email,m.sendRequest=function(){for(var e in m.errors=[],m.table="||FIELD||OLD||NEW||\n",m.license)m.license.hasOwnProperty(e)&&!_.includes(["$promise","$resolved"],e)&&(n[e]===m.license[e]?m.table+="|"+e+"|"+(void 0!==n[e]?n[e]:"")+"|"+m.license[e]+"|\n":m.table+="|"+e+"|{color:red}"+(void 0!==n[e]?n[e]:"")+"{color}|*"+m.license[e]+"*|\n");l.jira.save({key:"MOTLICENSE",summary:"Motion License Request",description:m.table,issuetype:"License Request"}).$promise.then(function(e){t.success({title:"Request sent!",msg:c.instant("SETTINGS.LICENSE_REQUEST_SENT"),timeout:15e3}),u()}).catch(function(e){console.error(e),m.errors=[{message:c.instant("SETTINGS.JIRA_ERROR_MESSAGE"),type:"api.jira"}]})},m.closeDialog=u}e.$inject=["$mdDialog","toasty","license","channels","modules","addons","sessions","others","api","Auth","$translate"],angular.module("app.settings.license").controller("RequestLicenseDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;s.errors=[],s.license=angular.copy(n),s.licenseKey,s.updateLicense=function(){return a.license.update({id:1,key:s.licenseKey}).$promise.then(function(e){e&&(e.demo?t.error({title:"License update failed!",msg:"Invalid license key"}):t.success({title:"License properly updated!",msg:"The license has been updated!"}))}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATElicense",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","toasty","license","api","$translate"],angular.module("app.settings.license").controller("UpdateLicenseDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(e){a.hide(e)}p.currentUser=c.getCurrentUser(),p.errors=[],p.setting=u,p.license=m,p.hasModulePermissions={},p.passwordPattern=p.setting&&p.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",p.title="SETTINGS.EDIT_NETWORK",p.network=angular.copy(l),p.networks=r,p.newNetwork=!1,p.network||(p.network={type:"localnet"},p.title="SETTINGS.NEW_NETWORK",p.newNetwork=!0),p.addNewNetwork=function(){p.errors=[],d.network.save(p.network).$promise.then(function(e){p.networks.unshift(e.toJSON()),o.success({title:"Network properly created",msg:p.network.name?p.network.name+" has been created!":""}),g(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.network.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.network.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},p.saveNetwork=function(){p.errors=[],d.network.update({id:p.network.id},p.network).$promise.then(function(e){var t=_.find(p.networks,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Network properly saved!",msg:p.network.name?p.network.name+" has been saved!":""}),g(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.network.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.network.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},p.deleteNetwork=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The network will be deleted.").ariaLabel("Delete Network").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.network.delete({id:p.network.id}).$promise.then(function(){_.remove(p.networks,{id:p.network.id}),o.success({title:"Network properly deleted!",msg:(p.network.name||"network")+" has been deleted!"}),g(p.network)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.network.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.network.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},p.getDateFromString=function(e){return null===e?void 0:new Date(e)},p.closeDialog=g}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","networks","network","api","Auth","license","setting"],angular.module("app.settings").controller("CreateOrEditNetworkDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v){var h=this;h.license=p,h.setting=g,h.currentUser=u.getCurrentUser(),h.networks=l||{count:0,rows:[]},h.table="networks",h.listOrder="",h.listOrderAsc=null,h.selectedNetworks=[],h.query={fields:"createdAt,updatedAt,id,type,value",sort:"-updatedAt",limit:10,page:1},h.arraytype=_.keyBy([{option:"LocalNET",value:"'localnet'"},{option:"ExternIP",value:"'externip'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),h.editdialog=function(e,t){i.show({controller:"CreateOrEditNetworkDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/networks/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{network:e,networks:h.networks.rows,license:h.license,setting:null,crudPermissions:h.crudPermissions}})},h.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("network")+"?").htmlContent("<b>"+(e.name||"network")+"</b> will be deleted.").ariaLabel("delete network").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){E(e)},function(){console.log("CANCEL")})},h.success=A,h.getNetworks=function(){h.query.offset=(h.query.page-1)*h.query.limit,u.hasRole("admin")?h.promise=d.network.get(h.query,A).$promise:(h.query.id=h.userProfile.id,h.query.section="Networks",h.promise=d.userProfile.getResources(h.query,A).$promise)},h.createOrEditNetwork=function(e,t){i.show({controller:"CreateOrEditNetworkDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/networks/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{network:t,networks:h.networks.rows,license:h.license,setting:h.setting,crudPermissions:h.crudPermissions}})},h.deleteNetwork=E,h.exportSelectedNetworks=function(){var e=angular.copy(h.selectedNetworks);return h.selectedNetworks=[],e},h.deleteSelectedNetworks=function(e){var t=i.confirm().title("Are you sure want to delete the selected networks?").htmlContent("<b>"+h.selectedNetworks.length+" selected</b> will be deleted.").ariaLabel("delete Networks").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){h.selectedNetworks.forEach(function(e){E(e)}),h.selectedNetworks=[]})},h.deselectNetworks=function(){h.selectedNetworks=[]},h.selectAllNetworks=function(){h.selectedNetworks=h.networks.rows};var f=!0,b=1;function A(e){h.networks=e||{count:0,rows:[]}}function E(e){d.network.delete({id:e.id}).$promise.then(function(){_.remove(h.networks.rows,{id:e.id}),h.networks.count-=1,h.networks.rows.length||h.getNetworks(),m.success({title:_.startCase("Network")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){h.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEnetwork"}];for(var t=0;t<e.data.errors.length;t++)m.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEnetwork",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){f?o(function(){f=!1}):(t||(b=h.query.page),e!==t&&(h.query.page=1),e||(h.query.page=b),h.getNetworks())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","networks","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.settings").controller("NetworksController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SETTINGS.EDIT_SMTP",g.smtp=angular.copy(l),g.smtps=r,g.newSmtp=!1,g.smtp||(g.smtp={service:!0},g.title="SETTINGS.NEW_SMTP",g.newSmtp=!0),g.addNewSmtp=function(){g.errors=[],d.mailAccount.save(g.smtp).$promise.then(function(e){g.smtps.unshift(e.toJSON()),o.success({title:"Smtp properly created",msg:g.smtp.name?g.smtp.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSmtp=function(){g.errors=[],d.mailAccount.update({id:g.smtp.id},g.smtp).$promise.then(function(e){var t=_.find(g.smtps,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Smtp properly saved!",msg:g.smtp.name?g.smtp.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSmtp=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The smtp will be deleted.").ariaLabel("Delete Smtp").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.mailAccount.delete({id:g.smtp.id}).$promise.then(function(){_.remove(g.smtps,{id:g.smtp.id}),o.success({title:"Smtp properly deleted!",msg:(g.smtp.name||"smtp")+" has been deleted!"}),v(g.smtp)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","smtps","smtp","api","Auth","license","setting","crudPermissions"],angular.module("app.settings").controller("CreateOrEditSmtpDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;s.currentUser=i.getCurrentUser(),s.license=a,s.smtps=e,s.smtp={},s.smtps&&s.smtps.rows&&s.smtps.rows.length?s.smtp=s.smtps.rows[0]:s.smtp={service:!0,Smtp:{service:null}},s.saveSmtp=function(){s.smtp.id?t.mailAccount.update({id:s.smtp.id},s.smtp).$promise.then(function(){n.success({title:"Smtp updated!",msg:s.smtp.name?s.smtp.name+" has been updated!":""})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data):e.toString()})}):t.mailAccount.save(s.smtp).$promise.then(function(e){_.merge(s.smtp,e),n.success({title:"Smtp updated!",msg:s.smtp.name?s.smtp.name+" has been updated!":""})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.verifySmtp=function(){s.smtp.id&&t.mailAccount.verifySmtp({id:s.smtp.id}).$promise.then(function(){n.success({title:"Smtp verified!",msg:s.smtp.name?s.smtp.name+" has been verified!":""})}).catch(function(e){n.error({title:"Smtp not verified! Remember to save before to verify!",msg:e.data?JSON.stringify(e.data):e.toString(),timeout:1e4})})}}e.$inject=["smtps","api","toasty","license","Auth"],angular.module("app.settings").controller("SmtpController",e)}(),function(){"use strict";function e(e,i,s,t,n,a,o,r){var l,d=this;d.system=n||{},d.processes=a?a.rows:[],d.processLimit=7,d.selectedTab=t.params.tab||0,d.getInfo=function(){return r.system.get().$promise.then(function(e){_.merge(d.system,e)}).catch(d.cancelInterval)},d.getProcesses=function(){return r.pm2.get().$promise.then(function(e){_.merge(d.processes,e?e.rows:[])}).catch(d.cancelInterval)},d.cancelInterval=function(e){i.cancel(l)},d.updateProcess=function(e,t,n){var a=s.confirm().title("Would you like to change the status of the process #"+t+"?").textContent("The status will be changed to: "+n.toUpperCase()).ariaLabel("Lucky day").targetEvent(e).ok("Ok").cancel("Cancel");s.show(a).then(function(){return r.pm2.update({id:t,status:n})}).then(function(){i(d.getProcesses,1e3,1)}).then(function(){o.success({title:"Process updated!",msg:"Status properly changed to: "+n})})},l=i(d.getInfo,5e3),e.$on("$destroy",function(){d.cancelInterval()})}e.$inject=["$scope","$interval","$mdDialog","$state","system","processes","toasty","api"],angular.module("app.settings.system").controller("SystemController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;s.title="SETTINGS.UPDATE",s.progress=0,s.updating=!0,s.output="Waiting...",s.success=!0,s.interval=t(function(){s.progress<90&&(s.progress+=1)},1e3),s.closeDialog=function(){e.hide()},s.reload=function(){n.location.reload()},s.stopInterval=function(){angular.isDefined(s.interval)&&(t.cancel(s.interval),s.interval=void 0);s.progress=100,s.updating=!1},i.version.fetch().$promise.then(function(e){return s.output=e.output+"...",i.version.reset().$promise}).then(function(e){return s.output=e.output+"...",i.version.pull().$promise}).then(function(e){return s.output=e.output+"...",i.version.migrations().$promise}).then(function(e){return s.output=e.output+"...",i.version.restart().$promise}).then(function(e){s.output="Waiting to restart motion...",a(function(){s.stopInterval()},3e4)}).catch(function(e){s.success=!1,s.stopInterval(),s.output=JSON.stringify(e)})}e.$inject=["$mdDialog","$interval","$window","$timeout","api"],angular.module("app.settings").controller("UpdateDialogController",e)}(),function(){"use strict";function e(n,e,a,t,i){this.version=t||{},this.updateConfirm=function(e){var t=n.confirm().title("Would you like to update your system?").htmlContent('The system request time for the update should be below 1 minute.<br><br>Do you agree the terms of this <a href="http://www.xcally.com/support/eula-xcally-license-en.pdf" target="_blank">End User License Agreement<a>?').ariaLabel("").targetEvent(e).clickOutsideToClose(!0).parent(angular.element(a.body)).ok("I agree").cancel("Disagree");n.show(t).then(function(){n.show({controller:"UpdateDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/updates/update/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!1})})}}e.$inject=["$mdDialog","$interval","$document","version","toasty"],angular.module("app.settings").controller("UpdatesController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"sms",direction:"inbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsSmsRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.smsQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].SmsQueueId].paused++,g.queues[e[t].rows[n].SmsQueueId].loggedInDb++,g.queues[e[t].rows[n].SmsQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].SmsQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"sms",type:"inbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.smsQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="SmsQueues",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditSmsQueue=function(e,t){a.show({controller:"CreateOrEditSmsQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsQueue:t,smsQueues:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.agentAdd=function(e,t){a.show({controller:"SmsQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsQueue:t,smsQueues:g.queues?g.queues.rows:[],realtime:!1,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.smsQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&_.merge(g.queues[e.id],_.pick(e,v))},g.onSaveMember=function(e){g.queues[e.SmsQueueId]&&g.queues[e.SmsQueueId].loggedInDb++},g.onRemoveMember=function(e){g.queues[e.SmsQueueId]&&g.queues[e.SmsQueueId].loggedInDb--},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.SmsQueueId]&&(g.queues[e.SmsQueueId].loggedInDb+=1,g.queues[e.SmsQueueId].agents[e.UserId]=e.SmsQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.SmsQueueId]&&0<g.queues[e.SmsQueueId].loggedInDb&&(g.queues[e.SmsQueueId].loggedInDb-=1,delete g.queues[e.SmsQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.on("sms_queue:save",g.onSave),d.on("userSmsQueue:save",g.onSaveMember),d.on("userSmsQueue:remove",g.onRemoveMember),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("sms_queue:save"),d.removeAllListeners("userSmsQueue:remove"),d.removeAllListeners("userSmsQueue:save"),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.sms").controller("QueuesSmsRealtimeController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){switch(t.disconnect(),t.connect(),this.selectedTab=0,n.current.name){case"app.sms.realtime.agents":this.selectedTab=0;break;case"app.sms.realtime.queues":this.selectedTab=1;break;default:this.selectedTab=0,n.go("app.sms.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.sms.realtime.agents");break;case 1:n.go("app.sms.realtime.queues");break;default:n.go("app.sms.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.sms").controller("SmsRealtimeController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SMS.EDIT_SMSACCOUNT",g.smsAccount=angular.copy(l),g.smsAccounts=r,g.newSmsAccount=!1,g.smsAccount||(g.smsAccount={remote:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():""),type:"twilio",waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},g.title="SMS.NEW_SMSACCOUNT",g.newSmsAccount=!0),t.params.id&&(g.smsAccount.SmsAccountId=t.params.id),g.addNewSmsAccount=function(){g.errors=[],d.smsAccount.save(g.smsAccount).$promise.then(function(e){g.smsAccounts.unshift(e.toJSON()),o.success({title:"SmsAccount properly created",msg:g.smsAccount.name?g.smsAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.smsAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSmsAccount=function(){g.errors=[],d.smsAccount.update({id:g.smsAccount.id},g.smsAccount).$promise.then(function(e){var t=_.find(g.smsAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsAccount properly saved!",msg:g.smsAccount.name?g.smsAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.smsAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSmsAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The smsAccount will be deleted.").ariaLabel("Delete SmsAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.smsAccount.delete({id:g.smsAccount.id}).$promise.then(function(){_.remove(g.smsAccounts,{id:g.smsAccount.id}),o.success({title:"SmsAccount properly deleted!",msg:(g.smsAccount.name||"smsAccount")+" has been deleted!"}),v(g.smsAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.smsAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.lists,{id:e.resourceId})}),n=null;if(g.smsAccount&&(n=_.find(g.lists,{id:Number(g.smsAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.lists,{id:n.id});a.canSelect=!1,t.push(a)}g.lists=t})}else{var n=[],a=null;g.smsAccount&&(a=_.find(g.lists,{id:Number(g.smsAccount.ListId)}));for(var i=0;i<g.lists.length;i++)a&&g.lists[i].id===a.id&&(g.lists[i].canSelect=!1,n.push(g.lists[i]));g.lists=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","smsAccounts","smsAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.sms").controller("CreateOrEditSmsAccountDialogController",e)}(),function(){"use strict";function e(o,i,a,s,e){var r=this;function t(e,t){if(r.smsAccountApps.rows.length){var n=r.smsAccountApps.rows[t]?r.smsAccountApps.rows[t]:r.smsAccountApps.rows[0];i.show({controller:"EditSmsAccountApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccountApp:n,smsAccount:r.smsAccount,crudPermissions:r.crudPermissions}}).then(function(e){e&&(e.id?r.smsAccountApps.rows[t]=e:r.smsAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function l(){for(var e=1,t=[],n=0;n<r.smsAccountApps.rows.length;n++,0){var a=r.smsAccountApps.rows[n],i=[],s=[];a.intervals="*,*,*,*"!==a.interval?[a.interval]:a.IntervalId?_.map(_.filter(r.intervals.rows,{IntervalId:a.IntervalId}),"interval"):[],a.context=r.smsAccount.context,a.exten=r.smsAccount.exten,a.type&&(a.type=a.type.toLowerCase()),a.priority=i.length?_.last(i).priority+1:e,e=(s.length?_.last(s).priority:a.priority)+1,t=_.concat(t,i,[a],s)}o.smsAccount.addApplications({id:r.smsAccount.id},_.sortBy(t,"priority")).$promise.then(function(e){r.smsAccountApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){r.smsAccountApps=e||{count:0,rows:[]}}r.currentUser=e.getCurrentUser(),r.smsAccount={},r.smsAccountApps={count:0,rows:[]},r.selectedSmsAccountApps=[],r.crudPermissions,r.query={sort:"priority"},r.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",types:["always","custom","list"],fields:[],isApp:!1},{app:"noop",appType:"noop",type:"noop",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,fields:[{title:"Value",name:"value",type:"text",param:0}]},{app:"system",appType:"system",type:"system",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,extraApi:[{name:"variables",field:{name:"variable",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1012}}],fields:[{title:"Command",name:"command",type:"text",required:!0,param:0},{title:"Variable",name:"variable",type:"apiselect",values:"variables",value:"variable.name",option:"variable.name",defaultValues:[{value:"''",option:"None"}],defaultValue:"''",param:1}]},{app:"gotop",appType:"gotop",type:"goto",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Priority",name:"priority",type:"number",required:!0,min:0,param:0}]},{app:"gotoif",appType:"gotoif",type:"gotoif",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Condition",name:"condition",type:"text",required:!0,param:0},{title:"truepriority",name:"truepriority",type:"number",min:1,required:!0,param:1},{title:"falsepriority",name:"falsepriority",type:"number",min:1,required:!0,param:2}]},{app:"queue",appType:"queue",foreignKey:"SmsQueueId",type:"queue",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"queues",field:{name:"queue",key:"name"},route:"smsQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:701}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",defaultValue:300,required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:300,param:1}]},{app:"agent",appType:"agent",type:"agent",foreignKey:"UserId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"agents",field:{name:"agent",key:"name"},route:"user",filters:{fields:"id,name",sort:"name",nolimit:!0,role:"agent"},permissions:{section:202}}],fields:[{title:"Agent",name:"agent",type:"apiselect",values:"agents",value:"agent.name",option:"agent.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:30,param:1}]},{app:"autoreply",appType:"autoreply",type:"autoreply",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"times",name:"times",type:"select",defaultValue:"1",values:[{option:"One Time",value:"1"},{option:"Always",value:"0"}],required:!0,param:0},{title:"Text",name:"text",type:"textarea",required:!0,param:1}]},{app:"close",appType:"close",type:"close",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Disposition",name:"disposition",type:"text",required:!0,param:0}]},{app:"tag",appType:"tag",type:"tag",foreignKey:"TagId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"tags",field:{name:"tag",key:"name"},route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1008}}],fields:[{title:"Tag",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",required:!0,param:0}]}],["app"]),{isApp:!1}),r.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},r.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){l()}},r.init=function(e,t){r.smsAccount=e,r.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},r.applications.disabled=!r.crudPermissions.canEdit,r.query.id=e.id,r.query.isApp=!0,r.query.nolimit=!0,r.getSmsAccountApps(),r.getIntervals()},r.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){r.smsAccountApps.rows.splice(t,1),l()},function(){console.log("CANCEL")})},r.getSmsAccountApps=function(){r.promise=o.smsAccount.getApplications(r.query,n).$promise},r.editSmsAccountApp=t,r.editInterval=function(e,t){if(r.smsAccountApps.rows.length){var n=r.smsAccountApps.rows[t]?r.smsAccountApps.rows[t]:r.smsAccountApps.rows[0];i.show({controller:"EditSmsAccountAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:r.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,l())})}},r.deleteSmsAccountApp=function(e){_.remove(r.smsAccountApps.rows,{id:e.id}),l(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},r.deleteSelectedSmsAccountApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+r.selectedSmsAccountApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){r.selectedSmsAccountApps.forEach(function(e){_.remove(r.smsAccountApps.rows,{id:e.id})}),r.selectedSmsAccountApps=[],l()})},r.rewriteRouting=l,r.getIntervals=function(){return o.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){r.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.sms").controller("SmsAccountActionsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.smsAccount.getAgents({id:c.smsAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserSmsAccount?"penalty "+e.UserSmsAccount.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.smsAccount=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.smsAccount.removeAgents({id:c.smsAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.smsAccount.addAgents({id:c.smsAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("SMS.ALL_AGENTS"),labelSelected:r.instant("SMS.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","smsAccount","smsAccounts","realtime","$translate","Auth","crudPermissions"],angular.module("app.sms").controller("SmsAccountagentaddController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.agent=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agent.appdata)switch(l.agent.appType?l.agent.appType.toLowerCase():l.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agent.appdata.split(",");l.agent.key=d[0],l.agent.language=d[1],l.agent.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agent.appdata.split(",");l.agent.accesskeyid=d[0],l.agent.secretaccesskey=d[1],l.agent.lexregion=d[2],l.agent.botname=d[3],l.agent.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agent.appdata.split(",");l.agent.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agent.text=d.slice(1,d.length).join(",");break;case"message":l.agent.text=l.agent.appdata;break;case"set":l.agent.name=l.agent.appdata.split("=")[0],l.agent.value=l.agent.appdata.split("=")[1];break;case"agi":l.agent.project=l.agent.appdata;break;default:var c=l.agent.appdata.split(",");l.agent.agent=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.agent.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.agent.timeout=30;function m(e){t.hide(e)}l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outbounddial"===l.agent.appType.toLowerCase()&&(l.agent.prefix=l.agent.phone?l.agent.phone.split("$")[0]:void 0,l.agent.callerId=l.agent.callerID?"CALLERID(all)="+l.agent.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outboundDial"===l.agent.appType&&(l.agent.phone=i.cutdigits?(l.agent.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agent.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agent.options+="U(xcally-mixmonitor-context)"):l.agent.options=l.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.agents,{name:l.agent.agent});t&&(l.agent.UserId=t.id);if(l.agent.appType&&"custom"===l.agent.appType);else switch((l.agent.app||l.agent.appType).toLowerCase()){case"set":l.agent.appdata=l.agent.name+"="+l.agent.value;break;case"custom":break;default:e[0]=l.agent.agent,e[1]=l.agent.timeout,l.agent.appdata=e.join(",")}m(l.agent)},l.closeDialog=m,o.hasRole("admin")?s.user.get({fields:"id,name",sort:"name",nolimit:"true",role:"agent"}).$promise.then(function(e){l.agents=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.user.get({fields:"id,name",sort:"name",nolimit:"true",role:"agent"}).$promise.then(function(e){l.agents=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.agents,{id:e.resourceId})}),n=null;if(l.agent&&(n=_.find(l.agents,{name:l.agent.agent})),n&&!_.some(t,["id",n.id])){var a=_.find(l.agents,{id:n.id});a.canSelect=!1,t.push(a)}l.agents=t})}else{var n=[],a=null;l.agent&&(a=_.find(l.agents,{name:l.agent.agent}));for(var i=0;i<l.agents.length;i++)a&&l.agents[i].id===a.id&&(l.agents[i].canSelect=!1,n.push(l.agents[i]));l.agents=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.autoreply=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.autoreply.appdata)switch(l.autoreply.appType?l.autoreply.appType.toLowerCase():l.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.autoreply.appdata.split(",");l.autoreply.key=d[0],l.autoreply.language=d[1],l.autoreply.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.autoreply.appdata.split(",");l.autoreply.accesskeyid=d[0],l.autoreply.secretaccesskey=d[1],l.autoreply.lexregion=d[2],l.autoreply.botname=d[3],l.autoreply.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.autoreply.appdata.split(",");l.autoreply.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.autoreply.text=d.slice(1,d.length).join(",");break;case"message":l.autoreply.text=l.autoreply.appdata;break;case"set":l.autoreply.name=l.autoreply.appdata.split("=")[0],l.autoreply.value=l.autoreply.appdata.split("=")[1];break;case"agi":l.autoreply.project=l.autoreply.appdata;break;default:var c=l.autoreply.appdata.split(",");l.autoreply.times=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.autoreply.text=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.autoreply.times=1;function m(e){t.hide(e)}l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outbounddial"===l.autoreply.appType.toLowerCase()&&(l.autoreply.prefix=l.autoreply.phone?l.autoreply.phone.split("$")[0]:void 0,l.autoreply.callerId=l.autoreply.callerID?"CALLERID(all)="+l.autoreply.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outboundDial"===l.autoreply.appType&&(l.autoreply.phone=i.cutdigits?(l.autoreply.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.autoreply.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.autoreply.options+="U(xcally-mixmonitor-context)"):l.autoreply.options=l.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(l.autoreply.appType&&"custom"===l.autoreply.appType);else switch((l.autoreply.app||l.autoreply.appType).toLowerCase()){case"set":l.autoreply.appdata=l.autoreply.name+"="+l.autoreply.value;break;case"custom":break;default:e[0]=l.autoreply.times,e[1]=l.autoreply.text,l.autoreply.appdata=e.join(",")}m(l.autoreply)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.close=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.close.appdata)switch(l.close.appType?l.close.appType.toLowerCase():l.close.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.close.appdata.split(",");l.close.key=d[0],l.close.language=d[1],l.close.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.close.appdata.split(",");l.close.accesskeyid=d[0],l.close.secretaccesskey=d[1],l.close.lexregion=d[2],l.close.botname=d[3],l.close.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.close.appdata.split(",");l.close.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.close.text=d.slice(1,d.length).join(",");break;case"message":l.close.text=l.close.appdata;break;case"set":l.close.name=l.close.appdata.split("=")[0],l.close.value=l.close.appdata.split("=")[1];break;case"agi":l.close.project=l.close.appdata;break;default:var c=l.close.appdata.split(",");l.close.disposition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outbounddial"===l.close.appType.toLowerCase()&&(l.close.prefix=l.close.phone?l.close.phone.split("$")[0]:void 0,l.close.callerId=l.close.callerID?"CALLERID(all)="+l.close.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outboundDial"===l.close.appType&&(l.close.phone=i.cutdigits?(l.close.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.close.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.close.options+="U(xcally-mixmonitor-context)"):l.close.options=l.close.options.replace("U(xcally-mixmonitor-context)",""));if(l.close.appType&&"custom"===l.close.appType);else switch((l.close.app||l.close.appType).toLowerCase()){case"set":l.close.appdata=l.close.name+"="+l.close.value;break;case"custom":break;default:e[0]=l.close.disposition,l.close.appdata=e.join(",")}m(l.close)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotoif=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotoif.appdata)switch(l.gotoif.appType?l.gotoif.appType.toLowerCase():l.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotoif.appdata.split(",");l.gotoif.key=d[0],l.gotoif.language=d[1],l.gotoif.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotoif.appdata.split(",");l.gotoif.accesskeyid=d[0],l.gotoif.secretaccesskey=d[1],l.gotoif.lexregion=d[2],l.gotoif.botname=d[3],l.gotoif.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotoif.appdata.split(",");l.gotoif.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotoif.text=d.slice(1,d.length).join(",");break;case"message":l.gotoif.text=l.gotoif.appdata;break;case"set":l.gotoif.name=l.gotoif.appdata.split("=")[0],l.gotoif.value=l.gotoif.appdata.split("=")[1];break;case"agi":l.gotoif.project=l.gotoif.appdata;break;default:var c=l.gotoif.appdata.split(",");l.gotoif.condition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.gotoif.truepriority=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.gotoif.falsepriority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outbounddial"===l.gotoif.appType.toLowerCase()&&(l.gotoif.prefix=l.gotoif.phone?l.gotoif.phone.split("$")[0]:void 0,l.gotoif.callerId=l.gotoif.callerID?"CALLERID(all)="+l.gotoif.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outboundDial"===l.gotoif.appType&&(l.gotoif.phone=i.cutdigits?(l.gotoif.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotoif.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotoif.options+="U(xcally-mixmonitor-context)"):l.gotoif.options=l.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotoif.appType&&"custom"===l.gotoif.appType);else switch((l.gotoif.app||l.gotoif.appType).toLowerCase()){case"set":l.gotoif.appdata=l.gotoif.name+"="+l.gotoif.value;break;case"custom":break;default:e[0]=l.gotoif.condition,e[1]=l.gotoif.truepriority,e[2]=l.gotoif.falsepriority,l.gotoif.appdata=e.join(",")}m(l.gotoif)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotop.appdata)switch(l.gotop.appType?l.gotop.appType.toLowerCase():l.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotop.appdata.split(",");l.gotop.key=d[0],l.gotop.language=d[1],l.gotop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotop.appdata.split(",");l.gotop.accesskeyid=d[0],l.gotop.secretaccesskey=d[1],l.gotop.lexregion=d[2],l.gotop.botname=d[3],l.gotop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotop.appdata.split(",");l.gotop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotop.text=d.slice(1,d.length).join(",");break;case"message":l.gotop.text=l.gotop.appdata;break;case"set":l.gotop.name=l.gotop.appdata.split("=")[0],l.gotop.value=l.gotop.appdata.split("=")[1];break;case"agi":l.gotop.project=l.gotop.appdata;break;default:var c=l.gotop.appdata.split(",");l.gotop.priority=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outbounddial"===l.gotop.appType.toLowerCase()&&(l.gotop.prefix=l.gotop.phone?l.gotop.phone.split("$")[0]:void 0,l.gotop.callerId=l.gotop.callerID?"CALLERID(all)="+l.gotop.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outboundDial"===l.gotop.appType&&(l.gotop.phone=i.cutdigits?(l.gotop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotop.options+="U(xcally-mixmonitor-context)"):l.gotop.options=l.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotop.appType&&"custom"===l.gotop.appType);else switch((l.gotop.app||l.gotop.appType).toLowerCase()){case"set":l.gotop.appdata=l.gotop.name+"="+l.gotop.value;break;case"custom":break;default:e[0]=l.gotop.priority,l.gotop.appdata=e.join(",")}m(l.gotop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditSmsAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.noop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.noop.appdata)switch(l.noop.appType?l.noop.appType.toLowerCase():l.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.noop.appdata.split(",");l.noop.key=d[0],l.noop.language=d[1],l.noop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.noop.appdata.split(",");l.noop.accesskeyid=d[0],l.noop.secretaccesskey=d[1],l.noop.lexregion=d[2],l.noop.botname=d[3],l.noop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.noop.appdata.split(",");l.noop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.noop.text=d.slice(1,d.length).join(",");break;case"message":l.noop.text=l.noop.appdata;break;case"set":l.noop.name=l.noop.appdata.split("=")[0],l.noop.value=l.noop.appdata.split("=")[1];break;case"agi":l.noop.project=l.noop.appdata;break;default:var c=l.noop.appdata.split(",");l.noop.value=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outbounddial"===l.noop.appType.toLowerCase()&&(l.noop.prefix=l.noop.phone?l.noop.phone.split("$")[0]:void 0,l.noop.callerId=l.noop.callerID?"CALLERID(all)="+l.noop.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outboundDial"===l.noop.appType&&(l.noop.phone=i.cutdigits?(l.noop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.noop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.noop.options+="U(xcally-mixmonitor-context)"):l.noop.options=l.noop.options.replace("U(xcally-mixmonitor-context)",""));if(l.noop.appType&&"custom"===l.noop.appType);else switch((l.noop.app||l.noop.appType).toLowerCase()){case"set":l.noop.appdata=l.noop.name+"="+l.noop.value;break;case"custom":break;default:e[0]=l.noop.value,l.noop.appdata=e.join(",")}m(l.noop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.queue.queue=300,l.queue.timeout=300;function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.queues,{name:l.queue.queue});t&&(l.queue[_.capitalize("sms")+"QueueId"]=t.id);if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.timeout,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.smsQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.smsQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:701}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.system=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.system.appdata)switch(l.system.appType?l.system.appType.toLowerCase():l.system.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.system.appdata.split(",");l.system.key=d[0],l.system.language=d[1],l.system.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.system.appdata.split(",");l.system.accesskeyid=d[0],l.system.secretaccesskey=d[1],l.system.lexregion=d[2],l.system.botname=d[3],l.system.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.system.appdata.split(",");l.system.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.system.text=d.slice(1,d.length).join(",");break;case"message":l.system.text=l.system.appdata;break;case"set":l.system.name=l.system.appdata.split("=")[0],l.system.value=l.system.appdata.split("=")[1];break;case"agi":l.system.project=l.system.appdata;break;default:var c=l.system.appdata.split(",");l.system.command=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.system.variable=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.system.variable="";function m(e){t.hide(e)}l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outbounddial"===l.system.appType.toLowerCase()&&(l.system.prefix=l.system.phone?l.system.phone.split("$")[0]:void 0,l.system.callerId=l.system.callerID?"CALLERID(all)="+l.system.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outboundDial"===l.system.appType&&(l.system.phone=i.cutdigits?(l.system.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.system.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.system.options+="U(xcally-mixmonitor-context)"):l.system.options=l.system.options.replace("U(xcally-mixmonitor-context)",""));if(l.system.appType&&"custom"===l.system.appType);else switch((l.system.app||l.system.appType).toLowerCase()){case"set":l.system.appdata=l.system.name+"="+l.system.value;break;case"custom":break;default:e[0]=l.system.command,e[1]=l.system.variable,l.system.appdata=e.join(",")}m(l.system)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.system&&(n=_.find(l.variables,{name:l.system.variable})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.system&&(a=_.find(l.variables,{name:l.system.variable}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.tag=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.tag.appdata)switch(l.tag.appType?l.tag.appType.toLowerCase():l.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.tag.appdata.split(",");l.tag.key=d[0],l.tag.language=d[1],l.tag.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.tag.appdata.split(",");l.tag.accesskeyid=d[0],l.tag.secretaccesskey=d[1],l.tag.lexregion=d[2],l.tag.botname=d[3],l.tag.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.tag.appdata.split(",");l.tag.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.tag.text=d.slice(1,d.length).join(",");break;case"message":l.tag.text=l.tag.appdata;break;case"set":l.tag.name=l.tag.appdata.split("=")[0],l.tag.value=l.tag.appdata.split("=")[1];break;case"agi":l.tag.project=l.tag.appdata;break;default:var c=l.tag.appdata.split(",");l.tag.tag=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outbounddial"===l.tag.appType.toLowerCase()&&(l.tag.prefix=l.tag.phone?l.tag.phone.split("$")[0]:void 0,l.tag.callerId=l.tag.callerID?"CALLERID(all)="+l.tag.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outboundDial"===l.tag.appType&&(l.tag.phone=i.cutdigits?(l.tag.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.tag.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.tag.options+="U(xcally-mixmonitor-context)"):l.tag.options=l.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.tags,{name:l.tag.tag});t&&(l.tag.TagId=t.id);if(l.tag.appType&&"custom"===l.tag.appType);else switch((l.tag.app||l.tag.appType).toLowerCase()){case"set":l.tag.appdata=l.tag.name+"="+l.tag.value;break;case"custom":break;default:e[0]=l.tag.tag,l.tag.appdata=e.join(",")}m(l.tag)},l.closeDialog=m,o.hasRole("admin")?s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1008}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.tags,{id:e.resourceId})}),n=null;if(l.tag&&(n=_.find(l.tags,{name:l.tag.tag})),n&&!_.some(t,["id",n.id])){var a=_.find(l.tags,{id:n.id});a.canSelect=!1,t.push(a)}l.tags=t})}else{var n=[],a=null;l.tag&&(a=_.find(l.tags,{name:l.tag.tag}));for(var i=0;i<l.tags.length;i++)a&&l.tags[i].id===a.id&&(l.tags[i].canSelect=!1,n.push(l.tags[i]));l.tags=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtags",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountApptagDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.smsAccount={},c.smsAccountInteractions={count:0,rows:[]},c.selectedSmsAccountInteractions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,Contact.firstName,Owner.name,closedAt,disposition,note,UserId,ContactId,SmsAccountId,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e,t){c.smsAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.smsAccount.id,c.getSmsAccountInteractions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the interaction?").htmlContent("<b>"+(e.name||"interaction")+"</b> will be deleted.").ariaLabel("delete interaction").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.smsInteractionDownload=function(s,e,t){return l.smsInteraction.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="interaction"+s.id,a=new Blob(t,{type:e.type});n="sms-interaction"+s.id+".zip";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getSmsAccountInteractions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.smsAccount.getInteractions(c.query,p).$promise},c.createOrEditSmsAccountInteraction=function(e,t){s.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/interactions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:c.smsAccount,interaction:t,interactions:c.smsAccountInteractions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.spysmsInteraction=function(e,n){s.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,onShowing:function(e,t){e.vm.init({id:1,channel:"sms",interaction:n,spy:!0},a.$parent.vm.setting)}})},c.exportSelectedSmsAccountInteractions=function(){var e=angular.copy(c.selectedSmsAccountInteractions);return c.selectedSmsAccountInteractions=[],e},c.deleteSmsAccountInteraction=g,c.deleteSelectedSmsAccountInteractions=function(e){var t=s.confirm().title("Are you sure want to delete the selected interactions?").htmlContent("<b>"+c.selectedSmsAccountInteractions.length+" selected</b> will be deleted.").ariaLabel("delete interactions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedSmsAccountInteractions.forEach(function(e){g(e)}),c.selectedSmsAccountInteractions=[]})};var m=!0,u=1;function p(e){c.smsAccountInteractions=e||{count:0,rows:[]}}function g(e){l.smsInteraction.delete({id:e.id}).$promise.then(function(){_.remove(c.smsAccountInteractions.rows,{id:e.id}),c.smsAccountInteractions.count-=1,c.smsAccountInteractions.rows.length||c.getSmsAccountInteractions(),r.success({title:"Interaction deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETsmsAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}a.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getSmsAccountInteractions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.sms").controller("SmsAccountInteractionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.smsAccount={},c.smsAccountSmsCannedAnswers={count:0,rows:[]},c.selectedSmsAccountSmsCannedAnswers=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,key,value,description",limit:10,page:1},c.init=function(e,t){c.smsAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.smsAccount.id,c.query.SmsAccountId=c.smsAccount.id,c.getSmsAccountSmsCannedAnswers()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the smsCannedAnswer?").htmlContent("<b>"+(e.name||"smsCannedAnswer")+"</b> will be deleted.").ariaLabel("delete smsCannedAnswer").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getSmsAccountSmsCannedAnswers=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.smsAccount.getAnswers(c.query,p).$promise},c.createOrEditSmsAccountSmsCannedAnswer=function(e,t){s.show({controller:"CreateOrEditSmsCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/smsCannedAnswers/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:c.smsAccount,smsCannedAnswer:t,smsCannedAnswers:c.smsAccountSmsCannedAnswers.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedSmsAccountSmsCannedAnswers=function(){var e=angular.copy(c.selectedSmsAccountSmsCannedAnswers);return c.selectedSmsAccountSmsCannedAnswers=[],e},c.deleteSmsAccountSmsCannedAnswer=g,c.deleteSelectedSmsAccountSmsCannedAnswers=function(e){var t=s.confirm().title("Are you sure want to delete the selected smsCannedAnswers?").htmlContent("<b>"+c.selectedSmsAccountSmsCannedAnswers.length+" selected</b> will be deleted.").ariaLabel("delete smsCannedAnswers").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedSmsAccountSmsCannedAnswers.forEach(function(e){g(e)}),c.selectedSmsAccountSmsCannedAnswers=[]})};var m=!0,u=1;function p(e){c.smsAccountSmsCannedAnswers=e||{count:0,rows:[]}}function g(e){l.cannedAnswer.delete({id:e.id}).$promise.then(function(){_.remove(c.smsAccountSmsCannedAnswers.rows,{id:e.id}),c.smsAccountSmsCannedAnswers.count-=1,c.smsAccountSmsCannedAnswers.rows.length||c.getSmsAccountSmsCannedAnswers(),r.success({title:"SmsCannedAnswer deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETsmsAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getSmsAccountSmsCannedAnswers())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.sms").controller("SmsAccountSmsCannedAnswersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SMS.EDIT_SMSCANNEDANSWER",g.smsCannedAnswer=angular.copy(l),g.smsCannedAnswers=r,g.newSmsCannedAnswer=!1,g.smsCannedAnswer||(g.smsCannedAnswer={},g.title="SMS.NEW_SMSCANNEDANSWER",g.newSmsCannedAnswer=!0),t.params.id&&(g.smsCannedAnswer.SmsAccountId=t.params.id),g.addNewSmsCannedAnswer=function(){g.errors=[],d.cannedAnswer.save(g.smsCannedAnswer).$promise.then(function(e){g.smsCannedAnswers.unshift(e.toJSON()),o.success({title:"SmsCannedAnswer properly created",msg:g.smsCannedAnswer.name?g.smsCannedAnswer.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSmsCannedAnswer=function(){g.errors=[],d.cannedAnswer.update({id:g.smsCannedAnswer.id},g.smsCannedAnswer).$promise.then(function(e){var t=_.find(g.smsCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsCannedAnswer properly saved!",msg:g.smsCannedAnswer.name?g.smsCannedAnswer.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSmsCannedAnswer=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The smsCannedAnswer will be deleted.").ariaLabel("Delete SmsCannedAnswer").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cannedAnswer.delete({id:g.smsCannedAnswer.id}).$promise.then(function(){_.remove(g.smsCannedAnswers,{id:g.smsCannedAnswer.id}),o.success({title:"SmsCannedAnswer properly deleted!",msg:(g.smsCannedAnswer.name||"smsCannedAnswer")+" has been deleted!"}),v(g.smsCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","smsCannedAnswers","smsCannedAnswer","api","Auth","license","setting","crudPermissions"],angular.module("app.sms").controller("CreateOrEditSmsCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.smsAccount={},c.smsAccountSmsDispositions={count:0,rows:[]},c.selectedSmsAccountSmsDispositions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e,t){c.smsAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.smsAccount.id,c.query.SmsAccountId=c.smsAccount.id,c.getSmsAccountSmsDispositions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the smsDisposition?").htmlContent("<b>"+(e.name||"smsDisposition")+"</b> will be deleted.").ariaLabel("delete smsDisposition").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getSmsAccountSmsDispositions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.smsAccount.getDispositions(c.query,p).$promise},c.createOrEditSmsAccountSmsDisposition=function(e,t){s.show({controller:"CreateOrEditSmsDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/smsDispositions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:c.smsAccount,smsDisposition:t,smsDispositions:c.smsAccountSmsDispositions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedSmsAccountSmsDispositions=function(){var e=angular.copy(c.selectedSmsAccountSmsDispositions);return c.selectedSmsAccountSmsDispositions=[],e},c.deleteSmsAccountSmsDisposition=g,c.deleteSelectedSmsAccountSmsDispositions=function(e){var t=s.confirm().title("Are you sure want to delete the selected smsDispositions?").htmlContent("<b>"+c.selectedSmsAccountSmsDispositions.length+" selected</b> will be deleted.").ariaLabel("delete smsDispositions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedSmsAccountSmsDispositions.forEach(function(e){g(e)}),c.selectedSmsAccountSmsDispositions=[]})};var m=!0,u=1;function p(e){c.smsAccountSmsDispositions=e||{count:0,rows:[]}}function g(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(c.smsAccountSmsDispositions.rows,{id:e.id}),c.smsAccountSmsDispositions.count-=1,c.smsAccountSmsDispositions.rows.length||c.getSmsAccountSmsDispositions(),r.success({title:"SmsDisposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETsmsAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getSmsAccountSmsDispositions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.sms").controller("SmsAccountSmsDispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SMS.EDIT_SMSDISPOSITION",g.smsDisposition=angular.copy(l),g.smsDispositions=r,g.newSmsDisposition=!1,g.smsDisposition||(g.smsDisposition={},g.title="SMS.NEW_SMSDISPOSITION",g.newSmsDisposition=!0),t.params.id&&(g.smsDisposition.SmsAccountId=t.params.id),g.addNewSmsDisposition=function(){g.errors=[],d.disposition.save(g.smsDisposition).$promise.then(function(e){g.smsDispositions.unshift(e.toJSON()),o.success({title:"SmsDisposition properly created",msg:g.smsDisposition.name?g.smsDisposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSmsDisposition=function(){g.errors=[],d.disposition.update({id:g.smsDisposition.id},g.smsDisposition).$promise.then(function(e){var t=_.find(g.smsDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsDisposition properly saved!",msg:g.smsDisposition.name?g.smsDisposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSmsDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The smsDisposition will be deleted.").ariaLabel("Delete SmsDisposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.smsDisposition.id}).$promise.then(function(){_.remove(g.smsDispositions,{id:g.smsDisposition.id}),o.success({title:"SmsDisposition properly deleted!",msg:(g.smsDisposition.name||"smsDisposition")+" has been deleted!"}),v(g.smsDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","smsDispositions","smsDisposition","api","Auth","license","setting","crudPermissions"],angular.module("app.sms").controller("CreateOrEditSmsDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.smsAccount=c||e.params.smsAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.agentadddialog=function(e,t){n.show({controller:"SmsAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsAccount:e,smsAccounts:u.smsAccounts?u.smsAccounts.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoSmsAccounts=function(){e.go("app.sms.smsAccounts")},u.saveSmsAccount=function(){r.smsAccount.update({id:u.smsAccount.id},u.smsAccount).$promise.then(function(){l.success({title:"SmsAccount updated!",msg:u.smsAccount.name?u.smsAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.lists,{id:e.resourceId})}),n=null;if(u.smsAccount&&(n=_.find(u.lists,{id:Number(u.smsAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.lists,{id:n.id});a.canSelect=!1,t.push(a)}u.lists=t})}else{var n=[],a=null;u.smsAccount&&(a=_.find(u.lists,{id:Number(u.smsAccount.ListId)}));for(var i=0;i<u.lists.length;i++)a&&u.lists[i].id===a.id&&(u.lists[i].canSelect=!1,n.push(u.lists[i]));u.lists=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","smsAccount","userProfileSection"],angular.module("app.sms").controller("SmsAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.smsAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="smsAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedSmsAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,key,token,remote,ListId,type,phone,accountSid,authId,authToken,smsMethod,username,password,baseUrl,apiKey,senderString,deliveryReport,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},b.arraytype=_.keyBy([{option:"Twilio",value:"'twilio'"},{option:"Skebby",value:"'skebby'"},{option:"Connectel",value:"'connectel'"},{option:"ClickSend",value:"'clicksend'"},{option:"Plivo",value:"'plivo'"},{option:"Infobip",value:"'infobip'"},{option:"Clickatell",value:"'clickatell'"},{option:"CSCTelecom",value:"'csc'"},{option:"Intelepeer",value:"'intelepeer'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysmsMethod=_.keyBy([{option:"Basic",value:"'SI'"},{option:"Classic",value:"'TI'"},{option:"Classic+",value:"'GP'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.sms.smsAccounts.edit",{id:e.id,smsAccount:e,crudPermissions:b.crudPermissions})},b.interactionsgoto=function(e,t){n.go("app.sms.smsAccounts.edit",{id:e.id,tab:5})},b.agentadddialog=function(e,t){i.show({controller:"SmsAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsAccount:e,smsAccounts:b.smsAccounts?b.smsAccounts.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("smsAccount")+"?").htmlContent("<b>"+(e.name||"smsAccount")+"</b> will be deleted.").ariaLabel("delete smsAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getSmsAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.smsAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="SmsAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSmsAccount=function(e,t){i.show({controller:"CreateOrEditSmsAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:t,smsAccounts:b.smsAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSmsAccount=S,b.exportSelectedSmsAccounts=function(){var e=angular.copy(b.selectedSmsAccounts);return b.selectedSmsAccounts=[],e},b.deleteSelectedSmsAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected smsAccounts?").htmlContent("<b>"+b.selectedSmsAccounts.length+" selected</b> will be deleted.").ariaLabel("delete SmsAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedSmsAccounts.forEach(function(e){S(e)}),b.selectedSmsAccounts=[]})},b.deselectSmsAccounts=function(){b.selectedSmsAccounts=[]},b.selectAllSmsAccounts=function(){b.selectedSmsAccounts=b.smsAccounts.rows},g.hasRole("admin")?m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.lists,{id:e.resourceId})}),n=null;if(b.smsAccount&&(n=_.find(b.lists,{id:Number(b.smsAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.lists,{id:n.id});a.canSelect=!1,t.push(a)}b.lists=t})}else{var n=[],a=null;b.smsAccount&&(a=_.find(b.lists,{id:Number(b.smsAccount.ListId)}));for(var i=0;i<b.lists.length;i++)a&&b.lists[i].id===a.id&&(b.lists[i].canSelect=!1,n.push(b.lists[i]));b.lists=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.smsAccounts=e||{count:0,rows:[]}}function S(e){m.smsAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.smsAccounts.rows,{id:e.id}),b.smsAccounts.count-=1,b.smsAccounts.rows.length||b.getSmsAccounts(),p.success({title:_.startCase("SmsAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsmsAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEsmsAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getSmsAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","smsAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.sms").controller("SmsAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SMS.EDIT_SMSQUEUE",g.smsQueue=angular.copy(l),g.smsQueues=r,g.newSmsQueue=!1,g.smsQueue||(g.smsQueue={strategy:"beepall",timeout:10},g.title="SMS.NEW_SMSQUEUE",g.newSmsQueue=!0),g.addNewSmsQueue=function(){g.errors=[],d.smsQueue.save(g.smsQueue).$promise.then(function(e){g.smsQueues.unshift(e.toJSON()),o.success({title:"SmsQueue properly created",msg:g.smsQueue.name?g.smsQueue.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.smsQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSmsQueue=function(){g.errors=[],d.smsQueue.update({id:g.smsQueue.id},g.smsQueue).$promise.then(function(e){var t=_.find(g.smsQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsQueue properly saved!",msg:g.smsQueue.name?g.smsQueue.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.smsQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSmsQueue=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The smsQueue will be deleted.").ariaLabel("Delete SmsQueue").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.smsQueue.delete({id:g.smsQueue.id}).$promise.then(function(){_.remove(g.smsQueues,{id:g.smsQueue.id}),o.success({title:"SmsQueue properly deleted!",msg:(g.smsQueue.name||"smsQueue")+" has been deleted!"}),v(g.smsQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.smsQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","smsQueues","smsQueue","api","Auth","license","setting","crudPermissions"],angular.module("app.sms").controller("CreateOrEditSmsQueueDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.smsQueue.getAgents({id:c.smsQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserSmsQueue?"penalty "+e.UserSmsQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.smsQueue=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.smsQueue.removeAgents({id:c.smsQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.smsQueue.addAgents({id:c.smsQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("SMS.ALL_AGENTS"),labelSelected:r.instant("SMS.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","smsQueue","smsQueues","realtime","$translate","Auth","crudPermissions"],angular.module("app.sms").controller("SmsQueueagentaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r){var l=this;function d(){return a(function(n,t){return a(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.smsQueue.getTeams({id:l.smsQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.smsQueue=t,l.crudPermissions=r,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("SMS.ALL_TEAMS"),labelSelected:n.instant("SMS.SELECTED_TEAMS"),transferCallback:function(e,t){var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.smsQueue.removeTeams({id:l.smsQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.smsQueue.addTeams({id:l.smsQueue.id,teams:_.map(n,function(e){return _.pick(e,["id"])})}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),i.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","smsQueue","$translate","Auth","crudPermissions"],angular.module("app.sms").controller("SmsQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.smsQueue=c||e.params.smsQueue||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.teamadddialog=function(e,t){n.show({controller:"SmsQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/teamadd/teamadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsQueue:e,smsQueues:u.smsQueues?u.smsQueues.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){n.show({controller:"SmsQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsQueue:e,smsQueues:u.smsQueues?u.smsQueues.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoSmsQueues=function(){e.go("app.sms.smsQueues")},u.saveSmsQueue=function(){r.smsQueue.update({id:u.smsQueue.id},u.smsQueue).$promise.then(function(){l.success({title:"SmsQueue updated!",msg:u.smsQueue.name?u.smsQueue.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","smsQueue","userProfileSection"],angular.module("app.sms").controller("SmsQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.smsQueues=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="smsQueues",b.listOrder="",b.listOrderAsc=null,b.selectedSmsQueues=[],b.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"sms",limit:10,page:1},b.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.sms.smsQueues.edit",{id:e.id,smsQueue:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"SmsQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsQueue:e,smsQueues:b.smsQueues?b.smsQueues.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"SmsQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsQueue:e,smsQueues:b.smsQueues?b.smsQueues.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("smsQueue")+"?").htmlContent("<b>"+(e.name||"smsQueue")+"</b> will be deleted.").ariaLabel("delete smsQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:710}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.sms.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.sms.realtime.queues",{})}},b.success=y,b.getSmsQueues=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.smsQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="SmsQueues",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSmsQueue=function(e,t){i.show({controller:"CreateOrEditSmsQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsQueue:t,smsQueues:b.smsQueues.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSmsQueue=S,b.exportSelectedSmsQueues=function(){var e=angular.copy(b.selectedSmsQueues);return b.selectedSmsQueues=[],e},b.deleteSelectedSmsQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected smsQueues?").htmlContent("<b>"+b.selectedSmsQueues.length+" selected</b> will be deleted.").ariaLabel("delete SmsQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedSmsQueues.forEach(function(e){S(e)}),b.selectedSmsQueues=[]})},b.deselectSmsQueues=function(){b.selectedSmsQueues=[]},b.selectAllSmsQueues=function(){b.selectedSmsQueues=b.smsQueues.rows};var A=!0,E=1;function y(e){b.smsQueues=e||{count:0,rows:[]}}function S(e){m.smsQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.smsQueues.rows,{id:e.id}),b.smsQueues.count-=1,b.smsQueues.rows.length||b.getSmsQueues(),p.success({title:_.startCase("SmsQueue")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsmsQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEsmsQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getSmsQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","smsQueues","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.sms").controller("SmsQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.agents=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="agents",b.listOrder="",b.listOrderAsc=null,b.selectedAgents=[],b.query={fields:"createdAt,updatedAt,id,role,fullname,name,alias,showWebBar,email,phone,mobile,userpic,password,hotdesk,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,videosupport,extensionMonitor,chatCapacity,mailCapacity,faxCapacity,smsCapacity,openchannelCapacity,phoneBarEnableSettings,phoneBarAutoAnswer,phoneBarAutoAnswerDelay,phoneBarRingInUse,phoneBarEnableRecording,phoneBarEnableDtmfTone,phoneBarDnd,phoneBarUnansweredCallBadge,phoneBarEnableJaws,phoneBarOutboundProxy,phoneBarUnconditional,phoneBarUnconditionalNumber,phoneBarRemoteControl,phoneBarRemoteControlPort,phoneBarExpires,phoneBarListenPort,permissions,allowmessenger,phoneBarPrefixRequired,passwordResetAt,disabled,blocked,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"-updatedAt",limit:10,page:1},b.arrayshowWebBar=_.keyBy([{option:"Phonebar",value:"0"},{option:"External",value:"1"},{option:"WebRTC",value:"2"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytransport=_.keyBy([{option:"udp",value:"'udp'"},{option:"tcp",value:"'tcp'"},{option:"ws",value:"'ws'",ngIf:"vm.agent.showWebBar == 1"},{option:"wss",value:"'wss'",ngIf:"vm.agent.showWebBar == 1"},{option:"tls",value:"'tls'",ngIf:"vm.agent.showWebBar == 1"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraynat=_.keyBy([{option:"force_rport",value:"'force_rport'"},{option:"comedia",value:"'comedia'"},{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"never",value:"'never'"},{option:"route",value:"'route'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytype=_.keyBy([{option:"Friend",value:"'friend'"},{option:"User",value:"'user'"},{option:"Peer",value:"'peer'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayallow=_.keyBy([{option:"ulaw",value:"'ulaw'"},{option:"alaw",value:"'alaw'"},{option:"gsm",value:"'gsm'"},{option:"g722",value:"'g722'"},{option:"g729",value:"'g729'"},{option:"opus",value:"'opus'"},{option:"h264",value:"'h264'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayvideosupport=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Always",value:"'always'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayextensionMonitor=_.keyBy([{option:"Inactive",value:"''"},{option:"wav",value:"'wav'"},{option:"wav49",value:"'WAV'"},{option:"gsm",value:"'gsm'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.staff.agents.edit",{id:e.id,agent:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"AgentteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:b.agents?b.agents.rows:[],crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("agent")+"?").htmlContent("<b>"+(e.name||"agent")+"</b> will be deleted.").ariaLabel("delete agent").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getAgents=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.user.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Agents",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditAgent=function(e,t){i.show({controller:"CreateOrEditAgentDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{agent:t,agents:b.agents.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteAgent=S,b.exportSelectedAgents=function(){var e=angular.copy(b.selectedAgents);return b.selectedAgents=[],e},b.deleteSelectedAgents=function(e){var t=i.confirm().title("Are you sure want to delete the selected agents?").htmlContent("<b>"+b.selectedAgents.length+" selected</b> will be deleted.").ariaLabel("delete Agents").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedAgents.forEach(function(e){S(e)}),b.selectedAgents=[]})},b.deselectAgents=function(){b.selectedAgents=[]},b.selectAllAgents=function(){b.selectedAgents=b.agents.rows};var A=!0,E=1;function y(e){b.agents=e||{count:0,rows:[]}}function S(e){m.user.delete({id:e.id}).$promise.then(function(){_.remove(b.agents.rows,{id:e.id}),b.agents.count-=1,b.agents.rows.length||b.getAgents(),p.success({title:_.startCase("Agent")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuser"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEuser",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getAgents())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","agents","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("AgentsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="STAFF.EDIT_AGENT",g.agent=angular.copy(l),g.agents=r,g.newAgent=!1,g.agent||(g.agent={role:"agent",showWebBar:"0",autointernal:!0,type:"friend",context:"from-sip",phoneBarRemoteControl:!0,phoneBarRemoteControlPort:9888,allowmessenger:!0},g.title="STAFF.NEW_AGENT",g.newAgent=!0),g.addNewAgent=function(){g.errors=[],d.user.save(g.agent).$promise.then(function(e){g.agents.unshift(e.toJSON()),o.success({title:"Agent properly created",msg:g.agent.name?g.agent.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveAgent=function(){g.errors=[],d.user.update({id:g.agent.id},g.agent).$promise.then(function(e){var t=_.find(g.agents,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Agent properly saved!",msg:g.agent.name?g.agent.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteAgent=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The agent will be deleted.").ariaLabel("Delete Agent").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.user.delete({id:g.agent.id}).$promise.then(function(){_.remove(g.agents,{id:g.agent.id}),o.success({title:"Agent properly deleted!",msg:(g.agent.name||"agent")+" has been deleted!"}),v(g.agent)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","agents","agent","api","Auth","license","setting","crudPermissions"],angular.module("app.staff").controller("CreateOrEditAgentDialogController",e)}(),function(){"use strict";function e(e,a){var i=this;i.agent={},i.crudPermissions,i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.agent.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.agent.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e,t){i.agent=angular.copy(e),i.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.ngFlowOptions.target="api/users/"+i.agent.id+"/avatar",i.agent.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.staff").controller("Agentchange_avatarController",e)}(),function(){"use strict";function e(n,e,t,a,i,s,o){var r=this;function l(){e.hide()}r.currentUser=o.getCurrentUser(),r.errors=[],r.setting=s,r.passwordPattern=r.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",r.agent=i,r.password="",r.oldPassword="",r.savePassword=function(){r.errors=[];var e={id:r.agent.id,newPassword:r.password};r.currentUser.id==r.agent.id&&(e.oldPassword=r.oldPassword);a.user.changePassword(e).$promise.then(function(){t.success({title:"Agent password properly updated!"}),l()}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.agent.save",msg:e.data?JSON.stringify(e.data.message):e.toString()}),r.errors=e.data.errors||[{message:e.toString(),type:"api.agent.changePassword"}]})},r.closeDialog=l,n.$watch("vm.password",function(e,t){_.isNil(r.oldPassword)||(e===r.oldPassword?n.agentForm.password.$setValidity("oldPasswordMatch",!1):n.agentForm.password.$setValidity("oldPasswordMatch",!0))})}e.$inject=["$scope","$mdDialog","toasty","api","agent","setting","Auth"],angular.module("app.staff").controller("AgentchangepasswordController",e)}(),function(){"use strict";function e(e,t,i,n,s){var o=this;o.agent={},o.navigation=n.getNavigation(),o.crudPermissions,o.init=function(e,t){o.agent=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1}},o.onChange=function(t,n){if((n||t).enabled){if(n)n.enabled=!0,o.agent.permissions.push(n.id);else for(var e=0;e<t.children.length;e++)t.children[e].enabled=!0,o.agent.permissions.push(t.children[e].id);t.enabled=!0,o.agent.permissions.push(t.id)}else if(n)n.enabled=!1,_.remove(o.agent.permissions,function(e){return n.id===e}),_.filter(t.children,{enabled:!1}).length===t.children.length&&(t.enabled=!1,_.remove(o.agent.permissions,function(e){return t.id===e}));else{t.enabled=!1,_.remove(o.agent.permissions,function(e){return t.id===e});for(var a=0;a<t.children.length;a++)t.children[a].enabled=!1,_.remove(o.agent.permissions,function(e){return t.children[a].id===e})}return i.user.update({id:o.agent.id,permissions:_.uniq(o.agent.permissions)}).$promise.then(function(){s.success({title:"agent updated!",msg:o.agent.name?o.agent.name+" has been updated!":""})}).catch(function(e){console.error(e)})}}e.$inject=["$document","$mdDialog","api","msNavigationAgentService","toasty"],angular.module("app.staff").controller("AgentPermissionsController",e)}(),function(){"use strict";function e(e,l,a,d,t,n,i,s,o,r){var c=this;function m(){return l(function(n,t){return l(function(t,n){return d[c.apiName].get({fields:"id,name,strategy,type",channel:"bull"===c.channel?"voice":c.channel,type:c.direction,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],o.hasRole("admin")?e:c.section?c.section.autoAssociation?e:l(function(t,n){return d.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:o.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),l(function(t,n){return d.user.getQueues({id:c.agent.id,fields:"id,name,strategy,type,penalty",nolimit:!0,type:c.direction,channel:c.channel}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return"voice"===c.channel&&(t.penalty=void 0!==t&&void 0!==e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"penalty 0"),t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=o.getCurrentUser(),c.agent=t,c.crudPermissions=r,c.penalty=0,c.channel=n,c.direction=i,c.apiName=c.channel+"Queue",c.title=s.instant("STAFF.QUEUEADD_AGENT_"+c.channel.toUpperCase()+"_"+c.direction.toUpperCase()),c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"type",line3:"voice"===c.channel?"penalty":"",labelAll:s.instant("STAFF.ALL_QUEUES_"+c.channel.toUpperCase()+"_"+c.direction.toUpperCase()),labelSelected:s.instant("STAFF.SELECTED_QUEUES_"+c.channel.toUpperCase()+"_"+c.direction.toUpperCase()),transferCallback:function(e,t){t?e.forEach(function(e){e.penalty=void 0}):e.forEach(function(e){e.penalty="penalty "+c.penalty});var n=_.xorWith(c.startingSelectedItems,c.selectedItems,function(e,t){return e.id===t.id&&e.penalty===t.penalty});c.pendingChanges=!_.isEmpty(n)}},c.onInit=function(){return o.hasRole("admin")?m().catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})}):l(function(n,t){var e;switch(c.channel){case"voice":switch(c.direction){case"inbound":e="VoiceQueues";break;case"outbound":e="QueueCampaigns"}break;case"chat":e="ChatQueues";break;case"mail":e="MailQueues";break;case"sms":e="SmsQueues";break;case"openchannel":e="OpenchannelQueues";break;case"fax":e="FaxQueues"}d.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:e}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveQueues=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceWith(c.selectedItems,c.startingSelectedItems,function(e,t){return e.id===t.id&&e.penalty===t.penalty});return(n=e,l(function(e,t){_.isEmpty(n)?e():d.user.removeQueues({id:c.agent.id,ids:_.map(n,"id"),channel:c.channel}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return r=t,l(function(e,t){if(_.isEmpty(r))e();else if("voice"===c.channel){for(var n=[],a=_.groupBy(r,"penalty"),i=0;i<Object.keys(a).length;i++){var s=Object.keys(a)[i],o=_.filter(r,["penalty",s]);n.push(d.user.addQueues({id:c.agent.id,ids:_.map(o,"id"),channel:c.channel,penalty:_.trim(s,"penalty ")}).$promise)}l.all(n).then(function(){e()}).catch(function(e){t(e)})}else d.user.addQueues({id:c.agent.id,ids:_.map(r,"id"),channel:c.channel}).$promise.then(function(){e()}).catch(function(e){t(e)})});var r}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),a.success({title:"SUCCESS",msg:"Queues association has been updated!"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:QUEUES_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","agent","channel","direction","$translate","Auth","crudPermissions"],angular.module("app.staff").controller("AgentqueueaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r){var l=this;function d(){return a(function(n,t){return a(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.user.getTeams({id:l.agent.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.agent=t,l.crudPermissions=r,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("STAFF.ALL_TEAMS"),labelSelected:n.instant("STAFF.SELECTED_TEAMS"),transferCallback:function(e,t){var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.user.removeTeams({id:l.agent.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.user.addTeams({id:l.agent.id,teams:_.map(n,function(e){return _.pick(e,["id"])})}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),i.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","agent","$translate","Auth","crudPermissions"],angular.module("app.staff").controller("AgentteamaddController",e)}(),function(){"use strict";function e(e,t,i,s,n,a,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=a,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.agent=c||e.params.agent||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.queueaddchannel=function(e,t,n,a){i.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(s.body),targetEvent:n,clickOutsideToClose:!0,locals:{agent:e,agents:u.agents?u.agents.rows:[],channel:t,direction:a||"inbound",crudPermissions:u.crudPermissions}})},u.teamadddialog=function(e,t){i.show({controller:"AgentteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:u.agents?u.agents.rows:[],crudPermissions:u.crudPermissions}})},u.changepassworddialog=function(e,t){i.show({controller:"AgentchangepasswordController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/changepassword/changepassword.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,setting:o,agents:u.agents?u.agents.rows:[],crudPermissions:u.crudPermissions}})},u.onEnableScreenRecordingByAgentSelection=function(){["phoneBarEnableAutomaticScreenRecording"].forEach(function(e){u.agent.phoneBarEnableScreenRecordingByAgent&&(u.agent[e]=!u.agent.phoneBarEnableScreenRecordingByAgent)})},u.onEnableAutomaticScreenRecordingSelection=function(){["phoneBarEnableScreenRecordingByAgent"].forEach(function(e){u.agent.phoneBarEnableAutomaticScreenRecording&&(u.agent[e]=!u.agent.phoneBarEnableAutomaticScreenRecording)})},u.alert=l.info,u.gotoAgents=function(){e.go("app.staff.agents")},u.saveAgent=function(){u.agent=_.omit(u.agent,"userpic"),r.user.update({id:u.agent.id},u.agent).$promise.then(function(){l.success({title:"Agent updated!",msg:u.agent.name?u.agent.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuser",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.agent&&(n=_.find(u.contexts,{name:u.agent.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","agent","userProfileSection"],angular.module("app.staff").controller("AgentController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="STAFF.EDIT_TEAM",g.team=angular.copy(l),g.teams=r,g.newTeam=!1,g.team||(g.team={},g.title="STAFF.NEW_TEAM",g.newTeam=!0),g.addNewTeam=function(){g.errors=[],d.team.save(g.team).$promise.then(function(e){g.teams.unshift(e.toJSON()),o.success({title:"Team properly created",msg:g.team.name?g.team.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.team.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.team.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveTeam=function(){g.errors=[],d.team.update({id:g.team.id},g.team).$promise.then(function(e){var t=_.find(g.teams,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Team properly saved!",msg:g.team.name?g.team.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.team.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.team.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteTeam=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The team will be deleted.").ariaLabel("Delete Team").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.team.delete({id:g.team.id}).$promise.then(function(){_.remove(g.teams,{id:g.team.id}),o.success({title:"Team properly deleted!",msg:(g.team.name||"team")+" has been deleted!"}),v(g.team)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.team.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.team.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","teams","team","api","Auth","license","setting","crudPermissions"],angular.module("app.staff").controller("CreateOrEditTeamDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.team.getAgents({id:c.team.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserTeam?"penalty "+e.UserTeam.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.team=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.team.removeAgents({id:c.team.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.team.addAgents({id:c.team.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("STAFF.ALL_AGENTS"),labelSelected:r.instant("STAFF.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","team","teams","realtime","$translate","Auth","crudPermissions"],angular.module("app.staff").controller("TeamagentaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.teams=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="teams",b.listOrder="",b.listOrderAsc=null,b.selectedTeams=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditTeamDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/teams/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{team:e,teams:b.teams.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"TeamagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/teams/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{team:e,teams:b.teams?b.teams.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("team")+"?").htmlContent("<b>"+(e.name||"team")+"</b> will be deleted.").ariaLabel("delete team").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getTeams=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.team.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Teams",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditTeam=function(e,t){i.show({controller:"CreateOrEditTeamDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/teams/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{team:t,teams:b.teams.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteTeam=S,b.exportSelectedTeams=function(){var e=angular.copy(b.selectedTeams);return b.selectedTeams=[],e},b.deleteSelectedTeams=function(e){var t=i.confirm().title("Are you sure want to delete the selected teams?").htmlContent("<b>"+b.selectedTeams.length+" selected</b> will be deleted.").ariaLabel("delete Teams").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedTeams.forEach(function(e){S(e)}),b.selectedTeams=[]})},b.deselectTeams=function(){b.selectedTeams=[]},b.selectAllTeams=function(){b.selectedTeams=b.teams.rows};var A=!0,E=1;function y(e){b.teams=e||{count:0,rows:[]}}function S(e){m.team.delete({id:e.id}).$promise.then(function(){_.remove(b.teams.rows,{id:e.id}),b.teams.count-=1,b.teams.rows.length||b.getTeams(),p.success({title:_.startCase("Team")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEteam"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEteam",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getTeams())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","teams","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("TeamsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="STAFF.EDIT_TELEPHONE",g.telephone=angular.copy(l),g.telephones=r,g.newTelephone=!1,g.telephone||(g.telephone={role:"telephone",autointernal:!0,context:"from-sip"},g.title="STAFF.NEW_TELEPHONE",g.newTelephone=!0),g.addNewTelephone=function(){g.errors=[],d.user.save(g.telephone).$promise.then(function(e){g.telephones.unshift(e.toJSON()),o.success({title:"Telephone properly created",msg:g.telephone.name?g.telephone.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveTelephone=function(){g.errors=[],d.user.update({id:g.telephone.id},g.telephone).$promise.then(function(e){var t=_.find(g.telephones,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Telephone properly saved!",msg:g.telephone.name?g.telephone.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteTelephone=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The telephone will be deleted.").ariaLabel("Delete Telephone").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.user.delete({id:g.telephone.id}).$promise.then(function(){_.remove(g.telephones,{id:g.telephone.id}),o.success({title:"Telephone properly deleted!",msg:(g.telephone.name||"telephone")+" has been deleted!"}),v(g.telephone)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","telephones","telephone","api","Auth","license","setting","crudPermissions"],angular.module("app.staff").controller("CreateOrEditTelephoneDialogController",e)}(),function(){"use strict";function e(n,e,t,a,i,s,o){var r=this;function l(){e.hide()}r.currentUser=o.getCurrentUser(),r.errors=[],r.setting=s,r.passwordPattern=r.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",r.telephone=i,r.password="",r.oldPassword="",r.savePassword=function(){r.errors=[];var e={id:r.telephone.id,newPassword:r.password};r.currentUser.id==r.telephone.id&&(e.oldPassword=r.oldPassword);a.user.changePassword(e).$promise.then(function(){t.success({title:"Telephone password properly updated!"}),l()}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.telephone.save",msg:e.data?JSON.stringify(e.data.message):e.toString()}),r.errors=e.data.errors||[{message:e.toString(),type:"api.telephone.changePassword"}]})},r.closeDialog=l,n.$watch("vm.password",function(e,t){_.isNil(r.oldPassword)||(e===r.oldPassword?n.telephoneForm.password.$setValidity("oldPasswordMatch",!1):n.telephoneForm.password.$setValidity("oldPasswordMatch",!0))})}e.$inject=["$scope","$mdDialog","toasty","api","telephone","setting","Auth"],angular.module("app.staff").controller("TelephonechangepasswordController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.telephone=c||e.params.telephone||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.changepassworddialog=function(e,t){n.show({controller:"TelephonechangepasswordController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/telephones/edit/changepassword/changepassword.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{telephone:e,setting:o,telephones:u.telephones?u.telephones.rows:[],crudPermissions:u.crudPermissions}})},u.alert=l.info,u.gotoTelephones=function(){e.go("app.staff.telephones")},u.saveTelephone=function(){r.user.update({id:u.telephone.id},u.telephone).$promise.then(function(){l.success({title:"Telephone updated!",msg:u.telephone.name?u.telephone.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuser",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.telephone&&(n=_.find(u.contexts,{name:u.telephone.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","telephone","userProfileSection"],angular.module("app.staff").controller("TelephoneController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.telephones=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="telephones",b.listOrder="",b.listOrderAsc=null,b.selectedTelephones=[],b.query={fields:"createdAt,updatedAt,id,role,fullname,name,email,password,description,autointernal,internal,voicemail,transport,nat,allow,callerid,context,callgroup,pickupgroup,videosupport,encryption,phone,mobile",role:"telephone",sort:"-updatedAt",limit:10,page:1},b.arraytransport=_.keyBy([{option:"udp",value:"'udp'"},{option:"tcp",value:"'tcp'"},{option:"ws",value:"'ws'"},{option:"wss",value:"'wss'"},{option:"tls",value:"'tls'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraynat=_.keyBy([{option:"force_rport",value:"'force_rport'"},{option:"comedia",value:"'comedia'"},{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"never",value:"'never'"},{option:"route",value:"'route'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayallow=_.keyBy([{option:"ulaw",value:"'ulaw'"},{option:"alaw",value:"'alaw'"},{option:"gsm",value:"'gsm'"},{option:"g722",value:"'g722'"},{option:"g729",value:"'g729'"},{option:"opus",value:"'opus'"},{option:"h264",value:"'h264'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayvideosupport=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Always",value:"'always'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayencryption=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.staff.telephones.edit",{id:e.id,telephone:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("telephone")+"?").htmlContent("<b>"+(e.name||"telephone")+"</b> will be deleted.").ariaLabel("delete telephone").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getTelephones=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.user.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Telephones",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditTelephone=function(e,t){i.show({controller:"CreateOrEditTelephoneDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/telephones/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{telephone:t,telephones:b.telephones.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteTelephone=S,b.exportSelectedTelephones=function(){var e=angular.copy(b.selectedTelephones);return b.selectedTelephones=[],e},b.deleteSelectedTelephones=function(e){var t=i.confirm().title("Are you sure want to delete the selected telephones?").htmlContent("<b>"+b.selectedTelephones.length+" selected</b> will be deleted.").ariaLabel("delete Telephones").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedTelephones.forEach(function(e){S(e)}),b.selectedTelephones=[]})},b.deselectTelephones=function(){b.selectedTelephones=[]},b.selectAllTelephones=function(){b.selectedTelephones=b.telephones.rows};var A=!0,E=1;function y(e){b.telephones=e||{count:0,rows:[]}}function S(e){m.user.delete({id:e.id}).$promise.then(function(){_.remove(b.telephones.rows,{id:e.id}),b.telephones.count-=1,b.telephones.rows.length||b.getTelephones(),p.success({title:_.startCase("Telephone")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuser"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEuser",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getTelephones())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","telephones","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("TelephonesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="STAFF.EDIT_USERPROFILE",g.userProfile=angular.copy(l),g.userProfiles=r,g.newUserProfile=!1,g.userProfile||(g.userProfile={crudPermissions:["r"]},g.title="STAFF.NEW_USERPROFILE",g.newUserProfile=!0),g.addNewUserProfile=function(){g.errors=[],d.userProfile.save(g.userProfile).$promise.then(function(e){var t,n;n=[],(t=e).crudPermissions.forEach(function(e){var t;switch(e){case"r":t="READ_PERMISSION";break;case"e":t="EDIT_PERMISSION";break;case"d":t="DELETE_PERMISSION"}n.push(s.instant("STAFF."+t))}),t.selectedcrudPermissions=n.join(", "),g.userProfiles.unshift(e.toJSON()),o.success({title:"UserProfile properly created",msg:g.userProfile.name?g.userProfile.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.userProfile.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.userProfile.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveUserProfile=function(){g.errors=[],d.userProfile.update({id:g.userProfile.id},g.userProfile).$promise.then(function(e){var t=_.find(g.userProfiles,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"UserProfile properly saved!",msg:g.userProfile.name?g.userProfile.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.userProfile.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.userProfile.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteUserProfile=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The userProfile will be deleted.").ariaLabel("Delete UserProfile").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.userProfile.delete({id:g.userProfile.id}).$promise.then(function(){_.remove(g.userProfiles,{id:g.userProfile.id}),o.success({title:"UserProfile properly deleted!",msg:(g.userProfile.name||"userProfile")+" has been deleted!"}),v(g.userProfile)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.userProfile.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.userProfile.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","userProfiles","userProfile","api","Auth","license","setting","crudPermissions"],angular.module("app.staff").controller("CreateOrEditUserProfileDialogController",e)}(),function(){"use strict";function e(t,a,i,e,n,s,o){var r=this;function l(e){t.hide(e)}r.newUserProfile=!0,r.userProfile=angular.copy(n),r.userProfiles=s,r.title=o.instant("STAFF.CLONE_USERPROFILE"),n&&n.name&&(r.title+=": "+n.name),r.cloneUserProfile=function(){return e.userProfile.clone({id:n.id},r.userProfile).$promise.then(function(e){var t,n;n=[],(t=e).crudPermissions.forEach(function(e){var t;switch(e){case"r":t="READ_PERMISSION";break;case"e":t="EDIT_PERMISSION";break;case"d":t="DELETE_PERMISSION"}n.push(o.instant("STAFF."+t))}),t.selectedcrudPermissions=n.join(", "),r.userProfiles.unshift(e.toJSON()),i.success({title:"UserProfile properly cloned",msg:r.userProfile.name?r.userProfile.name+" has been cloned!":""}),a.go("app.staff.userProfiles.edit",{id:e.id}),l(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){r.errors=e.data.errors||[{message:e.toString(),type:"api.userProfile.clone"}];for(var t=0;t<e.data.errors.length;t+=1)i.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.userProfile.clone",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$mdDialog","$state","toasty","api","userProfile","userProfiles","$translate"],angular.module("app.staff").controller("UserProfilecloneController",e)}(),function(){"use strict";function e(n,o,r,l,d,e,t,c){var m=this;function u(e,t){switch(e.allResourcesEnabled="full"===t,t){case"full":return _.find(m.statusList,["tag","full"]);case"partial":return _.find(m.statusList,["tag","partial"]);case"disabled":return _.find(m.statusList,["tag","disabled"]);case"unlicensed":return _.find(m.statusList,["tag","unlicensed"]);case"unknown":default:return _.find(m.statusList,["tag","unknown"])}}function p(e){return l(function(t,n){var i,a;void 0!==e.channel&&_.includes(e.route,"Queue")?(a=e,l(function(t,n){var e=void 0!==a.channel&&"bull"===a.channel?"outbound":"inbound";return d[a.route].get({fields:"id,name,strategy,type",channel:"bull"===a.channel?"voice":a.channel,type:e,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})).then(function(e){t(e)}).catch(function(e){n(e)}):(i=e,l(function(a,t){switch(i.route){case"voiceExtension":var e;switch(i.title){case"InboundRoutes":e="inbound";break;case"OutboundRoutes":e="outbound";break;case"InternalRoutes":e="internal"}break;case"user":var n;switch(i.title){case"Agents":n="agent";break;case"Telephones":n="telephone";break;case"Users":n="user"}}if("Reports"===i.title){if(!i.reportType)return d.analyticDefaultReport.get({nolimit:!0}).$promise.then(function(n){d.analyticCustomReport.get({nolimit:!0}).$promise.then(function(e){var t=_.union(n.rows,e.rows);a({count:t.length,rows:t.rows})})}).catch(function(e){t(e)});switch(i.reportType){case"default":i.route="analyticDefaultReport";break;case"custom":i.route="analyticCustomReport"}}return d[i.route].get({role:n||void 0,type:e||void 0,VoiceExtensionId:e?"null":void 0,nolimit:!0}).$promise.then(function(e){a(e)}).catch(function(e){t(e)})})).then(function(e){t(e)}).catch(function(e){n(e)})})}function g(e,t,n){var a=e&&0<e.length?e[0]:null;if(!a)return n;var i,s,o=_.find(t,["sectionId",a.id]);return o?(t=_.remove(t,["sectionId",a.id]),(i=a,s=o.id,l(function(t,n){d.userProfileResource.get({sectionId:s}).$promise.then(function(t){return p(i).then(function(e){return _.differenceBy(t.rows,e.rows,"id")})}).then(function(e){_.isEmpty(e)?t():n()}).catch(function(e){n(e)})})).then(function(){return n="full",g(e.shift(),t,n)}).catch(function(e){return l.reject(e)})):void 0}function a(a){var n="Marketplace"===a.title?"AppZone":a.title;m.license?void 0===a.permissions||a.permissions.association?void 0===a.license||m.license[a.license]?d.userProfileSection.get({userProfileId:m.userProfile.id,category:n}).$promise.then(function(e){var t=e&&e.rows&&0<e.rows.length?e.rows:[];if("Dashboards"===a.title)return _.isEmpty(t)?"disabled":t[0].autoAssociation?"full":d.userProfileResource.get({sectionId:t[0].id,resourceId:101}).$promise.then(function(e){return(e&&e.rows?e.rows[0]:null)?"full":"partial"});var n=_.filter(a.children,function(e){return void 0!==e.permissions&&e.permissions.hidden?void 0:e});return t.length!==n.length?0===t.length?"disabled":"partial":_.every(t,["autoAssociation",!0])?"full":g(_.filter(n,function(e){return void 0===e.permissions||e.permissions.association?e:void 0}),t,"partial")}).then(function(e){a.status=u(a,e)}).catch(function(e){var t=e?"unknown":"partial";a.status=u(a,t),e&&c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GETRESOURCES("+n.toUpperCase()+")",msg:e.status?JSON.stringify(e.data):e.toString()})}):a.status=u(a,"unlicensed"):d.userProfileSection.get({userProfileId:m.userProfile.id,sectionId:a.id}).$promise.then(function(e){var t=(e&&1===e.rows.length?e.rows[0]:null)?"full":"disabled";a.status=u(a,t)}):a.status=u(a,"unknown")}m.userProfile={},m.license={},m.navigation=e.getNavigation(),m.modules=m.navigation[0].children,m.statusList=[{id:0,name:"Fully Enabled",color:"green-A700-bg",info:"All resources enabled",tag:"full"},{id:1,name:"Partially Enabled",color:"orange-A700-bg",info:"Some resources enabled",tag:"partial"},{id:2,name:"Disabled",color:"grey-A400-bg",info:"No resources enabled",tag:"disabled"},{id:3,name:"Unlicensed",color:"red-A700-bg",info:"Module not included in the license",tag:"unlicensed"},{id:4,name:"Unknown",color:"grey-A700-bg",info:"Unknown status",tag:"unknown"}],m.dashboardSections=[{title:"Dashboards",translate:"DASHBOARDS.DASHBOARDS",id:100}],m.init=function(e,t){m.userProfile=e,m.license=t},m.onChangeEnableAllResources=function(t){var e=void 0!==t.permissions&&!t.permissions.association,a="Marketplace"===t.title?"AppZone":t.title;if("Fully Enabled"!==t.status.name){var i=[];if(e)return i.push({category:a,sectionId:t.id,name:a,enabled:!0,crudPermissions:"red"}),d.userProfile.addSections({id:m.userProfile.id},i).$promise.then(function(){t.status=u(t,"full"),c.success({title:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_ENABLED_ALL_SUCCESS_TITLE",{sectionName:r.instant(t.translate),userProfileName:m.userProfile.name}),msg:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_ENABLED_ALL_SUCCESS_MESSAGE_NO_RESOURCES",{sectionName:r.instant(t.translate),userProfileName:m.userProfile.name})})}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USERPROFILE.ADDSECTIONS",msg:e.status?JSON.stringify(e.data):e.toString()})});var n=o.confirm({skipHide:!0}).title("Warning").textContent(r.instant("STAFF.PERMISSIONS_WARNING_ENABLE_ALL",{sectionName:r.instant(t.translate)})).ariaLabel("Warning").ok(r.instant("STAFF.CONFIRM")).cancel(r.instant("STAFF.CANCEL"));o.show(n).then(function(){switch(a){case"Dashboards":_.map(m.dashboardSections,function(e){i.push({category:a,sectionId:e.id,name:e.title,enabled:!0,autoAssociation:!0,crudPermissions:_.map(m.userProfile.crudPermissions).join("")})});break;default:_.map(t.children,function(e){var t=!(void 0===e.permissions||!e.permissions.hidden);if(!t){var n=e.title;switch(a){case"CallySquare":n="Projects"===n?"SquareProjects":n}i.push({category:a,sectionId:e.id,name:n,enabled:!0,autoAssociation:!0,crudPermissions:_.map(m.userProfile.crudPermissions).join("")})}})}return d.userProfile.addSections({id:m.userProfile.id},i).$promise.then(function(){t.status=u(t,"full"),c.success({title:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_ENABLED_ALL_SUCCESS_TITLE",{sectionName:r.instant(t.translate),userProfileName:m.userProfile.name}),msg:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_ENABLED_ALL_SUCCESS_MESSAGE",{sectionName:r.instant(t.translate),userProfileName:m.userProfile.name})})})}).catch(function(e){e?c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USERPROFILE.ADDSECTIONS",msg:e.status?JSON.stringify(e.data):e.toString()}):t.status=u(t,t.status.tag)})}else if("Fully Enabled"===t.status.name){t.status=u(t,"disabled");var s=[];switch(a){case"Settings":case"Help":s=[t.id];break;case"Dashboards":s=_.map(m.dashboardSections,function(e){return e.id});break;default:s=_.map(t.children,function(e){return e.id})}return d.userProfile.removeSections({id:m.userProfile.id,ids:s}).$promise.then(function(){c.success({title:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_DISABLED_ALL_SUCCESS_TITLE",{sectionName:r.instant(t.translate),userProfileName:m.userProfile.name}),msg:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_DISABLED_ALL_SUCCESS_MESSAGE",{sectionName:r.instant(t.translate),userProfileName:m.userProfile.name})})}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USERPROFILE.REMOVESECTIONS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},m.manageResources=function(e,t){o.show({controller:"UserProfilepermissionsmanageController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/userProfiles/edit/permissionsmanage/permissionsmanage.html",parent:angular.element(n.body),targetEvent:t,clickOutsideToClose:!1,locals:{userProfile:m.userProfile,userProfiles:[],section:e}}).then(function(){a(e)})},m.checkSectionResources=a}e.$inject=["$document","$mdDialog","$translate","$q","api","msNavigationService","Auth","toasty"],angular.module("app.staff").controller("UserProfilePermissionsController",e)}(),function(){"use strict";function e(t,n,i,o,s,e,a,r,l,d){var c=this;function m(){var a=void 0!==c.selectedSection.pending&&c.selectedSection.pending;return i(function(n,t){s.userProfileSection.get({userProfileId:c.userProfile.id,sectionId:c.selectedSection.id}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;a||(c.selectedSection.enabled=!!t&&!!t.enabled,c.selectedSection.autoAssociation=!!t&&!!t.autoAssociation,c.selectedSection.crudPermissions=v(t?t.crudPermissions:c.userProfile.crudPermissions)),n(t)}).catch(function(e){t(e)})})}function u(){return i(function(t,n){c.loadedSection?s.userProfileResource.get({sectionId:c.loadedSection.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)}):t(null)})}function p(){return i(function(t,n){void 0!==c.selectedSection.channel&&_.includes(c.selectedSection.route,"Queue")?i(function(t,n){var e=void 0!==c.selectedSection.channel&&"bull"===c.selectedSection.channel?"outbound":"inbound";return s[c.selectedSection.route].get({fields:"id,name,strategy,type",channel:"bull"===c.selectedSection.channel?"voice":c.selectedSection.channel,type:e,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){t(e)}).catch(function(e){n(e)}):i(function(t,n){var e,a;if("voiceExtension"===c.selectedSection.route)switch(c.selectedSection.title){case"InboundRoutes":e="inbound";break;case"OutboundRoutes":e="outbound";break;case"InternalRoutes":e="internal"}if("user"===c.selectedSection.route)switch(c.selectedSection.title){case"Agents":a="agent";break;case"Telephones":a="telephone";break;case"Users":a="user"}if("interval"===c.selectedSection.route)var i=!0;if("Reports"===c.selectedSection.title&&(c.selectedSection.route="default"===c.selectedSection.reportType?"analyticDefaultReport":"analyticCustomReport"),"Dashboards"!==c.selectedSection.title)return s[c.selectedSection.route].get({role:a||void 0,type:e||void 0,VoiceExtensionId:e?"null":void 0,IntervalId:i?"null":void 0,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)});t({count:1,rows:[{id:101,name:r.instant("DASHBOARDS.GENERAL")}]})}).then(function(e){t(e)}).catch(function(e){n(e)})})}function g(){var i=void 0!==c.selectedSection.pending&&c.selectedSection.pending,s=[];return u().then(function(e){var t;return s=e&&e.rows?e.rows:[],"Reports"===c.selectedSection.title&&(c.associatedReports=c.associatedReports?c.associatedReports:s,t=c.associatedReports,s=_.filter(t,{type:"default"===c.selectedSection.reportType?"DefaultReports":"CustomReports"})),void 0===c.selectedSection.permissions||c.selectedSection.permissions.association?p():{rows:[]}}).then(function(e){c.items=e.rows?_.map(e.rows,function(e){var t,n;return"Reports"===c.selectedSection.title&&(e.fullPath=(t=e.parent,n=c.treeStructure[0].text,n=function e(t,n,a){if(!a||_.isEmpty(a.children))return t;var a=_.find(a.children,function(e){return _.includes(n,e.id)?e:void 0});return t+=a?"/"+a.text:"",e(t,n,a)}(n,t,c.treeStructure[0])).replace(" ","_")),e.isValid=!0,e}):[],i||(c.selectedSection.selectedItems=_.map(s,function(e){return _.find(c.items,{id:e.resourceId})}));var t,n=_.differenceBy(c.selectedSection.selectedItems,c.items,"id");switch(_.isEmpty(n)||(c.selectedSection.selectedItems=_.pullAllBy(c.selectedSection.selectedItems,n,"id")),c.selectedSection.title){case"Contexts":c.selectedSection.selectedItems=_.filter(c.items,function(e){return e.defaultEntry?(e.isValid=!1,e):void 0!==_.find(s,{resourceId:e.id})?(e.isValid=!0,e):void 0});break;case"MusicOnHolds":c.selectedSection.selectedItems=_.filter(c.items,function(e){return e.defaultEntry?(e.isValid=!1,e):void 0!==_.find(s,{resourceId:e.id})?(e.isValid=!0,e):void 0});break;case"Reports":var a=(t=c.allReportsSelected,_.filter(t,function(e){return _.startsWith(e.parent,"default"===c.selectedSection.reportType?"motion":"custom")}));c.selectedSection.selectedItems=b(c.selectedSection.selectedItems),c.selectedSection.selectedItems=_.unionBy(c.selectedSection.selectedItems,a,"id")}c.dualMultiselectOptions.selectedItems=c.selectedSection.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.items,c.dualMultiselectOptions.selectedItems,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET"+c.selectedSection.title.toUpperCase(),msg:e.status?JSON.stringify(e.data):e.toString()})})}function v(e){return e&&(c.selectedSection.allowEdit=!!_.includes(e,"e"),c.selectedSection.allowDelete=!!_.includes(e,"d")),function(){var e=["r"];if(c.selectedSection.allowEdit)e.push("e");else{var t=_.indexOf(e,["e"]);0<t&&c.selectedSection.crudPermissions.replace("e","")}if(c.selectedSection.allowDelete)e.push("d");else{var t=_.indexOf(e,["d"]);0<t&&c.selectedSection.crudPermissions.replace("d","")}return e}()}function h(e){var t=_.findIndex(c.subsections,function(e){return e.id==c.selectedSection.id});c.subsections[t].pending=e,f()}function f(){return c.pendingChanges=_.some(c.subsections,["pending",!0])}function b(e){return _.remove(e,function(e){return _.startsWith(e.parent,"default"===c.selectedSection.reportType?"motion":"custom")})}function A(){_.isEmpty(c.selectedSection.selectedItems)?c.allReportsSelected=_.remove(c.allReportsSelected,function(e){return e.type===("default"===c.selectedSection.reportType?"CustomReports":"DefaultReports")}):c.selectedSection.selectedItems.forEach(function(e){_.some(c.allReportsSelected,{id:e.id,parent:e.parent})||c.allReportsSelected.push(e)})}c.userProfile=e,c.penalty=0,c.section=angular.copy(d),c.title=r.instant("STAFF.PERMISSIONS_SECTION_TITLE",{sectionName:r.instant(c.section.translate)}),c.items=[],c.selectedItems=[],c.subsections=_.filter(c.section.children,function(e){return void 0!==e.permissions&&e.permissions.hidden?void 0:e}),c.dashboardSections=[{title:"Dashboards",translate:"DASHBOARDS.DASHBOARDS",id:100}],c.dashboardItems=[],"Dashboards"===c.section.title&&(c.dashboardItems=c.subsections,c.subsections=c.dashboardSections),c.selectedSection=null,c.loadedSection=null,c.allReportsSelected=[],c.closeDialog=function(e){if(c.pendingChanges){var t=n.confirm({skipHide:!0}).title("Warning").textContent(r.instant("STAFF.PERMISSIONS_WARNING_CLOSE")).ariaLabel("Warning").targetEvent(e).ok(r.instant("STAFF.CLOSE")).cancel(r.instant("STAFF.CANCEL"));n.show(t).then(function(){n.hide()})}else n.hide()},c.onChangeSection=function(){return m().then(function(e){if(c.loadedSection=e,"Reports"===c.selectedSection.title)return i(function(t,n){s.analyticTreeReport.get({}).$promise.then(function(e){c.treeReports=e.rows||[],t(c.treeReports)}).catch(function(e){n(e)})}).then(function(){if(!c.selectedSection.reportType)return u().then(function(e){c.allReportsSelected=e?_.map(e.rows,function(e){return{id:e.resourceId,name:e.name,type:e.type}}):[]})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TREE_REPORT_STRUCTURE",msg:e.data?JSON.stringify(e.data):e.toString()})});g()}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET"+c.selectedSection.title.toUpperCase(),msg:e.status?JSON.stringify(e.data):e.toString()})})},c.onChangeVisibility=function(){c.selectedSection.enabled=!c.selectedSection.enabled,h(!0)},c.onChangeAutoAssociation=function(){if(!c.selectedSection.autoAssociation){for(var e=[],t=0;t<c.dualMultiselectOptions.items.length;t++)e.push(c.dualMultiselectOptions.items[t]),c.dualMultiselectOptions.selectedItems.push(c.dualMultiselectOptions.items[t]);c.dualMultiselectOptions.items=[],c.dualMultiselectOptions.transferCallback(e,!1)}h(!0)},c.onChangeReportType=function(){c.treeStructure="default"===c.selectedSection.reportType?c.treeReports[0]?angular.fromJson(c.treeReports[0].tree):[]:c.treeReports[1]?angular.fromJson(c.treeReports[1].tree):[],c.selectedSection.selectedItems&&(c.allReportsSelected=b(c.allReportsSelected),A());g()},c.setPermission=function(e){"edit"===e?c.selectedSection.allowEdit=!c.selectedSection.allowEdit:"delete"===e&&(c.selectedSection.allowDelete=!c.selectedSection.allowDelete);c.selectedSection.crudPermissions=v(),h(!0)},c.saveSection=function(){var a="Marketplace"===c.section.title?"AppZone":c.section.title,e=_(c.subsections).filter({pending:!0}).map(function(e){var t="CallySquare"===a&&"Projects"===e.title?"SquareProjects":e.title,n="Reports"===t?c.allReportsSelected:e.selectedItems;return"Integrations"===a&&(e.autoAssociation=!0),{category:a,sectionId:e.id,name:t,enabled:e.enabled,autoAssociation:e.autoAssociation,crudPermissions:_.map(e.crudPermissions).join(""),Resources:_.map(n,function(e){return{name:e.name,resourceId:e.id,type:function(e,t){if("Reports"!==e)return e;{if(t.parent){var n=_.startsWith(t.parent,"motion")?"Default":"Custom";return n+e}return t.type}}(t,e)}})}}).value();return s.userProfile.addSections({id:c.userProfile.id},e).$promise.then(function(){c.subsections.forEach(function(e){e.pending=void 0}),c.associatedReports=null,f(),"Reports"!==c.selectedSection.title||c.selectedSection.reportType||t.userProfileForm.$setPristine(),o.success({title:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_SAVED_SUCCESS_TITLE",{sectionName:r.instant(a.translate)}),msg:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_SAVED_SUCCESS_MESSAGE")})}).then(function(){return m().then(function(e){c.loadedSection=e})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USERPROFILE.ADDSECTIONS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.dualMultiselectOptions={readOnly:!1,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",line4:"fullPath",labelAll:r.instant("STAFF.PERMISSIONS_ALL_RESOURCES"),labelSelected:r.instant("STAFF.PERMISSIONS_SELECTED_RESOURCES"),labelSearch:r.instant("STAFF.PERMISSIONS_PLACEHOLDER_SEARCH"),transferCallback:function(e,t){h(!0),t?(c.selectedSection.selectedItems=_.pullAllBy(c.selectedSection.selectedItems,e,"id"),c.selectedSection.autoAssociation=!1):c.selectedSection.selectedItems=_.unionBy(c.selectedSection.selectedItems,e,"id"),"Reports"===c.selectedSection.title&&A()}}}e.$inject=["$scope","$mdDialog","$q","toasty","api","userProfile","userProfiles","$translate","Auth","section"],angular.module("app.staff").controller("UserProfilepermissionsmanageController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.userProfile=c||e.params.userProfile||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.permissionsmanagedialog=function(e,t){n.show({controller:"UserProfilepermissionsmanageController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/userProfiles/edit/permissionsmanage/permissionsmanage.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{userProfile:e,userProfiles:u.userProfiles?u.userProfiles.rows:[],crudPermissions:u.crudPermissions}})},u.clonedialog=function(e,t){n.show({controller:"UserProfilecloneController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/userProfiles/edit/clone/clone.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{userProfile:e,userProfiles:u.userProfiles?u.userProfiles.rows:[],crudPermissions:u.crudPermissions}})},u.alert=l.info,u.gotoUserProfiles=function(){e.go("app.staff.userProfiles")},u.saveUserProfile=function(){r.userProfile.update({id:u.userProfile.id},u.userProfile).$promise.then(function(){l.success({title:"UserProfile updated!",msg:u.userProfile.name?u.userProfile.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuserProfile",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","userProfile","userProfileSection"],angular.module("app.staff").controller("UserProfileController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.userProfiles=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="userProfiles",b.listOrder="",b.listOrderAsc=null,b.selectedUserProfiles=[],b.query={fields:"createdAt,updatedAt,id,name,description,crudPermissions",sort:"-updatedAt",limit:10,page:1},b.arraycrudPermissions=_.keyBy([{option:"Read_permission",value:"'r'",disabled:!0},{option:"Edit_permission",value:"'e'"},{option:"Delete_permission",value:"'d'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.userProfiles&&0<b.userProfiles.count&&b.userProfiles.rows.forEach(function(e){var t=[];e.crudPermissions.forEach(function(e){t.push(b.arraycrudPermissions[e].option)});var n=[];t.forEach(function(e){n.push(r.instant("STAFF."+e.toUpperCase()))}),e.selectedcrudPermissions=n.join(", ")}),b.editstate=function(e,t){n.go("app.staff.userProfiles.edit",{id:e.id,userProfile:e,crudPermissions:b.crudPermissions})},b.clonedialog=function(e,t){i.show({controller:"UserProfilecloneController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/userProfiles/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{userProfile:e,userProfiles:b.userProfiles?b.userProfiles.rows:[],crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("userProfile")+"?").htmlContent("<b>"+(e.name||"userProfile")+"</b> will be deleted.").ariaLabel("delete userProfile").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getUserProfiles=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.userProfile.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="UserProfiles",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditUserProfile=function(e,t){i.show({controller:"CreateOrEditUserProfileDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/userProfiles/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{userProfile:t,userProfiles:b.userProfiles.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteUserProfile=S,b.exportSelectedUserProfiles=function(){var e=angular.copy(b.selectedUserProfiles);return b.selectedUserProfiles=[],e},b.deleteSelectedUserProfiles=function(e){var t=i.confirm().title("Are you sure want to delete the selected userProfiles?").htmlContent("<b>"+b.selectedUserProfiles.length+" selected</b> will be deleted.").ariaLabel("delete UserProfiles").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedUserProfiles.forEach(function(e){S(e)}),b.selectedUserProfiles=[]})},b.deselectUserProfiles=function(){b.selectedUserProfiles=[]},b.selectAllUserProfiles=function(){b.selectedUserProfiles=b.userProfiles.rows};var A=!0,E=1;function y(e){b.userProfiles=e||{count:0,rows:[]}}function S(e){m.userProfile.delete({id:e.id}).$promise.then(function(){_.remove(b.userProfiles.rows,{id:e.id}),b.userProfiles.count-=1,b.userProfiles.rows.length||b.getUserProfiles(),p.success({title:_.startCase("UserProfile")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuserProfile"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEuserProfile",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getUserProfiles())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","userProfiles","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("UserProfilesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="STAFF.EDIT_USER",g.user=angular.copy(l),g.users=r,g.newUser=!1,g.user||(g.user={role:"user",autointernal:!0,context:"from-sip"},g.title="STAFF.NEW_USER",g.newUser=!0),g.addNewUser=function(){g.errors=[],d.user.save(g.user).$promise.then(function(e){g.users.unshift(e.toJSON()),o.success({title:"User properly created",msg:g.user.name?g.user.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveUser=function(){g.errors=[],d.user.update({id:g.user.id},g.user).$promise.then(function(e){var t=_.find(g.users,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"User properly saved!",msg:g.user.name?g.user.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteUser=function(e){if(c.getCurrentUser().id===g.user.id)return o.error({title:"User not deleted!",msg:"You can't remove yourself"});g.errors=[];var t=a.confirm().title("Are you sure?").content("The user will be deleted.").ariaLabel("Delete User").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.user.delete({id:g.user.id}).$promise.then(function(){_.remove(g.users,{id:g.user.id}),o.success({title:"User properly deleted!",msg:(g.user.name||"user")+" has been deleted!"}),v(g.user)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,d.userProfile.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.userProfiles=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERPROFILES",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","users","user","api","Auth","license","setting","crudPermissions"],angular.module("app.staff").controller("CreateOrEditUserDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;function o(){e.hide()}s.currentUser=i.getCurrentUser(),s.errors=[],s.user=a,s.generateApiKey=function(){s.errors=[],n.user.createApiKey({id:s.user.id}).$promise.then(function(e){s.user.apiKey=e.api_key||"N/A",t.success({title:"User API key updated!"}),o()}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.createApiKey",msg:e.data?JSON.stringify(e.data.message):e.toString()}),s.errors=e.data.errors||[{message:e.toString(),type:"api.user.createApiKey"}]})},s.removeApiKey=function(){s.errors=[],n.user.removeApiKey({id:s.user.id}).$promise.then(function(){s.user.apiKey="N/A",t.success({title:"User API key removed!"}),o()}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.removeApiKey",msg:e.data?JSON.stringify(e.data.message):e.toString()}),s.errors=e.data.errors||[{message:e.toString(),type:"api.user.removeApiKey"}]})},s.closeDialog=o}e.$inject=["$mdDialog","toasty","api","user","Auth"],angular.module("app.staff").controller("UserapikeymanagerController",e)}(),function(){"use strict";function e(e,a){var i=this;i.user={},i.crudPermissions,i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.user.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.user.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e,t){i.user=angular.copy(e),i.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.ngFlowOptions.target="api/users/"+i.user.id+"/avatar",i.user.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.staff").controller("Userchange_avatarController",e)}(),function(){"use strict";function e(n,e,t,a,i,s,o){var r=this;function l(){e.hide()}r.currentUser=o.getCurrentUser(),r.errors=[],r.setting=s,r.passwordPattern=r.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",r.user=i,r.password="",r.oldPassword="",r.savePassword=function(){r.errors=[];var e={id:r.user.id,newPassword:r.password};r.currentUser.id==r.user.id&&(e.oldPassword=r.oldPassword);a.user.changePassword(e).$promise.then(function(){t.success({title:"User password properly updated!"}),l()}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.save",msg:e.data?JSON.stringify(e.data.message):e.toString()}),r.errors=e.data.errors||[{message:e.toString(),type:"api.user.changePassword"}]})},r.closeDialog=l,n.$watch("vm.password",function(e,t){_.isNil(r.oldPassword)||(e===r.oldPassword?n.userForm.password.$setValidity("oldPasswordMatch",!1):n.userForm.password.$setValidity("oldPasswordMatch",!0))})}e.$inject=["$scope","$mdDialog","toasty","api","user","setting","Auth"],angular.module("app.staff").controller("UserchangepasswordController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.user=c||e.params.user||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.apikeymanagerdialog=function(e,t){n.show({controller:"UserapikeymanagerController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/edit/apikeymanager/apikeymanager.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{user:e,users:u.users?u.users.rows:[],crudPermissions:u.crudPermissions}})},u.changepassworddialog=function(e,t){n.show({controller:"UserchangepasswordController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/edit/changepassword/changepassword.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{user:e,setting:o,users:u.users?u.users.rows:[],crudPermissions:u.crudPermissions}})},u.alert=l.info,u.gotoUsers=function(){e.go("app.staff.users")},u.saveUser=function(){u.user=_.omit(u.user,"userpic"),r.user.update({id:u.user.id},u.user).$promise.then(function(){l.success({title:"User updated!",msg:u.user.name?u.user.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuser",msg:e.data?JSON.stringify(e.data):e.toString()})})},r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),r.userProfile.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.userProfiles=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERPROFILES",msg:e.data?JSON.stringify(e.data):e.toString()})}),r.user.getApiKey({id:u.user.id}).$promise.then(function(e){u.user.apiKey=e.api_key?e.api_key:"N/A"}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_APIKEY",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","user","userProfileSection"],angular.module("app.staff").controller("UserController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.users=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="users",b.listOrder="",b.listOrderAsc=null,b.selectedUsers=[],b.query={fields:"createdAt,updatedAt,role,userProfileId,id,fullname,name,email,phone,mobile,userpic,password,description,autointernal,internal,transport,nat,allow,context,callgroup,pickupgroup,passwordResetAt,apiKey,videosupport,disabled,blocked",role:"admin,user",sort:"-updatedAt",limit:10,page:1},b.arrayrole=_.keyBy([{option:"Admin",value:"'admin'"},{option:"User",value:"'user'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytransport=_.keyBy([{option:"udp",value:"'udp'"},{option:"tcp",value:"'tcp'"},{option:"ws",value:"'ws'"},{option:"wss",value:"'wss'"},{option:"tls",value:"'tls'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraynat=_.keyBy([{option:"force_rport",value:"'force_rport'"},{option:"comedia",value:"'comedia'"},{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"never",value:"'never'"},{option:"route",value:"'route'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayallow=_.keyBy([{option:"ulaw",value:"'ulaw'"},{option:"alaw",value:"'alaw'"},{option:"gsm",value:"'gsm'"},{option:"g722",value:"'g722'"},{option:"g729",value:"'g729'"},{option:"opus",value:"'opus'"},{option:"h264",value:"'h264'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayvideosupport=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Always",value:"'always'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.staff.users.edit",{id:e.id,user:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("user")+"?").htmlContent("<b>"+(e.name||"user")+"</b> will be deleted.").ariaLabel("delete user").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getUsers=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.user.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Users",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditUser=function(e,t){i.show({controller:"CreateOrEditUserDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{user:t,users:b.users.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteUser=S,b.exportSelectedUsers=function(){var e=angular.copy(b.selectedUsers);return b.selectedUsers=[],e},b.deleteSelectedUsers=function(e){var t=i.confirm().title("Are you sure want to delete the selected users?").htmlContent("<b>"+b.selectedUsers.length+" selected</b> will be deleted.").ariaLabel("delete Users").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedUsers.forEach(function(e){S(e)}),b.selectedUsers=[]})},b.deselectUsers=function(){b.selectedUsers=[]},b.selectAllUsers=function(){b.selectedUsers=b.users.rows},m.userProfile.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.userProfiles=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERPROFILES",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.users=e||{count:0,rows:[]}}function S(e){m.user.delete({id:e.id}).$promise.then(function(){_.remove(b.users.rows,{id:e.id}),b.users.count-=1,b.users.rows.length||b.getUsers(),p.success({title:_.startCase("User")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuser"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEuser",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getUsers())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","users","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("UsersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.cannedAnswers=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="cannedAnswers",b.listOrder="",b.listOrderAsc=null,b.selectedCannedAnswers=[],b.query={fields:"createdAt,updatedAt,id,key,value,description",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/cannedAnswers/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{cannedAnswer:e,cannedAnswers:b.cannedAnswers.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("cannedAnswer")+"?").htmlContent("<b>"+(e.name||"cannedAnswer")+"</b> will be deleted.").ariaLabel("delete cannedAnswer").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getCannedAnswers=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.cannedAnswer.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="CannedAnswers",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditCannedAnswer=function(e,t){i.show({controller:"CreateOrEditCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/cannedAnswers/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{cannedAnswer:t,cannedAnswers:b.cannedAnswers.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteCannedAnswer=S,b.exportSelectedCannedAnswers=function(){var e=angular.copy(b.selectedCannedAnswers);return b.selectedCannedAnswers=[],e},b.deleteSelectedCannedAnswers=function(e){var t=i.confirm().title("Are you sure want to delete the selected cannedAnswers?").htmlContent("<b>"+b.selectedCannedAnswers.length+" selected</b> will be deleted.").ariaLabel("delete CannedAnswers").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedCannedAnswers.forEach(function(e){S(e)}),b.selectedCannedAnswers=[]})},b.deselectCannedAnswers=function(){b.selectedCannedAnswers=[]},b.selectAllCannedAnswers=function(){b.selectedCannedAnswers=b.cannedAnswers.rows};var A=!0,E=1;function y(e){b.cannedAnswers=e||{count:0,rows:[]}}function S(e){m.cannedAnswer.delete({id:e.id}).$promise.then(function(){_.remove(b.cannedAnswers.rows,{id:e.id}),b.cannedAnswers.count-=1,b.cannedAnswers.rows.length||b.getCannedAnswers(),p.success({title:_.startCase("CannedAnswer")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcannedAnswer"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEcannedAnswer",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getCannedAnswers())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","cannedAnswers","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("CannedAnswersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_CANNEDANSWER",g.cannedAnswer=angular.copy(l),g.cannedAnswers=r,g.newCannedAnswer=!1,g.cannedAnswer||(g.cannedAnswer={},g.title="TOOLS.NEW_CANNEDANSWER",g.newCannedAnswer=!0),g.addNewCannedAnswer=function(){g.errors=[],d.cannedAnswer.save(g.cannedAnswer).$promise.then(function(e){g.cannedAnswers.unshift(e.toJSON()),o.success({title:"CannedAnswer properly created",msg:g.cannedAnswer.name?g.cannedAnswer.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveCannedAnswer=function(){g.errors=[],d.cannedAnswer.update({id:g.cannedAnswer.id},g.cannedAnswer).$promise.then(function(e){var t=_.find(g.cannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"CannedAnswer properly saved!",msg:g.cannedAnswer.name?g.cannedAnswer.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteCannedAnswer=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The cannedAnswer will be deleted.").ariaLabel("Delete CannedAnswer").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cannedAnswer.delete({id:g.cannedAnswer.id}).$promise.then(function(){_.remove(g.cannedAnswers,{id:g.cannedAnswer.id}),o.success({title:"CannedAnswer properly deleted!",msg:(g.cannedAnswer.name||"cannedAnswer")+" has been deleted!"}),v(g.cannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","cannedAnswers","cannedAnswer","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_CUSTOMDASHBOARD",g.customDashboard=angular.copy(l),g.customDashboards=r,g.newCustomDashboard=!1,g.customDashboard||(g.customDashboard={},g.title="TOOLS.NEW_CUSTOMDASHBOARD",g.newCustomDashboard=!0),g.addNewCustomDashboard=function(){g.errors=[],d.dashboard.save(g.customDashboard).$promise.then(function(e){g.customDashboards.unshift(e.toJSON()),o.success({title:"CustomDashboard properly created",msg:g.customDashboard.name?g.customDashboard.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.dashboard.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboard.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveCustomDashboard=function(){g.errors=[],d.dashboard.update({id:g.customDashboard.id},g.customDashboard).$promise.then(function(e){var t=_.find(g.customDashboards,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"CustomDashboard properly saved!",msg:g.customDashboard.name?g.customDashboard.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.dashboard.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboard.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteCustomDashboard=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The customDashboard will be deleted.").ariaLabel("Delete CustomDashboard").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.dashboard.delete({id:g.customDashboard.id}).$promise.then(function(){_.remove(g.customDashboards,{id:g.customDashboard.id}),o.success({title:"CustomDashboard properly deleted!",msg:(g.customDashboard.name||"customDashboard")+" has been deleted!"}),v(g.customDashboard)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.dashboard.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboard.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","customDashboards","customDashboard","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditCustomDashboardDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.customDashboards=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="customDashboards",b.listOrder="",b.listOrderAsc=null,b.selectedCustomDashboards=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},b.editstate=function(e,t){n.go("app.tools.customDashboards.edit",{id:e.id,customDashboard:e,crudPermissions:b.crudPermissions})},b.clonedialog=function(e,t){i.show({controller:"CustomDashboardcloneController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{customDashboard:e,customDashboards:b.customDashboards?b.customDashboards.rows:[],crudPermissions:b.crudPermissions}})},b.gotodashboardgoto=function(e,t){n.go("app.dashboards.custom",{id:e.id})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("customDashboard")+"?").htmlContent("<b>"+(e.name||"customDashboard")+"</b> will be deleted.").ariaLabel("delete customDashboard").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getCustomDashboards=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.dashboard.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="CustomDashboards",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditCustomDashboard=function(e,t){i.show({controller:"CreateOrEditCustomDashboardDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{customDashboard:t,customDashboards:b.customDashboards.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteCustomDashboard=S,b.exportSelectedCustomDashboards=function(){var e=angular.copy(b.selectedCustomDashboards);return b.selectedCustomDashboards=[],e},b.deleteSelectedCustomDashboards=function(e){var t=i.confirm().title("Are you sure want to delete the selected customDashboards?").htmlContent("<b>"+b.selectedCustomDashboards.length+" selected</b> will be deleted.").ariaLabel("delete CustomDashboards").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedCustomDashboards.forEach(function(e){S(e)}),b.selectedCustomDashboards=[]})},b.deselectCustomDashboards=function(){b.selectedCustomDashboards=[]},b.selectAllCustomDashboards=function(){b.selectedCustomDashboards=b.customDashboards.rows};var A=!0,E=1;function y(e){b.customDashboards=e||{count:0,rows:[]}}function S(e){m.dashboard.delete({id:e.id}).$promise.then(function(){_.remove(b.customDashboards.rows,{id:e.id}),b.customDashboards.count-=1,b.customDashboards.rows.length||b.getCustomDashboards(),p.success({title:_.startCase("CustomDashboard")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEdashboard"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEdashboard",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getCustomDashboards())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","customDashboards","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("CustomDashboardsController",e)}(),function(){"use strict";function e(t,n,a,e,i,s,o){var r=this;function l(e){t.hide(e)}r.newCustomDashboard=!0,r.customDashboard=angular.copy(i),r.customDashboards=s,r.title=o.instant("TOOLS.CLONE_CUSTOMDASHBOARD"),i&&i.name&&(r.title+=": "+i.name),r.cloneCustomDashboard=function(){return e.dashboard.clone({id:i.id,includeAll:!0},r.customDashboard).$promise.then(function(e){r.customDashboards.unshift(e.toJSON()),a.success({title:"CustomDashboard properly cloned",msg:r.customDashboard.name?r.customDashboard.name+" has been cloned!":""}),n.go("app.tools.customDashboards.edit",{id:e.id}),l(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){r.errors=e.data.errors||[{message:e.toString(),type:"api.dashboard.clone"}];for(var t=0;t<e.data.errors.length;t+=1)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboard.clone",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$mdDialog","$state","toasty","api","customDashboard","customDashboards","$translate"],angular.module("app.tools").controller("CustomDashboardcloneController",e)}(),function(){"use strict";function e(n,a,e,i,s){var o=this;function r(e,t,n){return s.dashboardItem.update(n).$promise.catch(function(e){console.error(e)})}o.customDashboard={},o.voiceQueues=s.rpc.getVoiceQueues({fields:"id,name"}),o.init=function(e,t){return o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},o.customDashboard=e,o.customDashboard.draggable={enabled:!0,handle:".draggable",stop:r},o.customDashboard.resizable={enabled:!0,handle:".resizable",stop:r},o.customDashboard.widgets=[],s.dashboard.getItems({id:e.id}).$promise.then(function(e){if(e&&e.count&&e.rows)for(var t=0;t<e.rows.length;t+=1)e.rows[t].voiceQueues=o.voiceQueues,e.rows[t].voiceQueuesSelected=_.map(o.voiceQueues.rows,"id"),e.rows[t].templateUrl="app/core/directives/ms-widget-engine/ms-widget-engine-"+e.rows[t].type+"/ms-widget-engine."+e.rows[t].type+".html",o.customDashboard.widgets.push(e.rows[t])}).catch(function(e){console.error(e)})},o.createOrEditWidget=function(e){if(e&&e.attrs)for(var t=0;t<e.attrs.length;t+=1)"attrReport"===e.attrs[t].name&&(e.reportType=e.attrs[t].type),e[e.attrs[t].name]=e.attrs[t].value;n.show({controller:"CreateOrEditDashboardItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/edit/dashboard/dialog.html",parent:angular.element(a.body),clickOutsideToClose:!0,locals:{dashboarditem:e,dashboard:o.customDashboard.widgets,license:null,setting:null,crudPermissions:o.crudPermissions}}).then(function(e){if(e)for(var t=0;t<o.customDashboard.widgets.length;t+=1)o.customDashboard.widgets[t].id===e.id&&(o.customDashboard.widgets[t].attrs=e.attrs,o.customDashboard.widgets[t].voiceQueues=o.voiceQueues,o.customDashboard.widgets[t].voiceQueuesSelected=_.map(o.voiceQueues.rows,"id"),o.customDashboard.widgets[t].templateUrl="app/core/directives/ms-widget-engine/ms-widget-engine-"+o.customDashboard.widgets[t].type+"/ms-widget-engine."+o.customDashboard.widgets[t].type+".html")})},o.deleteWidget=function(t){var e=n.confirm().title("Would you like to delete "+t.title+"?").textContent("").ariaLabel("Delete Widget").ok("YES").cancel("NO");n.show(e).then(function(){return s.dashboardItem.delete({id:t.id}).$promise.then(function(e){_.remove(o.customDashboard.widgets,{id:t.id}),i.success({title:"Widget deleted!",msg:t.name?t.name+" has been deleted!":"Widget has been deleted!"})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){o.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETE.customDashboard"}];for(var t=0;t<e.data.errors.length;t++)i.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEdashboard",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()});console.error(e)})})}}e.$inject=["$mdDialog","$document","socket","toasty","api"],angular.module("app.tools").controller("CustomDashboardItemsController",e)}(),function(){"use strict";function e(t,e,n,a,o,i,s,r,l,d,c,m,u,p){var g=this;g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_DASHBOARDITEM",g.dashboarditem=angular.copy(l),g.dashboard=r,g.newDashboardItem=!1,g.selectedReport=[],g.query={fields:"createdAt,updatedAt,id,name,description,table,parent,conditions,joins",limit:10,page:1,sort:"-updatedAt"},g.dashboarditem?"web-report"==g.dashboarditem.type&&(g.apiName="custom"===g.dashboarditem.reportType?"analyticCustomReport":"analyticDefaultReport",d[g.apiName].get({fields:"id,name,parent"}).$promise.then(function(e){g.currentReport=_.find(e.rows,{id:g.dashboarditem.attrReport}),g.dashboarditem.report=g.currentReport.name,g.query.parent=g.currentReport.parent})):(g.dashboarditem={type:"counter",attrUrl:"https://",attrHourFormat:"HH:mm:ss",attrTimezone:"0.00",attrMetric:"total",attrSerie1:"total",attrSerie2:"null",attrSerie3:"null",attrRefresh:10,attrFontSize:20,foreground:"#2196f3",background:"#ffffff"},g.title="TOOLS.NEW_DASHBOARDITEM",g.newDashboardItem=!0),g.addNewDashboardItem=function(){g.errors=[],d.dashboard.addItem({id:e.params.id},g.dashboarditem).$promise.then(function(e){g.dashboard.unshift(e.toJSON()),s.success({title:"DashboardItem properly created",msg:g.dashboarditem.name?g.dashboarditem.name+" has been created!":""}),I(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.dashboardItem.save"}];for(var t=0;t<e.data.errors.length;t+=1)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboardItem.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveDashboardItem=function(){g.errors=[],d.dashboardItem.update({id:g.dashboarditem.id},g.dashboarditem).$promise.then(function(e){var t=_.find(g.dashboard,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),s.success({title:"DashboardItem properly saved!",msg:g.dashboarditem.name?g.dashboarditem.name+" has been saved!":""}),I(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.dashboardItem.update"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboardItem.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteDashboardItem=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The dashboarditem will be deleted.").ariaLabel("Delete DashboardItem").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.dashboardItem.delete({id:g.dashboarditem.id}).$promise.then(function(){_.remove(g.dashboard,{id:g.dashboarditem.id}),s.success({title:"DashboardItem properly deleted!",msg:(g.dashboarditem.name||"dashboarditem")+" has been deleted!"}),I(g.dashboarditem)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.dashboardItem.delete"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboardItem.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.getReports=S,g.selectReport=function(){if(g.dashboarditem.report=g.selectedReport[0].name,g.dashboarditem.attrReport=g.selectedReport[0].id,g.dashboarditem.reportType=g.currentNode.custom?"custom":"default",!g.newDashboardItem){var e={name:"attrReport",type:g.dashboarditem.reportType,value:g.selectedReport[0].id};g.dashboarditem.attrs.splice(_.findIndex(g.dashboarditem.attrs,1,e))}t.dashboarditemForm.report.$setDirty(),a.hide()},g.closeReportDialog=function(){a.hide()},g.searchReport=function(){g.treeDefaultData=g.treeReports[0]?angular.fromJson(g.treeReports[0].tree):[],g.treeCustomData=g.treeReports[1]?angular.fromJson(g.treeReports[1].tree):[],g.treeConfig=(t={core:{multiple:!1,animation:!0,error:function(e){console.error("treeCtrl: error from js tree - "+angular.toJson(e))},check_callback:!0,worker:!0},version:1,plugins:["wholerow"]},"admin"!==g.currentUser.role?d.userProfileSection.get({fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:g.currentUser.userProfileId,sectionId:1203}).$promise.then(function(e){return g.userProfileSection=e&&1==e.count?e.rows[0]:null,t}).catch(function(e){s.error({title:"ERROR",msg:e.message})}):t),g.treeDefaultEvents=f(!1),g.treeCustomEvents=f(!0),a.show({controller:function(){return g},controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/partialViews/reports/treeReports.html",autoWrap:!0,skipHide:!0});var t},g.closeDialog=I,d.analyticTreeReport.get({}).$promise.then(function(e){g.treeReports=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TREEREPORTS",msg:e.data?JSON.stringify(e.data):e.toString()})});var v=[{id:401,type:"inbound"},{id:1501,type:"outbound"}],h=null;function f(e){return e?{loaded:E,select_node:b}:{loaded:y,select_node:A}}function b(e,t){g.treeDefaultInstance.jstree(!0).deselect_all(),g.treeDefaultInstance.jstree(!0).close_all(),g.currentNode=t.node,g.currentNode.custom=!0,g.currentPath=g.treeCustomInstance.jstree(!0).get_path(g.currentNode).join("/ "),g.apiName="analyticCustomReport",g.query.parent=t.node.id,S()}function A(e,t){g.treeCustomInstance.jstree(!0).deselect_all(),g.treeCustomInstance.jstree(!0).close_all(),g.currentNode=t.node,g.currentNode.custom=!1,g.currentPath=g.treeDefaultInstance.jstree(!0).get_path(g.currentNode).join("/ "),g.apiName="analyticDefaultReport",g.query.parent=t.node.id,S()}function E(){if(!g.newDashboardItem&&"analyticCustomReport"===g.apiName){var e=g.treeCustomInstance.jstree(!0).get_node(g.query.parent);b(0,{node:e,selected:e.id})}}function y(){if(!g.newDashboardItem&&"analyticDefaultReport"===g.apiName){var e=g.treeDefaultInstance.jstree(!0).get_node(g.query.parent);A(0,{node:e,selected:e.id})}}function S(){if(g.query.offset=(g.query.page-1)*g.query.limit,g.apiName)if("admin"===g.currentUser.role)g.promise=d[g.apiName].get(g.query,T).$promise;else{if(!g.userProfileSection)return T(null);if(g.userProfileSection.autoAssociation)g.promise=d[g.apiName].get(g.query,T).$promise;else{var a=[];g.promise=d[g.apiName].get(g.query).$promise.then(function(e){return 0<(a=e&&e.rows?e.rows:[]).length?d.userProfileResource.get({sectionId:g.userProfileSection.id,type:"analyticDefaultReport"===g.apiName?"DefaultReports":"CustomReports"}).$promise.then(function(e){var t=e&&e.rows?e.rows:[];if(0<t.length){var n=[];return a.forEach(function(e){_.find(t,["resourceId",e.id])&&n.push(e)}),T({count:n.length,rows:n})}return T(null)}):T(null)}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_REPORTS",msg:e.data?JSON.stringify(e.data):e.toString()})})}}}function T(e){g.reports=e||{count:0,rows:[]},g.newDashboardItem||g.selectedReport.push(_.find(g.reports.rows,{id:g.currentReport.id}))}function I(e){a.hide(e)}c.hasRole("admin")?d.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){g.voiceQueues=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VOICEQUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){h=e.rows||[]}).then(function(){for(var e=[],t=0;t<v.length;t++)e.push(d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:v[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<v.length;a++){var i=_.find(t,["sectionId",v[a].id]);if(i)if(i.autoAssociation){var s=[];h.forEach(function(e){e.type===v[a].type&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(d.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;g.dashboarditem&&(n=_.find(h,{id:Number(g.dashboarditem.attrVoiceQueues)}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&h.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),g.voiceQueues=t}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","dashboard","dashboarditem","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditDashboardItemDialogController",e)}(),function(){"use strict";function e(n,e,a,i,t,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.customDashboard=c||n.params.customDashboard||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.clonedialog=function(e,t){a.show({controller:"CustomDashboardcloneController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/edit/clone/clone.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{customDashboard:e,customDashboards:u.customDashboards?u.customDashboards.rows:[],crudPermissions:u.crudPermissions}})},u.gotogoto=function(e,t){n.go("app.dashboards.custom",{id:e.id})},u.alert=l.info,u.gotoCustomDashboards=function(){n.go("app.tools.customDashboards")},u.saveCustomDashboard=function(){r.dashboard.update({id:u.customDashboard.id},u.customDashboard).$promise.then(function(){l.success({title:"CustomDashboard updated!",msg:u.customDashboard.name?u.customDashboard.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdashboard",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","customDashboard","userProfileSection"],angular.module("app.tools").controller("CustomDashboardController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_DISPOSITION",g.disposition=angular.copy(l),g.dispositions=r,g.newDisposition=!1,g.disposition||(g.disposition={},g.title="TOOLS.NEW_DISPOSITION",g.newDisposition=!0),g.addNewDisposition=function(){g.errors=[],d.disposition.save(g.disposition).$promise.then(function(e){g.dispositions.unshift(e.toJSON()),o.success({title:"Disposition properly created",msg:g.disposition.name?g.disposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveDisposition=function(){g.errors=[],d.disposition.update({id:g.disposition.id},g.disposition).$promise.then(function(e){var t=_.find(g.dispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Disposition properly saved!",msg:g.disposition.name?g.disposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The disposition will be deleted.").ariaLabel("Delete Disposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.disposition.id}).$promise.then(function(){_.remove(g.dispositions,{id:g.disposition.id}),o.success({title:"Disposition properly deleted!",msg:(g.disposition.name||"disposition")+" has been deleted!"}),v(g.disposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","dispositions","disposition","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.dispositions=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="dispositions",b.listOrder="",b.listOrderAsc=null,b.selectedDispositions=[],b.query={fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/dispositions/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{disposition:e,dispositions:b.dispositions.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("disposition")+"?").htmlContent("<b>"+(e.name||"disposition")+"</b> will be deleted.").ariaLabel("delete disposition").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getDispositions=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.disposition.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Dispositions",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditDisposition=function(e,t){i.show({controller:"CreateOrEditDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/dispositions/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{disposition:t,dispositions:b.dispositions.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteDisposition=S,b.exportSelectedDispositions=function(){var e=angular.copy(b.selectedDispositions);return b.selectedDispositions=[],e},b.deleteSelectedDispositions=function(e){var t=i.confirm().title("Are you sure want to delete the selected dispositions?").htmlContent("<b>"+b.selectedDispositions.length+" selected</b> will be deleted.").ariaLabel("delete Dispositions").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedDispositions.forEach(function(e){S(e)}),b.selectedDispositions=[]})},b.deselectDispositions=function(){b.selectedDispositions=[]},b.selectAllDispositions=function(){b.selectedDispositions=b.dispositions.rows};var A=!0,E=1;function y(e){b.dispositions=e||{count:0,rows:[]}}function S(e){m.disposition.delete({id:e.id}).$promise.then(function(){_.remove(b.dispositions.rows,{id:e.id}),b.dispositions.count-=1,b.dispositions.rows.length||b.getDispositions(),p.success({title:_.startCase("Disposition")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEdisposition"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEdisposition",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getDispositions())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","dispositions","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("DispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_INTERVAL",g.interval=angular.copy(l),g.intervals=r,g.newInterval=!1,g.interval||(g.interval={},g.title="TOOLS.NEW_INTERVAL",g.newInterval=!0),g.addNewInterval=function(){g.errors=[],d.interval.save(g.interval).$promise.then(function(e){g.intervals.unshift(e.toJSON()),o.success({title:"Interval properly created",msg:g.interval.name?g.interval.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.interval.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveInterval=function(){g.errors=[],d.interval.update({id:g.interval.id},g.interval).$promise.then(function(e){var t=_.find(g.intervals,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Interval properly saved!",msg:g.interval.name?g.interval.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.interval.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteInterval=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The interval will be deleted.").ariaLabel("Delete Interval").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.interval.delete({id:g.interval.id}).$promise.then(function(){_.remove(g.intervals,{id:g.interval.id}),o.success({title:"Interval properly deleted!",msg:(g.interval.name||"interval")+" has been deleted!"}),v(g.interval)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.interval.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.interval.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","intervals","interval","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditIntervalDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditAppintervalDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.interval={},c.intervalIntervals={count:0,rows:[]},c.selectedIntervalIntervals=[],c.crudPermissions,c.sortableTable={animation:100,onSort:function(e){l.interval.addIntervals({id:c.interval.id},e.models).$promise.then(function(e){c.intervalIntervals.rows=e}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:SORTABLETABLE",msg:e.data?JSON.stringify(e.data):e.toString()})})}},c.query={fields:"createdAt,updatedAt,id,name,interval",nolimit:"true",limit:10,page:1},c.init=function(e,t){c.interval=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.sortableTable.disabled=!c.crudPermissions.canEdit,c.query.id=c.interval.id,c.getIntervalIntervals()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the interval?").htmlContent("<b>"+(e.name||"interval")+"</b> will be deleted.").ariaLabel("delete interval").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getIntervalIntervals=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.interval.getIntervals(c.query,p).$promise},c.createOrEditIntervalInterval=function(e,t){s.show({controller:"EditAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/intervals/edit/apps/interval/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:c.interval,interval:t,intervals:c.intervalIntervals.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedIntervalIntervals=function(){var e=angular.copy(c.selectedIntervalIntervals);return c.selectedIntervalIntervals=[],e},c.deleteIntervalInterval=g,c.deleteSelectedIntervalIntervals=function(e){var t=s.confirm().title("Are you sure want to delete the selected intervals?").htmlContent("<b>"+c.selectedIntervalIntervals.length+" selected</b> will be deleted.").ariaLabel("delete intervals").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedIntervalIntervals.forEach(function(e){g(e)}),c.selectedIntervalIntervals=[]})};var m=!0,u=1;function p(e){c.intervalIntervals=e||{count:0,rows:[]}}function g(e){l.interval.delete({id:e.id}).$promise.then(function(){_.remove(c.intervalIntervals.rows,{id:e.id}),c.intervalIntervals.count-=1,c.intervalIntervals.rows.length||c.getIntervalIntervals(),r.success({title:"Interval deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETinterval"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getIntervalIntervals())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.tools").controller("IntervalIntervalsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_INTERVAL",g.interval=angular.copy(l),g.intervals=r,g.newInterval=!1,g.interval||(g.interval={},g.title="TOOLS.NEW_INTERVAL",g.newInterval=!0),g.addNewInterval=function(){g.errors=[],d.interval.save(g.interval).$promise.then(function(e){g.intervals.unshift(e.toJSON()),o.success({title:"Interval properly created",msg:g.interval.name?g.interval.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.interval.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveInterval=function(){g.errors=[],d.interval.update({id:g.interval.id},g.interval).$promise.then(function(e){var t=_.find(g.intervals,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Interval properly saved!",msg:g.interval.name?g.interval.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.interval.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteInterval=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The interval will be deleted.").ariaLabel("Delete Interval").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.interval.delete({id:g.interval.id}).$promise.then(function(){_.remove(g.intervals,{id:g.interval.id}),o.success({title:"Interval properly deleted!",msg:(g.interval.name||"interval")+" has been deleted!"}),v(g.interval)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.interval.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.interval.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","intervals","interval","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditIntervalDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.interval=c||e.params.interval||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoIntervals=function(){e.go("app.tools.intervals")},u.saveInterval=function(){r.interval.update({id:u.interval.id},u.interval).$promise.then(function(){l.success({title:"Interval updated!",msg:u.interval.name?u.interval.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","interval","userProfileSection"],angular.module("app.tools").controller("IntervalController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.intervals=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="intervals",b.listOrder="",b.listOrderAsc=null,b.selectedIntervals=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",IntervalId:"null",limit:10,page:1},b.editstate=function(e,t){n.go("app.tools.intervals.edit",{id:e.id,interval:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("interval")+"?").htmlContent("<b>"+(e.name||"interval")+"</b> will be deleted.").ariaLabel("delete interval").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getIntervals=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.interval.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Intervals",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditInterval=function(e,t){i.show({controller:"CreateOrEditIntervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/intervals/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:t,intervals:b.intervals.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteInterval=S,b.exportSelectedIntervals=function(){var e=angular.copy(b.selectedIntervals);return b.selectedIntervals=[],e},b.deleteSelectedIntervals=function(e){var t=i.confirm().title("Are you sure want to delete the selected intervals?").htmlContent("<b>"+b.selectedIntervals.length+" selected</b> will be deleted.").ariaLabel("delete Intervals").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedIntervals.forEach(function(e){S(e)}),b.selectedIntervals=[]})},b.deselectIntervals=function(){b.selectedIntervals=[]},b.selectAllIntervals=function(){b.selectedIntervals=b.intervals.rows};var A=!0,E=1;function y(e){b.intervals=e||{count:0,rows:[]}}function S(e){m.interval.delete({id:e.id}).$promise.then(function(){_.remove(b.intervals.rows,{id:e.id}),b.intervals.count-=1,b.intervals.rows.length||b.getIntervals(),p.success({title:_.startCase("Interval")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEinterval"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEinterval",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getIntervals())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","intervals","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("IntervalsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_PAUSE",g.pause=angular.copy(l),g.pauses=r,g.newPause=!1,g.pause||(g.pause={},g.title="TOOLS.NEW_PAUSE",g.newPause=!0),g.addNewPause=function(){g.errors=[],d.pause.save(g.pause).$promise.then(function(e){g.pauses.unshift(e.toJSON()),o.success({title:"Pause properly created",msg:g.pause.name?g.pause.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.pause.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pause.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.savePause=function(){g.errors=[],d.pause.update({id:g.pause.id},g.pause).$promise.then(function(e){var t=_.find(g.pauses,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Pause properly saved!",msg:g.pause.name?g.pause.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.pause.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pause.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deletePause=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The pause will be deleted.").ariaLabel("Delete Pause").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.pause.delete({id:g.pause.id}).$promise.then(function(){_.remove(g.pauses,{id:g.pause.id}),o.success({title:"Pause properly deleted!",msg:(g.pause.name||"pause")+" has been deleted!"}),v(g.pause)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.pause.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pause.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","pauses","pause","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditPauseDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.pauses=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="pauses",b.listOrder="",b.listOrderAsc=null,b.selectedPauses=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditPauseDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/pauses/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{pause:e,pauses:b.pauses.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("pause")+"?").htmlContent("<b>"+(e.name||"pause")+"</b> will be deleted.").ariaLabel("delete pause").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getPauses=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.pause.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Pauses",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditPause=function(e,t){i.show({controller:"CreateOrEditPauseDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/pauses/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{pause:t,pauses:b.pauses.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deletePause=S,b.exportSelectedPauses=function(){var e=angular.copy(b.selectedPauses);return b.selectedPauses=[],e},b.deleteSelectedPauses=function(e){var t=i.confirm().title("Are you sure want to delete the selected pauses?").htmlContent("<b>"+b.selectedPauses.length+" selected</b> will be deleted.").ariaLabel("delete Pauses").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedPauses.forEach(function(e){S(e)}),b.selectedPauses=[]})},b.deselectPauses=function(){b.selectedPauses=[]},b.selectAllPauses=function(){b.selectedPauses=b.pauses.rows};var A=!0,E=1;function y(e){b.pauses=e||{count:0,rows:[]}}function S(e){m.pause.delete({id:e.id}).$promise.then(function(){_.remove(b.pauses.rows,{id:e.id}),b.pauses.count-=1,b.pauses.rows.length||b.getPauses(),p.success({title:_.startCase("Pause")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEpause"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEpause",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getPauses())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","pauses","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("PausesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;if(g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_SCHEDULE",g.schedule=angular.copy(l),g.schedules=r,g.newSchedule=!1,g.selectedReport=[],g.query={fields:"createdAt,updatedAt,id,name,description,table,parent,conditions,joins",limit:10,page:1,sort:"-updatedAt"},g.schedule){g.apiName=g.schedule.DefaultReportId?"analyticDefaultReport":"analyticCustomReport";var v=g.schedule.DefaultReportId?g.schedule.DefaultReportId:g.schedule.CustomReportId;d[g.apiName].get({fields:"id,name,parent"}).$promise.then(function(e){g.currentReport=_.find(e.rows,{id:v}),g.schedule.report=g.currentReport.name,g.query.parent=g.currentReport.parent})}else g.schedule={output:"xlsx",active:!0,startAt:new Date,endAt:new Date(Date.now()+2592e6),cron:"0 0 * * *",subtractNumber:1,subtractUnit:"days",sendMail:!1,sendIfEmpty:!0},g.title="TOOLS.NEW_SCHEDULE",g.newSchedule=!0;function h(e){return e?{loaded:A,select_node:f}:{loaded:E,select_node:b}}function f(e,t){g.treeDefaultInstance.jstree(!0).deselect_all(),g.treeDefaultInstance.jstree(!0).close_all(),g.currentNode=t.node,g.currentNode.custom=!0,g.currentPath=g.treeCustomInstance.jstree(!0).get_path(g.currentNode).join("/ "),g.apiName="analyticCustomReport",g.query.parent=t.node.id,y()}function b(e,t){g.treeCustomInstance.jstree(!0).deselect_all(),g.treeCustomInstance.jstree(!0).close_all(),g.currentNode=t.node,g.currentNode.custom=!1,g.currentPath=g.treeDefaultInstance.jstree(!0).get_path(g.currentNode).join("/ "),g.apiName="analyticDefaultReport",g.query.parent=t.node.id,y()}function A(){if(!g.newSchedule&&"analyticCustomReport"===g.apiName){var e=g.treeCustomInstance.jstree(!0).get_node(g.query.parent);f(0,{node:e,selected:e.id})}}function E(){if(!g.newSchedule&&"analyticDefaultReport"===g.apiName){var e=g.treeDefaultInstance.jstree(!0).get_node(g.query.parent);b(0,{node:e,selected:e.id})}}function y(){if(g.query.offset=(g.query.page-1)*g.query.limit,g.apiName)if("admin"===g.currentUser.role)g.promise=d[g.apiName].get(g.query,S).$promise;else{if(!g.userProfileSection)return S(null);if(g.userProfileSection.autoAssociation)g.promise=d[g.apiName].get(g.query,S).$promise;else{var a=[];g.promise=d[g.apiName].get(g.query).$promise.then(function(e){return 0<(a=e&&e.rows?e.rows:[]).length?d.userProfileResource.get({sectionId:g.userProfileSection.id,type:"analyticDefaultReport"===g.apiName?"DefaultReports":"CustomReports"}).$promise.then(function(e){var t=e&&e.rows?e.rows:[];if(0<t.length){var n=[];return a.forEach(function(e){_.find(t,["resourceId",e.id])&&n.push(e)}),S({count:n.length,rows:n})}return S(null)}):S(null)}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_REPORTS",msg:e.data?JSON.stringify(e.data):e.toString()})})}}}function S(e){g.reports=e||{count:0,rows:[]},g.newSchedule||g.selectedReport.push(_.find(g.reports.rows,{id:g.currentReport.id}))}function T(e){a.hide(e)}g.addNewSchedule=function(){g.errors=[],d.schedule.save(g.schedule).$promise.then(function(e){g.schedules.unshift(e.toJSON()),o.success({title:"Schedule properly created",msg:g.schedule.name?g.schedule.name+" has been created!":""}),T(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.schedule.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.schedule.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSchedule=function(){g.errors=[],d.schedule.update({id:g.schedule.id},g.schedule).$promise.then(function(e){var t=_.find(g.schedules,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Schedule properly saved!",msg:g.schedule.name?g.schedule.name+" has been saved!":""}),T(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.schedule.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.schedule.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSchedule=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The schedule will be deleted.").ariaLabel("Delete Schedule").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.schedule.delete({id:g.schedule.id}).$promise.then(function(){_.remove(g.schedules,{id:g.schedule.id}),o.success({title:"Schedule properly deleted!",msg:(g.schedule.name||"schedule")+" has been deleted!"}),T(g.schedule)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.schedule.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.schedule.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.getReports=y,g.selectReport=function(){g.schedule.report=g.selectedReport[0].name,g.currentNode.custom?(g.schedule.CustomReportId=g.selectedReport[0].id,delete g.schedule.DefaultReportId):(g.schedule.DefaultReportId=g.selectedReport[0].id,delete g.schedule.CustomReportId);e.scheduleForm.report.$setDirty(),a.hide()},g.closeReportDialog=function(){a.hide()},g.searchReport=function(){g.treeDefaultData=g.treeReports[0]?angular.fromJson(g.treeReports[0].tree):[],g.treeCustomData=g.treeReports[1]?angular.fromJson(g.treeReports[1].tree):[],g.treeConfig=(t={core:{multiple:!1,animation:!0,error:function(e){console.error("treeCtrl: error from js tree - "+angular.toJson(e))},check_callback:!0,worker:!0},version:1,plugins:["wholerow"]},"admin"!==g.currentUser.role?d.userProfileSection.get({fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:g.currentUser.userProfileId,sectionId:1203}).$promise.then(function(e){return g.userProfileSection=e&&1==e.count?e.rows[0]:null,t}).catch(function(e){o.error({title:"ERROR",msg:e.message})}):t),g.treeDefaultEvents=h(!1),g.treeCustomEvents=h(!0),a.show({controller:function(){return g},controllerAs:"vm",templateUrl:"app/main/apps/tools/views/schedules/partialViews/reports/treeReports.html",autoWrap:!0,skipHide:!0});var t},g.closeDialog=T,d.analyticTreeReport.get({}).$promise.then(function(e){g.treeReports=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TREEREPORTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.hasRole("admin")?d.mailAccount.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.mailAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MAILACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.mailAccount.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.mailAccounts=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:602}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.mailAccounts,{id:e.resourceId})}),n=null;if(g.schedule&&(n=_.find(g.mailAccounts,{id:Number(g.schedule.MailAccountId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.mailAccounts,{id:n.id});a.canSelect=!1,t.push(a)}g.mailAccounts=t})}else{var n=[],a=null;g.schedule&&(a=_.find(g.mailAccounts,{id:Number(g.schedule.MailAccountId)}));for(var i=0;i<g.mailAccounts.length;i++)a&&g.mailAccounts[i].id===a.id&&(g.mailAccounts[i].canSelect=!1,n.push(g.mailAccounts[i]));g.mailAccounts=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","schedules","schedule","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditScheduleDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.schedules=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="schedules",b.listOrder="",b.listOrderAsc=null,b.selectedScheduler=[],b.query={fields:"createdAt,updatedAt,id,name,CustomReportId,DefaultReportId,output,active,startAt,endAt,cron,subtractNumber,subtractUnit,sendMail,MailAccountId,email,cc,bcc,sendIfEmpty,description",sort:"-updatedAt",limit:10,page:1},b.arrayoutput=_.keyBy([{option:"CSV",value:"'csv'"},{option:"PDF",value:"'pdf'"},{option:"Excel",value:"'xlsx'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysubtractUnit=_.keyBy([{option:"Minutes",value:"'minutes'"},{option:"Hours",value:"'hours'"},{option:"Days",value:"'days'"},{option:"Weeks",value:"'weeks'"},{option:"Months",value:"'months'"},{option:"Quarters",value:"'quarters'"},{option:"Years",value:"'years'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editdialog=function(e,t){i.show({controller:"CreateOrEditScheduleDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/schedules/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{schedule:e,schedules:b.schedules.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.runconfirm=function(e,t){var n=i.confirm().title("Are you sure want to run the schedule?").htmlContent("<b>"+(e.name||"schedule")+"</b> will be run.").ariaLabel("delete schedule").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){return m.schedule.run({id:e.id}).$promise},function(){console.log("CANCEL")})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("schedule")+"?").htmlContent("<b>"+(e.name||"schedule")+"</b> will be deleted.").ariaLabel("delete schedule").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getScheduler=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.schedule.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Scheduler",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSchedule=function(e,t){i.show({controller:"CreateOrEditScheduleDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/schedules/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{schedule:t,schedules:b.schedules.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSchedule=S,b.exportSelectedScheduler=function(){var e=angular.copy(b.selectedScheduler);return b.selectedScheduler=[],e},b.deleteSelectedScheduler=function(e){var t=i.confirm().title("Are you sure want to delete the selected schedules?").htmlContent("<b>"+b.selectedScheduler.length+" selected</b> will be deleted.").ariaLabel("delete Schedules").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedScheduler.forEach(function(e){S(e)}),b.selectedScheduler=[]})},b.deselectScheduler=function(){b.selectedScheduler=[]},b.selectAllScheduler=function(){b.selectedScheduler=b.schedules.rows},m.analyticTreeReport.get({}).$promise.then(function(e){b.treeReports=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TREEREPORTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),g.hasRole("admin")?m.mailAccount.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.mailAccounts=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MAILACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.mailAccount.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.mailAccounts=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:602}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.mailAccounts,{id:e.resourceId})}),n=null;if(b.schedule&&(n=_.find(b.mailAccounts,{id:Number(b.schedule.MailAccountId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.mailAccounts,{id:n.id});a.canSelect=!1,t.push(a)}b.mailAccounts=t})}else{var n=[],a=null;b.schedule&&(a=_.find(b.mailAccounts,{id:Number(b.schedule.MailAccountId)}));for(var i=0;i<b.mailAccounts.length;i++)a&&b.mailAccounts[i].id===a.id&&(b.mailAccounts[i].canSelect=!1,n.push(b.mailAccounts[i]));b.mailAccounts=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.schedules=e||{count:0,rows:[]}}function S(e){m.schedule.delete({id:e.id}).$promise.then(function(){_.remove(b.schedules.rows,{id:e.id}),b.schedules.count-=1,b.schedules.rows.length||b.getScheduler(),p.success({title:_.startCase("Schedule")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEschedule"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEschedule",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getScheduler())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","schedules","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("SchedulesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_SOUND",g.sound=angular.copy(l),g.sounds=r,g.newSound=!1,g.sound||(g.sound={},g.title="TOOLS.NEW_SOUND",g.newSound=!0),g.addNewSound=function(){g.errors=[],d.sound.save(g.sound).$promise.then(function(e){g.sounds.unshift(e.toJSON()),o.success({title:"Sound properly created",msg:g.sound.name?g.sound.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.sound.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.sound.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSound=function(){g.errors=[],d.sound.update({id:g.sound.id},g.sound).$promise.then(function(e){var t=_.find(g.sounds,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Sound properly saved!",msg:g.sound.name?g.sound.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.sound.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.sound.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSound=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The sound will be deleted.").ariaLabel("Delete Sound").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.sound.delete({id:g.sound.id}).$promise.then(function(){_.remove(g.sounds,{id:g.sound.id}),o.success({title:"Sound properly deleted!",msg:(g.sound.name||"sound")+" has been deleted!"}),v(g.sound)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.sound.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.sound.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","sounds","sound","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditSoundDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.sounds=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="sounds",b.listOrder="",b.listOrderAsc=null,b.selectedSounds=[],b.query={fields:"createdAt,updatedAt,id,save_name,converted_format,name,audio,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/sounds/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{sound:e,sounds:b.sounds.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.downloadfile2=function(s,e){return m.sound.download({id:s.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=s.converted_format?s.save_name+"."+s.converted_format:s.save_name;var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.sound.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("sound")+"?").htmlContent("<b>"+(e.name||"sound")+"</b> will be deleted.").ariaLabel("delete sound").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getSounds=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.sound.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Sounds",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSound=function(e,t){i.show({controller:"CreateOrEditSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/sounds/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{sound:t,sounds:b.sounds.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSound=S,b.exportSelectedSounds=function(){var e=angular.copy(b.selectedSounds);return b.selectedSounds=[],e},b.deleteSelectedSounds=function(e){var t=i.confirm().title("Are you sure want to delete the selected sounds?").htmlContent("<b>"+b.selectedSounds.length+" selected</b> will be deleted.").ariaLabel("delete Sounds").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedSounds.forEach(function(e){S(e)}),b.selectedSounds=[]})},b.deselectSounds=function(){b.selectedSounds=[]},b.selectAllSounds=function(){b.selectedSounds=b.sounds.rows},b.uploadSound=function(e){i.show({controller:"UploadSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/sounds/upload/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{sounds:b.sounds.rows}})};var A=!0,E=1;function y(e){b.sounds=e||{count:0,rows:[]}}function S(e){m.sound.delete({id:e.id}).$promise.then(function(){_.remove(b.sounds.rows,{id:e.id}),b.sounds.count-=1,b.sounds.rows.length||b.getSounds(),p.success({title:_.startCase("Sound")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsound"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEsound",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getSounds())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","sounds","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("SoundsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this,r=15,l=1024*r*1024;o.currentUser=s.getCurrentUser(),o.errors=[],o.title="TOOLS.UPLOAD_SOUND",o.sounds=a,o.uploadSounds=[],o.uploadState="none",o.sound={},o.ngFlowOptions={maxChunkRetries:1,chunkSize:l,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0,target:"api/sounds"},o.ngFlow={flow:{}},o.dropping=!1,o.fileAdded=function(e){var t=["wav","mp3","gsm"];if(!_.includes(t,e.getExtension()))return n.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(e.size>l)return n.error({title:"File too big",msg:"The max allowed size is "+r+"MB"}),!1;return o.sound={id:e.uniqueIdentifier,file:e},o.uploadSounds.unshift(o.sound),!0},o.upload=function(){o.uploadState="uploading",o.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},o.ngFlow.flow.opts.query={role:o.currentUser.role,userProfileId:o.currentUser.userProfileId},o.ngFlow.flow.upload()},o.fileSuccess=function(a,e){o.sounds.unshift(JSON.parse(e)),angular.forEach(o.uploadSounds,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result}}})},o.uploadError=function(e,t){o.ngFlow.flow.cancel(),n.error({title:"Upload error",msg:"Cannot upload the sound"}),o.uploadState="failed"},o.uploadComplete=function(){"failed"!==o.uploadState&&(o.uploadState="completed",n.success({title:"Upload completed",msg:o.sound.file.name+" uploaded successfully"}))},o.closeDialog=function(){t.hide()}}e.$inject=["$cookies","$mdDialog","toasty","sounds","api","Auth"],angular.module("app.tools").controller("UploadSoundDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_TAG",g.tag=angular.copy(l),g.tags=r,g.newTag=!1,g.tag||(g.tag={},g.title="TOOLS.NEW_TAG",g.newTag=!0),g.addNewTag=function(){g.errors=[],d.tag.save(g.tag).$promise.then(function(e){g.tags.unshift(e.toJSON()),o.success({title:"Tag properly created",msg:g.tag.name?g.tag.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.tag.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.tag.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveTag=function(){g.errors=[],d.tag.update({id:g.tag.id},g.tag).$promise.then(function(e){var t=_.find(g.tags,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Tag properly saved!",msg:g.tag.name?g.tag.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.tag.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.tag.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteTag=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The tag will be deleted.").ariaLabel("Delete Tag").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.tag.delete({id:g.tag.id}).$promise.then(function(){_.remove(g.tags,{id:g.tag.id}),o.success({title:"Tag properly deleted!",msg:(g.tag.name||"tag")+" has been deleted!"}),v(g.tag)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.tag.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.tag.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","tags","tag","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditTagDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.tags=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="tags",b.listOrder="",b.listOrderAsc=null,b.selectedTags=[],b.query={fields:"createdAt,updatedAt,id,name,description,color",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditTagDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/tags/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{tag:e,tags:b.tags.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("tag")+"?").htmlContent("<b>"+(e.name||"tag")+"</b> will be deleted.").ariaLabel("delete tag").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getTags=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.tag.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Tags",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditTag=function(e,t){i.show({controller:"CreateOrEditTagDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/tags/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{tag:t,tags:b.tags.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteTag=S,b.exportSelectedTags=function(){var e=angular.copy(b.selectedTags);return b.selectedTags=[],e},b.deleteSelectedTags=function(e){var t=i.confirm().title("Are you sure want to delete the selected tags?").htmlContent("<b>"+b.selectedTags.length+" selected</b> will be deleted.").ariaLabel("delete Tags").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedTags.forEach(function(e){S(e)}),b.selectedTags=[]})},b.deselectTags=function(){b.selectedTags=[]},b.selectAllTags=function(){b.selectedTags=b.tags.rows};var A=!0,E=1;function y(e){b.tags=e||{count:0,rows:[]}}function S(e){m.tag.delete({id:e.id}).$promise.then(function(){_.remove(b.tags.rows,{id:e.id}),b.tags.count-=1,b.tags.rows.length||b.getTags(),p.success({title:_.startCase("Tag")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtag"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEtag",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getTags())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","tags","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TagsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_TEMPLATE",g.template=angular.copy(l),g.templates=r,g.newTemplate=!1,g.template||(g.template={},g.title="TOOLS.NEW_TEMPLATE",g.newTemplate=!0),g.addNewTemplate=function(){g.errors=[],d.template.save(g.template).$promise.then(function(e){g.templates.unshift(e.toJSON()),o.success({title:"Template properly created",msg:g.template.name?g.template.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.template.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.template.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveTemplate=function(){g.errors=[],d.template.update({id:g.template.id},g.template).$promise.then(function(e){var t=_.find(g.templates,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Template properly saved!",msg:g.template.name?g.template.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.template.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.template.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteTemplate=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The template will be deleted.").ariaLabel("Delete Template").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.template.delete({id:g.template.id}).$promise.then(function(){_.remove(g.templates,{id:g.template.id}),o.success({title:"Template properly deleted!",msg:(g.template.name||"template")+" has been deleted!"}),v(g.template)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.template.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.template.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","templates","template","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditTemplateDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.templates=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="templates",b.listOrder="",b.listOrderAsc=null,b.selectedTemplates=[],b.query={fields:"createdAt,updatedAt,id,name,html,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditTemplateDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/templates/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{template:e,templates:b.templates.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("template")+"?").htmlContent("<b>"+(e.name||"template")+"</b> will be deleted.").ariaLabel("delete template").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getTemplates=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.template.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Templates",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditTemplate=function(e,t){i.show({controller:"CreateOrEditTemplateDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/templates/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{template:t,templates:b.templates.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteTemplate=S,b.exportSelectedTemplates=function(){var e=angular.copy(b.selectedTemplates);return b.selectedTemplates=[],e},b.deleteSelectedTemplates=function(e){var t=i.confirm().title("Are you sure want to delete the selected templates?").htmlContent("<b>"+b.selectedTemplates.length+" selected</b> will be deleted.").ariaLabel("delete Templates").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedTemplates.forEach(function(e){S(e)}),b.selectedTemplates=[]})},b.deselectTemplates=function(){b.selectedTemplates=[]},b.selectAllTemplates=function(){b.selectedTemplates=b.templates.rows};var A=!0,E=1;function y(e){b.templates=e||{count:0,rows:[]}}function S(e){m.template.delete({id:e.id}).$promise.then(function(){_.remove(b.templates.rows,{id:e.id}),b.templates.count-=1,b.templates.rows.length||b.getTemplates(),p.success({title:_.startCase("Template")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtemplate"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEtemplate",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getTemplates())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","templates","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TemplatesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_TRIGGER",g.trigger=angular.copy(l),g.triggers=r,g.newTrigger=!1,g.trigger||(g.trigger={channel:"voice"},g.title="TOOLS.NEW_TRIGGER",g.newTrigger=!0),g.addNewTrigger=function(){g.errors=[],d.trigger.save(g.trigger).$promise.then(function(e){g.triggers.unshift(e.toJSON()),o.success({title:"Trigger properly created",msg:g.trigger.name?g.trigger.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.trigger.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trigger.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveTrigger=function(){g.errors=[],d.trigger.update({id:g.trigger.id},g.trigger).$promise.then(function(e){var t=_.find(g.triggers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Trigger properly saved!",msg:g.trigger.name?g.trigger.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.trigger.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trigger.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteTrigger=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The trigger will be deleted.").ariaLabel("Delete Trigger").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.trigger.delete({id:g.trigger.id}).$promise.then(function(){_.remove(g.triggers,{id:g.trigger.id}),o.success({title:"Trigger properly deleted!",msg:(g.trigger.name||"trigger")+" has been deleted!"}),v(g.trigger)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.trigger.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trigger.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","triggers","trigger","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditTriggerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.trigger={},c.triggerActions={count:0,rows:[]},c.selectedTriggerActions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,action,data1,data2,data6,data7,data3,data4,data5",limit:10,page:1},c.arrayaction=_.keyBy([{option:"CONTACT_MANAGER",value:"'contactManager'",ngIf:"vm.trigger.channel == 'voice'"},{option:"INTEGRATIONS",value:"'integration'",ngIf:"vm.trigger.channel == 'voice' && ((vm.newAction && vm.hasModulePermissions.Integrations) || !vm.newAction)"},{option:"MOTION_BAR",value:"'motionbar'"},{option:"JSCRIPTY",value:"'jscripty'"},{option:"URL_FORWARD",value:"'urlForward'"},{option:"BROWSER",value:"'browser'"},{option:"BOT",value:"'bot'",ngIf:"vm.trigger.channel == 'voice'"},{option:"SCRIPT",value:"'script'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.browserValues=_.keyBy([{option:"Popup",value:"'0'"},{option:"CTI URL",value:"'1'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.autoCreateContact=_.keyBy([{option:"yes",value:"'1'"},{option:"no",value:"'0'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.urlForwardValues=_.keyBy([{option:"GET",value:"'GET'"},{option:"POST",value:"'POST'"},{option:"PUT",value:"'PUT'"},{option:"DELETE",value:"'DELETE'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.integrationValues=_.keyBy([{option:"Zendesk",value:"'zendesk'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1301]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1301])"},{option:"Salesforce",value:"'salesforce'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1302]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1302])"},{option:"SugarCRM",value:"'sugarcrm'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1305]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1305])"},{option:"Freshdesk",value:"'freshdesk'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1303]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1303])"},{option:"Desk",value:"'desk'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1306]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1306])"},{option:"Zoho",value:"'zoho'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1307]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1307])"},{option:"vTiger",value:"'vtiger'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1308]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1308])"},{option:"Dynamics365",value:"'dynamics365'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1309]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1309])"},{option:"ServiceNow",value:"'servicenow'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1310]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1310])"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.motionbarValues=_.keyBy([{option:"Popup",value:"'0'"},{option:"CTI URL",value:"'1'"},{option:"Windows App",value:"'2'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.eventVariables=_.keyBy([{option:"yes",value:"'1'"},{option:"no",value:"'0'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.location=_.keyBy([{option:"NEW_TAB",value:"'0'"},{option:"NEW_WINDOW",value:"'1'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.trigger=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.trigger.id,c.query.ActionId=c.trigger.id,c.getTriggerActions(),n=[1301,1302,1303,1305,1306,1307,1308],d.hasModulesPermissions(["Integrations"]).then(function(e){c.hasModulePermissions=_.merge(c.hasModulePermissions,e)}).then(function(){d.hasSectionsPermissions(n).then(function(e){c.hasSectionPermissions=_.merge(c.hasSectionPermissions,e)})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTEGRATIONS_PERMISSIONS",msg:e.data?JSON.stringify(e.data):e.toString()})});var n},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the action?").htmlContent("<b>"+(e.name||"action")+"</b> will be deleted.").ariaLabel("delete action").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getTriggerActions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getActions(c.query,p).$promise},c.createOrEditTriggerAction=function(e,t){s.show({controller:"CreateOrEditActionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/triggers/edit/actions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{trigger:c.trigger,action:t,actions:c.triggerActions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedTriggerActions=function(){var e=angular.copy(c.selectedTriggerActions);return c.selectedTriggerActions=[],e},c.deleteTriggerAction=g,c.deleteSelectedTriggerActions=function(e){var t=s.confirm().title("Are you sure want to delete the selected actions?").htmlContent("<b>"+c.selectedTriggerActions.length+" selected</b> will be deleted.").ariaLabel("delete actions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedTriggerActions.forEach(function(e){g(e)}),c.selectedTriggerActions=[]})},d.hasRole("admin")?l.cmList.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){c.lists=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.cmList.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){c.lists=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.lists,{id:e.resourceId})}),a=null;a=[],c.triggerActions.rows.forEach(function(e){if("contactManager"===e.action){var t=_.find(c.lists,{id:Number(e.data1)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.lists,{id:e.id});t.canSelect=!1,n.push(t)}}),c.lists=n})}else{var n=[],a=[];c.triggerActions.rows.forEach(function(e){if("contactManager"===e.action){var t=_.find(c.lists,{id:Number(e.data1)});a.push(t)}});for(var i=0;i<c.lists.length;i++){_.some(a,{id:c.lists[i].id})&&(c.lists[i].canSelect=!1,n.push(c.lists[i]))}c.lists=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.jscriptyProject.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){c.projects=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.jscriptyProject.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){c.projects=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1701}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.projects,{id:e.resourceId})}),a=null;a=[],c.triggerActions.rows.forEach(function(e){if("jscripty"===e.action){var t=_.find(c.projects,{id:Number(e.data1)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.projects,{id:e.id});t.canSelect=!1,n.push(t)}}),c.projects=n})}else{var n=[],a=[];c.triggerActions.rows.forEach(function(e){if("jscripty"===e.action){var t=_.find(c.projects,{id:Number(e.data1)});a.push(t)}});for(var i=0;i<c.projects.length;i++){_.some(a,{id:c.projects[i].id})&&(c.projects[i].canSelect=!1,n.push(c.projects[i]))}c.projects=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intZendeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.zendeskAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZENDESKACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intDeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.deskAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DESKACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intZohoAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.zohoAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZOHOACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intSalesforceAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.salesforceAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SALESFORCEACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intSugarcrmAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.sugarcrmAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SUGARCRMACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intFreshdeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.freshdeskAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FRESHDESKACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intVtigerAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.vtigerAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VTIGERACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intDynamics365Account.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.dynamics365Accounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DYNAMICS365ACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intServicenowAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.servicenowAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SERVICENOWACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intZendeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.zendeskConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZENDESKCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intDeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.deskConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DESKCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intZohoConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.zohoConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZOHOCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intSalesforceConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.salesforceConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SALESFORCECONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intSugarcrmConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.sugarcrmConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SUGARCRMCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intFreshdeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.freshdeskConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FRESHDESKCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intVtigerConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.vtigerConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VTIGERCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intDynamics365Configuration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.dynamics365Configurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DYNAMICS365CONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intServicenowConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.servicenowConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SERVICENOWCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.template.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.templates=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEMPLATES",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.template.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.templates=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1009}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.templates,{id:e.resourceId})}),a=null;a=[],c.triggerActions.rows.forEach(function(e){if("motionbar"===e.action){var t=_.find(c.templates,{id:Number(e.data2)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.templates,{id:e.id});t.canSelect=!1,n.push(t)}}),c.templates=n})}else{var n=[],a=[];c.triggerActions.rows.forEach(function(e){if("motionbar"===e.action){var t=_.find(c.templates,{id:Number(e.data2)});a.push(t)}});for(var i=0;i<c.templates.length;i++){_.some(a,{id:c.templates[i].id})&&(c.templates[i].canSelect=!1,n.push(c.templates[i]))}c.templates=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtemplates",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=!0,u=1;function p(e){c.triggerActions=e||{count:0,rows:[]}}function g(e){l.action.delete({id:e.id}).$promise.then(function(){_.remove(c.triggerActions.rows,{id:e.id}),c.triggerActions.count-=1,c.triggerActions.rows.length||c.getTriggerActions(),r.success({title:"Action deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETtrigger"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrigger",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getTriggerActions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.tools").controller("TriggerActionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g){var v=this;function h(e){a.hide(e)}v.currentUser=m.getCurrentUser(),v.errors=[],v.setting=p,v.license=u,v.crudPermissions=g,v.hasModulePermissions={},v.passwordPattern=v.setting&&v.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",v.title="TOOLS.EDIT_ACTION",v.action=angular.copy(l),v.actions=r,v.newAction=!1,v.trigger=angular.copy(d),v.action||(v.action={data3:"0",data4:"0",data5:"800",data6:"600"},v.title="TOOLS.NEW_ACTION",v.newAction=!0),t.params.id&&(v.action.ActionId=t.params.id),v.addNewAction=function(){v.errors=[],c.trigger.addAction({id:t.params.id},v.action).$promise.then(function(e){v.actions.unshift(e.toJSON()),o.success({title:"Action properly created",msg:v.action.name?v.action.name+" has been created!":""}),h(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.action.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.action.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.saveAction=function(){v.errors=[],c.action.update({id:v.action.id},v.action).$promise.then(function(e){var t=_.find(v.actions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Action properly saved!",msg:v.action.name?v.action.name+" has been saved!":""}),h(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.action.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.action.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteAction=function(e){v.errors=[];var t=a.confirm().title("Are you sure?").content("The action will be deleted.").ariaLabel("Delete Action").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.action.delete({id:v.action.id}).$promise.then(function(){_.remove(v.actions,{id:v.action.id}),o.success({title:"Action properly deleted!",msg:(v.action.name||"action")+" has been deleted!"}),h(v.action)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.action.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.action.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},v.getDateFromString=function(e){return null===e?void 0:new Date(e)},v.onActionInit=function(){m.hasModulesPermissions(["Integrations"]).then(function(e){v.hasModulePermissions=_.merge(v.hasModulePermissions,e)}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MODULES_PERMISSIONS",msg:e.data?JSON.stringify(e.data):e.toString()})})},v.onIntegrationInit=function(){m.hasSectionsPermissions([1301,1302,1303,1305,1306,1307,1308,1309,1310]).then(function(e){v.hasSectionPermissions=_.merge(v.hasSectionPermissions,e)}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SECTIONS_PERMISSIONS",msg:e.data?JSON.stringify(e.data):e.toString()})})},v.closeDialog=h,m.hasRole("admin")?c.cmList.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){v.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.cmList.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){v.lists=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.lists,{id:e.resourceId})}),n=null;if(v.action&&(n=_.find(v.lists,{id:Number(v.action.data1)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.lists,{id:n.id});a.canSelect=!1,t.push(a)}v.lists=t})}else{var n=[],a=null;v.action&&(a=_.find(v.lists,{id:Number(v.action.data1)}));for(var i=0;i<v.lists.length;i++)a&&v.lists[i].id===a.id&&(v.lists[i].canSelect=!1,n.push(v.lists[i]));v.lists=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.jscriptyProject.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){v.projects=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.jscriptyProject.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){v.projects=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:1701}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.projects,{id:e.resourceId})}),n=null;if(v.action&&(n=_.find(v.projects,{id:Number(v.action.data1)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.projects,{id:n.id});a.canSelect=!1,t.push(a)}v.projects=t})}else{var n=[],a=null;v.action&&(a=_.find(v.projects,{id:Number(v.action.data1)}));for(var i=0;i<v.projects.length;i++)a&&v.projects[i].id===a.id&&(v.projects[i].canSelect=!1,n.push(v.projects[i]));v.projects=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intZendeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.zendeskAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZENDESKACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intDeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.deskAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DESKACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intZohoAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.zohoAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZOHOACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intSalesforceAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.salesforceAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SALESFORCEACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intSugarcrmAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.sugarcrmAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SUGARCRMACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intFreshdeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.freshdeskAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FRESHDESKACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intVtigerAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.vtigerAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VTIGERACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intDynamics365Account.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.dynamics365Accounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DYNAMICS365ACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intServicenowAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.servicenowAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SERVICENOWACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intZendeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.zendeskConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZENDESKCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intDeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.deskConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DESKCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intZohoConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.zohoConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZOHOCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intSalesforceConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.salesforceConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SALESFORCECONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intSugarcrmConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.sugarcrmConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SUGARCRMCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intFreshdeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.freshdeskConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FRESHDESKCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intVtigerConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.vtigerConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VTIGERCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intDynamics365Configuration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.dynamics365Configurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DYNAMICS365CONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intServicenowConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.servicenowConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SERVICENOWCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.template.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.templates=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEMPLATES",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.template.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.templates=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:1009}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.templates,{id:e.resourceId})}),n=null;if(v.action&&(n=_.find(v.templates,{id:Number(v.action.data2)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.templates,{id:n.id});a.canSelect=!1,t.push(a)}v.templates=t})}else{var n=[],a=null;v.action&&(a=_.find(v.templates,{id:Number(v.action.data2)}));for(var i=0;i<v.templates.length;i++)a&&v.templates[i].id===a.id&&(v.templates[i].canSelect=!1,n.push(v.templates[i]));v.templates=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtemplates",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","actions","action","trigger","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditActionDialogController",e)}(),function(){"use strict";function e(e,t,n,o,a,i,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.trigger={},c.triggerAllConditions={count:0,rows:[]},c.selectedTriggerAllConditions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,field,operator,value",limit:10,page:1},c.arrayfield=_.keyBy([{option:"Queue",value:"'queue'",ngIf:"vm.trigger.channel == 'voice'"},{option:"Call_Status",value:"'lastevent'",ngIf:"vm.trigger.channel == 'voice'"},{option:"OutboundRoute",value:"'routeId'",ngIf:"vm.trigger.channel == 'voice'"},{option:"Agent",value:"'agent'",ngIf:"vm.trigger.channel == 'voice'"},{option:"Account",value:"'account'",ngIf:"vm.trigger.channel != 'voice'"},{option:"Interaction",value:"'interaction'",ngIf:"vm.trigger.channel != 'voice'"},{option:"Message",value:"'message'",ngIf:"vm.trigger.channel != 'voice'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.arrayoperator=_.keyBy([{option:"Equals",value:"'equals'"},{option:"Not_Equals",value:"'not_equals'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.callStatusValues=_.keyBy([{option:"Abandon",value:"'abandoned'"},{option:"Hangup",value:"'complete'"},{option:"Reject",value:"'rejected'"},{option:"Ring",value:"'called'"},{option:"Answer",value:"'connect'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.interactionStatusValues=_.keyBy([{option:"Opened",value:"'opened'"},{option:"Closed",value:"'closed'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.messageStatusValues=_.keyBy([{option:"Incoming",value:"'in'"},{option:"Outgoing",value:"'out'"},{option:"Accepted",value:"'accept'"},{option:"Rejected",value:"'reject'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.trigger=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.trigger.id,c.query.TriggerAllId=c.trigger.id,c.getTriggerAllConditions()},c.deleteConfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the allCondition?").htmlContent("<b>"+(e.name||"allCondition")+"</b> will be deleted.").ariaLabel("delete allCondition").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){f(e)},function(){console.log("CANCEL")})},c.success=h,c.getTriggerAllConditions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getAllConditions(c.query,h).$promise},c.createOrEditTriggerAllCondition=function(e,t){i.show({controller:"CreateOrEditAllConditionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/triggers/edit/allconditions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{trigger:c.trigger,allCondition:t,allconditions:c.triggerAllConditions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedTriggerAllConditions=function(){var e=angular.copy(c.selectedTriggerAllConditions);return c.selectedTriggerAllConditions=[],e},c.deleteTriggerAllCondition=f,c.deleteSelectedTriggerAllConditions=function(e){var t=i.confirm().title("Are you sure want to delete the selected allconditions?").htmlContent("<b>"+c.selectedTriggerAllConditions.length+" selected</b> will be deleted.").ariaLabel("delete allconditions").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){c.selectedTriggerAllConditions.forEach(function(e){f(e)}),c.selectedTriggerAllConditions=[]})},d.hasRole("admin")?l.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.chatAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CHATACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.chatAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:502}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.chatAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.chatAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.chatAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.chatAccounts=n})}else{var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.chatAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.chatAccounts.length;i++){_.some(a,{id:c.chatAccounts[i].id})&&(c.chatAccounts[i].canSelect=!1,n.push(c.chatAccounts[i]))}c.chatAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.mailAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MAILACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.mailAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:602}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.mailAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.mailAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.mailAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.mailAccounts=n})}else{var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.mailAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.mailAccounts.length;i++){_.some(a,{id:c.mailAccounts[i].id})&&(c.mailAccounts[i].canSelect=!1,n.push(c.mailAccounts[i]))}c.mailAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.smsAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SMSACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.smsAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:702}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.smsAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.smsAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.smsAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.smsAccounts=n})}else{var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.smsAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.smsAccounts.length;i++){_.some(a,{id:c.smsAccounts[i].id})&&(c.smsAccounts[i].canSelect=!1,n.push(c.smsAccounts[i]))}c.smsAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.faxAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FAXACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.faxAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:902}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.faxAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.faxAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.faxAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.faxAccounts=n})}else{var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.faxAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.faxAccounts.length;i++){_.some(a,{id:c.faxAccounts[i].id})&&(c.faxAccounts[i].canSelect=!1,n.push(c.faxAccounts[i]))}c.faxAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.openchannelAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OPENCHANNELACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.openchannelAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:802}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.openchannelAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.openchannelAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.openchannelAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.openchannelAccounts=n})}else{var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.openchannelAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.openchannelAccounts.length;i++){_.some(a,{id:c.openchannelAccounts[i].id})&&(c.openchannelAccounts[i].canSelect=!1,n.push(c.openchannelAccounts[i]))}c.openchannelAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=[{id:401,type:"inbound"},{id:1501,type:"outbound"}],u=null;d.hasRole("admin")?l.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){c.queues=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){u=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];u.forEach(function(e){e.type===m[a].type&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(l.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("queue"===e.field){var t=_.find(u,{name:e.value});a.push(t)}});for(var t=0;t<e.length;t++){(e[t].rows||[]).forEach(function(e){n.push(e)})}_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["resourceId",e.id])){var t=_.find(u,{id:e.id});t.canSelect=!1,n.push(t)}}),c.queues=n}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){c.outboundRoutes=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OUTBOUNDROUTES",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){c.outboundRoutes=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:403}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.outboundRoutes,{id:e.resourceId})}),a=null;a=[],c.triggerAllConditions.rows.forEach(function(e){if("routeId"===e.field){var t=_.find(c.outboundRoutes,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.outboundRoutes,{id:e.id});t.canSelect=!1,n.push(t)}}),c.outboundRoutes=n})}else{var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("routeId"===e.field){var t=_.find(c.outboundRoutes,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.outboundRoutes.length;i++){_.some(a,{id:c.outboundRoutes[i].id})&&(c.outboundRoutes[i].canSelect=!1,n.push(c.outboundRoutes[i]))}c.outboundRoutes=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})});m=[{id:202,role:"agent"}];var p=null;d.hasRole("admin")?l.user.get({fields:"id,name,fullname",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){c.agents=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.user.get({fields:"id,name,fullname",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){p=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];p.forEach(function(e){e.role===m[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(l.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("agent"===e.field){var t=_.find(p,{name:e.value});a.push(t)}});for(var t=0;t<e.length;t++){(e[t].rows||[]).forEach(function(e){n.push(e)})}_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["resourceId",e.id])){var t=_.find(p,{id:e.id});t.canSelect=!1,n.push(t)}}),c.agents=n}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})});var g=!0,v=1;function h(e){c.triggerAllConditions=e||{count:0,rows:[]}}function f(e){l.condition.delete({id:e.id}).$promise.then(function(){_.remove(c.triggerAllConditions.rows,{id:e.id}),c.triggerAllConditions.count-=1,c.triggerAllConditions.rows.length||c.getTriggerAllConditions(),r.success({title:"AllCondition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETtrigger"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrigger",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){g?a(function(){g=!1}):(t||(v=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=v),c.getTriggerAllConditions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.tools").controller("TriggerAllConditionsController",e)}(),function(){"use strict";function e(e,t,n,a,o,i,s,r,l,d,c,m,u,p,g){var v=this;v.currentUser=m.getCurrentUser(),v.errors=[],v.setting=p,v.license=u,v.crudPermissions=g,v.hasModulePermissions={},v.passwordPattern=v.setting&&v.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",v.title="TOOLS.EDIT_ALLCONDITION",v.allCondition=angular.copy(l),v.allconditions=r,v.newAllCondition=!1,v.trigger=angular.copy(d),v.allCondition||(v.allCondition={field:"queue",operator:"equals",value:"abandoned",value:"opened",value:"in"},v.title="TOOLS.NEW_ALLCONDITION",v.newAllCondition=!0),t.params.id&&(v.allCondition.TriggerAllId=t.params.id),v.addNewAllCondition=function(){v.errors=[],c.trigger.addAllCondition({id:t.params.id},v.allCondition).$promise.then(function(e){v.allconditions.unshift(e.toJSON()),s.success({title:"AllCondition properly created",msg:v.allCondition.name?v.allCondition.name+" has been created!":""}),A(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.condition.save"}];for(var t=0;t<e.data.errors.length;t+=1)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.saveAllCondition=function(){v.errors=[],c.condition.update({id:v.allCondition.id},v.allCondition).$promise.then(function(e){var t=_.find(v.allconditions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),s.success({title:"AllCondition properly saved!",msg:v.allCondition.name?v.allCondition.name+" has been saved!":""}),A(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.condition.update"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteAllCondition=function(e){v.errors=[];var t=a.confirm().title("Are you sure?").content("The allCondition will be deleted.").ariaLabel("Delete AllCondition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.condition.delete({id:v.allCondition.id}).$promise.then(function(){_.remove(v.allconditions,{id:v.allCondition.id}),s.success({title:"AllCondition properly deleted!",msg:(v.allCondition.name||"allCondition")+" has been deleted!"}),A(v.allCondition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.condition.delete"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},v.getDateFromString=function(e){return null===e?void 0:new Date(e)},v.closeDialog=A,m.hasRole("admin")?c.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.chatAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CHATACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.chatAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:502}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.chatAccounts,{id:e.resourceId})}),n=null;if(v.allCondition&&(n=_.find(v.chatAccounts,{id:Number(v.allCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.chatAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.chatAccounts=t})}else{var n=[],a=null;v.allCondition&&(a=_.find(v.chatAccounts,{id:Number(v.allCondition.value)}));for(var i=0;i<v.chatAccounts.length;i++)a&&v.chatAccounts[i].id===a.id&&(v.chatAccounts[i].canSelect=!1,n.push(v.chatAccounts[i]));v.chatAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.mailAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MAILACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.mailAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:602}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.mailAccounts,{id:e.resourceId})}),n=null;if(v.allCondition&&(n=_.find(v.mailAccounts,{id:Number(v.allCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.mailAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.mailAccounts=t})}else{var n=[],a=null;v.allCondition&&(a=_.find(v.mailAccounts,{id:Number(v.allCondition.value)}));for(var i=0;i<v.mailAccounts.length;i++)a&&v.mailAccounts[i].id===a.id&&(v.mailAccounts[i].canSelect=!1,n.push(v.mailAccounts[i]));v.mailAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.smsAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SMSACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.smsAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:702}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.smsAccounts,{id:e.resourceId})}),n=null;if(v.allCondition&&(n=_.find(v.smsAccounts,{id:Number(v.allCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.smsAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.smsAccounts=t})}else{var n=[],a=null;v.allCondition&&(a=_.find(v.smsAccounts,{id:Number(v.allCondition.value)}));for(var i=0;i<v.smsAccounts.length;i++)a&&v.smsAccounts[i].id===a.id&&(v.smsAccounts[i].canSelect=!1,n.push(v.smsAccounts[i]));v.smsAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.faxAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FAXACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.faxAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:902}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.faxAccounts,{id:e.resourceId})}),n=null;if(v.allCondition&&(n=_.find(v.faxAccounts,{id:Number(v.allCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.faxAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.faxAccounts=t})}else{var n=[],a=null;v.allCondition&&(a=_.find(v.faxAccounts,{id:Number(v.allCondition.value)}));for(var i=0;i<v.faxAccounts.length;i++)a&&v.faxAccounts[i].id===a.id&&(v.faxAccounts[i].canSelect=!1,n.push(v.faxAccounts[i]));v.faxAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.openchannelAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OPENCHANNELACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.openchannelAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:802}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.openchannelAccounts,{id:e.resourceId})}),n=null;if(v.allCondition&&(n=_.find(v.openchannelAccounts,{id:Number(v.allCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.openchannelAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.openchannelAccounts=t})}else{var n=[],a=null;v.allCondition&&(a=_.find(v.openchannelAccounts,{id:Number(v.allCondition.value)}));for(var i=0;i<v.openchannelAccounts.length;i++)a&&v.openchannelAccounts[i].id===a.id&&(v.openchannelAccounts[i].canSelect=!1,n.push(v.openchannelAccounts[i]));v.openchannelAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=[{id:401,type:"inbound"},{id:1501,type:"outbound"}],f=null;m.hasRole("admin")?c.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){v.queues=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){f=e.rows||[]}).then(function(){for(var e=[],t=0;t<h.length;t++)e.push(c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:h[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<h.length;a++){var i=_.find(t,["sectionId",h[a].id]);if(i)if(i.autoAssociation){var s=[];f.forEach(function(e){e.type===h[a].type&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(c.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;v.allCondition&&(n=_.find(f,{name:v.allCondition.value}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&f.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),v.queues=t}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){v.outboundRoutes=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OUTBOUNDROUTES",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){v.outboundRoutes=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:403}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.outboundRoutes,{id:e.resourceId})}),n=null;if(v.allCondition&&(n=_.find(v.outboundRoutes,{id:Number(v.allCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.outboundRoutes,{id:n.id});a.canSelect=!1,t.push(a)}v.outboundRoutes=t})}else{var n=[],a=null;v.allCondition&&(a=_.find(v.outboundRoutes,{id:Number(v.allCondition.value)}));for(var i=0;i<v.outboundRoutes.length;i++)a&&v.outboundRoutes[i].id===a.id&&(v.outboundRoutes[i].canSelect=!1,n.push(v.outboundRoutes[i]));v.outboundRoutes=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})});h=[{id:202,role:"agent"}];var b=null;function A(e){a.hide(e)}m.hasRole("admin")?c.user.get({fields:"id,name,fullname",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){v.agents=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.user.get({fields:"id,name,fullname",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){b=e.rows||[]}).then(function(){for(var e=[],t=0;t<h.length;t++)e.push(c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:h[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<h.length;a++){var i=_.find(t,["sectionId",h[a].id]);if(i)if(i.autoAssociation){var s=[];b.forEach(function(e){e.role===h[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(c.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;v.allCondition&&(n=_.find(b,{name:v.allCondition.value}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&b.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),v.agents=t}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","allconditions","allCondition","trigger","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditAllConditionDialogController",e)}(),function(){"use strict";function e(e,t,n,o,a,i,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.trigger={},c.triggerAnyConditions={count:0,rows:[]},c.selectedTriggerAnyConditions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,field,operator,value",limit:10,page:1},c.arrayfield=_.keyBy([{option:"Queue",value:"'queue'",ngIf:"vm.trigger.channel == 'voice'"},{option:"Call_Status",value:"'lastevent'",ngIf:"vm.trigger.channel == 'voice'"},{option:"OutboundRoute",value:"'routeId'",ngIf:"vm.trigger.channel == 'voice'"},{option:"Agent",value:"'name'",ngIf:"vm.trigger.channel == 'voice'"},{option:"Account",value:"'account'",ngIf:"vm.trigger.channel != 'voice'"},{option:"Interaction",value:"'interaction'",ngIf:"vm.trigger.channel != 'voice'"},{option:"Message",value:"'message'",ngIf:"vm.trigger.channel != 'voice'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.arrayoperator=_.keyBy([{option:"Equals",value:"'equals'"},{option:"Not_Equals",value:"'not_equals'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.callStatusValues=_.keyBy([{option:"Abandon",value:"'abandoned'"},{option:"Hangup",value:"'complete'"},{option:"Reject",value:"'rejected'"},{option:"Ring",value:"'called'"},{option:"Answer",value:"'connect'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.interactionStatusValues=_.keyBy([{option:"Opened",value:"'opened'"},{option:"Closed",value:"'closed'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.messageStatusValues=_.keyBy([{option:"Incoming",value:"'in'"},{option:"Outgoing",value:"'out'"},{option:"Accepted",value:"'accept'"},{option:"Rejected",value:"'reject'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.trigger=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.trigger.id,c.query.TriggerAnyId=c.trigger.id,c.getTriggerAnyConditions()},c.deleteConfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the anyCondition?").htmlContent("<b>"+(e.name||"anyCondition")+"</b> will be deleted.").ariaLabel("delete anyCondition").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){f(e)},function(){console.log("CANCEL")})},c.success=h,c.getTriggerAnyConditions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getAnyConditions(c.query,h).$promise},c.createOrEditTriggerAnyCondition=function(e,t){i.show({controller:"CreateOrEditAnyConditionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/triggers/edit/anyconditions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{trigger:c.trigger,anyCondition:t,anyconditions:c.triggerAnyConditions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedTriggerAnyConditions=function(){var e=angular.copy(c.selectedTriggerAnyConditions);return c.selectedTriggerAnyConditions=[],e},c.deleteTriggerAnyCondition=f,c.deleteSelectedTriggerAnyConditions=function(e){var t=i.confirm().title("Are you sure want to delete the selected anyconditions?").htmlContent("<b>"+c.selectedTriggerAnyConditions.length+" selected</b> will be deleted.").ariaLabel("delete anyconditions").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){c.selectedTriggerAnyConditions.forEach(function(e){f(e)}),c.selectedTriggerAnyConditions=[]})},d.hasRole("admin")?l.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.chatAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CHATACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.chatAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:502}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.chatAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.chatAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.chatAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.chatAccounts=n})}else{var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.chatAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.chatAccounts.length;i++){_.some(a,{id:c.chatAccounts[i].id})&&(c.chatAccounts[i].canSelect=!1,n.push(c.chatAccounts[i]))}c.chatAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.mailAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MAILACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.mailAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:602}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.mailAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.mailAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.mailAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.mailAccounts=n})}else{var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.mailAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.mailAccounts.length;i++){_.some(a,{id:c.mailAccounts[i].id})&&(c.mailAccounts[i].canSelect=!1,n.push(c.mailAccounts[i]))}c.mailAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.smsAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SMSACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.smsAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:702}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.smsAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.smsAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.smsAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.smsAccounts=n})}else{var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.smsAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.smsAccounts.length;i++){_.some(a,{id:c.smsAccounts[i].id})&&(c.smsAccounts[i].canSelect=!1,n.push(c.smsAccounts[i]))}c.smsAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.faxAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FAXACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.faxAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:902}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.faxAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.faxAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.faxAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.faxAccounts=n})}else{var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.faxAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.faxAccounts.length;i++){_.some(a,{id:c.faxAccounts[i].id})&&(c.faxAccounts[i].canSelect=!1,n.push(c.faxAccounts[i]))}c.faxAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.openchannelAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OPENCHANNELACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.openchannelAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:802}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.openchannelAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.openchannelAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.openchannelAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.openchannelAccounts=n})}else{var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.openchannelAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.openchannelAccounts.length;i++){_.some(a,{id:c.openchannelAccounts[i].id})&&(c.openchannelAccounts[i].canSelect=!1,n.push(c.openchannelAccounts[i]))}c.openchannelAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=[{id:401,type:"inbound"},{id:1501,type:"outbound"}],u=null;d.hasRole("admin")?l.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){c.queues=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){u=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];u.forEach(function(e){e.type===m[a].type&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(l.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("queue"===e.field){var t=_.find(u,{name:e.value});a.push(t)}});for(var t=0;t<e.length;t++){(e[t].rows||[]).forEach(function(e){n.push(e)})}_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["resourceId",e.id])){var t=_.find(u,{id:e.id});t.canSelect=!1,n.push(t)}}),c.queues=n}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){c.outboundRoutes=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OUTBOUNDROUTES",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){c.outboundRoutes=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:403}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.outboundRoutes,{id:e.resourceId})}),a=null;a=[],c.triggerAnyConditions.rows.forEach(function(e){if("routeId"===e.field){var t=_.find(c.outboundRoutes,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.outboundRoutes,{id:e.id});t.canSelect=!1,n.push(t)}}),c.outboundRoutes=n})}else{var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("routeId"===e.field){var t=_.find(c.outboundRoutes,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.outboundRoutes.length;i++){_.some(a,{id:c.outboundRoutes[i].id})&&(c.outboundRoutes[i].canSelect=!1,n.push(c.outboundRoutes[i]))}c.outboundRoutes=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})});m=[{id:202,role:"agent"}];var p=null;d.hasRole("admin")?l.user.get({fields:"id,name,fullname,role",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.user.get({fields:"id,name,fullname,role",sort:"name",nolimit:"true"}).$promise.then(function(e){p=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];p.forEach(function(e){e.role===m[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(l.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("agent"===e.field){var t=_.find(p,{name:e.value});a.push(t)}});for(var t=0;t<e.length;t++){(e[t].rows||[]).forEach(function(e){n.push(e)})}_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["resourceId",e.id])){var t=_.find(p,{id:e.id});t.canSelect=!1,n.push(t)}}),c.agents=n}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})});var g=!0,v=1;function h(e){c.triggerAnyConditions=e||{count:0,rows:[]}}function f(e){l.condition.delete({id:e.id}).$promise.then(function(){_.remove(c.triggerAnyConditions.rows,{id:e.id}),c.triggerAnyConditions.count-=1,c.triggerAnyConditions.rows.length||c.getTriggerAnyConditions(),r.success({title:"AnyCondition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETtrigger"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrigger",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){g?a(function(){g=!1}):(t||(v=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=v),c.getTriggerAnyConditions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.tools").controller("TriggerAnyConditionsController",e)}(),function(){"use strict";function e(e,t,n,a,o,i,s,r,l,d,c,m,u,p,g){var v=this;v.currentUser=m.getCurrentUser(),v.errors=[],v.setting=p,v.license=u,v.crudPermissions=g,v.hasModulePermissions={},v.passwordPattern=v.setting&&v.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",v.title="TOOLS.EDIT_ANYCONDITION",v.anyCondition=angular.copy(l),v.anyconditions=r,v.newAnyCondition=!1,v.trigger=angular.copy(d),v.anyCondition||(v.anyCondition={field:"queue",operator:"equals",value:"abandoned",value:"opened",value:"in"},v.title="TOOLS.NEW_ANYCONDITION",v.newAnyCondition=!0),t.params.id&&(v.anyCondition.TriggerAnyId=t.params.id),v.addNewAnyCondition=function(){v.errors=[],c.trigger.addAnyCondition({id:t.params.id},v.anyCondition).$promise.then(function(e){v.anyconditions.unshift(e.toJSON()),s.success({title:"AnyCondition properly created",msg:v.anyCondition.name?v.anyCondition.name+" has been created!":""}),A(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.condition.save"}];for(var t=0;t<e.data.errors.length;t+=1)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.saveAnyCondition=function(){v.errors=[],c.condition.update({id:v.anyCondition.id},v.anyCondition).$promise.then(function(e){var t=_.find(v.anyconditions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),s.success({title:"AnyCondition properly saved!",msg:v.anyCondition.name?v.anyCondition.name+" has been saved!":""}),A(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.condition.update"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteAnyCondition=function(e){v.errors=[];var t=a.confirm().title("Are you sure?").content("The anyCondition will be deleted.").ariaLabel("Delete AnyCondition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.condition.delete({id:v.anyCondition.id}).$promise.then(function(){_.remove(v.anyconditions,{id:v.anyCondition.id}),s.success({title:"AnyCondition properly deleted!",msg:(v.anyCondition.name||"anyCondition")+" has been deleted!"}),A(v.anyCondition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.condition.delete"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},v.getDateFromString=function(e){return null===e?void 0:new Date(e)},v.closeDialog=A,m.hasRole("admin")?c.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.chatAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CHATACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.chatAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:502}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.chatAccounts,{id:e.resourceId})}),n=null;if(v.anyCondition&&(n=_.find(v.chatAccounts,{id:Number(v.anyCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.chatAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.chatAccounts=t})}else{var n=[],a=null;v.anyCondition&&(a=_.find(v.chatAccounts,{id:Number(v.anyCondition.value)}));for(var i=0;i<v.chatAccounts.length;i++)a&&v.chatAccounts[i].id===a.id&&(v.chatAccounts[i].canSelect=!1,n.push(v.chatAccounts[i]));v.chatAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.mailAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MAILACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.mailAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:602}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.mailAccounts,{id:e.resourceId})}),n=null;if(v.anyCondition&&(n=_.find(v.mailAccounts,{id:Number(v.anyCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.mailAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.mailAccounts=t})}else{var n=[],a=null;v.anyCondition&&(a=_.find(v.mailAccounts,{id:Number(v.anyCondition.value)}));for(var i=0;i<v.mailAccounts.length;i++)a&&v.mailAccounts[i].id===a.id&&(v.mailAccounts[i].canSelect=!1,n.push(v.mailAccounts[i]));v.mailAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.smsAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SMSACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.smsAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:702}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.smsAccounts,{id:e.resourceId})}),n=null;if(v.anyCondition&&(n=_.find(v.smsAccounts,{id:Number(v.anyCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.smsAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.smsAccounts=t})}else{var n=[],a=null;v.anyCondition&&(a=_.find(v.smsAccounts,{id:Number(v.anyCondition.value)}));for(var i=0;i<v.smsAccounts.length;i++)a&&v.smsAccounts[i].id===a.id&&(v.smsAccounts[i].canSelect=!1,n.push(v.smsAccounts[i]));v.smsAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.faxAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FAXACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.faxAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:902}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.faxAccounts,{id:e.resourceId})}),n=null;if(v.anyCondition&&(n=_.find(v.faxAccounts,{id:Number(v.anyCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.faxAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.faxAccounts=t})}else{var n=[],a=null;v.anyCondition&&(a=_.find(v.faxAccounts,{id:Number(v.anyCondition.value)}));for(var i=0;i<v.faxAccounts.length;i++)a&&v.faxAccounts[i].id===a.id&&(v.faxAccounts[i].canSelect=!1,n.push(v.faxAccounts[i]));v.faxAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.openchannelAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OPENCHANNELACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.openchannelAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:802}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.openchannelAccounts,{id:e.resourceId})}),n=null;if(v.anyCondition&&(n=_.find(v.openchannelAccounts,{id:Number(v.anyCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.openchannelAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.openchannelAccounts=t})}else{var n=[],a=null;v.anyCondition&&(a=_.find(v.openchannelAccounts,{id:Number(v.anyCondition.value)}));for(var i=0;i<v.openchannelAccounts.length;i++)a&&v.openchannelAccounts[i].id===a.id&&(v.openchannelAccounts[i].canSelect=!1,n.push(v.openchannelAccounts[i]));v.openchannelAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=[{id:401,type:"inbound"},{id:1501,type:"outbound"}],f=null;m.hasRole("admin")?c.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){v.queues=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){f=e.rows||[]}).then(function(){for(var e=[],t=0;t<h.length;t++)e.push(c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:h[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<h.length;a++){var i=_.find(t,["sectionId",h[a].id]);if(i)if(i.autoAssociation){var s=[];f.forEach(function(e){e.type===h[a].type&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(c.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;v.anyCondition&&(n=_.find(f,{name:v.anyCondition.value}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&f.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),v.queues=t}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){v.outboundRoutes=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OUTBOUNDROUTES",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){v.outboundRoutes=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:403}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.outboundRoutes,{id:e.resourceId})}),n=null;if(v.anyCondition&&(n=_.find(v.outboundRoutes,{id:Number(v.anyCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.outboundRoutes,{id:n.id});a.canSelect=!1,t.push(a)}v.outboundRoutes=t})}else{var n=[],a=null;v.anyCondition&&(a=_.find(v.outboundRoutes,{id:Number(v.anyCondition.value)}));for(var i=0;i<v.outboundRoutes.length;i++)a&&v.outboundRoutes[i].id===a.id&&(v.outboundRoutes[i].canSelect=!1,n.push(v.outboundRoutes[i]));v.outboundRoutes=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})});h=[{id:202,role:"agent"}];var b=null;function A(e){a.hide(e)}m.hasRole("admin")?c.user.get({fields:"id,name,fullname,role",sort:"name",nolimit:"true"}).$promise.then(function(e){v.agents=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.user.get({fields:"id,name,fullname,role",sort:"name",nolimit:"true"}).$promise.then(function(e){b=e.rows||[]}).then(function(){for(var e=[],t=0;t<h.length;t++)e.push(c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:h[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<h.length;a++){var i=_.find(t,["sectionId",h[a].id]);if(i)if(i.autoAssociation){var s=[];b.forEach(function(e){e.role===h[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(c.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;v.anyCondition&&(n=_.find(b,{name:v.anyCondition.value}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&b.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),v.agents=t}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","anyconditions","anyCondition","trigger","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditAnyConditionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.trigger=c||e.params.trigger||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoTriggers=function(){e.go("app.tools.triggers")},u.saveTrigger=function(){r.trigger.update({id:u.trigger.id},u.trigger).$promise.then(function(){l.success({title:"Trigger updated!",msg:u.trigger.name?u.trigger.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrigger",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","trigger","userProfileSection"],angular.module("app.tools").controller("TriggerController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.triggers=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="triggers",b.listOrder="",b.listOrderAsc=null,b.selectedTriggers=[],b.query={fields:"createdAt,updatedAt,id,name,channel,status,description",sort:"-updatedAt",limit:10,page:1},b.arraychannel=_.keyBy([{option:"Voice",value:"'voice'"},{option:"Openchannel",value:"'openchannel'",ngIf:"vm.license.openchannel"},{option:"Chat",value:"'chat'",ngIf:"vm.license.chat"},{option:"Mail",value:"'mail'",ngIf:"vm.license.mail"},{option:"Sms",value:"'sms'",ngIf:"vm.license.messaging"},{option:"Fax",value:"'fax'",ngIf:"vm.license.fax"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.tools.triggers.edit",{id:e.id,trigger:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("trigger")+"?").htmlContent("<b>"+(e.name||"trigger")+"</b> will be deleted.").ariaLabel("delete trigger").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getTriggers=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.trigger.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Triggers",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditTrigger=function(e,t){i.show({controller:"CreateOrEditTriggerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/triggers/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{trigger:t,triggers:b.triggers.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteTrigger=S,b.exportSelectedTriggers=function(){var e=angular.copy(b.selectedTriggers);return b.selectedTriggers=[],e},b.deleteSelectedTriggers=function(e){var t=i.confirm().title("Are you sure want to delete the selected triggers?").htmlContent("<b>"+b.selectedTriggers.length+" selected</b> will be deleted.").ariaLabel("delete Triggers").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedTriggers.forEach(function(e){S(e)}),b.selectedTriggers=[]})},b.deselectTriggers=function(){b.selectedTriggers=[]},b.selectAllTriggers=function(){b.selectedTriggers=b.triggers.rows};var A=!0,E=1;function y(e){b.triggers=e||{count:0,rows:[]}}function S(e){m.trigger.delete({id:e.id}).$promise.then(function(){_.remove(b.triggers.rows,{id:e.id}),b.triggers.count-=1,b.triggers.rows.length||b.getTriggers(),p.success({title:_.startCase("Trigger")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtrigger"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEtrigger",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getTriggers())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","triggers","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TriggersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_TRUNK",g.trunk=angular.copy(l),g.trunks=r,g.newTrunk=!1,g.trunk||(g.trunk={active:!0,type:"friend",dtmfmode:"rfc2833",qualify:"yes",t38pt_udptl:"no"},g.title="TOOLS.NEW_TRUNK",g.newTrunk=!0),g.addNewTrunk=function(){g.errors=[],d.trunk.save(g.trunk).$promise.then(function(e){g.trunks.unshift(e.toJSON()),o.success({title:"Trunk properly created",msg:g.trunk.name?g.trunk.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.trunk.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trunk.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveTrunk=function(){g.errors=[],d.trunk.update({id:g.trunk.id},g.trunk).$promise.then(function(e){var t=_.find(g.trunks,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Trunk properly saved!",msg:g.trunk.name?g.trunk.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.trunk.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trunk.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteTrunk=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The trunk will be deleted.").ariaLabel("Delete Trunk").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.trunk.delete({id:g.trunk.id}).$promise.then(function(){_.remove(g.trunks,{id:g.trunk.id}),o.success({title:"Trunk properly deleted!",msg:(g.trunk.name||"trunk")+" has been deleted!"}),v(g.trunk)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.trunk.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trunk.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","trunks","trunk","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditTrunkDialogController",e)}(),function(){"use strict";function e(t,n,a,e,i,s,o){var r=this;function l(e){t.hide(e)}r.newTrunk=!0,r.trunk=angular.copy(i),r.trunks=s,r.title=o.instant("TOOLS.CLONE_TRUNK"),i&&i.name&&(r.title+=": "+i.name),r.cloneTrunk=function(){return e.trunk.clone({id:i.id},r.trunk).$promise.then(function(e){r.trunks.unshift(e.toJSON()),a.success({title:"Trunk properly cloned",msg:r.trunk.name?r.trunk.name+" has been cloned!":""}),n.go("app.tools.trunks.edit",{id:e.id}),l(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){r.errors=e.data.errors||[{message:e.toString(),type:"api.trunk.clone"}];for(var t=0;t<e.data.errors.length;t+=1)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trunk.clone",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$mdDialog","$state","toasty","api","trunk","trunks","$translate"],angular.module("app.tools").controller("TrunkcloneController",e)}(),function(){"use strict";function e(n,e,a,i,s,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.trunk=c||n.params.trunk||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.gotogoto=function(e,t){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:411}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.voice.realtime.trunks",{}):l.info({title:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.voice.realtime.trunks",{})}},u.clonedialog=function(e,t){a.show({controller:"TrunkcloneController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/trunks/edit/clone/clone.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{trunk:e,trunks:u.trunks?u.trunks.rows:[],crudPermissions:u.crudPermissions}})},u.alert=l.info,u.gotoTrunks=function(){n.go("app.tools.trunks")},u.saveTrunk=function(){r.trunk.update({id:u.trunk.id},u.trunk).$promise.then(function(){l.success({title:"Trunk updated!",msg:u.trunk.name?u.trunk.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunk",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.trunk&&(n=_.find(u.contexts,{name:u.trunk.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","trunk","userProfileSection"],angular.module("app.tools").controller("TrunkController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.trunks=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="trunks",b.listOrder="",b.listOrderAsc=null,b.selectedTrunks=[],b.query={fields:"createdAt,updatedAt,id,name,active,host,secret,defaultuser,context,callerid,type,dtmfmode,nat,qualify,allow,insecure,call_limit,registry,description,directmedia,callcounter,fromdomain,fromuser,outboundproxy,usereqphone,trustrpid,sendrpid,encryption,port,transport,t38pt_udptl,videosupport,otherFields",sort:"-updatedAt",limit:10,page:1},b.arraytype=_.keyBy([{option:"Friend",value:"'friend'"},{option:"User",value:"'user'"},{option:"Peer",value:"'peer'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydtmfmode=_.keyBy([{option:"rfc2833",value:"'rfc2833'"},{option:"info",value:"'info'"},{option:"shortinfo",value:"'shortinfo'"},{option:"inband",value:"'inband'"},{option:"auto",value:"'auto'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraynat=_.keyBy([{option:"force_rport",value:"'force_rport'"},{option:"comedia",value:"'comedia'"},{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"never",value:"'never'"},{option:"route",value:"'route'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayqualify=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayallow=_.keyBy([{option:"ulaw",value:"'ulaw'"},{option:"alaw",value:"'alaw'"},{option:"gsm",value:"'gsm'"},{option:"g723",value:"'g723'"},{option:"g726",value:"'g726'"},{option:"g722",value:"'g722'"},{option:"g729",value:"'g729'"},{option:"ilbc",value:"'ilbc'"},{option:"opus",value:"'opus'"},{option:"h264",value:"'h264'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayinsecure=_.keyBy([{option:"port",value:"'port'"},{option:"invite",value:"'invite'"},{option:"very",value:"'very'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydirectmedia=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"nonat",value:"'nonat'"},{option:"update",value:"'update'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraycallcounter=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayusereqphone=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytrustrpid=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysendrpid=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"pai",value:"'pai'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayencryption=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytransport=_.keyBy([{option:"udp",value:"'udp'"},{option:"tcp",value:"'tcp'"},{option:"ws",value:"'ws'"},{option:"wss",value:"'wss'"},{option:"tls",value:"'tls'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayvideosupport=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Always",value:"'always'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.tools.trunks.edit",{id:e.id,trunk:e,crudPermissions:b.crudPermissions})},b.clonedialog=function(e,t){i.show({controller:"TrunkcloneController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/trunks/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{trunk:e,trunks:b.trunks?b.trunks.rows:[],crudPermissions:b.crudPermissions}})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:411}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.voice.realtime.trunks",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.voice.realtime.trunks",{})}},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("trunk")+"?").htmlContent("<b>"+(e.name||"trunk")+"</b> will be deleted.").ariaLabel("delete trunk").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getTrunks=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.trunk.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Trunks",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditTrunk=function(e,t){i.show({controller:"CreateOrEditTrunkDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/trunks/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{trunk:t,trunks:b.trunks.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteTrunk=S,b.exportSelectedTrunks=function(){var e=angular.copy(b.selectedTrunks);return b.selectedTrunks=[],e},b.deleteSelectedTrunks=function(e){var t=i.confirm().title("Are you sure want to delete the selected trunks?").htmlContent("<b>"+b.selectedTrunks.length+" selected</b> will be deleted.").ariaLabel("delete Trunks").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedTrunks.forEach(function(e){S(e)}),b.selectedTrunks=[]})},b.deselectTrunks=function(){b.selectedTrunks=[]},b.selectAllTrunks=function(){b.selectedTrunks=b.trunks.rows};var A=!0,E=1;function y(e){b.trunks=e||{count:0,rows:[]}}function S(e){m.trunk.delete({id:e.id}).$promise.then(function(){_.remove(b.trunks.rows,{id:e.id}),b.trunks.count-=1,b.trunks.rows.length||b.getTrunks(),p.success({title:_.startCase("Trunk")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtrunk"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEtrunk",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getTrunks())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","trunks","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TrunksController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_VARIABLE",g.variable=angular.copy(l),g.variables=r,g.newVariable=!1,g.variable||(g.variable={},g.title="TOOLS.NEW_VARIABLE",g.newVariable=!0),g.addNewVariable=function(){g.errors=[],d.variable.save(g.variable).$promise.then(function(e){g.variables.unshift(e.toJSON()),o.success({title:"Variable properly created",msg:g.variable.name?g.variable.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.variable.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.variable.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVariable=function(){g.errors=[],d.variable.update({id:g.variable.id},g.variable).$promise.then(function(e){var t=_.find(g.variables,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Variable properly saved!",msg:g.variable.name?g.variable.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.variable.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.variable.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVariable=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The variable will be deleted.").ariaLabel("Delete Variable").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.variable.delete({id:g.variable.id}).$promise.then(function(){_.remove(g.variables,{id:g.variable.id}),o.success({title:"Variable properly deleted!",msg:(g.variable.name||"variable")+" has been deleted!"}),v(g.variable)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.variable.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.variable.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","variables","variable","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditVariableDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.variables=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="variables",b.listOrder="",b.listOrderAsc=null,b.selectedVariables=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditVariableDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/variables/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{variable:e,variables:b.variables.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("variable")+"?").htmlContent("<b>"+(e.name||"variable")+"</b> will be deleted.").ariaLabel("delete variable").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getVariables=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.variable.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Variables",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditVariable=function(e,t){i.show({controller:"CreateOrEditVariableDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/variables/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{variable:t,variables:b.variables.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteVariable=S,b.exportSelectedVariables=function(){var e=angular.copy(b.selectedVariables);return b.selectedVariables=[],e},b.deleteSelectedVariables=function(e){var t=i.confirm().title("Are you sure want to delete the selected variables?").htmlContent("<b>"+b.selectedVariables.length+" selected</b> will be deleted.").ariaLabel("delete Variables").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedVariables.forEach(function(e){S(e)}),b.selectedVariables=[]})},b.deselectVariables=function(){b.selectedVariables=[]},b.selectAllVariables=function(){b.selectedVariables=b.variables.rows};var A=!0,E=1;function y(e){b.variables=e||{count:0,rows:[]}}function S(e){m.variable.delete({id:e.id}).$promise.then(function(){_.remove(b.variables.rows,{id:e.id}),b.variables.count-=1,b.variables.rows.length||b.getVariables(),p.success({title:_.startCase("Variable")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvariable"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvariable",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getVariables())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","variables","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("VariablesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VIDEO.EDIT_SCREENRECORDING",g.screenRecording=angular.copy(l),g.screenRecordings=r,g.newscreenRecording=!1,g.screenRecording||(g.screenRecording={},g.title="VIDEO.NEW_SCREENRECORDING",g.newscreenRecording=!0),g.addNewscreenRecording=function(){g.errors=[],d.screenRecording.save(g.screenRecording).$promise.then(function(e){g.screenRecordings.unshift(e.toJSON()),o.success({title:"screenRecording properly created",msg:g.screenRecording.name?g.screenRecording.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.screenRecording.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.screenRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.savescreenRecording=function(){g.errors=[],d.screenRecording.update({id:g.screenRecording.id},g.screenRecording).$promise.then(function(e){var t=_.find(g.screenRecordings,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"screenRecording properly saved!",msg:g.screenRecording.name?g.screenRecording.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.screenRecording.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.screenRecording.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deletescreenRecording=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The screenRecording will be deleted.").ariaLabel("Delete screenRecording").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.screenRecording.delete({id:g.screenRecording.id}).$promise.then(function(){_.remove(g.screenRecordings,{id:g.screenRecording.id}),o.success({title:"screenRecording properly deleted!",msg:(g.screenRecording.name||"screenRecording")+" has been deleted!"}),v(g.screenRecording)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.screenRecording.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.screenRecording.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,d.user.get({fields:"id,name,fullname",sort:"name",nolimit:"true"}).$promise.then(function(e){g.users=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERS",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","screenRecordings","screenRecording","api","Auth","license","setting","crudPermissions"],angular.module("app.video").controller("CreateOrEditscreenRecordingDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c,m=this;if(m.loading=!1,m.recording=Object.assign({},i),m.route="screenRecording",m.element=l,m.actionOptions=Object.assign({},s),m.path=r,m.label=o,m.app="video",m.model="screenRecording",console.log("TCL: vm.path",m.path),console.log("TCL: vm.recording[vm.path]",m.recording[m.path]),m.filename=-1<m.recording[m.path].indexOf("/")?m.recording[m.path].substring(m.recording[m.path].lastIndexOf("/")+1):-1<m.recording[m.path].indexOf("\\")?m.recording[m.path].substring(m.recording[m.path].lastIndexOf("\\")+1):m.recording[m.path],m.format=!1,_.isNil(m.recording.format)&&(m.recording.format=m.filename.slice(m.filename.lastIndexOf("."))),(".wav"===m.recording.format&&"audio"===m.element||".mp4"===m.recording.format&&"video"===m.element)&&(m.format=!0),m.found=!0,m.format&&(c=d.defer(),a.screenRecording.download({id:m.recording.id,path:String(m.path)}).$promise.then(function(e){m.format=!0,m.found=!0,c.resolve()}).catch(function(e){console.log("err"),m.format=!1,m.found=!1,c.resolve()}),c.promise),!_.isNil(s.properties)&&s.properties){if(m.properties=Object.assign({},i),Object.keys(i).forEach(function(e){String(e[0].toUpperCase())===String(e[0])&&delete m.properties[e]}),m.propertiesDefault={},!_.isNil(s.propertiesList)&&0<s.propertiesList.length){m.propertiesDefault=Object.assign({},i);var u=s.propertiesList,p=Object.keys(i),g=!0;p.forEach(function(t){g=!0,u.forEach(function(e){String(t)===String(e)&&(g=!1)}),g&&delete m.propertiesDefault[t]}),m.properties=m.propertiesDefault}if(!_.isNil(s.extraData)&&0<s.extraData.length){m.propertiesExtra={};for(var v=s.extraData,h=0;h<v.length;h++)for(var f=v[h].values,b=v[h].model,A=0;A<f.length;A++)m.propertiesExtra[f[A].text]=i[b][f[A].key];m.properties=Object.assign({},m.propertiesDefault,m.propertiesExtra)}}m.closeDialog=function(){t.hide()}}e.$inject=["$scope","$mdDialog","toasty","api","recording","actionOptions","label","varPath","elementTag","$q"],angular.module("app.video").controller("screenRecordingplayController",e)}(),function(){"use strict";function e(e,t,n,a,r,l,i,o,s,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.screenRecordings=s||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="screenRecordings",b.listOrder="",b.listOrderAsc=null,b.selectedScreenRecordings=[],b.query={fields:"createdAt,updatedAt,id,interactionid,channel,format,value,rating,UserId,duration,startedAt,closedAt",includeAll:"true",sort:"-updatedAt",limit:10,page:1},b.localizationMap=f,b.pickerModel={dateStart:null},b.playrecording=function(e,t,n,a,i){var s={route:"screenRecording",name:"screenRecordings",model:"screenRecording",singular:"screenRecording"},a=String(a),o=String(n);console.log("TCL:  path",String(n)),r.show({controller:"screenRecordingplayController",controllerAs:"vm",templateUrl:"app/main/apps/video/views/screenRecordings/partialViews/play.html",parent:angular.element(l.body),targetEvent:t,clickOutsideToClose:!0,locals:{recording:e,recordings:b.screenRecordings.rows,license:b.license,setting:null,item:s,actionOptions:{upperTitle:!1,lowerTitle:!0,properties:!0,propertiesIcon:"icon-video",propertiesList:["format","interactionid","duration","startedAt","closedAt","createdAt"],extraData:[{model:"User",values:[{key:"name",text:"agentname"}]}]},label:a,varPath:o,elementTag:String(i)}})},b.downloadfile2=function(e,t){var n=!1,a=_.isNil(e.format)?e.value.substring(e.value.lastIndexOf(".")):e.format;n=".mp4"===a;var s=-1<e.value.lastIndexOf("/")?e.value.substring(e.value.lastIndexOf("/")+1):-1<e.value.lastIndexOf("\\")?e.value.substring(e.value.lastIndexOf("\\")+1):e.value;return m.screenRecording.download({id:e.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=s;var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else"404"===String(e.status)&&!1===n?p.info({title:o.instant("VIDEO.CANT_DOWNLOAD_THIS_FILE"),msg:o.instant("VIDEO.WRONG_EXTENSION")}):"404"===String(e.status)?p.info({title:o.instant("VIDEO.CANT_DOWNLOAD_THIS_FILE"),msg:o.instant("VIDEO.FILE_NOT_FOUND")}):p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.screenRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.deleteconfirm=function(e,t){var n=r.confirm().title("Are you sure want to delete the "+_.startCase("screenRecording")+"?").htmlContent("<b>"+(e.name||"screenRecording")+"</b> will be deleted.").ariaLabel("delete screenRecording").targetEvent(t).ok("OK").cancel("CANCEL");r.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getScreenRecordings=function(){b.pickerModel.dateStart?b.query.createdAt={$gte:moment(b.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(b.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:b.query.createdAt=void 0;b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.screenRecording.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ScreenRecordings",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditscreenRecording=function(e,t){r.show({controller:"CreateOrEditscreenRecordingDialogController",controllerAs:"vm",templateUrl:"app/main/apps/video/views/screenRecordings/create/dialog.html",parent:angular.element(l.body),targetEvent:e,clickOutsideToClose:!0,locals:{screenRecording:t,screenRecordings:b.screenRecordings.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deletescreenRecording=S,b.exportSelectedScreenRecordings=function(){var e=angular.copy(b.selectedScreenRecordings);return b.selectedScreenRecordings=[],e},b.deleteSelectedScreenRecordings=function(e){var t=r.confirm().title("Are you sure want to delete the selected screenRecordings?").htmlContent("<b>"+b.selectedScreenRecordings.length+" selected</b> will be deleted.").ariaLabel("delete screenRecordings").targetEvent(e).ok("OK").cancel("CANCEL");r.show(t).then(function(){b.selectedScreenRecordings.forEach(function(e){S(e)}),b.selectedScreenRecordings=[]})},b.deselectScreenRecordings=function(){b.selectedScreenRecordings=[]},b.selectAllScreenRecordings=function(){b.selectedScreenRecordings=b.screenRecordings.rows},b.convertDuration=function(e){var t=Math.floor(e/1e3%60),n=Math.floor(e/6e4%60),a=Math.floor(e/36e5%24),i=a<10?"0"+String(a):String(a),s=n<10?"0"+String(n):String(n),o=t<10?"0"+String(t):String(t);return i+":"+s+":"+o},b.clearDateFilter=function(){b.pickerModel={dateStart:null},b.getScreenRecordings()},m.user.get({fields:"id,name,fullname",sort:"name",nolimit:"true"}).$promise.then(function(e){b.users=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERS",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.screenRecordings=e||{count:0,rows:[]}}function S(e){m.screenRecording.delete({id:e.id}).$promise.then(function(){_.remove(b.screenRecordings.rows,{id:e.id}),b.screenRecordings.count-=1,b.screenRecordings.rows.length||b.getScreenRecordings(),p.success({title:_.startCase("screenRecording")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEscreenRecording"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEscreenRecording",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?i(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getScreenRecordings())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","screenRecordings","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.video").controller("ScreenRecordingsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.chanSpies=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="chanSpies",b.listOrder="",b.listOrderAsc=null,b.selectedChanSpies=[],b.query={fields:"createdAt,updatedAt,id,name,prefix,options,auth,password,record,recordingFormat,description",sort:"-updatedAt",limit:10,page:1},b.arrayoptions=_.keyBy([{option:"b: Only spy on channels involved in a bridged call.",value:"'b'"},{option:"B: Instead of whispering on a single channel barge in on both channels involved in the call.",value:"'B'"},{option:"E: Exit when the spied-on channel hangs up.",value:"'E'"},{option:"o: Only listen to audio coming from this channel.",value:"'o'"},{option:"q: Don't play a beep when beginning to spy on a channel, or speak the selected channel name.",value:"'q'"},{option:"s: Skip the playback of the channel type (i.e. SIP, IAX, etc) when speaking the selected channel name.",value:"'s'"},{option:"S: Stop when no more channels are left to spy on.",value:"'S'"},{option:"w: Enable whisper mode, so the spying channel can talk to the spied-on channel.",value:"'w'"},{option:"W: Enable private whisper mode, so the spying channel can talk to the spied-on channel but cannot listen to that channel.",value:"'W'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayrecordingFormat=_.keyBy([{option:"wav",value:"'wav'"},{option:"gsm",value:"'gsm'"},{option:"wav49",value:"'WAV'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editdialog=function(e,t){i.show({controller:"CreateOrEditchanSpyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/chanSpies/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{chanSpy:e,chanSpies:b.chanSpies.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("chanSpy")+"?").htmlContent("<b>"+(e.name||"chanSpy")+"</b> will be deleted.").ariaLabel("delete chanSpy").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getChanSpies=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceChanSpy.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ChanSpies",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditchanSpy=function(e,t){i.show({controller:"CreateOrEditchanSpyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/chanSpies/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chanSpy:t,chanSpies:b.chanSpies.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deletechanSpy=S,b.exportSelectedChanSpies=function(){var e=angular.copy(b.selectedChanSpies);return b.selectedChanSpies=[],e},b.deleteSelectedChanSpies=function(e){var t=i.confirm().title("Are you sure want to delete the selected chanSpies?").htmlContent("<b>"+b.selectedChanSpies.length+" selected</b> will be deleted.").ariaLabel("delete chanSpys").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedChanSpies.forEach(function(e){S(e)}),b.selectedChanSpies=[]})},b.deselectChanSpies=function(){b.selectedChanSpies=[]},b.selectAllChanSpies=function(){b.selectedChanSpies=b.chanSpies.rows};var A=!0,E=1;function y(e){b.chanSpies=e||{count:0,rows:[]}}function S(e){m.voiceChanSpy.delete({id:e.id}).$promise.then(function(){_.remove(b.chanSpies.rows,{id:e.id}),b.chanSpies.count-=1,b.chanSpies.rows.length||b.getChanSpies(),p.success({title:_.startCase("chanSpy")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceChanSpy"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceChanSpy",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getChanSpies())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","chanSpies","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("ChanSpiesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_CHANSPY",g.chanSpy=angular.copy(l),g.chanSpies=r,g.newchanSpy=!1,g.chanSpy||(g.chanSpy={recordingFormat:"wav"},g.title="VOICE.NEW_CHANSPY",g.newchanSpy=!0),g.addNewchanSpy=function(){g.errors=[],d.voiceChanSpy.save(g.chanSpy).$promise.then(function(e){g.chanSpies.unshift(e.toJSON()),o.success({title:"chanSpy properly created",msg:g.chanSpy.name?g.chanSpy.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceChanSpy.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceChanSpy.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.savechanSpy=function(){g.errors=[],d.voiceChanSpy.update({id:g.chanSpy.id},g.chanSpy).$promise.then(function(e){var t=_.find(g.chanSpies,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"chanSpy properly saved!",msg:g.chanSpy.name?g.chanSpy.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceChanSpy.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceChanSpy.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deletechanSpy=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The chanSpy will be deleted.").ariaLabel("Delete chanSpy").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceChanSpy.delete({id:g.chanSpy.id}).$promise.then(function(){_.remove(g.chanSpies,{id:g.chanSpy.id}),o.success({title:"chanSpy properly deleted!",msg:(g.chanSpy.name||"chanSpy")+" has been deleted!"}),v(g.chanSpy)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceChanSpy.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceChanSpy.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","chanSpies","chanSpy","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditchanSpyDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.contexts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="contexts",b.listOrder="",b.listOrderAsc=null,b.selectedContexts=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",defaultEntry:"false",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditContextDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/contexts/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{context:e,contexts:b.contexts.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("context")+"?").htmlContent("<b>"+(e.name||"context")+"</b> will be deleted.").ariaLabel("delete context").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getContexts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceContext.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Contexts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditContext=function(e,t){i.show({controller:"CreateOrEditContextDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/contexts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{context:t,contexts:b.contexts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteContext=S,b.exportSelectedContexts=function(){var e=angular.copy(b.selectedContexts);return b.selectedContexts=[],e},b.deleteSelectedContexts=function(e){var t=i.confirm().title("Are you sure want to delete the selected contexts?").htmlContent("<b>"+b.selectedContexts.length+" selected</b> will be deleted.").ariaLabel("delete Contexts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedContexts.forEach(function(e){S(e)}),b.selectedContexts=[]})},b.deselectContexts=function(){b.selectedContexts=[]},b.selectAllContexts=function(){b.selectedContexts=b.contexts.rows};var A=!0,E=1;function y(e){b.contexts=e||{count:0,rows:[]}}function S(e){m.voiceContext.delete({id:e.id}).$promise.then(function(){_.remove(b.contexts.rows,{id:e.id}),b.contexts.count-=1,b.contexts.rows.length||b.getContexts(),p.success({title:_.startCase("Context")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceContext"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceContext",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getContexts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","contexts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("ContextsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_CONTEXT",g.context=angular.copy(l),g.contexts=r,g.newContext=!1,g.context||(g.context={},g.title="VOICE.NEW_CONTEXT",g.newContext=!0),g.addNewContext=function(){g.errors=[],d.voiceContext.save(g.context).$promise.then(function(e){g.contexts.unshift(e.toJSON()),o.success({title:"Context properly created",msg:g.context.name?g.context.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceContext.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceContext.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveContext=function(){g.errors=[],d.voiceContext.update({id:g.context.id},g.context).$promise.then(function(e){var t=_.find(g.contexts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Context properly saved!",msg:g.context.name?g.context.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceContext.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceContext.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteContext=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The context will be deleted.").ariaLabel("Delete Context").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceContext.delete({id:g.context.id}).$promise.then(function(){_.remove(g.contexts,{id:g.context.id}),o.success({title:"Context properly deleted!",msg:(g.context.name||"context")+" has been deleted!"}),v(g.context)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceContext.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceContext.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","contexts","context","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditContextDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_INBOUNDROUTE",g.inboundroute=angular.copy(l),g.inboundroutes=r,g.newInboundRoute=!1,g.inboundroute||(g.inboundroute={appdata:"Inbound Call",type:"inbound",context:"from-voip-provider"},g.title="VOICE.NEW_INBOUNDROUTE",g.newInboundRoute=!0),g.addNewInboundRoute=function(){g.errors=[],d.voiceExtension.save(g.inboundroute).$promise.then(function(e){g.inboundroutes.unshift(e.toJSON()),o.success({title:"InboundRoute properly created",msg:g.inboundroute.name?g.inboundroute.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveInboundRoute=function(){g.errors=[],d.voiceExtension.update({id:g.inboundroute.id},g.inboundroute).$promise.then(function(e){var t=_.find(g.inboundroutes,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"InboundRoute properly saved!",msg:g.inboundroute.name?g.inboundroute.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteInboundRoute=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The inboundroute will be deleted.").ariaLabel("Delete InboundRoute").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceExtension.delete({id:g.inboundroute.id}).$promise.then(function(){_.remove(g.inboundroutes,{id:g.inboundroute.id}),o.success({title:"InboundRoute properly deleted!",msg:(g.inboundroute.name||"inboundroute")+" has been deleted!"}),v(g.inboundroute)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.contexts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.contexts=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.contexts,{id:e.resourceId})}),n=null;if(g.inboundroute&&(n=_.find(g.contexts,{name:g.inboundroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(g.contexts,{id:n.id});a.canSelect=!1,t.push(a)}g.contexts=t}):d.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){g.contexts=e.rows||[]})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","inboundroutes","inboundroute","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditInboundRouteDialogController",e)}(),function(){"use strict";function e(m,i,a,s,e){var u=this;function t(e,t){if(u.inboundrouteApps.rows.length){var n=u.inboundrouteApps.rows[t]?u.inboundrouteApps.rows[t]:u.inboundrouteApps.rows[0];i.show({controller:"EditInboundApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/inboundroutes/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{inboundrouteApp:n,inboundroute:u.inboundroute,crudPermissions:u.crudPermissions}}).then(function(e){e&&(e.id?u.inboundrouteApps.rows[t]=e:u.inboundrouteApps.rows.splice(t,0,e),o())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function o(){var e=["queue","playback"],t=2,n=[];n.push({type:"inbound",app:"Set",appdata:"CDR(type)=inbound",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:t++,VoiceExtensionId:u.inboundroute.id}),n.push({type:"inbound",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:t++,VoiceExtensionId:u.inboundroute.id}),n.push({type:"inbound",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:t++,VoiceExtensionId:u.inboundroute.id}),n.push({type:"inbound",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:t++,VoiceExtensionId:u.inboundroute.id});for(var a=0,i=0;a<u.inboundrouteApps.rows.length;a++,i=0){var s=u.inboundrouteApps.rows[a],o=[],r=[];s.intervals="*,*,*,*"!==s.interval?[s.interval]:s.IntervalId?_.map(_.filter(u.intervals.rows,{IntervalId:s.IntervalId}),"interval"):[],s.context=u.inboundroute.context,s.exten=u.inboundroute.exten,s.type&&(s.type=s.type.toLowerCase()),s.hasOwnProperty("answer")&&e.includes(s.app.toLowerCase())&&"custom"!==s.appType&&(s.answer?(o.push({type:s.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-ANSWER}=0]?Answer",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id}),o.push({type:s.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-ANSWER=1",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id})):(o.push({type:s.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-PROGRESS}=0]?Progress",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id}),o.push({type:s.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-PROGRESS=1",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id})));for(var l=0;l<s.intervals.length;l++){var d=t+s.intervals.length,c=l===s.intervals.length-1?t+o.length+r.length+2:t+l+1;o.splice(l,0,{type:"inbound",app:"GotoIfTime",appdata:s.intervals[l]+"?"+u.inboundroute.context+",${EXTEN},"+d+":"+u.inboundroute.context+",${EXTEN},"+c,exten:u.inboundroute.exten,context:u.inboundroute.context,priority:t+l,VoiceExtensionId:u.inboundroute.id})}s.priority=o.length?_.last(o).priority+1:t,t=(r.length?_.last(r).priority:s.priority)+1,n=_.concat(n,o,[s],r)}n.push({type:"inbound",app:"Hangup",exten:u.inboundroute.exten,context:u.inboundroute.context,priority:t,VoiceExtensionId:u.inboundroute.id}),m.voiceExtension.addApplications({id:u.inboundroute.id},_.sortBy(n,"priority")).$promise.then(function(e){u.inboundrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){u.inboundrouteApps=e||{count:0,rows:[]}}u.currentUser=e.getCurrentUser(),u.inboundroute={},u.inboundrouteApps={count:0,rows:[]},u.selectedInboundRouteApps=[],u.crudPermissions,u.query={sort:"priority"},u.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",types:["always","custom","list"],fields:[],isApp:!1},{app:"Queue",appType:"queue",context:"from-voip-provider",type:"Inbound",appdata:",xX,,,300,,,,,",icon:"icon-apps",options:"xX",interval:"*,*,*,*",answer:!0,isApp:!0,extraApi:[{name:"sounds",field:{name:"sound",key:"save_name",prefix:"/var/opt/motion2/server/files/sounds/converted/"},route:"sound",filters:{fields:"id,name,save_name",sort:"name"},permissions:{section:1007}},{name:"queues",field:{name:"queue",key:"name"},route:"voiceQueue",filters:{type:"inbound",fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:401}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",required:!0,param:0},{title:"Options",name:"options",type:"text",param:1},{title:"Url",name:"URL",type:"text",param:2},{title:"Announce_Overrides",name:"sound",type:"apiselect",values:"sounds",value:"'/var/opt/motion2/server/files/sounds/converted/{{sound.save_name}}'",option:"sound.name",defaultValues:[{value:"''",option:"None"}],param:3},{title:"Timeout",name:"timeout",type:"number",min:0,param:4},{title:"Agi",name:"agi",type:"text",param:5},{title:"Macro",name:"macro",type:"text",param:6},{title:"GoSub",name:"gosub",type:"text",param:7},{title:"Rule",name:"rule",type:"text",param:8},{title:"Position",name:"position",type:"number",min:0,param:9},{title:"Answer",name:"answer",type:"switch",general:!0}]},{app:"Playback",appType:"playback",context:"from-voip-provider",type:"Inbound",icon:"icon-apps",interval:"*,*,*,*",answer:!0,isApp:!0,extraApi:[{name:"sounds",field:{name:"sound",key:"save_name",prefix:"/var/opt/motion2/server/files/sounds/converted/"},route:"sound",filters:{fields:"id,name,save_name",sort:"name"},permissions:{section:1007}}],fields:[{title:"Audio_Files",name:"appdata",type:"apiselect",values:"sounds",value:"'/var/opt/motion2/server/files/sounds/converted/{{appdata.save_name}}'",option:"appdata.name",required:!0,param:0},{title:"Options",name:"options",type:"text",param:1},{title:"Answer",name:"answer",type:"switch",general:!0}]},{app:"Dial",appType:"dial",context:"from-voip-provider",type:"Inbound",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,fields:[{title:"Technology/Resource",name:"tech",type:"text",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"Dial",appType:"internalDial",context:"from-voip-provider",type:"Inbound",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"users",field:{name:"user",key:"name",prefix:"SIP/"},route:"user",filters:{fields:"id,name,role",sort:"name"},permissions:{sections:[{id:202,role:"agent"},{id:203,role:"telephone"}]}}],fields:[{title:"User",name:"user",type:"apiselect",values:"users",value:"'SIP/{{user.name}}'",option:"user.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"Dial",appType:"externalDial",context:"from-voip-provider",type:"inbound",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"trunks",field:{name:"trunk",key:"name"},route:"trunk",filters:{fields:"id,name",sort:"name"},permissions:{section:1011}}],fields:[{title:"Trunk",name:"trunk",type:"apiselect",values:"trunks",value:"trunk.name",option:"trunk.name",required:!0,param:0},{title:"Phone",name:"phone",required:!0,type:"text"},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"Dial",appType:"ringGroup",context:"from-voip-provider",type:"inbound",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"users",field:{name:"multipleUsers",key:"name",prefix:"SIP/"},route:"user",filters:{fields:"id,name,role",sort:"name"},permissions:{sections:[{id:202,role:"agent"},{id:203,role:"telephone"}]}}],fields:[{title:"User",name:"multipleUsers",type:"apiselect",multiple:!0,values:"users",value:"'SIP/{{multipleUsers.name}}'",option:"multipleUsers.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"AGI",alias:"CallySquare",appType:"agi",context:"from-voip-provider",type:"inbound",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"projects",field:{name:"project",key:"name",prefix:"agi://127.0.0.1/square,"},route:"squareProject",filters:{fields:"id,name",sort:"name"},permissions:{section:1103}}],fields:[{title:"Project",name:"project",type:"apiselect",values:"projects",value:"'agi://127.0.0.1/square,{{project.name}}'",option:"project.name",required:!0,param:0}]},{app:"goto",appType:"goTo",context:"from-voip-provider",type:"Inbound",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"contexts",field:{name:"context",key:"name"},route:"voiceContext",filters:{fields:"id,name",sort:"name"},permissions:{section:405}}],fields:[{title:"Context",name:"context",type:"apiselect",values:"contexts",value:"context.name",option:"context.name",required:!0,param:0},{title:"Extension",name:"extension",type:"text",required:!0,param:1},{title:"Priority",name:"priority",type:"text",required:!0,param:2}]},{app:"hangup",appType:"hangup",context:"from-voip-provider",type:"Inbound",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Hangup_Cause",name:"appdata",type:"select",param:0,values:[{option:"HANGUPCAUSE_1",value:"'1'"},{option:"HANGUPCAUSE_16",value:"'16'"},{option:"HANGUPCAUSE_17",value:"'17'"},{option:"HANGUPCAUSE_18",value:"'18'"},{option:"HANGUPCAUSE_21",value:"'21'"},{option:"HANGUPCAUSE_22",value:"'22'"},{option:"HANGUPCAUSE_27",value:"'27'"},{option:"HANGUPCAUSE_38",value:"'38'"},{option:"HANGUPCAUSE_41",value:"'41'"}],translate:!0,required:!0,general:!0}]},{app:"Set",appType:"set",context:"from-voip-provider",type:"Inbound",separator:"=",icon:"icon-apps",interval:"*,*,*,*",extraApi:[{name:"variables",field:{name:"name",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name"},permissions:{section:1012}}],isApp:!0,fields:[{title:"Variable",name:"name",type:"apiselect",values:"variables",value:"name.name",option:"name.name",required:!0,param:0},{title:"Value",name:"value",type:"text",required:!0,param:1}]},{app:null,appType:"custom",icon:"icon-apps",type:"Inbound",interval:"*,*,*,*",isApp:!0,fields:[{title:"Application_Name",name:"app",type:"text",required:!0,param:0},{title:"Arguments",name:"appdata",type:"text",param:1}]},{app:"Voicemail",appType:"voicemail",context:"from-voip-provider",icon:"icon-apps",type:"Inbound",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"voiceMails",field:{name:"voiceMail",key:"mailbox",suffix:"@from-voicemail"},route:"voiceMail",filters:{fields:"id,mailbox",sort:"mailbox"},permissions:{section:406}}],fields:[{title:"Mailbox@Context",name:"voiceMail",type:"apiselect",values:"voiceMails",value:"'{{voiceMail.mailbox}}@from-voicemail'",option:"voiceMail.mailbox",required:!0,param:0},{title:"Options",name:"options",type:"text",param:1}]}],["app"]),{isApp:!1}),u.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},u.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){o()}},u.init=function(e,t){u.inboundroute=e,u.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},u.applications.disabled=!u.crudPermissions.canEdit,u.query.VoiceExtensionId=e.id,u.query.isApp=!0,u.query.nolimit=!0,u.getInboundRouteApps(),u.getIntervals()},u.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){u.inboundrouteApps.rows.splice(t,1),o()},function(){console.log("CANCEL")})},u.getInboundRouteApps=function(){u.promise=m.voiceExtension.get(u.query,n).$promise},u.editInboundRouteApp=t,u.editInterval=function(e,t){if(u.inboundrouteApps.rows.length){var n=u.inboundrouteApps.rows[t]?u.inboundrouteApps.rows[t]:u.inboundrouteApps.rows[0];i.show({controller:"EditInboundAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/inboundroutes/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:u.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,o())})}},u.deleteInboundRouteApp=function(e){_.remove(u.inboundrouteApps.rows,{id:e.id}),o(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},u.deleteSelectedInboundRouteApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+u.selectedInboundRouteApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){u.selectedInboundRouteApps.forEach(function(e){_.remove(u.inboundrouteApps.rows,{id:e.id})}),u.selectedInboundRouteApps=[],o()})},u.rewriteRouting=o,u.getIntervals=function(){return m.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){u.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.voice").controller("InboundRouteActionsController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.agi=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agi.appdata)switch(l.agi.appType?l.agi.appType.toLowerCase():l.agi.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agi.appdata.split(",");l.agi.key=d[0],l.agi.language=d[1],l.agi.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agi.appdata.split(",");l.agi.accesskeyid=d[0],l.agi.secretaccesskey=d[1],l.agi.lexregion=d[2],l.agi.botname=d[3],l.agi.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agi.appdata.split(",");l.agi.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agi.text=d.slice(1,d.length).join(",");break;case"message":l.agi.text=l.agi.appdata;break;case"set":l.agi.name=l.agi.appdata.split("=")[0],l.agi.value=l.agi.appdata.split("=")[1];break;case"agi":l.agi.project=l.agi.appdata;break;default:var c=l.agi.appdata.split(",");l.agi.project=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.agi.type&&"outbound"===l.agi.type.toLowerCase()&&"outbounddial"===l.agi.appType.toLowerCase()&&(l.agi.prefix=l.agi.phone?l.agi.phone.split("$")[0]:void 0,l.agi.callerId=l.agi.callerID?"CALLERID(all)="+l.agi.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.agi.type&&"outbound"===l.agi.type.toLowerCase()&&"outboundDial"===l.agi.appType&&(l.agi.phone=i.cutdigits?(l.agi.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agi.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agi.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agi.options+="U(xcally-mixmonitor-context)"):l.agi.options=l.agi.options.replace("U(xcally-mixmonitor-context)",""));if(l.agi.appType&&"custom"===l.agi.appType);else switch((l.agi.app||l.agi.appType).toLowerCase()){case"set":l.agi.appdata=l.agi.name+"="+l.agi.value;break;case"custom":break;default:e[0]=l.agi.project,l.agi.appdata=e.join(",")}m(l.agi)},l.closeDialog=m,o.hasRole("admin")?s.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.projects=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.projects=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1103}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.projects,{id:e.resourceId})}),n=null;if(l.agi&&(n=_.find(l.projects,{name:l.agi.project})),n&&!_.some(t,["id",n.id])){var a=_.find(l.projects,{id:n.id});a.canSelect=!1,t.push(a)}l.projects=t})}else{var n=[],a=null;l.agi&&(a=_.find(l.projects,{name:l.agi.project}));for(var i=0;i<l.projects.length;i++)a&&l.projects[i].id===a.id&&(l.projects[i].canSelect=!1,n.push(l.projects[i]));l.projects=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppagiDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.custom=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.custom.appdata)switch(l.custom.appType?l.custom.appType.toLowerCase():l.custom.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.custom.appdata.split(",");l.custom.key=d[0],l.custom.language=d[1],l.custom.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.custom.appdata.split(",");l.custom.accesskeyid=d[0],l.custom.secretaccesskey=d[1],l.custom.lexregion=d[2],l.custom.botname=d[3],l.custom.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.custom.appdata.split(",");l.custom.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.custom.text=d.slice(1,d.length).join(",");break;case"message":l.custom.text=l.custom.appdata;break;case"set":l.custom.name=l.custom.appdata.split("=")[0],l.custom.value=l.custom.appdata.split("=")[1];break;case"agi":l.custom.project=l.custom.appdata;break;default:var c=l.custom.appdata.split(",");l.custom.app=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.custom.appdata=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.custom.type&&"outbound"===l.custom.type.toLowerCase()&&"outbounddial"===l.custom.appType.toLowerCase()&&(l.custom.prefix=l.custom.phone?l.custom.phone.split("$")[0]:void 0,l.custom.callerId=l.custom.callerID?"CALLERID(all)="+l.custom.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.custom.type&&"outbound"===l.custom.type.toLowerCase()&&"outboundDial"===l.custom.appType&&(l.custom.phone=i.cutdigits?(l.custom.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.custom.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.custom.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.custom.options+="U(xcally-mixmonitor-context)"):l.custom.options=l.custom.options.replace("U(xcally-mixmonitor-context)",""));if(l.custom.appType&&"custom"===l.custom.appType);else switch((l.custom.app||l.custom.appType).toLowerCase()){case"set":l.custom.appdata=l.custom.name+"="+l.custom.value;break;case"custom":break;default:e[0]=l.custom.app,e[1]=l.custom.appdata,l.custom.appdata=e.join(",")}m(l.custom)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppcustomDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.dial=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.dial.appdata)switch(l.dial.appType?l.dial.appType.toLowerCase():l.dial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.dial.appdata.split(",");l.dial.key=d[0],l.dial.language=d[1],l.dial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.dial.appdata.split(",");l.dial.accesskeyid=d[0],l.dial.secretaccesskey=d[1],l.dial.lexregion=d[2],l.dial.botname=d[3],l.dial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.dial.appdata.split(",");l.dial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.dial.text=d.slice(1,d.length).join(",");break;case"message":l.dial.text=l.dial.appdata;break;case"set":l.dial.name=l.dial.appdata.split("=")[0],l.dial.value=l.dial.appdata.split("=")[1];break;case"agi":l.dial.project=l.dial.appdata;break;default:var c=l.dial.appdata.split(",");l.dial.tech=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.dial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.dial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.dial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}function m(e){t.hide(e)}l.dial.type&&"outbound"===l.dial.type.toLowerCase()&&"outbounddial"===l.dial.appType.toLowerCase()&&(l.dial.prefix=l.dial.phone?l.dial.phone.split("$")[0]:void 0,l.dial.callerId=l.dial.callerID?"CALLERID(all)="+l.dial.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.dial.type&&"outbound"===l.dial.type.toLowerCase()&&"outboundDial"===l.dial.appType&&(l.dial.phone=i.cutdigits?(l.dial.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.dial.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.dial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.dial.options+="U(xcally-mixmonitor-context)"):l.dial.options=l.dial.options.replace("U(xcally-mixmonitor-context)",""));if(l.dial.appType&&"custom"===l.dial.appType);else switch((l.dial.app||l.dial.appType).toLowerCase()){case"set":l.dial.appdata=l.dial.name+"="+l.dial.value;break;case"custom":break;default:e[0]=l.dial.tech,e[1]=l.dial.timeout,e[2]=l.dial.options,e[3]=l.dial.url,l.dial.appdata=e.join(",")}m(l.dial)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppdialDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.externaldial=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.externaldial.appdata)switch(l.externaldial.appType?l.externaldial.appType.toLowerCase():l.externaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.externaldial.appdata.split(",");l.externaldial.key=d[0],l.externaldial.language=d[1],l.externaldial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.externaldial.appdata.split(",");l.externaldial.accesskeyid=d[0],l.externaldial.secretaccesskey=d[1],l.externaldial.lexregion=d[2],l.externaldial.botname=d[3],l.externaldial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.externaldial.appdata.split(",");l.externaldial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.externaldial.text=d.slice(1,d.length).join(",");break;case"message":l.externaldial.text=l.externaldial.appdata;break;case"set":l.externaldial.name=l.externaldial.appdata.split("=")[0],l.externaldial.value=l.externaldial.appdata.split("=")[1];break;case"agi":l.externaldial.project=l.externaldial.appdata;break;default:var c=l.externaldial.appdata.split(",");l.externaldial.trunk=c[0].split("/")[1],l.externaldial.phone=c[0].split("/")[2],l.externaldial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.externaldial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.externaldial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}function m(e){t.hide(e)}l.externaldial.type&&"outbound"===l.externaldial.type.toLowerCase()&&"outbounddial"===l.externaldial.appType.toLowerCase()&&(l.externaldial.prefix=l.externaldial.phone?l.externaldial.phone.split("$")[0]:void 0,l.externaldial.callerId=l.externaldial.callerID?"CALLERID(all)="+l.externaldial.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.externaldial.type&&"outbound"===l.externaldial.type.toLowerCase()&&"outboundDial"===l.externaldial.appType&&(l.externaldial.phone=i.cutdigits?(l.externaldial.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.externaldial.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.externaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.externaldial.options+="U(xcally-mixmonitor-context)"):l.externaldial.options=l.externaldial.options.replace("U(xcally-mixmonitor-context)",""));if(l.externaldial.appType&&"custom"===l.externaldial.appType);else switch((l.externaldial.app||l.externaldial.appType).toLowerCase()){case"set":l.externaldial.appdata=l.externaldial.name+"="+l.externaldial.value;break;case"custom":break;default:e[0]=["SIP",l.externaldial.trunk,l.externaldial.phone].join("/"),e[1]=l.externaldial.timeout,e[2]=l.externaldial.options,e[3]=l.externaldial.url,l.externaldial.appdata=e.join(",")}m(l.externaldial)},l.closeDialog=m,o.hasRole("admin")?s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.trunks=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.trunks=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.trunks,{id:e.resourceId})}),n=null;if(l.externaldial&&(n=_.find(l.trunks,{name:l.externaldial.trunk})),n&&!_.some(t,["id",n.id])){var a=_.find(l.trunks,{id:n.id});a.canSelect=!1,t.push(a)}l.trunks=t})}else{var n=[],a=null;l.externaldial&&(a=_.find(l.trunks,{name:l.externaldial.trunk}));for(var i=0;i<l.trunks.length;i++)a&&l.trunks[i].id===a.id&&(l.trunks[i].canSelect=!1,n.push(l.trunks[i]));l.trunks=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppexternaldialDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.goto=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.goto.appdata)switch(l.goto.appType?l.goto.appType.toLowerCase():l.goto.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.goto.appdata.split(",");l.goto.key=d[0],l.goto.language=d[1],l.goto.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.goto.appdata.split(",");l.goto.accesskeyid=d[0],l.goto.secretaccesskey=d[1],l.goto.lexregion=d[2],l.goto.botname=d[3],l.goto.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.goto.appdata.split(",");l.goto.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.goto.text=d.slice(1,d.length).join(",");break;case"message":l.goto.text=l.goto.appdata;break;case"set":l.goto.name=l.goto.appdata.split("=")[0],l.goto.value=l.goto.appdata.split("=")[1];break;case"agi":l.goto.project=l.goto.appdata;break;default:var c=l.goto.appdata.split(",");l.goto.context=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.goto.extension=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.goto.priority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.goto.type&&"outbound"===l.goto.type.toLowerCase()&&"outbounddial"===l.goto.appType.toLowerCase()&&(l.goto.prefix=l.goto.phone?l.goto.phone.split("$")[0]:void 0,l.goto.callerId=l.goto.callerID?"CALLERID(all)="+l.goto.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.goto.type&&"outbound"===l.goto.type.toLowerCase()&&"outboundDial"===l.goto.appType&&(l.goto.phone=i.cutdigits?(l.goto.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.goto.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.goto.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.goto.options+="U(xcally-mixmonitor-context)"):l.goto.options=l.goto.options.replace("U(xcally-mixmonitor-context)",""));if(l.goto.appType&&"custom"===l.goto.appType);else switch((l.goto.app||l.goto.appType).toLowerCase()){case"set":l.goto.appdata=l.goto.name+"="+l.goto.value;break;case"custom":break;default:e[0]=l.goto.context,e[1]=l.goto.extension,e[2]=l.goto.priority,l.goto.appdata=e.join(",")}m(l.goto)},l.closeDialog=m,o.hasRole("admin")?s.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.contexts=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.contexts=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.contexts,{id:e.resourceId})}),n=null;if(l.goto&&(n=_.find(l.contexts,{name:l.goto.context})),n&&!_.some(t,["id",n.id])){var a=_.find(l.contexts,{id:n.id});a.canSelect=!1,t.push(a)}l.contexts=t}):s.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){l.contexts=e.rows||[]})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppgotoDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.hangup=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.hangup.appdata)switch(l.hangup.appType?l.hangup.appType.toLowerCase():l.hangup.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.hangup.appdata.split(",");l.hangup.key=d[0],l.hangup.language=d[1],l.hangup.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.hangup.appdata.split(",");l.hangup.accesskeyid=d[0],l.hangup.secretaccesskey=d[1],l.hangup.lexregion=d[2],l.hangup.botname=d[3],l.hangup.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.hangup.appdata.split(",");l.hangup.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.hangup.text=d.slice(1,d.length).join(",");break;case"message":l.hangup.text=l.hangup.appdata;break;case"set":l.hangup.name=l.hangup.appdata.split("=")[0],l.hangup.value=l.hangup.appdata.split("=")[1];break;case"agi":l.hangup.project=l.hangup.appdata;break;default:var c=l.hangup.appdata.split(",");l.hangup.appdata=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.hangup.type&&"outbound"===l.hangup.type.toLowerCase()&&"outbounddial"===l.hangup.appType.toLowerCase()&&(l.hangup.prefix=l.hangup.phone?l.hangup.phone.split("$")[0]:void 0,l.hangup.callerId=l.hangup.callerID?"CALLERID(all)="+l.hangup.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.hangup.type&&"outbound"===l.hangup.type.toLowerCase()&&"outboundDial"===l.hangup.appType&&(l.hangup.phone=i.cutdigits?(l.hangup.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.hangup.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.hangup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.hangup.options+="U(xcally-mixmonitor-context)"):l.hangup.options=l.hangup.options.replace("U(xcally-mixmonitor-context)",""));if(l.hangup.appType&&"custom"===l.hangup.appType);else switch((l.hangup.app||l.hangup.appType).toLowerCase()){case"set":l.hangup.appdata=l.hangup.name+"="+l.hangup.value;break;case"custom":break;default:e[0]=l.hangup.appdata,l.hangup.appdata=e.join(",")}m(l.hangup)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundApphangupDialogController",e)}(),function(){"use strict";function e(t,o,n,e,a,r,i,s){var l=this;if(l.currentUser=i.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),l.internaldial=angular.copy(e),l.crudPermissions=s,l.hasModulePermissions={},l.internaldial.appdata)switch(l.internaldial.appType?l.internaldial.appType.toLowerCase():l.internaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.internaldial.appdata.split(",");l.internaldial.key=d[0],l.internaldial.language=d[1],l.internaldial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.internaldial.appdata.split(",");l.internaldial.accesskeyid=d[0],l.internaldial.secretaccesskey=d[1],l.internaldial.lexregion=d[2],l.internaldial.botname=d[3],l.internaldial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.internaldial.appdata.split(",");l.internaldial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.internaldial.text=d.slice(1,d.length).join(",");break;case"message":l.internaldial.text=l.internaldial.appdata;break;case"set":l.internaldial.name=l.internaldial.appdata.split("=")[0],l.internaldial.value=l.internaldial.appdata.split("=")[1];break;case"agi":l.internaldial.project=l.internaldial.appdata;break;default:var c=l.internaldial.appdata.split(",");l.internaldial.user=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.internaldial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.internaldial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.internaldial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}l.internaldial.type&&"outbound"===l.internaldial.type.toLowerCase()&&"outbounddial"===l.internaldial.appType.toLowerCase()&&(l.internaldial.prefix=l.internaldial.phone?l.internaldial.phone.split("$")[0]:void 0,l.internaldial.callerId=l.internaldial.callerID?"CALLERID(all)="+l.internaldial.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.internaldial.type&&"outbound"===l.internaldial.type.toLowerCase()&&"outboundDial"===l.internaldial.appType&&(l.internaldial.phone=a.cutdigits?(l.internaldial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(l.internaldial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?l.internaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.internaldial.options+="U(xcally-mixmonitor-context)"):l.internaldial.options=l.internaldial.options.replace("U(xcally-mixmonitor-context)",""));if(l.internaldial.appType&&"custom"===l.internaldial.appType);else switch((l.internaldial.app||l.internaldial.appType).toLowerCase()){case"set":l.internaldial.appdata=l.internaldial.name+"="+l.internaldial.value;break;case"custom":break;default:e[0]=l.internaldial.user,e[1]=l.internaldial.timeout,e[2]=l.internaldial.options,e[3]=l.internaldial.url,l.internaldial.appdata=e.join(",")}p(l.internaldial)},l.closeDialog=p;var m=[{id:202,role:"agent"},{id:203,role:"telephone"}],u=null;function p(e){t.hide(e)}i.hasRole("admin")?r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){l.users=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){u=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(r.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];u.forEach(function(e){e.role===m[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(r.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;l.internaldial&&(n=_.find(u,{name:l.internaldial.user}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&u.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),l.users=t}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETusers",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppinternaldialDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.playback=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.playback.appdata)switch(l.playback.appType?l.playback.appType.toLowerCase():l.playback.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.playback.appdata.split(",");l.playback.key=d[0],l.playback.language=d[1],l.playback.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.playback.appdata.split(",");l.playback.accesskeyid=d[0],l.playback.secretaccesskey=d[1],l.playback.lexregion=d[2],l.playback.botname=d[3],l.playback.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.playback.appdata.split(",");l.playback.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.playback.text=d.slice(1,d.length).join(",");break;case"message":l.playback.text=l.playback.appdata;break;case"set":l.playback.name=l.playback.appdata.split("=")[0],l.playback.value=l.playback.appdata.split("=")[1];break;case"agi":l.playback.project=l.playback.appdata;break;default:var c=l.playback.appdata.split(",");l.playback.appdata=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.playback.options=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.playback.type&&"outbound"===l.playback.type.toLowerCase()&&"outbounddial"===l.playback.appType.toLowerCase()&&(l.playback.prefix=l.playback.phone?l.playback.phone.split("$")[0]:void 0,l.playback.callerId=l.playback.callerID?"CALLERID(all)="+l.playback.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.playback.type&&"outbound"===l.playback.type.toLowerCase()&&"outboundDial"===l.playback.appType&&(l.playback.phone=i.cutdigits?(l.playback.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.playback.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.playback.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.playback.options+="U(xcally-mixmonitor-context)"):l.playback.options=l.playback.options.replace("U(xcally-mixmonitor-context)",""));if(l.playback.appType&&"custom"===l.playback.appType);else switch((l.playback.app||l.playback.appType).toLowerCase()){case"set":l.playback.appdata=l.playback.name+"="+l.playback.value;break;case"custom":break;default:e[0]=l.playback.appdata,e[1]=l.playback.options,l.playback.appdata=e.join(",")}m(l.playback)},l.closeDialog=m,o.hasRole("admin")?s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.sounds,{id:e.resourceId})}),n=null;if(l.playback&&(n=_.find(l.sounds,{save_name:l.playback.sound})),n&&!_.some(t,["id",n.id])){var a=_.find(l.sounds,{id:n.id});a.canSelect=!1,t.push(a)}l.sounds=t})}else{var n=[],a=null;l.playback&&(a=_.find(l.sounds,{save_name:l.playback.sound}));for(var i=0;i<l.sounds.length;i++)a&&l.sounds[i].id===a.id&&(l.sounds[i].canSelect=!1,n.push(l.sounds[i]));l.sounds=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppplaybackDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.options=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.queue.URL=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.queue.sound=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10),l.queue.timeout=_.isEmpty(c[4])?c[4]:isNaN(c[4])?c[4]:parseInt(c[4],10),l.queue.agi=_.isEmpty(c[5])?c[5]:isNaN(c[5])?c[5]:parseInt(c[5],10),l.queue.macro=_.isEmpty(c[6])?c[6]:isNaN(c[6])?c[6]:parseInt(c[6],10),l.queue.gosub=_.isEmpty(c[7])?c[7]:isNaN(c[7])?c[7]:parseInt(c[7],10),l.queue.rule=_.isEmpty(c[8])?c[8]:isNaN(c[8])?c[8]:parseInt(c[8],10),l.queue.position=_.isEmpty(c[9])?c[9]:isNaN(c[9])?c[9]:parseInt(c[9],10)}function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.options,e[2]=l.queue.URL,e[3]=l.queue.sound,e[4]=l.queue.timeout,e[5]=l.queue.agi,e[6]=l.queue.macro,e[7]=l.queue.gosub,e[8]=l.queue.rule,e[9]=l.queue.position,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.sounds,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.sounds,{save_name:l.queue.sound})),n&&!_.some(t,["id",n.id])){var a=_.find(l.sounds,{id:n.id});a.canSelect=!1,t.push(a)}l.sounds=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.sounds,{save_name:l.queue.sound}));for(var i=0;i<l.sounds.length;i++)a&&l.sounds[i].id===a.id&&(l.sounds[i].canSelect=!1,n.push(l.sounds[i]));l.sounds=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.hasRole("admin")?s.voiceQueue.get({type:"inbound",fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.voiceQueue.get({type:"inbound",fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:401}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppqueueDialogController",e)}(),function(){"use strict";function e(t,o,n,e,a,r,i,s){var l=this;if(l.currentUser=i.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),l.ringgroup=angular.copy(e),l.crudPermissions=s,l.hasModulePermissions={},l.ringgroup.appdata)switch(l.ringgroup.appType?l.ringgroup.appType.toLowerCase():l.ringgroup.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.ringgroup.appdata.split(",");l.ringgroup.key=d[0],l.ringgroup.language=d[1],l.ringgroup.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.ringgroup.appdata.split(",");l.ringgroup.accesskeyid=d[0],l.ringgroup.secretaccesskey=d[1],l.ringgroup.lexregion=d[2],l.ringgroup.botname=d[3],l.ringgroup.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.ringgroup.appdata.split(",");l.ringgroup.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.ringgroup.text=d.slice(1,d.length).join(",");break;case"message":l.ringgroup.text=l.ringgroup.appdata;break;case"set":l.ringgroup.name=l.ringgroup.appdata.split("=")[0],l.ringgroup.value=l.ringgroup.appdata.split("=")[1];break;case"agi":l.ringgroup.project=l.ringgroup.appdata;break;default:var c=l.ringgroup.appdata.split(",");l.ringgroup.multipleUsers=c[0].split("&"),l.ringgroup.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.ringgroup.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.ringgroup.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}l.ringgroup.type&&"outbound"===l.ringgroup.type.toLowerCase()&&"outbounddial"===l.ringgroup.appType.toLowerCase()&&(l.ringgroup.prefix=l.ringgroup.phone?l.ringgroup.phone.split("$")[0]:void 0,l.ringgroup.callerId=l.ringgroup.callerID?"CALLERID(all)="+l.ringgroup.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.ringgroup.type&&"outbound"===l.ringgroup.type.toLowerCase()&&"outboundDial"===l.ringgroup.appType&&(l.ringgroup.phone=a.cutdigits?(l.ringgroup.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(l.ringgroup.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?l.ringgroup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.ringgroup.options+="U(xcally-mixmonitor-context)"):l.ringgroup.options=l.ringgroup.options.replace("U(xcally-mixmonitor-context)",""));if(l.ringgroup.appType&&"custom"===l.ringgroup.appType);else switch((l.ringgroup.app||l.ringgroup.appType).toLowerCase()){case"set":l.ringgroup.appdata=l.ringgroup.name+"="+l.ringgroup.value;break;case"custom":break;default:e[0]=l.ringgroup.multipleUsers.join("&"),e[1]=l.ringgroup.timeout,e[2]=l.ringgroup.options,e[3]=l.ringgroup.url,l.ringgroup.appdata=e.join(",")}p(l.ringgroup)},l.closeDialog=p;var m=[{id:202,role:"agent"},{id:203,role:"telephone"}],u=null;function p(e){t.hide(e)}i.hasRole("admin")?r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){l.users=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){u=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(r.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];u.forEach(function(e){e.role===m[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(r.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;l.ringgroup&&(n=_.find(u,{name:l.ringgroup.multipleUsers}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&u.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),l.users=t}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETusers",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppringgroupDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.set=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.set.appdata)switch(l.set.appType?l.set.appType.toLowerCase():l.set.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.set.appdata.split(",");l.set.key=d[0],l.set.language=d[1],l.set.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.set.appdata.split(",");l.set.accesskeyid=d[0],l.set.secretaccesskey=d[1],l.set.lexregion=d[2],l.set.botname=d[3],l.set.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.set.appdata.split(",");l.set.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.set.text=d.slice(1,d.length).join(",");break;case"message":l.set.text=l.set.appdata;break;case"set":l.set.name=l.set.appdata.split("=")[0],l.set.value=l.set.appdata.split("=")[1];break;case"agi":l.set.project=l.set.appdata;break;default:var c=l.set.appdata.split("=");l.set.name=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.set.value=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.set.type&&"outbound"===l.set.type.toLowerCase()&&"outbounddial"===l.set.appType.toLowerCase()&&(l.set.prefix=l.set.phone?l.set.phone.split("$")[0]:void 0,l.set.callerId=l.set.callerID?"CALLERID(all)="+l.set.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.set.type&&"outbound"===l.set.type.toLowerCase()&&"outboundDial"===l.set.appType&&(l.set.phone=i.cutdigits?(l.set.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.set.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.set.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.set.options+="U(xcally-mixmonitor-context)"):l.set.options=l.set.options.replace("U(xcally-mixmonitor-context)",""));if(l.set.appType&&"custom"===l.set.appType);else switch((l.set.app||l.set.appType).toLowerCase()){case"set":l.set.appdata=l.set.name+"="+l.set.value;break;case"custom":break;default:e[0]=l.set.name,e[1]=l.set.value,l.set.appdata=e.join("=")}m(l.set)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.set&&(n=_.find(l.variables,{name:l.set.name})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.set&&(a=_.find(l.variables,{name:l.set.name}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppsetDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.voicemail=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.voicemail.appdata)switch(l.voicemail.appType?l.voicemail.appType.toLowerCase():l.voicemail.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.voicemail.appdata.split(",");l.voicemail.key=d[0],l.voicemail.language=d[1],l.voicemail.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.voicemail.appdata.split(",");l.voicemail.accesskeyid=d[0],l.voicemail.secretaccesskey=d[1],l.voicemail.lexregion=d[2],l.voicemail.botname=d[3],l.voicemail.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.voicemail.appdata.split(",");l.voicemail.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.voicemail.text=d.slice(1,d.length).join(",");break;case"message":l.voicemail.text=l.voicemail.appdata;break;case"set":l.voicemail.name=l.voicemail.appdata.split("=")[0],l.voicemail.value=l.voicemail.appdata.split("=")[1];break;case"agi":l.voicemail.project=l.voicemail.appdata;break;default:var c=l.voicemail.appdata.split(",");l.voicemail.voiceMail=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.voicemail.options=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.voicemail.type&&"outbound"===l.voicemail.type.toLowerCase()&&"outbounddial"===l.voicemail.appType.toLowerCase()&&(l.voicemail.prefix=l.voicemail.phone?l.voicemail.phone.split("$")[0]:void 0,l.voicemail.callerId=l.voicemail.callerID?"CALLERID(all)="+l.voicemail.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.voicemail.type&&"outbound"===l.voicemail.type.toLowerCase()&&"outboundDial"===l.voicemail.appType&&(l.voicemail.phone=i.cutdigits?(l.voicemail.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.voicemail.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.voicemail.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.voicemail.options+="U(xcally-mixmonitor-context)"):l.voicemail.options=l.voicemail.options.replace("U(xcally-mixmonitor-context)",""));if(l.voicemail.appType&&"custom"===l.voicemail.appType);else switch((l.voicemail.app||l.voicemail.appType).toLowerCase()){case"set":l.voicemail.appdata=l.voicemail.name+"="+l.voicemail.value;break;case"custom":break;default:e[0]=l.voicemail.voiceMail,e[1]=l.voicemail.options,l.voicemail.appdata=e.join(",")}m(l.voicemail)},l.closeDialog=m,o.hasRole("admin")?s.voiceMail.get({fields:"id,mailbox",sort:"mailbox"}).$promise.then(function(e){l.voiceMails=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VOICEMAILS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.voiceMail.get({fields:"id,mailbox",sort:"mailbox"}).$promise.then(function(e){l.voiceMails=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:406}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.voiceMails,{id:e.resourceId})}),n=null;if(l.voicemail&&(n=_.find(l.voiceMails,{mailbox:l.voicemail.voiceMail})),n&&!_.some(t,["id",n.id])){var a=_.find(l.voiceMails,{id:n.id});a.canSelect=!1,t.push(a)}l.voiceMails=t})}else{var n=[],a=null;l.voicemail&&(a=_.find(l.voiceMails,{mailbox:l.voicemail.voiceMail}));for(var i=0;i<l.voiceMails.length;i++)a&&l.voiceMails[i].id===a.id&&(l.voiceMails[i].canSelect=!1,n.push(l.voiceMails[i]));l.voiceMails=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMails",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppvoicemailDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.inboundroute=c||e.params.inboundroute||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoInboundRoutes=function(){e.go("app.voice.inboundroutes")},u.saveInboundRoute=function(){r.voiceExtension.update({id:u.inboundroute.id},u.inboundroute).$promise.then(function(){l.success({title:"InboundRoute updated!",msg:u.inboundroute.name?u.inboundroute.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceExtension",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.inboundroute&&(n=_.find(u.contexts,{name:u.inboundroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","inboundroute","userProfileSection"],angular.module("app.voice").controller("InboundRouteController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.inboundroutes=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="inboundroutes",b.listOrder="",b.listOrderAsc=null,b.selectedInboundRoutes=[],b.query={fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"inbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,page:1},b.editstate=function(e,t){n.go("app.voice.inboundroutes.edit",{id:e.id,inboundroute:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("inboundroute")+"?").htmlContent("<b>"+(e.name||"inboundroute")+"</b> will be deleted.").ariaLabel("delete inboundroute").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getInboundRoutes=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceExtension.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="InboundRoutes",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditInboundRoute=function(e,t){i.show({controller:"CreateOrEditInboundRouteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/inboundroutes/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{inboundroute:t,inboundroutes:b.inboundroutes.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteInboundRoute=S,b.exportSelectedInboundRoutes=function(){var e=angular.copy(b.selectedInboundRoutes);return b.selectedInboundRoutes=[],e},b.deleteSelectedInboundRoutes=function(e){var t=i.confirm().title("Are you sure want to delete the selected inboundroutes?").htmlContent("<b>"+b.selectedInboundRoutes.length+" selected</b> will be deleted.").ariaLabel("delete InboundRoutes").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedInboundRoutes.forEach(function(e){S(e)}),b.selectedInboundRoutes=[]})},b.deselectInboundRoutes=function(){b.selectedInboundRoutes=[]},b.selectAllInboundRoutes=function(){b.selectedInboundRoutes=b.inboundroutes.rows},g.hasRole("admin")?m.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.contexts=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.contexts=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.contexts,{id:e.resourceId})}),n=null;if(b.inboundroute&&(n=_.find(b.contexts,{name:b.inboundroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(b.contexts,{id:n.id});a.canSelect=!1,t.push(a)}b.contexts=t}):m.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){b.contexts=e.rows||[]})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.inboundroutes=e||{count:0,rows:[]}}function S(e){m.voiceExtension.delete({id:e.id}).$promise.then(function(){_.remove(b.inboundroutes.rows,{id:e.id}),b.inboundroutes.count-=1,b.inboundroutes.rows.length||b.getInboundRoutes(),p.success({title:_.startCase("InboundRoute")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceExtension"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceExtension",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getInboundRoutes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","inboundroutes","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("InboundRoutesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_INTERNALROUTE",g.internalroute=angular.copy(l),g.internalroutes=r,g.newInternalRoute=!1,g.internalroute||(g.internalroute={appdata:"Internal Call",type:"internal",context:"from-sip"},g.title="VOICE.NEW_INTERNALROUTE",g.newInternalRoute=!0),g.addNewInternalRoute=function(){g.errors=[],d.voiceExtension.save(g.internalroute).$promise.then(function(e){g.internalroutes.unshift(e.toJSON()),o.success({title:"InternalRoute properly created",msg:g.internalroute.name?g.internalroute.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveInternalRoute=function(){g.errors=[],d.voiceExtension.update({id:g.internalroute.id},g.internalroute).$promise.then(function(e){var t=_.find(g.internalroutes,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"InternalRoute properly saved!",msg:g.internalroute.name?g.internalroute.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteInternalRoute=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The internalroute will be deleted.").ariaLabel("Delete InternalRoute").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceExtension.delete({id:g.internalroute.id}).$promise.then(function(){_.remove(g.internalroutes,{id:g.internalroute.id}),o.success({title:"InternalRoute properly deleted!",msg:(g.internalroute.name||"internalroute")+" has been deleted!"}),v(g.internalroute)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.contexts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.contexts=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.contexts,{id:e.resourceId})}),n=null;if(g.internalroute&&(n=_.find(g.contexts,{name:g.internalroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(g.contexts,{id:n.id});a.canSelect=!1,t.push(a)}g.contexts=t}):d.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){g.contexts=e.rows||[]})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","internalroutes","internalroute","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditInternalRouteDialogController",e)}(),function(){"use strict";function e(m,i,a,s,e){var u=this;function t(e,t){if(u.internalrouteApps.rows.length){var n=u.internalrouteApps.rows[t]?u.internalrouteApps.rows[t]:u.internalrouteApps.rows[0];i.show({controller:"EditInternalApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/internalroutes/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{internalrouteApp:n,internalroute:u.internalroute,crudPermissions:u.crudPermissions}}).then(function(e){e&&(e.id?u.internalrouteApps.rows[t]=e:u.internalrouteApps.rows.splice(t,0,e),o())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function o(){var e=["queue","playback"],t=2,n=[];n.push({type:"internal",app:"Set",appdata:"CDR(type)=internal",context:u.internalroute.context,exten:u.internalroute.exten,priority:t++,VoiceExtensionId:u.internalroute.id}),n.push({type:"internal",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:u.internalroute.context,exten:u.internalroute.exten,priority:t++,VoiceExtensionId:u.internalroute.id}),n.push({type:"internal",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:u.internalroute.context,exten:u.internalroute.exten,priority:t++,VoiceExtensionId:u.internalroute.id}),n.push({type:"internal",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:u.internalroute.context,exten:u.internalroute.exten,priority:t++,VoiceExtensionId:u.internalroute.id});for(var a=0,i=0;a<u.internalrouteApps.rows.length;a++,i=0){var s=u.internalrouteApps.rows[a],o=[],r=[];s.intervals="*,*,*,*"!==s.interval?[s.interval]:s.IntervalId?_.map(_.filter(u.intervals.rows,{IntervalId:s.IntervalId}),"interval"):[],s.context=u.internalroute.context,s.exten=u.internalroute.exten,s.type&&(s.type=s.type.toLowerCase()),s.hasOwnProperty("answer")&&e.includes(s.app.toLowerCase())&&"custom"!==s.appType&&(s.answer?(o.push({type:s.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-ANSWER}=0]?Answer",context:u.internalroute.context,exten:u.internalroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id}),o.push({type:s.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-ANSWER=1",context:u.internalroute.context,exten:u.internalroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id})):(o.push({type:s.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-PROGRESS}=0]?Progress",context:u.internalroute.context,exten:u.internalroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id}),o.push({type:s.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-PROGRESS=1",context:u.internalroute.context,exten:u.internalroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id})));for(var l=0;l<s.intervals.length;l++){var d=t+s.intervals.length,c=l===s.intervals.length-1?t+o.length+r.length+2:t+l+1;o.splice(l,0,{type:"internal",app:"GotoIfTime",appdata:s.intervals[l]+"?"+u.internalroute.context+",${EXTEN},"+d+":"+u.internalroute.context+",${EXTEN},"+c,exten:u.internalroute.exten,context:u.internalroute.context,priority:t+l,VoiceExtensionId:u.internalroute.id})}s.priority=o.length?_.last(o).priority+1:t,t=(r.length?_.last(r).priority:s.priority)+1,n=_.concat(n,o,[s],r)}n.push({type:"internal",app:"Hangup",exten:u.internalroute.exten,context:u.internalroute.context,priority:t,VoiceExtensionId:u.internalroute.id}),m.voiceExtension.addApplications({id:u.internalroute.id},_.sortBy(n,"priority")).$promise.then(function(e){u.internalrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){u.internalrouteApps=e||{count:0,rows:[]}}u.currentUser=e.getCurrentUser(),u.internalroute={},u.internalrouteApps={count:0,rows:[]},u.selectedInternalRouteApps=[],u.crudPermissions,u.query={sort:"priority"},u.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",type:"Internal",types:["always","custom","list"],fields:[],isApp:!1},{app:"Queue",appType:"queue",context:"from-sip",type:"Internal",options:"xX",appdata:",xX,,,300,,,,,",icon:"icon-apps",interval:"*,*,*,*",answer:!0,isApp:!0,extraApi:[{name:"sounds",field:{name:"sound",key:"save_name",prefix:"/var/opt/motion2/server/files/sounds/converted/"},route:"sound",filters:{fields:"id,name,save_name",sort:"name"},permissions:{section:1007}},{name:"queues",field:{name:"queue",key:"name"},route:"voiceQueue",filters:{type:"inbound",fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:401}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",required:!0,param:0},{title:"Options",name:"options",type:"text",param:1},{title:"Url",name:"URL",type:"text",param:2},{title:"Announce_Overrides",name:"sound",type:"apiselect",values:"sounds",value:"'/var/opt/motion2/server/files/sounds/converted/{{sound.save_name}}'",option:"sound.name",defaultValues:[{value:"''",option:"None"}],param:3},{title:"Timeout",name:"timeout",type:"number",min:0,param:4},{title:"Agi",name:"agi",type:"text",param:5},{title:"Macro",name:"macro",type:"text",param:6},{title:"GoSub",name:"gosub",type:"text",param:7},{title:"Rule",name:"rule",type:"text",param:8},{title:"Position",name:"position",type:"number",min:0,param:9},{title:"Answer",name:"answer",type:"switch",general:!0}]},{app:"Playback",appType:"playback",context:"from-sip",type:"Internal",icon:"icon-apps",interval:"*,*,*,*",answer:!0,isApp:!0,extraApi:[{name:"sounds",field:{name:"appdata",key:"save_name",prefix:"/var/opt/motion2/server/files/sounds/converted/"},route:"sound",filters:{fields:"id,name,save_name",sort:"name"},permissions:{section:1007}}],fields:[{title:"Audio_Files",name:"appdata",type:"apiselect",values:"sounds",value:"'/var/opt/motion2/server/files/sounds/converted/{{appdata.save_name}}'",option:"appdata.name",required:!0,param:0},{title:"Options",name:"options",type:"text",param:1},{title:"Answer",name:"answer",type:"switch",general:!0}]},{app:"Dial",appType:"dial",context:"from-sip",type:"Internal",icon:"icon-apps",options:"xX",interval:"*,*,*,*",isApp:!0,fields:[{title:"Technology/Resource",name:"tech",type:"text",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"Dial",appType:"internalDial",context:"from-sip",type:"Internal",icon:"icon-apps",options:"xX",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"users",field:{name:"user",key:"name",prefix:"SIP/"},route:"user",filters:{fields:"id,name,role",sort:"name"},permissions:{sections:[{id:202,role:"agent"},{id:203,role:"telephone"}]}}],fields:[{title:"User",name:"user",type:"apiselect",values:"users",value:"'SIP/{{user.name}}'",option:"user.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"Dial",appType:"externalDial",context:"from-sip",type:"Internal",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"trunks",field:{name:"trunk",key:"name"},route:"trunk",filters:{fields:"id,name",sort:"name"},permissions:{section:1011}}],fields:[{title:"Trunk",name:"trunk",type:"apiselect",values:"trunks",value:"trunk.name",option:"trunk.name",required:!0,param:0},{title:"Phone",name:"phone",type:"text"},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"Dial",appType:"ringGroup",context:"from-sip",type:"Internal",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"users",field:{name:"multipleUsers",key:"name",prefix:"SIP/"},route:"user",filters:{fields:"id,name,role",sort:"name"},permissions:{sections:[{id:202,role:"agent"},{id:203,role:"telephone"}]}}],fields:[{title:"User",name:"multipleUsers",type:"apiselect",multiple:!0,values:"users",value:"'SIP/{{multipleUsers.name}}'",option:"multipleUsers.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"AGI",alias:"CallySquare",appType:"agi",context:"from-sip",type:"Internal",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"projects",field:{name:"project",key:"name",prefix:"agi://127.0.0.1/square,"},route:"squareProject",filters:{fields:"id,name",sort:"name"},permissions:{section:1103}}],fields:[{title:"Project",name:"project",type:"apiselect",values:"projects",value:"'agi://127.0.0.1/square,{{project.name}}'",option:"project.name",required:!0,param:0}]},{app:"goto",appType:"goTo",context:"from-sip",type:"Internal",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"contexts",field:{name:"context",key:"name"},route:"voiceContext",filters:{fields:"id,name",sort:"name"},permissions:{section:405}}],fields:[{title:"Context",name:"context",type:"apiselect",values:"contexts",value:"context.name",option:"context.name",required:!0,param:0},{title:"Extension",name:"extension",type:"text",required:!0,param:1},{title:"Priority",name:"priority",type:"text",required:!0,param:2}]},{app:"hangup",appType:"hangup",context:"from-sip",type:"Internal",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Hangup_Cause",name:"appdata",type:"select",param:0,values:[{option:"HANGUPCAUSE_1",value:"'1'"},{option:"HANGUPCAUSE_16",value:"'16'"},{option:"HANGUPCAUSE_17",value:"'17'"},{option:"HANGUPCAUSE_18",value:"'18'"},{option:"HANGUPCAUSE_21",value:"'21'"},{option:"HANGUPCAUSE_22",value:"'22'"},{option:"HANGUPCAUSE_27",value:"'27'"},{option:"HANGUPCAUSE_38",value:"'38'"},{option:"HANGUPCAUSE_41",value:"'41'"}],translate:!0,required:!0,general:!0}]},{app:"Set",appType:"set",context:"from-sip",type:"Internal",separator:"=",icon:"icon-apps",interval:"*,*,*,*",extraApi:[{name:"variables",field:{name:"name",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name"},permissions:{section:1012}}],isApp:!0,fields:[{title:"Variable",name:"name",type:"apiselect",values:"variables",value:"name.name",option:"name.name",required:!0,param:0},{title:"Value",name:"value",type:"text",required:!0,param:1}]},{app:null,appType:"custom",icon:"icon-apps",type:"Internal",interval:"*,*,*,*",isApp:!0,fields:[{title:"Application_Name",name:"app",type:"text",required:!0,param:0},{title:"Arguments",name:"appdata",type:"text",param:1}]},{app:"Voicemail",appType:"voicemail",context:"from-sip",icon:"icon-apps",type:"Internal",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"voiceMails",field:{name:"voiceMail",key:"mailbox",suffix:"@from-voicemail"},route:"voiceMail",filters:{fields:"id,mailbox",sort:"mailbox"},permissions:{section:406}}],fields:[{title:"Mailbox@Context",name:"voiceMail",type:"apiselect",values:"voiceMails",value:"'{{voiceMail.mailbox}}@from-voicemail'",option:"voiceMail.mailbox",required:!0,param:0},{title:"Options",name:"options",type:"text",param:1}]}],["app"]),{isApp:!1}),u.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},u.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){o()}},u.init=function(e,t){u.internalroute=e,u.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},u.applications.disabled=!u.crudPermissions.canEdit,u.query.VoiceExtensionId=e.id,u.query.isApp=!0,u.query.nolimit=!0,u.getInternalRouteApps(),u.getIntervals()},u.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){u.internalrouteApps.rows.splice(t,1),o()},function(){console.log("CANCEL")})},u.getInternalRouteApps=function(){u.promise=m.voiceExtension.get(u.query,n).$promise},u.editInternalRouteApp=t,u.editInterval=function(e,t){if(u.internalrouteApps.rows.length){var n=u.internalrouteApps.rows[t]?u.internalrouteApps.rows[t]:u.internalrouteApps.rows[0];i.show({controller:"EditInternalAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/internalroutes/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:u.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,o())})}},u.deleteInternalRouteApp=function(e){_.remove(u.internalrouteApps.rows,{id:e.id}),o(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},u.deleteSelectedInternalRouteApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+u.selectedInternalRouteApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){u.selectedInternalRouteApps.forEach(function(e){_.remove(u.internalrouteApps.rows,{id:e.id})}),u.selectedInternalRouteApps=[],o()})},u.rewriteRouting=o,u.getIntervals=function(){return m.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){u.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.voice").controller("InternalRouteActionsController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.agi=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agi.appdata)switch(l.agi.appType?l.agi.appType.toLowerCase():l.agi.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agi.appdata.split(",");l.agi.key=d[0],l.agi.language=d[1],l.agi.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agi.appdata.split(",");l.agi.accesskeyid=d[0],l.agi.secretaccesskey=d[1],l.agi.lexregion=d[2],l.agi.botname=d[3],l.agi.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agi.appdata.split(",");l.agi.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agi.text=d.slice(1,d.length).join(",");break;case"message":l.agi.text=l.agi.appdata;break;case"set":l.agi.name=l.agi.appdata.split("=")[0],l.agi.value=l.agi.appdata.split("=")[1];break;case"agi":l.agi.project=l.agi.appdata;break;default:var c=l.agi.appdata.split(",");l.agi.project=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.agi.type&&"outbound"===l.agi.type.toLowerCase()&&"outbounddial"===l.agi.appType.toLowerCase()&&(l.agi.prefix=l.agi.phone?l.agi.phone.split("$")[0]:void 0,l.agi.callerId=l.agi.callerID?"CALLERID(all)="+l.agi.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.agi.type&&"outbound"===l.agi.type.toLowerCase()&&"outboundDial"===l.agi.appType&&(l.agi.phone=i.cutdigits?(l.agi.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agi.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agi.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agi.options+="U(xcally-mixmonitor-context)"):l.agi.options=l.agi.options.replace("U(xcally-mixmonitor-context)",""));if(l.agi.appType&&"custom"===l.agi.appType);else switch((l.agi.app||l.agi.appType).toLowerCase()){case"set":l.agi.appdata=l.agi.name+"="+l.agi.value;break;case"custom":break;default:e[0]=l.agi.project,l.agi.appdata=e.join(",")}m(l.agi)},l.closeDialog=m,o.hasRole("admin")?s.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.projects=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.projects=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1103}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.projects,{id:e.resourceId})}),n=null;if(l.agi&&(n=_.find(l.projects,{name:l.agi.project})),n&&!_.some(t,["id",n.id])){var a=_.find(l.projects,{id:n.id});a.canSelect=!1,t.push(a)}l.projects=t})}else{var n=[],a=null;l.agi&&(a=_.find(l.projects,{name:l.agi.project}));for(var i=0;i<l.projects.length;i++)a&&l.projects[i].id===a.id&&(l.projects[i].canSelect=!1,n.push(l.projects[i]));l.projects=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppagiDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.custom=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.custom.appdata)switch(l.custom.appType?l.custom.appType.toLowerCase():l.custom.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.custom.appdata.split(",");l.custom.key=d[0],l.custom.language=d[1],l.custom.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.custom.appdata.split(",");l.custom.accesskeyid=d[0],l.custom.secretaccesskey=d[1],l.custom.lexregion=d[2],l.custom.botname=d[3],l.custom.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.custom.appdata.split(",");l.custom.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.custom.text=d.slice(1,d.length).join(",");break;case"message":l.custom.text=l.custom.appdata;break;case"set":l.custom.name=l.custom.appdata.split("=")[0],l.custom.value=l.custom.appdata.split("=")[1];break;case"agi":l.custom.project=l.custom.appdata;break;default:var c=l.custom.appdata.split(",");l.custom.app=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.custom.appdata=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.custom.type&&"outbound"===l.custom.type.toLowerCase()&&"outbounddial"===l.custom.appType.toLowerCase()&&(l.custom.prefix=l.custom.phone?l.custom.phone.split("$")[0]:void 0,l.custom.callerId=l.custom.callerID?"CALLERID(all)="+l.custom.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.custom.type&&"outbound"===l.custom.type.toLowerCase()&&"outboundDial"===l.custom.appType&&(l.custom.phone=i.cutdigits?(l.custom.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.custom.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.custom.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.custom.options+="U(xcally-mixmonitor-context)"):l.custom.options=l.custom.options.replace("U(xcally-mixmonitor-context)",""));if(l.custom.appType&&"custom"===l.custom.appType);else switch((l.custom.app||l.custom.appType).toLowerCase()){case"set":l.custom.appdata=l.custom.name+"="+l.custom.value;break;case"custom":break;default:e[0]=l.custom.app,e[1]=l.custom.appdata,l.custom.appdata=e.join(",")}m(l.custom)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppcustomDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.dial=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.dial.appdata)switch(l.dial.appType?l.dial.appType.toLowerCase():l.dial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.dial.appdata.split(",");l.dial.key=d[0],l.dial.language=d[1],l.dial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.dial.appdata.split(",");l.dial.accesskeyid=d[0],l.dial.secretaccesskey=d[1],l.dial.lexregion=d[2],l.dial.botname=d[3],l.dial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.dial.appdata.split(",");l.dial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.dial.text=d.slice(1,d.length).join(",");break;case"message":l.dial.text=l.dial.appdata;break;case"set":l.dial.name=l.dial.appdata.split("=")[0],l.dial.value=l.dial.appdata.split("=")[1];break;case"agi":l.dial.project=l.dial.appdata;break;default:var c=l.dial.appdata.split(",");l.dial.tech=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.dial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.dial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.dial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}function m(e){t.hide(e)}l.dial.type&&"outbound"===l.dial.type.toLowerCase()&&"outbounddial"===l.dial.appType.toLowerCase()&&(l.dial.prefix=l.dial.phone?l.dial.phone.split("$")[0]:void 0,l.dial.callerId=l.dial.callerID?"CALLERID(all)="+l.dial.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.dial.type&&"outbound"===l.dial.type.toLowerCase()&&"outboundDial"===l.dial.appType&&(l.dial.phone=i.cutdigits?(l.dial.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.dial.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.dial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.dial.options+="U(xcally-mixmonitor-context)"):l.dial.options=l.dial.options.replace("U(xcally-mixmonitor-context)",""));if(l.dial.appType&&"custom"===l.dial.appType);else switch((l.dial.app||l.dial.appType).toLowerCase()){case"set":l.dial.appdata=l.dial.name+"="+l.dial.value;break;case"custom":break;default:e[0]=l.dial.tech,e[1]=l.dial.timeout,e[2]=l.dial.options,e[3]=l.dial.url,l.dial.appdata=e.join(",")}m(l.dial)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppdialDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.externaldial=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.externaldial.appdata)switch(l.externaldial.appType?l.externaldial.appType.toLowerCase():l.externaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.externaldial.appdata.split(",");l.externaldial.key=d[0],l.externaldial.language=d[1],l.externaldial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.externaldial.appdata.split(",");l.externaldial.accesskeyid=d[0],l.externaldial.secretaccesskey=d[1],l.externaldial.lexregion=d[2],l.externaldial.botname=d[3],l.externaldial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.externaldial.appdata.split(",");l.externaldial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.externaldial.text=d.slice(1,d.length).join(",");break;case"message":l.externaldial.text=l.externaldial.appdata;break;case"set":l.externaldial.name=l.externaldial.appdata.split("=")[0],l.externaldial.value=l.externaldial.appdata.split("=")[1];break;case"agi":l.externaldial.project=l.externaldial.appdata;break;default:var c=l.externaldial.appdata.split(",");l.externaldial.trunk=c[0].split("/")[1],l.externaldial.phone=c[0].split("/")[2],l.externaldial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.externaldial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.externaldial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}function m(e){t.hide(e)}l.externaldial.type&&"outbound"===l.externaldial.type.toLowerCase()&&"outbounddial"===l.externaldial.appType.toLowerCase()&&(l.externaldial.prefix=l.externaldial.phone?l.externaldial.phone.split("$")[0]:void 0,l.externaldial.callerId=l.externaldial.callerID?"CALLERID(all)="+l.externaldial.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.externaldial.type&&"outbound"===l.externaldial.type.toLowerCase()&&"outboundDial"===l.externaldial.appType&&(l.externaldial.phone=i.cutdigits?(l.externaldial.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.externaldial.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.externaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.externaldial.options+="U(xcally-mixmonitor-context)"):l.externaldial.options=l.externaldial.options.replace("U(xcally-mixmonitor-context)",""));if(l.externaldial.appType&&"custom"===l.externaldial.appType);else switch((l.externaldial.app||l.externaldial.appType).toLowerCase()){case"set":l.externaldial.appdata=l.externaldial.name+"="+l.externaldial.value;break;case"custom":break;default:e[0]=["SIP",l.externaldial.trunk,l.externaldial.phone].join("/"),e[1]=l.externaldial.timeout,e[2]=l.externaldial.options,e[3]=l.externaldial.url,l.externaldial.appdata=e.join(",")}m(l.externaldial)},l.closeDialog=m,o.hasRole("admin")?s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.trunks=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.trunks=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.trunks,{id:e.resourceId})}),n=null;if(l.externaldial&&(n=_.find(l.trunks,{name:l.externaldial.trunk})),n&&!_.some(t,["id",n.id])){var a=_.find(l.trunks,{id:n.id});a.canSelect=!1,t.push(a)}l.trunks=t})}else{var n=[],a=null;l.externaldial&&(a=_.find(l.trunks,{name:l.externaldial.trunk}));for(var i=0;i<l.trunks.length;i++)a&&l.trunks[i].id===a.id&&(l.trunks[i].canSelect=!1,n.push(l.trunks[i]));l.trunks=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppexternaldialDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.goto=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.goto.appdata)switch(l.goto.appType?l.goto.appType.toLowerCase():l.goto.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.goto.appdata.split(",");l.goto.key=d[0],l.goto.language=d[1],l.goto.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.goto.appdata.split(",");l.goto.accesskeyid=d[0],l.goto.secretaccesskey=d[1],l.goto.lexregion=d[2],l.goto.botname=d[3],l.goto.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.goto.appdata.split(",");l.goto.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.goto.text=d.slice(1,d.length).join(",");break;case"message":l.goto.text=l.goto.appdata;break;case"set":l.goto.name=l.goto.appdata.split("=")[0],l.goto.value=l.goto.appdata.split("=")[1];break;case"agi":l.goto.project=l.goto.appdata;break;default:var c=l.goto.appdata.split(",");l.goto.context=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.goto.extension=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.goto.priority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.goto.type&&"outbound"===l.goto.type.toLowerCase()&&"outbounddial"===l.goto.appType.toLowerCase()&&(l.goto.prefix=l.goto.phone?l.goto.phone.split("$")[0]:void 0,l.goto.callerId=l.goto.callerID?"CALLERID(all)="+l.goto.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.goto.type&&"outbound"===l.goto.type.toLowerCase()&&"outboundDial"===l.goto.appType&&(l.goto.phone=i.cutdigits?(l.goto.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.goto.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.goto.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.goto.options+="U(xcally-mixmonitor-context)"):l.goto.options=l.goto.options.replace("U(xcally-mixmonitor-context)",""));if(l.goto.appType&&"custom"===l.goto.appType);else switch((l.goto.app||l.goto.appType).toLowerCase()){case"set":l.goto.appdata=l.goto.name+"="+l.goto.value;break;case"custom":break;default:e[0]=l.goto.context,e[1]=l.goto.extension,e[2]=l.goto.priority,l.goto.appdata=e.join(",")}m(l.goto)},l.closeDialog=m,o.hasRole("admin")?s.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.contexts=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.contexts=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.contexts,{id:e.resourceId})}),n=null;if(l.goto&&(n=_.find(l.contexts,{name:l.goto.context})),n&&!_.some(t,["id",n.id])){var a=_.find(l.contexts,{id:n.id});a.canSelect=!1,t.push(a)}l.contexts=t}):s.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){l.contexts=e.rows||[]})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppgotoDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.hangup=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.hangup.appdata)switch(l.hangup.appType?l.hangup.appType.toLowerCase():l.hangup.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.hangup.appdata.split(",");l.hangup.key=d[0],l.hangup.language=d[1],l.hangup.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.hangup.appdata.split(",");l.hangup.accesskeyid=d[0],l.hangup.secretaccesskey=d[1],l.hangup.lexregion=d[2],l.hangup.botname=d[3],l.hangup.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.hangup.appdata.split(",");l.hangup.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.hangup.text=d.slice(1,d.length).join(",");break;case"message":l.hangup.text=l.hangup.appdata;break;case"set":l.hangup.name=l.hangup.appdata.split("=")[0],l.hangup.value=l.hangup.appdata.split("=")[1];break;case"agi":l.hangup.project=l.hangup.appdata;break;default:var c=l.hangup.appdata.split(",");l.hangup.appdata=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.hangup.type&&"outbound"===l.hangup.type.toLowerCase()&&"outbounddial"===l.hangup.appType.toLowerCase()&&(l.hangup.prefix=l.hangup.phone?l.hangup.phone.split("$")[0]:void 0,l.hangup.callerId=l.hangup.callerID?"CALLERID(all)="+l.hangup.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.hangup.type&&"outbound"===l.hangup.type.toLowerCase()&&"outboundDial"===l.hangup.appType&&(l.hangup.phone=i.cutdigits?(l.hangup.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.hangup.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.hangup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.hangup.options+="U(xcally-mixmonitor-context)"):l.hangup.options=l.hangup.options.replace("U(xcally-mixmonitor-context)",""));if(l.hangup.appType&&"custom"===l.hangup.appType);else switch((l.hangup.app||l.hangup.appType).toLowerCase()){case"set":l.hangup.appdata=l.hangup.name+"="+l.hangup.value;break;case"custom":break;default:e[0]=l.hangup.appdata,l.hangup.appdata=e.join(",")}m(l.hangup)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalApphangupDialogController",e)}(),function(){"use strict";function e(t,o,n,e,a,r,i,s){var l=this;if(l.currentUser=i.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),l.internaldial=angular.copy(e),l.crudPermissions=s,l.hasModulePermissions={},l.internaldial.appdata)switch(l.internaldial.appType?l.internaldial.appType.toLowerCase():l.internaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.internaldial.appdata.split(",");l.internaldial.key=d[0],l.internaldial.language=d[1],l.internaldial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.internaldial.appdata.split(",");l.internaldial.accesskeyid=d[0],l.internaldial.secretaccesskey=d[1],l.internaldial.lexregion=d[2],l.internaldial.botname=d[3],l.internaldial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.internaldial.appdata.split(",");l.internaldial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.internaldial.text=d.slice(1,d.length).join(",");break;case"message":l.internaldial.text=l.internaldial.appdata;break;case"set":l.internaldial.name=l.internaldial.appdata.split("=")[0],l.internaldial.value=l.internaldial.appdata.split("=")[1];break;case"agi":l.internaldial.project=l.internaldial.appdata;break;default:var c=l.internaldial.appdata.split(",");l.internaldial.user=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.internaldial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.internaldial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.internaldial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}l.internaldial.type&&"outbound"===l.internaldial.type.toLowerCase()&&"outbounddial"===l.internaldial.appType.toLowerCase()&&(l.internaldial.prefix=l.internaldial.phone?l.internaldial.phone.split("$")[0]:void 0,l.internaldial.callerId=l.internaldial.callerID?"CALLERID(all)="+l.internaldial.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.internaldial.type&&"outbound"===l.internaldial.type.toLowerCase()&&"outboundDial"===l.internaldial.appType&&(l.internaldial.phone=a.cutdigits?(l.internaldial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(l.internaldial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?l.internaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.internaldial.options+="U(xcally-mixmonitor-context)"):l.internaldial.options=l.internaldial.options.replace("U(xcally-mixmonitor-context)",""));if(l.internaldial.appType&&"custom"===l.internaldial.appType);else switch((l.internaldial.app||l.internaldial.appType).toLowerCase()){case"set":l.internaldial.appdata=l.internaldial.name+"="+l.internaldial.value;break;case"custom":break;default:e[0]=l.internaldial.user,e[1]=l.internaldial.timeout,e[2]=l.internaldial.options,e[3]=l.internaldial.url,l.internaldial.appdata=e.join(",")}p(l.internaldial)},l.closeDialog=p;var m=[{id:202,role:"agent"},{id:203,role:"telephone"}],u=null;function p(e){t.hide(e)}i.hasRole("admin")?r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){l.users=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){u=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(r.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];u.forEach(function(e){e.role===m[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(r.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;l.internaldial&&(n=_.find(u,{name:l.internaldial.user}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&u.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),l.users=t}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETusers",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppinternaldialDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.playback=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.playback.appdata)switch(l.playback.appType?l.playback.appType.toLowerCase():l.playback.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.playback.appdata.split(",");l.playback.key=d[0],l.playback.language=d[1],l.playback.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.playback.appdata.split(",");l.playback.accesskeyid=d[0],l.playback.secretaccesskey=d[1],l.playback.lexregion=d[2],l.playback.botname=d[3],l.playback.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.playback.appdata.split(",");l.playback.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.playback.text=d.slice(1,d.length).join(",");break;case"message":l.playback.text=l.playback.appdata;break;case"set":l.playback.name=l.playback.appdata.split("=")[0],l.playback.value=l.playback.appdata.split("=")[1];break;case"agi":l.playback.project=l.playback.appdata;break;default:var c=l.playback.appdata.split(",");l.playback.appdata=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.playback.options=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.playback.type&&"outbound"===l.playback.type.toLowerCase()&&"outbounddial"===l.playback.appType.toLowerCase()&&(l.playback.prefix=l.playback.phone?l.playback.phone.split("$")[0]:void 0,l.playback.callerId=l.playback.callerID?"CALLERID(all)="+l.playback.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.playback.type&&"outbound"===l.playback.type.toLowerCase()&&"outboundDial"===l.playback.appType&&(l.playback.phone=i.cutdigits?(l.playback.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.playback.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.playback.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.playback.options+="U(xcally-mixmonitor-context)"):l.playback.options=l.playback.options.replace("U(xcally-mixmonitor-context)",""));if(l.playback.appType&&"custom"===l.playback.appType);else switch((l.playback.app||l.playback.appType).toLowerCase()){case"set":l.playback.appdata=l.playback.name+"="+l.playback.value;break;case"custom":break;default:e[0]=l.playback.appdata,e[1]=l.playback.options,l.playback.appdata=e.join(",")}m(l.playback)},l.closeDialog=m,o.hasRole("admin")?s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.sounds,{id:e.resourceId})}),n=null;if(l.playback&&(n=_.find(l.sounds,{save_name:l.playback.appdata})),n&&!_.some(t,["id",n.id])){var a=_.find(l.sounds,{id:n.id});a.canSelect=!1,t.push(a)}l.sounds=t})}else{var n=[],a=null;l.playback&&(a=_.find(l.sounds,{save_name:l.playback.appdata}));for(var i=0;i<l.sounds.length;i++)a&&l.sounds[i].id===a.id&&(l.sounds[i].canSelect=!1,n.push(l.sounds[i]));l.sounds=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppplaybackDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.options=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.queue.URL=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.queue.sound=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10),l.queue.timeout=_.isEmpty(c[4])?c[4]:isNaN(c[4])?c[4]:parseInt(c[4],10),l.queue.agi=_.isEmpty(c[5])?c[5]:isNaN(c[5])?c[5]:parseInt(c[5],10),l.queue.macro=_.isEmpty(c[6])?c[6]:isNaN(c[6])?c[6]:parseInt(c[6],10),l.queue.gosub=_.isEmpty(c[7])?c[7]:isNaN(c[7])?c[7]:parseInt(c[7],10),l.queue.rule=_.isEmpty(c[8])?c[8]:isNaN(c[8])?c[8]:parseInt(c[8],10),l.queue.position=_.isEmpty(c[9])?c[9]:isNaN(c[9])?c[9]:parseInt(c[9],10)}function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.options,e[2]=l.queue.URL,e[3]=l.queue.sound,e[4]=l.queue.timeout,e[5]=l.queue.agi,e[6]=l.queue.macro,e[7]=l.queue.gosub,e[8]=l.queue.rule,e[9]=l.queue.position,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.sounds,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.sounds,{save_name:l.queue.sound})),n&&!_.some(t,["id",n.id])){var a=_.find(l.sounds,{id:n.id});a.canSelect=!1,t.push(a)}l.sounds=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.sounds,{save_name:l.queue.sound}));for(var i=0;i<l.sounds.length;i++)a&&l.sounds[i].id===a.id&&(l.sounds[i].canSelect=!1,n.push(l.sounds[i]));l.sounds=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.hasRole("admin")?s.voiceQueue.get({type:"inbound",fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.voiceQueue.get({type:"inbound",fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:401}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppqueueDialogController",e)}(),function(){"use strict";function e(t,o,n,e,a,r,i,s){var l=this;if(l.currentUser=i.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),l.ringgroup=angular.copy(e),l.crudPermissions=s,l.hasModulePermissions={},l.ringgroup.appdata)switch(l.ringgroup.appType?l.ringgroup.appType.toLowerCase():l.ringgroup.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.ringgroup.appdata.split(",");l.ringgroup.key=d[0],l.ringgroup.language=d[1],l.ringgroup.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.ringgroup.appdata.split(",");l.ringgroup.accesskeyid=d[0],l.ringgroup.secretaccesskey=d[1],l.ringgroup.lexregion=d[2],l.ringgroup.botname=d[3],l.ringgroup.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.ringgroup.appdata.split(",");l.ringgroup.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.ringgroup.text=d.slice(1,d.length).join(",");break;case"message":l.ringgroup.text=l.ringgroup.appdata;break;case"set":l.ringgroup.name=l.ringgroup.appdata.split("=")[0],l.ringgroup.value=l.ringgroup.appdata.split("=")[1];break;case"agi":l.ringgroup.project=l.ringgroup.appdata;break;default:var c=l.ringgroup.appdata.split(",");l.ringgroup.multipleUsers=c[0].split("&"),l.ringgroup.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.ringgroup.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.ringgroup.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}l.ringgroup.type&&"outbound"===l.ringgroup.type.toLowerCase()&&"outbounddial"===l.ringgroup.appType.toLowerCase()&&(l.ringgroup.prefix=l.ringgroup.phone?l.ringgroup.phone.split("$")[0]:void 0,l.ringgroup.callerId=l.ringgroup.callerID?"CALLERID(all)="+l.ringgroup.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.ringgroup.type&&"outbound"===l.ringgroup.type.toLowerCase()&&"outboundDial"===l.ringgroup.appType&&(l.ringgroup.phone=a.cutdigits?(l.ringgroup.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(l.ringgroup.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?l.ringgroup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.ringgroup.options+="U(xcally-mixmonitor-context)"):l.ringgroup.options=l.ringgroup.options.replace("U(xcally-mixmonitor-context)",""));if(l.ringgroup.appType&&"custom"===l.ringgroup.appType);else switch((l.ringgroup.app||l.ringgroup.appType).toLowerCase()){case"set":l.ringgroup.appdata=l.ringgroup.name+"="+l.ringgroup.value;break;case"custom":break;default:e[0]=l.ringgroup.multipleUsers.join("&"),e[1]=l.ringgroup.timeout,e[2]=l.ringgroup.options,e[3]=l.ringgroup.url,l.ringgroup.appdata=e.join(",")}p(l.ringgroup)},l.closeDialog=p;var m=[{id:202,role:"agent"},{id:203,role:"telephone"}],u=null;function p(e){t.hide(e)}i.hasRole("admin")?r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){l.users=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){u=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(r.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];u.forEach(function(e){e.role===m[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(r.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;l.ringgroup&&(n=_.find(u,{name:l.ringgroup.multipleUsers}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&u.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),l.users=t}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETusers",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppringgroupDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.set=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.set.appdata)switch(l.set.appType?l.set.appType.toLowerCase():l.set.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.set.appdata.split(",");l.set.key=d[0],l.set.language=d[1],l.set.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.set.appdata.split(",");l.set.accesskeyid=d[0],l.set.secretaccesskey=d[1],l.set.lexregion=d[2],l.set.botname=d[3],l.set.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.set.appdata.split(",");l.set.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.set.text=d.slice(1,d.length).join(",");break;case"message":l.set.text=l.set.appdata;break;case"set":l.set.name=l.set.appdata.split("=")[0],l.set.value=l.set.appdata.split("=")[1];break;case"agi":l.set.project=l.set.appdata;break;default:var c=l.set.appdata.split("=");l.set.name=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.set.value=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.set.type&&"outbound"===l.set.type.toLowerCase()&&"outbounddial"===l.set.appType.toLowerCase()&&(l.set.prefix=l.set.phone?l.set.phone.split("$")[0]:void 0,l.set.callerId=l.set.callerID?"CALLERID(all)="+l.set.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.set.type&&"outbound"===l.set.type.toLowerCase()&&"outboundDial"===l.set.appType&&(l.set.phone=i.cutdigits?(l.set.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.set.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.set.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.set.options+="U(xcally-mixmonitor-context)"):l.set.options=l.set.options.replace("U(xcally-mixmonitor-context)",""));if(l.set.appType&&"custom"===l.set.appType);else switch((l.set.app||l.set.appType).toLowerCase()){case"set":l.set.appdata=l.set.name+"="+l.set.value;break;case"custom":break;default:e[0]=l.set.name,e[1]=l.set.value,l.set.appdata=e.join("=")}m(l.set)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.set&&(n=_.find(l.variables,{name:l.set.name})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.set&&(a=_.find(l.variables,{name:l.set.name}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppsetDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.voicemail=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.voicemail.appdata)switch(l.voicemail.appType?l.voicemail.appType.toLowerCase():l.voicemail.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.voicemail.appdata.split(",");l.voicemail.key=d[0],l.voicemail.language=d[1],l.voicemail.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.voicemail.appdata.split(",");l.voicemail.accesskeyid=d[0],l.voicemail.secretaccesskey=d[1],l.voicemail.lexregion=d[2],l.voicemail.botname=d[3],l.voicemail.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.voicemail.appdata.split(",");l.voicemail.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.voicemail.text=d.slice(1,d.length).join(",");break;case"message":l.voicemail.text=l.voicemail.appdata;break;case"set":l.voicemail.name=l.voicemail.appdata.split("=")[0],l.voicemail.value=l.voicemail.appdata.split("=")[1];break;case"agi":l.voicemail.project=l.voicemail.appdata;break;default:var c=l.voicemail.appdata.split(",");l.voicemail.voiceMail=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.voicemail.options=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.voicemail.type&&"outbound"===l.voicemail.type.toLowerCase()&&"outbounddial"===l.voicemail.appType.toLowerCase()&&(l.voicemail.prefix=l.voicemail.phone?l.voicemail.phone.split("$")[0]:void 0,l.voicemail.callerId=l.voicemail.callerID?"CALLERID(all)="+l.voicemail.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.voicemail.type&&"outbound"===l.voicemail.type.toLowerCase()&&"outboundDial"===l.voicemail.appType&&(l.voicemail.phone=i.cutdigits?(l.voicemail.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.voicemail.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.voicemail.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.voicemail.options+="U(xcally-mixmonitor-context)"):l.voicemail.options=l.voicemail.options.replace("U(xcally-mixmonitor-context)",""));if(l.voicemail.appType&&"custom"===l.voicemail.appType);else switch((l.voicemail.app||l.voicemail.appType).toLowerCase()){case"set":l.voicemail.appdata=l.voicemail.name+"="+l.voicemail.value;break;case"custom":break;default:e[0]=l.voicemail.voiceMail,e[1]=l.voicemail.options,l.voicemail.appdata=e.join(",")}m(l.voicemail)},l.closeDialog=m,o.hasRole("admin")?s.voiceMail.get({fields:"id,mailbox",sort:"mailbox"}).$promise.then(function(e){l.voiceMails=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VOICEMAILS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.voiceMail.get({fields:"id,mailbox",sort:"mailbox"}).$promise.then(function(e){l.voiceMails=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:406}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.voiceMails,{id:e.resourceId})}),n=null;if(l.voicemail&&(n=_.find(l.voiceMails,{mailbox:l.voicemail.voiceMail})),n&&!_.some(t,["id",n.id])){var a=_.find(l.voiceMails,{id:n.id});a.canSelect=!1,t.push(a)}l.voiceMails=t})}else{var n=[],a=null;l.voicemail&&(a=_.find(l.voiceMails,{mailbox:l.voicemail.voiceMail}));for(var i=0;i<l.voiceMails.length;i++)a&&l.voiceMails[i].id===a.id&&(l.voiceMails[i].canSelect=!1,n.push(l.voiceMails[i]));l.voiceMails=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMails",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppvoicemailDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.internalroute=c||e.params.internalroute||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoInternalRoutes=function(){e.go("app.voice.internalroutes")},u.saveInternalRoute=function(){r.voiceExtension.update({id:u.internalroute.id},u.internalroute).$promise.then(function(){l.success({title:"InternalRoute updated!",msg:u.internalroute.name?u.internalroute.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceExtension",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.internalroute&&(n=_.find(u.contexts,{name:u.internalroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","internalroute","userProfileSection"],angular.module("app.voice").controller("InternalRouteController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.internalroutes=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="internalroutes",b.listOrder="",b.listOrderAsc=null,b.selectedInternalRoutes=[],b.query={fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"internal",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,page:1},b.editstate=function(e,t){n.go("app.voice.internalroutes.edit",{id:e.id,internalroute:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("internalroute")+"?").htmlContent("<b>"+(e.name||"internalroute")+"</b> will be deleted.").ariaLabel("delete internalroute").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getInternalRoutes=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceExtension.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="InternalRoutes",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditInternalRoute=function(e,t){i.show({controller:"CreateOrEditInternalRouteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/internalroutes/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{internalroute:t,internalroutes:b.internalroutes.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteInternalRoute=S,b.exportSelectedInternalRoutes=function(){var e=angular.copy(b.selectedInternalRoutes);return b.selectedInternalRoutes=[],e},b.deleteSelectedInternalRoutes=function(e){var t=i.confirm().title("Are you sure want to delete the selected internalroutes?").htmlContent("<b>"+b.selectedInternalRoutes.length+" selected</b> will be deleted.").ariaLabel("delete InternalRoutes").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedInternalRoutes.forEach(function(e){S(e)}),b.selectedInternalRoutes=[]})},b.deselectInternalRoutes=function(){b.selectedInternalRoutes=[]},b.selectAllInternalRoutes=function(){b.selectedInternalRoutes=b.internalroutes.rows},g.hasRole("admin")?m.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.contexts=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.contexts=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.contexts,{id:e.resourceId})}),n=null;if(b.internalroute&&(n=_.find(b.contexts,{name:b.internalroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(b.contexts,{id:n.id});a.canSelect=!1,t.push(a)}b.contexts=t}):m.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){b.contexts=e.rows||[]})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.internalroutes=e||{count:0,rows:[]}}function S(e){m.voiceExtension.delete({id:e.id}).$promise.then(function(){_.remove(b.internalroutes.rows,{id:e.id}),b.internalroutes.count-=1,b.internalroutes.rows.length||b.getInternalRoutes(),p.success({title:_.startCase("InternalRoute")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceExtension"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceExtension",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getInternalRoutes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","internalroutes","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("InternalRoutesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_MUSICONHOLD",g.musiconhold=angular.copy(l),g.musiconholds=r,g.newMusicOnHold=!1,g.musiconhold||(g.musiconhold={mode:"files"},g.title="VOICE.NEW_MUSICONHOLD",g.newMusicOnHold=!0),g.addNewMusicOnHold=function(){g.errors=[],d.voiceMusicOnHold.save(g.musiconhold).$promise.then(function(e){g.musiconholds.unshift(e.toJSON()),o.success({title:"MusicOnHold properly created",msg:g.musiconhold.name?g.musiconhold.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMusicOnHold.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMusicOnHold=function(){g.errors=[],d.voiceMusicOnHold.update({id:g.musiconhold.id},g.musiconhold).$promise.then(function(e){var t=_.find(g.musiconholds,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MusicOnHold properly saved!",msg:g.musiconhold.name?g.musiconhold.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMusicOnHold.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMusicOnHold=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The musiconhold will be deleted.").ariaLabel("Delete MusicOnHold").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceMusicOnHold.delete({id:g.musiconhold.id}).$promise.then(function(){_.remove(g.musiconholds,{id:g.musiconhold.id}),o.success({title:"MusicOnHold properly deleted!",msg:(g.musiconhold.name||"musiconhold")+" has been deleted!"}),v(g.musiconhold)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMusicOnHold.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","musiconholds","musiconhold","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditMusicOnHoldDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.musiconhold={},c.musiconholdMohSounds={count:0,rows:[]},c.selectedMusicOnHoldMohSounds=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,save_name,converted_format,audio",limit:10,page:1},c.init=function(e,t){c.musiconhold=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.musiconhold.id,c.query.VoiceMusicOnHoldId=c.musiconhold.id,c.getMusicOnHoldMohSounds()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the mohSound?").htmlContent("<b>"+(e.name||"mohSound")+"</b> will be deleted.").ariaLabel("delete mohSound").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.voiceMusicOnHoldDownload=function(s,e,t){return l.sound.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="mohSound"+s.id,a=new Blob(t,{type:e.type});n=s.converted_format?s.save_name+"."+s.converted_format:s.save_name;var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getMusicOnHoldMohSounds=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.voiceMusicOnHold.getSounds(c.query,p).$promise},c.createOrEditMusicOnHoldMohSound=function(e,t){s.show({controller:"CreateOrEditMohSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/musiconholds/edit/mohSounds/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{musiconhold:c.musiconhold,mohSound:t,mohSounds:c.musiconholdMohSounds.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedMusicOnHoldMohSounds=function(){var e=angular.copy(c.selectedMusicOnHoldMohSounds);return c.selectedMusicOnHoldMohSounds=[],e},c.deleteMusicOnHoldMohSound=g,c.deleteSelectedMusicOnHoldMohSounds=function(e){var t=s.confirm().title("Are you sure want to delete the selected mohSounds?").htmlContent("<b>"+c.selectedMusicOnHoldMohSounds.length+" selected</b> will be deleted.").ariaLabel("delete mohSounds").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedMusicOnHoldMohSounds.forEach(function(e){g(e)}),c.selectedMusicOnHoldMohSounds=[]})},d.hasRole("admin")?l.sound.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.sounds=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.sound.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.sounds=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(c.sounds,{id:e.resourceId})}),n=null;if(c.musiconhold&&(n=_.find(c.sounds,{id:Number(c.musiconhold.id)})),n&&!_.some(t,["id",n.id])){var a=_.find(c.sounds,{id:n.id});a.canSelect=!1,t.push(a)}c.sounds=t})}else{var n=[],a=null;c.musiconhold&&(a=_.find(c.sounds,{id:Number(c.musiconhold.id)}));for(var i=0;i<c.sounds.length;i++)a&&c.sounds[i].id===a.id&&(c.sounds[i].canSelect=!1,n.push(c.sounds[i]));c.sounds=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=!0,u=1;function p(e){c.musiconholdMohSounds=e||{count:0,rows:[]}}function g(e){l.voiceMusicOnHold.removeSound({id:n.params.id,id2:e.id}).$promise.then(function(){_.remove(c.musiconholdMohSounds.rows,{id:e.id}),c.musiconholdMohSounds.count-=1,c.musiconholdMohSounds.rows.length||c.getMusicOnHoldMohSounds(),r.success({title:"MohSound deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETvoiceMusicOnHold"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMusicOnHold",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getMusicOnHoldMohSounds())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.voice").controller("MusicOnHoldMohSoundsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_MOHSOUND",g.mohSound=angular.copy(l),g.mohSounds=r,g.newMohSound=!1,g.mohSound||(g.mohSound={},g.title="VOICE.NEW_MOHSOUND",g.newMohSound=!0),t.params.id&&(g.mohSound.VoiceMusicOnHoldId=t.params.id),g.addNewMohSound=function(){g.errors=[],d.voiceMusicOnHold.addSound({id:t.params.id},g.mohSound).$promise.then(function(e){g.mohSounds.unshift(e.toJSON()),o.success({title:"MohSound properly created",msg:g.mohSound.name?g.mohSound.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMusicOnHold.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMohSound=function(){g.errors=[],d.voiceMusicOnHold.update({id:g.mohSound.id},g.mohSound).$promise.then(function(e){var t=_.find(g.mohSounds,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MohSound properly saved!",msg:g.mohSound.name?g.mohSound.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMusicOnHold.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMohSound=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The mohSound will be deleted.").ariaLabel("Delete MohSound").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceMusicOnHold.delete({id:g.mohSound.id}).$promise.then(function(){_.remove(g.mohSounds,{id:g.mohSound.id}),o.success({title:"MohSound properly deleted!",msg:(g.mohSound.name||"mohSound")+" has been deleted!"}),v(g.mohSound)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMusicOnHold.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.sound.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.sounds=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.sound.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.sounds=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.sounds,{id:e.resourceId})}),n=null;if(g.mohSound&&(n=_.find(g.sounds,{id:Number(g.mohSound.id)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.sounds,{id:n.id});a.canSelect=!1,t.push(a)}g.sounds=t})}else{var n=[],a=null;g.mohSound&&(a=_.find(g.sounds,{id:Number(g.mohSound.id)}));for(var i=0;i<g.sounds.length;i++)a&&g.sounds[i].id===a.id&&(g.sounds[i].canSelect=!1,n.push(g.sounds[i]));g.sounds=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","mohSounds","mohSound","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditMohSoundDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.musiconhold=c||e.params.musiconhold||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoMusicOnHolds=function(){e.go("app.voice.musiconholds")},u.saveMusicOnHold=function(){r.voiceMusicOnHold.update({id:u.musiconhold.id},u.musiconhold).$promise.then(function(){l.success({title:"MusicOnHold updated!",msg:u.musiconhold.name?u.musiconhold.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMusicOnHold",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","musiconhold","userProfileSection"],angular.module("app.voice").controller("MusicOnHoldController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.musiconholds=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="musiconholds",b.listOrder="",b.listOrderAsc=null,b.selectedMusicOnHolds=[],b.query={fields:"createdAt,updatedAt,id,name,mode,directory,application,format,sort",defaultEntry:"false",limit:10,page:1},b.arraymode=_.keyBy([{option:"Files",value:"'files'"},{option:"Custom",value:"'custom'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysort=_.keyBy([{option:"Random",value:"'random'"},{option:"Alphabetical",value:"'alpha'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.voice.musiconholds.edit",{id:e.id,musiconhold:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("musiconhold")+"?").htmlContent("<b>"+(e.name||"musiconhold")+"</b> will be deleted.").ariaLabel("delete musiconhold").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getMusicOnHolds=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceMusicOnHold.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="MusicOnHolds",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditMusicOnHold=function(e,t){i.show({controller:"CreateOrEditMusicOnHoldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/musiconholds/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{musiconhold:t,musiconholds:b.musiconholds.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteMusicOnHold=S,b.exportSelectedMusicOnHolds=function(){var e=angular.copy(b.selectedMusicOnHolds);return b.selectedMusicOnHolds=[],e},b.deleteSelectedMusicOnHolds=function(e){var t=i.confirm().title("Are you sure want to delete the selected musiconholds?").htmlContent("<b>"+b.selectedMusicOnHolds.length+" selected</b> will be deleted.").ariaLabel("delete MusicOnHolds").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedMusicOnHolds.forEach(function(e){S(e)}),b.selectedMusicOnHolds=[]})},b.deselectMusicOnHolds=function(){b.selectedMusicOnHolds=[]},b.selectAllMusicOnHolds=function(){b.selectedMusicOnHolds=b.musiconholds.rows};var A=!0,E=1;function y(e){b.musiconholds=e||{count:0,rows:[]}}function S(e){m.voiceMusicOnHold.delete({id:e.id}).$promise.then(function(){_.remove(b.musiconholds.rows,{id:e.id}),b.musiconholds.count-=1,b.musiconholds.rows.length||b.getMusicOnHolds(),p.success({title:_.startCase("MusicOnHold")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceMusicOnHold"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceMusicOnHold",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getMusicOnHolds())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","musiconholds","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("MusicOnHoldsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,h,d,c,m,u){var f=this;function p(){var e=2,t=[];t.push({type:"outbound",app:"Set",appdata:"CDR(type)=outbound",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"CDR(destination)="+(f.outboundroute.cutdigits?"${EXTEN:"+f.outboundroute.cutdigits+"}":"${EXTEN}"),context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"outboundrouteid="+f.outboundroute.id,context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),f.outboundroute.hasOwnProperty("recordingFormat")&&"none"!==f.outboundroute.recordingFormat&&(t.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_FORMAT="+f.outboundroute.recordingFormat||"wav",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}));for(var n=0,a=0;n<f.outboundrouteApps.rows.length;n++,a=0){var i=f.outboundrouteApps.rows[n],s=[],o=[];i.intervals="*,*,*,*"!==i.interval?[i.interval]:i.IntervalId?_.map(_.filter(f.intervals.rows,{IntervalId:i.IntervalId}),"interval"):[],i.context=f.outboundroute.context,i.exten=f.outboundroute.exten,i.type&&(i.type=i.type.toLowerCase()),i.hasOwnProperty("tag")&&i.tag&&"--"!==i.tag&&s.push({type:i.type.toLowerCase(),app:"Set",appdata:"CDR(tag)="+i.tag,context:f.outboundroute.context,exten:f.outboundroute.exten,priority:i.intervals.length+e+a++,VoiceExtensionId:f.outboundroute.id}),i.callerID?s.push({type:i.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)="+i.callerID+")",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:i.intervals.length+e+a++,VoiceExtensionId:f.outboundroute.id}):s.push({type:i.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):NoOp(No number available)",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:i.intervals.length+e+a++,VoiceExtensionId:f.outboundroute.id});for(var r=0;r<i.intervals.length;r++){var l=e+i.intervals.length,d=r===i.intervals.length-1?e+s.length+o.length+2:e+r+1;s.splice(r,0,{type:"outbound",app:"GotoIfTime",appdata:i.intervals[r]+"?"+f.outboundroute.context+",${EXTEN},"+l+":"+f.outboundroute.context+",${EXTEN},"+d,exten:f.outboundroute.exten,context:f.outboundroute.context,priority:e+r,VoiceExtensionId:f.outboundroute.id})}if("outboundDial"===i.appType){var c=_.find(f.apps,{appType:"outboundDial"});if(c&&c.fields){for(var m={},u=i.appdata.split(","),p=[],g=0,v=c.fields.length;g<v;g++)if(c.fields[g].hasOwnProperty("param"))switch(c.fields[g].name){case"trunk":m.trunk=u[c.fields[g].param].split("/")[1],m.phone=u[c.fields[g].param].split("/")[2],m.prefix=m.phone?m.phone.split("$")[0]:void 0,m.phone=f.outboundroute.cutdigits?(m.prefix||"")+"${EXTEN:"+f.outboundroute.cutdigits+"}":(m.prefix||"")+"${EXTEN}",p[c.fields[g].param]=["SIP",m.trunk,m.phone].join("/");break;case"options":m.options=u[c.fields[g].param],"none"!==f.outboundroute.recordingFormat?m.options.indexOf("U(xcally-mixmonitor-context)")<0&&(m.options+="U(xcally-mixmonitor-context)"):m.options=m.options.replace("U(xcally-mixmonitor-context)",""),p[c.fields[g].param]=m.options;break;default:p[c.fields[g].param]=u[c.fields[g].param]}i.appdata=p.join(",")}}i.priority=s.length?_.last(s).priority+1:e,e=(o.length?_.last(o).priority:i.priority)+1,t=_.concat(t,s,[i],o)}t.push({type:"outbound",app:"Hangup",exten:f.outboundroute.exten,context:f.outboundroute.context,priority:e,VoiceExtensionId:f.outboundroute.id}),h.voiceExtension.addApplications({id:f.outboundroute.id},_.sortBy(t,"priority")).$promise.then(function(e){f.outboundrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function g(e){a.hide(e)}f.currentUser=d.getCurrentUser(),f.errors=[],f.setting=m,f.license=c,f.crudPermissions=u,f.hasModulePermissions={},f.passwordPattern=f.setting&&f.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",f.title="VOICE.EDIT_OUTBOUNDROUTE",f.outboundroute=angular.copy(l),f.outboundroutes=r,f.newOutboundRoute=!1,f.outboundrouteApps={count:0,rows:[]},f.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",type:"Outbound",types:["always","custom","list"],fields:[],isApp:!1},{app:"Dial",appType:"outboundDial",context:"from-sip",type:"Outbound",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"trunks",route:"trunk",filters:{fields:"name",sort:"name"}},{name:"tags",route:"tag",filters:{fields:"name",sort:"name",nolimit:!0}}],fields:[{title:"Trunk",name:"trunk",type:"apiselect",values:"trunks",value:"trunk.name",option:"trunk.name",required:!0,param:0},{title:"Caller_ID",name:"callerID",type:"text",ngPattern:"/&quot;(.*)&quot;\\s&lt;(.*?)&gt;$/",help:!0},{title:"Prefix",name:"prefix",type:"text"},{title:"Tags",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",defaultValues:[{value:"'--'",option:"None"}]},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:null,type:"Outbound",appType:"custom",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Application_Name",name:"app",type:"text",required:!0,param:0},{title:"Arguments",name:"appdata",type:"text",param:1}]}],["app"]),{isApp:!1}),f.outboundroute||(f.outboundroute={appdata:"Outbound Call",type:"outbound",context:"from-sip",recordingFormat:"none"},f.title="VOICE.NEW_OUTBOUNDROUTE",f.newOutboundRoute=!0),f.addNewOutboundRoute=function(){f.errors=[],h.voiceExtension.save(f.outboundroute).$promise.then(function(e){f.outboundroutes.unshift(e.toJSON()),o.success({title:"OutboundRoute properly created",msg:f.outboundroute.name?f.outboundroute.name+" has been created!":""}),g(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){f.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},f.saveOutboundRoute=function(){f.errors=[],h.voiceExtension.update({id:f.outboundroute.id},f.outboundroute).$promise.then(function(e){var t=_.find(f.outboundroutes,{id:e.id});t&&(_.merge(t,_.pick(e.toJSON(),_.keys(t))),h.voiceExtension.get({sort:"priority",VoiceExtensionId:t.id,isApp:!0,nolimit:!0}).$promise.then(function(e){f.outboundrouteApps=e,p()})),o.success({title:"OutboundRoute properly saved!",msg:f.outboundroute.name?f.outboundroute.name+" has been saved!":""}),g(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){f.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},f.deleteOutboundRoute=function(n){h.voicePrefix.get({VoiceExtensionId:l.id}).$promise.then(function(e){if(e&&e.rows&&0<e.rows.length)return o.error({title:"Outbound route not deleted!",msg:"You can't remove an outbound route associated to an out prefix"});f.errors=[];var t=a.confirm().title("Are you sure?").content("The outboundroute will be deleted.").ariaLabel("Delete OutboundRoute").ok("Delete").cancel("Cancel").targetEvent(n);a.show(t).then(function(){h.voiceExtension.delete({id:f.outboundroute.id}).$promise.then(function(){_.remove(f.outboundroutes,{id:f.outboundroute.id}),o.success({title:"OutboundRoute properly deleted!",msg:(f.outboundroute.name||"outboundroute")+" has been deleted!"}),g(f.outboundroute)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){f.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})})},f.getDateFromString=function(e){return null===e?void 0:new Date(e)},f.rewriteRouting=p,f.closeDialog=g,d.hasRole("admin")?h.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){f.contexts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):h.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){f.contexts=e.rows||[]}).then(function(){return h.userProfileSection.get({userProfileId:f.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:h.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(f.contexts,{id:e.resourceId})}),n=null;if(f.outboundroute&&(n=_.find(f.contexts,{name:f.outboundroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(f.contexts,{id:n.id});a.canSelect=!1,t.push(a)}f.contexts=t}):h.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){f.contexts=e.rows||[]})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","outboundroutes","outboundroute","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditOutboundRouteDialogController",e)}(),function(){"use strict";function e(b,i,a,s,n,e,t){var A=this;function o(e,t){if(A.outboundrouteApps.rows.length){var n=A.outboundrouteApps.rows[t]?A.outboundrouteApps.rows[t]:A.outboundrouteApps.rows[0];i.show({controller:"EditoutboundApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/outboundroutes/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{outboundrouteApp:n,outboundroute:A.outboundroute,crudPermissions:A.crudPermissions}}).then(function(e){e&&(e.id?A.outboundrouteApps.rows[t]=e:A.outboundrouteApps.rows.splice(t,0,e),r())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function r(e){var t=2,n=[];n.push({type:"outbound",app:"Set",appdata:"CDR(type)=outbound",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"CDR(destination)="+(A.outboundroute.cutdigits?"${EXTEN:"+A.outboundroute.cutdigits+"}":"${EXTEN}"),context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"CDR(routeid)="+A.outboundroute.id,context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id});var a=t++;n.push({type:"outbound",app:"ExecIf",appdata:"$[${LEN(${CDR(prefix)})} > 0]?Goto("+(a+2)+"):Goto("+(a+1)+")",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:a,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:A.outboundroute.cutdigits?"CDR(prefix)=${EXTEN:0:"+A.outboundroute.cutdigits+"}":"CDR(prefix)=noprefix",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"outboundrouteid="+A.outboundroute.id,context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),A.outboundroute.hasOwnProperty("recordingFormat")&&"none"!==A.outboundroute.recordingFormat&&(n.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_FORMAT="+A.outboundroute.recordingFormat||"wav",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}));for(var i=0,s=0;i<A.outboundrouteApps.rows.length;i++,s=0){var o=A.outboundrouteApps.rows[i],r=[],l=[];o.intervals="*,*,*,*"!==o.interval?[o.interval]:o.IntervalId?_.map(_.filter(A.intervals.rows,{IntervalId:o.IntervalId}),"interval"):[],o.context=A.outboundroute.context,o.exten=A.outboundroute.exten,o.type&&(o.type=o.type.toLowerCase()),o.hasOwnProperty("tag")&&o.tag&&"--"!==o.tag&&r.push({type:o.type.toLowerCase(),app:"Set",appdata:"CDR(tag)="+o.tag,context:A.outboundroute.context,exten:A.outboundroute.exten,priority:o.intervals.length+t+s++,VoiceExtensionId:A.outboundroute.id}),o.callerID?r.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)="+o.callerID+")",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:o.intervals.length+t+s++,VoiceExtensionId:A.outboundroute.id}):r.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):NoOp(No number available)",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:o.intervals.length+t+s++,VoiceExtensionId:A.outboundroute.id});for(var d=0;d<o.intervals.length;d++){var c=t+o.intervals.length,m=d===o.intervals.length-1?t+r.length+l.length+2:t+d+1;r.splice(d,0,{type:"outbound",app:"GotoIfTime",appdata:o.intervals[d]+"?"+A.outboundroute.context+",${EXTEN},"+c+":"+A.outboundroute.context+",${EXTEN},"+m,exten:A.outboundroute.exten,context:A.outboundroute.context,priority:t+d,VoiceExtensionId:A.outboundroute.id})}if(e&&"outboundDial"===o.appType){var u=_.find(A.apps,{appType:"outboundDial"});if(u&&u.fields){for(var p={},g=o.appdata.split(","),v=[],h=0,f=u.fields.length;h<f;h++)if(u.fields[h].hasOwnProperty("param"))switch(u.fields[h].name){case"trunk":p.trunk=g[u.fields[h].param].split("/")[1],p.phone=g[u.fields[h].param].split("/")[2],p.prefix=p.phone?p.phone.split("$")[0]:void 0,p.phone=A.outboundroute.cutdigits?(p.prefix||"")+"${EXTEN:"+A.outboundroute.cutdigits+"}":(p.prefix||"")+"${EXTEN}",v[u.fields[h].param]=["SIP",p.trunk,p.phone].join("/");break;case"options":p.options=g[u.fields[h].param],"none"!==A.outboundroute.recordingFormat?p.options.indexOf("U(xcally-mixmonitor-context)")<0&&(p.options+="U(xcally-mixmonitor-context)"):p.options=p.options.replace("U(xcally-mixmonitor-context)",""),v[u.fields[h].param]=p.options;break;default:v[u.fields[h].param]=g[u.fields[h].param]}o.appdata=v.join(",")}}o.priority=r.length?_.last(r).priority+1:t,t=(l.length?_.last(l).priority:o.priority)+1,n=_.concat(n,r,[o],l)}n.push({type:"outbound",app:"Hangup",exten:A.outboundroute.exten,context:A.outboundroute.context,priority:t,VoiceExtensionId:A.outboundroute.id}),b.voiceExtension.addApplications({id:A.outboundroute.id},_.sortBy(n,"priority")).$promise.then(function(e){A.outboundrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function l(e){A.outboundrouteApps=e||{count:0,rows:[]}}A.currentUser=t.getCurrentUser(),A.outboundroute={},A.outboundrouteApps={count:0,rows:[]},A.selectedOutboundRouteApps=[],A.crudPermissions,A.query={sort:"priority"},A.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",type:"Outbound",types:["always","custom","list"],fields:[],isApp:!1},{app:"Dial",appType:"outboundDial",context:"from-sip",type:"Outbound",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"trunks",field:{name:"trunk",key:"name"},route:"trunk",filters:{fields:"id,name",sort:"name"},permissions:{section:1011}},{name:"tags",field:{name:"tag",key:"name"},route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1008}}],fields:[{title:"Trunk",name:"trunk",type:"apiselect",values:"trunks",value:"trunk.name",option:"trunk.name",required:!0,param:0},{title:"Caller_ID",name:"callerID",type:"text",help:!0},{title:"Prefix",name:"prefix",type:"text"},{title:"Tags",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",defaultValues:[{value:"'--'",option:"None"}]},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:null,type:"Outbound",appType:"custom",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Application_Name",name:"app",type:"text",required:!0,param:0},{title:"Arguments",name:"appdata",type:"text",param:1}]}],["app"]),{isApp:!1}),A.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},A.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){o(e,e.newIndex)},onSort:function(e){r()}},A.init=function(e,t){A.outboundroute=e,A.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},A.applications.disabled=!A.crudPermissions.canEdit,n.on("voiceExtension:update",A.onVoiceExtensionUpdate),A.query.VoiceExtensionId=e.id,A.query.isApp=!0,A.query.nolimit=!0,A.getOutboundRouteApps(),A.getIntervals()},A.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){A.outboundrouteApps.rows.splice(t,1),r()},function(){console.log("CANCEL")})},A.getOutboundRouteApps=function(){A.promise=b.voiceExtension.get(A.query,l).$promise},A.editOutboundRouteApp=o,A.editInterval=function(e,t){if(A.outboundrouteApps.rows.length){var n=A.outboundrouteApps.rows[t]?A.outboundrouteApps.rows[t]:A.outboundrouteApps.rows[0];i.show({controller:"EditoutboundAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/outboundroutes/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:A.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,r())})}},A.deleteOutboundRouteApp=function(e){_.remove(A.outboundrouteApps.rows,{id:e.id}),r(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},A.deleteSelectedOutboundRouteApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+A.selectedOutboundRouteApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){A.selectedOutboundRouteApps.forEach(function(e){_.remove(A.outboundrouteApps.rows,{id:e.id})}),A.selectedOutboundRouteApps=[],r()})},A.rewriteRouting=r,A.getIntervals=function(){return b.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){A.intervals=e}).catch(function(e){console.error(e)})},A.onVoiceExtensionUpdate=function(e){e.VoiceExtensionId===A.outboundroute.id&&r(!0)},e.$on("$destroy",function(){n.removeAllListeners("voiceExtension:update")})}e.$inject=["api","$mdDialog","$document","toasty","socket","$scope","Auth"],angular.module("app.voice").controller("OutboundRouteActionsController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.custom=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.custom.appdata)switch(l.custom.appType?l.custom.appType.toLowerCase():l.custom.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.custom.appdata.split(",");l.custom.key=d[0],l.custom.language=d[1],l.custom.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.custom.appdata.split(",");l.custom.accesskeyid=d[0],l.custom.secretaccesskey=d[1],l.custom.lexregion=d[2],l.custom.botname=d[3],l.custom.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.custom.appdata.split(",");l.custom.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.custom.text=d.slice(1,d.length).join(",");break;case"message":l.custom.text=l.custom.appdata;break;case"set":l.custom.name=l.custom.appdata.split("=")[0],l.custom.value=l.custom.appdata.split("=")[1];break;case"agi":l.custom.project=l.custom.appdata;break;default:var c=l.custom.appdata.split(",");l.custom.app=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.custom.appdata=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.custom.type&&"outbound"===l.custom.type.toLowerCase()&&"outbounddial"===l.custom.appType.toLowerCase()&&(l.custom.prefix=l.custom.phone?l.custom.phone.split("$")[0]:void 0,l.custom.callerId=l.custom.callerID?"CALLERID(all)="+l.custom.callerID:void 0),l.saveOutboundRouteApp=function(){l.errors=[];var e=[];l.custom.type&&"outbound"===l.custom.type.toLowerCase()&&"outboundDial"===l.custom.appType&&(l.custom.phone=i.cutdigits?(l.custom.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.custom.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.custom.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.custom.options+="U(xcally-mixmonitor-context)"):l.custom.options=l.custom.options.replace("U(xcally-mixmonitor-context)",""));if(l.custom.appType&&"custom"===l.custom.appType);else switch((l.custom.app||l.custom.appType).toLowerCase()){case"set":l.custom.appdata=l.custom.name+"="+l.custom.value;break;case"custom":break;default:e[0]=l.custom.app,e[1]=l.custom.appdata,l.custom.appdata=e.join(",")}m(l.custom)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","outboundrouteApp","outboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditoutboundAppcustomDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditoutboundAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.outbounddial=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.outbounddial.appdata)switch(l.outbounddial.appType?l.outbounddial.appType.toLowerCase():l.outbounddial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.outbounddial.appdata.split(",");l.outbounddial.key=d[0],l.outbounddial.language=d[1],l.outbounddial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.outbounddial.appdata.split(",");l.outbounddial.accesskeyid=d[0],l.outbounddial.secretaccesskey=d[1],l.outbounddial.lexregion=d[2],l.outbounddial.botname=d[3],l.outbounddial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.outbounddial.appdata.split(",");l.outbounddial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.outbounddial.text=d.slice(1,d.length).join(",");break;case"message":l.outbounddial.text=l.outbounddial.appdata;break;case"set":l.outbounddial.name=l.outbounddial.appdata.split("=")[0],l.outbounddial.value=l.outbounddial.appdata.split("=")[1];break;case"agi":l.outbounddial.project=l.outbounddial.appdata;break;default:var c=l.outbounddial.appdata.split(",");l.outbounddial.trunk=c[0].split("/")[1],l.outbounddial.phone=c[0].split("/")[2],l.outbounddial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.outbounddial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.outbounddial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}function m(e){t.hide(e)}l.outbounddial.type&&"outbound"===l.outbounddial.type.toLowerCase()&&"outbounddial"===l.outbounddial.appType.toLowerCase()&&(l.outbounddial.prefix=l.outbounddial.phone?l.outbounddial.phone.split("$")[0]:void 0,l.outbounddial.callerId=l.outbounddial.callerID?"CALLERID(all)="+l.outbounddial.callerID:void 0),l.saveOutboundRouteApp=function(){l.errors=[];var e=[];l.outbounddial.type&&"outbound"===l.outbounddial.type.toLowerCase()&&"outboundDial"===l.outbounddial.appType&&(l.outbounddial.phone=i.cutdigits?(l.outbounddial.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.outbounddial.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.outbounddial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.outbounddial.options+="U(xcally-mixmonitor-context)"):l.outbounddial.options=l.outbounddial.options.replace("U(xcally-mixmonitor-context)",""));if(l.outbounddial.appType&&"custom"===l.outbounddial.appType);else switch((l.outbounddial.app||l.outbounddial.appType).toLowerCase()){case"set":l.outbounddial.appdata=l.outbounddial.name+"="+l.outbounddial.value;break;case"custom":break;default:e[0]=["SIP",l.outbounddial.trunk,l.outbounddial.phone].join("/"),e[1]=l.outbounddial.timeout,e[2]=l.outbounddial.options,e[3]=l.outbounddial.url,l.outbounddial.appdata=e.join(",")}m(l.outbounddial)},l.closeDialog=m,o.hasRole("admin")?s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.trunks=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.trunks=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.trunks,{id:e.resourceId})}),n=null;if(l.outbounddial&&(n=_.find(l.trunks,{name:l.outbounddial.trunk})),n&&!_.some(t,["id",n.id])){var a=_.find(l.trunks,{id:n.id});a.canSelect=!1,t.push(a)}l.trunks=t})}else{var n=[],a=null;l.outbounddial&&(a=_.find(l.trunks,{name:l.outbounddial.trunk}));for(var i=0;i<l.trunks.length;i++)a&&l.trunks[i].id===a.id&&(l.trunks[i].canSelect=!1,n.push(l.trunks[i]));l.trunks=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.hasRole("admin")?s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1008}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.tags,{id:e.resourceId})}),n=null;if(l.outbounddial&&(n=_.find(l.tags,{name:l.outbounddial.tag})),n&&!_.some(t,["id",n.id])){var a=_.find(l.tags,{id:n.id});a.canSelect=!1,t.push(a)}l.tags=t})}else{var n=[],a=null;l.outbounddial&&(a=_.find(l.tags,{name:l.outbounddial.tag}));for(var i=0;i<l.tags.length;i++)a&&l.tags[i].id===a.id&&(l.tags[i].canSelect=!1,n.push(l.tags[i]));l.tags=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtags",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","outboundrouteApp","outboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditoutboundAppoutbounddialDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.outboundroute=c||e.params.outboundroute||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoOutboundRoutes=function(){e.go("app.voice.outboundroutes")},u.saveOutboundRoute=function(){r.voiceExtension.update({id:u.outboundroute.id},u.outboundroute).$promise.then(function(){l.success({title:"OutboundRoute updated!",msg:u.outboundroute.name?u.outboundroute.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceExtension",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.outboundroute&&(n=_.find(u.contexts,{name:u.outboundroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","outboundroute","userProfileSection"],angular.module("app.voice").controller("OutboundRouteController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.outboundroutes=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="outboundroutes",b.listOrder="",b.listOrderAsc=null,b.selectedOutboundRoutes=[],b.query={fields:"createdAt,updatedAt,id,appdata,type,exten,context,recordingFormat,cutdigits,description",type:"outbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,page:1},b.arrayrecordingFormat=_.keyBy([{option:"none",value:"'none'"},{option:"wav",value:"'wav'"},{option:"wav49",value:"'WAV'"},{option:"gsm",value:"'gsm'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.voice.outboundroutes.edit",{id:e.id,outboundroute:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("outboundroute")+"?").htmlContent("<b>"+(e.name||"outboundroute")+"</b> will be deleted.").ariaLabel("delete outboundroute").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getOutboundRoutes=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceExtension.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="OutboundRoutes",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditOutboundRoute=function(e,t){i.show({controller:"CreateOrEditOutboundRouteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/outboundroutes/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{outboundroute:t,outboundroutes:b.outboundroutes.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteOutboundRoute=S,b.exportSelectedOutboundRoutes=function(){var e=angular.copy(b.selectedOutboundRoutes);return b.selectedOutboundRoutes=[],e},b.deleteSelectedOutboundRoutes=function(e){var t=i.confirm().title("Are you sure want to delete the selected outboundroutes?").htmlContent("<b>"+b.selectedOutboundRoutes.length+" selected</b> will be deleted.").ariaLabel("delete OutboundRoutes").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedOutboundRoutes.forEach(function(e){S(e)}),b.selectedOutboundRoutes=[]})},b.deselectOutboundRoutes=function(){b.selectedOutboundRoutes=[]},b.selectAllOutboundRoutes=function(){b.selectedOutboundRoutes=b.outboundroutes.rows},g.hasRole("admin")?m.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.contexts=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.contexts=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.contexts,{id:e.resourceId})}),n=null;if(b.outboundroute&&(n=_.find(b.contexts,{name:b.outboundroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(b.contexts,{id:n.id});a.canSelect=!1,t.push(a)}b.contexts=t}):m.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){b.contexts=e.rows||[]})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.outboundroutes=e||{count:0,rows:[]}}function S(t){m.voicePrefix.get({VoiceExtensionId:t.id}).$promise.then(function(e){if(e&&e.rows&&0<e.rows.length)return p.error({title:"Outbound route not deleted!",msg:"You can't remove an outbound route associated to an out prefix"});m.voiceExtension.delete({id:t.id}).$promise.then(function(){_.remove(b.outboundroutes.rows,{id:t.id}),b.outboundroutes.count-=1,b.outboundroutes.rows.length||b.getOutboundRoutes(),p.success({title:_.startCase("OutboundRoute")+" deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceExtension"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceExtension",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getOutboundRoutes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","outboundroutes","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("OutboundRoutesController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m,u,p,g){var v=this,h=!0;function f(){var e=i.localStorage.getItem("motion2.realtime.abandoned.voice.contacts:"+v.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(v.query=_.merge(e.query,_.omit(v.query,["sort","limit","page"])),v.query=_.omit(v.query,"filter")),d.hasRole("admin")?o.user.getQueues({id:d.getCurrentUser().id,fields:"id,name",channel:"voice",type:"inbound",nolimit:!0}).$promise.then(function(e){v.queues=e||{count:0,rows:[]},v.queuesMap=_.mapValues(_.keyBy(v.queues.rows,"name"),"name")}).catch(function(e){console.error(e)}).finally(function(){v.getContacts()}):o.userProfile.getResources({id:v.currentUser.userProfileId,section:"QueueCampaigns",channel:"voice",type:"inbound",sort:"-updatedAt",nolimit:!0}).$promise.then(function(e){v.queues=e||{count:0,rows:[]},v.queuesMap=_.mapValues(_.keyBy(v.queues.rows,"name"),"name")}).catch(function(e){console.error(e)}).finally(function(){v.getContacts()})}function b(e){v.contacts=e||{count:0,rows:[]},h=!1,v.refresh=!0}v.showTooltip=!1,v.refresh=!0,v.disable=[],v.agents=p||[],v.currentUser=d.getCurrentUser(),v.localizationMap=u,v.pickerModel={dateStart:null,dateEnd:null},v.queues={},v.contacts={count:0,rows:[]},v.dispositions=g,v.userProfile=r,v.userProfileSection=l&&1==l.count?l.rows[0]:null,v.crudPermissions=d.parseCrudPermissions(v.userProfileSection?v.userProfileSection.crudPermissions:null),v.query={fields:"id,type,calleridnum,calleridname,queue,queuecallerabandonAt,queuecallerexitAt,queuecallerexitreason,assigned,lastAssignedTo,updatedAt,disposition",type:"inbound",queuecallerexitreason:"TIMEOUT,ABANDONED",sort:"-updatedAt",limit:10,page:1},v.clearAll=function(){v.query.createdAt=void 0,v.pickerModel={dateStart:null,dateEnd:null},v.getContacts()},v.getContacts=function(){if(v.refresh=!1,v.pickerModel.dateStart&&!h){var e=moment(v.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();v.query.createdAt={$gte:v.pickerModel.dateStart,$lte:e}}else v.query.createdAt=void 0;v.query.queue=v.query.queue,v.query.offset=(v.query.page-1)*v.query.limit,i.localStorage.setItem("motion2.realtime.abandoned.voice.contacts:"+v.currentUser.id,JSON.stringify({query:_.omit(v.query,"queue")})),v.promise=o.voiceQueueReport.getVoiceQueuesReport(v.query,b).$promise},v.refreshContacts=function(){v.showTooltip=!1,v.getContacts()},v.onInit=f,v.assignedA=function(e,t){e&&(v.disable[e.id]=!0,o.voiceQueueReport.update({id:e.id,lastAssignedTo:t?t.name:null,assigned:!!t}).$promise.catch(function(e){console.log(e)}).finally(function(){v.disable[e.id]=!1}))},v.disposed=function(e,t){e&&o.voiceQueueReport.update({id:e.id,disposition:t||null}).$promise.catch(function(e){console.log(e)})},v.onSavevoiceQueueReport=function(e){e&&v.queuesMap&&"inbound"===e.type&&v.queuesMap[e.queue]&&(v.showTooltip=!0)},v.onUpdatevoiceQueueReport=function(e){if(e){var t=_.findIndex(v.contacts.rows,["id",e.id]);0<=t&&_.merge(v.contacts.rows[t],e)}},c.onWithoutApply("voiceQueueReport:save",v.onSavevoiceQueueReport),c.on("voiceQueueReport:update",v.onUpdatevoiceQueueReport),f();var A=!0,E=1;e.$watch("vm.query.filter",function(e,t){A?n(function(){A=!1}):(t||(E=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=E),v.getContacts())}),e.$on("$destroy",function(){c.removeAllListeners("voiceQueueReport:save"),c.removeAllListeners("voiceQueueReport:update")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","userProfile","userProfileSection","Auth","socket","toasty","dateFilterLocalizationFactory","agents","dispositions"],angular.module("app.voice").controller("AbandonedCallsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"voice",direction:"inbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,s){var o=this;o.calls=i||{rows:[],count:0},o.query={limit:10,page:1},o.channelStatus=s.channelStatusOut,o.onSave=function(e){var t=_.find(o.calls.rows,{channel:e.channel});e.channelstatedesc=e.dialstatus?"up":"ring",t?_.merge(t,e):e.channel&&o.calls.rows.push(e)},o.onRemove=function(e){var t=_.findIndex(o.calls.rows,{channel:e.channel});0<=t&&(o.calls.rows[t].status="hangup");n(function(){o.calls.rows.splice(t,1)},5e3)},a.on("voice_outbound_channel:save",o.onSave),a.on("voice_outbound_channel:remove",o.onRemove),e.$on("$destroy",function(){a.removeAllListeners("voice_outbound_channel:save"),a.removeAllListeners("voice_outbound_channel:remove")})}e.$inject=["$scope","$timeout","api","socket","rpcCalls","helperClasses"],angular.module("app.voice").controller("OutboundCallsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,t,a,n,i,s,o,r,l,d,c,m,u){var p=this;p.currentUser=u.getCurrentUser(),p.agents=n||{count:0,rows:[]},p.queues=i?_.keyBy(i.rows?i.rows:[],"name"):{},p.rpcVoiceQueuesChannelsTmp=s?_.keyBy(s.rows?_.filter(s.rows,{type:"inbound"}):[],"uniqueid"):{},p.rpcVoiceQueuesChannels={},p.userProfile=c,p.userProfileSection=m&&1==m.count?m.rows[0]:null,p.crudPermissions=u.parseCrudPermissions(p.userProfileSection?p.userProfileSection.crudPermissions:null),p.queryChannels={limit:10,page:1},p.getSize=function(e){return _.size(e)},p.$onInit=function(){_.forIn(p.rpcVoiceQueuesChannelsTmp,function(e,t){_.find(p.queues,{name:e.name})&&(p.rpcVoiceQueuesChannels[t]=e)})},p.onSave=function(e){"inbound"===e.type&&_.find(p.queues,{name:e.name})&&(p.rpcVoiceQueuesChannels[e.uniqueid]=e)},p.onRemove=function(e){p.rpcVoiceQueuesChannels[e.uniqueid]&&delete p.rpcVoiceQueuesChannels[e.uniqueid]},p.hangup=function(t){return o.rpc.getVoiceQueuesChannelHangup({uniqueid:t}).$promise.then(function(e){d.success({title:"Channel "+t+" properly hangup!",msg:e.message||""})}).catch(function(e){d.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},p.redirectToAgent=function(t,e,n){return o.rpc.getVoiceQueuesChannelRedirect({uniqueid:t,exten:e,context:n}).$promise.then(function(e){d.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){d.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},p.redirectToNumber=function(e,t){var n=a.prompt().title("Which number do you want transfer the call to?").placeholder("Number").targetEvent(e).ok("Ok").cancel("Cancel");return a.show(n).then(function(e){return o.rpc.getVoiceQueuesChannelRedirect({uniqueid:t,exten:e}).$promise}).then(function(e){d.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){d.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},r.on("voice_queue_channel:save",p.onSave),r.on("voice_queue_channel:remove",p.onRemove),e.$on("$destroy",function(){r.removeAllListeners("voice_queue_channel:save"),r.removeAllListeners("voice_queue_channel:remove")})}e.$inject=["$scope","$timeout","$mdDialog","agents","queues","rpcVoiceQueuesChannels","api","socket","helperClasses","toasty","userProfile","userProfileSection","Auth"],angular.module("app.voice").controller("QueueCallsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["total","answered","unmanaged","abandoned","sumHoldTime","sumDuration","sumBillable"];function u(){_.forIn(c.queues,function(e,t){c.rpcQueues[t]&&_.merge(e,_.pick(c.rpcQueues[t],m))})}c.count=a.count,c.queues=a?_.keyBy(a.rows?a.rows:[],"id"):{},c.rpcQueues=i?_.keyBy(i.rows?i.rows:[],"id"):{},c.userProfile=r,c.userProfileSection=l&&1==l.count?l.rows[0]:null,c.crudPermissions=d.parseCrudPermissions(c.userProfileSection?c.userProfileSection.crudPermissions:null),d.hasRole("admin")?c.query={type:"inbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1}:c.query={id:d.getCurrentUser().id,channel:"voice",type:"inbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1},c.success=v,c.getQueues=function(){c.query.offset=(c.query.page-1)*c.query.limit,d.hasRole("admin")?c.promise=s.voiceQueue.get(c.query,v).$promise:(c.query.id=c.userProfile.id,c.query.section="VoiceQueues",c.promise=s.userProfile.getResources(c.query,v).$promise)},c.onSave=function(e){c.queues[e.id]&&_.merge(c.queues[e.id],_.pick(e,m))},c.$onInit=u,o.onWithoutApply("voice_queue:save",c.onSave),c.interval=t(function(){},999);var p=!0,g=1;function v(e){c.count=e.count,c.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},u()}e.$watch("vm.query.filter",function(e,t){p?n(function(){p=!1}):(t||(g=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=g),c.getQueues())}),e.$on("$destroy",function(){o.removeAllListeners("voice_queue:save"),c.interval&&t.cancel(c.interval)})}e.$inject=["$scope","$timeout","$interval","queues","rpcQueues","api","socket","userProfile","userProfileSection","Auth"],angular.module("app.voice").controller("QueueParamsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.voiceQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].VoiceQueueId].paused++,g.queues[e[t].rows[n].VoiceQueueId].loggedInDb++,g.queues[e[t].rows[n].VoiceQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].VoiceQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"voice",type:"inbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.voiceQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="VoiceQueues",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditVoiceQueue=function(e,t){a.show({controller:"CreateOrEditVoiceQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{voiceQueue:t,voiceQueues:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.agentAdd=function(e,t){a.show({controller:"VoiceQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{voiceQueue:t,voiceQueues:g.queues?g.queues.rows:[],realtime:!0,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.voiceQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&_.merge(g.queues[e.id],_.pick(e,v))},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.VoiceQueueId]&&(g.queues[e.VoiceQueueId].loggedInDb+=1,g.queues[e.VoiceQueueId].agents[e.UserId]=e.VoiceQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.VoiceQueueId]&&0<g.queues[e.VoiceQueueId].loggedInDb&&(g.queues[e.VoiceQueueId].loggedInDb-=1,delete g.queues[e.VoiceQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.onWithoutApply("voice_queue:save",g.onSave),g.interval=s(function(){},999),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("voice_queue:save"),g.interval&&s.cancel(g.interval),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.voice").controller("QueuesVoiceRealtimeController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){var a=this;switch(t.disconnect(),t.connect(),a.selectedTab=0,n.current.name){case"app.voice.realtime.agents":a.selectedTab=0;break;case"app.voice.realtime.telephones":a.selectedTab=1;break;case"app.voice.realtime.trunks":a.selectedTab=2;break;case"app.voice.realtime.queues":a.selectedTab=3;break;case"app.voice.realtime.queue_calls":a.selectedTab=4;break;case"app.voice.realtime.abandonedcalls":a.selectedTab=5;break;case"app.voice.realtime.queue_params":a.selectedTab=6;break;case"app.voice.realtime.outbound_calls":a.selectedTab=7;break;default:a.selectedTab=0,n.go("app.voice.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.voice.realtime.agents");break;case 1:n.go("app.voice.realtime.telephones");break;case 2:n.go("app.voice.realtime.trunks");break;case 3:n.go("app.voice.realtime.queues");break;case 4:n.go("app.voice.realtime.queue_calls");break;case 5:n.go("app.voice.realtime.abandonedcalls");break;case 6:n.go("app.voice.realtime.queue_params");break;case 7:n.go("app.voice.realtime.outbound_calls");break;default:n.go("app.voice.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.voice").controller("VoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c){var m=this,u=["fullname","internal","state","status"];function p(){_.forIn(m.telephones,function(e,t){m.rpcTelephones[t]&&_.merge(e,_.pick(m.rpcTelephones[t],u))})}m.count=a.count,m.attributes=["fullname","internal","state","status","address"],m.telephones=a?_.keyBy(a.rows?a.rows:[],"id"):{},m.rpcTelephones=i?_.keyBy(i.rows?i.rows:[],"id"):{},m.userProfile=l,m.userProfileSection=d&&1==d.count?d.rows[0]:null,m.crudPermissions=c.parseCrudPermissions(m.userProfileSection?m.userProfileSection.crudPermissions:null),m.query={fields:"id,fullname,internal",role:"telephone",sort:"-updatedAt",limit:10,page:1},m.statusClass=r.status,m.stateClass=r.state,m.success=h,m.$onInit=p,m.showInfo=function(e){t.show(t.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},m.getTelephones=function(){m.query.offset=(m.query.page-1)*m.query.limit,c.hasRole("admin")?m.promise=s.user.get(m.query,h).$promise:(m.query.id=m.userProfile.id,m.query.section="Telephones",m.promise=s.userProfile.getResources(m.query,h).$promise)},m.onSave=function(e){m.telephones[e.id]&&_.merge(m.telephones[e.id],_.pick(e,u))},o.on("telephone:save",m.onSave);var g=!0,v=1;function h(e){m.telephones=e?_.keyBy(e.rows?e.rows:[],"id"):{},p()}e.$watch("vm.query.filter",function(e,t){g?n(function(){g=!1}):(t||(v=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=v),m.getTelephones())}),e.$on("$destroy",function(){o.removeAllListeners("telephone:save")})}e.$inject=["$scope","$timeout","$mdDialog","telephones","rpcTelephones","api","socket","helperClasses","userProfile","userProfileSection","Auth"],angular.module("app.voice").controller("TelephonesVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m){var u=this,p=["status","stateRegistry","registry","host","port","internal","state","status"];function g(){for(var e,t=0;t<u.trunks.length;t+=1)0<=(e=_.findIndex(u.rpcTrunks,["id",u.trunks[t].id]))&&_.merge(u.trunks[t],_.pick(u.rpcTrunks[e],p))}function v(e,t,n){0<=t&&_.merge(e[t],_.pick(n,p))}u.currentUser=m.getCurrentUser(),u.count=a.count,u.trunks=a?a.rows:[],u.rpcTrunks=i&&i.rows?i.rows:[],u.query={fields:"id,name",active:!0,sort:"-updatedAt",limit:10,page:1},u.statusClass=r.status,u.stateClass=r.state,u.userProfile=d,u.userProfileSection=c&&1==c.count?c.rows[0]:null,u.crudPermissions=m.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.success=b,u.$onInit=g,u.showInfo=function(e){t.show(t.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},u.getTrunks=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=s.trunk.get(u.query,b).$promise:(u.query.id=u.userProfile.id,u.query.section="Trunks",u.promise=s.userProfile.getResources(u.query,b).$promise)},u.goToTrunk=function(e,t){l.go("app.tools.trunks.edit",{id:t.id})},u.onSave=function(e){var t=_.findIndex(u.trunks,["id",e.id]),n=_.findIndex(u.rpcTrunks,["id",e.id]);v(u.trunks,t,e),v(u.rpcTrunks,n,e)},o.on("trunk:save",u.onSave);var h=!0,f=1;function b(e){u.count=e.count,u.trunks=e&&e.rows?e.rows:[],g()}e.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=f),u.getTrunks())}),e.$on("$destroy",function(){o.removeAllListeners("trunk:save")})}e.$inject=["$scope","$timeout","$mdDialog","trunks","rpcTrunks","api","socket","helperClasses","$state","userProfile","userProfileSection","Auth"],angular.module("app.voice").controller("TrunksVoiceRealtimeController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_VOICEMAIL",g.voicemail=angular.copy(l),g.voicemails=r,g.newVoicemail=!1,g.voicemail||(g.voicemail={attach:"no"},g.title="VOICE.NEW_VOICEMAIL",g.newVoicemail=!0),g.addNewVoicemail=function(){g.errors=[],d.voiceMail.save(g.voicemail).$promise.then(function(e){g.voicemails.unshift(e.toJSON()),o.success({title:"Voicemail properly created",msg:g.voicemail.name?g.voicemail.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMail.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMail.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVoicemail=function(){g.errors=[],d.voiceMail.update({id:g.voicemail.id},g.voicemail).$promise.then(function(e){var t=_.find(g.voicemails,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Voicemail properly saved!",msg:g.voicemail.name?g.voicemail.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMail.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMail.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVoicemail=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The voicemail will be deleted.").ariaLabel("Delete Voicemail").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceMail.delete({id:g.voicemail.id}).$promise.then(function(){_.remove(g.voicemails,{id:g.voicemail.id}),o.success({title:"Voicemail properly deleted!",msg:(g.voicemail.name||"voicemail")+" has been deleted!"}),v(g.voicemail)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMail.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMail.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","voicemails","voicemail","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditVoicemailDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.voicemail={},c.voicemailMessages={count:0,rows:[]},c.selectedVoicemailMessages=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,callerid,duration,audio,stamp,msg_id",sort:"-stamp",limit:10,page:1},c.init=function(e,t){c.voicemail=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.voicemail.id,c.getVoicemailMessages()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the message?").htmlContent("<b>"+(e.name||"message")+"</b> will be deleted.").ariaLabel("delete message").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.voiceMailMessageDownload=function(s,e,t){return l.voiceMailMessage.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="message"+s.id,a=new Blob(t,{type:e.type});n=s.msg_id+".wav";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMail.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getVoicemailMessages=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.voiceMail.getMessages(c.query,p).$promise},c.createOrEditVoicemailMessage=function(e,t){s.show({controller:"CreateOrEditMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicemails/edit/messages/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{voicemail:c.voicemail,message:t,messages:c.voicemailMessages.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedVoicemailMessages=function(){var e=angular.copy(c.selectedVoicemailMessages);return c.selectedVoicemailMessages=[],e},c.deleteVoicemailMessage=g,c.deleteSelectedVoicemailMessages=function(e){var t=s.confirm().title("Are you sure want to delete the selected messages?").htmlContent("<b>"+c.selectedVoicemailMessages.length+" selected</b> will be deleted.").ariaLabel("delete messages").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedVoicemailMessages.forEach(function(e){g(e)}),c.selectedVoicemailMessages=[]})};var m=!0,u=1;function p(e){c.voicemailMessages=e||{count:0,rows:[]}}function g(e){l.voiceMailMessage.delete({id:e.id}).$promise.then(function(){_.remove(c.voicemailMessages.rows,{id:e.id}),c.voicemailMessages.count-=1,c.voicemailMessages.rows.length||c.getVoicemailMessages(),r.success({title:"Message deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETvoiceMail"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMail",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getVoicemailMessages())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.voice").controller("VoicemailMessagesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.voicemail=c||e.params.voicemail||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoVoicemails=function(){e.go("app.voice.voicemails")},u.saveVoicemail=function(){r.voiceMail.update({id:u.voicemail.id},u.voicemail).$promise.then(function(){l.success({title:"Voicemail updated!",msg:u.voicemail.name?u.voicemail.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMail",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.voicemail&&(n=_.find(u.contexts,{name:u.voicemail.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","voicemail","userProfileSection"],angular.module("app.voice").controller("VoicemailController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.voicemails=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="voicemails",b.listOrder="",b.listOrderAsc=null,b.selectedVoicemails=[],b.query={fields:"createdAt,updatedAt,id,customer_id,fullname,email,password,mailbox,context,tz,attach,envelope,delete,emailbody,emailsubject,maxsecs,maxmsg",sort:"-updatedAt",limit:10,page:1},b.arrayattach=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayenvelope=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydelete=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.voice.voicemails.edit",{id:e.id,voicemail:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("voicemail")+"?").htmlContent("<b>"+(e.name||"voicemail")+"</b> will be deleted.").ariaLabel("delete voicemail").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getVoicemails=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceMail.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Voicemails",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditVoicemail=function(e,t){i.show({controller:"CreateOrEditVoicemailDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicemails/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{voicemail:t,voicemails:b.voicemails.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteVoicemail=S,b.exportSelectedVoicemails=function(){var e=angular.copy(b.selectedVoicemails);return b.selectedVoicemails=[],e},b.deleteSelectedVoicemails=function(e){var t=i.confirm().title("Are you sure want to delete the selected voicemails?").htmlContent("<b>"+b.selectedVoicemails.length+" selected</b> will be deleted.").ariaLabel("delete Voicemails").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedVoicemails.forEach(function(e){S(e)}),b.selectedVoicemails=[]})},b.deselectVoicemails=function(){b.selectedVoicemails=[]},b.selectAllVoicemails=function(){b.selectedVoicemails=b.voicemails.rows};var A=!0,E=1;function y(e){b.voicemails=e||{count:0,rows:[]}}function S(e){m.voiceMail.delete({id:e.id}).$promise.then(function(){_.remove(b.voicemails.rows,{id:e.id}),b.voicemails.count-=1,b.voicemails.rows.length||b.getVoicemails(),p.success({title:_.startCase("Voicemail")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceMail"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceMail",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getVoicemails())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","voicemails","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoicemailsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_VOICEPREFIX",g.voicePrefix=angular.copy(l),g.voicePrefixes=r,g.newvoicePrefix=!1,g.voicePrefix||(g.voicePrefix={},g.title="VOICE.NEW_VOICEPREFIX",g.newvoicePrefix=!0),g.addNewvoicePrefix=function(){g.errors=[],d.voicePrefix.save(g.voicePrefix).$promise.then(function(e){g.voicePrefixes.unshift(e.toJSON()),o.success({title:"voicePrefix properly created",msg:g.voicePrefix.name?g.voicePrefix.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voicePrefix.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voicePrefix.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.savevoicePrefix=function(){g.errors=[],d.voicePrefix.update({id:g.voicePrefix.id},g.voicePrefix).$promise.then(function(e){var t=_.find(g.voicePrefixes,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"voicePrefix properly saved!",msg:g.voicePrefix.name?g.voicePrefix.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voicePrefix.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voicePrefix.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deletevoicePrefix=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The voicePrefix will be deleted.").ariaLabel("Delete voicePrefix").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voicePrefix.delete({id:g.voicePrefix.id}).$promise.then(function(){_.remove(g.voicePrefixes,{id:g.voicePrefix.id}),o.success({title:"voicePrefix properly deleted!",msg:(g.voicePrefix.name||"voicePrefix")+" has been deleted!"}),v(g.voicePrefix)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voicePrefix.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voicePrefix.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){g.outboundRoutes=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OUTBOUNDROUTES",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){g.outboundRoutes=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:403}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.outboundRoutes,{id:e.resourceId})}),n=null;if(g.voicePrefix&&(n=_.find(g.outboundRoutes,{id:Number(g.voicePrefix.VoiceExtensionId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.outboundRoutes,{id:n.id});a.canSelect=!1,t.push(a)}g.outboundRoutes=t})}else{var n=[],a=null;g.voicePrefix&&(a=_.find(g.outboundRoutes,{id:Number(g.voicePrefix.VoiceExtensionId)}));for(var i=0;i<g.outboundRoutes.length;i++)a&&g.outboundRoutes[i].id===a.id&&(g.outboundRoutes[i].canSelect=!1,n.push(g.outboundRoutes[i]));g.outboundRoutes=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","voicePrefixes","voicePrefix","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditvoicePrefixDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.voicePrefix.getAgents({id:c.voicePrefix.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UservoicePrefix?"penalty "+e.UservoicePrefix.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.voicePrefix=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.voicePrefix.removeAgents({id:c.voicePrefix.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.voicePrefix.addAgents({id:c.voicePrefix.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("VOICE.ALL_AGENTS"),labelSelected:r.instant("VOICE.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","voicePrefix","voicePrefixes","realtime","$translate","Auth","crudPermissions"],angular.module("app.voice").controller("voicePrefixagentaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.voicePrefixes=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="voicePrefixes",b.listOrder="",b.listOrderAsc=null,b.selectedVoicePrefixes=[],b.query={fields:"createdAt,updatedAt,id,name,VoiceExtensionId,callerIdAll,description",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditvoicePrefixDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicePrefixes/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{voicePrefix:e,voicePrefixes:b.voicePrefixes.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"voicePrefixagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicePrefixes/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{voicePrefix:e,voicePrefixes:b.voicePrefixes?b.voicePrefixes.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("voicePrefix")+"?").htmlContent("<b>"+(e.name||"voicePrefix")+"</b> will be deleted.").ariaLabel("delete voicePrefix").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getVoicePrefixes=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voicePrefix.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="VoicePrefixes",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditvoicePrefix=function(e,t){i.show({controller:"CreateOrEditvoicePrefixDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicePrefixes/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{voicePrefix:t,voicePrefixes:b.voicePrefixes.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deletevoicePrefix=S,b.exportSelectedVoicePrefixes=function(){var e=angular.copy(b.selectedVoicePrefixes);return b.selectedVoicePrefixes=[],e},b.deleteSelectedVoicePrefixes=function(e){var t=i.confirm().title("Are you sure want to delete the selected voicePrefixes?").htmlContent("<b>"+b.selectedVoicePrefixes.length+" selected</b> will be deleted.").ariaLabel("delete voicePrefixs").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedVoicePrefixes.forEach(function(e){S(e)}),b.selectedVoicePrefixes=[]})},b.deselectVoicePrefixes=function(){b.selectedVoicePrefixes=[]},b.selectAllVoicePrefixes=function(){b.selectedVoicePrefixes=b.voicePrefixes.rows},g.hasRole("admin")?m.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){b.outboundRoutes=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OUTBOUNDROUTES",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){b.outboundRoutes=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:403}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.outboundRoutes,{id:e.resourceId})}),n=null;if(b.voicePrefix&&(n=_.find(b.outboundRoutes,{id:Number(b.voicePrefix.VoiceExtensionId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.outboundRoutes,{id:n.id});a.canSelect=!1,t.push(a)}b.outboundRoutes=t})}else{var n=[],a=null;b.voicePrefix&&(a=_.find(b.outboundRoutes,{id:Number(b.voicePrefix.VoiceExtensionId)}));for(var i=0;i<b.outboundRoutes.length;i++)a&&b.outboundRoutes[i].id===a.id&&(b.outboundRoutes[i].canSelect=!1,n.push(b.outboundRoutes[i]));b.outboundRoutes=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.voicePrefixes=e||{count:0,rows:[]}}function S(e){m.voicePrefix.delete({id:e.id}).$promise.then(function(){_.remove(b.voicePrefixes.rows,{id:e.id}),b.voicePrefixes.count-=1,b.voicePrefixes.rows.length||b.getVoicePrefixes(),p.success({title:_.startCase("voicePrefix")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoicePrefix"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoicePrefix",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getVoicePrefixes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","voicePrefixes","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoicePrefixesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_VOICEQUEUE",g.voiceQueue=angular.copy(l),g.voiceQueues=r,g.newVoiceQueue=!1,g.voiceQueue||(g.voiceQueue={type:"inbound",strategy:"ringall",timeout:15,retry:2,random_periodic_announce:"no",announce_holdtime:"no",announce_position:"no",reportholdtime:"no",autopause:"no",ringinuse:"no",timeoutrestart:"no",setinterfacevar:"no",setqueuevar:"no",setqueueentryvar:"no"},g.title="VOICE.NEW_VOICEQUEUE",g.newVoiceQueue=!0),g.addNewVoiceQueue=function(){g.errors=[],d.voiceQueue.save(g.voiceQueue).$promise.then(function(e){g.voiceQueues.unshift(e.toJSON()),o.success({title:"VoiceQueue properly created",msg:g.voiceQueue.name?g.voiceQueue.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVoiceQueue=function(){g.errors=[],d.voiceQueue.update({id:g.voiceQueue.id},g.voiceQueue).$promise.then(function(e){var t=_.find(g.voiceQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VoiceQueue properly saved!",msg:g.voiceQueue.name?g.voiceQueue.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVoiceQueue=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The voiceQueue will be deleted.").ariaLabel("Delete VoiceQueue").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceQueue.delete({id:g.voiceQueue.id}).$promise.then(function(){_.remove(g.voiceQueues,{id:g.voiceQueue.id}),o.success({title:"VoiceQueue properly deleted!",msg:(g.voiceQueue.name||"voiceQueue")+" has been deleted!"}),v(g.voiceQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","voiceQueues","voiceQueue","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditVoiceQueueDialogController",e)}(),function(){"use strict";function e(e,l,a,d,t,n,i,s,o,r){var c=this;function m(){return l(function(n,t){return l(function(t,n){return d.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],o.hasRole("admin")?e:c.section?c.section.autoAssociation?e:l(function(t,n){return d.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:o.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),l(function(t,n){return d.voiceQueue.getAgents({id:c.voiceQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=o.getCurrentUser(),c.voiceQueue=t,c.crudPermissions=r,c.penalty=0,c.realtime=i,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return o.hasRole("admin")?m().catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):l(function(n,t){d.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceWith(c.selectedItems,c.startingSelectedItems,function(e,t){return e.id===t.id&&e.penalty===t.penalty});return(n=e,l(function(e,t){_.isEmpty(n)?e():d.voiceQueue.removeAgents({id:c.voiceQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return r=t,l(function(e,t){if(_.isEmpty(r))e();else{for(var n=[],a=_.groupBy(r,"penalty"),i=0;i<Object.keys(a).length;i++){var s=Object.keys(a)[i],o=_.filter(r,["penalty",s]);n.push(d.voiceQueue.addAgents({id:c.voiceQueue.id,ids:_.map(o,"id"),penalty:_.trim(s,"penalty "),realtime:c.realtime||!1}).$promise)}l.all(n).then(function(){e()}).catch(function(e){t(e)})}});var r}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),a.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("VOICE.ALL_AGENTS"),labelSelected:s.instant("VOICE.SELECTED_AGENTS"),transferCallback:function(e,t){t?e.forEach(function(e){e.penalty=void 0}):e.forEach(function(e){e.penalty="penalty "+c.penalty});var n=_.xorWith(c.startingSelectedItems,c.selectedItems,function(e,t){return e.id===t.id&&e.penalty===t.penalty});c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","voiceQueue","voiceQueues","realtime","$translate","Auth","crudPermissions"],angular.module("app.voice").controller("VoiceQueueagentaddController",e)}(),function(){"use strict";function e(e,i,a,s,t,n,o,r){var l=this;function d(){return i(function(n,t){return i(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:i(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),i(function(t,n){return s.voiceQueue.getTeams({id:l.voiceQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.voiceQueue=t,l.crudPermissions=r,l.penalty=0,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("VOICE.ALL_TEAMS"),labelSelected:n.instant("VOICE.SELECTED_TEAMS"),transferCallback:function(e,t){t?e.forEach(function(e){e.penalty=void 0}):e.forEach(function(e){e.penalty="penalty "+l.penalty});var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):i(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,i(function(e,t){_.isEmpty(n)?e():s.voiceQueue.removeTeams({id:l.voiceQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return a=t,i(function(e,t){if(!_.isEmpty(a)){var n=_.map(a,function(e){return{id:e.id,penalty:_.trim(e.penalty,"penalty ")}});return s.voiceQueue.addTeams({id:l.voiceQueue.id,teams:n}).$promise.then(function(){e()}).catch(function(e){t(e)})}e()});var a}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),a.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","voiceQueue","$translate","Auth","crudPermissions"],angular.module("app.voice").controller("VoiceQueueteamaddController",e)}(),function(){"use strict";function e(n,e,a,i,s,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.voiceQueue=c||n.params.voiceQueue||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.teamadddialog=function(e,t){a.show({controller:"VoiceQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/teamadd/teamadd.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{voiceQueue:e,voiceQueues:u.voiceQueues?u.voiceQueues.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){a.show({controller:"VoiceQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{voiceQueue:e,voiceQueues:u.voiceQueues?u.voiceQueues.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.gotogoto=function(e,t){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:411}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.voice.realtime.queues",{}):l.info({title:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.voice.realtime.queues",{})}},u.alert=l.info,u.gotoVoiceQueues=function(){n.go("app.voice.voiceQueues")},u.saveVoiceQueue=function(){r.voiceQueue.update({id:u.voiceQueue.id},u.voiceQueue).$promise.then(function(){l.success({title:"VoiceQueue updated!",msg:u.voiceQueue.name?u.voiceQueue.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceMusicOnHold.get({fields:"id,name",nolimit:"true"}).$promise.then(function(e){u.musiconholds=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MUSICONHOLDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceMusicOnHold.get({fields:"id,name",nolimit:"true"}).$promise.then(function(e){u.musiconholds=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:407}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.musiconholds,{id:e.resourceId})}),n=null;if(u.voiceQueue&&(n=_.find(u.musiconholds,{name:u.voiceQueue.musiconhold})),n&&!_.some(t,["id",n.id])){var a=_.find(u.musiconholds,{id:n.id});a.canSelect=!1,t.push(a)}u.musiconholds=t}):r.voiceMusicOnHold.get({fields:"id,name",nolimit:"true",defaultEntry:1}).$promise.then(function(e){u.musiconholds=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmusiconholds",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.sound.get({fields:"id,name,save_name",sort:"name",nolimit:"true"}).$promise.then(function(e){u.sounds=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.sound.get({fields:"id,name,save_name",sort:"name",nolimit:"true"}).$promise.then(function(e){u.sounds=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.sounds,{id:e.resourceId})});u.sounds.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.sounds=t})}else u.sounds=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","voiceQueue","userProfileSection"],angular.module("app.voice").controller("VoiceQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.voiceQueues=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="voiceQueues",b.listOrder="",b.listOrderAsc=null,b.selectedVoiceQueues=[],b.query={fields:"createdAt,updatedAt,id,name,type,strategy,timeout,maxlen,retry,wrapuptime,weight,joinempty,leavewhenempty,musiconhold,announce,description,periodic_announce,queue_reporthold,queue_youarenext,queue_thereare,queue_callswaiting,queue_holdtime,queue_minutes,queue_minute,queue_seconds,queue_thankyou,announce_frequency,min_announce_frequency,periodic_announce_frequency,random_periodic_announce,announce_holdtime,announce_position,announce_position_limit,reportholdtime,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,mandatoryDisposition,mandatoryDispositionPauseId",type:"inbound",sort:"-updatedAt",channel:"voice",limit:10,page:1},b.arraystrategy=_.keyBy([{option:"Ringall",value:"'ringall'"},{option:"Round Robin Memory",value:"'rrmemory'"},{option:"Least Recent",value:"'leastrecent'"},{option:"Fewest Calls",value:"'fewestcalls'"},{option:"Random",value:"'random'"},{option:"Linear",value:"'linear'"},{option:"Weight Random",value:"'wrandom'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayjoinempty=_.keyBy([{option:"no",value:"'no'"},{option:"yes",value:"'yes'"},{option:"strict",value:"'strict'"},{option:"loose",value:"'loose'"},{option:"paused",value:"'paused'"},{option:"penalty",value:"'penalty'"},{option:"inuse",value:"'inuse'"},{option:"ringing",value:"'ringing'"},{option:"unavailable",value:"'unavailable'"},{option:"invalid",value:"'invalid'"},{option:"unknown",value:"'unknown'"},{option:"wrapup",value:"'wrapup'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayleavewhenempty=_.keyBy([{option:"no",value:"'no'"},{option:"yes",value:"'yes'"},{option:"strict",value:"'strict'"},{option:"loose",value:"'loose'"},{option:"paused",value:"'paused'"},{option:"penalty",value:"'penalty'"},{option:"inuse",value:"'inuse'"},{option:"ringing",value:"'ringing'"},{option:"unavailable",value:"'unavailable'"},{option:"invalid",value:"'invalid'"},{option:"unknown",value:"'unknown'"},{option:"wrapup",value:"'wrapup'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayrandom_periodic_announce=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayannounce_holdtime=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Once",value:"'once'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayannounce_position=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Limit",value:"'limit'"},{option:"More",value:"'more'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayreportholdtime=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayautopause=_.keyBy([{option:"Yes",value:"'all'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayringinuse=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytimeoutrestart=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraymonitor_format=_.keyBy([{option:"Inactive",value:"''"},{option:"wav",value:"'wav'"},{option:"wav49",value:"'wav49'"},{option:"gsm",value:"'gsm'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysetinterfacevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysetqueuevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysetqueueentryvar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.voice.voiceQueues.edit",{id:e.id,voiceQueue:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"VoiceQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{voiceQueue:e,voiceQueues:b.voiceQueues?b.voiceQueues.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"VoiceQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{voiceQueue:e,voiceQueues:b.voiceQueues?b.voiceQueues.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("voiceQueue")+"?").htmlContent("<b>"+(e.name||"voiceQueue")+"</b> will be deleted.").ariaLabel("delete voiceQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:411}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.voice.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.voice.realtime.queues",{})}},b.success=y,b.getVoiceQueues=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="VoiceQueues",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditVoiceQueue=function(e,t){i.show({controller:"CreateOrEditVoiceQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{voiceQueue:t,voiceQueues:b.voiceQueues.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteVoiceQueue=S,b.exportSelectedVoiceQueues=function(){var e=angular.copy(b.selectedVoiceQueues);return b.selectedVoiceQueues=[],e},b.deleteSelectedVoiceQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected voiceQueues?").htmlContent("<b>"+b.selectedVoiceQueues.length+" selected</b> will be deleted.").ariaLabel("delete VoiceQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedVoiceQueues.forEach(function(e){S(e)}),b.selectedVoiceQueues=[]})},b.deselectVoiceQueues=function(){b.selectedVoiceQueues=[]},b.selectAllVoiceQueues=function(){b.selectedVoiceQueues=b.voiceQueues.rows};var A=!0,E=1;function y(e){b.voiceQueues=e||{count:0,rows:[]}}function S(e){m.voiceQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.voiceQueues.rows,{id:e.id}),b.voiceQueues.count-=1,b.voiceQueues.rows.length||b.getVoiceQueues(),p.success({title:_.startCase("VoiceQueue")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getVoiceQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","voiceQueues","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoiceQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_VOICERECORDING",g.voiceRecording=angular.copy(l),g.voiceRecordings=r,g.newVoiceRecording=!1,g.voiceRecording||(g.voiceRecording={},g.title="VOICE.NEW_VOICERECORDING",g.newVoiceRecording=!0),g.addNewVoiceRecording=function(){g.errors=[],d.voiceRecording.save(g.voiceRecording).$promise.then(function(e){g.voiceRecordings.unshift(e.toJSON()),o.success({title:"VoiceRecording properly created",msg:g.voiceRecording.name?g.voiceRecording.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceRecording.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVoiceRecording=function(){g.errors=[],d.voiceRecording.update({id:g.voiceRecording.id},g.voiceRecording).$promise.then(function(e){var t=_.find(g.voiceRecordings,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VoiceRecording properly saved!",msg:g.voiceRecording.name?g.voiceRecording.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceRecording.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceRecording.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVoiceRecording=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The voiceRecording will be deleted.").ariaLabel("Delete VoiceRecording").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceRecording.delete({id:g.voiceRecording.id}).$promise.then(function(){_.remove(g.voiceRecordings,{id:g.voiceRecording.id}),o.success({title:"VoiceRecording properly deleted!",msg:(g.voiceRecording.name||"voiceRecording")+" has been deleted!"}),v(g.voiceRecording)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceRecording.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceRecording.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","voiceRecordings","voiceRecording","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditVoiceRecordingDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,l,r,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.voiceRecordings=r||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="voiceRecordings",b.listOrder="",b.listOrderAsc=null,b.selectedVoiceRecordings=[],b.query={fields:"createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,membername,rating,audio,userDisposition",sort:"-updatedAt",limit:10,page:1},b.localizationMap=f,b.pickerModel={dateStart:null},b.downloadfile2=function(r,e){var n=!1,t=_.isNil(r.format)?r.value.substring(r.value.lastIndexOf(".")):r.format;n=".mp4"===t;-1<r.value.lastIndexOf("/")?r.value.substring(r.value.lastIndexOf("/")+1):-1<r.value.lastIndexOf("\\")?r.value.substring(r.value.lastIndexOf("\\")+1):r.value;return m.voiceRecording.download({id:r.id}).$promise.then(function(e){var t,n,a=[e.buffer],i="download",s=new Blob(a,{type:e.type});t=r.value,n=-1<t.lastIndexOf("/")?t.substring(t.lastIndexOf("/")+1):-1<t.lastIndexOf("\\")?t.substring(t.lastIndexOf("\\")+1):t,i=(n=n.substring(0,n.lastIndexOf(".")))+r.format;var o=window.document.createElement("a");o.setAttribute("href",URL.createObjectURL(s)),o.setAttribute("download",i),document.body.appendChild(o),o.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else"404"===String(e.status)&&!1===n?p.info({title:l.instant("VOICE.CANT_DOWNLOAD_THIS_FILE"),msg:l.instant("VOICE.WRONG_EXTENSION")}):"404"===String(e.status)?p.info({title:l.instant("VOICE.CANT_DOWNLOAD_THIS_FILE"),msg:l.instant("VOICE.FILE_NOT_FOUND")}):p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("voiceRecording")+"?").htmlContent("<b>"+(e.name||"voiceRecording")+"</b> will be deleted.").ariaLabel("delete voiceRecording").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getVoiceRecordings=function(){b.pickerModel.dateStart?b.query.createdAt={$gte:moment(b.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(b.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:b.query.createdAt=void 0;b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceRecording.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="VoiceRecordings",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditVoiceRecording=function(e,t){i.show({controller:"CreateOrEditVoiceRecordingDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceRecordings/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{voiceRecording:t,voiceRecordings:b.voiceRecordings.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteVoiceRecording=S,b.exportSelectedVoiceRecordings=function(){var e=angular.copy(b.selectedVoiceRecordings);return b.selectedVoiceRecordings=[],e},b.deleteSelectedVoiceRecordings=function(e){var t=i.confirm().title("Are you sure want to delete the selected voiceRecordings?").htmlContent("<b>"+b.selectedVoiceRecordings.length+" selected</b> will be deleted.").ariaLabel("delete VoiceRecordings").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedVoiceRecordings.forEach(function(e){S(e)}),b.selectedVoiceRecordings=[]})},b.deselectVoiceRecordings=function(){b.selectedVoiceRecordings=[]},b.selectAllVoiceRecordings=function(){b.selectedVoiceRecordings=b.voiceRecordings.rows},b.clearDateFilter=function(){b.pickerModel={dateStart:null},b.getVoiceRecordings()};var A=!0,E=1;function y(e){b.voiceRecordings=e||{count:0,rows:[]}}function S(e){m.voiceRecording.delete({id:e.id}).$promise.then(function(){_.remove(b.voiceRecordings.rows,{id:e.id}),b.voiceRecordings.count-=1,b.voiceRecordings.rows.length||b.getVoiceRecordings(),p.success({title:_.startCase("VoiceRecording")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceRecording"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceRecording",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getVoiceRecordings())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","voiceRecordings","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoiceRecordingsController",e)}(),function(){"use strict";function e(t,n,s,a,o,e,i,r){var l=this;function d(e,t){return{id:e,title:t.name||"NONAME",state:"app.dashboards.custom",stateParams:t,weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(e)&&!o.hasRole("admin")}}}function c(e,t){return{id:e,title:t.name||"NONAME",state:"app.plugins.plugin",stateParams:t,weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(e)&&!o.hasRole("admin")}}}function m(e,t){a.saveItem("apps.home.plugin_"+e,{id:e,title:t.name,translate:t.name,state:"plugin_"+t.id,stateParams:t,view:"plugin",icon:t.icon,weight:12,hidden:function(){return!o.hasPermission(e)}})}function u(e){return _.map(e.children,function(e){return e.id})}l.isAgent=function(){return o.getCurrentUser()&&o.hasRole("agent")},s.saveItem("apps",{title:"APPS",group:!0,weight:1,hidden:function(){return o.hasRole("agent")}}),i.version.get().$promise.then(function(e){l.version=e&&e.current?e.current:"UNKNOWN"}).catch(function(e){l.version="UNKNOWN"}).finally(function(){s.saveItem("version",{title:"VERSION "+l.version,group:!0,weight:2,hidden:function(){return o.hasRole("agent")}})}),o.isLoggedIn()&&(i.dashboard.get().$promise.then(function(e){for(var t=0,n=0;n<e.rows.length;n+=1)t=99999+e.rows[n].id,s.saveItem("apps.dashboards.custom_"+t,d(t,e.rows[n]))}),i.plugin.get({active:!0}).$promise.then(function(e){var t=0;if(e.count){var n=_.filter(e.rows,function(e){return"never"!=e.sidebar&&"agentOnly"!=e.sidebar});if(0<n.length){s.saveItem("apps.plugins",{id:1900,title:"Plugins",translate:"PLUGINS.PLUGINS",icon:"icon-apps",permissions:{hidden:!0},weight:17,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}});for(var a=0;a<n.length;a+=1)t=88888+n[a].id,s.saveItem("apps.plugins.plugin_"+t,c(t,n[a]));s.sort()}var i=_.filter(e.rows,function(e){return"never"!=e.sidebar&&"adminOnly"!=e.sidebar});if(0<i.length)for(a=0;a<i.length;a+=1)m(t=88888+i[a].id,i[a])}})),e.custom&&!r.defaultPageTitle&&r.pageTitle&&angular.element("#pageTitle").html(r.pageTitle),s.saveItem("apps.dashboards",{id:100,title:"Dashboards",translate:"DASHBOARDS.DASHBOARDS",icon:"icon-tile-four",weight:2,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.dashboards.general",{id:101,title:"General",route:"",translate:"DASHBOARDS.GENERAL",state:"app.dashboards.general",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(101)&&!o.hasRole("admin")}}),s.saveItem("apps.staff",{id:200,title:"Staff",translate:"STAFF.STAFF",icon:"icon-account-multiple",weight:3,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.staff.users",{id:201,title:"Users",route:"user",translate:"STAFF.USERS",state:"app.staff.users",permissions:{hidden:!0},weight:1,hidden:function(){return o.hasRole("agent")||o.hasRole("user")||!o.hasPermission(201)&&!o.hasRole("admin")}}),s.saveItem("apps.staff.agents",{id:202,title:"Agents",route:"user",translate:"STAFF.AGENTS",state:"app.staff.agents",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(202)&&!o.hasRole("admin")}}),s.saveItem("apps.staff.telephones",{id:203,title:"Telephones",route:"user",translate:"STAFF.TELEPHONES",state:"app.staff.telephones",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(203)&&!o.hasRole("admin")}}),s.saveItem("apps.staff.teams",{id:204,title:"Teams",route:"team",translate:"STAFF.TEAMS",state:"app.staff.teams",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(204)&&!o.hasRole("admin")}}),s.saveItem("apps.staff.userProfiles",{id:205,title:"UserProfiles",route:"userProfile",translate:"STAFF.USERPROFILES",state:"app.staff.userProfiles",permissions:{hidden:!0},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(205)&&!o.hasRole("admin")}}),s.saveItem("apps.contactmanager",{id:300,title:"ContactManager",translate:"CONTACTMANAGER.CONTACTMANAGER",icon:"icon-account-circle",license:"cm",weight:4,hidden:function(){return!e.cm||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.contactmanager.lists",{id:301,title:"Lists",route:"cmList",translate:"CONTACTMANAGER.LISTS",state:"app.contactmanager.lists",weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(301)&&!o.hasRole("admin")}}),s.saveItem("apps.contactmanager.companies",{id:302,title:"Companies",route:"cmCompany",translate:"CONTACTMANAGER.COMPANIES",state:"app.contactmanager.companies",weight:3,hidden:function(){return o.hasRole("agent")||!o.hasPermission(302)&&!o.hasRole("admin")}}),s.saveItem("apps.contactmanager.globalCustomFields",{id:304,title:"GlobalCustomFields",route:"cmCustomField",translate:"CONTACTMANAGER.GLOBALCUSTOMFIELDS",state:"app.contactmanager.globalCustomFields",permissions:{association:!1},weight:4,hidden:function(){return o.hasRole("agent")||!o.hasPermission(304)&&!o.hasRole("admin")}}),s.saveItem("apps.contactmanager.contacts",{id:303,title:"Contacts",route:"",translate:"CONTACTMANAGER.CONTACTS",state:"app.contactmanager.contacts",permissions:{association:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(303)&&!o.hasRole("admin")}}),s.saveItem("apps.voice",{id:400,title:"Voice",translate:"VOICE.VOICE",icon:"icon-phone",license:"voice",weight:5,hidden:function(){return!e.voice||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.voice.voiceQueues",{id:401,title:"VoiceQueues",route:"voiceQueue",channel:"voice",translate:"VOICE.VOICEQUEUES",state:"app.voice.voiceQueues",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(401)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.inboundroutes",{id:402,title:"InboundRoutes",route:"voiceExtension",translate:"VOICE.INBOUNDROUTES",state:"app.voice.inboundroutes",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(402)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.outboundroutes",{id:403,title:"OutboundRoutes",route:"voiceExtension",translate:"VOICE.OUTBOUNDROUTES",state:"app.voice.outboundroutes",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(403)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.internalroutes",{id:404,title:"InternalRoutes",route:"voiceExtension",translate:"VOICE.INTERNALROUTES",state:"app.voice.internalroutes",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(404)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.contexts",{id:405,title:"Contexts",route:"voiceContext",translate:"VOICE.CONTEXTS",state:"app.voice.contexts",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(405)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.voicemails",{id:406,title:"Voicemails",route:"voiceMail",translate:"VOICE.VOICEMAILS",state:"app.voice.voicemails",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(406)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.musiconholds",{id:407,title:"MusicOnHolds",route:"voiceMusicOnHold",translate:"VOICE.MUSICONHOLDS",state:"app.voice.musiconholds",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(407)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.voiceRecordings",{id:408,title:"VoiceRecordings",route:"voiceRecording",translate:"VOICE.VOICERECORDINGS",state:"app.voice.voiceRecordings",permissions:{association:!1,loading:!0},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(408)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.chanSpies",{id:409,title:"ChanSpies",route:"voiceChanSpy",translate:"VOICE.CHANSPIES",state:"app.voice.chanSpies",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(409)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.voicePrefixes",{id:410,title:"VoicePrefixes",route:"voicePrefix",translate:"VOICE.VOICEPREFIXES",state:"app.voice.voicePrefixes",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(410)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.realtime",{id:411,title:"Realtime",route:"",translate:"VOICE.REALTIME",state:"app.voice.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(411)&&!o.hasRole("admin")}}),s.saveItem("apps.chat",{id:500,title:"Chat",translate:"CHAT.CHAT",icon:"icon-hangouts",license:"chat",weight:6,hidden:function(){return!e.chat||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.chat.chatQueues",{id:501,title:"ChatQueues",route:"chatQueue",channel:"chat",translate:"CHAT.CHATQUEUES",state:"app.chat.chatQueues",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(501)&&!o.hasRole("admin")}}),s.saveItem("apps.chat.chatWebsites",{id:502,title:"ChatWebsites",route:"chatWebsite",channel:"chat",translate:"CHAT.CHATWEBSITES",state:"app.chat.chatWebsites",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(502)&&!o.hasRole("admin")}}),s.saveItem("apps.chat.realtime",{id:510,title:"Realtime",route:"",translate:"CHAT.REALTIME",state:"app.chat.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(510)&&!o.hasRole("admin")}}),s.saveItem("apps.mail",{id:600,title:"Mail",translate:"MAIL.MAIL",icon:"icon-email",license:"mail",weight:7,hidden:function(){return!e.mail||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.mail.mailQueues",{id:601,title:"MailQueues",route:"mailQueue",channel:"mail",translate:"MAIL.MAILQUEUES",state:"app.mail.mailQueues",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(601)&&!o.hasRole("admin")}}),s.saveItem("apps.mail.mailAccounts",{id:602,title:"MailAccounts",route:"mailAccount",channel:"mail",translate:"MAIL.MAILACCOUNTS",state:"app.mail.mailAccounts",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(602)&&!o.hasRole("admin")}}),s.saveItem("apps.mail.mailSubtatuses",{id:603,title:"MailSubstatuses",route:"mailSubstatus",channel:"mail",translate:"MAIL.MAILSUBSTATUSES",state:"app.mail.mailSubtatuses",permissions:{association:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(603)&&!o.hasRole("admin")}}),s.saveItem("apps.mail.realtime",{id:610,title:"Realtime",route:"",translate:"MAIL.REALTIME",state:"app.mail.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(610)&&!o.hasRole("admin")}}),s.saveItem("apps.sms",{id:700,title:"Sms",translate:"SMS.SMS",icon:"icon-message-text",license:"messaging",weight:8,hidden:function(){return!e.messaging||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.sms.smsQueues",{id:701,title:"SmsQueues",route:"smsQueue",channel:"sms",translate:"SMS.SMSQUEUES",state:"app.sms.smsQueues",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(701)&&!o.hasRole("admin")}}),s.saveItem("apps.sms.smsAccounts",{id:702,title:"SmsAccounts",route:"smsAccount",channel:"sms",translate:"SMS.SMSACCOUNTS",state:"app.sms.smsAccounts",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(702)&&!o.hasRole("admin")}}),s.saveItem("apps.sms.realtime",{id:710,title:"Realtime",route:"",translate:"SMS.REALTIME",state:"app.sms.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(710)&&!o.hasRole("admin")}}),s.saveItem("apps.openchannel",{id:800,title:"Openchannel",translate:"OPENCHANNEL.OPENCHANNEL",icon:"icon-google-earth",license:"openchannel",weight:9,hidden:function(){return!e.openchannel||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.openchannel.openchannelQueues",{id:801,title:"OpenchannelQueues",route:"openchannelQueue",channel:"openChannel",translate:"OPENCHANNEL.OPENCHANNELQUEUES",state:"app.openchannel.openchannelQueues",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(801)&&!o.hasRole("admin")}}),s.saveItem("apps.openchannel.openchannelAccounts",{id:802,title:"OpenchannelAccounts",route:"openchannelAccount",channel:"openChannel",translate:"OPENCHANNEL.OPENCHANNELACCOUNTS",state:"app.openchannel.openchannelAccounts",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(802)&&!o.hasRole("admin")}}),s.saveItem("apps.openchannel.realtime",{id:810,title:"Realtime",route:"",translate:"OPENCHANNEL.REALTIME",state:"app.openchannel.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(810)&&!o.hasRole("admin")}}),s.saveItem("apps.fax",{id:900,title:"Fax",translate:"FAX.FAX",icon:"icon-deskphone",license:"fax",weight:10,hidden:function(){return!e.fax||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.fax.faxQueues",{id:901,title:"FaxQueues",route:"faxQueue",channel:"fax",translate:"FAX.FAXQUEUES",state:"app.fax.faxQueues",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(901)&&!o.hasRole("admin")}}),s.saveItem("apps.fax.faxAccounts",{id:902,title:"FaxAccounts",route:"faxAccount",channel:"fax",translate:"FAX.FAXACCOUNTS",state:"app.fax.faxAccounts",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(902)&&!o.hasRole("admin")}}),s.saveItem("apps.fax.realtime",{id:910,title:"Realtime",route:"",translate:"FAX.REALTIME",state:"app.fax.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(910)&&!o.hasRole("admin")}}),s.saveItem("apps.tools",{id:1e3,title:"Tools",translate:"TOOLS.TOOLS",icon:"icon-auto-fix",weight:13,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.tools.cannedAnswers",{id:1001,title:"CannedAnswers",route:"cannedAnswer",translate:"TOOLS.CANNEDANSWERS",state:"app.tools.cannedAnswers",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1001)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.dispositions",{id:1002,title:"Dispositions",route:"disposition",translate:"TOOLS.DISPOSITIONS",state:"app.tools.dispositions",weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1002)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.customDashboards",{id:1003,title:"CustomDashboards",route:"dashboard",translate:"TOOLS.CUSTOMDASHBOARDS",state:"app.tools.customDashboards",weight:3,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1003)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.intervals",{id:1004,title:"Intervals",route:"interval",translate:"TOOLS.INTERVALS",state:"app.tools.intervals",weight:4,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1004)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.pauses",{id:1005,title:"Pauses",route:"pause",translate:"TOOLS.PAUSES",state:"app.tools.pauses",weight:5,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1005)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.schedules",{id:1006,title:"Scheduler",route:"schedule",translate:"TOOLS.SCHEDULER",state:"app.tools.schedules",weight:6,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1006)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.sounds",{id:1007,title:"Sounds",route:"sound",translate:"TOOLS.SOUNDS",state:"app.tools.sounds",weight:7,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1007)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.tags",{id:1008,title:"Tags",route:"tag",translate:"TOOLS.TAGS",state:"app.tools.tags",weight:8,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1008)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.templates",{id:1009,title:"Templates",route:"template",translate:"TOOLS.TEMPLATES",state:"app.tools.templates",weight:9,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1009)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.triggers",{id:1010,title:"Triggers",route:"trigger",translate:"TOOLS.TRIGGERS",state:"app.tools.triggers",weight:10,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1010)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.trunks",{id:1011,title:"Trunks",route:"trunk",translate:"TOOLS.TRUNKS",state:"app.tools.trunks",weight:11,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1011)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.variables",{id:1012,title:"Variables",route:"variable",translate:"TOOLS.VARIABLES",state:"app.tools.variables",weight:12,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1012)&&!o.hasRole("admin")}}),s.saveItem("apps.callysquare",{id:1100,title:"CallySquare",translate:"CALLYSQUARE.CALLYSQUARE",icon:"icon-sitemap",license:"voice",weight:12,hidden:function(){return!e.voice||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.callysquare.odbcs",{id:1101,title:"ODBC",route:"squareOdbc",translate:"CALLYSQUARE.ODBC",state:"app.callysquare.odbcs",weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1101)&&!o.hasRole("admin")}}),s.saveItem("apps.callysquare.squareRecordings",{id:1102,title:"SquareRecordings",route:"squareRecording",translate:"CALLYSQUARE.SQUARERECORDINGS",state:"app.callysquare.squareRecordings",permissions:{association:!1,loading:!0},weight:3,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1102)&&!o.hasRole("admin")}}),s.saveItem("apps.callysquare.projects",{id:1103,title:"Projects",route:"squareProject",translate:"CALLYSQUARE.PROJECTS",state:"app.callysquare.projects",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1103)&&!o.hasRole("admin")}}),s.saveItem("apps.analytics",{id:1200,title:"Analytics",translate:"ANALYTICS.ANALYTICS",icon:"icon-chart-line",weight:14,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.analytics.metrics",{id:1201,title:"Metrics",route:"analyticMetric",translate:"ANALYTICS.METRICS",state:"app.analytics.metrics",weight:3,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1201)&&!o.hasRole("admin")}}),s.saveItem("apps.analytics.extractedReports",{id:1202,title:"ExtractedReports",route:"analyticExtractedReport",translate:"ANALYTICS.EXTRACTEDREPORTS",state:"app.analytics.extractedReports",permissions:{association:!1,loading:!0},weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1202)&&!o.hasRole("admin")}}),s.saveItem("apps.analytics.reports",{id:1203,title:"Reports",route:"",translate:"ANALYTICS.REPORTS",state:"app.analytics.reports",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1203)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations",{id:1300,title:"Integrations",translate:"INTEGRATIONS.INTEGRATIONS",icon:"icon-heart",weight:15,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.zendeskAccounts",{id:1301,title:"ZendeskAccounts",route:"intZendeskAccount",translate:"INTEGRATIONS.ZENDESKACCOUNTS",state:"app.integrations.zendeskAccounts",permissions:{association:!1,loading:!0},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1301)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.salesforceAccounts",{id:1302,title:"SalesforceAccounts",route:"intSalesforceAccount",translate:"INTEGRATIONS.SALESFORCEACCOUNTS",state:"app.integrations.salesforceAccounts",permissions:{association:!1,loading:!0},weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1302)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.freshdeskAccounts",{id:1303,title:"FreshdeskAccounts",route:"intFreshdeskAccount",translate:"INTEGRATIONS.FRESHDESKACCOUNTS",state:"app.integrations.freshdeskAccounts",permissions:{association:!1,loading:!0},weight:3,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1303)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.sugarcrmAccounts",{id:1305,title:"SugarcrmAccounts",route:"intSugarcrmAccount",translate:"INTEGRATIONS.SUGARCRMACCOUNTS",state:"app.integrations.sugarcrmAccounts",permissions:{association:!1,loading:!0},weight:4,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1305)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.deskAccounts",{id:1306,title:"DeskAccounts",route:"intDeskAccount",translate:"INTEGRATIONS.DESKACCOUNTS",state:"app.integrations.deskAccounts",permissions:{association:!1,loading:!0},weight:5,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1306)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.zohoAccounts",{id:1307,title:"ZohoAccounts",route:"intZohoAccount",translate:"INTEGRATIONS.ZOHOACCOUNTS",state:"app.integrations.zohoAccounts",permissions:{association:!1,loading:!0},weight:6,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1307)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.vtigerAccounts",{id:1308,title:"VtigerAccounts",route:"intVtigerAccount",translate:"INTEGRATIONS.VTIGERACCOUNTS",state:"app.integrations.vtigerAccounts",permissions:{association:!1,loading:!0},weight:7,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1308)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.dynamics365Accounts",{id:1309,title:"Dynamics365Accounts",route:"intDynamics365Account",translate:"INTEGRATIONS.DYNAMICS365ACCOUNTS",state:"app.integrations.dynamics365Accounts",permissions:{association:!1,loading:!0},weight:8,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1309)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.servicenowAccounts",{id:1310,title:"ServicenowAccounts",route:"intServicenowAccount",translate:"INTEGRATIONS.SERVICENOWACCOUNTS",state:"app.integrations.servicenowAccounts",permissions:{association:!1,loading:!0},weight:9,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1310)&&!o.hasRole("admin")}}),s.saveItem("apps.settings",{id:1400,title:"Settings",translate:"SETTINGS.SETTINGS",icon:"icon-cog",permissions:{hidden:!0},weight:18,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.generals",{id:1401,title:"General",route:"setting",translate:"SETTINGS.GENERAL",state:"app.settings.generals",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.smtps",{id:1402,title:"Smtp",route:"mailAccount",translate:"SETTINGS.SMTP",state:"app.settings.smtps",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.networks",{id:1403,title:"Networks",route:"network",translate:"SETTINGS.NETWORKS",state:"app.settings.networks",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.customizations",{id:1407,title:"Customizations",route:"setting",translate:"SETTINGS.CUSTOMIZATIONS",state:"app.settings.customizations",weight:1,hidden:function(){return!e.custom||o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.updates",{id:1404,title:"Updates",route:"",translate:"SETTINGS.UPDATES",state:"app.settings.updates",weight:1,hidden:function(){return!e.update||o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.license",{id:1405,title:"License",route:"",translate:"SETTINGS.LICENSE",state:"app.settings.license",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.system",{id:1406,title:"System",route:"",translate:"SETTINGS.SYSTEM",state:"app.settings.system",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.motiondialer",{id:1500,title:"MotionDialer",translate:"MOTIONDIALER.MOTIONDIALER",icon:"icon-fire",license:"dialer",weight:5,hidden:function(){return!e.dialer||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.motiondialer.queueCampaigns",{id:1501,title:"QueueCampaigns",route:"voiceQueue",channel:"bull",translate:"MOTIONDIALER.QUEUECAMPAIGNS",state:"app.motiondialer.queueCampaigns",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1501)&&!o.hasRole("admin")}}),s.saveItem("apps.motiondialer.ivrCampaigns",{id:1502,title:"IvrCampaigns",route:"campaign",translate:"MOTIONDIALER.IVRCAMPAIGNS",state:"app.motiondialer.ivrCampaigns",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1502)&&!o.hasRole("admin")}}),s.saveItem("apps.motiondialer.realtime",{id:1510,title:"Realtime",route:"",translate:"MOTIONDIALER.REALTIME",state:"app.motiondialer.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1510)&&!o.hasRole("admin")}}),s.saveItem("apps.help",{id:1600,title:"Help",translate:"HELP.HELP",icon:"icon-help",permissions:{association:!1},weight:19,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1600)&&!o.hasRole("admin")}}),s.saveItem("apps.help.about",{id:1601,title:"About",route:"",translate:"HELP.ABOUT",state:"app.help.about",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1600)&&!o.hasRole("admin")}}),s.saveItem("apps.jscripty",{id:1700,title:"jscripty",translate:"JSCRIPTY.JSCRIPTY",icon:"icon-script",license:"jscripty",weight:12,hidden:function(){return!e.jscripty||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.jscripty.projects",{id:1701,title:"Projects",route:"jscriptyProject",translate:"JSCRIPTY.PROJECTS",state:"app.jscripty.projects",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1701)&&!o.hasRole("admin")}}),s.saveItem("apps.marketplace",{id:1800,title:"Marketplace",translate:"MARKETPLACE.MARKETPLACE",icon:"icon-cart",weight:16,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.marketplace.plugins",{id:1801,title:"Plugins",route:"plugin",translate:"MARKETPLACE.PLUGINS",state:"app.marketplace.plugins",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1801)&&!o.hasRole("admin")}}),s.saveItem("apps.video",{id:2e3,title:"Video",translate:"VIDEO.VIDEO",icon:"icon-video",license:"screenrecording",weight:11,hidden:function(){return!e.screenrecording||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.video.screenRecordings",{id:2001,title:"ScreenRecordings",route:"screenRecording",translate:"VIDEO.SCREENRECORDINGS",state:"app.video.screenRecordings",permissions:{association:!1,loading:!0},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(2001)&&!o.hasRole("admin")}}),s.sort(),a.saveItem("apps",{title:"APPS",group:!0,weight:1}),a.saveItem("apps.home",{id:100,title:"Home",translate:"DASHBOARDS.HOME",icon:"icon-home",weight:1}),a.saveItem("apps.home.dashboard",{id:101,title:"Dashboard",translate:"DASHBOARDS.DASHBOARD",state:"dashboard",view:"dashboard",icon:"icon-tile-four",iconClass:"cyan-500-fg",weight:1,hidden:function(){return!o.hasPermission(101)}}),a.saveItem("apps.home.contacts",{id:102,title:"Contacts",translate:"DASHBOARDS.CONTACTS",state:"contacts",view:"contacts",icon:"icon-account-circle",iconClass:"red-fg",weight:2,hidden:function(){return!e.cm||!o.hasPermission(102)}}),a.saveItem("apps.home.mycontacts",{id:103,title:"Contacts",translate:"DASHBOARDS.MYCONTACTS",state:"mycontacts",view:"mycontacts",icon:"icon-account-multiple",iconClass:"red-fg",weight:3,hidden:function(){return!e.cm||!o.hasPermission(103)}}),a.saveItem("apps.home.scheduled",{id:113,title:"Scheduled Calls",translate:"DASHBOARDS.SCHEDULED_CALLS",state:"scheduled",view:"scheduled",icon:"icon-calendar-clock",iconClass:"blue-grey-fg",weight:3,hidden:function(){return!e.dialer||!o.hasPermission(113)}}),a.saveItem("apps.home.voice",{id:110,title:"Voice",translate:"DASHBOARDS.VOICE",state:"voice",view:"voice",icon:"icon-phone",iconClass:"blue-A700-fg",weight:4,hidden:function(){return!e.voice||!o.hasPermission(110)}}),a.saveItem("apps.home.abandoned",{id:111,title:"Abandoned",translate:"DASHBOARDS.ABANDONED",state:"abandoned",view:"abandoned",icon:"icon-phone-missed",iconClass:"blue-fg",weight:5,hidden:function(){return!e.voice||!o.hasPermission(111)}}),a.saveItem("apps.home.recordings",{id:104,title:"Recordings",translate:"DASHBOARDS.RECORDINGS",state:"recordings",view:"recordings",icon:"icon-audiobook",iconClass:"indigo-A100-fg",weight:6,hidden:function(){return!e.voice||!o.hasPermission(104)}}),a.saveItem("apps.home.chat",{id:105,title:"Chat",translate:"DASHBOARDS.CHAT",state:"chat",view:"chat",icon:"icon-hangouts",iconClass:"green-A700-fg",weight:7,hidden:function(){return!e.chat||!o.hasPermission(105)}}),a.saveItem("apps.home.mail",{id:106,title:"Mail",translate:"DASHBOARDS.MAIL",state:"mail",view:"mail",icon:"icon-email",iconClass:"teal-fg",weight:8,hidden:function(){return!e.mail||!o.hasPermission(106)}}),a.saveItem("apps.home.sms",{id:107,title:"Sms",translate:"DASHBOARDS.SMS",state:"sms",view:"sms",icon:"icon-message-text",iconClass:"orange-fg",weight:9,hidden:function(){return!e.messaging||!o.hasPermission(107)}}),a.saveItem("apps.home.openchannel",{id:108,title:"Openchannel",translate:"DASHBOARDS.OPENCHANNEL",state:"openchannel",view:"openchannel",icon:"icon-google-earth",iconClass:"amber-A200-fg",weight:10,hidden:function(){return!e.openchannel||!o.hasPermission(108)}}),a.saveItem("apps.home.fax",{id:109,title:"Fax",translate:"DASHBOARDS.FAX",state:"fax",view:"fax",icon:"icon-deskphone",iconClass:"blue-grey-A200-fg",weight:11,hidden:function(){return!e.fax||!o.hasPermission(109)}}),t.$on("$viewContentAnimationEnded",function(e){e.targetScope.$id===t.$id&&n.$broadcast("msSplashScreen::remove")})}e.$inject=["$scope","$rootScope","msNavigationService","msNavigationAgentService","Auth","license","api","setting"],angular.module("motion").controller("MainController",e)}(),function(){"use strict";function e(e,t,n,a,o,r){var i=this;function s(e){if(e&&e.id){var t=99999+e.id;o.saveItem("apps.dashboards.custom_"+t,{id:t,title:e.name||"NONAME",state:"app.dashboards.custom",stateParams:e,weight:2,hidden:function(){return r.hasRole("agent")||!r.hasPermission(t)&&!r.hasRole("admin")}})}}function l(e){if(e&&e.id&&"never"!=e.sidebar)if(e.active){if("always"==e.sidebar||"adminOnly"==e.sidebar){o.saveItem("apps.plugins",{id:1900,title:"Plugins",translate:"PLUGINS.PLUGINS",icon:"icon-apps",weight:17,hidden:function(){return r.hasRole("agent")||!r.hasPermission(1900)&&!r.hasRole("admin")}});var t=88888+e.id;o.saveItem("apps.plugins.plugin_"+t,{id:t,title:e.name||"NONAME",state:"app.plugins.plugin",stateParams:e,weight:2,hidden:function(){return r.hasRole("agent")||!r.hasPermission(t)&&!r.hasRole("admin")}}),o.sort()}}else{t=88888+e.id;n=1900,a=t,i=o.getNavigation(),(s=_.find(i[0].children,{id:n}))&&_.some(s.children,{id:a})&&("always"==e.sidebar||"adminOnly"==e.sidebar)&&(o.deleteItem("apps.plugins.plugin_"+t),d(1900)||o.saveItem("apps.plugins",{id:1900,title:"Plugins",translate:"PLUGINS.PLUGINS",icon:"icon-apps",weight:17,hidden:function(){return!0}}))}var n,a,i,s}function d(e){var t=o.getNavigation(),n=_.find(t[0].children,{id:e});return!!(n&&0<n.children.length)}i.bodyEl=angular.element("body"),i.msScrollOptions={suppressScrollX:!0},i.setting=n,i.$onInit=function(){i.folded="true"===t.get("motion.folded")||!1},i.toggleMsNavigationFolded=function(){i.folded=!i.folded,t.put("motion.folded",i.folded)},i.getLogo=function(){return i.setting.defaultHeaderWhiteLabel?"xCALLY Motion":i.setting.headerWhiteLabel},a.on("dashboard:save",s),a.on("dashboard:update",s),a.on("dashboard:remove",function(e){if(e&&e.id){var t=99999+e.id;o.deleteItem("apps.dashboards.custom_"+t)}}),a.on("plugin:save",l),a.on("plugin:update",l),a.on("plugin:remove",function(e){if(e&&e.id&&"never"!=e.sidebar){var t=88888+e.id;"always"!=e.sidebar&&"adminOnly"!=e.sidebar||(o.deleteItem("apps.plugins.plugin_"+t),d(1900)||o.saveItem("apps.plugins",{id:1900,title:"Plugins",translate:"PLUGINS.PLUGINS",icon:"icon-apps",weight:17,hidden:function(){return!0}}))}}),e.$on("$stateChangeSuccess",function(){i.bodyEl.removeClass("ms-navigation-horizontal-mobile-menu-active")})}e.$inject=["$scope","$cookies","setting","socket","msNavigationService","Auth"],angular.module("app.navigation").controller("NavigationController",e)}(),function(){"use strict";function e(e,a,i,t,n,s,o,r){var l=this;function d(n){o.isSupported()?o.requestPermission().then(function(){var e,t;t={autoClose:!0,duration:10,showOnPageHidden:!0,icon:"api/users/"+(e=n).FromId+"/avatar",body:e.body||"",focusOnclick:!0,closeOnClick:!0},o.show(a.instant("QUICKPANEL.NEW_INTERNAL_MESSAGE"),t)},function(e){console.error("Please enable browser notifications!",e)}):console.error("Browser notifications are not supported by the browser. Normal notifications will be used.")}l.date=moment().format(),l.currentUser=t.getCurrentUser(),l.license=r,l.unreadTotalMessages=0,l.unreadTotalGroupMessages=0,l.userIsNotPhonebar=function(){return"admin"===l.currentUser.role||"user"===l.currentUser.role||"agent"===l.currentUser.role&&0!==l.currentUser.showWebBar},l.onMessageSave=function(e){e.ToId===l.currentUser.id&&e.FromId!==l.currentUser.id&&!e.read&&e.ChatGroupId&&(l.unreadTotalGroupMessages++,d(e));e.ToId!==l.currentUser.id||e.ChatGroupId||(l.unreadTotalMessages+=1,d(e))},l.onMessageUpdate=function(e){e.ToId===l.currentUser.id&&e.read&&0<l.unreadTotalMessages&&!e.ChatGroupId&&(l.unreadTotalMessages-=1);e.ToId==l.currentUser.id&&e.FromId!==l.currentUser.id&&e.ChatGroupId&&e.read&&0<l.unreadTotalGroupMessages&&l.unreadTotalGroupMessages--},n.on("chatInternalMessage:save",l.onMessageSave),n.on("chatInternalMessage:update",l.onMessageUpdate),s.chatInternalMessage.get({fields:"FromId",ToId:l.currentUser.id,read:!1,nolimit:!0,ChatGroupId:"null"}).$promise.then(function(e){return e&&e.count&&(l.unreadTotalMessages=e.count),s.user.getGroups({id:l.currentUser.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(s.chatGroup.getUnread({id:n[a].id}).$promise);return i.all(t)}).then(function(e){for(var t=0;t<e.length;t++)l.unreadTotalGroupMessages+=e[t].count}).catch(function(e){console.error(e)}),e.$on("$destroy",function(){n.removeAllListeners("chatInternalMessage:save"),n.removeAllListeners("chatInternalMessage:update")})}e.$inject=["$scope","$translate","$q","Auth","socket","api","desktopNotification","license"],angular.module("app.quick-panel").controller("QuickPanelController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;function p(e){var t=angular.element("#chat-dialog");a(function(){t.animate({scrollTop:t[0].scrollHeight},e)},0)}function g(e){return _.isNil(e)?"":e.replace(/[^\w.+#*\-]+/g,"")}function v(e){return m.get(e).success(function(){t.success({title:"Successful call",msg:"Call properly handled!"})}).error(function(e){t.error({title:"PhoneBar API Error",msg:d.instant("CONTACTMANAGER.ERRORS.PHONEBAR_API")})})}u.currentUser=i.getCurrentUser(),u.user=void 0,u.users={count:0,rows:[]},u.standardDate=moment(0).format("YYYY-MM-DD HH:mm:ss"),u.unreadMessage={},u.replyMessage="",u.disabled=!1,u.init=function(e){u.license=e},u.toggleChat=function(e){if(e){if(!e.allowmessenger&&"agent"===e.role)return t.warning({title:d.instant("QUICKPANEL.WARNING"),msg:d.instant("QUICKPANEL.MESSENGER_DISABLED")}),void(u.user=void 0);u.user=e,u.replyMessage="",n.chatInternalMessage.get({sort:"createdAt",FromId:u.currentUser.id+","+e.id,ToId:u.currentUser.id+","+e.id,ChatGroupId:"null"}).$promise.then(function(e){if(e&&e.rows){u.user.messages=e;for(var t=0;t<u.user.messages.rows.length;t+=1)!1===u.user.messages.rows[t].read&&u.user.messages.rows[t].ToId===u.currentUser.id&&n.chatInternalMessage.update({id:u.user.messages.rows[t].id,read:!0})}}).finally(function(){p(0)})}else u.user=void 0},u.reply=function(){u.disabled=!0;Date.now();if(""===u.replyMessage)return void(u.disabled=!1);var e={FromId:u.currentUser.id,ToId:u.user.id,body:u.replyMessage,read:!1};u.replyMessage="",n.chatInternalMessage.save(e).$promise.then(function(e){u.user.messages.rows.push(e),u.user.lastMessageAt=e.createdAt,u.user.lastMessage=e,p(400)}).catch(function(e){}).finally(function(){u.disabled=!1})},u.onMessageSave=function(e){if(e.ToId===u.currentUser.id&&!e.ChatGroupId){u.user&&u.user.id===e.FromId?(u.user.messages.rows.push(e),p(0),n.chatInternalMessage.update({id:e.id,read:!0})):u.unreadMessage[e.FromId]=u.unreadMessage[e.FromId]?u.unreadMessage[e.FromId]+1:1;var t=_.find(u.users.rows,{id:e.FromId});t&&(t.lastMessageAt=e.createdAt,t.lastMessage=e)}},u.onMessageUpdate=function(e){if((e.FromId===u.currentUser.id||e.ToId===u.currentUser.id)&&!e.ChatGroupId){if(u.user){var t=_.find(u.user.messages.rows,{id:e.id});t&&_.merge(t,e)}var n=_.find(u.users.rows,{id:u.currentUser.id===e.FromId?e.ToId:e.FromId});n&&n.lastMessage&&_.merge(n.lastMessage,e),e.ToId===u.currentUser.id&&e.read&&0<u.unreadMessage[e.FromId]&&(u.unreadMessage[e.FromId]-=1)}},u.onUserUpdate=function(e){var t=_.find(u.users.rows,{id:e.id});t&&(_.isNil(e.online)||t.online===e.online||(t.online=e.online),_.isNil(e.allowmessenger)||t.allowmessenger===e.allowmessenger||(t.allowmessenger=e.allowmessenger))},u.webcall=function(e){c.$broadcast("webrtc::call",{target:g(e)})},u.call=function(e){return v("http://127.0.0.1:"+(u.user.phoneBarRemoteControlPort||"9888")+"/api/originate/"+g(e))},u.transfer=function(e){return v("http://127.0.0.1:"+(u.user.phoneBarRemoteControlPort||"9888")+"/api/transfer?number="+g(e))},s.on("chatInternalMessage:save",u.onMessageSave),s.on("chatInternalMessage:update",u.onMessageUpdate),s.on("user:update",u.onUserUpdate),o("quick-panel").onClose(function(){u.user=void 0}),n.chatInternalMessage.get({fields:"FromId",ToId:u.currentUser.id,read:!1,nolimit:!0,ChatGroupId:"null"}).$promise.then(function(e){u.unreadMessage=_.countBy(e.rows,"FromId")}).catch(function(e){}),n.chatInternalMessage.getUsers().$promise.then(function(e){u.users=e}).catch(function(e){console.error(e)}),e.$on("$destroy",function(){s.removeAllListeners("chatInternalMessage:save"),s.removeAllListeners("chatInternalMessage:update"),s.removeAllListeners("user:update")})}e.$inject=["$scope","toasty","api","$timeout","Auth","socket","$mdSidenav","$q","$interval","$translate","$rootScope","$http"],angular.module("app.quick-panel").controller("ChatInternalController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l){var d=this;function c(e){a.hide(e)}d.errors=[],d.title="QUICKPANEL.EDIT_CHATGROUP",d.group=angular.copy(r),d.currentUser=o.getCurrentUser(),d.members=l,d.newChatGroup=!0,d.group||(d.group={write:!0,members:[]},d.title="QUICKPANEL.NEW_CHATGROUP"),d.saveChatGroup=function(){var n;return d.errors=[],s.chatGroup.save({name:d.group.name,write:d.group.write}).$promise.then(function(e){var t=_.map(d.group.members,"id");return t.unshift(d.currentUser.id),n=e,s.chatGroup.addMembers({id:n.id,ids:t}).$promise}).then(function(){i.success({title:"Group properly saved!",msg:n.name+" has been saved!"}),c(n)}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},d.closeDialog=c,d.querySearch=function(e){return e?d.members.rows.filter((t=e,n=angular.lowercase(t),function(e){var t=e.name.toLowerCase();return-1!=t.indexOf(n)})):[];var t,n}}e.$inject=["$scope","$state","$location","$mdDialog","toasty","api","Auth","group","members"],angular.module("app.quick-panel").controller("CreateOrEditChatGroupDialogController",e)}(),function(){"use strict";function e(e,n,a,s,t,o,i,r,l,d){var c=this;function m(){delete c.group}function u(e){var t=angular.element("#chat-group-dialog");a(function(){t.animate({scrollTop:t[0].scrollHeight},e)},0)}c.currentUser=i.getCurrentUser(),c.unreadGroupMessages={},c.groups={},c.participants,c.group,c.init=function(e){return c.license=e,r.user.getGroups({id:c.currentUser.id}).$promise.then(function(e){for(var t=0,n=[];t<e.rows.length;t++)e.rows[t].unreadGroupMessages=0,c.groups[e.rows[t].id]=e.rows[t],n.push(r.chatGroup.getUnread({id:e.rows[t].id}).$promise);return o.all(n)}).then(function(e){for(var t=0;t<e.length;t++)c.groups[e[t].id].unreadGroupMessages+=e[t].count}).catch(function(e){console.error(e)})},c.back=m,c.addGroup=function(e,t){s.show({controller:"CreateOrEditChatGroupDialogController",controllerAs:"vm",templateUrl:"app/quick-panel/tabs/groups/create/dialog.html",parent:angular.element(n.body),targetEvent:t,clickOutsideToClose:!0,locals:{group:e,me:c.currentUser,license:null,setting:null},resolve:{members:function(){return i.hasRole("admin")?r.user.get({role:"agent"}).$promise:r.userProfile.getResources({id:i.getCurrentUser().userProfileId,section:"Agents",role:"agent"}).$promise}}}).then(function(e){e&&(c.groups[e.id]=e)}).catch(function(e){e&&console.error(e.message)})},c.deleteGroup=function(e,t){var n=s.confirm().title("Are you sure want to delete the selected group?").htmlContent("Group <b>"+e.name+"</b> will be deleted.").ariaLabel("delete Group").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){return r.chatGroup.delete({id:e.id}).$promise}).then(function(){delete c.groups[e.id],d.success({title:"Group properly deleted!",msg:e.name+" has been deleted!"})}).catch(function(e){e&&d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatGroup.delete",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.groupsToArray=function(){return _.values(c.groups)},c.showMessageInfo=function(e,i){s.show({controller:"ShowMessageInfoDialogController",controllerAs:"vm",templateUrl:"app/quick-panel/tabs/groups/info/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{message:i},resolve:{data:function(){var a={messages:[]};return r.chatInternalMessage.get({ChatInternalMessageId:i.id}).$promise.then(function(e){var t=[];a.messages=e.rows,a.messages.unshift(i);for(var n=0;n<a.messages.length;n++)t.push(r.user.get({id:a.messages[n].ToId,fields:"id,name,fullname,userpic"}).$promise);return o.all(t)}).then(function(e){return a.users=e,a}).catch(function(e){e&&console.error(e)})}}}).then(function(){}).catch(function(e){e&&console.error(e.message)})},c.toggleChat=function(t){c.group={id:t.id,write:t.write,messages:{}},r.chatGroup.getMembers({id:t.id,fields:"id,name,fullname"}).$promise.then(function(e){return c.group.membersByKeys=_.keyBy(e.rows,"id"),c.group.members=_.differenceBy(e.rows,[{id:c.currentUser.id}],"id"),c.participants=_.map(c.group.members,"fullname").join(", "),r.chatGroup.getMessages({id:t.id,nolimit:!0}).$promise}).then(function(e){for(var t,n=0,a=[];n<e.count;n++)e.rows[n].ToId===c.currentUser.id&&(t=e.rows[n],c.group.messages[t.id]=t,e.rows[n].ToId!=c.currentUser.id||e.rows[n].FromId===c.currentUser.id||t.read||a.push(r.chatInternalMessage.update({id:t.id,read:!0})));return o.all(a)}).then(function(){u(400)}).catch(function(e){console.error(e.message)})},c.reply=function(){if(!c.replyMessage)return;var n={id:c.group.id,FromId:c.currentUser.id,ToId:c.currentUser.id,body:c.replyMessage,read:!0},a=[];c.replyMessage="",r.chatGroup.addMessage(n).$promise.then(function(e){n.read=!1,n.ChatInternalMessageId=e.id;for(var t=0;t<c.group.members.length;t++)c.group.members[t].id!==c.currentUser.id&&(n.ToId=c.group.members[t].id,a.push(r.chatGroup.addMessage(angular.copy(n)).$promise));return o.all(a)}).catch(function(e){console.log(e)})},l.on("chatInternalMessage:save",function(t){if(!c.group&&t.ToId===c.currentUser.id&&t.FromId!==c.currentUser.id&&!t.read&&t.ChatGroupId){var e=c.groups[t.ChatGroupId];if(!e)return r.chatGroup.get({id:t.ChatGroupId}).$promise.then(function(e){e.unreadGroupMessages=1,c.groups[e.id]=e});e.unreadGroupMessages||(e.unreadGroupMessages=0),e.unreadGroupMessages++}c.group&&t.ChatGroupId===c.group.id&&t.ToId===c.currentUser.id&&r.chatInternalMessage.update({id:t.id,read:!0}).$promise.then(function(){var e;e=t,c.group.messages[e.id]=e,u(400)})}),l.on("chatInternalMessage:update",function(e){e.ToId==c.currentUser.id&&e.FromId!==c.currentUser.id&&e.ChatGroupId&&e.read&&(0<c.groups[e.ChatGroupId].unreadGroupMessages&&c.groups[e.ChatGroupId].unreadGroupMessages--,c.group.messages[e.id]&&(c.group.messages[e.id].read=!0))}),l.on("chatGroup:remove",function(e){c.groups[e.id]&&delete c.groups[e.id]}),t("quick-panel").onClose(m),e.$on("$destroy",function(){l.removeAllListeners("chatInternalMessage:save"),l.removeAllListeners("chatInternalMessage:update"),l.removeAllListeners("chatGroup:remove")})}e.$inject=["$scope","$document","$timeout","$mdDialog","$mdSidenav","$q","Auth","api","socket","toasty"],angular.module("app.quick-panel").controller("ChatGroupController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r){this.data=r,this.title="QUICKPANEL.INFO",this.closeDialog=function(){a.hide()}}e.$inject=["$scope","$state","$location","$mdDialog","toasty","api","Auth","data"],angular.module("app.quick-panel").controller("ShowMessageInfoDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;o.form={token:s.token},o.setting={},o.resetPassword=function(){return i.auth.reset(o.form).$promise.then(function(){t.success({title:n.instant("RESETPASSWORD.PASSWORD_RESET"),msg:n.instant("RESETPASSWORD.PASSWORD_RESET_MESSAGE")}),a.go("app.login")}).catch(function(e){e&&t.error({title:n.instant("RESETPASSWORD.PASSWORD_RESET_ERROR"),msg:e.data?e.data.message||e.message||e:e.message||e})})},o.onInit=function(){e.isLoggedIn()&&a.go("app.dashboards.general");return i.setting.gdpr({id:1}).$promise.then(function(e){o.setting=e,o.passwordPattern=o.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:""}).catch(function(e){e&&t.error({title:"Error",msg:e.data?e.data.message||e.message||e:e.message||e})})}}e.$inject=["Auth","toasty","$translate","$state","api","$stateParams"],angular.module("app.reset").controller("ResetPasswordController",e)}(),function(){"use strict";function e(n,e,t,a,i,s,o){var r=this;function l(){e.hide()}r.errors=[],r.user=i,r.setting=s,r.reset=o,r.passwordPattern=r.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",r.savePassword=function(){r.errors=[],a.user.changePassword({id:r.user.id},{oldPassword:r.oldPassword,newPassword:r.password}).$promise.then(function(){t.show(t.simple().textContent("Your password properly updated").position("top right").hideDelay(5e3)),l()}).catch(function(e){console.error(e),r.errors=e.data.errors&&e.data.errors.length?e.data.errors:[{message:e.data.message||"Authorization error",type:"api.user.changePassword"}]})},r.closeDialog=l,n.$watch("vm.password",function(e,t){_.isNil(r.oldPassword)||(e===r.oldPassword?n.changePasswordForm.password.$setValidity("oldPasswordMatch",!1):n.changePasswordForm.password.$setValidity("oldPasswordMatch",!0))})}e.$inject=["$scope","$mdDialog","$mdToast","api","user","setting","reset"],angular.module("app.toolbar").controller("ChangePasswordController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r){var l=this;function d(e){_.isNil(e)&&s.cmHopper.update({id:l.preview.id,UserId:null}),a.hide()}l.customFieldsMap=r&&r.rows?_.mapValues(_.keyBy(r.rows,function(e){return"cf_"+e.id}),"name"):{},l.errors=[],l.hopperIds=[],l.preview=o,l.originated=!1,l.disable=!1,l.disableGetContact=!1,l.hopperIds.push(l.preview.id),l.originatePreview=function(){l.originated=!0,l.disable=!0,_.isEmpty(l.preview)?(i.error({title:"Message",msg:"Contact not available"}),l.disable=!1,l.hopperIds=[],d(!0)):s.rpc.getVoiceQueuesPreview({id:l.preview.id}).$promise.then(function(e){d(!0)}).catch(function(e){i.error({title:"Message",msg:e.data}),d(!0)}).finally(function(){l.disable=!1,l.hopperIds=[]})},l.closeDialog=d,l.nextContact=function(){return l.disableGetContact=!0,s.cmHopper.getPreview({hopperIds:l.hopperIds,direction:"next"}).$promise.then(function(e){l.disableGetContact=!1,_.isNil(e)||_.isNil(e.Queue)||!e.Queue.dialActive?(l.hopperIds=[],a.hide(),i.info({title:"PREVIEW",msg:"CAMPAIGN NOT ACTIVE"})):(l.originated||s.cmHopper.update({id:l.preview.id,UserId:null}),l.preview=e,l.hopperIds.push(l.preview.id))}).catch(function(e){if(l.disableGetContact=!1,l.hopperIds=[],404===e.status)l.getFirstAvailableContact();else if(e.data&&e.data.errors&&e.data.errors.length){a.hide();for(var t=0;t<e.data.errors.length;t+=1)i.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.hide(),i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api preview",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},l.previousContact=function(){if(l.disableGetContact=!0,1<l.hopperIds.length){var e=_.without(l.hopperIds,l.preview.id);return s.cmHopper.getPreview({hopperIds:e,direction:"prev"}).$promise.then(function(e){l.disableGetContact=!1,_.isNil(e)||_.isNil(e.Queue)||!e.Queue.dialActive?(l.hopperIds=[],a.hide(),i.info({title:"PREVIEW",msg:"CAMPAIGN NOT ACTIVE"})):(_.remove(l.hopperIds,function(e){return e==l.preview.id}),l.originated||s.cmHopper.update({id:l.preview.id,UserId:null}),l.preview=e)}).catch(function(e){if(404===e.status)l.hopperIds=[l.preview.id],i.info({title:"PREVIEW",msg:"PREVIOUS CONTACTS NOT AVAILABLE"});else if(e.data&&e.data.errors&&e.data.errors.length){l.hopperIds=[],a.hide();for(var t=0;t<e.data.errors.length;t+=1)i.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else l.hopperIds=[],a.hide(),i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api preview",msg:e.data?JSON.stringify(e.data.message):e.toString()})})}},l.getFirstAvailableContact=function(){return l.disableGetContact=!0,i.info({title:"PREVIEW",msg:"CONTACTS NOT AVAILABLE. REWINDING THE LIST"}),s.cmHopper.getPreview({hopperIds:[l.preview.id],direction:"next"}).$promise.then(function(e){_.isNil(e)||_.isNil(e.Queue)||!e.Queue.dialActive?(a.hide(),i.info({title:"PREVIEW",msg:"CAMPAIGN NOT ACTIVE"})):(l.originated||s.cmHopper.update({id:l.preview.id,UserId:null}),l.preview=e,l.hopperIds.push(l.preview.id))}).catch(function(e){if(a.hide(),404===e.status)i.info({title:"PREVIEW",msg:"CONTACTS NOT AVAILABLE"});else if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)i.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api preview",msg:e.data?JSON.stringify(e.data.message):e.toString()})}).finally(function(){l.disableGetContact=!1})},l.isCustomField=function(e){return _.startsWith(e,"cf_")},l.isHiddenField=function(e){return _.includes(["Company","CompanyId","ListId","UserId","createdAt","deletedAt","id","priority","scheduledat","tags","updatedAt","facebook","twitter","skype","wechat","teams","viber","line","telegram"],e)},l.isNil=function(e){return _.isNil(e)},e.$on("$destroy",function(){l.originated||s.cmHopper.update({id:l.preview.id,UserId:null})})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","api","preview","customFields"],angular.module("app.toolbar").controller("PreviewDialogController",e)}(),function(){"use strict";function e(t,n,s,a,o,e,i,r,l,d,c,m,u,p,g,v,h,f,b,A,E){var y,S=this;S.voiceQueues={},S.polling=!0,n.global={search:""},S.pauses=[],S.license=b,S.currentUser=v.getCurrentUser(),S.unreadTotalMessages=0,S.unreadTotalGroupMessages=0,S.contcts=0,"agent"===S.currentUser.role&&(y=E(function(){_.some(S.voiceQueues,{dialMethod:"preview",dialActive:!0})&&S.license.dialer&&S.polling?(S.polling=!1,f.cmHopper.getOpenContacts().$promise.then(function(e){e&&_.isNumber(e.contacts)&&(S.contacts=e.contacts)}).finally(function(){S.polling=!0})):S.contacts=0},14999)),S.setting=A,S.bodyEl=angular.element("body"),S.conf={realm:"asterisk",host:e.host(),protocol:e.protocol(),remotePlayerId:"remote-audio",ua:"Motion WebRTC Bar 0.2.0",license:S.license.webrtc,phoneBarExpires:S.currentUser.phoneBarExpires,phoneBarPrefixRequired:S.currentUser.phoneBarPrefixRequired},S.query={id:v.getCurrentUser().id,fields:"id,name,type,dialMethod,dialActive",channel:"voice",nolimit:!0},S.userStatusOptions=[{title:"Online",icon:"icon-checkbox-marked-circle",color:"#4CAF50"},{title:"Away",icon:"icon-clock",color:"#FFC107"},{title:"Do not Disturb",icon:"icon-minus-circle",color:"#F44336"},{title:"Invisible",icon:"icon-checkbox-blank-circle-outline",color:"#BDBDBD"},{title:"Offline",icon:"icon-checkbox-blank-circle-outline",color:"#616161"}],S.languages={ar:{title:"Arabic",translation:"TOOLBAR.ARABIC",code:"ar",flag:"ar"},da:{title:"Danish",translation:"TOOLBAR.DANISH",code:"da",flag:"da"},de:{title:"German",translation:"TOOLBAR.GERMAN",code:"de",flag:"de"},en:{title:"English",translation:"TOOLBAR.ENGLISH",code:"en",flag:"us"},es:{title:"Spanish",translation:"TOOLBAR.SPANISH",code:"es",flag:"es"},fa:{title:"Persian",translation:"TOOLBAR.PERSIAN",code:"fa",flag:"fa"},fi:{title:"Finnish",translation:"TOOLBAR.FINNISH",code:"fi",flag:"fi"},fr:{title:"French",translation:"TOOLBAR.FRENCH",code:"fr",flag:"fr"},he:{title:"Hebrew",translation:"TOOLBAR.HEBREW",code:"he",flag:"he"},hi:{title:"Hindi",translation:"TOOLBAR.HINDI",code:"hi",flag:"hi"},id:{title:"Indonesian",translation:"TOOLBAR.INDONESIAN",code:"id",flag:"id"},it:{title:"Italian",translation:"TOOLBAR.ITALIAN",code:"it",flag:"it"},ja:{title:"Japanese",translation:"TOOLBAR.JAPANESE",code:"ja",flag:"ja"},ko:{title:"Korean",translation:"TOOLBAR.KOREAN",code:"ko",flag:"ko"},lv:{title:"Latvian",translation:"TOOLBAR.LATVIAN",code:"lv",flag:"lv"},nl:{title:"Dutch",translation:"TOOLBAR.DUTCH",code:"nl",flag:"nl"},no:{title:"Norwegian",translation:"TOOLBAR.NORWEGIAN",code:"no",flag:"no"},pl:{title:"Polish",translation:"TOOLBAR.POLISH",code:"pl",flag:"pl"},"pt-BR":{title:"Brazilian",translation:"TOOLBAR.BRAZILIAN",code:"pt-BR",flag:"pt-BR"},"pt-PT":{title:"Portuguese",translation:"TOOLBAR.PORTUGUESE",code:"pt-PT",flag:"pt-PT"},ru:{title:"Russian",translation:"TOOLBAR.RUSSIAN",code:"ru",flag:"ru"},sv:{title:"Swedish",translation:"TOOLBAR.SWEDISH",code:"sv",flag:"sv"},tr:{title:"Turkish",translation:"TOOLBAR.TURKISH",code:"tr",flag:"tr"},"zh-CN":{title:"ChineseSimplified",translation:"TOOLBAR.CHINESESIMPLIFIED",code:"zh-CN",flag:"zh-CN"},"zh-TW":{title:"ChineseTraditional",translation:"TOOLBAR.CHINESETRADITIONAL",code:"zh-TW",flag:"zh-TW"}};var T=["ar","fa","he"];function I(e){S.voiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}function C(){S.promise=f.user.getQueues(S.query,I).$promise}function O(e){return v.logout(e).then(function(){return h.disconnect(),n.$broadcast("webrtc::logout"),a.go("app.login")}).catch(function(e){console.error(e)})}function x(e,t){c.show({controller:"ChangePasswordController",controllerAs:"vm",templateUrl:"app/toolbar/changepassword/changepassword.html",parent:angular.element(m.body),targetEvent:e,clickOutsideToClose:!t,locals:{user:S.user,setting:A,reset:t}})}S.toggleSidenav=function(e){i(e).toggle()},S.logout=O,S.changeLanguage=function(e){if(!S.languages.hasOwnProperty(e.code)){return void l.show({template:'<md-toast id="language-message" layout="column" layout-align="center start"><div class="md-toast-content">Motion supports multiple translations through angular-translate module, but currently we do not support the selected language. If you want to help us, send us a message.</div></md-toast>',hideDelay:7e3,position:"top right",parent:"#content"})}S.selectedLanguage=e,u.put("motion.language",e.code),r.use(e.code),"app.callysquare.projects.edit"===a.current.name&&d.location.reload();0<=T.indexOf(e.code)?p.info({title:r.instant("TOOLBAR.CHANGE_LANGUAGE_TITLE"),msg:r.instant("TOOLBAR.CHANGE_LANGUAGE_MESSAGE")}):t.$parent.$parent.vm.direction="ltr"},S.setUserStatus=function(e){S.userStatus=e},S.toggleHorizontalMobileMenu=function(){S.bodyEl.toggleClass("ms-navigation-horizontal-mobile-menu-active")},S.toggleMsNavigationFolded=function(){g.toggleFolded()},S.search=function(t){for(var e=[],n=g.getFlatNavigation(),a=s.defer(),i=0;i<n.length;i++)n[i].uisref&&e.push(n[i]);t&&(e=e.filter(function(e){if(-1<angular.lowercase(e.title).search(angular.lowercase(t)))return!0}));return o(function(){a.resolve(e)},1e3),a.promise},S.searchResultClick=function(e){e.uisref&&(e.stateParams?a.go(e.state,e.stateParams):a.go(e.state))},S.openSettings=function(e){n.$broadcast("webrtc::settings")},S.changePassword=x,S.isAgent=function(){return v.getCurrentUser()&&v.hasRole("agent")},S.onUserUpdate=function(e){if(e.id===S.user.id)if("agent"===e.role&&_.isBoolean(e.online)&&!e.online)if(0!==S.user.showWebBar){var t=c.confirm().title(r.instant("TOOLBAR.WARNING")+"!").textContent(r.instant("TOOLBAR.SOMEONE_LOGGED_YOU_OUT")).ariaLabel(r.instant("TOOLBAR.WARNING")+"!").ok(r.instant("TOOLBAR.STAY_LOGGED")).cancel("Logout");c.show(t).then(function(){v.queueLogin()}).catch(function(e){O(!0)}).finally(function(){_.merge(S.user,e),v.updateCurrentUser(S.user)})}else O(!0),_.merge(S.user,e),v.updateCurrentUser(S.user);else _.merge(S.user,e),v.updateCurrentUser(S.user)},S.onUserCalled=function(e){2===S.currentUser.showWebBar&&"agent"===S.currentUser.role&&S.currentUser.name===e.membername&&p.info({title:"WebRTC Popup",msg:"<div>                    <span>Call from: "+e.calleridnum+"</span><br>                    <span>Queue: "+e.queue+"</span><br>                    <span>Extra: "+(e.variables&&e.variables.extravar?e.variables.extravar:"Not defined")+"</span><br>                    </div>",showClose:!0,timeout:1e4,html:!0})},S.pause=function(e){return f.user.pause({id:S.user.id,type:e||"DEFAULT PAUSE"}).$promise.catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:PAUSEUSER",msg:e.status?JSON.stringify(e.data):e.toString()})})},S.unpause=function(){return f.user.unpause({id:S.user.id}).$promise.catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UNPAUSEUSER",msg:e.status?JSON.stringify(e.data):e.toString()})})},S.preview=function(t){return S.disable=!0,f.cmHopper.getPreview().$promise.then(function(e){_.isNil(e)||_.isNil(e.Queue)||!e.Queue.dialActive?p.info({title:"PREVIEW",msg:"CAMPAIGN NOT ACTIVE"}):c.show({controller:"PreviewDialogController",controllerAs:"vm",templateUrl:"app/toolbar/preview/dialog.html",parent:angular.element(m.body),targetEvent:t,clickOutsideToClose:!0,locals:{preview:e},resolve:{customFields:["apiResolver",function(e){return e.resolve("cmCustomField@get",{nolimit:!0})}]}})}).catch(function(e){if(404===e.status)p.info({title:"PREVIEW",msg:"CONTACT NOT AVAILABLE"});else if(e.data&&e.data.errors&&e.data.errors.length){S.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelMessage.accept"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelMessage.accept",msg:e.data?JSON.stringify(e.data.message):e.toString()})}).finally(function(){S.disable=!1})},S.getLogo=function(){return S.setting.defaultHeaderWhiteLabel?"xCALLY Motion":S.setting.headerWhiteLabel},S.userIsNotPhonebar=function(){return"admin"===S.currentUser.role||"user"===S.currentUser.role||"agent"===S.currentUser.role&&0!==S.currentUser.showWebBar},S.onInternalMessageSave=function(e){e.ToId!==S.currentUser.id||e.ChatGroupId||(S.unreadTotalMessages+=1);e.ToId===S.currentUser.id&&e.FromId!==S.currentUser.id&&!e.read&&e.ChatGroupId&&S.unreadTotalGroupMessages++},S.onInternalMessageUpdate=function(e){e.ToId===S.currentUser.id&&e.read&&0<S.unreadTotalMessages&&!e.ChatGroupId&&(S.unreadTotalMessages-=1);e.ToId===S.currentUser.id&&e.read&&e.ChatGroupId&&0<S.unreadTotalGroupMessages&&S.unreadTotalGroupMessages--},S.onUserVoiceQueue=function(e){_.toInteger(e.UserId)===v.getCurrentUser().id&&C()},S.onVoiceQueue=function(e){C()},h.connect(),h.on("user:update",S.onUserUpdate),h.on("user:called",S.onUserCalled),h.on("chatInternalMessage:save",S.onInternalMessageSave),h.on("chatInternalMessage:update",S.onInternalMessageUpdate),h.on("userVoiceQueue:save",S.onUserVoiceQueue),h.on("voiceQueue:save",S.onVoiceQueue),h.on("userVoiceQueue:remove",S.onUserVoiceQueue),h.on("voiceQueue:remove",S.onVoiceQueue),h.on("voiceQueue:update",S.onVoiceQueue),function(){S.user=v.getCurrentUser(),S.conf.ha1=S.user.md5secret,S.conf.id=S.user.id,S.conf.name=S.user.name,S.conf.fullname=S.user.fullname,S.conf.internal=S.user.internal,S.conf.recording=S.user.phoneBarEnableRecording,S.conf.autoAnswer=S.user.phoneBarAutoAnswer,S.conf.enableSettings=S.user.phoneBarEnableSettings,S.conf.enableDtmfTone=S.user.phoneBarEnableDtmfTone,S.conf.autoAnswerDelay=S.user.phoneBarAutoAnswerDelay,S.userStatus=S.userStatusOptions[0];var e=u.get("motion.language");e&&S.languages.hasOwnProperty(e)?S.selectedLanguage=S.languages[e]:S.selectedLanguage=S.languages[r.preferredLanguage()];if(f.pause.get({fields:"name",nolimit:!0}).$promise.then(function(e){S.pauses=e.rows?e.rows:[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETPAUSES",msg:e.status?JSON.stringify(e.data):e.toString()})}),S.setting.securePassword)if(S.user.passwordResetAt){var t=moment(S.user.passwordResetAt).add(S.setting.passwordExpiresDays||90,"day");moment().isAfter(t)?x(null,!0):moment().add(15,"day").isAfter(t)&&p.warning({title:r.instant("TOOLBAR.WARNING")+"!",msg:r.instant("TOOLBAR.PASSWORD_EXPIRE_REMAINING_DAYS")+": "+Math.ceil(t.diff(moment(),"days",!0)),timeout:2e4})}else x(null,!0)}(),C(),f.chatInternalMessage.get({fields:"FromId",ToId:S.currentUser.id,read:!1,nolimit:!0}).$promise.then(function(e){S.unreadTotalMessages=e.rows.length}),t.$on("$destroy",function(){h.removeAllListeners("user:called"),h.removeAllListeners("user:update"),h.removeAllListeners("chatInternalMessage:save"),h.removeAllListeners("chatInternalMessage:update"),h.removeAllListeners("userVoiceQueue:save"),h.removeAllListeners("voiceQueue:save"),h.removeAllListeners("userVoiceQueue:remove"),h.removeAllListeners("voiceQueue:remove"),h.removeAllListeners("voiceQueue:update"),y&&(E.cancel(y),y=null)})}e.$inject=["$scope","$rootScope","$q","$state","$timeout","$location","$mdSidenav","$translate","$mdToast","$window","$mdDialog","$document","$cookies","toasty","msNavigationService","Auth","socket","api","license","setting","$interval"],angular.module("app.toolbar").controller("ToolbarController",e)}();var urlParams=function(e){var t=new Object,n=e.lastIndexOf("?");if(0<n)for(var a=e.substring(n+1).split("&"),i=0;i<a.length;i++)0<(n=a[i].indexOf("="))&&(t[a[i].substring(0,n)]=a[i].substring(n+1));return t}(window.location.href),t0=new Date,MAX_REQUEST_SIZE=10485760,MAX_WIDTH=12e3,MAX_HEIGHT=12e3,EXPORT_URL="http://exp.draw.io/ImageExport2/export",SHARE_HOST="http://localhost:3000",SAVE_URL="api/square/projects/",VARIABLE_URL="/api/variables",STENCIL_PATH="/assets/plugins/square/stencils",SHAPES_PATH="/assets/plugins/square/shapes",IMAGE_PATH="/assets/plugins/square/images",STYLE_PATH="/assets/plugins/square/styles",CSS_PATH="/assets/plugins/square/styles",OPEN_FORM="api/square/projects/open",TEMPLATE_PATH="/assets/plugins/square/templates",RESOURCES_PATH="/assets/plugins/square/resources",RESOURCE_BASE=RESOURCES_PATH+"/grapheditor",CRUD_PERMISSIONS={readOnly:!1,canEdit:!1,canDelete:!1},tapAndHoldStartsConnection=!0,showConnectorImg=!0,mxLoadResources=!1,mxLanguages=["it","fr","ko","es","sv","ru","de","ja","zh-CN","zh-TW","nl","fi","da","pt-PT","no","hi","tr","fa"],mxLanguage="en",match=document.cookie.match(new RegExp("(^| )motion.language=([^;]+)"));match&&mxLanguages.includes(match[2])&&(mxLanguage=match[2]);var mxBasePath="assets/plugins/mxgraph",mxClient={VERSION:"2.0.0.0",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&navigator.userAgent.indexOf("MSIE")<0,IS_OP:0<=navigator.userAgent.indexOf("Opera/"),IS_OT:navigator.userAgent.indexOf("Presto/2.4.")<0&&navigator.userAgent.indexOf("Presto/2.3.")<0&&navigator.userAgent.indexOf("Presto/2.2.")<0&&navigator.userAgent.indexOf("Presto/2.1.")<0&&navigator.userAgent.indexOf("Presto/2.0.")<0&&navigator.userAgent.indexOf("Presto/1.")<0,IS_SF:0<=navigator.userAgent.indexOf("AppleWebKit/")&&navigator.userAgent.indexOf("Chrome/")<0,IS_GC:0<=navigator.userAgent.indexOf("Chrome/"),IS_MT:0<=navigator.userAgent.indexOf("Firefox/")&&navigator.userAgent.indexOf("Firefox/1.")<0&&navigator.userAgent.indexOf("Firefox/2.")<0||0<=navigator.userAgent.indexOf("Iceweasel/")&&navigator.userAgent.indexOf("Iceweasel/1.")<0&&navigator.userAgent.indexOf("Iceweasel/2.")<0||0<=navigator.userAgent.indexOf("SeaMonkey/")&&navigator.userAgent.indexOf("SeaMonkey/1.")<0||0<=navigator.userAgent.indexOf("Iceape/")&&navigator.userAgent.indexOf("Iceape/1.")<0,IS_SVG:0<=navigator.userAgent.indexOf("Firefox/")||0<=navigator.userAgent.indexOf("Iceweasel/")||0<=navigator.userAgent.indexOf("Seamonkey/")||0<=navigator.userAgent.indexOf("Iceape/")||0<=navigator.userAgent.indexOf("Galeon/")||0<=navigator.userAgent.indexOf("Epiphany/")||0<=navigator.userAgent.indexOf("AppleWebKit/")||0<=navigator.userAgent.indexOf("Gecko/")||0<=navigator.userAgent.indexOf("Opera/"),NO_FO:0<=navigator.userAgent.indexOf("Firefox/1.")||0<=navigator.userAgent.indexOf("Iceweasel/1.")||0<=navigator.userAgent.indexOf("Firefox/2.")||0<=navigator.userAgent.indexOf("Iceweasel/2.")||0<=navigator.userAgent.indexOf("SeaMonkey/1.")||0<=navigator.userAgent.indexOf("Iceape/1.")||0<=navigator.userAgent.indexOf("Camino/1.")||0<=navigator.userAgent.indexOf("Epiphany/2.")||0<=navigator.userAgent.indexOf("Opera/")||0<=navigator.userAgent.indexOf("MSIE")||0<=navigator.userAgent.indexOf("Mozilla/2."),IS_VML:"MICROSOFT INTERNET EXPLORER"==navigator.appName.toUpperCase(),IS_MAC:0<navigator.userAgent.toUpperCase().indexOf("MACINTOSH"),IS_TOUCH:0<navigator.userAgent.toUpperCase().indexOf("IPAD")||0<navigator.userAgent.toUpperCase().indexOf("IPOD")||0<navigator.userAgent.toUpperCase().indexOf("IPHONE")||0<navigator.userAgent.toUpperCase().indexOf("ANDROID"),IS_LOCAL:document.location.href.indexOf("http://")<0&&document.location.href.indexOf("https://")<0,isBrowserSupported:function(){return mxClient.IS_VML||mxClient.IS_SVG},link:function(e,t,n){if(n=n||document,mxClient.IS_IE6)n.write('<link rel="'+e+'" href="'+t+'" charset="ISO-8859-1" type="text/css"/>');else{var a=n.createElement("link");a.setAttribute("rel",e),a.setAttribute("href",t),a.setAttribute("charset","ISO-8859-1"),a.setAttribute("type","text/css"),n.getElementsByTagName("head")[0].appendChild(a)}},include:function(e){document.write('<script src="'+e+'"><\/script>')},dispose:function(){for(var e=0;e<mxEvent.objects.length;e++)null!=mxEvent.objects[e].mxListenerList&&mxEvent.removeAllListeners(mxEvent.objects[e])}};if(mxClient.IS_OP&&mxClient.IS_OT?mxClient.CSS_PREFIX="O":mxClient.IS_SF||mxClient.IS_GC?mxClient.CSS_PREFIX="Webkit":mxClient.IS_MT?mxClient.CSS_PREFIX="Moz":mxClient.IS_IE&&9<=document.documentMode&&(mxClient.CSS_PREFIX="ms"),void 0===mxLoadResources&&(mxLoadResources=!0),"undefined"==typeof mxResourceExtension&&(mxResourceExtension=".txt"),"undefined"==typeof mxLoadStylesheets&&(mxLoadStylesheets=!0),void 0!==mxBasePath&&0<mxBasePath.length?("/"==mxBasePath.substring(mxBasePath.length-1)&&(mxBasePath=mxBasePath.substring(0,mxBasePath.length-1)),mxClient.basePath=mxBasePath):mxClient.basePath=".","undefined"!=typeof mxImageBasePath&&0<mxImageBasePath.length?("/"==mxImageBasePath.substring(mxImageBasePath.length-1)&&(mxImageBasePath=mxImageBasePath.substring(0,mxImageBasePath.length-1)),mxClient.imageBasePath=mxImageBasePath):mxClient.imageBasePath=mxClient.basePath+"/images",mxClient.language=void 0!==mxLanguage?mxLanguage:mxClient.IS_IE?navigator.userLanguage:navigator.language,mxClient.defaultLanguage="undefined"!=typeof mxDefaultLanguage?mxDefaultLanguage:"en",mxLoadStylesheets&&mxClient.link("stylesheet",mxClient.basePath+"/css/common.css"),void 0!==mxLanguages&&(mxClient.languages=mxLanguages),mxClient.IS_IE){if(9<=document.documentMode)mxClient.IS_VML=!1,mxClient.IS_SVG=!0;else{8==document.documentMode?(document.namespaces.add(mxClient.VML_PREFIX,"urn:schemas-microsoft-com:vml","#default#VML"),document.namespaces.add(mxClient.OFFICE_PREFIX,"urn:schemas-microsoft-com:office:office","#default#VML")):(document.namespaces.add(mxClient.VML_PREFIX,"urn:schemas-microsoft-com:vml"),document.namespaces.add(mxClient.OFFICE_PREFIX,"urn:schemas-microsoft-com:office:office"));var ss=document.createStyleSheet();ss.cssText="v\\:*{behavior:url(#default#VML)}o\\:*{behavior:url(#default#VML)}",mxLoadStylesheets&&mxClient.link("stylesheet",mxClient.basePath+"/css/explorer.css")}window.attachEvent("onunload",mxClient.dispose)}var mxLog={consoleName:"Console",TRACE:!1,DEBUG:!0,WARN:!0,buffer:"",init:function(){if(null==mxLog.window&&null!=document.body){var e=mxLog.consoleName+" - mxGraph "+mxClient.VERSION,t=document.createElement("table");t.setAttribute("width","100%"),t.setAttribute("height","100%");var n=document.createElement("tbody"),a=document.createElement("tr"),i=document.createElement("td");if(i.style.verticalAlign="top",mxLog.textarea=document.createElement("textarea"),mxLog.textarea.setAttribute("readOnly","true"),mxLog.textarea.style.height="100%",mxLog.textarea.style.resize="none",mxLog.textarea.value=mxLog.buffer,mxLog.textarea.style.width=mxClient.IS_NS&&"BackCompat"!=document.compatMode?"99%":"100%",i.appendChild(mxLog.textarea),a.appendChild(i),n.appendChild(a),a=document.createElement("tr"),mxLog.td=document.createElement("td"),mxLog.td.style.verticalAlign="top",mxLog.td.setAttribute("height","30px"),a.appendChild(mxLog.td),n.appendChild(a),t.appendChild(n),mxLog.addButton("Info",function(e){mxLog.info()}),mxLog.addButton("DOM",function(e){e=mxUtils.getInnerHtml(document.body),mxLog.debug(e)}),mxLog.addButton("Trace",function(e){mxLog.TRACE=!mxLog.TRACE,mxLog.TRACE?mxLog.debug("Tracing enabled"):mxLog.debug("Tracing disabled")}),mxLog.addButton("Copy",function(e){try{mxUtils.copy(mxLog.textarea.value)}catch(e){mxUtils.alert(e)}}),mxLog.addButton("Show",function(e){try{mxUtils.popup(mxLog.textarea.value)}catch(e){mxUtils.alert(e)}}),mxLog.addButton("Clear",function(e){mxLog.textarea.value=""}),a=n=0,a="number"==typeof window.innerWidth?(n=window.innerHeight,window.innerWidth):(n=document.documentElement.clientHeight||document.body.clientHeight,document.body.clientWidth),mxLog.window=new mxWindow(e,t,Math.max(0,a-320),Math.max(0,n-210),300,160),mxLog.window.setMaximizable(!0),mxLog.window.setScrollable(!1),mxLog.window.setResizable(!0),mxLog.window.setClosable(!0),mxLog.window.destroyOnClose=!1,(mxClient.IS_NS||mxClient.IS_IE)&&!mxClient.IS_GC&&!mxClient.IS_SF&&"BackCompat"!=document.compatMode){var s=mxLog.window.getElement();e=function(e,t){mxLog.textarea.style.height=Math.max(0,s.offsetHeight-70)+"px"};mxLog.window.addListener(mxEvent.RESIZE_END,e),mxLog.window.addListener(mxEvent.MAXIMIZE,e),mxLog.window.addListener(mxEvent.NORMALIZE,e),mxLog.textarea.style.height="92px"}}},info:function(){mxLog.writeln(mxUtils.toString(navigator))},addButton:function(e,t){var n=document.createElement("button");mxUtils.write(n,e),mxEvent.addListener(n,"click",t),mxLog.td.appendChild(n)},isVisible:function(){return null!=mxLog.window&&mxLog.window.isVisible()},show:function(){mxLog.setVisible(!0)},setVisible:function(e){null==mxLog.window&&mxLog.init(),null!=mxLog.window&&mxLog.window.setVisible(e)},enter:function(e){if(mxLog.TRACE)return mxLog.writeln("Entering "+e),(new Date).getTime()},leave:function(e,t){if(mxLog.TRACE){var n=0!=t?" ("+((new Date).getTime()-t)+" ms)":"";mxLog.writeln("Leaving "+e+n)}},debug:function(){mxLog.DEBUG&&mxLog.writeln.apply(this,arguments)},warn:function(){mxLog.WARN&&mxLog.writeln.apply(this,arguments)},write:function(){for(var e="",t=0;t<arguments.length;t++)e+=arguments[t],t<arguments.length-1&&(e+=" ");null!=mxLog.textarea?(mxLog.textarea.value+=e,0<=navigator.userAgent.indexOf("Presto/2.5")&&(mxLog.textarea.style.visibility="hidden",mxLog.textarea.style.visibility="visible"),mxLog.textarea.scrollTop=mxLog.textarea.scrollHeight):mxLog.buffer+=e},writeln:function(){for(var e="",t=0;t<arguments.length;t++)e+=arguments[t],t<arguments.length-1&&(e+=" ");mxLog.write(e+"\n")}},mxObjectIdentity={FIELD_NAME:"mxObjectId",counter:0,get:function(e){if("object"==typeof e&&null==e[mxObjectIdentity.FIELD_NAME]){var t=mxUtils.getFunctionName(e.constructor);e[mxObjectIdentity.FIELD_NAME]=t+"#"+mxObjectIdentity.counter++}return e[mxObjectIdentity.FIELD_NAME]},clear:function(e){"object"==typeof e&&delete e[mxObjectIdentity.FIELD_NAME]}};function mxDictionary(){this.clear()}mxDictionary.prototype.map=null,mxDictionary.prototype.clear=function(){this.map={}},mxDictionary.prototype.get=function(e){return e=mxObjectIdentity.get(e),this.map[e]},mxDictionary.prototype.put=function(e,t){var n=mxObjectIdentity.get(e),a=this.map[n];return this.map[n]=t,a},mxDictionary.prototype.remove=function(e){e=mxObjectIdentity.get(e);var t=this.map[e];return delete this.map[e],t},mxDictionary.prototype.getKeys=function(){var e,t=[];for(e in this.map)t.push(e);return t},mxDictionary.prototype.getValues=function(){var e,t=[];for(e in this.map)t.push(this.map[e]);return t},mxDictionary.prototype.visit=function(e){for(var t in this.map)e(t,this.map[t])};var mxResources={resources:[],extension:mxResourceExtension,resourcesEncoded:!1,loadDefaultBundle:!0,loadSpecialBundle:!0,isLanguageSupported:function(e){return null==mxClient.languages||0<=mxUtils.indexOf(mxClient.languages,e)},getDefaultBundle:function(e,t){return mxResources.loadDefaultBundle||!mxResources.isLanguageSupported(t)?e+mxResources.extension:null},getSpecialBundle:function(e,t){if(null==mxClient.languages||!this.isLanguageSupported(t)){var n=t.indexOf("-");0<n&&(t=t.substring(0,n))}return mxResources.loadSpecialBundle&&mxResources.isLanguageSupported(t)&&t!=mxClient.defaultLanguage?e+"_"+t+mxResources.extension:null},add:function(e,t){if((t=null!=t?t:mxClient.language.toLowerCase())!=mxConstants.NONE){var n=mxResources.getDefaultBundle(e,t);if(null!=n)try{var a=mxUtils.load(n);a.isReady()&&mxResources.parse(a.getText())}catch(e){}if(null!=(n=mxResources.getSpecialBundle(e,t)))try{(a=mxUtils.load(n)).isReady()&&mxResources.parse(a.getText())}catch(e){}}},parse:function(e){if(null!=e){e=e.split("\n");for(var t=0;t<e.length;t++)if("#"!=e[t].charAt(0)){var n=e[t].indexOf("=");if(0<n){var a=e[t].substring(0,n),i=e[t].length;13==e[t].charCodeAt(i-1)&&i--,n=e[t].substring(n+1,i),this.resourcesEncoded?(n=n.replace(/\\(?=u[a-fA-F\d]{4})/g,"%"),mxResources.resources[a]=unescape(n)):mxResources.resources[a]=n}}}},get:function(e,t,n){if(null==(e=mxResources.resources[e])&&(e=n),null!=e&&null!=t){n=[];for(var a=null,i=0;i<e.length;i++){var s=e.charAt(i);"{"==s?a="":null!=a&&"}"==s?(0<=(a=parseInt(a)-1)&&a<t.length&&n.push(t[a]),a=null):null!=a?a+=s:n.push(s)}e=n.join("")}return e}};function mxPoint(e,t){this.x=null!=e?e:0,this.y=null!=t?t:0}function mxRectangle(e,t,n,a){mxPoint.call(this,e,t),this.width=null!=n?n:0,this.height=null!=a?a:0}mxPoint.prototype.x=null,mxPoint.prototype.y=null,mxPoint.prototype.equals=function(e){return e.x==this.x&&e.y==this.y},mxPoint.prototype.clone=function(){return mxUtils.clone(this)},mxRectangle.prototype=new mxPoint,mxRectangle.prototype.constructor=mxRectangle,mxRectangle.prototype.width=null,mxRectangle.prototype.height=null,mxRectangle.prototype.setRect=function(e,t,n,a){this.x=e,this.y=t,this.width=n,this.height=a},mxRectangle.prototype.getCenterX=function(){return this.x+this.width/2},mxRectangle.prototype.getCenterY=function(){return this.y+this.height/2},mxRectangle.prototype.add=function(e){if(null!=e){var t=Math.min(this.x,e.x),n=Math.min(this.y,e.y),a=Math.max(this.x+this.width,e.x+e.width);e=Math.max(this.y+this.height,e.y+e.height),this.x=t,this.y=n,this.width=a-t,this.height=e-n}},mxRectangle.prototype.grow=function(e){this.x-=e,this.y-=e,this.width+=2*e,this.height+=2*e},mxRectangle.prototype.getPoint=function(){return new mxPoint(this.x,this.y)},mxRectangle.prototype.equals=function(e){return e.x==this.x&&e.y==this.y&&e.width==this.width&&e.height==this.height};var mxEffects={animateChanges:function(l,d,c){var m=0,u=function(){for(var e=!1,t=0;t<d.length;t++){var n=d[t];if(n instanceof mxGeometryChange||n instanceof mxTerminalChange||n instanceof mxValueChange||n instanceof mxChildChange||n instanceof mxStyleChange){var a=l.getView().getState(n.cell||n.child,!1);if(null!=a)if(e=!0,n.constructor!=mxGeometryChange||l.model.isEdge(n.cell))mxUtils.setOpacity(a.shape.node,100*m/10);else{var i=l.getView().scale,s=(n.geometry.x-n.previous.x)*i,o=(n.geometry.y-n.previous.y)*i,r=(n.geometry.width-n.previous.width)*i;i=(n.geometry.height-n.previous.height)*i;0==m?(a.x-=s,a.y-=o,a.width-=r,a.height-=i):(a.x+=s/10,a.y+=o/10,a.width+=r/10,a.height+=i/10),l.cellRenderer.redraw(a),mxEffects.cascadeOpacity(l,n.cell,100*m/10)}}}m<10&&e?(m++,window.setTimeout(u,p)):null!=c&&c()},p=30;u()},cascadeOpacity:function(e,t,n){for(var a=e.model.getChildCount(t),i=0;i<a;i++){var s=e.model.getChildAt(t,i),o=e.getView().getState(s);null!=o&&(mxUtils.setOpacity(o.shape.node,n),mxEffects.cascadeOpacity(e,s,n))}if(null!=(t=e.model.getEdges(t)))for(i=0;i<t.length;i++)null!=(a=e.getView().getState(t[i]))&&mxUtils.setOpacity(a.shape.node,n)},fadeOut:function(e,t,n,a,i,s){a=a||40,i=i||30;var o=t||100;if(mxUtils.setOpacity(e,o),s||null==s){var r=function(){o=Math.max(o-a,0),mxUtils.setOpacity(e,o),0<o?window.setTimeout(r,i):(e.style.visibility="hidden",n&&e.parentNode&&e.parentNode.removeChild(e))};window.setTimeout(r,i)}else e.style.visibility="hidden",n&&e.parentNode&&e.parentNode.removeChild(e)}},mxUtils={errorResource:"none"!=mxClient.language?"error":"",closeResource:"none"!=mxClient.language?"close":"",errorImage:mxClient.imageBasePath+"/error.gif",removeCursors:function(e){if(null!=e.style&&(e.style.cursor=""),null!=(e=e.childNodes))for(var t=e.length,n=0;n<t;n+=1)mxUtils.removeCursors(e[n])},getCurrentStyle:mxClient.IS_IE?function(e){return null!=e?e.currentStyle:null}:function(e){return null!=e?window.getComputedStyle(e,""):null},hasScrollbars:function(e){return null!=(e=mxUtils.getCurrentStyle(e))&&("scroll"==e.overflow||"auto"==e.overflow)},bind:function(e,t){return function(){return t.apply(e,arguments)}},eval:function(a){var b=null;if(0<=a.indexOf("function"))try{eval("var _mxJavaScriptExpression="+a),b=_mxJavaScriptExpression,_mxJavaScriptExpression=null}catch(e){mxLog.warn(e.message+" while evaluating "+a)}else try{b=eval(a)}catch(e){mxLog.warn(e.message+" while evaluating "+a)}return b},findNode:function(e,t,n){var a=e.getAttribute(t);if(null!=a&&a==n)return e;for(e=e.firstChild;null!=e;){if(null!=(a=mxUtils.findNode(e,t,n)))return a;e=e.nextSibling}return null},findNodeByAttribute:9<=document.documentMode?function(e,t,n){var a=null;if(null!=e)if(e.nodeType==mxConstants.NODETYPE_ELEMENT&&e.getAttribute(t)==n)a=e;else for(e=e.firstChild;null!=e&&null==a;)a=mxUtils.findNodeByAttribute(e,t,n),e=e.nextSibling;return a}:mxClient.IS_IE?function(e,t,n){return null==e?null:e.ownerDocument.selectSingleNode("//*[@"+t+"='"+n+"']")}:function(e,t,n){return null==e?null:e.ownerDocument.evaluate("//*[@"+t+"='"+n+"']",e.ownerDocument,null,XPathResult.ANY_TYPE,null).iterateNext()},getFunctionName:function(e){var t=null;if(null!=e)if(null!=e.name)t=e.name;else{for(e=e.toString(),t=9;" "==e.charAt(t);)t++;var n=e.indexOf("(",t);t=e.substring(t,n)}return t},indexOf:function(e,t){if(null!=e&&null!=t)for(var n=0;n<e.length;n++)if(e[n]==t)return n;return-1},remove:function(e,t){var n=null;if("object"==typeof t)for(var a=mxUtils.indexOf(t,e);0<=a;)t.splice(a,1),n=e,a=mxUtils.indexOf(t,e);for(var i in t)t[i]==e&&(delete t[i],n=e);return n},isNode:function(e,t,n,a){return!(null==e||isNaN(e.nodeType)||null!=t&&e.nodeName.toLowerCase()!=t.toLowerCase())&&(null==n||e.getAttribute(n)==a)},getChildNodes:function(e,t){t=t||mxConstants.NODETYPE_ELEMENT;for(var n=[],a=e.firstChild;null!=a;)a.nodeType==t&&n.push(a),a=a.nextSibling;return n},createXmlDocument:function(){var e=null;return document.implementation&&document.implementation.createDocument?e=document.implementation.createDocument("","",null):window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLDOM")),e},parseXml:mxClient.IS_IE&&(void 0===document.documentMode||document.documentMode<9)?function(e){var t=mxUtils.createXmlDocument();return t.async="false",t.loadXML(e),t}:function(e){return(new DOMParser).parseFromString(e,"text/xml")},clearSelection:document.selection?function(){document.selection.empty()}:window.getSelection?function(){window.getSelection().removeAllRanges()}:void 0,getPrettyXml:function(e,t,n){var a=[];if(null!=e)if(t=t||"  ",n=n||"",e.nodeType==mxConstants.NODETYPE_TEXT)a.push(e.nodeValue);else{a.push(n+"<"+e.nodeName);var i=e.attributes;if(null!=i)for(var s=0;s<i.length;s++){var o=mxUtils.htmlEntities(i[s].nodeValue);a.push(" "+i[s].nodeName+'="'+o+'"')}if(null!=(i=e.firstChild)){for(a.push(">\n");null!=i;)a.push(mxUtils.getPrettyXml(i,t,n+t)),i=i.nextSibling;a.push(n+"</"+e.nodeName+">\n")}else a.push("/>\n")}return a.join("")},removeWhitespace:function(e,t){for(var n=t?e.previousSibling:e.nextSibling;null!=n&&n.nodeType==mxConstants.NODETYPE_TEXT;){var a=t?n.previousSibling:n.nextSibling,i=mxUtils.getTextContent(n);0==mxUtils.trim(i).length&&n.parentNode.removeChild(n),n=a}},htmlEntities:function(e,t){return e=(e=(e=(e=(e=(e||"").replace(/&/g,"&amp;")).replace(/"/g,"&quot;")).replace(/\'/g,"&#39;")).replace(/</g,"&lt;")).replace(/>/g,"&gt;"),(null==t||t)&&(e=e.replace(/\n/g,"&#xa;")),e},isVml:function(e){return null!=e&&"urn:schemas-microsoft-com:vml"==e.tagUrn},getXml:function(e,t){var n="";return null!=e&&(n=null==(n=e.xml)?e.innerHTML?e.innerHTML:(new XMLSerializer).serializeToString(e):n.replace(/\r\n\t[\t]*/g,"").replace(/>\r\n/g,">").replace(/\r\n/g,"\n")),n.replace(/\n/g,t||"&#xa;")},getTextContent:function(e){var t="";return null!=e&&(null!=e.firstChild&&(e=e.firstChild),t=e.nodeValue||""),t},getInnerHtml:mxClient.IS_IE?function(e){return null!=e?e.innerHTML:""}:function(e){return null!=e?(new XMLSerializer).serializeToString(e):""},getOuterHtml:mxClient.IS_IE?function(e){if(null==e)return"";if(null!=e.outerHTML)return e.outerHTML;var t=[];t.push("<"+e.nodeName);var n=e.attributes;if(null!=n)for(var a=0;a<n.length;a++){var i=n[a].nodeValue;null!=i&&0<i.length&&(t.push(" "),t.push(n[a].nodeName),t.push('="'),t.push(i),t.push('"'))}return 0==e.innerHTML.length?t.push("/>"):(t.push(">"),t.push(e.innerHTML),t.push("</"+e.nodeName+">")),t.join("")}:function(e){return null!=e?(new XMLSerializer).serializeToString(e):""},write:function(e,t){var n=e.ownerDocument.createTextNode(t);return null!=e&&e.appendChild(n),n},writeln:function(e,t){var n=e.ownerDocument.createTextNode(t);return null!=e&&(e.appendChild(n),e.appendChild(document.createElement("br"))),n},br:function(e,t){t=t||1;for(var n=null,a=0;a<t;a++)null!=e&&(n=e.ownerDocument.createElement("br"),e.appendChild(n));return n},button:function(e,t,n){return n=(n=null!=n?n:document).createElement("button"),mxUtils.write(n,e),mxEvent.addListener(n,"click",function(e){t(e)}),n},para:function(e,t){var n=document.createElement("p");return mxUtils.write(n,t),null!=e&&e.appendChild(n),n},addTransparentBackgroundFilter:function(e){e.style.filter+="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+mxClient.imageBasePath+"/transparent.gif', sizingMethod='scale')"},linkAction:function(e,t,n,a,i){return mxUtils.link(e,t,function(){n.execute(a)},i)},linkInvoke:function(e,t,n,a,i,s){return mxUtils.link(e,t,function(){n[a](i)},s)},link:function(e,t,n,a){var i=document.createElement("span");return i.style.color="blue",i.style.textDecoration="underline",i.style.cursor="pointer",null!=a&&(i.style.paddingLeft=a+"px"),mxEvent.addListener(i,"click",n),mxUtils.write(i,t),null!=e&&e.appendChild(i),i},fit:function(e){var t=parseInt(e.offsetLeft),n=parseInt(e.offsetWidth),a=document.body,i=document.documentElement,s=(a.scrollLeft||i.scrollLeft)+(a.clientWidth||i.clientWidth);s<t+n&&(e.style.left=Math.max(a.scrollLeft||i.scrollLeft,s-n)+"px"),t=parseInt(e.offsetTop),n=parseInt(e.offsetHeight),(s=(a.scrollTop||i.scrollTop)+Math.max(a.clientHeight||0,i.clientHeight))<t+n&&(e.style.top=Math.max(a.scrollTop||i.scrollTop,s-n)+"px")},open:function(e){if(mxClient.IS_NS){try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")}catch(e){return mxUtils.alert("Permission to read file denied."),""}var t=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);return t.initWithPath(e),t.exists()?((e=Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream)).init(t,1,4,null),(t=Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream)).init(e),t.read(t.available())):(mxUtils.alert("File not found."),"")}return e=(t=new ActiveXObject("Scripting.FileSystemObject").OpenTextFile(e,1)).readAll(),t.close(),e},save:function(e,t){if(mxClient.IS_NS){try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")}catch(e){return void mxUtils.alert("Permission to write file denied.")}var n=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);n.initWithPath(e),n.exists()||n.create(0,420);var a=Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);a.init(n,34,4,null),a.write(t,t.length),a.flush(),a.close()}else(n=new ActiveXObject("Scripting.FileSystemObject").CreateTextFile(e,!0)).Write(t),n.Close()},saveAs:function(e){var t=document.createElement("iframe");t.setAttribute("src",""),t.style.visibility="hidden",document.body.appendChild(t);try{if(mxClient.IS_NS){var n=t.contentDocument;n.open(),n.write(e),n.close();try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"),t.focus(),saveDocument(n)}catch(e){mxUtils.alert("Permission to save document denied.")}}else(n=t.contentWindow.document).write(e),n.execCommand("SaveAs",!1,document.location)}finally{document.body.removeChild(t)}},copy:function(e){if(window.clipboardData)window.clipboardData.setData("Text",e);else{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");var t=Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard);if(t){var n=Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);if(n){n.addDataFlavor("text/unicode");var a=Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);a.data=e,n.setTransferData("text/unicode",a,2*e.length),t.setData(n,null,Components.interfaces.nsIClipboard.kGlobalClipboard)}}}},load:function(e){return(e=new mxXmlRequest(e,null,"GET",!1)).send(),e},get:function(e,t,n){return new mxXmlRequest(e,null,"GET").send(t,n)},post:function(e,t,n,a){return new mxXmlRequest(e,t).send(n,a)},submit:function(e,t,n,a){return new mxXmlRequest(e,t).simulate(n,a)},loadInto:function(e,t,n){mxClient.IS_IE?t.onreadystatechange=function(){4==t.readyState&&n()}:t.addEventListener("load",n,!1),t.load(e)},getValue:function(e,t,n){return null==(e=null!=e?e[t]:null)&&(e=n),e},getNumber:function(e,t,n){return null==(e=null!=e?e[t]:null)&&(e=n||0),Number(e)},getColor:function(e,t,n){return null==(e=null!=e?e[t]:null)?e=n:e==mxConstants.NONE&&(e=null),e},clone:function(e,t,n){n=null!=n&&n;var a=null;if(null!=e&&"function"==typeof e.constructor){var i;a=new e.constructor;for(i in e)i!=mxObjectIdentity.FIELD_NAME&&(null==t||mxUtils.indexOf(t,i)<0)&&(a[i]=n||"object"!=typeof e[i]?e[i]:mxUtils.clone(e[i]))}return a},equalPoints:function(e,t){if(null==e&&null!=t||null!=e&&null==t||null!=e&&null!=t&&e.length!=t.length)return!1;if(null!=e&&null!=t)for(var n=0;n<e.length;n++)if(e[n]==t[n]||null!=e[n]&&!e[n].equals(t[n]))return!1;return!0},equalEntries:function(e,t){if(null==e&&null!=t||null!=e&&null==t||null!=e&&null!=t&&e.length!=t.length)return!1;if(null!=e&&null!=t)for(var n in e)if(e[n]!=t[n])return!1;return!0},extend:function(e,t){var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e},toString:function(e){var t,n="";for(t in e)try{if(null==e[t])n+=t+" = [null]\n";else if("function"==typeof e[t])n+=t+" => [Function]\n";else if("object"==typeof e[t])n=n+(t+" => [")+mxUtils.getFunctionName(e[t].constructor)+"]\n";else n+=t+" = "+e[t]+"\n"}catch(e){n+=t+"="+e.message}return n},toRadians:function(e){return Math.PI*e/180},arcToCurves:function(e,t,n,a,i,s,o,r,l){if(r-=e,l-=t,0===n||0===a)return h;n=Math.abs(n),a=Math.abs(a);var d=-r/2,c=-l/2,m=Math.cos(i*Math.PI/180);i=m*d+(h=Math.sin(i*Math.PI/180))*c;d=-1*h*d+m*c;r=m*(c=(s=1<(v=(c=i*i)/(g=n*n)+(p=d*d)/(A=a*a))?(n*=Math.sqrt(v),a*=Math.sqrt(v),0):(v=1,s===o&&(v=-1),v*Math.sqrt((g*A-g*p-A*c)/(g*p+A*c))))*n*d/a)-h*(p=-1*s*a*i/n)+r/2,l=h*c+m*p+l/2,s=0<=(g=Math.atan2((d-p)/a,(i-c)/n)-Math.atan2(0,1))?g:2*Math.PI+g,i=0<=(g=Math.atan2((-d-p)/a,(-i-c)/n)-Math.atan2((d-p)/a,(i-c)/n))?g:2*Math.PI+g,0==o&&0<i?i-=2*Math.PI:0!=o&&i<0&&(i+=2*Math.PI),o=2*i/Math.PI,i/=o=Math.ceil(o<0?-1*o:o),d=8/3*Math.sin(i/4)*Math.sin(i/4)/Math.sin(i/2),c=m*n,m*=a,n*=h,a*=h;for(var u=Math.cos(s),p=-d*(c*(b=Math.sin(s))+a*u),g=-d*(n*b-m*u),v=A=0,h=[],f=0;f<o;++f){s+=i;var b,A=c*(u=Math.cos(s))-a*(b=Math.sin(s))+r,E=(v=n*u+m*b+l,-d*(c*b+a*u));u=-d*(n*b-m*u);h[b=6*f]=Number(p+e),h[b+1]=Number(g+t),h[b+2]=Number(A-E+e),h[b+3]=Number(v-u+t),h[b+4]=Number(A+e),h[b+5]=Number(v+t),p=A+E,g=v+u}return h},getBoundingBox:function(e,t){var n=null;if(null!=e&&null!=t&&0!=t){var a=mxUtils.toRadians(t),i=(n=Math.cos(a),Math.sin(a)),s=new mxPoint(e.x+e.width/2,e.y+e.height/2),o=new mxPoint(e.x,e.y),r=new mxPoint((a=new mxPoint(e.x+e.width,e.y)).x,e.y+e.height),l=new mxPoint(e.x,r.y);o=mxUtils.getRotatedPoint(o,n,i,s),a=mxUtils.getRotatedPoint(a,n,i,s),r=mxUtils.getRotatedPoint(r,n,i,s),l=mxUtils.getRotatedPoint(l,n,i,s);(n=new mxRectangle(o.x,o.y,0,0)).add(new mxRectangle(a.x,a.y,0,0)),n.add(new mxRectangle(r.x,r.y,0,0)),n.add(new mxRectangle(l.x,l.y,0,0))}return n},getRotatedPoint:function(e,t,n,a){a=null!=a?a:new mxPoint;var i=e.x-a.x;return new mxPoint(i*t-(e=e.y-a.y)*n+a.x,e*t+i*n+a.y)},getPortConstraints:function(e,t,n,a){return null==(e=mxUtils.getValue(e.style,mxConstants.STYLE_PORT_CONSTRAINT,null))?a:(a=e.toString(),e=mxConstants.DIRECTION_MASK_NONE,0<=a.indexOf(mxConstants.DIRECTION_NORTH)&&(e|=mxConstants.DIRECTION_MASK_NORTH),0<=a.indexOf(mxConstants.DIRECTION_WEST)&&(e|=mxConstants.DIRECTION_MASK_WEST),0<=a.indexOf(mxConstants.DIRECTION_SOUTH)&&(e|=mxConstants.DIRECTION_MASK_SOUTH),0<=a.indexOf(mxConstants.DIRECTION_EAST)&&(e|=mxConstants.DIRECTION_MASK_EAST),e)},reversePortConstraints:function(e){return(e&mxConstants.DIRECTION_MASK_WEST)<<3|(e&mxConstants.DIRECTION_MASK_NORTH)<<1|(e&mxConstants.DIRECTION_MASK_SOUTH)>>1|(e&mxConstants.DIRECTION_MASK_EAST)>>3},findNearestSegment:function(e,t,n){var a=-1;if(0<e.absolutePoints.length)for(var i=e.absolutePoints[0],s=null,o=1;o<e.absolutePoints.length;o++){var r=e.absolutePoints[o];i=mxUtils.ptSegDistSq(i.x,i.y,r.x,r.y,t,n);(null==s||i<s)&&(s=i,a=o-1),i=r}return a},rectangleIntersectsSegment:function(e,t,n){var a=e.y,i=e.x,s=a+e.height,o=i+e.width;e=t.x;var r=n.x;if(t.x>n.x&&(e=n.x,r=t.x),o<r&&(r=o),e<i&&(e=i),r<e)return!1;i=t.y,o=n.y;var l=n.x-t.x;return 1e-7<Math.abs(l)&&(i=(n=(n.y-t.y)/l)*e+(t=t.y-n*t.x),o=n*r+t),o<i&&(t=o,o=i,i=t),s<o&&(o=s),i<a&&(i=a),!(o<i)},contains:function(e,t,n){return e.x<=t&&e.x+e.width>=t&&e.y<=n&&e.y+e.height>=n},intersects:function(e,t){var n=e.width,a=e.height,i=t.width,s=t.height;if(i<=0||s<=0||n<=0||a<=0)return!1;var o=e.x,r=e.y,l=t.x,d=t.y;s+=d,n+=o,a+=r;return((i=i+l)<l||o<i)&&(s<d||r<s)&&(n<o||l<n)&&(a<r||d<a)},intersectsHotspot:function(e,t,n,a,i,s){if(i=null!=i?i:0,s=null!=s?s:0,0<(a=null!=a?a:1)){var o=e.getCenterX(),r=e.getCenterY(),l=e.width,d=e.height,c=mxUtils.getValue(e.style,mxConstants.STYLE_STARTSIZE)*e.view.scale;return 0<c&&(mxUtils.getValue(e.style,mxConstants.STYLE_HORIZONTAL,!0)?(r=e.y+c/2,d=c):(o=e.x+c/2,l=c)),l=Math.max(i,l*a),d=Math.max(i,d*a),0<s&&(l=Math.min(l,s),d=Math.min(d,s)),a=new mxRectangle(o-l/2,r-d/2,l,d),0!=(o=mxUtils.toRadians(mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION)||0))&&(i=Math.cos(-o),s=Math.sin(-o),o=new mxPoint(e.getCenterX(),e.getCenterY()),t=(e=mxUtils.getRotatedPoint(new mxPoint(t,n),i,s,o)).x,n=e.y),mxUtils.contains(a,t,n)}return!0},getOffset:function(e,t){var n=0,a=0;if(null!=t&&t){var i=document.body,s=document.documentElement;n=n+(i.scrollLeft||s.scrollLeft),a=a+(i.scrollTop||s.scrollTop)}for(;e.offsetParent;)n+=e.offsetLeft,a+=e.offsetTop,e=e.offsetParent;return new mxPoint(n,a)},getScrollOrigin:function(e){for(var t=document.body,n=document.documentElement,a=new mxPoint(t.scrollLeft||n.scrollLeft,t.scrollTop||n.scrollTop);null!=e&&e!=t&&e!=n;)!isNaN(e.scrollLeft)&&!isNaN(e.scrollTop)&&(a.x+=e.scrollLeft,a.y+=e.scrollTop),e=e.parentNode;return a},convertPoint:function(e,t,n){var a=mxUtils.getScrollOrigin(e);return(e=mxUtils.getOffset(e)).x-=a.x,e.y-=a.y,new mxPoint(t-e.x,n-e.y)},ltrim:function(e,t){return e.replace(RegExp("^["+(t||"\\s")+"]+","g"),"")},rtrim:function(e,t){return e.replace(RegExp("["+(t||"\\s")+"]+$","g"),"")},trim:function(e,t){return mxUtils.ltrim(mxUtils.rtrim(e,t),t)},isNumeric:function(e){return null!=e&&(null==e.length||0<e.length&&e.indexOf("0x")<0&&e.indexOf("0X")<0)&&!isNaN(e)},mod:function(e,t){return(e%t+t)%t},intersection:function(e,t,n,a,i,s,o,r){var l=(r-s)*(n-e)-(o-i)*(a-t);return o=((o-i)*(t-s)-(r-s)*(e-i))/l,i=((n-e)*(t-s)-(a-t)*(e-i))/l,0<=o&&o<=1&&0<=i&&i<=1?new mxPoint(e+o*(n-e),t+o*(a-t)):null},ptSegDistSq:function(e,t,n,a,i,s){return n=(i-=e)*(n-=e)+(s-=t)*(a-=t)<=0?0:(e=(i=n-i)*n+(s=a-s)*a)<=0?0:e*e/(n*n+a*a),(i=i*i+s*s-n)<0&&(i=0),i},relativeCcw:function(e,t,n,a,i,s){return 0==(e=(i-=e)*(a-=t)-(s-=t)*(n-=e))&&(0<(e=i*n+s*a)&&((e=(i-n)*n+(s-a)*a)<0&&(e=0))),e<0?-1:0<e?1:0},animateChanges:function(e,t){mxEffects.animateChanges.apply(this,arguments)},cascadeOpacity:function(e,t,n){mxEffects.cascadeOpacity.apply(this,arguments)},fadeOut:function(e,t,n,a,i,s){mxEffects.fadeOut.apply(this,arguments)},setOpacity:function(e,t){mxUtils.isVml(e)?e.style.filter=100<=t?null:"alpha(opacity="+t/5+")":mxClient.IS_IE&&(void 0===document.documentMode||document.documentMode<9)?e.style.filter=100<=t?null:"alpha(opacity="+t+")":e.style.opacity=t/100},createImage:function(e){var t=null;return mxClient.IS_IE6&&"CSS1Compat"!=document.compatMode?((t=document.createElement(mxClient.VML_PREFIX+":image")).setAttribute("src",e),t.style.borderStyle="none"):((t=document.createElement("img")).setAttribute("src",e),t.setAttribute("border","0")),t},sortCells:function(e,i){i=null==i||i;var s=new mxDictionary;return e.sort(function(e,t){var n=s.get(e);null==n&&(n=mxCellPath.create(e).split(mxCellPath.PATH_SEPARATOR),s.put(e,n));var a=s.get(t);return null==a&&(a=mxCellPath.create(t).split(mxCellPath.PATH_SEPARATOR),s.put(t,a)),0==(n=mxCellPath.compare(n,a))?0:0<n==i?1:-1}),e},getStylename:function(e){return null!=e&&(e=e.split(";")[0]).indexOf("=")<0?e:""},getStylenames:function(e){var t=[];if(null!=e){e=e.split(";");for(var n=0;n<e.length;n++)e[n].indexOf("=")<0&&t.push(e[n])}return t},indexOfStylename:function(e,t){if(null!=e&&null!=t)for(var n=e.split(";"),a=0,i=0;i<n.length;i++){if(n[i]==t)return a;a+=n[i].length+1}return-1},addStylename:function(e,t){return mxUtils.indexOfStylename(e,t)<0&&(null==e?e="":0<e.length&&";"!=e.charAt(e.length-1)&&(e+=";"),e+=t),e},removeStylename:function(e,t){var n=[];if(null!=e)for(var a=e.split(";"),i=0;i<a.length;i++)a[i]!=t&&n.push(a[i]);return n.join(";")},removeAllStylenames:function(e){var t=[];if(null!=e){e=e.split(";");for(var n=0;n<e.length;n++)0<=e[n].indexOf("=")&&t.push(e[n])}return t.join(";")},setCellStyles:function(e,t,n,a){if(null!=t&&0<t.length){e.beginUpdate();try{for(var i=0;i<t.length;i++)if(null!=t[i]){var s=mxUtils.setStyle(e.getStyle(t[i]),n,a);e.setStyle(t[i],s)}}finally{e.endUpdate()}}},setStyle:function(e,t,n){var a=null!=n&&(void 0===n.length||0<n.length);if(null==e||0==e.length)a&&(e=t+"="+n);else{var i=e.indexOf(t+"=");i<0?a&&(a=";"==e.charAt(e.length-1)?"":";",e=e+a+t+"="+n):(t=a?t+"="+n:"",n=e.indexOf(";",i),a||n++,e=e.substring(0,i)+t+(i<n?e.substring(n):""))}return e},setCellStyleFlags:function(e,t,n,a,i){if(null!=t&&0<t.length){e.beginUpdate();try{for(var s=0;s<t.length;s++)if(null!=t[s]){var o=mxUtils.setStyleFlag(e.getStyle(t[s]),n,a,i);e.setStyle(t[s],o)}}finally{e.endUpdate()}}},setStyleFlag:function(e,t,n,a){if(null==e||0==e.length)e=a||null==a?t+"="+n:t+"=0";else{var i=e.indexOf(t+"=");if(i<0)i=";"==e.charAt(e.length-1)?"":";",e=a||null==a?e+i+t+"="+n:e+i+t+"=0";else{var s=e.indexOf(";",i),o="";o=s<0?e.substring(i+t.length+1):e.substring(i+t.length+1,s),o=null==a?parseInt(o)^n:a?parseInt(o)|n:parseInt(o)&~n;e=e.substring(0,i)+t+"="+o+(0<=s?e.substring(s):"")}}return e},getAlignmentAsPoint:function(e,t){var n=0,a=0;return e==mxConstants.ALIGN_CENTER?n=-.5:e==mxConstants.ALIGN_RIGHT&&(n=-1),t==mxConstants.ALIGN_MIDDLE?a=-.5:t==mxConstants.ALIGN_BOTTOM&&(a=-1),new mxPoint(n,a)},getSizeForString:function(e,t,n){t=null!=t?t:mxConstants.DEFAULT_FONTSIZE,n=null!=n?n:mxConstants.DEFAULT_FONTFAMILY;var a=document.createElement("div");return a.style.fontFamily=n,a.style.fontSize=Math.round(t)+"px",a.style.lineHeight=Math.round(t*mxConstants.LINE_HEIGHT)+"px",a.style.position="absolute",a.style.whiteSpace="nowrap",a.style.visibility="hidden",a.style.display=mxClient.IS_QUIRKS?"inline":"inline-block",a.style.zoom="1",a.innerHTML=e,document.body.appendChild(a),e=new mxRectangle(0,0,a.offsetWidth,a.offsetHeight),document.body.removeChild(a),e},getViewXml:function(e,t,n,a,i){a=null!=a?a:0,i=null!=i?i:0,t=null!=t?t:1,null==n&&(n=[e.getModel().getRoot()]);var s=e.getView(),o=null,r=s.isEventsEnabled();s.setEventsEnabled(!1);var l=s.drawPane,d=s.overlayPane;e.dialect==mxConstants.DIALECT_SVG?(s.drawPane=document.createElementNS(mxConstants.NS_SVG,"g"),s.canvas.appendChild(s.drawPane),s.overlayPane=document.createElementNS(mxConstants.NS_SVG,"g")):(s.drawPane=s.drawPane.cloneNode(!1),s.canvas.appendChild(s.drawPane),s.overlayPane=s.overlayPane.cloneNode(!1)),s.canvas.appendChild(s.overlayPane);var c=s.getTranslate();s.translate=new mxPoint(a,i),t=new mxTemporaryCellStates(e.getView(),t,n);try{o=(new mxCodec).encode(e.getView())}finally{t.destroy(),s.translate=c,s.canvas.removeChild(s.drawPane),s.canvas.removeChild(s.overlayPane),s.drawPane=l,s.overlayPane=d,s.setEventsEnabled(r)}return o},getScaleForPageCount:function(e,t,n,a){if(e<1)return 1;a=null!=a?a:0;var i=(n=null!=n?n:mxConstants.PAGE_FORMAT_A4_PORTRAIT).width-2*a;n=n.height-2*a,a=t.getGraphBounds().clone(),t=t.getView().getScale(),a.width/=t,a.height/=t,n=(t=a.width)/a.height/(i/n),a=Math.sqrt(e);var s=Math.sqrt(n);if(n=a*s,a/=s,n<1&&e<a){var o=a/e;a=e,n/=o}for(a<1&&e<n&&(o=n/e,n=e,a/=o),o=Math.ceil(n)*Math.ceil(a),s=0;e<o;){o=Math.floor(n)/n;var r=Math.floor(a)/a;if(1==o&&(o=Math.floor(n-1)/n),1==r&&(r=Math.floor(a-1)/a),n*=o=r<o?o:r,a*=o,o=Math.ceil(n)*Math.ceil(a),10<++s)break}return i*n/t*.99999},show:function(e,t,n,a){if(n=null!=n?n:0,a=null!=a?a:0,null==t?t=window.open().document:t.open(),n=-(i=e.getGraphBounds()).x+n,a=-i.y+a,mxClient.IS_IE){for(var i="<html><head>",s=document.getElementsByTagName("base"),o=0;o<s.length;o++)i+=s[o].outerHTML;for(i+="<style>",o=0;o<document.styleSheets.length;o++)try{i+=document.styleSheets(o).cssText}catch(e){}i+="</style></head>",i+="<body>",i+=e.container.innerHTML,i+="</body>",i+="<html>",t.writeln(i),t.close(),null!=(e=t.body.getElementsByTagName("DIV")[0])&&(e.style.position="absolute",e.style.left=n+"px",e.style.top=a+"px")}else{for(t.writeln("<html"),t.writeln("<head>"),s=document.getElementsByTagName("base"),o=0;o<s.length;o++)t.writeln(mxUtils.getOuterHtml(s[o]));for(s=document.getElementsByTagName("link"),o=0;o<s.length;o++)t.writeln(mxUtils.getOuterHtml(s[o]));for(s=document.getElementsByTagName("style"),o=0;o<s.length;o++)t.writeln(mxUtils.getOuterHtml(s[o]));for(t.writeln("</head>"),t.writeln("</html>"),t.close(),null==t.body&&t.documentElement.appendChild(t.createElement("body")),t.body.style.overflow="auto",e=e.container.firstChild;null!=e;)o=e.cloneNode(!0),t.body.appendChild(o),e=e.nextSibling;null!=(e=t.getElementsByTagName("g")[0])&&(e.setAttribute("transform","translate("+n+","+a+")"),(n=e.ownerSVGElement).setAttribute("width",i.width+Math.max(i.x,0)+3),n.setAttribute("height",i.height+Math.max(i.y,0)+3))}return mxUtils.removeCursors(t.body),t},printScreen:function(e){var t=window.open();mxUtils.show(e,t.document),e=function(){t.focus(),t.print(),t.close()},mxClient.IS_GC?t.setTimeout(e,500):e()},popup:function(e,t){if(t){var n=document.createElement("div");n.style.overflow="scroll",n.style.width="636px",n.style.height="460px";var a=document.createElement("pre");a.innerHTML=mxUtils.htmlEntities(e,!1).replace(/\n/g,"<br>").replace(/ /g,"&nbsp;"),n.appendChild(a),(n=new mxWindow("Popup Window",n,document.body.clientWidth/2-320,(document.body.clientHeight||document.documentElement.clientHeight)/2-240,640,480,!1,!0)).setClosable(!0),n.setVisible(!0)}else mxClient.IS_NS?((n=window.open()).document.writeln("<pre>"+mxUtils.htmlEntities(e)+"</pre"),n.document.close()):((a=(n=window.open()).document.createElement("pre")).innerHTML=mxUtils.htmlEntities(e,!1).replace(/\n/g,"<br>").replace(/ /g,"&nbsp;"),n.document.body.appendChild(a))},alert:function(e){alert(e)},prompt:function(e,t){return prompt(e,t)},confirm:function(e){return confirm(e)},error:function(e,t,n,a){var i=document.createElement("div");i.style.padding="20px";var s=document.createElement("img");s.setAttribute("src",a||mxUtils.errorImage),s.setAttribute("valign","bottom"),s.style.verticalAlign="middle",i.appendChild(s),i.appendChild(document.createTextNode(" ")),i.appendChild(document.createTextNode(" ")),i.appendChild(document.createTextNode(" ")),mxUtils.write(i,e),e=document.body.clientWidth,a=document.body.clientHeight||document.documentElement.clientHeight;var o=new mxWindow(mxResources.get(mxUtils.errorResource)||mxUtils.errorResource,i,(e-t)/2,a/4,t,null,!1,!0);return n&&(mxUtils.br(i),t=document.createElement("p"),n=document.createElement("button"),mxClient.IS_IE?n.style.cssText="float:right":n.setAttribute("style","float:right"),mxEvent.addListener(n,"click",function(e){o.destroy()}),mxUtils.write(n,mxResources.get(mxUtils.closeResource)||mxUtils.closeResource),t.appendChild(n),i.appendChild(t),mxUtils.br(i),o.setClosable(!0)),o.setVisible(!0),o},makeDraggable:function(e,t,n,i,a,s,o,r,l,d){return(e=new mxDragSource(e,n)).dragOffset=new mxPoint(null!=a?a:0,null!=s?s:mxConstants.TOOLTIP_VERTICAL_OFFSET),e.autoscroll=o,e.setGuidesEnabled(!1),null!=l&&(e.highlightDropTargets=l),null!=d&&(e.getDropTarget=d),e.getGraphForEvent=function(e){return"function"==typeof t?t(e):t},null!=i&&(e.createDragElement=function(){return i.cloneNode(!0)},r&&(e.createPreviewElement=function(e){var t=i.cloneNode(!0),n=parseInt(t.style.width),a=parseInt(t.style.height);return t.style.width=Math.round(n*e.view.scale)+"px",t.style.height=Math.round(a*e.view.scale)+"px",t})),e}},mxConstants={DEFAULT_HOTSPOT:.3,MIN_HOTSPOT_SIZE:8,MAX_HOTSPOT_SIZE:0,RENDERING_HINT_EXACT:"exact",RENDERING_HINT_FASTER:"faster",RENDERING_HINT_FASTEST:"fastest",DIALECT_SVG:"svg",DIALECT_VML:"vml",DIALECT_MIXEDHTML:"mixedHtml",DIALECT_PREFERHTML:"preferHtml",DIALECT_STRICTHTML:"strictHtml",NS_SVG:"http://www.w3.org/2000/svg",NS_XHTML:"http://www.w3.org/1999/xhtml",NS_XLINK:"http://www.w3.org/1999/xlink",SHADOWCOLOR:"gray",SHADOW_OFFSET_X:2,SHADOW_OFFSET_Y:3,SHADOW_OPACITY:1,NODETYPE_ELEMENT:1,NODETYPE_ATTRIBUTE:2,NODETYPE_TEXT:3,NODETYPE_CDATA:4,NODETYPE_ENTITY_REFERENCE:5,NODETYPE_ENTITY:6,NODETYPE_PROCESSING_INSTRUCTION:7,NODETYPE_COMMENT:8,NODETYPE_DOCUMENT:9,NODETYPE_DOCUMENTTYPE:10,NODETYPE_DOCUMENT_FRAGMENT:11,NODETYPE_NOTATION:12,TOOLTIP_VERTICAL_OFFSET:16,DEFAULT_VALID_COLOR:"#00FF00",DEFAULT_INVALID_COLOR:"#FF0000",HIGHLIGHT_STROKEWIDTH:3,CURSOR_MOVABLE_VERTEX:"move",CURSOR_MOVABLE_EDGE:"move",CURSOR_LABEL_HANDLE:"default",CURSOR_BEND_HANDLE:"pointer",CURSOR_CONNECT:"pointer",HIGHLIGHT_COLOR:"#00FF00",CONNECT_TARGET_COLOR:"#0000FF",INVALID_CONNECT_TARGET_COLOR:"#FF0000",DROP_TARGET_COLOR:"#0000FF",VALID_COLOR:"#00FF00",INVALID_COLOR:"#FF0000",EDGE_SELECTION_COLOR:"#00FF00",VERTEX_SELECTION_COLOR:"#00FF00",VERTEX_SELECTION_STROKEWIDTH:1,EDGE_SELECTION_STROKEWIDTH:1,VERTEX_SELECTION_DASHED:!0,EDGE_SELECTION_DASHED:!0,GUIDE_COLOR:"#FF0000",GUIDE_STROKEWIDTH:1,OUTLINE_COLOR:"#0099FF",OUTLINE_STROKEWIDTH:mxClient.IS_IE?2:3,HANDLE_SIZE:7,LABEL_HANDLE_SIZE:4,HANDLE_FILLCOLOR:"#00FF00",HANDLE_STROKECOLOR:"black",LABEL_HANDLE_FILLCOLOR:"yellow",CONNECT_HANDLE_FILLCOLOR:"#0000FF",LOCKED_HANDLE_FILLCOLOR:"#FF0000",OUTLINE_HANDLE_FILLCOLOR:"#00FFFF",OUTLINE_HANDLE_STROKECOLOR:"#0033FF",DEFAULT_FONTFAMILY:"Arial,Helvetica",DEFAULT_FONTSIZE:11,LINE_HEIGHT:1.2,DEFAULT_FONTSTYLE:0,DEFAULT_STARTSIZE:40,DEFAULT_MARKERSIZE:6,DEFAULT_IMAGESIZE:24,ENTITY_SEGMENT:30,RECTANGLE_ROUNDING_FACTOR:.15,LINE_ARCSIZE:20,ARROW_SPACING:10,ARROW_WIDTH:30,ARROW_SIZE:30,PAGE_FORMAT_A4_PORTRAIT:new mxRectangle(0,0,826,1169),PAGE_FORMAT_A4_LANDSCAPE:new mxRectangle(0,0,1169,826),PAGE_FORMAT_LETTER_PORTRAIT:new mxRectangle(0,0,850,1100),PAGE_FORMAT_LETTER_LANDSCAPE:new mxRectangle(0,0,1100,850),NONE:"none",STYLE_PERIMETER:"perimeter",STYLE_SOURCE_PORT:"sourcePort",STYLE_TARGET_PORT:"targetPort",STYLE_PORT_CONSTRAINT:"portConstraint",STYLE_OPACITY:"opacity",STYLE_TEXT_OPACITY:"textOpacity",STYLE_OVERFLOW:"overflow",STYLE_ORTHOGONAL:"orthogonal",STYLE_EXIT_X:"exitX",STYLE_EXIT_Y:"exitY",STYLE_EXIT_PERIMETER:"exitPerimeter",STYLE_ENTRY_X:"entryX",STYLE_ENTRY_Y:"entryY",STYLE_ENTRY_PERIMETER:"entryPerimeter",STYLE_WHITE_SPACE:"whiteSpace",STYLE_ROTATION:"rotation",STYLE_FILLCOLOR:"fillColor",STYLE_SWIMLANE_FILLCOLOR:"swimlaneFillColor",STYLE_GRADIENTCOLOR:"gradientColor",STYLE_GRADIENT_DIRECTION:"gradientDirection",STYLE_STROKECOLOR:"strokeColor",STYLE_SEPARATORCOLOR:"separatorColor",STYLE_STROKEWIDTH:"strokeWidth",STYLE_ALIGN:"align",STYLE_VERTICAL_ALIGN:"verticalAlign",STYLE_LABEL_POSITION:"labelPosition",STYLE_VERTICAL_LABEL_POSITION:"verticalLabelPosition",STYLE_IMAGE_ASPECT:"imageAspect",STYLE_IMAGE_ALIGN:"imageAlign",STYLE_IMAGE_VERTICAL_ALIGN:"imageVerticalAlign",STYLE_GLASS:"glass",STYLE_IMAGE:"image",STYLE_IMAGE_WIDTH:"imageWidth",STYLE_IMAGE_HEIGHT:"imageHeight",STYLE_IMAGE_BACKGROUND:"imageBackground",STYLE_IMAGE_BORDER:"imageBorder",STYLE_FLIPH:"flipH",STYLE_FLIPV:"flipV",STYLE_NOLABEL:"noLabel",STYLE_NOEDGESTYLE:"noEdgeStyle",STYLE_LABEL_BACKGROUNDCOLOR:"labelBackgroundColor",STYLE_LABEL_BORDERCOLOR:"labelBorderColor",STYLE_LABEL_PADDING:"labelPadding",STYLE_INDICATOR_SHAPE:"indicatorShape",STYLE_INDICATOR_IMAGE:"indicatorImage",STYLE_INDICATOR_COLOR:"indicatorColor",STYLE_INDICATOR_STROKECOLOR:"indicatorStrokeColor",STYLE_INDICATOR_GRADIENTCOLOR:"indicatorGradientColor",STYLE_INDICATOR_SPACING:"indicatorSpacing",STYLE_INDICATOR_WIDTH:"indicatorWidth",STYLE_INDICATOR_HEIGHT:"indicatorHeight",STYLE_INDICATOR_DIRECTION:"indicatorDirection",STYLE_SHADOW:"shadow",STYLE_SEGMENT:"segment",STYLE_ENDARROW:"endArrow",STYLE_STARTARROW:"startArrow",STYLE_ENDSIZE:"endSize",STYLE_STARTSIZE:"startSize",STYLE_SWIMLANE_LINE:"swimlaneLine",STYLE_ENDFILL:"endFill",STYLE_STARTFILL:"startFill",STYLE_DASHED:"dashed",STYLE_DASH_PATTERN:"dashPattern",STYLE_ROUNDED:"rounded",STYLE_CURVED:"curved",STYLE_ARCSIZE:"arcSize",STYLE_SMOOTH:"smooth",STYLE_SOURCE_PERIMETER_SPACING:"sourcePerimeterSpacing",STYLE_TARGET_PERIMETER_SPACING:"targetPerimeterSpacing",STYLE_PERIMETER_SPACING:"perimeterSpacing",STYLE_SPACING:"spacing",STYLE_SPACING_TOP:"spacingTop",STYLE_SPACING_LEFT:"spacingLeft",STYLE_SPACING_BOTTOM:"spacingBottom",STYLE_SPACING_RIGHT:"spacingRight",STYLE_HORIZONTAL:"horizontal",STYLE_DIRECTION:"direction",STYLE_ELBOW:"elbow",STYLE_FONTCOLOR:"fontColor",STYLE_FONTFAMILY:"fontFamily",STYLE_FONTSIZE:"fontSize",STYLE_FONTSTYLE:"fontStyle",STYLE_AUTOSIZE:"autosize",STYLE_FOLDABLE:"foldable",STYLE_EDITABLE:"editable",STYLE_BENDABLE:"bendable",STYLE_MOVABLE:"movable",STYLE_RESIZABLE:"resizable",STYLE_CLONEABLE:"cloneable",STYLE_DELETABLE:"deletable",STYLE_SHAPE:"shape",STYLE_EDGE:"edgeStyle",STYLE_LOOP:"loopStyle",STYLE_ROUTING_CENTER_X:"routingCenterX",STYLE_ROUTING_CENTER_Y:"routingCenterY",FONT_BOLD:1,FONT_ITALIC:2,FONT_UNDERLINE:4,FONT_SHADOW:8,SHAPE_RECTANGLE:"rectangle",SHAPE_ELLIPSE:"ellipse",SHAPE_DOUBLE_ELLIPSE:"doubleEllipse",SHAPE_RHOMBUS:"rhombus",SHAPE_LINE:"line",SHAPE_IMAGE:"image",SHAPE_ARROW:"arrow",SHAPE_LABEL:"label",SHAPE_CYLINDER:"cylinder",SHAPE_SWIMLANE:"swimlane",SHAPE_CONNECTOR:"connector",SHAPE_ACTOR:"actor",SHAPE_CLOUD:"cloud",SHAPE_TRIANGLE:"triangle",SHAPE_HEXAGON:"hexagon",ARROW_CLASSIC:"classic",ARROW_BLOCK:"block",ARROW_OPEN:"open",ARROW_OVAL:"oval",ARROW_DIAMOND:"diamond",ARROW_DIAMOND_THIN:"diamondThin",ALIGN_LEFT:"left",ALIGN_CENTER:"center",ALIGN_RIGHT:"right",ALIGN_TOP:"top",ALIGN_MIDDLE:"middle",ALIGN_BOTTOM:"bottom",DIRECTION_NORTH:"north",DIRECTION_SOUTH:"south",DIRECTION_EAST:"east",DIRECTION_WEST:"west",DIRECTION_MASK_NONE:0,DIRECTION_MASK_WEST:1,DIRECTION_MASK_NORTH:2,DIRECTION_MASK_SOUTH:4,DIRECTION_MASK_EAST:8,DIRECTION_MASK_ALL:15,ELBOW_VERTICAL:"vertical",ELBOW_HORIZONTAL:"horizontal",EDGESTYLE_ELBOW:"elbowEdgeStyle",EDGESTYLE_ENTITY_RELATION:"entityRelationEdgeStyle",EDGESTYLE_LOOP:"loopEdgeStyle",EDGESTYLE_SIDETOSIDE:"sideToSideEdgeStyle",EDGESTYLE_TOPTOBOTTOM:"topToBottomEdgeStyle",EDGESTYLE_ORTHOGONAL:"orthogonalEdgeStyle",EDGESTYLE_SEGMENT:"segmentEdgeStyle",PERIMETER_ELLIPSE:"ellipsePerimeter",PERIMETER_RECTANGLE:"rectanglePerimeter",PERIMETER_RHOMBUS:"rhombusPerimeter",PERIMETER_TRIANGLE:"trianglePerimeter"};function mxEventObject(e){this.name=e,this.properties=[];for(var t=1;t<arguments.length;t+=2)null!=arguments[t+1]&&(this.properties[arguments[t]]=arguments[t+1])}function mxMouseEvent(e,t){this.evt=e,this.state=t}function mxEventSource(e){this.setEventSource(e)}mxEventObject.prototype.name=null,mxEventObject.prototype.properties=null,mxEventObject.prototype.consumed=!1,mxEventObject.prototype.getName=function(){return this.name},mxEventObject.prototype.getProperties=function(){return this.properties},mxEventObject.prototype.getProperty=function(e){return this.properties[e]},mxEventObject.prototype.isConsumed=function(){return this.consumed},mxEventObject.prototype.consume=function(){this.consumed=!0},mxMouseEvent.prototype.consumed=!1,mxMouseEvent.prototype.evt=null,mxMouseEvent.prototype.graphX=null,mxMouseEvent.prototype.graphY=null,mxMouseEvent.prototype.state=null,mxMouseEvent.prototype.getEvent=function(){return this.evt},mxMouseEvent.prototype.getSource=function(){return mxEvent.getSource(this.evt)},mxMouseEvent.prototype.isSource=function(e){if(null!=e)for(var t=this.getSource();null!=t;){if(t==e.node)return!0;t=t.parentNode}return!1},mxMouseEvent.prototype.getX=function(){return mxEvent.getClientX(this.getEvent())},mxMouseEvent.prototype.getY=function(){return mxEvent.getClientY(this.getEvent())},mxMouseEvent.prototype.getGraphX=function(){return this.graphX},mxMouseEvent.prototype.getGraphY=function(){return this.graphY},mxMouseEvent.prototype.getState=function(){return this.state},mxMouseEvent.prototype.getCell=function(){var e=this.getState();return null!=e?e.cell:null},mxMouseEvent.prototype.isPopupTrigger=function(){return mxEvent.isPopupTrigger(this.getEvent())},mxMouseEvent.prototype.isConsumed=function(){return this.consumed},mxMouseEvent.prototype.consume=function(e){(null==e||e)&&this.evt.preventDefault&&this.evt.preventDefault(),this.evt.returnValue=!1,this.consumed=!0},mxEventSource.prototype.eventListeners=null,mxEventSource.prototype.eventsEnabled=!0,mxEventSource.prototype.eventSource=null,mxEventSource.prototype.isEventsEnabled=function(){return this.eventsEnabled},mxEventSource.prototype.setEventsEnabled=function(e){this.eventsEnabled=e},mxEventSource.prototype.getEventSource=function(){return this.eventSource},mxEventSource.prototype.setEventSource=function(e){this.eventSource=e},mxEventSource.prototype.addListener=function(e,t){null==this.eventListeners&&(this.eventListeners=[]),this.eventListeners.push(e),this.eventListeners.push(t)},mxEventSource.prototype.removeListener=function(e){if(null!=this.eventListeners)for(var t=0;t<this.eventListeners.length;)this.eventListeners[t+1]==e?this.eventListeners.splice(t,2):t+=2},mxEventSource.prototype.fireEvent=function(e,t){if(null!=this.eventListeners&&this.isEventsEnabled()){null==e&&(e=new mxEventObject),null==t&&(t=this.getEventSource()),null==t&&(t=this);for(var n=[t,e],a=0;a<this.eventListeners.length;a+=2){var i=this.eventListeners[a];(null==i||i==e.getName())&&this.eventListeners[a+1].apply(this,n)}}};var mxEvent={objects:[],addListener:function(){var a=function(e,t,n){null==e.mxListenerList&&(e.mxListenerList=[],mxEvent.objects.push(e)),e.mxListenerList.push({name:t,f:n})};return window.addEventListener?function(e,t,n){e.addEventListener(t,n,!1),a(e,t,n)}:function(e,t,n){e.attachEvent("on"+t,n),a(e,t,n)}}(),removeListener:function(){var a=function(e,t,n){if(null!=e.mxListenerList){t=e.mxListenerList.length;for(var a=0;a<t;a++)if(e.mxListenerList[a].f==n){e.mxListenerList.splice(a,1);break}0==e.mxListenerList.length&&(e.mxListenerList=null)}};return window.removeEventListener?function(e,t,n){e.removeEventListener(t,n,!1),a(e,t,n)}:function(e,t,n){e.detachEvent("on"+t,n),a(e,t,n)}}(),removeAllListeners:function(e){var t=e.mxListenerList;if(null!=t)for(;0<t.length;){var n=t[0];mxEvent.removeListener(e,n.name,n.f)}},addGestureListeners:function(e,t,n,a){null!=t&&mxEvent.addListener(e,"mousedown",t),null!=n&&mxEvent.addListener(e,"mousemove",n),null!=a&&mxEvent.addListener(e,"mouseup",a),mxClient.IS_TOUCH&&(null!=t&&mxEvent.addListener(e,"touchstart",t),null!=n&&mxEvent.addListener(e,"touchmove",n),null!=a&&mxEvent.addListener(e,"touchend",a))},removeGestureListeners:function(e,t,n,a){null!=t&&mxEvent.removeListener(e,"mousedown",t),null!=n&&mxEvent.removeListener(e,"mousemove",n),null!=a&&mxEvent.removeListener(e,"mouseup",a),mxClient.IS_TOUCH&&(null!=t&&mxEvent.removeListener(e,"touchstart",t),null!=n&&mxEvent.removeListener(e,"touchmove",n),null!=a&&mxEvent.removeListener(e,"touchend",a))},redirectMouseEvents:function(e,n,t,a,i,s,o){var r=function(e){return"function"==typeof t?t(e):t};mxEvent.addGestureListeners(e,function(e){null!=a?a(e):mxEvent.isConsumed(e)||n.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e,r(e)))},function(e){null!=i?i(e):mxEvent.isConsumed(e)||n.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,r(e)))},function(e){null!=s?s(e):mxEvent.isConsumed(e)||n.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e,r(e)))}),mxEvent.addListener(e,"dblclick",function(e){if(null!=o)o(e);else if(!mxEvent.isConsumed(e)){var t=r(e);n.dblClick(e,null!=t?t.cell:null)}})},release:function(e){if(null!=e&&(mxEvent.removeAllListeners(e),null!=(e=e.childNodes)))for(var t=e.length,n=0;n<t;n+=1)mxEvent.release(e[n])},addMouseWheelListener:function(n){if(null!=n){var e=function(e){null==e&&(e=window.event);var t=0;0!=(t=!mxClient.IS_NS||mxClient.IS_SF||mxClient.IS_GC?e.wheelDelta/120:-e.detail/2)&&n(e,0<t)};mxClient.IS_NS?mxEvent.addListener(window,mxClient.IS_SF||mxClient.IS_GC?"mousewheel":"DOMMouseScroll",e):mxEvent.addListener(document,"mousewheel",e)}},disableContextMenu:mxClient.IS_IE&&(void 0===document.documentMode||document.documentMode<9)?function(e){mxEvent.addListener(e,"contextmenu",function(){return!1})}:function(e){e.setAttribute("oncontextmenu","return false;")},getSource:function(e){return null!=e.srcElement?e.srcElement:e.target},isConsumed:function(e){return null!=e.isConsumed&&e.isConsumed},isLeftMouseButton:function(e){return e.button==(mxClient.IS_IE&&(void 0===document.documentMode||document.documentMode<9)?1:0)},isRightMouseButton:function(e){return 2==e.button},isPopupTrigger:function(e){return mxEvent.isRightMouseButton(e)||mxEvent.isShiftDown(e)&&!mxEvent.isControlDown(e)},isShiftDown:function(e){return null!=e&&e.shiftKey},isAltDown:function(e){return null!=e&&e.altKey},isControlDown:function(e){return null!=e&&e.ctrlKey},isMetaDown:function(e){return null!=e&&e.metaKey},getMainEvent:function(e){return"touchstart"!=e.type&&"touchmove"!=e.type||null==e.touches||null==e.touches[0]?"touchend"==e.type&&null!=e.changedTouches&&null!=e.changedTouches[0]&&(e=e.changedTouches[0]):e=e.touches[0],e},getClientX:function(e){return mxEvent.getMainEvent(e).clientX},getClientY:function(e){return mxEvent.getMainEvent(e).clientY},consume:function(e,t,n){n=null==n||n,(null==t||t)&&(e.preventDefault?(n&&e.stopPropagation(),e.preventDefault()):n&&(e.cancelBubble=!0)),e.isConsumed=!0,e.returnValue=!1},LABEL_HANDLE:-1,ROTATION_HANDLE:-2,MOUSE_DOWN:"mouseDown",MOUSE_MOVE:"mouseMove",MOUSE_UP:"mouseUp",ACTIVATE:"activate",RESIZE_START:"resizeStart",RESIZE:"resize",RESIZE_END:"resizeEnd",MOVE_START:"moveStart",MOVE:"move",MOVE_END:"moveEnd",PAN_START:"panStart",PAN:"pan",PAN_END:"panEnd",MINIMIZE:"minimize",NORMALIZE:"normalize",MAXIMIZE:"maximize",HIDE:"hide",SHOW:"show",CLOSE:"close",DESTROY:"destroy",REFRESH:"refresh",SIZE:"size",SELECT:"select",FIRED:"fired",GET:"get",RECEIVE:"receive",CONNECT:"connect",DISCONNECT:"disconnect",SUSPEND:"suspend",RESUME:"resume",MARK:"mark",SESSION:"session",ROOT:"root",POST:"post",OPEN:"open",SAVE:"save",BEFORE_ADD_VERTEX:"beforeAddVertex",ADD_VERTEX:"addVertex",AFTER_ADD_VERTEX:"afterAddVertex",DONE:"done",EXECUTE:"execute",EXECUTED:"executed",BEGIN_UPDATE:"beginUpdate",START_EDIT:"startEdit",END_UPDATE:"endUpdate",END_EDIT:"endEdit",BEFORE_UNDO:"beforeUndo",UNDO:"undo",REDO:"redo",CHANGE:"change",NOTIFY:"notify",LAYOUT_CELLS:"layoutCells",CLICK:"click",SCALE:"scale",TRANSLATE:"translate",SCALE_AND_TRANSLATE:"scaleAndTranslate",UP:"up",DOWN:"down",ADD:"add",REMOVE:"remove",CLEAR:"clear",ADD_CELLS:"addCells",CELLS_ADDED:"cellsAdded",MOVE_CELLS:"moveCells",CELLS_MOVED:"cellsMoved",RESIZE_CELLS:"resizeCells",CELLS_RESIZED:"cellsResized",TOGGLE_CELLS:"toggleCells",CELLS_TOGGLED:"cellsToggled",ORDER_CELLS:"orderCells",CELLS_ORDERED:"cellsOrdered",REMOVE_CELLS:"removeCells",CELLS_REMOVED:"cellsRemoved",GROUP_CELLS:"groupCells",UNGROUP_CELLS:"ungroupCells",REMOVE_CELLS_FROM_PARENT:"removeCellsFromParent",FOLD_CELLS:"foldCells",CELLS_FOLDED:"cellsFolded",ALIGN_CELLS:"alignCells",LABEL_CHANGED:"labelChanged",CONNECT_CELL:"connectCell",CELL_CONNECTED:"cellConnected",SPLIT_EDGE:"splitEdge",FLIP_EDGE:"flipEdge",START_EDITING:"startEditing",ADD_OVERLAY:"addOverlay",REMOVE_OVERLAY:"removeOverlay",UPDATE_CELL_SIZE:"updateCellSize",ESCAPE:"escape",CLICK:"click",DOUBLE_CLICK:"doubleClick",START:"start",RESET:"reset"};function mxXmlRequest(e,t,n,a,i,s){this.url=e,this.params=t,this.method=n||"POST",this.async=null==a||a,this.username=i,this.password=s}mxXmlRequest.prototype.url=null,mxXmlRequest.prototype.params=null,mxXmlRequest.prototype.method=null,mxXmlRequest.prototype.async=null,mxXmlRequest.prototype.binary=!1,mxXmlRequest.prototype.username=null,mxXmlRequest.prototype.password=null,mxXmlRequest.prototype.request=null,mxXmlRequest.prototype.isBinary=function(){return this.binary},mxXmlRequest.prototype.setBinary=function(e){this.binary=e},mxXmlRequest.prototype.getText=function(){return this.request.responseText},mxXmlRequest.prototype.isReady=function(){return 4==this.request.readyState},mxXmlRequest.prototype.getDocumentElement=function(){var e=this.getXml();return null!=e?e.documentElement:null},mxXmlRequest.prototype.getXml=function(){var e=this.request.responseXML;return(9<=document.documentMode||null==e||null==e.documentElement)&&(e=mxUtils.parseXml(this.request.responseText)),e},mxXmlRequest.prototype.getText=function(){return this.request.responseText},mxXmlRequest.prototype.getStatus=function(){return this.request.status},mxXmlRequest.prototype.create=window.XMLHttpRequest?function(){var e=new XMLHttpRequest;return this.isBinary()&&e.overrideMimeType&&e.overrideMimeType("text/plain; charset=x-user-defined"),e}:"undefined"!=typeof ActiveXObject?function(){return new ActiveXObject("Microsoft.XMLHTTP")}:void 0,mxXmlRequest.prototype.send=function(e,t){this.request=this.create(),null!=this.request&&(null!=e&&(this.request.onreadystatechange=mxUtils.bind(this,function(){this.isReady()&&(e(this),this.onreadystatechaange=null)})),this.request.open(this.method,this.url,this.async,this.username,this.password),this.setRequestHeaders(this.request,this.params),this.request.send(this.params))},mxXmlRequest.prototype.setRequestHeaders=function(e,t){null!=t&&e.setRequestHeader("Content-Type","application/x-www-form-urlencoded")},mxXmlRequest.prototype.simulate=function(e,t){var n=null;(e=e||document)==document&&(n=window.onbeforeunload,window.onbeforeunload=null);var a=e.createElement("form");a.setAttribute("method",this.method),a.setAttribute("action",this.url),null!=t&&a.setAttribute("target",t),a.style.display="none",a.style.visibility="hidden";for(var i=0<this.params.indexOf("&")?this.params.split("&"):this.params.split(),s=0;s<i.length;s++){if(0<(o=i[s].indexOf("="))){var o,r=i[s].substring(0,o),l=i[s].substring(o+1);(o=e.createElement("textarea")).setAttribute("name",r),l=l.replace(/\n/g,"&#xa;"),r=e.createTextNode(l),o.appendChild(r),a.appendChild(o)}}e.body.appendChild(a),a.submit(),e.body.removeChild(a),null!=n&&(window.onbeforeunload=n)};var mxClipboard={STEPSIZE:10,insertCount:1,cells:null,isEmpty:function(){return null==mxClipboard.cells},cut:function(e,t){return t=mxClipboard.copy(e,t),mxClipboard.insertCount=0,mxClipboard.removeCells(e,t),t},removeCells:function(e,t){e.removeCells(t)},copy:function(e,t){t=t||e.getSelectionCells();var n=e.getExportableCells(t);return mxClipboard.insertCount=1,mxClipboard.cells=e.cloneCells(n),n},paste:function(e){if(null!=mxClipboard.cells){var t=e.getImportableCells(mxClipboard.cells),n=mxClipboard.insertCount*mxClipboard.STEPSIZE,a=e.getDefaultParent();t=e.importCells(t,n,n,a);mxClipboard.insertCount++,e.setSelectionCells(t)}}};function mxWindow(e,t,n,a,i,s,o,r,l,d){null!=t&&(o=null==o||o,this.content=t,this.init(n,a,i,s,d),this.installMaximizeHandler(),this.installMinimizeHandler(),this.installCloseHandler(),this.setMinimizable(o),this.setTitle(e),(null==r||r)&&this.installMoveHandler(),null!=l&&null!=l.parentNode?l.parentNode.replaceChild(this.div,l):document.body.appendChild(this.div))}function mxForm(e){this.table=document.createElement("table"),this.table.className=e,this.body=document.createElement("tbody"),this.table.appendChild(this.body)}function mxImage(e,t,n){this.src=e,this.width=t,this.height=n}function mxDivResizer(e,t){if("div"==e.nodeName.toLowerCase()){null==t&&(t=window),this.div=e;var n=mxUtils.getCurrentStyle(e);null!=n&&(this.resizeWidth="auto"==n.width,this.resizeHeight="auto"==n.height),mxEvent.addListener(t,"resize",mxUtils.bind(this,function(e){this.handlingResize||(this.handlingResize=!0,this.resize(),this.handlingResize=!1)})),this.resize()}}function mxDragSource(e,t){this.element=e,this.dropHandler=t,mxEvent.addGestureListeners(e,mxUtils.bind(this,this.mouseDown))}function mxToolbar(e){this.container=e}function mxSession(t,e,n,a){this.model=t,this.urlInit=e,this.urlPoll=n,this.urlNotify=a,null!=t&&(this.codec=new mxCodec,this.codec.lookup=function(e){return t.getCell(e)}),t.addListener(mxEvent.NOTIFY,mxUtils.bind(this,function(e,t){var n=t.getProperty("edit");(null!=n&&this.debug||this.connected&&!this.suspended)&&this.notify("<edit>"+this.encodeChanges(n.changes,n.undone)+"</edit>")}))}function mxUndoableEdit(e,t){this.source=e,this.changes=[],this.significant=null==t||t}function mxUndoManager(e){this.size=null!=e?e:100,this.clear()}mxWindow.prototype=new mxEventSource,mxWindow.prototype.constructor=mxWindow,mxWindow.prototype.closeImage=mxClient.imageBasePath+"/close.gif",mxWindow.prototype.minimizeImage=mxClient.imageBasePath+"/minimize.gif",mxWindow.prototype.normalizeImage=mxClient.imageBasePath+"/normalize.gif",mxWindow.prototype.maximizeImage=mxClient.imageBasePath+"/maximize.gif",mxWindow.prototype.resizeImage=mxClient.imageBasePath+"/resize.gif",mxWindow.prototype.visible=!1,mxWindow.prototype.content=!1,mxWindow.prototype.minimumSize=new mxRectangle(0,0,50,40),mxWindow.prototype.title=!1,mxWindow.prototype.content=!1,mxWindow.prototype.destroyOnClose=!0,mxWindow.prototype.init=function(e,t,n,a,i){i=null!=i?i:"mxWindow",this.div=document.createElement("div"),this.div.className=i,this.div.style.left=e+"px",this.div.style.top=t+"px",this.table=document.createElement("table"),this.table.className=i,null!=n&&(mxClient.IS_IE||(this.div.style.width=n+"px"),this.table.style.width=n+"px"),null!=a&&(mxClient.IS_IE||(this.div.style.height=a+"px"),this.table.style.height=a+"px"),e=document.createElement("tbody"),t=document.createElement("tr"),this.title=document.createElement("td"),this.title.className=i+"Title",t.appendChild(this.title),e.appendChild(t),t=document.createElement("tr"),this.td=document.createElement("td"),this.td.className=i+"Pane",this.contentWrapper=document.createElement("div"),this.contentWrapper.className=i+"Pane",this.contentWrapper.style.width="100%",this.contentWrapper.appendChild(this.content),(mxClient.IS_IE||"DIV"!=this.content.nodeName.toUpperCase())&&(this.contentWrapper.style.height="100%"),this.td.appendChild(this.contentWrapper),t.appendChild(this.td),e.appendChild(t),this.table.appendChild(e),this.div.appendChild(this.table),i=mxUtils.bind(this,function(e){this.activate()}),mxEvent.addListener(this.title,"mousedown",i),mxEvent.addListener(this.table,"mousedown",i),mxClient.IS_TOUCH&&(mxEvent.addListener(this.title,"touchstart",i),mxEvent.addListener(this.table,"touchstart",i)),this.hide()},mxWindow.prototype.setTitle=function(e){for(var t=this.title.firstChild;null!=t;){var n=t.nextSibling;t.nodeType==mxConstants.NODETYPE_TEXT&&t.parentNode.removeChild(t),t=n}mxUtils.write(this.title,e||"")},mxWindow.prototype.setScrollable=function(e){navigator.userAgent.indexOf("Presto/2.5")<0&&(this.contentWrapper.style.overflow=e?"auto":"hidden")},mxWindow.prototype.activate=function(){if(mxWindow.activeWindow!=this){var e=null!=(e=mxUtils.getCurrentStyle(this.getElement()))?e.zIndex:3;if(mxWindow.activeWindow){var t=mxWindow.activeWindow.getElement();null!=t&&null!=t.style&&(t.style.zIndex=e)}t=mxWindow.activeWindow,this.getElement().style.zIndex=parseInt(e)+1,(mxWindow.activeWindow=this).fireEvent(new mxEventObject(mxEvent.ACTIVATE,"previousWindow",t))}},mxWindow.prototype.getElement=function(){return this.div},mxWindow.prototype.fit=function(){mxUtils.fit(this.div)},mxWindow.prototype.isResizable=function(){return null!=this.resize&&"none"!=this.resize.style.display},mxWindow.prototype.setResizable=function(e){e?null==this.resize?(this.resize=document.createElement("img"),this.resize.style.position="absolute",this.resize.style.bottom="2px",this.resize.style.right="2px",this.resize.setAttribute("src",mxClient.imageBasePath+"/resize.gif"),this.resize.style.cursor="nw-resize",mxEvent.addGestureListeners(this.resize,mxUtils.bind(this,function(e){this.activate();var a=mxEvent.getClientX(e),i=mxEvent.getClientY(e),s=this.div.offsetWidth,o=this.div.offsetHeight,t=mxUtils.bind(this,function(e){var t=mxEvent.getClientX(e)-a,n=mxEvent.getClientY(e)-i;this.setSize(s+t,o+n),this.fireEvent(new mxEventObject(mxEvent.RESIZE,"event",e)),mxEvent.consume(e)}),n=mxUtils.bind(this,function(e){mxEvent.removeGestureListeners(document,null,t,n),this.fireEvent(new mxEventObject(mxEvent.RESIZE_END,"event",e)),mxEvent.consume(e)});mxEvent.addGestureListeners(document,null,t,n),this.fireEvent(new mxEventObject(mxEvent.RESIZE_START,"event",e)),mxEvent.consume(e)}),null,null),this.div.appendChild(this.resize)):this.resize.style.display="inline":null!=this.resize&&(this.resize.style.display="none")},mxWindow.prototype.setSize=function(e,t){e=Math.max(this.minimumSize.width,e),t=Math.max(this.minimumSize.height,t),mxClient.IS_IE||(this.div.style.width=e+"px",this.div.style.height=t+"px"),this.table.style.width=e+"px",this.table.style.height=t+"px",mxClient.IS_IE||(this.contentWrapper.style.height=this.div.offsetHeight-this.title.offsetHeight-2+"px")},mxWindow.prototype.setMinimizable=function(e){this.minimize.style.display=e?"":"none"},mxWindow.prototype.getMinimumSize=function(){return new mxRectangle(0,0,0,this.title.offsetHeight)},mxWindow.prototype.installMinimizeHandler=function(){this.minimize=document.createElement("img"),this.minimize.setAttribute("src",this.minimizeImage),this.minimize.setAttribute("align","right"),this.minimize.setAttribute("title","Minimize"),this.minimize.style.cursor="pointer",this.minimize.style.marginRight="1px",this.minimize.style.display="none",this.title.appendChild(this.minimize);var n=!1,a=null,i=null,e=mxUtils.bind(this,function(e){if(this.activate(),n)n=!1,this.minimize.setAttribute("src",this.minimizeImage),this.minimize.setAttribute("title","Minimize"),this.contentWrapper.style.display="",this.maximize.style.display=a,mxClient.IS_IE||(this.div.style.height=i),this.table.style.height=i,null!=this.resize&&(this.resize.style.visibility=""),this.fireEvent(new mxEventObject(mxEvent.NORMALIZE,"event",e));else{n=!0,this.minimize.setAttribute("src",this.normalizeImage),this.minimize.setAttribute("title","Normalize"),this.contentWrapper.style.display="none",a=this.maximize.style.display,this.maximize.style.display="none",i=this.table.style.height;var t=this.getMinimumSize();0<t.height&&(mxClient.IS_IE||(this.div.style.height=t.height+"px"),this.table.style.height=t.height+"px"),0<t.width&&(mxClient.IS_IE||(this.div.style.width=t.width+"px"),this.table.style.width=t.width+"px"),null!=this.resize&&(this.resize.style.visibility="hidden"),this.fireEvent(new mxEventObject(mxEvent.MINIMIZE,"event",e))}mxEvent.consume(e)});mxEvent.addListener(this.minimize,"mousedown",e),mxClient.IS_TOUCH&&mxEvent.addListener(this.minimize,"touchstart",e)},mxWindow.prototype.setMaximizable=function(e){this.maximize.style.display=e?"":"none"},mxWindow.prototype.installMaximizeHandler=function(){this.maximize=document.createElement("img"),this.maximize.setAttribute("src",this.maximizeImage),this.maximize.setAttribute("align","right"),this.maximize.setAttribute("title","Maximize"),this.maximize.style.cursor="default",this.maximize.style.marginLeft="1px",this.maximize.style.cursor="pointer",this.maximize.style.display="none",this.title.appendChild(this.maximize);var n=!1,a=null,i=null,s=null,o=null,e=mxUtils.bind(this,function(e){if(this.activate(),"none"!=this.maximize.style.display){if(n)n=!1,this.maximize.setAttribute("src",this.maximizeImage),this.maximize.setAttribute("title","Maximize"),this.contentWrapper.style.display="",this.minimize.style.visibility="",this.div.style.left=a+"px",this.div.style.top=i+"px",mxClient.IS_IE||(this.div.style.height=s,this.div.style.width=o,"auto"!=(t=mxUtils.getCurrentStyle(this.contentWrapper)).overflow&&null==this.resize)||(this.contentWrapper.style.height=this.div.offsetHeight-this.title.offsetHeight-2+"px"),this.table.style.height=s,this.table.style.width=o,null!=this.resize&&(this.resize.style.visibility=""),this.fireEvent(new mxEventObject(mxEvent.NORMALIZE,"event",e));else{if(n=!0,this.maximize.setAttribute("src",this.normalizeImage),this.maximize.setAttribute("title","Normalize"),this.contentWrapper.style.display="",this.minimize.style.visibility="hidden",a=parseInt(this.div.style.left),i=parseInt(this.div.style.top),s=this.table.style.height,o=this.table.style.width,this.div.style.left="0px",this.div.style.top="0px",mxClient.IS_IE||(this.div.style.height=document.body.clientHeight-2+"px",this.div.style.width=document.body.clientWidth-2+"px"),this.table.style.width=document.body.clientWidth-2+"px",this.table.style.height=document.body.clientHeight-2+"px",null!=this.resize&&(this.resize.style.visibility="hidden"),!mxClient.IS_IE){var t=mxUtils.getCurrentStyle(this.contentWrapper);"auto"!=t.overflow&&null==this.resize||(this.contentWrapper.style.height=this.div.offsetHeight-this.title.offsetHeight-2+"px")}this.fireEvent(new mxEventObject(mxEvent.MAXIMIZE,"event",e))}mxEvent.consume(e)}});mxEvent.addGestureListeners(this.maximize,e),mxEvent.addListener(this.title,"dblclick",e)},mxWindow.prototype.installMoveHandler=function(){this.title.style.cursor="move",mxEvent.addGestureListeners(this.title,mxUtils.bind(this,function(e){var a=mxEvent.getClientX(e),i=mxEvent.getClientY(e),s=this.getX(),o=this.getY(),t=mxUtils.bind(this,function(e){var t=mxEvent.getClientX(e)-a,n=mxEvent.getClientY(e)-i;this.setLocation(s+t,o+n),this.fireEvent(new mxEventObject(mxEvent.MOVE,"event",e)),mxEvent.consume(e)}),n=mxUtils.bind(this,function(e){mxEvent.removeGestureListeners(document,null,t,n),this.fireEvent(new mxEventObject(mxEvent.MOVE_END,"event",e)),mxEvent.consume(e)});mxEvent.addGestureListeners(document,null,t,n),this.fireEvent(new mxEventObject(mxEvent.MOVE_START,"event",e)),mxEvent.consume(e)}))},mxWindow.prototype.setLocation=function(e,t){this.div.style.left=e+"px",this.div.style.top=t+"px"},mxWindow.prototype.getX=function(){return parseInt(this.div.style.left)},mxWindow.prototype.getY=function(){return parseInt(this.div.style.top)},mxWindow.prototype.installCloseHandler=function(){this.closeImg=document.createElement("img"),this.closeImg.setAttribute("src",this.closeImage),this.closeImg.setAttribute("align","right"),this.closeImg.setAttribute("title","Close"),this.closeImg.style.marginLeft="2px",this.closeImg.style.cursor="pointer",this.closeImg.style.display="none",this.title.insertBefore(this.closeImg,this.title.firstChild),mxEvent.addGestureListeners(this.closeImg,mxUtils.bind(this,function(e){this.fireEvent(new mxEventObject(mxEvent.CLOSE,"event",e)),this.destroyOnClose?this.destroy():this.setVisible(!1),mxEvent.consume(e)}))},mxWindow.prototype.setImage=function(e){this.image=document.createElement("img"),this.image.setAttribute("src",e),this.image.setAttribute("align","left"),this.image.style.marginRight="4px",this.image.style.marginLeft="0px",this.image.style.marginTop="-2px",this.title.insertBefore(this.image,this.title.firstChild)},mxWindow.prototype.setClosable=function(e){this.closeImg.style.display=e?"":"none"},mxWindow.prototype.isVisible=function(){return null!=this.div&&"hidden"!=this.div.style.visibility},mxWindow.prototype.setVisible=function(e){null!=this.div&&this.isVisible()!=e&&(e?this.show():this.hide())},mxWindow.prototype.show=function(){this.div.style.visibility="",this.activate();var e=mxUtils.getCurrentStyle(this.contentWrapper);mxClient.IS_IE||"auto"!=e.overflow&&null==this.resize||(this.contentWrapper.style.height=this.div.offsetHeight-this.title.offsetHeight-2+"px"),this.fireEvent(new mxEventObject(mxEvent.SHOW))},mxWindow.prototype.hide=function(){this.div.style.visibility="hidden",this.fireEvent(new mxEventObject(mxEvent.HIDE))},mxWindow.prototype.destroy=function(){this.fireEvent(new mxEventObject(mxEvent.DESTROY)),null!=this.div&&(mxEvent.release(this.div),this.div.parentNode.removeChild(this.div),this.div=null),this.contentWrapper=this.content=this.title=null},mxForm.prototype.table=null,mxForm.prototype.body=!1,mxForm.prototype.getTable=function(){return this.table},mxForm.prototype.addButtons=function(e,t){var n=document.createElement("tr"),a=document.createElement("td");n.appendChild(a);a=document.createElement("td");var i=document.createElement("button");mxUtils.write(i,mxResources.get("ok")||"OK"),a.appendChild(i),mxEvent.addListener(i,"click",function(){e()}),i=document.createElement("button"),mxUtils.write(i,mxResources.get("cancel")||"Cancel"),a.appendChild(i),mxEvent.addListener(i,"click",function(){t()}),n.appendChild(a),this.body.appendChild(n)},mxForm.prototype.addText=function(e,t){var n=document.createElement("input");return n.setAttribute("type","text"),n.value=t,this.addField(e,n)},mxForm.prototype.addCheckbox=function(e,t){var n=document.createElement("input");return n.setAttribute("type","checkbox"),this.addField(e,n),t&&(n.checked=!0),n},mxForm.prototype.addTextarea=function(e,t,n){var a=document.createElement("textarea");return mxClient.IS_NS&&n--,a.setAttribute("rows",n||2),a.value=t,this.addField(e,a)},mxForm.prototype.addCombo=function(e,t,n){var a=document.createElement("select");return null!=n&&a.setAttribute("size",n),t&&a.setAttribute("multiple","true"),this.addField(e,a)},mxForm.prototype.addOption=function(e,t,n,a){var i=document.createElement("option");mxUtils.writeln(i,t),i.setAttribute("value",n),a&&i.setAttribute("selected",a),e.appendChild(i)},mxForm.prototype.addField=function(e,t){var n=document.createElement("tr"),a=document.createElement("td");return mxUtils.write(a,e),n.appendChild(a),(a=document.createElement("td")).appendChild(t),n.appendChild(a),this.body.appendChild(n),t},mxImage.prototype.src=null,mxImage.prototype.width=null,mxImage.prototype.height=null,mxDivResizer.prototype.resizeWidth=!0,mxDivResizer.prototype.resizeHeight=!0,mxDivResizer.prototype.handlingResize=!1,mxDivResizer.prototype.resize=function(){var e=this.getDocumentWidth(),t=this.getDocumentHeight(),n=parseInt(this.div.style.left),a=parseInt(this.div.style.right),i=parseInt(this.div.style.top),s=parseInt(this.div.style.bottom);this.resizeWidth&&!isNaN(n)&&!isNaN(a)&&0<=n&&0<=a&&0<e-a-n&&(this.div.style.width=e-a-n+"px"),this.resizeHeight&&!isNaN(i)&&!isNaN(s)&&0<=i&&0<=s&&0<t-i-s&&(this.div.style.height=t-i-s+"px")},mxDivResizer.prototype.getDocumentWidth=function(){return document.body.clientWidth},mxDivResizer.prototype.getDocumentHeight=function(){return document.body.clientHeight},mxDragSource.prototype.element=null,mxDragSource.prototype.dropHandler=null,mxDragSource.prototype.dragOffset=null,mxDragSource.prototype.dragElement=null,mxDragSource.prototype.previewElement=null,mxDragSource.prototype.enabled=!0,mxDragSource.prototype.currentGraph=null,mxDragSource.prototype.currentDropTarget=null,mxDragSource.prototype.currentPoint=null,mxDragSource.prototype.currentGuide=null,mxDragSource.prototype.currentHighlight=null,mxDragSource.prototype.autoscroll=!0,mxDragSource.prototype.guidesEnabled=!0,mxDragSource.prototype.gridEnabled=!0,mxDragSource.prototype.highlightDropTargets=!0,mxDragSource.prototype.dragElementZIndex=100,mxDragSource.prototype.dragElementOpacity=70,mxDragSource.prototype.isEnabled=function(){return this.enabled},mxDragSource.prototype.setEnabled=function(e){this.enabled=e},mxDragSource.prototype.isGuidesEnabled=function(){return this.guidesEnabled},mxDragSource.prototype.setGuidesEnabled=function(e){this.guidesEnabled=e},mxDragSource.prototype.isGridEnabled=function(){return this.gridEnabled},mxDragSource.prototype.setGridEnabled=function(e){this.gridEnabled=e},mxDragSource.prototype.getGraphForEvent=function(e){return null},mxDragSource.prototype.getDropTarget=function(e,t,n){return e.getCellAt(t,n)},mxDragSource.prototype.createDragElement=function(e){return this.element.cloneNode(!0)},mxDragSource.prototype.createPreviewElement=function(e){return null},mxDragSource.prototype.mouseDown=function(e){this.enabled&&!mxEvent.isConsumed(e)&&null==this.mouseMoveHandler&&(this.startDrag(e),this.mouseMoveHandler=mxUtils.bind(this,this.mouseMove),this.mouseUpHandler=mxUtils.bind(this,this.mouseUp),mxEvent.addGestureListeners(document,null,this.mouseMoveHandler,this.mouseUpHandler),mxEvent.consume(e,!0,!1))},mxDragSource.prototype.startDrag=function(e){this.dragElement=this.createDragElement(e),this.dragElement.style.position="absolute",this.dragElement.style.zIndex=this.dragElementZIndex,mxUtils.setOpacity(this.dragElement,this.dragElementOpacity)},mxDragSource.prototype.stopDrag=function(e){null!=this.dragElement&&(null!=this.dragElement.parentNode&&this.dragElement.parentNode.removeChild(this.dragElement),this.dragElement=null)},mxDragSource.prototype.graphContainsEvent=function(e,t){var n=mxEvent.getClientX(t),a=mxEvent.getClientY(t),i=mxUtils.getOffset(e.container),s=mxUtils.getScrollOrigin();return n>=i.x-s.x&&a>=i.y-s.y&&n<=i.x-s.x+e.container.offsetWidth&&a<=i.y-s.y+e.container.offsetHeight},mxDragSource.prototype.mouseMove=function(e){if(null!=(t=this.getGraphForEvent(e))&&!this.graphContainsEvent(t,e)&&(t=null),t!=this.currentGraph&&(null!=this.currentGraph&&this.dragExit(this.currentGraph),this.currentGraph=t,null!=this.currentGraph&&this.dragEnter(this.currentGraph)),null!=this.currentGraph&&this.dragOver(this.currentGraph,e),null==this.dragElement||null!=this.previewElement&&"visible"==this.previewElement.style.visibility)null!=this.dragElement&&(this.dragElement.style.visibility="hidden");else{var t=mxEvent.getClientX(e),n=mxEvent.getClientY(e);null==this.dragElement.parentNode&&document.body.appendChild(this.dragElement),this.dragElement.style.visibility="visible",null!=this.dragOffset&&(t+=this.dragOffset.x,n+=this.dragOffset.y),t+=document.body.scrollLeft||document.documentElement.scrollLeft,n+=document.body.scrollTop||document.documentElement.scrollTop,this.dragElement.style.left=t+"px",this.dragElement.style.top=n+"px"}mxEvent.consume(e)},mxDragSource.prototype.mouseUp=function(e){if(null!=this.currentGraph){if(null!=this.currentPoint&&(null==this.previewElement||"hidden"!=this.previewElement.style.visibility)){var t=this.currentGraph.view.scale,n=this.currentGraph.view.translate;this.drop(this.currentGraph,e,this.currentDropTarget,this.currentPoint.x/t-n.x,this.currentPoint.y/t-n.y)}this.dragExit(this.currentGraph)}this.stopDrag(e),mxEvent.removeGestureListeners(document,null,this.mouseMoveHandler,this.mouseUpHandler),this.currentGraph=this.mouseUpHandler=this.mouseMoveHandler=null,mxEvent.consume(e)},mxDragSource.prototype.dragEnter=function(e){e.isMouseDown=!0,this.previewElement=this.createPreviewElement(e),this.isGuidesEnabled()&&null!=this.previewElement&&(this.currentGuide=new mxGuide(e,e.graphHandler.getGuideStates())),this.highlightDropTargets&&(this.currentHighlight=new mxCellHighlight(e,mxConstants.DROP_TARGET_COLOR))},mxDragSource.prototype.dragExit=function(e){this.currentPoint=this.currentDropTarget=null,e.isMouseDown=!1,null!=this.previewElement&&(null!=this.previewElement.parentNode&&this.previewElement.parentNode.removeChild(this.previewElement),this.previewElement=null),null!=this.currentGuide&&(this.currentGuide.destroy(),this.currentGuide=null),null!=this.currentHighlight&&(this.currentHighlight.destroy(),this.currentHighlight=null)},mxDragSource.prototype.dragOver=function(e,t){var n=mxUtils.getOffset(e.container),a=mxUtils.getScrollOrigin(e.container),i=mxEvent.getClientX(t)-n.x+a.x;n=mxEvent.getClientY(t)-n.y+a.y;if(e.autoScroll&&(null==this.autoscroll||this.autoscroll)&&e.scrollPointToVisible(i,n,e.autoExtend),null!=this.currentHighlight&&e.isDropEnabled()&&(this.currentDropTarget=this.getDropTarget(e,i,n),a=e.getView().getState(this.currentDropTarget),this.currentHighlight.highlight(a)),null!=this.previewElement){null==this.previewElement.parentNode&&(e.container.appendChild(this.previewElement),this.previewElement.style.zIndex="3",this.previewElement.style.position="absolute");a=this.isGridEnabled()&&e.isGridEnabledEvent(t);var s=!0;if(null!=this.currentGuide&&this.currentGuide.isEnabledForEvent(t))s=new mxRectangle(0,0,s=parseInt(this.previewElement.style.width),o=parseInt(this.previewElement.style.height)),n=new mxPoint(i,n),n=this.currentGuide.move(s,n,a),s=!1,i=n.x,n=n.y;else if(a){a=e.view.scale;var o=e.view.translate,r=e.gridSize/2;i=(e.snap(i/a-o.x-r)+o.x)*a,n=(e.snap(n/a-o.y-r)+o.y)*a}null!=this.currentGuide&&s&&this.currentGuide.hide(),null!=this.previewOffset&&(i+=this.previewOffset.x,n+=this.previewOffset.y),this.previewElement.style.left=Math.round(i)+"px",this.previewElement.style.top=Math.round(n)+"px",this.previewElement.style.visibility="visible"}this.currentPoint=new mxPoint(i,n)},mxDragSource.prototype.drop=function(e,t,n,a,i){this.dropHandler(e,t,n,a,i),e.container.focus()},mxToolbar.prototype=new mxEventSource,mxToolbar.prototype.constructor=mxToolbar,mxToolbar.prototype.container=null,mxToolbar.prototype.enabled=!0,mxToolbar.prototype.noReset=!1,mxToolbar.prototype.updateDefaultMode=!0,mxToolbar.prototype.addItem=function(e,t,n,a,i,s){var o=document.createElement(null!=t?"img":"button"),r=i||(null!=s?"mxToolbarMode":"mxToolbarItem");return o.className=r,o.setAttribute("src",t),null!=e&&(null!=t?o.setAttribute("title",e):mxUtils.write(o,e)),this.container.appendChild(o),null!=n&&(mxEvent.addListener(o,"click",n),mxClient.IS_TOUCH&&mxEvent.addListener(o,"touchend",n)),e=mxUtils.bind(this,function(e){null!=a?o.setAttribute("src",t):o.style.backgroundColor=""}),mxEvent.addGestureListeners(o,mxUtils.bind(this,function(e){if(null!=a?o.setAttribute("src",a):o.style.backgroundColor="gray",null!=s){null==this.menu&&(this.menu=new mxPopupMenu,this.menu.init());var t=this.currentImg;this.menu.isMenuShowing()&&this.menu.hideMenu(),t!=o&&(this.currentImg=o,this.menu.factoryMethod=s,t=new mxPoint(o.offsetLeft,o.offsetTop+o.offsetHeight),this.menu.popup(t.x,t.y,null,e),this.menu.isMenuShowing()&&(o.className=r+"Selected",this.menu.hideMenu=function(){mxPopupMenu.prototype.hideMenu.apply(this),o.className=r,this.currentImg=null}))}}),null,e),mxEvent.addListener(o,"mouseout",e),o},mxToolbar.prototype.addCombo=function(e){var t=document.createElement("div");t.style.display="inline",t.className="mxToolbarComboContainer";var n=document.createElement("select");return n.className=e||"mxToolbarCombo",t.appendChild(n),this.container.appendChild(t),n},mxToolbar.prototype.addActionCombo=function(e,t){var n=document.createElement("select");return n.className=t||"mxToolbarCombo",this.addOption(n,e,null),mxEvent.addListener(n,"change",function(e){var t=n.options[n.selectedIndex];n.selectedIndex=0,null!=t.funct&&t.funct(e)}),this.container.appendChild(n),n},mxToolbar.prototype.addOption=function(e,t,n){var a=document.createElement("option");return mxUtils.writeln(a,t),"function"==typeof n?a.funct=n:a.setAttribute("value",n),e.appendChild(a),a},mxToolbar.prototype.addSwitchMode=function(e,t,n,a,i){var s=document.createElement("img");return s.initialClassName=i||"mxToolbarMode",s.className=s.initialClassName,s.setAttribute("src",t),s.altIcon=a,null!=e&&s.setAttribute("title",e),mxEvent.addListener(s,"click",mxUtils.bind(this,function(e){null!=(e=this.selectedMode.altIcon)?(this.selectedMode.altIcon=this.selectedMode.getAttribute("src"),this.selectedMode.setAttribute("src",e)):this.selectedMode.className=this.selectedMode.initialClassName,this.updateDefaultMode&&(this.defaultMode=s),null!=(e=(this.selectedMode=s).altIcon)?(s.altIcon=s.getAttribute("src"),s.setAttribute("src",e)):s.className=s.initialClassName+"Selected",this.fireEvent(new mxEventObject(mxEvent.SELECT)),n()})),this.container.appendChild(s),null==this.defaultMode&&(this.defaultMode=s,this.selectMode(s),n()),s},mxToolbar.prototype.addMode=function(e,t,n,a,i,s){s=null==s||s;var o=document.createElement(null!=t?"img":"button");return o.initialClassName=i||"mxToolbarMode",o.className=o.initialClassName,o.setAttribute("src",t),o.altIcon=a,null!=e&&o.setAttribute("title",e),this.enabled&&s&&(mxEvent.addListener(o,"click",mxUtils.bind(this,function(e){this.selectMode(o,n),this.noReset=!1})),mxEvent.addListener(o,"dblclick",mxUtils.bind(this,function(e){this.selectMode(o,n),this.noReset=!0})),null==this.defaultMode&&(this.defaultMode=o,this.defaultFunction=n,this.selectMode(o,n))),this.container.appendChild(o),o},mxToolbar.prototype.selectMode=function(e,t){if(this.selectedMode!=e){if(null!=this.selectedMode){var n=this.selectedMode.altIcon;null!=n?(this.selectedMode.altIcon=this.selectedMode.getAttribute("src"),this.selectedMode.setAttribute("src",n)):this.selectedMode.className=this.selectedMode.initialClassName}this.selectedMode=e,null!=(n=this.selectedMode.altIcon)?(this.selectedMode.altIcon=this.selectedMode.getAttribute("src"),this.selectedMode.setAttribute("src",n)):this.selectedMode.className=this.selectedMode.initialClassName+"Selected",this.fireEvent(new mxEventObject(mxEvent.SELECT,"function",t))}},mxToolbar.prototype.resetMode=function(e){(e||!this.noReset)&&this.selectedMode!=this.defaultMode&&this.selectMode(this.defaultMode,this.defaultFunction)},mxToolbar.prototype.addSeparator=function(e){return this.addItem(null,e,null)},mxToolbar.prototype.addBreak=function(){mxUtils.br(this.container)},mxToolbar.prototype.addLine=function(){var e=document.createElement("hr");e.style.marginRight="6px",e.setAttribute("size","1"),this.container.appendChild(e)},mxToolbar.prototype.destroy=function(){mxEvent.release(this.container),this.selectedMode=this.defaultFunction=this.defaultMode=this.container=null,null!=this.menu&&this.menu.destroy()},mxSession.prototype=new mxEventSource,mxSession.prototype.constructor=mxSession,mxSession.prototype.model=null,mxSession.prototype.urlInit=null,mxSession.prototype.urlPoll=null,mxSession.prototype.urlNotify=null,mxSession.prototype.codec=null,mxSession.prototype.linefeed="&#xa;",mxSession.prototype.escapePostData=!0,mxSession.prototype.significantRemoteChanges=!0,mxSession.prototype.sent=0,mxSession.prototype.received=0,mxSession.prototype.debug=!1,mxSession.prototype.connected=!1,mxSession.prototype.suspended=!1,mxSession.prototype.polling=!1,mxSession.prototype.start=function(){this.debug?(this.connected=!0,this.fireEvent(new mxEventObject(mxEvent.CONNECT))):this.connected||this.get(this.urlInit,mxUtils.bind(this,function(e){this.connected=!0,this.fireEvent(new mxEventObject(mxEvent.CONNECT)),this.poll()}))},mxSession.prototype.suspend=function(){this.connected&&!this.suspended&&(this.suspended=!0,this.fireEvent(new mxEventObject(mxEvent.SUSPEND)))},mxSession.prototype.resume=function(e,t,n){this.connected&&this.suspended&&(this.suspended=!1,this.fireEvent(new mxEventObject(mxEvent.RESUME)),this.polling||this.poll())},mxSession.prototype.stop=function(e){this.connected&&(this.connected=!1),this.fireEvent(new mxEventObject(mxEvent.DISCONNECT,"reason",e))},mxSession.prototype.poll=function(){this.connected&&!this.suspended&&null!=this.urlPoll?(this.polling=!0,this.get(this.urlPoll,mxUtils.bind(this,function(){this.poll()}))):this.polling=!1},mxSession.prototype.notify=function(e,t,n){null!=e&&0<e.length&&(null!=this.urlNotify&&(this.debug?(mxLog.show(),mxLog.debug("mxSession.notify: "+this.urlNotify+" xml="+e)):(e="<message><delta>"+e+"</delta></message>",this.escapePostData&&(e=encodeURIComponent(e)),mxUtils.post(this.urlNotify,"xml="+e,t,n))),this.sent+=e.length,this.fireEvent(new mxEventObject(mxEvent.NOTIFY,"url",this.urlNotify,"xml",e)))},mxSession.prototype.get=function(n,a,t){if(void 0!==mxUtils){var i=mxUtils.bind(this,function(e){null!=t?t(e):this.stop(e)});mxUtils.get(n,mxUtils.bind(this,function(e){if(void 0!==mxUtils)if(e.isReady()&&404!=e.getStatus()){if(this.received+=e.getText().length,this.fireEvent(new mxEventObject(mxEvent.GET,"url",n,"request",e)),this.isValidResponse(e)){if(0<e.getText().length){var t=e.getDocumentElement();null==t?i("Invalid response: "+e.getText()):this.receive(t)}null!=a&&a(e)}}else i("Response not ready")}),function(e){i("Transmission error")})}},mxSession.prototype.isValidResponse=function(e){return e.getText().indexOf("<?php")<0},mxSession.prototype.encodeChanges=function(e,t){for(var n="",a=t?-1:1,i=t?e.length-1:0;0<=i&&i<e.length;i+=a){var s=this.codec.encode(e[i]);n=n+mxUtils.getXml(s,this.linefeed)}return n},mxSession.prototype.receive=function(e){if(null!=e&&e.nodeType==mxConstants.NODETYPE_ELEMENT){var t=e.getAttribute("namespace");for(null!=t&&(this.model.prefix=t+"-"),t=e.firstChild;null!=t;){var n=t.nodeName.toLowerCase();"state"==n?this.processState(t):"delta"==n&&this.processDelta(t),t=t.nextSibling}this.fireEvent(new mxEventObject(mxEvent.RECEIVE,"node",e))}},mxSession.prototype.processState=function(e){new mxCodec(e.ownerDocument).decode(e.firstChild,this.model)},mxSession.prototype.processDelta=function(e){for(e=e.firstChild;null!=e;)"edit"==e.nodeName&&this.processEdit(e),e=e.nextSibling},mxSession.prototype.processEdit=function(e){if(0<(e=this.decodeChanges(e)).length){var t=this.createUndoableEdit(e);this.model.fireEvent(new mxEventObject(mxEvent.CHANGE,"edit",t,"changes",e)),this.model.fireEvent(new mxEventObject(mxEvent.UNDO,"edit",t)),this.fireEvent(new mxEventObject(mxEvent.FIRED,"edit",t))}},mxSession.prototype.createUndoableEdit=function(e){var t=new mxUndoableEdit(this.model,this.significantRemoteChanges);return t.changes=e,t.notify=function(){t.source.fireEvent(new mxEventObject(mxEvent.CHANGE,"edit",t,"changes",t.changes)),t.source.fireEvent(new mxEventObject(mxEvent.NOTIFY,"edit",t,"changes",t.changes))},t},mxSession.prototype.decodeChanges=function(e){this.codec.document=e.ownerDocument;var t=[];for(e=e.firstChild;null!=e;){var n=this.decodeChange(e);null!=n&&t.push(n),e=e.nextSibling}return t},mxSession.prototype.decodeChange=function(e){var t=null;return e.nodeType==mxConstants.NODETYPE_ELEMENT&&(null!=(t="mxRootChange"==e.nodeName?new mxCodec(e.ownerDocument).decode(e):this.codec.decode(e))&&(t.model=this.model,t.execute(),"mxChildChange"==e.nodeName&&null==t.parent&&this.cellRemoved(t.child))),t},mxSession.prototype.cellRemoved=function(e,t){this.codec.putObject(e.getId(),e);for(var n=this.model.getChildCount(e),a=0;a<n;a++)this.cellRemoved(this.model.getChildAt(e,a))},mxUndoableEdit.prototype.source=null,mxUndoableEdit.prototype.changes=null,mxUndoableEdit.prototype.significant=null,mxUndoableEdit.prototype.undone=!1,mxUndoableEdit.prototype.redone=!1,mxUndoableEdit.prototype.isEmpty=function(){return 0==this.changes.length},mxUndoableEdit.prototype.isSignificant=function(){return this.significant},mxUndoableEdit.prototype.add=function(e){this.changes.push(e)},mxUndoableEdit.prototype.notify=function(){},mxUndoableEdit.prototype.die=function(){},mxUndoableEdit.prototype.undo=function(){if(!this.undone){this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT));for(var e=this.changes.length-1;0<=e;e--){var t=this.changes[e];null!=t.execute?t.execute():null!=t.undo&&t.undo(),this.source.fireEvent(new mxEventObject(mxEvent.EXECUTED,"change",t))}this.undone=!0,this.redone=!1,this.source.fireEvent(new mxEventObject(mxEvent.END_EDIT))}this.notify()},mxUndoableEdit.prototype.redo=function(){if(!this.redone){this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT));for(var e=this.changes.length,t=0;t<e;t++){var n=this.changes[t];null!=n.execute?n.execute():null!=n.redo&&n.redo(),this.source.fireEvent(new mxEventObject(mxEvent.EXECUTED,"change",n))}this.undone=!1,this.redone=!0,this.source.fireEvent(new mxEventObject(mxEvent.END_EDIT))}this.notify()},mxUndoManager.prototype=new mxEventSource,mxUndoManager.prototype.constructor=mxUndoManager,mxUndoManager.prototype.size=null,mxUndoManager.prototype.history=null,mxUndoManager.prototype.indexOfNextAdd=0,mxUndoManager.prototype.isEmpty=function(){return 0==this.history.length},mxUndoManager.prototype.clear=function(){this.history=[],this.indexOfNextAdd=0,this.fireEvent(new mxEventObject(mxEvent.CLEAR))},mxUndoManager.prototype.canUndo=function(){return 0<this.indexOfNextAdd},mxUndoManager.prototype.undo=function(){for(;0<this.indexOfNextAdd;){var e=this.history[--this.indexOfNextAdd];if(e.undo(),e.isSignificant()){this.fireEvent(new mxEventObject(mxEvent.UNDO,"edit",e));break}}},mxUndoManager.prototype.canRedo=function(){return this.indexOfNextAdd<this.history.length},mxUndoManager.prototype.redo=function(){for(var e=this.history.length;this.indexOfNextAdd<e;){var t=this.history[this.indexOfNextAdd++];if(t.redo(),t.isSignificant()){this.fireEvent(new mxEventObject(mxEvent.REDO,"edit",t));break}}},mxUndoManager.prototype.undoableEditHappened=function(e){this.trim(),0<this.size&&this.size==this.history.length&&this.history.shift(),this.history.push(e),this.indexOfNextAdd=this.history.length,this.fireEvent(new mxEventObject(mxEvent.ADD,"edit",e))},mxUndoManager.prototype.trim=function(){if(this.history.length>this.indexOfNextAdd)for(var e=this.history.splice(this.indexOfNextAdd,this.history.length-this.indexOfNextAdd),t=0;t<e.length;t++)e[t].die()};var mxUrlConverter=function(e){var n=!0,a=null,i=null;return{isEnabled:function(){return n},setEnabled:function(e){n=e},getBaseUrl:function(){return a},setBaseUrl:function(e){a=e},getBaseDomain:function(){return a},setBaseDomain:function(e){a=e},isRelativeUrl:function(e){return"http://"!=e.substring(0,7)&&"https://"!=e.substring(0,8)&&"data:image"!=e.substring(0,10)},convert:function(e){if(n&&this.isRelativeUrl(e)){if(null==a){i=location.protocol+"//"+location.host;var t=(a=i+location.pathname).lastIndexOf("/");0<t&&(a=a.substring(0,t+1))}e="/"==e.charAt(0)?i+e:a+e}return e}}};function mxPanningManager(s){this.thread=null,this.active=!1,this.dy=this.dx=this.t0y=this.t0x=this.tdy=this.tdx=0,this.scrollbars=!1,this.scrollTop=this.scrollLeft=0,this.mouseListener={mouseDown:function(e,t){},mouseMove:function(e,t){},mouseUp:mxUtils.bind(this,function(e,t){this.active&&this.stop()})},s.addMouseListener(this.mouseListener),mxEvent.addListener(document,"mouseup",mxUtils.bind(this,function(){this.active&&this.stop()}));var o=mxUtils.bind(this,function(){return this.scrollbars=mxUtils.hasScrollbars(s.container),this.scrollLeft=s.container.scrollLeft,this.scrollTop=s.container.scrollTop,window.setInterval(mxUtils.bind(this,function(){if(this.tdx-=this.dx,this.tdy-=this.dy,this.scrollbars){var e=-s.container.scrollLeft-Math.ceil(this.dx),t=-s.container.scrollTop-Math.ceil(this.dy);s.panGraph(e,t),s.panDx=this.scrollLeft-s.container.scrollLeft,s.panDy=this.scrollTop-s.container.scrollTop,s.fireEvent(new mxEventObject(mxEvent.PAN))}else s.panGraph(this.getDx(),this.getDy())}),this.delay)});this.isActive=function(){return active},this.getDx=function(){return Math.round(this.tdx)},this.getDy=function(){return Math.round(this.tdy)},this.start=function(){this.t0x=s.view.translate.x,this.t0y=s.view.translate.y,this.active=!0},this.panTo=function(e,t,n,a){this.active||this.start(),this.scrollLeft=s.container.scrollLeft,this.scrollTop=s.container.scrollTop,a=null!=a?a:0;var i=s.container;this.dx=e+(null!=n?n:0)-i.scrollLeft-i.clientWidth,this.dx<0&&Math.abs(this.dx)<this.border?this.dx=this.border+this.dx:this.dx=this.handleMouseOut?Math.max(this.dx,0):0,0==this.dx&&(this.dx=e-i.scrollLeft,this.dx=0<this.dx&&this.dx<this.border?this.dx-this.border:this.handleMouseOut?Math.min(0,this.dx):0),this.dy=t+a-i.scrollTop-i.clientHeight,this.dy<0&&Math.abs(this.dy)<this.border?this.dy=this.border+this.dy:this.dy=this.handleMouseOut?Math.max(this.dy,0):0,0==this.dy&&(this.dy=t-i.scrollTop,this.dy=0<this.dy&&this.dy<this.border?this.dy-this.border:this.handleMouseOut?Math.min(0,this.dy):0),0!=this.dx||0!=this.dy?(this.dx*=this.damper,this.dy*=this.damper,null==this.thread&&(this.thread=o())):null!=this.thread&&(window.clearInterval(this.thread),this.thread=null)},this.stop=function(){if(this.active)if(this.active=!1,null!=this.thread&&(window.clearInterval(this.thread),this.thread=null),this.tdy=this.tdx=0,this.scrollbars)s.panDx=0,s.panDy=0,s.fireEvent(new mxEventObject(mxEvent.PAN));else{var e=s.panDx,t=s.panDy;0==e&&0==t||(s.panGraph(0,0),s.view.setTranslate(this.t0x+e/s.view.scale,this.t0y+t/s.view.scale))}},this.destroy=function(){s.removeMouseListener(this.mouseListener)}}function mxPopupMenu(e){null!=(this.factoryMethod=e)&&this.init()}function mxAutoSaveManager(e){this.changeHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.graphModelChanged(t.getProperty("edit").changes)}),this.setGraph(e)}function mxAnimation(e){this.delay=null!=e?e:20}function mxMorphing(e,t,n,a){mxAnimation.call(this,a),this.graph=e,this.steps=null!=t?t:6,this.ease=null!=n?n:1.5}function mxImageBundle(e){this.images=[],this.alt=null!=e&&e}function mxImageExport(){}function mxAbstractCanvas2D(){this.converter=this.createUrlConverter(),this.reset()}function mxXmlCanvas2D(e){mxAbstractCanvas2D.call(this),this.root=e,this.writeDefaults()}function mxSvgCanvas2D(e,t){mxAbstractCanvas2D.call(this),this.root=e,this.gradients=[],this.defs=null,this.styleEnabled=null!=t&&t;var n=null;if(e.ownerDocument!=document)for(n=e;null!=n&&"svg"!=n.nodeName;)n=n.parentNode;null!=n&&(0<n.getElementsByTagName("defs").length&&(this.defs=n.getElementsByTagName("defs")[0]),null==this.defs&&(this.defs=this.createElement("defs"),null!=n.firstChild?n.insertBefore(this.defs,n.firstChild):n.appendChild(this.defs)),this.styleEnabled&&this.defs.appendChild(this.createStyle()))}mxPanningManager.prototype.damper=1/6,mxPanningManager.prototype.delay=10,mxPanningManager.prototype.handleMouseOut=!0,mxPanningManager.prototype.border=0,mxPopupMenu.prototype=new mxEventSource,mxPopupMenu.prototype.constructor=mxPopupMenu,mxPopupMenu.prototype.submenuImage=mxClient.imageBasePath+"/submenu.gif",mxPopupMenu.prototype.zIndex=10006,mxPopupMenu.prototype.factoryMethod=null,mxPopupMenu.prototype.useLeftButtonForPopup=!1,mxPopupMenu.prototype.enabled=!0,mxPopupMenu.prototype.itemCount=0,mxPopupMenu.prototype.autoExpand=!1,mxPopupMenu.prototype.smartSeparators=!1,mxPopupMenu.prototype.labels=!0,mxPopupMenu.prototype.init=function(){this.table=document.createElement("table"),this.table.className="mxPopupMenu",this.tbody=document.createElement("tbody"),this.table.appendChild(this.tbody),this.div=document.createElement("div"),this.div.className="mxPopupMenu",this.div.style.display="inline",this.div.style.zIndex=this.zIndex,this.div.appendChild(this.table),mxEvent.disableContextMenu(this.div)},mxPopupMenu.prototype.isEnabled=function(){return this.enabled},mxPopupMenu.prototype.setEnabled=function(e){this.enabled=e},mxPopupMenu.prototype.isPopupTrigger=function(e){return e.isPopupTrigger()||this.useLeftButtonForPopup&&mxEvent.isLeftMouseButton(e.getEvent())},mxPopupMenu.prototype.addItem=function(e,t,n,a,i,s){a=a||this,this.itemCount++,a.willAddSeparator&&(a.containsItems&&this.addSeparator(a,!0),a.willAddSeparator=!1),a.containsItems=!0;var o=document.createElement("tr");o.className="mxPopupMenuItem";var r=document.createElement("td");return r.className="mxPopupMenuIcon",null!=t?((i=document.createElement("img")).src=t,r.appendChild(i)):null!=i&&((t=document.createElement("div")).className=i,r.appendChild(t)),o.appendChild(r),this.labels&&((r=document.createElement("td")).className="mxPopupMenuItem"+(null==s||s?"":" disabled"),mxUtils.write(r,e),r.align="left",o.appendChild(r),(e=document.createElement("td")).className="mxPopupMenuItem"+(null==s||s?"":" disabled"),e.style.paddingRight="6px",e.style.textAlign="right",o.appendChild(e),null==a.div&&this.createSubmenu(a)),a.tbody.appendChild(o),(null==s||s)&&(mxEvent.addGestureListeners(o,mxUtils.bind(this,function(e){this.eventReceiver=o,a.activeRow!=o&&a.activeRow!=a&&(null!=a.activeRow&&null!=a.activeRow.div.parentNode&&this.hideSubmenu(a),null!=o.div&&(this.showSubmenu(a,o),a.activeRow=o)),mxEvent.consume(e)}),mxUtils.bind(this,function(e){a.activeRow!=o&&a.activeRow!=a&&(null!=a.activeRow&&null!=a.activeRow.div.parentNode&&this.hideSubmenu(a),this.autoExpand&&null!=o.div&&(this.showSubmenu(a,o),a.activeRow=o)),o.className="mxPopupMenuItemHover"}),mxUtils.bind(this,function(e){this.eventReceiver==o&&(a.activeRow!=o&&this.hideMenu(),null!=n&&n(e)),this.eventReceiver=null,mxEvent.consume(e)})),mxEvent.addListener(o,"mouseout",mxUtils.bind(this,function(e){o.className="mxPopupMenuItem"}))),o},mxPopupMenu.prototype.createSubmenu=function(e){e.table=document.createElement("table"),e.table.className="mxPopupMenu",e.tbody=document.createElement("tbody"),e.table.appendChild(e.tbody),e.div=document.createElement("div"),e.div.className="mxPopupMenu",e.div.style.position="absolute",e.div.style.display="inline",e.div.style.zIndex=this.zIndex,e.div.appendChild(e.table);var t=document.createElement("img");t.setAttribute("src",this.submenuImage),td=e.firstChild.nextSibling.nextSibling,td.appendChild(t)},mxPopupMenu.prototype.showSubmenu=function(e,t){if(null!=t.div){t.div.style.left=e.div.offsetLeft+t.offsetLeft+t.offsetWidth-1+"px",t.div.style.top=e.div.offsetTop+t.offsetTop+"px",document.body.appendChild(t.div);var n=parseInt(t.div.offsetLeft),a=parseInt(t.div.offsetWidth),i=document.body,s=document.documentElement;n+a>(i.scrollLeft||s.scrollLeft)+(i.clientWidth||s.clientWidth)&&(t.div.style.left=e.div.offsetLeft-a+(mxClient.IS_IE?6:-6)+"px"),mxUtils.fit(t.div)}},mxPopupMenu.prototype.addSeparator=function(e,t){if(e=e||this,this.smartSeparators&&!t)e.willAddSeparator=!0;else if(null!=e.tbody){e.willAddSeparator=!1;var n=document.createElement("tr"),a=document.createElement("td");a.className="mxPopupMenuIcon",a.style.padding="0 0 0 0px",n.appendChild(a),(a=document.createElement("td")).style.padding="0 0 0 0px",a.setAttribute("colSpan","2");var i=document.createElement("hr");i.setAttribute("size","1"),a.appendChild(i),n.appendChild(a),e.tbody.appendChild(n)}},mxPopupMenu.prototype.popup=function(e,t,n,a){if(null!=this.div&&null!=this.tbody&&null!=this.factoryMethod){for(this.div.style.left=e+"px",this.div.style.top=t+"px";null!=this.tbody.firstChild;)mxEvent.release(this.tbody.firstChild),this.tbody.removeChild(this.tbody.firstChild);this.itemCount=0,this.factoryMethod(this,n,a),0<this.itemCount&&(this.showMenu(),this.fireEvent(new mxEventObject(mxEvent.SHOW)))}},mxPopupMenu.prototype.isMenuShowing=function(){return null!=this.div&&this.div.parentNode==document.body},mxPopupMenu.prototype.showMenu=function(){9<=document.documentMode&&(this.div.style.filter="none"),document.body.appendChild(this.div),mxUtils.fit(this.div)},mxPopupMenu.prototype.hideMenu=function(){null!=this.div&&(null!=this.div.parentNode&&this.div.parentNode.removeChild(this.div),this.hideSubmenu(this),this.containsItems=!1)},mxPopupMenu.prototype.hideSubmenu=function(e){null!=e.activeRow&&(this.hideSubmenu(e.activeRow),null!=e.activeRow.div.parentNode&&e.activeRow.div.parentNode.removeChild(e.activeRow.div),e.activeRow=null)},mxPopupMenu.prototype.destroy=function(){null!=this.div&&(mxEvent.release(this.div),null!=this.div.parentNode&&this.div.parentNode.removeChild(this.div),this.div=null)},mxAutoSaveManager.prototype=new mxEventSource,mxAutoSaveManager.prototype.constructor=mxAutoSaveManager,mxAutoSaveManager.prototype.graph=null,mxAutoSaveManager.prototype.autoSaveDelay=10,mxAutoSaveManager.prototype.autoSaveThrottle=2,mxAutoSaveManager.prototype.autoSaveThreshold=5,mxAutoSaveManager.prototype.ignoredChanges=0,mxAutoSaveManager.prototype.lastSnapshot=0,mxAutoSaveManager.prototype.enabled=!0,mxAutoSaveManager.prototype.changeHandler=null,mxAutoSaveManager.prototype.isEnabled=function(){return this.enabled},mxAutoSaveManager.prototype.setEnabled=function(e){this.enabled=e},mxAutoSaveManager.prototype.setGraph=function(e){null!=this.graph&&this.graph.getModel().removeListener(this.changeHandler),this.graph=e,null!=this.graph&&this.graph.getModel().addListener(mxEvent.CHANGE,this.changeHandler)},mxAutoSaveManager.prototype.save=function(){},mxAutoSaveManager.prototype.graphModelChanged=function(e){(e=((new Date).getTime()-this.lastSnapshot)/1e3)>this.autoSaveDelay||this.ignoredChanges>=this.autoSaveThreshold&&e>this.autoSaveThrottle?(this.save(),this.reset()):this.ignoredChanges++},mxAutoSaveManager.prototype.reset=function(){this.lastSnapshot=(new Date).getTime(),this.ignoredChanges=0},mxAutoSaveManager.prototype.destroy=function(){this.setGraph(null)},mxAnimation.prototype=new mxEventSource,mxAnimation.prototype.constructor=mxAnimation,mxAnimation.prototype.delay=null,mxAnimation.prototype.thread=null,mxAnimation.prototype.startAnimation=function(){null==this.thread&&(this.thread=window.setInterval(mxUtils.bind(this,this.updateAnimation),this.delay))},mxAnimation.prototype.updateAnimation=function(){this.fireEvent(new mxEventObject(mxEvent.EXECUTE))},mxAnimation.prototype.stopAnimation=function(){null!=this.thread&&(window.clearInterval(this.thread),this.thread=null,this.fireEvent(new mxEventObject(mxEvent.DONE)))},mxMorphing.prototype=new mxAnimation,mxMorphing.prototype.constructor=mxMorphing,mxMorphing.prototype.graph=null,mxMorphing.prototype.steps=null,mxMorphing.prototype.step=0,mxMorphing.prototype.ease=null,mxMorphing.prototype.cells=null,mxMorphing.prototype.updateAnimation=function(){var e=new mxCellStatePreview(this.graph);if(null!=this.cells)for(var t=0;t<this.cells.length;t++)this.animateCell(cells[t],e,!1);else this.animateCell(this.graph.getModel().getRoot(),e,!0);this.show(e),(e.isEmpty()||this.step++>=this.steps)&&this.stopAnimation()},mxMorphing.prototype.show=function(e){e.show()},mxMorphing.prototype.animateCell=function(e,t,n){var a=this.graph.getView().getState(e),i=null;if(null!=a&&(i=this.getDelta(a),this.graph.getModel().isVertex(e)&&(0!=i.x||0!=i.y))){var s=this.graph.view.getTranslate(),o=this.graph.view.getScale();i.x+=s.x*o,i.y+=s.y*o,t.moveState(a,-i.x/this.ease,-i.y/this.ease)}if(n&&!this.stopRecursion(a,i))for(a=this.graph.getModel().getChildCount(e),i=0;i<a;i++)this.animateCell(this.graph.getModel().getChildAt(e,i),t,n)},mxMorphing.prototype.stopRecursion=function(e,t){return null!=t&&(0!=t.x||0!=t.y)},mxMorphing.prototype.getDelta=function(e){var t=this.getOriginForCell(e.cell),n=this.graph.getView().getTranslate(),a=this.graph.getView().getScale();return e=new mxPoint(e.x/a-n.x,e.y/a-n.y),new mxPoint((t.x-e.x)*a,(t.y-e.y)*a)},mxMorphing.prototype.getOriginForCell=function(e){var t=null;return null!=e&&(t=this.getOriginForCell(this.graph.getModel().getParent(e)),null!=(e=this.graph.getCellGeometry(e))&&(t.x+=e.x,t.y+=e.y)),null==t&&(t=new mxPoint(-(t=this.graph.view.getTranslate()).x,-t.y)),t},mxImageBundle.prototype.images=null,mxImageBundle.prototype.images=null,mxImageBundle.prototype.putImage=function(e,t,n){this.images[e]={value:t,fallback:n}},mxImageBundle.prototype.getImage=function(e){var t=null;return null!=e&&(null!=(e=this.images[e])&&(t=this.alt?e.fallback:e.value)),t},mxImageExport.prototype.includeOverlays=!1,mxImageExport.prototype.drawState=function(e,t){null!=e&&(this.visitStatesRecursive(e,t,this.drawCellState),this.includeOverlays&&this.visitStatesRecursive(e,t,this.drawOverlays))},mxImageExport.prototype.visitStatesRecursive=function(e,t,n){if(null!=e){n(e,t);for(var a=e.view.graph,i=a.model.getChildCount(e.cell),s=0;s<i;s++){var o=a.view.getState(a.model.getChildAt(e.cell,s));this.visitStatesRecursive(o,t,n)}}},mxImageExport.prototype.drawCellState=function(e,t){e.shape instanceof mxShape&&(t.save(),e.shape.paint(t),t.restore()),null!=e.text&&(t.save(),e.text.paint(t),t.restore())},mxImageExport.prototype.drawOverlays=function(e,n){null!=e.overlays&&e.overlays.visit(function(e,t){t instanceof mxShape&&t.paint(n)})},mxAbstractCanvas2D.prototype.state=null,mxAbstractCanvas2D.prototype.states=null,mxAbstractCanvas2D.prototype.path=null,mxAbstractCanvas2D.prototype.rotateHtml=!0,mxAbstractCanvas2D.prototype.lastX=0,mxAbstractCanvas2D.prototype.lastY=0,mxAbstractCanvas2D.prototype.moveOp="M",mxAbstractCanvas2D.prototype.lineOp="L",mxAbstractCanvas2D.prototype.quadOp="Q",mxAbstractCanvas2D.prototype.curveOp="C",mxAbstractCanvas2D.prototype.closeOp="Z",mxAbstractCanvas2D.prototype.pointerEvents=!1,mxAbstractCanvas2D.prototype.createUrlConverter=function(){return new mxUrlConverter},mxAbstractCanvas2D.prototype.reset=function(){this.state=this.createState(),this.states=[]},mxAbstractCanvas2D.prototype.createState=function(){return{dx:0,dy:0,scale:1,alpha:1,fillColor:null,fillAlpha:1,gradientColor:null,gradientAlpha:1,gradientDirection:null,strokeColor:null,strokeWidth:1,dashed:!1,dashPattern:"3 3",lineCap:"flat",lineJoin:"miter",miterLimit:10,fontColor:"#000000",fontBackgroundColor:null,fontBorderColor:null,fontSize:mxConstants.DEFAULT_FONTSIZE,fontFamily:mxConstants.DEFAULT_FONTFAMILY,fontStyle:0,shadow:!1,shadowColor:mxConstants.SHADOWCOLOR,shadowAlpha:mxConstants.SHADOW_OPACITY,shadowDx:mxConstants.SHADOW_OFFSET_X,shadowDy:mxConstants.SHADOW_OFFSET_Y,rotation:0,rotationCx:0,rotationCy:0}},mxAbstractCanvas2D.prototype.format=function(e){return Math.round(parseFloat(e))},mxAbstractCanvas2D.prototype.addOp=function(){if(null!=this.path&&(this.path.push(arguments[0]),2<arguments.length))for(var e=this.state,t=2;t<arguments.length;t+=2)this.lastX=arguments[t-1],this.lastY=arguments[t],this.path.push(this.format((this.lastX+e.dx)*e.scale)),this.path.push(this.format((this.lastY+e.dy)*e.scale))},mxAbstractCanvas2D.prototype.rotatePoint=function(e,t,n,a,i){return n*=Math.PI/180,mxUtils.getRotatedPoint(new mxPoint(e,t),Math.cos(n),Math.sin(n),new mxPoint(a,i))},mxAbstractCanvas2D.prototype.save=function(){this.states.push(this.state),this.state=mxUtils.clone(this.state)},mxAbstractCanvas2D.prototype.restore=function(){this.state=this.states.pop()},mxAbstractCanvas2D.prototype.scale=function(e){this.state.scale*=e,this.state.strokeWidth*=e},mxAbstractCanvas2D.prototype.translate=function(e,t){this.state.dx+=e,this.state.dy+=t},mxAbstractCanvas2D.prototype.setAlpha=function(e){this.state.alpha=e},mxAbstractCanvas2D.prototype.setFillColor=function(e){e==mxConstants.NONE&&(e=null),this.state.fillColor=e,this.state.gradientColor=null},mxAbstractCanvas2D.prototype.setGradient=function(e,t,n,a,i,s,o,r,l){(n=this.state).fillColor=e,n.fillAlpha=null!=r?r:1,n.gradientColor=t,n.gradientAlpha=null!=l?l:1,n.gradientDirection=o},mxAbstractCanvas2D.prototype.setStrokeColor=function(e){e==mxConstants.NONE&&(e=null),this.state.strokeColor=e},mxAbstractCanvas2D.prototype.setStrokeWidth=function(e){this.state.strokeWidth=e},mxAbstractCanvas2D.prototype.setDashed=function(e){this.state.dashed=e},mxAbstractCanvas2D.prototype.setDashPattern=function(e){this.state.dashPattern=e},mxAbstractCanvas2D.prototype.setLineCap=function(e){this.state.lineCap=e},mxAbstractCanvas2D.prototype.setLineJoin=function(e){this.state.lineJoin=e},mxAbstractCanvas2D.prototype.setMiterLimit=function(e){this.state.miterLimit=e},mxAbstractCanvas2D.prototype.setFontColor=function(e){e==mxConstants.NONE&&(e=null),this.state.fontColor=e},mxAbstractCanvas2D.prototype.setFontBackgroundColor=function(e){e==mxConstants.NONE&&(e=null),this.state.fontBackgroundColor=e},mxAbstractCanvas2D.prototype.setFontBorderColor=function(e){e==mxConstants.NONE&&(e=null),this.state.fontBorderColor=e},mxAbstractCanvas2D.prototype.setFontSize=function(e){this.state.fontSize=e},mxAbstractCanvas2D.prototype.setFontFamily=function(e){this.state.fontFamily=e},mxAbstractCanvas2D.prototype.setFontStyle=function(e){null==e&&(e=0),this.state.fontStyle=e},mxAbstractCanvas2D.prototype.setShadow=function(e){this.state.shadow=e},mxAbstractCanvas2D.prototype.setShadowColor=function(e){e==mxConstants.NONE&&(e=null),this.state.shadowColor=e},mxAbstractCanvas2D.prototype.setShadowAlpha=function(e){this.state.shadowAlpha=e},mxAbstractCanvas2D.prototype.setShadowOffset=function(e,t){this.state.shadowDx=e,this.state.shadowDy=t},mxAbstractCanvas2D.prototype.begin=function(){this.lastY=this.lastX=0,this.path=[]},mxAbstractCanvas2D.prototype.moveTo=function(e,t){this.addOp(this.moveOp,e,t)},mxAbstractCanvas2D.prototype.lineTo=function(e,t){this.addOp(this.lineOp,e,t)},mxAbstractCanvas2D.prototype.quadTo=function(e,t,n,a){this.addOp(this.quadOp,e,t,n,a)},mxAbstractCanvas2D.prototype.curveTo=function(e,t,n,a,i,s){this.addOp(this.curveOp,e,t,n,a,i,s)},mxAbstractCanvas2D.prototype.arcTo=function(e,t,n,a,i,s,o){for(e=mxUtils.arcToCurves(this.lastX,this.lastY,e,t,n,a,i,s,o),t=0;t<e.length;t+=6)this.curveTo(e[t],e[t+1],e[t+2],e[t+3],e[t+4],e[t+5])},mxAbstractCanvas2D.prototype.close=function(e,t,n,a,i,s){this.addOp(this.closeOp)},mxAbstractCanvas2D.prototype.end=function(){},mxUtils.extend(mxXmlCanvas2D,mxAbstractCanvas2D),mxXmlCanvas2D.prototype.textEnabled=!0,mxXmlCanvas2D.prototype.compressed=!0,mxXmlCanvas2D.prototype.writeDefaults=function(){var e;(e=this.createElement("fontfamily")).setAttribute("family",mxConstants.DEFAULT_FONTFAMILY),this.root.appendChild(e),(e=this.createElement("fontsize")).setAttribute("size",mxConstants.DEFAULT_FONTSIZE),this.root.appendChild(e),(e=this.createElement("shadowcolor")).setAttribute("color",mxConstants.SHADOWCOLOR),this.root.appendChild(e),(e=this.createElement("shadowalpha")).setAttribute("alpha",mxConstants.SHADOW_OPACITY),this.root.appendChild(e),(e=this.createElement("shadowoffset")).setAttribute("dx",mxConstants.SHADOW_OFFSET_X),e.setAttribute("dy",mxConstants.SHADOW_OFFSET_Y),this.root.appendChild(e)},mxXmlCanvas2D.prototype.format=function(e){return parseFloat(parseFloat(e).toFixed(2))},mxXmlCanvas2D.prototype.createElement=function(e){return this.root.ownerDocument.createElement(e)},mxXmlCanvas2D.prototype.save=function(){this.compressed&&mxAbstractCanvas2D.prototype.save.apply(this,arguments),this.root.appendChild(this.createElement("save"))},mxXmlCanvas2D.prototype.restore=function(){this.compressed&&mxAbstractCanvas2D.prototype.restore.apply(this,arguments),this.root.appendChild(this.createElement("restore"))},mxXmlCanvas2D.prototype.scale=function(e){if(this.compressed){if(this.state.scale==e)return;mxAbstractCanvas2D.prototype.setAlpha.apply(this,arguments)}var t=this.createElement("scale");t.setAttribute("scale",e),this.root.appendChild(t)},mxXmlCanvas2D.prototype.translate=function(e,t){var n=this.createElement("translate");n.setAttribute("dx",this.format(e)),n.setAttribute("dy",this.format(t)),this.root.appendChild(n)},mxXmlCanvas2D.prototype.rotate=function(e,t,n,a,i){var s=this.createElement("rotate");(0!=e||t||n)&&(s.setAttribute("theta",this.format(e)),s.setAttribute("flipH",t?"1":"0"),s.setAttribute("flipV",n?"1":"0"),s.setAttribute("cx",this.format(a)),s.setAttribute("cy",this.format(i)),this.root.appendChild(s))},mxXmlCanvas2D.prototype.setAlpha=function(e){if(this.compressed){if(this.state.alpha==e)return;mxAbstractCanvas2D.prototype.setAlpha.apply(this,arguments)}var t=this.createElement("alpha");t.setAttribute("alpha",this.format(e)),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setFillColor=function(e){if(e==mxConstants.NONE&&(e=null),this.compressed){if(this.state.fillColor==e)return;mxAbstractCanvas2D.prototype.setFillColor.apply(this,arguments)}var t=this.createElement("fillcolor");t.setAttribute("color",null!=e?e:mxConstants.NONE),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setGradient=function(e,t,n,a,i,s,o,r,l){if(null!=e&&null!=t){mxAbstractCanvas2D.prototype.setGradient.apply(this,arguments);var d=this.createElement("gradient");d.setAttribute("c1",e),d.setAttribute("c2",t),d.setAttribute("x",this.format(n)),d.setAttribute("y",this.format(a)),d.setAttribute("w",this.format(i)),d.setAttribute("h",this.format(s)),null!=o&&d.setAttribute("direction",o),null!=r&&d.setAttribute("alpha1",r),null!=l&&d.setAttribute("alpha2",l),this.root.appendChild(d)}},mxXmlCanvas2D.prototype.setStrokeColor=function(e){if(e==mxConstants.NONE&&(e=null),this.compressed){if(this.state.strokeColor==e)return;mxAbstractCanvas2D.prototype.setStrokeColor.apply(this,arguments)}var t=this.createElement("strokecolor");t.setAttribute("color",null!=e?e:mxConstants.NONE),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setStrokeWidth=function(e){if(this.compressed){if(this.state.strokeWidth==e)return;mxAbstractCanvas2D.prototype.setStrokeWidth.apply(this,arguments)}var t=this.createElement("strokewidth");t.setAttribute("width",this.format(e)),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setDashed=function(e){if(this.compressed){if(this.state.dashed==e)return;mxAbstractCanvas2D.prototype.setDashed.apply(this,arguments)}var t=this.createElement("dashed");t.setAttribute("dashed",e?"1":"0"),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setDashPattern=function(e){if(this.compressed){if(this.state.dashPattern==e)return;mxAbstractCanvas2D.prototype.setDashPattern.apply(this,arguments)}var t=this.createElement("dashpattern");t.setAttribute("pattern",e),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setLineCap=function(e){if(this.compressed){if(this.state.lineCap==e)return;mxAbstractCanvas2D.prototype.setLineCap.apply(this,arguments)}var t=this.createElement("linecap");t.setAttribute("cap",e),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setLineJoin=function(e){if(this.compressed){if(this.state.lineJoin==e)return;mxAbstractCanvas2D.prototype.setLineJoin.apply(this,arguments)}var t=this.createElement("linejoin");t.setAttribute("join",e),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setMiterLimit=function(e){if(this.compressed){if(this.state.miterLimit==e)return;mxAbstractCanvas2D.prototype.setMiterLimit.apply(this,arguments)}var t=this.createElement("miterlimit");t.setAttribute("limit",e),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setFontColor=function(e){if(this.textEnabled){if(e==mxConstants.NONE&&(e=null),this.compressed){if(this.state.fontColor==e)return;mxAbstractCanvas2D.prototype.setFontColor.apply(this,arguments)}var t=this.createElement("fontcolor");t.setAttribute("color",null!=e?e:mxConstants.NONE),this.root.appendChild(t)}},mxXmlCanvas2D.prototype.setFontBackgroundColor=function(e){if(this.textEnabled){if(e==mxConstants.NONE&&(e=null),this.compressed){if(this.state.fontBackgroundColor==e)return;mxAbstractCanvas2D.prototype.setFontBackgroundColor.apply(this,arguments)}var t=this.createElement("fontbackgroundcolor");t.setAttribute("color",null!=e?e:mxConstants.NONE),this.root.appendChild(t)}},mxXmlCanvas2D.prototype.setFontBorderColor=function(e){if(this.textEnabled){if(e==mxConstants.NONE&&(e=null),this.compressed){if(this.state.fontBorderColor==e)return;mxAbstractCanvas2D.prototype.setFontBorderColor.apply(this,arguments)}var t=this.createElement("fontbordercolor");t.setAttribute("color",null!=e?e:mxConstants.NONE),this.root.appendChild(t)}},mxXmlCanvas2D.prototype.setFontSize=function(e){if(this.textEnabled){if(this.compressed){if(this.state.fontSize==e)return;mxAbstractCanvas2D.prototype.setFontSize.apply(this,arguments)}var t=this.createElement("fontsize");t.setAttribute("size",e),this.root.appendChild(t)}},mxXmlCanvas2D.prototype.setFontFamily=function(e){if(this.textEnabled){if(this.compressed){if(this.state.fontFamily==e)return;mxAbstractCanvas2D.prototype.setFontFamily.apply(this,arguments)}var t=this.createElement("fontfamily");t.setAttribute("family",e),this.root.appendChild(t)}},mxXmlCanvas2D.prototype.setFontStyle=function(e){if(this.textEnabled){if(null==e&&(e=0),this.compressed){if(this.state.fontStyle==e)return;mxAbstractCanvas2D.prototype.setFontStyle.apply(this,arguments)}var t=this.createElement("fontstyle");t.setAttribute("style",e),this.root.appendChild(t)}},mxXmlCanvas2D.prototype.setShadow=function(e){if(this.compressed){if(this.state.shadow==e)return;mxAbstractCanvas2D.prototype.setShadow.apply(this,arguments)}var t=this.createElement("shadow");t.setAttribute("enabled",e?"1":"0"),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setShadowColor=function(e){if(this.compressed){if(e==mxConstants.NONE&&(e=null),this.state.shadowColor==e)return;mxAbstractCanvas2D.prototype.setShadowColor.apply(this,arguments)}var t=this.createElement("shadowcolor");t.setAttribute("color",null!=e?e:mxConstants.NONE),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setShadowAlpha=function(e){if(this.compressed){if(this.state.shadowAlpha==e)return;mxAbstractCanvas2D.prototype.setShadowAlpha.apply(this,arguments)}var t=this.createElement("shadowalpha");t.setAttribute("alpha",e),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setShadowOffset=function(e,t){if(this.compressed){if(this.state.shadowDx==e&&this.state.shadowDy==t)return;mxAbstractCanvas2D.prototype.setShadowOffset.apply(this,arguments)}var n=this.createElement("shadowoffset");n.setAttribute("dx",e),n.setAttribute("dy",t),this.root.appendChild(n)},mxXmlCanvas2D.prototype.rect=function(e,t,n,a){var i=this.createElement("rect");i.setAttribute("x",this.format(e)),i.setAttribute("y",this.format(t)),i.setAttribute("w",this.format(n)),i.setAttribute("h",this.format(a)),this.root.appendChild(i)},mxXmlCanvas2D.prototype.roundrect=function(e,t,n,a,i,s){var o=this.createElement("roundrect");o.setAttribute("x",this.format(e)),o.setAttribute("y",this.format(t)),o.setAttribute("w",this.format(n)),o.setAttribute("h",this.format(a)),o.setAttribute("dx",this.format(i)),o.setAttribute("dy",this.format(s)),this.root.appendChild(o)},mxXmlCanvas2D.prototype.ellipse=function(e,t,n,a){var i=this.createElement("ellipse");i.setAttribute("x",this.format(e)),i.setAttribute("y",this.format(t)),i.setAttribute("w",this.format(n)),i.setAttribute("h",this.format(a)),this.root.appendChild(i)},mxXmlCanvas2D.prototype.image=function(e,t,n,a,i,s,o,r){i=this.converter.convert(i);var l=this.createElement("image");l.setAttribute("x",this.format(e)),l.setAttribute("y",this.format(t)),l.setAttribute("w",this.format(n)),l.setAttribute("h",this.format(a)),l.setAttribute("src",i),l.setAttribute("aspect",s?"1":"0"),l.setAttribute("flipH",o?"1":"0"),l.setAttribute("flipV",r?"1":"0"),this.root.appendChild(l)},mxXmlCanvas2D.prototype.begin=function(){this.root.appendChild(this.createElement("begin")),this.lastY=this.lastX=0},mxXmlCanvas2D.prototype.moveTo=function(e,t){var n=this.createElement("move");n.setAttribute("x",this.format(e)),n.setAttribute("y",this.format(t)),this.root.appendChild(n),this.lastX=e,this.lastY=t},mxXmlCanvas2D.prototype.lineTo=function(e,t){var n=this.createElement("line");n.setAttribute("x",this.format(e)),n.setAttribute("y",this.format(t)),this.root.appendChild(n),this.lastX=e,this.lastY=t},mxXmlCanvas2D.prototype.quadTo=function(e,t,n,a){var i=this.createElement("quad");i.setAttribute("x1",this.format(e)),i.setAttribute("y1",this.format(t)),i.setAttribute("x2",this.format(n)),i.setAttribute("y2",this.format(a)),this.root.appendChild(i),this.lastX=n,this.lastY=a},mxXmlCanvas2D.prototype.curveTo=function(e,t,n,a,i,s){var o=this.createElement("curve");o.setAttribute("x1",this.format(e)),o.setAttribute("y1",this.format(t)),o.setAttribute("x2",this.format(n)),o.setAttribute("y2",this.format(a)),o.setAttribute("x3",this.format(i)),o.setAttribute("y3",this.format(s)),this.root.appendChild(o),this.lastX=i,this.lastY=s},mxXmlCanvas2D.prototype.close=function(){this.root.appendChild(this.createElement("close"))},mxXmlCanvas2D.prototype.text=function(e,t,n,a,i,s,o,r,l,d,c,m){if(this.textEnabled&&null!=i){mxUtils.isNode(i)&&(i=mxUtils.getOuterHtml(i));var u=this.createElement("text");u.setAttribute("x",this.format(e)),u.setAttribute("y",this.format(t)),u.setAttribute("w",this.format(n)),u.setAttribute("h",this.format(a)),u.setAttribute("str",i),null!=s&&u.setAttribute("align",s),null!=o&&u.setAttribute("valign",o),u.setAttribute("wrap",r?"1":"0"),null==l&&(l=""),u.setAttribute("format",l),null!=d&&u.setAttribute("fill",d?"1":"0"),null!=c&&u.setAttribute("clip",c?"1":"0"),null!=m&&u.setAttribute("rotation",m),this.root.appendChild(u)}},mxXmlCanvas2D.prototype.stroke=function(){this.root.appendChild(this.createElement("stroke"))},mxXmlCanvas2D.prototype.fill=function(){this.root.appendChild(this.createElement("fill"))},mxXmlCanvas2D.prototype.fillAndStroke=function(){this.root.appendChild(this.createElement("fillstroke"))},mxUtils.extend(mxSvgCanvas2D,mxAbstractCanvas2D),mxSvgCanvas2D.prototype.node=null,mxSvgCanvas2D.prototype.matchHtmlAlignment=!0,mxSvgCanvas2D.prototype.textEnabled=!0,mxSvgCanvas2D.prototype.foEnabled=!0,mxSvgCanvas2D.prototype.strokeTolerance=0,mxSvgCanvas2D.prototype.refCount=0,mxSvgCanvas2D.prototype.blockImagePointerEvents=!1,mxSvgCanvas2D.prototype.reset=function(){mxAbstractCanvas2D.prototype.reset.apply(this,arguments),this.gradients=[]},mxSvgCanvas2D.prototype.createStyle=function(e){return(e=this.createElement("style")).setAttribute("type","text/css"),mxUtils.write(e,"svg{font-family:"+mxConstants.DEFAULT_FONTFAMILY+";font-size:"+mxConstants.DEFAULT_FONTSIZE+";fill:none;stroke-miterlimit:10}"),e},mxSvgCanvas2D.prototype.createElement=function(e,t){if(null!=this.root.ownerDocument.createElementNS)return this.root.ownerDocument.createElementNS(t||mxConstants.NS_SVG,e);var n=this.root.ownerDocument.createElement(e);return null!=t&&n.setAttribute("xmlns",t),n},mxSvgCanvas2D.prototype.createGradientId=function(e,t,n,a,i){return"#"==e.charAt(0)&&(e=e.substring(1)),"#"==t.charAt(0)&&(t=t.substring(1)),e=e.toLowerCase()+"-"+n,t=t.toLowerCase()+"-"+a,(n=null)==i||i==mxConstants.DIRECTION_SOUTH?n="s":i==mxConstants.DIRECTION_EAST?n="e":(a=e,e=t,t=a,i==mxConstants.DIRECTION_NORTH?n="s":i==mxConstants.DIRECTION_WEST&&(n="e")),"mx-gradient-"+e+"-"+t+"-"+n},mxSvgCanvas2D.prototype.getSvgGradient=function(e,t,n,a,i){var s=this.createGradientId(e,t,n,a,i),o=this.gradients[s];if(null==o){var r=this.root.ownerSVGElement,l=0,d=s+"-"+l;if(null!=r)for(o=r.ownerDocument.getElementById(d);null!=o&&o.ownerSVGElement!=r;)d=s+"-"+l++,o=r.ownerDocument.getElementById(d);else d="id"+ ++this.refCount;null==o&&((o=this.createSvgGradient(e,t,n,a,i)).setAttribute("id",d),null!=this.defs?this.defs.appendChild(o):r.appendChild(o)),this.gradients[s]=o}return o.getAttribute("id")},mxSvgCanvas2D.prototype.createSvgGradient=function(e,t,n,a,i){var s=this.createElement("linearGradient");return s.setAttribute("x1","0%"),s.setAttribute("y1","0%"),s.setAttribute("x2","0%"),s.setAttribute("y2","0%"),null==i||i==mxConstants.DIRECTION_SOUTH?s.setAttribute("y2","100%"):i==mxConstants.DIRECTION_EAST?s.setAttribute("x2","100%"):i==mxConstants.DIRECTION_NORTH?s.setAttribute("y1","100%"):i==mxConstants.DIRECTION_WEST&&s.setAttribute("x1","100%"),n=n<1?";stop-opacity:"+n:"",(i=this.createElement("stop")).setAttribute("offset","0%"),i.setAttribute("style","stop-color:"+e+n),s.appendChild(i),n=a<1?";stop-opacity:"+a:"",(i=this.createElement("stop")).setAttribute("offset","100%"),i.setAttribute("style","stop-color:"+t+n),s.appendChild(i),s},mxSvgCanvas2D.prototype.addNode=function(e,t){var n=this.node,a=this.state;if(null!=n){if("path"==n.nodeName){if(!(null!=this.path&&0<this.path.length))return;n.setAttribute("d",this.path.join(" "))}e&&null!=a.fillColor?this.updateFill():this.styleEnabled||("ellipse"!=n.nodeName||!mxClient.IS_NS||mxClient.IS_GC||mxClient.IS_SF?n.setAttribute("fill","none"):n.setAttribute("fill","transparent"),e=!1),t&&null!=a.strokeColor?this.updateStroke():this.styleEnabled||n.setAttribute("stroke","none"),null!=a.transform&&0<a.transform.length&&n.setAttribute("transform",a.transform),a.shadow&&this.root.appendChild(this.createShadow(n)),0<this.strokeTolerance&&!e&&this.root.appendChild(this.createTolerance(n)),this.pointerEvents&&("path"!=n.nodeName||this.path[this.path.length-1]==this.closeOp)&&n.setAttribute("pointer-events","all"),this.root.appendChild(n)}},mxSvgCanvas2D.prototype.updateFill=function(){var e=this.state;e.alpha<1&&this.node.setAttribute("fill-opacity",e.alpha),null!=e.fillColor&&(null!=e.gradientColor?(e=this.getSvgGradient(e.fillColor,e.gradientColor,e.fillAlpha,e.gradientAlpha,e.gradientDirection),this.node.setAttribute("fill","url(#"+e+")")):this.node.setAttribute("fill",e.fillColor.toLowerCase()))},mxSvgCanvas2D.prototype.updateStroke=function(){var e=this.state;this.node.setAttribute("stroke",e.strokeColor.toLowerCase()),e.alpha<1&&this.node.setAttribute("stroke-opacity",e.alpha);var t=Math.max(1,this.format(e.strokeWidth*e.scale));1!=t&&this.node.setAttribute("stroke-width",t),"path"==this.node.nodeName&&this.updateStrokeAttributes(),e.dashed&&this.node.setAttribute("stroke-dasharray",this.createDashPattern(t))},mxSvgCanvas2D.prototype.updateStrokeAttributes=function(){var e=this.state;if(null!=e.lineJoin&&"miter"!=e.lineJoin&&this.node.setAttribute("stroke-linejoin",e.lineJoin),null!=e.lineCap){var t=e.lineCap;"flat"==t&&(t="butt"),"butt"!=t&&this.node.setAttribute("stroke-linecap",t)}null!=e.miterLimit&&(!this.styleEnabled||10!=e.miterLimit)&&this.node.setAttribute("stroke-miterlimit",e.miterLimit)},mxSvgCanvas2D.prototype.createDashPattern=function(e){var t=this.state.dashPattern.split(" "),n=[];if(0<t.length)for(var a=0;a<t.length;a++)n[a]=Number(t[a])*e;return n.join(" ")},mxSvgCanvas2D.prototype.createTolerance=function(e){e=e.cloneNode(!0);var t=parseFloat(e.getAttribute("stroke-width")||1)+this.strokeTolerance;return e.setAttribute("pointer-events","stroke"),e.setAttribute("visibility","hidden"),e.removeAttribute("stroke-dasharray"),e.setAttribute("stroke-width",t),e.setAttribute("fill","none"),e.setAttribute("stroke",mxClient.IS_OP?"none":"white"),e},mxSvgCanvas2D.prototype.createShadow=function(e){e=e.cloneNode(!0);var t=this.state;return"none"!=e.getAttribute("fill")&&e.setAttribute("fill",t.shadowColor),"none"!=e.getAttribute("stroke")&&e.setAttribute("stroke",t.shadowColor),e.setAttribute("transform","translate("+this.format(t.shadowDx*t.scale)+","+this.format(t.shadowDy*t.scale)+")"+(t.transform||"")),e.setAttribute("opacity",t.shadowAlpha),e},mxSvgCanvas2D.prototype.rotate=function(e,t,n,a,i){if(0!=e||t||n){var s=this.state;if(a+=s.dx,i+=s.dy,a*=s.scale,i*=s.scale,s.transform=s.transform||"",t&&n)e+=180;else if(t^n){var o=t?a:0,r=t?-1:1,l=n?i:0,d=n?-1:1;s.transform+="translate("+this.format(o)+","+this.format(l)+")scale("+this.format(r)+","+this.format(d)+")translate("+this.format(-o)+","+this.format(-l)+")"}(t?!n:n)&&(e*=-1),0!=e&&(s.transform+="rotate("+this.format(e)+","+this.format(a)+","+this.format(i)+")"),s.rotation+=e,s.rotationCx=a,s.rotationCy=i}},mxSvgCanvas2D.prototype.begin=function(){mxAbstractCanvas2D.prototype.begin.apply(this,arguments),this.node=this.createElement("path")},mxSvgCanvas2D.prototype.rect=function(e,t,n,a){var i=this.state,s=this.createElement("rect");s.setAttribute("x",this.format((e+i.dx)*i.scale)),s.setAttribute("y",this.format((t+i.dy)*i.scale)),s.setAttribute("width",this.format(n*i.scale)),s.setAttribute("height",this.format(a*i.scale)),this.node=s},mxSvgCanvas2D.prototype.roundrect=function(e,t,n,a,i,s){this.rect(e,t,n,a),0<i&&this.node.setAttribute("rx",this.format(i*this.state.scale)),0<s&&this.node.setAttribute("ry",this.format(s*this.state.scale))},mxSvgCanvas2D.prototype.ellipse=function(e,t,n,a){var i=this.state,s=this.createElement("ellipse");s.setAttribute("cx",Math.round((e+n/2+i.dx)*i.scale)),s.setAttribute("cy",Math.round((t+a/2+i.dy)*i.scale)),s.setAttribute("rx",n/2*i.scale),s.setAttribute("ry",a/2*i.scale),this.node=s},mxSvgCanvas2D.prototype.image=function(e,t,n,a,i,s,o,r){i=this.converter.convert(i),s=null==s||s,o=null!=o&&o,r=null!=r&&r;var l=this.state;e+=l.dx,t+=l.dy;var d=this.createElement("image");if(d.setAttribute("x",this.format(e*l.scale)),d.setAttribute("y",this.format(t*l.scale)),d.setAttribute("width",this.format(n*l.scale)),d.setAttribute("height",this.format(a*l.scale)),null==d.setAttributeNS?d.setAttribute("xlink:href",i):d.setAttributeNS(mxConstants.NS_XLINK,"href",i),s||d.setAttribute("preserveAspectRatio","none"),l.alpha<1&&d.setAttribute("opacity",l.alpha),i=this.state.transform||"",o||r){var c=s=1,m=0,u=0;o&&(s=-1,m=-n-2*e),r&&(c=-1,u=-a-2*t),i+="scale("+s+","+c+")translate("+m+","+u+")"}0<i.length&&d.setAttribute("transform",i),this.root.appendChild(d),this.blockImagePointerEvents&&(d.setAttribute("style","pointer-events:none"),(d=this.createElement("rect")).setAttribute("visibility","hidden"),d.setAttribute("pointer-events","fill"),d.setAttribute("x",this.format(e*l.scale)),d.setAttribute("y",this.format(t*l.scale)),d.setAttribute("width",this.format(n*l.scale)),d.setAttribute("height",this.format(a*l.scale)),this.root.appendChild(d))},mxSvgCanvas2D.prototype.createDiv=function(e,t,n,a,i){return n=this.state,a="display:inline-block;font-size:"+Math.round(n.fontSize)+"px;font-family:"+n.fontFamily+";color:"+n.fontColor+";line-height:"+Math.round(n.fontSize*mxConstants.LINE_HEIGHT)+"px;"+a,(n.fontStyle&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD&&(a+="font-weight:bold;"),(n.fontStyle&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC&&(a+="font-style:italic;"),(n.fontStyle&mxConstants.FONT_UNDERLINE)==mxConstants.FONT_UNDERLINE&&(a+="font-decoration:underline;"),t==mxConstants.ALIGN_CENTER?a+="text-align:center;":t==mxConstants.ALIGN_RIGHT&&(a+="text-align:right;"),t="",null!=n.fontBackgroundColor&&(t+="background-color:"+n.fontBackgroundColor+";"),null!=n.fontBorderColor&&(t+="border:1px solid "+n.fontBorderColor+";"),mxUtils.isNode(e)||((n=document.createElement("textarea")).innerHTML=e.replace(/&lt;/g,"&amp;lt;").replace(/&gt;/g,"&amp;gt;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),e=n.value,i?a+=t:0<t.length&&(e='<div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;'+t+'">'+e+"</div>")),!mxClient.IS_IE&&document.createElementNS?((i=document.createElementNS("http://www.w3.org/1999/xhtml","div")).setAttribute("style",a),mxUtils.isNode(e)?this.root.ownerDocument!=document?i.appendChild(e.cloneNode(!0)):i.appendChild(e):i.innerHTML=e,i):(mxUtils.isNode(e)&&this.root.ownerDocument!=document&&(e=e.outerHTML),e=e.replace(/<br>/g,"<br />").replace(/<hr>/g,"<hr />"),mxUtils.parseXml('<div xmlns="http://www.w3.org/1999/xhtml" style="'+a+'">'+e+"</div>").documentElement)},mxSvgCanvas2D.prototype.text=function(e,t,n,a,i,s,o,r,l,d,c,m){if(this.textEnabled&&null!=i){m=null!=m?m:0;var u=this.state;if(e+=u.dx,t+=u.dy,this.foEnabled&&"html"==l){var p="vertical-align:top;";if(c?(p+="overflow:hidden;",0<a&&(p+="max-height:"+Math.round(a)+"px;"),0<n&&(p+="width:"+Math.round(n)+"px;")):d&&(p+="width:"+Math.round(n)+"px;",0<a&&(p+="max-height:"+Math.round(a)+"px;")),r?(!c&&0<n&&(p+="width:"+Math.round(n)+"px;"),p+="white-space:normal;"):p+="white-space:nowrap;",r=this.createElement("g"),u.alpha<1&&r.setAttribute("opacity",u.alpha),(l=this.createElement("foreignObject")).setAttribute("pointer-events","all"),null!=(p=this.createDiv(i,s,o,p,d))){r.appendChild(l),this.root.appendChild(r);var g=0;if(mxClient.IS_IE&&!mxClient.IS_SVG){var v=document.createElement("div");v.style.cssText=p.getAttribute("style"),v.style.display=mxClient.IS_QUIRKS?"inline":"inline-block",v.style.visibility="hidden",v.innerHTML=mxUtils.isNode(i)?i.outerHTML:i,document.body.appendChild(v),g=v.offsetWidth,a=mxClient.IS_QUIRKS&&0<a&&c?Math.min(a,v.offsetHeight+2):v.offsetHeight,v.parentNode.removeChild(v),l.appendChild(p)}else this.root.ownerDocument!=document?(p.style.visibility="hidden",document.body.appendChild(p),g=p.offsetWidth,a=p.offsetHeight,l.appendChild(p),p.style.visibility=""):(l.appendChild(p),g=p.offsetWidth,a=p.offsetHeight);n=d?Math.max(n,g):g,u.alpha<1&&r.setAttribute("opacity",u.alpha),d=i=0,s==mxConstants.ALIGN_CENTER?i-=n/2:s==mxConstants.ALIGN_RIGHT&&(i-=n),e+=i,o==mxConstants.ALIGN_MIDDLE?d-=a/2:o==mxConstants.ALIGN_BOTTOM&&(d-=a),t+=d,s=1!=u.scale?"scale("+u.scale+")":"",0!=u.rotation&&this.rotateHtml?(s+="rotate("+u.rotation+","+n/2+","+a/2+")",e=(t=this.rotatePoint((e+n/2)*u.scale,(t+a/2)*u.scale,u.rotation,u.rotationCx,u.rotationCy)).x-n*u.scale/2,t=t.y-a*u.scale/2):(e*=u.scale,t*=u.scale),0!=m&&(s+="rotate("+m+","+-i+","+-d+")"),r.setAttribute("transform","translate("+Math.round(e)+","+Math.round(t)+")"+s),l.setAttribute("width",Math.round(Math.max(1,n))),l.setAttribute("height",Math.round(Math.max(1,a)))}}else this.plainText(e,t,n,a,i,s,o,r,d,c,m)}},mxSvgCanvas2D.prototype.createClip=function(e,t,n,a){for(var i="mx-clip-"+(e=Math.round(e))+"-"+(t=Math.round(t))+"-"+(n=Math.round(n))+"-"+(a=Math.round(a)),s=0,o=i+"-"+s;null!=document.getElementById(o);)o=i+"-"+ ++s;return clip=this.createElement("clipPath"),clip.setAttribute("id",o),(i=this.createElement("rect")).setAttribute("x",e),i.setAttribute("y",t),i.setAttribute("width",n),i.setAttribute("height",a),clip.appendChild(i),clip},mxSvgCanvas2D.prototype.plainText=function(e,t,n,a,i,s,o,r,l,d,c){c=null!=c?c:0,r=this.state;var m=Math.round(r.fontSize),u=this.createElement("g"),p=r.transform||"";if(0!=c&&(p+="rotate("+c+","+this.format(e*r.scale)+","+this.format(t*r.scale)+")"),d&&0<n&&0<a){var g=e;c=t,s==mxConstants.ALIGN_CENTER?g-=n/2:s==mxConstants.ALIGN_RIGHT&&(g-=n),o==mxConstants.ALIGN_MIDDLE?c-=a/2:o==mxConstants.ALIGN_BOTTOM&&(c-=a),c=this.createClip(g*r.scale-2,c*r.scale-2,n*r.scale+4,a*r.scale+4),null!=this.defs?this.defs.appendChild(c):this.root.appendChild(c),u.setAttribute("clip-path","url(#"+c.getAttribute("id")+")")}this.updateFont(u,s),"start"!=(c=s==mxConstants.ALIGN_RIGHT?"end":s==mxConstants.ALIGN_CENTER?"middle":"start")&&u.setAttribute("text-anchor",c),(!this.styleEnabled||m!=mxConstants.DEFAULT_FONTSIZE)&&u.setAttribute("font-size",Math.round(m*r.scale)+"px"),0<p.length&&u.setAttribute("transform",p),r.alpha<1&&u.setAttribute("opacity",r.alpha);p=i.split("\n"),g=Math.round(m*mxConstants.LINE_HEIGHT);var v=m+(p.length-1)*g;for(c=t+m-1,o==mxConstants.ALIGN_MIDDLE?c-=(a=(this.matchHtmlAlignment&&d&&0<a?Math.min(v,a):v)/2)+1:o==mxConstants.ALIGN_BOTTOM&&(c-=(a=this.matchHtmlAlignment&&d&&0<a?Math.min(v,a):v)+2),a=0;a<p.length;a++)0<p[a].length&&0<mxUtils.trim(p[a]).length&&((d=this.createElement("text")).setAttribute("x",this.format(e*r.scale)),d.setAttribute("y",this.format(c*r.scale)),mxUtils.write(d,p[a]),u.appendChild(d)),c+=g;this.root.appendChild(u),this.addTextBackground(u,i,e,t,n,v,s,o,l)},mxSvgCanvas2D.prototype.updateFont=function(e){var t=this.state;e.setAttribute("fill",t.fontColor),(!this.styleEnabled||t.fontFamily!=mxConstants.DEFAULT_FONTFAMILY)&&e.setAttribute("font-family",t.fontFamily),(t.fontStyle&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD&&e.setAttribute("font-weight","bold"),(t.fontStyle&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC&&e.setAttribute("font-style","italic"),(t.fontStyle&mxConstants.FONT_UNDERLINE)==mxConstants.FONT_UNDERLINE&&e.setAttribute("text-decoration","underline")},mxSvgCanvas2D.prototype.addTextBackground=function(e,t,n,a,i,s,o,r,l){var d=this.state;if(null!=d.fontBackgroundColor||null!=d.fontBorderColor){var c=null;null!=(c=l?(o==mxConstants.ALIGN_CENTER?n-=i/2:o==mxConstants.ALIGN_RIGHT&&(n-=i),r==mxConstants.ALIGN_MIDDLE?a-=s/2:r==mxConstants.ALIGN_BOTTOM&&(a-=s),new mxRectangle((n+1)*d.scale,a*d.scale,(i-2)*d.scale,(s+2)*d.scale)):null!=e.getBBox&&this.root.ownerDocument==document?(c=e.getBBox(),t=mxClient.IS_IE&&mxClient.IS_SVG,new mxRectangle(c.x,c.y+(t?0:1),c.width,c.height+(t?1:0))):((c=document.createElement("div")).style.lineHeight=Math.round(d.fontSize*mxConstants.LINE_HEIGHT)+"px",c.style.fontSize=Math.round(d.fontSize)+"px",c.style.fontFamily=d.fontFamily,c.style.whiteSpace="nowrap",c.style.position="absolute",c.style.visibility="hidden",c.style.display=mxClient.IS_QUIRKS?"inline":"inline-block",c.style.zoom="1",(d.fontStyle&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD&&(c.style.fontWeight="bold"),(d.fontStyle&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC&&(c.style.fontStyle="italic"),t=mxUtils.htmlEntities(t,!1),c.innerHTML=t.replace(/\n/g,"<br/>"),document.body.appendChild(c),i=c.offsetWidth,s=c.offsetHeight,c.parentNode.removeChild(c),o==mxConstants.ALIGN_CENTER?n-=i/2:o==mxConstants.ALIGN_RIGHT&&(n-=i),r==mxConstants.ALIGN_MIDDLE?a-=s/2:r==mxConstants.ALIGN_BOTTOM&&(a-=s),new mxRectangle((n+1)*d.scale,(a+2)*d.scale,i*d.scale,(s+1)*d.scale)))&&((t=this.createElement("rect")).setAttribute("fill",d.fontBackgroundColor||"none"),t.setAttribute("stroke",d.fontBorderColor||"none"),t.setAttribute("x",Math.floor(c.x-1)),t.setAttribute("y",Math.floor(c.y-1)),t.setAttribute("width",Math.ceil(c.width+2)),t.setAttribute("height",Math.ceil(c.height)),d=null!=d.fontBorderColor?Math.max(1,this.format(d.scale)):0,t.setAttribute("stroke-width",d),this.root.ownerDocument==document&&1==mxUtils.mod(d,2)&&t.setAttribute("transform","translate(0.5, 0.5)"),e.insertBefore(t,e.firstChild))}},mxSvgCanvas2D.prototype.stroke=function(){this.addNode(!1,!0)},mxSvgCanvas2D.prototype.fill=function(){this.addNode(!0,!1)},mxSvgCanvas2D.prototype.fillAndStroke=function(){this.addNode(!0,!0)};var mxVmlCanvas2D=function(e){mxAbstractCanvas2D.call(this),this.root=e};function mxGuide(e,t){this.graph=e,this.setStates(t)}function mxStencil(e){this.desc=e,this.parseDescription(),this.parseConstraints()}function mxShape(e){this.stencil=e,this.strokewidth=1,this.rotation=0,this.opacity=100,this.flipV=this.flipH=!1}mxUtils.extend(mxVmlCanvas2D,mxAbstractCanvas2D),mxVmlCanvas2D.prototype.node=null,mxVmlCanvas2D.prototype.textEnabled=!0,mxVmlCanvas2D.prototype.moveOp="m",mxVmlCanvas2D.prototype.lineOp="l",mxVmlCanvas2D.prototype.curveOp="c",mxVmlCanvas2D.prototype.closeOp="x",mxVmlCanvas2D.prototype.rotatedHtmlBackground="",mxVmlCanvas2D.prototype.vmlScale=1,mxVmlCanvas2D.prototype.addNode=function(e,t){var n=this.node,a=this.state;if(null!=n){if("shape"==n.nodeName){if(!(null!=this.path&&0<this.path.length))return;n.path=this.path.join(" ")+" e",n.style.width=this.root.style.width,n.style.height=this.root.style.height,n.coordsize=parseInt(n.style.width)+" "+parseInt(n.style.height)}n.strokeweight=this.format(Math.max(1,a.strokeWidth*a.scale/this.vmlScale))+"px",a.shadow&&this.root.appendChild(this.createShadow(n,e&&null!=a.fillColor,t&&null!=a.strokeColor)),t&&null!=a.strokeColor?(n.stroked="true",n.strokecolor=a.strokeColor):n.stroked="false",n.appendChild(this.createStroke()),e&&null!=a.fillColor?n.appendChild(this.createFill()):!this.pointerEvents||"shape"==n.nodeName&&this.path[this.path.length-1]!=this.closeOp?n.filled="false":n.appendChild(this.createTransparentFill()),this.root.appendChild(n)}},mxVmlCanvas2D.prototype.createTransparentFill=function(){var e=document.createElement(mxClient.VML_PREFIX+":fill");return e.src=mxClient.imageBasePath+"/transparent.gif",e.type="tile",e},mxVmlCanvas2D.prototype.createFill=function(){var e=this.state,t=document.createElement(mxClient.VML_PREFIX+":fill");if(t.color=e.fillColor,null!=e.gradientColor){t.type="gradient",t.method="none",t.color2=e.gradientColor;var n=180-e.rotation;n=e.gradientDirection==mxConstants.DIRECTION_WEST?n-(90+("x"==this.root.style.flip?180:0)):e.gradientDirection==mxConstants.DIRECTION_EAST?n+(90+("x"==this.root.style.flip?180:0)):e.gradientDirection==mxConstants.DIRECTION_NORTH?n-(180+("y"==this.root.style.flip?-180:0)):n+("y"==this.root.style.flip?-180:0);"x"!=this.root.style.flip&&"y"!=this.root.style.flip||(n*=-1),t.angle=mxUtils.mod(n,360),t.opacity=100*e.alpha*e.fillAlpha+"%",t.setAttribute(mxClient.OFFICE_PREFIX+":opacity2",100*e.alpha*e.gradientAlpha+"%")}else e.alpha<1&&(t.opacity=100*e.alpha+"%");return t},mxVmlCanvas2D.prototype.createStroke=function(){var e=this.state,t=document.createElement(mxClient.VML_PREFIX+":stroke");return t.endcap=e.lineCap||"flat",t.joinstyle=e.lineJoin||"miter",t.miterlimit=e.miterLimit||"10",e.alpha<1&&(t.opacity=100*e.alpha+"%"),e.dashed&&(t.dashstyle=this.getVmlDashStyle()),t},mxVmlCanvas2D.prototype.getVmlDashStyle=function(){var e="dash";if(null!=this.state.dashPattern){var t=this.state.dashPattern.split(" ");0<t.length&&1==t[0]&&(e="0 2")}return e},mxVmlCanvas2D.prototype.createShadow=function(e,t,n){var a=this.state,i=-a.rotation*(Math.PI/180),s=Math.cos(i),o=(i=Math.sin(i),a.shadowDx*a.scale),r=a.shadowDy*a.scale;"x"==this.root.style.flip?o*=-1:"y"==this.root.style.flip&&(r*=-1);var l=e.cloneNode(!0);return l.style.marginLeft=Math.round(o*s-r*i)+"px",l.style.marginTop=Math.round(o*i+r*s)+"px",8==document.documentMode&&(l.strokeweight=e.strokeweight,"shape"==e.nodeName&&(l.path=this.path.join(" ")+" e",l.style.width=this.root.style.width,l.style.height=this.root.style.height,l.coordsize=parseInt(e.style.width)+" "+parseInt(e.style.height))),n?(l.strokecolor=a.shadowColor,l.appendChild(this.createShadowStroke())):l.stroked="false",t?l.appendChild(this.createShadowFill()):l.filled="false",l},mxVmlCanvas2D.prototype.createShadowFill=function(){var e=document.createElement(mxClient.VML_PREFIX+":fill");return e.color=this.state.shadowColor,e.opacity=100*this.state.alpha*this.state.shadowAlpha+"%",e},mxVmlCanvas2D.prototype.createShadowStroke=function(){var e=this.createStroke();return e.opacity=100*this.state.alpha*this.state.shadowAlpha+"%",e},mxVmlCanvas2D.prototype.rotate=function(e,t,n,a,i){t&&n?e+=180:t?this.root.style.flip="x":n&&(this.root.style.flip="y"),(t?!n:n)&&(e*=-1),this.root.style.rotation=e,this.state.rotation+=e,this.state.rotationCx=a,this.state.rotationCy=i},mxVmlCanvas2D.prototype.begin=function(){mxAbstractCanvas2D.prototype.begin.apply(this,arguments),this.node=document.createElement(mxClient.VML_PREFIX+":shape"),this.node.style.position="absolute"},mxVmlCanvas2D.prototype.quadTo=function(e,t,n,a){var i=this.state,s=(this.lastX+i.dx)*i.scale,o=(this.lastY+i.dy)*i.scale;e=(e+i.dx)*i.scale;o+=2/3*((t=(t+i.dy)*i.scale)-o);var r=(n=(n+i.dx)*i.scale)+2/3*(e-n);t=(a=(a+i.dy)*i.scale)+2/3*(t-a),this.path.push("c "+this.format(s+2/3*(e-s))+" "+this.format(o)+" "+this.format(r)+" "+this.format(t)+" "+this.format(n)+" "+this.format(a)),this.lastX=n/i.scale-i.dx,this.lastY=a/i.scale-i.dy},mxVmlCanvas2D.prototype.createRect=function(e,t,n,a,i){var s=this.state;return(e=document.createElement(e)).style.position="absolute",e.style.left=this.format((t+s.dx)*s.scale)+"px",e.style.top=this.format((n+s.dy)*s.scale)+"px",e.style.width=this.format(a*s.scale)+"px",e.style.height=this.format(i*s.scale)+"px",e},mxVmlCanvas2D.prototype.rect=function(e,t,n,a){this.node=this.createRect(mxClient.VML_PREFIX+":rect",e,t,n,a)},mxVmlCanvas2D.prototype.roundrect=function(e,t,n,a,i,s){this.node=this.createRect(mxClient.VML_PREFIX+":roundrect",e,t,n,a),this.node.setAttribute("arcsize",Math.max(100*i/n,100*s/a)+"%")},mxVmlCanvas2D.prototype.ellipse=function(e,t,n,a){this.node=this.createRect(mxClient.VML_PREFIX+":oval",e,t,n,a)},mxVmlCanvas2D.prototype.image=function(e,t,n,a,i,s,o,r){var l=null;s?((l=this.createRect(mxClient.VML_PREFIX+":rect",e,t,n,a)).stroked="false",(e=document.createElement(mxClient.VML_PREFIX+":fill")).aspect=s?"atmost":"ignore",e.rotate="true",e.type="frame",e.src=i,l.appendChild(e)):(l=this.createRect(mxClient.VML_PREFIX+":image",e,t,n,a)).src=i,o&&r?l.style.rotation="180":o?l.style.flip="x":r&&(l.style.flip="y"),this.state.alpha<1&&(l.style.filter+="alpha(opacity="+100*this.state.alpha+")"),this.root.appendChild(l)},mxVmlCanvas2D.prototype.createDiv=function(e,t,n,a){n=document.createElement("div");var i=this.state,s="";return null!=i.fontBackgroundColor&&(s+="background-color:"+i.fontBackgroundColor+";"),null!=i.fontBorderColor&&(s+="border:1px solid "+i.fontBorderColor+";"),mxUtils.isNode(e)?n.appendChild(e):0<s.length&&!a?((a=document.createElement("div")).style.cssText=s,a.style.display=mxClient.IS_QUIRKS?"inline":"inline-block",a.style.zoom="1",a.innerHTML=e,n.appendChild(a)):(n.style.cssText=s,n.innerHTML=e),(e=n.style).fontSize=Math.round(i.fontSize/this.vmlScale)+"px",e.fontFamily=i.fontFamily,e.color=i.fontColor,e.verticalAlign="top",e.textAlign=t||"left",e.lineHeight=Math.round(i.fontSize*mxConstants.LINE_HEIGHT/this.vmlScale)+"px",(i.fontStyle&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD&&(e.fontWeight="bold"),(i.fontStyle&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC&&(e.fontStyle="italic"),(i.fontStyle&mxConstants.FONT_UNDERLINE)==mxConstants.FONT_UNDERLINE&&(e.fontDecoration="underline"),n},mxVmlCanvas2D.prototype.text=function(e,t,n,a,i,s,o,r,l,d,c,m){if(this.textEnabled&&null!=i){var u=this.state;if("html"==l){null!=u.rotation&&(e=(t=this.rotatePoint(e,t,u.rotation,u.rotationCx,u.rotationCy)).x,t=t.y),8==document.documentMode?(e+=u.dx,t+=u.dy):(e*=u.scale,t*=u.scale),(l=8==document.documentMode?document.createElement(mxClient.VML_PREFIX+":group"):document.createElement("div")).style.position="absolute",l.style.display="inline",l.style.left=this.format(e)+"px",l.style.top=this.format(t)+"px",l.style.zoom=u.scale;var p=document.createElement("div");p.style.position="relative",p.style.display="inline";var g=(v=mxUtils.getAlignmentAsPoint(s,o)).x,v=v.y;if(i=this.createDiv(i,s,o,d),s=document.createElement("div"),r?(!c&&0<n&&(i.style.width=Math.round(n)+"px"),i.style.whiteSpace="normal"):i.style.whiteSpace="nowrap",r=u.rotation+(m||0),this.rotateHtml&&0!=r?(s.style.display="inline",s.style.zoom="1",s.appendChild(i),8==document.documentMode&&"DIV"!=this.root.nodeName?(p.appendChild(s),l.appendChild(p)):l.appendChild(s)):8==document.documentMode?(p.appendChild(i),l.appendChild(p)):(i.style.display="inline",l.appendChild(i)),"DIV"!=this.root.nodeName?((m=document.createElement(mxClient.VML_PREFIX+":rect")).stroked="false",m.filled="false",m.appendChild(l),this.root.appendChild(m)):this.root.appendChild(l),c?(i.style.overflow="hidden",0<n&&(i.style.width=Math.round(n)+"px"),0<a&&8==document.documentMode&&(i.style.maxHeight=Math.round(a)+"px")):d&&(i.style.width=n+"px",0<a&&(i.style.maxHeight=Math.round(a)+"px")),this.rotateHtml&&0!=r){n=r*(Math.PI/180),r=parseFloat(parseFloat(Math.cos(n)).toFixed(8)),m=parseFloat(parseFloat(Math.sin(-n)).toFixed(8)),(n%=2*Math.PI)<0&&(n+=2*Math.PI),(n%=Math.PI)>Math.PI/2&&(n=Math.PI-n),o=Math.cos(n);var h=Math.sin(n);8==document.documentMode&&(i.style.display="inline-block",s.style.display="inline-block",p.style.display="inline-block"),i.style.visibility="hidden",document.body.appendChild(i),n=i.offsetWidth,p=i.offsetHeight,mxClient.IS_QUIRKS&&(c||d)&&a<p&&(p=a,i.style.height=p+"px"),c=((a=p)-a*o+n*-h)/2-m*n*(g+.5)+r*a*(v+.5),d=(n-n*o+a*-h)/2+r*n*(g+.5)+m*a*(v+.5),"group"==l.nodeName&&"DIV"==this.root.nodeName?((g=document.createElement("div")).style.display="inline-block",g.style.position="absolute",g.style.left=this.format(e+(d-n/2)*u.scale)+"px",g.style.top=this.format(t+(c-a/2)*u.scale)+"px",l.parentNode.appendChild(g),g.appendChild(l)):(u=8==document.documentMode?1:u.scale,l.style.left=this.format(e+(d-n/2)*u)+"px",l.style.top=this.format(t+(c-a/2)*u)+"px"),s.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11="+r+", M12="+m+", M21="+-m+", M22="+r+", sizingMethod='auto expand')",s.style.backgroundColor=this.rotatedHtmlBackground,this.state.alpha<1&&(s.style.filter+="alpha(opacity="+100*this.state.alpha+")"),i.style.visibility="",s.appendChild(i)}else 8!=document.documentMode?(i.style.verticalAlign="top",this.state.alpha<1&&(l.style.filter="alpha(opacity="+100*this.state.alpha+")"),u=i.parentNode,i.style.visibility="hidden",document.body.appendChild(i),n=i.offsetWidth,p=i.offsetHeight,mxClient.IS_QUIRKS&&c&&a<p&&(p=a,i.style.height=p+"px"),a=p,i.style.visibility="",u.appendChild(i),l.style.left=this.format(e+n*g*this.state.scale)+"px",l.style.top=this.format(t+a*v*this.state.scale)+"px"):(this.state.alpha<1&&(i.style.filter="alpha(opacity="+100*this.state.alpha+")"),p.style.left=100*g+"%",p.style.top=100*v+"%")}else this.plainText(e,t,n,a,mxUtils.htmlEntities(i,!1),s,o,r,l,d,c,m)}},mxVmlCanvas2D.prototype.plainText=function(e,t,n,a,i,s,o,r,l,d,c,m){e=(e+(a=this.state).dx)*a.scale,t=(t+a.dy)*a.scale,(n=document.createElement(mxClient.VML_PREFIX+":shape")).style.width="1px",n.style.height="1px",n.stroked="false",(d=document.createElement(mxClient.VML_PREFIX+":fill")).color=a.fontColor,d.opacity=100*a.alpha+"%",n.appendChild(d),(d=document.createElement(mxClient.VML_PREFIX+":path")).textpathok="true",d.v="m "+this.format(0)+" "+this.format(0)+" l "+this.format(1)+" "+this.format(0),n.appendChild(d),(d=document.createElement(mxClient.VML_PREFIX+":textpath")).style.cssText="v-text-align:"+s,d.style.align=s,d.style.fontFamily=a.fontFamily,d.string=i,d.on="true",s=Math.round(a.fontSize*a.scale/this.vmlScale),d.style.fontSize=s+"px",(a.fontStyle&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD&&(d.style.fontWeight="bold"),(a.fontStyle&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC&&(d.style.fontStyle="italic"),(a.fontStyle&mxConstants.FONT_UNDERLINE)==mxConstants.FONT_UNDERLINE&&(d.style.textDecoration="underline"),a=s+((i=i.split("\n")).length-1)*s*mxConstants.LINE_HEIGHT,s=i=0,o==mxConstants.ALIGN_BOTTOM?s=-a/2:o!=mxConstants.ALIGN_MIDDLE&&(s=a/2),null!=m&&(o=(n.style.rotation=m)*(Math.PI/180),i=Math.sin(o)*s,s*=Math.cos(o)),n.appendChild(d),n.style.left=this.format(e-i)+"px",n.style.top=this.format(t+s)+"px",this.root.appendChild(n)},mxVmlCanvas2D.prototype.stroke=function(){this.addNode(!1,!0)},mxVmlCanvas2D.prototype.fill=function(){this.addNode(!0,!1)},mxVmlCanvas2D.prototype.fillAndStroke=function(){this.addNode(!0,!0)},mxGuide.prototype.graph=null,mxGuide.prototype.states=null,mxGuide.prototype.horizontal=!0,mxGuide.prototype.vertical=!0,mxGuide.prototype.guideX=null,mxGuide.prototype.guideY=null,mxGuide.prototype.setStates=function(e){this.states=e},mxGuide.prototype.isEnabledForEvent=function(e){return!0},mxGuide.prototype.getGuideTolerance=function(){return this.graph.gridSize*this.graph.view.scale/2},mxGuide.prototype.createGuideShape=function(e){return(e=new mxPolyline([],mxConstants.GUIDE_COLOR,mxConstants.GUIDE_STROKEWIDTH)).isDashed=!0,e},mxGuide.prototype.move=function(a,e,t){if(null!=this.states&&(this.horizontal||this.vertical)&&null!=a&&null!=e){var n=this.graph.getView().translate,i=this.graph.getView().scale,s=e.x,o=e.y,r=!1,l=!1,d=f=this.getGuideTolerance(),c=f;(f=a.clone()).x+=e.x,f.y+=e.y;var m=f.x,u=f.x+f.width,p=f.getCenterX(),g=f.y,v=f.y+f.height,h=f.getCenterY();e=function(e){e+=this.graph.panDx;var t=!1;if(Math.abs(e-p)<d?(s=e-a.getCenterX(),d=Math.abs(e-p),t=!0):Math.abs(e-m)<d?(s=e-a.x,d=Math.abs(e-m),t=!0):Math.abs(e-u)<d&&(s=e-a.x-a.width,d=Math.abs(e-u),t=!0),t){null==this.guideX&&(this.guideX=this.createGuideShape(!0),this.guideX.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,this.guideX.pointerEvents=!1,this.guideX.init(this.graph.getView().getOverlayPane()));var n=this.graph.container;e-=this.graph.panDx,this.guideX.points=[new mxPoint(e,-this.graph.panDy),new mxPoint(e,n.scrollHeight-3-this.graph.panDy)]}r=r||t};for(var f=function(e){e+=this.graph.panDy;var t=!1;if(Math.abs(e-h)<c?(o=e-a.getCenterY(),c=Math.abs(e-h),t=!0):Math.abs(e-g)<c?(o=e-a.y,c=Math.abs(e-g),t=!0):Math.abs(e-v)<c&&(o=e-a.y-a.height,c=Math.abs(e-v),t=!0),t){null==this.guideY&&(this.guideY=this.createGuideShape(!1),this.guideY.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,this.guideY.pointerEvents=!1,this.guideY.init(this.graph.getView().getOverlayPane()));var n=this.graph.container;e-=this.graph.panDy,this.guideY.points=[new mxPoint(-this.graph.panDx,e),new mxPoint(n.scrollWidth-3-this.graph.panDx,e)]}l=l||t},b=0;b<this.states.length;b++){var A=this.states[b];null!=A&&(this.horizontal&&(e.call(this,A.getCenterX()),e.call(this,A.x),e.call(this,A.x+A.width)),this.vertical&&(f.call(this,A.getCenterY()),f.call(this,A.y),f.call(this,A.y+A.height)))}r||null==this.guideX?null!=this.guideX&&(this.guideX.node.style.visibility="visible",this.guideX.redraw()):this.guideX.node.style.visibility="hidden",l||null==this.guideY?null!=this.guideY&&(this.guideY.node.style.visibility="visible",this.guideY.redraw()):this.guideY.node.style.visibility="hidden",t&&(r||(t=a.x-(this.graph.snap(a.x/i-n.x)+n.x)*i,s=this.graph.snap(s/i)*i-t),l||(n=a.y-(this.graph.snap(a.y/i-n.y)+n.y)*i,o=this.graph.snap(o/i)*i-n)),e=new mxPoint(s,o)}return e},mxGuide.prototype.hide=function(){null!=this.guideX&&(this.guideX.node.style.visibility="hidden"),null!=this.guideY&&(this.guideY.node.style.visibility="hidden")},mxGuide.prototype.destroy=function(){null!=this.guideX&&(this.guideX.destroy(),this.guideX=null),null!=this.guideY&&(this.guideY.destroy(),this.guideY=null)},mxStencil.defaultLocalized=!1,mxStencil.prototype.desc=null,mxStencil.prototype.constraints=null,mxStencil.prototype.aspect=null,mxStencil.prototype.w0=null,mxStencil.prototype.h0=null,mxStencil.prototype.bgNode=null,mxStencil.prototype.fgNode=null,mxStencil.prototype.strokewidth=null,mxStencil.prototype.parseDescription=function(){this.fgNode=this.desc.getElementsByTagName("foreground")[0],this.bgNode=this.desc.getElementsByTagName("background")[0],this.w0=Number(this.desc.getAttribute("w")||100),this.h0=Number(this.desc.getAttribute("h")||100);var e=this.desc.getAttribute("aspect");this.aspect=null!=e?e:"variable",e=this.desc.getAttribute("strokewidth"),this.strokewidth=null!=e?e:"1"},mxStencil.prototype.parseConstraints=function(){var e=this.desc.getElementsByTagName("connections")[0];if(null!=e&&(null!=(e=mxUtils.getChildNodes(e))&&0<e.length)){this.constraints=[];for(var t=0;t<e.length;t++)this.constraints.push(this.parseConstraint(e[t]))}},mxStencil.prototype.parseConstraint=function(e){var t=Number(e.getAttribute("x")),n=Number(e.getAttribute("y"));return e="1"==e.getAttribute("perimeter"),new mxConnectionConstraint(new mxPoint(t,n),e)},mxStencil.prototype.evaluateTextAttribute=function(e,t,n){return t=this.evaluateAttribute(e,t,n),e=e.getAttribute("localized"),(mxStencil.defaultLocalized&&null==e||"1"==e)&&(t=mxResources.get(t)),t},mxStencil.prototype.evaluateAttribute=function(e,t,n){return null==(t=e.getAttribute(t))&&(null!=(e=mxUtils.getTextContent(e))&&("function"==typeof(e=mxUtils.eval(e))&&(t=e(n)))),t},mxStencil.prototype.drawShape=function(e,t,n,a,i,s){this.drawChildren(e,t,n,a,i,s,this.bgNode,!1),this.drawChildren(e,t,n,a,i,s,this.fgNode,!0)},mxStencil.prototype.drawChildren=function(e,t,n,a,i,s,o,r){if(null!=o){var l=mxUtils.getValue(t.style,mxConstants.STYLE_DIRECTION,null);for(n=this.computeAspect(t.style,n,a,i,s,l),a=Math.min(n.width,n.height),a="inherit"==this.strokewidth?Number(mxUtils.getNumber(t.style,mxConstants.STYLE_STROKEWIDTH,1)):Number(this.strokewidth)*a,e.setStrokeWidth(a),o=o.firstChild;null!=o;)o.nodeType==mxConstants.NODETYPE_ELEMENT&&this.drawNode(e,t,o,n,r),o=o.nextSibling}},mxStencil.prototype.computeAspect=function(e,t,n,a,i,s){e=t,t=a/this.w0;var o=i/this.h0;if(s="north"==s||"south"==s){o=a/this.h0,t=i/this.w0;var r=(a-i)/2;e+=r,n-=r}return"fixed"==this.aspect&&(t=o=Math.min(t,o),s?(e+=(i-this.w0*t)/2,n+=(a-this.h0*o)/2):(e+=(a-this.w0*t)/2,n+=(i-this.h0*o)/2)),new mxRectangle(e,n,t,o)},mxStencil.prototype.drawNode=function(e,t,n,a,i){var s=n.nodeName,o=a.x,r=a.y,l=a.width,d=a.height,c=Math.min(l,d);if("save"==s)e.save();else if("restore"==s)e.restore();else if("path"==s)for(e.begin(),n=n.firstChild;null!=n;)n.nodeType==mxConstants.NODETYPE_ELEMENT&&this.drawNode(e,t,n,a,i),n=n.nextSibling;else if("close"==s)e.close();else if("move"==s)e.moveTo(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d);else if("line"==s)e.lineTo(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d);else if("quad"==s)e.quadTo(o+Number(n.getAttribute("x1"))*l,r+Number(n.getAttribute("y1"))*d,o+Number(n.getAttribute("x2"))*l,r+Number(n.getAttribute("y2"))*d);else if("curve"==s)e.curveTo(o+Number(n.getAttribute("x1"))*l,r+Number(n.getAttribute("y1"))*d,o+Number(n.getAttribute("x2"))*l,r+Number(n.getAttribute("y2"))*d,o+Number(n.getAttribute("x3"))*l,r+Number(n.getAttribute("y3"))*d);else if("arc"==s)e.arcTo(Number(n.getAttribute("rx"))*l,Number(n.getAttribute("ry"))*d,Number(n.getAttribute("x-axis-rotation")),Number(n.getAttribute("large-arc-flag")),Number(n.getAttribute("sweep-flag")),o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d);else if("rect"==s)e.rect(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,Number(n.getAttribute("w"))*l,Number(n.getAttribute("h"))*d);else if("roundrect"==s)0==(t=n.getAttribute("arcsize"))&&(t=100*mxConstants.RECTANGLE_ROUNDING_FACTOR),c=Number(n.getAttribute("w"))*l,a=Number(n.getAttribute("h"))*d,t=Number(t)/100,t=Math.min(c*t,a*t),e.roundrect(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,c,a,t,t);else if("ellipse"==s)e.ellipse(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,Number(n.getAttribute("w"))*l,Number(n.getAttribute("h"))*d);else if("image"==s)t=this.evaluateAttribute(n,"src",t),e.image(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,Number(n.getAttribute("w"))*l,Number(n.getAttribute("h"))*d,t,!1,"1"==n.getAttribute("flipH"),"1"==n.getAttribute("flipV"));else if("text"==s){if(c=this.evaluateTextAttribute(n,"str",t),a="1"==n.getAttribute("vertical")?-90:0,"0"==n.getAttribute("align-shape")){var m=t.rotation,u=1==mxUtils.getValue(t.style,mxConstants.STYLE_FLIPH,0);t=1==mxUtils.getValue(t.style,mxConstants.STYLE_FLIPV,0),a=u&&t?a-m:u||t?a+m:a-m}a-=n.getAttribute("rotation"),e.text(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,0,0,c,n.getAttribute("align")||"left",n.getAttribute("valign")||"top",!1,"",!1,!1,a)}else if("include-shape"==s)null!=(m=mxStencilRegistry.getStencil(n.getAttribute("name")))&&(o+=Number(n.getAttribute("x"))*l,r+=Number(n.getAttribute("y"))*d,c=Number(n.getAttribute("w"))*l,a=Number(n.getAttribute("h"))*d,m.drawShape(e,t,o,r,c,a));else if("fillstroke"==s)e.fillAndStroke();else if("fill"==s)e.fill();else if("stroke"==s)e.stroke();else if("strokewidth"==s)e.setStrokeWidth(Number(n.getAttribute("width"))*c);else if("dashed"==s)e.setDashed("1"==n.getAttribute("dashed"));else if("dashpattern"==s){if(null!=(n=n.getAttribute("pattern"))){for(n=n.split(" "),l=[],d=0;d<n.length;d++)0<n[d].length&&l.push(Number(n[d])*c);n=l.join(" "),e.setDashPattern(n)}}else"strokecolor"==s?e.setStrokeColor(n.getAttribute("color")):"linecap"==s?e.setLineCap(n.getAttribute("cap")):"linejoin"==s?e.setLineJoin(n.getAttribute("join")):"miterlimit"==s?e.setMiterLimit(Number(n.getAttribute("limit"))):"fillcolor"==s?e.setFillColor(n.getAttribute("color")):"alpha"==s?e.setAlpha(n.getAttribute("alpha")):"fontcolor"==s?e.setFontColor(n.getAttribute("color")):"fontstyle"==s?e.setFontStyle(n.getAttribute("style")):"fontfamily"==s?e.setFontFamily(n.getAttribute("family")):"fontsize"==s&&e.setFontSize(Number(n.getAttribute("size"))*c);i&&("fillstroke"==s||"fill"==s||"stroke"==s)&&e.setShadow(!1)},mxShape.prototype.dialect=null,mxShape.prototype.scale=1,mxShape.prototype.bounds=null,mxShape.prototype.points=null,mxShape.prototype.node=null,mxShape.prototype.style=null,mxShape.prototype.style=null,mxShape.prototype.boundingBox=null,mxShape.prototype.stencil=null,mxShape.prototype.svgStrokeTolerance=6,mxShape.prototype.pointerEvents=!0,mxShape.prototype.stencilPointerEvents=!1,mxShape.prototype.vmlScale=1,mxShape.prototype.init=function(e){null==this.node&&(this.node=this.create(e),null!=e&&e.appendChild(this.node))},mxShape.prototype.isParseVml=function(){return!0},mxShape.prototype.isHtmlAllowed=function(){return!1},mxShape.prototype.getSvgScreenOffset=function(){return 1==mxUtils.mod(Math.max(1,Math.round(this.strokewidth*this.scale)),2)?.5:0},mxShape.prototype.create=function(e){return null!=e.ownerSVGElement?this.createSvg(e):8==document.documentMode||this.dialect==mxConstants.DIALECT_SVG||this.dialect!=mxConstants.DIALECT_VML&&this.isHtmlAllowed()?this.createHtml(e):this.createVml(e)},mxShape.prototype.createSvg=function(){return document.createElementNS(mxConstants.NS_SVG,"g")},mxShape.prototype.createVml=function(){var e=document.createElement(mxClient.VML_PREFIX+":group");return e.style.position="absolute",e},mxShape.prototype.createHtml=function(){var e=document.createElement("div");return e.style.position="absolute",e},mxShape.prototype.reconfigure=function(){this.redraw()},mxShape.prototype.redraw=function(){this.updateBoundsFromPoints(),this.checkBounds()?(this.node.style.visibility="","DIV"==this.node.nodeName&&this.isHtmlAllowed()?this.redrawHtmlShape():this.redrawShape(),this.updateBoundingBox()):(this.node.style.visibility="hidden",this.boundingBox=null)},mxShape.prototype.updateBoundsFromPoints=function(){var e=this.points;if(null!=e&&0<e.length&&null!=e[0]){this.bounds=new mxRectangle(Number(e[0].x),Number(e[0].y),1,1);for(var t=1;t<this.points.length;t++)null!=e[t]&&this.bounds.add(new mxRectangle(Number(e[t].x),Number(e[t].y),1,1))}},mxShape.prototype.checkBounds=function(){return null!=this.bounds&&!isNaN(this.bounds.x)&&!isNaN(this.bounds.y)&&!isNaN(this.bounds.width)&&!isNaN(this.bounds.height)&&0<this.bounds.width&&0<this.bounds.height},mxShape.prototype.createVmlGroup=function(){var e=document.createElement(mxClient.VML_PREFIX+":group");return e.style.position="absolute",e.style.width=this.node.style.width,e.style.height=this.node.style.height,e},mxShape.prototype.redrawShape=function(){var e=this.createCanvas();for(e.pointerEvents=this.pointerEvents;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);this.paint(e),this.node!=e.root&&this.node.insertAdjacentHTML("beforeend",e.root.outerHTML),"DIV"==this.node.nodeName&&8==document.documentMode&&(this.node.style.filter="",(null==this.stencil||!this.stencilPointerEvents)&&mxUtils.addTransparentBackgroundFilter(this.node)),this.destroyCanvas(e)},mxShape.prototype.createCanvas=function(){var e=null,t=null;if(null!=this.node.ownerSVGElement)(e=new mxSvgCanvas2D(this.node,!1)).strokeTolerance=this.svgStrokeTolerance,e.blockImagePointerEvents=mxClient.IS_NS&&!mxClient.IS_SF&&!mxClient.IS_GC,0!=(t=this.getSvgScreenOffset())?this.node.setAttribute("transform","translate("+t+","+t+")"):this.node.removeAttribute("transform");else{this.updateVmlContainer();var n=Math.max(1,Math.round(this.bounds.width)),a=Math.max(1,Math.round(this.bounds.height));t=8==document.documentMode&&this.isParseVml()?this.createVmlGroup():this.node,e=new mxVmlCanvas2D(t,!1);""!=t.tagUrn&&(t.coordsize=n*this.vmlScale+","+a*this.vmlScale,e.scale(this.vmlScale),e.vmlScale=this.vmlScale),t=this.scale,e.translate(-Math.round(this.bounds.x/t),-Math.round(this.bounds.y/t))}return e},mxShape.prototype.updateVmlContainer=function(){this.node.style.left=Math.round(this.bounds.x)+"px",this.node.style.top=Math.round(this.bounds.y)+"px";var e=Math.max(1,Math.round(this.bounds.width)),t=Math.max(1,Math.round(this.bounds.height));this.node.style.width=e+"px",this.node.style.height=t+"px",this.node.style.overflow="visible"},mxShape.prototype.destroyCanvas=function(e){if(e instanceof mxSvgCanvas2D){for(var t in e.gradients){var n=e.gradients[t];n.mxRefCount=(n.mxRefCount||0)+1}this.releaseSvgGradients(this.oldGradients),this.oldGradients=e.gradients}},mxShape.prototype.paint=function(e){var t=this.scale,n=this.bounds.x/t,a=this.bounds.y/t,i=this.bounds.width/t,s=this.bounds.height/t;if(this.isPaintBoundsInverted()){n=n+(o=(i-s)/2),a=a-o;var o=i;i=s,s=o}if(this.updateTransform(e,n,a,i,s),this.configureCanvas(e,n,a,i,s),null!=this.stencil)this.paintStencilShape(e,n,a,i,s);else if(e.setStrokeWidth(this.strokewidth),null!=this.points){for(n=[],a=0;a<this.points.length;a++)n.push(new mxPoint(this.points[a].x/t,this.points[a].y/t));this.paintEdgeShape(e,n)}else this.paintVertexShape(e,n,a,i,s)},mxShape.prototype.configureCanvas=function(e,t,n,a,i){var s=null;null!=this.style&&(s=this.style.dashPattern),e.setAlpha(this.opacity/100),null!=this.isShadow&&e.setShadow(this.isShadow),null!=this.isDashed&&e.setDashed(this.isDashed),null!=s&&e.setDashPattern(s),null!=this.gradient?(t=this.getGradientBounds(e,t,n,a,i),e.setGradient(this.fill,this.gradient,t.x,t.y,t.width,t.height,this.gradientDirection)):e.setFillColor(this.fill),e.setStrokeColor(this.stroke)},mxShape.prototype.getGradientBounds=function(e,t,n,a,i){return new mxRectangle(t,n,a,i)},mxShape.prototype.updateTransform=function(e,t,n,a,i){e.scale(this.scale),e.rotate(this.getShapeRotation(),this.flipH,this.flipV,t+a/2,n+i/2)},mxShape.prototype.paintStencilShape=function(e,t,n,a,i){this.stencilPointerEvents&&(this.dialect==mxConstants.DIALECT_SVG?this.addTransparentBackgroundRectangle(this.node,t,n,a,i):8!=document.documentMode&&this.setTransparentBackgroundImage(this.node)),this.stencil.drawShape(e,this,t,n,a,i)},mxShape.prototype.paintVertexShape=function(e,t,n,a,i){this.paintBackground(e,t,n,a,i),e.setShadow(!1),this.paintForeground(e,t,n,a,i)},mxShape.prototype.paintBackground=function(e,t,n,a,i){},mxShape.prototype.paintForeground=function(e,t,n,a,i){},mxShape.prototype.paintEdgeShape=function(e,t){},mxShape.prototype.getArcSize=function(e,t){var n=mxUtils.getValue(this.style,mxConstants.STYLE_ARCSIZE,100*mxConstants.RECTANGLE_ROUNDING_FACTOR)/100;return Math.min(e*n,t*n)},mxShape.prototype.paintGlassEffect=function(e,t,n,a,i,s){var o=Math.ceil(this.strokewidth/2);e.setGradient("#ffffff","#ffffff",t,n,a,.6*i,"south",.9,.1),e.begin(),s+=2*o,this.isRounded?(e.moveTo(t-o+s,n-o),e.quadTo(t-o,n-o,t-o,n-o+s),e.lineTo(t-o,n+.4*i),e.quadTo(t+.5*a,n+.7*i,t+a+o,n+.4*i),e.lineTo(t+a+o,n-o+s),e.quadTo(t+a+o,n-o,t+a+o-s,n-o)):(e.moveTo(t-o,n-o),e.lineTo(t-o,n+.4*i),e.quadTo(t+.5*a,n+.7*i,t+a+o,n+.4*i),e.lineTo(t+a+o,n-o)),e.close(),e.fill()},mxShape.prototype.apply=function(e){this.state=e,this.style=e.style,null!=this.style&&(this.fill=mxUtils.getValue(this.style,mxConstants.STYLE_FILLCOLOR,this.fill),this.gradient=mxUtils.getValue(this.style,mxConstants.STYLE_GRADIENTCOLOR,this.gradient),this.gradientDirection=mxUtils.getValue(this.style,mxConstants.STYLE_GRADIENT_DIRECTION,this.gradientDirection),this.opacity=mxUtils.getValue(this.style,mxConstants.STYLE_OPACITY,this.opacity),this.stroke=mxUtils.getValue(this.style,mxConstants.STYLE_STROKECOLOR,this.stroke),this.strokewidth=mxUtils.getNumber(this.style,mxConstants.STYLE_STROKEWIDTH,this.strokewidth),this.spacing=mxUtils.getValue(this.style,mxConstants.STYLE_SPACING,this.spacing),this.startSize=mxUtils.getNumber(this.style,mxConstants.STYLE_STARTSIZE,this.startSize),this.endSize=mxUtils.getNumber(this.style,mxConstants.STYLE_ENDSIZE,this.endSize),this.startArrow=mxUtils.getValue(this.style,mxConstants.STYLE_STARTARROW,this.startArrow),this.endArrow=mxUtils.getValue(this.style,mxConstants.STYLE_ENDARROW,this.endArrow),this.rotation=mxUtils.getValue(this.style,mxConstants.STYLE_ROTATION,this.rotation),this.direction=mxUtils.getValue(this.style,mxConstants.STYLE_DIRECTION,this.direction),this.flipH=1==mxUtils.getValue(this.style,mxConstants.STYLE_FLIPH,0),this.flipV=1==mxUtils.getValue(this.style,mxConstants.STYLE_FLIPV,0),null!=this.stencil&&(this.flipH=1==mxUtils.getValue(this.style,"stencilFlipH",0)||this.flipH,this.flipV=1==mxUtils.getValue(this.style,"stencilFlipV",0)||this.flipV),"north"!=this.direction&&"south"!=this.direction||(e=this.flipH,this.flipH=this.flipV,this.flipV=e),this.isShadow=1==mxUtils.getValue(this.style,mxConstants.STYLE_SHADOW,this.isShadow),this.isDashed=1==mxUtils.getValue(this.style,mxConstants.STYLE_DASHED,this.isDashed),this.isRounded=1==mxUtils.getValue(this.style,mxConstants.STYLE_ROUNDED,this.isRounded),this.glass=1==mxUtils.getValue(this.style,mxConstants.STYLE_GLASS,this.glass),"none"==this.fill&&(this.fill=null),"none"==this.gradient&&(this.gradient=null),"none"==this.stroke&&(this.stroke=null))},mxShape.prototype.setCursor=function(e){null==e&&(e=""),this.cursor=e,null!=this.node&&(this.node.style.cursor=e)},mxShape.prototype.getCursor=function(){return this.cursor},mxShape.prototype.updateBoundingBox=function(){if(null!=this.bounds){var e=this.createBoundingBox();if(null!=e){this.augmentBoundingBox(e);var t=this.getShapeRotation();0!=t&&(e=mxUtils.getBoundingBox(e,t)),e.x=Math.floor(e.x),e.y=Math.floor(e.y),e.width=Math.ceil(e.width),e.height=Math.ceil(e.height)}this.boundingBox=e}},mxShape.prototype.createBoundingBox=function(){var e=this.bounds.clone();if(this.isPaintBoundsInverted()){var t=(e.width-e.height)/2;e.x+=t,e.y-=t,t=e.width,e.width=e.height,e.height=t}return e},mxShape.prototype.augmentBoundingBox=function(e){this.isShadow&&(e.width+=Math.ceil(mxConstants.SHADOW_OFFSET_X*this.scale),e.height+=Math.ceil(mxConstants.SHADOW_OFFSET_Y*this.scale));var t=Math.ceil(this.strokewidth*this.scale);e.grow(Math.ceil(t/2))},mxShape.prototype.isPaintBoundsInverted=function(){return null==this.stencil&&("north"==this.direction||"south"==this.direction)},mxShape.prototype.getRotation=function(){return null!=this.rotation?this.rotation:0},mxShape.prototype.getTextRotation=function(){var e=this.getRotation();return 1!=mxUtils.getValue(this.style,mxConstants.STYLE_HORIZONTAL,1)&&(e+=mxText.prototype.verticalTextRotation),e},mxShape.prototype.getShapeRotation=function(){var e=this.getRotation();return null!=this.direction&&("north"==this.direction?e+=270:"west"==this.direction?e+=180:"south"==this.direction&&(e+=90)),e},mxShape.prototype.addTransparentBackgroundRectangle=function(e,t,n,a,i){(e=document.createElementNS(mxConstants.NS_SVG,"rect")).setAttribute("x",t),e.setAttribute("y",n),e.setAttribute("width",a),e.setAttribute("height",i),e.setAttribute("fill","none"),e.setAttribute("stroke","none"),e.setAttribute("pointer-events","all"),this.node.appendChild(e)},mxShape.prototype.setTransparentBackgroundImage=function(e){e.style.backgroundImage="url('"+mxClient.imageBasePath+"/transparent.gif')"},mxShape.prototype.releaseSvgGradients=function(e){if(null!=e)for(var t in e){var n=e[t];n.mxRefCount=(n.mxRefCount||0)-1,0==n.mxRefCount&&null!=n.parentNode&&n.parentNode.removeChild(n)}},mxShape.prototype.destroy=function(){null!=this.node&&(mxEvent.release(this.node),null!=this.node.parentNode&&this.node.parentNode.removeChild(this.node),this.node=null),this.releaseSvgGradients(this.oldGradients),this.oldGradients=null};var mxStencilRegistry={stencils:[],addStencil:function(e,t){mxStencilRegistry.stencils[e]=t},getStencil:function(e){return mxStencilRegistry.stencils[e]}},mxMarker={markers:[],addMarker:function(e,t){mxMarker.markers[e]=t},createMarker:function(e,t,n,a,i,s,o,r,l,d){var c=mxMarker.markers[n];return null!=c?c(e,t,n,a,i,s,o,r,l,d):null}};function mxActor(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxCloud(e,t,n,a){mxActor.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxRectangleShape(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxEllipse(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxDoubleEllipse(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxRhombus(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxPolyline(e,t,n){mxShape.call(this),this.points=e,this.stroke=t,this.strokewidth=null!=n?n:1}function mxArrow(e,t,n,a,i,s,o){mxShape.call(this),this.points=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1,this.arrowWidth=null!=i?i:mxConstants.ARROW_WIDTH,this.spacing=null!=s?s:mxConstants.ARROW_SPACING,this.endSize=null!=o?o:mxConstants.ARROW_SIZE}function mxText(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f,b,A){mxShape.call(this),this.value=e,this.bounds=t,this.color=null!=i?i:"black",this.align=null!=n?n:"",this.valign=null!=a?a:"",this.family=null!=s?s:mxConstants.DEFAULT_FONTFAMILY,this.size=null!=o?o:mxConstants.DEFAULT_FONTSIZE,this.fontStyle=null!=r?r:mxConstants.DEFAULT_FONTSTYLE,this.spacing=parseInt(l||2),this.spacingTop=this.spacing+parseInt(d||0),this.spacingRight=this.spacing+parseInt(c||0),this.spacingBottom=this.spacing+parseInt(m||0),this.spacingLeft=this.spacing+parseInt(u||0),this.horizontal=null==p||p,this.background=g,this.border=v,this.wrap=null!=h&&h,this.clipped=null!=f&&f,this.overflow=null!=b?b:"visible",this.labelPadding=null!=A?A:0,this.rotation=0}function mxTriangle(){mxActor.call(this)}function mxHexagon(){mxActor.call(this)}function mxLine(e,t,n){mxShape.call(this),this.bounds=e,this.stroke=t,this.strokewidth=null!=n?n:1}function mxImageShape(e,t,n,a,i){mxShape.call(this),this.bounds=e,this.image=t,this.fill=n,this.stroke=a,this.strokewidth=null!=i?i:1,this.shadow=!1}function mxLabel(e,t,n,a){mxRectangleShape.call(this,e,t,n,a)}function mxCylinder(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxConnector(e,t,n){mxPolyline.call(this,e,t,n)}function mxSwimlane(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxGraphLayout(e){this.graph=e}function mxStackLayout(e,t,n,a,i,s){mxGraphLayout.call(this,e),this.horizontal=null==t||t,this.spacing=null!=n?n:0,this.x0=null!=a?a:0,this.y0=null!=i?i:0,this.border=null!=s?s:0}function mxPartitionLayout(e,t,n,a){mxGraphLayout.call(this,e),this.horizontal=null==t||t,this.spacing=n||0,this.border=a||0}function mxCompactTreeLayout(e,t,n){mxGraphLayout.call(this,e),this.horizontal=null==t||t,this.invert=null!=n&&n}function WeightedCellSorter(e,t){this.cell=e,this.weightedValue=t}function mxFastOrganicLayout(e){mxGraphLayout.call(this,e)}function mxCircleLayout(e,t){mxGraphLayout.call(this,e),this.radius=null!=t?t:100}function mxParallelEdgeLayout(e){mxGraphLayout.call(this,e)}function mxCompositeLayout(e,t,n){mxGraphLayout.call(this,e),this.layouts=t,this.master=n}function mxEdgeLabelLayout(e,t){mxGraphLayout.call(this,e)}function mxGraphAbstractHierarchyCell(){this.x=[],this.y=[],this.temp=[]}function mxGraphHierarchyNode(e){mxGraphAbstractHierarchyCell.apply(this,arguments),this.cell=e}function mxGraphHierarchyEdge(e){mxGraphAbstractHierarchyCell.apply(this,arguments),this.edges=e}function mxGraphHierarchyModel(e,t,n,a,i){for(e.getGraph(),this.tightenToSource=i,this.roots=n,this.parent=a,this.vertexMapper={},this.edgeMapper={},this.maxRank=0,n=[],null==t&&(t=this.graph.getChildVertices(a)),this.maxRank=this.SOURCESCANSTARTRANK,this.createInternalCells(e,t,n),a=0;a<t.length;a++){i=n[a].connectsAsSource;for(var s=0;s<i.length;s++){var o=i[s];if(null!=(r=o.edges)&&0<r.length){var r=r[0],l=e.getVisibleTerminal(r,!1);l=mxCellPath.create(l),l=this.vertexMapper[l];n[a]==l&&(l=e.getVisibleTerminal(r,!0),l=mxCellPath.create(l),l=this.vertexMapper[l]),null!=l&&n[a]!=l&&(0==(o.target=l).connectsAsTarget.length&&(l.connectsAsTarget=[]),mxUtils.indexOf(l.connectsAsTarget,o)<0&&l.connectsAsTarget.push(o))}}n[a].temp[0]=1}}function mxHierarchicalLayoutStage(){}function mxMedianHybridCrossingReduction(e){this.layout=e}function MedianCellSorter(){}function mxMinimumCycleRemover(e){this.layout=e}function mxCoordinateAssignment(e,t,n,a,i,s){this.layout=e,this.intraCellSpacing=t,this.interRankCellSpacing=n,this.orientation=a,this.initialX=i,this.parallelEdgeSpacing=s}!function(){function e(e,t,n,a,i,s,o,r,l,d){t=1.118*i*l,r=1.118*s*l,i*=o+l,s*=o+l;var c=a.clone();return c.x-=t,c.y-=r,o=n!=mxConstants.ARROW_CLASSIC?1:.75,a.x+=-i*o-t,a.y+=-s*o-r,function(){e.begin(),e.moveTo(c.x,c.y),e.lineTo(c.x-i-s/2,c.y-s+i/2),n==mxConstants.ARROW_CLASSIC&&e.lineTo(c.x-3*i/4,c.y-3*s/4),e.lineTo(c.x+s/2-i,c.y-s-i/2),e.close(),d?e.fillAndStroke():e.stroke()}}function t(e,t,n,a,i,s,o,r,l,d){r=n==mxConstants.ARROW_DIAMOND?.7071:.9862,t=i*l*r,r*=s*l,i*=o+l,s*=o+l;var c=a.clone();c.x-=t,c.y-=r,a.x+=-i-t,a.y+=-s-r;var m=n==mxConstants.ARROW_DIAMOND?2:3.4;return function(){e.begin(),e.moveTo(c.x,c.y),e.lineTo(c.x-i/2-s/m,c.y+i/m-s/2),e.lineTo(c.x-i,c.y-s),e.lineTo(c.x-i/2+s/m,c.y-s/2-i/m),e.close(),d?e.fillAndStroke():e.stroke()}}mxMarker.addMarker("classic",e),mxMarker.addMarker("block",e),mxMarker.addMarker("open",function(e,t,n,a,i,s,o,r,l,d){t=1.118*i*l,n=1.118*s*l,i*=o+l,s*=o+l;var c=a.clone();return c.x-=t,c.y-=n,a.x+=2*-t,a.y+=2*-n,function(){e.begin(),e.moveTo(c.x-i-s/2,c.y-s+i/2),e.lineTo(c.x,c.y),e.lineTo(c.x+s/2-i,c.y-s-i/2),e.stroke()}}),mxMarker.addMarker("oval",function(e,t,n,a,i,s,o,r,l,d){var c=o/2,m=a.clone();return a.x-=i*c,a.y-=s*c,function(){e.ellipse(m.x-c,m.y-c,o,o),d?e.fillAndStroke():e.stroke()}}),mxMarker.addMarker("diamond",t),mxMarker.addMarker("diamondThin",t)}(),mxUtils.extend(mxActor,mxShape),mxActor.prototype.paintVertexShape=function(e,t,n,a,i){e.translate(t,n),e.begin(),this.redrawPath(e,t,n,a,i),e.fillAndStroke()},mxActor.prototype.redrawPath=function(e,t,n,a,i){t=a/3,e.moveTo(0,i),e.curveTo(0,3*i/5,0,2*i/5,a/2,2*i/5),e.curveTo(a/2-t,2*i/5,a/2-t,0,a/2,0),e.curveTo(a/2+t,0,a/2+t,2*i/5,a/2,2*i/5),e.curveTo(a,2*i/5,a,3*i/5,a,i),e.close()},mxUtils.extend(mxCloud,mxActor),mxCloud.prototype.redrawPath=function(e,t,n,a,i){e.moveTo(.25*a,.25*i),e.curveTo(.05*a,.25*i,0,.5*i,.16*a,.55*i),e.curveTo(0,.66*i,.18*a,.9*i,.31*a,.8*i),e.curveTo(.4*a,i,.7*a,i,.8*a,.8*i),e.curveTo(a,.8*i,a,.6*i,.875*a,.5*i),e.curveTo(a,.3*i,.8*a,.1*i,.625*a,.2*i),e.curveTo(.5*a,.05*i,.3*a,.05*i,.25*a,.25*i),e.close()},mxUtils.extend(mxRectangleShape,mxShape),mxRectangleShape.prototype.isHtmlAllowed=function(){return!this.isRounded&&!this.glass&&0==this.rotation},mxRectangleShape.prototype.paintBackground=function(e,t,n,a,i){if(this.isRounded){var s=mxUtils.getValue(this.style,mxConstants.STYLE_ARCSIZE,100*mxConstants.RECTANGLE_ROUNDING_FACTOR)/100;s=Math.min(a*s,i*s);e.roundrect(t,n,a,i,s,s)}else e.rect(t,n,a,i);e.fillAndStroke()},mxRectangleShape.prototype.paintForeground=function(e,t,n,a,i){this.glass&&this.paintGlassEffect(e,t,n,a,i,this.getArcSize(a+this.strokewidth,i+this.strokewidth))},mxRectangleShape.prototype.redrawHtmlShape=function(){this.updateHtmlBounds(this.node),this.updateHtmlFilters(this.node),this.updateHtmlColors(this.node)},mxRectangleShape.prototype.updateHtmlBounds=function(e){var t=9<=document.documentMode?0:Math.ceil(this.strokewidth*this.scale);e.style.borderWidth=Math.max(1,t)+"px",e.style.overflow="hidden",e.style.left=Math.round(this.bounds.x-t/2)+"px",e.style.top=Math.round(this.bounds.y-t/2)+"px","CSS1Compat"==document.compatMode&&(t=-t),e.style.width=Math.round(Math.max(0,this.bounds.width+t))+"px",e.style.height=Math.round(Math.max(0,this.bounds.height+t))+"px"},mxRectangleShape.prototype.updateHtmlColors=function(e){var t=this.stroke;null!=t&&t!=mxConstants.NONE?(e.style.borderColor=t,this.isDashed?e.style.borderStyle="dashed":0<this.strokewidth&&(e.style.borderStyle="solid"),e.style.borderWidth=Math.max(1,Math.ceil(this.strokewidth*this.scale))+"px"):e.style.borderWidth="0px",null!=(t=this.fill)&&t!=mxConstants.NONE?(e.style.backgroundColor=t,e.style.backgroundImage="none"):this.pointerEvents?e.style.backgroundColor="transparent":8==document.documentMode?mxUtils.addTransparentBackgroundFilter(e):this.setTransparentBackgroundImage(e)},mxRectangleShape.prototype.updateHtmlFilters=function(e){var t="";if(this.opacity<100&&(t+="alpha(opacity="+this.opacity+")"),this.isShadow&&(t+="progid:DXImageTransform.Microsoft.dropShadow (OffX='"+Math.round(mxConstants.SHADOW_OFFSET_X*this.scale)+"', OffY='"+Math.round(mxConstants.SHADOW_OFFSET_Y*this.scale)+"', Color='"+mxConstants.SHADOWCOLOR+"')"),this.gradient){var n=this.fill,a=this.gradient,i="0",s={east:0,south:1,west:2,north:3},o=null!=this.direction?s[this.direction]:0;null!=this.gradientDirection&&(o=mxUtils.mod(o+s[this.gradientDirection]-1,4)),1==o?(i="1",s=n,n=a,a=s):2==o?(s=n,n=a,a=s):3==o&&(i="1"),t+="progid:DXImageTransform.Microsoft.gradient(startColorStr='"+n+"', endColorStr='"+a+"', gradientType='"+i+"')"}e.style.filter=t},mxUtils.extend(mxEllipse,mxShape),mxEllipse.prototype.paintVertexShape=function(e,t,n,a,i){e.ellipse(t,n,a,i),e.fillAndStroke()},mxUtils.extend(mxDoubleEllipse,mxShape),mxDoubleEllipse.prototype.vmlScale=10,mxDoubleEllipse.prototype.paintBackground=function(e,t,n,a,i){e.ellipse(t,n,a,i),e.fillAndStroke()},mxDoubleEllipse.prototype.paintForeground=function(e,t,n,a,i){var s=Math.min(4,Math.min(a/5,i/5));i-=2*s,0<(a-=2*s)&&0<i&&e.ellipse(t+s,n+s,a,i),e.stroke()},mxUtils.extend(mxRhombus,mxShape),mxRhombus.prototype.paintVertexShape=function(e,t,n,a,i){var s=a/2,o=i/2;e.begin(),e.moveTo(t+s,n),e.lineTo(t+a,n+o),e.lineTo(t+s,n+i),e.lineTo(t,n+o),e.close(),e.fillAndStroke()},mxUtils.extend(mxPolyline,mxShape),mxPolyline.prototype.getRotation=function(){return 0},mxPolyline.prototype.paintEdgeShape=function(e,t){this.paintLine(e,t,this.isRounded)},mxPolyline.prototype.paintLine=function(e,t,n){var a=mxUtils.getValue(this.style,mxConstants.STYLE_ARCSIZE,mxConstants.LINE_ARCSIZE)/2,i=t[0],s=t[t.length-1];e.begin(),e.moveTo(i.x,i.y);for(var o=1;o<t.length-1;o++){var r=t[o],l=i.x-r.x;i=i.y-r.y;if(n&&o<t.length-1&&(0!=l||0!=i)){var d=Math.sqrt(l*l+i*i);l=l*Math.min(a,d/2)/d,i=i*Math.min(a,d/2)/d;e.lineTo(r.x+l,r.y+i),l=(i=t[o+1]).x-r.x,i=i.y-r.y,d=Math.max(1,Math.sqrt(l*l+i*i)),l=l*Math.min(a,d/2)/d,i=i*Math.min(a,d/2)/d,l=r.x+l,i=r.y+i,e.quadTo(r.x,r.y,l,i),r=new mxPoint(l,i)}else e.lineTo(r.x,r.y);i=r}e.lineTo(s.x,s.y),e.stroke()},mxUtils.extend(mxArrow,mxShape),mxArrow.prototype.paintEdgeShape=function(e,t){var n=mxConstants.ARROW_SPACING,a=mxConstants.ARROW_WIDTH,i=mxConstants.ARROW_SIZE,s=t[0],o=t[t.length-1],r=o.x-s.x,l=o.y-s.y,d=(c=Math.sqrt(r*r+l*l))-2*n-i,c=(r=r/c,a*(l=l/c)/3),m=(a=-a*r/3,(i=s.x-c/2+n*r)+c),u=(s=s.y-a/2+n*l)+a,p=m+d*r,g=p+c,v=(d=u+d*l)+a,h=g-3*c,f=v-3*a;e.begin(),e.moveTo(i,s),e.lineTo(m,u),e.lineTo(p,d),e.lineTo(g,v),e.lineTo(o.x-n*r,o.y-n*l),e.lineTo(h,f),e.lineTo(h+c,f+a),e.close(),e.fillAndStroke()},mxUtils.extend(mxText,mxShape),mxText.prototype.baseSpacingTop=0,mxText.prototype.baseSpacingBottom=0,mxText.prototype.baseSpacingLeft=0,mxText.prototype.baseSpacingRight=0,mxText.prototype.replaceLinefeeds=!0,mxText.prototype.verticalTextRotation=-90,mxText.prototype.ignoreClippedStringSize=!0,mxText.prototype.ignoreStringSize=!1,mxText.prototype.isParseVml=function(){return!1},mxText.prototype.isHtmlAllowed=function(){return 8!=document.documentMode},mxText.prototype.getSvgScreenOffset=function(){return 0},mxText.prototype.checkBounds=function(){return!(null==this.bounds||isNaN(this.bounds.x)||isNaN(this.bounds.y)||isNaN(this.bounds.width)||isNaN(this.bounds.height))},mxText.prototype.updateBoundingBox=function(){var e=this.node;8==document.documentMode&&null!=e.firstChild&&(null!=(e=e.firstChild).firstChild&&(e=e.firstChild)),this.boundingBox=this.bounds.clone();var t=this.getTextRotation();if(this.ignoreStringSize||null==e||"fill"==this.overflow||this.clipped&&this.ignoreClippedStringSize)this.boundingBox.x+=this.margin.x*this.boundingBox.width,this.boundingBox.y+=this.margin.y*this.boundingBox.height;else{var n=null,a=null;if(null!=e.ownerSVGElement)if(null!=e.firstChild&&null!=e.firstChild.firstChild&&"foreignObject"==e.firstChild.firstChild.nodeName)e=e.firstChild.firstChild,n=this.wrap?this.bounds.width:parseInt(e.getAttribute("width"))*this.scale,a=parseInt(e.getAttribute("height"))*this.scale;else{if(0==(t=e.getBBox()).width&&0==t.height)return;this.boundingBox=new mxRectangle(t.x,t.y,t.width,t.height),t=0}else a=this.state.view.textDiv,a=null!=this.offsetWidth&&null!=this.offsetHeight?(n=this.wrap?this.bounds.width:this.offsetWidth*this.scale,this.offsetHeight*this.scale):null!=a?(this.updateFont(a),this.updateSize(a),mxUtils.isNode(this.value)?a.innerHTML=this.value.outerHTML:(n=this.replaceLinefeeds?this.value.replace(/\n/g,"<br/>"):this.value,a.innerHTML=n),n=this.wrap?this.bounds.width:a.offsetWidth*this.scale,a.offsetHeight*this.scale):(n=this.wrap?this.bounds.width:e.offsetWidth*this.scale,e.offsetHeight*this.scale);null!=n&&null!=a&&(this.boundingBox=new mxRectangle(this.bounds.x+this.margin.x*n,this.bounds.y+this.margin.y*a,n,a))}null!=this.boundingBox&&(0!=t&&(t=mxUtils.getBoundingBox(this.boundingBox,t),this.boundingBox.x=t.x,this.boundingBox.y=t.y,mxClient.IS_QUIRKS||(this.boundingBox.width=t.width,this.boundingBox.height=t.height)),this.boundingBox.x=Math.floor(this.boundingBox.x),this.boundingBox.y=Math.floor(this.boundingBox.y),this.boundingBox.width=Math.ceil(this.boundingBox.width),this.boundingBox.height=Math.ceil(this.boundingBox.height))},mxText.prototype.getShapeRotation=function(){return 0},mxText.prototype.getTextRotation=function(){return null!=this.state&&null!=this.state.shape?this.state.shape.getTextRotation():0},mxText.prototype.isPaintBoundsInverted=function(){return!this.horizontal&&null!=this.state&&this.state.view.graph.model.isVertex(this.state.cell)},mxText.prototype.configureCanvas=function(e,t,n,a,i){mxShape.prototype.configureCanvas.apply(this,arguments),e.setFontColor(this.color),e.setFontBackgroundColor(this.background),e.setFontBorderColor(this.border),e.setFontFamily(this.family),e.setFontSize(this.size),e.setFontStyle(this.fontStyle)},mxText.prototype.updateVmlContainer=function(){this.node.style.left=Math.round(this.bounds.x)+"px",this.node.style.top=Math.round(this.bounds.y)+"px",this.node.style.width="1px",this.node.style.height="1px",this.node.style.overflow="visible"},mxText.prototype.paint=function(e){var t=this.scale,n=this.bounds.x/t,a=this.bounds.y/t,i=this.bounds.width/t;t=this.bounds.height/t;this.updateTransform(e,n,a,i,t),this.configureCanvas(e,n,a,i,t);var s=mxUtils.isNode(this.value)||this.dialect==mxConstants.DIALECT_STRICTHTML,o=s||e instanceof mxVmlCanvas2D?"html":"",r=this.value;!s&&"html"==o&&(r=mxUtils.htmlEntities(r,!1)),r=!mxUtils.isNode(this.value)&&this.replaceLinefeeds&&"html"==o?r.replace(/\n/g,"<br/>"):r,e.text(n,a,i,t,r,this.align,this.valign,this.wrap,o,"fill"==this.overflow,this.clipped,this.getTextRotation())},mxText.prototype.redrawHtmlShape=function(){var e=this.node.style;e.opacity=this.opacity<1?this.opacity:"",e.overflow="",e.width="",e.height="",this.updateFont(this.node),this.updateSize(this.node),this.updateValue(),this.offsetHeight=this.offsetWidth=null,null!=mxClient.CSS_PREFIX?this.updateHtmlTransform():this.updateHtmlFilter()},mxText.prototype.updateHtmlTransform=function(){var e=this.getTextRotation(),t=this.node.style,n=this.margin.x,a=this.margin.y;0!=e?(t[mxClient.CSS_PREFIX+"TransformOrigin"]=100*-n+"% "+100*-a+"%",t[mxClient.CSS_PREFIX+"Transform"]="translate("+100*n+"%,"+100*a+"%)scale("+this.scale+") rotate("+e+"deg)"):(t[mxClient.CSS_PREFIX+"TransformOrigin"]="0% 0%",t[mxClient.CSS_PREFIX+"Transform"]="scale("+this.scale+")translate("+100*n+"%,"+100*a+"%)"),t.left=Math.round(this.bounds.x)+"px",t.top=Math.round(this.bounds.y)+"px"},mxText.prototype.updateHtmlFilter=function(){var e=this.node.style,t=this.margin.x,n=this.margin.y,a=this.scale;e.filter="";var i=0,s=0;if(null!=(r=null!=this.state?this.state.view.textDiv:null)){if(r.style.overflow="",r.style.height="",r.style.width="",this.updateFont(r),this.updateSize(r),mxUtils.isNode(this.value))r.innerHTML=this.value.outerHTML;else{var o=this.value;this.dialect!=mxConstants.DIALECT_STRICTHTML&&(o=mxUtils.htmlEntities(o,!1)),o=this.replaceLinefeeds?o.replace(/\n/g,"<br/>"):o,r.innerHTML=o}i=r.offsetWidth+2,s=r.offsetHeight+2}else i=this.node.offsetWidth,s=this.node.offsetHeight+1;this.offsetWidth=i,this.offsetHeight=s,r=this.bounds.width/a,o=this.bounds.height/a,mxClient.IS_QUIRKS&&(this.clipped||"fill"==this.overflow)&&0<o?(o=Math.min(o,s),e.height=Math.round(o+1)+"px"):o=s,"fill"!=this.overflow&&(mxClient.IS_QUIRKS&&(this.clipped||this.wrap)&&0<r?(r=Math.min(r,i),e.width=Math.round(r)+"px"):r=i);o*=a;var r=r*a,l=(i=this.getTextRotation()*(Math.PI/180),s=parseFloat(parseFloat(Math.cos(i)).toFixed(8)),parseFloat(parseFloat(Math.sin(-i)).toFixed(8)));(i=i%(2*Math.PI))<0&&(i+=2*Math.PI),(i%=Math.PI)>Math.PI/2&&(i=Math.PI-i);var d=Math.cos(i),c=Math.sin(-i),m=(o-o*d+r*c)/2+l*(t=r*-(t+.5))-s*(n=o*-(n+.5));0!=i&&(e.filter="progid:DXImageTransform.Microsoft.Matrix(M11="+s+", M12="+l+", M21="+-l+", M22="+s+", sizingMethod='auto expand')"),e.zoom=a,e.left=Math.round(this.bounds.x+((r-r*d+o*c)/2-s*t-l*n)-r/2)+"px",e.top=Math.round(this.bounds.y+m-o/2)+"px"},mxText.prototype.updateValue=function(){if(mxUtils.isNode(this.value))this.node.innerHTML="",this.node.appendChild(this.value);else{var e=this.value;this.dialect!=mxConstants.DIALECT_STRICTHTML&&(e=mxUtils.htmlEntities(e,!1));e=this.replaceLinefeeds?e.replace(/\n/g,"<br/>"):e;var t=null!=this.background&&this.background!=mxConstants.NONE?this.background:null,n=null!=this.border&&this.border!=mxConstants.NONE?this.border:null;if(null!=t||null!=n)if("fill"==this.overflow)null!=t&&(this.node.style.backgroundColor=t),null!=n&&(this.node.style.border="1px solid "+n);else{var a="";null!=t&&(a+="background-color:"+t+";"),null!=n&&(a+="border:1px solid "+n+";"),e='<div style="zoom:1;'+a+"display:inline-block;_display:inline;padding-bottom:1px;padding-right:1px;line-height:"+this.node.style.lineHeight+'">'+e+"</div>",this.node.style.lineHeight=""}this.node.innerHTML=e}},mxText.prototype.updateFont=function(e){(e=e.style).lineHeight=Math.round(this.size*mxConstants.LINE_HEIGHT)+"px",e.fontSize=Math.round(this.size)+"px",e.fontFamily=this.family,e.verticalAlign="top",e.color=this.color,e.fontWeight=(this.fontStyle&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD?"bold":"",e.fontStyle=(this.fontStyle&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC?"italic":"",e.fontDecoration=(this.fontStyle&mxConstants.FONT_UNDERLINE)==mxConstants.FONT_UNDERLINE?"underline":"",e.textAlign=this.align==mxConstants.ALIGN_CENTER?"center":this.align==mxConstants.ALIGN_RIGHT?"right":"left"},mxText.prototype.updateSize=function(e){var t=Math.round(this.bounds.width/this.scale),n=Math.round(this.bounds.height/this.scale);e=e.style,this.clipped?(e.overflow="hidden",0<n&&(e.maxHeight=n+"px"),0<t&&(e.width=t+"px")):"fill"==this.overflow&&(e.width=t+"px",0<n&&(e.maxHeight=n+"px")),this.wrap?(!this.clipped&&0<t&&(e.width=t+"px"),e.whiteSpace="normal"):e.whiteSpace="nowrap"},mxText.prototype.updateMargin=function(){this.margin=mxUtils.getAlignmentAsPoint(this.align,this.valign)},mxText.prototype.getSpacing=function(){return new mxPoint(this.align==mxConstants.ALIGN_CENTER?(this.spacingLeft-this.spacingRight)/2:this.align==mxConstants.ALIGN_RIGHT?-this.spacingRight-this.baseSpacingRight:this.spacingLeft+this.baseSpacingLeft,this.valign==mxConstants.ALIGN_MIDDLE?(this.spacingTop-this.spacingBottom)/2:this.valign==mxConstants.ALIGN_BOTTOM?-this.spacingBottom-this.baseSpacingBottom:this.spacingTop+this.baseSpacingTop)},mxUtils.extend(mxTriangle,mxActor),mxTriangle.prototype.redrawPath=function(e,t,n,a,i){e.moveTo(0,0),e.lineTo(a,.5*i),e.lineTo(0,i),e.close()},mxUtils.extend(mxHexagon,mxActor),mxHexagon.prototype.redrawPath=function(e,t,n,a,i){e.moveTo(.25*a,0),e.lineTo(.75*a,0),e.lineTo(a,.5*i),e.lineTo(.75*a,i),e.lineTo(.25*a,i),e.lineTo(0,.5*i),e.close()},mxUtils.extend(mxLine,mxShape),mxLine.prototype.paintVertexShape=function(e,t,n,a,i){n+=i/2,e.begin(),e.moveTo(t,n),e.lineTo(t+a,n),e.stroke()},mxUtils.extend(mxImageShape,mxRectangleShape),mxImageShape.prototype.preserveImageAspect=!0,mxImageShape.prototype.getSvgScreenOffset=function(){return mxClient.IS_IE?0:.5},mxImageShape.prototype.apply=function(e){mxShape.prototype.apply.apply(this,arguments),this.gradient=this.stroke=this.fill=null,null!=this.style&&(this.fill=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_BACKGROUND),this.stroke=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_BORDER),this.preserveImageAspect=1==mxUtils.getNumber(this.style,mxConstants.STYLE_IMAGE_ASPECT,1),this.flipH=this.flipH||1==mxUtils.getValue(this.style,"imageFlipH",0),this.flipV=this.flipV||1==mxUtils.getValue(this.style,"imageFlipV",0))},mxImageShape.prototype.isHtmlAllowed=function(){return!this.preserveImageAspect},mxImageShape.prototype.createHtml=function(){var e=document.createElement("div");return e.style.position="absolute",e},mxImageShape.prototype.paintVertexShape=function(e,t,n,a,i){if(null!=this.image){var s=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_BACKGROUND,null),o=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_BORDER,null);null==s&&null==o||(e.setFillColor(s),e.setStrokeColor(o),e.rect(t,n,a,i),e.fillAndStroke()),e.image(t,n,a,i,this.image,this.preserveImageAspect,!1,!1)}else mxRectangleShape.prototype.paintBackground.apply(this,arguments)},mxImageShape.prototype.redrawHtmlShape=function(){if(this.node.style.left=Math.round(this.bounds.x)+"px",this.node.style.top=Math.round(this.bounds.y)+"px",this.node.style.width=Math.max(0,Math.round(this.bounds.width))+"px",this.node.style.height=Math.max(0,Math.round(this.bounds.height))+"px",this.node.style.backgroundColor=this.fill||"",this.node.style.borderColor=this.stroke||"",this.node.innerHTML="",null!=this.image){var e=document.createElement(mxClient.IS_IE6||null==mxClient.CSS_PREFIX&&0!=this.rotation?mxClient.VML_PREFIX+":image":"img");e.style.position="absolute",e.src=this.image;var t=this.opacity<100?"alpha(opacity="+this.opacity+")":"";this.node.style.filter=t,this.flipH&&this.flipV?t+="progid:DXImageTransform.Microsoft.BasicImage(rotation=2)":this.flipH?t+="progid:DXImageTransform.Microsoft.BasicImage(mirror=1)":this.flipV&&(t+="progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"),e.style.filter!=t&&(e.style.filter=t),"image"==e.nodeName?e.style.rotation=this.rotation:e.style[mxClient.CSS_PREFIX+"Transform"]="rotate("+this.rotation+"deg)",e.style.width=this.node.style.width,e.style.height=this.node.style.height,this.node.style.backgroundImage="",this.node.appendChild(e)}else this.setTransparentBackgroundImage(this.node)},mxUtils.extend(mxLabel,mxRectangleShape),mxLabel.prototype.imageSize=mxConstants.DEFAULT_IMAGESIZE,mxLabel.prototype.spacing=2,mxLabel.prototype.indicatorSize=10,mxLabel.prototype.indicatorSpacing=2,mxLabel.prototype.init=function(e){mxShape.prototype.init.apply(this,arguments),null!=this.indicatorColor&&null!=this.indicatorShape&&(this.indicator=new this.indicatorShape,this.indicator.dialect=this.dialect,this.indicator.bounds=this.bounds,this.indicator.fill=this.indicatorColor,this.indicator.stroke=this.indicatorColor,this.indicator.gradient=this.indicatorGradientColor,this.indicator.direction=this.indicatorDirection,this.indicator.init(this.node))},mxLabel.prototype.redraw=function(){null!=this.indicator&&(this.indicator.fill=this.indicatorColor,this.indicator.stroke=this.indicatorColor,this.indicator.gradient=this.indicatorGradientColor,this.indicator.direction=this.indicatorDirection),mxShape.prototype.redraw.apply(this,arguments)},mxLabel.prototype.isHtmlAllowed=function(){return mxRectangleShape.prototype.isHtmlAllowed.apply(this,arguments)&&null==this.indicatorColor&&null==this.indicatorShape},mxLabel.prototype.paintForeground=function(e,t,n,a,i){this.paintImage(e,t,n,a,i),this.paintIndicator(e,t,n,a,i),mxRectangleShape.prototype.paintForeground.apply(this,arguments)},mxLabel.prototype.paintImage=function(e,t,n,a,i){null!=this.image&&(t=this.getImageBounds(t,n,a,i),e.image(t.x,t.y,t.width,t.height,this.image,!1,!1,!1))},mxLabel.prototype.getImageBounds=function(e,t,n,a){var i=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_ALIGN,mxConstants.ALIGN_LEFT),s=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),o=mxUtils.getNumber(this.style,mxConstants.STYLE_IMAGE_WIDTH,mxConstants.DEFAULT_IMAGESIZE),r=mxUtils.getNumber(this.style,mxConstants.STYLE_IMAGE_HEIGHT,mxConstants.DEFAULT_IMAGESIZE),l=mxUtils.getNumber(this.style,mxConstants.STYLE_SPACING,this.spacing)+5;return new mxRectangle(e=i==mxConstants.ALIGN_CENTER?e+(n-o)/2:i==mxConstants.ALIGN_RIGHT?e+(n-o-l):e+l,t=s==mxConstants.ALIGN_TOP?t+l:s==mxConstants.ALIGN_BOTTOM?t+(a-r-l):t+(a-r)/2,o,r)},mxLabel.prototype.paintIndicator=function(e,t,n,a,i){null!=this.indicator?(this.indicator.bounds=this.getIndicatorBounds(t,n,a,i),this.indicator.paint(e)):null!=this.indicatorImage&&(t=this.getIndicatorBounds(t,n,a,i),e.image(t.x,t.y,t.width,t.height,this.indicatorImage,!1,!1,!1))},mxLabel.prototype.getIndicatorBounds=function(e,t,n,a){var i=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_ALIGN,mxConstants.ALIGN_LEFT),s=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),o=mxUtils.getNumber(this.style,mxConstants.STYLE_INDICATOR_WIDTH,this.indicatorSize),r=mxUtils.getNumber(this.style,mxConstants.STYLE_INDICATOR_HEIGHT,this.indicatorSize),l=this.spacing+5;return new mxRectangle(e=i==mxConstants.ALIGN_RIGHT?e+(n-o-l):i==mxConstants.ALIGN_CENTER?e+(n-o)/2:e+l,t=s==mxConstants.ALIGN_BOTTOM?t+(a-r-l):s==mxConstants.ALIGN_TOP?t+l:t+(a-r)/2,o,r)},mxLabel.prototype.redrawHtmlShape=function(){for(mxRectangleShape.prototype.redrawHtmlShape.apply(this,arguments);this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);if(null!=this.image){var e=document.createElement("img");e.style.position="relative",e.setAttribute("border","0");var t=this.getImageBounds(this.bounds.x,this.bounds.y,this.bounds.width,this.bounds.height);t.x-=this.bounds.x,t.y-=this.bounds.y,e.style.left=Math.round(t.x)+"px",e.style.top=Math.round(t.y)+"px",e.style.width=Math.round(t.width)+"px",e.style.height=Math.round(t.height)+"px",e.src=this.image,this.node.appendChild(e)}},mxUtils.extend(mxCylinder,mxShape),mxCylinder.prototype.maxHeight=40,mxCylinder.prototype.svgStrokeTolerance=0,mxCylinder.prototype.paintVertexShape=function(e,t,n,a,i){e.translate(t,n),e.begin(),this.redrawPath(e,t,n,a,i,!1),e.fillAndStroke(),e.setShadow(!1),e.begin(),this.redrawPath(e,t,n,a,i,!0),e.stroke()},mxCylinder.prototype.redrawPath=function(e,t,n,a,i,s){t=Math.min(this.maxHeight,Math.round(i/5)),(s&&null!=this.fill||!s&&null==this.fill)&&(e.moveTo(0,t),e.curveTo(0,2*t,a,2*t,a,t),s||(e.stroke(),e.begin())),s||(e.moveTo(0,t),e.curveTo(0,-t/3,a,-t/3,a,t),e.lineTo(a,i-t),e.curveTo(a,i+t/3,0,i+t/3,0,i-t),e.close())},mxUtils.extend(mxConnector,mxPolyline),mxConnector.prototype.paintEdgeShape=function(e,t){var n=this.createMarker(e,t,!0),a=this.createMarker(e,t,!1);null==this.style||1!=this.style[mxConstants.STYLE_CURVED]?this.paintLine(e,t,this.isRounded):this.paintCurvedLine(e,t),e.setFillColor(this.stroke),e.setShadow(!1),e.setDashed(!1),null!=n&&n(),null!=a&&a()},mxConnector.prototype.paintCurvedLine=function(e,t){e.begin();var n=t[0],a=t.length;for(e.moveTo(n.x,n.y),n=1;n<a-2;n++){var i=t[n],s=t[n+1];e.quadTo(i.x,i.y,(i.x+s.x)/2,(i.y+s.y)/2)}i=t[a-2],s=t[a-1],e.quadTo(i.x,i.y,s.x,s.y),e.stroke()},mxConnector.prototype.createMarker=function(e,t,n){var a=t.length,i=n?t[1]:t[a-2],s=(a=(t=n?t[0]:t[a-1]).x-i.x,t.y-i.y),o=(i=a/(o=Math.max(1,Math.sqrt(a*a+s*s))),a=s/o,s=mxUtils.getNumber(this.style,n?mxConstants.STYLE_STARTSIZE:mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE),mxUtils.getValue(this.style,n?mxConstants.STYLE_STARTARROW:mxConstants.STYLE_ENDARROW));return mxMarker.createMarker(e,this,o,t,i,a,s,n,this.strokewidth,0!=this.style[n?mxConstants.STYLE_STARTFILL:mxConstants.STYLE_ENDFILL])},mxConnector.prototype.augmentBoundingBox=function(e){mxShape.prototype.augmentBoundingBox.apply(this,arguments);var t=0;mxUtils.getValue(this.style,mxConstants.STYLE_STARTARROW,mxConstants.NONE)!=mxConstants.NONE&&(t=mxUtils.getNumber(this.style,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_MARKERSIZE)+1),mxUtils.getValue(this.style,mxConstants.STYLE_ENDARROW,mxConstants.NONE)!=mxConstants.NONE&&(t=Math.max(t,mxUtils.getNumber(this.style,mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE))+1),e.grow(Math.ceil(t*this.scale))},mxUtils.extend(mxSwimlane,mxShape),mxSwimlane.prototype.imageSize=16,mxSwimlane.prototype.getGradientBounds=function(e,t,n,a,i){return new mxRectangle(t,n,a,Math.min(i,mxUtils.getValue(this.style,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)))},mxSwimlane.prototype.getRotation=function(){var e=mxShape.prototype.getRotation.apply(this,arguments);return 1!=mxUtils.getValue(this.style,mxConstants.STYLE_HORIZONTAL,1)&&(e+=mxText.prototype.verticalTextRotation),e},mxSwimlane.prototype.getTextRotation=function(){return this.getRotation()},mxSwimlane.prototype.isPaintBoundsInverted=function(){return mxShape.prototype.isPaintBoundsInverted.apply(this,arguments)||1!=mxUtils.getValue(this.style,mxConstants.STYLE_HORIZONTAL,1)},mxSwimlane.prototype.getArcSize=function(e,t,n){return 3*n*(mxUtils.getValue(this.style,mxConstants.STYLE_ARCSIZE,100*mxConstants.RECTANGLE_ROUNDING_FACTOR)/100)},mxSwimlane.prototype.paintVertexShape=function(e,t,n,a,i){var s=Math.min(i,mxUtils.getValue(this.style,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)),o=mxUtils.getValue(this.style,mxConstants.STYLE_SWIMLANE_FILLCOLOR,mxConstants.NONE),r=1==mxUtils.getValue(this.style,mxConstants.STYLE_SWIMLANE_LINE,1),l=0;e.translate(t,n),this.isRounded?(l=this.getArcSize(a,i,s),this.paintRoundedSwimlane(e,t,n,a,i,s,l,o,r)):this.paintSwimlane(e,t,n,a,i,s,o,r),o=mxUtils.getValue(this.style,mxConstants.STYLE_SEPARATORCOLOR,mxConstants.NONE),this.paintSeparator(e,a,s,i,o),null!=this.image&&(i=this.getImageBounds(t,s,a,i),e.image(i.x-t,i.y-n,i.width,i.height,this.image,!1,!1,!1)),this.glass&&(e.setShadow(!1),this.paintGlassEffect(e,0,0,a,s,l))},mxSwimlane.prototype.paintSwimlane=function(e,t,n,a,i,s,o,r){o!=mxConstants.NONE&&(e.save(),e.setFillColor(o),e.rect(0,0,a,i),e.fillAndStroke(),e.restore(),e.setShadow(!1)),e.begin(),e.moveTo(0,s),e.lineTo(0,0),e.lineTo(a,0),e.lineTo(a,s),r&&e.close(),e.fillAndStroke(),s<i&&o==mxConstants.NONE&&(e.pointerEvents=!1,e.begin(),e.moveTo(0,s),e.lineTo(0,i),e.lineTo(a,i),e.lineTo(a,s),e.stroke())},mxSwimlane.prototype.paintRoundedSwimlane=function(e,t,n,a,i,s,o,r,l){r!=mxConstants.NONE&&(e.save(),e.setFillColor(r),e.roundrect(0,0,a,i,o,o),e.fillAndStroke(),e.restore(),e.setShadow(!1)),e.begin(),e.moveTo(a,s),e.lineTo(a,o),e.quadTo(a,0,a-Math.min(a/2,o),0),e.lineTo(Math.min(a/2,o),0),e.quadTo(0,0,0,o),e.lineTo(0,s),l&&e.close(),e.fillAndStroke(),s<i&&r==mxConstants.NONE&&(e.pointerEvents=!1,e.begin(),e.moveTo(0,s),e.lineTo(0,i-o),e.quadTo(0,i,Math.min(a/2,o),i),e.lineTo(a-Math.min(a/2,o),i),e.quadTo(a,i,a,i-o),e.lineTo(a,s),e.stroke())},mxSwimlane.prototype.paintSeparator=function(e,t,n,a,i){i!=mxConstants.NONE&&(e.setStrokeColor(i),e.setDashed(!0),e.begin(),e.moveTo(t,n),e.lineTo(t,a),e.stroke(),e.setDashed(!1))},mxSwimlane.prototype.getImageBounds=function(e,t,n,a){return new mxRectangle(e+n-this.imageSize,t,this.imageSize,this.imageSize)},mxGraphLayout.prototype.graph=null,mxGraphLayout.prototype.useBoundingBox=!0,mxGraphLayout.prototype.parent=null,mxGraphLayout.prototype.moveCell=function(e,t,n){},mxGraphLayout.prototype.execute=function(e){},mxGraphLayout.prototype.getGraph=function(){return this.graph},mxGraphLayout.prototype.getConstraint=function(e,t,n,a){return null!=(t=null!=(n=this.graph.view.getState(t))?n.style:this.graph.getCellStyle(t))?t[e]:null},mxGraphLayout.traverse=function(e,t,n,a,i){if(null!=n&&null!=e){t=null==t||t,i=i||[];var s=mxCellPath.create(e);if(null==i[s]&&(null==(a=n(i[s]=e,a))||a)&&0<(a=this.graph.model.getEdgeCount(e)))for(s=0;s<a;s++){var o=this.graph.model.getEdgeAt(e,s),r=this.graph.model.getTerminal(o,!0)==e;t&&!r||(r=this.graph.view.getVisibleTerminal(o,!r),this.traverse(r,t,n,o,i))}}},mxGraphLayout.prototype.isVertexMovable=function(e){return this.graph.isCellMovable(e)},mxGraphLayout.prototype.isVertexIgnored=function(e){return!this.graph.getModel().isVertex(e)||!this.graph.isCellVisible(e)},mxGraphLayout.prototype.isEdgeIgnored=function(e){var t=this.graph.getModel();return!t.isEdge(e)||!this.graph.isCellVisible(e)||null==t.getTerminal(e,!0)||null==t.getTerminal(e,!1)},mxGraphLayout.prototype.setEdgeStyleEnabled=function(e,t){this.graph.setCellStyles(mxConstants.STYLE_NOEDGESTYLE,t?"0":"1",[e])},mxGraphLayout.prototype.setOrthogonalEdge=function(e,t){this.graph.setCellStyles(mxConstants.STYLE_ORTHOGONAL,t?"1":"0",[e])},mxGraphLayout.prototype.getParentOffset=function(e){var t=new mxPoint;if(null!=e&&e!=this.parent){var n=this.graph.getModel();if(n.isAncestor(this.parent,e))for(var a=n.getGeometry(e);e!=this.parent;)t.x+=a.x,t.y+=a.y,e=n.getParent(e),a=n.getGeometry(e)}return t},mxGraphLayout.prototype.setEdgePoints=function(e,t){if(null!=e){var n=this.graph.model,a=n.getGeometry(e);if(null==a?(a=new mxGeometry).setRelative(!0):a=a.clone(),null!=this.parent&&null!=t)for(var i=n.getParent(e),s=(i=this.getParentOffset(i),0);s<t.length;s++)t[s].x-=i.x,t[s].y-=i.y;a.points=t,n.setGeometry(e,a)}},mxGraphLayout.prototype.setVertexLocation=function(e,t,n){var a=this.graph.getModel(),i=a.getGeometry(e),s=null;if(null!=i){if(s=new mxRectangle(t,n,i.width,i.height),this.useBoundingBox){var o=this.graph.getView().getState(e);if(null!=o&&null!=o.text&&null!=o.text.boundingBox){var r=this.graph.getView().scale,l=o.text.boundingBox;o.text.boundingBox.x<o.x&&(t+=(o.x-l.x)/r,s.width=l.width),o.text.boundingBox.y<o.y&&(n+=(o.y-l.y)/r,s.height=l.height)}}null!=this.parent&&(null!=(o=a.getParent(e))&&o!=this.parent&&(t-=(o=this.getParentOffset(o)).x,n-=o.y)),i.x==t&&i.y==n||((i=i.clone()).x=t,i.y=n,a.setGeometry(e,i))}return s},mxGraphLayout.prototype.getVertexBounds=function(e){var t=this.graph.getModel().getGeometry(e);if(this.useBoundingBox&&(null!=(r=this.graph.getView().getState(e))&&null!=r.text&&null!=r.text.boundingBox)){var n=this.graph.getView().scale,a=r.text.boundingBox,i=Math.max(r.x-a.x,0)/n,s=Math.max(r.y-a.y,0)/n,o=Math.max(a.x+a.width-(r.x+r.width),0)/n,r=Math.max(a.y+a.height-(r.y+r.height),0)/n;t=new mxRectangle(t.x-i,t.y-s,t.width+i+o,t.height+s+r)}return null!=this.parent&&(e=this.graph.getModel().getParent(e),t=t.clone(),null!=e&&e!=this.parent&&(e=this.getParentOffset(e),t.x+=e.x,t.y+=e.y)),new mxRectangle(t.x,t.y,t.width,t.height)},mxGraphLayout.prototype.arrangeGroups=function(e,t){this.graph.getModel().beginUpdate();try{for(var n=e.length-1;0<=n;n--){var a=e[n],i=this.graph.getChildVertices(a),s=this.graph.getBoundingBoxFromGeometry(i),o=this.graph.getCellGeometry(a),r=0,l=0;if(this.graph.isSwimlane(a)){var d=this.graph.getStartSize(a);r=d.width,l=d.height}null!=s&&null!=o&&((o=o.clone()).x=o.x+s.x-t-r,o.y=o.y+s.y-t-l,o.width=s.width+2*t+r,o.height=s.height+2*t+l,this.graph.getModel().setGeometry(a,o),this.graph.moveCells(i,t+r-s.x,t+l-s.y))}}finally{this.graph.getModel().endUpdate()}},mxStackLayout.prototype=new mxGraphLayout,mxStackLayout.prototype.constructor=mxStackLayout,mxStackLayout.prototype.horizontal=null,mxStackLayout.prototype.spacing=null,mxStackLayout.prototype.x0=null,mxStackLayout.prototype.y0=null,mxStackLayout.prototype.border=0,mxStackLayout.prototype.keepFirstLocation=!1,mxStackLayout.prototype.fill=!1,mxStackLayout.prototype.resizeParent=!1,mxStackLayout.prototype.resizeLast=!1,mxStackLayout.prototype.wrap=null,mxStackLayout.prototype.isHorizontal=function(){return this.horizontal},mxStackLayout.prototype.moveCell=function(e,t,n){var a=this.graph.getModel(),i=a.getParent(e),s=this.isHorizontal();if(null!=e&&null!=i){var o=0,r=0,l=a.getChildCount(i);for(t=s?t:n,null!=(o=this.graph.getView().getState(i))&&(t-=s?o.x:o.y),o=0;o<l;o++)if((n=a.getChildAt(i,o))!=e&&null!=(n=a.getGeometry(n))){if(n=s?n.x+n.width/2:n.y+n.height/2,r<t&&t<n)break;r=n}s=i.getIndex(e),s=Math.max(0,o-(s<o?1:0)),a.add(i,e,s)}},mxStackLayout.prototype.getParentSize=function(e){var t=this.graph.getModel(),n=t.getGeometry(e);return null!=this.graph.container&&(null==n&&t.isLayer(e)||e==this.graph.getView().currentRoot)&&(n=new mxRectangle(0,0,this.graph.container.offsetWidth-1,this.graph.container.offsetHeight-1)),n},mxStackLayout.prototype.execute=function(e){if(null!=e){var t=this.isHorizontal(),n=this.graph.getModel(),a=this.getParentSize(e),i=0;null!=a&&(i=t?a.height:a.width);i=i-(2*this.spacing+2*this.border);var s=this.x0+this.border,o=this.y0+this.border;if(this.graph.isSwimlane(e)){var r=this.graph.getCellStyle(e),l=mxUtils.getValue(r,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE);t==(r=mxUtils.getValue(r,mxConstants.STYLE_HORIZONTAL,!0))&&(i-=l),t?o+=l:s+=l}n.beginUpdate();try{l=0,r=null;for(var d=n.getChildCount(e),c=0;c<d;c++){var m=n.getChildAt(e,c);if(!this.isVertexIgnored(m)&&this.isVertexMovable(m)){var u=n.getGeometry(m);null!=u&&(u=u.clone(),null!=this.wrap&&null!=r&&(t&&r.x+r.width+u.width+2*this.spacing>this.wrap||!t&&r.y+r.height+u.height+2*this.spacing>this.wrap)&&(r=null,t?o+=l+this.spacing:s+=l+this.spacing,l=0),l=Math.max(l,t?u.height:u.width),null!=r?t?u.x=r.x+r.width+this.spacing:u.y=r.y+r.height+this.spacing:this.keepFirstLocation||(t?u.x=s:u.y=o),t?u.y=o:u.x=s,this.fill&&0<i&&(t?u.height=i:u.width=i),n.setGeometry(m,u),r=u)}}this.resizeParent&&null!=a&&null!=r&&!this.graph.isCellCollapsed(e)?(a=a.clone(),t?a.width=r.x+r.width+this.spacing:a.height=r.y+r.height+this.spacing,n.setGeometry(e,a)):this.resizeLast&&null!=a&&null!=r&&(t?r.width=a.width-r.x-this.spacing:r.height=a.height-r.y-this.spacing)}finally{n.endUpdate()}}},mxPartitionLayout.prototype=new mxGraphLayout,mxPartitionLayout.prototype.constructor=mxPartitionLayout,mxPartitionLayout.prototype.horizontal=null,mxPartitionLayout.prototype.spacing=null,mxPartitionLayout.prototype.border=null,mxPartitionLayout.prototype.resizeVertices=!0,mxPartitionLayout.prototype.isHorizontal=function(){return this.horizontal},mxPartitionLayout.prototype.moveCell=function(e,t,n){var a=(n=this.graph.getModel()).getParent(e);if(null!=e&&null!=a){var i=0,s=0,o=n.getChildCount(a);for(i=0;i<o;i++){var r=n.getChildAt(a,i);if(null!=(r=this.getVertexBounds(r))){if(r=r.x+r.width/2,s<t&&t<r)break;s=r}}t=a.getIndex(e),t=Math.max(0,i-(t<i?1:0)),n.add(a,e,t)}},mxPartitionLayout.prototype.execute=function(e){var t=this.isHorizontal(),n=this.graph.getModel(),a=n.getGeometry(e);if(null!=this.graph.container&&(null==a&&n.isLayer(e)||e==this.graph.getView().currentRoot)&&(a=new mxRectangle(0,0,this.graph.container.offsetWidth-1,this.graph.container.offsetHeight-1)),null!=a){for(var i=[],s=n.getChildCount(e),o=0;o<s;o++){var r=n.getChildAt(e,o);!this.isVertexIgnored(r)&&this.isVertexMovable(r)&&i.push(r)}if(0<(s=i.length)){var l=this.border,d=this.border,c=(c=t?a.height:a.width)-2*this.border;if(e=this.graph.isSwimlane(e)?this.graph.getStartSize(e):new mxRectangle,c-=t?e.height:e.width,l+=e.width,d+=e.height,e=this.border+(s-1)*this.spacing,0<(a=t?(a.width-l-e)/s:(a.height-d-e)/s)){n.beginUpdate();try{for(o=0;o<s;o++){r=i[o];var m=n.getGeometry(r);null!=m&&((m=m.clone()).x=l,m.y=d,t?(this.resizeVertices&&(m.width=a,m.height=c),l+=a+this.spacing):(this.resizeVertices&&(m.height=a,m.width=c),d+=a+this.spacing),n.setGeometry(r,m))}}finally{n.endUpdate()}}}}},mxCompactTreeLayout.prototype=new mxGraphLayout,mxCompactTreeLayout.prototype.constructor=mxCompactTreeLayout,mxCompactTreeLayout.prototype.horizontal=null,mxCompactTreeLayout.prototype.invert=null,mxCompactTreeLayout.prototype.resizeParent=!0,mxCompactTreeLayout.prototype.groupPadding=10,mxCompactTreeLayout.prototype.parentsChanged=null,mxCompactTreeLayout.prototype.moveTree=!1,mxCompactTreeLayout.prototype.levelDistance=10,mxCompactTreeLayout.prototype.nodeDistance=20,mxCompactTreeLayout.prototype.resetEdges=!0,mxCompactTreeLayout.prototype.prefHozEdgeSep=5,mxCompactTreeLayout.prototype.prefVertEdgeOff=4,mxCompactTreeLayout.prototype.minEdgeJetty=8,mxCompactTreeLayout.prototype.channelBuffer=4,mxCompactTreeLayout.prototype.edgeRouting=!0,mxCompactTreeLayout.prototype.isVertexIgnored=function(e){return mxGraphLayout.prototype.isVertexIgnored.apply(this,arguments)||0==this.graph.getConnections(e).length},mxCompactTreeLayout.prototype.isHorizontal=function(){return this.horizontal},mxCompactTreeLayout.prototype.execute=function(e,t){this.parent=e;var n=this.graph.getModel();if(null==t)if(0<this.graph.getEdges(e,n.getParent(e),this.invert,!this.invert,!1).length)t=e;else{if(0<(o=this.graph.findTreeRoots(e,!0,this.invert)).length)for(var a=0;a<o.length;a++)if(!this.isVertexIgnored(o[a])&&0<this.graph.getEdges(o[a],null,this.invert,!this.invert,!1).length){t=o[a];break}}if(null!=t){this.parentsChanged=this.resizeParent?{}:null,n.beginUpdate();try{var i=this.dfs(t,e);if(null!=i){this.layout(i);var s=this.graph.gridSize,o=s;if(!this.moveTree){var r=this.getVertexBounds(t);null!=r&&(s=r.x,o=r.y)}if((r=null)!=(r=this.isHorizontal()?this.horizontalLayout(i,s,o):this.verticalLayout(i,null,s,o))){var l=a=0;r.x<0&&(a=Math.abs(s-r.x)),r.y<0&&(l=Math.abs(o-r.y)),(0!=a||0!=l)&&this.moveNode(i,a,l),this.resizeParent&&this.adjustParents(),this.edgeRouting&&this.localEdgeProcessing(i)}}}finally{n.endUpdate()}}},mxCompactTreeLayout.prototype.moveNode=function(e,t,n){for(e.x+=t,e.y+=n,this.apply(e),e=e.child;null!=e;)this.moveNode(e,t,n),e=e.next},mxCompactTreeLayout.prototype.dfs=function(e,t,n){n=null!=n?n:[];var a=mxCellPath.create(e),i=null;if(null!=e&&null==n[a]&&!this.isVertexIgnored(e)){n[a]=e;i=this.createNode(e),a=this.graph.getModel();var s=null;e=this.graph.getEdges(e,t,this.invert,!this.invert,!1,!0);for(var o=this.graph.getView(),r=0;r<e.length;r++){var l=e[r];if(!this.isEdgeIgnored(l)){this.resetEdges&&this.setEdgePoints(l,null),this.edgeRouting&&(this.setEdgeStyleEnabled(l,!1),this.setEdgePoints(l,null));var d;l=null!=(d=o.getState(l))?d.getVisibleTerminal(this.invert):o.getVisibleTerminal(l,this.invert);null!=(d=this.dfs(l,t,n))&&null!=a.getGeometry(l)&&(null==s?i.child=d:s.next=d,s=d)}}}return i},mxCompactTreeLayout.prototype.layout=function(e){if(null!=e){for(var t=e.child;null!=t;)this.layout(t),t=t.next;null!=e.child?this.attachParent(e,this.join(e)):this.layoutLeaf(e)}},mxCompactTreeLayout.prototype.horizontalLayout=function(e,t,n,a){if(e.x+=t+e.offsetX,e.y+=n+e.offsetY,a=this.apply(e,a),null!=(t=e.child)){a=this.horizontalLayout(t,e.x,e.y,a),n=e.y+t.offsetY;for(var i=t.next;null!=i;)a=this.horizontalLayout(i,e.x+t.offsetX,n,a),n+=i.offsetY,i=i.next}return a},mxCompactTreeLayout.prototype.verticalLayout=function(e,t,n,a,i){if(e.x+=n+e.offsetY,e.y+=a+e.offsetX,i=this.apply(e,i),null!=(t=e.child))for(i=this.verticalLayout(t,e,e.x,e.y,i),n=e.x+t.offsetY,a=t.next;null!=a;)i=this.verticalLayout(a,e,n,e.y+t.offsetX,i),n+=a.offsetY,a=a.next;return i},mxCompactTreeLayout.prototype.attachParent=function(e,t){var n=this.nodeDistance+this.levelDistance,a=(t-e.width)/2-this.nodeDistance,i=a+e.width+2*this.nodeDistance-t;e.child.offsetX=n+e.height,e.child.offsetY=i,e.contour.upperHead=this.createLine(e.height,0,this.createLine(n,i,e.contour.upperHead)),e.contour.lowerHead=this.createLine(e.height,0,this.createLine(n,a,e.contour.lowerHead))},mxCompactTreeLayout.prototype.layoutLeaf=function(e){var t=2*this.nodeDistance;e.contour.upperTail=this.createLine(e.height+t,0),e.contour.upperHead=e.contour.upperTail,e.contour.lowerTail=this.createLine(0,-e.width-t),e.contour.lowerHead=this.createLine(e.height+t,0,e.contour.lowerTail)},mxCompactTreeLayout.prototype.join=function(e){var t=2*this.nodeDistance,n=e.child;e.contour=n.contour;var a=n.width+t,i=a;for(n=n.next;null!=n;){var s=this.merge(e.contour,n.contour);n.offsetY=s+a,n.offsetX=0,i+=s+(a=n.width+t),n=n.next}return i},mxCompactTreeLayout.prototype.merge=function(e,t){for(var n=0,a=0,i=0,s=e.lowerHead,o=t.upperHead;null!=o&&null!=s;){var r=this.offset(n,a,o.dx,o.dy,s.dx,s.dy);a=a+r,i=i+r;n+o.dx<=s.dx?(n+=o.dx,a+=o.dy,o=o.next):(n-=s.dx,a-=s.dy,s=s.next)}return null!=o?(n=this.bridge(e.upperTail,0,0,o,n,a),e.upperTail=null!=n.next?t.upperTail:n,e.lowerTail=t.lowerTail):null==(n=this.bridge(t.lowerTail,n,a,s,0,0)).next&&(e.lowerTail=n),e.lowerHead=t.lowerHead,i},mxCompactTreeLayout.prototype.offset=function(e,t,n,a,i,s){var o;return i<=e||e+n<=0?0:0<(o=0<i*a-n*s?e<0?e*a/n-t:0<e?e*s/i-t:-t:i<e+n?s-(t+(i-e)*a/n):e+n<i?(n+e)*s/i-(t+a):s-(t+a))?o:0},mxCompactTreeLayout.prototype.bridge=function(e,t,n,a,i,s){return t=i+a.dx-t,i=i=0,0==a.dx?i=a.dy:(i=t*a.dy,i/=a.dx),t=this.createLine(t,i,a.next),e.next=this.createLine(0,s+a.dy-i-n,t),t},mxCompactTreeLayout.prototype.createNode=function(e){var t={};return t.cell=e,t.x=0,t.y=0,t.width=0,t.height=0,null!=(e=this.getVertexBounds(e))&&(this.isHorizontal()?(t.width=e.height,t.height=e.width):(t.width=e.width,t.height=e.height)),t.offsetX=0,t.offsetY=0,t.contour={},t},mxCompactTreeLayout.prototype.apply=function(e,t){var n=this.graph.getModel(),a=e.cell,i=n.getGeometry(a);return null!=a&&null!=i&&(this.isVertexMovable(a)&&(i=this.setVertexLocation(a,e.x,e.y),this.resizeParent&&(n=n.getParent(a),a=mxCellPath.create(n),null==this.parentsChanged[a]&&(this.parentsChanged[a]=n))),t=null==t?new mxRectangle(i.x,i.y,i.width,i.height):new mxRectangle(Math.min(t.x,i.x),Math.min(t.y,i.y),Math.max(t.x+t.width,i.x+i.width),Math.max(t.y+t.height,i.y+i.height))),t},mxCompactTreeLayout.prototype.createLine=function(e,t,n){var a={};return a.dx=e,a.dy=t,a.next=n,a},mxCompactTreeLayout.prototype.adjustParents=function(){var e,t=[];for(e in this.parentsChanged)t.push(this.parentsChanged[e]);this.arrangeGroups(mxUtils.sortCells(t,!0),this.groupPadding)},mxCompactTreeLayout.prototype.localEdgeProcessing=function(e){for(this.processNodeOutgoing(e),e=e.child;null!=e;)this.localEdgeProcessing(e),e=e.next},mxCompactTreeLayout.prototype.processNodeOutgoing=function(e){for(var t=e.child,n=e.cell,a=0,i=[];null!=t;){a++;var s=t.x;this.horizontal&&(s=t.y),i.push(new WeightedCellSorter(t,s)),t=t.next}i.sort(WeightedCellSorter.prototype.compare),(s=e.width)>(o=(a+1)*this.prefHozEdgeSep)+2*this.prefHozEdgeSep&&(s-=2*this.prefHozEdgeSep),t=(e=s/a)/2,s>o+2*this.prefHozEdgeSep&&(t+=this.prefHozEdgeSep);s=this.minEdgeJetty-this.prefVertEdgeOff;for(var o=0,r=this.getVertexBounds(n),l=0;l<i.length;l++){for(var d=i[l].cell.cell,c=this.getVertexBounds(d),m=(d=this.graph.getEdgesBetween(n,d,!1),[]),u=0,p=0,g=0;g<d.length;g++)this.horizontal?(u=r.x+r.width,p=r.y+t,m.push(new mxPoint(u,p)),u=r.x+r.width+s,m.push(new mxPoint(u,p)),p=c.y+c.height/2):(u=r.x+t,p=r.y+r.height,m.push(new mxPoint(u,p)),p=r.y+r.height+s,m.push(new mxPoint(u,p)),u=c.x+c.width/2),m.push(new mxPoint(u,p)),this.setEdgePoints(d[g],m);l<a/2?s+=this.prefVertEdgeOff:a/2<l&&(s-=this.prefVertEdgeOff),t+=e,o=Math.max(o,s)}},WeightedCellSorter.prototype.weightedValue=0,WeightedCellSorter.prototype.nudge=!1,WeightedCellSorter.prototype.visited=!1,WeightedCellSorter.prototype.rankIndex=null,WeightedCellSorter.prototype.cell=null,WeightedCellSorter.prototype.compare=function(e,t){return null!=e&&null!=t?t.weightedValue>e.weightedValue?1:t.weightedValue<e.weightedValue?-1:t.nudge?1:-1:0},mxFastOrganicLayout.prototype=new mxGraphLayout,mxFastOrganicLayout.prototype.constructor=mxFastOrganicLayout,mxFastOrganicLayout.prototype.useInputOrigin=!0,mxFastOrganicLayout.prototype.resetEdges=!0,mxFastOrganicLayout.prototype.disableEdgeStyle=!0,mxFastOrganicLayout.prototype.forceConstant=50,mxFastOrganicLayout.prototype.forceConstantSquared=0,mxFastOrganicLayout.prototype.minDistanceLimit=2,mxFastOrganicLayout.prototype.maxDistanceLimit=500,mxFastOrganicLayout.prototype.minDistanceLimitSquared=4,mxFastOrganicLayout.prototype.initialTemp=200,mxFastOrganicLayout.prototype.temperature=0,mxFastOrganicLayout.prototype.maxIterations=0,mxFastOrganicLayout.prototype.iteration=0,mxFastOrganicLayout.prototype.allowedToRun=!0,mxFastOrganicLayout.prototype.isVertexIgnored=function(e){return mxGraphLayout.prototype.isVertexIgnored.apply(this,arguments)||0==this.graph.getConnections(e).length},mxFastOrganicLayout.prototype.execute=function(e){var t=this.graph.getModel();this.vertexArray=[];for(var n=this.graph.getChildVertices(e),a=0;a<n.length;a++)this.isVertexIgnored(n[a])||this.vertexArray.push(n[a]);var i=this.useInputOrigin?this.graph.view.getBounds(this.vertexArray):null,s=this.vertexArray.length;for(this.indices=[],this.dispX=[],this.dispY=[],this.cellLocation=[],this.isMoveable=[],this.neighbours=[],this.radius=[],this.radiusSquared=[],this.forceConstant<.001&&(this.forceConstant=.001),this.forceConstantSquared=this.forceConstant*this.forceConstant,a=0;a<this.vertexArray.length;a++){var o=this.vertexArray[a];this.cellLocation[a]=[];var r=mxCellPath.create(o);this.indices[r]=a;var l=this.getVertexBounds(o),d=l.width,c=l.height,m=l.x,u=l.y;this.cellLocation[a][0]=m+d/2,this.cellLocation[a][1]=u+c/2,this.radius[a]=Math.min(d,c),this.radiusSquared[a]=this.radius[a]*this.radius[a]}t.beginUpdate();try{for(a=0;a<s;a++){this.dispX[a]=0,this.dispY[a]=0,this.isMoveable[a]=this.isVertexMovable(this.vertexArray[a]);var p=this.graph.getConnections(this.vertexArray[a],e);n=this.graph.getOpposites(p,this.vertexArray[a]);for(this.neighbours[a]=[],d=0;d<n.length;d++){this.resetEdges&&this.graph.resetEdge(p[d]),this.disableEdgeStyle&&this.setEdgeStyleEnabled(p[d],!1);r=mxCellPath.create(n[d]);var g=this.indices[r];this.neighbours[a][d]=null!=g?g:a}}for(this.temperature=this.initialTemp,0==this.maxIterations&&(this.maxIterations=20*Math.sqrt(s)),this.iteration=0;this.iteration<this.maxIterations;this.iteration++){if(!this.allowedToRun)return;this.calcRepulsion(),this.calcAttraction(),this.calcPositions(),this.reduceTemperature()}for(e=n=null,a=0;a<this.vertexArray.length;a++)o=this.vertexArray[a],this.isVertexMovable(o)&&(null!=(l=this.getVertexBounds(o))&&(this.cellLocation[a][0]-=l.width/2,this.cellLocation[a][1]-=l.height/2,m=this.graph.snap(this.cellLocation[a][0]),u=this.graph.snap(this.cellLocation[a][1]),this.setVertexLocation(o,m,u),n=null==n?m:Math.min(n,m),e=null==e?u:Math.min(e,u)));a=1-(n||0),o=1-(e||0),null!=i&&(a+=i.x,o+=i.y),this.graph.moveCells(this.vertexArray,a,o)}finally{t.endUpdate()}},mxFastOrganicLayout.prototype.calcPositions=function(){for(var e=0;e<this.vertexArray.length;e++)if(this.isMoveable[e]){(n=Math.sqrt(this.dispX[e]*this.dispX[e]+this.dispY[e]*this.dispY[e]))<.001&&(n=.001);var t=this.dispX[e]/n*Math.min(n,this.temperature),n=this.dispY[e]/n*Math.min(n,this.temperature);this.dispX[e]=0,this.dispY[e]=0,this.cellLocation[e][0]+=t,this.cellLocation[e][1]+=n}},mxFastOrganicLayout.prototype.calcAttraction=function(){for(var e=0;e<this.vertexArray.length;e++)for(var t=0;t<this.neighbours[e].length;t++){var n=this.neighbours[e][t];if(e!=n&&this.isMoveable[e]&&this.isMoveable[n]){(a=(s=this.cellLocation[e][0]-this.cellLocation[n][0])*s+(o=this.cellLocation[e][1]-this.cellLocation[n][1])*o-this.radiusSquared[e]-this.radiusSquared[n])<this.minDistanceLimitSquared&&(a=this.minDistanceLimitSquared);var a,i=Math.sqrt(a),s=s/i*(a=a/this.forceConstant),o=o/i*a;this.dispX[e]-=s,this.dispY[e]-=o,this.dispX[n]+=s,this.dispY[n]+=o}}},mxFastOrganicLayout.prototype.calcRepulsion=function(){for(var e=this.vertexArray.length,t=0;t<e;t++)for(var n=t;n<e;n++){if(!this.allowedToRun)return;if(n!=t&&this.isMoveable[t]&&this.isMoveable[n]){var a=this.cellLocation[t][0]-this.cellLocation[n][0],i=this.cellLocation[t][1]-this.cellLocation[n][1];0==a&&(a=.01+Math.random()),0==i&&(i=.01+Math.random());var s=Math.sqrt(a*a+i*i),o=s-this.radius[t]-this.radius[n];o>this.maxDistanceLimit||(o<this.minDistanceLimit&&(o=this.minDistanceLimit),a=a/s*(o=this.forceConstantSquared/o),i=i/s*o,this.dispX[t]+=a,this.dispY[t]+=i,this.dispX[n]-=a,this.dispY[n]-=i)}}},mxFastOrganicLayout.prototype.reduceTemperature=function(){this.temperature=this.initialTemp*(1-this.iteration/this.maxIterations)},mxCircleLayout.prototype=new mxGraphLayout,mxCircleLayout.prototype.constructor=mxCircleLayout,mxCircleLayout.prototype.radius=null,mxCircleLayout.prototype.moveCircle=!1,mxCircleLayout.prototype.x0=0,mxCircleLayout.prototype.y0=0,mxCircleLayout.prototype.resetEdges=!0,mxCircleLayout.prototype.disableEdgeStyle=!0,mxCircleLayout.prototype.execute=function(e){var t=this.graph.getModel();t.beginUpdate();try{for(var n=0,a=null,i=null,s=[],o=t.getChildCount(e),r=0;r<o;r++){var l=t.getChildAt(e,r);if(this.isVertexIgnored(l))this.isEdgeIgnored(l)||(this.resetEdges&&this.graph.resetEdge(l),this.disableEdgeStyle&&this.setEdgeStyleEnabled(l,!1));else{s.push(l);var d=this.getVertexBounds(l);a=null==a?d.y:Math.min(a,d.y),i=null==i?d.x:Math.min(i,d.x),n=Math.max(n,Math.max(d.width,d.height))}}var c=this.getRadius(s.length,n);this.moveCircle&&(i=this.x0,a=this.y0),this.circle(s,c,i,a)}finally{t.endUpdate()}},mxCircleLayout.prototype.getRadius=function(e,t){return Math.max(e*t/Math.PI,this.radius)},mxCircleLayout.prototype.circle=function(e,t,n,a){for(var i=e.length,s=2*Math.PI/i,o=0;o<i;o++)this.isVertexMovable(e[o])&&this.setVertexLocation(e[o],n+t+t*Math.sin(o*s),a+t+t*Math.cos(o*s))},mxParallelEdgeLayout.prototype=new mxGraphLayout,mxParallelEdgeLayout.prototype.constructor=mxParallelEdgeLayout,mxParallelEdgeLayout.prototype.spacing=20,mxParallelEdgeLayout.prototype.execute=function(e){e=this.findParallels(e),this.graph.model.beginUpdate();try{for(var t in e){var n=e[t];1<n.length&&this.layout(n)}}finally{this.graph.model.endUpdate()}},mxParallelEdgeLayout.prototype.findParallels=function(e){for(var t=this.graph.getModel(),n=[],a=t.getChildCount(e),i=0;i<a;i++){var s=t.getChildAt(e,i);if(!this.isEdgeIgnored(s)){var o=this.getEdgeId(s);null!=o&&(null==n[o]&&(n[o]=[]),n[o].push(s))}}return n},mxParallelEdgeLayout.prototype.getEdgeId=function(e){var t=this.graph.getView(),n=t.getState(e),a=null!=n?n.getVisibleTerminal(!0):t.getVisibleTerminal(e,!0);return e=null!=n?n.getVisibleTerminal(!1):t.getVisibleTerminal(e,!1),null!=a&&null!=e?(a=mxCellPath.create(a),(e=mxCellPath.create(e))<a?e+"-"+a:a+"-"+e):null},mxParallelEdgeLayout.prototype.layout=function(e){var t=e[0];if((o=(n=this.graph.getModel()).getGeometry(n.getTerminal(t,!0)))==(s=n.getGeometry(n.getTerminal(t,!1)))){t=o.x+o.width+this.spacing;for(var n=o.y+o.height/2,a=0;a<e.length;a++)this.route(e[a],t,n),t+=this.spacing}else if(null!=o&&null!=s){t=o.x+o.width/2,n=o.y+o.height/2,a=s.x+s.width/2-t;var i=s.y+s.height/2-n,s=Math.sqrt(a*a+i*i),o=i*this.spacing/s;for(s=a*this.spacing/s,t=t+a/2+o*(e.length-1)/2,n=n+i/2-s*(e.length-1)/2,a=0;a<e.length;a++)this.route(e[a],t,n),t-=o,n+=s}},mxParallelEdgeLayout.prototype.route=function(e,t,n){this.graph.isCellMovable(e)&&this.setEdgePoints(e,[new mxPoint(t,n)])},mxCompositeLayout.prototype=new mxGraphLayout,mxCompositeLayout.prototype.constructor=mxCompositeLayout,mxCompositeLayout.prototype.layouts=null,mxCompositeLayout.prototype.master=null,mxCompositeLayout.prototype.moveCell=function(e,t,n){null!=this.master?this.master.move.apply(this.master,arguments):this.layouts[0].move.apply(this.layouts[0],arguments)},mxCompositeLayout.prototype.execute=function(e){var t=this.graph.getModel();t.beginUpdate();try{for(var n=0;n<this.layouts.length;n++)this.layouts[n].execute.apply(this.layouts[n],arguments)}finally{t.endUpdate()}},mxEdgeLabelLayout.prototype=new mxGraphLayout,mxEdgeLabelLayout.prototype.constructor=mxEdgeLabelLayout,mxEdgeLabelLayout.prototype.execute=function(e){for(var t=this.graph.view,n=this.graph.getModel(),a=[],i=[],s=n.getChildCount(e),o=0;o<s;o++){var r=n.getChildAt(e,o),l=t.getState(r);null!=l&&(this.isVertexIgnored(r)?this.isEdgeIgnored(r)||a.push(l):i.push(l))}this.placeLabels(i,a)},mxEdgeLabelLayout.prototype.placeLabels=function(e,t){var n=this.graph.getModel();n.beginUpdate();try{for(var a=0;a<t.length;a++){var i=t[a];if(null!=i&&null!=i.text&&null!=i.text.boundingBox)for(var s=0;s<e.length;s++){var o=e[s];null!=o&&this.avoid(i,o)}}}finally{n.endUpdate()}},mxEdgeLabelLayout.prototype.avoid=function(e,t){var n=this.graph.getModel(),a=e.text.boundingBox;if(mxUtils.intersects(a,t)){var i=-a.y-a.height+t.y,s=-a.y+t.y+t.height;i=Math.abs(i)<Math.abs(s)?i:s,s=-a.x-a.width+t.x,a=-a.x+t.x+t.width,a=Math.abs(s)<Math.abs(a)?s:a;Math.abs(a)<Math.abs(i)?i=0:a=0,null!=(s=n.getGeometry(e.cell))&&(null!=(s=s.clone()).offset?(s.offset.x+=a,s.offset.y+=i):s.offset=new mxPoint(a,i),n.setGeometry(e.cell,s))}},mxGraphAbstractHierarchyCell.prototype.maxRank=-1,mxGraphAbstractHierarchyCell.prototype.minRank=-1,mxGraphAbstractHierarchyCell.prototype.x=null,mxGraphAbstractHierarchyCell.prototype.y=null,mxGraphAbstractHierarchyCell.prototype.width=0,mxGraphAbstractHierarchyCell.prototype.height=0,mxGraphAbstractHierarchyCell.prototype.nextLayerConnectedCells=null,mxGraphAbstractHierarchyCell.prototype.previousLayerConnectedCells=null,mxGraphAbstractHierarchyCell.prototype.temp=null,mxGraphAbstractHierarchyCell.prototype.getNextLayerConnectedCells=function(e){return null},mxGraphAbstractHierarchyCell.prototype.getPreviousLayerConnectedCells=function(e){return null},mxGraphAbstractHierarchyCell.prototype.isEdge=function(){return!1},mxGraphAbstractHierarchyCell.prototype.isVertex=function(){return!1},mxGraphAbstractHierarchyCell.prototype.getGeneralPurposeVariable=function(e){return null},mxGraphAbstractHierarchyCell.prototype.setGeneralPurposeVariable=function(e,t){return null},mxGraphAbstractHierarchyCell.prototype.setX=function(e,t){this.isVertex()?this.x[0]=t:this.isEdge()&&(this.x[e-this.minRank-1]=t)},mxGraphAbstractHierarchyCell.prototype.getX=function(e){return this.isVertex()?this.x[0]:this.isEdge()?this.x[e-this.minRank-1]:0},mxGraphAbstractHierarchyCell.prototype.setY=function(e,t){this.isVertex()?this.y[0]=t:this.isEdge()&&(this.y[e-this.minRank-1]=t)},mxGraphHierarchyNode.prototype=new mxGraphAbstractHierarchyCell,mxGraphHierarchyNode.prototype.constructor=mxGraphHierarchyNode,mxGraphHierarchyNode.prototype.cell=null,mxGraphHierarchyNode.prototype.connectsAsTarget=[],mxGraphHierarchyNode.prototype.connectsAsSource=[],mxGraphHierarchyNode.prototype.hashCode=!1,mxGraphHierarchyNode.prototype.getRankValue=function(e){return this.maxRank},mxGraphHierarchyNode.prototype.getNextLayerConnectedCells=function(e){if(null==this.nextLayerConnectedCells){this.nextLayerConnectedCells=[],this.nextLayerConnectedCells[0]=[];for(var t=0;t<this.connectsAsTarget.length;t++){var n=this.connectsAsTarget[t];-1==n.maxRank||n.maxRank==e+1?this.nextLayerConnectedCells[0].push(n.source):this.nextLayerConnectedCells[0].push(n)}}return this.nextLayerConnectedCells[0]},mxGraphHierarchyNode.prototype.getPreviousLayerConnectedCells=function(e){if(null==this.previousLayerConnectedCells){this.previousLayerConnectedCells=[],this.previousLayerConnectedCells[0]=[];for(var t=0;t<this.connectsAsSource.length;t++){var n=this.connectsAsSource[t];-1==n.minRank||n.minRank==e-1?this.previousLayerConnectedCells[0].push(n.target):this.previousLayerConnectedCells[0].push(n)}}return this.previousLayerConnectedCells[0]},mxGraphHierarchyNode.prototype.isVertex=function(){return!0},mxGraphHierarchyNode.prototype.getGeneralPurposeVariable=function(e){return this.temp[0]},mxGraphHierarchyNode.prototype.setGeneralPurposeVariable=function(e,t){this.temp[0]=t},mxGraphHierarchyNode.prototype.isAncestor=function(e){if(null!=e&&null!=this.hashCode&&null!=e.hashCode&&this.hashCode.length<e.hashCode.length){if(this.hashCode==e.hashCode)return!0;if(null==this.hashCode||null==this.hashCode)return!1;for(var t=0;t<this.hashCode.length;t++)if(this.hashCode[t]!=e.hashCode[t])return!1;return!0}return!1},mxGraphHierarchyNode.prototype.getCoreCell=function(){return this.cell},mxGraphHierarchyEdge.prototype=new mxGraphAbstractHierarchyCell,mxGraphHierarchyEdge.prototype.constructor=mxGraphHierarchyEdge,mxGraphHierarchyEdge.prototype.edges=null,mxGraphHierarchyEdge.prototype.source=null,mxGraphHierarchyEdge.prototype.target=null,mxGraphHierarchyEdge.prototype.isReversed=!1,mxGraphHierarchyEdge.prototype.invert=function(e){e=this.source,this.source=this.target,this.target=e,this.isReversed=!this.isReversed},mxGraphHierarchyEdge.prototype.getNextLayerConnectedCells=function(e){if(null==this.nextLayerConnectedCells){this.nextLayerConnectedCells=[];for(var t=0;t<this.temp.length;t++)this.nextLayerConnectedCells[t]=[],t==this.temp.length-1?this.nextLayerConnectedCells[t].push(this.source):this.nextLayerConnectedCells[t].push(this)}return this.nextLayerConnectedCells[e-this.minRank-1]},mxGraphHierarchyEdge.prototype.getPreviousLayerConnectedCells=function(e){if(null==this.previousLayerConnectedCells){this.previousLayerConnectedCells=[];for(var t=0;t<this.temp.length;t++)this.previousLayerConnectedCells[t]=[],0==t?this.previousLayerConnectedCells[t].push(this.target):this.previousLayerConnectedCells[t].push(this)}return this.previousLayerConnectedCells[e-this.minRank-1]},mxGraphHierarchyEdge.prototype.isEdge=function(){return!0},mxGraphHierarchyEdge.prototype.getGeneralPurposeVariable=function(e){return this.temp[e-this.minRank-1]},mxGraphHierarchyEdge.prototype.setGeneralPurposeVariable=function(e,t){this.temp[e-this.minRank-1]=t},mxGraphHierarchyEdge.prototype.getCoreCell=function(){return null!=this.edges&&0<this.edges.length?this.edges[0]:null},mxGraphHierarchyModel.prototype.maxRank=null,mxGraphHierarchyModel.prototype.vertexMapper=null,mxGraphHierarchyModel.prototype.edgeMapper=null,mxGraphHierarchyModel.prototype.ranks=null,mxGraphHierarchyModel.prototype.roots=null,mxGraphHierarchyModel.prototype.parent=null,mxGraphHierarchyModel.prototype.dfsCount=0,mxGraphHierarchyModel.prototype.SOURCESCANSTARTRANK=1e8,mxGraphHierarchyModel.prototype.tightenToSource=!1,mxGraphHierarchyModel.prototype.createInternalCells=function(e,t,n){for(var a=e.getGraph(),i=0;i<t.length;i++){n[i]=new mxGraphHierarchyNode(t[i]);var s=mxCellPath.create(t[i]);this.vertexMapper[s]=n[i],s=e.getEdges(t[i]),n[i].connectsAsSource=[];for(var o=0;o<s.length;o++){if((d=e.getVisibleTerminal(s[o],!1))!=t[i]&&d!=t[i]&&e.graph.model.isVertex(d)&&!e.isVertexIgnored(d)){var r=e.getEdgesBetween(t[i],d,!1),l=e.getEdgesBetween(t[i],d,!0),d=mxCellPath.create(r[0]);if(null!=r&&0<r.length&&null==this.edgeMapper[d]&&2*l.length>=r.length){l=new mxGraphHierarchyEdge(r);for(var c=0;c<r.length;c++){var m=r[c];d=mxCellPath.create(m);this.edgeMapper[d]=l,a.resetEdge(m),e.disableEdgeStyle&&(e.setEdgeStyleEnabled(m,!1),e.setOrthogonalEdge(m,!0))}l.source=n[i],mxUtils.indexOf(n[i].connectsAsSource,l)<0&&n[i].connectsAsSource.push(l)}}}n[i].temp[0]=0}},mxGraphHierarchyModel.prototype.initialRank=function(){var e=[];if(null!=this.roots)for(var t=0;t<this.roots.length;t++){var n=mxCellPath.create(this.roots[t]);null!=(n=this.vertexMapper[n])&&e.push(n)}for(var a in this.vertexMapper)(n=this.vertexMapper[a]).temp[0]=-1;for(var i=e.slice();0<e.length;){var s,o;s=(n=e[0]).connectsAsTarget,o=n.connectsAsSource;var r=!0,l=this.SOURCESCANSTARTRANK;for(t=0;t<s.length;t++){var d=s[t];if(5270620!=d.temp[0]){r=!1;break}d=d.source,l=Math.min(l,d.temp[0]-1)}if(r){if(n.temp[0]=l,this.maxRank=Math.min(this.maxRank,l),null!=o)for(t=0;t<o.length;t++)(d=o[t]).temp[0]=5270620,-1==(d=d.target).temp[0]&&(e.push(d),d.temp[0]=-2);e.shift()}else if(t=e.shift(),e.push(n),t==n&&1==e.length)break}for(a in this.vertexMapper)(n=this.vertexMapper[a]).temp[0]-=this.maxRank;for(t=0;t<i.length;t++)for(e=0,s=(n=i[t]).connectsAsSource,a=0;a<s.length;a++)d=(d=s[a]).target,n.temp[0]=Math.max(e,d.temp[0]+1),e=n.temp[0];this.maxRank=this.SOURCESCANSTARTRANK-this.maxRank},mxGraphHierarchyModel.prototype.fixRanks=function(){var s=[];this.ranks=[];for(var e=0;e<this.maxRank+1;e++)s[e]=[],this.ranks[e]=s[e];var t=null;if(null!=this.roots){var n=this.roots;for(t=[],e=0;e<n.length;e++){var a=mxCellPath.create(n[e]);t[e]=this.vertexMapper[a]}}this.visit(function(e,t,n,a,i){if(0==i&&t.maxRank<0&&t.minRank<0&&(s[t.temp[0]].push(t),t.maxRank=t.temp[0],t.minRank=t.temp[0],t.temp[0]=s[t.maxRank].length-1),null!=e&&null!=n&&1<e.maxRank-t.maxRank)for(n.maxRank=e.maxRank,n.minRank=t.maxRank,n.temp=[],n.x=[],n.y=[],e=n.minRank+1;e<n.maxRank;e++)s[e].push(n),n.setGeneralPurposeVariable(e,s[e].length-1)},t,!1,null)},mxGraphHierarchyModel.prototype.visit=function(e,t,n,a){if(null!=t){for(var i=0;i<t.length;i++){var s=t[i];null!=s&&(null==a&&(a={}),n?(s.hashCode=[],s.hashCode[0]=this.dfsCount,s.hashCode[1]=i,this.extendedDfs(null,s,null,e,a,s.hashCode,i,0)):this.dfs(null,s,null,e,a,0))}this.dfsCount++}},mxGraphHierarchyModel.prototype.dfs=function(e,t,n,a,i,s){if(null!=t){var o=mxCellPath.create(t.cell);if(null==i[o])for(a(e,i[o]=t,n,s,0),e=t.connectsAsSource.slice(),n=0;n<e.length;n++)o=e[n],this.dfs(t,o.target,o,a,i,s+1);else a(e,t,n,s,1)}},mxGraphHierarchyModel.prototype.extendedDfs=function(e,t,n,a,i,s,o,r){if(null!=t)if(null==e||null!=t.hashCode&&t.hashCode[0]==e.hashCode[0]||(s=e.hashCode.length+1,t.hashCode=e.hashCode.slice(),t.hashCode[s-1]=o),null==i[o=mxCellPath.create(t.cell)])for(a(e,i[o]=t,n,r,0),e=t.connectsAsSource.slice(),n=0;n<e.length;n++)o=e[n],this.extendedDfs(t,o.target,o,a,i,t.hashCode,n,r+1);else a(e,t,n,r,1)},mxHierarchicalLayoutStage.prototype.execute=function(e){},mxMedianHybridCrossingReduction.prototype=new mxHierarchicalLayoutStage,mxMedianHybridCrossingReduction.prototype.constructor=mxMedianHybridCrossingReduction,mxMedianHybridCrossingReduction.prototype.layout=null,mxMedianHybridCrossingReduction.prototype.maxIterations=24,mxMedianHybridCrossingReduction.prototype.nestedBestRanks=null,mxMedianHybridCrossingReduction.prototype.currentBestCrossings=0,mxMedianHybridCrossingReduction.prototype.iterationsWithoutImprovement=0,mxMedianHybridCrossingReduction.prototype.maxNoImprovementIterations=2,mxMedianHybridCrossingReduction.prototype.execute=function(e){e=this.layout.getModel(),this.nestedBestRanks=[];for(var t=0;t<e.ranks.length;t++)this.nestedBestRanks[t]=e.ranks[t].slice();var n=0,a=this.calculateCrossings(e);for(t=0;t<this.maxIterations&&n<this.maxNoImprovementIterations;t++){this.weightedMedian(t,e),this.transpose(t,e);var i=this.calculateCrossings(e);if(i<a)for(a=i,i=n=0;i<this.nestedBestRanks.length;i++)for(var s=e.ranks[i],o=0;o<s.length;o++){var r=s[o];this.nestedBestRanks[i][r.getGeneralPurposeVariable(i)]=r}else for(n++,i=0;i<this.nestedBestRanks.length;i++)for(s=e.ranks[i],o=0;o<s.length;o++)(r=s[o]).setGeneralPurposeVariable(i,o);if(0==a)break}for(n=[],a=[],t=0;t<e.maxRank+1;t++)a[t]=[],n[t]=a[t];for(t=0;t<this.nestedBestRanks.length;t++)for(i=0;i<this.nestedBestRanks[t].length;i++)a[t].push(this.nestedBestRanks[t][i]);e.ranks=n},mxMedianHybridCrossingReduction.prototype.calculateCrossings=function(e){for(var t=e.ranks.length,n=0,a=1;a<t;a++)n+=this.calculateRankCrossing(a,e);return n},mxMedianHybridCrossingReduction.prototype.calculateRankCrossing=function(e,t){for(var n=0,a=t.ranks[e],i=a.length,s=t.ranks[e-1].length,o=[],r=0;r<i;r++)o[r]=[];for(r=0;r<a.length;r++)for(var l=(c=a[r]).getGeneralPurposeVariable(e),d=c.getPreviousLayerConnectedCells(e),c=0;c<d.length;c++){var m=d[c].getGeneralPurposeVariable(e-1);o[l][m]=201207}for(r=0;r<i;r++)for(c=0;c<s;c++)if(201207==o[r][c]){for(a=r+1;a<i;a++)for(l=0;l<c;l++)201207==o[a][l]&&n++;for(a=0;a<r;a++)for(l=c+1;l<s;l++)201207==o[a][l]&&n++}return n/2},mxMedianHybridCrossingReduction.prototype.transpose=function(e,t){for(var n=!0,a=0;n&&a++<10;)for(var i=1==e%2&&1==a%2,s=(n=!1,0);s<t.ranks.length;s++){for(var o=t.ranks[s],r=[],l=0;l<o.length;l++){(b=(f=o[l]).getGeneralPurposeVariable(s))<0&&(b=l),r[b]=f}var d=b=f=null,c=null,m=null,u=null,p=null,g=null,v=null,h=null;for(l=0;l<o.length-1;l++){if(0==l){for(var f=(v=r[l]).getNextLayerConnectedCells(s),b=v.getPreviousLayerConnectedCells(s),A=(m=[],u=[],0);A<f.length;A++)m[A]=f[A].getGeneralPurposeVariable(s+1);for(A=0;A<b.length;A++)u[A]=b[A].getGeneralPurposeVariable(s-1)}else f=d,b=c,m=p,u=g,v=h;for(d=(h=r[l+1]).getNextLayerConnectedCells(s),c=h.getPreviousLayerConnectedCells(s),p=[],g=[],A=0;A<d.length;A++)p[A]=d[A].getGeneralPurposeVariable(s+1);for(A=0;A<c.length;A++)g[A]=c[A].getGeneralPurposeVariable(s-1);var E=0,y=0;for(A=0;A<m.length;A++)for(var S=0;S<p.length;S++)m[A]>p[S]&&E++,m[A]<p[S]&&y++;for(A=0;A<u.length;A++)for(S=0;S<g.length;S++)u[A]>g[S]&&E++,u[A]<g[S]&&y++;(y<E||y==E&&i)&&(d=v.getGeneralPurposeVariable(s),v.setGeneralPurposeVariable(s,h.getGeneralPurposeVariable(s)),h.setGeneralPurposeVariable(s,d),d=f,c=b,p=m,g=u,h=v,i||(n=!0))}}},mxMedianHybridCrossingReduction.prototype.weightedMedian=function(e,t){var n=0==e%2;if(n)for(var a=t.maxRank-1;0<=a;a--)this.medianRank(a,n);else for(a=1;a<t.maxRank;a++)this.medianRank(a,n)},mxMedianHybridCrossingReduction.prototype.medianRank=function(e,t){for(var n=this.nestedBestRanks[e].length,a=[],i=[],s=0;s<n;s++){var o,r,l=this.nestedBestRanks[e][s],d=new MedianCellSorter;d.cell=l,r=t?e+1:e-1,null!=(o=t?l.getNextLayerConnectedCells(e):l.getPreviousLayerConnectedCells(e))&&0!=o.length?(d.medianValue=this.medianValue(o,r),a.push(d)):i[l.getGeneralPurposeVariable(e)]=!0}for(a.sort(MedianCellSorter.prototype.compare),s=0;s<n;s++)null==i[s]&&(l=a.shift().cell).setGeneralPurposeVariable(e,s)},mxMedianHybridCrossingReduction.prototype.medianValue=function(e,t){for(var n=[],a=0,i=0;i<e.length;i++){var s=e[i];n[a++]=s.getGeneralPurposeVariable(t)}return n.sort(function(e,t){return e-t}),1==a%2?n[Math.floor(a/2)]:2==a?(n[0]+n[1])/2:(s=n[(i=a/2)-1]-n[0],a=n[a-1]-n[i],(n[i-1]*a+n[i]*s)/(s+a))},MedianCellSorter.prototype.medianValue=0,MedianCellSorter.prototype.cell=!1,MedianCellSorter.prototype.compare=function(e,t){return null!=e&&null!=t?t.medianValue>e.medianValue?-1:t.medianValue<e.medianValue?1:0:0},mxMinimumCycleRemover.prototype=new mxHierarchicalLayoutStage,mxMinimumCycleRemover.prototype.constructor=mxMinimumCycleRemover,mxMinimumCycleRemover.prototype.layout=null,mxMinimumCycleRemover.prototype.execute=function(e){var t=this.layout.getModel(),s={},o=mxUtils.clone(t.vertexMapper,null,!0),n=null;if(null!=t.roots){var a=t.roots;n=[];for(e=0;e<a.length;e++){var i=mxCellPath.create(a[e]);n[e]=t.vertexMapper[i]}}if(t.visit(function(e,t,n,a,i){t.isAncestor(e)&&(n.invert(),mxUtils.remove(n,e.connectsAsSource),e.connectsAsTarget.push(n),mxUtils.remove(n,t.connectsAsTarget),t.connectsAsSource.push(n)),e=mxCellPath.create(t.cell),s[e]=t,delete o[e]},n,!0,null),n=null,0<o.lenth&&(n=mxUtils.clone(o,null,!0)),e=mxUtils.clone(s,null,!0),t.visit(function(e,t,n,a,i){t.isAncestor(e)&&(n.invert(),mxUtils.remove(n,e.connectsAsSource),t.connectsAsSource.push(n),e.connectsAsTarget.push(n),mxUtils.remove(n,t.connectsAsTarget)),e=mxCellPath.create(t.cell),s[e]=t,delete o[e]},o,!0,e),a=this.layout.getGraph(),null!=n&&0<n.length)for(t=t.roots,e=0;e<n.length;e++)i=n[e].cell,0==a.getIncomingEdges(i).length&&t.push(i)};var mxHierarchicalEdgeStyle={ORTHOGONAL:1,POLYLINE:2,STRAIGHT:3,CURVE:4};function WeightedCellSorter(e,t){this.cell=e,this.weightedValue=t}function mxHierarchicalLayout(e,t,n){mxGraphLayout.call(this,e),this.orientation=null!=t?t:mxConstants.DIRECTION_NORTH,this.deterministic=null==n||n}function mxGraphModel(e){this.currentEdit=this.createUndoableEdit(),null!=e?this.setRoot(e):this.clear()}function mxRootChange(e,t){this.model=e,this.previous=this.root=t}function mxChildChange(e,t,n,a){this.model=e,this.previous=this.parent=t,this.child=n,this.previousIndex=this.index=a}function mxTerminalChange(e,t,n,a){this.model=e,this.cell=t,this.previous=this.terminal=n,this.source=a}function mxValueChange(e,t,n){this.model=e,this.cell=t,this.previous=this.value=n}function mxStyleChange(e,t,n){this.model=e,this.cell=t,this.previous=this.style=n}function mxGeometryChange(e,t,n){this.model=e,this.cell=t,this.previous=this.geometry=n}function mxCollapseChange(e,t,n){this.model=e,this.cell=t,this.previous=this.collapsed=n}function mxVisibleChange(e,t,n){this.model=e,this.cell=t,this.previous=this.visible=n}function mxCellAttributeChange(e,t,n){this.cell=e,this.attribute=t,this.previous=this.value=n}function mxCell(e,t,n){this.value=e,this.setGeometry(t),this.setStyle(n),null!=this.onInit&&this.onInit()}function mxGeometry(e,t,n,a){mxRectangle.call(this,e,t,n,a)}mxCoordinateAssignment.prototype=new mxHierarchicalLayoutStage,mxCoordinateAssignment.prototype.constructor=mxCoordinateAssignment,mxCoordinateAssignment.prototype.layout=null,mxCoordinateAssignment.prototype.intraCellSpacing=30,mxCoordinateAssignment.prototype.interRankCellSpacing=100,mxCoordinateAssignment.prototype.parallelEdgeSpacing=10,mxCoordinateAssignment.prototype.maxIterations=8,mxCoordinateAssignment.prototype.prefHozEdgeSep=5,mxCoordinateAssignment.prototype.prefVertEdgeOff=2,mxCoordinateAssignment.prototype.minEdgeJetty=12,mxCoordinateAssignment.prototype.channelBuffer=4,mxCoordinateAssignment.prototype.jettyPositions=null,mxCoordinateAssignment.prototype.orientation=mxConstants.DIRECTION_NORTH,mxCoordinateAssignment.prototype.initialX=null,mxCoordinateAssignment.prototype.limitX=null,mxCoordinateAssignment.prototype.currentXDelta=null,mxCoordinateAssignment.prototype.widestRank=null,mxCoordinateAssignment.prototype.rankTopY=null,mxCoordinateAssignment.prototype.rankBottomY=null,mxCoordinateAssignment.prototype.widestRankValue=null,mxCoordinateAssignment.prototype.rankWidths=null,mxCoordinateAssignment.prototype.rankY=null,mxCoordinateAssignment.prototype.fineTuning=!0,mxCoordinateAssignment.prototype.edgeStyle=mxHierarchicalEdgeStyle.POLYLINE,mxCoordinateAssignment.prototype.nextLayerConnectedCache=null,mxCoordinateAssignment.prototype.previousLayerConnectedCache=null,mxCoordinateAssignment.prototype.groupPadding=10,mxCoordinateAssignment.prototype.printStatus=function(){var e=this.layout.getModel();mxLog.show(),mxLog.writeln("======Coord assignment debug=======");for(var t=0;t<e.ranks.length;t++){mxLog.write("Rank ",t," : ");for(var n=e.ranks[t],a=0;a<n.length;a++)mxLog.write(n[a].getGeneralPurposeVariable(t),"  ");mxLog.writeln()}mxLog.writeln("====================================")},mxCoordinateAssignment.prototype.execute=function(e){this.jettyPositions=[],e=this.layout.getModel(),this.currentXDelta=0,this.initialCoords(this.layout.getGraph(),e),this.fineTuning&&this.minNode(e);var t=1e8;if(this.fineTuning)for(var n=0;n<this.maxIterations;n++){if(0!=n&&(this.medianPos(n,e),this.minNode(e)),this.currentXDelta<t){for(var a=0;a<e.ranks.length;a++)for(var i=e.ranks[a],s=0;s<i.length;s++){var o=i[s];o.setX(a,o.getGeneralPurposeVariable(a))}t=this.currentXDelta}else for(a=0;a<e.ranks.length;a++)for(i=e.ranks[a],s=0;s<i.length;s++)(o=i[s]).setGeneralPurposeVariable(a,o.getX(a));this.minPath(this.layout.getGraph(),e),this.currentXDelta=0}this.setCellLocations(this.layout.getGraph(),e)},mxCoordinateAssignment.prototype.minNode=function(e){for(var t=[],n=[],a=[],i=0;i<=e.maxRank;i++){a[i]=e.ranks[i];for(var s=0;s<a[i].length;s++){var o=a[i][s];(r=new WeightedCellSorter(o,i)).rankIndex=s,r.visited=!0,t.push(r),n[o=mxCellPath.create(o.getCoreCell())]=r}}for(e=10*t.length,s=0;0<t.length&&s<=e;){i=(r=t.shift()).cell;var r,l=r.weightedValue,d=parseInt(r.rankIndex),c=(o=i.getNextLayerConnectedCells(l),i.getPreviousLayerConnectedCells(l)),m=o.length,u=c.length,p=this.medianXValue(o,l+1),g=this.medianXValue(c,l-1),v=m+u,h=i.getGeneralPurposeVariable(l),f=h;if(0<v&&(f=(p*m+g*u)/v),m=!1,f<h-1?0==d?(i.setGeneralPurposeVariable(l,f),m=!0):(h=(h=(d=a[l][d-1]).getGeneralPurposeVariable(l))+d.width/2+this.intraCellSpacing+i.width/2)<f?(i.setGeneralPurposeVariable(l,f),m=!0):h<i.getGeneralPurposeVariable(l)-1&&(i.setGeneralPurposeVariable(l,h),m=!0):h+1<f&&(d==a[l].length-1?(i.setGeneralPurposeVariable(l,f),m=!0):f<(h=(h=(d=a[l][d+1]).getGeneralPurposeVariable(l))-d.width/2-this.intraCellSpacing-i.width/2)?(i.setGeneralPurposeVariable(l,f),m=!0):h>i.getGeneralPurposeVariable(l)+1&&(i.setGeneralPurposeVariable(l,h),m=!0)),m){for(i=0;i<o.length;i++)l=o[i],null!=(l=n[l=mxCellPath.create(l.getCoreCell())])&&0==l.visited&&(l.visited=!0,t.push(l));for(i=0;i<c.length;i++)l=c[i],null!=(l=n[l=mxCellPath.create(l.getCoreCell())])&&0==l.visited&&(l.visited=!0,t.push(l))}r.visited=!1,s++}},mxCoordinateAssignment.prototype.medianPos=function(e,t){if(0==e%2)for(var n=t.maxRank;0<n;n--)this.rankMedianPosition(n-1,t,n);else for(n=0;n<t.maxRank-1;n++)this.rankMedianPosition(n+1,t,n)},mxCoordinateAssignment.prototype.rankMedianPosition=function(e,t,n){t=t.ranks[e];for(var a=[],i=[],s=0;s<t.length;s++){var o=t[s];a[s]=new WeightedCellSorter,a[s].cell=o,a[s].rankIndex=s;var r=mxCellPath.create(o.getCoreCell());i[r]=a[s];var l=null;l=n<e?o.getPreviousLayerConnectedCells(e):o.getNextLayerConnectedCells(e);a[s].weightedValue=this.calculatedWeightedValue(o,l)}for(a.sort(WeightedCellSorter.prototype.compare),s=0;s<a.length;s++){r=0,o=a[s].cell,r=0,null!=(l=n<e?o.getPreviousLayerConnectedCells(e).slice():o.getNextLayerConnectedCells(e).slice())&&(r=0<(r=l.length)?this.medianXValue(l,n):o.getGeneralPurposeVariable(e));for(var d=0,c=(l=-1e8,a[s].rankIndex-1);0<=c;){var m;if(null!=(m=i[m=mxCellPath.create(t[c].getCoreCell())])){var u=m.cell;m.visited?(l=u.getGeneralPurposeVariable(e)+u.width/2+this.intraCellSpacing+d+o.width/2,c=-1):(d+=u.width+this.intraCellSpacing,c--)}}for(d=0,u=1e8,c=a[s].rankIndex+1;c<a.length;)if(null!=(m=i[m=mxCellPath.create(t[c].getCoreCell())])){var p=m.cell;m.visited?(u=p.getGeneralPurposeVariable(e)-p.width/2-this.intraCellSpacing-d-o.width/2,c=a.length):(d+=p.width+this.intraCellSpacing,c++)}l<=r&&r<=u?o.setGeneralPurposeVariable(e,r):r<l?(o.setGeneralPurposeVariable(e,l),this.currentXDelta+=l-r):u<r&&(o.setGeneralPurposeVariable(e,u),this.currentXDelta+=r-u),a[s].visited=!0}},mxCoordinateAssignment.prototype.calculatedWeightedValue=function(e,t){for(var n=0,a=0;a<t.length;a++){var i=t[a];e.isVertex()&&i.isVertex()?n++:n=e.isEdge()&&i.isEdge()?n+8:n+2}return n},mxCoordinateAssignment.prototype.medianXValue=function(e,t){if(0==e.length)return 0;for(var n=[],a=0;a<e.length;a++)n[a]=e[a].getGeneralPurposeVariable(t);return n.sort(function(e,t){return e-t}),1==e.length%2?n[Math.floor(e.length/2)]:(n[(a=e.length/2)-1]+n[a])/2},mxCoordinateAssignment.prototype.initialCoords=function(e,t){this.calculateWidestRank(e,t);for(var n=this.widestRank;0<=n;n--)n<t.maxRank&&this.rankCoordinates(n,e,t);for(n=this.widestRank+1;n<=t.maxRank;n++)0<n&&this.rankCoordinates(n,e,t)},mxCoordinateAssignment.prototype.rankCoordinates=function(e,t,n){t=n.ranks[e],n=0;for(var a=this.initialX+(this.widestRankValue-this.rankWidths[e])/2,i=!1,s=0;s<t.length;s++){var o=t[s];if(o.isVertex()){var r=this.layout.getVertexBounds(o.cell);null!=r?this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(o.width=r.width,o.height=r.height):(o.width=r.height,o.height=r.width):i=!0,n=Math.max(n,o.height)}else o.isEdge()&&(r=1,null!=o.edges?r=o.edges.length:mxLog.warn("edge.edges is null"),o.width=(r-1)*this.parallelEdgeSpacing);a+=o.width/2,o.setX(e,a),o.setGeneralPurposeVariable(e,a),a+=o.width/2,a+=this.intraCellSpacing}1==i&&mxLog.warn("At least one cell has no bounds")},mxCoordinateAssignment.prototype.calculateWidestRank=function(e,t){var n=-this.interRankCellSpacing,a=0;this.rankWidths=[],this.rankY=[];for(var i=t.maxRank;0<=i;i--){for(var s=0,o=t.ranks[i],r=this.initialX,l=!1,d=0;d<o.length;d++){var c=o[d];if(c.isVertex()){var m=this.layout.getVertexBounds(c.cell);null!=m?this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(c.width=m.width,c.height=m.height):(c.width=m.height,c.height=m.width):l=!0,s=Math.max(s,c.height)}else c.isEdge()&&(m=1,null!=c.edges?m=c.edges.length:mxLog.warn("edge.edges is null"),c.width=(m-1)*this.parallelEdgeSpacing);r+=c.width/2,c.setX(i,r),c.setGeneralPurposeVariable(i,r),r+=c.width/2,(r+=this.intraCellSpacing)>this.widestRankValue&&(this.widestRankValue=r,this.widestRank=i),this.rankWidths[i]=r}for(1==l&&mxLog.warn("At least one cell has no bounds"),this.rankY[i]=n,r=s/2+a/2+this.interRankCellSpacing,a=s,n=this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_WEST?n+r:n-r,d=0;d<o.length;d++)o[d].setY(i,n)}},mxCoordinateAssignment.prototype.minPath=function(e,t){var n,a=t.edgeMapper;for(n in a){var i=a[n];if(!(i.maxRank-i.minRank-1<1)){for(var s=i.getGeneralPurposeVariable(i.minRank+1),o=!0,r=0,l=i.minRank+2;l<i.maxRank;l++){s!=(d=i.getGeneralPurposeVariable(l))?(o=!1,s=d):r++}if(!o){o=s=0;var d=[],c=[],m=i.getGeneralPurposeVariable(i.minRank+1);for(l=i.minRank+1;l<i.maxRank-1;l++){var u=i.getX(l+1);m==u?(d[l-i.minRank-1]=m,s++):this.repositionValid(t,i,l+1,m)?(d[l-i.minRank-1]=m,s++):m=d[l-i.minRank-1]=u}for(m=i.getX(l),l=i.maxRank-1;l>i.minRank+1;l--)m==(u=i.getX(l-1))?(c[l-i.minRank-2]=m,o++):this.repositionValid(t,i,l-1,m)?(c[l-i.minRank-2]=m,o++):(c[l-i.minRank-2]=i.getX(l-1),m=u);if(r<o||r<s)if(s<=o)for(l=i.maxRank-2;l>i.minRank;l--)i.setX(l,c[l-i.minRank-1]);else if(o<s)for(l=i.minRank+2;l<i.maxRank;l++)i.setX(l,d[l-i.minRank-2])}}}},mxCoordinateAssignment.prototype.repositionValid=function(e,t,n,a){e=e.ranks[n];for(var i=-1,s=0;s<e.length;s++)if(t==e[s]){i=s;break}if(i<0)return!1;if(a<(s=t.getGeneralPurposeVariable(n))){if(0==i)return!0;if(!((n=(n=(e=e[i-1]).getGeneralPurposeVariable(n))+e.width/2+this.intraCellSpacing+t.width/2)<=a))return!1}else if(s<a){if(i==e.length-1)return!0;if(!(a<=(n=(n=(e=e[i+1]).getGeneralPurposeVariable(n))-e.width/2-this.intraCellSpacing-t.width/2)))return!1}return!0},mxCoordinateAssignment.prototype.setCellLocations=function(e,t){this.rankTopY=[],this.rankBottomY=[];for(var n=0;n<t.ranks.length;n++)this.rankTopY[n]=Number.MAX_VALUE,this.rankBottomY[n]=0;n=null,this.layout.resizeParent&&(n={});var a,i=t.edgeMapper,s=t.vertexMapper;for(a in s){var o=s[a];if(this.setVertexLocation(o),this.layout.resizeParent){o=e.model.getParent(o.cell);var r=mxCellPath.create(o);null==n[r]&&(n[r]=o)}}for(a in this.layout.resizeParent&&null!=n&&this.adjustParents(n),(this.edgeStyle==mxHierarchicalEdgeStyle.ORTHOGONAL||this.edgeStyle==mxHierarchicalEdgeStyle.POLYLINE||this.edgeStyle==mxHierarchicalEdgeStyle.CURVE)&&this.localEdgeProcessing(t),i)this.setEdgePosition(i[a])},mxCoordinateAssignment.prototype.adjustParents=function(e){var t,n=[];for(t in e)n.push(e[t]);this.layout.arrangeGroups(mxUtils.sortCells(n,!0),this.groupPadding)},mxCoordinateAssignment.prototype.localEdgeProcessing=function(e){for(var t=0;t<e.ranks.length;t++)for(var n=e.ranks[t],a=0;a<n.length;a++){var i=n[a];if(i.isVertex())for(var s=i.getPreviousLayerConnectedCells(t),o=t-1,r=0;r<2;r++){if(-1<o&&o<e.ranks.length&&null!=s&&0<s.length){for(var l=[],d=0;d<s.length;d++){var c=new WeightedCellSorter(s[d],s[d].getX(o));l.push(c)}l.sort(WeightedCellSorter.prototype.compare);var m=(c=i.x[0]-i.width/2)+i.width,u=s=0;for(o=[],d=0;d<l.length;d++){var p,g=l[d].cell;if(g.isVertex()){p=0==r?i.connectsAsSource:i.connectsAsTarget;for(var v=0;v<p.length;v++)p[v].source!=g&&p[v].target!=g||(s+=p[v].edges.length,u++,o.push(p[v]))}else s+=g.edges.length,u++,o.push(g)}for(i.width>(s+1)*this.prefHozEdgeSep+2*this.prefHozEdgeSep&&(c+=this.prefHozEdgeSep,m-=this.prefHozEdgeSep),c+=(l=(m-c)/s)/2,m=this.minEdgeJetty-this.prefVertEdgeOff,d=u=0;d<o.length;d++){for(g=o[d].edges.length,v=mxCellPath.create(o[d].edges[0]),null==(p=this.jettyPositions[v])&&(p=[],this.jettyPositions[v]=p),d<s/2?m+=this.prefVertEdgeOff:s/2<d&&(m-=this.prefVertEdgeOff),v=0;v<g;v++)p[4*v+2*r]=c,c+=l,p[4*v+2*r+1]=m;u=Math.max(u,m)}}s=i.getNextLayerConnectedCells(t),o=t+1}}},mxCoordinateAssignment.prototype.setEdgePosition=function(e){var t=0;if(101207!=e.temp[0]){var n=e.maxRank,a=e.minRank;n==a&&(n=e.source.maxRank,a=e.target.minRank);for(var i=0,s=mxCellPath.create(e.edges[0]),o=(s=this.jettyPositions[s],e.isReversed?e.target.cell:e.source.cell),r=this.layout.graph,l=0;l<e.edges.length;l++){var d=e.edges[l],c=this.layout.getVisibleTerminal(d,!0),m=r.model.getTerminal(d,!0),u=[],p=e.isReversed;if(c!=o&&(p=!p),null!=s){var g=p?2:0,v=p?this.rankTopY[a]:this.rankBottomY[n],h=s[4*i+1+g];p&&(h=-h),v+=h,g=s[4*i+g],m=r.model.getTerminal(d,!0),this.layout.isPort(m)&&r.model.getParent(m)==c&&(g=null!=(g=r.view.getState(m))?g.x:c.geometry.x+e.source.width*m.geometry.x),this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(u.push(new mxPoint(g,v)),this.edgeStyle==mxHierarchicalEdgeStyle.CURVE&&u.push(new mxPoint(g,v+h))):(u.push(new mxPoint(v,g)),this.edgeStyle==mxHierarchicalEdgeStyle.CURVE&&u.push(new mxPoint(v+h,g)))}for(g=e.x.length-1,v=h=-1,c=e.maxRank-1,p&&(g=0,h=e.x.length,v=1,c=e.minRank+1);e.maxRank!=e.minRank&&g!=h;g+=v){m=e.x[g]+t;var f=(this.rankTopY[c]+this.rankBottomY[c+1])/2,b=(this.rankTopY[c-1]+this.rankBottomY[c])/2;if(p){var A=f;f=b,b=A}this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(u.push(new mxPoint(m,f)),u.push(new mxPoint(m,b))):(u.push(new mxPoint(f,m)),u.push(new mxPoint(b,m))),this.limitX=Math.max(this.limitX,m),c+=v}null!=s&&(g=p?2:0,v=p?this.rankBottomY[n]:this.rankTopY[a],h=s[4*i+3-g],p&&(h=-h),v-=h,g=s[4*i+2-g],p=r.model.getTerminal(d,!1),c=this.layout.getVisibleTerminal(d,!1),this.layout.isPort(p)&&r.model.getParent(p)==c&&(g=null!=(g=r.view.getState(p))?g.x:c.geometry.x+e.target.width*p.geometry.x),this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(this.edgeStyle==mxHierarchicalEdgeStyle.CURVE&&u.push(new mxPoint(g,v-h)),u.push(new mxPoint(g,v))):(this.edgeStyle==mxHierarchicalEdgeStyle.CURVE&&u.push(new mxPoint(v-h,g)),u.push(new mxPoint(v,g)))),e.isReversed&&this.processReversedEdge(e,d),this.layout.setEdgePoints(d,u),t=0==t?this.parallelEdgeSpacing:0<t?-t:-t+this.parallelEdgeSpacing,i++}e.temp[0]=101207}},mxCoordinateAssignment.prototype.setVertexLocation=function(e){var t=e.cell,n=e.x[0]-e.width/2,a=e.y[0]-e.height/2;this.rankTopY[e.minRank]=Math.min(this.rankTopY[e.minRank],a),this.rankBottomY[e.minRank]=Math.max(this.rankBottomY[e.minRank],a+e.height),this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?this.layout.setVertexLocation(t,n,a):this.layout.setVertexLocation(t,a,n),this.limitX=Math.max(this.limitX,n+e.width)},mxCoordinateAssignment.prototype.processReversedEdge=function(e,t){},WeightedCellSorter.prototype.weightedValue=0,WeightedCellSorter.prototype.nudge=!1,WeightedCellSorter.prototype.visited=!1,WeightedCellSorter.prototype.rankIndex=null,WeightedCellSorter.prototype.cell=null,WeightedCellSorter.prototype.compare=function(e,t){return null!=e&&null!=t?t.weightedValue>e.weightedValue?-1:t.weightedValue<e.weightedValue?1:t.nudge?-1:1:0},mxHierarchicalLayout.prototype=new mxGraphLayout,mxHierarchicalLayout.prototype.constructor=mxHierarchicalLayout,mxHierarchicalLayout.prototype.roots=null,mxHierarchicalLayout.prototype.resizeParent=!1,mxHierarchicalLayout.prototype.moveParent=!1,mxHierarchicalLayout.prototype.parentBorder=0,mxHierarchicalLayout.prototype.intraCellSpacing=30,mxHierarchicalLayout.prototype.interRankCellSpacing=100,mxHierarchicalLayout.prototype.interHierarchySpacing=60,mxHierarchicalLayout.prototype.parallelEdgeSpacing=10,mxHierarchicalLayout.prototype.orientation=mxConstants.DIRECTION_NORTH,mxHierarchicalLayout.prototype.fineTuning=!0,mxHierarchicalLayout.prototype.tightenToSource=!0,mxHierarchicalLayout.prototype.disableEdgeStyle=!0,mxHierarchicalLayout.prototype.traverseAncestors=!0,mxHierarchicalLayout.prototype.model=null,mxHierarchicalLayout.prototype.edgesCache=null,mxHierarchicalLayout.prototype.getModel=function(){return this.model},mxHierarchicalLayout.prototype.execute=function(e,t){this.parent=e;var n=this.graph.model;if(this.edgesCache={},null!=t||null!=e){if(null!=t&&null!=e){for(var a=[],i=0;i<t.length;i++)n.isAncestor(e,t[i])&&a.push(t[i]);this.roots=a}else this.roots=t;n.beginUpdate();try{this.run(e),this.resizeParent&&!this.graph.isCellCollapsed(e)&&this.graph.updateGroupBounds([e],this.parentBorder,this.moveParent)}finally{n.endUpdate()}}},mxHierarchicalLayout.prototype.findRoots=function(e,t){var n=[];if(null!=e&&null!=t){var a,i=this.graph.model,s=null,o=-1e5;for(a in t){var r=t[a];if(i.isVertex(r)&&this.graph.isCellVisible(r)){for(var l=this.getEdges(r),d=0,c=0,m=0;m<l.length;m++)this.getVisibleTerminal(l[m],!0)==r?d++:c++;0==c&&0<d&&n.push(r),o<(l=d-c)&&(o=l,s=r)}}0==n.length&&null!=s&&n.push(s)}return n},mxHierarchicalLayout.prototype.getEdges=function(e){var t=mxCellPath.create(e);if(null!=this.edgesCache[t])return this.edgesCache[t];for(var n=this.graph.model,a=[],i=this.graph.isCellCollapsed(e),s=n.getChildCount(e),o=0;o<s;o++){var r=n.getChildAt(e,o);this.isPort(r)?a=a.concat(n.getEdges(r,!0,!0)):!i&&this.graph.isCellVisible(r)||(a=a.concat(n.getEdges(r,!0,!0)))}for(a=a.concat(n.getEdges(e,!0,!0)),n=[],o=0;o<a.length;o++)((i=this.getVisibleTerminal(a[o],!0))==(s=this.getVisibleTerminal(a[o],!1))||i!=s&&(s==e&&(null==this.parent||this.graph.isValidAncestor(i,this.parent,this.traverseAncestors))||i==e&&(null==this.parent||this.graph.isValidAncestor(s,this.parent,this.traverseAncestors))))&&n.push(a[o]);return this.edgesCache[t]=n},mxHierarchicalLayout.prototype.getVisibleTerminal=function(e,t){var n=null!=(n=this.graph.view.getState(e))?n.getVisibleTerminal(t):this.graph.view.getVisibleTerminal(e,t);return this.isPort(n)&&(n=this.graph.model.getParent(n)),n},mxHierarchicalLayout.prototype.run=function(e){var t=[],n=[];if(null==this.roots&&null!=e){var a={};this.filterDescendants(e,a),this.roots=[];var i,s=!0;for(i in a)if(null!=a[i]){s=!1;break}for(;!s;){var o=this.findRoots(e,a);for(s=0;s<o.length;s++){var r=[];t.push(r),this.traverse(o[s],!0,null,n,r,t,a)}for(s=0;s<o.length;s++)this.roots.push(o[s]);for(i in s=!0,a)if(null!=a[i]){s=!1;break}}}else for(s=0;s<roots.length;s++)r=[],t.push(r),traverse(roots.get(s),!0,null,n,r,t,null);for(s=n=0;s<t.length;s++){for(i in a=[],r=t[s])a.push(r[i]);this.model=new mxGraphHierarchyModel(this,a,this.roots,e,this.tightenToSource),this.cycleStage(e),this.layeringStage(),this.crossingStage(e),n=this.placementStage(n,e)}},mxHierarchicalLayout.prototype.filterDescendants=function(e,t){var n=this.graph.model;if(n.isVertex(e)&&e!=this.parent&&this.graph.isCellVisible(e)&&(t[mxCellPath.create(e)]=e),this.traverseAncestors||e==this.parent&&this.graph.isCellVisible(e))for(var a=n.getChildCount(e),i=0;i<a;i++){var s=n.getChildAt(e,i);this.isPort(s)||this.filterDescendants(s,t)}},mxHierarchicalLayout.prototype.isPort=function(e){return!!e.geometry.relative},mxHierarchicalLayout.prototype.getEdgesBetween=function(e,t,n){n=null!=n&&n;for(var a=this.getEdges(e),i=[],s=0;s<a.length;s++){var o=this.getVisibleTerminal(a[s],!0),r=this.getVisibleTerminal(a[s],!1);(o==e&&r==t||!n&&o==t&&r==e)&&i.push(a[s])}return i},mxHierarchicalLayout.prototype.traverse=function(e,t,n,a,i,s,o){if(null!=e&&null!=a){var r=mxCellPath.create(e);if(null!=a[r]||null!=o&&null==o[r]){if(null==i[r])for(n=0;n<s.length;n++)if(null!=(e=s[n])[r]){for(l in i)e[l]=i[l];return s.pop(),e}}else{null==i[r]&&(i[r]=e),null==a[r]&&(a[r]=e),delete o[r];var l=this.getEdges(e);for(n=0;n<l.length;n++)r=this.getVisibleTerminal(l[n],!0)==e,(!t||r)&&(r=this.getVisibleTerminal(l[n],!r),i=this.traverse(r,t,l[n],a,i,s,o))}}return i},mxHierarchicalLayout.prototype.cycleStage=function(e){new mxMinimumCycleRemover(this).execute(e)},mxHierarchicalLayout.prototype.layeringStage=function(){this.model.initialRank(),this.model.fixRanks()},mxHierarchicalLayout.prototype.crossingStage=function(e){new mxMedianHybridCrossingReduction(this).execute(e)},mxHierarchicalLayout.prototype.placementStage=function(e,t){var n=new mxCoordinateAssignment(this,this.intraCellSpacing,this.interRankCellSpacing,this.orientation,e,this.parallelEdgeSpacing);return n.fineTuning=this.fineTuning,n.execute(t),n.limitX+this.interHierarchySpacing},mxGraphModel.prototype=new mxEventSource,mxGraphModel.prototype.constructor=mxGraphModel,mxGraphModel.prototype.root=null,mxGraphModel.prototype.cells=null,mxGraphModel.prototype.maintainEdgeParent=!0,mxGraphModel.prototype.createIds=!0,mxGraphModel.prototype.prefix="",mxGraphModel.prototype.postfix="",mxGraphModel.prototype.nextId=0,mxGraphModel.prototype.currentEdit=null,mxGraphModel.prototype.updateLevel=0,mxGraphModel.prototype.endingUpdate=!1,mxGraphModel.prototype.clear=function(){this.setRoot(this.createRoot())},mxGraphModel.prototype.isCreateIds=function(){return this.createIds},mxGraphModel.prototype.setCreateIds=function(e){this.createIds=e},mxGraphModel.prototype.createRoot=function(){var e=new mxCell;return e.insert(new mxCell),e},mxGraphModel.prototype.getCell=function(e){return null!=this.cells?this.cells[e]:null},mxGraphModel.prototype.filterCells=function(e,t){var n=null;if(null!=e){n=[];for(var a=0;a<e.length;a++)t(e[a])&&n.push(e[a])}return n},mxGraphModel.prototype.getDescendants=function(e){return this.filterDescendants(null,e)},mxGraphModel.prototype.filterDescendants=function(e,t){var n=[];t=t||this.getRoot(),(null==e||e(t))&&n.push(t);for(var a=this.getChildCount(t),i=0;i<a;i++){var s=this.getChildAt(t,i);n=n.concat(this.filterDescendants(e,s))}return n},mxGraphModel.prototype.getRoot=function(e){var t=e||this.root;if(null!=e)for(;null!=e;)t=e,e=this.getParent(e);return t},mxGraphModel.prototype.setRoot=function(e){return this.execute(new mxRootChange(this,e)),e},mxGraphModel.prototype.rootChanged=function(e){var t=this.root;return this.root=e,this.nextId=0,this.cells=null,this.cellAdded(e),t},mxGraphModel.prototype.isRoot=function(e){return null!=e&&this.root==e},mxGraphModel.prototype.isLayer=function(e){return this.isRoot(this.getParent(e))},mxGraphModel.prototype.isAncestor=function(e,t){for(;null!=t&&t!=e;)t=this.getParent(t);return t==e},mxGraphModel.prototype.contains=function(e){return this.isAncestor(this.root,e)},mxGraphModel.prototype.getParent=function(e){return null!=e?e.getParent():null},mxGraphModel.prototype.add=function(e,t,n){if(t!=e&&null!=e&&null!=t){null==n&&(n=this.getChildCount(e));var a=e!=this.getParent(t);this.execute(new mxChildChange(this,e,t,n)),this.maintainEdgeParent&&a&&this.updateEdgeParents(t)}return t},mxGraphModel.prototype.cellAdded=function(e){if(null!=e){if(null==e.getId()&&this.createIds&&e.setId(this.createId(e)),null!=e.getId())if((t=this.getCell(e.getId()))!=e){for(;null!=t;)e.setId(this.createId(e)),t=this.getCell(e.getId());null==this.cells&&(this.cells={}),this.cells[e.getId()]=e}mxUtils.isNumeric(e.getId())&&(this.nextId=Math.max(this.nextId,e.getId()));for(var t=this.getChildCount(e),n=0;n<t;n++)this.cellAdded(this.getChildAt(e,n))}},mxGraphModel.prototype.createId=function(e){return e=this.nextId,this.nextId++,this.prefix+e+this.postfix},mxGraphModel.prototype.updateEdgeParents=function(e,t){t=t||this.getRoot(e);for(var n=this.getChildCount(e),a=0;a<n;a++){var i=this.getChildAt(e,a);this.updateEdgeParents(i,t)}for(i=this.getEdgeCount(e),n=[],a=0;a<i;a++)n.push(this.getEdgeAt(e,a));for(a=0;a<n.length;a++)i=n[a],this.isAncestor(t,i)&&this.updateEdgeParent(i,t)},mxGraphModel.prototype.updateEdgeParent=function(e,t){for(var n=this.getTerminal(e,!0),a=this.getTerminal(e,!1),i=null;null!=n&&!this.isEdge(n)&&null!=n.geometry&&n.geometry.relative;)n=this.getParent(n);for(;null!=a&&!this.isEdge(a)&&null!=a.geometry&&a.geometry.relative;)a=this.getParent(a);if(this.isAncestor(t,n)&&this.isAncestor(t,a)&&(null!=(i=n==a?this.getParent(n):this.getNearestCommonAncestor(n,a))&&(this.getParent(i)!=this.root||this.isAncestor(i,e))&&this.getParent(e)!=i)){if(null!=(n=this.getGeometry(e))){var s=this.getOrigin(this.getParent(e)),o=this.getOrigin(i);a=o.x-s.x,s=o.y-s.y;(n=n.clone()).translate(-a,-s),this.setGeometry(e,n)}this.add(i,e,this.getChildCount(i))}},mxGraphModel.prototype.getOrigin=function(e){var t=null;return null!=e?(t=this.getOrigin(this.getParent(e)),this.isEdge(e)||null!=(e=this.getGeometry(e))&&(t.x+=e.x,t.y+=e.y)):t=new mxPoint,t},mxGraphModel.prototype.getNearestCommonAncestor=function(e,t){if(null!=e&&null!=t&&(null!=(s=mxCellPath.create(t))&&0<s.length)){var n=e,a=mxCellPath.create(n);if(s.length<a.length){n=t;var i=a,s=(a=s,i)}for(;null!=n;){if(i=this.getParent(n),0==s.indexOf(a+mxCellPath.PATH_SEPARATOR)&&null!=i)return n;a=mxCellPath.getParentPath(a),n=i}}return null},mxGraphModel.prototype.remove=function(e){return e==this.root?this.setRoot(null):null!=this.getParent(e)&&this.execute(new mxChildChange(this,null,e)),e},mxGraphModel.prototype.cellRemoved=function(e){if(null!=e&&null!=this.cells){for(var t=this.getChildCount(e)-1;0<=t;t--)this.cellRemoved(this.getChildAt(e,t));null!=this.cells&&null!=e.getId()&&delete this.cells[e.getId()]}},mxGraphModel.prototype.parentForCellChanged=function(e,t,n){var a=this.getParent(e);return null!=t?(t!=a||a.getIndex(e)!=n)&&t.insert(e,n):null!=a&&(n=a.getIndex(e),a.remove(n)),this.contains(a)||null==t?null==t&&this.cellRemoved(e):this.cellAdded(e),a},mxGraphModel.prototype.getChildCount=function(e){return null!=e?e.getChildCount():0},mxGraphModel.prototype.getChildAt=function(e,t){return null!=e?e.getChildAt(t):null},mxGraphModel.prototype.getChildren=function(e){return null!=e?e.children:null},mxGraphModel.prototype.getChildVertices=function(e){return this.getChildCells(e,!0,!1)},mxGraphModel.prototype.getChildEdges=function(e){return this.getChildCells(e,!1,!0)},mxGraphModel.prototype.getChildCells=function(e,t,n){t=null!=t&&t,n=null!=n&&n;for(var a=this.getChildCount(e),i=[],s=0;s<a;s++){var o=this.getChildAt(e,s);(!n&&!t||n&&this.isEdge(o)||t&&this.isVertex(o))&&i.push(o)}return i},mxGraphModel.prototype.getTerminal=function(e,t){return null!=e?e.getTerminal(t):null},mxGraphModel.prototype.setTerminal=function(e,t,n){var a=t!=this.getTerminal(e,n);return this.execute(new mxTerminalChange(this,e,t,n)),this.maintainEdgeParent&&a&&this.updateEdgeParent(e,this.getRoot()),t},mxGraphModel.prototype.setTerminals=function(e,t,n){this.beginUpdate();try{this.setTerminal(e,t,!0),this.setTerminal(e,n,!1)}finally{this.endUpdate()}},mxGraphModel.prototype.terminalForCellChanged=function(e,t,n){var a=this.getTerminal(e,n);return null!=t?t.insertEdge(e,n):null!=a&&a.removeEdge(e,n),a},mxGraphModel.prototype.getEdgeCount=function(e){return null!=e?e.getEdgeCount():0},mxGraphModel.prototype.getEdgeAt=function(e,t){return null!=e?e.getEdgeAt(t):null},mxGraphModel.prototype.getDirectedEdgeCount=function(e,t,n){for(var a=0,i=this.getEdgeCount(e),s=0;s<i;s++){var o=this.getEdgeAt(e,s);o!=n&&this.getTerminal(o,t)==e&&a++}return a},mxGraphModel.prototype.getConnections=function(e){return this.getEdges(e,!0,!0,!1)},mxGraphModel.prototype.getIncomingEdges=function(e){return this.getEdges(e,!0,!1,!1)},mxGraphModel.prototype.getOutgoingEdges=function(e){return this.getEdges(e,!1,!0,!1)},mxGraphModel.prototype.getEdges=function(e,t,n,a){t=null==t||t,n=null==n||n,a=null==a||a;for(var i=this.getEdgeCount(e),s=[],o=0;o<i;o++){var r=this.getEdgeAt(e,o),l=this.getTerminal(r,!0),d=this.getTerminal(r,!1);(a&&l==d||l!=d&&(t&&d==e||n&&l==e))&&s.push(r)}return s},mxGraphModel.prototype.getEdgesBetween=function(e,t,n){n=null!=n&&n;var a=this.getEdgeCount(e),i=this.getEdgeCount(t),s=e,o=a;for(i<a&&(o=i,s=t),a=[],i=0;i<o;i++){var r=this.getEdgeAt(s,i),l=this.getTerminal(r,!0),d=this.getTerminal(r,!1);(l==e&&d==t||!n&&(d==e&&l==t))&&a.push(r)}return a},mxGraphModel.prototype.getOpposites=function(e,t,n,a){n=null==n||n,a=null==a||a;var i=[];if(null!=e)for(var s=0;s<e.length;s++){var o=this.getTerminal(e[s],!0),r=this.getTerminal(e[s],!1);o==t&&null!=r&&r!=t&&a?i.push(r):r==t&&null!=o&&o!=t&&n&&i.push(o)}return i},mxGraphModel.prototype.getTopmostCells=function(e){for(var t=[],n=0;n<e.length;n++){for(var a=e[n],i=!0,s=this.getParent(a);null!=s;){if(0<=mxUtils.indexOf(e,s)){i=!1;break}s=this.getParent(s)}i&&t.push(a)}return t},mxGraphModel.prototype.isVertex=function(e){return null!=e&&e.isVertex()},mxGraphModel.prototype.isEdge=function(e){return null!=e&&e.isEdge()},mxGraphModel.prototype.isConnectable=function(e){return null!=e&&e.isConnectable()},mxGraphModel.prototype.getValue=function(e){return null!=e?e.getValue():null},mxGraphModel.prototype.setValue=function(e,t){return this.execute(new mxValueChange(this,e,t)),t},mxGraphModel.prototype.valueForCellChanged=function(e,t){return e.valueChanged(t)},mxGraphModel.prototype.getGeometry=function(e,t){return null!=e?e.getGeometry():null},mxGraphModel.prototype.setGeometry=function(e,t){return t!=this.getGeometry(e)&&this.execute(new mxGeometryChange(this,e,t)),t},mxGraphModel.prototype.geometryForCellChanged=function(e,t){var n=this.getGeometry(e);return e.setGeometry(t),n},mxGraphModel.prototype.getStyle=function(e){return null!=e?e.getStyle():null},mxGraphModel.prototype.setStyle=function(e,t){return t!=this.getStyle(e)&&this.execute(new mxStyleChange(this,e,t)),t},mxGraphModel.prototype.styleForCellChanged=function(e,t){var n=this.getStyle(e);return e.setStyle(t),n},mxGraphModel.prototype.isCollapsed=function(e){return null!=e&&e.isCollapsed()},mxGraphModel.prototype.setCollapsed=function(e,t){return t!=this.isCollapsed(e)&&this.execute(new mxCollapseChange(this,e,t)),t},mxGraphModel.prototype.collapsedStateForCellChanged=function(e,t){var n=this.isCollapsed(e);return e.setCollapsed(t),n},mxGraphModel.prototype.isVisible=function(e){return null!=e&&e.isVisible()},mxGraphModel.prototype.setVisible=function(e,t){return t!=this.isVisible(e)&&this.execute(new mxVisibleChange(this,e,t)),t},mxGraphModel.prototype.visibleStateForCellChanged=function(e,t){var n=this.isVisible(e);return e.setVisible(t),n},mxGraphModel.prototype.execute=function(e){e.execute(),this.beginUpdate(),this.currentEdit.add(e),this.fireEvent(new mxEventObject(mxEvent.EXECUTE,"change",e)),this.fireEvent(new mxEventObject(mxEvent.EXECUTED,"change",e)),this.endUpdate()},mxGraphModel.prototype.beginUpdate=function(){this.updateLevel++,this.fireEvent(new mxEventObject(mxEvent.BEGIN_UPDATE)),1==this.updateLevel&&this.fireEvent(new mxEventObject(mxEvent.START_EDIT))},mxGraphModel.prototype.endUpdate=function(){if(this.updateLevel--,0==this.updateLevel&&this.fireEvent(new mxEventObject(mxEvent.END_EDIT)),!this.endingUpdate){this.endingUpdate=0==this.updateLevel,this.fireEvent(new mxEventObject(mxEvent.END_UPDATE,"edit",this.currentEdit));try{if(this.endingUpdate&&!this.currentEdit.isEmpty()){this.fireEvent(new mxEventObject(mxEvent.BEFORE_UNDO,"edit",this.currentEdit));var e=this.currentEdit;this.currentEdit=this.createUndoableEdit(),e.notify(),this.fireEvent(new mxEventObject(mxEvent.UNDO,"edit",e))}}finally{this.endingUpdate=!1}}},mxGraphModel.prototype.createUndoableEdit=function(){var e=new mxUndoableEdit(this,!0);return e.notify=function(){e.source.fireEvent(new mxEventObject(mxEvent.CHANGE,"edit",e,"changes",e.changes)),e.source.fireEvent(new mxEventObject(mxEvent.NOTIFY,"edit",e,"changes",e.changes))},e},mxGraphModel.prototype.mergeChildren=function(e,t,n){n=null==n||n,this.beginUpdate();try{var a={};for(var i in this.mergeChildrenImpl(e,t,n,a),a){var s=a[i],o=this.getTerminal(s,!0);null!=o&&(o=a[mxCellPath.create(o)],this.setTerminal(s,o,!0)),null!=(o=this.getTerminal(s,!1))&&(o=a[mxCellPath.create(o)],this.setTerminal(s,o,!1))}}finally{this.endUpdate()}},mxGraphModel.prototype.mergeChildrenImpl=function(e,t,n,a){this.beginUpdate();try{for(var i=e.getChildCount(),s=0;s<i;s++){var o=e.getChildAt(s);if("function"==typeof o.getId){var r=o.getId(),l=null==r||this.isEdge(o)&&n?null:this.getCell(r);if(null==l){var d=o.clone();d.setId(r),d.setTerminal(o.getTerminal(!0),!0),d.setTerminal(o.getTerminal(!1),!1),l=t.insert(d),this.cellAdded(l)}a[mxCellPath.create(o)]=l,this.mergeChildrenImpl(o,l,n,a)}}}finally{this.endUpdate()}},mxGraphModel.prototype.getParents=function(e){var t=[];if(null!=e)for(var n={},a=0;a<e.length;a++){var i=this.getParent(e[a]);if(null!=i){var s=mxCellPath.create(i);null==n[s]&&(n[s]=i,t.push(i))}}return t},mxGraphModel.prototype.cloneCell=function(e){return null!=e?this.cloneCells([e],!0)[0]:null},mxGraphModel.prototype.cloneCells=function(e,t){for(var n={},a=[],i=0;i<e.length;i++)null!=e[i]?a.push(this.cloneCellImpl(e[i],n,t)):a.push(null);for(i=0;i<a.length;i++)null!=a[i]&&this.restoreClone(a[i],e[i],n);return a},mxGraphModel.prototype.cloneCellImpl=function(e,t,n){var a=this.cellCloned(e);if(t[mxObjectIdentity.get(e)]=a,n){n=this.getChildCount(e);for(var i=0;i<n;i++){var s=this.cloneCellImpl(this.getChildAt(e,i),t,!0);a.insert(s)}}return a},mxGraphModel.prototype.cellCloned=function(e){return e.clone()},mxGraphModel.prototype.restoreClone=function(e,t,n){null!=(a=this.getTerminal(t,!0))&&(null!=(a=n[mxObjectIdentity.get(a)])&&a.insertEdge(e,!0)),null!=(a=this.getTerminal(t,!1))&&(null!=(a=n[mxObjectIdentity.get(a)])&&a.insertEdge(e,!1));for(var a=this.getChildCount(e),i=0;i<a;i++)this.restoreClone(this.getChildAt(e,i),this.getChildAt(t,i),n)},mxRootChange.prototype.execute=function(){this.root=this.previous,this.previous=this.model.rootChanged(this.previous)},mxChildChange.prototype.execute=function(){var e=this.model.getParent(this.child),t=null!=e?e.getIndex(this.child):0;null==this.previous&&this.connect(this.child,!1),e=this.model.parentForCellChanged(this.child,this.previous,this.previousIndex),null!=this.previous&&this.connect(this.child,!0),this.parent=this.previous,this.previous=e,this.index=this.previousIndex,this.previousIndex=t},mxChildChange.prototype.connect=function(e,t){t=null==t||t;var n=e.getTerminal(!0),a=e.getTerminal(!1);for(null!=n&&(t?this.model.terminalForCellChanged(e,n,!0):this.model.terminalForCellChanged(e,null,!0)),null!=a&&(t?this.model.terminalForCellChanged(e,a,!1):this.model.terminalForCellChanged(e,null,!1)),e.setTerminal(n,!0),e.setTerminal(a,!1),n=this.model.getChildCount(e),a=0;a<n;a++)this.connect(this.model.getChildAt(e,a),t)},mxTerminalChange.prototype.execute=function(){this.terminal=this.previous,this.previous=this.model.terminalForCellChanged(this.cell,this.previous,this.source)},mxValueChange.prototype.execute=function(){this.value=this.previous,this.previous=this.model.valueForCellChanged(this.cell,this.previous)},mxStyleChange.prototype.execute=function(){this.style=this.previous,this.previous=this.model.styleForCellChanged(this.cell,this.previous)},mxGeometryChange.prototype.execute=function(){this.geometry=this.previous,this.previous=this.model.geometryForCellChanged(this.cell,this.previous)},mxCollapseChange.prototype.execute=function(){this.collapsed=this.previous,this.previous=this.model.collapsedStateForCellChanged(this.cell,this.previous)},mxVisibleChange.prototype.execute=function(){this.visible=this.previous,this.previous=this.model.visibleStateForCellChanged(this.cell,this.previous)},mxCellAttributeChange.prototype.execute=function(){var e=this.cell.getAttribute(this.attribute);null==this.previous?this.cell.value.removeAttribute(this.attribute):this.cell.setAttribute(this.attribute,this.previous),this.previous=e},mxCell.prototype.id=null,mxCell.prototype.value=null,mxCell.prototype.geometry=null,mxCell.prototype.style=null,mxCell.prototype.vertex=!1,mxCell.prototype.edge=!1,mxCell.prototype.connectable=!0,mxCell.prototype.visible=!0,mxCell.prototype.collapsed=!1,mxCell.prototype.parent=null,mxCell.prototype.source=null,mxCell.prototype.target=null,mxCell.prototype.children=null,mxCell.prototype.edges=null,mxCell.prototype.mxTransient="id value parent source target children edges".split(" "),mxCell.prototype.getId=function(){return this.id},mxCell.prototype.setId=function(e){this.id=e},mxCell.prototype.getValue=function(){return this.value},mxCell.prototype.setValue=function(e){this.value=e},mxCell.prototype.valueChanged=function(e){var t=this.getValue();return this.setValue(e),t},mxCell.prototype.getGeometry=function(){return this.geometry},mxCell.prototype.setGeometry=function(e){this.geometry=e},mxCell.prototype.getStyle=function(){return this.style},mxCell.prototype.setStyle=function(e){this.style=e},mxCell.prototype.isVertex=function(){return this.vertex},mxCell.prototype.setVertex=function(e){this.vertex=e},mxCell.prototype.isEdge=function(){return this.edge},mxCell.prototype.setEdge=function(e){this.edge=e},mxCell.prototype.isConnectable=function(){return this.connectable},mxCell.prototype.setConnectable=function(e){this.connectable=e},mxCell.prototype.isVisible=function(){return this.visible},mxCell.prototype.setVisible=function(e){this.visible=e},mxCell.prototype.isCollapsed=function(){return this.collapsed},mxCell.prototype.setCollapsed=function(e){this.collapsed=e},mxCell.prototype.getParent=function(){return this.parent},mxCell.prototype.setParent=function(e){this.parent=e},mxCell.prototype.getTerminal=function(e){return e?this.source:this.target},mxCell.prototype.setTerminal=function(e,t){return t?this.source=e:this.target=e,e},mxCell.prototype.getChildCount=function(){return null==this.children?0:this.children.length},mxCell.prototype.getIndex=function(e){return mxUtils.indexOf(this.children,e)},mxCell.prototype.getChildAt=function(e){return null==this.children?null:this.children[e]},mxCell.prototype.insert=function(e,t){return null!=e&&(null==t&&(t=this.getChildCount(),e.getParent()==this&&t--),e.removeFromParent(),e.setParent(this),null==this.children?(this.children=[],this.children.push(e)):this.children.splice(t,0,e)),e},mxCell.prototype.remove=function(e){var t=null;return null!=this.children&&0<=e&&(null!=(t=this.getChildAt(e))&&(this.children.splice(e,1),t.setParent(null))),t},mxCell.prototype.removeFromParent=function(){if(null!=this.parent){var e=this.parent.getIndex(this);this.parent.remove(e)}},mxCell.prototype.getEdgeCount=function(){return null==this.edges?0:this.edges.length},mxCell.prototype.getEdgeIndex=function(e){return mxUtils.indexOf(this.edges,e)},mxCell.prototype.getEdgeAt=function(e){return null==this.edges?null:this.edges[e]},mxCell.prototype.insertEdge=function(e,t){return null!=e&&(e.removeFromTerminal(t),e.setTerminal(this,t),null==this.edges||e.getTerminal(!t)!=this||mxUtils.indexOf(this.edges,e)<0)&&(null==this.edges&&(this.edges=[]),this.edges.push(e)),e},mxCell.prototype.removeEdge=function(e,t){if(null!=e){if(e.getTerminal(!t)!=this&&null!=this.edges){var n=this.getEdgeIndex(e);0<=n&&this.edges.splice(n,1)}e.setTerminal(null,t)}return e},mxCell.prototype.removeFromTerminal=function(e){var t=this.getTerminal(e);null!=t&&t.removeEdge(this,e)},mxCell.prototype.getAttribute=function(e,t){var n=this.getValue();return(null!=n&&n.nodeType==mxConstants.NODETYPE_ELEMENT?n.getAttribute(e):null)||t},mxCell.prototype.setAttribute=function(e,t){var n=this.getValue();null!=n&&n.nodeType==mxConstants.NODETYPE_ELEMENT&&n.setAttribute(e,t)},mxCell.prototype.clone=function(){var e=mxUtils.clone(this,this.mxTransient);return e.setValue(this.cloneValue()),e},mxCell.prototype.cloneValue=function(){var e=this.getValue();return null!=e&&("function"==typeof e.clone?e=e.clone():isNaN(e.nodeType)||(e=e.cloneNode(!0))),e},mxGeometry.prototype=new mxRectangle,mxGeometry.prototype.constructor=mxGeometry,mxGeometry.prototype.TRANSLATE_CONTROL_POINTS=!0,mxGeometry.prototype.alternateBounds=null,mxGeometry.prototype.sourcePoint=null,mxGeometry.prototype.targetPoint=null,mxGeometry.prototype.points=null,mxGeometry.prototype.offset=null,mxGeometry.prototype.relative=!1,mxGeometry.prototype.swap=function(){if(null!=this.alternateBounds){var e=new mxRectangle(this.x,this.y,this.width,this.height);this.x=this.alternateBounds.x,this.y=this.alternateBounds.y,this.width=this.alternateBounds.width,this.height=this.alternateBounds.height,this.alternateBounds=e}},mxGeometry.prototype.getTerminalPoint=function(e){return e?this.sourcePoint:this.targetPoint},mxGeometry.prototype.setTerminalPoint=function(e,t){return t?this.sourcePoint=e:this.targetPoint=e,e},mxGeometry.prototype.translate=function(e,t){if(this.clone(),this.relative||(this.x+=e,this.y+=t),null!=this.sourcePoint&&(this.sourcePoint.x+=e,this.sourcePoint.y+=t),null!=this.targetPoint&&(this.targetPoint.x+=e,this.targetPoint.y+=t),this.TRANSLATE_CONTROL_POINTS&&null!=this.points)for(var n=this.points.length,a=0;a<n;a++){var i=this.points[a];null!=i&&(i.x+=e,i.y+=t)}};var mxCellPath={PATH_SEPARATOR:".",create:function(e){var t="";if(null!=e)for(var n=e.getParent();null!=n;)t=n.getIndex(e)+mxCellPath.PATH_SEPARATOR+t,n=(e=n).getParent();return 1<(e=t.length)&&(t=t.substring(0,e-1)),t},getParentPath:function(e){if(null!=e){var t=e.lastIndexOf(mxCellPath.PATH_SEPARATOR);if(0<=t)return e.substring(0,t);if(0<e.length)return""}return null},resolve:function(e,t){var n=e;if(null!=t)for(var a=t.split(mxCellPath.PATH_SEPARATOR),i=0;i<a.length;i++)n=n.getChildAt(parseInt(a[i]));return n},compare:function(e,t){for(var n=Math.min(e.length,t.length),a=0,i=0;i<n;i++)if(e[i]!=t[i]){a=0==e[i].length||0==t[i].length?e[i]==t[i]?0:e[i]>t[i]?1:-1:(n=parseInt(e[i]))==(i=parseInt(t[i]))?0:i<n?1:-1;break}return 0==a&&((n=e.length)!=(i=t.length)&&(a=i<n?1:-1)),a}},mxPerimeter={RectanglePerimeter:function(e,t,n,a){t=e.getCenterX();var i=e.getCenterY(),s=Math.atan2(n.y-i,n.x-t),o=new mxPoint(0,0),r=Math.PI,l=Math.PI/2-s,d=Math.atan2(e.height,e.width);return s<-r+d||r-d<s?(o.x=e.x,o.y=i-e.width*Math.tan(s)/2):s<-d?(o.y=e.y,o.x=t-e.height*Math.tan(l)/2):s<d?(o.x=e.x+e.width,o.y=i+e.width*Math.tan(s)/2):(o.y=e.y+e.height,o.x=t+e.height*Math.tan(l)/2),a&&(n.x>=e.x&&n.x<=e.x+e.width?o.x=n.x:n.y>=e.y&&n.y<=e.y+e.height&&(o.y=n.y),n.x<e.x?o.x=e.x:n.x>e.x+e.width&&(o.x=e.x+e.width),n.y<e.y?o.y=e.y:n.y>e.y+e.height&&(o.y=e.y+e.height)),o},EllipsePerimeter:function(e,t,n,a){var i=e.x,s=e.y,o=e.width/2,r=e.height/2,l=i+o,d=s+r;t=n.x,n=n.y;var c=parseInt(t-l),m=parseInt(n-d);if(0==c&&0!=m)return new mxPoint(l,d+r*m/Math.abs(m));if(0==c&&0==m)return new mxPoint(t,n);if(a){if(s<=n&&n<=s+e.height)return e=n-d,e=Math.sqrt(o*o*(1-e*e/(r*r)))||0,t<=i&&(e=-e),new mxPoint(l+e,n);if(i<=t&&t<=i+e.width)return e=t-l,e=Math.sqrt(r*r*(1-e*e/(o*o)))||0,n<=s&&(e=-e),new mxPoint(t,d+e)}return d-=(i=m/c)*l,l=i*(o=(-(e=-2*l*(s=o*o*i*i+r*r))+(r=Math.sqrt(e*e-4*s*(o*o*i*i*l*l+r*r*l*l-o*o*r*r))))/(2*s))+d,d=i*(r=(-e-r)/(2*s))+d,i=Math.sqrt(Math.pow(o-t,2)+Math.pow(l-n,2)),t=Math.sqrt(Math.pow(r-t,2)+Math.pow(d-n,2)),s=n=0,s=i<t?(n=o,l):(n=r,d),new mxPoint(n,s)},RhombusPerimeter:function(e,t,n,a){t=e.x;var i=e.y,s=e.width,o=t+s/2,r=i+(e=e.height)/2,l=n.x;if(n=n.y,o==l)return new mxPoint(o,n<r?i:i+e);if(r==n)return new mxPoint(l<o?t:t+s,r);var d=o,c=r;return a&&(t<=l&&l<=t+s?d=l:i<=n&&n<=i+e&&(c=n)),l<o?n<r?mxUtils.intersection(l,n,d,c,o,i,t,r):mxUtils.intersection(l,n,d,c,o,i+e,t,r):n<r?mxUtils.intersection(l,n,d,c,o,i,t+s,r):mxUtils.intersection(l,n,d,c,o,i+e,t+s,r)},TrianglePerimeter:function(e,t,n,a){var i=(t=null!=t?t.style[mxConstants.STYLE_DIRECTION]:null)==mxConstants.DIRECTION_NORTH||t==mxConstants.DIRECTION_SOUTH,s=e.x,o=e.y,r=e.width,l=s+r/2,d=o+(e=e.height)/2,c=new mxPoint(s,o),m=new mxPoint(s+r,d),u=new mxPoint(s,o+e);t==mxConstants.DIRECTION_NORTH?(c=u,m=new mxPoint(l,o),u=new mxPoint(s+r,o+e)):t==mxConstants.DIRECTION_SOUTH?(m=new mxPoint(l,o+e),u=new mxPoint(s+r,o)):t==mxConstants.DIRECTION_WEST&&(c=new mxPoint(s+r,o),m=new mxPoint(s,d),u=new mxPoint(s+r,o+e));var p=n.x-l,g=n.y-d,v=(p=i?Math.atan2(p,g):Math.atan2(g,p),i?Math.atan2(r,e):Math.atan2(e,r));g=!1,g=t==mxConstants.DIRECTION_NORTH||t==mxConstants.DIRECTION_WEST?-v<p&&p<v:p<-Math.PI+v||p>Math.PI-v,v=null;return null==(v=g?a&&(i&&n.x>=c.x&&n.x<=u.x||!i&&n.y>=c.y&&n.y<=u.y)?i?new mxPoint(n.x,c.y):new mxPoint(c.x,n.y):t==mxConstants.DIRECTION_NORTH?new mxPoint(s+r/2+e*Math.tan(p)/2,o+e):t==mxConstants.DIRECTION_SOUTH?new mxPoint(s+r/2-e*Math.tan(p)/2,o):t==mxConstants.DIRECTION_WEST?new mxPoint(s+r,o+e/2+r*Math.tan(p)/2):new mxPoint(s,o+e/2-r*Math.tan(p)/2):(a&&(a=new mxPoint(l,d),n.y>=o&&n.y<=o+e?(a.x=i?l:t==mxConstants.DIRECTION_WEST?s+r:s,a.y=n.y):n.x>=s&&n.x<=s+r&&(a.x=n.x,a.y=i?t==mxConstants.DIRECTION_NORTH?o+e:o:d),l=a.x,d=a.y),i&&n.x<=s+r/2||!i&&n.y<=o+e/2?mxUtils.intersection(n.x,n.y,l,d,c.x,c.y,m.x,m.y):mxUtils.intersection(n.x,n.y,l,d,m.x,m.y,u.x,u.y)))&&(v=new mxPoint(l,d)),v}};function mxPrintPreview(e,t,n,a,i,s,o,r,l){this.graph=e,this.scale=null!=t?t:1/e.pageScale,this.border=null!=a?a:0,this.pageFormat=null!=n?n:e.pageFormat,this.title=null!=r?r:"Printer-friendly version",this.x0=null!=i?i:0,this.y0=null!=s?s:0,this.borderColor=o,this.pageSelector=null==l||l}function mxStylesheet(){this.styles={},this.putDefaultVertexStyle(this.createDefaultVertexStyle()),this.putDefaultEdgeStyle(this.createDefaultEdgeStyle())}function mxCellState(e,t,n){this.view=e,this.cell=t,this.style=n,this.origin=new mxPoint,this.absoluteOffset=new mxPoint}function mxGraphSelectionModel(e){this.graph=e,this.cells=[]}function mxSelectionChange(e,t,n){this.selectionModel=e,this.added=null!=t?t.slice():null,this.removed=null!=n?n.slice():null}function mxCellEditor(e){this.graph=e}function mxCellRenderer(){}mxPrintPreview.prototype.graph=null,mxPrintPreview.prototype.pageFormat=null,mxPrintPreview.prototype.scale=null,mxPrintPreview.prototype.border=0,mxPrintPreview.prototype.x0=0,mxPrintPreview.prototype.y0=0,mxPrintPreview.prototype.autoOrigin=!0,mxPrintPreview.prototype.printOverlays=!1,mxPrintPreview.prototype.borderColor=null,mxPrintPreview.prototype.title=null,mxPrintPreview.prototype.pageSelector=null,mxPrintPreview.prototype.wnd=null,mxPrintPreview.prototype.pageCount=0,mxPrintPreview.prototype.getWindow=function(){return this.wnd},mxPrintPreview.prototype.getDoctype=function(){var e="";return 8==document.documentMode&&(e='<meta http-equiv="X-UA-Compatible" content="IE=8">'),e},mxPrintPreview.prototype.open=function(e){var t=this.graph.cellRenderer.initializeOverlay,n=null;try{if(this.printOverlays&&(this.graph.cellRenderer.initializeOverlay=function(e,t){t.init(e.view.getDrawPane())}),null==this.wnd){this.wnd=window.open();var a=this.wnd.document,i=this.getDoctype();null!=i&&0<i.length&&a.writeln(i),a.writeln("<html>"),a.writeln("<head>"),this.writeHead(a,e),a.writeln("</head>"),a.writeln('<body class="mxPage">'),mxClient.link("stylesheet",mxClient.basePath+"/css/common.css",a),mxClient.IS_VML&&(a.namespaces.add("v","urn:schemas-microsoft-com:vml"),a.namespaces.add("o","urn:schemas-microsoft-com:office:office"),a.createStyleSheet().cssText="v\\:*{behavior:url(#default#VML)}o\\:*{behavior:url(#default#VML)}",mxClient.link("stylesheet",mxClient.basePath+"/css/explorer.css",a));var s=this.graph.getGraphBounds().clone(),o=this.graph.getView().getScale(),r=o/this.scale,l=this.graph.getView().getTranslate();this.autoOrigin||(this.x0=-l.x*this.scale,this.y0=-l.y*this.scale,s.width+=s.x,s.height+=s.y,s.x=0,this.border=s.y=0),s.width/=r,s.height/=r;var d=this.pageFormat.width-2*this.border,c=this.pageFormat.height-2*this.border,m=Math.max(1,Math.ceil((s.width+this.x0)/d)),u=Math.max(1,Math.ceil((s.height+this.y0)/c));this.pageCount=m*u;var p=mxUtils.bind(this,function(){if(this.pageSelector&&(1<u||1<m)){var e=this.createPageSelector(u,m);if(a.body.appendChild(e),mxClient.IS_IE){e.style.position="absolute";var t=function(){e.style.top=a.body.scrollTop+10+"px"};mxEvent.addListener(this.wnd,"scroll",function(e){t()}),mxEvent.addListener(this.wnd,"resize",function(e){t()})}}});if(e=function(e,t){if(null!=this.borderColor&&(e.style.borderColor=this.borderColor,e.style.borderStyle="solid",e.style.borderWidth="1px"),e.style.background="white",t&&(e.style.pageBreakAfter="always"),mxClient.IS_IE?(a.writeln(e.outerHTML),e.parentNode.removeChild(e)):(e.parentNode.removeChild(e),a.body.appendChild(e)),t){var n=a.createElement("hr");n.className="mxPageBreak",a.body.appendChild(n)}},null!=(f=this.getCoverPages(this.pageFormat.width,this.pageFormat.height)))for(var g=0;g<f.length;g++)e(f[g],!0);var v=this.getAppendices(this.pageFormat.width,this.pageFormat.height);for(g=0;g<u;g++)for(var h=g*c/this.scale-this.y0/this.scale+(s.y-l.y*o)/o,f=0;f<m;f++){if(null==this.wnd)return null;var b=f*d/this.scale-this.x0/this.scale+(s.x-l.x*o)/o,A=g*m+f+1;(n=this.renderPage(this.pageFormat.width,this.pageFormat.height,mxUtils.bind(this,function(e){this.addGraphFragment(-b,-h,this.scale,A,e)}))).setAttribute("id","mxPage-"+A),e(n,null!=v||g<u-1||f<m-1)}if(null!=v)for(g=0;g<v.length;g++)e(v[g],g<v.length);a.writeln("</body>"),a.writeln("</html>"),a.close(),p(),mxEvent.release(a.body)}this.wnd.focus()}catch(e){null!=n&&null!=n.parentNode&&n.parentNode.removeChild(n)}finally{this.graph.cellRenderer.initializeOverlay=t}return this.wnd},mxPrintPreview.prototype.writeHead=function(e,t){null!=this.title&&e.writeln("<title>"+this.title+"</title>"),e.writeln('<style type="text/css">'),e.writeln("@media print {"),e.writeln("  table.mxPageSelector { display: none; }"),e.writeln("  hr.mxPageBreak { display: none; }"),e.writeln("}"),e.writeln("@media screen {"),e.writeln("  table.mxPageSelector { position: fixed; right: 10px; top: 10px;font-family: Arial; font-size:10pt; border: solid 1px darkgray;background: white; border-collapse:collapse; }"),e.writeln("  table.mxPageSelector td { border: solid 1px gray; padding:4px; }"),e.writeln("  body.mxPage { background: gray; }"),e.writeln("}"),null!=t&&e.writeln(t),e.writeln("</style>")},mxPrintPreview.prototype.createPageSelector=function(e,t){var n=this.wnd.document,a=n.createElement("table");a.className="mxPageSelector",a.setAttribute("border","0");for(var i=n.createElement("tbody"),s=0;s<e;s++){for(var o=n.createElement("tr"),r=0;r<t;r++){var l=s*t+r+1,d=n.createElement("td");if(!mxClient.IS_NS||mxClient.IS_SF||mxClient.IS_GC){var c=n.createElement("a");c.setAttribute("href","#mxPage-"+l),mxUtils.write(c,l,n),d.appendChild(c)}else mxUtils.write(d,l,n);o.appendChild(d)}i.appendChild(o)}return a.appendChild(i),a},mxPrintPreview.prototype.renderPage=function(e,t,n){var a=document.createElement("div");try{a.style.width=e+"px",a.style.height=t+"px",a.style.overflow="hidden",a.style.pageBreakInside="avoid",a.style.position="relative";var i=document.createElement("div");i.style.top=this.border+"px",i.style.left=this.border+"px",i.style.width=e-2*this.border+"px",i.style.height=t-2*this.border+"px",i.style.overflow="hidden",this.graph.dialect==mxConstants.DIALECT_VML&&(i.style.position="absolute"),a.appendChild(i),document.body.appendChild(a),n(i)}catch(e){throw a.parentNode.removeChild(a),e}return a},mxPrintPreview.prototype.addGraphFragment=function(e,t,n,a,i){a=this.graph.getView();var s=this.graph.container;this.graph.container=i;var o=a.getCanvas(),r=a.getBackgroundPane(),l=a.getDrawPane(),d=a.getOverlayPane();this.graph.dialect==mxConstants.DIALECT_SVG?a.createSvg():this.graph.dialect==mxConstants.DIALECT_VML?a.createVml():a.createHtml();var c=a.isEventsEnabled();a.setEventsEnabled(!1);var m=this.graph.isEnabled();this.graph.setEnabled(!1);var u=a.getTranslate();a.translate=new mxPoint(e,t),e=null;try{var p=[this.graph.getModel().getRoot()];e=new mxTemporaryCellStates(a,n,p)}finally{if(mxClient.IS_IE)a.overlayPane.innerHTML="";else for(n=i.firstChild;null!=n;)p=n.nextSibling,"svg"==(t=n.nodeName.toLowerCase())?(n.setAttribute("width",parseInt(i.style.width)),n.setAttribute("height",parseInt(i.style.height))):"default"!=n.style.cursor&&"table"!=t&&n.parentNode.removeChild(n),n=p;a.overlayPane.parentNode.removeChild(a.overlayPane),this.graph.setEnabled(m),this.graph.container=s,a.canvas=o,a.backgroundPane=r,a.drawPane=l,a.overlayPane=d,a.translate=u,e.destroy(),a.setEventsEnabled(c)}},mxPrintPreview.prototype.getCoverPages=function(){return null},mxPrintPreview.prototype.getAppendices=function(){return null},mxPrintPreview.prototype.print=function(){var e=this.open();null!=e&&e.print()},mxPrintPreview.prototype.close=function(){null!=this.wnd&&(this.wnd.close(),this.wnd=null)},mxStylesheet.prototype.createDefaultVertexStyle=function(){var e={};return e[mxConstants.STYLE_SHAPE]=mxConstants.SHAPE_RECTANGLE,e[mxConstants.STYLE_PERIMETER]=mxPerimeter.RectanglePerimeter,e[mxConstants.STYLE_VERTICAL_ALIGN]=mxConstants.ALIGN_MIDDLE,e[mxConstants.STYLE_ALIGN]=mxConstants.ALIGN_CENTER,e[mxConstants.STYLE_FILLCOLOR]="#C3D9FF",e[mxConstants.STYLE_STROKECOLOR]="#6482B9",e[mxConstants.STYLE_FONTCOLOR]="#774400",e},mxStylesheet.prototype.createDefaultEdgeStyle=function(){var e={};return e[mxConstants.STYLE_SHAPE]=mxConstants.SHAPE_CONNECTOR,e[mxConstants.STYLE_ENDARROW]=mxConstants.ARROW_CLASSIC,e[mxConstants.STYLE_VERTICAL_ALIGN]=mxConstants.ALIGN_MIDDLE,e[mxConstants.STYLE_ALIGN]=mxConstants.ALIGN_CENTER,e[mxConstants.STYLE_STROKECOLOR]="#6482B9",e[mxConstants.STYLE_FONTCOLOR]="#446299",e},mxStylesheet.prototype.putDefaultVertexStyle=function(e){this.putCellStyle("defaultVertex",e)},mxStylesheet.prototype.putDefaultEdgeStyle=function(e){this.putCellStyle("defaultEdge",e)},mxStylesheet.prototype.getDefaultVertexStyle=function(){return this.styles.defaultVertex},mxStylesheet.prototype.getDefaultEdgeStyle=function(){return this.styles.defaultEdge},mxStylesheet.prototype.putCellStyle=function(e,t){this.styles[e]=t},mxStylesheet.prototype.getCellStyle=function(e,t){var n=t;if(null!=e&&0<e.length)for(var a=e.split(";"),i=(n=null!=n&&";"!=e.charAt(0)?mxUtils.clone(n):{},0);i<a.length;i++){var s=(o=a[i]).indexOf("=");if(0<=s){var o,r=o.substring(0,s);(o=o.substring(s+1))==mxConstants.NONE?delete n[r]:mxUtils.isNumeric(o)?n[r]=parseFloat(o):n[r]=o}else if(null!=(o=this.styles[o]))for(r in o)n[r]=o[r]}return n},mxCellState.prototype=new mxRectangle,mxCellState.prototype.constructor=mxCellState,mxCellState.prototype.view=null,mxCellState.prototype.cell=null,mxCellState.prototype.style=null,mxCellState.prototype.invalid=!0,mxCellState.prototype.invalidOrder=!1,mxCellState.prototype.orderChanged=!1,mxCellState.prototype.origin=null,mxCellState.prototype.absolutePoints=null,mxCellState.prototype.absoluteOffset=null,mxCellState.prototype.visibleSourceState=null,mxCellState.prototype.visibleTargetState=null,mxCellState.prototype.terminalDistance=0,mxCellState.prototype.length=0,mxCellState.prototype.segments=null,mxCellState.prototype.shape=null,mxCellState.prototype.text=null,mxCellState.prototype.getPerimeterBounds=function(e,t){if(e=e||0,t=null!=t?t:new mxRectangle(this.x,this.y,this.width,this.height),null!=this.shape&&null!=this.shape.stencil){var n=this.shape.stencil.computeAspect(this.style,t.x,t.y,t.width,t.height);t.x=n.x,t.y=n.y,t.width=this.shape.stencil.w0*n.width,t.height=this.shape.stencil.h0*n.height}return 0!=e&&t.grow(e),t},mxCellState.prototype.setAbsoluteTerminalPoint=function(e,t){t?(null==this.absolutePoints&&(this.absolutePoints=[]),0==this.absolutePoints.length?this.absolutePoints.push(e):this.absolutePoints[0]=e):null==this.absolutePoints?(this.absolutePoints=[],this.absolutePoints.push(null),this.absolutePoints.push(e)):1==this.absolutePoints.length?this.absolutePoints.push(e):this.absolutePoints[this.absolutePoints.length-1]=e},mxCellState.prototype.setCursor=function(e){null!=this.shape&&this.shape.setCursor(e),null!=this.text&&this.text.setCursor(e)},mxCellState.prototype.getVisibleTerminal=function(e){return null!=(e=this.getVisibleTerminalState(e))?e.cell:null},mxCellState.prototype.getVisibleTerminalState=function(e){return e?this.visibleSourceState:this.visibleTargetState},mxCellState.prototype.setVisibleTerminalState=function(e,t){t?this.visibleSourceState=e:this.visibleTargetState=e},mxCellState.prototype.destroy=function(){this.view.graph.cellRenderer.destroy(this)},mxCellState.prototype.clone=function(){var e=new mxCellState(this.view,this.cell,this.style);if(null!=this.absolutePoints){e.absolutePoints=[];for(var t=0;t<this.absolutePoints.length;t++)e.absolutePoints[t]=this.absolutePoints[t].clone()}return null!=this.origin&&(e.origin=this.origin.clone()),null!=this.absoluteOffset&&(e.absoluteOffset=this.absoluteOffset.clone()),null!=this.boundingBox&&(e.boundingBox=this.boundingBox.clone()),e.terminalDistance=this.terminalDistance,e.segments=this.segments,e.length=this.length,e.x=this.x,e.y=this.y,e.width=this.width,e.height=this.height,e},mxGraphSelectionModel.prototype=new mxEventSource,mxGraphSelectionModel.prototype.constructor=mxGraphSelectionModel,mxGraphSelectionModel.prototype.doneResource="none"!=mxClient.language?"done":"",mxGraphSelectionModel.prototype.updatingSelectionResource="none"!=mxClient.language?"updatingSelection":"",mxGraphSelectionModel.prototype.graph=null,mxGraphSelectionModel.prototype.singleSelection=!1,mxGraphSelectionModel.prototype.isSingleSelection=function(){return this.singleSelection},mxGraphSelectionModel.prototype.setSingleSelection=function(e){this.singleSelection=e},mxGraphSelectionModel.prototype.isSelected=function(e){return null!=e&&0<=mxUtils.indexOf(this.cells,e)},mxGraphSelectionModel.prototype.isEmpty=function(){return 0==this.cells.length},mxGraphSelectionModel.prototype.clear=function(){this.changeSelection(null,this.cells)},mxGraphSelectionModel.prototype.setCell=function(e){null!=e&&this.setCells([e])},mxGraphSelectionModel.prototype.setCells=function(e){if(null!=e){this.singleSelection&&(e=[this.getFirstSelectableCell(e)]);for(var t=[],n=0;n<e.length;n++)this.graph.isCellSelectable(e[n])&&t.push(e[n]);this.changeSelection(t,this.cells)}},mxGraphSelectionModel.prototype.getFirstSelectableCell=function(e){if(null!=e)for(var t=0;t<e.length;t++)if(this.graph.isCellSelectable(e[t]))return e[t];return null},mxGraphSelectionModel.prototype.addCell=function(e){null!=e&&this.addCells([e])},mxGraphSelectionModel.prototype.addCells=function(e){if(null!=e){var t=null;this.singleSelection&&(t=this.cells,e=[this.getFirstSelectableCell(e)]);for(var n=[],a=0;a<e.length;a++)!this.isSelected(e[a])&&this.graph.isCellSelectable(e[a])&&n.push(e[a]);this.changeSelection(n,t)}},mxGraphSelectionModel.prototype.removeCell=function(e){null!=e&&this.removeCells([e])},mxGraphSelectionModel.prototype.removeCells=function(e){if(null!=e){for(var t=[],n=0;n<e.length;n++)this.isSelected(e[n])&&t.push(e[n]);this.changeSelection(null,t)}},mxGraphSelectionModel.prototype.changeSelection=function(e,t){if(null!=e&&0<e.length&&null!=e[0]||null!=t&&0<t.length&&null!=t[0]){var n=new mxSelectionChange(this,e,t);n.execute();var a=new mxUndoableEdit(this,!1);a.add(n),this.fireEvent(new mxEventObject(mxEvent.UNDO,"edit",a))}},mxGraphSelectionModel.prototype.cellAdded=function(e){null!=e&&!this.isSelected(e)&&this.cells.push(e)},mxGraphSelectionModel.prototype.cellRemoved=function(e){null!=e&&(0<=(e=mxUtils.indexOf(this.cells,e))&&this.cells.splice(e,1))},mxSelectionChange.prototype.execute=function(){var e=mxLog.enter("mxSelectionChange.execute");if(window.status=mxResources.get(this.selectionModel.updatingSelectionResource)||this.selectionModel.updatingSelectionResource,null!=this.removed)for(var t=0;t<this.removed.length;t++)this.selectionModel.cellRemoved(this.removed[t]);if(null!=this.added)for(t=0;t<this.added.length;t++)this.selectionModel.cellAdded(this.added[t]);t=this.added,this.added=this.removed,this.removed=t,window.status=mxResources.get(this.selectionModel.doneResource)||this.selectionModel.doneResource,mxLog.leave("mxSelectionChange.execute",e),this.selectionModel.fireEvent(new mxEventObject(mxEvent.CHANGE,"added",this.added,"removed",this.removed))},mxCellEditor.prototype.graph=null,mxCellEditor.prototype.textarea=null,mxCellEditor.prototype.editingCell=null,mxCellEditor.prototype.trigger=null,mxCellEditor.prototype.modified=!1,mxCellEditor.prototype.autoSize=!0,mxCellEditor.prototype.emptyLabelText="",mxCellEditor.prototype.textNode="",mxCellEditor.prototype.init=function(){this.textarea=document.createElement("textarea"),this.textarea.className="mxCellEditor",this.textarea.style.position="absolute",this.textarea.style.overflow="visible",this.textarea.setAttribute("cols","20"),this.textarea.setAttribute("rows","4"),mxClient.IS_NS&&(this.textarea.style.resize="none"),mxEvent.addListener(this.textarea,"blur",mxUtils.bind(this,function(e){this.focusLost()})),mxEvent.addListener(this.textarea,"keydown",mxUtils.bind(this,function(e){mxEvent.isConsumed(e)||(113==e.keyCode||this.graph.isEnterStopsCellEditing()&&13==e.keyCode&&!mxEvent.isControlDown(e)&&!mxEvent.isShiftDown(e)?(this.graph.stopEditing(!1),mxEvent.consume(e)):27==e.keyCode?(this.graph.stopEditing(!0),mxEvent.consume(e)):(this.clearOnChange&&(this.clearOnChange=!1,this.textarea.value=""),this.setModified(!0)))})),mxEvent.addListener(this.textarea,"keypress",mxUtils.bind(this,function(e){this.autoSize&&!mxEvent.isConsumed(e)&&setTimeout(mxUtils.bind(this,function(){this.resize()}),0)}))},mxCellEditor.prototype.resize=function(){if(null!=this.textDiv){var e=this.graph.getView().getState(this.editingCell),t=this.graph.isLabelClipped(e.cell),n=this.graph.isWrapping(e.cell);if(this.graph.getModel().isEdge(e.cell))this.bounds.x=e.absoluteOffset.x,this.bounds.y=e.absoluteOffset.y,this.bounds.width=0,this.bounds.height=0;else if(null!=this.bounds){this.bounds.x=e.x,this.bounds.y=e.y,this.bounds.width=e.width,this.bounds.height=e.height,(a=mxUtils.getValue(e.style,mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER))==mxConstants.ALIGN_LEFT?this.bounds.x-=e.width:a==mxConstants.ALIGN_RIGHT&&(this.bounds.x+=e.width),(a=mxUtils.getValue(e.style,mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE))==mxConstants.ALIGN_TOP?this.bounds.y-=e.height:a==mxConstants.ALIGN_BOTTOM&&(this.bounds.y+=e.height)}"\n"!=(a=this.textarea.value).charAt(a.length-1)&&""!=a||(a+="&nbsp;"),a=mxUtils.htmlEntities(a,!1),n?(this.textDiv.style.whiteSpace="normal",this.textDiv.style.width=this.bounds.width+"px"):a=a.replace(/ /g,"&nbsp;"),a=a.replace(/\n/g,"<br/>"),this.textDiv.innerHTML=a;var a=this.textDiv.offsetWidth+30,i=this.textDiv.offsetHeight+16;a=Math.max(a,40),i=Math.max(i,20);t&&(a=Math.min(this.bounds.width-4,a),i=Math.min(this.bounds.height,i));var s=null!=e.text?e.text.margin:null;null==s&&(s=mxUtils.getValue(e.style,mxConstants.STYLE_ALIGN,mxConstants.ALIGN_CENTER),e=mxUtils.getValue(e.style,mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),s=mxUtils.getAlignmentAsPoint(s,e)),null!=s&&(!t&&n||(this.textarea.style.left=Math.max(0,Math.round(this.bounds.x-s.x*this.bounds.width+s.x*a)-3)+"px"),this.textarea.style.top=Math.max(0,Math.round(this.bounds.y-s.y*this.bounds.height+s.y*i)+4)+"px"),!t&&n||(this.textarea.style.width=a+"px"),this.textarea.style.height=i+"px"}},mxCellEditor.prototype.isModified=function(){return this.modified},mxCellEditor.prototype.setModified=function(e){this.modified=e},mxCellEditor.prototype.focusLost=function(){this.stopEditing(!this.graph.isInvokesStopCellEditing())},mxCellEditor.prototype.startEditing=function(e,t){null==this.textarea&&this.init(),this.stopEditing(!0);var n=this.graph.getView().getState(e);if(null!=n){this.editingCell=e,this.trigger=t,(this.textNode=null)!=n.text&&this.isHideLabel(n)&&(this.textNode=n.text.node,this.textNode.style.visibility="hidden");var a=this.graph.getView().scale,i=(a=mxUtils.getValue(n.style,mxConstants.STYLE_FONTSIZE,mxConstants.DEFAULT_FONTSIZE)*a,mxUtils.getValue(n.style,mxConstants.STYLE_FONTFAMILY,mxConstants.DEFAULT_FONTFAMILY)),s=mxUtils.getValue(n.style,mxConstants.STYLE_FONTCOLOR,"black"),o=mxUtils.getValue(n.style,mxConstants.STYLE_ALIGN,mxConstants.ALIGN_LEFT),r=(mxUtils.getValue(n.style,mxConstants.STYLE_FONTSTYLE,0)&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD,l=(mxUtils.getValue(n.style,mxConstants.STYLE_FONTSTYLE,0)&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC,d=(mxUtils.getValue(n.style,mxConstants.STYLE_FONTSTYLE,0)&mxConstants.FONT_UNDERLINE)==mxConstants.FONT_UNDERLINE;this.textarea.style.fontSize=Math.round(a)+"px",this.textarea.style.lineHeight=Math.round(a*mxConstants.LINE_HEIGHT)+"px",this.textarea.style.fontFamily=i,this.textarea.style.textAlign=o,this.textarea.style.color=s,this.textarea.style.fontWeight=r?"bold":"normal",this.textarea.style.fontStyle=l?"italic":"",this.textarea.style.textDecoration=d?"underline":"",this.textarea.style.overflow="auto",this.textarea.style.outline="none",this.bounds=a=this.getEditorBounds(n),this.textarea.style.left=a.x+"px",this.textarea.style.top=a.y+"px",this.textarea.style.width=a.width+"px",this.textarea.style.height=a.height+"px",this.textarea.style.zIndex=5,null==(n=this.getInitialValue(n,t))||0==n.length?(n=this.getEmptyLabelText(),this.clearOnChange=!0):this.clearOnChange=!1,this.setModified(!1),this.textarea.value=n,this.graph.container.appendChild(this.textarea),"none"!=this.textarea.style.display&&(this.autoSize&&(this.textDiv=this.createTextDiv(),document.body.appendChild(this.textDiv),this.resize()),this.textarea.focus(),this.textarea.select())}},mxCellEditor.prototype.createTextDiv=function(){var e=document.createElement("div"),t=e.style;return t.position="absolute",t.whiteSpace="nowrap",t.visibility="hidden",t.display=mxClient.IS_QUIRKS?"inline":"inline-block",t.zoom="1",t.verticalAlign="top",t.lineHeight=this.textarea.style.lineHeight,t.fontSize=this.textarea.style.fontSize,t.fontFamily=this.textarea.style.fontFamily,t.fontWeight=this.textarea.style.fontWeight,t.textAlign=this.textarea.style.textAlign,t.fontStyle=this.textarea.style.fontStyle,t.textDecoration=this.textarea.style.textDecoration,e},mxCellEditor.prototype.stopEditing=function(e){null!=this.editingCell&&(null!=this.textNode&&(this.textNode.style.visibility="visible",this.textNode=null),!e&&this.isModified()&&this.graph.labelChanged(this.editingCell,this.getCurrentValue(),this.trigger),null!=this.textDiv&&(document.body.removeChild(this.textDiv),this.textDiv=null),this.bounds=this.trigger=this.editingCell=null,this.textarea.blur(),this.textarea.parentNode.removeChild(this.textarea))},mxCellEditor.prototype.getInitialValue=function(e,t){return this.graph.getEditingValue(e.cell,t)},mxCellEditor.prototype.getCurrentValue=function(){return this.textarea.value.replace(/\r/g,"")},mxCellEditor.prototype.isHideLabel=function(e){return!0},mxCellEditor.prototype.getMinimumSize=function(e){var t=this.graph.getView().scale;return new mxRectangle(0,0,null==e.text?30:e.text.size*t+20,"left"==this.textarea.style.textAlign?120:40)},mxCellEditor.prototype.getEditorBounds=function(e){var t=this.graph.getModel().isEdge(e.cell),n=this.graph.getView().scale,a=(i=this.getMinimumSize(e)).width,i=i.height,s=parseInt(e.style[mxConstants.STYLE_SPACING]||2)*n,o=parseInt(e.style[mxConstants.STYLE_SPACING_TOP]||0)*n+s,r=parseInt(e.style[mxConstants.STYLE_SPACING_RIGHT]||0)*n+s,l=parseInt(e.style[mxConstants.STYLE_SPACING_BOTTOM]||0)*n+s;n=parseInt(e.style[mxConstants.STYLE_SPACING_LEFT]||0)*n+s,r=new mxRectangle(e.x,e.y,Math.max(a,e.width-n-r),Math.max(i,e.height-o-l));return t?(r.x=e.absoluteOffset.x,r.y=e.absoluteOffset.y,null!=e.text&&null!=e.text.boundingBox&&(0<e.text.boundingBox.x&&(r.x=e.text.boundingBox.x),0<e.text.boundingBox.y&&(r.y=e.text.boundingBox.y))):null!=e.text&&null!=e.text.boundingBox&&(r.x=Math.min(r.x,e.text.boundingBox.x),r.y=Math.min(r.y,e.text.boundingBox.y)),r.x+=n,r.y+=o,null!=e.text&&null!=e.text.boundingBox&&(t?(r.width=Math.max(a,e.text.boundingBox.width),r.height=Math.max(i,e.text.boundingBox.height)):(r.width=Math.max(r.width,e.text.boundingBox.width),r.height=Math.max(r.height,e.text.boundingBox.height))),this.graph.getModel().isVertex(e.cell)&&((t=mxUtils.getValue(e.style,mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER))==mxConstants.ALIGN_LEFT?r.x-=e.width:t==mxConstants.ALIGN_RIGHT&&(r.x+=e.width),(t=mxUtils.getValue(e.style,mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE))==mxConstants.ALIGN_TOP?r.y-=e.height:t==mxConstants.ALIGN_BOTTOM&&(r.y+=e.height)),r},mxCellEditor.prototype.getEmptyLabelText=function(e){return this.emptyLabelText},mxCellEditor.prototype.getEditingCell=function(){return this.editingCell},mxCellEditor.prototype.destroy=function(){null!=this.textarea&&(mxEvent.release(this.textarea),null!=this.textarea.parentNode&&this.textarea.parentNode.removeChild(this.textarea),this.textarea=null)},mxCellRenderer.prototype.defaultEdgeShape=mxConnector,mxCellRenderer.prototype.defaultVertexShape=mxRectangleShape,mxCellRenderer.prototype.defaultTextShape=mxText,mxCellRenderer.prototype.legacyControlPosition=!0,mxCellRenderer.prototype.defaultShapes={},mxCellRenderer.registerShape=function(e,t){mxCellRenderer.prototype.defaultShapes[e]=t},mxCellRenderer.registerShape(mxConstants.SHAPE_RECTANGLE,mxRectangleShape),mxCellRenderer.registerShape(mxConstants.SHAPE_ELLIPSE,mxEllipse),mxCellRenderer.registerShape(mxConstants.SHAPE_RHOMBUS,mxRhombus),mxCellRenderer.registerShape(mxConstants.SHAPE_CYLINDER,mxCylinder),mxCellRenderer.registerShape(mxConstants.SHAPE_CONNECTOR,mxConnector),mxCellRenderer.registerShape(mxConstants.SHAPE_ACTOR,mxActor),mxCellRenderer.registerShape(mxConstants.SHAPE_TRIANGLE,mxTriangle),mxCellRenderer.registerShape(mxConstants.SHAPE_HEXAGON,mxHexagon),mxCellRenderer.registerShape(mxConstants.SHAPE_CLOUD,mxCloud),mxCellRenderer.registerShape(mxConstants.SHAPE_LINE,mxLine),mxCellRenderer.registerShape(mxConstants.SHAPE_ARROW,mxArrow),mxCellRenderer.registerShape(mxConstants.SHAPE_DOUBLE_ELLIPSE,mxDoubleEllipse),mxCellRenderer.registerShape(mxConstants.SHAPE_SWIMLANE,mxSwimlane),mxCellRenderer.registerShape(mxConstants.SHAPE_IMAGE,mxImageShape),mxCellRenderer.registerShape(mxConstants.SHAPE_LABEL,mxLabel),mxCellRenderer.prototype.initialize=function(e,t){var n=e.view.graph.getModel();null!=e.view.graph.container&&null==e.shape&&e.cell!=e.view.currentRoot&&(n.isVertex(e.cell)||n.isEdge(e.cell))&&(this.createShape(e),null==e.shape||null!=t&&!t||(this.initializeShape(e),e.view.graph.ordered||n.isEdge(e.cell)?e.invalidOrder=!0:e.view.graph.keepEdgesInForeground&&null!=this.firstEdge&&(this.firstEdge.parentNode==e.shape.node.parentNode?this.insertState(e,this.firstEdge):this.firstEdge=null),e.shape.scale=e.view.scale,this.createCellOverlays(e),this.installListeners(e)))},mxCellRenderer.prototype.initializeShape=function(e){e.shape.init(e.view.getDrawPane())},mxCellRenderer.prototype.getPreviousStateInContainer=function(e,t){for(var n=null,a=e.view.graph,i=a.getModel(),s=e.cell,o=i.getParent(s);null!=o&&null==n;)n=this.findPreviousStateInContainer(a,o,s,t),s=o,o=i.getParent(s);return n},mxCellRenderer.prototype.findPreviousStateInContainer=function(e,t,n,a){var i=null,s=e.getModel();for(n=null!=n?t.getIndex(n)-1:s.getChildCount(t)-1;0<=n&&null==i;n--)i=this.findPreviousStateInContainer(e,s.getChildAt(t,n),null,a);return null!=i||(null==(i=e.view.getState(t))||null!=i.shape&&null!=i.shape.node&&i.shape.node.parentNode==a)||(i=null),i},mxCellRenderer.prototype.order=function(e){var t=e.shape.node.parentNode,n=this.getPreviousStateInContainer(e,t),a=t.firstChild;null!=n&&(a=n.shape.node,null!=n.text&&null!=n.text.node&&n.text.node.parentNode==t&&(a=n.text.node),a=a.nextSibling),this.insertState(e,a)},mxCellRenderer.prototype.orderEdge=function(e){var t=(n=e.view).graph.getModel();if(n.graph.keepEdgesInForeground)null!=this.firstEdge&&null!=this.firstEdge.parentNode&&this.firstEdge.parentNode==e.shape.node.parentNode||(this.firstEdge=e.shape.node);else if(n.graph.keepEdgesInBackground){var n,a=e.shape.node,i=a.parentNode;t=t.getParent(e.cell);null!=(i=null!=(n=n.getState(t))&&null!=n.shape&&null!=n.shape.node?n.shape.node.nextSibling:i.firstChild)&&i!=a&&this.insertState(e,i)}},mxCellRenderer.prototype.insertState=function(e,t){e.shape.node.parentNode.insertBefore(e.shape.node,t),null!=e.text&&null!=e.text.node&&e.text.node.parentNode==e.shape.node.parentNode&&e.shape.node.parentNode.insertBefore(e.text.node,e.shape.node.nextSibling)},mxCellRenderer.prototype.createShape=function(e){if(null!=e.style){var t=mxStencilRegistry.getStencil(e.style[mxConstants.STYLE_SHAPE]);null!=t?e.shape=new mxShape(t):(t=this.getShapeConstructor(e),e.shape=new t),e.shape.points=e.absolutePoints,e.shape.bounds=new mxRectangle(e.x,e.y,e.width,e.height),e.shape.dialect=e.view.graph.dialect,this.configureShape(e)}},mxCellRenderer.prototype.getShape=function(e){return null!=e?mxCellRenderer.prototype.defaultShapes[e]:null},mxCellRenderer.prototype.getShapeConstructor=function(e){var t=this.getShape(e.style[mxConstants.STYLE_SHAPE]);return null==t&&(t=e.view.graph.getModel().isEdge(e.cell)?this.defaultEdgeShape:this.defaultVertexShape),t},mxCellRenderer.prototype.configureShape=function(e){e.shape.apply(e),e.shape.image=e.view.graph.getImage(e),e.shape.indicatorShape=this.getShape(e.view.graph.getIndicatorShape(e)),e.shape.indicatorColor=e.view.graph.getIndicatorColor(e),e.shape.indicatorGradientColor=e.view.graph.getIndicatorGradientColor(e),e.shape.indicatorDirection=e.style[mxConstants.STYLE_INDICATOR_DIRECTION],e.shape.indicatorImage=e.view.graph.getIndicatorImage(e),this.postConfigureShape(e)},mxCellRenderer.prototype.postConfigureShape=function(e){null!=e.shape&&(this.resolveColor(e,"indicatorColor",mxConstants.STYLE_FILLCOLOR),this.resolveColor(e,"indicatorGradientColor",mxConstants.STYLE_GRADIENTCOLOR),this.resolveColor(e,"fill",mxConstants.STYLE_FILLCOLOR),this.resolveColor(e,"stroke",mxConstants.STYLE_STROKECOLOR),this.resolveColor(e,"gradient",mxConstants.STYLE_GRADIENTCOLOR))},mxCellRenderer.prototype.resolveColor=function(e,t,n){var a=e.shape[t],i=e.view.graph,s=null;"inherit"==a?s=i.model.getParent(e.cell):"swimlane"==a?(s=null!=i.model.getTerminal(e.cell,!1)?i.model.getTerminal(e.cell,!1):e.cell,s=i.getSwimlane(s),n=i.swimlaneIndicatorColorAttribute):"indicated"==a&&(e.shape[t]=e.shape.indicatorColor),null!=s&&(a=i.getView().getState(s),(e.shape[t]=null)!=a&&(e.shape[t]=null!=a.shape&&"indicatorColor"!=t?a.shape[t]:a.style[n]))},mxCellRenderer.prototype.getLabelValue=function(e){return e.view.graph.getLabel(e.cell)},mxCellRenderer.prototype.createLabel=function(n,e){var a=n.view.graph;if(a.getModel().isEdge(n.cell),0<n.style[mxConstants.STYLE_FONTSIZE]||null==n.style[mxConstants.STYLE_FONTSIZE]){var t=a.isHtmlLabel(n.cell)||null!=e&&mxUtils.isNode(e);n.text=new this.defaultTextShape(e,new mxRectangle,n.style[mxConstants.STYLE_ALIGN]||mxConstants.ALIGN_CENTER,a.getVerticalAlign(n),n.style[mxConstants.STYLE_FONTCOLOR],n.style[mxConstants.STYLE_FONTFAMILY],n.style[mxConstants.STYLE_FONTSIZE],n.style[mxConstants.STYLE_FONTSTYLE],n.style[mxConstants.STYLE_SPACING],n.style[mxConstants.STYLE_SPACING_TOP],n.style[mxConstants.STYLE_SPACING_RIGHT],n.style[mxConstants.STYLE_SPACING_BOTTOM],n.style[mxConstants.STYLE_SPACING_LEFT],n.style[mxConstants.STYLE_HORIZONTAL],n.style[mxConstants.STYLE_LABEL_BACKGROUNDCOLOR],n.style[mxConstants.STYLE_LABEL_BORDERCOLOR],a.isWrapping(n.cell)&&a.isHtmlLabel(n.cell),a.isLabelClipped(n.cell),n.style[mxConstants.STYLE_OVERFLOW],n.style[mxConstants.STYLE_LABEL_PADDING]),n.text.opacity=mxUtils.getValue(n.style,mxConstants.STYLE_TEXT_OPACITY,100),n.text.dialect=t?mxConstants.DIALECT_STRICTHTML:n.view.graph.dialect,n.text.state=n,this.initializeLabel(n);var i=!1,s=function(e){var t=n;return(mxClient.IS_TOUCH||i)&&(t=mxEvent.getClientX(e),e=mxEvent.getClientY(e),e=mxUtils.convertPoint(a.container,t,e),t=a.view.getState(a.getCellAt(e.x,e.y))),t};mxEvent.addGestureListeners(n.text.node,mxUtils.bind(this,function(e){this.isLabelEvent(n,e)&&(a.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e,n)),i=a.dialect!=mxConstants.DIALECT_SVG&&"IMG"==mxEvent.getSource(e).nodeName)}),mxUtils.bind(this,function(e){this.isLabelEvent(n,e)&&a.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,s(e)))}),mxUtils.bind(this,function(e){this.isLabelEvent(n,e)&&(a.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e,s(e))),i=!1)})),mxEvent.addListener(n.text.node,"dblclick",mxUtils.bind(this,function(e){this.isLabelEvent(n,e)&&(a.dblClick(e,n.cell),mxEvent.consume(e))}))}},mxCellRenderer.prototype.initializeLabel=function(e){var t=e.view.graph;e.text.dialect!=mxConstants.DIALECT_SVG&&(mxClient.IS_SVG&&mxClient.NO_FO?e.text.init(t.container):mxUtils.isVml(e.view.getDrawPane())&&(null!=e.shape.label?e.text.init(e.shape.label):e.text.init(e.shape.node))),null==e.text.node&&(e.text.init(e.view.getDrawPane()),null!=e.shape&&null!=e.text&&e.shape.node.parentNode.insertBefore(e.text.node,e.shape.node.nextSibling))},mxCellRenderer.prototype.createCellOverlays=function(e){var t=e.view.graph.getCellOverlays(e.cell),n=null;if(null!=t){n=new mxDictionary;for(var a=0;a<t.length;a++){var i=null!=e.overlays?e.overlays.remove(t[a]):null;null==i&&((i=new mxImageShape(new mxRectangle,t[a].image.src)).dialect=e.view.graph.dialect,i.preserveImageAspect=!1,i.overlay=t[a],this.initializeOverlay(e,i),this.installCellOverlayListeners(e,t[a],i),null!=t[a].cursor&&(i.node.style.cursor=t[a].cursor)),n.put(t[a],i)}}null!=e.overlays&&e.overlays.visit(function(e,t){t.destroy()}),e.overlays=n},mxCellRenderer.prototype.initializeOverlay=function(e,t){t.init(e.view.getOverlayPane())},mxCellRenderer.prototype.installCellOverlayListeners=function(t,n,e){var a=t.view.graph;mxEvent.addListener(e.node,"click",function(e){a.isEditing()&&a.stopEditing(!a.isInvokesStopCellEditing()),n.fireEvent(new mxEventObject(mxEvent.CLICK,"event",e,"cell",t.cell))}),mxEvent.addGestureListeners(e.node,function(e){mxEvent.consume(e)},function(e){a.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,t))}),mxClient.IS_TOUCH&&mxEvent.addListener(e.node,"touchend",function(e){n.fireEvent(new mxEventObject(mxEvent.CLICK,"event",e,"cell",t.cell))})},mxCellRenderer.prototype.createControl=function(n){var a=n.view.graph,e=a.getFoldingImage(n);if(a.foldingEnabled&&null!=e){if(null==n.control){var t=new mxRectangle(0,0,e.width,e.height);n.control=new mxImageShape(t,e.src),n.control.preserveImageAspect=!1,n.control.dialect=a.dialect,this.initControl(n,n.control,!0,function(e){if(a.isEnabled()){var t=!a.isCellCollapsed(n.cell);a.foldCells(t,!1,[n.cell]),mxEvent.consume(e)}})}}else null!=n.control&&(n.control.destroy(),n.control=null)},mxCellRenderer.prototype.initControl=function(t,e,n,a){var i=t.view.graph;return i.isHtmlLabel(t.cell)&&mxClient.NO_FO&&i.dialect==mxConstants.DIALECT_SVG?(e.dialect=mxConstants.DIALECT_PREFERHTML,e.init(i.container),e.node.style.zIndex=1):e.init(t.view.getOverlayPane()),e=e.innerNode||e.node,a&&(i.isEnabled()&&(e.style.cursor="pointer"),mxEvent.addListener(e,"click",a)),n&&mxEvent.addGestureListeners(e,function(e){i.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e,t)),mxEvent.consume(e)},function(e){i.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,t))}),e},mxCellRenderer.prototype.isShapeEvent=function(e,t){return!0},mxCellRenderer.prototype.isLabelEvent=function(e,t){return!0},mxCellRenderer.prototype.installListeners=function(n){var a=n.view.graph,t=function(e){var t=n;return(a.dialect!=mxConstants.DIALECT_SVG&&"IMG"==mxEvent.getSource(e).nodeName||mxClient.IS_TOUCH)&&(t=mxEvent.getClientX(e),e=mxEvent.getClientY(e),e=mxUtils.convertPoint(a.container,t,e),t=a.view.getState(a.getCellAt(e.x,e.y))),t},i=!1;mxEvent.addListener(n.shape.node,"gesturestart",mxUtils.bind(this,function(e){a.lastTouchTime=0,i=!0,mxEvent.consume(e)})),mxEvent.addGestureListeners(n.shape.node,mxUtils.bind(this,function(e){this.isShapeEvent(n,e)&&!i?a.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e,null!=n.shape&&mxEvent.getSource(e)==n.shape.content?null:n)):i&&mxEvent.consume(e)}),mxUtils.bind(this,function(e){this.isShapeEvent(n,e)&&!i?a.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,null!=n.shape&&mxEvent.getSource(e)==n.shape.content?null:t(e))):i&&mxEvent.consume(e)}),mxUtils.bind(this,function(e){this.isShapeEvent(n,e)&&!i?a.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e,null!=n.shape&&mxEvent.getSource(e)==n.shape.content?null:t(e))):i&&mxEvent.consume(e)}));var s=mxClient.IS_TOUCH?"gestureend":"dblclick";mxEvent.addListener(n.shape.node,s,mxUtils.bind(this,function(e){i=!1,"gestureend"==s?(a.lastTouchTime=0,a.gestureEnabled&&(a.handleGesture(n,e),mxEvent.consume(e))):this.isShapeEvent(n,e)&&(a.dblClick(e,null!=n.shape&&mxEvent.getSource(e)==n.shape.content?null:n.cell),mxEvent.consume(e))}))},mxCellRenderer.prototype.redrawLabel=function(e,t){var n=this.getLabelValue(e);if(null==e.text&&null!=n&&(mxUtils.isNode(n)||0<n.length)?this.createLabel(e,n):null==e.text||null!=n&&0!=n.length||(e.text.destroy(),e.text=null),null!=e.text){var a=(i=e.view.graph).isWrapping(e.cell),i=i.isLabelClipped(e.cell),s=this.getLabelBounds(e);!t&&e.text.value==n&&e.text.isWrapping==a&&e.text.isClipping==i&&e.text.scale==e.view.scale&&e.text.bounds.equals(s)||(e.text.value=n,e.text.bounds=s,e.text.scale=this.getTextScale(e),e.text.isWrapping=a,e.text.isClipping=i,e.text.redraw())}},mxCellRenderer.prototype.getTextScale=function(e){return e.view.scale},mxCellRenderer.prototype.getLabelBounds=function(e){var t=e.view.graph,n=e.view.scale,a=t.getModel().isEdge(e.cell),i=new mxRectangle(e.absoluteOffset.x,e.absoluteOffset.y);return e.text.updateMargin(),a?(a=e.text.getSpacing(),i.x+=a.x*n,i.y+=a.y*n,null!=(t=t.getCellGeometry(e.cell))&&(i.width=Math.max(0,e.text.margin.x*t.width*n-e.text.spacingLeft*n-e.text.spacingRight*n),i.height=Math.max(0,e.text.margin.y*t.height*n-e.text.spacingTop*n-e.text.spacingBottom*n))):(e.text.isPaintBoundsInverted()&&(a=i.x,i.x=i.y,i.y=a),i.x+=e.x,i.y+=e.y,i.width=Math.max(1,e.width),i.height=Math.max(1,e.height),t.isSwimlane(e.cell)&&(0<(t=t.getStartSize(e.cell)).width?(a=Math.min(i.width,t.width*n),e.shape.flipH&&(i.x+=i.width-a),i.width=a):0<t.height&&(a=Math.min(i.height,t.height*n),e.shape.flipV&&(i.y+=i.height-a),i.height=a)),this.rotateLabelBounds(e,i)),i},mxCellRenderer.prototype.rotateLabelBounds=function(e,t){if(e.text.isPaintBoundsInverted()){var n=(e.width-e.height)/2;t.x+=n,t.y-=n,n=t.width,t.width=t.height,t.height=n}if(t.x-=e.text.margin.x*t.width,t.y-=e.text.margin.y*t.height,"fill"!=e.style[mxConstants.STYLE_OVERFLOW]){n=e.view.scale;var a=e.text.getSpacing();t.x+=a.x*n,t.y+=a.y*n,t.width=Math.max(0,t.width-e.text.spacingLeft*n-e.text.spacingRight*n),t.height=Math.max(0,t.height-e.text.spacingTop*n-e.text.spacingBottom*n)}var i=e.text.getTextRotation();0!=i&&null!=e&&e.view.graph.model.isVertex(e.cell)&&(n=e.getCenterX(),a=e.getCenterY(),t.x!=n||t.y!=a)&&(i*=Math.PI/180,pt=mxUtils.getRotatedPoint(new mxPoint(t.x,t.y),Math.cos(i),Math.sin(i),new mxPoint(n,a)),t.x=pt.x,t.y=pt.y)},mxCellRenderer.prototype.redrawCellOverlays=function(s,o){if(this.createCellOverlays(s),null!=s.overlays){var r=mxUtils.mod(mxUtils.getValue(s.style,mxConstants.STYLE_ROTATION,0),90),e=mxUtils.toRadians(r),l=Math.cos(e),d=Math.sin(e);s.overlays.visit(function(e,t){var n=t.overlay.getBounds(s);if(!s.view.graph.getModel().isEdge(s.cell)&&null!=s.shape&&0!=r){var a=n.getCenterX(),i=n.getCenterY();a=(i=mxUtils.getRotatedPoint(new mxPoint(a,i),l,d,new mxPoint(s.getCenterX(),s.getCenterY()))).x,i=i.y;n.x=Math.round(a-n.width/2),n.y=Math.round(i-n.height/2)}!o&&null!=t.bounds&&t.scale==s.view.scale&&t.bounds.equals(n)||(t.bounds=n,t.scale=s.view.scale,t.redraw())})}},mxCellRenderer.prototype.redrawControl=function(e,t){if(null!=e.control){var n=this.getControlBounds(e),a=this.legacyControlPosition?mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION,0):e.shape.getTextRotation(),i=e.view.scale;!t&&e.control.scale==i&&e.control.bounds.equals(n)&&e.control.rotation==a||(e.control.rotation=a,e.control.bounds=n,e.control.scale=i,e.control.redraw())}},mxCellRenderer.prototype.getControlBounds=function(e){if(null==e.control)return null;var t=e.control.scale,n=e.control.bounds.width/t,a=(t=e.control.bounds.height/t,e.view.scale),i=e.getCenterX(),s=e.getCenterY();if(!e.view.graph.getModel().isEdge(e.cell)&&(i=e.x+n*a,s=e.y+t*a,null!=e.shape)){var o=e.shape.getShapeRotation();if(this.legacyControlPosition)o=mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION,0);else if(e.shape.isPaintBoundsInverted()){var r=(e.width-e.height)/2;i=i+r,s=s-r}0!=o&&(r=mxUtils.toRadians(o),o=Math.cos(r),r=Math.sin(r),i=(s=mxUtils.getRotatedPoint(new mxPoint(i,s),o,r,new mxPoint(e.getCenterX(),e.getCenterY()))).x,s=s.y)}return e.view.graph.getModel().isEdge(e.cell),new mxRectangle(Math.round(i-n/2*a),Math.round(s-t/2*a),Math.round(n*a),Math.round(t*a))},mxCellRenderer.prototype.redraw=function(e,t,n){if(null!=e.shape){var a=!1;e.view.graph.getModel().isEdge(e.cell),reconfigure=null!=t&&t,this.createControl(e),(e.orderChanged||e.invalidOrder)&&(e.view.graph.ordered?this.order(e):this.orderEdge(e)),!e.orderChanged&&mxUtils.equalEntries(e.shape.style,e.style)||(this.configureShape(e),t=!0),delete e.invalidOrder,delete e.orderChanged,!t&&null!=e.shape.bounds&&e.shape.scale==e.view.scale&&e.shape.bounds.equals(e)&&mxUtils.equalPoints(e.shape.points,e.absolutePoints)||(a=!0,e.shape.points=null!=e.absolutePoints?e.absolutePoints.slice():null,e.shape.bounds=new mxRectangle(e.x,e.y,e.width,e.height),e.shape.scale=e.view.scale,null==n||n?e.shape.redraw():e.shape.updateBoundingBox()),(null==n||n)&&(this.redrawLabel(e,a),this.redrawCellOverlays(e,a),this.redrawControl(e,a))}},mxCellRenderer.prototype.destroy=function(e){null!=e.shape&&(null!=e.text&&(e.text.destroy(),e.text=null),null!=e.overlays&&(e.overlays.visit(function(e,t){t.destroy()}),e.overlays=null),null!=e.control&&(e.control.destroy(),e.control=null),e.shape.destroy(),e.shape=null)};var mxEdgeStyle={EntityRelation:function(e,t,n,a,i){var s=e.view,o=s.graph;a=mxUtils.getValue(e.style,mxConstants.STYLE_SEGMENT,mxConstants.ENTITY_SEGMENT)*s.scale;var r=(d=e.absolutePoints)[0],l=d[d.length-1],d=!1;if(null!=r)(t=new mxCellState).x=r.x,t.y=r.y;else{if(null==t)return;var c=mxUtils.getPortConstraints(t,e,!0,mxConstants.DIRECTION_MASK_NONE);c!=mxConstants.DIRECTION_MASK_NONE?d=c==mxConstants.DIRECTION_MASK_WEST:(r=o.getCellGeometry(t.cell)).relative?d=r.x<=.5:null!=n&&(d=n.x+n.width<t.x)}r=!0,null!=l?((n=new mxCellState).x=l.x,n.y=l.y):null!=n&&((c=mxUtils.getPortConstraints(n,e,!1,mxConstants.DIRECTION_MASK_NONE))!=mxConstants.DIRECTION_MASK_NONE?r=c==mxConstants.DIRECTION_MASK_WEST:(e=o.getCellGeometry(n.cell)).relative?r=e.x<=.5:null!=t&&(r=t.x+t.width<n.x)),null!=t&&null!=n&&(e=d?t.x:t.x+t.width,t=s.getRoutingCenterY(t),o=r?n.x:n.x+n.width,n=s.getRoutingCenterY(n),s=new mxPoint(e+(d?-a:a),t),l=new mxPoint(o+(r?-a:a),n),d==r?(a=d?Math.min(e,o)-a:Math.max(e,o)+a,i.push(new mxPoint(a,t)),i.push(new mxPoint(a,n))):(s.x<l.x==d?(a=t+(n-t)/2,i.push(s),i.push(new mxPoint(s.x,a)),i.push(new mxPoint(l.x,a))):i.push(s),i.push(l)))},Loop:function(e,t,n,a,i){if(null!=t){var s=(n=e.view).graph;null!=(a=null!=a&&0<a.length?a[0]:null)&&(a=n.transformControlPoint(e,a),mxUtils.contains(t,a.x,a.y)&&(a=null));var o=0,r=0,l=0,d=0;s=mxUtils.getValue(e.style,mxConstants.STYLE_SEGMENT,s.gridSize)*n.scale;(e=mxUtils.getValue(e.style,mxConstants.STYLE_DIRECTION,mxConstants.DIRECTION_WEST))==mxConstants.DIRECTION_NORTH||e==mxConstants.DIRECTION_SOUTH?(o=n.getRoutingCenterX(t),r=s):(l=n.getRoutingCenterY(t),d=s),null==a||a.x<t.x||a.x>t.x+t.width?null!=a?(o=a.x,d=Math.max(Math.abs(l-a.y),d)):e==mxConstants.DIRECTION_NORTH?l=t.y-2*r:e==mxConstants.DIRECTION_SOUTH?l=t.y+t.height+2*r:o=e==mxConstants.DIRECTION_EAST?t.x-2*d:t.x+t.width+2*d:null!=a&&(o=n.getRoutingCenterX(t),r=Math.max(Math.abs(o-a.x),d),l=a.y,d=0),i.push(new mxPoint(o-r,l-d)),i.push(new mxPoint(o+r,l+d))}},ElbowConnector:function(e,t,n,a,i){var s=null!=a&&0<a.length?a[0]:null,o=!1,r=!1;if(null!=t&&null!=n)if(null!=s){var l=Math.min(t.x,n.x),d=Math.max(t.x+t.width,n.x+n.width),c=(r=Math.min(t.y,n.y),Math.max(t.y+t.height,n.y+n.height));o=(s=e.view.transformControlPoint(e,s)).y<r||s.y>c,r=s.x<l||s.x>d}else(o=(l=Math.max(t.x,n.x))==(d=Math.min(t.x+t.width,n.x+n.width)))||(r=(r=Math.max(t.y,n.y))==(c=Math.min(t.y+t.height,n.y+n.height)));r||!o&&e.style[mxConstants.STYLE_ELBOW]!=mxConstants.ELBOW_VERTICAL?mxEdgeStyle.SideToSide(e,t,n,a,i):mxEdgeStyle.TopToBottom(e,t,n,a,i)},SideToSide:function(e,t,n,a,i){var s=e.view;a=null!=a&&0<a.length?a[0]:null;var o=(r=e.absolutePoints)[0],r=r[r.length-1];null!=a&&(a=s.transformControlPoint(e,a)),null!=o&&((t=new mxCellState).x=o.x,t.y=o.y),null!=r&&((n=new mxCellState).x=r.x,n.y=r.y),null!=t&&null!=n&&(e=Math.max(t.x,n.x),o=Math.min(t.x+t.width,n.x+n.width),e=null!=a?a.x:o+(e-o)/2,o=s.getRoutingCenterY(t),s=s.getRoutingCenterY(n),null!=a&&(a.y>=t.y&&a.y<=t.y+t.height&&(o=a.y),a.y>=n.y&&a.y<=n.y+n.height&&(s=a.y)),!mxUtils.contains(n,e,o)&&!mxUtils.contains(t,e,o)&&i.push(new mxPoint(e,o)),!mxUtils.contains(n,e,s)&&!mxUtils.contains(t,e,s)&&i.push(new mxPoint(e,s)),1==i.length&&(null!=a?!mxUtils.contains(n,e,a.y)&&!mxUtils.contains(t,e,a.y)&&i.push(new mxPoint(e,a.y)):(s=Math.max(t.y,n.y),t=Math.min(t.y+t.height,n.y+n.height),i.push(new mxPoint(e,s+(t-s)/2)))))},TopToBottom:function(e,t,n,a,i){var s=e.view;a=null!=a&&0<a.length?a[0]:null;var o=(r=e.absolutePoints)[0],r=r[r.length-1];null!=a&&(a=s.transformControlPoint(e,a)),null!=o&&((t=new mxCellState).x=o.x,t.y=o.y),null!=r&&((n=new mxCellState).x=r.x,n.y=r.y),null!=t&&null!=n&&(o=Math.max(t.y,n.y),r=Math.min(t.y+t.height,n.y+n.height),e=s.getRoutingCenterX(t),null!=a&&a.x>=t.x&&a.x<=t.x+t.width&&(e=a.x),o=null!=a?a.y:r+(o-r)/2,!mxUtils.contains(n,e,o)&&!mxUtils.contains(t,e,o)&&i.push(new mxPoint(e,o)),e=null!=a&&a.x>=n.x&&a.x<=n.x+n.width?a.x:s.getRoutingCenterX(n),!mxUtils.contains(n,e,o)&&!mxUtils.contains(t,e,o)&&i.push(new mxPoint(e,o)),1==i.length&&(null!=a&&1==i.length?!mxUtils.contains(n,a.x,o)&&!mxUtils.contains(t,a.x,o)&&i.push(new mxPoint(a.x,o)):(s=Math.max(t.x,n.x),t=Math.min(t.x+t.width,n.x+n.width),i.push(new mxPoint(s+(t-s)/2,o)))))},SegmentConnector:function(e,t,n,a,i){var s=e.absolutePoints,o=!0,r=null,l=s[0];null==l&&null!=t?l=new mxPoint(e.view.getRoutingCenterX(t),e.view.getRoutingCenterY(t)):null!=l&&(l=l.clone());var d=s.length-1;if(null!=a&&0<a.length){r=e.view.transformControlPoint(e,a[0]);for(var c=t,m=s[0],u=!1,p=!1,g=(u=r,a.length),v=0;v<2;v++){var h=null!=m&&m.x==u.x,f=null!=m&&m.y==u.y,b=null!=c&&u.y>=c.y&&u.y<=c.y+c.height;c=null!=c&&u.x>=c.x&&u.x<=c.x+c.width,u=f||null==m&&b,p=h||null==m&&c;if(null!=m&&!f&&!h&&(b||c)){o=!b;break}if(p||u){o=u,1==v&&(o=0==a.length%2?u:p);break}c=n,m=s[d],u=e.view.transformControlPoint(e,a[g-1])}for(o&&(null!=s[0]&&s[0].y!=r.y||null==s[0]&&null!=t&&(r.y<t.y||r.y>t.y+t.height))?i.push(new mxPoint(l.x,r.y)):!o&&(null!=s[0]&&s[0].x!=r.x||null==s[0]&&null!=t&&(r.x<t.x||r.x>t.x+t.width))&&i.push(new mxPoint(r.x,l.y)),o?l.y=r.y:l.x=r.x,v=0;v<a.length;v++)o=!o,r=e.view.transformControlPoint(e,a[v]),o?l.y=r.y:l.x=r.x,i.push(l.clone())}else r=l,o=!0;if(null==(l=s[d])&&null!=n&&(l=new mxPoint(e.view.getRoutingCenterX(n),e.view.getRoutingCenterY(n))),o&&(null!=s[d]&&s[d].y!=r.y||null==s[d]&&null!=n&&(r.y<n.y||r.y>n.y+n.height))?i.push(new mxPoint(l.x,r.y)):!o&&(null!=s[d]&&s[d].x!=r.x||null==s[d]&&null!=n&&(r.x<n.x||r.x>n.x+n.width))&&i.push(new mxPoint(r.x,l.y)),null==s[0]&&null!=t)for(;1<i.length&&mxUtils.contains(t,i[1].x,i[1].y);)i=i.splice(1,1);if(null==s[d]&&null!=n)for(;1<i.length&&mxUtils.contains(n,i[i.length-1].x,i[i.length-1].y);)i=i.splice(i.length-1,1)},orthBuffer:10,dirVectors:[[-1,0],[0,-1],[1,0],[0,1],[-1,0],[0,-1],[1,0]],wayPoints1:[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],routePatterns:[[[513,2308,2081,2562],[513,1090,514,2184,2114,2561],[513,1090,514,2564,2184,2562],[513,2308,2561,1090,514,2568,2308]],[[514,1057,513,2308,2081,2562],[514,2184,2114,2561],[514,2184,2562,1057,513,2564,2184],[514,1057,513,2568,2308,2561]],[[1090,514,1057,513,2308,2081,2562],[2114,2561],[1090,2562,1057,513,2564,2184],[1090,514,1057,513,2308,2561,2568]],[[2081,2562],[1057,513,1090,514,2184,2114,2561],[1057,513,1090,514,2184,2562,2564],[1057,2561,1090,514,2568,2308]]],inlineRoutePatterns:[[null,[2114,2568],null,null],[null,[514,2081,2114,2568],null,null],[null,[2114,2561],null,null],[[2081,2562],[1057,2114,2568],[2184,2562],null]],vertexSeperations:[],limits:[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]],LEFT_MASK:32,TOP_MASK:64,RIGHT_MASK:128,BOTTOM_MASK:256,LEFT:1,TOP:2,RIGHT:4,BOTTOM:8,SIDE_MASK:480,CENTER_MASK:512,SOURCE_MASK:1024,TARGET_MASK:2048,VERTEX_MASK:3072,OrthConnector:function(e,t,n,a,i){var s=e.view.graph,o=null!=t&&s.getModel().isEdge(t.cell);s=null!=n&&s.getModel().isEdge(n.cell);if(null!=a&&0<a.length||o||s)mxEdgeStyle.SegmentConnector(e,t,n,a,i);else{var r=(a=e.absolutePoints)[0],l=a[a.length-1];a=null!=t?t.x:r.x;o=null!=t?t.y:r.y;var d=null!=t?t.width:1,c=null!=t?t.height:1,m=null!=n?n.x:l.x,u=null!=n?n.y:l.y,p=null!=n?n.width:1,g=null!=n?n.height:1,v=(s=e.view.scale*mxEdgeStyle.orthBuffer,[mxConstants.DIRECTION_MASK_ALL,mxConstants.DIRECTION_MASK_ALL]);for(null!=t&&(v[0]=mxUtils.getPortConstraints(t,e,!0,mxConstants.DIRECTION_MASK_ALL)),null!=n&&(v[1]=mxUtils.getPortConstraints(n,e,!1,mxConstants.DIRECTION_MASK_ALL)),e=[0,0],a=[[a,o,d,c],[m,u,p,g]],d=0;d<2;d++)mxEdgeStyle.limits[d][1]=a[d][0]-s,mxEdgeStyle.limits[d][2]=a[d][1]-s,mxEdgeStyle.limits[d][4]=a[d][0]+a[d][2]+s,mxEdgeStyle.limits[d][8]=a[d][1]+a[d][3]+s;for(d=a[0][0]+a[0][2]/2-(a[1][0]+a[1][2]/2),c=a[0][1]+a[0][3]/2-(a[1][1]+a[1][3]/2),d<(o=0)?o=c<0?2:1:c<=0&&(o=3,0==d&&(o=2)),(c=null)!=t&&(c=r),t=[[.5,.5],[.5,.5]],d=0;d<2;d++)null!=c&&(t[d][0]=(c.x-a[d][0])/a[d][2],t[d][0]<.01?e[d]=mxConstants.DIRECTION_MASK_WEST:.99<t[d][0]&&(e[d]=mxConstants.DIRECTION_MASK_EAST),t[d][1]=(c.y-a[d][1])/a[d][3],t[d][1]<.01?e[d]=mxConstants.DIRECTION_MASK_NORTH:.99<t[d][1]&&(e[d]=mxConstants.DIRECTION_MASK_SOUTH)),(c=null)!=n&&(c=l);for(d=a[0][1]-(a[1][1]+a[1][3]),c=a[0][0]-(a[1][0]+a[1][2]),m=a[1][1]-(a[0][1]+a[0][3]),u=a[1][0]-(a[0][0]+a[0][2]),mxEdgeStyle.vertexSeperations[1]=Math.max(c-2*s,0),mxEdgeStyle.vertexSeperations[2]=Math.max(d-2*s,0),mxEdgeStyle.vertexSeperations[4]=Math.max(m-2*s,0),mxEdgeStyle.vertexSeperations[3]=Math.max(u-2*s,0),n=[],l=[],(r=[])[0]=u<=c?mxConstants.DIRECTION_MASK_WEST:mxConstants.DIRECTION_MASK_EAST,l[0]=m<=d?mxConstants.DIRECTION_MASK_NORTH:mxConstants.DIRECTION_MASK_SOUTH,r[1]=mxUtils.reversePortConstraints(r[0]),l[1]=mxUtils.reversePortConstraints(l[0]),c=u<=c?c:u,m=m<=d?d:m,p=!(u=[[0,0],[0,0]]),d=0;d<2;d++)0==e[d]&&(0==(r[d]&v[d])&&(r[d]=mxUtils.reversePortConstraints(r[d])),0==(l[d]&v[d])&&(l[d]=mxUtils.reversePortConstraints(l[d])),u[d][0]=l[d],u[d][1]=r[d]);for(2*s<m&&2*s<c&&(0<(r[0]&v[0])&&0<(l[1]&v[1])?(u[0][0]=r[0],u[0][1]=l[0],u[1][0]=l[1],u[1][1]=r[1],p=!0):0<(l[0]&v[0])&&0<(r[1]&v[1])&&(u[0][0]=l[0],u[0][1]=r[0],u[1][0]=r[1],u[1][1]=l[1],p=!0)),2*s<m&&!p&&(u[0][0]=l[0],u[0][1]=r[0],u[1][0]=l[1],u[1][1]=r[1],p=!0),2*s<c&&!p&&(u[0][0]=r[0],u[0][1]=l[0],u[1][0]=r[1],u[1][1]=l[1]),d=0;d<2;d++)0==e[d]&&(0==(u[d][0]&v[d])&&(u[d][0]=u[d][1]),n[d]=u[d][0]&v[d],n[d]|=(u[d][1]&v[d])<<8,n[d]|=(u[1-d][d]&v[d])<<16,n[d]|=(u[1-d][1-d]&v[d])<<24,0==(15&n[d])&&(n[d]<<=8),0==(3840&n[d])&&(n[d]=15&n[d]|n[d]>>8),0==(983040&n[d])&&(n[d]=65535&n[d]|(251658240&n[d])>>8),e[d]=15&n[d],v[d]==mxConstants.DIRECTION_MASK_WEST||v[d]==mxConstants.DIRECTION_MASK_NORTH||v[d]==mxConstants.DIRECTION_MASK_EAST||v[d]==mxConstants.DIRECTION_MASK_SOUTH)&&(e[d]=v[d]);switch(d=e[0]==mxConstants.DIRECTION_MASK_EAST?3:e[0],v=e[1]==mxConstants.DIRECTION_MASK_EAST?3:e[1],(d-=o)<1&&(d+=4),(v-=o)<1&&(v+=4),v=mxEdgeStyle.routePatterns[d-1][v-1],mxEdgeStyle.wayPoints1[0][0]=a[0][0],mxEdgeStyle.wayPoints1[0][1]=a[0][1],e[0]){case mxConstants.DIRECTION_MASK_WEST:mxEdgeStyle.wayPoints1[0][0]-=s,mxEdgeStyle.wayPoints1[0][1]+=t[0][1]*a[0][3];break;case mxConstants.DIRECTION_MASK_SOUTH:mxEdgeStyle.wayPoints1[0][0]+=t[0][0]*a[0][2],mxEdgeStyle.wayPoints1[0][1]+=a[0][3]+s;break;case mxConstants.DIRECTION_MASK_EAST:mxEdgeStyle.wayPoints1[0][0]+=a[0][2]+s,mxEdgeStyle.wayPoints1[0][1]+=t[0][1]*a[0][3];break;case mxConstants.DIRECTION_MASK_NORTH:mxEdgeStyle.wayPoints1[0][0]+=t[0][0]*a[0][2],mxEdgeStyle.wayPoints1[0][1]-=s}for(r=n=(s=0)<(e[0]&(mxConstants.DIRECTION_MASK_EAST|mxConstants.DIRECTION_MASK_WEST))?0:1,d=l=0;d<v.length;d++){g=(l=15&v[d])==mxConstants.DIRECTION_MASK_EAST?3:l,4<(g+=o)&&(g-=4),c=mxEdgeStyle.dirVectors[g-1],(l=0<g%2?0:1)!=n&&(s++,mxEdgeStyle.wayPoints1[s][0]=mxEdgeStyle.wayPoints1[s-1][0],mxEdgeStyle.wayPoints1[s][1]=mxEdgeStyle.wayPoints1[s-1][1]);var h=0<(v[d]&mxEdgeStyle.TARGET_MASK);p=0<(v[d]&mxEdgeStyle.SOURCE_MASK);15<(m=(m=(v[d]&mxEdgeStyle.SIDE_MASK)>>5)<<o)&&(m>>=4),u=0<(v[d]&mxEdgeStyle.CENTER_MASK),(p||h)&&m<9?(g=0,p=p?0:1,g=u&&0==l?a[p][0]+t[p][0]*a[p][2]:u?a[p][1]+t[p][1]*a[p][3]:mxEdgeStyle.limits[p][m],0==l?0<(m=(g-mxEdgeStyle.wayPoints1[s][0])*c[0])&&(mxEdgeStyle.wayPoints1[s][0]+=c[0]*m):0<(m=(g-mxEdgeStyle.wayPoints1[s][1])*c[1])&&(mxEdgeStyle.wayPoints1[s][1]+=c[1]*m)):u&&(mxEdgeStyle.wayPoints1[s][0]+=c[0]*Math.abs(mxEdgeStyle.vertexSeperations[g]/2),mxEdgeStyle.wayPoints1[s][1]+=c[1]*Math.abs(mxEdgeStyle.vertexSeperations[g]/2)),0<s&&mxEdgeStyle.wayPoints1[s][l]==mxEdgeStyle.wayPoints1[s-1][l]?s--:n=l}for(d=0;d<=s&&(d!=s||((0<(e[1]&(mxConstants.DIRECTION_MASK_EAST|mxConstants.DIRECTION_MASK_WEST))?0:1)==r?0:1)==(s+1)%2);d++)i.push(new mxPoint(mxEdgeStyle.wayPoints1[d][0],mxEdgeStyle.wayPoints1[d][1]))}},getRoutePattern:function(e,t,n,a){var i=e[0]==mxConstants.DIRECTION_MASK_EAST?3:e[0];return e=e[1]==mxConstants.DIRECTION_MASK_EAST?3:e[1],(i-=t)<1&&(i+=4),(e-=t)<1&&(e+=4),t=routePatterns[i-1][e-1],0!=n&&0!=a||null!=inlineRoutePatterns[i-1][e-1]&&(t=inlineRoutePatterns[i-1][e-1]),t}},mxStyleRegistry={values:[],putValue:function(e,t){mxStyleRegistry.values[e]=t},getValue:function(e){return mxStyleRegistry.values[e]},getName:function(e){for(var t in mxStyleRegistry.values)if(mxStyleRegistry.values[t]==e)return t;return null}};function mxGraphView(e){this.graph=e,this.translate=new mxPoint,this.graphBounds=new mxRectangle,this.states=new mxDictionary}function mxCurrentRootChange(e,t){if(this.view=e,this.previous=this.root=t,this.isUp=null==t,!this.isUp)for(var n=this.view.currentRoot,a=this.view.graph.getModel();null!=n;){if(n==t){this.isUp=!0;break}n=a.getParent(n)}}function mxGraph(e,t,n,a){this.mouseListeners=null,this.renderHint=n,this.dialect=mxClient.IS_SVG?mxConstants.DIALECT_SVG:n==mxConstants.RENDERING_HINT_EXACT&&mxClient.IS_VML?mxConstants.DIALECT_VML:n==mxConstants.RENDERING_HINT_FASTEST?mxConstants.DIALECT_STRICTHTML:n==mxConstants.RENDERING_HINT_FASTER?mxConstants.DIALECT_PREFERHTML:mxConstants.DIALECT_MIXEDHTML,this.model=null!=t?t:new mxGraphModel,this.multiplicities=[],this.imageBundles=[],this.cellRenderer=this.createCellRenderer(),this.setSelectionModel(this.createSelectionModel()),this.setStylesheet(null!=a?a:this.createStylesheet()),this.view=this.createGraphView(),this.graphModelChangeListener=mxUtils.bind(this,function(e,t){this.graphModelChanged(t.getProperty("edit").changes)}),this.model.addListener(mxEvent.CHANGE,this.graphModelChangeListener),this.createHandlers(),null!=e&&this.init(e),this.view.revalidate()}function mxCellOverlay(e,t,n,a,i,s){this.image=e,this.tooltip=t,this.align=null!=n?n:this.align,this.verticalAlign=null!=a?a:this.verticalAlign,this.offset=null!=i?i:new mxPoint,this.cursor=null!=s?s:"help"}function mxOutline(e,t){this.source=e,null!=t&&this.init(t)}function mxMultiplicity(e,t,n,a,i,s,o,r,l,d){this.source=e,this.type=t,this.attr=n,this.value=a,this.min=null!=i?i:0,this.max=null!=s?s:"n",this.validNeighbors=o,this.countError=mxResources.get(r)||r,this.typeError=mxResources.get(l)||l,this.validNeighborsAllowed=null==d||d}function mxLayoutManager(e){this.undoHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.beforeUndo(t.getProperty("edit"))}),this.moveHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.cellsMoved(t.getProperty("cells"),t.getProperty("event"))}),this.setGraph(e)}function mxSpaceManager(e,t,n,a){this.resizeHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.cellsResized(t.getProperty("cells"))}),this.foldHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.cellsResized(t.getProperty("cells"))}),this.shiftRightwards=null==t||t,this.shiftDownwards=null==n||n,this.extendParents=null==a||a,this.setGraph(e)}function mxSwimlaneManager(e,t,n,a){this.horizontal=null==t||t,this.addEnabled=null==n||n,this.resizeEnabled=null==a||a,this.addHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.isAddEnabled()&&this.cellsAdded(t.getProperty("cells"))}),this.resizeHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.isResizeEnabled()&&this.cellsResized(t.getProperty("cells"))}),this.setGraph(e)}function mxTemporaryCellStates(e,t,n){if(this.view=e,t=null!=t?t:1,this.oldBounds=e.getGraphBounds(),this.oldStates=e.getStates(),this.oldScale=e.getScale(),e.setStates(new mxDictionary),e.setScale(t),null!=n){t=e.createState(new mxCell);for(var a=0;a<n.length;a++)e.validateBounds(t,n[a]);var i=null;for(a=0;a<n.length;a++){var s=e.validatePoints(t,n[a]);null==i?i=s:i.add(s)}null==i&&(i=new mxRectangle),e.setGraphBounds(i)}}function mxCellStatePreview(e){this.graph=e,this.deltas={}}function mxConnectionConstraint(e,t){this.point=e,this.perimeter=null==t||t}function mxGraphHandler(e){this.graph=e,this.graph.addMouseListener(this),this.panHandler=mxUtils.bind(this,function(){this.updatePreviewShape()}),this.graph.addListener(mxEvent.PAN,this.panHandler)}function mxPanningHandler(e,t){null!=e&&(this.graph=e,this.factoryMethod=t,this.graph.addMouseListener(this),this.init())}function mxCellMarker(e,t,n,a){mxEventSource.call(this),null!=e&&(this.graph=e,this.validColor=null!=t?t:mxConstants.DEFAULT_VALID_COLOR,this.invalidColor=null!=t?n:mxConstants.DEFAULT_INVALID_COLOR,this.hotspot=null!=a?a:mxConstants.DEFAULT_HOTSPOT,this.highlight=new mxCellHighlight(e))}function mxSelectionCellsHandler(e){mxEventSource.call(this),this.graph=e,this.handlers=new mxDictionary,this.graph.addMouseListener(this),this.refreshHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.refresh()}),this.graph.getSelectionModel().addListener(mxEvent.CHANGE,this.refreshHandler),this.graph.getModel().addListener(mxEvent.CHANGE,this.refreshHandler),this.graph.getView().addListener(mxEvent.SCALE,this.refreshHandler),this.graph.getView().addListener(mxEvent.TRANSLATE,this.refreshHandler),this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE,this.refreshHandler),this.graph.getView().addListener(mxEvent.DOWN,this.refreshHandler),this.graph.getView().addListener(mxEvent.UP,this.refreshHandler)}function mxConnectionHandler(e,t){mxEventSource.call(this),null!=e&&(this.graph=e,this.factoryMethod=t,this.init())}function mxConstraintHandler(e){this.graph=e}function mxRubberband(e){null!=e&&(this.graph=e,this.graph.addMouseListener(this),this.panHandler=mxUtils.bind(this,function(){this.repaint()}),this.graph.addListener(mxEvent.PAN,this.panHandler),mxClient.IS_IE&&mxEvent.addListener(window,"unload",mxUtils.bind(this,function(){this.destroy()})))}function mxVertexHandler(e){null!=e&&(this.state=e,this.init())}function mxEdgeHandler(e){null!=e&&(this.state=e,this.init())}function mxElbowEdgeHandler(e){mxEdgeHandler.call(this,e)}function mxEdgeSegmentHandler(e){mxEdgeHandler.call(this,e)}function mxKeyHandler(e,t){null!=e&&(this.graph=e,this.target=t||document.documentElement,this.normalKeys=[],this.shiftKeys=[],this.controlKeys=[],this.controlShiftKeys=[],mxEvent.addListener(this.target,"keydown",mxUtils.bind(this,function(e){this.keyDown(e)})),mxClient.IS_IE&&mxEvent.addListener(window,"unload",mxUtils.bind(this,function(){this.destroy()})))}function mxTooltipHandler(e,t){null!=e&&(this.graph=e,this.delay=t||500,this.graph.addMouseListener(this))}function mxCellTracker(e,t,n){mxCellMarker.call(this,e,t),this.graph.addMouseListener(this),null!=n&&(this.getCell=n),mxClient.IS_IE&&mxEvent.addListener(window,"unload",mxUtils.bind(this,function(){this.destroy()}))}function mxCellHighlight(e,t,n,a){null!=e&&(this.graph=e,this.highlightColor=null!=t?t:mxConstants.DEFAULT_VALID_COLOR,this.strokeWidth=null!=n?n:mxConstants.HIGHLIGHT_STROKEWIDTH,this.dashed=null!=a&&a,this.repaintHandler=mxUtils.bind(this,function(){this.repaint()}),this.graph.getView().addListener(mxEvent.SCALE,this.repaintHandler),this.graph.getView().addListener(mxEvent.TRANSLATE,this.repaintHandler),this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE,this.repaintHandler),this.graph.getModel().addListener(mxEvent.CHANGE,this.repaintHandler),this.resetHandler=mxUtils.bind(this,function(){this.hide()}),this.graph.getView().addListener(mxEvent.DOWN,this.resetHandler),this.graph.getView().addListener(mxEvent.UP,this.resetHandler))}function mxDefaultKeyHandler(t){if(null!=t){this.editor=t,this.handler=new mxKeyHandler(t.graph);var n=this.handler.escape;this.handler.escape=function(e){n.apply(this,arguments),t.hideProperties(),t.fireEvent(new mxEventObject(mxEvent.ESCAPE,"event",e))}}}function mxDefaultPopupMenu(e){this.config=e}function mxDefaultToolbar(e,t){this.editor=t,null!=e&&null!=t&&this.init(e)}function mxEditor(e){this.actions=[],this.addActions(),null!=document.body&&(this.cycleAttributeValues=[],this.popupHandler=new mxDefaultPopupMenu,this.undoManager=new mxUndoManager,this.graph=this.createGraph(),this.toolbar=this.createToolbar(),this.keyHandler=new mxDefaultKeyHandler(this),this.configure(e),this.graph.swimlaneIndicatorColorAttribute=this.cycleAttributeName,!mxClient.IS_LOCAL&&null!=this.urlInit&&(this.session=this.createSession()),null!=this.onInit&&this.onInit(),mxClient.IS_IE&&mxEvent.addListener(window,"unload",mxUtils.bind(this,function(){this.destroy()})))}mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ELBOW,mxEdgeStyle.ElbowConnector),mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ENTITY_RELATION,mxEdgeStyle.EntityRelation),mxStyleRegistry.putValue(mxConstants.EDGESTYLE_LOOP,mxEdgeStyle.Loop),mxStyleRegistry.putValue(mxConstants.EDGESTYLE_SIDETOSIDE,mxEdgeStyle.SideToSide),mxStyleRegistry.putValue(mxConstants.EDGESTYLE_TOPTOBOTTOM,mxEdgeStyle.TopToBottom),mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ORTHOGONAL,mxEdgeStyle.OrthConnector),mxStyleRegistry.putValue(mxConstants.EDGESTYLE_SEGMENT,mxEdgeStyle.SegmentConnector),mxStyleRegistry.putValue(mxConstants.PERIMETER_ELLIPSE,mxPerimeter.EllipsePerimeter),mxStyleRegistry.putValue(mxConstants.PERIMETER_RECTANGLE,mxPerimeter.RectanglePerimeter),mxStyleRegistry.putValue(mxConstants.PERIMETER_RHOMBUS,mxPerimeter.RhombusPerimeter),mxStyleRegistry.putValue(mxConstants.PERIMETER_TRIANGLE,mxPerimeter.TrianglePerimeter),mxGraphView.prototype=new mxEventSource,mxGraphView.prototype.constructor=mxGraphView,mxGraphView.prototype.EMPTY_POINT=new mxPoint,mxGraphView.prototype.doneResource="none"!=mxClient.language?"done":"",mxGraphView.prototype.updatingDocumentResource="none"!=mxClient.language?"updatingDocument":"",mxGraphView.prototype.allowEval=!1,mxGraphView.prototype.captureDocumentGesture=!0,mxGraphView.prototype.optimizeVmlReflows=!0,mxGraphView.prototype.rendering=!0,mxGraphView.prototype.graph=null,mxGraphView.prototype.currentRoot=null,mxGraphView.prototype.graphBounds=null,mxGraphView.prototype.scale=1,mxGraphView.prototype.translate=null,mxGraphView.prototype.updateStyle=!1,mxGraphView.prototype.getGraphBounds=function(){return this.graphBounds},mxGraphView.prototype.setGraphBounds=function(e){this.graphBounds=e},mxGraphView.prototype.getBounds=function(e){var t=null;if(null!=e&&0<e.length)for(var n=this.graph.getModel(),a=0;a<e.length;a++)if(n.isVertex(e[a])||n.isEdge(e[a])){var i=this.getState(e[a]);null!=i&&(null==t?t=new mxRectangle(i.x,i.y,i.width,i.height):t.add(i))}return t},mxGraphView.prototype.setCurrentRoot=function(e){if(this.currentRoot!=e){var t=new mxCurrentRootChange(this,e);t.execute();var n=new mxUndoableEdit(this,!1);n.add(t),this.fireEvent(new mxEventObject(mxEvent.UNDO,"edit",n)),this.graph.sizeDidChange()}return e},mxGraphView.prototype.scaleAndTranslate=function(e,t,n){var a=this.scale,i=new mxPoint(this.translate.x,this.translate.y);this.scale==e&&this.translate.x==t&&this.translate.y==n||(this.scale=e,this.translate.x=t,this.translate.y=n,this.isEventsEnabled()&&(this.revalidate(),this.graph.sizeDidChange())),this.fireEvent(new mxEventObject(mxEvent.SCALE_AND_TRANSLATE,"scale",e,"previousScale",a,"translate",this.translate,"previousTranslate",i))},mxGraphView.prototype.getScale=function(){return this.scale},mxGraphView.prototype.setScale=function(e){var t=this.scale;this.scale!=e&&(this.scale=e,this.isEventsEnabled()&&(this.revalidate(),this.graph.sizeDidChange())),this.fireEvent(new mxEventObject(mxEvent.SCALE,"scale",e,"previousScale",t))},mxGraphView.prototype.getTranslate=function(){return this.translate},mxGraphView.prototype.setTranslate=function(e,t){var n=new mxPoint(this.translate.x,this.translate.y);this.translate.x==e&&this.translate.y==t||(this.translate.x=e,this.translate.y=t,this.isEventsEnabled()&&(this.revalidate(),this.graph.sizeDidChange())),this.fireEvent(new mxEventObject(mxEvent.TRANSLATE,"translate",this.translate,"previousTranslate",n))},mxGraphView.prototype.refresh=function(){null!=this.currentRoot&&this.clear(),this.revalidate()},mxGraphView.prototype.revalidate=function(){this.invalidate(),this.validate()},mxGraphView.prototype.clear=function(e,t,n){var a=this.graph.getModel();if(e=e||a.getRoot(),t=null!=t&&t,n=null==n||n,this.removeState(e),n&&(t||e!=this.currentRoot)){n=a.getChildCount(e);for(var i=0;i<n;i++)this.clear(a.getChildAt(e,i),t)}else this.invalidate(e)},mxGraphView.prototype.invalidate=function(e,t,n,a){var i=this.graph.getModel();if(e=e||i.getRoot(),t=null==t||t,n=null==n||n,a=null!=a&&a,null!=(o=this.getState(e))&&(o.invalid=!0,a&&(o.orderChanged=!0)),t)for(var s=i.getChildCount(e),o=0;o<s;o++){var r=i.getChildAt(e,o);this.invalidate(r,t,n,a)}if(n)for(a=i.getEdgeCount(e),o=0;o<a;o++)this.invalidate(i.getEdgeAt(e,o),t,n)},mxGraphView.prototype.validate=function(e){var t=mxLog.enter("mxGraphView.validate");window.status=mxResources.get(this.updatingDocumentResource)||this.updatingDocumentResource;var n=null;if(this.optimizeVmlReflows&&null!=this.canvas&&null==this.textDiv&&(8==document.documentMode||mxClient.IS_QUIRKS)){n=this.canvas.style.display,this.canvas.style.display="none";var a=document.createElement("div");a.style.position="absolute",a.style.whiteSpace="nowrap",a.style.visibility="hidden",a.style.display=mxClient.IS_QUIRKS?"inline":"inline-block",a.style.zoom="1",document.body.appendChild(a),this.textDiv=a}e=e||(null!=this.currentRoot?this.currentRoot:this.graph.getModel().getRoot()),this.validateBounds(null,e),null==(e=this.validatePoints(null,e))&&(e=new mxRectangle),this.setGraphBounds(e),this.validateBackground(),null!=n&&(this.canvas.style.display=n,document.body.removeChild(this.textDiv),this.textDiv=null),window.status=mxResources.get(this.doneResource)||this.doneResource,mxLog.leave("mxGraphView.validate",t)},mxGraphView.prototype.createBackgroundPageShape=function(e){return new mxRectangleShape(e,"white","black")},mxGraphView.prototype.validateBackground=function(){var e=this.graph.getBackgroundImage();if(null!=e){if(null==this.backgroundImage||this.backgroundImage.image!=e.src){null!=this.backgroundImage&&this.backgroundImage.destroy();var t=new mxRectangle(0,0,1,1);this.backgroundImage=new mxImageShape(t,e.src),this.backgroundImage.dialect=this.graph.dialect,this.backgroundImage.init(this.backgroundPane),this.backgroundImage.redraw()}this.redrawBackgroundImage(this.backgroundImage,e)}else null!=this.backgroundImage&&(this.backgroundImage.destroy(),this.backgroundImage=null);this.graph.pageVisible?(t=this.getBackgroundPageBounds(),null==this.backgroundPageShape?(this.backgroundPageShape=this.createBackgroundPageShape(t),this.backgroundPageShape.scale=this.scale,this.backgroundPageShape.isShadow=!0,this.backgroundPageShape.dialect=this.graph.dialect,this.backgroundPageShape.init(this.backgroundPane),this.backgroundPageShape.redraw(),mxEvent.addListener(this.backgroundPageShape.node,"dblclick",mxUtils.bind(this,function(e){this.graph.dblClick(e)})),mxEvent.addGestureListeners(this.backgroundPageShape.node,mxUtils.bind(this,function(e){this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e))}),mxUtils.bind(this,function(e){null!=this.graph.tooltipHandler&&this.graph.tooltipHandler.isHideOnHover()&&this.graph.tooltipHandler.hide(),this.graph.isMouseDown&&!mxEvent.isConsumed(e)&&this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e))}),mxUtils.bind(this,function(e){this.graph.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e))}))):(this.backgroundPageShape.scale=this.scale,this.backgroundPageShape.bounds=t,this.backgroundPageShape.redraw())):null!=this.backgroundPageShape&&(this.backgroundPageShape.destroy(),this.backgroundPageShape=null)},mxGraphView.prototype.getBackgroundPageBounds=function(){var e=this.graph.pageFormat,t=this.scale*this.graph.pageScale;return new mxRectangle(this.scale*this.translate.x,this.scale*this.translate.y,e.width*t,e.height*t)},mxGraphView.prototype.redrawBackgroundImage=function(e,t){e.scale=this.scale,e.bounds.x=this.scale*this.translate.x,e.bounds.y=this.scale*this.translate.y,e.bounds.width=this.scale*t.width,e.bounds.height=this.scale*t.height,e.redraw()},mxGraphView.prototype.validateBounds=function(e,t){var n=this.graph.getModel(),a=this.getState(t,!0);if(null!=a&&a.invalid){if(this.graph.isCellVisible(t)){if(t!=this.currentRoot&&null!=e)if(a.absoluteOffset.x=0,a.absoluteOffset.y=0,a.origin.x=e.origin.x,a.origin.y=e.origin.y,null!=(s=this.graph.getCellGeometry(t))){if(!n.isEdge(t)){var i=s.offset||this.EMPTY_POINT;s.relative?(a.origin.x+=s.x*e.width/this.scale+i.x,a.origin.y+=s.y*e.height/this.scale+i.y):(a.absoluteOffset.x=this.scale*i.x,a.absoluteOffset.y=this.scale*i.y,a.origin.x+=s.x,a.origin.y+=s.y)}if(a.x=this.scale*(this.translate.x+a.origin.x),a.y=this.scale*(this.translate.y+a.origin.y),a.width=this.scale*s.width,a.height=this.scale*s.height,n.isVertex(t)){if(s.relative&&0!=(i=mxUtils.toRadians(e.style[mxConstants.STYLE_ROTATION]||"0"))){var s=Math.cos(i),o=(i=Math.sin(i),new mxPoint(a.getCenterX(),a.getCenterY())),r=new mxPoint(e.getCenterX(),e.getCenterY());s=mxUtils.getRotatedPoint(o,s,i,r);a.x=s.x-a.width/2,a.y=s.y-a.height/2}this.updateVertexLabelOffset(a)}}}else this.removeState(t);null!=(i=this.graph.getChildOffsetForCell(t))&&(a.origin.x+=i.x,a.origin.y+=i.y)}if(null!=a&&(!this.graph.isCellCollapsed(t)||t==this.currentRoot))for(s=n.getChildCount(t),i=0;i<s;i++)o=n.getChildAt(t,i),this.validateBounds(a,o)},mxGraphView.prototype.updateVertexLabelOffset=function(e){var t=mxUtils.getValue(e.style,mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER);t==mxConstants.ALIGN_LEFT?e.absoluteOffset.x-=e.width:t==mxConstants.ALIGN_RIGHT&&(e.absoluteOffset.x+=e.width),(t=mxUtils.getValue(e.style,mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE))==mxConstants.ALIGN_TOP?e.absoluteOffset.y-=e.height:t==mxConstants.ALIGN_BOTTOM&&(e.absoluteOffset.y+=e.height)},mxGraphView.prototype.validatePoints=function(e,t){var n=this.graph.getModel(),a=this.getState(t),i=null;if(null!=a){if(a.invalid){var s=this.graph.getCellGeometry(t);if(null!=s&&n.isEdge(t)){var o=this.getState(this.getVisibleTerminal(t,!0));if(a.setVisibleTerminalState(o,!0),null!=o&&n.isEdge(o.cell)&&!n.isAncestor(o.cell,t)){var r=this.getState(n.getParent(o.cell));this.validatePoints(r,o.cell)}var l=this.getState(this.getVisibleTerminal(t,!1));a.setVisibleTerminalState(l,!1),null!=l&&n.isEdge(l.cell)&&!n.isAncestor(l.cell,t)&&(r=this.getState(n.getParent(l.cell)),this.validatePoints(r,l.cell)),this.updateFixedTerminalPoints(a,o,l),this.updatePoints(a,s.points,o,l),this.updateFloatingTerminalPoints(a,o,l),this.updateEdgeBounds(a),this.updateEdgeLabelOffset(a)}else null!=s&&s.relative&&null!=e&&n.isEdge(e.cell)&&(null!=(s=this.getPoint(e,s))&&(a.x=s.x,a.y=s.y,s.x=s.x/this.scale-this.translate.x,s.y=s.y/this.scale-this.translate.y,a.origin=s,this.childMoved(e,a)));a.invalid=!1,t!=this.currentRoot&&this.graph.cellRenderer.redraw(a,!1,this.isRendering())}(n.isEdge(t)||n.isVertex(t))&&(null!=a.shape&&null!=a.shape.boundingBox&&(i=a.shape.boundingBox.clone()),null!=a.text&&!this.graph.isLabelClipped(a.cell)&&null!=a.text.boundingBox&&(null!=i?i.add(a.text.boundingBox):i=a.text.boundingBox.clone()))}if(null!=a&&(!this.graph.isCellCollapsed(t)||t==this.currentRoot))for(s=n.getChildCount(t),o=0;o<s;o++)r=n.getChildAt(t,o),null!=(r=this.validatePoints(a,r))&&(null==i?i=r:i.add(r));return i},mxGraphView.prototype.childMoved=function(e,t){var n=t.cell;if(!this.graph.isCellCollapsed(n)||n==this.currentRoot)for(var a=this.graph.getModel(),i=a.getChildCount(n),s=0;s<i;s++)this.validateBounds(t,a.getChildAt(n,s))},mxGraphView.prototype.updateFixedTerminalPoints=function(e,t,n){this.updateFixedTerminalPoint(e,t,!0,this.graph.getConnectionConstraint(e,t,!0)),this.updateFixedTerminalPoint(e,n,!1,this.graph.getConnectionConstraint(e,n,!1))},mxGraphView.prototype.updateFixedTerminalPoint=function(e,t,n,a){var i=null;if(null!=a&&(i=this.graph.getConnectionPoint(t,a)),null==i&&null==t){t=this.scale,a=this.translate;var s=e.origin;null!=(i=this.graph.getCellGeometry(e.cell).getTerminalPoint(n))&&(i=new mxPoint(t*(a.x+i.x+s.x),t*(a.y+i.y+s.y)))}e.setAbsoluteTerminalPoint(i,n)},mxGraphView.prototype.updatePoints=function(e,t,n,a){if(null!=e){var i=[];i.push(e.absolutePoints[0]);var s=this.getEdgeStyle(e,t,n,a);if(null!=s)s(e,n=this.getTerminalPort(e,n,!0),a=this.getTerminalPort(e,a,!1),t,i);else if(null!=t)for(s=0;s<t.length;s++)null!=t[s]&&(a=mxUtils.clone(t[s]),i.push(this.transformControlPoint(e,a)));t=e.absolutePoints,i.push(t[t.length-1]),e.absolutePoints=i}},mxGraphView.prototype.transformControlPoint=function(e,t){var n=e.origin;return new mxPoint(this.scale*(t.x+this.translate.x+n.x),this.scale*(t.y+this.translate.y+n.y))},mxGraphView.prototype.getEdgeStyle=function(e,t,n,a){return"string"==typeof(e=null!=n&&n==a?mxUtils.getValue(e.style,mxConstants.STYLE_LOOP,this.graph.defaultLoopStyle):mxUtils.getValue(e.style,mxConstants.STYLE_NOEDGESTYLE,!1)?null:e.style[mxConstants.STYLE_EDGE])&&(null==(t=mxStyleRegistry.getValue(e))&&this.isAllowEval()&&(t=mxUtils.eval(e)),e=t),"function"==typeof e?e:null},mxGraphView.prototype.updateFloatingTerminalPoints=function(e,t,n){var a=e.absolutePoints,i=a[0];null==a[a.length-1]&&null!=n&&this.updateFloatingTerminalPoint(e,n,t,!1),null==i&&null!=t&&this.updateFloatingTerminalPoint(e,t,n,!0)},mxGraphView.prototype.updateFloatingTerminalPoint=function(e,t,n,a){t=this.getTerminalPort(e,t,a);var i=this.getNextPoint(e,n,a),s=this.graph.isOrthogonal(e);n=mxUtils.toRadians(Number(t.style[mxConstants.STYLE_ROTATION]||"0"));var o=new mxPoint(t.getCenterX(),t.getCenterY());if(0!=n){var r=Math.cos(-n),l=Math.sin(-n);i=mxUtils.getRotatedPoint(i,r,l,o)}r=parseFloat(e.style[mxConstants.STYLE_PERIMETER_SPACING]||0),r+=parseFloat(e.style[a?mxConstants.STYLE_SOURCE_PERIMETER_SPACING:mxConstants.STYLE_TARGET_PERIMETER_SPACING]||0),t=this.getPerimeterPoint(t,i,0==n&&s,r),0!=n&&(r=Math.cos(n),l=Math.sin(n),t=mxUtils.getRotatedPoint(t,r,l,o)),e.setAbsoluteTerminalPoint(t,a)},mxGraphView.prototype.getTerminalPort=function(e,t,n){return null!=(e=mxUtils.getValue(e.style,n?mxConstants.STYLE_SOURCE_PORT:mxConstants.STYLE_TARGET_PORT))&&(null!=(e=this.getState(this.graph.getModel().getCell(e)))&&(t=e)),t},mxGraphView.prototype.getPerimeterPoint=function(e,t,n,a){var i=null;if(null!=e){var s=this.getPerimeterFunction(e);null!=s&&null!=t&&(0<(a=this.getPerimeterBounds(e,a)).width||0<a.height)&&(i=s(a,e,t,n)),null==i&&(i=this.getPoint(e))}return i},mxGraphView.prototype.getRoutingCenterX=function(e){var t=null!=e.style&&parseFloat(e.style[mxConstants.STYLE_ROUTING_CENTER_X])||0;return e.getCenterX()+t*e.width},mxGraphView.prototype.getRoutingCenterY=function(e){var t=null!=e.style&&parseFloat(e.style[mxConstants.STYLE_ROUTING_CENTER_Y])||0;return e.getCenterY()+t*e.height},mxGraphView.prototype.getPerimeterBounds=function(e,t){return t=null!=t?t:0,null!=e&&(t+=parseFloat(e.style[mxConstants.STYLE_PERIMETER_SPACING]||0)),e.getPerimeterBounds(t*this.scale)},mxGraphView.prototype.getPerimeterFunction=function(e){if("string"==typeof(e=e.style[mxConstants.STYLE_PERIMETER])){var t=mxStyleRegistry.getValue(e);null==t&&this.isAllowEval()&&(t=mxUtils.eval(e)),e=t}return"function"==typeof e?e:null},mxGraphView.prototype.getNextPoint=function(e,t,n){var a=null;return null!=(e=e.absolutePoints)&&(n||2<e.length||null==t)&&(a=e.length,a=e[n?Math.min(1,a-1):Math.max(0,a-2)]),null==a&&null!=t&&(a=new mxPoint(t.getCenterX(),t.getCenterY())),a},mxGraphView.prototype.getVisibleTerminal=function(e,t){for(var n=this.graph.getModel(),a=n.getTerminal(e,t),i=a;null!=a&&a!=this.currentRoot;)this.graph.isCellVisible(i)&&!this.graph.isCellCollapsed(a)||(i=a),a=n.getParent(a);return n.getParent(i)==n.getRoot()&&(i=null),i},mxGraphView.prototype.updateEdgeBounds=function(e){var t=e.absolutePoints;if(e.length=0,null!=t&&0<t.length){var n=t[0],a=t[t.length-1];if(null==n||null==a)e.cell!=this.currentRoot&&this.clear(e.cell,!0);else{if(n.x!=a.x||n.y!=a.y){var i=a.x-n.x,s=a.y-n.y;e.terminalDistance=Math.sqrt(i*i+s*s)}else e.terminalDistance=0;a=0;var o=[];if(null!=(s=n)){n=s.x;for(var r=s.y,l=n,d=r,c=1;c<t.length;c++){var m=t[c];null!=m&&(i=s.x-m.x,s=s.y-m.y,i=Math.sqrt(i*i+s*s),o.push(i),a+=i,s=m,n=Math.min(s.x,n),r=Math.min(s.y,r),l=Math.max(s.x,l),d=Math.max(s.y,d))}e.length=a,e.segments=o,e.x=n,e.y=r,e.width=Math.max(1,l-n),e.height=Math.max(1,d-r)}}}},mxGraphView.prototype.getPoint=function(e,t){var n=e.getCenterX(),a=e.getCenterY();if(null==e.segments||null!=t&&!t.relative)null!=t&&(null!=(d=t.offset)&&(n+=d.x,a+=d.y));else{for(var i=e.absolutePoints.length,s=(.5+(null!=t?t.x/2:0))*e.length,o=e.segments[0],r=0,l=1;r+o<s&&l<i-1;)r+=o,o=e.segments[l++];if(i=0==o?0:(s-r)/o,s=e.absolutePoints[l-1],l=e.absolutePoints[l],null!=s&&null!=l){if(r=n=a=0,null!=t){a=t.y;var d=t.offset;null!=d&&(n=d.x,r=d.y)}d=l.x-s.x,l=l.y-s.y,n=s.x+d*i+((0==o?0:l/o)*a+n)*this.scale,a=s.y+l*i-((0==o?0:d/o)*a-r)*this.scale}}return new mxPoint(n,a)},mxGraphView.prototype.getRelativePoint=function(e,t,n){if(null!=(i=this.graph.getModel().getGeometry(e.cell))){var a=e.absolutePoints.length;if(i.relative&&1<a){for(var i=e.length,s=e.segments,o=e.absolutePoints[0],r=e.absolutePoints[1],l=mxUtils.ptSegDistSq(o.x,o.y,r.x,r.y,t,n),d=0,c=0,m=0,u=2;u<a;u++)c+=s[u-2],r=e.absolutePoints[u],(o=mxUtils.ptSegDistSq(o.x,o.y,r.x,r.y,t,n))<=l&&(l=o,d=u-1,m=c),o=r;return a=s[d],o=e.absolutePoints[d],l=(r=e.absolutePoints[d+1]).x,s=r.y,s=(l=(e=o.x-l)-(l=t-l))*e+(s=(d=o.y-s)-(s=n-s))*d,a<(e=Math.sqrt(s<=0?0:s*s/(e*e+d*d)))&&(e=a),a=Math.sqrt(mxUtils.ptSegDistSq(o.x,o.y,r.x,r.y,t,n)),-1==mxUtils.relativeCcw(o.x,o.y,r.x,r.y,t,n)&&(a=-a),new mxPoint((i/2-m-e)/i*-2,a/this.scale)}}return new mxPoint},mxGraphView.prototype.updateEdgeLabelOffset=function(e){var t=e.absolutePoints;if(e.absoluteOffset.x=e.getCenterX(),e.absoluteOffset.y=e.getCenterY(),null!=t&&0<t.length&&null!=e.segments)if((i=this.graph.getCellGeometry(e.cell)).relative){null!=(n=this.getPoint(e,i))&&(e.absoluteOffset=n)}else{var n=t[0],a=t[t.length-1];if(null!=n&&null!=a){t=a.x-n.x;var i,s=a.y-n.y,o=a=0;null!=(i=i.offset)&&(a=i.x,o=i.y),i=n.y+s/2+o*this.scale,e.absoluteOffset.x=n.x+t/2+a*this.scale,e.absoluteOffset.y=i}}},mxGraphView.prototype.getState=function(e,t){t=t||!1;var n=null;return null!=e&&(n=this.states.get(e),this.graph.isCellVisible(e)&&(null==n&&t&&this.graph.isCellVisible(e)?(n=this.createState(e),this.states.put(e,n)):t&&null!=n&&this.updateStyle&&(n.style=this.graph.getCellStyle(e)))),n},mxGraphView.prototype.isRendering=function(){return this.rendering},mxGraphView.prototype.setRendering=function(e){this.rendering=e},mxGraphView.prototype.isAllowEval=function(){return this.allowEval},mxGraphView.prototype.setAllowEval=function(e){this.allowEval=e},mxGraphView.prototype.getStates=function(){return this.states},mxGraphView.prototype.setStates=function(e){this.states=e},mxGraphView.prototype.getCellStates=function(e){if(null==e)return this.states;for(var t=[],n=0;n<e.length;n++){var a=this.getState(e[n]);null!=a&&t.push(a)}return t},mxGraphView.prototype.removeState=function(e){var t=null;return null!=e&&(null!=(t=this.states.remove(e))&&(this.graph.cellRenderer.destroy(t),t.destroy())),t},mxGraphView.prototype.createState=function(e){var t=this.graph.getCellStyle(e);return e=new mxCellState(this,e,t),this.graph.cellRenderer.initialize(e,this.isRendering()),e},mxGraphView.prototype.getCanvas=function(){return this.canvas},mxGraphView.prototype.getBackgroundPane=function(){return this.backgroundPane},mxGraphView.prototype.getDrawPane=function(){return this.drawPane},mxGraphView.prototype.getOverlayPane=function(){return this.overlayPane},mxGraphView.prototype.isContainerEvent=function(e){return(e=mxEvent.getSource(e))==this.graph.container||e.parentNode==this.backgroundPane||null!=e.parentNode&&e.parentNode.parentNode==this.backgroundPane||e==this.canvas.parentNode||e==this.canvas||e==this.backgroundPane||e==this.drawPane||e==this.overlayPane},mxGraphView.prototype.isScrollEvent=function(e){var t=mxUtils.getOffset(this.graph.container);e=new mxPoint(e.clientX-t.x,e.clientY-t.y);t=this.graph.container.offsetWidth;var n=this.graph.container.clientWidth;return n<t&&e.x>n+2&&e.x<=t||(t=this.graph.container.offsetHeight,(n=this.graph.container.clientHeight)<t&&e.y>n+2&&e.y<=t)},mxGraphView.prototype.init=function(){this.installListeners();var e=this.graph;e.dialect==mxConstants.DIALECT_SVG?this.createSvg():e.dialect==mxConstants.DIALECT_VML?this.createVml():this.createHtml()},mxGraphView.prototype.installListeners=function(){var a=this.graph,i=a.container;if(null!=i){mxEvent.addGestureListeners(i,mxUtils.bind(this,function(e){mxClient.IS_TOUCH&&a.isEditing()&&a.stopEditing(!a.isInvokesStopCellEditing()),this.isContainerEvent(e)&&(!mxClient.IS_IE&&!mxClient.IS_GC&&!mxClient.IS_OP&&!mxClient.IS_SF||!this.isScrollEvent(e))&&a.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e))}),mxUtils.bind(this,function(e){this.isContainerEvent(e)&&a.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e))}),mxUtils.bind(this,function(e){this.isContainerEvent(e)&&a.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e))})),mxEvent.addListener(i,"dblclick",mxUtils.bind(this,function(e){a.dblClick(e)}));a.addMouseListener({mouseDown:function(e,t){a.panningHandler.hideMenu()},mouseMove:function(){},mouseUp:function(){}}),this.moveHandler=mxUtils.bind(this,function(e){var t,n;null!=a.tooltipHandler&&a.tooltipHandler.isHideOnHover()&&a.tooltipHandler.hide(),this.captureDocumentGesture&&a.isMouseDown&&!mxEvent.isConsumed(e)&&a.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,(t=e,n=null,mxClient.IS_TOUCH&&(n=mxEvent.getClientX(t),t=mxEvent.getClientY(t),t=mxUtils.convertPoint(i,n,t),n=a.view.getState(a.getCellAt(t.x,t.y))),n)))}),this.endHandler=mxUtils.bind(this,function(e){this.captureDocumentGesture&&a.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e))}),mxEvent.addGestureListeners(document,null,this.moveHandler,this.endHandler)}},mxGraphView.prototype.createHtml=function(){var e=this.graph.container;null!=e&&(this.canvas=this.createHtmlPane("100%","100%"),this.backgroundPane=this.createHtmlPane("1px","1px"),this.drawPane=this.createHtmlPane("1px","1px"),this.overlayPane=this.createHtmlPane("1px","1px"),this.canvas.appendChild(this.backgroundPane),this.canvas.appendChild(this.drawPane),this.canvas.appendChild(this.overlayPane),e.appendChild(this.canvas),mxClient.IS_QUIRKS&&(e=mxUtils.bind(this,function(e){e=this.getGraphBounds(),this.updateHtmlCanvasSize(e.x+e.width+this.graph.border,e.y+e.height+this.graph.border)}),mxEvent.addListener(window,"resize",e)))},mxGraphView.prototype.updateHtmlCanvasSize=function(e,t){if(null!=this.graph.container){var n=this.graph.container.offsetHeight;this.canvas.style.width=this.graph.container.offsetWidth<e?e+"px":"100%",this.canvas.style.height=n<t?t+"px":"100%"}},mxGraphView.prototype.createHtmlPane=function(e,t){var n=document.createElement("DIV");return null!=e&&null!=t?(n.style.position="absolute",n.style.left="0px",n.style.top="0px",n.style.width=e,n.style.height=t):n.style.position="relative",n},mxGraphView.prototype.createVml=function(){var e=this.graph.container;if(null!=e){var t=e.offsetWidth,n=e.offsetHeight;this.canvas=this.createVmlPane(t,n),this.backgroundPane=this.createVmlPane(t,n),this.drawPane=this.createVmlPane(t,n),this.overlayPane=this.createVmlPane(t,n),this.canvas.appendChild(this.backgroundPane),this.canvas.appendChild(this.drawPane),this.canvas.appendChild(this.overlayPane),e.appendChild(this.canvas)}},mxGraphView.prototype.createVmlPane=function(e,t){var n=document.createElement(mxClient.VML_PREFIX+":group");return n.style.position="absolute",n.style.left="0px",n.style.top="0px",n.style.width=e+"px",n.style.height=t+"px",n.setAttribute("coordsize",e+","+t),n.setAttribute("coordorigin","0,0"),n},mxGraphView.prototype.createSvg=function(){var e=this.graph.container;this.canvas=document.createElementNS(mxConstants.NS_SVG,"g"),this.backgroundPane=document.createElementNS(mxConstants.NS_SVG,"g"),this.canvas.appendChild(this.backgroundPane),this.drawPane=document.createElementNS(mxConstants.NS_SVG,"g"),this.canvas.appendChild(this.drawPane),this.overlayPane=document.createElementNS(mxConstants.NS_SVG,"g"),this.canvas.appendChild(this.overlayPane);var t=document.createElementNS(mxConstants.NS_SVG,"svg");t.style.width="100%",t.style.height="100%",t.style.display="block",t.appendChild(this.canvas),null!=e&&(e.appendChild(t),"static"==mxUtils.getCurrentStyle(e).position&&(e.style.position="relative"))},mxGraphView.prototype.destroy=function(){var e=null!=this.canvas?this.canvas.ownerSVGElement:null;null==e&&(e=this.canvas),null!=e&&null!=e.parentNode&&(this.clear(this.currentRoot,!0),mxEvent.removeGestureListeners(document,null,this.moveHandler,this.endHandler),mxEvent.release(this.graph.container),e.parentNode.removeChild(e),this.overlayPane=this.drawPane=this.backgroundPane=this.canvas=this.endHandler=this.moveHandler=null)},mxCurrentRootChange.prototype.execute=function(){var e=this.view.currentRoot;this.view.currentRoot=this.previous,this.previous=e,null!=(e=this.view.graph.getTranslateForRoot(this.view.currentRoot))&&(this.view.translate=new mxPoint(-e.x,-e.y)),this.view.fireEvent(new mxEventObject(this.isUp?mxEvent.UP:mxEvent.DOWN,"root",this.view.currentRoot,"previous",this.previous)),this.isUp?(this.view.clear(this.view.currentRoot,!0),this.view.validate()):this.view.refresh(),this.isUp=!this.isUp},mxLoadResources&&mxResources.add(mxClient.basePath+"/resources/graph"),mxGraph.prototype=new mxEventSource,mxGraph.prototype.constructor=mxGraph,mxGraph.prototype.EMPTY_ARRAY=[],mxGraph.prototype.mouseListeners=null,mxGraph.prototype.isMouseDown=!1,mxGraph.prototype.model=null,mxGraph.prototype.view=null,mxGraph.prototype.stylesheet=null,mxGraph.prototype.selectionModel=null,mxGraph.prototype.cellEditor=null,mxGraph.prototype.cellRenderer=null,mxGraph.prototype.multiplicities=null,mxGraph.prototype.renderHint=null,mxGraph.prototype.dialect=null,mxGraph.prototype.gridSize=10,mxGraph.prototype.gridEnabled=!0,mxGraph.prototype.portsEnabled=!0,mxGraph.prototype.doubleTapEnabled=!0,mxGraph.prototype.doubleTapTimeout=700,mxGraph.prototype.doubleTapTolerance=25,mxGraph.prototype.lastTouchY=0,mxGraph.prototype.lastTouchY=0,mxGraph.prototype.lastTouchTime=0,mxGraph.prototype.gestureEnabled=!0,mxGraph.prototype.tolerance=4,mxGraph.prototype.defaultOverlap=.5,mxGraph.prototype.defaultParent=null,mxGraph.prototype.alternateEdgeStyle=null,mxGraph.prototype.backgroundImage=null,mxGraph.prototype.pageVisible=!1,mxGraph.prototype.pageBreaksVisible=!1,mxGraph.prototype.pageBreakColor="gray",mxGraph.prototype.pageBreakDashed=!0,mxGraph.prototype.minPageBreakDist=20,mxGraph.prototype.preferPageSize=!1,mxGraph.prototype.pageFormat=mxConstants.PAGE_FORMAT_A4_PORTRAIT,mxGraph.prototype.pageScale=1.5,mxGraph.prototype.enabled=!0,mxGraph.prototype.escapeEnabled=!0,mxGraph.prototype.invokesStopCellEditing=!0,mxGraph.prototype.enterStopsCellEditing=!1,mxGraph.prototype.useScrollbarsForPanning=!0,mxGraph.prototype.exportEnabled=!0,mxGraph.prototype.importEnabled=!0,mxGraph.prototype.cellsLocked=!1,mxGraph.prototype.cellsCloneable=!0,mxGraph.prototype.foldingEnabled=!0,mxGraph.prototype.cellsEditable=!0,mxGraph.prototype.cellsDeletable=!0,mxGraph.prototype.cellsMovable=!0,mxGraph.prototype.edgeLabelsMovable=!0,mxGraph.prototype.vertexLabelsMovable=!1,mxGraph.prototype.dropEnabled=!1,mxGraph.prototype.splitEnabled=!0,mxGraph.prototype.cellsResizable=!0,mxGraph.prototype.cellsBendable=!0,mxGraph.prototype.cellsSelectable=!0,mxGraph.prototype.cellsDisconnectable=!0,mxGraph.prototype.autoSizeCells=!1,mxGraph.prototype.autoScroll=!0,mxGraph.prototype.timerAutoScroll=!1,mxGraph.prototype.allowAutoPanning=!1,mxGraph.prototype.ignoreScrollbars=!1,mxGraph.prototype.autoExtend=!0,mxGraph.prototype.maximumGraphBounds=null,mxGraph.prototype.minimumGraphSize=null,mxGraph.prototype.minimumContainerSize=null,mxGraph.prototype.maximumContainerSize=null,mxGraph.prototype.resizeContainer=!1,mxGraph.prototype.border=0,mxGraph.prototype.ordered=!0,mxGraph.prototype.keepEdgesInForeground=!1,mxGraph.prototype.keepEdgesInBackground=!0,mxGraph.prototype.allowNegativeCoordinates=!0,mxGraph.prototype.constrainChildren=!0,mxGraph.prototype.extendParents=!0,mxGraph.prototype.extendParentsOnAdd=!0,mxGraph.prototype.collapseToPreferredSize=!0,mxGraph.prototype.zoomFactor=1.2,mxGraph.prototype.keepSelectionVisibleOnZoom=!1,mxGraph.prototype.centerZoom=!0,mxGraph.prototype.resetViewOnRootChange=!0,mxGraph.prototype.resetEdgesOnResize=!1,mxGraph.prototype.resetEdgesOnMove=!1,mxGraph.prototype.resetEdgesOnConnect=!0,mxGraph.prototype.allowLoops=!1,mxGraph.prototype.defaultLoopStyle=mxEdgeStyle.Loop,mxGraph.prototype.multigraph=!0,mxGraph.prototype.connectableEdges=!1,mxGraph.prototype.allowDanglingEdges=!0,mxGraph.prototype.cloneInvalidEdges=!1,mxGraph.prototype.disconnectOnMove=!0,mxGraph.prototype.labelsVisible=!0,mxGraph.prototype.htmlLabels=!1,mxGraph.prototype.swimlaneSelectionEnabled=!0,mxGraph.prototype.swimlaneNesting=!0,mxGraph.prototype.swimlaneIndicatorColorAttribute=mxConstants.STYLE_FILLCOLOR,mxGraph.prototype.imageBundles=null,mxGraph.prototype.minFitScale=.1,mxGraph.prototype.maxFitScale=8,mxGraph.prototype.panDx=0,mxGraph.prototype.panDy=0,mxGraph.prototype.collapsedImage=new mxImage(mxClient.imageBasePath+"/collapsed.gif",9,9),mxGraph.prototype.expandedImage=new mxImage(mxClient.imageBasePath+"/expanded.gif",9,9),mxGraph.prototype.warningImage=new mxImage("/assets/plugins/mxgraph/images/warning.gif",16,16),mxGraph.prototype.alreadyConnectedResource="none"!=mxClient.language?"alreadyConnected":"",mxGraph.prototype.containsValidationErrorsResource="none"!=mxClient.language?"containsValidationErrors":"",mxGraph.prototype.collapseExpandResource="none"!=mxClient.language?"collapse-expand":"",mxGraph.prototype.init=function(e){this.container=e,this.cellEditor=this.createCellEditor(),this.view.init(),this.sizeDidChange(),mxClient.IS_IE&&(mxEvent.addListener(window,"unload",mxUtils.bind(this,function(){this.destroy()})),mxEvent.addListener(e,"selectstart",mxUtils.bind(this,function(){return this.isEditing()}))),8==document.documentMode&&e.insertAdjacentHTML("beforeend",'<v:group style="DISPLAY: none;"></v:group>')},mxGraph.prototype.createHandlers=function(e){this.tooltipHandler=new mxTooltipHandler(this),this.tooltipHandler.setEnabled(!1),this.panningHandler=new mxPanningHandler(this),this.panningHandler.panningEnabled=!1,this.selectionCellsHandler=new mxSelectionCellsHandler(this),this.connectionHandler=new mxConnectionHandler(this),this.connectionHandler.setEnabled(!1),this.graphHandler=new mxGraphHandler(this)},mxGraph.prototype.createSelectionModel=function(){return new mxGraphSelectionModel(this)},mxGraph.prototype.createStylesheet=function(){return new mxStylesheet},mxGraph.prototype.createGraphView=function(){return new mxGraphView(this)},mxGraph.prototype.createCellRenderer=function(){return new mxCellRenderer},mxGraph.prototype.createCellEditor=function(){return new mxCellEditor(this)},mxGraph.prototype.getModel=function(){return this.model},mxGraph.prototype.getView=function(){return this.view},mxGraph.prototype.getStylesheet=function(){return this.stylesheet},mxGraph.prototype.setStylesheet=function(e){this.stylesheet=e},mxGraph.prototype.getSelectionModel=function(){return this.selectionModel},mxGraph.prototype.setSelectionModel=function(e){this.selectionModel=e},mxGraph.prototype.getSelectionCellsForChanges=function(e){for(var t=[],n=0;n<e.length;n++){var a=e[n];if(a.constructor!=mxRootChange){var i=null;a instanceof mxChildChange&&null==a.previous?i=a.child:null!=a.cell&&a.cell instanceof mxCell&&(i=a.cell),null!=i&&mxUtils.indexOf(t,i)<0&&t.push(i)}}return this.getModel().getTopmostCells(t)},mxGraph.prototype.graphModelChanged=function(e){for(var t=0;t<e.length;t++)this.processChange(e[t]);this.removeSelectionCells(this.getRemovedCellsForChanges(e)),this.view.validate(),this.sizeDidChange()},mxGraph.prototype.getRemovedCellsForChanges=function(e){for(var t=[],n=0;n<e.length;n++){var a=e[n];if(a instanceof mxRootChange)break;a instanceof mxChildChange?null!=a.previous&&null==a.parent&&(t=t.concat(this.model.getDescendants(a.child))):a instanceof mxVisibleChange&&(t=t.concat(this.model.getDescendants(a.cell)))}return t},mxGraph.prototype.processChange=function(e){if(e instanceof mxRootChange)this.clearSelection(),this.removeStateForCell(e.previous),this.resetViewOnRootChange&&(this.view.scale=1,this.view.translate.x=0,this.view.translate.y=0),this.fireEvent(new mxEventObject(mxEvent.ROOT));else if(e instanceof mxChildChange){var t=this.model.getParent(e.child);null!=t?this.view.invalidate(e.child,!0,!1,null!=e.previous):(this.removeStateForCell(e.child),this.view.currentRoot==e.child&&this.home()),t!=e.previous&&(null!=t&&this.view.invalidate(t,!1,!1),null!=e.previous&&this.view.invalidate(e.previous,!1,!1))}else e instanceof mxTerminalChange||e instanceof mxGeometryChange?this.view.invalidate(e.cell):e instanceof mxValueChange?this.view.invalidate(e.cell,!1,!1):e instanceof mxStyleChange?(this.view.invalidate(e.cell,!0,!0,!1),this.view.removeState(e.cell)):null!=e.cell&&e.cell instanceof mxCell&&this.removeStateForCell(e.cell)},mxGraph.prototype.removeStateForCell=function(e){for(var t=this.model.getChildCount(e),n=0;n<t;n++)this.removeStateForCell(this.model.getChildAt(e,n));this.view.removeState(e)},mxGraph.prototype.addCellOverlay=function(e,t){null==e.overlays&&(e.overlays=[]),e.overlays.push(t);var n=this.view.getState(e);return null!=n&&this.cellRenderer.redraw(n),this.fireEvent(new mxEventObject(mxEvent.ADD_OVERLAY,"cell",e,"overlay",t)),t},mxGraph.prototype.getCellOverlays=function(e){return e.overlays},mxGraph.prototype.removeCellOverlay=function(e,t){if(null==t)this.removeCellOverlays(e);else{var n=mxUtils.indexOf(e.overlays,t);0<=n?(e.overlays.splice(n,1),0==e.overlays.length&&(e.overlays=null),null!=(n=this.view.getState(e))&&this.cellRenderer.redraw(n),this.fireEvent(new mxEventObject(mxEvent.REMOVE_OVERLAY,"cell",e,"overlay",t))):t=null}return t},mxGraph.prototype.removeCellOverlays=function(e){var t=e.overlays;if(null!=t){e.overlays=null;var n=this.view.getState(e);for(null!=n&&this.cellRenderer.redraw(n),n=0;n<t.length;n++)this.fireEvent(new mxEventObject(mxEvent.REMOVE_OVERLAY,"cell",e,"overlay",t[n]))}return t},mxGraph.prototype.clearCellOverlays=function(e){e=null!=e?e:this.model.getRoot(),this.removeCellOverlays(e);for(var t=this.model.getChildCount(e),n=0;n<t;n++){var a=this.model.getChildAt(e,n);this.clearCellOverlays(a)}},mxGraph.prototype.setCellWarning=function(n,e,t,a){return null!=e&&0<e.length?(e=new mxCellOverlay(t=null!=t?t:this.warningImage,"<font color=red>"+e+"</font>"),a&&e.addListener(mxEvent.CLICK,mxUtils.bind(this,function(e,t){this.isEnabled()&&this.setSelectionCell(n)})),this.addCellOverlay(n,e)):(this.removeCellOverlays(n),null)},mxGraph.prototype.startEditing=function(e){this.startEditingAtCell(null,e)},mxGraph.prototype.startEditingAtCell=function(e,t){null==e&&(null!=(e=this.getSelectionCell())&&!this.isCellEditable(e)&&(e=null)),null!=e&&(this.fireEvent(new mxEventObject(mxEvent.START_EDITING,"cell",e,"event",t)),this.cellEditor.startEditing(e,t))},mxGraph.prototype.getEditingValue=function(e,t){return this.convertValueToString(e)},mxGraph.prototype.stopEditing=function(e){this.cellEditor.stopEditing(e)},mxGraph.prototype.labelChanged=function(e,t,n){this.model.beginUpdate();try{this.cellLabelChanged(e,t,this.isAutoSizeCell(e)),this.fireEvent(new mxEventObject(mxEvent.LABEL_CHANGED,"cell",e,"value",t,"event",n))}finally{this.model.endUpdate()}return e},mxGraph.prototype.cellLabelChanged=function(e,t,n){this.model.beginUpdate();try{this.model.setValue(e,t),n&&this.cellSizeUpdated(e,!1)}finally{this.model.endUpdate()}},mxGraph.prototype.escape=function(e){this.stopEditing(!0),this.connectionHandler.reset(),this.graphHandler.reset(),e=this.getSelectionCells();for(var t=0;t<e.length;t++){var n=this.view.getState(e[t]);null!=n&&null!=n.handler&&n.handler.reset()}},mxGraph.prototype.click=function(e){var t=e.getEvent(),n=e.getCell(),a=new mxEventObject(mxEvent.CLICK,"event",t,"cell",n);e.isConsumed()&&a.consume(),this.fireEvent(a),this.isEnabled()&&!mxEvent.isConsumed(t)&&!a.isConsumed()&&(null!=n?this.selectCellForEvent(n,t):(n=null,this.isSwimlaneSelectionEnabled()&&(n=this.getSwimlaneAt(e.getGraphX(),e.getGraphY())),null!=n?this.selectCellForEvent(n,t):this.isToggleEvent(t)||this.clearSelection()))},mxGraph.prototype.dblClick=function(e,t){var n=new mxEventObject(mxEvent.DOUBLE_CLICK,"event",e,"cell",t);this.fireEvent(n),this.isEnabled()&&!mxEvent.isConsumed(e)&&!n.isConsumed()&&null!=t&&this.isCellEditable(t)&&this.startEditingAtCell(t,e)},mxGraph.prototype.scrollPointToVisible=function(e,t,n,a){if(this.timerAutoScroll||!this.ignoreScrollbars&&!mxUtils.hasScrollbars(this.container))this.allowAutoPanning&&!this.panningHandler.active&&(null==this.panningManager&&(this.panningManager=this.createPanningManager()),this.panningManager.panTo(e+this.panDx,t+this.panDy));else{var i=this.container;if(a=null!=a?a:20,e>=i.scrollLeft&&t>=i.scrollTop&&e<=i.scrollLeft+i.clientWidth&&t<=i.scrollTop+i.clientHeight){var s=i.scrollLeft+i.clientWidth-e;if(s<a){if(e=i.scrollLeft,i.scrollLeft+=a-s,n&&e==i.scrollLeft){if(this.dialect==mxConstants.DIALECT_SVG){e=this.view.getDrawPane().ownerSVGElement;var o=this.container.scrollWidth+a-s}else o=Math.max(i.clientWidth,i.scrollWidth)+a-s,e=this.view.getCanvas();e.style.width=o+"px",i.scrollLeft+=a-s}}else(s=e-i.scrollLeft)<a&&(i.scrollLeft-=a-s);(s=i.scrollTop+i.clientHeight-t)<a?(e=i.scrollTop,i.scrollTop+=a-s,e==i.scrollTop&&n&&(this.dialect==mxConstants.DIALECT_SVG?(e=this.view.getDrawPane().ownerSVGElement,t=this.container.scrollHeight+a-s):(t=Math.max(i.clientHeight,i.scrollHeight)+a-s,e=this.view.getCanvas()),e.style.height=t+"px",i.scrollTop+=a-s)):(s=t-i.scrollTop)<a&&(i.scrollTop-=a-s)}}},mxGraph.prototype.createPanningManager=function(){return new mxPanningManager(this)},mxGraph.prototype.getBorderSizes=function(){function e(e){var t=0;t="thin"==e?2:"medium"==e?4:"thick"==e?6:parseInt(e);return isNaN(t)&&(t=0),t}var t=mxUtils.getCurrentStyle(this.container),n=new mxRectangle;return n.x=e(t.borderLeftWidth)+parseInt(t.paddingLeft||0),n.y=e(t.borderTopWidth)+parseInt(t.paddingTop||0),n.width=e(t.borderRightWidth)+parseInt(t.paddingRight||0),n.height=e(t.borderBottomWidth)+parseInt(t.paddingBottom||0),n},mxGraph.prototype.getPreferredPageSize=function(e,t,n){e=this.view.scale;var a=this.view.translate,i=this.pageFormat,s=e*this.pageScale;i=new mxRectangle(0,0,i.width*s,i.height*s);return t=this.pageBreaksVisible?Math.ceil(t/i.width):1,n=this.pageBreaksVisible?Math.ceil(n/i.height):1,new mxRectangle(0,0,t*i.width+2+a.x/e,n*i.height+2+a.y/e)},mxGraph.prototype.sizeDidChange=function(){var e=this.getGraphBounds();if(null!=this.container){var t=this.getBorder(),n=Math.max(0,e.x+e.width+1+t);t=Math.max(0,e.y+e.height+1+t);if(null!=this.minimumContainerSize&&(n=Math.max(n,this.minimumContainerSize.width),t=Math.max(t,this.minimumContainerSize.height)),this.resizeContainer&&this.doResizeContainer(n,t),this.preferPageSize||!mxClient.IS_IE&&this.pageVisible){var a=this.getPreferredPageSize(e,n,t);null!=a&&(n=a.width,t=a.height)}null!=this.minimumGraphSize&&(n=Math.max(n,this.minimumGraphSize.width*this.view.scale),t=Math.max(t,this.minimumGraphSize.height*this.view.scale)),n=Math.ceil(n-1),t=Math.ceil(t-1),this.dialect==mxConstants.DIALECT_SVG?((a=this.view.getDrawPane().ownerSVGElement).style.minWidth=Math.max(1,n)+"px",a.style.minHeight=Math.max(1,t)+"px",a.style.width="100%",a.style.height="100%"):mxClient.IS_QUIRKS?this.view.updateHtmlCanvasSize(Math.max(1,n),Math.max(1,t)):(this.view.canvas.style.minWidth=Math.max(1,n)+"px",this.view.canvas.style.minHeight=Math.max(1,t)+"px"),this.updatePageBreaks(this.pageBreaksVisible,n-1,t-1)}this.fireEvent(new mxEventObject(mxEvent.SIZE,"bounds",e))},mxGraph.prototype.doResizeContainer=function(e,t){if(mxClient.IS_IE)if(mxClient.IS_QUIRKS){var n=this.getBorderSizes();e+=Math.max(2,n.x+n.width+1),t+=Math.max(2,n.y+n.height+1)}else 9<=document.documentMode?(e+=3,t+=5):(e+=1,t+=1);else t+=1;null!=this.maximumContainerSize&&(e=Math.min(this.maximumContainerSize.width,e),t=Math.min(this.maximumContainerSize.height,t)),this.container.style.width=Math.ceil(e)+"px",this.container.style.height=Math.ceil(t)+"px"},mxGraph.prototype.updatePageBreaks=function(e,t,n){var a=this.view.scale,i=this.view.translate,s=this.pageFormat,o=a*this.pageScale;i=new mxRectangle(a*i.x,a*i.y,s.width*o,s.height*o);if(e=e&&Math.min(i.width,i.height)>this.minPageBreakDist,i.x=mxUtils.mod(i.x,i.width),i.y=mxUtils.mod(i.y,i.height),s=e?Math.ceil((t-i.x)/i.width):0,e=e?Math.ceil((n-i.y)/i.height):0,null==this.horizontalPageBreaks&&0<s&&(this.horizontalPageBreaks=[]),null!=this.horizontalPageBreaks){for(o=0;o<=s;o++){var r=[new mxPoint(i.x+o*i.width,1),new mxPoint(i.x+o*i.width,n)];null!=this.horizontalPageBreaks[o]?(this.horizontalPageBreaks[o].scale=1,this.horizontalPageBreaks[o].points=r,this.horizontalPageBreaks[o].redraw()):((r=new mxPolyline(r,this.pageBreakColor,this.scale)).dialect=this.dialect,r.isDashed=this.pageBreakDashed,r.scale=a,r.init(this.view.backgroundPane),r.redraw(),this.horizontalPageBreaks[o]=r)}for(o=s;o<this.horizontalPageBreaks.length;o++)this.horizontalPageBreaks[o].destroy();this.horizontalPageBreaks.splice(s,this.horizontalPageBreaks.length-s)}if(null==this.verticalPageBreaks&&0<e&&(this.verticalPageBreaks=[]),null!=this.verticalPageBreaks){for(o=0;o<=e;o++)r=[new mxPoint(1,i.y+o*i.height),new mxPoint(t,i.y+o*i.height)],null!=this.verticalPageBreaks[o]?(this.verticalPageBreaks[o].scale=1,this.verticalPageBreaks[o].points=r,this.verticalPageBreaks[o].redraw()):((r=new mxPolyline(r,this.pageBreakColor,a)).dialect=this.dialect,r.isDashed=this.pageBreakDashed,r.scale=a,r.init(this.view.backgroundPane),r.redraw(),this.verticalPageBreaks[o]=r);for(o=e;o<this.verticalPageBreaks.length;o++)this.verticalPageBreaks[o].destroy();this.verticalPageBreaks.splice(e,this.verticalPageBreaks.length-e)}},mxGraph.prototype.getCellStyle=function(e){var t=this.model.getStyle(e),n=null;n=this.model.isEdge(e)?this.stylesheet.getDefaultEdgeStyle():this.stylesheet.getDefaultVertexStyle();return null!=t&&(n=this.postProcessCellStyle(this.stylesheet.getCellStyle(t,n))),null==n&&(n=mxGraph.prototype.EMPTY_ARRAY),n},mxGraph.prototype.postProcessCellStyle=function(e){if(null!=e){var t=e[mxConstants.STYLE_IMAGE],n=this.getImageFromBundles(t);null!=n?e[mxConstants.STYLE_IMAGE]=n:n=t,null!=n&&"data:image/"==n.substring(0,11)&&(0<(t=n.indexOf(","))&&(n=n.substring(0,t)+";base64,"+n.substring(t+1)),e[mxConstants.STYLE_IMAGE]=n)}return e},mxGraph.prototype.setCellStyle=function(e,t){if(null!=(t=t||this.getSelectionCells())){this.model.beginUpdate();try{for(var n=0;n<t.length;n++)this.model.setStyle(t[n],e)}finally{this.model.endUpdate()}}},mxGraph.prototype.toggleCellStyle=function(e,t,n){n=n||this.getSelectionCell(),this.toggleCellStyles(e,t,[n])},mxGraph.prototype.toggleCellStyles=function(e,t,n){var a;(t=null!=t&&t,null!=(n=n||this.getSelectionCells())&&0<n.length)&&(null!=(a=null!=(a=this.view.getState(n[0]))?a.style:this.getCellStyle(n[0]))&&(t=mxUtils.getValue(a,e,t)?0:1,this.setCellStyles(e,t,n)))},mxGraph.prototype.setCellStyles=function(e,t,n){n=n||this.getSelectionCells(),mxUtils.setCellStyles(this.model,n,e,t)},mxGraph.prototype.toggleCellStyleFlags=function(e,t,n){this.setCellStyleFlags(e,t,null,n)},mxGraph.prototype.setCellStyleFlags=function(e,t,n,a){if(null!=(a=a||this.getSelectionCells())&&0<a.length){var i;if(null==n)null!=(i=null!=(i=this.view.getState(a[0]))?i.style:this.getCellStyle(a[0]))&&(n=(parseInt(i[e]||0)&t)!=t);mxUtils.setCellStyleFlags(this.model,a,e,t,n)}},mxGraph.prototype.alignCells=function(e,t,n){if(null==t&&(t=this.getSelectionCells()),null!=t&&1<t.length){if(null==n)for(var a=0;a<t.length;a++){var i=this.getCellGeometry(t[a]);if(null!=i&&!this.model.isEdge(t[a]))if(null==n){if(e==mxConstants.ALIGN_CENTER){n=i.x+i.width/2;break}if(e==mxConstants.ALIGN_RIGHT)n=i.x+i.width;else if(e==mxConstants.ALIGN_TOP)n=i.y;else{if(e==mxConstants.ALIGN_MIDDLE){n=i.y+i.height/2;break}n=e==mxConstants.ALIGN_BOTTOM?i.y+i.height:i.x}}else n=e==mxConstants.ALIGN_RIGHT?Math.max(n,i.x+i.width):e==mxConstants.ALIGN_TOP?Math.min(n,i.y):e==mxConstants.ALIGN_BOTTOM?Math.max(n,i.y+i.height):Math.min(n,i.x)}if(null!=n){this.model.beginUpdate();try{for(a=0;a<t.length;a++)null!=(i=this.getCellGeometry(t[a]))&&!this.model.isEdge(t[a])&&(i=i.clone(),e==mxConstants.ALIGN_CENTER?i.x=n-i.width/2:e==mxConstants.ALIGN_RIGHT?i.x=n-i.width:e==mxConstants.ALIGN_TOP?i.y=n:e==mxConstants.ALIGN_MIDDLE?i.y=n-i.height/2:e==mxConstants.ALIGN_BOTTOM?i.y=n-i.height:i.x=n,this.model.setGeometry(t[a],i));this.fireEvent(new mxEventObject(mxEvent.ALIGN_CELLS,"align",e,"cells",t))}finally{this.model.endUpdate()}}}return t},mxGraph.prototype.flipEdge=function(e){if(null!=e&&null!=this.alternateEdgeStyle){this.model.beginUpdate();try{var t=this.model.getStyle(e);null==t||0==t.length?this.model.setStyle(e,this.alternateEdgeStyle):this.model.setStyle(e,null),this.resetEdge(e),this.fireEvent(new mxEventObject(mxEvent.FLIP_EDGE,"edge",e))}finally{this.model.endUpdate()}}return e},mxGraph.prototype.addImageBundle=function(e){this.imageBundles.push(e)},mxGraph.prototype.removeImageBundle=function(e){for(var t=[],n=0;n<this.imageBundles.length;n++)this.imageBundles[n]!=e&&t.push(this.imageBundles[n]);this.imageBundles=t},mxGraph.prototype.getImageFromBundles=function(e){if(null!=e)for(var t=0;t<this.imageBundles.length;t++){var n=this.imageBundles[t].getImage(e);if(null!=n)return n}return null},mxGraph.prototype.orderCells=function(e,t){null==t&&(t=mxUtils.sortCells(this.getSelectionCells(),!0)),this.model.beginUpdate();try{this.cellsOrdered(t,e),this.fireEvent(new mxEventObject(mxEvent.ORDER_CELLS,"back",e,"cells",t))}finally{this.model.endUpdate()}return t},mxGraph.prototype.cellsOrdered=function(e,t){if(null!=e){this.model.beginUpdate();try{for(var n=0;n<e.length;n++){var a=this.model.getParent(e[n]);t?this.model.add(a,e[n],n):this.model.add(a,e[n],this.model.getChildCount(a)-1)}this.fireEvent(new mxEventObject(mxEvent.CELLS_ORDERED,"back",t,"cells",e))}finally{this.model.endUpdate()}}},mxGraph.prototype.groupCells=function(e,t,n){null==n&&(n=mxUtils.sortCells(this.getSelectionCells(),!0)),n=this.getCellsForGroup(n),null==e&&(e=this.createGroupCell(n));var a=this.getBoundsForGroup(e,n,t);if(0<n.length&&null!=a){var i=this.model.getParent(e);null==i&&(i=this.model.getParent(n[0])),this.model.beginUpdate();try{null==this.getCellGeometry(e)&&this.model.setGeometry(e,new mxGeometry);var s=this.model.getChildCount(i);this.cellsAdded([e],i,s,null,null,!1),s=this.model.getChildCount(e),this.cellsAdded(n,e,s,null,null,!1,!1),this.cellsMoved(n,-a.x,-a.y,!1,!0),this.cellsResized([e],[a]),this.fireEvent(new mxEventObject(mxEvent.GROUP_CELLS,"group",e,"border",t,"cells",n))}finally{this.model.endUpdate()}}return e},mxGraph.prototype.getCellsForGroup=function(e){var t=[];if(null!=e&&0<e.length){var n=this.model.getParent(e[0]);t.push(e[0]);for(var a=1;a<e.length;a++)this.model.getParent(e[a])==n&&t.push(e[a])}return t},mxGraph.prototype.getBoundsForGroup=function(e,t,n){return null!=(t=this.getBoundingBoxFromGeometry(t))&&(this.isSwimlane(e)&&(e=this.getStartSize(e),t.x-=e.width,t.y-=e.height,t.width+=e.width,t.height+=e.height),t.x-=n,t.y-=n,t.width+=2*n,t.height+=2*n),t},mxGraph.prototype.createGroupCell=function(e){return(e=new mxCell("")).setVertex(!0),e.setConnectable(!1),e},mxGraph.prototype.ungroupCells=function(e){var t=[];if(null==e){e=this.getSelectionCells();for(var n=[],a=0;a<e.length;a++)0<this.model.getChildCount(e[a])&&n.push(e[a]);e=n}if(null!=e&&0<e.length){this.model.beginUpdate();try{for(a=0;a<e.length;a++){if(null!=(i=this.model.getChildren(e[a]))&&0<i.length){var i=i.slice(),s=this.model.getParent(e[a]),o=this.model.getChildCount(s);this.cellsAdded(i,s,o,null,null,!0),t=t.concat(i)}}this.cellsRemoved(this.addAllEdges(e)),this.fireEvent(new mxEventObject(mxEvent.UNGROUP_CELLS,"cells",e))}finally{this.model.endUpdate()}}return t},mxGraph.prototype.removeCellsFromParent=function(e){null==e&&(e=this.getSelectionCells()),this.model.beginUpdate();try{var t=this.getDefaultParent(),n=this.model.getChildCount(t);this.cellsAdded(e,t,n,null,null,!0),this.fireEvent(new mxEventObject(mxEvent.REMOVE_CELLS_FROM_PARENT,"cells",e))}finally{this.model.endUpdate()}return e},mxGraph.prototype.updateGroupBounds=function(e,t,n){null==e&&(e=this.getSelectionCells()),t=null!=t?t:0,n=null!=n&&n,this.model.beginUpdate();try{for(var a=0;a<e.length;a++){if(null!=(r=this.getCellGeometry(e[a]))){var i=this.getChildCells(e[a]);if(null!=i&&0<i.length){var s=this.getBoundingBoxFromGeometry(i);if(0<s.width&&0<s.height){var o=this.isSwimlane(e[a])?this.getStartSize(e[a]):new mxRectangle,r=r.clone();n&&(r.x+=s.x-o.width-t,r.y+=s.y-o.height-t),r.width=s.width+o.width+2*t,r.height=s.height+o.height+2*t,this.model.setGeometry(e[a],r),this.moveCells(i,-s.x+o.width+t,-s.y+o.height+t)}}}}}finally{this.model.endUpdate()}return e},mxGraph.prototype.cloneCells=function(e,t){t=null==t||t;var n=null;if(null!=e){for(var a={},i=(n=[],0);i<e.length;i++){a[s=mxCellPath.create(e[i])]=e[i],n.push(e[i])}if(0<n.length){var s=this.view.scale,o=this.view.translate;for(n=this.model.cloneCells(e,!0),i=0;i<e.length;i++)if(!t&&this.model.isEdge(n[i])&&null!=this.getEdgeValidationError(n[i],this.model.getTerminal(n[i],!0),this.model.getTerminal(n[i],!1)))n[i]=null;else{var r=this.model.getGeometry(n[i]);if(null!=r){var l=this.view.getState(e[i]),d=this.view.getState(this.model.getParent(e[i]));if(null!=l&&null!=d){var c=d.origin.x;d=d.origin.y;if(this.model.isEdge(n[i])){l=l.absolutePoints;for(var m=this.model.getTerminal(e[i],!0),u=mxCellPath.create(m);null!=m&&null==a[u];)m=this.model.getParent(m),u=mxCellPath.create(m);for(null==m&&r.setTerminalPoint(new mxPoint(l[0].x/s-o.x,l[0].y/s-o.y),!0),m=this.model.getTerminal(e[i],!1),u=mxCellPath.create(m);null!=m&&null==a[u];)m=this.model.getParent(m),u=mxCellPath.create(m);if(null==m&&(m=l.length-1,r.setTerminalPoint(new mxPoint(l[m].x/s-o.x,l[m].y/s-o.y),!1)),null!=(r=r.points))for(l=0;l<r.length;l++)r[l].x+=c,r[l].y+=d}else r.x+=c,r.y+=d}}}}else n=[]}return n},mxGraph.prototype.insertVertex=function(e,t,n,a,i,s,o,r,l){return t=this.createVertex(e,t,n,a,i,s,o,r,l),this.addCell(t,e)},mxGraph.prototype.createVertex=function(e,t,n,a,i,s,o,r,l){return(e=new mxGeometry(a,i,s,o)).relative=null!=l&&l,(n=new mxCell(n,e,r)).setId(t),n.setVertex(!0),n.setConnectable(!0),n},mxGraph.prototype.insertEdge=function(e,t,n,a,i,s){return t=this.createEdge(e,t,n,a,i,s),this.addEdge(t,e,a,i)},mxGraph.prototype.createEdge=function(e,t,n,a,i,s){return(e=new mxCell(n,new mxGeometry,s)).setId(t),e.setEdge(!0),e.geometry.relative=!0,e},mxGraph.prototype.addEdge=function(e,t,n,a,i){return this.addCell(e,t,i,n,a)},mxGraph.prototype.addCell=function(e,t,n,a,i){return this.addCells([e],t,n,a,i)[0]},mxGraph.prototype.addCells=function(e,t,n,a,i){null==t&&(t=this.getDefaultParent()),null==n&&(n=this.model.getChildCount(t)),this.model.beginUpdate();try{this.cellsAdded(e,t,n,a,i,!1,!0),this.fireEvent(new mxEventObject(mxEvent.ADD_CELLS,"cells",e,"parent",t,"index",n,"source",a,"target",i))}finally{this.model.endUpdate()}return e},mxGraph.prototype.cellsAdded=function(e,t,n,a,i,s,o){if(null!=e&&null!=t&&null!=n){this.model.beginUpdate();try{for(var r=null!=(d=s?this.view.getState(t):null)?d.origin:null,l=new mxPoint(0,0),d=0;d<e.length;d++)if(null==e[d])n--;else{var c=this.model.getParent(e[d]);if(null!=r&&e[d]!=t&&t!=c){var m=this.view.getState(c),u=null!=m?m.origin:l;if(null!=(p=this.model.getGeometry(e[d]))){var p,g=u.x-r.x,v=u.y-r.y;(p=p.clone()).translate(g,v),!p.relative&&this.model.isVertex(e[d])&&!this.isAllowNegativeCoordinates()&&(p.x=Math.max(0,p.x),p.y=Math.max(0,p.y)),this.model.setGeometry(e[d],p)}}t==c&&n+d>this.model.getChildCount(t)&&n--,this.model.add(t,e[d],n+d),this.isExtendParentsOnAdd()&&this.isExtendParent(e[d])&&this.extendParent(e[d]),(null==o||o)&&this.constrainChild(e[d]),null!=a&&this.cellConnected(e[d],a,!0),null!=i&&this.cellConnected(e[d],i,!1)}this.fireEvent(new mxEventObject(mxEvent.CELLS_ADDED,"cells",e,"parent",t,"index",n,"source",a,"target",i,"absolute",s))}finally{this.model.endUpdate()}}},mxGraph.prototype.removeCells=function(e,t){t=null==t||t,null==e&&(e=this.getDeletableCells(this.getSelectionCells())),t&&(e=this.getDeletableCells(this.addAllEdges(e))),this.model.beginUpdate();try{this.cellsRemoved(e),this.fireEvent(new mxEventObject(mxEvent.REMOVE_CELLS,"cells",e,"includeEdges",t))}finally{this.model.endUpdate()}return e},mxGraph.prototype.cellsRemoved=function(e){if(null!=e&&0<e.length){var t=this.view.scale,n=this.view.translate;this.model.beginUpdate();try{for(var a={},i=0;i<e.length;i++){var s=mxCellPath.create(e[i]);a[s]=e[i]}for(i=0;i<e.length;i++){for(var o=this.getConnections(e[i]),r=0;r<o.length;r++)if(null==a[s=mxCellPath.create(o[r])]){if(null!=(d=this.model.getGeometry(o[r]))){var l=this.view.getState(o[r]);if(null!=l){var d=d.clone(),c=l.getVisibleTerminal(!0)==e[i],m=l.absolutePoints,u=c?0:m.length-1;d.setTerminalPoint(new mxPoint(m[u].x/t-n.x,m[u].y/t-n.y),c),this.model.setTerminal(o[r],null,c),this.model.setGeometry(o[r],d)}}}this.model.remove(e[i])}this.fireEvent(new mxEventObject(mxEvent.CELLS_REMOVED,"cells",e))}finally{this.model.endUpdate()}}},mxGraph.prototype.splitEdge=function(e,t,n,a,i){a=a||0,i=i||0,null==n&&(n=this.cloneCells([e])[0]);var s=this.model.getParent(e),o=this.model.getTerminal(e,!0);this.model.beginUpdate();try{this.cellsMoved(t,a,i,!1,!1),this.cellsAdded(t,s,this.model.getChildCount(s),null,null,!0),this.cellsAdded([n],s,this.model.getChildCount(s),o,t[0],!1),this.cellConnected(e,t[0],!0),this.fireEvent(new mxEventObject(mxEvent.SPLIT_EDGE,"edge",e,"cells",t,"newEdge",n,"dx",a,"dy",i))}finally{this.model.endUpdate()}return n},mxGraph.prototype.toggleCells=function(e,t,n){null==t&&(t=this.getSelectionCells()),n&&(t=this.addAllEdges(t)),this.model.beginUpdate();try{this.cellsToggled(t,e),this.fireEvent(new mxEventObject(mxEvent.TOGGLE_CELLS,"show",e,"cells",t,"includeEdges",n))}finally{this.model.endUpdate()}return t},mxGraph.prototype.cellsToggled=function(e,t){if(null!=e&&0<e.length){this.model.beginUpdate();try{for(var n=0;n<e.length;n++)this.model.setVisible(e[n],t)}finally{this.model.endUpdate()}}},mxGraph.prototype.foldCells=function(e,t,n,a){t=null!=t&&t,null==n&&(n=this.getFoldableCells(this.getSelectionCells(),e)),this.stopEditing(!1),this.model.beginUpdate();try{this.cellsFolded(n,e,t,a),this.fireEvent(new mxEventObject(mxEvent.FOLD_CELLS,"collapse",e,"recurse",t,"cells",n))}finally{this.model.endUpdate()}return n},mxGraph.prototype.cellsFolded=function(e,t,n,a){if(null!=e&&0<e.length){this.model.beginUpdate();try{for(var i=0;i<e.length;i++)if((!a||this.isCellFoldable(e[i],t))&&t!=this.isCellCollapsed(e[i])&&(this.model.setCollapsed(e[i],t),this.swapBounds(e[i],t),this.isExtendParent(e[i])&&this.extendParent(e[i]),n)){var s=this.model.getChildren(e[i]);this.foldCells(s,t,n)}this.fireEvent(new mxEventObject(mxEvent.CELLS_FOLDED,"cells",e,"collapse",t,"recurse",n))}finally{this.model.endUpdate()}}},mxGraph.prototype.swapBounds=function(e,t){if(null!=e){var n=this.model.getGeometry(e);null!=n&&(n=n.clone(),this.updateAlternateBounds(e,n,t),n.swap(),this.model.setGeometry(e,n))}},mxGraph.prototype.updateAlternateBounds=function(e,t,n){if(null!=e&&null!=t){if(n=null!=(n=this.view.getState(e))?n.style:this.getCellStyle(e),null==t.alternateBounds){var a=t;this.collapseToPreferredSize&&(null!=(e=this.getPreferredSizeForCell(e))&&(a=e,0<(e=mxUtils.getValue(n,mxConstants.STYLE_STARTSIZE))&&(a.height=Math.max(a.height,e)))),t.alternateBounds=new mxRectangle(0,0,a.width,a.height)}if(null!=t.alternateBounds){t.alternateBounds.x=t.x,t.alternateBounds.y=t.y;var i=mxUtils.toRadians(n[mxConstants.STYLE_ROTATION]||"0");0!=i&&(e=t.alternateBounds.getCenterX()-t.getCenterX(),n=t.alternateBounds.getCenterY()-t.getCenterY(),a=Math.cos(i),i=Math.sin(i),t.alternateBounds.x+=a*e-i*n-e,t.alternateBounds.y+=i*e+a*n-n)}}},mxGraph.prototype.addAllEdges=function(e){var t=e.slice();return t.concat(this.getAllEdges(e))},mxGraph.prototype.getAllEdges=function(e){var t=[];if(null!=e)for(var n=0;n<e.length;n++){for(var a=this.model.getEdgeCount(e[n]),i=0;i<a;i++)t.push(this.model.getEdgeAt(e[n],i));a=this.model.getChildren(e[n]),t=t.concat(this.getAllEdges(a))}return t},mxGraph.prototype.updateCellSize=function(e,t){t=null!=t&&t,this.model.beginUpdate();try{this.cellSizeUpdated(e,t),this.fireEvent(new mxEventObject(mxEvent.UPDATE_CELL_SIZE,"cell",e,"ignoreChildren",t))}finally{this.model.endUpdate()}return e},mxGraph.prototype.cellSizeUpdated=function(e,t){if(null!=e){this.model.beginUpdate();try{var n=this.getPreferredSizeForCell(e),a=this.model.getGeometry(e);if(null!=n&&null!=a){var i=this.isCellCollapsed(e);a=a.clone();if(this.isSwimlane(e)){var s=this.view.getState(e),o=null!=s?s.style:this.getCellStyle(e),r=this.model.getStyle(e);null==r&&(r=""),mxUtils.getValue(o,mxConstants.STYLE_HORIZONTAL,!0)?(r=mxUtils.setStyle(r,mxConstants.STYLE_STARTSIZE,n.height+8),i&&(a.height=n.height+8),a.width=n.width):(r=mxUtils.setStyle(r,mxConstants.STYLE_STARTSIZE,n.width+8),i&&(a.width=n.width+8),a.height=n.height),this.model.setStyle(e,r)}else a.width=n.width,a.height=n.height;if(!t&&!i){var l=this.view.getBounds(this.model.getChildren(e));if(null!=l){var d=this.view.translate,c=this.view.scale,m=(l.y+l.height)/c-a.y-d.y;a.width=Math.max(a.width,(l.x+l.width)/c-a.x-d.x),a.height=Math.max(a.height,m)}}this.cellsResized([e],[a])}}finally{this.model.endUpdate()}}},mxGraph.prototype.getPreferredSizeForCell=function(e){var t=null;if(null!=e){var n=this.view.getState(e),a=null!=n?n.style:this.getCellStyle(e);if(null!=a&&!this.model.isEdge(e)){var i=a[mxConstants.STYLE_FONTSIZE]||mxConstants.DEFAULT_FONTSIZE,s=0;t=0;null==this.getImage(n)&&null==a[mxConstants.STYLE_IMAGE]||a[mxConstants.STYLE_SHAPE]!=mxConstants.SHAPE_LABEL||(a[mxConstants.STYLE_VERTICAL_ALIGN]==mxConstants.ALIGN_MIDDLE&&(s+=parseFloat(a[mxConstants.STYLE_IMAGE_WIDTH])||mxLabel.prototype.imageSize),a[mxConstants.STYLE_ALIGN]!=mxConstants.ALIGN_CENTER&&(t+=parseFloat(a[mxConstants.STYLE_IMAGE_HEIGHT])||mxLabel.prototype.imageSize)),s+=2*(a[mxConstants.STYLE_SPACING]||0),s+=a[mxConstants.STYLE_SPACING_LEFT]||0,s+=a[mxConstants.STYLE_SPACING_RIGHT]||0,t+=2*(a[mxConstants.STYLE_SPACING]||0),t+=a[mxConstants.STYLE_SPACING_TOP]||0,t+=a[mxConstants.STYLE_SPACING_BOTTOM]||0,null!=(n=this.getFoldingImage(n))&&(s+=n.width+8),t=null!=(n=this.getLabel(e))&&0<n.length?(this.isHtmlLabel(e)||(n=n.replace(/\n/g,"<br>")),e=(i=mxUtils.getSizeForString(n,i,a[mxConstants.STYLE_FONTFAMILY])).width+s,t=i.height+t,mxUtils.getValue(a,mxConstants.STYLE_HORIZONTAL,!0)||(a=t,t=e,e=a),this.gridEnabled&&(e=this.snap(e+this.gridSize/2),t=this.snap(t+this.gridSize/2)),new mxRectangle(0,0,e,t)):new mxRectangle(0,0,a=4*this.gridSize,a)}}return t},mxGraph.prototype.handleGesture=function(e,t){if(.2<Math.abs(1-t.scale)){var n=this.view.scale,a=this.view.translate,i=e.width*t.scale,s=e.height*t.scale,o=e.y-(s-e.height)/2;n=new mxRectangle(this.snap((e.x-(i-e.width)/2)/n)-a.x,this.snap(o/n)-a.y,this.snap(i/n),this.snap(s/n));this.resizeCell(e.cell,n)}},mxGraph.prototype.resizeCell=function(e,t){return this.resizeCells([e],[t])[0]},mxGraph.prototype.resizeCells=function(e,t){this.model.beginUpdate();try{this.cellsResized(e,t),this.fireEvent(new mxEventObject(mxEvent.RESIZE_CELLS,"cells",e,"bounds",t))}finally{this.model.endUpdate()}return e},mxGraph.prototype.cellsResized=function(e,t){if(null!=e&&null!=t&&e.length==t.length){this.model.beginUpdate();try{for(var n=0;n<e.length;n++){var a=t[n],i=this.model.getGeometry(e[n]);if(null!=i&&(i.x!=a.x||i.y!=a.y||i.width!=a.width||i.height!=a.height)){if((i=i.clone()).relative){var s=i.offset;null!=s&&(s.x+=a.x-i.x,s.y+=a.y-i.y)}else i.x=a.x,i.y=a.y;i.width=a.width,i.height=a.height,!i.relative&&this.model.isVertex(e[n])&&!this.isAllowNegativeCoordinates()&&(i.x=Math.max(0,i.x),i.y=Math.max(0,i.y)),this.model.setGeometry(e[n],i),this.isExtendParent(e[n])&&this.extendParent(e[n])}}this.resetEdgesOnResize&&this.resetEdges(e),this.fireEvent(new mxEventObject(mxEvent.CELLS_RESIZED,"cells",e,"bounds",t))}finally{this.model.endUpdate()}}},mxGraph.prototype.extendParent=function(e){if(null!=e){var t=this.model.getParent(e),n=this.model.getGeometry(t);null!=t&&null!=n&&!this.isCellCollapsed(t)&&(null!=(e=this.model.getGeometry(e))&&(n.width<e.x+e.width||n.height<e.y+e.height))&&((n=n.clone()).width=Math.max(n.width,e.x+e.width),n.height=Math.max(n.height,e.y+e.height),this.cellsResized([t],[n]))}},mxGraph.prototype.importCells=function(e,t,n,a,i){return this.moveCells(e,t,n,!0,a,i)},mxGraph.prototype.moveCells=function(e,t,n,a,i,s){if(t=null!=t?t:0,n=null!=n?n:0,a=null!=a&&a,null!=e&&(0!=t||0!=n||a||null!=i)){this.model.beginUpdate();try{a&&(e=this.cloneCells(e,this.isCloneInvalidEdges()),null==i&&(i=this.getDefaultParent()));var o=this.isAllowNegativeCoordinates();if(null!=i&&this.setAllowNegativeCoordinates(!0),this.cellsMoved(e,t,n,!a&&this.isDisconnectOnMove()&&this.isAllowDanglingEdges(),null==i),this.setAllowNegativeCoordinates(o),null!=i){var r=this.model.getChildCount(i);this.cellsAdded(e,i,r,null,null,!0)}this.fireEvent(new mxEventObject(mxEvent.MOVE_CELLS,"cells",e,"dx",t,"dy",n,"clone",a,"target",i,"event",s))}finally{this.model.endUpdate()}}return e},mxGraph.prototype.cellsMoved=function(e,t,n,a,i){if(null!=e&&(0!=t||0!=n)){this.model.beginUpdate();try{a&&this.disconnectGraph(e);for(var s=0;s<e.length;s++)this.translateCell(e[s],t,n),i&&this.constrainChild(e[s]);this.resetEdgesOnMove&&this.resetEdges(e),this.fireEvent(new mxEventObject(mxEvent.CELLS_MOVED,"cells",e,"dx",n,"dy",n,"disconnect",a))}finally{this.model.endUpdate()}}},mxGraph.prototype.translateCell=function(e,t,n){var a=this.model.getGeometry(e);null!=a&&((a=a.clone()).translate(t,n),!a.relative&&this.model.isVertex(e)&&!this.isAllowNegativeCoordinates()&&(a.x=Math.max(0,a.x),a.y=Math.max(0,a.y)),a.relative&&!this.model.isEdge(e)&&(null==a.offset?a.offset=new mxPoint(t,n):(a.offset.x+=t,a.offset.y+=n)),this.model.setGeometry(e,a))},mxGraph.prototype.getCellContainmentArea=function(e){if(null!=e&&!this.model.isEdge(e)){var t=this.model.getParent(e);if(t==this.getDefaultParent()||t==this.getCurrentRoot())return this.getMaximumGraphBounds();if(null!=t&&t!=this.getDefaultParent())if(null!=(i=this.model.getGeometry(t))){var n=e=0,a=i.width,i=i.height;return this.isSwimlane(t)&&(e=(t=this.getStartSize(t)).width,a-=t.width,n=t.height,i-=t.height),new mxRectangle(e,n,a,i)}}return null},mxGraph.prototype.getMaximumGraphBounds=function(){return this.maximumGraphBounds},mxGraph.prototype.constrainChild=function(e){if(null!=e){var t=this.model.getGeometry(e),n=this.isConstrainChild(e)?this.getCellContainmentArea(e):this.getMaximumGraphBounds();null!=t&&null!=n&&!t.relative&&(t.x<n.x||t.y<n.y||n.width<t.x+t.width||n.height<t.y+t.height)&&(e=this.getOverlap(e),0<n.width&&(t.x=Math.min(t.x,n.x+n.width-(1-e)*t.width)),0<n.height&&(t.y=Math.min(t.y,n.y+n.height-(1-e)*t.height)),t.x=Math.max(t.x,n.x-t.width*e),t.y=Math.max(t.y,n.y-t.height*e))}},mxGraph.prototype.resetEdges=function(e){if(null!=e){for(var t={},n=0;n<e.length;n++){var a=mxCellPath.create(e[n]);t[a]=e[n]}this.model.beginUpdate();try{for(n=0;n<e.length;n++){var i=this.model.getEdges(e[n]);if(null!=i)for(a=0;a<i.length;a++){var s=this.view.getState(i[a]),o=null!=s?s.getVisibleTerminal(!0):this.view.getVisibleTerminal(i[a],!0),r=null!=s?s.getVisibleTerminal(!1):this.view.getVisibleTerminal(i[a],!1),l=mxCellPath.create(o),d=mxCellPath.create(r);(null==t[l]||null==t[d])&&this.resetEdge(i[a])}this.resetEdges(this.model.getChildren(e[n]))}}finally{this.model.endUpdate()}}},mxGraph.prototype.resetEdge=function(e){var t=this.model.getGeometry(e);return null!=t&&null!=t.points&&0<t.points.length&&((t=t.clone()).points=[],this.model.setGeometry(e,t)),e},mxGraph.prototype.getAllConnectionConstraints=function(e,t){return null!=e&&null!=e.shape&&null!=e.shape.stencil?e.shape.stencil.constraints:null},mxGraph.prototype.getConnectionConstraint=function(e,t,n){t=null;var a=e.style[n?mxConstants.STYLE_EXIT_X:mxConstants.STYLE_ENTRY_X];if(null!=a){var i=e.style[n?mxConstants.STYLE_EXIT_Y:mxConstants.STYLE_ENTRY_Y];null!=i&&(t=new mxPoint(parseFloat(a),parseFloat(i)))}return a=!1,null!=t&&(a=mxUtils.getValue(e.style,n?mxConstants.STYLE_EXIT_PERIMETER:mxConstants.STYLE_ENTRY_PERIMETER,!0)),new mxConnectionConstraint(t,a)},mxGraph.prototype.setConnectionConstraint=function(e,t,n,a){if(null!=a){this.model.beginUpdate();try{null==a||null==a.point?(this.setCellStyles(n?mxConstants.STYLE_EXIT_X:mxConstants.STYLE_ENTRY_X,null,[e]),this.setCellStyles(n?mxConstants.STYLE_EXIT_Y:mxConstants.STYLE_ENTRY_Y,null,[e]),this.setCellStyles(n?mxConstants.STYLE_EXIT_PERIMETER:mxConstants.STYLE_ENTRY_PERIMETER,null,[e])):null!=a.point&&(this.setCellStyles(n?mxConstants.STYLE_EXIT_X:mxConstants.STYLE_ENTRY_X,a.point.x,[e]),this.setCellStyles(n?mxConstants.STYLE_EXIT_Y:mxConstants.STYLE_ENTRY_Y,a.point.y,[e]),a.perimeter?this.setCellStyles(n?mxConstants.STYLE_EXIT_PERIMETER:mxConstants.STYLE_ENTRY_PERIMETER,null,[e]):this.setCellStyles(n?mxConstants.STYLE_EXIT_PERIMETER:mxConstants.STYLE_ENTRY_PERIMETER,"0",[e]))}finally{this.model.endUpdate()}}},mxGraph.prototype.getConnectionPoint=function(e,t){var n=null;if(null!=e){var a=this.view.getPerimeterBounds(e),i=new mxPoint(a.getCenterX(),a.getCenterY()),s=e.style[mxConstants.STYLE_DIRECTION],o=0;if(null!=s&&("north"==s?o+=270:"west"==s?o+=180:"south"==s&&(o+=90),"north"==s||"south"==s)){a.x+=a.width/2-a.height/2,a.y+=a.height/2-a.width/2;var r=a.width;a.width=a.height,a.height=r}if(null!=t.point){var l=n=1,d=0,c=0;if(this.getModel().isVertex(e.cell)){var m=e.style[mxConstants.STYLE_FLIPH],u=e.style[mxConstants.STYLE_FLIPV];null!=e.shape.stencil&&(m=1==mxUtils.getValue(e.style,"stencilFlipH",0)||m,u=1==mxUtils.getValue(e.style,"stencilFlipV",0)||u),"north"!=s&&"south"!=s||(r=m,m=u,u=r),m&&(n=-1,d=-a.width),u&&(l=-1,c=-a.height)}n=new mxPoint(a.x+t.point.x*a.width*n-d,a.y+t.point.y*a.height*l-c)}s=e.style[mxConstants.STYLE_ROTATION]||0,t.perimeter?(0!=o&&null!=n&&(r=a=0,90==o?r=1:180==o?a=-1:270==s&&(r=-1),n=mxUtils.getRotatedPoint(n,a,r,i)),null!=n&&t.perimeter&&(n=this.view.getPerimeterPoint(e,n,!1))):s+=o,0!=s&&null!=n&&(o=mxUtils.toRadians(s),a=Math.cos(o),r=Math.sin(o),n=mxUtils.getRotatedPoint(n,a,r,i))}return n},mxGraph.prototype.connectCell=function(e,t,n,a){this.model.beginUpdate();try{var i=this.model.getTerminal(e,n);this.cellConnected(e,t,n,a),this.fireEvent(new mxEventObject(mxEvent.CONNECT_CELL,"edge",e,"terminal",t,"source",n,"previous",i))}finally{this.model.endUpdate()}return e},mxGraph.prototype.cellConnected=function(e,t,n,a){if(null!=e){this.model.beginUpdate();try{var i=this.model.getTerminal(e,n);this.setConnectionConstraint(e,t,n,a),this.isPortsEnabled()&&(a=null,this.isPort(t)&&(a=t.getId(),t=this.getTerminalForPort(t,n)),this.setCellStyles(n?mxConstants.STYLE_SOURCE_PORT:mxConstants.STYLE_TARGET_PORT,a,[e])),this.model.setTerminal(e,t,n),this.resetEdgesOnConnect&&this.resetEdge(e),this.fireEvent(new mxEventObject(mxEvent.CELL_CONNECTED,"edge",e,"terminal",t,"source",n,"previous",i))}finally{this.model.endUpdate()}}},mxGraph.prototype.disconnectGraph=function(e){if(null!=e){this.model.beginUpdate();try{for(var t=this.view.scale,n=this.view.translate,a={},i=0;i<e.length;i++){a[mxCellPath.create(e[i])]=e[i]}for(i=0;i<e.length;i++)if(this.model.isEdge(e[i])){if(null!=(r=this.model.getGeometry(e[i]))){var s=this.view.getState(e[i]),o=this.view.getState(this.model.getParent(e[i]));if(null!=s&&null!=o){var r=r.clone(),l=-o.origin.x,d=-o.origin.y,c=s.absolutePoints,m=this.model.getTerminal(e[i],!0);if(null!=m&&this.isCellDisconnectable(e[i],m,!0)){for(var u=mxCellPath.create(m);null!=m&&null==a[u];)m=this.model.getParent(m),u=mxCellPath.create(m);null==m&&(r.setTerminalPoint(new mxPoint(c[0].x/t-n.x+l,c[0].y/t-n.y+d),!0),this.model.setTerminal(e[i],null,!0))}var p=this.model.getTerminal(e[i],!1);if(null!=p&&this.isCellDisconnectable(e[i],p,!1)){for(var g=mxCellPath.create(p);null!=p&&null==a[g];)p=this.model.getParent(p),g=mxCellPath.create(p);if(null==p){var v=c.length-1;r.setTerminalPoint(new mxPoint(c[v].x/t-n.x+l,c[v].y/t-n.y+d),!1),this.model.setTerminal(e[i],null,!1)}}this.model.setGeometry(e[i],r)}}}}finally{this.model.endUpdate()}}},mxGraph.prototype.getCurrentRoot=function(){return this.view.currentRoot},mxGraph.prototype.getTranslateForRoot=function(e){return null},mxGraph.prototype.isPort=function(e){return!1},mxGraph.prototype.getTerminalForPort=function(e,t){return this.model.getParent(e)},mxGraph.prototype.getChildOffsetForCell=function(e){return null},mxGraph.prototype.enterGroup=function(e){null!=(e=e||this.getSelectionCell())&&this.isValidRoot(e)&&(this.view.setCurrentRoot(e),this.clearSelection())},mxGraph.prototype.exitGroup=function(){var e=this.model.getRoot(),t=this.getCurrentRoot();if(null!=t){for(var n=this.model.getParent(t);n!=e&&!this.isValidRoot(n)&&this.model.getParent(n)!=e;)n=this.model.getParent(n);n==e||this.model.getParent(n)==e?this.view.setCurrentRoot(null):this.view.setCurrentRoot(n),null!=this.view.getState(t)&&this.setSelectionCell(t)}},mxGraph.prototype.home=function(){var e=this.getCurrentRoot();null!=e&&(this.view.setCurrentRoot(null),null!=this.view.getState(e)&&this.setSelectionCell(e))},mxGraph.prototype.isValidRoot=function(e){return null!=e},mxGraph.prototype.getGraphBounds=function(){return this.view.getGraphBounds()},mxGraph.prototype.getCellBounds=function(e,t,n){var a=[e];if(t&&(a=a.concat(this.model.getEdges(e))),a=this.view.getBounds(a),n){n=this.model.getChildCount(e);for(var i=0;i<n;i++){var s=this.getCellBounds(this.model.getChildAt(e,i),t,!0);null!=a?a.add(s):a=s}}return a},mxGraph.prototype.getBoundingBoxFromGeometry=function(e,t){t=null!=t&&t;var n=null;if(null!=e)for(var a=0;a<e.length;a++)if(t||this.model.isVertex(e[a])){var i=this.getCellGeometry(e[a]);if(null!=i){var s=i.points;if(null!=s&&0<s.length){for(var o=new mxRectangle(s[0].x,s[0].y,0,0),r=function(e){null!=e&&o.add(new mxRectangle(e.x,e.y,0,0))},l=1;l<s.length;l++)r(s[l]);r(i.getTerminalPoint(!0)),r(i.getTerminalPoint(!1))}null==n?n=new mxRectangle(i.x,i.y,i.width,i.height):n.add(i)}}return n},mxGraph.prototype.refresh=function(e){this.view.clear(e,null==e),this.view.validate(),this.sizeDidChange(),this.fireEvent(new mxEventObject(mxEvent.REFRESH))},mxGraph.prototype.snap=function(e){return this.gridEnabled&&(e=Math.round(e/this.gridSize)*this.gridSize),e},mxGraph.prototype.panGraph=function(e,t){if(this.useScrollbarsForPanning&&mxUtils.hasScrollbars(this.container))this.container.scrollLeft=-e,this.container.scrollTop=-t;else{var n=this.view.getCanvas();if(this.dialect==mxConstants.DIALECT_SVG)if(0==e&&0==t){if(mxClient.IS_IE?n.setAttribute("transform","translate("+e+","+t+")"):n.removeAttribute("transform"),null!=this.shiftPreview1){for(var a=this.shiftPreview1.firstChild;null!=a;){var i=a.nextSibling;this.container.appendChild(a),a=i}for(this.shiftPreview1.parentNode.removeChild(this.shiftPreview1),this.shiftPreview1=null,this.container.appendChild(n.parentNode),a=this.shiftPreview2.firstChild;null!=a;)i=a.nextSibling,this.container.appendChild(a),a=i;this.shiftPreview2.parentNode.removeChild(this.shiftPreview2),this.shiftPreview2=null}}else{if(n.setAttribute("transform","translate("+e+","+t+")"),null==this.shiftPreview1){this.shiftPreview1=document.createElement("div"),this.shiftPreview1.style.position="absolute",this.shiftPreview1.style.overflow="visible",this.shiftPreview2=document.createElement("div"),this.shiftPreview2.style.position="absolute",this.shiftPreview2.style.overflow="visible";var s=this.shiftPreview1;for(a=this.container.firstChild;null!=a;)i=a.nextSibling,a!=n.parentNode?s.appendChild(a):s=this.shiftPreview2,a=i;this.container.insertBefore(this.shiftPreview1,n.parentNode),this.container.appendChild(this.shiftPreview2)}this.shiftPreview1.style.left=e+"px",this.shiftPreview1.style.top=t+"px",this.shiftPreview2.style.left=e+"px",this.shiftPreview2.style.top=t+"px"}else n.style.left=e+"px",n.style.top=t+"px";this.panDx=e,this.panDy=t,this.fireEvent(new mxEventObject(mxEvent.PAN))}},mxGraph.prototype.zoomIn=function(){this.zoom(this.zoomFactor)},mxGraph.prototype.zoomOut=function(){this.zoom(1/this.zoomFactor)},mxGraph.prototype.zoomActual=function(){1==this.view.scale?this.view.setTranslate(0,0):(this.view.translate.x=0,this.view.translate.y=0,this.view.setScale(1))},mxGraph.prototype.zoomTo=function(e,t){this.zoom(e/this.view.scale,t)},mxGraph.prototype.zoom=function(e,t){t=null!=t?t:this.centerZoom;var n=this.view.scale*e,a=this.view.getState(this.getSelectionCell());if(this.keepSelectionVisibleOnZoom&&null!=a)a=new mxRectangle(a.x*e,a.y*e,a.width*e,a.height*e),this.view.scale=n,this.scrollRectToVisible(a)||(this.view.revalidate(),this.view.setScale(n));else if(t&&!mxUtils.hasScrollbars(this.container)){a=this.container.offsetWidth;var i=this.container.offsetHeight;if(1<e){var s=(e-1)/(2*n);a=a*-s,i=i*-s}else a*=s=(1/e-1)/(2*this.view.scale),i*=s;this.view.scaleAndTranslate(n,this.view.translate.x+a,this.view.translate.y+i)}else this.view.setScale(n),mxUtils.hasScrollbars(this.container)&&(i=a=0,t&&(a=this.container.offsetWidth*(e-1)/2,i=this.container.offsetHeight*(e-1)/2),this.container.scrollLeft=Math.round(this.container.scrollLeft*e+a),this.container.scrollTop=Math.round(this.container.scrollTop*e+i))},mxGraph.prototype.zoomToRect=function(e){var t=this.container.clientWidth/e.width/(this.container.clientHeight/e.height);e.x=Math.max(0,e.x),e.y=Math.max(0,e.y);var n=Math.min(this.container.scrollWidth,e.x+e.width),a=Math.min(this.container.scrollHeight,e.y+e.height);e.width=n-e.x,e.height=a-e.y,t<1?(n=((t=e.height/t)-e.height)/2,e.height=t,t=Math.min(e.y,n),e.y-=t,a=Math.min(this.container.scrollHeight,e.y+e.height),e.height=a-e.y):(n=((t*=e.width)-e.width)/2,e.width=t,t=Math.min(e.x,n),e.x-=t,n=Math.min(this.container.scrollWidth,e.x+e.width),e.width=n-e.x),t=this.container.clientWidth/e.width,n=this.view.scale*t,mxUtils.hasScrollbars(this.container)?(this.view.setScale(n),this.container.scrollLeft=Math.round(e.x*t),this.container.scrollTop=Math.round(e.y*t)):this.view.scaleAndTranslate(n,this.view.translate.x-e.x/this.view.scale,this.view.translate.y-e.y/this.view.scale)},mxGraph.prototype.fit=function(e,t){if(null!=this.container){e=null!=e?e:0,t=null!=t&&t;var n=this.container.clientWidth,a=this.container.clientHeight,i=this.view.getGraphBounds();t&&null!=i.x&&null!=i.y&&(i.width+=i.x,i.height+=i.y,i.x=0,i.y=0);var s=this.view.scale,o=i.width/s,r=i.height/s;null!=this.backgroundImage&&(o=Math.max(o,this.backgroundImage.width-i.x/s),r=Math.max(r,this.backgroundImage.height-i.y/s));var l=t?e:2*e;n=Math.floor(100*Math.min(n/(o+l),a/(r+l)))/100;null!=this.minFitScale&&(n=Math.max(n,this.minFitScale)),null!=this.maxFitScale&&(n=Math.min(n,this.maxFitScale)),t?this.view.scale!=n&&this.view.setScale(n):mxUtils.hasScrollbars(this.container)?(this.view.setScale(n),null!=i.x&&(this.container.scrollLeft=Math.round(i.x/s)*n-e-Math.max(0,(this.container.clientWidth-o*n)/2)),null!=i.y&&(this.container.scrollTop=Math.round(i.y/s)*n-e-Math.max(0,(this.container.clientHeight-r*n)/2))):this.view.scaleAndTranslate(n,null!=i.x?Math.floor(this.view.translate.x-i.x/s+e+1):e,null!=i.y?Math.floor(this.view.translate.y-i.y/s+e+1):e)}return this.view.scale},mxGraph.prototype.scrollCellToVisible=function(e,t){var n=-this.view.translate.x,a=-this.view.translate.y,i=this.view.getState(e);null!=i&&(n=new mxRectangle(n+i.x,a+i.y,i.width,i.height),t&&null!=this.container&&(a=this.container.clientWidth,i=this.container.clientHeight,n.x=n.getCenterX()-a/2,n.width=a,n.y=n.getCenterY()-i/2,n.height=i),this.scrollRectToVisible(n)&&this.view.setTranslate(this.view.translate.x,this.view.translate.y))},mxGraph.prototype.scrollRectToVisible=function(e){var t=!1;if(null!=e){var n=this.container.offsetWidth,a=this.container.offsetHeight,i=Math.min(n,e.width),s=Math.min(a,e.height);if(mxUtils.hasScrollbars(this.container)){n=this.container,e.x+=this.view.translate.x,e.y+=this.view.translate.y;var o=n.scrollLeft-e.x;a=Math.max(o-n.scrollLeft,0);0<o?n.scrollLeft-=o+2:0<(o=e.x+i-n.scrollLeft-n.clientWidth)&&(n.scrollLeft+=o+2),i=n.scrollTop-e.y,o=Math.max(0,i-n.scrollTop),0<i?n.scrollTop-=i+2:0<(i=e.y+s-n.scrollTop-n.clientHeight)&&(n.scrollTop+=i+2),!this.useScrollbarsForPanning&&(0!=a||0!=o)&&this.view.setTranslate(a,o)}else{o=-this.view.translate.x;var r=-this.view.translate.y,l=this.view.scale;e.x+i>o+n&&(this.view.translate.x-=(e.x+i-n-o)/l,t=!0),e.y+s>r+a&&(this.view.translate.y-=(e.y+s-a-r)/l,t=!0),e.x<o&&(this.view.translate.x+=(o-e.x)/l,t=!0),e.y<r&&(this.view.translate.y+=(r-e.y)/l,t=!0),t&&(this.view.refresh(),null!=this.selectionCellsHandler&&this.selectionCellsHandler.refresh())}}return t},mxGraph.prototype.getCellGeometry=function(e){return this.model.getGeometry(e)},mxGraph.prototype.isCellVisible=function(e){return this.model.isVisible(e)},mxGraph.prototype.isCellCollapsed=function(e){return this.model.isCollapsed(e)},mxGraph.prototype.isCellConnectable=function(e){return this.model.isConnectable(e)},mxGraph.prototype.isOrthogonal=function(e){var t=e.style[mxConstants.STYLE_ORTHOGONAL];return null!=t?t:(e=this.view.getEdgeStyle(e))==mxEdgeStyle.SegmentConnector||e==mxEdgeStyle.ElbowConnector||e==mxEdgeStyle.SideToSide||e==mxEdgeStyle.TopToBottom||e==mxEdgeStyle.EntityRelation||e==mxEdgeStyle.OrthConnector},mxGraph.prototype.isLoop=function(e){var t=e.getVisibleTerminalState(!0);return e=e.getVisibleTerminalState(!1),null!=t&&t==e},mxGraph.prototype.isCloneEvent=function(e){return mxEvent.isControlDown(e)},mxGraph.prototype.isToggleEvent=function(e){return mxClient.IS_MAC?mxEvent.isMetaDown(e):mxEvent.isControlDown(e)},mxGraph.prototype.isGridEnabledEvent=function(e){return null!=e&&!mxEvent.isAltDown(e)},mxGraph.prototype.isConstrainedEvent=function(e){return mxEvent.isShiftDown(e)},mxGraph.prototype.isForceMarqueeEvent=function(e){return mxEvent.isAltDown(e)},mxGraph.prototype.validationAlert=function(e){mxUtils.alert(e)},mxGraph.prototype.isEdgeValid=function(e,t,n){return null==this.getEdgeValidationError(e,t,n)},mxGraph.prototype.getEdgeValidationError=function(e,t,n){if(null!=e&&!this.isAllowDanglingEdges()&&(null==t||null==n))return"";if(null!=e&&null==this.model.getTerminal(e,!0)&&null==this.model.getTerminal(e,!1))return null;if(!this.allowLoops&&t==n&&null!=t||!this.isValidConnection(t,n))return"";if(null==t||null==n)return this.allowDanglingEdges?null:"";var a="";this.multigraph||(1<(i=this.model.getEdgesBetween(t,n,!0)).length||1==i.length&&i[0]!=e)&&(a+=(mxResources.get(this.alreadyConnectedResource)||this.alreadyConnectedResource)+"\n");var i=this.model.getDirectedEdgeCount(t,!0,e),s=this.model.getDirectedEdgeCount(n,!1,e);if(null!=this.multiplicities)for(var o=0;o<this.multiplicities.length;o++){var r=this.multiplicities[o].check(this,e,t,n,i,s);null!=r&&(a+=r)}return null!=(r=this.validateEdge(e,t,n))&&(a+=r),0<a.length?a:null},mxGraph.prototype.validateEdge=function(e,t,n){return null},mxGraph.prototype.validateGraph=function(e,t){e=null!=e?e:this.model.getRoot(),t=null!=t?t:{};for(var n=!0,a=this.model.getChildCount(e),i=0;i<a;i++){var s=this.model.getChildAt(e,i),o=t;this.isValidRoot(s)&&(o={}),null!=(o=this.validateGraph(s,o))?this.setCellWarning(s,o.replace(/\n/g,"<br>")):this.setCellWarning(s,null),n=n&&null==o}return a="",this.isCellCollapsed(e)&&!n&&(a+=(mxResources.get(this.containsValidationErrorsResource)||this.containsValidationErrorsResource)+"\n"),a=this.model.isEdge(e)?a+(this.getEdgeValidationError(e,this.model.getTerminal(e,!0),this.model.getTerminal(e,!1))||""):a+(this.getCellValidationError(e)||""),null!=(i=this.validateCell(e,t))&&(a+=i),null==this.model.getParent(e)&&this.view.validate(),0<a.length||!n?a:null},mxGraph.prototype.getCellValidationError=function(e){var t=this.model.getDirectedEdgeCount(e,!0),n=this.model.getDirectedEdgeCount(e,!1);e=this.model.getValue(e);var a="";if(null!=this.multiplicities)for(var i=0;i<this.multiplicities.length;i++){var s=this.multiplicities[i];s.source&&mxUtils.isNode(e,s.type,s.attr,s.value)&&(0==s.max&&0<t||1==s.min&&0==t||1==s.max&&1<t)?a+=s.countError+"\n":!s.source&&mxUtils.isNode(e,s.type,s.attr,s.value)&&(0==s.max&&0<n||1==s.min&&0==n||1==s.max&&1<n)&&(a+=s.countError+"\n")}return 0<a.length?a:null},mxGraph.prototype.validateCell=function(e,t){return null},mxGraph.prototype.getBackgroundImage=function(){return this.backgroundImage},mxGraph.prototype.setBackgroundImage=function(e){this.backgroundImage=e},mxGraph.prototype.getFoldingImage=function(e){if(null!=e&&this.foldingEnabled&&!this.getModel().isEdge(e.cell)){var t=this.isCellCollapsed(e.cell);if(this.isCellFoldable(e.cell,!t))return t?this.collapsedImage:this.expandedImage}return null},mxGraph.prototype.convertValueToString=function(e){if(null!=(e=this.model.getValue(e))){if(mxUtils.isNode(e))return e.nodeName;if("function"==typeof e.toString)return e.toString()}return""},mxGraph.prototype.getLabel=function(e){var t="";if(this.labelsVisible&&null!=e){var n=null!=(n=this.view.getState(e))?n.style:this.getCellStyle(e);mxUtils.getValue(n,mxConstants.STYLE_NOLABEL,!1)||(t=this.convertValueToString(e))}return t},mxGraph.prototype.isHtmlLabel=function(e){return this.isHtmlLabels()},mxGraph.prototype.isHtmlLabels=function(){return this.htmlLabels},mxGraph.prototype.setHtmlLabels=function(e){this.htmlLabels=e},mxGraph.prototype.isWrapping=function(e){var t=this.view.getState(e);return null!=(e=null!=t?t.style:this.getCellStyle(e))&&"wrap"==e[mxConstants.STYLE_WHITE_SPACE]},mxGraph.prototype.isLabelClipped=function(e){var t=this.view.getState(e);return null!=(e=null!=t?t.style:this.getCellStyle(e))&&"hidden"==e[mxConstants.STYLE_OVERFLOW]},mxGraph.prototype.getTooltip=function(e,n,t,a){var i=null;return null!=e&&(null==e.control||n!=e.control.node&&n.parentNode!=e.control.node||(i=this.collapseExpandResource,i=mxResources.get(i)||i),null==i&&null!=e.overlays&&e.overlays.visit(function(e,t){null!=i||n!=t.node&&n.parentNode!=t.node||(i=t.overlay.toString())}),null==i&&(null!=(t=this.selectionCellsHandler.getHandler(e.cell))&&"function"==typeof t.getTooltipForNode&&(i=t.getTooltipForNode(n))),null==i&&(i=this.getTooltipForCell(e.cell))),i},mxGraph.prototype.getTooltipForCell=function(e){return null!=e&&null!=e.getTooltip?e.getTooltip():this.convertValueToString(e)},mxGraph.prototype.getCursorForCell=function(e){return null},mxGraph.prototype.getStartSize=function(e){var t=new mxRectangle,n=this.view.getState(e);return null!=(e=null!=n?n.style:this.getCellStyle(e))&&(n=parseInt(mxUtils.getValue(e,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)),mxUtils.getValue(e,mxConstants.STYLE_HORIZONTAL,!0)?t.height=n:t.width=n),t},mxGraph.prototype.getImage=function(e){return null!=e&&null!=e.style?e.style[mxConstants.STYLE_IMAGE]:null},mxGraph.prototype.getVerticalAlign=function(e){return null!=e&&null!=e.style?e.style[mxConstants.STYLE_VERTICAL_ALIGN]||mxConstants.ALIGN_MIDDLE:null},mxGraph.prototype.getIndicatorColor=function(e){return null!=e&&null!=e.style?e.style[mxConstants.STYLE_INDICATOR_COLOR]:null},mxGraph.prototype.getIndicatorGradientColor=function(e){return null!=e&&null!=e.style?e.style[mxConstants.STYLE_INDICATOR_GRADIENTCOLOR]:null},mxGraph.prototype.getIndicatorShape=function(e){return null!=e&&null!=e.style?e.style[mxConstants.STYLE_INDICATOR_SHAPE]:null},mxGraph.prototype.getIndicatorImage=function(e){return null!=e&&null!=e.style?e.style[mxConstants.STYLE_INDICATOR_IMAGE]:null},mxGraph.prototype.getBorder=function(){return this.border},mxGraph.prototype.setBorder=function(e){this.border=e},mxGraph.prototype.isSwimlane=function(e){var t;if(null!=e&&this.model.getParent(e)!=this.model.getRoot()&&(null!=(t=null!=(t=this.view.getState(e))?t.style:this.getCellStyle(e))&&!this.model.isEdge(e)))return t[mxConstants.STYLE_SHAPE]==mxConstants.SHAPE_SWIMLANE;return!1},mxGraph.prototype.isResizeContainer=function(){return this.resizeContainer},mxGraph.prototype.setResizeContainer=function(e){this.resizeContainer=e},mxGraph.prototype.isEnabled=function(){return this.enabled},mxGraph.prototype.setEnabled=function(e){this.enabled=e},mxGraph.prototype.isEscapeEnabled=function(){return this.escapeEnabled},mxGraph.prototype.setEscapeEnabled=function(e){this.escapeEnabled=e},mxGraph.prototype.isInvokesStopCellEditing=function(){return this.invokesStopCellEditing},mxGraph.prototype.setInvokesStopCellEditing=function(e){this.invokesStopCellEditing=e},mxGraph.prototype.isEnterStopsCellEditing=function(){return this.enterStopsCellEditing},mxGraph.prototype.setEnterStopsCellEditing=function(e){this.enterStopsCellEditing=e},mxGraph.prototype.isCellLocked=function(e){var t=this.model.getGeometry(e);return this.isCellsLocked()||null!=t&&this.model.isVertex(e)&&t.relative},mxGraph.prototype.isCellsLocked=function(){return this.cellsLocked},mxGraph.prototype.setCellsLocked=function(e){this.cellsLocked=e},mxGraph.prototype.getCloneableCells=function(e){return this.model.filterCells(e,mxUtils.bind(this,function(e){return this.isCellCloneable(e)}))},mxGraph.prototype.isCellCloneable=function(e){var t=this.view.getState(e);return e=null!=t?t.style:this.getCellStyle(e),this.isCellsCloneable()&&0!=e[mxConstants.STYLE_CLONEABLE]},mxGraph.prototype.isCellsCloneable=function(){return this.cellsCloneable},mxGraph.prototype.setCellsCloneable=function(e){this.cellsCloneable=e},mxGraph.prototype.getExportableCells=function(e){return this.model.filterCells(e,mxUtils.bind(this,function(e){return this.canExportCell(e)}))},mxGraph.prototype.canExportCell=function(e){return this.exportEnabled},mxGraph.prototype.getImportableCells=function(e){return this.model.filterCells(e,mxUtils.bind(this,function(e){return this.canImportCell(e)}))},mxGraph.prototype.canImportCell=function(e){return this.importEnabled},mxGraph.prototype.isCellSelectable=function(e){return this.isCellsSelectable()},mxGraph.prototype.isCellsSelectable=function(){return this.cellsSelectable},mxGraph.prototype.setCellsSelectable=function(e){this.cellsSelectable=e},mxGraph.prototype.getDeletableCells=function(e){return this.model.filterCells(e,mxUtils.bind(this,function(e){return this.isCellDeletable(e)}))},mxGraph.prototype.isCellDeletable=function(e){var t=this.view.getState(e);return e=null!=t?t.style:this.getCellStyle(e),this.isCellsDeletable()&&0!=e[mxConstants.STYLE_DELETABLE]},mxGraph.prototype.isCellsDeletable=function(){return this.cellsDeletable},mxGraph.prototype.setCellsDeletable=function(e){this.cellsDeletable=e},mxGraph.prototype.isLabelMovable=function(e){return!this.isCellLocked(e)&&(this.model.isEdge(e)&&this.edgeLabelsMovable||this.model.isVertex(e)&&this.vertexLabelsMovable)},mxGraph.prototype.getMovableCells=function(e){return this.model.filterCells(e,mxUtils.bind(this,function(e){return this.isCellMovable(e)}))},mxGraph.prototype.isCellMovable=function(e){var t=null!=(t=this.view.getState(e))?t.style:this.getCellStyle(e);return this.isCellsMovable()&&!this.isCellLocked(e)&&0!=t[mxConstants.STYLE_MOVABLE]},mxGraph.prototype.isCellsMovable=function(){return this.cellsMovable},mxGraph.prototype.setCellsMovable=function(e){this.cellsMovable=e},mxGraph.prototype.isGridEnabled=function(){return this.gridEnabled},mxGraph.prototype.setGridEnabled=function(e){this.gridEnabled=e},mxGraph.prototype.isPortsEnabled=function(){return this.portsEnabled},mxGraph.prototype.setPortsEnabled=function(e){this.portsEnabled=e},mxGraph.prototype.getGridSize=function(){return this.gridSize},mxGraph.prototype.setGridSize=function(e){this.gridSize=e},mxGraph.prototype.getTolerance=function(){return this.tolerance},mxGraph.prototype.setTolerance=function(e){this.tolerance=e},mxGraph.prototype.isVertexLabelsMovable=function(){return this.vertexLabelsMovable},mxGraph.prototype.setVertexLabelsMovable=function(e){this.vertexLabelsMovable=e},mxGraph.prototype.isEdgeLabelsMovable=function(){return this.edgeLabelsMovable},mxGraph.prototype.setEdgeLabelsMovable=function(e){this.edgeLabelsMovable=e},mxGraph.prototype.isSwimlaneNesting=function(){return this.swimlaneNesting},mxGraph.prototype.setSwimlaneNesting=function(e){this.swimlaneNesting=e},mxGraph.prototype.isSwimlaneSelectionEnabled=function(){return this.swimlaneSelectionEnabled},mxGraph.prototype.setSwimlaneSelectionEnabled=function(e){this.swimlaneSelectionEnabled=e},mxGraph.prototype.isMultigraph=function(){return this.multigraph},mxGraph.prototype.setMultigraph=function(e){this.multigraph=e},mxGraph.prototype.isAllowLoops=function(){return this.allowLoops},mxGraph.prototype.setAllowDanglingEdges=function(e){this.allowDanglingEdges=e},mxGraph.prototype.isAllowDanglingEdges=function(){return this.allowDanglingEdges},mxGraph.prototype.setConnectableEdges=function(e){this.connectableEdges=e},mxGraph.prototype.isConnectableEdges=function(){return this.connectableEdges},mxGraph.prototype.setCloneInvalidEdges=function(e){this.cloneInvalidEdges=e},mxGraph.prototype.isCloneInvalidEdges=function(){return this.cloneInvalidEdges},mxGraph.prototype.setAllowLoops=function(e){this.allowLoops=e},mxGraph.prototype.isDisconnectOnMove=function(){return this.disconnectOnMove},mxGraph.prototype.setDisconnectOnMove=function(e){this.disconnectOnMove=e},mxGraph.prototype.isDropEnabled=function(){return this.dropEnabled},mxGraph.prototype.setDropEnabled=function(e){this.dropEnabled=e},mxGraph.prototype.isSplitEnabled=function(){return this.splitEnabled},mxGraph.prototype.setSplitEnabled=function(e){this.splitEnabled=e},mxGraph.prototype.isCellResizable=function(e){var t=null!=(t=this.view.getState(e))?t.style:this.getCellStyle(e);return this.isCellsResizable()&&!this.isCellLocked(e)&&0!=t[mxConstants.STYLE_RESIZABLE]},mxGraph.prototype.isCellsResizable=function(){return this.cellsResizable},mxGraph.prototype.setCellsResizable=function(e){this.cellsResizable=e},mxGraph.prototype.isTerminalPointMovable=function(e,t){return!0},mxGraph.prototype.isCellBendable=function(e){var t=null!=(t=this.view.getState(e))?t.style:this.getCellStyle(e);return this.isCellsBendable()&&!this.isCellLocked(e)&&0!=t[mxConstants.STYLE_BENDABLE]},mxGraph.prototype.isCellsBendable=function(){return this.cellsBendable},mxGraph.prototype.setCellsBendable=function(e){this.cellsBendable=e},mxGraph.prototype.isCellEditable=function(e){var t=null!=(t=this.view.getState(e))?t.style:this.getCellStyle(e);return this.isCellsEditable()&&!this.isCellLocked(e)&&0!=t[mxConstants.STYLE_EDITABLE]},mxGraph.prototype.isCellsEditable=function(){return this.cellsEditable},mxGraph.prototype.setCellsEditable=function(e){this.cellsEditable=e},mxGraph.prototype.isCellDisconnectable=function(e,t,n){return this.isCellsDisconnectable()&&!this.isCellLocked(e)},mxGraph.prototype.isCellsDisconnectable=function(){return this.cellsDisconnectable},mxGraph.prototype.setCellsDisconnectable=function(e){this.cellsDisconnectable=e},mxGraph.prototype.isValidSource=function(e){return null==e&&this.allowDanglingEdges||null!=e&&(!this.model.isEdge(e)||this.connectableEdges)&&this.isCellConnectable(e)},mxGraph.prototype.isValidTarget=function(e){return this.isValidSource(e)},mxGraph.prototype.isValidConnection=function(e,t){return this.isValidSource(e)&&this.isValidTarget(t)},mxGraph.prototype.setConnectable=function(e){this.connectionHandler.setEnabled(e)},mxGraph.prototype.isConnectable=function(e){return this.connectionHandler.isEnabled()},mxGraph.prototype.setTooltips=function(e){this.tooltipHandler.setEnabled(e)},mxGraph.prototype.setPanning=function(e){this.panningHandler.panningEnabled=e},mxGraph.prototype.isEditing=function(e){if(null==this.cellEditor)return!1;var t=this.cellEditor.getEditingCell();return null==e?null!=t:e==t},mxGraph.prototype.isAutoSizeCell=function(e){var t=this.view.getState(e);return e=null!=t?t.style:this.getCellStyle(e),this.isAutoSizeCells()||1==e[mxConstants.STYLE_AUTOSIZE]},mxGraph.prototype.isAutoSizeCells=function(){return this.autoSizeCells},mxGraph.prototype.setAutoSizeCells=function(e){this.autoSizeCells=e},mxGraph.prototype.isExtendParent=function(e){return!this.getModel().isEdge(e)&&this.isExtendParents()},mxGraph.prototype.isExtendParents=function(){return this.extendParents},mxGraph.prototype.setExtendParents=function(e){this.extendParents=e},mxGraph.prototype.isExtendParentsOnAdd=function(){return this.extendParentsOnAdd},mxGraph.prototype.setExtendParentsOnAdd=function(e){this.extendParentsOnAdd=e},mxGraph.prototype.isConstrainChild=function(e){return this.isConstrainChildren()&&!this.getModel().isEdge(this.getModel().getParent(e))},mxGraph.prototype.isConstrainChildren=function(){return this.constrainChildren},mxGraph.prototype.setConstrainChildren=function(e){this.constrainChildren=e},mxGraph.prototype.isAllowNegativeCoordinates=function(){return this.allowNegativeCoordinates},mxGraph.prototype.setAllowNegativeCoordinates=function(e){this.allowNegativeCoordinates=e},mxGraph.prototype.getOverlap=function(e){return this.isAllowOverlapParent(e)?this.defaultOverlap:0},mxGraph.prototype.isAllowOverlapParent=function(e){return!1},mxGraph.prototype.getFoldableCells=function(e,t){return this.model.filterCells(e,mxUtils.bind(this,function(e){return this.isCellFoldable(e,t)}))},mxGraph.prototype.isCellFoldable=function(e,t){var n=null!=(n=this.view.getState(e))?n.style:this.getCellStyle(e);return 0<this.model.getChildCount(e)&&0!=n[mxConstants.STYLE_FOLDABLE]},mxGraph.prototype.isValidDropTarget=function(e,t,n){return null!=e&&(this.isSplitEnabled()&&this.isSplitTarget(e,t,n)||!this.model.isEdge(e)&&(this.isSwimlane(e)||0<this.model.getChildCount(e)&&!this.isCellCollapsed(e)))},mxGraph.prototype.isSplitTarget=function(e,t,n){return!(!this.model.isEdge(e)||null==t||1!=t.length||!this.isCellConnectable(t[0])||null!=this.getEdgeValidationError(e,this.model.getTerminal(e,!0),t[0]))&&(n=this.model.getTerminal(e,!0),e=this.model.getTerminal(e,!1),!this.model.isAncestor(t[0],n)&&!this.model.isAncestor(t[0],e))},mxGraph.prototype.getDropTarget=function(e,t,n){if(!this.isSwimlaneNesting())for(var a=0;a<e.length;a++)if(this.isSwimlane(e[a]))return null;if((a=mxUtils.convertPoint(this.container,mxEvent.getClientX(t),mxEvent.getClientY(t))).x-=this.panDx,a.y-=this.panDy,a=this.getSwimlaneAt(a.x,a.y),null==n)n=a;else if(null!=a){for(var i=this.model.getParent(a);null!=i&&this.isSwimlane(i)&&i!=n;)i=this.model.getParent(i);i==n&&(n=a)}for(;null!=n&&!this.isValidDropTarget(n,e,t)&&!this.model.isLayer(n);)n=this.model.getParent(n);return!this.model.isLayer(n)&&mxUtils.indexOf(e,n)<0?n:null},mxGraph.prototype.getDefaultParent=function(){var e=this.defaultParent;return null==e&&(null==(e=this.getCurrentRoot())&&(e=this.model.getRoot(),e=this.model.getChildAt(e,0))),e},mxGraph.prototype.setDefaultParent=function(e){this.defaultParent=e},mxGraph.prototype.getSwimlane=function(e){for(;null!=e&&!this.isSwimlane(e);)e=this.model.getParent(e);return e},mxGraph.prototype.getSwimlaneAt=function(e,t,n){if(null!=(n=n||this.getDefaultParent()))for(var a=this.model.getChildCount(n),i=0;i<a;i++){var s=this.model.getChildAt(n,i),o=this.getSwimlaneAt(e,t,s);if(null!=o)return o;if(this.isSwimlane(s)&&(o=this.view.getState(s),this.intersects(o,e,t)))return s}return null},mxGraph.prototype.getCellAt=function(e,t,n,a,i){if(a=null==a||a,i=null==i||i,null!=(n=null!=n?n:this.getDefaultParent()))for(var s=this.model.getChildCount(n)-1;0<=s;s--){var o=this.model.getChildAt(n,s),r=this.getCellAt(e,t,o,a,i);if(null!=r)return r;if(this.isCellVisible(o)&&(i&&this.model.isEdge(o)||a&&this.model.isVertex(o))&&(r=this.view.getState(o),this.intersects(r,e,t)))return o}return null},mxGraph.prototype.intersects=function(e,t,n){if(null!=e){var a=e.absolutePoints;if(null!=a){e=this.tolerance*this.tolerance;for(var i=a[0],s=1;s<a.length;s++){var o=a[s];if(mxUtils.ptSegDistSq(i.x,i.y,o.x,o.y,t,n)<=e)return!0;i=o}}else if(0!=(i=mxUtils.toRadians(mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION)||0))&&(a=Math.cos(-i),i=Math.sin(-i),s=new mxPoint(e.getCenterX(),e.getCenterY()),t=(i=mxUtils.getRotatedPoint(new mxPoint(t,n),a,i,s)).x,n=i.y),mxUtils.contains(e,t,n))return!0}return!1},mxGraph.prototype.hitsSwimlaneContent=function(e,t,n){var a=this.getView().getState(e);if(e=this.getStartSize(e),null!=a){var i=this.getView().getScale();if(t-=a.x,n-=a.y,0<e.width&&0<t&&t>e.width*i||0<e.height&&0<n&&n>e.height*i)return!0}return!1},mxGraph.prototype.getChildVertices=function(e){return this.getChildCells(e,!0,!1)},mxGraph.prototype.getChildEdges=function(e){return this.getChildCells(e,!1,!0)},mxGraph.prototype.getChildCells=function(e,t,n){for(e=null!=e?e:this.getDefaultParent(),e=this.model.getChildCells(e,null!=t&&t,null!=n&&n),t=[],n=0;n<e.length;n++)this.isCellVisible(e[n])&&t.push(e[n]);return t},mxGraph.prototype.getConnections=function(e,t){return this.getEdges(e,t,!0,!0,!1)},mxGraph.prototype.getIncomingEdges=function(e,t){return this.getEdges(e,t,!0,!1,!1)},mxGraph.prototype.getOutgoingEdges=function(e,t){return this.getEdges(e,t,!1,!0,!1)},mxGraph.prototype.getEdges=function(e,t,n,a,i,s){n=null==n||n,a=null==a||a,i=null==i||i,s=null!=s&&s;for(var o=[],r=this.isCellCollapsed(e),l=this.model.getChildCount(e),d=0;d<l;d++){var c=this.model.getChildAt(e,d);!r&&this.isCellVisible(c)||(o=o.concat(this.model.getEdges(c,n,a)))}for(o=o.concat(this.model.getEdges(e,n,a)),r=[],d=0;d<o.length;d++)l=null!=(c=this.view.getState(o[d]))?c.getVisibleTerminal(!0):this.view.getVisibleTerminal(o[d],!0),c=null!=c?c.getVisibleTerminal(!1):this.view.getVisibleTerminal(o[d],!1),(i&&l==c||l!=c&&(n&&c==e&&(null==t||this.isValidAncestor(l,t,s))||a&&l==e&&(null==t||this.isValidAncestor(c,t,s))))&&r.push(o[d]);return r},mxGraph.prototype.isValidAncestor=function(e,t,n){return n?this.model.isAncestor(t,e):this.model.getParent(e)==t},mxGraph.prototype.getOpposites=function(e,t,n,a){n=null==n||n,a=null==a||a;var i=[],s={};if(null!=e)for(var o=0;o<e.length;o++){var r=null!=(l=this.view.getState(e[o]))?l.getVisibleTerminal(!0):this.view.getVisibleTerminal(e[o],!0),l=null!=l?l.getVisibleTerminal(!1):this.view.getVisibleTerminal(e[o],!1);if(r==t&&null!=l&&l!=t&&a){var d=mxCellPath.create(l);null==s[d]&&(s[d]=l,i.push(l))}else l==t&&null!=r&&r!=t&&n&&(null==s[d=mxCellPath.create(r)]&&(s[d]=r,i.push(r)))}return i},mxGraph.prototype.getEdgesBetween=function(e,t,n){n=null!=n&&n;for(var a=this.getEdges(e),i=[],s=0;s<a.length;s++){var o=null!=(r=this.view.getState(a[s]))?r.getVisibleTerminal(!0):this.view.getVisibleTerminal(a[s],!0),r=null!=r?r.getVisibleTerminal(!1):this.view.getVisibleTerminal(a[s],!1);(o==e&&r==t||!n&&o==t&&r==e)&&i.push(a[s])}return i},mxGraph.prototype.getPointForEvent=function(e,t){var n=mxUtils.convertPoint(this.container,mxEvent.getClientX(e),mxEvent.getClientY(e)),a=this.view.scale,i=this.view.translate,s=0!=t?this.gridSize/2:0;return n.x=this.snap(n.x/a-i.x-s),n.y=this.snap(n.y/a-i.y-s),n},mxGraph.prototype.getCells=function(e,t,n,a,i,s){if(s=null!=s?s:[],0<n||0<a){var o=e+n,r=t+a;if(null!=(i=i||this.getDefaultParent()))for(var l=this.model.getChildCount(i),d=0;d<l;d++){var c=this.model.getChildAt(i,d),m=this.view.getState(c);if(this.isCellVisible(c)&&null!=m){var u=m;0!=(m=mxUtils.getValue(m.style,mxConstants.STYLE_ROTATION)||0)&&(u=mxUtils.getBoundingBox(u,m)),u.x>=e&&u.y+u.height<=r&&u.y>=t&&u.x+u.width<=o?s.push(c):this.getCells(e,t,n,a,c,s)}}}return s},mxGraph.prototype.getCellsBeyond=function(e,t,n,a,i){var s=[];if((a||i)&&(null==n&&(n=this.getDefaultParent()),null!=n))for(var o=this.model.getChildCount(n),r=0;r<o;r++){var l=this.model.getChildAt(n,r),d=this.view.getState(l);this.isCellVisible(l)&&null!=d&&(!a||d.x>=e)&&(!i||d.y>=t)&&s.push(l)}return s},mxGraph.prototype.findTreeRoots=function(e,t,n){t=null!=t&&t,n=null!=n&&n;var a=[];if(null!=e){for(var i=this.getModel(),s=i.getChildCount(e),o=null,r=0,l=0;l<s;l++){var d=i.getChildAt(e,l);if(this.model.isVertex(d)&&this.isCellVisible(d)){for(var c=this.getConnections(d,t?e:null),m=0,u=0,p=0;p<c.length;p++)this.view.getVisibleTerminal(c[p],!0)==d?m++:u++;(n&&0==m&&0<u||!n&&0==u&&0<m)&&a.push(d),r<(c=n?u-m:m-u)&&(r=c,o=d)}}0==a.length&&null!=o&&a.push(o)}return a},mxGraph.prototype.traverse=function(e,t,n,a,i){if(null!=n&&null!=e){t=null==t||t,i=i||[];var s=mxCellPath.create(e);if(null==i[s]&&(null==(a=n(i[s]=e,a))||a)&&0<(a=this.model.getEdgeCount(e)))for(s=0;s<a;s++){var o=this.model.getEdgeAt(e,s),r=this.model.getTerminal(o,!0)==e;t&&!r||(r=this.model.getTerminal(o,!r),this.traverse(r,t,n,o,i))}}},mxGraph.prototype.isCellSelected=function(e){return this.getSelectionModel().isSelected(e)},mxGraph.prototype.isSelectionEmpty=function(){return this.getSelectionModel().isEmpty()},mxGraph.prototype.clearSelection=function(){return this.getSelectionModel().clear()},mxGraph.prototype.getSelectionCount=function(){return this.getSelectionModel().cells.length},mxGraph.prototype.getSelectionCell=function(){return this.getSelectionModel().cells[0]},mxGraph.prototype.getSelectionCells=function(){return this.getSelectionModel().cells.slice()},mxGraph.prototype.setSelectionCell=function(e){this.getSelectionModel().setCell(e)},mxGraph.prototype.setSelectionCells=function(e){this.getSelectionModel().setCells(e)},mxGraph.prototype.addSelectionCell=function(e){this.getSelectionModel().addCell(e)},mxGraph.prototype.addSelectionCells=function(e){this.getSelectionModel().addCells(e)},mxGraph.prototype.removeSelectionCell=function(e){this.getSelectionModel().removeCell(e)},mxGraph.prototype.removeSelectionCells=function(e){this.getSelectionModel().removeCells(e)},mxGraph.prototype.selectRegion=function(e,t){var n=this.getCells(e.x,e.y,e.width,e.height);return this.selectCellsForEvent(n,t),n},mxGraph.prototype.selectNextCell=function(){this.selectCell(!0)},mxGraph.prototype.selectPreviousCell=function(){this.selectCell()},mxGraph.prototype.selectParentCell=function(){this.selectCell(!1,!0)},mxGraph.prototype.selectChildCell=function(){this.selectCell(!1,!1,!0)},mxGraph.prototype.selectCell=function(e,t,n){var a=0<(i=this.selectionModel).cells.length?i.cells[0]:null;1<i.cells.length&&i.clear();var i=null!=a?this.model.getParent(a):this.getDefaultParent(),s=this.model.getChildCount(i);null==a&&0<s?(e=this.model.getChildAt(i,0),this.setSelectionCell(e)):null!=a&&!t||null==this.view.getState(i)||null==this.model.getGeometry(i)?null!=a&&n?0<this.model.getChildCount(a)&&(e=this.model.getChildAt(a,0),this.setSelectionCell(e)):0<s&&(t=i.getIndex(a),e=e?(t++,this.model.getChildAt(i,t%s)):(t--,this.model.getChildAt(i,t<0?s-1:t)),this.setSelectionCell(e)):this.getCurrentRoot()!=i&&this.setSelectionCell(i)},mxGraph.prototype.selectAll=function(e){e=e||this.getDefaultParent(),null!=(e=this.model.getChildren(e))&&this.setSelectionCells(e)},mxGraph.prototype.selectVertices=function(e){this.selectCells(!0,!1,e)},mxGraph.prototype.selectEdges=function(e){this.selectCells(!1,!0,e)},mxGraph.prototype.selectCells=function(t,n,e){e=e||this.getDefaultParent();var a=mxUtils.bind(this,function(e){return null!=this.view.getState(e)&&0==this.model.getChildCount(e)&&(this.model.isVertex(e)&&t||this.model.isEdge(e)&&n)});e=this.model.filterDescendants(a,e),this.setSelectionCells(e)},mxGraph.prototype.selectCellForEvent=function(e,t){var n=this.isCellSelected(e);this.isToggleEvent(t)?n?this.removeSelectionCell(e):this.addSelectionCell(e):(!n||1!=this.getSelectionCount())&&this.setSelectionCell(e)},mxGraph.prototype.selectCellsForEvent=function(e,t){this.isToggleEvent(t)?this.addSelectionCells(e):this.setSelectionCells(e)},mxGraph.prototype.createHandler=function(e){var t=null;return null!=e&&(t=this.model.isEdge(e.cell)?(t=this.view.getEdgeStyle(e),this.isLoop(e)||t==mxEdgeStyle.ElbowConnector||t==mxEdgeStyle.SideToSide||t==mxEdgeStyle.TopToBottom?new mxElbowEdgeHandler(e):t==mxEdgeStyle.SegmentConnector||t==mxEdgeStyle.OrthConnector?new mxEdgeSegmentHandler(e):new mxEdgeHandler(e)):new mxVertexHandler(e)),t},mxGraph.prototype.addMouseListener=function(e){null==this.mouseListeners&&(this.mouseListeners=[]),this.mouseListeners.push(e)},mxGraph.prototype.removeMouseListener=function(e){if(null!=this.mouseListeners)for(var t=0;t<this.mouseListeners.length;t++)if(this.mouseListeners[t]==e){this.mouseListeners.splice(t,1);break}},mxGraph.prototype.updateMouseEvent=function(e){if(null==e.graphX||null==e.graphY){var t=mxUtils.convertPoint(this.container,e.getX(),e.getY());e.graphX=t.x-this.panDx,e.graphY=t.y-this.panDy}},mxGraph.prototype.fireMouseEvent=function(e,t,n){if(null==n&&(n=this),this.updateMouseEvent(t),e==mxEvent.MOUSE_DOWN&&(this.isMouseDown=!0),mxClient.IS_TOUCH&&this.doubleTapEnabled&&e==mxEvent.MOUSE_DOWN){var a=(new Date).getTime();a-this.lastTouchTime<this.doubleTapTimeout&&Math.abs(this.lastTouchX-t.getX())<this.doubleTapTolerance&&Math.abs(this.lastTouchY-t.getY())<this.doubleTapTolerance?(this.lastTouchTime=0,this.dblClick(t.getEvent(),t.getCell()),t.getEvent().cancelBubble=!0):(this.lastTouchX=t.getX(),this.lastTouchY=t.getY(),this.lastTouchTime=a)}if(a=2!=t.getEvent().detail,mxClient.IS_IE&&"CSS1Compat"==document.compatMode&&((null!=this.lastMouseX&&Math.abs(this.lastMouseX-t.getX())>this.doubleTapTolerance||null!=this.lastMouseY&&Math.abs(this.lastMouseY-t.getY())>this.doubleTapTolerance)&&(a=!0),e==mxEvent.MOUSE_UP&&(this.lastMouseX=t.getX(),this.lastMouseY=t.getY())),(e!=mxEvent.MOUSE_UP||this.isMouseDown)&&a){if(e==mxEvent.MOUSE_UP&&(this.isMouseDown=!1),!this.isEditing()&&(mxClient.IS_OP||mxClient.IS_SF||mxClient.IS_GC||mxClient.IS_IE&&mxClient.IS_SVG||t.getEvent().target!=this.container)){if(e==mxEvent.MOUSE_MOVE&&this.isMouseDown&&this.autoScroll&&this.scrollPointToVisible(t.getGraphX(),t.getGraphY(),this.autoExtend),null!=this.mouseListeners)for(n=[n,t],t.getEvent().returnValue=!0,a=0;a<this.mouseListeners.length;a++){var i=this.mouseListeners[a];e==mxEvent.MOUSE_DOWN?i.mouseDown.apply(i,n):e==mxEvent.MOUSE_MOVE?i.mouseMove.apply(i,n):e==mxEvent.MOUSE_UP&&i.mouseUp.apply(i,n)}e==mxEvent.MOUSE_UP&&this.click(t)}}else e==mxEvent.MOUSE_UP&&(this.isMouseDown=!1)},mxGraph.prototype.destroy=function(){this.destroyed||(this.destroyed=!0,null!=this.tooltipHandler&&this.tooltipHandler.destroy(),null!=this.selectionCellsHandler&&this.selectionCellsHandler.destroy(),null!=this.panningHandler&&this.panningHandler.destroy(),null!=this.connectionHandler&&this.connectionHandler.destroy(),null!=this.graphHandler&&this.graphHandler.destroy(),null!=this.cellEditor&&this.cellEditor.destroy(),null!=this.view&&this.view.destroy(),null!=this.model&&null!=this.graphModelChangeListener&&(this.model.removeListener(this.graphModelChangeListener),this.graphModelChangeListener=null),this.container=null)},mxCellOverlay.prototype=new mxEventSource,mxCellOverlay.prototype.constructor=mxCellOverlay,mxCellOverlay.prototype.image=null,mxCellOverlay.prototype.tooltip=null,mxCellOverlay.prototype.align=mxConstants.ALIGN_RIGHT,mxCellOverlay.prototype.verticalAlign=mxConstants.ALIGN_BOTTOM,mxCellOverlay.prototype.offset=null,mxCellOverlay.prototype.cursor=null,mxCellOverlay.prototype.defaultOverlap=.5,mxCellOverlay.prototype.getBounds=function(e){var t=e.view.graph.getModel().isEdge(e.cell),n=e.view.scale,a=null,i=this.image.width,s=this.image.height;return t?a=1==(t=e.absolutePoints).length%2?t[Math.floor(t.length/2)]:(e=t[(a=t.length/2)-1],t=t[a],new mxPoint(e.x+(t.x-e.x)/2,e.y+(t.y-e.y)/2)):((a=new mxPoint).x=this.align==mxConstants.ALIGN_LEFT?e.x:this.align==mxConstants.ALIGN_CENTER?e.x+e.width/2:e.x+e.width,a.y=this.verticalAlign==mxConstants.ALIGN_TOP?e.y:this.verticalAlign==mxConstants.ALIGN_MIDDLE?e.y+e.height/2:e.y+e.height),new mxRectangle(Math.round(a.x-(i*this.defaultOverlap-this.offset.x)*n),Math.round(a.y-(s*this.defaultOverlap-this.offset.y)*n),i*n,s*n)},mxCellOverlay.prototype.toString=function(){return this.tooltip},mxOutline.prototype.source=null,mxOutline.prototype.outline=null,mxOutline.prototype.graphRenderHint=mxConstants.RENDERING_HINT_FASTER,mxOutline.prototype.enabled=!0,mxOutline.prototype.showViewport=!0,mxOutline.prototype.border=10,mxOutline.prototype.sizerSize=8,mxOutline.prototype.updateOnPan=!1,mxOutline.prototype.sizerImage=null,mxOutline.prototype.suspended=!1,mxOutline.prototype.init=function(e){this.outline=new mxGraph(e,this.source.getModel(),this.graphRenderHint,this.source.getStylesheet()),this.outline.foldingEnabled=!1,this.outline.autoScroll=!1;var t=this.outline.graphModelChanged;this.outline.graphModelChanged=mxUtils.bind(this,function(e){!this.suspended&&null!=this.outline&&t.apply(this.outline,arguments)}),mxClient.IS_SVG&&((e=this.outline.getView().getCanvas().parentNode).setAttribute("shape-rendering","optimizeSpeed"),e.setAttribute("image-rendering","optimizeSpeed")),this.outline.labelsVisible=!1,this.outline.setEnabled(!1),this.updateHandler=mxUtils.bind(this,function(e,t){!this.suspended&&!this.active&&this.update()}),this.source.getModel().addListener(mxEvent.CHANGE,this.updateHandler),this.outline.addMouseListener(this),(e=this.source.getView()).addListener(mxEvent.SCALE,this.updateHandler),e.addListener(mxEvent.TRANSLATE,this.updateHandler),e.addListener(mxEvent.SCALE_AND_TRANSLATE,this.updateHandler),e.addListener(mxEvent.DOWN,this.updateHandler),e.addListener(mxEvent.UP,this.updateHandler),mxEvent.addListener(this.source.container,"scroll",this.updateHandler),this.panHandler=mxUtils.bind(this,function(e){this.updateOnPan&&this.updateHandler.apply(this,arguments)}),this.source.addListener(mxEvent.PAN,this.panHandler),this.refreshHandler=mxUtils.bind(this,function(e){this.outline.setStylesheet(this.source.getStylesheet()),this.outline.refresh()}),this.source.addListener(mxEvent.REFRESH,this.refreshHandler),this.bounds=new mxRectangle(0,0,0,0),this.selectionBorder=new mxRectangleShape(this.bounds,null,mxConstants.OUTLINE_COLOR,mxConstants.OUTLINE_STROKEWIDTH),this.selectionBorder.dialect=this.outline.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,this.selectionBorder.init(this.outline.getView().getOverlayPane()),mxEvent.redirectMouseEvents(this.selectionBorder.node,this.outline),this.selectionBorder.node.style.background="",this.sizer=this.createSizer(),this.sizer.init(this.outline.getView().getOverlayPane()),this.enabled&&(this.sizer.node.style.cursor="pointer"),mxEvent.addListener(this.sizer.node,mxClient.IS_TOUCH?"touchstart":"mousedown",mxUtils.bind(this,function(e){this.outline.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e))})),this.selectionBorder.node.style.display=this.showViewport?"":"none",this.sizer.node.style.display=this.selectionBorder.node.style.display,this.selectionBorder.node.style.cursor="move",this.update(!1)},mxOutline.prototype.isEnabled=function(){return this.enabled},mxOutline.prototype.setEnabled=function(e){this.enabled=e},mxOutline.prototype.setZoomEnabled=function(e){this.sizer.node.style.visibility=e?"visible":"hidden"},mxOutline.prototype.refresh=function(){this.update(!0)},mxOutline.prototype.createSizer=function(){var e=null!=this.sizerImage?new mxImageShape(new mxRectangle(0,0,this.sizerImage.width,this.sizerImage.height),this.sizerImage.src):new mxRectangleShape(new mxRectangle(0,0,this.sizerSize,this.sizerSize),mxConstants.OUTLINE_HANDLE_FILLCOLOR,mxConstants.OUTLINE_HANDLE_STROKECOLOR);return e.dialect=this.outline.dialect,e},mxOutline.prototype.getSourceContainerSize=function(){return new mxRectangle(0,0,this.source.container.scrollWidth,this.source.container.scrollHeight)},mxOutline.prototype.getOutlineOffset=function(e){return null},mxOutline.prototype.update=function(e){if(null!=this.source){var t=this.source.view.scale,n=new mxRectangle((n=this.source.getGraphBounds()).x/t+this.source.panDx,n.y/t+this.source.panDy,n.width/t,n.height/t),a=new mxRectangle(0,0,this.source.container.clientWidth/t,this.source.container.clientHeight/t);(s=n.clone()).add(a);var i=this.getSourceContainerSize(),s=(a=Math.max(i.width/t,s.width),t=Math.max(i.height/t,s.height),Math.max(0,this.outline.container.clientWidth-this.border));i=Math.max(0,this.outline.container.clientHeight-this.border);if(0<(s=Math.min(s/a,i/t))){this.outline.getView().scale!=s&&(this.outline.getView().scale=s,e=!0),(a=this.outline.getView()).currentRoot!=this.source.getView().currentRoot&&a.setCurrentRoot(this.source.getView().currentRoot);i=(t=this.source.view.translate).x+this.source.panDx;var o=t.y+this.source.panDy;null!=(s=this.getOutlineOffset(s))&&(i+=s.x,o+=s.y),n.x<0&&(i-=n.x),n.y<0&&(o-=n.y),a.translate.x==i&&a.translate.y==o||(a.translate.x=i,a.translate.y=o,e=!0);n=a.translate,i=(s=this.source.getView().scale)/a.scale,o=1/a.scale;var r=this.source.container;this.bounds=new mxRectangle((n.x-t.x-this.source.panDx)/o,(n.y-t.y-this.source.panDy)/o,r.clientWidth/i,r.clientHeight/i),this.bounds.x+=this.source.container.scrollLeft*a.scale/s,this.bounds.y+=this.source.container.scrollTop*a.scale/s,(n=this.selectionBorder.bounds).x==this.bounds.x&&n.y==this.bounds.y&&n.width==this.bounds.width&&n.height==this.bounds.height||(this.selectionBorder.bounds=this.bounds,this.selectionBorder.redraw()),n=this.sizer.bounds,a=new mxRectangle(this.bounds.x+this.bounds.width-n.width/2,this.bounds.y+this.bounds.height-n.height/2,n.width,n.height),n.x==a.x&&n.y==a.y&&n.width==a.width&&n.height==a.height||(this.sizer.bounds=a,"hidden"!=this.sizer.node.style.visibility&&this.sizer.redraw()),e&&this.outline.view.revalidate()}}},mxOutline.prototype.mouseDown=function(e,t){this.enabled&&this.showViewport&&(this.zoom=t.isSource(this.sizer),this.startX=t.getX(),this.startY=t.getY(),this.active=!0,this.source.useScrollbarsForPanning&&mxUtils.hasScrollbars(this.source.container)?(this.dx0=this.source.container.scrollLeft,this.dy0=this.source.container.scrollTop):this.dy0=this.dx0=0),t.consume()},mxOutline.prototype.mouseMove=function(e,t){if(this.active){this.selectionBorder.node.style.display=this.showViewport?"":"none",this.sizer.node.style.display=this.selectionBorder.node.style.display;var n=t.getX()-this.startX,a=t.getY()-this.startY,i=null;if(this.zoom)a=n/((i=this.source.container).clientWidth/i.clientHeight),i=new mxRectangle(this.bounds.x,this.bounds.y,Math.max(1,this.bounds.width+n),Math.max(1,this.bounds.height+a)),this.selectionBorder.bounds=i,this.selectionBorder.redraw();else{var s=this.outline.getView().scale;i=new mxRectangle(this.bounds.x+n,this.bounds.y+a,this.bounds.width,this.bounds.height);this.selectionBorder.bounds=i,this.selectionBorder.redraw(),n=n/s*this.source.getView().scale,a=a/s*this.source.getView().scale,this.source.panGraph(-n-this.dx0,-a-this.dy0)}n=this.sizer.bounds,this.sizer.bounds=new mxRectangle(i.x+i.width-n.width/2,i.y+i.height-n.height/2,n.width,n.height),"hidden"!=this.sizer.node.style.visibility&&this.sizer.redraw(),t.consume()}},mxOutline.prototype.mouseUp=function(e,t){if(this.active){var n=t.getX()-this.startX,a=t.getY()-this.startY;if(0<Math.abs(n)||0<Math.abs(a)){if(this.zoom){a=this.selectionBorder.bounds.width;var i=this.source.getView().scale;this.source.zoomTo(i-n*i/a,!1)}else this.source.useScrollbarsForPanning&&mxUtils.hasScrollbars(this.source.container)||(this.source.panGraph(0,0),n/=this.outline.getView().scale,a/=this.outline.getView().scale,i=this.source.getView().translate,this.source.getView().setTranslate(i.x-n,i.y-a));this.update(),t.consume()}this.index=null,this.active=!1}},mxOutline.prototype.destroy=function(){null!=this.source&&(this.source.removeListener(this.panHandler),this.source.removeListener(this.refreshHandler),this.source.getModel().removeListener(this.updateHandler),this.source.getView().removeListener(this.updateHandler),mxEvent.addListener(this.source.container,"scroll",this.updateHandler),this.source=null),null!=this.outline&&(this.outline.removeMouseListener(this),this.outline.destroy(),this.outline=null),null!=this.selectionBorder&&(this.selectionBorder.destroy(),this.selectionBorder=null),null!=this.sizer&&(this.sizer.destroy(),this.sizer=null)},mxMultiplicity.prototype.type=null,mxMultiplicity.prototype.attr=null,mxMultiplicity.prototype.value=null,mxMultiplicity.prototype.source=null,mxMultiplicity.prototype.min=null,mxMultiplicity.prototype.max=null,mxMultiplicity.prototype.validNeighbors=null,mxMultiplicity.prototype.validNeighborsAllowed=!0,mxMultiplicity.prototype.countError=null,mxMultiplicity.prototype.typeError=null,mxMultiplicity.prototype.check=function(e,t,n,a,i,s){var o="";return(this.source&&this.checkTerminal(e,n,t)||!this.source&&this.checkTerminal(e,a,t))&&(null!=this.countError&&(this.source&&(0==this.max||i>=this.max)||!this.source&&(0==this.max||s>=this.max))&&(o+=this.countError+"\n"),null!=this.validNeighbors&&null!=this.typeError&&0<this.validNeighbors.length&&(this.checkNeighbors(e,t,n,a)||(o+=this.typeError+"\n"))),0<o.length?o:null},mxMultiplicity.prototype.checkNeighbors=function(e,t,n,a){t=e.model.getValue(n),a=e.model.getValue(a),n=!this.validNeighborsAllowed;for(var i=this.validNeighbors,s=0;s<i.length;s++){if(this.source&&this.checkType(e,a,i[s])){n=this.validNeighborsAllowed;break}if(!this.source&&this.checkType(e,t,i[s])){n=this.validNeighborsAllowed;break}}return n},mxMultiplicity.prototype.checkTerminal=function(e,t,n){return t=e.model.getValue(t),this.checkType(e,t,this.type,this.attr,this.value)},mxMultiplicity.prototype.checkType=function(e,t,n,a,i){return null!=t&&(isNaN(t.nodeType)?t==n:mxUtils.isNode(t,n,a,i))},mxLayoutManager.prototype=new mxEventSource,mxLayoutManager.prototype.constructor=mxLayoutManager,mxLayoutManager.prototype.graph=null,mxLayoutManager.prototype.bubbling=!0,mxLayoutManager.prototype.enabled=!0,mxLayoutManager.prototype.updateHandler=null,mxLayoutManager.prototype.moveHandler=null,mxLayoutManager.prototype.isEnabled=function(){return this.enabled},mxLayoutManager.prototype.setEnabled=function(e){this.enabled=e},mxLayoutManager.prototype.isBubbling=function(){return this.bubbling},mxLayoutManager.prototype.setBubbling=function(e){this.bubbling=e},mxLayoutManager.prototype.getGraph=function(){return this.graph},mxLayoutManager.prototype.setGraph=function(e){if(null!=this.graph){var t=this.graph.getModel();t.removeListener(this.undoHandler),this.graph.removeListener(this.moveHandler)}this.graph=e,null!=this.graph&&((t=this.graph.getModel()).addListener(mxEvent.BEFORE_UNDO,this.undoHandler),this.graph.addListener(mxEvent.MOVE_CELLS,this.moveHandler))},mxLayoutManager.prototype.getLayout=function(e){return null},mxLayoutManager.prototype.beforeUndo=function(e){e=this.getCellsForChanges(e.changes);var t=this.getGraph().getModel();if(this.isBubbling())for(var n=t.getParents(e);0<n.length;)e=e.concat(n),n=t.getParents(n);this.layoutCells(mxUtils.sortCells(e,!1))},mxLayoutManager.prototype.cellsMoved=function(e,t){if(null!=e&&null!=t)for(var n=mxUtils.convertPoint(this.getGraph().container,mxEvent.getClientX(t),mxEvent.getClientY(t)),a=this.getGraph().getModel(),i=0;i<e.length;i++){var s=this.getLayout(a.getParent(e[i]));null!=s&&s.moveCell(e[i],n.x,n.y)}},mxLayoutManager.prototype.getCellsForChanges=function(e){for(var t=[],n={},a=0;a<e.length;a++){if((i=e[a])instanceof mxRootChange)return[];for(var i=this.getCellsForChange(i),s=0;s<i.length;s++)if(null!=i[s]){var o=mxCellPath.create(i[s]);null==n[o]&&(n[o]=i[s],t.push(i[s]))}}return t},mxLayoutManager.prototype.getCellsForChange=function(e){var t=this.getGraph().getModel();return e instanceof mxChildChange?[e.child,e.previous,t.getParent(e.child)]:e instanceof mxTerminalChange||e instanceof mxGeometryChange?[e.cell,t.getParent(e.cell)]:[]},mxLayoutManager.prototype.layoutCells=function(e){if(0<e.length){var t=this.getGraph().getModel();t.beginUpdate();try{for(var n=null,a=0;a<e.length;a++)e[a]!=t.getRoot()&&e[a]!=n&&(n=e[a],this.executeLayout(this.getLayout(n),n));this.fireEvent(new mxEventObject(mxEvent.LAYOUT_CELLS,"cells",e))}finally{t.endUpdate()}}},mxLayoutManager.prototype.executeLayout=function(e,t){null!=e&&null!=t&&e.execute(t)},mxLayoutManager.prototype.destroy=function(){this.setGraph(null)},mxSpaceManager.prototype=new mxEventSource,mxSpaceManager.prototype.constructor=mxSpaceManager,mxSpaceManager.prototype.graph=null,mxSpaceManager.prototype.enabled=!0,mxSpaceManager.prototype.shiftRightwards=!0,mxSpaceManager.prototype.shiftDownwards=!0,mxSpaceManager.prototype.extendParents=!0,mxSpaceManager.prototype.resizeHandler=null,mxSpaceManager.prototype.foldHandler=null,mxSpaceManager.prototype.isCellIgnored=function(e){return!this.getGraph().getModel().isVertex(e)},mxSpaceManager.prototype.isCellShiftable=function(e){return this.getGraph().getModel().isVertex(e)&&this.getGraph().isCellMovable(e)},mxSpaceManager.prototype.isEnabled=function(){return this.enabled},mxSpaceManager.prototype.setEnabled=function(e){this.enabled=e},mxSpaceManager.prototype.isShiftRightwards=function(){return this.shiftRightwards},mxSpaceManager.prototype.setShiftRightwards=function(e){this.shiftRightwards=e},mxSpaceManager.prototype.isShiftDownwards=function(){return this.shiftDownwards},mxSpaceManager.prototype.setShiftDownwards=function(e){this.shiftDownwards=e},mxSpaceManager.prototype.isExtendParents=function(){return this.extendParents},mxSpaceManager.prototype.setExtendParents=function(e){this.extendParents=e},mxSpaceManager.prototype.getGraph=function(){return this.graph},mxSpaceManager.prototype.setGraph=function(e){null!=this.graph&&(this.graph.removeListener(this.resizeHandler),this.graph.removeListener(this.foldHandler)),this.graph=e,null!=this.graph&&(this.graph.addListener(mxEvent.RESIZE_CELLS,this.resizeHandler),this.graph.addListener(mxEvent.FOLD_CELLS,this.foldHandler))},mxSpaceManager.prototype.cellsResized=function(e){if(null!=e){var t=this.graph.getModel();t.beginUpdate();try{for(var n=0;n<e.length;n++)if(!this.isCellIgnored(e[n])){this.cellResized(e[n]);break}}finally{t.endUpdate()}}},mxSpaceManager.prototype.cellResized=function(e){var t=this.getGraph(),n=t.getView(),a=t.getModel(),i=n.getState(e),s=n.getState(a.getParent(e));if(null!=i&&null!=s){var o=this.getCellsToShift(i),r=a.getGeometry(e);if(null!=o&&null!=r){var l=n.translate,d=n.scale,c=(n=i.x-s.origin.x-l.x*d,s=i.y-s.origin.y-l.y*d,l=i.x+i.width,i.y+i.height),m=i.width-r.width*d+n-r.x*d,u=i.height-r.height*d+s-r.y*d,p=1-r.width*d/i.width;i=1-r.height*d/i.height;a.beginUpdate();try{for(r=0;r<o.length;r++)o[r]!=e&&this.isCellShiftable(o[r])&&this.shiftCell(o[r],m,u,n,s,l,c,p,i,this.isExtendParents()&&t.isExtendParent(o[r]))}finally{a.endUpdate()}}}},mxSpaceManager.prototype.shiftCell=function(e,t,n,a,i,s,o,r,l,d){var c=(a=this.getGraph()).getView().getState(e);if(null!=c){var m=a.getModel();if(null!=(p=m.getGeometry(e))){m.beginUpdate();try{if(this.isShiftRightwards())if(c.x>=s)(p=p.clone()).translate(-t,0);else{var u=Math.max(0,c.x-x0);(p=p.clone()).translate(-r*u,0)}if(this.isShiftDownwards())if(c.y>=o)(p=p.clone()).translate(0,-n);else{var p,g=Math.max(0,c.y-i);(p=p.clone()).translate(0,-l*g)}p!=m.getGeometry(e)&&(m.setGeometry(e,p),d&&a.extendParent(e))}finally{m.endUpdate()}}}},mxSpaceManager.prototype.getCellsToShift=function(e){var t=this.getGraph(),n=t.getModel().getParent(e.cell),a=this.isShiftDownwards(),i=this.isShiftRightwards();return t.getCellsBeyond(e.x+(a?0:e.width),e.y+(a&&i?0:e.height),n,i,a)},mxSpaceManager.prototype.destroy=function(){this.setGraph(null)},mxSwimlaneManager.prototype=new mxEventSource,mxSwimlaneManager.prototype.constructor=mxSwimlaneManager,mxSwimlaneManager.prototype.graph=null,mxSwimlaneManager.prototype.enabled=!0,mxSwimlaneManager.prototype.horizontal=!0,mxSwimlaneManager.prototype.addEnabled=!0,mxSwimlaneManager.prototype.resizeEnabled=!0,mxSwimlaneManager.prototype.addHandler=null,mxSwimlaneManager.prototype.resizeHandler=null,mxSwimlaneManager.prototype.isEnabled=function(){return this.enabled},mxSwimlaneManager.prototype.setEnabled=function(e){this.enabled=e},mxSwimlaneManager.prototype.isHorizontal=function(){return this.horizontal},mxSwimlaneManager.prototype.setHorizontal=function(e){this.horizontal=e},mxSwimlaneManager.prototype.isAddEnabled=function(){return this.addEnabled},mxSwimlaneManager.prototype.setAddEnabled=function(e){this.addEnabled=e},mxSwimlaneManager.prototype.isResizeEnabled=function(){return this.resizeEnabled},mxSwimlaneManager.prototype.setResizeEnabled=function(e){this.resizeEnabled=e},mxSwimlaneManager.prototype.getGraph=function(){return this.graph},mxSwimlaneManager.prototype.setGraph=function(e){null!=this.graph&&(this.graph.removeListener(this.addHandler),this.graph.removeListener(this.resizeHandler)),this.graph=e,null!=this.graph&&(this.graph.addListener(mxEvent.ADD_CELLS,this.addHandler),this.graph.addListener(mxEvent.CELLS_RESIZED,this.resizeHandler))},mxSwimlaneManager.prototype.isSwimlaneIgnored=function(e){return!this.getGraph().isSwimlane(e)},mxSwimlaneManager.prototype.isCellHorizontal=function(e){if(this.graph.isSwimlane(e)){var t=this.graph.view.getState(e);return e=null!=t?t.style:this.graph.getCellStyle(e),1==mxUtils.getValue(e,mxConstants.STYLE_HORIZONTAL,1)}return!this.isHorizontal()},mxSwimlaneManager.prototype.cellsAdded=function(e){if(null!=e){var t=this.getGraph().getModel();t.beginUpdate();try{for(var n=0;n<e.length;n++)this.isSwimlaneIgnored(e[n])||this.swimlaneAdded(e[n])}finally{t.endUpdate()}}},mxSwimlaneManager.prototype.swimlaneAdded=function(e){for(var t=this.getGraph().getModel(),n=t.getParent(e),a=t.getChildCount(n),i=null,s=0;s<a;s++){var o=t.getChildAt(n,s);if(o!=e&&!this.isSwimlaneIgnored(o)&&null!=(i=t.getGeometry(o)))break}null!=i&&this.resizeSwimlane(e,i.width,i.height)},mxSwimlaneManager.prototype.cellsResized=function(e){if(null!=e){var t=this.getGraph().getModel();t.beginUpdate();try{for(var n=0;n<e.length;n++)if(!this.isSwimlaneIgnored(e[n])){var a=t.getGeometry(e[n]);if(null!=a){for(var i=new mxRectangle(0,0,a.width,a.height),s=o=e[n];null!=s;){var o=s,r=(s=t.getParent(s),this.graph.isSwimlane(s)?this.graph.getStartSize(s):new mxRectangle);i.width+=r.width,i.height+=r.height}this.resizeSwimlane(o,i.width,i.height)}}}finally{t.endUpdate()}}},mxSwimlaneManager.prototype.resizeSwimlane=function(e,t,n){var a=this.getGraph().getModel();a.beginUpdate();try{if(!this.isSwimlaneIgnored(e))if(null!=(r=a.getGeometry(e))){var i=this.isCellHorizontal(e);(i&&r.height!=n||!i&&r.width!=t)&&(r=r.clone(),i?r.height=n:r.width=t,a.setGeometry(e,r))}var s=this.graph.isSwimlane(e)?this.graph.getStartSize(e):new mxRectangle;t-=s.width,n-=s.height;for(var o=a.getChildCount(e),r=0;r<o;r++){var l=a.getChildAt(e,r);this.resizeSwimlane(l,t,n)}}finally{a.endUpdate()}},mxSwimlaneManager.prototype.destroy=function(){this.setGraph(null)},mxTemporaryCellStates.prototype.view=null,mxTemporaryCellStates.prototype.oldStates=null,mxTemporaryCellStates.prototype.oldBounds=null,mxTemporaryCellStates.prototype.oldScale=null,mxTemporaryCellStates.prototype.destroy=function(){this.view.setScale(this.oldScale),this.view.setStates(this.oldStates),this.view.setGraphBounds(this.oldBounds)},mxCellStatePreview.prototype.graph=null,mxCellStatePreview.prototype.deltas=null,mxCellStatePreview.prototype.count=0,mxCellStatePreview.prototype.isEmpty=function(){return 0==this.count},mxCellStatePreview.prototype.moveState=function(e,t,n,a,i){a=null==a||a,i=null==i||i;var s=mxCellPath.create(e.cell),o=this.deltas[s];return null==o?(o=new mxPoint(t,n),this.deltas[s]=o,this.count++):a?(o.X+=t,o.Y+=n):(o.X=t,o.Y=n),i&&this.addEdges(e),o},mxCellStatePreview.prototype.show=function(e){var t,n=this.graph.getModel(),a=n.getRoot();for(t in this.deltas){var i=mxCellPath.resolve(a,t),s=this.graph.view.getState(i),o=this.deltas[t];i=this.graph.view.getState(n.getParent(i));this.translateState(i,s,o.x,o.y)}for(t in this.deltas)i=mxCellPath.resolve(a,t),s=this.graph.view.getState(i),o=this.deltas[t],i=this.graph.view.getState(n.getParent(i)),this.revalidateState(i,s,o.x,o.y,e)},mxCellStatePreview.prototype.translateState=function(e,t,n,a){if(null!=t){var i=this.graph.getModel();if(i.isVertex(t.cell)){t.invalid=!0,this.graph.view.validateBounds(e,t.cell),e=i.getGeometry(t.cell);var s=mxCellPath.create(t.cell);0==n&&0==a||null==e||e.relative&&null==this.deltas[s]||(t.x+=n,t.y+=a)}for(e=i.getChildCount(t.cell),s=0;s<e;s++)this.translateState(t,this.graph.view.getState(i.getChildAt(t.cell,s)),n,a)}},mxCellStatePreview.prototype.revalidateState=function(e,t,n,a,i){if(null!=t){t.invalid=!0,this.graph.view.validatePoints(e,t.cell);var s=mxCellPath.create(t.cell),o=this.graph.getModel(),r=this.graph.getCellGeometry(t.cell);for(0==n&&0==a||null==r||!r.relative||!o.isVertex(t.cell)||null!=e&&!o.isVertex(e.cell)&&null==this.deltas[s]||(t.x+=n,t.y+=a,this.graph.cellRenderer.redraw(t)),null!=i&&i(t),e=o.getChildCount(t.cell),s=0;s<e;s++)this.revalidateState(t,this.graph.view.getState(o.getChildAt(t.cell,s)),n,a,i)}},mxCellStatePreview.prototype.addEdges=function(e){for(var t=this.graph.getModel(),n=t.getEdgeCount(e.cell),a=0;a<n;a++){var i=this.graph.view.getState(t.getEdgeAt(e.cell,a));null!=i&&this.moveState(i,0,0)}},mxConnectionConstraint.prototype.point=null,mxConnectionConstraint.prototype.perimeter=null,mxGraphHandler.prototype.graph=null,mxGraphHandler.prototype.maxCells=mxClient.IS_IE?20:50,mxGraphHandler.prototype.enabled=!0,mxGraphHandler.prototype.highlightEnabled=!0,mxGraphHandler.prototype.cloneEnabled=!0,mxGraphHandler.prototype.moveEnabled=!0,mxGraphHandler.prototype.guidesEnabled=!1,mxGraphHandler.prototype.guide=null,mxGraphHandler.prototype.currentDx=null,mxGraphHandler.prototype.currentDy=null,mxGraphHandler.prototype.updateCursor=!0,mxGraphHandler.prototype.selectEnabled=!0,mxGraphHandler.prototype.removeCellsFromParent=!0,mxGraphHandler.prototype.connectOnDrop=!1,mxGraphHandler.prototype.scrollOnMove=!0,mxGraphHandler.prototype.minimumSize=6,mxGraphHandler.prototype.previewColor="black",mxGraphHandler.prototype.htmlPreview=!1,mxGraphHandler.prototype.shape=null,mxGraphHandler.prototype.scaleGrid=!1,mxGraphHandler.prototype.rotationEnabled=!0,mxGraphHandler.prototype.isEnabled=function(){return this.enabled},mxGraphHandler.prototype.setEnabled=function(e){this.enabled=e},mxGraphHandler.prototype.isCloneEnabled=function(){return this.cloneEnabled},mxGraphHandler.prototype.setCloneEnabled=function(e){this.cloneEnabled=e},mxGraphHandler.prototype.isMoveEnabled=function(){return this.moveEnabled},mxGraphHandler.prototype.setMoveEnabled=function(e){this.moveEnabled=e},mxGraphHandler.prototype.isSelectEnabled=function(){return this.selectEnabled},mxGraphHandler.prototype.setSelectEnabled=function(e){this.selectEnabled=e},mxGraphHandler.prototype.isRemoveCellsFromParent=function(){return this.removeCellsFromParent},mxGraphHandler.prototype.setRemoveCellsFromParent=function(e){this.removeCellsFromParent=e},mxGraphHandler.prototype.getInitialCellForEvent=function(e){return e.getCell()},mxGraphHandler.prototype.isDelayedSelection=function(e){return this.graph.isCellSelected(e)},mxGraphHandler.prototype.mouseDown=function(e,t){if(!t.isConsumed()&&this.isEnabled()&&this.graph.isEnabled()&&!this.graph.isForceMarqueeEvent(t.getEvent())&&null!=t.getState()){var n=this.getInitialCellForEvent(t);if(this.cell=null,this.delayedSelection=this.isDelayedSelection(n),this.isSelectEnabled()&&!this.delayedSelection&&this.graph.selectCellForEvent(n,t.getEvent()),this.isMoveEnabled()){var a=this.graph.model,i=a.getGeometry(n);this.graph.isCellMovable(n)&&(!a.isEdge(n)||1<this.graph.getSelectionCount()||null!=i.points&&0<i.points.length||null==a.getTerminal(n,!0)||null==a.getTerminal(n,!1)||this.graph.allowDanglingEdges||this.graph.isCloneEvent(t.getEvent())&&this.graph.isCellsCloneable())&&this.start(n,t.getX(),t.getY()),this.cellWasClicked=!0,!mxClient.IS_SF&&!mxClient.IS_GC||"SELECT"!=t.getSource().nodeName?t.consume():mxClient.IS_SF&&"SELECT"==t.getSource().nodeName&&(this.cellWasClicked=!1,this.first=null)}}},mxGraphHandler.prototype.getGuideStates=function(){var e=this.graph.getDefaultParent(),t=this.graph.getModel(),n=mxUtils.bind(this,function(e){return null!=this.graph.view.getState(e)&&t.isVertex(e)&&null!=t.getGeometry(e)&&!t.getGeometry(e).relative});return this.graph.view.getCellStates(t.filterDescendants(n,e))},mxGraphHandler.prototype.getCells=function(e){return!this.delayedSelection&&this.graph.isCellMovable(e)?[e]:this.graph.getMovableCells(this.graph.getSelectionCells())},mxGraphHandler.prototype.getPreviewBounds=function(e){return null!=(e=this.getBoundingBox(e))&&(e.grow(-1,-1),e.width<this.minimumSize&&(e.x-=(this.minimumSize-e.width)/2,e.width=this.minimumSize),e.height<this.minimumSize&&(e.y-=(this.minimumSize-e.height)/2,e.height=this.minimumSize)),e},mxGraphHandler.prototype.getBoundingBox=function(e){var t=null;if(null!=e&&0<e.length)for(var n=this.graph.getModel(),a=0;a<e.length;a++)if(n.isVertex(e[a])||n.isEdge(e[a])){var i=this.graph.view.getState(e[a]);if(null!=i){var s=i;n.isVertex(e[a])&&null!=i.shape&&null!=i.shape.boundingBox&&(s=i.shape.boundingBox),null==t?t=new mxRectangle(s.x,s.y,s.width,s.height):t.add(s)}}return t},mxGraphHandler.prototype.createPreviewShape=function(e){return(e=new mxRectangleShape(e,null,this.previewColor)).isDashed=!0,this.htmlPreview?(e.dialect=mxConstants.DIALECT_STRICTHTML,e.init(this.graph.container)):(e.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,e.init(this.graph.getView().getOverlayPane()),e.pointerEvents=!1),e},mxGraphHandler.prototype.start=function(e,t,n){this.cell=e,this.first=mxUtils.convertPoint(this.graph.container,t,n),this.cells=this.getCells(this.cell),this.bounds=this.graph.getView().getBounds(this.cells),this.pBounds=this.getPreviewBounds(this.cells),this.guidesEnabled&&(this.guide=new mxGuide(this.graph,this.getGuideStates()))},mxGraphHandler.prototype.useGuidesForEvent=function(e){return null==this.guide||this.guide.isEnabledForEvent(e.getEvent())},mxGraphHandler.prototype.snap=function(e){var t=this.scaleGrid?this.graph.view.scale:1;return e.x=this.graph.snap(e.x/t)*t,e.y=this.graph.snap(e.y/t)*t,e},mxGraphHandler.prototype.mouseMove=function(e,t){var n=this.graph;if(!t.isConsumed()&&n.isMouseDown&&null!=this.cell&&null!=this.first&&null!=this.bounds){var a=(s=mxUtils.convertPoint(n.container,t.getX(),t.getY())).x-this.first.x,i=s.y-this.first.y,s=n.tolerance;if(null!=this.shape||Math.abs(a)>s||Math.abs(i)>s){null==this.highlight&&(this.highlight=new mxCellHighlight(this.graph,mxConstants.DROP_TARGET_COLOR,3)),null==this.shape&&(this.shape=this.createPreviewShape(this.bounds));var o=n.isGridEnabledEvent(t.getEvent());s=!0;if(null!=this.guide&&this.useGuidesForEvent(t))s=!1,a=(i=this.guide.move(this.bounds,new mxPoint(a,i),o)).x,i=i.y;else if(o){var r=n.getView().translate,l=n.getView().scale;o=this.bounds.x-(n.snap(this.bounds.x/l-r.x)+r.x)*l,r=this.bounds.y-(n.snap(this.bounds.y/l-r.y)+r.y)*l,a=(i=this.snap(new mxPoint(a,i))).x-o,i=i.y-r}for(null!=this.guide&&s&&this.guide.hide(),n.isConstrainedEvent(t.getEvent())&&(Math.abs(a)>Math.abs(i)?i=0:a=0),this.currentDx=a,this.currentDy=i,this.updatePreviewShape(),s=null,i=t.getCell(),n.isDropEnabled()&&this.highlightEnabled&&(s=n.getDropTarget(this.cells,t.getEvent(),i)),o=s,r=n.getModel();null!=o&&o!=this.cells[0];)o=r.getParent(o);l=n.isCloneEvent(t.getEvent())&&n.isCellsCloneable()&&this.isCloneEnabled();var d=!1;null==(a=n.getView().getState(s))||null!=o||r.getParent(this.cell)==s&&!l?(this.target=null,this.connectOnDrop&&null!=i&&1==this.cells.length&&n.getModel().isVertex(i)&&n.isCellConnectable(i)&&(null!=(a=n.getView().getState(i))&&(n=null==n.getEdgeValidationError(null,this.cell,i)?mxConstants.VALID_COLOR:mxConstants.INVALID_CONNECT_TARGET_COLOR,this.setHighlightColor(n),d=!0))):(this.target!=s&&(this.target=s,this.setHighlightColor(mxConstants.DROP_TARGET_COLOR)),d=!0),null!=a&&d?this.highlight.highlight(a):this.highlight.hide()}t.consume(),mxEvent.consume(t.getEvent())}else!this.isMoveEnabled()&&!this.isCloneEnabled()||!this.updateCursor||t.isConsumed()||null==t.getState()||n.isMouseDown||(null==(a=n.getCursorForCell(t.getCell()))&&n.isEnabled()&&n.isCellMovable(t.getCell())&&(a=n.getModel().isEdge(t.getCell())?mxConstants.CURSOR_MOVABLE_EDGE:mxConstants.CURSOR_MOVABLE_VERTEX),t.getState().setCursor(a),t.consume())},mxGraphHandler.prototype.updatePreviewShape=function(){null!=this.shape&&(this.shape.bounds=new mxRectangle(Math.round(this.pBounds.x+this.currentDx-this.graph.panDx),Math.round(this.pBounds.y+this.currentDy-this.graph.panDy),this.pBounds.width,this.pBounds.height),this.shape.redraw())},mxGraphHandler.prototype.setHighlightColor=function(e){null!=this.highlight&&this.highlight.setHighlightColor(e)},mxGraphHandler.prototype.mouseUp=function(e,t){if(!t.isConsumed()){var n=this.graph;if(null!=this.cell&&null!=this.first&&null!=this.shape&&null!=this.currentDx&&null!=this.currentDy){var a=n.getView().scale,i=n.isCloneEvent(t.getEvent())&&n.isCellsCloneable()&&this.isCloneEnabled(),s=this.currentDx/a,o=(a=this.currentDy/a,t.getCell());this.connectOnDrop&&null==this.target&&null!=o&&n.getModel().isVertex(o)&&n.isCellConnectable(o)&&n.isEdgeValid(null,this.cell,o)?n.connectionHandler.connect(this.cell,o,t.getEvent()):(o=this.target,n.isSplitEnabled()&&n.isSplitTarget(o,this.cells,t.getEvent())?n.splitEdge(o,this.cells,null,s,a):this.moveCells(this.cells,s,a,i,this.target,t.getEvent()))}else this.isSelectEnabled()&&this.delayedSelection&&null!=this.cell&&this.selectDelayed(t)}this.cellWasClicked&&t.consume(),this.reset()},mxGraphHandler.prototype.selectDelayed=function(e){this.graph.selectCellForEvent(this.cell,e.getEvent())},mxGraphHandler.prototype.reset=function(){this.destroyShapes(),this.delayedSelection=this.cellWasClicked=!1,this.target=this.cell=this.first=this.guides=this.currentDy=this.currentDx=null},mxGraphHandler.prototype.shouldRemoveCellsFromParent=function(e,t,n){if(this.graph.getModel().isVertex(e)){if(e=this.graph.getView().getState(e),n=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(n),mxEvent.getClientY(n)),0!=(a=mxUtils.toRadians(mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION)||0))){t=Math.cos(-a);var a=Math.sin(-a),i=new mxPoint(e.getCenterX(),e.getCenterY());n=mxUtils.getRotatedPoint(n,t,a,i)}return null!=e&&!mxUtils.contains(e,n.x,n.y)}return!1},mxGraphHandler.prototype.moveCells=function(e,t,n,a,i,s){a&&(e=this.graph.getCloneableCells(e)),null==i&&this.isRemoveCellsFromParent()&&this.shouldRemoveCellsFromParent(this.graph.getModel().getParent(this.cell),e,s)&&(i=this.graph.getDefaultParent()),e=this.graph.moveCells(e,t-this.graph.panDx/this.graph.view.scale,n-this.graph.panDy/this.graph.view.scale,a,i,s),this.isSelectEnabled()&&this.scrollOnMove&&this.graph.scrollCellToVisible(e[0]),a&&this.graph.setSelectionCells(e)},mxGraphHandler.prototype.destroyShapes=function(){null!=this.shape&&(this.shape.destroy(),this.shape=null),null!=this.guide&&(this.guide.destroy(),this.guide=null),null!=this.highlight&&(this.highlight.destroy(),this.highlight=null)},mxGraphHandler.prototype.destroy=function(){this.graph.removeMouseListener(this),this.graph.removeListener(this.panHandler),this.destroyShapes()},mxPanningHandler.prototype=new mxPopupMenu,mxPanningHandler.prototype.constructor=mxPanningHandler,mxPanningHandler.prototype.graph=null,mxPanningHandler.prototype.triggerX=null,mxPanningHandler.prototype.triggerY=null,mxPanningHandler.prototype.usePopupTrigger=!0,mxPanningHandler.prototype.useLeftButtonForPanning=!1,mxPanningHandler.prototype.selectOnPopup=!0,mxPanningHandler.prototype.clearSelectionOnBackground=!0,mxPanningHandler.prototype.ignoreCell=!1,mxPanningHandler.prototype.previewEnabled=!0,mxPanningHandler.prototype.useGrid=!1,mxPanningHandler.prototype.panningEnabled=!0,mxPanningHandler.prototype.isPanningEnabled=function(){return this.panningEnabled},mxPanningHandler.prototype.setPanningEnabled=function(e){this.panningEnabled=e},mxPanningHandler.prototype.init=function(){mxPopupMenu.prototype.init.apply(this),mxEvent.addListener(this.div,mxClient.IS_TOUCH?"touchmove":"mousemove",mxUtils.bind(this,function(e){this.graph.tooltipHandler.hide()}))},mxPanningHandler.prototype.isPanningTrigger=function(e){var t=e.getEvent();return this.useLeftButtonForPanning&&(this.ignoreCell||null==e.getState())&&mxEvent.isLeftMouseButton(t)||mxEvent.isControlDown(t)&&mxEvent.isShiftDown(t)||this.usePopupTrigger&&mxEvent.isPopupTrigger(t)},mxPanningHandler.prototype.mouseDown=function(e,t){if(!t.isConsumed()&&this.isEnabled()){this.hideMenu(),this.dx0=-this.graph.container.scrollLeft,this.dy0=-this.graph.container.scrollTop;var n=mxUtils.convertPoint(this.graph.container,t.getX(),t.getY());this.triggerX=n.x,this.triggerY=n.y,this.popupTrigger=this.isPopupTrigger(t),this.panningTrigger=this.isPanningEnabled()&&this.isPanningTrigger(t),this.startX=t.getX(),this.startY=t.getY(),this.panningTrigger&&this.consumePanningTrigger(t)}},mxPanningHandler.prototype.consumePanningTrigger=function(e){e.consume()},mxPanningHandler.prototype.mouseMove=function(e,t){var n=t.getX()-this.startX,a=t.getY()-this.startY;if(this.active)this.previewEnabled&&(this.useGrid&&(n=this.graph.snap(n),a=this.graph.snap(a)),this.graph.panGraph(n+this.dx0,a+this.dy0)),this.fireEvent(new mxEventObject(mxEvent.PAN,"event",t)),t.consume();else if(this.panningTrigger){var i=this.active;this.active=Math.abs(n)>this.graph.tolerance||Math.abs(a)>this.graph.tolerance,!i&&this.active&&this.fireEvent(new mxEventObject(mxEvent.PAN_START,"event",t))}},mxPanningHandler.prototype.mouseUp=function(e,t){var n=Math.abs(t.getX()-this.startX),a=Math.abs(t.getY()-this.startY);if(this.active){if(!this.graph.useScrollbarsForPanning||!mxUtils.hasScrollbars(this.graph.container)){n=t.getX()-this.startX,a=t.getY()-this.startY,this.useGrid&&(n=this.graph.snap(n),a=this.graph.snap(a));var i=this.graph.getView().scale,s=this.graph.getView().translate;this.graph.panGraph(0,0),this.panGraph(s.x+n/i,s.y+a/i)}this.active=!1,this.fireEvent(new mxEventObject(mxEvent.PAN_END,"event",t)),t.consume()}else this.popupTrigger&&n<this.graph.tolerance&&a<this.graph.tolerance&&(n=this.getCellForPopupEvent(t),this.graph.isEnabled()&&this.selectOnPopup&&null!=n&&!this.graph.isCellSelected(n)?this.graph.setSelectionCell(n):this.clearSelectionOnBackground&&null==n&&this.graph.clearSelection(),this.graph.tooltipHandler.hide(),a=mxUtils.getScrollOrigin(),a=new mxPoint(t.getX()+a.x,t.getY()+a.y),this.popup(a.x+1,a.y+1,n,t.getEvent()),t.consume());this.popupTrigger=this.panningTrigger=!1},mxPanningHandler.prototype.getCellForPopupEvent=function(e){return e.getCell()},mxPanningHandler.prototype.panGraph=function(e,t){this.graph.getView().setTranslate(e,t)},mxPanningHandler.prototype.destroy=function(){this.graph.removeMouseListener(this),mxPopupMenu.prototype.destroy.apply(this)},mxUtils.extend(mxCellMarker,mxEventSource),mxCellMarker.prototype.graph=null,mxCellMarker.prototype.enabled=!0,mxCellMarker.prototype.hotspot=mxConstants.DEFAULT_HOTSPOT,mxCellMarker.prototype.hotspotEnabled=!1,mxCellMarker.prototype.validColor=null,mxCellMarker.prototype.invalidColor=null,mxCellMarker.prototype.currentColor=null,mxCellMarker.prototype.validState=null,mxCellMarker.prototype.markedState=null,mxCellMarker.prototype.setEnabled=function(e){this.enabled=e},mxCellMarker.prototype.isEnabled=function(){return this.enabled},mxCellMarker.prototype.setHotspot=function(e){this.hotspot=e},mxCellMarker.prototype.getHotspot=function(){return this.hotspot},mxCellMarker.prototype.setHotspotEnabled=function(e){this.hotspotEnabled=e},mxCellMarker.prototype.isHotspotEnabled=function(){return this.hotspotEnabled},mxCellMarker.prototype.hasValidState=function(){return null!=this.validState},mxCellMarker.prototype.getValidState=function(){return this.validState},mxCellMarker.prototype.getMarkedState=function(){return this.markedState},mxCellMarker.prototype.reset=function(){(this.validState=null)!=this.markedState&&(this.markedState=null,this.unmark())},mxCellMarker.prototype.process=function(e){var t=null;if(this.isEnabled()){var n=null!=(t=this.getState(e))&&this.isValidState(t);e=this.getMarkerColor(e.getEvent(),t,n),this.validState=n?t:null,t==this.markedState&&e==this.currentColor||(this.currentColor=e,null!=t&&null!=this.currentColor?(this.markedState=t,this.mark()):null!=this.markedState&&(this.markedState=null,this.unmark()))}return t},mxCellMarker.prototype.markCell=function(e,t){var n=this.graph.getView().getState(e);null!=n&&(this.currentColor=null!=t?t:this.validColor,this.markedState=n,this.mark())},mxCellMarker.prototype.mark=function(){this.highlight.setHighlightColor(this.currentColor),this.highlight.highlight(this.markedState),this.fireEvent(new mxEventObject(mxEvent.MARK,"state",this.markedState))},mxCellMarker.prototype.unmark=function(){this.mark()},mxCellMarker.prototype.isValidState=function(e){return!0},mxCellMarker.prototype.getMarkerColor=function(e,t,n){return n?this.validColor:this.invalidColor},mxCellMarker.prototype.getState=function(e){var t=this.graph.getView();return cell=this.getCell(e),null!=(t=this.getStateToMark(t.getState(cell)))&&this.intersects(t,e)?t:null},mxCellMarker.prototype.getCell=function(e){return e.getCell()},mxCellMarker.prototype.getStateToMark=function(e){return e},mxCellMarker.prototype.intersects=function(e,t){return!this.hotspotEnabled||mxUtils.intersectsHotspot(e,t.getGraphX(),t.getGraphY(),this.hotspot,mxConstants.MIN_HOTSPOT_SIZE,mxConstants.MAX_HOTSPOT_SIZE)},mxCellMarker.prototype.destroy=function(){this.graph.getView().removeListener(this.resetHandler),this.graph.getModel().removeListener(this.resetHandler),this.highlight.destroy()},mxUtils.extend(mxSelectionCellsHandler,mxEventSource),mxSelectionCellsHandler.prototype.graph=null,mxSelectionCellsHandler.prototype.enabled=!0,mxSelectionCellsHandler.prototype.refreshHandler=null,mxSelectionCellsHandler.prototype.maxHandlers=100,mxSelectionCellsHandler.prototype.handlers=null,mxSelectionCellsHandler.prototype.isEnabled=function(){return this.enabled},mxSelectionCellsHandler.prototype.setEnabled=function(e){this.enabled=e},mxSelectionCellsHandler.prototype.getHandler=function(e){return this.handlers.get(e)},mxSelectionCellsHandler.prototype.reset=function(){this.handlers.visit(function(e,t){t.reset.apply(t)})},mxSelectionCellsHandler.prototype.refresh=function(){var e=this.handlers;this.handlers=new mxDictionary;for(var t=this.graph.getSelectionCells(),n=0;n<t.length;n++){var a=this.graph.view.getState(t[n]);if(null!=a){var i=e.remove(t[n]);null!=i&&(i.state!=a?(i.destroy(),i=null):i.redraw()),null==i&&(i=this.graph.createHandler(a),this.fireEvent(new mxEventObject(mxEvent.ADD,"state",a))),null!=i&&this.handlers.put(t[n],i)}}e.visit(mxUtils.bind(this,function(e,t){this.fireEvent(new mxEventObject(mxEvent.REMOVE,"state",t.state)),t.destroy()}))},mxSelectionCellsHandler.prototype.mouseDown=function(e,t){if(this.graph.isEnabled()&&this.isEnabled()){var n=[e,t];this.handlers.visit(function(e,t){t.mouseDown.apply(t,n)})}},mxSelectionCellsHandler.prototype.mouseMove=function(e,t){if(this.graph.isEnabled()&&this.isEnabled()){var n=[e,t];this.handlers.visit(function(e,t){t.mouseMove.apply(t,n)})}},mxSelectionCellsHandler.prototype.mouseUp=function(e,t){if(this.graph.isEnabled()&&this.isEnabled()){var n=[e,t];this.handlers.visit(function(e,t){t.mouseUp.apply(t,n)})}},mxSelectionCellsHandler.prototype.destroy=function(){this.graph.removeMouseListener(this),null!=this.refreshHandler&&(this.graph.getSelectionModel().removeListener(this.refreshHandler),this.graph.getModel().removeListener(this.refreshHandler),this.graph.getView().removeListener(this.refreshHandler),this.refreshHandler=null)},mxUtils.extend(mxConnectionHandler,mxEventSource),mxConnectionHandler.prototype.graph=null,mxConnectionHandler.prototype.factoryMethod=!0,mxConnectionHandler.prototype.moveIconFront=!1,mxConnectionHandler.prototype.moveIconBack=!1,mxConnectionHandler.prototype.connectImage=null,mxConnectionHandler.prototype.targetConnectImage=!1,mxConnectionHandler.prototype.enabled=!0,mxConnectionHandler.prototype.select=!0,mxConnectionHandler.prototype.createTarget=!1;mxConnectionHandler.prototype.marker=null,mxConnectionHandler.prototype.constraintHandler=null,mxConnectionHandler.prototype.error=null,mxConnectionHandler.prototype.waypointsEnabled=!1,mxConnectionHandler.prototype.tapAndHoldEnabled=!0,mxConnectionHandler.prototype.tapAndHoldDelay=500,mxConnectionHandler.prototype.tapAndHoldInProgress=!1,mxConnectionHandler.prototype.tapAndHoldValid=!1,mxConnectionHandler.prototype.tapAndHoldTolerance=4,mxConnectionHandler.prototype.initialTouchX=0,mxConnectionHandler.prototype.initialTouchY=0,mxConnectionHandler.prototype.ignoreMouseDown=!1,mxConnectionHandler.prototype.first=null,mxConnectionHandler.prototype.connectIconOffset=new mxPoint(0,mxConstants.TOOLTIP_VERTICAL_OFFSET),mxConnectionHandler.prototype.edgeState=null,mxConnectionHandler.prototype.changeHandler=null,mxConnectionHandler.prototype.drillHandler=null,mxConnectionHandler.prototype.mouseDownCounter=0,mxConnectionHandler.prototype.movePreviewAway=mxClient.IS_VML,mxConnectionHandler.prototype.isEnabled=function(){return this.enabled},mxConnectionHandler.prototype.setEnabled=function(e){this.enabled=e},mxConnectionHandler.prototype.isCreateTarget=function(){return this.createTarget},mxConnectionHandler.prototype.setCreateTarget=function(e){this.createTarget=e},mxConnectionHandler.prototype.createShape=function(){var e=new mxPolyline([],mxConstants.INVALID_COLOR);if(e.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,e.init(this.graph.getView().getOverlayPane()),e.svgStrokeTolerance=0,e.pointerEvents=!1,e.isDashed=!0,this.graph.dialect==mxConstants.DIALECT_SVG)e.node.setAttribute("pointer-events","none");else{var t=mxUtils.bind(this,function(e){return e=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(e),mxEvent.getClientY(e)),this.graph.view.getState(this.graph.getCellAt(e.x,e.y))});mxEvent.redirectMouseEvents(e.node,this.graph,t)}return e},mxConnectionHandler.prototype.init=function(){this.graph.addMouseListener(this),this.marker=this.createMarker(),this.constraintHandler=new mxConstraintHandler(this.graph),this.changeHandler=mxUtils.bind(this,function(e){null!=this.iconState&&(this.iconState=this.graph.getView().getState(this.iconState.cell)),null!=this.iconState?this.redrawIcons(this.icons,this.iconState):(this.destroyIcons(this.icons),this.previous=null),this.constraintHandler.reset()}),this.graph.getModel().addListener(mxEvent.CHANGE,this.changeHandler),this.graph.getView().addListener(mxEvent.SCALE,this.changeHandler),this.graph.getView().addListener(mxEvent.TRANSLATE,this.changeHandler),this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE,this.changeHandler),this.drillHandler=mxUtils.bind(this,function(e){this.destroyIcons(this.icons)}),this.graph.addListener(mxEvent.START_EDITING,this.drillHandler),this.graph.getView().addListener(mxEvent.DOWN,this.drillHandler),this.graph.getView().addListener(mxEvent.UP,this.drillHandler)},mxConnectionHandler.prototype.isConnectableCell=function(e){return!0},mxConnectionHandler.prototype.createMarker=function(){var a=new mxCellMarker(this.graph);return a.hotspotEnabled=!0,a.getCell=mxUtils.bind(this,function(e,t){return t=mxCellMarker.prototype.getCell.apply(a,arguments),this.error=null,this.isConnectableCell(t)?(null!=t?this.isConnecting()?null!=this.previous&&(this.error=this.validateConnection(this.previous.cell,t),null!=this.error&&0==this.error.length&&(t=null,this.isCreateTarget()&&(this.error=null))):this.isValidSource(t)||(t=null):this.isConnecting()&&!this.isCreateTarget()&&!this.graph.allowDanglingEdges&&(this.error=""),t):null}),a.isValidState=mxUtils.bind(this,function(e){return this.isConnecting()?null==this.error:mxCellMarker.prototype.isValidState.apply(a,arguments)}),a.getMarkerColor=mxUtils.bind(this,function(e,t,n){return null==this.connectImage||this.isConnecting()?mxCellMarker.prototype.getMarkerColor.apply(a,arguments):null}),a.intersects=mxUtils.bind(this,function(e,t){return!(null==this.connectImage&&!this.isConnecting())||mxCellMarker.prototype.intersects.apply(a,arguments)}),a},mxConnectionHandler.prototype.start=function(e,t,n,a){this.previous=e,this.first=new mxPoint(t,n),this.edgeState=null!=a?a:this.createEdgeState(null),this.marker.currentColor=this.marker.validColor,this.marker.markedState=e,this.marker.mark(),this.fireEvent(new mxEventObject(mxEvent.START,"state",this.previous))},mxConnectionHandler.prototype.isConnecting=function(){return null!=this.first&&null!=this.shape},mxConnectionHandler.prototype.isValidSource=function(e){return this.graph.isValidSource(e)},mxConnectionHandler.prototype.isValidTarget=function(e){return!0},mxConnectionHandler.prototype.validateConnection=function(e,t){return this.isValidTarget(t)?this.graph.getEdgeValidationError(null,e,t):""},mxConnectionHandler.prototype.getConnectImage=function(e){return this.connectImage},mxConnectionHandler.prototype.isMoveIconToFrontForState=function(e){return null!=e.text&&e.text.node.parentNode==this.graph.container||this.moveIconFront},mxConnectionHandler.prototype.createIcons=function(e){if(null==(i=this.getConnectImage(e))||null==e)return null;this.iconState=e;var t=[],n=new mxImageShape(new mxRectangle(0,0,i.width,i.height),i.src,null,null,0);n.preserveImageAspect=!1,this.isMoveIconToFrontForState(e)?(n.dialect=mxConstants.DIALECT_STRICTHTML,n.init(this.graph.container)):(n.dialect=this.graph.dialect==mxConstants.DIALECT_SVG?mxConstants.DIALECT_SVG:mxConstants.DIALECT_VML,n.init(this.graph.getView().getOverlayPane()),this.moveIconBack&&null!=n.node.previousSibling&&n.node.parentNode.insertBefore(n.node,n.node.parentNode.firstChild)),n.node.style.cursor=mxConstants.CURSOR_CONNECT;var a=mxUtils.bind(this,function(){return null!=this.currentState?this.currentState:e}),i=mxUtils.bind(this,function(e){mxEvent.isConsumed(e)||(this.icon=n,this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e,a())))});return mxEvent.redirectMouseEvents(n.node,this.graph,a,i),t.push(n),this.redrawIcons(t,this.iconState),t},mxConnectionHandler.prototype.redrawIcons=function(e,t){if(null!=e&&null!=e[0]&&null!=t){var n=this.getIconPosition(e[0],t);e[0].bounds.x=n.x,e[0].bounds.y=n.y,e[0].redraw()}},mxConnectionHandler.prototype.getIconPosition=function(e,t){var n=this.graph.getView().scale,a=t.getCenterX(),i=t.getCenterY();if(this.graph.isSwimlane(t.cell)){a=0!=(s=this.graph.getStartSize(t.cell)).width?t.x+s.width*n/2:a,i=0!=s.height?t.y+s.height*n/2:i;if(0!=(s=mxUtils.toRadians(mxUtils.getValue(t.style,mxConstants.STYLE_ROTATION)||0))){n=Math.cos(s);var s=Math.sin(s),o=new mxPoint(t.getCenterX(),t.getCenterY());a=(i=mxUtils.getRotatedPoint(new mxPoint(a,i),n,s,o)).x,i=i.y}}return new mxPoint(a-e.bounds.width/2,i-e.bounds.height/2)},mxConnectionHandler.prototype.destroyIcons=function(e){if(null!=e){this.iconState=null;for(var t=0;t<e.length;t++)e[t].destroy()}},mxConnectionHandler.prototype.isStartEvent=function(e){return!this.graph.isForceMarqueeEvent(e.getEvent())&&(null!=this.constraintHandler.currentFocus&&null!=this.constraintHandler.currentConstraint||null!=this.previous&&null==this.error&&(null==this.icons||null!=this.icons&&null!=this.icon))},mxConnectionHandler.prototype.mouseDown=function(e,t){if(this.mouseDownCounter++,this.isEnabled()&&this.graph.isEnabled()&&!t.isConsumed()&&!this.isConnecting()&&this.isStartEvent(t)){if(null!=this.constraintHandler.currentConstraint&&null!=this.constraintHandler.currentFocus&&null!=this.constraintHandler.currentPoint?(this.sourceConstraint=this.constraintHandler.currentConstraint,this.previous=this.constraintHandler.currentFocus,this.first=this.constraintHandler.currentPoint.clone()):this.first=new mxPoint(t.getGraphX(),t.getGraphY()),this.edgeState=this.createEdgeState(t),this.mouseDownCounter=1,this.waypointsEnabled&&null==this.shape&&(this.waypoints=null,this.shape=this.createShape()),null==this.previous&&null!=this.edgeState){var n=this.graph.getPointForEvent(t.getEvent());this.edgeState.cell.geometry.setTerminalPoint(n,!0)}this.fireEvent(new mxEventObject(mxEvent.START,"state",this.previous)),t.consume()}else if(mxClient.IS_TOUCH&&this.tapAndHoldEnabled&&!this.tapAndHoldInProgress&&this.isEnabled()&&this.graph.isEnabled()&&!this.isConnecting()){this.tapAndHoldInProgress=!0,this.initialTouchX=t.getX(),this.initialTouchY=t.getY();var a=this.graph.view.getState(this.marker.getCell(t));this.tapAndHoldThread&&window.clearTimeout(this.tapAndHoldThread),this.tapAndHoldThread=window.setTimeout(mxUtils.bind(this,function(){this.tapAndHoldValid&&this.tapAndHold(t,a),this.tapAndHoldValid=this.tapAndHoldInProgress=!1}),this.tapAndHoldDelay),this.tapAndHoldValid=!0}this.selectedIcon=this.icon,this.icon=null},mxConnectionHandler.prototype.tapAndHold=function(e,t){null!=t&&(this.marker.currentColor=this.marker.validColor,this.marker.markedState=t,this.marker.mark(),this.first=new mxPoint(e.getGraphX(),e.getGraphY()),this.edgeState=this.createEdgeState(e),this.previous=t,this.fireEvent(new mxEventObject(mxEvent.START,"state",this.previous)))},mxConnectionHandler.prototype.isImmediateConnectSource=function(e){return!this.graph.isCellMovable(e.cell)},mxConnectionHandler.prototype.createEdgeState=function(e){return null},mxConnectionHandler.prototype.updateCurrentState=function(e){var t=this.marker.process(e);this.constraintHandler.update(e,null==this.first),this.currentState=t},mxConnectionHandler.prototype.convertWaypoint=function(e){var t=this.graph.getView().getScale(),n=this.graph.getView().getTranslate();e.x=e.x/t-n.x,e.y=e.y/t-n.y},mxConnectionHandler.prototype.mouseMove=function(e,t){if(this.tapAndHoldValid&&(this.tapAndHoldValid=Math.abs(this.initialTouchX-t.getX())<this.tapAndHoldTolerance&&Math.abs(this.initialTouchY-t.getY())<this.tapAndHoldTolerance),t.isConsumed()||!this.ignoreMouseDown&&null==this.first&&this.graph.isMouseDown)this.constraintHandler.reset();else{if(!this.isEnabled()&&null!=this.currentState&&(this.destroyIcons(this.icons),this.currentState=null),(null!=this.first||this.isEnabled()&&this.graph.isEnabled())&&this.updateCurrentState(t),null!=this.first){var n=this.graph.getView().scale,a=null,i=n=new mxPoint(this.graph.snap(t.getGraphX()/n)*n,this.graph.snap(t.getGraphY()/n)*n);null!=this.constraintHandler.currentConstraint&&null!=this.constraintHandler.currentFocus&&null!=this.constraintHandler.currentPoint&&(a=this.constraintHandler.currentConstraint,i=this.constraintHandler.currentPoint.clone());var s=this.first;if(null!=this.selectedIcon){var o=this.selectedIcon.bounds.width,r=this.selectedIcon.bounds.height;null!=this.currentState&&this.targetConnectImage?(o=this.getIconPosition(this.selectedIcon,this.currentState),this.selectedIcon.bounds.x=o.x,this.selectedIcon.bounds.y=o.y):(o=new mxRectangle(t.getGraphX()+this.connectIconOffset.x,t.getGraphY()+this.connectIconOffset.y,o,r),this.selectedIcon.bounds=o),this.selectedIcon.redraw()}if(null!=this.edgeState){if(this.edgeState.absolutePoints=[null,null!=this.currentState?null:i],this.graph.view.updateFixedTerminalPoint(this.edgeState,this.previous,!0,this.sourceConstraint),null!=this.currentState&&(null==a&&(a=this.graph.getConnectionConstraint(this.edgeState,this.previous,!1)),this.edgeState.setAbsoluteTerminalPoint(null,!1),this.graph.view.updateFixedTerminalPoint(this.edgeState,this.currentState,!1,a)),(s=null)!=this.waypoints)for(s=[],i=0;i<this.waypoints.length;i++)a=this.waypoints[i].clone(),this.convertWaypoint(a),s[i]=a;this.graph.view.updatePoints(this.edgeState,s,this.previous,this.currentState),this.graph.view.updateFloatingTerminalPoints(this.edgeState,this.previous,this.currentState),i=this.edgeState.absolutePoints[this.edgeState.absolutePoints.length-1],s=this.edgeState.absolutePoints[0]}else null!=this.currentState&&null==this.constraintHandler.currentConstraint&&(null!=(o=this.getTargetPerimeterPoint(this.currentState,t))&&(i=o)),null==this.sourceConstraint&&null!=this.previous&&(null!=(o=this.getSourcePerimeterPoint(this.previous,null!=this.waypoints&&0<this.waypoints.length?this.waypoints[0]:i,t))&&(s=o));if(null==this.currentState&&this.movePreviewAway){if(o=s,null!=this.edgeState&&2<this.edgeState.absolutePoints.length&&(null!=(a=this.edgeState.absolutePoints[this.edgeState.absolutePoints.length-2])&&(o=a)),a=i.x-o.x,o=i.y-o.y,0==(r=Math.sqrt(a*a+o*o)))return;i.x-=4*a/r,i.y-=4*o/r}null==this.shape&&(a=Math.abs(n.x-this.first.x),o=Math.abs(n.y-this.first.y),a>this.graph.tolerance||o>this.graph.tolerance)&&(this.shape=this.createShape(),this.updateCurrentState(t)),null!=this.shape&&(null!=this.edgeState?this.shape.points=this.edgeState.absolutePoints:(n=[s],null!=this.waypoints&&(n=n.concat(this.waypoints)),n.push(i),this.shape.points=n),this.drawPreview()),mxEvent.consume(t.getEvent()),t.consume()}else this.isEnabled()&&this.graph.isEnabled()?this.previous!=this.currentState&&null==this.edgeState?(this.destroyIcons(this.icons),(this.icons=null)!=this.currentState&&null==this.error&&(this.icons=this.createIcons(this.currentState),null==this.icons&&(this.currentState.setCursor(mxConstants.CURSOR_CONNECT),t.consume())),this.previous=this.currentState):this.previous==this.currentState&&null!=this.currentState&&null==this.icons&&!this.graph.isMouseDown&&t.consume():this.constraintHandler.reset();if(null!=this.constraintHandler.currentConstraint&&this.marker.reset(),!this.graph.isMouseDown&&null!=this.currentState&&null!=this.icons){for(n=!1,s=t.getSource(),i=0;i<this.icons.length&&!n;i++)n=s==this.icons[i].node||s.parentNode==this.icons[i].node;n||this.updateIcons(this.currentState,this.icons,t)}}},mxConnectionHandler.prototype.getTargetPerimeterPoint=function(e,t){var n=null,a=(i=e.view).getPerimeterFunction(e);if(null!=a){var i,s=null!=this.waypoints&&0<this.waypoints.length?this.waypoints[this.waypoints.length-1]:new mxPoint(this.previous.getCenterX(),this.previous.getCenterY());null!=(i=a(i.getPerimeterBounds(e),this.edgeState,s,!1))&&(n=i)}else n=new mxPoint(e.getCenterX(),e.getCenterY());return n},mxConnectionHandler.prototype.getSourcePerimeterPoint=function(e,t,n){n=null;var a=e.view,i=a.getPerimeterFunction(e),s=new mxPoint(e.getCenterX(),e.getCenterY());if(null!=i){var o=mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION,0),r=-o*(Math.PI/180);0!=o&&(t=mxUtils.getRotatedPoint(new mxPoint(t.x,t.y),Math.cos(r),Math.sin(r),s)),null!=(e=i(a.getPerimeterBounds(e),e,t,!1))&&(0!=o&&(e=mxUtils.getRotatedPoint(new mxPoint(e.x,e.y),Math.cos(-r),Math.sin(-r),s)),n=e)}else n=s;return n},mxConnectionHandler.prototype.updateIcons=function(e,t,n){},mxConnectionHandler.prototype.isStopEvent=function(e){return null!=e.getState()},mxConnectionHandler.prototype.addWaypointForEvent=function(e){var t=mxUtils.convertPoint(this.graph.container,e.getX(),e.getY()),n=Math.abs(t.x-this.first.x);t=Math.abs(t.y-this.first.y);(null!=this.waypoints||1<this.mouseDownCounter&&(n>this.graph.tolerance||t>this.graph.tolerance))&&(null==this.waypoints&&(this.waypoints=[]),n=this.graph.view.scale,t=new mxPoint(this.graph.snap(e.getGraphX()/n)*n,this.graph.snap(e.getGraphY()/n)*n),this.waypoints.push(t))},mxConnectionHandler.prototype.mouseUp=function(e,t){if(!t.isConsumed()&&this.isConnecting()){if(this.waypointsEnabled&&!this.isStopEvent(t))return this.addWaypointForEvent(t),void t.consume();if(null==this.error){var n=null!=this.previous?this.previous.cell:null,a=null;null!=this.constraintHandler.currentConstraint&&null!=this.constraintHandler.currentFocus&&(a=this.constraintHandler.currentFocus.cell),null==a&&this.marker.hasValidState()&&(a=this.marker.validState.cell),this.connect(n,a,t.getEvent(),t.getCell())}else null!=this.previous&&null!=this.marker.validState&&this.previous.cell==this.marker.validState.cell&&this.graph.selectCellForEvent(this.marker.source,evt),0<this.error.length&&this.graph.validationAlert(this.error);this.destroyIcons(this.icons),t.consume()}null!=this.first&&this.reset(),this.tapAndHoldValid=this.tapAndHoldInProgress=!1},mxConnectionHandler.prototype.reset=function(){null!=this.shape&&(this.shape.destroy(),this.shape=null),this.destroyIcons(this.icons),this.icons=null,this.marker.reset(),this.constraintHandler.reset(),this.sourceConstraint=this.error=this.previous=this.edgeState=this.selectedIcon=null,this.mouseDownCounter=0,this.icon=this.first=null,this.fireEvent(new mxEventObject(mxEvent.RESET))},mxConnectionHandler.prototype.drawPreview=function(){var e=null==this.error;this.shape.strokewidth=this.getEdgeWidth(e),e=this.getEdgeColor(e),this.shape.stroke=e,this.shape.redraw()},mxConnectionHandler.prototype.getEdgeColor=function(e){return e?mxConstants.VALID_COLOR:mxConstants.INVALID_COLOR},mxConnectionHandler.prototype.getEdgeWidth=function(e){return e?3:1},mxConnectionHandler.prototype.connect=function(e,t,n,a){if(null!=t||this.isCreateTarget()||this.graph.allowDanglingEdges){var i=this.graph.getModel(),s=null;i.beginUpdate();try{if(null!=e&&null==t&&this.isCreateTarget()&&null!=(t=this.createTargetVertex(n,e))){if(null!=(a=this.graph.getDropTarget([t],n,a))&&this.graph.getModel().isEdge(a))a=this.graph.getDefaultParent();else{var o=this.graph.getView().getState(a);if(null!=o){var r=i.getGeometry(t);r.x-=o.origin.x,r.y-=o.origin.y}}this.graph.addCell(t,a)}var l=this.graph.getDefaultParent();if(null!=e&&null!=t&&i.getParent(e)==i.getParent(t)&&i.getParent(i.getParent(e))!=i.getRoot()&&(l=i.getParent(e),null!=e.geometry&&e.geometry.relative&&null!=t.geometry&&t.geometry.relative&&(l=i.getParent(l))),r=o=null,null!=this.edgeState&&(o=this.edgeState.cell.value,r=this.edgeState.cell.style),null!=(s=this.insertEdge(l,null,o,e,t,r))){this.graph.setConnectionConstraint(s,e,!0,this.sourceConstraint),this.graph.setConnectionConstraint(s,t,!1,this.constraintHandler.currentConstraint),null!=this.edgeState&&i.setGeometry(s,this.edgeState.cell.geometry);var d=i.getGeometry(s);if(null==d&&((d=new mxGeometry).relative=!0,i.setGeometry(s,d)),null!=this.waypoints&&0<this.waypoints.length){var c=this.graph.view.scale,m=this.graph.view.translate;for(d.points=[],e=0;e<this.waypoints.length;e++){var u=this.waypoints[e];d.points.push(new mxPoint(u.x/c-m.x,u.y/c-m.y))}}null==t&&((u=this.graph.getPointForEvent(n,!1)).x-=this.graph.panDx/this.graph.view.scale,u.y-=this.graph.panDy/this.graph.view.scale,d.setTerminalPoint(u,!1)),this.fireEvent(new mxEventObject(mxEvent.CONNECT,"cell",s,"event",n,"target",a))}}catch(e){mxLog.show(),mxLog.debug(e.message)}finally{i.endUpdate()}this.select&&this.selectCells(s,t)}},mxConnectionHandler.prototype.selectCells=function(e,t){this.graph.setSelectionCell(e)},mxConnectionHandler.prototype.insertEdge=function(e,t,n,a,i,s){return null==this.factoryMethod?this.graph.insertEdge(e,t,n,a,i,s):(t=this.createEdge(n,a,i,s),this.graph.addEdge(t,e,a,i))},mxConnectionHandler.prototype.createTargetVertex=function(e,t){for(var n=this.graph.getCellGeometry(t);null!=n&&n.relative;)t=this.graph.getModel().getParent(t),n=this.graph.getCellGeometry(t);var a=this.graph.cloneCells([t])[0];if(null!=(n=this.graph.getModel().getGeometry(a))){var i=this.graph.getPointForEvent(e);if(n.x=this.graph.snap(i.x-n.width/2)-this.graph.panDx/this.graph.view.scale,n.y=this.graph.snap(i.y-n.height/2)-this.graph.panDy/this.graph.view.scale,null!=this.first){var s=this.graph.view.getState(t);if(null!=s){var o=this.getAlignmentTolerance();Math.abs(this.graph.snap(this.first.x)-this.graph.snap(i.x))<=o?n.x=s.x:Math.abs(this.graph.snap(this.first.y)-this.graph.snap(i.y))<=o&&(n.y=s.y)}}}return a},mxConnectionHandler.prototype.getAlignmentTolerance=function(){return this.graph.isGridEnabled()?this.graph.gridSize:this.graph.tolerance},mxConnectionHandler.prototype.createEdge=function(e,t,n,a){var i=null;return null!=this.factoryMethod&&(i=this.factoryMethod(t,n,a)),null==i&&((i=new mxCell(e||"")).setEdge(!0),i.setStyle(a),(e=new mxGeometry).relative=!0,i.setGeometry(e)),i},mxConnectionHandler.prototype.destroy=function(){this.graph.removeMouseListener(this),null!=this.shape&&(this.shape.destroy(),this.shape=null),null!=this.marker&&(this.marker.destroy(),this.marker=null),null!=this.constraintHandler&&(this.constraintHandler.destroy(),this.constraintHandler=null),null!=this.changeHandler&&(this.graph.getModel().removeListener(this.changeHandler),this.graph.getView().removeListener(this.changeHandler),this.changeHandler=null),null!=this.drillHandler&&(this.graph.removeListener(this.drillHandler),this.graph.getView().removeListener(this.drillHandler),this.drillHandler=null)},mxConstraintHandler.prototype.pointImage=new mxImage(mxClient.imageBasePath+"/point.gif",5,5),mxConstraintHandler.prototype.graph=null,mxConstraintHandler.prototype.enabled=!0,mxConstraintHandler.prototype.highlightColor=mxConstants.DEFAULT_VALID_COLOR,mxConstraintHandler.prototype.isEnabled=function(){return this.enabled},mxConstraintHandler.prototype.setEnabled=function(e){this.enabled=e},mxConstraintHandler.prototype.reset=function(){if(null!=this.focusIcons){for(var e=0;e<this.focusIcons.length;e++)this.focusIcons[e].destroy();this.focusIcons=null}null!=this.focusHighlight&&(this.focusHighlight.destroy(),this.focusHighlight=null),this.focusPoints=this.currentFocus=this.currentPoint=this.currentFocusArea=this.currentConstraint=null},mxConstraintHandler.prototype.getTolerance=function(){return this.graph.getTolerance()},mxConstraintHandler.prototype.getImageForConstraint=function(e,t,n){return this.pointImage},mxConstraintHandler.prototype.isEventIgnored=function(e,t){return!1},mxConstraintHandler.prototype.update=function(e,t){if(this.isEnabled()&&!this.isEventIgnored(e)){var n=this.getTolerance(),a=new mxRectangle(e.getGraphX()-n,e.getGraphY()-n,2*n,2*n),i=null!=e.getCell()&&this.graph.isCellConnectable(e.getCell());if((null==this.currentFocusArea||!mxUtils.intersects(this.currentFocusArea,a)||null!=e.getState()&&null!=this.currentFocus&&i)&&(this.currentFocusArea=null,e.getState()!=this.currentFocus))if(this.currentFocus=null,this.constraints=null!=e.getState()&&i?this.graph.getAllConnectionConstraints(e.getState(),t):null,null!=this.constraints){if(this.currentFocus=e.getState(),this.currentFocusArea=new mxRectangle(e.getState().x,e.getState().y,e.getState().width,e.getState().height),null!=this.focusIcons){for(i=0;i<this.focusIcons.length;i++)this.focusIcons[i].destroy();this.focusPoints=this.focusIcons=null}for(this.focusIcons=[],this.focusPoints=[],i=0;i<this.constraints.length;i++){var s,o=this.graph.getConnectionPoint(e.getState(),this.constraints[i]),r=(s=this.getImageForConstraint(e.getState(),this.constraints[i],o)).src;(s=new mxImageShape(s=new mxRectangle(o.x-s.width/2,o.y-s.height/2,s.width,s.height),r)).dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_MIXEDHTML:mxConstants.DIALECT_SVG,s.preserveImageAspect=!1,s.init(this.graph.getView().getOverlayPane()),null!=s.node.previousSibling&&s.node.parentNode.insertBefore(s.node,s.node.parentNode.firstChild),r=mxUtils.bind(this,function(){return null!=this.currentFocus?this.currentFocus:e.getState()}),s.redraw(),mxEvent.redirectMouseEvents(s.node,this.graph,r),this.currentFocusArea.add(s.bounds),this.focusIcons.push(s),this.focusPoints.push(o)}this.currentFocusArea.grow(n)}else if(null!=this.focusIcons){for(null!=this.focusHighlight&&(this.focusHighlight.destroy(),this.focusHighlight=null),i=0;i<this.focusIcons.length;i++)this.focusIcons[i].destroy();this.focusPoints=this.focusIcons=null}if(this.currentPoint=this.currentConstraint=null,null!=this.focusIcons&&null!=this.constraints&&(null==e.getState()||this.currentFocus==e.getState()))for(i=0;i<this.focusIcons.length;i++)if(mxUtils.intersects(this.focusIcons[i].bounds,a)){this.currentConstraint=this.constraints[i],this.currentPoint=this.focusPoints[i],(n=this.focusIcons[i].bounds.clone()).grow(mxClient.IS_IE?3:2),mxClient.IS_IE&&(n.width-=1,n.height-=1),null==this.focusHighlight?((n=new mxRectangleShape(n,null,this.highlightColor,3)).dialect=this.graph.dialect==mxConstants.DIALECT_SVG?mxConstants.DIALECT_SVG:mxConstants.DIALECT_VML,n.init(this.graph.getView().getOverlayPane()),this.focusHighlight=n,r=mxUtils.bind(this,function(){return null!=this.currentFocus?this.currentFocus:e.getState()}),mxEvent.redirectMouseEvents(n.node,this.graph,r)):(this.focusHighlight.bounds=n,this.focusHighlight.redraw());break}null==this.currentConstraint&&null!=this.focusHighlight&&(this.focusHighlight.destroy(),this.focusHighlight=null)}},mxConstraintHandler.prototype.destroy=function(){this.reset()},mxRubberband.prototype.defaultOpacity=20,mxRubberband.prototype.enabled=!0,mxRubberband.prototype.div=null,mxRubberband.prototype.sharedDiv=null,mxRubberband.prototype.currentX=0,mxRubberband.prototype.currentY=0,mxRubberband.prototype.isEnabled=function(){return this.enabled},mxRubberband.prototype.setEnabled=function(e){this.enabled=e},mxRubberband.prototype.mouseDown=function(e,t){if(!t.isConsumed()&&this.isEnabled()&&this.graph.isEnabled()&&(this.graph.isForceMarqueeEvent(t.getEvent())||null==t.getState())){var n=mxUtils.getOffset(this.graph.container),a=mxUtils.getScrollOrigin(this.graph.container);if(a.x-=n.x,a.y-=n.y,this.start(t.getX()+a.x,t.getY()+a.y),mxClient.IS_NS&&!mxClient.IS_SF&&!mxClient.IS_GC){var i=this.graph.container,s=function(e){e=new mxMouseEvent(e);var t=mxUtils.convertPoint(i,e.getX(),e.getY());return e.graphX=t.x,e.graphY=t.y,e};this.dragHandler=mxUtils.bind(this,function(e){this.mouseMove(this.graph,s(e))}),this.dropHandler=mxUtils.bind(this,function(e){this.mouseUp(this.graph,s(e))}),mxEvent.addListener(document,"mousemove",this.dragHandler),mxEvent.addListener(document,"mouseup",this.dropHandler)}t.consume(!1)}},mxRubberband.prototype.start=function(e,t){this.first=new mxPoint(e,t)},mxRubberband.prototype.mouseMove=function(e,t){if(!t.isConsumed()&&null!=this.first){var n=mxUtils.getScrollOrigin(this.graph.container),a=mxUtils.getOffset(this.graph.container);n.x-=a.x,n.y-=a.y;a=t.getX()+n.x,n=t.getY()+n.y;var i=this.first.x-a,s=this.first.y-n,o=this.graph.tolerance;(null!=this.div||Math.abs(i)>o||Math.abs(s)>o)&&(null==this.div&&(this.div=this.createShape()),mxUtils.clearSelection(),this.update(a,n),t.consume())}},mxRubberband.prototype.createShape=function(){return null==this.sharedDiv&&(this.sharedDiv=document.createElement("div"),this.sharedDiv.className="mxRubberband",mxUtils.setOpacity(this.sharedDiv,this.defaultOpacity)),this.graph.container.appendChild(this.sharedDiv),this.sharedDiv},mxRubberband.prototype.mouseUp=function(e,t){var n=null!=this.div;this.reset(),n&&(n=new mxRectangle(this.x,this.y,this.width,this.height),this.graph.selectRegion(n,t.getEvent()),t.consume())},mxRubberband.prototype.reset=function(){null!=this.div&&this.div.parentNode.removeChild(this.div),null!=this.dragHandler&&(mxEvent.removeListener(document,"mousemove",this.dragHandler),this.dragHandler=null),null!=this.dropHandler&&(mxEvent.removeListener(document,"mouseup",this.dropHandler),this.dropHandler=null),this.currentY=this.currentX=0,this.div=this.first=null},mxRubberband.prototype.update=function(e,t){this.currentX=e,this.currentY=t,this.repaint()},mxRubberband.prototype.repaint=function(){if(null!=this.div){var e=this.currentX-this.graph.panDx,t=this.currentY-this.graph.panDy;this.x=Math.min(this.first.x,e),this.y=Math.min(this.first.y,t),this.width=Math.max(this.first.x,e)-this.x,this.height=Math.max(this.first.y,t)-this.y,e=mxClient.IS_VML?this.graph.panDy:0,this.div.style.left=this.x+(mxClient.IS_VML?this.graph.panDx:0)+"px",this.div.style.top=this.y+e+"px",this.div.style.width=Math.max(1,this.width)+"px",this.div.style.height=Math.max(1,this.height)+"px"}},mxRubberband.prototype.destroy=function(){this.destroyed||(this.destroyed=!0,this.graph.removeMouseListener(this),this.graph.removeListener(this.panHandler),this.reset(),null!=this.sharedDiv&&(this.sharedDiv=null))},mxVertexHandler.prototype.graph=null,mxVertexHandler.prototype.state=null,mxVertexHandler.prototype.singleSizer=!1,mxVertexHandler.prototype.index=null,mxVertexHandler.prototype.allowHandleBoundsCheck=!0,mxVertexHandler.prototype.handleImage=null,mxVertexHandler.prototype.tolerance=0,mxVertexHandler.prototype.rotationEnabled=!1,mxVertexHandler.prototype.rotationRaster=!0,mxVertexHandler.prototype.init=function(){if(this.graph=this.state.view.graph,this.selectionBounds=this.getSelectionBounds(this.state),this.bounds=new mxRectangle(this.selectionBounds.x,this.selectionBounds.y,this.selectionBounds.width,this.selectionBounds.height),this.selectionBorder=this.createSelectionShape(this.bounds),this.selectionBorder.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,this.selectionBorder.pointerEvents=!1,this.selectionBorder.init(this.graph.getView().getOverlayPane()),this.graph.isCellMovable(this.state.cell)&&(this.selectionBorder.node.style.cursor=mxConstants.CURSOR_MOVABLE_VERTEX),mxEvent.redirectMouseEvents(this.selectionBorder.node,this.graph,this.state),mxGraphHandler.prototype.maxCells<=0||this.graph.getSelectionCount()<mxGraphHandler.prototype.maxCells){var e=this.graph.isCellResizable(this.state.cell);if(this.sizers=[],e||this.graph.isLabelMovable(this.state.cell)&&2<=this.state.width&&2<=this.state.height){var t=0;e&&(this.singleSizer||(this.sizers.push(this.createSizer("nw-resize",t++)),this.sizers.push(this.createSizer("n-resize",t++)),this.sizers.push(this.createSizer("ne-resize",t++)),this.sizers.push(this.createSizer("w-resize",t++)),this.sizers.push(this.createSizer("e-resize",t++)),this.sizers.push(this.createSizer("sw-resize",t++)),this.sizers.push(this.createSizer("s-resize",t++))),this.sizers.push(this.createSizer("se-resize",t++))),null!=(e=this.graph.model.getGeometry(this.state.cell))&&!e.relative&&!this.graph.isSwimlane(this.state.cell)&&this.graph.isLabelMovable(this.state.cell)&&(this.labelShape=this.createSizer(mxConstants.CURSOR_LABEL_HANDLE,mxEvent.LABEL_HANDLE,mxConstants.LABEL_HANDLE_SIZE,mxConstants.LABEL_HANDLE_FILLCOLOR),this.sizers.push(this.labelShape))}else this.graph.isCellMovable(this.state.cell)&&!this.graph.isCellResizable(this.state.cell)&&this.state.width<2&&this.state.height<2&&(this.labelShape=this.createSizer(mxConstants.CURSOR_MOVABLE_VERTEX,null,null,mxConstants.LABEL_HANDLE_FILLCOLOR),this.sizers.push(this.labelShape))}this.rotationEnabled&&(mxGraphHandler.prototype.maxCells<=0||this.graph.getSelectionCount()<mxGraphHandler.prototype.maxCells)&&(this.rotationShape=this.createSizer("pointer",mxEvent.ROTATION_HANDLE,mxConstants.HANDLE_SIZE+3,mxConstants.HANDLE_FILLCOLOR),this.sizers.push(this.rotationShape)),this.redraw()},mxVertexHandler.prototype.getSelectionBounds=function(e){return new mxRectangle(Math.round(e.x),Math.round(e.y),Math.round(e.width),Math.round(e.height))},mxVertexHandler.prototype.createSelectionShape=function(e){return(e=new mxRectangleShape(e,null,this.getSelectionColor())).strokewidth=this.getSelectionStrokeWidth(),e.isDashed=this.isSelectionDashed(),e},mxVertexHandler.prototype.getSelectionColor=function(){return mxConstants.VERTEX_SELECTION_COLOR},mxVertexHandler.prototype.getSelectionStrokeWidth=function(){return mxConstants.VERTEX_SELECTION_STROKEWIDTH},mxVertexHandler.prototype.isSelectionDashed=function(){return mxConstants.VERTEX_SELECTION_DASHED},mxVertexHandler.prototype.createSizer=function(e,t,n,a){return n=new mxRectangle(0,0,n=n||mxConstants.HANDLE_SIZE,n),(a=this.createSizerShape(n,t,a)).isHtmlAllowed()&&null!=this.state.text&&this.state.text.node.parentNode==this.graph.container?(a.bounds.height-=1,a.bounds.width-=1,a.dialect=mxConstants.DIALECT_STRICTHTML,a.init(this.graph.container)):(a.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_MIXEDHTML:mxConstants.DIALECT_SVG,a.init(this.graph.getView().getOverlayPane())),mxEvent.redirectMouseEvents(a.node,this.graph,this.state),this.graph.isEnabled()&&(a.node.style.cursor=e),this.isSizerVisible(t)||(a.node.style.visibility="hidden"),a},mxVertexHandler.prototype.isSizerVisible=function(e){return!0},mxVertexHandler.prototype.createSizerShape=function(e,t,n){return null!=this.handleImage?(e.width=this.handleImage.width,e.height=this.handleImage.height,new mxImageShape(e,this.handleImage.src)):t==mxEvent.ROTATION_HANDLE?new mxEllipse(e,n||mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR):new mxRectangleShape(e,n||mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR)},mxVertexHandler.prototype.moveSizerTo=function(e,t,n){null!=e&&(e.bounds.x=Math.round(t-e.bounds.width/2),e.bounds.y=Math.round(n-e.bounds.height/2),e.redraw())},mxVertexHandler.prototype.getHandleForEvent=function(e){if(e.isSource(this.rotationShape))return mxEvent.ROTATION_HANDLE;if(e.isSource(this.labelShape))return mxEvent.LABEL_HANDLE;if(null!=this.sizers)for(var t=this.tolerance,n=(t=this.allowHandleBoundsCheck&&(mxClient.IS_IE||0<t)?new mxRectangle(e.getGraphX()-t,e.getGraphY()-t,2*t,2*t):null,0);n<this.sizers.length;n++)if(e.isSource(this.sizers[n])||null!=t&&mxUtils.intersects(this.sizers[n].bounds,t))return n;return null},mxVertexHandler.prototype.mouseDown=function(e,t){if(!t.isConsumed()&&this.graph.isEnabled()&&!this.graph.isForceMarqueeEvent(t.getEvent())&&(0<this.tolerance||t.getState()==this.state)){var n=this.getHandleForEvent(t);null!=n&&(this.start(t.getX(),t.getY(),n),t.consume())}},mxVertexHandler.prototype.start=function(e,t,n){e=mxUtils.convertPoint(this.graph.container,e,t),this.startX=e.x,this.startY=e.y,this.index=n,this.selectionBorder.node.style.display=n==mxEvent.ROTATION_HANDLE?"inline":"none",this.preview=this.createSelectionShape(this.bounds),mxClient.IS_SVG&&0!=Number(this.state.style[mxConstants.STYLE_ROTATION]||"0")||null==this.state.text||this.state.text.node.parentNode!=this.graph.container?(this.preview.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,this.preview.init(this.graph.view.getOverlayPane())):(this.preview.dialect=mxConstants.DIALECT_STRICTHTML,this.preview.init(this.graph.container))},mxVertexHandler.prototype.mouseMove=function(e,t){if(t.isConsumed()||null==this.index)null!=this.getHandleForEvent(t)&&t.consume(!1);else{var n=new mxPoint(t.getGraphX(),t.getGraphY()),a=this.graph.isGridEnabledEvent(t.getEvent()),i=this.graph.getView().scale;if(this.index==mxEvent.LABEL_HANDLE)a&&(n.x=this.graph.snap(n.x/i)*i,n.y=this.graph.snap(n.y/i)*i),this.moveSizerTo(this.sizers[this.sizers.length-1],n.x,n.y);else if(this.index==mxEvent.ROTATION_HANDLE){var s=this.state.x+this.state.width/2-n.x,o=this.state.y+this.state.height/2-n.y;this.currentAlpha=0!=s?180*Math.atan(o/s)/Math.PI+90:o<0?180:0,0<s&&(this.currentAlpha-=180),this.rotationRaster&&(s=n.x-this.state.getCenterX(),o=n.y-this.state.getCenterY(),s=Math.abs(Math.sqrt(s*s+o*o)-this.state.height/2-20),s=Math.max(1,5*Math.min(3,Math.max(0,Math.round(80/Math.abs(s))))),this.currentAlpha=Math.round(this.currentAlpha/s)*s),this.selectionBorder.rotation=this.currentAlpha,this.selectionBorder.redraw()}else{var r=mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION]||"0"),l=Math.cos(-r),d=Math.sin(-r),c=new mxPoint(this.state.getCenterX(),this.state.getCenterY()),m=(s=n.x-this.startX,o=n.y-this.startY,n=this.graph.view.translate,d*s+l*o);s=l*s-d*o;this.bounds=this.union(this.selectionBounds,s,m,this.index,a,i,n),l=Math.cos(r),c=(d=Math.sin(r))*(s=(o=new mxPoint(this.bounds.getCenterX(),this.bounds.getCenterY())).x-c.x)+l*(o=o.y-c.y)-o,this.bounds.x+=l*s-d*o-s,this.bounds.y+=c,this.drawPreview()}t.consume()}},mxVertexHandler.prototype.mouseUp=function(e,t){if(!t.isConsumed()&&null!=this.index&&null!=this.state){var n=new mxPoint(t.getGraphX(),t.getGraphY());this.graph.getModel().beginUpdate();try{if(this.index==mxEvent.ROTATION_HANDLE)null!=this.currentAlpha&&this.rotateCell(this.state.cell,this.currentAlpha-(this.state.style[mxConstants.STYLE_ROTATION]||0));else{var a=this.graph.isGridEnabledEvent(t.getEvent()),i=mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION]||"0"),s=Math.cos(-i),o=Math.sin(-i),r=(n=o*(r=n.x-this.startX)+s*(l=n.y-this.startY),s*r-o*l),l=n,d=this.graph.view.scale;this.resizeCell(this.state.cell,r/d,l/d,this.index,a)}}finally{this.graph.getModel().endUpdate()}this.reset(),t.consume()}},mxVertexHandler.prototype.rotateCell=function(e,t){var n=this.graph.getModel();if(n.isVertex(e)){if(null!=(s=e==this.state?this.state:this.graph.view.getState(e))&&this.graph.setCellStyles(mxConstants.STYLE_ROTATION,(s.style[mxConstants.STYLE_ROTATION]||0)+t,[e]),this.state.cell!=e&&(null!=(s=this.graph.getCellGeometry(e))&&!s.relative))if(0!=t){var a=this.graph.getModel().getParent(e),i=this.graph.getCellGeometry(a);if(!s.relative&&null!=i){var s,o=mxUtils.toRadians(t),r=(a=Math.cos(o),o=Math.sin(o),new mxPoint(s.getCenterX(),s.getCenterY()));i=new mxPoint(i.width/2,i.height/2),a=mxUtils.getRotatedPoint(r,a,o,i);(s=s.clone()).x=a.x-s.width/2,s.y=a.y-s.height/2,n.setGeometry(e,s)}}else(s=s.clone()).x+=dx,s.y+=dy,n.setGeometry(e,s);for(s=n.getChildCount(e),a=0;a<s;a++)this.rotateCell(n.getChildAt(e,a),t)}},mxVertexHandler.prototype.reset=function(){this.index=this.currentAlpha=null,null!=this.preview&&(this.preview.destroy(),this.preview=null),null!=this.selectionBorder&&(this.selectionBorder.node.style.display="inline",this.selectionBounds=this.getSelectionBounds(this.state),this.bounds=new mxRectangle(this.selectionBounds.x,this.selectionBounds.y,this.selectionBounds.width,this.selectionBounds.height),this.drawPreview())},mxVertexHandler.prototype.resizeCell=function(e,t,n,a,i){var s=this.graph.model.getGeometry(e);if(null!=s)if(a==mxEvent.LABEL_HANDLE)a=this.graph.view.scale,t=(this.labelShape.bounds.getCenterX()-this.startX)/a,n=(this.labelShape.bounds.getCenterY()-this.startY)/a,null==(s=s.clone()).offset?s.offset=new mxPoint(t,n):(s.offset.x+=t,s.offset.y+=n),this.graph.model.setGeometry(e,s);else{if(a=this.union(s,t,n,a,i,1,new mxPoint(0,0)),0!=(r=mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION]||"0"))){t=a.getCenterX()-s.getCenterX(),n=a.getCenterY()-s.getCenterY(),i=Math.cos(r);var o=Math.sin(r),r=i*t-o*n-t;t=o*t+i*n-n,n=a.x-s.x;var l=a.y-s.y,d=i*n-o*l;i=o*n+i*l,a.x+=r,a.y+=t,this.graph.isCellCollapsed(e)||0==r&&0==t||(n=s.x-a.x+d,l=s.y-a.y+i,this.moveChildren(e,n,l))}this.graph.resizeCell(e,a)}},mxVertexHandler.prototype.moveChildren=function(e,t,n){for(var a=this.graph.getModel(),i=a.getChildCount(e),s=0;s<i;s++){var o=a.getChildAt(e,s);if(a.isVertex(o)){var r=this.graph.getCellGeometry(o);null!=r&&!r.relative&&((r=r.clone()).x+=t,r.y+=n,a.setGeometry(o,r))}}},mxVertexHandler.prototype.union=function(e,t,n,a,i,s,o){if(this.singleSizer){o=e.x+e.width+t;var r=e.y+e.height+n;return i&&(o=this.graph.snap(o/s)*s,r=this.graph.snap(r/s)*s),(s=new mxRectangle(e.x,e.y,0,0)).add(new mxRectangle(o,r,0,0)),s}var l=(r=e.x-o.x*s)+e.width,d=e.y-o.y*s;return e=d+e.height,4<a?(e+=n,i&&(e=this.graph.snap(e/s)*s)):a<3&&(d+=n,i&&(d=this.graph.snap(d/s)*s)),0==a||3==a||5==a?(r+=t,i&&(r=this.graph.snap(r/s)*s)):2!=a&&4!=a&&7!=a||(l+=t,i&&(l=this.graph.snap(l/s)*s)),e-=d,(i=l-r)<0&&(r+=i,i=Math.abs(i)),e<0&&(d+=e,e=Math.abs(e)),new mxRectangle(r+o.x*s,d+o.y*s,i,e)},mxVertexHandler.prototype.redraw=function(){this.selectionBounds=this.getSelectionBounds(this.state),this.bounds=new mxRectangle(this.state.x,this.state.y,this.state.width,this.state.height);var e=this.state;if(null!=this.sizers){var t=e.x+e.width,n=e.y+e.height;if(this.singleSizer)this.moveSizerTo(this.sizers[0],t,n);else{var a=e.x+e.width/2,i=e.y+e.height/2;if(1<this.sizers.length){var s=mxUtils.toRadians(e.style[mxConstants.STYLE_ROTATION]||"0"),o=Math.cos(s),r=(s=Math.sin(s),new mxPoint(e.getCenterX(),e.getCenterY())),l=mxUtils.getRotatedPoint(new mxPoint(e.x,e.y),o,s,r);this.moveSizerTo(this.sizers[0],l.x,l.y),l.x=a,l.y=e.y,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[1],l.x,l.y),l.x=t,l.y=e.y,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[2],l.x,l.y),l.x=e.x,l.y=i,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[3],l.x,l.y),l.x=t,l.y=i,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[4],l.x,l.y),l.x=e.x,l.y=n,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[5],l.x,l.y),l.x=a,l.y=n,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[6],l.x,l.y),l.x=t,l.y=n,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[7],l.x,l.y),this.moveSizerTo(this.sizers[8],a+e.absoluteOffset.x,i+e.absoluteOffset.y)}else 2<=this.state.width&&2<=this.state.height?this.moveSizerTo(this.sizers[0],a+e.absoluteOffset.x,i+e.absoluteOffset.y):this.moveSizerTo(this.sizers[0],e.x,e.y)}}null!=this.rotationShape&&(s=mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION]||"0"),o=Math.cos(s),s=Math.sin(s),r=new mxPoint(this.state.getCenterX(),this.state.getCenterY()),l=mxUtils.getRotatedPoint(new mxPoint(e.x+e.width/2,e.y-16),o,s,r),this.moveSizerTo(this.rotationShape,l.x,l.y)),this.selectionBorder.rotation=Number(this.state.style[mxConstants.STYLE_ROTATION]||"0"),this.drawPreview()},mxVertexHandler.prototype.drawPreview=function(){null!=this.preview&&(this.preview.bounds=this.bounds,this.preview.node.parentNode==this.graph.container&&(this.preview.bounds.width=Math.max(0,this.preview.bounds.width-1),this.preview.bounds.height=Math.max(0,this.preview.bounds.height-1)),this.preview.rotation=Number(this.state.style[mxConstants.STYLE_ROTATION]||"0"),this.preview.redraw()),this.selectionBorder.bounds=this.bounds,this.selectionBorder.redraw()},mxVertexHandler.prototype.destroy=function(){if(null!=this.preview&&(this.preview.destroy(),this.preview=null),this.selectionBorder.destroy(),this.labelShape=this.selectionBorder=null,null!=this.sizers)for(var e=0;e<this.sizers.length;e++)this.sizers[e].destroy(),this.sizers[e]=null},mxEdgeHandler.prototype.graph=null,mxEdgeHandler.prototype.state=null,mxEdgeHandler.prototype.marker=null,mxEdgeHandler.prototype.constraintHandler=null,mxEdgeHandler.prototype.error=null,mxEdgeHandler.prototype.shape=null,mxEdgeHandler.prototype.bends=null,mxEdgeHandler.prototype.labelShape=null,mxEdgeHandler.prototype.cloneEnabled=!0,mxEdgeHandler.prototype.addEnabled=!1,mxEdgeHandler.prototype.removeEnabled=!1,mxEdgeHandler.prototype.preferHtml=!1,mxEdgeHandler.prototype.allowHandleBoundsCheck=!0,mxEdgeHandler.prototype.snapToTerminals=!1,mxEdgeHandler.prototype.handleImage=null,mxEdgeHandler.prototype.tolerance=0,mxEdgeHandler.prototype.init=function(){if(this.graph=this.state.view.graph,this.marker=this.createMarker(),this.constraintHandler=new mxConstraintHandler(this.graph),this.points=[],this.abspoints=this.getSelectionPoints(this.state),this.shape=this.createSelectionShape(this.abspoints),this.shape.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_MIXEDHTML:mxConstants.DIALECT_SVG,this.shape.init(this.graph.getView().getOverlayPane()),this.shape.svgStrokeTolerance=0,this.shape.node.style.cursor=mxConstants.CURSOR_MOVABLE_EDGE,mxEvent.addListener(this.shape.node,"dblclick",mxUtils.bind(this,function(e){this.graph.dblClick(e,this.state.cell)})),mxEvent.addGestureListeners(this.shape.node,mxUtils.bind(this,function(e){this.addEnabled&&this.isAddPointEvent(e)?this.addPoint(this.state,e):this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e,this.state))}),mxUtils.bind(this,function(e){var t=this.state.cell;if(null!=this.index){var n=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(e),mxEvent.getClientY(e));t=this.graph.getCellAt(n.x,n.y);this.graph.isSwimlane(t)&&this.graph.hitsSwimlaneContent(t,n.x,n.y)&&(t=null)}this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,this.graph.getView().getState(t)))}),mxUtils.bind(this,function(e){this.graph.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e,this.state))})),this.preferHtml=null!=this.state.text&&this.state.text.node.parentNode==this.graph.container,!this.preferHtml){var e=this.state.getVisibleTerminalState(!0);null!=e&&(this.preferHtml=null!=e.text&&e.text.node.parentNode==this.graph.container),this.preferHtml||null!=(e=this.state.getVisibleTerminalState(!1))&&(this.preferHtml=null!=e.text&&e.text.node.parentNode==this.graph.container)}(this.graph.getSelectionCount()<mxGraphHandler.prototype.maxCells||mxGraphHandler.prototype.maxCells<=0)&&(this.bends=this.createBends()),this.label=new mxPoint(this.state.absoluteOffset.x,this.state.absoluteOffset.y),this.labelShape=new mxRectangleShape(new mxRectangle,mxConstants.LABEL_HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR),this.labelShape.pointerEvents=!1,this.initBend(this.labelShape),this.labelShape.node.style.cursor=mxConstants.CURSOR_LABEL_HANDLE,mxEvent.redirectMouseEvents(this.labelShape.node,this.graph,this.state),this.redraw()},mxEdgeHandler.prototype.isAddPointEvent=function(e){return mxEvent.isShiftDown(e)},mxEdgeHandler.prototype.isRemovePointEvent=function(e){return mxEvent.isShiftDown(e)},mxEdgeHandler.prototype.getSelectionPoints=function(e){return e.absolutePoints},mxEdgeHandler.prototype.createSelectionShape=function(e){return(e=new mxPolyline(e,this.getSelectionColor())).strokewidth=this.getSelectionStrokeWidth(),e.isDashed=this.isSelectionDashed(),e},mxEdgeHandler.prototype.getSelectionColor=function(){return mxConstants.EDGE_SELECTION_COLOR},mxEdgeHandler.prototype.getSelectionStrokeWidth=function(){return mxConstants.EDGE_SELECTION_STROKEWIDTH},mxEdgeHandler.prototype.isSelectionDashed=function(){return mxConstants.EDGE_SELECTION_DASHED},mxEdgeHandler.prototype.isConnectableCell=function(e){return!0},mxEdgeHandler.prototype.createMarker=function(){var e=new mxCellMarker(this.graph),a=this;return e.getCell=function(e){var t=mxCellMarker.prototype.getCell.apply(this,arguments);if(!a.isConnectableCell(t))return null;var n=a.graph.getModel();return(t==a.state.cell||null!=t&&!a.graph.connectableEdges&&n.isEdge(t))&&(t=null),t},e.isValidState=function(e){var t=a.graph.getModel();t=null!=(t=a.graph.view.getTerminalPort(e,a.graph.view.getState(t.getTerminal(a.state.cell,!a.isSource)),!a.isSource))?t.cell:null;return a.error=a.validateConnection(a.isSource?e.cell:t,a.isSource?t:e.cell),null==a.error},e},mxEdgeHandler.prototype.validateConnection=function(e,t){return this.graph.getEdgeValidationError(this.state.cell,e,t)},mxEdgeHandler.prototype.createBends=function(){for(var e=this.state.cell,t=[],n=0;n<this.abspoints.length;n++)if(this.isHandleVisible(n)){var a=n==this.abspoints.length-1;if((a=0==n||a)||this.graph.isCellBendable(e)){var i=this.createHandleShape(n);if(this.initBend(i),mxClient.IS_TOUCH&&i.node.setAttribute("pointer-events","none"),this.isHandleEnabled(n))if(mxClient.IS_TOUCH){var s=mxUtils.bind(this,function(e){return e=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(e),mxEvent.getClientY(e)),this.graph.view.getState(this.graph.getCellAt(e.x,e.y))});mxEvent.redirectMouseEvents(i.node,this.graph,s)}else i.node.style.cursor=mxConstants.CURSOR_BEND_HANDLE,mxEvent.redirectMouseEvents(i.node,this.graph,this.state);t.push(i),a||(this.points.push(new mxPoint(0,0)),i.node.style.visibility="hidden")}}return t},mxEdgeHandler.prototype.isHandleEnabled=function(e){return!0},mxEdgeHandler.prototype.isHandleVisible=function(e){return!0},mxEdgeHandler.prototype.createHandleShape=function(e){return null!=this.handleImage?new mxImageShape(new mxRectangle(0,0,this.handleImage.width,this.handleImage.height),this.handleImage.src):(e=mxConstants.HANDLE_SIZE,this.preferHtml&&(e-=1),new mxRectangleShape(new mxRectangle(0,0,e,e),mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR))},mxEdgeHandler.prototype.initBend=function(e){this.preferHtml?(e.dialect=mxConstants.DIALECT_STRICTHTML,e.init(this.graph.container)):(e.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_MIXEDHTML:mxConstants.DIALECT_SVG,e.init(this.graph.getView().getOverlayPane()))},mxEdgeHandler.prototype.getHandleForEvent=function(e){if(null!=this.bends)for(var t=this.tolerance,n=(t=this.allowHandleBoundsCheck&&(mxClient.IS_IE||0<t)?new mxRectangle(e.getGraphX()-t,e.getGraphY()-t,2*t,2*t):null,0);n<this.bends.length;n++)if((e.isSource(this.bends[n])||null!=t&&mxUtils.intersects(this.bends[n].bounds,t))&&"hidden"!=this.bends[n].node.style.visibility)return n;return!(e.isSource(this.labelShape)&&"hidden"!=this.labelShape.node.style.visibility||e.isSource(this.state.text))||(mxClient.IS_SF||mxClient.IS_GC)&&"SELECT"==e.getSource().nodeName?null:mxEvent.LABEL_HANDLE},mxEdgeHandler.prototype.mouseDown=function(e,t){var n=null;null!=(n=this.getHandleForEvent(t))&&!t.isConsumed()&&this.graph.isEnabled()&&!this.graph.isForceMarqueeEvent(t.getEvent())&&(this.removeEnabled&&this.isRemovePointEvent(t.getEvent())?this.removePoint(this.state,n):(n!=mxEvent.LABEL_HANDLE||this.graph.isLabelMovable(t.getCell()))&&this.start(t.getX(),t.getY(),n),t.consume())},mxEdgeHandler.prototype.start=function(e,t,n){this.startX=e,this.startY=t,this.isSource=null!=this.bends&&0==n,this.isTarget=null!=this.bends&&n==this.bends.length-1,this.isLabel=n==mxEvent.LABEL_HANDLE,this.isSource||this.isTarget?(e=this.state.cell,(null==(t=this.graph.model.getTerminal(e,this.isSource))&&this.graph.isTerminalPointMovable(e,this.isSource)||null!=t&&this.graph.isCellDisconnectable(e,t,this.isSource))&&(this.index=n)):this.index=n},mxEdgeHandler.prototype.clonePreviewState=function(e,t){return this.state.clone()},mxEdgeHandler.prototype.getSnapToTerminalTolerance=function(){return this.graph.gridSize*this.graph.view.scale/2},mxEdgeHandler.prototype.getPointForEvent=function(e){var n=new mxPoint(e.getGraphX(),e.getGraphY()),a=this.getSnapToTerminalTolerance(),t=this.graph.getView(),i=!1,s=!1;if(this.snapToTerminals&&0<a){var o=function(e){if(null!=e){var t=e.x;Math.abs(n.x-t)<a&&(n.x=t,i=!0),e=e.y,Math.abs(n.y-e)<a&&(n.y=e,s=!0)}},r=function(e){null!=e&&o.call(this,new mxPoint(t.getRoutingCenterX(e),t.getRoutingCenterY(e)))};if(r.call(this,this.state.getVisibleTerminalState(!0)),r.call(this,this.state.getVisibleTerminalState(!1)),null!=this.abspoints)for(r=0;r<this.abspoints;r++)r!=this.index&&o.call(this,this.abspoints[r])}return this.graph.isGridEnabledEvent(e.getEvent())&&(e=t.scale,r=t.translate,i||(n.x=(this.graph.snap(n.x/e-r.x)+r.x)*e),s||(n.y=(this.graph.snap(n.y/e-r.y)+r.y)*e)),n},mxEdgeHandler.prototype.getPreviewTerminalState=function(e){this.constraintHandler.update(e,this.isSource),this.marker.process(e),e=this.marker.getValidState();var t=null;return null!=this.constraintHandler.currentFocus&&null!=this.constraintHandler.currentConstraint&&this.marker.reset(),null!=e?t=e:null!=this.constraintHandler.currentConstraint&&null!=this.constraintHandler.currentFocus&&(t=this.constraintHandler.currentFocus),t},mxEdgeHandler.prototype.getPreviewPoints=function(e){var t=null!=(t=this.graph.getCellGeometry(this.state.cell)).points?t.points.slice():null;return this.isSource||this.isTarget?this.graph.resetEdgesOnConnect&&(t=null):(this.convertPoint(e,!1),null==t?t=[e]:t[this.index-1]=e),t},mxEdgeHandler.prototype.updatePreviewState=function(e,t,n){var a=this.isSource?n:this.state.getVisibleTerminalState(!0),i=this.isTarget?n:this.state.getVisibleTerminalState(!1),s=this.graph.getConnectionConstraint(e,a,!0),o=this.graph.getConnectionConstraint(e,i,!1),r=this.constraintHandler.currentConstraint;null==r&&(r=new mxConnectionConstraint),this.isSource?s=r:this.isTarget&&(o=r),(!this.isSource||null!=a)&&e.view.updateFixedTerminalPoint(e,a,!0,s),(!this.isTarget||null!=i)&&e.view.updateFixedTerminalPoint(e,i,!1,o),(this.isSource||this.isTarget)&&null==n&&(e.setAbsoluteTerminalPoint(t,this.isSource),null==this.marker.getMarkedState()&&(this.error=this.graph.allowDanglingEdges?null:"")),e.view.updatePoints(e,this.points,a,i),e.view.updateFloatingTerminalPoints(e,a,i)},mxEdgeHandler.prototype.mouseMove=function(e,t){if(null!=this.index&&null!=this.marker){var n=this.getPointForEvent(t);if(this.isLabel)this.label.x=n.x,this.label.y=n.y;else{this.points=this.getPreviewPoints(n);var a=this.isSource||this.isTarget?this.getPreviewTerminalState(t):null,i=this.clonePreviewState(n,null!=a?a.cell:null);this.updatePreviewState(i,n,a),this.setPreviewColor(null==this.error?this.marker.validColor:this.marker.invalidColor),this.abspoints=i.absolutePoints,this.active=!0}this.drawPreview(),mxEvent.consume(t.getEvent()),t.consume()}else mxClient.IS_IE&&null!=this.getHandleForEvent(t)&&t.consume(!1)},mxEdgeHandler.prototype.mouseUp=function(e,t){if(null!=this.index&&null!=this.marker){var n=this.state.cell;if(t.getX()!=this.startX||t.getY()!=this.startY)if(null!=this.error)0<this.error.length&&this.graph.validationAlert(this.error);else if(this.isLabel)this.moveLabel(this.state,this.label.x,this.label.y);else if(this.isSource||this.isTarget){var a=null;if(null!=this.constraintHandler.currentConstraint&&null!=this.constraintHandler.currentFocus&&(a=this.constraintHandler.currentFocus.cell),null==a&&this.marker.hasValidState()&&(a=this.marker.validState.cell),null!=a)n=this.connect(n,a,this.isSource,this.graph.isCloneEvent(t.getEvent())&&this.cloneEnabled&&this.graph.isCellsCloneable(),t);else if(this.graph.isAllowDanglingEdges()){(a=this.abspoints[this.isSource?0:this.abspoints.length-1]).x=a.x/this.graph.view.scale-this.graph.view.translate.x,a.y=a.y/this.graph.view.scale-this.graph.view.translate.y;var i=this.graph.getView().getState(this.graph.getModel().getParent(n));null!=i&&(a.x-=i.origin.x,a.y-=i.origin.y),a.x-=this.graph.panDx/this.graph.view.scale,a.y-=this.graph.panDy/this.graph.view.scale,this.changeTerminalPoint(n,a,this.isSource)}}else this.active?this.changePoints(n,this.points):(this.graph.getView().invalidate(this.state.cell),this.graph.getView().revalidate(this.state.cell));null!=this.marker&&(this.reset(),n!=this.state.cell&&this.graph.setSelectionCell(n)),t.consume()}},mxEdgeHandler.prototype.reset=function(){this.points=this.label=this.index=this.error=null,this.isTarget=this.isSource=this.isLabel=this.active=!1,this.marker.reset(),this.constraintHandler.reset(),this.setPreviewColor(mxConstants.EDGE_SELECTION_COLOR),this.redraw()},mxEdgeHandler.prototype.setPreviewColor=function(e){null!=this.shape&&(this.shape.stroke=e)},mxEdgeHandler.prototype.convertPoint=function(e,t){var n=this.graph.getView().getScale(),a=this.graph.getView().getTranslate();return t&&(e.x=this.graph.snap(e.x),e.y=this.graph.snap(e.y)),e.x=Math.round(e.x/n-a.x),e.y=Math.round(e.y/n-a.y),null!=(n=this.graph.getView().getState(this.graph.getModel().getParent(this.state.cell)))&&(e.x-=n.origin.x,e.y-=n.origin.y),e},mxEdgeHandler.prototype.moveLabel=function(e,t,n){var a=this.graph.getModel();if(null!=(i=a.getGeometry(e.cell))){var i=i.clone(),s=this.graph.getView().getRelativePoint(e,t,n);i.x=s.x,i.y=s.y;var o=this.graph.getView().scale;i.offset=new mxPoint(0,0),s=this.graph.view.getPoint(e,i),i.offset=new mxPoint((t-s.x)/o,(n-s.y)/o),a.setGeometry(e.cell,i)}},mxEdgeHandler.prototype.connect=function(e,t,n,a,i){var s=(i=this.graph.getModel()).getParent(e);i.beginUpdate();try{if(a){var o=e.clone();i.add(s,o,i.getChildCount(s));var r=i.getTerminal(e,!n);this.graph.connectCell(o,r,!n),e=o}var l=this.constraintHandler.currentConstraint;null==l&&(l=new mxConnectionConstraint),this.graph.connectCell(e,t,n,l)}finally{i.endUpdate()}return e},mxEdgeHandler.prototype.changeTerminalPoint=function(e,t,n){var a=this.graph.getModel(),i=a.getGeometry(e);if(null!=i){a.beginUpdate();try{(i=i.clone()).setTerminalPoint(t,n),a.setGeometry(e,i),this.graph.connectCell(e,null,n,new mxConnectionConstraint)}finally{a.endUpdate()}}},mxEdgeHandler.prototype.changePoints=function(e,t){var n=this.graph.getModel(),a=n.getGeometry(e);null!=a&&((a=a.clone()).points=t,n.setGeometry(e,a))},mxEdgeHandler.prototype.addPoint=function(e,t){var n=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(t),mxEvent.getClientY(t)),a=this.graph.isGridEnabledEvent(t);this.convertPoint(n,a),this.addPointAt(e,n.x,n.y),mxEvent.consume(t)},mxEdgeHandler.prototype.addPointAt=function(e,t,n){var a=this.graph.getCellGeometry(e.cell);if(t=new mxPoint(t,n),null!=a){a=a.clone(),n=this.graph.view.translate;var i=this.graph.view.scale;n=mxUtils.findNearestSegment(e,(t.x+n.x)*i,(t.y+n.y)*i),null==a.points?a.points=[t]:a.points.splice(n,0,t),this.graph.getModel().setGeometry(e.cell,a),this.destroy(),this.init()}},mxEdgeHandler.prototype.removePoint=function(e,t){if(0<t&&t<this.abspoints.length-1){var n=this.graph.getCellGeometry(this.state.cell);null!=n&&null!=n.points&&((n=n.clone()).points.splice(t-1,1),this.graph.getModel().setGeometry(e.cell,n),this.destroy(),this.init())}},mxEdgeHandler.prototype.getHandleFillColor=function(e){e=0==e;var t=this.state.cell,n=this.graph.getModel().getTerminal(t,e),a=mxConstants.HANDLE_FILLCOLOR;return null!=n&&!this.graph.isCellDisconnectable(t,n,e)||null==n&&!this.graph.isTerminalPointMovable(t,e)?a=mxConstants.LOCKED_HANDLE_FILLCOLOR:null!=n&&this.graph.isCellDisconnectable(t,n,e)&&(a=mxConstants.CONNECT_HANDLE_FILLCOLOR),a},mxEdgeHandler.prototype.redraw=function(){this.abspoints=this.state.absolutePoints.slice();var e=this.state.cell,t=mxConstants.LABEL_HANDLE_SIZE;if(this.label=new mxPoint(this.state.absoluteOffset.x,this.state.absoluteOffset.y),this.labelShape.bounds=new mxRectangle(Math.round(this.label.x-t/2),Math.round(this.label.y-t/2),t,t),this.labelShape.redraw(),null!=(t=this.graph.getLabel(e))&&0<t.length&&this.graph.isLabelMovable(e)?this.labelShape.node.style.visibility="visible":this.labelShape.node.style.visibility="hidden",null!=this.bends&&0<this.bends.length){var n=this.abspoints.length-1,a=(e=this.abspoints[0],this.abspoints[0].y);t=this.bends[0].bounds;this.bends[0].bounds=new mxRectangle(Math.round(this.abspoints[0].x-t.width/2),Math.round(a-t.height/2),t.width,t.height),this.bends[0].fill=this.getHandleFillColor(0),this.bends[0].redraw();a=this.abspoints[n];var i=this.abspoints[n].x,s=(n=this.abspoints[n].y,this.bends.length-1);t=this.bends[s].bounds;this.bends[s].bounds=new mxRectangle(Math.round(i-t.width/2),Math.round(n-t.height/2),t.width,t.height),this.bends[s].fill=this.getHandleFillColor(s),this.bends[s].redraw(),this.redrawInnerBends(e,a)}this.drawPreview()},mxEdgeHandler.prototype.redrawInnerBends=function(e,t){var n=this.graph.getModel().getGeometry(this.state.cell).points;if(null!=n){null==this.points&&(this.points=[]);for(var a=1;a<this.bends.length-1;a++)if(null!=this.bends[a])if(null!=this.abspoints[a]){var i=this.abspoints[a].x,s=this.abspoints[a].y,o=this.bends[a].bounds;this.bends[a].node.style.visibility="visible",this.bends[a].bounds=new mxRectangle(Math.round(i-o.width/2),Math.round(s-o.height/2),o.width,o.height),this.bends[a].redraw(),this.points[a-1]=n[a-1]}else this.bends[a].destroy(),this.bends[a]=null}},mxEdgeHandler.prototype.drawPreview=function(){if(this.isLabel){var e=mxConstants.LABEL_HANDLE_SIZE;e=new mxRectangle(Math.round(this.label.x-e/2),Math.round(this.label.y-e/2),e,e);this.labelShape.bounds=e,this.labelShape.redraw()}else this.shape.points=this.abspoints,this.shape.redraw()},mxEdgeHandler.prototype.destroy=function(){if(null!=this.marker&&(this.marker.destroy(),this.marker=null),null!=this.shape&&(this.shape.destroy(),this.shape=null),null!=this.labelShape&&(this.labelShape.destroy(),this.labelShape=null),null!=this.constraintHandler&&(this.constraintHandler.destroy(),this.constraintHandler=null),null!=this.bends)for(var e=0;e<this.bends.length;e++)null!=this.bends[e]&&(this.bends[e].destroy(),this.bends[e]=null)},mxUtils.extend(mxElbowEdgeHandler,mxEdgeHandler),mxElbowEdgeHandler.prototype=new mxEdgeHandler,mxElbowEdgeHandler.prototype.constructor=mxElbowEdgeHandler,mxElbowEdgeHandler.prototype.flipEnabled=!0,mxElbowEdgeHandler.prototype.doubleClickOrientationResource="none"!=mxClient.language?"doubleClickOrientation":"",mxElbowEdgeHandler.prototype.createBends=function(){var e=[],t=this.createHandleShape(0);return this.initBend(t),t.node.style.cursor=mxConstants.CURSOR_BEND_HANDLE,mxEvent.redirectMouseEvents(t.node,this.graph,this.state),e.push(t),mxClient.IS_TOUCH&&t.node.setAttribute("pointer-events","none"),e.push(this.createVirtualBend()),this.points.push(new mxPoint(0,0)),t=this.createHandleShape(2),this.initBend(t),t.node.style.cursor=mxConstants.CURSOR_BEND_HANDLE,mxEvent.redirectMouseEvents(t.node,this.graph,this.state),e.push(t),mxClient.IS_TOUCH&&t.node.setAttribute("pointer-events","none"),e},mxElbowEdgeHandler.prototype.createVirtualBend=function(){var e=this.createHandleShape();this.initBend(e);var t=this.getCursorForBend();return e.node.style.cursor=t,t=mxUtils.bind(this,function(e){!mxEvent.isConsumed(e)&&this.flipEnabled&&(this.graph.flipEdge(this.state.cell,e),mxEvent.consume(e))}),mxEvent.redirectMouseEvents(e.node,this.graph,this.state,null,null,null,t),this.graph.isCellBendable(this.state.cell)||(e.node.style.display="none"),e},mxElbowEdgeHandler.prototype.getCursorForBend=function(){return this.state.style[mxConstants.STYLE_EDGE]==mxEdgeStyle.TopToBottom||this.state.style[mxConstants.STYLE_EDGE]==mxConstants.EDGESTYLE_TOPTOBOTTOM||(this.state.style[mxConstants.STYLE_EDGE]==mxEdgeStyle.ElbowConnector||this.state.style[mxConstants.STYLE_EDGE]==mxConstants.EDGESTYLE_ELBOW)&&this.state.style[mxConstants.STYLE_ELBOW]==mxConstants.ELBOW_VERTICAL?"row-resize":"col-resize"},mxElbowEdgeHandler.prototype.getTooltipForNode=function(e){var t=null;return null==this.bends||null==this.bends[1]||e!=this.bends[1].node&&e.parentNode!=this.bends[1].node||(t=this.doubleClickOrientationResource,t=mxResources.get(t)||t),t},mxElbowEdgeHandler.prototype.convertPoint=function(e,t){var n=this.graph.getView().getScale(),a=this.graph.getView().getTranslate(),i=this.state.origin;t&&(e.x=this.graph.snap(e.x),e.y=this.graph.snap(e.y)),e.x=Math.round(e.x/n-a.x-i.x),e.y=Math.round(e.y/n-a.y-i.y)},mxElbowEdgeHandler.prototype.redrawInnerBends=function(e,t){var n=null==(n=null!=(n=this.graph.getModel().getGeometry(this.state.cell).points)?n[0]:null)?new mxPoint(e.x+(t.x-e.x)/2,e.y+(t.y-e.y)/2):new mxPoint(this.graph.getView().scale*(n.x+this.graph.getView().translate.x+this.state.origin.x),this.graph.getView().scale*(n.y+this.graph.getView().translate.y+this.state.origin.y)),a=(i=this.bends[1].bounds).width,i=i.height;null==this.handleImage&&(i=a=mxConstants.HANDLE_SIZE);var s=new mxRectangle(Math.round(n.x-a/2),Math.round(n.y-i/2),a,i);null==this.handleImage&&"hidden"!=this.labelShape.node.style.visibility&&mxUtils.intersects(s,this.labelShape.bounds)&&(a+=3,i+=3,s=new mxRectangle(Math.round(n.x-a/2),Math.round(n.y-i/2),a,i)),this.bends[1].bounds=s,this.bends[1].redraw()},mxUtils.extend(mxEdgeSegmentHandler,mxEdgeHandler),mxEdgeSegmentHandler.prototype=new mxElbowEdgeHandler,mxEdgeSegmentHandler.prototype.constructor=mxEdgeSegmentHandler,mxEdgeSegmentHandler.prototype.getPreviewPoints=function(e){if(this.isSource||this.isTarget)return mxElbowEdgeHandler.prototype.getPreviewPoints.apply(this,arguments);this.convertPoint(e,!1);var t=this.state.absolutePoints,n=t[0].clone();this.convertPoint(n,!1);for(var a=[],i=1;i<t.length;i++){var s=t[i].clone();this.convertPoint(s,!1),i==this.index&&(n.x==s.x?(n.x=e.x,s.x=e.x):(n.y=e.y,s.y=e.y)),i<t.length-1&&a.push(s),n=s}if(1==a.length){if(n=this.state.view,i=this.state.getVisibleTerminalState(!0),null!=(s=this.state.getVisibleTerminalState(!1))&null!=i){var o=this.state.origin.x,r=this.state.origin.y;mxUtils.contains(s,a[0].x+o,a[0].y+r)?t[1].y==t[2].y?a[0].y=n.getRoutingCenterY(i)-r:a[0].x=n.getRoutingCenterX(i)-o:mxUtils.contains(i,a[0].x+o,a[0].y+r)&&(t[1].y==t[0].y?a[0].y=n.getRoutingCenterY(s)-r:a[0].x=n.getRoutingCenterX(s)-o)}}else 0==a.length&&(a=[e]);return a},mxEdgeSegmentHandler.prototype.createBends=function(){var e=[],t=this.createHandleShape(0);this.initBend(t),t.node.style.cursor=mxConstants.CURSOR_BEND_HANDLE,mxEvent.redirectMouseEvents(t.node,this.graph,this.state),e.push(t),mxClient.IS_TOUCH&&t.node.setAttribute("pointer-events","none");var n=this.state.absolutePoints;if(this.graph.isCellBendable(this.state.cell)){null==this.points&&(this.points=[]);for(var a=0;a<n.length-1;a++)t=this.createVirtualBend(),e.push(t),t.node.style.cursor=0==n[a].x-n[a+1].x?"col-resize":"row-resize",this.points.push(new mxPoint(0,0)),mxClient.IS_TOUCH&&t.node.setAttribute("pointer-events","none")}return t=this.createHandleShape(n.length),this.initBend(t),t.node.style.cursor=mxConstants.CURSOR_BEND_HANDLE,mxEvent.redirectMouseEvents(t.node,this.graph,this.state),e.push(t),mxClient.IS_TOUCH&&t.node.setAttribute("pointer-events","none"),e},mxEdgeSegmentHandler.prototype.redraw=function(){this.refresh(),mxEdgeHandler.prototype.redraw.apply(this,arguments)},mxEdgeSegmentHandler.prototype.refresh=function(){if(null!=this.bends){for(var e=0;e<this.bends.length;e++)null!=this.bends[e]&&(this.bends[e].destroy(),this.bends[e]=null);this.bends=this.createBends()}},mxEdgeSegmentHandler.prototype.redrawInnerBends=function(e,t){if(this.graph.isCellBendable(this.state.cell)){var n=mxConstants.HANDLE_SIZE,a=this.state.absolutePoints;if(null!=a&&1<a.length)for(var i=0;i<this.state.absolutePoints.length-1;i++)if(null!=this.bends[i+1]){e=a[i],t=a[i+1];var s=new mxPoint(e.x+(t.x-e.x)/2,e.y+(t.y-e.y)/2);this.bends[i+1].bounds=new mxRectangle(Math.round(s.x-n/2),Math.round(s.y-n/2),n,n),this.bends[i+1].redraw()}}},mxEdgeSegmentHandler.prototype.changePoints=function(e,t){t=[];var n=this.abspoints;if(1<n.length)for(var a=n[0],i=n[1],s=2;s<n.length;s++){var o=n[s];Math.round(a.x)==Math.round(i.x)&&Math.round(i.x)==Math.round(o.x)||Math.round(a.y)==Math.round(i.y)&&Math.round(i.y)==Math.round(o.y)||(i=(a=i).clone(),this.convertPoint(i,!1),t.push(i)),i=o}mxElbowEdgeHandler.prototype.changePoints.apply(this,arguments)},mxKeyHandler.prototype.graph=null,mxKeyHandler.prototype.target=null,mxKeyHandler.prototype.normalKeys=null,mxKeyHandler.prototype.shiftKeys=null,mxKeyHandler.prototype.controlKeys=null,mxKeyHandler.prototype.controlShiftKeys=null,mxKeyHandler.prototype.enabled=!0,mxKeyHandler.prototype.isEnabled=function(){return this.enabled},mxKeyHandler.prototype.setEnabled=function(e){this.enabled=e},mxKeyHandler.prototype.bindKey=function(e,t){this.normalKeys[e]=t},mxKeyHandler.prototype.bindShiftKey=function(e,t){this.shiftKeys[e]=t},mxKeyHandler.prototype.bindControlKey=function(e,t){this.controlKeys[e]=t},mxKeyHandler.prototype.bindControlShiftKey=function(e,t){this.controlShiftKeys[e]=t},mxKeyHandler.prototype.isControlDown=function(e){return mxEvent.isControlDown(e)},mxKeyHandler.prototype.getFunction=function(e){return null!=e?this.isControlDown(e)?mxEvent.isShiftDown(e)?this.controlShiftKeys[e.keyCode]:this.controlKeys[e.keyCode]:mxEvent.isShiftDown(e)?this.shiftKeys[e.keyCode]:this.normalKeys[e.keyCode]:null},mxKeyHandler.prototype.isGraphEvent=function(e){if((e=mxEvent.getSource(e))==this.target||e.parentNode==this.target||null!=this.graph.cellEditor&&e==this.graph.cellEditor.textarea)return!0;for(;null!=e;){if(e==this.graph.container)return!0;e=e.parentNode}return!1},mxKeyHandler.prototype.keyDown=function(e){if(this.graph.isEnabled()&&!mxEvent.isConsumed(e)&&this.isGraphEvent(e)&&this.isEnabled())if(27==e.keyCode)this.escape(e);else if(!this.graph.isEditing()){var t=this.getFunction(e);null!=t&&(t(e),mxEvent.consume(e))}},mxKeyHandler.prototype.escape=function(e){this.graph.isEscapeEnabled()&&this.graph.escape(e)},mxKeyHandler.prototype.destroy=function(){this.target=null},mxTooltipHandler.prototype.zIndex=10005,mxTooltipHandler.prototype.graph=null,mxTooltipHandler.prototype.delay=null,mxTooltipHandler.prototype.hideOnHover=!1,mxTooltipHandler.prototype.enabled=!0,mxTooltipHandler.prototype.isEnabled=function(){return this.enabled},mxTooltipHandler.prototype.setEnabled=function(e){this.enabled=e},mxTooltipHandler.prototype.isHideOnHover=function(){return this.hideOnHover},mxTooltipHandler.prototype.setHideOnHover=function(e){this.hideOnHover=e},mxTooltipHandler.prototype.init=function(){null!=document.body&&(this.div=document.createElement("div"),this.div.className="mxTooltip",this.div.style.visibility="hidden",this.div.style.zIndex=this.zIndex,document.body.appendChild(this.div),mxEvent.addListener(this.div,"mousedown",mxUtils.bind(this,function(e){this.hideTooltip()})))},mxTooltipHandler.prototype.mouseDown=function(e,t){this.reset(t,!1),this.hideTooltip()},mxTooltipHandler.prototype.mouseMove=function(e,t){t.getX()==this.lastX&&t.getY()==this.lastY||(this.reset(t,!0),(this.isHideOnHover()||t.getState()!=this.state||t.getSource()!=this.node&&(!this.stateSource||null!=t.getState()&&this.stateSource==(t.isSource(t.getState().shape)||!t.isSource(t.getState().text))))&&this.hideTooltip()),this.lastX=t.getX(),this.lastY=t.getY()},mxTooltipHandler.prototype.mouseUp=function(e,t){this.reset(t,!0),this.hideTooltip()},mxTooltipHandler.prototype.resetTimer=function(){null!=this.thread&&(window.clearTimeout(this.thread),this.thread=null)},mxTooltipHandler.prototype.reset=function(e,t){if(this.resetTimer(),t&&this.isEnabled()&&null!=e.getState()&&(null==this.div||"hidden"==this.div.style.visibility)){var n=e.getState(),a=e.getSource(),i=e.getX(),s=e.getY(),o=e.isSource(n.shape)||e.isSource(n.text);this.thread=window.setTimeout(mxUtils.bind(this,function(){if(!this.graph.isEditing()&&!this.graph.panningHandler.isMenuShowing()){var e=this.graph.getTooltip(n,a,i,s);this.show(e,i,s),this.state=n,this.node=a,this.stateSource=o}}),this.delay)}},mxTooltipHandler.prototype.hide=function(){this.resetTimer(),this.hideTooltip()},mxTooltipHandler.prototype.hideTooltip=function(){null!=this.div&&(this.div.style.visibility="hidden")},mxTooltipHandler.prototype.show=function(e,t,n){if(null!=e&&0<e.length){null==this.div&&this.init();var a=mxUtils.getScrollOrigin();this.div.style.left=t+a.x+"px",this.div.style.top=n+mxConstants.TOOLTIP_VERTICAL_OFFSET+a.y+"px",mxUtils.isNode(e)?(this.div.innerHTML="",this.div.appendChild(e)):this.div.innerHTML=e.replace(/\n/g,"<br>"),this.div.style.visibility="",mxUtils.fit(this.div)}},mxTooltipHandler.prototype.destroy=function(){this.graph.removeMouseListener(this),mxEvent.release(this.div),null!=this.div&&null!=this.div.parentNode&&this.div.parentNode.removeChild(this.div),this.div=null},mxUtils.extend(mxCellTracker,mxCellMarker),mxCellTracker.prototype.mouseDown=function(e,t){},mxCellTracker.prototype.mouseMove=function(e,t){this.isEnabled()&&this.process(t)},mxCellTracker.prototype.mouseUp=function(e,t){this.reset()},mxCellTracker.prototype.destroy=function(){this.destroyed||(this.destroyed=!0,this.graph.removeMouseListener(this),mxCellMarker.prototype.destroy.apply(this))},mxCellHighlight.prototype.keepOnTop=!1,mxCellHighlight.prototype.graph=!0,mxCellHighlight.prototype.state=null,mxCellHighlight.prototype.spacing=2,mxCellHighlight.prototype.resetHandler=null,mxCellHighlight.prototype.setHighlightColor=function(e){this.highlightColor=e,null!=this.shape&&(this.shape.stroke=e)},mxCellHighlight.prototype.drawHighlight=function(){this.shape=this.createShape(),this.repaint(),!this.keepOnTop&&this.shape.node.parentNode.firstChild!=this.shape.node&&this.shape.node.parentNode.insertBefore(this.shape.node,this.shape.node.parentNode.firstChild)},mxCellHighlight.prototype.createShape=function(){var e=null;return(e=this.graph.model.isEdge(this.state.cell)?new mxPolyline(this.state.absolutePoints,this.highlightColor,this.strokeWidth):new mxRectangleShape(new mxRectangle,null,this.highlightColor,this.strokeWidth)).dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,e.init(this.graph.getView().getOverlayPane()),mxEvent.redirectMouseEvents(e.node,this.graph,this.state),e.svgStrokeTolerance=0,e.pointerEvents=!1,e.isDashed=this.dashed,e},mxCellHighlight.prototype.repaint=function(){if(null!=this.state&&null!=this.shape){var e=0;this.graph.model.isEdge(this.state.cell)?this.shape.points=this.state.absolutePoints:(this.shape.bounds=new mxRectangle(this.state.x-this.spacing,this.state.y-this.spacing,this.state.width+2*this.spacing,this.state.height+2*this.spacing),e=Number(this.state.style[mxConstants.STYLE_ROTATION]||"0")),null!=this.state.shape&&this.shape.setCursor(this.state.shape.getCursor()),0!=e&&(this.shape.rotation=e),this.shape.redraw()}},mxCellHighlight.prototype.hide=function(){this.highlight(null)},mxCellHighlight.prototype.highlight=function(e){this.state!=e&&(null!=this.shape&&(this.shape.destroy(),this.shape=null),this.state=e,null!=this.state&&this.drawHighlight())},mxCellHighlight.prototype.destroy=function(){this.graph.getView().removeListener(this.repaintHandler),this.graph.getModel().removeListener(this.repaintHandler),this.graph.getView().removeListener(this.resetHandler),this.graph.getModel().removeListener(this.resetHandler),null!=this.shape&&(this.shape.destroy(),this.shape=null)},mxDefaultKeyHandler.prototype.editor=null,mxDefaultKeyHandler.prototype.handler=null,mxDefaultKeyHandler.prototype.bindAction=function(e,t,n){var a=mxUtils.bind(this,function(){this.editor.execute(t)});n?this.handler.bindControlKey(e,a):this.handler.bindKey(e,a)},mxDefaultKeyHandler.prototype.destroy=function(){this.handler.destroy(),this.handler=null},mxDefaultPopupMenu.prototype.imageBasePath=null,mxDefaultPopupMenu.prototype.config=null,mxDefaultPopupMenu.prototype.createMenu=function(e,t,n,a){if(null!=this.config){var i=this.createConditions(e,n,a);this.addItems(e,t,n,a,i,this.config.firstChild,null)}},mxDefaultPopupMenu.prototype.addItems=function(e,t,n,a,i,s,o){for(var r=!1;null!=s;){if("add"==s.nodeName){if(null==(l=s.getAttribute("if"))||i[l]){var l=s.getAttribute("as"),d=(l=mxResources.get(l)||l,mxUtils.eval(mxUtils.getTextContent(s))),c=s.getAttribute("action"),m=s.getAttribute("icon"),u=s.getAttribute("iconCls");r&&(t.addSeparator(o),r=!1),null!=m&&this.imageBasePath&&(m=this.imageBasePath+m),l=this.addAction(t,e,l,m,d,c,n,o,u),this.addItems(e,t,n,a,i,s.firstChild,l)}}else"separator"==s.nodeName&&(r=!0);s=s.nextSibling}},mxDefaultPopupMenu.prototype.addAction=function(e,t,n,a,i,s,o,r,l){return e.addItem(n,a,function(e){"function"==typeof i&&i.call(t,t,o,e),null!=s&&t.execute(s,o,e)},r,l)},mxDefaultPopupMenu.prototype.createConditions=function(e,t,n){var a=e.graph.getModel(),i=a.getChildCount(t),s=[];for(s.nocell=null==t,s.ncells=1<e.graph.getSelectionCount(),s.notRoot=a.getRoot()!=a.getParent(e.graph.getDefaultParent()),s.cell=null!=t,a=null!=t&&1==e.graph.getSelectionCount(),s.nonEmpty=a&&0<i,s.expandable=a&&e.graph.isCellFoldable(t,!1),s.collapsable=a&&e.graph.isCellFoldable(t,!0),s.validRoot=a&&e.graph.isValidRoot(t),s.emptyValidRoot=s.validRoot&&0==i,s.swimlane=a&&e.graph.isSwimlane(t),i=this.config.getElementsByTagName("condition"),a=0;a<i.length;a++){var o=mxUtils.eval(mxUtils.getTextContent(i[a])),r=i[a].getAttribute("name");null!=r&&"function"==typeof o&&(s[r]=o(e,t,n))}return s},mxDefaultToolbar.prototype.editor=null,mxDefaultToolbar.prototype.toolbar=null,mxDefaultToolbar.prototype.resetHandler=null,mxDefaultToolbar.prototype.spacing=4,mxDefaultToolbar.prototype.connectOnDrop=!1,mxDefaultToolbar.prototype.init=function(e){null!=e&&(this.toolbar=new mxToolbar(e),this.toolbar.addListener(mxEvent.SELECT,mxUtils.bind(this,function(e,t){var n=t.getProperty("function");this.editor.insertFunction=null!=n?mxUtils.bind(this,function(){n.apply(this,arguments),this.toolbar.resetMode()}):null})),this.resetHandler=mxUtils.bind(this,function(){null!=this.toolbar&&this.toolbar.resetMode(!0)}),this.editor.graph.addListener(mxEvent.DOUBLE_CLICK,this.resetHandler),this.editor.addListener(mxEvent.ESCAPE,this.resetHandler))},mxDefaultToolbar.prototype.addItem=function(e,t,n,a){var i=mxUtils.bind(this,function(){null!=n&&0<n.length&&this.editor.execute(n)});return this.toolbar.addItem(e,t,i,a)},mxDefaultToolbar.prototype.addSeparator=function(e){e=e||mxClient.imageBasePath+"/separator.gif",this.toolbar.addSeparator(e)},mxDefaultToolbar.prototype.addCombo=function(){return this.toolbar.addCombo()},mxDefaultToolbar.prototype.addActionCombo=function(e){return this.toolbar.addActionCombo(e)},mxDefaultToolbar.prototype.addActionOption=function(e,t,n){var a=mxUtils.bind(this,function(){this.editor.execute(n)});this.addOption(e,t,a)},mxDefaultToolbar.prototype.addOption=function(e,t,n){return this.toolbar.addOption(e,t,n)},mxDefaultToolbar.prototype.addMode=function(e,t,n,a,i){var s=mxUtils.bind(this,function(){this.editor.setMode(n),null!=i&&i(this.editor)});return this.toolbar.addSwitchMode(e,t,s,a)},mxDefaultToolbar.prototype.addPrototype=function(e,t,n,a,i,s){var o=function(){return"function"==typeof n?n():null!=n?n.clone():null},r=mxUtils.bind(this,function(e,t){"function"==typeof i?i(this.editor,o(),e,t):this.drop(o(),e,t),this.toolbar.resetMode(),mxEvent.consume(e)});return e=this.toolbar.addMode(e,t,r,a,null,s),this.installDropHandler(e,function(e,t,n){r(t,n)}),e},mxDefaultToolbar.prototype.drop=function(e,t,n){var a=this.editor.graph,i=a.getModel();if(null!=n&&!i.isEdge(n)&&this.connectOnDrop&&a.isCellConnectable(n))this.connect(e,t,n);else{for(;null!=n&&!a.isValidDropTarget(n,[e],t);)n=i.getParent(n);this.insert(e,t,n)}},mxDefaultToolbar.prototype.insert=function(e,t,n){var a=this.editor.graph;if(a.canImportCell(e)){var i=mxEvent.getClientX(t),s=mxEvent.getClientY(t);i=mxUtils.convertPoint(a.container,i,s);return a.isSplitEnabled()&&a.isSplitTarget(n,[e],t)?a.splitEdge(n,[e],null,i.x,i.y):this.editor.addVertex(n,e,i.x,i.y)}return null},mxDefaultToolbar.prototype.connect=function(e,t,n){var a=(t=this.editor.graph).getModel();if(null!=n&&t.isCellConnectable(e)&&t.isEdgeValid(null,n,e)){var i=null;a.beginUpdate();try{var s=a.getGeometry(n),o=a.getGeometry(e).clone();o.x=s.x+(s.width-o.width)/2,o.y=s.y+(s.height-o.height)/2;var r=this.spacing*t.gridSize,l=20*a.getDirectedEdgeCount(n,!0);this.editor.horizontalFlow?o.x+=(o.width+s.width)/2+r+l:o.y+=(o.height+s.height)/2+r+l,e.setGeometry(o);var d=a.getParent(n);if(t.addCell(e,d),t.constrainChild(e),i=this.editor.createEdge(n,e),null==a.getGeometry(i)){var c=new mxGeometry;c.relative=!0,a.setGeometry(i,c)}t.addEdge(i,d,n,e)}finally{a.endUpdate()}t.setSelectionCells([e,i]),t.scrollCellToVisible(e)}},mxDefaultToolbar.prototype.installDropHandler=function(t,n){var a=document.createElement("img");a.setAttribute("src",t.getAttribute("src"));var i=mxUtils.bind(this,function(e){a.style.width=2*t.offsetWidth+"px",a.style.height=2*t.offsetHeight+"px",mxUtils.makeDraggable(t,this.editor.graph,n,a),mxEvent.removeListener(a,"load",i)});mxClient.IS_IE?i():mxEvent.addListener(a,"load",i)},mxDefaultToolbar.prototype.destroy=function(){null!=this.resetHandler&&(this.editor.graph.removeListener("dblclick",this.resetHandler),this.editor.removeListener("escape",this.resetHandler),this.resetHandler=null),null!=this.toolbar&&(this.toolbar.destroy(),this.toolbar=null)},mxLoadResources&&mxResources.add(mxClient.basePath+"/resources/editor"),mxEditor.prototype=new mxEventSource,mxEditor.prototype.constructor=mxEditor,mxEditor.prototype.askZoomResource="none"!=mxClient.language?"askZoom":"",mxEditor.prototype.lastSavedResource="none"!=mxClient.language?"lastSaved":"",mxEditor.prototype.currentFileResource="none"!=mxClient.language?"currentFile":"",mxEditor.prototype.propertiesResource="none"!=mxClient.language?"properties":"",mxEditor.prototype.tasksResource="none"!=mxClient.language?"tasks":"",mxEditor.prototype.helpResource="none"!=mxClient.language?"help":"",mxEditor.prototype.outlineResource="none"!=mxClient.language?"outline":"",mxEditor.prototype.outline=null,mxEditor.prototype.graph=null,mxEditor.prototype.graphRenderHint=null,mxEditor.prototype.toolbar=null,mxEditor.prototype.session=null,mxEditor.prototype.status=null,mxEditor.prototype.popupHandler=null,mxEditor.prototype.undoManager=null,mxEditor.prototype.keyHandler=null,mxEditor.prototype.actions=null,mxEditor.prototype.dblClickAction="edit",mxEditor.prototype.swimlaneRequired=!1,mxEditor.prototype.disableContextMenu=!0,mxEditor.prototype.insertFunction=null,mxEditor.prototype.forcedInserting=!1,mxEditor.prototype.templates=null,mxEditor.prototype.defaultEdge=null,mxEditor.prototype.defaultEdgeStyle=null,mxEditor.prototype.defaultGroup=null,mxEditor.prototype.groupBorderSize=null,mxEditor.prototype.filename=null,mxEditor.prototype.linefeed="&#xa;",mxEditor.prototype.postParameterName="xml",mxEditor.prototype.escapePostData=!0,mxEditor.prototype.urlPost=null,mxEditor.prototype.urlImage=null,mxEditor.prototype.urlInit=null,mxEditor.prototype.urlNotify=null,mxEditor.prototype.urlPoll=null,mxEditor.prototype.horizontalFlow=!1,mxEditor.prototype.layoutDiagram=!1,mxEditor.prototype.swimlaneSpacing=0,mxEditor.prototype.maintainSwimlanes=!1,mxEditor.prototype.layoutSwimlanes=!1,mxEditor.prototype.cycleAttributeValues=null,mxEditor.prototype.cycleAttributeIndex=0,mxEditor.prototype.cycleAttributeName="fillColor",mxEditor.prototype.tasks=null,mxEditor.prototype.tasksWindowImage=null,mxEditor.prototype.tasksTop=20,mxEditor.prototype.help=null,mxEditor.prototype.helpWindowImage=null,mxEditor.prototype.urlHelp=null,mxEditor.prototype.helpWidth=300,mxEditor.prototype.helpHeight=260,mxEditor.prototype.propertiesWidth=240,mxEditor.prototype.propertiesHeight=null,mxEditor.prototype.movePropertiesDialog=!1,mxEditor.prototype.validating=!1,mxEditor.prototype.modified=!1,mxEditor.prototype.isModified=function(){return this.modified},mxEditor.prototype.setModified=function(e){this.modified=e},mxEditor.prototype.addActions=function(){this.addAction("save",function(e){e.save()}),this.addAction("print",function(e){new mxPrintPreview(e.graph,1).open()}),this.addAction("show",function(e){mxUtils.show(e.graph,null,10,10)}),this.addAction("exportImage",function(e){var t=e.getUrlImage();if(null==t||mxClient.IS_LOCAL)e.execute("show");else{var n=mxUtils.getViewXml(e.graph,1);n=mxUtils.getXml(n,"\n");mxUtils.submit(t,e.postParameterName+"="+encodeURIComponent(n),document,"_blank")}}),this.addAction("refresh",function(e){e.graph.refresh()}),this.addAction("cut",function(e){e.graph.isEnabled()&&mxClipboard.cut(e.graph)}),this.addAction("copy",function(e){e.graph.isEnabled()&&mxClipboard.copy(e.graph)}),this.addAction("paste",function(e){e.graph.isEnabled()&&mxClipboard.paste(e.graph)}),this.addAction("delete",function(e){e.graph.isEnabled()&&e.graph.removeCells()}),this.addAction("group",function(e){e.graph.isEnabled()&&e.graph.setSelectionCell(e.groupCells())}),this.addAction("ungroup",function(e){e.graph.isEnabled()&&e.graph.setSelectionCells(e.graph.ungroupCells())}),this.addAction("removeFromParent",function(e){e.graph.isEnabled()&&e.graph.removeCellsFromParent()}),this.addAction("undo",function(e){e.graph.isEnabled()&&e.undo()}),this.addAction("redo",function(e){e.graph.isEnabled()&&e.redo()}),this.addAction("zoomIn",function(e){e.graph.zoomIn()}),this.addAction("zoomOut",function(e){e.graph.zoomOut()}),this.addAction("actualSize",function(e){e.graph.zoomActual()}),this.addAction("fit",function(e){e.graph.fit()}),this.addAction("showProperties",function(e,t){e.showProperties(t)}),this.addAction("selectAll",function(e){e.graph.isEnabled()&&e.graph.selectAll()}),this.addAction("selectNone",function(e){e.graph.isEnabled()&&e.graph.clearSelection()}),this.addAction("selectVertices",function(e){e.graph.isEnabled()&&e.graph.selectVertices()}),this.addAction("selectEdges",function(e){e.graph.isEnabled()&&e.graph.selectEdges()}),this.addAction("edit",function(e,t){e.graph.isEnabled()&&e.graph.isCellEditable(t)&&e.graph.startEditingAtCell(t)}),this.addAction("toBack",function(e,t){e.graph.isEnabled()&&e.graph.orderCells(!0)}),this.addAction("toFront",function(e,t){e.graph.isEnabled()&&e.graph.orderCells(!1)}),this.addAction("enterGroup",function(e,t){e.graph.enterGroup(t)}),this.addAction("exitGroup",function(e){e.graph.exitGroup()}),this.addAction("home",function(e){e.graph.home()}),this.addAction("selectPrevious",function(e){e.graph.isEnabled()&&e.graph.selectPreviousCell()}),this.addAction("selectNext",function(e){e.graph.isEnabled()&&e.graph.selectNextCell()}),this.addAction("selectParent",function(e){e.graph.isEnabled()&&e.graph.selectParentCell()}),this.addAction("selectChild",function(e){e.graph.isEnabled()&&e.graph.selectChildCell()}),this.addAction("collapse",function(e){e.graph.isEnabled()&&e.graph.foldCells(!0)}),this.addAction("collapseAll",function(e){if(e.graph.isEnabled()){var t=e.graph.getChildVertices();e.graph.foldCells(!0,!1,t)}}),this.addAction("expand",function(e){e.graph.isEnabled()&&e.graph.foldCells(!1)}),this.addAction("expandAll",function(e){if(e.graph.isEnabled()){var t=e.graph.getChildVertices();e.graph.foldCells(!1,!1,t)}}),this.addAction("bold",function(e){e.graph.isEnabled()&&e.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_BOLD)}),this.addAction("italic",function(e){e.graph.isEnabled()&&e.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_ITALIC)}),this.addAction("underline",function(e){e.graph.isEnabled()&&e.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_UNDERLINE)}),this.addAction("shadow",function(e){e.graph.isEnabled()&&e.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_SHADOW)}),this.addAction("alignCellsLeft",function(e){e.graph.isEnabled()&&e.graph.alignCells(mxConstants.ALIGN_LEFT)}),this.addAction("alignCellsCenter",function(e){e.graph.isEnabled()&&e.graph.alignCells(mxConstants.ALIGN_CENTER)}),this.addAction("alignCellsRight",function(e){e.graph.isEnabled()&&e.graph.alignCells(mxConstants.ALIGN_RIGHT)}),this.addAction("alignCellsTop",function(e){e.graph.isEnabled()&&e.graph.alignCells(mxConstants.ALIGN_TOP)}),this.addAction("alignCellsMiddle",function(e){e.graph.isEnabled()&&e.graph.alignCells(mxConstants.ALIGN_MIDDLE)}),this.addAction("alignCellsBottom",function(e){e.graph.isEnabled()&&e.graph.alignCells(mxConstants.ALIGN_BOTTOM)}),this.addAction("alignFontLeft",function(e){e.graph.setCellStyles(mxConstants.STYLE_ALIGN,mxConstants.ALIGN_LEFT)}),this.addAction("alignFontCenter",function(e){e.graph.isEnabled()&&e.graph.setCellStyles(mxConstants.STYLE_ALIGN,mxConstants.ALIGN_CENTER)}),this.addAction("alignFontRight",function(e){e.graph.isEnabled()&&e.graph.setCellStyles(mxConstants.STYLE_ALIGN,mxConstants.ALIGN_RIGHT)}),this.addAction("alignFontTop",function(e){e.graph.isEnabled()&&e.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_TOP)}),this.addAction("alignFontMiddle",function(e){e.graph.isEnabled()&&e.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE)}),this.addAction("alignFontBottom",function(e){e.graph.isEnabled()&&e.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_BOTTOM)}),this.addAction("zoom",function(e){var t=100*e.graph.getView().scale;t=parseFloat(mxUtils.prompt(mxResources.get(e.askZoomResource)||e.askZoomResource,t))/100;isNaN(t)||e.graph.getView().setScale(t)}),this.addAction("toggleTasks",function(e){null!=e.tasks?e.tasks.setVisible(!e.tasks.isVisible()):e.showTasks()}),this.addAction("toggleHelp",function(e){null!=e.help?e.help.setVisible(!e.help.isVisible()):e.showHelp()}),this.addAction("toggleOutline",function(e){null==e.outline?e.showOutline():e.outline.setVisible(!e.outline.isVisible())}),this.addAction("toggleConsole",function(e){mxLog.setVisible(!mxLog.isVisible())})},mxEditor.prototype.createSession=function(){var e=mxUtils.bind(this,function(e){this.fireEvent(new mxEventObject(mxEvent.SESSION,"session",e))});return this.connect(this.urlInit,this.urlPoll,this.urlNotify,e)},mxEditor.prototype.configure=function(e){null!=e&&(new mxCodec(e.ownerDocument).decode(e,this),this.resetHistory())},mxEditor.prototype.resetFirstTime=function(){document.cookie="mxgraph=seen; expires=Fri, 27 Jul 2001 02:47:11 UTC; path=/"},mxEditor.prototype.resetHistory=function(){this.lastSnapshot=(new Date).getTime(),this.undoManager.clear(),this.ignoredChanges=0,this.setModified(!1)},mxEditor.prototype.addAction=function(e,t){this.actions[e]=t},mxEditor.prototype.execute=function(t,e,n){var a=this.actions[t];if(null!=a)try{var i=arguments;i[0]=this,a.apply(this,i)}catch(e){throw mxUtils.error("Cannot execute "+t+": "+e.message,280,!0),e}else mxUtils.error("Cannot find action "+t,280,!0)},mxEditor.prototype.addTemplate=function(e,t){this.templates[e]=t},mxEditor.prototype.getTemplate=function(e){return this.templates[e]},mxEditor.prototype.createGraph=function(){var e=new mxGraph(null,null,this.graphRenderHint);return e.setTooltips(!0),e.setPanning(!0),this.installDblClickHandler(e),this.installUndoHandler(e),this.installDrillHandler(e),this.installChangeHandler(e),this.installInsertHandler(e),e.panningHandler.factoryMethod=mxUtils.bind(this,function(e,t,n){return this.createPopupMenu(e,t,n)}),e.connectionHandler.factoryMethod=mxUtils.bind(this,function(e,t){return this.createEdge(e,t)}),this.createSwimlaneManager(e),this.createLayoutManager(e),e},mxEditor.prototype.createSwimlaneManager=function(e){return(e=new mxSwimlaneManager(e,!1)).isHorizontal=mxUtils.bind(this,function(){return this.horizontalFlow}),e.isEnabled=mxUtils.bind(this,function(){return this.maintainSwimlanes}),e},mxEditor.prototype.createLayoutManager=function(a){var e=new mxLayoutManager(a),i=this;return e.getLayout=function(e){var t=null,n=i.graph.getModel();return null!=n.getParent(e)&&(i.layoutSwimlanes&&a.isSwimlane(e)?(null==i.swimlaneLayout&&(i.swimlaneLayout=i.createSwimlaneLayout()),t=i.swimlaneLayout):i.layoutDiagram&&(a.isValidRoot(e)||null==n.getParent(n.getParent(e)))&&(null==i.diagramLayout&&(i.diagramLayout=i.createDiagramLayout()),t=i.diagramLayout)),t},e},mxEditor.prototype.setGraphContainer=function(e){null==this.graph.container&&(this.graph.init(e),this.rubberband=new mxRubberband(this.graph),this.disableContextMenu&&mxEvent.disableContextMenu(e),mxClient.IS_QUIRKS&&new mxDivResizer(e))},mxEditor.prototype.installDblClickHandler=function(a){a.addListener(mxEvent.DOUBLE_CLICK,mxUtils.bind(this,function(e,t){var n=t.getProperty("cell");null!=n&&a.isEnabled()&&null!=this.dblClickAction&&(this.execute(this.dblClickAction,n),t.consume())}))},mxEditor.prototype.installUndoHandler=function(a){var e=mxUtils.bind(this,function(e,t){var n=t.getProperty("edit");this.undoManager.undoableEditHappened(n)});a.getModel().addListener(mxEvent.UNDO,e),a.getView().addListener(mxEvent.UNDO,e),e=function(e,t){var n=t.getProperty("edit").changes;a.setSelectionCells(a.getSelectionCellsForChanges(n))},this.undoManager.addListener(mxEvent.UNDO,e),this.undoManager.addListener(mxEvent.REDO,e)},mxEditor.prototype.installDrillHandler=function(e){var t=mxUtils.bind(this,function(e){this.fireEvent(new mxEventObject(mxEvent.ROOT))});e.getView().addListener(mxEvent.DOWN,t),e.getView().addListener(mxEvent.UP,t)},mxEditor.prototype.installChangeHandler=function(s){var e=mxUtils.bind(this,function(e,t){this.setModified(!0),1==this.validating&&s.validateGraph();for(var n=t.getProperty("edit").changes,a=0;a<n.length;a++){var i=n[a];if(i instanceof mxRootChange||i instanceof mxValueChange&&i.cell==this.graph.model.root||i instanceof mxCellAttributeChange&&i.cell==this.graph.model.root){this.fireEvent(new mxEventObject(mxEvent.ROOT));break}}});s.getModel().addListener(mxEvent.CHANGE,e)},mxEditor.prototype.installInsertHandler=function(e){var n=this;e.addMouseListener({mouseDown:function(e,t){null==n.insertFunction||t.isPopupTrigger()||!n.forcedInserting&&null!=t.getState()||(n.graph.clearSelection(),n.insertFunction(t.getEvent(),t.getCell()),this.isActive=!0,t.consume())},mouseMove:function(e,t){this.isActive&&t.consume()},mouseUp:function(e,t){this.isActive&&(this.isActive=!1,t.consume())}})},mxEditor.prototype.createDiagramLayout=function(){var e=this.graph.gridSize,t=new mxStackLayout(this.graph,!this.horizontalFlow,this.swimlaneSpacing,2*e,2*e);return t.isVertexIgnored=function(e){return!t.graph.isSwimlane(e)},t},mxEditor.prototype.createSwimlaneLayout=function(){return new mxCompactTreeLayout(this.graph,this.horizontalFlow)},mxEditor.prototype.createToolbar=function(){return new mxDefaultToolbar(null,this)},mxEditor.prototype.setToolbarContainer=function(e){this.toolbar.init(e),mxClient.IS_QUIRKS&&new mxDivResizer(e)},mxEditor.prototype.setStatusContainer=function(e){null==this.status&&(this.status=e,this.addListener(mxEvent.SAVE,mxUtils.bind(this,function(){var e=(new Date).toLocaleString();this.setStatus((mxResources.get(this.lastSavedResource)||this.lastSavedResource)+": "+e)})),this.addListener(mxEvent.OPEN,mxUtils.bind(this,function(){this.setStatus((mxResources.get(this.currentFileResource)||this.currentFileResource)+": "+this.filename)})),mxClient.IS_QUIRKS&&new mxDivResizer(e))},mxEditor.prototype.setStatus=function(e){null!=this.status&&null!=e&&(this.status.innerHTML=e)},mxEditor.prototype.setTitleContainer=function(t){this.addListener(mxEvent.ROOT,mxUtils.bind(this,function(e){t.innerHTML=this.getTitle()})),mxClient.IS_QUIRKS&&new mxDivResizer(t)},mxEditor.prototype.treeLayout=function(e,t){null!=e&&new mxCompactTreeLayout(this.graph,t).execute(e)},mxEditor.prototype.getTitle=function(){for(var e="",t=this.graph,n=t.getCurrentRoot();null!=n&&null!=t.getModel().getParent(t.getModel().getParent(n));)t.isValidRoot(n)&&(e=" > "+t.convertValueToString(n)+e),n=t.getModel().getParent(n);return this.getRootTitle()+e},mxEditor.prototype.getRootTitle=function(){var e=this.graph.getModel().getRoot();return this.graph.convertValueToString(e)},mxEditor.prototype.undo=function(){this.undoManager.undo()},mxEditor.prototype.redo=function(){this.undoManager.redo()},mxEditor.prototype.groupCells=function(){var e=null!=this.groupBorderSize?this.groupBorderSize:this.graph.gridSize;return this.graph.groupCells(this.createGroup(),e)},mxEditor.prototype.createGroup=function(){return this.graph.getModel().cloneCell(this.defaultGroup)},mxEditor.prototype.open=function(e){if(null!=e){var t=mxUtils.load(e).getXml();this.readGraphModel(t.documentElement),this.filename=e,this.fireEvent(new mxEventObject(mxEvent.OPEN,"filename",e))}},mxEditor.prototype.readGraphModel=function(e){new mxCodec(e.ownerDocument).decode(e,this.graph.getModel()),this.resetHistory()},mxEditor.prototype.save=function(e,t){if(null!=(e=e||this.getUrlPost())&&0<e.length){var n=this.writeGraphModel(t);this.postDiagram(e,n),this.setModified(!1)}this.fireEvent(new mxEventObject(mxEvent.SAVE,"url",e))},mxEditor.prototype.postDiagram=function(t,n){this.escapePostData&&(n=encodeURIComponent(n)),mxUtils.post(t,this.postParameterName+"="+n,mxUtils.bind(this,function(e){this.fireEvent(new mxEventObject(mxEvent.POST,"request",e,"url",t,"data",n))}))},mxEditor.prototype.writeGraphModel=function(e){e=null!=e?e:this.linefeed;var t=(new mxCodec).encode(this.graph.getModel());return mxUtils.getXml(t,e)},mxEditor.prototype.getUrlPost=function(){return this.urlPost},mxEditor.prototype.getUrlImage=function(){return this.urlImage},mxEditor.prototype.connect=function(e,t,n,a){var i=null;return mxClient.IS_LOCAL||((i=new mxSession(this.graph.getModel(),e,t,n)).addListener(mxEvent.RECEIVE,mxUtils.bind(this,function(e,t){null!=t.getProperty("node").getAttribute("namespace")&&this.resetHistory()})),i.addListener(mxEvent.DISCONNECT,a),i.addListener(mxEvent.CONNECT,a),i.addListener(mxEvent.NOTIFY,a),i.addListener(mxEvent.GET,a),i.start()),i},mxEditor.prototype.swapStyles=function(e,t){var n=this.graph.getStylesheet().styles[t];this.graph.getView().getStylesheet().putCellStyle(t,this.graph.getStylesheet().styles[e]),this.graph.getStylesheet().putCellStyle(e,n),this.graph.refresh()},mxEditor.prototype.showProperties=function(e){if(null==(e=e||this.graph.getSelectionCell())&&(null==(e=this.graph.getCurrentRoot())&&(e=this.graph.getModel().getRoot())),null!=e){this.graph.stopEditing(!0);var t=(n=mxUtils.getOffset(this.graph.container)).x+10,n=n.y;if(null==this.properties||this.movePropertiesDialog){var a=this.graph.getCellBounds(e);null!=a&&(t+=a.x+Math.min(200,a.width),n+=a.y)}else t=this.properties.getX(),n=this.properties.getY();this.hideProperties(),null!=(e=this.createProperties(e))&&(this.properties=new mxWindow(mxResources.get(this.propertiesResource)||this.propertiesResource,e,t,n,this.propertiesWidth,this.propertiesHeight,!1),this.properties.setVisible(!0))}},mxEditor.prototype.isPropertiesVisible=function(){return null!=this.properties},mxEditor.prototype.createProperties=function(n){var a=this.graph.getModel(),e=a.getValue(n);if(mxUtils.isNode(e)){var t=new mxForm("properties");t.addText("ID",n.getId()).setAttribute("readonly","true");var i=null,s=null,o=null,r=null,l=null;a.isVertex(n)&&(null!=(i=a.getGeometry(n))&&(s=t.addText("top",i.y),o=t.addText("left",i.x),r=t.addText("width",i.width),l=t.addText("height",i.height)));var d=a.getStyle(n),c=t.addText("Style",d||""),m=e.attributes,u=[];for(e=0;e<m.length;e++)u[e]=t.addTextarea(m[e].nodeName,m[e].nodeValue,"label"==m[e].nodeName?4:2);return e=mxUtils.bind(this,function(){this.hideProperties(),a.beginUpdate();try{null!=i&&((i=i.clone()).x=parseFloat(o.value),i.y=parseFloat(s.value),i.width=parseFloat(r.value),i.height=parseFloat(l.value),a.setGeometry(n,i)),0<c.value.length?a.setStyle(n,c.value):a.setStyle(n,null);for(var e=0;e<m.length;e++){var t=new mxCellAttributeChange(n,m[e].nodeName,u[e].value);a.execute(t)}this.graph.isAutoSizeCell(n)&&this.graph.updateCellSize(n)}finally{a.endUpdate()}}),d=mxUtils.bind(this,function(){this.hideProperties()}),t.addButtons(e,d),t.table}return null},mxEditor.prototype.hideProperties=function(){null!=this.properties&&(this.properties.destroy(),this.properties=null)},mxEditor.prototype.showTasks=function(){if(null==this.tasks){var t=document.createElement("div");t.style.padding="4px",t.style.paddingLeft="20px";var e=document.body.clientWidth;(e=new mxWindow(mxResources.get(this.tasksResource)||this.tasksResource,t,e-220,this.tasksTop,200)).setClosable(!0),e.destroyOnClose=!1;var n=mxUtils.bind(this,function(e){mxEvent.release(t),t.innerHTML="",this.createTasks(t)});this.graph.getModel().addListener(mxEvent.CHANGE,n),this.graph.getSelectionModel().addListener(mxEvent.CHANGE,n),this.graph.addListener(mxEvent.ROOT,n),null!=this.tasksWindowImage&&e.setImage(this.tasksWindowImage),this.tasks=e,this.createTasks(t)}this.tasks.setVisible(!0)},mxEditor.prototype.refreshTasks=function(e){null!=this.tasks&&(e=this.tasks.content,mxEvent.release(e),e.innerHTML="",this.createTasks(e))},mxEditor.prototype.createTasks=function(e){},mxEditor.prototype.showHelp=function(e){if(null==this.help){var t=document.createElement("iframe");t.setAttribute("src",mxResources.get("urlHelp")||this.urlHelp),t.setAttribute("height","100%"),t.setAttribute("width","100%"),t.setAttribute("frameBorder","0"),t.style.backgroundColor="white",e=document.body.clientWidth;var n=document.body.clientHeight||document.documentElement.clientHeight,a=new mxWindow(mxResources.get(this.helpResource)||this.helpResource,t,(e-this.helpWidth)/2,(n-this.helpHeight)/3,this.helpWidth,this.helpHeight);a.setMaximizable(!0),a.setClosable(!0),a.destroyOnClose=!1,a.setResizable(!0),null!=this.helpWindowImage&&a.setImage(this.helpWindowImage),mxClient.IS_NS&&(e=function(e){t.setAttribute("height",a.div.offsetHeight-26+"px")},a.addListener(mxEvent.RESIZE_END,e),a.addListener(mxEvent.MAXIMIZE,e),a.addListener(mxEvent.NORMALIZE,e),a.addListener(mxEvent.SHOW,e)),this.help=a}this.help.setVisible(!0)},mxEditor.prototype.showOutline=function(){if(null==this.outline){var e=document.createElement("div");e.style.overflow="hidden",e.style.width="100%",e.style.height="100%",e.style.background="white",e.style.cursor="move";var t=new mxWindow(mxResources.get(this.outlineResource)||this.outlineResource,e,600,480,200,200,!1),n=new mxOutline(this.graph,e);t.setClosable(!0),t.setResizable(!0),t.destroyOnClose=!1,t.addListener(mxEvent.RESIZE_END,function(){n.update()}),this.outline=t,this.outline.outline=n}this.outline.setVisible(!0),this.outline.outline.update(!0)},mxEditor.prototype.setMode=function(e){"select"==e?(this.graph.panningHandler.useLeftButtonForPanning=!1,this.graph.setConnectable(!1)):"connect"==e?(this.graph.panningHandler.useLeftButtonForPanning=!1,this.graph.setConnectable(!0)):"pan"==e&&(this.graph.panningHandler.useLeftButtonForPanning=!0,this.graph.setConnectable(!1))},mxEditor.prototype.createPopupMenu=function(e,t,n){this.popupHandler.createMenu(this,e,t,n)},mxEditor.prototype.createEdge=function(e,t){var n=null;if(null!=this.defaultEdge)n=this.graph.getModel().cloneCell(this.defaultEdge);else{(n=new mxCell("")).setEdge(!0);var a=new mxGeometry;a.relative=!0,n.setGeometry(a)}return null!=(a=this.getEdgeStyle())&&n.setStyle(a),n},mxEditor.prototype.getEdgeStyle=function(){return this.defaultEdgeStyle},mxEditor.prototype.consumeCycleAttribute=function(e){return null!=this.cycleAttributeValues&&0<this.cycleAttributeValues.length&&this.graph.isSwimlane(e)?this.cycleAttributeValues[this.cycleAttributeIndex++%this.cycleAttributeValues.length]:null},mxEditor.prototype.cycleAttribute=function(e){if(null!=this.cycleAttributeName){var t=this.consumeCycleAttribute(e);null!=t&&e.setStyle(e.getStyle()+";"+this.cycleAttributeName+"="+t)}},mxEditor.prototype.addVertex=function(e,t,n,a){for(var i=this.graph.getModel();null!=e&&!this.graph.isValidDropTarget(e);)e=i.getParent(e);e=null!=e?e:this.graph.getSwimlaneAt(n,a);var s=this.graph.getView().scale,o=i.getGeometry(t),r=i.getGeometry(e);if(this.graph.isSwimlane(t)&&!this.graph.swimlaneNesting)e=null;else{if(null==e&&this.swimlaneRequired)return null;if(null!=e&&null!=r){var l=this.graph.getView().getState(e);if(null!=l){if(n-=l.origin.x*s,a-=l.origin.y*s,this.graph.isConstrainedMoving){r=o.width;var d=o.height,c=l.x+l.width;c<n+r&&(n-=n+r-c),(c=l.y+l.height)<a+d&&(a-=a+d-c)}}else null!=r&&(n-=r.x*s,a-=r.y*s)}}(o=o.clone()).x=this.graph.snap(n/s-this.graph.getView().translate.x-this.graph.gridSize/2),o.y=this.graph.snap(a/s-this.graph.getView().translate.y-this.graph.gridSize/2),t.setGeometry(o),null==e&&(e=this.graph.getDefaultParent()),this.cycleAttribute(t),this.fireEvent(new mxEventObject(mxEvent.BEFORE_ADD_VERTEX,"vertex",t,"parent",e)),i.beginUpdate();try{null!=(t=this.graph.addCell(t,e))&&(this.graph.constrainChild(t),this.fireEvent(new mxEventObject(mxEvent.ADD_VERTEX,"vertex",t)))}finally{i.endUpdate()}return null!=t&&(this.graph.setSelectionCell(t),this.graph.scrollCellToVisible(t),this.fireEvent(new mxEventObject(mxEvent.AFTER_ADD_VERTEX,"vertex",t))),t},mxEditor.prototype.destroy=function(){this.destroyed||(this.destroyed=!0,null!=this.tasks&&this.tasks.destroy(),null!=this.outline&&this.outline.destroy(),null!=this.properties&&this.properties.destroy(),null!=this.keyHandler&&this.keyHandler.destroy(),null!=this.rubberband&&this.rubberband.destroy(),null!=this.toolbar&&this.toolbar.destroy(),null!=this.graph&&this.graph.destroy(),this.templates=this.status=null)};var mxCodecRegistry={codecs:[],aliases:[],register:function(e){if(null!=e){var t=e.getName();mxCodecRegistry.codecs[t]=e;var n=mxUtils.getFunctionName(e.template.constructor);n!=t&&mxCodecRegistry.addAlias(n,t)}return e},addAlias:function(e,t){mxCodecRegistry.aliases[e]=t},getCodec:function(e){var t=null;if(null!=e){t=mxUtils.getFunctionName(e);var n=mxCodecRegistry.aliases[t];if(null!=n&&(t=n),null==(t=mxCodecRegistry.codecs[t]))try{t=new mxObjectCodec(new e),mxCodecRegistry.register(t)}catch(e){}}return t}};function mxCodec(e){this.document=e||mxUtils.createXmlDocument(),this.objects=[]}function mxObjectCodec(e,t,n,a){for(var i in this.template=e,this.exclude=null!=t?t:[],this.idrefs=null!=n?n:[],this.mapping=null!=a?a:[],this.reverse={},this.mapping)this.reverse[this.mapping[i]]=i}mxCodec.prototype.document=null,mxCodec.prototype.objects=null,mxCodec.prototype.encodeDefaults=!1,mxCodec.prototype.putObject=function(e,t){return this.objects[e]=t},mxCodec.prototype.getObject=function(e){var t=null;return null!=e&&(null==(t=this.objects[e])&&(null==(t=this.lookup(e))&&(null!=(e=this.getElementById(e))&&(t=this.decode(e))))),t},mxCodec.prototype.lookup=function(e){return null},mxCodec.prototype.getElementById=function(e,t){return mxUtils.findNodeByAttribute(this.document.documentElement,null!=t?t:"id",e)},mxCodec.prototype.getId=function(e){var t=null;return null!=e&&(null==(t=this.reference(e))&&e instanceof mxCell&&(null==(t=e.getId())&&(0==(t=mxCellPath.create(e)).length&&(t="root")))),t},mxCodec.prototype.reference=function(e){return null},mxCodec.prototype.encode=function(e){var t=null;if(null!=e&&null!=e.constructor){var n=mxCodecRegistry.getCodec(e.constructor);null!=n?t=n.encode(this,e):mxUtils.isNode(e)?t=mxClient.IS_IE?e.cloneNode(!0):this.document.importNode(e,!0):mxLog.warn("mxCodec.encode: No codec for "+mxUtils.getFunctionName(e.constructor))}return t},mxCodec.prototype.decode=function(a,b){var c=null;if(null!=a&&a.nodeType==mxConstants.NODETYPE_ELEMENT){var d=null;try{d=eval(a.nodeName)}catch(e){}try{var f=mxCodecRegistry.getCodec(d);null!=f?c=f.decode(this,a,b):(c=a.cloneNode(!0),c.removeAttribute("as"))}catch(e){mxLog.debug("Cannot decode "+a.nodeName+": "+e.message)}}return c},mxCodec.prototype.encodeCell=function(e,t,n){if(t.appendChild(this.encode(e)),null==n||n){n=e.getChildCount();for(var a=0;a<n;a++)this.encodeCell(e.getChildAt(a),t)}},mxCodec.prototype.isCellCodec=function(e){return null!=e&&"function"==typeof e.isCellCodec&&e.isCellCodec()},mxCodec.prototype.decodeCell=function(e,t){t=null==t||t;var n=null;if(null!=e&&e.nodeType==mxConstants.NODETYPE_ELEMENT){if(n=mxCodecRegistry.getCodec(e.nodeName),!this.isCellCodec(n))for(var a=e.firstChild;null!=a&&!this.isCellCodec(n);)n=mxCodecRegistry.getCodec(a.nodeName),a=a.nextSibling;this.isCellCodec(n)||(n=mxCodecRegistry.getCodec(mxCell)),n=n.decode(this,e),t&&this.insertIntoGraph(n)}return n},mxCodec.prototype.insertIntoGraph=function(e){var t=e.parent,n=e.getTerminal(!0),a=e.getTerminal(!1);e.setTerminal(null,!1),e.setTerminal(null,!0),(e.parent=null)!=t&&t.insert(e),null!=n&&n.insertEdge(e,!0),null!=a&&a.insertEdge(e,!1)},mxCodec.prototype.setAttribute=function(e,t,n){null!=t&&null!=n&&e.setAttribute(t,n)},mxObjectCodec.prototype.template=null,mxObjectCodec.prototype.exclude=null,mxObjectCodec.prototype.idrefs=null,mxObjectCodec.prototype.mapping=null,mxObjectCodec.prototype.reverse=null,mxObjectCodec.prototype.getName=function(){return mxUtils.getFunctionName(this.template.constructor)},mxObjectCodec.prototype.cloneTemplate=function(){return new this.template.constructor},mxObjectCodec.prototype.getFieldName=function(e){if(null!=e){var t=this.reverse[e];null!=t&&(e=t)}return e},mxObjectCodec.prototype.getAttributeName=function(e){if(null!=e){var t=this.mapping[e];null!=t&&(e=t)}return e},mxObjectCodec.prototype.isExcluded=function(e,t,n,a){return t==mxObjectIdentity.FIELD_NAME||0<=mxUtils.indexOf(this.exclude,t)},mxObjectCodec.prototype.isReference=function(e,t,n,a){return 0<=mxUtils.indexOf(this.idrefs,t)},mxObjectCodec.prototype.encode=function(e,t){var n=e.document.createElement(this.getName());return t=this.beforeEncode(e,t,n),this.encodeObject(e,t,n),this.afterEncode(e,t,n)},mxObjectCodec.prototype.encodeObject=function(e,t,n){for(var a in e.setAttribute(n,"id",e.getId(t)),t){var i=a,s=t[i];null!=s&&!this.isExcluded(t,i,s,!0)&&(mxUtils.isNumeric(i)&&(i=null),this.encodeValue(e,t,i,s,n))}},mxObjectCodec.prototype.encodeValue=function(e,t,n,a,i){if(null!=a){if(this.isReference(t,n,a,!0)){var s=e.getId(a);if(null==s)return void mxLog.warn("mxObjectCodec.encode: No ID for "+this.getName()+"."+n+"="+a);a=s}s=this.template[n],(null==n||e.encodeDefaults||s!=a)&&(n=this.getAttributeName(n),this.writeAttribute(e,t,n,a,i))}},mxObjectCodec.prototype.writeAttribute=function(e,t,n,a,i){"object"!=typeof a?this.writePrimitiveAttribute(e,t,n,a,i):this.writeComplexAttribute(e,t,n,a,i)},mxObjectCodec.prototype.writePrimitiveAttribute=function(e,t,n,a,i){a=this.convertValueToXml(a),null==n?(t=e.document.createElement("add"),"function"==typeof a?t.appendChild(e.document.createTextNode(a)):e.setAttribute(t,"value",a),i.appendChild(t)):"function"!=typeof a&&e.setAttribute(i,n,a)},mxObjectCodec.prototype.writeComplexAttribute=function(e,t,n,a,i){null!=(e=e.encode(a))?(null!=n&&e.setAttribute("as",n),i.appendChild(e)):mxLog.warn("mxObjectCodec.encode: No node for "+this.getName()+"."+n+": "+a)},mxObjectCodec.prototype.convertValueToXml=function(e){return void 0!==e.length||1!=e&&0!=e||(e=1==e?"1":"0"),e},mxObjectCodec.prototype.convertValueFromXml=function(e){return mxUtils.isNumeric(e)&&(e=parseFloat(e)),e},mxObjectCodec.prototype.beforeEncode=function(e,t,n){return t},mxObjectCodec.prototype.afterEncode=function(e,t,n){return n},mxObjectCodec.prototype.decode=function(e,t,n){var a=t.getAttribute("id"),i=e.objects[a];return null==i&&(i=n||this.cloneTemplate(),null!=a&&e.putObject(a,i)),t=this.beforeDecode(e,t,i),this.decodeNode(e,t,i),this.afterDecode(e,t,i)},mxObjectCodec.prototype.decodeNode=function(e,t,n){null!=t&&(this.decodeAttributes(e,t,n),this.decodeChildren(e,t,n))},mxObjectCodec.prototype.decodeAttributes=function(e,t,n){if(null!=(t=t.attributes))for(var a=0;a<t.length;a++)this.decodeAttribute(e,t[a],n)},mxObjectCodec.prototype.decodeAttribute=function(e,t,n){var a=t.nodeName;if("as"!=a&&"id"!=a){t="value"==a?t.nodeValue:this.convertValueFromXml(t.nodeValue);var i=this.getFieldName(a);if(this.isReference(n,i,t,!1)){if(null==(e=e.getObject(t)))return void mxLog.warn("mxObjectCodec.decode: No object for "+this.getName()+"."+a+"="+t);t=e}this.isExcluded(n,a,t,!1)||(n[a]=t)}},mxObjectCodec.prototype.decodeChildren=function(e,t,n){for(t=t.firstChild;null!=t;){var a=t.nextSibling;t.nodeType==mxConstants.NODETYPE_ELEMENT&&!this.processInclude(e,t,n)&&this.decodeChild(e,t,n),t=a}},mxObjectCodec.prototype.decodeChild=function(e,t,n){var a=this.getFieldName(t.getAttribute("as"));if(null==a||!this.isExcluded(n,a,t,!1)){var i=this.getFieldTemplate(n,a,t),s=null;"add"==t.nodeName?null==(s=t.getAttribute("value"))&&(s=mxUtils.eval(mxUtils.getTextContent(t))):s=e.decode(t,i),this.addObjectValue(n,a,s,i)}},mxObjectCodec.prototype.getFieldTemplate=function(e,t,n){return(e=e[t])instanceof Array&&0<e.length&&(e=null),e},mxObjectCodec.prototype.addObjectValue=function(e,t,n,a){null!=n&&n!=a&&(null!=t&&0<t.length?e[t]=n:e.push(n))},mxObjectCodec.prototype.processInclude=function(e,t,n){if("include"!=t.nodeName)return!1;if(null!=(t=t.getAttribute("name")))try{var a=mxUtils.load(t).getDocumentElement();null!=a&&e.decode(a,n)}catch(e){}return!0},mxObjectCodec.prototype.beforeDecode=function(e,t,n){return t},mxObjectCodec.prototype.afterDecode=function(e,t,n){return n},mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxCell,["children","edges","overlays","mxTransient"],["parent","source","target"]);return e.isCellCodec=function(){return!0},e.isExcluded=function(e,t,n,a){return mxObjectCodec.prototype.isExcluded.apply(this,arguments)||a&&"value"==t&&n.nodeType==mxConstants.NODETYPE_ELEMENT},e.afterEncode=function(e,t,n){if(null!=t.value&&t.value.nodeType==mxConstants.NODETYPE_ELEMENT){var a=n;(n=mxClient.IS_IE?t.value.cloneNode(!0):e.document.importNode(t.value,!0)).appendChild(a),e=a.getAttribute("id"),n.setAttribute("id",e),a.removeAttribute("id")}return n},e.beforeDecode=function(e,t,n){var a=t,i=this.getName();if(t.nodeName!=i?(null!=(a=t.getElementsByTagName(i)[0])&&a.parentNode==t?(mxUtils.removeWhitespace(a,!0),mxUtils.removeWhitespace(a,!1),a.parentNode.removeChild(a)):a=null,n.value=t.cloneNode(!0),null!=(t=n.value.getAttribute("id"))&&(n.setId(t),n.value.removeAttribute("id"))):n.setId(t.getAttribute("id")),null!=a)for(t=0;t<this.idrefs.length;t++){i=this.idrefs[t];var s=a.getAttribute(i);if(null!=s){a.removeAttribute(i);var o=e.objects[s]||e.lookup(s);null==o&&(null!=(s=e.getElementById(s))&&(o=(mxCodecRegistry.codecs[s.nodeName]||this).decode(e,s))),n[i]=o}}return a},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxGraphModel);return e.encodeObject=function(e,t,n){var a=e.document.createElement("root");e.encodeCell(t.getRoot(),a),n.appendChild(a)},e.decodeChild=function(e,t,n){"root"==t.nodeName?this.decodeRoot(e,t,n):mxObjectCodec.prototype.decodeChild.apply(this,arguments)},e.decodeRoot=function(e,t,n){var a=null;for(t=t.firstChild;null!=t;){var i=e.decodeCell(t);null!=i&&null==i.getParent()&&(a=i),t=t.nextSibling}null!=a&&n.setRoot(a)},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxRootChange,["model","previous","root"]);return e.afterEncode=function(e,t,n){return e.encodeCell(t.root,n),n},e.beforeDecode=function(e,t,n){if(null!=t.firstChild&&t.firstChild.nodeType==mxConstants.NODETYPE_ELEMENT){var a=(t=t.cloneNode(!0)).firstChild;for(n.root=e.decodeCell(a,!1),n=a.nextSibling,a.parentNode.removeChild(a),a=n;null!=a;)n=a.nextSibling,e.decodeCell(a),a.parentNode.removeChild(a),a=n}return t},e.afterDecode=function(e,t,n){return n.previous=n.root,n},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxChildChange,["model","child","previousIndex"],["parent","previous"]);return e.isReference=function(e,t,n,a){return!("child"!=t||null==e.previous&&a)||0<=mxUtils.indexOf(this.idrefs,t)},e.afterEncode=function(e,t,n){return this.isReference(t,"child",t.child,!0)?n.setAttribute("child",e.getId(t.child)):e.encodeCell(t.child,n),n},e.beforeDecode=function(e,t,n){if(null!=t.firstChild&&t.firstChild.nodeType==mxConstants.NODETYPE_ELEMENT){var a=(t=t.cloneNode(!0)).firstChild;for(n.child=e.decodeCell(a,!1),n=a.nextSibling,a.parentNode.removeChild(a),a=n;null!=a;){if(n=a.nextSibling,a.nodeType==mxConstants.NODETYPE_ELEMENT){var i=a.getAttribute("id");null==e.lookup(i)&&e.decodeCell(a)}a.parentNode.removeChild(a),a=n}}else a=t.getAttribute("child"),n.child=e.getObject(a);return t},e.afterDecode=function(e,t,n){return n.child.parent=n.previous,n.previous=n.parent,n.previousIndex=n.index,n},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxTerminalChange,["model","previous"],["cell","terminal"]);return e.afterDecode=function(e,t,n){return n.previous=n.terminal,n},e}());var mxGenericChangeCodec=function(e,a){var t=new mxObjectCodec(e,["model","previous"],["cell"]);return t.afterDecode=function(e,t,n){return mxUtils.isNode(n.cell)&&(n.cell=e.decodeCell(n.cell,!1)),n.previous=n[a],n},t},jabra;function _slicedToArray(e,t){return _arrayWithHoles(e)||_iterableToArrayLimit(e,t)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function _iterableToArrayLimit(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],a=!0,i=!1,s=void 0;try{for(var o,r=e[Symbol.iterator]();!(a=(o=r.next()).done)&&(n.push(o.value),!t||n.length!==t);a=!0);}catch(e){i=!0,s=e}finally{try{a||null==r.return||r.return()}finally{if(i)throw s}}return n}}function _arrayWithHoles(e){if(Array.isArray(e))return e}function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _toConsumableArray(e){return _arrayWithoutHoles(e)||_iterableToArray(e)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function _iterableToArray(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}function _arrayWithoutHoles(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}function _instanceof(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function _defineProperties(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}function _classCallCheck(e,t){if(!_instanceof(e,t))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(e,t){return!t||"object"!==_typeof(t)&&"function"!=typeof t?_assertThisInitialized(e):t}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&_setPrototypeOf(e,t)}function _wrapNativeSuper(e){var n="function"==typeof Map?new Map:void 0;return(_wrapNativeSuper=function(e){if(null===e||!_isNativeFunction(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(e))return n.get(e);n.set(e,t)}function t(){return _construct(e,arguments,_getPrototypeOf(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),_setPrototypeOf(t,e)})(e)}function isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}function _construct(e,t,n){return(_construct=isNativeReflectConstruct()?Reflect.construct:function(e,t,n){var a=[null];a.push.apply(a,t);var i=new(Function.bind.apply(e,a));return n&&_setPrototypeOf(i,n.prototype),i}).apply(null,arguments)}function _isNativeFunction(e){return-1!==Function.toString.call(e).indexOf("[native code]")}function _setPrototypeOf(e,t){return(_setPrototypeOf=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function _getPrototypeOf(e){return(_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}mxCodecRegistry.register(mxGenericChangeCodec(new mxValueChange,"value")),mxCodecRegistry.register(mxGenericChangeCodec(new mxStyleChange,"style")),mxCodecRegistry.register(mxGenericChangeCodec(new mxGeometryChange,"geometry")),mxCodecRegistry.register(mxGenericChangeCodec(new mxCollapseChange,"collapsed")),mxCodecRegistry.register(mxGenericChangeCodec(new mxVisibleChange,"visible")),mxCodecRegistry.register(mxGenericChangeCodec(new mxCellAttributeChange,"value")),mxCodecRegistry.register(new mxObjectCodec(new mxGraph,"graphListeners eventListeners view container cellRenderer editor selection".split(" "))),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxGraphView);return e.encode=function(e,t){return this.encodeCell(e,t,t.graph.getModel().getRoot())},e.encodeCell=function(e,t,n){var a=t.graph.getModel(),i=t.getState(n),s=a.getParent(n);if(null==s||null!=i){var o=a.getChildCount(n),r=t.graph.getCellGeometry(n),l=null;if(s==a.getRoot()?l="layer":null==s?l="graph":a.isEdge(n)?l="edge":0<o&&null!=r?l="group":a.isVertex(n)&&(l="vertex"),null!=l){var d=e.document.createElement(l);if(null!=t.graph.getLabel(n)&&(d.setAttribute("label",t.graph.getLabel(n)),t.graph.isHtmlLabel(n)&&d.setAttribute("html",!0)),null==s){var c=t.getGraphBounds();null!=c&&(d.setAttribute("x",Math.round(c.x)),d.setAttribute("y",Math.round(c.y)),d.setAttribute("width",Math.round(c.width)),d.setAttribute("height",Math.round(c.height))),d.setAttribute("scale",t.scale)}else if(null!=i&&null!=r){for(c in i.style)"function"==typeof(s=i.style[c])&&"object"==typeof s&&(s=mxStyleRegistry.getName(s)),null!=s&&"function"!=typeof s&&"object"!=typeof s&&d.setAttribute(c,s);if(null!=(s=i.absolutePoints)&&0<s.length){for(r=Math.round(s[0].x)+","+Math.round(s[0].y),c=1;c<s.length;c++)r+=" "+Math.round(s[c].x)+","+Math.round(s[c].y);d.setAttribute("points",r)}else d.setAttribute("x",Math.round(i.x)),d.setAttribute("y",Math.round(i.y)),d.setAttribute("width",Math.round(i.width)),d.setAttribute("height",Math.round(i.height));null!=(c=i.absoluteOffset)&&(0!=c.x&&d.setAttribute("dx",Math.round(c.x)),0!=c.y&&d.setAttribute("dy",Math.round(c.y)))}for(c=0;c<o;c++)null!=(i=this.encodeCell(e,t,a.getChildAt(n,c)))&&d.appendChild(i)}}return d},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxStylesheet);return e.encode=function(e,t){var n,a=e.document.createElement(this.getName());for(n in t.styles){var i=t.styles[n],s=e.document.createElement("add");if(null!=n){for(var o in s.setAttribute("as",n),i){var r=this.getStringValue(o,i[o]);if(null!=r){var l=e.document.createElement("add");l.setAttribute("value",r),l.setAttribute("as",o),s.appendChild(l)}}0<s.childNodes.length&&a.appendChild(s)}}return a},e.getStringValue=function(e,t){var n=typeof t;return"function"==n?t=mxStyleRegistry.getName(style[j]):"object"==n&&(t=null),t},e.decode=function(e,t,n){n=n||new this.template.constructor;var a=t.getAttribute("id");for(null!=a&&(e.objects[a]=n),t=t.firstChild;null!=t;){if(!this.processInclude(e,t,n)&&"add"==t.nodeName&&null!=(a=t.getAttribute("as"))){var i=t.getAttribute("extend"),s=null!=i?mxUtils.clone(n.styles[i]):null;for(null==s&&(null!=i&&mxLog.warn("mxStylesheetCodec.decode: stylesheet "+i+" not found to extend"),s={}),i=t.firstChild;null!=i;){if(i.nodeType==mxConstants.NODETYPE_ELEMENT){var o=i.getAttribute("as");if("add"==i.nodeName){var r=mxUtils.getTextContent(i),l=null;null!=r&&0<r.length?l=mxUtils.eval(r):(l=i.getAttribute("value"),mxUtils.isNumeric(l)&&(l=parseFloat(l))),null!=l&&(s[o]=l)}else"remove"==i.nodeName&&delete s[o]}i=i.nextSibling}n.putCellStyle(a,s)}t=t.nextSibling}return n},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxDefaultKeyHandler);return e.encode=function(e,t){return null},e.decode=function(e,t,n){if(null!=n)for(t=t.firstChild;null!=t;){if(!this.processInclude(e,t,n)&&"add"==t.nodeName){var a=t.getAttribute("as"),i=t.getAttribute("action"),s=t.getAttribute("control");n.bindAction(a,i,s)}t=t.nextSibling}return n},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxDefaultToolbar);return e.encode=function(e,t){return null},e.decode=function(e,t,n){if(null!=n){var a=n.editor;for(t=t.firstChild;null!=t;){if(t.nodeType==mxConstants.NODETYPE_ELEMENT&&!this.processInclude(e,t,n))if("separator"==t.nodeName)n.addSeparator();else if("br"==t.nodeName)n.toolbar.addBreak();else if("hr"==t.nodeName)n.toolbar.addLine();else if("add"==t.nodeName){var i=t.getAttribute("as"),s=(i=mxResources.get(i)||i,t.getAttribute("icon")),o=t.getAttribute("pressedIcon"),r=t.getAttribute("action"),l=t.getAttribute("mode"),d=t.getAttribute("template"),c="0"!=t.getAttribute("toggle"),m=mxUtils.getTextContent(t),u=null;if(null!=r)u=n.addItem(i,s,r,o);else if(null!=l){var p=mxUtils.eval(m);u=n.addMode(i,s,l,o,p)}else if(null!=d||null!=m&&0<m.length)u=a.templates[d],d=t.getAttribute("style"),null!=u&&null!=d&&(u=u.clone()).setStyle(d),(d=null)!=m&&0<m.length&&(d=mxUtils.eval(m)),u=n.addPrototype(i,s,u,o,d,c);else if(0<(o=mxUtils.getChildNodes(t)).length)if(null==s)for(d=n.addActionCombo(i),i=0;i<o.length;i++)"separator"==(c=o[i]).nodeName?n.addOption(d,"---"):"add"==c.nodeName&&(s=c.getAttribute("as"),c=c.getAttribute("action"),n.addActionOption(d,s,c));else{var g=null,v=n.addPrototype(i,s,function(){if(null==(e=a.templates[g.value]))return mxLog.warn("Template "+e+" not found"),null;var e=e.clone(),t=g.options[g.selectedIndex].cellStyle;return null!=t&&e.setStyle(t),e},null,null,c);g=n.addCombo();for(mxEvent.addListener(g,"change",function(){n.toolbar.selectMode(v,function(e){return e=mxUtils.convertPoint(a.graph.container,mxEvent.getClientX(e),mxEvent.getClientY(e)),a.addVertex(null,p(),e.x,e.y)}),n.toolbar.noReset=!1}),i=0;i<o.length;i++)"separator"==(c=o[i]).nodeName?n.addOption(g,"---"):"add"==c.nodeName&&(s=c.getAttribute("as"),m=c.getAttribute("template"),n.addOption(g,s,m||d).cellStyle=c.getAttribute("style"))}null!=u&&(null!=(d=t.getAttribute("id"))&&0<d.length&&u.setAttribute("id",d))}t=t.nextSibling}}return n},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxDefaultPopupMenu);return e.encode=function(e,t){return null},e.decode=function(e,t,n){var a=t.getElementsByTagName("include")[0];return null!=a?this.processInclude(e,a,n):null!=n&&(n.config=t),n},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxEditor,"modified lastSnapshot ignoredChanges undoManager graphContainer toolbarContainer".split(" "));return e.afterDecode=function(e,t,n){return null!=(e=t.getAttribute("defaultEdge"))&&(t.removeAttribute("defaultEdge"),n.defaultEdge=n.templates[e]),null!=(e=t.getAttribute("defaultGroup"))&&(t.removeAttribute("defaultGroup"),n.defaultGroup=n.templates[e]),n},e.decodeChild=function(e,t,n){if("Array"==t.nodeName){if("templates"==t.getAttribute("as"))return void this.decodeTemplates(e,t,n)}else if("ui"==t.nodeName)return void this.decodeUi(e,t,n);mxObjectCodec.prototype.decodeChild.apply(this,arguments)},e.decodeUi=function(e,t,n){for(e=t.firstChild;null!=e;){if("add"==e.nodeName){t=e.getAttribute("as");var a=e.getAttribute("element"),i=e.getAttribute("style"),s=null;if(null!=a)null!=(s=document.getElementById(a))&&null!=i&&(s.style.cssText+=";"+i);else{a=parseInt(e.getAttribute("x"));var o=parseInt(e.getAttribute("y")),r=e.getAttribute("width"),l=e.getAttribute("height");(s=document.createElement("div")).style.cssText=i,new mxWindow(mxResources.get(t)||t,s,a,o,r,l,!1,!0).setVisible(!0)}"graph"==t?n.setGraphContainer(s):"toolbar"==t?n.setToolbarContainer(s):"title"==t?n.setTitleContainer(s):"status"==t?n.setStatusContainer(s):"map"==t&&n.setMapContainer(s)}else"resource"==e.nodeName?mxResources.add(e.getAttribute("basename")):"stylesheet"==e.nodeName&&mxClient.link("stylesheet",e.getAttribute("name"));e=e.nextSibling}},e.decodeTemplates=function(e,t,n){null==n.templates&&(n.templates=[]),t=mxUtils.getChildNodes(t);for(var a=0;a<t.length;a++){for(var i=t[a].getAttribute("as"),s=t[a].firstChild;null!=s&&1!=s.nodeType;)s=s.nextSibling;null!=s&&(n.templates[i]=e.decodeCell(s))}},e}()),function(y){y.apiVersion="2.0.1";var e,t,n=y.apiVersion.includes("beta"),S=["devices","activedevice","getinstallinfo","Version","setmmifocus","setactivedevice2","setbusylight","setremotemmilightaction"];(e=y.ErrorCodes||(y.ErrorCodes={}))[e.NoError=0]="NoError",e[e.SSLError=1]="SSLError",e[e.CertError=2]="CertError",e[e.NetworkError=3]="NetworkError",e[e.DownloadError=4]="DownloadError",e[e.ParseError=5]="ParseError",e[e.OtherError=6]="OtherError",e[e.DeviceInfoError=7]="DeviceInfoError",e[e.FileNotAccessible=8]="FileNotAccessible",e[e.FileNotCompatible=9]="FileNotCompatible",e[e.Device_NotFound=10]="Device_NotFound",e[e.Parameter_fail=11]="Parameter_fail",e[e.Authorization_failed=12]="Authorization_failed",e[e.FileNotAvailable=13]="FileNotAvailable",e[e.ConfigParseError=14]="ConfigParseError",e[e.SetSettings_Fail=15]="SetSettings_Fail",e[e.Device_Reboot=16]="Device_Reboot",e[e.Device_ReadFail=17]="Device_ReadFail",e[e.Device_NotReady=18]="Device_NotReady",e[e.FilePartiallyCompatible=19]="FilePartiallyCompatible",(t=y.ErrorReturnCodes||(y.ErrorReturnCodes={}))[t.Return_Ok=0]="Return_Ok",t[t.Device_Unknown=1]="Device_Unknown",t[t.Device_Invalid=2]="Device_Invalid",t[t.Not_Supported=3]="Not_Supported",t[t.Return_ParameterFail=4]="Return_ParameterFail",t[t.ProtectedSetting_Write=5]="ProtectedSetting_Write",t[t.No_Information=6]="No_Information",t[t.NetworkRequest_Fail=7]="NetworkRequest_Fail",t[t.Device_WriteFail=8]="Device_WriteFail",t[t.Device_ReadFails=9]="Device_ReadFails",t[t.No_FactorySupported=10]="No_FactorySupported",t[t.System_Error=11]="System_Error",t[t.Device_BadState=12]="Device_BadState",t[t.FileWrite_Fail=13]="FileWrite_Fail",t[t.File_AlreadyExists=14]="File_AlreadyExists",t[t.File_Not_Accessible=15]="File_Not_Accessible",t[t.Firmware_UpToDate=16]="Firmware_UpToDate",t[t.Firmware_Available=17]="Firmware_Available",t[t.Return_Async=18]="Return_Async",t[t.Invalid_Authorization=19]="Invalid_Authorization",t[t.FWU_Application_Not_Available=20]="FWU_Application_Not_Available",t[t.Device_AlreadyConnected=21]="Device_AlreadyConnected",t[t.Device_NotConnected=22]="Device_NotConnected",t[t.CannotClear_DeviceConnected=23]="CannotClear_DeviceConnected",t[t.Device_Rebooted=24]="Device_Rebooted",t[t.Upload_AlreadyInProgress=25]="Upload_AlreadyInProgress",t[t.Download_AlreadyInProgress=26]="Download_AlreadyInProgress";var T=function(e){function i(e,t,n){var a;return _classCallCheck(this,i),(a=_possibleConstructorReturn(this,_getPrototypeOf(i).call(this,"Command "+e+" failed with error  message "+t+" and details: "+JSON.stringify(n||{})))).command=e,a.errmessage=t,a.data=n,a.name="CommandError",a}return _inherits(i,_wrapNativeSuper(Error)),i}();y.CommandError=T;var a,i,s,o,I=new Map;["mute","unmute","device attached","device detached","acceptcall","endcall","reject","flash","online","offline","linebusy","lineidle","redial","key0","key1","key2","key3","key4","key5","key6","key7","key8","key9","keyStar","keyPound","keyClear","Online","speedDial","voiceMail","LineBusy","outOfRange","intoRange","pseudoAcceptcall","pseudoEndcall","button1","button2","button3","volumeUp","volumeDown","fireAlarm","jackConnection","jackDisConnection","qdConnection","qdDisconnection","headsetConnection","headsetDisConnection","devlog","busylight","hearThrough","batteryStatus","gnpButton","mmi","error"].forEach(function(e){return I.set(e,[])}),(a=y.DeviceFeature||(y.DeviceFeature={}))[a.BusyLight=1e3]="BusyLight",a[a.FactoryReset=1001]="FactoryReset",a[a.PairingList=1002]="PairingList",a[a.RemoteMMI=1003]="RemoteMMI",a[a.MusicEqualizer=1004]="MusicEqualizer",a[a.EarbudInterconnectionStatus=1005]="EarbudInterconnectionStatus",a[a.StepRate=1006]="StepRate",a[a.HeartRate=1007]="HeartRate",a[a.RRInterval=1008]="RRInterval",a[a.RingtoneUpload=1009]="RingtoneUpload",a[a.ImageUpload=1010]="ImageUpload",a[a.NeedsExplicitRebootAfterOta=1011]="NeedsExplicitRebootAfterOta",a[a.NeedsToBePutIncCradleToCompleteFwu=1012]="NeedsToBePutIncCradleToCompleteFwu",a[a.RemoteMMIv2=1013]="RemoteMMIv2",a[a.Logging=1014]="Logging",a[a.PreferredSoftphoneListInDevice=1015]="PreferredSoftphoneListInDevice",a[a.VoiceAssistant=1016]="VoiceAssistant",a[a.PlayRingtone=1017]="PlayRingtone",(i=y.RemoteMmiType||(y.RemoteMmiType={}))[i.MMI_TYPE_MFB=0]="MMI_TYPE_MFB",i[i.MMI_TYPE_VOLUP=1]="MMI_TYPE_VOLUP",i[i.MMI_TYPE_VOLDOWN=2]="MMI_TYPE_VOLDOWN",i[i.MMI_TYPE_VCB=3]="MMI_TYPE_VCB",i[i.MMI_TYPE_APP=4]="MMI_TYPE_APP",i[i.MMI_TYPE_TR_FORW=5]="MMI_TYPE_TR_FORW",i[i.MMI_TYPE_TR_BACK=6]="MMI_TYPE_TR_BACK",i[i.MMI_TYPE_PLAY=7]="MMI_TYPE_PLAY",i[i.MMI_TYPE_MUTE=8]="MMI_TYPE_MUTE",i[i.MMI_TYPE_HOOK_OFF=9]="MMI_TYPE_HOOK_OFF",i[i.MMI_TYPE_HOOK_ON=10]="MMI_TYPE_HOOK_ON",i[i.MMI_TYPE_BLUETOOTH=11]="MMI_TYPE_BLUETOOTH",i[i.MMI_TYPE_JABRA=12]="MMI_TYPE_JABRA",i[i.MMI_TYPE_BATTERY=13]="MMI_TYPE_BATTERY",i[i.MMI_TYPE_PROG=14]="MMI_TYPE_PROG",i[i.MMI_TYPE_LINK=15]="MMI_TYPE_LINK",i[i.MMI_TYPE_ANC=16]="MMI_TYPE_ANC",i[i.MMI_TYPE_LISTEN_IN=17]="MMI_TYPE_LISTEN_IN",i[i.MMI_TYPE_DOT3=18]="MMI_TYPE_DOT3",i[i.MMI_TYPE_DOT4=19]="MMI_TYPE_DOT4",i[i.MMI_TYPE_ALL=255]="MMI_TYPE_ALL",(s=y.RemoteMmiSequence||(y.RemoteMmiSequence={}))[s.MMI_LED_SEQUENCE_OFF=0]="MMI_LED_SEQUENCE_OFF",s[s.MMI_LED_SEQUENCE_ON=1]="MMI_LED_SEQUENCE_ON",s[s.MMI_LED_SEQUENCE_SLOW=2]="MMI_LED_SEQUENCE_SLOW",s[s.MMI_LED_SEQUENCE_FAST=3]="MMI_LED_SEQUENCE_FAST",(o=y.RemoteMmiActionInput||(y.RemoteMmiActionInput={}))[o.MMI_ACTION_UP=1]="MMI_ACTION_UP",o[o.MMI_ACTION_DOWN=2]="MMI_ACTION_DOWN",o[o.MMI_ACTION_TAP=4]="MMI_ACTION_TAP",o[o.MMI_ACTION_DOUBLE_TAP=8]="MMI_ACTION_DOUBLE_TAP",o[o.MMI_ACTION_PRESS=16]="MMI_ACTION_PRESS",o[o.MMI_ACTION_LONG_PRESS=32]="MMI_ACTION_LONG_PRESS",o[o.MMI_ACTION_X_LONG_PRESS=64]="MMI_ACTION_X_LONG_PRESS",y.logLevel=2;var C=new(function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"trace",value:function(e){4<=y.logLevel&&console.log(e)}},{key:"info",value:function(e){3<=y.logLevel&&console.log(e)}},{key:"warn",value:function(e){2<=y.logLevel&&console.warn(e)}},{key:"error",value:function(e){1<=y.logLevel&&console.error(e)}}]),e}()),O=Math.random().toString(36).substr(2,9),r=new Map,l=1,d={};function c(t){return Array.isArray(t)?_toConsumableArray(new Set([].concat.apply([],t.map(function(e){return c(e)})))):_instanceof(t,RegExp)?Array.from(I.keys()).filter(function(e){return t.test(e)}):I.has(t)?[t]:(C.warn("Unknown event "+t+" ignored when adding/removing eventlistener"),[])}function m(){return g("getactivedevice")}function u(){return g("getdevices")}function p(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null,n=!(2<arguments.length&&void 0!==arguments[2])||arguments[2];if(!(!n||n&&d.initialized))throw new Error("Browser integration not initialized");var a={direction:"jabra-headset-extension-from-page-script",message:e,args:t||{},requestId:(l++).toString(),apiClientId:O,version_jsapi:y.apiVersion};C.trace("Sending command to content script: "+JSON.stringify(a)),window.postMessage(a,"*")}function g(a){var i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null,e=!(2<arguments.length&&void 0!==arguments[2])||arguments[2];if(!e||e&&d.initialized){var s=(l++).toString();return new Promise(function(e,t){r.set(s,{cmd:a,resolve:e,reject:t});var n={direction:"jabra-headset-extension-from-page-script",message:a,args:i||{},requestId:s,apiClientId:O,version_jsapi:y.apiVersion};C.trace("Sending command to content script expecting result: "+JSON.stringify(n)),window.postMessage(n,"*")})}return Promise.reject(new Error("Browser integration not initialized"))}function v(e,t){function n(t,n,e){return e.find(function(e){return e.groupId==t&&e.kind==n})}if(e&&e.deviceName){var a=void 0,i=void 0,s=void 0,o=void 0,r=t.filter(function(e){return e.label&&e.label.toLowerCase().includes("jabra")&&("audioinput"===e.kind||"audiooutput"===e.kind)}),l=function(a,e){function i(e,t){var n=e,a=t;e.length<t.length&&(n=t,a=e);var i=n.length;return 0===i?1:(i-function(e,t){e=e.toLowerCase(),t=t.toLowerCase();for(var n=new Array,a=0;a<=e.length;a++){for(var i=a,s=0;s<=t.length;s++)if(0==a)n[s]=s;else if(0<s){var o=n[s-1];e.charAt(a-1)!=t.charAt(s-1)&&(o=Math.min(Math.min(o,i),n[s])+1),n[s-1]=i,i=o}0<a&&(n[t.length]=i)}return n[t.length]}(n,a))/i}return 1==e.length?0:0<e.length?e.map(function(e){if(e.includes("("+a+")"))return 1;var t=e.indexOf(" - "),n=0<=t?e.substring(t+3):e;return i(a,n)}).reduce(function(e,t,n,a){return t>a[e]?n:e},0):-1}(e.deviceName,r.map(function(e){return e.label}));if(0<=l){var d=r[l];if(a=d.groupId,o=d.label,"audioinput"===d.kind){i=d.deviceId;var c=n(a,"audiooutput",r);c&&(s=c.deviceId)}else if("audiooutput"===d.kind){s=d.deviceId;var m=n(a,"audioinput",r);m&&(i=m.deviceId)}}a&&(e.browserGroupId=a),o&&(e.browserLabel=o),i&&(e.browserAudioInputId=i),s&&(e.browserAudioOutputId=s)}}function h(){return navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?d.initialized?"https:"!==location.protocol?Promise.reject(new Error("Your browser needs https for lookup to work")):Promise.all([m(),navigator.mediaDevices.enumerateDevices()]).then(function(e){var t=_slicedToArray(e,2),n=t[0];return v(n,t[1]),n}):Promise.reject(new Error("Browser integration not initialized")):Promise.reject(new Error("Your browser does not support required media api"))}function f(e){if(""===e||"string"!=typeof e&&!_instanceof(e,String)){if("boolean"==typeof e)return e;throw new Error("Illegal/missing argument - boolean or string expected")}return"true"===e||"1"===e}function b(e){if(""===e||"string"!=typeof e&&!_instanceof(e,String)){if("number"==typeof e)return e;throw new Error("Illegal/missing argument - number or string expected")}return parseInt(e)}y.init=function(){return new Promise(function(h,f){if(!/Chrome/.test(navigator.userAgent)||!/Google Inc/.test(navigator.vendor))return f(new Error("Jabra Browser Integration: Only supported by <a href='https://google.com/chrome'>Google Chrome</a>."));if(d.initialized||d.initializing)return f(new Error("Jabra Browser Integration already initialized"));d.initializing=!0,r.clear();var b=!0;function A(e,t){var n=I.get(e);n?n.forEach(function(e){e(t)}):C.error("Unexpected unknown eventName: "+e)}function E(e){var t;if(e)t=r.get(e),r.delete(e);else if(1===r.size){var n=r.entries().next().value;t=n[1],r.delete(n[0])}else t=void 0;var a=r.size;return 10<a&&a%10==0&&C.warn("Memory leak found - Request result map is getting too large (size #"+a+")"),t}d.eventCallback=function(e){if(e.source===window&&e.data.direction&&"jabra-headset-extension-from-content-script"===e.data.direction){var t=e.data.apiClientId||"",n=e.data.requestId||"";if(O===t||""===t)if(C.trace("Receiving event from content script: "+JSON.stringify(e.data)),"na"===e.data.message&&delete e.data.message,e.data.message&&e.data.message.startsWith("Error:")&&(e.data.error=e.data.message,delete e.data.message),e.data.message){C.trace("Got message: "+JSON.stringify(e.data));var a=e.data.message.substring(7);if(a.startsWith("logLevel"))return y.logLevel=parseInt(e.data.message.substring(16)),void C.trace("Logger set to level "+y.logLevel);var i=S.findIndex(function(e){return a.startsWith(e)});if(0<=i){("getinstallinfo"===a||a.startsWith("Version "))&&(e.data.data||(e.data.data={}),e.data.data.version_jsapi=y.apiVersion),"getinstallinfo"===a&&(e.data.data.installationOk=(g=e.data.data,!((v=[g.version_browserextension,g.version_chromehost,g.version_jsapi]).some(function(e){return!e})||!g.version_nativesdk||!v.map(function(e){var t=e.lastIndexOf("beta");return 0<=t&&e.length>t+4?e.substr(t+4):void 0}).filter(function(e){return e}).every(function(e,t,n){return e===n[0]}))));var s=E(n);if(s){var o;if(e.data.data)o=e.data.data;else{var r=S[i].length+1,l=a.substring(r);o={},l&&(o.legacy_result=l)}s.resolve(o)}else{var d="Result target information missing for message "+e.data.message+". This is likely due to some software components that have not been updated or a software bug. Please upgrade extension and/or chromehost";C.error(d),A("error",{error:d,message:e.data.message})}}else{if(!I.has(a))return C.warn("Unknown message: "+e.data.message),void A("error",{error:"Unknown message: ",message:e.data.message});var c=JSON.parse(JSON.stringify(e.data));delete c.direction,delete c.apiClientId,delete c.requestId,A(c.message=a,c)}if(b)return b=!1,h()}else if(e.data.error){C.error("Got error: "+e.data.error);var m=e.data.error.substring(7),u=E(n);if(u)u.reject(new T(u.cmd,m,e.data.data));else{var p=JSON.parse(JSON.stringify(e.data));delete p.direction,delete p.apiClientId,delete p.requestId,p.error=m,A("error",p)}if(b)return b=!1,f(new Error(e.data.error))}}var g,v},window.addEventListener("message",d.eventCallback),setTimeout(function(){g("getversion",null,!1).then(function(e){var t="string"==typeof e||_instanceof(e,String)?e:JSON.stringify(e,null,2);C.trace("getversion returned successfully with : "+t),p("logLevel",null,!1)}).catch(function(e){C.error(e)})},1e3),setTimeout(function(){!0===b&&(b=!1,f(new Error("Jabra Browser Integration: You need to use this <a href='https://chrome.google.com/webstore/detail/"+(n?"igcbbdnhomedfadljgcmcfpdcoonihfe":"okpeabepajdgiepelmhkfhkjlhhmofma")+"'>Extension</a> and then reload this page")))},5e3),d.initialized=!0,d.initializing=!1})},y.shutdown=function(){return d.initialized?(window.removeEventListener("message",d.eventCallback),d.eventCallback=void 0,r.clear(),l=1,d.initialized=!1,I.forEach(function(e,t){}),Promise.resolve()):Promise.reject(new Error("Browser integration not initialized"))},y.addEventListener=function(e,n){c(e).map(function(e){var t=I.get(e);t.find(function(e){return e===n})||t.push(n)})},y.removeEventListener=function(e,a){c(e).map(function(e){var t=I.get(e),n=t.findIndex(function(e){return e===a});0<=n&&t.splice(n,1)})},y.ring=function(){p("ring")},y.offHook=function(){p("offhook")},y.onHook=function(){p("onhook")},y.mute=function(){p("mute")},y.unmute=function(){p("unmute")},y.hold=function(){p("hold")},y.resume=function(){p("resume")},y.setMmiFocus=function(e,t){return g("setmmifocus",{type:b(e),capture:f(t)})},y.setRemoteMmiLightAction=function(e,t,n){return g("setremotemmilightaction",{type:b(e),color:function(e){if(""===e||"string"!=typeof e&&!_instanceof(e,String)){if("number"==typeof e){var t=e;return[t>>16&255,t>>8&255,255&t]}if(Array.isArray(e)){if(3!=e.length)throw new Error("Illegal argument - wrong dimension of number array (3 expected)");return e}throw new Error("Illegal/missing argument - number array or hex string expected")}var n=parseInt(e,16);return[n>>16&255,n>>8&255,255&n]}(t),effect:b(n)})},y.getActiveDevice=function(){return f(0<arguments.length&&void 0!==arguments[0]&&arguments[0])?h():m()},y.getDevices=function(){return f(0<arguments.length&&void 0!==arguments[0]&&arguments[0])?navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?d.initialized?"https:"===location.protocol?Promise.all([u(),navigator.mediaDevices.enumerateDevices()]).then(function(e){var t=_slicedToArray(e,2),n=t[0],a=t[1];return n.forEach(function(e){v(e,a)}),n}):Promise.reject(new Error("Your browser needs https for lookup to work")):Promise.reject(new Error("Browser integration not initialized")):Promise.reject(new Error("Your browser does not support required media api")):u()},y._setActiveDeviceId=function(e){var t=b(e);p("setactivedevice "+e.toString(),{id:t})},y.setActiveDeviceId=function(e){return g("setactivedevice2",{id:b(e)})},y.setBusyLight=function(e){return g("setbusylight",{busy:f(e)})},y.getInstallInfo=function(){return g("getinstallinfo")},y.trySetDeviceOutput=function(e,t){return e&&t?"function"!=typeof e.setSinkId?Promise.reject(new Error("Your browser does not support required Audio Output Devices API")):e.setSinkId(t.browserAudioOutputId).then(function(){return e.sinkId===t.browserAudioOutputId}):Promise.reject(new Error("Call to trySetDeviceOutput has argument(s) missing"))},y.isDeviceSelectedForInput=function(e,t){if(!e||!t)throw Error("Call to isDeviceSelectedForInput has argument(s) missing");for(var n=e.getAudioTracks(),a=0,i=n.length;a<i;a++)if(n[a].getCapabilities().deviceId!==t.browserAudioInputId)return!1;return!0},y.getUserDeviceMediaExt=function(n){if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)return Promise.reject(new Error("Your browser does not support required media api"));if(!d.initialized)return Promise.reject(new Error("Browser integration not initialized"));if("https:"!==location.protocol&&C.warn("This function needs to run under https for best UX experience (persisted permissions)"),null!=n&&"object"!==_typeof(n))return Promise.reject(new Error("Optional constraints parameter must be an object"));function i(e,t){if(null==t||"object"!==_typeof(e))return e;var n={};for(var a in t)n[a]=t[a];for(var a in e)n[a]=i(e[a],t[a]);return n}return navigator.mediaDevices.getUserMedia(i({audio:!0},n)).then(function(e){return h().then(function(t){return e.getTracks().forEach(function(e){e.stop()}),t&&t.browserAudioInputId?navigator.mediaDevices.getUserMedia(i({audio:{deviceId:t.browserAudioInputId}},n)).then(function(e){return{stream:e,deviceInfo:t}}):Promise.reject(new Error("Could not find a Jabra device with a microphone"))})})}}(jabra||(jabra={})),EditorUi=function(e,t,n){this.projectDesignController=e,this.editor=t||new Editor,this.container=n||document.body;var a=t.graph,i=this;CRUD_PERMISSIONS=this.projectDesignController.crudPermissions;var s=mxUtils.bind(this,function(e){return null==e&&(e=window.event),!!this.isEditingEnabled()&&a.isEditing()});this.container.style.overflow="hidden",(new Image).src=mxPopupMenu.prototype.submenuImage,null!=mxConnectionHandler.prototype.connectImage&&((new Image).src=mxConnectionHandler.prototype.connectImage.src),this.actions=new Actions(this),this.menus=new Menus(this),this.createDivs(),this.refresh(),this.createUi(),this.container==document.body&&(this.menubarContainer.onselectstart=s,this.menubarContainer.onmousedown=s,this.toolbarContainer.onselectstart=s,this.toolbarContainer.onmousedown=s,this.diagramContainer.onselectstart=s,this.diagramContainer.onmousedown=s,this.sidebarContainer.onselectstart=s,this.sidebarContainer.onmousedown=s,this.footerContainer.onselectstart=s,this.footerContainer.onmousedown=s),mxClient.IS_IE&&(void 0===document.documentMode||document.documentMode<9)?(mxEvent.addListener(this.diagramContainer,"contextmenu",s),mxEvent.addListener(this.sidebarContainer,"contextmenu",s)):(this.diagramContainer.oncontextmenu=s,this.sidebarContainer.oncontextmenu=s),a.init(this.diagramContainer),a.refresh(),a.setEnabled(this.isEditingEnabled()),a.container.setAttribute("tabindex","0"),a.container.style.cursor="default",a.container.style.backgroundImage="url("+t.gridImage+")",a.container.style.backgroundPosition="-1px -1px",a.container.focus();var o=a.fireMouseEvent;a.fireMouseEvent=function(e,t,n){e==mxEvent.MOUSE_DOWN&&this.container.focus(),o.apply(this,arguments)},this.createMultiplicities(a.multiplicities,["start","finally","end"],[[1,1],[1,1],[0,0]],[[0,0],[0,0],[1,"n"]]),this.createMultiplicities(a.multiplicities,["answer","hangup","dial","ext_dial","queue","voicemail","callback"],[[1,1],[0,0],[0,1],[0,1],[0,1],[1,1],[0,1]],[[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["login","pause","unpause","logout"],[[1,2],[1,2],[1,2],[1,2]],[[1,"n"],[1,"n"],[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["set","math"],[[1,1],[1,1]],[[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["background","playback","menu","saydigits","saynumber","sayphonetic","tts","ispeechtts","awspolly","getdigits","getsecretdigits","lumenvoxtts","sestektts"],[[1,"n"],[1,1],[1,"n"],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,"n"],[1,"n"],[1,1],[1,1]],[[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["record"],[[1,1]],[[1,"n"]]),this.createMultiplicities(a.multiplicities,["database","ispeechasr","sendSMS","sendMail","sendFax","googleasr","lumenvoxasr","tildeasr","dialogflow","awslex","sesteknda","sestekasr"],[[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1]],[[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["gotoc","gotoif","gotoiftime","vswitch"],[[0,0],[1,2],[1,2],[1,"n"]],[[1,"n"],[1,"n"],[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["queuelog","goal"],[[1,1],[1,1]],[[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["noop","system","agi","subproject","custom_app"],[[1,1],[1,1],[0,1],[0,1],[0,1]],[[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"]]),a.dblClick=function(e,n){var t=new mxEventObject(mxEvent.DOUBLE_CLICK,"event",e,"cell",n);this.fireEvent(t),mxEvent.isConsumed(e)||t.isConsumed()||(this.getModel().isEdge(n)?0<=["background","gotoif","gotoiftime","menu","getdigits","getsecretdigits","vswitch","login","pause","unpause","logout"].indexOf(n.source.value.tagName)&&this.startEditingAtCell(n):this.getModel().isVertex(n)&&i.projectDesignController.openDialog(n.getValue(),function(e){for(var t=0;t<e.length;t+=1)n.setAttribute(e[t].name,e[t].value);a.refresh(n)}),t.consume())},a.panningHandler.autoExpand=!0,a.panningHandler.factoryMethod=mxUtils.bind(this,function(e,t,n){this.isEditingEnabled()&&this.menus.createPopupMenu(e,t,n)}),t.outline.init(this.outlineContainer),mxEvent.addGestureListeners(document,mxUtils.bind(this,function(e){a.panningHandler.hideMenu()})),mxClient.IS_TOUCH&&(mxEvent.addListener(a.container,"gesturechange",mxUtils.bind(this,function(e){a.view.getDrawPane().setAttribute("transform","scale("+e.scale+")"),a.view.getOverlayPane().style.visibility="hidden"})),mxEvent.addListener(a.container,"gestureend",mxUtils.bind(this,function(e){a.view.getDrawPane().removeAttribute("transform"),a.zoomToCenter=!0,a.zoom(e.scale),a.view.getOverlayPane().style.visibility="visible"})));var r=this.isEditingEnabled()?this.createKeyHandler(t):null;this.getKeyHandler=function(){return r},mxEvent.addListener(window,"resize",mxUtils.bind(this,function(){this.refresh(),a.sizeDidChange(),this.editor.outline.update(!1),this.editor.outline.outline.sizeDidChange()})),this.init(),this.open(),this.refresh()},EditorUi.prototype.splitSize=mxClient.IS_TOUCH?16:8,EditorUi.prototype.menubarHeight=33,EditorUi.prototype.toolbarHeight=36,EditorUi.prototype.footerHeight=0,EditorUi.prototype.hsplitPosition=204,EditorUi.prototype.vsplitPosition=190,EditorUi.prototype.init=function(){this.addUndoListener(),this.addSelectionListener();var e=this.actions.get("paste"),t=function(){e.setEnabled(!mxClipboard.isEmpty())},n=mxClipboard.cut;mxClipboard.cut=function(){n.apply(this,arguments),t()};var a=mxClipboard.copy;mxClipboard.copy=function(){a.apply(this,arguments),t()}},EditorUi.prototype.isEditingEnabled=function(){return!!CRUD_PERMISSIONS.canEdit},EditorUi.prototype.exportXML=function(e){var t=window.document.createElement("a");t.href="data:attachment/text;charset=utf-8,"+encodeURIComponent(e),t.download=this.editor.filename+".xml",t.target="_self",t.click()},EditorUi.prototype.open=function(){try{null!=window.opener&&null!=window.opener.openFile&&window.opener.openFile.setConsumer(mxUtils.bind(this,function(e,t){try{var n=mxUtils.parseXml(e);this.editor.setGraphXml(n.documentElement),this.editor.modified=!1,this.editor.undoManager.clear(),null!=t&&(this.editor.filename=t)}catch(e){mxUtils.alert(mxResources.get("invalidOrMissingFile")+": "+e.message)}}))}catch(e){}},EditorUi.prototype.openString=function(e,t,n){try{var a=mxUtils.parseXml(e);this.editor.setGraphXml(a.documentElement),this.editor.modified=!1,this.editor.undoManager.clear(),null!=t&&(this.editor.filename=t),null!=n&&(this.editor.data=n)}catch(e){mxUtils.alert(mxResources.get("invalidOrMissingFile")+": "+e.message)}},EditorUi.prototype.validate=function(e,t){for(var n=this.editor.graph,a=(e=null!=e?e:n.model.getRoot(),t=null!=t?t:{},!0),i=n.model.getChildCount(e),s=0;s<i;s++){var o=n.model.getChildAt(e,s),r=t;n.isValidRoot(o)&&(r={}),null!=(r=this.validate(o,r))?n.setCellWarning(o,r.replace(/\n/g,"<br>")):n.setCellWarning(o,null),a=a&&null==r}if(i="",n.model.isVertex(e))switch(e.value.nodeName){case"start":i=this.validateBlock("start")?"":"Only one Start block is allowed\n";break;case"finally":i=this.validateBlock("finally")?"":"Only one Finally block is allowed\n";break;case"playback":i=0<e.value.getAttribute("file_id")?"":mxResources.get("noAudioSelected")+"\n";break;case"answer":i=0<=e.value.getAttribute("timeout")?"":mxResources.get("invalidTimeout")+"\n";break;case"menu":i=0<e.value.getAttribute("file_id")?"":mxResources.get("noAudioSelected")+"\n",i+=0<e.value.getAttribute("digit")?"":mxResources.get("wrongMaxDigit")+"\n",i+=0<=e.value.getAttribute("response")?"":mxResources.get("invalidTimeout")+"\n",i+=0<=e.value.getAttribute("retry")?"":mxResources.get("invalidRetry")+"\n";break;case"getdigits":i=0<e.value.getAttribute("file_id")?"":mxResources.get("noAudioSelected")+"\n",i+=0<e.value.getAttribute("variable_id")?"":mxResources.get("noVariableSelected")+"\n",i+=0<e.value.getAttribute("mindigit")?"":mxResources.get("wrongMinDigit")+"\n",i+=0<e.value.getAttribute("maxdigit")?"":mxResources.get("wrongMaxDigit")+"\n",i+=0<=e.value.getAttribute("retry")?"":mxResources.get("invalidRetry")+"\n";break;case"getsecretdigits":i=0<e.value.getAttribute("file_id")?"":mxResources.get("noAudioSelected")+"\n",i+=0<e.value.getAttribute("variable_id")?"":mxResources.get("noVariableSelected")+"\n",i+=0<e.value.getAttribute("mindigit")?"":mxResources.get("wrongMinDigit")+"\n",i+=0<e.value.getAttribute("maxdigit")?"":mxResources.get("wrongMaxDigit")+"\n",i+=0<=e.value.getAttribute("hiddendigitsnum")?"":mxResources.get("wrongHiddenDigitsnum")+"\n",i+=0<=e.value.getAttribute("retry")?"":mxResources.get("invalidRetry")+"\n";break;case"vswitch":i=0<e.value.getAttribute("variable_id")?"":mxResources.get("noVariableSelected")+"\n";break;case"database":i=0<e.value.getAttribute("odbc_id")?"":mxResources.get("noDatabaseSelected")+"\n",i+=""!==e.value.getAttribute("query")?"":mxResources.get("missingQuery")+"\n";break;case"set":case"math":i=0<e.value.getAttribute("variable_id")?"":mxResources.get("noVariableSelected")+"\n";break;case"gotoc":i=""!==e.value.getAttribute("context")?"":mxResources.get("noContextSelected")+"\n",i+=""!==e.value.getAttribute("extension")?"":mxResources.get("noExtensionSelected")+"\n",i+=1<=e.value.getAttribute("priority")?"":mxResources.get("invalidPriority")+"\n";break;case"system":case"agi":i=""!==e.value.getAttribute("command")?"":mxResources.get("noCommandSelected")+"\n";break;case"gotoif":i=""!==e.value.getAttribute("condition")?"":mxResources.get("noConditionSelected")+"\n";break;case"saydigits":i=""!==e.value.getAttribute("digits")?"":mxResources.get("noDigitsSelected")+"\n";break;case"saynumber":i=""!==e.value.getAttribute("number")?"":mxResources.get("noNumberSelected")+"\n";break;case"sayphonetic":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n";break;case"record":i=""!==e.value.getAttribute("file")?"":mxResources.get("noFileSelected")+"\n",i+=-1<=e.value.getAttribute("timeout")?"":mxResources.get("invalidTimeout")+"\n";break;case"goal":i=""!==e.value.getAttribute("goalname")?"":mxResources.get("noGoalSelected")+"\n";break;case"ext_dial":i="-1"!==e.value.getAttribute("trunk_name")?"":mxResources.get("noTrunkSelected")+"\n",i+=""!==e.value.getAttribute("phone")?"":mxResources.get("noIdentifierSelected")+"\n",i+=0<=e.value.getAttribute("timeout")?"":mxResources.get("invalidTimeout")+"\n";break;case"dial":i=0<e.value.getAttribute("sip_id")?"":mxResources.get("noIdentifierSelected")+"\n",i+=0<=e.value.getAttribute("timeout")?"":mxResources.get("invalidTimeout")+"\n";break;case"queue":i="-1"!==e.value.getAttribute("queue_id")?"":mxResources.get("noQueueSelected")+"\n",i+=0<=e.value.getAttribute("timeout")?"":mxResources.get("invalidTimeout")+"\n";break;case"callback":i="-1"!==e.value.getAttribute("list_id")?"":mxResources.get("noListSelected")+"\n",i+=""!==e.value.getAttribute("name")?"":mxResources.get("noFirstNameSelected")+"\n",i+=""!==e.value.getAttribute("phone")?"":mxResources.get("noPhoneSelected")+"\n",i+=""!==e.value.getAttribute("delay")?"":mxResources.get("invalidDelay")+"\n";break;case"gotoiftime":i=0<e.value.getAttribute("interval_id")?"":mxResources.get("noIntervalSelected")+"\n";break;case"voicemail":i=""!==e.value.getAttribute("mailbox")?"":mxResources.get("noBoxNumberSelected")+"\n";break;case"subproject":i=0<e.value.getAttribute("project_id")?"":mxResources.get("noProjectSelected")+"\n";break;case"sendSMS":i=0<e.value.getAttribute("sms_account_id")?"":mxResources.get("noAccountSelected")+"\n",i+=""!==e.value.getAttribute("to")?"":mxResources.get("noRecipientSelected")+"\n",i+=""!==e.value.getAttribute("sms_text")?"":mxResources.get("noTextSelected")+"\n";break;case"sendMail":i=0<e.value.getAttribute("account_id")?"":mxResources.get("noAccountSelected")+"\n",i+=""!==e.value.getAttribute("to")?"":mxResources.get("noRecipientSelected")+"\n";break;case"sendFax":i=0<e.value.getAttribute("account_id")?"":mxResources.get("noAccountSelected")+"\n",i+=""!==e.value.getAttribute("to")?"":mxResources.get("noRecipientSelected")+"\n",i+=""!==e.value.getAttribute("attachment_path")?"":mxResources.get("noAttachmentSelected")+"\n";break;case"tts":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n";break;case"awspolly":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n",i=""!==e.value.getAttribute("aws_access_key_id")?"":mxResources.get("noAccessKeySelected")+"\n",i=""!==e.value.getAttribute("aws_secret_access_key")?"":mxResources.get("noSecretAccessKeySelected")+"\n";break;case"awslex":i=""!==e.value.getAttribute("aws_bot_name")?"":mxResources.get("noNameSelected")+"\n",i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n",i=""!==e.value.getAttribute("aws_access_key_id")?"":mxResources.get("noAccessKeySelected")+"\n",i=""!==e.value.getAttribute("aws_secret_access_key")?"":mxResources.get("noSecretAccessKeySelected")+"\n";break;case"ispeechtts":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n",i+=""!==e.value.getAttribute("key")?"":mxResources.get("noKeySelected")+"\n",i+=-10<=e.value.getAttribute("speed")&&e.value.getAttribute("speed")<=10?"":mxResources.get("invalidSpeed")+"\n";break;case"lumenvoxtts":case"sestektts":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n";break;case"lumenvoxasr":case"sestekasr":i=""!==e.value.getAttribute("grammar")?"":mxResources.get("noGrammarSelected")+"\n";break;case"ispeechasr":case"googleasr":i=""!==e.value.getAttribute("key")?"":mxResources.get("noKeySelected")+"\n",i+=-1<=e.value.getAttribute("timeout")?"":mxResources.get("invalidTimeout")+"\n";break;case"tildeasr":i=""!==e.value.getAttribute("appid")?"":mxResources.get("noAppIdInserted")+"\n",i+=""!==e.value.getAttribute("appsecret")?"":mxResources.get("noAppSecretInserted")+"\n",i+=""!==e.value.getAttribute("uri")?"":mxResources.get("noUrlInserted")+"\n";break;case"custom_app":i=""!==e.value.getAttribute("application")?"":mxResources.get("noApplicationSelected")+"\n";break;case"login":case"pause":case"unpause":case"logout":i=""!==e.value.getAttribute("findBy")?"":mxResources.get("noFindBySelected")+"\n";case"sesteknda":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n",i+=""!==e.value.getAttribute("ndauth_url")?"":mxResources.get("noUrlInserted")+"\n",i+=""!==e.value.getAttribute("ndassistant_url")?"":mxResources.get("noUrlInserted")+"\n",i+=""!==e.value.getAttribute("username")?"":mxResources.get("noUsernameSelected")+"\n",i+=""!==e.value.getAttribute("password")?"":mxResources.get("noPasswordSelected")+"\n"}if(n.model.isEdge(e))switch(n.model.getCell(e.source.getId()).value.nodeName){case"background":case"menu":if(void 0!==e.getValue()){var l=/^[0-9]+$|^[-]{1}$|^[i]{1}$|^[t]{1}$|^[*]{1}$|^[#]{1}$/;String(e.getValue()).split(",").forEach(function(e){i+=l.test(e)?"":mxResources.get("numberOrAll")+"\n"})}else i=i+mxResources.get("numberOrAll")+"\n";break;case"getsecretdigits":case"getdigits":if(void 0!==e.getValue())i+=(l=/^(x|i|-)$/).test(String(e.getValue()))?"":mxResources.get("numberOrInvalidOrDefault")+"\n";else i=i+mxResources.get("numberOrInvalidOrDefault")+"\n";break;case"gotoif":case"gotoiftime":if(void 0!==e.getValue())i+=(l=/^(true){1}$|^(false){1}$/).test(String(e.getValue()))?"":mxResources.get("trueOrFalse")+"\n";else i=i+mxResources.get("trueOrFalse")+"\n";break;case"login":case"pause":case"unpause":case"logout":if(void 0!==e.getValue())i+=(l=/^(success){1}$|^(failure){1}$/).test(String(e.getValue()))?"":mxResources.get("successOrFailure")+"\n";else i=i+mxResources.get("successOrFailure")+"\n"}return n.isCellCollapsed(e)&&!a&&(i+=(mxResources.get(n.containsValidationErrorsResource)||n.containsValidationErrorsResource)+"\n"),i=n.model.isEdge(e)?i+(n.getEdgeValidationError(e,n.model.getTerminal(e,!0),n.model.getTerminal(e,!1))||""):i+(n.getCellValidationError(e)||""),null!=(s=n.validateCell(e,t))&&(i+=s),null==n.model.getParent(e)&&n.view.validate(),0<i.length||!a?i:null},EditorUi.prototype.validateBlock=function(t){var n=this.editor.graph,e=n.getDefaultParent(),a=0;return e.children.forEach(function(e){n.model.isVertex(e)&&e.value.nodeName==t&&a++}),!(1<a)},EditorUi.prototype.getUrl=function(e){var t=null!=e?e:window.location.pathname,n=0<t.indexOf("?")?1:0;for(var a in urlParams)t+=0==n?"?":"&",t+=a+"="+urlParams[a],n++;return t},EditorUi.prototype.addUndoListener=function(){var e=this.actions.get("undo"),t=this.actions.get("redo"),n=this.editor.undoManager,a=function(){e.setEnabled(n.canUndo()),t.setEnabled(n.canRedo())};n.addListener(mxEvent.ADD,a),n.addListener(mxEvent.UNDO,a),n.addListener(mxEvent.REDO,a),n.addListener(mxEvent.CLEAR,a),a()},EditorUi.prototype.addSelectionListener=function(){var e=mxUtils.bind(this,function(){var e=this.editor.graph,t=!e.isSelectionEmpty(),n=!1,a=!1,i=e.getSelectionCells();if(null!=i)for(var s=0;s<i.length;s++){var o=i[s];if(e.getModel().isEdge(o)&&(a=!0),e.getModel().isVertex(o)&&(n=!0),a&&n)break}var r=["cut","copy","delete","duplicate","bold","italic","style","underline","toFront","toBack","dashed","rounded","shadow","tilt","autosize"];for(s=0;s<r.length;s++)this.actions.get(r[s]).setEnabled(t);this.actions.get("curved").setEnabled(a),this.actions.get("rotation").setEnabled(n),this.actions.get("wordWrap").setEnabled(n),this.actions.get("group").setEnabled(1<e.getSelectionCount()),this.actions.get("ungroup").setEnabled(1==e.getSelectionCount()&&0<e.getModel().getChildCount(e.getSelectionCell()));var l=n&&1==e.getSelectionCount();this.actions.get("removeFromGroup").setEnabled(l&&e.getModel().isVertex(e.getModel().getParent(e.getSelectionCell())));var d=["fontFamily","fontSize","alignment","position","text","format","arrange","linewidth","spacing"];for(s=0;s<d.length;s++)this.menus.get(d[s]).setEnabled(t);d=["line","lineend","linestart"];for(s=0;s<d.length;s++)this.menus.get(d[s]).setEnabled(a);this.actions.get("setAsDefaultEdge").setEnabled(a),this.menus.get("align").setEnabled(1<e.getSelectionCount()),this.menus.get("direction").setEnabled(n||a&&e.isLoop(e.view.getState(e.getSelectionCell()))),this.menus.get("navigation").setEnabled(e.foldingEnabled&&(null!=e.view.currentRoot||1==e.getSelectionCount()&&e.isValidRoot(e.getSelectionCell()))),this.actions.get("home").setEnabled(null!=e.view.currentRoot),this.actions.get("exitGroup").setEnabled(null!=e.view.currentRoot);var c=1==e.getSelectionCount()&&e.isValidRoot(e.getSelectionCell());this.actions.get("enterGroup").setEnabled(c),this.actions.get("expand").setEnabled(c),this.actions.get("collapse").setEnabled(c),this.actions.get("editLink").setEnabled(1==e.getSelectionCount()),this.actions.get("openLink").setEnabled(1==e.getSelectionCount()&&null!=e.getLinkForCell(e.getSelectionCell()))});this.editor.graph.getSelectionModel().addListener(mxEvent.CHANGE,e),e()},EditorUi.prototype.refresh=function(){var e=mxClient.IS_IE&&(null==document.documentMode||5==document.documentMode),t=this.container.clientWidth+390,n=this.container.clientHeight+190;this.container==document.body&&(t=document.body.clientWidth||document.documentElement.clientWidth,n=e&&document.body.clientHeight||document.documentElement.clientHeight);var a=Math.max(0,Math.min(this.hsplitPosition,t-this.splitSize-20)),i=Math.max(0,Math.min(this.vsplitPosition,n-this.menubarHeight-this.toolbarHeight-this.splitSize-1));this.menubarContainer.style.height=this.menubarHeight+"px",this.toolbarContainer.style.top=this.menubarHeight+"px",this.toolbarContainer.style.height=this.toolbarHeight+"px";var s=this.menubarHeight+this.toolbarHeight;if(mxClient.IS_QUIRKS||(s+=1),this.sidebarContainer.style.top=s+"px",this.sidebarContainer.style.width=a+"px",this.outlineContainer.style.width=a+"px",this.outlineContainer.style.height=i+"px",this.diagramContainer.style.left=this.isEditingEnabled()?a+this.splitSize+"px":"0px",this.diagramContainer.style.top=this.sidebarContainer.style.top,this.hsplit.style.top=this.sidebarContainer.style.top,this.hsplit.style.bottom=this.outlineContainer.style.bottom,this.hsplit.style.left=a+"px",this.vsplit.style.width=this.sidebarContainer.style.width,this.vsplit.style.bottom=i+this.footerHeight+"px",e){this.menubarContainer.style.width=t+"px",this.toolbarContainer.style.width=this.menubarContainer.style.width;var o=n-i-this.splitSize-this.menubarHeight-this.toolbarHeight;this.sidebarContainer.style.height=o+"px",this.diagramContainer.style.width=t-a-this.splitSize+"px";var r=n-this.menubarHeight-this.toolbarHeight;this.diagramContainer.style.height=r+"px",this.hsplit.style.height=r+"px"}else this.sidebarContainer.style.bottom=i+this.splitSize+"px",this.diagramContainer.style.bottom=this.outlineContainer.style.bottom},EditorUi.prototype.createDivs=function(){this.menubarContainer=this.createDiv("geMenubarContainer"),this.toolbarContainer=this.createDiv("geToolbarContainer"),this.sidebarContainer=this.createDiv("geSidebarContainer"),this.outlineContainer=this.createDiv("geOutlineContainer"),this.diagramContainer=this.createDiv("geDiagramContainer"),this.footerContainer=this.createDiv("geFooterContainer"),this.hsplit=this.createDiv("geHsplit"),this.vsplit=this.createDiv("geVsplit"),this.menubarContainer.style.top="0px",this.menubarContainer.style.left="0px",this.menubarContainer.style.right="0px",this.toolbarContainer.style.left="0px",this.toolbarContainer.style.right="0px",this.sidebarContainer.style.left="0px",this.outlineContainer.style.bottom="0px",this.outlineContainer.style.left="0px",this.diagramContainer.style.overflow="scroll",this.diagramContainer.style.right="0px",this.footerContainer.style.left="0px",this.footerContainer.style.right="0px",this.footerContainer.style.bottom="0px",this.vsplit.style.left="0px",this.vsplit.style.height=this.splitSize+"px",this.hsplit.style.width=this.splitSize+"px"},EditorUi.prototype.createUi=function(){this.menubar=this.menus.createMenubar(this.createDiv("geMenubar")),this.menubarContainer.appendChild(this.menubar.container),this.toolbar=this.createToolbar(this.createDiv("geToolbar")),this.toolbarContainer.appendChild(this.toolbar.container),this.sidebar=this.createSidebar(this.sidebarContainer),this.footerContainer.appendChild(this.createFooter()),this.statusContainer=this.createStatusContainer(),this.editor.addListener("statusChanged",mxUtils.bind(this,function(){this.setStatusText(this.editor.getStatus())})),this.setStatusText(this.editor.getStatus()),this.menubar.container.appendChild(this.statusContainer),this.isEditingEnabled()&&(this.container.appendChild(this.sidebarContainer),this.container.appendChild(this.hsplit),this.container.appendChild(this.vsplit)),this.container.appendChild(this.diagramContainer),this.container.appendChild(this.menubarContainer),this.container.appendChild(this.toolbarContainer),this.container.appendChild(this.outlineContainer),this.container.appendChild(this.footerContainer),this.addSplitHandler(this.hsplit,!0,0,mxUtils.bind(this,function(e){this.hsplitPosition=e,this.refresh(),this.editor.graph.sizeDidChange(),this.editor.outline.update(!1),this.editor.outline.outline.sizeDidChange()})),this.addSplitHandler(this.vsplit,!1,this.footerHeight,mxUtils.bind(this,function(e){this.vsplitPosition=e,this.refresh(),this.editor.outline.update(!1),this.editor.outline.outline.sizeDidChange()}))},EditorUi.prototype.createStatusContainer=function(){var e=document.createElement("a");return e.className="geItem geStatus",e},EditorUi.prototype.createStatusContainer=function(){var e=document.createElement("a");return e.className="geItem geStatus",e},EditorUi.prototype.setStatusText=function(e){this.statusContainer.innerHTML=e},EditorUi.prototype.createToolbar=function(e){return new Toolbar(this,e)},EditorUi.prototype.createSidebar=function(e){return new Sidebar(this,e)},EditorUi.prototype.createFooter=function(){return this.createDiv("geFooter")},EditorUi.prototype.createDiv=function(e){var t=document.createElement("div");return t.className=e,t},EditorUi.prototype.createHeader=function(e){return document.createElement(e)},EditorUi.prototype.createForm=function(e){var t=document.createElement("form");return t.className=e,t},EditorUi.prototype.addSplitHandler=function(t,n,a,i){var s=null,o=null;function r(e){if(null!=s){var t=new mxPoint(mxEvent.getClientX(e),mxEvent.getClientY(e));i(Math.max(0,o+(n?t.x-s.x:s.y-t.y)-a)),mxEvent.consume(e)}}function e(e){r(e),o=s=null}mxEvent.addGestureListeners(t,function(e){s=new mxPoint(mxEvent.getClientX(e),mxEvent.getClientY(e)),o=parseInt(n?t.style.left:t.style.bottom),mxEvent.consume(e)}),mxEvent.addListener(document,"mousemove",r),mxEvent.addListener(document,"touchmove",r),mxEvent.addListener(document,"mouseup",e),mxEvent.addListener(document,"touchend",e)},EditorUi.prototype.executeLayout=function(e,t,n){var a=this.editor.graph,i=a.getSelectionCell();t=null!=this.animate?this.animate:t,a.getModel().beginUpdate();try{e.execute(a.getDefaultParent(),i)}catch(e){throw e}finally{if(t&&navigator.userAgent.indexOf("Camino")<0){var s=new mxMorphing(a);s.addListener(mxEvent.DONE,mxUtils.bind(this,function(){a.getModel().endUpdate()})),s.startAnimation()}else a.getModel().endUpdate()}},EditorUi.prototype.createKeyHandler=function(e){var a=this.editor.graph,o=new mxKeyHandler(a);function t(e){if(!a.isSelectionEmpty()){var t=0,n=0;37==e?t=-1:38==e?n=-1:39==e?t=1:40==e&&(n=1),a.moveCells(a.getSelectionCells(),t,n),a.scrollCellToVisible(a.getSelectionCell())}}o.isControlDown=function(e){return mxEvent.isControlDown(e)||mxClient.IS_MAC&&e.metaKey};var n=mxUtils.bind(this,function(e,t,n,a){var i=this.actions.get(n);if(null!=i){var s=function(){i.enabled&&i.funct()};t?a?o.bindControlShiftKey(e,s):o.bindControlKey(e,s):a?o.bindShiftKey(e,s):o.bindKey(e,s)}});return o.enter=function(){},o.bindKey(8,function(){a.foldCells(!0)}),o.bindKey(13,function(){a.foldCells(!1)}),o.bindKey(33,function(){a.exitGroup()}),o.bindKey(34,function(){a.enterGroup()}),o.bindKey(36,function(){a.home()}),o.bindKey(35,function(){a.refresh()}),o.bindKey(37,function(){t(37)}),o.bindKey(38,function(){t(38)}),o.bindKey(39,function(){t(39)}),o.bindKey(40,function(){t(40)}),o.bindKey(113,function(){a.startEditingAtCell()}),n(46,!1,"delete"),n(82,!0,"tilt"),n(83,!0,"save"),n(83,!0,"saveAs",!0),n(107,!1,"zoomIn"),n(109,!1,"zoomOut"),n(65,!0,"selectAll"),n(86,!0,"selectVertices",!0),n(69,!0,"selectEdges",!0),n(69,!0,"export"),n(66,!0,"toBack"),n(70,!0,"toFront"),n(68,!0,"duplicate"),n(90,!0,"undo"),n(89,!0,"redo"),n(88,!0,"cut"),n(67,!0,"copy"),n(81,!0,"connect"),n(86,!0,"paste"),n(71,!0,"group"),n(71,!0,"grid",!0),n(85,!0,"ungroup"),n(112,!1,"about"),n(80,!0,"publish",!0),o},EditorUi.prototype.createMultiplicities=function(e,t,n,a){for(var i=0;i<t.length;i++)e.push(new mxMultiplicity(!0,t[i],null,null,n[i][0],n[i][1],null,mxResources.get(t[i])+mxResources.get("musthave")+n[i][0]+mxResources.get("outgoingedge"),null)),e.push(new mxMultiplicity(!1,t[i],null,null,a[i][0],a[i][1],null,mxResources.get(t[i])+mxResources.get("musthave")+a[i][0]+mxResources.get("incomingedge"),null))};var useLocalStorage=(mxClient.IS_TOUCH||"local"==urlParams.storage)&&"undefined"!=typeof localStorage,fileSupport=null!=window.File&&null!=window.FileReader&&null!=window.FileList,touchStyle=mxClient.IS_TOUCH||"1"==urlParams.touch,counter=0;try{for(var op=window;null!=op.opener&&!isNaN(op.opener.counter);)op=op.opener;null!=op&&(op.counter++,counter=op.counter)}catch(e){}function Sidebar(e,t){this.editorUi=e,this.container=t,this.palettes=new Object,this.taglist=new Object,this.showTooltips=!0,this.graph=new Graph(document.createElement("div"),null,null,this.editorUi.editor.graph.getStylesheet()),this.graph.resetViewOnRootChange=!1,this.graph.foldingEnabled=!1,this.graph.setConnectable(!1),this.graph.autoScroll=!1,this.graph.setTooltips(!1),this.graph.setEnabled(!1),this.graph.container.style.visibility="hidden",this.graph.container.style.position="absolute",this.graph.container.style.overflow="hidden",this.graph.container.style.height="1px",this.graph.container.style.width="1px",mxClient.IS_IE||mxClient.IS_IE11||(this.graph.container.style.display="none"),document.body.appendChild(this.graph.container),this.pointerUpHandler=mxUtils.bind(this,function(){this.showTooltips=!0}),mxEvent.addListener(document,mxClient.IS_POINTER?"pointerup":"mouseup",this.pointerUpHandler),this.pointerDownHandler=mxUtils.bind(this,function(){this.showTooltips=!1,this.hideTooltip()}),mxEvent.addListener(document,mxClient.IS_POINTER?"pointerdown":"mousedown",this.pointerDownHandler),this.pointerMoveHandler=mxUtils.bind(this,function(e){for(var t=mxEvent.getSource(e);null!=t;){if(t==this.currentElt)return;t=t.parentNode}this.hideTooltip()}),mxEvent.addListener(document,mxClient.IS_POINTER?"pointermove":"mousemove",this.pointerMoveHandler),this.pointerOutHandler=mxUtils.bind(this,function(e){null==e.toElement&&null==e.relatedTarget&&this.hideTooltip()}),mxEvent.addListener(document,mxClient.IS_POINTER?"pointerout":"mouseout",this.pointerOutHandler),mxEvent.addListener(t,"scroll",mxUtils.bind(this,function(){this.showTooltips=!0})),this.init(),mxClient.IS_SVG||((new Image).src=IMAGE_PATH+"/tooltip.png")}function Actions(e){this.editorUi=e,this.actions=new Object,this.init()}function Action(e,t,n,a,i){mxEventSource.call(this),this.label=e,this.funct=t,this.enabled=null==n||n,this.iconCls=a,this.shortcut=i}function Menubar(e,t){this.editorUi=e,this.container=t,mxEvent.addGestureListeners(document,mxUtils.bind(this,function(e){this.hideMenu()}))}function Menu(e,t){mxEventSource.call(this),this.funct=e,this.enabled=null==t||t}function Toolbar(e,t){this.editorUi=e,this.container=t,this.init(),mxEvent.addGestureListeners(document,mxUtils.bind(this,function(e){this.hideMenu()}))}function createCheckbox(e){var t=document.createElement("input");return t.setAttribute("type","checkbox"),e&&t.setAttribute("checked",!0),t}function createDropdownFromApi(e,n,a,i,t,s,o,r){var l=new XMLHttpRequest;l.open("GET",e,!1),l.setRequestHeader("Authorization","Bearer "+t.editor.data.token),l.send(null);var d=[];200===l.status&&(d=JSON.parse(l.response));var c=document.createElement("select"),m=document.createElement("option");return m.text="-- None --",m.value="-1",c.appendChild(m),d.rows.forEach(function(t){r&&t[a]==r||((m=document.createElement("option")).text=t[a],s&&o?(m.value=o,s.forEach(function(e){m.value=m.value.replace("%"+e+"%",t[e])}),m.selected=m.value==n):(m.value=t[i],m.selected=t[i]==n),c.appendChild(m))}),c.className="form-control select2",c}function createDropdownWithOptgroupFromApi(e,t,n,a,i,s){var o=new XMLHttpRequest;o.open("GET",e,!1),o.setRequestHeader("Authorization","Bearer "+i.editor.data.token),o.send(null);var r=[];200===o.status&&(r=JSON.parse(o.response));var l=document.createElement("select"),d=document.createElement("option");d.text="-- None --",d.value="-1",l.appendChild(d);var c=_.groupBy(r.rows,s);for(var m in c)if(c.hasOwnProperty(m)){var u=document.createElement("optgroup");u.label=_.capitalize(m),c[m].forEach(function(e){(d=document.createElement("option")).text=e[n],d.value=e[a],d.selected=e[a]==t,u.appendChild(d)}),l.appendChild(u)}return l.className="form-control select2",l}function createGroupedDropdownFromApi(e,t,n,a,i,s){var o=new XMLHttpRequest;o.open("GET",e,!1),o.setRequestHeader("Authorization","Bearer "+i.editor.data.token),o.send(null);var r=[];200===o.status&&(r=JSON.parse(o.response));var l=document.createElement("select"),d=document.createElement("option");return d.text="-- None --",d.value="0",l.appendChild(d),r.rows.forEach(function(e){(d=document.createElement("option")).className="select-group-father",d.text=e[n].toUpperCase(),d.value=e[a],d.selected=e[a]==t,l.appendChild(d),e[s].forEach(function(e){(d=document.createElement("option")).className="select-group-son",d.text="-"+_.capitalize(e[n]),d.value=e[a],d.selected=e[a]==t,l.appendChild(d)})}),l.className="form-control select2",l}function createDropdownFromArray(e,t){var n=document.createElement("select");for(var a in e){var i=document.createElement("option");i.text=e[a],i.value=a,(0<t||""!=t)&&(i.selected=t===a),n.appendChild(i)}return n.className="form-control select2",n}function createDropdownFromTigerDialList(e){var t=document.createElement("select"),n=[],a=new XMLHttpRequest;try{if(a.open("POST","/api/rest/list/list",!1),a.send(JSON.stringify({page:1,size:6e5})),200===a.status){var i=JSON.parse(a.response);if(0<i.status){var s=i.response.RMI.rows;for(var o in s)n[s[o].id]=s[o].name}}}catch(e){console.log(e)}for(var r in n){var l=document.createElement("option");l.text=n[r],l.value=r,(0<e||""!=e)&&(l.selected=e===r),t.appendChild(l)}return t.className="form-control select2",t}function Dialog(e,t,n,a,i,s,o){var r=0;mxClient.IS_IE&&9!=document.documentMode&&(r=60),n+=r,a+=r;Math.max(0,Math.round((document.body.scrollWidth-n)/2)),Math.max(0,Math.round((Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)-a)/3));var l=e.createDiv("geDialog");l.className="modal fade in center",l.style.display="block",l.style.paddingRight="12px";var d=e.createDiv("geModalDialog");d.className="modal-dialog",d.appendChild(t),l.appendChild(d),null==this.bg&&(this.bg=e.createDiv("background"),this.bg.className="modal-backdrop fade in",mxClient.IS_QUIRKS&&new mxDivResizer(this.bg)),i&&document.body.appendChild(this.bg),document.body.appendChild(l),this.onDialogClose=o,this.container=l}function ImportDialog(n){var e=n.createDiv("modal-content"),t=n.createDiv("modal-header"),a=n.createDiv("modal-body"),i=n.createDiv("modal-footer"),s=n.createHeader("h4");mxUtils.write(s,mxResources.get("import")+" XML");var o=mxUtils.button("",function(){n.hideDialog()});o.className="close",t.appendChild(o),t.appendChild(s);var r=n.createDiv("row"),l=n.createDiv("col-md-12"),d=document.createElement("textarea");d.style.width="100%",d.style.height="374px";var c=document.createElement("input");c.type="file",c.setAttribute("accept","text/xml"),c.addEventListener("change",function(e){var t=e.target.files[0];if(console.log(t),t)if("text/xml"===t.type){var n=new FileReader;n.onload=function(e){var t=e.target.result;mxUtils.write(d,t)},n.readAsText(t)}else alert("Failed to load format file");else alert("Failed to load file")},!1),l.appendChild(c),l.appendChild(d),r.appendChild(l),a.appendChild(r);var m=mxUtils.button(mxResources.get("import"),mxUtils.bind(this,function(e){var t=mxUtils.parseXml(d.value);n.editor.setGraphXml(t.documentElement),n.hideDialog()}));m.className="btn blue";var u=mxUtils.button(mxResources.get("cancel"),function(){n.hideDialog()});u.className="btn default",i.appendChild(m),i.appendChild(u),e.appendChild(t),e.appendChild(a),e.appendChild(i),this.container=e}function AboutDialog(e){var t=e.createDiv("modal-content"),n=e.createDiv("modal-header"),a=e.createDiv("modal-body"),i=e.createDiv("modal-footer"),s=e.createHeader("h4");mxUtils.write(s,mxResources.get("about")+" Cally Square");var o=mxUtils.button("",function(){e.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=document.createElement("img");r.style.border="0px",r.setAttribute("width","176"),r.setAttribute("width","151"),r.setAttribute("src",IMAGE_PATH+"/logo.png"),a.appendChild(r),mxUtils.br(a),mxUtils.write(a,"Powered by Xenialab "+mxClient.VERSION),mxUtils.br(a);var l=document.createElement("a");l.setAttribute("href","http://www.callysquare.com/"),l.setAttribute("target","_blank"),mxUtils.write(l,"www.callysquare.com"),a.appendChild(l),mxUtils.br(a),mxUtils.br(a);var d=mxUtils.button(mxResources.get("close"),function(){e.hideDialog()});d.className="btn default",i.appendChild(d),t.appendChild(n),t.appendChild(a),t.appendChild(i),this.container=t}function SaveDialog(e){var t=e.createDiv("modal-content"),n=e.createDiv("modal-header"),a=e.createDiv("modal-body"),i=e.createDiv("modal-footer"),s=e.createHeader("h4");mxUtils.write(s,mxResources.get("saveAs"));var o=mxUtils.button("",function(){e.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=e.editor.getOrCreateFilename(),l=e.createDiv("row"),d=e.createDiv("col-md-4"),c=e.createDiv("col-md-8"),m=document.createElement("label");m.className="control-label pull-right",mxUtils.write(m,mxResources.get("name")),d.appendChild(m);var u=document.createElement("input");u.setAttribute("value",r+"_copy"),u.setAttribute("id","_name"),u.className="form-control",c.appendChild(u),l.appendChild(d),l.appendChild(c),a.appendChild(l);var p=mxUtils.button(mxResources.get("save"),function(){e.saveAs(u.value),e.hideDialog()});p.className="btn blue";var g=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});g.className="btn default",i.appendChild(p),i.appendChild(g),t.appendChild(n),t.appendChild(a),t.appendChild(i),this.container=t}function NewDialog(e){var t=e.createDiv("modal-content"),n=e.createDiv("modal-header"),a=e.createDiv("modal-body"),i=e.createDiv("modal-footer"),s=e.createHeader("h4");mxUtils.write(s,mxResources.get("new"));var o=mxUtils.button("",function(){e.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=e.editor.getOrCreateFilename(),l=e.createDiv("row"),d=e.createDiv("col-md-4"),c=e.createDiv("col-md-8"),m=document.createElement("label");m.className="control-label pull-right",mxUtils.write(m,mxResources.get("name")),d.appendChild(m);var u=document.createElement("input");u.setAttribute("value",r+"_new"),u.setAttribute("id","_name"),u.className="form-control",c.appendChild(u),l.appendChild(d),l.appendChild(c),a.appendChild(l);var p=mxUtils.button(mxResources.get("new"),function(){e.new(u.value),e.hideDialog()});p.className="btn blue";var g=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});g.className="btn default",i.appendChild(p),i.appendChild(g),t.appendChild(n),t.appendChild(a),t.appendChild(i),this.container=t}function DescriptionDialog(e){console.log(e.editor.data);var t=e.createDiv("modal-content"),n=e.createDiv("modal-header"),a=e.createDiv("modal-body"),i=e.createDiv("modal-footer"),s=e.createHeader("h4");mxUtils.write(s,mxResources.get("description"));var o=mxUtils.button("",function(){e.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=e.createDiv("form-horizontal form-row-seperated"),l="description",d=e.editor.data.description||"",c=e.createDiv("form-group"),m=document.createElement("label");m.className="col-sm-4 control-label",mxUtils.write(m,mxResources.get(l)),c.appendChild(m);var u=document.createElement("input");u.setAttribute("value",d),u.className="form-control",u.setAttribute("id","_description");var p=e.createDiv("col-sm-8");p.appendChild(u),c.appendChild(p),r.appendChild(c),a.appendChild(r);var g=mxUtils.button(mxResources.get("update"),function(){e.description(u.value),e.hideDialog()});g.className="btn blue";var v=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});v.className="btn default",i.appendChild(g),i.appendChild(v),t.appendChild(n),t.appendChild(a),t.appendChild(i),this.container=t}function VariableDialog(e){var t=e.createDiv("modal-content"),n=e.createDiv("modal-header"),a=e.createDiv("modal-body"),i=e.createDiv("modal-footer"),s=e.createHeader("h4");mxUtils.write(s,mxResources.get("variable"));var o=mxUtils.button("",function(){e.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=e.createDiv("form-horizontal form-row-seperated"),l="name",d="_"+l,c="variable name",m=e.createDiv("form-group"),u=document.createElement("label");u.className="col-sm-4 control-label",mxUtils.write(u,mxResources.get(l)),m.appendChild(u);var p=document.createElement("input");p.setAttribute("value",c),p.className="form-control",p.setAttribute("id",d);var g=e.createDiv("col-sm-8");g.appendChild(p),m.appendChild(g),r.appendChild(m),d="_"+(l="description"),c="variable description",m=e.createDiv("form-group last"),(u=document.createElement("label")).className="col-sm-4 control-label",mxUtils.write(u,mxResources.get(l)),m.appendChild(u);var v=document.createElement("input");v.setAttribute("value",c),v.className="form-control",v.setAttribute("id",d),(g=e.createDiv("col-sm-8")).appendChild(v),m.appendChild(g),r.appendChild(m),a.appendChild(r);var h=mxUtils.button(mxResources.get("new"),function(){e.variable(p.value,v.value),e.hideDialog()});h.className="btn blue";var f=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});f.className="btn default",i.appendChild(h),i.appendChild(f),t.appendChild(n),t.appendChild(a),t.appendChild(i),this.container=t}function OpenDialog(e){var t=e.createDiv("modal-content"),n=e.createDiv("modal-header"),a=e.createDiv("modal-body"),i=e.createDiv("modal-footer"),s=e.createHeader("h4");mxUtils.write(s,mxResources.get("open"));var o=mxUtils.button("",function(){e.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=e.createDiv("row"),l=e.createDiv("col-md-4"),d=e.createDiv("col-md-8"),c=document.createElement("label");c.className="control-label pull-right",mxUtils.write(c,mxResources.get("name")),l.appendChild(c);var m=new XMLHttpRequest;m.open("GET","/api/square/projects",!1),m.setRequestHeader("Authorization","Bearer "+e.editor.data.token),m.send(null);var u=[];200===m.status&&(u=JSON.parse(m.response));for(var p=document.createElement("select"),g=0;g<u.length;g++){var v=document.createElement("option");v.text=u[g].name,v.value=u[g].id,p.appendChild(v)}p.className="form-control",d.appendChild(p),r.appendChild(l),r.appendChild(d),a.appendChild(r);var h=mxUtils.button(mxResources.get("open"),function(){console.log(p),console.log(p.value),window.open("square/project/"+p.value,"_blank"),e.hideDialog()});h.className="btn blue";var f=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});f.className="btn default",i.appendChild(h),i.appendChild(f),t.appendChild(n),t.appendChild(a),t.appendChild(i),this.container=t}function RenameDialog(n){var e=n.createDiv("modal-content"),t=n.createDiv("modal-header"),a=n.createDiv("modal-body"),i=n.createDiv("modal-footer"),s=n.createHeader("h4");mxUtils.write(s,mxResources.get("rename"));var o=mxUtils.button("",function(){n.hideDialog()});o.className="close",t.appendChild(o),t.appendChild(s);var r=n.createDiv("row"),l=n.createDiv("col-md-4"),d=n.createDiv("col-md-8"),c=document.createElement("label");c.className="control-label pull-right",mxUtils.write(c,mxResources.get("name")),l.appendChild(c);var m=n.editor.filename,u=document.createElement("input");u.setAttribute("value",m),u.className="form-control",d.appendChild(u),r.appendChild(l),r.appendChild(d),a.appendChild(r);var p=mxUtils.button(mxResources.get("save"),function(){var t=new XMLHttpRequest;t.open("PUT",SAVE_URL+n.editor.data.id,!0),t.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),t.setRequestHeader("Authorization","Bearer "+n.editor.data.token),t.send("name="+u.value),t.onload=function(e){200===t.status?(n.editor.setStatus("Project successfully renamed"),n.editor.filename=u.value):(console.log(t.response),n.editor.setStatus(JSON.parse(t.response).errors[0].message))},t.onerror=function(e){mxUtils.alert(t.statusText)},n.hideDialog()});p.className="btn blue";var g=mxUtils.button(mxResources.get("cancel"),function(){n.hideDialog()});g.className="btn default",i.appendChild(p),i.appendChild(g),e.appendChild(t),e.appendChild(a),e.appendChild(i),this.container=e}function EditFileDialog(t){var e=t.createDiv("modal-content"),n=t.createDiv("modal-header"),a=t.createDiv("modal-body"),i=t.createDiv("modal-footer"),s=t.createHeader("h4");mxUtils.write(s,mxResources.get("edit"));var o=mxUtils.button("",function(){t.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=t.createDiv("row"),l=t.createDiv("col-md-12"),d=document.createElement("textarea");if(d.style.width="100%",d.style.height="374px",d.value=mxUtils.getPrettyXml(t.editor.getGraphXml()),fileSupport){d.addEventListener("dragover",function(e){e.stopPropagation(),e.preventDefault()},!1),d.addEventListener("drop",function(e){if(e.stopPropagation(),e.preventDefault(),0<e.dataTransfer.files.length){var t=e.dataTransfer.files[0],n=new FileReader;n.onload=function(e){d.value=e.target.result},n.readAsText(t)}},!1)}l.appendChild(d),r.appendChild(l),a.appendChild(r);var c=mxUtils.button(mxResources.get("save"),function(){var e=mxUtils.parseXml(d.value);t.editor.setGraphXml(e.documentElement),t.hideDialog()});c.className="btn blue";var m=mxUtils.button(mxResources.get("cancel"),function(){t.hideDialog()});m.className="btn default",i.appendChild(c),i.appendChild(m),e.appendChild(n),e.appendChild(a),e.appendChild(i),this.container=e}function ExportDialog(t){var e=t.createDiv("modal-content"),n=t.createDiv("modal-header"),a=t.createDiv("modal-body form"),i=t.createDiv("modal-footer"),s=t.createHeader("h4");mxUtils.write(s,mxResources.get("export")+" XML");var o=mxUtils.button("",function(){t.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=t.createDiv("form-horizontal form-row-seperated"),l=t.createDiv("form-group last"),d=document.createElement("label");d.className="col-sm-4 control-label",mxUtils.write(d,mxResources.get("filename"));var c=document.createElement("input");c.setAttribute("value",t.editor.getOrCreateFilename()),c.className="form-control";var m=t.createDiv("col-sm-8");m.appendChild(c),l.appendChild(d),l.appendChild(m),r.appendChild(l),a.appendChild(r);var u=mxUtils.button(mxResources.get("export"),mxUtils.bind(this,function(e){t.save(!1);encodeURIComponent(mxUtils.getXml(t.editor.getGraphXml()));new mxXmlRequest(SAVE_URL+t.editor.data.id+"/download","filename="+c.value,"GET").simulate(document,"_blank"),t.hideDialog()}));u.className="btn blue";var p=mxUtils.button(mxResources.get("cancel"),function(){t.hideDialog()});p.className="btn default",i.appendChild(u),i.appendChild(p),e.appendChild(n),e.appendChild(a),e.appendChild(i),this.container=e}function GeneralDialog(i,s){console.log("general");var o=i.editor.graph,e=i.createDiv("md-dialog"),t=i.createDiv("md-toolbar"),n=i.createDiv("md-dialog-content"),a=i.createDiv("md-dialog-actions"),r=i.createHeader("h4");mxUtils.write(r,mxResources.get("edit")+" "+mxResources.get(s.value.nodeName));var l=mxUtils.button("",function(){i.hideDialog()});l.className="close",t.appendChild(l),t.appendChild(r);for(var d=s.value.attributes.length,c=i.createDiv("form-horizontal form-row-seperated"),m=0;m<d;m++){var u,p=s.value.attributes[m].name,g="_"+p,v=s.value.attributes[m].value,h=i.createDiv(m==d-1?"form-group last":"form-group"),f=document.createElement("label");switch(f.className="col-sm-4 control-label",mxUtils.write(f,mxResources.get(p)),h.appendChild(f),p){case"sip_id":u=createDropdownWithOptgroupFromApi("/api/users/all",v,"fullname","id",i,"role");break;case"queue_id":u=createDropdownFromApi("/api/voice/queues",v,"name","name",i);break;case"trunk_name":u=createDropdownFromApi("/api/trunks",v,"name","name",i);break;case"variable_id":u=createDropdownFromApi("/api/variables",v,"name","id",i);break;case"account_id":u="sendMail"==s.value.nodeName?createDropdownFromApi("/api/mail/servers/out",v,"username","id",i):createDropdownFromApi("/api/sms/accounts",v,"name","id",i);break;case"template_id":u=createDropdownFromApi("/api/templates",v,"name","id",i);break;case"context":u=createDropdownFromApi("/api/voice/contexts",v,"name","name",i);break;case"mailbox":u=createDropdownFromApi("/api/voice/voicemails",v,"mailbox","id",i,["mailbox","context"],"%mailbox%@%context%");break;case"model":u=createDropdownFromArray(ISPEECHASRMODEL,v);break;case"ispeech_asr_language":u=createDropdownFromArray(ISPEECHASRLANG,v);break;case"beep":u=createDropdownFromArray(ISPEECHBEEP,v);break;case"hiddendigitspos":u=createDropdownFromArray(SECRETDIGITSPOS,v);break;case"ispeech_tts_language":u=createDropdownFromArray(ISPEECHLANG,v);break;case"google_tts_language":u=createDropdownFromArray(GOOGLETTSLANG,v);break;case"intKey":u=createDropdownFromArray(ASRINTKEYS,v);break;case"recordingFormat":u=createDropdownFromArray(RECORDINGFORMAT,v);break;case"answer":u=createDropdownFromArray(BOOLSELECT,v);break;case"list_id":u=createDropdownFromTigerDialList(v);break;case"interval_id":u=createGroupedDropdownFromApi("/api/intervals",v,"name","id",i,"SubIntervals");break;case"project_id":u=createDropdownFromApi("/api/square/projects",v,"name","id",i,null,null,i.editor.getOrCreateFilename());break;case"odbc_id":u=createDropdownFromApi("/api/square/odbc",v,"name","id",i);break;case"file_id":u=createDropdownFromApi("/api/sounds",v,"display_name","id",i);break;case"timeout":case"digit":case"mindigit":case"maxdigit":case"response":case"retry":case"speed":(u=document.createElement("input")).setAttribute("type","number"),u.setAttribute("min",0),u.setAttribute("max",1e3),u.setAttribute("value",v),u.className="form-control";break;case"text":case"key":case"query":case"condition":case"command":case"body":(u=document.createElement("textarea")).innerHTML=v,u.className="form-control";break;case"sms_text":(u=document.createElement("textarea")).innerHTML=v,u.className="form-control",u.setAttribute("maxlength","160");break;default:(u=document.createElement("input")).setAttribute("value",v),u.className="form-control"}u.setAttribute("id",g);var b=i.createDiv("col-sm-8");if(b.appendChild(u),mxResources.get("help_"+p)){var A=i.createDiv("p");A.className="help-block",mxUtils.write(A,mxResources.get("help_"+p)),b.appendChild(A)}h.appendChild(b),c.appendChild(h)}n.appendChild(c);var E=mxUtils.button(mxResources.get("save"),mxUtils.bind(this,function(e){for(var t=0;t<s.value.attributes.length;t++){var n="_"+s.value.attributes[t].name,a=s.value.attributes[t].name;s.setAttribute(a,document.getElementById(n).value)}o.refresh(s),i.hideDialog()}));E.className="btn blue";var y=mxUtils.button(mxResources.get("cancel"),function(){i.hideDialog()});y.className="btn default",a.appendChild(E),a.appendChild(y),e.appendChild(t),e.appendChild(n),e.appendChild(a),this.container=e}Editor=function(){mxEventSource.call(this),this.init(),this.initStencilRegistry(),this.graph=new Graph,this.outline=new mxOutline(this.graph),this.outline.updateOnPan=!0,this.undoManager=this.createUndoManager(),this.status="",this.filename=null,this.getOrCreateFilename=function(){return this.filename||mxResources.get("drawing",[counter])+".xml"},this.getFilename=function(){return this.filename},this.setStatus=function(e){this.status=e,this.fireEvent(new mxEventObject("statusChanged"))},this.getStatus=function(){return this.status},this.modified=!1,this.graphChangeListener=function(){this.modified=!0},this.graph.getModel().addListener(mxEvent.CHANGE,mxUtils.bind(this,function(){this.graphChangeListener.apply(this,arguments)})),window.onbeforeunload=mxUtils.bind(this,function(){if(this.modified)return mxResources.get("allChangesLost")}),this.graph.resetViewOnRootChange=!1,this.graph.scrollbars=!0,this.graph.background=null},mxUtils.extend(Editor,mxEventSource),Editor.prototype.gridImage=IMAGE_PATH+"/grid.gif",Editor.prototype.transparentImage=IMAGE_PATH+"/transparent.gif",Editor.prototype.setGraphXml=function(e){var t=new mxCodec(e.ownerDocument);if("mxGraphModel"==e.nodeName){this.graph.view.scale=Number(e.getAttribute("scale")||1),this.graph.gridEnabled="0"!=e.getAttribute("grid"),this.graph.graphHandler.guidesEnabled="0"!=e.getAttribute("guides"),this.graph.setTooltips("0"!=e.getAttribute("tooltips")),this.graph.setConnectable("0"!=e.getAttribute("connect")),this.graph.foldingEnabled="0"!=e.getAttribute("fold"),this.graph.scrollbars="0"!=e.getAttribute("scrollbars"),this.graph.scrollbars||(this.graph.container.scrollLeft=0,this.graph.container.scrollTop=0,this.graph.view.translate.x=Number(e.getAttribute("dx")||0),this.graph.view.translate.y=Number(e.getAttribute("dy")||0)),this.graph.pageVisible="1"==e.getAttribute("page"),this.graph.pageBreaksVisible=this.graph.pageVisible,this.graph.preferPageSize=this.graph.pageBreaksVisible;var n=e.getAttribute("pageScale");this.graph.pageScale=null!=n?n:1.5;var a=e.getAttribute("pageWidth"),i=e.getAttribute("pageHeight");null!=a&&null!=i&&(this.graph.pageFormat=new mxRectangle(0,0,parseFloat(a),parseFloat(i)),this.outline.outline.pageFormat=this.graph.pageFormat);var s=e.getAttribute("background");null!=s&&0<s.length&&(this.graph.background=s),t.decode(e,this.graph.getModel()),this.updateGraphComponents()}},Editor.prototype.getGraphXml=function(){var e=new mxCodec(mxUtils.createXmlDocument()).encode(this.graph.getModel());return 0==this.graph.view.translate.x&&0==this.graph.view.translate.y||(e.setAttribute("dx",Math.round(100*this.graph.view.translate.x)/100),e.setAttribute("dy",Math.round(100*this.graph.view.translate.y)/100)),1!=this.graph.view.scale&&e.setAttribute("scale",Math.round(1e3*this.graph.view.scale)/1e3),e.setAttribute("grid",this.graph.isGridEnabled()?"1":"0"),e.setAttribute("guides",this.graph.graphHandler.guidesEnabled?"1":"0"),e.setAttribute("guides",this.graph.graphHandler.guidesEnabled?"1":"0"),e.setAttribute("tooltips",this.graph.tooltipHandler.isEnabled()?"1":"0"),e.setAttribute("connect",this.graph.connectionHandler.isEnabled()?"1":"0"),e.setAttribute("fold",this.graph.foldingEnabled?"1":"0"),e.setAttribute("page",this.graph.pageVisible?"1":"0"),e.setAttribute("pageScale",this.graph.pageScale),e.setAttribute("pageWidth",this.graph.pageFormat.width),e.setAttribute("pageHeight",this.graph.pageFormat.height),this.graph.scrollbars||e.setAttribute("scrollbars","0"),null!=this.graph.background&&e.setAttribute("background",this.graph.background),e},Editor.prototype.updateGraphComponents=function(){var e=this.graph,t=this.outline;if(null!=e.container&&null!=t.outline.container){null!=e.background?"none"==e.background?e.container.style.backgroundColor="transparent":(null!=e.view.backgroundPageShape&&(e.view.backgroundPageShape.fill=e.background,e.view.backgroundPageShape.reconfigure()),e.container.style.backgroundColor=e.background):e.container.style.backgroundColor="",e.pageVisible?(e.container.style.backgroundColor="#ebebeb",e.container.style.borderStyle="solid",e.container.style.borderColor="#e5e5e5",e.container.style.borderTopWidth="1px",e.container.style.borderLeftWidth="1px",e.container.style.borderRightWidth="0px",e.container.style.borderBottomWidth="0px"):e.container.style.border="",t.outline.container.style.backgroundColor=e.container.style.backgroundColor,t.outline.pageVisible==e.pageVisible&&t.outline.pageScale==e.pageScale||(t.outline.pageScale=e.pageScale,t.outline.pageVisible=e.pageVisible,t.outline.view.validate()),e.scrollbars&&"hidden"==e.container.style.overflow&&!touchStyle?e.container.style.overflow="auto":e.scrollbars&&!touchStyle||(e.container.style.overflow="hidden");var n=mxClient.IS_IE&&9<=document.documentMode?"url("+this.transparentImage+")":"none";e.container.style.backgroundImage=!e.pageVisible&&e.isGridEnabled()?"url("+this.gridImage+")":n,null!=e.view.backgroundPageShape&&(e.view.backgroundPageShape.node.style.backgroundImage=this.graph.isGridEnabled()?"url("+this.gridImage+")":"none")}},Editor.prototype.init=function(){mxClient.IS_IE6&&mxClient.link("stylesheet",CSS_PATH+"/grapheditor-ie6.css"),mxResources.loadDefaultBundle=!1,mxResources.add(RESOURCE_BASE),mxConstants.DEFAULT_HOTSPOT=.3;var e=mxConnectionHandler.prototype.createMarker;mxConnectionHandler.prototype.createMarker=function(){var n=e.apply(this,arguments);return n.intersects=mxUtils.bind(this,function(e,t){return!!this.isConnecting()||mxCellMarker.prototype.intersects.apply(n,arguments)}),n},mxConstants.SHADOWCOLOR="#d0d0d0",mxConstants.HANDLE_FILLCOLOR="#99ccff",mxConstants.HANDLE_STROKECOLOR="#0088cf",mxConstants.VERTEX_SELECTION_COLOR="#00a8ff",mxConstants.OUTLINE_COLOR="#00a8ff",mxConstants.OUTLINE_HANDLE_FILLCOLOR="#99ccff",mxConstants.OUTLINE_HANDLE_STROKECOLOR="#00a8ff",mxConstants.CONNECT_HANDLE_FILLCOLOR="#cee7ff",mxConstants.EDGE_SELECTION_COLOR="#00a8ff",mxConstants.DEFAULT_VALID_COLOR="#00a8ff",mxConstants.LABEL_HANDLE_FILLCOLOR="#cee7ff",mxConstants.GUIDE_COLOR="#0088cf",mxGraph.prototype.pageBreakColor="#c0c0c0",mxGraph.prototype.pageScale=1,mxRubberband.prototype.defaultOpacity=30,mxGraphView.prototype.createBackgroundPageShape=function(e){return new mxRectangleShape(e,this.graph.background||"white","#cacaca")},mxGraphView.prototype.getBackgroundPageBounds=function(){var e=this.getGraphBounds(),t=0<e.width?e.x/this.scale-this.translate.x:0,n=0<e.height?e.y/this.scale-this.translate.y:0,a=e.width/this.scale,i=e.height/this.scale,s=this.graph.pageFormat,o=this.graph.pageScale,r=s.width*o,l=s.height*o,d=Math.floor(Math.min(0,t)/r),c=Math.floor(Math.min(0,n)/l),m=Math.ceil(Math.max(1,t+a)/r)-d,u=Math.ceil(Math.max(1,n+i)/l)-c;return new mxRectangle(this.scale*(this.translate.x+d*r),this.scale*(this.translate.y+c*l),this.scale*m*r,this.scale*u*l)};var n=mxGraph.prototype.panGraph;mxGraph.prototype.panGraph=function(e,t){n.apply(this,arguments),this.dialect==mxConstants.DIALECT_SVG||null==this.view.backgroundPageShape||this.useScrollbarsForPanning&&mxUtils.hasScrollbars(this.container)||(this.view.backgroundPageShape.node.style.marginLeft=e+"px",this.view.backgroundPageShape.node.style.marginTop=t+"px")};var a=this;mxGraphView.prototype.validateBackground=function(){var e=this.graph.getBackgroundImage();if(null!=e){if(null==this.backgroundImage||this.backgroundImage.image!=e.src){null!=this.backgroundImage&&this.backgroundImage.destroy();var t=new mxRectangle(0,0,1,1);this.backgroundImage=new mxImageShape(t,e.src),this.backgroundImage.dialect=this.graph.dialect,this.backgroundImage.init(this.backgroundPane),this.backgroundImage.redraw()}this.redrawBackgroundImage(this.backgroundImage,e)}else null!=this.backgroundImage&&(this.backgroundImage.destroy(),this.backgroundImage=null);if(this.graph.pageVisible){t=this.getBackgroundPageBounds();null==this.backgroundPageShape?(this.backgroundPageShape=this.createBackgroundPageShape(t),this.backgroundPageShape.scale=1,this.backgroundPageShape.isShadow=!0,this.backgroundPageShape.dialect=mxConstants.DIALECT_STRICTHTML,this.backgroundPageShape.init(this.graph.container),this.graph.container.firstChild.style.position="absolute",this.graph.container.insertBefore(this.backgroundPageShape.node,this.graph.container.firstChild),this.backgroundPageShape.redraw(),this.backgroundPageShape.node.className="geBackgroundPage",this.backgroundPageShape.node.style.backgroundPosition="-1px -1px",mxEvent.addListener(this.backgroundPageShape.node,"dblclick",mxUtils.bind(this,function(e){this.graph.dblClick(e)})),mxEvent.addGestureListeners(this.backgroundPageShape.node,mxUtils.bind(this,function(e){this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e))}),mxUtils.bind(this,function(e){null!=this.graph.tooltipHandler&&this.graph.tooltipHandler.isHideOnHover()&&this.graph.tooltipHandler.hide(),this.graph.isMouseDown&&!mxEvent.isConsumed(e)&&this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e))}),mxUtils.bind(this,function(e){this.graph.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e))}))):(this.backgroundPageShape.scale=1,this.backgroundPageShape.bounds=t,this.backgroundPageShape.redraw()),this.backgroundPageShape.node.style.backgroundImage=this.graph.isGridEnabled()?"url("+a.gridImage+")":"none"}else null!=this.backgroundPageShape&&(this.backgroundPageShape.destroy(),this.backgroundPageShape=null)},mxGraph.prototype.updatePageBreaks=function(e,t,n){var a=this.view.scale,i=this.view.translate,s=this.pageFormat,o=a*this.pageScale,r=this.view.getBackgroundPageBounds();t=r.width,n=r.height;var l=new mxRectangle(a*i.x,a*i.y,s.width*o,s.height*o),d=(e=e&&Math.min(l.width,l.height)>this.minPageBreakDist)?Math.ceil(t/l.width)-1:0,c=e?Math.ceil(n/l.height)-1:0,m=r.x+t,u=r.y+n;if(null==this.horizontalPageBreaks&&0<d&&(this.horizontalPageBreaks=[]),null!=this.horizontalPageBreaks){for(var p=0;p<=d;p++){var g=[new mxPoint(r.x+(p+1)*l.width,r.y),new mxPoint(r.x+(p+1)*l.width,u)];if(null!=this.horizontalPageBreaks[p])this.horizontalPageBreaks[p].scale=1,this.horizontalPageBreaks[p].points=g,this.horizontalPageBreaks[p].redraw();else(v=new mxPolyline(g,this.pageBreakColor,this.scale)).dialect=this.dialect,v.isDashed=this.pageBreakDashed,v.addPipe=!1,v.scale=a,v.init(this.view.backgroundPane),v.redraw(),this.horizontalPageBreaks[p]=v}for(p=d;p<this.horizontalPageBreaks.length;p++)this.horizontalPageBreaks[p].destroy();this.horizontalPageBreaks.splice(d,this.horizontalPageBreaks.length-d)}if(null==this.verticalPageBreaks&&0<c&&(this.verticalPageBreaks=[]),null!=this.verticalPageBreaks){for(p=0;p<=c;p++){var v;g=[new mxPoint(r.x,r.y+(p+1)*l.height),new mxPoint(m,r.y+(p+1)*l.height)];if(null!=this.verticalPageBreaks[p])this.verticalPageBreaks[p].scale=1,this.verticalPageBreaks[p].points=g,this.verticalPageBreaks[p].redraw();else(v=new mxPolyline(g,this.pageBreakColor,a)).dialect=this.dialect,v.isDashed=this.pageBreakDashed,v.addPipe=!1,v.scale=a,v.init(this.view.backgroundPane),v.redraw(),this.verticalPageBreaks[p]=v}for(p=c;p<this.verticalPageBreaks.length;p++)this.verticalPageBreaks[p].destroy();this.verticalPageBreaks.splice(c,this.verticalPageBreaks.length-c)}},mxEdgeHandler.prototype.snapToTerminals=!0,mxGraphHandler.prototype.guidesEnabled=!0;var s=mxGraphHandler.prototype.shouldRemoveCellsFromParent;mxGraphHandler.prototype.shouldRemoveCellsFromParent=function(e,t,n){for(var a=0;a<t.length;a++)if(this.graph.getModel().isVertex(t[a])){var i=this.graph.getCellGeometry(t[a]);if(null!=i&&i.relative)return!1}return s.apply(this,arguments)},mxGuide.prototype.isEnabledForEvent=function(e){return!mxEvent.isAltDown(e)};var r=mxPopupMenu.prototype.addItem;mxPopupMenu.prototype.addItem=function(e,t,n,a,i,s){var o=r.apply(this,arguments);return null==s||s||mxEvent.addListener(o,"mousedown",function(e){mxEvent.consume(e)}),o};var o=mxGraphHandler.prototype.getInitialCellForEvent;mxGraphHandler.prototype.getInitialCellForEvent=function(e){var t=this.graph.getModel(),n=t.getParent(this.graph.getSelectionCell()),a=o.apply(this,arguments),i=t.getParent(a);if(null==n||n!=a&&n!=i)for(;!this.graph.isCellSelected(a)&&!this.graph.isCellSelected(i)&&t.isVertex(i)&&!this.graph.isValidRoot(i);)a=i,i=this.graph.getModel().getParent(a);return a};var l=mxGraphHandler.prototype.isDelayedSelection;mxGraphHandler.prototype.isDelayedSelection=function(e){var t=l.apply(this,arguments),n=this.graph.getModel(),a=n.getParent(this.graph.getSelectionCell()),i=n.getParent(e);return(null==a||a!=e&&a!=i)&&(this.graph.isCellSelected(e)||!n.isVertex(i)||this.graph.isValidRoot(i)||(t=!0)),t},mxGraphHandler.prototype.selectDelayed=function(e){var t=e.getCell();null==t&&(t=this.cell);for(var n=this.graph.getModel(),a=n.getParent(t);this.graph.isCellSelected(t)&&n.isVertex(a)&&!this.graph.isValidRoot(a);)t=a,a=n.getParent(t);this.graph.selectCellForEvent(t,e.getEvent())},mxPanningHandler.prototype.getCellForPopupEvent=function(e){for(var t=e.getCell(),n=this.graph.getModel(),a=n.getParent(t);n.isVertex(a)&&!this.graph.isValidRoot(a);)this.graph.isCellSelected(a)&&(t=a),a=n.getParent(a);return t}},Editor.prototype.createUndoManager=function(){var s=this.graph,n=new mxUndoManager,e=function(e,t){n.undoableEditHappened(t.getProperty("edit"))};s.getModel().addListener(mxEvent.UNDO,e),s.getView().addListener(mxEvent.UNDO,e);var t=function(e,t){for(var n=s.getSelectionCellsForChanges(t.getProperty("edit").changes),a=[],i=1;i<n.length;i++)null!=s.view.getState(n[i])&&a.push(n[i]);s.setSelectionCells(a)};return n.addListener(mxEvent.UNDO,t),n.addListener(mxEvent.REDO,t),n},Editor.prototype.initStencilRegistry=function(){mxStencilRegistry.loadStencilSet(STENCIL_PATH+"/general.xml")},mxStencilRegistry.libraries={},mxStencilRegistry.packages=[],mxStencilRegistry.getStencil=function(e){var t=mxStencilRegistry.stencils[e];if(null==t){var n=mxStencilRegistry.getBasenameForStencil(e);if(null!=n){var a=mxStencilRegistry.libraries[n];if(null!=a){if(null==mxStencilRegistry.packages[n]){mxStencilRegistry.packages[n]=1;for(var i=0;i<a.length;i++){var s=a[i];if(".xml"==s.toLowerCase().substring(s.length-4,s.length))mxStencilRegistry.loadStencilSet(s,null);else if(".js"==s.toLowerCase().substring(s.length-3,s.length)){var o=mxUtils.load(s);null!=o&&eval.call(window,o.getText())}}}}else mxStencilRegistry.loadStencilSet(STENCIL_PATH+"/"+n+".xml",null);t=mxStencilRegistry.stencils[e]}}return t},mxStencilRegistry.getBasenameForStencil=function(e){var t=e.split("."),n=null;if(0<t.length&&"mxgraph"==t[0]){n=t[1];for(var a=2;a<t.length-1;a++)n+="/"+t[a]}return n},mxStencilRegistry.loadStencilSet=function(e,t,n){n=null!=n&&n;var a=mxStencilRegistry.packages[e];if(n||null==a){var i=!1;null==a&&(a=mxUtils.load(e).getXml(),mxStencilRegistry.packages[e]=a,i=!0),mxStencilRegistry.parseStencilSet(a,t,i)}},mxStencilRegistry.parseStencilSet=function(e,t,n){n=null==n||n;var a=e.documentElement,i=a.firstChild,s="",o=a.getAttribute("name");for(null!=o&&(s=o+".");null!=i;){if(i.nodeType==mxConstants.NODETYPE_ELEMENT&&null!=(o=i.getAttribute("name"))){s=s.toLowerCase();var r=o.replace(/ /g,"_");if(n&&mxStencilRegistry.addStencil(s+r.toLowerCase(),new mxStencil(i)),null!=t){var l=i.getAttribute("w"),d=i.getAttribute("h");t(s,r,o,l=null==l?80:parseInt(l,10),d=null==d?80:parseInt(d,10))}}i=i.nextSibling}},OpenFile=function(e){this.producer=null,this.consumer=null,this.done=e},OpenFile.prototype.setConsumer=function(e){this.consumer=e,this.execute()},OpenFile.prototype.setData=function(e,t){this.data=e,this.filename=t,this.execute()},OpenFile.prototype.error=function(e){this.cancel(),mxUtils.alert(e)},OpenFile.prototype.execute=function(){null!=this.consumer&&null!=this.data&&(this.consumer(this.data,this.filename),this.cancel())},OpenFile.prototype.cancel=function(){null!=this.done&&this.done()},Sidebar.prototype.init=function(){var e=STENCIL_PATH;this.addSearchPalette(!0),this.addImagePalette("entry",mxResources.get("entry"),e+"/entry/","_128x128.png",["start","finally","end"],[mxResources.get("start"),mxResources.get("finally"),mxResources.get("end")]),this.addImagePalette("call_management",mxResources.get("call_management"),e+"/call_management/","_128x128.png",["answer","hangup","dial","ext_dial","queue","voicemail","callback"],[mxResources.get("answer"),mxResources.get("hangup"),mxResources.get("dial"),mxResources.get("ext_dial"),mxResources.get("queue"),mxResources.get("voicemail"),mxResources.get("callback")]),this.addImagePalette("agent_management",mxResources.get("agent_management"),e+"/agent_management/","_128x128.png",["login","pause","unpause","logout"],[mxResources.get("login"),mxResources.get("pause"),mxResources.get("unpause"),mxResources.get("logout")]),this.addImagePalette("variable",mxResources.get("variable"),e+"/variable/","_128x128.png",["set","math"],[mxResources.get("set"),mxResources.get("math")]),this.addImagePalette("playback",mxResources.get("playback"),e+"/playback/","_128x128.png",["playback","menu","saydigits","saynumber","sayphonetic","getdigits","getsecretdigits"],[mxResources.get("playback"),mxResources.get("menu"),mxResources.get("saydigits"),mxResources.get("saynumber"),mxResources.get("sayphonetic"),mxResources.get("getdigits"),mxResources.get("getsecretdigits")]),this.addImagePalette("recording",mxResources.get("recording"),e+"/recording/","_128x128.png",["record"],[mxResources.get("record")]),this.addImagePalette("tts","TTS",e+"/tts/","_128x128.png",["tts","ispeechtts","awspolly","lumenvoxtts","sestektts"],["GoogleTTS","ISpeechTTS","AWSPolly","LumenvoxTTS","SestekTTS"]),this.addImagePalette("asr","ASR",e+"/asr/","_128x128.png",["googleasr","ispeechasr","lumenvoxasr","tildeasr","sestekasr"],["GoogleASR","ISpeechASR","LumenvoxASR","TildeASR","SestekASR"]),this.addImagePalette("integrationServer",mxResources.get("integrationServer"),e+"/integration_server/","_128x128.png",["database","sendMail","sendSMS","dialogflow","awslex","sesteknda"],[mxResources.get("database"),mxResources.get("sendMail"),mxResources.get("sendSMS"),"Dialogflow","AWSLex","SestekNDA"]),this.addImagePalette("callflow",mxResources.get("callflow"),e+"/callflow/","_128x128.png",["gotoc","gotoif","gotoiftime","vswitch"],[mxResources.get("gotoc"),mxResources.get("gotoif"),mxResources.get("gotoiftime"),mxResources.get("vswitch")]),this.addImagePalette("stats",mxResources.get("stats"),e+"/stats/","_128x128.png",["goal"],[mxResources.get("goal")]),this.addImagePalette("general",mxResources.get("general"),e+"/general/","_128x128.png",["noop","system","agi","subproject","custom_app"],[mxResources.get("noop"),mxResources.get("system"),mxResources.get("agi"),mxResources.get("subproject"),mxResources.get("custom_app")])},Sidebar.prototype.collapsedImage=mxClient.IS_SVG?"data:image/gif;base64,R0lGODlhDQANAIABAJmZmf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozNUQyRTJFNjZGNUYxMUU1QjZEOThCNDYxMDQ2MzNCQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozNUQyRTJFNzZGNUYxMUU1QjZEOThCNDYxMDQ2MzNCQiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjFERjc3MEUxNkY1RjExRTVCNkQ5OEI0NjEwNDYzM0JCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjFERjc3MEUyNkY1RjExRTVCNkQ5OEI0NjEwNDYzM0JCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAAAQAsAAAAAA0ADQAAAhSMj6lrwAjcC1GyahV+dcZJgeIIFgA7":IMAGE_PATH+"/collapsed.gif",Sidebar.prototype.expandedImage=mxClient.IS_SVG?"data:image/gif;base64,R0lGODlhDQANAIABAJmZmf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxREY3NzBERjZGNUYxMUU1QjZEOThCNDYxMDQ2MzNCQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxREY3NzBFMDZGNUYxMUU1QjZEOThCNDYxMDQ2MzNCQiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjFERjc3MERENkY1RjExRTVCNkQ5OEI0NjEwNDYzM0JCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjFERjc3MERFNkY1RjExRTVCNkQ5OEI0NjEwNDYzM0JCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAAAQAsAAAAAA0ADQAAAhGMj6nL3QAjVHIu6azbvPtWAAA7":IMAGE_PATH+"/expanded.gif",Sidebar.prototype.tooltipImage=mxClient.IS_SVG?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAbCAMAAAB7jU7LAAAACVBMVEX///+ZmZn///9Y2COLAAAAA3RSTlP//wDXyg1BAAAAOElEQVR42mXQMQ4AMAgDsWv//+iutcJmIQSk+9dJpVKpVCqVSqVSqZTdncWzF8/NeP7FkxWenPEDOnUBiL3jWx0AAAAASUVORK5CYII=":IMAGE_PATH+"/tooltip.png",Sidebar.prototype.searchImage=mxClient.IS_SVG?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAEaSURBVHjabNGxS5VxFIfxz71XaWuQUJCG/gCHhgTD9VpEETg4aMOlQRp0EoezObgcd220KQiXmpretTAHQRBdojlQEJyukPdt+b1ywfvAGc7wnHP4nlZd1yKijQW8xzNc4Su+ZOYfQ3T6/f4YNvEJYzjELXp4VVXVz263+7cR2niBxAFeZ2YPi3iHR/gYERPDwhpOsd6sz8x/mfkNG3iOlWFhFj8y89J9KvzGXER0GuEaD42mgwHqUtoljbcRsTBCeINpfM/MgZLKPpaxFxGbOCqDXmILN7hoJrTKH+axhxmcYRxP0MIDnOBDZv5q1XUNIuJxifJp+UNV7t7BFM6xeic0RMQ4Bpl5W/ol7GISx/eEUUTECrbx+f8A8xhiZht9zsgAAAAASUVORK5CYII=":IMAGE_PATH+"/search.png",Sidebar.prototype.enableTooltips=!0,Sidebar.prototype.tooltipBorder=16,Sidebar.prototype.tooltipDelay=300,Sidebar.prototype.dropTargetDelay=200,Sidebar.prototype.thumbWidth=36,Sidebar.prototype.thumbHeight=36,Sidebar.prototype.thumbPadding=5<=document.documentMode?0:1,Sidebar.prototype.thumbBorder=2,Sidebar.prototype.sidebarTitleSize=9,Sidebar.prototype.sidebarTitles=!1,Sidebar.prototype.tooltipTitles=!0,Sidebar.prototype.maxTooltipWidth=400,Sidebar.prototype.maxTooltipHeight=400,Sidebar.prototype.addStencilsToIndex=!0,Sidebar.prototype.defaultImageWidth=80,Sidebar.prototype.defaultImageHeight=80,Sidebar.prototype.getOffset=function(e){return{left:(e=e.getBoundingClientRect()).left+window.scrollX,top:e.top+window.scrollY}},Sidebar.prototype.showTooltip=function(c,m,u,p,g,v){if(this.enableTooltips&&this.showTooltips&&this.currentElt!=c){null!=this.thread&&(window.clearTimeout(this.thread),this.thread=null);var e=mxUtils.bind(this,function(){null==this.tooltip&&(this.tooltip=document.createElement("div"),this.tooltip.className="geSidebarTooltip",this.tooltip.style.zIndex=mxPopupMenu.prototype.zIndex-1,document.body.appendChild(this.tooltip),this.graph2=new Graph(this.tooltip,null,null,this.editorUi.editor.graph.getStylesheet()),this.graph2.resetViewOnRootChange=!1,this.graph2.foldingEnabled=!1,this.graph2.gridEnabled=!1,this.graph2.autoScroll=!1,this.graph2.setTooltips(!1),this.graph2.setConnectable(!1),this.graph2.setEnabled(!1),mxClient.IS_SVG||(this.graph2.view.canvas.style.position="relative"),this.tooltipImage=mxUtils.createImage(this.tooltipImage),this.tooltipImage.className="geSidebarTooltipImage",this.tooltipImage.style.zIndex=mxPopupMenu.prototype.zIndex-1,this.tooltipImage.style.position="absolute",this.tooltipImage.style.width="14px",this.tooltipImage.style.height="27px",document.body.appendChild(this.tooltipImage)),this.graph2.model.clear(),this.graph2.view.setTranslate(this.tooltipBorder,this.tooltipBorder),u>this.maxTooltipWidth||p>this.maxTooltipHeight?this.graph2.view.scale=Math.round(100*Math.min(this.maxTooltipWidth/u,this.maxTooltipHeight/p))/100:this.graph2.view.scale=1,this.tooltip.style.display="block",this.graph2.labelsVisible=null==v||v,this.graph2.addCells(m);var e=this.graph2.getGraphBounds(),t=e.width+2*this.tooltipBorder+4,n=e.height+2*this.tooltipBorder;if(mxClient.IS_QUIRKS?(n+=4,this.tooltip.style.overflow="hidden"):this.tooltip.style.overflow="visible",this.tooltipImage.style.visibility="visible",this.tooltip.style.width=t+"px",this.tooltipTitles&&null!=g&&0<g.length){null==this.tooltipTitle?(this.tooltipTitle=document.createElement("div"),this.tooltipTitle.style.borderTop="1px solid gray",this.tooltipTitle.style.textAlign="center",this.tooltipTitle.style.width="100%",this.tooltipTitle.style.overflow="hidden",mxClient.IS_SVG||(this.tooltipTitle.style.position="absolute"),this.tooltipTitle.style.paddingTop="6px",this.tooltip.appendChild(this.tooltipTitle)):this.tooltipTitle.innerHTML="",this.tooltipTitle.style.display="",mxUtils.write(this.tooltipTitle,g);var a=this.tooltipTitle.offsetHeight+10;n+=a,mxClient.IS_SVG?this.tooltipTitle.style.marginTop=2-a+"px":(n-=6,this.tooltipTitle.style.top=n-a+"px")}else null!=this.tooltipTitle&&null!=this.tooltipTitle.parentNode&&(this.tooltipTitle.style.display="none");this.tooltip.style.height=n+"px";var i=-Math.round(e.x-this.tooltipBorder),s=-Math.round(e.y-this.tooltipBorder),o=document.body,r=document.documentElement,l=(o.clientHeight||r.clientHeight,document.getElementById("vertical-navigation").offsetWidth+this.container.clientWidth),d=Math.max(0,this.getOffset(c).top-this.container.scrollTop-n/2+16);mxClient.IS_SVG?0!=i||0!=s?this.graph2.view.canvas.setAttribute("transform","translate("+i+","+s+")"):this.graph2.view.canvas.removeAttribute("transform"):(this.graph2.view.drawPane.style.left=i+"px",this.graph2.view.drawPane.style.top=s+"px"),this.tooltip.style.position="absolute",this.tooltip.style.left=l+"px",this.tooltip.style.top=d+"px",this.tooltipImage.style.left=l-13+"px",this.tooltipImage.style.top=d+n/2-13+"px"});null!=this.tooltip&&"none"!=this.tooltip.style.display?e():this.thread=window.setTimeout(e,this.tooltipDelay),this.currentElt=c}},Sidebar.prototype.hideTooltip=function(){null!=this.thread&&(window.clearTimeout(this.thread),this.thread=null),null!=this.tooltip&&(this.tooltip.style.display="none",this.tooltipImage.style.visibility="hidden",this.currentElt=null)},Sidebar.prototype.addEntry=function(e,t){if(null!=this.taglist&&null!=e&&0<e.length)for(var n=e.toLowerCase().replace(/[\/\,\(\)]/g," ").split(" "),a=0;a<n.length;a++)if(n[a]=n[a].replace(/\.*\d*$/,""),1<n[a].length){var i=this.taglist[n[a]];null==i&&(i={entries:[],dict:new mxDictionary},this.taglist[n[a]]=i),null==i.dict.get(t)&&(i.dict.put(t,t),i.entries.push(t))}return t},Sidebar.prototype.searchEntries=function(e,t,n,a,i){if(null!=this.taglist&&null!=e){for(var s=e.toLowerCase().split(" "),o=new mxDictionary,r=(n+1)*t,l=[],d=0,c=0;c<s.length;c++)if(0<s[c].length){var m=this.taglist[s[c]],u=new mxDictionary;if(null!=m){var p=m.entries;l=[];for(var g=0;g<p.length;g++){m=p[g];if(0==d==(null==o.get(m))&&(u.put(m,m),l.push(m),c==s.length-1&&l.length==r))return void a(l.slice(n*t,r),r,!0)}}else l=[];o=u,d++}var v=l.length;a(l.slice(n*t,(n+1)*t),v,!1)}else a([])},Sidebar.prototype.filterTags=function(e){if(null==e)return null;for(var t=e.split(" "),n=[],a={},i=0;i<t.length;i++)null==a[t[i]]&&(a[t[i]]="1",n.push(t[i]));return n.join(" ")},Sidebar.prototype.cloneCell=function(e,t){var n=e.clone();return null!=t&&(n.value=t),n},Sidebar.prototype.addSearchPalette=function(e){var t=document.createElement("div");t.style.visibility="hidden",this.container.appendChild(t);var r=document.createElement("div");r.className="geSidebar",r.style.boxSizing="border-box",r.style.overflow="hidden",r.style.width="100%",r.style.padding="8px",r.style.paddingTop="14px",r.style.paddingBottom="0px",e||(r.style.display="none");var n=document.createElement("div");n.style.whiteSpace="nowrap",n.style.textOverflow="clip",n.style.paddingBottom="8px",n.style.cursor="default";var a=document.createElement("input");a.setAttribute("placeholder",mxResources.get("searchShapes")),a.setAttribute("type","text"),a.style.fontSize="12px",a.style.overflow="hidden",a.style.boxSizing="border-box",a.style.border="solid 1px #d5d5d5",a.style.borderRadius="4px",a.style.width="100%",a.style.outline="none",a.style.padding="6px",n.appendChild(a);var i,s=document.createElement("img");s.setAttribute("src",Sidebar.prototype.searchImage),s.setAttribute("title",mxResources.get("search")),s.style.position="relative",s.style.left="-18px",mxClient.IS_QUIRKS?(a.style.height="28px",s.style.top="-4px"):s.style.top="2px",s.style.background="url('"+this.editorUi.editor.transparentImage+"')",n.appendChild(s),r.appendChild(n);var l=document.createElement("center"),d=mxUtils.button(mxResources.get("moreResults"),function(){i()});d.style.display="none",d.style.lineHeight="normal",d.style.marginTop="4px",d.style.marginBottom="8px",l.style.paddingTop="4px",l.style.paddingBottom="8px",l.appendChild(d),r.appendChild(l);var c="",m=!1,u=!1,p=0,g=new Object,v=12,h=mxUtils.bind(this,function(){m=!1,this.currentSearch=null;for(var e=r.firstChild;null!=e;){var t=e.nextSibling;e!=n&&e!=l&&e.parentNode.removeChild(e),e=t}});i=mxUtils.bind(this,function(){if(v=4*Math.max(1,Math.floor(this.container.clientWidth/(this.thumbWidth+10))),this.hideTooltip(),""!=a.value){if(null!=l.parentNode&&(c!=a.value&&(h(),c=a.value,g=new Object,u=!1,p=0),!m&&!u)){d.setAttribute("disabled","true"),d.style.display="",d.style.cursor="wait",d.innerHTML=mxResources.get("loading")+"...",m=!0;var o=new Object;this.currentSearch=o,this.searchEntries(c,v,p,mxUtils.bind(this,function(e,t,n){if(this.currentSearch==o){e=null!=e?e:[],m=!1,p++,l.parentNode.removeChild(l);for(var a=0;a<e.length;a++){var i=e[a]();null==g[i.innerHTML]&&(g[i.innerHTML]="1",r.appendChild(e[a]()))}if(n?(d.removeAttribute("disabled"),d.innerHTML=mxResources.get("moreResults")):(d.innerHTML=mxResources.get("reset"),d.style.display="none",u=!0),d.style.cursor="",0==e.length&&1==p){var s=document.createElement("div");s.className="geTitle",s.style.backgroundColor="transparent",s.style.borderColor="transparent",s.style.color="gray",s.style.padding="0px",s.style.margin="0px 8px 0px 8px",s.style.paddingTop="6px",s.style.textAlign="center",s.style.cursor="default",mxUtils.write(s,mxResources.get("noResultsFor",[c])),r.appendChild(s)}r.appendChild(l)}}),mxUtils.bind(this,function(){d.style.cursor=""}))}}else h(),a.value="",c="",g=new Object,d.style.display="none",u=!1,a.focus()}),mxEvent.addListener(a,"keydown",mxUtils.bind(this,function(e){13==e.keyCode&&i()})),mxEvent.addListener(a,"focus",function(){a.style.paddingRight="",s.style.display="none"}),mxEvent.addListener(a,"blur",function(){a.style.paddingRight="20px",s.style.display=""}),a.style.paddingRight="20px",mxEvent.addListener(a,"keyup",mxUtils.bind(this,function(e){""==a.value?(u=!0,d.style.display="none"):a.value!=c?(d.style.display="none",u=!1):m||(d.style.display=u?"none":"")})),mxEvent.addListener(a,"mousedown",function(e){e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0}),mxEvent.addListener(a,"selectstart",function(e){e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0});var o=document.createElement("div");o.appendChild(r),this.container.appendChild(o),this.palettes.search=[t,o]},Sidebar.prototype.createTitle=function(e){var t=document.createElement("a");return t.setAttribute("href","javascript:void(0);"),t.setAttribute("title",mxResources.get("sidebarTooltip")),t.className="geTitle",mxUtils.write(t,e),t},Sidebar.prototype.createThumb=function(e,t,n,a,i,s,o,r,l){this.graph.labelsVisible=null==s||s;var d=mxClient.NO_FO;mxClient.NO_FO=Editor.prototype.originalNoForeignObject,this.graph.view.scaleAndTranslate(1,0,0),this.graph.addCells(e);var c=this.graph.getGraphBounds(),m=Math.floor(100*Math.min((t-2*this.thumbBorder)/c.width,(n-2*this.thumbBorder)/c.height))/100;this.graph.view.scaleAndTranslate(m,Math.floor((t-c.width*m)/2/m-c.x),Math.floor((n-c.height*m)/2/m-c.y));var u=null;if(this.graph.dialect!=mxConstants.DIALECT_SVG||mxClient.NO_FO?(u=this.graph.container.cloneNode(!1)).innerHTML=this.graph.container.innerHTML:u=this.graph.view.getCanvas().ownerSVGElement.cloneNode(!0),this.graph.getModel().clear(),mxClient.NO_FO=d,mxClient.IS_IE6&&(a.style.backgroundImage="url("+this.editorUi.editor.transparentImage+")"),u.style.position="relative",u.style.overflow="hidden",u.style.cursor="move",u.style.left=this.thumbBorder+"px",u.style.top=this.thumbBorder+"px",u.style.width=t+"px",u.style.height=n+"px",u.style.visibility="",u.style.minWidth="",u.style.minHeight="",a.appendChild(u),this.sidebarTitles&&null!=i&&0!=o){var p=mxClient.IS_QUIRKS?2*this.thumbPadding+2:0;a.style.height=this.thumbHeight+p+this.sidebarTitleSize+8+"px";var g=document.createElement("div");g.style.fontSize=this.sidebarTitleSize+"px",g.style.color="#303030",g.style.textAlign="center",g.style.whiteSpace="nowrap",mxClient.IS_IE&&(g.style.height=this.sidebarTitleSize+12+"px"),g.style.paddingTop="4px",mxUtils.write(g,i),a.appendChild(g)}return c},Sidebar.prototype.createItem=function(t,n,a,e,i,s,o){var r=document.createElement("a");r.setAttribute("href","javascript:void(0);"),r.className="geItem",r.style.overflow="hidden";var l=mxClient.IS_QUIRKS?8+2*this.thumbPadding:2*this.thumbBorder;r.style.width=this.thumbWidth+l+"px",r.style.height=this.thumbHeight+l+"px",r.style.padding=this.thumbPadding+"px",mxEvent.addListener(r,"click",function(e){mxEvent.consume(e)}),this.createThumb(t,this.thumbWidth,this.thumbHeight,r,n,a,e,i,s);var d=new mxRectangle(0,0,i,s);if(1<t.length||t[0].vertex){var c=this.createDragSource(r,this.createDropHandler(t,!0,o,d),this.createDragPreview(i,s),t,d);this.addClickHandler(r,c,t),c.isGuidesEnabled=mxUtils.bind(this,function(){return this.editorUi.editor.graph.graphHandler.guidesEnabled})}else if(null!=t[0]&&t[0].edge){c=this.createDragSource(r,this.createDropHandler(t,!1,o,d),this.createDragPreview(i,s),t,d);this.addClickHandler(r,c,t)}return mxClient.IS_IOS||mxEvent.addGestureListeners(r,null,mxUtils.bind(this,function(e){this.showTooltip(r,t,d.width,d.height,n,a)})),r},Sidebar.prototype.createDropHandler=function(g,v,h,f){return h=null==h||h,mxUtils.bind(this,function(e,t,n,a,i){if(e.isEnabled()){if(0<(g=e.getImportableCells(g)).length){e.stopEditing();var s=null!=n&&e.isValidDropTarget(n,g,t),o=null;if(null==n||s||(n=null),!e.isCellLocked(n||e.getDefaultParent())){e.model.beginUpdate();try{if(a=Math.round(a),i=Math.round(i),v&&e.isSplitTarget(n,g,t)){var r=e.cloneCells(g);e.splitEdge(n,r,null,a-f.width/2,i-f.height/2),o=r}else 0<g.length&&(o=e.importCells(g,a,i,n));if(null!=e.layoutManager){var l=e.layoutManager.getLayout(n);if(null!=l)for(var d=e.view.scale,c=e.view.translate,m=(a+c.x)*d,u=(i+c.y)*d,p=0;p<o.length;p++)l.moveCell(o[p],m,u)}h&&e.fireEvent(new mxEventObject("cellsInserted","cells",o))}finally{e.model.endUpdate()}null!=o&&0<o.length&&(e.scrollCellToVisible(o[0]),e.setSelectionCells(o))}}mxEvent.consume(t)}})},Sidebar.prototype.createDragPreview=function(e,t){var n=document.createElement("div");return n.style.border="1px dashed black",n.style.width=e+"px",n.style.height=t+"px",n},Sidebar.prototype.createDragSource=function(e,t,n){var a=mxUtils.makeDraggable(e,this.editorUi.editor.graph,t,n,0,0,this.editorUi.editor.graph.autoscroll,!0,!0);return a.getDropTarget=function(e,t,n){var a=mxDragSource.prototype.getDropTarget.apply(this,arguments);return e.isValidRoot(a)||(a=null),a},a},Sidebar.prototype.addClickHandler=function(e,a){var i=this.editorUi.editor.graph,s=null;mxEvent.addGestureListeners(e,function(e){s=new mxPoint(mxEvent.getClientX(e),mxEvent.getClientY(e))});var o=a.mouseUp;a.mouseUp=function(e){if(!mxEvent.isPopupTrigger(e)&&null==this.currentGraph&&null!=s){var t=i.tolerance;if(Math.abs(s.x-mxEvent.getClientX(e))<=t&&Math.abs(s.y-mxEvent.getClientY(e))<=t){var n=i.getGridSize();a.drop(i,e,null,n,n)}}o.apply(this,arguments),s=null}},Sidebar.prototype.createVertexTemplateEntry=function(e,t,n,a,i,s,o,r){return r=null!=r&&0<r.length?r:i.toLowerCase(),this.addEntry(r,mxUtils.bind(this,function(){return this.createVertexTemplate(e,t,n,a,i,s,o)}))},Sidebar.prototype.createXmlDocument=function(e,t,n,a){var i=mxUtils.createXmlDocument().createElement(e);return i.setAttribute("label",t),n.forEach(function(e,t){i.setAttribute(e,a[t]?a[t]:"")}),i},Sidebar.prototype.createVertexTemplate=function(e,t,n,a,i,s,o,r){var l=[],d=[];switch(a){case"answer":l=["timeout"],d=["0"];break;case"start":l=["answer"],d=["yes"];break;case"googleasr":l=["key","google_asr_language","timeout","intKey","beep"],d=["","it-IT","10","#","BEEP"];break;case"tildeasr":l=["uri","appid","appsecret","timeout","intKey","beep"],d=["wss://runa.tilde.lv/client/ws/speech/LVASR-ONLINE","","","10","#","BEEP"];break;case"ispeechasr":l=["key","model","ispeech_asr_language","timeout","intKey","beep"],d=["","","it-IT","10","#","BEEP"];break;case"playback":l=["file_id","opts"],d=["0"];break;case"background":l=["file_id","response","digit"],d=["0","5","1"];break;case"menu":l=["file_id","response","digit","retry","variable_id"],d=["0","5","1","1","0"];break;case"getdigits":l=["file_id","response","mindigit","maxdigit","retry","variable_id"],d=["0","5","1","10","1","0"];break;case"getsecretdigits":l=["file_id","response","mindigit","maxdigit","retry","hiddendigitsnum","hiddendigitspos","variable_id"],d=["0","5","1","10","1","0","first","0"];break;case"custom_app":l=["application","options"],d=["",""];break;case"set":l=["variable_id","variable_value"],d=["0",""];break;case"database":l=["odbc_id","query","variable_id"],d=["0","",""];break;case"noop":l=["output"],d=[];break;case"gotoc":l=["context","extension","priority"],d=["","","1"];break;case"system":l=["variable_id","command"],d=[];break;case"agi":l=["command","args"],d=[];break;case"gotoif":l=["condition"],d=[];break;case"gotoiftime":l=["interval_id"],d=["0"];break;case"vswitch":l=["variable_id"],d=["0"];break;case"saydigits":l=["digits","escape_digits"],d=["","#"];break;case"saynumber":l=["number","escape_digits"],d=["","#"];break;case"sayphonetic":l=["text","escape_digits"],d=["","#"];break;case"record":l=["file","recordingFormat","timeout","escape_digits"],d=["","wav","-1","#"];break;case"dial":l=["sip_id","timeout","opts","url"],d=["0","60"];break;case"ext_dial":l=["phone","trunk_name","timeout","opts","url"],d=["","-1","60"];break;case"tts":l=["text","google_tts_language"],d=["","it"];break;case"ispeechtts":l=["text","key","ispeech_tts_language","speed","intKey"],d=["","","euritalianfemale","0","#"];break;case"lumenvoxtts":case"sestektts":l=["text","options"],d=["",""];break;case"lumenvoxasr":l=["grammar","options"],d=["",""];break;case"sestekasr":l=["grammar","options"],d=["/usr/local/unimrcp/data/grammar.xml",""];break;case"awspolly":l=["aws_access_key_id","aws_secret_access_key","aws_polly_region","aws_polly_voice","text","aws_text_type"],d=["","","eu-west-1","Amy","","text"];break;case"awslex":l=["aws_access_key_id","aws_secret_access_key","aws_lex_region","aws_bot_name","text"],d=["","","eu-west-1","",""];break;case"queue":l=["queue_id","opts","url","file_id","timeout","agi","macro","gosub","position"],d=["-1","xX","","","300"];break;case"voicemail":l=["mailbox","options"],d=["",""];break;case"subproject":l=["project_id"],d=["0"];break;case"math":l=["operation","variable_id"],d=["","0"];break;case"queuelog":l=["queuename","agent","queue_event","data1","data2","data3","data4","data5"],d=[];break;case"goal":l=["goalname"],d=[];break;case"callback":l=["name","lastName","phone","list_id","delay","callback_priority"],d=["{CALLERID(name)}","","{CALLERID(num)}","-1","5","2"];break;case"sendSMS":l=["sms_account_id","to","sms_text"],d=["0"];break;case"sendMail":l=["account_id","to","cc","bcc","subject","text"],d=["0"];break;case"sendFax":l=["account_id","to","choose_attachment","attachment_name","attachment_type","attachment_path"],d=["0"];break;case"login":case"unpause":case"logout":l=["findBy"],d=["internal"];break;case"pause":l=["findBy","pause_id"],d=["internal",""];break;case"dialogflow":l=["key","text","dialogflow_language"],d=["","","it"];break;case"sesteknda":l=["ndauth_url","username","password","ndassistant_url","text","project","ndagenerate_audio","custom_action","custom_action_data","ndaactivity_type"],d=["","","","","","",1,"","","message"];break;default:l=[],d=[]}var c=[new mxCell(this.createXmlDocument(a,i,l,d),new mxGeometry(0,0,t,n),e)];return c[0].vertex=!0,this.createVertexTemplateFromCells(c,t,n,i,s,o,r)},Sidebar.prototype.createVertexTemplateFromCells=function(e,t,n,a,i,s,o){return this.createItem(e,a,i,s,t,n,o)},Sidebar.prototype.createEdgeTemplate=function(e,t,n,a,i,s,o){var r=new mxCell(null!=a?a:"",new mxGeometry(0,0,t,n),e);return r.geometry.setTerminalPoint(new mxPoint(0,n),!0),r.geometry.setTerminalPoint(new mxPoint(t,0),!1),r.geometry.relative=!0,r.edge=!0,this.createEdgeTemplateFromCells([r],t,n,i,s,o)},Sidebar.prototype.createEdgeTemplateFromCells=function(e,t,n,a,i,s){return this.createItem(e,a,i,!0,t,n,s)},Sidebar.prototype.addPaletteFunctions=function(e,t,n,a){this.addPalette(e,t,n,mxUtils.bind(this,function(e){for(var t=0;t<a.length;t++)e.appendChild(a[t](e))}))},Sidebar.prototype.addPalette=function(e,t,n,a){var i=this.createTitle(t);this.container.appendChild(i);var s=document.createElement("div");s.className="geSidebar",mxClient.IS_POINTER&&(s.style.touchAction="none"),mxEvent.addListener(s,"mousemove",mxUtils.bind(this,function(e){mxEvent.getSource(e)==s?s.setAttribute("title",mxResources.get("sidebarTooltip")):s.removeAttribute("title")})),n?(a(s),a=null):s.style.display="none",this.addFoldingHandler(i,s,a);var o=document.createElement("div");return o.appendChild(s),this.container.appendChild(o),null!=e&&(this.palettes[e]=[i,o]),s},Sidebar.prototype.addFoldingHandler=function(n,a,i){var s=!1;(!mxClient.IS_IE||8<=document.documentMode)&&(n.style.backgroundImage="none"==a.style.display?"url('"+this.collapsedImage+"')":"url('"+this.expandedImage+"')"),n.style.backgroundRepeat="no-repeat",n.style.backgroundPosition="0% 50%",mxEvent.addListener(n,"click",mxUtils.bind(this,function(e){if("none"==a.style.display){if(s)a.style.display="block";else if(s=!0,null!=i){n.style.cursor="wait";var t=n.innerHTML;n.innerHTML=mxResources.get("loading")+"...",window.setTimeout(function(){var e=mxClient.NO_FO;mxClient.NO_FO=Editor.prototype.originalNoForeignObject,i(a),mxClient.NO_FO=e,a.style.display="block",n.style.cursor="",n.innerHTML=t},0)}else a.style.display="block";n.style.backgroundImage="url('"+this.expandedImage+"')"}else n.style.backgroundImage="url('"+this.collapsedImage+"')",a.style.display="none";mxEvent.consume(e)}))},Sidebar.prototype.addImagePalette=function(e,t,s,o,r,n,a){for(var l=[],d=0;d<r.length;d++)mxUtils.bind(this,function(e,t,n){if(null==n){var a=e.lastIndexOf("/"),i=e.lastIndexOf(".");n=e.substring(0<=a?a+1:0,0<=i?i:e.length).replace(/[-_]/g," ")}l.push(this.createVertexTemplateEntry("image;html=1;image="+s+e+o,this.defaultImageWidth,this.defaultImageHeight,r[d],t,!1,!0,this.filterTags(n)))})(r[d],null!=n?n[d]:null,null!=a?a[r[d]]:null);this.addPaletteFunctions(e,t,!1,l)},"undefined"!=typeof html4&&(html4.ATTRIBS["a::target"]=0),mxConstants.SHADOW_OPACITY=.25,mxConstants.SHADOWCOLOR="#000000",mxConstants.VML_SHADOWCOLOR="#d0d0d0",mxGraph.prototype.pageBreakColor="#c0c0c0",mxGraph.prototype.pageScale=1,function(){try{if(null!=navigator&&null!=navigator.language){var e=navigator.language.toLowerCase();mxGraph.prototype.pageFormat="en-us"===e||"en-ca"===e||"es-mx"===e?mxConstants.PAGE_FORMAT_LETTER_PORTRAIT:mxConstants.PAGE_FORMAT_A4_PORTRAIT}}catch(e){}}(),mxText.prototype.baseSpacingTop=5,mxText.prototype.baseSpacingBottom=1,mxGraphModel.prototype.ignoreRelativeEdgeParent=!1,mxGraphView.prototype.gridImage=mxClient.IS_SVG?"data:image/gif;base64,R0lGODlhCgAKAJEAAAAAAP///8zMzP///yH5BAEAAAMALAAAAAAKAAoAAAIJ1I6py+0Po2wFADs=":IMAGE_PATH+"/grid.gif",mxGraphView.prototype.gridSteps=4,mxGraphView.prototype.minGridSize=4,mxGraphView.prototype.gridColor="#e0e0e0",mxSvgCanvas2D.prototype.foAltText="[Not supported by viewer]",Graph=function(e,t,n,a){mxGraph.call(this,e,t,n,a),this.setConnectable(!0),this.setDropEnabled(!1),this.setPanning(!0),this.setTooltips(!mxClient.IS_TOUCH),this.setAllowLoops(!1),this.setMultigraph(!1),this.allowAutoPanning=!0,this.resetEdgesOnConnect=!1,this.constrainChildren=!1,this.connectionHandler.targetConnectImage=!0,this.setAllowDanglingEdges(!1),this.connectionHandler.setCreateTarget(!1),this.connectionHandler.isValidSource=function(){return mxConnectionHandler.prototype.isValidSource.apply(this,arguments)&&"2"!=urlParams.connect},this.alternateEdgeStyle="vertical",null==a&&this.loadStylesheet();var i=new mxRubberband(this);this.getRubberband=function(){return i},this.panningHandler.addListener(mxEvent.PAN_START,mxUtils.bind(this,function(){this.container.style.cursor="pointer"})),this.panningHandler.addListener(mxEvent.PAN_END,mxUtils.bind(this,function(){this.container.style.cursor="default"})),this.isHtmlLabel=function(e){var t=this.view.getState(e),n=null!=t?t.style:this.getCellStyle(e);return"1"==n.html||"wrap"==n.whiteSpace},this.cellRenderer.getLabelValue=function(e){var t=mxCellRenderer.prototype.getLabelValue.apply(this,arguments);return"wrap"==e.style.whiteSpace&&1!=e.style.html&&(t=mxUtils.htmlEntities(t,!1)),t},this.isCellLocked=function(e){return!1},this.connectionHandler.tapAndHoldTolerance=16;var s=this.connectionHandler.tapAndHold;this.connectionHandler.tapAndHold=function(e,t){null==t?this.graph.panningHandler.active||(i.start(e.getGraphX(),e.getGraphY()),this.graph.panningHandler.panningTrigger=!1):tapAndHoldStartsConnection?s.apply(this,arguments):this.graph.isCellSelected(t.cell)&&1<this.graph.getSelectionCount()&&this.graph.removeSelectionCell(t.cell)},touchStyle&&this.initTouch()},mxUtils.extend(Graph,mxGraph),Graph.prototype.minFitScale=null,Graph.prototype.maxFitScale=null,Graph.prototype.loadStylesheet=function(){var e=mxUtils.load(STYLE_PATH+"/default.xml").getDocumentElement();new mxCodec(e.ownerDocument).decode(e,this.getStylesheet())},Graph.prototype.flipEdge=function(e){if(null!=e){var t=this.view.getState(e),n=null!=t?t.style:this.getCellStyle(e);if(null!=n){var a=mxUtils.getValue(n,mxConstants.STYLE_ELBOW,mxConstants.ELBOW_HORIZONTAL)==mxConstants.ELBOW_HORIZONTAL?mxConstants.ELBOW_VERTICAL:mxConstants.ELBOW_HORIZONTAL;this.setCellStyles(mxConstants.STYLE_ELBOW,a,[e])}}},Graph.prototype.setDefaultEdge=function(e){if(null!=e&&this.getModel().isEdge(e)){var t=this.getModel().cloneCells([e])[0];null!=t.geometry&&(t.geometry.points=null);var n=t.getStyle();n=mxUtils.setStyle(n,mxConstants.STYLE_ENTRY_X,null),n=mxUtils.setStyle(n,mxConstants.STYLE_ENTRY_Y,null),n=mxUtils.setStyle(n,mxConstants.STYLE_EXIT_X,null),n=mxUtils.setStyle(n,mxConstants.STYLE_EXIT_Y,null),t.setStyle(n),this.connectionHandler.createEdgeState=function(e){return this.graph.view.createState(t)},this.connectionHandler.factoryMethod=function(){return this.graph.cloneCells([t])[0]}}},Graph.prototype.isCellFoldable=function(e){return this.foldingEnabled&&this.isSwimlane(e)},Graph.prototype.isValidRoot=function(e){return this.isSwimlane(e)},Graph.prototype.createGroupCell=function(){var e=mxGraph.prototype.createGroupCell.apply(this,arguments);return e.setStyle("group"),e},Graph.prototype.getTooltipForCell=function(e){var t="";return this.getModel().isVertex(e)?t+=mxResources.get("description_"+e.value.nodeName)||"":this.getModel().isEdge(e)&&(t=mxGraph.prototype.getTooltipForCell.apply(this,arguments)),t},Graph.prototype.convertValueToString=function(e){return null!=e.value&&"object"==typeof e.value?e.value.getAttribute("label"):mxGraph.prototype.convertValueToString.apply(this,arguments)},Graph.prototype.cellLabelChanged=function(e,t,n){if(null!=e.value&&"object"==typeof e.value){var a=e.value.cloneNode(!0);a.setAttribute("label",t),t=a}mxGraph.prototype.cellLabelChanged.apply(this,arguments)},Graph.prototype.setLinkForCell=function(e,t){var n=null;null!=e.value&&"object"==typeof e.value?n=e.value.cloneNode(!0):(n=mxUtils.createXmlDocument().createElement("UserObject")).setAttribute("label",e.value);null!=t&&0<t.length?n.setAttribute("link",t):n.removeAttribute("link"),this.model.setValue(e,n)},Graph.prototype.getLinkForCell=function(e){return null!=e.value&&"object"==typeof e.value?e.value.getAttribute("link"):null},Graph.prototype.initTouch=function(){this.connectionHandler.marker.isEnabled=function(){return null!=this.graph.connectionHandler.first},this.addListener(mxEvent.START_EDITING,function(e,t){this.panningHandler.hideMenu()});var s=!1,o=null;this.updateMouseEvent=function(e){if(mxGraph.prototype.updateMouseEvent.apply(this,arguments),null==e.getState()){var t=this.getCellAt(e.graphX,e.graphY);this.getModel().isEdge(t)&&(e.state=this.view.getState(t),null!=e.state&&null!=e.state.shape&&(this.container.style.cursor=e.state.shape.node.style.cursor))}null==e.getState()&&(this.container.style.cursor="default")},this.fireMouseEvent=function(e,t,n){if(e==mxEvent.MOUSE_DOWN)this.panningHandler.isMenuShowing()?(s=!1,o=null):(o=t.getCell(),s=null!=o?this.isCellSelected(o):this.isSelectionEmpty());else if(e==mxEvent.MOUSE_UP){if(s&&!this.isEditing()){if(!this.panningHandler.isMenuShowing()){var a=mxEvent.getClientX(t.getEvent()),i=mxEvent.getClientY(t.getEvent());this.panningHandler.popup(a+16,i,o,t.getEvent())}return s=!1,o=null,void t.consume()}s=!1,o=null}mxGraph.prototype.fireMouseEvent.apply(this,arguments),e==mxEvent.MOUSE_MOVE&&t.isConsumed()&&(s=!1,o=null)}},function(){if(mxVertexHandler.prototype.rotationEnabled=!0,mxText.prototype.baseSpacingTop=5,mxText.prototype.baseSpacingBottom=1,touchStyle){mxConstants.HANDLE_SIZE=16,mxConstants.LABEL_HANDLE_SIZE=7,mxClient.IS_TOUCH&&(mxVertexHandler.prototype.tolerance=4,mxEdgeHandler.prototype.tolerance=6,Graph.prototype.tolerance=14,Graph.prototype.gridSize=20,mxPanningHandler.prototype.selectOnPopup=!1,mxPanningHandler.prototype.useLeftButtonForPanning=!0,mxPanningHandler.prototype.isPanningTrigger=function(e){var t=e.getEvent();return this.useLeftButtonForPanning&&(this.ignoreCell||null==e.getState())||mxEvent.isControlDown(t)&&mxEvent.isShiftDown(t)||this.usePopupTrigger&&mxEvent.isPopupTrigger(t)});var n=mxGraphHandler.prototype.mouseDown;mxGraphHandler.prototype.mouseDown=function(e,t){n.apply(this,arguments),this.graph.isCellSelected(t.getCell())&&1<this.graph.getSelectionCount()&&(this.delayedSelection=!1)},Graph.prototype.createHandlers=function(e){this.tooltipHandler=new mxTooltipHandler(this),this.tooltipHandler.setEnabled(!1),this.selectionCellsHandler=new mxSelectionCellsHandler(this),this.panningHandler=new mxPanningHandler(this),this.panningHandler.panningEnabled=!1,this.connectionHandler=new mxConnectionHandler(this),this.connectionHandler.setEnabled(!1),this.graphHandler=new mxGraphHandler(this)},mxConnectionHandler.prototype.selectCells=function(e,t){touchStyle&&null!=t?this.graph.setSelectionCell(t):this.graph.setSelectionCell(e)};var a=mxGraph.prototype.dblClick;Graph.prototype.dblClick=function(e,t){if(null==t){var n=mxUtils.convertPoint(this.container,mxEvent.getClientX(e),mxEvent.getClientY(e));t=this.getCellAt(n.x,n.y)}a.call(this,e,t)};var e=new mxImage(IMAGE_PATH+"/touch-handle.png",16,16);mxVertexHandler.prototype.handleImage=e,mxEdgeHandler.prototype.handleImage=e,mxOutline.prototype.sizerImage=e,(new Image).src=e.src;var t=IMAGE_PATH+"/touch-connector.png",i=mxVertexHandler.prototype.init;mxVertexHandler.prototype.init=function(){i.apply(this,arguments),showConnectorImg&&this.graph.connectionHandler.isEnabled()&&this.graph.isCellConnectable(this.state.cell)&&!this.graph.isValidRoot(this.state.cell)&&1==this.graph.getSelectionCount()&&(this.connectorImg=mxUtils.createImage(t),this.connectorImg.style.cursor="pointer",this.connectorImg.style.width="29px",this.connectorImg.style.height="29px",this.connectorImg.style.position="absolute",mxClient.IS_TOUCH||(this.connectorImg.setAttribute("title",mxResources.get("connect")),mxEvent.redirectMouseEvents(this.connectorImg,this.graph,this.state)),this.connectorImg.style.padding="2px",mxEvent.addGestureListeners(this.connectorImg,mxUtils.bind(this,function(e){this.graph.panningHandler.hideMenu();var t=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(e),mxEvent.getClientY(e));this.graph.connectionHandler.start(this.state,t.x,t.y),this.graph.isMouseDown=!0,mxEvent.consume(e)})),this.graph.container.appendChild(this.connectorImg)),this.redrawTools()};var s=mxVertexHandler.prototype.redraw;mxVertexHandler.prototype.redraw=function(){s.apply(this),this.redrawTools()},mxVertexHandler.prototype.redrawTools=function(){null!=this.state&&null!=this.connectorImg&&(mxVertexHandler.prototype.singleSizer?(this.connectorImg.style.left=this.state.x+this.state.width-this.connectorImg.offsetWidth/2+"px",this.connectorImg.style.top=this.state.y-this.connectorImg.offsetHeight/2+"px"):(this.connectorImg.style.left=this.state.x+this.state.width+mxConstants.HANDLE_SIZE/2+4+"px",this.connectorImg.style.top=this.state.y+(this.state.height-this.connectorImg.offsetHeight)/2+"px"))};var o=mxVertexHandler.prototype.destroy;mxVertexHandler.prototype.destroy=function(e,t){o.apply(this,arguments),null!=this.connectorImg&&(this.connectorImg.parentNode.removeChild(this.connectorImg),this.connectorImg=null)},(new Image).src=t}else{var r=new mxImage(IMAGE_PATH+"/connector.png",15,15);if(mxConnectionHandler.prototype.connectImage=r,(new Image).src=r.src,"2"==urlParams.connect){r=new mxImage(IMAGE_PATH+"/connector.png",15,15),i=mxVertexHandler.prototype.init;mxVertexHandler.prototype.init=function(){i.apply(this,arguments),showConnectorImg&&this.graph.connectionHandler.isEnabled()&&this.graph.isCellConnectable(this.state.cell)&&!this.graph.isValidRoot(this.state.cell)&&1==this.graph.getSelectionCount()&&(mxClient.IS_IE&&!mxClient.IS_SVG?(this.connectorImg=document.createElement("div"),this.connectorImg.style.backgroundImage="url("+r.src+")",this.connectorImg.style.backgroundPosition="center",this.connectorImg.style.backgroundRepeat="no-repeat",this.connectorImg.style.width=r.width+4+"px",this.connectorImg.style.height=r.height+4+"px",this.connectorImg.style.display=mxClient.IS_QUIRKS?"inline":"inline-block"):(this.connectorImg=mxUtils.createImage(r.src),this.connectorImg.style.width=r.width+"px",this.connectorImg.style.height=r.height+"px"),this.connectorImg.style.cursor="pointer",this.connectorImg.style.position="absolute",this.connectorImg.setAttribute("title",mxResources.get("connect")),mxEvent.redirectMouseEvents(this.connectorImg,this.graph,this.state),this.connectorImg.style.padding="2px",mxEvent.addListener(this.connectorImg,"mousedown",mxUtils.bind(this,function(e){this.graph.panningHandler.hideMenu();var t=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(e),mxEvent.getClientY(e));this.graph.connectionHandler.start(this.state,t.x,t.y),this.graph.isMouseDown=!0,mxEvent.consume(e)})),this.graph.container.appendChild(this.connectorImg)),this.redrawTools()};s=mxVertexHandler.prototype.redraw;mxVertexHandler.prototype.redraw=function(){s.apply(this),this.redrawTools()},mxVertexHandler.prototype.redrawTools=function(){null!=this.state&&null!=this.connectorImg&&(mxVertexHandler.prototype.singleSizer?(this.connectorImg.style.left=this.state.x+this.state.width-this.connectorImg.offsetWidth/2+"px",this.connectorImg.style.top=this.state.y-this.connectorImg.offsetHeight/2+"px"):(this.connectorImg.style.left=this.state.x+this.state.width+mxConstants.HANDLE_SIZE/2+2+"px",this.connectorImg.style.top=this.state.y+(this.state.height-this.connectorImg.offsetHeight)/2+"px"))};o=mxVertexHandler.prototype.destroy;mxVertexHandler.prototype.destroy=function(e,t){o.apply(this,arguments),null!=this.connectorImg&&(this.connectorImg.parentNode.removeChild(this.connectorImg),this.connectorImg=null)}}}}(),Actions.prototype.init=function(){var t=this.editorUi,l=t.editor,d=l.graph;this.addAction("new",function(){t.projectDesignController.newProject()},CRUD_PERMISSIONS.canEdit),this.addAction("open",function(){t.projectDesignController.openProject()},CRUD_PERMISSIONS.canEdit),this.addAction("save",function(){t.projectDesignController.saveOrPublishProject(mxUtils.getPrettyXml(l.getGraphXml())),t.editor.modified=!1},CRUD_PERMISSIONS.canEdit,null,"Ctrl+S"),this.addAction("saveAs",function(){t.projectDesignController.saveProjectAs(mxUtils.getPrettyXml(l.getGraphXml()))},CRUD_PERMISSIONS.canEdit,null,"Ctrl+Shift+S"),this.addAction("publish",function(){t.editor.setStatus(""),null===t.validate()?(t.projectDesignController.saveOrPublishProject(mxUtils.getPrettyXml(l.getGraphXml()),!0),t.editor.modified=!1):(t.editor.setStatus("...Error publishing! Please check the project and try again!"),setTimeout(function(){t.editor.setStatus("")},3e3))},CRUD_PERMISSIONS.canEdit,null,"Ctrl+Shift+P"),this.addAction("variable",function(){t.projectDesignController.newVariable()},CRUD_PERMISSIONS.canEdit),this.addAction("import",function(){t.projectDesignController.importXML(function(e){l.setGraphXml(mxUtils.parseXml(e).documentElement)})},CRUD_PERMISSIONS.canEdit),this.addAction("export",function(){t.exportXML(mxUtils.getPrettyXml(l.getGraphXml()))},null,null,"Ctrl+E"),this.addAction("editFile",function(){t.projectDesignController.editXML(mxUtils.getPrettyXml(l.getGraphXml()),function(e){l.setGraphXml(mxUtils.parseXml(e).documentElement)})},CRUD_PERMISSIONS.canEdit),this.addAction("print",function(){mxUtils.printScreen(d)},null,"sprite-print","Ctrl+P"),this.addAction("preview",function(){mxUtils.show(d,null,10,10)}),this.addAction("undo",function(){l.undoManager.undo()},null,"sprite-undo","Ctrl+Z"),this.addAction("redo",function(){l.undoManager.redo()},null,"sprite-redo","Ctrl+Y"),this.addAction("cut",function(){mxClipboard.cut(d)},null,"sprite-cut","Ctrl+X"),this.addAction("copy",function(){mxClipboard.copy(d)},null,"sprite-copy","Ctrl+C"),this.addAction("paste",function(){mxClipboard.paste(d)},!1,"sprite-paste","Ctrl+V"),this.addAction("delete",function(){d.removeCells()},null,null,"Delete"),this.addAction("duplicate",function(){var e=d.gridSize;d.setSelectionCells(d.moveCells(d.getSelectionCells(),e,e,!0))},null,null,"Ctrl+D"),this.addAction("selectVertices",function(){d.selectVertices()},null,null,"Ctrl+Shift+V"),this.addAction("selectEdges",function(){d.selectEdges()},null,null,"Ctrl+Shift+E"),this.addAction("selectAll",function(){d.selectAll()},null,null,"Ctrl+A"),this.addAction("home",function(){d.home()},null,null,"Home"),this.addAction("exitGroup",function(){d.exitGroup()},null,null,"Page Up"),this.addAction("enterGroup",function(){d.enterGroup()},null,null,"Page Down"),this.addAction("expand",function(){d.foldCells(!1)},null,null,"Enter"),this.addAction("collapse",function(){d.foldCells(!0)},null,null,"Backspace"),this.addAction("toFront",function(){d.orderCells(!1)},null,null,"Ctrl+F"),this.addAction("toBack",function(){d.orderCells(!0)},null,null,"Ctrl+B"),this.addAction("group",function(){d.setSelectionCell(d.groupCells(null,0))},null,null,"Ctrl+G"),this.addAction("ungroup",function(){d.setSelectionCells(d.ungroupCells())},null,null,"Ctrl+U"),this.addAction("removeFromGroup",function(){d.removeCellsFromParent()}),this.addAction("editLink",function(){var e=d.getSelectionCell(),t=d.getLinkForCell(e);null==t&&(t=""),null!=(t=mxUtils.prompt(mxResources.get("enterValue"),t))&&d.setLinkForCell(e,t)}),this.addAction("openLink",function(){var e=d.getSelectionCell(),t=d.getLinkForCell(e);null!=t&&window.open(t)}),this.addAction("autosize",function(){var e=d.getSelectionCells();if(null!=e){d.getModel().beginUpdate();try{for(var t=0;t<e.length;t++){var n=e[t];d.getModel().getChildCount(n)?d.updateGroupBounds([n],20):d.updateCellSize(n)}}finally{d.getModel().endUpdate()}}}),this.addAction("wordWrap",function(){var e=d.getView().getState(d.getSelectionCell()),t="wrap";null!=e&&"wrap"==e.style[mxConstants.STYLE_WHITE_SPACE]&&(t=null),d.setCellStyles(mxConstants.STYLE_WHITE_SPACE,t)}),this.addAction("rotation",function(){var e="0",t=d.getView().getState(d.getSelectionCell());null!=t&&(e=t.style[mxConstants.STYLE_ROTATION]||e),null!=(e=mxUtils.prompt(mxResources.get("enterValue")+" ("+mxResources.get("rotation")+" 0-360)",e))&&d.setCellStyles(mxConstants.STYLE_ROTATION,e)}),this.addAction("tilt",function(){var e=d.getSelectionCells();if(null!=e){d.getModel().beginUpdate();try{for(var t=0;t<e.length;t++){var n=e[t];if(d.getModel().isVertex(n)&&0==d.getModel().getChildCount(n)){var a=d.getCellGeometry(n);if(null!=a){(a=a.clone()).x+=a.width/2-a.height/2,a.y+=a.height/2-a.width/2;var i=a.width;a.width=a.height,a.height=i,d.getModel().setGeometry(n,a);var s=d.view.getState(n);if(null!=s){var o=s.style[mxConstants.STYLE_DIRECTION]||"east";"east"==o?o="south":"south"==o?o="west":"west"==o?o="north":"north"==o&&(o="east"),d.setCellStyles(mxConstants.STYLE_DIRECTION,o,[n])}}}}}finally{d.getModel().endUpdate()}}},null,null,"Ctrl+R"),this.addAction("actualSize",function(){d.zoomTo(1)}),this.addAction("zoomIn",function(){d.zoomIn()},null,null,"Add"),this.addAction("zoomOut",function(){d.zoomOut()},null,null,"Subtract"),this.addAction("fitWindow",function(){d.fit()}),this.addAction("fitPage",mxUtils.bind(this,function(){d.pageVisible||this.get("pageView").funct();var e=d.pageFormat,t=d.pageScale,n=d.container.clientWidth-20,a=d.container.clientHeight-20,i=Math.floor(100*Math.min(n/e.width/t,a/e.height/t))/100;d.zoomTo(i),d.container.scrollLeft=Math.round(d.view.translate.x*i-Math.max(10,(d.container.clientWidth-e.width*t*i)/2)),d.container.scrollTop=Math.round(d.view.translate.y*i-Math.max(10,(d.container.clientHeight-e.height*t*i)/2))})),this.addAction("fitPageWidth",mxUtils.bind(this,function(){d.pageVisible||this.get("pageView").funct();var e=d.pageFormat,t=d.pageScale,n=d.container.clientWidth-20,a=Math.floor(100*n/e.width/t)/100;d.zoomTo(a),d.container.scrollLeft=Math.round(d.view.translate.x*a-Math.max(10,(d.container.clientWidth-e.width*t*a)/2)),d.container.scrollTop=Math.round(d.view.translate.y*a-Math.max(10,(d.container.clientHeight-e.height*t*a)/2))})),this.put("customZoom",new Action(mxResources.get("custom"),function(){var e=mxUtils.prompt(mxResources.get("enterValue")+" (%)",parseInt(100*d.getView().getScale()));null!=e&&0<e.length&&!isNaN(parseInt(e))&&d.zoomTo(parseInt(e)/100)}));var e=null;(e=this.addAction("grid",function(){d.setGridEnabled(!d.isGridEnabled()),l.updateGraphComponents()},null,null,"Ctrl+Shift+G")).setToggleAction(!0),e.setSelectedCallback(function(){return d.isGridEnabled()}),(e=this.addAction("guides",function(){d.graphHandler.guidesEnabled=!d.graphHandler.guidesEnabled})).setToggleAction(!0),e.setSelectedCallback(function(){return d.graphHandler.guidesEnabled}),(e=this.addAction("tooltips",function(){d.tooltipHandler.setEnabled(!d.tooltipHandler.isEnabled())})).setToggleAction(!0),e.setSelectedCallback(function(){return d.tooltipHandler.isEnabled()}),(e=this.addAction("navigation",function(){d.foldingEnabled=!d.foldingEnabled,d.view.revalidate()})).setToggleAction(!0),e.setSelectedCallback(function(){return d.foldingEnabled}),(e=this.addAction("scrollbars",function(){if(d.scrollbars=!d.scrollbars,l.updateGraphComponents(),d.scrollbars){var e=d.view.translate.x,t=d.view.translate.y;d.view.translate.x=0,d.view.translate.y=0,d.sizeDidChange(),d.container.scrollLeft-=Math.round(e*d.view.scale),d.container.scrollTop-=Math.round(t*d.view.scale)}else{var n=d.view.translate;d.view.setTranslate(n.x-d.container.scrollLeft/d.view.scale,n.y-d.container.scrollTop/d.view.scale),d.container.scrollLeft=0,d.container.scrollTop=0,d.sizeDidChange()}},!mxClient.IS_TOUCH)).setToggleAction(!0),e.setSelectedCallback(function(){return"auto"==d.container.style.overflow}),(e=this.addAction("pageView",mxUtils.bind(this,function(){d.pageVisible=!d.pageVisible,d.pageBreaksVisible=d.pageVisible,d.preferPageSize=d.pageBreaksVisible,d.view.validate(),d.sizeDidChange(),l.updateGraphComponents(),l.outline.update(),mxUtils.hasScrollbars(d.container)&&(d.pageVisible?(d.container.scrollLeft-=20,d.container.scrollTop-=20):(d.container.scrollLeft+=20,d.container.scrollTop+=20))}))).setToggleAction(!0),e.setSelectedCallback(function(){return d.pageVisible}),(e=this.addAction("connect",function(){d.setConnectable(!d.connectionHandler.isEnabled())},null,null,"Ctrl+Q")).setToggleAction(!0),e.setSelectedCallback(function(){return d.connectionHandler.isEnabled()}),(e=this.addAction("copyConnect",function(){d.connectionHandler.setCreateTarget(!d.connectionHandler.isCreateTarget())})).setToggleAction(!0),e.setSelectedCallback(function(){return d.connectionHandler.isCreateTarget()}),this.addAction("help",function(){window.open("https://wiki.xcallymotion.com/display/XMV/Cally+Square")}),this.put("about",new Action(mxResources.get("about")+" Cally Square",function(){window.open("http://callysquare.com/")},null,null,null));var n=mxUtils.bind(this,function(e,t){this.addAction(e,function(){d.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE,t)})});n("bold",mxConstants.FONT_BOLD),n("italic",mxConstants.FONT_ITALIC),n("underline",mxConstants.FONT_UNDERLINE),this.addAction("shadow",function(){d.toggleCellStyles(mxConstants.STYLE_SHADOW)}),this.addAction("dashed",function(){d.toggleCellStyles(mxConstants.STYLE_DASHED)}),this.addAction("rounded",function(){d.toggleCellStyles(mxConstants.STYLE_ROUNDED)}),this.addAction("curved",function(){d.toggleCellStyles(mxConstants.STYLE_CURVED)}),this.addAction("style",function(){var e=d.getSelectionCells();if(null!=e&&0<e.length){var t=d.getModel(),n=mxUtils.prompt(mxResources.get("enterValue")+" ("+mxResources.get("style")+")",t.getStyle(e[0])||"");null!=n&&d.setCellStyle(n,e)}}),this.addAction("setAsDefaultEdge",function(){d.setDefaultEdge(d.getSelectionCell())}),this.addAction("addWaypoint",function(){var e=d.getSelectionCell();if(null!=e&&d.getModel().isEdge(e)){var t=l.graph.selectionCellsHandler.getHandler(e);if(t instanceof mxEdgeHandler){var n=d.view.translate,a=d.view.scale,i=n.x,s=n.y,o=d.getModel().getParent(e),r=d.getCellGeometry(o);d.getModel().isVertex(o)&&null!=r&&(i+=r.x,s+=r.y),t.addPointAt(t.state,d.panningHandler.triggerX/a-i,d.panningHandler.triggerY/a-s)}}}),this.addAction("removeWaypoint",function(){var e=t.actions.get("removeWaypoint");null!=e.handler&&e.handler.removePoint(e.handler.state,e.index)}),this.addAction("image",function(){var e="",t=d.getView().getState(d.getSelectionCell());if(null!=t&&(e=t.style[mxConstants.STYLE_IMAGE]||e),null!=(e=mxUtils.prompt(mxResources.get("enterValue")+" ("+mxResources.get("url")+")",e))&&0<e.length){var n=new Image;n.onload=function(){!function(e,t,n){var a=null,i=d.getSelectionCells();d.getModel().beginUpdate();try{if(0==i.length){var s=d.getGridSize();a=i=[d.insertVertex(d.getDefaultParent(),null,"",s,s,t,n)]}if(d.setCellStyles(mxConstants.STYLE_IMAGE,e,i),d.setCellStyles(mxConstants.STYLE_SHAPE,"image",i),1==d.getSelectionCount()&&null!=t&&null!=n){var o=i[0],r=d.getModel().getGeometry(o);null!=r&&((r=r.clone()).width=t,r.height=n,d.getModel().setGeometry(o,r))}}finally{d.getModel().endUpdate()}null!=a&&(d.setSelectionCells(a),d.scrollCellToVisible(a[0]))}(e,n.width,n.height)},n.onerror=function(){mxUtils.alert(mxResources.get("fileNotFound"))},n.src=e}})},Actions.prototype.addAction=function(e,t,n,a,i){return this.put(e,new Action(mxResources.get(e),t,n,a,i))},Actions.prototype.put=function(e,t){return this.actions[e]=t},Actions.prototype.get=function(e){return this.actions[e]},mxUtils.extend(Action,mxEventSource),Action.prototype.setEnabled=function(e){this.enabled!=e&&(this.enabled=e,this.fireEvent(new mxEventObject("stateChanged")))},Action.prototype.setToggleAction=function(e){this.toggleAction=e},Action.prototype.setSelectedCallback=function(e){this.selectedCallback=e},Action.prototype.isSelected=function(){return this.selectedCallback()},Menus=function(e){this.editorUi=e,this.menus=new Object,this.init(),(new Image).src=IMAGE_PATH+"/checkmark.gif"},Menus.prototype.init=function(){var i=this.editorUi.editor.graph;this.put("fontFamily",new Menu(mxUtils.bind(this,function(e,t){for(var n=["Helvetica","Verdana","Times New Roman","Garamond","Comic Sans MS","Courier New","Georgia","Lucida Console","Tahoma"],a=0;a<n.length;a++){this.styleChange(e,n[a],[mxConstants.STYLE_FONTFAMILY],[n[a]],null,t).firstChild.nextSibling.style.fontFamily=n[a]}e.addSeparator(t),this.promptChange(e,mxResources.get("custom"),"",mxConstants.DEFAULT_FONTFAMILY,mxConstants.STYLE_FONTFAMILY,t)}))),this.put("fontSize",new Menu(mxUtils.bind(this,function(e,t){for(var n=[6,8,9,10,11,12,14,18,24,36,48,72],a=0;a<n.length;a++)this.styleChange(e,n[a],[mxConstants.STYLE_FONTSIZE],[n[a]],null,t);e.addSeparator(t),this.promptChange(e,mxResources.get("custom"),"(pt)","12",mxConstants.STYLE_FONTSIZE,t)}))),this.put("linewidth",new Menu(mxUtils.bind(this,function(e,t){for(var n=[1,2,3,4,8,12,16,24],a=0;a<n.length;a++)this.styleChange(e,n[a]+"px",[mxConstants.STYLE_STROKEWIDTH],[n[a]],null,t);e.addSeparator(t),this.promptChange(e,mxResources.get("custom"),"(px)","1",mxConstants.STYLE_STROKEWIDTH,t)}))),this.put("line",new Menu(mxUtils.bind(this,function(e,t){this.styleChange(e,mxResources.get("straight"),[mxConstants.STYLE_EDGE],[null],null,t),this.styleChange(e,mxResources.get("entityRelation"),[mxConstants.STYLE_EDGE],["entityRelationEdgeStyle"],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("horizontal"),[mxConstants.STYLE_EDGE,mxConstants.STYLE_ELBOW],["elbowEdgeStyle","horizontal"],null,t),this.styleChange(e,mxResources.get("vertical"),[mxConstants.STYLE_EDGE,mxConstants.STYLE_ELBOW],["elbowEdgeStyle","vertical"],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("manual"),[mxConstants.STYLE_EDGE],["segmentEdgeStyle"],null,t),this.styleChange(e,mxResources.get("automatic"),[mxConstants.STYLE_EDGE],["orthogonalEdgeStyle"],null,t)}))),this.put("lineend",new Menu(mxUtils.bind(this,function(e,t){this.styleChange(e,mxResources.get("classic"),[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_CLASSIC],null,t),this.styleChange(e,mxResources.get("openArrow"),[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_OPEN],null,t),this.styleChange(e,mxResources.get("block"),[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_BLOCK],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("oval"),[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_OVAL],null,t),this.styleChange(e,mxResources.get("diamond"),[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_DIAMOND],null,t),this.styleChange(e,mxResources.get("diamondThin"),[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_DIAMOND_THIN],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("none"),[mxConstants.STYLE_ENDARROW],[mxConstants.NONE],null,t),e.addSeparator(t),e.addItem(mxResources.get("transparent"),null,function(){i.toggleCellStyles("endFill",!0)},t,null,!0),e.addSeparator(t),this.promptChange(e,mxResources.get("size"),"(px)",mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_ENDSIZE,t)}))),this.put("linestart",new Menu(mxUtils.bind(this,function(e,t){this.styleChange(e,mxResources.get("classic"),[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_CLASSIC],null,t),this.styleChange(e,mxResources.get("openArrow"),[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_OPEN],null,t),this.styleChange(e,mxResources.get("block"),[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_BLOCK],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("oval"),[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_OVAL],null,t),this.styleChange(e,mxResources.get("diamond"),[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_DIAMOND],null,t),this.styleChange(e,mxResources.get("diamondThin"),[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_DIAMOND_THIN],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("none"),[mxConstants.STYLE_STARTARROW],[mxConstants.NONE],null,t),e.addSeparator(t),e.addItem(mxResources.get("transparent"),null,function(){i.toggleCellStyles("startFill",!0)},t,null,!0),e.addSeparator(t),this.promptChange(e,mxResources.get("size"),"(px)",mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_STARTSIZE,t)}))),this.put("spacing",new Menu(mxUtils.bind(this,function(e,t){var n=this.editorUi.actions.get("shadow").enabled,a=this.get("line").enabled;(n||e.showDisabled)&&(this.promptChange(e,mxResources.get("top"),"(px)","0",mxConstants.STYLE_SPACING_TOP,t,n),this.promptChange(e,mxResources.get("right"),"(px)","0",mxConstants.STYLE_SPACING_RIGHT,t,n),this.promptChange(e,mxResources.get("bottom"),"(px)","0",mxConstants.STYLE_SPACING_BOTTOM,t,n),this.promptChange(e,mxResources.get("left"),"(px)","0",mxConstants.STYLE_SPACING_LEFT,t,n),e.addSeparator(t),this.promptChange(e,mxResources.get("global"),"(px)","0",mxConstants.STYLE_SPACING,t,n),this.promptChange(e,mxResources.get("perimeter"),"(px)","0",mxConstants.STYLE_PERIMETER_SPACING,t,n)),(a||e.showDisabled)&&(e.addSeparator(t),this.promptChange(e,mxResources.get("sourceSpacing"),"(px)","0",mxConstants.STYLE_SOURCE_PERIMETER_SPACING,t,a),this.promptChange(e,mxResources.get("targetSpacing"),"(px)","0",mxConstants.STYLE_TARGET_PERIMETER_SPACING,t,a))}))),this.put("format",new Menu(mxUtils.bind(this,function(e,t){this.addMenuItem(e,"style",t)}))),this.put("text",new Menu(mxUtils.bind(this,function(e,t){var n=this.get("text").enabled;e.addSeparator(t),this.addSubmenu("fontFamily",e,t),this.addSubmenu("fontSize",e,t),this.addMenuItems(e,["-","bold","italic","underline","-"],t),this.addSubmenu("alignment",e,t),this.addMenuItem(e,"wordWrap",t),e.addSeparator(t),this.promptChange(e,mxResources.get("textOpacity"),"(%)","100",mxConstants.STYLE_TEXT_OPACITY,t,n),e.addItem(mxResources.get("hide"),null,function(){i.toggleCellStyles(mxConstants.STYLE_NOLABEL,!1)},t,null,n)}))),this.put("alignment",new Menu(mxUtils.bind(this,function(e,t){this.styleChange(e,mxResources.get("leftAlign"),[mxConstants.STYLE_ALIGN],[mxConstants.ALIGN_LEFT],null,t),this.styleChange(e,mxResources.get("center"),[mxConstants.STYLE_ALIGN],[mxConstants.ALIGN_CENTER],null,t),this.styleChange(e,mxResources.get("rightAlign"),[mxConstants.STYLE_ALIGN],[mxConstants.ALIGN_RIGHT],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("topAlign"),[mxConstants.STYLE_VERTICAL_ALIGN],[mxConstants.ALIGN_TOP],null,t),this.styleChange(e,mxResources.get("middle"),[mxConstants.STYLE_VERTICAL_ALIGN],[mxConstants.ALIGN_MIDDLE],null,t),this.styleChange(e,mxResources.get("bottomAlign"),[mxConstants.STYLE_VERTICAL_ALIGN],[mxConstants.ALIGN_BOTTOM],null,t),e.addSeparator(t),this.addSubmenu("position",e,t),this.addSubmenu("spacing",e,t),e.addSeparator(t);var n=this.get("text").enabled;e.addItem(mxResources.get("vertical"),null,function(){i.toggleCellStyles(mxConstants.STYLE_HORIZONTAL,!0)},t,null,n)}))),this.put("position",new Menu(mxUtils.bind(this,function(e,t){this.styleChange(e,mxResources.get("left"),[mxConstants.STYLE_LABEL_POSITION,mxConstants.STYLE_ALIGN],[mxConstants.ALIGN_LEFT,mxConstants.ALIGN_RIGHT],null,t),this.styleChange(e,mxResources.get("center"),[mxConstants.STYLE_LABEL_POSITION,mxConstants.STYLE_ALIGN],[mxConstants.ALIGN_CENTER,mxConstants.ALIGN_CENTER],null,t),this.styleChange(e,mxResources.get("right"),[mxConstants.STYLE_LABEL_POSITION,mxConstants.STYLE_ALIGN],[mxConstants.ALIGN_RIGHT,mxConstants.ALIGN_LEFT],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("top"),[mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.STYLE_VERTICAL_ALIGN],[mxConstants.ALIGN_TOP,mxConstants.ALIGN_BOTTOM],null,t),this.styleChange(e,mxResources.get("middle"),[mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.STYLE_VERTICAL_ALIGN],[mxConstants.ALIGN_MIDDLE,mxConstants.ALIGN_MIDDLE],null,t),this.styleChange(e,mxResources.get("bottom"),[mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.STYLE_VERTICAL_ALIGN],[mxConstants.ALIGN_BOTTOM,mxConstants.ALIGN_TOP],null,t)}))),this.put("direction",new Menu(mxUtils.bind(this,function(e,t){e.addItem(mxResources.get("flipH"),null,function(){i.toggleCellStyles(mxConstants.STYLE_FLIPH,!1)},t),e.addItem(mxResources.get("flipV"),null,function(){i.toggleCellStyles(mxConstants.STYLE_FLIPV,!1)},t),this.addMenuItems(e,["-","tilt","rotation"],t)}))),this.put("align",new Menu(mxUtils.bind(this,function(e,t){e.addItem(mxResources.get("leftAlign"),null,function(){i.alignCells(mxConstants.ALIGN_LEFT)},t),e.addItem(mxResources.get("center"),null,function(){i.alignCells(mxConstants.ALIGN_CENTER)},t),e.addItem(mxResources.get("rightAlign"),null,function(){i.alignCells(mxConstants.ALIGN_RIGHT)},t),e.addSeparator(t),e.addItem(mxResources.get("topAlign"),null,function(){i.alignCells(mxConstants.ALIGN_TOP)},t),e.addItem(mxResources.get("middle"),null,function(){i.alignCells(mxConstants.ALIGN_MIDDLE)},t),e.addItem(mxResources.get("bottomAlign"),null,function(){i.alignCells(mxConstants.ALIGN_BOTTOM)},t)}))),this.put("layout",new Menu(mxUtils.bind(this,function(e,t){e.addItem(mxResources.get("horizontalFlow"),null,mxUtils.bind(this,function(){var e=new mxHierarchicalLayout(i,mxConstants.DIRECTION_WEST);this.editorUi.executeLayout(e,!0,!0)}),t),e.addItem(mxResources.get("verticalFlow"),null,mxUtils.bind(this,function(){var e=new mxHierarchicalLayout(i,mxConstants.DIRECTION_NORTH);this.editorUi.executeLayout(e,!0,!0)}),t)}))),this.put("navigation",new Menu(mxUtils.bind(this,function(e,t){this.addMenuItems(e,["home","-","exitGroup","enterGroup","-","expand","collapse"],t)}))),this.put("arrange",new Menu(mxUtils.bind(this,function(e,t){this.addMenuItems(e,["toFront","toBack","-"],t),this.addSubmenu("layout",e,t),e.addSeparator(t),this.addMenuItems(e,["-","group","ungroup","removeFromGroup"],t)}))),this.put("view",new Menu(mxUtils.bind(this,function(t,n){this.addMenuItems(t,["actualSize"],n),t.addSeparator();for(var e=[.25,.5,.75,1,2,4],a=0;a<e.length;a++)!function(e){t.addItem(100*e+"%",null,function(){i.zoomTo(e)},n)}(e[a]);this.addMenuItems(t,["-","zoomIn","zoomOut","-","fitWindow","customZoom","-","fitPage","fitPageWidth"],n)}))),this.put("file",new Menu(mxUtils.bind(this,function(e,t){this.addMenuItems(e,["new","open","-","save","saveAs","publish","-","variable","-","import","export","-","editFile","description","-","print"],t)}))),this.put("edit",new Menu(mxUtils.bind(this,function(e,t){this.addMenuItems(e,["undo","redo","-","cut","copy","paste","delete","-","duplicate","-","selectVertices","selectEdges","selectAll"])}))),this.put("help",new Menu(mxUtils.bind(this,function(e,t){this.addMenuItems(e,["help","-","about"])})))},Menus.prototype.put=function(e,t){this.menus[e]=t},Menus.prototype.get=function(e){return this.menus[e]},Menus.prototype.addSubmenu=function(e,t,n){var a=this.get(e).enabled;if(t.showDisabled||a){var i=t.addItem(mxResources.get(e),null,null,n,null,a);this.addMenu(e,t,i)}},Menus.prototype.addMenu=function(e,t,n){var a=this.get(e);null!=a&&(t.showDisabled||a.enabled)&&this.get(e).execute(t,n)},Menus.prototype.styleChange=function(e,t,n,a,i,s){return e.addItem(t,null,mxUtils.bind(this,function(){var e=this.editorUi.editor.graph;e.getModel().beginUpdate();try{for(var t=0;t<n.length;t++)e.setCellStyles(n[t],a[t])}finally{e.getModel().endUpdate()}}),s,i)},Menus.prototype.promptChange=function(e,t,a,i,s,n,o){return e.addItem(t,null,mxUtils.bind(this,function(){var e=this.editorUi.editor.graph,t=i,n=e.getView().getState(e.getSelectionCell());null!=n&&(t=n.style[s]||t),null!=(t=mxUtils.prompt(mxResources.get("enterValue")+(0<a.length?" "+a:""),t))&&0<t.length&&e.setCellStyles(s,t)}),n,null,o)},Menus.prototype.addMenuItem=function(e,t,n){var a=this.editorUi.actions.get(t);if(null==a||!e.showDisabled&&!a.enabled)return null;var i=e.addItem(a.label,null,a.funct,n,null,a.enabled);return a.toggleAction&&a.isSelected()&&this.addCheckmark(i),this.addShortcut(i,a),i},Menus.prototype.addShortcut=function(e,t){if(null!=t.shortcut){var n=e.firstChild.nextSibling.nextSibling,a=document.createElement("span");a.style.color="gray",mxUtils.write(a,t.shortcut),n.appendChild(a)}},Menus.prototype.addCheckmark=function(e){var t=e.firstChild.nextSibling;t.style.backgroundImage="url("+IMAGE_PATH+"/checkmark.gif)",t.style.backgroundRepeat="no-repeat",t.style.backgroundPosition="2px 50%"},Menus.prototype.addMenuItems=function(e,t,n){for(var a=0;a<t.length;a++)"-"==t[a]?e.addSeparator(n):this.addMenuItem(e,t[a],n)},Menus.prototype.createPopupMenu=function(e,t,n){var a=this.editorUi.editor.graph;if(e.smartSeparators=!0,a.isSelectionEmpty()?this.addMenuItems(e,["undo","redo","-","paste","-"]):(this.addMenuItems(e,["delete","-","cut","copy","-","duplicate"]),1==a.getSelectionCount()&&a.getModel().isEdge(a.getSelectionCell())&&this.addMenuItems(e,["setAsDefaultEdge"]),e.addSeparator()),0<a.getSelectionCount()){if(this.addMenuItems(e,["toFront","toBack","-"]),a.getModel().isEdge(a.getSelectionCell())){var i=!1;if(null!=(t=a.getSelectionCell())&&a.getModel().isEdge(t)){var s=a.selectionCellsHandler.getHandler(t);if(s instanceof mxEdgeHandler&&null!=s.bends&&2<s.bends.length){var o=s.getHandleForEvent(new mxMouseEvent(n)),r=this.editorUi.actions.get("removeWaypoint");r.handler=s,i=0<(r.index=o)&&o<s.bends.length}}this.addMenuItems(e,["-",i?"removeWaypoint":"addWaypoint"])}else 1<a.getSelectionCount()&&(e.addSeparator(),this.addMenuItems(e,["group"]));if(e.addSeparator(),1==a.getSelectionCount())null!=a.getLinkForCell(a.getSelectionCell())&&this.addMenuItems(e,["openLink"])}else this.addMenuItems(e,["-","selectVertices","selectEdges","-","selectAll"])},Menus.prototype.createMenubar=function(e){var t=new Menubar(this.editorUi,e),n=[];n=CRUD_PERMISSIONS.canEdit?["file","edit","view","format","text","arrange","help"]:["file","view","help"];for(var a=0;a<n.length;a++)t.addMenu(mxResources.get(n[a]),this.get(n[a]).funct);return t},Menubar.prototype.hideMenu=function(){null!=this.currentMenu&&this.currentMenu.hideMenu()},Menubar.prototype.addMenu=function(e,t){var n=document.createElement("a");return n.setAttribute("href","javascript:void(0);"),n.className="geItem",mxUtils.write(n,e),this.addMenuHandler(n,t),this.container.appendChild(n),n},Menubar.prototype.getOffset=function(e){return{left:(e=e.getBoundingClientRect()).left+window.scrollX,top:e.top+window.scrollY}},Menubar.prototype.addMenuHandler=function(i,s){if(null!=s){var o=!0,t=mxUtils.bind(this,function(e){if(o&&null==i.enabled||i.enabled){this.editorUi.editor.graph.panningHandler.hideMenu();var t=new mxPopupMenu(s);t.div.className+=" geMenubarMenu",t.smartSeparators=!0,t.showDisabled=!0,t.autoExpand=!0,t.hideMenu=mxUtils.bind(this,function(){mxPopupMenu.prototype.hideMenu.apply(t,arguments),t.destroy(),this.currentMenu=null,this.currentElt=null});var n=this.getOffset(i).left,a=this.getOffset(i).top+i.offsetHeight;t.popup(n,a,null,e),this.currentMenu=t,this.currentElt=i}o=!0,mxEvent.consume(e)});mxEvent.addListener(i,"mousemove",mxUtils.bind(this,function(e){null!=this.currentMenu&&this.currentElt!=i&&(this.hideMenu(),t(e))})),mxEvent.addListener(i,"mousedown",mxUtils.bind(this,function(){o=this.currentElt!=i})),mxEvent.addListener(i,"click",t)}},mxUtils.extend(Menu,mxEventSource),Menu.prototype.setEnabled=function(e){this.enabled!=e&&(this.enabled=e,this.fireEvent(new mxEventObject("stateChanged")))},Menu.prototype.execute=function(e,t){this.funct(e,t)},Toolbar.prototype.init=function(){CRUD_PERMISSIONS.canEdit?this.addItems(["save","publish","-","print","undo","redo","-","copy","cut","paste","delete","-","duplicate","-","actualSize","zoomIn","zoomOut","-"]):this.addItems(["print","actualSize","zoomIn","zoomOut","-"])},Toolbar.prototype.hideMenu=function(){null!=this.currentMenu&&(this.currentMenu.hideMenu(),this.currentMenu.destroy(),this.currentMenu=null)},Toolbar.prototype.addMenu=function(e,t,n,a){var i=this.editorUi.menus.get(a),s=this.addMenuFunction(e,t,n,i.funct);return i.addListener("stateChanged",function(){s.setEnabled(i.enabled)}),s},Toolbar.prototype.addMenuFunction=function(e,t,n,a){var i=n?this.createLabel(e):this.createButton(e);return this.initElement(i,t),this.addMenuHandler(i,n,a),this.container.appendChild(i),i},Toolbar.prototype.addSeparator=function(){var e=document.createElement("div");return e.className="geSeparator",this.container.appendChild(e),e},Toolbar.prototype.addItems=function(e){for(var t=0;t<e.length;t++){var n=e[t];"-"==n?this.addSeparator():this.addItem("geSprite-"+n.toLowerCase(),n)}},Toolbar.prototype.addItem=function(e,t){var n=this.editorUi.actions.get(t),a=null;return null!=n&&((a=this.addButton(e,n.label,n.funct)).setEnabled(n.enabled),n.addListener("stateChanged",function(){a.setEnabled(n.enabled)})),a},Toolbar.prototype.addButton=function(e,t,n){var a=this.createButton(e);return this.initElement(a,t),this.addClickHandler(a,n),this.container.appendChild(a),a},Toolbar.prototype.addSelectionHandler=function(n){var a=this.editorUi.editor.graph,e=function(){for(var e=!a.isSelectionEmpty(),t=0;t<n.length;t++)n[t].setEnabled(e)};a.getSelectionModel().addListener(mxEvent.CHANGE,e),e()},Toolbar.prototype.addEdgeSelectionHandler=function(a){var i=this.editorUi.editor.graph,e=function(){var e=!1;if(!i.isSelectionEmpty())for(var t=i.getSelectionCells(),n=0;n<t.length;n++)if(i.getModel().isEdge(t[n])){e=!0;break}for(n=0;n<a.length;n++)a[n].setEnabled(e)};i.getSelectionModel().addListener(mxEvent.CHANGE,e),e()},Toolbar.prototype.initElement=function(e,t){e.setAttribute("tabindex","0"),null!=t&&e.setAttribute("title",t),this.addEnabledState(e)},Toolbar.prototype.addEnabledState=function(t){var n=t.className;t.setEnabled=function(e){t.enabled=e,t.className=e?n:n+" geDisabled"},t.setEnabled(!0)},Toolbar.prototype.addClickHandler=function(t,n){null!=n&&mxEvent.addListener(t,"click",function(e){t.enabled&&n(e),mxEvent.consume(e)})},Toolbar.prototype.createButton=function(e){var t=document.createElement("a");t.setAttribute("href","javascript:void(0);"),t.className="geButton";var n=document.createElement("div");return n.className="geSprite "+e,t.appendChild(n),t},Toolbar.prototype.createLabel=function(e,t){var n=document.createElement("a");return n.setAttribute("href","javascript:void(0);"),n.className="geLabel",mxUtils.write(n,e),n},Toolbar.prototype.addMenuHandler=function(t,n,a,i){if(null!=a){var s=this.editorUi.editor.graph,o=null;mxEvent.addListener(t,"click",mxUtils.bind(this,function(e){(null==t.enabled||t.enabled)&&(s.panningHandler.hideMenu(),(o=new mxPopupMenu(a)).div.className+=" geToolbarMenu",o.showDisabled=i,o.labels=n,o.autoExpand=!0,o.popup(t.offsetLeft,t.offsetTop+t.offsetHeight+34,null,e),this.currentMenu=o),mxEvent.consume(e)}))}},Dialog.prototype.close=function(){null!=this.onDialogClose&&(this.onDialogClose(),this.onDialogClose=null),this.container.parentNode.removeChild(this.container),this.bg.parentNode.removeChild(this.bg)},angular.module("motion").run(["$templateCache",function(e){"use strict";e.put("app/auth/services/hotdesk/dialog.html",'<md-dialog aria-label="Telephone">\n    <form ng-cloak>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div flex>\n                    <span class="title" translate="LOGIN.TELEPHONES">Telephones</span>\n                </div>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content>\n            <md-select ng-model="vm.name" placeholder="Select a telephone">\n                <md-option value="{{telephone.name}}" ng-repeat="telephone in vm.telephones.rows">{{telephone.fullname}}</md-option>\n            </md-select>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row">\n            <md-button ng-click="vm.closeDialog(vm.name)" class="send-button md-accent md-raised" aria-label="call" ng-disabled="!vm.name">\n                <span translate="LOGIN.SELECT">SELECT</span>\n            </md-button>\n            \x3c!-- <md-button ng-click="vm.closeDialog()" class="send-button md-accent md-raised" aria-label="cancel">\n                <span translate="LOGIN.CANCEL">Cancel</span>\n            </md-button> --\x3e\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/core/directives/ms-advanced-filter/ms-advanced-filter.html",'<div ng-cloak layout="column" class="advanced-filter-container">\n    <div layout="row" ng-if="options.activeConditions.length > 0" class="advanced-filter-conditions">\n        <md-list>\n            <md-list-item>\n                <md-chips ng-model="options.activeConditions" class="advanced-filter-chips" readonly="true" md-removable="true" md-on-remove="removeCondition()">\n                    <md-chip-template>\n                        <span>\n                            <p class="filter-text">{{ $chip.name }}</p>\n                            <p ng-show="$chip.condition" class="filter-text">{{ $chip.condition.name }}</p>\n                            <strong>{{ $chip.displayValue }}</strong>\n                        </span>\n                    </md-chip-template>\n                    <button md-chip-remove class="md-primary remove-filter">\n                        <md-icon md-font-icon="icon-cancel" aria-label="Remove Filter"></md-icon>\n                    </button>\n                </md-chips>\n            </md-list-item>\n        </md-list>\n        <div layout="row" layout-align="end center" flex>\n            <md-button class="md-raised" aria-label="Apply" translate translate-attr-aria-label="DASHBOARDS.APPLY" ng-click="applyFilter()">APPLY</md-button>\n            <md-button class="md-raised" aria-label="Clear" translate translate-attr-aria-label="DASHBOARDS.CLEAR" ng-click="clearConditions()">CLEAR</md-button>\n        </div>\n    </div>\n\n    <div layout="row" class="configuration-bar" layout-margin flex>\n        <md-input-container flex="33">\n            <label>Select field</label>\n            <md-icon md-font-icon="icon-filter-variant"></md-icon>\n            <md-select class="font-size-12" ng-model="options.selectedField" ng-change="getValues(options.selectedField)" aria-label="Field">\n                <md-option ng-value="field" ng-repeat="field in options.fields">{{ field.name }}</md-option>\n            </md-select>\n        </md-input-container>\n        <md-input-container ng-if="options.selectedField && [\'number\', \'text\'].indexOf(options.selectedField.type) > -1" flex="30">\n            <label>Select condition</label>\n            <md-icon md-font-icon="icon-format-text"></md-icon>\n            <md-select class="font-size-12" ng-model="options.selectedCondition" aria-label="Condition">\n                <md-option ng-value="condition" ng-repeat="condition in conditions">{{ condition.name }}</md-option>\n            </md-select>\n        </md-input-container>\n        <md-input-container ng-if="options.selectedField && options.selectedField.type === \'text\'" class="no-errors" flex="33">\n            <label>Value</label>\n            <md-icon md-font-icon="icon-format-text"></md-icon>\n            <input type="text" aria-label="Value" ng-model="options.selectedValue" ng-disabled="!options.selectedField" ng-keyup="$event.keyCode == 13 ? addNewCondition(options.selectedField, options.selectedCondition, options.selectedValue) : null"></input>\n        </md-input-container>\n        <md-input-container ng-if="options.selectedField && options.selectedField.type === \'number\'" class="no-errors" flex="33">\n            <label>Value</label>\n            <md-icon md-font-icon="icon-numeric"></md-icon>\n            <input type="number" aria-label="Value" ng-model="options.selectedValue" ng-disabled="!options.selectedField" ng-keyup="$event.keyCode == 13 ? addNewCondition(options.selectedField, options.selectedCondition, options.selectedValue) : null"></input>\n        </md-input-container>\n        <md-input-container ng-if="options.selectedField.type === \'select\'" flex="33">\n            <label>Value</label>\n            <md-icon md-font-icon="icon-format-text"></md-icon>\n            <md-select class="font-size-12" multiple="true" ng-model="options.selectedValue" ng-model-options="{trackBy: \'$value.id\'}" aria-label="Value">\n                <md-option ng-value="item" ng-repeat="item in options.selectedField.values">{{item.name}}</md-option>\n            </md-select>\n        </md-input-container>\n        <div layout="row" layout-align="start start" ng-if="options.selectedField.type === \'date\'" class="no-errors" flex="33">\n            <md-icon md-font-icon="icon-calendar"></md-icon>\n            <md-date-range localization-map="vm.localizationMap" ng-model="options.selectedValue" auto-confirm="true" show-template="true" placeholder="Value" flex></md-date-range>\n        </div>\n        <div layout="row" layout-align="start start" ng-if="options.selectedField.type === \'autocomplete\'" class="autocomplete-filter" flex="33">\n            <md-icon md-font-icon="icon-format-text"></md-icon>\n            <md-chips ng-model="options.selectedValue" md-autocomplete-snap md-require-match="true" input-aria-label="Selected values" flex>\n                <md-autocomplete flex md-no-cache="true" md-items="item in options.selectedField.values" md-search-text="options.searchText" md-search-text-change="searchText(options.selectedField, options.searchText)" md-item-text="item.name" placeholder="Select value">\n                    <md-item-template>\n                        <span md-highlight-text="options.searchText">{{item.name}}</span>\n                    </md-item-template>\n                </md-autocomplete>\n                <md-chip-template>\n                    <span>{{$chip.name}}</span>\n                </md-chip-template>\n            </md-chips>\n        </div>\n        <md-button class="md-raised" ng-hide="!options.selectedField" ng-disabled="!options.selectedValue && (options.selectedChips.length === 0)" aria-label="Add filter" ng-click="addNewCondition(options.selectedField, options.selectedCondition, options.selectedValue)" translate translate-attr-aria-label="DASHBOARDS.ADD">\n            ADD\n        </md-button>\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-1/template-1.html",'<div class="template-1">\n    <div class="media">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n\n    <div class="content pv-24 ph-16">\n        <div class="title h1" ng-if="card.title">\n            {{card.title}}\n        </div>\n\n        <div class="subtitle secondary-text" ng-if="card.subtitle">\n            {{card.subtitle}}\n        </div>\n\n        <div class="text pt-16" ng-if="card.text">\n            {{card.text}}\n        </div>\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-10/template-10.html",'<div class="template-10 p-16">\n    <div class="pb-16" layout="row" layout-align="space-between center">\n        <div class="info">\n            <div class="title secondary-text" ng-if="card.title">\n                {{card.title}}\n            </div>\n\n            <div class="subtitle h2" ng-if="card.subtitle">\n                {{card.subtitle}}\n            </div>\n        </div>\n\n        <div class="media ml-16">\n            <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n        </div>\n    </div>\n\n    <div class="text">\n        {{card.text}}\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-2/template-2.html",'<div class="template-2">\n    <div class="header p-16" layout="row" layout-align="start center">\n        <div ng-if="card.avatar">\n            <img class="avatar mr-16" ng-src="{{card.avatar.src}}" alt="{{card.avatar.alt}}">\n        </div>\n\n        <div class="info">\n            <div class="title" ng-if="card.title">\n                {{card.title}}\n            </div>\n\n            <div class="subtitle secondary-text" ng-if="card.subtitle">\n                {{card.subtitle}}\n            </div>\n        </div>\n    </div>\n\n    <div class="media">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n\n    <div class="text p-16" ng-if="card.text">\n        {{card.text}}\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-3/template-3.html",'<div class="template-3 p-16 teal-bg white-fg" layout="row" layout-align="space-between">\n    <div layout="column" layout-align="space-between">\n        <div class="info">\n            <div class="title h1" ng-if="card.title">\n                {{card.title}}\n            </div>\n\n            <div class="subtitle h3 secondary-text" ng-if="card.subtitle">\n                {{card.subtitle}}\n            </div>\n        </div>\n\n        <div class="cta">\n            <md-button class="m-0">{{card.cta}}</md-button>\n        </div>\n    </div>\n\n    <div class="media pl-16">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-4/template-4.html",'<div class="template-4">\n    <div class="info white-fg ph-16 pv-24">\n        <div class="title h1" ng-if="card.title">\n            {{card.title}}\n        </div>\n\n        <div class="text" ng-if="card.text">\n            {{card.text}}\n        </div>\n    </div>\n\n    <div class="media">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-5/template-5.html",'<div class="template-5 p-16" layout="row" layout-align="space-between start">\n    <div class="info">\n        <div class="title secondary-text" ng-if="card.title">\n            {{card.title}}\n        </div>\n\n        <div class="event h2" ng-if="card.event">\n            {{card.event}}\n        </div>\n    </div>\n\n    <div class="media ml-16">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-6/template-6.html",'<div class="template-6">\n    <div class="content pv-24 ph-16">\n        <div class="subtitle secondary-text" ng-if="card.subtitle">\n            {{card.subtitle}}\n        </div>\n\n        <div class="title h2" ng-if="card.title">\n            {{card.title}}\n        </div>\n\n        <div class="text pt-8" ng-if="card.text">\n            {{card.text}}\n        </div>\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-7/template-7.html",'<div class="template-7" layout="row" layout-align="space-between">\n    <div class="info" layout="column" layout-align="space-between" layout-fill flex>\n        <div class="p-16">\n            <div class="title h1" ng-if="card.title">\n                {{card.title}}\n            </div>\n\n            <div class="subtitle h4 secondary-text" ng-if="card.subtitle">\n                {{card.subtitle}}\n            </div>\n\n            <div class="text h4 pt-8" ng-if="card.text">\n                {{card.text}}\n            </div>\n        </div>\n\n        <div>\n            <md-divider></md-divider>\n            <div class="p-8" layout="row">\n                <md-icon md-font-icon="icon-star-outline" class="mh-5"></md-icon>\n                <md-icon md-font-icon="icon-star-outline" class="mh-5"></md-icon>\n                <md-icon md-font-icon="icon-star-outline" class="mh-5"></md-icon>\n                <md-icon md-font-icon="icon-star-outline" class="mh-5"></md-icon>\n                <md-icon md-font-icon="icon-star-outline" class="mh-5"></md-icon>\n            </div>\n        </div>\n    </div>\n\n    <div class="media">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-8/template-8.html",'<div class="template-8">\n    <div class="media">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n\n    <div class="content pv-24 ph-16">\n        <div class="title h1" ng-if="card.title">\n            {{card.title}}\n        </div>\n\n        <div class="subtitle secondary-text" ng-if="card.subtitle">\n            {{card.subtitle}}\n        </div>\n\n        <div class="buttons pt-16">\n            <md-button class="m-0">{{card.button1}}</md-button>\n            <md-button class="m-0 md-accent">{{card.button2}}</md-button>\n        </div>\n\n        <div class="text pt-16" ng-if="card.text">\n            {{card.text}}\n        </div>\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-9/template-9.html",'<div class="template-9">\n    <div class="header p-16" layout="row" layout-align="start center">\n        <div ng-if="card.avatar">\n            <img class="avatar mr-16" ng-src="{{card.avatar.src}}" alt="{{card.avatar.alt}}">\n        </div>\n\n        <div class="info">\n            <div class="title" ng-if="card.title">\n                {{card.title}}\n            </div>\n\n            <div class="subtitle secondary-text" ng-if="card.subtitle">\n                {{card.subtitle}}\n            </div>\n\n        </div>\n    </div>\n\n    <div class="text ph-16 pb-16" ng-if="card.text">\n        {{card.text}}\n    </div>\n\n    <div class="media">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n\n    <div class="buttons m-8">\n        <md-button class="md-icon-button mr-16" aria-label="Favorite">\n            <md-icon md-font-icon="icon-heart-outline" class="s24"></md-icon>\n        </md-button>\n        <md-button class="md-icon-button" aria-label="Share">\n            <md-icon md-font-icon="icon-share" class="s24"></md-icon>\n        </md-button>\n    </div>\n\n</div>'),e.put("app/core/directives/ms-click-to-call/ms-click-to-call.html",'<section ng-if="type !== \'button\'">\n    <span ng-if="!showMenu()">{{target}}</span>\n\n    <md-menu ng-if="showMenu()">\n        <a aria-label="Target" ng-click="$mdOpenMenu($event)">\n            <span ng-if="prefix">{{prefix}}-</span>{{target}}\n        </a>\n\n        <md-menu-content width="2">\n            <md-menu-item>\n                <md-button ng-click="call(prefix ? prefix + target : target)">\n                    {{\'DASHBOARDS.CALL_NUMBER\' | translate}} ({{prefix ? prefix + \'-\' + target : target}})\n                </md-button>\n            </md-menu-item>\n            <md-menu-item>\n                <md-button ng-click="transfer(prefix ? prefix + target : target)">\n                    {{\'DASHBOARDS.TRANSFER_NUMBER\' | translate}} ({{prefix ? prefix + \'-\' + target : target}})\n                </md-button>\n            </md-menu-item>\n        </md-menu-content>\n    </md-menu>\n</section>\n\n<section ng-if="type === \'button\'">\n    <md-button ng-if="!showMenu()" ng-disabled="true" class="md-icon-button md-raised md-accent ng-scope md-ink-ripple" title="NEW CALL" aria-label="NEW CALL">\n        <md-icon md-font-icon="icon-phone"></md-icon>\n    </md-button>\n\n    <md-menu ng-if="showMenu()">\n        <md-button class="md-icon-button md-raised md-accent ng-scope md-ink-ripple" title="NEW CALL" ng-click="$mdOpenMenu($event)" aria-label="NEW CALL">\n            <md-icon md-font-icon="icon-phone"></md-icon>\n        </md-button>\n\n        <md-menu-content width="2">\n            <md-menu-item>\n                <md-button ng-click="call(prefix ? prefix + target : target)">\n                    {{\'DASHBOARDS.CALL_NUMBER\' | translate}} ({{prefix ? prefix + \'-\' + target : target}})\n                </md-button>\n            </md-menu-item>\n            <md-menu-item>\n                <md-button ng-click="transfer(target)">\n'+"                    {{'DASHBOARDS.TRANSFER_NUMBER' | translate}} ({{prefix ? prefix + '-' + target : target}})\n                </md-button>\n            </md-menu-item>\n        </md-menu-content>\n    </md-menu>\n</section>"),e.put("app/core/directives/ms-dual-multiselect/ms-dual-multiselect.html",'<div ng-cloak layout-gt-sm="row" layout="column">\n    <div flex-gt-sm="50" flex="45">\n        <md-input-container class="md-icon-float md-block margin-0">\n            <md-icon md-font-icon="icon-magnify" aria-label="swap"></md-icon>\n            <input ng-model="query" type="text" placeholder="{{options.labelSearch || \'Search...\'}}">\n        </md-input-container>\n        <md-content class="border h-300">\n            <md-list class="md-dense no-padding" layout-fill layout-align="center center">\n                <md-list-item class="md-3-line" ng-class="options.readOnly ? \'read-only-mode\' : \'\'" ng-disabled="options.readOnly" ng-repeat="item in options.items | filter: query | orderBy: options.orderBy" ng-click="canTransfer(item, options, false)">\n                    <div class="md-list-item-text" layout="column">\n                        <h3 ng-if="options.line1">{{getLine(item, options.line1)}}</h3>\n                        <h4 ng-if="options.line2">{{getLine(item, options.line2)}}</h4>\n                        <p ng-if="options.line3">{{getLine(item, options.line3)}}</p>\n                        <p class="ms-dual-multiselect-line-xs" ng-if="options.line4">{{getLine(item, options.line4)}}\n                        </p>\n                    </div>\n                    <md-icon ng-show="!options.readOnly" md-font-icon="icon-arrow-right-bold" aria-label="swap"></md-icon>\n                    <md-divider></md-divider>\n                </md-list-item>\n            </md-list>\n        </md-content>\n        <div class="margin-10" layout="row">\n            <span class="h4" flex>{{options.labelAll || \'All Items\'}} ({{options.items.length}})</span>\n            <md-icon ng-show="options.showSelectAndDeselectAll && !options.readOnly" md-font-icon="icon-chevron-double-right" aria-label="swap" ng-click="transfer(options.items, options.selectedItems, -1, false)"></md-icon>\n        </div>\n    </div>\n\n    <div flex="10" layout="row" layout-align="center center">\n        <md-icon md-font-icon="icon-swap-horizontal" aria-label="swap"></md-icon>\n    </div>\n\n    <div flex-gt-sm="50" flex="45">\n        <md-input-container class="md-icon-float md-block margin-0">\n            <md-icon md-font-icon="icon-magnify" aria-label="swap"></md-icon>\n            <input ng-model="selectedQuery" type="text" placeholder="{{options.labelSearch || \'Search...\'}}">\n        </md-input-container>\n        <md-content class="border h-300">\n            <md-list class="md-dense no-padding" layout-fill layout-align="center center">\n                <md-list-item class="md-3-line" ng-class="options.readOnly || !item.isValid ? \'read-only-mode\' : \'\'" ng-disabled="options.readOnly" ng-repeat="item in options.selectedItems | filter: selectedQuery | orderBy: options.orderBy" ng-click="canTransfer(item, options, true)">\n                    <md-icon ng-class="options.readOnly || !item.isValid ? \'hidden\' : \'\'" md-font-icon="icon-arrow-left-bold" aria-label="swap"></md-icon>\n                    <div class="md-list-item-text" layout="column">\n                        <h3 ng-if="options.line1">{{getLine(item, options.line1)}}</h3>\n                        <h4 ng-if="options.line2">{{getLine(item, options.line2)}}</h4>\n                        <p ng-if="options.line3">{{getLine(item, options.line3)}}</p>\n                        <p class="ms-dual-multiselect-line-xs" ng-if="options.line4">{{getLine(item, options.line4)}}\n                        </p>\n                    </div>\n                    <md-divider></md-divider>\n                </md-list-item>\n            </md-list>\n        </md-content>\n        <div class="margin-10" layout="row">\n            <md-icon ng-show="options.showSelectAndDeselectAll && !options.readOnly" md-font-icon="icon-chevron-double-left" aria-label="swap" flex ng-click="transfer(options.selectedItems, options.items, -1, true)"></md-icon>\n            <span class="h4">{{options.labelSelected || \'Selected Items\'}} ({{options.selectedItems.length}})</span>\n        </div>\n    </div>\n</div>'),e.put("app/core/directives/ms-font-family/ms-font-family.html",'<md-select ng-model="ngModel" class="no-margin">\n    <md-option ng-repeat="font in fonts" ng-value="font.value" <span ng-style="{\'font-family\': font.value}">{{font.option}}</span>\n    </md-option>\n</md-select>'),e.put("app/core/directives/ms-info-bar/ms-info-bar.html",'<div id="ms-info-bar" layout="row" layout-align="start center" flex>\n    <div id="ms-info-bar-message" ng-transclude flex></div>\n    <md-button id="ms-info-bar-close" class="md-icon-button" aria-label="Close" ng-click="removeInfoBar()">\n        <md-icon md-font-icon="icon-close s20"></md-icon>\n    </md-button>\n</div>'),e.put("app/core/directives/ms-material-color-picker/ms-material-color-picker.html",'<md-menu md-position-mode="target-right target">\n\n    <div ng-click="$mdOpenMenu($event)">\n        <ms-color-picker-button>\n            <md-button aria-label="Row Color" md-menu-origin ng-click="$mdOpenMenu($event)" ng-class="vm.selectedColor.class">\n\n                <span ng-show="vm.selectedColor.palette">\n                    {{vm.selectedColor.palette}} {{vm.selectedColor.hue}}\n                </span>\n                <span ng-show="!vm.selectedColor.palette">\n                    Select Color\n                </span>\n            </md-button>\n        </ms-color-picker-button>\n    </div>\n\n    <md-menu-content class="ms-material-color-picker-menu-content" layout-column>\n\n        <header ng-class="vm.selectedColor.class || \'md-accent-bg\'" class="md-whiteframe-4dp" layout="row" layout-align="space-between center">\n            <md-button md-prevent-menu-close ng-click="vm.activateHueSelection(false,false)" class="md-icon-button" ng-class="{\'hidden\':!vm.selectedPalette}" aria-label="Palette">\n                <md-icon md-font-icon="icon-arrow-left" class="s20"></md-icon>\n            </md-button>\n\n            <span ng-if="vm.selectedColor.palette">\n                {{vm.selectedColor.palette}} {{vm.selectedColor.hue}}\n            </span>\n\n            <span ng-if="!vm.selectedColor.palette">\n                Select Color\n            </span>\n\n            <md-button class="remove-color-button md-icon-button" ng-click="vm.removeColor()" aria-label="Remove Color">\n                <md-icon md-font-icon="icon-delete" class="s20"></md-icon>\n            </md-button>\n        </header>\n\n        <div class="colors" ms-scroll>\n            <div ng-show="!vm.selectedPalette" layout="row" layout-wrap>\n                <div class="color" ng-class="\'md-\'+palette+\'-500-bg\'" ng-repeat="(palette, hues) in vm.palettes" ng-click="vm.activateHueSelection(palette,hues)" layout="row" layout-align="start end" md-prevent-menu-close md-ink-ripple>\n                    <span class="label">\n                        {{palette}}\n                    </span>\n                </div>\n            </div>\n\n            <div ng-show="vm.selectedPalette" layout="row" layout-wrap>\n                <div class="color" ng-class="\'md-\'+vm.selectedPalette+\'-\'+hue+\'-bg\'" ng-repeat="(hue, values) in vm.selectedHues" ng-click="vm.selectColor(vm.selectedPalette,hue)" layout="row" layout-align="start end" md-ink-ripple>\n                    <span class="label">\n                        {{hue}}\n                    </span>\n                    <i ng-if="vm.selectedPalette == vm.selectedColor.palette && hue == vm.selectedColor.hue" class="s16 icon-check">\n                    </i>\n                </div>\n            </div>\n\n        </div>\n\n    </md-menu-content>\n</md-menu>'),e.put("app/core/directives/ms-navigation/templates/horizontal.html",'<div class="navigation-toggle" hide-gt-sm>\n    <md-button class="md-icon-button" ng-click="vm.toggleHorizontalMobileMenu()" aria-label="Toggle Mobile Navigation">\n        <md-icon md-font-icon="icon-menu"></md-icon>\n    </md-button>\n</div>\n\n<ul class="horizontal">\n    <li ng-repeat="node in vm.navigation" ms-navigation-horizontal-node="node" ng-class="{\'has-children\': vm.hasChildren}" ng-include="\'navigation-horizontal-nested.html\'"></li>\n</ul>\n\n\x3c!-- Nested horizontal navigation template --\x3e\n<script type="text/ng-template" id="navigation-horizontal-nested.html">\n\n    <div ms-navigation-horizontal-item layout="row" ng-if="!vm.isHidden()">\n\n        <div class="ms-navigation-horizontal-button" ng-if="!node.uisref && node.title"\n             ng-class="{\'active md-accent-bg md-accent-fg\': vm.isActive}">\n            <i class="icon s18 {{node.icon}}" ng-if="node.icon"></i>\n            <span class="title" translate="{{node.translate}}" flex>{{node.title}}</span>\n            <span class="badge white-fg" style="background: {{node.badge.color}}" ng-if="node.badge">{{node.badge.content}}</span>\n            <i class="icon-chevron-right s18 arrow" ng-if="vm.hasChildren"></i>\n        </div>\n\n        <a class="ms-navigation-horizontal-button" ui-sref="{{node.uisref}}" ui-sref-active="active md-accent-bg"\n           ng-class="{\'active md-accent-bg md-accent-fg\': vm.isActive}"\n           ng-if="node.uisref && node.title">\n            <i class="icon s18 {{node.icon}}" ng-if="node.icon"></i>\n            <span class="title" translate="{{node.translate}}" flex>{{node.title}}</span>\n            <span class="badge white-fg" style="background: {{node.badge.color}}" ng-if="node.badge">{{node.badge.content}}</span>\n            <i class="icon-chevron-right s18 arrow" ng-if="vm.hasChildren"></i>\n        </a>\n\n    </div>\n\n    <ul ng-if="vm.hasChildren && !vm.isHidden()">\n        <li ng-repeat="node in node.children" ms-navigation-horizontal-node="node"\n            ng-class="{\'has-children\': vm.hasChildren}"\n            ng-include="\'navigation-horizontal-nested.html\'"></li>\n    </ul>\n\n<\/script>\n\x3c!-- / Nested navigation template --\x3e'),e.put("app/core/directives/ms-navigation/templates/vertical.html",'<ul>\n    <li ng-repeat="node in vm.navigation" ms-navigation-node="node" ng-class="{\'collapsed\': vm.collapsed, \'has-children\': vm.hasChildren}" ng-include="\'navigation-nested.html\'"></li>\n</ul>\n\n\x3c!-- Nested navigation template --\x3e\n<script type="text/ng-template" id="navigation-nested.html">\n\n    <div ms-navigation-item layout="row" ng-if="!vm.isHidden()">\n\n        <div class="ms-navigation-button" ng-if="!node.uisref && node.title">\n            <i class="icon s16 {{node.icon}}" ng-if="node.icon"></i>\n            <span class="title" translate="{{node.translate}}" flex>{{node.title}}</span>\n            <span class="badge white-fg margin-right-20" ng-style="{\'background\': node.badge.color}" ng-if="node.badge">{{node.badge.content}}</span>\n            <i class="icon-chevron-right s16 arrow" ng-if="vm.collapsable && vm.hasChildren"></i>\n        </div>\n\n        <a class="ms-navigation-button" ui-sref="{{node.uisref}}" ui-sref-active="active md-accent-bg" ng-if="node.uisref && node.title">\n            <i class="icon s16 {{node.icon}}" ng-if="node.icon"></i>\n            <span class="title" translate="{{node.translate}}" flex>{{node.title}}</span>\n            <span class="badge white-fg margin-right-20" ng-style="{\'background\': node.badge.color}" ng-if="node.badge">{{node.badge.content}}</span>\n            <i class="icon-chevron-right s16 arrow" ng-if="vm.collapsable && vm.hasChildren"></i>\n        </a>\n\n    </div>\n\n    <ul ng-if="vm.hasChildren && !vm.isHidden()">\n        <li ng-repeat="node in node.children" ms-navigation-node="node"\n            ng-class="{\'collapsed\': vm.collapsed, \'has-children\': vm.hasChildren}"\n            ng-include="\'navigation-nested.html\'"></li>\n    </ul>\n\n<\/script>\n\x3c!-- / Nested navigation template --\x3e'),e.put("assets/ms-phonebar/ms-phonebar-dialpad.html",'\x3c!-- Dialpad --\x3e\n<md-content ng-if="vm_pb.showDialpad" class="num-pad" layout="column">\n    <section layout="row" layout-align="start center">\n        <span><img class="num-pad-logo" layout-padding src="/api/settings/1/logo" alt="logo" /></span>\n        <span class="md-subhead">Dialpad</span>\n        <div layout="row" layout-align="end center" flex>\n            <md-button class="md-icon-button" ng-click="vm_pb.closeDialpad()">\n                <md-icon md-font-icon="icon-close"></md-icon>\n            </md-button>\n        </div>\n    </section>\n    <md-divider></md-divider>\n    <section layout="row">\n        <div class="span4" ng-repeat="item in ::[{n: 1, l: []}, {n: 2, l: [\'a\', \'b\', \'c\']}, {n: 3, l: [\'d\', \'e\', \'f\']}]" ng-click="vm_pb.type(item.n, true)">\n            <div class="num">\n                <div class="txt">\n                    {{item.n}} <span class="small">\n                        <p>\n                            <span ng-repeat="l in ::item.l">{{l | uppercase}}</span>\n                        </p>\n                    </span>\n                </div>\n            </div>\n        </div>\n    </section>\n    <section layout="row">\n        <div class="span4" ng-repeat="item in ::[{n: 4, l: [\'g\', \'h\', \'i\']}, {n: 5, l: [\'j\', \'k\', \'l\']}, {n: 6, l: [\'m\', \'n\', \'o\']}]" ng-click="vm_pb.type(item.n, true)">\n            <div class="num">\n                <div class="txt">\n                    {{item.n}} <span class="small">\n                        <p>\n                            <span ng-repeat="l in ::item.l">{{l | uppercase}}</span>\n                        </p>\n                    </span>\n                </div>\n            </div>\n        </div>\n    </section>\n    <section layout="row">\n        <div class="span4" ng-repeat="item in ::[{n: 7, l: [\'p\', \'q\', \'r\', \'s\']}, {n: 8, l: [\'t\', \'u\', \'v\']}, {n: 9, l: [\'w\', \'x\', \'y\', \'z\']}]" ng-click="vm_pb.type(item.n, true)">\n            <div class="num">\n                <div class="txt">\n                    {{item.n}} <span class="small">\n                        <p>\n                            <span ng-repeat="l in ::item.l">{{l | uppercase}}</span>\n                        </p>\n                    </span>\n                </div>\n            </div>\n        </div>\n    </section>\n    <section layout="row">\n        <div class="span4" ng-repeat="item in ::[{n: \'*\', l: []}]" ng-click="vm_pb.type(item.n, true)">\n            <div class="num" layout="column" layout-align="center center">\n                <div class="txt" layout="column" layout-align="center center">\n                    {{item.n}}\n                </div>\n            </div>\n        </div>\n        <div class="span4" ng-repeat="item in ::[{n: 0, l: [\'+\']}]" ng-click="vm_pb.type(item.n, true)">\n            <div class="num">\n                <div class="txt">\n                    {{item.n}} <span class="small">\n                        <p>\n                            <span ng-repeat="l in ::item.l">{{l | uppercase}}</span>\n                        </p>\n                    </span>\n                </div>\n            </div>\n        </div>\n        <div class="span4" ng-repeat="item in ::[{n: \'#\', l: []}]" ng-click="vm_pb.type(item.n, true)">\n            <div class="num" layout="column" layout-align="center center">\n                <div class="txt" layout="column" layout-align="center center">\n                    {{item.n}}\n                </div>\n            </div>\n        </div>\n    </section>\n</md-content>\n\x3c!-- Dialpad --\x3e\n\x3c!-- Input Area --\x3e\n<div layout="row" layout-align="start center">\n    <div layout="row" layout-align="center center">\n        \x3c!-- START Ringing Tone--\x3e\n        <md-button class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Ringing" ng-click="vm_pb.conf.ringingMute = !vm_pb.conf.ringingMute; vm_pb.initDevice(\'ringing\')" ng-disabled="!vm_pb.registered">\n            <md-icon md-font-icon="{{vm_pb.conf.ringingMute ? \'icon-bell-off\' : \'icon-bell-ring\'}}" class="icon s14" ng-class="vm_pb.conf.ringingMute ? \'red-fg\' : \'grey-fg\'">\n                <md-tooltip><span translate="TOOLBAR.RINGING">Ringing</span></md-tooltip>\n            </md-icon>\n        </md-button>\n        \x3c!-- END Ringing Tone --\x3e\n\n        \x3c!-- START Speaker --\x3e\n        <md-button class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Speaker" ng-click="vm_pb.conf.speakerMute = !vm_pb.conf.speakerMute; vm_pb.initDevice(\'speaker\')" ng-disabled="!vm_pb.registered">\n            <md-icon md-font-icon="{{vm_pb.conf.speakerMute ? \'icon-volume-off\' : \'icon-volume\'}}" class="icon s14" ng-class="vm_pb.conf.speakerMute ? \'red-fg\' : \'grey-fg\'">\n                <md-tooltip><span translate="TOOLBAR.SPEAKER">Speaker</span></md-tooltip>\n            </md-icon>\n        </md-button>\n        \x3c!-- END Speaker --\x3e\n\n        \x3c!-- START Microphone --\x3e\n        <md-button class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Microphone" ng-click="vm_pb.conf.microphoneMute = !vm_pb.conf.microphoneMute; vm_pb.initDevice(\'microphone\')" ng-disabled="!vm_pb.registered">\n            <md-icon md-font-icon="{{vm_pb.conf.microphoneMute ? \'icon-microphone-off\' : \'icon-microphone\'}}" class="icon s14" ng-class="vm_pb.conf.microphoneMute ? \'red-fg\' : \'grey-fg\'">\n                <md-tooltip><span translate="TOOLBAR.MICROPHONE">Microphone</span></md-tooltip>\n            </md-icon>\n        </md-button>\n        \x3c!-- END Microphone --\x3e\n\n        \x3c!-- START Registered --\x3e\n        <span>\n            <span class="quantity-indicator md-red-500-bg" ng-class="vm_pb.registered ? \'md-green-500-bg\' : \'md-red-500-bg\'"></span>\n            <md-tooltip><span>{{vm_pb.conf.license ? (vm_pb.registered ? \'TOOLBAR.REGISTERED\' : \'TOOLBAR.NOT_REGISTERED\') : \'TOOLBAR.WEBRTC_LICENSE_NOT_ENABELD\' | translate}}\n                    <timer ng-if="vm_pb.registered" interval="1000">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </span>\n        </span>\n        </md-tooltip>\n        </span>\n        \x3c!-- END Registered --\x3e\n    </div>\n    <div layout="column" layout-align="center start">\n        <div layout="row" layout-align="start center">\n            \x3c!-- START Target --\x3e\n            <angucomplete-alt id="ms-target-wrap" pause="10" local-data="vm_pb.calls" search-fields="target" title-field="target" minlength="0" input-class="input-number" disable-input="!vm_pb.registered" match-class="highlight" template-url="assets/ms-phonebar/ms-phonebar-input.html" input-changed="vm_pb.targetChanged" selected-object="vm_pb.targetSelected" clear-selected="true" ng-keypress="vm_pb.typeWrapper($event)" focus-first="true" />\n            \x3c!-- END Target --\x3e\n\n            \x3c!-- Auto Answer --\x3e\n            <div ng-if="vm_pb.conf.autoAnswer" class="red-fg" style="padding-left: 10px;">\n                <span class="font-size-20">A<span class="font-size-16">A</span></span>\n            </div>\n            \x3c!-- Auto Answer --\x3e\n\n            <md-button class="md-fab md-mini white-bg width-30 height-30" aria-label="Dialpad" ng-click="vm_pb.toggleDialpad()" ng-disabled="!vm_pb.registered">\n                <md-icon md-font-icon="icon-apps" class="icon grey-fg s16"></md-icon>\n            </md-button>\n            <md-button ng-if="vm_pb.target" class="md-fab md-mini white-bg width-25 height-25" aria-label="Call" style="margin-left: 0px;" ng-click="vm_pb.call()">\n                <md-icon md-font-icon="icon-phone" class="icon green-fg s12"></md-icon>\n            </md-button>\n        </div>\n    </div>\n</div>\n\x3c!-- START 3WC --\x3e\n<md-button ng-if="vm_pb.canGoInConference" class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="3Way" ng-click="vm_pb.start3WayConf();  $event.stopPropagation();">\n    <md-icon md-font-icon="icon-account-multiple-plus" class="icon orange-fg s14"></md-icon>\n    <md-tooltip><span translate="TOOLBAR.CONFERENCE">Conference</span></md-tooltip>\n</md-button>\n\x3c!-- END 3Way --\x3e\n\x3c!-- Input Area --\x3e\n\n<div class="toolbar-separator"></div>\n\n\x3c!-- Sessions Area --\x3e\n<div class="sessions" layout="row" layout-align="start center" flex>\n    <div layout="row" layout-align="center center" ng-if="!vm_pb.conf.license">\n        <md-icon md-font-icon="icon-account-alert" class="icon s36 red-fg"></md-icon>\n        <span layout-margin translate="TOOLBAR.WEBRTC_LICENSE_NOT_ENABELD"></span>\n    </div>\n\n    <div ng-repeat="session in vm_pb.sessions" class="session" layout="row" ng-click="(vm_pb.sessions.length > 1) && vm_pb.selectSession(session)">\n        <md-button ng-if="vm_pb.conf.recording && session.confirmed" class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Record" ng-click="vm_pb.record(session); $event.stopPropagation();">\n            <md-icon md-font-icon="icon-radiobox-marked" class="icon s14" ng-class="session.monitor ? \'red-fg\' : \'grey-fg\'"></md-icon>\n        </md-button>\n        <div layout="column" layout-align="center start">\n            <span class="session-info">{{ (session.user == session.name) ? session.user : (session.name + \' \' + session.user) }}</span>\n            <span class="session-info" layout="row" layout="start center">\n                <timer interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            </span>\n        </div>\n\n        \x3c!-- START Answer --\x3e\n        <md-button ng-if="session.incoming && !session.confirmed" class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Hold" ng-click="vm_pb.answer(session); $event.stopPropagation();">\n            <md-icon md-font-icon="icon-phone" class="icon green-fg s12"></md-icon>\n        </md-button>\n        \x3c!-- END Answer --\x3e\n\n        \x3c!-- START Hangup --\x3e\n        <md-button class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Terminate" ng-click="vm_pb.terminate(session); $event.stopPropagation();">\n            <md-icon md-font-icon="icon-phone-hangup" class="icon red-fg s12"></md-icon>\n        </md-button>\n        \x3c!-- END Hangup --\x3e\n\n        \x3c!-- START Hold/Unhold --\x3e\n        <md-button ng-if="session.confirmed && !vm_pb.isInConference" class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Hold" ng-click="(session.localHold ? vm_pb.unhold(session) : vm_pb.hold(session)); $event.stopPropagation();">\n            <md-icon md-font-icon="{{session.localHold ? \'icon-play\' : \'icon-pause\'}}" class="icon grey-fg s12"></md-icon>\n        </md-button>\n        \x3c!-- END Hold/Unhold --\x3e\n\n        \x3c!-- START Transfer --\x3e\n        <md-button ng-if="session.confirmed && !session.localHold && vm_pb.sessions.length == 1 && !vm_pb.isInConference" class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Refer" ng-click="vm_pb.refer(session);  $event.stopPropagation();">\n            <md-icon md-font-icon="icon-phone-forward" class="icon purple-fg s12"></md-icon>\n        </md-button>\n        \x3c!-- END transfer --\x3e\n\n        \x3c!-- START Attended Transfer --\x3e\n        <md-button ng-if="session.confirmed && !session.localHold && vm_pb.sessions.length>1" class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Refer Attended" ng-click="vm_pb.referAttended(session);  $event.stopPropagation();">\n            <md-icon md-font-icon="icon-phone-forward" class="icon purple-fg s12"></md-icon>\n        </md-button>\n        \x3c!-- END Attended Transfer --\x3e\n    </div>\n</div>\n\x3c!-- Sessions Area --\x3e'),e.put("assets/ms-phonebar/ms-phonebar-input.html",'<div class="angucomplete-holder" ng-class="{\'angucomplete-dropdown-visible\': showDropdown}">\n    <input id="ms-target" ng-model="searchStr" ng-disabled="disableInput" type="text" placeholder="{{placeholder}}" ng-focus="onFocusHandler()" class="{{inputClass}}" ng-focus="resetHideResults()" ng-blur="hideResults($event)" autocapitalize="off" autocorrect="off" autocomplete="off" ng-change="inputChangeHandler(searchStr)" />\n    <div class="angucomplete-dropdown" ng-show="showDropdown && !(!searching && (!results || results.length == 0))">\n        <div class="angucomplete-row" ng-repeat="result in results" ng-click="selectResult(result)" ng-mouseenter="hoverRow($index)" ng-class="{\'angucomplete-selected-row\': $index == currentIndex}">\n            <div layout="row" layout-align="start center">\n                <md-icon md-font-icon="{{result.originalObject.inbound ? \'icon-arrow-bottom-left\' : \'icon-arrow-top-right\'}}" class="icon no-margin s22"></md-icon>\n                <span style="margin-left: 8px;">({{result.originalObject.time}}) - <span class="angucomplete-title" ng-if="matchClass" ng-bind-html="result.title"></span></span>\n            </div>\n        </div>\n    </div>\n</div>'),e.put("assets/ms-phonebar/ms-phonebar.html",'<div layout="row" layout-align="start center" flex>\n    \x3c!-- Audio stream --\x3e\n    <audio id="remote-audio" autoplay hidden=true></audio>\n    \x3c!-- Audio stream --\x3e\n\n    \x3c!-- WebRtc PhoneBar --\x3e\n    <div class="phonebar-container" ng-include="\'assets/ms-phonebar/ms-phonebar-dialpad.html\'" layout="row" layout-align="start center" flex></div>\n    \x3c!-- WebRtc PhoneBar --\x3e\n</div>'),e.put("assets/ms-phonebar/prefix/dialog.html",'<md-dialog aria-label="Prefix">\n    <form ng-cloak>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div flex>\n                    <span class="title" translate="TOOLBAR.PREFIXES">Prefixes</span>\n                </div>\n                <div layout="row" layout-align="end center">\n                    <md-button class="md-icon-button no-margin no-padding" ng-click="vm.closeDialog(-1)">\n                        <md-icon class="no-margin" md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content>\n            <md-radio-group ng-model="vm.prefix">\n                <md-radio-button ng-repeat="prefix in vm.prefixes.rows" value="{{prefix.prefix}}" class="md-primary">{{prefix.name}}</md-radio-button>\n                <md-radio-button ng-if="!vm.required" ng-value="null" class="md-primary">no prefix</md-radio-button>\n            </md-radio-group>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row">\n            <md-button ng-click="vm.call()" class="send-button md-accent md-raised" aria-label="call" ng-disabled="!vm.prefix && vm.required">\n                <span translate="TOOLBAR.CALL">CALL</span>\n            </md-button>\n            <md-button ng-click="vm.closeDialog(-1)" class="send-button md-accent md-raised" aria-label="cancel">\n                <span translate="TOOLBAR.CANCEL">Cancel</span>\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("assets/ms-phonebar/record/dialog.html",'<md-dialog aria-label="Recording" ng-init="vm.onInit()">\n    <form ng-cloak>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div flex>\n                    <span class="title" translate="TOOLBAR.RECORDING">Recording</span>\n                </div>\n                <div layout="row" layout-align="end center">\n                    <md-button class="md-icon-button no-margin no-padding">\n                        <md-icon class="no-margin" md-font-icon="icon-plus" aria-label="Add" ng-click="vm.addRecording()"></md-icon>\n                    </md-button>\n                    <md-button class="md-icon-button no-margin no-padding" ng-click="vm.closeDialog()">\n                        <md-icon class="no-margin" md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-toolbar>\n\n        <md-table-container>\n            <table md-table layout-padding>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column><span translate="TOOLBAR.FILENAME">File name</span></th>\n                        <th md-column><span translate="TOOLBAR.STATUS">Status</span></th>\n                        <th md-column><span translate="TOOLBAR.ACTIONS">Actions</span></th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm.session.monitors.length">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="TOOLBAR.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="monitor in vm.session.monitors">\n                        <td md-cell>{{monitor.filename}}</td>\n                        <td md-cell class="no-padding">\n                            <md-icon md-font-icon="icon-radiobox-marked" class="icon s16" ng-class="(monitor.status == \'rec\') ? \'red-fg ms-blink\' : \'grey-fg\'"></md-icon>\n                        </td>\n                        <td md-cell class="no-padding">\n                            <md-button class="md-fab md-mini white-bg width-35 height-35 margin-5" aria-label="Record" ng-click="(monitor.status == \'rec\') ? vm.stop(monitor) : vm.start(monitor)">\n'+"                                <md-icon md-font-icon=\"{{monitor.status == 'rec' ? 'icon-stop' : 'icon-play'}}\" class=\"icon s16\" ng-class=\"monitor.status == 'rec' ? 'grey-fg' : 'red-fg'\"></md-icon>\n                            </md-button>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n    </form>\n</md-dialog>"),e.put("assets/ms-phonebar/referAttended/dialog.html",'<md-dialog aria-label="Transfer">\n    <form ng-cloak>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div flex>\n                    <span class="title" translate="TOOLBAR.ATTENDED_TRANSFER">Transfer</span>\n                </div>\n                <div layout="row" layout-align="end center">\n                    <md-button class="md-icon-button no-margin no-padding" ng-click="vm.closeDialog()">\n                        <md-icon class="no-margin" md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content>\n            <label translate="TOOLBAR.TARGET">Target</label>\n            <md-input-container class="md-block">\n                <md-select ng-model="vm.target">\n                    <md-option ng-repeat="session in vm.sessions" ng-value="session.user">\n                        {{ session.name }}\n                    </md-option>\n                </md-select>\n            </md-input-container>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row">\n            <md-button ng-click="vm.transfer()" class="send-button md-accent md-raised" aria-label="transfer" ng-disabled="!vm.target && !vm.sessionId">\n                <span translate="TOOLBAR.TRANSFER">TRANSFER</span>\n            </md-button>\n            <md-button ng-click="vm.closeDialog()" class="send-button md-accent md-raised" aria-label="cancel">\n                <span translate="TOOLBAR.CANCEL">Cancel</span>\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("assets/ms-phonebar/settings/settings.html",'<md-dialog class="md-phonebar-dialog" aria-label="{{vm.name}}">\n    <form name="settingsForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="TOOLBAR.SETTINGS">Settings</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content class="no-padding" ms-scroll>\n            <md-tabs md-no-pagination md-stretch-tabs="always">\n                <md-tab label="{{ \'TOOLBAR.PROFILE\' | translate}}">\n                    <md-content layout-padding layout="column">\n                        <span><span translate="TOOLBAR.FULLNAME">Fullname</span>: {{vm.conf.fullname}}</span>\n                        <span><span translate="TOOLBAR.NAME">Name</span>: {{vm.conf.name}}</span>\n                        <span><span translate="TOOLBAR.INTERNAL">Internal</span>: {{vm.conf.internal}}</span>\n                        <span><span translate="TOOLBAR.BROWSER">Browser</span>: {{vm.conf.browserName}} {{vm.conf.browserVersion}}</span>\n                        <span><span translate="TOOLBAR.OS">OS</span>: {{vm.conf.osName}} {{vm.conf.osVersion}}</span>\n                    </md-content>\n                </md-tab>\n                <md-tab label="{{ \'TOOLBAR.SERVICES\' | translate}}">\n                    <md-content layout-padding>\n                        <md-input-container class="md-block">\n                            <md-switch ng-model="vm.conf.autoAnswer" aria-label="Auto Answer">\n                                <span translate="TOOLBAR.AUTOANSWER">Auto Answer</span>\n                                <span>{{ vm.conf.autoAnswerDelay }} [s]</span>\n                            </md-switch>\n                        </md-input-container>\n                    </md-content>\n                </md-tab>\n                <md-tab label="{{ \'TOOLBAR.AUDIO\' | translate}}">\n                    <md-content layout-padding>\n                        <div class="border brad-5" layout-margin>\n                            <md-input-container class="md-block" ng-if="(vm.devices | filter: { kind: \'audiooutput\' }).length">\n                                <label translate="TOOLBAR.RINGINGDEVICE">Ringing Device</label>\n                                <md-select name="ringingDevice" ng-model="vm.conf.ringingId" required>\n                                    <md-option ng-value="device.deviceId" ng-repeat="device in vm.devices | filter: { kind: \'audiooutput\' }">{{ device.label || (\'Speaker \' + ($index + 1)) }}</md-option>\n                                </md-select>\n                                <div ng-messages="settingsForm[\'ringingDevice\'].$error" ng-show="settingsForm[\'ringingDevice\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLBAR.ERRORS.FIELD_REQUIRED">Field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <div layout="row" layout-align="space-between center">\n                                <md-switch ng-model="vm.conf.ringingMute" aria-label="Mute">\n                                    Mute\n                                </md-switch>\n\n                                <md-slider-container flex="80">\n                                    <md-slider flex step="0.1" min="0" max="1" ng-model="vm.conf.ringingVolume" aria-label="volume"></md-slider>\n                                </md-slider-container>\n                            </div>\n                        </div>\n\n                        <div class="border brad-5" layout-margin>\n                            <md-input-container class="md-block" ng-if="(vm.devices | filter: { kind: \'audiooutput\' }).length">\n                                <label translate="TOOLBAR.SPEAKERDEVICE">Speaker Device</label>\n                                <md-select name="speakerDevice" ng-model="vm.conf.speakerId" required>\n                                    <md-option ng-value="device.deviceId" ng-repeat="device in vm.devices | filter: { kind: \'audiooutput\' }">{{ device.label || (\'Speaker \' + ($index + 1)) }}</md-option>\n                                </md-select>\n                                <div ng-messages="settingsForm[\'speakerDevice\'].$error" ng-show="settingsForm[\'speakerDevice\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLBAR.ERRORS.FIELD_REQUIRED">Field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <div layout="row" layout-align="space-between cetner">\n                                <md-switch ng-model="vm.conf.speakerMute" aria-label="Mute">\n                                    Mute\n                                </md-switch>\n\n                                <md-slider-container flex="80">\n                                    <md-slider flex step="0.1" min="0" max="1" ng-model="vm.conf.speakerVolume" aria-label="volume"></md-slider>\n                                </md-slider-container>\n                            </div>\n                        </div>\n\n                        <div class="border brad-5" layout-margin>\n                            <md-input-container class="md-block" ng-if="(vm.devices | filter: { kind: \'audioinput\' }).length">\n                                <label translate="TOOLBAR.MICROPHONEDEVICE">Microphone Device</label>\n                                <md-select name="microphoneDevice" ng-model="vm.conf.microphoneId" required>\n                                    <md-option ng-value="device.deviceId" ng-repeat="device in vm.devices | filter: { kind: \'audioinput\' }">{{ device.label || (\'Microphone \' + ($index + 1))}}</md-option>\n                                </md-select>\n                                <div ng-messages="settingsForm[\'microphoneDevice\'].$error" ng-show="settingsForm[\'microphoneDevice\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLBAR.ERRORS.FIELD_REQUIRED">Field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <div layout="row" layout-align="space-between center">\n                                <md-switch ng-model="vm.conf.microphoneMute" aria-label="Mute">\n                                    Mute\n                                </md-switch>\n                            </div>\n                        </div>\n                    </md-content>\n                </md-tab>\n                <md-tab label="{{ \'TOOLBAR.REQUIREMENTS\' | translate}}">\n                    <md-content layout-padding>\n                        <md-list>\n                            <md-list-item>\n                                <h3 translate="TOOLBAR.LICENSE">License</h3>\n                                <md-icon class="md-secondary" ng-class="vm.conf.license ? \'green-fg\' : \'red-fg\'" md-font-icon="{{vm.conf.license ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            </md-list-item>\n                            <md-list-item>\n                                <h3 translate="TOOLBAR.BROWSER_COMPATIBILITY">Browser Compatibility</h3>\n                                <md-icon class="md-secondary" ng-class="vm.isCompatibleBrowser() ? \'green-fg\' : \'red-fg\'" md-font-icon="{{vm.isCompatibleBrowser() ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            </md-list-item>\n                            <md-list-item>\n                                <h3 translate="TOOLBAR.HTTPS">HTTPS</h3>\n                                <md-icon class="md-secondary" ng-class="vm.conf.protocol === \'https\' ? \'green-fg\' : \'red-fg\'" md-font-icon="{{vm.conf.protocol === \'https\' ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            </md-list-item>\n                            <md-list-item>\n                                <h3 translate="TOOLBAR.WEBRTCSUPPORT">WebRTC Support</h3>\n                                <md-icon class="md-secondary" ng-class="vm.conf.isWebRTCSupported ? \'green-fg\' : \'red-fg\'" md-font-icon="{{vm.conf.isWebRTCSupported ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            </md-list-item>\n                            <md-list-item>\n                                <h3 translate="TOOLBAR.MICROPHONE">Microphone</h3>\n                                <md-icon class="md-secondary" ng-class="vm.conf.hasMicrophone ? \'green-fg\' : \'red-fg\'" md-font-icon="{{vm.conf.hasMicrophone ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            </md-list-item>\n                            <md-list-item>\n                                <h3 translate="TOOLBAR.SPEAKER">Speaker</h3>\n                                <md-icon class="md-secondary" ng-class="vm.conf.hasSpeakers ? \'green-fg\' : \'red-fg\'" md-font-icon="{{vm.conf.hasSpeakers ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            </md-list-item>\n                        </md-list>\n                    </md-content>\n                </md-tab>\n            </md-tabs>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.saveSettings()" class="send-button md-accent md-raised" ng-disabled="settingsForm.$invalid || settingsForm.$pristine" aria-label="SAVE" translate="TOOLBAR.SAVE" translate-attr-aria-label="TOOLBAR.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/core/directives/ms-search-bar/ms-search-bar.html",'<div flex layout="row" layout-align="start center" ng-init="MsSearchBar.onInit()">\n    <label for="ms-search-bar-input">\n        <md-button class="ms-search-bar-expander md-icon-button" aria-label="Expand Search Bar" ng-click="MsSearchBar.expand()" ng-if="!MsSearchBar.resultsLoading || MsSearchBar.collapsed">\n            <md-icon md-font-icon="icon-magnify" class="icon s24"></md-icon>\n        </md-button>\n        <div class="ms-search-bar-loader" layout="row" layout-align="center center" ng-if="MsSearchBar.resultsLoading && !MsSearchBar.collapsed">\n            <md-progress-circular class="md-accent" md-diameter="32" md-mode="indeterminate"></md-progress-circular>\n        </div>\n    </label>\n    <input id="ms-search-bar-input" type="text" placeholder="Search" flex ng-model="MsSearchBar.query" ng-model-options="MsSearchBar.queryOptions" ng-blur="MsSearchBar.blurCollapse()" ng-keydown="MsSearchBar.handleKeydown($event)" />\n    <md-button class="ms-search-bar-collapser md-icon-button" ng-click="MsSearchBar.collapse()" aria-label="Collapse Search Bar">\n        <md-icon md-font-icon="icon-close" class="icon s24"></md-icon>\n    </md-button>\n\n    <div class="ms-search-bar-results" ng-if="MsSearchBar.results" ms-scroll>\n        <div class="no-results" ng-if="MsSearchBar.results.length === 0">No Results!</div>\n\n        <div class="result" ng-repeat="result in MsSearchBar.results" ng-click="MsSearchBar.handleResultClick(result)" ng-mouseenter="MsSearchBar.handleMouseenter($index)" ng-mousedown="MsSearchBar.absorbEvent($event)" ng-class="{\'selected\': $index == MsSearchBar.selectedResultIndex}" md-ink-ripple>\n            <div layout="row" layout-align="start center">\n                <div class="icon-container" layout="row" layout-align="center center">\n                    <i ng-if="result.icon" class="icon {{ result.icon }}"></i>\n                    <div ng-if="!result.icon" class="square md-accent-bg"></div>\n                </div>\n                <div>\n                    <div class="title">{{ result.title }}</div>\n                    <div class="description" ng-if="result.description">{{ result.description }}</div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>'),e.put("app/core/directives/ms-shortcuts/ms-shortcuts.html",'<div class="shortcuts-container" layout="row" layout-align="space-between center" flex ng-class="{\'mobile-bar-active\': MsShortcuts.mobileBarActive}">\n\n    <div class="flex-noshrink" layout="row" layout-align="start center" flex>\n        <div class="shortcuts hide show-gt-xs" layout="row" layout-align="start center" ms-scroll ng-if="MsShortcuts.shortcuts.length > 0" ng-sortable="MsShortcuts.sortableOptions">\n            <div ng-repeat="shortcut in MsShortcuts.shortcuts" layout="row" layout-align="center center">\n                <md-button class="md-icon-button shortcut" aria-label="{{shortcut.title}}" ui-sref="{{shortcut.uisref}}">\n                    <md-icon ng-if="shortcut.icon" md-font-icon="{{shortcut.icon}}" class="icon s24"></md-icon>\n                    <div ng-if="!shortcut.icon" class="first-letter">{{shortcut.title.charAt(0)}}</div>\n                    <md-tooltip md-direction="bottom">{{shortcut.title}}</md-tooltip>\n                </md-button>\n            </div>\n        </div>\n\n        \x3c!-- <md-menu md-offset="8 56" class="shortcut-menu hide show-gt-xs">\n            <md-button class="md-icon-button add-shortcut-button" aria-label="Add shortcut"\n                       ng-click="$mdOpenMenu($event)">\n                <md-icon md-menu-origin md-font-icon="icon-star" class="icon amber-600-fg s24"></md-icon>\n                <md-tooltip md-direction="bottom">Click to add/remove shortcut</md-tooltip>\n            </md-button>\n\n            <md-menu-content>\n                <div id="ms-shortcut-add-menu">\n                    <div class="shortcut-search" layout="row" layout-align="start center">\n                        <div class="search-icon" layout="row" layout-align="center center"\n                             ng-if="!MsShortcuts.resultsLoading">\n                            <md-icon md-menu-align-target md-font-icon="icon-magnify" class="icon s24"></md-icon>\n                        </div>\n                        <div class="shortcut-loader" layout="row" layout-align="center center"\n                             ng-if="MsShortcuts.resultsLoading">\n                            <md-progress-circular class="md-accent" md-diameter="20" md-mode="indeterminate">\n                            </md-progress-circular>\n                        </div>\n\n                        <input type="text" placeholder="Search" flex\n                               ng-model="MsShortcuts.query"\n                               ng-model-options="MsShortcuts.queryOptions"\n                               ng-keydown="MsShortcuts.handleKeydown($event)">\n                    </div>\n\n                    <div class="results" ng-if="MsShortcuts.results" ms-scroll>\n                        <div class="no-results" ng-if="MsShortcuts.results.length === 0">No Results!</div>\n\n                        <div class="result" ng-repeat="result in MsShortcuts.results"\n                             ng-click="MsShortcuts.handleResultClick(result)"\n                             ng-mouseenter="MsShortcuts.handleMouseenter($index)"\n                             ng-mousedown="MsShortcuts.absorbEvent($event)"\n                             ng-class="{\'selected\': $index == MsShortcuts.selectedResultIndex}"\n                             md-prevent-menu-close="md-prevent-menu-close"\n                             md-ink-ripple>\n                            <div layout="row" layout-align="start space-between">\n                                <div layout="row" layout-align="start center" flex>\n                                    <div class="icon icon-container" layout="row" layout-align="center center">\n                                        <i ng-if="result.icon" class="{{result.icon}}"></i>\n                                        <div ng-if="!result.icon" class="square md-accent-bg"></div>\n                                    </div>\n                                    <div>\n                                        <div class="title">{{result.title}}</div>\n                                    </div>\n                                </div>\n                                <md-icon md-font-icon="icon-pin" class="icon s18"\n                                         ng-class="{\'fade-text\': !result.hasShortcut}"></md-icon>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </md-menu-content>\n        </md-menu> --\x3e\n    </div>\n\n    <md-button class="md-icon-button toggle-mobile-menu hide-gt-xs" aria-label="Add shortcut" ng-click="MsShortcuts.toggleMobileBar()">\n        <md-icon md-menu-origin md-font-icon="icon-star" class="icon amber-600-fg s24" ng-hide="MsShortcuts.mobileBarActive"></md-icon>\n        <md-icon md-menu-origin md-font-icon="icon-close" class="icon s24" ng-hide="!MsShortcuts.mobileBarActive"></md-icon>\n    </md-button>\n</div>'),e.put("app/core/directives/ms-stepper/templates/horizontal/horizontal.html",'<div class="ms-stepper-horizontal">\n    <div class="ms-stepper-navigation-wrapper">\n        <div class="ms-stepper-navigation" layout="row" layout-align="center center">\n            <md-button class="ms-stepper-navigation-item" ng-class="{\'current\': MsStepper.isStepCurrent(step.stepNumber), \'valid\': MsStepper.isStepValid(step.stepNumber), \'disabled\': MsStepper.isStepDisabled(step.stepNumber), \'optional\': MsStepper.isStepOptional(step.stepNumber)}" ng-click="MsStepper.gotoStep(step.stepNumber)" ng-disabled="MsStepper.isStepDisabled(step.stepNumber)" ng-repeat="step in MsStepper.steps | filter:MsStepper.filterHiddenStep" layout="row" layout-align="start center">\n\n                <div class="step md-accent-bg" layout="row" layout-align="center center">\n                    <span ng-if="!MsStepper.isStepValid(step.stepNumber) || MsStepper.isStepOptional(step.stepNumber)">\n                        {{$index + 1}}\n                    </span>\n                    <span ng-if="MsStepper.isStepValid(step.stepNumber) && !MsStepper.isStepOptional(step.stepNumber)">\n                        <i class="icon icon-check s18"></i>\n                    </span>\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="title" translate="{{step.stepTitleTranslate}}">{{step.stepTitle}}</div>\n                    <div class="subtitle" ng-if="MsStepper.isStepOptional(step.stepNumber)">Optional</div>\n                </div>\n            </md-button>\n        </div>\n    </div>\n\n    <div class="ms-stepper-steps" ng-transclude></div>\n\n    <div class="ms-stepper-controls" layout="row" layout-align="center center">\n        <md-button class="md-accent md-raised" ng-disabled="MsStepper.isFirstStep()" ng-click="MsStepper.gotoPreviousStep()">\n            Back\n        </md-button>\n\n        <div class="ms-stepper-dots">\n            <span ng-repeat="step in MsStepper.steps" ng-hide="MsStepper.isStepHidden(step.stepNumber)" ng-class="{\'selected md-accent-bg\':MsStepper.currentStepNumber === $index + 1}">\n            </span>\n        </div>\n\n        <md-button class="md-accent md-raised" ng-if="!MsStepper.isLastStep()" ng-disabled="!MsStepper.isStepValid(MsStepper.currentStepNumber)" ng-click="MsStepper.gotoNextStep()">\n            Next\n        </md-button>\n\n        <md-button type="submit" class="md-accent md-raised" ng-click="MsStepper.resetForm()" ng-if="MsStepper.isLastStep()" ng-disabled="!MsStepper.isFormValid()">\n            Submit\n        </md-button>\n    </div>\n</div>'),e.put("app/core/directives/ms-stepper/templates/vertical/step/vertical-step.html",'<md-button class="ms-stepper-navigation-item" ng-class="{\'current\': MsStepper.isStepCurrent(stepInfo.stepNumber), \'valid\': MsStepper.isStepValid(stepInfo.stepNumber), \'disabled\': MsStepper.isStepDisabled(stepInfo.stepNumber), \'optional\': MsStepper.isStepOptional(stepInfo.stepNumber)}" ng-click="MsStepper.gotoStep(stepInfo.stepNumber)" ng-disabled="MsStepper.isStepDisabled(stepInfo.stepNumber)" ng-hide="MsStepper.isStepHidden(stepInfo.stepNumber)" aria-label="Stepper navigation button" layout="row" layout-align="start center">\n\n    <div class="step" layout="row" layout-align="center center">\n        <span ng-if="!MsStepper.isStepValid(stepInfo.stepNumber) || MsStepper.isStepOptional(stepInfo.stepNumber)">\n            <i class="icon icon-checkbox-blank-circle-outline s18 md-accent-fg"></i>\n        </span>\n        <span ng-if="MsStepper.isStepValid(stepInfo.stepNumber) && !MsStepper.isStepOptional(stepInfo.stepNumber)">\n            <i class="icon icon-check-circle s18 md-accent-fg"></i>\n        </span>\n    </div>\n\n    <div layout="column" layout-align="start start">\n        <div class="title" ng-if="stepInfo.stepTitleTranslate">{{stepInfo.stepTitleTranslate | translate }}</div>\n        <div class="title" ng-if="!stepInfo.stepTitleTranslate">{{stepInfo.stepTitle}}</div>\n        <div class="subtitle" ng-if="MsStepper.isStepOptional(stepInfo.stepNumber)">Optional</div>\n    </div>\n</md-button>\n\n<div class="ms-stepper-step-content" ng-transclude></div>\n\n<div class="ms-stepper-controls" layout="row" layout-align="start center" ng-show="MsStepper.isStepCurrent(stepInfo.stepNumber)">\n    <md-button class="md-accent md-raised" ng-disabled="MsStepper.isFirstStep()" ng-click="MsStepper.gotoPreviousStep()">\n        Back\n    </md-button>\n\n    <md-button class="md-accent md-raised" ng-if="!MsStepper.isLastStep()" ng-disabled="!MsStepper.isStepValid(MsStepper.currentStepNumber)" ng-click="MsStepper.gotoNextStep()">\n        Next\n    </md-button>\n\n    <md-button type="submit" class="md-accent md-raised" ng-click="MsStepper.resetForm()" ng-if="MsStepper.isLastStep()" ng-disabled="!MsStepper.isFormValid()">\n        Submit\n    </md-button>\n</div>'),e.put("app/core/directives/ms-stepper/templates/vertical/vertical.html",'<div class="ms-stepper-vertical">\n    <div class="ms-stepper-vertical-line"></div>\n    <div class="ms-stepper-steps" ng-transclude></div>\n</div>'),e.put("app/core/directives/ms-tab-scroll/ms-tab-scroll.html",'<div layout="row">\n    <md-button class="md-icon-button md-mini width-25 no-margin scroll-arrow" ng-click="vm.onTabScroll(\'left\')" ng-if="vm.canScroll(\'left\') == true">\n        <md-icon md-font-icon="icon-chevron-left" class="icon s26"></md-icon>\n    </md-button>\n    <div id="bar-container" layout="row" class="bar-container">\n        <div ng-transclude id="tab-container" layout="row" layout-align="start center" class="scroll-container">\n        </div>\n    </div>\n    <md-button class="md-icon-button md-mini width-25 no-margin scroll-arrow" ng-click="vm.onTabScroll(\'right\')" ng-if="vm.canScroll(\'right\') == true">\n        <md-icon md-font-icon="icon-chevron-right" class="icon s26"></md-icon>\n    </md-button>\n</div>'),e.put("app/core/directives/ms-timezone/ms-timezone.html",'<md-select ng-model="ngModel" class="no-margin">\n    <md-option ng-value="null">NONE</md-option>\n    <md-option ng-repeat="t in timezone | orderBy:\'utcOffset\'" value="{{t.name}}">{{t.name}} ({{t.offsetStr}})</md-option>\n</md-select>'),e.put("app/core/directives/ms-widget-engine/ms-widget-engine-counter/ms-widget-engine.counter.html",'<div class="pt-8 pb-32" layout="column" layout-align="center center" layout-fill ng-controller="MsWidgetEngineCounterController as vm">\n    <div ng-class="\'font-size-\' + (vm.fontSize * 3)" ng-style="{\'color\': widget.foreground}">\n        {{ vm.getCount(widget) }}\n    </div>\n    <div ng-class="\'font-size-\' + vm.fontSize" ng-style="{\'color\': widget.foreground}">{{ \'TOOLS.\' + widget.attrs[0].value | uppercase | translate }}<span ng-if="vm.filtered">*</span></div>\n</div>'),e.put("app/core/directives/ms-widget-engine/ms-widget-engine-multibar-chart/ms-widget-engine.multibar-chart.html",'<div ng-controller="MsWidgetEngineMultibarChartController as vm" ng-init="vm.getMultiBarChart(widget)" layout="column" layout-fill>\n\n    <span ng-show="false">{{ vm.getMultiBarChart(widget)}}</span>\n\n    <canvas style="overflow:scroll" id="bar" class="chart-horizontal-bar" chart-data="vm.multiBarChart.data" chart-options="vm.multiBarChart.options" chart-series="vm.multiBarChart.series" chart-labels="vm.multiBarChart.labels">\n    </canvas>\n</div>'),e.put("app/core/directives/ms-widget-engine/ms-widget-engine-pie-chart/ms-widget-engine.pie-chart.html",'<div ng-controller="MsWidgetEnginePieChartController as vm" ng-init="vm.getPieChart(widget)" layout="column" layout-fill>\n\n    <span ng-show="false">{{ vm.getPieChart(widget)}}</span>\n\n    <canvas style="overflow:scroll" id="pie" class="chart-pie" chart-data="vm.pieChart.data" chart-labels="vm.pieChart.labels" chart-options="vm.pieChart.options">\n    </canvas>\n</div>'),e.put("app/core/directives/ms-widget-engine/ms-widget-engine-web-report/ms-widget-engine.web-report.html",'<div ng-controller="MsWidgetEngineWebReportController as vm" ng-init="vm.onInit(widget)">\n    <dl ng-if="vm.error">\n        <dt class="text-bold">Query Error</dt>\n        <dd>{{vm.error.sql}}</dd>\n        <dt>Message</dt>\n        <dd>{{vm.error.msg}}</dd>\n    </dl>\n    <md-toolbar class="md-table-toolbar md-default">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead">{{vm.title}}</span>\n            <div flex></div>\n            <md-button class="md-icon-button" ng-click="vm.onInit(widget)" aria-label="refresh">\n                <md-icon md-font-icon="icon-refresh"></md-icon>\n            </md-button>\n            <span ng-if="vm.refresh && vm.countDown" class="md-subhead blue-fg">{{vm.countDown}}</span>\n        </div>\n    </md-toolbar>\n    <md-table-container ng-if="!vm.error">\n        <table md-table md-progress="vm.promise">\n            <thead md-head>\n                <tr md-row>\n                    <th md-column ng-repeat="column in vm.columns">{{column.alias || column.field}}</th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-repeat="row in vm.results.rows">\n                    <td md-cell ng-repeat="(key, value) in row">{{ vm.valueReplacer(key, value) }}</td>\n                </tr>\n                <tr md-row ng-if="!vm.results.rows.length">\n                    <td md-cell colspan="{{vm.columns.length}}">\n                        <div layout="row" layout-align="center center">\n                            <span>No Data</span>\n                        </div>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.results.count}}" md-on-paginate="vm.getResults" md-page-select></md-table-pagination>\n</div>'),e.put("app/core/directives/ms-widget-engine/ms-widget-engine.html",'<div gridster="vm.config">\n    <ul>\n        <li gridster-item="widget" ng-repeat="widget in vm.config.widgets">\n            <md-card layout-fill>\n                <md-toolbar class="height-40" ng-style="{\'background-color\': widget.background, \'color\': widget.foreground }">\n                    <div class="md-toolbar-tools height-40 no-margin" layout="row" layout-align="start center">\n                        <a ng-href="{{widget.link ? widget.link : \'javascript:void(0)\'}}" ng-style="{\'color\': widget.foreground}" class="text-truncate" flex>\n                            {{ widget.title || \'No Title\' }}\n                        </a>\n                        <md-button ng-if="!vm.config.preview" class="draggable md-icon-button width-30 no-margin no-padding" aria-label="Move">\n                            <md-tooltip><span translate="TOOLS.MOVE_WIDGET">Move</span></md-tooltip>\n                            <md-icon md-font-icon="icon-cursor-move" class="s20" ng-style="{\'color\': widget.foreground}"></md-icon>\n                        </md-button>\n                        <md-menu ng-if="!vm.config.preview">\n                            <md-button ng-click="$mdOpenMenu($event)" class="md-icon-button width-30 no-margin no-padding" aria-label="More">\n                                <md-icon md-font-icon="icon-dots-vertical" class="s20" ng-style="{\'color\': widget.foreground}"></md-icon>\n                            </md-button>\n                            <md-menu-content>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.onEdit({widget: widget})" translate="TOOLS.EDIT_WIDGET">Edit</md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.onDelete({widget: widget})" translate="TOOLS.DELETE_WIDGET">Delete</md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n\n                    </div>\n                </md-toolbar>\n                <md-card-content class="resizable" layout="column" layout-align="center center" flex ng-style="{\'background-color\': widget.background, \'color\': widget.foreground}">\n                    <div ng-switch="widget.type" layout-fill>\n                        <iframe ng-switch-when="iframe|custom" ng-switch-when-separator="|" ng-src="{{vm.getTrustedURL(widget.attrs[0].value)}}" frameborder=0 style="border:0px; width:100%; height:100%;"></iframe>\n                        <ds-widget-clock ng-class="\'font-size-\' + (widget.attrs[2].value || 12)" ng-switch-when="clock" digital-format="widget.attrs[0].value" gmt-offset="widget.attrs[1].value" data-show-digital show-gmt-info></ds-widget-clock>\n                        <div ng-switch-default layout-fill>\n                            <div ng-include="widget.templateUrl" layout-fill></div>\n                        </div>\n                    </div>\n                </md-card-content>\n            </md-card>\n        </li>\n    </ul>\n</div>'),e.put("app/core/layouts/content-only.html",'<div id="layout-content-only" class="template-layout" layout="column" flex>\n    <md-content id="content" class="animate-slide-up md-hue-2" ui-view="content" flex></md-content>\n</div>'),e.put("app/core/layouts/content-with-toolbar.html",'<div id="layout-content-with-toolbar" class="template-layout" layout="column" flex>\n    <md-toolbar id="toolbar" class="md-menu-toolbar md-whiteframe-1dp" ui-view="toolbar"></md-toolbar>\n    <md-content id="content" class="animate-slide-up md-hue-2" ui-view="content" flex></md-content>\n\n    <md-sidenav id="quick-panel" class="md-sidenav-right md-whiteframe-4dp" md-component-id="quick-panel" ms-scroll ui-view="quickPanel"></md-sidenav>\n</div>'),e.put("app/core/layouts/horizontal-navigation.html",'<div id="layout-horizontal-navigation" class="template-layout" layout="column" flex>\n\n    <div id="toolbar-navigation-container" class="md-whiteframe-1dp" layout="column" layout-align="space-between start">\n        <md-toolbar id="toolbar" class="md-menu-toolbar md-whiteframe-1dp" ui-view="toolbar"></md-toolbar>\n        <div id="horizontal-navigation" ui-view="navigation" layout="row" layout-align="start end" flex></div>\n    </div>\n\n    <div id="content-container" flex layout="column">\n        <md-content id="content" class="animate-slide-up md-hue-2" ms-scroll ui-view="content" flex></md-content>\n    </div>\n\n    <md-sidenav id="quick-panel" class="md-sidenav-right md-whiteframe-4dp" md-component-id="quick-panel" ms-scroll ui-view="quickPanel"></md-sidenav>\n\n</div>'),e.put("app/core/layouts/vertical-navigation-fullwidth-toolbar-2.html",'<div id="layout-vertical-navigation-fullwidth-toolbar-2" class="template-layout" layout="column" flex>\n\n    <md-toolbar id="toolbar" class="md-menu-toolbar md-whiteframe-1dp md-accent" ui-view="toolbar"></md-toolbar>\n\n    <div id="main-container" layout="row" flex>\n        <md-sidenav id="vertical-navigation" class="md-primary-bg" md-is-locked-open="$mdMedia(\'gt-sm\')" md-component-id="navigation" ms-scroll ui-view="navigation"></md-sidenav>\n\n        <div id="content-container" flex layout="column">\n            <md-content id="content" class="animate-slide-up md-hue-2" ms-scroll ui-view="content" flex></md-content>\n        </div>\n\n        <md-sidenav id="quick-panel" class="md-sidenav-right md-whiteframe-4dp" md-component-id="quick-panel" ms-scroll ui-view="quickPanel"></md-sidenav>\n    </div>\n\n\n</div>'),e.put("app/core/layouts/vertical-navigation-fullwidth-toolbar.html",'<div id="layout-vertical-navigation-fullwidth-toolbar" class="template-layout" layout="column" flex>\n\n    <md-toolbar id="toolbar" class="md-menu-toolbar md-whiteframe-1dp md-accent" ui-view="toolbar"></md-toolbar>\n\n    <div id="main-container" layout="row" flex>\n        <md-sidenav id="vertical-navigation" class="md-primary-bg" md-is-locked-open="$mdMedia(\'gt-sm\')" md-component-id="navigation" ms-scroll ui-view="navigation"></md-sidenav>\n\n        <div id="content-container" flex layout="column">\n            <md-content id="content" class="animate-slide-up md-hue-2" ms-scroll ui-view="content" flex></md-content>\n        </div>\n\n        <md-sidenav id="quick-panel" class="md-sidenav-right md-whiteframe-4dp" md-component-id="quick-panel" ms-scroll ui-view="quickPanel"></md-sidenav>\n    </div>\n\n\n</div>'),e.put("app/core/layouts/vertical-navigation.html",'<div id="header" ui-view="header"></div>\n\n<div id="layout-vertical-navigation" class="template-layout" layout="row" flex>\n\n    <md-sidenav id="vertical-navigation" class="md-primary-bg" md-is-locked-open="$mdMedia(\'gt-sm\')" md-component-id="navigation" ms-scroll ui-view="navigation" ng-if="!vm.isAgent()"></md-sidenav>\n\n    <div id="content-container" flex layout="column">\n        <md-toolbar id="toolbar" class="md-menu-toolbar md-whiteframe-1dp" ui-view="toolbar"></md-toolbar>\n\n        <md-content id="content" class="animate-slide-up md-hue-2" ms-scroll ui-view="content" flex></md-content>\n    </div>\n\n    <md-sidenav id="quick-panel" class="md-sidenav-right md-whiteframe-4dp" md-component-id="quick-panel" ms-scroll ui-view="quickPanel"></md-sidenav>\n\n</div>\n\n<div id="footer" ui-view="footer"></div>'),e.put("app/core/theme-options/theme-options.html",'<div class="ms-theme-options-button md-primary-bg" ng-click="toggleOptionsSidenav()">\n    <md-icon md-font-icon="icon-cog" class="white-text"></md-icon>\n</div>\n\n<md-sidenav md-component-id="motion-theme-options" class="md-sidenav-right">\n\n    <div class="ms-theme-options-list" layout="column">\n        <div class="theme-option layout-options">\n            <div class="option-title">Layout Style:</div>\n            <md-radio-group layout="row" layout-align="start start" layout-wrap ng-model="vm.layoutStyle" ng-change="vm.updateLayoutStyle()">\n                <md-radio-button ng-repeat="layoutStyle in vm.layoutStyles" ng-value="layoutStyle.value">\n                    <div layout="column" layout-align="center center">\n                        <img ng-src="{{layoutStyle.figure}}">\n                        <span class="text-center font-size-12 mt-8">{{layoutStyle.label}}</span>\n                    </div>\n                </md-radio-button>\n            </md-radio-group>\n        </div>\n\n        <md-divider></md-divider>\n\n        <div class="theme-option">\n            <div class="option-title">Layout Mode:</div>\n            <md-radio-group layout="row" layout-align="start center" ng-model="vm.layoutMode" ng-change="vm.updateLayoutMode()">\n                <md-radio-button ng-repeat="layoutMode in vm.layoutModes" ng-value="layoutMode.value">\n                    {{layoutMode.label}}\n                </md-radio-button>\n            </md-radio-group>\n        </div>\n\n        <md-divider></md-divider>\n\n        <div class="theme-option color-palettes">\n            <div class="option-title">Color Palette:</div>\n            <div layout="row" layout-align="start start" layout-wrap>\n                <md-button ng-repeat="(themeName, theme) in vm.themes.list" class="md-raised theme-button" layout="row" layout-align="center center" aria-label="{{themeName}}" ng-click="vm.setActiveTheme(themeName)" ng-style="{\'background-color\': theme.primary.color,\'border-color\': theme.accent.color,\'color\': theme.primary.contrast1}" ng-class="{active: vm.getActiveTheme().name === themeName}">\n                    <md-icon ng-style="{\'color\': theme.primary.contrast1}" md-font-icon="icon-palette" class="icon s32"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n</md-sidenav>'),e.put("app/errors/404/error-404.html",'<div id="error-404" layout="column" layout-align="center center">\n    <div class="content" layout="column" layout-align="center center">\n        <div class="error-code" translate="ERROR404.CODE">404</div>\n\n        <div class="message" translate="ERROR404.MESSAGE">Sorry but we couldn’t find the page you are looking for</div>\n        <ms-search-bar on-search="vm.search(query)" on-result-click="vm.searchResultClick(item)" debounce="300">Search for anything</ms-search-bar>\n\n        \x3c!-- <div class="search md-whiteframe-1dp" layout="row" layout-align="start center">\n            <md-icon md-font-icon="icon-magnify" class="icon s24"></md-icon>\n            <input ng-model="vm.search" type="text" placeholder="Search for anything" translate translate-attr-placeholder="ERROR404.SEARCH" flex>\n        </div> --\x3e\n\n        <a class="md-button md-raised md-primary back-link" href="/" translate="ERROR404.GO_BACK">Go back to dashboard</a>\n    </div>\n</div>'),e.put("app/errors/500/error-500.html",'<div id="error-500" layout="column" layout-align="center center">\n    <div ng-if="!vm.send" class="content" layout="column" layout-align="center center">\n        <div class="error-code" translate="ERROR500.CODE">500</div>\n        <div class="message" translate="ERROR500.MESSAGE">Well, you broke the internet!</div>\n        <div class="sub-message" translate="ERROR500.SUBMESSAGE">Just kidding, looks like we have an internal issue, please try again in couple minutes\n        </div>\n        <a class="md-button md-raised md-primary back-link" href="/" translate="ERROR500.GO_BACK">Go back to dashboard</a>\n        <md-button class="md-raised md-warn" ng-click="vm.sendReport()" translate="ERROR500.REPORT">Report this problem</md-button>\n    </div>\n    <pre ng-if="!vm.send">\n    {{vm.error}}\n    </pre>\n    <div ng-if="vm.send" class="content" layout="column" layout-align="center center">\n        <div class="error-code">#{{vm.code}}</div>\n        <div class="message" translate="ERROR500.JIRA_MESSAGE">Your request has been received and will be processed shortly.</div>\n        <div class="sub-message" translate="ERROR500.JIRA_SUBMESSAGE">Sorry for the inconvenience. If you have any questions or concerns, please do not hesitate to contact us.</div>\n        <a class="md-button md-raised md-primary back-link" href="/" translate="ERROR500.GO_BACK">Go back to dashboard</a>\n    </div>\n</div>'),e.put("app/footer/layouts/vertical-navigation/footer.html",'<div layout="row" layout-align="start center">\n    <ms-info-bar ng-if="!vm.cookieAlertHide" on-close="vm.cookieAlertOnClose()" class="grey-100-bg">\n        <div layout="row" layout-align="start center">\n            <span translate="FOOTER.COOKIE_LAW" flex class="text-center grey-600-fg"></span>\n        </div>\n    </ms-info-bar>\n</div>'),e.put("app/forgot/forgot.html",'<div id="forgot-password" class="flex-scrollable" layout="column" ms-scroll ng-init="vm.onInit()">\n    <div id="forgot-password-form-wrapper" layout="column" layout-align="center center">\n        <div id="forgot-password-form" class="md-whiteframe-8dp">\n\n            <img src="/api/settings/1/logo_login" alt="logo_login" class="logo_login" />\n\n            <div class="title" translate="FORGOTPASSWORD.TITLE">Recover your password</div>\n\n            <form name="forgotPasswordForm" novalidate>\n                <md-input-container class="md-block" md-no-float>\n                    <input type="email" name="email" ng-model="vm.form.email" placeholder="Email address" translate translate-attr-placeholder="FORGOTPASSWORD.EMAIL_ADRESS" ng-pattern="/^.+@.+\\..+$/" required>\n                    <div ng-messages="forgotPasswordForm.email.$error" role="alert" multiple>\n                        <div ng-message="required">\n                            <span translate="FORGOTPASSWORD.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                        </div>\n                        <div ng-message="pattern">\n                            <span translate="FORGOTPASSWORD.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                        </div>\n                    </div>\n                </md-input-container>\n\n                <md-button type="button" ng-click="vm.forgotPassword()" class="md-raised md-accent submit-button" aria-label="RESET MY PASSWORD" ng-disabled="forgotPasswordForm.$invalid || forgotPasswordForm.$pristine" translate="FORGOTPASSWORD.SEND_RESET_LINK" translate-attr-aria-label="FORGOTPASSWORD.SEND_RESET_LINK">\n                    SEND RESET LINK\n                </md-button>\n            </form>\n\n            <div class="login" layout="row" layout-align="center center">\n                <a class="link" ui-sref="app.login" translate="FORGOTPASSWORD.GO_BACK">Go back to login</a>\n            </div>\n        </div>\n    </div>\n</div>'),e.put("app/header/layouts/vertical-navigation/header.html",'\x3c!-- <div layout="row" layout-align="start center">\n    <ms-info-bar ng-if="vm.currentUser.role == \'admin\' && !vm.newsAlertHide" on-close="vm.newsAlertOnClose()" class="green-600-bg white-fg">\n        <div layout="row" layout-align="start center">\n            <md-icon md-font-icon="icon-message-text-outline" class="icon margin-right-10 s20"></md-icon>\n            <div flex hide-xs translate="HEADER.NEWS"></div>\n        </div>\n    </ms-info-bar>\n</div> --\x3e'),e.put("app/login/login.html",'<div id="login" class="flex-scrollable" layout="column" ms-scroll>\n    <div id="login-form-wrapper" layout="column" layout-align="center center">\n        <div id="login-form" class="md-whiteframe-8dp">\n\n            <img src="/api/settings/1/logo_login" alt="logo_login" class="logo_login" />\n            \x3c!-- <img src="assets/images/logos/login.png" alt="motion_logo_login" /> --\x3e\n\n            <div class="md-subhead padding-top-45" translate="LOGIN.TITLE">Log in to your account</div>\n\n            <form name="loginForm" novalidate ng-if="!vm.progressLogin">\n                <md-input-container class="md-block" md-no-float>\n                    <input type="input" name="name" ng-model="vm.form.name" autofocus aria-label="username" translate translate-attr-placeholder="LOGIN.USERNAME" required>\n                    <div ng-messages="loginForm.name.$error" role="alert" multiple>\n                        <div ng-message="required">\n                            <span translate="LOGIN.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n\n                <md-input-container class="md-block" md-no-float>\n                    <input type="password" name="password" ng-model="vm.form.password" aria-label="password" translate translate-attr-placeholder="LOGIN.PASSWORD" required>\n                    <div ng-messages="loginForm.password.$error" role="alert" multiple>\n                        <div ng-message="required">\n                            <span translate="LOGIN.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n\n                <div class="remember-forgot-password" layout="row" layout-xs="column" layout-align="end center">\n                    \x3c!-- <md-checkbox class="remember-me" ng-model="data.cb1" aria-label="Remember Me">\n                        <span translate="LOGIN.REMEMBER_ME">Remember Me</span>\n                    </md-checkbox> --\x3e\n                    <a ui-sref="app.forgot" class="forgot-password md-accent-color" style="cursor:pointer;" translate="LOGIN.FORGOT_PASSWORD">Forgot Password?</a>\n                </div>\n\n                <b layout="row" layout-align="center center" class="md-padding" ng-if="vm.message">\n                    <font color="red">{{vm.message}}</font>\n                </b>\n                <md-button type="submit" ng-click="vm.login()" class="md-raised md-accent submit-button" aria-label="LOGIN" translate="LOGIN.LOG_IN" translate-attr-aria-label="LOGIN.LOG_IN">\n                    LOG IN\n                </md-button>\n            </form>\n\n            <md-progress-circular ng-if="vm.progressLogin" md-diameter="96"></md-progress-circular>\n\n            <div class="separator">\n                <span class="text" translate="LOGIN.OR">OR</span>\n            </div>\n\n            <md-button ng-click="vm.loginOauth(\'google\')" class="md-raised google">\n                <div layout="row" layout-align="center center">\n                    <span>\n                        <md-icon md-font-icon="fab fa-google" class="s16"></md-icon>\n                        <span translate="LOGIN.WITH_GOOGLE">Log in with Google</span>\n                    </span>\n                </div>\n            </md-button>\n        </div>\n    </div>\n</div>'),e.put("app/main/apps/analytics/views/extractedReports/create/dialog.html",'<md-dialog class="extractedReport-dialog" aria-label="New ExtractedReport">\n    <form name="extractedReportForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.REPORTNAME">ReportName</label>\n                <input type="" name="name" ng-model="vm.extractedReport.name" ng-required="true" autofocus>\n\n                <div ng-messages="extractedReportForm[\'name\'].$error" ng-show="extractedReportForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.REPORTNAME_REQUIRED">ReportName field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.NAME">Name</label>\n                <input type="" name="basename" ng-model="vm.extractedReport.basename" ng-required="true">\n\n                <div ng-messages="extractedReportForm[\'basename\'].$error" ng-show="extractedReportForm[\'basename\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newExtractedReport" ng-click="vm.saveExtractedReport()" class="send-button md-accent md-raised" ng-disabled="extractedReportForm.$invalid || extractedReportForm.$pristine" aria-label="SAVE" translate="ANALYTICS.SAVE" translate-attr-aria-label="ANALYTICS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newExtractedReport" ng-click="vm.addNewExtractedReport()" class="send-button md-accent md-raised" ng-disabled="extractedReportForm.$invalid" aria-label="ADD" translate="ANALYTICS.ADD_EXTRACTEDREPORT" translate-attr-aria-label="ANALYTICS.ADD_EXTRACTEDREPORT">\n                    ADD EXTRACTEDREPORT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newExtractedReport" ng-click="vm.deleteExtractedReport($event)" aria-label="DELETE" translate translate-attr-aria-label="ANALYTICS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="ANALYTICS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/extractedReports/extractedReports.html",'<div id="extractedReports" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-chart-line" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="ANALYTICS.EXTRACTEDREPORTS">ExtractedReports</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="ANALYTICS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedExtractedReports.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedExtractedReports =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="ANALYTICS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-extractedReports-count">\n                    <span>{{vm.selectedExtractedReports.length}}</span>\n                    <span translate="ANALYTICS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="EXTRACTEDREPORTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllExtractedReports()" translate="ANALYTICS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectExtractedReports()" translate="ANALYTICS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedExtractedReports" csv-label="true" filename="extractedReports.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedExtractedReports($event)" aria-label="delete selected" translate translate-attr-label="EXTRACTEDREPORTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- EXTRACTEDREPORT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedExtractedReports" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getExtractedReports">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'ANALYTICS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'ANALYTICS.REPORTNAME\' | translate }}</th>\n                                <th md-column md-order-by="basename">{{ \'ANALYTICS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="type">{{ \'ANALYTICS.TYPE\' | translate }}</th>\n                                <th md-column md-order-by="startDate">{{ \'ANALYTICS.DATE_RANGE_FROM\' | translate }}</th>\n                                <th md-column md-order-by="endDate">{{ \'ANALYTICS.DATE_RANGE_TO\' | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ \'ANALYTICS.GENERATED_AT\' | translate }}</th>\n                                <th md-column md-order-by="status">{{ \'ANALYTICS.STATUS\' | translate }}</th>\n                                <th md-column md-order-by="output">{{ \'ANALYTICS.OUTPUT\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.extractedReports.rows.length">\n                                <td md-cell colspan="10">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="ANALYTICS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="extractedReport" md-select-id="id" ng-repeat="extractedReport in vm.extractedReports.rows">\n                                <td md-cell ng-if="extractedReport.userpic"><img class="avatar" alt="{{extractedReport.name}}" ng-src="api/users/{{extractedReport.id}}/avatar" /></td>\n                                <td md-cell ng-if="!extractedReport.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{extractedReport.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="id ">{{extractedReport.id}}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="name ">{{extractedReport.name}}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="basename ">{{extractedReport.basename}}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="type ">{{extractedReport.type}}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="startDate ">{{extractedReport.startDate | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="endDate ">{{extractedReport.endDate | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="createdAt ">{{extractedReport.createdAt | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="status ">{{extractedReport.status}}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="output ">{{extractedReport.output}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="ANALYTICS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(extractedReport, $event    )" translate="ANALYTICS.EDIT_EXTRACTEDREPORT">\n                                                    Edit ExtractedReport\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.downloadfile2(extractedReport, $event  , \'analytics/extracted_reports\'   )" translate="ANALYTICS.DOWNLOAD_EXTRACTEDREPORT">\n                                                    Download ExtractedReport\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(extractedReport, $event    )" translate="ANALYTICS.DELETE_EXTRACTEDREPORT">\n                                                    Delete ExtractedReport\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'ANALYTICS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'ANALYTICS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'ANALYTICS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.extractedReports.count}}" md-on-paginate="vm.getExtractedReports" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / EXTRACTEDREPORT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>'),e.put("app/main/apps/analytics/views/metrics/create/dialog.html",'<md-dialog class="metric-dialog" aria-label="New Metric">\n    <form name="metricForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.metric.name" ng-required="true" autofocus>\n\n                <div ng-messages="metricForm[\'name\'].$error" ng-show="metricForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.TABLE">Table</label>\n                <md-select name="table" ng-model="vm.metric.table" required>\n                    <md-option ng-value="\'report_agent\'">Agent Report</md-option>\n                    <md-option ng-value="\'report_call\'">Call Report</md-option>\n                    <md-option ng-value="\'cm_contacts\'">Contacts</md-option>\n                    <md-option ng-value="\'report_square\'">CSquare Report</md-option>\n                    <md-option ng-value="\'report_square_details\'">CSquare Details Report</md-option>\n                    <md-option ng-value="\'cm_hopper\'">Dialer Hopper Processing</md-option>\n                    <md-option ng-value="\'cm_hopper_history\'">Dialer Hopper Logs</md-option>\n                    <md-option ng-value="\'cm_hopper_final\'">Dialer Hopper Final</md-option>\n                    <md-option ng-value="\'report_integration\'">Integration Report</md-option>\n                    <md-option ng-value="\'report_jscripty_sessions\'">Jscripty Sessions</md-option>\n                    <md-option ng-value="\'report_jscripty_questions\'">Jscripty Questions</md-option>\n                    <md-option ng-value="\'report_jscripty_answers\'">Jscripty Answers</md-option>\n                    <md-option ng-value="\'cm_lists\'">Lists</md-option>\n                    <md-option ng-value="\'report_member\'">Member Report</md-option>\n                    <md-option ng-value="\'report_queue\'">Queue Report</md-option>\n                    <md-option ng-value="\'users\'">Users</md-option>\n                    <md-option ng-value="\'voice_recordings\'">Voice Recordings</md-option>\n                </md-select>\n                <div ng-messages="metricForm[\'table\'].$error" ng-show="metricForm[\'table\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.TABLE_REQUIRED">Table field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.METRIC">Metric</label>\n                <input type="text" name="metric" ng-model="vm.metric.metric" ng-required="true">\n\n                <div ng-messages="metricForm[\'metric\'].$error" ng-show="metricForm[\'metric\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.METRIC_REQUIRED">Metric field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.metric.description">\n\n                <div ng-messages="metricForm[\'description\'].$error" ng-show="metricForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMetric" ng-click="vm.saveMetric()" class="send-button md-accent md-raised" ng-disabled="metricForm.$invalid || metricForm.$pristine" aria-label="SAVE" translate="ANALYTICS.SAVE" translate-attr-aria-label="ANALYTICS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMetric" ng-click="vm.addNewMetric()" class="send-button md-accent md-raised" ng-disabled="metricForm.$invalid" aria-label="ADD" translate="ANALYTICS.ADD_METRIC" translate-attr-aria-label="ANALYTICS.ADD_METRIC">\n                    ADD METRIC\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMetric" ng-click="vm.deleteMetric($event)" aria-label="DELETE" translate translate-attr-aria-label="ANALYTICS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="ANALYTICS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/metrics/metrics.html",'<div id="metrics" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-chart-line" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="ANALYTICS.METRICS">Metrics</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="ANALYTICS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedMetrics.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedMetrics =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="ANALYTICS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-metrics-count">\n                    <span>{{vm.selectedMetrics.length}}</span>\n                    <span translate="ANALYTICS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="METRICS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllMetrics()" translate="ANALYTICS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectMetrics()" translate="ANALYTICS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedMetrics" csv-label="true" filename="metrics.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedMetrics($event)" aria-label="delete selected" translate translate-attr-label="METRICS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- METRIC TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedMetrics" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMetrics">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'ANALYTICS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'ANALYTICS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="table">{{ \'ANALYTICS.TABLE\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'ANALYTICS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.metrics.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="ANALYTICS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="metric" md-select-id="id" ng-repeat="metric in vm.metrics.rows">\n                                <td md-cell ng-if="metric.userpic"><img class="avatar" alt="{{metric.name}}" ng-src="api/users/{{metric.id}}/avatar" /></td>\n                                <td md-cell ng-if="!metric.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{metric.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditMetric($event, metric)" md-cell class="id ">{{metric.id}}</td>\n                                <td ng-click="vm.createOrEditMetric($event, metric)" md-cell class="name ">{{metric.name}}</td>\n                                <td ng-click="vm.createOrEditMetric($event, metric)" md-cell class="table ">{{ vm.arraytable[metric.table].option }}</td>\n                                <td ng-click="vm.createOrEditMetric($event, metric)" md-cell class="description ">{{metric.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="ANALYTICS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(metric, $event    )" translate="ANALYTICS.EDIT_METRIC">\n                                                    Edit Metric\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(metric, $event    )" translate="ANALYTICS.DELETE_METRIC">\n                                                    Delete Metric\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'ANALYTICS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'ANALYTICS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'ANALYTICS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.metrics.count}}" md-on-paginate="vm.getMetrics" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / METRIC TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD METRIC BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-metric-button" ng-click="vm.createOrEditMetric($event)" aria-label="add metric" translate translate-attr-aria-label="ANALYTICS.ADD_METRIC">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD METRIC BUTTON --\x3e\n</div>'),e.put("app/main/apps/analytics/views/reports/copy/dialog.html",'<md-dialog class="report-dialog" aria-label="Run Report">\n    <form name="reportForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="ANALYTICS.COPY_REPORT">Copy Report</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.NAME">Name</label>\n                <input name="name" ng-model="vm.report.name" required md-autofocus>\n                <div ng-messages="reportForm.name.$error" ng-show="reportForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="md-block">\n                <label translate="ANALYTICS.SELECT_NODE">Select Node</label>\n                <div js-tree="vm.treeCustomConfig" tree-events-obj="vm.treeCustomEvents" ng-model="vm.treeCustomData" tree="vm.treeCustomInstance"></div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.copyReport()" class="send-button md-accent md-raised" ng-disabled="!vm.currentNode" aria-label="COPY" translate="ANALYTICS.COPY_REPORT" translate-attr-aria-label="ANALYTICS.COPY_REPORT">\n                    COPY REPORT\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/reports/create/dialog.html",'<md-dialog class="report-dialog" aria-label="New Report">\n    <form name="reportForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.report.name" required md-autofocus>\n                <div ng-messages="reportForm.name.$error" ng-show="reportForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.newReport">\n                <label translate="ANALYTICS.TABLE">Table</label>\n                <md-select ng-model="vm.report.table" required>\n                    <md-option ng-repeat="table in vm.tables | orderBy:\'name\'" ng-value="table.name">{{table.name}}</md-option>\n                </md-select>\n                <div ng-messages="reportForm.table.$error" ng-show="reportForm.table.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.TABLE_REQUIRED">Table field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.report.description">\n                <div ng-messages="reportForm.description.$error" ng-show="reportForm.description.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-autocomplete ng-if="vm.newReport" md-selected-item="vm.selectedItem" md-search-text="vm.searchText" md-items="table in vm.tables | filter:vm.searchText" md-item-text="table.name" md-min-length="0" md-selected-item-change="vm.selectedTableChange(table)" placeholder="Select the table to Join">\n                <md-item-template>\n                    <span md-highlight-text="vm.searchText" md-highlight-flags="^i">{{table.name}}</span>\n                </md-item-template>\n                <md-not-found>\n                    No states matching "{{vm.searchText}}" were found.\n                </md-not-found>\n            </md-autocomplete>\n\n            <md-card ng-if="vm.newReport" md-theme="default" md-theme-watch ng-repeat="table in vm.joinTables">\n                <md-card-title>\n                    <md-card-title-text layout="row">\n                        <div layout="row" flex="50">\n                            <span class="md-subhead">{{table.name}}</span>\n                        </div>\n                        <div layout="row" layout-align="end center" flex>\n                            <md-button class="md-icon-button" ng-click="vm.removeJoin($index)">\n                                <md-icon md-font-icon="icon-delete" aria-label="alert error"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-card-title-text>\n                </md-card-title>\n                <md-card-content>\n                    <md-select ng-model="table.parentKey" placeholder="Select the parent key" ng-init="table.parentFields = []; vm.getFields(table, \'parentFields\', vm.report.table)" required>\n                        <md-option ng-repeat="field in table.parentFields" ng-value="field">{{field}}</md-option>\n                    </md-select>\n                    <md-select ng-model="table.foreignKey" placeholder="Select the foreign key" ng-init="table.foreignFields = []; vm.getFields(table, \'foreignFields\', table.name)" required>\n                        <md-option ng-repeat="field in table.foreignFields" ng-value="field">{{field}}</md-option>\n                    </md-select>\n                    <md-select ng-model="table.type" placeholder="Select join type" required>\n                        <md-option ng-repeat="join in vm.joinTypes" ng-value="join.key">{{join.value}}</md-option>\n                    </md-select>\n                </md-card-content>\n            </md-card>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-if="!vm.newReport" ng-click="vm.saveReport()" class="send-button md-accent md-raised" ng-disabled="reportForm.$invalid || reportForm.$pristine" aria-label="SAVE" translate="ANALYTICS.SAVE" translate-attr-aria-label="ANALYTICS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newReport" ng-click="vm.addNewReport()" class="send-button md-accent md-raised" ng-disabled="reportForm.$invalid || reportForm.$pristine" aria-label="ADD" translate="ANALYTICS.ADD_REPORT" translate-attr-aria-label="ANALYTICS.ADD_REPORT">\n                    ADD REPORT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newReport" ng-click="vm.deleteReport($event)" aria-label="DELETE" translate translate-attr-aria-label="ANALYTICS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="ANALYTICS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/reports/edit/condition/group.html",'<md-card class="padding-horizontal-15 padding-top-15">\n    <div layout="row" ng-if="vm_rc.crudPermissions.canEdit">\n        <md-input-container class="md-block" flex>\n            <label translate="ANALYTICS.OPERATOR">Operator</label>\n            <md-select ng-model="group.operator" required>\n                <md-option value="AND">AND</md-option>\n                <md-option value="OR">OR</md-option>\n            </md-select>\n            <div ng-messages="conditionsForm.operator.$error" ng-show="conditionsForm.operator.$touched" role="alert">\n                <div ng-message="required">\n                    <span translate="ANALYTICS.ERRORS.OPERATOR_REQUIRED">Operator field is required</span>\n                </div>\n            </div>\n        </md-input-container>\n        <md-input-container class="md-block">\n            <md-button class="md-raised md-accent" ng-click="vm_rc.addCondition(group.rules)">\n                <md-icon md-font-icon="icon-plus"></md-icon> {{\'ANALYTICS.CONDITION\' | translate}}\n            </md-button>\n        </md-input-container>\n        <md-input-container class="md-block">\n            <md-button class="md-raised md-accent" ng-click="vm_rc.addGroup(group.rules)">\n                <md-icon md-font-icon="icon-plus"></md-icon> {{\'ANALYTICS.GROUP\' | translate}}\n            </md-button>\n        </md-input-container>\n        <div flex></div>\n        <md-input-container class="md-block" ng-if="parent">\n            <md-button class="md-raised md-warn" ng-click="vm_rc.deleteConfirm(parent, index, $event)">\n                <md-icon md-font-icon="icon-delete"></md-icon> {{\'ANALYTICS.GROUP\' | translate}}\n            </md-button>\n        </md-input-container>\n    </div>\n    <div layout="column" ng-repeat="rule in group.rules track by $index">\n        <div layout="row" ng-if="!rule.group">\n            <md-input-container class="md-block" flex>\n                <label translate="ANALYTICS.COLUMN">COLUMN</label>\n                <md-select name="field" ng-model="rule.field" ng-disabled="!vm_rc.crudPermissions.canEdit" required>\n                    <md-optgroup label="{{vm_rc.report.table}}">\n                        <md-option ng-repeat="column in vm_rc.columns" value="{{vm_rc.report.table}}.{{column}}">{{column}}</md-option>\n                    </md-optgroup>\n                    <md-optgroup ng-if="vm_rc.report.joins" ng-repeat="join in vm_rc.report.joins" label="{{join.foreignTable}}">\n                        <md-option ng-repeat="field in join.foreignTableFields" value="{{join.foreignTable}}.{{field}}">{{field}}</md-option>\n                    </md-optgroup>\n                </md-select>\n                <div ng-messages="conditionsForm.field.$error" ng-show="conditionsForm.field.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.COLUMN_REQUIRED">Column field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" flex>\n                <label translate="ANALYTICS.CONDITION">CONDITION</label>\n                <md-select name="condition" ng-model="rule.condition" ng-disabled="!vm_rc.crudPermissions.canEdit" required>\n                    <md-option ng-repeat="condition in vm_rc.conditions" ng-value="condition">{{condition}}</md-option>\n                </md-select>\n                <div ng-messages="conditionsForm.condition.$error" ng-show="conditionsForm.condition.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.CONDITION_REQUIRED">Condition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm_rc.isValueByCondition(rule.condition)" class="md-block" flex>\n                <label translate="ANALYTICS.VALUE">VALUE</label>\n                <input type="text" name="value" ng-model="rule.value" ng-disabled="!vm_rc.crudPermissions.canEdit" required md-autofocus>\n                <div ng-messages="conditionsForm.value.$error" ng-show="conditionsForm.value.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm_rc.crudPermissions.canEdit" flex>\n                <md-button class="md-fab md-mini md-warn" aria-label="Delete row" ng-click="vm_rc.deleteConfirm(group.rules, $index, $event)">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </md-input-container>\n        </div>\n        <div ng-if="rule.group" ng-include="\'app/main/apps/analytics/views/reports/edit/condition/group.html\'" ng-init="parent=group.rules;index=$index;group=rule.group"></div>\n    </div>\n</md-card>'),e.put("app/main/apps/analytics/views/reports/edit/field/dialog.html",'<md-dialog class="reportField-dialog" aria-label="New Report Field">\n    <form name="reportFieldForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{vm.title}}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <pre></pre>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.reportField.type" ng-change="vm.reportField.field = undefined" required>\n                    <md-option value="column">Select a column</md-option>\n                    <md-option value="metric">Select an existing metric</md-option>\n                    <md-option value="custom">Write a custom metric</md-option>\n                </md-select>\n                <div ng-messages="reportForm.type.$error" ng-show="reportForm.type.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div ng-switch on="vm.reportField.type">\n                <md-input-container class="md-block" ng-switch-when="column">\n                    <label translate="ANALYTICS.COLUMN">Column Name</label>\n                    <md-select name="column" ng-model="vm.reportField.field" required>\n                        <md-optgroup label="{{vm.report.table}}">\n                            <md-option ng-repeat="column in vm.columns" value="{{vm.report.table}}.{{column}}">{{column}}</md-option>\n                            \x3c!-- <md-option ng-repeat="column in vm.columns" ng-value="">{{column}}</md-option> --\x3e\n                        </md-optgroup>\n                        <md-optgroup ng-if="vm.report.joins" ng-repeat="join in vm.report.joins" label="{{join.foreignTable}}">\n                            <md-option ng-repeat="field in join.foreignTableFields" value="{{join.foreignTable}}.{{field}}">{{field}}</md-option>\n                        </md-optgroup>\n                    </md-select>\n                    <div ng-messages="reportForm.column.$error" ng-show="reportForm.column.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="ANALYTICS.ERRORS.COLUMN_REQUIRED">Column field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n                <md-input-container class="md-block" ng-switch-when="metric">\n                    <label translate="ANALYTICS.METRIC_NAME">Metric Name</label>\n                    <md-select name="metric" ng-model="vm.reportField.MetricId" required>\n                        <md-option ng-repeat="metric in vm.metrics" ng-value="metric.id">{{metric.name}}</md-option>\n                    </md-select>\n                    <div ng-messages="reportForm.metric.$error" ng-show="reportForm.metric.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="ANALYTICS.ERRORS.METRIC_REQUIRED">Metric field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n                <md-input-container class="md-block" ng-switch-when="custom">\n                    <label translate="ANALYTICS.CUSTOM_METRIC">Custom Metric</label>\n                    <input type="text" name="field" ng-model="vm.reportField.field" required md-autofocus>\n                    <div ng-messages="reportFieldForm.field.$error" ng-show="reportFieldForm.field.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="ANALYTICS.ERRORS.CUSTOM_METRIC_REQUIRED">Custom Metric field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.ALIAS">Alias</label>\n                <input type="text" name="alias" ng-model="vm.reportField.alias" ng-required="vm.reportField.type === \'custom\' || vm.reportField.type === \'metric\'">\n                <div ng-messages="reportFieldForm.alias.$error" ng-show="reportFieldForm.alias.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.ALIAS_REQUIRED">Alias field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.reportField.type !== \'metric\'">\n                <label translate="ANALYTICS.FUNCTION">Function</label>\n                <md-select name="function" ng-model="vm.reportField.function">\n                    <md-option ng-value="null">No Function</md-option>\n                    <md-option ng-repeat="function in vm.sqlUtil.getFunctions" ng-value="function.value">{{function.value}}</md-option>\n                </md-select>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.reportField.type !== \'metric\'">\n                <label translate="ANALYTICS.FORMAT">Format</label>\n                <md-select name="format" ng-model="vm.reportField.format">\n                    <md-option ng-value="null">No Format</md-option>\n                    <md-option ng-repeat="format in vm.sqlUtil.getFormats" ng-value="format.value">{{format.value}}</md-option>\n                </md-select>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.GROUP_BY">Group By</label>\n                <md-select name="groupBy" ng-model="vm.reportField.groupBy">\n                    <md-option ng-repeat="gb in vm.sqlUtil.getGroupBy" ng-value="gb.value">{{gb.value ? \'Yes\' : \'No\'}}</md-option>\n                </md-select>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.ORDER_BY">Order By</label>\n                <md-select name="orderBy" ng-model="vm.reportField.orderBy">\n                    <md-option ng-value="null">No Order</md-option>\n                    <md-option ng-repeat="ob in vm.sqlUtil.getOrderBy" ng-value="ob.value">{{ob.value}}</md-option>\n                </md-select>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-if="!vm.newReportField" ng-click="vm.saveReportField()" class="send-button md-accent md-raised" ng-disabled="reportFieldForm.$invalid || reportFieldForm.$pristine" aria-label="SAVE" translate="ANALYTICS.SAVE" translate-attr-aria-label="ANALYTICS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newReportField" ng-click="vm.addNewReportField()" class="send-button md-accent md-raised" ng-disabled="reportFieldForm.$invalid || reportFieldForm.$pristine" aria-label="ADD" translate="ANALYTICS.ADD_REPORTFIELD" translate-attr-aria-label="ANALYTICS.ADD_REPORTFIELD">\n                    ADD REPORT FIELD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newReportField" ng-click="vm.deleteReportField($event)" aria-label="DELETE" translate translate-attr-aria-label="ANALYTICS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="ANALYTICS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/reports/edit/view.html",'<div id="analytics-report" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-reports-button md-icon-button" aria-label="Go to reports" ng-click="vm.gotoReports()" translate translate-attr-aria-label="ANALYTICS.GO_TO_ANALYTICSQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="report-image" hide-xs>\n                    <img ng-src="assets/images/business/reports.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.report.id}} {{vm.report.name}}\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="ANALYTICS.CREATED_AT"></span> <span>{{vm.report.createdAt | date:\'medium\'}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span>{{vm.report.description}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div>\n            <md-button type="submit" ng-click="vm.saveReport()" ng-disabled="generalForm.$pristine && conditionsForm.$pristine" class="send-button md-accent md-raised" translate="ANALYTICS.SAVE" translate-attr-aria-label="ANALYTICS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="ANALYTICS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="report-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="ANALYTICS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="ANALYTICS.NAME">Name</label>\n                                <input type="text" name="name" ng-disabled="!vm.crudPermissions.canEdit" ng-model="vm.report.name" required md-autofocus>\n                                <div ng-messages="generalForm.name.$error" ng-show="generalForm.name.$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="ANALYTICS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="ANALYTICS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-disabled="!vm.crudPermissions.canEdit" ng-model="vm.report.description">\n                                <div ng-messages="generalForm.description.$error" ng-show="generalForm.description.$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="ANALYTICS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="ANALYTICS.FIELDS">FIELDS</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="report-detail-form-container fields md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ReportFieldsController as vm_rf" ng-init="vm_rf.init(vm.report, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_rf.selectedReportFields.length">\n                                <div class="md-toolbar-tools">\n                                    <div layout="row" layout-align="start center">\n                                        <div layout="column" layout-align="start start">\n                                            <div class="md-subhead" translate="ANALYTICS.FIELDS">\n                                                <span translate="ANALYTICS.FIELDS">FIELDS</span>\n                                            </div>\n                                            <div class="h4">\n                                                <span translate="ANALYTICS.TABLE">TABLE</span> <span class="text-bold">{{vm.report.table}}</span>\n                                            </div>\n                                            <div class="h4" ng-if="vm.report.joins && vm.report.joins.length && vm.isArray(vm.report.joins)">\n                                                <span>Join</span> <span class="text-bold">{{ vm.mapArray(vm.report.joins, \'foreignTable\') }}</span>\n                                            </div>\n                                        </div>\n                                    </div>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_rf.query.filter = query" on-collapse="vm_rf.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-if="vm_rf.crudPermissions.canEdit" ng-click="vm_rf.createOrEditReportField($event)" aria-label="add field" translate translate-attr-label="ANALYTICS.ADD_FIELD">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_rf.selectedReportFields.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_rf.selectedReportFields.length}} {{vm_rf.selectedReportFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <md-button class="md-icon-button" ng-click="vm_rf.deleteSelectedReportFields($event)" aria-label="delete selected" translate translate-attr-label="ANALYTICS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select="vm_rf.crudPermissions.canDelete" multiple ng-model="vm_rf.selectedReportFields" md-progress="vm_rf.promise">\n                                    <thead md-head md-order="vm_rf.query.sort" md-on-reorder="vm_rf.getReportFields">\n                                        <tr md-row>\n                                            <th md-column width="10px" ng-if="vm_rf.crudPermissions.canEdit">\n                                                <md-icon md-font-icon="icon-drag-vertical"></md-icon>\n                                            </th>\n                                            <th md-column>Type</th>\n                                            <th md-column>Column or Metric</th>\n                                            <th md-column>Alias</th>\n                                            <th md-column>Function</th>\n                                            <th md-column>Format</th>\n                                            <th md-column>Group By</th>\n                                            <th md-column>Order By</th>\n                                            <th md-column width="10px" ng-if="vm_rf.crudPermissions.canEdit"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body ng-sortable="vm_rf.sortableTable">\n                                        <tr md-row md-select="reportField" md-select-id="id" ng-repeat="reportField in vm_rf.reportFields.rows">\n                                            <td md-cell class="handle" ng-if="vm_rf.crudPermissions.canEdit">\n                                                <md-icon md-font-icon="icon-drag-vertical" class="s16">\n                                            </td>\n                                            <td md-cell>\n                                                <div ng-if="reportField.MetricId && !reportField.custom" ng-click="vm_rf.createOrEditReportField($event, reportField)" class="icon icon-shape-plus s16"></div>\n                                                <div ng-if="!reportField.MetricId && reportField.custom" ng-click="vm_rf.createOrEditReportField($event, reportField)" class="icon icon-pencil-box-outline s16"></div>\n                                                <div ng-if="!reportField.MetricId && !reportField.custom" ng-click="vm_rf.createOrEditReportField($event, reportField)" class="icon icon-view-column s16"></div>\n                                            </td>\n                                            <td md-cell ng-click="vm_rf.createOrEditReportField($event, reportField)">{{reportField.MetricId ? vm_rf.getMetricName(reportField.MetricId) : reportField.field}}</td>\n                                            <td md-cell ng-click="vm_rf.createOrEditReportField($event, reportField)">{{reportField.alias}}</td>\n                                            <td md-cell ng-click="vm_rf.createOrEditReportField($event, reportField)"><span class="text-boxed blue-bg white-fg" ng-if="reportField.function">{{reportField.function}}</span><span ng-if="!reportField.function">--</span></td>\n                                            <td md-cell ng-click="vm_rf.createOrEditReportField($event, reportField)"><span class="text-boxed blue-bg white-fg" ng-if="reportField.format">{{reportField.format}}</span><span ng-if="!reportField.format">--</span></td>\n                                            <td md-cell ng-click="vm_rf.createOrEditReportField($event, reportField)"><span class="text-boxed blue-bg white-fg" ng-if="reportField.groupBy">YES</span><span ng-if="!reportField.groupBy">--</span></td>\n                                            <td md-cell ng-click="vm_rf.createOrEditReportField($event, reportField)"><span class="text-boxed blue-bg white-fg" ng-if="reportField.orderBy">{{reportField.orderBy}}</span><span ng-if="!reportField.orderBy">--</span></td>\n                                            <td md-cell class="actions" ng-if="vm_rf.crudPermissions.canEdit">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="ANALYTICS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_rf.createOrEditReportField($event, reportField)" translate="ANALYTICS.EDIT_REPORTFIELD">\n                                                                Edit Field\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_rf.deleteConfirm(reportField, $event)" translate="ANALYTICS.DELETE_REPORTFIELD">\n                                                                Delete Field\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                        </div>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="ANALYTICS.CONDITIONS">CONDITIONS</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="report-detail-form-container conditions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ReportConditionsController as vm_rc" ng-init="vm_rc.init(vm.report, vm.crudPermissions)">\n                            <div class="pb-16" layout="row" layout-align="start center">\n                                <div class="h2 secondary-text" translate="ANALYTICS.CONDITION">CONDITION</div>\n                            </div>\n                            <form name="conditionsForm" novalidate>\n                                <div ng-if="vm_rc.report.condition.group" ng-include="\'app/main/apps/analytics/views/reports/edit/condition/group.html\'" ng-init="group=vm_rc.report.condition.group"></div>\n                            </form>\n                        </div>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab md-on-select="vm.previewReport()">\n                <md-tab-label>\n                    <span translate="ANALYTICS.PREVIEW">PREVIEW</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="report-detail-form-container result md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div ng-if="vm.error" class="h2 secondary-text" translate="ANALYTICS.ERROR">ERROR</div>\n                            <div ng-if="!vm.error" class="h2 secondary-text" translate="ANALYTICS.LIMITED_RESULT">LIMITED RESULT</div>\n                        </div>\n                        <dl ng-if="vm.error">\n                            <dt class="text-bold" translate="ANALYTICS.QUERY_ERROR">Query Error</dt>\n                            <dd>{{vm.error.sql}}</dd>\n                            <dt translate="ANALYTICS.MESSAGE">Message</dt>\n                            <dd>{{vm.error.msg}}</dd>\n                        </dl>\n                        <md-table-container ng-if="!vm.error">\n                            <table md-table>\n                                <thead md-head>\n                                    <tr md-row>\n                                        <th ng-repeat="column in vm.columns">{{column.alias || column.field}}</th>\n                                    </tr>\n                                </thead>\n                                <tbody md-body>\n                                    <tr md-row ng-repeat="row in vm.rows">\n                                        <td md-cell ng-repeat="(key, value) in row">{{ vm.valueReplacer(key, value) }}</td>\n                                    </tr>\n                                    <tr md-row ng-if="!vm.rows.length">\n                                        <td md-cell colspan="{{vm.columns.length}}"><span translate="ANALYTICS.NO_DATA">NO DATA</span></td>\n                                    </tr>\n                                </tbody>\n                            </table>\n                        </md-table-container>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab md-on-select="vm.queryReport()">\n                <md-tab-label>\n                    <span>Query</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="report-detail-form-container result md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div ng-if="vm.error" class="h2 secondary-text" translate="ANALYTICS.ERROR">ERROR</div>\n                            <div ng-if="!vm.error" class="h2 secondary-text">SQL</div>\n                        </div>\n                        <dl ng-if="vm.error">\n                            <dt class="text-bold" translate="ANALYTICS.QUERY_ERROR">Query Error</dt>\n                            <dd>{{vm.error.sql}}</dd>\n                            <dt translate="ANALYTICS.MESSAGE">Message</dt>\n                            <dd>{{vm.error.msg}}</dd>\n                        </dl>\n                        <div ng-if="!vm.error">\n                            {{vm.queryResult}}\n                        </div>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/analytics/views/reports/preview/dialog.html",'<md-dialog aria-label="Run Report">\n    <form name="reportForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="ANALYTICS.PREVIEW_REPORT">Preview Report</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div class="md-block">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div ng-if="vm.error" class="h2 secondary-text" translate="ANALYTICS.ERROR">ERROR</div>\n                    <div ng-if="!vm.error" class="h2 secondary-text" translate="ANALYTICS.LIMITED_RESULT">LIMITED RESULT</div>\n                </div>\n                <dl ng-if="vm.error">\n                    <dt class="text-bold" translate="ANALYTICS.QUERY_ERROR">Query Error</dt>\n                    <dd>{{vm.error.sql}}</dd>\n                    <dt translate="ANALYTICS.MESSAGE">Message</dt>\n                    <dd>{{vm.error.msg}}</dd>\n                </dl>\n                <md-table-container ng-if="!vm.error">\n                    <table md-table md-progress="vm.promise">\n                        <thead md-head>\n                            <tr md-row>\n                                <th md-column ng-repeat="column in vm.columns">{{column.alias || column.field}}</th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-repeat="row in vm.rows">\n                                <td md-cell ng-repeat="(key, value) in row">{{ vm.valueReplacer(key, value) }}</td>\n                            </tr>\n                            <tr md-row ng-if="!vm.rows.length">\n                                <td md-cell colspan="{{vm.columns.length}}"><span translate="ANALYTICS.NO_DATA">NO DATA</span></td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div flex></div>\n            <md-button type="submit" ng-click="vm.closeDialog()" class="md-raised" aria-label="CLOSE" translate="ANALYTICS.CLOSE" translate-attr-aria-label="ANALYTICS.CLOSE">\n                CLOSE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/reports/reports.html",'<div id="reports" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-chart-line" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="ANALYTICS.REPORTS">Reports</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedReports.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedReports =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="ANALYTICS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-reports-count">\n                    <span>{{vm.selectedReports.length}}</span>\n                    <span translate="ANALYTICS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="ANALYTICS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllReports()" translate="ANALYTICS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectReports()" translate="ANALYTICS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedReports" csv-label="true" filename="reports.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button ng-if="vm.crudPermissions.canDelete && vm.currentNode.custom" class="md-icon-button" ng-click="vm.deleteSelectedReports($event)" aria-label="delete selected" translate translate-attr-label="ANALYTICS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div layout="column" flex="30">\n            <md-card class="padding-top-5 padding-horizontal-10 padding-bottom-0">\n                \x3c!-- SEARCH --\x3e\n                <div layout="row" layout-align="start center">\n                    <label for="searchFolder" class="m-0">\n                        <md-icon md-font-icon="icon-magnify"></md-icon>\n                    </label>\n                    <md-input-container md-no-float class="margin-horizontal-0 margin-bottom-0 margin-top-10" flex>\n                        <input id="searchFolder" placeholder="Search folder" type="text" ng-model="vm.search" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="ANALYTICS.SEARCH_FOR_FOLDER">\n                    </md-input-container>\n                </div>\n                \x3c!-- / SEARCH --\x3e\n            </md-card>\n            <md-card class="padding-10 scrollable" ms-scroll>\n                <div js-tree="vm.treeDefaultConfig" tree-events-obj="vm.treeDefaultEvents" ng-model="vm.treeDefaultData" tree="vm.treeDefaultInstance"></div>\n            </md-card>\n            <md-card class="padding-10 scrollable" ms-scroll>\n                <div js-tree="vm.treeCustomConfig" tree-events-obj="vm.treeCustomEvents" ng-model="vm.treeCustomData" tree="vm.treeCustomInstance"></div>\n            </md-card>\n        </div>\n        <md-card flex="70">\n            <md-toolbar class="md-table-toolbar md-default">\n                <div class="md-toolbar-tools">\n                    <span class="h2 secondary-text">{{vm.currentNode.text}}</span>\n                    <p ng-if="vm.currentPath">\n                        <span class="text-boxed">{{vm.currentPath}}</span>\n                    </p>\n                    <div flex></div>\n                    <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.query.filter = undefined" debounce="300"></ms-search-bar>\n                    <div flow-init flow-file-added="vm.importReport($file, $event, $flow)">\n                        <md-button ng-if="vm.crudPermissions.canEdit && vm.currentNode.custom" class="md-icon-button" aria-label="import report" translate translate-attr-label="ANALYTICS.IMPORT_REPORT" flow-btn>\n                            <md-icon md-font-icon="icon-upload"></md-icon>\n                        </md-button>\n                    </div>\n                    <md-button ng-if="vm.crudPermissions.canEdit && vm.currentNode.custom" class="md-icon-button" ng-click="vm.createOrEditReport($event)" aria-label="add report" translate translate-attr-label="ANALYTICS.ADD_REPORT">\n                        <md-icon md-font-icon="icon-plus"></md-icon>\n                    </md-button>\n                </div>\n            </md-toolbar>\n            <md-table-container>\n                <table md-table md-row-select multiple ng-model="vm.selectedReports" md-progress="vm.promise">\n                    <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getReports">\n                        <tr md-row>\n                            <th md-column md-order-by="id" width="10px">{{ \'ANALYTICS.ID\' | translate }}</th>\n                            <th md-column md-order-by="name">{{ \'ANALYTICS.NAME\' | translate }}</th>\n                            <th md-column md-order-by="description">{{ \'ANALYTICS.DESCRIPTION\' | translate }}</th>\n                            <th md-column md-order-by="createdAt">{{ \'ANALYTICS.CREATED_AT\' | translate }}</th>\n                            <th md-column width="10px"></th>\n                        </tr>\n                    </thead>\n                    <tbody md-body>\n                        <tr md-row ng-hide="vm.reports.rows.length">\n                            <td md-cell colspan="5">\n                                <div layout="row" layout-align="center center">\n                                    <span tranlsate="ANALYTICS.NO_AVAILABLE_INFO">No Available Info</span>\n                                </div>\n                            </td>\n                        </tr>\n                        <tr md-row md-select="report" md-select-id="id" ng-repeat="report in vm.reports.rows">\n                            <td ng-click="!vm.crudPermissions.canEdit ? vm.currentNode.custom && vm.editstate(report, $event) : vm.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="id">{{report.id}}</td>\n                            <td ng-click="!vm.crudPermissions.canEdit ? vm.currentNode.custom && vm.editstate(report, $event) : vm.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="name">{{report.name}}</td>\n                            <td ng-click="!vm.crudPermissions.canEdit ? vm.currentNode.custom && vm.editstate(report, $event) : vm.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="description">{{report.description}}</td>\n                            <td ng-click="!vm.crudPermissions.canEdit ? vm.currentNode.custom && vm.editstate(report, $event) : vm.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="createdAt">{{report.createdAt | date:\'medium\'}}</td>\n                            <td md-cell class="actions">\n                                <md-menu>\n                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="ANALYTICS.MORE" ng-click="$mdOpenMenu($event)">\n                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                    </md-button>\n\n                                    <md-menu-content width="3">\n                                        <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                            <md-button ng-click="vm.copydialog(report, $event)" translate="ANALYTICS.COPY_REPORT">\n                                                Copy Report\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item>\n                                            <md-button ng-click="vm.previewdialog(report, $event)" translate="ANALYTICS.PREVIEW_REPORT">\n                                                Preview Report\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item>\n                                            <md-button ng-click="vm.rundialog(report, $event)" translate="ANALYTICS.RUN_REPORT">\n                                                Run Report\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item>\n                                            <md-button ng-click="vm.downloadfile(report, $event)" translate="ANALYTICS.DOWNLOAD_JSON_REPORT">\n                                                Download Json Report\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-divider ng-if="vm.crudPermissions.canEdit && vm.crudPermissions.canDelete && vm.currentNode.custom">\n                                        </md-menu-divider>\n                                        <md-menu-item ng-if="vm.crudPermissions.canEdit && vm.currentNode.custom">\n                                            <md-button ng-click="vm.editstate(report, $event)" translate="ANALYTICS.EDIT_REPORT">\n                                                Edit Report\n                                            </md-button>\n                                        </md-menu-item>\n\n                                        <md-menu-item ng-if="vm.crudPermissions.canDelete && vm.currentNode.custom">\n                                            <md-button ng-click="vm.deleteconfirm(report, $event)" translate="ANALYTICS.DELETE_REPORT">\n                                                Delete Report\n                                            </md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </td>\n                        </tr>\n                    </tbody>\n                </table>\n            </md-table-container>\n\n            <md-table-pagination md-label="{page: \'{{\'ANALYTICS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'ANALYTICS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'ANALYTICS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.reports.count}}" md-on-paginate="vm.getReports" md-page-select></md-table-pagination>\n        </md-card>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>'),e.put("app/main/apps/analytics/views/reports/run/dialog.html",'<md-dialog class="report-dialog" aria-label="Run Report">\n    <form name="reportForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="ANALYTICS.RUN_REPORT">Run Report</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.NAME">Name</label>\n                <input name="name" ng-model="vm.export.name" required md-autofocus>\n                <div ng-messages="reportForm.name.$error" ng-show="reportForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.FORMAT">FORMAT</label>\n                <md-select name="format" ng-model="vm.export.output" required>\n                    <md-option value="csv">CSV</md-option>\n                    <md-option value="xlsx">Excel (XLSX)</md-option>\n                    <md-option value="pdf">PDF</md-option>\n                    <md-option value="web">Web</md-option>\n                </md-select>\n                <div ng-messages="reportForm.format.$error" ng-show="reportForm.format.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.FORMAT_REQUIRED">Format field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div layout="row">\n                <div class="md-block" flex>\n                    <mdp-date-picker mdp-open-on-click required name="dateRangeFrom" mdp-placeholder="Date Range From" mdp-format="YYYY-MM-DD" mdp-max-date="vm.dateRangeTo" ng-model="vm.export.startDate">\n                        <div ng-messages="reportForm.dateRangeFrom.$error" ng-show="reportForm.dateRangeFrom.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="ANALYTICS.ERRORS.DATE_RANGE_FROM_REQUIRED">Date Range From field is required</span>\n                            </div>\n                            <div ng-message="format">\n                                <span translate="ANALYTICS.ERRORS.DATE_RANGE_FROM_INVALID">Date Range From field is invalid</span>\n                            </div>\n                            <div ng-message="maxDate">\n                                <span translate="ANALYTICS.ERRORS.DATE_RANGE_FROM_MAX_INVALID">Date Range From Max field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-date-picker>\n                </div>\n                <div class="md-block" flex>\n                    <mdp-date-picker mdp-open-on-click required name="dateRangeTo" mdp-placeholder="Date Range To" mdp-format="YYYY-MM-DD" mdp-min-date="vm.dateRangeFrom" ng-model="vm.export.endDate">\n                        <div ng-messages="reportForm.dateRangeTo.$error" ng-show="reportForm.dateRangeTo.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="ANALYTICS.ERRORS.DATE_RANGE_TO_REQUIRED">Date Range From field is required</span>\n                            </div>\n                            <div ng-message="format">\n                                <span translate="ANALYTICS.ERRORS.DATE_RANGE_TO_INVALID">Date Range From field is invalid</span>\n                            </div>\n                            <div ng-message="minDate">\n                                <span translate="ANALYTICS.ERRORS.DATE_RANGE_FROM_MIN_INVALID">Date Range From Min field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-date-picker>\n                </div>\n            </div>\n            <div layout="row">\n                <div class="md-block" flex>\n                    <mdp-time-picker required name="timeRangeFrom" mdp-placeholder="Time Range From" mdp-format="HH:mm:ss" mdp-auto-switch="true" mdp-max-date="vm.dateRangeTo" ng-model="vm.export.startDate">\n                        <div ng-messages="reportForm.timeRangeFrom.$error" ng-show="reportForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="ANALYTICS.ERRORS.TIME_RANGE_FROM_REQUIRED">Time Range From field is required</span>\n                            </div>\n                            <div ng-message="format">\n                                <span translate="ANALYTICS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex>\n                    <mdp-time-picker required name="timeRangeTo" mdp-placeholder="Time Range To" mdp-format="HH:mm:ss" mdp-auto-switch="true" mdp-min-date="vm.dateRangeFrom" ng-model="vm.export.endDate">\n                        <div ng-messages="reportForm.timeRangeTo.$error" ng-show="reportForm.timeRangeTo.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="ANALYTICS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range From field is required</span>\n                            </div>\n                            <div ng-message="format">\n                                <span translate="ANALYTICS.ERRORS.TIME_RANGE_TO_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.runReport($event)" class="send-button md-accent md-raised" ng-disabled="reportForm.$invalid" aria-label="RUN" translate="ANALYTICS.RUN_REPORT" translate-attr-aria-label="ANALYTICS.RUN_REPORT">\n                    RUN REPORT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-click="vm.refreshDate()" aria-label="REFRESH" translate translate-attr-aria-label="ANALYTICS.REFRESH">\n                    <md-icon md-font-icon="icon-refresh"></md-icon>\n                    <md-tooltip><span translate="ANALYTICS.REFRESH">REFRESH</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/reports/run/web/dialog.html",'<md-dialog class="web-dialog" aria-label="Show Report">\n    <form name="reportForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="ANALYTICS.PREVIEW_REPORT">Web Report</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div class="md-block">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div ng-if="vm.error" class="h2 secondary-text" translate="ANALYTICS.ERROR">ERROR</div>\n                </div>\n                <dl ng-if="vm.error">\n                    <dt class="text-bold" translate="ANALYTICS.QUERY_ERROR">Query Error</dt>\n                    <dd>{{vm.error.sql}}</dd>\n                    <dt translate="ANALYTICS.MESSAGE">Message</dt>\n                    <dd>{{vm.error.msg}}</dd>\n                </dl>\n                <md-table-container ng-if="!vm.error">\n                    <table md-table md-progress="vm.promise">\n                        <thead md-head>\n                            <tr md-row>\n                                <th md-column ng-repeat="column in vm.columns">{{column.alias || column.field}}</th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-repeat="row in vm.results.rows">\n                                <td md-cell ng-repeat="(key, value) in row">{{ vm.valueReplacer(key, value) }}</td>\n                            </tr>\n                            <tr md-row ng-if="!vm.results.rows.length">\n                                <td md-cell colspan="{{vm.columns.length}}">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="ANALYTICS.NO_DATA">NO DATA</span>\n                                    </div>\n                                </td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'ANALYTICS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'ANALYTICS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'ANALYTICS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.results.count}}" md-on-paginate="vm.getResults" md-page-select></md-table-pagination>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div flex></div>\n            <md-button type="submit" ng-click="vm.closeDialog()" class="md-raised" aria-label="CLOSE" translate="ANALYTICS.CLOSE" translate-attr-aria-label="ANALYTICS.CLOSE">\n                CLOSE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/odbcs/create/dialog.html",'<md-dialog class="odbc-dialog" aria-label="New Odbc">\n    <form name="odbcForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.odbc.name" ng-required="true" autofocus>\n\n                <div ng-messages="odbcForm[\'name\'].$error" ng-show="odbcForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.DSN">DSN</label>\n                <input type="text" name="dsn" ng-model="vm.odbc.dsn" ng-required="true">\n\n                <div class="hint"><span translate="CALLYSQUARE.HELP.DSN"></span></div>\n                <div ng-messages="odbcForm[\'dsn\'].$error" ng-show="odbcForm[\'dsn\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.DSN_REQUIRED">DSN field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.odbc.description">\n\n                <div ng-messages="odbcForm[\'description\'].$error" ng-show="odbcForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newOdbc" ng-click="vm.saveOdbc()" class="send-button md-accent md-raised" ng-disabled="odbcForm.$invalid || odbcForm.$pristine" aria-label="SAVE" translate="CALLYSQUARE.SAVE" translate-attr-aria-label="CALLYSQUARE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newOdbc" ng-click="vm.addNewOdbc()" class="send-button md-accent md-raised" ng-disabled="odbcForm.$invalid" aria-label="ADD" translate="CALLYSQUARE.ADD_ODBC" translate-attr-aria-label="CALLYSQUARE.ADD_ODBC">\n                    ADD ODBC\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newOdbc" ng-click="vm.deleteOdbc($event)" aria-label="DELETE" translate translate-attr-aria-label="CALLYSQUARE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CALLYSQUARE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/odbcs/odbcs.html",'<div id="odbcs" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-sitemap" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CALLYSQUARE.ODBC">ODBC</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CALLYSQUARE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedODBC.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedODBC =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CALLYSQUARE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-odbcs-count">\n                    <span>{{vm.selectedODBC.length}}</span>\n                    <span translate="CALLYSQUARE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="ODBC.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllODBC()" translate="CALLYSQUARE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectODBC()" translate="CALLYSQUARE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedODBC" csv-label="true" filename="odbcs.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedODBC($event)" aria-label="delete selected" translate translate-attr-label="ODBC.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- ODBC TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedODBC" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getODBC">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CALLYSQUARE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'CALLYSQUARE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="dsn">{{ \'CALLYSQUARE.DSN\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'CALLYSQUARE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.odbcs.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CALLYSQUARE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="odbc" md-select-id="id" ng-repeat="odbc in vm.odbcs.rows">\n                                <td md-cell ng-if="odbc.userpic"><img class="avatar" alt="{{odbc.name}}" ng-src="api/users/{{odbc.id}}/avatar" /></td>\n                                <td md-cell ng-if="!odbc.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{odbc.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditOdbc($event, odbc)" md-cell class="id ">{{odbc.id}}</td>\n                                <td ng-click="vm.createOrEditOdbc($event, odbc)" md-cell class="name ">{{odbc.name}}</td>\n                                <td ng-click="vm.createOrEditOdbc($event, odbc)" md-cell class="dsn ">{{odbc.dsn}}</td>\n                                <td ng-click="vm.createOrEditOdbc($event, odbc)" md-cell class="description ">{{odbc.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CALLYSQUARE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(odbc, $event    )" translate="CALLYSQUARE.EDIT_ODBC">\n                                                    Edit Odbc\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestOdbc(odbc, $event    )" translate="CALLYSQUARE.TEST_ODBC">\n                                                    Test Odbc\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(odbc, $event    )" translate="CALLYSQUARE.DELETE_ODBC">\n                                                    Delete Odbc\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CALLYSQUARE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CALLYSQUARE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CALLYSQUARE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.odbcs.count}}" md-on-paginate="vm.getODBC" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / ODBC TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD ODBC BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-odbc-button" ng-click="vm.createOrEditOdbc($event)" aria-label="add odbc" translate translate-attr-aria-label="CALLYSQUARE.ADD_ODBC">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD ODBC BUTTON --\x3e\n</div>'),e.put("app/main/apps/callysquare/views/projects/create/dialog.html",'<md-dialog class="project-dialog" aria-label="New Project">\n    <form name="projectForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{vm.title | translate}}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.NAME">Name</label>\n                <input name="name" ng-model="vm.project.name" required md-autofocus ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-disabled="!vm.newProject">\n                <div ng-messages="projectForm.name.$error" ng-show="projectForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="VOICE.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.DESCRIPTION">Description</label>\n                <input name="description" ng-model="vm.project.description">\n                <div ng-messages="projectForm.description.$error" ng-show="projectForm.description.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.openFromEditor" class="md-block">\n                \x3c!-- Added to check if I\'m opening the dialog directly from the square editor --\x3e\n                <md-switch ng-model="vm.newWindow" aria-label="{{\'CALLYSQUARE.OPEN_NEW_WINDOW\' | translate }}"><span translate="CALLYSQUARE.OPEN_NEW_WINDOW"></span></md-switch>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-if="!vm.newProject" ng-click="vm.saveProject()" class="send-button md-accent md-raised" ng-disabled="projectForm.$invalid || projectForm.$pristine" aria-label="SAVE" translate="CALLYSQUARE.SAVE" translate-attr-aria-label="CALLYSQUARE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newProject" ng-click="vm.addNewProject()" class="send-button md-accent md-raised" ng-disabled="projectForm.$invalid || projectForm.$pristine" aria-label="ADD" translate="CALLYSQUARE.ADD_PROJECT" translate-attr-aria-label="CALLYSQUARE.ADD_PROJECT">\n                    ADD PROJECT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newProject" ng-click="vm.deleteProject($event)" aria-label="DELETE" translate translate-attr-aria-label="CALLYSQUARE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CALLYSQUARE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/dialog/dialog.html",'<md-dialog class="project-dialog" aria-label="New dialog" ng-init="vm.onInit()">\n    <form name="dialogForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title"><span translate="CALLYSQUARE.EDIT"></span> <span translate="CALLYSQUARE.{{vm.cellName | uppercase}}"></span></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <md-input-container class="md-block" ng-repeat="attribute in vm.attributes" ng-switch="attribute.name">\n                <label translate="CALLYSQUARE.{{attribute.name | uppercase}}">{{attribute.name | ucfirst }}</label>\n\n                \x3c!--  START SELECT INPUT --\x3e\n                <md-select name="{{attribute.name}}" ng-model="attribute.value" ng-disabled="!vm.crudPermissions.canEdit" ng-switch-when-separator="|" ng-switch-when="answer|trunk_name|trunk_id|queue_id|file_id|variable_id|google_tts_language|ispeech_tts_language|ispeech_asr_language|google_asr_language|hiddendigitspos|odbc_id|project_id|beep|account_id|interval_id|template_id|list_id|recordingFormat|callback_priority|aws_polly_voice|aws_polly_region|aws_lex_region|sms_account_id|findBy|pause_id|aws_text_type|dialogflow_language|ndagenerate_audio|ndaactivity_type" ng-required="attribute.required">\n                    <md-option ng-if="attribute.defaultValue" ng-value="\'\'"> - None - </md-option>\n                    <md-option value="{{v.value}}" ng-repeat="v in vm.values[attribute.name]" ng-disabled="v.canSelect === false">{{v.option}}</md-option>\n                    <md-option ng-if="!vm.values[attribute.name].length" value="-1">No {{attribute.name}} available!</md-option>\n                </md-select>\n                \x3c!--  END SELECT INPUT --\x3e\n\n                \x3c!--  START SELECT INPUT --\x3e\n                <md-select name="{{attribute.name}}" ng-model="attribute.value" ng-disabled="!vm.crudPermissions.canEdit" ng-switch-when-separator="|" ng-switch-when="sip_id" ng-required="attribute.required">\n                    <md-optgroup label="{{\'CALLYSQUARE.AGENTS\' | translate}}">\n                        <md-option value="{{v.value}}" ng-repeat="v in vm.values[attribute.name]" ng-if="v.group === \'agent\'" ng-disabled="v.canSelect === false">{{v.option}}</md-option>\n                    </md-optgroup>\n                    <md-optgroup label="{{\'CALLYSQUARE.TELEPHONES\' | translate}}">\n                        <md-option value="{{v.value}}" ng-repeat="v in vm.values[attribute.name]" ng-if="v.group === \'telephone\'" ng-disabled="v.canSelect === false">{{v.option}}</md-option>\n                    </md-optgroup>\n                    <md-optgroup label="{{\'CALLYSQUARE.USERS\' | translate}}">\n                        <md-option value="{{v.value}}" ng-repeat="v in vm.values[attribute.name]" ng-if="v.group === \'admin\' || v.group === \'user\'">{{v.option}}</md-option>\n                    </md-optgroup>\n                    <md-option ng-if="!vm.values[attribute.name].length" value="-1">No {{attribute.name}} available!</md-option>\n                </md-select>\n                \x3c!--  END SELECT INPUT --\x3e\n\n                \x3c!--  START NUMBER INPUT --\x3e\n                <div ng-switch-when="timeout">\n                    <div ng-switch="vm.cellName">\n                        <input ng-switch-when-separator="|" ng-switch-when="answer|ext_dial|dial|queue" type="number" step="any" name="{{attribute.name}}" min="0" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit" string-to-number>\n                        <input ng-switch-when-separator="|" ng-switch-when="record|ispeechasr|googleasr" type="number" step="any" name="{{attribute.name}}" min="-1" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit" string-to-number>\n                        <input ng-switch-default type="number" step="any" name="{{attribute.name}}" min="0" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit" string-to-number>\n                    </div>\n                </div>\n                <input ng-switch-when-separator="|" ng-switch-when="speed" type="number" step="any" name="{{attribute.name}}" min="-10" max="-10" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit" string-to-number>\n                <input ng-switch-when-separator="|" ng-switch-when="maxdigit|mindigit|digit" type="number" step="any" name="{{attribute.name}}" min="1" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit" string-to-number>\n                <input ng-switch-when-separator="|" ng-switch-when="retry|response|hiddendigitsnum|priority" type="number" step="any" name="{{attribute.name}}" min="1" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit" string-to-number>\n                \x3c!--  END NUMBER INPUT --\x3e\n\n                \x3c!--  START TEXTAREA INPUT --\x3e\n                <textarea name="{{attribute.name}}" ng-model="attribute.value" ng-switch-when-separator="|" ng-switch-when="query|sms_text|condition|text|custom_action_data" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit"></textarea>\n                \x3c!--  END TEXTAREA INPUT --\x3e\n\n                \x3c!-- START URL INPUT --\x3e\n                <input ng-switch-when-separator="|" ng-switch-when="ndauth_url|ndassistant_url" type="url" name="{{attribute.name}}" ng-model="attribute.value" ng-required="attribute.required">\n                \x3c!-- END URL INPUT --\x3e\n\n                \x3c!--  START TEXT INPUT --\x3e\n                <input ng-switch-default name="{{attribute.name}}" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit">\n                \x3c!--  END TEXT INPUT--\x3e\n\n                <div class="hint" ng-if="attribute.help">\n                    <span translate="CALLYSQUARE.HELP.{{attribute.name | uppercase}}"></span>\n                </div>\n                <div ng-messages="dialogForm[attribute.name].$error" ng-show="dialogForm[attribute.name].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.FIELD_REQUIRED">The field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="vm.crudPermissions.canEdit">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.closeDialog(true)" class="send-button md-accent md-raised" ng-disabled="dialogForm.$invalid || dialogForm.$pristine" aria-label="SAVE" translate="CALLYSQUARE.SAVE" translate-attr-aria-label="CALLYSQUARE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/edit/edit.html",'<md-dialog class="project-dialog" aria-label="New dialog">\n    <form name="editForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title"><span translate="CALLYSQUARE.EDIT_XML"></span></span></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label>XML</label>\n                <textarea name="preproduction" ng-model="vm.project.preproduction"></textarea>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.closeDialog(true)" class="send-button md-accent md-raised" ng-disabled="editForm.$invalid" aria-label="SAVE" translate="CALLYSQUARE.SAVE" translate-attr-aria-label="CALLYSQUARE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/import/import.html",'<md-dialog class="project-dialog" aria-label="New dialog">\n    <form name="importForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title"><span translate="CALLYSQUARE.IMPORT_XML"></span></span></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div id="xml-uploader" flow-init="vm.ngFlowOptions" flow-name="vm.ngFlow.flow" flow-file-added="vm.fileAdded($file)" flow-drop flow-drag-enter="vm.dropping=true" flow-drag-leave="vm.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                <div class="drop-text hint-text" layout="row" layout-align="center center">\n                    <span translate="CALLYSQUARE.DROP_TO_UPLOAD">Drop to upload</span>\n                </div>\n\n                <div class="upload-button" layout="column" layout-align="center center">\n                    <md-button class="md-accent md-raised" flow-btn>\n                        Upload\n                    </md-button>\n                    <span class="secondary-text mt-8" translate="CALLYSQUARE.DROP_TO_UPLOAD_MESSAGE">You can also drop files here to upload. Only XML - Max. 5MB</span>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.closeDialog()" class="send-button md-accent md-raised" ng-disabled="importForm.$invalid" aria-label="CLOSE" translate="CALLYSQUARE.CLOSE" translate-attr-aria-label="CALLYSQUARE.CLOSE">\n                    CLOSE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/info/info.html",'<md-dialog class="project-dialog" aria-label="New dialog">\n    <form name="descriptionFrom" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title"><span translate="CALLYSQUARE.UPDATE_INFO"></span></span></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.DESCRIPTION">Description</label>\n                <input name="description" ng-model="vm.project.description" md-autofocus>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.NOTES">Description</label>\n                <textarea name="notes" ng-model="vm.project.notes"></textarea>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.save()" class="send-button md-accent md-raised" ng-disabled="descriptionFrom.$invalid" aria-label="SAVE" translate="CALLYSQUARE.UPDATE_INFO" translate-attr-aria-label="CALLYSQUARE.UPDATE">\n                    UPDATE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/open/open.html",'<md-dialog class="project-dialog" aria-label="New dialog">\n    <form name="openForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title"><span translate="CALLYSQUARE.OPEN_PROJECT"></span></span></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.PROJECT">Project</label>\n                <md-select name="id" ng-model="vm.id" required>\n                    <md-option value="{{p.id}}" ng-repeat="p in vm.projects">{{p.name}}</md-option>\n                </md-select>\n                <div ng-messages="openForm.id.$error" ng-show="openForm.id.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.PROJECT_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.newWindow" aria-label="{{\'CALLYSQUARE.OPEN_NEW_WINDOW\' | translate }}"><span translate="CALLYSQUARE.OPEN_NEW_WINDOW"></span></md-switch>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.closeDialog(true)" class="send-button md-accent md-raised" ng-disabled="openForm.$invalid" aria-label="SAVE" translate="CALLYSQUARE.OPEN_PROJECT" translate-attr-aria-label="CALLYSQUARE.OPEN">\n                    OPEN\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/permissionadd/permissionadd.html",'<md-dialog class="projects-dialog" aria-label="projects">\n    <form name="projectsForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="CALLYSQUARE.PERMISSIONADD_PROJECTS">Add User Permissions</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/saveAs/saveAs.html",'<md-dialog class="project-dialog" aria-label="New dialog">\n    <form name="newForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title"><span translate="CALLYSQUARE.COPY_PROJECT"></span></span></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.NAME">Name</label>\n                <input name="name" ng-model="vm.project.name" required md-autofocus>\n                <div ng-messages="newForm.name.$error" ng-show="newForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.newWindow" aria-label="{{\'CALLYSQUARE.OPEN_NEW_WINDOW\' | translate }}"><span translate="CALLYSQUARE.OPEN_NEW_WINDOW"></span></md-switch>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.save()" class="send-button md-accent md-raised" ng-disabled="newForm.$invalid" aria-label="SAVE" translate="CALLYSQUARE.COPY_PROJECT" translate-attr-aria-label="CALLYSQUARE.COPY">\n                    COPY\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/view.html",'<div id="callysquare-project" class="page-layout simple tabbed" layout="column" ng-init="vm.onInit()">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-projects-button md-icon-button" aria-label="Go to projects" ng-click="vm.gotoProjects()" translate translate-attr-aria-label="CALLYSQUARE.GO_TO_PROJECTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="project-image" hide-xs>\n                    <img ng-src="assets/images/business/cprojects.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.project.id}} {{vm.project.name}}\n                    </div>\n                    <div class="subtitle secondary-text text-truncate">\n                        <span ng-if="vm.project.description">{{vm.project.description}} - </span><span translate="CALLYSQUARE.CREATED_AT"></span> <span>{{vm.project.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-if="vm.crudPermissions.canEdit" ng-click="vm.updateInfo($event)" class="md-fab md-yellow-700-bg md-icon-button" aria-label="edit">\n                <md-icon md-font-icon="icon-tooltip-edit"></md-icon>\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <md-content class="callysquare-content">\n\n        <div id="geEditor" class="geEditor"></div>\n\n    </md-content>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/callysquare/views/projects/projects.html",'<div id="projects" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-vector-square" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CALLYSQUARE.PROJECTS">Projects</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        \x3c!-- SEARCH --\x3e\n        <div class="search-input-wrapper" layout="row" layout-align="start center">\n            <label for="search">\n                <md-icon md-font-icon="icon-magnify"></md-icon>\n            </label>\n            <md-input-container md-no-float class="m-0">\n                <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CALLYSQUARE.SEARCH_FOR_ANYONE">\n            </md-input-container>\n        </div>\n        \x3c!-- / SEARCH --\x3e\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedProjects.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedProjects =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CALLYSQUARE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-projects-count">\n                    <span>{{vm.selectedProjects.length}}</span>\n                    <span translate="CALLYSQUARE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CALLYSQUARE.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllProjects()" translate="CALLYSQUARE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectProjects()" translate="CALLYSQUARE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedProjects" csv-label="true" filename="projects.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button ng-if="vm.crudPermissions.canDelete" class="md-icon-button" ng-click="vm.deleteSelectedProjects($event)" aria-label="delete selected" translate translate-attr-label="CALLYSQUARE.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n            \x3c!-- PROJECT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedProjects" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getProjects">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CALLYSQUARE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'CALLYSQUARE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'CALLYSQUARE.DESCRIPTION\' | translate }}</th>\n                                <th md-column md-order-by="notes">{{ \'CALLYSQUARE.NOTES\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.projects.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span tranlsate="CALLYSQUARE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="project" md-select-id="id" ng-repeat="project in vm.projects.rows">\n                                <td md-cell ng-if="project.userpic"><img class="avatar" alt="{{project.name}}" ng-src="api/users/{{project.id}}/avatar" /></td>\n                                <td md-cell ng-if="!project.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{project.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="id ">{{project.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="name ">{{project.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="description ">{{project.description}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="notes ">{{project.notes}}</td>\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n                                    <md-menu>\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CALLYSQUARE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(project, ev)" translate="CALLYSQUARE.EDIT_PROJECT">\n                                                    Edit Project\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(project, ev)" translate="CALLYSQUARE.DELETE_PROJECT">\n                                                    Delete Project\n                                                </md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CALLYSQUARE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CALLYSQUARE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CALLYSQUARE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.projects.count}}" md-on-paginate="vm.getProjects" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / PROJECT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD PROJECT BUTTON --\x3e\n    <md-button class="md-fab md-accent md-icon-button" id="add-project-button" ng-if="vm.crudPermissions.canEdit" ng-click="vm.createOrEditProject($event)" aria-label="add project" translate translate-attr-aria-label="CALLYSQUARE.ADD_PROJECT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD PROJECT BUTTON --\x3e\n\n</div>'),e.put("app/main/apps/callysquare/views/squareRecordings/create/dialog.html",'<md-dialog class="squareRecording-dialog" aria-label="New SquareRecording">\n    <form name="squareRecordingForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.FILENAME">Filename</label>\n                <input type="" name="filename" ng-model="vm.squareRecording.filename" ng-required="true" autofocus>\n\n                <div ng-messages="squareRecordingForm[\'filename\'].$error" ng-show="squareRecordingForm[\'filename\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.FILENAME_REQUIRED">Filename field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSquareRecording" ng-click="vm.saveSquareRecording()" class="send-button md-accent md-raised" ng-disabled="squareRecordingForm.$invalid || squareRecordingForm.$pristine" aria-label="SAVE" translate="CALLYSQUARE.SAVE" translate-attr-aria-label="CALLYSQUARE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSquareRecording" ng-click="vm.addNewSquareRecording()" class="send-button md-accent md-raised" ng-disabled="squareRecordingForm.$invalid" aria-label="ADD" translate="CALLYSQUARE.ADD_SQUARERECORDING" translate-attr-aria-label="CALLYSQUARE.ADD_SQUARERECORDING">\n                    ADD SQUARERECORDING\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSquareRecording" ng-click="vm.deleteSquareRecording($event)" aria-label="DELETE" translate translate-attr-aria-label="CALLYSQUARE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CALLYSQUARE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/squareRecordings/squareRecordings.html",'<div id="squareRecordings" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-sitemap" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CALLYSQUARE.SQUARERECORDINGS">SquareRecordings</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CALLYSQUARE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedSquareRecordings.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedSquareRecordings =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CALLYSQUARE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-squareRecordings-count">\n                    <span>{{vm.selectedSquareRecordings.length}}</span>\n                    <span translate="CALLYSQUARE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SQUARERECORDINGS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllSquareRecordings()" translate="CALLYSQUARE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectSquareRecordings()" translate="CALLYSQUARE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedSquareRecordings" csv-label="true" filename="squareRecordings.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedSquareRecordings($event)" aria-label="delete selected" translate translate-attr-label="SQUARERECORDINGS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SQUARERECORDING TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedSquareRecordings" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSquareRecordings">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="filename">{{ \'CALLYSQUARE.FILENAME\' | translate }}</th>\n                                <th md-column md-order-by="projectName">{{ \'CALLYSQUARE.PROJECT\' | translate }}</th>\n                                <th md-column md-order-by="uniqueid">{{ \'CALLYSQUARE.UNIQUEID\' | translate }}</th>\n                                <th md-column md-order-by="callerid">{{ \'CALLYSQUARE.PHONE\' | translate }}</th>\n                                <th md-column md-order-by="extension">{{ \'CALLYSQUARE.EXTEN\' | translate }}</th>\n                                <th md-column md-order-by="audio">{{ \'CALLYSQUARE.AUDIO\' | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ \'CALLYSQUARE.CREATED_AT\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.squareRecordings.rows.length">\n                                <td md-cell colspan="8">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CALLYSQUARE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="squareRecording" md-select-id="id" ng-repeat="squareRecording in vm.squareRecordings.rows">\n                                <td md-cell ng-if="squareRecording.userpic"><img class="avatar" alt="{{squareRecording.name}}" ng-src="api/users/{{squareRecording.id}}/avatar" /></td>\n                                <td md-cell ng-if="!squareRecording.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{squareRecording.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditSquareRecording($event, squareRecording)" md-cell class="filename ">{{squareRecording.filename}}</td>\n                                <td ng-click="vm.createOrEditSquareRecording($event, squareRecording)" md-cell class="projectName ">{{squareRecording.projectName}}</td>\n                                <td ng-click="vm.createOrEditSquareRecording($event, squareRecording)" md-cell class="uniqueid ">{{squareRecording.uniqueid}}</td>\n                                <td ng-click="vm.createOrEditSquareRecording($event, squareRecording)" md-cell class="callerid ">{{squareRecording.callerid}}</td>\n                                <td ng-click="vm.createOrEditSquareRecording($event, squareRecording)" md-cell class="extension ">{{squareRecording.extension}}</td>\n\n                                <td md-cell class="audio ">\n                                    \x3c!-- audio recording directive --\x3e\n                                    <ms-recording id="squareRecording.id" model="\'squareRecording\'"></ms-recording>\n                                    \x3c!-- / audio recording directive --\x3e\n                                </td>\n                                <td ng-click="vm.createOrEditSquareRecording($event, squareRecording)" md-cell class="createdAt ">{{squareRecording.createdAt | date:\'medium\' }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CALLYSQUARE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.downloadfile2(squareRecording, $event  , \'square/recordings\'   )" translate="CALLYSQUARE.DOWNLOAD_SQUARERECORDING">\n                                                    Download SquareRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(squareRecording, $event    )" translate="CALLYSQUARE.DELETE_SQUARERECORDING">\n                                                    Delete SquareRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CALLYSQUARE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CALLYSQUARE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CALLYSQUARE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.squareRecordings.count}}" md-on-paginate="vm.getSquareRecordings" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SQUARERECORDING TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>'),e.put("app/main/apps/chat/views/chatQueues/chatQueues.html",'<div id="chatQueues" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-hangouts" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CHAT.CHATQUEUES">ChatQueues</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CHAT.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedChatQueues.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedChatQueues =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CHAT.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-chatQueues-count">\n                    <span>{{vm.selectedChatQueues.length}}</span>\n                    <span translate="CHAT.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CHATQUEUES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllChatQueues()" translate="CHAT.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectChatQueues()" translate="CHAT.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedChatQueues" csv-label="true" filename="chatQueues.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedChatQueues($event)" aria-label="delete selected" translate translate-attr-label="CHATQUEUES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- CHATQUEUE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedChatQueues" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getChatQueues">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'CHAT.NAME\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'CHAT.STRATEGY\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.chatQueues.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CHAT.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="chatQueue" md-select-id="id" ng-repeat="chatQueue in vm.chatQueues.rows">\n                                <td md-cell ng-if="chatQueue.userpic"><img class="avatar" alt="{{chatQueue.name}}" ng-src="api/users/{{chatQueue.id}}/avatar" /></td>\n                                <td md-cell ng-if="!chatQueue.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{chatQueue.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatQueue, ev) : vm.createOrEditChatQueue($event, chatQueue)" md-cell class="id ">{{chatQueue.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatQueue, ev) : vm.createOrEditChatQueue($event, chatQueue)" md-cell class="name ">{{chatQueue.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatQueue, ev) : vm.createOrEditChatQueue($event, chatQueue)" md-cell class="strategy ">{{ vm.arraystrategy[chatQueue.strategy].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(chatQueue, $event    )" translate="CHAT.EDIT_CHATQUEUE">\n                                                    Edit ChatQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(chatQueue, $event    )" translate="CHAT.TEAMADD_CHATQUEUE">\n                                                    teamadd ChatQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(chatQueue, $event    )" translate="CHAT.AGENTADD_CHATQUEUE">\n                                                    agentadd ChatQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(chatQueue, $event    )" translate="CHAT.DELETE_CHATQUEUE">\n                                                    Delete ChatQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(chatQueue, $event    )" translate="CHAT.GOTOREALTIME_CHATQUEUE">\n                                                    goToRealtime ChatQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.chatQueues.count}}" md-on-paginate="vm.getChatQueues" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / CHATQUEUE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD CHATQUEUE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-chatQueue-button" ng-click="vm.createOrEditChatQueue($event)" aria-label="add chatQueue" translate translate-attr-aria-label="CHAT.ADD_CHATQUEUE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD CHATQUEUE BUTTON --\x3e\n</div>'),e.put("app/main/apps/chat/views/chatQueues/create/dialog.html",'<md-dialog class="chatQueue-dialog" aria-label="New ChatQueue">\n    <form name="chatQueueForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.chatQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newChatQueue">\n\n                <div class="hint"><span translate="CHAT.HELP.NAME"></span></div>\n                <div ng-messages="chatQueueForm[\'name\'].$error" ng-show="chatQueueForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="CHAT.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.STRATEGY">Strategy</label>\n                <md-select name="strategy" ng-model="vm.chatQueue.strategy" required>\n                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                </md-select>\n                <div ng-messages="chatQueueForm[\'strategy\'].$error" ng-show="chatQueueForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.AGENT_TIMEOUT">Agent_Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.chatQueue.timeout" min="1" max="2147483" ng-required="true">\n\n                <div ng-messages="chatQueueForm[\'timeout\'].$error" ng-show="chatQueueForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="CHAT.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.chatQueue.description">\n\n                <div ng-messages="chatQueueForm[\'description\'].$error" ng-show="chatQueueForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newChatQueue" ng-click="vm.saveChatQueue()" class="send-button md-accent md-raised" ng-disabled="chatQueueForm.$invalid || chatQueueForm.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newChatQueue" ng-click="vm.addNewChatQueue()" class="send-button md-accent md-raised" ng-disabled="chatQueueForm.$invalid" aria-label="ADD" translate="CHAT.ADD_CHATQUEUE" translate-attr-aria-label="CHAT.ADD_CHATQUEUE">\n                    ADD CHATQUEUE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newChatQueue" ng-click="vm.deleteChatQueue($event)" aria-label="DELETE" translate translate-attr-aria-label="CHAT.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CHAT.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatQueues/edit/agentadd/agentadd.html",'<md-dialog class="chatQueue-dialog" aria-label="chatQueue" ng-init="vm.onInit()">\n    <form name="chatQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="CHAT.AGENTADD_CHATQUEUE">Add Agent to chatQueue</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatQueues/edit/teamadd/teamadd.html",'<md-dialog class="chatQueue-dialog" aria-label="chatQueue" ng-init="vm.onInit()">\n    <form name="chatQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="CHAT.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatQueues/edit/view.html",'<div id="chat-chatQueue" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-chatQueues-button md-icon-button" aria-label="Go to chatQueues" ng-click="vm.gotoChatQueues()" translate translate-attr-aria-label="CHAT.GO_TO_CHATQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="chatQueue-image" hide-xs>\n                    <img ng-src="assets/images/business/chatQueues.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.chatQueue.id}}\n                        <span ng-if="vm.chatQueue.name">{{vm.chatQueue.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="CHAT.CREATED_AT"></span> <span>{{vm.chatQueue.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.chatQueue, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="CHAT.TEAMADD_CHATQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.chatQueue, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="CHAT.AGENTADD_CHATQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveChatQueue()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid)" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CHAT.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="chatQueue-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CHAT.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.chatQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="CHAT.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="CHAT.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.chatQueue.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'strategy\'].$error" ng-show="generalForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.AGENT_TIMEOUT">Agent_Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.chatQueue.timeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="CHAT.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="CHAT.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.chatQueue.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/chat/views/chatWebsites/chatWebsites.html",'<div id="chatWebsites" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-hangouts" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CHAT.CHATWEBSITES">ChatWebsites</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CHAT.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedChatWebsites.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedChatWebsites =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CHAT.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-chatWebsites-count">\n                    <span>{{vm.selectedChatWebsites.length}}</span>\n                    <span translate="CHAT.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CHATWEBSITES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllChatWebsites()" translate="CHAT.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectChatWebsites()" translate="CHAT.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedChatWebsites" csv-label="true" filename="chatWebsites.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedChatWebsites($event)" aria-label="delete selected" translate translate-attr-label="CHATWEBSITES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- CHATWEBSITE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedChatWebsites" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getChatWebsites">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'CHAT.NAME\' | translate }}</th>\n                                <th md-column md-order-by="key">{{ \'CHAT.KEY\' | translate }}</th>\n                                <th md-column md-order-by="address">{{ \'CHAT.MOTIONADDRESS\' | translate }}</th>\n                                <th md-column md-order-by="remote">{{ \'CHAT.MOTIONPROXY\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'CHAT.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.chatWebsites.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CHAT.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="chatWebsite" md-select-id="id" ng-repeat="chatWebsite in vm.chatWebsites.rows">\n                                <td md-cell ng-if="chatWebsite.userpic"><img class="avatar" alt="{{chatWebsite.name}}" ng-src="api/users/{{chatWebsite.id}}/avatar" /></td>\n                                <td md-cell ng-if="!chatWebsite.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{chatWebsite.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatWebsite, ev) : vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="id ">{{chatWebsite.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatWebsite, ev) : vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="name ">{{chatWebsite.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatWebsite, ev) : vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="key ">{{chatWebsite.key}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatWebsite, ev) : vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="address ">{{chatWebsite.address}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatWebsite, ev) : vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="remote ">{{chatWebsite.remote}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatWebsite, ev) : vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="description ">{{chatWebsite.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(chatWebsite, $event    )" translate="CHAT.EDIT_CHATWEBSITE">\n                                                    Edit ChatWebsite\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.interactionsgoto(chatWebsite, $event    )" translate="CHAT.INTERACTIONS_CHATWEBSITE">\n                                                    Interactions ChatWebsite\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.offlinemessagesgoto(chatWebsite, $event    )" translate="CHAT.OFFLINEMESSAGES_CHATWEBSITE">\n                                                    OfflineMessages ChatWebsite\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(chatWebsite, $event    )" translate="CHAT.AGENTADD_CHATWEBSITE">\n                                                    AgentAdd ChatWebsite\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(chatWebsite, $event    )" translate="CHAT.DELETE_CHATWEBSITE">\n                                                    Delete ChatWebsite\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.chatWebsites.count}}" md-on-paginate="vm.getChatWebsites" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / CHATWEBSITE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD CHATWEBSITE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-chatWebsite-button" ng-click="vm.createOrEditChatWebsite($event)" aria-label="add chatWebsite" translate translate-attr-aria-label="CHAT.ADD_CHATWEBSITE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD CHATWEBSITE BUTTON --\x3e\n</div>'),e.put("app/main/apps/chat/views/chatWebsites/create/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.chatWebsite.name" ng-required="true" autofocus ng-disabled="!vm.newChatWebsite">\n\n                <div ng-messages="chatWebsiteForm[\'name\'].$error" ng-show="chatWebsiteForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.KEY">key</label>\n                <input type="text" name="key" ng-model="vm.chatWebsite.key" md-maxlength="5" ng-required="true">\n\n                <div ng-messages="chatWebsiteForm[\'key\'].$error" ng-show="chatWebsiteForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.KEY_REQUIRED">key field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="CHAT.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.MOTIONADDRESS">MotionAddress</label>\n                <input type="url" name="address" ng-model="vm.chatWebsite.address" md-maxlength="255" ng-required="true">\n\n                <div ng-messages="chatWebsiteForm[\'address\'].$error" ng-show="chatWebsiteForm[\'address\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.MOTIONADDRESS_REQUIRED">MotionAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="CHAT.ERRORS.MOTIONADDRESS_MUST_VALID_URL">MotionAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="CHAT.ERRORS.MOTIONADDRESS_MAX_LENGTH" translate-values=\'{max: 255}\'>MotionAddress must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.MOTIONPROXY">MotionProxy</label>\n                <input type="url" name="remote" ng-model="vm.chatWebsite.remote" md-maxlength="255" ng-required="true">\n\n                <div class="hint"><span translate="CHAT.HELP.MOTIONPROXY"></span></div>\n                <div ng-messages="chatWebsiteForm[\'remote\'].$error" ng-show="chatWebsiteForm[\'remote\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.MOTIONPROXY_REQUIRED">MotionProxy field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="CHAT.ERRORS.MOTIONPROXY_MUST_VALID_URL">MotionProxy must be a valid url http://www.xcally.com</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="CHAT.ERRORS.MOTIONPROXY_MAX_LENGTH" translate-values=\'{max: 255}\'>MotionProxy must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.LIST">List</label>\n                <md-select name="ListId" ng-model="vm.chatWebsite.ListId" required>\n                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                </md-select>\n                <div class="hint"><span translate="CHAT.HELP.LIST"></span></div>\n                <div ng-messages="chatWebsiteForm[\'ListId\'].$error" ng-show="chatWebsiteForm[\'ListId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.INTERVAL">Interval</label>\n                <md-select name="IntervalId" ng-model="vm.chatWebsite.IntervalId">\n                    <md-option ng-value="null">Always</md-option>\n                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval" ng-disabled="IntervalId.canSelect === false">{{ IntervalId.name }}</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteForm[\'IntervalId\'].$error" ng-show="chatWebsiteForm[\'IntervalId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.INTERVAL_REQUIRED">Interval field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.chatWebsite.description">\n\n                <div ng-messages="chatWebsiteForm[\'description\'].$error" ng-show="chatWebsiteForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newChatWebsite" ng-click="vm.saveChatWebsite()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteForm.$invalid || chatWebsiteForm.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newChatWebsite" ng-click="vm.addNewChatWebsite()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteForm.$invalid" aria-label="ADD" translate="CHAT.ADD_CHATWEBSITE" translate-attr-aria-label="CHAT.ADD_CHATWEBSITE">\n                    ADD CHATWEBSITE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newChatWebsite" ng-click="vm.deleteChatWebsite($event)" aria-label="DELETE" translate translate-attr-aria-label="CHAT.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CHAT.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/agentadd/agentadd.html",'<md-dialog class="chatWebsite-dialog" aria-label="chatWebsite" ng-init="vm.onInit()">\n    <form name="chatWebsiteForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="CHAT.AGENTADD_CHATWEBSITE">Add Agent to chatWebsite</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/agent/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.AGENT">Agent</label>\n                <md-select name="agent" ng-model="vm.agent.agent" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents" ng-disabled="agent.canSelect === false">{{ agent.name }}</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'agent\'].$error" ng-show="chatWebsiteFormApp[\'agent\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.agent.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'timeout\'].$error" ng-show="chatWebsiteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="CHAT.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/amazonlex/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.ACCESSKEYID">accesskeyid</label>\n                <input type="text" name="accesskeyid" ng-model="vm.amazonlex.accesskeyid" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'accesskeyid\'].$error" ng-show="chatWebsiteFormApp[\'accesskeyid\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.ACCESSKEYID_REQUIRED">accesskeyid field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.SECRETACCESSKEY">secretaccesskey</label>\n                <input type="text" name="secretaccesskey" ng-model="vm.amazonlex.secretaccesskey" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'secretaccesskey\'].$error" ng-show="chatWebsiteFormApp[\'secretaccesskey\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.SECRETACCESSKEY_REQUIRED">secretaccesskey field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.LEXREGION">lexregion</label>\n                <md-select name="lexregion" ng-model="vm.amazonlex.lexregion" required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'us-east-1\'">US East (N. Virginia)</md-option>\n                    <md-option ng-value="\'us-west-2\'">US West (Oregon)</md-option>\n                    <md-option ng-value="\'eu-west-1\'">EU (Ireland)</md-option>\n                    <md-option ng-value="\'ap-southeast-2\'">Asia Pacific (Sydney)</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'lexregion\'].$error" ng-show="chatWebsiteFormApp[\'lexregion\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.LEXREGION_REQUIRED">lexregion field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.BOTNAME">botname</label>\n                <input type="text" name="botname" ng-model="vm.amazonlex.botname" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'botname\'].$error" ng-show="chatWebsiteFormApp[\'botname\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.BOTNAME_REQUIRED">botname field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.WELCOMEMESSAGE">welcomemessage</label>\n                <textarea name="welcomemessage" ng-model="vm.amazonlex.welcomemessage" md-maxlength="255"></textarea>\n                <div class="hint"><span translate="CHAT.HELP.WELCOMEMESSAGE"></span></div>\n\n                <div ng-messages="chatWebsiteFormApp[\'welcomemessage\'].$error" ng-show="chatWebsiteFormApp[\'welcomemessage\'].$touched" role="alert">\n\n\n                    <div ng-message="md-maxlength">\n                        <span translate="CHAT.ERRORS.WELCOMEMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>welcomemessage must have a maximum length equal to 255</span>\n                    </div>\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/autoreply/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TIMES">times</label>\n                <md-select name="times" ng-model="vm.autoreply.times" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="1">One Time</md-option>\n                    <md-option ng-value="0">Always</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'times\'].$error" ng-show="chatWebsiteFormApp[\'times\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TIMES_REQUIRED">times field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TEXT">Text</label>\n                <textarea name="text" ng-model="vm.autoreply.text" required></textarea>\n\n                <div ng-messages="chatWebsiteFormApp[\'text\'].$error" ng-show="chatWebsiteFormApp[\'text\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TEXT_REQUIRED">Text field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/close/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.DISPOSITION">Disposition</label>\n                <input type="text" name="disposition" ng-model="vm.close.disposition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'disposition\'].$error" ng-show="chatWebsiteFormApp[\'disposition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.DISPOSITION_REQUIRED">Disposition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/dialogflow/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.KEY">Key</label>\n                <input type="text" name="key" ng-model="vm.dialogflow.key" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'key\'].$error" ng-show="chatWebsiteFormApp[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.LANGUAGE">language</label>\n                <md-select name="language" ng-model="vm.dialogflow.language" required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'da\'">Danish</md-option>\n                    <md-option ng-value="\'en\'">English</md-option>\n                    <md-option ng-value="\'de\'">German</md-option>\n                    <md-option ng-value="\'it\'">Italian</md-option>\n                    <md-option ng-value="\'es\'">Spanish</md-option>\n                    <md-option ng-value="\'fr\'">French</md-option>\n                    <md-option ng-value="\'id\'">Indonesian</md-option>\n                    <md-option ng-value="\'ja\'">Japanese</md-option>\n                    <md-option ng-value="\'ko\'">Korean (South Korea)</md-option>\n                    <md-option ng-value="\'nl\'">Dutch</md-option>\n                    <md-option ng-value="\'no\'">Norwegian</md-option>\n                    <md-option ng-value="\'pt\'">Portuguese (European)</md-option>\n                    <md-option ng-value="\'pt-br\'">Portuguese (Nrazilian)</md-option>\n                    <md-option ng-value="\'ru\'">Russian</md-option>\n                    <md-option ng-value="\'sv\'">Swedish</md-option>\n                    <md-option ng-value="\'th\'">Thai</md-option>\n                    <md-option ng-value="\'uk\'">Ukrainian</md-option>\n                    <md-option ng-value="\'zh-CN\'">Chinese (Simplified)</md-option>\n                    <md-option ng-value="\'zh-HK\'">Chinese (Hong Kong)</md-option>\n                    <md-option ng-value="\'zh-TW\'">Chinese (Traditional)</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'language\'].$error" ng-show="chatWebsiteFormApp[\'language\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.LANGUAGE_REQUIRED">language field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.WELCOMEMESSAGE">welcomemessage</label>\n                <textarea name="welcomemessage" ng-model="vm.dialogflow.welcomemessage" md-maxlength="255"></textarea>\n                <div class="hint"><span translate="CHAT.HELP.WELCOMEMESSAGE"></span></div>\n\n                <div ng-messages="chatWebsiteFormApp[\'welcomemessage\'].$error" ng-show="chatWebsiteFormApp[\'welcomemessage\'].$touched" role="alert">\n\n\n                    <div ng-message="md-maxlength">\n                        <span translate="CHAT.ERRORS.WELCOMEMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>welcomemessage must have a maximum length equal to 255</span>\n                    </div>\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/gotoif/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.CONDITION">Condition</label>\n                <input type="text" name="condition" ng-model="vm.gotoif.condition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'condition\'].$error" ng-show="chatWebsiteFormApp[\'condition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.CONDITION_REQUIRED">Condition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TRUEPRIORITY">truepriority</label>\n                <input type="number" name="truepriority" ng-model="vm.gotoif.truepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'truepriority\'].$error" ng-show="chatWebsiteFormApp[\'truepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TRUEPRIORITY_REQUIRED">truepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.TRUEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">truepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.FALSEPRIORITY">falsepriority</label>\n                <input type="number" name="falsepriority" ng-model="vm.gotoif.falsepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'falsepriority\'].$error" ng-show="chatWebsiteFormApp[\'falsepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.FALSEPRIORITY_REQUIRED">falsepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.FALSEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">falsepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/gotop/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.PRIORITY">Priority</label>\n                <input type="number" name="priority" ng-model="vm.gotop.priority" min="0" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'priority\'].$error" ng-show="chatWebsiteFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.PRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Priority must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/noop/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.noop.value" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'value\'].$error" ng-show="chatWebsiteFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/queue/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'queue\'].$error" ng-show="chatWebsiteFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'timeout\'].$error" ng-show="chatWebsiteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="CHAT.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/system/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.COMMAND">Command</label>\n                <input type="text" name="command" ng-model="vm.system.command" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'command\'].$error" ng-show="chatWebsiteFormApp[\'command\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.COMMAND_REQUIRED">Command field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.VARIABLE">Variable</label>\n                <md-select name="variable" ng-model="vm.system.variable" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables" ng-disabled="variable.canSelect === false">{{ variable.name }}</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'variable\'].$error" ng-show="chatWebsiteFormApp[\'variable\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/tag/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TAG">Tag</label>\n                <md-select name="tag" ng-model="vm.tag.tag" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags" ng-disabled="tag.canSelect === false">{{ tag.name }}</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'tag\'].$error" ng-show="chatWebsiteFormApp[\'tag\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TAG_REQUIRED">Tag field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/chatCannedAnswers/dialog.html",'<md-dialog class="chatCannedAnswer-dialog" aria-label="New ChatCannedAnswer">\n    <form name="chatCannedAnswerForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.KEY">Key</label>\n                <input type="" name="key" ng-model="vm.chatCannedAnswer.key" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="chatCannedAnswerForm[\'key\'].$error" ng-show="chatCannedAnswerForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.VALUE">Value</label>\n                <textarea name="value" ng-model="vm.chatCannedAnswer.value" required></textarea>\n\n                <div ng-messages="chatCannedAnswerForm[\'value\'].$error" ng-show="chatCannedAnswerForm[\'value\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.chatCannedAnswer.description">\n\n                <div ng-messages="chatCannedAnswerForm[\'description\'].$error" ng-show="chatCannedAnswerForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newChatCannedAnswer" ng-click="vm.saveChatCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="chatCannedAnswerForm.$invalid || chatCannedAnswerForm.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newChatCannedAnswer" ng-click="vm.addNewChatCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="chatCannedAnswerForm.$invalid" aria-label="ADD" translate="CHAT.ADD_CHATCANNEDANSWER" translate-attr-aria-label="CHAT.ADD_CHATCANNEDANSWER">\n                    ADD CHATCANNEDANSWER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newChatCannedAnswer" ng-click="vm.deleteChatCannedAnswer($event)" aria-label="DELETE" translate translate-attr-aria-label="CHAT.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CHAT.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/chatDispositions/dialog.html",'<md-dialog class="chatDisposition-dialog" aria-label="New ChatDisposition">\n    <form name="chatDispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.chatDisposition.name" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="chatDispositionForm[\'name\'].$error" ng-show="chatDispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newChatDisposition" ng-click="vm.saveChatDisposition()" class="send-button md-accent md-raised" ng-disabled="chatDispositionForm.$invalid || chatDispositionForm.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newChatDisposition" ng-click="vm.addNewChatDisposition()" class="send-button md-accent md-raised" ng-disabled="chatDispositionForm.$invalid" aria-label="ADD" translate="CHAT.ADD_CHATDISPOSITION" translate-attr-aria-label="CHAT.ADD_CHATDISPOSITION">\n                    ADD CHATDISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newChatDisposition" ng-click="vm.deleteChatDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="CHAT.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CHAT.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/offlineMessages/dialog.html",'<md-dialog class="offlineMessage-dialog" aria-label="New OfflineMessage">\n    <md-toolbar class="md-accent md-hue-2">\n        <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n            <span class="title">{{ vm.title | translate }}</span>\n            <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n\n    <md-content flex layout-padding>\n        <pre>{{vm.message.body}}</pre>\n    </md-content>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/proactive/dialog.html",'<md-dialog class="chatProactiveAction-dialog" aria-label="New ChatProactiveAction">\n    <form name="chatProactiveActionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.chatProactiveAction.name" ng-required="true" autofocus>\n\n                <div ng-messages="chatProactiveActionForm[\'name\'].$error" ng-show="chatProactiveActionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.chatProactiveAction.type">\n\n                    <md-option ng-value="\'mouseOver\'"> {{ \'CHAT.MOUSEOVER\' | translate }} </md-option>\n\n                    <md-option ng-value="\'timeout\'"> {{ \'CHAT.TIMEOUT\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="chatProactiveActionForm[\'type\'].$error" ng-show="chatProactiveActionForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.chatProactiveAction.type === \'mouseOver\'" class="md-block">\n                <label translate="CHAT.SELECTOR">Selector</label>\n                <input type="" name="selector" ng-model="vm.chatProactiveAction.selector" ng-required="true">\n\n                <div ng-messages="chatProactiveActionForm[\'selector\'].$error" ng-show="chatProactiveActionForm[\'selector\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.SELECTOR_REQUIRED">Selector field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.chatProactiveAction.type === \'timeout\'" class="md-block">\n                <label translate="CHAT.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.chatProactiveAction.timeout" min="1" ng-required="true">\n\n                <div ng-messages="chatProactiveActionForm[\'timeout\'].$error" ng-show="chatProactiveActionForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newChatProactiveAction" ng-click="vm.saveChatProactiveAction()" class="send-button md-accent md-raised" ng-disabled="chatProactiveActionForm.$invalid || chatProactiveActionForm.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newChatProactiveAction" ng-click="vm.addNewChatProactiveAction()" class="send-button md-accent md-raised" ng-disabled="chatProactiveActionForm.$invalid" aria-label="ADD" translate="CHAT.ADD_CHATPROACTIVEACTION" translate-attr-aria-label="CHAT.ADD_CHATPROACTIVEACTION">\n                    ADD CHATPROACTIVEACTION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newChatProactiveAction" ng-click="vm.deleteChatProactiveAction($event)" aria-label="DELETE" translate translate-attr-aria-label="CHAT.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CHAT.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/view.html",'<div id="chat-chatWebsite" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-chatWebsites-button md-icon-button" aria-label="Go to chatWebsites" ng-click="vm.gotoChatWebsites()" translate translate-attr-aria-label="CHAT.GO_TO_CHATWEBSITES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="chatWebsite-image" hide-xs>\n                    <img ng-src="assets/images/business/chatWebsites.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.chatWebsite.id}}\n                        <span ng-if="vm.chatWebsite.name">{{vm.chatWebsite.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="CHAT.CREATED_AT"></span> <span>{{vm.chatWebsite.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.chatWebsite, $event)" class="md-fab md-warn md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="CHAT.AGENTADD_CHATWEBSITE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveChatWebsite()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (scriptForm.$invalid) || (intervalForm.$invalid) || (dispositionForm.$invalid) || (appearanceForm.$invalid) || (onlinestatusForm.$invalid) || (offlinestatusForm.$invalid) || (closingformForm.$invalid) || (unmanagedstatusForm.$invalid) || (interactionForm.$invalid) || (whitelabelForm.$invalid) || (logoForm.$invalid) || (agentAvatarForm.$invalid) || (customerAvatarForm.$invalid) || (systemAvatarForm.$invalid) || (chatFormOnlineForm.$invalid) || (chatFormOfflineForm.$invalid) || (proactiveForm.$invalid) || (chatDispositionsForm.$invalid) || (chatCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid) || (offlineMessagesForm.$invalid)" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CHAT.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="chatWebsite-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CHAT.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.chatWebsite.name" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.KEY">key</label>\n                                <input type="text" name="key" ng-model="vm.chatWebsite.key" md-maxlength="5" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'key\'].$error" ng-show="generalForm[\'key\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.KEY_REQUIRED">key field is required</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="CHAT.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.MOTIONADDRESS">MotionAddress</label>\n                                <input type="url" name="address" ng-model="vm.chatWebsite.address" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'address\'].$error" ng-show="generalForm[\'address\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.MOTIONADDRESS_REQUIRED">MotionAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="CHAT.ERRORS.MOTIONADDRESS_MUST_VALID_URL">MotionAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="CHAT.ERRORS.MOTIONADDRESS_MAX_LENGTH" translate-values=\'{max: 255}\'>MotionAddress must have a maximum length equal to 255</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.LIST">List</label>\n                                <md-select name="ListId" ng-model="vm.chatWebsite.ListId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="CHAT.HELP.LIST"></span></div>\n                                <div ng-messages="generalForm[\'ListId\'].$error" ng-show="generalForm[\'ListId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.LIST_REQUIRED">List field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.chatWebsite.fidelity" class="md-block">\n                                <label translate="CHAT.TIMEOUT">Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.chatWebsite.timeout" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.WAITFORTHEASSIGNEDAGENT">WaitForTheAssignedAgent</label>\n                                <input type="number" name="waitForTheAssignedAgent" ng-model="vm.chatWebsite.waitForTheAssignedAgent" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'waitForTheAssignedAgent\'].$error" ng-show="generalForm[\'waitForTheAssignedAgent\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.WAITFORTHEASSIGNEDAGENT_REQUIRED">WaitForTheAssignedAgent field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="CHAT.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="CHAT.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_LESS_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.chatWebsite.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="chatWebsite-detail-form-container notification md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CHAT.NOTIFICATION">NOTIFICATION</div>\n                        </div>\n                        <form name="notificationForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.chatWebsite.notificationSound" aria-label="notificationSound" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.NOTIFICATIONSOUND">notificationSound</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.chatWebsite.notificationShake" aria-label="notificationShake" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.NOTIFICATIONSHAKE">notificationShake</span></md-switch>\n\n                            </md-input-container>\n                            <div class="md-block">\n                                <label class="md-caption grey-fg" translate="CHAT.NOTIFICATIONTEMPLATE">notificationTemplate</label>\n                                <textarea aria-label="notificationTemplate notificationTemplate" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.chatWebsite.notificationTemplate"></textarea>\n                            </div>\n\n                        </form>\n                    </div>\n                    <div class="chatWebsite-detail-form-container transfer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CHAT.TRANSFER">TRANSFER</div>\n                        </div>\n                        <form name="transferForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.chatWebsite.queueTransfer" aria-label="queueTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.QUEUETRANSFER">queueTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.chatWebsite.queueTransfer == true" class="md-block">\n                                <label translate="CHAT.QUEUETRANSFERTIMEOUT">queueTransferTimeout</label>\n                                <input type="number" name="queueTransferTimeout" ng-model="vm.chatWebsite.queueTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'queueTransferTimeout\'].$error" ng-show="transferForm[\'queueTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.QUEUETRANSFERTIMEOUT_REQUIRED">queueTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="CHAT.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="CHAT.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.chatWebsite.agentTransfer" aria-label="agentTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.AGENTTRANSFER">agentTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.chatWebsite.agentTransfer == true" class="md-block">\n                                <label translate="CHAT.AGENTTRANSFERTIMEOUT">agentTransferTimeout</label>\n                                <input type="number" name="agentTransferTimeout" ng-model="vm.chatWebsite.agentTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'agentTransferTimeout\'].$error" ng-show="transferForm[\'agentTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.AGENTTRANSFERTIMEOUT_REQUIRED">agentTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="CHAT.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="CHAT.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CHAT.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="chatWebsite-detail-form-container script md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ChatWebsiteScriptController as vm_ac" ng-init="vm_ac.init(vm.chatWebsite)" class="content" md-background-bg>\n                            <div class="pb-16" layout="row" layout-align="start center">\n                                <div class="h2 secondary-text" translate="CHAT.SCRIPT">SCRIPT</div>\n                            </div>\n\n                            <form name="scriptForm" flex="100" novalidate>\n                                <md-input-container class="md-block">\n                                    <label translate="CHAT.TOKEN">Token</label>\n                                    <input type="text" name="token" ng-model="vm_ac.chatWebsite.token" autofocus ng-disabled="true">\n                                </md-input-container>\n                                <md-input-container class="md-block">\n                                    <label translate="CHAT.MOTIONPROXY">MotionProxy</label>\n                                    <input type="url" name="remote" ng-model="vm_ac.chatWebsite.remote" required>\n                                    <div class="hint"><span translate="CHAT.HELP.MOTIONPROXY"></span></div>\n                                    <div ng-messages="scriptForm[\'remote\'].$error" ng-show="scriptForm[\'remote\'].$touched" role="alert">\n                                        <div ng-message="required">\n                                            <span translate="CHAT.ERRORS.MOTIONPROXY_REQUIRED">Motion Proxy field is required</span>\n                                        </div>\n                                        <div ng-message="url">\n                                            <span translate="CHAT.ERRORS.MOTIONPROXY_MUST_VALID_URL">Motion Proxy must be a valid url e.g.: http://www.xcally.com</span>\n                                        </div>\n                                    </div>\n                                </md-input-container>\n                                <md-input-container class="md-block">\n                                    <label translate="CHAT.WEBSITESCRIPT">WebsiteScript</label>\n                                    <div>\n                                        <pre style="font-size: 13px;">\n                                        {{vm_ac.start}} {{vm_ac.script}} {{vm_ac.end}}\n                                        </pre>\n                                    </div>\n                                    <div class="hint"><span translate="CHAT.HELP.COPYSCRIPTTOCLIPBOARD"></span></div>\n                                </md-input-container>\n                            </form>\n                        </div>\n\n                    </div>\n                    <div class="chatWebsite-detail-form-container interval md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CHAT.INTERVAL">INTERVAL</div>\n                        </div>\n                        <form name="intervalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.INTERVAL">Interval</label>\n                                <md-select name="IntervalId" ng-model="vm.chatWebsite.IntervalId" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Always</md-option>\n                                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval" ng-disabled="IntervalId.canSelect === false">{{ IntervalId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="intervalForm[\'IntervalId\'].$error" ng-show="intervalForm[\'IntervalId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.INTERVAL_REQUIRED">Interval field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.TIMEZONE">Timezone</label>\n                                <ms-timezone name="timezone" ng-model="vm.chatWebsite.timezone" ng-disabled="!vm.crudPermissions.canEdit">\n                                    < <div class="hint"><span translate="CHAT.HELP.TIMEZONE"></span>\n                    </div>\n                    <div ng-messages="intervalForm[\'timezone\'].$error" ng-show="intervalForm[timezone].$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="CHAT.ERRORS.TIMEZONE_REQUIRED">Timezone field is required</span>\n                        </div>\n                    </div>\n                    </md-input-container>\n\n                    </form>\n    </div>\n    <div class="chatWebsite-detail-form-container disposition md-background-bg md-whiteframe-1dp">\n        <div class="pb-16" layout="row" layout-align="start center">\n            <div class="h2 secondary-text" translate="CHAT.DISPOSITION">DISPOSITION</div>\n        </div>\n        <form name="dispositionForm" novalidate>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.chatWebsite.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.chatWebsite.mandatoryDisposition" class="md-block">\n                <label translate="CHAT.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                <md-select name="mandatoryDispositionPauseId" ng-model="vm.chatWebsite.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                </md-select>\n                <div class="hint"><span translate="CHAT.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                <div ng-messages="dispositionForm[\'mandatoryDispositionPauseId\'].$error" ng-show="dispositionForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n        </form>\n    </div>\n    </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.SNIPPET">SNIPPET</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container appearance md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.APPEARANCE">APPEARANCE</div>\n                </div>\n                <form name="appearanceForm" novalidate>\n                    <div flex md-color-picker ng-model="vm.chatWebsite.color" label="{{\'CHAT.MAINCOLOR\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n                    <div flex md-color-picker ng-model="vm.chatWebsite.color_button" label="{{\'CHAT.BUTTONCOLOR\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n                    <div flex md-color-picker ng-model="vm.chatWebsite.textColor" label="{{\'CHAT.TEXTCOLOR\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n                    <div flex md-color-picker ng-model="vm.chatWebsite.backgroundColor" label="{{\'CHAT.BACKGROUNDCOLOR\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.FONTSIZE">fontSize</label>\n                        <input type="number" name="fontSize" ng-model="vm.chatWebsite.fontSize" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="appearanceForm[\'fontSize\'].$error" ng-show="appearanceForm[\'fontSize\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.FONTSIZE_REQUIRED">fontSize field is required</span>\n                            </div>\n                            <div ng-message="min">\n                                <span translate="CHAT.ERRORS.FONTSIZE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">fontSize must be a valid greater or equal than</span> <span>0</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.HEADERSHAPE">headershape</label>\n                        <md-select name="header_shape" ng-model="vm.chatWebsite.header_shape" ng-disabled="!vm.crudPermissions.canEdit">\n\n                            <md-option ng-value="\'rounded\'"> {{ \'CHAT.ROUNDED\' | translate }} </md-option>\n\n                            <md-option ng-value="\'squared\'"> {{ \'CHAT.SQUARED\' | translate }} </md-option>\n                        </md-select>\n                        <div ng-messages="appearanceForm[\'header_shape\'].$error" ng-show="appearanceForm[\'header_shape\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.HEADERSHAPE_REQUIRED">headershape field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.showAgentAvatar" aria-label="ShowAgentAvatar" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.SHOWAGENTAVATAR">ShowAgentAvatar</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.showCustomerAvatar" aria-label="showCustomerAvatar" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.SHOWCUSTOMERAVATAR">showCustomerAvatar</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.SNIPPETSWIPEOUT">snippetSwipeOut</label>\n                        <md-select name="alignment" ng-model="vm.chatWebsite.alignment" ng-disabled="!vm.crudPermissions.canEdit">\n\n                            <md-option ng-value="\'bottom_right\'"> {{ \'CHAT.BOTTOM_RIGHT\' | translate }} </md-option>\n\n                            <md-option ng-value="\'right\'"> {{ \'CHAT.RIGHT\' | translate }} </md-option>\n\n                            <md-option ng-value="\'left\'"> {{ \'CHAT.LEFT\' | translate }} </md-option>\n                        </md-select>\n                        <div ng-messages="appearanceForm[\'alignment\'].$error" ng-show="appearanceForm[\'alignment\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.SNIPPETSWIPEOUT_REQUIRED">snippetSwipeOut field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.chatWebsite.alignment !== \'bottom_right\'" class="md-block">\n                        <label translate="CHAT.VERTICALPOSITION">verticalPosition</label>\n                        <input type="number" name="verticalAlignment" ng-model="vm.chatWebsite.verticalAlignment" min="0" max="100" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div class="hint"><span translate="CHAT.HELP.VERTICALPOSITION"></span></div>\n                        <div ng-messages="appearanceForm[\'verticalAlignment\'].$error" ng-show="appearanceForm[\'verticalAlignment\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.VERTICALPOSITION_REQUIRED">verticalPosition field is required</span>\n                            </div>\n                            <div ng-message="min">\n                                <span translate="CHAT.ERRORS.VERTICALPOSITION_MUST_BE_GREATER_THAN_OR_EQUAL_TO">verticalPosition must be a valid greater or equal than</span> <span>0</span>\n                            </div>\n                            <div ng-message="max">\n                                <span translate="CHAT.ERRORS.VERTICALPOSITION_MUST_BE_LESS_THAN_OR_EQUAL_TO">verticalPosition must be a valid greater or equal than</span> <span>100</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.MESSAGESALIGNMENT">messagesAlignment</label>\n                        <md-select name="messagesAlignment" ng-model="vm.chatWebsite.messagesAlignment" ng-disabled="!vm.crudPermissions.canEdit">\n\n                            <md-option ng-value="\'alternate\'"> {{ \'CHAT.ALTERNATE\' | translate }} </md-option>\n\n                            <md-option ng-value="\'centered\'"> {{ \'CHAT.CENTERED\' | translate }} </md-option>\n                        </md-select>\n                        <div ng-messages="appearanceForm[\'messagesAlignment\'].$error" ng-show="appearanceForm[\'messagesAlignment\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.MESSAGESALIGNMENT_REQUIRED">messagesAlignment field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.DEFAULTTITLE">defaultTitle</label>\n                        <input type="text" name="defaultTitle" ng-model="vm.chatWebsite.defaultTitle" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="appearanceForm[\'defaultTitle\'].$error" ng-show="appearanceForm[\'defaultTitle\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.DEFAULTTITLE_REQUIRED">defaultTitle field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.DEFAULTTITLE_MAX_LENGTH" translate-values=\'{max: 255}\'>defaultTitle must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div class="chatWebsite-detail-form-container onlinestatus md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.ONLINESTATUS">ONLINESTATUS</div>\n                </div>\n                <form name="onlinestatusForm" novalidate>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.HEADER_ONLINE">header_online</label>\n                        <input type="text" name="header_online" ng-model="vm.chatWebsite.header_online" md-maxlength="255" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="onlinestatusForm[\'header_online\'].$error" ng-show="onlinestatusForm[\'header_online\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.HEADER_ONLINE_REQUIRED">header_online field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.HEADER_ONLINE_MAX_LENGTH" translate-values=\'{max: 255}\'>header_online must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.START_CHAT_BUTTON">start_chat_button</label>\n                        <input type="text" name="start_chat_button" ng-model="vm.chatWebsite.start_chat_button" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="onlinestatusForm[\'start_chat_button\'].$error" ng-show="onlinestatusForm[\'start_chat_button\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.START_CHAT_BUTTON_REQUIRED">start_chat_button field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.START_CHAT_BUTTON_MAX_LENGTH" translate-values=\'{max: 255}\'>start_chat_button must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div class="chatWebsite-detail-form-container offlinestatus md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.OFFLINESTATUS">OFFLINESTATUS</div>\n                </div>\n                <form name="offlinestatusForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.hideWhenOffline" aria-label="hideWhenOffline" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.HIDEWHENOFFLINE">hideWhenOffline</span></md-switch>\n\n                        <div class="hint"><span translate="CHAT.HELP.HIDEWHENOFFLINE"></span></div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.HEADER_OFFLINE">header_offline</label>\n                        <input type="text" name="header_offline" ng-model="vm.chatWebsite.header_offline" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="offlinestatusForm[\'header_offline\'].$error" ng-show="offlinestatusForm[\'header_offline\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.HEADER_OFFLINE_REQUIRED">header_offline field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.HEADER_OFFLINE_MAX_LENGTH" translate-values=\'{max: 255}\'>header_offline must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.OFFLINE_CHAT_BUTTON">offline_chat_button</label>\n                        <input type="text" name="offline_chat_button" ng-model="vm.chatWebsite.offline_chat_button" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="offlinestatusForm[\'offline_chat_button\'].$error" ng-show="offlinestatusForm[\'offline_chat_button\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.OFFLINE_CHAT_BUTTON_REQUIRED">offline_chat_button field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.OFFLINE_CHAT_BUTTON_MAX_LENGTH" translate-values=\'{max: 255}\'>offline_chat_button must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.OFFLINEMESSAGESUBJECT">offlineMessageSubject</label>\n                        <input type="text" name="offlineMessageSubject" ng-model="vm.chatWebsite.offlineMessageSubject" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="offlinestatusForm[\'offlineMessageSubject\'].$error" ng-show="offlinestatusForm[\'offlineMessageSubject\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.OFFLINEMESSAGESUBJECT_REQUIRED">offlineMessageSubject field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.OFFLINEMESSAGESUBJECT_MAX_LENGTH" translate-values=\'{max: 255}\'>offlineMessageSubject must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.OFFLINEMESSAGEBODY">offlineMessageBody</label>\n                        <input type="text" name="offlineMessageBody" ng-model="vm.chatWebsite.offlineMessageBody" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="offlinestatusForm[\'offlineMessageBody\'].$error" ng-show="offlinestatusForm[\'offlineMessageBody\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.OFFLINEMESSAGEBODY_REQUIRED">offlineMessageBody field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.OFFLINEMESSAGEBODY_MAX_LENGTH" translate-values=\'{max: 255}\'>offlineMessageBody must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div class="chatWebsite-detail-form-container closingform md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.CLOSINGFORM">CLOSINGFORM</div>\n                </div>\n                <form name="closingformForm" novalidate>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.CLOSINGMESSAGE">closingMessage</label>\n                        <textarea name="closingMessage" ng-model="vm.chatWebsite.closingMessage" md-maxlength="255" required autofocus></textarea>\n\n                        <div ng-messages="closingformForm[\'closingMessage\'].$error" ng-show="closingformForm[\'closingMessage\'].$touched" role="alert">\n\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.CLOSINGMESSAGE_REQUIRED">closingMessage field is required</span>\n                            </div>\n\n\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.CLOSINGMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>closingMessage must have a maximum length equal to 255</span>\n                            </div>\n\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.SKIPMESSAGEBUTTON">skipMessageButton</label>\n                        <input type="text" name="skipMessageButton" ng-model="vm.chatWebsite.skipMessageButton" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="closingformForm[\'skipMessageButton\'].$error" ng-show="closingformForm[\'skipMessageButton\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.SKIPMESSAGEBUTTON_REQUIRED">skipMessageButton field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.SKIPMESSAGEBUTTON_MAX_LENGTH" translate-values=\'{max: 255}\'>skipMessageButton must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.enableRating" aria-label="enableRating" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.ENABLERATING">enableRating</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="vm.chatWebsite.enableRating" class="md-block">\n                        <label translate="CHAT.RATINGTYPE">ratingType</label>\n                        <md-select name="ratingType" ng-model="vm.chatWebsite.ratingType" ng-disabled="!vm.crudPermissions.canEdit">\n                            <md-option ng-value="\'star\'">Star</md-option>\n                            <md-option ng-value="\'thumb\'">Thumb</md-option>\n                        </md-select>\n                        <div ng-messages="closingformForm[\'ratingType\'].$error" ng-show="closingformForm[\'ratingType\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.RATINGTYPE_REQUIRED">ratingType field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.chatWebsite.enableRating && vm.chatWebsite.ratingType === \'star\'" class="md-block">\n                        <label translate="CHAT.RATINGSTARSNUMBER">ratingStarsNumber</label>\n                        <input type="number" name="ratingStarsNumber" ng-model="vm.chatWebsite.ratingStarsNumber" min="2" max="5" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="closingformForm[\'ratingStarsNumber\'].$error" ng-show="closingformForm[\'ratingStarsNumber\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.RATINGSTARSNUMBER_REQUIRED">ratingStarsNumber field is required</span>\n                            </div>\n                            <div ng-message="min">\n                                <span translate="CHAT.ERRORS.RATINGSTARSNUMBER_MUST_BE_GREATER_THAN_OR_EQUAL_TO">ratingStarsNumber must be a valid greater or equal than</span> <span>2</span>\n                            </div>\n                            <div ng-message="max">\n                                <span translate="CHAT.ERRORS.RATINGSTARSNUMBER_MUST_BE_LESS_THAN_OR_EQUAL_TO">ratingStarsNumber must be a valid greater or equal than</span> <span>5</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.enableFeedback" aria-label="enableFeedback" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.ENABLEFEEDBACK">enableFeedback</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.forwardTranscript" aria-label="forwardTranscript" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.FORWARDTRANSCRIPT">forwardTranscript</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="vm.chatWebsite.forwardTranscript" class="md-block">\n                        <label translate="CHAT.FORWARDTRANSCRIPTMESSAGE">forwardTranscriptMessage</label>\n                        <input type="text" name="forwardTranscriptMessage" ng-model="vm.chatWebsite.forwardTranscriptMessage" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="closingformForm[\'forwardTranscriptMessage\'].$error" ng-show="closingformForm[\'forwardTranscriptMessage\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.FORWARDTRANSCRIPTMESSAGE_REQUIRED">forwardTranscriptMessage field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.FORWARDTRANSCRIPTMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>forwardTranscriptMessage must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.CLOSINGMESSAGEBUTTON">closingMessageButton</label>\n                        <input type="text" name="closingMessageButton" ng-model="vm.chatWebsite.closingMessageButton" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="closingformForm[\'closingMessageButton\'].$error" ng-show="closingformForm[\'closingMessageButton\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.CLOSINGMESSAGEBUTTON_REQUIRED">closingMessageButton field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.CLOSINGMESSAGEBUTTON_MAX_LENGTH" translate-values=\'{max: 255}\'>closingMessageButton must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div class="chatWebsite-detail-form-container unmanagedstatus md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.UNMANAGEDSTATUS">UNMANAGEDSTATUS</div>\n                </div>\n                <form name="unmanagedstatusForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.autoclose" aria-label="autoclose" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.AUTOCLOSE">autoclose</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.enableUnmanagedNote" aria-label="enableUnmanagedNote" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.ENABLEUNMANAGEDNOTE">enableUnmanagedNote</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.UNMANAGEDMESSAGE">unmanagedMessage</label>\n                        <input type="text" name="unmanagedMessage" ng-model="vm.chatWebsite.unmanagedMessage" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="unmanagedstatusForm[\'unmanagedMessage\'].$error" ng-show="unmanagedstatusForm[\'unmanagedMessage\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.UNMANAGEDMESSAGE_REQUIRED">unmanagedMessage field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.UNMANAGEDMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>unmanagedMessage must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.SKIPUNMANAGED">skipUnmanaged</label>\n                        <input type="text" name="skipUnmanaged" ng-model="vm.chatWebsite.skipUnmanaged" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="unmanagedstatusForm[\'skipUnmanaged\'].$error" ng-show="unmanagedstatusForm[\'skipUnmanaged\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.SKIPUNMANAGED_REQUIRED">skipUnmanaged field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.SKIPUNMANAGED_MAX_LENGTH" translate-values=\'{max: 255}\'>skipUnmanaged must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.chatWebsite.enableUnmanagedNote" class="md-block">\n                        <label translate="CHAT.SENDUNMANAGED">sendUnmanaged</label>\n                        <input type="text" name="sendUnmanaged" ng-model="vm.chatWebsite.sendUnmanaged" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="unmanagedstatusForm[\'sendUnmanaged\'].$error" ng-show="unmanagedstatusForm[\'sendUnmanaged\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.SENDUNMANAGED_REQUIRED">sendUnmanaged field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.SENDUNMANAGED_MAX_LENGTH" translate-values=\'{max: 255}\'>sendUnmanaged must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div class="chatWebsite-detail-form-container interaction md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.INTERACTION">INTERACTION</div>\n                </div>\n                <form name="interactionForm" novalidate>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.AGENTIDENTIFIER">agentIdentifier</label>\n                        <md-select name="agentIdentifier" ng-model="vm.chatWebsite.agentIdentifier" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                            <md-option ng-value="\'website_alias\'"> {{ \'CHAT.WEBSITEALIAS\' | translate }} </md-option>\n\n                            <md-option ng-value="\'agent_alias\'"> {{ \'CHAT.AGENTALIAS\' | translate }} </md-option>\n\n                            <md-option ng-value="\'agent_fullname\'"> {{ \'CHAT.AGENTFULLNAME\' | translate }} </md-option>\n                        </md-select>\n                        <div class="hint"><span translate="CHAT.HELP.AGENTIDENTIFIER"></span></div>\n                        <div ng-messages="interactionForm[\'agentIdentifier\'].$error" ng-show="interactionForm[\'agentIdentifier\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.AGENTIDENTIFIER_REQUIRED">agentIdentifier field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.CUSTOMERALIAS">customerAlias</label>\n                        <input type="text" name="customerAlias" ng-model="vm.chatWebsite.customerAlias" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'customerAlias\'].$error" ng-show="interactionForm[\'customerAlias\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.CUSTOMERALIAS_REQUIRED">customerAlias field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.CUSTOMERALIAS_MAX_LENGTH" translate-values=\'{max: 255}\'>customerAlias must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.MESSAGEFONTSIZE">messageFontSize</label>\n                        <input type="number" name="messageFontSize" ng-model="vm.chatWebsite.messageFontSize" min="0" max="20" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'messageFontSize\'].$error" ng-show="interactionForm[\'messageFontSize\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.MESSAGEFONTSIZE_REQUIRED">messageFontSize field is required</span>\n                            </div>\n                            <div ng-message="min">\n                                <span translate="CHAT.ERRORS.MESSAGEFONTSIZE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">messageFontSize must be a valid greater or equal than</span> <span>0</span>\n                            </div>\n                            <div ng-message="max">\n                                <span translate="CHAT.ERRORS.MESSAGEFONTSIZE_MUST_BE_LESS_THAN_OR_EQUAL_TO">messageFontSize must be a valid greater or equal than</span> <span>20</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.chatWebsite.agentIdentifier === \'website_alias\'" class="md-block">\n                        <label translate="CHAT.WEBSITEALIAS">WebsiteAlias</label>\n                        <input type="text" name="agentAlias" ng-model="vm.chatWebsite.agentAlias" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div class="hint"><span translate="CHAT.HELP.WEBSITEALIAS"></span></div>\n                        <div ng-messages="interactionForm[\'agentAlias\'].$error" ng-show="interactionForm[\'agentAlias\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.WEBSITEALIAS_REQUIRED">WebsiteAlias field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.WEBSITEALIAS_MAX_LENGTH" translate-values=\'{max: 255}\'>WebsiteAlias must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.CLOSINGQUESTION">closingQuestion</label>\n                        <input type="text" name="closingQuestion" ng-model="vm.chatWebsite.closingQuestion" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'closingQuestion\'].$error" ng-show="interactionForm[\'closingQuestion\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.CLOSINGQUESTION_REQUIRED">closingQuestion field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.CLOSINGQUESTION_MAX_LENGTH" translate-values=\'{max: 255}\'>closingQuestion must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.FORMSUBMITSUCCESSMESSAGE">formSubmitSuccessMessage</label>\n                        <input type="text" name="formSubmitSuccessMessage" ng-model="vm.chatWebsite.formSubmitSuccessMessage" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'formSubmitSuccessMessage\'].$error" ng-show="interactionForm[\'formSubmitSuccessMessage\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.FORMSUBMITSUCCESSMESSAGE_REQUIRED">formSubmitSuccessMessage field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.FORMSUBMITSUCCESSMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>formSubmitSuccessMessage must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.FORMSUBMITFAILUREMESSAGE">formSubmitFailureMessage</label>\n                        <input type="text" name="formSubmitFailureMessage" ng-model="vm.chatWebsite.formSubmitFailureMessage" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'formSubmitFailureMessage\'].$error" ng-show="interactionForm[\'formSubmitFailureMessage\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.FORMSUBMITFAILUREMESSAGE_REQUIRED">formSubmitFailureMessage field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.FORMSUBMITFAILUREMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>formSubmitFailureMessage must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.enableCustomerWriting" aria-label="enableCustomerWriting" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.ENABLECUSTOMERWRITING">enableCustomerWriting</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="!vm.chatWebsite.enableCustomerWriting" class="md-block">\n                        <label translate="CHAT.WAITINGTITLE">waitingTitle</label>\n                        <input type="text" name="waitingTitle" ng-model="vm.chatWebsite.waitingTitle" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'waitingTitle\'].$error" ng-show="interactionForm[\'waitingTitle\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.WAITINGTITLE_REQUIRED">waitingTitle field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.WAITINGTITLE_MAX_LENGTH" translate-values=\'{max: 255}\'>waitingTitle must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="!vm.chatWebsite.enableCustomerWriting" class="md-block">\n                        <label translate="CHAT.WAITINGMESSAGE">waitingMessage</label>\n                        <textarea name="waitingMessage" ng-model="vm.chatWebsite.waitingMessage" md-maxlength="255" required></textarea>\n\n                        <div ng-messages="interactionForm[\'waitingMessage\'].$error" ng-show="interactionForm[\'waitingMessage\'].$touched" role="alert">\n\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.WAITINGMESSAGE_REQUIRED">waitingMessage field is required</span>\n                            </div>\n\n\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.WAITINGMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>waitingMessage must have a maximum length equal to 255</span>\n                            </div>\n\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.NOTETITLE">noteTitle</label>\n                        <input type="text" name="noteTitle" ng-model="vm.chatWebsite.noteTitle" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'noteTitle\'].$error" ng-show="interactionForm[\'noteTitle\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.NOTETITLE_REQUIRED">noteTitle field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.NOTETITLE_MAX_LENGTH" translate-values=\'{max: 255}\'>noteTitle must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.PLACEHOLDERMESSAGE">placeholderMessage</label>\n                        <input type="text" name="placeholderMessage" ng-model="vm.chatWebsite.placeholderMessage" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'placeholderMessage\'].$error" ng-show="interactionForm[\'placeholderMessage\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.PLACEHOLDERMESSAGE_REQUIRED">placeholderMessage field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.PLACEHOLDERMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>placeholderMessage must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.download_transcript" aria-label="downloadTranscript" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.DOWNLOADTRANSCRIPT">downloadTranscript</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.enableCustomerAttachment" aria-label="enableCustomerAttachment" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.ENABLECUSTOMERATTACHMENT">enableCustomerAttachment</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.enableCustomerCheckmarks" aria-label="enableCustomerCheckmarks" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.ENABLECUSTOMERCHECKMARKS">enableCustomerCheckmarks</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.SYSTEMALIAS">systemAlias</label>\n                        <input type="text" name="systemAlias" ng-model="vm.chatWebsite.systemAlias" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'systemAlias\'].$error" ng-show="interactionForm[\'systemAlias\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.SYSTEMALIAS_REQUIRED">systemAlias field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.SYSTEMALIAS_MAX_LENGTH" translate-values=\'{max: 255}\'>systemAlias must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div ng-if="vm.license.custom" class="chatWebsite-detail-form-container whitelabel md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.WHITELABEL">WHITELABEL</div>\n                </div>\n                <form name="whitelabelForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.defaultWhiteLabel" aria-label="default" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.DEFAULT">default</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="!vm.chatWebsite.defaultWhiteLabel" class="md-block">\n                        <label translate="CHAT.WHITELABEL">whiteLabel</label>\n                        <textarea name="whiteLabel" ng-model="vm.chatWebsite.whiteLabel" md-maxlength="255" required></textarea>\n\n                        <div ng-messages="whitelabelForm[\'whiteLabel\'].$error" ng-show="whitelabelForm[\'whiteLabel\'].$touched" role="alert">\n\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.WHITELABEL_REQUIRED">whiteLabel field is required</span>\n                            </div>\n\n\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.WHITELABEL_MAX_LENGTH" translate-values=\'{max: 255}\'>whiteLabel must have a maximum length equal to 255</span>\n                            </div>\n\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div ng-if="vm.license.custom" class="chatWebsite-detail-form-container logo md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.LOGO">LOGO</div>\n                </div>\n                <div ng-controller="ChatWebsitelogoController as vm_ca" ng-init="vm_ca.init(vm.chatWebsite, vm.crudPermissions)" class="chatWebsite-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="chatWebsite-image-uploader" flow-init="vm_ca.ngFlowOptions" flow-name="vm_ca.ngFlow.flow" flow-files-submitted="vm_ca.upload()" flow-file-added="vm_ca.fileAdded($file)" flow-file-success="vm_ca.fileSuccess($file, $message)" flow-complete="vm_ca.uploadComplete()" flow-drop flow-drag-enter="vm_ca.dropping=true" flow-drag-leave="vm_ca.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn ng-disabled="!vm_ca.crudPermissions.canEdit">\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="logoimage in vm_ca.chatWebsite.images" ng-switch="logoimage.type">\n                                <div class="chatWebsite-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{logoimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="logoimage.file">\n                                </div>\n\n                                <div class="chatWebsite-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{logoimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n            <div class="chatWebsite-detail-form-container agentavatar md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.AGENTAVATAR">AGENTAVATAR</div>\n                </div>\n                <div ng-controller="ChatWebsiteagentAvatarController as vm_ca" ng-init="vm_ca.init(vm.chatWebsite, vm.crudPermissions)" class="chatWebsite-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="chatWebsite-image-uploader" flow-init="vm_ca.ngFlowOptions" flow-name="vm_ca.ngFlow.flow" flow-files-submitted="vm_ca.upload()" flow-file-added="vm_ca.fileAdded($file)" flow-file-success="vm_ca.fileSuccess($file, $message)" flow-complete="vm_ca.uploadComplete()" flow-drop flow-drag-enter="vm_ca.dropping=true" flow-drag-leave="vm_ca.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn ng-disabled="!vm_ca.crudPermissions.canEdit">\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="agentAvatarimage in vm_ca.chatWebsite.images" ng-switch="agentAvatarimage.type">\n                                <div class="chatWebsite-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{agentAvatarimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="agentAvatarimage.file">\n                                </div>\n\n                                <div class="chatWebsite-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{agentAvatarimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n            <div class="chatWebsite-detail-form-container customeravatar md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.CUSTOMERAVATAR">CUSTOMERAVATAR</div>\n                </div>\n                <div ng-controller="ChatWebsitecustomerAvatarController as vm_ca" ng-init="vm_ca.init(vm.chatWebsite, vm.crudPermissions)" class="chatWebsite-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="chatWebsite-image-uploader" flow-init="vm_ca.ngFlowOptions" flow-name="vm_ca.ngFlow.flow" flow-files-submitted="vm_ca.upload()" flow-file-added="vm_ca.fileAdded($file)" flow-file-success="vm_ca.fileSuccess($file, $message)" flow-complete="vm_ca.uploadComplete()" flow-drop flow-drag-enter="vm_ca.dropping=true" flow-drag-leave="vm_ca.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn ng-disabled="!vm_ca.crudPermissions.canEdit">\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="customerAvatarimage in vm_ca.chatWebsite.images" ng-switch="customerAvatarimage.type">\n                                <div class="chatWebsite-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{customerAvatarimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="customerAvatarimage.file">\n                                </div>\n\n                                <div class="chatWebsite-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{customerAvatarimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n            <div class="chatWebsite-detail-form-container systemavatar md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.SYSTEMAVATAR">SYSTEMAVATAR</div>\n                </div>\n                <div ng-controller="ChatWebsitesystemAvatarController as vm_ca" ng-init="vm_ca.init(vm.chatWebsite, vm.crudPermissions)" class="chatWebsite-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="chatWebsite-image-uploader" flow-init="vm_ca.ngFlowOptions" flow-name="vm_ca.ngFlow.flow" flow-files-submitted="vm_ca.upload()" flow-file-added="vm_ca.fileAdded($file)" flow-file-success="vm_ca.fileSuccess($file, $message)" flow-complete="vm_ca.uploadComplete()" flow-drop flow-drag-enter="vm_ca.dropping=true" flow-drag-leave="vm_ca.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn ng-disabled="!vm_ca.crudPermissions.canEdit">\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="systemAvatarimage in vm_ca.chatWebsite.images" ng-switch="systemAvatarimage.type">\n                                <div class="chatWebsite-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{systemAvatarimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="systemAvatarimage.file">\n                                </div>\n\n                                <div class="chatWebsite-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{systemAvatarimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.ONLINE">ONLINE</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container chatformonline md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteonlineFormController as vm_fonc" ng-init="vm_fonc.init(vm.chatWebsite)" class="content" md-background-bg layout="column">\n                    <div flex>\n                        \x3c!-- START Buttons --\x3e\n                        <md-button aria-label="comment" class="md-fab md-mini" ng-click="vm_fonc.add(button.type)" ng-repeat="button in vm_fonc.buttons">\n                            <md-tooltip md-direction="top">{{button.name}}</md-tooltip>\n                            <md-icon md-font-icon="{{button.icon}}"></md-icon>\n                        </md-button>\n                        \x3c!-- END Buttons --\x3e\n                    </div>\n\n                    <div layout="row" flex>\n                        <div flex="50">\n                            <md-card>\n                                <md-card-title>\n                                    <md-card-title-text>\n                                        <div class="pb-16" layout="row" layout-align="start center">\n                                            <div class="h2 secondary-text" translate="CHAT.BUILDER">BUILDER</div>\n                                        </div>\n                                    </md-card-title-text>\n                                </md-card-title>\n                                <md-card-content>\n\n                                    <form name="onlineForm" novalidate>\n\n                                        \x3c!-- START MapKey --\x3e\n                                        <md-input-container class="md-block" ng-if="vm_fonc.chatWebsite.onlineForm.items.length">\n                                            <label translate="CHAT.HELP.MAPKEY">MapKey</label>\n                                            <md-select ng-model="vm_fonc.chatWebsite.mapKey">\n                                                <md-option ng-value="null">None</md-option>\n\n                                                <md-optgroup label="standard">\n                                                    <md-option ng-repeat="field in vm_fonc.fields" ng-value="field.key">{{ field.value }}</md-option>\n                                                </md-optgroup>\n\n                                                <md-optgroup label="custom" ng-if="vm_fonc.customFields.length">\n                                                    <md-option ng-repeat="field in vm_fonc.customFields" ng-value="field.key">{{ field.value }}</md-option>\n                                                </md-optgroup>\n                                            </md-select>\n                                        </md-input-container>\n                                        \x3c!-- END MapKey --\x3e\n\n                                        \x3c!-- START FromKey --\x3e\n                                        <md-input-container class="md-block" ng-if="vm_fonc.chatWebsite.onlineForm.items.length">\n                                            <label translate="CHAT.HELP.FROMKEY">FromKey</label>\n                                            <md-select ng-model="vm_fonc.chatWebsite.onlineForm.fromKey" md-selected-text="vm_fonc.chatWebsite.onlineForm.fromKey != null ? vm_fonc.chatWebsite.onlineForm.items[vm_fonc.chatWebsite.onlineForm.fromKey].props.title : \'None\'">\n                                                <md-option ng-value="null">None</md-option>\n                                                <md-option ng-repeat="item in vm_fonc.chatWebsite.onlineForm.items" ng-if="item.props.title" ng-value="$index">{{ item.props.title }}</md-option>\n                                            </md-select>\n                                        </md-input-container>\n                                        \x3c!-- END FromKey --\x3e\n\n                                        \x3c!-- START EXPANSION PANELS --\x3e\n                                        <md-expansion-panel ng-repeat="item in vm_fonc.chatWebsite.onlineForm.items track by $index" md-component-id="{{\'onlinePanel\' + $index}}">\n                                            <md-expansion-panel-collapsed md-no-sticky="true">\n                                                <md-button class="md-icon-button" aria-label="Down" ng-click="vm_fonc.down(item, $index); $event.stopPropagation()">\n                                                    <md-icon md-font-icon="icon-arrow-down-bold-circle-outline"></md-icon>\n                                                </md-button>\n                                                <md-button class="md-icon-button" aria-label="Up" ng-click="vm_fonc.up(item, $index); $event.stopPropagation()">\n                                                    <md-icon md-font-icon="icon-arrow-up-bold-circle-outline"></md-icon>\n                                                </md-button>\n\n                                                <div class="md-title">{{item.props.title || item.type}}</div>\n\n                                                <div flex></div>\n                                                <md-button class="md-icon-button" aria-label="Collapse" ng-click="$panel.collapse()">\n                                                    <md-icon md-font-icon="icon-chevron-down"></md-icon>\n                                                </md-button>\n                                            </md-expansion-panel-collapsed>\n\n                                            <md-expansion-panel-expanded>\n                                                <md-expansion-panel-header>\n                                                    <md-button class="md-icon-button" aria-label="Down" ng-click="vm_fonc.down(item, $index)">\n                                                        <md-icon md-font-icon="icon-arrow-down-bold-circle-outline"></md-icon>\n                                                    </md-button>\n                                                    <md-button class="md-icon-button" aria-label="Up" ng-click="vm_fonc.up(item, $index)">\n                                                        <md-icon md-font-icon="icon-arrow-up-bold-circle-outline"></md-icon>\n                                                    </md-button>\n\n                                                    <div class="md-title">{{item.props.title || item.type}}</div>\n\n                                                    <div flex></div>\n\n                                                    <md-button class="md-icon-button md-warn" aria-label="Remove" ng-click="vm_fonc.remove($index)">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                    <md-button class="md-icon-button" aria-label="Collapse" ng-click="$panel.collapse()">\n                                                        <md-icon md-font-icon="icon-chevron-up"></md-icon>\n                                                    </md-button>\n                                                </md-expansion-panel-header>\n\n                                                <md-expansion-panel-content>\n                                                    <form-item type="{{item.type}}" item="item" index="$index"></form-item>\n\n                                                    <md-input-container class="md-block">\n                                                        <label translate="CHAT.VARIABLE">Variable</label>\n                                                        <md-select ng-model="item.variable">\n                                                            <md-option ng-value="null">None</md-option>\n                                                            <md-option ng-repeat="variable in vm_fonc.variables" ng-value="variable.name">{{ variable.name }}</md-option>\n                                                        </md-select>\n                                                    </md-input-container>\n\n                                                    <md-input-container class="md-block">\n                                                        <label translate="CHAT.CM_FIELD">Contact Manager Field</label>\n                                                        <md-select ng-model="item.cmField">\n                                                            <md-option ng-value="null">None</md-option>\n\n                                                            <md-optgroup label="standard">\n                                                                <md-option ng-repeat="field in vm_fonc.fields" ng-value="field.key">{{ field.value }}</md-option>\n                                                            </md-optgroup>\n\n                                                            <md-optgroup label="custom" ng-if="vm_fonc.customFields.length">\n                                                                <md-option ng-repeat="field in vm_fonc.customFields" ng-value="field.key">{{ field.value }}</md-option>\n                                                            </md-optgroup>\n                                                        </md-select>\n                                                    </md-input-container>\n                                                </md-expansion-panel-content>\n\n                                            </md-expansion-panel-expanded>\n                                        </md-expansion-panel>\n                                        \x3c!-- END EXPANSION PANELS --\x3e\n                                    </form>\n\n                                </md-card-content>\n                            </md-card>\n                        </div>\n                        <div flex="50">\n                            <md-card>\n                                <md-card-title>\n                                    <md-card-title-text>\n                                        <div class="pb-16" layout="row" layout-align="start center">\n                                            <div class="h2 secondary-text" translate="CHAT.PREVIEW">PREVIEW</div>\n                                        </div>\n                                    </md-card-title-text>\n                                </md-card-title>\n                                <md-card-content flex>\n                                    <form-view form="vm_fonc.chatWebsite.onlineForm" flex="100"></form-view>\n                                </md-card-content>\n                            </md-card>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.OFFLINE">OFFLINE</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container chatformoffline md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteofflineFormController as vm_fonc" ng-init="vm_fonc.init(vm.chatWebsite)" class="content" md-background-bg layout="column">\n                    <div flex>\n                        \x3c!-- START Buttons --\x3e\n                        <md-button aria-label="comment" class="md-fab md-mini" ng-click="vm_fonc.add(button.type)" ng-repeat="button in vm_fonc.buttons">\n                            <md-tooltip md-direction="top">{{button.name}}</md-tooltip>\n                            <md-icon md-font-icon="{{button.icon}}"></md-icon>\n                        </md-button>\n                        \x3c!-- END Buttons --\x3e\n                    </div>\n\n                    <div layout="row" flex>\n                        <div flex="50">\n                            <md-card>\n                                <md-card-title>\n                                    <md-card-title-text>\n                                        <div class="pb-16" layout="row" layout-align="start center">\n                                            <div class="h2 secondary-text" translate="CHAT.BUILDER">BUILDER</div>\n                                        </div>\n                                    </md-card-title-text>\n                                </md-card-title>\n                                <md-card-content>\n\n                                    <form name="offlineForm" novalidate>\n                                        <md-input-container class="md-block">\n                                            <md-switch ng-model="vm_fonc.chatWebsite.forwardOffline" aria-label="forwardOffline"><span translate="CHAT.FORWARD_OFFLINE">forwardOffline</span></md-switch>\n                                        </md-input-container>\n\n                                        <md-input-container class="md-block" ng-if="vm_fonc.chatWebsite.forwardOffline">\n                                            <label translate="CHAT.FORWARD_OFFLINE_ADDRESS">FORWARD OFFLINE ADDRESS</label>\n                                            <input type="text" name="forwardOfflineAddress" ng-model="vm_fonc.chatWebsite.forwardOfflineAddress">\n                                            <div class="hint"><span translate="CHAT.HELP.FORWARD_OFFLINE"></span></div>\n                                            <div ng-messages="offlineForm[\'forwardOfflineAddress\'].$error" ng-show="offlineForm[\'forwardOfflineAddress\'].$touched" role="alert">\n                                                <div ng-message="email">\n                                                    <span translate="CHAT.ERRORS.EMAIL_MUST_BE_VALID">forwardOffline must be a valid e-mail address</span>\n                                                </div>\n                                            </div>\n                                        </md-input-container>\n\n                                        \x3c!-- START MapKey --\x3e\n                                        <md-input-container class="md-block" ng-if="vm_fonc.chatWebsite.offlineForm.items.length">\n                                            <label translate="CHAT.HELP.MAPKEY">MapKey</label>\n                                            <md-select ng-model="vm_fonc.chatWebsite.mapKeyOffline">\n                                                <md-option ng-value="null">None</md-option>\n\n                                                <md-optgroup label="standard">\n                                                    <md-option ng-repeat="field in vm_fonc.fields" ng-value="field.key">{{ field.value }}</md-option>\n                                                </md-optgroup>\n\n                                                <md-optgroup label="custom" ng-if="vm_fonc.customFields.length">\n                                                    <md-option ng-repeat="field in vm_fonc.customFields" ng-value="field.key">{{ field.value }}</md-option>\n                                                </md-optgroup>\n                                            </md-select>\n                                        </md-input-container>\n                                        \x3c!-- END MapKey --\x3e\n\n                                        \x3c!-- START FromKey --\x3e\n                                        <md-input-container class="md-block" ng-if="vm_fonc.chatWebsite.offlineForm.items.length">\n                                            <label translate="CHAT.HELP.FROMKEY">FromKey</label>\n                                            <md-select ng-model="vm_fonc.chatWebsite.offlineForm.fromKey" md-selected-text="vm_fonc.chatWebsite.offlineForm.fromKey != null ? vm_fonc.chatWebsite.offlineForm.items[vm_fonc.chatWebsite.offlineForm.fromKey].props.title : \'None\'">\n                                                <md-option ng-value="null">None</md-option>\n                                                <md-option ng-repeat="item in vm_fonc.chatWebsite.offlineForm.items" ng-if="item.props.title" ng-value="$index">{{ item.props.title }}</md-option>\n                                            </md-select>\n                                        </md-input-container>\n                                        \x3c!-- END FromKey --\x3e\n\n                                        \x3c!-- START EXPANSION PANELS --\x3e\n                                        <md-expansion-panel ng-repeat="item in vm_fonc.chatWebsite.offlineForm.items track by $index" md-component-id="{{\'offlinePanel\' + $index}}">\n                                            <md-expansion-panel-collapsed md-no-sticky="true">\n                                                <md-button class="md-icon-button" aria-label="Down" ng-click="vm_fonc.down(item, $index); $event.stopPropagation()">\n                                                    <md-icon md-font-icon="icon-arrow-down-bold-circle-outline"></md-icon>\n                                                </md-button>\n                                                <md-button class="md-icon-button" aria-label="Up" ng-click="vm_fonc.up(item, $index); $event.stopPropagation()">\n                                                    <md-icon md-font-icon="icon-arrow-up-bold-circle-outline"></md-icon>\n                                                </md-button>\n\n                                                <div class="md-title">{{item.props.title || item.type}}</div>\n\n                                                <div flex></div>\n                                                <md-button class="md-icon-button" aria-label="Collapse" ng-click="$panel.collapse()">\n                                                    <md-icon md-font-icon="icon-chevron-down"></md-icon>\n                                                </md-button>\n                                            </md-expansion-panel-collapsed>\n\n                                            <md-expansion-panel-expanded>\n                                                <md-expansion-panel-header>\n                                                    <md-button class="md-icon-button" aria-label="Down" ng-click="vm_fonc.down(item, $index)">\n                                                        <md-icon md-font-icon="icon-arrow-down-bold-circle-outline"></md-icon>\n                                                    </md-button>\n                                                    <md-button class="md-icon-button" aria-label="Up" ng-click="vm_fonc.up(item, $index)">\n                                                        <md-icon md-font-icon="icon-arrow-up-bold-circle-outline"></md-icon>\n                                                    </md-button>\n\n                                                    <div class="md-title">{{item.props.title || item.type}}</div>\n\n                                                    <div flex></div>\n\n                                                    <md-button class="md-icon-button md-warn" aria-label="Remove" ng-click="vm_fonc.remove($index)">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                    <md-button class="md-icon-button" aria-label="Collapse" ng-click="$panel.collapse()">\n                                                        <md-icon md-font-icon="icon-chevron-up"></md-icon>\n                                                    </md-button>\n                                                </md-expansion-panel-header>\n\n                                                <md-expansion-panel-content>\n                                                    <form-item type="{{item.type}}" item="item" index="$index"></form-item>\n\n\n                                                    <md-input-container class="md-block">\n                                                        <label translate="CHAT.CM_FIELD">Contact Manager Field</label>\n                                                        <md-select ng-model="item.cmField">\n                                                            <md-option ng-value="null">None</md-option>\n\n                                                            <md-optgroup label="standard">\n                                                                <md-option ng-repeat="field in vm_fonc.fields" ng-value="field.key">{{ field.value }}</md-option>\n                                                            </md-optgroup>\n\n                                                            <md-optgroup label="custom" ng-if="vm_fonc.customFields.length">\n                                                                <md-option ng-repeat="field in vm_fonc.customFields" ng-value="field.key">{{ field.value }}</md-option>\n                                                            </md-optgroup>\n                                                        </md-select>\n                                                    </md-input-container>\n                                                </md-expansion-panel-content>\n\n                                            </md-expansion-panel-expanded>\n                                        </md-expansion-panel>\n                                        \x3c!-- END EXPANSION PANELS --\x3e\n                                    </form>\n\n                                </md-card-content>\n                            </md-card>\n                        </div>\n                        <div flex="50">\n                            <md-card>\n                                <md-card-title>\n                                    <md-card-title-text>\n                                        <div class="pb-16" layout="row" layout-align="start center">\n                                            <div class="h2 secondary-text" translate="CHAT.PREVIEW">PREVIEW</div>\n                                        </div>\n                                    </md-card-title-text>\n                                </md-card-title>\n                                <md-card-content flex>\n                                    <form-view form="vm_fonc.chatWebsite.offlineForm" flex="100"></form-view>\n                                </md-card-content>\n                            </md-card>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.PROACTIVEACTIONS">PROACTIVEACTIONS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container proactive md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteProactiveActionsController as vm_dc" ng-init="vm_dc.init(vm.chatWebsite, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedChatWebsiteProactiveActions.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="CHAT.PROACTIVEACTIONS">ProactiveActions</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event)" aria-label="add chatProactiveAction" translate translate-attr-label="CHAT.ADD_CHATPROACTIVEACTION">\n                                <md-icon md-font-icon="icon-plus"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedChatWebsiteProactiveActions.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedChatWebsiteProactiveActions.length}} {{vm_dc.selectedChatWebsiteProactiveActions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedChatWebsiteProactiveActions" csv-label="true" filename="chatWebsites.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedChatWebsiteProactiveActions($event)" aria-label="delete selected" translate translate-attr-label="CHATWEBSITES.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedChatWebsiteProactiveActions" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getChatWebsiteProactiveActions">\n                                <tr md-row>\n                                    <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                    <th md-column md-order-by="name">{{ \'CHAT.NAME\' | translate }}</th>\n                                    <th md-column md-order-by="type">{{ \'CHAT.TYPE\' | translate }}</th>\n                                    <th md-column md-order-by="selector">{{ \'CHAT.SELECTOR\' | translate }}</th>\n                                    <th md-column md-order-by="timeout">{{ \'CHAT.TIMEOUT\' | translate }}</th>\n                                    <th md-column md-order-by="createdAt">{{ \'CHAT.CREATED_AT\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="chatProactiveAction" md-select-id="id" ng-repeat="chatProactiveAction in vm_dc.chatWebsiteProactiveActions.rows">\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" md-cell>{{chatProactiveAction.id}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" md-cell>{{chatProactiveAction.name}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" md-cell>{{ \'CHAT.\' + vm_dc.arraytype[chatProactiveAction.type].option | uppercase | translate }}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" md-cell>{{chatProactiveAction.selector}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" md-cell>{{chatProactiveAction.timeout}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" md-cell>{{chatProactiveAction.createdAt | date:\'medium\'}}</td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" translate="CHAT.EDIT_CHATPROACTIVEACTION">\n                                                        Edit ChatProactiveAction\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(chatProactiveAction, $event)" translate="CHAT.DELETE_CHATPROACTIVEACTION">\n                                                        Delete ChatProactiveAction\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.chatWebsiteProactiveActions.rows.length">\n                                    <td md-cell colspan="8">\n                                        <span class="text-boxed-ligth" translate="CHAT.NO_CHATPROACTIVEACTION_AVAILABLE">No chatproactiveaction available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.chatWebsiteProactiveActions.count}}" md-on-paginate="vm_dc.getChatWebsiteProactiveActions" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.DISPOSITIONS">DISPOSITIONS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container chatdispositions md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteChatDispositionsController as vm_dc" ng-init="vm_dc.init(vm.chatWebsite, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedChatWebsiteChatDispositions.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="CHAT.CHATDISPOSITIONS">ChatDispositions</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditChatWebsiteChatDisposition($event)" aria-label="add chatDisposition" translate translate-attr-label="CHAT.ADD_CHATDISPOSITION">\n                                <md-icon md-font-icon="icon-plus"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedChatWebsiteChatDispositions.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedChatWebsiteChatDispositions.length}} {{vm_dc.selectedChatWebsiteChatDispositions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedChatWebsiteChatDispositions" csv-label="true" filename="chatWebsites.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedChatWebsiteChatDispositions($event)" aria-label="delete selected" translate translate-attr-label="CHATWEBSITES.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedChatWebsiteChatDispositions" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getChatWebsiteChatDispositions">\n                                <tr md-row>\n                                    <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                    <th md-column md-order-by="name">{{ \'CHAT.NAME\' | translate }}</th>\n                                    <th md-column md-order-by="createdAt">{{ \'CHAT.CREATED_AT\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="chatDisposition" md-select-id="id" ng-repeat="chatDisposition in vm_dc.chatWebsiteChatDispositions.rows">\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatDisposition($event, chatDisposition)" md-cell>{{chatDisposition.id}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatDisposition($event, chatDisposition)" md-cell>{{chatDisposition.name}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatDisposition($event, chatDisposition)" md-cell>{{chatDisposition.createdAt | date:\'medium\'}}</td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.createOrEditChatWebsiteChatDisposition($event, chatDisposition)" translate="CHAT.EDIT_CHATDISPOSITION">\n                                                        Edit ChatDisposition\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(chatDisposition, $event)" translate="CHAT.DELETE_CHATDISPOSITION">\n                                                        Delete ChatDisposition\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.chatWebsiteChatDispositions.rows.length">\n                                    <td md-cell colspan="5">\n                                        <span class="text-boxed-ligth" translate="CHAT.NO_CHATDISPOSITION_AVAILABLE">No chatdisposition available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.chatWebsiteChatDispositions.count}}" md-on-paginate="vm_dc.getChatWebsiteChatDispositions" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.CANNEDANSWERS">CANNEDANSWERS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container chatcannedanswers md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteChatCannedAnswersController as vm_dc" ng-init="vm_dc.init(vm.chatWebsite, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedChatWebsiteChatCannedAnswers.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="CHAT.CHATCANNEDANSWERS">ChatCannedAnswers</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event)" aria-label="add chatCannedAnswer" translate translate-attr-label="CHAT.ADD_CHATCANNEDANSWER">\n                                <md-icon md-font-icon="icon-plus"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedChatWebsiteChatCannedAnswers.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedChatWebsiteChatCannedAnswers.length}} {{vm_dc.selectedChatWebsiteChatCannedAnswers.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedChatWebsiteChatCannedAnswers" csv-label="true" filename="chatWebsites.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedChatWebsiteChatCannedAnswers($event)" aria-label="delete selected" translate translate-attr-label="CHATWEBSITES.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedChatWebsiteChatCannedAnswers" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getChatWebsiteChatCannedAnswers">\n                                <tr md-row>\n                                    <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                    <th md-column md-order-by="key">{{ \'CHAT.KEY\' | translate }}</th>\n                                    <th md-column md-order-by="value">{{ \'CHAT.VALUE\' | translate }}</th>\n                                    <th md-column md-order-by="description">{{ \'CHAT.DESCRIPTION\' | translate }}</th>\n                                    <th md-column md-order-by="createdAt">{{ \'CHAT.CREATED_AT\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="chatCannedAnswer" md-select-id="id" ng-repeat="chatCannedAnswer in vm_dc.chatWebsiteChatCannedAnswers.rows">\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event, chatCannedAnswer)" md-cell>{{chatCannedAnswer.id}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event, chatCannedAnswer)" md-cell>{{chatCannedAnswer.key}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event, chatCannedAnswer)" md-cell>{{chatCannedAnswer.value}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event, chatCannedAnswer)" md-cell>{{chatCannedAnswer.description}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event, chatCannedAnswer)" md-cell>{{chatCannedAnswer.createdAt | date:\'medium\'}}</td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event, chatCannedAnswer)" translate="CHAT.EDIT_CHATCANNEDANSWER">\n                                                        Edit ChatCannedAnswer\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(chatCannedAnswer, $event)" translate="CHAT.DELETE_CHATCANNEDANSWER">\n                                                        Delete ChatCannedAnswer\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.chatWebsiteChatCannedAnswers.rows.length">\n                                    <td md-cell colspan="7">\n                                        <span class="text-boxed-ligth" translate="CHAT.NO_CHATCANNEDANSWER_AVAILABLE">No chatcannedanswer available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.chatWebsiteChatCannedAnswers.count}}" md-on-paginate="vm_dc.getChatWebsiteChatCannedAnswers" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.ACTIONS">ACTIONS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteActionsController as vm_ac" ng-init="vm_ac.init(vm.chatWebsite, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                    \x3c!-- SIDENAV --\x3e\n                    <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                        \x3c!-- SIDENAV CONTENT --\x3e\n                        <md-list class="no-padding">\n                            <md-subheader class="md-no-sticky">\n                                <span translate="VOICE.APPLICATIONS_LIST">\n                                    Applications List\n                                </span>\n                            </md-subheader>\n                        </md-list>\n                        <md-divider></md-divider>\n                        <md-list ng-sortable="vm_ac.list">\n                            <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                <p class="text-truncate" translate="CHAT.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                            </md-list-item>\n                        </md-list>\n                        \x3c!-- / SIDENAV CONTENT --\x3e\n                    </div>\n                    \x3c!-- / SIDENAV --\x3e\n                    <div flex></div>\n                    \x3c!-- MAIN --\x3e\n                    <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                        <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedChatWebsiteApps.length">\n                            <div class="md-toolbar-tools">\n                                <span class="md-subhead">Drag & Drop Routing</span>\n                                <div flex></div>\n                                <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                            </div>\n                        </md-toolbar>\n                        <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedChatWebsiteApps.length">\n                            <div class="md-toolbar-tools">\n                                <span class="md-subhead">{{vm_ac.selectedChatWebsiteApps.length}} {{vm_ac.selectedChatWebsiteApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                <div flex></div>\n                                <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedChatWebsiteApps($event)" aria-label="delete selected" translate translate-attr-label="CHAT.DELETE_SELECTED">\n                                    <md-icon md-font-icon="icon-delete"></md-icon>\n                                </md-button>\n                            </div>\n                        </md-toolbar>\n\n                        \x3c!-- QUEUES TABLE --\x3e\n                        <md-table-container>\n                            <table md-table md-row-select multiple ng-model="vm_ac.selectedChatWebsiteApps">\n                                <thead md-head>\n                                    <tr md-row>\n                                        <th md-column width="10px"></th>\n                                        <th md-column width="10px">\n                                            <span translate="VOICE.PRIORITY">Priority</span>\n                                        </th>\n                                        <th md-column>\n                                            <span>Type</span>\n                                        </th>\n                                        <th md-column>\n                                            <span>Appdata</span>\n                                        </th>\n                                        <th md-column>\n                                            <span>Interval</span>\n                                        </th>\n                                        <th md-column width="10px"></th>\n                                        <th md-column width="10px"></th>\n                                    </tr>\n                                </thead>\n                                <tbody md-body ng-sortable="vm_ac.applications">\n                                    <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.chatWebsiteApps.rows | filter: vm_ac.query.filter">\n                                        <td md-cell>\n                                            <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                        </td>\n                                        <td md-cell ng-click="vm_ac.editChatWebsiteApp($event, $index)"><span>{{app.priority}}</span></td>\n                                        <td md-cell ng-click="vm_ac.editChatWebsiteApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                        <td md-cell ng-click="vm_ac.editChatWebsiteApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                        <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                        <td md-cell>\n                                            <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                <md-icon md-font-icon="icon-timer"></md-icon>\n                                                <md-tooltip>\n                                                    {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                </md-tooltip>\n                                            </md-button>\n                                        </td>\n                                        <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                            <md-menu>\n                                                <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                    <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                </md-button>\n\n                                                <md-menu-content width="3">\n                                                    <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                        <md-button ng-click="vm_ac.editChatWebsiteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                            Edit App\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                    <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                        <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                            Edit Interval\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                    <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                        <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                            Delete App\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                </md-menu-content>\n                                            </md-menu>\n                                        </td>\n                                    </tr>\n                                    <tr md-row ng-hide="vm_ac.chatWebsiteApps.rows.length">\n                                        <td md-cell colspan="7">\n                                            <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                        </td>\n                                    </tr>\n                                </tbody>\n                            </table>\n                        </md-table-container>\n                        \x3c!-- / QUEUES TABLE --\x3e\n\n                        \x3c!-- NO RESULTS --\x3e\n\n                        \x3c!-- / NO RESULTS --\x3e\n                    </div>\n                    \x3c!-- / MAIN --\x3e\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.INTERACTIONS">INTERACTIONS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container interactions md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteInteractionsController as vm_dc" ng-init="vm_dc.init(vm.chatWebsite, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedChatWebsiteInteractions.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="CHAT.INTERACTIONS">Interactions</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getChatWebsiteInteractions()" aria-label="refresh Interactions" translate translate-attr-label="CHAT.REFRESH_INTERACTIONS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedChatWebsiteInteractions.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedChatWebsiteInteractions.length}} {{vm_dc.selectedChatWebsiteInteractions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedChatWebsiteInteractions" csv-label="true" filename="chatWebsites.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedChatWebsiteInteractions($event)" aria-label="delete selected" translate translate-attr-label="CHATWEBSITES.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedChatWebsiteInteractions" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getChatWebsiteInteractions">\n                                <tr md-row>\n                                    <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                    <th md-column md-order-by="createdAt">{{ \'CHAT.STARTEDAT\' | translate }}</th>\n                                    <th md-column md-order-by="closedAt">{{ \'CHAT.CLOSEDAT\' | translate }}</th>\n                                    <th md-column>{{ \'CHAT.CONTACT\' | translate }}</th>\n                                    <th md-column>{{ \'CHAT.AGENT\' | translate }}</th>\n                                    <th md-column md-order-by="disposition">{{ \'CHAT.DISPOSITION\' | translate }}</th>\n                                    <th md-column md-order-by="ratingValue">{{ \'CHAT.RATING\' | translate }}</th>\n                                    <th md-column md-order-by="note">{{ \'CHAT.NOTES\' | translate }}</th>\n                                    <th md-column md-order-by="tag">{{ \'CHAT.TAGS\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="interaction" md-select-id="id" ng-repeat="interaction in vm_dc.chatWebsiteInteractions.rows">\n                                    <td md-cell>{{interaction.id}}</td>\n                                    <td md-cell>{{interaction.createdAt | date:\'medium\'}}</td>\n                                    <td md-cell>{{interaction.closedAt | date:\'medium\'}}</td>\n                                    <td md-cell>{{interaction.Contact.firstName}}</td>\n                                    <td md-cell>{{interaction.Owner.name}}</td>\n                                    <td md-cell>{{interaction.disposition}}</td>\n                                    <td md-cell>\n                                        <md-icon md-font-icon="icon-star" style="color:red" ng-show="interaction.ratingValue != null && (!interaction.ratingType || interaction.ratingType == \'star\')" ng-repeat="ratingValue in [1,2,3,4,5] | limitTo:interaction.ratingValue"></md-icon>\n                                        <md-icon md-font-icon="icon-thumb-up" style="color:green" ng-show="interaction.ratingValue != null && interaction.ratingType && interaction.ratingType == \'thumb\' && interaction.ratingValue == 1"></md-icon>\n                                        <md-icon md-font-icon="icon-thumb-down" style="color:red" ng-show="interaction.ratingValue != null && interaction.ratingType && interaction.ratingType == \'thumb\' && interaction.ratingValue == 0"></md-icon><span ng-show="interaction.ratingValue == null" translate="CHAT.NO_RATINGVALUE">No ratingValue</span>\n                                    </td>\n                                    <td md-cell>{{interaction.note}}</td>\n                                    <td md-cell>\n                                        <div ng-if="interaction.Tags.length">\n                                            <md-tooltip md-direction="left" layout="row">\n                                                <span ng-repeat="tag in interaction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                            </md-tooltip>\n                                            <md-icon md-font-icon="icon-tag"></md-icon>\n                                        </div>\n                                    </td>\n                                    <td md-cell class="actions">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item>\n                                                    <md-button ng-click="vm_dc.spychatInteraction($event, interaction)" translate="CHAT.SPYINTERACTION">\n                                                        Spy Interaction\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item>\n                                                    <md-button class="md-primary" ng-click="vm_dc.chatInteractionDownload(interaction, $event)" translate="CHAT.DOWNLOAD_INTERACTION">\n                                                        Download Interaction\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(interaction, $event)" translate="CHAT.DELETE_INTERACTION">\n                                                        Delete Interaction\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.chatWebsiteInteractions.rows.length">\n                                    <td md-cell colspan="15">\n                                        <span class="text-boxed-ligth" translate="CHAT.NO_INTERACTION_AVAILABLE">No interaction available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.chatWebsiteInteractions.count}}" md-on-paginate="vm_dc.getChatWebsiteInteractions" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.OFFLINEMESSAGES">OFFLINEMESSAGES</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container offlinemessages md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteOfflineMessagesController as vm_dc" ng-init="vm_dc.init(vm.chatWebsite, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedChatWebsiteOfflineMessages.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="CHAT.OFFLINEMESSAGES">OfflineMessages</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedChatWebsiteOfflineMessages.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedChatWebsiteOfflineMessages.length}} {{vm_dc.selectedChatWebsiteOfflineMessages.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedChatWebsiteOfflineMessages" csv-label="true" filename="chatWebsites.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedChatWebsiteOfflineMessages($event)" aria-label="delete selected" translate translate-attr-label="CHATWEBSITES.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedChatWebsiteOfflineMessages" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getChatWebsiteOfflineMessages">\n                                <tr md-row>\n                                    <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                    <th md-column md-order-by="ContactId">{{ \'CHAT.CONTACT\' | translate }}</th>\n                                    <th md-column md-order-by="createdAt">{{ \'CHAT.CREATED_AT\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="offlineMessage" md-select-id="id" ng-repeat="offlineMessage in vm_dc.chatWebsiteOfflineMessages.rows">\n                                    <td md-cell>{{offlineMessage.id}}</td>\n                                    <td md-cell>{{ (vm_dc.contacts | filter : {\'id\':offlineMessage.ContactId})[0].firstName }}</td>\n                                    <td md-cell>{{offlineMessage.createdAt | date:\'medium\'}}</td>\n                                    <td md-cell class="actions">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item>\n                                                    <md-button ng-click="vm_dc.showOfflineMessageChatWebsiteOfflineMessage($event, offlineMessage)" translate="CHAT.SHOW_OFFLINEMESSAGE">\n                                                        SHOW OfflineMessage\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(offlineMessage, $event)" translate="CHAT.DELETE_OFFLINEMESSAGE">\n                                                        Delete OfflineMessage\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.chatWebsiteOfflineMessages.rows.length">\n                                    <td md-cell colspan="5">\n                                        <span class="text-boxed-ligth" translate="CHAT.NO_OFFLINEMESSAGE_AVAILABLE">No offlinemessage available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.chatWebsiteOfflineMessages.count}}" md-on-paginate="vm_dc.getChatWebsiteOfflineMessages" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    </md-tabs>\n\n</div>\n\x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/chat/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="CHAT.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'CHAT.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'CHAT.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'CHAT.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'CHAT.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'CHAT.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'CHAT.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'CHAT.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'CHAT.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'CHAT.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'CHAT.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'CHAT.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'CHAT.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"CHAT.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"CHAT.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"CHAT.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"CHAT.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"CHAT.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"CHAT.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"CHAT.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"CHAT.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'CHAT.PAGE' | translate}}:', rowsPerPage: '{{'CHAT.ROWSPERPAGE' | translate}}:', of: '{{'CHAT.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/chat/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="CHAT.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'CHAT.NAME\' | translate }}</th>\n                <th md-column>{{ \'CHAT.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'CHAT.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'CHAT.READY\' | translate }}</th>\n                <th md-column>{{ \'CHAT.WAITING\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="7">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="CHAT.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditChatQueue($event, vm.queues[value])" translate="CHAT.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="CHAT.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/chat/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CHAT.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CHAT.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/contactmanager/views/companies/companies.html",'<div id="companies" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-circle" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CONTACTMANAGER.COMPANIES">Companies</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CONTACTMANAGER.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedCompanies.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedCompanies =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CONTACTMANAGER.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-companies-count">\n                    <span>{{vm.selectedCompanies.length}}</span>\n                    <span translate="CONTACTMANAGER.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="COMPANIES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllCompanies()" translate="CONTACTMANAGER.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectCompanies()" translate="CONTACTMANAGER.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedCompanies" csv-label="true" filename="companies.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedCompanies($event)" aria-label="delete selected" translate translate-attr-label="COMPANIES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- COMPANY TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedCompanies" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getCompanies">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'CONTACTMANAGER.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'CONTACTMANAGER.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.companies.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="company" md-select-id="id" ng-repeat="company in vm.companies.rows">\n                                <td md-cell ng-if="company.userpic"><img class="avatar" alt="{{company.name}}" ng-src="api/users/{{company.id}}/avatar" /></td>\n                                <td md-cell ng-if="!company.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{company.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(company, ev) : vm.createOrEditCompany($event, company)" md-cell class="id ">{{company.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(company, ev) : vm.createOrEditCompany($event, company)" md-cell class="name ">{{company.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(company, ev) : vm.createOrEditCompany($event, company)" md-cell class="description ">{{company.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(company, $event    )" translate="CONTACTMANAGER.EDIT_COMPANY">\n                                                    Edit Company\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotocontactsgoto(company, $event    )" translate="CONTACTMANAGER.GOTOCONTACTS_COMPANY">\n                                                    goToContacts Company\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(company, $event    )" translate="CONTACTMANAGER.DELETE_COMPANY">\n                                                    Delete Company\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.companies.count}}" md-on-paginate="vm.getCompanies" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / COMPANY TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD COMPANY BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-company-button" ng-click="vm.createOrEditCompany($event)" aria-label="add company" translate translate-attr-aria-label="CONTACTMANAGER.ADD_COMPANY">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD COMPANY BUTTON --\x3e\n</div>'),e.put("app/main/apps/contactmanager/views/companies/create/dialog.html",'<md-dialog class="company-dialog" aria-label="New Company">\n    <form name="companyForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.company.name" ng-required="true" autofocus>\n\n                <div ng-messages="companyForm[\'name\'].$error" ng-show="companyForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.PHONE">Phone</label>\n                <input type="text" name="phone" ng-model="vm.company.phone">\n\n                <div ng-messages="companyForm[\'phone\'].$error" ng-show="companyForm[\'phone\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.VAT">Vat</label>\n                <input type="text" name="vat" ng-model="vm.company.vat">\n\n                <div ng-messages="companyForm[\'vat\'].$error" ng-show="companyForm[\'vat\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.VAT_REQUIRED">Vat field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.FAX">Fax</label>\n                <input type="text" name="fax" ng-model="vm.company.fax">\n\n                <div ng-messages="companyForm[\'fax\'].$error" ng-show="companyForm[\'fax\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.FAX_REQUIRED">Fax field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.COMPANYID">CompanyId</label>\n                <input type="text" name="companyId" ng-model="vm.company.companyId">\n\n                <div ng-messages="companyForm[\'companyId\'].$error" ng-show="companyForm[\'companyId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.COMPANYID_REQUIRED">CompanyId field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.TYPE">Type</label>\n                <input type="text" name="type" ng-model="vm.company.type">\n\n                <div ng-messages="companyForm[\'type\'].$error" ng-show="companyForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.WEBSITE">Website</label>\n                <input type="text" name="website" ng-model="vm.company.website" md-maxlength="255">\n\n                <div ng-messages="companyForm[\'website\'].$error" ng-show="companyForm[\'website\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.WEBSITE_REQUIRED">Website field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="CONTACTMANAGER.ERRORS.WEBSITE_MAX_LENGTH" translate-values=\'{max: 255}\'>Website must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.EMAIL_DOMAIN">Email_Domain</label>\n                <input type="text" name="emailDomain" ng-model="vm.company.emailDomain">\n\n                <div ng-messages="companyForm[\'emailDomain\'].$error" ng-show="companyForm[\'emailDomain\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.EMAIL_DOMAIN_REQUIRED">Email_Domain field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.company.email">\n\n                <div ng-messages="companyForm[\'email\'].$error" ng-show="companyForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="CONTACTMANAGER.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.company.description">\n\n                <div ng-messages="companyForm[\'description\'].$error" ng-show="companyForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newCompany" ng-click="vm.saveCompany()" class="send-button md-accent md-raised" ng-disabled="companyForm.$invalid || companyForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newCompany" ng-click="vm.addNewCompany()" class="send-button md-accent md-raised" ng-disabled="companyForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_COMPANY" translate-attr-aria-label="CONTACTMANAGER.ADD_COMPANY">\n                    ADD COMPANY\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newCompany" ng-click="vm.deleteCompany($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/companies/edit/view.html",'<div id="contactmanager-company" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-companies-button md-icon-button" aria-label="Go to companies" ng-click="vm.gotoCompanies()" translate translate-attr-aria-label="CONTACTMANAGER.GO_TO_COMPANIES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="company-image" hide-xs>\n                    <img ng-src="assets/images/business/companies.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.company.id}}\n                        <span ng-if="vm.company.name">{{vm.company.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="CONTACTMANAGER.CREATED_AT"></span> <span>{{vm.company.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.company, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="CONTACTMANAGER.GOTO_COMPANY"></span></md-tooltip>\n                <md-icon md-font-icon="icon-forward"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveCompany()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (addressForm.$invalid) || (shipmentAddressForm.$invalid)" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.GENERAL">GENERAL</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="company-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CONTACTMANAGER.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.company.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.PHONE">Phone</label>\n                                <input type="text" name="phone" ng-model="vm.company.phone" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'phone\'].$error" ng-show="generalForm[\'phone\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.VAT">Vat</label>\n                                <input type="text" name="vat" ng-model="vm.company.vat" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'vat\'].$error" ng-show="generalForm[\'vat\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.VAT_REQUIRED">Vat field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.FAX">Fax</label>\n                                <input type="text" name="fax" ng-model="vm.company.fax" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'fax\'].$error" ng-show="generalForm[\'fax\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.FAX_REQUIRED">Fax field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.COMPANYID">CompanyId</label>\n                                <input type="text" name="companyId" ng-model="vm.company.companyId" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'companyId\'].$error" ng-show="generalForm[\'companyId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.COMPANYID_REQUIRED">CompanyId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.TYPE">Type</label>\n                                <input type="text" name="type" ng-model="vm.company.type" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.WEBSITE">Website</label>\n                                <input type="text" name="website" ng-model="vm.company.website" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'website\'].$error" ng-show="generalForm[\'website\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.WEBSITE_REQUIRED">Website field is required</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="CONTACTMANAGER.ERRORS.WEBSITE_MAX_LENGTH" translate-values=\'{max: 255}\'>Website must have a maximum length equal to 255</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.EMAIL_DOMAIN">Email_Domain</label>\n                                <input type="text" name="emailDomain" ng-model="vm.company.emailDomain" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'emailDomain\'].$error" ng-show="generalForm[\'emailDomain\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.EMAIL_DOMAIN_REQUIRED">Email_Domain field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.EMAIL">Email</label>\n                                <input type="email" name="email" ng-model="vm.company.email" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'email\'].$error" ng-show="generalForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="CONTACTMANAGER.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.company.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.ADDRESS">ADDRESS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="company-detail-form-container address md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CONTACTMANAGER.ADDRESS">ADDRESS</div>\n                        </div>\n                        <form name="addressForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.STREET">Street</label>\n                                <input type="text" name="street" ng-model="vm.company.street" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="addressForm[\'street\'].$error" ng-show="addressForm[\'street\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.STREET_REQUIRED">Street field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.POSTAL_CODE">Postal_Code</label>\n                                <input type="text" name="postalCode" ng-model="vm.company.postalCode" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="addressForm[\'postalCode\'].$error" ng-show="addressForm[\'postalCode\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.POSTAL_CODE_REQUIRED">Postal_Code field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.CITY">City</label>\n                                <input type="text" name="city" ng-model="vm.company.city" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="addressForm[\'city\'].$error" ng-show="addressForm[\'city\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.CITY_REQUIRED">City field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.COUNTRY">Country</label>\n                                <input type="text" name="country" ng-model="vm.company.country" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="addressForm[\'country\'].$error" ng-show="addressForm[\'country\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.COUNTRY_REQUIRED">Country field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.SHIPMENTADDRESS">SHIPMENTADDRESS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="company-detail-form-container shipmentaddress md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CONTACTMANAGER.SHIPMENTADDRESS">SHIPMENTADDRESS</div>\n                        </div>\n                        <form name="shipmentAddressForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.STREET">Street</label>\n                                <input type="text" name="sStreet" ng-model="vm.company.sStreet" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="shipmentAddressForm[\'sStreet\'].$error" ng-show="shipmentAddressForm[\'sStreet\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.STREET_REQUIRED">Street field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.POSTAL_CODE">Postal_Code</label>\n                                <input type="text" name="sPostalCode" ng-model="vm.company.sPostalCode" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="shipmentAddressForm[\'sPostalCode\'].$error" ng-show="shipmentAddressForm[\'sPostalCode\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.POSTAL_CODE_REQUIRED">Postal_Code field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.CITY">City</label>\n                                <input type="text" name="sCity" ng-model="vm.company.sCity" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="shipmentAddressForm[\'sCity\'].$error" ng-show="shipmentAddressForm[\'sCity\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.CITY_REQUIRED">City field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.COUNTRY">Country</label>\n                                <input type="text" name="sCountry" ng-model="vm.company.sCountry" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="shipmentAddressForm[\'sCountry\'].$error" ng-show="shipmentAddressForm[\'sCountry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.COUNTRY_REQUIRED">Country field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/contactmanager/views/contacts/contacts.html",'<div id="contacts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-multiple" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CONTACTMANAGER.CONTACTS">Contacts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        \x3c!-- SEARCH --\x3e\n        <div class="search-input-wrapper" layout="row" layout-align="start center">\n            <label for="search">\n                <md-icon md-font-icon="icon-magnify"></md-icon>\n            </label>\n            <md-input-container md-no-float class="m-0">\n                <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CONTACTMANAGER.SEARCH_FOR_ANYONE">\n            </md-input-container>\n        </div>\n        \x3c!-- / SEARCH --\x3e\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedContacts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n        <div class="close-button-wrapper" ng-click="vm.selectedContacts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CONTACTMANAGER.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n            <div>\n                <span class="selected-contacts-count">\n                    <span>{{vm.selectedContacts.length}}</span>\n                    <span translate="CONTACTMANAGER.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CONTACTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllContacts()" translate="CONTACTMANAGER.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectContacts()" translate="CONTACTMANAGER.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedContacts" csv-label="true" filename="contacts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button ng-if="vm.crudPermissions.canDelete" class="md-icon-button" ng-click="vm.deleteSelectedContacts($event)" aria-label="delete selected" translate translate-attr-label="CONTACTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n            <div layout="row">\n                <div class="column" flex="20">\n                    <md-card>\n                        <md-card-content>\n                            <button layout-align="center center" md-mini-fab ng-click="vm.selectedList = null; vm.selectedCompany = null; vm.selectedTags = []">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>{{ \'CONTACTMANAGER.ALL_CONTACTS\' | translate }}\n                            </button>\n                        </md-card-content>\n                    </md-card>\n                    <md-card>\n                        <md-card-content>\n                            <md-input-container class="md-block" flex-gt-sm="">\n                                <label translate="CONTACTMANAGER.SELECT_LIST">Select a list</label>\n                                <md-select placeholder="Select a list" ng-model="vm.selectedList" ng-disabled="vm.lists.count === 0">\n                                    <md-option ng-value="null"><em translate="CONTACTMANAGER.ALL">All</em></md-option>\n                                    <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">{{list.name}}</md-option>\n                                </md-select>\n                            </md-input-container>\n                        </md-card-content>\n                    </md-card>\n                    <md-card>\n                        <md-card-content>\n                            <md-input-container class="md-block" flex-gt-sm="">\n                                <label translate="CONTACTMANAGER.SELECT_COMPANY">Select a company</label>\n                                <md-select placeholder="Select a company" flex="100" ng-model="vm.selectedCompany" ng-disabled="vm.companies.count === 0">\n                                    <md-option ng-value="null"><em translate="CONTACTMANAGER.ALL">All</em></md-option>\n                                    <md-option ng-value="company.id" ng-repeat="company in vm.companies.rows">{{company.name}}</md-option>\n                                </md-select>\n                            </md-input-container>\n                        </md-card-content>\n                    </md-card>\n                    <md-card>\n                        <md-card-content>\n                            <md-input-container class="md-block" flex-gt-sm="">\n                                <label translate="CONTACTMANAGER.SELECT_TAGS">Select one or more tags</label>\n                                <md-select multiple placeholder="Select one or more tags" flex="100" ng-model="vm.query.tag" ng-change="vm.getContacts()">\n                                    <md-option ng-value="tag.id" ng-repeat="tag in vm.tags.rows">{{tag.name}}</md-option>\n                                </md-select>\n                            </md-input-container>\n                        </md-card-content>\n                    </md-card>\n                </div>\n\n                \x3c!-- USER TABLE --\x3e\n                <md-card flex="80">\n                    <md-table-container ng-init="vm.getAssignedCompanies()">\n                        <table md-table md-row-select multiple ng-model="vm.selectedContacts" md-progress="vm.promise">\n                            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getContacts">\n                                <tr md-row>\n                                    <th md-column md-order-by="id">ID</th>\n                                    <th md-column md-order-by="firstName">{{\'CONTACTMANAGER.FULLNAME\' | translate}}</th>\n                                    <th md-column md-order-by="phone">{{\'CONTACTMANAGER.PHONE\' | translate}}</th>\n                                    <th md-column md-order-by="email">{{\'CONTACTMANAGER.EMAIL\' | translate}}</th>\n                                    <th md-column md-order-by="createdAt">{{\'CONTACTMANAGER.CREATED_AT\' | translate}}</th>\n                                    <th md-column md-order-by="ListId">{{\'CONTACTMANAGER.LIST\' | translate}}</th>\n                                    <th md-column md-order-by="CompanyId">{{\'CONTACTMANAGER.COMPANY\' | translate}}</th>\n                                    <th md-column md-order-by="tags">{{\'CONTACTMANAGER.TAGS\' | translate}}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row ng-hide="vm.contacts.rows.length">\n                                    <td md-cell colspan="8">\n                                        <div layout="row" layout-align="center center">\n                                            <span tranlsate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                        </div>\n                                    </td>\n                                </tr>\n                                <tr md-row md-select="contact" md-select-id="id" ng-repeat="contact in vm.contacts.rows">\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="id">{{contact.id}}</td>\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="firstName">{{contact.firstName}} {{contact.lastName}}</td>\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="phone">{{contact.phone}}</td>\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="email">{{contact.email}}</td>\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="createdAt">{{contact.createdAt | date:\'medium\'}}</td>\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="list">{{vm.listsMap[contact.ListId]}}</td>\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="company">{{vm.companiesMap[contact.CompanyId]}}</td>\n                                    <td md-cell class="tag">\n                                        <div ng-if="contact.Tags.length">\n                                            <div ng-if="contact.Tags.length == 1" layout="column" layout-align="center center">\n                                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': contact.Tags[0].color }"></md-icon>\n                                                <span class="text-truncate">{{contact.Tags[0].name}}</span>\n                                            </div>\n                                            <div ng-if="contact.Tags.length > 1" layout="column" layout-align="center center">\n                                                <md-tooltip md-direction="left" layout="row">\n                                                    <span ng-repeat="tag in contact.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                                </md-tooltip>\n                                                <md-icon md-font-icon="icon-tag"></md-icon>\n                                            </div>\n                                        </div>\n                                    </td>\n                                    <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm.editdialog(contact, ev)" translate="CONTACTMANAGER.EDIT_CONTACT">\n                                                        Edit Contact\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm.mergeContact(ev, contact)" translate="CONTACTMANAGER.MERGE_CONTACT">\n                                                        Merge Contact\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm.duplicateContact(ev, contact)" translate="CONTACTMANAGER.DUPLICATE_CONTACT">\n                                                        Duplicate Contact\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-divider ng-if="vm.crudPermissions.canEdit && vm.crudPermissions.canDelete"></md-menu-divider>\n                                                <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm.deleteconfirm(contact, ev)" translate="CONTACTMANAGER.DELETE_CONTACT">\n                                                        Delete Contact\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n\n                    <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.contacts.count}}" md-on-paginate="vm.getContacts" md-page-select></md-table-pagination>\n                </md-card>\n                \x3c!-- / USER TABLE --\x3e\n            </div>\n        </div>\n        \x3c!-- / MAIN --\x3e\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD USER BUTTON --\x3e\n    <md-fab-speed-dial id="add-contact-button" ng-if="vm.crudPermissions.canEdit" ng-hide="vm.options.hidden" md-direction="up" md-open="vm.options.isOpen" class="md-scale md-fab" ng-class="{ \'md-hover-full\': vm.options.hover }" ng-mouseenter="vm.options.isOpen=true" ng-mouseleave="vm.options.isOpen=false">\n        <md-fab-trigger>\n            <md-button aria-label="menu" class="md-fab md-accent">\n                <md-icon md-font-icon="icon-plus"></md-icon>\n            </md-button>\n        </md-fab-trigger>\n        <md-fab-actions>\n            <md-button class="md-fab md-mini md-warn" flow-btn flow-init="vm.ngFlowOptions" flow-files-submitted="$flow.upload()" flow-file-success="vm.importContacts($file, $message, $flow)" flow-file-added="vm.fileAdded($file)" aria-label="Select File" translate translate-attr-aria-label="CONTACTMANAGER.IMPORT_CONTACTS">\n                <md-tooltip md-direction="left" md-visible="tooltipVisible" md-autohide="false">\n                    {{\'CONTACTMANAGER.IMPORT_CONTACTS\' | translate}}\n                </md-tooltip>\n                <md-icon md-font-icon="icon-upload"></md-icon>\n            </md-button>\n            <md-button class="md-fab md-mini md-accent" ng-click="vm.createOrEditContact($event)" aria-label="add contact" translate translate-attr-aria-label="CONTACTMANAGER.ADD_CONTACT">\n                <md-tooltip md-direction="left" md-visible="tooltipVisible" md-autohide="false">\n                    {{\'CONTACTMANAGER.ADD_CONTACT\' | translate}}\n                </md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </md-fab-actions>\n    </md-fab-speed-dial>\n    \x3c!-- / ADD USER BUTTON --\x3e\n</div>'),e.put("app/main/apps/contactmanager/views/contacts/create/dialog.html",'<md-dialog class="cm-contact-dialog" aria-label="New Contact">\n    <form name="contactForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.FIRSTNAME">First name</label>\n                <input name="firstName" ng-model="vm.contact.firstName" required md-autofocus>\n\n                <div ng-messages="contactForm.firstName.$error" ng-show="contactForm.firstName.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.FIRSTNAME_REQUIRED">First name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.LASTNAME">Last name</label>\n                <input name="lastName" ng-model="vm.contact.lastName">\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.PHONE">Phone</label>\n                <input name="phone" ng-model="vm.contact.phone">\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.EMAIL">Email</label>\n                <input name="email" type="email" ng-model="vm.contact.email">\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.MOBILE">Mobile</label>\n                <input name="mobile" ng-model="vm.contact.mobile">\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.FAX">Fax</label>\n                <input name="fax" ng-model="vm.contact.fax">\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.LIST">List</label>\n                <md-select name="list" ng-model="vm.contact.ListId" ng-disabled="vm.contact.id && vm.contact.ListId" ng-init="vm.getCustomFields(vm.contact.ListId)" ng-change="vm.getCustomFields(vm.contact.ListId)" required>\n                    <md-optgroup label="Lists">\n                        <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">{{list.name}}</md-option>\n                        <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                    </md-optgroup>\n                </md-select>\n\n                <div ng-messages="contactForm.list.$error" ng-show="contactForm.list.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div ng-repeat="customField in vm.customFields.rows" class="md-block" ng-switch="customField.type">\n                <div ng-switch-when="datetime">\n                    <label>{{customField.alias}}</label>\n\n                    <div ng-init="vm.contact[\'cf_\' + customField.id] = vm.getDateFromString(vm.contact[\'cf_\' + customField.id])">\n                        <mdp-date-picker mdp-open-on-click ng-required="customField.required" mdp-format="YYYY-MM-DD" ng-model="vm.contact[\'cf_\' + customField.id]"></mdp-date-picker>\n                        <mdp-time-picker mdp-open-on-click mdp-placeholder="Time" ng-required="customField.required" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.contact[\'cf_\' + customField.id]"></mdp-time-picker>\n                    </div>\n                </div>\n\n                <div ng-switch-when="select">\n                    <label>{{customField.alias}}</label>\n\n                    <md-select ng-model="vm.contact[\'cf_\' + customField.id]" ng-required="customField.required">\n                        <md-option ng-repeat="value in customField.values" ng-value="value.value">{{value.value}}</md-option>\n                        <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                    </md-select>\n                </div>\n\n                <div ng-switch-when="switch">\n                    <md-switch aria-label="{{customField.alias}}" ng-model="vm.contact[\'cf_\' + customField.id]" ng-true-value="1" ng-false-value="0">\n                        {{customField.alias}}\n                    </md-switch>\n                </div>\n\n                <md-input-container ng-switch-default>\n                    <label>{{customField.alias}}</label>\n\n                    <input type="{{customField.type}}" ng-model="vm.contact[\'cf_\' + customField.id]" ng-required="customField.required">\n                </md-input-container>\n            </div>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.COMPANY">Company</label>\n                <md-select name="company" ng-model="vm.contact.CompanyId">\n                    <md-option ng-value="company.id" ng-repeat="company in vm.companies.rows" ng-hide="!vm.contact.CompanyId && company.canSelect === false" ng-disabled="company.canSelect === false">{{company.name}}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <div ng-if="!vm.allFields" layout="row" layout-align="center center">\n                <md-button class="md-accent" ng-click="vm.allFields = true" translate="CONTACTMANAGER.SHOW_ALL_FIELDS">Show All Fields</md-button>\n            </div>\n\n            <md-input-container class="md-block" ng-if="vm.allFields" flex-gt-sm="" ng-init="vm.contact.dateOfBirth = vm.getDateFromString(vm.contact.dateOfBirth)">\n                <label translate="CONTACTMANAGER.DATE_OF_BIRTH">Date of Birth</label>\n                <mdp-date-picker mdp-open-on-click mdp-format="YYYY-MM-DD" name="dateOfBirth" ng-model="vm.contact.dateOfBirth"></mdp-date-picker>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.allFields">\n                <label translate="CONTACTMANAGER.COUNTRY">Country</label>\n                <input type="text" name="country" ng-model="vm.contact.country">\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.allFields">\n                <label translate="CONTACTMANAGER.CITY">City</label>\n                <input type="text" name="city" ng-model="vm.contact.city">\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.allFields">\n                <label translate="CONTACTMANAGER.STREET">Street</label>\n                <input type="text" name="street" ng-model="vm.contact.street">\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.allFields">\n                <label translate="CONTACTMANAGER.POSTAL_CODE">Postal Code</label>\n                <input type="text" name="postalCode" ng-model="vm.contact.postalCode">\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.allFields">\n                <label translate="CONTACTMANAGER.NOTES">Notes</label>\n                <input type="text" name="description" ng-model="vm.contact.description">\n            </md-input-container>\n\n            <div ng-if="vm.allFields" layout="row" layout-align="center center">\n                <md-button class="md-accent" ng-click="vm.allFields = false" translate="CONTACTMANAGER.FEWER_FIELDS">Fewer Fields</md-button>\n            </div>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-if="!vm.newContact" ng-click="vm.saveContact()" class="send-button md-accent md-raised" ng-disabled="contactForm.$invalid || contactForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newContact" ng-click="vm.addNewContact()" class="send-button md-accent md-raised" ng-disabled="contactForm.$invalid || contactForm.$pristine" aria-label="ADD" translate="CONTACTMANAGER.ADD_CONTACT" translate-attr-aria-label="CONTACTMANAGER.ADD_CONTACT">\n                    ADD CONTACT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newContact" ng-click="vm.deleteContact($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",'<md-dialog class="cm-contact-dialog" aria-label="{{ \'CONTACTMANAGER.DUPLICATE_CONTACT\' | translate }}">\n    <form name="contactForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.LIST">List</label>\n                <md-select name="list" ng-model="vm.contact.ListId">\n                    <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">{{list.name}}</md-option>\n                </md-select>\n\n                <div ng-messages="contactForm.list.$error" ng-show="contactForm.list.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.addNewContact()" class="send-button md-accent md-raised" ng-disabled="contactForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_CONTACT" translate-attr-aria-label="CONTACTMANAGER.ADD_CONTACT">\n                    ADD CONTACT\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/contacts/edit/hoppers/dialog.html",'<md-dialog class="hopper-dialog" aria-label="New Hopper">\n    <form name="hopperForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div flex class="md-block">\n                <mdp-date-picker mdp-open-on-click name="scheduledatDate" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" ng-model="vm.hopper.scheduledat" ng-init="vm.hopper.scheduledat = vm.getDateFromString(vm.hopper.scheduledat)">\n                    <div ng-messages="hopperForm.dateRangeFrom.$error" ng-show="hopperForm.dateRangeFrom.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="CONTACTMANAGER.ERRORS.DATE_REQUIRED">Date is required</span>\n                        </div>\n                        <div ng-message="format">\n                            <span translate="CONTACTMANAGER.ERRORS.DATE_INVALID">Date is invalid</span>\n                        </div>\n                    </div>\n                </mdp-date-picker>\n            </div>\n\n            <div flex class="md-block">\n                <mdp-time-picker mdp-open-on-click name="scheduledatTime" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.hopper.scheduledat" ng-init="vm.hopper.scheduledat = vm.getDateFromString(vm.hopper.scheduledat)">\n                    <div ng-messages="hopperForm.timeRangeFrom.$error" ng-show="hopperForm.timeRangeFrom.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="CONTACTMANAGER.ERRORS.TIME_REQUIRED">Time is required</span>\n                        </div>\n                        <div ng-message="format">\n                            <span translate="CONTACTMANAGER.ERRORS.TIME_INVALID">Time is invalid</span>\n                        </div>\n                    </div>\n                </mdp-time-picker>\n            </div>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-if="!vm.newHopper" ng-click="vm.saveHopper()" class="send-button md-accent md-raised" ng-disabled="hopperForm.$invalid || hopperForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newHopper" ng-click="vm.addNewHopper()" class="send-button md-accent md-raised" ng-disabled="hopperForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_HOPPER" translate-attr-aria-label="CONTACTMANAGER.ADD_HOPPER">\n                    ADD HOPPER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="!vm.newHopper" ng-click="vm.deleteHopper($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/contacts/edit/view.html",'<div id="cm-contact" class="page-layout simple tabbed" layout="column" ng-init="vm.onInit()">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-contacts-button md-icon-button" aria-label="Go to contacts" ng-click="vm.gotoContacts()" translate translate-attr-aria-label="CONTACTMANAGER.GO_TO_CONTACTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="contact-image" hide-xs>\n                    <img ng-src="assets/images/business/contacts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.contact.id}} {{vm.contact.firstName}} {{vm.contact.lastName}}\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="CONTACTMANAGER.CREATED_AT"></span> <span>{{vm.contact.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-if="vm.contact.role && vm.contact.role !== \'admin\'" ng-controller="ContactQueueAddButtonController as vm_contact_qa" ng-cloak>\n            <md-fab-speed-dial ng-hide="vm_contact_qa.hidden" md-direction="left" md-open="vm_contact_qa.isOpen" class="md-scale md-fab" ng-class="{ \'md-hover-full\': vm_contact_qa.hover }" ng-mouseenter="vm_contact_qa.isOpen=true" ng-mouseleave="vm_contact_qa.isOpen=false">\n                <md-fab-trigger>\n                    <md-button aria-label="menu" class="md-fab md-primary md-icon-button">\n                        <md-tooltip md-direction="top" md-visible="tooltipVisible">Channels</md-tooltip>\n                        <md-icon md-font-icon="icon-eye" aria-label="channels"></md-icon>\n                    </md-button>\n                </md-fab-trigger>\n                <md-fab-actions>\n                    <div ng-repeat="channel in vm_contact_qa.channels">\n                        <md-button aria-label="{{channel.name}}" class="md-fab md-raised md-icon-button md-mini" ng-click="vm_contact_qa.openDialog($event, vm.contact, channel)">\n                            <md-tooltip md-direction="{{channel.direction}}" md-visible="tooltipVisible" md-autohide="false">\n                                {{channel.name}}\n                            </md-tooltip>\n                            <md-icon md-font-icon="{{channel.icon}}" aria-label="{{channel.name}}"></md-icon>\n                        </md-button>\n                    </div>\n                </md-fab-actions>\n            </md-fab-speed-dial>\n        </div>\n\n        <div ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.duplicateContact($event)" class="md-fab md-warn md-icon-button" aria-label="DUPLICATE">\n                <md-icon md-font-icon="icon-file-multiple"></md-icon>\n            </md-button>\n            <md-button type="submit" ng-click="vm.saveContact()" class="send-button md-accent md-raised" ng-disabled="detailForm.$pristine && customFieldsForm.$pristine && socialForm.$pristine" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                SAVE\n            </md-button>\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.DETAIL">DETAIL</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div layout="row">\n                        <div layout="column" flex="70">\n                            <md-card class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp">\n                                <div class="pb-16" layout="row" layout-align="start center">\n                                    <div class="h2 secondary-text text-truncate" translate="CONTACTMANAGER.PERSONAL_INFO">PERSONAL_INFO</div>\n                                </div>\n                                <form name="detailForm" novalidate>\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        \x3c!-- fistName --\x3e\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.FIRSTNAME">First Name</label>\n                                            <md-icon md-font-icon="icon-account" class="firstname"></md-icon>\n                                            <input type="text" name="firstName" ng-model="vm.contact.firstName" class="text-truncate" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                            <div ng-messages="detailForm.firstName.$error" ng-show="detailForm.firstName.$touched" role="alert">\n                                                <div ng-message="required">\n                                                    <span translate="CONTACTMANAGER.ERRORS.FIRSTNAME_REQUIRED">First name field is required</span>\n                                                </div>\n                                            </div>\n                                        </md-input-container>\n                                        <div flex="5"></div>\n                                        \x3c!-- lastName --\x3e\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.LASTNAME">Last Name</label>\n                                            <input type="text" name="lastName" ng-model="vm.contact.lastName" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                        </md-input-container>\n\n                                    </div>\n\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        \x3c!-- phone --\x3e\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.PHONE">Phone</label>\n                                            <md-icon md-font-icon="icon-phone"></md-icon>\n                                            <input type="text" name="phone" ng-model="vm.contact.phone" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                        </md-input-container>\n                                        <div flex="5"></div>\n                                        \x3c!-- mobile --\x3e\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.MOBILE">Mobile</label>\n                                            <md-icon md-font-icon="icon-cellphone-iphone"></md-icon>\n                                            <input type="text" name="mobile" ng-model="vm.contact.mobile" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                        </md-input-container>\n                                    </div>\n\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        \x3c!-- email --\x3e\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.EMAIL">Email</label>\n                                            <md-icon md-font-icon="icon-email" class="email"></md-icon>\n                                            <input type="email" name="email" ng-model="vm.contact.email" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                            <div ng-messages="detailForm.firstName.$error" ng-show="detailForm.firstName.$touched" role="alert">\n                                                <div ng-message="email">\n                                                    <span translate="CONTACTMANAGER.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                                </div>\n                                            </div>\n                                        </md-input-container>\n                                        <div flex="5"></div>\n                                        \x3c!-- fax --\x3e\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.FAX">Fax</label>\n                                            <md-icon md-font-icon="icon-deskphone"></md-icon>\n                                            <input type="text" name="fax" ng-model="vm.contact.fax" ng-disabled="!vm.crudPermissions.canEdit">\n                                        </md-input-container>\n                                    </div>\n\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        <md-input-container class="md-block" flex-gt-sm="" ng-init="vm.contact.dateOfBirth = vm.getDateFromString(vm.contact.dateOfBirth)">\n                                            <label translate="CONTACTMANAGER.DATE_OF_BIRTH">Date of Birth</label>\n                                            <mdp-date-picker mdp-open-on-click mdp-format="YYYY-MM-DD" name="dateOfBirth" ng-model="vm.contact.dateOfBirth" mdp-disabled="!vm.crudPermissions.canEdit"></mdp-date-picker>\n                                        </md-input-container>\n                                    </div>\n\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        <md-input-container ng-if="vm.companies.rows.length" class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.COMPANY">Company</label>\n                                            <md-icon md-font-icon="icon-domain"></md-icon>\n                                            <md-select name="company" ng-model="vm.contact.CompanyId" ng-disabled="!vm.crudPermissions.canEdit">\n                                                <md-optgroup label="Companies">\n                                                    <md-option ng-value="company.id" ng-repeat="company in vm.companies.rows" ng-disabled="company.canSelect === false"">{{company.name}}</md-option>\n                                                <md-option ng-value=" null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                                                </md-optgroup>\n                                            </md-select>\n                                            <md-icon class="pointer" ng-show="vm.contact.CompanyId" md-font-icon="icon-information-outline" ng-click="vm.editCompany($event, vm.contact.CompanyId)"></md-icon>\n                                        </md-input-container>\n                                        <section ng-if="!vm.companies.rows.length" flex-gt-sm="">\n                                            <md-icon md-font-icon="icon-briefcase"></md-icon>\n                                            <label translate="CONTACTMANAGER.NO_COMPANIES">No Companies</label>\n                                        </section>\n                                    </div>\n\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        <md-input-container ng-if="vm.tags.rows.length" class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.TAGS">Tags</label>\n                                            <md-icon md-font-icon="icon-tag"></md-icon>\n                                            <md-select ng-model="vm.Tags" multiple ng-disabled="!vm.crudPermissions.canEdit">\n                                                <md-optgroup label="Tags">\n                                                    <md-option ng-value="tag.id" ng-repeat="tag in vm.tags.rows" ng-disabled="tag.canSelect === false">{{tag.name}}</md-option>\n                                                </md-optgroup>\n                                            </md-select>\n                                        </md-input-container>\n                                        <section ng-if="!vm.tags.rows.length" flex-gt-sm="">\n                                            <md-icon md-font-icon="icon-tag"></md-icon>\n                                            <label translate="CONTACTMANAGER.NO_TAG">No Tags</label>\n                                            <md-button class="md-accent" translate="CONTACTMANAGER.ADD_TAG">Add Tag</md-button>\n                                        </section>\n                                    </div>\n\n                                    <div ng-if="!vm.allFields" layout="row" layout-align="center center">\n                                        <md-button class="md-accent" ng-click="vm.allFields = true" translate="CONTACTMANAGER.SHOW_ALL_FIELDS">Show All Fields</md-button>\n                                    </div>\n\n                                    <div ng-if="vm.allFields">\n                                        <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                            \x3c!-- country --\x3e\n                                            <md-input-container class="md-block" flex-gt-sm="">\n                                                <label translate="CONTACTMANAGER.COUNTRY">Country</label>\n                                                <md-icon md-font-icon="icon-home" class="country"></md-icon>\n                                                <input type="text" name="country" ng-model="vm.contact.country" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                            </md-input-container>\n                                            <div flex="5"></div>\n                                            \x3c!-- city --\x3e\n                                            <md-input-container class="md-block" flex-gt-sm="">\n                                                <label translate="CONTACTMANAGER.CITY">City</label>\n                                                <input type="text" name="city" ng-model="vm.contact.city" ng-disabled="!vm.crudPermissions.canEdit">\n                                            </md-input-container>\n                                        </div>\n\n                                        <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                            <div flex="5"></div>\n                                            \x3c!-- street --\x3e\n                                            <md-input-container class="md-block" flex-gt-sm="">\n                                                <label translate="CONTACTMANAGER.STREET">Street</label>\n                                                <input type="text" name="street" ng-model="vm.contact.street" ng-disabled="!vm.crudPermissions.canEdit">\n                                            </md-input-container>\n                                            <div flex="5"></div>\n                                            \x3c!-- postalCode --\x3e\n                                            <md-input-container class="md-block" flex-gt-sm="">\n                                                <label translate="CONTACTMANAGER.POSTALCODE">Postal Code</label>\n                                                <input type="text" name="postalCode" ng-model="vm.contact.postalCode" ng-disabled="!vm.crudPermissions.canEdit">\n                                            </md-input-container>\n                                        </div>\n\n                                        <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                            <md-input-container class="md-block" flex-gt-sm="">\n                                                <label translate translate-attr-placeholder="CONTACTMANAGER.NOTES">Notes</label>\n                                                <md-icon md-font-icon="icon-note"></md-icon>\n                                                <textarea ng-model="vm.contact.description" type="text" max-rows="4" ng-disabled="!vm.crudPermissions.canEdit"></textarea>\n                                            </md-input-container>\n                                        </div>\n\n                                        <div layout="row" layout-align="center center">\n                                            <md-button class="md-accent" ng-click="vm.allFields = false" translate="CONTACTMANAGER.FEWER_FIELDS">Fewer Fields\n                                            </md-button>\n                                        </div>\n\n                                    </div>\n                                </form>\n                            </md-card>\n                            <md-card class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp">\n                                <div class="pb-16" layout="row" layout-align="start center">\n                                    <div class="h2 secondary-text text-truncate" translate="CONTACTMANAGER.SOCIAL">Social</div>\n                                </div>\n                                <form name="socialForm" novalidate>\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>Facebook</label>\n                                            <md-icon md-font-icon="icon-facebook" class="facebook"></md-icon>\n                                            <input type="text" name="facebook" ng-model="vm.contact.facebook" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                        </md-input-container>\n                                        <div flex="5"></div>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>Twitter</label>\n                                            <md-icon md-font-icon="icon-twitter" class="twitter"></md-icon>\n                                            <input type="text" name="twitter" ng-model="vm.contact.twitter" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                        </md-input-container>\n                                    </div>\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>Line</label>\n                                            <md-icon md-font-icon="fab fa-line"></md-icon>\n                                            <input type="text" name="line" ng-model="vm.contact.line" class="text-truncate">\n                                        </md-input-container>\n                                        <div flex="5"></div>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>Viber</label>\n                                            <md-icon md-font-icon="fab fa-viber"></md-icon>\n                                            <input type="text" name="viber" ng-model="vm.contact.viber" class="text-truncate">\n                                        </md-input-container>\n                                    </div>\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>WeChat</label>\n                                            <md-icon md-font-icon="fab fa-weixin"></md-icon>\n                                            <input type="text" name="wechat" ng-model="vm.contact.wechat" class="text-truncate">\n                                        </md-input-container>\n                                        <div flex="5"></div>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>Telegram</label>\n                                            <md-icon md-font-icon="icon-telegram"></md-icon>\n                                            <input type="text" name="telegram" ng-model="vm.contact.telegram" class="text-truncate">\n                                        </md-input-container>\n                                    </div>\n                                </form>\n                            </md-card>\n                        </div>\n\n                        <div flex></div>\n\n                        <div class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp" flex="25">\n                            <div class="pb-16" layout="row" layout-align="start center">\n                                <div class="h2 secondary-text text-truncate" translate="CONTACTMANAGER.CUSTOM_FIELDS">CUSTOM FIELDS</div>\n                            </div>\n                            <form name="customFieldsForm" novalidate>\n                                <md-input-container class="md-block">\n                                    <label translate translate-attr-placeholder="CONTACTMANAGER.LIST">List</label>\n                                    <md-select name="list" ng-model="vm.contact.ListId" md-on-close="vm.onSelectList($event)" ng-disabled="vm.contact.ListId">\n                                        <md-optgroup label="Lists">\n                                            <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">#{{list.id}} - {{list.name}}</md-option>\n                                            <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                                        </md-optgroup>\n                                    </md-select>\n                                </md-input-container>\n                                <div ng-repeat="customField in vm.customFields.rows" ng-switch="customField.type">\n                                    <md-input-container class="md-block" ng-switch-when="datetime">\n                                        <label>{{customField.alias}}</label>\n                                        <div ng-init="vm.contact[\'cf_\' + customField.id] = vm.getDateFromString(vm.contact[\'cf_\' + customField.id])">\n                                            <mdp-date-picker mdp-open-on-click ng-required="customField.required" mdp-format="YYYY-MM-DD" ng-model="vm.contact[\'cf_\' + customField.id]"></mdp-date-picker>\n                                            <mdp-time-picker mdp-open-on-click mdp-placeholder="Time" ng-required="customField.required" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.contact[\'cf_\' + customField.id]"></mdp-time-picker>\n                                        </div>\n                                    </md-input-container>\n\n                                    <md-input-container class="md-block" ng-switch-when="select">\n                                        <label>{{customField.alias}}</label>\n                                        <md-select ng-model="vm.contact[\'cf_\' + customField.id]" ng-required="customField.required" ng-disabled="!vm.crudPermissions.canEdit">\n                                            <md-option ng-repeat="value in customField.values" ng-value="value.value">{{value.value}}</md-option>\n                                            <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                                        </md-select>\n                                    </md-input-container>\n\n                                    <md-input-container class="md-block" ng-switch-when="switch">\n                                        <md-switch aria-label="{{customField.alias}}" ng-model="vm.contact[\'cf_\' + customField.id]" ng-true-value="1" ng-false-value="0">\n                                            {{customField.alias}}\n                                        </md-switch>\n                                    </md-input-container>\n\n                                    <md-input-container class="md-block" ng-switch-default>\n                                        <label>{{customField.alias}}</label>\n                                        <input type="{{customField.type}}" ng-model="vm.contact[\'cf_\' + customField.id]" ng-required="customField.required" ng-disabled="!vm.crudPermissions.canEdit">\n                                    </md-input-container>\n                                </div>\n                            </form>\n                        </div>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n\n            <md-tab ng-if="vm.license.dialer">\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.MOTION_BULL">MOTION BULL</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div layout="row">\n                        <div class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp" flex>\n                            <md-toolbar class="md-table-toolbar md-default">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="CONTACTMANAGER.HOPPER">Hopper</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm.queryHopper.filter = query;" on-collapse="vm.queryHopper.filter = undefined;" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm.getHoppers()" aria-label="reload" translate translate-attr-label="CONTACTMANAGER.RELOAD">\n                                        <md-tooltip>{{\'CONTACTMANAGER.RELOAD\' | translate}}</md-tooltip>\n                                        <md-icon md-font-icon="icon-reload"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n\n                            \x3c!-- HOPPER TABLE --\x3e\n                            <md-table-container>\n                                <table md-table multiple md-progress="vm.promise">\n                                    <thead md-head md-order="vm.queryHopper.sort" md-on-reorder="vm.getHoppers">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                            <th md-column md-order-by="phone">{{ \'CONTACTMANAGER.PHONE\' | translate }}</th>\n                                            <th md-column md-order-by="scheduledat">{{ \'CONTACTMANAGER.SCHEDULEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="priority">{{ \'MOTIONDIALER.PRIORITY\' | translate }}</th>\n                                            <th md-column md-order-by="scheduledat">{{ \'CONTACTMANAGER.SCHEDULEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="VoiceQueueId">{{ \'CONTACTMANAGER.VOICEQUEUEID\' | translate }}</th>\n                                            <th md-column md-order-by="CampaignId">{{ \'CONTACTMANAGER.CAMPAIGNID\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row ng-hide="vm.hoppers.count">\n                                            <td md-cell colspan="4">\n                                                <div layout="row" layout-align="center center">\n                                                    <span tranlsate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                                </div>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-repeat="(id, hopper) in vm.hoppers.rows">\n                                            <td md-cell>{{hopper.id}}</td>\n                                            <td md-cell>{{hopper.phone}}</td>\n                                            <td md-cell>{{hopper.scheduledat | date:\'medium\'}}</td>\n                                            <td md-cell>{{ vm.arraypriority[hopper.priority].option }}</td>\n                                            <td md-cell class="recallme ">\n                                                <md-icon md-colors="{color: {{hopper.recallme ? \'\\\'green\\\'\' : \'\\\'red\\\'\'}}}" md-font-icon="{{hopper.recallme? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                            </td>\n                                            <td md-cell>{{hopper.VoiceQueueId}}</td>\n                                            <td md-cell>{{hopper.CampaignId}}</td>\n                                            <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="2">\n                                                        <md-menu-item>\n                                                            <md-button ng-if="vm.crudPermissions.canEdit && hopper.VoiceQueueId" ng-click="vm.editHopper($event, hopper)" translate="CONTACTMANAGER.EDIT_HOPPER">\n                                                                Edit Hopper\n                                                            </md-button>\n                                                            <md-button ng-if="vm.crudPermissions.canEdit && hopper.CampaignId" ng-click="vm.createOrEditIvrCampaignHopper($event, hopper)" translate="CONTACTMANAGER.EDIT_HOPPER">\n                                                                Edit Hopper\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm.crudPermissions.canDelete && vm.deleteconfirm(hopper, $event)" translate="CONTACTMANAGER.DELETE_HOPPER">\n                                                                Delete Hopper\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n\n                            <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.queryHopper.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.queryHopper.page" md-total="{{vm.hoppers.count}}" md-on-paginate="vm.getHoppers" md-page-select></md-table-pagination>\n                            \x3c!-- / HOPPER TABLE --\x3e\n                        </div>\n                    </div>\n\n                    <div layout="row">\n                        <div class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp" flex>\n                            <md-toolbar class="md-table-toolbar md-default">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="CONTACTMANAGER.FINAL">Final</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm.queryFinal.filter = query;" on-collapse="vm.queryFinal.filter = undefined;" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm.getFinals()" aria-label="reload" translate translate-attr-label="CONTACTMANAGER.RELOAD">\n                                        <md-tooltip>{{\'CONTACTMANAGER.RELOAD\' | translate}}</md-tooltip>\n                                        <md-icon md-font-icon="icon-reload"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n\n                            \x3c!-- HOPPER TABLE --\x3e\n                            <md-table-container>\n                                <table md-table multiple md-progress="vm.promise">\n                                    <thead md-head md-order="vm.queryFinal.sort" md-on-reorder="vm.getFinals">\n                                        <tr md-row>\n                                            <th md-column md-order-by="uniqueid">{{ \'CONTACTMANAGER.UNIQUEID\' | translate }}</th>\n                                            <th md-column md-order-by="calleridnum">{{ \'CONTACTMANAGER.PHONE\' | translate }}</th>\n                                            <th md-column md-order-by="state">{{ \'CONTACTMANAGER.STATE\' | translate }}</th>\n                                            <th md-column md-order-by="starttime">{{ \'CONTACTMANAGER.STARTTIME\' | translate }}</th>\n                                            <th md-column md-order-by="disposition">{{ \'CONTACTMANAGER.DISPOSITION\' | translate }}</th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row ng-hide="vm.finals.count">\n                                            <td md-cell colspan="5">\n                                                <div layout="row" layout-align="center center">\n                                                    <span tranlsate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                                </div>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-repeat="(id, final) in vm.finals.rows">\n                                            <td md-cell>{{final.uniqueid}}</td>\n                                            <td md-cell>{{final.calleridnum}}</td>\n                                            <td md-cell>{{final.statedesc}}</td>\n                                            <td md-cell>{{final.starttime | date:\'medium\'}}</td>\n                                            <td md-cell>{{final.disposition}}</td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n\n                            <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.queryFinal.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.queryFinal.page" md-total="{{vm.finals.count}}" md-on-paginate="vm.getFinals" md-page-select></md-table-pagination>\n                            \x3c!-- / HOPPER TABLE --\x3e\n                        </div>\n                    </div>\n\n                    <div layout="row">\n                        <div class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp" flex>\n                            <md-toolbar class="md-table-toolbar md-default">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="CONTACTMANAGER.HISTORY">History</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm.queryHistory.filter = query;" on-collapse="vm.queryHistory.filter = undefined;" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm.getHistories()" aria-label="reload" translate translate-attr-label="CONTACTMANAGER.RELOAD">\n                                        <md-tooltip>{{\'CONTACTMANAGER.RELOAD\' | translate}}</md-tooltip>\n                                        <md-icon md-font-icon="icon-reload"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n\n                            \x3c!-- HOPPER TABLE --\x3e\n                            <md-table-container>\n                                <table md-table multiple md-progress="vm.promise">\n                                    <thead md-head md-order="vm.queryHistory.sort" md-on-reorder="vm.getHistories">\n                                        <tr md-row>\n                                            <th md-column md-order-by="uniqueid">{{ \'CONTACTMANAGER.UNIQUEID\' | translate }}</th>\n                                            <th md-column md-order-by="calleridnum">{{ \'CONTACTMANAGER.PHONE\' | translate }}</th>\n                                            <th md-column md-order-by="state">{{ \'CONTACTMANAGER.STATE\' | translate }}</th>\n                                            <th md-column md-order-by="scheduledat">{{ \'CONTACTMANAGER.SCHEDULEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="starttime">{{ \'CONTACTMANAGER.STARTTIME\' | translate }}</th>\n                                            <th md-column md-order-by="endtime">{{ \'CONTACTMANAGER.ENDTIME\' | translate }}</th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row ng-hide="vm.histories.count">\n                                            <td md-cell colspan="7">\n                                                <div layout="row" layout-align="center center">\n                                                    <span tranlsate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                                </div>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-repeat="(id, history) in vm.histories.rows">\n                                            <td md-cell>{{history.uniqueid}}</td>\n                                            <td md-cell>{{history.calleridnum}}</td>\n                                            <td md-cell>{{history.statedesc}}</td>\n                                            <td md-cell>{{history.scheduledat | date:\'medium\'}}</td>\n                                            <td md-cell>{{history.starttime | date:\'medium\'}}</td>\n                                            <td md-cell>{{history.endtime | date:\'medium\'}}</td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n\n                            <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.queryHistory.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.queryHistory.page" md-total="{{vm.histories.count}}" md-on-paginate="vm.getHistories" md-page-select></md-table-pagination>\n                            \x3c!-- / HOPPER TABLE --\x3e\n                        </div>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n\n            <md-tab ng-if="vm.license.jscripty">\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.JSCRIPTY">JSCRIPTY</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div layout="row">\n                        <div class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp" flex>\n                            <md-toolbar class="md-table-toolbar md-default">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="CONTACTMANAGER.SESSIONS">Sessions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm.queryJscriptySession.filter = query;" on-collapse="vm.queryJscriptySession.filter = undefined;" debounce="300"></ms-search-bar>\n                                </div>\n                            </md-toolbar>\n\n                            \x3c!-- SESSION TABLE --\x3e\n                            <md-table-container>\n                                <table md-table multiple md-progress="vm.promise">\n                                    <thead md-head md-order="vm.queryJscriptySession.sort" md-on-reorder="vm.getJscriptySessions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                            <th md-column md-order-by="starttime">{{ \'CONTACTMANAGER.STARTTIME\' | translate }}</th>\n                                            <th md-column md-order-by="endtime">{{ \'CONTACTMANAGER.ENDTIME\' | translate }}</th>\n                                            <th md-column md-order-by="agent">{{ \'CONTACTMANAGER.AGENT\' | translate }}</th>\n                                            <th md-column md-order-by="project">{{ \'CONTACTMANAGER.PROJECT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row ng-hide="vm.jscriptySessions.count">\n                                            <td md-cell colspan="6">\n                                                <div layout="row" layout-align="center center">\n                                                    <span tranlsate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                                </div>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-repeat="(id, session) in vm.jscriptySessions.rows">\n                                            <td md-cell>{{session.id}}</td>\n                                            <td md-cell>{{session.starttime | date:\'medium\'}}</td>\n                                            <td md-cell>{{session.endtime | date:\'medium\'}}</td>\n                                            <td md-cell>{{session.membername}}</td>\n                                            <td md-cell>{{session.projectname}}</td>\n                                            <td md-cell class="actions"></td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n\n                            <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.queryHopper.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.queryHopper.page" md-total="{{vm.hoppers.count}}" md-on-paginate="vm.getHoppers" md-page-select></md-table-pagination>\n                            \x3c!-- / SESSION TABLE --\x3e\n                        </div>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.CUSTOMER_JOURNEY">CUSTOMER JOURNEY</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <md-content class="md-padding" id="interaction-content">\n                        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.html\'"></div>\n                    </md-content>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/contactmanager/views/contacts/import/import.html",'<md-dialog class="import-dialog" aria-label="Import contact">\n    <form name="importForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="CONTACTMANAGER.IMPORT_CONTACTS">Import Contacts</span>\n                <md-button ng-if="vm.result.finish || !vm.processing" class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <div md-background-bg layout="row" layout-align="start start">\n            <md-progress-linear ng-disabled="!vm.processing || vm.result.finish" md-mode="indeterminate" class="md-warn"></md-progress-linear>\n        </div>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div>\n                <md-content ng-show="!vm.processing">\n                    <div class="form-title" translate="CONTACTMANAGER.CONTACTMANAGER">CONTACT MANAGER</div>\n\n                    <md-input-container class="md-icon-float md-block" ng-repeat="contactField in vm.contactFields">\n                        <label>{{\'CONTACTMANAGER.\' + contactField.key | uppercase | translate}}</label>\n                        <md-select name="{{contactField.key}}" ng-model="vm.binding[contactField.key]" placeholder="{{\'CONTACTMANAGER.\' + contactField.key | uppercase | translate}}" ng-required="contactField.required">\n                            <md-option ng-value="field" ng-repeat="field in vm.fields">{{ field }}</md-option>\n                            <md-option ng-value="null" ng-hide="contactField.required">\n                                <em>{{ \'CONTACTMANAGER.NONE\' | translate }}</em>\n                            </md-option>\n                        </md-select>\n                    </md-input-container>\n\n                    <md-input-container class="md-icon-float md-block">\n                        <label translate="CONTACTMANAGER.LIST">List</label>\n                        <md-select name="list" ng-model="vm.ListId" placeholder="Select a list" ng-change="vm.onChangeList()" required>\n                            <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">{{list.name}}</md-option>\n                        </md-select>\n                    </md-input-container>\n\n                    <md-input-container class="md-icon-float md-block" ng-repeat="customField in vm.customFields.rows">\n                        <label>{{customField.alias}}</label>\n                        <md-select ng-model="vm.binding[\'cf_\' + customField.id]" placeholder="{{customField.alias}}" ng-required="customField.required">\n                            <md-option ng-value="field" ng-repeat="field in vm.fields">{{ field }}</md-option>\n                            <md-option ng-value="null" ng-hide="customField.required">\n                                <em>{{ \'CONTACTMANAGER.NONE\' | translate }}</em>\n                            </md-option>\n                        </md-select>\n                    </md-input-container>\n\n                    <md-input-container class="md-icon-float md-block">\n                        <label translate="CONTACTMANAGER.COMPANY">Company</label>\n                        <md-select name="company" ng-model="vm.CompanyId" placeholder="Select a company">\n                            <md-option ng-value="company.id" ng-repeat="company in vm.companies.rows">{{company.name}}</md-option>\n                            <md-option ng-value="null">\n                                <em translate="CONTACTMANAGER.NONE">None</em>\n                            </md-option>\n                        </md-select>\n                    </md-input-container>\n\n                    <md-input-container class="md-icon-float md-block">\n                        <md-select ng-model="vm.duplicates" placeholder="{{ \'CONTACTMANAGER.CHECK_DUPLICATES\' | translate}}" multiple>\n                            <md-option ng-value="contactField.key" ng-repeat="contactField in vm.contactFields">{{ \'CONTACTMANAGER.\' + contactField.key | uppercase | translate}}</md-option>\n                        </md-select>\n                    </md-input-container>\n\n                    <div ng-if="vm.license.dialer">\n                        <div class="form-title" translate="CONTACTMANAGER.MOTIONDIALER">MOTION BULL</div>\n\n                        <md-input-container class="md-icon-float md-block" ng-repeat="motionBullField in vm.motionBullFields">\n                            <label>{{\'CONTACTMANAGER.\' + motionBullField.key | uppercase | translate}}</label>\n                            <md-select name="{{motionBullField.key}}" ng-model="vm.binding[motionBullField.key]" placeholder="{{\'CONTACTMANAGER.\' + motionBullField.key | uppercase | translate}}" ng-required="motionBullField.required">\n                                <md-option ng-value="field" ng-repeat="field in vm.fields">{{ field }}</md-option>\n                                <md-option ng-value="null" ng-hide="contactField.required">\n                                    <em>{{ \'CONTACTMANAGER.NONE\' | translate }}</em>\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n\n                </md-content>\n\n                <div class="error-list" ng-if="vm.result.finish">\n                    <div class="info" layout="row" layout-align="space-between center">\n                        <div>\n                            <div class="message">{{\'CONTACTMANAGER.UPLOAD_COMPLETED\' | translate | uppercase}} ({{vm.result.elapsed}}s)</div>\n                        </div>\n                        <md-button class="md-icon-button">\n                            <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                        </md-button>\n                    </div>\n                </div>\n\n                <div layout="row" ng-if="vm.processing">\n                    \x3c!-- WIDGET PROCESSING --\x3e\n                    <ms-widget ng-if="!vm.result.finish" class="h-140" flex>\n                        \x3c!-- Front --\x3e\n                        <ms-widget-front class="p-16 white-bg">\n                            <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                <div class="md-display-1 pb-8 orange-fg">\n                                    <span ng-bind="vm.result.rows"></span>\n                                </div>\n                                <div ng-if="vm.processing" class="font-weight-500 secondary-text">Please wait, we are processing your contacts...</div>\n                            </div>\n                        </ms-widget-front>\n                        \x3c!-- / Front --\x3e\n                    </ms-widget>\n                    \x3c!-- / WIDGET PROCESSING --\x3e\n                    \x3c!-- WIDGET SUCCESS --\x3e\n                    <ms-widget ng-if="vm.result.finish" class="h-140" flex>\n                        \x3c!-- Front --\x3e\n                        <ms-widget-front class="p-16 white-bg">\n                            <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                <div class="md-display-1 pb-8 green-fg">\n                                    <span ng-bind="vm.result.affectedRows"></span>\n                                </div>\n                                <div class="font-weight-500 secondary-text" translate="CONTACTMANAGER.SUCCESS">Success</div>\n                            </div>\n                        </ms-widget-front>\n                        \x3c!-- / Front --\x3e\n                    </ms-widget>\n                    \x3c!-- / WIDGET SUCCESS --\x3e\n\n                    \x3c!-- WIDGET FAILURE --\x3e\n                    <ms-widget ng-if="vm.result.finish" class="h-140" flex>\n                        \x3c!-- Front --\x3e\n                        <ms-widget-front class="p-16 white-bg">\n                            <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                <div class="md-display-1 pb-8 red-fg">\n                                    <span ng-bind="vm.result.failedRows"></span>\n                                </div>\n                                <div class="font-weight-500 secondary-text" translate="CONTACTMANAGER.FAILURE">Failure</div>\n                            </div>\n                        </ms-widget-front>\n                        \x3c!-- / Front --\x3e\n                    </ms-widget>\n                    \x3c!-- / WIDGET FAILURE --\x3e\n\n                    \x3c!-- WIDGET DUPLICATES --\x3e\n                    <ms-widget ng-if="vm.result.duplicatedRows && vm.result.finish" class="h-140" flex>\n                        \x3c!-- Front --\x3e\n                        <ms-widget-front class="p-16 white-bg">\n                            <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                <div class="md-display-1 pb-8 orange-fg">\n                                    <span ng-bind="vm.result.duplicatedRows"></span>\n                                </div>\n                                <div class="font-weight-500 secondary-text" translate="CONTACTMANAGER.DUPLICATES">Duplicates</div>\n                            </div>\n                        </ms-widget-front>\n                        \x3c!-- / Front --\x3e\n                    </ms-widget>\n                    \x3c!-- / WIDGET DUPLICATES --\x3e\n                </div>\n\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row">\n                <md-button ng-if="!vm.processing" ng-disabled="importForm.$invalid || importForm.$pristine" ng-click="vm.uploadCsv()" class="md-accent md-raised" aria-label="UPLOAD" translate="CONTACTMANAGER.UPLOAD" translate-attr-aria-label="CONTACTMANAGER.IMPORT">\n                    IMPORT\n                </md-button>\n                <md-button ng-if="vm.processing && !vm.result.finish && !vm.stopping" ng-click="vm.stopUpload()" class="md-accent md-raised" aria-label="Stop Upload" translate="CONTACTMANAGER.STOP" translate-attr-aria-label="CONTACTMANAGER.STOP">\n                    STOP\n                </md-button>\n                <md-button ng-if="vm.result.finish && vm.result.errors.length" ng-csv="vm.getArrayErrors()" csv-header="vm.getHeaderErrors()" class="md-accent md-raised" aria-label="Export Errors" filename="contacts_import_errors.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon> {{\'CONTACTMANAGER.EXPORT_ERRORS\' | translate}}\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/contacts/merge/dialog.html",'<md-dialog class="cm-contact-dialog" aria-label="Merge Contact">\n    <form name="contactForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container class="md-block" flex-gt-sm>\n                <label>Filter</label>\n                <input ng-model="vm.searchTerm" name="searchTerm" ng-model-options="{ debounce: 300 }" ng-change="vm.change()">\n            </md-input-container>\n\n            <md-list flex>\n                <md-subheader class="md-no-sticky" ng-hide="vm.contacts.length"><em>Filter doesn\'t match any contact</em></md-subheader>\n                <md-list-item class="md-3-line" ng-repeat="contact in vm.contacts | filter:{ id: \'!\' + vm.contact.id}" ng-click="vm.showConfirm($event, vm.contact, contact)">\n                    <img ng-src="assets/images/avatars/profile.png" class="md-avatar" alt="{{contact.who}}" />\n                    <div class="md-list-item-text" layout="column">\n                        <h3>#{{ contact.id }} - {{ contact.firstName }} {{ contact.lastName }}</h3>\n                        <h4>{{ contact.email }}</h4>\n                        <p>{{ contact.phone }}</p>\n                    </div>\n                </md-list-item>\n            </md-list>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/globalCustomFields/create/dialog.html",'<md-dialog class="globalCustomField-dialog" aria-label="New GlobalCustomField">\n    <form name="globalCustomFieldForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.ALIAS">Alias</label>\n                <input type="" name="alias" ng-model="vm.globalCustomField.alias" ng-required="true" autofocus>\n\n                <div ng-messages="globalCustomFieldForm[\'alias\'].$error" ng-show="globalCustomFieldForm[\'alias\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.ALIAS_REQUIRED">Alias field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.globalCustomField.type" required ng-disabled="!vm.newGlobalCustomField">\n                    <md-option ng-value="\'text\'">Text</md-option>\n                    <md-option ng-value="\'select\'">Select</md-option>\n                    <md-option ng-value="\'number\'">Number</md-option>\n                    <md-option ng-value="\'switch\'">Switch</md-option>\n                    <md-option ng-value="\'datetime\'">Datetime</md-option>\n                </md-select>\n                <div ng-messages="globalCustomFieldForm[\'type\'].$error" ng-show="globalCustomFieldForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div ng-if="vm.globalCustomField.type == \'select\'" class="md-block">\n                <md-list>\n                    <md-list-item layout-margin>\n                        <md-button class="md-fab md-mini md-secondary" ng-click="vm.addItem(vm.globalCustomField.values);">\n                            <md-tooltip><span translate="CONTACTMANAGER.ADD">ADD</span></md-tooltip>\n                            <md-icon md-font-icon="icon-plus" aria-label="alert error"></md-icon>\n                        </md-button>\n                        <md-button ng-if="vm.globalCustomField.values.length" class="md-fab md-mini md-warn md-secondary" ng-click="vm.removeItems(vm.globalCustomField.values);">\n                            <md-tooltip><span translate="CONTACTMANAGER.DELETE_ALL">Delete All</span></md-tooltip>\n                            <md-icon md-font-icon="icon-delete" aria-label="alert error"></md-icon>\n                        </md-button>\n                    </md-list-item>\n                </md-list>\n                <md-list ng-sortable="vm.sortable">\n                    <md-list-item ng-repeat="item in vm.globalCustomField.values" style="border: 1px solid #ccc!important; border-radius: 7px;" layout-margin>\n                        <div>\n                            <md-icon class="s24" style="cursor:move" md-font-icon="icon-drag" aria-label="drag"></md-icon>\n                            <input type="text" ng-model="item.value" flex>\n                        </div>\n                        <md-button class="md-fab md-mini md-warn md-secondary" ng-click="vm.removeItem(vm.globalCustomField.values, $index);">\n                            <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                            <md-icon md-font-icon="icon-delete" aria-label="alert error"></md-icon>\n                        </md-button>\n                    </md-list-item>\n                </md-list>\n                <md-list>\n                    <md-list-item ng-if="!vm.globalCustomField.values.length" layout="row" layout-align="center center">\n                        <em translate="CONTACTMANAGER.NO_AVAILABLE_ITEMS">No Available Items</em>\n                    </md-list-item>\n                </md-list>\n            </div>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.globalCustomField.required" aria-label="Required"><span translate="CONTACTMANAGER.REQUIRED">Required</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newGlobalCustomField" ng-click="vm.saveGlobalCustomField()" class="send-button md-accent md-raised" ng-disabled="globalCustomFieldForm.$invalid || globalCustomFieldForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newGlobalCustomField" ng-click="vm.addNewGlobalCustomField()" class="send-button md-accent md-raised" ng-disabled="globalCustomFieldForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_GLOBALCUSTOMFIELD" translate-attr-aria-label="CONTACTMANAGER.ADD_GLOBALCUSTOMFIELD">\n                    ADD GLOBALCUSTOMFIELD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newGlobalCustomField" ng-click="vm.deleteGlobalCustomField($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/globalCustomFields/globalCustomFields.html",'<div id="globalCustomFields" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-circle" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CONTACTMANAGER.GLOBALCUSTOMFIELDS">GlobalCustomFields</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CONTACTMANAGER.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedGlobalCustomFields.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedGlobalCustomFields =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CONTACTMANAGER.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-globalCustomFields-count">\n                    <span>{{vm.selectedGlobalCustomFields.length}}</span>\n                    <span translate="CONTACTMANAGER.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="GLOBALCUSTOMFIELDS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllGlobalCustomFields()" translate="CONTACTMANAGER.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectGlobalCustomFields()" translate="CONTACTMANAGER.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedGlobalCustomFields" csv-label="true" filename="globalCustomFields.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedGlobalCustomFields($event)" aria-label="delete selected" translate translate-attr-label="GLOBALCUSTOMFIELDS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- GLOBALCUSTOMFIELD TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedGlobalCustomFields" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getGlobalCustomFields">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                <th md-column md-order-by="alias">{{ \'CONTACTMANAGER.ALIAS\' | translate }}</th>\n                                <th md-column md-order-by="type">{{ \'CONTACTMANAGER.TYPE\' | translate }}</th>\n                                <th md-column md-order-by="required">{{ \'CONTACTMANAGER.REQUIRED\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.globalCustomFields.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="globalCustomField" md-select-id="id" ng-repeat="globalCustomField in vm.globalCustomFields.rows">\n                                <td md-cell ng-if="globalCustomField.userpic"><img class="avatar" alt="{{globalCustomField.name}}" ng-src="api/users/{{globalCustomField.id}}/avatar" /></td>\n                                <td md-cell ng-if="!globalCustomField.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{globalCustomField.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditGlobalCustomField($event, globalCustomField)" md-cell class="id ">{{globalCustomField.id}}</td>\n                                <td ng-click="vm.createOrEditGlobalCustomField($event, globalCustomField)" md-cell class="alias ">{{globalCustomField.alias}}</td>\n                                <td ng-click="vm.createOrEditGlobalCustomField($event, globalCustomField)" md-cell class="type ">{{ vm.arraytype[globalCustomField.type].option }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(globalCustomField, ev) : vm.createOrEditGlobalCustomField($event, globalCustomField)" md-cell class="required ">\n                                    <md-icon md-colors="{color: {{globalCustomField.required ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{globalCustomField.required ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(globalCustomField, $event    )" translate="CONTACTMANAGER.EDIT_GLOBALCUSTOMFIELD">\n                                                    Edit GlobalCustomField\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(globalCustomField, $event    )" translate="CONTACTMANAGER.DELETE_GLOBALCUSTOMFIELD">\n                                                    Delete GlobalCustomField\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.globalCustomFields.count}}" md-on-paginate="vm.getGlobalCustomFields" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / GLOBALCUSTOMFIELD TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD GLOBALCUSTOMFIELD BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-globalCustomField-button" ng-click="vm.createOrEditGlobalCustomField($event)" aria-label="add globalCustomField" translate translate-attr-aria-label="CONTACTMANAGER.ADD_GLOBALCUSTOMFIELD">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD GLOBALCUSTOMFIELD BUTTON --\x3e\n</div>'),e.put("app/main/apps/contactmanager/views/lists/create/dialog.html",'<md-dialog class="list-dialog" aria-label="New List">\n    <form name="listForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.list.name" ng-required="true" autofocus>\n\n                <div ng-messages="listForm[\'name\'].$error" ng-show="listForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.list.description">\n\n                <div ng-messages="listForm[\'description\'].$error" ng-show="listForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newList" ng-click="vm.saveList()" class="send-button md-accent md-raised" ng-disabled="listForm.$invalid || listForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newList" ng-click="vm.addNewList()" class="send-button md-accent md-raised" ng-disabled="listForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_LIST" translate-attr-aria-label="CONTACTMANAGER.ADD_LIST">\n                    ADD LIST\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newList" ng-click="vm.deleteList($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/lists/edit/agentadd/agentadd.html",'<md-dialog class="list-dialog" aria-label="list" ng-init="vm.onInit()">\n    <form name="listForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="CONTACTMANAGER.AGENTADD_LIST">Add Agent to list</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/lists/edit/customFields/dialog.html",'<md-dialog class="customField-dialog" aria-label="New CustomField">\n    <form name="customFieldForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.ALIAS">Alias</label>\n                <input type="" name="alias" ng-model="vm.customField.alias" ng-required="true" autofocus>\n\n                <div ng-messages="customFieldForm[\'alias\'].$error" ng-show="customFieldForm[\'alias\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.ALIAS_REQUIRED">Alias field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.customField.type" required ng-disabled="!vm.newCustomField">\n                    <md-option ng-value="\'text\'">Text</md-option>\n                    <md-option ng-value="\'select\'">Select</md-option>\n                    <md-option ng-value="\'number\'">Number</md-option>\n                    <md-option ng-value="\'switch\'">Switch</md-option>\n                    <md-option ng-value="\'datetime\'">Datetime</md-option>\n                </md-select>\n                <div ng-messages="customFieldForm[\'type\'].$error" ng-show="customFieldForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div ng-if="vm.customField.type == \'select\'" class="md-block">\n                <md-list>\n                    <md-list-item layout-margin>\n                        <md-button class="md-fab md-mini md-secondary" ng-click="vm.addItem(vm.customField.values);">\n                            <md-tooltip><span translate="CONTACTMANAGER.ADD">ADD</span></md-tooltip>\n                            <md-icon md-font-icon="icon-plus" aria-label="alert error"></md-icon>\n                        </md-button>\n                        <md-button ng-if="vm.customField.values.length" class="md-fab md-mini md-warn md-secondary" ng-click="vm.removeItems(vm.customField.values);">\n                            <md-tooltip><span translate="CONTACTMANAGER.DELETE_ALL">Delete All</span></md-tooltip>\n                            <md-icon md-font-icon="icon-delete" aria-label="alert error"></md-icon>\n                        </md-button>\n                    </md-list-item>\n                </md-list>\n                <md-list ng-sortable="vm.sortable">\n                    <md-list-item ng-repeat="item in vm.customField.values" style="border: 1px solid #ccc!important; border-radius: 7px;" layout-margin>\n                        <div>\n                            <md-icon class="s24" style="cursor:move" md-font-icon="icon-drag" aria-label="drag"></md-icon>\n                            <input type="text" ng-model="item.value" flex>\n                        </div>\n                        <md-button class="md-fab md-mini md-warn md-secondary" ng-click="vm.removeItem(vm.customField.values, $index);">\n                            <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                            <md-icon md-font-icon="icon-delete" aria-label="alert error"></md-icon>\n                        </md-button>\n                    </md-list-item>\n                </md-list>\n                <md-list>\n                    <md-list-item ng-if="!vm.customField.values.length" layout="row" layout-align="center center">\n                        <em translate="CONTACTMANAGER.NO_AVAILABLE_ITEMS">No Available Items</em>\n                    </md-list-item>\n                </md-list>\n            </div>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.customField.required" aria-label="Required"><span translate="CONTACTMANAGER.REQUIRED">Required</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newCustomField" ng-click="vm.saveCustomField()" class="send-button md-accent md-raised" ng-disabled="customFieldForm.$invalid || customFieldForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newCustomField" ng-click="vm.addNewCustomField()" class="send-button md-accent md-raised" ng-disabled="customFieldForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_CUSTOMFIELD" translate-attr-aria-label="CONTACTMANAGER.ADD_CUSTOMFIELD">\n                    ADD CUSTOMFIELD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newCustomField" ng-click="vm.deleteCustomField($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/lists/edit/view.html",'<div id="contactmanager-list" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-lists-button md-icon-button" aria-label="Go to lists" ng-click="vm.gotoLists()" translate translate-attr-aria-label="CONTACTMANAGER.GO_TO_LISTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="list-image" hide-xs>\n                    <img ng-src="assets/images/business/lists.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.list.id}}\n                        <span ng-if="vm.list.name">{{vm.list.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="CONTACTMANAGER.CREATED_AT"></span> <span>{{vm.list.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.list, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="CONTACTMANAGER.GOTO_LIST"></span></md-tooltip>\n                <md-icon md-font-icon="icon-forward"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.list, $event)" class="md-fab md-warn md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="CONTACTMANAGER.AGENTADD_LIST"></span></md-tooltip>\n                <md-icon md-font-icon="icon-eye"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveList()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (customFieldsForm.$invalid) || (voiceDispositionsForm.$invalid)" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="list-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CONTACTMANAGER.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.list.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.list.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.PREFIX">Prefix</label>\n                                <input type="text" name="dialPrefix" ng-model="vm.list.dialPrefix" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'dialPrefix\'].$error" ng-show="generalForm[\'dialPrefix\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.PREFIX_REQUIRED">Prefix field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.CUSTOMFIELDS">CUSTOMFIELDS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="list-detail-form-container customfields md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ListCustomFieldsController as vm_dc" ng-init="vm_dc.init(vm.list, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedListCustomFields.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="CONTACTMANAGER.CUSTOMFIELDS">CustomFields</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditListCustomField($event)" aria-label="add customField" translate translate-attr-label="CONTACTMANAGER.ADD_CUSTOMFIELD">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedListCustomFields.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedListCustomFields.length}} {{vm_dc.selectedListCustomFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedListCustomFields" csv-label="true" filename="lists.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedListCustomFields($event)" aria-label="delete selected" translate translate-attr-label="LISTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedListCustomFields" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getListCustomFields">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                            <th md-column md-order-by="alias">{{ \'CONTACTMANAGER.ALIAS\' | translate }}</th>\n                                            <th md-column md-order-by="type">{{ \'CONTACTMANAGER.TYPE\' | translate }}</th>\n                                            <th md-column md-order-by="required">{{ \'CONTACTMANAGER.REQUIRED\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="customField" md-select-id="id" ng-repeat="customField in vm_dc.listCustomFields.rows">\n                                            <td ng-click="vm_dc.createOrEditListCustomField($event, customField)" md-cell>{{customField.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditListCustomField($event, customField)" md-cell>{{customField.alias}}</td>\n                                            <td ng-click="vm_dc.createOrEditListCustomField($event, customField)" md-cell>{{ vm_dc.arraytype[customField.type].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditListCustomField($event, customField)" md-cell class="required ">\n                                                <md-icon md-colors="{color: {{customField.required ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{customField.required? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                            </td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditListCustomField($event, customField)" translate="CONTACTMANAGER.EDIT_CUSTOMFIELD">\n                                                                Edit CustomField\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(customField, $event)" translate="CONTACTMANAGER.DELETE_CUSTOMFIELD">\n                                                                Delete CustomField\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.listCustomFields.rows.length">\n                                            <td md-cell colspan="7">\n                                                <span class="text-boxed-ligth" translate="CONTACTMANAGER.NO_CUSTOMFIELD_AVAILABLE">No customfield available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.listCustomFields.count}}" md-on-paginate="vm_dc.getListCustomFields" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.DISPOSITIONS">DISPOSITIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="list-detail-form-container voicedispositions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ListVoiceDispositionsController as vm_dc" ng-init="vm_dc.init(vm.list, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedListVoiceDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="CONTACTMANAGER.VOICEDISPOSITIONS">VoiceDispositions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditListVoiceDisposition($event)" aria-label="add voiceDisposition" translate translate-attr-label="CONTACTMANAGER.ADD_VOICEDISPOSITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedListVoiceDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedListVoiceDispositions.length}} {{vm_dc.selectedListVoiceDispositions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedListVoiceDispositions" csv-label="true" filename="lists.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedListVoiceDispositions($event)" aria-label="delete selected" translate translate-attr-label="LISTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedListVoiceDispositions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getListVoiceDispositions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                            <th md-column md-order-by="name">{{ \'CONTACTMANAGER.NAME\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'CONTACTMANAGER.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="voiceDisposition" md-select-id="id" ng-repeat="voiceDisposition in vm_dc.listVoiceDispositions.rows">\n                                            <td ng-click="vm_dc.createOrEditListVoiceDisposition($event, voiceDisposition)" md-cell>{{voiceDisposition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditListVoiceDisposition($event, voiceDisposition)" md-cell>{{voiceDisposition.name}}</td>\n                                            <td ng-click="vm_dc.createOrEditListVoiceDisposition($event, voiceDisposition)" md-cell>{{voiceDisposition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditListVoiceDisposition($event, voiceDisposition)" translate="CONTACTMANAGER.EDIT_VOICEDISPOSITION">\n                                                                Edit VoiceDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(voiceDisposition, $event)" translate="CONTACTMANAGER.DELETE_VOICEDISPOSITION">\n                                                                Delete VoiceDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.listVoiceDispositions.rows.length">\n                                            <td md-cell colspan="5">\n                                                <span class="text-boxed-ligth" translate="CONTACTMANAGER.NO_VOICEDISPOSITION_AVAILABLE">No voicedisposition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.listVoiceDispositions.count}}" md-on-paginate="vm_dc.getListVoiceDispositions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/contactmanager/views/lists/edit/voiceDispositions/dialog.html",'<md-dialog class="voiceDisposition-dialog" aria-label="New VoiceDisposition">\n    <form name="voiceDispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.voiceDisposition.name" ng-required="true" autofocus>\n\n                <div ng-messages="voiceDispositionForm[\'name\'].$error" ng-show="voiceDispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVoiceDisposition" ng-click="vm.saveVoiceDisposition()" class="send-button md-accent md-raised" ng-disabled="voiceDispositionForm.$invalid || voiceDispositionForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVoiceDisposition" ng-click="vm.addNewVoiceDisposition()" class="send-button md-accent md-raised" ng-disabled="voiceDispositionForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_VOICEDISPOSITION" translate-attr-aria-label="CONTACTMANAGER.ADD_VOICEDISPOSITION">\n                    ADD VOICEDISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVoiceDisposition" ng-click="vm.deleteVoiceDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/lists/lists.html",'<div id="lists" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-circle" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CONTACTMANAGER.LISTS">Lists</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CONTACTMANAGER.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedLists.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedLists =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CONTACTMANAGER.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-lists-count">\n                    <span>{{vm.selectedLists.length}}</span>\n                    <span translate="CONTACTMANAGER.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="LISTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllLists()" translate="CONTACTMANAGER.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectLists()" translate="CONTACTMANAGER.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedLists" csv-label="true" filename="lists.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedLists($event)" aria-label="delete selected" translate translate-attr-label="LISTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- LIST TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedLists" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getLists">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'CONTACTMANAGER.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'CONTACTMANAGER.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.lists.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="list" md-select-id="id" ng-repeat="list in vm.lists.rows">\n                                <td md-cell ng-if="list.userpic"><img class="avatar" alt="{{list.name}}" ng-src="api/users/{{list.id}}/avatar" /></td>\n                                <td md-cell ng-if="!list.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{list.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(list, ev) : vm.createOrEditList($event, list)" md-cell class="id ">{{list.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(list, ev) : vm.createOrEditList($event, list)" md-cell class="name ">{{list.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(list, ev) : vm.createOrEditList($event, list)" md-cell class="description ">{{list.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(list, $event    )" translate="CONTACTMANAGER.EDIT_LIST">\n                                                    Edit List\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotocontactsgoto(list, $event    )" translate="CONTACTMANAGER.GOTOCONTACTS_LIST">\n                                                    goToContacts List\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.exportcsvcontactsexport(list, $event    )" translate="CONTACTMANAGER.EXPORTCSVCONTACTS_LIST">\n                                                    exportCsvContacts List\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(list, $event    )" translate="CONTACTMANAGER.AGENTADD_LIST">\n                                                    AgentAdd List\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(list, $event    )" translate="CONTACTMANAGER.DELETE_LIST">\n                                                    Delete List\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.lists.count}}" md-on-paginate="vm.getLists" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / LIST TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD LIST BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-list-button" ng-click="vm.createOrEditList($event)" aria-label="add list" translate translate-attr-aria-label="CONTACTMANAGER.ADD_LIST">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD LIST BUTTON --\x3e\n</div>'),e.put("app/main/apps/dashboards/views/custom/custom.html",'<div ng-if="!vm.customDashboard">\n    <p>Custom Dashboard not available...</p>\n</div>\n<div id="dashboard-custom" ng-if="vm.customDashboard" ng-cloak layout-fill>\n    <md-content>\n        <md-toolbar class="md-default md-accent filter-header">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead">{{vm.customDashboard.name}}</span>\n                <div flex></div>\n                <div layout="column">\n                    <span class="font-size-10" translate="DASHBOARDS.FILTER_VOICE_QUEUES">Filter Voice Queues</span>\n                    <md-select placeholder="Select one or more queues" class="font-size-12 no-margin w-200" md-on-close="vm.onChangeVoiceQueues()" ng-model="vm.voiceQueuesSelected" multiple aria-label="voiceQueues">\n                        <md-option ng-value="voiceQueue.id" ng-repeat="voiceQueue in vm.voiceQueues.rows">{{ voiceQueue.name }}</md-option>\n                    </md-select>\n                </div>\n                <md-button ng-if="vm.crudPermissions.canEdit" class="md-icon-button" ng-click="vm.goToEdit()" aria-label="goToEdit">\n                    <md-tooltip md-direction="top"><span translate="DASHBOARDS.EDIT"></span></md-tooltip>\n                    <md-icon md-font-icon="icon-table-edit"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <ms-widget-engine config="vm.customDashboard"></ms-widget-engine>\n    </md-content>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/agent.general.home.permissions.html",'<md-content layout="row" layout-align="space-around center" flex layout-padding layout-wrap>\n    <div layout="column" layout-align="space-around center" flex="50">\n        <span class="font-size-40 text-center">{{ \'DASHBOARDS.WELCOME_TO_MOTION\' | translate }}!</span>\n        <span class="font-size-30 text-center" translate="DASHBOARDS.WELCOME_MESSAGE">Use the left sidebar to navigate through available sections.</span>\n    </div>\n\n    <div layout="column" flex="50">\n        <img src="assets/images/avatars/permissions.png" alt="permissions">\n    </div>\n</md-content>'),e.put("app/main/apps/dashboards/views/general/agent/agent.general.html",'<div id="agent-general" layout="column">\n    <div layout="row" layout-align="start center" class="md-primary-bg">\n        <md-button class="md-raised no-margin width-50" style="border-radius: 0px" ng-class="{\'md-primary\': !vm.isActiveTab(0)}" ng-click="vm.onClickTab(0)" aria-label="home">\n            <md-tooltip md-direction="bottom" md-delay="500">Home</md-tooltip>\n            <md-icon md-font-icon="icon-home" class="icon"></md-icon>\n        </md-button>\n\n        <ms-tab-scroll style="overflow: hidden;">\n            <div layout="column" ng-repeat="(key, tab) in vm.tabs" ng-click="vm.onClickTab(tab.id)" ng-class="{\'grey-50-bg\': vm.isActiveTab(tab.id)}">\n                <div style="height: 34px" layout="row" layout-align="space-between center">\n                    <md-icon md-font-icon="{{tab.icon}}" class="icon s16 margin-horizontal-5" ng-class="tab.color + \'-fg\'"></md-icon>\n                    <span class="text-truncate font-size-12" ng-class="vm.isActiveTab(tab.id) ? \'black-fg\' : \'grey-300-fg\'">\n                        {{tab.title}} <span ng-if="tab.badges" class="badge md-white-fg md-red-bg">{{tab.badges}}</span></span>\n                    <md-button class="md-icon-button md-mini no-margin" ng-class="vm.isActiveTab(tab.id) ? \'md-primary\' : \'grey-300-fg\'" aria-label="close" ng-click="vm.closeTab(tab)">\n                        <md-icon md-font-icon="icon-close-circle-outline" class="icon s16"></md-icon>\n                    </md-button>\n                </div>\n                <div style="height: 2px" ng-class="vm.isActiveTab(tab.id) ? tab.color + \'-bg\' : \'\'"></div>\n            </div>\n        </ms-tab-scroll>\n    </div>\n    <div layout="row" class="agent-content" ng-if="vm.isActiveTab(0)" ng-style="{\'top\': vm.detectBrowser.browser == \'safari\' ? \'100px\' : \'36px\'}" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.html\'" ng-controller="AgentGeneralHomeController as vm_home" ng-init="vm_home.init(vm.license, vm.setting)"></div>\n    <div ng-if="!vm.isActiveTab(0)" ng-repeat="(key, tab) in vm.tabs" ng-switch="tab.type">\n        <div ng-switch-when="contact">\n            <div class="agent-content" ms-scroll ng-if="vm.isActiveTab(tab.id)" ng-style="{\'top\': vm.detectBrowser.browser == \'safari\' ? \'100px\' : \'36px\'}" ng-include="\'app/main/apps/dashboards/views/general/agent/contact/agent.general.contact.html\'" ng-controller="AgentGeneralContactController as vm" ng-init="vm.init(tab,$parent.vm.license)"></div>\n        </div>\n        <div ng-switch-when="popup">\n            <div ng-if="vm.isActiveTab(tab.id)" ms-scroll ng-include="\'app/main/apps/dashboards/views/general/agent/popup/agent.general.popup.html\'" ng-controller="AgentGeneralPopupController as vm" ng-init="vm.init(tab)"></div>\n        </div>\n        <div ng-switch-when="jscripty">\n            <div class="agent-content" ms-scroll ng-if="vm.isActiveTab(tab.id)" ng-style="{\'top\': vm.detectBrowser.browser == \'safari\' ? \'100px\' : \'36px\'}" ng-include="\'app/main/apps/dashboards/views/general/agent/jscripty/agent.general.jscripty.html\'" ng-controller="AgentGeneralJscriptyController as vm" ng-init="vm.init(tab)"></div>\n        </div>\n        <div ng-switch-when="bot">\n            <div id="interaction-app" ng-if="vm.isActiveTab(tab.id)" class="agent-content" ng-style="{\'top\': vm.detectBrowser.browser == \'safari\' ? \'100px\' : \'36px\'}" ng-include="\'app/main/apps/dashboards/views/general/agent/bot/agent.general.bot.html\'" ng-controller="AgentGeneralBotController as vm" ng-init="vm.init(tab, $parent.vm.setting)"></div>\n        </div>\n        <div ng-switch-when="interaction">\n            <div id="interaction-app" ng-if="vm.isActiveTab(tab.id)" class="agent-content" ng-style="{\'top\': vm.detectBrowser.browser == \'safari\' ? \'100px\' : \'36px\'}" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.html\'" ng-controller="AgentGeneralInteractionController as vm" ng-init="vm.init(tab, $parent.vm.setting)">\n            </div>\n        </div>\n    </div>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/bot/agent.general.bot.html",'\x3c!-- CONTENT CARD --\x3e\n<md-content class="content-card" layout="row" layout-fill>\n\n    <div ng-if="!vm.showInteraction" class="start-point" flex layout="column" layout-align="center center">\n        <div class="big-circle md-whiteframe-4dp">\n            <md-icon class="s128 md-accent pink-fg" md-font-icon="fas fa-robot"></md-icon>\n        </div>\n        <span class="app-title" translate="DASHBOARDS.WAITING">Waiting</span>\n        <span class="hide show-gt-md secondary-text" translate="DASHBOARDS.LOADING_INTERACTION">We are loading the\n            interaction...</span>\n    </div>\n\n    <div ng-if="vm.showInteraction" flex layout="row">\n        <md-card flex="100" class="interaction">\n            \x3c!-- TOOLBAR --\x3e\n            <md-toolbar class="interaction-toolbar">\n                <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                    <md-icon md-font-icon="fas fa-robot" class="s20 pink-fg"></md-icon>\n                    <div class="padding-left-10" layout="column" layout-align="center start" flex>\n                        <div class="font-size-14" layout="row" layout-align="start center" layout-fill>\n                            <span>#{{vm.tab.data.uniqueid}} - {{vm.tab.title}}</span>\n                            \x3c!-- <div layout="row" layout-align="center center" class="blue-grey-300-fg padding-left-40"\n                                    ng-if="!vm.interaction.closed">\n                                    <timer start-time="vm.interaction.createdAt" interval="1000">{{ days > 0 ? days + \'d\' :\n                                        \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                                    <md-icon md-font-icon="icon-timelapse" class="s16 padding-left-5"></md-icon>\n                                </div> --\x3e\n                        </div>\n                    </div>\n                    <div layout="row" layout-align="end center">\n\n                    </div>\n                </div>\n            </md-toolbar>\n            \x3c!-- / TOOLBAR --\x3e\n\n            \x3c!-- CONTENT --\x3e\n            <md-content id="interaction-content" name="{{\'interaction-content-\' + vm.tab.id}}" flex ms-scroll layout-wrap>\n                <div class="interaction-messages">\n                    \x3c!-- MESSAGES --\x3e\n                    <div layout="row" ng-repeat="message in vm.messages.rows" class="md-padding message-row" ng-class="vm.getMessagesAlignment(message)">\n                        <img ng-if="message.direction ===\'in\'" src="assets/images/avatars/customer.png" class="avatar" />\n                        <img ng-if="message.direction ===\'out\'" class="avatar" src="assets/images/avatars/robot.png">\n\n                        <div class="bubble" ng-switch="message.direction">\n                            <div>\n                                <div ng-switch-when="in" class="time secondary-text">\n                                    {{vm.tab.title}} - {{message.createdAt | date: \'medium\'}}\n                                </div>\n                                <div ng-switch-when="out" class="time secondary-text" layout="row" layout-align="end center">\n                                    <div layout-padding>\n                                        System - {{message.createdAt | date: \'medium\'}}\n                                    </div>\n                                    <div>\n                                        <md-icon class="s18" md-font-icon="icon-check-all md-accent"></md-icon>\n                                    </div>\n                                </div>\n                            </div>\n                            <div ng-bind-html="message.body | embed:vm.emojiOptions" class="message" layout="row" layout-align="end center"></div>\n                        </div>\n                    </div>\n                    \x3c!-- / MESSAGES --\x3e\n                </div>\n            </md-content>\n            \x3c!-- / CONTENT --\x3e\n        </md-card>\n    </div>\n</md-content>\n\x3c!-- / CONTENT CARD --\x3e'),e.put("app/main/apps/dashboards/views/general/agent/contact/agent.general.contact.html",'<md-tabs md-selected="vm.currentTab" md-dynamic-height>\n    <md-tab>\n        <md-tab-label>\n            <span translate="DASHBOARDS.DETAIL">Detail</span>\n        </md-tab-label>\n        <md-tab-body>\n            <md-content>\n                <div layout="row">\n                    \x3c!-- MS-CARD --\x3e\n                    <md-card class="template-7" layout="row" layout-align="space-between" ng-repeat="call in vm.tab.calls track by call.uniqueid">\n                        <div class="info" layout="column" layout-align="space-between" layout-fill flex>\n                            <div layout="row">\n                                <span ng-if="call.answeredAt" class="text-boxed indigo-100-bg">\n                                    <timer start-time="call.answeredAt" interval="1000">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                                </span>\n                                <div flex></div>\n                                <span ng-if="call.disposedAt" class="text-boxed amber-200-bg">\n                                    <timer start-time="call.disposedAt" interval="1000">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                                </span>\n                            </div>\n                            <div class="p-16">\n                                <div class="title h1">\n                                    <md-icon ng-if="!call.routeId" md-font-icon="icon-phone-incoming"></md-icon>\n                                    <md-icon ng-if="call.routeId" md-font-icon="icon-phone-outgoing"></md-icon>\n                                    {{ call.routeId ? call.destcalleridnum : call.calleridnum }}\n                                </div>\n\n                                <div class="subtitle h4 secondary-text" ng-if="call.calleridname && call.calleridname != \'<unknown>\' && !call.routeId">\n                                    <md-icon md-font-icon="icon-account"></md-icon>\n                                    Name: {{ call.calleridname }}\n                                </div>\n\n                                <div class="text h4 pt-8" ng-if="call.queue">\n                                    <md-icon md-font-icon="icon-stackoverflow"></md-icon>\n                                    Queue: {{call.queue}}\n                                </div>\n                                <div class="text h4 pt-8" ng-if="call.variables.extravar">\n                                    <md-icon md-font-icon="icon-minus"></md-icon>\n                                    Extra: {{call.variables.extravar}}\n                                </div>\n                            </div>\n                            <div layout="row" layout-align="end center">\n                                <md-button ng-if="call.disposedAt" type="submit" ng-click="vm.disposeCall($event, call)" class="send-button md-accent md-raised">\n                                    {{ \'DASHBOARDS.DISPOSE\' | translate}}\n                                </md-button>\n                            </div>\n                        </div>\n                    </md-card>\n                    \x3c!-- / MS-CARD --\x3e\n                    <div flex layout="row" layout-align="end center">\n                        <md-button type="submit" ng-click="vm.mergeContact($event)" class="send-button md-raised md-accent ng-scope" ng-if="!vm.newContact" ng-disabled="vm.detailForm.$invalid || vm.customFieldsForm.$invalid || vm.socialForm.$invalid" aria-label="merge">\n                            <md-tooltip md-direction="top"><span translate="DASHBOARDS.MERGE"></span></md-tooltip>\n                            <md-icon md-font-icon="icon-source-fork"></md-icon>\n                        </md-button>\n                        <md-button type="submit" ng-click="vm.duplicateContact($event)" class="send-button md-raised md-accent ng-scope" ng-if="!vm.newContact" ng-disabled="vm.detailForm.$invalid || vm.customFieldsForm.$invalid || vm.socialForm.$invalid" aria-label="duplicate">\n                            <md-tooltip md-direction="top"><span translate="DASHBOARDS.DUPLICATE"></span></md-tooltip>\n                            <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n                        </md-button>\n                        <md-button type="submit" ng-click="vm.addNewContact($event)" class="send-button md-accent md-raised" ng-if="vm.newContact" ng-disabled="vm.detailForm.$invalid || vm.customFieldsForm.$invalid || vm.socialForm.$invalid" aria-label="add">\n                            {{ \'DASHBOARDS.ADD\'| translate }}\n                        </md-button>\n                        <md-button type="submit" ng-click="vm.saveContact($event)" class="send-button md-accent md-raised" ng-if="!vm.newContact" ng-disabled="vm.detailForm.$invalid || vm.customFieldsForm.$invalid || vm.socialForm.$invalid" aria-label="save">\n                            {{ \'DASHBOARDS.SAVE\' | translate }}\n                        </md-button>\n                    </div>\n                </div>\n                <div layout="row">\n                    <div layout="column" flex="75">\n                        <md-card layout-padding>\n                            <div class="h2 secondary-text text-truncate" translate="DASHBOARDS.PERSONAL_INFO">PERSONAL_INFO</div>\n                            <div class="subtitle secondary-text">\n                                <span translate="CONTACTMANAGER.CREATED_AT"></span> <span>{{vm.contact.createdAt | date:\'medium\'}}</span>\n                            </div>\n\n                            <form name="vm.detailForm" novalidate>\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <div layout="row" flex>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="DASHBOARDS.FIRSTNAME">First Name</label>\n                                            <md-icon md-font-icon="icon-account" class="firstname"></md-icon>\n                                            <input type="text" name="firstName" ng-model="vm.contact.firstName" class="text-truncate" required>\n                                            <div ng-messages="vm.detailForm.firstName.$error" ng-show="vm.detailForm.firstName.$touched" role="alert">\n                                                <div ng-message="required">\n                                                    <span translate="DASHBOARDS.ERRORS.FIRSTNAME_REQUIRED">First name field is required</span>\n                                                </div>\n                                            </div>\n                                        </md-input-container>\n                                        <div>\n                                            <md-menu ng-if="!vm.newContact">\n                                                <md-button ng-disabled="!vm.license.jscripty" class="md-icon-button md-raised md-accent ng-scope md-ink-ripple" title="JSCRIPTY PROJECTS" ng-click="$mdOpenMenu($event)" aria-label="jscripty">\n                                                    <md-icon md-font-icon="icon-script"></md-icon>\n                                                </md-button>\n\n                                                <md-menu-content>\n                                                    <md-menu-item ng-if="vm.jscriptyProjects && vm.jscriptyProjects.rows.length" ng-repeat="project in vm.jscriptyProjects.rows">\n                                                        <md-button ng-click="vm.addJscriptyTab(project, $event)">\n                                                            <md-icon md-font-icon="icon-script"></md-icon> {{project.name}}\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                    <md-menu-item ng-if="!vm.jscriptyProjects || !vm.jscriptyProjects.rows.length">\n                                                        <md-button disabled="disabled" translate="DASHBOARDS.NO_JSCRIPTY_PROJECTS_AVAILABLE">\n                                                            <md-icon md-font-icon="icon-script"></md-icon> No jscripty projects available\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                </md-menu-content>\n                                            </md-menu>\n                                        </div>\n                                    </div>\n                                    <div flex="5"></div>\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.LASTNAME">Last Name</label>\n                                        <input type="text" name="lastName" ng-model="vm.contact.lastName" class="text-truncate">\n                                    </md-input-container>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <div layout="row" flex>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="DASHBOARDS.PHONE">Phone</label>\n                                            <md-icon md-font-icon="icon-phone"></md-icon>\n                                            <input type="text" name="phone" ng-model="vm.contact.phone" class="text-truncate">\n                                            <div class="hint"><span ng-show="!vm.user.phoneBarRemoteControl || !vm.contact.phone" translate="CONTACTMANAGER.HELP.PHONEBAR_API"></span></div>\n                                        </md-input-container>\n                                        <div>\n                                            \x3c!-- click to call directive --\x3e\n                                            <ms-click-to-call target="vm.contact.phone" prefix="vm.list ? vm.list.dialPrefix : null" license="vm.license" type="\'button\'"></ms-click-to-call>\n                                            \x3c!--  / click to call directive --\x3e\n                                        </div>\n                                    </div>\n                                    <div flex="5"></div>\n                                    <div layout="row" flex>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="DASHBOARDS.MOBILE">Mobile</label>\n                                            <md-icon md-font-icon="icon-cellphone-iphone"></md-icon>\n                                            <input type="text" name="mobile" ng-model="vm.contact.mobile" class="text-truncate">\n                                            <div class="hint"><span ng-show="!vm.user.phoneBarRemoteControl || !vm.contact.mobile" translate="CONTACTMANAGER.HELP.PHONEBAR_API"></span></div>\n                                        </md-input-container>\n                                        <div>\n                                            \x3c!-- click to call directive --\x3e\n                                            <ms-click-to-call target="vm.contact.mobile" prefix="vm.list ? vm.list.dialPrefix : null" license="vm.license" type="\'button\'"></ms-click-to-call>\n                                            \x3c!--  / click to call directive --\x3e\n                                        </div>\n                                        <div>\n                                            <md-menu ng-if="!vm.newContact">\n                                                <md-button ng-disabled="!vm.license.messaging || !vm.hasPermission(107) || !vm.contact.mobile" class="md-icon-button md-raised md-accent ng-scope md-ink-ripple" title="NEW SMS" ng-click="$mdOpenMenu($event)" aria-label="sms">\n                                                    <md-icon md-font-icon="icon-message-text"></md-icon>\n                                                </md-button>\n\n                                                <md-menu-content>\n                                                    <md-menu-item ng-if="vm.smsAccounts && vm.smsAccounts.rows.length" ng-repeat="account in vm.smsAccounts.rows">\n                                                        <md-button ng-click="vm.composeInteraction($event, \'Sms\', account, vm.contact.mobile)">\n                                                            <md-icon md-font-icon="icon-message-text"></md-icon> {{account.name}}\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                    <md-menu-item ng-if="!vm.smsAccounts || !vm.smsAccounts.rows.length">\n                                                        <md-button disabled="disabled" translate="DASHBOARDS.NO_SMS_ACCOUNTS_AVAILABLE">\n                                                            <md-icon md-font-icon="icon-message-text"></md-icon> No sms accounts available\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                </md-menu-content>\n                                            </md-menu>\n                                        </div>\n                                    </div>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <div layout="row" flex>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="DASHBOARDS.EMAIL">Email</label>\n                                            <md-icon md-font-icon="icon-email" class="email"></md-icon>\n                                            <input type="email" name="email" ng-model="vm.contact.email" class="text-truncate">\n                                            <div ng-messages="vm.detailForm.firstName.$error" ng-show="vm.detailForm.firstName.$touched" role="alert">\n                                                <div ng-message="email">\n                                                    <span translate="DASHBOARDS.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                                </div>\n                                            </div>\n                                        </md-input-container>\n                                        <div>\n                                            <md-menu ng-if="!vm.newContact">\n                                                <md-button ng-disabled="!vm.license.mail || !vm.hasPermission(106) || !vm.contact.email" class="md-icon-button md-raised md-accent ng-scope md-ink-ripple" title="NEW EMAIL" ng-click="$mdOpenMenu($event)" aria-label="email">\n                                                    <md-icon md-font-icon="icon-email"></md-icon>\n                                                </md-button>\n\n                                                <md-menu-content>\n                                                    <md-menu-item ng-if="vm.mailAccounts && vm.mailAccounts.rows.length" ng-repeat="account in vm.mailAccounts.rows">\n                                                        <md-button ng-click="vm.composeInteraction($event, \'Mail\', account, vm.contact.email)">\n                                                            <md-icon md-font-icon="icon-email"></md-icon> {{account.name}}\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                    <md-menu-item ng-if="!vm.mailAccounts || !vm.mailAccounts.rows.length">\n                                                        <md-button disabled="disabled" translate="DASHBOARDS.NO_MAIL_ACCOUNTS_AVAILABLE">\n                                                            <md-icon md-font-icon="icon-email"></md-icon> No email accounts available\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                </md-menu-content>\n                                            </md-menu>\n                                        </div>\n                                    </div>\n                                    <div flex="5"></div>\n                                    <div layout="row" flex>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="DASHBOARDS.FAX">Fax</label>\n                                            <md-icon md-font-icon="icon-deskphone"></md-icon>\n                                            <input type="text" name="fax" ng-model="vm.contact.fax">\n                                        </md-input-container>\n                                        <div>\n                                            <md-menu ng-if="!vm.newContact">\n                                                <md-button ng-disabled="!vm.license.fax || !vm.hasPermission(109) || !vm.contact.fax" class="md-icon-button md-raised md-accent ng-scope md-ink-ripple" title="NEW FAX" ng-click="$mdOpenMenu($event)" aria-label="fax">\n                                                    <md-icon md-font-icon="icon-deskphone"></md-icon>\n                                                </md-button>\n\n                                                <md-menu-content>\n                                                    <md-menu-item ng-if="vm.faxAccounts && vm.faxAccounts.rows.length" ng-repeat="account in vm.faxAccounts.rows">\n                                                        <md-button ng-click="vm.composeInteraction($event, \'Fax\', account, vm.contact.fax)">\n                                                            <md-icon md-font-icon="icon-deskphone"></md-icon> {{account.name}}\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                    <md-menu-item ng-if="!vm.faxAccounts || !vm.faxAccounts.rows.length">\n                                                        <md-button disabled="disabled" translate="DASHBOARDS.NO_FAX_ACCOUNTS_AVAILABLE">\n                                                            <md-icon md-font-icon="icon-deskphone"></md-icon> No fax accounts available\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                </md-menu-content>\n                                            </md-menu>\n                                        </div>\n                                    </div>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <md-input-container class="md-block" flex-gt-sm="" ng-init="vm.contact.dateOfBirth = vm.getDateFromString(vm.contact.dateOfBirth)">\n                                        <label translate="DASHBOARDS.DATE_OF_BIRTH">Date of Birth</label>\n                                        <mdp-date-picker mdp-open-on-click mdp-format="YYYY-MM-DD" name="dateOfBirth" ng-model="vm.contact.dateOfBirth"></mdp-date-picker>\n                                    </md-input-container>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.COMPANY">Company</label>\n                                        <md-icon md-font-icon="icon-domain" class="email"></md-icon>\n                                        <md-select name="company" ng-model="vm.contact.CompanyId">\n                                            <md-option ng-value="company.id" ng-repeat="company in vm.tab.companies.rows">{{company.name}}</md-option>\n                                            <md-option ng-value="null"><em translate="DASHBOARDS.NONE">None</em></md-option>\n                                        </md-select>\n                                    </md-input-container>\n                                    <div flex="5"></div>\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.TAG">TAG</label>\n                                        <md-icon md-font-icon="icon-tag"></md-icon>\n                                        <md-select ng-model="vm.tab.Tags" multiple>\n                                            <md-option ng-value="tag.id" ng-repeat="tag in vm.tab.tags.rows">{{tag.name}}</md-option>\n                                        </md-select>\n                                    </md-input-container>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.COUNTRY">Country</label>\n                                        <md-icon md-font-icon="icon-home" class="country"></md-icon>\n                                        <input type="text" name="country" ng-model="vm.contact.country" class="text-truncate">\n                                    </md-input-container>\n                                    <div flex="5"></div>\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.CITY">City</label>\n                                        <input type="text" name="city" ng-model="vm.contact.city">\n                                    </md-input-container>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.STREET">Street</label>\n                                        <input type="text" name="street" ng-model="vm.contact.street">\n                                    </md-input-container>\n                                    <div flex="5"></div>\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.POSTALCODE">Postal Code</label>\n                                        <input type="text" name="postalCode" ng-model="vm.contact.postalCode">\n                                    </md-input-container>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate translate-attr-placeholder="DASHBOARDS.NOTES">Notes</label>\n                                        <md-icon md-font-icon="icon-note"></md-icon>\n                                        <textarea ng-model="vm.contact.description" type="text" max-rows="4"></textarea>\n                                    </md-input-container>\n                                </div>\n                            </form>\n                        </md-card>\n                        <md-card layout-padding>\n                            <div class="h2 secondary-text text-truncate" translate="DASHBOARDS.SOCIAL">Social</div>\n                            <form name="vm.socialForm" novalidate></form>\n                            <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                <md-input-container class="md-block" flex-gt-sm="">\n                                    <label>Facebook</label>\n                                    <md-icon md-font-icon="icon-facebook" class="facebook"></md-icon>\n                                    <input type="text" name="facebook" ng-model="vm.contact.facebook" class="text-truncate">\n                                </md-input-container>\n                                <div flex="5"></div>\n                                <md-input-container class="md-block" flex-gt-sm="">\n                                    <label>Twitter</label>\n                                    <md-icon md-font-icon="icon-twitter" class="twitter"></md-icon>\n                                    <input type="text" name="twitter" ng-model="vm.contact.twitter" class="text-truncate">\n                                </md-input-container>\n                            </div>\n                            <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                <md-input-container class="md-block" flex-gt-sm="">\n                                    <label>Line</label>\n                                    <md-icon md-font-icon="fab fa-line"></md-icon>\n                                    <input type="text" name="line" ng-model="vm.contact.line" class="text-truncate">\n                                </md-input-container>\n                                <div flex="5"></div>\n                                <md-input-container class="md-block" flex-gt-sm="">\n                                    <label>Viber</label>\n                                    <md-icon md-font-icon="fab fa-viber"></md-icon>\n                                    <input type="text" name="viber" ng-model="vm.contact.viber" class="text-truncate">\n                                </md-input-container>\n                            </div>\n                            <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                <md-input-container class="md-block" flex-gt-sm="">\n                                    <label>WeChat</label>\n                                    <md-icon md-font-icon="fab fa-weixin"></md-icon>\n                                    <input type="text" name="wechat" ng-model="vm.contact.wechat" class="text-truncate">\n                                </md-input-container>\n                                <div flex="5"></div>\n                                <md-input-container class="md-block" flex-gt-sm="">\n                                    <label>Telegram</label>\n                                    <md-icon md-font-icon="icon-telegram"></md-icon>\n                                    <input type="text" name="telegram" ng-model="vm.contact.telegram" class="text-truncate">\n                                </md-input-container>\n                            </div>\n                            </form>\n                        </md-card>\n                    </div>\n                    <div flex="25" layout="column" layout-padding>\n                        <md-card flex="100" layout-padding>\n                            <div class="h2 secondary-text text-truncate" translate="DASHBOARDS.CUSTOM_FIELDS">CUSTOM FIELDS</div>\n                            <form name="vm.customFieldsForm" novalidate>\n\n                                \x3c!-- START INPUT LIST --\x3e\n                                <md-input-container class="md-block" ng-if="!vm.contact.ListId">\n                                    <label translate translate-attr-placeholder="DASHBOARDS.LIST">List</label>\n                                    <md-select name="list" ng-model="vm.contact.ListId" ng-change="vm.getCustomFields(vm.contact.ListId)" required>\n                                        <md-optgroup label="Lists">\n                                            <md-option ng-value="list.id" ng-repeat="list in vm.tab.userLists.rows">#{{list.id}} - {{list.name}}</md-option>\n                                        </md-optgroup>\n                                    </md-select>\n                                </md-input-container>\n                                <md-input-container class="md-block" ng-if="vm.contact.ListId">\n                                    <label translate translate-attr-placeholder="DASHBOARDS.LIST">List</label>\n                                    <md-select ng-disabled="!vm.newContact" name="list" ng-model="vm.contact.ListId" required>\n                                        <md-optgroup label="Lists">\n                                            <md-option ng-value="list.id" ng-repeat="list in vm.tab.lists.rows">#{{list.id}} - {{list.name}}</md-option>\n                                        </md-optgroup>\n                                    </md-select>\n                                </md-input-container>\n                                \x3c!-- END INPUT LIST --\x3e\n\n                                <div ng-repeat="customField in vm.tab.customFields.rows" ng-switch="customField.type">\n                                    <md-input-container class="md-block" ng-switch-when="datetime">\n                                        <label>{{customField.alias}}<span ng-if="customField.required">*</span></label>\n                                        <div ng-init="vm.contact[\'cf_\' + customField.id] = vm.getDateFromString(vm.contact[\'cf_\' + customField.id])">\n                                            <mdp-date-picker mdp-open-on-click ng-required="customField.required" mdp-format="YYYY-MM-DD" ng-model="vm.contact[\'cf_\' + customField.id]"></mdp-date-picker>\n                                            <mdp-time-picker mdp-open-on-click mdp-placeholder="Time" ng-required="customField.required" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.contact[\'cf_\' + customField.id]"></mdp-time-picker>\n                                        </div>\n                                    </md-input-container>\n\n                                    <md-input-container class="md-block" ng-switch-when="select">\n                                        <label>{{customField.alias}}<span ng-if="customField.required">*</span></label>\n                                        <md-select ng-model="vm.contact[\'cf_\' + customField.id]" ng-required="customField.required">\n                                            <md-option ng-repeat="value in customField.values" ng-value="value.value">{{value.value}}</md-option>\n                                            <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                                        </md-select>\n                                    </md-input-container>\n\n                                    <md-input-container class="md-block" ng-switch-when="switch">\n                                        <md-switch aria-label="{{customField.alias}}" ng-model="vm.contact[\'cf_\' + customField.id]" ng-true-value="1" ng-false-value="0">\n                                            {{customField.alias}}<span ng-if="customField.required">*</span>\n                                        </md-switch>\n                                    </md-input-container>\n\n                                    <md-input-container class="md-block" ng-switch-default>\n                                        <label>{{customField.alias}}<span ng-if="customField.required">*</span></label>\n                                        <input type="{{customField.type}}" ng-model="vm.contact[\'cf_\' + customField.id]" ng-required="customField.required">\n                                    </md-input-container>\n                                </div>\n                            </form>\n                        </md-card>\n                    </div>\n                </div>\n            </md-content>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="DASHBOARDS.CUSTOMER_JOURNEY">Customer Journey</span>\n        </md-tab-label>\n        <md-tab-body>\n            <md-content class="md-padding" id="interaction-content">\n                <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.html\'"></div>\n            </md-content>\n        </md-tab-body>\n    </md-tab>\n</md-tabs>'),e.put("app/main/apps/dashboards/views/general/agent/contact/dispose/dialog.html",'<md-dialog class="agent-dialog" aria-label="agent dispose">\n    <form name="disposition" class="md-inline-form" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="DASHBOARDS.DISPOSE"></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()" ng-if="!vm.call.mandatoryDisposition">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div ng-if="!vm.isReschedule">\n                <md-input-container class="md-block">\n                    <label translate="DASHBOARDS.DISPOSITIONS">Dispositions</label>\n                    <md-select name="disposition" ng-model="vm.choice" required>\n                        <md-option ng-value="g.name" ng-repeat="g in vm.dispositions.rows">{{ g.name }}</md-option>\n                        <md-option ng-value="gd.name" ng-repeat="gd in vm.globalDispositions.rows">{{ gd.name }}</md-option>\n                    </md-select>\n                </md-input-container>\n                <md-input-container class="md-block">\n                    <label translate="DASHBOARDS.NOTE">Note</label>\n                    <textarea ng-model="vm.note" md-maxlength="255" max-rows="5" autofocus></textarea>\n                </md-input-container>\n            </div>\n\n            <div ng-if="vm.isReschedule">\n                <div layout="row">\n                    <div flex class="md-block">\n                        <mdp-date-picker mdp-open-on-click required name="date" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" mdp-min-date="vm.hopper.minDate" ng-model="vm.hopper.dateTime">\n                            <div ng-messages="disposition.date.$error" ng-show="disposition.date.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="DASHBOARDS.ERRORS.DATE_REQUIRED">Date is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="DASHBOARDS.ERRORS.DATE_INVALID">Date is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-date-picker>\n                    </div>\n\n                    <div flex class="md-block">\n                        <mdp-time-picker mdp-open-on-click required name="time" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.hopper.dateTime">\n                            <div ng-messages="disposition.time.$error" ng-show="disposition.time.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="DASHBOARDS.ERRORS.TIME_REQUIRED">Time is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="DASHBOARDS.ERRORS.TIME_INVALID">Time is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-time-picker>\n                    </div>\n                </div>\n                <md-input-container ng-if="!vm.dialerCall" class="md-block">\n                    <label translate="DASHBOARDS.CAMPAIGN">Campaign</label>\n                    <md-select name="queueCampaign" ng-model="vm.queueCampaign" required>\n                        <md-option ng-value="queueCampaign" ng-repeat="queueCampaign in vm.queueCampaigns.rows">{{ queueCampaign.name }} ({{ queueCampaign.dialActive ? \'Active\' : \'Not Active\' }})</md-option>\n                    </md-select>\n                    <div ng-messages="disposition.queueCampaign.$error" ng-show="disposition.queueCampaign.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="DASHBOARDS.ERRORS.CAMPAIGN_REQUIRED">Campaign field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions ng-if="!vm.isReschedule" layout="row">\n            <md-button ng-disabled="disposition.$invalid || disposition.$pristine" class="send-button md-raised md-accent" ng-click="vm.saveDisposition()">\n                {{(vm.choice ? \'DASHBOARDS.DISPOSE\' : \'DASHBOARDS.SAVE\') | translate}}\n            </md-button>\n            <md-button class="send-button md-raised md-primary" translate="DASHBOARDS.RESCHEDULE" ng-click="vm.saveDisposition(\'reschedule\')">\n                Reschedule\n            </md-button>\n            <md-button class="send-button md-accent md-raised" translate="DASHBOARDS.RECALLME" ng-click="vm.saveDisposition(\'recallme\')">\n                Recall Me\n            </md-button>\n            <span flex></span>\n            <md-button ng-if="vm.hasBlackLists" class="md-raised md-warn" translate="DASHBOARDS.BLACKLIST" ng-click="vm.saveDisposition(\'blacklist\')">\n                Blacklist\n            </md-button>\n        </md-dialog-actions>\n        <md-dialog-actions ng-if="vm.isReschedule" layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.saveReschedule()" class="send-button md-accent md-raised" ng-disabled="disposition.$invalid || disposition.$pristine || vm.disable" aria-label="SAVE" translate="DASHBOARDS.SAVE" translate-attr-aria-label="DASHBOARDS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/contact/reschedule/dialog.html",'<md-dialog class="agent-dialog" aria-label="New Agent">\n    <form name="dateTime" class="md-inline-form" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div layout="row">\n                <div flex class="md-block">\n                    <mdp-date-picker mdp-open-on-click required name="date" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" mdp-min-date="vm.hopper.minDate" ng-model="vm.hopper.dateTime">\n                        <div ng-messages="dateTime.date.$error" ng-show="dateTime.date.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="DASHBOARDS.ERRORS.DATE_REQUIRED">Date is required</span>\n                            </div>\n                            <div ng-message="format">\n                                <span translate="DASHBOARDS.ERRORS.DATE_INVALID">Date is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-date-picker>\n                </div>\n\n                <div flex class="md-block">\n                    <mdp-time-picker mdp-open-on-click required name="time" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.hopper.dateTime">\n                        <div ng-messages="dateTime.time.$error" ng-show="dateTime.time.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="DASHBOARDS.ERRORS.TIME_REQUIRED">Time is required</span>\n                            </div>\n                            <div ng-message="format">\n                                <span translate="DASHBOARDS.ERRORS.TIME_INVALID">Time is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-disabled="vm.disable" ng-click="vm.saveDialog()" class="send-button md-accent md-raised" ng-disabled="dateTime.$invalid || dateTime.$pristine" aria-label="SAVE" translate="DASHBOARDS.SAVE" translate-attr-aria-label="DASHBOARDS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/home/abandoned/agent.general.abandoned.html",'<div ng-cloak>\n    <md-content>\n        <md-tabs md-selected="vm.selectedTab" md-dynamic-height md-border-bottom>\n            <md-tab ng-if="vm_home.hasPermission(110)" label="Voice">\n                <div ng-controller="AgentHomeAbandonedVoiceController as vm_voice">\n                    <md-content ng-if="vm.selectedTab==0" ng-include="\'app/main/apps/dashboards/views/general/agent/home/abandoned/voice/agent.general.abandoned.voice.html\'">\n                    </md-content>\n                </div>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(110) && vm_home.license.dialer" label="Bull">\n                <div ng-controller="AgentHomeAbandonedBullController as vm_bull">\n                    <md-content ng-if="vm.selectedTab==1" ng-include="\'app/main/apps/dashboards/views/general/agent/home/abandoned/bull/agent.general.abandoned.bull.html\'">\n                    </md-content>\n                </div>\n            </md-tab>\n        </md-tabs>\n    </md-content>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/abandoned/bull/agent.general.abandoned.bull.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header blue-bg" ng-class="{\'h-128\' : vm_bull.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools" layout="row" layout-align="center center">\n            <span class="md-subhead" translate="DASHBOARDS.ABANDONEDQUEUECALLS">ABANDONED QUEUE CALLS</span>\n            <ms-search-bar on-search="vm_bull.query.filter = query" on-collapse="vm_bull.onSearchBarCollapse()" on-expand="vm_bull.onSearchBarExpand()" query="vm_bull.query.filter" debounce="300" direction="down"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm_bull.pickerModel.dateStart" ng-click="vm_bull.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm_bull.localizationMap" ng-model="vm_bull.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm_bull.getAbandonedCalls()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm_bull.query.lastAssignedTo" ng-change="vm_bull.getAbandonedCalls()">\n                    <md-option ng-value="vm_bull.currentUser.name" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div ng-if="vm_bull.queues.count" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_CAMPAIGN">Select a Campaign</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm_bull.query.queue" ng-change="vm_bull.getAbandonedCalls()">\n                    <md-option ng-value="vm_bull.defaultQueues" ng-if="vm_bull.queues.count > 1"><em translate="DASHBOARDS.ALL">All</em></md-option>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm_bull.queues.rows">{{queue.name}}</md-option>\n                </md-select>\n            </div>\n            <md-button class="md-icon-button interaction-reload" ng-click="vm_bull.refresh && vm_bull.refreshAbandonedCalls($event)" aria-label="Reload" translate translate-attr-label="DASHBOARDS.RELOAD">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n                <md-tooltip ng-if="vm_bull.showTooltip" md-visible="vm_bull.showTooltip">{{\'DASHBOARDS.CLICKRELOAD\' | translate}}</md-tooltip>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm_bull.promise">\n            <thead md-head md-order="vm_bull.query.sort" md-on-reorder="vm_bull.getAbandonedCalls">\n                <tr md-row>\n                    <th md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column md-order-by="calleridname">{{\'DASHBOARDS.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="calleridnum">{{\'DASHBOARDS.PHONE\' | translate}}</th>\n                    <th md-column md-order-by="queue">{{\'DASHBOARDS.QUEUE\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerabandonAt">{{\'DASHBOARDS.ABANDONAT\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerexitAt">{{\'DASHBOARDS.QUEUECALLEREXITAT\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerexitreason">{{\'DASHBOARDS.QUEUECALLEREXITREASON\' | translate}}</th>\n                    <th md-column md-order-by="disposition">{{\'DASHBOARDS.DISPOSITION\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.RESERVED\' | translate}}</th>\n                    <th md-column md-order-by="lastAssignedTo">{{\'DASHBOARDS.LASTASSIGNEDTO\' | translate}}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm_bull.abandonedCalls.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="abandonedCall in vm_bull.abandonedCalls.rows">\n                    <td md-cell class="id">{{abandonedCall.id}}</td>\n                    <td md-cell class="firstName">{{abandonedCall.calleridname}}</td>\n                    <td md-cell class="phone">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="abandonedCall.calleridnum" license="vm_home.license" disabled="abandonedCall.lastAssignedTo !== vm_bull.currentUser.name"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="list">{{vm_bull.queuesMap[abandonedCall.queue]}}</td>\n                    <td md-cell class="list">{{abandonedCall.queuecallerabandonAt ? (abandonedCall.queuecallerabandonAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{abandonedCall.queuecallerexitAt ? (abandonedCall.queuecallerexitAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{abandonedCall.queuecallerexitreason}}</td>\n                    <td md-cell class="list">{{abandonedCall.disposition}}</td>\n                    <td md-cell class="actions">\n                        <md-switch no-margin ng-if="abandonedCall.lastAssignedTo === vm_bull.currentUser.name || !abandonedCall.lastAssignedTo" ng-disabled="vm_bull.disable[abandonedCall.id]" ng-model="abandonedCall.assigned" aria-label="reserved" ng-change="vm_bull.reserved(abandonedCall, abandonedCall.disposition)"></md-switch>\n                    </td>\n                    <td md-cell class="list">{{abandonedCall.lastAssignedTo}}</td>\n                    <td md-cell class="actions">\n                        <md-menu ng-if="abandonedCall.lastAssignedTo === vm_bull.currentUser.name">\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="1">\n                                <md-menu-item>\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.DISPOSE">Dispose</md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-if="vm_bull.disposition.length" ng-repeat="disposition in vm_bull.disposition">\n                                                <md-button ng-click="vm_bull.reserved(abandonedCall, disposition.name)">{{disposition.name}}</md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm_bull.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_bull.query.page" md-total="{{vm_bull.abandonedCalls.count}}" md-on-paginate="vm_bull.getAbandonedCalls" md-page-select></md-table-pagination>\n\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/abandoned/voice/agent.general.abandoned.voice.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header blue-bg" ng-class="{\'h-128\' : vm_voice.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools" layout="row" layout-align="center center">\n            <span class="md-subhead" translate="DASHBOARDS.ABANDONEDQUEUECALLS">ABANDONED QUEUE CALLS</span>\n            <ms-search-bar on-search="vm_voice.query.filter = query" on-collapse="vm_voice.onSearchBarCollapse()" on-expand="vm_voice.onSearchBarExpand()" query="vm_voice.query.filter" debounce="300" direction="down"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm_voice.pickerModel.dateStart" ng-click="vm_voice.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm_voice.localizationMap" ng-model="vm_voice.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm_voice.getAbandonedCalls()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm_voice.query.lastAssignedTo" ng-change="vm_voice.getAbandonedCalls()">\n                    <md-option ng-value="vm_voice.currentUser.name" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div ng-if="vm_voice.queues.count" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_CAMPAIGN">Select a Campaign</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm_voice.query.queue" ng-change="vm_voice.getAbandonedCalls()">\n                    <md-option ng-value="vm_voice.defaultQueues" ng-if="vm_voice.queues.count > 1"><em translate="DASHBOARDS.ALL">All</em></md-option>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm_voice.queues.rows">{{queue.name}}</md-option>\n                </md-select>\n            </div>\n            <md-button class="md-icon-button interaction-reload" ng-click="vm_voice.refresh && vm_voice.refreshAbandonedCalls($event)" aria-label="Reload" translate translate-attr-label="DASHBOARDS.RELOAD">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n                <md-tooltip ng-if="vm_voice.showTooltip" md-visible="vm_voice.showTooltip">{{\'DASHBOARDS.CLICKRELOAD\' | translate}}</md-tooltip>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm_voice.promise">\n            <thead md-head md-order="vm_voice.query.sort" md-on-reorder="vm_voice.getAbandonedCalls">\n                <tr md-row>\n                    <th md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column md-order-by="calleridname">{{\'DASHBOARDS.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="calleridnum">{{\'DASHBOARDS.PHONE\' | translate}}</th>\n                    <th md-column md-order-by="queue">{{\'DASHBOARDS.QUEUE\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerabandonAt">{{\'DASHBOARDS.ABANDONAT\' | translate}}</th>\n                    <th md-column md-order-by="disposition">{{\'DASHBOARDS.DISPOSITION\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.RESERVED\' | translate}}</th>\n                    <th md-column md-order-by="lastAssignedTo">{{\'DASHBOARDS.LASTASSIGNEDTO\' | translate}}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm_voice.abandonedCalls.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="abandonedCall in vm_voice.abandonedCalls.rows">\n                    <td md-cell class="id">{{abandonedCall.id}}</td>\n                    <td md-cell class="firstName">{{abandonedCall.calleridname}}</td>\n                    <td md-cell class="phone">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="abandonedCall.calleridnum" license="vm_home.license" disabled="abandonedCall.lastAssignedTo !== vm_voice.currentUser.name"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="list">{{vm_voice.queuesMap[abandonedCall.queue]}}</td>\n                    <td md-cell class="list">{{abandonedCall.queuecallerabandonAt ? (abandonedCall.queuecallerabandonAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{abandonedCall.disposition}}</td>\n                    <td md-cell class="actions">\n                        <md-switch no-margin ng-if="abandonedCall.lastAssignedTo === vm_voice.currentUser.name || !abandonedCall.lastAssignedTo" ng-disabled="vm_voice.disable[abandonedCall.id]" ng-model="abandonedCall.assigned" aria-label="reserved" ng-change="vm_voice.reserved(abandonedCall, abandonedCall.disposition)"></md-switch>\n                    </td>\n                    <td md-cell class="list">{{abandonedCall.lastAssignedTo}}</td>\n                    <td md-cell class="actions">\n                        <md-menu ng-if="abandonedCall.lastAssignedTo === vm_voice.currentUser.name">\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="1">\n                                <md-menu-item>\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.DISPOSE">Dispose</md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-if="vm_voice.disposition.length" ng-repeat="disposition in vm_voice.disposition">\n                                                <md-button ng-click="vm_voice.reserved(abandonedCall, disposition.name)">{{disposition.name}}</md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm_voice.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_voice.query.page" md-total="{{vm_voice.abandonedCalls.count}}" md-on-paginate="vm_voice.getAbandonedCalls" md-page-select></md-table-pagination>\n\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/agent.general.home.html",'<div layout="column" layout-align="start center" class="md-primary-bg width-50" ms-scroll>\n    <div ng-repeat="node in vm_home.navigation">\n        <div ng-repeat="home in node.children">\n            <md-button ng-repeat="button in home.children" ng-if="!button.hidden()" class="md-raised width-50 height-50 no-margin" style="border-radius: 0px" aria-label="{{button.state}}" ng-click="vm_home.changeSidebarTab(button)" ng-class="{\'md-primary\': vm_home.sidebar != button.state}">\n                <md-tooltip md-direction="right" md-delay="500"><span translate="{{button.translate}}"></span>\n                </md-tooltip>\n                <md-icon md-font-icon="{{button.icon}}" ng-class="button.iconClass"></md-icon>\n            </md-button>\n        </div>\n    </div>\n</div>\n<div layout="column" flex>\n    <div layout="column" flex>\n        <div ng-switch="vm_home.sidebar" style="overflow-y: auto" flex>\n            <div ng-switch-when="contacts">\n                <div ng-if="vm_home.hasPermission(102) && vm_home.license.cm" ng-include="\'app/main/apps/dashboards/views/general/agent/home/contacts/agent.general.contacts.html\'" ng-controller="AgentHomeContactsController as vm"></div>\n                <div ng-if="!vm_home.hasPermission(102) || !vm_home.license.cm" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="mycontacts">\n                <div ng-if="vm_home.hasPermission(103) && vm_home.license.cm" ng-include="\'app/main/apps/dashboards/views/general/agent/home/mycontacts/agent.general.mycontacts.html\'" ng-controller="AgentHomeMyContactsController as vm"></div>\n                <div ng-if="!vm_home.hasPermission(103) || !vm_home.license.cm" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="scheduled">\n                <div ng-if="vm_home.hasPermission(113) && vm_home.license.dialer" ng-include="\'app/main/apps/dashboards/views/general/agent/home/scheduled/agent.general.scheduled.html\'" ng-controller="AgentHomeScheduledCallsController as vm"></div>\n                <div ng-if="!vm_home.hasPermission(113) || !vm_home.license.dialer" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="voice">\n                <div ng-if="vm_home.hasPermission(110) && vm_home.license.voice" ng-include="\'app/main/apps/dashboards/views/general/agent/home/voice/agent.general.voice.html\'" ng-controller="AgentHomeVoiceController as vm"></div>\n                <div ng-if="!vm_home.hasPermission(110) || !vm_home.license.voice" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="abandoned">\n                <div ng-if="vm_home.hasPermission(111) && vm_home.license.voice" ng-include="\'app/main/apps/dashboards/views/general/agent/home/abandoned/agent.general.abandoned.html\'" ng-controller="AgentHomeAbandonedController as vm"></div>\n                <div ng-if="!vm_home.hasPermission(111) || !vm_home.license.voice" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="recordings">\n                <div ng-if="vm_home.hasPermission(104) && vm_home.license.voice" ng-include="\'app/main/apps/dashboards/views/general/agent/home/recordings/agent.general.recordings.html\'" ng-controller="AgentHomeRecordingsController as vm"></div>\n                <div ng-if="!vm_home.hasPermission(104) || !vm_home.license.voice" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="chat">\n                <div ng-if="vm_home.hasPermission(105) && vm_home.license.chat" ng-include="\'app/main/apps/dashboards/views/general/agent/home/chat/agent.general.chat.html\'" ng-controller="AgentHomeChatController as vm" ng-init="vm.onInit(vm_home.license, vm_home.setting)">\n                </div>\n                <div ng-if="!vm_home.hasPermission(105) || !vm_home.license.chat" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="mail">\n                <div ng-if="vm_home.hasPermission(106) && vm_home.license.mail" ng-include="\'app/main/apps/dashboards/views/general/agent/home/mail/agent.general.mail.html\'" ng-controller="AgentHomeMailController as vm" ng-init="vm.onInit(vm_home.license, vm_home.setting)">\n                </div>\n                <div ng-if="!vm_home.hasPermission(106) || !vm_home.license.mail" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="sms">\n                <div ng-if="vm_home.hasPermission(107) && vm_home.license.messaging" ng-include="\'app/main/apps/dashboards/views/general/agent/home/sms/agent.general.sms.html\'" ng-controller="AgentHomeSmsController as vm" ng-init="vm.onInit(vm_home.license, vm_home.setting)">\n                </div>\n                <div ng-if="!vm_home.hasPermission(107) || !vm_home.license.messaging" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="openchannel">\n                <div ng-if="vm_home.hasPermission(108) && vm_home.license.openchannel" ng-include="\'app/main/apps/dashboards/views/general/agent/home/openchannel/agent.general.openchannel.html\'" ng-controller="AgentHomeOpenchannelController as vm" ng-init="vm.onInit(vm_home.license, vm_home.setting)">\n                </div>\n                <div ng-if="!vm_home.hasPermission(108) || !vm_home.license.openchannel" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="fax">\n                <div ng-if="vm_home.hasPermission(109) && vm_home.license.fax" ng-include="\'app/main/apps/dashboards/views/general/agent/home/fax/agent.general.fax.html\'" ng-controller="AgentHomeFaxController as vm" ng-init="vm.onInit(vm_home.license, vm_home.setting)">\n                </div>\n                <div ng-if="!vm_home.hasPermission(109) || !vm_home.license.fax" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="plugin" layout-fill>\n                <div ng-if="vm_home.hasPermission(vm_home.pluginId)" ng-include="\'app/main/apps/dashboards/views/general/agent/home/plugins/agent.general.plugins.html\'" ng-controller="AgentHomePluginsController as vm" ng-init="vm.onInit(vm_home.license, vm_home.setting, vm_home.plugin)" layout-fill></div>\n                <div ng-if="!vm_home.hasPermission(vm_home.pluginId)" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-default>\n                <div ng-if="vm_home.hasPermission(101)" ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/agent.general.dashboard.html\'" ng-controller=" AgentHomeDashboardController  as vm"></div>\n                <div ng-if="!vm_home.hasPermission(101)" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n        </div>\n    </div>\n    <div ng-if="(vm_home.draftManager.drafts | json) != \'{}\'" layout="column" class="draft-manager-bar">\n        <ms-tab-scroll>\n            <div layout="column" ng-repeat="(key, draft) in vm_home.draftManager.drafts" class="grey-50-bg" ng-click="vm_home.draftManager.open(draft.id)">\n                <div class="draft-manager-tab" layout="row" layout-align="space-between center">\n                    <md-icon md-font-icon="icon-pencil" class="icon s16 margin-horizontal-5 black-fg"></md-icon>\n                    <span class="text-truncate font-size-12 black-fg">{{draft.title}}</span>\n                    <md-button class="md-icon-button md-mini no-margin md-primary" aria-label="close" ng-click="vm_home.draftManager.remove(draft.id)">\n                        <md-icon md-font-icon="icon-close-circle-outline" class="icon s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </ms-tab-scroll>\n    </div>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/chat/agent.general.chat.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header green-A700-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.CHAT_INTERACTIONS">Interactions</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down" exact-match-on-filter="true"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getChatInteractions()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_READ_UNREAD">Select Read/Unread</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.read" ng-change="vm.getChatInteractions()" aria-label="Filter read">\n                    <md-option value="0" translate="DASHBOARDS.UNREAD">READ</md-option>\n                    <md-option value="1" translate="DASHBOARDS.READ">UNREAD</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_STATUS">Select a status</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.closed" ng-change="vm.getChatInteractions()" aria-label="Filter status">\n                    <md-option value="0" translate="DASHBOARDS.OPENED">OPENED</md-option>\n                    <md-option value="1" translate="DASHBOARDS.CLOSED">CLOSED</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_WEBSITE">Select an account</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.ChatWebsiteId" md-selected-text="vm.quickFilterSelectedText.account" ng-change="vm.getChatInteractions()" ng-disabled="vm.chatAccounts.rows.length === 0" aria-label="Filter account">\n                    <md-option ng-repeat="chatAccount in vm.chatAccounts.rows" ng-value="chatAccount.id" ng-disabled="vm.query.ChatWebsiteId.length === 1 && vm.query.ChatWebsiteId[0] === chatAccount.id">{{chatAccount.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.ChatWebsiteId.length &lt; vm.chatAccounts.rows.length" layout-fill ng-click="vm.selectAll(\'account\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.ChatWebsiteId.length === vm.chatAccounts.rows.length" layout-fill ng-click="vm.clearSelection(\'account\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getChatInteractions()" aria-label="Filter agent">\n                    <md-option ng-value="vm.user.id" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getChatInteractions()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <div layout="column">\n                <md-button class="md-icon-button interaction-reload" aria-label="Reload" translate translate-attr-aria-label="DASHBOARDS.RELOAD" ng-click="vm.getChatInteractions()">\n                    <md-icon md-font-icon="icon-reload"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container class="interactions-list">\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getChatInteractions">\n                <tr md-row>\n                    <th class="id-header" md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column class="no-padding width-5">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column>{{\'DASHBOARDS.CONTACT\' | translate}}</th>\n                    <th md-column md-order-by="createdAt">{{\'DASHBOARDS.STARTEDAT\' | translate}}</th>\n                    <th md-column md-order-by="lastMsgAt">{{\'DASHBOARDS.LAST_MESSAGE\' | translate}}</th>\n                    <th md-column md-order-by="closed">{{\'DASHBOARDS.STATUS\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.WEBSITE\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.chatInteractions.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="DASHBOARDS.NO_AVAILABLE_INTERACTION">No Available Interaction</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="chatInteraction in vm.chatInteractions.rows" ng-class="{\'text-bold text-italic\': chatInteraction.unreadMessages > 0}">\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell class="id">\n                        <div layout="row" layout-align="start center">\n                            <span class="font-size-10">{{chatInteraction.id}}</span>\n                        </div>\n                    </td>\n                    <td md-cell>\n                        <div ng-if="!chatInteraction.closed && chatInteraction.Users.length">\n                            <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                            <md-tooltip>\n                                <span ng-repeat="u in chatInteraction.Users">{{ (u.id == vm.user.id) ? \'DASHBOARDS.ME\' : vm.usersByKey[u.id].fullname | translate }}<span ng-if="!$last">, </span></span>\n                            </md-tooltip>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="!chatInteraction.closed && chatInteraction.unreadMessages > 0" layout="row" layout-align="start center">\n                            <span class="badge white-fg green-A700-bg" layout-margin>{{chatInteraction.unreadMessages}}</span>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="chatInteraction.attach" layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell>\n                        <div layout="column" layout-align="start start">\n                            <span class="font-size-12 text-truncate contact-text" ng-class="{\'no-margin-bottom\' : chatInteraction.contactInfo}" layout-margin>{{ chatInteraction.contactName }}</span>\n                            <span ng-if="chatInteraction.contactInfo" class="font-size-12 text-truncate contact-text no-margin-top" layout-margin>{{ chatInteraction.contactInfo }}</span>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell>\n                        <span class="font-size-10 text-truncate">{{chatInteraction.createdAt | formatdate }}</span>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell>\n                        <div layout="row" ng-if="chatInteraction.lastMsgAt">\n                            <span>\n                                <md-icon md-font-icon="{{chatInteraction.lastMsgDirection == \'in\' ? \'icon-arrow-down-bold blue-grey-800-fg\' : \'icon-arrow-up-bold blue-grey-300-fg\'}}"></md-icon>\n                            </span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{chatInteraction.lastMsgAt | formatdate }}</span>\n                            </div>\n                        </div>\n                        <span ng-if="!chatInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell>\n                        <span ng-if="chatInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="chatInteraction.disposition">- {{chatInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="chatInteraction.closed">{{chatInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!chatInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="chatInteraction.substatus"> - {{chatInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate width-80">{{ vm.getUserLabel(chatInteraction) }}</span>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell class="chatAccount">\n                        {{ vm.getChatWebsiteLabel(chatInteraction) }}\n                    </td>\n                    <td md-cell>\n                        <div ng-if="chatInteraction.Tags.length">\n                            <div layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in chatInteraction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': chatInteraction.Tags.length == 1 && chatInteraction.Tags[0].color }"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions actions-padding">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.showChatInteraction($event, chatInteraction)" translate="DASHBOARDS.SHOW">\n                                        Show Chat\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadChatInteraction($event, chatInteraction)" translate="DASHBOARDS.DOWNLOAD">\n                                        Download Chat\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-label="{page: \'{{\'DASHBOARDS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'DASHBOARDS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'DASHBOARDS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.chatInteractions.count}}" md-on-paginate="vm.getChatInteractions" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/contacts/agent.general.contacts.html",'<md-card ng-init="vm.onInit()">\n    <md-toolbar class="md-table-toolbar md-default table-header red-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools" layout="row" layout-align="center center">\n            <span class="md-subhead" translate="DASHBOARDS.CONTACTS">Contacts</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_LIST">Select a list</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.ListId" md-selected-text="vm.quickFilterSelectedText.list" ng-disabled="vm.lists.rows.length === 0" ng-change="vm.getContacts()" aria-label="Filter lists">\n                    <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows" ng-disabled="vm.query.ListId.length === 1 && vm.query.ListId[0] === list.id">{{list.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.ListId || vm.query.ListId.length &lt; vm.lists.rows.length" layout-fill ng-click="vm.selectAll(\'list\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.ListId.length === vm.lists.rows.length" layout-fill ng-click="vm.clearSelection(\'list\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getContacts()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <md-button class="md-icon-button interaction-reload" ng-click="vm.refreshContacts($event)" aria-label="Reload" translate translate-attr-label="DASHBOARDS.RELOAD">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n            </md-button>\n            <md-button ng-if="vm.crudPermissions.canEdit" class="md-icon-button interaction-new" ng-click="vm.openContact($event)" aria-label="add contact" translate translate-attr-label="DASHBOARDS.ADD_CONTACT">\n                <md-icon md-font-icon="icon-plus"></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getContacts">\n                <tr md-row>\n                    <th md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column md-order-by="firstName">{{\'DASHBOARDS.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="phone">{{\'DASHBOARDS.PHONE\' | translate}}</th>\n                    <th md-column md-order-by="mobile">{{\'DASHBOARDS.MOBILE\' | translate}}</th>\n                    <th md-column md-order-by="fax">{{\'DASHBOARDS.FAX\' | translate}}</th>\n                    <th md-column md-order-by="email">{{\'DASHBOARDS.EMAIL\' | translate}}</th>\n                    <th md-column md-order-by="ListId">{{\'DASHBOARDS.LIST\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.contacts.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="contact in vm.contacts.rows">\n                    <td ng-click="vm.openContact(contact.id)" md-cell class="id">{{contact.id}}</td>\n                    <td ng-click="vm.openContact(contact.id)" md-cell class="firstName">{{contact.firstName}} {{contact.lastName}}</td>\n                    <td ng-click="vm.openContact(contact.id)" md-cell class="phone">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="contact.phone" prefix="vm.listsMap[contact.ListId].dialPrefix" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td ng-click="vm.openContact($event, contact.id)" md-cell class="mobile">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="contact.mobile" prefix="vm.listsMap[contact.ListId].dialPrefix" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td ng-click="vm.openContact(contact.id)" md-cell class="fax">{{contact.fax}}</td>\n                    <td ng-click="vm.openContact(contact.id)" md-cell class="email">{{contact.email}}</td>\n                    <td ng-click="vm.openContact(contact.id)" md-cell class="list">{{vm.listsMap[contact.ListId].name}}</td>\n                    <td md-cell class="tag">\n                        <div ng-if="contact.Tags.length">\n                            <div ng-if="contact.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': contact.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{contact.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="contact.Tags.length > 1" layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in contact.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n\n                            <md-menu-content width="3">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.openContact(contact.id)" translate="DASHBOARDS.EDIT">\n                                        Edit Contact\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.mergeContact($event, contact)" translate="DASHBOARDS.MERGE">\n                                        Merge Contact\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.duplicateContact($event, contact)" translate="DASHBOARDS.DUPLICATE">\n                                        Duplicate Contact\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.contacts.count}}" md-on-paginate="vm.getContacts" md-page-select></md-table-pagination>\n\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/agent.general.dashboard.html",'<div ng-cloak>\n    <md-content>\n        <md-tabs md-dynamic-height md-border-bottom>\n            <md-tab ng-if="vm_home.hasPermission(110) && vm_home.license.voice" label="{{\'DASHBOARDS.VOICE\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/voice/agent.general.dashboard.voice.html\'" ng-controller="AgentHomeDashboardVoiceController as vm_voice" class="md-padding">\n                </md-content>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(110) && vm_home.license.dialer" label="{{\'DASHBOARDS.MOTION_BULL\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/bull/agent.general.dashboard.bull.html\'" ng-controller="AgentHomeDashboardBullController as vm_bull" class="md-padding">\n                </md-content>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(105) && vm_home.license.chat" label="{{\'DASHBOARDS.CHAT\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/chat/agent.general.dashboard.chat.html\'" ng-controller="AgentHomeDashboardMultiChannelChatController as vm_chat" class="md-padding">\n                </md-content>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(106) && vm_home.license.mail" label="{{\'DASHBOARDS.MAIL\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/mail/agent.general.dashboard.mail.html\'" ng-controller="AgentHomeDashboardMultiChannelMailController as vm_mail" class="md-padding">\n                </md-content>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(107) && vm_home.license.messaging" label="{{\'DASHBOARDS.SMS\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/sms/agent.general.dashboard.sms.html\'" ng-controller="AgentHomeDashboardMultiChannelSmsController as vm_sms" class="md-padding">\n                </md-content>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(108) && vm_home.license.openchannel" label="{{\'DASHBOARDS.OPENCHANNEL\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/openchannel/agent.general.dashboard.openchannel.html\'" ng-controller="AgentHomeDashboardMultiChannelOpenchannelController as vm_openchannel" class="md-padding">\n                </md-content>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(109) && vm_home.license.fax" label="{{\'DASHBOARDS.FAX\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/fax/agent.general.dashboard.fax.html\'" ng-controller="AgentHomeDashboardMultiChannelFaxController as vm_fax" class="md-padding">\n                </md-content>\n            </md-tab>\n        </md-tabs>\n    </md-content>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/bull/agent.general.dashboard.bull.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header red-900-bg">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="VOICE.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_bull.promise">\n                <thead md-head md-order="vm_bull.query.sort" md-on-reorder="vm_bull.getVoiceQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'VOICE.NAME\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.TYPE\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.WAITING\' | translate }}</th>\n                        <th ng-if="voiceQueue.type === \'outbound\'" md-column>{{ \'VOICE.ACTIVE\' | translate }}</th>\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_bull.getSize(vm_bull.voiceQueues)">\n                        <td md-cell colspan="4">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, voiceQueue) in vm_bull.voiceQueues">\n                        <td md-cell class="name">{{voiceQueue.name}}</td>\n                        <td ng-if="voiceQueue.type === \'outbound\'" md-cell class="waiting">{{voiceQueue.dialMethod}}</td>\n                        <td md-cell class="waiting">{{voiceQueue.waiting || 0}}</td>\n                        <td md-cell ng-if="voiceQueue.type === \'outbound\'" class="dialActive ">\n                            <md-icon md-colors="{color: {{voiceQueue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{voiceQueue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_bull.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_bull.query.page" md-total="{{vm_bull.voiceQueuesTotal}}" md-on-paginate="vm_bull.getVoiceQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header red-900-bg">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'VOICE.DID\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.CALLER\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_bull.getSize(vm_bull.rpcVoiceQueuesChannels)">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, channel) in vm_bull.rpcVoiceQueuesChannels | limitObjectFromTo: vm_bull.queryChannels.limit:(vm_bull.queryChannels.page - 1) * vm_bull.queryChannels.limit">\n                        <td md-cell>{{channel.exten}}</td>\n                        <td md-cell>{{channel.queue}}</td>\n                        <td md-cell>{{channel.calleridnum}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_bull.queryChannels.limit" md-page="vm_bull.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_bull.getSize(vm_bull.rpcVoiceQueuesChannels)}}" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/chat/agent.general.dashboard.chat.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_chat.getColorByChannel(\'chat\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_chat.promise">\n                <thead md-head md-order="vm_chat.query.sort" md-on-reorder="vm_chat.getChatQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.NAME\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.WAITING\' | translate }}</th>\n                        \x3c!-- <th md-column>{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_chat.getSize(vm_chat.chatQueues)">\n                        <td md-cell colspan="2">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, queue) in vm_chat.chatQueues">\n                        <td md-cell class="name">{{queue.name}}</td>\n                        <td md-cell class="waiting">{{queue.waiting || 0}}</td>\n                        \x3c!-- <td md-cell class="dialActive ">\n                            <md-icon ng-if="queue.type === \'outbound\'" md-colors="{color: {{queue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{queue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            <md-icon ng-if="queue.type === \'inbound\'" md-colors="{color: \'green\'}" md-font-icon="icon-check"></md-icon>\n                        </td> --\x3e\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_chat.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_chat.query.page" md-total="{{vm_chat.chatQueuesTotal}}" md-on-paginate="vm_chat.getChatQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_chat.getColorByChannel(\'chat\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.CHANNEL_WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.ACCOUNT\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_FROM\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_chat.paginatedInteractions.length">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, interaction) in vm_chat.interactions">\n                        <td md-cell>{{interaction.account}}</td>\n                        <td md-cell>{{interaction.queue}}</td>\n                        <td md-cell>{{interaction.from}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_chat.queryChannels.limit" md-page="vm_chat.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_chat.paginatedInteractions.length}}" md-on-paginate="vm_chat.paginate" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/fax/agent.general.dashboard.fax.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_fax.getColorByChannel(\'fax\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_fax.promise">\n                <thead md-head md-order="vm_fax.query.sort" md-on-reorder="vm_fax.getFaxQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.NAME\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.WAITING\' | translate }}</th>\n                        \x3c!-- <th md-column>{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_fax.getSize(vm_fax.faxQueues)">\n                        <td md-cell colspan="2">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, queue) in vm_fax.faxQueues">\n                        <td md-cell class="name">{{queue.name}}</td>\n                        <td md-cell class="waiting">{{queue.waiting || 0}}</td>\n                        \x3c!-- <td md-cell class="dialActive ">\n                            <md-icon ng-if="queue.type === \'outbound\'" md-colors="{color: {{queue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{queue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            <md-icon ng-if="queue.type === \'inbound\'" md-colors="{color: \'green\'}" md-font-icon="icon-check"></md-icon>\n                        </td> --\x3e\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_fax.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_fax.query.page" md-total="{{vm_fax.faxQueuesTotal}}" md-on-paginate="vm_fax.getFaxQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_fax.getColorByChannel(\'fax\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.CHANNEL_WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.ACCOUNT\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_FROM\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_fax.paginatedInteractions.length">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, interaction) in vm_fax.interactions">\n                        <td md-cell>{{interaction.account}}</td>\n                        <td md-cell>{{interaction.queue}}</td>\n                        <td md-cell>{{interaction.from}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_fax.queryChannels.limit" md-page="vm_fax.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_fax.paginatedInteractions.length}}" md-on-paginate="vm_fax.paginate" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/mail/agent.general.dashboard.mail.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_mail.getColorByChannel(\'mail\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_mail.promise">\n                <thead md-head md-order="vm_mail.query.sort" md-on-reorder="vm_mail.getMailQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.NAME\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.WAITING\' | translate }}</th>\n                        \x3c!-- <th md-column>{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_mail.getSize(vm_mail.mailQueues)">\n                        <td md-cell colspan="2">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, queue) in vm_mail.mailQueues">\n                        <td md-cell class="name">{{queue.name}}</td>\n                        <td md-cell class="waiting">{{queue.waiting || 0}}</td>\n                        \x3c!-- <td md-cell class="dialActive ">\n                            <md-icon ng-if="queue.type === \'outbound\'" md-colors="{color: {{queue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{queue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            <md-icon ng-if="queue.type === \'inbound\'" md-colors="{color: \'green\'}" md-font-icon="icon-check"></md-icon>\n                        </td> --\x3e\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_mail.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_mail.query.page" md-total="{{vm_mail.mailQueuesTotal}}" md-on-paginate="vm_mail.getMailQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_mail.getColorByChannel(\'mail\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.CHANNEL_WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.ACCOUNT\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_FROM\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_mail.paginatedInteractions.length">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, interaction) in vm_mail.interactions">\n                        <td md-cell>{{interaction.account}}</td>\n                        <td md-cell>{{interaction.queue}}</td>\n                        <td md-cell>{{interaction.from}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_mail.queryChannels.limit" md-page="vm_mail.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_mail.paginatedInteractions.length}}" md-on-paginate="vm_mail.paginate" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/openchannel/agent.general.dashboard.openchannel.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_openchannel.getColorByChannel(\'openchannel\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_openchannel.promise">\n                <thead md-head md-order="vm_openchannel.query.sort" md-on-reorder="vm_openchannel.getOpenchannelQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.NAME\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.WAITING\' | translate }}</th>\n                        \x3c!-- <th md-column>{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_openchannel.getSize(vm_openchannel.openchannelQueues)">\n                        <td md-cell colspan="2">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, queue) in vm_openchannel.openchannelQueues">\n                        <td md-cell class="name">{{queue.name}}</td>\n                        <td md-cell class="waiting">{{queue.waiting || 0}}</td>\n                        \x3c!-- <td md-cell class="dialActive ">\n                            <md-icon ng-if="queue.type === \'outbound\'" md-colors="{color: {{queue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{queue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            <md-icon ng-if="queue.type === \'inbound\'" md-colors="{color: \'green\'}" md-font-icon="icon-check"></md-icon>\n                        </td> --\x3e\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_openchannel.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_openchannel.query.page" md-total="{{vm_openchannel.openchannelQueuesTotal}}" md-on-paginate="vm_openchannel.getOpenchannelQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_openchannel.getColorByChannel(\'openchannel\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.CHANNEL_WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.ACCOUNT\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_FROM\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_openchannel.paginatedInteractions.length">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, interaction) in vm_openchannel.interactions">\n                        <td md-cell>{{interaction.account}}</td>\n                        <td md-cell>{{interaction.queue}}</td>\n                        <td md-cell>{{interaction.from}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_openchannel.queryChannels.limit" md-page="vm_openchannel.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_openchannel.paginatedInteractions.length}}" md-on-paginate="vm_openchannel.paginate" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/sms/agent.general.dashboard.sms.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_sms.getColorByChannel(\'sms\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_sms.promise">\n                <thead md-head md-order="vm_sms.query.sort" md-on-reorder="vm_sms.getSmsQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.NAME\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.WAITING\' | translate }}</th>\n                        \x3c!-- <th md-column>{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_sms.getSize(vm_sms.smsQueues)">\n                        <td md-cell colspan="2">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, queue) in vm_sms.smsQueues">\n                        <td md-cell class="name">{{queue.name}}</td>\n                        <td md-cell class="waiting">{{queue.waiting || 0}}</td>\n                        \x3c!-- <td md-cell class="dialActive ">\n                            <md-icon ng-if="queue.type === \'outbound\'" md-colors="{color: {{queue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{queue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            <md-icon ng-if="queue.type === \'inbound\'" md-colors="{color: \'green\'}" md-font-icon="icon-check"></md-icon>\n                        </td> --\x3e\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_sms.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_sms.query.page" md-total="{{vm_sms.smsQueuesTotal}}" md-on-paginate="vm_sms.getSmsQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_sms.getColorByChannel(\'sms\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.CHANNEL_WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.ACCOUNT\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_FROM\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_sms.paginatedInteractions.length">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, interaction) in vm_sms.interactions">\n                        <td md-cell>{{interaction.account}}</td>\n                        <td md-cell>{{interaction.queue}}</td>\n                        <td md-cell>{{interaction.from}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_sms.queryChannels.limit" md-page="vm_sms.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_sms.paginatedInteractions.length}}" md-on-paginate="vm_sms.paginate" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/voice/agent.general.dashboard.voice.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header blue-A700-bg ">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="VOICE.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_voice.promise">\n                <thead md-head md-order="vm_voice.query.sort" md-on-reorder="vm_voice.getVoiceQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'VOICE.NAME\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.WAITING\' | translate }}</th>\n                        <th ng-if="voiceQueue.type === \'outbound\'" md-column>{{ \'VOICE.ACTIVE\' | translate }}</th>\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_voice.getSize(vm_voice.voiceQueues)">\n                        <td md-cell colspan="2">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, voiceQueue) in vm_voice.voiceQueues">\n                        <td md-cell class="name">{{voiceQueue.name}}</td>\n                        <td ng-if="voiceQueue.type === \'outbound\'" md-cell class="waiting">{{voiceQueue.dialMethod}}</td>\n                        <td md-cell class="waiting">{{voiceQueue.waiting || 0}}</td>\n                        <td md-cell ng-if="voiceQueue.type === \'outbound\'" class="dialActive ">\n                            <md-icon md-colors="{color: {{voiceQueue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{voiceQueue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_voice.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_voice.query.page" md-total="{{vm_voice.voiceQueuesTotal}}" md-on-paginate="vm_voice.getVoiceQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header blue-A700-bg ">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'VOICE.DID\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.CALLER\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_voice.getSize(vm_voice.rpcVoiceQueuesChannels)">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, channel) in vm_voice.rpcVoiceQueuesChannels | limitObjectFromTo: vm_voice.queryChannels.limit:(vm_voice.queryChannels.page - 1) * vm_voice.queryChannels.limit">\n                        <td md-cell>{{channel.exten}}</td>\n                        <td md-cell>{{channel.queue}}</td>\n                        <td md-cell>{{channel.calleridnum}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_voice.queryChannels.limit" md-page="vm_voice.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_voice.getSize(vm_voice.rpcVoiceQueuesChannels)}}" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/fax/agent.general.fax.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header blue-grey-A200-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.FAX_INTERACTIONS">Interactions</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down" exact-match-on-filter="true"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getFaxInteractions()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_READ_UNREAD">Select Read/Unread</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.read" ng-change="vm.getFaxInteractions()" aria-label="Filter read">\n                    <md-option value="0" translate="DASHBOARDS.UNREAD">READ</md-option>\n                    <md-option value="1" translate="DASHBOARDS.READ">UNREAD</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_STATUS">Select a status</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.closed" ng-change="vm.getFaxInteractions()" aria-label="Filter status">\n                    <md-option value="0" translate="DASHBOARDS.OPENED">OPENED</md-option>\n                    <md-option value="1" translate="DASHBOARDS.CLOSED">CLOSED</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_ACCOUNT">Select an account</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.FaxAccountId" md-selected-text="vm.quickFilterSelectedText.account" ng-change="vm.getFaxInteractions()" ng-disabled="vm.faxAccounts.rows.length === 0" aria-label="Filter account">\n                    <md-option ng-repeat="faxAccount in vm.faxAccounts.rows" ng-value="faxAccount.id" ng-disabled="vm.query.FaxAccountId.length === 1 && vm.query.FaxAccountId[0] === faxAccount.id">{{faxAccount.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.FaxAccountId.length &lt; vm.faxAccounts.rows.length" layout-fill ng-click="vm.selectAll(\'account\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.FaxAccountId.length === vm.faxAccounts.rows.length" layout-fill ng-click="vm.clearSelection(\'account\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getFaxInteractions()" aria-label="Filter agent">\n                    <md-option ng-value="vm.user.id" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getFaxInteractions()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <div layout="column">\n                <md-button class="md-icon-button interaction-reload" aria-label="Reload" translate translate-attr-aria-label="DASHBOARDS.RELOAD" ng-click="vm.getFaxInteractions()">\n                    <md-icon md-font-icon="icon-reload"></md-icon>\n                </md-button>\n            </div>\n            <md-menu ng-if="vm.faxAccounts.rows && vm.faxAccounts.rows.length">\n                <md-button class="md-icon-button interaction-new" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                    <md-icon md-font-icon="icon-plus"></md-icon>\n                </md-button>\n                <md-menu-content width="3">\n                    <md-menu-item ng-repeat="faxAccount in vm.faxAccounts.rows">\n                        <md-button aria-label="compose" ng-click="vm.composeFaxInteraction($event, faxAccount)">{{ faxAccount.name }} ({{ faxAccount.key }})</md-button>\n                    </md-menu-item>\n                </md-menu-content>\n            </md-menu>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container class="interactions-list">\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getFaxInteractions">\n                <tr md-row>\n                    <th class="id-header" md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column class="no-padding width-5">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column>{{\'DASHBOARDS.CONTACT\' | translate}}</th>\n                    <th md-column md-order-by="createdAt">{{\'DASHBOARDS.STARTEDAT\' | translate}}</th>\n                    <th md-column md-order-by="lastMsgAt">{{\'DASHBOARDS.LAST_MESSAGE\' | translate}}</th>\n                    <th md-column md-order-by="closed">{{\'DASHBOARDS.STATUS\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.faxInteractions.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="DASHBOARDS.NO_AVAILABLE_INTERACTION">No Available Interaction</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="faxInteraction in vm.faxInteractions.rows" ng-class="{\'text-bold text-italic\': faxInteraction.unreadMessages > 0}">\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell class="id">\n                        <div layout="row" layout-align="start center">\n                            <span class="font-size-10">{{faxInteraction.id}}</span>\n                        </div>\n                    </td>\n                    <td md-cell>\n                        <div ng-if="!faxInteraction.closed && faxInteraction.Users.length">\n                            <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                            <md-tooltip>\n                                <span ng-repeat="u in faxInteraction.Users">{{ (u.id == vm.user.id) ? \'DASHBOARDS.ME\' : vm.usersByKey[u.id].fullname | translate }}<span ng-if="!$last">, </span></span>\n                            </md-tooltip>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="!faxInteraction.closed && faxInteraction.unreadMessages > 0" layout="row" layout-align="start center">\n                            <span class="badge white-fg blue-grey-A200-bg" layout-margin>{{faxInteraction.unreadMessages}}</span>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="faxInteraction.attach" layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell>\n                        <div layout="column" layout-align="start start">\n                            <span class="font-size-12 text-truncate contact-text" ng-class="{\'no-margin-bottom\' : faxInteraction.contactInfo}" layout-margin>{{ faxInteraction.contactName }}</span>\n                            <span ng-if="faxInteraction.contactInfo" class="font-size-12 text-truncate contact-text no-margin-top" layout-margin>{{ faxInteraction.contactInfo }}</span>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell>\n                        <span class="font-size-10 text-truncate">{{faxInteraction.createdAt | formatdate }}</span>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell>\n                        <div layout="row" ng-if="faxInteraction.lastMsgAt">\n                            <span>\n                                <md-icon md-font-icon="{{faxInteraction.lastMsgDirection == \'in\' ? \'icon-arrow-down-bold blue-grey-800-fg\' : \'icon-arrow-up-bold blue-grey-300-fg\'}}"></md-icon>\n                            </span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{faxInteraction.lastMsgAt | formatdate }}</span>\n                            </div>\n                        </div>\n                        <span ng-if="!faxInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell>\n                        <span ng-if="faxInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="faxInteraction.disposition">- {{faxInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="faxInteraction.closed">{{faxInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!faxInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="faxInteraction.substatus"> - {{faxInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate width-80">{{ vm.getUserLabel(faxInteraction) }}</span>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell class="faxAccount">\n                        {{ vm.getFaxAccountLabel(faxInteraction) }}\n                    </td>\n                    <td md-cell>\n                        <div ng-if="faxInteraction.Tags.length">\n                            <div layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in faxInteraction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': faxInteraction.Tags.length == 1 && faxInteraction.Tags[0].color }"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions actions-padding">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.showFaxInteraction($event, faxInteraction)" translate="DASHBOARDS.SHOW">\n                                        Show Fax\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadFaxInteraction($event, faxInteraction)" translate="DASHBOARDS.DOWNLOAD">\n                                        Download Fax\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-label="{page: \'{{\'DASHBOARDS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'DASHBOARDS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'DASHBOARDS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.faxInteractions.count}}" md-on-paginate="vm.getFaxInteractions" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/mail/agent.general.mail.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header teal-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.MAIL_INTERACTIONS">Interactions</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down" exact-match-on-filter="true"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getMailInteractions()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_READ_UNREAD">Select Read/Unread</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.read" ng-change="vm.getMailInteractions()" aria-label="Filter read">\n                    <md-option value="0" translate="DASHBOARDS.UNREAD">READ</md-option>\n                    <md-option value="1" translate="DASHBOARDS.READ">UNREAD</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_STATUS">Select a status</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.closed" ng-change="vm.getMailInteractions()" aria-label="Filter status">\n                    <md-option value="0" translate="DASHBOARDS.OPENED">OPENED</md-option>\n                    <md-option value="1" translate="DASHBOARDS.CLOSED">CLOSED</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column" ng-if="vm.query.closed == 0">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_SUBSTATUS">Select a sub status</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.substatus" ng-change="vm.getMailInteractions()" aria-label="Filter sub status">\n                    <md-option ng-repeat="subStatus in vm.subStatuses.rows" ng-value="subStatus.name">{{subStatus.name}}</md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NONE"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_ACCOUNT">Select an account</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.MailAccountId" md-selected-text="vm.quickFilterSelectedText.account" ng-change="vm.getMailInteractions()" ng-disabled="vm.mailAccounts.rows.length === 0" aria-label="Filter account">\n                    <md-option ng-repeat="mailAccount in vm.mailAccounts.rows" ng-value="mailAccount.id" ng-disabled="vm.query.MailAccountId.length === 1 && vm.query.MailAccountId[0] === mailAccount.id">{{mailAccount.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.MailAccountId.length &lt; vm.mailAccounts.rows.length" layout-fill ng-click="vm.selectAll(\'account\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.MailAccountId.length === vm.mailAccounts.rows.length" layout-fill ng-click="vm.clearSelection(\'account\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getMailInteractions()" aria-label="Filter agent">\n                    <md-option ng-value="vm.user.id" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getMailInteractions()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <div layout="column">\n                <md-button class="md-icon-button interaction-reload" aria-label="Reload" translate translate-attr-aria-label="DASHBOARDS.RELOAD" ng-click="vm.getMailInteractions()">\n                    <md-icon md-font-icon="icon-reload"></md-icon>\n                </md-button>\n            </div>\n            <md-menu ng-if="vm.mailAccounts.rows && vm.mailAccounts.rows.length">\n                <md-button class="md-icon-button interaction-new" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                    <md-icon md-font-icon="icon-plus"></md-icon>\n                </md-button>\n                <md-menu-content width="3">\n                    <md-menu-item ng-repeat="mailAccount in vm.mailAccounts.rows">\n                        <md-button aria-label="compose" ng-click="vm.composeMailInteraction($event, mailAccount)">{{ mailAccount.name }} ({{ mailAccount.key }})</md-button>\n                    </md-menu-item>\n                </md-menu-content>\n            </md-menu>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container class="interactions-list">\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMailInteractions">\n                <tr md-row>\n                    <th class="id-header" md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column class="no-padding width-5">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column>{{\'DASHBOARDS.CONTACT\' | translate}}</th>\n                    <th md-column md-order-by="subject">{{\'DASHBOARDS.SUBJECT\' | translate}}</th>\n                    <th md-column md-order-by="createdAt">{{\'DASHBOARDS.STARTEDAT\' | translate}}</th>\n                    <th md-column md-order-by="lastMsgAt">{{\'DASHBOARDS.LAST_MESSAGE\' | translate}}</th>\n                    <th md-column md-order-by="closed">{{\'DASHBOARDS.STATUS\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.mailInteractions.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="DASHBOARDS.NO_AVAILABLE_INTERACTION">No Available Interaction</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="mailInteraction in vm.mailInteractions.rows" ng-class="{\'text-bold text-italic\': mailInteraction.unreadMessages > 0}">\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell class="id">\n                        <div layout="row" layout-align="start center">\n                            <span class="font-size-10">{{mailInteraction.id}}</span>\n                        </div>\n                    </td>\n                    <td md-cell>\n                        <div ng-if="!mailInteraction.closed && mailInteraction.Users.length">\n                            <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                            <md-tooltip>\n                                <span ng-repeat="u in mailInteraction.Users">{{ (u.id == vm.user.id) ? \'DASHBOARDS.ME\' : vm.usersByKey[u.id].fullname | translate }}<span ng-if="!$last">, </span></span>\n                            </md-tooltip>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="!mailInteraction.closed && mailInteraction.unreadMessages > 0" layout="row" layout-align="start center">\n                            <span class="badge white-fg teal-bg" layout-margin>{{mailInteraction.unreadMessages}}</span>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="mailInteraction.attach" layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <div layout="column" layout-align="start start">\n                            <span class="font-size-12 text-truncate contact-text" ng-class="{\'no-margin-bottom\' : mailInteraction.contactInfo}" layout-margin>{{ mailInteraction.contactName }}</span>\n                            <span ng-if="mailInteraction.contactInfo" class="font-size-12 text-truncate contact-text no-margin-top" layout-margin>{{ mailInteraction.contactInfo }}</span>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <div ng-if="vm.setting.enableEmailPreview && mailInteraction.lastMsgText" class="tooltip-preview">\n                            <span class="text-truncate font-size-12 subject-text">{{ mailInteraction.subject }}</span>\n                            <md-card class="tooltip-preview-text" ng-style="{top: \'-\' + ((($index % 10) + 1) * 18) + \'px\'}">\n                                <md-card-content><span class="email-preview-message">{{ mailInteraction.lastMsgText }}</span></md-card-content>\n                            </md-card>\n                        </div>\n                        <span ng-if="!mailInteraction.lastMsgText || !vm.setting.enableEmailPreview" class="text-truncate font-size-12">{{ mailInteraction.subject }}</span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <span class="font-size-10 text-truncate">{{mailInteraction.createdAt | formatdate }}</span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <div layout="row" ng-if="mailInteraction.lastMsgAt">\n                            <span>\n                                <md-icon md-font-icon="{{mailInteraction.lastMsgDirection == \'in\' ? \'icon-arrow-down-bold blue-grey-800-fg\' : \'icon-arrow-up-bold blue-grey-300-fg\'}}"></md-icon>\n                            </span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{mailInteraction.lastMsgAt | formatdate }}</span>\n                            </div>\n                        </div>\n                        <span ng-if="!mailInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <span ng-if="mailInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="mailInteraction.disposition">- {{mailInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="mailInteraction.closed">{{mailInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!mailInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="mailInteraction.substatus"> - {{mailInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate width-80">{{ vm.getUserLabel(mailInteraction) }}</span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell class="mailAccount">\n                        {{ vm.getMailAccountLabel(mailInteraction) }}\n                    </td>\n                    <td md-cell>\n                        <div ng-if="mailInteraction.Tags.length">\n                            <div layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in mailInteraction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': mailInteraction.Tags.length == 1 && mailInteraction.Tags[0].color }"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions actions-padding">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.showMailInteraction($event, mailInteraction)" translate="DASHBOARDS.SHOW">\n                                        Show Mail\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadMailInteraction($event, mailInteraction, true)" translate="MAIL.DOWNLOAD_WITH_ATTACHMENTS">\n                                        Download with attachments\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadMailInteraction($event, mailInteraction)" translate="MAIL.DOWNLOAD_WITHOUT_ATTACHMENTS">\n                                        Download without attachments\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-label="{page: \'{{\'DASHBOARDS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'DASHBOARDS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'DASHBOARDS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.mailInteractions.count}}" md-on-paginate="vm.getMailInteractions" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/mycontacts/agent.general.mycontacts.html",'<md-card ng-init="vm.onInit()">\n    <md-toolbar class="md-table-toolbar md-default table-header red-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools" layout="row" layout-align="center center">\n            <span class="md-subhead" translate="DASHBOARDS.MYCONTACTS">My Contacts</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_LIST">Select a list</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.ListId" md-selected-text="vm.quickFilterSelectedText.list" ng-change="vm.getContacts()" aria-label="Filter lists">\n                    <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows" ng-disabled="vm.query.ListId.length === 1 && vm.query.ListId[0] === list.id">{{list.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.ListId || vm.query.ListId.length &lt; vm.lists.rows.length" layout-fill ng-click="vm.selectAll(\'list\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.ListId.length === vm.lists.rows.length" layout-fill ng-click="vm.clearSelection(\'list\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getContacts()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <md-button class="md-icon-button interaction-reload" ng-click="vm.refreshContacts($event)" aria-label="Reload" translate translate-attr-label="DASHBOARDS.RELOAD">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n            </md-button>\n            <md-button class="md-icon-button interaction-new" ng-click="vm.openContact($event)" aria-label="add contact" translate translate-attr-label="DASHBOARDS.ADD_CONTACT">\n                <md-icon md-font-icon="icon-plus "></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getContacts">\n                <tr md-row>\n                    <th md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column md-order-by="firstName">{{\'DASHBOARDS.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="phone">{{\'DASHBOARDS.PHONE\' | translate}}</th>\n                    <th md-column md-order-by="mobile">{{\'DASHBOARDS.MOBILE\' | translate}}</th>\n                    <th md-column md-order-by="fax">{{\'DASHBOARDS.FAX\' | translate}}</th>\n                    <th md-column md-order-by="email">{{\'DASHBOARDS.EMAIL\' | translate}}</th>\n                    <th md-column md-order-by="ListId">{{\'DASHBOARDS.LIST\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.contacts.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="contact in vm.contacts.rows">\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="id">{{contact.id}}</td>\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="firstName">{{contact.firstName}} {{contact.lastName}}</td>\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="phone">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="contact.phone" prefix="vm.listsMap[contact.ListId].dialPrefix" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="mobile">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="contact.mobile" prefix="vm.listsMap[contact.ListId].dialPrefix" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="fax">{{contact.fax}}</td>\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="email">{{contact.email}}</td>\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="list">{{vm.listsMap[contact.ListId].name}}</td>\n                    <td md-cell class="tag">\n                        <div ng-if="contact.Tags.length">\n                            <div ng-if="contact.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': contact.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{contact.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="contact.Tags.length > 1" layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in contact.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n\n                            <md-menu-content width="3">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.openContact($event, contact)" translate="DASHBOARDS.EDIT">\n                                        Edit Contact\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.mergeContact($event, contact)" translate="DASHBOARDS.MERGE">\n                                        Merge Contact\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.duplicateContact($event, contact)" translate="DASHBOARDS.DUPLICATE">\n                                        Duplicate Contact\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.contacts.count}}" md-on-paginate="vm.getContacts" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/openchannel/agent.general.openchannel.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header amber-A200-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.OPENCHANNEL_INTERACTIONS">Interactions</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down" exact-match-on-filter="true"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getOpenchannelInteractions()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_READ_UNREAD">Select Read/Unread</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.read" ng-change="vm.getOpenchannelInteractions()" aria-label="Filter read">\n                    <md-option value="0" translate="DASHBOARDS.UNREAD">READ</md-option>\n                    <md-option value="1" translate="DASHBOARDS.READ">UNREAD</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_STATUS">Select a status</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.closed" ng-change="vm.getOpenchannelInteractions()" aria-label="Filter status">\n                    <md-option value="0" translate="DASHBOARDS.OPENED">OPENED</md-option>\n                    <md-option value="1" translate="DASHBOARDS.CLOSED">CLOSED</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_ACCOUNT">Select an account</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.OpenchannelAccountId" md-selected-text="vm.quickFilterSelectedText.account" ng-change="vm.getOpenchannelInteractions()" ng-disabled="vm.openchannelAccounts.rows.length === 0" aria-label="Filter account">\n                    <md-option ng-repeat="openchannelAccount in vm.openchannelAccounts.rows" ng-value="openchannelAccount.id" ng-disabled="vm.query.OpenchannelAccountId.length === 1 && vm.query.OpenchannelAccountId[0] === openchannelAccount.id">{{openchannelAccount.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.OpenchannelAccountId.length &lt; vm.openchannelAccounts.rows.length" layout-fill ng-click="vm.selectAll(\'account\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.OpenchannelAccountId.length === vm.openchannelAccounts.rows.length" layout-fill ng-click="vm.clearSelection(\'account\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getOpenchannelInteractions()" aria-label="Filter agent">\n                    <md-option ng-value="vm.user.id" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getOpenchannelInteractions()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <div layout="column">\n                <md-button class="md-icon-button interaction-reload" aria-label="Reload" translate translate-attr-aria-label="DASHBOARDS.RELOAD" ng-click="vm.getOpenchannelInteractions()">\n                    <md-icon md-font-icon="icon-reload"></md-icon>\n                </md-button>\n            </div>\n            <md-menu ng-if="vm.openchannelAccounts.rows && vm.openchannelAccounts.rows.length">\n                <md-button class="md-icon-button interaction-new" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                    <md-icon md-font-icon="icon-plus"></md-icon>\n                </md-button>\n                <md-menu-content width="3">\n                    <md-menu-item ng-repeat="openchannelAccount in vm.openchannelAccounts.rows">\n                        <md-button aria-label="compose" ng-click="vm.composeOpenchannelInteraction($event, openchannelAccount)">{{ openchannelAccount.name }} ({{ openchannelAccount.key }})</md-button>\n                    </md-menu-item>\n                </md-menu-content>\n            </md-menu>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container class="interactions-list">\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getOpenchannelInteractions">\n                <tr md-row>\n                    <th class="id-header" md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column class="no-padding width-5">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column>{{\'DASHBOARDS.CONTACT\' | translate}}</th>\n                    <th md-column md-order-by="createdAt">{{\'DASHBOARDS.STARTEDAT\' | translate}}</th>\n                    <th md-column md-order-by="lastMsgAt">{{\'DASHBOARDS.LAST_MESSAGE\' | translate}}</th>\n                    <th md-column md-order-by="closed">{{\'DASHBOARDS.STATUS\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.openchannelInteractions.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="DASHBOARDS.NO_AVAILABLE_INTERACTION">No Available Interaction</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="openchannelInteraction in vm.openchannelInteractions.rows" ng-class="{\'text-bold text-italic\': openchannelInteraction.unreadMessages > 0}">\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell class="id">\n                        <div layout="row" layout-align="start center">\n                            <span class="font-size-10">{{openchannelInteraction.id}}</span>\n                        </div>\n                    </td>\n                    <td md-cell>\n                        <div ng-if="!openchannelInteraction.closed && openchannelInteraction.Users.length">\n                            <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                            <md-tooltip>\n                                <span ng-repeat="u in openchannelInteraction.Users">{{ (u.id == vm.user.id) ? \'DASHBOARDS.ME\' : vm.usersByKey[u.id].fullname | translate }}<span ng-if="!$last">, </span></span>\n                            </md-tooltip>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="!openchannelInteraction.closed && openchannelInteraction.unreadMessages > 0" layout="row" layout-align="start center">\n                            <span class="badge white-fg amber-A200-bg" layout-margin>{{openchannelInteraction.unreadMessages}}</span>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="openchannelInteraction.attach" layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell>\n                        <div layout="column" layout-align="start start">\n                            <span class="font-size-12 text-truncate contact-text" ng-class="{\'no-margin-bottom\' : openchannelInteraction.contactInfo}" layout-margin>{{ openchannelInteraction.contactName }}</span>\n                            <span ng-if="openchannelInteraction.contactInfo" class="font-size-12 text-truncate contact-text no-margin-top" layout-margin>{{ openchannelInteraction.contactInfo }}</span>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell>\n                        <span class="font-size-10 text-truncate">{{openchannelInteraction.createdAt | formatdate }}</span>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell>\n                        <div layout="row" ng-if="openchannelInteraction.lastMsgAt">\n                            <span>\n                                <md-icon md-font-icon="{{openchannelInteraction.lastMsgDirection == \'in\' ? \'icon-arrow-down-bold blue-grey-800-fg\' : \'icon-arrow-up-bold blue-grey-300-fg\'}}"></md-icon>\n                            </span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{openchannelInteraction.lastMsgAt | formatdate }}</span>\n                            </div>\n                        </div>\n                        <span ng-if="!openchannelInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell>\n                        <span ng-if="openchannelInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="openchannelInteraction.disposition">- {{openchannelInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="openchannelInteraction.closed">{{openchannelInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!openchannelInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="openchannelInteraction.substatus"> - {{openchannelInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate width-80">{{ vm.getUserLabel(openchannelInteraction) }}</span>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell class="openchannelAccount">\n                        {{ vm.getOpenchannelAccountLabel(openchannelInteraction) }}\n                    </td>\n                    <td md-cell>\n                        <div ng-if="openchannelInteraction.Tags.length">\n                            <div layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in openchannelInteraction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': openchannelInteraction.Tags.length == 1 && openchannelInteraction.Tags[0].color }"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions actions-padding">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" translate="DASHBOARDS.SHOW">\n                                        Show Openchannel\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadOpenchannelInteraction($event, openchannelInteraction)" translate="DASHBOARDS.DOWNLOAD">\n                                        Download Openchannel\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-label="{page: \'{{\'DASHBOARDS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'DASHBOARDS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'DASHBOARDS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.openchannelInteractions.count}}" md-on-paginate="vm.getOpenchannelInteractions" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/plugins/agent.general.plugins.html",'<div id="plugin" ng-if="vm.plugin" ng-cloak layout-fill>\n    <iframe ng-src="{{vm.getTrustedURL()}}" frameborder=0 style="border:0px; width:100%; height:100%;"></iframe>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/recordings/agent.general.recordings.html",'<md-card ng-init="vm.onInit()">\n    <md-toolbar class="md-table-toolbar md-default table-header indigo-A100-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="VOICE.RECORDINGS">Recordings</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="VOICE.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'VOICE.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getVoiceRecordings()" placeholder="{{ \'VOICE.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="VOICE.SELECT_TYPE">Select a type</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.type" ng-change="vm.getVoiceRecordings()" aria-label="Filter type">\n                    <md-option value="internal" translate="VOICE.INTERNAL">Internal</md-option>\n                    <md-option value="inbound" translate="VOICE.INBOUND">Inbound</md-option>\n                    <md-option value="outbound" translate="VOICE.OUTBOUND">Outbound</md-option>\n                    <md-option value="dialer" translate="VOICE.DIALER">Dialer</md-option>\n                    <md-option ng-value="null" translate="VOICE.ALL">All</md-option>\n                </md-select>\n            </div>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVoiceRecordings">\n                <tr md-row>\n                    <th md-column md-order-by="type">{{ \'VOICE.TYPE\' | translate }}</th>\n                    <th md-column md-order-by="uniqueid">{{ \'VOICE.UNIQUEID\' | translate }}</th>\n                    <th md-column md-order-by="calleridnum">{{ \'VOICE.CALLER\' | translate }}</th>\n                    <th md-column md-order-by="exten">{{ \'VOICE.CALLED\' | translate }}</th>\n                    <th md-column md-order-by="connectedlinenum">{{ \'VOICE.CONNECTED\' | translate }}</th>\n                    <th md-column md-order-by="queue">{{ \'VOICE.QUEUE\' | translate }}</th>\n                    <th md-column md-order-by="rating">{{ \'VOICE.RATING\' | translate }}</th>\n                    <th md-column>{{ \'VOICE.AUDIO\' | translate }}</th>\n                    <th md-column md-order-by="createdAt">{{ \'VOICE.DATE\' | translate }}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.voiceRecordings.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="voiceRecording in vm.voiceRecordings.rows">\n                    <td md-cell class="type">{{voiceRecording.type}}</td>\n                    <td md-cell class="uniqueid">{{voiceRecording.uniqueid}}</td>\n                    <td md-cell class="calleridnum">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="voiceRecording.calleridnum" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="exten">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="voiceRecording.exten" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="connectedlinenum">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="voiceRecording.connectedlinenum" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="queue">{{voiceRecording.queue}}</td>\n                    <td md-cell class="rating">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-show="voiceRecording.rating" ng-repeat="rating in [1,2,3,4,5] | limitTo:voiceRecording.rating"></md-icon><span ng-hide="voiceRecording.rating" translate="VOICE.NO_RATING">No rating</span>\n                    </td>\n                    <td md-cell class="audio" ng-switch="voiceRecording.format">\n                        \x3c!-- audio recording directive --\x3e\n                        <ms-recording ng-switch-when=".wav" id="voiceRecording.id"></ms-recording>\n                        \x3c!-- / audio recording directive --\x3e\n                        <span ng-switch-when=".gsm">\n                            <em>{{ \'VOICE.CANT_PLAY_GSM_AUDIO_FILES\' | translate }}</em>\n                        </span>\n                    </td>\n                    <td md-cell class="createdAt ">{{voiceRecording.createdAt | date:\'medium\' }}</td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n\n                            <md-menu-content width="3">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadfile(voiceRecording, $event)" translate="VOICE.DOWNLOAD_VOICERECORDING">\n                                        Download VoiceRecording\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.voiceRecordings.count}}" md-on-paginate="vm.getVoiceRecordings" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/scheduled/agent.general.scheduled.html",'<md-card ng-init="vm.onInit()">\n    <md-toolbar class="md-table-toolbar md-default table-header blue-grey-bg">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="MOTIONDIALER.SCHEDULED_CALLS">Scheduled Calls</span>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="MOTIONDIALER.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'VOICE.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getScheduledCalls()" placeholder="{{ \'MOTIONDIALER.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div ng-if="vm.queueCampaigns.count" layout="column">\n                <span class="font-size-10" translate="MOTIONDIALER.SELECT_CAMPAIGN">Select a Campaign</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.VoiceQueueId" ng-change="vm.getScheduledCalls()">\n                    <md-option ng-value="undefined"><em translate="MOTIONDIALER.ALL">All</em></md-option>\n                    <md-option ng-value="queueCampaign.id" ng-repeat="queueCampaign in vm.queueCampaigns.rows">{{queueCampaign.name}}</md-option>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                        <span class="font-size-10" translate="MOTIONDIALER.SELECT_TYPE">Select type</span>\n                        <md-select class="font-size-12 no-margin" ng-model="vm.query.recallme" ng-change="vm.getScheduledCalls()">\n                            <md-option ng-value="undefined"><em translate="MOTIONDIALER.ALL">All</em></md-option>\n                            <md-option ng-value="1" translate="MOTIONDIALER.RECALLME">Recall me</md-option>\n                            <md-option ng-value="0" translate="MOTIONDIALER.INQUEUE">Recall in queue</md-option>\n                        </md-select>\n                    </div> --\x3e\n            <md-button class="md-icon-button" ng-click="vm.getScheduledCalls()" aria-label="refresh scheuled calls" translate translate-attr-label="MOTIONDIALER.REFRESH_SCHEDULED_CALLS">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n                <md-tooltip>{{\'MOTIONDIALER.REFRESH_SCHEDULED_CALLS\' | translate}}</md-tooltip>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getScheduledCalls">\n                <tr md-row>\n                    <th md-column>{{\'MOTIONDIALER.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="phone">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                    <th md-column md-order-by="scheduledat">{{ \'MOTIONDIALER.SCHEDULEDAT\' | translate }}</th>\n                    <th md-column>{{ \'MOTIONDIALER.PRIORITY\' | translate }}</th>\n                    <th md-column md-order-by="recallme">{{ \'MOTIONDIALER.RECALLME\' | translate }}</th>\n                    <th md-column>{{ \'MOTIONDIALER.CAMPAIGN\' | translate }}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.scheduledCalls.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="scheduledCall in vm.scheduledCalls.rows">\n                    <td md-cell>{{scheduledCall.Contact.firstName}} {{scheduledCall.Contact.lastName}}</td>\n                    <td md-cell>\n                        <ms-click-to-call target="scheduledCall.phone" license="vm_home.license"></ms-click-to-call>\n                    </td>\n                    <td md-colors="{color: {{ vm.isDateBeforeToday(scheduledCall.scheduledat) ? \'\\\'red\\\'\' : \'\\\'green\\\'\' }}}" md-cell>{{ scheduledCall.scheduledat | date:\'medium\' }}</td>\n                    <td md-cell>{{ vm.priorities[scheduledCall.priority] }}</td>\n                    <td md-cell>\n                        <md-icon md-colors="{color: {{ scheduledCall.recallme && scheduledCall.UserId == vm.currentUser.id ? \'\\\'green\\\'\' : \'\\\'grey\\\'\' }}}" md-font-icon="{{ scheduledCall.recallme  && scheduledCall.UserId == vm.currentUser.id ? \'icon-check\' : \'icon-close\' }}"></md-icon>\n                    </td>\n                    <td md-cell>\n                        <md-icon md-colors="{color: {{ scheduledCall.Queue.dialActive? \'\\\'green\\\'\' : \'\\\'red\\\'\' }}}" md-font-icon="icon-checkbox-blank-circle"></md-icon> {{scheduledCall.Queue.name}}\n                    </td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n\n                            <md-menu-content width="3">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.createOrEditQueueCampaignHopper($event, scheduledCall)" translate="MOTIONDIALER.EDIT_HOPPER">\n                                        Edit Hopper\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.deleteConfirm(scheduledCall, $event)" translate="MOTIONDIALER.DELETE_HOPPER">\n                                        Delete Hopper\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.scheduledCalls.count}}" md-on-paginate="vm.getScheduledCalls" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/sms/agent.general.sms.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header orange-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.SMS_INTERACTIONS">Interactions</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down" exact-match-on-filter="true"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getSmsInteractions()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_READ_UNREAD">Select Read/Unread</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.read" ng-change="vm.getSmsInteractions()" aria-label="Filter read">\n                    <md-option value="0" translate="DASHBOARDS.UNREAD">READ</md-option>\n                    <md-option value="1" translate="DASHBOARDS.READ">UNREAD</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_STATUS">Select a status</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.closed" ng-change="vm.getSmsInteractions()" aria-label="Filter status">\n                    <md-option value="0" translate="DASHBOARDS.OPENED">OPENED</md-option>\n                    <md-option value="1" translate="DASHBOARDS.CLOSED">CLOSED</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_ACCOUNT">Select an account</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.SmsAccountId" md-selected-text="vm.quickFilterSelectedText.account" ng-change="vm.getSmsInteractions()" ng-disabled="vm.smsAccounts.rows.length === 0" aria-label="Filter account">\n                    <md-option ng-repeat="smsAccount in vm.smsAccounts.rows" ng-value="smsAccount.id" ng-disabled="vm.query.SmsAccountId.length === 1 && vm.query.SmsAccountId[0] === smsAccount.id">{{smsAccount.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.SmsAccountId.length &lt; vm.smsAccounts.rows.length" layout-fill ng-click="vm.selectAll(\'account\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.SmsAccountId.length === vm.smsAccounts.rows.length" layout-fill ng-click="vm.clearSelection(\'account\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getSmsInteractions()" aria-label="Filter agent">\n                    <md-option ng-value="vm.user.id" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getSmsInteractions()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <div layout="column">\n                <md-button class="md-icon-button interaction-reload" aria-label="Reload" translate translate-attr-aria-label="DASHBOARDS.RELOAD" ng-click="vm.getSmsInteractions()">\n                    <md-icon md-font-icon="icon-reload"></md-icon>\n                </md-button>\n            </div>\n            <md-menu ng-if="vm.smsAccounts.rows && vm.smsAccounts.rows.length">\n                <md-button class="md-icon-button interaction-new" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                    <md-icon md-font-icon="icon-plus"></md-icon>\n                </md-button>\n                <md-menu-content width="3">\n                    <md-menu-item ng-repeat="smsAccount in vm.smsAccounts.rows">\n                        <md-button aria-label="compose" ng-click="vm.composeSmsInteraction($event, smsAccount)">{{ smsAccount.name }} ({{ smsAccount.key }})</md-button>\n                    </md-menu-item>\n                </md-menu-content>\n            </md-menu>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container class="interactions-list">\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSmsInteractions">\n                <tr md-row>\n                    <th class="id-header" md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column class="no-padding width-5">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column>{{\'DASHBOARDS.CONTACT\' | translate}}</th>\n                    <th md-column md-order-by="createdAt">{{\'DASHBOARDS.STARTEDAT\' | translate}}</th>\n                    <th md-column md-order-by="lastMsgAt">{{\'DASHBOARDS.LAST_MESSAGE\' | translate}}</th>\n                    <th md-column md-order-by="closed">{{\'DASHBOARDS.STATUS\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.smsInteractions.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="DASHBOARDS.NO_AVAILABLE_INTERACTION">No Available Interaction</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="smsInteraction in vm.smsInteractions.rows" ng-class="{\'text-bold text-italic\': smsInteraction.unreadMessages > 0}">\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell class="id">\n                        <div layout="row" layout-align="start center">\n                            <span class="font-size-10">{{smsInteraction.id}}</span>\n                        </div>\n                    </td>\n                    <td md-cell>\n                        <div ng-if="!smsInteraction.closed && smsInteraction.Users.length">\n                            <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                            <md-tooltip>\n                                <span ng-repeat="u in smsInteraction.Users">{{ (u.id == vm.user.id) ? \'DASHBOARDS.ME\' : vm.usersByKey[u.id].fullname | translate }}<span ng-if="!$last">, </span></span>\n                            </md-tooltip>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="!smsInteraction.closed && smsInteraction.unreadMessages > 0" layout="row" layout-align="start center">\n                            <span class="badge white-fg orange-bg" layout-margin>{{smsInteraction.unreadMessages}}</span>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="smsInteraction.attach" layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell>\n                        <div layout="column" layout-align="start start">\n                            <span class="font-size-12 text-truncate contact-text" ng-class="{\'no-margin-bottom\' : smsInteraction.contactInfo}" layout-margin>{{ smsInteraction.contactName }}</span>\n                            <span ng-if="smsInteraction.contactInfo" class="font-size-12 text-truncate contact-text no-margin-top" layout-margin>{{ smsInteraction.contactInfo }}</span>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell>\n                        <span class="font-size-10 text-truncate">{{smsInteraction.createdAt | formatdate }}</span>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell>\n                        <div layout="row" ng-if="smsInteraction.lastMsgAt">\n                            <span>\n                                <md-icon md-font-icon="{{smsInteraction.lastMsgDirection == \'in\' ? \'icon-arrow-down-bold blue-grey-800-fg\' : \'icon-arrow-up-bold blue-grey-300-fg\'}}"></md-icon>\n                            </span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{smsInteraction.lastMsgAt | formatdate }}</span>\n                            </div>\n                        </div>\n                        <span ng-if="!smsInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell>\n                        <span ng-if="smsInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="smsInteraction.disposition">- {{smsInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="smsInteraction.closed">{{smsInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!smsInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="smsInteraction.substatus"> - {{smsInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate width-80">{{ vm.getUserLabel(smsInteraction) }}</span>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell class="smsAccount">\n                        {{ vm.getSmsAccountLabel(smsInteraction) }}\n                    </td>\n                    <td md-cell>\n                        <div ng-if="smsInteraction.Tags.length">\n                            <div layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in smsInteraction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': smsInteraction.Tags.length == 1 && smsInteraction.Tags[0].color }"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions actions-padding">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.showSmsInteraction($event, smsInteraction)" translate="DASHBOARDS.SHOW">\n                                        Show Sms\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadSmsInteraction($event, smsInteraction)" translate="DASHBOARDS.DOWNLOAD">\n                                        Download Sms\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-label="{page: \'{{\'DASHBOARDS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'DASHBOARDS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'DASHBOARDS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.smsInteractions.count}}" md-on-paginate="vm.getSmsInteractions" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/voice/agent.general.voice.html",'<md-card ng-init="vm.onInit()">\n    <md-toolbar class="md-table-toolbar md-default table-header blue-A700-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="VOICE.CALLS">Calls</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="VOICE.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'VOICE.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getVoiceCalls()" placeholder="{{ \'VOICE.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="VOICE.SELECT_TYPE">Select a type</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.type" ng-change="vm.getVoiceCalls()">\n                    <md-option value="internal" translate="VOICE.INTERNAL">Internal</md-option>\n                    <md-option value="inbound" translate="VOICE.INBOUND">Inbound</md-option>\n                    <md-option value="outbound" translate="VOICE.OUTBOUND">Outbound</md-option>\n                    <md-option value="dialer" translate="VOICE.DIALER">Dialer</md-option>\n                    <md-option ng-value="null" translate="VOICE.ALL">All</md-option>\n                </md-select>\n            </div>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVoiceCalls">\n                <tr md-row>\n                    <th md-column md-order-by="id">{{\'VOICE.ID\' | translate}}</th>\n                    <th md-column md-order-by="type">{{ \'VOICE.TYPE\' | translate }}</th>\n                    <th md-column md-order-by="source">{{ \'VOICE.SOURCE\' | translate }}</th>\n                    <th md-column md-order-by="destination">{{ \'VOICE.DESTINATION\' | translate }}</th>\n                    <th md-column md-order-by="starttime">{{ \'VOICE.STARTEDAT\' | translate }}</th>\n                    <th md-column md-order-by="endtime">{{ \'VOICE.ENDEDAT\' | translate }}</th>\n                    <th md-column md-order-by="userDisposition">{{ \'VOICE.DISPOSITION\' | translate }}</th>\n                    <th md-column>{{ \'VOICE.NOTE\' | translate }}</th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.voiceCalls.rows.length">\n                    <td md-cell colspan="8">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="voiceCall in vm.voiceCalls.rows" ng-click="vm.showDetails(voiceCall, $event)">\n                    <td md-cell class="type">{{voiceCall.id}}</td>\n                    <td md-cell class="type">{{voiceCall.type}}</td>\n                    <td md-cell class="source">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="voiceCall.source" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="destination">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="voiceCall.destination" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="starttime">{{voiceCall.starttime | date:\'medium\' }}</td>\n                    <td md-cell class="endtime">{{voiceCall.endtime | date:\'medium\' }}</td>\n                    <td md-cell class="disposition">{{voiceCall.userDisposition}}</td>\n                    <td md-cell class="note">\n                        <md-icon ng-if="voiceCall.note" md-font-icon="icon-clipboard-outline"></md-icon>\n                    </td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n\n                            <md-menu-content width="3">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.showDetails(voiceCall, $event)" translate="VOICE.DETAILS">\n                                        Show Details\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.voiceCalls.count}}" md-on-paginate="vm.getVoiceCalls" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/voice/details/dialog.html",'<md-dialog class="details-dialog" aria-label="details">\n    <md-toolbar class="md-background-bg">\n        <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n            <span ng-if="!vm.interaction.closed" class="title" translate="VOICE.DETAILS"></span>\n            <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n\n    <md-dialog-content>\n        <md-list flex>\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.UNIQUEID">Uniqueid</p>\n                    <h4>{{vm.call.uniqueid}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.TYPE">Type</p>\n                    <h4>{{vm.call.type ? vm.call.type : \'no type\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.SOURCE">Source</p>\n                    <h4>{{vm.call.source ? vm.call.source : \'unknown\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.DESTINATION">Destination</p>\n                    <h4>{{vm.call.destination ? vm.call.destination : \'unknown\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.STARTEDAT">Started At</p>\n                    <h4>{{vm.call.starttime | date:\'medium\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.ANSWEREDAT">Answered At</p>\n                    <h4>{{vm.call.answertime ? (vm.call.answertime | date:\'medium\') : \'--\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.ENDEDAT">Ended At</p>\n                    <h4>{{vm.call.endtime ? (vm.call.endtime | date:\'medium\') : \'--\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.DURATION">Duration</p>\n                    <h4>{{vm.call.duration ? vm.call.duration : \'--\'}}s</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.BILLABLESECONDS">Billable Seconds</p>\n                    <h4>{{vm.call.billableseconds ? vm.call.billableseconds : \'--\'}}s</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.DISPOSITION">Disposition</p>\n                    <h4>{{vm.call.userDisposition ? vm.call.userDisposition : \'--\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.NOTE">Note</p>\n                    <h4>{{vm.call.note ? vm.call.note : \'--\'}}</h4>\n                </div>\n            </md-list-item>\n        </md-list>\n    </md-dialog-content>\n\n    <md-dialog-actions layout="row" layout-align="space-between center">\n        <md-button type="button" ng-click="vm.closeDialog()" class="send-button md-accent md-raised" aria-label="DISPOSE" translate="VOICE.CLOSE" translate-attr-aria-label="VOICE.DISPOSE">\n            CLOSE\n        </md-button>\n    </md-dialog-actions>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",'<md-dialog id="agent-general-dialog" aria-label="Spy Dialog">\n    <div id="interaction-app" class="agent-content" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.html\'"></div>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.html",'\x3c!-- CONTENT CARD --\x3e\n<md-content class="content-card" layout="row" layout-fill>\n\n    <div ng-if="!vm.showInteraction" class="start-point" flex layout="column" layout-align="center center" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.loading.html\'"></div>\n\n    <div ng-if="vm.showInteraction" flex layout="row">\n\n        <md-card flex="75" class="interaction">\n\n            <md-content class="interaction-agents" layout="row" layout-align="start center" ng-if="!vm.interaction.closed && vm.interaction.Users.length">\n                <strong layout-margin translate="DASHBOARDS.CURRENTLY_IN_USE_BY">Currently in use by </strong>\n\n                <div ng-repeat="u in vm.interaction.Users">\n                    <img class="avatar-small" ng-src="api/users/{{u.id}}/avatar">\n                    <md-tooltip> {{ (u.id == vm.user.id) ? \'DASHBOARDS.ME\' : vm.usersMap[u.id] | translate }} </md-tooltip>\n                </div>\n            </md-content>\n\n            \x3c!-- TOOLBAR --\x3e\n            <md-toolbar class="interaction-toolbar" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.html\'"></md-toolbar>\n            \x3c!-- / TOOLBAR --\x3e\n\n            \x3c!-- CONTENT --\x3e\n            <md-content id="interaction-content" name="{{\'interaction-content-\' + vm.tab.id}}" flex ms-scroll layout-wrap>\n                <div class="interaction-messages" ng-switch="vm.tab.channel">\n                    <div ng-switch-when="mail">\n                        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.interaction.mail.html\'"></div>\n                    </div>\n                    <div ng-switch-default>\n                        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.interaction.html\'"></div>\n                    </div>\n                </div>\n            </md-content>\n            \x3c!-- / CONTENT --\x3e\n\n            \x3c!-- FOOTER --\x3e\n            <div ng-if="!vm.interaction.closed && vm.tab.channel != \'mail\' && vm.tab.channel !== \'fax\' && (vm.tab.channel != \'sms\' || !vm.tab.spy)" class="interaction-footer flex-noshrink" layout="row" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.footer.html\'"></div>\n            \x3c!-- / FOOTER--\x3e\n        </md-card>\n\n        <md-card layout="column" flex class="info" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.html\'"></md-card>\n    </div>\n</md-content>\n\x3c!-- / CONTENT CARD --\x3e'),e.put("app/main/apps/dashboards/views/general/agent/interaction/composeFax/dialog.html",'<md-dialog class="compose-dialog-fax" aria-label="New Message">\n    <form class="md-inline-form" name="composeForm" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div layout="row">\n                    <md-button ng-click="vm.send()" class="md-raised md-blue-bg white-fg" aria-label="Send message">\n                        <span translate="FAX.SEND">SEND</span>\n                    </md-button>\n                    <md-button ng-disabled="vm.message.attachments.length === 1" class="md-fab md-mini md-white-bg" aria-label="attachment" translate-attr-aria-label="DASHBOARDS.ATTACHMENT" flow-btn flow-name="vm.ngFlow.flow" flow-files-submitted="vm.upload()" flow-init="vm.ngFlowOptions" flow-file-added="vm.fileAdded($file)" flow-file-success="vm.fileSuccess($file, $message)">\n                        <md-icon md-font-icon="icon-paperclip" class="red-fg"></md-icon>\n                    </md-button>\n                </div>\n                <span class="title">{{vm.message.from}}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()" aria-label="Close dialog" tranlate translate-aria-label="FAX.CLOSE_DIALOG">\n                    <md-icon md-font-icon="icon-close"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <md-input-container class="md-block to">\n                <label translate="FAX.TO">To</label>\n                <md-chips name="to" ng-model="vm.message.to" md-transform-chip="vm.transformContact($chip)" md-separator-keys="vm.separatorKeys" md-require-match="false" md-max-chips="1" required>\n                    \x3c!-- <input ng-model="vm.message.subject" type="text"> --\x3e\n                    <md-autocomplete ng-hide="vm.message.to.length === 1" md-search-text="vm.searchTo" md-items="contact in vm.contactSearch(vm.searchTo)" md-item-text="contact.fax" md-min-length="3">\n                        <md-item-template>\n                            <span>{{ vm.getContact(contact) }}</span>\n                        </md-item-template>\n                    </md-autocomplete>\n                </md-chips>\n                <div ng-messages="composeForm.to.$error" ng-if="composeForm.$dirty">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.TO_REQUIRED">To field is required</span>\n                    </div>\n                    <div ng-message="md-max-chips">You reached the maximum amount of chips</div>\n                </div>\n            </md-input-container>\n\n            <div class="attachment-list" ng-if="vm.message.attachments.length" layout="row" layout-wrap>\n                <div class="attachment" layout="row" layout-align="space-between center" ng-repeat="attachment in vm.message.attachments">\n                    <div>\n                        <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        <span class="filename">{{attachment.name}}</span>\n                        <span class="size">({{attachment.size | byteFmt: 0}})</span>\n                    </div>\n\n                    <md-button class="md-icon-button" aria-label="Delete attachment" translate translate-attr-aria-label="FAX.DELETE_ATTACHMENT">\n                        \x3c!-- <md-icon md-font-icon="icon-close" class="s16"></md-icon> --\x3e\n                    </md-button>\n                </div>\n            </div>\n\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/composeMail/dialog.html",'<md-dialog class="compose-dialog" aria-label="New Message" ng-style="{\n      \'max-width\':  {true: \'620px\', false: \'90%\'}[ vm.secret ],\n      \'width\': {true: \'620px\', false: \'100%\'}[ vm.secret ],\n      \'max-height\': {true: undefined, false: \'97%\'}[ vm.secret ]\n    }">\n    <form class="md-inline-form" name="composeForm" novalidate>\n        <md-toolbar ng-class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div layout="row">\n                    <div ng-if="!vm.secret" class="md-button md-raised blue-bg no-padding">\n                        <button class="white-fg margin-horizontal-10" aria-label="Send message" ng-disabled="!vm.verifySmtp" ng-click="vm.send($event, false, null)">\n                            <span>{{ \'MAIL.SEND\' | translate | uppercase }}</span>\n                        </button>\n                        <span class="white-fg secondary-text vertical-divider"></span>\n                        <md-menu>\n                            <button ng-disabled="!vm.verifySmtp" class="white-fg margin-left-0" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-menu-down" class="icon s24"></md-icon>\n                            </button>\n\n                            <md-menu-content width="2">\n                                <md-menu-item ng-if="vm.subStatuses.rows.length">\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="MAIL.SEND_AS">\n                                            Send as\n                                        </md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-repeat="subStatus in vm.subStatuses.rows">\n                                                <md-button ng-click="vm.send($event, false, subStatus.name)">\n                                                    {{subStatus.name}}\n                                                </md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.send($event, true, null)" translate="MAIL.SEND_AND_CLOSE">\n                                        Send and Close\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </div>\n                    <md-button class=" md-button md-raised blue-bg white-fg margin-horizontal-10" aria-label="Save draft" ng-click="vm.saveDraft()">\n                        <span>{{ (vm.isDraft ? \'DASHBOARDS.UPDATE_DRAFT\' : \'DASHBOARDS.SAVE_AS_DRAFT\') | translate | uppercase }}</span>\n                    </md-button>\n                    <md-button ng-if="vm.secret" ng-click="vm.addNote()" class="md-raised md-blue-bg white-fg" aria-label="Send message">\n                        <span translate="MAIL.ADD_NOTE">Add note</span>\n                    </md-button>\n                    <md-button ng-disabled="!vm.verifySmtp" class="md-fab md-mini md-white-bg" aria-label="attachment" translate-attr-aria-label="DASHBOARDS.ATTACHMENT" flow-btn flow-name="vm.ngFlow.flow" flow-files-submitted="vm.upload($files)" flow-init="vm.ngFlowOptions" flow-file-success="vm.fileSuccess($file, $message)" flow-file-added="vm.fileAdded($file)">\n                        <md-icon md-font-icon="icon-paperclip" class="red-fg"></md-icon>\n                    </md-button>\n                </div>\n                <span ng-if="!vm.secret" class="title">{{vm.message.from}}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()" aria-label="Close dialog" tranlate translate-aria-label="MAIL.CLOSE_DIALOG">\n                    <md-icon md-font-icon="icon-close"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container ng-if="!vm.secret" class="md-block to" ng-class="{\'hidden-cc\': vm.hiddenCC, \'hidden-bcc\': vm.hiddenBCC}">\n                <label translate="MAIL.TO">To</label>\n                <md-chips name="to" ng-model="vm.message.to" md-transform-chip="vm.transformContact($chip, vm.message.to)" md-separator-keys="vm.separatorKeys" md-require-match="false" required>\n                    <md-autocomplete md-search-text="vm.searchTo" md-items="contact in vm.contactSearch(vm.searchTo)" md-item-text="contact.email" md-min-length="3">\n                        <md-item-template>\n                            <span>{{ vm.getContact(contact) }}</span>\n                        </md-item-template>\n                    </md-autocomplete>\n                </md-chips>\n                <div ng-messages="composeForm.to.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.TO_REQUIRED">To field is required</span>\n                    </div>\n                </div>\n\n                <div class="cc-bcc" layout="row" layout-align="start center">\n                    <div class="show-cc" ng-show="vm.hiddenCC" ng-click="vm.hiddenCC = false">CC</div>\n                    <div class="show-bcc" ng-show="vm.hiddenBCC" ng-click="vm.hiddenBCC = false">BCC</div>\n                </div>\n            </md-input-container>\n\n            <md-input-container ng-if="!vm.secret" class="md-block" ng-hide="vm.hiddenCC">\n                <label translate="MAIL.CC">Cc</label>\n                <md-chips name="cc" ng-model="vm.message.cc" md-transform-chip="vm.transformContact($chip, vm.message.cc)" md-separator-keys="vm.separatorKeys" md-require-match="false" required>\n                    <md-autocomplete md-search-text="vm.searchCc" md-items="contact in vm.contactSearch(vm.searchCc)" md-item-text="contact.email" md-min-length="3">\n                        <md-item-template>\n                            <span>{{ vm.getContact(contact) }}</span>\n                        </md-item-template>\n                    </md-autocomplete>\n                </md-chips>\n            </md-input-container>\n\n            <md-input-container ng-if="!vm.secret" class="md-block" ng-hide="vm.hiddenBCC">\n                <label translate="MAIL.BCC">Bcc</label>\n                <md-chips name="bcc" ng-model="vm.message.bcc" md-transform-chip="vm.transformContact($chip, vm.message.bcc)" md-separator-keys="vm.separatorKeys" md-require-match="false" required>\n                    <md-autocomplete md-search-text="vm.searchBcc" md-items="contact in vm.contactSearch(vm.searchBcc)" md-item-text="contact.email" md-min-length="3">\n                        <md-item-template>\n                            <span>{{ vm.getContact(contact) }}</span>\n                        </md-item-template>\n                    </md-autocomplete>\n                </md-chips>\n            </md-input-container>\n\n            <md-input-container ng-if="!vm.secret" class="md-block no-margin">\n                <label translate="MAIL.SUBJECT">Subject</label>\n                <input ng-model="vm.message.subject" type="text">\n            </md-input-container>\n\n            <div class="attachment-list" ng-if="vm.message.attachments.length" layout="row" layout-wrap>\n                <div class="attachment" layout="row" layout-align="space-between center" ng-repeat="attachment in vm.message.attachments">\n                    <div>\n                        <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        <span class="filename">{{attachment.name}}</span>\n                        <span class="size" ng-if="attachment.size">({{attachment.size | byteFmt: 0}})</span>\n                    </div>\n\n                    <md-button ng-click="vm.deleteAttachment(attachment)" class="md-icon-button" aria-label="Delete attachment" translate translate-attr-aria-label="MAIL.DELETE_ATTACHMENT">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div class="padding-top-5">\n                <textarea ckeditor="vm.ckeditor" id="html-area" ng-model="vm.message.body" md-select-on-focus="" ready="vm.onReadyEditor()"></textarea>\n            </div>\n\n            <md-switch ng-if="!vm.message.showLastMessage && !vm.secret" ng-model="vm.message.showLastMessage" ng-change="vm.loadLastMessage()" aria-label="load last message"><span translate="MAIL.SHOW_ORIGINAL_MESSAGE">Show original message</span></md-switch>\n\n            <md-autocomplete ng-if="!vm.secret" md-selected-item="vm.selectedItem" md-search-text="vm.searchText" md-selected-item-change="vm.selectedItemChange(item)" md-items="item in vm.searchTextChange(vm.searchText)" md-item-text="item.value" md-min-length="1" md-floating-label="{{ \'MAIL.CANNED_ANSWER_SEARCH\' | translate}}" class="input-show-hide no-container-margin">\n                <md-item-template>\n                    <md-icon ng-if="!item.MailAccountId" md-font-icon="icon-earth" aria-label="alert email" class="s16">\n                    </md-icon>\n                    <md-icon ng-if="item.MailAccountId" md-font-icon="icon-email" aria-label="alert email" class="s16 teal-fg"></md-icon>\n                    <span md-highlight-text="vm.searchText" md-highlight-flags="^i">{{ item.key }} -\n                        {{ item.value | htmlToPlaintext }}</span>\n                </md-item-template>\n\n                <md-not-found>\n                    <span translate="MAIL.CANNED_ANSWER_NOT_FOUND">No canned answers were found</span>\n                </md-not-found>\n            </md-autocomplete>\n\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/composeOpenchannel/dialog.html",'<md-dialog class="compose-dialog" aria-label="New Message">\n    <form class="md-inline-form" name="composeForm" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div layout="row">\n                    <md-button ng-if="!vm.secret" ng-click="vm.send()" class="md-raised md-blue-bg white-fg" aria-label="Send message">\n                        <span translate="OPENCHANNEL.SEND">SEND</span>\n                    </md-button>\n                    <md-button ng-if="vm.secret" ng-click="vm.addNote()" class="md-raised md-blue-bg white-fg" aria-label="Add note">\n                        <span translate="OPENCHANNEL.ADD_NOTE">Add note</span>\n                    </md-button>\n                </div>\n                <span ng-if="!vm.secret" class="title">{{vm.message.from}}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()" aria-label="Close dialog" tranlate translate-aria-label="OPENCHANNEL.CLOSE_DIALOG">\n                    <md-icon md-font-icon="icon-close"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container ng-if="!vm.secret" class="md-block to">\n                <label translate="OPENCHANNEL.TO">To</label>\n                <md-chips name="to" ng-model="vm.message.to" md-transform-chip="vm.transformContact($chip)" md-separator-keys="vm.separatorKeys" md-require-match="false" md-max-chips="1" required>\n                    <md-autocomplete md-search-text="vm.searchTo" md-items="contact in vm.contactSearch(vm.searchTo)" md-item-text="contact.mapkey" md-min-length="3">\n                        <md-item-template>\n                            <span>{{ vm.getContact(contact) }}</span>\n                        </md-item-template>\n                    </md-autocomplete>\n                </md-chips>\n                <div ng-messages="composeForm.to.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TO_REQUIRED">To field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            \x3c!-- msEmojyArea directive --\x3e\n            <ms-emoji-area on-reply="vm.reply(event, body)" ctrl-methods="vm.ctrlMethods" ng-model="vm.message.body" placeholder="\'OPENCHANNEL.INSERT_MESSAGE_HERE\'"></ms-emoji-area>\n            \x3c!-- / msEmojyArea directive --\x3e\n\n            <md-autocomplete ng-if="!vm.secret" class="padding-top-5" md-selected-item="vm.selectedItem" md-search-text="vm.searchText" md-selected-item-change="vm.selectedItemChange(item)" md-items="item in vm.searchTextChange(vm.searchText)" md-item-text="item.value" md-min-length="1" md-floating-label="{{ \'OPENCHANNEL.CANNED_ANSWER_SEARCH\' | translate}}" class="input-show-hide no-container-margin">\n                <md-item-template>\n                    <md-icon ng-if="!item.OpenchannelAccountId" md-font-icon="icon-earth" aria-label="alert openchannel" class="s16"></md-icon>\n                    <md-icon ng-if="item.OpenchannelAccountId" md-font-icon="icon-message-text" aria-label="alert openchannel" class="s16 orange-fg"></md-icon>\n                    <span md-highlight-text="vm.searchText" md-highlight-flags="^i">{{item.key}} - {{item.value}}</span>\n                </md-item-template>\n\n                <md-not-found>\n                    <span translate="OPENCHANNEL.CANNED_ANSWER_NOT_FOUND">No canned answers were found</span>\n                </md-not-found>\n            </md-autocomplete>\n\n\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/composeSms/dialog.html",'<md-dialog class="compose-dialog" aria-label="New Message">\n    <form class="md-inline-form" name="composeForm" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div layout="row">\n                    <md-button ng-if="!vm.secret" ng-click="vm.send()" class="md-raised md-blue-bg white-fg" aria-label="Send message">\n                        <span translate="SMS.SEND">SEND</span>\n                    </md-button>\n                    <md-button ng-if="vm.secret" ng-click="vm.addNote()" class="md-raised md-blue-bg white-fg" aria-label="Add note">\n                        <span translate="SMS.ADD_NOTE">Add note</span>\n                    </md-button>\n                </div>\n                <span ng-if="!vm.secret" class="title">{{vm.message.from}}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()" aria-label="Close dialog" tranlate translate-aria-label="SMS.CLOSE_DIALOG">\n                    <md-icon md-font-icon="icon-close"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container ng-if="!vm.secret" class="md-block to">\n                <label translate="SMS.TO">To</label>\n                <md-chips name="to" ng-model="vm.message.to" md-transform-chip="vm.transformContact($chip)" md-separator-keys="vm.separatorKeys" md-require-match="false" md-max-chips="1" required>\n                    <md-autocomplete md-search-text="vm.searchTo" md-items="contact in vm.contactSearch(vm.searchTo)" md-item-text="contact.mobile" md-min-length="3">\n                        <md-item-template>\n                            <span>{{ vm.getContact(contact) }}</span>\n                        </md-item-template>\n                    </md-autocomplete>\n                </md-chips>\n                <div ng-messages="composeForm.to.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TO_REQUIRED">To field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            \x3c!-- msEmojyArea directive --\x3e\n            <ms-emoji-area on-reply="vm.reply(event, body)" ctrl-methods="vm.ctrlMethods" ng-model="vm.message.body" placeholder="\'SMS.INSERT_MESSAGE_HERE\'"></ms-emoji-area>\n            \x3c!-- / msEmojyArea directive --\x3e\n\n            <md-autocomplete ng-if="!vm.secret" class="padding-top-5" md-selected-item="vm.selectedItem" md-search-text="vm.searchText" md-selected-item-change="vm.selectedItemChange(item)" md-items="item in vm.searchTextChange(vm.searchText)" md-item-text="item.value" md-min-length="1" md-floating-label="{{ \'SMS.CANNED_ANSWER_SEARCH\' | translate}}" class="input-show-hide no-container-margin">\n                <md-item-template>\n                    <md-icon ng-if="!item.SmsAccountId" md-font-icon="icon-earth" aria-label="alert sms" class="s16"></md-icon>\n                    <md-icon ng-if="item.SmsAccountId" md-font-icon="icon-message-text" aria-label="alert sms" class="s16 orange-fg"></md-icon>\n                    <span md-highlight-text="vm.searchText" md-highlight-flags="^i">{{item.key}} - {{item.value}}</span>\n                </md-item-template>\n\n                <md-not-found>\n                    <span translate="SMS.CANNED_ANSWER_NOT_FOUND">No canned answers were found</span>\n                </md-not-found>\n            </md-autocomplete>\n\n\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",'<md-dialog class="disposition-dialog" aria-label="disposition" ng-init="vm.onInit()">\n    <form name="dispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span ng-if="!vm.interaction.closed" class="title" translate="DASHBOARDS.DISPOSE"></span>\n                <span ng-if="vm.interaction.closed" class="title" translate="DASHBOARDS.INFO"></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()" ng-if="!vm.mandatoryDisposition">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="DASHBOARDS.DISPOSITIONS">Dispositions</label>\n                <md-select name="disposition" ng-model="vm.interaction.disposition" required>\n                    <md-option ng-value="null" ng-if="!vm.mandatoryDisposition">NONE</md-option>\n                    <md-option ng-value="d.name" ng-repeat="d in vm.dispositions.rows">{{ d.name }}</md-option>\n                    <md-option ng-value="gd.name" ng-repeat="gd in vm.globalDispositions.rows">{{ gd.name }}</md-option>\n                </md-select>\n                <div ng-messages="dispositionForm.disposition.$error" ng-show="dispositionForm.disposition.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="DASHBOARDS.ERRORS.DISPOSITION_REQUIRED">Disposition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="DASHBOARDS.NOTE">Note</label>\n                <textarea ng-model="vm.interaction.note" md-maxlength="255" max-rows="5" autofocus></textarea>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.saveDisposition()" class="send-button md-accent md-raised" ng-if="!vm.interaction.closed && vm.interaction.disposition" aria-label="CLOSE_AND_DISPOSE" translate="DASHBOARDS.CLOSE_AND_DISPOSE" translate-attr-aria-label="DASHBOARDS.CLOSE_AND_DISPOSE">\n                    CLOSE AND DISPOSE\n                </md-button>\n                <md-button type="submit" ng-click="vm.saveDisposition(false)" class="send-button md-accent md-raised" ng-if="!vm.interaction.closed && !vm.interaction.disposition" ng-disabled="vm.mandatoryDisposition" aria-label="CLOSE_WITHOUT_DISPOSE" translate="DASHBOARDS.CLOSE_WITHOUT_DISPOSE" translate-attr-aria-label="DASHBOARDS.CLOSE_WITHOUT_DISPOSE">\n                    CLOSE WITHOUT DISPOSE\n                </md-button>\n                <md-button type="submit" ng-click="vm.saveDisposition()" class="send-button md-accent md-raised" ng-if="vm.interaction.closed" ng-disabled="vm.mandatoryDisposition && !vm.interaction.disposition" aria-label="DISPOSE" translate="DASHBOARDS.DISPOSE" translate-attr-aria-label="DASHBOARDS.DISPOSE">\n                    DISPOSE\n                </md-button>\n                <div ng-if="vm.mandatoryDisposition">\n                    <md-icon md-font-icon="icon-information-outline" aria-label="Mandatory Disposition"></md-icon>\n                    <span class="no-margin font-size-12 line-height-30" translate="DASHBOARDS.HELP.MANDATORY_DISPOSITION_ENABLED"></span>\n                </div>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/tag/dialog.html",'<md-dialog class="tag-dialog" aria-label="tag">\n    <form name="tagForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="DASHBOARDS.TAGS"></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <md-chips ng-model="vm.interaction.Tags" md-autocomplete-snap md-require-match="vm.autocompleteRequireMatch">\n                    <md-autocomplete ng-blur="vm.searchText = \'\'" md-min-length="0" md-selected-item-change="vm.selectedItemChange" md-selected-item="vm.selectedItem" md-search-text="vm.searchText" md-items="item in vm.tags.rows | filter:{ name: vm.searchText }" md-item-text="item.name" placeholder="Search for a tag">\n                        <span md-highlight-text="vm.searchText">{{item.name}}</span>\n                    </md-autocomplete>\n                    <md-chip-template>\n                        <span>\n                            <strong>{{$chip.name}}</strong>\n                        </span>\n                    </md-chip-template>\n                </md-chips>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.saveTag(false)" ng-disabled="tagForm.$pristine" class="send-button md-accent md-raised" aria-label="TAG" translate="DASHBOARDS.SAVE" translate-attr-aria-label="DASHBOARDS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/transfer/dialog.html",'<md-dialog class="disposition-dialog" aria-label="disposition">\n    <form name="transferForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="DASHBOARDS.TRANSFER"></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog(false)">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container class="md-block">\n                <label translate="DASHBOARDS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.transfer.type" required>\n                    <md-option ng-value="\'queue\'" ng-if="vm.account.queueTransfer">Queue</md-option>\n                    <md-option ng-value="\'agent\'" ng-if="vm.account.agentTransfer">Agent</md-option>\n                </md-select>\n                <div ng-messages="transferForm.type.$error" ng-show="transferForm.type.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="DASHBOARDS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.transfer.type === \'queue\'">\n                <label translate="DASHBOARDS.QUEUES">Queues</label>\n                <md-select name="queue" ng-model="vm.transfer.id" required>\n                    <md-option ng-value="queue.id" ng-repeat="queue in vm.queues.rows">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="transferForm.queue.$error" ng-show="transferForm.queue.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="DASHBOARDS.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.transfer.type === \'agent\'">\n                <label translate="DASHBOARDS.AGENTS">Agents</label>\n                <md-select name="agent" ng-model="vm.transfer.id" required>\n                    <md-option ng-value="agent.id" ng-repeat="agent in vm.agents.rows" ng-if="vm.currentUser.id != agent.id">{{ agent.name }}</md-option>\n                </md-select>\n                <div ng-messages="transferForm.agent.$error" ng-show="transferForm.agent.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="DASHBOARDS.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        \x3c!-- <md-dialog-actions ng-if="!vm.interaction.closed || !vm.interaction.disposition" layout="row" layout-align="space-between center"> --\x3e\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.onTransfer(true)" ng-disabled="transferForm.$pristine" class="send-button md-accent md-raised" aria-label="DASHBOARDS.TRANSFER" translate="DASHBOARDS.TRANSFER" translate-attr-aria-label="DASHBOARDS.TRANSFER">\n                    TRANSFER\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.footer.html",'\x3c!-- REPLY FORM --\x3e\n<div ng-show="vm.showFooter" layout="column" layout-align "center center" flex>\n    <div layout="row" layout-align="center center" flex>\n        \x3c!-- msEmojyArea directive --\x3e\n        <ms-emoji-area ng-if="vm.tab.channel != \'fax\'" on-reply="vm.reply(event, body)" ctrl-methods="vm.ctrlMethods" ng-model="vm.tab.areaText" placeholder="vm.tab.channel.toUpperCase() + \'.INSERT_MESSAGE_HERE\'"></ms-emoji-area>\n        \x3c!-- / msEmojyArea directive --\x3e\n\n        <div layout="row" layout-align="end center">\n            <md-button ng-if="vm.tab.channel != \'fax\'" style="margin:1px;" class="md-icon-button md-mini" ng-click="vm.changeDisplayCannedAnswerInputValue()" aria-label="Search canned answer" translate translate-attr-aria-label="DASHBOARDS.SEND_MESSAGE">\n                <md-icon md-font-icon="icon-auto-fix" class="green-fg"></md-icon>\n            </md-button>\n\n            <md-button ng-if="vm.tab.channel == \'openchannel\' || vm.tab.channel == \'chat\' || vm.tab.channel == \'fax\'" style="margin:1px;" class="md-icon-button md-warn md-mini" aria-label="attachment" translate-attr-aria-label="DASHBOARDS.ATTACHMENT" flow-btn flow-name="vm.ngFlow.flow" flow-files-submitted="vm.upload()" flow-init="vm.ngFlowOptions" flow-file-added="vm.fileAdded($file)" flow-file-success="vm.fileSuccess($file, $message)">\n                <md-icon md-font-icon="icon-paperclip"></md-icon>\n            </md-button>\n        </div>\n    </div>\n\n    <md-autocomplete ng-hide="!vm.displayCannedAnswerInput" md-selected-item="vm.selectedItem" md-search-text="vm.searchText" md-selected-item-change="vm.selectedItemChange(item)" md-items="item in vm.searchTextChange(vm.searchText)" md-item-text="item.value" md-min-length="1" placeholder="{{ \'DASHBOARDS.CANNED_ANSWER_SEARCH\' | translate}}" class="cannedarea input-show-hide">\n        <md-item-template>\n            <md-icon ng-if="!item[vm.tab.channel === \'chat\' ? \'ChatWebsiteId\' : _.capitalize(vm.tab.channel) + \'AccountId\']" md-font-icon="icon-earth" aria-label="alert channel" class="s16"></md-icon>\n            <md-icon ng-if="item[vm.tab.channel === \'chat\' ? \'ChatWebsiteId\' : _.capitalize(vm.tab.channel) + \'AccountId\']" md-font-icon="{{vm.getIconByChannel(vm.tab.channel)}}" aria-label="alert channel" class="s16" ng-class="vm.getColorByChannel(vm.tab.channel) + \'-fg\'"></md-icon>\n            <span md-highlight-text="vm.searchText" md-highlight-flags="^i">{{item.key}} - {{item.value}}</span>\n        </md-item-template>\n\n        <md-not-found>\n            <span translate="DASHBOARDS.CANNED_ANSWER_NOT_FOUND">No canned answers were found</span>\n        </md-not-found>\n    </md-autocomplete>\n</div>\n\x3c!-- / REPLY FORM --\x3e'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.chat.html",'<div ng-init="item = item || vm.interaction">\n    <md-list-item class="md-2-line" ng-if="item.browserName">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.BROWSER_NAME">Browser Name</p>\n            <h4>{{item.browserName}}</h4>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-2-line" ng-if="item.osName">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.OS_NAME">OS Name</p>\n            <h4>{{item.osName}}</h4>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-2-line" ng-if="item.deviceModel">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.DEVICE_MODEL">Device Model</p>\n            <h4>{{item.deviceModel}}</h4>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-2-line" ng-if="item.referer">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.REFERER">Referer</p>\n            <h4>{{item.referer}}</h4>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-2-line" ng-if="item.customerIp">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.CUSTOMER_IP">Customer IP</p>\n            <h4>{{item.customerIp}}</h4>\n        </div>\n    </md-list-item>\n    <md-divider></md-divider>\n    <md-list-item class="md-2-line" ng-if="item.closed && item.ratingValue != null">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.RATING">Rating</p>\n            <md-icon md-font-icon="icon-star" style="color:red" ng-show="!item.ratingType || item.ratingType == \'star\'" ng-repeat="ratingValue in [1,2,3,4,5] | limitTo:item.ratingValue"></md-icon>\n            <md-icon md-font-icon="icon-thumb-up" style="color:green" ng-show="item.ratingType && item.ratingType == \'thumb\' && item.ratingValue == 1"></md-icon>\n            <md-icon md-font-icon="icon-thumb-down" style="color:red" ng-show="item.ratingType && item.ratingType == \'thumb\' && item.ratingValue == 0"></md-icon>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-2-line" ng-if="item.ratingMessage">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.FEEDBACK">Feedback</p>\n            <h4 style="overflow-wrap: break-word; white-space: normal">{{item.ratingMessage}}</h4>\n        </div>\n    </md-list-item>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.html",'<md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex>\n    <md-tab>\n        <md-tab-label>\n            <span translate="DASHBOARDS.CONTACT">Contact</span>\n        </md-tab-label>\n        <md-tab-body>\n            <md-content class="md-padding">\n                <form name="contactForm" class="md-inline-form" novalidate>\n                    <md-input-container class="md-block">\n                        <md-icon md-font-icon="icon-account"></md-icon>\n                        <label translate="DASHBOARDS.NAME">Name</label>\n                        <input type="text" name="firstName" ng-model="vm.contact.firstName" disabled>\n                    </md-input-container>\n\n                    <md-input-container class="md-block">\n                        <md-icon md-font-icon="icon-email"></md-icon>\n                        <label translate="DASHBOARDS.EMAIL">Email</label>\n                        <input type="email" name="email" ng-model="vm.contact.email" disabled>\n                    </md-input-container>\n\n                    <md-input-container ng-if="vm.tab.channel != \'fax\'" class="md-block">\n                        <md-icon md-font-icon="icon-phone"></md-icon>\n                        <label translate="DASHBOARDS.PHONE">Phone</label>\n                        <input type="text" name="phone" ng-model="vm.contact.phone" disabled>\n                    </md-input-container>\n\n                    <md-input-container ng-if="vm.tab.channel == \'fax\'" class="md-block">\n                        <md-icon md-font-icon="icon-deskphone"></md-icon>\n                        <label translate="DASHBOARDS.FAX">Fax</label>\n                        <input type="text" name="fax" ng-model="vm.contact.fax" disabled>\n                    </md-input-container>\n\n                    <div ng-if="!vm.tab.spy" layout="row" layout-align="center center">\n                        <md-button class="md-raised md-accent" ng-click="vm.openContact(ev)" translate="DASHBOARDS.MORE">\n                            More\n                        </md-button>\n                    </div>\n                </form>\n            </md-content>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="DASHBOARDS.INTERACTION">Interaction</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div layout="column" layout-align="space-between center" class="md-padding">\n                <md-icon class="s42" md-font-icon="{{vm.getIconByChannel(vm.tab.channel)}}" ng-class="vm.getColorByChannel(vm.tab.channel) + \'-fg\'"></md-icon>\n                <span ng-if="vm.interaction.closed" class="md-background-bg red-fg font-size-14">#{{vm.interaction.id}} - <span translate="DASHBOARDS.CLOSED"></span></span>\n                <span ng-if="!vm.interaction.closed" class="md-background-bg green-fg font-size-14">#{{vm.interaction.id}} - <span translate="DASHBOARDS.OPENED"></span></span>\n                <span ng-if="!vm.interaction.closed && vm.interaction.substatus" class="md-background-bg green-fg font-size-14">{{vm.interaction.substatus}}</span>\n            </div>\n            <md-divider></md-divider>\n            <md-list flex>\n                <md-list-item class="md-2-line">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.WEBSITE" ng-if="vm.tab.channel == \'chat\'">Website</p>\n                        <p translate="DASHBOARDS.ACCOUNT" ng-if="vm.tab.channel != \'chat\'">Account</p>\n                        <h4>{{vm.account.name}}</h4>\n                    </div>\n                </md-list-item>\n\n                <md-list-item class="md-2-line">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.AGENT">Agent</p>\n                        <h4>{{vm.agent.fullname || vm.usersMap[vm.interaction.UserId]}}</h4>\n                    </div>\n                </md-list-item>\n\n                <md-list-item class="md-2-line" ng-if="vm.interaction.externalUrl">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.EXTERNAL_URL">External URL</p>\n                        <a href="{{vm.interaction.externalUrl}}" target="_blank">\n                            <h4>{{vm.interaction.externalUrl}}</h4>\n                        </a>\n                    </div>\n                </md-list-item>\n\n                <md-list-item class="md-2-line">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.CREATED_AT">Created At</p>\n                        <h4>{{vm.interaction.createdAt | date: \'medium\'}}</h4>\n                    </div>\n                </md-list-item>\n\n                <div ng-switch="vm.tab.channel">\n                    <div ng-switch-when="chat">\n                        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.chat.html\'"></div>\n                    </div>\n                    <div ng-switch-when="mail">\n                        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.mail.html\'"></div>\n                    </div>\n                    <div ng-switch-when="openchannel">\n                        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.openchannel.html\'"></div>\n                    </div>\n                </div>\n\n                <md-list-item class="md-2-line" ng-if="vm.interaction.Tags.length">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.TAGS">Tags</p>\n                        <div class="tags padding-bottom-5" layout="row" layout-align="start center" layout-wrap>\n                            <div class="tag margin-right-5 margin-top-5 margin-bottom-5" layout="row" layout-align="center center" ng-repeat="tag in vm.interaction.Tags">\n                                <div class="tag-color" ng-style="{\'background\': tag.color}"></div>\n                                <div class="tag-label">{{tag.name}}</div>\n                            </div>\n                        </div>\n                    </div>\n                </md-list-item>\n\n                <md-divider ng-if="vm.interaction.closed"></md-divider>\n\n                <md-list-item class="md-2-line" ng-if="vm.interaction.closed">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.CLOSED_AT">Closed At</p>\n                        <h4>{{vm.interaction.closedAt | date: \'medium\'}}</h4>\n                    </div>\n                </md-list-item>\n                <md-list-item class="md-2-line" ng-if="vm.interaction.closed && vm.interaction.disposition">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.DISPOSITION">Disposition</p>\n                        <h4>{{ vm.interaction.disposition }}</h4>\n                    </div>\n                </md-list-item>\n                <md-list-item class="md-3-line md-long-text" ng-if="vm.interaction.closed && vm.interaction.note">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.NOTE">NOTE</p>\n                        <h4 style="overflow-wrap: break-word; white-space: normal">{{ vm.interaction.note }}</h4>\n                    </div>\n                </md-list-item>\n            </md-list>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="DASHBOARDS.CUSTOMER_JOURNEY">Journey</span>\n        </md-tab-label>\n        <md-tab-body>\n            <md-content class="md-padding">\n                <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.html\'"></div>\n            </md-content>\n        </md-tab-body>\n    </md-tab>\n</md-tabs>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.all.html",'<md-divider></md-divider>\n\n<md-list flex>\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.AGENT">Agent</p>\n            <h4>{{vm.agent.fullname || vm.usersMap[item.UserId] || \'DASHBOARDS.NOT_ASSIGNED\' | translate}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line" ng-if="item.externalUrl">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.EXTERNAL_URL">External URL</p>\n            <a href="{{item.externalUrl}}" target="_blank">\n                <h4>{{item.externalUrl}}</h4>\n            </a>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.CREATED_AT">Created At</p>\n            <h4>{{item.createdAt | date: \'medium\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <div ng-if="item.ChatWebsiteId">\n        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.chat.html\'"></div>\n    </div>\n    <div ng-if="item.MailAccountId">\n        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.mail.html\'"></div>\n    </div>\n\n    <md-divider ng-if="item.closed"></md-divider>\n    <md-list-item class="md-2-line" ng-if="item.closed">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.CLOSED_AT">Closed At</p>\n            <h4>{{item.closedAt | date: \'medium\'}}</h4>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-2-line" ng-if="item.closed && item.disposition">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.DISPOSITION">Disposition</p>\n            <h4>{{ item.disposition }}</h4>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-3-line md-long-text" ng-if="item.closed && item.note">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.NOTE">NOTE</p>\n            <h4 style="overflow-wrap: break-word; white-space: normal">{{ item.note }}</h4>\n        </div>\n    </md-list-item>\n\n    <p class="padding-horizontal-15 grey-fg">Tags</p>\n    <md-list-item ng-if="item.Tags.length">\n        <div class="tags padding-bottom-5" layout="row" layout-align="start center" layout-wrap>\n            <div class="tag margin-right-5 margin-top-5 margin-bottom-5" layout="row" layout-align="center center" ng-repeat="tag in item.Tags">\n                <div class="tag-color" ng-style="{\'background\': tag.color}"></div>\n                <div class="tag-label">{{tag.name}}</div>\n            </div>\n        </div>\n    </md-list-item>\n</md-list>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.html",'<md-content layout="column" layout-align="end center">\n    <div layout-margin>\n        <md-input-container>\n            <md-select ng-model="vm.channel" placeholder="Channel">\n                <md-option ng-value="undefined" translate="DASHBOARDS.ALL">All</md-option>\n                <md-option ng-value="\'voice\'" translate="DASHBOARDS.VOICE">Voice</md-option>\n                <md-option ng-value="\'chat\'">Chat</md-option>\n                <md-option ng-value="\'mail\'">Mail</md-option>\n                <md-option ng-value="\'sms\'">Sms</md-option>\n                <md-option ng-value="\'fax\'">Fax</md-option>\n                <md-option ng-value="\'openchannel\'">Openchannel</md-option>\n            </md-select>\n        </md-input-container>\n    </div>\n    <div layout-margin layout="row" layout-align="space-between center">\n        <div flex-gt-xs>\n            <md-datepicker ng-model="vm.dateFrom" md-placeholder="Enter date"></md-datepicker>\n        </div>\n\n        <div flex-gt-xs>\n            <md-datepicker ng-model="vm.dateTo" md-placeholder="Enter date"></md-datepicker>\n        </div>\n    </div>\n</md-content>\n\n<div id="timeline" ms-timeline="vm.timelineOptions" layout="column" ng-if="vm.journey && vm.journey.length">\n    \x3c!-- TIMELINE ITEM --\x3e\n    <div class="ms-timeline-item" layout-align="center center" ng-repeat="item in vm.journey | getChannelByItem:vm.channel:vm.dateFrom:vm.dateTo | orderBy:\'-createdAt\'">\n        <div class="timeline-card">\n            <md-card class="channel" ng-class="{\'md-grey-200-bg\': item.id == vm.interaction.id}">\n                <div class="header p-6" layout="row" layout-align="space-between center">\n\n                    <md-button class="md-fab md-mini" aria-label="icon-channel" ng-class="vm.getColorByItem(item) + \'-bg\'">\n                        <md-icon ng-if="item.FaxAccountId" md-font-icon="icon-deskphone"></md-icon>\n                        <md-icon ng-if="item.OpenchannelAccountId" md-font-icon="icon-google-earth"></md-icon>\n                        <md-icon ng-if="item.SmsAccountId" md-font-icon="icon-message-text"></md-icon>\n                        <md-icon ng-if="item.MailAccountId" md-font-icon="icon-email"></md-icon>\n                        <md-icon ng-if="item.ChatWebsiteId" md-font-icon="icon-hangouts"></md-icon>\n                        <md-icon ng-if="item.amaflags" md-font-icon="icon-phone"></md-icon>\n                    </md-button>\n\n                    <div class="info" layout="column" ng-init="item.showMore = false">\n                        <span class="font-size-12 text-truncate">#{{item.id}} - {{ item.Account.key || item.destination }}</span>\n                        <span class="font-size-10">{{item.createdAt | date: \'medium\'}}</span>\n                        <span>\n                            <a class="toggle-details md-accent-color" ng-hide="item.showMore" ng-click="item.showMore = !item.showMore" translate="DASHBOARDS.SHOW_DETAILS">\n                                Show Details\n                            </a>\n                            <a class="toggle-details md-accent-color" ng-show="item.showMore" ng-click="item.showMore = !item.showMore" translate="DASHBOARDS.HIDE_DETAILS">\n                                Hide Details\n                            </a>\n                        </span>\n                    </div>\n\n                    <span>\n                        <img ng-if="item.UserId" class="avatar" ng-src="api/users/{{item.UserId}}/avatar">\n                        <md-tooltip md-direction="left">{{item.Owner.fullname || item.User.fullname}}</md-tooltip>\n                    </span>\n\n                </div>\n\n                <div ng-if="item.showMore">\n                    <div ng-if="!item.amaflags" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.all.html\'"></div>\n                    <div ng-if="item.amaflags" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.voice.html\'"></div>\n                </div>\n\n                <md-divider></md-divider>\n\n                <div ng-if="item.id != vm.interaction.id" layout="row" layout-align="space-around center">\n                    <div ng-if="item.closed && !amaflags" class="text-truncate white-fg">\n                        <span class="text-boxed md-background-bg red-fg" title="{{ \'DASHBOARDS.STATUS\' | translate}}: {{ \'DASHBOARDS.CLOSED\' | translate}} ({{ item.disposition || (\'DASHBOARDS.NO_DISPOSITION_SET\' | translate)}})">{{ \'DASHBOARDS.STATUS\' | translate}}: {{ \'DASHBOARDS.CLOSED\' | translate}} ({{ item.disposition || (\'DASHBOARDS.NO_DISPOSITION_SET\' | translate) }})</span>\n                    </div>\n                    <span class="text-boxed md-background-bg green-fg" ng-if="!item.closed && !item.amaflags" title="{{ \'DASHBOARDS.STATUS\' | translate}}: {{ \'DASHBOARDS.OPENED\' | translate}}">{{ \'DASHBOARDS.STATUS\' | translate}}: {{ \'DASHBOARDS.OPENED\' | translate}}<span ng-if="item.substatus"> - {{ item.substatus }}</span></span>\n                    <span ng-if="item.amaflags" class="text-boxed md-background-bg red-fg" title="{{ \'DASHBOARDS.DISPOSITION\' | translate}}: {{ item.userDisposition || \'No Dispose\'}}">{{ \'DASHBOARDS.DISPOSITION\' | translate}}: {{ item.userDisposition || (\'DASHBOARDS.NO_DISPOSITION_SET\' | translate)}}</span>\n                    <div flex></div>\n                    <md-button ng-if="!vm.tab.spy && vm.user.role === \'agent\' && vm.isMyAccount(item)" ng-disabled="item.amaflags" class="md-icon-button" aria-label="go" ng-click="vm.openInteraction($event, item)">\n                        <md-icon md-font-icon="icon-open-in-new" class="s20"></md-icon>\n                    </md-button>\n\n                </div>\n            </md-card>\n        </div>\n    </div>\n    \x3c!-- / TIMELINE ITEM --\x3e\n</div>\n<div ng-if="!vm.journey || !vm.journey.length" layout="row" layout-align="center center">\n    <em translate="DASHBOARDS.NO_DATA_AVAILABLE">No data available</em>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.voice.html",'<md-divider></md-divider>\n\n<md-list flex>\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.TYPE">Type</p>\n            <h4>{{item.type ? item.type : \'no type\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.SOURCE">Source</p>\n            <h4>{{item.source ? item.source : \'unknown\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.DESTINATION">Destination</p>\n            <h4>{{item.destination ? item.destination : \'unknown\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.CALLERID">Caller Id</p>\n            <h4>{{item.callerid ? item.callerid : \'unknown\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.STARTEDAT">Started At</p>\n            <h4>{{item.starttime | date:\'medium\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.UNIQUEID">Uniqueid</p>\n            <h4>{{item.uniqueid ? item.uniqueid : \'unknown\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.END_AT">End At</p>\n            <h4>{{item.endtime | date:\'medium\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.DURATION">Duration</p>\n            <h4>{{item.duration ? item.duration : \'--\'}}s</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.NOTE">Note</p>\n            <h4>{{item.note ? item.note : \'--\'}}</h4>\n        </div>\n    </md-list-item>\n</md-list>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.mail.html",'<div ng-init="item = item || vm.interaction">\n    <md-list-item class="md-2-line" ng-if="item.subject">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.SUBJECT">Subject</p>\n            <h4>{{item.subject}}</h4>\n        </div>\n    </md-list-item>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.openchannel.html",'<div ng-init="item = item || vm.interaction">\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.VISIBILITY">Visibility</p>\n            <h4 ng-if="item.threadId" translate="DASHBOARDS.PUBLIC">Public</h4>\n            <h4 ng-if="!item.threadId" translate="DASHBOARDS.PRIVATE">Private</h4>\n        </div>\n    </md-list-item>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.interaction.html",'\x3c!-- MESSAGES --\x3e\n<div layout="row" ng-repeat="message in vm.messages.rows" class="md-padding message-row" ng-class="vm.getMessagesAlignment(message)">\n    <img ng-if="message.direction ===\'in\'" src="assets/images/avatars/customer.png" class="avatar" />\n    <img ng-if="message.direction ===\'out\' && message.UserId && !message.secret" ng-src="api/users/{{message.UserId}}/avatar" class="avatar" />\n    <img ng-if="message.direction ===\'out\' && message.UserId && message.secret" ng-src="api/users/{{message.UserId}}/avatar" class="avatar" />\n    <img ng-if="message.direction ===\'out\' && !message.UserId" class="avatar" src="assets/images/avatars/robot.png">\n    <md-button ng-if="vm.tab.channel === \'fax\'" class="md-fab md-mini no-margin" aria-label="Download" ng-click="vm.downloadMessage(message)">\n        <md-icon md-font-icon="icon-download" class="icon s24"></md-icon>\n    </md-button>\n\n    <div class="bubble" ng-class="{\'md-yellow-200-bg\': message.secret}" ng-switch="message.direction">\n        <div ng-if="message.secret">\n            <div class="time secondary-text" layout="row" layout-align="end center">\n                <div layout-padding>\n                    {{ vm.getLabelByMessage(message) }} - {{message.createdAt | date: \'medium\'}}\n                </div>\n                <div ng-if="message.id">\n                    <md-icon class="s18" md-font-icon="icon-lock"></md-icon>\n                </div>\n            </div>\n        </div>\n        <div ng-if="!message.secret">\n            <div ng-switch-when="in" class="time secondary-text" ng-click="message.Contact && vm.openContact(ev, message.Contact)">\n                {{ vm.getLabelByMessage(message) }} - {{message.createdAt | date: \'medium\'}}\n            </div>\n            <div ng-switch-when="out" class="time secondary-text" layout="row" layout-align="end center">\n                <div layout-padding>\n                    {{ vm.getLabelByMessage(message) }} - {{message.createdAt | date: \'medium\'}}\n                </div>\n                <div ng-if="message.id && vm.tab.channel !== \'fax\'">\n                    <md-icon ng-if="!message.read" class="s18" md-font-icon="icon-check"></md-icon>\n                    <md-icon ng-if="message.read" class="s18" md-font-icon="icon-check-all md-accent"></md-icon>\n                </div>\n                <div ng-if="message.id && vm.tab.channel === \'fax\'">\n                    <md-icon ng-if="!message.read && !(message.failMessage )" class="s18" md-font-icon="icon-check"></md-icon>\n                    <md-icon ng-if="message.read" class="s18" md-font-icon="icon-check-all md-accent"></md-icon>\n                    <span ng-if="!message.read && message.failMessage" class="s18 red-900-fg"> {{ message.failMessage }}</span>\n                    <md-icon ng-if="!message.read && message.failMessage" class="s18 red-900-fg" md-font-icon="icon-close md-accent"></md-icon>\n                </div>\n            </div>\n        </div>\n        <div ng-if="message.AttachmentId" layout="row" layout-align="end center">\n            <md-button class="md-raised md-accent" ng-click="vm.getAttachment({id: message.AttachmentId, name: vm.htmlToPlaintext(message.body)})">\n                <span>{{vm.htmlToPlaintext(message.body)}}</span>\n                <md-icon md-font-icon="icon-download"></md-icon>\n            </md-button>\n        </div>\n        <div ng-if="!message.AttachmentId" class="message" layout="row" layout-align="end center">\n            <span ng-bind-html="message.body | embed: vm.embedOptions"></span>\n        </div>\n    </div>\n</div>\n\x3c!-- / MESSAGES --\x3e'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.interaction.mail.html",'<div ms-timeline="vm.timelineOptions" ms-timeline-load-more="vm.loadNextPage()">\n    <div ng-repeat="message in vm.messages.rows track by message.id" ng-init="vm.selectedMailShowSystemMessage[message.id] = false">\n        <md-card ng-if="message.secret" class="md-padding md-yellow-100-bg" layout="column">\n            <div layout="row" layout-align="start center">\n                <img class="avatar" ng-src="api/users/{{message.UserId}}/avatar">\n                <div layout="column">\n                    <span class="grey-fg">{{vm.agent.fullname || vm.usersMap[message.UserId]}}</span>\n                    <span class="grey-fg">{{message.createdAt | date:\'medium\'}}</span>\n                </div>\n            </div>\n            <div layout="row" layout-align="center center" layout-fill ng-if="message.attach">\n                <div flex>\n                    <md-divider></md-divider>\n                </div>\n                <md-menu>\n                    <md-button aria-label="attachments" class="md-icon-button" ng-click="vm.getAttachments(message); $mdOpenMenu($event);">\n                        <md-tooltip md-direction="bottom"><span translate="MAIL.ATTACHMENTS">Attachments</span>\n                        </md-tooltip>\n                        <div layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="icon s24"></md-icon>\n                            <span>{{message.attach}}</span>\n                        </div>\n                    </md-button>\n                    <md-menu-content width="4">\n                        <div layout="column" layout-align="center center" ng-if="!message.attachments">\n                            <md-progress-circular md-mode="indeterminate"></md-progress-circular>\n                            <span translate="MAIL.ATTACHMENTS">Attachments</span>\n                        </div>\n                        <md-menu-item ng-if="message.attachments" ng-repeat="attachment in message.attachments">\n                            <md-button ng-click="vm.getAttachment(attachment)">\n                                {{ attachment.name || (\'attachment-\' + $index) }}</md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n                <div flex>\n                    <md-divider></md-divider>\n                </div>\n            </div>\n            <div class="padding-top-5" ng-bind-html-unsafe="message.body"></div>\n        </md-card>\n        <div ng-if="!message.secret">\n            <div layout="row" layout-align="center center" ng-if="message.direction == \'out\' && !message.UserId && !vm.selectedMailShowSystemMessage[message.id]">\n                <md-button class="md-raised blue-grey-300-bg white-fg" ng-click="vm.selectedMailShowSystemMessage[message.id] = !vm.selectedMailShowSystemMessage[message.id]">\n                    [{{message.createdAt | date: \'medium\'}}] {{ \'MAIL.SHOW_AUTOREPLY\' | translate }}</md-button>\n            </div>\n            <md-card layout="column" class="md-padding message-row" ng-if="message.direction == \'in\' || (message.direction == \'out\' && (message.UserId || vm.selectedMailShowSystemMessage[message.id]))">\n                <md-content class="mail-content">\n                    <div class="info" layout="row" layout-align="space-between start">\n                        <div layout="column" layout-align="start start">\n                            <div layout="row" layout-align="start start">\n                                <div layout="column" layout-align="start start">\n                                    <div class="name" ng-click="message.Contact && vm.openContact(ev, message.Contact)">\n                                        <strong>{{message.from}}</strong>\n                                        <md-icon ng-if="message.attach" md-font-icon="icon-paperclip" class="s16">\n                                        </md-icon>\n                                    </div>\n                                    <div class="name">\n                                        <div>{{message.subject}}</div>\n                                    </div>\n                                    <div class="name" layout="row" layout-align="start center"><span translate="MAIL.TO">To</span>: <span class="padding-left-5 subject text-truncate">{{ message.originTo || message.to }}</span>\n                                    </div>\n                                    <div class="name padding-top-10" layout="row" layout-align="start center" ng-if="message.direction == \'in\' && message.originCc && message.originCc.indexOf(vm.account.email) >= 0">\n                                        <em><span class="blue-grey" translate="MAIL.YOU_ARE_REGISTERED_AS_A">You are\n                                                registered as a</span> <span class="blue-grey">CC</span></em></div>\n                                    <div class="name padding-top-10" layout="row" layout-align="start center" ng-if="message.direction == \'in\' && message.bcc && message.bcc.indexOf(vm.account.email) >= 0">\n                                        <em><span class="red-fg" translate="MAIL.YOU_ARE_REGISTERED_AS_A">You are\n                                                registered as a</span> <span class="red-fg">BCC</span></em></div>\n                                </div>\n                            </div>\n\n                            <a class="toggle-details md-accent-color" ng-hide="vm.selectedMailShowDetails[message.id]" ng-click="vm.selectedMailShowDetails[message.id] = !vm.selectedMailShowDetails[message.id]" translate="MAIL.SHOW_DETAILS">\n                                Show Details\n                            </a>\n                            <a class="toggle-details md-accent-color" ng-show="vm.selectedMailShowDetails[message.id]" ng-click="vm.selectedMailShowDetails[message.id] = !vm.selectedMailShowDetails[message.id]" translate="MAIL.HIDE_DETAILS">\n                                Hide Details\n                            </a>\n                            <div ng-show="vm.selectedMailShowDetails[message.id]" class="details" layout="row" layout-align="start start">\n                                <div layout="column">\n                                    <span class="title" translate="MAIL.DATE">Date:</span>\n                                    <span class="title" translate="MAIL.FROM">From:</span>\n                                    <span class="title" translate="MAIL.TO">To:</span>\n                                    \x3c!-- NOTE: Start retrocompatibility with replyCc 2.0.66 --\x3e\n                                    <span class="title" translate="MAIL.CC" ng-if="message.direction === \'in\' && message.originCc">Cc:</span>\n                                    <span class="title" translate="MAIL.CC" ng-if="message.direction === \'in\' && !message.originCc && !message.originTo && message.cc">Cc:</span>\n                                    <span class="title" translate="MAIL.CC" ng-if="message.direction === \'out\' && message.cc">Cc:</span>\n                                    \x3c!-- End retrocompatibility --\x3e\n                                    <span class="title" translate="MAIL.BCC" ng-if="message.bcc">Bcc:</span>\n                                    <span class="title" translate="MAIL.ACCEPTED" ng-if="message.UserId && message.direction ===\'in\'">Accepted:</span>\n                                </div>\n\n                                <div layout="column">\n                                    <span class="detail">{{message.createdAt | date:\'medium\'}}</span>\n                                    <span class="detail">{{message.from}}</span>\n                                    <span class="detail">{{message.originTo || message.to}}</span>\n                                    \x3c!-- NOTE: Start retrocompatibility with replyCc 2.0.66 --\x3e\n                                    <span class="detail" ng-if="message.direction === \'in\' && message.originCc">{{ message.originCc }}</span>\n                                    <span class="detail" ng-if="message.direction === \'in\' && !message.originCc && !message.originTo && message.cc">{{ message.cc }}</span>\n                                    <span class="detail" ng-if="message.direction === \'out\' && message.cc">{{ message.cc }}</span>\n                                    \x3c!-- End retrocompatibility --\x3e\n                                    <span class="detail" ng-if="message.bcc">{{message.bcc}}</span>\n                                    <span class="detail" ng-if="message.UserId && message.direction ===\'in\'">{{vm.usersMap[message.UserId]}}</span>\n                                </div>\n                            </div>\n                        </div>\n\n                        <div layout="row" layout-align="center center">\n                            <div layout="column" layout-align="center end" class="md-padding">\n                                <span class="grey-fg" ng-if="message.direction ===\'in\'">{{message.from.indexOf(vm.contact.email) >= 0 ? vm.contact.firstName + \' \' + vm.contact.lastName : \'*\' + message.from}}</span>\n                                <span class="grey-fg" ng-if="message.direction ===\'out\' && message.UserId">{{vm.agent.fullname || vm.usersMap[message.UserId]}}</span>\n                                <span class="grey-fg" ng-if="message.direction ===\'out\' && !message.UserId">System</span>\n                                <span class="grey-fg">{{message.createdAt | date:\'medium\'}}</span>\n                            </div>\n                            <img ng-if="message.direction ===\'in\'" ng-src="assets/images/avatars/customer.png" class="avatar" alt="customer" />\n                            <img ng-if="message.direction ===\'out\' && message.UserId" class="avatar" ng-src="api/users/{{message.UserId}}/avatar">\n                            <img ng-if="message.direction ===\'out\' && !message.UserId" class="avatar" src="assets/images/avatars/robot.png">\n                            \x3c!-- <md-button class="md-fab md-mini no-margin" aria-label="Download" ng-click="vm.downloadMessage(message)">\n                                <md-icon md-font-icon="icon-download" class="icon s24"></md-icon>\n                            </md-button> --\x3e\n                        </div>\n                    </div>\n\n                    <div layout="row" layout-align="center center" layout-fill>\n                        <div flex>\n                            <md-divider></md-divider>\n                        </div>\n                        <div>\n                            <div class="interaction-reply-button-container">\n                                <md-tooltip md-direction="bottom"><span translate="DASHBOARDS.DRAFT">Draft</span>\n                                </md-tooltip>\n                                <md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="draft" ng-disabled="!vm.draft" ng-click="vm.openDraft()">\n                                    <md-icon md-font-icon="icon-pencil-box" class="icon s24"></md-icon>\n                                </md-button>\n                            </div>\n                            <md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="reply" ng-click="vm.composeMailInteraction(\'reply\', message)">\n                                <md-tooltip md-direction="bottom"><span translate="MAIL.REPLY">Reply</span></md-tooltip>\n                                <md-icon md-font-icon="icon-reply" class="icon s24"></md-icon>\n                            </md-button>\n                            <md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="replyAll" ng-click="vm.composeMailInteraction(\'replyAll\', message)">\n                                <md-tooltip md-direction="bottom"><span translate="MAIL.REPLY_ALL">Reply All</span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-reply-all" class="icon s24"></md-icon>\n                            </md-button>\n                            <md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="forward" ng-click="vm.composeMailInteraction(\'forward\', message)">\n                                <md-tooltip md-direction="bottom"><span translate="MAIL.FORWARD">Forward</span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-forward" class="icon s24"></md-icon>\n                            </md-button>\n                            <md-button ng-if="!message.attach" class="md-icon-button" aria-label="forward" ng-click="vm.downloadMessage(message)">\n                                <md-tooltip md-direction="bottom"><span translate="MAIL.DOWNLOAD">Download</span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-download" class="icon s24"></md-icon>\n                            </md-button>\n                            <md-menu ng-if="message.attach" class="no-margin" md-position-mode="target-right target">\n                                <md-button class="md-icon-button" ng-click="$mdOpenMenu()" aria-label="download">\n                                    <md-tooltip md-direction="bottom"><span translate="MAIL.DOWNLOAD">Download</span>\n                                    </md-tooltip>\n                                    <md-icon md-font-icon="icon-download"></md-icon>\n                                </md-button>\n                                <md-menu-content width="2">\n                                    <md-menu-item>\n                                        <md-button ng-click="vm.downloadMessage(message, true)" translate="MAIL.DOWNLOAD_WITH_ATTACHMENTS">\n                                            Download with attachments\n                                        </md-button>\n                                    </md-menu-item>\n                                    <md-menu-item>\n                                        <md-button ng-click="vm.downloadMessage(message)" translate="MAIL.DOWNLOAD_WITHOUT_ATTACHMENTS">\n                                            Download without attachments\n                                        </md-button>\n                                    </md-menu-item>\n                                </md-menu-content>\n                            </md-menu>\n                            <md-menu ng-if="message.attach">\n                                <md-button aria-label="attachments" class="md-icon-button" ng-click="vm.getAttachments(message); $mdOpenMenu($event);">\n                                    <md-tooltip md-direction="bottom"><span translate="MAIL.ATTACHMENTS">Attachments</span></md-tooltip>\n                                    <div layout="row" layout-align="start center">\n                                        <md-icon md-font-icon="icon-paperclip" class="icon s24"></md-icon>\n                                        <span>{{message.attach}}</span>\n                                    </div>\n                                </md-button>\n                                <md-menu-content width="4">\n                                    <div layout="column" layout-align="center center" ng-if="!message.attachments">\n                                        <md-progress-circular md-mode="indeterminate"></md-progress-circular>\n                                        <span translate="MAIL.ATTACHMENTS">Attachments</span>\n                                    </div>\n                                    <md-menu-item ng-if="message.attachments" ng-repeat="attachment in message.attachments">\n                                        <md-button ng-click="vm.getAttachment(attachment)">\n                                            {{ attachment.name || (\'attachment-\' + $index) }}</md-button>\n                                    </md-menu-item>\n                                </md-menu-content>\n                            </md-menu>\n                        </div>\n                        <div flex>\n                            <md-divider></md-divider>\n                        </div>\n                    </div>\n\n                    <md-content ng-bind-html-unsafe="message.body"></md-content>\n                </md-content>\n            </md-card>\n        </div>\n    </div>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.loading.html",'<div class="big-circle md-whiteframe-4dp">\n    <md-icon class="s128 md-accent" md-font-icon="{{vm.getIconByChannel(vm.tab.channel)}}" ng-class="vm.getColorByChannel(vm.tab.channel) + \'-fg\'"></md-icon>\n</div>\n<span class="app-title" translate="DASHBOARDS.WAITING">Waiting</span>\n<span class="hide show-gt-md secondary-text" translate="DASHBOARDS.LOADING_INTERACTION">We are loading the interaction...</span>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.fax.html",'<md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="reply" ng-click="vm.composeFaxInteraction(\'new\')">\n    <md-tooltip md-direction="bottom"><span translate="FAX.REPLY">Reply</span></md-tooltip>\n    <md-icon md-font-icon="icon-reply" class="icon s24"></md-icon>\n</md-button>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.html",'<div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n    <md-icon md-font-icon="{{vm.getIconByChannel(vm.tab.channel)}}" class="s20" ng-class="vm.getColorByChannel(vm.tab.channel) + \'-fg\'"></md-icon>\n    <div class="padding-left-10" layout="column" layout-align="center start" flex>\n        <div class="font-size-14" layout="row" layout-align="start center" layout-fill>\n            <span>#{{vm.interaction.id}} - {{vm.account.key}}</span>\n            <div layout="row" layout-align="center center" class="p-8">\n                <md-icon ng-if="vm.tab.channel === \'openchannel\' && vm.interaction.threadId" md-font-icon="fas fa-users" class="s16">\n                    <md-tooltip><span translate="DASHBOARDS.PUBLIC_INTERACTION">The interaction is public</span></md-tooltip>\n                </md-icon>\n                <md-icon ng-if="vm.interaction.attach" md-font-icon="icon-paperclip" class="s16"></md-icon>\n            </div>\n            <span class="red-fg padding-left-25" ng-if="vm.interaction.closed" translate="DASHBOARDS.CLOSED">CLOSED</span>\n            <span class="green-fg padding-left-25" ng-if="!vm.interaction.closed"><span translate="DASHBOARDS.OPENED">OPENED</span><span ng-if="vm.interaction.substatus"> - {{vm.interaction.substatus}}</span></span>\n            <div layout="row" layout-align="center center" class="blue-grey-300-fg padding-left-40" ng-if="!vm.interaction.closed">\n                <timer start-time="vm.interaction.createdAt" interval="1000">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                <md-icon md-font-icon="icon-timelapse" class="s16 padding-left-5"></md-icon>\n            </div>\n        </div>\n        <div class="tags" layout="row" layout-align="start center" ng-if="vm.interaction.Tags.length" ng-class="{\'padding-top-5\': vm.interaction.Tags.length}">\n            <div class="tag margin-right-5" layout="row" layout-align="center center" ng-repeat="tag in vm.interaction.Tags">\n                <div class="tag-color" ng-style="{\'background\': tag.color}"></div>\n                <div class="tag-label">{{tag.name}}</div>\n            </div>\n        </div>\n    </div>\n    <div layout="row" layout-align="end center">\n        <div ng-switch="vm.tab.channel">\n            <div ng-switch-when="mail">\n                <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.mail.html\'"></div>\n            </div>\n            <div ng-switch-when="fax">\n                <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.fax.html\'"></div>\n            </div>\n            <div ng-switch-when="sms">\n                <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.sms.html\'"></div>\n            </div>\n        </div>\n        <md-button ng-if="vm.tab.channel !== \'mail\'" class="md-icon-button" aria-label="Download" ng-click="vm.downloadInteraction(vm.interaction)">\n            <md-tooltip md-direction="bottom"><span translate="DASHBOARDS.DOWNLOAD">Download</span></md-tooltip>\n            <md-icon md-font-icon="icon-download" class="icon s24"></md-icon>\n        </md-button>\n        <md-menu class="no-margin" ng-if="!vm.interaction.disposition" md-position-mode="target-right target">\n            <md-button class="md-icon-button" ng-click="$mdOpenMenu()" aria-label="more">\n                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n            </md-button>\n\n            <md-menu-content width="2">\n                <md-menu-item>\n                    <md-button ng-click="vm.tagInteraction()" translate="DASHBOARDS.TAG">\n                        Tag\n                    </md-button>\n                </md-menu-item>\n                <md-menu-item ng-if="vm.account.queueTransfer || vm.account.agentTransfer">\n                    <md-button ng-click="vm.transferLastMessage()" translate="DASHBOARDS.TRANSFER">\n                        Transfer\n                    </md-button>\n                </md-menu-item>\n                <md-menu-item ng-if="!vm.interaction.closed && vm.tab.channel == \'mail\' && (vm.subStatuses.rows.length || vm.interaction.substatus != null)">\n                    <md-menu>\n                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.SET_AS">\n                            Set as\n                        </md-button>\n                        <md-menu-content>\n                            <md-menu-item ng-if="vm.interaction.substatus != null">\n                                <md-button ng-click="vm.setAs(null)" translate="DASHBOARDS.NONE">\n                                    None\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item ng-repeat="subStatus in vm.subStatuses.rows">\n                                <md-button ng-click="vm.setAs(subStatus.name)">\n                                    {{subStatus.name}}\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </md-menu-item>\n                <md-menu-item ng-if="!vm.interaction.closed && vm.tab.channel == \'mail\' && vm.account.markAsUnread">\n                    <md-button ng-click="vm.markAsUnread()" translate="DASHBOARDS.MARK_AS_UNREAD">\n                        Unread\n                    </md-button>\n                </md-menu-item>\n                <md-menu-item ng-if="!vm.tab.spy && !vm.interaction.closed">\n                    <md-button ng-click="vm.disposeInteraction()" translate="DASHBOARDS.CLOSE_AND_DISPOSE">\n                        Close and Dispose\n                    </md-button>\n                </md-menu-item>\n                <md-menu-item ng-if="!vm.tab.spy && vm.interaction.closed && !vm.interaction.disposition">\n                    <md-button ng-click="vm.disposeInteraction(ev)" translate="DASHBOARDS.DISPOSE">\n                        Dispose\n                    </md-button>\n                </md-menu-item>\n            </md-menu-content>\n        </md-menu>\n    </div>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.mail.html",'<div class="interaction-reply-button-container">\n    <md-tooltip md-direction="bottom"><span translate="DASHBOARDS.DRAFT">Draft</span></md-tooltip>\n    <md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="draft" ng-disabled="!vm.draft" ng-click="vm.openDraft()">\n        <md-icon ng-cloak md-font-icon="icon-pencil-box" class="icon s24" ng-class="vm.draft ? \'red-500-fg\' : \'grey-fg\'"></md-icon>\n    </md-button>\n</div>\n<md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="reply" ng-click="vm.composeMailInteraction(\'reply\', vm.interaction)">\n    <md-tooltip md-direction="bottom"><span translate="MAIL.REPLY">Reply</span></md-tooltip>\n    <md-icon md-font-icon="icon-reply" class="icon s24"></md-icon>\n</md-button>\n<md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="replyAll" ng-click="vm.composeMailInteraction(\'replyAll\', vm.interaction)">\n    <md-tooltip md-direction="bottom"><span translate="MAIL.REPLY_ALL">Reply All</span></md-tooltip>\n    <md-icon md-font-icon="icon-reply-all" class="icon s24"></md-icon>\n</md-button>\n<md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="forward" ng-click="vm.composeMailInteraction(\'forward\', vm.interaction)">\n    <md-tooltip md-direction="bottom"><span translate="MAIL.FORWARD">Forward</span></md-tooltip>\n    <md-icon md-font-icon="icon-forward" class="icon s24"></md-icon>\n</md-button>\n<md-button class="md-icon-button" aria-label="note" ng-click="vm.composeMailInteraction(\'note\', vm.interaction)">\n    <md-tooltip md-direction="bottom"><span translate="MAIL.NOTE">Note</span></md-tooltip>\n    <md-icon md-font-icon="icon-note-outline" class="icon s24"></md-icon>\n</md-button>\n<md-menu class="no-margin" md-position-mode="target-right target">\n    <md-button class="md-icon-button" ng-click="$mdOpenMenu()" aria-label="download">\n        <md-tooltip md-direction="bottom"><span translate="MAIL.DOWNLOAD">Download</span></md-tooltip>\n        <md-icon md-font-icon="icon-download"></md-icon>\n    </md-button>\n    <md-menu-content width="2">\n        <md-menu-item>\n            <md-button ng-click="vm.downloadInteraction(vm.interaction, true)" translate="MAIL.DOWNLOAD_WITH_ATTACHMENTS">\n                Download with attachments\n            </md-button>\n        </md-menu-item>\n        <md-menu-item>\n            <md-button ng-click="vm.downloadInteraction(vm.interaction)" translate="MAIL.DOWNLOAD_WITHOUT_ATTACHMENTS">\n                Download without attachments\n            </md-button>\n        </md-menu-item>\n    </md-menu-content>\n</md-menu>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.sms.html",'<md-button class="md-icon-button" aria-label="note" ng-click="vm.composeSmsInteraction(\'note\', vm.interaction)">\n    <md-tooltip md-direction="bottom"><span translate="SMS.NOTE">Note</span></md-tooltip>\n    <md-icon md-font-icon="icon-note-outline" class="icon s24"></md-icon>\n</md-button>'),e.put("app/main/apps/dashboards/views/general/agent/jscripty/agent.general.jscripty.html",'<md-content class="md-padding" layout="column" layout-align="center center">\n    <div layout="row" layout-align="center center">\n        <span ng-if="!vm.tab.saved" class="text-boxed md-green-bg">\n            <timer start-time="vm.starttime" interval="1000">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n        </span>\n        <span ng-if="vm.contact" class="text-boxed md-gray-bg font-weight-900">{{vm.contact.firstName}} {{vm.contact.lastName}} {{vm.contact.phone}}</span>\n        <md-button ng-if="vm.showResetButton" ng-click="vm.resetViewer()" md-no-ink class="md-raised md-accent orange-bg">\n            <md-icon md-font-icon="icon-rotate-left" class="icon s16"></md-icon> {{\'JSCRIPTY.RESET_SESSION\' | translate}}\n        </md-button>\n        <md-button ng-if="vm.contact" ng-click="vm.openContact($event, vm.contact)" md-no-ink class="md-raised md-accent" translate="JSCRIPTY.OPEN_CONTACT"></md-button>\n        <md-button ng-if="vm.showIncompleteSubmitButton" ng-click="vm.onSubmit($event, true)" md-no-ink class="md-raised md-accent green-bg" translate="JSCRIPTY.SUBMIT"></md-button>\n    </div>\n    <h1 ng-if="!vm.project.formData"><span translate="JSCRIPTY.PROJECT_NOT_AVAILABLE">Project is not available. Please contact the administrator</span></h1>\n    <mw-form-viewer ng-if="vm.project.formData" form-data="vm.project.formData" response-data="vm.project.responseData" on-submit="vm.onSubmit($event)" template-data="call" api="vm.formViewer"></mw-form-viewer>\n</md-content>'),e.put("app/main/apps/dashboards/views/general/agent/notification/dialog.html",'\x3c!-- <md-toast> --\x3e\n<div class="md-padding" layout="column" layout-align="center center">\n    <span class="md-title">#{{vm.notification.id}} {{vm.notification.title}}</span>\n    <span class="md-subhead" ng-if="vm.notification.queue">{{vm.notification.queue}}</span>\n    <div class="padding-top-5" layout="row">\n        <md-button class="md-raised md-accent" ng-click="vm.accept($event)" translate="DASHBOARDS.ACCEPT">\n            ACCEPT\n        </md-button>\n        <md-button class="md-raised md-warn" ng-click="vm.reject($event)" translate="DASHBOARDS.REJECT">\n            REJECT\n        </md-button>\n    </div>\n</div>\n\x3c!-- </md-toast> --\x3e'),e.put("app/main/apps/dashboards/views/general/agent/popup/agent.general.popup.html",'<md-content class="md-padding" flex>\n    <div ng-if="vm.html" ng-bind-html="vm.html"></div>\n    <h1 ng-if="!vm.html">Template is empty. Please contact the administrator</h1>\n</md-content>'),e.put("app/main/apps/dashboards/views/general/user/chat/user.general.chat.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-hangouts" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_INTERACTIONS_STATS">Today Interactions STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{vm.inbound.talking || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OPENED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.OPENED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OPENED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-52 line-height-72">\n                        {{vm.inbound.abandoned || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.ABANDONED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.ABANDONED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.ABANDONED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOTAL_OFFERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.TOTAL_OFFERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOTAL_OFFERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgHoldTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_HOLD_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_HOLD_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_HOLD_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgTalkTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_MANAGED_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_MANAGED_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_MANAGED_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.answerRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.abandonRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.ABANDONED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.ABANDONED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.ABANDONED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.unmanaged || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET INBOUND --\x3e'),e.put("app/main/apps/dashboards/views/general/user/dialer/user.general.dialer.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-phone-outgoing" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_MOTION_BULL_STATS">Today Motion Bull STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-timelapse"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-in-talk"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{(vm.inbound.talking || 0) + (vm.inbound.pTalking || 0)}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_TALKING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_TALKING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_TALKING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ANSWERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ANSWERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_ANSWERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-missed"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-52 line-height-72">\n                        {{vm.inbound.outboundDropCallsDayCallersExit || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ABANDONED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ABANDONED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.ABANDON_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-outgoing"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.outboundDropCallsDayTimeout || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.DROPPED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.DROPPED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.DROPPED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-dots"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.originated || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.ORIGINATED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.ORIGINATED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.ORIGINATED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-in-talk"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgTalkTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_AVG_TALK_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_AVG_TALK_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_AVG_TALK_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-percent"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.outboundanswerRate || 0 |number : 1}}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ANSWER_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ANSWER_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_ANSWER_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-percent"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.outboundAbandonRate || 0}}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ABANDON_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ABANDON_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_ABANDON_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-percent"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.outboundDropRate }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.DROP_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.DROP_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.DROP_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET OUTBOUND --\x3e\n\n\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-phone-outgoing" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_IVR_CAMPAIGNS_STATS">Today IVR campaigns stats</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-dots"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.ivr.originated || 0}}/{{vm.ivr.limitCalls || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.ORIGINATED\' | translate | uppercase}}/{{\'DASHBOARDS.LIMITED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.LIMITED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.ORIGINATEDLIMITED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET IVR --\x3e'),e.put("app/main/apps/dashboards/views/general/user/fax/user.general.fax.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-deskphone" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_INTERACTIONS_STATS">Today Interactions STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{vm.inbound.talking || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OPENED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.OPENED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OPENED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.unmanaged || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOTAL_OFFERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.TOTAL_OFFERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOTAL_OFFERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="50">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgHoldTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_HOLD_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_HOLD_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_HOLD_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.answerRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.abandonRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET INBOUND --\x3e'),e.put("app/main/apps/dashboards/views/general/user/mail/user.general.mail.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-email" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_INTERACTIONS_STATS">Today Interactions STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{vm.inbound.talking || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OPENED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.OPENED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OPENED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.unmanaged || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOTAL_OFFERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.TOTAL_OFFERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOTAL_OFFERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="50">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgHoldTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_HOLD_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_HOLD_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_HOLD_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.answerRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.abandonRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET INBOUND --\x3e'),e.put("app/main/apps/dashboards/views/general/user/openchannel/user.general.openchannel.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-google-earth" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_INTERACTIONS_STATS">Today Interactions STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{vm.inbound.talking || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OPENED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.OPENED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OPENED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.unmanaged || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOTAL_OFFERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.TOTAL_OFFERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOTAL_OFFERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="50">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgHoldTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_HOLD_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_HOLD_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_HOLD_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.answerRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.abandonRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET INBOUND --\x3e'),e.put("app/main/apps/dashboards/views/general/user/sms/user.general.sms.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-message-text" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_INTERACTIONS_STATS">Today Interactions STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{vm.inbound.talking || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OPENED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.OPENED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OPENED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.unmanaged || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOTAL_OFFERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.TOTAL_OFFERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOTAL_OFFERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="50">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgHoldTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_HOLD_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_HOLD_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_HOLD_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.answerRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.abandonRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET INBOUND --\x3e'),e.put("app/main/apps/dashboards/views/general/user/user.general.html",'<div id="dashboard-general" class="page-layout simple right-sidenav" layout="row">\n    \x3c!-- CENTER --\x3e\n    <div class="center" flex ms-scroll>\n        \x3c!-- CONTENT --\x3e\n        <div class="content">\n            \x3c!--  NOTE: aggoiungere nel controller ng-if="vm.hasPermission()" --\x3e\n            <md-tabs ng-if="vm.hasPermission()" md-selected="vm.selectedTab" md-dynamic-height>\n                <md-tab ng-if="vm.license.voice" label="{{\'DASHBOARDS.VOICE\' | translate}}" ui-sref="app.dashboards.general.voice">\n                    <div ui-view="voice"></div>\n                </md-tab>\n                <md-tab ng-if="vm.license.dialer" label="{{\'DASHBOARDS.MOTIONDIALER\' | translate}}" ui-sref="app.dashboards.general.dialer">\n                    <div ui-view="dialer"></div>\n                </md-tab>\n                <md-tab ng-if="vm.license.chat" label="{{\'DASHBOARDS.CHAT\' | translate}}" ui-sref="app.dashboards.general.chat">\n                    <div ui-view="chat"></div>\n                </md-tab>\n                <md-tab ng-if="vm.license.mail" label="{{\'DASHBOARDS.MAIL\' | translate}}" ui-sref="app.dashboards.general.mail">\n                    <div ui-view="mail"></div>\n                </md-tab>\n                <md-tab ng-if="vm.license.messaging" label="{{\'DASHBOARDS.SMS\' | translate}}" ui-sref="app.dashboards.general.sms">\n                    <div ui-view="sms"></div>\n                </md-tab>\n                <md-tab ng-if="vm.license.openchannel" label="{{\'DASHBOARDS.OPENCHANNEL\' | translate}}" ui-sref="app.dashboards.general.openchannel">\n                    <div ui-view="openchannel"></div>\n                </md-tab>\n                <md-tab ng-if="vm.license.fax" label="{{\'DASHBOARDS.FAX\' | translate}}" ui-sref="app.dashboards.general.fax">\n                    <div ui-view="fax"></div>\n                </md-tab>\n            </md-tabs>\n        </div>\n        \x3c!-- END CONTENT --\x3e\n\n        <md-content ng-if="!vm.hasPermission()" layout="row" layout-align="space-around center" flex layout-padding layout-wrap>\n            <div layout="column" layout-align="space-around center" flex="50">\n                <span class="font-size-40 text-center">{{ \'DASHBOARDS.WELCOME_TO_MOTION\' | translate }}!</span>\n                <span class="font-size-30 text-center" translate="DASHBOARDS.WELCOME_MESSAGE">Use the left sidebar to navigate through available sections.</span>\n            </div>\n\n            <div layout="column" flex="50">\n                <img src="assets/images/avatars/permissions.png" alt="permissions">\n            </div>\n        </md-content>\n    </div>\n</div>'),e.put("app/main/apps/dashboards/views/general/user/voice/user.general.voice.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-phone-incoming" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_INBOUND_STATS">Today Inbound STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-timelapse"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-in-talk"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{vm.inbound.talking || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_TALKING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_TALKING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_TALKING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ANSWERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ANSWERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_ANSWERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-missed"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-52 line-height-72">\n                        {{vm.inbound.abandoned || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ABANDONED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ABANDONED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_ABANDONED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-incoming"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_TOTAL_OFFERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_TOTAL_OFFERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_TOTAL_OFFERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-timer-sand"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgHoldTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_AVG_HOLD_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_AVG_HOLD_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_AVG_HOLD_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-in-talk"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgTalkTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_AVG_TALK_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_AVG_TALK_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_AVG_TALK_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-percent"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.answerRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ANSWER_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ANSWER_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_ANSWER_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-percent"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.abandonRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ABANDON_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ABANDON_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.ABANDON_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-dots"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.unmanaged || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_UNMANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_UNMANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_UNMANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET INBOUND --\x3e\n\n\x3c!-- WIDGET OUTBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-phone-outgoing" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_OUTBOUND_STATS">Today Outbound STATS</div>\n    </div>\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-outgoing"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.outbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOTAL\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.TOTAL_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOTAL\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.outbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OUTBOUND_ANSWERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.OUTBOUND_ANSWERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OUTBOUND_ANSWERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-clock"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-42 line-height-72">\n                        {{vm.outbound.sumDuration || 0 | secToTime | date:\'HH:mm:ss\'}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOT_DURATION\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.TOT_DURATION_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOT_DURATION\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-division"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{vm.outbound.total ? ((vm.outbound.sumDuration / vm.outbound.total) | number: 0) : 0 | secToTime | date:\'HH:mm:ss\'}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_DURATION\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_DURATION_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_DURATION\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-percent"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-42 line-height-72">\n                        {{vm.outbound.total ? (vm.outbound.answered / vm.outbound.total * 100) : 0 | number: 1}}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OUTBOUND_ANSWER_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.OUTBOUND_ANSWER_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OUTBOUND_ANSWER_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET OUTBOUND --\x3e'),e.put("app/main/apps/fax/views/faxAccounts/create/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.faxAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="faxAccountForm[\'name\'].$error" ng-show="faxAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.KEY">key</label>\n                <input type="text" name="key" ng-model="vm.faxAccount.key" md-maxlength="5" ng-required="true">\n\n                <div ng-messages="faxAccountForm[\'key\'].$error" ng-show="faxAccountForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.KEY_REQUIRED">key field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="FAX.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.TRUNK">trunk</label>\n                <md-select name="TrunkId" ng-model="vm.faxAccount.TrunkId" required>\n                    <md-option ng-value="TrunkId.id" ng-repeat="TrunkId in vm.trunks" ng-disabled="TrunkId.canSelect === false">{{ TrunkId.name }}</md-option>\n                </md-select>\n                <div ng-messages="faxAccountForm[\'TrunkId\'].$error" ng-show="faxAccountForm[\'TrunkId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.TRUNK_REQUIRED">trunk field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.LOCALSTATIONID">localstationid</label>\n                <input type="text" name="localstationid" ng-model="vm.faxAccount.localstationid" ng-required="true">\n\n                <div class="hint"><span translate="FAX.HELP.LOCALSTATIONID"></span></div>\n                <div ng-messages="faxAccountForm[\'localstationid\'].$error" ng-show="faxAccountForm[\'localstationid\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.LOCALSTATIONID_REQUIRED">localstationid field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.LIST">List</label>\n                <md-select name="ListId" ng-model="vm.faxAccount.ListId" required>\n                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                </md-select>\n                <div ng-messages="faxAccountForm[\'ListId\'].$error" ng-show="faxAccountForm[\'ListId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.faxAccount.description">\n\n                <div ng-messages="faxAccountForm[\'description\'].$error" ng-show="faxAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newFaxAccount" ng-click="vm.saveFaxAccount()" class="send-button md-accent md-raised" ng-disabled="faxAccountForm.$invalid || faxAccountForm.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newFaxAccount" ng-click="vm.addNewFaxAccount()" class="send-button md-accent md-raised" ng-disabled="faxAccountForm.$invalid" aria-label="ADD" translate="FAX.ADD_FAXACCOUNT" translate-attr-aria-label="FAX.ADD_FAXACCOUNT">\n                    ADD FAXACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newFaxAccount" ng-click="vm.deleteFaxAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="FAX.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="FAX.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/agentadd/agentadd.html",'<md-dialog class="faxAccount-dialog" aria-label="faxAccount" ng-init="vm.onInit()">\n    <form name="faxAccountForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="FAX.AGENTADD_FAXACCOUNT">Add Agent to faxAccount</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/agent/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.AGENT">Agent</label>\n                <md-select name="agent" ng-model="vm.agent.agent" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents" ng-disabled="agent.canSelect === false">{{ agent.name }}</md-option>\n                </md-select>\n                <div ng-messages="faxAccountFormApp[\'agent\'].$error" ng-show="faxAccountFormApp[\'agent\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.agent.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'timeout\'].$error" ng-show="faxAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="FAX.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="FAX.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/close/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.DISPOSITION">Disposition</label>\n                <input type="text" name="disposition" ng-model="vm.close.disposition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'disposition\'].$error" ng-show="faxAccountFormApp[\'disposition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.DISPOSITION_REQUIRED">Disposition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/gotoif/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.CONDITION">Condition</label>\n                <input type="text" name="condition" ng-model="vm.gotoif.condition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'condition\'].$error" ng-show="faxAccountFormApp[\'condition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.CONDITION_REQUIRED">Condition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.TRUEPRIORITY">truepriority</label>\n                <input type="number" name="truepriority" ng-model="vm.gotoif.truepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'truepriority\'].$error" ng-show="faxAccountFormApp[\'truepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.TRUEPRIORITY_REQUIRED">truepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="FAX.ERRORS.TRUEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">truepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.FALSEPRIORITY">falsepriority</label>\n                <input type="number" name="falsepriority" ng-model="vm.gotoif.falsepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'falsepriority\'].$error" ng-show="faxAccountFormApp[\'falsepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.FALSEPRIORITY_REQUIRED">falsepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="FAX.ERRORS.FALSEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">falsepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/gotop/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.PRIORITY">Priority</label>\n                <input type="number" name="priority" ng-model="vm.gotop.priority" min="0" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'priority\'].$error" ng-show="faxAccountFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="FAX.ERRORS.PRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Priority must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/noop/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.noop.value" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'value\'].$error" ng-show="faxAccountFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/queue/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="faxAccountFormApp[\'queue\'].$error" ng-show="faxAccountFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'timeout\'].$error" ng-show="faxAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="FAX.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="FAX.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/system/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.COMMAND">Command</label>\n                <input type="text" name="command" ng-model="vm.system.command" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'command\'].$error" ng-show="faxAccountFormApp[\'command\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.COMMAND_REQUIRED">Command field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.VARIABLE">Variable</label>\n                <md-select name="variable" ng-model="vm.system.variable" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables" ng-disabled="variable.canSelect === false">{{ variable.name }}</md-option>\n                </md-select>\n                <div ng-messages="faxAccountFormApp[\'variable\'].$error" ng-show="faxAccountFormApp[\'variable\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/tag/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.TAG">Tag</label>\n                <md-select name="tag" ng-model="vm.tag.tag" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags" ng-disabled="tag.canSelect === false">{{ tag.name }}</md-option>\n                </md-select>\n                <div ng-messages="faxAccountFormApp[\'tag\'].$error" ng-show="faxAccountFormApp[\'tag\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.TAG_REQUIRED">Tag field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/faxDispositions/dialog.html",'<md-dialog class="faxDisposition-dialog" aria-label="New FaxDisposition">\n    <form name="faxDispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.faxDisposition.name" ng-required="true" autofocus>\n\n                <div ng-messages="faxDispositionForm[\'name\'].$error" ng-show="faxDispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newFaxDisposition" ng-click="vm.saveFaxDisposition()" class="send-button md-accent md-raised" ng-disabled="faxDispositionForm.$invalid || faxDispositionForm.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newFaxDisposition" ng-click="vm.addNewFaxDisposition()" class="send-button md-accent md-raised" ng-disabled="faxDispositionForm.$invalid" aria-label="ADD" translate="FAX.ADD_FAXDISPOSITION" translate-attr-aria-label="FAX.ADD_FAXDISPOSITION">\n                    ADD FAXDISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newFaxDisposition" ng-click="vm.deleteFaxDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="FAX.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="FAX.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/view.html",'<div id="fax-faxAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-faxAccounts-button md-icon-button" aria-label="Go to faxAccounts" ng-click="vm.gotoFaxAccounts()" translate translate-attr-aria-label="FAX.GO_TO_FAXACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="faxAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/faxAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.faxAccount.id}}\n                        <span ng-if="vm.faxAccount.name">{{vm.faxAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="FAX.CREATED_AT"></span> <span>{{vm.faxAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.faxAccount, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="FAX.GOTO_FAXACCOUNT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-cast"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.faxAccount, $event)" class="md-fab md-warn md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="FAX.AGENTADD_FAXACCOUNT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveFaxAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (advancedForm.$invalid) || (dispositionForm.$invalid) || (faxDispositionsForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="faxAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="FAX.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.faxAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.KEY">key</label>\n                                <input type="text" name="key" ng-model="vm.faxAccount.key" md-maxlength="5" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'key\'].$error" ng-show="generalForm[\'key\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.KEY_REQUIRED">key field is required</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="FAX.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.HEADERINFO">headerinfo</label>\n                                <input type="text" name="headerinfo" ng-model="vm.faxAccount.headerinfo" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="FAX.HELP.HEADERINFO"></span></div>\n                                <div ng-messages="generalForm[\'headerinfo\'].$error" ng-show="generalForm[\'headerinfo\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.HEADERINFO_REQUIRED">headerinfo field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.TRUNK">trunk</label>\n                                <md-select name="TrunkId" ng-model="vm.faxAccount.TrunkId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="TrunkId.id" ng-repeat="TrunkId in vm.trunks" ng-disabled="TrunkId.canSelect === false">{{ TrunkId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'TrunkId\'].$error" ng-show="generalForm[\'TrunkId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.TRUNK_REQUIRED">trunk field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.LOCALSTATIONID">localstationid</label>\n                                <input type="text" name="localstationid" ng-model="vm.faxAccount.localstationid" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="FAX.HELP.LOCALSTATIONID"></span></div>\n                                <div ng-messages="generalForm[\'localstationid\'].$error" ng-show="generalForm[\'localstationid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.LOCALSTATIONID_REQUIRED">localstationid field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.LIST">List</label>\n                                <md-select name="ListId" ng-model="vm.faxAccount.ListId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'ListId\'].$error" ng-show="generalForm[\'ListId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.LIST_REQUIRED">List field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.WAITFORTHEASSIGNEDAGENT">WaitForTheAssignedAgent</label>\n                                <input type="number" name="waitForTheAssignedAgent" ng-model="vm.faxAccount.waitForTheAssignedAgent" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'waitForTheAssignedAgent\'].$error" ng-show="generalForm[\'waitForTheAssignedAgent\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.WAITFORTHEASSIGNEDAGENT_REQUIRED">WaitForTheAssignedAgent field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="FAX.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="FAX.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_LESS_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.faxAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="faxAccount-detail-form-container notification md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="FAX.NOTIFICATION">NOTIFICATION</div>\n                        </div>\n                        <form name="notificationForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.faxAccount.notificationSound" aria-label="notificationSound" ng-disabled="!vm.crudPermissions.canEdit"><span translate="FAX.NOTIFICATIONSOUND">notificationSound</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.faxAccount.notificationShake" aria-label="notificationShake" ng-disabled="!vm.crudPermissions.canEdit"><span translate="FAX.NOTIFICATIONSHAKE">notificationShake</span></md-switch>\n\n                            </md-input-container>\n                            <div class="md-block">\n                                <label class="md-caption grey-fg" translate="FAX.NOTIFICATIONTEMPLATE">notificationTemplate</label>\n                                <textarea aria-label="notificationTemplate notificationTemplate" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.faxAccount.notificationTemplate"></textarea>\n                            </div>\n\n                        </form>\n                    </div>\n                    <div class="faxAccount-detail-form-container transfer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="FAX.TRANSFER">TRANSFER</div>\n                        </div>\n                        <form name="transferForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.faxAccount.queueTransfer" aria-label="queueTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="FAX.QUEUETRANSFER">queueTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.faxAccount.queueTransfer == true" class="md-block">\n                                <label translate="FAX.QUEUETRANSFERTIMEOUT">queueTransferTimeout</label>\n                                <input type="number" name="queueTransferTimeout" ng-model="vm.faxAccount.queueTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'queueTransferTimeout\'].$error" ng-show="transferForm[\'queueTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.QUEUETRANSFERTIMEOUT_REQUIRED">queueTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="FAX.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="FAX.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.faxAccount.agentTransfer" aria-label="agentTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="FAX.AGENTTRANSFER">agentTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.faxAccount.agentTransfer == true" class="md-block">\n                                <label translate="FAX.AGENTTRANSFERTIMEOUT">agentTransferTimeout</label>\n                                <input type="number" name="agentTransferTimeout" ng-model="vm.faxAccount.agentTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'agentTransferTimeout\'].$error" ng-show="transferForm[\'agentTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.AGENTTRANSFERTIMEOUT_REQUIRED">agentTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="FAX.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="FAX.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="faxAccount-detail-form-container advanced md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="FAX.ADVANCED">ADVANCED</div>\n                        </div>\n                        <form name="advancedForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.ECM">ECM</label>\n                                <md-select name="ecm" ng-model="vm.faxAccount.ecm" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="FAX.HELP.ECM"></span></div>\n                                <div ng-messages="advancedForm[\'ecm\'].$error" ng-show="advancedForm[\'ecm\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.ECM_REQUIRED">ECM field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.MINRATE">minrate</label>\n                                <md-select name="minrate" ng-model="vm.faxAccount.minrate" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'2400\'">2400</md-option>\n                                    <md-option ng-value="\'4800\'">4800</md-option>\n                                    <md-option ng-value="\'7200\'">7200</md-option>\n                                    <md-option ng-value="\'9600\'">9600</md-option>\n                                    <md-option ng-value="\'12000\'">12000</md-option>\n                                    <md-option ng-value="\'14400\'">14400</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="FAX.HELP.MINRATE"></span></div>\n                                <div ng-messages="advancedForm[\'minrate\'].$error" ng-show="advancedForm[\'minrate\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.MINRATE_REQUIRED">minrate field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.MAXRATE">maxrate</label>\n                                <md-select name="maxrate" ng-model="vm.faxAccount.maxrate" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'2400\'">2400</md-option>\n                                    <md-option ng-value="\'4800\'">4800</md-option>\n                                    <md-option ng-value="\'7200\'">7200</md-option>\n                                    <md-option ng-value="\'9600\'">9600</md-option>\n                                    <md-option ng-value="\'12000\'">12000</md-option>\n                                    <md-option ng-value="\'14400\'">14400</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="FAX.HELP.MAXRATE"></span></div>\n                                <div ng-messages="advancedForm[\'maxrate\'].$error" ng-show="advancedForm[\'maxrate\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.MAXRATE_REQUIRED">maxrate field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.MODEM">modem</label>\n                                <input type="text" name="modem" ng-model="vm.faxAccount.modem" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="FAX.HELP.MODEM"></span></div>\n                                <div ng-messages="advancedForm[\'modem\'].$error" ng-show="advancedForm[\'modem\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.MODEM_REQUIRED">modem field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.GATEWAY">gateway</label>\n                                <input type="text" name="gateway" ng-model="vm.faxAccount.gateway" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="FAX.HELP.GATEWAY"></span></div>\n                                <div ng-messages="advancedForm[\'gateway\'].$error" ng-show="advancedForm[\'gateway\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.GATEWAY_REQUIRED">gateway field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.FAXDETECT">faxdetect</label>\n                                <input type="text" name="faxdetect" ng-model="vm.faxAccount.faxdetect" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="FAX.HELP.FAXDETECT"></span></div>\n                                <div ng-messages="advancedForm[\'faxdetect\'].$error" ng-show="advancedForm[\'faxdetect\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.FAXDETECT_REQUIRED">faxdetect field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.T38TIMEOUT">t38timeout</label>\n                                <input type="number" name="t38timeout" ng-model="vm.faxAccount.t38timeout" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="FAX.HELP.T38TIMEOUT"></span></div>\n                                <div ng-messages="advancedForm[\'t38timeout\'].$error" ng-show="advancedForm[\'t38timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.T38TIMEOUT_REQUIRED">t38timeout field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.SIP">SIP</label>\n                                <md-select name="tech" ng-model="vm.faxAccount.tech" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'SIP\'">SIP</md-option>\n                                    <md-option ng-value="\'IAX\'">IAX</md-option>\n                                    <md-option ng-value="\'DADHI\'">DADHI</md-option>\n                                    <md-option ng-value="\'KHOMP\'">KHOMP</md-option>\n                                </md-select>\n                                <div ng-messages="advancedForm[\'tech\'].$error" ng-show="advancedForm[\'tech\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.SIP_REQUIRED">SIP field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="faxAccount-detail-form-container disposition md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="FAX.DISPOSITION">DISPOSITION</div>\n                        </div>\n                        <form name="dispositionForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.faxAccount.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="FAX.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.faxAccount.mandatoryDisposition" class="md-block">\n                                <label translate="FAX.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.faxAccount.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="FAX.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="dispositionForm[\'mandatoryDispositionPauseId\'].$error" ng-show="dispositionForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.DISPOSITIONS">DISPOSITIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="faxAccount-detail-form-container faxdispositions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="FaxAccountFaxDispositionsController as vm_dc" ng-init="vm_dc.init(vm.faxAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedFaxAccountFaxDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="FAX.FAXDISPOSITIONS">FaxDispositions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditFaxAccountFaxDisposition($event)" aria-label="add faxDisposition" translate translate-attr-label="FAX.ADD_FAXDISPOSITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedFaxAccountFaxDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedFaxAccountFaxDispositions.length}} {{vm_dc.selectedFaxAccountFaxDispositions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedFaxAccountFaxDispositions" csv-label="true" filename="faxAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedFaxAccountFaxDispositions($event)" aria-label="delete selected" translate translate-attr-label="FAXACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedFaxAccountFaxDispositions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getFaxAccountFaxDispositions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'FAX.ID\' | translate }}</th>\n                                            <th md-column md-order-by="name">{{ \'FAX.NAME\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'FAX.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="faxDisposition" md-select-id="id" ng-repeat="faxDisposition in vm_dc.faxAccountFaxDispositions.rows">\n                                            <td ng-click="vm_dc.createOrEditFaxAccountFaxDisposition($event, faxDisposition)" md-cell>{{faxDisposition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditFaxAccountFaxDisposition($event, faxDisposition)" md-cell>{{faxDisposition.name}}</td>\n                                            <td ng-click="vm_dc.createOrEditFaxAccountFaxDisposition($event, faxDisposition)" md-cell>{{faxDisposition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="FAX.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditFaxAccountFaxDisposition($event, faxDisposition)" translate="FAX.EDIT_FAXDISPOSITION">\n                                                                Edit FaxDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(faxDisposition, $event)" translate="FAX.DELETE_FAXDISPOSITION">\n                                                                Delete FaxDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.faxAccountFaxDispositions.rows.length">\n                                            <td md-cell colspan="5">\n                                                <span class="text-boxed-ligth" translate="FAX.NO_FAXDISPOSITION_AVAILABLE">No faxdisposition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.faxAccountFaxDispositions.count}}" md-on-paginate="vm_dc.getFaxAccountFaxDispositions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="faxAccount-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="FaxAccountActionsController as vm_ac" ng-init="vm_ac.init(vm.faxAccount, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="FAX.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedFaxAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedFaxAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedFaxAccountApps.length}} {{vm_ac.selectedFaxAccountApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedFaxAccountApps($event)" aria-label="delete selected" translate translate-attr-label="FAX.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedFaxAccountApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px">\n                                                    <span translate="VOICE.PRIORITY">Priority</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.faxAccountApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editFaxAccountApp($event, $index)"><span>{{app.priority}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editFaxAccountApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editFaxAccountApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editFaxAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.faxAccountApps.rows.length">\n                                                <td md-cell colspan="7">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.INTERACTIONS">INTERACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="faxAccount-detail-form-container interactions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="FaxAccountInteractionsController as vm_dc" ng-init="vm_dc.init(vm.faxAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedFaxAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="FAX.INTERACTIONS">Interactions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm_dc.getFaxAccountInteractions()" aria-label="refresh Interactions" translate translate-attr-label="FAX.REFRESH_INTERACTIONS">\n                                        <md-icon md-font-icon="icon-refresh"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedFaxAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedFaxAccountInteractions.length}} {{vm_dc.selectedFaxAccountInteractions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedFaxAccountInteractions" csv-label="true" filename="faxAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedFaxAccountInteractions($event)" aria-label="delete selected" translate translate-attr-label="FAXACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedFaxAccountInteractions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getFaxAccountInteractions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'FAX.ID\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'FAX.STARTEDAT\' | translate }}</th>\n                                            <th md-column>{{ \'FAX.CONTACT\' | translate }}</th>\n                                            <th md-column>{{ \'FAX.AGENT\' | translate }}</th>\n                                            <th md-column md-order-by="closedAt">{{ \'FAX.CLOSEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="disposition">{{ \'FAX.DISPOSITION\' | translate }}</th>\n                                            <th md-column md-order-by="note">{{ \'FAX.NOTES\' | translate }}</th>\n                                            <th md-column md-order-by="tag">{{ \'FAX.TAGS\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="interaction" md-select-id="id" ng-repeat="interaction in vm_dc.faxAccountInteractions.rows">\n                                            <td md-cell>{{interaction.id}}</td>\n                                            <td md-cell>{{interaction.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.Contact.firstName}}</td>\n                                            <td md-cell>{{interaction.Owner.name}}</td>\n                                            <td md-cell>{{interaction.closedAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.disposition}}</td>\n                                            <td md-cell>{{interaction.note}}</td>\n                                            <td md-cell>\n                                                <div ng-if="interaction.Tags.length">\n                                                    <md-tooltip md-direction="left" layout="row">\n                                                        <span ng-repeat="tag in interaction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                                    </md-tooltip>\n                                                    <md-icon md-font-icon="icon-tag"></md-icon>\n                                                </div>\n                                            </td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="FAX.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_dc.spyfaxInteraction($event, interaction)" translate="FAX.SPYINTERACTION">\n                                                                Spy Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.faxInteractionDownload(interaction, $event)" translate="FAX.DOWNLOAD_INTERACTION">\n                                                                Download Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(interaction, $event)" translate="FAX.DELETE_INTERACTION">\n                                                                Delete Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.faxAccountInteractions.rows.length">\n                                            <td md-cell colspan="13">\n                                                <span class="text-boxed-ligth" translate="FAX.NO_INTERACTION_AVAILABLE">No interaction available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.faxAccountInteractions.count}}" md-on-paginate="vm_dc.getFaxAccountInteractions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/fax/views/faxAccounts/faxAccounts.html",'<div id="faxAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-deskphone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="FAX.FAXACCOUNTS">FaxAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="FAX.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedFaxAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedFaxAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="FAX.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-faxAccounts-count">\n                    <span>{{vm.selectedFaxAccounts.length}}</span>\n                    <span translate="FAX.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="FAXACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllFaxAccounts()" translate="FAX.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectFaxAccounts()" translate="FAX.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedFaxAccounts" csv-label="true" filename="faxAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedFaxAccounts($event)" aria-label="delete selected" translate translate-attr-label="FAXACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- FAXACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedFaxAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getFaxAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'FAX.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'FAX.NAME\' | translate }}</th>\n                                <th md-column md-order-by="key">{{ \'FAX.KEY\' | translate }}</th>\n                                <th md-column md-order-by="TrunkId">{{ \'FAX.TRUNK\' | translate }}</th>\n                                <th md-column md-order-by="localstationid">{{ \'FAX.LOCALSTATIONID\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'FAX.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.faxAccounts.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="FAX.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="faxAccount" md-select-id="id" ng-repeat="faxAccount in vm.faxAccounts.rows">\n                                <td md-cell ng-if="faxAccount.userpic"><img class="avatar" alt="{{faxAccount.name}}" ng-src="api/users/{{faxAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!faxAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{faxAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxAccount, ev) : vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="id ">{{faxAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxAccount, ev) : vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="name ">{{faxAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxAccount, ev) : vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="key ">{{faxAccount.key}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxAccount, ev) : vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="TrunkId ">{{ (vm.trunks | filter : {\'id\':faxAccount.TrunkId} : true)[0].name }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxAccount, ev) : vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="localstationid ">{{faxAccount.localstationid}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxAccount, ev) : vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="description ">{{faxAccount.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="FAX.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(faxAccount, $event    )" translate="FAX.EDIT_FAXACCOUNT">\n                                                    Edit FaxAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.interactionsgoto(faxAccount, $event    )" translate="FAX.INTERACTIONS_FAXACCOUNT">\n                                                    Interactions FaxAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(faxAccount, $event    )" translate="FAX.GOTOREALTIME_FAXACCOUNT">\n                                                    goToRealtime FaxAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(faxAccount, $event    )" translate="FAX.AGENTADD_FAXACCOUNT">\n                                                    AgentAdd FaxAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(faxAccount, $event    )" translate="FAX.DELETE_FAXACCOUNT">\n                                                    Delete FaxAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.faxAccounts.count}}" md-on-paginate="vm.getFaxAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / FAXACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD FAXACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-faxAccount-button" ng-click="vm.createOrEditFaxAccount($event)" aria-label="add faxAccount" translate translate-attr-aria-label="FAX.ADD_FAXACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD FAXACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/fax/views/faxQueues/create/dialog.html",'<md-dialog class="faxQueue-dialog" aria-label="New FaxQueue">\n    <form name="faxQueueForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.faxQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newFaxQueue">\n\n                <div class="hint"><span translate="FAX.HELP.NAME"></span></div>\n                <div ng-messages="faxQueueForm[\'name\'].$error" ng-show="faxQueueForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="FAX.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.STRATEGY">Strategy</label>\n                <md-select name="strategy" ng-model="vm.faxQueue.strategy" required>\n                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                </md-select>\n                <div ng-messages="faxQueueForm[\'strategy\'].$error" ng-show="faxQueueForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.AGENT_TIMEOUT">Agent_Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.faxQueue.timeout" min="1" max="2147483" ng-required="true">\n\n                <div ng-messages="faxQueueForm[\'timeout\'].$error" ng-show="faxQueueForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="FAX.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="FAX.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.faxQueue.description">\n\n                <div ng-messages="faxQueueForm[\'description\'].$error" ng-show="faxQueueForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newFaxQueue" ng-click="vm.saveFaxQueue()" class="send-button md-accent md-raised" ng-disabled="faxQueueForm.$invalid || faxQueueForm.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newFaxQueue" ng-click="vm.addNewFaxQueue()" class="send-button md-accent md-raised" ng-disabled="faxQueueForm.$invalid" aria-label="ADD" translate="FAX.ADD_FAXQUEUE" translate-attr-aria-label="FAX.ADD_FAXQUEUE">\n                    ADD FAXQUEUE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newFaxQueue" ng-click="vm.deleteFaxQueue($event)" aria-label="DELETE" translate translate-attr-aria-label="FAX.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="FAX.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxQueues/edit/agentadd/agentadd.html",'<md-dialog class="faxQueue-dialog" aria-label="faxQueue" ng-init="vm.onInit()">\n    <form name="faxQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="FAX.AGENTADD_FAXQUEUE">Add Agent to faxQueue</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxQueues/edit/teamadd/teamadd.html",'<md-dialog class="faxQueue-dialog" aria-label="faxQueue" ng-init="vm.onInit()">\n    <form name="faxQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="FAX.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxQueues/edit/view.html",'<div id="fax-faxQueue" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-faxQueues-button md-icon-button" aria-label="Go to faxQueues" ng-click="vm.gotoFaxQueues()" translate translate-attr-aria-label="FAX.GO_TO_FAXQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="faxQueue-image" hide-xs>\n                    <img ng-src="assets/images/business/faxQueues.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.faxQueue.id}}\n                        <span ng-if="vm.faxQueue.name">{{vm.faxQueue.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="FAX.CREATED_AT"></span> <span>{{vm.faxQueue.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.faxQueue, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="FAX.TEAMADD_FAXQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.faxQueue, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="FAX.AGENTADD_FAXQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveFaxQueue()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid)" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="faxQueue-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="FAX.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.faxQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="FAX.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="FAX.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.faxQueue.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'strategy\'].$error" ng-show="generalForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.AGENT_TIMEOUT">Agent_Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.faxQueue.timeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="FAX.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="FAX.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.faxQueue.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/fax/views/faxQueues/faxQueues.html",'<div id="faxQueues" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-deskphone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="FAX.FAXQUEUES">FaxQueues</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="FAX.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedFaxQueues.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedFaxQueues =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="FAX.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-faxQueues-count">\n                    <span>{{vm.selectedFaxQueues.length}}</span>\n                    <span translate="FAX.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="FAXQUEUES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllFaxQueues()" translate="FAX.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectFaxQueues()" translate="FAX.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedFaxQueues" csv-label="true" filename="faxQueues.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedFaxQueues($event)" aria-label="delete selected" translate translate-attr-label="FAXQUEUES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- FAXQUEUE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedFaxQueues" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getFaxQueues">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'FAX.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'FAX.NAME\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'FAX.STRATEGY\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.faxQueues.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="FAX.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="faxQueue" md-select-id="id" ng-repeat="faxQueue in vm.faxQueues.rows">\n                                <td md-cell ng-if="faxQueue.userpic"><img class="avatar" alt="{{faxQueue.name}}" ng-src="api/users/{{faxQueue.id}}/avatar" /></td>\n                                <td md-cell ng-if="!faxQueue.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{faxQueue.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxQueue, ev) : vm.createOrEditFaxQueue($event, faxQueue)" md-cell class="id ">{{faxQueue.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxQueue, ev) : vm.createOrEditFaxQueue($event, faxQueue)" md-cell class="name ">{{faxQueue.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxQueue, ev) : vm.createOrEditFaxQueue($event, faxQueue)" md-cell class="strategy ">{{ vm.arraystrategy[faxQueue.strategy].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="FAX.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(faxQueue, $event    )" translate="FAX.EDIT_FAXQUEUE">\n                                                    Edit FaxQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(faxQueue, $event    )" translate="FAX.TEAMADD_FAXQUEUE">\n                                                    teamadd FaxQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(faxQueue, $event    )" translate="FAX.AGENTADD_FAXQUEUE">\n                                                    agentadd FaxQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(faxQueue, $event    )" translate="FAX.DELETE_FAXQUEUE">\n                                                    Delete FaxQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(faxQueue, $event    )" translate="FAX.GOTOREALTIME_FAXQUEUE">\n                                                    goToRealtime FaxQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.faxQueues.count}}" md-on-paginate="vm.getFaxQueues" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / FAXQUEUE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD FAXQUEUE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-faxQueue-button" ng-click="vm.createOrEditFaxQueue($event)" aria-label="add faxQueue" translate translate-attr-aria-label="FAX.ADD_FAXQUEUE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD FAXQUEUE BUTTON --\x3e\n</div>'),e.put("app/main/apps/fax/views/realtime/accounts/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="FAX.ACCOUNTS">Accounts</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getFaxAccounts">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'FAX.NAME\' | translate }}</th>\n                <th md-column>{{ \'FAX.KEY\' | translate }}</th>\n                <th md-column>{{ \'FAX.TOTAL\' | translate }}</th>\n                <th md-column>{{ \'FAX.IN\' | translate }}</th>\n                <th md-column>{{ \'FAX.OUT\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.faxAccounts">\n                <td md-cell colspan="4">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="FAX.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.faxAccounts[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.faxAccounts[value].name}}</td>\n                <td md-cell>{{vm.faxAccounts[value].key}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{(vm.faxAccounts[value].in || 0) + (vm.faxAccounts[value].out || 0)}}</span>\n                </td>\n                <td md-cell>\n                    <div layout="row">\n                        <span>\n                            <md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon>\n                        </span>\n                        <span class="md-capture blue-fg">{{vm.faxAccounts[value].in || 0}}</span>\n                        <span class="text-boxed" ng-if="mailAccount.in">{{vm.faxAccounts[value].lastIn ?  (vm.faxAccounts[value].lastIn | date: \'shortTime\') : \'\'}}</span>\n                    </div>\n                </td>\n                <td md-cell>\n                    <div layout="row">\n                        <span>\n                            <md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon>\n                        </span>\n                        <span class="md-capture green-fg">{{vm.faxAccounts[value].out || 0}}</span>\n                        <span class="text-boxed" ng-if="mailAccount.out">{{vm.faxAccounts[value].lastOut ?  (vm.faxAccounts[value].lastOut | date: \'shortTime\') : \'\'}}</span>\n                    </div>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="4">\n                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                <md-button ng-click="vm.goToFaxAccount($event, vm.faxAccounts[value])" translate="FAX.EDIT_ACCOUNT">\n                                    Edit Account\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getfaxAccounts" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/fax/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="FAX.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'FAX.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'FAX.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'FAX.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'FAX.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'FAX.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'FAX.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'FAX.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'FAX.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'FAX.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'FAX.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'FAX.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'FAX.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'FAX.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"FAX.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"FAX.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"FAX.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"FAX.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"FAX.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"FAX.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"FAX.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"FAX.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'FAX.PAGE' | translate}}:', rowsPerPage: '{{'FAX.ROWSPERPAGE' | translate}}:', of: '{{'FAX.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/fax/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="FAX.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'FAX.NAME\' | translate }}</th>\n                <th md-column>{{ \'FAX.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'FAX.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'FAX.READY\' | translate }}</th>\n                <th md-column>{{ \'FAX.WAITING\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="7">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="FAX.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="FAX.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditFaxQueue($event, vm.queues[value])" translate="FAX.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="FAX.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/fax/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.TRUNKS">Trunks</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.ACCOUNTS">Accounts</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/fax/views/realtime/trunks/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="FAX.TRUNKS">Telephones</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n        \x3c!-- <md-button class="md-icon-button" ng-click="vm.showInfo($event)">\n      <i class="icon-information-outline grey-600-fg">\n        <md-tooltip>{{\'FAX.INFO\' | translate}}</md-tooltip>\n      </i>\n    </md-button> --\x3e\n    </div>\n</md-toolbar>\n\n\x3c!-- TRUNKS TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head>\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTrunks">\n                <tr md-row>\n                    <th md-column md-order-by="name">{{ \'FAX.NAME\' | translate }}</th>\n                    <th md-column>{{ \'FAX.TRUNK_STATUS\' | translate }}</th>\n                    <th md-column>{{ \'FAX.REGISTRY\' | translate }}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.trunks">\n                <td md-cell colspan="3">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="FAX.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(id, trunk) in vm.trunks">\n                <td md-cell>{{trunk.name}}</td>\n                <td md-cell>\n                    <i ng-class="vm.statusClass[trunk.status.toLowerCase()]">\n                        <md-tooltip>{{\'FAX.\' + trunk.status | uppercase | translate}}</md-tooltip>\n                    </i>\n                    <span ng-if="trunk.status === \'registered\'" class="text-boxed">{{trunk.address}}</span>\n                </td>\n                <td md-cell>\n                    <i ng-if="trunk.registry" ng-class="(trunk.stateRegistry.toLowerCase() === \'registered\') ? \'green-300-fg icon-checkbox-marked-circle\' : \'red-300-fg icon-close-circle\'">\n                        <md-tooltip>{{\'FAX.\' + trunk.stateRegistry | uppercase | translate}}</md-tooltip>\n                    </i>\n                    <span ng-if="trunk.registry && trunk.host && trunk.port" class="text-boxed">{{trunk.host}}:{{trunk.port}}</span>\n                    <span ng-if="!trunk.registry" translate="FAX.NO_REGISTRY">\n                        No Registry\n                    </span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="4">\n                            <md-menu-item>\n                                <md-button ng-click="vm.goToTrunk($event, trunk)" translate="FAX.EDIT_TRUNK">\n                                    Edit Trunk\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getTrunks" md-page-select></md-table-pagination>\n\x3c!-- / TRUNKS TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/help/views/about/about.html",'<div id="maintenance" class="flex-scrollable" layout="column" ms-scroll>\n    <div id="maintenance-form-wrapper" layout="column" layout-align="center center">\n        <div id="maintenance-form" class="md-whiteframe-8dp">\n            <div>\n                <img src="/api/settings/1/logo_login" alt="logo_login" />\n            </div>\n\n            <br>\n\n            <div>\n                <div class="info-line">\n                    <div class="title">Useful pages</div>\n                </div>\n                <section layout="row" flex layout-sm="column" layout-align="center center" layout-wrap>\n                    <div layout="column" flex="25" layout-align="center center">\n                        <a class="md-fab md-mini md-button grey-bg" href="https://wiki.xcallymotion.com/display/XMV" target="_blank">\n                            <md-icon md-font-icon="icon-wikipedia"></md-icon>\n                        </a>\n                        <div class="info"><a href="https://wiki.xcallymotion.com/display/XMV" target="_blank">Wiki</a></div>\n                    </div>\n\n                    <div layout="column" flex="25" layout-align="center center">\n                        <a class="md-fab md-mini md-button md-accent" href="/apidoc" target="_blank">\n                            <md-icon md-font-icon="icon-apple-mobileme"></md-icon>\n                        </a>\n                        <div class="info"><a href="/apidoc" target="_blank">Motion API</a></div>\n                    </div>\n\n                    <div layout="column" flex="25" layout-align="center center">\n                        <a class="md-fab md-mini md-button orange-bg" href="http://www.xcally.com/bar/phonebar/Setup.msi" target="_blank">\n                            <md-icon md-font-icon="icon-headphones"></md-icon>\n                        </a>\n                        <div class="info"><a href="http://www.xcally.com/bar/phonebar/Setup.msi" target="_blank">Phonebar Download</a></div>\n                    </div>\n\n                    <div layout="column" flex="25" layout-align="center center">\n                        <a class="md-fab md-mini md-button green-bg" href="/demo" target="_blank">\n                            <md-icon md-font-icon="icon-console"></md-icon>\n                        </a>\n                        <div class="info"><a href="/demo" target="_blank">Playground</a></div>\n                    </div>\n\n                </section>\n\n                <br>\n\n                <div class="info-line" ng-if="!vm.license.custom">\n                    <div class="title">Follow us on</div>\n                </div>\n                <section ng-if="!vm.license.custom" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                    <a class="md-fab md-mini md-button blue-900-bg" href="https://www.facebook.com/xcallymotion" target="_blank">\n                        <md-icon md-font-icon="icon-facebook"></md-icon>\n                    </a>\n\n                    <a class="md-fab md-mini md-button" href="https://twitter.com/xcallymotion" target="_blank">\n                        <md-icon md-font-icon="icon-twitter"></md-icon>\n                    </a>\n                    <a class="md-fab md-mini md-button md-warn" href="https://plus.google.com/+Xcally" target="_blank">\n                        <md-icon md-font-icon="icon-google-plus"></md-icon>\n                    </a>\n                    <a class="md-fab md-mini md-button light-blue-800-bg" href="https://www.linkedin.com/company/xcally" target="_blank">\n                        <md-icon md-font-icon="icon-linkedin"></md-icon>\n                    </a>\n                </section>\n\n                <br ng-if="!vm.license.custom">\n\n                <div class="info-line" ng-if="!vm.license.custom">\n                    <div class="title" translate="HELP.CONTACT_US">Contact Us</div>\n                </div>\n                <div class="info-line" ng-if="!vm.license.custom">\n                    <div class="info"><a href="mailto:support@xcally.com" target="_top">support@xcally.com</a></div>\n                </div>\n\n                <br ng-if="!vm.license.custom">\n\n                <div class="info">xCALLY Motion <u>{{vm.info.current}}</u> | <a href="https://wiki.xcallymotion.com/display/XMV/Motion+GUI#MotionGUI-Version{{vm.info.current}}" target="_blank">Changelog</a></div>\n\n                <br>\n\n                <div class="info" ng-if="!vm.license.custom">xCALLY© 2016 - 2018 | Powered by Xenialab | <a href="http://www.xcally.com/support/eula-xcally-license-en.pdf" target="_blank">EULA</a></div>\n\n                <br ng-if="!vm.license.custom">\n\n                <div class="info" ng-if="!vm.license.custom"><a href="https://www.xenialab.com/" target="_blank">www.xenialab.com</a> | <a href="https://www.xcallymotion.com/" target="_blank">www.xcallymotion.com</a></div>\n            </div>\n        </div>\n    </div>\n</div>'),e.put("app/main/apps/integrations/views/deskAccounts/create/dialog.html",'<md-dialog class="deskAccount-dialog" aria-label="New DeskAccount">\n    <form name="deskAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.deskAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="deskAccountForm[\'name\'].$error" ng-show="deskAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.deskAccount.type" required>\n\n                    <md-option ng-value="\'integrationTab\'"> {{ \'INTEGRATIONS.INTEGRATION_TAB\' | translate }} </md-option>\n\n                    <md-option ng-value="\'newTab\'"> {{ \'INTEGRATIONS.NEW_TAB\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="deskAccountForm[\'type\'].$error" ng-show="deskAccountForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.URI">Uri</label>\n                <input type="url" name="remoteUri" ng-model="vm.deskAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="deskAccountForm[\'remoteUri\'].$error" ng-show="deskAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.AUTHTYPE">AuthType</label>\n                <md-select name="authType" ng-model="vm.deskAccount.authType" required>\n                    <md-option ng-value="\'basic\'">Basic</md-option>\n                </md-select>\n                <div ng-messages="deskAccountForm[\'authType\'].$error" ng-show="deskAccountForm[\'authType\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.AUTHTYPE_REQUIRED">AuthType field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.deskAccount.authType == \'basic\'" class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.deskAccount.username" ng-required="true">\n\n                <div ng-messages="deskAccountForm[\'username\'].$error" ng-show="deskAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.deskAccount.authType == \'basic\'">\n                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.deskAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                <div ng-messages="deskAccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.deskAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="deskAccountForm[\'serverUrl\'].$error" ng-show="deskAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.deskAccount.description">\n\n                <div ng-messages="deskAccountForm[\'description\'].$error" ng-show="deskAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newDeskAccount" ng-click="vm.saveDeskAccount()" class="send-button md-accent md-raised" ng-disabled="deskAccountForm.$invalid || deskAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newDeskAccount" ng-click="vm.addNewDeskAccount()" class="send-button md-accent md-raised" ng-disabled="deskAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_DESKACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_DESKACCOUNT">\n                    ADD DESKACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newDeskAccount" ng-click="vm.deleteDeskAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/deskAccounts/deskAccounts.html",'<div id="deskAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.DESKACCOUNTS">DeskAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedDeskAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedDeskAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-deskAccounts-count">\n                    <span>{{vm.selectedDeskAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="DESKACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllDeskAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectDeskAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedDeskAccounts" csv-label="true" filename="deskAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedDeskAccounts($event)" aria-label="delete selected" translate translate-attr-label="DESKACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- DESKACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedDeskAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getDeskAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.URI\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.deskAccounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="deskAccount" md-select-id="id" ng-repeat="deskAccount in vm.deskAccounts.rows">\n                                <td md-cell ng-if="deskAccount.userpic"><img class="avatar" alt="{{deskAccount.name}}" ng-src="api/users/{{deskAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!deskAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{deskAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(deskAccount, ev) : vm.createOrEditDeskAccount($event, deskAccount)" md-cell class="id ">{{deskAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(deskAccount, ev) : vm.createOrEditDeskAccount($event, deskAccount)" md-cell class="name ">{{deskAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(deskAccount, ev) : vm.createOrEditDeskAccount($event, deskAccount)" md-cell class="remoteUri ">{{deskAccount.remoteUri}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(deskAccount, ev) : vm.createOrEditDeskAccount($event, deskAccount)" md-cell class="username ">{{deskAccount.username}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(deskAccount, $event    )" translate="INTEGRATIONS.EDIT_DESKACCOUNT">\n                                                    Edit DeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(deskAccount, $event    )" translate="INTEGRATIONS.TEST_DESKACCOUNT">\n                                                    Test DeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(deskAccount, $event    )" translate="INTEGRATIONS.DELETE_DESKACCOUNT">\n                                                    Delete DeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.deskAccounts.count}}" md-on-paginate="vm.getDeskAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / DESKACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD DESKACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-deskAccount-button" ng-click="vm.createOrEditDeskAccount($event)" aria-label="add deskAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_DESKACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD DESKACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/deskAccounts/edit/configurations/dialog.html",'<md-dialog class="deskConfiguration-dialog" aria-label="New DeskConfiguration">\n    <form name="deskConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.deskConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="deskConfigurationForm[\'name\'].$error" ng-show="deskConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.deskConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="deskConfigurationForm[\'channel\'].$error" ng-show="deskConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.deskConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="deskConfigurationForm[\'type\'].$error" ng-show="deskConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newDeskConfiguration" ng-click="vm.saveDeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="deskConfigurationForm.$invalid || deskConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newDeskConfiguration" ng-click="vm.addNewDeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="deskConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_DESKCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_DESKCONFIGURATION">\n                    ADD DESKCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newDeskConfiguration" ng-click="vm.deleteDeskConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/deskAccounts/edit/item/dialog.html",'<md-dialog class="deskAccount-item-dialog" aria-label="New Item">\n    <form name="deskAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="deskAccountItemForm.type.$error" ng-show="deskAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="deskAccountItemForm.content.$error" ng-show="deskAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="deskAccountItemForm.key.$error" ng-show="deskAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="deskAccountItemForm.keyType.$error" ng-show="deskAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="deskAccountItemForm.keyContent.$error" ng-show="deskAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="deskAccountItemForm.variableName.$error" ng-show="deskAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="deskAccountItemForm.customField.$error" ng-show="deskAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="deskAccountItemForm.$invalid || deskAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="deskAccountItemForm.$invalid || deskAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="deskAccountItemForm.type.$error" ng-show="deskAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="deskAccountItemForm.option.$error"\n            ng-show="deskAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="deskAccountItemForm.content.$error"\n            ng-show="deskAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="deskAccountItemForm.variableName.$error"\n            ng-show="deskAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="deskAccountItemForm.type.$error" ng-show="deskAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="deskAccountItemForm.content.$error"\n          ng-show="deskAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="deskAccountItemForm.variableName.$error"\n          ng-show="deskAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/deskAccounts/edit/view.html",'<div id="integrations-deskAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-deskAccounts-button md-icon-button" aria-label="Go to deskAccounts" ng-click="vm.gotoDeskAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_DESKACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="deskAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/deskAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.deskAccount.id}}\n                        <span ng-if="vm.deskAccount.name">{{vm.deskAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.deskAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveDeskAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="deskAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.deskAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.TYPE">Type</label>\n                                <md-select name="type" ng-model="vm.deskAccount.type" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'integrationTab\'"> {{ \'INTEGRATIONS.INTEGRATION_TAB\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'newTab\'"> {{ \'INTEGRATIONS.NEW_TAB\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.URI">Uri</label>\n                                <input type="url" name="remoteUri" ng-model="vm.deskAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.AUTHTYPE">AuthType</label>\n                                <md-select name="authType" ng-model="vm.deskAccount.authType" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'basic\'">Basic</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'authType\'].$error" ng-show="generalForm[\'authType\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.AUTHTYPE_REQUIRED">AuthType field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.deskAccount.authType == \'basic\'" class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.deskAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block" ng-if="vm.deskAccount.authType == \'basic\'">\n                                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.deskAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.deskAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.deskAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="deskAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="DeskAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.deskAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditDeskConfiguration($event)" class="md-icon-button" aria-label="create deskConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="deskConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedDeskConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getDeskConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ deskConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteDeskConfiguration($event, deskConfiguration)" translate="INTEGRATIONS.DELETE_DESKCONFIGURATION">\n                                                        Delete DeskConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.TAGS">TAGS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-table-container class="md-whiteframe-1dp padding-20">\n                                                <md-input-container class="md-block">\n                                                    <label translate="INTEGRATIONS.TAGS">Tags</label>\n                                                    <md-select ng-model="vm_cc.selectedTags" ng-change="vm_cc.selectTagsChanged($event)" multiple>\n                                                        <md-option ng-value="tag.id" ng-repeat="tag in vm_cc.tags">{{ tag.name }}</md-option>\n                                                    </md-select>\n                                                </md-input-container>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditDeskConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/dynamics365Accounts/create/dialog.html",'<md-dialog class="dynamics365Account-dialog" aria-label="New Dynamics365Account">\n    <form name="dynamics365AccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.dynamics365Account.name" ng-required="true" autofocus>\n\n                <div ng-messages="dynamics365AccountForm[\'name\'].$error" ng-show="dynamics365AccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.dynamics365Account.username" ng-required="true">\n\n                <div ng-messages="dynamics365AccountForm[\'username\'].$error" ng-show="dynamics365AccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.dynamics365Account.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                <div ng-messages="dynamics365AccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.URI">Uri</label>\n                <input type="url" name="remoteUri" ng-model="vm.dynamics365Account.remoteUri" ng-required="true">\n\n                <div ng-messages="dynamics365AccountForm[\'remoteUri\'].$error" ng-show="dynamics365AccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TENANTID">TenantId</label>\n                <input type="text" name="tenantId" ng-model="vm.dynamics365Account.tenantId" ng-required="true">\n\n                <div ng-messages="dynamics365AccountForm[\'tenantId\'].$error" ng-show="dynamics365AccountForm[\'tenantId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TENANTID_REQUIRED">TenantId field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CLIENTID">ClientId</label>\n                <input type="text" name="clientId" ng-model="vm.dynamics365Account.clientId" ng-required="true">\n\n                <div ng-messages="dynamics365AccountForm[\'clientId\'].$error" ng-show="dynamics365AccountForm[\'clientId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CLIENTID_REQUIRED">ClientId field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CLIENTSECRET">ClientSecret</label>\n                <input type="text" name="clientSecret" ng-model="vm.dynamics365Account.clientSecret" ng-required="true">\n\n                <div ng-messages="dynamics365AccountForm[\'clientSecret\'].$error" ng-show="dynamics365AccountForm[\'clientSecret\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CLIENTSECRET_REQUIRED">ClientSecret field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.dynamics365Account.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="dynamics365AccountForm[\'serverUrl\'].$error" ng-show="dynamics365AccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.dynamics365Account.description">\n\n                <div ng-messages="dynamics365AccountForm[\'description\'].$error" ng-show="dynamics365AccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newDynamics365Account" ng-click="vm.saveDynamics365Account()" class="send-button md-accent md-raised" ng-disabled="dynamics365AccountForm.$invalid || dynamics365AccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newDynamics365Account" ng-click="vm.addNewDynamics365Account()" class="send-button md-accent md-raised" ng-disabled="dynamics365AccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_DYNAMICS365ACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_DYNAMICS365ACCOUNT">\n                    ADD DYNAMICS365ACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newDynamics365Account" ng-click="vm.deleteDynamics365Account($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/dynamics365Accounts/dynamics365Accounts.html",'<div id="dynamics365Accounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.DYNAMICS365ACCOUNTS">Dynamics365Accounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedDynamics365Accounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedDynamics365Accounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-dynamics365Accounts-count">\n                    <span>{{vm.selectedDynamics365Accounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="DYNAMICS365ACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllDynamics365Accounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectDynamics365Accounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedDynamics365Accounts" csv-label="true" filename="dynamics365Accounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedDynamics365Accounts($event)" aria-label="delete selected" translate translate-attr-label="DYNAMICS365ACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- DYNAMICS365ACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedDynamics365Accounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getDynamics365Accounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.URI\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.dynamics365Accounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="dynamics365Account" md-select-id="id" ng-repeat="dynamics365Account in vm.dynamics365Accounts.rows">\n                                <td md-cell ng-if="dynamics365Account.userpic"><img class="avatar" alt="{{dynamics365Account.name}}" ng-src="api/users/{{dynamics365Account.id}}/avatar" /></td>\n                                <td md-cell ng-if="!dynamics365Account.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{dynamics365Account.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(dynamics365Account, ev) : vm.createOrEditDynamics365Account($event, dynamics365Account)" md-cell class="id ">{{dynamics365Account.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(dynamics365Account, ev) : vm.createOrEditDynamics365Account($event, dynamics365Account)" md-cell class="name ">{{dynamics365Account.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(dynamics365Account, ev) : vm.createOrEditDynamics365Account($event, dynamics365Account)" md-cell class="username ">{{dynamics365Account.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(dynamics365Account, ev) : vm.createOrEditDynamics365Account($event, dynamics365Account)" md-cell class="remoteUri ">{{dynamics365Account.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(dynamics365Account, $event    )" translate="INTEGRATIONS.EDIT_DYNAMICS365ACCOUNT">\n                                                    Edit Dynamics365Account\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(dynamics365Account, $event    )" translate="INTEGRATIONS.TEST_DYNAMICS365ACCOUNT">\n                                                    Test Dynamics365Account\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(dynamics365Account, $event    )" translate="INTEGRATIONS.DELETE_DYNAMICS365ACCOUNT">\n                                                    Delete Dynamics365Account\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.dynamics365Accounts.count}}" md-on-paginate="vm.getDynamics365Accounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / DYNAMICS365ACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD DYNAMICS365ACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-dynamics365Account-button" ng-click="vm.createOrEditDynamics365Account($event)" aria-label="add dynamics365Account" translate translate-attr-aria-label="INTEGRATIONS.ADD_DYNAMICS365ACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD DYNAMICS365ACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/dynamics365Accounts/edit/configurations/dialog.html",'<md-dialog class="dynamics365Configuration-dialog" aria-label="New Dynamics365Configuration">\n    <form name="dynamics365ConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.dynamics365Configuration.name" ng-required="true" autofocus>\n\n                <div ng-messages="dynamics365ConfigurationForm[\'name\'].$error" ng-show="dynamics365ConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.dynamics365Configuration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dynamics365ConfigurationForm[\'channel\'].$error" ng-show="dynamics365ConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.dynamics365Configuration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dynamics365ConfigurationForm[\'type\'].$error" ng-show="dynamics365ConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TICKETTYPE">TicketType</label>\n                <md-select name="ticketType" ng-model="vm.dynamics365Configuration.ticketType" required>\n\n                    <md-option ng-value="\'incident\'"> {{ \'INTEGRATIONS.CASE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'phonecall\'"> {{ \'INTEGRATIONS.PHONECALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dynamics365ConfigurationForm[\'ticketType\'].$error" ng-show="dynamics365ConfigurationForm[\'ticketType\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TICKETTYPE_REQUIRED">TicketType field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newDynamics365Configuration" ng-click="vm.saveDynamics365Configuration()" class="send-button md-accent md-raised" ng-disabled="dynamics365ConfigurationForm.$invalid || dynamics365ConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newDynamics365Configuration" ng-click="vm.addNewDynamics365Configuration()" class="send-button md-accent md-raised" ng-disabled="dynamics365ConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_DYNAMICS365CONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_DYNAMICS365CONFIGURATION">\n                    ADD DYNAMICS365CONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newDynamics365Configuration" ng-click="vm.deleteDynamics365Configuration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/dynamics365Accounts/edit/item/dialog.html",'<md-dialog class="dynamics365Account-item-dialog" aria-label="New Item">\n    <form name="dynamics365AccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="dynamics365AccountItemForm.type.$error" ng-show="dynamics365AccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="dynamics365AccountItemForm.content.$error" ng-show="dynamics365AccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="dynamics365AccountItemForm.key.$error" ng-show="dynamics365AccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="dynamics365AccountItemForm.keyType.$error" ng-show="dynamics365AccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="dynamics365AccountItemForm.keyContent.$error" ng-show="dynamics365AccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="dynamics365AccountItemForm.variableName.$error" ng-show="dynamics365AccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="dynamics365AccountItemForm.customField.$error" ng-show="dynamics365AccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="dynamics365AccountItemForm.$invalid || dynamics365AccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="dynamics365AccountItemForm.$invalid || dynamics365AccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="dynamics365AccountItemForm.type.$error" ng-show="dynamics365AccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="dynamics365AccountItemForm.option.$error"\n            ng-show="dynamics365AccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="dynamics365AccountItemForm.content.$error"\n            ng-show="dynamics365AccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="dynamics365AccountItemForm.variableName.$error"\n            ng-show="dynamics365AccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="dynamics365AccountItemForm.type.$error" ng-show="dynamics365AccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="dynamics365AccountItemForm.content.$error"\n          ng-show="dynamics365AccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="dynamics365AccountItemForm.variableName.$error"\n          ng-show="dynamics365AccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/dynamics365Accounts/edit/view.html",'<div id="integrations-dynamics365Account" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-dynamics365Accounts-button md-icon-button" aria-label="Go to dynamics365Accounts" ng-click="vm.gotoDynamics365Accounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_DYNAMICS365ACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="dynamics365Account-image" hide-xs>\n                    <img ng-src="assets/images/business/dynamics365Accounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.dynamics365Account.id}}\n                        <span ng-if="vm.dynamics365Account.name">{{vm.dynamics365Account.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.dynamics365Account.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveDynamics365Account()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="dynamics365Account-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.dynamics365Account.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.dynamics365Account.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.dynamics365Account.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.URI">Uri</label>\n                                <input type="url" name="remoteUri" ng-model="vm.dynamics365Account.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.TENANTID">TenantId</label>\n                                <input type="text" name="tenantId" ng-model="vm.dynamics365Account.tenantId" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'tenantId\'].$error" ng-show="generalForm[\'tenantId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.TENANTID_REQUIRED">TenantId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.CLIENTID">ClientId</label>\n                                <input type="text" name="clientId" ng-model="vm.dynamics365Account.clientId" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'clientId\'].$error" ng-show="generalForm[\'clientId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.CLIENTID_REQUIRED">ClientId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.CLIENTSECRET">ClientSecret</label>\n                                <input type="text" name="clientSecret" ng-model="vm.dynamics365Account.clientSecret" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'clientSecret\'].$error" ng-show="generalForm[\'clientSecret\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.CLIENTSECRET_REQUIRED">ClientSecret field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.dynamics365Account.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.dynamics365Account.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="dynamics365Account-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="Dynamics365AccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.dynamics365Account, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditDynamics365Configuration($event)" class="md-icon-button" aria-label="create dynamics365Configuration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="dynamics365Configuration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedDynamics365Configuration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getDynamics365Configuration($index)">\n                                        <span class="text-truncate" flex="80">{{ dynamics365Configuration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteDynamics365Configuration($event, dynamics365Configuration)" translate="INTEGRATIONS.DELETE_DYNAMICS365CONFIGURATION">\n                                                        Delete Dynamics365Configuration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditDynamics365Configuration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/freshdeskAccounts/create/dialog.html",'<md-dialog class="freshdeskAccount-dialog" aria-label="New FreshdeskAccount">\n    <form name="freshdeskAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.freshdeskAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="freshdeskAccountForm[\'name\'].$error" ng-show="freshdeskAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.freshdeskAccount.username" ng-required="true">\n\n                <div ng-messages="freshdeskAccountForm[\'username\'].$error" ng-show="freshdeskAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.URI">Uri</label>\n                <input type="url" name="remoteUri" ng-model="vm.freshdeskAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="freshdeskAccountForm[\'remoteUri\'].$error" ng-show="freshdeskAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.APIKEY">ApiKey</label>\n                <input type="text" name="apiKey" ng-model="vm.freshdeskAccount.apiKey" ng-required="true">\n\n                <div ng-messages="freshdeskAccountForm[\'apiKey\'].$error" ng-show="freshdeskAccountForm[\'apiKey\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.APIKEY_REQUIRED">ApiKey field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.freshdeskAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="freshdeskAccountForm[\'serverUrl\'].$error" ng-show="freshdeskAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.freshdeskAccount.description">\n\n                <div ng-messages="freshdeskAccountForm[\'description\'].$error" ng-show="freshdeskAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newFreshdeskAccount" ng-click="vm.saveFreshdeskAccount()" class="send-button md-accent md-raised" ng-disabled="freshdeskAccountForm.$invalid || freshdeskAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newFreshdeskAccount" ng-click="vm.addNewFreshdeskAccount()" class="send-button md-accent md-raised" ng-disabled="freshdeskAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_FRESHDESKACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_FRESHDESKACCOUNT">\n                    ADD FRESHDESKACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newFreshdeskAccount" ng-click="vm.deleteFreshdeskAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/freshdeskAccounts/edit/configurations/dialog.html",'<md-dialog class="freshdeskConfiguration-dialog" aria-label="New FreshdeskConfiguration">\n    <form name="freshdeskConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.freshdeskConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="freshdeskConfigurationForm[\'name\'].$error" ng-show="freshdeskConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.freshdeskConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="freshdeskConfigurationForm[\'channel\'].$error" ng-show="freshdeskConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.freshdeskConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="freshdeskConfigurationForm[\'type\'].$error" ng-show="freshdeskConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newFreshdeskConfiguration" ng-click="vm.saveFreshdeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="freshdeskConfigurationForm.$invalid || freshdeskConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newFreshdeskConfiguration" ng-click="vm.addNewFreshdeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="freshdeskConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_FRESHDESKCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_FRESHDESKCONFIGURATION">\n                    ADD FRESHDESKCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newFreshdeskConfiguration" ng-click="vm.deleteFreshdeskConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/freshdeskAccounts/edit/item/dialog.html",'<md-dialog class="freshdeskAccount-item-dialog" aria-label="New Item">\n    <form name="freshdeskAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="freshdeskAccountItemForm.type.$error" ng-show="freshdeskAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="freshdeskAccountItemForm.content.$error" ng-show="freshdeskAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="freshdeskAccountItemForm.key.$error" ng-show="freshdeskAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="freshdeskAccountItemForm.keyType.$error" ng-show="freshdeskAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="freshdeskAccountItemForm.keyContent.$error" ng-show="freshdeskAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="freshdeskAccountItemForm.variableName.$error" ng-show="freshdeskAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="freshdeskAccountItemForm.customField.$error" ng-show="freshdeskAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="freshdeskAccountItemForm.$invalid || freshdeskAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="freshdeskAccountItemForm.$invalid || freshdeskAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="freshdeskAccountItemForm.type.$error" ng-show="freshdeskAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="freshdeskAccountItemForm.option.$error"\n            ng-show="freshdeskAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="freshdeskAccountItemForm.content.$error"\n            ng-show="freshdeskAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="freshdeskAccountItemForm.variableName.$error"\n            ng-show="freshdeskAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="freshdeskAccountItemForm.type.$error" ng-show="freshdeskAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="freshdeskAccountItemForm.content.$error"\n          ng-show="freshdeskAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="freshdeskAccountItemForm.variableName.$error"\n          ng-show="freshdeskAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/freshdeskAccounts/edit/view.html",'<div id="integrations-freshdeskAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-freshdeskAccounts-button md-icon-button" aria-label="Go to freshdeskAccounts" ng-click="vm.gotoFreshdeskAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_FRESHDESKACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="freshdeskAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/freshdeskAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.freshdeskAccount.id}}\n                        <span ng-if="vm.freshdeskAccount.name">{{vm.freshdeskAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.freshdeskAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveFreshdeskAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="freshdeskAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.freshdeskAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.freshdeskAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.URI">Uri</label>\n                                <input type="url" name="remoteUri" ng-model="vm.freshdeskAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.APIKEY">ApiKey</label>\n                                <input type="text" name="apiKey" ng-model="vm.freshdeskAccount.apiKey" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'apiKey\'].$error" ng-show="generalForm[\'apiKey\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.APIKEY_REQUIRED">ApiKey field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.freshdeskAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.freshdeskAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="freshdeskAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="FreshdeskAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.freshdeskAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditFreshdeskConfiguration($event)" class="md-icon-button" aria-label="create freshdeskConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="freshdeskConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedFreshdeskConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getFreshdeskConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ freshdeskConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteFreshdeskConfiguration($event, freshdeskConfiguration)" translate="INTEGRATIONS.DELETE_FRESHDESKCONFIGURATION">\n                                                        Delete FreshdeskConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.TAGS">TAGS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-table-container class="md-whiteframe-1dp padding-20">\n                                                <md-input-container class="md-block">\n                                                    <label translate="INTEGRATIONS.TAGS">Tags</label>\n                                                    <md-select ng-model="vm_cc.selectedTags" ng-change="vm_cc.selectTagsChanged($event)" multiple>\n                                                        <md-option ng-value="tag.id" ng-repeat="tag in vm_cc.tags">{{ tag.name }}</md-option>\n                                                    </md-select>\n                                                </md-input-container>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditFreshdeskConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/freshdeskAccounts/freshdeskAccounts.html",'<div id="freshdeskAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.FRESHDESKACCOUNTS">FreshdeskAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedFreshdeskAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedFreshdeskAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-freshdeskAccounts-count">\n                    <span>{{vm.selectedFreshdeskAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="FRESHDESKACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllFreshdeskAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectFreshdeskAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedFreshdeskAccounts" csv-label="true" filename="freshdeskAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedFreshdeskAccounts($event)" aria-label="delete selected" translate translate-attr-label="FRESHDESKACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- FRESHDESKACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedFreshdeskAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getFreshdeskAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.URI\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.freshdeskAccounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="freshdeskAccount" md-select-id="id" ng-repeat="freshdeskAccount in vm.freshdeskAccounts.rows">\n                                <td md-cell ng-if="freshdeskAccount.userpic"><img class="avatar" alt="{{freshdeskAccount.name}}" ng-src="api/users/{{freshdeskAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!freshdeskAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{freshdeskAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(freshdeskAccount, ev) : vm.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="id ">{{freshdeskAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(freshdeskAccount, ev) : vm.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="name ">{{freshdeskAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(freshdeskAccount, ev) : vm.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="username ">{{freshdeskAccount.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(freshdeskAccount, ev) : vm.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="remoteUri ">{{freshdeskAccount.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(freshdeskAccount, $event    )" translate="INTEGRATIONS.EDIT_FRESHDESKACCOUNT">\n                                                    Edit FreshdeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(freshdeskAccount, $event    )" translate="INTEGRATIONS.TEST_FRESHDESKACCOUNT">\n                                                    Test FreshdeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(freshdeskAccount, $event    )" translate="INTEGRATIONS.DELETE_FRESHDESKACCOUNT">\n                                                    Delete FreshdeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.freshdeskAccounts.count}}" md-on-paginate="vm.getFreshdeskAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / FRESHDESKACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD FRESHDESKACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-freshdeskAccount-button" ng-click="vm.createOrEditFreshdeskAccount($event)" aria-label="add freshdeskAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_FRESHDESKACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD FRESHDESKACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/salesforceAccounts/create/dialog.html",'<md-dialog class="salesforceAccount-dialog" aria-label="New SalesforceAccount">\n    <form name="salesforceAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.salesforceAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="salesforceAccountForm[\'name\'].$error" ng-show="salesforceAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.salesforceAccount.type" required>\n\n                    <md-option ng-value="\'integrationTab\'"> {{ \'INTEGRATIONS.INTEGRATION_TAB\' | translate }} </md-option>\n\n                    <md-option ng-value="\'newTab\'"> {{ \'INTEGRATIONS.NEW_TAB\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="salesforceAccountForm[\'type\'].$error" ng-show="salesforceAccountForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.salesforceAccount.username" ng-required="true">\n\n                <div ng-messages="salesforceAccountForm[\'username\'].$error" ng-show="salesforceAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.URI">Uri</label>\n                <input type="url" name="remoteUri" ng-model="vm.salesforceAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="salesforceAccountForm[\'remoteUri\'].$error" ng-show="salesforceAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.salesforceAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                <div ng-messages="salesforceAccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CLIENTID">ClientId</label>\n                <input type="text" name="clientId" ng-model="vm.salesforceAccount.clientId" ng-required="true">\n\n                <div ng-messages="salesforceAccountForm[\'clientId\'].$error" ng-show="salesforceAccountForm[\'clientId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CLIENTID_REQUIRED">ClientId field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CLIENTSECRET">ClientSecret</label>\n                <input type="text" name="clientSecret" ng-model="vm.salesforceAccount.clientSecret" ng-required="true">\n\n                <div ng-messages="salesforceAccountForm[\'clientSecret\'].$error" ng-show="salesforceAccountForm[\'clientSecret\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CLIENTSECRET_REQUIRED">ClientSecret field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.SECURITYTOKEN">SecurityToken</label>\n                <input type="text" name="securityToken" ng-model="vm.salesforceAccount.securityToken" ng-required="true">\n\n                <div ng-messages="salesforceAccountForm[\'securityToken\'].$error" ng-show="salesforceAccountForm[\'securityToken\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.SECURITYTOKEN_REQUIRED">SecurityToken field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.salesforceAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="salesforceAccountForm[\'serverUrl\'].$error" ng-show="salesforceAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.salesforceAccount.description">\n\n                <div ng-messages="salesforceAccountForm[\'description\'].$error" ng-show="salesforceAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSalesforceAccount" ng-click="vm.saveSalesforceAccount()" class="send-button md-accent md-raised" ng-disabled="salesforceAccountForm.$invalid || salesforceAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSalesforceAccount" ng-click="vm.addNewSalesforceAccount()" class="send-button md-accent md-raised" ng-disabled="salesforceAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SALESFORCEACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_SALESFORCEACCOUNT">\n                    ADD SALESFORCEACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSalesforceAccount" ng-click="vm.deleteSalesforceAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/salesforceAccounts/edit/configurations/dialog.html",'<md-dialog class="salesforceConfiguration-dialog" aria-label="New SalesforceConfiguration">\n    <form name="salesforceConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.salesforceConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="salesforceConfigurationForm[\'name\'].$error" ng-show="salesforceConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.salesforceConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="salesforceConfigurationForm[\'channel\'].$error" ng-show="salesforceConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.salesforceConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="salesforceConfigurationForm[\'type\'].$error" ng-show="salesforceConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TICKETTYPE">TicketType</label>\n                <md-select name="ticketType" ng-model="vm.salesforceConfiguration.ticketType" required>\n\n                    <md-option ng-value="\'Task\'"> {{ \'INTEGRATIONS.TASK\' | translate }} </md-option>\n\n                    <md-option ng-value="\'Case\'"> {{ \'INTEGRATIONS.CASE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="salesforceConfigurationForm[\'ticketType\'].$error" ng-show="salesforceConfigurationForm[\'ticketType\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TICKETTYPE_REQUIRED">TicketType field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSalesforceConfiguration" ng-click="vm.saveSalesforceConfiguration()" class="send-button md-accent md-raised" ng-disabled="salesforceConfigurationForm.$invalid || salesforceConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSalesforceConfiguration" ng-click="vm.addNewSalesforceConfiguration()" class="send-button md-accent md-raised" ng-disabled="salesforceConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SALESFORCECONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_SALESFORCECONFIGURATION">\n                    ADD SALESFORCECONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSalesforceConfiguration" ng-click="vm.deleteSalesforceConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/salesforceAccounts/edit/item/dialog.html",'<md-dialog class="salesforceAccount-item-dialog" aria-label="New Item">\n    <form name="salesforceAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="salesforceAccountItemForm.type.$error" ng-show="salesforceAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="salesforceAccountItemForm.content.$error" ng-show="salesforceAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="salesforceAccountItemForm.key.$error" ng-show="salesforceAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="salesforceAccountItemForm.keyType.$error" ng-show="salesforceAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="salesforceAccountItemForm.keyContent.$error" ng-show="salesforceAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="salesforceAccountItemForm.variableName.$error" ng-show="salesforceAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="salesforceAccountItemForm.customField.$error" ng-show="salesforceAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="salesforceAccountItemForm.$invalid || salesforceAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="salesforceAccountItemForm.$invalid || salesforceAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="salesforceAccountItemForm.type.$error" ng-show="salesforceAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="salesforceAccountItemForm.option.$error"\n            ng-show="salesforceAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="salesforceAccountItemForm.content.$error"\n            ng-show="salesforceAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="salesforceAccountItemForm.variableName.$error"\n            ng-show="salesforceAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="salesforceAccountItemForm.type.$error" ng-show="salesforceAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="salesforceAccountItemForm.content.$error"\n          ng-show="salesforceAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="salesforceAccountItemForm.variableName.$error"\n          ng-show="salesforceAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/salesforceAccounts/edit/view.html",'<div id="integrations-salesforceAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-salesforceAccounts-button md-icon-button" aria-label="Go to salesforceAccounts" ng-click="vm.gotoSalesforceAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_SALESFORCEACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="salesforceAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/salesforceAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.salesforceAccount.id}}\n                        <span ng-if="vm.salesforceAccount.name">{{vm.salesforceAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.salesforceAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveSalesforceAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="salesforceAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.salesforceAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.TYPE">Type</label>\n                                <md-select name="type" ng-model="vm.salesforceAccount.type" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'integrationTab\'"> {{ \'INTEGRATIONS.INTEGRATION_TAB\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'newTab\'"> {{ \'INTEGRATIONS.NEW_TAB\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.salesforceAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.URI">Uri</label>\n                                <input type="url" name="remoteUri" ng-model="vm.salesforceAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.salesforceAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.CLIENTID">ClientId</label>\n                                <input type="text" name="clientId" ng-model="vm.salesforceAccount.clientId" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'clientId\'].$error" ng-show="generalForm[\'clientId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.CLIENTID_REQUIRED">ClientId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.CLIENTSECRET">ClientSecret</label>\n                                <input type="text" name="clientSecret" ng-model="vm.salesforceAccount.clientSecret" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'clientSecret\'].$error" ng-show="generalForm[\'clientSecret\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.CLIENTSECRET_REQUIRED">ClientSecret field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.SECURITYTOKEN">SecurityToken</label>\n                                <input type="text" name="securityToken" ng-model="vm.salesforceAccount.securityToken" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'securityToken\'].$error" ng-show="generalForm[\'securityToken\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURITYTOKEN_REQUIRED">SecurityToken field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.salesforceAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.salesforceAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="salesforceAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="SalesforceAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.salesforceAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditSalesforceConfiguration($event)" class="md-icon-button" aria-label="create salesforceConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="salesforceConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedSalesforceConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getSalesforceConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ salesforceConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteSalesforceConfiguration($event, salesforceConfiguration)" translate="INTEGRATIONS.DELETE_SALESFORCECONFIGURATION">\n                                                        Delete SalesforceConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.ADVANCED">ADVANCED</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <div layout-margin>\n                                                <label translate="INTEGRATIONS.MODULE_SEARCH"></label>\n                                                <md-select ng-model="vm_cc.salesforceConfiguration.moduleSearch" ng-change="vm_cc.selectChangedAdvanced()" ng-disabled="!vm_cc.crudPermissions.canEdit">\n                                                    <md-option ng-value="option.key" ng-repeat="option in [{key: \'contact_lead\', value: \'Contact & Lead\'}, {key: \'contact\', value: \'Contact\'}, {key: \'lead\', value: \'Lead\'}]">{{ option.value }}</md-option>\n                                                </md-select>\n                                            </div>\n                                            <div layout-margin>\n                                                <label translate="INTEGRATIONS.MODULE_CREATE"></label>\n                                                <md-select ng-model="vm_cc.salesforceConfiguration.moduleCreate" ng-change="vm_cc.selectChangedAdvanced()" ng-disabled="!vm_cc.crudPermissions.canEdit">\n                                                    <md-option ng-value="option.key" ng-repeat="option in [{key: \'nothing\', value: \'Nothing\'}, {key: \'contact\', value: \'Contact\'}, {key: \'lead\', value: \'Lead\'}]">{{ option.value }}</md-option>\n                                                </md-select>\n                                            </div>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditSalesforceConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/salesforceAccounts/salesforceAccounts.html",'<div id="salesforceAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.SALESFORCEACCOUNTS">SalesforceAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedSalesforceAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedSalesforceAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-salesforceAccounts-count">\n                    <span>{{vm.selectedSalesforceAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SALESFORCEACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllSalesforceAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectSalesforceAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedSalesforceAccounts" csv-label="true" filename="salesforceAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedSalesforceAccounts($event)" aria-label="delete selected" translate translate-attr-label="SALESFORCEACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SALESFORCEACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedSalesforceAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSalesforceAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.URI\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.salesforceAccounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="salesforceAccount" md-select-id="id" ng-repeat="salesforceAccount in vm.salesforceAccounts.rows">\n                                <td md-cell ng-if="salesforceAccount.userpic"><img class="avatar" alt="{{salesforceAccount.name}}" ng-src="api/users/{{salesforceAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!salesforceAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{salesforceAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(salesforceAccount, ev) : vm.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="id ">{{salesforceAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(salesforceAccount, ev) : vm.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="name ">{{salesforceAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(salesforceAccount, ev) : vm.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="username ">{{salesforceAccount.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(salesforceAccount, ev) : vm.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="remoteUri ">{{salesforceAccount.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(salesforceAccount, $event    )" translate="INTEGRATIONS.EDIT_SALESFORCEACCOUNT">\n                                                    Edit SalesforceAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(salesforceAccount, $event    )" translate="INTEGRATIONS.TEST_SALESFORCEACCOUNT">\n                                                    Test SalesforceAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(salesforceAccount, $event    )" translate="INTEGRATIONS.DELETE_SALESFORCEACCOUNT">\n                                                    Delete SalesforceAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.salesforceAccounts.count}}" md-on-paginate="vm.getSalesforceAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SALESFORCEACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD SALESFORCEACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-salesforceAccount-button" ng-click="vm.createOrEditSalesforceAccount($event)" aria-label="add salesforceAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_SALESFORCEACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD SALESFORCEACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/servicenowAccounts/create/dialog.html",'<md-dialog class="servicenowAccount-dialog" aria-label="New ServicenowAccount">\n    <form name="servicenowAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.servicenowAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="servicenowAccountForm[\'name\'].$error" ng-show="servicenowAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.servicenowAccount.username" ng-required="true">\n\n                <div ng-messages="servicenowAccountForm[\'username\'].$error" ng-show="servicenowAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.servicenowAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                <div ng-messages="servicenowAccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.servicenowAccount.email" ng-required="true">\n\n                <div ng-messages="servicenowAccountForm[\'email\'].$error" ng-show="servicenowAccountForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="INTEGRATIONS.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.HOST">Host</label>\n                <input type="url" name="remoteUri" ng-model="vm.servicenowAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="servicenowAccountForm[\'remoteUri\'].$error" ng-show="servicenowAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.HOST_REQUIRED">Host field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.HOST_MUST_VALID_URL">Host must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.servicenowAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="servicenowAccountForm[\'serverUrl\'].$error" ng-show="servicenowAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.servicenowAccount.description">\n\n                <div ng-messages="servicenowAccountForm[\'description\'].$error" ng-show="servicenowAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newServicenowAccount" ng-click="vm.saveServicenowAccount()" class="send-button md-accent md-raised" ng-disabled="servicenowAccountForm.$invalid || servicenowAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newServicenowAccount" ng-click="vm.addNewServicenowAccount()" class="send-button md-accent md-raised" ng-disabled="servicenowAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SERVICENOWACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_SERVICENOWACCOUNT">\n                    ADD SERVICENOWACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newServicenowAccount" ng-click="vm.deleteServicenowAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/servicenowAccounts/edit/configurations/dialog.html",'<md-dialog class="servicenowConfiguration-dialog" aria-label="New ServicenowConfiguration">\n    <form name="servicenowConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.servicenowConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="servicenowConfigurationForm[\'name\'].$error" ng-show="servicenowConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.servicenowConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="servicenowConfigurationForm[\'channel\'].$error" ng-show="servicenowConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.servicenowConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="servicenowConfigurationForm[\'type\'].$error" ng-show="servicenowConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newServicenowConfiguration" ng-click="vm.saveServicenowConfiguration()" class="send-button md-accent md-raised" ng-disabled="servicenowConfigurationForm.$invalid || servicenowConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newServicenowConfiguration" ng-click="vm.addNewServicenowConfiguration()" class="send-button md-accent md-raised" ng-disabled="servicenowConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SERVICENOWCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_SERVICENOWCONFIGURATION">\n                    ADD SERVICENOWCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newServicenowConfiguration" ng-click="vm.deleteServicenowConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/servicenowAccounts/edit/item/dialog.html",'<md-dialog class="servicenowAccount-item-dialog" aria-label="New Item">\n    <form name="servicenowAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="servicenowAccountItemForm.type.$error" ng-show="servicenowAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="servicenowAccountItemForm.content.$error" ng-show="servicenowAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="servicenowAccountItemForm.key.$error" ng-show="servicenowAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="servicenowAccountItemForm.keyType.$error" ng-show="servicenowAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="servicenowAccountItemForm.keyContent.$error" ng-show="servicenowAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="servicenowAccountItemForm.variableName.$error" ng-show="servicenowAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="servicenowAccountItemForm.customField.$error" ng-show="servicenowAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="servicenowAccountItemForm.$invalid || servicenowAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="servicenowAccountItemForm.$invalid || servicenowAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="servicenowAccountItemForm.type.$error" ng-show="servicenowAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="servicenowAccountItemForm.option.$error"\n            ng-show="servicenowAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="servicenowAccountItemForm.content.$error"\n            ng-show="servicenowAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="servicenowAccountItemForm.variableName.$error"\n            ng-show="servicenowAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="servicenowAccountItemForm.type.$error" ng-show="servicenowAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="servicenowAccountItemForm.content.$error"\n          ng-show="servicenowAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="servicenowAccountItemForm.variableName.$error"\n          ng-show="servicenowAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/servicenowAccounts/edit/view.html",'<div id="integrations-servicenowAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-servicenowAccounts-button md-icon-button" aria-label="Go to servicenowAccounts" ng-click="vm.gotoServicenowAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_SERVICENOWACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="servicenowAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/servicenowAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.servicenowAccount.id}}\n                        <span ng-if="vm.servicenowAccount.name">{{vm.servicenowAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.servicenowAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveServicenowAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="servicenowAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.servicenowAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.servicenowAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.servicenowAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.EMAIL">Email</label>\n                                <input type="email" name="email" ng-model="vm.servicenowAccount.email" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'email\'].$error" ng-show="generalForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="INTEGRATIONS.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.HOST">Host</label>\n                                <input type="url" name="remoteUri" ng-model="vm.servicenowAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.HOST_REQUIRED">Host field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.HOST_MUST_VALID_URL">Host must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.servicenowAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.servicenowAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="servicenowAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="ServicenowAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.servicenowAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditServicenowConfiguration($event)" class="md-icon-button" aria-label="create servicenowConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="servicenowConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedServicenowConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getServicenowConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ servicenowConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteServicenowConfiguration($event, servicenowConfiguration)" translate="INTEGRATIONS.DELETE_SERVICENOWCONFIGURATION">\n                                                        Delete ServicenowConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditServicenowConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/servicenowAccounts/servicenowAccounts.html",'<div id="servicenowAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.SERVICENOWACCOUNTS">ServicenowAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedServicenowAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedServicenowAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-servicenowAccounts-count">\n                    <span>{{vm.selectedServicenowAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SERVICENOWACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllServicenowAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectServicenowAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedServicenowAccounts" csv-label="true" filename="servicenowAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedServicenowAccounts($event)" aria-label="delete selected" translate translate-attr-label="SERVICENOWACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SERVICENOWACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedServicenowAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getServicenowAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="email">{{ \'INTEGRATIONS.EMAIL\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.HOST\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.servicenowAccounts.rows.length">\n                                <td md-cell colspan="6">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="servicenowAccount" md-select-id="id" ng-repeat="servicenowAccount in vm.servicenowAccounts.rows">\n                                <td md-cell ng-if="servicenowAccount.userpic"><img class="avatar" alt="{{servicenowAccount.name}}" ng-src="api/users/{{servicenowAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!servicenowAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{servicenowAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(servicenowAccount, ev) : vm.createOrEditServicenowAccount($event, servicenowAccount)" md-cell class="id ">{{servicenowAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(servicenowAccount, ev) : vm.createOrEditServicenowAccount($event, servicenowAccount)" md-cell class="name ">{{servicenowAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(servicenowAccount, ev) : vm.createOrEditServicenowAccount($event, servicenowAccount)" md-cell class="username ">{{servicenowAccount.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(servicenowAccount, ev) : vm.createOrEditServicenowAccount($event, servicenowAccount)" md-cell class="email ">{{servicenowAccount.email}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(servicenowAccount, ev) : vm.createOrEditServicenowAccount($event, servicenowAccount)" md-cell class="remoteUri ">{{servicenowAccount.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(servicenowAccount, $event    )" translate="INTEGRATIONS.EDIT_SERVICENOWACCOUNT">\n                                                    Edit ServicenowAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(servicenowAccount, $event    )" translate="INTEGRATIONS.TEST_SERVICENOWACCOUNT">\n                                                    Test ServicenowAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(servicenowAccount, $event    )" translate="INTEGRATIONS.DELETE_SERVICENOWACCOUNT">\n                                                    Delete ServicenowAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.servicenowAccounts.count}}" md-on-paginate="vm.getServicenowAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SERVICENOWACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD SERVICENOWACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-servicenowAccount-button" ng-click="vm.createOrEditServicenowAccount($event)" aria-label="add servicenowAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_SERVICENOWACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD SERVICENOWACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/sugarcrmAccounts/create/dialog.html",'<md-dialog class="sugarcrmAccount-dialog" aria-label="New SugarcrmAccount">\n    <form name="sugarcrmAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.sugarcrmAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="sugarcrmAccountForm[\'name\'].$error" ng-show="sugarcrmAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.sugarcrmAccount.username" ng-required="true">\n\n                <div ng-messages="sugarcrmAccountForm[\'username\'].$error" ng-show="sugarcrmAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.URI">Uri</label>\n                <input type="url" name="remoteUri" ng-model="vm.sugarcrmAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="sugarcrmAccountForm[\'remoteUri\'].$error" ng-show="sugarcrmAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.sugarcrmAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                <div ng-messages="sugarcrmAccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.sugarcrmAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="sugarcrmAccountForm[\'serverUrl\'].$error" ng-show="sugarcrmAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.sugarcrmAccount.description">\n\n                <div ng-messages="sugarcrmAccountForm[\'description\'].$error" ng-show="sugarcrmAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSugarcrmAccount" ng-click="vm.saveSugarcrmAccount()" class="send-button md-accent md-raised" ng-disabled="sugarcrmAccountForm.$invalid || sugarcrmAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSugarcrmAccount" ng-click="vm.addNewSugarcrmAccount()" class="send-button md-accent md-raised" ng-disabled="sugarcrmAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SUGARCRMACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_SUGARCRMACCOUNT">\n                    ADD SUGARCRMACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSugarcrmAccount" ng-click="vm.deleteSugarcrmAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/sugarcrmAccounts/edit/configurations/dialog.html",'<md-dialog class="sugarcrmConfiguration-dialog" aria-label="New SugarcrmConfiguration">\n    <form name="sugarcrmConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.sugarcrmConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="sugarcrmConfigurationForm[\'name\'].$error" ng-show="sugarcrmConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.sugarcrmConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="sugarcrmConfigurationForm[\'channel\'].$error" ng-show="sugarcrmConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.sugarcrmConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="sugarcrmConfigurationForm[\'type\'].$error" ng-show="sugarcrmConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSugarcrmConfiguration" ng-click="vm.saveSugarcrmConfiguration()" class="send-button md-accent md-raised" ng-disabled="sugarcrmConfigurationForm.$invalid || sugarcrmConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSugarcrmConfiguration" ng-click="vm.addNewSugarcrmConfiguration()" class="send-button md-accent md-raised" ng-disabled="sugarcrmConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SUGARCRMCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_SUGARCRMCONFIGURATION">\n                    ADD SUGARCRMCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSugarcrmConfiguration" ng-click="vm.deleteSugarcrmConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/sugarcrmAccounts/edit/item/dialog.html",'<md-dialog class="sugarcrmAccount-item-dialog" aria-label="New Item">\n    <form name="sugarcrmAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="sugarcrmAccountItemForm.type.$error" ng-show="sugarcrmAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="sugarcrmAccountItemForm.content.$error" ng-show="sugarcrmAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="sugarcrmAccountItemForm.key.$error" ng-show="sugarcrmAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="sugarcrmAccountItemForm.keyType.$error" ng-show="sugarcrmAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="sugarcrmAccountItemForm.keyContent.$error" ng-show="sugarcrmAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="sugarcrmAccountItemForm.variableName.$error" ng-show="sugarcrmAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="sugarcrmAccountItemForm.customField.$error" ng-show="sugarcrmAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="sugarcrmAccountItemForm.$invalid || sugarcrmAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="sugarcrmAccountItemForm.$invalid || sugarcrmAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="sugarcrmAccountItemForm.type.$error" ng-show="sugarcrmAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="sugarcrmAccountItemForm.option.$error"\n            ng-show="sugarcrmAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="sugarcrmAccountItemForm.content.$error"\n            ng-show="sugarcrmAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="sugarcrmAccountItemForm.variableName.$error"\n            ng-show="sugarcrmAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="sugarcrmAccountItemForm.type.$error" ng-show="sugarcrmAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="sugarcrmAccountItemForm.content.$error"\n          ng-show="sugarcrmAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="sugarcrmAccountItemForm.variableName.$error"\n          ng-show="sugarcrmAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/sugarcrmAccounts/edit/view.html",'<div id="integrations-sugarcrmAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-sugarcrmAccounts-button md-icon-button" aria-label="Go to sugarcrmAccounts" ng-click="vm.gotoSugarcrmAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_SUGARCRMACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="sugarcrmAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/sugarcrmAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.sugarcrmAccount.id}}\n                        <span ng-if="vm.sugarcrmAccount.name">{{vm.sugarcrmAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.sugarcrmAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveSugarcrmAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="sugarcrmAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.sugarcrmAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.sugarcrmAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.URI">Uri</label>\n                                <input type="url" name="remoteUri" ng-model="vm.sugarcrmAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.sugarcrmAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.sugarcrmAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.sugarcrmAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="sugarcrmAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="SugarcrmAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.sugarcrmAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditSugarcrmConfiguration($event)" class="md-icon-button" aria-label="create sugarcrmConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="sugarcrmConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedSugarcrmConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getSugarcrmConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ sugarcrmConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteSugarcrmConfiguration($event, sugarcrmConfiguration)" translate="INTEGRATIONS.DELETE_SUGARCRMCONFIGURATION">\n                                                        Delete SugarcrmConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditSugarcrmConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/sugarcrmAccounts/sugarcrmAccounts.html",'<div id="sugarcrmAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.SUGARCRMACCOUNTS">SugarcrmAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedSugarcrmAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedSugarcrmAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-sugarcrmAccounts-count">\n                    <span>{{vm.selectedSugarcrmAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SUGARCRMACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllSugarcrmAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectSugarcrmAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedSugarcrmAccounts" csv-label="true" filename="sugarcrmAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedSugarcrmAccounts($event)" aria-label="delete selected" translate translate-attr-label="SUGARCRMACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SUGARCRMACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedSugarcrmAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSugarcrmAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.URI\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.sugarcrmAccounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="sugarcrmAccount" md-select-id="id" ng-repeat="sugarcrmAccount in vm.sugarcrmAccounts.rows">\n                                <td md-cell ng-if="sugarcrmAccount.userpic"><img class="avatar" alt="{{sugarcrmAccount.name}}" ng-src="api/users/{{sugarcrmAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!sugarcrmAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{sugarcrmAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(sugarcrmAccount, ev) : vm.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="id ">{{sugarcrmAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(sugarcrmAccount, ev) : vm.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="name ">{{sugarcrmAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(sugarcrmAccount, ev) : vm.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="username ">{{sugarcrmAccount.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(sugarcrmAccount, ev) : vm.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="remoteUri ">{{sugarcrmAccount.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(sugarcrmAccount, $event    )" translate="INTEGRATIONS.EDIT_SUGARCRMACCOUNT">\n                                                    Edit SugarcrmAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(sugarcrmAccount, $event    )" translate="INTEGRATIONS.TEST_SUGARCRMACCOUNT">\n                                                    Test SugarcrmAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(sugarcrmAccount, $event    )" translate="INTEGRATIONS.DELETE_SUGARCRMACCOUNT">\n                                                    Delete SugarcrmAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.sugarcrmAccounts.count}}" md-on-paginate="vm.getSugarcrmAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SUGARCRMACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD SUGARCRMACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-sugarcrmAccount-button" ng-click="vm.createOrEditSugarcrmAccount($event)" aria-label="add sugarcrmAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_SUGARCRMACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD SUGARCRMACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/vtigerAccounts/create/dialog.html",'<md-dialog class="vtigerAccount-dialog" aria-label="New VtigerAccount">\n    <form name="vtigerAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.vtigerAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="vtigerAccountForm[\'name\'].$error" ng-show="vtigerAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.vtigerAccount.description">\n\n                <div ng-messages="vtigerAccountForm[\'description\'].$error" ng-show="vtigerAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.VTIGER_USER_NAME">vTiger_User_Name</label>\n                <input type="text" name="username" ng-model="vm.vtigerAccount.username" ng-required="true">\n\n                <div ng-messages="vtigerAccountForm[\'username\'].$error" ng-show="vtigerAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.VTIGER_USER_NAME_REQUIRED">vTiger_User_Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.ACCESS_KEY">Access_Key</label>\n                <input type="text" name="accessKey" ng-model="vm.vtigerAccount.accessKey" ng-required="true">\n\n                <div ng-messages="vtigerAccountForm[\'accessKey\'].$error" ng-show="vtigerAccountForm[\'accessKey\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.ACCESS_KEY_REQUIRED">Access_Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.HOST">Host</label>\n                <input type="url" name="remoteUri" ng-model="vm.vtigerAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="vtigerAccountForm[\'remoteUri\'].$error" ng-show="vtigerAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.HOST_REQUIRED">Host field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.HOST_MUST_VALID_URL">Host must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.vtigerAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="vtigerAccountForm[\'serverUrl\'].$error" ng-show="vtigerAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVtigerAccount" ng-click="vm.saveVtigerAccount()" class="send-button md-accent md-raised" ng-disabled="vtigerAccountForm.$invalid || vtigerAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVtigerAccount" ng-click="vm.addNewVtigerAccount()" class="send-button md-accent md-raised" ng-disabled="vtigerAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_VTIGERACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_VTIGERACCOUNT">\n                    ADD VTIGERACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVtigerAccount" ng-click="vm.deleteVtigerAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/vtigerAccounts/edit/configurations/dialog.html",'<md-dialog class="vtigerConfiguration-dialog" aria-label="New VtigerConfiguration">\n    <form name="vtigerConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.vtigerConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="vtigerConfigurationForm[\'name\'].$error" ng-show="vtigerConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.vtigerConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="vtigerConfigurationForm[\'channel\'].$error" ng-show="vtigerConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.vtigerConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="vtigerConfigurationForm[\'type\'].$error" ng-show="vtigerConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVtigerConfiguration" ng-click="vm.saveVtigerConfiguration()" class="send-button md-accent md-raised" ng-disabled="vtigerConfigurationForm.$invalid || vtigerConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVtigerConfiguration" ng-click="vm.addNewVtigerConfiguration()" class="send-button md-accent md-raised" ng-disabled="vtigerConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_VTIGERCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_VTIGERCONFIGURATION">\n                    ADD VTIGERCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVtigerConfiguration" ng-click="vm.deleteVtigerConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/vtigerAccounts/edit/item/dialog.html",'<md-dialog class="vtigerAccount-item-dialog" aria-label="New Item">\n    <form name="vtigerAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="vtigerAccountItemForm.type.$error" ng-show="vtigerAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="vtigerAccountItemForm.content.$error" ng-show="vtigerAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="vtigerAccountItemForm.key.$error" ng-show="vtigerAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="vtigerAccountItemForm.keyType.$error" ng-show="vtigerAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="vtigerAccountItemForm.keyContent.$error" ng-show="vtigerAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="vtigerAccountItemForm.variableName.$error" ng-show="vtigerAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="vtigerAccountItemForm.customField.$error" ng-show="vtigerAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="vtigerAccountItemForm.$invalid || vtigerAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="vtigerAccountItemForm.$invalid || vtigerAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="vtigerAccountItemForm.type.$error" ng-show="vtigerAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="vtigerAccountItemForm.option.$error"\n            ng-show="vtigerAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="vtigerAccountItemForm.content.$error"\n            ng-show="vtigerAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="vtigerAccountItemForm.variableName.$error"\n            ng-show="vtigerAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="vtigerAccountItemForm.type.$error" ng-show="vtigerAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="vtigerAccountItemForm.content.$error"\n          ng-show="vtigerAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="vtigerAccountItemForm.variableName.$error"\n          ng-show="vtigerAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/vtigerAccounts/edit/view.html",'<div id="integrations-vtigerAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-vtigerAccounts-button md-icon-button" aria-label="Go to vtigerAccounts" ng-click="vm.gotoVtigerAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_VTIGERACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="vtigerAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/vtigerAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.vtigerAccount.id}}\n                        <span ng-if="vm.vtigerAccount.name">{{vm.vtigerAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.vtigerAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveVtigerAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="vtigerAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.vtigerAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.vtigerAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.VTIGER_USER_NAME">vTiger_User_Name</label>\n                                <input type="text" name="username" ng-model="vm.vtigerAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.VTIGER_USER_NAME_REQUIRED">vTiger_User_Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.ACCESS_KEY">Access_Key</label>\n                                <input type="text" name="accessKey" ng-model="vm.vtigerAccount.accessKey" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'accessKey\'].$error" ng-show="generalForm[\'accessKey\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.ACCESS_KEY_REQUIRED">Access_Key field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.HOST">Host</label>\n                                <input type="url" name="remoteUri" ng-model="vm.vtigerAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.HOST_REQUIRED">Host field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.HOST_MUST_VALID_URL">Host must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.vtigerAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="vtigerAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="VtigerAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.vtigerAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditVtigerConfiguration($event)" class="md-icon-button" aria-label="create vtigerConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="vtigerConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedVtigerConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getVtigerConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ vtigerConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteVtigerConfiguration($event, vtigerConfiguration)" translate="INTEGRATIONS.DELETE_VTIGERCONFIGURATION">\n                                                        Delete VtigerConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditVtigerConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/vtigerAccounts/vtigerAccounts.html",'<div id="vtigerAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.VTIGERACCOUNTS">VtigerAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedVtigerAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedVtigerAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-vtigerAccounts-count">\n                    <span>{{vm.selectedVtigerAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="VTIGERACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllVtigerAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectVtigerAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedVtigerAccounts" csv-label="true" filename="vtigerAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedVtigerAccounts($event)" aria-label="delete selected" translate translate-attr-label="VTIGERACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- VTIGERACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedVtigerAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVtigerAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.VTIGER_USER_NAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.HOST\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.vtigerAccounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="vtigerAccount" md-select-id="id" ng-repeat="vtigerAccount in vm.vtigerAccounts.rows">\n                                <td md-cell ng-if="vtigerAccount.userpic"><img class="avatar" alt="{{vtigerAccount.name}}" ng-src="api/users/{{vtigerAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!vtigerAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{vtigerAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(vtigerAccount, ev) : vm.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="id ">{{vtigerAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(vtigerAccount, ev) : vm.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="name ">{{vtigerAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(vtigerAccount, ev) : vm.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="username ">{{vtigerAccount.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(vtigerAccount, ev) : vm.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="remoteUri ">{{vtigerAccount.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(vtigerAccount, $event    )" translate="INTEGRATIONS.EDIT_VTIGERACCOUNT">\n                                                    Edit VtigerAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(vtigerAccount, $event    )" translate="INTEGRATIONS.TEST_VTIGERACCOUNT">\n                                                    Test VtigerAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(vtigerAccount, $event    )" translate="INTEGRATIONS.DELETE_VTIGERACCOUNT">\n                                                    Delete VtigerAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.vtigerAccounts.count}}" md-on-paginate="vm.getVtigerAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / VTIGERACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD VTIGERACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-vtigerAccount-button" ng-click="vm.createOrEditVtigerAccount($event)" aria-label="add vtigerAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_VTIGERACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD VTIGERACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/zendeskAccounts/create/dialog.html",'<md-dialog class="zendeskAccount-dialog" aria-label="New ZendeskAccount">\n    <form name="zendeskAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.zendeskAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="zendeskAccountForm[\'name\'].$error" ng-show="zendeskAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.zendeskAccount.type" required>\n\n                    <md-option ng-value="\'integrationTab\'"> {{ \'INTEGRATIONS.INTEGRATION_TAB\' | translate }} </md-option>\n\n                    <md-option ng-value="\'newTab\'"> {{ \'INTEGRATIONS.NEW_TAB\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="zendeskAccountForm[\'type\'].$error" ng-show="zendeskAccountForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.zendeskAccount.username" ng-required="true">\n\n                <div ng-messages="zendeskAccountForm[\'username\'].$error" ng-show="zendeskAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.URI">Uri</label>\n                <input type="url" name="remoteUri" ng-model="vm.zendeskAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="zendeskAccountForm[\'remoteUri\'].$error" ng-show="zendeskAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.AUTHTYPE">AuthType</label>\n                <md-select name="authType" ng-model="vm.zendeskAccount.authType" required>\n                    <md-option ng-value="\'password\'">Password</md-option>\n                    <md-option ng-value="\'token\'">Token</md-option>\n                </md-select>\n                <div ng-messages="zendeskAccountForm[\'authType\'].$error" ng-show="zendeskAccountForm[\'authType\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.AUTHTYPE_REQUIRED">AuthType field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.zendeskAccount.authType == \'password\'">\n                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.zendeskAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                <div ng-messages="zendeskAccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container ng-if="vm.zendeskAccount.authType == \'token\'" class="md-block">\n                <label translate="INTEGRATIONS.TOKEN">Token</label>\n                <input type="text" name="token" ng-model="vm.zendeskAccount.token" ng-required="true">\n\n                <div ng-messages="zendeskAccountForm[\'token\'].$error" ng-show="zendeskAccountForm[\'token\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TOKEN_REQUIRED">Token field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.zendeskAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="zendeskAccountForm[\'serverUrl\'].$error" ng-show="zendeskAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.zendeskAccount.description">\n\n                <div ng-messages="zendeskAccountForm[\'description\'].$error" ng-show="zendeskAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newZendeskAccount" ng-click="vm.saveZendeskAccount()" class="send-button md-accent md-raised" ng-disabled="zendeskAccountForm.$invalid || zendeskAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newZendeskAccount" ng-click="vm.addNewZendeskAccount()" class="send-button md-accent md-raised" ng-disabled="zendeskAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_ZENDESKACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_ZENDESKACCOUNT">\n                    ADD ZENDESKACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newZendeskAccount" ng-click="vm.deleteZendeskAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/zendeskAccounts/edit/item/dialog.html",'<md-dialog class="zendeskAccount-item-dialog" aria-label="New Item">\n    <form name="zendeskAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="zendeskAccountItemForm.type.$error" ng-show="zendeskAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="zendeskAccountItemForm.content.$error" ng-show="zendeskAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="zendeskAccountItemForm.key.$error" ng-show="zendeskAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="zendeskAccountItemForm.keyType.$error" ng-show="zendeskAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="zendeskAccountItemForm.keyContent.$error" ng-show="zendeskAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="zendeskAccountItemForm.variableName.$error" ng-show="zendeskAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="zendeskAccountItemForm.customField.$error" ng-show="zendeskAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="zendeskAccountItemForm.$invalid || zendeskAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="zendeskAccountItemForm.$invalid || zendeskAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="zendeskAccountItemForm.type.$error" ng-show="zendeskAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="zendeskAccountItemForm.option.$error"\n            ng-show="zendeskAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="zendeskAccountItemForm.content.$error"\n            ng-show="zendeskAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="zendeskAccountItemForm.variableName.$error"\n            ng-show="zendeskAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="zendeskAccountItemForm.type.$error" ng-show="zendeskAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="zendeskAccountItemForm.content.$error"\n          ng-show="zendeskAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="zendeskAccountItemForm.variableName.$error"\n          ng-show="zendeskAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/zendeskAccounts/edit/view.html",'<div id="integrations-zendeskAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-zendeskAccounts-button md-icon-button" aria-label="Go to zendeskAccounts" ng-click="vm.gotoZendeskAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_ZENDESKACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="zendeskAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/zendeskAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.zendeskAccount.id}}\n                        <span ng-if="vm.zendeskAccount.name">{{vm.zendeskAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.zendeskAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveZendeskAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (zendeskConfigurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="zendeskAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.zendeskAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.TYPE">Type</label>\n                                <md-select name="type" ng-model="vm.zendeskAccount.type" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'integrationTab\'"> {{ \'INTEGRATIONS.INTEGRATION_TAB\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'newTab\'"> {{ \'INTEGRATIONS.NEW_TAB\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.zendeskAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.URI">Uri</label>\n                                <input type="url" name="remoteUri" ng-model="vm.zendeskAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.AUTHTYPE">AuthType</label>\n                                <md-select name="authType" ng-model="vm.zendeskAccount.authType" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'password\'">Password</md-option>\n                                    <md-option ng-value="\'token\'">Token</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'authType\'].$error" ng-show="generalForm[\'authType\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.AUTHTYPE_REQUIRED">AuthType field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block" ng-if="vm.zendeskAccount.authType == \'password\'">\n                                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.zendeskAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container ng-if="vm.zendeskAccount.authType == \'token\'" class="md-block">\n                                <label translate="INTEGRATIONS.TOKEN">Token</label>\n                                <input type="text" name="token" ng-model="vm.zendeskAccount.token" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'token\'].$error" ng-show="generalForm[\'token\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.TOKEN_REQUIRED">Token field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.zendeskAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.zendeskAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="zendeskAccount-detail-form-container zendeskconfigurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.ZENDESKCONFIGURATIONS">ZENDESKCONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="ZendeskAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.zendeskAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditZendeskConfiguration($event)" class="md-icon-button" aria-label="create zendeskConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="zendeskConfiguration in vm_cc.zendeskConfigurations" class="border-top" md-colors="{background: (vm_cc.selectedZendeskConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getZendeskConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ zendeskConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteZendeskConfiguration($event, zendeskConfiguration)" translate="INTEGRATIONS.DELETE_ZENDESKCONFIGURATION">\n                                                        Delete ZendeskConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.zendeskConfigurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.TAGS">TAGS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-table-container class="md-whiteframe-1dp padding-20">\n                                                <md-input-container class="md-block">\n                                                    <label translate="INTEGRATIONS.TAGS">Tags</label>\n                                                    <md-select ng-model="vm_cc.selectedTags" ng-change="vm_cc.selectTagsChanged($event)" multiple>\n                                                        <md-option ng-value="tag.id" ng-repeat="tag in vm_cc.tags">{{ tag.name }}</md-option>\n                                                    </md-select>\n                                                </md-input-container>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.zendeskConfigurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditZendeskConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/zendeskAccounts/edit/zendeskConfigurations/dialog.html",'<md-dialog class="zendeskConfiguration-dialog" aria-label="New ZendeskConfiguration">\n    <form name="zendeskConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.zendeskConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="zendeskConfigurationForm[\'name\'].$error" ng-show="zendeskConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.zendeskConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="zendeskConfigurationForm[\'channel\'].$error" ng-show="zendeskConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.zendeskConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="zendeskConfigurationForm[\'type\'].$error" ng-show="zendeskConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newZendeskConfiguration" ng-click="vm.saveZendeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="zendeskConfigurationForm.$invalid || zendeskConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newZendeskConfiguration" ng-click="vm.addNewZendeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="zendeskConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_ZENDESKCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_ZENDESKCONFIGURATION">\n                    ADD ZENDESKCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newZendeskConfiguration" ng-click="vm.deleteZendeskConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/zendeskAccounts/zendeskAccounts.html",'<div id="zendeskAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.ZENDESKACCOUNTS">ZendeskAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedZendeskAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedZendeskAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-zendeskAccounts-count">\n                    <span>{{vm.selectedZendeskAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="ZENDESKACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllZendeskAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectZendeskAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedZendeskAccounts" csv-label="true" filename="zendeskAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedZendeskAccounts($event)" aria-label="delete selected" translate translate-attr-label="ZENDESKACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- ZENDESKACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedZendeskAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getZendeskAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.URI\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.zendeskAccounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="zendeskAccount" md-select-id="id" ng-repeat="zendeskAccount in vm.zendeskAccounts.rows">\n                                <td md-cell ng-if="zendeskAccount.userpic"><img class="avatar" alt="{{zendeskAccount.name}}" ng-src="api/users/{{zendeskAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!zendeskAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{zendeskAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zendeskAccount, ev) : vm.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="id ">{{zendeskAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zendeskAccount, ev) : vm.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="name ">{{zendeskAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zendeskAccount, ev) : vm.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="username ">{{zendeskAccount.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zendeskAccount, ev) : vm.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="remoteUri ">{{zendeskAccount.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(zendeskAccount, $event    )" translate="INTEGRATIONS.EDIT_ZENDESKACCOUNT">\n                                                    Edit ZendeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(zendeskAccount, $event    )" translate="INTEGRATIONS.TEST_ZENDESKACCOUNT">\n                                                    Test ZendeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(zendeskAccount, $event    )" translate="INTEGRATIONS.DELETE_ZENDESKACCOUNT">\n                                                    Delete ZendeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.zendeskAccounts.count}}" md-on-paginate="vm.getZendeskAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / ZENDESKACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD ZENDESKACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-zendeskAccount-button" ng-click="vm.createOrEditZendeskAccount($event)" aria-label="add zendeskAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_ZENDESKACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD ZENDESKACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/zohoAccounts/create/dialog.html",'<md-dialog class="zohoAccount-dialog" aria-label="New ZohoAccount">\n    <form name="zohoAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.zohoAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="zohoAccountForm[\'name\'].$error" ng-show="zohoAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.HOST">Host</label>\n                <md-select name="host" ng-model="vm.zohoAccount.host" required>\n                    <md-option ng-value="\'zoho.com\'">zoho.com</md-option>\n                    <md-option ng-value="\'zoho.eu\'">zoho.eu</md-option>\n                </md-select>\n                <div ng-messages="zohoAccountForm[\'host\'].$error" ng-show="zohoAccountForm[\'host\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.HOST_REQUIRED">Host field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.AUTHTOKEN">AuthToken</label>\n                <input type="text" name="authToken" ng-model="vm.zohoAccount.authToken" ng-required="true">\n\n                <div ng-messages="zohoAccountForm[\'authToken\'].$error" ng-show="zohoAccountForm[\'authToken\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.AUTHTOKEN_REQUIRED">AuthToken field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.zohoAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="zohoAccountForm[\'serverUrl\'].$error" ng-show="zohoAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.zohoAccount.description">\n\n                <div ng-messages="zohoAccountForm[\'description\'].$error" ng-show="zohoAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newZohoAccount" ng-click="vm.saveZohoAccount()" class="send-button md-accent md-raised" ng-disabled="zohoAccountForm.$invalid || zohoAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newZohoAccount" ng-click="vm.addNewZohoAccount()" class="send-button md-accent md-raised" ng-disabled="zohoAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_ZOHOACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_ZOHOACCOUNT">\n                    ADD ZOHOACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newZohoAccount" ng-click="vm.deleteZohoAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/zohoAccounts/edit/configurations/dialog.html",'<md-dialog class="zohoConfiguration-dialog" aria-label="New ZohoConfiguration">\n    <form name="zohoConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.zohoConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="zohoConfigurationForm[\'name\'].$error" ng-show="zohoConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.zohoConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="zohoConfigurationForm[\'channel\'].$error" ng-show="zohoConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.zohoConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="zohoConfigurationForm[\'type\'].$error" ng-show="zohoConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newZohoConfiguration" ng-click="vm.saveZohoConfiguration()" class="send-button md-accent md-raised" ng-disabled="zohoConfigurationForm.$invalid || zohoConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newZohoConfiguration" ng-click="vm.addNewZohoConfiguration()" class="send-button md-accent md-raised" ng-disabled="zohoConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_ZOHOCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_ZOHOCONFIGURATION">\n                    ADD ZOHOCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newZohoConfiguration" ng-click="vm.deleteZohoConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/zohoAccounts/edit/item/dialog.html",'<md-dialog class="zohoAccount-item-dialog" aria-label="New Item">\n    <form name="zohoAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="zohoAccountItemForm.type.$error" ng-show="zohoAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="zohoAccountItemForm.content.$error" ng-show="zohoAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="zohoAccountItemForm.key.$error" ng-show="zohoAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="zohoAccountItemForm.keyType.$error" ng-show="zohoAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="zohoAccountItemForm.keyContent.$error" ng-show="zohoAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="zohoAccountItemForm.variableName.$error" ng-show="zohoAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="zohoAccountItemForm.customField.$error" ng-show="zohoAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="zohoAccountItemForm.$invalid || zohoAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="zohoAccountItemForm.$invalid || zohoAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="zohoAccountItemForm.type.$error" ng-show="zohoAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="zohoAccountItemForm.option.$error"\n            ng-show="zohoAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="zohoAccountItemForm.content.$error"\n            ng-show="zohoAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="zohoAccountItemForm.variableName.$error"\n            ng-show="zohoAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="zohoAccountItemForm.type.$error" ng-show="zohoAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="zohoAccountItemForm.content.$error"\n          ng-show="zohoAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="zohoAccountItemForm.variableName.$error"\n          ng-show="zohoAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/zohoAccounts/edit/view.html",'<div id="integrations-zohoAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-zohoAccounts-button md-icon-button" aria-label="Go to zohoAccounts" ng-click="vm.gotoZohoAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_ZOHOACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="zohoAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/zohoAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.zohoAccount.id}}\n                        <span ng-if="vm.zohoAccount.name">{{vm.zohoAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.zohoAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveZohoAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="zohoAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.zohoAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.HOST">Host</label>\n                                <md-select name="host" ng-model="vm.zohoAccount.host" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'zoho.com\'">zoho.com</md-option>\n                                    <md-option ng-value="\'zoho.eu\'">zoho.eu</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'host\'].$error" ng-show="generalForm[\'host\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.HOST_REQUIRED">Host field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.AUTHTOKEN">AuthToken</label>\n                                <input type="text" name="authToken" ng-model="vm.zohoAccount.authToken" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'authToken\'].$error" ng-show="generalForm[\'authToken\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.AUTHTOKEN_REQUIRED">AuthToken field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.zohoAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.zohoAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="zohoAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="ZohoAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.zohoAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditZohoConfiguration($event)" class="md-icon-button" aria-label="create zohoConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="zohoConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedZohoConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getZohoConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ zohoConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteZohoConfiguration($event, zohoConfiguration)" translate="INTEGRATIONS.DELETE_ZOHOCONFIGURATION">\n                                                        Delete ZohoConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditZohoConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/zohoAccounts/zohoAccounts.html",'<div id="zohoAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.ZOHOACCOUNTS">ZohoAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedZohoAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedZohoAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-zohoAccounts-count">\n                    <span>{{vm.selectedZohoAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="ZOHOACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllZohoAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectZohoAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedZohoAccounts" csv-label="true" filename="zohoAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedZohoAccounts($event)" aria-label="delete selected" translate translate-attr-label="ZOHOACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- ZOHOACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedZohoAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getZohoAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="host">{{ \'INTEGRATIONS.HOST\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.zohoAccounts.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="zohoAccount" md-select-id="id" ng-repeat="zohoAccount in vm.zohoAccounts.rows">\n                                <td md-cell ng-if="zohoAccount.userpic"><img class="avatar" alt="{{zohoAccount.name}}" ng-src="api/users/{{zohoAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!zohoAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{zohoAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zohoAccount, ev) : vm.createOrEditZohoAccount($event, zohoAccount)" md-cell class="id ">{{zohoAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zohoAccount, ev) : vm.createOrEditZohoAccount($event, zohoAccount)" md-cell class="name ">{{zohoAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zohoAccount, ev) : vm.createOrEditZohoAccount($event, zohoAccount)" md-cell class="host ">{{ vm.arrayhost[zohoAccount.host].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(zohoAccount, $event    )" translate="INTEGRATIONS.EDIT_ZOHOACCOUNT">\n                                                    Edit ZohoAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(zohoAccount, $event    )" translate="INTEGRATIONS.TEST_ZOHOACCOUNT">\n                                                    Test ZohoAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(zohoAccount, $event    )" translate="INTEGRATIONS.DELETE_ZOHOACCOUNT">\n                                                    Delete ZohoAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.zohoAccounts.count}}" md-on-paginate="vm.getZohoAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / ZOHOACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD ZOHOACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-zohoAccount-button" ng-click="vm.createOrEditZohoAccount($event)" aria-label="add zohoAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_ZOHOACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD ZOHOACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/jscripty/views/projects/create/dialog.html",'<md-dialog class="project-dialog" aria-label="New Project">\n    <form name="projectForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="JSCRIPTY.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.project.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newProject">\n\n                <div class="hint"><span translate="JSCRIPTY.HELP.NAME"></span></div>\n                <div ng-messages="projectForm[\'name\'].$error" ng-show="projectForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="JSCRIPTY.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="JSCRIPTY.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="JSCRIPTY.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.project.description">\n\n                <div ng-messages="projectForm[\'description\'].$error" ng-show="projectForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="JSCRIPTY.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newProject" ng-click="vm.saveProject()" class="send-button md-accent md-raised" ng-disabled="projectForm.$invalid || projectForm.$pristine" aria-label="SAVE" translate="JSCRIPTY.SAVE" translate-attr-aria-label="JSCRIPTY.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newProject" ng-click="vm.addNewProject()" class="send-button md-accent md-raised" ng-disabled="projectForm.$invalid" aria-label="ADD" translate="JSCRIPTY.ADD_PROJECT" translate-attr-aria-label="JSCRIPTY.ADD_PROJECT">\n                    ADD PROJECT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newProject" ng-click="vm.deleteProject($event)" aria-label="DELETE" translate translate-attr-aria-label="JSCRIPTY.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="JSCRIPTY.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/jscripty/views/projects/edit/clone/clone.html",'<md-dialog class="project-dialog" aria-label="Clone Project">\n    <form name="projectForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="JSCRIPTY.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.project.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newProject">\n\n                <div class="hint"><span translate="JSCRIPTY.HELP.NAME"></span></div>\n                <div ng-messages="projectForm[\'name\'].$error" ng-show="projectForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="JSCRIPTY.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="JSCRIPTY.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <md-button type="submit" ng-click="vm.cloneProject()" class="send-button md-accent md-raised" ng-disabled="projectForm.$invalid" aria-label="CLONE" translate="JSCRIPTY.CLONE_PROJECT" translate-attr-aria-label="JSCRIPTY.CLONE_PROJECT">\n                CLONE PROJECT\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/jscripty/views/projects/edit/sessions/dialog.html",'<md-dialog class="session-dialog" aria-label="New Session">\n    <form name="sessionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <md-list>\n                <md-subheader class="md-no-sticky">\n                    <div class="margin-bottom-5"><span translate="JSCRIPTY.ANSWERS">Answers</span></div>\n                    <div class="subtitle secondary-text">\n                        <span translate="JSCRIPTY.STARTTIME" class="ng-scope font-weight-700">Start Time</span>: <span class="ng-binding">{{vm.session.starttime | date:\'medium\'}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="JSCRIPTY.MEMBERNAME" class="ng-scope font-weight-700">Member Name</span>: <span class="ng-binding">{{vm.session.membername}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="JSCRIPTY.PROJECT" class="ng-scope font-weight-700">Project</span>: <span class="ng-binding">{{vm.project.name}}</span>\n                    </div>\n                </md-subheader>\n                <md-list-item ng-if="vm.questions.rows.length" class="md-2-line contact-item" ng-repeat="question in vm.questions.rows">\n                    <div class="md-list-item-text compact">\n                        <h3>{{$index+1}}. {{question.question}}</h3>\n                        <p>{{question.answer}}</p>\n                    </div>\n                    <md-divider ng-if="!$last"></md-divider>\n                </md-list-item>\n                <md-list-item ng-if="!vm.questions.rows.length" class="md-2-line contact-item">\n                    <div class="md-list-item-text compact">\n                        <h3><span class="text-boxed-ligth" translate="JSCRIPTY.NO_RESULTS_AVAILABLE">No results available</span></h3>\n                    </div>\n                </md-list-item>\n            </md-list>\n\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/jscripty/views/projects/edit/view.html",'<div id="jscripty-project" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-projects-button md-icon-button" aria-label="Go to projects" ng-click="vm.gotoProjects()" translate translate-attr-aria-label="JSCRIPTY.GO_TO_PROJECTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="project-image" hide-xs>\n                    <img ng-src="assets/images/business/projects.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.project.id}}\n                        <span ng-if="vm.project.name">{{vm.project.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="JSCRIPTY.CREATED_AT"></span> <span>{{vm.project.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.clonedialog(vm.project, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="clone">\n                <md-tooltip><span translate="JSCRIPTY.CLONE_PROJECT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveProject()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (builderForm.$invalid) || (previewForm.$invalid) || (sessionsForm.$invalid) || (answersForm.$invalid)" translate="JSCRIPTY.SAVE" translate-attr-aria-label="JSCRIPTY.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="JSCRIPTY.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="project-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="JSCRIPTY.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="JSCRIPTY.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.project.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="JSCRIPTY.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="JSCRIPTY.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="JSCRIPTY.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.project.enableUncompleteSave" aria-label="EnableUncompleteSave" ng-disabled="!vm.crudPermissions.canEdit"><span translate="JSCRIPTY.ENABLEUNCOMPLETESAVE">EnableUncompleteSave</span></md-switch>\n\n                                <div class="hint"><span translate="JSCRIPTY.HELP.ENABLEUNCOMPLETESAVE"></span></div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="JSCRIPTY.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.project.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="JSCRIPTY.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="JSCRIPTY.BUILDER">BUILDER</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="project-detail-form-container builder md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ProjectBuilderController as vm_bc" ng-init="vm_bc.init(vm.project)">\n                            <mw-form-builder ng-if="vm_bc.project.formData" form-data="vm_bc.project.formData" options="vm_bc.optionsBuilder" read-only="false"></mw-form-builder>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="JSCRIPTY.PREVIEW">PREVIEW</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="project-detail-form-container preview md-background-bg md-whiteframe-1dp">\n                        <div layout="column" layout-align="center" ng-controller="ProjectViewerController as vm_vc" ng-init="vm_vc.init(vm.project)">\n                            <div layout="row" layout-align="center">\n                                <md-button class="md-raised md-accent" aria-label="Reset" ng-click="vm_vc.resetViewer()">\n                                    Reset\n                                </md-button>\n                            </div>\n                            <mw-form-viewer ng-if="vm_vc.project.formData" form-data="vm_vc.project.formData" response-data="vm_vc.responseData" on-submit="vm_vc.onSubmit($event)" api="vm_vc.formViewer"></mw-form-viewer>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="JSCRIPTY.SESSIONS">SESSIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="project-detail-form-container sessions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ProjectSessionsController as vm_dc" ng-init="vm_dc.init(vm.project, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedProjectSessions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="JSCRIPTY.SESSIONS">Sessions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedProjectSessions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedProjectSessions.length}} {{vm_dc.selectedProjectSessions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedProjectSessions" csv-label="true" filename="projects.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedProjectSessions($event)" aria-label="delete selected" translate translate-attr-label="PROJECTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedProjectSessions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getProjectSessions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'JSCRIPTY.ID\' | translate }}</th>\n                                            <th md-column md-order-by="starttime">{{ \'JSCRIPTY.STARTTIME\' | translate }}</th>\n                                            <th md-column md-order-by="endtime">{{ \'JSCRIPTY.ENDTIME\' | translate }}</th>\n                                            <th md-column md-order-by="membername">{{ \'JSCRIPTY.MEMBERNAME\' | translate }}</th>\n                                            <th md-column md-order-by="calleridnum">{{ \'JSCRIPTY.CALLERIDNUM\' | translate }}</th>\n                                            <th md-column md-order-by="completed">{{ \'JSCRIPTY.COMPLETE\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="session" md-select-id="id" ng-repeat="session in vm_dc.projectSessions.rows">\n                                            <td md-cell>{{session.id}}</td>\n                                            <td md-cell>{{session.starttime | date:\'medium\'}}</td>\n                                            <td md-cell>{{session.endtime | date:\'medium\'}}</td>\n                                            <td md-cell>{{session.membername}}</td>\n                                            <td md-cell>{{session.calleridnum}}</td>\n                                            <td md-cell class="completed ">\n                                                <md-icon md-colors="{color: {{session.completed ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{session.completed? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                            </td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="JSCRIPTY.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_dc.showQuestionsProjectSession($event, session)" translate="JSCRIPTY.SHOW_QUESTIONS_SESSION">\n                                                                Results Session\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(session, $event)" translate="JSCRIPTY.DELETE_SESSION">\n                                                                Delete Session\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.projectSessions.rows.length">\n                                            <td md-cell colspan="8">\n                                                <span class="text-boxed-ligth" translate="JSCRIPTY.NO_SESSION_AVAILABLE">No session available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'JSCRIPTY.PAGE\' | translate}}:\', rowsPerPage: \'{{\'JSCRIPTY.ROWSPERPAGE\' | translate}}:\', of: \'{{\'JSCRIPTY.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.projectSessions.count}}" md-on-paginate="vm_dc.getProjectSessions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="JSCRIPTY.ANSWERS">ANSWERS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="project-detail-form-container answers md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ProjectAnswersController as vm_an" ng-init="vm_an.init(vm.project)">\n                            <div class="pb-16" layout="row" layout-align="space-between center">\n                                <div class="h2 secondary-text" translate="JSCRIPTY.ANSWERS">Answers</div>\n                                <md-date-range localization-map="vm_an.localizationMap" ng-model="vm_an.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm_an.getAnswers()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                                <md-button type="button" ng-disabled="!vm_an.answers" ng-click="vm_an.getSummary($event)" class="md-accent md-raised md-button ng-scope md-default-theme md-ink-ripple md-green-500-bg md-icon-button" title="{{\'JSCRIPTY.EXPORT_TO_CSV\' | translate}}">\n                                    <md-icon md-font-icon="icon-file-excel" class="md-default-theme md-font material-icons icon-file-excel"></md-icon>\n                                </md-button>\n                            </div>\n                            <div layout="row">\n                                <md-card class="md-whiteframe-1dp" ng-if="vm_an.answers && vm_an.hasIdAnswers" flex>\n                                    <md-list>\n                                        <md-list-item class="md-2-line contact-item" ng-repeat="(key, question) in vm_an.answers">\n                                            <div class="md-list-item-text compact" layout-padding>\n                                                <h3>{{question.question}}</h3>\n                                                <md-table-container>\n                                                    <table md-table>\n                                                        <thead md-head>\n                                                            <tr md-row>\n                                                                <th md-column></th>\n                                                                <th md-column>#</th>\n                                                                <th md-column>%</th>\n                                                            </tr>\n                                                        </thead>\n                                                        <tbody md-body>\n                                                            <tr md-row ng-repeat="(key, value) in question.answers">\n                                                                <td md-cell>{{key}}</td>\n                                                                <td md-cell width="20px">{{value}}</td>\n                                                                <td md-cell width="20px">{{value*100/question.sum | number:1}}</td>\n                                                            </tr>\n                                                            <tr md-row>\n                                                                <td md-cell><b>{{\'JSCRIPTY.TOTAL\' | translate}}</b></td>\n                                                                <td md-cell width="20px"><b>{{question.sum}}</b></td>\n                                                                <td md-cell width="20px"><b>100</b></td>\n                                                            </tr>\n                                                        </tbody>\n                                                    </table>\n                                                </md-table-container>\n                                            </div>\n                                            <md-divider ng-if="!$last"></md-divider>\n                                        </md-list-item>\n                                    </md-list>\n                                </md-card>\n                                <span ng-if="!vm_an.answers || !vm_an.hasIdAnswers" class="text-boxed-ligth" translate="JSCRIPTY.NO_ANSWERS_AVAILABLE">No answers available</span>\n                            </div>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/jscripty/views/projects/projects.html",'<div id="projects" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-script" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="JSCRIPTY.PROJECTS">Projects</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="JSCRIPTY.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedProjects.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedProjects =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="JSCRIPTY.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-projects-count">\n                    <span>{{vm.selectedProjects.length}}</span>\n                    <span translate="JSCRIPTY.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="PROJECTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllProjects()" translate="JSCRIPTY.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectProjects()" translate="JSCRIPTY.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedProjects" csv-label="true" filename="projects.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedProjects($event)" aria-label="delete selected" translate translate-attr-label="PROJECTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- PROJECT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedProjects" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getProjects">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'JSCRIPTY.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'JSCRIPTY.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'JSCRIPTY.DESCRIPTION\' | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ \'JSCRIPTY.CREATED_AT\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.projects.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="JSCRIPTY.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="project" md-select-id="id" ng-repeat="project in vm.projects.rows">\n                                <td md-cell ng-if="project.userpic"><img class="avatar" alt="{{project.name}}" ng-src="api/users/{{project.id}}/avatar" /></td>\n                                <td md-cell ng-if="!project.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{project.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="id ">{{project.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="name ">{{project.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="description ">{{project.description}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="createdAt ">{{project.createdAt | date:\'medium\' }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="JSCRIPTY.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(project, $event    )" translate="JSCRIPTY.EDIT_PROJECT">\n                                                    Edit Project\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.clonedialog(project, $event    )" translate="JSCRIPTY.CLONE_PROJECT">\n                                                    clone Project\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.sessionsgoto(project, $event    )" translate="JSCRIPTY.SESSIONS_PROJECT">\n                                                    Sessions Project\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(project, $event    )" translate="JSCRIPTY.DELETE_PROJECT">\n                                                    Delete Project\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'JSCRIPTY.PAGE\' | translate}}:\', rowsPerPage: \'{{\'JSCRIPTY.ROWSPERPAGE\' | translate}}:\', of: \'{{\'JSCRIPTY.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.projects.count}}" md-on-paginate="vm.getProjects" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / PROJECT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD PROJECT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-project-button" ng-click="vm.createOrEditProject($event)" aria-label="add project" translate translate-attr-aria-label="JSCRIPTY.ADD_PROJECT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD PROJECT BUTTON --\x3e\n</div>'),e.put("app/main/apps/mail/views/mailAccounts/create/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.mailAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="mailAccountForm[\'name\'].$error" ng-show="mailAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.KEY">key</label>\n                <input type="text" name="key" ng-model="vm.mailAccount.key" md-maxlength="5" ng-required="true">\n\n                <div ng-messages="mailAccountForm[\'key\'].$error" ng-show="mailAccountForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.KEY_REQUIRED">key field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="MAIL.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.EMAIL_ADDRESS">Email_Address</label>\n                <input type="email" name="email" ng-model="vm.mailAccount.email" ng-required="true">\n\n                <div ng-messages="mailAccountForm[\'email\'].$error" ng-show="mailAccountForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.EMAIL_ADDRESS_REQUIRED">Email_Address field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="MAIL.ERRORS.EMAIL_ADDRESS_MUST_VALID">Email_Address must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.LIST">List</label>\n                <md-select name="ListId" ng-model="vm.mailAccount.ListId" required>\n                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                </md-select>\n                <div ng-messages="mailAccountForm[\'ListId\'].$error" ng-show="mailAccountForm[\'ListId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.mailAccount.active" aria-label="Active"><span translate="MAIL.ACTIVE">Active</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.newMailAccount" class="md-block">\n                <label translate="MAIL.SERVICE">Service</label>\n                <md-select name="cservice" ng-model="vm.mailAccount.cservice" required>\n                    <md-option ng-value="null">Custom</md-option>\n                    <md-option ng-value="\'gmail\'">Gmail</md-option>\n                    <md-option ng-value="\'hotmail\'">Hotmail</md-option>\n                    <md-option ng-value="\'yahoo\'">Yahoo</md-option>\n                    <md-option ng-value="\'outlook365\'">Outlook365</md-option>\n                </md-select>\n                <div ng-messages="mailAccountForm[\'cservice\'].$error" ng-show="mailAccountForm[\'cservice\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.SERVICE_REQUIRED">Service field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Imap.service == null)" class="md-block">\n                <label translate="MAIL.IMAP_HOST">IMAP_Host</label>\n                <input type="text" name="Imap.host" ng-model="vm.mailAccount.Imap.host" ng-required="true">\n\n                <div ng-messages="mailAccountForm[\'Imap.host\'].$error" ng-show="mailAccountForm[\'Imap.host\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.IMAP_HOST_REQUIRED">IMAP_Host field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Imap.service == null)" class="md-block">\n                <label translate="MAIL.IMAP_PORT">IMAP_Port</label>\n                <input type="number" name="Imap.port" ng-model="vm.mailAccount.Imap.port" ng-required="true">\n\n                <div ng-messages="mailAccountForm[\'Imap.port\'].$error" ng-show="mailAccountForm[\'Imap.port\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.IMAP_PORT_REQUIRED">IMAP_Port field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Smtp.service == null)" class="md-block">\n                <label translate="MAIL.SMTP_HOST">SMTP_Host</label>\n                <input type="text" name="Smtp.host" ng-model="vm.mailAccount.Smtp.host" ng-required="true">\n\n                <div ng-messages="mailAccountForm[\'Smtp.host\'].$error" ng-show="mailAccountForm[\'Smtp.host\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.SMTP_HOST_REQUIRED">SMTP_Host field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Smtp.service == null)" class="md-block">\n                <label translate="MAIL.SMTP_PORT">SMTP_Port</label>\n                <input type="number" name="Smtp.port" ng-model="vm.mailAccount.Smtp.port" ng-required="true">\n\n                <div ng-messages="mailAccountForm[\'Smtp.port\'].$error" ng-show="mailAccountForm[\'Smtp.port\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.SMTP_PORT_REQUIRED">SMTP_Port field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.mailAccount.cservice !== undefined && vm.mailAccount.cservice == null && vm.newMailAccount" class="md-block">\n                <md-switch ng-model="vm.mailAccount.cauthentication" aria-label="Authentication"><span translate="MAIL.AUTHENTICATION">Authentication</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="(vm.mailAccount.cauthentication == true || vm.mailAccount.cservice != null) && vm.newMailAccount" class="md-block">\n                <label translate="MAIL.USERNAME">Username</label>\n                <input type="text" name="cuser" ng-model="vm.mailAccount.cuser" ng-required="true">\n\n                <div class="hint"><span translate="MAIL.HELP.USERNAME"></span></div>\n                <div ng-messages="mailAccountForm[\'cuser\'].$error" ng-show="mailAccountForm[\'cuser\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="(vm.mailAccount.cauthentication == true || vm.mailAccount.cservice != null) && vm.newMailAccount">\n                <label translate="MAIL.PASSWORD">Password</label>\n                <input type="password" name="cpassword" ng-model="vm.mailAccount.cpassword" placeholder="Password" translate translate-attr-placeholder="MAIL.PASSWORD" required>\n                <div class="hint"><span translate="MAIL.HELP.PASSWORD"></span></div>\n                <div ng-messages="mailAccountForm[\'cpassword\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="MAIL.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="MAIL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.mailAccount.description">\n\n                <div ng-messages="mailAccountForm[\'description\'].$error" ng-show="mailAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMailAccount" ng-click="vm.saveMailAccount()" class="send-button md-accent md-raised" ng-disabled="mailAccountForm.$invalid || mailAccountForm.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMailAccount" ng-click="vm.addNewMailAccount()" class="send-button md-accent md-raised" ng-disabled="mailAccountForm.$invalid" aria-label="ADD" translate="MAIL.ADD_MAILACCOUNT" translate-attr-aria-label="MAIL.ADD_MAILACCOUNT">\n                    ADD MAILACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMailAccount" ng-click="vm.deleteMailAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="MAIL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MAIL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/agentadd/agentadd.html",'<md-dialog class="mailAccount-dialog" aria-label="mailAccount" ng-init="vm.onInit()">\n    <form name="mailAccountForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MAIL.AGENTADD_MAILACCOUNT">Add Agent to mailAccount</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/agent/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.AGENT">Agent</label>\n                <md-select name="agent" ng-model="vm.agent.agent" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents" ng-disabled="agent.canSelect === false">{{ agent.name }}</md-option>\n                </md-select>\n                <div ng-messages="mailAccountFormApp[\'agent\'].$error" ng-show="mailAccountFormApp[\'agent\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.agent.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'timeout\'].$error" ng-show="mailAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MAIL.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MAIL.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/autoreply/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.TIMES">times</label>\n                <md-select name="times" ng-model="vm.autoreply.times" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="1">One Time</md-option>\n                    <md-option ng-value="0">Always</md-option>\n                </md-select>\n                <div ng-messages="mailAccountFormApp[\'times\'].$error" ng-show="mailAccountFormApp[\'times\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.TIMES_REQUIRED">times field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="md-block">\n                <label class="md-caption grey-fg" translate="MAIL.TEXT">Text</label>\n                <textarea aria-label="Text text" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.autoreply.text"></textarea>\n            </div>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/close/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.DISPOSITION">Disposition</label>\n                <input type="text" name="disposition" ng-model="vm.close.disposition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'disposition\'].$error" ng-show="mailAccountFormApp[\'disposition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.DISPOSITION_REQUIRED">Disposition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/gotoif/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.CONDITION">Condition</label>\n                <input type="text" name="condition" ng-model="vm.gotoif.condition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'condition\'].$error" ng-show="mailAccountFormApp[\'condition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.CONDITION_REQUIRED">Condition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.TRUEPRIORITY">truepriority</label>\n                <input type="number" name="truepriority" ng-model="vm.gotoif.truepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'truepriority\'].$error" ng-show="mailAccountFormApp[\'truepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.TRUEPRIORITY_REQUIRED">truepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MAIL.ERRORS.TRUEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">truepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.FALSEPRIORITY">falsepriority</label>\n                <input type="number" name="falsepriority" ng-model="vm.gotoif.falsepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'falsepriority\'].$error" ng-show="mailAccountFormApp[\'falsepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.FALSEPRIORITY_REQUIRED">falsepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MAIL.ERRORS.FALSEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">falsepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/gotop/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.PRIORITY">Priority</label>\n                <input type="number" name="priority" ng-model="vm.gotop.priority" min="0" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'priority\'].$error" ng-show="mailAccountFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MAIL.ERRORS.PRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Priority must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/noop/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.noop.value" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'value\'].$error" ng-show="mailAccountFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/queue/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="mailAccountFormApp[\'queue\'].$error" ng-show="mailAccountFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'timeout\'].$error" ng-show="mailAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MAIL.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MAIL.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/system/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.COMMAND">Command</label>\n                <input type="text" name="command" ng-model="vm.system.command" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'command\'].$error" ng-show="mailAccountFormApp[\'command\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.COMMAND_REQUIRED">Command field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.VARIABLE">Variable</label>\n                <md-select name="variable" ng-model="vm.system.variable" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables" ng-disabled="variable.canSelect === false">{{ variable.name }}</md-option>\n                </md-select>\n                <div ng-messages="mailAccountFormApp[\'variable\'].$error" ng-show="mailAccountFormApp[\'variable\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/tag/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.TAG">Tag</label>\n                <md-select name="tag" ng-model="vm.tag.tag" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags" ng-disabled="tag.canSelect === false">{{ tag.name }}</md-option>\n                </md-select>\n                <div ng-messages="mailAccountFormApp[\'tag\'].$error" ng-show="mailAccountFormApp[\'tag\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.TAG_REQUIRED">Tag field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/mailCannedAnswers/dialog.html",'<md-dialog class="mailCannedAnswer-dialog" aria-label="New MailCannedAnswer">\n    <form name="mailCannedAnswerForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.KEY">Key</label>\n                <input type="" name="key" ng-model="vm.mailCannedAnswer.key" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="mailCannedAnswerForm[\'key\'].$error" ng-show="mailCannedAnswerForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="md-block">\n                <label class="md-caption grey-fg" translate="MAIL.VALUE">Value</label>\n                <textarea aria-label="Value value" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.mailCannedAnswer.value"></textarea>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.mailCannedAnswer.description">\n\n                <div ng-messages="mailCannedAnswerForm[\'description\'].$error" ng-show="mailCannedAnswerForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMailCannedAnswer" ng-click="vm.saveMailCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="mailCannedAnswerForm.$invalid || mailCannedAnswerForm.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMailCannedAnswer" ng-click="vm.addNewMailCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="mailCannedAnswerForm.$invalid" aria-label="ADD" translate="MAIL.ADD_MAILCANNEDANSWER" translate-attr-aria-label="MAIL.ADD_MAILCANNEDANSWER">\n                    ADD MAILCANNEDANSWER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMailCannedAnswer" ng-click="vm.deleteMailCannedAnswer($event)" aria-label="DELETE" translate translate-attr-aria-label="MAIL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MAIL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/mailDispositions/dialog.html",'<md-dialog class="mailDisposition-dialog" aria-label="New MailDisposition">\n    <form name="mailDispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.mailDisposition.name" ng-required="true" autofocus>\n\n                <div ng-messages="mailDispositionForm[\'name\'].$error" ng-show="mailDispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMailDisposition" ng-click="vm.saveMailDisposition()" class="send-button md-accent md-raised" ng-disabled="mailDispositionForm.$invalid || mailDispositionForm.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMailDisposition" ng-click="vm.addNewMailDisposition()" class="send-button md-accent md-raised" ng-disabled="mailDispositionForm.$invalid" aria-label="ADD" translate="MAIL.ADD_MAILDISPOSITION" translate-attr-aria-label="MAIL.ADD_MAILDISPOSITION">\n                    ADD MAILDISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMailDisposition" ng-click="vm.deleteMailDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="MAIL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MAIL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/view.html",'<div id="mail-mailAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-mailAccounts-button md-icon-button" aria-label="Go to mailAccounts" ng-click="vm.gotoMailAccounts()" translate translate-attr-aria-label="MAIL.GO_TO_MAILACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="mailAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/mailAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.mailAccount.id}}\n                        <span ng-if="vm.mailAccount.name">{{vm.mailAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="MAIL.CREATED_AT"></span> <span>{{vm.mailAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.mailAccount, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="MAIL.GOTO_MAILACCOUNT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-cast"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.mailAccount, $event)" class="md-fab md-warn md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="MAIL.AGENTADD_MAILACCOUNT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveMailAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (imapForm.$invalid) || (smtpForm.$invalid) || (dispositionForm.$invalid) || (mailDispositionsForm.$invalid) || (mailCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.mailAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.KEY">key</label>\n                                <input type="text" name="key" ng-model="vm.mailAccount.key" md-maxlength="5" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'key\'].$error" ng-show="generalForm[\'key\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.KEY_REQUIRED">key field is required</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="MAIL.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.EMAIL_ADDRESS">Email_Address</label>\n                                <input type="email" name="email" ng-model="vm.mailAccount.email" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'email\'].$error" ng-show="generalForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.EMAIL_ADDRESS_REQUIRED">Email_Address field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="MAIL.ERRORS.EMAIL_ADDRESS_MUST_VALID">Email_Address must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.LIST">List</label>\n                                <md-select name="ListId" ng-model="vm.mailAccount.ListId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'ListId\'].$error" ng-show="generalForm[\'ListId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.LIST_REQUIRED">List field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.active" aria-label="Active" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.ACTIVE">Active</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.FONT_FAMILY">Font_Family</label>\n                                <ms-font-family name="fontFamily" ng-model="vm.mailAccount.fontFamily" required></ms-font-family>\n                                <div class="hint"><span translate="MAIL.HELP.FONT_FAMILY"></span></div>\n                                <div ng-messages="generalForm[\'fontFamily\'].$error" ng-show="generalForm[fontFamily].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.FONT_FAMILY_REQUIRED">Font_Family field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.FONT_SIZE">Font_Size</label>\n                                <input type="number" name="fontSize" ng-model="vm.mailAccount.fontSize" min="8" max="72" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MAIL.HELP.FONT_SIZE"></span></div>\n                                <div ng-messages="generalForm[\'fontSize\'].$error" ng-show="generalForm[\'fontSize\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.FONT_SIZE_REQUIRED">Font_Size field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.FONT_SIZE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Font_Size must be a valid greater or equal than</span> <span>8</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MAIL.ERRORS.FONT_SIZE_MUST_BE_LESS_THAN_OR_EQUAL_TO">Font_Size must be a valid greater or equal than</span> <span>72</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <div class="md-block">\n                                <label class="md-caption grey-fg" translate="MAIL.TEMPLATE">Template</label>\n                                <textarea aria-label="Template template" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.mailAccount.template"></textarea>\n                            </div>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.markAsUnread" aria-label="mark_as_unread" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.MARK_AS_UNREAD">mark_as_unread</span></md-switch>\n\n                                <div class="hint"><span translate="MAIL.HELP.MARK_AS_UNREAD"></span></div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.WAITFORTHEASSIGNEDAGENT">WaitForTheAssignedAgent</label>\n                                <input type="number" name="waitForTheAssignedAgent" ng-model="vm.mailAccount.waitForTheAssignedAgent" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'waitForTheAssignedAgent\'].$error" ng-show="generalForm[\'waitForTheAssignedAgent\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.WAITFORTHEASSIGNEDAGENT_REQUIRED">WaitForTheAssignedAgent field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MAIL.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_LESS_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.mailAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="mailAccount-detail-form-container notification md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.NOTIFICATION">NOTIFICATION</div>\n                        </div>\n                        <form name="notificationForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.notificationSound" aria-label="notificationSound" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.NOTIFICATIONSOUND">notificationSound</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.notificationShake" aria-label="notificationShake" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.NOTIFICATIONSHAKE">notificationShake</span></md-switch>\n\n                            </md-input-container>\n                            <div class="md-block">\n                                <label class="md-caption grey-fg" translate="MAIL.NOTIFICATIONTEMPLATE">notificationTemplate</label>\n                                <textarea aria-label="notificationTemplate notificationTemplate" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.mailAccount.notificationTemplate"></textarea>\n                            </div>\n\n                        </form>\n                    </div>\n                    <div class="mailAccount-detail-form-container transfer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.TRANSFER">TRANSFER</div>\n                        </div>\n                        <form name="transferForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.queueTransfer" aria-label="queueTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.QUEUETRANSFER">queueTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.queueTransfer == true" class="md-block">\n                                <label translate="MAIL.QUEUETRANSFERTIMEOUT">queueTransferTimeout</label>\n                                <input type="number" name="queueTransferTimeout" ng-model="vm.mailAccount.queueTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'queueTransferTimeout\'].$error" ng-show="transferForm[\'queueTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.QUEUETRANSFERTIMEOUT_REQUIRED">queueTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MAIL.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.agentTransfer" aria-label="agentTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.AGENTTRANSFER">agentTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.agentTransfer == true" class="md-block">\n                                <label translate="MAIL.AGENTTRANSFERTIMEOUT">agentTransferTimeout</label>\n                                <input type="number" name="agentTransferTimeout" ng-model="vm.mailAccount.agentTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'agentTransferTimeout\'].$error" ng-show="transferForm[\'agentTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.AGENTTRANSFERTIMEOUT_REQUIRED">agentTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MAIL.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.IMAP">IMAP</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container imap md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.IMAP">IMAP</div>\n                        </div>\n                        <form name="imapForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.SERVICE">Service</label>\n                                <md-select name="Imap.service" ng-model="vm.mailAccount.Imap.service" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Custom</md-option>\n                                    <md-option ng-value="\'gmail\'">Gmail</md-option>\n                                    <md-option ng-value="\'hotmail\'">Hotmail</md-option>\n                                    <md-option ng-value="\'yahoo\'">Yahoo</md-option>\n                                    <md-option ng-value="\'outlook365\'">Outlook365</md-option>\n                                </md-select>\n                                <div ng-messages="imapForm[\'Imap.service\'].$error" ng-show="imapForm[\'Imap.service\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.SERVICE_REQUIRED">Service field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Imap.service == null)" class="md-block">\n                                <label translate="MAIL.IMAP_HOST">IMAP_Host</label>\n                                <input type="text" name="Imap.host" ng-model="vm.mailAccount.Imap.host" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="imapForm[\'Imap.host\'].$error" ng-show="imapForm[\'Imap.host\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.IMAP_HOST_REQUIRED">IMAP_Host field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Imap.service == null)" class="md-block">\n                                <label translate="MAIL.IMAP_PORT">IMAP_Port</label>\n                                <input type="number" name="Imap.port" ng-model="vm.mailAccount.Imap.port" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="imapForm[\'Imap.port\'].$error" ng-show="imapForm[\'Imap.port\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.IMAP_PORT_REQUIRED">IMAP_Port field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.Imap.tls" aria-label="ssl" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.SSL">ssl</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.Imap.service == null" class="md-block">\n                                <md-switch ng-model="vm.mailAccount.Imap.authentication" aria-label="Authentication" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.AUTHENTICATION">Authentication</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.Imap.authentication == true || vm.mailAccount.Imap.service != null" class="md-block">\n                                <label translate="MAIL.USERNAME">Username</label>\n                                <input type="text" name="Imap.user" ng-model="vm.mailAccount.Imap.user" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MAIL.HELP.USERNAME"></span></div>\n                                <div ng-messages="imapForm[\'Imap.user\'].$error" ng-show="imapForm[\'Imap.user\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block" ng-if="vm.mailAccount.Imap.authentication == true || vm.mailAccount.Imap.service != null">\n                                <label translate="MAIL.PASSWORD">Password</label>\n                                <input type="password" name="Imap.password" ng-model="vm.mailAccount.Imap.password" placeholder="Password" translate translate-attr-placeholder="MAIL.PASSWORD" required>\n                                <div class="hint"><span translate="MAIL.HELP.PASSWORD"></span></div>\n                                <div ng-messages="imapForm[\'Imap.password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MAIL.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.MAILBOX">mailbox</label>\n                                <input type="text" name="Imap.mailbox" ng-model="vm.mailAccount.Imap.mailbox" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="imapForm[\'Imap.mailbox\'].$error" ng-show="imapForm[\'Imap.mailbox\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.MAILBOX_REQUIRED">mailbox field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.CONNTIMEOUT">connTimeout</label>\n                                <input type="number" name="Imap.connTimeout" ng-model="vm.mailAccount.Imap.connTimeout" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="imapForm[\'Imap.connTimeout\'].$error" ng-show="imapForm[\'Imap.connTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.CONNTIMEOUT_REQUIRED">connTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.CONNTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">connTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.AUTHTIMEOUT">authTimeout</label>\n                                <input type="number" name="Imap.authTimeout" ng-model="vm.mailAccount.Imap.authTimeout" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="imapForm[\'Imap.authTimeout\'].$error" ng-show="imapForm[\'Imap.authTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.AUTHTIMEOUT_REQUIRED">authTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.AUTHTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">authTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.SMTP">SMTP</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container smtp md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.SMTP">SMTP</div>\n                        </div>\n                        <form name="smtpForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.SERVICE">Service</label>\n                                <md-select name="Smtp.service" ng-model="vm.mailAccount.Smtp.service" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Custom</md-option>\n                                    <md-option ng-value="\'gmail\'">Gmail</md-option>\n                                    <md-option ng-value="\'hotmail\'">Hotmail</md-option>\n                                    <md-option ng-value="\'yahoo\'">Yahoo</md-option>\n                                    <md-option ng-value="\'outlook365\'">Outlook365</md-option>\n                                </md-select>\n                                <div ng-messages="smtpForm[\'Smtp.service\'].$error" ng-show="smtpForm[\'Smtp.service\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.SERVICE_REQUIRED">Service field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Smtp.service == null)" class="md-block">\n                                <label translate="MAIL.SMTP_HOST">SMTP_Host</label>\n                                <input type="text" name="Smtp.host" ng-model="vm.mailAccount.Smtp.host" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="smtpForm[\'Smtp.host\'].$error" ng-show="smtpForm[\'Smtp.host\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.SMTP_HOST_REQUIRED">SMTP_Host field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Smtp.service == null)" class="md-block">\n                                <label translate="MAIL.SMTP_PORT">SMTP_Port</label>\n                                <input type="number" name="Smtp.port" ng-model="vm.mailAccount.Smtp.port" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="smtpForm[\'Smtp.port\'].$error" ng-show="smtpForm[\'Smtp.port\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.SMTP_PORT_REQUIRED">SMTP_Port field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.Smtp.service == null" class="md-block">\n                                <md-switch ng-model="vm.mailAccount.Smtp.secure" aria-label="Secure" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.SECURE">Secure</span></md-switch>\n\n                                <div class="hint"><span translate="MAIL.HELP.SECURE"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.Smtp.service == null" class="md-block">\n                                <md-switch ng-model="vm.mailAccount.Smtp.authentication" aria-label="Authentication" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.AUTHENTICATION">Authentication</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.Smtp.authentication == true || vm.mailAccount.Smtp.service != null" class="md-block">\n                                <label translate="MAIL.USERNAME">Username</label>\n                                <input type="text" name="Smtp.user" ng-model="vm.mailAccount.Smtp.user" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MAIL.HELP.USERNAME"></span></div>\n                                <div ng-messages="smtpForm[\'Smtp.user\'].$error" ng-show="smtpForm[\'Smtp.user\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block" ng-if="vm.mailAccount.Smtp.authentication == true || vm.mailAccount.Smtp.service != null">\n                                <label translate="MAIL.PASSWORD">Password</label>\n                                <input type="password" name="Smtp.pass" ng-model="vm.mailAccount.Smtp.pass" placeholder="Password" translate translate-attr-placeholder="MAIL.PASSWORD" required>\n                                <div class="hint"><span translate="MAIL.HELP.PASSWORD"></span></div>\n                                <div ng-messages="smtpForm[\'Smtp.pass\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MAIL.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container disposition md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.DISPOSITION">DISPOSITION</div>\n                        </div>\n                        <form name="dispositionForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.mandatoryDisposition" class="md-block">\n                                <label translate="MAIL.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.mailAccount.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MAIL.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="dispositionForm[\'mandatoryDispositionPauseId\'].$error" ng-show="dispositionForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.DISPOSITIONS">DISPOSITIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container maildispositions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="MailAccountMailDispositionsController as vm_dc" ng-init="vm_dc.init(vm.mailAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedMailAccountMailDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="MAIL.MAILDISPOSITIONS">MailDispositions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditMailAccountMailDisposition($event)" aria-label="add mailDisposition" translate translate-attr-label="MAIL.ADD_MAILDISPOSITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedMailAccountMailDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedMailAccountMailDispositions.length}} {{vm_dc.selectedMailAccountMailDispositions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedMailAccountMailDispositions" csv-label="true" filename="mailAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedMailAccountMailDispositions($event)" aria-label="delete selected" translate translate-attr-label="MAILACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedMailAccountMailDispositions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getMailAccountMailDispositions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'MAIL.ID\' | translate }}</th>\n                                            <th md-column md-order-by="name">{{ \'MAIL.NAME\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'MAIL.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="mailDisposition" md-select-id="id" ng-repeat="mailDisposition in vm_dc.mailAccountMailDispositions.rows">\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailDisposition($event, mailDisposition)" md-cell>{{mailDisposition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailDisposition($event, mailDisposition)" md-cell>{{mailDisposition.name}}</td>\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailDisposition($event, mailDisposition)" md-cell>{{mailDisposition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditMailAccountMailDisposition($event, mailDisposition)" translate="MAIL.EDIT_MAILDISPOSITION">\n                                                                Edit MailDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(mailDisposition, $event)" translate="MAIL.DELETE_MAILDISPOSITION">\n                                                                Delete MailDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.mailAccountMailDispositions.rows.length">\n                                            <td md-cell colspan="5">\n                                                <span class="text-boxed-ligth" translate="MAIL.NO_MAILDISPOSITION_AVAILABLE">No maildisposition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.mailAccountMailDispositions.count}}" md-on-paginate="vm_dc.getMailAccountMailDispositions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.CANNEDANSWERS">CANNEDANSWERS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container mailcannedanswers md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="MailAccountMailCannedAnswersController as vm_dc" ng-init="vm_dc.init(vm.mailAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedMailAccountMailCannedAnswers.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="MAIL.MAILCANNEDANSWERS">MailCannedAnswers</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event)" aria-label="add mailCannedAnswer" translate translate-attr-label="MAIL.ADD_MAILCANNEDANSWER">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedMailAccountMailCannedAnswers.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedMailAccountMailCannedAnswers.length}} {{vm_dc.selectedMailAccountMailCannedAnswers.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedMailAccountMailCannedAnswers" csv-label="true" filename="mailAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedMailAccountMailCannedAnswers($event)" aria-label="delete selected" translate translate-attr-label="MAILACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedMailAccountMailCannedAnswers" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getMailAccountMailCannedAnswers">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'MAIL.ID\' | translate }}</th>\n                                            <th md-column md-order-by="key">{{ \'MAIL.KEY\' | translate }}</th>\n                                            <th md-column md-order-by="value">{{ \'MAIL.VALUE\' | translate }}</th>\n                                            <th md-column md-order-by="description">{{ \'MAIL.DESCRIPTION\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'MAIL.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="mailCannedAnswer" md-select-id="id" ng-repeat="mailCannedAnswer in vm_dc.mailAccountMailCannedAnswers.rows">\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event, mailCannedAnswer)" md-cell>{{mailCannedAnswer.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event, mailCannedAnswer)" md-cell>{{mailCannedAnswer.key}}</td>\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event, mailCannedAnswer)" md-cell>{{mailCannedAnswer.value | htmlToPlaintext }}</td>\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event, mailCannedAnswer)" md-cell>{{mailCannedAnswer.description}}</td>\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event, mailCannedAnswer)" md-cell>{{mailCannedAnswer.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event, mailCannedAnswer)" translate="MAIL.EDIT_MAILCANNEDANSWER">\n                                                                Edit MailCannedAnswer\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(mailCannedAnswer, $event)" translate="MAIL.DELETE_MAILCANNEDANSWER">\n                                                                Delete MailCannedAnswer\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.mailAccountMailCannedAnswers.rows.length">\n                                            <td md-cell colspan="7">\n                                                <span class="text-boxed-ligth" translate="MAIL.NO_MAILCANNEDANSWER_AVAILABLE">No mailcannedanswer available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.mailAccountMailCannedAnswers.count}}" md-on-paginate="vm_dc.getMailAccountMailCannedAnswers" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="MailAccountActionsController as vm_ac" ng-init="vm_ac.init(vm.mailAccount, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="MAIL.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedMailAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedMailAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedMailAccountApps.length}} {{vm_ac.selectedMailAccountApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedMailAccountApps($event)" aria-label="delete selected" translate translate-attr-label="MAIL.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedMailAccountApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px">\n                                                    <span translate="VOICE.PRIORITY">Priority</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.mailAccountApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editMailAccountApp($event, $index)"><span>{{app.priority}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editMailAccountApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editMailAccountApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editMailAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.mailAccountApps.rows.length">\n                                                <td md-cell colspan="7">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.INTERACTIONS">INTERACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container interactions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="MailAccountInteractionsController as vm_dc" ng-init="vm_dc.init(vm.mailAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedMailAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="MAIL.INTERACTIONS">Interactions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm_dc.getMailAccountInteractions()" aria-label="refresh Interactions" translate translate-attr-label="MAIL.REFRESH_INTERACTIONS">\n                                        <md-icon md-font-icon="icon-refresh"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedMailAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedMailAccountInteractions.length}} {{vm_dc.selectedMailAccountInteractions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedMailAccountInteractions" csv-label="true" filename="mailAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedMailAccountInteractions($event)" aria-label="delete selected" translate translate-attr-label="MAILACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedMailAccountInteractions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getMailAccountInteractions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'MAIL.ID\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'MAIL.STARTEDAT\' | translate }}</th>\n                                            <th md-column>{{ \'MAIL.CONTACT\' | translate }}</th>\n                                            <th md-column>{{ \'MAIL.AGENT\' | translate }}</th>\n                                            <th md-column md-order-by="closedAt">{{ \'MAIL.CLOSEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="disposition">{{ \'MAIL.DISPOSITION\' | translate }}</th>\n                                            <th md-column md-order-by="note">{{ \'MAIL.NOTES\' | translate }}</th>\n                                            <th md-column md-order-by="tag">{{ \'MAIL.TAGS\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="interaction" md-select-id="id" ng-repeat="interaction in vm_dc.mailAccountInteractions.rows">\n                                            <td md-cell>{{interaction.id}}</td>\n                                            <td md-cell>{{interaction.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.Contact.firstName}}</td>\n                                            <td md-cell>{{interaction.Owner.name}}</td>\n                                            <td md-cell>{{interaction.closedAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.disposition}}</td>\n                                            <td md-cell>{{interaction.note}}</td>\n                                            <td md-cell>\n                                                <div ng-if="interaction.Tags.length">\n                                                    <md-tooltip md-direction="left" layout="row">\n                                                        <span ng-repeat="tag in interaction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                                    </md-tooltip>\n                                                    <md-icon md-font-icon="icon-tag"></md-icon>\n                                                </div>\n                                            </td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_dc.spymailInteraction($event, interaction)" translate="MAIL.SPYINTERACTION">\n                                                                Spy Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.mailInteractionDownload(interaction, $event, true)" translate="MAIL.DOWNLOAD_WITH_ATTACHMENTS">\n                                                                Download with attachments\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.mailInteractionDownload(interaction, $event)" translate="MAIL.DOWNLOAD_WITHOUT_ATTACHMENTS">\n                                                                Download without attachments\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(interaction, $event)" translate="MAIL.DELETE_INTERACTION">\n                                                                Delete Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.mailAccountInteractions.rows.length">\n                                            <td md-cell colspan="13">\n                                                <span class="text-boxed-ligth" translate="MAIL.NO_INTERACTION_AVAILABLE">No interaction available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.mailAccountInteractions.count}}" md-on-paginate="vm_dc.getMailAccountInteractions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/mail/views/mailAccounts/mailAccounts.html",'<div id="mailAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-email" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="MAIL.MAILACCOUNTS">MailAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="MAIL.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedMailAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedMailAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="MAIL.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-mailAccounts-count">\n                    <span>{{vm.selectedMailAccounts.length}}</span>\n                    <span translate="MAIL.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="MAILACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllMailAccounts()" translate="MAIL.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectMailAccounts()" translate="MAIL.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedMailAccounts" csv-label="true" filename="mailAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedMailAccounts($event)" aria-label="delete selected" translate translate-attr-label="MAILACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- MAILACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedMailAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMailAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'MAIL.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'MAIL.NAME\' | translate }}</th>\n                                <th md-column md-order-by="key">{{ \'MAIL.KEY\' | translate }}</th>\n                                <th md-column md-order-by="email">{{ \'MAIL.EMAIL_ADDRESS\' | translate }}</th>\n                                <th md-column md-order-by="active">{{ \'MAIL.ACTIVE\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'MAIL.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.mailAccounts.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="MAIL.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="mailAccount" md-select-id="id" ng-repeat="mailAccount in vm.mailAccounts.rows">\n                                <td md-cell ng-if="mailAccount.userpic"><img class="avatar" alt="{{mailAccount.name}}" ng-src="api/users/{{mailAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!mailAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{mailAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailAccount, ev) : vm.createOrEditMailAccount($event, mailAccount)" md-cell class="id ">{{mailAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailAccount, ev) : vm.createOrEditMailAccount($event, mailAccount)" md-cell class="name ">{{mailAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailAccount, ev) : vm.createOrEditMailAccount($event, mailAccount)" md-cell class="key ">{{mailAccount.key}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailAccount, ev) : vm.createOrEditMailAccount($event, mailAccount)" md-cell class="email ">{{mailAccount.email}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailAccount, ev) : vm.createOrEditMailAccount($event, mailAccount)" md-cell class="active ">\n                                    <md-icon md-colors="{color: {{mailAccount.active ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{mailAccount.active ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailAccount, ev) : vm.createOrEditMailAccount($event, mailAccount)" md-cell class="description ">{{mailAccount.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(mailAccount, $event    )" translate="MAIL.EDIT_MAILACCOUNT">\n                                                    Edit MailAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.verifysmtpverifysmtp(mailAccount, $event    )" translate="MAIL.VERIFYSMTP_MAILACCOUNT">\n                                                    verifysmtp MailAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.interactionsgoto(mailAccount, $event    )" translate="MAIL.INTERACTIONS_MAILACCOUNT">\n                                                    Interactions MailAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(mailAccount, $event    )" translate="MAIL.GOTOREALTIME_MAILACCOUNT">\n                                                    goToRealtime MailAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(mailAccount, $event    )" translate="MAIL.AGENTADD_MAILACCOUNT">\n                                                    AgentAdd MailAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(mailAccount, $event    )" translate="MAIL.DELETE_MAILACCOUNT">\n                                                    Delete MailAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.mailAccounts.count}}" md-on-paginate="vm.getMailAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / MAILACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD MAILACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-mailAccount-button" ng-click="vm.createOrEditMailAccount($event)" aria-label="add mailAccount" translate translate-attr-aria-label="MAIL.ADD_MAILACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD MAILACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/mail/views/mailQueues/create/dialog.html",'<md-dialog class="mailQueue-dialog" aria-label="New MailQueue">\n    <form name="mailQueueForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.mailQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newMailQueue">\n\n                <div class="hint"><span translate="MAIL.HELP.NAME"></span></div>\n                <div ng-messages="mailQueueForm[\'name\'].$error" ng-show="mailQueueForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="MAIL.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.STRATEGY">Strategy</label>\n                <md-select name="strategy" ng-model="vm.mailQueue.strategy" required>\n                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                </md-select>\n                <div ng-messages="mailQueueForm[\'strategy\'].$error" ng-show="mailQueueForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.AGENT_TIMEOUT">Agent_Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.mailQueue.timeout" min="1" max="2147483" ng-required="true">\n\n                <div ng-messages="mailQueueForm[\'timeout\'].$error" ng-show="mailQueueForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MAIL.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MAIL.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.mailQueue.description">\n\n                <div ng-messages="mailQueueForm[\'description\'].$error" ng-show="mailQueueForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMailQueue" ng-click="vm.saveMailQueue()" class="send-button md-accent md-raised" ng-disabled="mailQueueForm.$invalid || mailQueueForm.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMailQueue" ng-click="vm.addNewMailQueue()" class="send-button md-accent md-raised" ng-disabled="mailQueueForm.$invalid" aria-label="ADD" translate="MAIL.ADD_MAILQUEUE" translate-attr-aria-label="MAIL.ADD_MAILQUEUE">\n                    ADD MAILQUEUE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMailQueue" ng-click="vm.deleteMailQueue($event)" aria-label="DELETE" translate translate-attr-aria-label="MAIL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MAIL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailQueues/edit/agentadd/agentadd.html",'<md-dialog class="mailQueue-dialog" aria-label="mailQueue" ng-init="vm.onInit()">\n    <form name="mailQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MAIL.AGENTADD_MAILQUEUE">Add Agent to mailQueue</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailQueues/edit/teamadd/teamadd.html",'<md-dialog class="mailQueue-dialog" aria-label="mailQueue" ng-init="vm.onInit()">\n    <form name="mailQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MAIL.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailQueues/edit/view.html",'<div id="mail-mailQueue" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-mailQueues-button md-icon-button" aria-label="Go to mailQueues" ng-click="vm.gotoMailQueues()" translate translate-attr-aria-label="MAIL.GO_TO_MAILQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="mailQueue-image" hide-xs>\n                    <img ng-src="assets/images/business/mailQueues.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.mailQueue.id}}\n                        <span ng-if="vm.mailQueue.name">{{vm.mailQueue.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="MAIL.CREATED_AT"></span> <span>{{vm.mailQueue.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.mailQueue, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="MAIL.TEAMADD_MAILQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.mailQueue, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="MAIL.AGENTADD_MAILQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveMailQueue()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid)" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailQueue-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.mailQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="MAIL.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MAIL.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.mailQueue.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'strategy\'].$error" ng-show="generalForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.AGENT_TIMEOUT">Agent_Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.mailQueue.timeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MAIL.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.mailQueue.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/mail/views/mailQueues/mailQueues.html",'<div id="mailQueues" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-email" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="MAIL.MAILQUEUES">MailQueues</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="MAIL.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedMailQueues.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedMailQueues =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="MAIL.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-mailQueues-count">\n                    <span>{{vm.selectedMailQueues.length}}</span>\n                    <span translate="MAIL.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="MAILQUEUES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllMailQueues()" translate="MAIL.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectMailQueues()" translate="MAIL.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedMailQueues" csv-label="true" filename="mailQueues.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedMailQueues($event)" aria-label="delete selected" translate translate-attr-label="MAILQUEUES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- MAILQUEUE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedMailQueues" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMailQueues">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'MAIL.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'MAIL.NAME\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'MAIL.STRATEGY\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.mailQueues.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="MAIL.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="mailQueue" md-select-id="id" ng-repeat="mailQueue in vm.mailQueues.rows">\n                                <td md-cell ng-if="mailQueue.userpic"><img class="avatar" alt="{{mailQueue.name}}" ng-src="api/users/{{mailQueue.id}}/avatar" /></td>\n                                <td md-cell ng-if="!mailQueue.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{mailQueue.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailQueue, ev) : vm.createOrEditMailQueue($event, mailQueue)" md-cell class="id ">{{mailQueue.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailQueue, ev) : vm.createOrEditMailQueue($event, mailQueue)" md-cell class="name ">{{mailQueue.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailQueue, ev) : vm.createOrEditMailQueue($event, mailQueue)" md-cell class="strategy ">{{ vm.arraystrategy[mailQueue.strategy].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(mailQueue, $event    )" translate="MAIL.EDIT_MAILQUEUE">\n                                                    Edit MailQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(mailQueue, $event    )" translate="MAIL.TEAMADD_MAILQUEUE">\n                                                    teamadd MailQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(mailQueue, $event    )" translate="MAIL.AGENTADD_MAILQUEUE">\n                                                    agentadd MailQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(mailQueue, $event    )" translate="MAIL.DELETE_MAILQUEUE">\n                                                    Delete MailQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(mailQueue, $event    )" translate="MAIL.GOTOREALTIME_MAILQUEUE">\n                                                    goToRealtime MailQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.mailQueues.count}}" md-on-paginate="vm.getMailQueues" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / MAILQUEUE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD MAILQUEUE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-mailQueue-button" ng-click="vm.createOrEditMailQueue($event)" aria-label="add mailQueue" translate translate-attr-aria-label="MAIL.ADD_MAILQUEUE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD MAILQUEUE BUTTON --\x3e\n</div>'),e.put("app/main/apps/mail/views/mailSubtatuses/create/dialog.html",'<md-dialog class="mailSubstatus-dialog" aria-label="New MailSubstatus">\n    <form name="mailSubstatusForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.mailSubstatus.name" ng-required="true" autofocus>\n\n                <div ng-messages="mailSubstatusForm[\'name\'].$error" ng-show="mailSubstatusForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.mailSubstatus.description">\n\n                <div ng-messages="mailSubstatusForm[\'description\'].$error" ng-show="mailSubstatusForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMailSubstatus" ng-click="vm.saveMailSubstatus()" class="send-button md-accent md-raised" ng-disabled="mailSubstatusForm.$invalid || mailSubstatusForm.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMailSubstatus" ng-click="vm.addNewMailSubstatus()" class="send-button md-accent md-raised" ng-disabled="mailSubstatusForm.$invalid" aria-label="ADD" translate="MAIL.ADD_MAILSUBSTATUS" translate-attr-aria-label="MAIL.ADD_MAILSUBSTATUS">\n                    ADD MAILSUBSTATUS\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMailSubstatus" ng-click="vm.deleteMailSubstatus($event)" aria-label="DELETE" translate translate-attr-aria-label="MAIL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MAIL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailSubtatuses/mailSubtatuses.html",'<div id="mailSubtatuses" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-email" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="MAIL.MAILSUBSTATUSES">MailSubstatuses</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="MAIL.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedMailSubstatuses.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedMailSubstatuses =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="MAIL.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-mailSubtatuses-count">\n                    <span>{{vm.selectedMailSubstatuses.length}}</span>\n                    <span translate="MAIL.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="MAILSUBSTATUSES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllMailSubstatuses()" translate="MAIL.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectMailSubstatuses()" translate="MAIL.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedMailSubstatuses" csv-label="true" filename="mailSubtatuses.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedMailSubstatuses($event)" aria-label="delete selected" translate translate-attr-label="MAILSUBSTATUSES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- MAILSUBSTATUS TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedMailSubstatuses" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMailSubstatuses">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'MAIL.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'MAIL.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'MAIL.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.mailSubtatuses.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="MAIL.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="mailSubstatus" md-select-id="id" ng-repeat="mailSubstatus in vm.mailSubtatuses.rows">\n                                <td md-cell ng-if="mailSubstatus.userpic"><img class="avatar" alt="{{mailSubstatus.name}}" ng-src="api/users/{{mailSubstatus.id}}/avatar" /></td>\n                                <td md-cell ng-if="!mailSubstatus.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{mailSubstatus.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditMailSubstatus($event, mailSubstatus)" md-cell class="id ">{{mailSubstatus.id}}</td>\n                                <td ng-click="vm.createOrEditMailSubstatus($event, mailSubstatus)" md-cell class="name ">{{mailSubstatus.name}}</td>\n                                <td ng-click="vm.createOrEditMailSubstatus($event, mailSubstatus)" md-cell class="description ">{{mailSubstatus.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(mailSubstatus, $event    )" translate="MAIL.EDIT_MAILSUBSTATUS">\n                                                    Edit MailSubstatus\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(mailSubstatus, $event    )" translate="MAIL.DELETE_MAILSUBSTATUS">\n                                                    Delete MailSubstatus\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.mailSubtatuses.count}}" md-on-paginate="vm.getMailSubstatuses" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / MAILSUBSTATUS TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD MAILSUBSTATUS BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-mailSubstatus-button" ng-click="vm.createOrEditMailSubstatus($event)" aria-label="add mailSubstatus" translate translate-attr-aria-label="MAIL.ADD_MAILSUBSTATUS">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD MAILSUBSTATUS BUTTON --\x3e\n</div>'),e.put("app/main/apps/mail/views/realtime/accounts/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MAIL.ACCOUNTS">Accounts</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMailAccounts">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'MAIL.NAME\' | translate }}</th>\n                <th md-column>{{ \'MAIL.KEY\' | translate }}</th>\n                <th md-column>{{ \'MAIL.TOTAL\' | translate }}</th>\n                <th md-column>{{ \'MAIL.IN\' | translate }}</th>\n                <th md-column>{{ \'MAIL.OUT\' | translate }}</th>\n                <th md-column>{{ \'MAIL.IMAP_STATUS\' | translate }}</th>\n                <th md-column>{{ \'MAIL.SMTP_STATUS\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.mailAccounts">\n                <td md-cell colspan="4">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="MAIL.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.mailAccounts[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.mailAccounts[value].name}}</td>\n                <td md-cell>{{vm.mailAccounts[value].key}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{(vm.mailAccounts[value].in || 0) + (vm.mailAccounts[value].out || 0)}}</span>\n                </td>\n                <td md-cell>\n                    <div layout="row">\n                        <span>\n                            <md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon>\n                        </span>\n                        <span class="md-capture blue-fg">{{vm.mailAccounts[value].in || 0}}</span>\n                        <span class="text-boxed" ng-if="mailAccount.in">{{vm.mailAccounts[value].lastIn ?  (vm.mailAccounts[value].lastIn | date: \'shortTime\') : \'\'}}</span>\n                    </div>\n                </td>\n                <td md-cell>\n                    <div layout="row">\n                        <span>\n                            <md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon>\n                        </span>\n                        <span class="md-capture green-fg">{{vm.mailAccounts[value].out || 0}}</span>\n                        <span class="text-boxed" ng-if="mailAccount.out">{{vm.mailAccounts[value].lastOut ?  (vm.mailAccounts[value].lastOut | date: \'shortTime\') : \'\'}}</span>\n                    </div>\n                </td>\n                <td md-cell>\n                    <div layout="row" layout-align="start center">\n                        <div layout="column" layout-align="center center">\n                            <md-button class="md-icon-button" aria-label="Status">\n                                <md-tooltip>{{vm.mailAccounts[value].Imap.messageStatus}}</md-tooltip>\n                                <div ng-switch="vm.mailAccounts[value].Imap.status">\n                                    <md-icon ng-switch-when="error" md-font-icon="icon-alert yellow-fg"></md-icon>\n                                    <md-icon ng-switch-when="disabled" md-font-icon="icon-close grey-fg"></md-icon>\n                                    <md-icon ng-switch-default md-font-icon="icon-checkbox-marked-circle-outline green-fg"></md-icon>\n                                </div>\n                            </md-button>\n                            <span class="md-caption grey-fg">{{ (\'MAIL.\' + vm.mailAccounts[value].Imap.status.toUpperCase()) | translate}}</span>\n                        </div>\n                        <span class="text-boxed" ng-if="vm.mailAccounts[value].active">{{vm.mailAccounts[value].Imap.lastSync | date: \'shortTime\'}}</span>\n                    </div>\n                </td>\n                <td md-cell>\n                    <div layout="row" layout-align="start center" ng-if="vm.mailAccounts[value].Smtp.status">\n                        <div layout="column" layout-align="center center">\n                            <md-button class="md-icon-button" aria-label="Status">\n                                <md-tooltip>{{vm.mailAccounts[value].Smtp.messageStatus}}</md-tooltip>\n                                <md-icon md-font-icon="{{ vm.mailAccounts[value].Smtp.status == \'error\' ? \'icon-alert yellow-fg\' : \'icon-checkbox-marked-circle-outline green-fg\'}}"></md-icon>\n                            </md-button>\n                            <span class="md-caption grey-fg">{{ (\'MAIL.\' + vm.mailAccounts[value].Smtp.status.toUpperCase()) | translate}}</span>\n                        </div>\n                        <span class="text-boxed">{{vm.mailAccounts[value].Smtp.lastSync | date: \'shortTime\'}}</span>\n                    </div>\n                    <span class="md-caption grey-fg" ng-if="!vm.mailAccounts[value].Smtp.status">{{ \'MAIL.NEVER_VERIFIED\' | translate }}</span>\n                </td>\n                <td md-cell class="actions">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="4">\n                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                <md-button ng-click="vm.goToMailAccount($event, vm.mailAccounts[value])" translate="MAIL.EDIT_ACCOUNT">\n                                    Edit Account\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.verifySmtp($event, vm.mailAccounts[value])" translate="MAIL.VERIFY_SMTP">\n                                    Verify Smtp\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getmailAccounts" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/mail/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MAIL.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'MAIL.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'MAIL.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'MAIL.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'MAIL.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'MAIL.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'MAIL.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'MAIL.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'MAIL.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'MAIL.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'MAIL.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'MAIL.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'MAIL.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"MAIL.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"MAIL.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"MAIL.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"MAIL.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"MAIL.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"MAIL.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"MAIL.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"MAIL.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'MAIL.PAGE' | translate}}:', rowsPerPage: '{{'MAIL.ROWSPERPAGE' | translate}}:', of: '{{'MAIL.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/mail/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MAIL.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'MAIL.NAME\' | translate }}</th>\n                <th md-column>{{ \'MAIL.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'MAIL.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'MAIL.READY\' | translate }}</th>\n                <th md-column>{{ \'MAIL.WAITING\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="7">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="MAIL.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditMailQueue($event, vm.queues[value])" translate="MAIL.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="MAIL.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/mail/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.ACCOUNTS">Accounts</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/marketplace/views/plugins/create/dialog.html",'<md-dialog class="plugin-dialog" aria-label="New Plugin">\n    <form name="pluginForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MARKETPLACE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.plugin.name" ng-required="true" autofocus>\n\n                <div ng-messages="pluginForm[\'name\'].$error" ng-show="pluginForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MARKETPLACE.TYPE">Type</label>\n                <input type="text" name="type" ng-model="vm.plugin.type" ng-disabled="!vm.newPlugin">\n\n                <div ng-messages="pluginForm[\'type\'].$error" ng-show="pluginForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.plugin.active" aria-label="Active" ng-disabled="!vm.newPlugin"><span translate="MARKETPLACE.ACTIVE">Active</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MARKETPLACE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.plugin.description">\n\n                <div ng-messages="pluginForm[\'description\'].$error" ng-show="pluginForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MARKETPLACE.ICON">Icon</label>\n                <input type="text" name="icon" ng-model="vm.plugin.icon" ng-required="true">\n\n                <div ng-messages="pluginForm[\'icon\'].$error" ng-show="pluginForm[\'icon\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.ICON_REQUIRED">Icon field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MARKETPLACE.SIDEBAR">Sidebar</label>\n                <md-select name="sidebar" ng-model="vm.plugin.sidebar" required>\n                    <md-option ng-value="\'always\'">Always</md-option>\n                    <md-option ng-value="\'adminOnly\'">Admin Only</md-option>\n                    <md-option ng-value="\'agentOnly\'">Agent Only</md-option>\n                    <md-option ng-value="\'never\'">Never</md-option>\n                </md-select>\n                <div ng-messages="pluginForm[\'sidebar\'].$error" ng-show="pluginForm[\'sidebar\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.SIDEBAR_REQUIRED">Sidebar field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.plugin.sidebar === \'always\' || vm.plugin.sidebar === \'adminOnly\'" class="md-block">\n                <label translate="MARKETPLACE.ADMINURL">AdminUrl</label>\n                <input type="text" name="adminUrl" ng-model="vm.plugin.adminUrl">\n\n                <div ng-messages="pluginForm[\'adminUrl\'].$error" ng-show="pluginForm[\'adminUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.ADMINURL_REQUIRED">AdminUrl field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.plugin.sidebar === \'always\' || vm.plugin.sidebar === \'agentOnly\'" class="md-block">\n                <label translate="MARKETPLACE.AGENTURL">AgentUrl</label>\n                <input type="text" name="agentUrl" ng-model="vm.plugin.agentUrl">\n\n                <div ng-messages="pluginForm[\'agentUrl\'].$error" ng-show="pluginForm[\'agentUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.AGENTURL_REQUIRED">AgentUrl field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.plugin.type === \'script\'" class="md-block">\n                <label translate="MARKETPLACE.SCRIPTNAME">ScriptName</label>\n                <input type="text" name="scriptName" ng-model="vm.plugin.scriptName" ng-disabled="!vm.newPlugin">\n\n                <div ng-messages="pluginForm[\'scriptName\'].$error" ng-show="pluginForm[\'scriptName\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.SCRIPTNAME_REQUIRED">ScriptName field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.plugin.type === \'script\'" class="md-block">\n                <label translate="MARKETPLACE.SCRIPTPATH">ScriptPath</label>\n                <input type="text" name="scriptPath" ng-model="vm.plugin.scriptPath" ng-required="true">\n\n                <div ng-messages="pluginForm[\'scriptPath\'].$error" ng-show="pluginForm[\'scriptPath\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.SCRIPTPATH_REQUIRED">ScriptPath field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MARKETPLACE.VERSION">Version</label>\n                <input type="text" name="version" ng-model="vm.plugin.version" ng-disabled="!vm.newPlugin">\n\n                <div ng-messages="pluginForm[\'version\'].$error" ng-show="pluginForm[\'version\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.VERSION_REQUIRED">Version field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newPlugin" ng-click="vm.savePlugin()" class="send-button md-accent md-raised" ng-disabled="pluginForm.$invalid || pluginForm.$pristine" aria-label="SAVE" translate="MARKETPLACE.SAVE" translate-attr-aria-label="MARKETPLACE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newPlugin" ng-click="vm.addNewPlugin()" class="send-button md-accent md-raised" ng-disabled="pluginForm.$invalid" aria-label="ADD" translate="MARKETPLACE.ADD_PLUGIN" translate-attr-aria-label="MARKETPLACE.ADD_PLUGIN">\n                    ADD PLUGIN\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newPlugin" ng-click="vm.deletePlugin($event)" aria-label="DELETE" translate translate-attr-aria-label="MARKETPLACE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MARKETPLACE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/marketplace/views/plugins/edit/view.html",'<div id="marketplace-plugin" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-plugins-button md-icon-button" aria-label="Go to plugins" ng-click="vm.gotoPlugins()" translate translate-attr-aria-label="MARKETPLACE.GO_TO_PLUGINS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="plugin-image" hide-xs>\n                    <img ng-src="assets/images/business/plugins.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.plugin.id}}\n                        <span ng-if="vm.plugin.name">{{vm.plugin.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="MARKETPLACE.CREATED_AT"></span> <span>{{vm.plugin.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.savePlugin()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid)" translate="MARKETPLACE.SAVE" translate-attr-aria-label="MARKETPLACE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MARKETPLACE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="plugin-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MARKETPLACE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MARKETPLACE.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.plugin.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MARKETPLACE.TYPE">Type</label>\n                                <input type="text" name="type" ng-model="vm.plugin.type" disabled>\n\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.plugin.active" aria-label="Active" ng-disabled="true"><span translate="MARKETPLACE.ACTIVE">Active</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MARKETPLACE.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.plugin.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MARKETPLACE.ICON">Icon</label>\n                                <input type="text" name="icon" ng-model="vm.plugin.icon" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'icon\'].$error" ng-show="generalForm[\'icon\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.ICON_REQUIRED">Icon field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MARKETPLACE.SIDEBAR">Sidebar</label>\n                                <md-select name="sidebar" ng-model="vm.plugin.sidebar" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'always\'">Always</md-option>\n                                    <md-option ng-value="\'adminOnly\'">Admin Only</md-option>\n                                    <md-option ng-value="\'agentOnly\'">Agent Only</md-option>\n                                    <md-option ng-value="\'never\'">Never</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'sidebar\'].$error" ng-show="generalForm[\'sidebar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.SIDEBAR_REQUIRED">Sidebar field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.plugin.sidebar === \'always\' || vm.plugin.sidebar === \'adminOnly\'" class="md-block">\n                                <label translate="MARKETPLACE.ADMINURL">AdminUrl</label>\n                                <input type="text" name="adminUrl" ng-model="vm.plugin.adminUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'adminUrl\'].$error" ng-show="generalForm[\'adminUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.ADMINURL_REQUIRED">AdminUrl field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.plugin.sidebar === \'always\' || vm.plugin.sidebar === \'agentOnly\'" class="md-block">\n                                <label translate="MARKETPLACE.AGENTURL">AgentUrl</label>\n                                <input type="text" name="agentUrl" ng-model="vm.plugin.agentUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'agentUrl\'].$error" ng-show="generalForm[\'agentUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.AGENTURL_REQUIRED">AgentUrl field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.plugin.type === \'script\'" class="md-block">\n                                <label translate="MARKETPLACE.SCRIPTNAME">ScriptName</label>\n                                <input type="text" name="scriptName" ng-model="vm.plugin.scriptName" disabled>\n\n                                <div ng-messages="generalForm[\'scriptName\'].$error" ng-show="generalForm[\'scriptName\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.SCRIPTNAME_REQUIRED">ScriptName field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.plugin.type === \'script\'" class="md-block">\n                                <label translate="MARKETPLACE.SCRIPTPATH">ScriptPath</label>\n                                <input type="text" name="scriptPath" ng-model="vm.plugin.scriptPath" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'scriptPath\'].$error" ng-show="generalForm[\'scriptPath\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.SCRIPTPATH_REQUIRED">ScriptPath field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MARKETPLACE.VERSION">Version</label>\n                                <input type="text" name="version" ng-model="vm.plugin.version" disabled>\n\n                                <div ng-messages="generalForm[\'version\'].$error" ng-show="generalForm[\'version\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.VERSION_REQUIRED">Version field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/marketplace/views/plugins/plugins.html",'<div id="plugins" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="MARKETPLACE.PLUGINS">Plugins</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="MARKETPLACE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedPlugins.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedPlugins =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="MARKETPLACE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-plugins-count">\n                    <span>{{vm.selectedPlugins.length}}</span>\n                    <span translate="MARKETPLACE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="PLUGINS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllPlugins()" translate="MARKETPLACE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectPlugins()" translate="MARKETPLACE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedPlugins" csv-label="true" filename="plugins.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedPlugins($event)" aria-label="delete selected" translate translate-attr-label="PLUGINS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n            <div ng-if="vm.installing">\n                <md-card class="md-whiteframe-1dp padding-20" flex>\n                    <div layout="column" layout-align="center center">\n                        <span class="md-title md-accent-fg padding-20 text-bold" translate="MARKETPLACE.INSTALLING">Installing</span>\n                        <md-progress-linear md-mode="indeterminate" class="md-accent padding-20"></md-progress-linear>\n                    </div>\n                </md-card>\n            </div>\n\n            \x3c!-- PLUGIN TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedPlugins" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getPlugins">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="name">{{ \'MARKETPLACE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="type">{{ \'MARKETPLACE.TYPE\' | translate }}</th>\n                                <th md-column md-order-by="active">{{ \'MARKETPLACE.ACTIVE\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'MARKETPLACE.DESCRIPTION\' | translate }}</th>\n                                <th md-column md-order-by="version">{{ \'MARKETPLACE.VERSION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.plugins.rows.length">\n                                <td md-cell colspan="6">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="MARKETPLACE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="plugin" md-select-id="id" ng-repeat="plugin in vm.plugins.rows">\n                                <td md-cell ng-if="plugin.userpic"><img class="avatar" alt="{{plugin.name}}" ng-src="api/users/{{plugin.id}}/avatar" /></td>\n                                <td md-cell ng-if="!plugin.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{plugin.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(plugin, ev) : vm.createOrEditPlugin($event, plugin)" md-cell class="name ">{{plugin.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(plugin, ev) : vm.createOrEditPlugin($event, plugin)" md-cell class="type ">{{plugin.type}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(plugin, ev) : vm.createOrEditPlugin($event, plugin)" md-cell class="active ">\n                                    <md-icon md-colors="{color: {{plugin.active ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{plugin.active ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(plugin, ev) : vm.createOrEditPlugin($event, plugin)" md-cell class="description ">{{plugin.description}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(plugin, ev) : vm.createOrEditPlugin($event, plugin)" md-cell class="version ">{{plugin.version}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MARKETPLACE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && !plugin.active">\n\n                                                <md-button ng-click="vm.installplugin(plugin, $event    )" translate="MARKETPLACE.INSTALL_PLUGIN">\n                                                    Install Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(plugin, $event    )" translate="MARKETPLACE.EDIT_PLUGIN">\n                                                    Edit Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && plugin.active && plugin.type == \'script\'">\n\n                                                <md-button ng-click="vm.stopplugin(plugin, $event    )" translate="MARKETPLACE.STOP_PLUGIN">\n                                                    Stop Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && plugin.active && plugin.type == \'script\'">\n\n                                                <md-button ng-click="vm.restartplugin(plugin, $event    )" translate="MARKETPLACE.RESTART_PLUGIN">\n                                                    Restart Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.downloadfile2(plugin, $event  , \'plugins\'   )" translate="MARKETPLACE.DOWNLOAD_PLUGIN">\n                                                    Download Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && plugin.active">\n\n                                                <md-button ng-click="vm.uninstallplugin(plugin, $event    )" translate="MARKETPLACE.UNINSTALL_PLUGIN">\n                                                    Uninstall Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(plugin, $event    )" translate="MARKETPLACE.DELETE_PLUGIN">\n                                                    Delete Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'MARKETPLACE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MARKETPLACE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MARKETPLACE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.plugins.count}}" md-on-paginate="vm.getPlugins" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / PLUGIN TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- UPLOAD PLUGIN BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="upload-plugin-button" ng-click="vm.uploadPlugin($event)" aria-label="upload plugin" translate translate-attr-aria-label="MARKETPLACE.UPLOAD_PLUGIN">\n        <md-icon md-font-icon="icon-upload"></md-icon>\n    </md-button>\n    \x3c!-- / UPLOAD PLUGIN BUTTON --\x3e\n</div>'),e.put("app/main/apps/marketplace/views/plugins/upload/dialog.html",'<md-dialog class="upload-dialog" aria-label="Upload ">\n    <form name="uploadForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div id="plugin-uploader" ng-hide="vm.uploadState == \'uploading\'" flow-init="vm.ngFlowOptions" flow-name="vm.ngFlow.flow" flow-files-submitted="vm.upload()" flow-file-added="vm.fileAdded($file)" flow-file-success="vm.fileSuccess($file, $message)" flow-error="vm.uploadError($file, $message)" flow-complete="vm.uploadComplete()" flow-drop flow-drag-enter="vm.dropping=true" flow-drag-leave="vm.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                <div class="drop-text hint-text" layout="row" layout-align="center center">\n                    <span translate="MARKETPLACE.DROP_TO_UPLOAD">Drop to upload</span>\n                </div>\n\n                <div class="upload-button" layout="column" layout-align="center center">\n                    <md-button class="md-accent md-raised" flow-btn>\n                        Upload\n                    </md-button>\n                    <span class="secondary-text mt-8" translate="MARKETPLACE.DROP_TO_UPLOAD_MESSAGE">You can also drop your file here to upload.</span>\n                </div>\n            </div>\n\n            <div layout="column" layout-align="space-between center" ng-show="vm.uploadState == \'uploading\'">\n                <div>\n                    <span translate="MARKETPLACE.UPLOADING">Uploading</span>\n                    <span>{{vm.plugin.file.name}}</span>\n                </div>\n                <md-progress-linear md-mode="indeterminate"></md-progress-linear>\n            </div>\n\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center"></div>\n            <div layout="row">\n                <md-button ng-click="vm.closeDialog()" ng-hide="vm.uploadState == \'uploading\'" class="md-accent md-raised" aria-label="FINISH" translate="MARKETPLACE.FINISH" translate-attr-aria-label="MARKETPLACE.FINISH">\n                    FINISH\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/create/dialog.html",'<md-dialog class="ivrCampaign-dialog" aria-label="New IvrCampaign">\n    <form name="ivrCampaignForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.ivrCampaign.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newIvrCampaign">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.NAME"></span></div>\n                <div ng-messages="ivrCampaignForm[\'name\'].$error" ng-show="ivrCampaignForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.ivrCampaign.active" aria-label="Active"><span translate="MOTIONDIALER.ACTIVE">Active</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.TRUNK">Trunk</label>\n                <md-select name="TrunkId" ng-model="vm.ivrCampaign.TrunkId" required>\n                    <md-option ng-value="TrunkId.id" ng-repeat="TrunkId in vm.trunks" ng-disabled="TrunkId.canSelect === false">{{ TrunkId.name }}</md-option>\n                </md-select>\n                <div ng-messages="ivrCampaignForm[\'TrunkId\'].$error" ng-show="ivrCampaignForm[\'TrunkId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.INTERVAL">Interval</label>\n                <md-select name="IntervalId" ng-model="vm.ivrCampaign.IntervalId" required>\n                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval" ng-disabled="IntervalId.canSelect === false">{{ IntervalId.name }}</md-option>\n                </md-select>\n                <div ng-messages="ivrCampaignForm[\'IntervalId\'].$error" ng-show="ivrCampaignForm[\'IntervalId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.INTERVAL_REQUIRED">Interval field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.CHECKDUPLICATE">CheckDuplicate</label>\n                <md-select name="dialCheckDuplicateType" ng-model="vm.ivrCampaign.dialCheckDuplicateType" required>\n\n                    <md-option ng-value="\'always\'"> {{ \'MOTIONDIALER.ALWAYS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'never\'"> {{ \'MOTIONDIALER.NEVER\' | translate }} </md-option>\n\n                    <md-option ng-value="\'onlyIfOpen\'"> {{ \'MOTIONDIALER.ONLY_IF_OPEN\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="ivrCampaignForm[\'dialCheckDuplicateType\'].$error" ng-show="ivrCampaignForm[\'dialCheckDuplicateType\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.CHECKDUPLICATE_REQUIRED">CheckDuplicate field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.CALLYSQUAREPROJECT">CallySquareProject</label>\n                <md-select name="SquareProjectId" ng-model="vm.ivrCampaign.SquareProjectId" required>\n                    <md-option ng-value="SquareProjectId.id" ng-repeat="SquareProjectId in vm.projects" ng-disabled="SquareProjectId.canSelect === false">{{ SquareProjectId.name }}</md-option>\n                </md-select>\n                <div ng-messages="ivrCampaignForm[\'SquareProjectId\'].$error" ng-show="ivrCampaignForm[\'SquareProjectId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.CALLYSQUAREPROJECT_REQUIRED">CallySquareProject field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.CONCURRENTCALLS">ConcurrentCalls</label>\n                <input type="number" name="limitCalls" ng-model="vm.ivrCampaign.limitCalls" min="1" max="200" ng-required="true">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.CONCURRENTCALLS"></span></div>\n                <div ng-messages="ivrCampaignForm[\'limitCalls\'].$error" ng-show="ivrCampaignForm[\'limitCalls\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.CONCURRENTCALLS_REQUIRED">ConcurrentCalls field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.CONCURRENTCALLS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">ConcurrentCalls must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MOTIONDIALER.ERRORS.CONCURRENTCALLS_MUST_BE_LESS_THAN_OR_EQUAL_TO">ConcurrentCalls must be a valid greater or equal than</span> <span>200</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.ivrCampaign.description">\n\n                <div ng-messages="ivrCampaignForm[\'description\'].$error" ng-show="ivrCampaignForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newIvrCampaign" ng-click="vm.saveIvrCampaign()" class="send-button md-accent md-raised" ng-disabled="ivrCampaignForm.$invalid || ivrCampaignForm.$pristine" aria-label="SAVE" translate="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newIvrCampaign" ng-click="vm.addNewIvrCampaign()" class="send-button md-accent md-raised" ng-disabled="ivrCampaignForm.$invalid" aria-label="ADD" translate="MOTIONDIALER.ADD_IVRCAMPAIGN" translate-attr-aria-label="MOTIONDIALER.ADD_IVRCAMPAIGN">\n                    ADD IVRCAMPAIGN\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newIvrCampaign" ng-click="vm.deleteIvrCampaign($event)" aria-label="DELETE" translate translate-attr-aria-label="MOTIONDIALER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MOTIONDIALER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/edit/blacklistadd/blacklistadd.html",'<md-dialog class="ivrCampaign-dialog" aria-label="ivrCampaign" ng-init="vm.onInit()">\n    <form name="ivrCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.BLACKLISTADD_IVRCAMPAIGN">Add List in IVRCAMPAIGN</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect ng-hide="vm.loading" options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n            <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n                <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveLists()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/edit/clone/clone.html",'<md-dialog class="ivrCampaign-dialog" aria-label="Clone IvrCampaign">\n    <form name="ivrCampaignForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.ivrCampaign.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newIvrCampaign">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.NAME"></span></div>\n                <div ng-messages="ivrCampaignForm[\'name\'].$error" ng-show="ivrCampaignForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <md-button type="submit" ng-click="vm.cloneIvrCampaign()" class="send-button md-accent md-raised" ng-disabled="ivrCampaignForm.$invalid" aria-label="CLONE" translate="MOTIONDIALER.CLONE_IVRCAMPAIGN" translate-attr-aria-label="MOTIONDIALER.CLONE_IVRCAMPAIGN">\n                CLONE IVRCAMPAIGN\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/edit/hoppers/dialog.html",'<md-dialog class="hopper-dialog" aria-label="New Hopper">\n    <form name="hopperForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div class="md-block">\n                <label translate="MOTIONDIALER.SCHEDULEDAT">ScheduledAt</label>\n                <md-content layout="row" class="md-padding">\n                    <div flex class="md-block">\n                        <mdp-date-picker mdp-open-on-click name="scheduledatDate" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" ng-model="vm.hopper.scheduledat" ng-init="vm.hopper.scheduledat = vm.getDateFromString(vm.hopper.scheduledat)">\n                            <div ng-messages="hopperForm.dateRangeFrom.$error" ng-show="hopperForm.dateRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="MOTIONDIALER.ERRORS.DATE_REQUIRED">Date is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="MOTIONDIALER.ERRORS.DATE_INVALID">Date is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-date-picker>\n                    </div>\n                    <div flex class="md-block">\n                        <mdp-time-picker mdp-open-on-click name="scheduledatTime" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.hopper.scheduledat" ng-init="vm.hopper.scheduledat = vm.getDateFromString(vm.hopper.scheduledat)">\n                            <div ng-messages="hopperForm.timeRangeFrom.$error" ng-show="hopperForm.timeRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="MOTIONDIALER.ERRORS.TIME_REQUIRED">Time is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="MOTIONDIALER.ERRORS.TIME_INVALID">Time is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-time-picker>\n                    </div>\n                </md-content>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.PRIORITY">Priority</label>\n                <md-select name="priority" ng-model="vm.hopper.priority">\n                    <md-option ng-value="\'4\'">Highest</md-option>\n                    <md-option ng-value="\'3\'">High</md-option>\n                    <md-option ng-value="\'2\'">Medium</md-option>\n                    <md-option ng-value="\'1\'">Low</md-option>\n                    <md-option ng-value="\'0\'">Lowest</md-option>\n                </md-select>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.PRIORITY"></span></div>\n                <div ng-messages="hopperForm[\'priority\'].$error" ng-show="hopperForm[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newHopper" ng-click="vm.saveHopper()" class="send-button md-accent md-raised" ng-disabled="hopperForm.$invalid || hopperForm.$pristine" aria-label="SAVE" translate="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newHopper" ng-click="vm.addNewHopper()" class="send-button md-accent md-raised" ng-disabled="hopperForm.$invalid" aria-label="ADD" translate="MOTIONDIALER.ADD_HOPPER" translate-attr-aria-label="MOTIONDIALER.ADD_HOPPER">\n                    ADD HOPPER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newHopper" ng-click="vm.deleteHopper($event)" aria-label="DELETE" translate translate-attr-aria-label="MOTIONDIALER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MOTIONDIALER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/edit/listadd/listadd.html",'<md-dialog class="ivrCampaign-dialog" aria-label="ivrCampaign" ng-init="vm.onInit()">\n    <form name="ivrCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.LISTADD_IVRCAMPAIGN">Add List in IVRCAMPAIGN</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect ng-hide="vm.loading" options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n            <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n                <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveLists()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/edit/resetlist/resetlist.html",'<md-dialog class="queueCampaign-dialog" aria-label="queueCampaign">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.RESETLIST ">Reset List</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-disabled="vm.loading" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ng-hide="vm.loading">\n            <div layout="row" layout-wrap flex>\n                <div flex-xs flex="50">\n                    <md-checkbox aria-label="Select All" ng-checked="vm.isChecked()" md-indeterminate="vm.isIndeterminate()" ng-click="vm.toggleAll()">\n                        <span ng-if="vm.isChecked()" translate="MOTIONDIALER.UNSELECTALL"></span>\n                        <span ng-if="!vm.isChecked()" translate="MOTIONDIALER.SELECTALL"></span>\n                    </md-checkbox>\n                </div>\n                <div flex-xs flex="50">\n                </div>\n                <div flex="{{vm.items.length > 10 ? 50 : 100 }}" ng-repeat="item in vm.items">\n                    <md-checkbox ng-checked="vm.exists(item, vm.selected)" ng-click="vm.toggle(item, vm.selected)">\n                        {{ item.name | limitTo:40 }}\n                    </md-checkbox>\n                </div>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions ng-hide="vm.loading" layout="row" layout-align="end center">\n            <div>\n            </div>\n            <md-button type="submit" ng-click="vm.listSelected()" class="send-button md-accent md-raised" ng-disabled="vm.loading" aria-label="RESET" translate="MOTIONDIALER.RESET" translate-attr-aria-label="MOTIONDIALER.RESET">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n        <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n            <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n        </div>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/edit/view.html",'<div id="motiondialer-ivrCampaign" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-ivrCampaigns-button md-icon-button" aria-label="Go to ivrCampaigns" ng-click="vm.gotoIvrCampaigns()" translate translate-attr-aria-label="MOTIONDIALER.GO_TO_IVRCAMPAIGNS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="ivrCampaign-image" hide-xs>\n                    <img ng-src="assets/images/business/ivrCampaigns.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.ivrCampaign.id}}\n                        <span ng-if="vm.ivrCampaign.name">{{vm.ivrCampaign.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="MOTIONDIALER.CREATED_AT"></span> <span>{{vm.ivrCampaign.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.clonedialog(vm.ivrCampaign, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="clone">\n                <md-tooltip><span translate="MOTIONDIALER.CLONE_IVRCAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.listadddialog(vm.ivrCampaign, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="listadd">\n                <md-tooltip><span translate="MOTIONDIALER.LISTADD_IVRCAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-format-list-numbers"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.blacklistadddialog(vm.ivrCampaign, $event)" class="md-fab md-warn md-icon-button" aria-label="blacklistadd">\n                <md-tooltip><span translate="MOTIONDIALER.BLACKLISTADD_IVRCAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-block-helper"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.resetlistdialog(vm.ivrCampaign, $event)" class="md-fab md-warn md-icon-button" aria-label="resetlist">\n                <md-tooltip><span translate="MOTIONDIALER.RESETLIST_IVRCAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-restore"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.ivrCampaign, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="MOTIONDIALER.GOTO_IVRCAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-cast"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveIvrCampaign()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (campaignForm.$invalid) || (originateForm.$invalid) || (globalForm.$invalid) || (congestionForm.$invalid) || (busyForm.$invalid) || (noanswerForm.$invalid) || (advancedForm.$invalid) || (globalintervalForm.$invalid) || (timezoneForm.$invalid) || (amdForm.$invalid) || (hopperStatisticsForm.$invalid) || (hoppersForm.$invalid) || (hopperHistoriesForm.$invalid) || (hopperFinalsForm.$invalid) || (hopperBlacksForm.$invalid)" translate="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="ivrCampaign-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.ivrCampaign.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MOTIONDIALER.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.ivrCampaign.active" aria-label="Active" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.ACTIVE">Active</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.TRUNK">Trunk</label>\n                                <md-select name="TrunkId" ng-model="vm.ivrCampaign.TrunkId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="TrunkId.id" ng-repeat="TrunkId in vm.trunks" ng-disabled="TrunkId.canSelect === false">{{ TrunkId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'TrunkId\'].$error" ng-show="generalForm[\'TrunkId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.BACKUPTRUNK">BackupTrunk</label>\n                                <md-select name="TrunkBackupId" ng-model="vm.ivrCampaign.TrunkBackupId" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="TrunkBackupId.id" ng-repeat="TrunkBackupId in vm.trunks" ng-disabled="TrunkBackupId.canSelect === false">{{ TrunkBackupId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'TrunkBackupId\'].$error" ng-show="generalForm[\'TrunkBackupId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.BACKUPTRUNK_REQUIRED">BackupTrunk field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.INTERVAL">Interval</label>\n                                <md-select name="IntervalId" ng-model="vm.ivrCampaign.IntervalId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval" ng-disabled="IntervalId.canSelect === false">{{ IntervalId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'IntervalId\'].$error" ng-show="generalForm[\'IntervalId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.INTERVAL_REQUIRED">Interval field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CHECKDUPLICATE">CheckDuplicate</label>\n                                <md-select name="dialCheckDuplicateType" ng-model="vm.ivrCampaign.dialCheckDuplicateType" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'always\'"> {{ \'MOTIONDIALER.ALWAYS\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'never\'"> {{ \'MOTIONDIALER.NEVER\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'onlyIfOpen\'"> {{ \'MOTIONDIALER.ONLY_IF_OPEN\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'dialCheckDuplicateType\'].$error" ng-show="generalForm[\'dialCheckDuplicateType\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CHECKDUPLICATE_REQUIRED">CheckDuplicate field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CUTDIGIT">CutDigit</label>\n                                <input type="number" name="dialCutDigit" ng-model="vm.ivrCampaign.dialCutDigit" min="0" max="15" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'dialCutDigit\'].$error" ng-show="generalForm[\'dialCutDigit\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CUTDIGIT_REQUIRED">CutDigit field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CUTDIGIT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CutDigit must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CUTDIGIT_MUST_BE_LESS_THAN_OR_EQUAL_TO">CutDigit must be a valid greater or equal than</span> <span>15</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.ivrCampaign.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.CAMPAIGN">CAMPAIGN</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="ivrCampaign-detail-form-container campaign md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.CAMPAIGN">CAMPAIGN</div>\n                        </div>\n                        <form name="campaignForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CALLYSQUAREPROJECT">CallySquareProject</label>\n                                <md-select name="SquareProjectId" ng-model="vm.ivrCampaign.SquareProjectId" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="SquareProjectId.id" ng-repeat="SquareProjectId in vm.projects" ng-disabled="SquareProjectId.canSelect === false">{{ SquareProjectId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="campaignForm[\'SquareProjectId\'].$error" ng-show="campaignForm[\'SquareProjectId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CALLYSQUAREPROJECT_REQUIRED">CallySquareProject field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CONCURRENTCALLS">ConcurrentCalls</label>\n                                <input type="number" name="limitCalls" ng-model="vm.ivrCampaign.limitCalls" min="1" max="200" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CONCURRENTCALLS"></span></div>\n                                <div ng-messages="campaignForm[\'limitCalls\'].$error" ng-show="campaignForm[\'limitCalls\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CONCURRENTCALLS_REQUIRED">ConcurrentCalls field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CONCURRENTCALLS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">ConcurrentCalls must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CONCURRENTCALLS_MUST_BE_LESS_THAN_OR_EQUAL_TO">ConcurrentCalls must be a valid greater or equal than</span> <span>200</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="ivrCampaign-detail-form-container originate md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.ORIGINATE">ORIGINATE</div>\n                        </div>\n                        <form name="originateForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.ORIGINATECALLERIDNAME">OriginateCallerIdName</label>\n                                <input type="text" name="dialOriginateCallerIdName" ng-model="vm.ivrCampaign.dialOriginateCallerIdName" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATECALLERIDNAME"></span></div>\n                                <div ng-messages="originateForm[\'dialOriginateCallerIdName\'].$error" ng-show="originateForm[\'dialOriginateCallerIdName\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATECALLERIDNAME_REQUIRED">OriginateCallerIdName field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.ORIGINATECALLERIDNUMBER">OriginateCallerIdNumber</label>\n                                <input type="text" name="dialOriginateCallerIdNumber" ng-model="vm.ivrCampaign.dialOriginateCallerIdNumber" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATECALLERIDNUMBER"></span></div>\n                                <div ng-messages="originateForm[\'dialOriginateCallerIdNumber\'].$error" ng-show="originateForm[\'dialOriginateCallerIdNumber\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATECALLERIDNUMBER_REQUIRED">OriginateCallerIdNumber field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.RANDOMLASTDIGITCALLERIDNUMBER">RandomLastDigitCallerIdNumber</label>\n                                <input type="number" name="dialRandomLastDigitCallerIdNumber" ng-model="vm.ivrCampaign.dialRandomLastDigitCallerIdNumber" min="0" max="15" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.RANDOMLASTDIGITCALLERIDNUMBER"></span></div>\n                                <div ng-messages="originateForm[\'dialRandomLastDigitCallerIdNumber\'].$error" ng-show="originateForm[\'dialRandomLastDigitCallerIdNumber\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.RANDOMLASTDIGITCALLERIDNUMBER_REQUIRED">RandomLastDigitCallerIdNumber field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.RANDOMLASTDIGITCALLERIDNUMBER_MUST_BE_GREATER_THAN_OR_EQUAL_TO">RandomLastDigitCallerIdNumber must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.RANDOMLASTDIGITCALLERIDNUMBER_MUST_BE_LESS_THAN_OR_EQUAL_TO">RandomLastDigitCallerIdNumber must be a valid greater or equal than</span> <span>15</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.ORIGINATETIMEOUT">OriginateTimeout</label>\n                                <input type="number" name="dialOriginateTimeout" ng-model="vm.ivrCampaign.dialOriginateTimeout" min="1" max="999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATETIMEOUT"></span></div>\n                                <div ng-messages="originateForm[\'dialOriginateTimeout\'].$error" ng-show="originateForm[\'dialOriginateTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATETIMEOUT_REQUIRED">OriginateTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATETIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">OriginateTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATETIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">OriginateTimeout must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.PREFIX">Prefix</label>\n                                <input type="text" name="dialPrefix" ng-model="vm.ivrCampaign.dialPrefix" ng-pattern="/^\\d+$/" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREFIX"></span></div>\n                                <div ng-messages="originateForm[\'dialPrefix\'].$error" ng-show="originateForm[\'dialPrefix\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.PREFIX_REQUIRED">Prefix field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MOTIONDIALER.ERRORS.PREFIX_MUST_VALID_PATTERN" translate-values="{ regex: \'/^\\d+$/\' }">Prefix must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.RETRYANDFREQUENCY">RETRYANDFREQUENCY</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="ivrCampaign-detail-form-container global md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.GLOBAL">GLOBAL</div>\n                        </div>\n                        <form name="globalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.GLOBALMAXRETRY">GlobalMaxRetry</label>\n                                <input type="number" name="dialGlobalMaxRetry" ng-model="vm.ivrCampaign.dialGlobalMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.GLOBALMAXRETRY"></span></div>\n                                <div ng-messages="globalForm[\'dialGlobalMaxRetry\'].$error" ng-show="globalForm[\'dialGlobalMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALMAXRETRY_REQUIRED">GlobalMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">GlobalMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">GlobalMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="ivrCampaign-detail-form-container congestion md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.CONGESTION">CONGESTION</div>\n                        </div>\n                        <form name="congestionForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CONGESTIONMAXRETRY">CongestionMaxRetry</label>\n                                <input type="number" name="dialCongestionMaxRetry" ng-model="vm.ivrCampaign.dialCongestionMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CONGESTIONMAXRETRY"></span></div>\n                                <div ng-messages="congestionForm[\'dialCongestionMaxRetry\'].$error" ng-show="congestionForm[\'dialCongestionMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONMAXRETRY_REQUIRED">CongestionMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CongestionMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">CongestionMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CONGESTIONRETRYTIME">CongestionRetryTime</label>\n                                <input type="number" name="dialCongestionRetryFrequency" ng-model="vm.ivrCampaign.dialCongestionRetryFrequency" min="1" max="99999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CONGESTIONRETRYTIME"></span></div>\n                                <div ng-messages="congestionForm[\'dialCongestionRetryFrequency\'].$error" ng-show="congestionForm[\'dialCongestionRetryFrequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONRETRYTIME_REQUIRED">CongestionRetryTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONRETRYTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CongestionRetryTime must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONRETRYTIME_MUST_BE_LESS_THAN_OR_EQUAL_TO">CongestionRetryTime must be a valid greater or equal than</span> <span>99999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="ivrCampaign-detail-form-container busy md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.BUSY">BUSY</div>\n                        </div>\n                        <form name="busyForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.BUSYMAXRETRY">BusyMaxRetry</label>\n                                <input type="number" name="dialBusyMaxRetry" ng-model="vm.ivrCampaign.dialBusyMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.BUSYMAXRETRY"></span></div>\n                                <div ng-messages="busyForm[\'dialBusyMaxRetry\'].$error" ng-show="busyForm[\'dialBusyMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYMAXRETRY_REQUIRED">BusyMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">BusyMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">BusyMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.BUSYRETRYTIME">BusyRetryTime</label>\n                                <input type="number" name="dialBusyRetryFrequency" ng-model="vm.ivrCampaign.dialBusyRetryFrequency" min="1" max="99999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.BUSYRETRYTIME"></span></div>\n                                <div ng-messages="busyForm[\'dialBusyRetryFrequency\'].$error" ng-show="busyForm[\'dialBusyRetryFrequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYRETRYTIME_REQUIRED">BusyRetryTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYRETRYTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">BusyRetryTime must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYRETRYTIME_MUST_BE_LESS_THAN_OR_EQUAL_TO">BusyRetryTime must be a valid greater or equal than</span> <span>99999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="ivrCampaign-detail-form-container noanswer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.NOANSWER">NOANSWER</div>\n                        </div>\n                        <form name="noanswerForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.NOANSWERMAXRETRY">NoAnswerMaxRetry</label>\n                                <input type="number" name="dialNoAnswerMaxRetry" ng-model="vm.ivrCampaign.dialNoAnswerMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.NOANSWERMAXRETRY"></span></div>\n                                <div ng-messages="noanswerForm[\'dialNoAnswerMaxRetry\'].$error" ng-show="noanswerForm[\'dialNoAnswerMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERMAXRETRY_REQUIRED">NoAnswerMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">NoAnswerMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">NoAnswerMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.NOANSWERRETRYTIME">NoAnswerRetryTime</label>\n                                <input type="number" name="dialNoAnswerRetryFrequency" ng-model="vm.ivrCampaign.dialNoAnswerRetryFrequency" min="1" max="99999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.NOANSWERRETRYTIME"></span></div>\n                                <div ng-messages="noanswerForm[\'dialNoAnswerRetryFrequency\'].$error" ng-show="noanswerForm[\'dialNoAnswerRetryFrequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERRETRYTIME_REQUIRED">NoAnswerRetryTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERRETRYTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">NoAnswerRetryTime must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERRETRYTIME_MUST_BE_LESS_THAN_OR_EQUAL_TO">NoAnswerRetryTime must be a valid greater or equal than</span> <span>99999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="ivrCampaign-detail-form-container advanced md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.ADVANCED">ADVANCED</div>\n                        </div>\n                        <form name="advancedForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.DIALORDERBYSCHEDULEDAT">DialOrderByScheduledAt</label>\n                                <md-select name="dialOrderByScheduledAt" ng-model="vm.ivrCampaign.dialOrderByScheduledAt" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'DESC\'"> {{ \'MOTIONDIALER.DESC\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'ASC\'"> {{ \'MOTIONDIALER.ASC\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.DIALORDERBYSCHEDULEDAT"></span></div>\n                                <div ng-messages="advancedForm[\'dialOrderByScheduledAt\'].$error" ng-show="advancedForm[\'dialOrderByScheduledAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.DIALORDERBYSCHEDULEDAT_REQUIRED">DialOrderByScheduledAt field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="ivrCampaign-detail-form-container globalinterval md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.GLOBALINTERVAL">GLOBALINTERVAL</div>\n                        </div>\n                        <form name="globalintervalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.GLOBALINTERVAL">GlobalInterval</label>\n                                <input type="text" name="dialGlobalInterval" ng-model="vm.ivrCampaign.dialGlobalInterval" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.GLOBALINTERVAL"></span></div>\n                                <div ng-messages="globalintervalForm[\'dialGlobalInterval\'].$error" ng-show="globalintervalForm[\'dialGlobalInterval\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALINTERVAL_REQUIRED">GlobalInterval field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="ivrCampaign-detail-form-container timezone md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.TIMEZONE">TIMEZONE</div>\n                        </div>\n                        <form name="timezoneForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.TIMEZONE">Timezone</label>\n                                <ms-timezone name="dialTimezone" ng-model="vm.ivrCampaign.dialTimezone" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n                                    < <div class="hint"><span translate="MOTIONDIALER.HELP.TIMEZONE"></span>\n                    </div>\n                    <div ng-messages="timezoneForm[\'dialTimezone\'].$error" ng-show="timezoneForm[dialTimezone].$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="MOTIONDIALER.ERRORS.TIMEZONE_REQUIRED">Timezone field is required</span>\n                        </div>\n                    </div>\n                    </md-input-container>\n\n                    </form>\n    </div>\n    <div class="ivrCampaign-detail-form-container amd md-background-bg md-whiteframe-1dp">\n        <div class="pb-16" layout="row" layout-align="start center">\n            <div class="h2 secondary-text" translate="MOTIONDIALER.AMD">AMD</div>\n        </div>\n        <form name="amdForm" novalidate>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.ivrCampaign.dialAMDActive" aria-label="AMDActive" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.AMDACTIVE">AMDActive</span></md-switch>\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDACTIVE"></span></div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDINITIALSILENCE">AMDInitialSilence</label>\n                <input type="number" name="dialAMDInitialSilence" ng-model="vm.ivrCampaign.dialAMDInitialSilence" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDINITIALSILENCE"></span></div>\n                <div ng-messages="amdForm[\'dialAMDInitialSilence\'].$error" ng-show="amdForm[\'dialAMDInitialSilence\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDINITIALSILENCE_REQUIRED">AMDInitialSilence field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDINITIALSILENCE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDInitialSilence must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDGREETING">AMDGreeting</label>\n                <input type="number" name="dialAMDGreeting" ng-model="vm.ivrCampaign.dialAMDGreeting" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDGREETING"></span></div>\n                <div ng-messages="amdForm[\'dialAMDGreeting\'].$error" ng-show="amdForm[\'dialAMDGreeting\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDGREETING_REQUIRED">AMDGreeting field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDGREETING_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDGreeting must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDAFTERGREETINGSILENCE">AMDAfterGreetingSilence</label>\n                <input type="number" name="dialAMDAfterGreetingSilence" ng-model="vm.ivrCampaign.dialAMDAfterGreetingSilence" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDAFTERGREETINGSILENCE"></span></div>\n                <div ng-messages="amdForm[\'dialAMDAfterGreetingSilence\'].$error" ng-show="amdForm[\'dialAMDAfterGreetingSilence\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDAFTERGREETINGSILENCE_REQUIRED">AMDAfterGreetingSilence field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDAFTERGREETINGSILENCE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDAfterGreetingSilence must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDTOTALANALYSISTIME">AMDTotalAnalysisTime</label>\n                <input type="number" name="dialAMDTotalAnalysisTime" ng-model="vm.ivrCampaign.dialAMDTotalAnalysisTime" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDTOTALANALYSISTIME"></span></div>\n                <div ng-messages="amdForm[\'dialAMDTotalAnalysisTime\'].$error" ng-show="amdForm[\'dialAMDTotalAnalysisTime\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDTOTALANALYSISTIME_REQUIRED">AMDTotalAnalysisTime field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDTOTALANALYSISTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDTotalAnalysisTime must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDMINWORDLENGTH">AMDMinWordLength</label>\n                <input type="number" name="dialAMDMinWordLength" ng-model="vm.ivrCampaign.dialAMDMinWordLength" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDMINWORDLENGTH"></span></div>\n                <div ng-messages="amdForm[\'dialAMDMinWordLength\'].$error" ng-show="amdForm[\'dialAMDMinWordLength\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMINWORDLENGTH_REQUIRED">AMDMinWordLength field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMINWORDLENGTH_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDMinWordLength must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDBETWEENWORDSSILENCE">AMDBetweenWordsSilence</label>\n                <input type="number" name="dialAMDBetweenWordsSilence" ng-model="vm.ivrCampaign.dialAMDBetweenWordsSilence" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDBETWEENWORDSSILENCE"></span></div>\n                <div ng-messages="amdForm[\'dialAMDBetweenWordsSilence\'].$error" ng-show="amdForm[\'dialAMDBetweenWordsSilence\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDBETWEENWORDSSILENCE_REQUIRED">AMDBetweenWordsSilence field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDBETWEENWORDSSILENCE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDBetweenWordsSilence must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDMAXIMUMNUMBEROFWORDS">AMDMaximumNumberOfWords</label>\n                <input type="number" name="dialAMDMaximumNumberOfWords" ng-model="vm.ivrCampaign.dialAMDMaximumNumberOfWords" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDMAXIMUMNUMBEROFWORDS"></span></div>\n                <div ng-messages="amdForm[\'dialAMDMaximumNumberOfWords\'].$error" ng-show="amdForm[\'dialAMDMaximumNumberOfWords\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMNUMBEROFWORDS_REQUIRED">AMDMaximumNumberOfWords field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMNUMBEROFWORDS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDMaximumNumberOfWords must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDSILENCETHRESHOLD">AMDSilenceThreshold</label>\n                <input type="number" name="dialAMDSilenceThreshold" ng-model="vm.ivrCampaign.dialAMDSilenceThreshold" min="0" max="32767" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDSILENCETHRESHOLD"></span></div>\n                <div ng-messages="amdForm[\'dialAMDSilenceThreshold\'].$error" ng-show="amdForm[\'dialAMDSilenceThreshold\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDSILENCETHRESHOLD_REQUIRED">AMDSilenceThreshold field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDSILENCETHRESHOLD_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDSilenceThreshold must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MOTIONDIALER.ERRORS.AMDSILENCETHRESHOLD_MUST_BE_LESS_THAN_OR_EQUAL_TO">AMDSilenceThreshold must be a valid greater or equal than</span> <span>32767</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDMAXIMUMWORDLENGTH">AMDMaximumWordLength</label>\n                <input type="number" name="dialAMDMaximumWordLength" ng-model="vm.ivrCampaign.dialAMDMaximumWordLength" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDMAXIMUMWORDLENGTH"></span></div>\n                <div ng-messages="amdForm[\'dialAMDMaximumWordLength\'].$error" ng-show="amdForm[\'dialAMDMaximumWordLength\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMWORDLENGTH_REQUIRED">AMDMaximumWordLength field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMWORDLENGTH_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDMaximumWordLength must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n        </form>\n    </div>\n    </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.HOPPERS">HOPPERS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="ivrCampaign-detail-form-container hopperstatistics md-background-bg md-whiteframe-1dp">\n                <div ng-controller="IvrCampaignHopperStatisticsController as vm_hs" ng-init="vm_hs.init(vm.ivrCampaign)">\n                    <md-toolbar class="md-table-toolbar md-default">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERWIDGET">Hoppers</span>\n                            <div flex></div>\n                            <md-button class="md-icon-button" ng-click="vm_hs.init(vm.ivrCampaign)" aria-label="refresh Hopper" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    \x3c!-- WIDGET GROUP --\x3e\n                    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n                        \x3c!-- WIDGET 1 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{(vm_hs.total || 0) + (vm_hs.closed || 0)}}</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.TOTAL\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 1 --\x3e\n\n                        \x3c!-- WIDGET 2 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{vm_hs.fresh || 0}} ({{vm_hs.total ? ((((vm_hs.fresh || 0) * 100)/((vm_hs.closed || 0) + (vm_hs.total || 0))) | number: 2) : 0}}%)</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.FRESH\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 2 --\x3e\n\n                        \x3c!-- WIDGET 3 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{vm_hs.total ? (vm_hs.total - (vm_hs.fresh || 0)) : 0}} ({{vm_hs.total ? ((((vm_hs.total - (vm_hs.fresh || 0)) * 100)/((vm_hs.closed || 0) + (vm_hs.total || 0))) | number: 2) : 0}}%)</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.OPEN\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 3 --\x3e\n\n                        \x3c!-- WIDGET 3 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{vm_hs.closed ? (vm_hs.closed || 0) : 0}} ({{vm_hs.closed ? ((((vm_hs.closed) * 100)/(vm_hs.closed + (vm_hs.total || 0))) | number: 2) : 0}}%)</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.CLOSED\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 3 --\x3e\n\n                    </div>\n                    \x3c!-- / WIDGET GROUP --\x3e\n                </div>\n\n            </div>\n            <div class="ivrCampaign-detail-form-container hoppers md-background-bg md-whiteframe-1dp">\n                <div ng-controller="IvrCampaignHoppersController as vm_dc" ng-init="vm_dc.init(vm.ivrCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIvrCampaignHoppers.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERS">Hoppers</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getIvrCampaignHoppers()" aria-label="refresh Hoppers" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIvrCampaignHoppers.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedIvrCampaignHoppers.length}} {{vm_dc.selectedIvrCampaignHoppers.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedIvrCampaignHoppers" csv-label="true" filename="ivrCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedIvrCampaignHoppers($event)" aria-label="delete selected" translate translate-attr-label="IVRCAMPAIGNS.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedIvrCampaignHoppers" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIvrCampaignHoppers">\n                                <tr md-row>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="phone">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column md-order-by="countcongestionretry">{{ \'MOTIONDIALER.CONGESTION\' | translate }}</th>\n                                    <th md-column md-order-by="countbusyretry">{{ \'MOTIONDIALER.BUSY\' | translate }}</th>\n                                    <th md-column md-order-by="countnoanswerretry">{{ \'MOTIONDIALER.NOANSWER\' | translate }}</th>\n                                    <th md-column md-order-by="scheduledat">{{ \'MOTIONDIALER.SCHEDULEDAT\' | translate }}</th>\n                                    <th md-column md-order-by="priority">{{ \'MOTIONDIALER.PRIORITY\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopper" md-select-id="id" ng-repeat="hopper in vm_dc.ivrCampaignHoppers.rows">\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.ContactId}}</td>\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.phone}}</td>\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.countcongestionretry}}</td>\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.countbusyretry}}</td>\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.countnoanswerretry}}</td>\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.scheduledat | date:\'medium\'}}</td>\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{ vm_dc.arraypriority[hopper.priority].option }}</td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" translate="MOTIONDIALER.EDIT_HOPPER">\n                                                        Edit Hopper\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(hopper, $event)" translate="MOTIONDIALER.DELETE_HOPPER">\n                                                        Delete Hopper\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.ivrCampaignHoppers.rows.length">\n                                    <td md-cell colspan="10">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPER_AVAILABLE">No hopper available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.ivrCampaignHoppers.count}}" md-on-paginate="vm_dc.getIvrCampaignHoppers" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.HISTORY">HISTORY</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="ivrCampaign-detail-form-container hopperhistories md-background-bg md-whiteframe-1dp">\n                <div ng-controller="IvrCampaignHopperHistoriesController as vm_dc" ng-init="vm_dc.init(vm.ivrCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIvrCampaignHopperHistories.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERHISTORIES">HopperHistories</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getIvrCampaignHopperHistories()" aria-label="refresh HopperHistories" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERHISTORIES">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIvrCampaignHopperHistories.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedIvrCampaignHopperHistories.length}} {{vm_dc.selectedIvrCampaignHopperHistories.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedIvrCampaignHopperHistories" csv-label="true" filename="ivrCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedIvrCampaignHopperHistories" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIvrCampaignHopperHistories">\n                                <tr md-row>\n                                    <th md-column md-order-by="uniqueid">{{ \'MOTIONDIALER.UNIQUEID\' | translate }}</th>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="calleridnum">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column md-order-by="calleridname">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                                    <th md-column md-order-by="statedesc">{{ \'MOTIONDIALER.STATUS\' | translate }}</th>\n                                    <th md-column md-order-by="scheduledat">{{ \'MOTIONDIALER.SCHEDULEDAT\' | translate }}</th>\n                                    <th md-column md-order-by="starttime">{{ \'MOTIONDIALER.STARTTIME\' | translate }}</th>\n                                    <th md-column md-order-by="endtime">{{ \'MOTIONDIALER.ENDTIME\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopperHistory" md-select-id="id" ng-repeat="hopperHistory in vm_dc.ivrCampaignHopperHistories.rows">\n                                    <td md-cell>{{hopperHistory.uniqueid}}</td>\n                                    <td md-cell>{{hopperHistory.ContactId}}</td>\n                                    <td md-cell>{{hopperHistory.calleridnum}}</td>\n                                    <td md-cell>{{hopperHistory.calleridname}}</td>\n                                    <td md-cell>{{hopperHistory.statedesc}}</td>\n                                    <td md-cell>{{hopperHistory.scheduledat | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperHistory.starttime | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperHistory.endtime | date:\'medium\'}}</td>\n                                    <td md-cell class="actions">\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.ivrCampaignHopperHistories.rows.length">\n                                    <td md-cell colspan="11">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERHISTORY_AVAILABLE">No hopperhistory available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.ivrCampaignHopperHistories.count}}" md-on-paginate="vm_dc.getIvrCampaignHopperHistories" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.FINAL">FINAL</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="ivrCampaign-detail-form-container hopperfinals md-background-bg md-whiteframe-1dp">\n                <div ng-controller="IvrCampaignHopperFinalsController as vm_dc" ng-init="vm_dc.init(vm.ivrCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIvrCampaignHopperFinals.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERFINALS">HopperFinals</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getIvrCampaignHopperFinals()" aria-label="refresh HopperFinals" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERFINALS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                            <td md-cell class="actions">\n                                <md-menu>\n                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="vm_dc.countContactsIvrCampaignHopperFinal(vm_dc.query.id); $mdOpenMenu($event);">\n                                        <md-icon md-font-icon="icon-backup-restore"></md-icon>\n                                        <md-tooltip><span translate="MOTIONDIALER.RESTORECONTACTS"></span></md-tooltip>\n                                    </md-button>\n                                    <md-menu-content width="3">\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(3)">\n                                                <span translate="MOTIONDIALER.NOANSWER ">NoAnswer</span>\n                                                <span class="badge">({{vm_dc.contacts.noAnswerContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(5)">\n                                                <span translate="MOTIONDIALER.BUSY ">Busy</span>\n                                                <span class="badge">({{vm_dc.contacts.busyContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(8)">\n                                                <span translate="MOTIONDIALER.CONGESTION ">Congestion</span>\n                                                <span class="badge">({{vm_dc.contacts.congestionContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(10)">\n                                                <span translate="MOTIONDIALER.DROPPED ">Drop</span>\n                                                <span class="badge">({{vm_dc.contacts.dropContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(11)">\n                                                <span translate="MOTIONDIALER.ABANDONED ">Abandoned</span>\n                                                <span class="badge">({{vm_dc.contacts.abandonedContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(22)">\n                                                <span translate="MOTIONDIALER.RECALLFAILEDTIMEOUT">Recall</span>\n                                                <span class="badge">({{vm_dc.contacts.reCallContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(0)">\n                                                <span translate="MOTIONDIALER.NO_SUCH_NUMBER">NoSuchNumber</span>\n                                                <span class="badge">({{vm_dc.contacts.noSuchContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item>\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(19)">\n                                                <span translate="MOTIONDIALER.ANSWERING_MACHINE">AnsweringMachine</span>\n                                                <span class="badge">({{vm_dc.contacts.answeringMachine}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </td>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIvrCampaignHopperFinals.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedIvrCampaignHopperFinals.length}} {{vm_dc.selectedIvrCampaignHopperFinals.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedIvrCampaignHopperFinals" csv-label="true" filename="ivrCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.moveSelectedIvrCampaignHopperFinals($event)" aria-label="move selected" translate translate-attr-label="IVRCAMPAIGNS.MOVE_SELECTED">\n                                <md-icon md-font-icon="icon-restore"></md-icon>\n                                <md-tooltip><span translate="MOTIONDIALER.RESTORECONTACTS"></span></md-tooltip>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedIvrCampaignHopperFinals" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIvrCampaignHopperFinals">\n                                <tr md-row>\n                                    <th md-column md-order-by="uniqueid">{{ \'MOTIONDIALER.UNIQUEID\' | translate }}</th>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="calleridnum">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column md-order-by="calleridname">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                                    <th md-column md-order-by="statedesc">{{ \'MOTIONDIALER.STATUS\' | translate }}</th>\n                                    <th md-column md-order-by="countcongestionretry">{{ \'MOTIONDIALER.CONGESTION\' | translate }}</th>\n                                    <th md-column md-order-by="countbusyretry">{{ \'MOTIONDIALER.BUSY\' | translate }}</th>\n                                    <th md-column md-order-by="countnoanswerretry">{{ \'MOTIONDIALER.NOANSWER\' | translate }}</th>\n                                    <th md-column md-order-by="starttime">{{ \'MOTIONDIALER.STARTTIME\' | translate }}</th>\n                                    <th md-column md-order-by="endtime">{{ \'MOTIONDIALER.ENDTIME\' | translate }}</th>\n                                    <th md-column md-order-by="disposition">{{ \'MOTIONDIALER.DISPOSITION\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopperFinal" md-select-id="id" ng-repeat="hopperFinal in vm_dc.ivrCampaignHopperFinals.rows">\n                                    <td md-cell>{{hopperFinal.uniqueid}}</td>\n                                    <td md-cell>{{hopperFinal.ContactId}}</td>\n                                    <td md-cell>{{hopperFinal.calleridnum}}</td>\n                                    <td md-cell>{{hopperFinal.calleridname}}</td>\n                                    <td md-cell>{{hopperFinal.statedesc}}</td>\n                                    <td md-cell>{{hopperFinal.countcongestionretry}}</td>\n                                    <td md-cell>{{hopperFinal.countbusyretry}}</td>\n                                    <td md-cell>{{hopperFinal.countnoanswerretry}}</td>\n                                    <td md-cell>{{hopperFinal.starttime | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperFinal.endtime | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperFinal.disposition}}</td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.moveConfirm(hopperFinal, $event)" translate="MOTIONDIALER.MOVE_HOPPERFINAL">\n                                                        Move HopperFinal\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.ivrCampaignHopperFinals.rows.length">\n                                    <td md-cell colspan="23">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERFINAL_AVAILABLE">No hopperfinal available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.ivrCampaignHopperFinals.count}}" md-on-paginate="vm_dc.getIvrCampaignHopperFinals" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.BLACKLIST">BLACKLIST</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="ivrCampaign-detail-form-container hopperblacks md-background-bg md-whiteframe-1dp">\n                <div ng-controller="IvrCampaignHopperBlacksController as vm_dc" ng-init="vm_dc.init(vm.ivrCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIvrCampaignHopperBlacks.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERBLACKS">HopperBlacks</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIvrCampaignHopperBlacks.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedIvrCampaignHopperBlacks.length}} {{vm_dc.selectedIvrCampaignHopperBlacks.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedIvrCampaignHopperBlacks" csv-label="true" filename="ivrCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedIvrCampaignHopperBlacks" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIvrCampaignHopperBlacks">\n                                <tr md-row>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="phone">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopperBlack" md-select-id="id" ng-repeat="hopperBlack in vm_dc.ivrCampaignHopperBlacks.rows">\n                                    <td md-cell>{{hopperBlack.ContactId}}</td>\n                                    <td md-cell>{{hopperBlack.phone}}</td>\n                                    <td md-cell class="actions">\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.ivrCampaignHopperBlacks.rows.length">\n                                    <td md-cell colspan="4">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERBLACK_AVAILABLE">No hopperblack available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.ivrCampaignHopperBlacks.count}}" md-on-paginate="vm_dc.getIvrCampaignHopperBlacks" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    </md-tabs>\n\n</div>\n\x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/ivrCampaigns.html",'<div id="ivrCampaigns" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-fire" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="MOTIONDIALER.IVRCAMPAIGNS">IvrCampaigns</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="MOTIONDIALER.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedIvrCampaigns.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedIvrCampaigns =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="MOTIONDIALER.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-ivrCampaigns-count">\n                    <span>{{vm.selectedIvrCampaigns.length}}</span>\n                    <span translate="MOTIONDIALER.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="IVRCAMPAIGNS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllIvrCampaigns()" translate="MOTIONDIALER.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectIvrCampaigns()" translate="MOTIONDIALER.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedIvrCampaigns" csv-label="true" filename="ivrCampaigns.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedIvrCampaigns($event)" aria-label="delete selected" translate translate-attr-label="IVRCAMPAIGNS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- IVRCAMPAIGN TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedIvrCampaigns" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getIvrCampaigns">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'MOTIONDIALER.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                                <th md-column md-order-by="active">{{ \'MOTIONDIALER.ACTIVE\' | translate }}</th>\n                                <th md-column md-order-by="TrunkId">{{ \'MOTIONDIALER.TRUNK\' | translate }}</th>\n                                <th md-column md-order-by="SquareProjectId">{{ \'MOTIONDIALER.CALLYSQUAREPROJECT\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.ivrCampaigns.rows.length">\n                                <td md-cell colspan="6">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="ivrCampaign" md-select-id="id" ng-repeat="ivrCampaign in vm.ivrCampaigns.rows">\n                                <td md-cell ng-if="ivrCampaign.userpic"><img class="avatar" alt="{{ivrCampaign.name}}" ng-src="api/users/{{ivrCampaign.id}}/avatar" /></td>\n                                <td md-cell ng-if="!ivrCampaign.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{ivrCampaign.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(ivrCampaign, ev) : vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="id ">{{ivrCampaign.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(ivrCampaign, ev) : vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="name ">{{ivrCampaign.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(ivrCampaign, ev) : vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="active ">\n                                    <md-icon md-colors="{color: {{ivrCampaign.active ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{ivrCampaign.active ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(ivrCampaign, ev) : vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="TrunkId ">{{ (vm.trunks | filter : {\'id\':ivrCampaign.TrunkId} : true)[0].name }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(ivrCampaign, ev) : vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="SquareProjectId ">{{ (vm.projects | filter : {\'id\':ivrCampaign.SquareProjectId} : true)[0].name }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(ivrCampaign, $event    )" translate="MOTIONDIALER.EDIT_IVRCAMPAIGN">\n                                                    Edit IvrCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.clonedialog(ivrCampaign, $event    )" translate="MOTIONDIALER.CLONE_IVRCAMPAIGN">\n                                                    clone IvrCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.listadddialog(ivrCampaign, $event    )" translate="MOTIONDIALER.LISTADD_IVRCAMPAIGN">\n                                                    listadd IvrCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.blacklistadddialog(ivrCampaign, $event    )" translate="MOTIONDIALER.BLACKLISTADD_IVRCAMPAIGN">\n                                                    blacklistadd IvrCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(ivrCampaign, $event    )" translate="MOTIONDIALER.DELETE_IVRCAMPAIGN">\n                                                    Delete IvrCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(ivrCampaign, $event    )" translate="MOTIONDIALER.GOTOREALTIME_IVRCAMPAIGN">\n                                                    goToRealtime IvrCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.ivrCampaigns.count}}" md-on-paginate="vm.getIvrCampaigns" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / IVRCAMPAIGN TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD IVRCAMPAIGN BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-ivrCampaign-button" ng-click="vm.createOrEditIvrCampaign($event)" aria-label="add ivrCampaign" translate translate-attr-aria-label="MOTIONDIALER.ADD_IVRCAMPAIGN">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD IVRCAMPAIGN BUTTON --\x3e\n</div>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/create/dialog.html",'<md-dialog class="queueCampaign-dialog" aria-label="New QueueCampaign">\n    <form name="queueCampaignForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.queueCampaign.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newQueueCampaign">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.NAME"></span></div>\n                <div ng-messages="queueCampaignForm[\'name\'].$error" ng-show="queueCampaignForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.queueCampaign.dialActive" aria-label="Active"><span translate="MOTIONDIALER.ACTIVE">Active</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.TRUNK">Trunk</label>\n                <md-select name="TrunkId" ng-model="vm.queueCampaign.TrunkId" required>\n                    <md-option ng-value="TrunkId.id" ng-repeat="TrunkId in vm.trunks" ng-disabled="TrunkId.canSelect === false">{{ TrunkId.name }}</md-option>\n                </md-select>\n                <div ng-messages="queueCampaignForm[\'TrunkId\'].$error" ng-show="queueCampaignForm[\'TrunkId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod != \'preview\'" class="md-block">\n                <label translate="MOTIONDIALER.INTERVAL">Interval</label>\n                <md-select name="IntervalId" ng-model="vm.queueCampaign.IntervalId" required>\n                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval" ng-disabled="IntervalId.canSelect === false">{{ IntervalId.name }}</md-option>\n                </md-select>\n                <div ng-messages="queueCampaignForm[\'IntervalId\'].$error" ng-show="queueCampaignForm[\'IntervalId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.INTERVAL_REQUIRED">Interval field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.CHECKDUPLICATE">CheckDuplicate</label>\n                <md-select name="dialCheckDuplicateType" ng-model="vm.queueCampaign.dialCheckDuplicateType" required>\n\n                    <md-option ng-value="\'always\'"> {{ \'MOTIONDIALER.ALWAYS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'never\'"> {{ \'MOTIONDIALER.NEVER\' | translate }} </md-option>\n\n                    <md-option ng-value="\'onlyIfOpen\'"> {{ \'MOTIONDIALER.ONLY_IF_OPEN\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="queueCampaignForm[\'dialCheckDuplicateType\'].$error" ng-show="queueCampaignForm[\'dialCheckDuplicateType\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.CHECKDUPLICATE_REQUIRED">CheckDuplicate field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.METHOD">Method</label>\n                <md-select name="dialMethod" ng-model="vm.queueCampaign.dialMethod" required>\n                    <md-option ng-value="\'progressive\'">Progressive</md-option>\n                    <md-option ng-value="\'power\'">PowerDialing</md-option>\n                    <md-option ng-value="\'predictive\'">Predictive</md-option>\n                    <md-option ng-value="\'preview\'">Preview</md-option>\n                    <md-option ng-value="\'booked\'">BookedProgressive</md-option>\n                </md-select>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.METHOD"></span></div>\n                <div ng-messages="queueCampaignForm[\'dialMethod\'].$error" ng-show="queueCampaignForm[\'dialMethod\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.METHOD_REQUIRED">Method field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'power\'" class="md-block">\n                <span translate="MOTIONDIALER.POWERLEVEL">PowerLevel</span>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.POWERLEVEL"></span></div>\n                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPowerLevel" min="1" max="10" step="0.1" class="md-accent">\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                <label translate="MOTIONDIALER.PREDICTIVEOPTIMIZATION">PredictiveOptimization</label>\n                <md-select name="dialPredictiveOptimization" ng-model="vm.queueCampaign.dialPredictiveOptimization">\n\n                    <md-option ng-value="\'agentBusyFactor\'"> {{ \'MOTIONDIALER.AGENTBUSYFACTOR\' | translate }} </md-option>\n\n                    <md-option ng-value="\'dropRate\'"> {{ \'MOTIONDIALER.DROPRATE\' | translate }} </md-option>\n                </md-select>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEOPTIMIZATION"></span></div>\n                <div ng-messages="queueCampaignForm[\'dialPredictiveOptimization\'].$error" ng-show="queueCampaignForm[\'dialPredictiveOptimization\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.PREDICTIVEOPTIMIZATION_REQUIRED">PredictiveOptimization field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                <span translate="MOTIONDIALER.PREDICTIVEOPTIMIZATIONPERCENTAGE">PredictiveOptimizationPercentage</span>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEOPTIMIZATIONPERCENTAGE"></span></div>\n                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPredictiveOptimizationPercentage" min="1" max="95" step="0.1" class="md-accent">\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                <span translate="MOTIONDIALER.PREDICTIVEINTERVAL">PredictiveInterval</span>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEINTERVAL"></span></div>\n                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPredictiveInterval" min="5" max="30" step="1" class="md-accent">\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod != \'preview\'" class="md-block">\n                <label translate="MOTIONDIALER.MAXCONCURRENTCALLS">MaxConcurrentCalls</label>\n                <input type="number" name="dialLimitQueue" ng-model="vm.queueCampaign.dialLimitQueue" min="0" max="9999" ng-required="true">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.MAXCONCURRENTCALLS"></span></div>\n                <div ng-messages="queueCampaignForm[\'dialLimitQueue\'].$error" ng-show="queueCampaignForm[\'dialLimitQueue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_REQUIRED">MaxConcurrentCalls field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MaxConcurrentCalls must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_MUST_BE_LESS_THAN_OR_EQUAL_TO">MaxConcurrentCalls must be a valid greater or equal than</span> <span>9999</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                <label translate="MOTIONDIALER.QUEUETIMEOUT">QueueTimeout</label>\n                <input type="number" name="dialQueueTimeout" ng-model="vm.queueCampaign.dialQueueTimeout" min="1" max="999" ng-required="true">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.QUEUETIMEOUT"></span></div>\n                <div ng-messages="queueCampaignForm[\'dialQueueTimeout\'].$error" ng-show="queueCampaignForm[\'dialQueueTimeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_REQUIRED">QueueTimeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">QueueTimeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">QueueTimeout must be a valid greater or equal than</span> <span>999</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.AGENTTIMEOUT">AgentTimeout</label>\n                <input type="number" name="timeout" ng-model="vm.queueCampaign.timeout" min="0" ng-required="true">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AGENTTIMEOUT"></span></div>\n                <div ng-messages="queueCampaignForm[\'timeout\'].$error" ng-show="queueCampaignForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AGENTTIMEOUT_REQUIRED">AgentTimeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AGENTTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AgentTimeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.queueCampaign.description">\n\n                <div ng-messages="queueCampaignForm[\'description\'].$error" ng-show="queueCampaignForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newQueueCampaign" ng-click="vm.saveQueueCampaign()" class="send-button md-accent md-raised" ng-disabled="queueCampaignForm.$invalid || queueCampaignForm.$pristine" aria-label="SAVE" translate="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newQueueCampaign" ng-click="vm.addNewQueueCampaign()" class="send-button md-accent md-raised" ng-disabled="queueCampaignForm.$invalid" aria-label="ADD" translate="MOTIONDIALER.ADD_QUEUECAMPAIGN" translate-attr-aria-label="MOTIONDIALER.ADD_QUEUECAMPAIGN">\n                    ADD QUEUECAMPAIGN\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newQueueCampaign" ng-click="vm.deleteQueueCampaign($event)" aria-label="DELETE" translate translate-attr-aria-label="MOTIONDIALER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MOTIONDIALER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/agentadd/agentadd.html",'<md-dialog class="queueCampaign-dialog" aria-label="queueCampaign" ng-init="vm.onInit()">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.AGENTADD_QUEUECAMPAIGN">Add Agent to queueCampaign</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <md-input-container flex class="no-margin">\n                <label translate="MOTIONDIALER.PENALTY">Penalty</label>\n                <input name="penalty" ng-model="vm.penalty" placeholder="0" required md-minlength="0" md-maxlength="3">\n                <div ng-messages="queueCampaignForm.penalty.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span>You must supply a penalty.</span>\n                    </div>\n                    <div ng-message="md-minlength">\n                        <span>Min Penalty 0 characters.</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span>Max Penalty 3 characters.</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/blacklistadd/blacklistadd.html",'<md-dialog class="queueCampaign-dialog" aria-label="queueCampaign" ng-init="vm.onInit()">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.BLACKLISTADD_QUEUECAMPAIGN">Add List in QUEUECAMPAIGN</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect ng-hide="vm.loading" options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n            <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n                <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveLists()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/clone/clone.html",'<md-dialog class="queueCampaign-dialog" aria-label="Clone QueueCampaign">\n    <form name="queueCampaignForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.queueCampaign.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newQueueCampaign">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.NAME"></span></div>\n                <div ng-messages="queueCampaignForm[\'name\'].$error" ng-show="queueCampaignForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.queueCampaign.dialActive" aria-label="Active"><span translate="MOTIONDIALER.ACTIVE">Active</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <md-button type="submit" ng-click="vm.cloneQueueCampaign()" class="send-button md-accent md-raised" ng-disabled="queueCampaignForm.$invalid" aria-label="CLONE" translate="MOTIONDIALER.CLONE_QUEUECAMPAIGN" translate-attr-aria-label="MOTIONDIALER.CLONE_QUEUECAMPAIGN">\n                CLONE QUEUECAMPAIGN\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/hoppers/dialog.html",'<md-dialog class="hopper-dialog" aria-label="New Hopper">\n    <form name="hopperForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div class="md-block">\n                <label translate="MOTIONDIALER.SCHEDULEDAT">ScheduledAt</label>\n                <md-content layout="row" class="md-padding">\n                    <div flex class="md-block">\n                        <mdp-date-picker mdp-open-on-click name="scheduledatDate" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" ng-model="vm.hopper.scheduledat" ng-init="vm.hopper.scheduledat = vm.getDateFromString(vm.hopper.scheduledat)">\n                            <div ng-messages="hopperForm.dateRangeFrom.$error" ng-show="hopperForm.dateRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="MOTIONDIALER.ERRORS.DATE_REQUIRED">Date is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="MOTIONDIALER.ERRORS.DATE_INVALID">Date is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-date-picker>\n                    </div>\n                    <div flex class="md-block">\n                        <mdp-time-picker mdp-open-on-click name="scheduledatTime" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.hopper.scheduledat" ng-init="vm.hopper.scheduledat = vm.getDateFromString(vm.hopper.scheduledat)">\n                            <div ng-messages="hopperForm.timeRangeFrom.$error" ng-show="hopperForm.timeRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="MOTIONDIALER.ERRORS.TIME_REQUIRED">Time is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="MOTIONDIALER.ERRORS.TIME_INVALID">Time is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-time-picker>\n                    </div>\n                </md-content>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.PRIORITY">Priority</label>\n                <md-select name="priority" ng-model="vm.hopper.priority">\n                    <md-option ng-value="\'4\'">Highest</md-option>\n                    <md-option ng-value="\'3\'">High</md-option>\n                    <md-option ng-value="\'2\'">Medium</md-option>\n                    <md-option ng-value="\'1\'">Low</md-option>\n                    <md-option ng-value="\'0\'">Lowest</md-option>\n                </md-select>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.PRIORITY"></span></div>\n                <div ng-messages="hopperForm[\'priority\'].$error" ng-show="hopperForm[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.hopper.recallme" aria-label="RecallAgent"><span translate="MOTIONDIALER.RECALLAGENT">RecallAgent</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.hopper.recallme" class="md-block">\n                <label translate="MOTIONDIALER.AGENT">Agent</label>\n                <md-select name="UserId" ng-model="vm.hopper.UserId" required>\n                    <md-option ng-value="UserId.id" ng-repeat="UserId in vm.agents" ng-disabled="UserId.canSelect === false">{{ UserId.name }}</md-option>\n                </md-select>\n                <div ng-messages="hopperForm[\'UserId\'].$error" ng-show="hopperForm[\'UserId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newHopper" ng-click="vm.saveHopper()" class="send-button md-accent md-raised" ng-disabled="hopperForm.$invalid || hopperForm.$pristine" aria-label="SAVE" translate="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newHopper" ng-click="vm.addNewHopper()" class="send-button md-accent md-raised" ng-disabled="hopperForm.$invalid" aria-label="ADD" translate="MOTIONDIALER.ADD_HOPPER" translate-attr-aria-label="MOTIONDIALER.ADD_HOPPER">\n                    ADD HOPPER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newHopper" ng-click="vm.deleteHopper($event)" aria-label="DELETE" translate translate-attr-aria-label="MOTIONDIALER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MOTIONDIALER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/listadd/listadd.html",'<md-dialog class="queueCampaign-dialog" aria-label="queueCampaign" ng-init="vm.onInit()">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.LISTADD_QUEUECAMPAIGN">Add List in QUEUECAMPAIGN</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect ng-hide="vm.loading" options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n            <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n                <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveLists()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/resetlist/resetlist.html",'<md-dialog class="queueCampaign-dialog" aria-label="queueCampaign">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.RESETLIST ">Reset List</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-disabled="vm.loading" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ng-hide="vm.loading">\n            <div layout="row" layout-wrap flex>\n                <div flex-xs flex="50">\n                    <md-checkbox aria-label="Select All" ng-checked="vm.isChecked()" md-indeterminate="vm.isIndeterminate()" ng-click="vm.toggleAll()">\n                        <span ng-if="vm.isChecked()" translate="MOTIONDIALER.UNSELECTALL"></span>\n                        <span ng-if="!vm.isChecked()" translate="MOTIONDIALER.SELECTALL"></span>\n                    </md-checkbox>\n                </div>\n                <div flex-xs flex="50">\n                </div>\n                <div flex="{{vm.items.length > 10 ? 50 : 100 }}" ng-repeat="item in vm.items">\n                    <md-checkbox ng-checked="vm.exists(item, vm.selected)" ng-click="vm.toggle(item, vm.selected)">\n                        {{ item.name | limitTo:40 }}\n                    </md-checkbox>\n                </div>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions ng-hide="vm.loading" layout="row" layout-align="end center">\n            <div>\n            </div>\n            <md-button type="submit" ng-click="vm.listSelected()" class="send-button md-accent md-raised" ng-disabled="vm.loading" aria-label="RESET" translate="MOTIONDIALER.RESET" translate-attr-aria-label="MOTIONDIALER.RESET">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n        <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n            <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n        </div>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/teamadd/teamadd.html",'<md-dialog class="queueCampaign-dialog" aria-label="queueCampaign" ng-init="vm.onInit()">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <md-input-container flex class="no-margin">\n                <label translate="MOTIONDIALER.PENALTY">Penalty</label>\n                <input name="penalty" ng-model="vm.penalty" placeholder="0" required md-minlength="0" md-maxlength="3">\n                <div ng-messages="queueCampaignForm.penalty.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span>You must supply a penalty.</span>\n                    </div>\n                    <div ng-message="md-minlength">\n                        <span>Min Penalty 0 characters.</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span>Max Penalty 3 characters.</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/view.html",'<div id="motiondialer-queueCampaign" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-queueCampaigns-button md-icon-button" aria-label="Go to queueCampaigns" ng-click="vm.gotoQueueCampaigns()" translate translate-attr-aria-label="MOTIONDIALER.GO_TO_QUEUECAMPAIGNS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="queueCampaign-image" hide-xs>\n                    <img ng-src="assets/images/business/queueCampaigns.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.queueCampaign.id}}\n                        <span ng-if="vm.queueCampaign.name">{{vm.queueCampaign.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="MOTIONDIALER.CREATED_AT"></span> <span>{{vm.queueCampaign.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.clonedialog(vm.queueCampaign, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="clone">\n                <md-tooltip><span translate="MOTIONDIALER.CLONE_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.listadddialog(vm.queueCampaign, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="listadd">\n                <md-tooltip><span translate="MOTIONDIALER.LISTADD_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-format-list-numbers"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.blacklistadddialog(vm.queueCampaign, $event)" class="md-fab md-warn md-icon-button" aria-label="blacklistadd">\n                <md-tooltip><span translate="MOTIONDIALER.BLACKLISTADD_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-block-helper"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.queueCampaign, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="MOTIONDIALER.TEAMADD_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.queueCampaign, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="MOTIONDIALER.AGENTADD_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.resetlistdialog(vm.queueCampaign, $event)" class="md-fab md-warn md-icon-button" aria-label="resetlist">\n                <md-tooltip><span translate="MOTIONDIALER.RESETLIST_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-restore"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.queueCampaign, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="MOTIONDIALER.GOTO_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-cast"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveQueueCampaign()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (campaignForm.$invalid) || (queueForm.$invalid) || (originateForm.$invalid) || (globalForm.$invalid) || (congestionForm.$invalid) || (busyForm.$invalid) || (noanswerForm.$invalid) || (advancedForm.$invalid) || (advancedpreviewForm.$invalid) || (thresholdsForm.$invalid) || (recallmeForm.$invalid) || (globalintervalForm.$invalid) || (timezoneForm.$invalid) || (amdForm.$invalid) || (hopperStatisticsForm.$invalid) || (hoppersForm.$invalid) || (hopperHistoriesForm.$invalid) || (hopperFinalsForm.$invalid) || (hopperBlacksForm.$invalid)" translate="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="queueCampaign-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.queueCampaign.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MOTIONDIALER.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.dialActive" aria-label="Active" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.ACTIVE">Active</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.TRUNK">Trunk</label>\n                                <md-select name="TrunkId" ng-model="vm.queueCampaign.TrunkId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="TrunkId.id" ng-repeat="TrunkId in vm.trunks" ng-disabled="TrunkId.canSelect === false">{{ TrunkId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'TrunkId\'].$error" ng-show="generalForm[\'TrunkId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.BACKUPTRUNK">BackupTrunk</label>\n                                <md-select name="TrunkBackupId" ng-model="vm.queueCampaign.TrunkBackupId" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="TrunkBackupId.id" ng-repeat="TrunkBackupId in vm.trunks" ng-disabled="TrunkBackupId.canSelect === false">{{ TrunkBackupId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'TrunkBackupId\'].$error" ng-show="generalForm[\'TrunkBackupId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.BACKUPTRUNK_REQUIRED">BackupTrunk field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod != \'preview\'" class="md-block">\n                                <label translate="MOTIONDIALER.INTERVAL">Interval</label>\n                                <md-select name="IntervalId" ng-model="vm.queueCampaign.IntervalId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval" ng-disabled="IntervalId.canSelect === false">{{ IntervalId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'IntervalId\'].$error" ng-show="generalForm[\'IntervalId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.INTERVAL_REQUIRED">Interval field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CHECKDUPLICATE">CheckDuplicate</label>\n                                <md-select name="dialCheckDuplicateType" ng-model="vm.queueCampaign.dialCheckDuplicateType" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'always\'"> {{ \'MOTIONDIALER.ALWAYS\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'never\'"> {{ \'MOTIONDIALER.NEVER\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'onlyIfOpen\'"> {{ \'MOTIONDIALER.ONLY_IF_OPEN\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'dialCheckDuplicateType\'].$error" ng-show="generalForm[\'dialCheckDuplicateType\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CHECKDUPLICATE_REQUIRED">CheckDuplicate field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CUTDIGIT">CutDigit</label>\n                                <input type="number" name="dialCutDigit" ng-model="vm.queueCampaign.dialCutDigit" min="0" max="15" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'dialCutDigit\'].$error" ng-show="generalForm[\'dialCutDigit\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CUTDIGIT_REQUIRED">CutDigit field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CUTDIGIT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CutDigit must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CUTDIGIT_MUST_BE_LESS_THAN_OR_EQUAL_TO">CutDigit must be a valid greater or equal than</span> <span>15</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.queueCampaign.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.CAMPAIGN">CAMPAIGN</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="queueCampaign-detail-form-container campaign md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.CAMPAIGN">CAMPAIGN</div>\n                        </div>\n                        <form name="campaignForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.METHOD">Method</label>\n                                <md-select name="dialMethod" ng-model="vm.queueCampaign.dialMethod" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'progressive\'">Progressive</md-option>\n                                    <md-option ng-value="\'power\'">PowerDialing</md-option>\n                                    <md-option ng-value="\'predictive\'">Predictive</md-option>\n                                    <md-option ng-value="\'preview\'">Preview</md-option>\n                                    <md-option ng-value="\'booked\'">BookedProgressive</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.METHOD"></span></div>\n                                <div ng-messages="campaignForm[\'dialMethod\'].$error" ng-show="campaignForm[\'dialMethod\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.METHOD_REQUIRED">Method field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'power\'" class="md-block">\n                                <span translate="MOTIONDIALER.POWERLEVEL">PowerLevel</span>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.POWERLEVEL"></span></div>\n                                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPowerLevel" min="1" max="10" step="0.1" class="md-accent">\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                                <label translate="MOTIONDIALER.PREDICTIVEOPTIMIZATION">PredictiveOptimization</label>\n                                <md-select name="dialPredictiveOptimization" ng-model="vm.queueCampaign.dialPredictiveOptimization" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'agentBusyFactor\'"> {{ \'MOTIONDIALER.AGENTBUSYFACTOR\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'dropRate\'"> {{ \'MOTIONDIALER.DROPRATE\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEOPTIMIZATION"></span></div>\n                                <div ng-messages="campaignForm[\'dialPredictiveOptimization\'].$error" ng-show="campaignForm[\'dialPredictiveOptimization\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.PREDICTIVEOPTIMIZATION_REQUIRED">PredictiveOptimization field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                                <span translate="MOTIONDIALER.PREDICTIVEOPTIMIZATIONPERCENTAGE">PredictiveOptimizationPercentage</span>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEOPTIMIZATIONPERCENTAGE"></span></div>\n                                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPredictiveOptimizationPercentage" min="1" max="95" step="0.1" class="md-accent">\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                                <span translate="MOTIONDIALER.PREDICTIVEINTERVAL">PredictiveInterval</span>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEINTERVAL"></span></div>\n                                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPredictiveInterval" min="5" max="30" step="1" class="md-accent">\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod != \'preview\'" class="md-block">\n                                <label translate="MOTIONDIALER.MAXCONCURRENTCALLS">MaxConcurrentCalls</label>\n                                <input type="number" name="dialLimitQueue" ng-model="vm.queueCampaign.dialLimitQueue" min="0" max="9999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MAXCONCURRENTCALLS"></span></div>\n                                <div ng-messages="campaignForm[\'dialLimitQueue\'].$error" ng-show="campaignForm[\'dialLimitQueue\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_REQUIRED">MaxConcurrentCalls field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MaxConcurrentCalls must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_MUST_BE_LESS_THAN_OR_EQUAL_TO">MaxConcurrentCalls must be a valid greater or equal than</span> <span>9999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.AGENTTIMEOUT">AgentTimeout</label>\n                                <input type="number" name="timeout" ng-model="vm.queueCampaign.timeout" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.AGENTTIMEOUT"></span></div>\n                                <div ng-messages="campaignForm[\'timeout\'].$error" ng-show="campaignForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.AGENTTIMEOUT_REQUIRED">AgentTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.AGENTTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AgentTimeout must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="queueCampaign-detail-form-container queue md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.QUEUE">QUEUE</div>\n                        </div>\n                        <form name="queueForm" novalidate>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.QUEUEOPTIONS">QueueOptions</label>\n                                <input type="text" name="dialQueueOptions" ng-model="vm.queueCampaign.dialQueueOptions" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="queueForm[\'dialQueueOptions\'].$error" ng-show="queueForm[\'dialQueueOptions\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.QUEUEOPTIONS_REQUIRED">QueueOptions field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.QUEUETIMEOUT">QueueTimeout</label>\n                                <input type="number" name="dialQueueTimeout" ng-model="vm.queueCampaign.dialQueueTimeout" min="1" max="999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.QUEUETIMEOUT"></span></div>\n                                <div ng-messages="queueForm[\'dialQueueTimeout\'].$error" ng-show="queueForm[\'dialQueueTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_REQUIRED">QueueTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">QueueTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">QueueTimeout must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'booked\' || vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.queueCampaign.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'rrmemory\'">Round Robin Memory</md-option>\n                                    <md-option ng-value="\'roundrobin\'" ng-if="vm.queueCampaign.dialMethod === \'booked\'">Round Robin</md-option>\n                                    <md-option ng-value="\'leastrecent\'" ng-if="vm.queueCampaign.dialMethod !== \'booked\'">Least Recent</md-option>\n                                    <md-option ng-value="\'fewestcalls\'" ng-if="vm.queueCampaign.dialMethod !== \'booked\'">Fewest Calls</md-option>\n                                    <md-option ng-value="\'random\'" ng-if="vm.queueCampaign.dialMethod !== \'booked\'">Random</md-option>\n                                    <md-option ng-value="\'linear\'" ng-if="vm.queueCampaign.dialMethod !== \'booked\'">Linear</md-option>\n                                    <md-option ng-value="\'wrandom\'" ng-if="vm.queueCampaign.dialMethod !== \'booked\'">Weight Random</md-option>\n                                </md-select>\n                                <div ng-messages="queueForm[\'strategy\'].$error" ng-show="queueForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.RETRY">Retry</label>\n                                <input type="number" name="retry" ng-model="vm.queueCampaign.retry" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.RETRY"></span></div>\n                                <div ng-messages="queueForm[\'retry\'].$error" ng-show="queueForm[\'retry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.RETRY_REQUIRED">Retry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.RETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Retry must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.WRAPUPTIME">WrapupTime</label>\n                                <input type="number" name="wrapuptime" ng-model="vm.queueCampaign.wrapuptime" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.WRAPUPTIME"></span></div>\n                                <div ng-messages="queueForm[\'wrapuptime\'].$error" ng-show="queueForm[\'wrapuptime\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.WRAPUPTIME_REQUIRED">WrapupTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.WRAPUPTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WrapupTime must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.WEIGHT">Weight</label>\n                                <input type="number" name="weight" ng-model="vm.queueCampaign.weight" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.WEIGHT"></span></div>\n                                <div ng-messages="queueForm[\'weight\'].$error" ng-show="queueForm[\'weight\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.WEIGHT_REQUIRED">Weight field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.WEIGHT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Weight must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.MUSICONHOLD">MusicOnHold</label>\n                                <md-select name="musiconhold" ng-model="vm.queueCampaign.musiconhold" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="musiconhold.name" ng-repeat="musiconhold in vm.musiconholds" ng-disabled="musiconhold.canSelect === false">{{ musiconhold.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MUSICONHOLD"></span></div>\n                                <div ng-messages="queueForm[\'musiconhold\'].$error" ng-show="queueForm[\'musiconhold\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MUSICONHOLD_REQUIRED">MusicOnHold field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.CALLYSQUAREPROJECT">CallySquareProject</label>\n                                <md-select name="dialQueueProject" ng-model="vm.queueCampaign.dialQueueProject" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject.name" ng-repeat="dialQueueProject in vm.projects" ng-disabled="dialQueueProject.canSelect === false">{{ dialQueueProject.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CALLYSQUAREPROJECT"></span></div>\n                                <div ng-messages="queueForm[\'dialQueueProject\'].$error" ng-show="queueForm[\'dialQueueProject\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CALLYSQUAREPROJECT_REQUIRED">CallySquareProject field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.CALLYSQUAREPROJECT2">CallySquareProject2</label>\n                                <md-select name="dialQueueProject2" ng-model="vm.queueCampaign.dialQueueProject2" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject2.name" ng-repeat="dialQueueProject2 in vm.projects" ng-disabled="dialQueueProject2.canSelect === false">{{ dialQueueProject2.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CALLYSQUAREPROJECT2"></span></div>\n                                <div ng-messages="queueForm[\'dialQueueProject2\'].$error" ng-show="queueForm[\'dialQueueProject2\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CALLYSQUAREPROJECT2_REQUIRED">CallySquareProject2 field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'preview\' || vm.queueCampaign.dialMethod === \'booked\'" class="md-block">\n                                <label translate="MOTIONDIALER.CALLYSQUAREPROJECTPREVIEW">CallySquareProjectPreview</label>\n                                <md-select name="dialQueueProject" ng-model="vm.queueCampaign.dialQueueProject" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject.name" ng-repeat="dialQueueProject in vm.projects" ng-disabled="dialQueueProject.canSelect === false">{{ dialQueueProject.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CALLYSQUAREPROJECTPREVIEW"></span></div>\n                                <div ng-messages="queueForm[\'dialQueueProject\'].$error" ng-show="queueForm[\'dialQueueProject\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CALLYSQUAREPROJECTPREVIEW_REQUIRED">CallySquareProjectPreview field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'preview\' || vm.queueCampaign.dialMethod === \'booked\'" class="md-block">\n                                <label translate="MOTIONDIALER.CALLYSQUAREPROJECTPREVIEW2">CallySquareProjectPreview2</label>\n                                <md-select name="dialQueueProject2" ng-model="vm.queueCampaign.dialQueueProject2" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject2.name" ng-repeat="dialQueueProject2 in vm.projects" ng-disabled="dialQueueProject2.canSelect === false">{{ dialQueueProject2.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CALLYSQUAREPROJECTPREVIEW2"></span></div>\n                                <div ng-messages="queueForm[\'dialQueueProject2\'].$error" ng-show="queueForm[\'dialQueueProject2\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CALLYSQUAREPROJECTPREVIEW2_REQUIRED">CallySquareProjectPreview2 field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialQueueProject2 && (vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\')" class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.dialAgiAfterHangupAgent" aria-label="RunIfHangupAgent" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.RUNIFHANGUPAGENT">RunIfHangupAgent</span></md-switch>\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.RUNIFHANGUPAGENT"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="queueCampaign-detail-form-container originate md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.ORIGINATE">ORIGINATE</div>\n                        </div>\n                        <form name="originateForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.ORIGINATECALLERIDNAME">OriginateCallerIdName</label>\n                                <input type="text" name="dialOriginateCallerIdName" ng-model="vm.queueCampaign.dialOriginateCallerIdName" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATECALLERIDNAME"></span></div>\n                                <div ng-messages="originateForm[\'dialOriginateCallerIdName\'].$error" ng-show="originateForm[\'dialOriginateCallerIdName\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATECALLERIDNAME_REQUIRED">OriginateCallerIdName field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.ORIGINATECALLERIDNUMBER">OriginateCallerIdNumber</label>\n                                <input type="text" name="dialOriginateCallerIdNumber" ng-model="vm.queueCampaign.dialOriginateCallerIdNumber" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATECALLERIDNUMBER"></span></div>\n                                <div ng-messages="originateForm[\'dialOriginateCallerIdNumber\'].$error" ng-show="originateForm[\'dialOriginateCallerIdNumber\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATECALLERIDNUMBER_REQUIRED">OriginateCallerIdNumber field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.RANDOMLASTDIGITCALLERIDNUMBER">RandomLastDigitCallerIdNumber</label>\n                                <input type="number" name="dialRandomLastDigitCallerIdNumber" ng-model="vm.queueCampaign.dialRandomLastDigitCallerIdNumber" min="0" max="15" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.RANDOMLASTDIGITCALLERIDNUMBER"></span></div>\n                                <div ng-messages="originateForm[\'dialRandomLastDigitCallerIdNumber\'].$error" ng-show="originateForm[\'dialRandomLastDigitCallerIdNumber\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.RANDOMLASTDIGITCALLERIDNUMBER_REQUIRED">RandomLastDigitCallerIdNumber field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.RANDOMLASTDIGITCALLERIDNUMBER_MUST_BE_GREATER_THAN_OR_EQUAL_TO">RandomLastDigitCallerIdNumber must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.RANDOMLASTDIGITCALLERIDNUMBER_MUST_BE_LESS_THAN_OR_EQUAL_TO">RandomLastDigitCallerIdNumber must be a valid greater or equal than</span> <span>15</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.ORIGINATETIMEOUT">OriginateTimeout</label>\n                                <input type="number" name="dialOriginateTimeout" ng-model="vm.queueCampaign.dialOriginateTimeout" min="1" max="999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATETIMEOUT"></span></div>\n                                <div ng-messages="originateForm[\'dialOriginateTimeout\'].$error" ng-show="originateForm[\'dialOriginateTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATETIMEOUT_REQUIRED">OriginateTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATETIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">OriginateTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATETIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">OriginateTimeout must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.PREFIX">Prefix</label>\n                                <input type="text" name="dialPrefix" ng-model="vm.queueCampaign.dialPrefix" ng-pattern="/^\\d+$/" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREFIX"></span></div>\n                                <div ng-messages="originateForm[\'dialPrefix\'].$error" ng-show="originateForm[\'dialPrefix\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.PREFIX_REQUIRED">Prefix field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MOTIONDIALER.ERRORS.PREFIX_MUST_VALID_PATTERN" translate-values="{ regex: \'/^\\d+$/\' }">Prefix must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.RETRYANDFREQUENCY">RETRYANDFREQUENCY</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="queueCampaign-detail-form-container global md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.GLOBAL">GLOBAL</div>\n                        </div>\n                        <form name="globalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.GLOBALMAXRETRY">GlobalMaxRetry</label>\n                                <input type="number" name="dialGlobalMaxRetry" ng-model="vm.queueCampaign.dialGlobalMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.GLOBALMAXRETRY"></span></div>\n                                <div ng-messages="globalForm[\'dialGlobalMaxRetry\'].$error" ng-show="globalForm[\'dialGlobalMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALMAXRETRY_REQUIRED">GlobalMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">GlobalMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">GlobalMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="queueCampaign-detail-form-container congestion md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.CONGESTION">CONGESTION</div>\n                        </div>\n                        <form name="congestionForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CONGESTIONMAXRETRY">CongestionMaxRetry</label>\n                                <input type="number" name="dialCongestionMaxRetry" ng-model="vm.queueCampaign.dialCongestionMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CONGESTIONMAXRETRY"></span></div>\n                                <div ng-messages="congestionForm[\'dialCongestionMaxRetry\'].$error" ng-show="congestionForm[\'dialCongestionMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONMAXRETRY_REQUIRED">CongestionMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CongestionMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">CongestionMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CONGESTIONRETRYTIME">CongestionRetryTime</label>\n                                <input type="number" name="dialCongestionRetryFrequency" ng-model="vm.queueCampaign.dialCongestionRetryFrequency" min="1" max="99999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CONGESTIONRETRYTIME"></span></div>\n                                <div ng-messages="congestionForm[\'dialCongestionRetryFrequency\'].$error" ng-show="congestionForm[\'dialCongestionRetryFrequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONRETRYTIME_REQUIRED">CongestionRetryTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONRETRYTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CongestionRetryTime must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONRETRYTIME_MUST_BE_LESS_THAN_OR_EQUAL_TO">CongestionRetryTime must be a valid greater or equal than</span> <span>99999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="queueCampaign-detail-form-container busy md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.BUSY">BUSY</div>\n                        </div>\n                        <form name="busyForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.BUSYMAXRETRY">BusyMaxRetry</label>\n                                <input type="number" name="dialBusyMaxRetry" ng-model="vm.queueCampaign.dialBusyMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.BUSYMAXRETRY"></span></div>\n                                <div ng-messages="busyForm[\'dialBusyMaxRetry\'].$error" ng-show="busyForm[\'dialBusyMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYMAXRETRY_REQUIRED">BusyMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">BusyMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">BusyMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.BUSYRETRYTIME">BusyRetryTime</label>\n                                <input type="number" name="dialBusyRetryFrequency" ng-model="vm.queueCampaign.dialBusyRetryFrequency" min="1" max="99999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.BUSYRETRYTIME"></span></div>\n                                <div ng-messages="busyForm[\'dialBusyRetryFrequency\'].$error" ng-show="busyForm[\'dialBusyRetryFrequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYRETRYTIME_REQUIRED">BusyRetryTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYRETRYTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">BusyRetryTime must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYRETRYTIME_MUST_BE_LESS_THAN_OR_EQUAL_TO">BusyRetryTime must be a valid greater or equal than</span> <span>99999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="queueCampaign-detail-form-container noanswer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.NOANSWER">NOANSWER</div>\n                        </div>\n                        <form name="noanswerForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.NOANSWERMAXRETRY">NoAnswerMaxRetry</label>\n                                <input type="number" name="dialNoAnswerMaxRetry" ng-model="vm.queueCampaign.dialNoAnswerMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.NOANSWERMAXRETRY"></span></div>\n                                <div ng-messages="noanswerForm[\'dialNoAnswerMaxRetry\'].$error" ng-show="noanswerForm[\'dialNoAnswerMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERMAXRETRY_REQUIRED">NoAnswerMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">NoAnswerMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">NoAnswerMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.NOANSWERRETRYTIME">NoAnswerRetryTime</label>\n                                <input type="number" name="dialNoAnswerRetryFrequency" ng-model="vm.queueCampaign.dialNoAnswerRetryFrequency" min="1" max="99999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.NOANSWERRETRYTIME"></span></div>\n                                <div ng-messages="noanswerForm[\'dialNoAnswerRetryFrequency\'].$error" ng-show="noanswerForm[\'dialNoAnswerRetryFrequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERRETRYTIME_REQUIRED">NoAnswerRetryTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERRETRYTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">NoAnswerRetryTime must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERRETRYTIME_MUST_BE_LESS_THAN_OR_EQUAL_TO">NoAnswerRetryTime must be a valid greater or equal than</span> <span>99999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="queueCampaign-detail-form-container advanced md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.ADVANCED">ADVANCED</div>\n                        </div>\n                        <form name="advancedForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.acw" aria-label="AfterCallWork" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.AFTERCALLWORK">AfterCallWork</span></md-switch>\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.AFTERCALLWORK"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.acw" class="md-block">\n                                <label translate="MOTIONDIALER.AFTERCALLWORKDURATION">AfterCallWorkDuration</label>\n                                <input type="number" name="acwTimeout" ng-model="vm.queueCampaign.acwTimeout" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.AFTERCALLWORKDURATION"></span></div>\n                                <div ng-messages="advancedForm[\'acwTimeout\'].$error" ng-show="advancedForm[\'acwTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.AFTERCALLWORKDURATION_REQUIRED">AfterCallWorkDuration field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.AFTERCALLWORKDURATION_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AfterCallWorkDuration must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.AUTOPAUSE">AutoPause</label>\n                                <md-select name="autopause" ng-model="vm.queueCampaign.autopause" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'all\'"> {{ \'MOTIONDIALER.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'MOTIONDIALER.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.AUTOPAUSE"></span></div>\n                                <div ng-messages="advancedForm[\'autopause\'].$error" ng-show="advancedForm[\'autopause\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.AUTOPAUSE_REQUIRED">AutoPause field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.RINGINUSE">RingInUse</label>\n                                <md-select name="ringinuse" ng-model="vm.queueCampaign.ringinuse" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'MOTIONDIALER.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'MOTIONDIALER.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.RINGINUSE"></span></div>\n                                <div ng-messages="advancedForm[\'ringinuse\'].$error" ng-show="advancedForm[\'ringinuse\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.RINGINUSE_REQUIRED">RingInUse field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.MEMBERDELAY">MemberDelay</label>\n                                <input type="number" name="memberdelay" ng-model="vm.queueCampaign.memberdelay" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MEMBERDELAY"></span></div>\n                                <div ng-messages="advancedForm[\'memberdelay\'].$error" ng-show="advancedForm[\'memberdelay\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MEMBERDELAY_REQUIRED">MemberDelay field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.MEMBERDELAY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MemberDelay must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.TIMEOUTRESTART">TimeoutRestart</label>\n                                <md-select name="timeoutrestart" ng-model="vm.queueCampaign.timeoutrestart" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'MOTIONDIALER.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'MOTIONDIALER.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.TIMEOUTRESTART"></span></div>\n                                <div ng-messages="advancedForm[\'timeoutrestart\'].$error" ng-show="advancedForm[\'timeoutrestart\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.TIMEOUTRESTART_REQUIRED">TimeoutRestart field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.MONITORFORMAT">MonitorFormat</label>\n                                <md-select name="monitor_format" ng-model="vm.queueCampaign.monitor_format" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'\'">Inactive</md-option>\n                                    <md-option ng-value="\'wav\'">wav</md-option>\n                                    <md-option ng-value="\'wav49\'">wav49</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MONITORFORMAT"></span></div>\n                                <div ng-messages="advancedForm[\'monitor_format\'].$error" ng-show="advancedForm[\'monitor_format\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MONITORFORMAT_REQUIRED">MonitorFormat field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CONTEXT">Context</label>\n                                <input type="text" name="context" ng-model="vm.queueCampaign.context" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CONTEXT"></span></div>\n                                <div ng-messages="advancedForm[\'context\'].$error" ng-show="advancedForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.SETINTERFACEVARIABLES">SetInterfaceVariables</label>\n                                <md-select name="setinterfacevar" ng-model="vm.queueCampaign.setinterfacevar" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'MOTIONDIALER.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'MOTIONDIALER.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.SETINTERFACEVARIABLES"></span></div>\n                                <div ng-messages="advancedForm[\'setinterfacevar\'].$error" ng-show="advancedForm[\'setinterfacevar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.SETINTERFACEVARIABLES_REQUIRED">SetInterfaceVariables field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.SETQUEUEVARIABLES">SetQueueVariables</label>\n                                <md-select name="setqueuevar" ng-model="vm.queueCampaign.setqueuevar" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'MOTIONDIALER.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'MOTIONDIALER.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.SETQUEUEVARIABLES"></span></div>\n                                <div ng-messages="advancedForm[\'setqueuevar\'].$error" ng-show="advancedForm[\'setqueuevar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.SETQUEUEVARIABLES_REQUIRED">SetQueueVariables field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.SETQUEUEENTRYVARIABLES">SetQueueEntryVariables</label>\n                                <md-select name="setqueueentryvar" ng-model="vm.queueCampaign.setqueueentryvar" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'MOTIONDIALER.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'MOTIONDIALER.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.SETQUEUEENTRYVARIABLES"></span></div>\n                                <div ng-messages="advancedForm[\'setqueueentryvar\'].$error" ng-show="advancedForm[\'setqueueentryvar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.SETQUEUEENTRYVARIABLES_REQUIRED">SetQueueEntryVariables field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.DIALORDERBYSCHEDULEDAT">DialOrderByScheduledAt</label>\n                                <md-select name="dialOrderByScheduledAt" ng-model="vm.queueCampaign.dialOrderByScheduledAt" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'DESC\'"> {{ \'MOTIONDIALER.DESC\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'ASC\'"> {{ \'MOTIONDIALER.ASC\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.DIALORDERBYSCHEDULEDAT"></span></div>\n                                <div ng-messages="advancedForm[\'dialOrderByScheduledAt\'].$error" ng-show="advancedForm[\'dialOrderByScheduledAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.DIALORDERBYSCHEDULEDAT_REQUIRED">DialOrderByScheduledAt field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.mandatoryDisposition" class="md-block">\n                                <label translate="MOTIONDIALER.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.queueCampaign.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="advancedForm[\'mandatoryDispositionPauseId\'].$error" ng-show="advancedForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div ng-if="vm.queueCampaign.dialMethod === \'preview\' || vm.queueCampaign.dialMethod === \'booked\'" class="queueCampaign-detail-form-container advancedpreview md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.ADVANCEDPREVIEW">ADVANCEDPREVIEW</div>\n                        </div>\n                        <form name="advancedpreviewForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.acw" aria-label="AfterCallWork" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.AFTERCALLWORK">AfterCallWork</span></md-switch>\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.AFTERCALLWORK"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.acw" class="md-block">\n                                <label translate="MOTIONDIALER.AFTERCALLWORKDURATION">AfterCallWorkDuration</label>\n                                <input type="number" name="acwTimeout" ng-model="vm.queueCampaign.acwTimeout" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.AFTERCALLWORKDURATION"></span></div>\n                                <div ng-messages="advancedpreviewForm[\'acwTimeout\'].$error" ng-show="advancedpreviewForm[\'acwTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.AFTERCALLWORKDURATION_REQUIRED">AfterCallWorkDuration field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.AFTERCALLWORKDURATION_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AfterCallWorkDuration must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.MONITORFORMAT">MonitorFormat</label>\n                                <md-select name="monitor_format" ng-model="vm.queueCampaign.monitor_format" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'\'">Inactive</md-option>\n                                    <md-option ng-value="\'wav\'">wav</md-option>\n                                    <md-option ng-value="\'wav49\'">wav49</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MONITORFORMAT"></span></div>\n                                <div ng-messages="advancedpreviewForm[\'monitor_format\'].$error" ng-show="advancedpreviewForm[\'monitor_format\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MONITORFORMAT_REQUIRED">MonitorFormat field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.DIALORDERBYSCHEDULEDAT">DialOrderByScheduledAt</label>\n                                <md-select name="dialOrderByScheduledAt" ng-model="vm.queueCampaign.dialOrderByScheduledAt" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'DESC\'"> {{ \'MOTIONDIALER.DESC\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'ASC\'"> {{ \'MOTIONDIALER.ASC\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.DIALORDERBYSCHEDULEDAT"></span></div>\n                                <div ng-messages="advancedpreviewForm[\'dialOrderByScheduledAt\'].$error" ng-show="advancedpreviewForm[\'dialOrderByScheduledAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.DIALORDERBYSCHEDULEDAT_REQUIRED">DialOrderByScheduledAt field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.mandatoryDisposition" class="md-block">\n                                <label translate="MOTIONDIALER.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.queueCampaign.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="advancedpreviewForm[\'mandatoryDispositionPauseId\'].$error" ng-show="advancedpreviewForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div ng-if="vm.queueCampaign.dialMethod === \'predictive\'" class="queueCampaign-detail-form-container thresholds md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.THRESHOLDS">THRESHOLDS</div>\n                        </div>\n                        <form name="thresholdsForm" novalidate>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                                <span translate="MOTIONDIALER.PREDICTIVEMAXTHRESHOLD">PredictiveMaxThreshold</span>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEMAXTHRESHOLD"></span></div>\n                                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPredictiveIntervalMaxThreshold" min="1" max="100" step="1" class="md-accent">\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                                <span translate="MOTIONDIALER.PREDICTIVEMINTHRESHOLD">PredictiveMinThreshold</span>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEMINTHRESHOLD"></span></div>\n                                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPredictiveIntervalMinThreshold" min="1" max="100" step="1" class="md-accent">\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="queueCampaign-detail-form-container recallme md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.RECALLME">RECALLME</div>\n                        </div>\n                        <form name="recallmeForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.DIALRECALLMETIMEOUT">DialRecallMeTimeout</label>\n                                <input type="number" name="dialRecallMeTimeout" ng-model="vm.queueCampaign.dialRecallMeTimeout" min="1" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.DIALRECALLMETIMEOUT"></span></div>\n                                <div ng-messages="recallmeForm[\'dialRecallMeTimeout\'].$error" ng-show="recallmeForm[\'dialRecallMeTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.DIALRECALLMETIMEOUT_REQUIRED">DialRecallMeTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.DIALRECALLMETIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">DialRecallMeTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.dialRecallInQueue" aria-label="DialRecallInQueue" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.DIALRECALLINQUEUE">DialRecallInQueue</span></md-switch>\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.DIALRECALLINQUEUE"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div ng-if="vm.queueCampaign.dialMethod != \'preview\'" class="queueCampaign-detail-form-container globalinterval md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.GLOBALINTERVAL">GLOBALINTERVAL</div>\n                        </div>\n                        <form name="globalintervalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.GLOBALINTERVAL">GlobalInterval</label>\n                                <input type="text" name="dialGlobalInterval" ng-model="vm.queueCampaign.dialGlobalInterval" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.GLOBALINTERVAL"></span></div>\n                                <div ng-messages="globalintervalForm[\'dialGlobalInterval\'].$error" ng-show="globalintervalForm[\'dialGlobalInterval\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALINTERVAL_REQUIRED">GlobalInterval field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div ng-if="vm.queueCampaign.dialMethod != \'preview\'" class="queueCampaign-detail-form-container timezone md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.TIMEZONE">TIMEZONE</div>\n                        </div>\n                        <form name="timezoneForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.TIMEZONE">Timezone</label>\n                                <ms-timezone name="dialTimezone" ng-model="vm.queueCampaign.dialTimezone" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n                                    < <div class="hint"><span translate="MOTIONDIALER.HELP.TIMEZONE"></span>\n                    </div>\n                    <div ng-messages="timezoneForm[\'dialTimezone\'].$error" ng-show="timezoneForm[dialTimezone].$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="MOTIONDIALER.ERRORS.TIMEZONE_REQUIRED">Timezone field is required</span>\n                        </div>\n                    </div>\n                    </md-input-container>\n\n                    </form>\n    </div>\n    <div ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="queueCampaign-detail-form-container amd md-background-bg md-whiteframe-1dp">\n        <div class="pb-16" layout="row" layout-align="start center">\n            <div class="h2 secondary-text" translate="MOTIONDIALER.AMD">AMD</div>\n        </div>\n        <form name="amdForm" novalidate>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.queueCampaign.dialAMDActive" aria-label="AMDActive" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.AMDACTIVE">AMDActive</span></md-switch>\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDACTIVE"></span></div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDINITIALSILENCE">AMDInitialSilence</label>\n                <input type="number" name="dialAMDInitialSilence" ng-model="vm.queueCampaign.dialAMDInitialSilence" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDINITIALSILENCE"></span></div>\n                <div ng-messages="amdForm[\'dialAMDInitialSilence\'].$error" ng-show="amdForm[\'dialAMDInitialSilence\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDINITIALSILENCE_REQUIRED">AMDInitialSilence field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDINITIALSILENCE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDInitialSilence must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDGREETING">AMDGreeting</label>\n                <input type="number" name="dialAMDGreeting" ng-model="vm.queueCampaign.dialAMDGreeting" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDGREETING"></span></div>\n                <div ng-messages="amdForm[\'dialAMDGreeting\'].$error" ng-show="amdForm[\'dialAMDGreeting\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDGREETING_REQUIRED">AMDGreeting field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDGREETING_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDGreeting must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDAFTERGREETINGSILENCE">AMDAfterGreetingSilence</label>\n                <input type="number" name="dialAMDAfterGreetingSilence" ng-model="vm.queueCampaign.dialAMDAfterGreetingSilence" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDAFTERGREETINGSILENCE"></span></div>\n                <div ng-messages="amdForm[\'dialAMDAfterGreetingSilence\'].$error" ng-show="amdForm[\'dialAMDAfterGreetingSilence\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDAFTERGREETINGSILENCE_REQUIRED">AMDAfterGreetingSilence field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDAFTERGREETINGSILENCE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDAfterGreetingSilence must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDTOTALANALYSISTIME">AMDTotalAnalysisTime</label>\n                <input type="number" name="dialAMDTotalAnalysisTime" ng-model="vm.queueCampaign.dialAMDTotalAnalysisTime" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDTOTALANALYSISTIME"></span></div>\n                <div ng-messages="amdForm[\'dialAMDTotalAnalysisTime\'].$error" ng-show="amdForm[\'dialAMDTotalAnalysisTime\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDTOTALANALYSISTIME_REQUIRED">AMDTotalAnalysisTime field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDTOTALANALYSISTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDTotalAnalysisTime must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDMINWORDLENGTH">AMDMinWordLength</label>\n                <input type="number" name="dialAMDMinWordLength" ng-model="vm.queueCampaign.dialAMDMinWordLength" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDMINWORDLENGTH"></span></div>\n                <div ng-messages="amdForm[\'dialAMDMinWordLength\'].$error" ng-show="amdForm[\'dialAMDMinWordLength\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMINWORDLENGTH_REQUIRED">AMDMinWordLength field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMINWORDLENGTH_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDMinWordLength must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDBETWEENWORDSSILENCE">AMDBetweenWordsSilence</label>\n                <input type="number" name="dialAMDBetweenWordsSilence" ng-model="vm.queueCampaign.dialAMDBetweenWordsSilence" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDBETWEENWORDSSILENCE"></span></div>\n                <div ng-messages="amdForm[\'dialAMDBetweenWordsSilence\'].$error" ng-show="amdForm[\'dialAMDBetweenWordsSilence\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDBETWEENWORDSSILENCE_REQUIRED">AMDBetweenWordsSilence field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDBETWEENWORDSSILENCE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDBetweenWordsSilence must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDMAXIMUMNUMBEROFWORDS">AMDMaximumNumberOfWords</label>\n                <input type="number" name="dialAMDMaximumNumberOfWords" ng-model="vm.queueCampaign.dialAMDMaximumNumberOfWords" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDMAXIMUMNUMBEROFWORDS"></span></div>\n                <div ng-messages="amdForm[\'dialAMDMaximumNumberOfWords\'].$error" ng-show="amdForm[\'dialAMDMaximumNumberOfWords\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMNUMBEROFWORDS_REQUIRED">AMDMaximumNumberOfWords field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMNUMBEROFWORDS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDMaximumNumberOfWords must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDSILENCETHRESHOLD">AMDSilenceThreshold</label>\n                <input type="number" name="dialAMDSilenceThreshold" ng-model="vm.queueCampaign.dialAMDSilenceThreshold" min="0" max="32767" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDSILENCETHRESHOLD"></span></div>\n                <div ng-messages="amdForm[\'dialAMDSilenceThreshold\'].$error" ng-show="amdForm[\'dialAMDSilenceThreshold\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDSILENCETHRESHOLD_REQUIRED">AMDSilenceThreshold field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDSILENCETHRESHOLD_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDSilenceThreshold must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MOTIONDIALER.ERRORS.AMDSILENCETHRESHOLD_MUST_BE_LESS_THAN_OR_EQUAL_TO">AMDSilenceThreshold must be a valid greater or equal than</span> <span>32767</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDMAXIMUMWORDLENGTH">AMDMaximumWordLength</label>\n                <input type="number" name="dialAMDMaximumWordLength" ng-model="vm.queueCampaign.dialAMDMaximumWordLength" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDMAXIMUMWORDLENGTH"></span></div>\n                <div ng-messages="amdForm[\'dialAMDMaximumWordLength\'].$error" ng-show="amdForm[\'dialAMDMaximumWordLength\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMWORDLENGTH_REQUIRED">AMDMaximumWordLength field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMWORDLENGTH_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDMaximumWordLength must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n        </form>\n    </div>\n    </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.HOPPERS">HOPPERS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="queueCampaign-detail-form-container hopperstatistics md-background-bg md-whiteframe-1dp">\n                <div ng-controller="QueueCampaignHopperStatisticsController as vm_hs" ng-init="vm_hs.init(vm.queueCampaign)">\n                    <md-toolbar class="md-table-toolbar md-default">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERWIDGET">Hoppers</span>\n                            <div flex></div>\n                            <md-button class="md-icon-button" ng-click="vm_hs.init(vm.queueCampaign)" aria-label="refresh Hopper" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    \x3c!-- WIDGET GROUP --\x3e\n                    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n                        \x3c!-- WIDGET 1 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{(vm_hs.total || 0) + (vm_hs.closed || 0)}}</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.TOTAL\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 1 --\x3e\n\n                        \x3c!-- WIDGET 2 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{vm_hs.fresh || 0}} ({{vm_hs.total ? ((((vm_hs.fresh || 0) * 100)/((vm_hs.closed || 0) + (vm_hs.total || 0))) | number: 2) : 0}}%)</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.FRESH\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 2 --\x3e\n\n                        \x3c!-- WIDGET 3 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{vm_hs.total ? (vm_hs.total - (vm_hs.fresh || 0)) : 0}} ({{vm_hs.total ? ((((vm_hs.total - (vm_hs.fresh || 0)) * 100)/((vm_hs.closed || 0) + (vm_hs.total || 0))) | number: 2) : 0}}%)</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.OPEN\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 3 --\x3e\n\n                        \x3c!-- WIDGET 3 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{vm_hs.closed ? (vm_hs.closed || 0) : 0}} ({{vm_hs.closed ? ((((vm_hs.closed) * 100)/(vm_hs.closed + (vm_hs.total || 0))) | number: 2) : 0}}%)</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.CLOSED\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 3 --\x3e\n\n                    </div>\n                    \x3c!-- / WIDGET GROUP --\x3e\n                </div>\n\n            </div>\n            <div class="queueCampaign-detail-form-container hoppers md-background-bg md-whiteframe-1dp">\n                <div ng-controller="QueueCampaignHoppersController as vm_dc" ng-init="vm_dc.init(vm.queueCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedQueueCampaignHoppers.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERS">Hoppers</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getQueueCampaignHoppers()" aria-label="refresh Hoppers" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedQueueCampaignHoppers.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedQueueCampaignHoppers.length}} {{vm_dc.selectedQueueCampaignHoppers.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedQueueCampaignHoppers" csv-label="true" filename="queueCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedQueueCampaignHoppers($event)" aria-label="delete selected" translate translate-attr-label="QUEUECAMPAIGNS.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedQueueCampaignHoppers" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getQueueCampaignHoppers">\n                                <tr md-row>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="phone">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column md-order-by="countcongestionretry">{{ \'MOTIONDIALER.CONGESTION\' | translate }}</th>\n                                    <th md-column md-order-by="countbusyretry">{{ \'MOTIONDIALER.BUSY\' | translate }}</th>\n                                    <th md-column md-order-by="countnoanswerretry">{{ \'MOTIONDIALER.NOANSWER\' | translate }}</th>\n                                    <th md-column md-order-by="scheduledat">{{ \'MOTIONDIALER.SCHEDULEDAT\' | translate }}</th>\n                                    <th md-column md-order-by="priority">{{ \'MOTIONDIALER.PRIORITY\' | translate }}</th>\n                                    <th md-column md-order-by="recallme">{{ \'MOTIONDIALER.RECALLAGENT\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopper" md-select-id="id" ng-repeat="hopper in vm_dc.queueCampaignHoppers.rows">\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{hopper.ContactId}}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{hopper.phone}}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{hopper.countcongestionretry}}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{hopper.countbusyretry}}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{hopper.countnoanswerretry}}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{hopper.scheduledat | date:\'medium\'}}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{ vm_dc.arraypriority[hopper.priority].option }}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell class="recallme ">\n                                        <md-icon md-colors="{color: {{hopper.recallme ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{hopper.recallme? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                    </td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" translate="MOTIONDIALER.EDIT_HOPPER">\n                                                        Edit Hopper\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(hopper, $event)" translate="MOTIONDIALER.DELETE_HOPPER">\n                                                        Delete Hopper\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.queueCampaignHoppers.rows.length">\n                                    <td md-cell colspan="12">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPER_AVAILABLE">No hopper available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.queueCampaignHoppers.count}}" md-on-paginate="vm_dc.getQueueCampaignHoppers" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.HISTORY">HISTORY</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="queueCampaign-detail-form-container hopperhistories md-background-bg md-whiteframe-1dp">\n                <div ng-controller="QueueCampaignHopperHistoriesController as vm_dc" ng-init="vm_dc.init(vm.queueCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedQueueCampaignHopperHistories.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERHISTORIES">HopperHistories</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getQueueCampaignHopperHistories()" aria-label="refresh HopperHistories" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERHISTORIES">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedQueueCampaignHopperHistories.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedQueueCampaignHopperHistories.length}} {{vm_dc.selectedQueueCampaignHopperHistories.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedQueueCampaignHopperHistories" csv-label="true" filename="queueCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedQueueCampaignHopperHistories" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getQueueCampaignHopperHistories">\n                                <tr md-row>\n                                    <th md-column md-order-by="uniqueid">{{ \'MOTIONDIALER.UNIQUEID\' | translate }}</th>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="calleridnum">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column md-order-by="calleridname">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                                    <th md-column md-order-by="statedesc">{{ \'MOTIONDIALER.STATUS\' | translate }}</th>\n                                    <th md-column md-order-by="scheduledat">{{ \'MOTIONDIALER.SCHEDULEDAT\' | translate }}</th>\n                                    <th md-column md-order-by="starttime">{{ \'MOTIONDIALER.STARTTIME\' | translate }}</th>\n                                    <th md-column md-order-by="endtime">{{ \'MOTIONDIALER.ENDTIME\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopperHistory" md-select-id="id" ng-repeat="hopperHistory in vm_dc.queueCampaignHopperHistories.rows">\n                                    <td md-cell>{{hopperHistory.uniqueid}}</td>\n                                    <td md-cell>{{hopperHistory.ContactId}}</td>\n                                    <td md-cell>{{hopperHistory.calleridnum}}</td>\n                                    <td md-cell>{{hopperHistory.calleridname}}</td>\n                                    <td md-cell>{{hopperHistory.statedesc}}</td>\n                                    <td md-cell>{{hopperHistory.scheduledat | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperHistory.starttime | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperHistory.endtime | date:\'medium\'}}</td>\n                                    <td md-cell class="actions">\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.queueCampaignHopperHistories.rows.length">\n                                    <td md-cell colspan="11">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERHISTORY_AVAILABLE">No hopperhistory available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.queueCampaignHopperHistories.count}}" md-on-paginate="vm_dc.getQueueCampaignHopperHistories" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.FINAL">FINAL</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="queueCampaign-detail-form-container hopperfinals md-background-bg md-whiteframe-1dp">\n                <div ng-controller="QueueCampaignHopperFinalsController as vm_dc" ng-init="vm_dc.init(vm.queueCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedQueueCampaignHopperFinals.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERFINALS">HopperFinals</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getQueueCampaignHopperFinals()" aria-label="refresh HopperFinals" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERFINALS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                            <td md-cell class="actions">\n                                <md-menu>\n                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="vm_dc.countContactsQueueCampaignHopperFinal(vm_dc.query.id); $mdOpenMenu($event);">\n                                        <md-icon md-font-icon="icon-backup-restore"></md-icon>\n                                        <md-tooltip><span translate="MOTIONDIALER.RESTORECONTACTS"></span></md-tooltip>\n                                    </md-button>\n                                    <md-menu-content width="3">\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(3)">\n                                                <span translate="MOTIONDIALER.NOANSWER ">NoAnswer</span>\n                                                <span class="badge">({{vm_dc.contacts.noAnswerContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(5)">\n                                                <span translate="MOTIONDIALER.BUSY ">Busy</span>\n                                                <span class="badge">({{vm_dc.contacts.busyContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(8)">\n                                                <span translate="MOTIONDIALER.CONGESTION ">Congestion</span>\n                                                <span class="badge">({{vm_dc.contacts.congestionContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(10)">\n                                                <span translate="MOTIONDIALER.DROPPED ">Drop</span>\n                                                <span class="badge">({{vm_dc.contacts.dropContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(11)">\n                                                <span translate="MOTIONDIALER.ABANDONED ">Abandoned</span>\n                                                <span class="badge">({{vm_dc.contacts.abandonedContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(22)">\n                                                <span translate="MOTIONDIALER.RECALLFAILEDTIMEOUT">Recall</span>\n                                                <span class="badge">({{vm_dc.contacts.reCallContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(0)">\n                                                <span translate="MOTIONDIALER.NO_SUCH_NUMBER">NoSuchNumber</span>\n                                                <span class="badge">({{vm_dc.contacts.noSuchContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item>\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(19)">\n                                                <span translate="MOTIONDIALER.ANSWERING_MACHINE">AnsweringMachine</span>\n                                                <span class="badge">({{vm_dc.contacts.answeringMachine}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </td>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedQueueCampaignHopperFinals.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedQueueCampaignHopperFinals.length}} {{vm_dc.selectedQueueCampaignHopperFinals.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedQueueCampaignHopperFinals" csv-label="true" filename="queueCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.moveSelectedQueueCampaignHopperFinals($event)" aria-label="move selected" translate translate-attr-label="QUEUECAMPAIGNS.MOVE_SELECTED">\n                                <md-icon md-font-icon="icon-restore"></md-icon>\n                                <md-tooltip><span translate="MOTIONDIALER.RESTORECONTACTS"></span></md-tooltip>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedQueueCampaignHopperFinals" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getQueueCampaignHopperFinals">\n                                <tr md-row>\n                                    <th md-column md-order-by="uniqueid">{{ \'MOTIONDIALER.UNIQUEID\' | translate }}</th>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="calleridnum">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column md-order-by="calleridname">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                                    <th md-column md-order-by="statedesc">{{ \'MOTIONDIALER.STATUS\' | translate }}</th>\n                                    <th md-column md-order-by="countcongestionretry">{{ \'MOTIONDIALER.CONGESTION\' | translate }}</th>\n                                    <th md-column md-order-by="countbusyretry">{{ \'MOTIONDIALER.BUSY\' | translate }}</th>\n                                    <th md-column md-order-by="countnoanswerretry">{{ \'MOTIONDIALER.NOANSWER\' | translate }}</th>\n                                    <th md-column md-order-by="starttime">{{ \'MOTIONDIALER.STARTTIME\' | translate }}</th>\n                                    <th md-column md-order-by="endtime">{{ \'MOTIONDIALER.ENDTIME\' | translate }}</th>\n                                    <th md-column md-order-by="disposition">{{ \'MOTIONDIALER.DISPOSITION\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopperFinal" md-select-id="id" ng-repeat="hopperFinal in vm_dc.queueCampaignHopperFinals.rows">\n                                    <td md-cell>{{hopperFinal.uniqueid}}</td>\n                                    <td md-cell>{{hopperFinal.ContactId}}</td>\n                                    <td md-cell>{{hopperFinal.calleridnum}}</td>\n                                    <td md-cell>{{hopperFinal.calleridname}}</td>\n                                    <td md-cell>{{hopperFinal.statedesc}}</td>\n                                    <td md-cell>{{hopperFinal.countcongestionretry}}</td>\n                                    <td md-cell>{{hopperFinal.countbusyretry}}</td>\n                                    <td md-cell>{{hopperFinal.countnoanswerretry}}</td>\n                                    <td md-cell>{{hopperFinal.starttime | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperFinal.endtime | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperFinal.disposition}}</td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.moveConfirm(hopperFinal, $event)" translate="MOTIONDIALER.MOVE_HOPPERFINAL">\n                                                        Move HopperFinal\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.queueCampaignHopperFinals.rows.length">\n                                    <td md-cell colspan="23">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERFINAL_AVAILABLE">No hopperfinal available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.queueCampaignHopperFinals.count}}" md-on-paginate="vm_dc.getQueueCampaignHopperFinals" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.BLACKLIST">BLACKLIST</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="queueCampaign-detail-form-container hopperblacks md-background-bg md-whiteframe-1dp">\n                <div ng-controller="QueueCampaignHopperBlacksController as vm_dc" ng-init="vm_dc.init(vm.queueCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedQueueCampaignHopperBlacks.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERBLACKS">HopperBlacks</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedQueueCampaignHopperBlacks.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedQueueCampaignHopperBlacks.length}} {{vm_dc.selectedQueueCampaignHopperBlacks.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedQueueCampaignHopperBlacks" csv-label="true" filename="queueCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedQueueCampaignHopperBlacks" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getQueueCampaignHopperBlacks">\n                                <tr md-row>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="phone">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopperBlack" md-select-id="id" ng-repeat="hopperBlack in vm_dc.queueCampaignHopperBlacks.rows">\n                                    <td md-cell>{{hopperBlack.ContactId}}</td>\n                                    <td md-cell>{{hopperBlack.phone}}</td>\n                                    <td md-cell class="actions">\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.queueCampaignHopperBlacks.rows.length">\n                                    <td md-cell colspan="4">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERBLACK_AVAILABLE">No hopperblack available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.queueCampaignHopperBlacks.count}}" md-on-paginate="vm_dc.getQueueCampaignHopperBlacks" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    </md-tabs>\n\n</div>\n\x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/queueCampaigns.html",'<div id="queueCampaigns" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-fire" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="MOTIONDIALER.QUEUECAMPAIGNS">QueueCampaigns</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="MOTIONDIALER.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedQueueCampaigns.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedQueueCampaigns =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="MOTIONDIALER.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-queueCampaigns-count">\n                    <span>{{vm.selectedQueueCampaigns.length}}</span>\n                    <span translate="MOTIONDIALER.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="QUEUECAMPAIGNS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllQueueCampaigns()" translate="MOTIONDIALER.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectQueueCampaigns()" translate="MOTIONDIALER.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedQueueCampaigns" csv-label="true" filename="queueCampaigns.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedQueueCampaigns($event)" aria-label="delete selected" translate translate-attr-label="QUEUECAMPAIGNS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- QUEUECAMPAIGN TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedQueueCampaigns" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueueCampaigns">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'MOTIONDIALER.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                                <th md-column md-order-by="dialActive">{{ \'MOTIONDIALER.ACTIVE\' | translate }}</th>\n                                <th md-column md-order-by="TrunkId">{{ \'MOTIONDIALER.TRUNK\' | translate }}</th>\n                                <th md-column md-order-by="dialMethod">{{ \'MOTIONDIALER.METHOD\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'MOTIONDIALER.STRATEGY\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.queueCampaigns.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="queueCampaign" md-select-id="id" ng-repeat="queueCampaign in vm.queueCampaigns.rows">\n                                <td md-cell ng-if="queueCampaign.userpic"><img class="avatar" alt="{{queueCampaign.name}}" ng-src="api/users/{{queueCampaign.id}}/avatar" /></td>\n                                <td md-cell ng-if="!queueCampaign.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{queueCampaign.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(queueCampaign, ev) : vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="id ">{{queueCampaign.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(queueCampaign, ev) : vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="name ">{{queueCampaign.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(queueCampaign, ev) : vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="dialActive ">\n                                    <md-icon md-colors="{color: {{queueCampaign.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{queueCampaign.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(queueCampaign, ev) : vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="TrunkId ">{{ (vm.trunks | filter : {\'id\':queueCampaign.TrunkId} : true)[0].name }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(queueCampaign, ev) : vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="dialMethod ">{{ vm.arraydialMethod[queueCampaign.dialMethod].option }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(queueCampaign, ev) : vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="strategy ">{{ vm.arraystrategy[queueCampaign.strategy].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(queueCampaign, $event    )" translate="MOTIONDIALER.EDIT_QUEUECAMPAIGN">\n                                                    Edit QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.clonedialog(queueCampaign, $event    )" translate="MOTIONDIALER.CLONE_QUEUECAMPAIGN">\n                                                    clone QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.listadddialog(queueCampaign, $event    )" translate="MOTIONDIALER.LISTADD_QUEUECAMPAIGN">\n                                                    listadd QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.blacklistadddialog(queueCampaign, $event    )" translate="MOTIONDIALER.BLACKLISTADD_QUEUECAMPAIGN">\n                                                    blacklistadd QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(queueCampaign, $event    )" translate="MOTIONDIALER.TEAMADD_QUEUECAMPAIGN">\n                                                    teamadd QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(queueCampaign, $event    )" translate="MOTIONDIALER.AGENTADD_QUEUECAMPAIGN">\n                                                    agentadd QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(queueCampaign, $event    )" translate="MOTIONDIALER.DELETE_QUEUECAMPAIGN">\n                                                    Delete QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(queueCampaign, $event    )" translate="MOTIONDIALER.GOTOREALTIME_QUEUECAMPAIGN">\n                                                    goToRealtime QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.queueCampaigns.count}}" md-on-paginate="vm.getQueueCampaigns" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / QUEUECAMPAIGN TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD QUEUECAMPAIGN BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-queueCampaign-button" ng-click="vm.createOrEditQueueCampaign($event)" aria-label="add queueCampaign" translate translate-attr-aria-label="MOTIONDIALER.ADD_QUEUECAMPAIGN">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD QUEUECAMPAIGN BUTTON --\x3e\n</div>'),e.put("app/main/apps/motiondialer/views/realtime/abandonedcalls/view.html",'    <md-toolbar class="md-table-toolbar md-default table-header">\n        <div class="md-toolbar-tools" layout="row" layout-align="center center">\n            <span class="md-subhead" translate="DASHBOARDS.ABANDONEDQUEUECALLS">ABANDONED QUEUE CALLS</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.query.filter = undefined" debounce="300"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 black-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getContacts()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.lastAssignedTo" ng-change="vm.getContacts()">\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents.rows">{{agent.name}}</md-option>\n                </md-select>\n            </div>\n            <div ng-if="vm.queues.count" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_CAMPAIGN">Select a Campaign</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.queue" ng-change="vm.getContacts()">\n                    <md-option ng-value="undefined" ng-if="vm.queues.count > 1"><em translate="DASHBOARDS.ALL">All</em></md-option>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues.rows">{{queue.name}}</md-option>\n                </md-select>\n            </div>\n            <md-button class="md-icon-button" ng-click="vm.refresh && vm.refreshContacts($event)" aria-label="Reload" translate translate-attr-label="DASHBOARDS.RELOAD">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n                <md-tooltip ng-if="vm.showTooltip" md-visible="vm.showTooltip">{{\'DASHBOARDS.CLICKRELOAD\' | translate}}</md-tooltip>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getContacts">\n                <tr md-row>\n                    <th md-column md-order-by="id">ID</th>\n                    <th md-column md-order-by="calleridname">{{\'DASHBOARDS.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="calleridnum">{{\'DASHBOARDS.PHONE\' | translate}}</th>\n                    <th md-column md-order-by="queue">{{\'DASHBOARDS.QUEUE\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerabandonAt">{{\'DASHBOARDS.ABANDONAT\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerexitAt">{{\'DASHBOARDS.QUEUECALLEREXITAT\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerexitreason">{{\'DASHBOARDS.QUEUECALLEREXITREASON\' | translate}}</th>\n                    <th md-column md-order-by="lastAssignedTo">{{\'DASHBOARDS.LASTASSIGNEDTO\' | translate}}</th>\n                    <th md-column md-order-by="disposition">{{\'DASHBOARDS.DISPOSITION\' | translate}}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.contacts.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="contact in vm.contacts.rows">\n                    <td md-cell class="id">{{contact.id}}</td>\n                    <td md-cell class="firstName">{{contact.calleridname}}</td>\n                    <td md-cell class="list">{{contact.calleridnum}}</td>\n                    <td md-cell class="list">{{vm.queuesMap[contact.queue]}}</td>\n                    <td md-cell class="list">{{contact.queuecallerabandonAt ? (contact.queuecallerabandonAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{contact.queuecallerexitAt ? (contact.queuecallerexitAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{contact.queuecallerexitreason}}</td>\n                    <td md-cell class="list">{{contact.lastAssignedTo}}</td>\n                    <td md-cell class="list">{{contact.disposition}}</td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.ASSIGNTO">Assigned a</md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-if="contact.lastAssignedTo">\n                                                <md-button ng-click="vm.assignedA(contact)"><em translate="DASHBOARDS.NONE">Not Assigned</em></md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.agents.rows.length" ng-repeat="agent in vm.agents.rows">\n                                                <md-button ng-click="vm.assignedA(contact,agent)">{{agent.name}}</md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.DISPOSE">Dispose</md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-if="vm.dispositions.length > 0" ng-repeat="disposition in vm.dispositions">\n                                                <md-button ng-click="vm.disposed(contact, disposition.name)">{{disposition.name}}</md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.contacts.count}}" md-on-paginate="vm.getContacts" md-page-select></md-table-pagination>'),e.put("app/main/apps/motiondialer/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MOTIONDIALER.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'MOTIONDIALER.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'MOTIONDIALER.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'MOTIONDIALER.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'MOTIONDIALER.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'MOTIONDIALER.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'MOTIONDIALER.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'MOTIONDIALER.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'MOTIONDIALER.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'MOTIONDIALER.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'MOTIONDIALER.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'MOTIONDIALER.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'MOTIONDIALER.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"MOTIONDIALER.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"MOTIONDIALER.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"MOTIONDIALER.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"MOTIONDIALER.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"MOTIONDIALER.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"MOTIONDIALER.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"MOTIONDIALER.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"MOTIONDIALER.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'MOTIONDIALER.PAGE' | translate}}:', rowsPerPage: '{{'MOTIONDIALER.ROWSPERPAGE' | translate}}:', of: '{{'MOTIONDIALER.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/motiondialer/views/realtime/ivr_campaigns/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MOTIONDIALER.IVR_CAMPAIGNS">Ivr Campaigns</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getCampaigns">\n            <tr md-row>\n                <th md-column>{{\'MOTIONDIALER.NAME\' | translate}}</th>\n                <th md-column>{{\'MOTIONDIALER.TOTAL\' | translate}}</th>\n                <th md-column>{{\'MOTIONDIALER.TOTAL_MANAGED\' | translate}}</th>\n                <th md-column>{{\'MOTIONDIALER.LIMITED\' | translate}}</th>\n                <th md-column>{{\'MOTIONDIALER.ORIGINATED\' | translate}}</th>\n                <th md-column>{{\'MOTIONDIALER.MESSAGE\' | translate}}</th>\n                <th md-column>{{\'MOTIONDIALER.CALLYSQUAREPROJECT\' | translate}}</th>\n                <th md-column>{{ \'MOTIONDIALER.TRUNK\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.ACTIVE\' | translate }}</th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.campaigns">\n                <td md-cell colspan="8">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(id, campaign) in vm.campaigns">\n                <td md-cell>\n                    <span>{{campaign.name}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{campaign.ivrTotalCallsDays || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{campaign.ivrAnswerCallsDay || 0}} ({{(campaign.ivrTotalCallsDays) ? (campaign.ivrAnswerCallsDay || 0) * 100/(campaign.ivrTotalCallsDays ) : 0 | number:1}}%)</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{campaign.limitCalls || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{campaign.originated || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{campaign.message ? (\'MOTIONDIALER.\'+campaign.message | translate) : \'--\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{campaign.dialQueueProject || \'--\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{campaign.Trunk ? campaign.Trunk.name : \'--\'}}</span>\n                </td>\n                <td md-cell>\n                    <md-icon md-colors="{color: {{campaign.active ? \'\\\'green\\\'\' : \'\\\'red\\\'\'}}}" md-font-icon="{{campaign.active ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditIvrCampaign($event, campaign)" translate="MOTIONDIALER.EDIT_CAMPAIGN">\n                                    Edit Campaign\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getCampaigns" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/motiondialer/views/realtime/queue_calls/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MOTIONDIALER.QUEUE_CALLS">Queue Calls</span>\n        \x3c!-- <div flex></div>\n    <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar> --\x3e\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUES TABLE --\x3e\n<md-table-container>\n    <table md-table>\n        <thead md-head>\n            <tr md-row>\n                <th md-column width="30px"></th>\n                <th md-column>{{ \'MOTIONDIALER.DID\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.QUEUE\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.CALLER\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.AGENT\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.DURATION\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.getSize(vm.rpcVoiceQueuesChannels)">\n                <td md-cell colspan="6">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(key, channel) in vm.rpcVoiceQueuesChannels | limitObjectFromTo: vm.queryChannels.limit:(vm.queryChannels.page - 1) * vm.queryChannels.limit">\n                <td md-cell>\n                    <md-icon ng-if="channel.queuecallerleaveAt" md-font-icon="icon-phone-in-talk green-fg"></md-icon>\n                    <md-icon ng-if="!channel.queuecallerleaveAt" md-font-icon="icon-phone-incoming md-accent"></md-icon>\n                </td>\n                <td md-cell>{{channel.exten}}</td>\n                <td md-cell>{{channel.queue}}</td>\n                <td md-cell>{{channel.calleridnum}}</td>\n                <td md-cell>\n                    <span ng-if="channel.queuecallerleaveAt">\n                        {{channel.connectedlinename}}, {{channel.connectedlinenum}}\n                        <span class="text-boxed">\n                            <timer start-time="channel.queuecallerleaveAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </span>\n                    <span ng-if="!channel.queuecallerleaveAt" class="text-boxed">\n                        {{ \'MOTIONDIALER.WAITING_FOR_AGENT\' | translate }}\n                        <timer start-time="channel.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                    </span>\n                </td>\n                <td md-cell>\n                    <span class="text-boxed">\n                        <timer start-time="channel.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                    </span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="2">\n                            <md-menu-item>\n                                <md-button ng-click="vm.hangup(channel.uniqueid)" translate="MOTIONDIALER.HANGUP">\n                                    Hangup\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.redirectToNumber($event, channel.uniqueid)" translate="MOTIONDIALER.REDIRECT_TO_NUMBER">\n                                    Number\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click="$mdMenu.open()" translate="MOTIONDIALER.REDIRECT_TO_AGENT">Redirect to Agent</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-repeat="agent in vm.agents.rows">\n                                            <md-button ng-click="vm.redirectToAgent(channel.uniqueid, agent.name, agent.context)">{{agent.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.queryChannels.limit" md-page="vm.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm.getSize(vm.rpcVoiceQueuesChannels)}}" md-page-select></md-table-pagination>\n\x3c!-- / QUEUES TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/motiondialer/views/realtime/queue_params/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MOTIONDIALER.QUEUE_PARAMETERS">Params</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column>{{\'\n                                MOTIONDIALER.NAME\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.TOTAL\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.TOTAL_OFFERED\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.MANAGED\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.ABANDONED\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.DROPPED\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.AVG_HOLD_TIME\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.AVG_DURATION\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.AVG_BILLABLE\' | translate}}</th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="8">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(id, queue) in vm.queues">\n                <td md-cell>\n                    <span>{{queue.name}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{(queue.answered + queue.outboundNoAnswerCallsDay + queue.outboundBusyCallsDay + queue.outboundCongestionCallsDay + queue.outboundNoSuchCallsDay + queue.outboundUnknownCallsDay + queue.outboundDropCallsDayTimeout + queue.outboundDropCallsDayCallersExit + queue.outboundBlacklistCallsDay + queue.outboundOriginateFailureCallsDay + queue.outboundAnswerAgiCallsDay + queue.outboundReCallsDay + queue.outboundRejectCallsDay )|| 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{queue.total || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.answered || 0}} ({{(queue.answered) ? (100 - (((queue.outboundDropCallsDayTimeout || 0) * 100/(queue.total)) | number:1 ) - (((queue.outboundDropCallsDayCallersExit || 0) * 100/(queue.total )) | number:1 )  ) : 0 | number:1}}%)</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.outboundDropCallsDayCallersExit || 0}} ({{(queue.outboundDropCallsDayCallersExit) ? (queue.outboundDropCallsDayCallersExit || 0) * 100/(queue.total ) : 0 | number:1}}%)</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.outboundDropCallsDayTimeout || 0}} ({{(queue.outboundDropCallsDayTimeout) ? (queue.outboundDropCallsDayTimeout || 0) * 100/(queue.total) : 0 | number:1}}%)</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.total ? (queue.sumHoldTime / queue.total) : 0 | number: 0 | secToTime | date:\'HH:mm:ss\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.total ? (queue.sumDuration / queue.total) : 0 | number: 0 | secToTime | date:\'HH:mm:ss\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.answered ? ((queue.sumBillable || 0) / queue.answered) : 0 | number: 0 | secToTime | date:\'HH:mm:ss\'}}</span>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/motiondialer/views/realtime/queues/predictive/dialog.html",'<md-dialog class="predictive-dialog" aria-label="New predictive">\n    <md-toolbar class="md-accent md-hue-2">\n        <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n            <span class="title">{{ vm.queueCampaign.name }} Info</span>\n            <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <md-dialog-content class="text-center" ms-scroll>\n        <ds-widget-clock data-show-digital></ds-widget-clock>\n        <div ng-if="!vm.queueCampaign.startProgressive && !vm.queueCampaign.startPredictive">\n            <div class="md-title"><span translate="MOTIONDIALER.PREDICTIVE_IS_NOT_RUNNING">Predictive is not running</span></div>\n        </div>\n\n        <div ng-if="vm.queueCampaign.startProgressive && !vm.queueCampaign.startPredictive" class="m-10">\n            <div layout="row">\n                <div flex="" class="column">\n                    <div class="md-headline"><span translate="MOTIONDIALER.DATA_COLLECTION_IN_PROGRESSIVE">Data collection in progressive</span></div>\n                    <div class="md-subhead">({{vm.queueCampaign.dialPredictiveInterval}} minutes)</div>\n                </div>\n            </div>\n\n            <div layout="row">\n                <div flex="" class="column">\n                    <div class="md-subhead"><span translate="MOTIONDIALER.STARTTIME">Start Time</span></div>\n                    <div class="md-headline">{{ vm.setFormatTime(vm.queueCampaign.startProgressive) }}</div>\n                </div>\n                <div flex="" class="column">\n                    <div class="md-subhead"><span translate="MOTIONDIALER.ENDTIME">End Time</span></div>\n                    <div class="md-headline">\n                        {{ vm.addMinutes(vm.queueCampaign.startProgressive, vm.queueCampaign.dialPredictiveInterval) }}\n                    </div>\n                </div>\n            </div>\n            <div>\n                <span class="text-boxed blue-bg white-fg">\n                    {{vm.queueCampaign.message ? (\'MOTIONDIALER.\' + vm.queueCampaign.message | translate) : \'--\'}}\n                </span>\n            </div>\n        </div>\n        <div ng-if="vm.queueCampaign.startPredictive" class="m-10">\n            <div layout="row">\n                <div flex="" class="column">\n                    <div class="md-headline"><span translate="MOTIONDIALER.PREDICTIVE_IS_RUNNING">Predictive is runnning</span></div>\n                    <div class="md-subhead">({{vm.queueCampaign.dialPredictiveInterval}} minutes)</div>\n                </div>\n            </div>\n\n            <div layout="row">\n                <div flex="" class="column">\n                    <div class="md-subhead"><span translate="MOTIONDIALER.STARTTIME">Start Time</span></div>\n                    <div class="md-headline">{{ vm.setFormatTime(vm.queueCampaign.startPredictive) }}</div>\n                </div>\n                <div flex="" class="column">\n                    <div class="md-subhead"><span translate="MOTIONDIALER.ENDTIME">End Time</span></div>\n                    <div class="md-headline">\n                        {{ vm.addMinutes(vm.queueCampaign.startPredictive, vm.queueCampaign.dialPredictiveInterval) }}\n                    </div>\n                </div>\n            </div>\n            <div>\n                <span class="text-boxed blue-bg white-fg">\n                    {{vm.queueCampaign.message ? (\'MOTIONDIALER.\' + vm.queueCampaign.message | translate) : \'--\'}}\n                </span>\n            </div>\n            <div class="row">\n                <md-card>\n                    <md-toolbar class="md-table-toolbar md-default">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">Predictive - {{ \'MOTIONDIALER.PREVIOUS_INTERVAL\' | translate }}</span>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table>\n                            <tbody md-body>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.TOTAL_CALLS">Total Calls</span></td>\n                                    <td md-cell>{{ vm.queueCampaign.predictiveIntervalTotalCalls }}</td>\n                                </tr>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.ANSWERED_CALLS">Total Calls</span></td>\n                                    <td md-cell>{{ vm.queueCampaign.predictiveIntervalAnsweredCalls }}</td>\n                                </tr>\n                                \x3c!-- Temporaneamente non mostrate perchè contengono anche i dati dell\'intervallo corrente --\x3e\n                                \x3c!-- <tr md-row>\n                                    <td md-cell>Dropped Calls Timeout</td>\n                                    <td md-cell>{{ vm.queueCampaign.predictiveIntervalDroppedCallsTimeout }}</td>\n                                </tr>\n                                <tr md-row>\n                                    <td md-cell>Dropped Calls Caller Exit</td>\n                                    <td md-cell>{{ vm.queueCampaign.predictiveIntervalDroppedCallsCallersExit }}\n                                    </td>\n                                </tr> --\x3e\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.AVG_HOLD_TIME">AVG Hold Time</span></td>\n                                    <td md-cell>~ {{ vm.queueCampaign.predictiveIntervalAvgHoldtime | number:0 }}s</td>\n                                </tr>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.AVG_TALK_TIME">AVG Talk Time</span></td>\n                                    <td md-cell>~ {{ vm.queueCampaign.predictiveIntervalAvgTalktime | number:0 }}s</td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                </md-card>\n                <md-card>\n                    <md-toolbar class="md-table-toolbar md-default">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">ErlangB - {{ \'MOTIONDIALER.CURRENT_INTERVAL\' | translate }}</span>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table>\n                            <tbody md-body>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.SCHEDULED_CALLS">Scheduled Calls</span></td>\n                                    <td md-cell>{{ vm.queueCampaign.erlangCalls }}</td>\n                                </tr>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.ONE_CALL_EVERY">One call every</span></td>\n                                    <td md-cell>~ {{ vm.queueCampaign.erlangCallToSecond | number:0 }}s</td>\n                                </tr>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.DROPRATE">Drop Rate</span></td>\n                                    <td md-cell>{{ vm.queueCampaign.erlangAbandonmentRate * 100 | number:2 }}%</td>\n                                </tr>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.AGENTBUSYFACTOR">Agent Busy Factor</span></td>\n                                    <td md-cell>{{ vm.queueCampaign.erlangBusyFactor * 100 | number:2 }}%</td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                </md-card>\n            </div>\n        </div>\n\n\n    </md-dialog-content>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MOTIONDIALER.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.READY\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.WAITING\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.TALKING\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.ORIGINATED\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.MESSAGE\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.METHOD\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.TRUNK\' | translate }}</th>\n                <th md-column md-order-by="dialActive">{{ \'MOTIONDIALER.ACTIVE\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="12">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{(vm.queues[value].talking || 0)  +  (vm.queues[value].pTalking || 0)}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].originated || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].message ? (\'MOTIONDIALER.\'+vm.queues[value].message | translate) : \'--\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].dialMethod || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].Trunk ? vm.queues[value].Trunk.name : \'--\'}}</span>\n                </td>\n                <td md-cell>\n                    <md-icon md-colors="{color: {{vm.queues[value].dialActive ? \'\\\'green\\\'\' : \'\\\'red\\\'\'}}}" md-font-icon="{{vm.queues[value].dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditMotionDialerQueue($event, vm.queues[value])" translate="MOTIONDIALER.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item ng-if="vm.queues[value].dialMethod == \'predictive\'">\n                                <md-button ng-click="vm.showPredictiveQueueCampaignInfo($event, vm.queues[value])" translate="MOTIONDIALER.SHOW_PREDICTIVE_QUEUE_CAMPAIGN_INFO">\n                                    Show Predictive Info\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="MOTIONDIALER.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/motiondialer/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.QUEUE_CALLS">Queue Calls</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.ABANDONEDCALLS">Abandoned Queue Calls</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.QUEUE_PARAMS">Queue Parameters</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.IVR_CAMPAIGNS">Ivr Campaigns</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/create/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.openchannelAccount.name" ng-required="true" autofocus ng-disabled="!vm.newOpenchannelAccount">\n\n                <div ng-messages="openchannelAccountForm[\'name\'].$error" ng-show="openchannelAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.KEY">key</label>\n                <input type="text" name="key" ng-model="vm.openchannelAccount.key" md-maxlength="5" ng-required="true">\n\n                <div ng-messages="openchannelAccountForm[\'key\'].$error" ng-show="openchannelAccountForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.KEY_REQUIRED">key field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="OPENCHANNEL.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.REPLYURI">replyUri</label>\n                <input type="url" name="replyUri" ng-model="vm.openchannelAccount.replyUri">\n\n                <div class="hint"><span translate="OPENCHANNEL.HELP.REPLYURI"></span></div>\n                <div ng-messages="openchannelAccountForm[\'replyUri\'].$error" ng-show="openchannelAccountForm[\'replyUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.REPLYURI_REQUIRED">replyUri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="OPENCHANNEL.ERRORS.REPLYURI_MUST_VALID_URL">replyUri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.LIST">List</label>\n                <md-select name="ListId" ng-model="vm.openchannelAccount.ListId" required>\n                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                </md-select>\n                <div class="hint"><span translate="OPENCHANNEL.HELP.LIST"></span></div>\n                <div ng-messages="openchannelAccountForm[\'ListId\'].$error" ng-show="openchannelAccountForm[\'ListId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.openchannelAccount.description">\n\n                <div ng-messages="openchannelAccountForm[\'description\'].$error" ng-show="openchannelAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newOpenchannelAccount" ng-click="vm.saveOpenchannelAccount()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountForm.$invalid || openchannelAccountForm.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newOpenchannelAccount" ng-click="vm.addNewOpenchannelAccount()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountForm.$invalid" aria-label="ADD" translate="OPENCHANNEL.ADD_OPENCHANNELACCOUNT" translate-attr-aria-label="OPENCHANNEL.ADD_OPENCHANNELACCOUNT">\n                    ADD OPENCHANNELACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newOpenchannelAccount" ng-click="vm.deleteOpenchannelAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="OPENCHANNEL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="OPENCHANNEL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/agentadd/agentadd.html",'<md-dialog class="openchannelAccount-dialog" aria-label="openchannelAccount" ng-init="vm.onInit()">\n    <form name="openchannelAccountForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="OPENCHANNEL.AGENTADD_OPENCHANNELACCOUNT">Add Agent to openchannelAccount</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/agent/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.AGENT">Agent</label>\n                <md-select name="agent" ng-model="vm.agent.agent" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents" ng-disabled="agent.canSelect === false">{{ agent.name }}</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'agent\'].$error" ng-show="openchannelAccountFormApp[\'agent\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.agent.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'timeout\'].$error" ng-show="openchannelAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="OPENCHANNEL.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="OPENCHANNEL.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/amazonlex/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.ACCESSKEYID">accesskeyid</label>\n                <input type="text" name="accesskeyid" ng-model="vm.amazonlex.accesskeyid" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'accesskeyid\'].$error" ng-show="openchannelAccountFormApp[\'accesskeyid\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.ACCESSKEYID_REQUIRED">accesskeyid field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.SECRETACCESSKEY">secretaccesskey</label>\n                <input type="text" name="secretaccesskey" ng-model="vm.amazonlex.secretaccesskey" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'secretaccesskey\'].$error" ng-show="openchannelAccountFormApp[\'secretaccesskey\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.SECRETACCESSKEY_REQUIRED">secretaccesskey field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.LEXREGION">lexregion</label>\n                <md-select name="lexregion" ng-model="vm.amazonlex.lexregion" required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'us-east-1\'">US East (N. Virginia)</md-option>\n                    <md-option ng-value="\'us-west-2\'">US West (Oregon)</md-option>\n                    <md-option ng-value="\'eu-west-1\'">EU (Ireland)</md-option>\n                    <md-option ng-value="\'ap-southeast-2\'">Asia Pacific (Sydney)</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'lexregion\'].$error" ng-show="openchannelAccountFormApp[\'lexregion\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.LEXREGION_REQUIRED">lexregion field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.BOTNAME">botname</label>\n                <input type="text" name="botname" ng-model="vm.amazonlex.botname" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'botname\'].$error" ng-show="openchannelAccountFormApp[\'botname\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.BOTNAME_REQUIRED">botname field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.WELCOMEMESSAGE">welcomemessage</label>\n                <textarea name="welcomemessage" ng-model="vm.amazonlex.welcomemessage" md-maxlength="255"></textarea>\n                <div class="hint"><span translate="OPENCHANNEL.HELP.WELCOMEMESSAGE"></span></div>\n\n                <div ng-messages="openchannelAccountFormApp[\'welcomemessage\'].$error" ng-show="openchannelAccountFormApp[\'welcomemessage\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.WELCOMEMESSAGE_REQUIRED">welcomemessage field is required</span>\n                    </div>\n\n\n                    <div ng-message="md-maxlength">\n                        <span translate="OPENCHANNEL.ERRORS.WELCOMEMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>welcomemessage must have a maximum length equal to 255</span>\n                    </div>\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/autoreply/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.TIMES">times</label>\n                <md-select name="times" ng-model="vm.autoreply.times" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="1">One Time</md-option>\n                    <md-option ng-value="0">Always</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'times\'].$error" ng-show="openchannelAccountFormApp[\'times\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TIMES_REQUIRED">times field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.TEXT">Text</label>\n                <textarea name="text" ng-model="vm.autoreply.text" required></textarea>\n\n                <div ng-messages="openchannelAccountFormApp[\'text\'].$error" ng-show="openchannelAccountFormApp[\'text\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TEXT_REQUIRED">Text field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/close/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.DISPOSITION">Disposition</label>\n                <input type="text" name="disposition" ng-model="vm.close.disposition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'disposition\'].$error" ng-show="openchannelAccountFormApp[\'disposition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.DISPOSITION_REQUIRED">Disposition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/dialogflow/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.KEY">Key</label>\n                <input type="text" name="key" ng-model="vm.dialogflow.key" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'key\'].$error" ng-show="openchannelAccountFormApp[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.LANGUAGE">language</label>\n                <md-select name="language" ng-model="vm.dialogflow.language" required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'da\'">Danish</md-option>\n                    <md-option ng-value="\'en\'">English</md-option>\n                    <md-option ng-value="\'de\'">German</md-option>\n                    <md-option ng-value="\'it\'">Italian</md-option>\n                    <md-option ng-value="\'es\'">Spanish</md-option>\n                    <md-option ng-value="\'fr\'">French</md-option>\n                    <md-option ng-value="\'id\'">Indonesian</md-option>\n                    <md-option ng-value="\'ja\'">Japanese</md-option>\n                    <md-option ng-value="\'ko\'">Korean (South Korea)</md-option>\n                    <md-option ng-value="\'nl\'">Dutch</md-option>\n                    <md-option ng-value="\'no\'">Norwegian</md-option>\n                    <md-option ng-value="\'pt\'">Portuguese (European)</md-option>\n                    <md-option ng-value="\'pt-br\'">Portuguese (Nrazilian)</md-option>\n                    <md-option ng-value="\'ru\'">Russian</md-option>\n                    <md-option ng-value="\'sv\'">Swedish</md-option>\n                    <md-option ng-value="\'th\'">Thai</md-option>\n                    <md-option ng-value="\'uk\'">Ukrainian</md-option>\n                    <md-option ng-value="\'zh-CN\'">Chinese (Simplified)</md-option>\n                    <md-option ng-value="\'zh-HK\'">Chinese (Hong Kong)</md-option>\n                    <md-option ng-value="\'zh-TW\'">Chinese (Traditional)</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'language\'].$error" ng-show="openchannelAccountFormApp[\'language\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.LANGUAGE_REQUIRED">language field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.WELCOMEMESSAGE">welcomemessage</label>\n                <textarea name="welcomemessage" ng-model="vm.dialogflow.welcomemessage" md-maxlength="255"></textarea>\n                <div class="hint"><span translate="OPENCHANNEL.HELP.WELCOMEMESSAGE"></span></div>\n\n                <div ng-messages="openchannelAccountFormApp[\'welcomemessage\'].$error" ng-show="openchannelAccountFormApp[\'welcomemessage\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.WELCOMEMESSAGE_REQUIRED">welcomemessage field is required</span>\n                    </div>\n\n\n                    <div ng-message="md-maxlength">\n                        <span translate="OPENCHANNEL.ERRORS.WELCOMEMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>welcomemessage must have a maximum length equal to 255</span>\n                    </div>\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/gotoif/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.CONDITION">Condition</label>\n                <input type="text" name="condition" ng-model="vm.gotoif.condition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'condition\'].$error" ng-show="openchannelAccountFormApp[\'condition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.CONDITION_REQUIRED">Condition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.TRUEPRIORITY">truepriority</label>\n                <input type="number" name="truepriority" ng-model="vm.gotoif.truepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'truepriority\'].$error" ng-show="openchannelAccountFormApp[\'truepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TRUEPRIORITY_REQUIRED">truepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="OPENCHANNEL.ERRORS.TRUEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">truepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.FALSEPRIORITY">falsepriority</label>\n                <input type="number" name="falsepriority" ng-model="vm.gotoif.falsepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'falsepriority\'].$error" ng-show="openchannelAccountFormApp[\'falsepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.FALSEPRIORITY_REQUIRED">falsepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="OPENCHANNEL.ERRORS.FALSEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">falsepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/gotop/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.PRIORITY">Priority</label>\n                <input type="number" name="priority" ng-model="vm.gotop.priority" min="0" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'priority\'].$error" ng-show="openchannelAccountFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="OPENCHANNEL.ERRORS.PRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Priority must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/noop/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.noop.value" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'value\'].$error" ng-show="openchannelAccountFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/queue/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'queue\'].$error" ng-show="openchannelAccountFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'timeout\'].$error" ng-show="openchannelAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="OPENCHANNEL.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="OPENCHANNEL.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/system/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.COMMAND">Command</label>\n                <input type="text" name="command" ng-model="vm.system.command" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'command\'].$error" ng-show="openchannelAccountFormApp[\'command\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.COMMAND_REQUIRED">Command field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.VARIABLE">Variable</label>\n                <md-select name="variable" ng-model="vm.system.variable" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables" ng-disabled="variable.canSelect === false">{{ variable.name }}</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'variable\'].$error" ng-show="openchannelAccountFormApp[\'variable\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/tag/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.TAG">Tag</label>\n                <md-select name="tag" ng-model="vm.tag.tag" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags" ng-disabled="tag.canSelect === false">{{ tag.name }}</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'tag\'].$error" ng-show="openchannelAccountFormApp[\'tag\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TAG_REQUIRED">Tag field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/openchannelCannedAnswers/dialog.html",'<md-dialog class="openchannelCannedAnswer-dialog" aria-label="New OpenchannelCannedAnswer">\n    <form name="openchannelCannedAnswerForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.KEY">Key</label>\n                <input type="" name="key" ng-model="vm.openchannelCannedAnswer.key" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="openchannelCannedAnswerForm[\'key\'].$error" ng-show="openchannelCannedAnswerForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.VALUE">Value</label>\n                <textarea name="value" ng-model="vm.openchannelCannedAnswer.value" required></textarea>\n\n                <div ng-messages="openchannelCannedAnswerForm[\'value\'].$error" ng-show="openchannelCannedAnswerForm[\'value\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.openchannelCannedAnswer.description">\n\n                <div ng-messages="openchannelCannedAnswerForm[\'description\'].$error" ng-show="openchannelCannedAnswerForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newOpenchannelCannedAnswer" ng-click="vm.saveOpenchannelCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="openchannelCannedAnswerForm.$invalid || openchannelCannedAnswerForm.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newOpenchannelCannedAnswer" ng-click="vm.addNewOpenchannelCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="openchannelCannedAnswerForm.$invalid" aria-label="ADD" translate="OPENCHANNEL.ADD_OPENCHANNELCANNEDANSWER" translate-attr-aria-label="OPENCHANNEL.ADD_OPENCHANNELCANNEDANSWER">\n                    ADD OPENCHANNELCANNEDANSWER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newOpenchannelCannedAnswer" ng-click="vm.deleteOpenchannelCannedAnswer($event)" aria-label="DELETE" translate translate-attr-aria-label="OPENCHANNEL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="OPENCHANNEL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/openchannelDispositions/dialog.html",'<md-dialog class="openchannelDisposition-dialog" aria-label="New OpenchannelDisposition">\n    <form name="openchannelDispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.openchannelDisposition.name" ng-required="true" autofocus>\n\n                <div ng-messages="openchannelDispositionForm[\'name\'].$error" ng-show="openchannelDispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newOpenchannelDisposition" ng-click="vm.saveOpenchannelDisposition()" class="send-button md-accent md-raised" ng-disabled="openchannelDispositionForm.$invalid || openchannelDispositionForm.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newOpenchannelDisposition" ng-click="vm.addNewOpenchannelDisposition()" class="send-button md-accent md-raised" ng-disabled="openchannelDispositionForm.$invalid" aria-label="ADD" translate="OPENCHANNEL.ADD_OPENCHANNELDISPOSITION" translate-attr-aria-label="OPENCHANNEL.ADD_OPENCHANNELDISPOSITION">\n                    ADD OPENCHANNELDISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newOpenchannelDisposition" ng-click="vm.deleteOpenchannelDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="OPENCHANNEL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="OPENCHANNEL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/view.html",'<div id="openchannel-openchannelAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-openchannelAccounts-button md-icon-button" aria-label="Go to openchannelAccounts" ng-click="vm.gotoOpenchannelAccounts()" translate translate-attr-aria-label="OPENCHANNEL.GO_TO_OPENCHANNELACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="openchannelAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/openchannelAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.openchannelAccount.id}}\n                        <span ng-if="vm.openchannelAccount.name">{{vm.openchannelAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="OPENCHANNEL.CREATED_AT"></span> <span>{{vm.openchannelAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.openchannelAccount, $event)" class="md-fab md-warn md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="OPENCHANNEL.AGENTADD_OPENCHANNELACCOUNT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveOpenchannelAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (proxyForm.$invalid) || (dispositionForm.$invalid) || (openchannelDispositionsForm.$invalid) || (openchannelCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="OPENCHANNEL.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.openchannelAccount.name" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.KEY">key</label>\n                                <input type="text" name="key" ng-model="vm.openchannelAccount.key" md-maxlength="5" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'key\'].$error" ng-show="generalForm[\'key\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.KEY_REQUIRED">key field is required</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="OPENCHANNEL.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.REPLYURI">replyUri</label>\n                                <input type="url" name="replyUri" ng-model="vm.openchannelAccount.replyUri" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="OPENCHANNEL.HELP.REPLYURI"></span></div>\n                                <div ng-messages="generalForm[\'replyUri\'].$error" ng-show="generalForm[\'replyUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.REPLYURI_REQUIRED">replyUri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="OPENCHANNEL.ERRORS.REPLYURI_MUST_VALID_URL">replyUri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.LIST">List</label>\n                                <md-select name="ListId" ng-model="vm.openchannelAccount.ListId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="OPENCHANNEL.HELP.LIST"></span></div>\n                                <div ng-messages="generalForm[\'ListId\'].$error" ng-show="generalForm[\'ListId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.LIST_REQUIRED">List field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.WAITFORTHEASSIGNEDAGENT">WaitForTheAssignedAgent</label>\n                                <input type="number" name="waitForTheAssignedAgent" ng-model="vm.openchannelAccount.waitForTheAssignedAgent" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'waitForTheAssignedAgent\'].$error" ng-show="generalForm[\'waitForTheAssignedAgent\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.WAITFORTHEASSIGNEDAGENT_REQUIRED">WaitForTheAssignedAgent field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="OPENCHANNEL.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="OPENCHANNEL.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_LESS_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.MAPKEY">MapKey</label>\n                                <md-select name="mapKey" ng-model="vm.openchannelAccount.mapKey" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'\'">None</md-option>\n                                    <md-optgroup label="standard">\n                                        <md-option ng-value="mapKey.columnName" ng-repeat="mapKey in vm.fields" ng-if="!mapKey.columnName.toString().startsWith(\'cf_\')" ng-disabled="mapKey.canSelect === false">{{ mapKey.displayName }}</md-option>\n                                    </md-optgroup>\n                                    <md-optgroup label="custom">\n                                        <md-option ng-value="mapKey.columnName" ng-repeat="mapKey in vm.fields" ng-if="mapKey.columnName.toString().startsWith(\'cf_\')" ng-disabled="mapKey.canSelect === false">{{ mapKey.displayName }}</md-option>\n                                    </md-optgroup>\n                                </md-select>\n                                <div ng-messages="generalForm[\'mapKey\'].$error" ng-show="generalForm[\'mapKey\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.MAPKEY_REQUIRED">MapKey field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.openchannelAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.RECEIVEURI">receiveUri</label>\n                                <div layout="row" layout-align="center center">\n                                    <button class="md-button md-fab md-mini md-primary" ngclipboard data-clipboard-target="#copytoclipboard-receiveUri" ngclipboard-success="vm.alert({title: \'copied to clipboard\', msg: e.text});" ngclipboard-error="vm.alert({title: \'error\', msg: \'copy to clipboard failed\'});">\n                                        <md-icon md-font-icon="icon-clipboard-text"></md-icon>\n                                    </button>\n                                    <input class="md-input" type="text" id="copytoclipboard-receiveUri" name="receiveUri" ng-value="vm.location + \'/api/openchannel/accounts/\' + vm.openchannelAccount.id + \'/notify\'" ng-readonly="true">\n                                </div>\n                                <div class="hint"><span translate="OPENCHANNEL.HELP.RECEIVEURI"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="openchannelAccount-detail-form-container notification md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="OPENCHANNEL.NOTIFICATION">NOTIFICATION</div>\n                        </div>\n                        <form name="notificationForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.openchannelAccount.notificationSound" aria-label="notificationSound" ng-disabled="!vm.crudPermissions.canEdit"><span translate="OPENCHANNEL.NOTIFICATIONSOUND">notificationSound</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.openchannelAccount.notificationShake" aria-label="notificationShake" ng-disabled="!vm.crudPermissions.canEdit"><span translate="OPENCHANNEL.NOTIFICATIONSHAKE">notificationShake</span></md-switch>\n\n                            </md-input-container>\n                            <div class="md-block">\n                                <label class="md-caption grey-fg" translate="OPENCHANNEL.NOTIFICATIONTEMPLATE">notificationTemplate</label>\n                                <textarea aria-label="notificationTemplate notificationTemplate" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.openchannelAccount.notificationTemplate"></textarea>\n                            </div>\n\n                        </form>\n                    </div>\n                    <div class="openchannelAccount-detail-form-container transfer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="OPENCHANNEL.TRANSFER">TRANSFER</div>\n                        </div>\n                        <form name="transferForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.openchannelAccount.queueTransfer" aria-label="queueTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="OPENCHANNEL.QUEUETRANSFER">queueTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.openchannelAccount.queueTransfer == true" class="md-block">\n                                <label translate="OPENCHANNEL.QUEUETRANSFERTIMEOUT">queueTransferTimeout</label>\n                                <input type="number" name="queueTransferTimeout" ng-model="vm.openchannelAccount.queueTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'queueTransferTimeout\'].$error" ng-show="transferForm[\'queueTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.QUEUETRANSFERTIMEOUT_REQUIRED">queueTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="OPENCHANNEL.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="OPENCHANNEL.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.openchannelAccount.agentTransfer" aria-label="agentTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="OPENCHANNEL.AGENTTRANSFER">agentTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.openchannelAccount.agentTransfer == true" class="md-block">\n                                <label translate="OPENCHANNEL.AGENTTRANSFERTIMEOUT">agentTransferTimeout</label>\n                                <input type="number" name="agentTransferTimeout" ng-model="vm.openchannelAccount.agentTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'agentTransferTimeout\'].$error" ng-show="transferForm[\'agentTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.AGENTTRANSFERTIMEOUT_REQUIRED">agentTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="OPENCHANNEL.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="OPENCHANNEL.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelAccount-detail-form-container proxy md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="OPENCHANNEL.PROXY">PROXY</div>\n                        </div>\n                        <form name="proxyForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.TOKEN">token</label>\n                                <input type="text" name="token" ng-model="vm.openchannelAccount.token" autofocus disabled>\n\n                                <div class="hint"><span translate="OPENCHANNEL.HELP.TOKEN"></span></div>\n                                <div ng-messages="proxyForm[\'token\'].$error" ng-show="proxyForm[\'token\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.TOKEN_REQUIRED">token field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="openchannelAccount-detail-form-container disposition md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="OPENCHANNEL.DISPOSITION">DISPOSITION</div>\n                        </div>\n                        <form name="dispositionForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.openchannelAccount.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="OPENCHANNEL.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.openchannelAccount.mandatoryDisposition" class="md-block">\n                                <label translate="OPENCHANNEL.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.openchannelAccount.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="OPENCHANNEL.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="dispositionForm[\'mandatoryDispositionPauseId\'].$error" ng-show="dispositionForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.DISPOSITIONS">DISPOSITIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelAccount-detail-form-container openchanneldispositions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="OpenchannelAccountOpenchannelDispositionsController as vm_dc" ng-init="vm_dc.init(vm.openchannelAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedOpenchannelAccountOpenchannelDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="OPENCHANNEL.OPENCHANNELDISPOSITIONS">OpenchannelDispositions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelDisposition($event)" aria-label="add openchannelDisposition" translate translate-attr-label="OPENCHANNEL.ADD_OPENCHANNELDISPOSITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedOpenchannelAccountOpenchannelDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedOpenchannelAccountOpenchannelDispositions.length}} {{vm_dc.selectedOpenchannelAccountOpenchannelDispositions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedOpenchannelAccountOpenchannelDispositions" csv-label="true" filename="openchannelAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedOpenchannelAccountOpenchannelDispositions($event)" aria-label="delete selected" translate translate-attr-label="OPENCHANNELACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedOpenchannelAccountOpenchannelDispositions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getOpenchannelAccountOpenchannelDispositions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'OPENCHANNEL.ID\' | translate }}</th>\n                                            <th md-column md-order-by="name">{{ \'OPENCHANNEL.NAME\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'OPENCHANNEL.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="openchannelDisposition" md-select-id="id" ng-repeat="openchannelDisposition in vm_dc.openchannelAccountOpenchannelDispositions.rows">\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelDisposition($event, openchannelDisposition)" md-cell>{{openchannelDisposition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelDisposition($event, openchannelDisposition)" md-cell>{{openchannelDisposition.name}}</td>\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelDisposition($event, openchannelDisposition)" md-cell>{{openchannelDisposition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="OPENCHANNEL.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelDisposition($event, openchannelDisposition)" translate="OPENCHANNEL.EDIT_OPENCHANNELDISPOSITION">\n                                                                Edit OpenchannelDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(openchannelDisposition, $event)" translate="OPENCHANNEL.DELETE_OPENCHANNELDISPOSITION">\n                                                                Delete OpenchannelDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.openchannelAccountOpenchannelDispositions.rows.length">\n                                            <td md-cell colspan="5">\n                                                <span class="text-boxed-ligth" translate="OPENCHANNEL.NO_OPENCHANNELDISPOSITION_AVAILABLE">No openchanneldisposition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'OPENCHANNEL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'OPENCHANNEL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'OPENCHANNEL.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.openchannelAccountOpenchannelDispositions.count}}" md-on-paginate="vm_dc.getOpenchannelAccountOpenchannelDispositions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.CANNEDANSWERS">CANNEDANSWERS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelAccount-detail-form-container openchannelcannedanswers md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="OpenchannelAccountOpenchannelCannedAnswersController as vm_dc" ng-init="vm_dc.init(vm.openchannelAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="OPENCHANNEL.OPENCHANNELCANNEDANSWERS">OpenchannelCannedAnswers</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event)" aria-label="add openchannelCannedAnswer" translate translate-attr-label="OPENCHANNEL.ADD_OPENCHANNELCANNEDANSWER">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers.length}} {{vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedOpenchannelAccountOpenchannelCannedAnswers" csv-label="true" filename="openchannelAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedOpenchannelAccountOpenchannelCannedAnswers($event)" aria-label="delete selected" translate translate-attr-label="OPENCHANNELACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getOpenchannelAccountOpenchannelCannedAnswers">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'OPENCHANNEL.ID\' | translate }}</th>\n                                            <th md-column md-order-by="key">{{ \'OPENCHANNEL.KEY\' | translate }}</th>\n                                            <th md-column md-order-by="value">{{ \'OPENCHANNEL.VALUE\' | translate }}</th>\n                                            <th md-column md-order-by="description">{{ \'OPENCHANNEL.DESCRIPTION\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'OPENCHANNEL.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="openchannelCannedAnswer" md-select-id="id" ng-repeat="openchannelCannedAnswer in vm_dc.openchannelAccountOpenchannelCannedAnswers.rows">\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)" md-cell>{{openchannelCannedAnswer.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)" md-cell>{{openchannelCannedAnswer.key}}</td>\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)" md-cell>{{openchannelCannedAnswer.value}}</td>\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)" md-cell>{{openchannelCannedAnswer.description}}</td>\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)" md-cell>{{openchannelCannedAnswer.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="OPENCHANNEL.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)" translate="OPENCHANNEL.EDIT_OPENCHANNELCANNEDANSWER">\n                                                                Edit OpenchannelCannedAnswer\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(openchannelCannedAnswer, $event)" translate="OPENCHANNEL.DELETE_OPENCHANNELCANNEDANSWER">\n                                                                Delete OpenchannelCannedAnswer\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.openchannelAccountOpenchannelCannedAnswers.rows.length">\n                                            <td md-cell colspan="7">\n                                                <span class="text-boxed-ligth" translate="OPENCHANNEL.NO_OPENCHANNELCANNEDANSWER_AVAILABLE">No openchannelcannedanswer available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'OPENCHANNEL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'OPENCHANNEL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'OPENCHANNEL.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.openchannelAccountOpenchannelCannedAnswers.count}}" md-on-paginate="vm_dc.getOpenchannelAccountOpenchannelCannedAnswers" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelAccount-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="OpenchannelAccountActionsController as vm_ac" ng-init="vm_ac.init(vm.openchannelAccount, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="OPENCHANNEL.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedOpenchannelAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedOpenchannelAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedOpenchannelAccountApps.length}} {{vm_ac.selectedOpenchannelAccountApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedOpenchannelAccountApps($event)" aria-label="delete selected" translate translate-attr-label="OPENCHANNEL.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedOpenchannelAccountApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px">\n                                                    <span translate="VOICE.PRIORITY">Priority</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.openchannelAccountApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editOpenchannelAccountApp($event, $index)"><span>{{app.priority}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editOpenchannelAccountApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editOpenchannelAccountApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editOpenchannelAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.openchannelAccountApps.rows.length">\n                                                <td md-cell colspan="7">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.INTERACTIONS">INTERACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelAccount-detail-form-container interactions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="OpenchannelAccountInteractionsController as vm_dc" ng-init="vm_dc.init(vm.openchannelAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedOpenchannelAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="OPENCHANNEL.INTERACTIONS">Interactions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm_dc.getOpenchannelAccountInteractions()" aria-label="refresh Interactions" translate translate-attr-label="OPENCHANNEL.REFRESH_INTERACTIONS">\n                                        <md-icon md-font-icon="icon-refresh"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedOpenchannelAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedOpenchannelAccountInteractions.length}} {{vm_dc.selectedOpenchannelAccountInteractions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedOpenchannelAccountInteractions" csv-label="true" filename="openchannelAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedOpenchannelAccountInteractions($event)" aria-label="delete selected" translate translate-attr-label="OPENCHANNELACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedOpenchannelAccountInteractions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getOpenchannelAccountInteractions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'OPENCHANNEL.ID\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'OPENCHANNEL.STARTEDAT\' | translate }}</th>\n                                            <th md-column>{{ \'OPENCHANNEL.CONTACT\' | translate }}</th>\n                                            <th md-column>{{ \'OPENCHANNEL.AGENT\' | translate }}</th>\n                                            <th md-column md-order-by="closedAt">{{ \'OPENCHANNEL.CLOSEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="disposition">{{ \'OPENCHANNEL.DISPOSITION\' | translate }}</th>\n                                            <th md-column md-order-by="note">{{ \'OPENCHANNEL.NOTES\' | translate }}</th>\n                                            <th md-column md-order-by="tag">{{ \'OPENCHANNEL.TAGS\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="interaction" md-select-id="id" ng-repeat="interaction in vm_dc.openchannelAccountInteractions.rows">\n                                            <td md-cell>{{interaction.id}}</td>\n                                            <td md-cell>{{interaction.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.Contact.firstName}}</td>\n                                            <td md-cell>{{interaction.Owner.name}}</td>\n                                            <td md-cell>{{interaction.closedAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.disposition}}</td>\n                                            <td md-cell>{{interaction.note}}</td>\n                                            <td md-cell>\n                                                <div ng-if="interaction.Tags.length">\n                                                    <md-tooltip md-direction="left" layout="row">\n                                                        <span ng-repeat="tag in interaction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                                    </md-tooltip>\n                                                    <md-icon md-font-icon="icon-tag"></md-icon>\n                                                </div>\n                                            </td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="OPENCHANNEL.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_dc.spyopenchannelInteraction($event, interaction)" translate="OPENCHANNEL.SPYINTERACTION">\n                                                                Spy Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.openchannelInteractionDownload(interaction, $event)" translate="OPENCHANNEL.DOWNLOAD_INTERACTION">\n                                                                Download Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(interaction, $event)" translate="OPENCHANNEL.DELETE_INTERACTION">\n                                                                Delete Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.openchannelAccountInteractions.rows.length">\n                                            <td md-cell colspan="13">\n                                                <span class="text-boxed-ligth" translate="OPENCHANNEL.NO_INTERACTION_AVAILABLE">No interaction available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'OPENCHANNEL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'OPENCHANNEL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'OPENCHANNEL.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.openchannelAccountInteractions.count}}" md-on-paginate="vm_dc.getOpenchannelAccountInteractions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/openchannelAccounts.html",'<div id="openchannelAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-google-earth" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="OPENCHANNEL.OPENCHANNELACCOUNTS">OpenchannelAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="OPENCHANNEL.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedOpenchannelAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedOpenchannelAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="OPENCHANNEL.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-openchannelAccounts-count">\n                    <span>{{vm.selectedOpenchannelAccounts.length}}</span>\n                    <span translate="OPENCHANNEL.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="OPENCHANNELACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllOpenchannelAccounts()" translate="OPENCHANNEL.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectOpenchannelAccounts()" translate="OPENCHANNEL.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedOpenchannelAccounts" csv-label="true" filename="openchannelAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedOpenchannelAccounts($event)" aria-label="delete selected" translate translate-attr-label="OPENCHANNELACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- OPENCHANNELACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedOpenchannelAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getOpenchannelAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'OPENCHANNEL.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'OPENCHANNEL.NAME\' | translate }}</th>\n                                <th md-column md-order-by="key">{{ \'OPENCHANNEL.KEY\' | translate }}</th>\n                                <th md-column md-order-by="replyUri">{{ \'OPENCHANNEL.REPLYURI\' | translate }}</th>\n                                <th md-column md-order-by="ListId">{{ \'OPENCHANNEL.LIST\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'OPENCHANNEL.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.openchannelAccounts.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="OPENCHANNEL.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="openchannelAccount" md-select-id="id" ng-repeat="openchannelAccount in vm.openchannelAccounts.rows">\n                                <td md-cell ng-if="openchannelAccount.userpic"><img class="avatar" alt="{{openchannelAccount.name}}" ng-src="api/users/{{openchannelAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!openchannelAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{openchannelAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelAccount, ev) : vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="id ">{{openchannelAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelAccount, ev) : vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="name ">{{openchannelAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelAccount, ev) : vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="key ">{{openchannelAccount.key}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelAccount, ev) : vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="replyUri ">{{openchannelAccount.replyUri}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelAccount, ev) : vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="ListId ">{{ (vm.lists | filter : {\'id\':openchannelAccount.ListId} : true)[0].name }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelAccount, ev) : vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="description ">{{openchannelAccount.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="OPENCHANNEL.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(openchannelAccount, $event    )" translate="OPENCHANNEL.EDIT_OPENCHANNELACCOUNT">\n                                                    Edit OpenchannelAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.interactionsgoto(openchannelAccount, $event    )" translate="OPENCHANNEL.INTERACTIONS_OPENCHANNELACCOUNT">\n                                                    Interactions OpenchannelAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(openchannelAccount, $event    )" translate="OPENCHANNEL.AGENTADD_OPENCHANNELACCOUNT">\n                                                    AgentAdd OpenchannelAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(openchannelAccount, $event    )" translate="OPENCHANNEL.DELETE_OPENCHANNELACCOUNT">\n                                                    Delete OpenchannelAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'OPENCHANNEL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'OPENCHANNEL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'OPENCHANNEL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.openchannelAccounts.count}}" md-on-paginate="vm.getOpenchannelAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / OPENCHANNELACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD OPENCHANNELACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-openchannelAccount-button" ng-click="vm.createOrEditOpenchannelAccount($event)" aria-label="add openchannelAccount" translate translate-attr-aria-label="OPENCHANNEL.ADD_OPENCHANNELACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD OPENCHANNELACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/openchannel/views/openchannelQueues/create/dialog.html",'<md-dialog class="openchannelQueue-dialog" aria-label="New OpenchannelQueue">\n    <form name="openchannelQueueForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.openchannelQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newOpenchannelQueue">\n\n                <div class="hint"><span translate="OPENCHANNEL.HELP.NAME"></span></div>\n                <div ng-messages="openchannelQueueForm[\'name\'].$error" ng-show="openchannelQueueForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="OPENCHANNEL.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.STRATEGY">Strategy</label>\n                <md-select name="strategy" ng-model="vm.openchannelQueue.strategy" required>\n                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                </md-select>\n                <div ng-messages="openchannelQueueForm[\'strategy\'].$error" ng-show="openchannelQueueForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.AGENT_TIMEOUT">Agent_Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.openchannelQueue.timeout" min="1" max="2147483" ng-required="true">\n\n                <div ng-messages="openchannelQueueForm[\'timeout\'].$error" ng-show="openchannelQueueForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="OPENCHANNEL.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="OPENCHANNEL.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.openchannelQueue.description">\n\n                <div ng-messages="openchannelQueueForm[\'description\'].$error" ng-show="openchannelQueueForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newOpenchannelQueue" ng-click="vm.saveOpenchannelQueue()" class="send-button md-accent md-raised" ng-disabled="openchannelQueueForm.$invalid || openchannelQueueForm.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newOpenchannelQueue" ng-click="vm.addNewOpenchannelQueue()" class="send-button md-accent md-raised" ng-disabled="openchannelQueueForm.$invalid" aria-label="ADD" translate="OPENCHANNEL.ADD_OPENCHANNELQUEUE" translate-attr-aria-label="OPENCHANNEL.ADD_OPENCHANNELQUEUE">\n                    ADD OPENCHANNELQUEUE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newOpenchannelQueue" ng-click="vm.deleteOpenchannelQueue($event)" aria-label="DELETE" translate translate-attr-aria-label="OPENCHANNEL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="OPENCHANNEL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelQueues/edit/agentadd/agentadd.html",'<md-dialog class="openchannelQueue-dialog" aria-label="openchannelQueue" ng-init="vm.onInit()">\n    <form name="openchannelQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="OPENCHANNEL.AGENTADD_OPENCHANNELQUEUE">Add Agent to openchannelQueue</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelQueues/edit/teamadd/teamadd.html",'<md-dialog class="openchannelQueue-dialog" aria-label="openchannelQueue" ng-init="vm.onInit()">\n    <form name="openchannelQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="OPENCHANNEL.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelQueues/edit/view.html",'<div id="openchannel-openchannelQueue" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-openchannelQueues-button md-icon-button" aria-label="Go to openchannelQueues" ng-click="vm.gotoOpenchannelQueues()" translate translate-attr-aria-label="OPENCHANNEL.GO_TO_OPENCHANNELQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="openchannelQueue-image" hide-xs>\n                    <img ng-src="assets/images/business/openchannelQueues.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.openchannelQueue.id}}\n                        <span ng-if="vm.openchannelQueue.name">{{vm.openchannelQueue.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="OPENCHANNEL.CREATED_AT"></span> <span>{{vm.openchannelQueue.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.openchannelQueue, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="OPENCHANNEL.TEAMADD_OPENCHANNELQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.openchannelQueue, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="OPENCHANNEL.AGENTADD_OPENCHANNELQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveOpenchannelQueue()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid)" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelQueue-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="OPENCHANNEL.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.openchannelQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="OPENCHANNEL.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="OPENCHANNEL.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.openchannelQueue.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'strategy\'].$error" ng-show="generalForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.AGENT_TIMEOUT">Agent_Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.openchannelQueue.timeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="OPENCHANNEL.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="OPENCHANNEL.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.openchannelQueue.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/openchannel/views/openchannelQueues/openchannelQueues.html",'<div id="openchannelQueues" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-google-earth" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="OPENCHANNEL.OPENCHANNELQUEUES">OpenchannelQueues</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="OPENCHANNEL.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedOpenchannelQueues.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedOpenchannelQueues =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="OPENCHANNEL.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-openchannelQueues-count">\n                    <span>{{vm.selectedOpenchannelQueues.length}}</span>\n                    <span translate="OPENCHANNEL.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="OPENCHANNELQUEUES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllOpenchannelQueues()" translate="OPENCHANNEL.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectOpenchannelQueues()" translate="OPENCHANNEL.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedOpenchannelQueues" csv-label="true" filename="openchannelQueues.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedOpenchannelQueues($event)" aria-label="delete selected" translate translate-attr-label="OPENCHANNELQUEUES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- OPENCHANNELQUEUE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedOpenchannelQueues" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getOpenchannelQueues">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'OPENCHANNEL.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'OPENCHANNEL.NAME\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'OPENCHANNEL.STRATEGY\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.openchannelQueues.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="OPENCHANNEL.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="openchannelQueue" md-select-id="id" ng-repeat="openchannelQueue in vm.openchannelQueues.rows">\n                                <td md-cell ng-if="openchannelQueue.userpic"><img class="avatar" alt="{{openchannelQueue.name}}" ng-src="api/users/{{openchannelQueue.id}}/avatar" /></td>\n                                <td md-cell ng-if="!openchannelQueue.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{openchannelQueue.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelQueue, ev) : vm.createOrEditOpenchannelQueue($event, openchannelQueue)" md-cell class="id ">{{openchannelQueue.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelQueue, ev) : vm.createOrEditOpenchannelQueue($event, openchannelQueue)" md-cell class="name ">{{openchannelQueue.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelQueue, ev) : vm.createOrEditOpenchannelQueue($event, openchannelQueue)" md-cell class="strategy ">{{ vm.arraystrategy[openchannelQueue.strategy].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="OPENCHANNEL.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(openchannelQueue, $event    )" translate="OPENCHANNEL.EDIT_OPENCHANNELQUEUE">\n                                                    Edit OpenchannelQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(openchannelQueue, $event    )" translate="OPENCHANNEL.TEAMADD_OPENCHANNELQUEUE">\n                                                    teamadd OpenchannelQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(openchannelQueue, $event    )" translate="OPENCHANNEL.AGENTADD_OPENCHANNELQUEUE">\n                                                    agentadd OpenchannelQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(openchannelQueue, $event    )" translate="OPENCHANNEL.DELETE_OPENCHANNELQUEUE">\n                                                    Delete OpenchannelQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(openchannelQueue, $event    )" translate="OPENCHANNEL.GOTOREALTIME_OPENCHANNELQUEUE">\n                                                    goToRealtime OpenchannelQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'OPENCHANNEL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'OPENCHANNEL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'OPENCHANNEL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.openchannelQueues.count}}" md-on-paginate="vm.getOpenchannelQueues" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / OPENCHANNELQUEUE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD OPENCHANNELQUEUE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-openchannelQueue-button" ng-click="vm.createOrEditOpenchannelQueue($event)" aria-label="add openchannelQueue" translate translate-attr-aria-label="OPENCHANNEL.ADD_OPENCHANNELQUEUE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD OPENCHANNELQUEUE BUTTON --\x3e\n</div>'),e.put("app/main/apps/openchannel/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="OPENCHANNEL.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'OPENCHANNEL.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'OPENCHANNEL.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'OPENCHANNEL.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'OPENCHANNEL.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'OPENCHANNEL.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'OPENCHANNEL.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'OPENCHANNEL.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'OPENCHANNEL.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'OPENCHANNEL.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'OPENCHANNEL.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'OPENCHANNEL.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'OPENCHANNEL.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"OPENCHANNEL.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"OPENCHANNEL.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"OPENCHANNEL.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"OPENCHANNEL.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"OPENCHANNEL.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"OPENCHANNEL.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"OPENCHANNEL.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"OPENCHANNEL.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'OPENCHANNEL.PAGE' | translate}}:', rowsPerPage: '{{'OPENCHANNEL.ROWSPERPAGE' | translate}}:', of: '{{'OPENCHANNEL.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/openchannel/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="OPENCHANNEL.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'OPENCHANNEL.NAME\' | translate }}</th>\n                <th md-column>{{ \'OPENCHANNEL.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'OPENCHANNEL.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'OPENCHANNEL.READY\' | translate }}</th>\n                <th md-column>{{ \'OPENCHANNEL.WAITING\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="7">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="OPENCHANNEL.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="OPENCHANNEL.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditOpenchannelQueue($event, vm.queues[value])" translate="OPENCHANNEL.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="OPENCHANNEL.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'OPENCHANNEL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'OPENCHANNEL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'OPENCHANNEL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/openchannel/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/plugins/views/plugin/plugin.html",'<div ng-if="!vm.plugin">\n    <p>Plugin not available...</p>\n</div>\n<div id="plugin" ng-if="vm.plugin" ng-cloak layout-fill>\n    <iframe ng-src="{{vm.getTrustedURL()}}" frameborder=0 style="border:0px; width:100%; height:100%;"></iframe>\n</div>'),e.put("app/main/apps/settings/views/customizations/create/dialog.html",'<md-dialog class="customization-dialog" aria-label="New Customization">\n    <form name="customizationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.customization.defaultLogo" aria-label="Default_Logo"><span translate="SETTINGS.DEFAULT_LOGO">Default_Logo</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.customization.defaultLoginLogo" aria-label="Default_Login_Logo"><span translate="SETTINGS.DEFAULT_LOGIN_LOGO">Default_Login_Logo</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.customization.defaultHeaderWhiteLabel" aria-label="Default_Header_WhiteLabel"><span translate="SETTINGS.DEFAULT_HEADER_WHITELABEL">Default_Header_WhiteLabel</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="!vm.customization.defaultHeaderWhiteLabel" class="md-block">\n                <label translate="SETTINGS.HEADER_WHITELABEL">Header_WhiteLabel</label>\n                <input type="text" name="headerWhiteLabel" ng-model="vm.customization.headerWhiteLabel" ng-required="true">\n\n                <div ng-messages="customizationForm[\'headerWhiteLabel\'].$error" ng-show="customizationForm[\'headerWhiteLabel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.HEADER_WHITELABEL_REQUIRED">Header_WhiteLabel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.customization.defaultPageTitle" aria-label="Default_Page_Title"><span translate="SETTINGS.DEFAULT_PAGE_TITLE">Default_Page_Title</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="!vm.customization.defaultPageTitle" class="md-block">\n                <label translate="SETTINGS.PAGE_TITLE">Page_Title</label>\n                <input type="text" name="pageTitle" ng-model="vm.customization.pageTitle" ng-required="true">\n\n                <div ng-messages="customizationForm[\'pageTitle\'].$error" ng-show="customizationForm[\'pageTitle\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.PAGE_TITLE_REQUIRED">Page_Title field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.license.preferred" class="md-block">\n                <md-switch ng-model="vm.customization.defaultPreferred" aria-label="Default_Preferred"><span translate="SETTINGS.DEFAULT_PREFERRED">Default_Preferred</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newCustomization" ng-click="vm.saveCustomization()" class="send-button md-accent md-raised" ng-disabled="customizationForm.$invalid || customizationForm.$pristine" aria-label="SAVE" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newCustomization" ng-click="vm.addNewCustomization()" class="send-button md-accent md-raised" ng-disabled="customizationForm.$invalid" aria-label="ADD" translate="SETTINGS.ADD_CUSTOMIZATION" translate-attr-aria-label="SETTINGS.ADD_CUSTOMIZATION">\n                    ADD CUSTOMIZATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newCustomization" ng-click="vm.deleteCustomization($event)" aria-label="DELETE" translate translate-attr-aria-label="SETTINGS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SETTINGS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/customizations/customizations.html",'<div id="customizations" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.CUSTOMIZATIONS">Customizations</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div>\n            <md-button type="submit" ng-click="vm.saveCustomization()" ng-disabled="(customizationsForm.$pristine && logoForm.$pristine && logologinForm.$pristine && preferredForm.$pristine) || (customizationsForm.$invalid || logoForm.$invalid || logologinForm.$invalid || preferredForm.$invalid)" class="send-button md-accent md-raised" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n            <div class="customization-detail-form-container customizations md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.CUSTOMIZATIONS">CUSTOMIZATIONS</div>\n                </div>\n                <form name="customizationsForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.customization.defaultLogo" aria-label="Default_Logo"><span translate="SETTINGS.DEFAULT_LOGO">Default_Logo</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.customization.defaultLoginLogo" aria-label="Default_Login_Logo"><span translate="SETTINGS.DEFAULT_LOGIN_LOGO">Default_Login_Logo</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.customization.defaultHeaderWhiteLabel" aria-label="Default_Header_WhiteLabel"><span translate="SETTINGS.DEFAULT_HEADER_WHITELABEL">Default_Header_WhiteLabel</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="!vm.customization.defaultHeaderWhiteLabel" class="md-block">\n                        <label translate="SETTINGS.HEADER_WHITELABEL">Header_WhiteLabel</label>\n                        <input type="text" name="headerWhiteLabel" ng-model="vm.customization.headerWhiteLabel" ng-required="true">\n\n                        <div ng-messages="customizationsForm[\'headerWhiteLabel\'].$error" ng-show="customizationsForm[\'headerWhiteLabel\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.HEADER_WHITELABEL_REQUIRED">Header_WhiteLabel field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.customization.defaultPageTitle" aria-label="Default_Page_Title"><span translate="SETTINGS.DEFAULT_PAGE_TITLE">Default_Page_Title</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="!vm.customization.defaultPageTitle" class="md-block">\n                        <label translate="SETTINGS.PAGE_TITLE">Page_Title</label>\n                        <input type="text" name="pageTitle" ng-model="vm.customization.pageTitle" ng-required="true">\n\n                        <div ng-messages="customizationsForm[\'pageTitle\'].$error" ng-show="customizationsForm[\'pageTitle\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.PAGE_TITLE_REQUIRED">Page_Title field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.license.preferred" class="md-block">\n                        <md-switch ng-model="vm.customization.defaultPreferred" aria-label="Default_Preferred"><span translate="SETTINGS.DEFAULT_PREFERRED">Default_Preferred</span></md-switch>\n\n                    </md-input-container>\n\n                </form>\n            </div>\n\n            <div ng-if="!vm.customization.defaultLogo" class="customization-detail-form-container logo md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.LOGO">LOGO</div>\n                </div>\n                <div ng-controller="CustomizationlogoController as vm_cl" ng-init="vm_cl.init(vm.customization)" class="customization-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="customization-image-uploader" flow-init="vm_cl.ngFlowOptions" flow-name="vm_cl.ngFlow.flow" flow-files-submitted="vm_cl.upload()" flow-file-added="vm_cl.fileAdded($file)" flow-file-success="vm_cl.fileSuccess($file, $message)" flow-complete="vm_cl.uploadComplete()" flow-drop flow-drag-enter="vm_cl.dropping=true" flow-drag-leave="vm_cl.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn>\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="logoimage in vm_cl.customization.images" ng-switch="logoimage.type">\n                                <div class="customization-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{logoimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="logoimage.file">\n                                </div>\n\n                                <div class="customization-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{logoimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n\n            <div ng-if="!vm.customization.defaultLoginLogo" class="customization-detail-form-container logologin md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.LOGOLOGIN">LOGOLOGIN</div>\n                </div>\n                <div ng-controller="CustomizationlogologinController as vm_cll" ng-init="vm_cll.init(vm.customization)" class="customization-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="customization-image-uploader" flow-init="vm_cll.ngFlowOptions" flow-name="vm_cll.ngFlow.flow" flow-files-submitted="vm_cll.upload()" flow-file-added="vm_cll.fileAdded($file)" flow-file-success="vm_cll.fileSuccess($file, $message)" flow-complete="vm_cll.uploadComplete()" flow-drop flow-drag-enter="vm_cll.dropping=true" flow-drag-leave="vm_cll.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn>\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="logologinimage in vm_cll.customization.images" ng-switch="logologinimage.type">\n                                <div class="customization-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{logologinimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="logologinimage.file">\n                                </div>\n\n                                <div class="customization-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{logologinimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n\n            <div ng-if="!vm.customization.defaultPreferred && vm.license.preferred" class="customization-detail-form-container preferred md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.PREFERRED">PREFERRED</div>\n                </div>\n                <div ng-controller="CustomizationpreferredController as vm_cp" ng-init="vm_cp.init(vm.customization)" class="customization-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="customization-image-uploader" flow-init="vm_cp.ngFlowOptions" flow-name="vm_cp.ngFlow.flow" flow-files-submitted="vm_cp.upload()" flow-file-added="vm_cp.fileAdded($file)" flow-file-success="vm_cp.fileSuccess($file, $message)" flow-complete="vm_cp.uploadComplete()" flow-drop flow-drag-enter="vm_cp.dropping=true" flow-drag-leave="vm_cp.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn>\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="preferredimage in vm_cp.customization.images" ng-switch="preferredimage.type">\n                                <div class="customization-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{preferredimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="preferredimage.file">\n                                </div>\n\n                                <div class="customization-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{preferredimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/settings/views/generals/create/dialog.html",'<md-dialog class="general-dialog" aria-label="New General">\n    <form name="generalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newGeneral" ng-click="vm.saveGeneral()" class="send-button md-accent md-raised" ng-disabled="generalForm.$invalid || generalForm.$pristine" aria-label="SAVE" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newGeneral" ng-click="vm.addNewGeneral()" class="send-button md-accent md-raised" ng-disabled="generalForm.$invalid" aria-label="ADD" translate="SETTINGS.ADD_GENERAL" translate-attr-aria-label="SETTINGS.ADD_GENERAL">\n                    ADD GENERAL\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newGeneral" ng-click="vm.deleteGeneral($event)" aria-label="DELETE" translate translate-attr-aria-label="SETTINGS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SETTINGS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/generals/generals.html",'<div id="generals" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.GENERAL">General</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div>\n            <md-button type="submit" ng-click="vm.saveGeneral()" ng-disabled="(globalForm.$pristine && motionbarForm.$pristine && reportForm.$pristine && agentOmniDesktopInterfaceForm.$pristine && screenrecordingForm.$pristine && securityForm.$pristine) || (globalForm.$invalid || motionbarForm.$invalid || reportForm.$invalid || agentOmniDesktopInterfaceForm.$invalid || screenrecordingForm.$invalid || securityForm.$invalid)" class="send-button md-accent md-raised" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n            <div class="general-detail-form-container global md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.GLOBAL">GLOBAL</div>\n                </div>\n                <form name="globalForm" novalidate>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.MIN_INTERNAL">Min_Internal</label>\n                        <input type="number" name="min_internal" ng-model="vm.general.min_internal" min="0" ng-required="true" autofocus>\n\n                        <div ng-messages="globalForm[\'min_internal\'].$error" ng-show="globalForm[\'min_internal\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.MIN_INTERNAL_REQUIRED">Min_Internal field is required</span>\n                            </div>\n                            <div ng-message="min">\n                                <span translate="SETTINGS.ERRORS.MIN_INTERNAL_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Min_Internal must be a valid greater or equal than</span> <span>0</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.CHATTIMEOUT">chatTimeout</label>\n                        <input type="number" name="chatTimeout" ng-model="vm.general.chatTimeout" min="0" ng-required="true">\n\n                        <div ng-messages="globalForm[\'chatTimeout\'].$error" ng-show="globalForm[\'chatTimeout\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.CHATTIMEOUT_REQUIRED">chatTimeout field is required</span>\n                            </div>\n                            <div ng-message="min">\n                                <span translate="SETTINGS.ERRORS.CHATTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">chatTimeout must be a valid greater or equal than</span> <span>0</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.STUNADDR">Stunaddr</label>\n                        <input type="text" name="stunaddr" ng-model="vm.general.stunaddr">\n\n                        <div ng-messages="globalForm[\'stunaddr\'].$error" ng-show="globalForm[\'stunaddr\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.STUNADDR_REQUIRED">Stunaddr field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.TURNADDR">Turnaddr</label>\n                        <input type="text" name="turnaddr" ng-model="vm.general.turnaddr">\n\n                        <div ng-messages="globalForm[\'turnaddr\'].$error" ng-show="globalForm[\'turnaddr\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.TURNADDR_REQUIRED">Turnaddr field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.TURN_USERNAME">Turn_Username</label>\n                        <input type="text" name="turnusername" ng-model="vm.general.turnusername">\n\n                        <div ng-messages="globalForm[\'turnusername\'].$error" ng-show="globalForm[\'turnusername\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.TURN_USERNAME_REQUIRED">Turn_Username field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.TURN_PASSWORD">Turn_Password</label>\n                        <input type="text" name="turnpassword" ng-model="vm.general.turnpassword">\n\n                        <div ng-messages="globalForm[\'turnpassword\'].$error" ng-show="globalForm[\'turnpassword\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.TURN_PASSWORD_REQUIRED">Turn_Password field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.rtlSupport" aria-label="RtlSupport"><span translate="SETTINGS.RTLSUPPORT">RtlSupport</span></md-switch>\n\n                        <div class="hint"><span translate="SETTINGS.HELP.RTLSUPPORT"></span></div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n            <div class="general-detail-form-container motionbar md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.MOTIONBAR">MOTIONBAR</div>\n                </div>\n                <form name="motionbarForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.phoneBarAutoUpdater" aria-label="MotionbarAutoUpdater"><span translate="SETTINGS.MOTIONBARAUTOUPDATER">MotionbarAutoUpdater</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="vm.general.phoneBarAutoUpdater" class="md-block">\n                        <label translate="SETTINGS.MOTIONBARAUTOUPDATERURL">MotionbarAutoUpdaterUrl</label>\n                        <input type="url" name="phoneBarAutoUpdaterUrl" ng-model="vm.general.phoneBarAutoUpdaterUrl" ng-required="vm.general.phoneBarAutoUpdater">\n\n                        <div ng-messages="motionbarForm[\'phoneBarAutoUpdaterUrl\'].$error" ng-show="motionbarForm[\'phoneBarAutoUpdaterUrl\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.MOTIONBARAUTOUPDATERURL_REQUIRED">MotionbarAutoUpdaterUrl field is required</span>\n                            </div>\n                            <div ng-message="url">\n                                <span translate="SETTINGS.ERRORS.MOTIONBARAUTOUPDATERURL_MUST_VALID_URL">MotionbarAutoUpdaterUrl must be a valid url http://www.xcally.com</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.phoneBarRememberMeEnabled" aria-label="MotionbarRememberMe"><span translate="SETTINGS.MOTIONBARREMEMBERME">MotionbarRememberMe</span></md-switch>\n\n                        <div class="hint"><span translate="SETTINGS.HELP.MOTIONBARREMEMBERME"></span></div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n            <div class="general-detail-form-container report md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.REPORT">REPORT</div>\n                </div>\n                <form name="reportForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.split" aria-label="Split"><span translate="SETTINGS.SPLIT">Split</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="vm.general.split" class="md-block">\n                        <label translate="SETTINGS.SPLITSIZECSV">SplitSizeCsv</label>\n                        <input type="number" name="splitSizeCsv" ng-model="vm.general.splitSizeCsv">\n\n                        <div ng-messages="reportForm[\'splitSizeCsv\'].$error" ng-show="reportForm[\'splitSizeCsv\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SPLITSIZECSV_REQUIRED">SplitSizeCsv field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.general.split" class="md-block">\n                        <label translate="SETTINGS.SPLITSIZEPDF">SplitSizePdf</label>\n                        <input type="number" name="splitSizePdf" ng-model="vm.general.splitSizePdf">\n\n                        <div ng-messages="reportForm[\'splitSizePdf\'].$error" ng-show="reportForm[\'splitSizePdf\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SPLITSIZEPDF_REQUIRED">SplitSizePdf field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.general.split" class="md-block">\n                        <label translate="SETTINGS.SPLITSIZEXLSX">SplitSizeXlsx</label>\n                        <input type="number" name="splitSizeXlsx" ng-model="vm.general.splitSizeXlsx">\n\n                        <div ng-messages="reportForm[\'splitSizeXlsx\'].$error" ng-show="reportForm[\'splitSizeXlsx\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SPLITSIZEXLSX_REQUIRED">SplitSizeXlsx field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n            <div class="general-detail-form-container agentomnidesktopinterface md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.AGENTOMNIDESKTOPINTERFACE">AGENTOMNIDESKTOPINTERFACE</div>\n                </div>\n                <form name="agentOmniDesktopInterfaceForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.enableEmailPreview" aria-label="EnableEmailPreview"><span translate="SETTINGS.ENABLEEMAILPREVIEW">EnableEmailPreview</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.MESSAGESALIGNMENT">messagesAlignment</label>\n                        <md-select name="messagesAlignment" ng-model="vm.general.messagesAlignment">\n                            <md-option ng-value="\'alternate\'">Alternate</md-option>\n                            <md-option ng-value="\'left\'">Left</md-option>\n                            <md-option ng-value="\'right\'">Right</md-option>\n                        </md-select>\n                        <div ng-messages="agentOmniDesktopInterfaceForm[\'messagesAlignment\'].$error" ng-show="agentOmniDesktopInterfaceForm[\'messagesAlignment\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.MESSAGESALIGNMENT_REQUIRED">messagesAlignment field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n            <div ng-if="vm.license.screenrecording" class="general-detail-form-container screenrecording md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.SCREENRECORDING">SCREENRECORDING</div>\n                </div>\n                <form name="screenrecordingForm" novalidate>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.DEFAULTSCREENRECORDINGPATH">defaultScreenRecordingPath</label>\n                        <input type="text" name="defaultScreenRecordingPath" ng-model="vm.general.defaultScreenRecordingPath" autofocus>\n\n                        <div class="hint"><span translate="SETTINGS.HELP.DEFAULTSCREENRECORDINGPATH"></span></div>\n                        <div ng-messages="screenrecordingForm[\'defaultScreenRecordingPath\'].$error" ng-show="screenrecordingForm[\'defaultScreenRecordingPath\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.DEFAULTSCREENRECORDINGPATH_REQUIRED">defaultScreenRecordingPath field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n            <div class="general-detail-form-container security md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.SECURITY">SECURITY</div>\n                </div>\n                <form name="securityForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.securePassword" aria-label="Security_Suite"><span translate="SETTINGS.SECURITY_SUITE">Security_Suite</span></md-switch>\n\n                        <div class="hint"><span translate="SETTINGS.HELP.SECURITY_SUITE"></span></div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.callRecordingEncryption" aria-label="Call_Recording_Encryption"><span translate="SETTINGS.CALL_RECORDING_ENCRYPTION">Call_Recording_Encryption</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.ALLOWEDLOGINATTEMPTS">allowedLoginAttempts</label>\n                        <input type="number" name="allowedLoginAttempts" ng-model="vm.general.allowedLoginAttempts" ng-required="true">\n\n                        <div ng-messages="securityForm[\'allowedLoginAttempts\'].$error" ng-show="securityForm[\'allowedLoginAttempts\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.ALLOWEDLOGINATTEMPTS_REQUIRED">allowedLoginAttempts field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.BLOCKDURATION">blockDuration</label>\n                        <input type="number" name="blockDuration" ng-model="vm.general.blockDuration" ng-required="true">\n\n                        <div ng-messages="securityForm[\'blockDuration\'].$error" ng-show="securityForm[\'blockDuration\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.BLOCKDURATION_REQUIRED">blockDuration field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/settings/views/license/license.html",'<div id="license" class="page-layout simple fullwidth doc-page">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.LICENSE">LICENSE</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n        \x3c!-- <div>\n                <md-button type="submit" ng-click="vm.requestLicense()" class="send-button md-raised" translate="SETTINGS.REQUEST_LICENSE" translate-attr-aria-label="SETTINGS.REQUEST_LICENSE">\n                    REQUEST LICENSE\n                </md-button>\n            </div> --\x3e\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n            \x3c!-- LICENSE CARD --\x3e\n            <div layout="row" flex>\n                <md-card class="md-whiteframe-1dp padding-20" flex>\n                    <div layout="row" layout-align="center">\n                        <div flex layout="row" layout-align="start center">\n                            <div ng-if="!vm.license.custom">\n                                <a href="https://www.xcally.com/plans.html" target="_blank" class="md-button md-fab green-A700-bg" aria-label="Eat cake">\n                                    <md-tooltip><span translate="SETTINGS.PRICES">Prices</span></md-tooltip>\n                                    <md-icon md-font-icon="icon-coin"></md-icon>\n                                </a>\n                            </div>\n                        </div>\n                        <div flex>\n                            <div ng-switch="vm.license.months" class="text-center">\n                                <span ng-switch-when="1" class="md-title md-accent-fg text-bold">{{ \'SETTINGS.PLAN\' | translate }}: <span translate="SETTINGS.MONTH_TO_MONTH">MONTH TO MONTH</span></span>\n                                <span ng-switch-when="12" class="md-title md-accent-fg text-bold">{{ \'SETTINGS.PLAN\' | translate }}: <span translate="SETTINGS.ANNUALLY">ANNUALLY</span></span>\n                                <span ng-switch-when="36" class="md-title md-accent-fg text-bold">{{ \'SETTINGS.PLAN\' | translate }}: <span translate="SETTINGS.PERPETUAL">PERPETUAL</span></span>\n                            </div>\n                        </div>\n                        <div flex layout="row" layout-align="end center">\n                            <div>\n                                <md-button type="submit" ng-click="vm.updateLicense()" class="md-button md-fab md-accent">\n                                    <md-tooltip><span translate="SETTINGS.UPDATE_LICENSE">License</span></md-tooltip>\n                                    <md-icon md-font-icon="icon-pencil"></md-icon>\n                                </md-button>\n                            </div>\n                        </div>\n                    </div>\n\n                    <span ng-if="!vm.license.demo && !vm.license.gray && vm.license.months != 36" class="md-subhead md-warn-fg text-center">{{ \'SETTINGS.EXPIRATION_DATE\' | translate }}: {{vm.license.expiration | date: \'longDate\'}}</span>\n                    <span class="text-center padding-bottom-10"> {{ vm.license.machineUuid !== vm.license.uuid ? \'SETTINGS.OLD_TOKEN\' : \'SETTINGS.TOKEN\' | translate }}: <span class="text-italic text-bold">{{vm.license.uuid}}</span></span>\n\n                    <div layout="column">\n                        <span ng-if="vm.license.grayReason == \'changed\'" class="blink md-subhead md-warn-fg text-center">{{ \'SETTINGS.NEW_TOKEN_DETECTED\' | translate }}</span>\n                        <span ng-if="vm.license.grayReason == \'changed\'" class="text-center padding-bottom-10"> {{\'SETTINGS.NEW_TOKEN\' | translate }}: <span class="text-italic text-bold">{{vm.license.machineUuid}}</span></span>\n                        <span ng-if="vm.license.gray" class="blink md-subhead md-warn-fg text-center">{{ \'SETTINGS.EXPIRATION_GRAY_PERIOD\' | translate }}: {{vm.license.deadline | date: \'longDate\'}}</span>\n                        <span ng-if="vm.license.gray" class="text-center padding-bottom-10 text-italic text-bold"> {{\'SETTINGS.EXPIRATION_REASON\' | translate }} </span>\n                        <span ng-if="vm.license.grayReason == \'disabled\'" class="text-center padding-bottom-10"> {{\'SETTINGS.EXPIRATION_REASON_MESSAGE_DISABLED\' | translate }}</span>\n                        <span ng-if="vm.license.grayReason == \'changed\'" class="text-center padding-bottom-10"> {{\'SETTINGS.EXPIRATION_REASON_MESSAGE_CHANGED\' | translate }}</span>\n                        <span ng-if="vm.license.grayReason == \'changed\'" class="text-center padding-bottom-10"> {{\'SETTINGS.EXPIRATION_CHANGED_ADVISE\' | translate }}</span>\n                        <span ng-if="vm.license.grayReason == \'changed\'" class="text-center padding-bottom-10">{{ \'SETTINGS.SEND_EMAIL_TO\' | translate }}: <a href="mailto:license@xcally.com?subject=New%20token%20detected&body=Hi xCALLY, New Token: {{vm.license.machineUuid}}, Old token: {{vm.license.uuid}}">license@xcally.com</a>.</span>\n                        <span ng-if="vm.license.grayReason == \'disabled\'" class="text-center padding-bottom-10">{{ \'SETTINGS.SEND_EMAIL_TO\' | translate }}: <a href="mailto:license@xcally.com?subject=License%20disabled&body=Hi xCALLY, My Token: {{vm.license.machineUuid}}">license@xcally.com</a>.</span>\n                    </div>\n\n                    <div ng-if="vm.license.demo" layout="column">\n                        <span class="md-subhead md-warn-fg text-center">{{ \'SETTINGS.TRIAL_VERSION\' | translate }}</span>\n                        <span class="md-subhead md-warn-fg text-center"><a href="https://www.xcally.com/en/index.html#pricing-table2-h" target="_blank">{{ \'SETTINGS.PRICES\' | translate}}</a></span>\n                    </div>\n\n                    <md-subheader class="md-no-sticky">{{ \'SETTINGS.STAFF\' | translate }}</md-subheader>\n                    <md-divider></md-divider>\n                    <md-list layout="row">\n                        <md-list-item class="md-2-line" flex="33">\n                            <md-icon md-font-icon="icon-account" class="md-avatar-icon"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3>{{ vm.license.users || 0 }} <span ng-class="{\'red-fg\': vm.license.users <= vm.users && vm.license.users > 0}">({{vm.license.users >= vm.users ? vm.users : vm.license.users}})</span></h3>\n                                <p translate="SETTINGS.USERS">Users</p>\n                            </div>\n                        </md-list-item>\n                        <md-list-item class="md-2-line" flex="33">\n                            <md-icon md-font-icon="icon-headphones" class="md-avatar-icon"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3>{{ vm.license.agents || 0 }} <span ng-class="{\'red-fg\': (vm.license.agents <= vm.agents && vm.license.agents > 0) }">({{vm.license.agents >= vm.agents ? vm.agents : vm.license.agents}})</span></h3>\n                                <p translate="SETTINGS.AGENTS">Agents</p>\n                            </div>\n                        </md-list-item>\n                        <md-list-item class="md-2-line" flex="33">\n                            <md-icon md-font-icon="icon-phone" class="md-avatar-icon"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3>{{ vm.license.telephones || 0 }} <span ng-class="{\'red-fg\': vm.license.telephones <= vm.telephones && vm.license.telephones > 0}">({{vm.license.telephones >= vm.telephones ? vm.telephones : vm.license.telephones}})</span></h3>\n                                <p translate="SETTINGS.TELEPHONES">Telephones</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n\n                    <md-subheader class="md-no-sticky">{{ \'SETTINGS.CHANNELS\' | translate }}</md-subheader>\n                    <md-divider></md-divider>\n                    <md-list layout="row">\n                        <md-list-item flex="33" class="md-2-line" ng-repeat="channel in vm.channels | limitTo:3">\n                            <md-icon md-font-icon="{{channel.icon}}" class="md-avatar-icon" ng-class="vm.license[channel.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{channel.name | uppercase}}"></h3>\n                                <p ng-class="vm.license[channel.name] ? \'green-A700-fg\' : \'red-A700-fg\'">{{ \'SETTINGS.\' + (vm.license[channel.name] ? \'ENABLED\' : \'DISABLED\') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n                    <md-list layout="row">\n                        <md-list-item flex="33" class="md-2-line" ng-repeat="channel in vm.channels | limitTo:3:3">\n                            <md-icon md-font-icon="{{channel.icon}}" class="md-avatar-icon" ng-class="vm.license[channel.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{channel.name | uppercase}}"></h3>\n                                <p ng-class="vm.license[channel.name] ? \'green-A700-fg\' : \'red-A700-fg\'">{{ \'SETTINGS.\' + (vm.license[channel.name] ? \'ENABLED\' : \'DISABLED\') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n\n                    <md-subheader class="md-no-sticky">{{ \'SETTINGS.MODULES\' | translate }}</md-subheader>\n                    <md-divider></md-divider>\n                    <md-list layout="row">\n                        <md-list-item class="md-2-line" ng-repeat="module in vm.modules" flex="33">\n                            <md-icon md-font-icon="{{module.icon}}" class="md-avatar-icon" ng-class="vm.license[module.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{module.name | uppercase}}"></h3>\n                                <p ng-class="vm.license[module.name] ? \'green-A700-fg\' : \'red-A700-fg\'">{{ \'SETTINGS.\' + (vm.license[module.name] ? \'ENABLED\' : \'DISABLED\') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n\n                    <md-subheader class="md-no-sticky">{{ \'SETTINGS.SESSIONS\' | translate }}</md-subheader>\n                    <md-divider></md-divider>\n                    <md-list layout="row">\n                        <div ng-repeat="session in vm.sessions" flex="33">\n                            <md-list-item class="md-2-line">\n                                <md-icon md-font-icon="{{session.icon}}" class="md-avatar-icon" ng-class="vm.license[session.enabled] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                                <div class="md-list-item-text">\n                                    <div layout="row" layout="start center">\n                                        <h3 translate="SETTINGS.{{session.name | uppercase}}"></h3>\n                                        <button ng-if="session.restart" ng-click="vm.gotoProcess($event)" class="md-mini" aria-label="restart">\n                                            <md-tooltip>Restart</md-tooltip>\n                                            <md-icon md-font-icon="icon-reload"></md-icon>\n                                        </button>\n                                    </div>\n                                    <p ng-if="vm.license[session.name] && vm.license[session.enabled]" class="green-A700-fg">{{vm.license[session.name]}} {{ \'SETTINGS.\' + session.label | uppercase | translate }}</p>\n                                    <p ng-if="!vm.license[session.name] && vm.license[session.enabled]" class="green-A700-fg">UNLIMITED {{ \'SETTINGS.\' + session.label | uppercase | translate }}</p>\n                                    <p ng-if="!vm.license[session.enabled]" class="red-A700-fg">{{ \'SETTINGS.DISABLED\' | translate }}</p>\n                                </div>\n                            </md-list-item>\n\n                        </div>\n                    </md-list>\n\n                    <md-subheader class="md-no-sticky">{{ \'SETTINGS.ADDONS\' | translate }}</md-subheader>\n                    <md-divider></md-divider>\n                    <md-list layout="row">\n                        <md-list-item class="md-2-line" ng-repeat="addon in vm.addons | limitTo:3" flex="33">\n                            <md-icon md-font-icon="{{addon.icon}}" class="md-avatar-icon" ng-class="vm.license[addon.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{addon.name | uppercase}}"></h3>\n                                <p ng-class="vm.license[addon.name] ? \'green-A700-fg\' : \'red-A700-fg\'">{{ \'SETTINGS.\' + (vm.license[addon.name] ? \'ENABLED\' : \'DISABLED\') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n                    <md-list layout="row">\n                        <md-list-item class="md-2-line" ng-repeat="addon in vm.addons | limitTo:3:3" flex="33">\n                            <md-icon md-font-icon="{{addon.icon}}" class="md-avatar-icon" ng-class="vm.license[addon.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{addon.name | uppercase}}"></h3>\n                                <p ng-class="vm.license[addon.name] ? \'green-A700-fg\' : \'red-A700-fg\'">{{ \'SETTINGS.\' + (vm.license[addon.name] ? \'ENABLED\' : \'DISABLED\') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n\n                    <md-subheader class="md-no-sticky">{{ \'SETTINGS.OTHERS\' | translate }}</md-subheader>\n                    <md-divider></md-divider>\n                    <md-list layout="row">\n                        <md-list-item class="md-2-line" ng-repeat="other in vm.others | limitTo:3" flex="33">\n                            <md-icon md-font-icon="{{other.icon}}" class="md-avatar-icon" ng-class="vm.license[other.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{other.name | uppercase}}"></h3>\n                                <p ng-class="vm.license[other.name] ? \'green-A700-fg\' : \'red-A700-fg\'">{{ \'SETTINGS.\' + (vm.license[other.name] ? \'ENABLED\' : \'DISABLED\') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n                    <md-list layout="row">\n                        <md-list-item class="md-2-line" ng-repeat="other in vm.others | limitTo:3:3" flex="33">\n                            <md-icon md-font-icon="{{other.icon}}" class="md-avatar-icon" ng-class="vm.license[other.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{other.name | uppercase}}"></h3>\n'+"                                <p ng-class=\"vm.license[other.name] ? 'green-A700-fg' : 'red-A700-fg'\">{{ 'SETTINGS.' + (vm.license[other.name] ? 'ENABLED' : 'DISABLED') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n                </md-card>\n            </div>\n            \x3c!-- / LICENSE CARD --\x3e\n\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>"),e.put("app/main/apps/settings/views/license/request/dialog.html",'<md-dialog class="request-dialog" aria-label="Send Request">\n    <form name="requestForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="SETTINGS.REQUEST_LICENSE">Request License</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.license.name" required>\n                <div ng-messages="requestForm.name.$error" ng-show="requestForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.NAME_REQUIRED">Address field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.license.email" required>\n                <div ng-messages="requestForm.email.$error" ng-show="requestForm.email.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="SETTINGS.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.PLAN">Plan</label>\n                <md-select name="plan" ng-model="vm.license.months" required>\n                    <md-option ng-value="1"><span translate="SETTINGS.MONTH_TO_MONTH">MONTH TO MONTH</span></md-option>\n                    <md-option ng-value="12"><span translate="SETTINGS.ANNUALLY">ANNUALLY</span></md-option>\n                    <md-option ng-value="36"><span translate="SETTINGS.PERPETUAL">PERPETUAL</span></md-option>\n                </md-select>\n                <div ng-messages="requestForm.plan.$error" ng-show="requestForm.plan.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.PLAN_REQUIRED">Plan field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-subheader class="md-no-sticky">{{ \'SETTINGS.STAFF\' | translate }}</md-subheader>\n            <div layout="row" layout-align="space-between center">\n                <md-input-container class="md-block" flex>\n                    <label translate="SETTINGS.USERS">Users</label>\n                    <input type="number" name="users" ng-model="vm.license.users" required>\n                    <div ng-messages="requestForm.users.$error" ng-show="requestForm.users.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="SETTINGS.ERRORS.USERS_REQUIRED">Users field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n                <md-input-container class="md-block" flex>\n                    <label translate="SETTINGS.AGENTS">Agents</label>\n                    <input type="number" name="agents" ng-model="vm.license.agents" required>\n                    <div ng-messages="requestForm.agents.$error" ng-show="requestForm.agents.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="SETTINGS.ERRORS.AGENTS_REQUIRED">Agents field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n                <md-input-container class="md-block" flex>\n                    <label translate="SETTINGS.TELEPHONES">Telephones</label>\n                    <input type="number" name="telephones" ng-model="vm.license.telephones" required>\n                    <div ng-messages="requestForm.telephones.$error" ng-show="requestForm.telephones.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="SETTINGS.ERRORS.TELEPHONES_REQUIRED">Telephones field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n            </div>\n\n            <md-subheader class="md-no-sticky">{{ \'SETTINGS.CHANNELS\' | translate }}</md-subheader>\n            <div layout="row" layout-align="space-between center">\n                <md-switch ng-model="vm.license[channel.name]" aria-label="{{channel.name}}" ng-repeat="channel in vm.channels | limitTo:3"><span translate="SETTINGS.{{channel.name | uppercase}}"></span></md-switch>\n                <md-switch ng-model="vm.license[channel.name]" aria-label="{{channel.name}}" ng-repeat="channel in vm.channels | limitTo:3:3"><span translate="SETTINGS.{{channel.name | uppercase}}"></span></md-switch>\n            </div>\n\n            <md-subheader class="md-no-sticky">{{ \'SETTINGS.MODULES\' | translate }}</md-subheader>\n            <div layout="row" layout-align="space-between center">\n                <md-switch ng-model="vm.license[module.name]" aria-label="{{module.name}}" ng-repeat="module in vm.modules"><span translate="SETTINGS.{{module.name | uppercase}}"></span></md-switch>\n            </div>\n\n            <md-subheader class="md-no-sticky">{{ \'SETTINGS.SESSIONS\' | translate }}</md-subheader>\n            <div layout="row">\n                <md-input-container ng-repeat="session in vm.sessions" class="md-block" flex="50">\n                    <label>{{ \'SETTINGS.\' + session.name | uppercase | translate }} ({{ \'SETTINGS.\' + session.label | uppercase | translate }})</label>\n                    <input type="number" name="{{session.name}}" ng-model="vm.license[session.name]" required>\n                    <div class="hint"><span>0={{ \'SETTINGS.UNLIMITED_CHANNELS\' | translate }}</span></div>\n                    <div ng-messages="requestForm[session.name].$error" ng-show="requestForm[session.name].$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="SETTINGS.ERRORS.CHANNEL_REQUIRED">Mandatory field</span>\n                        </div>\n                    </div>\n                </md-input-container>\n            </div>\n\n            <md-subheader class="md-no-sticky">{{ \'SETTINGS.ADDONS\' | translate }}</md-subheader>\n            <div layout="row" layout-align="space-between center">\n                <md-switch ng-model="vm.license[addon.name]" aria-label="{{module.name}}" ng-repeat="addon in vm.addons"><span translate="SETTINGS.{{addon.name | uppercase}}"></span></md-switch>\n            </div>\n\n            <md-subheader class="md-no-sticky">{{ \'SETTINGS.OTHERS\' | translate }}</md-subheader>\n            <div layout="row" layout-align="space-between center">\n                <md-switch ng-model="vm.license[other.name]" aria-label="{{other.name}}" ng-repeat="other in vm.others"><span translate="SETTINGS.{{other.name | uppercase}}"></span></md-switch>\n            </div>\n\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.DESCRIPTION">Description</label>\n                <textarea name="description" ng-model="vm.license.description"></textarea>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.sendRequest()" class="send-button md-accent md-raised" ng-disabled="requestForm.$invalid || requestForm.$pristine" aria-label="SEND" translate="SETTINGS.SEND" translate-attr-aria-label="SETTINGS.SEND">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/license/update/dialog.html",'<md-dialog class="update-dialog" aria-label="Update License">\n    <form name="updateForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="SETTINGS.UPDATE_LICENSE">Update License</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-content layout="row">\n                <span class="md-title" translate="SETTINGS.UPDATE_LICENSE_MANUALLY">Do you want to update your license manually?</span>\n            </md-content>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.ENTER_LICENSE">Enter your license</label>\n                <textarea name="key" ng-model="vm.licenseKey" required></textarea>\n                <div ng-messages="updateForm.name.$error" ng-show="updateForm.key.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.LICENSE_REQUIRED">License key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.updateLicense()" class="send-button md-accent md-raised" ng-disabled="updateForm.$invalid || updateForm.$pristine" aria-label="UPDATE" translate="SETTINGS.UPDATE" translate-attr-aria-label="SETTINGS.UPDATE">\n                    UPDATE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/networks/create/dialog.html",'<md-dialog class="network-dialog" aria-label="New Network">\n    <form name="networkForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.network.type" autofocus required>\n                    <md-option ng-value="\'localnet\'">LocalNET</md-option>\n                    <md-option ng-value="\'externip\'">ExternIP</md-option>\n                </md-select>\n                <div ng-messages="networkForm[\'type\'].$error" ng-show="networkForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.network.type == \'localnet\'" class="md-block">\n                <label translate="SETTINGS.LOCALNETADDRESS">localNetAddress</label>\n                <input type="text" name="value" ng-model="vm.network.value" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/" ng-required="true">\n\n                <div class="hint"><span translate="SETTINGS.HELP.LOCALNETADDRESS"></span></div>\n                <div ng-messages="networkForm[\'value\'].$error" ng-show="networkForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.LOCALNETADDRESS_REQUIRED">localNetAddress field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="SETTINGS.ERRORS.LOCALNETADDRESS_MUST_VALID_PATTERN" translate-values="{ regex: \'/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/\' }">localNetAddress must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.network.type == \'externip\'" class="md-block">\n                <label translate="SETTINGS.ADDRESS">Address</label>\n                <input type="text" name="value" ng-model="vm.network.value" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/" ng-required="true">\n\n                <div class="hint"><span translate="SETTINGS.HELP.ADDRESS"></span></div>\n                <div ng-messages="networkForm[\'value\'].$error" ng-show="networkForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.ADDRESS_REQUIRED">Address field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="SETTINGS.ERRORS.ADDRESS_MUST_VALID_PATTERN" translate-values="{ regex: \'/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/\' }">Address must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newNetwork" ng-click="vm.saveNetwork()" class="send-button md-accent md-raised" ng-disabled="networkForm.$invalid || networkForm.$pristine" aria-label="SAVE" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newNetwork" ng-click="vm.addNewNetwork()" class="send-button md-accent md-raised" ng-disabled="networkForm.$invalid" aria-label="ADD" translate="SETTINGS.ADD_NETWORK" translate-attr-aria-label="SETTINGS.ADD_NETWORK">\n                    ADD NETWORK\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-click="vm.deleteNetwork($event)" aria-label="DELETE" translate translate-attr-aria-label="SETTINGS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SETTINGS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/networks/networks.html",'<div id="networks" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.NETWORKS">Networks</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="SETTINGS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedNetworks.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedNetworks =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="SETTINGS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-networks-count">\n                    <span>{{vm.selectedNetworks.length}}</span>\n                    <span translate="SETTINGS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="NETWORKS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllNetworks()" translate="SETTINGS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectNetworks()" translate="SETTINGS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedNetworks" csv-label="true" filename="networks.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-click="vm.deleteSelectedNetworks($event)" aria-label="delete selected" translate translate-attr-label="NETWORKS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- NETWORK TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedNetworks" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getNetworks">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'SETTINGS.ID\' | translate }}</th>\n                                <th md-column md-order-by="type">{{ \'SETTINGS.TYPE\' | translate }}</th>\n                                <th md-column md-order-by="value">{{ \'SETTINGS.ADDRESS\' | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ \'SETTINGS.CREATED_AT\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.networks.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="SETTINGS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="network" md-select-id="id" ng-repeat="network in vm.networks.rows">\n                                <td md-cell ng-if="network.userpic"><img class="avatar" alt="{{network.name}}" ng-src="api/users/{{network.id}}/avatar" /></td>\n                                <td md-cell ng-if="!network.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{network.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditNetwork($event, network)" md-cell class="id ">{{network.id}}</td>\n                                <td ng-click="vm.createOrEditNetwork($event, network)" md-cell class="type ">{{ vm.arraytype[network.type].option }}</td>\n                                <td ng-click="vm.createOrEditNetwork($event, network)" md-cell class="value ">{{network.value}}</td>\n                                <td ng-click="vm.createOrEditNetwork($event, network)" md-cell class="createdAt ">{{network.createdAt | date:\'medium\' }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SETTINGS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.editdialog(network, $event    )" translate="SETTINGS.EDIT_NETWORK">\n                                                    Edit Network\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(network, $event    )" translate="SETTINGS.DELETE_NETWORK">\n                                                    Delete Network\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'SETTINGS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SETTINGS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SETTINGS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.networks.count}}" md-on-paginate="vm.getNetworks" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / NETWORK TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD NETWORK BUTTON --\x3e\n    <md-button class="md-fab md-accent" id="add-network-button" ng-click="vm.createOrEditNetwork($event)" aria-label="add network" translate translate-attr-aria-label="SETTINGS.ADD_NETWORK">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD NETWORK BUTTON --\x3e\n</div>'),e.put("app/main/apps/settings/views/smtps/create/dialog.html",'<md-dialog class="smtp-dialog" aria-label="New Smtp">\n    <form name="smtpForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.ACCOUNTNAME">AccountName</label>\n                <input type="text" name="name" ng-model="vm.smtp.name" ng-required="true" autofocus>\n\n                <div ng-messages="smtpForm[\'name\'].$error" ng-show="smtpForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.ACCOUNTNAME_REQUIRED">AccountName field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.EMAILADDRESS">EmailAddress</label>\n                <input type="email" name="email" ng-model="vm.smtp.email" ng-required="true">\n\n                <div class="hint"><span translate="SETTINGS.HELP.EMAILADDRESS"></span></div>\n                <div ng-messages="smtpForm[\'email\'].$error" ng-show="smtpForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.EMAILADDRESS_REQUIRED">EmailAddress field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="SETTINGS.ERRORS.EMAILADDRESS_MUST_VALID">EmailAddress must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.SMTP_SERVICE">SMTP_Service</label>\n                <md-select name="Smtp.service" ng-model="vm.smtp.Smtp.service" required>\n                    <md-option ng-value="null">Custom</md-option>\n                    <md-option ng-value="\'gmail\'">Gmail</md-option>\n                    <md-option ng-value="\'hotmail\'">Hotmail</md-option>\n                    <md-option ng-value="\'yahoo\'">Yahoo</md-option>\n                    <md-option ng-value="\'outlook365\'">Outlook365</md-option>\n                </md-select>\n                <div ng-messages="smtpForm[\'Smtp.service\'].$error" ng-show="smtpForm[\'Smtp.service\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.SMTP_SERVICE_REQUIRED">SMTP_Service field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                <label translate="SETTINGS.SMTP_HOST">SMTP_Host</label>\n                <input type="text" name="Smtp.host" ng-model="vm.smtp.Smtp.host" ng-required="true">\n\n                <div ng-messages="smtpForm[\'Smtp.host\'].$error" ng-show="smtpForm[\'Smtp.host\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.SMTP_HOST_REQUIRED">SMTP_Host field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                <label translate="SETTINGS.SMTP_PORT">SMTP_Port</label>\n                <input type="number" name="Smtp.port" ng-model="vm.smtp.Smtp.port" ng-required="true">\n\n                <div ng-messages="smtpForm[\'Smtp.port\'].$error" ng-show="smtpForm[\'Smtp.port\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.SMTP_PORT_REQUIRED">SMTP_Port field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                <md-switch ng-model="vm.smtp.Smtp.secure" aria-label="SMTP_Secure"><span translate="SETTINGS.SMTP_SECURE">SMTP_Secure</span></md-switch>\n\n                <div class="hint"><span translate="SETTINGS.HELP.SMTP_SECURE"></span></div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                <md-switch ng-model="vm.smtp.Smtp.authentication" aria-label="SMTP_Authentication"><span translate="SETTINGS.SMTP_AUTHENTICATION">SMTP_Authentication</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.smtp.Smtp.authentication == true || vm.smtp.Smtp.service != null" class="md-block">\n                <label translate="SETTINGS.SMTP_USERNAME">SMTP_Username</label>\n                <input type="text" name="Smtp.user" ng-model="vm.smtp.Smtp.user" ng-required="true">\n\n                <div class="hint"><span translate="SETTINGS.HELP.SMTP_USERNAME"></span></div>\n                <div ng-messages="smtpForm[\'Smtp.user\'].$error" ng-show="smtpForm[\'Smtp.user\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.SMTP_USERNAME_REQUIRED">SMTP_Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.smtp.Smtp.authentication == true || vm.smtp.Smtp.service != null">\n                <label translate="SETTINGS.SMTP_PASSWORD">SMTP_Password</label>\n                <input type="password" name="Smtp.pass" ng-model="vm.smtp.Smtp.pass" placeholder="Password" translate translate-attr-placeholder="SETTINGS.PASSWORD" required>\n                <div class="hint"><span translate="SETTINGS.HELP.SMTP_PASSWORD"></span></div>\n                <div ng-messages="smtpForm[\'Smtp.pass\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="SETTINGS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.DESCRIPTION">Description</label>\n                <input type="" name="description" ng-model="vm.smtp.description">\n\n                <div ng-messages="smtpForm[\'description\'].$error" ng-show="smtpForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSmtp" ng-click="vm.saveSmtp()" class="send-button md-accent md-raised" ng-disabled="smtpForm.$invalid || smtpForm.$pristine" aria-label="SAVE" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSmtp" ng-click="vm.addNewSmtp()" class="send-button md-accent md-raised" ng-disabled="smtpForm.$invalid" aria-label="ADD" translate="SETTINGS.ADD_SMTP" translate-attr-aria-label="SETTINGS.ADD_SMTP">\n                    ADD SMTP\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSmtp" ng-click="vm.deleteSmtp($event)" aria-label="DELETE" translate translate-attr-aria-label="SETTINGS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SETTINGS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/smtps/smtps.html",'<div id="smtps" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.SMTP">Smtp</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div>\n            <md-button type="submit" ng-click="vm.verifySmtp()" ng-disabled="!vm.smtp.id" class="send-button md-accent md-raised" translate="SETTINGS.VERIFY" translate-attr-aria-label="SETTINGS.VERIFY">\n                VERIFY\n            </md-button>\n            <md-button type="submit" ng-click="vm.saveSmtp()" ng-disabled="(generalForm.$pristine) || (generalForm.$invalid)" class="send-button md-accent md-raised" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n            <div class="smtp-detail-form-container general md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.GENERAL">GENERAL</div>\n                </div>\n                <form name="generalForm" novalidate>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.ACCOUNTNAME">AccountName</label>\n                        <input type="text" name="name" ng-model="vm.smtp.name" ng-required="true" autofocus>\n\n                        <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.ACCOUNTNAME_REQUIRED">AccountName field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.EMAILADDRESS">EmailAddress</label>\n                        <input type="email" name="email" ng-model="vm.smtp.email" ng-required="true">\n\n                        <div class="hint"><span translate="SETTINGS.HELP.EMAILADDRESS"></span></div>\n                        <div ng-messages="generalForm[\'email\'].$error" ng-show="generalForm[\'email\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.EMAILADDRESS_REQUIRED">EmailAddress field is required</span>\n                            </div>\n                            <div ng-message="email">\n                                <span translate="SETTINGS.ERRORS.EMAILADDRESS_MUST_VALID">EmailAddress must be a valid e-mail address</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.SMTP_SERVICE">SMTP_Service</label>\n                        <md-select name="Smtp.service" ng-model="vm.smtp.Smtp.service" required>\n                            <md-option ng-value="null">Custom</md-option>\n                            <md-option ng-value="\'gmail\'">Gmail</md-option>\n                            <md-option ng-value="\'hotmail\'">Hotmail</md-option>\n                            <md-option ng-value="\'yahoo\'">Yahoo</md-option>\n                            <md-option ng-value="\'outlook365\'">Outlook365</md-option>\n                        </md-select>\n                        <div ng-messages="generalForm[\'Smtp.service\'].$error" ng-show="generalForm[\'Smtp.service\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SMTP_SERVICE_REQUIRED">SMTP_Service field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                        <label translate="SETTINGS.SMTP_HOST">SMTP_Host</label>\n                        <input type="text" name="Smtp.host" ng-model="vm.smtp.Smtp.host" ng-required="true">\n\n                        <div ng-messages="generalForm[\'Smtp.host\'].$error" ng-show="generalForm[\'Smtp.host\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SMTP_HOST_REQUIRED">SMTP_Host field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                        <label translate="SETTINGS.SMTP_PORT">SMTP_Port</label>\n                        <input type="number" name="Smtp.port" ng-model="vm.smtp.Smtp.port" ng-required="true">\n\n                        <div ng-messages="generalForm[\'Smtp.port\'].$error" ng-show="generalForm[\'Smtp.port\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SMTP_PORT_REQUIRED">SMTP_Port field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                        <md-switch ng-model="vm.smtp.Smtp.secure" aria-label="SMTP_Secure"><span translate="SETTINGS.SMTP_SECURE">SMTP_Secure</span></md-switch>\n\n                        <div class="hint"><span translate="SETTINGS.HELP.SMTP_SECURE"></span></div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                        <md-switch ng-model="vm.smtp.Smtp.authentication" aria-label="SMTP_Authentication"><span translate="SETTINGS.SMTP_AUTHENTICATION">SMTP_Authentication</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="vm.smtp.Smtp.authentication == true || vm.smtp.Smtp.service != null" class="md-block">\n                        <label translate="SETTINGS.SMTP_USERNAME">SMTP_Username</label>\n                        <input type="text" name="Smtp.user" ng-model="vm.smtp.Smtp.user" ng-required="true">\n\n                        <div class="hint"><span translate="SETTINGS.HELP.SMTP_USERNAME"></span></div>\n                        <div ng-messages="generalForm[\'Smtp.user\'].$error" ng-show="generalForm[\'Smtp.user\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SMTP_USERNAME_REQUIRED">SMTP_Username field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.smtp.Smtp.authentication == true || vm.smtp.Smtp.service != null">\n                        <label translate="SETTINGS.SMTP_PASSWORD">SMTP_Password</label>\n                        <input type="password" name="Smtp.pass" ng-model="vm.smtp.Smtp.pass" placeholder="Password" translate translate-attr-placeholder="SETTINGS.PASSWORD" required>\n                        <div class="hint"><span translate="SETTINGS.HELP.SMTP_PASSWORD"></span></div>\n                        <div ng-messages="generalForm[\'Smtp.pass\'].$error" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                            </div>\n                            <div ng-message="pattern">\n                                <span translate="SETTINGS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.DESCRIPTION">Description</label>\n                        <input type="" name="description" ng-model="vm.smtp.description">\n\n                        <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/settings/views/system/system.html",'<div id="system" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.SYSTEM">SYSTEM</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" md-border-bottom flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SETTINGS.GENERAL">GENERAL</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="system-detail-form-container personal_info md-background-bg md-whiteframe-1dp">\n                        <md-card class="md-whiteframe-1dp padding-20" layout="row" layout-xs="column" layout-wrap>\n                            <ms-widget flex="50" flex-xs="100">\n                                \x3c!-- Front --\x3e\n                                <ms-widget-front class="white-bg">\n                                    <div class="ph-16 pt-16 pb-8 md-accent-bg">\n                                        <div class="h3">OS</div>\n                                    </div>\n\n                                    <div layout="row" layout-align="start center" layout-wrap>\n                                        <div flex="100" flex-gt-md="100">\n                                            <div class="p-16 pb-32">\n                                                <div class="h4">{{vm.system.system.manufacturer}} {{vm.system.system.model}}</div>\n                                                <div class="h4">{{vm.system.cpu.manufacturer}} {{vm.system.cpu.brand}} - {{vm.system.cpu.speed}} GHz - {{vm.system.cpu.cores}} Cores</div>\n                                                <div class="h4">{{vm.system.os.distro}} - {{vm.system.os.release}} - Kernel: {{vm.system.os.kernel}}</div>\n                                                <div class="h4">Node.js: {{vm.system.node}}</div>\n                                                <div class="h4">Host: {{vm.system.os.hostname}} - Uptime: {{vm.system.time.uptime / 60 | number:0}} m</div>\n                                                <div class="h4">TimeZone: {{vm.system.time.timezone}} ({{vm.system.time.timezoneName}})</div>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </ms-widget-front>\n                                \x3c!-- / Front --\x3e\n                            </ms-widget>\n                            <ms-widget flex="25" flex-xs="100">\n                                \x3c!-- Front --\x3e\n                                <ms-widget-front class="white-bg">\n                                    <div class="ph-16 pt-16 pb-8 md-accent-bg md-hue-1">\n                                        <div class="h3">CPU</div>\n                                    </div>\n\n                                    <div layout="row" layout-align="start center" layout-wrap>\n                                        <div flex="100" flex-gt-md="100">\n                                            <div class="p-16 pb-32">\n                                                <div class="pb-8" layout="row" layout-align="space-between start">\n                                                    <span class="h3" translate="SETTINGS.AVG_LOAD">AVG Load</span>\n                                                    <span class="h3 secondary-text font-weight-500">{{vm.system.currentLoad.avgload * 100 | number:0}}%</span>\n                                                </div>\n                                                <md-progress-linear class="red" md-mode="determinate" value="{{vm.system.currentLoad.avgload * 100 | number:0}}"></md-progress-linear>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </ms-widget-front>\n                                \x3c!-- / Front --\x3e\n                            </ms-widget>\n                            <ms-widget flex="25" flex-xs="100">\n                                \x3c!-- Front --\x3e\n                                <ms-widget-front class="white-bg">\n                                    <div class="ph-16 pt-16 pb-8 md-accent-bg md-hue-3">\n                                        <div class="h3">MEM</div>\n                                    </div>\n\n                                    <div layout="row" layout-align="start center" layout-wrap>\n                                        <div flex="100" flex-gt-md="100">\n                                            <div class="p-16 pb-32">\n                                                <div class="h4">{{\'SETTINGS.TOTAL\' | translate}}: {{vm.system.mem.total / 1024 / 1024 / 1024 | number:0}} GB</div>\n                                                <div class="h4">{{\'SETTINGS.FREE\' | translate}}: {{vm.system.mem.available / 1024 / 1024 / 1024 | number:0}} GB</div>\n                                                <div class="h4">{{\'SETTINGS.USED\' | translate}}: {{vm.system.mem.active / 1024 / 1024 / 1024 | number:0}} GB</div>\n                                            </div>\n                                            <div class="p-16 pb-32">\n                                                <div class="pb-8" layout="row" layout-align="space-between start">\n                                                    <span class="h3" translate="SETTINGS.USED">Used</span>\n                                                    <span class="h3 secondary-text font-weight-500">{{(vm.system.mem.active / vm.system.mem.total) * 100 | number : 0}}%</span>\n                                                </div>\n                                                <md-progress-linear class="md-warn" md-mode="determinate" value="{{(vm.system.mem.active / vm.system.mem.total) * 100 | number : 0 }}"></md-progress-linear>\n\n                                            </div>\n                                        </div>\n                                    </div>\n                                </ms-widget-front>\n                                \x3c!-- / Front --\x3e\n                            </ms-widget>\n                        </md-card>\n\n                        <md-card class="md-whiteframe-1dp padding-20" layout="row" layout-xs="column" layout-wrap>\n                            <ms-widget ng-repeat="disk in vm.system.fsSize" flex="25" flex-xs="100">\n                                \x3c!-- Front --\x3e\n                                <ms-widget-front class="white-bg">\n                                    <div class="ph-16 pt-16 pb-8 md-accent-bg md-hue-3">\n                                        <div class="h3">DISK {{$index + 1}}</div>\n                                    </div>\n\n                                    <div layout="row" layout-align="start center" layout-wrap>\n                                        <div flex="100" flex-gt-md="100">\n                                            <div class="p-16 pb-32">\n                                                <div class="h4">{{\'SETTINGS.FILE_SYSTEM\' | translate}}: {{disk.fs}}</div>\n                                                <div class="h4">{{\'SETTINGS.MOUNT_POINT\' | translate}}: "{{disk.mount}}"</div>\n                                                <div class="h4">{{\'SETTINGS.TOTAL\' | translate}}: {{disk.size / 1024 / 1024 / 1024 | number:0}} GB</div>\n                                                <div class="h4">{{\'SETTINGS.USED\' | translate}}: {{disk.used / 1024 / 1024 / 1024 | number:0}} GB</div>\n                                            </div>\n                                            <div class="p-16 pb-32">\n                                                <div class="pb-8" layout="row" layout-align="space-between start">\n                                                    <span class="h3" translate="SETTINGS.USED">Used</span>\n                                                    <span class="h4 secondary-text font-weight-500">{{disk.use | number:0}}%</span>\n                                                </div>\n                                                <md-progress-linear class="red" md-mode="determinate" value="{{disk.use | number:0}}"></md-progress-linear>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </ms-widget-front>\n                                \x3c!-- / Front --\x3e\n                            </ms-widget>\n                        </md-card>\n\n                        <md-card class="md-whiteframe-1dp padding-20" layout="row" layout-xs="column" layout-wrap>\n                            <ms-widget ng-repeat="net in vm.system.net" flex="25" flex-xs="100">\n                                \x3c!-- Front --\x3e\n                                <ms-widget-front class="white-bg">\n                                    <div class="ph-16 pt-16 pb-8 md-accent-bg md-hue-3">\n                                        <div class="h3">NET {{$index + 1}}</div>\n                                    </div>\n\n                                    <div layout="row" layout-align="start center" layout-wrap>\n                                        <div flex="100" flex-gt-md="100">\n                                            <div class="p-16 pb-32">\n                                                <div class="h4">{{\'SETTINGS.INTERFACE\' | translate}}: {{net.iface}}</div>\n                                                <div class="h4">IPv4: {{net.ip4}}</div>\n                                                <div class="h4">IPv6: {{net.ip6}}</div>\n                                                <div class="h4">MAC: {{net.mac}}</div>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </ms-widget-front>\n                                \x3c!-- / Front --\x3e\n                            </ms-widget>\n                        </md-card>\n\n                        <md-card class="md-whiteframe-1dp padding-20" layout="row">\n                            <div flex>\n                                <md-toolbar class="md-table-toolbar md-default">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead" translate="SETTINGS.TOP_N_PROCESSES" translate-values="{value: vm.processLimit}"></span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm.searchTerm1 = query" on-collapse="vm.searchTerm1 = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-table-container>\n                                    <table md-table>\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column>pid</th>\n                                                <th md-column>{{\'SETTINGS.NAME\' | translate}}</th>\n                                                <th md-column>{{\'SETTINGS.STATE\' | translate}}</th>\n                                                <th md-column>pmem</th>\n                                                <th md-column>pcpu</th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body>\n                                            <tr md-row ng-repeat="process in vm.system.processes.list | limitTo: vm.processLimit | filter: vm.searchTerm1 | orderBy:\'-pcpu\'">\n                                                <td md-cell>{{process.pid}}</td>\n                                                <td md-cell>{{process.command}}</td>\n                                                <td md-cell>\n                                                    <span class="text-boxed white-fg" ng-class="{\n                          \'green-600-bg\': process.state == \'running\',\n                          \'yellow-600-bg\': process.state == \'sleeping\',\n                          \'red-600-bg\': process.state == \'blocked\'}">{{process.state | uppercase}}</span>\n                                                </td>\n                                                <td md-cell>{{process.pmem}}%</td>\n                                                <td md-cell>{{process.pcpu}}%</td>\n                                            </tr>\n                                        </tbody>\n                                    </table>\n                                </md-table-container>\n                            </div>\n                        </md-card>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SETTINGS.PROCESSES">PROCESSES</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="system-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <md-card class="md-whiteframe-1dp padding-20" flex>\n                            <md-toolbar class="md-table-toolbar md-default">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="SETTINGS.MOTION_PROCESS_MANAGEMENT"></span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm.searchTerm2 = query" on-collapse="vm.searchTerm2 = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-click="vm.getProcesses()" class="md-icon-button" aria-label="Reload">\n                                        <md-icon md-font-icon="icon-reload" class="s24"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table>\n                                    <thead md-head>\n                                        <tr md-row>\n                                            <th md-column>id</th>\n                                            <th md-column>pid</th>\n                                            <th md-column>{{\'SETTINGS.NAME\' | translate}}</th>\n                                            <th md-column>{{\'SETTINGS.STATE\' | translate}}</th>\n                                            <th md-column>MEM</th>\n                                            <th md-column>CPU</th>\n                                            <th md-column width="20px">Actions</th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row ng-repeat="process in vm.processes | filter: vm.searchTerm2 | orderBy:\'-monit.cpu\'">\n                                            <td md-cell>{{process.pm_id}}</td>\n                                            <td md-cell>{{process.pid}}</td>\n                                            <td md-cell>{{process.name == \'agi\' ? \'agi (Cally Square IVR)\' : process.name}}</td>\n                                            <td md-cell>\n                                                <span class="text-boxed white-fg" ng-class="{\'green-600-bg\': process.pm2_env.status == \'online\', \'red-600-bg\': process.pm2_env.status == \'stopped\'}">{{process.pm2_env.status | uppercase}}</span>\n                                            </td>\n                                            <td md-cell>{{process.monit.memory / 1024 / 1024 | number:0}} MB</td>\n                                            <td md-cell>{{process.monit.cpu}}%</td>\n                                            <td md-cell>\n                                                <md-button ng-if="process.pm2_env.status !== \'online\'" ng-click="vm.updateProcess($event, process.pm_id, \'online\')" class="md-icon-button" aria-label="Play">\n                                                    <md-icon md-font-icon="icon-play" class="s24"></md-icon>\n                                                </md-button>\n                                                <md-button ng-if="process.pm2_env.status === \'online\'" ng-click="vm.updateProcess($event, process.pm_id, \'stopped\')" class="md-icon-button" aria-label="Stop">\n                                                    <md-icon md-font-icon="icon-stop" class="s24"></md-icon>\n                                                </md-button>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                    <tfoot md-foot>\n                                        <tr md-row>\n                                            <td md-cell></td>\n                                            <td md-cell></td>\n                                            <td md-cell></td>\n                                            <td md-cell></td>\n                                            <td md-cell>{{ (vm.processes | map: \'monit.memory\' | sum) / 1024 / 1024 | number:0 }} MB</td>\n                                            <td md-cell></td>\n                                            <td md-cell></td>\n                                        </tr>\n                                    </tfoot>\n                                </table>\n                            </md-table-container>\n                        </md-card>\n                        <md-card class="md-whiteframe-1dp padding-20" flex>\n                            <md-toolbar class="md-table-toolbar md-default">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="SETTINGS.USEFUL_COMMANDS"></span>\n                                    <div flex></div>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table>\n                                    <thead md-head>\n                                        <tr md-row>\n                                            <th md-column width="30%">{{\'SETTINGS.COMMAND\' | translate}}</th>\n                                            <th md-column>{{\'SETTINGS.DESCRIPTION\' | translate}}</th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr>\n                                            <td md-cell class="no-border">pm2 list</td>\n                                            <td md-cell class="no-border">{{ \'SETTINGS.PM2_LIST\' | translate}}</td>\n                                        </tr>\n                                        <tr>\n                                            <td md-cell class="no-border">pm2 start &lt;id | name&gt;</td>\n                                            <td md-cell class="no-border">{{ \'SETTINGS.PM2_START\' | translate}}</td>\n                                        </tr>\n                                        <tr>\n                                            <td md-cell class="no-border">pm2 stop &lt;id | name | all&gt;</td>\n                                            <td md-cell class="no-border">{{ \'SETTINGS.PM2_STOP\' | translate}}</td>\n                                        </tr>\n                                        <tr>\n                                            <td md-cell class="no-border">pm2 restart &lt;id | name&gt;</td>\n                                            <td md-cell class="no-border">{{ \'SETTINGS.PM2_RESTART\' | translate}}</td>\n                                        </tr>\n                                        <tr>\n                                            <td md-cell class="no-border">pm2 logs [id | name]</td>\n                                            <td md-cell class="no-border">{{ \'SETTINGS.PM2_LOGS\' | translate}}</td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                        </md-card>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/settings/views/updates/update/dialog.html",'<md-dialog aria-label="Update">\n    <form name="updateForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n            </div>\n        </md-toolbar>\n\n        <div md-background-bg layout="row" layout-align="start start">\n            <md-progress-linear md-mode="determinate" value="{{vm.progress}}" class="md-warn"></md-progress-linear>\n        </div>\n\n        <md-dialog-content ms-scroll>\n            <div layout="row" layout-align="center center">\n                <div ng-if="vm.updating" layout="column" layout-align="center center">\n                    <span class="text-center md-title">Grab a quick coffee and</span>\n                    <span class="text-center md-title">get back here as soon as completed!</span>\n                    <span class="text-center md-title">{{vm.output}}</span>\n                </div>\n                <div ng-if="!vm.updating">\n                    <div ng-if="vm.success" layout="column" layout-align="center center">\n                        <span class="text-center md-title">Update Completed! Thank you for your time.</span>\n                        <span class="text-center md-title">In order to complete the update,</span>\n                        <span class="text-center md-title">please click on reload button</span>\n                    </div>\n                    <div ng-if="!vm.success" layout="column" layout-align="center center">\n                        <span class="text-center md-title">Update Error!</span>\n                        <span class="text-center md-title">Please contact your administrator!</span>\n                        <span class="text-center md-title">{{vm.output}}</span>\n                    </div>\n                </div>\n                <img src="assets/images/business/users.jpg" alt="" width="128" height="128" />\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions ng-if="!vm.updating" layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.reload()" class="send-button md-warm md-raised" aria-label="RELOAD" translate="SETTINGS.RELOAD" translate-attr-aria-label="SETTINGS.RELOAD">\n                    RELOAD\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/updates/updates.html",'<div id="updates" class="page-layout simple fullwidth doc-page">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.UPDATES">UPDATES</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n            \x3c!-- UPDATE CARD --\x3e\n            <div layout="row" ng-if="!vm.updating">\n                <md-card class="md-whiteframe-1dp padding-20" flex>\n                    <div layout="column" layout-align="center center">\n\n                        <span class="md-title md-accent-fg padding-20 text-bold" translate="SETTINGS.CURRENT_VERSION">CURRENT VERSION</span>\n\n                        <span class="md-display-3 padding-20">{{vm.version.current}}</span>\n\n                        <md-button href="https://wiki.xcallymotion.com/display/XMV/Motion+GUI#MotionGUI-Version{{vm.version.current}}" target="_blank" class="md-accent" title="CHANGELOG" aria-label="CHANGELOG" translate="SETTINGS.CHANGELOG" translate-attr-aria-label="SETTINGS.CHANGELOG">\n                            CHANGELOG\n                        </md-button>\n                    </div>\n                </md-card>\n                <md-card class="md-whiteframe-20dp padding-20" flex ng-if="vm.version.current != vm.version.latest">\n                    <div layout="column" layout-align="center center">\n\n                        <span class="md-title md-warn-fg padding-20 text-bold" translate="SETTINGS.NEW_VERSION">NEW VERSION</span>\n\n                        <span class="md-display-3 padding-20">{{vm.version.latest}}</span>\n\n                        <md-button href="https://wiki.xcallymotion.com/display/XMV/Motion+GUI#MotionGUI-Version{{vm.version.latest}}" target="_blank" class="md-accent" title="CHANGELOG" aria-label="CHANGELOG" translate="SETTINGS.CHANGELOG" translate-attr-aria-label="SETTINGS.CHANGELOG">\n                            CHANGELOG\n                        </md-button>\n                        <md-button ng-click="vm.updateConfirm($event)" class="md-raised md-warn" aria-label="CHANGELOG" translate="SETTINGS.UPDATE" translate-attr-aria-label="SETTINGS.UPDATE">UPDATE</md-button>\n                    </div>\n                </md-card>\n                <md-card class="md-whiteframe-1dp padding-20" flex ng-if="vm.version.current == vm.version.latest">\n                    <div layout="column" layout-align="center center">\n\n                        <span class="md-title md-warn-fg padding-20 text-bold" translate="SETTINGS.REMOTE_VERSION">REMOTE VERSION</span>\n\n                        <span class="md-subhead padding-20" translate="SETTINGS.NO_NEW_VERSION_AVAILABLE">NO NEW VERSION AVAILABLE</span>\n                    </div>\n                </md-card>\n            </div>\n            \x3c!-- / UPDATE CARD --\x3e\n\n            <div ng-if="vm.updating">\n                <md-card class="md-whiteframe-1dp padding-20" flex>\n                    <div layout="column" layout-align="center center">\n                        <span class="md-title md-accent-fg padding-20 text-bold" translate="SETTINGS.UPDATING">...</span>\n                        <md-progress-linear md-mode="determinate" class="md-accent padding-20" value="{{vm.progress}}"></md-progress-linear>\n                        <span class="md-display-1 padding-5 text-center">Grab a quick coffee and</span>\n                        <span class="md-display-1 padding-5 text-center">get back here as soon as completed</span>\n                        <img src="assets/images/business/users.jpg" alt="" width="40%" height="40%" />\n                    </div>\n                </md-card>\n            </div>\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>'),e.put("app/main/apps/sms/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="SMS.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'SMS.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'SMS.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'SMS.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'SMS.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'SMS.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'SMS.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'SMS.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'SMS.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'SMS.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'SMS.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'SMS.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'SMS.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'SMS.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"SMS.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"SMS.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"SMS.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"SMS.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"SMS.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"SMS.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"SMS.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"SMS.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'SMS.PAGE' | translate}}:', rowsPerPage: '{{'SMS.ROWSPERPAGE' | translate}}:', of: '{{'SMS.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/sms/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="SMS.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'SMS.NAME\' | translate }}</th>\n                <th md-column>{{ \'SMS.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'SMS.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'SMS.READY\' | translate }}</th>\n                <th md-column>{{ \'SMS.WAITING\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="7">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="SMS.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SMS.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditSmsQueue($event, vm.queues[value])" translate="SMS.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="SMS.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'SMS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SMS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SMS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/sms/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/sms/views/smsAccounts/create/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.smsAccount.name" ng-required="true" autofocus ng-disabled="!vm.newSmsAccount">\n\n                <div ng-messages="smsAccountForm[\'name\'].$error" ng-show="smsAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.KEY">key</label>\n                <input type="text" name="key" ng-model="vm.smsAccount.key" md-maxlength="5" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'key\'].$error" ng-show="smsAccountForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.KEY_REQUIRED">key field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="SMS.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.MOTIONPROXY">MotionProxy</label>\n                <input type="url" name="remote" ng-model="vm.smsAccount.remote" md-maxlength="255" ng-required="true">\n\n                <div class="hint"><span translate="SMS.HELP.MOTIONPROXY"></span></div>\n                <div ng-messages="smsAccountForm[\'remote\'].$error" ng-show="smsAccountForm[\'remote\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.MOTIONPROXY_REQUIRED">MotionProxy field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="SMS.ERRORS.MOTIONPROXY_MUST_VALID_URL">MotionProxy must be a valid url http://www.xcally.com</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="SMS.ERRORS.MOTIONPROXY_MAX_LENGTH" translate-values=\'{max: 255}\'>MotionProxy must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.LIST">List</label>\n                <md-select name="ListId" ng-model="vm.smsAccount.ListId" required>\n                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                </md-select>\n                <div class="hint"><span translate="SMS.HELP.LIST"></span></div>\n                <div ng-messages="smsAccountForm[\'ListId\'].$error" ng-show="smsAccountForm[\'ListId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.smsAccount.type" required>\n                    <md-option ng-value="\'twilio\'">Twilio</md-option>\n                    <md-option ng-value="\'skebby\'">Skebby</md-option>\n                    <md-option ng-value="\'connectel\'">Connectel</md-option>\n                    <md-option ng-value="\'clicksend\'">ClickSend</md-option>\n                    <md-option ng-value="\'plivo\'">Plivo</md-option>\n                    <md-option ng-value="\'infobip\'">Infobip</md-option>\n                    <md-option ng-value="\'clickatell\'">Clickatell</md-option>\n                    <md-option ng-value="\'csc\'">CSCTelecom</md-option>\n                    <md-option ng-value="\'intelepeer\'">Intelepeer</md-option>\n                </md-select>\n                <div ng-messages="smsAccountForm[\'type\'].$error" ng-show="smsAccountForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.PHONE">Phone</label>\n                <input type="text" name="phone" ng-model="vm.smsAccount.phone" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'phone\'].$error" ng-show="smsAccountForm[\'phone\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smsAccount.type == \'twilio\'" class="md-block">\n                <label translate="SMS.ACCOUNTSID">AccountSID</label>\n                <input type="text" name="accountSid" ng-model="vm.smsAccount.accountSid" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'accountSid\'].$error" ng-show="smsAccountForm[\'accountSid\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.ACCOUNTSID_REQUIRED">AccountSID field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smsAccount.type == \'plivo\'" class="md-block">\n                <label translate="SMS.AUTHID">AuthID</label>\n                <input type="text" name="authId" ng-model="vm.smsAccount.authId" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'authId\'].$error" ng-show="smsAccountForm[\'authId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.AUTHID_REQUIRED">AuthID field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smsAccount.type == \'twilio\' || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'plivo\'" class="md-block">\n                <label translate="SMS.AUTHTOKEN">AuthToken</label>\n                <input type="text" name="authToken" ng-model="vm.smsAccount.authToken" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'authToken\'].$error" ng-show="smsAccountForm[\'authToken\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.AUTHTOKEN_REQUIRED">AuthToken field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smsAccount.type == \'skebby\'" class="md-block">\n                <label translate="SMS.METHOD">Method</label>\n                <md-select name="smsMethod" ng-model="vm.smsAccount.smsMethod" required>\n                    <md-option ng-value="\'SI\'">Basic</md-option>\n                    <md-option ng-value="\'TI\'">Classic</md-option>\n                    <md-option ng-value="\'GP\'">Classic+</md-option>\n                </md-select>\n                <div ng-messages="smsAccountForm[\'smsMethod\'].$error" ng-show="smsAccountForm[\'smsMethod\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.METHOD_REQUIRED">Method field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smsAccount.type == \'skebby\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'csc\' || vm.smsAccount.type == \'infobip\'" class="md-block">\n                <label translate="SMS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.smsAccount.username" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'username\'].$error" ng-show="smsAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.smsAccount.type == \'skebby\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'infobip\'">\n                <label translate="SMS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.smsAccount.password" placeholder="Password" translate translate-attr-placeholder="SMS.PASSWORD" required>\n                <div ng-messages="smsAccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="SMS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container ng-if="vm.smsAccount.type == \'infobip\'" class="md-block">\n                <label translate="SMS.BASEURL">BaseURL</label>\n                <input type="text" name="baseUrl" ng-model="vm.smsAccount.baseUrl" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'baseUrl\'].$error" ng-show="smsAccountForm[\'baseUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.BASEURL_REQUIRED">BaseURL field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smsAccount.type == \'csc\' || vm.smsAccount.type == \'clickatell\' || vm.smsAccount.type == \'intelepeer\'" class="md-block">\n                <label translate="SMS.APIKEY">ApiKey</label>\n                <input type="text" name="apiKey" ng-model="vm.smsAccount.apiKey" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'apiKey\'].$error" ng-show="smsAccountForm[\'apiKey\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.APIKEY_REQUIRED">ApiKey field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.smsAccount.description">\n\n                <div ng-messages="smsAccountForm[\'description\'].$error" ng-show="smsAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSmsAccount" ng-click="vm.saveSmsAccount()" class="send-button md-accent md-raised" ng-disabled="smsAccountForm.$invalid || smsAccountForm.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSmsAccount" ng-click="vm.addNewSmsAccount()" class="send-button md-accent md-raised" ng-disabled="smsAccountForm.$invalid" aria-label="ADD" translate="SMS.ADD_SMSACCOUNT" translate-attr-aria-label="SMS.ADD_SMSACCOUNT">\n                    ADD SMSACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSmsAccount" ng-click="vm.deleteSmsAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="SMS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SMS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/agentadd/agentadd.html",'<md-dialog class="smsAccount-dialog" aria-label="smsAccount" ng-init="vm.onInit()">\n    <form name="smsAccountForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="SMS.AGENTADD_SMSACCOUNT">Add Agent to smsAccount</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/agent/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.AGENT">Agent</label>\n                <md-select name="agent" ng-model="vm.agent.agent" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents" ng-disabled="agent.canSelect === false">{{ agent.name }}</md-option>\n                </md-select>\n                <div ng-messages="smsAccountFormApp[\'agent\'].$error" ng-show="smsAccountFormApp[\'agent\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.agent.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'timeout\'].$error" ng-show="smsAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="SMS.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="SMS.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/autoreply/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.TIMES">times</label>\n                <md-select name="times" ng-model="vm.autoreply.times" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="1">One Time</md-option>\n                    <md-option ng-value="0">Always</md-option>\n                </md-select>\n                <div ng-messages="smsAccountFormApp[\'times\'].$error" ng-show="smsAccountFormApp[\'times\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TIMES_REQUIRED">times field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.TEXT">Text</label>\n                <textarea name="text" ng-model="vm.autoreply.text" required></textarea>\n\n                <div ng-messages="smsAccountFormApp[\'text\'].$error" ng-show="smsAccountFormApp[\'text\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TEXT_REQUIRED">Text field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/close/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.DISPOSITION">Disposition</label>\n                <input type="text" name="disposition" ng-model="vm.close.disposition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'disposition\'].$error" ng-show="smsAccountFormApp[\'disposition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.DISPOSITION_REQUIRED">Disposition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/gotoif/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.CONDITION">Condition</label>\n                <input type="text" name="condition" ng-model="vm.gotoif.condition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'condition\'].$error" ng-show="smsAccountFormApp[\'condition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.CONDITION_REQUIRED">Condition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.TRUEPRIORITY">truepriority</label>\n                <input type="number" name="truepriority" ng-model="vm.gotoif.truepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'truepriority\'].$error" ng-show="smsAccountFormApp[\'truepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TRUEPRIORITY_REQUIRED">truepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="SMS.ERRORS.TRUEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">truepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.FALSEPRIORITY">falsepriority</label>\n                <input type="number" name="falsepriority" ng-model="vm.gotoif.falsepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'falsepriority\'].$error" ng-show="smsAccountFormApp[\'falsepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.FALSEPRIORITY_REQUIRED">falsepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="SMS.ERRORS.FALSEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">falsepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/gotop/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.PRIORITY">Priority</label>\n                <input type="number" name="priority" ng-model="vm.gotop.priority" min="0" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'priority\'].$error" ng-show="smsAccountFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="SMS.ERRORS.PRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Priority must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/noop/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.noop.value" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'value\'].$error" ng-show="smsAccountFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/queue/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="smsAccountFormApp[\'queue\'].$error" ng-show="smsAccountFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'timeout\'].$error" ng-show="smsAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="SMS.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="SMS.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/system/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.COMMAND">Command</label>\n                <input type="text" name="command" ng-model="vm.system.command" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'command\'].$error" ng-show="smsAccountFormApp[\'command\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.COMMAND_REQUIRED">Command field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.VARIABLE">Variable</label>\n                <md-select name="variable" ng-model="vm.system.variable" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables" ng-disabled="variable.canSelect === false">{{ variable.name }}</md-option>\n                </md-select>\n                <div ng-messages="smsAccountFormApp[\'variable\'].$error" ng-show="smsAccountFormApp[\'variable\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/tag/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.TAG">Tag</label>\n                <md-select name="tag" ng-model="vm.tag.tag" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags" ng-disabled="tag.canSelect === false">{{ tag.name }}</md-option>\n                </md-select>\n                <div ng-messages="smsAccountFormApp[\'tag\'].$error" ng-show="smsAccountFormApp[\'tag\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TAG_REQUIRED">Tag field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/smsCannedAnswers/dialog.html",'<md-dialog class="smsCannedAnswer-dialog" aria-label="New SmsCannedAnswer">\n    <form name="smsCannedAnswerForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.KEY">Key</label>\n                <input type="" name="key" ng-model="vm.smsCannedAnswer.key" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="smsCannedAnswerForm[\'key\'].$error" ng-show="smsCannedAnswerForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.VALUE">Value</label>\n                <textarea name="value" ng-model="vm.smsCannedAnswer.value" required></textarea>\n\n                <div ng-messages="smsCannedAnswerForm[\'value\'].$error" ng-show="smsCannedAnswerForm[\'value\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.smsCannedAnswer.description">\n\n                <div ng-messages="smsCannedAnswerForm[\'description\'].$error" ng-show="smsCannedAnswerForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSmsCannedAnswer" ng-click="vm.saveSmsCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="smsCannedAnswerForm.$invalid || smsCannedAnswerForm.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSmsCannedAnswer" ng-click="vm.addNewSmsCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="smsCannedAnswerForm.$invalid" aria-label="ADD" translate="SMS.ADD_SMSCANNEDANSWER" translate-attr-aria-label="SMS.ADD_SMSCANNEDANSWER">\n                    ADD SMSCANNEDANSWER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSmsCannedAnswer" ng-click="vm.deleteSmsCannedAnswer($event)" aria-label="DELETE" translate translate-attr-aria-label="SMS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SMS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/smsDispositions/dialog.html",'<md-dialog class="smsDisposition-dialog" aria-label="New SmsDisposition">\n    <form name="smsDispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.smsDisposition.name" ng-required="true" autofocus>\n\n                <div ng-messages="smsDispositionForm[\'name\'].$error" ng-show="smsDispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSmsDisposition" ng-click="vm.saveSmsDisposition()" class="send-button md-accent md-raised" ng-disabled="smsDispositionForm.$invalid || smsDispositionForm.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSmsDisposition" ng-click="vm.addNewSmsDisposition()" class="send-button md-accent md-raised" ng-disabled="smsDispositionForm.$invalid" aria-label="ADD" translate="SMS.ADD_SMSDISPOSITION" translate-attr-aria-label="SMS.ADD_SMSDISPOSITION">\n                    ADD SMSDISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSmsDisposition" ng-click="vm.deleteSmsDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="SMS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SMS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/view.html",'<div id="sms-smsAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-smsAccounts-button md-icon-button" aria-label="Go to smsAccounts" ng-click="vm.gotoSmsAccounts()" translate translate-attr-aria-label="SMS.GO_TO_SMSACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="smsAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/smsAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.smsAccount.id}}\n                        <span ng-if="vm.smsAccount.name">{{vm.smsAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="SMS.CREATED_AT"></span> <span>{{vm.smsAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.smsAccount, $event)" class="md-fab md-warn md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="SMS.AGENTADD_SMSACCOUNT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveSmsAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (proxyForm.$invalid) || (dispositionForm.$invalid) || (smsDispositionsForm.$invalid) || (smsCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="SMS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.smsAccount.name" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.KEY">key</label>\n                                <input type="text" name="key" ng-model="vm.smsAccount.key" md-maxlength="5" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'key\'].$error" ng-show="generalForm[\'key\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.KEY_REQUIRED">key field is required</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="SMS.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.LIST">List</label>\n                                <md-select name="ListId" ng-model="vm.smsAccount.ListId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="SMS.HELP.LIST"></span></div>\n                                <div ng-messages="generalForm[\'ListId\'].$error" ng-show="generalForm[\'ListId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.LIST_REQUIRED">List field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.TYPE">Type</label>\n                                <md-select name="type" ng-model="vm.smsAccount.type" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'twilio\'">Twilio</md-option>\n                                    <md-option ng-value="\'skebby\'">Skebby</md-option>\n                                    <md-option ng-value="\'connectel\'">Connectel</md-option>\n                                    <md-option ng-value="\'clicksend\'">ClickSend</md-option>\n                                    <md-option ng-value="\'plivo\'">Plivo</md-option>\n                                    <md-option ng-value="\'infobip\'">Infobip</md-option>\n                                    <md-option ng-value="\'clickatell\'">Clickatell</md-option>\n                                    <md-option ng-value="\'csc\'">CSCTelecom</md-option>\n                                    <md-option ng-value="\'intelepeer\'">Intelepeer</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.PHONE">Phone</label>\n                                <input type="text" name="phone" ng-model="vm.smsAccount.phone" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'phone\'].$error" ng-show="generalForm[\'phone\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'twilio\'" class="md-block">\n                                <label translate="SMS.ACCOUNTSID">AccountSID</label>\n                                <input type="text" name="accountSid" ng-model="vm.smsAccount.accountSid" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'accountSid\'].$error" ng-show="generalForm[\'accountSid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.ACCOUNTSID_REQUIRED">AccountSID field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'plivo\'" class="md-block">\n                                <label translate="SMS.AUTHID">AuthID</label>\n                                <input type="text" name="authId" ng-model="vm.smsAccount.authId" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'authId\'].$error" ng-show="generalForm[\'authId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.AUTHID_REQUIRED">AuthID field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'twilio\' || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'plivo\'" class="md-block">\n                                <label translate="SMS.AUTHTOKEN">AuthToken</label>\n                                <input type="text" name="authToken" ng-model="vm.smsAccount.authToken" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'authToken\'].$error" ng-show="generalForm[\'authToken\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.AUTHTOKEN_REQUIRED">AuthToken field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'skebby\'" class="md-block">\n                                <label translate="SMS.METHOD">Method</label>\n                                <md-select name="smsMethod" ng-model="vm.smsAccount.smsMethod" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'SI\'">Basic</md-option>\n                                    <md-option ng-value="\'TI\'">Classic</md-option>\n                                    <md-option ng-value="\'GP\'">Classic+</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'smsMethod\'].$error" ng-show="generalForm[\'smsMethod\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.METHOD_REQUIRED">Method field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'skebby\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'csc\' || vm.smsAccount.type == \'infobip\'" class="md-block">\n                                <label translate="SMS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.smsAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block" ng-if="vm.smsAccount.type == \'skebby\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'infobip\'">\n                                <label translate="SMS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.smsAccount.password" placeholder="Password" translate translate-attr-placeholder="SMS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="SMS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container ng-if="vm.smsAccount.type == \'infobip\'" class="md-block">\n                                <label translate="SMS.BASEURL">BaseURL</label>\n                                <input type="text" name="baseUrl" ng-model="vm.smsAccount.baseUrl" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'baseUrl\'].$error" ng-show="generalForm[\'baseUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.BASEURL_REQUIRED">BaseURL field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'csc\' || vm.smsAccount.type == \'clickatell\' || vm.smsAccount.type == \'intelepeer\'" class="md-block">\n                                <label translate="SMS.APIKEY">ApiKey</label>\n                                <input type="text" name="apiKey" ng-model="vm.smsAccount.apiKey" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'apiKey\'].$error" ng-show="generalForm[\'apiKey\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.APIKEY_REQUIRED">ApiKey field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'plivo\'|| vm.smsAccount.type == \'csc\'|| vm.smsAccount.type == \'infobip\' || vm.smsAccount.type == \'intelepeer\'" class="md-block">\n                                <label translate="SMS.SENDERSTRING">SenderString</label>\n                                <input type="text" name="senderString" ng-model="vm.smsAccount.senderString" md-maxlength="11" ng-pattern="/^[A-Za-z0-9\\.\\s]*$/i" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'senderString\'].$error" ng-show="generalForm[\'senderString\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.SENDERSTRING_REQUIRED">SenderString field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="SMS.ERRORS.SENDERSTRING_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\s]*$/i\' }">SenderString must be valid pattern </span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="SMS.ERRORS.SENDERSTRING_MAX_LENGTH" translate-values=\'{max: 11}\'>SenderString must have a maximum length equal to 11</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="(vm.smsAccount.type == \'skebby\' && vm.smsAccount.smsMethod == \'GP\') || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'csc\' || vm.smsAccount.type == \'clickatell\'" class="md-block">\n                                <md-switch ng-model="vm.smsAccount.deliveryReport" aria-label="deliveryReport" ng-disabled="!vm.crudPermissions.canEdit"><span translate="SMS.DELIVERYREPORT">deliveryReport</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.WAITFORTHEASSIGNEDAGENT">WaitForTheAssignedAgent</label>\n                                <input type="number" name="waitForTheAssignedAgent" ng-model="vm.smsAccount.waitForTheAssignedAgent" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'waitForTheAssignedAgent\'].$error" ng-show="generalForm[\'waitForTheAssignedAgent\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.WAITFORTHEASSIGNEDAGENT_REQUIRED">WaitForTheAssignedAgent field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="SMS.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="SMS.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_LESS_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.smsAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.RECEIVEURL">receiveUrl</label>\n                                <div layout="row" layout-align="center center">\n                                    <button class="md-button md-fab md-mini md-primary" ngclipboard data-clipboard-target="#copytoclipboard-receiveUrl" ngclipboard-success="vm.alert({title: \'copied to clipboard\', msg: e.text});" ngclipboard-error="vm.alert({title: \'error\', msg: \'copy to clipboard failed\'});">\n                                        <md-icon md-font-icon="icon-clipboard-text"></md-icon>\n                                    </button>\n                                    <input class="md-input" type="text" id="copytoclipboard-receiveUrl" name="receiveUrl" ng-value="vm.smsAccount.remote + \'/api/sms/accounts/\' + vm.smsAccount.id + \'/notify?token=\' + vm.smsAccount.token" ng-readonly="true">\n                                </div>\n                                <div class="hint"><span translate="SMS.HELP.RECEIVEURL"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="( (vm.smsAccount.type == \'skebby\' && vm.smsAccount.smsMethod == \'GP\') || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'csc\' || vm.smsAccount.type == \'clickatell\') && vm.smsAccount.deliveryReport" class="md-block">\n                                <label translate="SMS.DELIVERYREPORTURL">deliveryReportUrl</label>\n                                <div layout="row" layout-align="center center">\n                                    <button class="md-button md-fab md-mini md-primary" ngclipboard data-clipboard-target="#copytoclipboard-deliveryReportUrl" ngclipboard-success="vm.alert({title: \'copied to clipboard\', msg: e.text});" ngclipboard-error="vm.alert({title: \'error\', msg: \'copy to clipboard failed\'});">\n                                        <md-icon md-font-icon="icon-clipboard-text"></md-icon>\n                                    </button>\n                                    <input class="md-input" type="text" id="copytoclipboard-deliveryReportUrl" name="deliveryReportUrl" ng-value="vm.smsAccount.remote + \'/api/sms/accounts/\' + vm.smsAccount.id + \'/status?token=\' + vm.smsAccount.token + (vm.smsAccount.type == \'csc\' ? \'&message-id={message-id}&state={state}\' : \'\')" ng-readonly="true">\n                                </div>\n                                <div class="hint"><span translate="SMS.HELP.DELIVERYREPORTURL"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="smsAccount-detail-form-container notification md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="SMS.NOTIFICATION">NOTIFICATION</div>\n                        </div>\n                        <form name="notificationForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.smsAccount.notificationSound" aria-label="notificationSound" ng-disabled="!vm.crudPermissions.canEdit"><span translate="SMS.NOTIFICATIONSOUND">notificationSound</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.smsAccount.notificationShake" aria-label="notificationShake" ng-disabled="!vm.crudPermissions.canEdit"><span translate="SMS.NOTIFICATIONSHAKE">notificationShake</span></md-switch>\n\n                            </md-input-container>\n                            <div class="md-block">\n                                <label class="md-caption grey-fg" translate="SMS.NOTIFICATIONTEMPLATE">notificationTemplate</label>\n                                <textarea aria-label="notificationTemplate notificationTemplate" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.smsAccount.notificationTemplate"></textarea>\n                            </div>\n\n                        </form>\n                    </div>\n                    <div class="smsAccount-detail-form-container transfer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="SMS.TRANSFER">TRANSFER</div>\n                        </div>\n                        <form name="transferForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.smsAccount.queueTransfer" aria-label="queueTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="SMS.QUEUETRANSFER">queueTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.queueTransfer == true" class="md-block">\n                                <label translate="SMS.QUEUETRANSFERTIMEOUT">queueTransferTimeout</label>\n                                <input type="number" name="queueTransferTimeout" ng-model="vm.smsAccount.queueTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'queueTransferTimeout\'].$error" ng-show="transferForm[\'queueTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.QUEUETRANSFERTIMEOUT_REQUIRED">queueTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="SMS.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="SMS.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.smsAccount.agentTransfer" aria-label="agentTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="SMS.AGENTTRANSFER">agentTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.agentTransfer == true" class="md-block">\n                                <label translate="SMS.AGENTTRANSFERTIMEOUT">agentTransferTimeout</label>\n                                <input type="number" name="agentTransferTimeout" ng-model="vm.smsAccount.agentTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'agentTransferTimeout\'].$error" ng-show="transferForm[\'agentTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.AGENTTRANSFERTIMEOUT_REQUIRED">agentTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="SMS.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="SMS.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsAccount-detail-form-container proxy md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="SMS.PROXY">PROXY</div>\n                        </div>\n                        <form name="proxyForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.TOKEN">token</label>\n                                <input type="text" name="token" ng-model="vm.smsAccount.token" autofocus disabled>\n\n                                <div ng-messages="proxyForm[\'token\'].$error" ng-show="proxyForm[\'token\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.TOKEN_REQUIRED">token field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.MOTIONPROXY">MotionProxy</label>\n                                <input type="url" name="remote" ng-model="vm.smsAccount.remote" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="SMS.HELP.MOTIONPROXY"></span></div>\n                                <div ng-messages="proxyForm[\'remote\'].$error" ng-show="proxyForm[\'remote\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.MOTIONPROXY_REQUIRED">MotionProxy field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="SMS.ERRORS.MOTIONPROXY_MUST_VALID_URL">MotionProxy must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="SMS.ERRORS.MOTIONPROXY_MAX_LENGTH" translate-values=\'{max: 255}\'>MotionProxy must have a maximum length equal to 255</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="smsAccount-detail-form-container disposition md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="SMS.DISPOSITION">DISPOSITION</div>\n                        </div>\n                        <form name="dispositionForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.smsAccount.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="SMS.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.mandatoryDisposition" class="md-block">\n                                <label translate="SMS.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.smsAccount.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="SMS.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="dispositionForm[\'mandatoryDispositionPauseId\'].$error" ng-show="dispositionForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.DISPOSITIONS">DISPOSITIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsAccount-detail-form-container smsdispositions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="SmsAccountSmsDispositionsController as vm_dc" ng-init="vm_dc.init(vm.smsAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedSmsAccountSmsDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="SMS.SMSDISPOSITIONS">SmsDispositions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event)" aria-label="add smsDisposition" translate translate-attr-label="SMS.ADD_SMSDISPOSITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedSmsAccountSmsDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedSmsAccountSmsDispositions.length}} {{vm_dc.selectedSmsAccountSmsDispositions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedSmsAccountSmsDispositions" csv-label="true" filename="smsAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedSmsAccountSmsDispositions($event)" aria-label="delete selected" translate translate-attr-label="SMSACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedSmsAccountSmsDispositions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getSmsAccountSmsDispositions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'SMS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="name">{{ \'SMS.NAME\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'SMS.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="smsDisposition" md-select-id="id" ng-repeat="smsDisposition in vm_dc.smsAccountSmsDispositions.rows">\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event, smsDisposition)" md-cell>{{smsDisposition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event, smsDisposition)" md-cell>{{smsDisposition.name}}</td>\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event, smsDisposition)" md-cell>{{smsDisposition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SMS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event, smsDisposition)" translate="SMS.EDIT_SMSDISPOSITION">\n                                                                Edit SmsDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(smsDisposition, $event)" translate="SMS.DELETE_SMSDISPOSITION">\n                                                                Delete SmsDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.smsAccountSmsDispositions.rows.length">\n                                            <td md-cell colspan="5">\n                                                <span class="text-boxed-ligth" translate="SMS.NO_SMSDISPOSITION_AVAILABLE">No smsdisposition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'SMS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SMS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SMS.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.smsAccountSmsDispositions.count}}" md-on-paginate="vm_dc.getSmsAccountSmsDispositions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.CANNEDANSWERS">CANNEDANSWERS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsAccount-detail-form-container smscannedanswers md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="SmsAccountSmsCannedAnswersController as vm_dc" ng-init="vm_dc.init(vm.smsAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedSmsAccountSmsCannedAnswers.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="SMS.SMSCANNEDANSWERS">SmsCannedAnswers</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event)" aria-label="add smsCannedAnswer" translate translate-attr-label="SMS.ADD_SMSCANNEDANSWER">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedSmsAccountSmsCannedAnswers.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedSmsAccountSmsCannedAnswers.length}} {{vm_dc.selectedSmsAccountSmsCannedAnswers.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedSmsAccountSmsCannedAnswers" csv-label="true" filename="smsAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedSmsAccountSmsCannedAnswers($event)" aria-label="delete selected" translate translate-attr-label="SMSACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedSmsAccountSmsCannedAnswers" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getSmsAccountSmsCannedAnswers">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'SMS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="key">{{ \'SMS.KEY\' | translate }}</th>\n                                            <th md-column md-order-by="value">{{ \'SMS.VALUE\' | translate }}</th>\n                                            <th md-column md-order-by="description">{{ \'SMS.DESCRIPTION\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'SMS.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="smsCannedAnswer" md-select-id="id" ng-repeat="smsCannedAnswer in vm_dc.smsAccountSmsCannedAnswers.rows">\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event, smsCannedAnswer)" md-cell>{{smsCannedAnswer.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event, smsCannedAnswer)" md-cell>{{smsCannedAnswer.key}}</td>\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event, smsCannedAnswer)" md-cell>{{smsCannedAnswer.value}}</td>\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event, smsCannedAnswer)" md-cell>{{smsCannedAnswer.description}}</td>\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event, smsCannedAnswer)" md-cell>{{smsCannedAnswer.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SMS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event, smsCannedAnswer)" translate="SMS.EDIT_SMSCANNEDANSWER">\n                                                                Edit SmsCannedAnswer\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(smsCannedAnswer, $event)" translate="SMS.DELETE_SMSCANNEDANSWER">\n                                                                Delete SmsCannedAnswer\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.smsAccountSmsCannedAnswers.rows.length">\n                                            <td md-cell colspan="7">\n                                                <span class="text-boxed-ligth" translate="SMS.NO_SMSCANNEDANSWER_AVAILABLE">No smscannedanswer available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'SMS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SMS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SMS.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.smsAccountSmsCannedAnswers.count}}" md-on-paginate="vm_dc.getSmsAccountSmsCannedAnswers" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsAccount-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="SmsAccountActionsController as vm_ac" ng-init="vm_ac.init(vm.smsAccount, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="SMS.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedSmsAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedSmsAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedSmsAccountApps.length}} {{vm_ac.selectedSmsAccountApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedSmsAccountApps($event)" aria-label="delete selected" translate translate-attr-label="SMS.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedSmsAccountApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px">\n                                                    <span translate="VOICE.PRIORITY">Priority</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.smsAccountApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editSmsAccountApp($event, $index)"><span>{{app.priority}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editSmsAccountApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editSmsAccountApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editSmsAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.smsAccountApps.rows.length">\n                                                <td md-cell colspan="7">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.INTERACTIONS">INTERACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsAccount-detail-form-container interactions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="SmsAccountInteractionsController as vm_dc" ng-init="vm_dc.init(vm.smsAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedSmsAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="SMS.INTERACTIONS">Interactions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm_dc.getSmsAccountInteractions()" aria-label="refresh Interactions" translate translate-attr-label="SMS.REFRESH_INTERACTIONS">\n                                        <md-icon md-font-icon="icon-refresh"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedSmsAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedSmsAccountInteractions.length}} {{vm_dc.selectedSmsAccountInteractions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedSmsAccountInteractions" csv-label="true" filename="smsAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedSmsAccountInteractions($event)" aria-label="delete selected" translate translate-attr-label="SMSACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedSmsAccountInteractions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getSmsAccountInteractions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'SMS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'SMS.STARTEDAT\' | translate }}</th>\n                                            <th md-column>{{ \'SMS.CONTACT\' | translate }}</th>\n                                            <th md-column>{{ \'SMS.AGENT\' | translate }}</th>\n                                            <th md-column md-order-by="closedAt">{{ \'SMS.CLOSEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="disposition">{{ \'SMS.DISPOSITION\' | translate }}</th>\n                                            <th md-column md-order-by="note">{{ \'SMS.NOTES\' | translate }}</th>\n                                            <th md-column md-order-by="tag">{{ \'SMS.TAGS\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="interaction" md-select-id="id" ng-repeat="interaction in vm_dc.smsAccountInteractions.rows">\n                                            <td md-cell>{{interaction.id}}</td>\n                                            <td md-cell>{{interaction.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.Contact.firstName}}</td>\n                                            <td md-cell>{{interaction.Owner.name}}</td>\n                                            <td md-cell>{{interaction.closedAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.disposition}}</td>\n                                            <td md-cell>{{interaction.note}}</td>\n                                            <td md-cell>\n                                                <div ng-if="interaction.Tags.length">\n                                                    <md-tooltip md-direction="left" layout="row">\n                                                        <span ng-repeat="tag in interaction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                                    </md-tooltip>\n                                                    <md-icon md-font-icon="icon-tag"></md-icon>\n                                                </div>\n                                            </td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SMS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_dc.spysmsInteraction($event, interaction)" translate="SMS.SPYINTERACTION">\n                                                                Spy Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.smsInteractionDownload(interaction, $event)" translate="SMS.DOWNLOAD_INTERACTION">\n                                                                Download Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(interaction, $event)" translate="SMS.DELETE_INTERACTION">\n                                                                Delete Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.smsAccountInteractions.rows.length">\n                                            <td md-cell colspan="13">\n                                                <span class="text-boxed-ligth" translate="SMS.NO_INTERACTION_AVAILABLE">No interaction available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'SMS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SMS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SMS.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.smsAccountInteractions.count}}" md-on-paginate="vm_dc.getSmsAccountInteractions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/sms/views/smsAccounts/smsAccounts.html",'<div id="smsAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-message-text" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SMS.SMSACCOUNTS">SmsAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="SMS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedSmsAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedSmsAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="SMS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-smsAccounts-count">\n                    <span>{{vm.selectedSmsAccounts.length}}</span>\n                    <span translate="SMS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SMSACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllSmsAccounts()" translate="SMS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectSmsAccounts()" translate="SMS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedSmsAccounts" csv-label="true" filename="smsAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedSmsAccounts($event)" aria-label="delete selected" translate translate-attr-label="SMSACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SMSACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedSmsAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSmsAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'SMS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'SMS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="key">{{ \'SMS.KEY\' | translate }}</th>\n                                <th md-column md-order-by="ListId">{{ \'SMS.LIST\' | translate }}</th>\n                                <th md-column md-order-by="type">{{ \'SMS.TYPE\' | translate }}</th>\n                                <th md-column md-order-by="phone">{{ \'SMS.PHONE\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'SMS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.smsAccounts.rows.length">\n                                <td md-cell colspan="8">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="SMS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="smsAccount" md-select-id="id" ng-repeat="smsAccount in vm.smsAccounts.rows">\n                                <td md-cell ng-if="smsAccount.userpic"><img class="avatar" alt="{{smsAccount.name}}" ng-src="api/users/{{smsAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!smsAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{smsAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="id ">{{smsAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="name ">{{smsAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="key ">{{smsAccount.key}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="ListId ">{{ (vm.lists | filter : {\'id\':smsAccount.ListId} : true)[0].name }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="type ">{{ vm.arraytype[smsAccount.type].option }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="phone ">{{smsAccount.phone}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="description ">{{smsAccount.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SMS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(smsAccount, $event    )" translate="SMS.EDIT_SMSACCOUNT">\n                                                    Edit SmsAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.interactionsgoto(smsAccount, $event    )" translate="SMS.INTERACTIONS_SMSACCOUNT">\n                                                    Interactions SmsAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(smsAccount, $event    )" translate="SMS.AGENTADD_SMSACCOUNT">\n                                                    AgentAdd SmsAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(smsAccount, $event    )" translate="SMS.DELETE_SMSACCOUNT">\n                                                    Delete SmsAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'SMS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SMS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SMS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.smsAccounts.count}}" md-on-paginate="vm.getSmsAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SMSACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD SMSACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-smsAccount-button" ng-click="vm.createOrEditSmsAccount($event)" aria-label="add smsAccount" translate translate-attr-aria-label="SMS.ADD_SMSACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD SMSACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/sms/views/smsQueues/create/dialog.html",'<md-dialog class="smsQueue-dialog" aria-label="New SmsQueue">\n    <form name="smsQueueForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.smsQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newSmsQueue">\n\n                <div class="hint"><span translate="SMS.HELP.NAME"></span></div>\n                <div ng-messages="smsQueueForm[\'name\'].$error" ng-show="smsQueueForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="SMS.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.STRATEGY">Strategy</label>\n                <md-select name="strategy" ng-model="vm.smsQueue.strategy" required>\n                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                </md-select>\n                <div ng-messages="smsQueueForm[\'strategy\'].$error" ng-show="smsQueueForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.AGENT_TIMEOUT">Agent_Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.smsQueue.timeout" min="1" max="2147483" ng-required="true">\n\n                <div ng-messages="smsQueueForm[\'timeout\'].$error" ng-show="smsQueueForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="SMS.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="SMS.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.smsQueue.description">\n\n                <div ng-messages="smsQueueForm[\'description\'].$error" ng-show="smsQueueForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSmsQueue" ng-click="vm.saveSmsQueue()" class="send-button md-accent md-raised" ng-disabled="smsQueueForm.$invalid || smsQueueForm.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSmsQueue" ng-click="vm.addNewSmsQueue()" class="send-button md-accent md-raised" ng-disabled="smsQueueForm.$invalid" aria-label="ADD" translate="SMS.ADD_SMSQUEUE" translate-attr-aria-label="SMS.ADD_SMSQUEUE">\n                    ADD SMSQUEUE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSmsQueue" ng-click="vm.deleteSmsQueue($event)" aria-label="DELETE" translate translate-attr-aria-label="SMS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SMS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsQueues/edit/agentadd/agentadd.html",'<md-dialog class="smsQueue-dialog" aria-label="smsQueue" ng-init="vm.onInit()">\n    <form name="smsQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="SMS.AGENTADD_SMSQUEUE">Add Agent to smsQueue</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsQueues/edit/teamadd/teamadd.html",'<md-dialog class="smsQueue-dialog" aria-label="smsQueue" ng-init="vm.onInit()">\n    <form name="smsQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="SMS.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsQueues/edit/view.html",'<div id="sms-smsQueue" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-smsQueues-button md-icon-button" aria-label="Go to smsQueues" ng-click="vm.gotoSmsQueues()" translate translate-attr-aria-label="SMS.GO_TO_SMSQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="smsQueue-image" hide-xs>\n                    <img ng-src="assets/images/business/smsQueues.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.smsQueue.id}}\n                        <span ng-if="vm.smsQueue.name">{{vm.smsQueue.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="SMS.CREATED_AT"></span> <span>{{vm.smsQueue.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.smsQueue, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="SMS.TEAMADD_SMSQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.smsQueue, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="SMS.AGENTADD_SMSQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveSmsQueue()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid)" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsQueue-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="SMS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.smsQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="SMS.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="SMS.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.smsQueue.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'strategy\'].$error" ng-show="generalForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.AGENT_TIMEOUT">Agent_Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.smsQueue.timeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="SMS.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="SMS.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.smsQueue.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/sms/views/smsQueues/smsQueues.html",'<div id="smsQueues" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-message-text" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SMS.SMSQUEUES">SmsQueues</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="SMS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedSmsQueues.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedSmsQueues =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="SMS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-smsQueues-count">\n                    <span>{{vm.selectedSmsQueues.length}}</span>\n                    <span translate="SMS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SMSQUEUES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllSmsQueues()" translate="SMS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectSmsQueues()" translate="SMS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedSmsQueues" csv-label="true" filename="smsQueues.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedSmsQueues($event)" aria-label="delete selected" translate translate-attr-label="SMSQUEUES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SMSQUEUE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedSmsQueues" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSmsQueues">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'SMS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'SMS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'SMS.STRATEGY\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.smsQueues.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="SMS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="smsQueue" md-select-id="id" ng-repeat="smsQueue in vm.smsQueues.rows">\n                                <td md-cell ng-if="smsQueue.userpic"><img class="avatar" alt="{{smsQueue.name}}" ng-src="api/users/{{smsQueue.id}}/avatar" /></td>\n                                <td md-cell ng-if="!smsQueue.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{smsQueue.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsQueue, ev) : vm.createOrEditSmsQueue($event, smsQueue)" md-cell class="id ">{{smsQueue.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsQueue, ev) : vm.createOrEditSmsQueue($event, smsQueue)" md-cell class="name ">{{smsQueue.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsQueue, ev) : vm.createOrEditSmsQueue($event, smsQueue)" md-cell class="strategy ">{{ vm.arraystrategy[smsQueue.strategy].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SMS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(smsQueue, $event    )" translate="SMS.EDIT_SMSQUEUE">\n                                                    Edit SmsQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(smsQueue, $event    )" translate="SMS.TEAMADD_SMSQUEUE">\n                                                    teamadd SmsQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(smsQueue, $event    )" translate="SMS.AGENTADD_SMSQUEUE">\n                                                    agentadd SmsQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(smsQueue, $event    )" translate="SMS.DELETE_SMSQUEUE">\n                                                    Delete SmsQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(smsQueue, $event    )" translate="SMS.GOTOREALTIME_SMSQUEUE">\n                                                    goToRealtime SmsQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'SMS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SMS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SMS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.smsQueues.count}}" md-on-paginate="vm.getSmsQueues" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SMSQUEUE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD SMSQUEUE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-smsQueue-button" ng-click="vm.createOrEditSmsQueue($event)" aria-label="add smsQueue" translate translate-attr-aria-label="SMS.ADD_SMSQUEUE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD SMSQUEUE BUTTON --\x3e\n</div>'),e.put("app/main/apps/staff/views/agents/agents.html",'<div id="agents" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-multiple" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="STAFF.AGENTS">Agents</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="STAFF.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedAgents.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedAgents =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="STAFF.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-agents-count">\n                    <span>{{vm.selectedAgents.length}}</span>\n                    <span translate="STAFF.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="AGENTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllAgents()" translate="STAFF.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectAgents()" translate="STAFF.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedAgents" csv-label="true" filename="agents.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedAgents($event)" aria-label="delete selected" translate translate-attr-label="AGENTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- AGENT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedAgents" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getAgents">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="fullname">{{ \'STAFF.FULLNAME\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'STAFF.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="showWebBar">{{ \'STAFF.SHOWWEBCONTROL\' | translate }}</th>\n                                <th md-column md-order-by="email">{{ \'STAFF.EMAIL\' | translate }}</th>\n                                <th md-column md-order-by="phone">{{ \'STAFF.PHONE\' | translate }}</th>\n                                <th md-column md-order-by="mobile">{{ \'STAFF.MOBILE\' | translate }}</th>\n                                <th md-column md-order-by="internal">{{ \'STAFF.INTERNAL\' | translate }}</th>\n                                <th md-column md-order-by="disabled">{{ \'STAFF.DISABLED\' | translate }}</th>\n                                <th md-column md-order-by="blocked">{{ \'STAFF.BLOCKED\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.agents.rows.length">\n                                <td md-cell colspan="10">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="STAFF.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="agent" md-select-id="id" ng-repeat="agent in vm.agents.rows">\n                                <td md-cell ng-if="agent.userpic"><img class="avatar" alt="{{agent.name}}" ng-src="api/users/{{agent.id}}/avatar" /></td>\n                                <td md-cell ng-if="!agent.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{agent.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="fullname font-weight-600">{{agent.fullname}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="name ">{{agent.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="showWebBar ">{{ vm.arrayshowWebBar[agent.showWebBar].option }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="email ">{{agent.email}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="phone ">{{agent.phone}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="mobile ">{{agent.mobile}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="internal ">{{agent.internal}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="disabled ">\n                                    <md-icon md-colors="{color: {{agent.disabled ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{agent.disabled ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="blocked ">\n                                    <md-icon md-colors="{color: {{agent.blocked ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{agent.blocked ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(agent, $event    )" translate="STAFF.EDIT_AGENT">\n                                                    Edit Agent\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(agent, $event    )" translate="STAFF.TEAMADD_AGENT">\n                                                    teamadd Agent\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(agent, $event    )" translate="STAFF.DELETE_AGENT">\n                                                    Delete Agent\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'STAFF.PAGE\' | translate}}:\', rowsPerPage: \'{{\'STAFF.ROWSPERPAGE\' | translate}}:\', of: \'{{\'STAFF.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.agents.count}}" md-on-paginate="vm.getAgents" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / AGENT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD AGENT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-agent-button" ng-click="vm.createOrEditAgent($event)" aria-label="add agent" translate translate-attr-aria-label="STAFF.ADD_AGENT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD AGENT BUTTON --\x3e\n</div>'),e.put("app/main/apps/staff/views/agents/create/dialog.html",'<md-dialog class="agent-dialog" aria-label="New Agent">\n    <form name="agentForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="STAFF.FULLNAME">Fullname</label>\n                <input type="text" name="fullname" ng-model="vm.agent.fullname" ng-required="true" autofocus>\n\n                <div ng-messages="agentForm[\'fullname\'].$error" ng-show="agentForm[\'fullname\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.FULLNAME_REQUIRED">Fullname field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.USERNAME">Username</label>\n                <input type="text" name="name" ng-model="vm.agent.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" ng-disabled="!vm.newAgent">\n\n                <div class="hint"><span translate="STAFF.HELP.USERNAME"></span></div>\n                <div ng-messages="agentForm[\'name\'].$error" ng-show="agentForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.USERNAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Username must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.ALIAS">Alias</label>\n                <input type="text" name="alias" ng-model="vm.agent.alias">\n\n                <div ng-messages="agentForm[\'alias\'].$error" ng-show="agentForm[\'alias\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.ALIAS_REQUIRED">Alias field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.SHOWWEBCONTROL">ShowWebControl</label>\n                <md-select name="showWebBar" ng-model="vm.agent.showWebBar">\n                    <md-option ng-value="0">Phonebar</md-option>\n                    <md-option ng-value="1">External</md-option>\n                    <md-option ng-value="2">WebRTC</md-option>\n                </md-select>\n                <div ng-messages="agentForm[\'showWebBar\'].$error" ng-show="agentForm[\'showWebBar\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.SHOWWEBCONTROL_REQUIRED">ShowWebControl field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.agent.email" ng-required="true">\n\n                <div ng-messages="agentForm[\'email\'].$error" ng-show="agentForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="STAFF.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.newAgent">\n                <label translate="STAFF.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.agent.password" placeholder="Password" ng-pattern="vm.passwordPattern" translate translate-attr-placeholder="STAFF.PASSWORD" required>\n                <div ng-messages="agentForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.newAgent  && (vm.newAgent)">\n                <label translate="STAFF.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword" required>\n                <div ng-messages="agentForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="STAFF.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container ng-if="vm.newAgent" class="md-block">\n                <md-switch ng-model="vm.agent.autointernal" aria-label="AutoInternal"><span translate="STAFF.AUTOINTERNAL">AutoInternal</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="!vm.agent.autointernal" class="md-block">\n                <label translate="STAFF.INTERNAL">Internal</label>\n                <input type="text" name="internal" ng-model="vm.agent.internal" ng-required="true" ng-disabled="!vm.newAgent">\n\n                <div ng-messages="agentForm[\'internal\'].$error" ng-show="agentForm[\'internal\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.INTERNAL_REQUIRED">Internal field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.agent.description">\n\n                <div ng-messages="agentForm[\'description\'].$error" ng-show="agentForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.newAgent" class="md-block">\n                <md-switch ng-model="vm.agent.voicemail" aria-label="Voicemail"><span translate="STAFF.VOICEMAIL">Voicemail</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.agent.showWebBar == 0" class="md-block">\n                <md-switch ng-model="vm.agent.phoneBarRemoteControl" aria-label="RemoteControl"><span translate="STAFF.REMOTECONTROL">RemoteControl</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.agent.phoneBarRemoteControl && vm.agent.showWebBar == 0" class="md-block">\n                <label translate="STAFF.REMOTECONTROLPORT">RemoteControlPort</label>\n                <input type="number" name="phoneBarRemoteControlPort" ng-model="vm.agent.phoneBarRemoteControlPort" ng-required="true">\n\n                <div ng-messages="agentForm[\'phoneBarRemoteControlPort\'].$error" ng-show="agentForm[\'phoneBarRemoteControlPort\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.REMOTECONTROLPORT_REQUIRED">RemoteControlPort field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.newUser" class="md-block">\n                <md-switch ng-model="vm.agent.voicemail" aria-label="Voicemail"><span translate="STAFF.VOICEMAIL">Voicemail</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newAgent" ng-click="vm.saveAgent()" class="send-button md-accent md-raised" ng-disabled="agentForm.$invalid || agentForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newAgent" ng-click="vm.addNewAgent()" class="send-button md-accent md-raised" ng-disabled="agentForm.$invalid" aria-label="ADD" translate="STAFF.ADD_AGENT" translate-attr-aria-label="STAFF.ADD_AGENT">\n                    ADD AGENT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newAgent" ng-click="vm.deleteAgent($event)" aria-label="DELETE" translate translate-attr-aria-label="STAFF.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="STAFF.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/agents/edit/changepassword/changepassword.html",'<md-dialog class="agent-dialog" aria-label="{{vm.name}}">\n    <form name="agentForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ \'\n                    STAFF.CHANGE_PASSWORD\' | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block" ng-if="vm.currentUser.id == vm.agent.id">\n                <label translate="STAFF.OLD_PASSWORD">Old Password</label>\n                <input type="password" name="oldPassword" ng-model="vm.oldPassword" placeholder="Password" translate translate-attr-placeholder="STAFF.OLD_PASSWORD" required>\n                <div ng-messages="agentForm.oldPassword.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.NEW_PASSWORD">New Password</label>\n                <input type="password" name="password" ng-model="vm.password" placeholder="Password" translate ng-pattern="vm.passwordPattern" translate-attr-placeholder="STAFF.NEW_PASSWORD" required>\n                <div ng-messages="agentForm.password.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is\n                            required</span>\n                    </div>\n\n\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.SECURE_PASSWORD_PATTERN">Must contain\n                            at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric\n                            character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                    <div ng-message="oldPasswordMatch">\n                        <span translate="STAFF.ERRORS.PASSWORD_OLDPASSWORD_MATCH">New password must be different from old one</span>\n                    </div>\n\n\n\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword">\n                <div ng-messages="agentForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CONFIRM_REQUIRED">Confirm field is\n                            required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="STAFF.ERRORS.CONFIRM_NOT_MATCH">Your password did\n                            not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.savePassword()" class="send-button md-accent md-raised" ng-disabled="agentForm.$invalid || agentForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",'<md-dialog class="agent-dialog" aria-label="agent" ng-init="vm.onInit()">\n    <form name="agentForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2>{{vm.title}}</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <md-input-container flex class="no-margin" ng-if="vm.agent.role === \'agent\' && vm.channel === \'voice\'">\n                <label translate="STAFF.PENALTY">Penalty</label>\n                <input name="penalty" ng-model="vm.penalty" placeholder="0" required md-minlength="0" md-maxlength="3">\n                <div ng-messages="agentForm.penalty.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span>You must supply a penalty.</span>\n                    </div>\n                    <div ng-message="md-minlength">\n                        <span>Min Penalty 0 characters.</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span>Max Penalty 3 characters.</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveQueues()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/agents/edit/teamadd/teamadd.html",'<md-dialog class="agent-dialog" aria-label="agent" ng-init="vm.onInit()">\n    <form name="agentForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="STAFF.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/agents/edit/view.html",'<div id="staff-agent" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-agents-button md-icon-button" aria-label="Go to agents" ng-click="vm.gotoAgents()" translate translate-attr-aria-label="STAFF.GO_TO_AGENTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="agent-image" hide-xs>\n                    <img ng-src="assets/images/business/agents.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.agent.id}}\n                        <span ng-if="vm.agent.name">{{vm.agent.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="STAFF.CREATED_AT"></span> <span>{{vm.agent.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div ng-cloak>\n            <md-fab-speed-dial md-direction="left" class="md-scale md-fab">\n                <md-fab-trigger>\n                    <md-button aria-label="menu" class="md-fab md-primary md-icon-button">\n                        <md-tooltip md-direction="top" md-visible="false"><span translate="STAFF.CHANNELS">Channels</span></md-tooltip>\n                        <md-icon md-font-icon="icon-stackoverflow" aria-label="queueadd"></md-icon>\n                    </md-button>\n                </md-fab-trigger>\n                <md-fab-actions>\n                    <md-button aria-label="voice" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'voice\', $event, \'inbound\')">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="VOICE.VOICE">Voice</span></md-tooltip>\n                        <md-icon md-font-icon="icon-phone" aria-label="voice"></md-icon>\n                    </md-button>\n                    <md-button ng-if="vm.license.dialer" aria-label="motion bull" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'voice\', $event, \'outbound\')">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="MOTIONDIALER.MOTIONDIALER">Motion Bull</span></md-tooltip>\n                        <md-icon md-font-icon="icon-fire" aria-label="motion bull"></md-icon>\n                    </md-button>\n                    <md-button ng-if="vm.license.chat" aria-label="chat" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'chat\', $event)">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="CHAT.CHAT">Chat</span></md-tooltip>\n                        <md-icon md-font-icon="icon-hangouts" aria-label="chat"></md-icon>\n                    </md-button>\n                    <md-button ng-if="vm.license.mail" aria-label="mail" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'mail\', $event)">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="MAIL.MAIL">Email</span></md-tooltip>\n                        <md-icon md-font-icon="icon-email" aria-label="mail"></md-icon>\n                    </md-button>\n                    <md-button ng-if="vm.license.messaging" aria-label="sms" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'sms\', $event)">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="SMS.SMS">Sms</span></md-tooltip>\n                        <md-icon md-font-icon="icon-message-text" aria-label="sms"></md-icon>\n                    </md-button>\n                    <md-button ng-if="vm.license.openchannel" aria-label="openchannel" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'openchannel\', $event)">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="OPENCHANNEL.OPENCHANNEL">Openchannel</span></md-tooltip>\n                        <md-icon md-font-icon="icon-google-earth" aria-label="openchannel"></md-icon>\n                    </md-button>\n                    <md-button ng-if="vm.license.fax" aria-label="fax" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'fax\', $event)">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="FAX.FAX">Fax</span></md-tooltip>\n                        <md-icon md-font-icon="icon-deskphone" aria-label="fax"></md-icon>\n                    </md-button>\n                </md-fab-actions>\n            </md-fab-speed-dial>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.agent, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="STAFF.TEAMADD_AGENT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.changepassworddialog(vm.agent, $event)" class="md-fab md-warn md-icon-button" aria-label="changepassword">\n                <md-tooltip><span translate="STAFF.CHANGEPASSWORD_AGENT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-key-variant"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveAgent()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(personal_infoForm.$invalid) || (security_suiteForm.$invalid) || (change_avatarForm.$invalid) || (generalForm.$invalid) || (capacityForm.$invalid) || (settingsForm.$invalid) || (remote_controlForm.$invalid) || (sipForm.$invalid) || (callforwardingForm.$invalid) || (settings_webrtcForm.$invalid) || (sip_webrtcForm.$invalid) || (general_permissionsForm.$invalid) || (permissionsForm.$invalid)" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="agent-detail-form-container personal_info md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.PERSONAL_INFO">PERSONAL_INFO</div>\n                        </div>\n                        <form name="personal_infoForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.FULLNAME">Fullname</label>\n                                <input type="text" name="fullname" ng-model="vm.agent.fullname" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'fullname\'].$error" ng-show="personal_infoForm[\'fullname\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.FULLNAME_REQUIRED">Fullname field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.USERNAME">Username</label>\n                                <input type="text" name="name" ng-model="vm.agent.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" disabled>\n\n                                <div class="hint"><span translate="STAFF.HELP.USERNAME"></span></div>\n                                <div ng-messages="personal_infoForm[\'name\'].$error" ng-show="personal_infoForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="STAFF.ERRORS.USERNAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Username must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ALIAS">Alias</label>\n                                <input type="text" name="alias" ng-model="vm.agent.alias" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'alias\'].$error" ng-show="personal_infoForm[\'alias\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ALIAS_REQUIRED">Alias field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.SHOWWEBCONTROL">ShowWebControl</label>\n                                <md-select name="showWebBar" ng-model="vm.agent.showWebBar" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="0">Phonebar</md-option>\n                                    <md-option ng-value="1">External</md-option>\n                                    <md-option ng-value="2">WebRTC</md-option>\n                                </md-select>\n                                <div ng-messages="personal_infoForm[\'showWebBar\'].$error" ng-show="personal_infoForm[\'showWebBar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.SHOWWEBCONTROL_REQUIRED">ShowWebControl field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.EMAIL">Email</label>\n                                <input type="email" name="email" ng-model="vm.agent.email" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'email\'].$error" ng-show="personal_infoForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="STAFF.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.PHONE">Phone</label>\n                                <input type="text" name="phone" ng-model="vm.agent.phone" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'phone\'].$error" ng-show="personal_infoForm[\'phone\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.MOBILE">Mobile</label>\n                                <input type="text" name="mobile" ng-model="vm.agent.mobile" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'mobile\'].$error" ng-show="personal_infoForm[\'mobile\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.MOBILE_REQUIRED">Mobile field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.showWebBar == 1" class="md-block">\n                                <md-switch ng-model="vm.agent.hotdesk" aria-label="Hotdesk" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.HOTDESK">Hotdesk</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.loginInPause" aria-label="LoginInPause" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.LOGININPAUSE">LoginInPause</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.agent.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'description\'].$error" ng-show="personal_infoForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container security_suite md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.SECURITY_SUITE">SECURITY_SUITE</div>\n                        </div>\n                        <form name="security_suiteForm" novalidate>\n                            <md-input-container ng-if="vm.agent.passwordResetAt != null" class="md-block">\n                                <label translate="STAFF.LAST_PASSWORD_RESET_AT">Last_Password_Reset_At</label>\n                                <input type="text" name="passwordResetAt" ng-model="vm.agent.passwordResetAt" autofocus disabled>\n\n                                <div class="hint"><span translate="STAFF.HELP.LAST_PASSWORD_RESET_AT"></span></div>\n                                <div ng-messages="security_suiteForm[\'passwordResetAt\'].$error" ng-show="security_suiteForm[\'passwordResetAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.LAST_PASSWORD_RESET_AT_REQUIRED">Last_Password_Reset_At field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.passwordResetAt == null" class="md-block">\n                                <label translate="STAFF.NO_PASSWORD_CHANGE">No_Password_Change</label>\n                                <input type="text" name="passwordResetAt" ng-model="vm.agent.passwordResetAt" disabled>\n\n                                <div ng-messages="security_suiteForm[\'passwordResetAt\'].$error" ng-show="security_suiteForm[\'passwordResetAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.NO_PASSWORD_CHANGE_REQUIRED">No_Password_Change field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.disabled" aria-label="Disabled" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.DISABLED">Disabled</span></md-switch>\n\n                                <div class="hint"><span translate="STAFF.HELP.DISABLED"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.disabled == 0" class="md-block">\n                                <md-switch ng-model="vm.agent.blocked" aria-label="Blocked" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.BLOCKED">Blocked</span></md-switch>\n\n                                <div class="hint"><span translate="STAFF.HELP.BLOCKED"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container change_avatar md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.CHANGE_AVATAR">CHANGE_AVATAR</div>\n                        </div>\n                        <div ng-controller="Agentchange_avatarController as vm_ca" ng-init="vm_ca.init(vm.agent, vm.crudPermissions)" class="agent-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                            <div id="agent-image-uploader" flow-init="vm_ca.ngFlowOptions" flow-name="vm_ca.ngFlow.flow" flow-files-submitted="vm_ca.upload()" flow-file-added="vm_ca.fileAdded($file)" flow-file-success="vm_ca.fileSuccess($file, $message)" flow-complete="vm_ca.uploadComplete()" flow-drop flow-drag-enter="vm_ca.dropping=true" flow-drag-leave="vm_ca.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                                <div class="drop-text hint-text" layout="row" layout-align="center center">\n                                    <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                                </div>\n\n                                <div class="upload-button" layout="column" layout-align="center center">\n                                    <md-button class="md-accent md-raised" flow-btn ng-disabled="!vm_ca.crudPermissions.canEdit">\n                                        Upload\n                                    </md-button>\n                                    <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                                </div>\n\n                                <div layout="row" layout-align="start start" layout-wrap>\n                                    <div ng-repeat="change_avatarimage in vm_ca.agent.images" ng-switch="change_avatarimage.type">\n                                        <div class="agent-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                            <div class="overlay" layout="column" layout-align="center center">\n                                                <md-progress-linear md-mode="determinate" value="{{change_avatarimage.file.progress() * 100}}">\n                                                </md-progress-linear>\n                                            </div>\n                                            <img class="media" flow-img="change_avatarimage.file">\n                                        </div>\n\n                                        <div class="agent-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                            <img class="media" ng-src="{{change_avatarimage.url}}">\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.VOICE">VOICE</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="agent-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container ng-if="!vm.agent.autointernal" class="md-block">\n                                <label translate="STAFF.INTERNAL">Internal</label>\n                                <input type="text" name="internal" ng-model="vm.agent.internal" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'internal\'].$error" ng-show="generalForm[\'internal\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.INTERNAL_REQUIRED">Internal field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.showWebBar != 2" class="md-block">\n                                <label translate="STAFF.TRANSPORT">Transport</label>\n                                <md-select name="transport" ng-model="vm.agent.transport" multiple ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'udp\'">udp</md-option>\n                                    <md-option ng-value="\'tcp\'">tcp</md-option>\n                                    <md-option ng-value="\'ws\'" ng-if="vm.agent.showWebBar == 1">ws</md-option>\n                                    <md-option ng-value="\'wss\'" ng-if="vm.agent.showWebBar == 1">wss</md-option>\n                                    <md-option ng-value="\'tls\'" ng-if="vm.agent.showWebBar == 1">tls</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.TRANSPORT"></span></div>\n                                <div ng-messages="generalForm[\'transport\'].$error" ng-show="generalForm[\'transport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.TRANSPORT_REQUIRED">Transport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.HOST">Host</label>\n                                <input type="text" name="host" ng-model="vm.agent.host" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.HOST"></span></div>\n                                <div ng-messages="generalForm[\'host\'].$error" ng-show="generalForm[\'host\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.HOST_REQUIRED">Host field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.NAT">NAT</label>\n                                <md-select name="nat" ng-model="vm.agent.nat" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'force_rport\'">force_rport</md-option>\n                                    <md-option ng-value="\'comedia\'">comedia</md-option>\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'never\'">never</md-option>\n                                    <md-option ng-value="\'route\'">route</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.NAT"></span></div>\n                                <div ng-messages="generalForm[\'nat\'].$error" ng-show="generalForm[\'nat\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.NAT_REQUIRED">NAT field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.TYPE">Type</label>\n                                <md-select name="type" ng-model="vm.agent.type" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'friend\'">Friend</md-option>\n                                    <md-option ng-value="\'user\'">User</md-option>\n                                    <md-option ng-value="\'peer\'">Peer</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.TYPE"></span></div>\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ALLOWCODECS">AllowCodecs</label>\n                                <md-select name="allow" ng-model="vm.agent.allow" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'ulaw\'">ulaw</md-option>\n                                    <md-option ng-value="\'alaw\'">alaw</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                    <md-option ng-value="\'g722\'">g722</md-option>\n                                    <md-option ng-value="\'g729\'">g729</md-option>\n                                    <md-option ng-value="\'opus\'">opus</md-option>\n                                    <md-option ng-value="\'h264\'">h264</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.ALLOWCODECS"></span></div>\n                                <div ng-messages="generalForm[\'allow\'].$error" ng-show="generalForm[\'allow\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ALLOWCODECS_REQUIRED">AllowCodecs field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CALLERID">CallerId</label>\n                                <input type="text" name="callerid" ng-model="vm.agent.callerid" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'callerid\'].$error" ng-show="generalForm[\'callerid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CALLERID_REQUIRED">CallerId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CONTEXT">Context</label>\n                                <md-select name="context" ng-model="vm.agent.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CALLGROUP">Callgroup</label>\n                                <input type="text" name="callgroup" ng-model="vm.agent.callgroup" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.CALLGROUP"></span></div>\n                                <div ng-messages="generalForm[\'callgroup\'].$error" ng-show="generalForm[\'callgroup\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CALLGROUP_REQUIRED">Callgroup field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.PICKUPGROUP">Pickupgroup</label>\n                                <input type="text" name="pickupgroup" ng-model="vm.agent.pickupgroup" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.PICKUPGROUP"></span></div>\n                                <div ng-messages="generalForm[\'pickupgroup\'].$error" ng-show="generalForm[\'pickupgroup\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.PICKUPGROUP_REQUIRED">Pickupgroup field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.chanspy" aria-label="chanSpy" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.CHANSPY">chanSpy</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.VIDEOSUPPORT">Videosupport</label>\n                                <md-select name="videosupport" ng-model="vm.agent.videosupport" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">Yes</md-option>\n                                    <md-option ng-value="\'no\'">No</md-option>\n                                    <md-option ng-value="\'always\'">Always</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'videosupport\'].$error" ng-show="generalForm[\'videosupport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.VIDEOSUPPORT_REQUIRED">Videosupport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.MONITOREXTENSION">MonitorExtension</label>\n                                <md-select name="extensionMonitor" ng-model="vm.agent.extensionMonitor" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'\'">Inactive</md-option>\n                                    <md-option ng-value="\'wav\'">wav</md-option>\n                                    <md-option ng-value="\'WAV\'">wav49</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'extensionMonitor\'].$error" ng-show="generalForm[\'extensionMonitor\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.MONITOREXTENSION_REQUIRED">MonitorExtension field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.OTHER_CHANNELS">OTHER_CHANNELS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="agent-detail-form-container capacity md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.CAPACITY">CAPACITY</div>\n                        </div>\n                        <form name="capacityForm" novalidate>\n                            <md-input-container ng-if="vm.license.chat" class="md-block">\n                                <label translate="STAFF.CHATCAPACITY">ChatCapacity</label>\n                                <input type="number" name="chatCapacity" ng-model="vm.agent.chatCapacity" min="0" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.CHATCAPACITY"></span></div>\n                                <div ng-messages="capacityForm[\'chatCapacity\'].$error" ng-show="capacityForm[\'chatCapacity\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CHATCAPACITY_REQUIRED">ChatCapacity field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.CHATCAPACITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">ChatCapacity must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.license.mail" class="md-block">\n                                <label translate="STAFF.MAILCAPACITY">MailCapacity</label>\n                                <input type="number" name="mailCapacity" ng-model="vm.agent.mailCapacity" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.MAILCAPACITY"></span></div>\n                                <div ng-messages="capacityForm[\'mailCapacity\'].$error" ng-show="capacityForm[\'mailCapacity\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.MAILCAPACITY_REQUIRED">MailCapacity field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.MAILCAPACITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MailCapacity must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.license.fax" class="md-block">\n                                <label translate="STAFF.FAXCAPACITY">FaxCapacity</label>\n                                <input type="number" name="faxCapacity" ng-model="vm.agent.faxCapacity" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.FAXCAPACITY"></span></div>\n                                <div ng-messages="capacityForm[\'faxCapacity\'].$error" ng-show="capacityForm[\'faxCapacity\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.FAXCAPACITY_REQUIRED">FaxCapacity field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.FAXCAPACITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">FaxCapacity must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.license.messaging" class="md-block">\n                                <label translate="STAFF.SMSCAPACITY">SMSCapacity</label>\n                                <input type="number" name="smsCapacity" ng-model="vm.agent.smsCapacity" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.SMSCAPACITY"></span></div>\n                                <div ng-messages="capacityForm[\'smsCapacity\'].$error" ng-show="capacityForm[\'smsCapacity\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.SMSCAPACITY_REQUIRED">SMSCapacity field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.SMSCAPACITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">SMSCapacity must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.license.openchannel" class="md-block">\n                                <label translate="STAFF.OPENCHANNELCAPACITY">OpenchannelCapacity</label>\n                                <input type="number" name="openchannelCapacity" ng-model="vm.agent.openchannelCapacity" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.OPENCHANNELCAPACITY"></span></div>\n                                <div ng-messages="capacityForm[\'openchannelCapacity\'].$error" ng-show="capacityForm[\'openchannelCapacity\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.OPENCHANNELCAPACITY_REQUIRED">OpenchannelCapacity field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.OPENCHANNELCAPACITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">OpenchannelCapacity must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab ng-if="vm.agent.showWebBar == 0">\n                <md-tab-label>\n                    <span translate="STAFF.MOTIONBAR">MOTIONBAR</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="agent-detail-form-container settings md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.SETTINGS">SETTINGS</div>\n                        </div>\n                        <form name="settingsForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableSettings" aria-label="EnableSettings" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLESETTINGS">EnableSettings</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarAutoAnswer" aria-label="AutoAnswer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.AUTOANSWER">AutoAnswer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.phoneBarAutoAnswer" class="md-block">\n                                <label translate="STAFF.AUTOANSWERDELAY">AutoAnswerDelay</label>\n                                <input type="number" name="phoneBarAutoAnswerDelay" ng-model="vm.agent.phoneBarAutoAnswerDelay" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="settingsForm[\'phoneBarAutoAnswerDelay\'].$error" ng-show="settingsForm[\'phoneBarAutoAnswerDelay\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.AUTOANSWERDELAY_REQUIRED">AutoAnswerDelay field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.AUTOANSWERDELAY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AutoAnswerDelay must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarRingInUse" aria-label="RingInUse" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.RINGINUSE">RingInUse</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableRecording" aria-label="EnableRecording" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLERECORDING">EnableRecording</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableDtmfTone" aria-label="EnableDtmfTone" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLEDTMFTONE">EnableDtmfTone</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarDnd" aria-label="Dnd" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.DND">Dnd</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarUnansweredCallBadge" aria-label="UnansweredCallBadge" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.UNANSWEREDCALLBADGE">UnansweredCallBadge</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.showWebBar == 0" class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableJaws" aria-label="EnableJawsIntegration" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLEJAWSINTEGRATION">EnableJawsIntegration</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.showWebBar == 0 && vm.license.screenrecording" class="md-block">\n                                <md-switch ng-change="vm.onEnableScreenRecordingByAgentSelection()" ng-model="vm.agent.phoneBarEnableScreenRecordingByAgent" aria-label="EnableScreenRecordingByAgent" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLESCREENRECORDINGBYAGENT">EnableScreenRecordingByAgent</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.showWebBar == 0 && vm.license.screenrecording" class="md-block">\n                                <md-switch ng-change="vm.onEnableAutomaticScreenRecordingSelection()" ng-model="vm.agent.phoneBarEnableAutomaticScreenRecording" aria-label="EnableAutomaticScreenRecording" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLEAUTOMATICSCREENRECORDING">EnableAutomaticScreenRecording</span></md-switch>\n\n                                <div class="hint"><span translate="STAFF.HELP.ENABLEAUTOMATICSCREENRECORDING"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container remote_control md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.REMOTE_CONTROL">REMOTE_CONTROL</div>\n                        </div>\n                        <form name="remote_controlForm" novalidate>\n                            <md-input-container ng-if="vm.agent.showWebBar == 0" class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarRemoteControl" aria-label="RemoteControl" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.REMOTECONTROL">RemoteControl</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.phoneBarRemoteControl && vm.agent.showWebBar == 0" class="md-block">\n                                <label translate="STAFF.REMOTECONTROLPORT">RemoteControlPort</label>\n                                <input type="number" name="phoneBarRemoteControlPort" ng-model="vm.agent.phoneBarRemoteControlPort" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="remote_controlForm[\'phoneBarRemoteControlPort\'].$error" ng-show="remote_controlForm[\'phoneBarRemoteControlPort\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.REMOTECONTROLPORT_REQUIRED">RemoteControlPort field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container sip md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.SIP">SIP</div>\n                        </div>\n                        <form name="sipForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.SIPEXPIRES">SipExpires</label>\n                                <input type="number" name="phoneBarExpires" ng-model="vm.agent.phoneBarExpires" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.SIPEXPIRES"></span></div>\n                                <div ng-messages="sipForm[\'phoneBarExpires\'].$error" ng-show="sipForm[\'phoneBarExpires\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.SIPEXPIRES_REQUIRED">SipExpires field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.SIPPORT">SipPort</label>\n                                <input type="number" name="phoneBarListenPort" ng-model="vm.agent.phoneBarListenPort" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.SIPPORT"></span></div>\n                                <div ng-messages="sipForm[\'phoneBarListenPort\'].$error" ng-show="sipForm[\'phoneBarListenPort\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.SIPPORT_REQUIRED">SipPort field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container callforwarding md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.CALLFORWARDING">CALLFORWARDING</div>\n                        </div>\n                        <form name="callforwardingForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarUnconditional" aria-label="Unconditional" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.UNCONDITIONAL">Unconditional</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.phoneBarUnconditional" class="md-block">\n                                <label translate="STAFF.UNCONDITIONALNUMBER">UnconditionalNumber</label>\n                                <input type="text" name="phoneBarUnconditionalNumber" ng-model="vm.agent.phoneBarUnconditionalNumber" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="callforwardingForm[\'phoneBarUnconditionalNumber\'].$error" ng-show="callforwardingForm[\'phoneBarUnconditionalNumber\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.UNCONDITIONALNUMBER_REQUIRED">UnconditionalNumber field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab ng-if="vm.agent.showWebBar == 2">\n                <md-tab-label>\n                    <span translate="STAFF.WEBRTC">WEBRTC</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="agent-detail-form-container settings_webrtc md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.SETTINGS_WEBRTC">SETTINGS_WEBRTC</div>\n                        </div>\n                        <form name="settings_webrtcForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.DTLSCERTFILE">dtlscertfile</label>\n                                <input type="text" name="dtlscertfile" ng-model="vm.agent.dtlscertfile" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.DTLSCERTFILE"></span></div>\n                                <div ng-messages="settings_webrtcForm[\'dtlscertfile\'].$error" ng-show="settings_webrtcForm[\'dtlscertfile\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.DTLSCERTFILE_REQUIRED">dtlscertfile field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.DTLSPRIVATEKEY">dtlsprivatekey</label>\n                                <input type="text" name="dtlsprivatekey" ng-model="vm.agent.dtlsprivatekey" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.DTLSPRIVATEKEY"></span></div>\n                                <div ng-messages="settings_webrtcForm[\'dtlsprivatekey\'].$error" ng-show="settings_webrtcForm[\'dtlsprivatekey\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.DTLSPRIVATEKEY_REQUIRED">dtlsprivatekey field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableSettings" aria-label="EnableSettings" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLESETTINGS">EnableSettings</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarAutoAnswer" aria-label="AutoAnswer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.AUTOANSWER">AutoAnswer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.phoneBarAutoAnswer" class="md-block">\n                                <label translate="STAFF.AUTOANSWERDELAY">AutoAnswerDelay</label>\n                                <input type="number" name="phoneBarAutoAnswerDelay" ng-model="vm.agent.phoneBarAutoAnswerDelay" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="settings_webrtcForm[\'phoneBarAutoAnswerDelay\'].$error" ng-show="settings_webrtcForm[\'phoneBarAutoAnswerDelay\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.AUTOANSWERDELAY_REQUIRED">AutoAnswerDelay field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.AUTOANSWERDELAY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AutoAnswerDelay must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableRecording" aria-label="EnableRecording" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLERECORDING">EnableRecording</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableDtmfTone" aria-label="EnableDtmfTone" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLEDTMFTONE">EnableDtmfTone</span></md-switch>\n\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container sip_webrtc md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.SIP_WEBRTC">SIP_WEBRTC</div>\n                        </div>\n                        <form name="sip_webrtcForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.SIPEXPIRES">SipExpires</label>\n                                <input type="number" name="phoneBarExpires" ng-model="vm.agent.phoneBarExpires" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.SIPEXPIRES"></span></div>\n                                <div ng-messages="sip_webrtcForm[\'phoneBarExpires\'].$error" ng-show="sip_webrtcForm[\'phoneBarExpires\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.SIPEXPIRES_REQUIRED">SipExpires field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.PERMISSIONS">PERMISSIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="agent-detail-form-container general_permissions md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.GENERAL_PERMISSIONS">GENERAL_PERMISSIONS</div>\n                        </div>\n                        <form name="general_permissionsForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.allowmessenger" aria-label="EnableMessenger" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLEMESSENGER">EnableMessenger</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarPrefixRequired" aria-label="PrefixRequired" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.PREFIXREQUIRED">PrefixRequired</span></md-switch>\n\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container permissions md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.PERMISSIONS">PERMISSIONS</div>\n                        </div>\n                        <div ng-controller="AgentPermissionsController as vm_pc" ng-init="vm_pc.init(vm.agent, vm.crudPermissions)" class="agent-detail-form-container">\n                            <md-list ng-repeat="father in vm_pc.navigation[0].children" ng-include="\'permission-nested.html\'" ng-if="vm_pc.agent.role !== \'admin\' && !father.hidden()"></md-list>\n\n                            \x3c!-- Nested navigation template --\x3e\n                            <script type="text/ng-template" id="permission-nested.html">\n                                <md-list-item>\n        <md-icon md-font-icon="{{father.icon}}"></md-icon>\n        <p translate="{{father.translate}}">{{ father.title }}</p>\n        <md-switch class="md-secondary" ng-model="father.enabled" ng-change="vm_pc.onChange(father)" ng-init="father.enabled = vm_pc.agent.permissions.includes(father.id)" \n                  ng-disabled="!vm_pc.crudPermissions.canEdit"></md-switch>\n      </md-list-item>\n\n      <md-divider></md-divider>\n\n      <md-list>\n        <md-list-item ng-repeat="child in father.children" ng-if="child.id !== 201">\n          <md-icon ng-if="child.icon" md-font-icon="{{child.icon}}"></md-icon>\n          <p translate="{{child.translate}}">{{ child.title }}</p>\n          <md-switch ng-model="child.enabled" ng-change="vm_pc.onChange(father, child)" ng-init="child.enabled = vm_pc.agent.permissions.includes(child.id)"\n                    ng-disabled="!vm_pc.crudPermissions.canEdit"></md-switch>\n          </md-list-item>\n      </md-list>\n  <\/script>\n                            \x3c!-- / Nested navigation template --\x3e\n\n                            <span ng-if="vm_pc.agent.role === \'admin\'" class="md-headline" translate="STAFF.ALL_MODULES_AVAILABLE">All modules are already available.</span>\n\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/staff/views/teams/create/dialog.html",'<md-dialog class="team-dialog" aria-label="New Team">\n    <form name="teamForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="STAFF.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.team.name" ng-required="true" autofocus>\n\n                <div ng-messages="teamForm[\'name\'].$error" ng-show="teamForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.team.description">\n\n                <div ng-messages="teamForm[\'description\'].$error" ng-show="teamForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newTeam" ng-click="vm.saveTeam()" class="send-button md-accent md-raised" ng-disabled="teamForm.$invalid || teamForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newTeam" ng-click="vm.addNewTeam()" class="send-button md-accent md-raised" ng-disabled="teamForm.$invalid" aria-label="ADD" translate="STAFF.ADD_TEAM" translate-attr-aria-label="STAFF.ADD_TEAM">\n                    ADD TEAM\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newTeam" ng-click="vm.deleteTeam($event)" aria-label="DELETE" translate translate-attr-aria-label="STAFF.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="STAFF.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/teams/edit/agentadd/agentadd.html",'<md-dialog class="team-dialog" aria-label="team" ng-init="vm.onInit()">\n    <form name="teamForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="STAFF.AGENTADD_TEAM">Add Agent to team</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/teams/teams.html",'<div id="teams" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-multiple" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="STAFF.TEAMS">Teams</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="STAFF.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedTeams.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedTeams =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="STAFF.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-teams-count">\n                    <span>{{vm.selectedTeams.length}}</span>\n                    <span translate="STAFF.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="TEAMS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllTeams()" translate="STAFF.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectTeams()" translate="STAFF.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedTeams" csv-label="true" filename="teams.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedTeams($event)" aria-label="delete selected" translate translate-attr-label="TEAMS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- TEAM TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedTeams" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTeams">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'STAFF.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'STAFF.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'STAFF.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.teams.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="STAFF.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="team" md-select-id="id" ng-repeat="team in vm.teams.rows">\n                                <td md-cell ng-if="team.userpic"><img class="avatar" alt="{{team.name}}" ng-src="api/users/{{team.id}}/avatar" /></td>\n                                <td md-cell ng-if="!team.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{team.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditTeam($event, team)" md-cell class="id ">{{team.id}}</td>\n                                <td ng-click="vm.createOrEditTeam($event, team)" md-cell class="name ">{{team.name}}</td>\n                                <td ng-click="vm.createOrEditTeam($event, team)" md-cell class="description ">{{team.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(team, $event    )" translate="STAFF.EDIT_TEAM">\n                                                    Edit Team\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(team, $event    )" translate="STAFF.AGENTADD_TEAM">\n                                                    AgentAdd Team\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(team, $event    )" translate="STAFF.DELETE_TEAM">\n                                                    Delete Team\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'STAFF.PAGE\' | translate}}:\', rowsPerPage: \'{{\'STAFF.ROWSPERPAGE\' | translate}}:\', of: \'{{\'STAFF.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.teams.count}}" md-on-paginate="vm.getTeams" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / TEAM TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD TEAM BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-team-button" ng-click="vm.createOrEditTeam($event)" aria-label="add team" translate translate-attr-aria-label="STAFF.ADD_TEAM">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD TEAM BUTTON --\x3e\n</div>'),e.put("app/main/apps/staff/views/telephones/create/dialog.html",'<md-dialog class="telephone-dialog" aria-label="New Telephone">\n    <form name="telephoneForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="STAFF.ACCOUNTNAME">Accountname</label>\n                <input type="text" name="fullname" ng-model="vm.telephone.fullname" ng-required="true" autofocus>\n\n                <div ng-messages="telephoneForm[\'fullname\'].$error" ng-show="telephoneForm[\'fullname\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.ACCOUNTNAME_REQUIRED">Accountname field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.USERNAME">Username</label>\n                <input type="text" name="name" ng-model="vm.telephone.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" ng-disabled="!vm.newTelephone">\n\n                <div class="hint"><span translate="STAFF.HELP.USERNAME"></span></div>\n                <div ng-messages="telephoneForm[\'name\'].$error" ng-show="telephoneForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.USERNAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Username must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.telephone.email" ng-required="true">\n\n                <div ng-messages="telephoneForm[\'email\'].$error" ng-show="telephoneForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="STAFF.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.newTelephone">\n                <label translate="STAFF.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.telephone.password" placeholder="Password" ng-pattern="vm.passwordPattern" translate translate-attr-placeholder="STAFF.PASSWORD" required>\n                <div ng-messages="telephoneForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.newTelephone  && (vm.newTelephone)">\n                <label translate="STAFF.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword" required>\n                <div ng-messages="telephoneForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="STAFF.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="STAFF.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.telephone.description">\n\n                <div ng-messages="telephoneForm[\'description\'].$error" ng-show="telephoneForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.newTelephone" class="md-block">\n                <md-switch ng-model="vm.telephone.autointernal" aria-label="AutoInternal"><span translate="STAFF.AUTOINTERNAL">AutoInternal</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="!vm.telephone.autointernal" class="md-block">\n                <label translate="STAFF.INTERNAL">Internal</label>\n                <input type="text" name="internal" ng-model="vm.telephone.internal" ng-required="true" ng-disabled="!vm.newTelephone">\n\n                <div ng-messages="telephoneForm[\'internal\'].$error" ng-show="telephoneForm[\'internal\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.INTERNAL_REQUIRED">Internal field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.newTelephone" class="md-block">\n                <md-switch ng-model="vm.telephone.voicemail" aria-label="Voicemail"><span translate="STAFF.VOICEMAIL">Voicemail</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newTelephone" ng-click="vm.saveTelephone()" class="send-button md-accent md-raised" ng-disabled="telephoneForm.$invalid || telephoneForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newTelephone" ng-click="vm.addNewTelephone()" class="send-button md-accent md-raised" ng-disabled="telephoneForm.$invalid" aria-label="ADD" translate="STAFF.ADD_TELEPHONE" translate-attr-aria-label="STAFF.ADD_TELEPHONE">\n                    ADD TELEPHONE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newTelephone" ng-click="vm.deleteTelephone($event)" aria-label="DELETE" translate translate-attr-aria-label="STAFF.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="STAFF.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/telephones/edit/changepassword/changepassword.html",'<md-dialog class="telephone-dialog" aria-label="{{vm.name}}">\n    <form name="telephoneForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ \'\n                    STAFF.CHANGE_PASSWORD\' | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block" ng-if="vm.currentUser.id == vm.telephone.id">\n                <label translate="STAFF.OLD_PASSWORD">Old Password</label>\n                <input type="password" name="oldPassword" ng-model="vm.oldPassword" placeholder="Password" translate translate-attr-placeholder="STAFF.OLD_PASSWORD" required>\n                <div ng-messages="telephoneForm.oldPassword.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.NEW_PASSWORD">New Password</label>\n                <input type="password" name="password" ng-model="vm.password" placeholder="Password" translate ng-pattern="vm.passwordPattern" translate-attr-placeholder="STAFF.NEW_PASSWORD" required>\n                <div ng-messages="telephoneForm.password.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is\n                            required</span>\n                    </div>\n\n\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.SECURE_PASSWORD_PATTERN">Must contain\n                            at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric\n                            character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                    <div ng-message="oldPasswordMatch">\n                        <span translate="STAFF.ERRORS.PASSWORD_OLDPASSWORD_MATCH">New password must be different from old one</span>\n                    </div>\n\n\n\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword">\n                <div ng-messages="telephoneForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CONFIRM_REQUIRED">Confirm field is\n                            required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="STAFF.ERRORS.CONFIRM_NOT_MATCH">Your password did\n                            not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.savePassword()" class="send-button md-accent md-raised" ng-disabled="telephoneForm.$invalid || telephoneForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/telephones/edit/view.html",'<div id="staff-telephone" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-telephones-button md-icon-button" aria-label="Go to telephones" ng-click="vm.gotoTelephones()" translate translate-attr-aria-label="STAFF.GO_TO_TELEPHONES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="telephone-image" hide-xs>\n                    <img ng-src="assets/images/business/telephones.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.telephone.id}}\n                        <span ng-if="vm.telephone.name">{{vm.telephone.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="STAFF.CREATED_AT"></span> <span>{{vm.telephone.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.changepassworddialog(vm.telephone, $event)" class="md-fab md-warn md-icon-button" aria-label="changepassword">\n                <md-tooltip><span translate="STAFF.CHANGEPASSWORD_TELEPHONE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-key-variant"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveTelephone()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(accountForm.$invalid) || (generalForm.$invalid)" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="telephone-detail-form-container account md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.ACCOUNT">ACCOUNT</div>\n                        </div>\n                        <form name="accountForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ACCOUNTNAME">Accountname</label>\n                                <input type="text" name="fullname" ng-model="vm.telephone.fullname" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="accountForm[\'fullname\'].$error" ng-show="accountForm[\'fullname\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ACCOUNTNAME_REQUIRED">Accountname field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.USERNAME">Username</label>\n                                <input type="text" name="name" ng-model="vm.telephone.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" disabled>\n\n                                <div class="hint"><span translate="STAFF.HELP.USERNAME"></span></div>\n                                <div ng-messages="accountForm[\'name\'].$error" ng-show="accountForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="STAFF.ERRORS.USERNAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Username must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.EMAIL">Email</label>\n                                <input type="email" name="email" ng-model="vm.telephone.email" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="accountForm[\'email\'].$error" ng-show="accountForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="STAFF.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.telephone.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="accountForm[\'description\'].$error" ng-show="accountForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.PHONE">Phone</label>\n                                <input type="text" name="phone" ng-model="vm.telephone.phone" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="accountForm[\'phone\'].$error" ng-show="accountForm[\'phone\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.MOBILE">Mobile</label>\n                                <input type="text" name="mobile" ng-model="vm.telephone.mobile" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="accountForm[\'mobile\'].$error" ng-show="accountForm[\'mobile\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.MOBILE_REQUIRED">Mobile field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.VOICE">VOICE</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="telephone-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container ng-if="!vm.telephone.autointernal" class="md-block">\n                                <label translate="STAFF.INTERNAL">Internal</label>\n                                <input type="text" name="internal" ng-model="vm.telephone.internal" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'internal\'].$error" ng-show="generalForm[\'internal\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.INTERNAL_REQUIRED">Internal field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.TRANSPORT">Transport</label>\n                                <md-select name="transport" ng-model="vm.telephone.transport" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'udp\'">udp</md-option>\n                                    <md-option ng-value="\'tcp\'">tcp</md-option>\n                                    <md-option ng-value="\'ws\'">ws</md-option>\n                                    <md-option ng-value="\'wss\'">wss</md-option>\n                                    <md-option ng-value="\'tls\'">tls</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.TRANSPORT"></span></div>\n                                <div ng-messages="generalForm[\'transport\'].$error" ng-show="generalForm[\'transport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.TRANSPORT_REQUIRED">Transport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.NAT">NAT</label>\n                                <md-select name="nat" ng-model="vm.telephone.nat" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'force_rport\'">force_rport</md-option>\n                                    <md-option ng-value="\'comedia\'">comedia</md-option>\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'never\'">never</md-option>\n                                    <md-option ng-value="\'route\'">route</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.NAT"></span></div>\n                                <div ng-messages="generalForm[\'nat\'].$error" ng-show="generalForm[\'nat\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.NAT_REQUIRED">NAT field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ALLOWCODECS">AllowCodecs</label>\n                                <md-select name="allow" ng-model="vm.telephone.allow" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'ulaw\'">ulaw</md-option>\n                                    <md-option ng-value="\'alaw\'">alaw</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                    <md-option ng-value="\'g722\'">g722</md-option>\n                                    <md-option ng-value="\'g729\'">g729</md-option>\n                                    <md-option ng-value="\'opus\'">opus</md-option>\n                                    <md-option ng-value="\'h264\'">h264</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.ALLOWCODECS"></span></div>\n                                <div ng-messages="generalForm[\'allow\'].$error" ng-show="generalForm[\'allow\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ALLOWCODECS_REQUIRED">AllowCodecs field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CALLERID">CallerId</label>\n                                <input type="text" name="callerid" ng-model="vm.telephone.callerid" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'callerid\'].$error" ng-show="generalForm[\'callerid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CALLERID_REQUIRED">CallerId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CONTEXT">Context</label>\n                                <md-select name="context" ng-model="vm.telephone.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CALLGROUP">Callgroup</label>\n                                <input type="text" name="callgroup" ng-model="vm.telephone.callgroup" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.CALLGROUP"></span></div>\n                                <div ng-messages="generalForm[\'callgroup\'].$error" ng-show="generalForm[\'callgroup\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CALLGROUP_REQUIRED">Callgroup field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.PICKUPGROUP">Pickupgroup</label>\n                                <input type="text" name="pickupgroup" ng-model="vm.telephone.pickupgroup" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.PICKUPGROUP"></span></div>\n                                <div ng-messages="generalForm[\'pickupgroup\'].$error" ng-show="generalForm[\'pickupgroup\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.PICKUPGROUP_REQUIRED">Pickupgroup field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.VIDEOSUPPORT">Videosupport</label>\n                                <md-select name="videosupport" ng-model="vm.telephone.videosupport" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">Yes</md-option>\n                                    <md-option ng-value="\'no\'">No</md-option>\n                                    <md-option ng-value="\'always\'">Always</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'videosupport\'].$error" ng-show="generalForm[\'videosupport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.VIDEOSUPPORT_REQUIRED">Videosupport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ENCRYPTION">Encryption</label>\n                                <md-select name="encryption" ng-model="vm.telephone.encryption" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.ENCRYPTION"></span></div>\n                                <div ng-messages="generalForm[\'encryption\'].$error" ng-show="generalForm[\'encryption\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ENCRYPTION_REQUIRED">Encryption field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/staff/views/telephones/telephones.html",'<div id="telephones" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-multiple" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="STAFF.TELEPHONES">Telephones</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="STAFF.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedTelephones.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedTelephones =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="STAFF.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-telephones-count">\n                    <span>{{vm.selectedTelephones.length}}</span>\n                    <span translate="STAFF.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="TELEPHONES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllTelephones()" translate="STAFF.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectTelephones()" translate="STAFF.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedTelephones" csv-label="true" filename="telephones.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedTelephones($event)" aria-label="delete selected" translate translate-attr-label="TELEPHONES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- TELEPHONE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedTelephones" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTelephones">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="fullname">{{ \'STAFF.ACCOUNTNAME\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'STAFF.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="email">{{ \'STAFF.EMAIL\' | translate }}</th>\n                                <th md-column md-order-by="internal">{{ \'STAFF.INTERNAL\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.telephones.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="STAFF.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="telephone" md-select-id="id" ng-repeat="telephone in vm.telephones.rows">\n                                <td md-cell ng-if="telephone.userpic"><img class="avatar" alt="{{telephone.name}}" ng-src="api/users/{{telephone.id}}/avatar" /></td>\n                                <td md-cell ng-if="!telephone.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{telephone.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(telephone, ev) : vm.createOrEditTelephone($event, telephone)" md-cell class="fullname font-weight-600">{{telephone.fullname}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(telephone, ev) : vm.createOrEditTelephone($event, telephone)" md-cell class="name ">{{telephone.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(telephone, ev) : vm.createOrEditTelephone($event, telephone)" md-cell class="email ">{{telephone.email}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(telephone, ev) : vm.createOrEditTelephone($event, telephone)" md-cell class="internal ">{{telephone.internal}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(telephone, $event    )" translate="STAFF.EDIT_TELEPHONE">\n                                                    Edit Telephone\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(telephone, $event    )" translate="STAFF.DELETE_TELEPHONE">\n                                                    Delete Telephone\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'STAFF.PAGE\' | translate}}:\', rowsPerPage: \'{{\'STAFF.ROWSPERPAGE\' | translate}}:\', of: \'{{\'STAFF.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.telephones.count}}" md-on-paginate="vm.getTelephones" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / TELEPHONE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD TELEPHONE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-telephone-button" ng-click="vm.createOrEditTelephone($event)" aria-label="add telephone" translate translate-attr-aria-label="STAFF.ADD_TELEPHONE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD TELEPHONE BUTTON --\x3e\n</div>'),e.put("app/main/apps/staff/views/userProfiles/create/dialog.html",'<md-dialog class="userProfile-dialog" aria-label="New UserProfile">\n    <form name="userProfileForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="STAFF.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.userProfile.name" ng-required="true" autofocus ng-disabled="!vm.newUserProfile">\n\n                <div ng-messages="userProfileForm[\'name\'].$error" ng-show="userProfileForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.userProfile.description">\n\n                <div ng-messages="userProfileForm[\'description\'].$error" ng-show="userProfileForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.CRUDPERMISSIONS">CrudPermissions</label>\n                <md-select name="crudPermissions" ng-model="vm.userProfile.crudPermissions" multiple required>\n\n                    <md-option ng-value="\'r\'" disabled> {{ \'STAFF.READ_PERMISSION\' | translate }} </md-option>\n\n                    <md-option ng-value="\'e\'"> {{ \'STAFF.EDIT_PERMISSION\' | translate }} </md-option>\n\n                    <md-option ng-value="\'d\'"> {{ \'STAFF.DELETE_PERMISSION\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="userProfileForm[\'crudPermissions\'].$error" ng-show="userProfileForm[\'crudPermissions\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CRUDPERMISSIONS_REQUIRED">CrudPermissions field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newUserProfile" ng-click="vm.saveUserProfile()" class="send-button md-accent md-raised" ng-disabled="userProfileForm.$invalid || userProfileForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newUserProfile" ng-click="vm.addNewUserProfile()" class="send-button md-accent md-raised" ng-disabled="userProfileForm.$invalid" aria-label="ADD" translate="STAFF.ADD_USERPROFILE" translate-attr-aria-label="STAFF.ADD_USERPROFILE">\n                    ADD USERPROFILE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newUserProfile" ng-click="vm.deleteUserProfile($event)" aria-label="DELETE" translate translate-attr-aria-label="STAFF.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="STAFF.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/userProfiles/edit/clone/clone.html",'<md-dialog class="userProfile-dialog" aria-label="Clone UserProfile">\n    <form name="userProfileForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="STAFF.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.userProfile.name" ng-required="true" autofocus ng-disabled="!vm.newUserProfile">\n\n                <div ng-messages="userProfileForm[\'name\'].$error" ng-show="userProfileForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.userProfile.description">\n\n                <div ng-messages="userProfileForm[\'description\'].$error" ng-show="userProfileForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.CRUDPERMISSIONS">CrudPermissions</label>\n                <md-select name="crudPermissions" ng-model="vm.userProfile.crudPermissions" multiple required>\n\n                    <md-option ng-value="\'r\'" disabled> {{ \'STAFF.READ_PERMISSION\' | translate }} </md-option>\n\n                    <md-option ng-value="\'e\'"> {{ \'STAFF.EDIT_PERMISSION\' | translate }} </md-option>\n\n                    <md-option ng-value="\'d\'"> {{ \'STAFF.DELETE_PERMISSION\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="userProfileForm[\'crudPermissions\'].$error" ng-show="userProfileForm[\'crudPermissions\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CRUDPERMISSIONS_REQUIRED">CrudPermissions field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <md-button type="submit" ng-click="vm.cloneUserProfile()" class="send-button md-accent md-raised" ng-disabled="userProfileForm.$invalid" aria-label="CLONE" translate="STAFF.CLONE_USERPROFILE" translate-attr-aria-label="STAFF.CLONE_USERPROFILE">\n                CLONE USERPROFILE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/userProfiles/edit/permissionsmanage/permissionsmanage.html",'<md-dialog class="userProfile-dialog" aria-label="userProfile">\n    <form name="userProfileForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2>{{vm.title}}</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog($event)">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <div layout="column" class="padding-bottom-10">\n                <div layout="row" class="padding-bottom-10">\n                    <md-input-container flex class="no-margin">\n                        <label translate="STAFF.SECTIONS">Sections</label>\n                        <md-select name="sections" ng-model="vm.selectedSection" placeholder="{{\'STAFF.PERMISSIONS_SELECT_SECTION\' | translate}}" ng-change="vm.onChangeSection()" required>\n                            <md-option ng-value="subsection" ng-repeat="subsection in vm.subsections" ng-selected="{{vm.subsections.length === 1 ? \'true\' : \'false\'}}">{{subsection.translate | translate}}</md-option>\n                        </md-select>\n                    </md-input-container>\n                    <div layout="row" ng-show="vm.selectedSection" class="margin-left-10">\n                        <md-button ng-switch="vm.selectedSection.enabled" class="md-icon-button md-fab md-mini size-8 padding-10" ng-class="vm.selectedSection.enabled ? \'blue-500-bg\' : \'grey-A400-bg\'" ng-click="vm.onChangeVisibility()" aria-label="Visibility">\n                            <md-icon ng-switch-when="true" md-font-icon="icon-eye" aria-label="Visible section">\n                                <md-tooltip>{{\'STAFF.PERMISSIONS_SECTION_HIDE\' | translate}}</md-tooltip>\n                            </md-icon>\n                            <md-icon ng-switch-when="false" md-font-icon="icon-eye-off" aria-label="Hidden section">\n                                <md-tooltip>{{\'STAFF.PERMISSIONS_SECTION_SHOW\' | translate}}</md-tooltip>\n                            </md-icon>\n                        </md-button>\n                        <div>\n                            <md-button class="md-icon-button md-fab md-mini size-8 green-A700-bg no-margin" ng-disabled="true">\n                                <md-icon md-font-icon="icon-monitor" class="md-background-fg" aria-label="Read permission">\n                                    <md-tooltip>{{\'STAFF.READ_PERMISSION\' | translate}}</md-tooltip>\n                                </md-icon>\n                            </md-button>\n                            <md-button class="md-icon-button md-fab md-mini size-8 no-margin" ng-class="vm.selectedSection.allowEdit ? \'green-A700-bg\' : \'grey-A400-bg\'" ng-click="vm.setPermission(\'edit\')">\n                                <md-icon md-font-icon="icon-pencil" aria-label="Edit permission">\n                                    <md-tooltip>{{\'STAFF.EDIT_PERMISSION\' | translate}}</md-tooltip>\n                                </md-icon>\n                            </md-button>\n                            <md-button class="md-icon-button md-fab md-mini size-8 no-margin" ng-class="vm.selectedSection.allowDelete ? \'green-A700-bg\' : \'grey-A400-bg\'" ng-click="vm.setPermission(\'delete\')">\n                                <md-icon md-font-icon="icon-delete" aria-label="Delete permission">\n                                    <md-tooltip>{{\'STAFF.DELETE_PERMISSION\' | translate}}</md-tooltip>\n                                </md-icon>\n                            </md-button>\n                        </div>\n                    </div>\n                </div>\n                <div layout="row" ng-show="vm.selectedSection" class="margin-left-10" ng-if="!vm.selectedSection.permissions || vm.selectedSection.permissions.association">\n                    <md-switch ng-model="vm.selectedSection.autoAssociation" class="no-margin padding-right-10" aria-label="Auto association" ng-change="vm.onChangeAutoAssociation()">\n                    </md-switch>\n                    <p class="no-margin font-size-12 line-height-30">{{\'STAFF.PERMISSIONS_AUTO_ASSOCIATION_INFO\' | translate}}</p>\n                </div>\n                <div layout="row" ng-show="vm.selectedSection && vm.selectedSection.title === \'Reports\' && !vm.selectedSection.autoAssociation" class="margin-bottom-10 margin-top-30" ng-if="!vm.selectedSection.permissions || vm.selectedSection.permissions.association">\n                    <md-input-container flex class="no-margin">\n                        <label translate="STAFF.REPORT_TYPE">Report Type</label>\n                        <md-select name="type" ng-model="vm.selectedSection.reportType" placeholder="{{\'STAFF.PERMISSIONS_SELECT_REPORT_TYPE\' | translate}}" ng-change="vm.onChangeReportType()" required>\n                            <md-option ng-value="\'default\'">Default</md-option>\n                            <md-option ng-value="\'custom\'">Custom</md-option>\n                        </md-select>\n                    </md-input-container>\n                </div>\n                <div ng-show="vm.selectedSection && vm.selectedSection.title === \'Dashboards\'" class="user-profile-section-help margin-bottom-10 margin-top-20">\n                    <md-icon md-font-icon="icon-help" aria-label="Dashboards help"></md-icon>\n                    <span class="no-margin font-size-12 line-height-30" translate="STAFF.HELP.CUSTOM_DASHBOARDS_PERMISSIONS"></span>\n                </div>\n            </div>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions" ng-if="!vm.selectedSection.permissions || vm.selectedSection.permissions.association" ng-hide="vm.selectedSection.autoAssociation"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center">\n            <div>\n                <md-icon md-font-icon="icon-information-outline" aria-label="Delete permission"></md-icon>\n                <span class="no-margin font-size-12 line-height-30" translate="STAFF.HELP.SAVE_PERMISSIONS"></span>\n            </div>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveSection()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/userProfiles/edit/view.html",'<div id="staff-userProfile" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-userProfiles-button md-icon-button" aria-label="Go to userProfiles" ng-click="vm.gotoUserProfiles()" translate translate-attr-aria-label="STAFF.GO_TO_USERPROFILES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="userProfile-image" hide-xs>\n                    <img ng-src="assets/images/business/userProfiles.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.userProfile.id}}\n                        <span ng-if="vm.userProfile.name">{{vm.userProfile.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="STAFF.CREATED_AT"></span> <span>{{vm.userProfile.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.clonedialog(vm.userProfile, $event)" class="md-fab md-amber-500-bg md-icon-button" aria-label="clone">\n                <md-tooltip><span translate="STAFF.CLONE_USERPROFILE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveUserProfile()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (modulesForm.$invalid)" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="userProfile-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.userProfile.name" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.userProfile.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CRUDPERMISSIONS">CrudPermissions</label>\n                                <md-select name="crudPermissions" ng-model="vm.userProfile.crudPermissions" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'r\'" disabled> {{ \'STAFF.READ_PERMISSION\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'e\'"> {{ \'STAFF.EDIT_PERMISSION\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'d\'"> {{ \'STAFF.DELETE_PERMISSION\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'crudPermissions\'].$error" ng-show="generalForm[\'crudPermissions\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CRUDPERMISSIONS_REQUIRED">CrudPermissions field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.PERMISSIONS">PERMISSIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="userProfile-detail-form-container modules md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.MODULES">MODULES</div>\n                        </div>\n                        <div ng-controller="UserProfilePermissionsController as vm_pc" ng-init="vm_pc.init(vm.userProfile, vm.license)" class="userProfile-detail-form-container">\n                            <md-grid-list flex md-cols-gt-xs="2" md-cols-gt-sm="2" md-cols-gt-md="4" md-cols-gt-lg="6" md-row-height-gt-xs="2:1" md-row-height-gt-sm="2:1" md-row-height-gt-md="3:1" gt-xs-gutter="4px" gt-sm-gutter="8px" gt-md-gutter="8px" gt-lg-gutter="16px">\n                                <md-grid-tile ng-repeat="father in vm_pc.modules" ng-if="vm_pc.userProfile.role !== \'admin\' && !father.permissions.hidden" md-colspan="2">\n                                    <md-card flex-xs flex-gt-xs="90" layout="column" no-padding no-margin>\n                                        <md-card-header>\n                                            <md-card-avatar>\n                                                <md-icon class="md-avatar-icon auto-size" md-font-icon="{{father.icon}}" ng-class="{ true: father.status.color }[true]">\n                                                </md-icon>\n                                                <md-tooltip>{{ father.status.info }}</md-tooltip>\n                                                </md-icon>\n                                            </md-card-avatar>\n                                            <md-card-header-text layout-align="center start">\n                                                <span class="md-title" translate="{{father.translate}}">{{ father.title }}</span>\n                                            </md-card-header-text>\n                                            <md-card-actions class="no-margin" layout="row" ng-init="vm_pc.checkSectionResources(father)" ng-if="father.status.tag != \'unlicensed\'">\n                                                <md-switch class="auto-height no-margin" ng-model="father.allResourcesEnabled" ng-change="vm_pc.onChangeEnableAllResources(father)" aria-label="Enable all"></md-switch>\n                                                <md-button class="md-mini auto-width" aria-label="Manage" ng-click="vm_pc.manageResources(father)" ng-hide="father.permissions && !father.permissions.association">\n                                                    <md-tooltip>{{\'STAFF.PERMISSIONS_MANAGE\' | translate}}\n                                                    </md-tooltip>\n                                                    <md-icon md-font-icon="icon-cog"></md-icon>\n                                                </md-button>\n                                            </md-card-actions>\n                                            <md-card-header-text ng-if="father.status.tag === \'unlicensed\'" layout-align="center end">\n                                                <span class="md-subhead red-A700-fg">{{ father.status.name }}</span>\n                                            </md-card-header-text>\n                                        </md-card-header>\n                                    </md-card>\n                                </md-grid-tile>\n                            </md-grid-list>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/staff/views/userProfiles/userProfiles.html",'<div id="userProfiles" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-multiple" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="STAFF.USERPROFILES">UserProfiles</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="STAFF.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedUserProfiles.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedUserProfiles =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="STAFF.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-userProfiles-count">\n                    <span>{{vm.selectedUserProfiles.length}}</span>\n                    <span translate="STAFF.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="USERPROFILES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllUserProfiles()" translate="STAFF.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectUserProfiles()" translate="STAFF.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedUserProfiles" csv-label="true" filename="userProfiles.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedUserProfiles($event)" aria-label="delete selected" translate translate-attr-label="USERPROFILES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- USERPROFILE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedUserProfiles" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getUserProfiles">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'STAFF.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'STAFF.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'STAFF.DESCRIPTION\' | translate }}</th>\n                                <th md-column md-order-by="crudPermissions">{{ \'STAFF.CRUDPERMISSIONS\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.userProfiles.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="STAFF.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="userProfile" md-select-id="id" ng-repeat="userProfile in vm.userProfiles.rows">\n                                <td md-cell ng-if="userProfile.userpic"><img class="avatar" alt="{{userProfile.name}}" ng-src="api/users/{{userProfile.id}}/avatar" /></td>\n                                <td md-cell ng-if="!userProfile.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{userProfile.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(userProfile, ev) : vm.createOrEditUserProfile($event, userProfile)" md-cell class="id ">{{userProfile.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(userProfile, ev) : vm.createOrEditUserProfile($event, userProfile)" md-cell class="name ">{{userProfile.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(userProfile, ev) : vm.createOrEditUserProfile($event, userProfile)" md-cell class="description ">{{userProfile.description}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(userProfile, ev) : vm.createOrEditUserProfile($event, userProfile)" md-cell class="crudPermissions ">{{userProfile.selectedcrudPermissions}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(userProfile, $event    )" translate="STAFF.EDIT_USERPROFILE">\n                                                    Edit UserProfile\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.clonedialog(userProfile, $event    )" translate="STAFF.CLONE_USERPROFILE">\n                                                    clone UserProfile\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(userProfile, $event    )" translate="STAFF.DELETE_USERPROFILE">\n                                                    Delete UserProfile\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'STAFF.PAGE\' | translate}}:\', rowsPerPage: \'{{\'STAFF.ROWSPERPAGE\' | translate}}:\', of: \'{{\'STAFF.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.userProfiles.count}}" md-on-paginate="vm.getUserProfiles" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / USERPROFILE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD USERPROFILE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-userProfile-button" ng-click="vm.createOrEditUserProfile($event)" aria-label="add userProfile" translate translate-attr-aria-label="STAFF.ADD_USERPROFILE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD USERPROFILE BUTTON --\x3e\n</div>'),e.put("app/main/apps/staff/views/users/create/dialog.html",'<md-dialog class="user-dialog" aria-label="New User">\n    <form name="userForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="STAFF.ROLE">Role</label>\n                <md-select name="role" ng-model="vm.user.role" autofocus required ng-disabled="!vm.newUser">\n                    <md-option ng-value="\'admin\'">Admin</md-option>\n                    <md-option ng-value="\'user\'">User</md-option>\n                </md-select>\n                <div ng-messages="userForm[\'role\'].$error" ng-show="userForm[\'role\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.ROLE_REQUIRED">Role field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.user.role === \'user\'" class="md-block">\n                <label translate="STAFF.USERPROFILE">UserProfile</label>\n                <md-select name="userProfileId" ng-model="vm.user.userProfileId" required>\n                    <md-option ng-value="userProfileId.id" ng-repeat="userProfileId in vm.userProfiles" ng-disabled="userProfileId.canSelect === false">{{ userProfileId.name }}</md-option>\n                </md-select>\n                <div ng-messages="userForm[\'userProfileId\'].$error" ng-show="userForm[\'userProfileId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.USERPROFILE_REQUIRED">UserProfile field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.FULLNAME">Fullname</label>\n                <input type="text" name="fullname" ng-model="vm.user.fullname" ng-required="true">\n\n                <div ng-messages="userForm[\'fullname\'].$error" ng-show="userForm[\'fullname\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.FULLNAME_REQUIRED">Fullname field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.USERNAME">Username</label>\n                <input type="text" name="name" ng-model="vm.user.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" ng-disabled="!vm.newUser">\n\n                <div class="hint"><span translate="STAFF.HELP.USERNAME"></span></div>\n                <div ng-messages="userForm[\'name\'].$error" ng-show="userForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.USERNAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Username must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.user.email" ng-required="true">\n\n                <div ng-messages="userForm[\'email\'].$error" ng-show="userForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="STAFF.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.newUser">\n                <label translate="STAFF.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.user.password" placeholder="Password" ng-pattern="vm.passwordPattern" translate translate-attr-placeholder="STAFF.PASSWORD" required>\n                <div ng-messages="userForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.newUser  && (vm.newUser)">\n                <label translate="STAFF.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword" required>\n                <div ng-messages="userForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="STAFF.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="STAFF.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.user.description">\n\n                <div ng-messages="userForm[\'description\'].$error" ng-show="userForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.newUser" class="md-block">\n                <md-switch ng-model="vm.user.autointernal" aria-label="AutoInternal"><span translate="STAFF.AUTOINTERNAL">AutoInternal</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="!vm.user.autointernal" class="md-block">\n                <label translate="STAFF.INTERNAL">Internal</label>\n                <input type="text" name="internal" ng-model="vm.user.internal" ng-required="true" ng-disabled="!vm.newUser">\n\n                <div ng-messages="userForm[\'internal\'].$error" ng-show="userForm[\'internal\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.INTERNAL_REQUIRED">Internal field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.user.id != vm.currentUser.id && vm.currentUser.role == \'admin\'" class="md-block">\n                <md-switch ng-model="vm.user.disabled" aria-label="Disabled"><span translate="STAFF.DISABLED">Disabled</span></md-switch>\n\n                <div class="hint"><span translate="STAFF.HELP.DISABLED"></span></div>\n            </md-input-container>\n            <md-input-container ng-if="vm.user.id != vm.currentUser.id && vm.currentUser.role == \'admin\' && vm.user.disabled == 0" class="md-block">\n                <md-switch ng-model="vm.user.blocked" aria-label="Blocked"><span translate="STAFF.BLOCKED">Blocked</span></md-switch>\n\n                <div class="hint"><span translate="STAFF.HELP.BLOCKED"></span></div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newUser" ng-click="vm.saveUser()" class="send-button md-accent md-raised" ng-disabled="userForm.$invalid || userForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newUser" ng-click="vm.addNewUser()" class="send-button md-accent md-raised" ng-disabled="userForm.$invalid" aria-label="ADD" translate="STAFF.ADD_USER" translate-attr-aria-label="STAFF.ADD_USER">\n                    ADD USER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newUser" ng-click="vm.deleteUser($event)" aria-label="DELETE" translate translate-attr-aria-label="STAFF.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="STAFF.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/users/edit/apikeymanager/apikeymanager.html",'<md-dialog class="user-dialog" aria-label="{{vm.name}}">\n    <form name="userForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ \'\n                    STAFF.MANAGE_API_KEY\' | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.generateApiKey()" class="send-button md-accent md-raised" aria-label="Generate" translate="STAFF.GENERATE" translate-attr-aria-label="STAFF.GENERATE">\n                    Generate\n                </md-button>\n                <md-button type="submit" ng-click="vm.removeApiKey()" class="send-button md-accent md-raised" aria-label="Remove" translate="STAFF.REMOVE" translate-attr-aria-label="STAFF.DELETE">\n                    Delete\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/users/edit/changepassword/changepassword.html",'<md-dialog class="user-dialog" aria-label="{{vm.name}}">\n    <form name="userForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ \'\n                    STAFF.CHANGE_PASSWORD\' | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block" ng-if="vm.currentUser.id == vm.user.id">\n                <label translate="STAFF.OLD_PASSWORD">Old Password</label>\n                <input type="password" name="oldPassword" ng-model="vm.oldPassword" placeholder="Password" translate translate-attr-placeholder="STAFF.OLD_PASSWORD" required>\n                <div ng-messages="userForm.oldPassword.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.NEW_PASSWORD">New Password</label>\n                <input type="password" name="password" ng-model="vm.password" placeholder="Password" translate ng-pattern="vm.passwordPattern" translate-attr-placeholder="STAFF.NEW_PASSWORD" required>\n                <div ng-messages="userForm.password.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is\n                            required</span>\n                    </div>\n\n\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.SECURE_PASSWORD_PATTERN">Must contain\n                            at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric\n                            character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                    <div ng-message="oldPasswordMatch">\n                        <span translate="STAFF.ERRORS.PASSWORD_OLDPASSWORD_MATCH">New password must be different from old one</span>\n                    </div>\n\n\n\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword">\n                <div ng-messages="userForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CONFIRM_REQUIRED">Confirm field is\n                            required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="STAFF.ERRORS.CONFIRM_NOT_MATCH">Your password did\n                            not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.savePassword()" class="send-button md-accent md-raised" ng-disabled="userForm.$invalid || userForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/users/edit/view.html",'<div id="staff-user" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-users-button md-icon-button" aria-label="Go to users" ng-click="vm.gotoUsers()" translate translate-attr-aria-label="STAFF.GO_TO_USERS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="user-image" hide-xs>\n                    <img ng-src="assets/images/business/users.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.user.id}}\n                        <span ng-if="vm.user.name">{{vm.user.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="STAFF.CREATED_AT"></span> <span>{{vm.user.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.apikeymanagerdialog(vm.user, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="apikeymanager">\n                <md-tooltip><span translate="STAFF.APIKEYMANAGER_USER"></span></md-tooltip>\n                <md-icon md-font-icon="fab fa-hubspot"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.changepassworddialog(vm.user, $event)" class="md-fab md-warn md-icon-button" aria-label="changepassword">\n                <md-tooltip><span translate="STAFF.CHANGEPASSWORD_USER"></span></md-tooltip>\n                <md-icon md-font-icon="icon-key-variant"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveUser()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(personal_infoForm.$invalid) || (security_suiteForm.$invalid) || (change_avatarForm.$invalid) || (generalForm.$invalid)" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="user-detail-form-container personal_info md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.PERSONAL_INFO">PERSONAL_INFO</div>\n                        </div>\n                        <form name="personal_infoForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ROLE">Role</label>\n                                <md-select name="role" ng-model="vm.user.role" autofocus required disabled>\n                                    <md-option ng-value="\'admin\'">Admin</md-option>\n                                    <md-option ng-value="\'user\'">User</md-option>\n                                </md-select>\n                                <div ng-messages="personal_infoForm[\'role\'].$error" ng-show="personal_infoForm[\'role\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ROLE_REQUIRED">Role field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.user.role === \'user\'" class="md-block">\n                                <label translate="STAFF.USERPROFILE">UserProfile</label>\n                                <md-select name="userProfileId" ng-model="vm.user.userProfileId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="userProfileId.id" ng-repeat="userProfileId in vm.userProfiles" ng-disabled="userProfileId.canSelect === false">{{ userProfileId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="personal_infoForm[\'userProfileId\'].$error" ng-show="personal_infoForm[\'userProfileId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.USERPROFILE_REQUIRED">UserProfile field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.FULLNAME">Fullname</label>\n                                <input type="text" name="fullname" ng-model="vm.user.fullname" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'fullname\'].$error" ng-show="personal_infoForm[\'fullname\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.FULLNAME_REQUIRED">Fullname field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.USERNAME">Username</label>\n                                <input type="text" name="name" ng-model="vm.user.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" disabled>\n\n                                <div class="hint"><span translate="STAFF.HELP.USERNAME"></span></div>\n                                <div ng-messages="personal_infoForm[\'name\'].$error" ng-show="personal_infoForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="STAFF.ERRORS.USERNAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Username must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.EMAIL">Email</label>\n                                <input type="email" name="email" ng-model="vm.user.email" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'email\'].$error" ng-show="personal_infoForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="STAFF.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.PHONE">Phone</label>\n                                <input type="text" name="phone" ng-model="vm.user.phone" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'phone\'].$error" ng-show="personal_infoForm[\'phone\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.MOBILE">Mobile</label>\n                                <input type="text" name="mobile" ng-model="vm.user.mobile" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'mobile\'].$error" ng-show="personal_infoForm[\'mobile\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.MOBILE_REQUIRED">Mobile field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.user.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'description\'].$error" ng-show="personal_infoForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="user-detail-form-container security_suite md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.SECURITY_SUITE">SECURITY_SUITE</div>\n                        </div>\n                        <form name="security_suiteForm" novalidate>\n                            <md-input-container ng-if="vm.user.passwordResetAt != null" class="md-block">\n                                <label translate="STAFF.LAST_PASSWORD_RESET_AT">Last_Password_Reset_At</label>\n                                <input type="text" name="passwordResetAt" ng-model="vm.user.passwordResetAt" autofocus disabled>\n\n                                <div class="hint"><span translate="STAFF.HELP.LAST_PASSWORD_RESET_AT"></span></div>\n                                <div ng-messages="security_suiteForm[\'passwordResetAt\'].$error" ng-show="security_suiteForm[\'passwordResetAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.LAST_PASSWORD_RESET_AT_REQUIRED">Last_Password_Reset_At field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.user.passwordResetAt == null" class="md-block">\n                                <label translate="STAFF.NO_PASSWORD_CHANGE">No_Password_Change</label>\n                                <input type="text" name="passwordResetAt" ng-model="vm.user.passwordResetAt" disabled>\n\n                                <div ng-messages="security_suiteForm[\'passwordResetAt\'].$error" ng-show="security_suiteForm[\'passwordResetAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.NO_PASSWORD_CHANGE_REQUIRED">No_Password_Change field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.APIKEY">ApiKey</label>\n                                <div layout="row" layout-align="center center">\n                                    <button class="md-button md-fab md-mini md-primary" ngclipboard data-clipboard-target="#copytoclipboard-apiKey" ngclipboard-success="vm.alert({title: \'copied to clipboard\', msg: e.text});" ngclipboard-error="vm.alert({title: \'error\', msg: \'copy to clipboard failed\'});">\n                                        <md-icon md-font-icon="icon-clipboard-text"></md-icon>\n                                    </button>\n                                    <input class="md-input" type="text" id="copytoclipboard-apiKey" name="apiKey" ng-model="vm.user.apiKey" ng-readonly="true">\n                                </div>\n                                <div class="hint"><span translate="STAFF.HELP.APIKEY"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.user.id != vm.currentUser.id && vm.currentUser.role == \'admin\'" class="md-block">\n                                <md-switch ng-model="vm.user.disabled" aria-label="Disabled" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.DISABLED">Disabled</span></md-switch>\n\n                                <div class="hint"><span translate="STAFF.HELP.DISABLED"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.user.id != vm.currentUser.id && vm.currentUser.role == \'admin\' && vm.user.disabled == 0" class="md-block">\n                                <md-switch ng-model="vm.user.blocked" aria-label="Blocked" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.BLOCKED">Blocked</span></md-switch>\n\n                                <div class="hint"><span translate="STAFF.HELP.BLOCKED"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="user-detail-form-container change_avatar md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.CHANGE_AVATAR">CHANGE_AVATAR</div>\n                        </div>\n                        <div ng-controller="Userchange_avatarController as vm_ca" ng-init="vm_ca.init(vm.user, vm.crudPermissions)" class="user-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                            <div id="user-image-uploader" flow-init="vm_ca.ngFlowOptions" flow-name="vm_ca.ngFlow.flow" flow-files-submitted="vm_ca.upload()" flow-file-added="vm_ca.fileAdded($file)" flow-file-success="vm_ca.fileSuccess($file, $message)" flow-complete="vm_ca.uploadComplete()" flow-drop flow-drag-enter="vm_ca.dropping=true" flow-drag-leave="vm_ca.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                                <div class="drop-text hint-text" layout="row" layout-align="center center">\n                                    <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                                </div>\n\n                                <div class="upload-button" layout="column" layout-align="center center">\n                                    <md-button class="md-accent md-raised" flow-btn ng-disabled="!vm_ca.crudPermissions.canEdit">\n                                        Upload\n                                    </md-button>\n                                    <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                                </div>\n\n                                <div layout="row" layout-align="start start" layout-wrap>\n                                    <div ng-repeat="change_avatarimage in vm_ca.user.images" ng-switch="change_avatarimage.type">\n                                        <div class="user-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                            <div class="overlay" layout="column" layout-align="center center">\n                                                <md-progress-linear md-mode="determinate" value="{{change_avatarimage.file.progress() * 100}}">\n                                                </md-progress-linear>\n                                            </div>\n                                            <img class="media" flow-img="change_avatarimage.file">\n                                        </div>\n\n                                        <div class="user-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                            <img class="media" ng-src="{{change_avatarimage.url}}">\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.VOICE">VOICE</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="user-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container ng-if="!vm.user.autointernal" class="md-block">\n                                <label translate="STAFF.INTERNAL">Internal</label>\n                                <input type="text" name="internal" ng-model="vm.user.internal" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'internal\'].$error" ng-show="generalForm[\'internal\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.INTERNAL_REQUIRED">Internal field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.TRANSPORT">Transport</label>\n                                <md-select name="transport" ng-model="vm.user.transport" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'udp\'">udp</md-option>\n                                    <md-option ng-value="\'tcp\'">tcp</md-option>\n                                    <md-option ng-value="\'ws\'">ws</md-option>\n                                    <md-option ng-value="\'wss\'">wss</md-option>\n                                    <md-option ng-value="\'tls\'">tls</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'transport\'].$error" ng-show="generalForm[\'transport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.TRANSPORT_REQUIRED">Transport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.NAT">NAT</label>\n                                <md-select name="nat" ng-model="vm.user.nat" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'force_rport\'">force_rport</md-option>\n                                    <md-option ng-value="\'comedia\'">comedia</md-option>\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'never\'">never</md-option>\n                                    <md-option ng-value="\'route\'">route</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.NAT"></span></div>\n                                <div ng-messages="generalForm[\'nat\'].$error" ng-show="generalForm[\'nat\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.NAT_REQUIRED">NAT field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ALLOWCODECS">AllowCodecs</label>\n                                <md-select name="allow" ng-model="vm.user.allow" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'ulaw\'">ulaw</md-option>\n                                    <md-option ng-value="\'alaw\'">alaw</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                    <md-option ng-value="\'g722\'">g722</md-option>\n                                    <md-option ng-value="\'g729\'">g729</md-option>\n                                    <md-option ng-value="\'opus\'">opus</md-option>\n                                    <md-option ng-value="\'h264\'">h264</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.ALLOWCODECS"></span></div>\n                                <div ng-messages="generalForm[\'allow\'].$error" ng-show="generalForm[\'allow\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ALLOWCODECS_REQUIRED">AllowCodecs field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CONTEXT">Context</label>\n                                <md-select name="context" ng-model="vm.user.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CALLGROUP">Callgroup</label>\n                                <input type="text" name="callgroup" ng-model="vm.user.callgroup" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.CALLGROUP"></span></div>\n                                <div ng-messages="generalForm[\'callgroup\'].$error" ng-show="generalForm[\'callgroup\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CALLGROUP_REQUIRED">Callgroup field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.PICKUPGROUP">Pickupgroup</label>\n                                <input type="text" name="pickupgroup" ng-model="vm.user.pickupgroup" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.PICKUPGROUP"></span></div>\n                                <div ng-messages="generalForm[\'pickupgroup\'].$error" ng-show="generalForm[\'pickupgroup\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.PICKUPGROUP_REQUIRED">Pickupgroup field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.APIKEY">ApiKey</label>\n                                <div layout="row" layout-align="center center">\n                                    <button class="md-button md-fab md-mini md-primary" ngclipboard data-clipboard-target="#copytoclipboard-apiKey" ngclipboard-success="vm.alert({title: \'copied to clipboard\', msg: e.text});" ngclipboard-error="vm.alert({title: \'error\', msg: \'copy to clipboard failed\'});">\n                                        <md-icon md-font-icon="icon-clipboard-text"></md-icon>\n                                    </button>\n                                    <input class="md-input" type="text" id="copytoclipboard-apiKey" name="apiKey" ng-model="vm.user.apiKey" ng-readonly="true">\n                                </div>\n                                <div class="hint"><span translate="STAFF.HELP.APIKEY"></span></div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.VIDEOSUPPORT">Videosupport</label>\n                                <md-select name="videosupport" ng-model="vm.user.videosupport" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">Yes</md-option>\n                                    <md-option ng-value="\'no\'">No</md-option>\n                                    <md-option ng-value="\'always\'">Always</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'videosupport\'].$error" ng-show="generalForm[\'videosupport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.VIDEOSUPPORT_REQUIRED">Videosupport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/staff/views/users/users.html",'<div id="users" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-multiple" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="STAFF.USERS">Users</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="STAFF.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedUsers.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedUsers =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="STAFF.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-users-count">\n                    <span>{{vm.selectedUsers.length}}</span>\n                    <span translate="STAFF.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="USERS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllUsers()" translate="STAFF.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectUsers()" translate="STAFF.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedUsers" csv-label="true" filename="users.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- USER TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedUsers" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getUsers">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="role">{{ \'STAFF.ROLE\' | translate }}</th>\n                                <th md-column md-order-by="userProfileId">{{ \'STAFF.USERPROFILE\' | translate }}</th>\n                                <th md-column md-order-by="fullname">{{ \'STAFF.FULLNAME\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'STAFF.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="email">{{ \'STAFF.EMAIL\' | translate }}</th>\n                                <th md-column md-order-by="phone">{{ \'STAFF.PHONE\' | translate }}</th>\n                                <th md-column md-order-by="mobile">{{ \'STAFF.MOBILE\' | translate }}</th>\n                                <th md-column md-order-by="internal">{{ \'STAFF.INTERNAL\' | translate }}</th>\n                                <th md-column md-order-by="disabled">{{ \'STAFF.DISABLED\' | translate }}</th>\n                                <th md-column md-order-by="blocked">{{ \'STAFF.BLOCKED\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.users.rows.length">\n                                <td md-cell colspan="11">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="STAFF.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="user" md-select-id="id" ng-repeat="user in vm.users.rows">\n                                <td md-cell ng-if="user.userpic"><img class="avatar" alt="{{user.name}}" ng-src="api/users/{{user.id}}/avatar" /></td>\n                                <td md-cell ng-if="!user.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{user.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="role ">{{ vm.arrayrole[user.role].option }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="userProfileId font-weight-600">{{ (vm.userProfiles | filter : {\'id\':user.userProfileId} : true)[0].name }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="fullname font-weight-600">{{user.fullname}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="name ">{{user.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="email ">{{user.email}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="phone ">{{user.phone}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="mobile ">{{user.mobile}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="internal ">{{user.internal}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="disabled ">\n                                    <md-icon md-colors="{color: {{user.disabled ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{user.disabled ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="blocked ">\n                                    <md-icon md-colors="{color: {{user.blocked ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{user.blocked ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(user, $event    )" translate="STAFF.EDIT_USER">\n                                                    Edit User\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(user, $event    )" translate="STAFF.DELETE_USER">\n                                                    Delete User\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'STAFF.PAGE\' | translate}}:\', rowsPerPage: \'{{\'STAFF.ROWSPERPAGE\' | translate}}:\', of: \'{{\'STAFF.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.users.count}}" md-on-paginate="vm.getUsers" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / USER TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD USER BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-user-button" ng-click="vm.createOrEditUser($event)" aria-label="add user" translate translate-attr-aria-label="STAFF.ADD_USER">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD USER BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/cannedAnswers/cannedAnswers.html",'<div id="cannedAnswers" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.CANNEDANSWERS">CannedAnswers</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedCannedAnswers.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedCannedAnswers =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-cannedAnswers-count">\n                    <span>{{vm.selectedCannedAnswers.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CANNEDANSWERS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllCannedAnswers()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectCannedAnswers()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedCannedAnswers" csv-label="true" filename="cannedAnswers.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedCannedAnswers($event)" aria-label="delete selected" translate translate-attr-label="CANNEDANSWERS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- CANNEDANSWER TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedCannedAnswers" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getCannedAnswers">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="key">{{ \'TOOLS.KEY\' | translate }}</th>\n                                <th md-column md-order-by="value">{{ \'TOOLS.VALUE\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.cannedAnswers.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="cannedAnswer" md-select-id="id" ng-repeat="cannedAnswer in vm.cannedAnswers.rows">\n                                <td md-cell ng-if="cannedAnswer.userpic"><img class="avatar" alt="{{cannedAnswer.name}}" ng-src="api/users/{{cannedAnswer.id}}/avatar" /></td>\n                                <td md-cell ng-if="!cannedAnswer.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{cannedAnswer.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditCannedAnswer($event, cannedAnswer)" md-cell class="id ">{{cannedAnswer.id}}</td>\n                                <td ng-click="vm.createOrEditCannedAnswer($event, cannedAnswer)" md-cell class="key ">{{cannedAnswer.key}}</td>\n                                <td ng-click="vm.createOrEditCannedAnswer($event, cannedAnswer)" md-cell class="value ">{{cannedAnswer.value}}</td>\n                                <td ng-click="vm.createOrEditCannedAnswer($event, cannedAnswer)" md-cell class="description ">{{cannedAnswer.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(cannedAnswer, $event    )" translate="TOOLS.EDIT_CANNEDANSWER">\n                                                    Edit CannedAnswer\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(cannedAnswer, $event    )" translate="TOOLS.DELETE_CANNEDANSWER">\n                                                    Delete CannedAnswer\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.cannedAnswers.count}}" md-on-paginate="vm.getCannedAnswers" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / CANNEDANSWER TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD CANNEDANSWER BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-cannedAnswer-button" ng-click="vm.createOrEditCannedAnswer($event)" aria-label="add cannedAnswer" translate translate-attr-aria-label="TOOLS.ADD_CANNEDANSWER">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD CANNEDANSWER BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/cannedAnswers/create/dialog.html",'<md-dialog class="cannedAnswer-dialog" aria-label="New CannedAnswer">\n    <form name="cannedAnswerForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.KEY">Key</label>\n                <input type="text" name="key" ng-model="vm.cannedAnswer.key" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="cannedAnswerForm[\'key\'].$error" ng-show="cannedAnswerForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="TOOLS.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 255}\'>Key must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <textarea name="value" ng-model="vm.cannedAnswer.value" required></textarea>\n\n                <div ng-messages="cannedAnswerForm[\'value\'].$error" ng-show="cannedAnswerForm[\'value\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.cannedAnswer.description">\n\n                <div ng-messages="cannedAnswerForm[\'description\'].$error" ng-show="cannedAnswerForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newCannedAnswer" ng-click="vm.saveCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="cannedAnswerForm.$invalid || cannedAnswerForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newCannedAnswer" ng-click="vm.addNewCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="cannedAnswerForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_CANNEDANSWER" translate-attr-aria-label="TOOLS.ADD_CANNEDANSWER">\n                    ADD CANNEDANSWER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newCannedAnswer" ng-click="vm.deleteCannedAnswer($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/customDashboards/create/dialog.html",'<md-dialog class="customDashboard-dialog" aria-label="New CustomDashboard">\n    <form name="customDashboardForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.customDashboard.name" ng-required="true" autofocus>\n\n                <div ng-messages="customDashboardForm[\'name\'].$error" ng-show="customDashboardForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.customDashboard.description">\n\n                <div ng-messages="customDashboardForm[\'description\'].$error" ng-show="customDashboardForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newCustomDashboard" ng-click="vm.saveCustomDashboard()" class="send-button md-accent md-raised" ng-disabled="customDashboardForm.$invalid || customDashboardForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newCustomDashboard" ng-click="vm.addNewCustomDashboard()" class="send-button md-accent md-raised" ng-disabled="customDashboardForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_CUSTOMDASHBOARD" translate-attr-aria-label="TOOLS.ADD_CUSTOMDASHBOARD">\n                    ADD CUSTOMDASHBOARD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newCustomDashboard" ng-click="vm.deleteCustomDashboard($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/customDashboards/customDashboards.html",'<div id="customDashboards" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.CUSTOMDASHBOARDS">CustomDashboards</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedCustomDashboards.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedCustomDashboards =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-customDashboards-count">\n                    <span>{{vm.selectedCustomDashboards.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CUSTOMDASHBOARDS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllCustomDashboards()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectCustomDashboards()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedCustomDashboards" csv-label="true" filename="customDashboards.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedCustomDashboards($event)" aria-label="delete selected" translate translate-attr-label="CUSTOMDASHBOARDS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- CUSTOMDASHBOARD TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedCustomDashboards" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getCustomDashboards">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.customDashboards.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="customDashboard" md-select-id="id" ng-repeat="customDashboard in vm.customDashboards.rows">\n                                <td md-cell ng-if="customDashboard.userpic"><img class="avatar" alt="{{customDashboard.name}}" ng-src="api/users/{{customDashboard.id}}/avatar" /></td>\n                                <td md-cell ng-if="!customDashboard.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{customDashboard.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(customDashboard, ev) : vm.createOrEditCustomDashboard($event, customDashboard)" md-cell class="id ">{{customDashboard.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(customDashboard, ev) : vm.createOrEditCustomDashboard($event, customDashboard)" md-cell class="name ">{{customDashboard.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(customDashboard, ev) : vm.createOrEditCustomDashboard($event, customDashboard)" md-cell class="description ">{{customDashboard.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(customDashboard, $event    )" translate="TOOLS.EDIT_CUSTOMDASHBOARD">\n                                                    Edit CustomDashboard\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.clonedialog(customDashboard, $event    )" translate="TOOLS.CLONE_CUSTOMDASHBOARD">\n                                                    clone CustomDashboard\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotodashboardgoto(customDashboard, $event    )" translate="TOOLS.GOTODASHBOARD_CUSTOMDASHBOARD">\n                                                    goToDashboard CustomDashboard\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(customDashboard, $event    )" translate="TOOLS.DELETE_CUSTOMDASHBOARD">\n                                                    Delete CustomDashboard\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.customDashboards.count}}" md-on-paginate="vm.getCustomDashboards" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / CUSTOMDASHBOARD TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD CUSTOMDASHBOARD BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-customDashboard-button" ng-click="vm.createOrEditCustomDashboard($event)" aria-label="add customDashboard" translate translate-attr-aria-label="TOOLS.ADD_CUSTOMDASHBOARD">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD CUSTOMDASHBOARD BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/customDashboards/edit/clone/clone.html",'<md-dialog class="customDashboard-dialog" aria-label="Clone CustomDashboard">\n    <form name="customDashboardForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.customDashboard.name" ng-required="true" autofocus>\n\n                <div ng-messages="customDashboardForm[\'name\'].$error" ng-show="customDashboardForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <md-button type="submit" ng-click="vm.cloneCustomDashboard()" class="send-button md-accent md-raised" ng-disabled="customDashboardForm.$invalid" aria-label="CLONE" translate="TOOLS.CLONE_CUSTOMDASHBOARD" translate-attr-aria-label="TOOLS.CLONE_CUSTOMDASHBOARD">\n                CLONE CUSTOMDASHBOARD\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/customDashboards/edit/dashboard/dialog.html",'<md-dialog class="dashboarditem-dialog" aria-label="New DashboardItem">\n    <form name="dashboarditemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.dashboarditem.type" autofocus ng-disabled="!vm.newDashboardItem">\n\n                    <md-option ng-value="\'counter\'"> {{ \'TOOLS.COUNTER\' | translate }} </md-option>\n\n                    <md-option ng-value="\'multibar-chart\'"> {{ \'TOOLS.MULTIBARCHART\' | translate }} </md-option>\n\n                    <md-option ng-value="\'pie-chart\'"> {{ \'TOOLS.PIECHART\' | translate }} </md-option>\n\n                    <md-option ng-value="\'web-report\'"> {{ \'TOOLS.WEBREPORT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'iframe\'"> {{ \'TOOLS.IFRAME\' | translate }} </md-option>\n\n                    <md-option ng-value="\'clock\'"> {{ \'TOOLS.CLOCK\' | translate }} </md-option>\n\n                    <md-option ng-value="\'custom\'"> {{ \'TOOLS.CUSTOMTYPE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'type\'].$error" ng-show="dashboarditemForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TITLE">Title</label>\n                <input type="text" name="title" ng-model="vm.dashboarditem.title" md-maxlength="255" ng-required="true">\n\n                <div ng-messages="dashboarditemForm[\'title\'].$error" ng-show="dashboarditemForm[\'title\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TITLE_REQUIRED">Title field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="TOOLS.ERRORS.TITLE_MAX_LENGTH" translate-values=\'{max: 255}\'>Title must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'iframe\'" class="md-block">\n                <label translate="TOOLS.URL">Url</label>\n                <input type="url" name="attrUrl" ng-model="vm.dashboarditem.attrUrl" ng-required="true">\n\n                <div ng-messages="dashboarditemForm[\'attrUrl\'].$error" ng-show="dashboarditemForm[\'attrUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="TOOLS.ERRORS.URL_MUST_VALID_URL">Url must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'custom\'" class="md-block">\n                <label translate="TOOLS.PATH">Path</label>\n                <input type="text" name="attrPath" ng-model="vm.dashboarditem.attrPath" ng-required="true">\n\n                <div ng-messages="dashboarditemForm[\'attrPath\'].$error" ng-show="dashboarditemForm[\'attrPath\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.PATH_REQUIRED">Path field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'clock\'" class="md-block">\n                <label translate="TOOLS.FORMAT">Format</label>\n                <input type="text" name="attrHourFormat" ng-model="vm.dashboarditem.attrHourFormat" ng-required="true">\n\n                <div ng-messages="dashboarditemForm[\'attrHourFormat\'].$error" ng-show="dashboarditemForm[\'attrHourFormat\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.FORMAT_REQUIRED">Format field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'clock\'" class="md-block">\n                <label translate="TOOLS.TIMEZONE">Timezone</label>\n                <md-select name="attrTimezone" ng-model="vm.dashboarditem.attrTimezone" required>\n                    <md-option ng-value="\'-12.00\'">GMT-12.00</md-option>\n                    <md-option ng-value="\'-11.00\'">GMT-11.00</md-option>\n                    <md-option ng-value="\'-10.00\'">GMT-10.00</md-option>\n                    <md-option ng-value="\'-9.00\'">GMT-9.00</md-option>\n                    <md-option ng-value="\'-8.00\'">GMT-8.00</md-option>\n                    <md-option ng-value="\'-7.00\'">GMT-7.00</md-option>\n                    <md-option ng-value="\'-6.00\'">GMT-6.00</md-option>\n                    <md-option ng-value="\'-5.00\'">GMT-5.00</md-option>\n                    <md-option ng-value="\'-4.00\'">GMT-4.00</md-option>\n                    <md-option ng-value="\'-3.30\'">GMT-3.30</md-option>\n                    <md-option ng-value="\'-3.00\'">GMT-3.00</md-option>\n                    <md-option ng-value="\'-2.00\'">GMT-2.00</md-option>\n                    <md-option ng-value="\'-1.00\'">GMT-1.00</md-option>\n                    <md-option ng-value="\'0.00\'">GMT 0.00</md-option>\n                    <md-option ng-value="\'1.00\'">GMT+1.00</md-option>\n                    <md-option ng-value="\'2.00\'">GMT+2.00</md-option>\n                    <md-option ng-value="\'3.00\'">GMT+3.00</md-option>\n                    <md-option ng-value="\'3.30\'">GMT+3.30</md-option>\n                    <md-option ng-value="\'4.00\'">GMT+4.00</md-option>\n                    <md-option ng-value="\'4.30\'">GMT+4.30</md-option>\n                    <md-option ng-value="\'5.00\'">GMT+5.00</md-option>\n                    <md-option ng-value="\'5.30\'">GMT+5.30</md-option>\n                    <md-option ng-value="\'5.45\'">GMT+5.45</md-option>\n                    <md-option ng-value="\'6.00\'">GMT+6.00</md-option>\n                    <md-option ng-value="\'6.30\'">GMT+6.30</md-option>\n                    <md-option ng-value="\'7.00\'">GMT+7.00</md-option>\n                    <md-option ng-value="\'8.00\'">GMT+8.00</md-option>\n                    <md-option ng-value="\'9.00\'">GMT+9.00</md-option>\n                    <md-option ng-value="\'9.30\'">GMT+9.30</md-option>\n                    <md-option ng-value="\'10.00\'">GMT+10.00</md-option>\n                    <md-option ng-value="\'11.00\'">GMT+11.00</md-option>\n                    <md-option ng-value="\'12.00\'">GMT+12.00</md-option>\n                    <md-option ng-value="\'13.00\'">GMT+13.00</md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrTimezone\'].$error" ng-show="dashboarditemForm[\'attrTimezone\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TIMEZONE_REQUIRED">Timezone field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'counter\'" class="md-block">\n                <label translate="TOOLS.METRIC">Metric</label>\n                <md-select name="attrMetric" ng-model="vm.dashboarditem.attrMetric" required>\n\n                    <md-option ng-value="\'total\'"> {{ \'TOOLS.TOTAL\' | translate }} </md-option>\n\n                    <md-option ng-value="\'abandoned\'"> {{ \'TOOLS.ABANDONED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'waiting\'"> {{ \'TOOLS.WAITING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'talking\'"> {{ \'TOOLS.TALKING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'answered\'"> {{ \'TOOLS.ANSWERED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'unmanaged\'"> {{ \'TOOLS.UNMANAGED\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrMetric\'].$error" ng-show="dashboarditemForm[\'attrMetric\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.METRIC_REQUIRED">Metric field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="[\'multibar-chart\', \'pie-chart\'].includes(vm.dashboarditem.type)" class="md-block">\n                <label translate="TOOLS.SERIE1">Serie1</label>\n                <md-select name="attrSerie1" ng-model="vm.dashboarditem.attrSerie1" required>\n\n                    <md-option ng-value="\'total\'"> {{ \'TOOLS.TOTAL\' | translate }} </md-option>\n\n                    <md-option ng-value="\'abandoned\'"> {{ \'TOOLS.ABANDONED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'waiting\'"> {{ \'TOOLS.WAITING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'talking\'"> {{ \'TOOLS.TALKING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'answered\'"> {{ \'TOOLS.ANSWERED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'unmanaged\'"> {{ \'TOOLS.UNMANAGED\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrSerie1\'].$error" ng-show="dashboarditemForm[\'attrSerie1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.SERIE1_REQUIRED">Serie1 field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="[\'multibar-chart\', \'pie-chart\'].includes(vm.dashboarditem.type)" class="md-block">\n                <label translate="TOOLS.SERIE2">Serie2</label>\n                <md-select name="attrSerie2" ng-model="vm.dashboarditem.attrSerie2">\n\n                    <md-option ng-value="\'null\'"> {{ \'TOOLS.NONE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'total\'"> {{ \'TOOLS.TOTAL\' | translate }} </md-option>\n\n                    <md-option ng-value="\'abandoned\'"> {{ \'TOOLS.ABANDONED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'waiting\'"> {{ \'TOOLS.WAITING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'talking\'"> {{ \'TOOLS.TALKING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'answered\'"> {{ \'TOOLS.ANSWERED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'unmanaged\'"> {{ \'TOOLS.UNMANAGED\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrSerie2\'].$error" ng-show="dashboarditemForm[\'attrSerie2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.SERIE2_REQUIRED">Serie2 field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="[\'multibar-chart\', \'pie-chart\'].includes(vm.dashboarditem.type)" class="md-block">\n                <label translate="TOOLS.SERIE3">Serie3</label>\n                <md-select name="attrSerie3" ng-model="vm.dashboarditem.attrSerie3">\n\n                    <md-option ng-value="\'null\'"> {{ \'TOOLS.NONE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'total\'"> {{ \'TOOLS.TOTAL\' | translate }} </md-option>\n\n                    <md-option ng-value="\'abandoned\'"> {{ \'TOOLS.ABANDONED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'waiting\'"> {{ \'TOOLS.WAITING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'talking\'"> {{ \'TOOLS.TALKING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'answered\'"> {{ \'TOOLS.ANSWERED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'unmanaged\'"> {{ \'TOOLS.UNMANAGED\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrSerie3\'].$error" ng-show="dashboarditemForm[\'attrSerie3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.SERIE3_REQUIRED">Serie3 field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'web-report\'" class="md-block">\n                <label translate="TOOLS.REPORT">Report</label>\n                <input type="search" name="report" ng-model="vm.dashboarditem.report" ng-required="true" autocomplete="off" ng-click="vm.searchReport()">\n                <md-icon md-font-icon="icon-magnify" ng-click="vm.searchReport()" aria-label="Search Report"></md-icon>\n                <div ng-messages="dashboarditemForm[\'report\'].$error" ng-show="dashboarditemForm[\'report\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.REPORT_REQUIRED">Report field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'web-report\'" class="md-block">\n                <label translate="TOOLS.REFRESH">Refresh</label>\n                <input type="number" name="attrRefresh" ng-model="vm.dashboarditem.attrRefresh" min="5" ng-required="true">\n\n                <div ng-messages="dashboarditemForm[\'attrRefresh\'].$error" ng-show="dashboarditemForm[\'attrRefresh\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.REFRESH_REQUIRED">Refresh field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="TOOLS.ERRORS.REFRESH_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Refresh must be a valid greater or equal than</span> <span>5</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="[\'multibar-chart\', \'pie-chart\', \'counter\'].includes(vm.dashboarditem.type)" class="md-block">\n                <label translate="TOOLS.FILTERVOICEQUEUES">FilterVoiceQueues</label>\n                <md-select name="attrVoiceQueues" ng-model="vm.dashboarditem.attrVoiceQueues" multiple>\n                    <md-option ng-value="attrVoiceQueues.id" ng-repeat="attrVoiceQueues in vm.voiceQueues" ng-disabled="attrVoiceQueues.canSelect === false">{{ attrVoiceQueues.name }}</md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrVoiceQueues\'].$error" ng-show="dashboarditemForm[\'attrVoiceQueues\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.FILTERVOICEQUEUES_REQUIRED">FilterVoiceQueues field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="[\'counter\', \'clock\'].includes(vm.dashboarditem.type)" class="md-block">\n                <label translate="TOOLS.FONTSIZE">FontSize</label>\n                <input type="number" name="attrFontSize" ng-model="vm.dashboarditem.attrFontSize" min="12" max="40" ng-required="true">\n\n                <div ng-messages="dashboarditemForm[\'attrFontSize\'].$error" ng-show="dashboarditemForm[\'attrFontSize\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.FONTSIZE_REQUIRED">FontSize field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="TOOLS.ERRORS.FONTSIZE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">FontSize must be a valid greater or equal than</span> <span>12</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="TOOLS.ERRORS.FONTSIZE_MUST_BE_LESS_THAN_OR_EQUAL_TO">FontSize must be a valid greater or equal than</span> <span>40</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div flex md-color-picker ng-model="vm.dashboarditem.foreground" label="{{\'TOOLS.FOREGROUND\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n            <div flex md-color-picker ng-model="vm.dashboarditem.background" label="{{\'TOOLS.BACKGROUND\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.LINK">link</label>\n                <input type="url" name="link" ng-model="vm.dashboarditem.link">\n\n                <div ng-messages="dashboarditemForm[\'link\'].$error" ng-show="dashboarditemForm[\'link\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.LINK_REQUIRED">link field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="TOOLS.ERRORS.LINK_MUST_VALID_URL">link must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newDashboardItem" ng-click="vm.saveDashboardItem()" class="send-button md-accent md-raised" ng-disabled="dashboarditemForm.$invalid || dashboarditemForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newDashboardItem" ng-click="vm.addNewDashboardItem()" class="send-button md-accent md-raised" ng-disabled="dashboarditemForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_DASHBOARDITEM" translate-attr-aria-label="TOOLS.ADD_DASHBOARDITEM">\n                    ADD DASHBOARDITEM\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newDashboardItem" ng-click="vm.deleteDashboardItem($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/customDashboards/edit/view.html",'<div id="tools-customDashboard" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-customDashboards-button md-icon-button" aria-label="Go to customDashboards" ng-click="vm.gotoCustomDashboards()" translate translate-attr-aria-label="TOOLS.GO_TO_CUSTOMDASHBOARDS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="customDashboard-image" hide-xs>\n                    <img ng-src="assets/images/business/customDashboards.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.customDashboard.id}}\n                        <span ng-if="vm.customDashboard.name">{{vm.customDashboard.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="TOOLS.CREATED_AT"></span> <span>{{vm.customDashboard.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.clonedialog(vm.customDashboard, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="clone">\n                <md-tooltip><span translate="TOOLS.CLONE_CUSTOMDASHBOARD"></span></md-tooltip>\n                <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.customDashboard, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="TOOLS.GOTO_CUSTOMDASHBOARD"></span></md-tooltip>\n                <md-icon md-font-icon="icon-forward"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveCustomDashboard()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (dashboardForm.$invalid)" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="customDashboard-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="TOOLS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.customDashboard.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.customDashboard.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.DASHBOARD">DASHBOARD</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="customDashboard-detail-form-container dashboard md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="CustomDashboardItemsController as vm_cd" ng-init="vm_cd.init(vm.customDashboard, vm.crudPermissions)" class="customDashboard-detail-form-container no-padding no-margin" layout="column">\n                            <div ng-if="vm_cd.customDashboard.widgets.length">\n                                <md-button class="md-fab md-mini md-accent" ng-click="vm_cd.createOrEditWidget()" ng-if="vm_cd.crudPermissions.canEdit" aria-label="add item">\n                                    <md-tooltip>{{ \'TOOLS.ADD_WIDGET\' | translate }}</md-tooltip>\n                                    <md-icon md-font-icon="icon-plus"></md-icon>\n                                </md-button>\n                                <md-content flex>\n                                    <ms-widget-engine config="vm_cd.customDashboard" on-edit="vm_cd.createOrEditWidget(widget)" on-delete="vm_cd.deleteWidget(widget)"></ms-widget-engine>\n                                </md-content>\n                            </div>\n                            <div ng-if="!vm_cd.customDashboard.widgets.length" layout="row" layout-align="center center" flex>\n                                <md-button class="width-130 height-130 md-accent md-raised" ng-click="vm_cd.createOrEditWidget()" aria-label="add item" layout="column">\n                                    <md-icon md-font-icon="icon-plus-circle" class="s50"></md-icon>\n                                    <span layout-wrap translate="TOOLS.ADD_WIDGET"></span>\n                                </md-button>\n                            </div>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/tools/views/customDashboards/partialViews/reports/treeReports.html",'<md-dialog class="report-selection-dialog" aria-label="Report Selection" flex="60">\n    <md-toolbar>\n        <div class="md-toolbar-tools">\n            <h2>Select Report</h2>\n            <span flex></span>\n            <md-button class="md-icon-button" ng-click="vm.closeReportDialog()">\n                <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n\n    <md-dialog-content>\n        <div class="content" md-background-bg layout="row" layout-align="start start">\n            <div layout="column" flex="30">\n                <md-card class="padding-10 scrollable" ms-scroll>\n                    <div js-tree="vm.treeConfig" tree-events-obj="vm.treeDefaultEvents" ng-model="vm.treeDefaultData" tree="vm.treeDefaultInstance"></div>\n                </md-card>\n                <md-card class="padding-10 scrollable" ms-scroll>\n                    <div js-tree="vm.treeConfig" tree-events-obj="vm.treeCustomEvents" ng-model="vm.treeCustomData" tree="vm.treeCustomInstance"></div>\n                </md-card>\n            </div>\n            <md-card flex="70">\n                <md-toolbar class="md-table-toolbar md-default">\n                    <div class="md-toolbar-tools">\n                        <span class="h2 secondary-text">{{vm.currentNode.text}}</span>\n                        <p ng-if="vm.currentPath">\n                            <span class="text-boxed">{{vm.currentPath}}</span>\n                        </p>\n                    </div>\n                </md-toolbar>\n                <md-table-container>\n                    <table md-table md-row-select ng-model="vm.selectedReport" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getReports">\n                            <tr md-row>\n                                <th md-column md-order-by="id" width="10px">{{ "ANALYTICS.ID" | translate }}</th>\n                                <th md-column md-order-by="name">{{ "ANALYTICS.NAME" | translate }}</th>\n                                <th md-column md-order-by="description">{{ "ANALYTICS.DESCRIPTION" | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ "ANALYTICS.CREATED_AT" | translate }}</th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.reports.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span tranlsate="ANALYTICS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="report" md-select-id="id" ng-repeat="report in vm.reports.rows">\n                                <td md-cell class="id">{{ report.id }}</td>\n                                <td md-cell class="name">{{ report.name }}</td>\n                                <td md-cell class="description">{{ report.description }}</td>\n                                <td md-cell class="createdAt">{{ report.createdAt | date: "medium" }}</td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{ \'ANALYTICS.PAGE\' | translate }}:\', rowsPerPage: \'{{ \'ANALYTICS.ROWSPERPAGE\' | translate }}:\', of: \'{{ \'ANALYTICS.OF\' | translate }}\'}" md-limit="vm.query.limit" md-limit-options="[10]" md-page="vm.query.page" md-total="{{ vm.reports.count }}" md-on-paginate="vm.getReports" md-page-select></md-table-pagination>\n            </md-card>\n        </div>\n    </md-dialog-content>\n    <md-dialog-actions layout="row">\n        <span flex></span>\n        <md-button class="md-raised" ng-click="vm.closeReportDialog()">CANCEL</md-button>\n        <md-button class="md-accent md-raised" ng-click="vm.selectReport()">CONFIRM</md-button>\n    </md-dialog-actions>\n</md-dialog>'),e.put("app/main/apps/tools/views/dispositions/create/dialog.html",'<md-dialog class="disposition-dialog" aria-label="New Disposition">\n    <form name="dispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.disposition.name" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="dispositionForm[\'name\'].$error" ng-show="dispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="TOOLS.ERRORS.NAME_MAX_LENGTH" translate-values=\'{max: 255}\'>Name must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newDisposition" ng-click="vm.saveDisposition()" class="send-button md-accent md-raised" ng-disabled="dispositionForm.$invalid || dispositionForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newDisposition" ng-click="vm.addNewDisposition()" class="send-button md-accent md-raised" ng-disabled="dispositionForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_DISPOSITION" translate-attr-aria-label="TOOLS.ADD_DISPOSITION">\n                    ADD DISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newDisposition" ng-click="vm.deleteDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/dispositions/dispositions.html",'<div id="dispositions" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.DISPOSITIONS">Dispositions</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedDispositions.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedDispositions =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-dispositions-count">\n                    <span>{{vm.selectedDispositions.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="DISPOSITIONS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllDispositions()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectDispositions()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedDispositions" csv-label="true" filename="dispositions.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedDispositions($event)" aria-label="delete selected" translate translate-attr-label="DISPOSITIONS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- DISPOSITION TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedDispositions" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getDispositions">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.dispositions.rows.length">\n                                <td md-cell colspan="3">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="disposition" md-select-id="id" ng-repeat="disposition in vm.dispositions.rows">\n                                <td md-cell ng-if="disposition.userpic"><img class="avatar" alt="{{disposition.name}}" ng-src="api/users/{{disposition.id}}/avatar" /></td>\n                                <td md-cell ng-if="!disposition.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{disposition.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditDisposition($event, disposition)" md-cell class="id ">{{disposition.id}}</td>\n                                <td ng-click="vm.createOrEditDisposition($event, disposition)" md-cell class="name ">{{disposition.name}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(disposition, $event    )" translate="TOOLS.EDIT_DISPOSITION">\n                                                    Edit Disposition\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(disposition, $event    )" translate="TOOLS.DELETE_DISPOSITION">\n                                                    Delete Disposition\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.dispositions.count}}" md-on-paginate="vm.getDispositions" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / DISPOSITION TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD DISPOSITION BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-disposition-button" ng-click="vm.createOrEditDisposition($event)" aria-label="add disposition" translate translate-attr-aria-label="TOOLS.ADD_DISPOSITION">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD DISPOSITION BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/intervals/create/dialog.html",'<md-dialog class="interval-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.interval.name" ng-required="true" autofocus>\n\n                <div ng-messages="intervalForm[\'name\'].$error" ng-show="intervalForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.interval.description">\n\n                <div ng-messages="intervalForm[\'description\'].$error" ng-show="intervalForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newInterval" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newInterval" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newInterval" ng-click="vm.deleteInterval($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/intervals/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input ng-model="vm.interval.name" type="text" name="name" placeholder="{{\'TOOLS.NAME\' | translate}}" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" md-autofocus required>\n                <div ng-messages="intervalForm.name.$error" ng-show="intervalForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/intervals/edit/intervals/dialog.html",'<md-dialog class="interval-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.interval.name" ng-required="true" autofocus>\n\n                <div ng-messages="intervalForm[\'name\'].$error" ng-show="intervalForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newInterval" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newInterval" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newInterval" ng-click="vm.deleteInterval($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/intervals/edit/view.html",'<div id="tools-interval" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-intervals-button md-icon-button" aria-label="Go to intervals" ng-click="vm.gotoIntervals()" translate translate-attr-aria-label="TOOLS.GO_TO_INTERVALS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="interval-image" hide-xs>\n                    <img ng-src="assets/images/business/intervals.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.interval.id}}\n                        <span ng-if="vm.interval.name">{{vm.interval.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="TOOLS.CREATED_AT"></span> <span>{{vm.interval.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveInterval()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (intervalsForm.$invalid)" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="interval-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="TOOLS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.interval.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.interval.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.INTERVALS">INTERVALS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="interval-detail-form-container intervals md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="IntervalIntervalsController as vm_dc" ng-init="vm_dc.init(vm.interval, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIntervalIntervals.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="TOOLS.INTERVALS">Intervals</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditIntervalInterval($event)" aria-label="add interval" translate translate-attr-label="TOOLS.ADD_INTERVAL">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIntervalIntervals.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedIntervalIntervals.length}} {{vm_dc.selectedIntervalIntervals.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedIntervalIntervals" csv-label="true" filename="intervals.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedIntervalIntervals($event)" aria-label="delete selected" translate translate-attr-label="INTERVALS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedIntervalIntervals" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIntervalIntervals">\n                                        <tr md-row>\n                                            <th md-column width="10px"></th>\n                                            <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                            <th md-column md-order-by="interval">{{ \'TOOLS.INTERVAL\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'TOOLS.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body ng-sortable="vm_dc.sortableTable">\n                                        <tr md-row md-select="interval" md-select-id="id" ng-repeat="interval in vm_dc.intervalIntervals.rows">\n                                            <td md-cell>\n                                                <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                            </td>\n                                            <td ng-click="vm_dc.createOrEditIntervalInterval($event, interval)" md-cell>{{interval.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditIntervalInterval($event, interval)" md-cell>{{interval.name}}</td>\n                                            <td ng-click="vm_dc.createOrEditIntervalInterval($event, interval)" md-cell>{{interval.interval}}</td>\n                                            <td ng-click="vm_dc.createOrEditIntervalInterval($event, interval)" md-cell>{{interval.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditIntervalInterval($event, interval)" translate="TOOLS.EDIT_INTERVAL">\n                                                                Edit Interval\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(interval, $event)" translate="TOOLS.DELETE_INTERVAL">\n                                                                Delete Interval\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.intervalIntervals.rows.length">\n                                            <td md-cell colspan="7">\n                                                <span class="text-boxed-ligth" translate="TOOLS.NO_INTERVALS_AVAILABLE">No intervals available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/tools/views/intervals/intervals.html",'<div id="intervals" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.INTERVALS">Intervals</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedIntervals.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedIntervals =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-intervals-count">\n                    <span>{{vm.selectedIntervals.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="INTERVALS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllIntervals()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectIntervals()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedIntervals" csv-label="true" filename="intervals.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedIntervals($event)" aria-label="delete selected" translate translate-attr-label="INTERVALS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- INTERVAL TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedIntervals" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getIntervals">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.intervals.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="interval" md-select-id="id" ng-repeat="interval in vm.intervals.rows">\n                                <td md-cell ng-if="interval.userpic"><img class="avatar" alt="{{interval.name}}" ng-src="api/users/{{interval.id}}/avatar" /></td>\n                                <td md-cell ng-if="!interval.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{interval.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(interval, ev) : vm.createOrEditInterval($event, interval)" md-cell class="id ">{{interval.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(interval, ev) : vm.createOrEditInterval($event, interval)" md-cell class="name ">{{interval.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(interval, ev) : vm.createOrEditInterval($event, interval)" md-cell class="description ">{{interval.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(interval, $event    )" translate="TOOLS.EDIT_INTERVAL">\n                                                    Edit Interval\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(interval, $event    )" translate="TOOLS.DELETE_INTERVAL">\n                                                    Delete Interval\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.intervals.count}}" md-on-paginate="vm.getIntervals" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / INTERVAL TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD INTERVAL BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-interval-button" ng-click="vm.createOrEditInterval($event)" aria-label="add interval" translate translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD INTERVAL BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/pauses/create/dialog.html",'<md-dialog class="pause-dialog" aria-label="New Pause">\n    <form name="pauseForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.pause.name" ng-required="true" autofocus>\n\n                <div ng-messages="pauseForm[\'name\'].$error" ng-show="pauseForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.pause.description">\n\n                <div ng-messages="pauseForm[\'description\'].$error" ng-show="pauseForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newPause" ng-click="vm.savePause()" class="send-button md-accent md-raised" ng-disabled="pauseForm.$invalid || pauseForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newPause" ng-click="vm.addNewPause()" class="send-button md-accent md-raised" ng-disabled="pauseForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_PAUSE" translate-attr-aria-label="TOOLS.ADD_PAUSE">\n                    ADD PAUSE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newPause" ng-click="vm.deletePause($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/pauses/pauses.html",'<div id="pauses" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.PAUSES">Pauses</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedPauses.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedPauses =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-pauses-count">\n                    <span>{{vm.selectedPauses.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="PAUSES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllPauses()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectPauses()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedPauses" csv-label="true" filename="pauses.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedPauses($event)" aria-label="delete selected" translate translate-attr-label="PAUSES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- PAUSE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedPauses" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getPauses">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.pauses.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="pause" md-select-id="id" ng-repeat="pause in vm.pauses.rows">\n                                <td md-cell ng-if="pause.userpic"><img class="avatar" alt="{{pause.name}}" ng-src="api/users/{{pause.id}}/avatar" /></td>\n                                <td md-cell ng-if="!pause.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{pause.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditPause($event, pause)" md-cell class="id ">{{pause.id}}</td>\n                                <td ng-click="vm.createOrEditPause($event, pause)" md-cell class="name ">{{pause.name}}</td>\n                                <td ng-click="vm.createOrEditPause($event, pause)" md-cell class="description ">{{pause.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(pause, $event    )" translate="TOOLS.EDIT_PAUSE">\n                                                    Edit Pause\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(pause, $event    )" translate="TOOLS.DELETE_PAUSE">\n                                                    Delete Pause\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.pauses.count}}" md-on-paginate="vm.getPauses" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / PAUSE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD PAUSE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-pause-button" ng-click="vm.createOrEditPause($event)" aria-label="add pause" translate translate-attr-aria-label="TOOLS.ADD_PAUSE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD PAUSE BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/schedules/create/dialog.html",'<md-dialog class="schedule-dialog" aria-label="New Schedule">\n    <form name="scheduleForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.schedule.name" ng-required="true" autofocus>\n\n                <div ng-messages="scheduleForm[\'name\'].$error" ng-show="scheduleForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.REPORT">Report</label>\n                <input type="search" name="report" ng-model="vm.schedule.report" ng-required="true" autocomplete="off" ng-click="vm.searchReport()">\n                <md-icon md-font-icon="icon-magnify" ng-click="vm.searchReport()" aria-label="Search Report"></md-icon>\n                <div ng-messages="scheduleForm[\'report\'].$error" ng-show="scheduleForm[\'report\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.REPORT_REQUIRED">Report field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.OUTPUT">Output</label>\n                <md-select name="output" ng-model="vm.schedule.output" required>\n                    <md-option ng-value="\'csv\'">CSV</md-option>\n                    <md-option ng-value="\'pdf\'">PDF</md-option>\n                    <md-option ng-value="\'xlsx\'">Excel</md-option>\n                </md-select>\n                <div ng-messages="scheduleForm[\'output\'].$error" ng-show="scheduleForm[\'output\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.OUTPUT_REQUIRED">Output field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.schedule.active" aria-label="Active"><span translate="TOOLS.ACTIVE">Active</span></md-switch>\n\n            </md-input-container>\n            <div class="md-block">\n                <label translate="TOOLS.VALIDITYSTART">ValidityStart</label>\n                <md-content layout="row" class="md-padding">\n                    <div flex class="md-block">\n                        <mdp-date-picker mdp-open-on-click required name="startAtDate" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" ng-model="vm.schedule.startAt" ng-init="vm.schedule.startAt = vm.getDateFromString(vm.schedule.startAt)">\n                            <div ng-messages="scheduleForm.dateRangeFrom.$error" ng-show="scheduleForm.dateRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="TOOLS.ERRORS.DATE_REQUIRED">Date is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="TOOLS.ERRORS.DATE_INVALID">Date is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-date-picker>\n                    </div>\n                    <div flex class="md-block">\n                        <mdp-time-picker mdp-open-on-click required name="startAtTime" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.schedule.startAt" ng-init="vm.schedule.startAt = vm.getDateFromString(vm.schedule.startAt)">\n                            <div ng-messages="scheduleForm.timeRangeFrom.$error" ng-show="scheduleForm.timeRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="TOOLS.ERRORS.TIME_REQUIRED">Time is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="TOOLS.ERRORS.TIME_INVALID">Time is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-time-picker>\n                    </div>\n                </md-content>\n            </div>\n            <div class="md-block">\n                <label translate="TOOLS.VALIDITYEND">ValidityEnd</label>\n                <md-content layout="row" class="md-padding">\n                    <div flex class="md-block">\n                        <mdp-date-picker mdp-open-on-click required name="endAtDate" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" ng-model="vm.schedule.endAt" ng-init="vm.schedule.endAt = vm.getDateFromString(vm.schedule.endAt)">\n                            <div ng-messages="scheduleForm.dateRangeFrom.$error" ng-show="scheduleForm.dateRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="TOOLS.ERRORS.DATE_REQUIRED">Date is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="TOOLS.ERRORS.DATE_INVALID">Date is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-date-picker>\n                    </div>\n                    <div flex class="md-block">\n                        <mdp-time-picker mdp-open-on-click required name="endAtTime" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.schedule.endAt" ng-init="vm.schedule.endAt = vm.getDateFromString(vm.schedule.endAt)">\n                            <div ng-messages="scheduleForm.timeRangeFrom.$error" ng-show="scheduleForm.timeRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="TOOLS.ERRORS.TIME_REQUIRED">Time is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="TOOLS.ERRORS.TIME_INVALID">Time is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-time-picker>\n                    </div>\n                </md-content>\n            </div>\n            <div flex class="md-block">\n                <label> {{ \'TOOLS.CRON\' | translate }} ({{vm.schedule.cron}})</label>\n                <cron-selection name="cron" ng-model="vm.schedule.cron" template="assets/angular-cron-jobs/template.html" required></cron-selection>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.LAST">Last</label>\n                <input type="number" name="subtractNumber" ng-model="vm.schedule.subtractNumber" ng-required="true">\n\n                <div ng-messages="scheduleForm[\'subtractNumber\'].$error" ng-show="scheduleForm[\'subtractNumber\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.LAST_REQUIRED">Last field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.LASTUNIT">LastUnit</label>\n                <md-select name="subtractUnit" ng-model="vm.schedule.subtractUnit" required>\n                    <md-option ng-value="\'minutes\'">Minutes</md-option>\n                    <md-option ng-value="\'hours\'">Hours</md-option>\n                    <md-option ng-value="\'days\'">Days</md-option>\n                    <md-option ng-value="\'weeks\'">Weeks</md-option>\n                    <md-option ng-value="\'months\'">Months</md-option>\n                    <md-option ng-value="\'quarters\'">Quarters</md-option>\n                    <md-option ng-value="\'years\'">Years</md-option>\n                </md-select>\n                <div ng-messages="scheduleForm[\'subtractUnit\'].$error" ng-show="scheduleForm[\'subtractUnit\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.LASTUNIT_REQUIRED">LastUnit field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.schedule.sendMail" aria-label="SendMail"><span translate="TOOLS.SENDMAIL">SendMail</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.schedule.sendMail" class="md-block">\n                <label translate="TOOLS.MAILACCOUNT">MailAccount</label>\n                <md-select name="MailAccountId" ng-model="vm.schedule.MailAccountId" required>\n                    <md-option ng-value="MailAccountId.id" ng-repeat="MailAccountId in vm.mailAccounts" ng-disabled="MailAccountId.canSelect === false">{{ MailAccountId.name }}</md-option>\n                </md-select>\n                <div ng-messages="scheduleForm[\'MailAccountId\'].$error" ng-show="scheduleForm[\'MailAccountId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.MAILACCOUNT_REQUIRED">MailAccount field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.schedule.sendMail" class="md-block">\n                <label translate="TOOLS.EMAILADDRESS">EmailAddress</label>\n                <input type="text" name="email" ng-model="vm.schedule.email" ng-required="true">\n\n                <div class="hint"><span translate="TOOLS.HELP.EMAILADDRESS"></span></div>\n                <div ng-messages="scheduleForm[\'email\'].$error" ng-show="scheduleForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.EMAILADDRESS_REQUIRED">EmailAddress field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.schedule.sendMail" class="md-block">\n                <label translate="TOOLS.EMAILCCADDRESS">EmailCcAddress</label>\n                <input type="text" name="cc" ng-model="vm.schedule.cc">\n\n                <div class="hint"><span translate="TOOLS.HELP.EMAILCCADDRESS"></span></div>\n                <div ng-messages="scheduleForm[\'cc\'].$error" ng-show="scheduleForm[\'cc\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.EMAILCCADDRESS_REQUIRED">EmailCcAddress field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.schedule.sendMail" class="md-block">\n                <label translate="TOOLS.EMAILBCCADDRESS">EmailBccAddress</label>\n                <input type="text" name="bcc" ng-model="vm.schedule.bcc">\n\n                <div class="hint"><span translate="TOOLS.HELP.EMAILBCCADDRESS"></span></div>\n                <div ng-messages="scheduleForm[\'bcc\'].$error" ng-show="scheduleForm[\'bcc\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.EMAILBCCADDRESS_REQUIRED">EmailBccAddress field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.schedule.sendMail" class="md-block">\n                <md-switch ng-model="vm.schedule.sendIfEmpty" aria-label="SendIfEmpty"><span translate="TOOLS.SENDIFEMPTY">SendIfEmpty</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="" name="description" ng-model="vm.schedule.description">\n\n                <div ng-messages="scheduleForm[\'description\'].$error" ng-show="scheduleForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSchedule" ng-click="vm.saveSchedule()" class="send-button md-accent md-raised" ng-disabled="scheduleForm.$invalid || scheduleForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSchedule" ng-click="vm.addNewSchedule()" class="send-button md-accent md-raised" ng-disabled="scheduleForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_SCHEDULE" translate-attr-aria-label="TOOLS.ADD_SCHEDULE">\n                    ADD SCHEDULE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSchedule" ng-click="vm.deleteSchedule($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/schedules/partialViews/reports/treeReports.html",'<md-dialog class="report-selection-dialog" aria-label="Report Selection" flex="60">\n    <md-toolbar>\n        <div class="md-toolbar-tools">\n            <h2>Select Report</h2>\n            <span flex></span>\n            <md-button class="md-icon-button" ng-click="vm.closeReportDialog()">\n                <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n\n    <md-dialog-content>\n        <div class="content" md-background-bg layout="row" layout-align="start start">\n            <div layout="column" flex="30">\n                <md-card class="padding-10 scrollable" ms-scroll>\n                    <div js-tree="vm.treeConfig" tree-events-obj="vm.treeDefaultEvents" ng-model="vm.treeDefaultData" tree="vm.treeDefaultInstance"></div>\n                </md-card>\n                <md-card class="padding-10 scrollable" ms-scroll>\n                    <div js-tree="vm.treeConfig" tree-events-obj="vm.treeCustomEvents" ng-model="vm.treeCustomData" tree="vm.treeCustomInstance"></div>\n                </md-card>\n            </div>\n            <md-card flex="70">\n                <md-toolbar class="md-table-toolbar md-default">\n                    <div class="md-toolbar-tools">\n                        <span class="h2 secondary-text">{{vm.currentNode.text}}</span>\n                        <p ng-if="vm.currentPath">\n                            <span class="text-boxed">{{vm.currentPath}}</span>\n                        </p>\n                    </div>\n                </md-toolbar>\n                <md-table-container>\n                    <table md-table md-row-select ng-model="vm.selectedReport" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getReports">\n                            <tr md-row>\n                                <th md-column md-order-by="id" width="10px">{{ "ANALYTICS.ID" | translate }}</th>\n                                <th md-column md-order-by="name">{{ "ANALYTICS.NAME" | translate }}</th>\n                                <th md-column md-order-by="description">{{ "ANALYTICS.DESCRIPTION" | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ "ANALYTICS.CREATED_AT" | translate }}</th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.reports.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span tranlsate="ANALYTICS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="report" md-select-id="id" ng-repeat="report in vm.reports.rows">\n                                <td md-cell class="id">{{ report.id }}</td>\n                                <td md-cell class="name">{{ report.name }}</td>\n                                <td md-cell class="description">{{ report.description }}</td>\n                                <td md-cell class="createdAt">{{ report.createdAt | date: "medium" }}</td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{ \'ANALYTICS.PAGE\' | translate }}:\', rowsPerPage: \'{{ \'ANALYTICS.ROWSPERPAGE\' | translate }}:\', of: \'{{ \'ANALYTICS.OF\' | translate }}\'}" md-limit="vm.query.limit" md-limit-options="[10]" md-page="vm.query.page" md-total="{{ vm.reports.count }}" md-on-paginate="vm.getReports" md-page-select></md-table-pagination>\n            </md-card>\n        </div>\n    </md-dialog-content>\n    <md-dialog-actions layout="row">\n        <span flex></span>\n        <md-button class="md-raised" ng-click="vm.closeReportDialog()">CANCEL</md-button>\n        <md-button class="md-accent md-raised" ng-click="vm.selectReport()">CONFIRM</md-button>\n    </md-dialog-actions>\n</md-dialog>'),e.put("app/main/apps/tools/views/schedules/schedules.html",'<div id="schedules" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.SCHEDULER">Scheduler</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedScheduler.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedScheduler =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-schedules-count">\n                    <span>{{vm.selectedScheduler.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SCHEDULER.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllScheduler()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectScheduler()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedScheduler" csv-label="true" filename="schedules.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedScheduler($event)" aria-label="delete selected" translate translate-attr-label="SCHEDULER.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SCHEDULE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedScheduler" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getScheduler">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="active">{{ \'TOOLS.ACTIVE\' | translate }}</th>\n                                <th md-column md-order-by="startAt">{{ \'TOOLS.VALIDITYSTART\' | translate }}</th>\n                                <th md-column md-order-by="endAt">{{ \'TOOLS.VALIDITYEND\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.schedules.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="schedule" md-select-id="id" ng-repeat="schedule in vm.schedules.rows">\n                                <td md-cell ng-if="schedule.userpic"><img class="avatar" alt="{{schedule.name}}" ng-src="api/users/{{schedule.id}}/avatar" /></td>\n                                <td md-cell ng-if="!schedule.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{schedule.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditSchedule($event, schedule)" md-cell class="id ">{{schedule.id}}</td>\n                                <td ng-click="vm.createOrEditSchedule($event, schedule)" md-cell class="name ">{{schedule.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(schedule, ev) : vm.createOrEditSchedule($event, schedule)" md-cell class="active ">\n                                    <md-icon md-colors="{color: {{schedule.active ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{schedule.active ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.createOrEditSchedule($event, schedule)" md-cell class="startAt ">{{schedule.startAt | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditSchedule($event, schedule)" md-cell class="endAt ">{{schedule.endAt | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditSchedule($event, schedule)" md-cell class="description ">{{schedule.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(schedule, $event    )" translate="TOOLS.EDIT_SCHEDULE">\n                                                    Edit Schedule\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.runconfirm(schedule, $event    )" translate="TOOLS.RUN_SCHEDULE">\n                                                    Run Schedule\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(schedule, $event    )" translate="TOOLS.DELETE_SCHEDULE">\n                                                    Delete Schedule\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.schedules.count}}" md-on-paginate="vm.getScheduler" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SCHEDULE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD SCHEDULE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-schedule-button" ng-click="vm.createOrEditSchedule($event)" aria-label="add schedule" translate translate-attr-aria-label="TOOLS.ADD_SCHEDULE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD SCHEDULE BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/sounds/create/dialog.html",'<md-dialog class="sound-dialog" aria-label="New Sound">\n    <form name="soundForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.sound.name" ng-required="true" autofocus>\n\n                <div ng-messages="soundForm[\'name\'].$error" ng-show="soundForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.sound.description">\n\n                <div ng-messages="soundForm[\'description\'].$error" ng-show="soundForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSound" ng-click="vm.saveSound()" class="send-button md-accent md-raised" ng-disabled="soundForm.$invalid || soundForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSound" ng-click="vm.addNewSound()" class="send-button md-accent md-raised" ng-disabled="soundForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_SOUND" translate-attr-aria-label="TOOLS.ADD_SOUND">\n                    ADD SOUND\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSound" ng-click="vm.deleteSound($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/sounds/sounds.html",'<div id="sounds" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.SOUNDS">Sounds</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedSounds.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedSounds =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-sounds-count">\n                    <span>{{vm.selectedSounds.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SOUNDS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllSounds()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectSounds()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedSounds" csv-label="true" filename="sounds.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedSounds($event)" aria-label="delete selected" translate translate-attr-label="SOUNDS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SOUND TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedSounds" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSounds">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="audio">{{ \'TOOLS.AUDIO\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.sounds.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="sound" md-select-id="id" ng-repeat="sound in vm.sounds.rows">\n                                <td md-cell ng-if="sound.userpic"><img class="avatar" alt="{{sound.name}}" ng-src="api/users/{{sound.id}}/avatar" /></td>\n                                <td md-cell ng-if="!sound.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{sound.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditSound($event, sound)" md-cell class="id ">{{sound.id}}</td>\n                                <td ng-click="vm.createOrEditSound($event, sound)" md-cell class="name ">{{sound.name}}</td>\n\n                                <td md-cell class="audio ">\n                                    \x3c!-- audio recording directive --\x3e\n                                    <ms-recording id="sound.id" model="\'sound\'"></ms-recording>\n                                    \x3c!-- / audio recording directive --\x3e\n                                </td>\n                                <td ng-click="vm.createOrEditSound($event, sound)" md-cell class="description ">{{sound.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(sound, $event    )" translate="TOOLS.EDIT_SOUND">\n                                                    Edit Sound\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.downloadfile2(sound, $event  , \'sounds\'   )" translate="TOOLS.DOWNLOAD_SOUND">\n                                                    Download Sound\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(sound, $event    )" translate="TOOLS.DELETE_SOUND">\n                                                    Delete Sound\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.sounds.count}}" md-on-paginate="vm.getSounds" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SOUND TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- UPLOAD SOUND BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="upload-sound-button" ng-click="vm.uploadSound($event)" aria-label="upload sound" translate translate-attr-aria-label="TOOLS.UPLOAD_SOUND">\n        <md-icon md-font-icon="icon-upload"></md-icon>\n    </md-button>\n    \x3c!-- / UPLOAD SOUND BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/sounds/upload/dialog.html",'<md-dialog class="upload-dialog" aria-label="Upload ">\n    <form name="uploadForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div id="sound-uploader" ng-hide="vm.uploadState == \'uploading\'" flow-init="vm.ngFlowOptions" flow-name="vm.ngFlow.flow" flow-files-submitted="vm.upload()" flow-file-added="vm.fileAdded($file)" flow-file-success="vm.fileSuccess($file, $message)" flow-error="vm.uploadError($file, $message)" flow-complete="vm.uploadComplete()" flow-drop flow-drag-enter="vm.dropping=true" flow-drag-leave="vm.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                <div class="drop-text hint-text" layout="row" layout-align="center center">\n                    <span translate="TOOLS.DROP_TO_UPLOAD">Drop to upload</span>\n                </div>\n\n                <div class="upload-button" layout="column" layout-align="center center">\n                    <md-button class="md-accent md-raised" flow-btn>\n                        Upload\n                    </md-button>\n                    <span class="secondary-text mt-8" translate="TOOLS.DROP_TO_UPLOAD_MESSAGE">You can also drop your file here to upload.</span>\n                </div>\n            </div>\n\n            <div layout="column" layout-align="space-between center" ng-show="vm.uploadState == \'uploading\'">\n                <div>\n                    <span translate="TOOLS.UPLOADING">Uploading</span>\n                    <span>{{vm.sound.file.name}}</span>\n                </div>\n                <md-progress-linear md-mode="indeterminate"></md-progress-linear>\n            </div>\n\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center"></div>\n            <div layout="row">\n                <md-button ng-click="vm.closeDialog()" ng-hide="vm.uploadState == \'uploading\'" class="md-accent md-raised" aria-label="FINISH" translate="TOOLS.FINISH" translate-attr-aria-label="TOOLS.FINISH">\n                    FINISH\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/tags/create/dialog.html",'<md-dialog class="tag-dialog" aria-label="New Tag">\n    <form name="tagForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.tag.name" ng-required="true" autofocus>\n\n                <div ng-messages="tagForm[\'name\'].$error" ng-show="tagForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.tag.description">\n\n                <div ng-messages="tagForm[\'description\'].$error" ng-show="tagForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div flex md-color-picker ng-model="vm.tag.color" label="{{\'TOOLS.COLOR\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newTag" ng-click="vm.saveTag()" class="send-button md-accent md-raised" ng-disabled="tagForm.$invalid || tagForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newTag" ng-click="vm.addNewTag()" class="send-button md-accent md-raised" ng-disabled="tagForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_TAG" translate-attr-aria-label="TOOLS.ADD_TAG">\n                    ADD TAG\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newTag" ng-click="vm.deleteTag($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/tags/tags.html",'<div id="tags" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.TAGS">Tags</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedTags.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedTags =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-tags-count">\n                    <span>{{vm.selectedTags.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="TAGS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllTags()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectTags()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedTags" csv-label="true" filename="tags.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedTags($event)" aria-label="delete selected" translate translate-attr-label="TAGS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- TAG TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedTags" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTags">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column md-order-by="color">{{ \'TOOLS.COLOR\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.tags.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="tag" md-select-id="id" ng-repeat="tag in vm.tags.rows">\n                                <td md-cell ng-if="tag.userpic"><img class="avatar" alt="{{tag.name}}" ng-src="api/users/{{tag.id}}/avatar" /></td>\n                                <td md-cell ng-if="!tag.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{tag.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditTag($event, tag)" md-cell class="id ">{{tag.id}}</td>\n                                <td ng-click="vm.createOrEditTag($event, tag)" md-cell class="name ">{{tag.name}}</td>\n                                <td ng-click="vm.createOrEditTag($event, tag)" md-cell class="description ">{{tag.description}}</td>\n                                <td ng-click="vm.createOrEditTag($event, tag)" md-cell class="color ">{{tag.color}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(tag, $event    )" translate="TOOLS.EDIT_TAG">\n                                                    Edit Tag\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(tag, $event    )" translate="TOOLS.DELETE_TAG">\n                                                    Delete Tag\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.tags.count}}" md-on-paginate="vm.getTags" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / TAG TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD TAG BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-tag-button" ng-click="vm.createOrEditTag($event)" aria-label="add tag" translate translate-attr-aria-label="TOOLS.ADD_TAG">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD TAG BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/templates/create/dialog.html",'<md-dialog class="template-dialog" aria-label="New Template">\n    <form name="templateForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.template.name" ng-required="true" autofocus>\n\n                <div ng-messages="templateForm[\'name\'].$error" ng-show="templateForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="md-block">\n                <label class="md-caption grey-fg" translate="TOOLS.CONTENT">Content</label>\n                <textarea aria-label="Content html" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.template.html"></textarea>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.template.description">\n\n                <div ng-messages="templateForm[\'description\'].$error" ng-show="templateForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newTemplate" ng-click="vm.saveTemplate()" class="send-button md-accent md-raised" ng-disabled="templateForm.$invalid || templateForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newTemplate" ng-click="vm.addNewTemplate()" class="send-button md-accent md-raised" ng-disabled="templateForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_TEMPLATE" translate-attr-aria-label="TOOLS.ADD_TEMPLATE">\n                    ADD TEMPLATE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newTemplate" ng-click="vm.deleteTemplate($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/templates/templates.html",'<div id="templates" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.TEMPLATES">Templates</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedTemplates.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedTemplates =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-templates-count">\n                    <span>{{vm.selectedTemplates.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="TEMPLATES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllTemplates()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectTemplates()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedTemplates" csv-label="true" filename="templates.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedTemplates($event)" aria-label="delete selected" translate translate-attr-label="TEMPLATES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- TEMPLATE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedTemplates" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTemplates">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.templates.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="template" md-select-id="id" ng-repeat="template in vm.templates.rows">\n                                <td md-cell ng-if="template.userpic"><img class="avatar" alt="{{template.name}}" ng-src="api/users/{{template.id}}/avatar" /></td>\n                                <td md-cell ng-if="!template.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{template.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditTemplate($event, template)" md-cell class="id ">{{template.id}}</td>\n                                <td ng-click="vm.createOrEditTemplate($event, template)" md-cell class="name ">{{template.name}}</td>\n                                <td ng-click="vm.createOrEditTemplate($event, template)" md-cell class="description ">{{template.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(template, $event    )" translate="TOOLS.EDIT_TEMPLATE">\n                                                    Edit Template\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(template, $event    )" translate="TOOLS.DELETE_TEMPLATE">\n                                                    Delete Template\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.templates.count}}" md-on-paginate="vm.getTemplates" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / TEMPLATE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD TEMPLATE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-template-button" ng-click="vm.createOrEditTemplate($event)" aria-label="add template" translate translate-attr-aria-label="TOOLS.ADD_TEMPLATE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD TEMPLATE BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/triggers/create/dialog.html",'<md-dialog class="trigger-dialog" aria-label="New Trigger">\n    <form name="triggerForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.trigger.name" ng-required="true" autofocus>\n\n                <div ng-messages="triggerForm[\'name\'].$error" ng-show="triggerForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.trigger.channel" required ng-disabled="!vm.newTrigger">\n\n                    <md-option ng-value="\'voice\'"> {{ \'TOOLS.VOICE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'openchannel\'" ng-if="vm.license.openchannel"> {{ \'TOOLS.OPENCHANNEL\' | translate }} </md-option>\n\n                    <md-option ng-value="\'chat\'" ng-if="vm.license.chat"> {{ \'TOOLS.CHAT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'mail\'" ng-if="vm.license.mail"> {{ \'TOOLS.MAIL\' | translate }} </md-option>\n\n                    <md-option ng-value="\'sms\'" ng-if="vm.license.messaging"> {{ \'TOOLS.SMS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'fax\'" ng-if="vm.license.fax"> {{ \'TOOLS.FAX\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="triggerForm[\'channel\'].$error" ng-show="triggerForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.trigger.status" aria-label="Status"><span translate="TOOLS.STATUS">Status</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.trigger.description">\n\n                <div ng-messages="triggerForm[\'description\'].$error" ng-show="triggerForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newTrigger" ng-click="vm.saveTrigger()" class="send-button md-accent md-raised" ng-disabled="triggerForm.$invalid || triggerForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newTrigger" ng-click="vm.addNewTrigger()" class="send-button md-accent md-raised" ng-disabled="triggerForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_TRIGGER" translate-attr-aria-label="TOOLS.ADD_TRIGGER">\n                    ADD TRIGGER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newTrigger" ng-click="vm.deleteTrigger($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/triggers/edit/actions/dialog.html",'<md-dialog class="action-dialog" aria-label="New Action">\n    <form name="actionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.ACTION">Action</label>\n                <md-select name="action" ng-model="vm.action.action" ng-init="vm.onActionInit()" autofocus required ng-disabled="!vm.newAction">\n\n                    <md-option ng-value="\'contactManager\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.CONTACT_MANAGER\' | translate }} </md-option>\n\n                    <md-option ng-value="\'integration\'" ng-if="vm.trigger.channel == \'voice\' && ((vm.newAction && vm.hasModulePermissions.Integrations) || !vm.newAction)"> {{ \'TOOLS.INTEGRATIONS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'motionbar\'"> {{ \'TOOLS.MOTION_BAR\' | translate }} </md-option>\n\n                    <md-option ng-value="\'jscripty\'"> {{ \'TOOLS.JSCRIPTY\' | translate }} </md-option>\n\n                    <md-option ng-value="\'urlForward\'"> {{ \'TOOLS.URL_FORWARD\' | translate }} </md-option>\n\n                    <md-option ng-value="\'browser\'"> {{ \'TOOLS.BROWSER\' | translate }} </md-option>\n\n                    <md-option ng-value="\'bot\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.BOT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'script\'"> {{ \'TOOLS.SCRIPT\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'action\'].$error" ng-show="actionForm[\'action\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACTION_REQUIRED">Action field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'jscripty\'" class="md-block">\n                <label translate="TOOLS.PROJECT">Project</label>\n                <md-select name="data1" ng-model="vm.action.data1" required>\n                    <md-option ng-value="\'\'+data1.id" ng-repeat="data1 in vm.projects" ng-disabled="data1.canSelect === false">{{ data1.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.PROJECT_REQUIRED">Project field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'browser\'" class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select name="data1" ng-model="vm.action.data1" required>\n                    <md-option ng-value="\'0\'">Popup</md-option>\n                    <md-option ng-value="\'1\'">CTI URL</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'contactManager\'" class="md-block">\n                <label translate="TOOLS.LIST">List</label>\n                <md-select name="data1" ng-model="vm.action.data1" required>\n                    <md-option ng-value="\'\'+data1.id" ng-repeat="data1 in vm.lists" ng-disabled="data1.canSelect === false">{{ data1.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'contactManager\'" class="md-block">\n                <label translate="TOOLS.AUTOCREATECONTACT">AutoCreateContact</label>\n                <md-select name="data2" ng-model="vm.action.data2" required>\n\n                    <md-option ng-value="\'1\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                    <md-option ng-value="\'0\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.AUTOCREATECONTACT_REQUIRED">AutoCreateContact field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'urlForward\'" class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select name="data1" ng-model="vm.action.data1" required>\n                    <md-option ng-value="\'GET\'">GET</md-option>\n                    <md-option ng-value="\'POST\'">POST</md-option>\n                    <md-option ng-value="\'PUT\'">PUT</md-option>\n                    <md-option ng-value="\'DELETE\'">DELETE</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'urlForward\'" class="md-block">\n                <label translate="TOOLS.URL">Url</label>\n                <input type="url" name="data2" ng-model="vm.action.data2" ng-required="true">\n\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="TOOLS.ERRORS.URL_MUST_VALID_URL">Url must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'urlForward\'" class="md-block">\n                <label translate="TOOLS.HEADERS">Headers</label>\n                <textarea name="data6" ng-model="vm.action.data6"></textarea>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'urlForward\' && (vm.action.data1 == \'POST\' || vm.action.data1 == \'PUT\')" class="md-block">\n                <label translate="TOOLS.BODY">Body</label>\n                <textarea name="data7" ng-model="vm.action.data7"></textarea>\n                <div class="hint"><span translate="TOOLS.HELP.BODY"></span></div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'script\'" class="md-block">\n                <label translate="TOOLS.SCRIPT_TYPE">Script_Type</label>\n                <input type="input" name="data2" ng-model="vm.action.data2">\n\n                <div class="hint"><span translate="TOOLS.HELP.SCRIPT_TYPE"></span></div>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.SCRIPT_TYPE_REQUIRED">Script_Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'script\'" class="md-block">\n                <label translate="TOOLS.SCRIPT_INFO">Script_Info</label>\n                <input type="input" name="data1" ng-model="vm.action.data1">\n\n                <div class="hint"><span translate="TOOLS.HELP.SCRIPT_INFO"></span></div>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.SCRIPT_INFO_REQUIRED">Script_Info field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'script\'" class="md-block">\n                <label translate="TOOLS.SCRIPT">Script</label>\n                <textarea name="data3" ng-model="vm.action.data3" required></textarea>\n                <div class="hint"><span translate="TOOLS.HELP.SCRIPT"></span></div>\n\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.SCRIPT_REQUIRED">Script field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\'" class="md-block">\n                <label translate="TOOLS.INTEGRATION">Integration</label>\n                <md-select name="data1" ng-model="vm.action.data1" ng-init="vm.onIntegrationInit()" required>\n                    <md-option ng-value="\'zendesk\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1301]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1301])">Zendesk</md-option>\n                    <md-option ng-value="\'salesforce\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1302]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1302])">Salesforce</md-option>\n                    <md-option ng-value="\'sugarcrm\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1305]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1305])">SugarCRM</md-option>\n                    <md-option ng-value="\'freshdesk\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1303]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1303])">Freshdesk</md-option>\n                    <md-option ng-value="\'desk\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1306]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1306])">Desk</md-option>\n                    <md-option ng-value="\'zoho\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1307]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1307])">Zoho</md-option>\n                    <md-option ng-value="\'vtiger\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1308]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1308])">vTiger</md-option>\n                    <md-option ng-value="\'dynamics365\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1309]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1309])">Dynamics365</md-option>\n                    <md-option ng-value="\'servicenow\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1310]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1310])">ServiceNow</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.INTEGRATION_REQUIRED">Integration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'zendesk\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1301])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.zendeskAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'desk\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1306])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.deskAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'zoho\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1307])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.zohoAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'salesforce\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1302])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.salesforceAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'sugarcrm\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1305])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.sugarcrmAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'freshdesk\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1303])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.freshdeskAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'vtiger\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1308])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.vtigerAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'dynamics365\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1309])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.dynamics365Accounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'servicenow\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1310])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.servicenowAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'zendesk\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1301])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.zendeskConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'desk\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1306])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.deskConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'zoho\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1307])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.zohoConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'salesforce\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1302])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.salesforceConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'sugarcrm\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1305])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.sugarcrmConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'freshdesk\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1303])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.freshdeskConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'vtiger\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1308])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.vtigerConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'dynamics365\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1309])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.dynamics365Configurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'servicenow\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1310])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.servicenowConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'motionbar\'" class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select name="data1" ng-model="vm.action.data1" required>\n                    <md-option ng-value="\'0\'">Popup</md-option>\n                    <md-option ng-value="\'1\'">CTI URL</md-option>\n                    <md-option ng-value="\'2\'">Windows App</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'motionbar\' && vm.action.data1 == \'1\'" class="md-block">\n                <label translate="TOOLS.URL">Url</label>\n                <input type="url" name="data2" ng-model="vm.action.data2" ng-required="true">\n\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="TOOLS.ERRORS.URL_MUST_VALID_URL">Url must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'motionbar\' && vm.action.data1 == \'2\'" class="md-block">\n                <label translate="TOOLS.APPLICATION">Application</label>\n                <input type="text" name="data2" ng-model="vm.action.data2" ng-required="true">\n\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.APPLICATION_REQUIRED">Application field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'motionbar\' && vm.action.data1 == \'2\'" class="md-block">\n                <label translate="TOOLS.ARGUMENTS">Arguments</label>\n                <input type="text" name="data3" ng-model="vm.action.data3">\n\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ARGUMENTS_REQUIRED">Arguments field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'motionbar\' && vm.action.data1 == \'0\'" class="md-block">\n                <label translate="TOOLS.TEMPLATE">Template</label>\n                <md-select name="data2" ng-model="vm.action.data2" required>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.templates" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TEMPLATE_REQUIRED">Template field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'browser\' && vm.action.data1 == \'0\'" class="md-block">\n                <label translate="TOOLS.TEMPLATE">Template</label>\n                <md-select name="data2" ng-model="vm.action.data2" required>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.templates" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TEMPLATE_REQUIRED">Template field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'browser\' && vm.action.data1 == \'1\'" class="md-block">\n                <label translate="TOOLS.URL">Url</label>\n                <input type="url" name="data2" ng-model="vm.action.data2" ng-required="true">\n\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="TOOLS.ERRORS.URL_MUST_VALID_URL">Url must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="(vm.action.action == \'motionbar\' || vm.action.action == \'browser\') && vm.action.data1 == \'1\'" class="md-block">\n                <label translate="TOOLS.EVENTVARIABLES">EventVariables</label>\n                <md-select name="data3" ng-model="vm.action.data3" required>\n\n                    <md-option ng-value="\'1\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                    <md-option ng-value="\'0\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                </md-select>\n                <div class="hint"><span translate="TOOLS.HELP.EVENTVARIABLES"></span></div>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.EVENTVARIABLES_REQUIRED">EventVariables field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'browser\' && vm.action.data1 == \'1\'" class="md-block">\n                <label translate="TOOLS.LOCATION">Location</label>\n                <md-select name="data4" ng-model="vm.action.data4" required>\n\n                    <md-option ng-value="\'0\'"> {{ \'TOOLS.NEW_TAB\' | translate }} </md-option>\n\n                    <md-option ng-value="\'1\'"> {{ \'TOOLS.NEW_WINDOW\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data4\'].$error" ng-show="actionForm[\'data4\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.LOCATION_REQUIRED">Location field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'browser\' && vm.action.data4 == \'1\'" class="md-block">\n                <label translate="TOOLS.WINDOWWIDTH">WindowWidth</label>\n                <input type="text" name="data5" ng-model="vm.action.data5">\n\n                <div ng-messages="actionForm[\'data5\'].$error" ng-show="actionForm[\'data5\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.WINDOWWIDTH_REQUIRED">WindowWidth field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'browser\' && vm.action.data4 == \'1\'" class="md-block">\n                <label translate="TOOLS.WINDOWHEIGHT">WindowHeight</label>\n                <input type="text" name="data6" ng-model="vm.action.data6">\n\n                <div ng-messages="actionForm[\'data6\'].$error" ng-show="actionForm[\'data6\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.WINDOWHEIGHT_REQUIRED">WindowHeight field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newAction" ng-click="vm.saveAction()" class="send-button md-accent md-raised" ng-disabled="actionForm.$invalid || actionForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newAction" ng-click="vm.addNewAction()" class="send-button md-accent md-raised" ng-disabled="actionForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_ACTION" translate-attr-aria-label="TOOLS.ADD_ACTION">\n                    ADD ACTION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newAction" ng-click="vm.deleteAction($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/triggers/edit/allconditions/dialog.html",'<md-dialog class="allCondition-dialog" aria-label="New AllCondition">\n    <form name="allConditionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.FIELD">Field</label>\n                <md-select name="field" ng-model="vm.allCondition.field" autofocus required>\n\n                    <md-option ng-value="\'queue\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'lastevent\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.CALL_STATUS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'routeId\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.OUTBOUNDROUTE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'agent\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.AGENT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'account\'" ng-if="vm.trigger.channel != \'voice\'"> {{ \'TOOLS.ACCOUNT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'interaction\'" ng-if="vm.trigger.channel != \'voice\'"> {{ \'TOOLS.INTERACTION\' | translate }} </md-option>\n\n                    <md-option ng-value="\'message\'" ng-if="vm.trigger.channel != \'voice\'"> {{ \'TOOLS.MESSAGE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'field\'].$error" ng-show="allConditionForm[\'field\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.FIELD_REQUIRED">Field field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.OPERATOR">Operator</label>\n                <md-select name="operator" ng-model="vm.allCondition.operator" required>\n\n                    <md-option ng-value="\'equals\'"> {{ \'TOOLS.EQUALS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'not_equals\'"> {{ \'TOOLS.NOT_EQUALS\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'operator\'].$error" ng-show="allConditionForm[\'operator\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.OPERATOR_REQUIRED">Operator field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'account\' && vm.trigger.channel == \'chat\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.chatAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'account\' && vm.trigger.channel == \'mail\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.mailAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'account\' && vm.trigger.channel == \'sms\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.smsAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'account\' && vm.trigger.channel == \'fax\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.faxAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'account\' && vm.trigger.channel == \'openchannel\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.openchannelAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'queue\' && vm.trigger.channel == \'voice\'" class="md-block">\n                <label translate="TOOLS.QUEUE">Queue</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.name" ng-repeat="value in vm.queues" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'routeId\' && vm.trigger.channel == \'voice\'" class="md-block">\n                <label translate="TOOLS.OUTBOUNDROUTE">OutboundRoute</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.outboundRoutes" ng-disabled="value.canSelect === false">{{ value.exten }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.OUTBOUNDROUTE_REQUIRED">OutboundRoute field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'agent\' && vm.trigger.channel == \'voice\'" class="md-block">\n                <label translate="TOOLS.AGENT">Agent</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.name" ng-repeat="value in vm.agents" ng-disabled="value.canSelect === false">{{ value.fullname }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'lastevent\'" class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="\'abandoned\'">Abandon</md-option>\n                    <md-option ng-value="\'complete\'">Hangup</md-option>\n                    <md-option ng-value="\'rejected\'">Reject</md-option>\n                    <md-option ng-value="\'called\'">Ring</md-option>\n                    <md-option ng-value="\'connect\'">Answer</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'interaction\' && vm.trigger.channel != \'voice\'" class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="\'opened\'">Opened</md-option>\n                    <md-option ng-value="\'closed\'">Closed</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'message\' && vm.trigger.channel != \'voice\'" class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="\'in\'">Incoming</md-option>\n                    <md-option ng-value="\'out\'">Outgoing</md-option>\n                    <md-option ng-value="\'accept\'">Accepted</md-option>\n                    <md-option ng-value="\'reject\'">Rejected</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newAllCondition" ng-click="vm.saveAllCondition()" class="send-button md-accent md-raised" ng-disabled="allConditionForm.$invalid || allConditionForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newAllCondition" ng-click="vm.addNewAllCondition()" class="send-button md-accent md-raised" ng-disabled="allConditionForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_ALLCONDITION" translate-attr-aria-label="TOOLS.ADD_ALLCONDITION">\n                    ADD ALLCONDITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newAllCondition" ng-click="vm.deleteAllCondition($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/triggers/edit/anyconditions/dialog.html",'<md-dialog class="anyCondition-dialog" aria-label="New AnyCondition">\n    <form name="anyConditionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.FIELD">Field</label>\n                <md-select name="field" ng-model="vm.anyCondition.field" autofocus required>\n\n                    <md-option ng-value="\'queue\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'lastevent\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.CALL_STATUS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'routeId\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.OUTBOUNDROUTE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'name\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.AGENT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'account\'" ng-if="vm.trigger.channel != \'voice\'"> {{ \'TOOLS.ACCOUNT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'interaction\'" ng-if="vm.trigger.channel != \'voice\'"> {{ \'TOOLS.INTERACTION\' | translate }} </md-option>\n\n                    <md-option ng-value="\'message\'" ng-if="vm.trigger.channel != \'voice\'"> {{ \'TOOLS.MESSAGE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'field\'].$error" ng-show="anyConditionForm[\'field\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.FIELD_REQUIRED">Field field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.OPERATOR">Operator</label>\n                <md-select name="operator" ng-model="vm.anyCondition.operator" required>\n\n                    <md-option ng-value="\'equals\'"> {{ \'TOOLS.EQUALS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'not_equals\'"> {{ \'TOOLS.NOT_EQUALS\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'operator\'].$error" ng-show="anyConditionForm[\'operator\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.OPERATOR_REQUIRED">Operator field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'account\' && vm.trigger.channel == \'chat\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.chatAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'account\' && vm.trigger.channel == \'mail\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.mailAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'account\' && vm.trigger.channel == \'sms\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.smsAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'account\' && vm.trigger.channel == \'fax\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.faxAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'account\' && vm.trigger.channel == \'openchannel\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.openchannelAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'queue\' && vm.trigger.channel == \'voice\'" class="md-block">\n                <label translate="TOOLS.QUEUE">Queue</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.name" ng-repeat="value in vm.queues" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'routeId\' && vm.trigger.channel == \'voice\'" class="md-block">\n                <label translate="TOOLS.OUTBOUNDROUTE">OutboundRoute</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.outboundRoutes" ng-disabled="value.canSelect === false">{{ value.exten }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.OUTBOUNDROUTE_REQUIRED">OutboundRoute field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'agent\' && vm.trigger.channel == \'voice\'" class="md-block">\n                <label translate="TOOLS.AGENT">Agent</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.name" ng-repeat="value in vm.agents" ng-disabled="value.canSelect === false">{{ value.fullname }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'lastevent\'" class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="\'abandoned\'">Abandon</md-option>\n                    <md-option ng-value="\'complete\'">Hangup</md-option>\n                    <md-option ng-value="\'rejected\'">Reject</md-option>\n                    <md-option ng-value="\'called\'">Ring</md-option>\n                    <md-option ng-value="\'connect\'">Answer</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'interaction\' && vm.trigger.channel != \'voice\'" class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="\'opened\'">Opened</md-option>\n                    <md-option ng-value="\'closed\'">Closed</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'message\' && vm.trigger.channel != \'voice\'" class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="\'in\'">Incoming</md-option>\n                    <md-option ng-value="\'out\'">Outgoing</md-option>\n                    <md-option ng-value="\'accept\'">Accepted</md-option>\n                    <md-option ng-value="\'reject\'">Rejected</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newAnyCondition" ng-click="vm.saveAnyCondition()" class="send-button md-accent md-raised" ng-disabled="anyConditionForm.$invalid || anyConditionForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newAnyCondition" ng-click="vm.addNewAnyCondition()" class="send-button md-accent md-raised" ng-disabled="anyConditionForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_ANYCONDITION" translate-attr-aria-label="TOOLS.ADD_ANYCONDITION">\n                    ADD ANYCONDITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newAnyCondition" ng-click="vm.deleteAnyCondition($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/triggers/edit/view.html",'<div id="tools-trigger" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-triggers-button md-icon-button" aria-label="Go to triggers" ng-click="vm.gotoTriggers()" translate translate-attr-aria-label="TOOLS.GO_TO_TRIGGERS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="trigger-image" hide-xs>\n                    <img ng-src="assets/images/business/triggers.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.trigger.id}}\n                        <span ng-if="vm.trigger.name">{{vm.trigger.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="TOOLS.CREATED_AT"></span> <span>{{vm.trigger.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveTrigger()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (allconditionsForm.$invalid) || (anyconditionsForm.$invalid) || (actionsForm.$invalid)" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="trigger-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="TOOLS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.trigger.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.CHANNEL">Channel</label>\n                                <md-select name="channel" ng-model="vm.trigger.channel" required disabled>\n\n                                    <md-option ng-value="\'voice\'"> {{ \'TOOLS.VOICE\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'openchannel\'" ng-if="vm.license.openchannel"> {{ \'TOOLS.OPENCHANNEL\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'chat\'" ng-if="vm.license.chat"> {{ \'TOOLS.CHAT\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'mail\'" ng-if="vm.license.mail"> {{ \'TOOLS.MAIL\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'sms\'" ng-if="vm.license.messaging"> {{ \'TOOLS.SMS\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'fax\'" ng-if="vm.license.fax"> {{ \'TOOLS.FAX\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'channel\'].$error" ng-show="generalForm[\'channel\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.trigger.status" aria-label="Status" ng-disabled="!vm.crudPermissions.canEdit"><span translate="TOOLS.STATUS">Status</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.trigger.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.CONDITIONS&ACTIONS">CONDITIONS&ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="trigger-detail-form-container allconditions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="TriggerAllConditionsController as vm_dc" ng-init="vm_dc.init(vm.trigger, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedTriggerAllConditions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="TOOLS.ALLCONDITIONS">AllConditions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditTriggerAllCondition($event)" aria-label="add allCondition" translate translate-attr-label="TOOLS.ADD_ALLCONDITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedTriggerAllConditions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedTriggerAllConditions.length}} {{vm_dc.selectedTriggerAllConditions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedTriggerAllConditions" csv-label="true" filename="triggers.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedTriggerAllConditions($event)" aria-label="delete selected" translate translate-attr-label="TRIGGERS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedTriggerAllConditions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getTriggerAllConditions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="field">{{ \'TOOLS.FIELD\' | translate }}</th>\n                                            <th md-column md-order-by="operator">{{ \'TOOLS.OPERATOR\' | translate }}</th>\n                                            <th md-column md-order-by="value">{{ \'TOOLS.VALUE\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'TOOLS.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="allCondition" md-select-id="id" ng-repeat="allCondition in vm_dc.triggerAllConditions.rows">\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" md-cell>{{allCondition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" md-cell>{{ \'TOOLS.\' + vm_dc.arrayfield[allCondition.field].option | uppercase | translate }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" md-cell>{{ \'TOOLS.\' + vm_dc.arrayoperator[allCondition.operator].option | uppercase | translate }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="!allCondition.value" md-cell>{{allCondition.value}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'chat\' && allCondition.field == \'account\'" md-cell>{{ (vm_dc.chatAccounts | filter : {\'id\':allCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'mail\' && allCondition.field == \'account\'" md-cell>{{ (vm_dc.mailAccounts | filter : {\'id\':allCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'sms\' && allCondition.field == \'account\'" md-cell>{{ (vm_dc.smsAccounts | filter : {\'id\':allCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'fax\' && allCondition.field == \'account\'" md-cell>{{ (vm_dc.faxAccounts | filter : {\'id\':allCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'openchannel\' && allCondition.field == \'account\'" md-cell>{{ (vm_dc.openchannelAccounts | filter : {\'id\':allCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'voice\' && allCondition.field == \'queue\'" md-cell>{{ (vm_dc.queues | filter : {\'name\':allCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'voice\' && allCondition.field == \'routeId\'" md-cell>{{ (vm_dc.outboundRoutes | filter : {\'id\':allCondition.value})[0].exten }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'voice\' && allCondition.field == \'agent\'" md-cell>{{ (vm_dc.agents | filter : {\'name\':allCondition.value})[0].fullname }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'voice\' && allCondition.field == \'lastevent\'" md-cell>{{ vm_dc.callStatusValues[allCondition.value].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel != \'voice\' && allCondition.field == \'interaction\'" md-cell>{{ vm_dc.interactionStatusValues[allCondition.value].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel != \'voice\' && allCondition.field == \'message\'" md-cell>{{ vm_dc.messageStatusValues[allCondition.value].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" md-cell>{{allCondition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" translate="TOOLS.EDIT_ALLCONDITION">\n                                                                Edit AllCondition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(allCondition, $event)" translate="TOOLS.DELETE_ALLCONDITION">\n                                                                Delete AllCondition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.triggerAllConditions.rows.length">\n                                            <td md-cell colspan="18">\n                                                <span class="text-boxed-ligth" translate="TOOLS.NO_ALLCONDITION_AVAILABLE">No allcondition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.triggerAllConditions.count}}" md-on-paginate="vm_dc.getTriggerAllConditions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                    <div class="trigger-detail-form-container anyconditions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="TriggerAnyConditionsController as vm_dc" ng-init="vm_dc.init(vm.trigger, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedTriggerAnyConditions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="TOOLS.ANYCONDITIONS">AnyConditions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditTriggerAnyCondition($event)" aria-label="add anyCondition" translate translate-attr-label="TOOLS.ADD_ANYCONDITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedTriggerAnyConditions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedTriggerAnyConditions.length}} {{vm_dc.selectedTriggerAnyConditions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedTriggerAnyConditions" csv-label="true" filename="triggers.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedTriggerAnyConditions($event)" aria-label="delete selected" translate translate-attr-label="TRIGGERS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedTriggerAnyConditions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getTriggerAnyConditions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="field">{{ \'TOOLS.FIELD\' | translate }}</th>\n                                            <th md-column md-order-by="operator">{{ \'TOOLS.OPERATOR\' | translate }}</th>\n                                            <th md-column md-order-by="value">{{ \'TOOLS.VALUE\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'TOOLS.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="anyCondition" md-select-id="id" ng-repeat="anyCondition in vm_dc.triggerAnyConditions.rows">\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" md-cell>{{anyCondition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" md-cell>{{ \'TOOLS.\' + vm_dc.arrayfield[anyCondition.field].option | uppercase | translate }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" md-cell>{{ \'TOOLS.\' + vm_dc.arrayoperator[anyCondition.operator].option | uppercase | translate }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="!anyCondition.value" md-cell>{{anyCondition.value}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'chat\' && anyCondition.field == \'account\'" md-cell>{{ (vm_dc.chatAccounts | filter : {\'id\':anyCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'mail\' && anyCondition.field == \'account\'" md-cell>{{ (vm_dc.mailAccounts | filter : {\'id\':anyCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'sms\' && anyCondition.field == \'account\'" md-cell>{{ (vm_dc.smsAccounts | filter : {\'id\':anyCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'fax\' && anyCondition.field == \'account\'" md-cell>{{ (vm_dc.faxAccounts | filter : {\'id\':anyCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'openchannel\' && anyCondition.field == \'account\'" md-cell>{{ (vm_dc.openchannelAccounts | filter : {\'id\':anyCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'voice\' && anyCondition.field == \'queue\'" md-cell>{{ (vm_dc.queues | filter : {\'name\':anyCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'voice\' && anyCondition.field == \'routeId\'" md-cell>{{ (vm_dc.outboundRoutes | filter : {\'id\':anyCondition.value})[0].exten }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'voice\' && anyCondition.field == \'agent\'" md-cell>{{ (vm_dc.agents | filter : {\'name\':anyCondition.value})[0].fullname }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'voice\' && anyCondition.field == \'lastevent\'" md-cell>{{ vm_dc.callStatusValues[anyCondition.value].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel != \'voice\' && anyCondition.field == \'interaction\'" md-cell>{{ vm_dc.interactionStatusValues[anyCondition.value].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel != \'voice\' && anyCondition.field == \'message\'" md-cell>{{ vm_dc.messageStatusValues[anyCondition.value].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" md-cell>{{anyCondition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" translate="TOOLS.EDIT_ANYCONDITION">\n                                                                Edit AnyCondition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(anyCondition, $event)" translate="TOOLS.DELETE_ANYCONDITION">\n                                                                Delete AnyCondition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.triggerAnyConditions.rows.length">\n                                            <td md-cell colspan="18">\n                                                <span class="text-boxed-ligth" translate="TOOLS.NO_ANYCONDITION_AVAILABLE">No anycondition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.triggerAnyConditions.count}}" md-on-paginate="vm_dc.getTriggerAnyConditions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                    <div class="trigger-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="TriggerActionsController as vm_dc" ng-init="vm_dc.init(vm.trigger, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedTriggerActions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="TOOLS.ACTIONS">Actions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditTriggerAction($event)" aria-label="add action" translate translate-attr-label="TOOLS.ADD_ACTION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedTriggerActions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedTriggerActions.length}} {{vm_dc.selectedTriggerActions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedTriggerActions" csv-label="true" filename="triggers.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedTriggerActions($event)" aria-label="delete selected" translate translate-attr-label="TRIGGERS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedTriggerActions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getTriggerActions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="action">{{ \'TOOLS.ACTION\' | translate }}</th>\n                                            <th md-column md-order-by="data1">{{ \'TOOLS.TYPE\' | translate }}</th>\n                                            <th md-column md-order-by="data2">{{ \'TOOLS.INFO\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'TOOLS.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="action" md-select-id="id" ng-repeat="action in vm_dc.triggerActions.rows">\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" md-cell>{{action.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" md-cell>{{ \'TOOLS.\' + vm_dc.arrayaction[action.action].option | uppercase | translate }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'jscripty\'" md-cell>{{ (vm_dc.projects | filter : {\'id\':action.data1})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'browser\'" md-cell>{{ vm_dc.browserValues[action.data1].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'contactManager\'" md-cell>{{ (vm_dc.lists | filter : {\'id\':action.data1})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'contactManager\'" md-cell>{{ \'TOOLS.\' + vm_dc.autoCreateContact[action.data2].option | uppercase | translate }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'urlForward\'" md-cell>{{ vm_dc.urlForwardValues[action.data1].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="!action.data1" md-cell>{{action.data1}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="!action.data2" md-cell>{{action.data2}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'urlForward\'" md-cell>{{action.data2}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'script\'" md-cell>{{action.data2}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'script\'" md-cell>{{action.data1}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\'" md-cell>{{ vm_dc.integrationValues[action.data1].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'zendesk\'" md-cell>{{ (vm_dc.zendeskAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'desk\'" md-cell>{{ (vm_dc.deskAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'zoho\'" md-cell>{{ (vm_dc.zohoAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'salesforce\'" md-cell>{{ (vm_dc.salesforceAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'sugarcrm\'" md-cell>{{ (vm_dc.sugarcrmAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'freshdesk\'" md-cell>{{ (vm_dc.freshdeskAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'vtiger\'" md-cell>{{ (vm_dc.vtigerAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'dynamics365\'" md-cell>{{ (vm_dc.dynamics365Accounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'servicenow\'" md-cell>{{ (vm_dc.servicenowAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'motionbar\'" md-cell>{{ vm_dc.motionbarValues[action.data1].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'motionbar\' && action.data1 == \'1\'" md-cell>{{action.data2}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'motionbar\' && action.data1 == \'2\'" md-cell>{{action.data2}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'motionbar\' && action.data1 == \'0\'" md-cell>{{ (vm_dc.templates | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'browser\' && action.data1 == \'0\'" md-cell>{{ (vm_dc.templates | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'browser\' && action.data1 == \'1\'" md-cell>{{action.data2}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" md-cell>{{action.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditTriggerAction($event, action)" translate="TOOLS.EDIT_ACTION">\n                                                                Edit Action\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(action, $event)" translate="TOOLS.DELETE_ACTION">\n                                                                Delete Action\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.triggerActions.rows.length">\n                                            <td md-cell colspan="48">\n                                                <span class="text-boxed-ligth" translate="TOOLS.NO_ACTION_AVAILABLE">No action available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.triggerActions.count}}" md-on-paginate="vm_dc.getTriggerActions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/tools/views/triggers/triggers.html",'<div id="triggers" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.TRIGGERS">Triggers</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedTriggers.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedTriggers =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-triggers-count">\n                    <span>{{vm.selectedTriggers.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="TRIGGERS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllTriggers()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectTriggers()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedTriggers" csv-label="true" filename="triggers.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedTriggers($event)" aria-label="delete selected" translate translate-attr-label="TRIGGERS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- TRIGGER TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedTriggers" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTriggers">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="channel">{{ \'TOOLS.CHANNEL\' | translate }}</th>\n                                <th md-column md-order-by="status">{{ \'TOOLS.STATUS\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.triggers.rows.length">\n                                <td md-cell colspan="6">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="trigger" md-select-id="id" ng-repeat="trigger in vm.triggers.rows">\n                                <td md-cell ng-if="trigger.userpic"><img class="avatar" alt="{{trigger.name}}" ng-src="api/users/{{trigger.id}}/avatar" /></td>\n                                <td md-cell ng-if="!trigger.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{trigger.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trigger, ev) : vm.createOrEditTrigger($event, trigger)" md-cell class="id ">{{trigger.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trigger, ev) : vm.createOrEditTrigger($event, trigger)" md-cell class="name ">{{trigger.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trigger, ev) : vm.createOrEditTrigger($event, trigger)" md-cell class="channel ">{{ \'TOOLS.\' + vm.arraychannel[trigger.channel].option | uppercase | translate }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trigger, ev) : vm.createOrEditTrigger($event, trigger)" md-cell class="status ">\n                                    <md-icon md-colors="{color: {{trigger.status ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{trigger.status ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trigger, ev) : vm.createOrEditTrigger($event, trigger)" md-cell class="description ">{{trigger.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(trigger, $event    )" translate="TOOLS.EDIT_TRIGGER">\n                                                    Edit Trigger\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(trigger, $event    )" translate="TOOLS.DELETE_TRIGGER">\n                                                    Delete Trigger\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.triggers.count}}" md-on-paginate="vm.getTriggers" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / TRIGGER TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD TRIGGER BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-trigger-button" ng-click="vm.createOrEditTrigger($event)" aria-label="add trigger" translate translate-attr-aria-label="TOOLS.ADD_TRIGGER">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD TRIGGER BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/trunks/create/dialog.html",'<md-dialog class="trunk-dialog" aria-label="New Trunk">\n    <form name="trunkForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.trunk.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newTrunk">\n\n                <div class="hint"><span translate="TOOLS.HELP.NAME"></span></div>\n                <div ng-messages="trunkForm[\'name\'].$error" ng-show="trunkForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="TOOLS.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.trunk.active" aria-label="active"><span translate="TOOLS.ACTIVE">active</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.HOST">host</label>\n                <input type="text" name="host" ng-model="vm.trunk.host" ng-required="true">\n\n                <div class="hint"><span translate="TOOLS.HELP.HOST"></span></div>\n                <div ng-messages="trunkForm[\'host\'].$error" ng-show="trunkForm[\'host\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.HOST_REQUIRED">host field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.SECRET">secret</label>\n                <input type="password" name="secret" ng-model="vm.trunk.secret" placeholder="Password" translate translate-attr-placeholder="TOOLS.PASSWORD">\n                <div class="hint"><span translate="TOOLS.HELP.SECRET"></span></div>\n                <div ng-messages="trunkForm[\'secret\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="TOOLS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DEFAULTUSER">defaultuser</label>\n                <input type="text" name="defaultuser" ng-model="vm.trunk.defaultuser">\n\n                <div class="hint"><span translate="TOOLS.HELP.DEFAULTUSER"></span></div>\n                <div ng-messages="trunkForm[\'defaultuser\'].$error" ng-show="trunkForm[\'defaultuser\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DEFAULTUSER_REQUIRED">defaultuser field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.REGISTRY">registry</label>\n                <input type="text" name="registry" ng-model="vm.trunk.registry">\n\n                <div class="hint"><span translate="TOOLS.HELP.REGISTRY"></span></div>\n                <div ng-messages="trunkForm[\'registry\'].$error" ng-show="trunkForm[\'registry\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.REGISTRY_REQUIRED">registry field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.trunk.description">\n\n                <div ng-messages="trunkForm[\'description\'].$error" ng-show="trunkForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newTrunk" ng-click="vm.saveTrunk()" class="send-button md-accent md-raised" ng-disabled="trunkForm.$invalid || trunkForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newTrunk" ng-click="vm.addNewTrunk()" class="send-button md-accent md-raised" ng-disabled="trunkForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_TRUNK" translate-attr-aria-label="TOOLS.ADD_TRUNK">\n                    ADD TRUNK\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newTrunk" ng-click="vm.deleteTrunk($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/trunks/edit/clone/clone.html",'<md-dialog class="trunk-dialog" aria-label="Clone Trunk">\n    <form name="trunkForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.trunk.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newTrunk">\n\n                <div class="hint"><span translate="TOOLS.HELP.NAME"></span></div>\n                <div ng-messages="trunkForm[\'name\'].$error" ng-show="trunkForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="TOOLS.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.trunk.active" aria-label="active"><span translate="TOOLS.ACTIVE">active</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <md-button type="submit" ng-click="vm.cloneTrunk()" class="send-button md-accent md-raised" ng-disabled="trunkForm.$invalid" aria-label="CLONE" translate="TOOLS.CLONE_TRUNK" translate-attr-aria-label="TOOLS.CLONE_TRUNK">\n                CLONE TRUNK\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/trunks/edit/view.html",'<div id="tools-trunk" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-trunks-button md-icon-button" aria-label="Go to trunks" ng-click="vm.gotoTrunks()" translate translate-attr-aria-label="TOOLS.GO_TO_TRUNKS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="trunk-image" hide-xs>\n                    <img ng-src="assets/images/business/trunks.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.trunk.id}}\n                        <span ng-if="vm.trunk.name">{{vm.trunk.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="TOOLS.CREATED_AT"></span> <span>{{vm.trunk.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.trunk, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="TOOLS.GOTO_TRUNK"></span></md-tooltip>\n                <md-icon md-font-icon="icon-cast"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.clonedialog(vm.trunk, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="clone">\n                <md-tooltip><span translate="TOOLS.CLONE_TRUNK"></span></md-tooltip>\n                <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveTrunk()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (advancedForm.$invalid) || (otherFieldsForm.$invalid)" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="trunk-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="TOOLS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.trunk.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="TOOLS.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="TOOLS.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.trunk.active" aria-label="active" ng-disabled="!vm.crudPermissions.canEdit"><span translate="TOOLS.ACTIVE">active</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.HOST">host</label>\n                                <input type="text" name="host" ng-model="vm.trunk.host" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.HOST"></span></div>\n                                <div ng-messages="generalForm[\'host\'].$error" ng-show="generalForm[\'host\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.HOST_REQUIRED">host field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.SECRET">secret</label>\n                                <input type="password" name="secret" ng-model="vm.trunk.secret" placeholder="Password" translate translate-attr-placeholder="TOOLS.PASSWORD">\n                                <div class="hint"><span translate="TOOLS.HELP.SECRET"></span></div>\n                                <div ng-messages="generalForm[\'secret\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="TOOLS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DEFAULTUSER">defaultuser</label>\n                                <input type="text" name="defaultuser" ng-model="vm.trunk.defaultuser" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.DEFAULTUSER"></span></div>\n                                <div ng-messages="generalForm[\'defaultuser\'].$error" ng-show="generalForm[\'defaultuser\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DEFAULTUSER_REQUIRED">defaultuser field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.CONTEXT">context</label>\n                                <md-select name="context" ng-model="vm.trunk.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.CONTEXT"></span></div>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.CONTEXT_REQUIRED">context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.CALLERID">callerid</label>\n                                <input type="text" name="callerid" ng-model="vm.trunk.callerid" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.CALLERID"></span></div>\n                                <div ng-messages="generalForm[\'callerid\'].$error" ng-show="generalForm[\'callerid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.CALLERID_REQUIRED">callerid field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.TYPE">Type</label>\n                                <md-select name="type" ng-model="vm.trunk.type" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'friend\'">Friend</md-option>\n                                    <md-option ng-value="\'user\'">User</md-option>\n                                    <md-option ng-value="\'peer\'">Peer</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.TYPE"></span></div>\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DTMFMODE">dtmfmode</label>\n                                <md-select name="dtmfmode" ng-model="vm.trunk.dtmfmode" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'rfc2833\'">rfc2833</md-option>\n                                    <md-option ng-value="\'info\'">info</md-option>\n                                    <md-option ng-value="\'shortinfo\'">shortinfo</md-option>\n                                    <md-option ng-value="\'inband\'">inband</md-option>\n                                    <md-option ng-value="\'auto\'">auto</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.DTMFMODE"></span></div>\n                                <div ng-messages="generalForm[\'dtmfmode\'].$error" ng-show="generalForm[\'dtmfmode\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DTMFMODE_REQUIRED">dtmfmode field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.NAT">nat</label>\n                                <md-select name="nat" ng-model="vm.trunk.nat" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'force_rport\'">force_rport</md-option>\n                                    <md-option ng-value="\'comedia\'">comedia</md-option>\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'never\'">never</md-option>\n                                    <md-option ng-value="\'route\'">route</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.NAT"></span></div>\n                                <div ng-messages="generalForm[\'nat\'].$error" ng-show="generalForm[\'nat\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.NAT_REQUIRED">nat field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.QUALIFY">qualify</label>\n                                <md-select name="qualify" ng-model="vm.trunk.qualify" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.QUALIFY"></span></div>\n                                <div ng-messages="generalForm[\'qualify\'].$error" ng-show="generalForm[\'qualify\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.QUALIFY_REQUIRED">qualify field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.ALLOWCODECS">AllowCodecs</label>\n                                <md-select name="allow" ng-model="vm.trunk.allow" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'ulaw\'">ulaw</md-option>\n                                    <md-option ng-value="\'alaw\'">alaw</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                    <md-option ng-value="\'g723\'">g723</md-option>\n                                    <md-option ng-value="\'g726\'">g726</md-option>\n                                    <md-option ng-value="\'g722\'">g722</md-option>\n                                    <md-option ng-value="\'g729\'">g729</md-option>\n                                    <md-option ng-value="\'ilbc\'">ilbc</md-option>\n                                    <md-option ng-value="\'opus\'">opus</md-option>\n                                    <md-option ng-value="\'h264\'">h264</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.ALLOWCODECS"></span></div>\n                                <div ng-messages="generalForm[\'allow\'].$error" ng-show="generalForm[\'allow\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.ALLOWCODECS_REQUIRED">AllowCodecs field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.INSECURE">insecure</label>\n                                <md-select name="insecure" ng-model="vm.trunk.insecure" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'port\'">port</md-option>\n                                    <md-option ng-value="\'invite\'">invite</md-option>\n                                    <md-option ng-value="\'very\'">very</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.INSECURE"></span></div>\n                                <div ng-messages="generalForm[\'insecure\'].$error" ng-show="generalForm[\'insecure\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.INSECURE_REQUIRED">insecure field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.CALL_LIMIT">call_limit</label>\n                                <input type="number" name="call_limit" ng-model="vm.trunk.call_limit" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.CALL_LIMIT"></span></div>\n                                <div ng-messages="generalForm[\'call_limit\'].$error" ng-show="generalForm[\'call_limit\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.CALL_LIMIT_REQUIRED">call_limit field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.trunk.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="trunk-detail-form-container advanced md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="TOOLS.ADVANCED">ADVANCED</div>\n                        </div>\n                        <form name="advancedForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.REGISTRY">registry</label>\n                                <input type="text" name="registry" ng-model="vm.trunk.registry" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.REGISTRY"></span></div>\n                                <div ng-messages="advancedForm[\'registry\'].$error" ng-show="advancedForm[\'registry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.REGISTRY_REQUIRED">registry field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DIRECTMEDIA">directmedia</label>\n                                <md-select name="directmedia" ng-model="vm.trunk.directmedia" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'nonat\'">nonat</md-option>\n                                    <md-option ng-value="\'update\'">update</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.DIRECTMEDIA"></span></div>\n                                <div ng-messages="advancedForm[\'directmedia\'].$error" ng-show="advancedForm[\'directmedia\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DIRECTMEDIA_REQUIRED">directmedia field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.CALLCOUNTER">callcounter</label>\n                                <md-select name="callcounter" ng-model="vm.trunk.callcounter" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.CALLCOUNTER"></span></div>\n                                <div ng-messages="advancedForm[\'callcounter\'].$error" ng-show="advancedForm[\'callcounter\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.CALLCOUNTER_REQUIRED">callcounter field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.FROMDOMAIN">fromdomain</label>\n                                <input type="text" name="fromdomain" ng-model="vm.trunk.fromdomain" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.FROMDOMAIN"></span></div>\n                                <div ng-messages="advancedForm[\'fromdomain\'].$error" ng-show="advancedForm[\'fromdomain\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.FROMDOMAIN_REQUIRED">fromdomain field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.FROMUSER">fromuser</label>\n                                <input type="text" name="fromuser" ng-model="vm.trunk.fromuser" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.FROMUSER"></span></div>\n                                <div ng-messages="advancedForm[\'fromuser\'].$error" ng-show="advancedForm[\'fromuser\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.FROMUSER_REQUIRED">fromuser field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.OUTBOUNDPROXY">outboundproxy</label>\n                                <input type="text" name="outboundproxy" ng-model="vm.trunk.outboundproxy" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.OUTBOUNDPROXY"></span></div>\n                                <div ng-messages="advancedForm[\'outboundproxy\'].$error" ng-show="advancedForm[\'outboundproxy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.OUTBOUNDPROXY_REQUIRED">outboundproxy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.ADD_PHONE_TO_URI">Add_phone_to_URI</label>\n                                <md-select name="usereqphone" ng-model="vm.trunk.usereqphone" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.ADD_PHONE_TO_URI"></span></div>\n                                <div ng-messages="advancedForm[\'usereqphone\'].$error" ng-show="advancedForm[\'usereqphone\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.ADD_PHONE_TO_URI_REQUIRED">Add_phone_to_URI field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.TRUST_REMOTE_PARTY_ID">Trust_Remote_Party_ID</label>\n                                <md-select name="trustrpid" ng-model="vm.trunk.trustrpid" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.TRUST_REMOTE_PARTY_ID"></span></div>\n                                <div ng-messages="advancedForm[\'trustrpid\'].$error" ng-show="advancedForm[\'trustrpid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.TRUST_REMOTE_PARTY_ID_REQUIRED">Trust_Remote_Party_ID field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.SEND_REMOTE_PARTY_ID_HEADER">Send_Remote_Party_ID_header</label>\n                                <md-select name="sendrpid" ng-model="vm.trunk.sendrpid" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'pai\'"> {{ \'TOOLS.PAI\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.SEND_REMOTE_PARTY_ID_HEADER"></span></div>\n                                <div ng-messages="advancedForm[\'sendrpid\'].$error" ng-show="advancedForm[\'sendrpid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.SEND_REMOTE_PARTY_ID_HEADER_REQUIRED">Send_Remote_Party_ID_header field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.ENCRYPTION">encryption</label>\n                                <md-select name="encryption" ng-model="vm.trunk.encryption" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.ENCRYPTION"></span></div>\n                                <div ng-messages="advancedForm[\'encryption\'].$error" ng-show="advancedForm[\'encryption\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.ENCRYPTION_REQUIRED">encryption field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.PORT">port</label>\n                                <input type="number" name="port" ng-model="vm.trunk.port" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.PORT"></span></div>\n                                <div ng-messages="advancedForm[\'port\'].$error" ng-show="advancedForm[\'port\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.PORT_REQUIRED">port field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.TRANSPORT">Transport</label>\n                                <md-select name="transport" ng-model="vm.trunk.transport" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'udp\'">udp</md-option>\n                                    <md-option ng-value="\'tcp\'">tcp</md-option>\n                                    <md-option ng-value="\'ws\'">ws</md-option>\n                                    <md-option ng-value="\'wss\'">wss</md-option>\n                                    <md-option ng-value="\'tls\'">tls</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.TRANSPORT"></span></div>\n                                <div ng-messages="advancedForm[\'transport\'].$error" ng-show="advancedForm[\'transport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.TRANSPORT_REQUIRED">Transport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.T38PT_UDPTL">t38pt_udptl</label>\n                                <input type="string" name="t38pt_udptl" ng-model="vm.trunk.t38pt_udptl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.T38PT_UDPTL"></span></div>\n                                <div ng-messages="advancedForm[\'t38pt_udptl\'].$error" ng-show="advancedForm[\'t38pt_udptl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.T38PT_UDPTL_REQUIRED">t38pt_udptl field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.VIDEOSUPPORT">Videosupport</label>\n                                <md-select name="videosupport" ng-model="vm.trunk.videosupport" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">Yes</md-option>\n                                    <md-option ng-value="\'no\'">No</md-option>\n                                    <md-option ng-value="\'always\'">Always</md-option>\n                                </md-select>\n                                <div ng-messages="advancedForm[\'videosupport\'].$error" ng-show="advancedForm[\'videosupport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.VIDEOSUPPORT_REQUIRED">Videosupport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.OTHERFIELDS">OTHERFIELDS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="trunk-detail-form-container otherfields md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="TOOLS.OTHERFIELDS">OTHERFIELDS</div>\n                        </div>\n                        <form name="otherFieldsForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.OTHERFIELDS">otherFields</label>\n                                <textarea name="otherFields" ng-model="vm.trunk.otherFields" autofocus></textarea>\n                                <div class="hint"><span translate="TOOLS.HELP.OTHERFIELDS"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/tools/views/trunks/trunks.html",'<div id="trunks" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.TRUNKS">Trunks</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedTrunks.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedTrunks =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-trunks-count">\n                    <span>{{vm.selectedTrunks.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="TRUNKS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllTrunks()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectTrunks()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedTrunks" csv-label="true" filename="trunks.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedTrunks($event)" aria-label="delete selected" translate translate-attr-label="TRUNKS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- TRUNK TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedTrunks" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTrunks">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="active">{{ \'TOOLS.ACTIVE\' | translate }}</th>\n                                <th md-column md-order-by="host">{{ \'TOOLS.HOST\' | translate }}</th>\n                                <th md-column md-order-by="registry">{{ \'TOOLS.REGISTRY\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.trunks.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="trunk" md-select-id="id" ng-repeat="trunk in vm.trunks.rows">\n                                <td md-cell ng-if="trunk.userpic"><img class="avatar" alt="{{trunk.name}}" ng-src="api/users/{{trunk.id}}/avatar" /></td>\n                                <td md-cell ng-if="!trunk.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{trunk.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trunk, ev) : vm.createOrEditTrunk($event, trunk)" md-cell class="id ">{{trunk.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trunk, ev) : vm.createOrEditTrunk($event, trunk)" md-cell class="name ">{{trunk.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trunk, ev) : vm.createOrEditTrunk($event, trunk)" md-cell class="active ">\n                                    <md-icon md-colors="{color: {{trunk.active ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{trunk.active ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trunk, ev) : vm.createOrEditTrunk($event, trunk)" md-cell class="host ">{{trunk.host}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trunk, ev) : vm.createOrEditTrunk($event, trunk)" md-cell class="registry ">{{trunk.registry}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trunk, ev) : vm.createOrEditTrunk($event, trunk)" md-cell class="description ">{{trunk.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(trunk, $event    )" translate="TOOLS.EDIT_TRUNK">\n                                                    Edit Trunk\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.clonedialog(trunk, $event    )" translate="TOOLS.CLONE_TRUNK">\n                                                    clone Trunk\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(trunk, $event    )" translate="TOOLS.GOTOREALTIME_TRUNK">\n                                                    goToRealtime Trunk\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(trunk, $event    )" translate="TOOLS.DELETE_TRUNK">\n                                                    Delete Trunk\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.trunks.count}}" md-on-paginate="vm.getTrunks" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / TRUNK TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD TRUNK BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-trunk-button" ng-click="vm.createOrEditTrunk($event)" aria-label="add trunk" translate translate-attr-aria-label="TOOLS.ADD_TRUNK">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD TRUNK BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/variables/create/dialog.html",'<md-dialog class="variable-dialog" aria-label="New Variable">\n    <form name="variableForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.variable.name" ng-required="true" autofocus>\n\n                <div ng-messages="variableForm[\'name\'].$error" ng-show="variableForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.variable.description">\n\n                <div ng-messages="variableForm[\'description\'].$error" ng-show="variableForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVariable" ng-click="vm.saveVariable()" class="send-button md-accent md-raised" ng-disabled="variableForm.$invalid || variableForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVariable" ng-click="vm.addNewVariable()" class="send-button md-accent md-raised" ng-disabled="variableForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_VARIABLE" translate-attr-aria-label="TOOLS.ADD_VARIABLE">\n                    ADD VARIABLE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVariable" ng-click="vm.deleteVariable($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/variables/variables.html",'<div id="variables" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.VARIABLES">Variables</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedVariables.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedVariables =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-variables-count">\n                    <span>{{vm.selectedVariables.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="VARIABLES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllVariables()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectVariables()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedVariables" csv-label="true" filename="variables.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedVariables($event)" aria-label="delete selected" translate translate-attr-label="VARIABLES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- VARIABLE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedVariables" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVariables">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.variables.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="variable" md-select-id="id" ng-repeat="variable in vm.variables.rows">\n                                <td md-cell ng-if="variable.userpic"><img class="avatar" alt="{{variable.name}}" ng-src="api/users/{{variable.id}}/avatar" /></td>\n                                <td md-cell ng-if="!variable.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{variable.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditVariable($event, variable)" md-cell class="id ">{{variable.id}}</td>\n                                <td ng-click="vm.createOrEditVariable($event, variable)" md-cell class="name ">{{variable.name}}</td>\n                                <td ng-click="vm.createOrEditVariable($event, variable)" md-cell class="description ">{{variable.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(variable, $event    )" translate="TOOLS.EDIT_VARIABLE">\n                                                    Edit Variable\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(variable, $event    )" translate="TOOLS.DELETE_VARIABLE">\n                                                    Delete Variable\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.variables.count}}" md-on-paginate="vm.getVariables" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / VARIABLE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD VARIABLE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-variable-button" ng-click="vm.createOrEditVariable($event)" aria-label="add variable" translate translate-attr-aria-label="TOOLS.ADD_VARIABLE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD VARIABLE BUTTON --\x3e\n</div>'),e.put("app/main/apps/video/views/screenRecordings/create/dialog.html",'<md-dialog class="screenRecording-dialog" aria-label="New screenRecording">\n    <form name="screenRecordingForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VIDEO.RATING">Rating</label>\n                <md-select name="rating" ng-model="vm.screenRecording.rating" autofocus ng-disabled="!vm.newscreenRecording && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="null">{{\'VIDEO.NO_RATING\' | translate}}</md-option>\n                    <md-option value="1">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1]"></md-icon>\n                    </md-option>\n                    <md-option value="2">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2]"></md-icon>\n                    </md-option>\n                    <md-option value="3">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2,3]"></md-icon>\n                    </md-option>\n                    <md-option value="4">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2,3,4]"></md-icon>\n                    </md-option>\n                    <md-option value="5">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2,3,4,5]"></md-icon>\n                    </md-option>\n                </md-select>\n                <div ng-messages="screenRecordingForm[\'rating\'].$error" ng-show="screenRecordingForm[rating].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VIDEO.ERRORS.RATING_REQUIRED">Rating field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newscreenRecording" ng-click="vm.savescreenRecording()" class="send-button md-accent md-raised" ng-disabled="screenRecordingForm.$invalid || screenRecordingForm.$pristine" aria-label="SAVE" translate="VIDEO.SAVE" translate-attr-aria-label="VIDEO.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newscreenRecording" ng-click="vm.addNewscreenRecording()" class="send-button md-accent md-raised" ng-disabled="screenRecordingForm.$invalid" aria-label="ADD" translate="VIDEO.ADD_SCREENRECORDING" translate-attr-aria-label="VIDEO.ADD_SCREENRECORDING">\n                    ADD SCREENRECORDING\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newscreenRecording" ng-click="vm.deletescreenRecording($event)" aria-label="DELETE" translate translate-attr-aria-label="VIDEO.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VIDEO.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/video/views/screenRecordings/partialViews/play.html",'<md-dialog class="play-dialog" aria-label="play">\n    <form name="playForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="{{ vm.app.toUpperCase() }}.{{  vm.label.toUpperCase() }}">Play Recording</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-disabled="vm.loading" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ng-hide="vm.loading">\n            <div layout="row" layout-sm flex>\n                \x3c!-- VIRTUAL field --\x3e\n                <md-card>\n\n                    <md-card-title ng-if="vm.actionOptions.upperTitle">\n                        <md-card-title-text>\n                            <span class="md-headline">{{ vm.filename }}</span>\n                            <span class="md-subhead"><span translate="{{ vm.app.toUpperCase() }}.UPDATEDAT"></span>: {{ vm.recording.updatedAt}}</span>\n                            </span>\n                        </md-card-title-text>\n                    </md-card-title>\n\n                    \x3c!-- video recording directive --\x3e\n                    <ms-dialog-recording ng-if="vm.format" id="vm.recording.id" title="vm.filename" element="vm.element" model="vm.route" path="vm.path" class="md-card-image"></ms-dialog-recording>\n                    \x3c!-- / video recording directive --\x3e\n\n                    <span ng-if="!vm.format">\n                        <em ng-if="vm.found">{{ vm.app.toUpperCase() + \'.CANT_PLAY_THIS_FILE\' | translate }}</em>\n                        <em ng-if="!vm.found">{{ vm.app.toUpperCase() + \'.FILE_NOT_FOUND\' | translate }}</em>\n                    </span>\n\n                    <md-card-title ng-if="vm.actionOptions.lowerTitle">\n                        <md-card-title-text>\n                            <span class="md-headline">{{ vm.filename }}</span>\n                            <span class="md-subhead"><span translate="{{ vm.app.toUpperCase() }}.UPDATEDAT"></span>:\n                                {{ vm.recording.updatedAt}}</span></span>\n\n                            <span ng-if="vm.actionOptions.properties" class="md-subhead"><span translate="{{ vm.app.toUpperCase() }}.PROPERTIES"></span>:</span></span>\n                        </md-card-title-text>\n                    </md-card-title>\n\n                    <md-card-content ng-if="vm.actionOptions.properties">\n                        <md-list-item class="md-2-line" ng-repeat="(key,value) in vm.properties" ng-click="null" ng-if="key != \'value\' && key != \'updatedAt\' && key != \'queue\'">\n\n                            <md-icon ng-if="vm.icon" class="md-avatar-icon" md-font-icon="vm.actionOptions.propertiesIcon" class="s24"></md-icon>\n\n                            <div class="md-list-item-text" layout="column">\n                                <p><b><span translate="{{ vm.app.toUpperCase() }}.{{ key.toUpperCase() }}"></span></b></p>\n                                <p>{{ value }}\n                                    <p>\n                            </div>\n                        </md-list-item>\n                        </md-list>\n                    </md-card-content>\n\n\n                </md-card>\n            </div>\n        </md-dialog-content>\n        <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n            <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n        </div>\n    </form>\n</md-dialog>'),e.put("app/main/apps/video/views/screenRecordings/screenRecordings.html",'<div id="screenRecordings" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-video" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VIDEO.SCREENRECORDINGS">ScreenRecordings</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VIDEO.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n            \x3c!-- DATE FILTER --\x3e\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE_RANGE">Select Date Range</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearDateFilter()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.CLEAR\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getScreenRecordings()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            \x3c!-- /DATE FILTER --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedScreenRecordings.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedScreenRecordings =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VIDEO.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-screenRecordings-count">\n                    <span>{{vm.selectedScreenRecordings.length}}</span>\n                    <span translate="VIDEO.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SCREENRECORDINGS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllScreenRecordings()" translate="VIDEO.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectScreenRecordings()" translate="VIDEO.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedScreenRecordings" csv-label="true" filename="screenRecordings.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedScreenRecordings($event)" aria-label="delete selected" translate translate-attr-label="SCREENRECORDINGS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SCREENRECORDING TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedScreenRecordings" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getScreenRecordings">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VIDEO.ID\' | translate }}</th>\n                                <th md-column md-order-by="rating">{{ \'VIDEO.RATING\' | translate }}</th>\n                                <th md-column md-order-by="UserId">{{ \'VIDEO.AGENT\' | translate }}</th>\n                                <th md-column md-order-by="duration">{{ \'VIDEO.DURATION\' | translate }}</th>\n                                <th md-column md-order-by="startedAt">{{ \'VIDEO.RECORDSTARTTIME\' | translate }}</th>\n                                <th md-column md-order-by="closedAt">{{ \'VIDEO.RECORDENDTIME\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.screenRecordings.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VIDEO.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="screenRecording" md-select-id="id" ng-repeat="screenRecording in vm.screenRecordings.rows">\n                                <td md-cell ng-if="screenRecording.userpic"><img class="avatar" alt="{{screenRecording.name}}" ng-src="api/users/{{screenRecording.id}}/avatar" /></td>\n                                <td md-cell ng-if="!screenRecording.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{screenRecording.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditscreenRecording($event, screenRecording)" md-cell class="id ">{{screenRecording.id}}</td>\n                                <td ng-click="vm.createOrEditscreenRecording($event, screenRecording)" md-cell class="rating ">\n                                    <md-icon md-font-icon="icon-star" style="color:red" ng-show="screenRecording.rating" ng-repeat="rating in [1,2,3,4,5] | limitTo:screenRecording.rating"></md-icon><span ng-hide="screenRecording.rating" translate="VIDEO.NO_RATING">No rating</span>\n                                </td>\n                                <td ng-click="vm.createOrEditscreenRecording($event, screenRecording)" md-cell class="UserId ">{{ (vm.users | filter : {\'id\':screenRecording.UserId} : true)[0].fullname }}</td>\n\n                                <td md-cell><span ng-bind="vm.convertDuration(screenRecording.duration)"></span></td>\n\n\n                                <td ng-click="vm.createOrEditscreenRecording($event, screenRecording)" md-cell class="startedAt ">{{screenRecording.startedAt | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditscreenRecording($event, screenRecording)" md-cell class="closedAt ">{{screenRecording.closedAt | date:\'medium\' }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VIDEO.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.playrecording(screenRecording, $event  , \'value\'  , \'play_screenrecording\'  , \'video\' )" translate="VIDEO.PLAY_SCREENRECORDING">\n                                                    play screenRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.downloadfile2(screenRecording, $event  , \'screen/recordings\'   )" translate="VIDEO.DOWNLOAD_SCREENRECORDING">\n                                                    Download screenRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(screenRecording, $event    )" translate="VIDEO.DELETE_SCREENRECORDING">\n                                                    Delete screenRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VIDEO.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VIDEO.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VIDEO.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.screenRecordings.count}}" md-on-paginate="vm.getScreenRecordings" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SCREENRECORDING TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/chanSpies/chanSpies.html",'<div id="chanSpies" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.CHANSPIES">ChanSpies</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedChanSpies.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedChanSpies =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-chanSpies-count">\n                    <span>{{vm.selectedChanSpies.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CHANSPIES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllChanSpies()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectChanSpies()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedChanSpies" csv-label="true" filename="chanSpies.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedChanSpies($event)" aria-label="delete selected" translate translate-attr-label="CHANSPIES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- CHANSPY TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedChanSpies" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getChanSpies">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="prefix">{{ \'VOICE.PREFIX\' | translate }}</th>\n                                <th md-column md-order-by="auth">{{ \'VOICE.AUTH\' | translate }}</th>\n                                <th md-column md-order-by="record">{{ \'VOICE.RECORD\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.chanSpies.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="chanSpy" md-select-id="id" ng-repeat="chanSpy in vm.chanSpies.rows">\n                                <td md-cell ng-if="chanSpy.userpic"><img class="avatar" alt="{{chanSpy.name}}" ng-src="api/users/{{chanSpy.id}}/avatar" /></td>\n                                <td md-cell ng-if="!chanSpy.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{chanSpy.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditchanSpy($event, chanSpy)" md-cell class="id ">{{chanSpy.id}}</td>\n                                <td ng-click="vm.createOrEditchanSpy($event, chanSpy)" md-cell class="name ">{{chanSpy.name}}</td>\n                                <td ng-click="vm.createOrEditchanSpy($event, chanSpy)" md-cell class="prefix ">{{chanSpy.prefix}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chanSpy, ev) : vm.createOrEditchanSpy($event, chanSpy)" md-cell class="auth ">\n                                    <md-icon md-colors="{color: {{chanSpy.auth ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{chanSpy.auth ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chanSpy, ev) : vm.createOrEditchanSpy($event, chanSpy)" md-cell class="record ">\n                                    <md-icon md-colors="{color: {{chanSpy.record ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{chanSpy.record ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.createOrEditchanSpy($event, chanSpy)" md-cell class="description ">{{chanSpy.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(chanSpy, $event    )" translate="VOICE.EDIT_CHANSPY">\n                                                    Edit chanSpy\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(chanSpy, $event    )" translate="VOICE.DELETE_CHANSPY">\n                                                    Delete chanSpy\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.chanSpies.count}}" md-on-paginate="vm.getChanSpies" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / CHANSPY TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD CHANSPY BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-chanSpy-button" ng-click="vm.createOrEditchanSpy($event)" aria-label="add chanSpy" translate translate-attr-aria-label="VOICE.ADD_CHANSPY">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD CHANSPY BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/chanSpies/create/dialog.html",'<md-dialog class="chanSpy-dialog" aria-label="New chanSpy">\n    <form name="chanSpyForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.chanSpy.name" ng-required="true" autofocus>\n\n                <div ng-messages="chanSpyForm[\'name\'].$error" ng-show="chanSpyForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PREFIX">Prefix</label>\n                <input type="text" name="prefix" ng-model="vm.chanSpy.prefix" ng-required="true">\n\n                <div ng-messages="chanSpyForm[\'prefix\'].$error" ng-show="chanSpyForm[\'prefix\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PREFIX_REQUIRED">Prefix field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <md-select name="options" ng-model="vm.chanSpy.options" multiple required>\n                    <md-option ng-value="\'b\'">b: Only spy on channels involved in a bridged call.</md-option>\n                    <md-option ng-value="\'B\'">B: Instead of whispering on a single channel barge in on both channels involved in the call.</md-option>\n                    <md-option ng-value="\'E\'">E: Exit when the spied-on channel hangs up.</md-option>\n                    <md-option ng-value="\'o\'">o: Only listen to audio coming from this channel.</md-option>\n                    <md-option ng-value="\'q\'">q: Don\'t play a beep when beginning to spy on a channel, or speak the selected channel name.</md-option>\n                    <md-option ng-value="\'s\'">s: Skip the playback of the channel type (i.e. SIP, IAX, etc) when speaking the selected channel name.</md-option>\n                    <md-option ng-value="\'S\'">S: Stop when no more channels are left to spy on.</md-option>\n                    <md-option ng-value="\'w\'">w: Enable whisper mode, so the spying channel can talk to the spied-on channel.</md-option>\n                    <md-option ng-value="\'W\'">W: Enable private whisper mode, so the spying channel can talk to the spied-on channel but cannot listen to that channel.</md-option>\n                </md-select>\n                <div ng-messages="chanSpyForm[\'options\'].$error" ng-show="chanSpyForm[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.chanSpy.auth" aria-label="Auth"><span translate="VOICE.AUTH">Auth</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.chanSpy.auth">\n                <label translate="VOICE.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.chanSpy.password" placeholder="Password" translate translate-attr-placeholder="VOICE.PASSWORD" required>\n                <div ng-messages="chanSpyForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="VOICE.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.chanSpy.record" aria-label="Record"><span translate="VOICE.RECORD">Record</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.chanSpy.record" class="md-block">\n                <label translate="VOICE.RECORDINGFORMAT">recordingFormat</label>\n                <md-select name="recordingFormat" ng-model="vm.chanSpy.recordingFormat" required>\n                    <md-option ng-value="\'wav\'">wav</md-option>\n                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                    <md-option ng-value="\'WAV\'">wav49</md-option>\n                </md-select>\n                <div ng-messages="chanSpyForm[\'recordingFormat\'].$error" ng-show="chanSpyForm[\'recordingFormat\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.RECORDINGFORMAT_REQUIRED">recordingFormat field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.chanSpy.description">\n\n                <div ng-messages="chanSpyForm[\'description\'].$error" ng-show="chanSpyForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newchanSpy" ng-click="vm.savechanSpy()" class="send-button md-accent md-raised" ng-disabled="chanSpyForm.$invalid || chanSpyForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newchanSpy" ng-click="vm.addNewchanSpy()" class="send-button md-accent md-raised" ng-disabled="chanSpyForm.$invalid" aria-label="ADD" translate="VOICE.ADD_CHANSPY" translate-attr-aria-label="VOICE.ADD_CHANSPY">\n                    ADD CHANSPY\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newchanSpy" ng-click="vm.deletechanSpy($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/contexts/contexts.html",'<div id="contexts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.CONTEXTS">Contexts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedContexts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedContexts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-contexts-count">\n                    <span>{{vm.selectedContexts.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CONTEXTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllContexts()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectContexts()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedContexts" csv-label="true" filename="contexts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedContexts($event)" aria-label="delete selected" translate translate-attr-label="CONTEXTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- CONTEXT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedContexts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getContexts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.contexts.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="context" md-select-id="id" ng-repeat="context in vm.contexts.rows">\n                                <td md-cell ng-if="context.userpic"><img class="avatar" alt="{{context.name}}" ng-src="api/users/{{context.id}}/avatar" /></td>\n                                <td md-cell ng-if="!context.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{context.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditContext($event, context)" md-cell class="id ">{{context.id}}</td>\n                                <td ng-click="vm.createOrEditContext($event, context)" md-cell class="name ">{{context.name}}</td>\n                                <td ng-click="vm.createOrEditContext($event, context)" md-cell class="description ">{{context.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(context, $event    )" translate="VOICE.EDIT_CONTEXT">\n                                                    Edit Context\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(context, $event    )" translate="VOICE.DELETE_CONTEXT">\n                                                    Delete Context\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.contexts.count}}" md-on-paginate="vm.getContexts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / CONTEXT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD CONTEXT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-context-button" ng-click="vm.createOrEditContext($event)" aria-label="add context" translate translate-attr-aria-label="VOICE.ADD_CONTEXT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD CONTEXT BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/contexts/create/dialog.html",'<md-dialog class="context-dialog" aria-label="New Context">\n    <form name="contextForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.context.name" ng-required="true" autofocus>\n\n                <div ng-messages="contextForm[\'name\'].$error" ng-show="contextForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.context.description">\n\n                <div ng-messages="contextForm[\'description\'].$error" ng-show="contextForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newContext" ng-click="vm.saveContext()" class="send-button md-accent md-raised" ng-disabled="contextForm.$invalid || contextForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newContext" ng-click="vm.addNewContext()" class="send-button md-accent md-raised" ng-disabled="contextForm.$invalid" aria-label="ADD" translate="VOICE.ADD_CONTEXT" translate-attr-aria-label="VOICE.ADD_CONTEXT">\n                    ADD CONTEXT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newContext" ng-click="vm.deleteContext($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/create/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PHONENUMBER">PhoneNumber</label>\n                <input type="text" name="exten" ng-model="vm.inboundroute.exten" ng-required="true" autofocus>\n\n                <div ng-messages="inboundrouteForm[\'exten\'].$error" ng-show="inboundrouteForm[\'exten\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PHONENUMBER_REQUIRED">PhoneNumber field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CONTEXT">Context</label>\n                <md-select name="context" ng-model="vm.inboundroute.context" required>\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteForm[\'context\'].$error" ng-show="inboundrouteForm[\'context\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.inboundroute.description">\n\n                <div ng-messages="inboundrouteForm[\'description\'].$error" ng-show="inboundrouteForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newInboundRoute" ng-click="vm.saveInboundRoute()" class="send-button md-accent md-raised" ng-disabled="inboundrouteForm.$invalid || inboundrouteForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newInboundRoute" ng-click="vm.addNewInboundRoute()" class="send-button md-accent md-raised" ng-disabled="inboundrouteForm.$invalid" aria-label="ADD" translate="VOICE.ADD_INBOUNDROUTE" translate-attr-aria-label="VOICE.ADD_INBOUNDROUTE">\n                    ADD INBOUNDROUTE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newInboundRoute" ng-click="vm.deleteInboundRoute($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/agi/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PROJECT">Project</label>\n                <md-select name="project" ng-model="vm.agi.project" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'agi://127.0.0.1/square,{{project.name}}\'" ng-repeat="project in vm.projects" ng-disabled="project.canSelect === false">{{ project.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'project\'].$error" ng-show="inboundrouteFormApp[\'project\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PROJECT_REQUIRED">Project field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/custom/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.APPLICATION_NAME">Application_Name</label>\n                <input type="text" name="app" ng-model="vm.custom.app" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'app\'].$error" ng-show="inboundrouteFormApp[\'app\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.APPLICATION_NAME_REQUIRED">Application_Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.ARGUMENTS">Arguments</label>\n                <input type="text" name="appdata" ng-model="vm.custom.appdata" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'appdata\'].$error" ng-show="inboundrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.ARGUMENTS_REQUIRED">Arguments field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/dial/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TECHNOLOGY/RESOURCE">Technology/Resource</label>\n                <input type="text" name="tech" ng-model="vm.dial.tech" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'tech\'].$error" ng-show="inboundrouteFormApp[\'tech\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TECHNOLOGY/RESOURCE_REQUIRED">Technology/Resource field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.dial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'timeout\'].$error" ng-show="inboundrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.dial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.dial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'url\'].$error" ng-show="inboundrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/externaldial/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TRUNK">Trunk</label>\n                <md-select name="trunk" ng-model="vm.externaldial.trunk" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="trunk.name" ng-repeat="trunk in vm.trunks" ng-disabled="trunk.canSelect === false">{{ trunk.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'trunk\'].$error" ng-show="inboundrouteFormApp[\'trunk\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PHONE">Phone</label>\n                <input type="text" name="phone" ng-model="vm.externaldial.phone" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'phone\'].$error" ng-show="inboundrouteFormApp[\'phone\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.externaldial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'timeout\'].$error" ng-show="inboundrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.externaldial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.externaldial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'url\'].$error" ng-show="inboundrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/goto/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CONTEXT">Context</label>\n                <md-select name="context" ng-model="vm.goto.context" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'context\'].$error" ng-show="inboundrouteFormApp[\'context\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.EXTENSION">Extension</label>\n                <input type="text" name="extension" ng-model="vm.goto.extension" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'extension\'].$error" ng-show="inboundrouteFormApp[\'extension\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.EXTENSION_REQUIRED">Extension field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PRIORITY">Priority</label>\n                <input type="text" name="priority" ng-model="vm.goto.priority" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'priority\'].$error" ng-show="inboundrouteFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/hangup/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.HANGUP_CAUSE">Hangup_Cause</label>\n                <md-select name="appdata" ng-model="vm.hangup.appdata" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n\n                    <md-option ng-value="\'1\'"> {{ \'VOICE.HANGUPCAUSE_1\' | translate }} </md-option>\n\n                    <md-option ng-value="\'16\'"> {{ \'VOICE.HANGUPCAUSE_16\' | translate }} </md-option>\n\n                    <md-option ng-value="\'17\'"> {{ \'VOICE.HANGUPCAUSE_17\' | translate }} </md-option>\n\n                    <md-option ng-value="\'18\'"> {{ \'VOICE.HANGUPCAUSE_18\' | translate }} </md-option>\n\n                    <md-option ng-value="\'21\'"> {{ \'VOICE.HANGUPCAUSE_21\' | translate }} </md-option>\n\n                    <md-option ng-value="\'22\'"> {{ \'VOICE.HANGUPCAUSE_22\' | translate }} </md-option>\n\n                    <md-option ng-value="\'27\'"> {{ \'VOICE.HANGUPCAUSE_27\' | translate }} </md-option>\n\n                    <md-option ng-value="\'38\'"> {{ \'VOICE.HANGUPCAUSE_38\' | translate }} </md-option>\n\n                    <md-option ng-value="\'41\'"> {{ \'VOICE.HANGUPCAUSE_41\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'appdata\'].$error" ng-show="inboundrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.HANGUP_CAUSE_REQUIRED">Hangup_Cause field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/internaldial/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.USER">User</label>\n                <md-select name="user" ng-model="vm.internaldial.user" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'SIP/{{user.name}}\'" ng-repeat="user in vm.users" ng-disabled="user.canSelect === false">{{ user.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'user\'].$error" ng-show="inboundrouteFormApp[\'user\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.USER_REQUIRED">User field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.internaldial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'timeout\'].$error" ng-show="inboundrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.internaldial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.internaldial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'url\'].$error" ng-show="inboundrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/playback/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.AUDIO_FILES">Audio_Files</label>\n                <md-select name="appdata" ng-model="vm.playback.appdata" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/{{appdata.save_name}}\'" ng-repeat="appdata in vm.sounds" ng-disabled="appdata.canSelect === false">{{ appdata.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'appdata\'].$error" ng-show="inboundrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.AUDIO_FILES_REQUIRED">Audio_Files field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.playback.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.playback.answer" aria-label="Answer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="VOICE.ANSWER">Answer</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/queue/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'queue\'].$error" ng-show="inboundrouteFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.queue.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="URL" ng-model="vm.queue.URL" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'URL\'].$error" ng-show="inboundrouteFormApp[\'URL\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.ANNOUNCE_OVERRIDES">Announce_Overrides</label>\n                <md-select name="sound" ng-model="vm.queue.sound" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/{{sound.save_name}}\'" ng-repeat="sound in vm.sounds" ng-disabled="sound.canSelect === false">{{ sound.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'sound\'].$error" ng-show="inboundrouteFormApp[\'sound\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.ANNOUNCE_OVERRIDES_REQUIRED">Announce_Overrides field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'timeout\'].$error" ng-show="inboundrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.AGI">Agi</label>\n                <input type="text" name="agi" ng-model="vm.queue.agi" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'agi\'].$error" ng-show="inboundrouteFormApp[\'agi\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.AGI_REQUIRED">Agi field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.MACRO">Macro</label>\n                <input type="text" name="macro" ng-model="vm.queue.macro" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'macro\'].$error" ng-show="inboundrouteFormApp[\'macro\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.MACRO_REQUIRED">Macro field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.GOSUB">GoSub</label>\n                <input type="text" name="gosub" ng-model="vm.queue.gosub" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'gosub\'].$error" ng-show="inboundrouteFormApp[\'gosub\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.GOSUB_REQUIRED">GoSub field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.RULE">Rule</label>\n                <input type="text" name="rule" ng-model="vm.queue.rule" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'rule\'].$error" ng-show="inboundrouteFormApp[\'rule\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.RULE_REQUIRED">Rule field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.POSITION">Position</label>\n                <input type="number" name="position" ng-model="vm.queue.position" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'position\'].$error" ng-show="inboundrouteFormApp[\'position\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.POSITION_REQUIRED">Position field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.POSITION_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Position must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.queue.answer" aria-label="Answer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="VOICE.ANSWER">Answer</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/ringgroup/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.USER">User</label>\n                <md-select name="multipleUsers" ng-model="vm.ringgroup.multipleUsers" autofocus multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'SIP/{{multipleUsers.name}}\'" ng-repeat="multipleUsers in vm.users" ng-disabled="multipleUsers.canSelect === false">{{ multipleUsers.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'multipleUsers\'].$error" ng-show="inboundrouteFormApp[\'multipleUsers\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.USER_REQUIRED">User field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.ringgroup.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'timeout\'].$error" ng-show="inboundrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.ringgroup.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.ringgroup.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'url\'].$error" ng-show="inboundrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/set/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.VARIABLE">Variable</label>\n                <md-select name="name" ng-model="vm.set.name" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="name.name" ng-repeat="name in vm.variables" ng-disabled="name.canSelect === false">{{ name.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'name\'].$error" ng-show="inboundrouteFormApp[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.set.value" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'value\'].$error" ng-show="inboundrouteFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/voicemail/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.MAILBOX@CONTEXT">Mailbox@Context</label>\n                <md-select name="voiceMail" ng-model="vm.voicemail.voiceMail" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'{{voiceMail.mailbox}}@from-voicemail\'" ng-repeat="voiceMail in vm.voiceMails" ng-disabled="voiceMail.canSelect === false">{{ voiceMail.mailbox }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'voiceMail\'].$error" ng-show="inboundrouteFormApp[\'voiceMail\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.MAILBOX@CONTEXT_REQUIRED">Mailbox@Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.voicemail.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/view.html",'<div id="voice-inboundroute" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-inboundroutes-button md-icon-button" aria-label="Go to inboundroutes" ng-click="vm.gotoInboundRoutes()" translate translate-attr-aria-label="VOICE.GO_TO_INBOUNDROUTES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="inboundroute-image" hide-xs>\n                    <img ng-src="assets/images/business/inboundroutes.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.inboundroute.id}}\n                        <span ng-if="vm.inboundroute.name">{{vm.inboundroute.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="VOICE.CREATED_AT"></span> <span>{{vm.inboundroute.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveInboundRoute()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (actionsForm.$invalid)" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="inboundroute-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.PHONENUMBER">PhoneNumber</label>\n                                <input type="text" name="exten" ng-model="vm.inboundroute.exten" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'exten\'].$error" ng-show="generalForm[\'exten\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.PHONENUMBER_REQUIRED">PhoneNumber field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.CONTEXT">Context</label>\n                                <md-select name="context" ng-model="vm.inboundroute.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.inboundroute.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="inboundroute-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="InboundRouteActionsController as vm_ac" ng-init="vm_ac.init(vm.inboundroute, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="VOICE.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedInboundRouteApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedInboundRouteApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedInboundRouteApps.length}} {{vm_ac.selectedInboundRouteApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedInboundRouteApps($event)" aria-label="delete selected" translate translate-attr-label="VOICE.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedInboundRouteApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.inboundrouteApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editInboundRouteApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editInboundRouteApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInboundRouteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.inboundrouteApps.rows.length">\n                                                <td md-cell colspan="6">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                        <tfoot md-foot>\n                                            <tr md-row>\n                                                <td md-cell colspan="7">\n                                                    <span><em translate="VOICE.LEGEND.CUSTOM_APPLICATION">(*) - Custom application.</em></span>\n                                                </td>\n                                            </tr>\n                                        </tfoot>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/voice/views/inboundroutes/inboundroutes.html",'<div id="inboundroutes" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.INBOUNDROUTES">InboundRoutes</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedInboundRoutes.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedInboundRoutes =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-inboundroutes-count">\n                    <span>{{vm.selectedInboundRoutes.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="INBOUNDROUTES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllInboundRoutes()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectInboundRoutes()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedInboundRoutes" csv-label="true" filename="inboundroutes.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedInboundRoutes($event)" aria-label="delete selected" translate translate-attr-label="INBOUNDROUTES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- INBOUNDROUTE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedInboundRoutes" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getInboundRoutes">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="exten">{{ \'VOICE.PHONENUMBER\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.inboundroutes.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="inboundroute" md-select-id="id" ng-repeat="inboundroute in vm.inboundroutes.rows">\n                                <td md-cell ng-if="inboundroute.userpic"><img class="avatar" alt="{{inboundroute.name}}" ng-src="api/users/{{inboundroute.id}}/avatar" /></td>\n                                <td md-cell ng-if="!inboundroute.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{inboundroute.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(inboundroute, ev) : vm.createOrEditInboundRoute($event, inboundroute)" md-cell class="id ">{{inboundroute.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(inboundroute, ev) : vm.createOrEditInboundRoute($event, inboundroute)" md-cell class="exten ">{{inboundroute.exten}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(inboundroute, ev) : vm.createOrEditInboundRoute($event, inboundroute)" md-cell class="description ">{{inboundroute.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(inboundroute, $event    )" translate="VOICE.EDIT_INBOUNDROUTE">\n                                                    Edit InboundRoute\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(inboundroute, $event    )" translate="VOICE.DELETE_INBOUNDROUTE">\n                                                    Delete InboundRoute\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.inboundroutes.count}}" md-on-paginate="vm.getInboundRoutes" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / INBOUNDROUTE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD INBOUNDROUTE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-inboundroute-button" ng-click="vm.createOrEditInboundRoute($event)" aria-label="add inboundroute" translate translate-attr-aria-label="VOICE.ADD_INBOUNDROUTE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD INBOUNDROUTE BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/internalroutes/create/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PHONENUMBER">PhoneNumber</label>\n                <input type="text" name="exten" ng-model="vm.internalroute.exten" ng-required="true" autofocus>\n\n                <div ng-messages="internalrouteForm[\'exten\'].$error" ng-show="internalrouteForm[\'exten\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PHONENUMBER_REQUIRED">PhoneNumber field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CONTEXT">Context</label>\n                <md-select name="context" ng-model="vm.internalroute.context" required>\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteForm[\'context\'].$error" ng-show="internalrouteForm[\'context\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.internalroute.description">\n\n                <div ng-messages="internalrouteForm[\'description\'].$error" ng-show="internalrouteForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newInternalRoute" ng-click="vm.saveInternalRoute()" class="send-button md-accent md-raised" ng-disabled="internalrouteForm.$invalid || internalrouteForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newInternalRoute" ng-click="vm.addNewInternalRoute()" class="send-button md-accent md-raised" ng-disabled="internalrouteForm.$invalid" aria-label="ADD" translate="VOICE.ADD_INTERNALROUTE" translate-attr-aria-label="VOICE.ADD_INTERNALROUTE">\n                    ADD INTERNALROUTE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newInternalRoute" ng-click="vm.deleteInternalRoute($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/agi/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PROJECT">Project</label>\n                <md-select name="project" ng-model="vm.agi.project" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'agi://127.0.0.1/square,{{project.name}}\'" ng-repeat="project in vm.projects" ng-disabled="project.canSelect === false">{{ project.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'project\'].$error" ng-show="internalrouteFormApp[\'project\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PROJECT_REQUIRED">Project field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/custom/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.APPLICATION_NAME">Application_Name</label>\n                <input type="text" name="app" ng-model="vm.custom.app" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'app\'].$error" ng-show="internalrouteFormApp[\'app\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.APPLICATION_NAME_REQUIRED">Application_Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.ARGUMENTS">Arguments</label>\n                <input type="text" name="appdata" ng-model="vm.custom.appdata" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'appdata\'].$error" ng-show="internalrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.ARGUMENTS_REQUIRED">Arguments field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/dial/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TECHNOLOGY/RESOURCE">Technology/Resource</label>\n                <input type="text" name="tech" ng-model="vm.dial.tech" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'tech\'].$error" ng-show="internalrouteFormApp[\'tech\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TECHNOLOGY/RESOURCE_REQUIRED">Technology/Resource field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.dial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'timeout\'].$error" ng-show="internalrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.dial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.dial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'url\'].$error" ng-show="internalrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/externaldial/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TRUNK">Trunk</label>\n                <md-select name="trunk" ng-model="vm.externaldial.trunk" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="trunk.name" ng-repeat="trunk in vm.trunks" ng-disabled="trunk.canSelect === false">{{ trunk.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'trunk\'].$error" ng-show="internalrouteFormApp[\'trunk\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PHONE">Phone</label>\n                <input type="text" name="phone" ng-model="vm.externaldial.phone" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'phone\'].$error" ng-show="internalrouteFormApp[\'phone\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.externaldial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'timeout\'].$error" ng-show="internalrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.externaldial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.externaldial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'url\'].$error" ng-show="internalrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/goto/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CONTEXT">Context</label>\n                <md-select name="context" ng-model="vm.goto.context" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'context\'].$error" ng-show="internalrouteFormApp[\'context\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.EXTENSION">Extension</label>\n                <input type="text" name="extension" ng-model="vm.goto.extension" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'extension\'].$error" ng-show="internalrouteFormApp[\'extension\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.EXTENSION_REQUIRED">Extension field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PRIORITY">Priority</label>\n                <input type="text" name="priority" ng-model="vm.goto.priority" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'priority\'].$error" ng-show="internalrouteFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/hangup/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.HANGUP_CAUSE">Hangup_Cause</label>\n                <md-select name="appdata" ng-model="vm.hangup.appdata" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n\n                    <md-option ng-value="\'1\'"> {{ \'VOICE.HANGUPCAUSE_1\' | translate }} </md-option>\n\n                    <md-option ng-value="\'16\'"> {{ \'VOICE.HANGUPCAUSE_16\' | translate }} </md-option>\n\n                    <md-option ng-value="\'17\'"> {{ \'VOICE.HANGUPCAUSE_17\' | translate }} </md-option>\n\n                    <md-option ng-value="\'18\'"> {{ \'VOICE.HANGUPCAUSE_18\' | translate }} </md-option>\n\n                    <md-option ng-value="\'21\'"> {{ \'VOICE.HANGUPCAUSE_21\' | translate }} </md-option>\n\n                    <md-option ng-value="\'22\'"> {{ \'VOICE.HANGUPCAUSE_22\' | translate }} </md-option>\n\n                    <md-option ng-value="\'27\'"> {{ \'VOICE.HANGUPCAUSE_27\' | translate }} </md-option>\n\n                    <md-option ng-value="\'38\'"> {{ \'VOICE.HANGUPCAUSE_38\' | translate }} </md-option>\n\n                    <md-option ng-value="\'41\'"> {{ \'VOICE.HANGUPCAUSE_41\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'appdata\'].$error" ng-show="internalrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.HANGUP_CAUSE_REQUIRED">Hangup_Cause field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/internaldial/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.USER">User</label>\n                <md-select name="user" ng-model="vm.internaldial.user" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'SIP/{{user.name}}\'" ng-repeat="user in vm.users" ng-disabled="user.canSelect === false">{{ user.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'user\'].$error" ng-show="internalrouteFormApp[\'user\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.USER_REQUIRED">User field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.internaldial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'timeout\'].$error" ng-show="internalrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.internaldial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.internaldial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'url\'].$error" ng-show="internalrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/playback/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.AUDIO_FILES">Audio_Files</label>\n                <md-select name="appdata" ng-model="vm.playback.appdata" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/{{appdata.save_name}}\'" ng-repeat="appdata in vm.sounds" ng-disabled="appdata.canSelect === false">{{ appdata.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'appdata\'].$error" ng-show="internalrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.AUDIO_FILES_REQUIRED">Audio_Files field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.playback.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.playback.answer" aria-label="Answer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="VOICE.ANSWER">Answer</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/queue/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'queue\'].$error" ng-show="internalrouteFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.queue.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="URL" ng-model="vm.queue.URL" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'URL\'].$error" ng-show="internalrouteFormApp[\'URL\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.ANNOUNCE_OVERRIDES">Announce_Overrides</label>\n                <md-select name="sound" ng-model="vm.queue.sound" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/{{sound.save_name}}\'" ng-repeat="sound in vm.sounds" ng-disabled="sound.canSelect === false">{{ sound.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'sound\'].$error" ng-show="internalrouteFormApp[\'sound\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.ANNOUNCE_OVERRIDES_REQUIRED">Announce_Overrides field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'timeout\'].$error" ng-show="internalrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.AGI">Agi</label>\n                <input type="text" name="agi" ng-model="vm.queue.agi" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'agi\'].$error" ng-show="internalrouteFormApp[\'agi\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.AGI_REQUIRED">Agi field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.MACRO">Macro</label>\n                <input type="text" name="macro" ng-model="vm.queue.macro" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'macro\'].$error" ng-show="internalrouteFormApp[\'macro\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.MACRO_REQUIRED">Macro field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.GOSUB">GoSub</label>\n                <input type="text" name="gosub" ng-model="vm.queue.gosub" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'gosub\'].$error" ng-show="internalrouteFormApp[\'gosub\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.GOSUB_REQUIRED">GoSub field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.RULE">Rule</label>\n                <input type="text" name="rule" ng-model="vm.queue.rule" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'rule\'].$error" ng-show="internalrouteFormApp[\'rule\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.RULE_REQUIRED">Rule field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.POSITION">Position</label>\n                <input type="number" name="position" ng-model="vm.queue.position" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'position\'].$error" ng-show="internalrouteFormApp[\'position\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.POSITION_REQUIRED">Position field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.POSITION_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Position must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.queue.answer" aria-label="Answer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="VOICE.ANSWER">Answer</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/ringgroup/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.USER">User</label>\n                <md-select name="multipleUsers" ng-model="vm.ringgroup.multipleUsers" autofocus multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'SIP/{{multipleUsers.name}}\'" ng-repeat="multipleUsers in vm.users" ng-disabled="multipleUsers.canSelect === false">{{ multipleUsers.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'multipleUsers\'].$error" ng-show="internalrouteFormApp[\'multipleUsers\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.USER_REQUIRED">User field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.ringgroup.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'timeout\'].$error" ng-show="internalrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.ringgroup.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.ringgroup.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'url\'].$error" ng-show="internalrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/set/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.VARIABLE">Variable</label>\n                <md-select name="name" ng-model="vm.set.name" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="name.name" ng-repeat="name in vm.variables" ng-disabled="name.canSelect === false">{{ name.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'name\'].$error" ng-show="internalrouteFormApp[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.set.value" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'value\'].$error" ng-show="internalrouteFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/voicemail/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.MAILBOX@CONTEXT">Mailbox@Context</label>\n                <md-select name="voiceMail" ng-model="vm.voicemail.voiceMail" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'{{voiceMail.mailbox}}@from-voicemail\'" ng-repeat="voiceMail in vm.voiceMails" ng-disabled="voiceMail.canSelect === false">{{ voiceMail.mailbox }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'voiceMail\'].$error" ng-show="internalrouteFormApp[\'voiceMail\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.MAILBOX@CONTEXT_REQUIRED">Mailbox@Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.voicemail.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/view.html",'<div id="voice-internalroute" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-internalroutes-button md-icon-button" aria-label="Go to internalroutes" ng-click="vm.gotoInternalRoutes()" translate translate-attr-aria-label="VOICE.GO_TO_INTERNALROUTES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="internalroute-image" hide-xs>\n                    <img ng-src="assets/images/business/internalroutes.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.internalroute.id}}\n                        <span ng-if="vm.internalroute.name">{{vm.internalroute.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="VOICE.CREATED_AT"></span> <span>{{vm.internalroute.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveInternalRoute()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (actionsForm.$invalid)" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="internalroute-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.PHONENUMBER">PhoneNumber</label>\n                                <input type="text" name="exten" ng-model="vm.internalroute.exten" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'exten\'].$error" ng-show="generalForm[\'exten\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.PHONENUMBER_REQUIRED">PhoneNumber field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.CONTEXT">Context</label>\n                                <md-select name="context" ng-model="vm.internalroute.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.internalroute.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="internalroute-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="InternalRouteActionsController as vm_ac" ng-init="vm_ac.init(vm.internalroute, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="VOICE.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedInternalRouteApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedInternalRouteApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedInternalRouteApps.length}} {{vm_ac.selectedInternalRouteApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedInternalRouteApps($event)" aria-label="delete selected" translate translate-attr-label="VOICE.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedInternalRouteApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.internalrouteApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editInternalRouteApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editInternalRouteApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInternalRouteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.internalrouteApps.rows.length">\n                                                <td md-cell colspan="6">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                        <tfoot md-foot>\n                                            <tr md-row>\n                                                <td md-cell colspan="7">\n                                                    <span><em translate="VOICE.LEGEND.CUSTOM_APPLICATION">(*) - Custom application.</em></span>\n                                                </td>\n                                            </tr>\n                                        </tfoot>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/voice/views/internalroutes/internalroutes.html",'<div id="internalroutes" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.INTERNALROUTES">InternalRoutes</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedInternalRoutes.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedInternalRoutes =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-internalroutes-count">\n                    <span>{{vm.selectedInternalRoutes.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="INTERNALROUTES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllInternalRoutes()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectInternalRoutes()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedInternalRoutes" csv-label="true" filename="internalroutes.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedInternalRoutes($event)" aria-label="delete selected" translate translate-attr-label="INTERNALROUTES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- INTERNALROUTE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedInternalRoutes" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getInternalRoutes">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="exten">{{ \'VOICE.PHONENUMBER\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.internalroutes.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="internalroute" md-select-id="id" ng-repeat="internalroute in vm.internalroutes.rows">\n                                <td md-cell ng-if="internalroute.userpic"><img class="avatar" alt="{{internalroute.name}}" ng-src="api/users/{{internalroute.id}}/avatar" /></td>\n                                <td md-cell ng-if="!internalroute.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{internalroute.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(internalroute, ev) : vm.createOrEditInternalRoute($event, internalroute)" md-cell class="id ">{{internalroute.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(internalroute, ev) : vm.createOrEditInternalRoute($event, internalroute)" md-cell class="exten ">{{internalroute.exten}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(internalroute, ev) : vm.createOrEditInternalRoute($event, internalroute)" md-cell class="description ">{{internalroute.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(internalroute, $event    )" translate="VOICE.EDIT_INTERNALROUTE">\n                                                    Edit InternalRoute\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(internalroute, $event    )" translate="VOICE.DELETE_INTERNALROUTE">\n                                                    Delete InternalRoute\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.internalroutes.count}}" md-on-paginate="vm.getInternalRoutes" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / INTERNALROUTE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD INTERNALROUTE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-internalroute-button" ng-click="vm.createOrEditInternalRoute($event)" aria-label="add internalroute" translate translate-attr-aria-label="VOICE.ADD_INTERNALROUTE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD INTERNALROUTE BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/musiconholds/create/dialog.html",'<md-dialog class="musiconhold-dialog" aria-label="New MusicOnHold">\n    <form name="musiconholdForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.musiconhold.name" ng-required="true" autofocus ng-disabled="!vm.newMusicOnHold">\n\n                <div ng-messages="musiconholdForm[\'name\'].$error" ng-show="musiconholdForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.MODE">Mode</label>\n                <md-select name="mode" ng-model="vm.musiconhold.mode" required ng-disabled="!vm.newMusicOnHold">\n\n                    <md-option ng-value="\'files\'"> {{ \'VOICE.FILES\' | translate }} </md-option>\n\n                    <md-option ng-value="\'custom\'"> {{ \'VOICE.CUSTOM\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="musiconholdForm[\'mode\'].$error" ng-show="musiconholdForm[\'mode\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.MODE_REQUIRED">Mode field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.musiconhold.mode == \'custom\'" class="md-block">\n                <label translate="VOICE.DIRECTORY">Directory</label>\n                <input type="" name="directory" ng-model="vm.musiconhold.directory">\n\n                <div ng-messages="musiconholdForm[\'directory\'].$error" ng-show="musiconholdForm[\'directory\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DIRECTORY_REQUIRED">Directory field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.musiconhold.mode == \'custom\'" class="md-block">\n                <label translate="VOICE.APPLICATION">Application</label>\n                <input type="text" name="application" ng-model="vm.musiconhold.application" ng-required="true">\n\n                <div ng-messages="musiconholdForm[\'application\'].$error" ng-show="musiconholdForm[\'application\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.APPLICATION_REQUIRED">Application field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.musiconhold.mode == \'files\'" class="md-block">\n                <label translate="VOICE.SORT">Sort</label>\n                <md-select name="sort" ng-model="vm.musiconhold.sort">\n\n                    <md-option ng-value="\'random\'"> {{ \'VOICE.RANDOM\' | translate }} </md-option>\n\n                    <md-option ng-value="\'alpha\'"> {{ \'VOICE.ALPHABETICAL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="musiconholdForm[\'sort\'].$error" ng-show="musiconholdForm[\'sort\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.SORT_REQUIRED">Sort field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMusicOnHold" ng-click="vm.saveMusicOnHold()" class="send-button md-accent md-raised" ng-disabled="musiconholdForm.$invalid || musiconholdForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMusicOnHold" ng-click="vm.addNewMusicOnHold()" class="send-button md-accent md-raised" ng-disabled="musiconholdForm.$invalid" aria-label="ADD" translate="VOICE.ADD_MUSICONHOLD" translate-attr-aria-label="VOICE.ADD_MUSICONHOLD">\n                    ADD MUSICONHOLD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMusicOnHold" ng-click="vm.deleteMusicOnHold($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/musiconholds/edit/mohSounds/dialog.html",'<md-dialog class="mohSound-dialog" aria-label="New MohSound">\n    <form name="mohSoundForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.FILE">File</label>\n                <md-select name="id" ng-model="vm.mohSound.id" autofocus>\n                    <md-option ng-value="id.id" ng-repeat="id in vm.sounds" ng-disabled="id.canSelect === false">{{ id.name }}</md-option>\n                </md-select>\n                <div ng-messages="mohSoundForm[\'id\'].$error" ng-show="mohSoundForm[\'id\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.FILE_REQUIRED">File field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMohSound" ng-click="vm.saveMohSound()" class="send-button md-accent md-raised" ng-disabled="mohSoundForm.$invalid || mohSoundForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMohSound" ng-click="vm.addNewMohSound()" class="send-button md-accent md-raised" ng-disabled="mohSoundForm.$invalid" aria-label="ADD" translate="VOICE.ADD_MOHSOUND" translate-attr-aria-label="VOICE.ADD_MOHSOUND">\n                    ADD MOHSOUND\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMohSound" ng-click="vm.deleteMohSound($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/musiconholds/edit/view.html",'<div id="voice-musiconhold" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-musiconholds-button md-icon-button" aria-label="Go to musiconholds" ng-click="vm.gotoMusicOnHolds()" translate translate-attr-aria-label="VOICE.GO_TO_MUSICONHOLDS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="musiconhold-image" hide-xs>\n                    <img ng-src="assets/images/business/musiconholds.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.musiconhold.id}}\n                        <span ng-if="vm.musiconhold.name">{{vm.musiconhold.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="VOICE.CREATED_AT"></span> <span>{{vm.musiconhold.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveMusicOnHold()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (mohSoundsForm.$invalid)" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="musiconhold-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.musiconhold.name" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MODE">Mode</label>\n                                <md-select name="mode" ng-model="vm.musiconhold.mode" required disabled>\n\n                                    <md-option ng-value="\'files\'"> {{ \'VOICE.FILES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'custom\'"> {{ \'VOICE.CUSTOM\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'mode\'].$error" ng-show="generalForm[\'mode\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MODE_REQUIRED">Mode field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.musiconhold.mode == \'custom\'" class="md-block">\n                                <label translate="VOICE.DIRECTORY">Directory</label>\n                                <input type="" name="directory" ng-model="vm.musiconhold.directory" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'directory\'].$error" ng-show="generalForm[\'directory\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.DIRECTORY_REQUIRED">Directory field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.musiconhold.mode == \'custom\'" class="md-block">\n                                <label translate="VOICE.APPLICATION">Application</label>\n                                <input type="text" name="application" ng-model="vm.musiconhold.application" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'application\'].$error" ng-show="generalForm[\'application\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.APPLICATION_REQUIRED">Application field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.musiconhold.mode == \'files\'" class="md-block">\n                                <label translate="VOICE.SORT">Sort</label>\n                                <md-select name="sort" ng-model="vm.musiconhold.sort" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'random\'"> {{ \'VOICE.RANDOM\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'alpha\'"> {{ \'VOICE.ALPHABETICAL\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'sort\'].$error" ng-show="generalForm[\'sort\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.SORT_REQUIRED">Sort field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.AUDIOFILES">AUDIOFILES</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="musiconhold-detail-form-container mohsounds md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="MusicOnHoldMohSoundsController as vm_dc" ng-init="vm_dc.init(vm.musiconhold, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedMusicOnHoldMohSounds.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="VOICE.MOHSOUNDS">MohSounds</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditMusicOnHoldMohSound($event)" aria-label="add mohSound" translate translate-attr-label="VOICE.ADD_MOHSOUND">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedMusicOnHoldMohSounds.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedMusicOnHoldMohSounds.length}} {{vm_dc.selectedMusicOnHoldMohSounds.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedMusicOnHoldMohSounds" csv-label="true" filename="musiconholds.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedMusicOnHoldMohSounds($event)" aria-label="delete selected" translate translate-attr-label="MUSICONHOLDS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedMusicOnHoldMohSounds" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getMusicOnHoldMohSounds">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                            <th md-column md-order-by="audio">{{ \'VOICE.AUDIO\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'VOICE.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="mohSound" md-select-id="id" ng-repeat="mohSound in vm_dc.musiconholdMohSounds.rows">\n                                            <td md-cell>{{mohSound.id}}</td>\n                                            <td md-cell>\n                                                \x3c!-- audio recording directive --\x3e\n                                                <ms-recording id="mohSound.id" model="\'sound\'"></ms-recording>\n                                                \x3c!-- / audio recording directive --\x3e\n                                            </td>\n                                            <td md-cell>{{mohSound.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.voiceMusicOnHoldDownload(mohSound, $event)" translate="VOICE.DOWNLOAD_MOHSOUND">\n                                                                Download MohSound\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(mohSound, $event)" translate="VOICE.DELETE_MOHSOUND">\n                                                                Delete MohSound\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.musiconholdMohSounds.rows.length">\n                                            <td md-cell colspan="8">\n                                                <span class="text-boxed-ligth" translate="VOICE.NO_MOHSOUND_AVAILABLE">No mohsound available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.musiconholdMohSounds.count}}" md-on-paginate="vm_dc.getMusicOnHoldMohSounds" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/voice/views/musiconholds/musiconholds.html",'<div id="musiconholds" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.MUSICONHOLDS">MusicOnHolds</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedMusicOnHolds.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedMusicOnHolds =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-musiconholds-count">\n                    <span>{{vm.selectedMusicOnHolds.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="MUSICONHOLDS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllMusicOnHolds()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectMusicOnHolds()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedMusicOnHolds" csv-label="true" filename="musiconholds.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedMusicOnHolds($event)" aria-label="delete selected" translate translate-attr-label="MUSICONHOLDS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- MUSICONHOLD TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedMusicOnHolds" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMusicOnHolds">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="mode">{{ \'VOICE.MODE\' | translate }}</th>\n                                <th md-column md-order-by="sort">{{ \'VOICE.SORT\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.musiconholds.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="musiconhold" md-select-id="id" ng-repeat="musiconhold in vm.musiconholds.rows">\n                                <td md-cell ng-if="musiconhold.userpic"><img class="avatar" alt="{{musiconhold.name}}" ng-src="api/users/{{musiconhold.id}}/avatar" /></td>\n                                <td md-cell ng-if="!musiconhold.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{musiconhold.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(musiconhold, ev) : vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="id ">{{musiconhold.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(musiconhold, ev) : vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="name ">{{musiconhold.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(musiconhold, ev) : vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="mode ">{{ \'VOICE.\' + vm.arraymode[musiconhold.mode].option | uppercase | translate }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(musiconhold, ev) : vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="sort ">{{ \'VOICE.\' + vm.arraysort[musiconhold.sort].option | uppercase | translate }}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(musiconhold, $event    )" translate="VOICE.EDIT_MUSICONHOLD">\n                                                    Edit MusicOnHold\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(musiconhold, $event    )" translate="VOICE.DELETE_MUSICONHOLD">\n                                                    Delete MusicOnHold\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.musiconholds.count}}" md-on-paginate="vm.getMusicOnHolds" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / MUSICONHOLD TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD MUSICONHOLD BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-musiconhold-button" ng-click="vm.createOrEditMusicOnHold($event)" aria-label="add musiconhold" translate translate-attr-aria-label="VOICE.ADD_MUSICONHOLD">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD MUSICONHOLD BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/outboundroutes/create/dialog.html",'<md-dialog class="outboundroute-dialog" aria-label="New OutboundRoute">\n    <form name="outboundrouteForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PHONENUMBER">PhoneNumber</label>\n                <input type="text" name="exten" ng-model="vm.outboundroute.exten" ng-required="true" autofocus>\n\n                <div ng-messages="outboundrouteForm[\'exten\'].$error" ng-show="outboundrouteForm[\'exten\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PHONENUMBER_REQUIRED">PhoneNumber field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CONTEXT">Context</label>\n                <md-select name="context" ng-model="vm.outboundroute.context" required>\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                </md-select>\n                <div ng-messages="outboundrouteForm[\'context\'].$error" ng-show="outboundrouteForm[\'context\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.RECORDING">Recording</label>\n                <md-select name="recordingFormat" ng-model="vm.outboundroute.recordingFormat" required>\n                    <md-option ng-value="\'none\'">none</md-option>\n                    <md-option ng-value="\'wav\'">wav</md-option>\n                    <md-option ng-value="\'WAV\'">wav49</md-option>\n                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                </md-select>\n                <div class="hint"><span translate="VOICE.HELP.RECORDING"></span></div>\n                <div ng-messages="outboundrouteForm[\'recordingFormat\'].$error" ng-show="outboundrouteForm[\'recordingFormat\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.RECORDING_REQUIRED">Recording field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CUTDIGITS">CutDigits</label>\n                <input type="number" name="cutdigits" ng-model="vm.outboundroute.cutdigits" min="0">\n\n                <div ng-messages="outboundrouteForm[\'cutdigits\'].$error" ng-show="outboundrouteForm[\'cutdigits\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CUTDIGITS_REQUIRED">CutDigits field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.CUTDIGITS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CutDigits must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.outboundroute.description">\n\n                <div ng-messages="outboundrouteForm[\'description\'].$error" ng-show="outboundrouteForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newOutboundRoute" ng-click="vm.saveOutboundRoute()" class="send-button md-accent md-raised" ng-disabled="outboundrouteForm.$invalid || outboundrouteForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newOutboundRoute" ng-click="vm.addNewOutboundRoute()" class="send-button md-accent md-raised" ng-disabled="outboundrouteForm.$invalid" aria-label="ADD" translate="VOICE.ADD_OUTBOUNDROUTE" translate-attr-aria-label="VOICE.ADD_OUTBOUNDROUTE">\n                    ADD OUTBOUNDROUTE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newOutboundRoute" ng-click="vm.deleteOutboundRoute($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/outboundroutes/edit/apps/custom/dialog.html",'<md-dialog class="outboundroute-dialog" aria-label="New OutboundRoute">\n    <form name="outboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.APPLICATION_NAME">Application_Name</label>\n                <input type="text" name="app" ng-model="vm.custom.app" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="outboundrouteFormApp[\'app\'].$error" ng-show="outboundrouteFormApp[\'app\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.APPLICATION_NAME_REQUIRED">Application_Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.ARGUMENTS">Arguments</label>\n                <input type="text" name="appdata" ng-model="vm.custom.appdata" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="outboundrouteFormApp[\'appdata\'].$error" ng-show="outboundrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.ARGUMENTS_REQUIRED">Arguments field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOutboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="outboundrouteFormApp.$invalid || outboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/outboundroutes/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/outboundroutes/edit/apps/outbounddial/dialog.html",'<md-dialog class="outboundroute-dialog" aria-label="New OutboundRoute">\n    <form name="outboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TRUNK">Trunk</label>\n                <md-select name="trunk" ng-model="vm.outbounddial.trunk" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="trunk.name" ng-repeat="trunk in vm.trunks" ng-disabled="trunk.canSelect === false">{{ trunk.name }}</md-option>\n                </md-select>\n                <div ng-messages="outboundrouteFormApp[\'trunk\'].$error" ng-show="outboundrouteFormApp[\'trunk\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CALLER_ID">Caller_ID</label>\n                <input type="text" name="callerID" ng-model="vm.outbounddial.callerID" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="VOICE.HELP.CALLER_ID"></span></div>\n                <div ng-messages="outboundrouteFormApp[\'callerID\'].$error" ng-show="outboundrouteFormApp[\'callerID\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CALLER_ID_REQUIRED">Caller_ID field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PREFIX">Prefix</label>\n                <input type="text" name="prefix" ng-model="vm.outbounddial.prefix" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="outboundrouteFormApp[\'prefix\'].$error" ng-show="outboundrouteFormApp[\'prefix\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PREFIX_REQUIRED">Prefix field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TAGS">Tags</label>\n                <md-select name="tag" ng-model="vm.outbounddial.tag" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'--\'">None</md-option>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags" ng-disabled="tag.canSelect === false">{{ tag.name }}</md-option>\n                </md-select>\n                <div ng-messages="outboundrouteFormApp[\'tag\'].$error" ng-show="outboundrouteFormApp[\'tag\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TAGS_REQUIRED">Tags field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.outbounddial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="outboundrouteFormApp[\'timeout\'].$error" ng-show="outboundrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.outbounddial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="outboundrouteFormApp[\'options\'].$error" ng-show="outboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.outbounddial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="outboundrouteFormApp[\'url\'].$error" ng-show="outboundrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOutboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="outboundrouteFormApp.$invalid || outboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/outboundroutes/edit/view.html",'<div id="voice-outboundroute" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-outboundroutes-button md-icon-button" aria-label="Go to outboundroutes" ng-click="vm.gotoOutboundRoutes()" translate translate-attr-aria-label="VOICE.GO_TO_OUTBOUNDROUTES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="outboundroute-image" hide-xs>\n                    <img ng-src="assets/images/business/outboundroutes.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.outboundroute.id}}\n                        <span ng-if="vm.outboundroute.name">{{vm.outboundroute.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="VOICE.CREATED_AT"></span> <span>{{vm.outboundroute.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveOutboundRoute()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (actionsForm.$invalid)" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="outboundroute-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.PHONENUMBER">PhoneNumber</label>\n                                <input type="text" name="exten" ng-model="vm.outboundroute.exten" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'exten\'].$error" ng-show="generalForm[\'exten\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.PHONENUMBER_REQUIRED">PhoneNumber field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.CONTEXT">Context</label>\n                                <md-select name="context" ng-model="vm.outboundroute.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.RECORDING">Recording</label>\n                                <md-select name="recordingFormat" ng-model="vm.outboundroute.recordingFormat" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'none\'">none</md-option>\n                                    <md-option ng-value="\'wav\'">wav</md-option>\n                                    <md-option ng-value="\'WAV\'">wav49</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.RECORDING"></span></div>\n                                <div ng-messages="generalForm[\'recordingFormat\'].$error" ng-show="generalForm[\'recordingFormat\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.RECORDING_REQUIRED">Recording field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.CUTDIGITS">CutDigits</label>\n                                <input type="number" name="cutdigits" ng-model="vm.outboundroute.cutdigits" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'cutdigits\'].$error" ng-show="generalForm[\'cutdigits\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.CUTDIGITS_REQUIRED">CutDigits field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.CUTDIGITS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CutDigits must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.outboundroute.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="outboundroute-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="OutboundRouteActionsController as vm_ac" ng-init="vm_ac.init(vm.outboundroute, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="VOICE.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedOutboundRouteApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedOutboundRouteApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedOutboundRouteApps.length}} {{vm_ac.selectedOutboundRouteApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedOutboundRouteApps($event)" aria-label="delete selected" translate translate-attr-label="VOICE.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedOutboundRouteApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.outboundrouteApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editOutboundRouteApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editOutboundRouteApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editOutboundRouteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.outboundrouteApps.rows.length">\n                                                <td md-cell colspan="6">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                        <tfoot md-foot>\n                                            <tr md-row>\n                                                <td md-cell colspan="7">\n                                                    <span><em translate="VOICE.LEGEND.CUSTOM_APPLICATION">(*) - Custom application.</em></span>\n                                                </td>\n                                            </tr>\n                                        </tfoot>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/voice/views/outboundroutes/outboundroutes.html",'<div id="outboundroutes" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.OUTBOUNDROUTES">OutboundRoutes</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedOutboundRoutes.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedOutboundRoutes =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-outboundroutes-count">\n                    <span>{{vm.selectedOutboundRoutes.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="OUTBOUNDROUTES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllOutboundRoutes()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectOutboundRoutes()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedOutboundRoutes" csv-label="true" filename="outboundroutes.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedOutboundRoutes($event)" aria-label="delete selected" translate translate-attr-label="OUTBOUNDROUTES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- OUTBOUNDROUTE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedOutboundRoutes" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getOutboundRoutes">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="exten">{{ \'VOICE.PHONENUMBER\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.outboundroutes.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="outboundroute" md-select-id="id" ng-repeat="outboundroute in vm.outboundroutes.rows">\n                                <td md-cell ng-if="outboundroute.userpic"><img class="avatar" alt="{{outboundroute.name}}" ng-src="api/users/{{outboundroute.id}}/avatar" /></td>\n                                <td md-cell ng-if="!outboundroute.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{outboundroute.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(outboundroute, ev) : vm.createOrEditOutboundRoute($event, outboundroute)" md-cell class="id ">{{outboundroute.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(outboundroute, ev) : vm.createOrEditOutboundRoute($event, outboundroute)" md-cell class="exten ">{{outboundroute.exten}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(outboundroute, ev) : vm.createOrEditOutboundRoute($event, outboundroute)" md-cell class="description ">{{outboundroute.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(outboundroute, $event    )" translate="VOICE.EDIT_OUTBOUNDROUTE">\n                                                    Edit OutboundRoute\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(outboundroute, $event    )" translate="VOICE.DELETE_OUTBOUNDROUTE">\n                                                    Delete OutboundRoute\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.outboundroutes.count}}" md-on-paginate="vm.getOutboundRoutes" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / OUTBOUNDROUTE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD OUTBOUNDROUTE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-outboundroute-button" ng-click="vm.createOrEditOutboundRoute($event)" aria-label="add outboundroute" translate translate-attr-aria-label="VOICE.ADD_OUTBOUNDROUTE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD OUTBOUNDROUTE BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/realtime/abandonedcalls/view.html",'    <md-toolbar class="md-table-toolbar md-default table-header">\n        <div class="md-toolbar-tools" layout="row" layout-align="center center">\n            <span class="md-subhead" translate="DASHBOARDS.ABANDONEDQUEUECALLS">ABANDONED QUEUE CALLS</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.query.filter = undefined" debounce="300"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 black-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getContacts()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.lastAssignedTo" ng-change="vm.getContacts()">\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents.rows">{{agent.name}}</md-option>\n                </md-select>\n            </div>\n            <div ng-if="vm.queues.count" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_CAMPAIGN">Select a Campaign</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.queue" ng-change="vm.getContacts()">\n                    <md-option ng-value="undefined" ng-if="vm.queues.count > 1"><em translate="DASHBOARDS.ALL">All</em></md-option>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues.rows">{{queue.name}}</md-option>\n                </md-select>\n            </div>\n            <md-button class="md-icon-button" ng-click="vm.refresh && vm.refreshContacts($event)" aria-label="Reload" translate translate-attr-label="DASHBOARDS.RELOAD">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n                <md-tooltip ng-if="vm.showTooltip" md-visible="vm.showTooltip">{{\'DASHBOARDS.CLICKRELOAD\' | translate}}</md-tooltip>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getContacts">\n                <tr md-row>\n                    <th md-column md-order-by="id">ID</th>\n                    <th md-column md-order-by="calleridname">{{\'DASHBOARDS.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="calleridnum">{{\'DASHBOARDS.PHONE\' | translate}}</th>\n                    <th md-column md-order-by="queue">{{\'DASHBOARDS.QUEUE\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerabandonAt">{{\'DASHBOARDS.ABANDONAT\' | translate}}</th>\n                    <th md-column md-order-by="lastAssignedTo">{{\'DASHBOARDS.LASTASSIGNEDTO\' | translate}}</th>\n                    <th md-column md-order-by="disposition">{{\'DASHBOARDS.DISPOSITION\' | translate}}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.contacts.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="contact in vm.contacts.rows">\n                    <td md-cell class="id">{{contact.id}}</td>\n                    <td md-cell class="firstName">{{contact.calleridname}}</td>\n                    <td md-cell class="list">{{contact.calleridnum}}</td>\n                    <td md-cell class="list">{{vm.queuesMap[contact.queue]}}</td>\n                    <td md-cell class="list">{{contact.queuecallerabandonAt ? (contact.queuecallerabandonAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{contact.lastAssignedTo}}</td>\n                    <td md-cell class="list">{{contact.disposition}}</td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.ASSIGNTO">Assigned a</md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-if="contact.lastAssignedTo">\n                                                <md-button ng-click="vm.assignedA(contact)"><em translate="DASHBOARDS.NONE">Not Assigned</em></md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.agents.rows.length" ng-repeat="agent in vm.agents.rows">\n                                                <md-button ng-click="vm.assignedA(contact,agent)">{{agent.name}}</md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.DISPOSE">Dispose</md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-if="vm.dispositions.length > 0" ng-repeat="disposition in vm.dispositions">\n                                                <md-button ng-click="vm.disposed(contact, disposition.name)">{{disposition.name}}</md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.contacts.count}}" md-on-paginate="vm.getContacts" md-page-select></md-table-pagination>'),e.put("app/main/apps/voice/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="VOICE.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'VOICE.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'VOICE.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'VOICE.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'VOICE.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'VOICE.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'VOICE.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'VOICE.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'VOICE.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'VOICE.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'VOICE.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'VOICE.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'VOICE.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"VOICE.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"VOICE.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"VOICE.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"VOICE.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"VOICE.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"VOICE.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"VOICE.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"VOICE.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'VOICE.PAGE' | translate}}:', rowsPerPage: '{{'VOICE.ROWSPERPAGE' | translate}}:', of: '{{'VOICE.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/voice/views/realtime/outbound_calls/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="VOICE.OUTBOUND_CALLS">Ooutbound Calls</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- OUTBOUNDS TABLE --\x3e\n<md-table-container>\n    <table md-table>\n        <thead md-head>\n            <tr md-row>\n                <th md-column width="30px"></th>\n                <th md-column>{{ \'VOICE.SOURCE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.DESTINATION\' | translate }}</th>\n                <th md-column>{{ \'VOICE.DURATION\' | translate }}</th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.calls.rows.length">\n                <td md-cell colspan="4">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="call in vm.calls.rows | filter: vm.query.filter | limitTo: vm.query.limit: (vm.query.page - 1) * vm.query.limit">\n                <td md-cell>\n                    <i ng-class="vm.channelStatus[call.channelstatedesc.toLowerCase()]"></i>\n                </td>\n                <td md-cell>\n                    {{call.calleridname}}, {{call.calleridnum}} <span class="text-boxed" ng-if="call.answered">\n                        <timer ng-if="call.answertime" start-time="call.answertime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                    </span>\n                </td>\n                <td md-cell>{{call.exten}}</td>\n                <td md-cell>\n                    <span class="text-boxed" ng-if="call.channelstatedesc.toLowerCase() !== \'hangup\'">\n                        <timer ng-if="call.starttime" start-time="call.starttime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                    </span>\n                    <span class="text-boxed" ng-if="call.channelstatedesc.toLowerCase() === \'hangup\'" translate="VOICE.CLOSING">Closing</span>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.calls.count}}"></md-table-pagination>\n\x3c!-- / OUTBOUNDS TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/voice/views/realtime/queue_calls/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="VOICE.QUEUE_CALLS">Queue Calls</span>\n        \x3c!-- <div flex></div>\n    <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar> --\x3e\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUES TABLE --\x3e\n<md-table-container>\n    <table md-table>\n        <thead md-head>\n            <tr md-row>\n                <th md-column width="30px"></th>\n                <th md-column>{{ \'VOICE.DID\' | translate }}</th>\n                <th md-column>{{ \'VOICE.QUEUE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.CALLER\' | translate }}</th>\n                <th md-column>{{ \'VOICE.AGENT\' | translate }}</th>\n                <th md-column>{{ \'VOICE.DURATION\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.getSize(vm.rpcVoiceQueuesChannels)">\n                <td md-cell colspan="6">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(key, channel) in vm.rpcVoiceQueuesChannels | limitObjectFromTo: vm.queryChannels.limit:(vm.queryChannels.page - 1) * vm.queryChannels.limit">\n                <td md-cell>\n                    <md-icon ng-if="channel.queuecallerleaveAt" md-font-icon="icon-phone-in-talk green-fg"></md-icon>\n                    <md-icon ng-if="!channel.queuecallerleaveAt" md-font-icon="icon-phone-incoming md-accent"></md-icon>\n                </td>\n                <td md-cell>{{channel.exten}}</td>\n                <td md-cell>{{channel.queue}}</td>\n                <td md-cell>{{channel.calleridnum}}</td>\n                <td md-cell>\n                    <span ng-if="channel.queuecallerleaveAt">\n                        {{channel.connectedlinename}}, {{channel.connectedlinenum}}\n                        <span class="text-boxed">\n                            <timer start-time="channel.queuecallerleaveAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </span>\n                    <span ng-if="!channel.queuecallerleaveAt" class="text-boxed">\n                        {{ \'VOICE.WAITING_FOR_AGENT\' | translate }}\n                        <timer start-time="channel.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                    </span>\n                </td>\n                <td md-cell>\n                    <span class="text-boxed">\n                        <timer start-time="channel.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                    </span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="2">\n                            <md-menu-item>\n                                <md-button ng-click="vm.hangup(channel.uniqueid)" translate="VOICE.HANGUP">\n                                    Hangup\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.redirectToNumber($event, channel.uniqueid)" translate="VOICE.REDIRECT_TO_NUMBER">\n                                    Number\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click="$mdMenu.open()" translate="VOICE.REDIRECT_TO_AGENT">Redirect to Agent</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-repeat="agent in vm.agents.rows">\n                                            <md-button ng-click="vm.redirectToAgent(channel.uniqueid, agent.name, agent.context)">{{agent.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.queryChannels.limit" md-page="vm.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm.getSize(vm.rpcVoiceQueuesChannels)}}" md-page-select></md-table-pagination>\n\x3c!-- / QUEUES TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/voice/views/realtime/queue_params/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MOTIONDIALER.QUEUE_PARAMETERS">Params</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column>{{\'\n                        VOICE.NAME\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.TOTAL_OFFERED\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.ANSWERED\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.ABANDONED\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.UNMANAGED\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.AVG_HOLD_TIME\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.AVG_DURATION\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.AVG_BILLABLE\' | translate}}</th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="8">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(id, queue) in vm.queues">\n                <td md-cell>\n                    <span>{{queue.name}}</span>\n                </td>\n                <td md-cell>\n                    \x3c!-- <span class="font-size-20 grey-fg">{{queue.total || 0}}</span> --\x3e\n                    <span class="font-size-20 grey-fg">{{ (queue.answered || 0) + (queue.abandoned || 0) + (queue.unmanaged || 0) }}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.answered || 0}} ({{(queue.total) ? (queue.answered || 0) * 100/queue.total : 0 | number:1}}%)</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.abandoned || 0}} ({{(queue.total) ? (queue.abandoned || 0) * 100/queue.total : 0 | number:1}}%)</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.unmanaged || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.total ? ((queue.sumHoldTime || 0) / queue.total) : 0 | number: 0 | secToTime | date:\'HH:mm:ss\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{(queue.total ? ((queue.sumDuration || 0) / queue.total) : 0) | number: 0 | secToTime | date:\'HH:mm:ss\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.answered ? ((queue.sumBillable || 0) / queue.answered) : 0 | number: 0 | secToTime | date:\'HH:mm:ss\'}}</span>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/voice/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="VOICE.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                <th md-column>{{ \'VOICE.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'VOICE.READY\' | translate }}</th>\n                <th md-column>{{ \'VOICE.WAITING\' | translate }}</th>\n                <th md-column>{{ \'VOICE.TALKING\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="7">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{(vm.queues[value].talking || 0) }}</span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditVoiceQueue($event, vm.queues[value])" translate="VOICE.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="VOICE.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/voice/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.TELEPHONES">Telephones</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.TRUNKS">Trunks</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.QUEUE_CALLS">Queue Calls</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ABANDONEDCALLS">Abandoned Queue Calls</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.QUEUE_PARAMS">Queue Parameters</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.OUTBOUND_CALLS">Outbound Calls</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/voice/views/realtime/telephones/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="VOICE.TELEPHONES">Telephones</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n        \x3c!-- <md-button class="md-icon-button" ng-click="vm.showInfo($event)">\n            <i class="icon-information-outline grey-600-fg">\n              <md-tooltip>{{\'VOICE.INFO\' | translate}}</md-tooltip>\n            </i>\n        </md-button> --\x3e\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTelephones">\n            <tr md-row>\n                <th md-column md-order-by="fullname">{{ \'VOICE.ACCOUNTNAME\' | translate }}</th>\n                <th md-column md-order-by="internal">{{ \'VOICE.INTERNAL\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.telephones">\n                <td md-cell colspan="4">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="telephone" md-select-id="id" ng-repeat="(id, telephone) in vm.telephones">\n                <td md-cell>{{telephone.fullname}}</td>\n                <td md-cell>{{telephone.internal}}</td>\n                <td md-cell>\n                    <i ng-class="vm.stateClass[telephone.state]">\n                        <md-tooltip>{{\'VOICE.\' + telephone.state | uppercase | translate}}</md-tooltip>\n                    </i>\n                </td>\n                <td md-cell>\n                    <i ng-class="vm.statusClass[telephone.status]">\n                        <md-tooltip>{{\'VOICE.\' + telephone.status | uppercase | translate}}</md-tooltip>\n                    </i>\n                    <span ng-if="telephone.status === \'registered\'" class="text-boxed">{{telephone.address}}</span>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getTelephones" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/voice/views/realtime/trunks/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="VOICE.TRUNKS">Telephones</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n        \x3c!-- <md-button class="md-icon-button" ng-click="vm.showInfo($event)">\n      <i class="icon-information-outline grey-600-fg">\n        <md-tooltip>{{\'FAX.INFO\' | translate}}</md-tooltip>\n      </i>\n    </md-button> --\x3e\n    </div>\n</md-toolbar>\n\n\x3c!-- TRUNKS TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head>\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTrunks">\n                <tr md-row>\n                    <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                    <th md-column>{{ \'VOICE.TRUNK_STATUS\' | translate }}</th>\n                    <th md-column>{{ \'VOICE.REGISTRY\' | translate }}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.trunks">\n                <td md-cell colspan="3">\n                    <div layout="row" layout-align="center center">\n                        <span tranlsate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(id, trunk) in vm.trunks">\n                <td md-cell>{{trunk.name}}</td>\n                <td md-cell>\n                    <i ng-class="vm.statusClass[trunk.status.toLowerCase()]">\n                        <md-tooltip>{{\'VOICE.\' + trunk.status | uppercase | translate}}</md-tooltip>\n                    </i>\n                    <span ng-if="trunk.status === \'registered\'" class="text-boxed">{{trunk.address}}</span>\n                </td>\n                <td md-cell>\n                    <i ng-if="trunk.registry" ng-class="(trunk.stateRegistry.toLowerCase() === \'registered\') ? \'green-300-fg icon-checkbox-marked-circle\' : \'red-300-fg icon-close-circle\'">\n                        <md-tooltip>{{\'VOICE.\' + trunk.stateRegistry | uppercase | translate}}</md-tooltip>\n                    </i>\n                    <span ng-if="trunk.registry && trunk.host && trunk.port" class="text-boxed">{{trunk.host}}:{{trunk.port}}</span>\n                    <span ng-if="!trunk.registry" translate="VOICE.NO_REGISTRY">\n                        No Registry\n                    </span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="4">\n                            <md-menu-item>\n                                <md-button ng-click="vm.goToTrunk($event, trunk)" translate="VOICE.EDIT_TRUNK">\n                                    Edit Trunk\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getTrunks" md-page-select></md-table-pagination>\n\x3c!-- / TRUNKS TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/voice/views/voicemails/create/dialog.html",'<md-dialog class="voicemail-dialog" aria-label="New Voicemail">\n    <form name="voicemailForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.FULLNAME">FullName</label>\n                <input type="text" name="fullname" ng-model="vm.voicemail.fullname" ng-required="true" autofocus>\n\n                <div ng-messages="voicemailForm[\'fullname\'].$error" ng-show="voicemailForm[\'fullname\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.FULLNAME_REQUIRED">FullName field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.voicemail.email" ng-required="vm.voicemail.attach === \'yes\'">\n\n                <div ng-messages="voicemailForm[\'email\'].$error" ng-show="voicemailForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="VOICE.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.voicemail.password" placeholder="Password" translate translate-attr-placeholder="VOICE.PASSWORD" required>\n                <div ng-messages="voicemailForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="VOICE.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.newVoicemail ">\n                <label translate="VOICE.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword" required>\n                <div ng-messages="voicemailForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="VOICE.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="VOICE.MAILBOX">MailBox</label>\n                <input type="text" name="mailbox" ng-model="vm.voicemail.mailbox" ng-required="true" ng-disabled="!vm.newVoicemail">\n\n                <div ng-messages="voicemailForm[\'mailbox\'].$error" ng-show="voicemailForm[\'mailbox\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.MAILBOX_REQUIRED">MailBox field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.ATTACH">Attach</label>\n                <md-select name="attach" ng-model="vm.voicemail.attach">\n\n                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="voicemailForm[\'attach\'].$error" ng-show="voicemailForm[\'attach\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.ATTACH_REQUIRED">Attach field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVoicemail" ng-click="vm.saveVoicemail()" class="send-button md-accent md-raised" ng-disabled="voicemailForm.$invalid || voicemailForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVoicemail" ng-click="vm.addNewVoicemail()" class="send-button md-accent md-raised" ng-disabled="voicemailForm.$invalid" aria-label="ADD" translate="VOICE.ADD_VOICEMAIL" translate-attr-aria-label="VOICE.ADD_VOICEMAIL">\n                    ADD VOICEMAIL\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVoicemail" ng-click="vm.deleteVoicemail($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voicemails/edit/view.html",'<div id="voice-voicemail" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-voicemails-button md-icon-button" aria-label="Go to voicemails" ng-click="vm.gotoVoicemails()" translate translate-attr-aria-label="VOICE.GO_TO_VOICEMAILS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="voicemail-image" hide-xs>\n                    <img ng-src="assets/images/business/voicemails.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.voicemail.id}}\n                        <span ng-if="vm.voicemail.name">{{vm.voicemail.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="VOICE.CREATED_AT"></span> <span>{{vm.voicemail.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveVoicemail()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (advancedForm.$invalid) || (messagesForm.$invalid)" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="voicemail-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.FULLNAME">FullName</label>\n                                <input type="text" name="fullname" ng-model="vm.voicemail.fullname" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'fullname\'].$error" ng-show="generalForm[\'fullname\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.FULLNAME_REQUIRED">FullName field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.EMAIL">Email</label>\n                                <input type="email" name="email" ng-model="vm.voicemail.email" ng-required="vm.voicemail.attach === \'yes\'" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'email\'].$error" ng-show="generalForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="VOICE.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.voicemail.password" placeholder="Password" translate translate-attr-placeholder="VOICE.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="VOICE.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block" ng-if="vm.newVoicemail ">\n                                <label translate="VOICE.CONFIRM_PASSWORD">Confirm Password</label>\n                                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword" required>\n                                <div ng-messages="generalForm.confirmPassword.$error" role="alert" multiple>\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>\n                                    </div>\n                                    <div ng-message="passwordMatch">\n                                        <span translate="VOICE.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MAILBOX">MailBox</label>\n                                <input type="text" name="mailbox" ng-model="vm.voicemail.mailbox" ng-required="true" disabled>\n\n                                <div ng-messages="generalForm[\'mailbox\'].$error" ng-show="generalForm[\'mailbox\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MAILBOX_REQUIRED">MailBox field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.VOICEMAIL_CONTEXT">Voicemail_Context</label>\n                                <md-select name="context" ng-model="vm.voicemail.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.VOICEMAIL_CONTEXT"></span></div>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.VOICEMAIL_CONTEXT_REQUIRED">Voicemail_Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="voicemail-detail-form-container advanced md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.ADVANCED">ADVANCED</div>\n                        </div>\n                        <form name="advancedForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.TIMEZONE">TimeZone</label>\n                                <input type="text" name="tz" ng-model="vm.voicemail.tz" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="advancedForm[\'tz\'].$error" ng-show="advancedForm[\'tz\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.TIMEZONE_REQUIRED">TimeZone field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ATTACH">Attach</label>\n                                <md-select name="attach" ng-model="vm.voicemail.attach" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="advancedForm[\'attach\'].$error" ng-show="advancedForm[\'attach\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ATTACH_REQUIRED">Attach field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ENVELOPE">Envelope</label>\n                                <md-select name="envelope" ng-model="vm.voicemail.envelope" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="advancedForm[\'envelope\'].$error" ng-show="advancedForm[\'envelope\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ENVELOPE_REQUIRED">Envelope field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.DELETE">Delete</label>\n                                <md-select name="delete" ng-model="vm.voicemail.delete" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="advancedForm[\'delete\'].$error" ng-show="advancedForm[\'delete\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.DELETE_REQUIRED">Delete field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.EMAILBODY">EmailBody</label>\n                                <input type="text" name="emailbody" ng-model="vm.voicemail.emailbody" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="advancedForm[\'emailbody\'].$error" ng-show="advancedForm[\'emailbody\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.EMAILBODY_REQUIRED">EmailBody field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.EMAILSUBJECT">EmailSubject</label>\n                                <input type="text" name="emailsubject" ng-model="vm.voicemail.emailsubject" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="advancedForm[\'emailsubject\'].$error" ng-show="advancedForm[\'emailsubject\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.EMAILSUBJECT_REQUIRED">EmailSubject field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MAXSECONDS">MaxSeconds</label>\n                                <input type="number" name="maxsecs" ng-model="vm.voicemail.maxsecs" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="advancedForm[\'maxsecs\'].$error" ng-show="advancedForm[\'maxsecs\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MAXSECONDS_REQUIRED">MaxSeconds field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.MAXSECONDS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MaxSeconds must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MAXMESSAGES">MaxMessages</label>\n                                <input type="number" name="maxmsg" ng-model="vm.voicemail.maxmsg" min="0" max="9999" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="advancedForm[\'maxmsg\'].$error" ng-show="advancedForm[\'maxmsg\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MAXMESSAGES_REQUIRED">MaxMessages field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.MAXMESSAGES_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MaxMessages must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="VOICE.ERRORS.MAXMESSAGES_MUST_BE_LESS_THAN_OR_EQUAL_TO">MaxMessages must be a valid greater or equal than</span> <span>9999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.MESSAGES">MESSAGES</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="voicemail-detail-form-container messages md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="VoicemailMessagesController as vm_dc" ng-init="vm_dc.init(vm.voicemail, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedVoicemailMessages.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="VOICE.MESSAGES">Messages</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedVoicemailMessages.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedVoicemailMessages.length}} {{vm_dc.selectedVoicemailMessages.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedVoicemailMessages" csv-label="true" filename="voicemails.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedVoicemailMessages($event)" aria-label="delete selected" translate translate-attr-label="VOICEMAILS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedVoicemailMessages" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getVoicemailMessages">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                            <th md-column md-order-by="callerid">{{ \'VOICE.CALLER_ID\' | translate }}</th>\n                                            <th md-column md-order-by="duration">{{ \'VOICE.DURATION\' | translate }}</th>\n                                            <th md-column md-order-by="audio">{{ \'VOICE.AUDIO\' | translate }}</th>\n                                            <th md-column md-order-by="stamp">{{ \'VOICE.RECEIVED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="message" md-select-id="id" ng-repeat="message in vm_dc.voicemailMessages.rows">\n                                            <td md-cell>{{message.id}}</td>\n                                            <td md-cell>{{message.callerid}}</td>\n                                            <td md-cell>{{message.duration}}</td>\n                                            <td md-cell>\n                                                \x3c!-- audio recording directive --\x3e\n                                                <ms-recording id="message.id" model="\'voiceMailMessage\'"></ms-recording>\n                                                \x3c!-- / audio recording directive --\x3e\n                                            </td>\n                                            <td md-cell>{{message.stamp | date:\'medium\'}}</td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.voiceMailMessageDownload(message, $event)" translate="VOICE.DOWNLOAD_MESSAGE">\n                                                                Download Message\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(message, $event)" translate="VOICE.DELETE_MESSAGE">\n                                                                Delete Message\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.voicemailMessages.rows.length">\n                                            <td md-cell colspan="8">\n                                                <span class="text-boxed-ligth" translate="VOICE.NO_MESSAGE_AVAILABLE">No message available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.voicemailMessages.count}}" md-on-paginate="vm_dc.getVoicemailMessages" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/voice/views/voicemails/voicemails.html",'<div id="voicemails" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.VOICEMAILS">Voicemails</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedVoicemails.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedVoicemails =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-voicemails-count">\n                    <span>{{vm.selectedVoicemails.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="VOICEMAILS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllVoicemails()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectVoicemails()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedVoicemails" csv-label="true" filename="voicemails.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedVoicemails($event)" aria-label="delete selected" translate translate-attr-label="VOICEMAILS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- VOICEMAIL TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedVoicemails" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVoicemails">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="fullname">{{ \'VOICE.FULLNAME\' | translate }}</th>\n                                <th md-column md-order-by="email">{{ \'VOICE.EMAIL\' | translate }}</th>\n                                <th md-column md-order-by="mailbox">{{ \'VOICE.MAILBOX\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.voicemails.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="voicemail" md-select-id="id" ng-repeat="voicemail in vm.voicemails.rows">\n                                <td md-cell ng-if="voicemail.userpic"><img class="avatar" alt="{{voicemail.name}}" ng-src="api/users/{{voicemail.id}}/avatar" /></td>\n                                <td md-cell ng-if="!voicemail.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{voicemail.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voicemail, ev) : vm.createOrEditVoicemail($event, voicemail)" md-cell class="id ">{{voicemail.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voicemail, ev) : vm.createOrEditVoicemail($event, voicemail)" md-cell class="fullname ">{{voicemail.fullname}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voicemail, ev) : vm.createOrEditVoicemail($event, voicemail)" md-cell class="email ">{{voicemail.email}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voicemail, ev) : vm.createOrEditVoicemail($event, voicemail)" md-cell class="mailbox ">{{voicemail.mailbox}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(voicemail, $event    )" translate="VOICE.EDIT_VOICEMAIL">\n                                                    Edit Voicemail\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(voicemail, $event    )" translate="VOICE.DELETE_VOICEMAIL">\n                                                    Delete Voicemail\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.voicemails.count}}" md-on-paginate="vm.getVoicemails" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / VOICEMAIL TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD VOICEMAIL BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-voicemail-button" ng-click="vm.createOrEditVoicemail($event)" aria-label="add voicemail" translate translate-attr-aria-label="VOICE.ADD_VOICEMAIL">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD VOICEMAIL BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/voicePrefixes/create/dialog.html",'<md-dialog class="voicePrefix-dialog" aria-label="New voicePrefix">\n    <form name="voicePrefixForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.voicePrefix.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus>\n\n                <div class="hint"><span translate="VOICE.HELP.NAME"></span></div>\n                <div ng-messages="voicePrefixForm[\'name\'].$error" ng-show="voicePrefixForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="VOICE.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OUTBOUNDROUTE">OutboundRoute</label>\n                <md-select name="VoiceExtensionId" ng-model="vm.voicePrefix.VoiceExtensionId" required>\n                    <md-option ng-value="VoiceExtensionId.id" ng-repeat="VoiceExtensionId in vm.outboundRoutes" ng-disabled="VoiceExtensionId.canSelect === false">{{ VoiceExtensionId.exten }}</md-option>\n                </md-select>\n                <div ng-messages="voicePrefixForm[\'VoiceExtensionId\'].$error" ng-show="voicePrefixForm[\'VoiceExtensionId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OUTBOUNDROUTE_REQUIRED">OutboundRoute field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CALLERIDALL">CallerIdAll</label>\n                <input type="text" name="callerIdAll" ng-model="vm.voicePrefix.callerIdAll" ng-pattern="/&quot;(.*)&quot;\\s&lt;(.*?)&gt;$/">\n\n                <div class="hint"><span translate="VOICE.HELP.CALLERIDALL"></span></div>\n                <div ng-messages="voicePrefixForm[\'callerIdAll\'].$error" ng-show="voicePrefixForm[\'callerIdAll\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CALLERIDALL_REQUIRED">CallerIdAll field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="VOICE.ERRORS.CALLERIDALL_MUST_VALID_PATTERN" translate-values="{ regex: \'/&quot;(.*)&quot;\\s&lt;(.*?)&gt;$/\' }">CallerIdAll must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.voicePrefix.description">\n\n                <div ng-messages="voicePrefixForm[\'description\'].$error" ng-show="voicePrefixForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newvoicePrefix" ng-click="vm.savevoicePrefix()" class="send-button md-accent md-raised" ng-disabled="voicePrefixForm.$invalid || voicePrefixForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newvoicePrefix" ng-click="vm.addNewvoicePrefix()" class="send-button md-accent md-raised" ng-disabled="voicePrefixForm.$invalid" aria-label="ADD" translate="VOICE.ADD_VOICEPREFIX" translate-attr-aria-label="VOICE.ADD_VOICEPREFIX">\n                    ADD VOICEPREFIX\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newvoicePrefix" ng-click="vm.deletevoicePrefix($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voicePrefixes/edit/agentadd/agentadd.html",'<md-dialog class="voicePrefix-dialog" aria-label="voicePrefix" ng-init="vm.onInit()">\n    <form name="voicePrefixForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="VOICE.AGENTADD_VOICEPREFIX">Add Agent to voicePrefix</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voicePrefixes/voicePrefixes.html",'<div id="voicePrefixes" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.VOICEPREFIXES">VoicePrefixes</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedVoicePrefixes.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedVoicePrefixes =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-voicePrefixes-count">\n                    <span>{{vm.selectedVoicePrefixes.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="VOICEPREFIXES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllVoicePrefixes()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectVoicePrefixes()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedVoicePrefixes" csv-label="true" filename="voicePrefixes.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedVoicePrefixes($event)" aria-label="delete selected" translate translate-attr-label="VOICEPREFIXES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- VOICEPREFIX TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedVoicePrefixes" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVoicePrefixes">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="VoiceExtensionId">{{ \'VOICE.OUTBOUNDROUTE\' | translate }}</th>\n                                <th md-column md-order-by="callerIdAll">{{ \'VOICE.CALLERIDALL\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.voicePrefixes.rows.length">\n                                <td md-cell colspan="6">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="voicePrefix" md-select-id="id" ng-repeat="voicePrefix in vm.voicePrefixes.rows">\n                                <td md-cell ng-if="voicePrefix.userpic"><img class="avatar" alt="{{voicePrefix.name}}" ng-src="api/users/{{voicePrefix.id}}/avatar" /></td>\n                                <td md-cell ng-if="!voicePrefix.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{voicePrefix.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditvoicePrefix($event, voicePrefix)" md-cell class="id ">{{voicePrefix.id}}</td>\n                                <td ng-click="vm.createOrEditvoicePrefix($event, voicePrefix)" md-cell class="name ">{{voicePrefix.name}}</td>\n                                <td ng-click="vm.createOrEditvoicePrefix($event, voicePrefix)" md-cell class="VoiceExtensionId ">{{ (vm.outboundRoutes | filter : {\'id\':voicePrefix.VoiceExtensionId} : true)[0].exten }}</td>\n                                <td ng-click="vm.createOrEditvoicePrefix($event, voicePrefix)" md-cell class="callerIdAll ">{{voicePrefix.callerIdAll}}</td>\n                                <td ng-click="vm.createOrEditvoicePrefix($event, voicePrefix)" md-cell class="description ">{{voicePrefix.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(voicePrefix, $event    )" translate="VOICE.EDIT_VOICEPREFIX">\n                                                    Edit voicePrefix\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(voicePrefix, $event    )" translate="VOICE.AGENTADD_VOICEPREFIX">\n                                                    AgentAdd voicePrefix\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(voicePrefix, $event    )" translate="VOICE.DELETE_VOICEPREFIX">\n                                                    Delete voicePrefix\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.voicePrefixes.count}}" md-on-paginate="vm.getVoicePrefixes" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / VOICEPREFIX TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD VOICEPREFIX BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-voicePrefix-button" ng-click="vm.createOrEditvoicePrefix($event)" aria-label="add voicePrefix" translate translate-attr-aria-label="VOICE.ADD_VOICEPREFIX">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD VOICEPREFIX BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/voiceQueues/create/dialog.html",'<md-dialog class="voiceQueue-dialog" aria-label="New VoiceQueue">\n    <form name="voiceQueueForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.voiceQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newVoiceQueue">\n\n                <div class="hint"><span translate="VOICE.HELP.NAME"></span></div>\n                <div ng-messages="voiceQueueForm[\'name\'].$error" ng-show="voiceQueueForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="VOICE.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.STRATEGY">Strategy</label>\n                <md-select name="strategy" ng-model="vm.voiceQueue.strategy" required>\n                    <md-option ng-value="\'ringall\'">Ringall</md-option>\n                    <md-option ng-value="\'rrmemory\'">Round Robin Memory</md-option>\n                    <md-option ng-value="\'leastrecent\'">Least Recent</md-option>\n                    <md-option ng-value="\'fewestcalls\'">Fewest Calls</md-option>\n                    <md-option ng-value="\'random\'">Random</md-option>\n                    <md-option ng-value="\'linear\'">Linear</md-option>\n                    <md-option ng-value="\'wrandom\'">Weight Random</md-option>\n                </md-select>\n                <div ng-messages="voiceQueueForm[\'strategy\'].$error" ng-show="voiceQueueForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.voiceQueue.description">\n\n                <div ng-messages="voiceQueueForm[\'description\'].$error" ng-show="voiceQueueForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVoiceQueue" ng-click="vm.saveVoiceQueue()" class="send-button md-accent md-raised" ng-disabled="voiceQueueForm.$invalid || voiceQueueForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVoiceQueue" ng-click="vm.addNewVoiceQueue()" class="send-button md-accent md-raised" ng-disabled="voiceQueueForm.$invalid" aria-label="ADD" translate="VOICE.ADD_VOICEQUEUE" translate-attr-aria-label="VOICE.ADD_VOICEQUEUE">\n                    ADD VOICEQUEUE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVoiceQueue" ng-click="vm.deleteVoiceQueue($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voiceQueues/edit/agentadd/agentadd.html",'<md-dialog class="voiceQueue-dialog" aria-label="voiceQueue" ng-init="vm.onInit()">\n    <form name="voiceQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="VOICE.AGENTADD_VOICEQUEUE">Add Agent to voiceQueue</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <md-input-container flex class="no-margin">\n                <label translate="VOICE.PENALTY">Penalty</label>\n                <input name="penalty" ng-model="vm.penalty" placeholder="0" required md-minlength="0" md-maxlength="3">\n                <div ng-messages="voiceQueueForm.penalty.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span>You must supply a penalty.</span>\n                    </div>\n                    <div ng-message="md-minlength">\n                        <span>Min Penalty 0 characters.</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span>Max Penalty 3 characters.</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voiceQueues/edit/teamadd/teamadd.html",'<md-dialog class="voiceQueue-dialog" aria-label="voiceQueue" ng-init="vm.onInit()">\n    <form name="voiceQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="VOICE.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <md-input-container flex class="no-margin">\n                <label translate="VOICE.PENALTY">Penalty</label>\n                <input name="penalty" ng-model="vm.penalty" placeholder="0" required md-minlength="0" md-maxlength="3">\n                <div ng-messages="voiceQueueForm.penalty.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span>You must supply a penalty.</span>\n                    </div>\n                    <div ng-message="md-minlength">\n                        <span>Min Penalty 0 characters.</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span>Max Penalty 3 characters.</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voiceQueues/edit/view.html",'<div id="voice-voiceQueue" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-voiceQueues-button md-icon-button" aria-label="Go to voiceQueues" ng-click="vm.gotoVoiceQueues()" translate translate-attr-aria-label="VOICE.GO_TO_VOICEQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="voiceQueue-image" hide-xs>\n                    <img ng-src="assets/images/business/voiceQueues.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.voiceQueue.id}}\n                        <span ng-if="vm.voiceQueue.name">{{vm.voiceQueue.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="VOICE.CREATED_AT"></span> <span>{{vm.voiceQueue.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.voiceQueue, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="VOICE.TEAMADD_VOICEQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.voiceQueue, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="VOICE.AGENTADD_VOICEQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.voiceQueue, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="VOICE.GOTO_VOICEQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-cast"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveVoiceQueue()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (settingsForm.$invalid) || (announcementsForm.$invalid) || (advancedForm.$invalid)" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="voiceQueue-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.voiceQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="VOICE.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="VOICE.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.voiceQueue.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'ringall\'">Ringall</md-option>\n                                    <md-option ng-value="\'rrmemory\'">Round Robin Memory</md-option>\n                                    <md-option ng-value="\'leastrecent\'">Least Recent</md-option>\n                                    <md-option ng-value="\'fewestcalls\'">Fewest Calls</md-option>\n                                    <md-option ng-value="\'random\'">Random</md-option>\n                                    <md-option ng-value="\'linear\'">Linear</md-option>\n                                    <md-option ng-value="\'wrandom\'">Weight Random</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'strategy\'].$error" ng-show="generalForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.TIMEOUT">Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.voiceQueue.timeout" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.TIMEOUT"></span></div>\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MAXLENGTH">MaxLength</label>\n                                <input type="number" name="maxlen" ng-model="vm.voiceQueue.maxlen" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.MAXLENGTH"></span></div>\n                                <div ng-messages="generalForm[\'maxlen\'].$error" ng-show="generalForm[\'maxlen\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MAXLENGTH_REQUIRED">MaxLength field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.MAXLENGTH_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MaxLength must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.RETRY">Retry</label>\n                                <input type="number" name="retry" ng-model="vm.voiceQueue.retry" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.RETRY"></span></div>\n                                <div ng-messages="generalForm[\'retry\'].$error" ng-show="generalForm[\'retry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.RETRY_REQUIRED">Retry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.RETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Retry must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.WRAPUPTIME">WrapupTime</label>\n                                <input type="number" name="wrapuptime" ng-model="vm.voiceQueue.wrapuptime" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.WRAPUPTIME"></span></div>\n                                <div ng-messages="generalForm[\'wrapuptime\'].$error" ng-show="generalForm[\'wrapuptime\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.WRAPUPTIME_REQUIRED">WrapupTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.WRAPUPTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WrapupTime must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.WEIGHT">Weight</label>\n                                <input type="number" name="weight" ng-model="vm.voiceQueue.weight" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.WEIGHT"></span></div>\n                                <div ng-messages="generalForm[\'weight\'].$error" ng-show="generalForm[\'weight\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.WEIGHT_REQUIRED">Weight field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.WEIGHT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Weight must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.JOINWHENEMPTY">JoinWhenEmpty</label>\n                                <md-select name="joinempty" ng-model="vm.voiceQueue.joinempty" multiple ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'strict\'">strict</md-option>\n                                    <md-option ng-value="\'loose\'">loose</md-option>\n                                    <md-option ng-value="\'paused\'">paused</md-option>\n                                    <md-option ng-value="\'penalty\'">penalty</md-option>\n                                    <md-option ng-value="\'inuse\'">inuse</md-option>\n                                    <md-option ng-value="\'ringing\'">ringing</md-option>\n                                    <md-option ng-value="\'unavailable\'">unavailable</md-option>\n                                    <md-option ng-value="\'invalid\'">invalid</md-option>\n                                    <md-option ng-value="\'unknown\'">unknown</md-option>\n                                    <md-option ng-value="\'wrapup\'">wrapup</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.JOINWHENEMPTY"></span></div>\n                                <div ng-messages="generalForm[\'joinempty\'].$error" ng-show="generalForm[\'joinempty\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.JOINWHENEMPTY_REQUIRED">JoinWhenEmpty field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.LEAVEWHENEMPTY">LeaveWhenEmpty</label>\n                                <md-select name="leavewhenempty" ng-model="vm.voiceQueue.leavewhenempty" multiple ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'strict\'">strict</md-option>\n                                    <md-option ng-value="\'loose\'">loose</md-option>\n                                    <md-option ng-value="\'paused\'">paused</md-option>\n                                    <md-option ng-value="\'penalty\'">penalty</md-option>\n                                    <md-option ng-value="\'inuse\'">inuse</md-option>\n                                    <md-option ng-value="\'ringing\'">ringing</md-option>\n                                    <md-option ng-value="\'unavailable\'">unavailable</md-option>\n                                    <md-option ng-value="\'invalid\'">invalid</md-option>\n                                    <md-option ng-value="\'unknown\'">unknown</md-option>\n                                    <md-option ng-value="\'wrapup\'">wrapup</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.LEAVEWHENEMPTY"></span></div>\n                                <div ng-messages="generalForm[\'leavewhenempty\'].$error" ng-show="generalForm[\'leavewhenempty\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.LEAVEWHENEMPTY_REQUIRED">LeaveWhenEmpty field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MUSICONHOLD">MusicOnHold</label>\n                                <md-select name="musiconhold" ng-model="vm.voiceQueue.musiconhold" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="musiconhold.name" ng-repeat="musiconhold in vm.musiconholds" ng-disabled="musiconhold.canSelect === false">{{ musiconhold.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.MUSICONHOLD"></span></div>\n                                <div ng-messages="generalForm[\'musiconhold\'].$error" ng-show="generalForm[\'musiconhold\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MUSICONHOLD_REQUIRED">MusicOnHold field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ANNOUNCETOAGENT">AnnounceToAgent</label>\n                                <md-select name="announce" ng-model="vm.voiceQueue.announce" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'FALSE\'">None</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + announce.save_name" ng-repeat="announce in vm.sounds" ng-disabled="announce.canSelect === false">{{ announce.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.ANNOUNCETOAGENT"></span></div>\n                                <div ng-messages="generalForm[\'announce\'].$error" ng-show="generalForm[\'announce\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ANNOUNCETOAGENT_REQUIRED">AnnounceToAgent field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.voiceQueue.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ANNOUNCEMENTS">ANNOUNCEMENTS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="voiceQueue-detail-form-container settings md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.SETTINGS">SETTINGS</div>\n                        </div>\n                        <form name="settingsForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ANNOUNCEFREQUENCY">AnnounceFrequency</label>\n                                <input type="number" name="announce_frequency" ng-model="vm.voiceQueue.announce_frequency" min="0" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.ANNOUNCEFREQUENCY"></span></div>\n                                <div ng-messages="settingsForm[\'announce_frequency\'].$error" ng-show="settingsForm[\'announce_frequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ANNOUNCEFREQUENCY_REQUIRED">AnnounceFrequency field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.ANNOUNCEFREQUENCY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AnnounceFrequency must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MINANNOUNCEFREQUENCY">MinAnnounceFrequency</label>\n                                <input type="number" name="min_announce_frequency" ng-model="vm.voiceQueue.min_announce_frequency" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.MINANNOUNCEFREQUENCY"></span></div>\n                                <div ng-messages="settingsForm[\'min_announce_frequency\'].$error" ng-show="settingsForm[\'min_announce_frequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MINANNOUNCEFREQUENCY_REQUIRED">MinAnnounceFrequency field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.MINANNOUNCEFREQUENCY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MinAnnounceFrequency must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.PERIODICANNOUNCEFREQUENCY">PeriodicAnnounceFrequency</label>\n                                <input type="number" name="periodic_announce_frequency" ng-model="vm.voiceQueue.periodic_announce_frequency" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.PERIODICANNOUNCEFREQUENCY"></span></div>\n                                <div ng-messages="settingsForm[\'periodic_announce_frequency\'].$error" ng-show="settingsForm[\'periodic_announce_frequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.PERIODICANNOUNCEFREQUENCY_REQUIRED">PeriodicAnnounceFrequency field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.PERIODICANNOUNCEFREQUENCY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">PeriodicAnnounceFrequency must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.RANDOMPERIODICANNOUNCE">RandomPeriodicAnnounce</label>\n                                <md-select name="random_periodic_announce" ng-model="vm.voiceQueue.random_periodic_announce" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.RANDOMPERIODICANNOUNCE"></span></div>\n                                <div ng-messages="settingsForm[\'random_periodic_announce\'].$error" ng-show="settingsForm[\'random_periodic_announce\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.RANDOMPERIODICANNOUNCE_REQUIRED">RandomPeriodicAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ANNOUNCEHOLDTIME">AnnounceHoldtime</label>\n                                <md-select name="announce_holdtime" ng-model="vm.voiceQueue.announce_holdtime" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">Yes</md-option>\n                                    <md-option ng-value="\'no\'">No</md-option>\n                                    <md-option ng-value="\'once\'">Once</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.ANNOUNCEHOLDTIME"></span></div>\n                                <div ng-messages="settingsForm[\'announce_holdtime\'].$error" ng-show="settingsForm[\'announce_holdtime\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ANNOUNCEHOLDTIME_REQUIRED">AnnounceHoldtime field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ANNOUNCECALLERPOSITION">AnnounceCallerPosition</label>\n                                <md-select name="announce_position" ng-model="vm.voiceQueue.announce_position" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">Yes</md-option>\n                                    <md-option ng-value="\'no\'">No</md-option>\n                                    <md-option ng-value="\'limit\'">Limit</md-option>\n                                    <md-option ng-value="\'more\'">More</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.ANNOUNCECALLERPOSITION"></span></div>\n                                <div ng-messages="settingsForm[\'announce_position\'].$error" ng-show="settingsForm[\'announce_position\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ANNOUNCECALLERPOSITION_REQUIRED">AnnounceCallerPosition field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ANNOUNCEPOSITIONLIMIT">AnnouncePositionLimit</label>\n                                <input type="number" name="announce_position_limit" ng-model="vm.voiceQueue.announce_position_limit" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.ANNOUNCEPOSITIONLIMIT"></span></div>\n                                <div ng-messages="settingsForm[\'announce_position_limit\'].$error" ng-show="settingsForm[\'announce_position_limit\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ANNOUNCEPOSITIONLIMIT_REQUIRED">AnnouncePositionLimit field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.REPORTHOLDTIMEAGENT">ReportHoldtimeAgent</label>\n                                <md-select name="reportholdtime" ng-model="vm.voiceQueue.reportholdtime" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.REPORTHOLDTIMEAGENT"></span></div>\n                                <div ng-messages="settingsForm[\'reportholdtime\'].$error" ng-show="settingsForm[\'reportholdtime\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.REPORTHOLDTIMEAGENT_REQUIRED">ReportHoldtimeAgent field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="voiceQueue-detail-form-container announcements md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.ANNOUNCEMENTS">ANNOUNCEMENTS</div>\n                        </div>\n                        <form name="announcementsForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.PERIODICANNOUNCE">PeriodicAnnounce</label>\n                                <md-select name="periodic_announce" ng-model="vm.voiceQueue.periodic_announce" autofocus multiple ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'\'">Default</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + periodic_announce.save_name" ng-repeat="periodic_announce in vm.sounds" ng-disabled="periodic_announce.canSelect === false">{{ periodic_announce.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.PERIODICANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'periodic_announce\'].$error" ng-show="announcementsForm[\'periodic_announce\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.PERIODICANNOUNCE_REQUIRED">PeriodicAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.HOLDTIMEANNOUNCE">HoldTimeAnnounce</label>\n                                <md-select name="queue_reporthold" ng-model="vm.voiceQueue.queue_reporthold" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_reporthold.save_name" ng-repeat="queue_reporthold in vm.sounds" ng-disabled="queue_reporthold.canSelect === false">{{ queue_reporthold.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.HOLDTIMEANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_reporthold\'].$error" ng-show="announcementsForm[\'queue_reporthold\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.HOLDTIMEANNOUNCE_REQUIRED">HoldTimeAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.YOUARENEXTANNOUNCE">YouareNextAnnounce</label>\n                                <md-select name="queue_youarenext" ng-model="vm.voiceQueue.queue_youarenext" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_youarenext.save_name" ng-repeat="queue_youarenext in vm.sounds" ng-disabled="queue_youarenext.canSelect === false">{{ queue_youarenext.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.YOUARENEXTANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_youarenext\'].$error" ng-show="announcementsForm[\'queue_youarenext\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.YOUARENEXTANNOUNCE_REQUIRED">YouareNextAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.THEREAREANNOUNCE">ThereareAnnounce</label>\n                                <md-select name="queue_thereare" ng-model="vm.voiceQueue.queue_thereare" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_thereare.save_name" ng-repeat="queue_thereare in vm.sounds" ng-disabled="queue_thereare.canSelect === false">{{ queue_thereare.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.THEREAREANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_thereare\'].$error" ng-show="announcementsForm[\'queue_thereare\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.THEREAREANNOUNCE_REQUIRED">ThereareAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.WAITINGCALLSANNOUNCE">WaitingCallsAnnounce</label>\n                                <md-select name="queue_callswaiting" ng-model="vm.voiceQueue.queue_callswaiting" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_callswaiting.save_name" ng-repeat="queue_callswaiting in vm.sounds" ng-disabled="queue_callswaiting.canSelect === false">{{ queue_callswaiting.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.WAITINGCALLSANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_callswaiting\'].$error" ng-show="announcementsForm[\'queue_callswaiting\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.WAITINGCALLSANNOUNCE_REQUIRED">WaitingCallsAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ESTIMATEDHOLDTIMEANNOUNCE">EstimatedHoldTimeAnnounce</label>\n                                <md-select name="queue_holdtime" ng-model="vm.voiceQueue.queue_holdtime" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_holdtime.save_name" ng-repeat="queue_holdtime in vm.sounds" ng-disabled="queue_holdtime.canSelect === false">{{ queue_holdtime.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.ESTIMATEDHOLDTIMEANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_holdtime\'].$error" ng-show="announcementsForm[\'queue_holdtime\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ESTIMATEDHOLDTIMEANNOUNCE_REQUIRED">EstimatedHoldTimeAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MINUTESANNOUNCE">MinutesAnnounce</label>\n                                <md-select name="queue_minutes" ng-model="vm.voiceQueue.queue_minutes" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_minutes.save_name" ng-repeat="queue_minutes in vm.sounds" ng-disabled="queue_minutes.canSelect === false">{{ queue_minutes.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.MINUTESANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_minutes\'].$error" ng-show="announcementsForm[\'queue_minutes\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MINUTESANNOUNCE_REQUIRED">MinutesAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MINUTEANNOUNCE">MinuteAnnounce</label>\n                                <md-select name="queue_minute" ng-model="vm.voiceQueue.queue_minute" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_minute.save_name" ng-repeat="queue_minute in vm.sounds" ng-disabled="queue_minute.canSelect === false">{{ queue_minute.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.MINUTEANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_minute\'].$error" ng-show="announcementsForm[\'queue_minute\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MINUTEANNOUNCE_REQUIRED">MinuteAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.SECONDSANNOUNCE">SecondsAnnounce</label>\n                                <md-select name="queue_seconds" ng-model="vm.voiceQueue.queue_seconds" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_seconds.save_name" ng-repeat="queue_seconds in vm.sounds" ng-disabled="queue_seconds.canSelect === false">{{ queue_seconds.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.SECONDSANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_seconds\'].$error" ng-show="announcementsForm[\'queue_seconds\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.SECONDSANNOUNCE_REQUIRED">SecondsAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.THANKYOUANNOUNCE">ThankYouAnnounce</label>\n                                <md-select name="queue_thankyou" ng-model="vm.voiceQueue.queue_thankyou" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_thankyou.save_name" ng-repeat="queue_thankyou in vm.sounds" ng-disabled="queue_thankyou.canSelect === false">{{ queue_thankyou.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.THANKYOUANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_thankyou\'].$error" ng-show="announcementsForm[\'queue_thankyou\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.THANKYOUANNOUNCE_REQUIRED">ThankYouAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="voiceQueue-detail-form-container advanced md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.ADVANCED">ADVANCED</div>\n                        </div>\n                        <form name="advancedForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.voiceQueue.acw" aria-label="AfterCallWork" ng-disabled="!vm.crudPermissions.canEdit"><span translate="VOICE.AFTERCALLWORK">AfterCallWork</span></md-switch>\n\n                                <div class="hint"><span translate="VOICE.HELP.AFTERCALLWORK"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.voiceQueue.acw" class="md-block">\n                                <label translate="VOICE.AFTERCALLWORKDURATION">AfterCallWorkDuration</label>\n                                <input type="number" name="acwTimeout" ng-model="vm.voiceQueue.acwTimeout" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.AFTERCALLWORKDURATION"></span></div>\n                                <div ng-messages="advancedForm[\'acwTimeout\'].$error" ng-show="advancedForm[\'acwTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.AFTERCALLWORKDURATION_REQUIRED">AfterCallWorkDuration field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.AFTERCALLWORKDURATION_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AfterCallWorkDuration must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.AUTOPAUSE">AutoPause</label>\n                                <md-select name="autopause" ng-model="vm.voiceQueue.autopause" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'all\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.AUTOPAUSE"></span></div>\n                                <div ng-messages="advancedForm[\'autopause\'].$error" ng-show="advancedForm[\'autopause\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.AUTOPAUSE_REQUIRED">AutoPause field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.RINGINUSE">RingInUse</label>\n                                <md-select name="ringinuse" ng-model="vm.voiceQueue.ringinuse" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.RINGINUSE"></span></div>\n                                <div ng-messages="advancedForm[\'ringinuse\'].$error" ng-show="advancedForm[\'ringinuse\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.RINGINUSE_REQUIRED">RingInUse field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MEMBERDELAY">MemberDelay</label>\n                                <input type="number" name="memberdelay" ng-model="vm.voiceQueue.memberdelay" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.MEMBERDELAY"></span></div>\n                                <div ng-messages="advancedForm[\'memberdelay\'].$error" ng-show="advancedForm[\'memberdelay\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MEMBERDELAY_REQUIRED">MemberDelay field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.MEMBERDELAY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MemberDelay must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.TIMEOUTRESTART">TimeoutRestart</label>\n                                <md-select name="timeoutrestart" ng-model="vm.voiceQueue.timeoutrestart" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.TIMEOUTRESTART"></span></div>\n                                <div ng-messages="advancedForm[\'timeoutrestart\'].$error" ng-show="advancedForm[\'timeoutrestart\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.TIMEOUTRESTART_REQUIRED">TimeoutRestart field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MONITORFORMAT">MonitorFormat</label>\n                                <md-select name="monitor_format" ng-model="vm.voiceQueue.monitor_format" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'\'">Inactive</md-option>\n                                    <md-option ng-value="\'wav\'">wav</md-option>\n                                    <md-option ng-value="\'wav49\'">wav49</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.MONITORFORMAT"></span></div>\n                                <div ng-messages="advancedForm[\'monitor_format\'].$error" ng-show="advancedForm[\'monitor_format\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MONITORFORMAT_REQUIRED">MonitorFormat field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.CONTEXT">Context</label>\n                                <input type="text" name="context" ng-model="vm.voiceQueue.context" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.CONTEXT"></span></div>\n                                <div ng-messages="advancedForm[\'context\'].$error" ng-show="advancedForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.SETINTERFACEVARIABLES">SetInterfaceVariables</label>\n                                <md-select name="setinterfacevar" ng-model="vm.voiceQueue.setinterfacevar" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.SETINTERFACEVARIABLES"></span></div>\n                                <div ng-messages="advancedForm[\'setinterfacevar\'].$error" ng-show="advancedForm[\'setinterfacevar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.SETINTERFACEVARIABLES_REQUIRED">SetInterfaceVariables field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.SETQUEUEVARIABLES">SetQueueVariables</label>\n                                <md-select name="setqueuevar" ng-model="vm.voiceQueue.setqueuevar" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.SETQUEUEVARIABLES"></span></div>\n                                <div ng-messages="advancedForm[\'setqueuevar\'].$error" ng-show="advancedForm[\'setqueuevar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.SETQUEUEVARIABLES_REQUIRED">SetQueueVariables field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.SETQUEUEENTRYVARIABLES">SetQueueEntryVariables</label>\n                                <md-select name="setqueueentryvar" ng-model="vm.voiceQueue.setqueueentryvar" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.SETQUEUEENTRYVARIABLES"></span></div>\n                                <div ng-messages="advancedForm[\'setqueueentryvar\'].$error" ng-show="advancedForm[\'setqueueentryvar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.SETQUEUEENTRYVARIABLES_REQUIRED">SetQueueEntryVariables field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.voiceQueue.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="VOICE.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.voiceQueue.mandatoryDisposition" class="md-block">\n                                <label translate="VOICE.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.voiceQueue.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="advancedForm[\'mandatoryDispositionPauseId\'].$error" ng-show="advancedForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/voice/views/voiceQueues/voiceQueues.html",'<div id="voiceQueues" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.VOICEQUEUES">VoiceQueues</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedVoiceQueues.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedVoiceQueues =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-voiceQueues-count">\n                    <span>{{vm.selectedVoiceQueues.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="VOICEQUEUES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllVoiceQueues()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectVoiceQueues()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedVoiceQueues" csv-label="true" filename="voiceQueues.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedVoiceQueues($event)" aria-label="delete selected" translate translate-attr-label="VOICEQUEUES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- VOICEQUEUE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedVoiceQueues" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVoiceQueues">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'VOICE.STRATEGY\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.voiceQueues.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="voiceQueue" md-select-id="id" ng-repeat="voiceQueue in vm.voiceQueues.rows">\n                                <td md-cell ng-if="voiceQueue.userpic"><img class="avatar" alt="{{voiceQueue.name}}" ng-src="api/users/{{voiceQueue.id}}/avatar" /></td>\n                                <td md-cell ng-if="!voiceQueue.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{voiceQueue.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voiceQueue, ev) : vm.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="id ">{{voiceQueue.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voiceQueue, ev) : vm.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="name ">{{voiceQueue.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voiceQueue, ev) : vm.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="strategy ">{{ vm.arraystrategy[voiceQueue.strategy].option }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voiceQueue, ev) : vm.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="description ">{{voiceQueue.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(voiceQueue, $event    )" translate="VOICE.EDIT_VOICEQUEUE">\n                                                    Edit VoiceQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(voiceQueue, $event    )" translate="VOICE.TEAMADD_VOICEQUEUE">\n                                                    teamadd VoiceQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(voiceQueue, $event    )" translate="VOICE.AGENTADD_VOICEQUEUE">\n                                                    agentadd VoiceQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(voiceQueue, $event    )" translate="VOICE.DELETE_VOICEQUEUE">\n                                                    Delete VoiceQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(voiceQueue, $event    )" translate="VOICE.GOTOREALTIME_VOICEQUEUE">\n                                                    goToRealtime VoiceQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.voiceQueues.count}}" md-on-paginate="vm.getVoiceQueues" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / VOICEQUEUE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD VOICEQUEUE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-voiceQueue-button" ng-click="vm.createOrEditVoiceQueue($event)" aria-label="add voiceQueue" translate translate-attr-aria-label="VOICE.ADD_VOICEQUEUE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD VOICEQUEUE BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/voiceRecordings/create/dialog.html",'<md-dialog class="voiceRecording-dialog" aria-label="New VoiceRecording">\n    <form name="voiceRecordingForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.RATING">Rating</label>\n                <md-select name="rating" ng-model="vm.voiceRecording.rating" autofocus ng-disabled="!vm.newVoiceRecording && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="null">{{\'VOICE.NO_RATING\' | translate}}</md-option>\n                    <md-option value="1">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1]"></md-icon>\n                    </md-option>\n                    <md-option value="2">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2]"></md-icon>\n                    </md-option>\n                    <md-option value="3">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2,3]"></md-icon>\n                    </md-option>\n                    <md-option value="4">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2,3,4]"></md-icon>\n                    </md-option>\n                    <md-option value="5">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2,3,4,5]"></md-icon>\n                    </md-option>\n                </md-select>\n                <div ng-messages="voiceRecordingForm[\'rating\'].$error" ng-show="voiceRecordingForm[rating].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.RATING_REQUIRED">Rating field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVoiceRecording" ng-click="vm.saveVoiceRecording()" class="send-button md-accent md-raised" ng-disabled="voiceRecordingForm.$invalid || voiceRecordingForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVoiceRecording" ng-click="vm.addNewVoiceRecording()" class="send-button md-accent md-raised" ng-disabled="voiceRecordingForm.$invalid" aria-label="ADD" translate="VOICE.ADD_VOICERECORDING" translate-attr-aria-label="VOICE.ADD_VOICERECORDING">\n                    ADD VOICERECORDING\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVoiceRecording" ng-click="vm.deleteVoiceRecording($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voiceRecordings/voiceRecordings.html",'<div id="voiceRecordings" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.VOICERECORDINGS">VoiceRecordings</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n            \x3c!-- DATE FILTER --\x3e\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE_RANGE">Select Date Range</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearDateFilter()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.CLEAR\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getVoiceRecordings()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            \x3c!-- /DATE FILTER --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedVoiceRecordings.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedVoiceRecordings =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-voiceRecordings-count">\n                    <span>{{vm.selectedVoiceRecordings.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="VOICERECORDINGS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllVoiceRecordings()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectVoiceRecordings()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedVoiceRecordings" csv-label="true" filename="voiceRecordings.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedVoiceRecordings($event)" aria-label="delete selected" translate translate-attr-label="VOICERECORDINGS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- VOICERECORDING TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedVoiceRecordings" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVoiceRecordings">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="type">{{ \'VOICE.TYPE\' | translate }}</th>\n                                <th md-column md-order-by="uniqueid">{{ \'VOICE.UNIQUEID\' | translate }}</th>\n                                <th md-column md-order-by="calleridnum">{{ \'VOICE.CALLER\' | translate }}</th>\n                                <th md-column md-order-by="exten">{{ \'VOICE.CALLED\' | translate }}</th>\n                                <th md-column md-order-by="connectedlinenum">{{ \'VOICE.CONNECTED\' | translate }}</th>\n                                <th md-column md-order-by="queue">{{ \'VOICE.QUEUE\' | translate }}</th>\n                                <th md-column md-order-by="membername">{{ \'VOICE.AGENT\' | translate }}</th>\n                                <th md-column md-order-by="rating">{{ \'VOICE.RATING\' | translate }}</th>\n                                <th md-column md-order-by="audio">{{ \'VOICE.AUDIO\' | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ \'VOICE.DATE\' | translate }}</th>\n                                <th md-column md-order-by="userDisposition">{{ \'VOICE.DISPOSITION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.voiceRecordings.rows.length">\n                                <td md-cell colspan="12">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="voiceRecording" md-select-id="id" ng-repeat="voiceRecording in vm.voiceRecordings.rows">\n                                <td md-cell ng-if="voiceRecording.userpic"><img class="avatar" alt="{{voiceRecording.name}}" ng-src="api/users/{{voiceRecording.id}}/avatar" /></td>\n                                <td md-cell ng-if="!voiceRecording.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{voiceRecording.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="type ">{{voiceRecording.type}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="uniqueid ">{{voiceRecording.uniqueid}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="calleridnum ">{{voiceRecording.calleridnum}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="exten ">{{voiceRecording.exten}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="connectedlinenum ">{{voiceRecording.connectedlinenum}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="queue ">{{voiceRecording.queue}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="membername ">{{voiceRecording.membername}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="rating ">\n                                    <md-icon md-font-icon="icon-star" style="color:red" ng-show="voiceRecording.rating" ng-repeat="rating in [1,2,3,4,5] | limitTo:voiceRecording.rating"></md-icon><span ng-hide="voiceRecording.rating" translate="VOICE.NO_RATING">No rating</span>\n                                </td>\n\n                                <td md-cell class="audio " ng-switch="voiceRecording.format">\n                                    \x3c!-- audio recording directive --\x3e\n                                    <ms-recording ng-switch-when=".wav" id="voiceRecording.id"></ms-recording>\n                                    \x3c!-- / audio recording directive --\x3e\n                                    <span ng-switch-when=".gsm|.WAV" ng-switch-when-separator="|">\n                                        <em>{{ \'VOICE.CANT_PLAY_GSM_AUDIO_FILES\' | translate }}</em>\n                                    </span>\n                                </td>\n\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="createdAt ">{{voiceRecording.createdAt | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="userDisposition ">{{voiceRecording.userDisposition}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.downloadfile2(voiceRecording, $event  , \'voice/recordings\'   )" translate="VOICE.DOWNLOAD_VOICERECORDING">\n                                                    Download VoiceRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(voiceRecording, $event    )" translate="VOICE.DELETE_VOICERECORDING">\n                                                    Delete VoiceRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.voiceRecordings.count}}" md-on-paginate="vm.getVoiceRecordings" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / VOICERECORDING TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>'),e.put("app/navigation/layouts/horizontal-navigation/navigation.html",'<div layout="row" layout-align="start center">\n    <ms-navigation-horizontal></ms-navigation-horizontal>\n</div>'),e.put("app/navigation/layouts/vertical-navigation-fullwidth-toolbar-2/navigation.html",'<ms-navigation class="scrollable" folded="vm.folded" ms-scroll="vm.msScrollOptions"></ms-navigation>'),e.put("app/navigation/layouts/vertical-navigation/navigation.html",'<md-toolbar class="navigation-header md-whiteframe-1dp" layout="row" layout-align="space-between center">\n    <div class="logo" layout="row" layout-align="start center">\n        <span class="logo-image"><img src="/api/settings/1/logo" alt="logo" /></span>\n        \x3c!-- <span class="logo-image"><img src="assets/images/logos/whisker_32x32.png" alt="motion_whisker_32x32" /></span> --\x3e\n        <span class="logo-text text-truncate">{{vm.getLogo() | uppercase}}</span>\n    </div>\n    <md-icon class="fold-toggle s18" md-font-icon="icon-backburger" hide show-gt-sm ng-click="vm.toggleMsNavigationFolded()"></md-icon>\n</md-toolbar>\n\n<ms-navigation class="scrollable" folded="vm.folded" ms-scroll="vm.msScrollOptions"></ms-navigation>'),e.put("app/quick-panel/quick-panel.html",'<md-content>\n    <md-tabs md-no-pagination md-swipe-content md-stretch-tabs="always">\n        <md-tab>\n            <md-tab-label>\n                <span translate="QUICKPANEL.TODAY">TODAY</span>\n            </md-tab-label>\n            <md-tab-body>\n                <md-content class="today-tab scrollable" ms-scroll ng-include="\'app/quick-panel/tabs/today/today-tab.html\'"></md-content>\n            </md-tab-body>\n        </md-tab>\n        <md-tab ng-if="vm.currentUser.allowmessenger || vm.currentUser.role !== \'agent\'" ng-include="\'app/quick-panel/tabs/chat/chat-tab.html\'" ng-controller="ChatInternalController as vm_ct" ng-init="vm_ct.init(vm.license)" md-on-deselect="vm_ct.user = undefined">\n            <md-tab-label>\n                <div ng-if="vm.unreadTotalMessages" class="md-accent-bg unread-message-count-chat">{{vm.unreadTotalMessages}}</div>\n                <span>MESSENGER</span>\n            </md-tab-label>\n            <md-tab-body>\n                <md-content class="chat-tab scrollable" ms-scroll ng-include="\'app/quick-panel/tabs/chat/chat-tab.html\'"></md-content>\n            </md-tab-body>\n        </md-tab>\n        <md-tab ng-if="vm.currentUser.allowmessenger || vm.currentUser.role !== \'agent\'" ng-include="\'app/quick-panel/tabs/groups/group-tab.html\'" ng-controller="ChatGroupController as vm_cg" ng-init="vm_cg.init(vm.license)" md-on-deselect="vm_cg.group = undefined">\n            <md-tab-label>\n                <div ng-if="vm.unreadTotalGroupMessages" class="md-accent-bg unread-message-count-chat">{{vm.unreadTotalGroupMessages}}</div>\n                <span translate="QUICKPANEL.GROUPS">GROUPS</span>\n            </md-tab-label>\n            <md-tab-body>\n                <md-content class="group-tab scrollable" ms-scroll ng-include="\'app/quick-panel/tabs/groups/group-tab.html\'"></md-content>\n            </md-tab-body>\n        </md-tab>\n    </md-tabs>\n</md-content>'),e.put("app/quick-panel/tabs/activity/activity-tab.html",'<md-list class="friends">\n    <md-subheader class="md-no-sticky">\n        <span translate="QUICKPANEL.FRIENDS">Friends</span>\n    </md-subheader>\n\n    <md-list-item class="friend md-3-line" ng-repeat="friend in vm.activities.friends">\n        <img ng-src="{{friend.avatar}}" class="md-avatar" alt="{{friend.name}}" />\n\n        <div class="status {{friend.status}}"></div>\n\n        <div ng-if="contact.unread" class="md-accent-bg unread-message-count">{{contact.unread}}</div>\n\n        <div class="md-list-item-text">\n            <h3 class="message">{{friend.message}}</h3>\n            <p class="time">{{friend.time}}</p>\n        </div>\n    </md-list-item>\n</md-list>\n\n<md-divider></md-divider>\n\n<md-list class="servers">\n    <md-subheader class="md-no-sticky">\n        <span translate="QUICKPANEL.APP_SERVERS">Application Servers</span>\n    </md-subheader>\n\n    <md-list-item class="server md-3-line" ng-repeat="server in vm.activities.servers">\n        <md-icon md-font-icon="icon-checkbox-blank-circle" class="s16 status" ng-class="server.status"></md-icon>\n\n        <div class="md-list-item-text">\n            <h3>{{server.location}}</h3>\n            <p>{{server.detail}}</p>\n        </div>\n    </md-list-item>\n</md-list>\n\n<md-divider></md-divider>\n\n<md-list class="stats">\n    <md-subheader class="md-no-sticky">\n        <span translate="QUICKPANEL.USER_STATS">User Stats</span>\n    </md-subheader>\n\n    <md-list-item class="stat md-2-line" ng-repeat="stat in vm.activities.stats">\n        <div class="md-list-item-text">\n            <span>{{stat.title}} ({{stat.current}} / {{stat.total}})</span>\n            <md-progress-linear ng-class="stat.status" md-mode="determinate" value="{{stat.percent}}"></md-progress-linear>\n        </div>\n    </md-list-item>\n</md-list>'),e.put("app/quick-panel/tabs/chat/chat-tab.html",'<div class="main animate-slide-left" ng-hide="vm_ct.user">\n    <md-subheader class="md-no-sticky">\n        <div class="search" layout="row" layout-align="space-between center">\n            <md-icon md-font-icon="icon-magnify" class="icon search-icon"></md-icon>\n            <input class="search-input" ng-model="vm_ct.search.$" type="text" placeholder="Search by fullname.." translate translate-attr-placeholder="QUICKPANEL.SEARCH" flex>\n            <md-select ng-model="vm_ct.search.online" class="height-50 no-padding no-margin" aria-label="Chat Tab Search" <md-option ng-value="undefined">All</md-option>\n                <md-option ng-value="true">\n                    <md-icon md-font-icon="icon-checkbox-blank-circle" class="s12 green-fg"></md-icon>Online\n                </md-option>\n                <md-option ng-value="false">\n                    <md-icon md-font-icon="icon-checkbox-blank-circle" class="s12 red-fg"></md-icon>Offline\n                </md-option>\n            </md-select>\n        </div>\n    </md-subheader>\n    \x3c!-- <select ng-model="vm_ct.filterOnline" class="height-50 no-padding no-margin">\n            <option ng-value="undefined">All</option>\n            <option ng-value="true"><md-icon md-font-icon="icon-checkbox-blank-circle" class="s12 green-fg"></md-icon>Online</option>\n            <option ng-value="false"><md-icon md-font-icon="icon-checkbox-blank-circle" class="s12 red-fg"></md-icon>Offline</option>\n        </select> --\x3e\n    <md-divider></md-divider>\n    <md-list class="recent">\n        <md-list-item class="contact md-3-line" ng-if="user.id != vm_ct.currentUser.id" ng-repeat="user in vm_ct.users.rows | orderBy: \'-lastMessageAt\' | filter:vm_ct.search" ng-click="vm_ct.toggleChat(user)">\n            <md-divider></md-divider>\n            <img ng-src="{{user.userpic ? \'api/users/\' + user.id + \'/avatar\' : \'assets/images/avatars/profile.png\'}}" class="md-avatar" alt="{{user.fullname}}" />\n            <div class="status" ng-class="{true: \'online\', false: \'offline\'}[user.online]"></div>\n            <div ng-if="vm_ct.unreadMessage[user.id]" class="md-accent-bg unread-message-count">\n                {{vm_ct.unreadMessage[user.id]}}</div>\n            <div class="md-list-item-text">\n                <div layout="row">\n                    <h3>{{user.fullname}}</h3>\n                    <md-icon ng-if="!user.allowmessenger && user.role === \'agent\'" class="s16 margin-left-5" ng-style="{\'color\': \'red\' }" md-font-icon="icon-block-helper"></md-icon>\n                </div>\n                <p>{{user.name}} &#60;{{user.internal}}&#62;</p>\n                <div layout="row" layout-align="start center">\n                    <md-icon ng-if="!user.lastMessage.read && user.lastMessage.FromId === vm_ct.currentUser.id" class="s16 no-margin" md-font-icon="icon-check"></md-icon>\n                    <md-icon ng-if="user.lastMessage.read && user.lastMessage.FromId === vm_ct.currentUser.id" class="s16 no-margin" md-font-icon="icon-check-all md-accent"></md-icon>\n                    <p>{{user.lastMessage.body | limitTo:20 }}{{user.lastMessage.body.length > 20 ? \'...\' : \'\' }}</p>\n                    <span flex></span>\n                    <p class="last-message" ng-if="user.lastMessageAt != vm_ct.standardDate">\n                        {{user.lastMessageAt | formatdate}}</p>\n                </div>\n            </div>\n        </md-list-item>\n    </md-list>\n</div>\n\n<div class="chat animate-slide-right" ng-show="vm_ct.user" layout="column">\n    <md-toolbar class="md-accent">\n        <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n\n            <div layout="row" layout-align="start center">\n                <md-button class="md-icon-button" ng-click="vm_ct.toggleChat()" aria-label="Back" translate translate-attr-aria-label="QUICKPANEL.BACK">\n                    <md-icon md-font-icon="icon-keyboard-backspace"></md-icon>\n                </md-button>\n                <h4>\n                    <span>{{vm_ct.user.fullname}}</span>\n                </h4>\n            </div>\n\n            <div layout="row" layout-align="end center">\n                <md-button ng-if="vm_ct.license.webrtc && vm_ct.currentUser.role === \'agent\' && vm_ct.currentUser.showWebBar === 2 && vm_ct.user.role === \'agent\'" class="md-icon-button" aria-label="Call" translate translate-attr-aria-label="QUICKPANEL.CALL" ng-click="vm_ct.webcall(vm_ct.user.name)">\n                    <md-icon md-font-icon="icon-phone"></md-icon>\n                </md-button>\n                <md-menu ng-if="vm_ct.currentUser.phoneBarRemoteControl && vm_ct.currentUser.role === \'agent\' && vm_ct.currentUser.showWebBar === 0 && vm_ct.user.role === \'agent\'">\n                    <md-button class="md-icon-button" aria-label="Call" translate translate-attr-aria-label="QUICKPANEL.CALL" ng-click="$mdOpenMenu($event)">\n                        <md-icon md-font-icon="icon-phone"></md-icon>\n                    </md-button>\n\n                    <md-menu-content width="3">\n                        <md-menu-item ng-disabled="!vm_ct.currentUser.phoneBarRemoteControl">\n                            <md-button ng-click="vm_ct.call(vm_ct.user.name)">\n                                {{\'DASHBOARDS.CALL_NUMBER\' | translate}} ({{vm_ct.user.name}})\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item ng-disabled="!vm_ct.currentUser.phoneBarRemoteControl">\n                            <md-button ng-click="vm_ct.transfer(vm_ct.user.name)">\n                                {{\'DASHBOARDS.TRANSFER_NUMBER\' | translate}} ({{vm_ct.user.name}})\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n        </div>\n\n    </md-toolbar>\n    <md-content flex layout-paddings ms-scroll id="chat-dialog">\n        <div layout="row" ng-repeat="message in vm_ct.user.messages.rows" class="md-padding message-row" ng-class="message.FromId === vm_ct.currentUser.id ? \'user\' : \'contact\'">\n            <img ng-if="message.FromId === vm_ct.user.id" ng-src="{{vm_ct.user.userpic ? \'api/users/\' + vm_ct.user.id + \'/avatar\' : \'assets/images/avatars/profile.png\'}}" class="avatar" alt="{{vm_ct.user.fullname}}" />\n            <img ng-if="message.FromId === vm_ct.currentUser.id" class="avatar" ng-src="{{vm_ct.currentUser.userpic ? \'api/users/\' + vm_ct.currentUser.id + \'/avatar\' : \'assets/images/avatars/profile.png\'}}">\n            <div class="bubble" flex>\n                <span class="message" ng-bind-html="message.body | embed:{linkTarget:\'_blank\',emoji:false,fontSmiley:false}"></span>\n                <div layout="row" layout-align="end center">\n                    <span class="time secondary-text">{{message.createdAt | formatdate }}</span>\n                    <md-icon ng-if="!message.read && message.FromId === vm_ct.currentUser.id" class="s16 margin-5" md-font-icon="icon-check"></md-icon>\n                    <md-icon ng-if="message.read && message.FromId === vm_ct.currentUser.id" class="s16 margin-5" md-font-icon="icon-check-all md-accent"></md-icon>\n                </div>\n            </div>\n        </div>\n    </md-content>\n\n    <form ng-submit="vm_ct.reply()" layout="row" class="reply" layout-align="start center">\n        <textarea ng-keyup="$event.keyCode == 13 && !vm_ct.disabled? vm_ct.reply() : null" flex ng-model="vm_ct.replyMessage" placeholder="Type and hit enter to send message" translate translate-attr-placeholder="QUICKPANEL.REPLY_PLACEHOLDER" autofocus></textarea>\n\n        <md-button ng-disable="vm_ct.disabled" class="md-fab md-mini" type="submit" aria-label="Send message" translate translate-attr-aria-label="QUICKPANEL.SEND_MESSAGE">\n            <md-icon md-font-icon="icon-send"></md-icon>\n        </md-button>\n    </form>\n</div>'),e.put("app/quick-panel/tabs/groups/create/dialog.html",'<md-dialog class="group-dialog" aria-label="New ChatGroup">\n    <form name="groupForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog(null)">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            \x3c!--START Error--\x3e\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            \x3c!--END Error--\x3e\n\n            \x3c!--START NAME--\x3e\n            <md-input-container class="md-block">\n                <label translate="QUICKPANEL.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.group.name" required autofocus>\n                <div ng-messages="groupForm[\'name\'].$error" ng-show="groupForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="QUICKPANEL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="QUICKPANEL.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            \x3c!--END NAME--\x3e\n\n            \x3c!--START Members--\x3e\n            <md-input-container class="md-block">\n                <label translate="QUICKPANEL.MEMBERS">Members</label>\n                <md-contact-chips ng-model="vm.group.members" md-contacts="vm.querySearch($query)" md-contact-name="name" md-contact-image="image" md-require-match="true" md-highlight-flags="i" placeholder="{{\'QUICKPANEL.MEMBERS\' | translate}}">\n                </md-contact-chips>\n                <div ng-messages="groupForm[\'strategy\'].$error" ng-show="groupForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="QUICKPANEL.ERRORS.MEMBERS_REQUIRED">Members field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            \x3c!--END Members--\x3e\n\n            \x3c!--START Writing--\x3e\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.group.write" aria-label="Write">\n                    {{\'QUICKPANEL.ENABLE_WRITING\' | translate}}\n                </md-switch>\n            </md-input-container>\n            \x3c!--END Writing--\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.newChatGroup" ng-click="vm.saveChatGroup()" class="send-button md-accent md-raised" ng-disabled="groupForm.$invalid || groupForm.$pristine || (vm.group.members.length < 1)" aria-label="SAVE" translate="QUICKPANEL.SAVE" translate-attr-aria-label="QUICKPANEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/quick-panel/tabs/groups/group-tab.html",'<div class="main animate-slide-left" ng-if="!vm_cg.group">\n    <md-subheader>\n        <div layout="row">\n            \x3c!-- START Search --\x3e\n            <div class="search" layout="row" layout-align="start center" flex>\n                <md-icon md-font-icon="icon-magnify" class="icon search-icon"></md-icon>\n                <input ng-model="vm_cg.search" type="text" translate translate-attr-placeholder="QUICKPANEL.SEARCH" flex>\n            </div>\n            \x3c!-- END Search --\x3e\n\n            \x3c!-- START New Group --\x3e\n            <md-button ng-if="vm_cg.currentUser.role !== \'agent\'" class="md-icon-button" aria-label="New" ng-click="vm_cg.addGroup(null, $event)">\n                <md-icon md-font-icon="icon-account-multiple-plus" class="icon"></md-icon>\n            </md-button>\n            \x3c!-- END New Group --\x3e\n        </div>\n    </md-subheader>\n\n    <md-divider></md-divider>\n\n    \x3c!-- START Groups --\x3e\n    <md-list class="recent no-padding">\n        \x3c!-- START Group --\x3e\n        <md-list-item class="contact" ng-repeat="group in vm_cg.groupsToArray() | filter:vm_cg.search" ng-click="vm_cg.toggleChat(group)">\n            <img src="assets/images/avatars/group.png" class="md-avatar" alt="{{group.name}}" />\n            <div ng-if="group.unreadGroupMessages" class="md-accent-bg unread-message-count">{{group.unreadGroupMessages}}</div>\n            <div class="md-list-item-text">\n                <div layout="row">\n                    <h3>{{group.name}}</h3>\n                </div>\n            </div>\n\n            <md-button ng-if="vm_cg.currentUser.role !== \'agent\'" class="md-secondary md-icon-button" aria-label="Remove" ng-click="vm_cg.deleteGroup(group, $event)">\n                <md-icon md-font-icon="icon-delete" class="icon s18"></md-icon>\n            </md-button>\n\n            <md-divider ng-if="!$last"></md-divider>\n        </md-list-item>\n        <md-list-item>\n            <div ng-if="!vm_cg.groupsToArray().length" layout="row" layout-align="center center" flex>\n                <span>{{\'QUICKPANEL.NO_AVAILABLE_GROUPS\' | translate}}</span>\n            </div>\n        </md-list-item>\n        \x3c!-- END Group --\x3e\n    </md-list>\n    \x3c!-- END Groups --\x3e\n</div>\n\n<div class="chat animate-slide-right" ng-if="vm_cg.group" layout="column">\n    <md-toolbar class="md-accent">\n        <div class="md-toolbar-tools " layout="row" layout-align="space-between center">\n            <md-button class="md-icon-button" ng-click="vm_cg.back()" aria-label="Back" translate translate-attr-aria-label="QUICKPANEL.BACK" flex="15">\n                <md-icon md-font-icon="icon-keyboard-backspace"></md-icon>\n            </md-button>\n            <h4 flex layout-align="start center" style="max-height: 100%; overflow-y:auto;">\n                <span translate="QUICKPANEL.YOU" translate-values=\'{participants: vm_cg.participants}\'></span>\n            </h4>\n\n            <div layout="row" layout-align="end center">\n                <md-button ng-if="vm_cg.license.webrtc && vm_cg.currentUser.role === \'agent\' && vm_cg.currentUser.showWebBar === 2 && vm_cg.user.role === \'agent\' && vm_cg.user.showWebBar === 2" class="md-icon-button" aria-label="Call" translate translate-attr-aria-label="QUICKPANEL.CALL" ng-click="vm_cg.webcall(vm_cg.user.name)">\n                    <md-icon md-font-icon="icon-phone"></md-icon>\n                </md-button>\n            </div>\n        </div>\n\n    </md-toolbar>\n    <md-content flex layout-paddings ms-scroll id="chat-group-dialog">\n        <div layout="row" ng-repeat="message in vm_cg.group.messages" class="message-row" ng-class="message.FromId === vm_cg.currentUser.id ? \'user\' : \'contact\'">\n            <img ng-if="message.FromId !== vm_cg.currentUser.id" ng-src="{{\'api/users/\' + message.FromId + \'/avatar\'}}" class="avatar" alt="{{vm_cg.user.fullname}}" />\n            <img ng-if="message.FromId === vm_cg.currentUser.id" class="avatar" ng-src="{{vm_cg.currentUser.userpic ? \'api/users/\' + vm_cg.currentUser.id + \'/avatar\' : \'assets/images/avatars/profile.png\'}}">\n            <div class="bubble" flex>\n                <div ng-if="message.FromId !== vm_cg.currentUser.id">\n                    <span style="font-size: 12px;">{{vm_cg.group.membersByKeys[message.FromId].fullname}}</span>\n                </div>\n                <span class="message" ng-bind-html="message.body | embed:{linkTarget:\'_blank\',emoji:false,fontSmiley:false}"></span>\n                <div layout="row" layout-align="end center">\n                    <span class="time secondary-text" style="margin-top: 0px;">{{message.createdAt | formatdate }}</span>\n                    <md-icon ng-if="message.FromId === vm_cg.currentUser.id" class="s16 margin-5" style="cursor: pointer;" md-font-icon="icon-information-outline" ng-click="vm_cg.showMessageInfo($event, message)"></md-icon>\n                </div>\n            </div>\n        </div>\n    </md-content>\n\n    <form ng-if="(vm_cg.currentUser.role !== \'agent\') || vm_cg.group.write" ng-submit="vm_cg.reply()" layout="row" class="reply" layout-align="start center">\n        <textarea ng-keyup="$event.keyCode == 13 ? vm_cg.reply() : null" flex ng-model="vm_cg.replyMessage" placeholder="Type and hit enter to send message" translate translate-attr-placeholder="QUICKPANEL.REPLY_PLACEHOLDER" autofocus></textarea>\n\n        <md-button class="md-fab md-mini" type="submit" aria-label="Send message" translate translate-attr-aria-label="QUICKPANEL.SEND_MESSAGE">\n            <md-icon md-font-icon="icon-send"></md-icon>\n        </md-button>\n    </form>\n</div>'),e.put("app/quick-panel/tabs/groups/info/dialog.html",'<md-dialog class="group-dialog" aria-label="New ChatGroup">\n    <form name="groupForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog(null)">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div ng-if="vm.data.messages[$index].FromId !== vm.data.messages[$index].ToId" ng-repeat="user in vm.data.users" layout-margin>\n                <div layout="row">\n                    <div layout="row" layout-align="start center">\n                        <img ng-src="{{user.userpic ? \'api/users/\' + user.id + \'/avatar\' : \'assets/images/avatars/profile.png\'}}" class="avatar" alt="{{user.fullname}}" />\n                        <span>{{user.fullname}}</span>\n                    </div>\n                    <div layout="row" layout-align="end center" flex>\n                        <md-icon class="s16 margin-5" md-font-icon="{{vm.data.messages[$index].read ? \'icon-check-all md-accent\' : \'icon-check\'}}"></md-icon>\n                        <span class="time secondary-text">{{vm.data.messages[$index].updatedAt | formatdate }}</span>\n                    </div>\n                </div>\n                <div>\n                    <md-divider ng-if="!$last"></md-divider>\n                </div>\n            </div>\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/quick-panel/tabs/today/today-tab.html",'<md-list class="date">\n    <md-subheader class="md-no-sticky"><span translate="QUICKPANEL.TODAY">Today</span></md-subheader>\n    <md-list-item class="md-display-1 md-2-line">\n        <div class="secondary-text">\n            <div translate="QUICKPANEL.{{ (vm.date | date:\'EEEE\').toUpperCase() }}"></div>\n            <div layout="row" layout-align="start start">\n                <span> {{vm.date | date:\'d\'}}</span>\n                <span class="md-subhead">th</span>\n                <span translate="QUICKPANEL.{{ (vm.date | date:\'MMMM\').toUpperCase() }}"></span>\n            </div>\n        </div>\n    </md-list-item>\n</md-list>\n\n\x3c!-- <md-divider></md-divider>\n\n<md-list>\n    <md-subheader class="md-no-sticky"><span translate="QUICKPANEL.EVENTS">Events</span></md-subheader>\n\n    <md-list-item class="md-2-line" ng-repeat="event in vm.events" ng-click="dummyFunction()">\n        <div class="md-list-item-text">\n            <h3>{{event.title}}</h3>\n\n            <p>{{event.detail}}</p>\n        </div>\n    </md-list-item>\n</md-list>\n\n<md-divider></md-divider>\n\n<md-list>\n    <md-subheader class="md-no-sticky"><span translate="QUICKPANEL.NOTES">Notes</span></md-subheader>\n    <md-list-item class="md-2-line" ng-repeat="note in vm.notes" ng-click="dummyFunction()">\n        <div class="md-list-item-text">\n            <h3>{{note.title}}</h3>\n\n            <p>{{note.detail}}</p>\n        </div>\n    </md-list-item>\n</md-list>\n\n<md-divider></md-divider>\n\n<md-list>\n    <md-subheader class="md-no-sticky"><span translate="QUICKPANEL.QUICK_SETTINGS">Quick Settings</span></md-subheader>\n\n    <md-list-item>\n        <h3 translate="QUICKPANEL.NOTIFICATIONS">Notifications</h3>\n        <md-switch class="md-secondary" ng-model="vm.settings.notify" aria-label="Notifications" translate\n                   translate-attr-aria-label="QUICKPANEL.NOTIFICATIONS"></md-switch>\n    </md-list-item>\n\n    <md-list-item>\n        <h3 translate="QUICKPANEL.CLOUD_SYNC">Cloud Sync</h3>\n        <md-switch class="md-secondary" ng-model="vm.settings.cloud" aria-label="Cloud Sync" translate\n                   translate-attr-aria-label="QUICKPANEL.CLOUD_SYNC"></md-switch>\n    </md-list-item>\n\n    <md-list-item>\n        <h3 translate="QUICKPANEL.RETRO_THRUSTERS">Retro Thrusters</h3>\n        <md-switch class="md-secondary md-warn" ng-model="vm.settings.retro" aria-label="Retro Thrusters" translate\n                   translate-attr-aria-label="QUICKPANEL.RETRO_THRUSTERS"></md-switch>\n    </md-list-item>\n</md-list> --\x3e'),e.put("app/reset/reset.html",'<div id="reset-password" class="flex-scrollable" layout="column" ng-init="vm.onInit()" ms-scroll>\n    <div id="reset-password-form-wrapper" layout="column" layout-align="center center">\n        <div id="reset-password-form" class="md-whiteframe-8dp">\n\n            <img src="/api/settings/1/logo_login" alt="logo_login" class="logo_login" />\n\n            <div class="title" translate="RESETPASSWORD.TITLE">Reset your password</div>\n\n            <form name="resetPasswordForm" novalidate>\n\n                <md-input-container class="md-block" md-no-float>\n                    <input type="password" name="password" ng-model="vm.form.password" ng-pattern="vm.passwordPattern" placeholder="Password" translate translate-attr-placeholder="RESETPASSWORD.PASSWORD" required>\n                    <div ng-messages="resetPasswordForm.password.$error" role="alert">\n                        <div ng-message="required">\n                            <span translate="RESETPASSWORD.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                        </div>\n                        <div ng-message="pattern">\n                            <span translate="RESETPASSWORD.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                        </div>\n                    </div>\n                </md-input-container>\n\n                <md-input-container class="md-block" md-no-float>\n                    <input type="password" name="passwordConfirm" ng-model="vm.form.passwordConfirm" placeholder="Password (Confirm)" match-password="password" translate translate-attr-placeholder="RESETPASSWORD.PASSWORD_CONFIRM">\n                    <div ng-messages="resetPasswordForm.passwordConfirm.$error" role="alert">\n                        <div ng-message="passwordMatch">\n                            <span translate="TOOLBAR.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                        </div>\n                    </div>\n                </md-input-container>\n\n                <md-button type="button" ng-click="vm.resetPassword()" class="md-raised md-accent submit-button" aria-label="UPDATE MY PASSWORD" ng-disabled="resetPasswordForm.$invalid || resetPasswordForm.$pristine" translate="RESETPASSWORD.UPDATE_PASSWORD" translate-attr-aria-label="RESETPASSWORD.UPDATE_PASSWORD">\n                    RESET MY PASSWORD\n                </md-button>\n            </form>\n        </div>\n    </div>\n</div>'),e.put("app/toolbar/changepassword/changepassword.html",'<md-dialog class="user-dialog" aria-label="{{vm.name}}">\n    <form name="changePasswordForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span ng-if="vm.reset" class="title" translate="TOOLBAR.RESETPASSWORD">Reset Password</span>\n                <span ng-if="!vm.reset" class="title" translate="TOOLBAR.CHANGEPASSWORD">Change Password</span>\n                <md-button ng-if="!vm.reset" class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLBAR.OLD_PASSWORD">Old Password</label>\n                <input type="password" name="oldPassword" ng-model="vm.oldPassword" placeholder="Password" translate translate-attr-placeholder="TOOLBAR.OLD_PASSWORD" required>\n                <div ng-messages="changePasswordForm.oldPassword.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLBAR.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLBAR.NEW_PASSWORD">New Password</label>\n                <input type="password" name="password" ng-model="vm.password" placeholder="Password" ng-pattern="vm.passwordPattern" translate translate-attr-placeholder="TOOLBAR.NEW_PASSWORD" required>\n                <div ng-messages="changePasswordForm.password.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLBAR.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="TOOLBAR.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                    <div ng-message="oldPasswordMatch">\n                        <span translate="TOOLBAR.ERRORS.PASSWORD_OLDPASSWORD_MATCH">New password must be different from old one</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLBAR.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword">\n                <div ng-messages="changePasswordForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="TOOLBAR.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="TOOLBAR.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.savePassword()" class="send-button md-accent md-raised" ng-disabled="changePasswordForm.$invalid || changePasswordForm.$pristine" aria-label="SAVE" translate="TOOLBAR.SAVE" translate-attr-aria-label="TOOLBAR.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/toolbar/layouts/vertical-navigation/toolbar.html",'<div layout="row" layout-align="start center">\n    <div layout="row" layout-align="start center" flex>\n        <md-button id="navigation-toggle" class="md-icon-button" ng-click="vm.toggleSidenav(\'navigation\')" hide-gt-sm aria-label="Toggle navigation" translate translate-attr-aria-label="TOOLBAR.TOGGLE_NAVIGATION">\n            <md-icon md-font-icon="icon-menu" class="icon"></md-icon>\n        </md-button>\n\n        <ms-shortcuts ng-if="!vm.isAgent()"></ms-shortcuts>\n\n        <div class="toolbar-separator"></div>\n\n        <div ng-if="vm.license.demo" class="blink md-padding">\n            <span class="md-warn-fg" translate="TOOLBAR.TRIAL_VERSION">Trial Version</span>\n        </div>\n\n        <div ng-if="vm.isAgent()" class="logo" layout-padding-left-8 layout="row" layout-align="start center">\n            <span class="logo-image"><img src="/api/settings/1/logo" alt="logo" /></span>\n            <span ng-show="vm.isAgent() && (vm.user.showWebBar != 2)" class="logo-text text-truncate">{{ vm.getLogo() | uppercase }}</span>\n        </div>\n\n        \x3c!-- phonebar directive WebRtc type--\x3e\n        <ms-phonebar class="ms-phonebar" ng-if="vm.isAgent() && (vm.user.showWebBar == 2)" conf="vm.conf" flex></ms-phonebar>\n        \x3c!-- phonebar directive --\x3e\n    </div>\n\n    <div layout="row" layout-align="start center">\n\n        <md-progress-circular id="toolbar-progress" ng-if="$root.loadingProgress" class="md-accent" md-diameter="32"></md-progress-circular>\n\n        \x3c!-- Pause Management --\x3e\n        <div ng-if="vm.isAgent() && (vm.user.showWebBar != 0)" layout="row" layout-align="end center">\n            <div class="toolbar-separator"></div>\n\n            <div class="border brad-5" layout="row" layout-align="center center" layout-margin>\n                <md-button ng-if="vm.user.voicePause" class="md-icon-button no-margin" ng-click="vm.unpause()">\n                    <md-icon md-font-icon="icon-play-circle-outline" class="icon s24"></md-icon>\n                    <md-tooltip md-direction="bottom">{{\'TOOLBAR.RESUME\' | translate}}</md-tooltip>\n                </md-button>\n\n                <md-button ng-disabled="vm.user.voicePause && \'DEFAULT PAUSE\' === vm.user.pauseType" class="md-icon-button no-margin" ng-click="vm.pause()">\n                    <md-icon md-font-icon="icon-pause-circle-outline" class="icon s24"></md-icon>\n                    <md-tooltip md-direction="bottom">{{\'TOOLBAR.PAUSE\' | translate}}</md-tooltip>\n                </md-button>\n\n                <md-menu>\n                    <md-button aria-label="Pauses" class="md-icon-button no-margin" ng-click="$mdOpenMenu($event)">\n                        <md-icon md-menu-origin md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-menu-content width="4">\n                        <md-menu-item ng-if="!vm.pauses.length">\n                            <md-button disabled="disabled">\n                                <md-icon md-font-icon="icon-pause-octagon" md-menu-align-target></md-icon>\n                                {{\'TOOLBAR.NO_PAUSES_AVAILABLE\' | translate}}\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item ng-repeat="pause in vm.pauses">\n                            <md-button ng-disabled="vm.user.voicePause && pause.name === vm.user.pauseType" ng-click="vm.pause(pause.name)">\n                                <md-icon md-font-icon="icon-pause-circle" md-menu-align-target></md-icon>\n                                {{pause.name}}\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n        </div>\n        \x3c!-- Pause Management --\x3e\n\n        <div class="h5 padding-10" ng-if="vm.isAgent() && (vm.user.showWebBar != 0)">\n            <div layout="row" layout-align="space-between center">\n                <timer ng-if="vm.user.lastLoginAt" start-time="vm.user.lastLoginAt">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                <md-tooltip>{{\'TOOLBAR.LOGIN_TIME\' | translate}}</md-tooltip>\n                <md-icon md-font-icon="icon-timelapse" class="icon s16"></md-icon>\n            </div>\n            <div layout="row" layout-align="center center" ng-if="vm.user.voicePause">\n                <timer start-time="vm.user.lastPauseAt">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                <md-tooltip>{{\'TOOLBAR.PAUSE_TIME\' | translate}}</md-tooltip>\n                <md-icon md-font-icon="icon-coffee" class="icon s16"></md-icon>\n            </div>\n            <div ng-if="vm.user.voicePause">\n                <span class="blink red-fg">{{vm.user.pauseType || \'default\' | uppercase}}</span>\n            </div>\n        </div>\n\n        <div class="toolbar-separator" ng-if="vm.isAgent() && (vm.user.showWebBar != 0)"></div>\n\n        <md-menu-bar id="user-menu">\n            <md-menu md-position-mode="left bottom">\n                <md-button class="user-button" ng-click="$mdOpenMenu()" aria-label="User settings" translate translate-attr-aria-label="TOOLBAR.USER_SETTINGS">\n                    <div layout="row" layout-align="space-between center">\n                        <div class="avatar-wrapper">\n                            <img md-menu-align-target class="avatar" src="assets/images/avatars/profile.png" ng-if="!vm.user.userpic">\n                            <img md-menu-align-target class="avatar" ng-src="api/users/{{vm.user.id}}/avatar" ng-if="vm.user.userpic">\n                            <md-icon md-font-icon ng-class="vm.userStatus.icon" ng-style="{\'color\': vm.userStatus.color }" class="icon status s16"></md-icon>\n                        </div>\n                        <div layout="column" layout-align="center center" class="padding-horizontal-5">\n                            <span class="font-size-14 md-subhead">{{vm.user.fullname}}</span>\n                            <span class="font-size-12 md-subhead">{{vm.user.name}} &#60;{{vm.user.internal}}&#62;</span>\n                        </div>\n\n                        <md-icon md-font-icon="icon-chevron-down" class="icon s16" hide-xs></md-icon>\n                    </div>\n                </md-button>\n\n                <md-menu-content width="3">\n                    <md-menu-item ng-if="vm.user.showWebBar == 2 && vm.user.phoneBarEnableSettings" class="md-indent">\n                        <md-icon md-font-icon="icon-cog" class="icon"></md-icon>\n                        <md-button ng-click="vm.openSettings($event)" ng-disabled="!vm.license.webrtc"><span translate="TOOLBAR.SETTINGS">SETTINGS</span></md-button>\n                    </md-menu-item>\n\n                    <md-menu-item class="md-indent">\n                        <md-icon md-font-icon="icon-key-variant" class="icon"></md-icon>\n                        <md-button ng-click="vm.changePassword($event)"><span translate="TOOLBAR.CHANGEPASSWORD">Change Password</span></md-button>\n                    </md-menu-item>\n\n                    <md-menu-divider></md-menu-divider>\n\n                    <md-menu-item class="md-indent">\n                        <md-icon md-font-icon="icon-logout" class="icon"></md-icon>\n                        <md-button ng-click="vm.logout()">Logout</md-button>\n                    </md-menu-item>\n                </md-menu-content>\n            </md-menu>\n        </md-menu-bar>\n\n        <div class="toolbar-separator"></div>\n\n        <md-button ng-if="vm.user.role === \'agent\' && vm.license.dialer" class="preview-button no-margin" ng-disabled="vm.disable" ng-click="vm.preview($event)" aria-label="Language" md-menu-origin md-menu-align-target>\n            <div ng-if="vm.contacts" class="md-accent-bg open-contact-count">{{vm.contacts > 99 ? \'99+\' : vm.contacts}}</div>\n            <md-icon md-font-icon="icon-fire" class="icon red-900-fg"></md-icon>\n            <md-tooltip><span translate="TOOLBAR.PREVIEW">Preview</span></md-tooltip>\n        </md-button>\n\n        <ms-search-bar ng-if="vm.user.role !== \'agent\'" on-search="vm.search(query)" on-result-click="vm.searchResultClick(item)" debounce="300" collapse-on-blur="true"></ms-search-bar>\n\n        <md-menu id="language-menu" md-offset="0 72" md-position-mode="target-right target" layout="column" layout-align="center center">\n            <md-button class="md-icon-button no-margin" ng-click="$mdOpenMenu()" aria-label="Language" md-menu-origin md-menu-align-target>\n                <div layout="row" layout-align="center center">\n                    <img class="flag" ng-src="assets/images/flags/{{vm.selectedLanguage.flag}}.png">\n                </div>\n            </md-button>\n\n            <md-menu-content width="3" id="language-menu-content">\n                <md-menu-item ng-repeat="(iso, lang) in vm.languages">\n                    <md-button ng-click="vm.changeLanguage(lang)" aria-label="{{lang.title}}" translate translate-attr-aria-label="{{lang.title}}">\n                        <span layout="row" layout-align="start center">\n                            <img class="flag flag-24" ng-src="assets/images/flags/{{lang.flag}}.png">\n                            <span translate="{{lang.translation}}">{{lang.title}}</span>\n                        </span>\n                    </md-button>\n                </md-menu-item>\n            </md-menu-content>\n        </md-menu>\n\n        <div class="toolbar-separator"></div>\n\n        <md-button ng-if="vm.license.gray && vm.user.role !== \'agent\'" class="md-icon-button" ui-sref="app.settings.license" aria-label="Toggle quick panel">\n            <md-icon md-font-icon="icon-alert" class="icon md-warn blink"></md-icon>\n        </md-button>\n        <md-button ng-if="vm.license.gray && vm.user.role === \'agent\'" class="md-icon-button" aria-label="Toggle quick panel">\n            <md-icon md-font-icon="icon-alert" class="icon md-warn blink"></md-icon>\n        </md-button>\n\n        <div ng-if="vm.license.gray" class="toolbar-separator"></div>\n\n        <md-button id="quick-panel-toggle" class="md-icon-button" ng-click="vm.toggleSidenav(\'quick-panel\')" aria-label="Toggle quick panel" translate translate-attr-aria-label="TOOLBAR.TOGGLE_QUICK_PANEL">\n            <div ng-if="(vm.unreadTotalMessages + vm.unreadTotalGroupMessages)" class="md-accent-bg unread-message-count">{{vm.unreadTotalMessages + vm.unreadTotalGroupMessages}}</div>\n            <md-icon md-font-icon="icon-format-list-bulleted" class="icon"></md-icon>\n        </md-button>\n    </div>\n</div>'),e.put("app/toolbar/preview/dialog.html",'<md-dialog class="preview-dialog" aria-label="preview">\n    <form name="previewForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">Preview</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div layout="row" ng-if="vm.preview">\n                <div class="md-padding md-margin" layout="column" flex="30">\n                    <md-input-container ng-if="vm.preview.Contact.id" class="md-block no-margin">\n                        <label translate="CONTACTMANAGER.ID">ID</label>\n                        <input type="text" ng-model="vm.preview.Contact.id" disabled="true">\n                    </md-input-container>\n                    <md-input-container ng-if="vm.preview.Queue.name" class="md-block no-margin">\n                        <label translate="VOICE.QUEUE">Queue</label>\n                        <input type="text" ng-model="vm.preview.Queue.name" disabled="true">\n                    </md-input-container>\n                    <md-input-container ng-if="vm.preview.List.name" class="md-block no-margin">\n                        <label translate="CONTACTMANAGER.LIST">List</label>\n                        <input type="text" ng-model="vm.preview.List.name" disabled="true">\n                    </md-input-container>\n                    <md-input-container ng-if="vm.preview.Contact.tags && vm.preview.Contact.tags.length" class="md-block no-margin">\n                        <label translate="CONTACTMANAGER.TAGS">Tags</label>\n                        <input type="text" ng-model="vm.preview.Contact.tags" disabled="true">\n                    </md-input-container>\n                    <md-input-container ng-if="vm.preview.Contact.Company && vm.preview.Contact.Company.name" class="md-block no-margin">\n                        <label translate="CONTACTMANAGER.COMPANY">Company</label>\n                        <input type="text" ng-model="vm.preview.Contact.Company.name" disabled="true">\n                    </md-input-container>\n                </div>\n                <md-divider></md-divider>\n                <div class="md-padding md-margin" layout="column" flex="35">\n                    <md-input-container ng-repeat="(key, value) in vm.preview.Contact" ng-if="!vm.isNil(value) && !vm.isCustomField(key) && !vm.isHiddenField(key)" class="md-block no-margin">\n                        <label>{{ \'CONTACTMANAGER.\' + key.toUpperCase() | translate}}</label>\n                        <input type="text" ng-model="value" disabled="true">\n                    </md-input-container>\n                </div>\n                <div class="md-padding md-margin" layout="column" flex="35">\n                    <md-input-container ng-repeat="(key, value) in vm.preview.Contact" ng-if="!vm.isNil(value) && vm.isCustomField(key) && !vm.isHiddenField(key)" class="md-block no-margin">\n                        <label>{{ vm.customFieldsMap[key] || key }}</label>\n                        <input type="text" ng-model="value" disabled="true">\n                    </md-input-container>\n                </div>\n            </div>\n            <div layout="row" ng-if="!vm.preview">\n                <span>no contacts available</span>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions class="md-dialog-action-center padding-rigth-15">\n            <md-button class="md-icon-button md-primary" ng-hide="vm.hopperIds.length <= 1" ng-disabled="vm.disableGetContact" ng-click="vm.previousContact()" aria-label="PREVIOUSCONTACT" translate-attr-aria-label="TOOLS.PREVIOUSCONTACT">\n                <md-icon md-font-icon="icon-chevron-left"></md-icon>\n            </md-button>\n            <md-button class="md-fab green-bg" aria-label="CALL" translate-attr-aria-label="TOOLS.CALL" ng-disabled="vm.disable" ng-click="vm.originatePreview($event)">\n                <md-icon md-font-icon="icon-phone"></md-icon>\n            </md-button>\n            <md-button class="md-icon-button md-primary" ng-disabled="vm.disableGetContact" ng-click="vm.nextContact()" aria-label="NEXTCONTACT" translate-attr-aria-label="TOOLS.NEXTCONTACT">\n                <md-icon md-font-icon="icon-chevron-right"></md-icon>\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>')}]);
\ No newline at end of file
+!function(){"use strict";angular.module("app.auth",[])}(),function(){"use strict";angular.module("app.core",["ngAnimate","ngAria","ngCookies","ngMessages","ngResource","ngSanitize","ngMaterial","pascalprecht.translate","ui.router","gridster","ds.clock","angucomplete-alt"])}(),function(){"use strict";function e(e,t){e.state("app.errors_error-404",{url:"/errors/error-404",views:{"main@":{templateUrl:"app/core/layouts/content-only.html",controller:"MainController as vm"},"content@app.errors_error-404":{templateUrl:"app/errors/404/error-404.html",controller:"Error404Controller as vm"}},params:{status:404,statusText:"",data:{},config:{}},bodyClass:"error-404"}),t.addPart("app/errors/404")}e.$inject=["$stateProvider","$translatePartialLoaderProvider"],angular.module("app.errors.error-404",[]).config(e)}(),function(){"use strict";function e(e,t){e.state("app.errors_error-500",{url:"/errors/error-500",views:{"main@":{templateUrl:"app/core/layouts/content-only.html",controller:"MainController as vm"},"content@app.errors_error-500":{templateUrl:"app/errors/500/error-500.html",controller:"Error500Controller as vm"}},params:{status:500,statusText:"",data:{},config:{}},bodyClass:"error-500"}),t.addPart("app/errors/500")}e.$inject=["$stateProvider","$translatePartialLoaderProvider"],angular.module("app.errors.error-500",[]).config(e)}(),function(){"use strict";angular.module("app.errors",["app.errors.error-404","app.errors.error-500"])}(),function(){"use strict";function e(e){e.addPart("app/footer")}e.$inject=["$translatePartialLoaderProvider"],angular.module("app.footer",[]).config(e)}(),function(){"use strict";function e(e,t){e.state("app.forgot",{url:"/forgot",views:{"main@":{templateUrl:"app/core/layouts/content-only.html",controller:"MainController as vm"},"content@app.forgot":{templateUrl:"app/forgot/forgot.html",controller:"ForgotPasswordController as vm"}},bodyClass:"forgot"}),t.addPart("app/forgot")}e.$inject=["$stateProvider","$translatePartialLoaderProvider"],angular.module("app.forgot",[]).config(e)}(),function(){"use strict";function e(e){e.addPart("app/header")}e.$inject=["$translatePartialLoaderProvider"],angular.module("app.header",[]).config(e)}(),function(){"use strict";angular.module("motion",["angular-toasty","app.core","app.auth","app.navigation","app.toolbar","app.quick-panel","app.header","app.footer","app.dashboards","app.staff","app.contactmanager","app.voice","app.chat","app.mail","app.sms","app.openchannel","app.fax","app.tools","app.callysquare","app.analytics","app.integrations","app.settings","app.motiondialer","app.help","app.jscripty","app.marketplace","app.plugins","app.video","app.login","app.forgot","app.reset","app.errors"])}(),function(){"use strict";function e(e,t){e.state("app.login",{url:"/login?token&userId",views:{"main@":{templateUrl:"app/core/layouts/content-only.html",controller:"MainController as vm"},"content@app.login":{templateUrl:"app/login/login.html",controller:"LoginController as vm"}},bodyClass:"login"}),t.addPart("app/login")}e.$inject=["$stateProvider","$translatePartialLoaderProvider"],angular.module("app.login",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.analytics",{abstract:!0,url:"/analytics"}).state("app.analytics.metrics",{url:"/metrics",views:{"content@app":{templateUrl:"app/main/apps/analytics/views/metrics/metrics.html",controller:"MetricsController as vm"}},resolve:{metrics:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("analyticMetric@get",{fields:"createdAt,updatedAt,id,name,table,metric,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Metrics",fields:"createdAt,updatedAt,id,name,table,metric,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1201})}]},authenticate:!0,permissionId:1201,bodyClass:"analytics"}).state("app.analytics.extractedReports",{url:"/extractedReports",views:{"content@app":{templateUrl:"app/main/apps/analytics/views/extractedReports/extractedReports.html",controller:"ExtractedReportsController as vm"}},resolve:{extractedReports:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("analyticExtractedReport@get",{fields:"createdAt,updatedAt,id,name,basename,savename,type,startDate,endDate,status,output,reportId,reportType",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ExtractedReports",fields:"createdAt,updatedAt,id,name,basename,savename,type,startDate,endDate,status,output,reportId,reportType",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1202})}]},authenticate:!0,permissionId:1202,bodyClass:"analytics"}),t.addPart("app/main/apps/analytics")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.analytics",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.analytics.reports"]).config(e)}(),function(){"use strict";function e(e){e.state("app.analytics.reports",{url:"/reports",views:{"content@app":{templateUrl:"app/main/apps/analytics/views/reports/reports.html",controller:"ReportsController as vm"}},resolve:{treeReports:["apiResolver",function(e){return e.resolve("analyticTreeReport@get",{fields:"id,tree",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1203})}]},authenticate:!0,permissionId:1203,bodyClass:"analytics"}).state("app.analytics.reports.edit",{url:"/:id?tab",views:{"content@app":{templateUrl:"app/main/apps/analytics/views/reports/edit/view.html",controller:"ReportController as vm"}},resolve:{report:["apiResolver","$stateParams","$q","describeTable",function(e,t,a,i){var s;return e.resolve("analyticCustomReport@get",{fields:"createdAt,updatedAt,id,name,description,table,conditions,joins",id:t.id}).then(function(e){var t=[];if((s=e).joins)try{s.joins=JSON.parse(s.joins);for(var n=0;n<s.joins.length;n+=1)t.push(i.getColumns(s.joins[n].foreignTable))}catch(e){console.log(e)}return a.all(t)}).then(function(e){for(var t=0;t<e.length;t+=1)s.joins[t].foreignTableFields=_.difference(_.keys(e[t]),["$promise","$resolved"]);return s})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1203})}]},authenticate:!0,permissionId:1203,bodyClass:"analytics"})}e.$inject=["$stateProvider"],angular.module("app.analytics.reports",["ngJsTree"]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.callysquare",{abstract:!0,url:"/callysquare"}).state("app.callysquare.odbcs",{url:"/odbcs",views:{"content@app":{templateUrl:"app/main/apps/callysquare/views/odbcs/odbcs.html",controller:"OdbcsController as vm"}},resolve:{odbcs:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("squareOdbc@get",{fields:"createdAt,updatedAt,id,name,dsn,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ODBC",fields:"createdAt,updatedAt,id,name,dsn,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1101})}]},authenticate:!0,permissionId:1101,bodyClass:"callysquare"}).state("app.callysquare.squareRecordings",{url:"/squareRecordings",views:{"content@app":{templateUrl:"app/main/apps/callysquare/views/squareRecordings/squareRecordings.html",controller:"SquareRecordingsController as vm"}},resolve:{squareRecordings:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("squareRecording@get",{fields:"createdAt,updatedAt,id,filename,projectName,uniqueid,callerid,extension,audio",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SquareRecordings",fields:"createdAt,updatedAt,id,filename,projectName,uniqueid,callerid,extension,audio",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1102})}]},authenticate:!0,permissionId:1102,bodyClass:"callysquare"}),t.addPart("app/main/apps/callysquare")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.callysquare",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.callysquare.projects"]).config(e)}(),function(){"use strict";function e(e){e.state("app.callysquare.projects",{url:"/projects",views:{"content@app":{templateUrl:"app/main/apps/callysquare/views/projects/projects.html",controller:"ProjectsController as vm"}},resolve:{projects:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("squareProject@get",{fields:"id,name,description,notes",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SquareProjects",fields:"id,name,description,notes",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1103})}]},authenticate:!0,permissionId:1103,bodyClass:"callysquare"}).state("app.callysquare.projects.edit",{url:"/:id",views:{"content@app":{templateUrl:"app/main/apps/callysquare/views/projects/edit/view.html",controller:"ProjectController as vm"}},params:{crudPermissions:void 0},resolve:{project:["apiResolver","$stateParams",function(e,t){return e.resolve("squareProject@get",{id:t.id})}],users:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,fullname,role",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Users",mergeResources:!0,fields:"id,fullname,role",sort:"name",nolimit:!0})}],trunks:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("trunk@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Trunks",fields:"id,name",sort:"name",nolimit:!0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"inbound",fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",type:"inbound",fields:"id,name",sort:"name",nolimit:!0})}],sounds:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("sound@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Sounds",fields:"id,name",sort:"name",nolimit:!0})}],variables:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("variable@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Variables",fields:"id,name",sort:"name",nolimit:!0})}],databases:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("squareOdbc@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ODBC",fields:"id,name",sort:"name",nolimit:!0})}],projects:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("squareProject@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SquareProjects",fields:"id,name",sort:"name",nolimit:!0})}],contexts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceContext@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Contexts",fields:"id,name",sort:"name",nolimit:!0})}],intervals:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("interval@get",{fields:"id,name,IntervalId",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Intervals",fields:"id,name,IntervalId",sort:"name",nolimit:!0})}],mailAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailAccount@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MailAccounts",fields:"id,name",sort:"name",nolimit:!0})}],templates:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("template@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Templates",fields:"id,name",sort:"name",nolimit:!0})}],lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Lists",fields:"id,name",sort:"name",nolimit:!0})}],smsAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("smsAccount@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SmsAccounts",fields:"id,name",sort:"name",nolimit:!0})}],pauses:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("pause@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Pauses",fields:"id,name",sort:"name",nolimit:!0})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1103})}]},authenticate:!0,permissionId:1103,bodyClass:"callysquare"})}e.$inject=["$stateProvider"],angular.module("app.callysquare.projects",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.chat",{abstract:!0,url:"/chat"}).state("app.chat.chatQueues",{url:"/chatQueues",views:{"content@app":{templateUrl:"app/main/apps/chat/views/chatQueues/chatQueues.html",controller:"ChatQueuesController as vm"}},resolve:{chatQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("chatQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"chat",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ChatQueues",fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"chat",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:501})}]},authenticate:!0,permissionId:501,bodyClass:"chat"}).state("app.chat.chatQueues.edit",{url:"/:id?tab",params:{chatQueue:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/chat/views/chatQueues/edit/view.html",controller:"ChatQueueController as vm"}},resolve:{chatQueue:["apiResolver","$stateParams",function(e,t){return e.resolve("chatQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:501})}]},authenticate:!0,permissionId:501,bodyClass:"chat"}).state("app.chat.chatWebsites",{url:"/chatWebsites",views:{"content@app":{templateUrl:"app/main/apps/chat/views/chatWebsites/chatWebsites.html",controller:"ChatWebsitesController as vm"}},resolve:{chatWebsites:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("chatWebsite@get",{fields:"createdAt,updatedAt,id,token,agentIdentifier,customerAlias,messageFontSize,name,key,address,remote,ListId,fidelity,timeout,agentAlias,closingQuestion,formSubmitSuccessMessage,formSubmitFailureMessage,color,color_focus,color_button,textColor,backgroundColor,fontSize,header_shape,showAgentAvatar,showCustomerAvatar,alignment,verticalAlignment,messagesAlignment,defaultTitle,animation,defaultWhiteLabel,whiteLabel,defaultLogo,conditionAgreement,autoclose,enableUnmanagedNote,unmanagedMessage,skipUnmanaged,sendUnmanaged,enableCustomerWriting,waitingTitle,waitingMessage,closingMessage,noteTitle,placeholderMessage,skipMessageButton,enableRating,ratingType,ratingStarsNumber,enableFeedback,forwardTranscript,forwardTranscriptMessage,closingMessageButton,download_transcript,enableCustomerAttachment,enableCustomerCheckmarks,systemAlias,enquiry_enable,enquiry_forwarding,enquiry_forwarding_address,name_title,username_placeholder,email_title,email_placeholder,header_online,hideWhenOffline,header_offline,start_chat_button,offline_chat_button,offlineMessageSubject,offlineMessageBody,offline_message,message_title,enquiry_message_placeholder,enquiry_button,rating_message,rating_send,rating_skip,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ChatWebsites",fields:"createdAt,updatedAt,id,token,agentIdentifier,customerAlias,messageFontSize,name,key,address,remote,ListId,fidelity,timeout,agentAlias,closingQuestion,formSubmitSuccessMessage,formSubmitFailureMessage,color,color_focus,color_button,textColor,backgroundColor,fontSize,header_shape,showAgentAvatar,showCustomerAvatar,alignment,verticalAlignment,messagesAlignment,defaultTitle,animation,defaultWhiteLabel,whiteLabel,defaultLogo,conditionAgreement,autoclose,enableUnmanagedNote,unmanagedMessage,skipUnmanaged,sendUnmanaged,enableCustomerWriting,waitingTitle,waitingMessage,closingMessage,noteTitle,placeholderMessage,skipMessageButton,enableRating,ratingType,ratingStarsNumber,enableFeedback,forwardTranscript,forwardTranscriptMessage,closingMessageButton,download_transcript,enableCustomerAttachment,enableCustomerCheckmarks,systemAlias,enquiry_enable,enquiry_forwarding,enquiry_forwarding_address,name_title,username_placeholder,email_title,email_placeholder,header_online,hideWhenOffline,header_offline,start_chat_button,offline_chat_button,offlineMessageSubject,offlineMessageBody,offline_message,message_title,enquiry_message_placeholder,enquiry_button,rating_message,rating_send,rating_skip,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:502})}]},authenticate:!0,permissionId:502,bodyClass:"chat"}).state("app.chat.chatWebsites.edit",{url:"/:id?tab",params:{chatWebsite:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/chat/views/chatWebsites/edit/view.html",controller:"ChatWebsiteController as vm"}},resolve:{chatWebsite:["apiResolver","$stateParams",function(e,t){return e.resolve("chatWebsite@get",{fields:"createdAt,updatedAt,id,token,agentIdentifier,customerAlias,messageFontSize,name,key,address,remote,ListId,fidelity,timeout,agentAlias,closingQuestion,formSubmitSuccessMessage,formSubmitFailureMessage,color,color_focus,color_button,textColor,backgroundColor,fontSize,header_shape,showAgentAvatar,showCustomerAvatar,alignment,verticalAlignment,messagesAlignment,defaultTitle,animation,defaultWhiteLabel,whiteLabel,defaultLogo,conditionAgreement,autoclose,enableUnmanagedNote,unmanagedMessage,skipUnmanaged,sendUnmanaged,enableCustomerWriting,waitingTitle,waitingMessage,closingMessage,noteTitle,placeholderMessage,skipMessageButton,enableRating,ratingType,ratingStarsNumber,enableFeedback,forwardTranscript,forwardTranscriptMessage,closingMessageButton,download_transcript,enableCustomerAttachment,enableCustomerCheckmarks,systemAlias,enquiry_enable,enquiry_forwarding,enquiry_forwarding_address,name_title,username_placeholder,email_title,email_placeholder,header_online,hideWhenOffline,header_offline,start_chat_button,offline_chat_button,offlineMessageSubject,offlineMessageBody,offline_message,message_title,enquiry_message_placeholder,enquiry_button,rating_message,rating_send,rating_skip,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:502})}]},authenticate:!0,permissionId:502,bodyClass:"chat"}),t.addPart("app/main/apps/chat")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.chat",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.chat.realtime"]).config(e)}(),function(){"use strict";function e(e){e.state("app.chat.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/chat/views/realtime/realtime.html",controller:"ChatRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:510})}]},authenticate:!0,permissionId:510}).state("app.chat.realtime.agents",{url:"/agents",controller:"AgentsChatRealtimeController as vm",templateUrl:"app/main/apps/chat/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:510}).state("app.chat.realtime.queues",{url:"/queues",controller:"QueuesChatRealtimeController as vm",templateUrl:"app/main/apps/chat/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("chatQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ChatQueues",channel:"chat",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:501})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getChatQueues")}]},authenticate:!0,permissionId:510})}e.$inject=["$stateProvider"],angular.module("app.chat.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.contactmanager",{abstract:!0,url:"/contactmanager"}).state("app.contactmanager.lists",{url:"/lists",views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/lists/lists.html",controller:"ListsController as vm"}},resolve:{lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"createdAt,updatedAt,id,name,description,dialPrefix",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Lists",fields:"createdAt,updatedAt,id,name,description,dialPrefix",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:301})}]},authenticate:!0,permissionId:301,bodyClass:"contactmanager"}).state("app.contactmanager.lists.edit",{url:"/:id?tab",params:{list:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/lists/edit/view.html",controller:"ListController as vm"}},resolve:{list:["apiResolver","$stateParams",function(e,t){return e.resolve("cmList@get",{fields:"createdAt,updatedAt,id,name,description,dialPrefix",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:301})}]},authenticate:!0,permissionId:301,bodyClass:"contactmanager"}).state("app.contactmanager.companies",{url:"/companies",views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/companies/companies.html",controller:"CompaniesController as vm"}},resolve:{companies:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmCompany@get",{fields:"createdAt,updatedAt,id,name,phone,vat,fax,companyId,type,website,emailDomain,email,description,sStreet,sPostalCode,sCity,sCountry,street,postalCode,city,country",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Companies",fields:"createdAt,updatedAt,id,name,phone,vat,fax,companyId,type,website,emailDomain,email,description,sStreet,sPostalCode,sCity,sCountry,street,postalCode,city,country",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:302})}]},authenticate:!0,permissionId:302,bodyClass:"contactmanager"}).state("app.contactmanager.companies.edit",{url:"/:id?tab",params:{company:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/companies/edit/view.html",controller:"CompanyController as vm"}},resolve:{company:["apiResolver","$stateParams",function(e,t){return e.resolve("cmCompany@get",{fields:"createdAt,updatedAt,id,name,phone,vat,fax,companyId,type,website,emailDomain,email,description,sStreet,sPostalCode,sCity,sCountry,street,postalCode,city,country",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:302})}]},authenticate:!0,permissionId:302,bodyClass:"contactmanager"}).state("app.contactmanager.globalCustomFields",{url:"/globalCustomFields",views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/globalCustomFields/globalCustomFields.html",controller:"GlobalCustomFieldsController as vm"}},resolve:{globalCustomFields:["apiResolver","Auth",function(e,t){return e.resolve("cmCustomField@get",{fields:"createdAt,updatedAt,id,alias,type,values,required",sort:"-updatedAt",ListId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:304})}]},authenticate:!0,permissionId:304,bodyClass:"contactmanager"}),t.addPart("app/main/apps/contactmanager")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.contactmanager",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.contactmanager.contacts"]).config(e)}(),function(){"use strict";function e(e){e.state("app.contactmanager.contacts",{url:"/contacts?ListId&CompanyId",views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/contacts/contacts.html",controller:"ContactsController as vm"}},resolve:{contacts:["apiResolver","Auth","$stateParams",function(e,t,n){return t.hasRole("admin")?e.resolve("cmContact@get",_.merge({includeAll:!0,sort:"-updatedAt",limit:10,offset:0},n)):e.resolve("userProfile@getResources",_.merge({id:t.getCurrentUser().userProfileId,section:"Contacts",includeAll:!0,sort:"-updatedAt",limit:10,offset:0},n))}],lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Lists",fields:"id,name",sort:"-updatedAt",nolimit:!0})}],listsMap:["lists",function(e){for(var t={},n=0;n<e.rows.length;n++)t[e.rows[n].id]=e.rows[n].name;return t}],companies:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmCompany@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Companies",fields:"id,name",sort:"name",nolimit:!0})}],companiesMap:["companies",function(e){for(var t={},n=0;n<e.rows.length;n++)t[e.rows[n].id]=e.rows[n].name;return t}],tags:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("tag@get",{fields:"id,name",sort:"name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Tags",fields:"id,name",sort:"name",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:303})}]},authenticate:!0,permissionId:303,bodyClass:"contactmanager"}).state("app.contactmanager.contacts.edit",{url:"/:id?tab",params:{crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/contactmanager/views/contacts/edit/view.html",controller:"ContactController as vm"}},resolve:{contact:["apiResolver","$stateParams",function(e,t){return e.resolve("cmContact@get",{id:t.id}).then(function(e){return e.dateOfBirth&&(e.dateOfBirth=new Date(e.dateOfBirth)),e}).catch(function(e){console.error(e)})}],hoppers:["apiResolver","$stateParams",function(e,t){return e.resolve("cmContact@getHoppers",{id:t.id,fields:"id,phone,scheduledat,priority,recallme,VoiceQueueId,CampaignId,UserId",sort:"-updatedAt",limit:10,offset:0})}],finals:["apiResolver","$stateParams",function(e,t){return e.resolve("cmContact@getHopperFinals",{id:t.id,fields:"id,uniqueid,calleridnum,statedesc,starttime,disposition",sort:"-updatedAt",limit:10,offset:0})}],histories:["apiResolver","$stateParams",function(e,t){return e.resolve("cmContact@getHopperHistories",{id:t.id,fields:"id,uniqueid,calleridnum,statedesc,scheduledat,starttime,endtime",sort:"-updatedAt",limit:10,offset:0})}],jscriptySessions:["apiResolver","$stateParams",function(e,t){return e.resolve("cmContact@getJscriptySessions",{id:t.id,fields:"id,starttime,endtime,membername,projectname",sort:"-starttime",limit:10,offset:0})}],companies:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmCompany@get"):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Companies"})}],lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"id,name",sort:"-updatedAt",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Lists",fields:"id,name",sort:"-updatedAt",nolimit:!0})}],customFields:["apiResolver","contact",function(e,t){return t.ListId?e.resolve("cmList@getCustomFields",{id:t.ListId}):null}],tags:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("tag@get"):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Tags"})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:303})}]},authenticate:!0,permissionId:303,bodyClass:"contactmanager"})}e.$inject=["$stateProvider"],angular.module("app.contactmanager.contacts",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.dashboards",{abstract:!0,url:"/dashboards"}),t.addPart("app/main/apps/dashboards")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.dashboards",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.dashboards.general","app.dashboards.custom"]).config(e)}(),function(){"use strict";function e(e){e.state("app.dashboards.custom",{url:"/custom/:id",views:{"content@app":{templateUrl:"app/main/apps/dashboards/views/custom/custom.html",controller:"DashboardCustomController as vm"}},resolve:{voiceQueues:["apiResolver","Auth",function(t,e){var a;return(e.hasRole("admin")?t.resolve("voiceQueue@get",{fields:"id,name",nolimit:!0}):t.resolve("userProfile@getResources",{id:e.getCurrentUser().userProfileId,section:"VoiceQueues",mergeResources:!0,fields:"id,name",channel:"voice",nolimit:!0})).then(function(e){return a=e,t.resolve("rpc@getVoiceQueues")}).then(function(e){if(e)for(var t,n=0;n<e.rows.length;n+=1)(t=_.find(a.rows,{id:e.rows[n].id}))&&_.merge(t,_.pick(e.rows[n],["waiting","total","talking","answered","unmanaged","abandoned"]));return a})}],userProfile:["apiResolver","Auth",function(e,t){return e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:100})}]},authenticate:!0,bodyClass:"dashboards"})}e.$inject=["$stateProvider"],angular.module("app.dashboards.custom",[]).config(e)}(),function(){"use strict";function e(e){e.state("app.dashboards.general",{url:"/general",data:{selectedTab:0},views:{"content@app":{templateProvider:["$stateParams","$templateFactory","Auth",function(e,t,n){var a=n.getCurrentUser();return a&&"agent"===a.role?t.fromUrl("app/main/apps/dashboards/views/general/agent/agent.general.html",e):t.fromUrl("app/main/apps/dashboards/views/general/user/user.general.html",e)}],controllerProvider:["Auth",function(e){var t=e.getCurrentUser();return t&&"agent"===t.role?"AgentDashboardGeneralController as vm":"UserDashboardGeneralController as vm"}]}},resolve:{globalUserLists:["apiResolver","Auth",function(e,t){return e.resolve("user@getLists",{id:t.getCurrentUser().id,sort:"name",nolimit:!0})}],globalLists:["apiResolver","Auth",function(e,t){return e.resolve("cmList@get",{sort:"name",nolimit:!0})}],globalTags:["apiResolver",function(e){return e.resolve("tag@get",{sort:"name",nolimit:!0})}],globalCompanies:["apiResolver",function(e){return e.resolve("cmCompany@get",{sort:"name",nolimit:!0})}]},authenticate:!0,bodyClass:"dashboards"})}e.$inject=["$stateProvider"],angular.module("app.dashboards.general",["ngMaterialDateRangePicker","app.dashboards.general.user"]).config(e)}(),function(){"use strict";function e(e){e.state("app.dashboards.general.voice",{url:"/voice",data:{selectedTab:0},views:{voice:{templateUrl:"app/main/apps/dashboards/views/general/user/voice/user.general.voice.html",controller:"UserVoiceDashboardGeneralController as vm"}},resolve:{rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueues")}],inboundQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{fields:"id,name",type:"inbound",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",fields:"id,name",type:"inbound",channel:"voice",nolimit:!0})}],outbound:["apiResolver",function(e){return e.resolve("rpc@getOutbound")}]},authenticate:!0,bodyClass:"dashboards"}).state("app.dashboards.general.dialer",{url:"/dialer",data:{selectedTab:1},views:{dialer:{templateUrl:"app/main/apps/dashboards/views/general/user/dialer/user.general.dialer.html",controller:"UserVoiceDashboardDialerController as vm"}},resolve:{rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueues")}],outboundQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{fields:"id,name",type:"outbound",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"QueueCampaigns",fields:"id,name",type:"outbound",channel:"voice",nolimit:!0})}],rpcCampaigns:["apiResolver",function(e){return e.resolve("rpc@getCampaigns")}]},authenticate:!0,bodyClass:"dashboards"}).state("app.dashboards.general.chat",{url:"/chat",data:{selectedTab:2},views:{chat:{templateUrl:"app/main/apps/dashboards/views/general/user/chat/user.general.chat.html",controller:"UserChatDashboardGeneralController as vm"}},resolve:{chatInteractions:["apiResolver",function(e){return e.resolve("chatInteraction@get",{dateStart:moment().startOf("day").toString(),dateEnd:moment().endOf("day").toString()})}],chatWebsites:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("chatWebsite@get",{fields:"createdAt,updatedAt,id,token,agentIdentifier,customerAlias,messageFontSize,name,key,address,remote,ListId,fidelity,timeout,agentAlias,closingQuestion,formSubmitSuccessMessage,formSubmitFailureMessage,color,color_focus,color_button,textColor,backgroundColor,fontSize,header_shape,showAgentAvatar,showCustomerAvatar,alignment,verticalAlignment,messagesAlignment,defaultTitle,animation,defaultWhiteLabel,whiteLabel,defaultLogo,conditionAgreement,autoclose,enableUnmanagedNote,unmanagedMessage,skipUnmanaged,sendUnmanaged,enableCustomerWriting,waitingTitle,waitingMessage,closingMessage,noteTitle,placeholderMessage,skipMessageButton,enableRating,ratingType,ratingStarsNumber,enableFeedback,forwardTranscript,forwardTranscriptMessage,closingMessageButton,download_transcript,enableCustomerAttachment,systemAlias,enquiry_enable,enquiry_forwarding,enquiry_forwarding_address,name_title,username_placeholder,email_title,email_placeholder,header_online,hideWhenOffline,header_offline,start_chat_button,offline_chat_button,offlineMessageSubject,offlineMessageBody,header_offline,offline_message,message_title,enquiry_message_placeholder,enquiry_button,rating_message,rating_send,rating_skip,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardTranscript,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,description,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ChatWebsites",fields:"createdAt,updatedAt,id,token,agentIdentifier,customerAlias,messageFontSize,name,key,address,remote,ListId,fidelity,timeout,agentAlias,closingQuestion,formSubmitSuccessMessage,formSubmitFailureMessage,color,color_focus,color_button,textColor,backgroundColor,fontSize,header_shape,showAgentAvatar,showCustomerAvatar,alignment,verticalAlignment,messagesAlignment,defaultTitle,animation,defaultWhiteLabel,whiteLabel,defaultLogo,conditionAgreement,autoclose,enableUnmanagedNote,unmanagedMessage,skipUnmanaged,sendUnmanaged,enableCustomerWriting,waitingTitle,waitingMessage,closingMessage,noteTitle,placeholderMessage,skipMessageButton,enableRating,ratingType,ratingStarsNumber,enableFeedback,forwardTranscript,forwardTranscriptMessage,closingMessageButton,download_transcript,enableCustomerAttachment,systemAlias,enquiry_enable,enquiry_forwarding,enquiry_forwarding_address,name_title,username_placeholder,email_title,email_placeholder,header_online,hideWhenOffline,header_offline,start_chat_button,offline_chat_button,offlineMessageSubject,offlineMessageBody,header_offline,offline_message,message_title,enquiry_message_placeholder,enquiry_button,rating_message,rating_send,rating_skip,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardTranscript,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,description,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,bodyClass:"dashboards"}).state("app.dashboards.general.mail",{url:"/mail",data:{selectedTab:3},views:{mail:{templateUrl:"app/main/apps/dashboards/views/general/user/mail/user.general.mail.html",controller:"UserMailDashboardGeneralController as vm"}},resolve:{mailInteractions:["apiResolver",function(e){return e.resolve("mailInteraction@get",{dateStart:moment().startOf("day").toString(),dateEnd:moment().endOf("day").toString()})}],mailAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailAccount@get",{fields:"createdAt,updatedAt,id,name,key,email,ListId,active,cservice,Imap.service,Imap.host,Imap.port,Imap.tls,Imap.authentication,Imap.user,Imap.password,Imap.mailbox,Imap.connTimeout,Imap.authTimeout,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,cauthentication,cuser,cpassword,fontFamily,fontSize,template,markAsUnread,waitForTheAssignedAgent,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MailAccounts",fields:"createdAt,updatedAt,id,name,key,email,ListId,active,cservice,Imap.service,Imap.host,Imap.port,Imap.tls,Imap.authentication,Imap.user,Imap.password,Imap.mailbox,Imap.connTimeout,Imap.authTimeout,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,cauthentication,cuser,cpassword,fontFamily,fontSize,template,markAsUnread,waitForTheAssignedAgent,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,bodyClass:"dashboards"}).state("app.dashboards.general.sms",{url:"/sms",data:{selectedTab:4},views:{sms:{templateUrl:"app/main/apps/dashboards/views/general/user/sms/user.general.sms.html",controller:"UserSmsDashboardGeneralController as vm"}},resolve:{smsInteractions:["apiResolver",function(e){return e.resolve("smsInteraction@get",{dateStart:moment().startOf("day").toString(),dateEnd:moment().endOf("day").toString()})}],smsAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("smsAccount@get",{fields:"createdAt,updatedAt,id,name,key,token,remote,ListId,phone,type,accountSid,authId,authToken,smsMethod,username,password,senderString,deliveryReport,waitForTheAssignedAgent,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SmsAccounts",fields:"createdAt,updatedAt,id,name,key,token,remote,ListId,phone,type,accountSid,authId,authToken,smsMethod,username,password,senderString,deliveryReport,waitForTheAssignedAgent,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,bodyClass:"dashboards"}).state("app.dashboards.general.openchannel",{url:"/openchannel",data:{selectedTab:5},views:{openchannel:{templateUrl:"app/main/apps/dashboards/views/general/user/openchannel/user.general.openchannel.html",controller:"UserOpenchannelDashboardGeneralController as vm"}},resolve:{openchannelInteractions:["apiResolver",function(e){return e.resolve("openchannelInteraction@get",{dateStart:moment().startOf("day").toString(),dateEnd:moment().endOf("day").toString()})}],openchannelAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("openchannelAccount@get",{fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,description,receiveUri,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"OpenchannelAccounts",fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,description,receiveUri,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",nolimit:!0})}]},authenticate:!0,bodyClass:"dashboards"}).state("app.dashboards.general.fax",{url:"/fax",data:{selectedTab:6},views:{fax:{templateUrl:"app/main/apps/dashboards/views/general/user/fax/user.general.fax.html",controller:"UserFaxDashboardGeneralController as vm"}},resolve:{faxInteractions:["apiResolver",function(e){return e.resolve("faxInteraction@get",{dateStart:moment().startOf("day").toString(),dateEnd:moment().endOf("day").toString()})}],faxAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("faxAccount@get",{fields:"createdAt,updatedAt,id,name,key,headerinfo,TrunkId,localstationid,ListId,waitForTheAssignedAgent,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"FaxAccounts",fields:"createdAt,updatedAt,id,name,key,headerinfo,TrunkId,localstationid,ListId,waitForTheAssignedAgent,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,acceptMethod,acceptUrl,rejectMethod,rejectUrl,closeMethod,closeUrl,notificationSound,notificationShake,notificationTemplate",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,bodyClass:"dashboards"})}e.$inject=["$stateProvider"],angular.module("app.dashboards.general.user",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.fax",{abstract:!0,url:"/fax"}).state("app.fax.faxQueues",{url:"/faxQueues",views:{"content@app":{templateUrl:"app/main/apps/fax/views/faxQueues/faxQueues.html",controller:"FaxQueuesController as vm"}},resolve:{faxQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("faxQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"fax",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"FaxQueues",fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"fax",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:901})}]},authenticate:!0,permissionId:901,bodyClass:"fax"}).state("app.fax.faxQueues.edit",{url:"/:id?tab",params:{faxQueue:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/fax/views/faxQueues/edit/view.html",controller:"FaxQueueController as vm"}},resolve:{faxQueue:["apiResolver","$stateParams",function(e,t){return e.resolve("faxQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:901})}]},authenticate:!0,permissionId:901,bodyClass:"fax"}).state("app.fax.faxAccounts",{url:"/faxAccounts",views:{"content@app":{templateUrl:"app/main/apps/fax/views/faxAccounts/faxAccounts.html",controller:"FaxAccountsController as vm"}},resolve:{faxAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("faxAccount@get",{fields:"createdAt,updatedAt,id,name,key,headerinfo,TrunkId,localstationid,ListId,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"FaxAccounts",fields:"createdAt,updatedAt,id,name,key,headerinfo,TrunkId,localstationid,ListId,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:902})}]},authenticate:!0,permissionId:902,bodyClass:"fax"}).state("app.fax.faxAccounts.edit",{url:"/:id?tab",params:{faxAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/fax/views/faxAccounts/edit/view.html",controller:"FaxAccountController as vm"}},resolve:{faxAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("faxAccount@get",{fields:"createdAt,updatedAt,id,name,key,headerinfo,TrunkId,localstationid,ListId,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:902})}]},authenticate:!0,permissionId:902,bodyClass:"fax"}),t.addPart("app/main/apps/fax")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.fax",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.fax.realtime"]).config(e)}(),function(){"use strict";function e(e){e.state("app.fax.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/fax/views/realtime/realtime.html",controller:"FaxRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:910})}]},authenticate:!0,permissionId:910}).state("app.fax.realtime.agents",{url:"/agents",controller:"AgentsFaxRealtimeController as vm",templateUrl:"app/main/apps/fax/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:910}).state("app.fax.realtime.trunks",{url:"/trunks",controller:"TrunksFaxRealtimeController as vm",templateUrl:"app/main/apps/fax/views/realtime/trunks/view.html",resolve:{trunks:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("trunk@get",{fields:"id,name",active:!0,sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Trunks",fields:"id,name",active:!0,sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1011})}],rpcTrunks:["apiResolver",function(e){return e.resolve("rpc@getTrunks")}]},authenticate:!0,permissionId:910}).state("app.fax.realtime.queues",{url:"/queues",controller:"QueuesFaxRealtimeController as vm",templateUrl:"app/main/apps/fax/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("faxQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"FaxQueues",channel:"fax",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:901})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getFaxQueues")}]},authenticate:!0,permissionId:910}).state("app.fax.realtime.accounts",{url:"/accounts",controller:"FaxAccountsRealtimeController as vm",templateUrl:"app/main/apps/fax/views/realtime/accounts/view.html",resolve:{faxAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("faxAccount@get",{sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"FaxAccounts",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:902})}],rpcFaxAccounts:["apiResolver",function(e){return e.resolve("rpc@getFaxAccounts")}]},authenticate:!0,permissionId:910})}e.$inject=["$stateProvider"],angular.module("app.fax.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.help",{abstract:!0,url:"/help"}),t.addPart("app/main/apps/help")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.help",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.help.about"]).config(e)}(),function(){"use strict";function e(e){e.state("app.help.about",{url:"/about",views:{"content@app":{templateUrl:"app/main/apps/help/views/about/about.html",controller:"AboutController as vm"}},resolve:{info:["apiResolver",function(e){return e.resolve("version@get")}]},authenticate:!0,permissionId:1600,bodyClass:"help"})}e.$inject=["$stateProvider"],angular.module("app.help.about",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.integrations",{abstract:!0,url:"/integrations"}).state("app.integrations.zendeskAccounts",{url:"/zendeskAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/zendeskAccounts/zendeskAccounts.html",controller:"ZendeskAccountsController as vm"}},resolve:{zendeskAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intZendeskAccount@get",{fields:"createdAt,updatedAt,id,name,type,username,remoteUri,authType,password,token,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ZendeskAccounts",fields:"createdAt,updatedAt,id,name,type,username,remoteUri,authType,password,token,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1301})}]},authenticate:!0,permissionId:1301,bodyClass:"integrations"}).state("app.integrations.zendeskAccounts.edit",{url:"/:id?tab",params:{zendeskAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/zendeskAccounts/edit/view.html",controller:"ZendeskAccountController as vm"}},resolve:{zendeskAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intZendeskAccount@get",{fields:"createdAt,updatedAt,id,name,type,username,remoteUri,authType,password,token,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1301})}]},authenticate:!0,permissionId:1301,bodyClass:"integrations"}).state("app.integrations.salesforceAccounts",{url:"/salesforceAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/salesforceAccounts/salesforceAccounts.html",controller:"SalesforceAccountsController as vm"}},resolve:{salesforceAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intSalesforceAccount@get",{fields:"createdAt,updatedAt,id,name,type,username,remoteUri,password,clientId,clientSecret,securityToken,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SalesforceAccounts",fields:"createdAt,updatedAt,id,name,type,username,remoteUri,password,clientId,clientSecret,securityToken,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1302})}]},authenticate:!0,permissionId:1302,bodyClass:"integrations"}).state("app.integrations.salesforceAccounts.edit",{url:"/:id?tab",params:{salesforceAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/salesforceAccounts/edit/view.html",controller:"SalesforceAccountController as vm"}},resolve:{salesforceAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intSalesforceAccount@get",{fields:"createdAt,updatedAt,id,name,type,username,remoteUri,password,clientId,clientSecret,securityToken,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1302})}]},authenticate:!0,permissionId:1302,bodyClass:"integrations"}).state("app.integrations.freshdeskAccounts",{url:"/freshdeskAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/freshdeskAccounts.html",controller:"FreshdeskAccountsController as vm"}},resolve:{freshdeskAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intFreshdeskAccount@get",{fields:"createdAt,updatedAt,id,name,username,remoteUri,apiKey,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"FreshdeskAccounts",fields:"createdAt,updatedAt,id,name,username,remoteUri,apiKey,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1303})}]},authenticate:!0,permissionId:1303,bodyClass:"integrations"}).state("app.integrations.freshdeskAccounts.edit",{url:"/:id?tab",params:{freshdeskAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/edit/view.html",controller:"FreshdeskAccountController as vm"}},resolve:{freshdeskAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intFreshdeskAccount@get",{fields:"createdAt,updatedAt,id,name,username,remoteUri,apiKey,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1303})}]},authenticate:!0,permissionId:1303,bodyClass:"integrations"}).state("app.integrations.sugarcrmAccounts",{url:"/sugarcrmAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/sugarcrmAccounts.html",controller:"SugarcrmAccountsController as vm"}},resolve:{sugarcrmAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intSugarcrmAccount@get",{fields:"createdAt,updatedAt,id,name,username,remoteUri,password,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SugarcrmAccounts",fields:"createdAt,updatedAt,id,name,username,remoteUri,password,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1305})}]},authenticate:!0,permissionId:1305,bodyClass:"integrations"}).state("app.integrations.sugarcrmAccounts.edit",{url:"/:id?tab",params:{sugarcrmAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/edit/view.html",controller:"SugarcrmAccountController as vm"}},resolve:{sugarcrmAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intSugarcrmAccount@get",{fields:"createdAt,updatedAt,id,name,username,remoteUri,password,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1305})}]},authenticate:!0,permissionId:1305,bodyClass:"integrations"}).state("app.integrations.deskAccounts",{url:"/deskAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/deskAccounts/deskAccounts.html",controller:"DeskAccountsController as vm"}},resolve:{deskAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intDeskAccount@get",{fields:"createdAt,updatedAt,id,name,type,remoteUri,authType,username,password,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"DeskAccounts",fields:"createdAt,updatedAt,id,name,type,remoteUri,authType,username,password,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1306})}]},authenticate:!0,permissionId:1306,bodyClass:"integrations"}).state("app.integrations.deskAccounts.edit",{url:"/:id?tab",params:{deskAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/deskAccounts/edit/view.html",controller:"DeskAccountController as vm"}},resolve:{deskAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intDeskAccount@get",{fields:"createdAt,updatedAt,id,name,type,remoteUri,authType,username,password,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1306})}]},authenticate:!0,permissionId:1306,bodyClass:"integrations"}).state("app.integrations.zohoAccounts",{url:"/zohoAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/zohoAccounts/zohoAccounts.html",controller:"ZohoAccountsController as vm"}},resolve:{zohoAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intZohoAccount@get",{fields:"createdAt,updatedAt,id,name,host,authToken,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ZohoAccounts",fields:"createdAt,updatedAt,id,name,host,authToken,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1307})}]},authenticate:!0,permissionId:1307,bodyClass:"integrations"}).state("app.integrations.zohoAccounts.edit",{url:"/:id?tab",params:{zohoAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/zohoAccounts/edit/view.html",controller:"ZohoAccountController as vm"}},resolve:{zohoAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intZohoAccount@get",{fields:"createdAt,updatedAt,id,name,host,authToken,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1307})}]},authenticate:!0,permissionId:1307,bodyClass:"integrations"}).state("app.integrations.vtigerAccounts",{url:"/vtigerAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/vtigerAccounts/vtigerAccounts.html",controller:"VtigerAccountsController as vm"}},resolve:{vtigerAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intVtigerAccount@get",{fields:"createdAt,updatedAt,id,name,description,username,accessKey,remoteUri,serverUrl",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VtigerAccounts",fields:"createdAt,updatedAt,id,name,description,username,accessKey,remoteUri,serverUrl",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1308})}]},authenticate:!0,permissionId:1308,bodyClass:"integrations"}).state("app.integrations.vtigerAccounts.edit",{url:"/:id?tab",params:{vtigerAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/vtigerAccounts/edit/view.html",controller:"VtigerAccountController as vm"}},resolve:{vtigerAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intVtigerAccount@get",{fields:"createdAt,updatedAt,id,name,description,username,accessKey,remoteUri,serverUrl",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1308})}]},authenticate:!0,permissionId:1308,bodyClass:"integrations"}).state("app.integrations.dynamics365Accounts",{url:"/dynamics365Accounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/dynamics365Accounts.html",controller:"Dynamics365AccountsController as vm"}},resolve:{dynamics365Accounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intDynamics365Account@get",{fields:"createdAt,updatedAt,id,name,username,password,remoteUri,tenantId,clientId,clientSecret,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Dynamics365Accounts",fields:"createdAt,updatedAt,id,name,username,password,remoteUri,tenantId,clientId,clientSecret,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1309})}]},authenticate:!0,permissionId:1309,bodyClass:"integrations"}).state("app.integrations.dynamics365Accounts.edit",{url:"/:id?tab",params:{dynamics365Account:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/edit/view.html",controller:"Dynamics365AccountController as vm"}},resolve:{dynamics365Account:["apiResolver","$stateParams",function(e,t){return e.resolve("intDynamics365Account@get",{fields:"createdAt,updatedAt,id,name,username,password,remoteUri,tenantId,clientId,clientSecret,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1309})}]},authenticate:!0,permissionId:1309,bodyClass:"integrations"}).state("app.integrations.servicenowAccounts",{url:"/servicenowAccounts",views:{"content@app":{templateUrl:"app/main/apps/integrations/views/servicenowAccounts/servicenowAccounts.html",controller:"ServicenowAccountsController as vm"}},resolve:{servicenowAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("intServicenowAccount@get",{fields:"createdAt,updatedAt,id,name,username,password,email,remoteUri,serverUrl,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ServicenowAccounts",fields:"createdAt,updatedAt,id,name,username,password,email,remoteUri,serverUrl,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1310})}]},authenticate:!0,permissionId:1310,bodyClass:"integrations"}).state("app.integrations.servicenowAccounts.edit",{url:"/:id?tab",params:{servicenowAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/integrations/views/servicenowAccounts/edit/view.html",controller:"ServicenowAccountController as vm"}},resolve:{servicenowAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("intServicenowAccount@get",{fields:"createdAt,updatedAt,id,name,username,password,email,remoteUri,serverUrl,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1310})}]},authenticate:!0,permissionId:1310,bodyClass:"integrations"}),t.addPart("app/main/apps/integrations")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.integrations",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter"]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.jscripty",{abstract:!0,url:"/jscripty"}).state("app.jscripty.projects",{url:"/projects",views:{"content@app":{templateUrl:"app/main/apps/jscripty/views/projects/projects.html",controller:"JscriptyProjectsController as vm"}},resolve:{projects:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("jscriptyProject@get",{fields:"createdAt,updatedAt,id,name,enableUncompleteSave,description,formData",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Projects",fields:"createdAt,updatedAt,id,name,enableUncompleteSave,description,formData",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1701})}]},authenticate:!0,permissionId:1701,bodyClass:"jscripty"}).state("app.jscripty.projects.edit",{url:"/:id?tab",params:{project:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/jscripty/views/projects/edit/view.html",controller:"JscriptyProjectController as vm"}},resolve:{project:["apiResolver","$stateParams",function(e,t){return e.resolve("jscriptyProject@get",{fields:"createdAt,updatedAt,id,name,enableUncompleteSave,description,formData",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1701})}]},authenticate:!0,permissionId:1701,bodyClass:"jscripty"}),t.addPart("app/main/apps/jscripty")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.jscripty",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter"]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.mail",{abstract:!0,url:"/mail"}).state("app.mail.mailQueues",{url:"/mailQueues",views:{"content@app":{templateUrl:"app/main/apps/mail/views/mailQueues/mailQueues.html",controller:"MailQueuesController as vm"}},resolve:{mailQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"mail",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MailQueues",fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"mail",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:601})}]},authenticate:!0,permissionId:601,bodyClass:"mail"}).state("app.mail.mailQueues.edit",{url:"/:id?tab",params:{mailQueue:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/mail/views/mailQueues/edit/view.html",controller:"MailQueueController as vm"}},resolve:{mailQueue:["apiResolver","$stateParams",function(e,t){return e.resolve("mailQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:601})}]},authenticate:!0,permissionId:601,bodyClass:"mail"}).state("app.mail.mailAccounts",{url:"/mailAccounts",views:{"content@app":{templateUrl:"app/main/apps/mail/views/mailAccounts/mailAccounts.html",controller:"MailAccountsController as vm"}},resolve:{mailAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailAccount@get",{fields:"createdAt,updatedAt,id,name,key,email,ListId,active,cservice,Imap.service,Imap.host,Imap.port,Imap.tls,Imap.authentication,Imap.user,Imap.password,Imap.mailbox,Imap.connTimeout,Imap.authTimeout,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,cauthentication,cuser,cpassword,fontFamily,fontSize,template,markAsUnread,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MailAccounts",fields:"createdAt,updatedAt,id,name,key,email,ListId,active,cservice,Imap.service,Imap.host,Imap.port,Imap.tls,Imap.authentication,Imap.user,Imap.password,Imap.mailbox,Imap.connTimeout,Imap.authTimeout,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,cauthentication,cuser,cpassword,fontFamily,fontSize,template,markAsUnread,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:602})}]},authenticate:!0,permissionId:602,bodyClass:"mail"}).state("app.mail.mailAccounts.edit",{url:"/:id?tab",params:{mailAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/mail/views/mailAccounts/edit/view.html",controller:"MailAccountController as vm"}},resolve:{mailAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("mailAccount@get",{fields:"createdAt,updatedAt,id,name,key,email,ListId,active,cservice,Imap.service,Imap.host,Imap.port,Imap.tls,Imap.authentication,Imap.user,Imap.password,Imap.mailbox,Imap.connTimeout,Imap.authTimeout,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,cauthentication,cuser,cpassword,fontFamily,fontSize,template,markAsUnread,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:602})}]},authenticate:!0,permissionId:602,bodyClass:"mail"}).state("app.mail.mailSubtatuses",{url:"/mailSubtatuses",views:{"content@app":{templateUrl:"app/main/apps/mail/views/mailSubtatuses/mailSubtatuses.html",controller:"MailSubstatusesController as vm"}},resolve:{mailSubtatuses:["apiResolver","Auth",function(e,t){return e.resolve("mailSubstatus@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:603})}]},authenticate:!0,permissionId:603,bodyClass:"mail"}),t.addPart("app/main/apps/mail")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.mail",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.mail.realtime"]).config(e)}(),function(){"use strict";function e(e){e.state("app.mail.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/mail/views/realtime/realtime.html",controller:"MailRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:610})}]},authenticate:!0,permissionId:610}).state("app.mail.realtime.agents",{url:"/agents",controller:"AgentsMailRealtimeController as vm",templateUrl:"app/main/apps/mail/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:610}).state("app.mail.realtime.queues",{url:"/queues",controller:"QueuesMailRealtimeController as vm",templateUrl:"app/main/apps/mail/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MailQueues",channel:"mail",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:601})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getMailQueues")}]},authenticate:!0,permissionId:610}).state("app.mail.realtime.accounts",{url:"/accounts",controller:"MailAccountsRealtimeController as vm",templateUrl:"app/main/apps/mail/views/realtime/accounts/view.html",resolve:{mailAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("mailAccount@get",{sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MailAccounts",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:602})}],rpcMailAccounts:["apiResolver",function(e){return e.resolve("rpc@getMailAccounts")}]},authenticate:!0,permissionId:610})}e.$inject=["$stateProvider"],angular.module("app.mail.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.marketplace",{abstract:!0,url:"/marketplace"}).state("app.marketplace.plugins",{url:"/plugins",views:{"content@app":{templateUrl:"app/main/apps/marketplace/views/plugins/plugins.html",controller:"MarketplacePluginsController as vm"}},resolve:{plugins:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("plugin@get",{fields:"createdAt,updatedAt,id,name,type,active,description,icon,sidebar,path,adminUrl,agentUrl,scriptName,scriptPath,version",sort:"name",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Plugins",fields:"createdAt,updatedAt,id,name,type,active,description,icon,sidebar,path,adminUrl,agentUrl,scriptName,scriptPath,version",sort:"name",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1801})}]},authenticate:!0,permissionId:1801,bodyClass:"marketplace"}).state("app.marketplace.plugins.edit",{url:"/:id?tab",params:{plugin:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/marketplace/views/plugins/edit/view.html",controller:"MarketplacePluginController as vm"}},resolve:{plugin:["apiResolver","$stateParams",function(e,t){return e.resolve("plugin@get",{fields:"createdAt,updatedAt,id,name,type,active,description,icon,sidebar,path,adminUrl,agentUrl,scriptName,scriptPath,version",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1801})}]},authenticate:!0,permissionId:1801,bodyClass:"marketplace"}),t.addPart("app/main/apps/marketplace")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.marketplace",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter"]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.motiondialer",{abstract:!0,url:"/motiondialer"}).state("app.motiondialer.queueCampaigns",{url:"/queueCampaigns",views:{"content@app":{templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/queueCampaigns.html",controller:"QueueCampaignsController as vm"}},resolve:{queueCampaigns:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{fields:"createdAt,updatedAt,id,name,dialActive,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,dialOrderByScheduledAt,dialRecallMeTimeout,dialRecallInQueue,dialGlobalInterval,dialTimezone,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength,dialMethod,dialPowerLevel,dialPredictiveOptimization,dialPredictiveOptimizationPercentage,dialPredictiveInterval,dialLimitQueue,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialPrefix,dialQueueOptions,dialQueueTimeout,strategy,timeout,retry,wrapuptime,weight,musiconhold,dialQueueProject,dialQueueProject2,dialAgiAfterHangupAgent,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,description,mandatoryDisposition,mandatoryDispositionPauseId,dialPredictiveIntervalMaxThreshold,dialPredictiveIntervalMinThreshold",type:"outbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"QueueCampaigns",fields:"createdAt,updatedAt,id,name,dialActive,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,dialOrderByScheduledAt,dialRecallMeTimeout,dialRecallInQueue,dialGlobalInterval,dialTimezone,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength,dialMethod,dialPowerLevel,dialPredictiveOptimization,dialPredictiveOptimizationPercentage,dialPredictiveInterval,dialLimitQueue,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialPrefix,dialQueueOptions,dialQueueTimeout,strategy,timeout,retry,wrapuptime,weight,musiconhold,dialQueueProject,dialQueueProject2,dialAgiAfterHangupAgent,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,description,mandatoryDisposition,mandatoryDispositionPauseId,dialPredictiveIntervalMaxThreshold,dialPredictiveIntervalMinThreshold",type:"outbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1501})}]},authenticate:!0,permissionId:1501,bodyClass:"motiondialer"}).state("app.motiondialer.queueCampaigns.edit",{url:"/:id?tab",params:{queueCampaign:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/view.html",controller:"QueueCampaignController as vm"}},resolve:{queueCampaign:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceQueue@get",{fields:"createdAt,updatedAt,id,name,dialActive,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,dialOrderByScheduledAt,dialRecallMeTimeout,dialRecallInQueue,dialGlobalInterval,dialTimezone,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength,dialMethod,dialPowerLevel,dialPredictiveOptimization,dialPredictiveOptimizationPercentage,dialPredictiveInterval,dialLimitQueue,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialPrefix,dialQueueOptions,dialQueueTimeout,strategy,timeout,retry,wrapuptime,weight,musiconhold,dialQueueProject,dialQueueProject2,dialAgiAfterHangupAgent,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,description,mandatoryDisposition,mandatoryDispositionPauseId,dialPredictiveIntervalMaxThreshold,dialPredictiveIntervalMinThreshold",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1501})}]},authenticate:!0,permissionId:1501,bodyClass:"motiondialer"}).state("app.motiondialer.ivrCampaigns",{url:"/ivrCampaigns",views:{"content@app":{templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/ivrCampaigns.html",controller:"IvrCampaignsController as vm"}},resolve:{ivrCampaigns:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("campaign@get",{fields:"createdAt,updatedAt,id,name,active,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,SquareProjectId,limitCalls,description,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,dialOrderByScheduledAt,dialGlobalInterval,dialTimezone,dialPrefix,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength",type:"ivr",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"IvrCampaigns",fields:"createdAt,updatedAt,id,name,active,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,SquareProjectId,limitCalls,description,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,dialOrderByScheduledAt,dialGlobalInterval,dialTimezone,dialPrefix,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength",type:"ivr",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1502})}]},authenticate:!0,permissionId:1502,bodyClass:"motiondialer"}).state("app.motiondialer.ivrCampaigns.edit",{url:"/:id?tab",params:{ivrCampaign:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/view.html",controller:"IvrCampaignController as vm"}},resolve:{ivrCampaign:["apiResolver","$stateParams",function(e,t){return e.resolve("campaign@get",{fields:"createdAt,updatedAt,id,name,active,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,SquareProjectId,limitCalls,description,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,dialOrderByScheduledAt,dialGlobalInterval,dialTimezone,dialPrefix,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1502})}]},authenticate:!0,permissionId:1502,bodyClass:"motiondialer"}),t.addPart("app/main/apps/motiondialer")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.motiondialer",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.motiondialer.realtime"]).config(e)}(),function(){"use strict";function e(e){e.state("app.motiondialer.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/motiondialer/views/realtime/realtime.html",controller:"MotionDialerRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1510})}]},authenticate:!0,permissionId:1510}).state("app.motiondialer.realtime.agents",{url:"/agents",controller:"AgentsMotionDialerRealtimeController as vm",templateUrl:"app/main/apps/motiondialer/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:1510}).state("app.motiondialer.realtime.queues",{url:"/queues",controller:"QueuesMotionDialerRealtimeController as vm",templateUrl:"app/main/apps/motiondialer/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"outbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"QueueCampaigns",channel:"voice",type:"outbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1501})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueues")}]},authenticate:!0,permissionId:1510}).state("app.motiondialer.realtime.queue_calls",{url:"/queue_calls",controller:"QueueCallsMotionDialerRealtimeController as vm",templateUrl:"app/main/apps/motiondialer/views/realtime/queue_calls/view.html",resolve:{agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,role,context",role:"agent",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,role,context",role:"agent",nolimit:!0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"outbound",sort:"-updatedAt",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"QueueCampaigns",channel:"voice",type:"outbound",sort:"-updatedAt",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1501})}],rpcVoiceQueuesChannels:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueuesChannels")}]},authenticate:!0,permissionId:1510}).state("app.motiondialer.realtime.abandonedcalls",{url:"/abandonedcalls",controller:"AbandonedCallsMotionDialerRealtimeController as vm",templateUrl:"app/main/apps/motiondialer/views/realtime/abandonedcalls/view.html",resolve:{agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,role,context",role:"agent",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,role,context",role:"agent",nolimit:!0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"outbound",sort:"-updatedAt",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"QueueCampaigns",channel:"voice",type:"outbound",sort:"-updatedAt",nolimit:!0})}],dispositions:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("disposition@get",{fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Dispositions",fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1501})}]},authenticate:!0,permissionId:1510}).state("app.motiondialer.realtime.queue_params",{url:"/queue_params",controller:"QueueParamsMotionDialerRealtimeController as vm",templateUrl:"app/main/apps/motiondialer/views/realtime/queue_params/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"outbound",fields:"id,name",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"QueueCampaigns",channel:"voice",type:"outbound",sort:"-updatedAt",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1501})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueues")}]},authenticate:!0,permissionId:1510}).state("app.motiondialer.realtime.ivr_campaigns",{url:"/ivr_campaigns",controller:"IvrCampaignsMotionDialerRealtimeController as vm",templateUrl:"app/main/apps/motiondialer/views/realtime/ivr_campaigns/view.html",resolve:{campaigns:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("campaign@get",{sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"IvrCampaigns",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1502})}],rpcCampaigns:["apiResolver",function(e){return e.resolve("rpc@getCampaigns")}]},authenticate:!0,permissionId:1510})}e.$inject=["$stateProvider"],angular.module("app.motiondialer.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.openchannel",{abstract:!0,url:"/openchannel"}).state("app.openchannel.openchannelQueues",{url:"/openchannelQueues",views:{"content@app":{templateUrl:"app/main/apps/openchannel/views/openchannelQueues/openchannelQueues.html",controller:"OpenchannelQueuesController as vm"}},resolve:{openchannelQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("openchannelQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"openchannel",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"OpenchannelQueues",fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"openchannel",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:801})}]},authenticate:!0,permissionId:801,bodyClass:"openchannel"}).state("app.openchannel.openchannelQueues.edit",{url:"/:id?tab",params:{openchannelQueue:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/view.html",controller:"OpenchannelQueueController as vm"}},resolve:{openchannelQueue:["apiResolver","$stateParams",function(e,t){return e.resolve("openchannelQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:801})}]},authenticate:!0,permissionId:801,bodyClass:"openchannel"}).state("app.openchannel.openchannelAccounts",{url:"/openchannelAccounts",views:{"content@app":{templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/openchannelAccounts.html",controller:"OpenchannelAccountsController as vm"}},resolve:{openchannelAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("openchannelAccount@get",{fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"OpenchannelAccounts",fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:802})}]},authenticate:!0,permissionId:802,bodyClass:"openchannel"}).state("app.openchannel.openchannelAccounts.edit",{url:"/:id?tab",params:{openchannelAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/view.html",controller:"OpenchannelAccountController as vm"}},resolve:{openchannelAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("openchannelAccount@get",{fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:802})}]},authenticate:!0,permissionId:802,bodyClass:"openchannel"}),t.addPart("app/main/apps/openchannel")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.openchannel",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.openchannel.realtime"]).config(e)}(),function(){"use strict";function e(e){e.state("app.openchannel.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/openchannel/views/realtime/realtime.html",controller:"OpenchannelRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:810})}]},authenticate:!0,permissionId:810}).state("app.openchannel.realtime.agents",{url:"/agents",controller:"AgentsOpenchannelRealtimeController as vm",templateUrl:"app/main/apps/openchannel/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:810}).state("app.openchannel.realtime.queues",{url:"/queues",controller:"QueuesOpenchannelRealtimeController as vm",templateUrl:"app/main/apps/openchannel/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("openchannelQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"OpenchannelQueues",channel:"openchannel",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:801})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getOpenchannelQueues")}]},authenticate:!0,permissionId:810})}e.$inject=["$stateProvider"],angular.module("app.openchannel.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.plugins",{abstract:!0,url:"/plugins"}),t.addPart("app/main/apps/plugins")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.plugins",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.plugins.plugin"]).config(e)}(),function(){"use strict";function e(e){e.state("app.plugins.plugin",{url:"/plugin/:id",views:{"content@app":{templateUrl:"app/main/apps/plugins/views/plugin/plugin.html",controller:"PluginController as vm"}},resolve:{},authenticate:!0,bodyClass:"plugins"})}e.$inject=["$stateProvider"],angular.module("app.plugins.plugin",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.settings",{abstract:!0,url:"/settings"}).state("app.settings.generals",{url:"/generals",views:{"content@app":{templateUrl:"app/main/apps/settings/views/generals/generals.html",controller:"GeneralsController as vm"}},resolve:{generals:["apiResolver",function(e){return e.resolve("setting@get",{fields:"createdAt,updatedAt,id,min_internal,securePassword,callRecordingEncryption,chatTimeout,stunaddr,turnaddr,turnusername,turnpassword,phoneBarAutoUpdater,defaultScreenRecordingPath,phoneBarAutoUpdaterUrl,enableEmailPreview,split,splitSizeCsv,splitSizePdf,splitSizeXlsx,messagesAlignment,phoneBarRememberMeEnabled,rtlSupport,allowedLoginAttempts,blockDuration",limit:10,offset:0})}]},authenticate:!0,permissionId:1400,bodyClass:"settings"}).state("app.settings.smtps",{url:"/smtps",views:{"content@app":{templateUrl:"app/main/apps/settings/views/smtps/smtps.html",controller:"SmtpController as vm"}},resolve:{smtps:["apiResolver",function(e){return e.resolve("mailAccount@get",{fields:"createdAt,updatedAt,id,service,name,email,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,description",service:"1",limit:10,offset:0})}]},authenticate:!0,permissionId:1400,bodyClass:"settings"}).state("app.settings.networks",{url:"/networks",views:{"content@app":{templateUrl:"app/main/apps/settings/views/networks/networks.html",controller:"NetworksController as vm"}},resolve:{networks:["apiResolver",function(e){return e.resolve("network@get",{fields:"createdAt,updatedAt,id,type,value",sort:"-updatedAt",limit:10,offset:0})}]},authenticate:!0,permissionId:1400,bodyClass:"settings"}).state("app.settings.customizations",{url:"/customizations",views:{"content@app":{templateUrl:"app/main/apps/settings/views/customizations/customizations.html",controller:"CustomizationsController as vm"}},resolve:{customizations:["apiResolver",function(e){return e.resolve("setting@get",{fields:"createdAt,updatedAt,id,defaultLogo,defaultLoginLogo,defaultHeaderWhiteLabel,headerWhiteLabel,defaultPageTitle,pageTitle,defaultPreferred",limit:10,offset:0})}]},authenticate:!0,permissionId:1400,bodyClass:"settings"}),t.addPart("app/main/apps/settings")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.settings",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.settings.updates","app.settings.license","app.settings.system"]).config(e)}(),function(){"use strict";function e(e){e.state("app.settings.license",{url:"/license",views:{"content@app":{templateUrl:"app/main/apps/settings/views/license/license.html",controller:"LicenseController as vm"}},authenticate:!0,permissionId:1400,bodyClass:"settings"})}e.$inject=["$stateProvider"],angular.module("app.settings.license",[]).config(e)}(),function(){"use strict";function e(e){e.state("app.settings.system",{url:"/system?tab",views:{"content@app":{templateUrl:"app/main/apps/settings/views/system/system.html",controller:"SystemController as vm"}},resolve:{system:["apiResolver",function(e){return e.resolve("system@get")}],processes:["apiResolver",function(e){return e.resolve("pm2@get")}]},authenticate:!0,permissionId:1400,bodyClass:"settings"})}e.$inject=["$stateProvider"],angular.module("app.settings.system",[]).config(e)}(),function(){"use strict";function e(e){e.state("app.settings.updates",{url:"/updates",views:{"content@app":{templateUrl:"app/main/apps/settings/views/updates/updates.html",controller:"UpdatesController as vm"}},resolve:{version:["apiResolver",function(e){return e.resolve("version@get",{latest:!0})}],userProfile:["apiResolver","Auth",function(e,t){return e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1400})}]},authenticate:!0,permissionId:1400,bodyClass:"settings"})}e.$inject=["$stateProvider"],angular.module("app.settings.updates",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.sms",{abstract:!0,url:"/sms"}).state("app.sms.smsQueues",{url:"/smsQueues",views:{"content@app":{templateUrl:"app/main/apps/sms/views/smsQueues/smsQueues.html",controller:"SmsQueuesController as vm"}},resolve:{smsQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("smsQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"sms",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SmsQueues",fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"sms",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:701})}]},authenticate:!0,permissionId:701,bodyClass:"sms"}).state("app.sms.smsQueues.edit",{url:"/:id?tab",params:{smsQueue:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/sms/views/smsQueues/edit/view.html",controller:"SmsQueueController as vm"}},resolve:{smsQueue:["apiResolver","$stateParams",function(e,t){return e.resolve("smsQueue@get",{fields:"createdAt,updatedAt,id,name,strategy,timeout,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:701})}]},authenticate:!0,permissionId:701,bodyClass:"sms"}).state("app.sms.smsAccounts",{url:"/smsAccounts",views:{"content@app":{templateUrl:"app/main/apps/sms/views/smsAccounts/smsAccounts.html",controller:"SmsAccountsController as vm"}},resolve:{smsAccounts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("smsAccount@get",{fields:"createdAt,updatedAt,id,name,key,token,remote,ListId,type,phone,accountSid,authId,authToken,smsMethod,username,password,baseUrl,apiKey,senderString,deliveryReport,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SmsAccounts",fields:"createdAt,updatedAt,id,name,key,token,remote,ListId,type,phone,accountSid,authId,authToken,smsMethod,username,password,baseUrl,apiKey,senderString,deliveryReport,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:702})}]},authenticate:!0,permissionId:702,bodyClass:"sms"}).state("app.sms.smsAccounts.edit",{url:"/:id?tab",params:{smsAccount:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/sms/views/smsAccounts/edit/view.html",controller:"SmsAccountController as vm"}},resolve:{smsAccount:["apiResolver","$stateParams",function(e,t){return e.resolve("smsAccount@get",{fields:"createdAt,updatedAt,id,name,key,token,remote,ListId,type,phone,accountSid,authId,authToken,smsMethod,username,password,baseUrl,apiKey,senderString,deliveryReport,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:702})}]},authenticate:!0,permissionId:702,bodyClass:"sms"}),t.addPart("app/main/apps/sms")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.sms",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.sms.realtime"]).config(e)}(),function(){"use strict";function e(e){e.state("app.sms.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/sms/views/realtime/realtime.html",controller:"SmsRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:710})}]},authenticate:!0,permissionId:710}).state("app.sms.realtime.agents",{url:"/agents",controller:"AgentsSmsRealtimeController as vm",templateUrl:"app/main/apps/sms/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:710}).state("app.sms.realtime.queues",{url:"/queues",controller:"QueuesSmsRealtimeController as vm",templateUrl:"app/main/apps/sms/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("smsQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"SmsQueues",channel:"sms",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:701})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getSmsQueues")}]},authenticate:!0,permissionId:710})}e.$inject=["$stateProvider"],angular.module("app.sms.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.staff",{abstract:!0,url:"/staff"}).state("app.staff.users",{url:"/users",views:{"content@app":{templateUrl:"app/main/apps/staff/views/users/users.html",controller:"UsersController as vm"}},resolve:{users:["apiResolver","Auth",function(e,t){return e.resolve("user@get",{fields:"createdAt,updatedAt,role,userProfileId,id,fullname,name,email,phone,mobile,userpic,password,description,autointernal,internal,transport,nat,allow,context,callgroup,pickupgroup,passwordResetAt,apiKey,videosupport,disabled,blocked",role:"admin,user",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:201})}]},authenticate:!0,permissionId:201,bodyClass:"staff"}).state("app.staff.users.edit",{url:"/:id?tab",params:{user:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/staff/views/users/edit/view.html",controller:"UserController as vm"}},resolve:{user:["apiResolver","$stateParams",function(e,t){return e.resolve("user@get",{fields:"createdAt,updatedAt,role,userProfileId,id,fullname,name,email,phone,mobile,userpic,password,description,autointernal,internal,transport,nat,allow,context,callgroup,pickupgroup,passwordResetAt,apiKey,videosupport,disabled,blocked",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:201})}]},authenticate:!0,permissionId:201,bodyClass:"staff"}).state("app.staff.agents",{url:"/agents",views:{"content@app":{templateUrl:"app/main/apps/staff/views/agents/agents.html",controller:"AgentsController as vm"}},resolve:{agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"createdAt,updatedAt,id,role,fullname,name,alias,showWebBar,email,phone,mobile,userpic,password,hotdesk,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,videosupport,extensionMonitor,chatCapacity,mailCapacity,faxCapacity,smsCapacity,openchannelCapacity,phoneBarEnableSettings,phoneBarAutoAnswer,phoneBarAutoAnswerDelay,phoneBarRingInUse,phoneBarEnableRecording,phoneBarEnableDtmfTone,phoneBarDnd,phoneBarUnansweredCallBadge,phoneBarEnableJaws,phoneBarOutboundProxy,phoneBarUnconditional,phoneBarUnconditionalNumber,phoneBarRemoteControl,phoneBarRemoteControlPort,phoneBarExpires,phoneBarListenPort,permissions,allowmessenger,phoneBarPrefixRequired,passwordResetAt,disabled,blocked,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"createdAt,updatedAt,id,role,fullname,name,alias,showWebBar,email,phone,mobile,userpic,password,hotdesk,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,videosupport,extensionMonitor,chatCapacity,mailCapacity,faxCapacity,smsCapacity,openchannelCapacity,phoneBarEnableSettings,phoneBarAutoAnswer,phoneBarAutoAnswerDelay,phoneBarRingInUse,phoneBarEnableRecording,phoneBarEnableDtmfTone,phoneBarDnd,phoneBarUnansweredCallBadge,phoneBarEnableJaws,phoneBarOutboundProxy,phoneBarUnconditional,phoneBarUnconditionalNumber,phoneBarRemoteControl,phoneBarRemoteControlPort,phoneBarExpires,phoneBarListenPort,permissions,allowmessenger,phoneBarPrefixRequired,passwordResetAt,disabled,blocked,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}]},authenticate:!0,permissionId:202,bodyClass:"staff"}).state("app.staff.agents.edit",{url:"/:id?tab",params:{agent:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/staff/views/agents/edit/view.html",controller:"AgentController as vm"}},resolve:{agent:["apiResolver","$stateParams",function(e,t){return e.resolve("user@get",{fields:"createdAt,updatedAt,id,role,fullname,name,alias,showWebBar,email,phone,mobile,userpic,password,hotdesk,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,videosupport,extensionMonitor,chatCapacity,mailCapacity,faxCapacity,smsCapacity,openchannelCapacity,phoneBarEnableSettings,phoneBarAutoAnswer,phoneBarAutoAnswerDelay,phoneBarRingInUse,phoneBarEnableRecording,phoneBarEnableDtmfTone,phoneBarDnd,phoneBarUnansweredCallBadge,phoneBarEnableJaws,phoneBarOutboundProxy,phoneBarUnconditional,phoneBarUnconditionalNumber,phoneBarRemoteControl,phoneBarRemoteControlPort,phoneBarExpires,phoneBarListenPort,permissions,allowmessenger,phoneBarPrefixRequired,passwordResetAt,disabled,blocked,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}]},authenticate:!0,permissionId:202,bodyClass:"staff"}).state("app.staff.telephones",{url:"/telephones",views:{"content@app":{templateUrl:"app/main/apps/staff/views/telephones/telephones.html",controller:"TelephonesController as vm"}},resolve:{telephones:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"createdAt,updatedAt,id,role,fullname,name,email,password,description,autointernal,internal,voicemail,transport,nat,allow,callerid,context,callgroup,pickupgroup,videosupport,encryption,phone,mobile",role:"telephone",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Telephones",fields:"createdAt,updatedAt,id,role,fullname,name,email,password,description,autointernal,internal,voicemail,transport,nat,allow,callerid,context,callgroup,pickupgroup,videosupport,encryption,phone,mobile",role:"telephone",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:203})}]},authenticate:!0,permissionId:203,bodyClass:"staff"}).state("app.staff.telephones.edit",{url:"/:id?tab",params:{telephone:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/staff/views/telephones/edit/view.html",controller:"TelephoneController as vm"}},resolve:{telephone:["apiResolver","$stateParams",function(e,t){return e.resolve("user@get",{fields:"createdAt,updatedAt,id,role,fullname,name,email,password,description,autointernal,internal,voicemail,transport,nat,allow,callerid,context,callgroup,pickupgroup,videosupport,encryption,phone,mobile",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:203})}]},authenticate:!0,permissionId:203,bodyClass:"staff"}).state("app.staff.teams",{url:"/teams",views:{"content@app":{templateUrl:"app/main/apps/staff/views/teams/teams.html",controller:"TeamsController as vm"}},resolve:{teams:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("team@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Teams",fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:204})}]},authenticate:!0,permissionId:204,bodyClass:"staff"}).state("app.staff.userProfiles",{url:"/userProfiles",views:{"content@app":{templateUrl:"app/main/apps/staff/views/userProfiles/userProfiles.html",controller:"UserProfilesController as vm"}},resolve:{userProfiles:["apiResolver","Auth",function(e,t){return e.resolve("userProfile@get",{fields:"createdAt,updatedAt,id,name,description,crudPermissions",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:205})}]},authenticate:!0,permissionId:205,bodyClass:"staff"}).state("app.staff.userProfiles.edit",{url:"/:id?tab",params:{userProfile:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/staff/views/userProfiles/edit/view.html",controller:"UserProfileController as vm"}},resolve:{userProfile:["apiResolver","$stateParams",function(e,t){return e.resolve("userProfile@get",{fields:"createdAt,updatedAt,id,name,description,crudPermissions",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:205})}]},authenticate:!0,permissionId:205,bodyClass:"staff"}),t.addPart("app/main/apps/staff")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.staff",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter"]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.tools",{abstract:!0,url:"/tools"}).state("app.tools.cannedAnswers",{url:"/cannedAnswers",views:{"content@app":{templateUrl:"app/main/apps/tools/views/cannedAnswers/cannedAnswers.html",controller:"CannedAnswersController as vm"}},resolve:{cannedAnswers:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cannedAnswer@get",{fields:"createdAt,updatedAt,id,key,value,description",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"CannedAnswers",fields:"createdAt,updatedAt,id,key,value,description",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1001})}]},authenticate:!0,permissionId:1001,bodyClass:"tools"}).state("app.tools.dispositions",{url:"/dispositions",views:{"content@app":{templateUrl:"app/main/apps/tools/views/dispositions/dispositions.html",controller:"DispositionsController as vm"}},resolve:{dispositions:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("disposition@get",{fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Dispositions",fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1002})}]},authenticate:!0,permissionId:1002,bodyClass:"tools"}).state("app.tools.customDashboards",{url:"/customDashboards",views:{"content@app":{templateUrl:"app/main/apps/tools/views/customDashboards/customDashboards.html",controller:"CustomDashboardsController as vm"}},resolve:{customDashboards:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("dashboard@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"CustomDashboards",fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1003})}]},authenticate:!0,permissionId:1003,bodyClass:"tools"}).state("app.tools.customDashboards.edit",{url:"/:id?tab",params:{customDashboard:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/tools/views/customDashboards/edit/view.html",controller:"CustomDashboardController as vm"}},resolve:{customDashboard:["apiResolver","$stateParams",function(e,t){return e.resolve("dashboard@get",{fields:"createdAt,updatedAt,id,name,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1003})}]},authenticate:!0,permissionId:1003,bodyClass:"tools"}).state("app.tools.intervals",{url:"/intervals",views:{"content@app":{templateUrl:"app/main/apps/tools/views/intervals/intervals.html",controller:"IntervalsController as vm"}},resolve:{intervals:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("interval@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",IntervalId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Intervals",fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",IntervalId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1004})}]},authenticate:!0,permissionId:1004,bodyClass:"tools"}).state("app.tools.intervals.edit",{url:"/:id?tab",params:{interval:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/tools/views/intervals/edit/view.html",controller:"IntervalController as vm"}},resolve:{interval:["apiResolver","$stateParams",function(e,t){return e.resolve("interval@get",{fields:"createdAt,updatedAt,id,name,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1004})}]},authenticate:!0,permissionId:1004,bodyClass:"tools"}).state("app.tools.pauses",{url:"/pauses",views:{"content@app":{templateUrl:"app/main/apps/tools/views/pauses/pauses.html",controller:"PausesController as vm"}},resolve:{pauses:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("pause@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Pauses",fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1005})}]},authenticate:!0,permissionId:1005,bodyClass:"tools"}).state("app.tools.schedules",{url:"/schedules",views:{"content@app":{templateUrl:"app/main/apps/tools/views/schedules/schedules.html",controller:"SchedulesController as vm"}},resolve:{schedules:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("schedule@get",{fields:"createdAt,updatedAt,id,name,CustomReportId,DefaultReportId,output,active,startAt,endAt,cron,subtractNumber,subtractUnit,sendMail,MailAccountId,email,cc,bcc,sendIfEmpty,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Scheduler",fields:"createdAt,updatedAt,id,name,CustomReportId,DefaultReportId,output,active,startAt,endAt,cron,subtractNumber,subtractUnit,sendMail,MailAccountId,email,cc,bcc,sendIfEmpty,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1006})}]},authenticate:!0,permissionId:1006,bodyClass:"tools"}).state("app.tools.sounds",{url:"/sounds",views:{"content@app":{templateUrl:"app/main/apps/tools/views/sounds/sounds.html",controller:"SoundsController as vm"}},resolve:{sounds:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("sound@get",{fields:"createdAt,updatedAt,id,save_name,converted_format,name,audio,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Sounds",fields:"createdAt,updatedAt,id,save_name,converted_format,name,audio,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1007})}]},authenticate:!0,permissionId:1007,bodyClass:"tools"}).state("app.tools.tags",{url:"/tags",views:{"content@app":{templateUrl:"app/main/apps/tools/views/tags/tags.html",controller:"TagsController as vm"}},resolve:{tags:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("tag@get",{fields:"createdAt,updatedAt,id,name,description,color",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Tags",fields:"createdAt,updatedAt,id,name,description,color",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1008})}]},authenticate:!0,permissionId:1008,bodyClass:"tools"}).state("app.tools.templates",{url:"/templates",views:{"content@app":{templateUrl:"app/main/apps/tools/views/templates/templates.html",controller:"TemplatesController as vm"}},resolve:{templates:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("template@get",{fields:"createdAt,updatedAt,id,name,html,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Templates",fields:"createdAt,updatedAt,id,name,html,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1009})}]},authenticate:!0,permissionId:1009,bodyClass:"tools"}).state("app.tools.triggers",{url:"/triggers",views:{"content@app":{templateUrl:"app/main/apps/tools/views/triggers/triggers.html",controller:"TriggersController as vm"}},resolve:{triggers:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("trigger@get",{fields:"createdAt,updatedAt,id,name,channel,status,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Triggers",fields:"createdAt,updatedAt,id,name,channel,status,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1010})}]},authenticate:!0,permissionId:1010,bodyClass:"tools"}).state("app.tools.triggers.edit",{url:"/:id?tab",params:{trigger:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/tools/views/triggers/edit/view.html",controller:"TriggerController as vm"}},resolve:{trigger:["apiResolver","$stateParams",function(e,t){return e.resolve("trigger@get",{fields:"createdAt,updatedAt,id,name,channel,status,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1010})}]},authenticate:!0,permissionId:1010,bodyClass:"tools"}).state("app.tools.trunks",{url:"/trunks",views:{"content@app":{templateUrl:"app/main/apps/tools/views/trunks/trunks.html",controller:"TrunksController as vm"}},resolve:{trunks:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("trunk@get",{fields:"createdAt,updatedAt,id,name,active,host,secret,defaultuser,context,callerid,type,dtmfmode,nat,qualify,allow,insecure,call_limit,registry,description,directmedia,callcounter,fromdomain,fromuser,outboundproxy,usereqphone,trustrpid,sendrpid,encryption,port,transport,t38pt_udptl,videosupport,otherFields",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Trunks",fields:"createdAt,updatedAt,id,name,active,host,secret,defaultuser,context,callerid,type,dtmfmode,nat,qualify,allow,insecure,call_limit,registry,description,directmedia,callcounter,fromdomain,fromuser,outboundproxy,usereqphone,trustrpid,sendrpid,encryption,port,transport,t38pt_udptl,videosupport,otherFields",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1011})}]},authenticate:!0,permissionId:1011,bodyClass:"tools"}).state("app.tools.trunks.edit",{url:"/:id?tab",params:{trunk:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/tools/views/trunks/edit/view.html",controller:"TrunkController as vm"}},resolve:{trunk:["apiResolver","$stateParams",function(e,t){return e.resolve("trunk@get",{fields:"createdAt,updatedAt,id,name,active,host,secret,defaultuser,context,callerid,type,dtmfmode,nat,qualify,allow,insecure,call_limit,registry,description,directmedia,callcounter,fromdomain,fromuser,outboundproxy,usereqphone,trustrpid,sendrpid,encryption,port,transport,t38pt_udptl,videosupport,otherFields",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1011})}]},authenticate:!0,permissionId:1011,bodyClass:"tools"}).state("app.tools.variables",{url:"/variables",views:{"content@app":{templateUrl:"app/main/apps/tools/views/variables/variables.html",controller:"VariablesController as vm"}},resolve:{variables:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("variable@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Variables",fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1012})}]},authenticate:!0,permissionId:1012,bodyClass:"tools"}),t.addPart("app/main/apps/tools")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.tools",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter"]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.video",{abstract:!0,url:"/video"}).state("app.video.screenRecordings",{url:"/screenRecordings",views:{"content@app":{templateUrl:"app/main/apps/video/views/screenRecordings/screenRecordings.html",controller:"ScreenRecordingsController as vm"}},resolve:{screenRecordings:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("screenRecording@get",{fields:"createdAt,updatedAt,id,interactionid,channel,format,value,rating,UserId,duration,startedAt,closedAt",includeAll:"true",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ScreenRecordings",fields:"createdAt,updatedAt,id,interactionid,channel,format,value,rating,UserId,duration,startedAt,closedAt",includeAll:"true",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:2001})}]},authenticate:!0,permissionId:2001,bodyClass:"video"}),t.addPart("app/main/apps/video")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.video",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter"]).config(e)}(),function(){"use strict";function e(e){e.state("app.voice.realtime",{url:"/realtime",views:{"content@app":{templateUrl:"app/main/apps/voice/views/realtime/realtime.html",controller:"VoiceRealtimeController as vm"}},resolve:{userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:411})}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.agents",{url:"/agents",controller:"AgentsVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/agents/view.html",resolve:{pauses:["apiResolver",function(e){return e.resolve("pause@get",{nolimit:!0})}],agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastPauseAt,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity,screenrecording,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"fullname",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:202})}],rpcAgents:["apiResolver",function(e){return e.resolve("rpc@getAgents")}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.telephones",{url:"/telephones",controller:"TelephonesVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/telephones/view.html",resolve:{telephones:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,fullname,userpic,internal",role:"telephone",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Telephones",fields:"id,fullname,userpic,internal",role:"telephone",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:203})}],rpcTelephones:["apiResolver",function(e){return e.resolve("rpc@getTelephones")}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.trunks",{url:"/trunks",controller:"TrunksVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/trunks/view.html",resolve:{trunks:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("trunk@get",{fields:"id,name",active:!0,sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Trunks",fields:"id,name",active:!0,sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:1011})}],rpcTrunks:["apiResolver",function(e){return e.resolve("rpc@getTrunks")}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.queues",{url:"/queues",controller:"QueuesVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/queues/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"inbound",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",channel:"voice",type:"inbound",sort:"-updatedAt",limit:10,page:1})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:401})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueues")}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.queue_calls",{url:"/queue_calls",controller:"QueueCallsVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/queue_calls/view.html",resolve:{agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,role,context",role:"agent",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,role,context",role:"agent",nolimit:!0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"inbound",sort:"-updatedAt",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",channel:"voice",type:"inbound",sort:"-updatedAt",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:401})}],rpcVoiceQueuesChannels:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueuesChannels")}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.abandonedcalls",{url:"/abandonedcalls",controller:"AbandonedCallsVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/abandonedcalls/view.html",resolve:{agents:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("user@get",{fields:"id,name,role,context",role:"agent",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,name,role,context",role:"agent",nolimit:!0})}],queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"inbound",sort:"-updatedAt",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",channel:"voice",type:"inbound",sort:"-updatedAt",nolimit:!0})}],dispositions:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("disposition@get",{fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Dispositions",fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:401})}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.queue_params",{url:"/queue_params",controller:"QueueParamsVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/queue_params/view.html",resolve:{queues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{type:"inbound",fields:"id,name",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",channel:"voice",type:"inbound",sort:"-updatedAt",nolimit:!0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:401})}],rpcQueues:["apiResolver",function(e){return e.resolve("rpc@getVoiceQueues")}]},authenticate:!0,permissionId:411}).state("app.voice.realtime.outbound_calls",{url:"/outbound_calls",controller:"OutboundCallsVoiceRealtimeController as vm",templateUrl:"app/main/apps/voice/views/realtime/outbound_calls/view.html",resolve:{rpcCalls:["apiResolver",function(e){return e.resolve("rpc@getOutboundChannels")}]},authenticate:!0,permissionId:411})}e.$inject=["$stateProvider"],angular.module("app.voice.realtime",[]).config(e)}(),function(){"use strict";function e(e,t,n,a){e.state("app.voice",{abstract:!0,url:"/voice"}).state("app.voice.voiceQueues",{url:"/voiceQueues",views:{"content@app":{templateUrl:"app/main/apps/voice/views/voiceQueues/voiceQueues.html",controller:"VoiceQueuesController as vm"}},resolve:{voiceQueues:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceQueue@get",{fields:"createdAt,updatedAt,id,name,type,strategy,timeout,maxlen,retry,wrapuptime,weight,joinempty,leavewhenempty,musiconhold,announce,description,periodic_announce,queue_reporthold,queue_youarenext,queue_thereare,queue_callswaiting,queue_holdtime,queue_minutes,queue_minute,queue_seconds,queue_thankyou,announce_frequency,min_announce_frequency,periodic_announce_frequency,random_periodic_announce,announce_holdtime,announce_position,announce_position_limit,reportholdtime,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,mandatoryDisposition,mandatoryDispositionPauseId",type:"inbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceQueues",fields:"createdAt,updatedAt,id,name,type,strategy,timeout,maxlen,retry,wrapuptime,weight,joinempty,leavewhenempty,musiconhold,announce,description,periodic_announce,queue_reporthold,queue_youarenext,queue_thereare,queue_callswaiting,queue_holdtime,queue_minutes,queue_minute,queue_seconds,queue_thankyou,announce_frequency,min_announce_frequency,periodic_announce_frequency,random_periodic_announce,announce_holdtime,announce_position,announce_position_limit,reportholdtime,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,mandatoryDisposition,mandatoryDispositionPauseId",type:"inbound",sort:"-updatedAt",channel:"voice",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:401})}]},authenticate:!0,permissionId:401,bodyClass:"voice"}).state("app.voice.voiceQueues.edit",{url:"/:id?tab",params:{voiceQueue:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/voice/views/voiceQueues/edit/view.html",controller:"VoiceQueueController as vm"}},resolve:{voiceQueue:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceQueue@get",{fields:"createdAt,updatedAt,id,name,type,strategy,timeout,maxlen,retry,wrapuptime,weight,joinempty,leavewhenempty,musiconhold,announce,description,periodic_announce,queue_reporthold,queue_youarenext,queue_thereare,queue_callswaiting,queue_holdtime,queue_minutes,queue_minute,queue_seconds,queue_thankyou,announce_frequency,min_announce_frequency,periodic_announce_frequency,random_periodic_announce,announce_holdtime,announce_position,announce_position_limit,reportholdtime,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,mandatoryDisposition,mandatoryDispositionPauseId",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:401})}]},authenticate:!0,permissionId:401,bodyClass:"voice"}).state("app.voice.inboundroutes",{url:"/inboundroutes",views:{"content@app":{templateUrl:"app/main/apps/voice/views/inboundroutes/inboundroutes.html",controller:"InboundRoutesController as vm"}},resolve:{inboundroutes:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"inbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"InboundRoutes",fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"inbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:402})}]},authenticate:!0,permissionId:402,bodyClass:"voice"}).state("app.voice.inboundroutes.edit",{url:"/:id?tab",params:{inboundroute:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/voice/views/inboundroutes/edit/view.html",controller:"InboundRouteController as vm"}},resolve:{inboundroute:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:402})}]},authenticate:!0,permissionId:402,bodyClass:"voice"}).state("app.voice.outboundroutes",{url:"/outboundroutes",views:{"content@app":{templateUrl:"app/main/apps/voice/views/outboundroutes/outboundroutes.html",controller:"OutboundRoutesController as vm"}},resolve:{outboundroutes:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,recordingFormat,cutdigits,description",type:"outbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"OutboundRoutes",fields:"createdAt,updatedAt,id,appdata,type,exten,context,recordingFormat,cutdigits,description",type:"outbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:403})}]},authenticate:!0,permissionId:403,bodyClass:"voice"}).state("app.voice.outboundroutes.edit",{url:"/:id?tab",params:{outboundroute:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/voice/views/outboundroutes/edit/view.html",controller:"OutboundRouteController as vm"}},resolve:{outboundroute:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,recordingFormat,cutdigits,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:403})}]},authenticate:!0,permissionId:403,bodyClass:"voice"}).state("app.voice.internalroutes",{url:"/internalroutes",views:{"content@app":{templateUrl:"app/main/apps/voice/views/internalroutes/internalroutes.html",controller:"InternalRoutesController as vm"}},resolve:{internalroutes:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"internal",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"InternalRoutes",fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"internal",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:404})}]},authenticate:!0,permissionId:404,bodyClass:"voice"}).state("app.voice.internalroutes.edit",{url:"/:id?tab",params:{internalroute:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/voice/views/internalroutes/edit/view.html",controller:"InternalRouteController as vm"}},resolve:{internalroute:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceExtension@get",{fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:404})}]},authenticate:!0,permissionId:404,bodyClass:"voice"}).state("app.voice.contexts",{url:"/contexts",views:{"content@app":{templateUrl:"app/main/apps/voice/views/contexts/contexts.html",controller:"ContextsController as vm"}},resolve:{contexts:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceContext@get",{fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",defaultEntry:"false",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Contexts",fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",defaultEntry:"false",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:405})}]},authenticate:!0,permissionId:405,bodyClass:"voice"}).state("app.voice.voicemails",{url:"/voicemails",views:{"content@app":{templateUrl:"app/main/apps/voice/views/voicemails/voicemails.html",controller:"VoicemailsController as vm"}},resolve:{voicemails:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceMail@get",{fields:"createdAt,updatedAt,id,customer_id,fullname,email,password,mailbox,context,tz,attach,envelope,delete,emailbody,emailsubject,maxsecs,maxmsg",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Voicemails",fields:"createdAt,updatedAt,id,customer_id,fullname,email,password,mailbox,context,tz,attach,envelope,delete,emailbody,emailsubject,maxsecs,maxmsg",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:406})}]},authenticate:!0,permissionId:406,bodyClass:"voice"}).state("app.voice.voicemails.edit",{url:"/:id?tab",params:{voicemail:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/voice/views/voicemails/edit/view.html",controller:"VoicemailController as vm"}},resolve:{voicemail:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceMail@get",{fields:"createdAt,updatedAt,id,customer_id,fullname,email,password,mailbox,context,tz,attach,envelope,delete,emailbody,emailsubject,maxsecs,maxmsg",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:406})}]},authenticate:!0,permissionId:406,bodyClass:"voice"}).state("app.voice.musiconholds",{url:"/musiconholds",views:{"content@app":{templateUrl:"app/main/apps/voice/views/musiconholds/musiconholds.html",controller:"MusicOnHoldsController as vm"}},resolve:{musiconholds:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceMusicOnHold@get",{fields:"createdAt,updatedAt,id,name,mode,directory,application,format,sort",defaultEntry:"false",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"MusicOnHolds",fields:"createdAt,updatedAt,id,name,mode,directory,application,format,sort",defaultEntry:"false",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:407})}]},authenticate:!0,permissionId:407,bodyClass:"voice"}).state("app.voice.musiconholds.edit",{url:"/:id?tab",params:{musiconhold:void 0,crudPermissions:void 0},views:{"content@app":{templateUrl:"app/main/apps/voice/views/musiconholds/edit/view.html",controller:"MusicOnHoldController as vm"}},resolve:{musiconhold:["apiResolver","$stateParams",function(e,t){return e.resolve("voiceMusicOnHold@get",{fields:"createdAt,updatedAt,id,name,mode,directory,application,format,sort",id:t.id})}],userProfileSection:["apiResolver","Auth",function(e,t){return e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:407})}]},authenticate:!0,permissionId:407,bodyClass:"voice"}).state("app.voice.voiceRecordings",{url:"/voiceRecordings",views:{"content@app":{templateUrl:"app/main/apps/voice/views/voiceRecordings/voiceRecordings.html",controller:"VoiceRecordingsController as vm"}},resolve:{voiceRecordings:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceRecording@get",{fields:"createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,membername,rating,audio,userDisposition",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoiceRecordings",fields:"createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,membername,rating,audio,userDisposition",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:408})}]},authenticate:!0,permissionId:408,bodyClass:"voice"}).state("app.voice.chanSpies",{url:"/chanSpies",views:{"content@app":{templateUrl:"app/main/apps/voice/views/chanSpies/chanSpies.html",controller:"ChanSpiesController as vm"}},resolve:{chanSpies:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voiceChanSpy@get",{fields:"createdAt,updatedAt,id,name,prefix,options,auth,password,record,recordingFormat,description",sort:"-updatedAt",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"ChanSpies",fields:"createdAt,updatedAt,id,name,prefix,options,auth,password,record,recordingFormat,description",sort:"-updatedAt",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:409})}]},authenticate:!0,permissionId:409,bodyClass:"voice"}).state("app.voice.voicePrefixes",{url:"/voicePrefixes",views:{"content@app":{templateUrl:"app/main/apps/voice/views/voicePrefixes/voicePrefixes.html",controller:"VoicePrefixesController as vm"}},resolve:{voicePrefixes:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("voicePrefix@get",{fields:"createdAt,updatedAt,id,name,VoiceExtensionId,callerIdAll,description",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"VoicePrefixes",fields:"createdAt,updatedAt,id,name,VoiceExtensionId,callerIdAll,description",limit:10,offset:0})}],userProfile:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfile@get",{fields:"id,name,crudPermissions",id:t.getCurrentUser().userProfileId})}],userProfileSection:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?null:e.resolve("userProfileSection@get",{fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:t.getCurrentUser().userProfileId,sectionId:410})}]},authenticate:!0,permissionId:410,bodyClass:"voice"}),t.addPart("app/main/apps/voice")}e.$inject=["$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider"],angular.module("app.voice",["ngCsv","ngPassword","md.data.table","flow","mdColorPicker","ckeditor","ng-sortable","ngAria","ngAnimate","mdPickers","mwFormBuilder","mwFormViewer","mwFormUtils","ngclipboard","angular-cron-jobs","ngEmbed","angularMaterialFormBuilder","material.components.expansionPanels","chart.js","angular.filter","app.voice.realtime"]).config(e)}(),function(){"use strict";angular.module("app.navigation",[]).config(function(){})}(),function(){"use strict";function e(e,t){e.addPart("app/quick-panel")}e.$inject=["$translatePartialLoaderProvider","msApiProvider"],angular.module("app.quick-panel",[]).config(e)}(),function(){"use strict";function e(e,t){e.state("app.reset",{url:"/reset/:token",views:{"main@":{templateUrl:"app/core/layouts/content-only.html",controller:"MainController as vm"},"content@app.reset":{templateUrl:"app/reset/reset.html",controller:"ResetPasswordController as vm"}},bodyClass:"reset"}),t.addPart("app/reset")}e.$inject=["$stateProvider","$translatePartialLoaderProvider"],angular.module("app.reset",[]).config(e)}(),function(){"use strict";function e(e){e.addPart("app/toolbar")}e.$inject=["$translatePartialLoaderProvider"],angular.module("app.toolbar",[]).config(e)}(),function(){"use strict";function e(e){e.interceptors.push("authInterceptor")}e.$inject=["$httpProvider"],angular.module("app.auth").config(e)}(),function(){"use strict";function e(e,n,t,a){e.$on("$stateChangeStart",function(e,t){return t.hasOwnProperty("authenticate")&&t.authenticate&&!a.isLoggedIn()?(e.preventDefault(),n.go("app.login",{},{reload:!0,notify:!0})):a.isLoggedIn()&&t.hasOwnProperty("permissionId")&&t.permissionId&&!a.hasRole("admin")?a.reloadPermissions().then(function(){if(!a.hasPermission(t.permissionId))return e.preventDefault(),n.go("app.dashboards.general",{},{reload:!0,notify:!0})}).catch(function(){return e.preventDefault(),n.go("app.dashboards.general",{},{reload:!0,notify:!0})}):void 0})}e.$inject=["$rootScope","$state","$window","Auth"],angular.module("app.auth").run(e)}(),function(){"use strict";function e(a,i,s,o,t,r){var l,d=["id","role","fullname","name","internal","email","userpic","permissions","md5secret","phoneBarAutoAnswer","phoneBarAutoAnswerDelay","phoneBarEnableRecording","phoneBarEnableDtmfTone","voicePause","chatPause","mailPause","faxPause","smsPause","openchannelPause","phoneBarEnableSettings","phoneBarExpires","pauseType","showWebBar","phoneBarRemoteControlPort","phoneBarRemoteControl","lastLoginAt","lastPauseAt","crudPermissions","allowmessenger","passwordResetAt","alias","phoneBarPrefixRequired","hotdesk","userProfileId"];function c(e){var t=s.defer();return m("agent")&&0!==l.showWebBar?o.user.login({id:l.id,device:"web",intrf:e}).$promise.then(function(){console.log("AGENT LOGGED IN"),t.resolve()}).catch(function(e){console.error(e),t.reject(e)}):m("admin")||m("user")?o.user.update({id:l.id},{online:!0,lastLoginAt:moment().format("YYYY-MM-DD HH:mm:ss")}).$promise.catch(function(e){console.error(e)}).finally(function(){t.resolve()}):t.resolve(),t.promise}function n(){if(i.remove("motion.user"),i.remove("motion.token"),l&&l.id){var e=l.id;l=null,t.localStorage.removeItem("motion.user:"+e)}}function m(e){return!!l&&l.role===e}function u(e){return!!l&&_.includes(l.permissions,e)}function e(){return i.get("motion.token")}function p(e){return l=_.assign(l,_.pick(e,d)),i.put("motion.user",JSON.stringify(l)),m("user")&&g().then(function(e){l.permissions=e}),l}function g(){var i=[];return s(function(t,n){var a=[];return l||t(a),o.userProfileSection.get({userProfileId:l.userProfileId}).$promise.then(function(e){return i=e&&e.rows?e.rows:[],_.isEmpty(i)||(a=_.map(_.filter(i,function(e){return e.enabled}),function(e){return e.sectionId})),a}).then(function(t){if(_.includes(t,100)){var e=_.find(i,{sectionId:100});return e.autoAssociation?(t.push(101),t):o.userProfileResource.get({sectionId:e.id}).$promise.then(function(e){return(e&&e.rows?e.rows[0]:null)&&t.push(101),t})}return t}).then(function(t){if(_.includes(t,1003)||_.some(i,{enabled:!1,sectionId:1003})){var e=_.find(i,{sectionId:1003});return e.autoAssociation?o.dashboard.get().$promise.then(function(e){return(e&&e.rows?e.rows:[]).forEach(function(e){t.push(e.id+99999)}),t}):o.userProfileResource.get({sectionId:e.id}).$promise.then(function(e){return(e&&e.rows?e.rows:[]).forEach(function(e){t.push(e.resourceId+99999)}),t})}return t}).then(function(t){if(_.includes(t,1801)||_.some(i,{enabled:!1,sectionId:1801})){var e=_.find(i,{sectionId:1801});return e.autoAssociation?o.plugin.get().$promise.then(function(e){return(e&&e.rows?e.rows:[]).forEach(function(e){t.push(e.id+88888)}),t}):o.userProfileResource.get({sectionId:e.id}).$promise.then(function(e){return(e&&e.rows?e.rows:[]).forEach(function(e){t.push(e.resourceId+88888)}),t})}return t}).then(function(e){t(e)}).catch(function(e){n("Error retrieving user profile permissions",e)})})}function v(){return s(function(t,n){g().then(function(e){l.permissions=e,t()}).catch(function(e){n(e)})})}return function(){if(i.get("motion.user"))l=JSON.parse(i.get("motion.user")),o.user.get({id:l.id,fields:d.join(",")}).$promise.then(function(e){if(e)return p(e)}).catch(function(e){console.log("Error retrieving user",e)})}(),{login:function(e){var t,n=s.defer();return o.auth.local(e).$promise.then(function(e){return t=e,i.put("motion.token",e.token),o.user.get({id:e.id,fields:d.join(",")}).$promise}).then(function(e){(l=e).lastLoginAt=moment(),i.put("motion.user",JSON.stringify(e))}).then(function(){if(m("agent")&&1==l.showWebBar&&l.hotdesk)return a.show({controller:"HotDeskDialogController",controllerAs:"vm",templateUrl:"app/auth/services/hotdesk/dialog.html",parent:angular.element(r.body),clickOutsideToClose:!1,resolve:{telephones:["apiResolver","Auth",function(e,t){return e.resolve("user@get",{fields:"id,fullname,name,internal",role:"telephone",nolimit:!0})}]}})}).then(function(e){return c(e)}).catch(function(e){n.reject(e.data)}).finally(function(){o.user.get({id:t.id,fields:d.join(",")}).$promise.then(function(e){l=e,m("user")&&g().then(function(e){l.permissions=e}),n.resolve()}).catch(function(e){console.log("Error update user login",e),n.reject(e.data)})}),n.promise},logout:function(e){var t;return s.defer(),e?(n(),s.resolve()):(t=s.defer(),m("agent")&&0!==l.showWebBar?o.user.logout({id:l.id,device:"web"}).$promise.then(function(){console.log("AGENT LOGGED OUT")}).catch(function(e){console.error(e)}).finally(function(){t.resolve()}):m("admin")||m("user")?o.user.update({id:l.id},{online:!1}).$promise.catch(function(e){console.error(e)}).finally(function(){t.resolve()}):t.resolve(),t.promise).then(n).catch(function(e){console.error(e)})},queueLogin:c,isLoggedIn:function(){return!(!l||!e())},getPermissions:g,reloadPermissions:v,hasChildrenPermissions:function(e){return!!e&&_.some(e,function(e){return u(e)})},hasModulePermissions:function(i){return s(function(a,t){m("admin")?a(!0):o.userProfileSection.get({userProfileId:l.userProfileId}).$promise.then(function(e){var t=e&&e.rows?e.rows:[];if(_.isEmpty(t))a(!1);else{var n=_.filter(t,function(e){return e.enabled});a(_.some(n,["category",i]))}}).catch(function(e){t(e)})})},hasModulesPermissions:function(i){return s(function(n,t){var a={};m("admin")?(i.forEach(function(e){a[e]=!0}),n(a)):o.userProfileSection.get({userProfileId:l.userProfileId}).$promise.then(function(e){var t=e&&e.rows?e.rows:[];_.isEmpty(t)?n({}):(_(t).filter(function(e){return e.enabled&&_.includes(i,e.category)}).uniqBy(function(e){return e.category}).map(function(e){return e.category}).value().forEach(function(e){a[e]=!0}),n(a))}).catch(function(e){t(e)})})},hasRole:m,hasPermission:u,hasSectionPermissions:function(a){return s(function(e,t){var n={};return v().then(function(){_.includes(l.permissions,a)&&(n[a]=!0),e(n)}).catch(function(e){t(e)})})},hasSectionsPermissions:function(a){return s(function(e,t){var n={};if(!m("admin"))return v().then(function(){a.forEach(function(e){_.includes(l.permissions,e)&&(n[e]=!0)}),e(n)}).catch(function(e){t(e)});a.forEach(function(e){n[e]=!0}),e(n)})},getToken:e,getCurrentUser:function(){return l},parseCrudPermissions:function(e){return m("admin")?{readOnly:!1,canEdit:!0,canDelete:!0}:e?{readOnly:!(!_.includes(e,"r")||1!==e.length),canEdit:!!_.includes(e,"e"),canDelete:!!_.includes(e,"d")}:{readOnly:!0,canEdit:!1,canDelete:!1}},updateCurrentUser:p,removeCookies:n}}e.$inject=["$mdDialog","$cookies","$q","api","$window","$document"],angular.module("app.auth").factory("Auth",e)}(),function(){"use strict";function e(t,e){this.telephones=e,this.closeDialog=function(e){t.hide(e)},e.count&&(this.name=e.rows[0].name)}e.$inject=["$mdDialog","telephones"],angular.module("app.auth").controller("HotDeskDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s;return{request:function(e){var t=n.get("motion.token");return e.headers=e.headers||{},i.isSameOrigin(e.url)&&t&&(e.headers.Authorization="Bearer "+t),e},responseError:function(e){switch(e.status){case 401:n.remove("motion.user"),n.remove("motion.token"),(s||(s=a.get("$state"))).go("app.login")}return t.reject(e)}}}e.$inject=["$rootScope","$q","$cookies","$injector","Util"],angular.module("app.auth").factory("authInterceptor",e)}(),function(){"use strict";function e(t){var n={safeCb:function(e){return angular.isFunction(e)?e:angular.noop},urlParse:function(e){var t=document.createElement("a");return t.href=e,""===t.host&&(t.href=t.href),t},isSameOrigin:function(i,e){return i=n.urlParse(i),(e=(e=e&&[].concat(e)||[]).map(n.urlParse)).push(t.location),1<=(e=e.filter(function(e){var t=i.hostname===e.hostname,n=i.protocol===e.protocol,a=i.port===e.port||""===e.port&&("80"===i.port||"443"===i.port);return t&&n&&a})).length}};return n}e.$inject=["$window"],angular.module("app.auth").factory("Util",e)}(),function(){"use strict";angular.module("app.core").provider("motionConfig",function(){var n={disableCustomScrollbars:!1,disableMdInkRippleOnMobile:!0,disableCustomScrollbarsOnMobile:!0};this.config=function(e){n=angular.extend({},n,e)},this.$get=function(){var e={getConfig:function(e){if(angular.isUndefined(n[e]))return!1;return n[e]},setConfig:function(e,t){n[e]=t}};return e}})}(),function(){"use strict";function e(e,t,n,a){t.debugEnabled(!0),e.config({tabindex:!1}),a.config({disableCustomScrollbars:!1,disableCustomScrollbarsOnMobile:!0,disableMdInkRippleOnMobile:!0}),n.config({wheelPropagation:!0})}e.$inject=["$ariaProvider","$logProvider","msScrollConfigProvider","motionConfigProvider"],angular.module("app.core").config(e)}(),function(){"use strict";function e(e,t,n){(t.generate(),n.getConfig("disableMdInkRippleOnMobile")&&e.isMobile())&&angular.element("body").attr("md-no-ink",!0);e.isMobile()&&angular.element("html").addClass("is-mobile");var a=e.detectBrowser();if(a){var i=a.browser+" "+a.version+" "+a.os;angular.element("html").addClass(i)}}e.$inject=["msUtils","motionGenerator","motionConfig"],angular.module("app.core").run(e)}(),function(){"use strict";function e(o,l,d){return{restrict:"E",compile:function(e,t){var s;return t.code||(s=e.html(),e.empty()),function(n,a,r){r.code&&(s=n.$eval(r.code));var i=n.$eval(r.shouldInterpolate);l.when(s).then(function(e){if(e){i&&(e=d(e)(n));var t=angular.element('<pre><code class="highlight" ng-non-bindable></code></pre>');a.append(t),o(function(){!function(e,t){var n=t.find("code"),a=e.split("\n"),i=(a=a.filter(function(e){return e.trim().length}))[0].match(/^\s*/)[0],s=new RegExp("^"+i);a=a.map(function(e){return e.replace(s,"").replace(/\s+$/,"")});var o=hljs.highlight(r.language||r.lang,a.join("\n"),!0);o.value=o.value.replace(/=<span class="hljs-value">""<\/span>/gi,"").replace("<head>","").replace("<head/>",""),n.append(o.value).addClass("highlight")}(e,t)},34,!1)}})}}}}e.$inject=["$timeout","$q","$interpolate"],angular.module("app.core").directive("hljs",e)}(),function(){"use strict";angular.module("app.core").directive("msAdvancedFilter",function(){return{restrict:"E",scope:{options:"="},controller:["$scope",function(l){l.conditions=[],l.getValues=function(e){l.options.getFieldValues(e);var t=null;switch(e.type){case"text":l.conditions=[{name:"Contains",value:"LIKE"},{name:"Equals",value:"="}];break;case"autocomplete":t=[];break;case"date":t={dateStart:null};break;case"number":l.conditions=[{name:"Equals",value:"="},{name:"Greater than",value:">"},{name:"Lower than",value:"<"}]}var n=-1<["select","autocomplete"].indexOf(e.type)?"is":l.options.selectedCondition,a=_.find(l.options.activeConditions,{name:e.name,condition:n});l.options.selectedValue=a?a.values:t},l.searchText=function(e,t){l.options.searchItem(e,t)},l.addNewCondition=function(e,t,n){var a,i,s=[];switch(e.type){case"select":case"autocomplete":i=_.map(n,"name").join(" or "),a={name:"Is",value:"IS"},s=n;break;case"date":var o=moment(n.dateStart).format("YYYY-MM-DD"),r=moment(n.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format("YYYY-MM-DD");i="from "+o+" to "+r;break;default:a=t,i=n,s.push({name:n})}l.options.addCondition(e,a,n,i)},l.removeCondition=function(){_.isEmpty(l.options.activeConditions)&&l.options.getResults()},l.clearConditions=function(){l.options.activeConditions=[],l.options.getResults()},l.applyFilter=function(){l.options.getResults()}}],templateUrl:"app/core/directives/ms-advanced-filter/ms-advanced-filter.html"}})}(),function(){"use strict";angular.module("app.core").directive("msCard",function(){return{restrict:"E",scope:{templatePath:"=template",card:"=ngModel",vm:"=viewModel"},template:'<div class="ms-card-content-wrapper" ng-include="templatePath" onload="cardTemplateLoaded()"></div>',compile:function(e){return e.addClass("ms-card"),function(e,t){e.cardTemplateLoaded=function(){e.$emit("msCard::cardTemplateLoaded",t)}}}}})}(),function(){"use strict";angular.module("app.core").directive("msClickToCall",function(){return{restrict:"E",scope:{type:"=",disabled:"=",target:"=",prefix:"=",license:"="},controller:["$scope","$rootScope","$http","$translate","$document","$mdDialog","Auth","toasty","api",function(n,t,a,i,s,o,e,r,l){function d(e){switch(n.currentUser.showWebBar){case 0:return m("http://127.0.0.1:"+(n.currentUser.phoneBarRemoteControlPort||"9888")+"/api/originate/"+c(e));case 2:return t.$broadcast("webrtc::call",{target:c(e)})}}function c(e){return _.isNil(e)?"":e.replace(/[^\w.+#*\-]+/g,"")}function m(e){return a.get(e).success(function(){r.success({title:"Successful call",msg:"Call properly handled!"})}).error(function(e){r.error({title:"PhoneBar API Error",msg:i.instant("CONTACTMANAGER.ERRORS.PHONEBAR_API")})})}n.currentUser=e.getCurrentUser(),n.showMenu=function(){return n.target&&n.target.indexOf("@")<0&&n.target!=n.currentUser.internal&&n.target!=n.currentUser.name&&(0==n.currentUser.showWebBar&&n.currentUser.phoneBarRemoteControl||2==n.currentUser.showWebBar&&n.license.webrtc)&&!n.disabled},n.call=function(e){return 2!==n.currentUser.showWebBar?(t=e,l.user.getVoicePrefixes({id:n.currentUser.id}).$promise.then(function(e){if(e.count)return o.show({controller:"PrefixDialogController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/prefix/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!0,locals:{prefixes:e,required:n.currentUser.phoneBarPrefixRequired}})}).then(function(e){n.currentUser.phoneBarPrefixRequired?e&&-1!==e&&d(e+t):e&&-1!==e?d(e+t):e||d(t)})):d(e);var t},n.transfer=function(e){switch(n.currentUser.showWebBar){case 0:return m("http://127.0.0.1:"+(n.currentUser.phoneBarRemoteControlPort||"9888")+"/api/transfer?number="+c(e));case 2:t.$broadcast("webrtc::transfer",{target:c(e)})}}}],templateUrl:"app/core/directives/ms-click-to-call/ms-click-to-call.html"}})}(),function(){"use strict";function e(i){return{require:"ngModel",priority:1,link:function(e,t,n,a){a.$formatters.push(i.formatter),a.$parsers.push(i.parser)}}}e.$inject=["msDatepickerFixConfig"],angular.module("app.core").provider("msDatepickerFixConfig",function(){var t={formatter:function(e){return e?""===e?e:new Date(e):""},parser:function(e){return e?moment(e).add(moment(e).utcOffset(),"m").toDate():""}};this.config=function(e){t=angular.extend({},t,e)},this.$get=function(){return t}}).directive("msDatepickerFix",e)}(),function(){"use strict";function e(s){return{restrict:"E",scope:{id:"=",model:"=",element:"=",title:"=",path:"="},replace:!0,link:function(t,e){var n=!1,a={};a.id=t.id,_.isNil(t.path)||(a.path=t.path);var i=document.createElement(t.element);i.setAttribute("preload","none"),i.setAttribute("controls","true"),"audio"===t.element&&i.setAttribute("style","width: 265px;"),"video"===t.element&&i.setAttribute("style","max-width: 500px;"),i.setAttribute("title",t.title),i.setAttribute("src"," "),i.onplay=function(e){n||(n=!0,e.preventDefault(),s[t.model].download(a).$promise.then(function(e){var t=[e.buffer],n=new Blob(t,{type:e.type});i.setAttribute("type",e.type),i.setAttribute("src",URL.createObjectURL(n)),i.play()}).catch(function(e){console.error(e)}))},e.append(i)}}}e.$inject=["api"],angular.module("app.core").directive("msDialogRecording",e)}(),function(){"use strict";angular.module("app.core").directive("msDualMultiselect",function(){return{restrict:"E",scope:{options:"="},controller:["$scope",function(o){o.canTransfer=function(e,t,n){if(!t.readOnly)return void 0!==e.isValid&&e.isValid?n?o.transfer(t.selectedItems,t.items,t.selectedItems.indexOf(e),n):o.transfer(t.items,t.selectedItems,t.items.indexOf(e),n):void 0},o.transfer=function(e,t,n,a){var i=[];if(0<=n)i.push(e[n]),t.push(e[n]),e.splice(n,1);else{for(var s=0;s<e.length;s++)void 0!==e[s].isValid&&e[s].isValid&&t.push(e[s]);for(var s=e.length-1;0<=s;s--)e[s].isValid&&e.splice(s,1);i=t}o.options.transferCallback&&o.options.transferCallback(i,a)},o.getLine=function(e,t){var n="";if(_.isNil(t))return n;if(_.isArray(t)){for(var a=0;a<t.length;a++)n+=" "+(e[t[a]]?e[t[a]]:"");return n}return e[t]?e[t]:""}}],templateUrl:"app/core/directives/ms-dual-multiselect/ms-dual-multiselect.html"}})}(),function(){"use strict";function e(a){return{restrict:"E",replace:!0,scope:{onReply:"&",ngModel:"=",ctrlMethods:"=",pickerPosition:"=",search:"=",recentEmojis:"=",placeholder:"="},template:'<textarea class="emojionearea"></textarea>',link:function(n,e){var t=e.emojioneArea({pickerPosition:n.pickerPosition,search:n.search,recentEmojis:n.recentEmojis,placeholder:a.instant(n.placeholder||"Type a message"),attributes:{spellcheck:!0},events:{keypress:function(e,t){n.ngModel=this.getText(),n.onReply({event:t,body:this.getText()})},emojibtn_click:function(){n.ngModel=this.getText()}}});n.ngModel&&t[0].emojioneArea.setText(n.ngModel),n.internalControl=n.ctrlMethods||{},n.internalControl.setText=function(e){t[0].emojioneArea.setText(e)},n.internalControl.getText=function(){return t[0].emojioneArea.getText()},n.$watch("ngModel",function(e){e||t[0].emojioneArea.setText("")})}}}e.$inject=["$translate"],angular.module("app.core").directive("msEmojiArea",e)}(),function(){"use strict";angular.module("app.core").directive("msFontFamily",function(){return{restrict:"E",scope:{ngModel:"="},controller:["$scope",function(e){e.fonts=[{option:"Arial",value:"Arial,Helvetica,sans-serif"},{option:"Comic Sans MS",value:"Comic Sans MS,cursive"},{option:"Courier New",value:"Courier New,Courier,monospace"},{option:"Georgia",value:"Georgia,serif"},{option:"Lucida Sans Unicode",value:"Lucida Sans Unicode,Lucida Grande,sans-serif"},{option:"Tahoma",value:"Tahoma,Geneva,sans-serif"},{option:"Times New Roman",value:"Times New Roman,Times,serif"},{option:"Trebuchet MS",value:"Trebuchet MS,Helvetica,sans-serif"},{option:"Verdana",value:"Verdana,Geneva,sans-serif"}]}],templateUrl:"app/core/directives/ms-font-family/ms-font-family.html"}})}(),function(){"use strict";angular.module("app.core").controller("MsFormWizardController",function(){var t=this;function e(){return t.forms.length}function n(){return 0===t.selectedIndex}function a(){return t.selectedIndex===e()-1}t.forms=[],t.selectedIndex=0,t.registerForm=function(e){t.forms.push(e)},t.previousStep=function(){if(n())return;t.selectedIndex--},t.nextStep=function(){if(a())return;t.selectedIndex++},t.firstStep=function(){t.selectedIndex=0},t.lastStep=function(){t.selectedIndex=e()-1},t.totalSteps=e,t.isFirstStep=n,t.isLastStep=a,t.currentStepInvalid=function(){return angular.isDefined(t.forms[t.selectedIndex])&&t.forms[t.selectedIndex].$invalid},t.previousStepInvalid=function(){return 0<t.selectedIndex&&angular.isDefined(t.forms[t.selectedIndex-1])&&t.forms[t.selectedIndex-1].$invalid},t.formsIncomplete=function(){for(var e=0;e<t.forms.length;e++)if(t.forms[e].$invalid)return!0;return!1},t.resetForm=function(){for(var e=t.selectedIndex=0;e<t.forms.length;e++)t.forms[e].$setPristine(),t.forms[e].$setUntouched()}}).directive("msFormWizard",function(){return{restrict:"E",scope:!0,controller:"MsFormWizardController as msWizard",compile:function(e){return e.addClass("ms-form-wizard"),function(){}}}}).directive("msFormWizardForm",function(){return{restrict:"A",require:["form","^msFormWizard"],compile:function(e){return e.addClass("ms-form-wizard-form"),function(e,t,n,a){var i=a[0],s=a[1];s.registerForm(i)}}}})}(),function(){"use strict";function e(i){return{restrict:"E",scope:{onClose:"&"},transclude:!0,templateUrl:"app/core/directives/ms-info-bar/ms-info-bar.html",link:function(e,t){var n=i.find("ms-info-bar-active"),a="ms-info-bar-active";n.addClass(a),e.removeInfoBar=function(){n.removeClass(a),t.remove(),e.onClose&&e.onClose(),e.$destroy()}}}}e.$inject=["$document"],angular.module("app.core").directive("msInfoBar",e)}(),function(){"use strict";function e(r,a,l,e){var d=this,t={columnCount:5,respectItemOrder:!1,reLayoutDebounce:400,responsive:{md:3,sm:2,xs:1}},n=!0;function i(){n&&e.cancel(n),n=e(function(){!function(){d.containerPos=d.container[0].getBoundingClientRect(),function(){d.columnCount=d.options.columnCount,l("gt-md")?d.columnCount=d.options.columnCount:l("md")?d.columnCount=d.columnCount>d.options.responsive.md?d.options.responsive.md:d.columnCount:l("sm")?d.columnCount=d.columnCount>d.options.responsive.sm?d.options.responsive.sm:d.columnCount:d.columnCount=d.options.responsive.xs;d.columnWidth=d.containerPos.width/d.columnCount}(),r.$broadcast("msMasonry:relayoutStarted"),d.items=d.container.find("ms-masonry-item");for(var e=Array.apply(null,new Array(d.columnCount)).map(function(){return 0}),t=0;t<d.items.length;t++){var n,a,i,s,o=d.items[t];(o=angular.element(o)).scope()&&o.scope().$broadcast("msMasonryItem:startReLayout"),o.css({width:d.columnWidth}),d.options.respectItemOrder?(i=t%d.columnCount,s=e[i]):(s=Math.min.apply(Math,e),i=e.indexOf(s)),e[i]=s+o[0].getBoundingClientRect().height,n=Math.round(i*d.columnWidth),a=s,o.css({transform:"translate3d("+n+"px,"+a+"px,0px)"}),o.addClass("placed"),o.scope()&&o.scope().$broadcast("msMasonryItem:finishReLayout")}}(),r.$broadcast("msMasonry:relayoutFinished")},d.options.reLayoutDebounce)}d.options=null,d.container=[],d.containerPos="",d.columnWidth="",d.items=[],d.reLayout=i,d.initialize=function(){d.options=d.options?angular.extend(t,d.options):t,r.$watch(function(){return d.container.width()},function(e,t){e!==t&&i()})},d.waitImagesLoaded=function(e,t){if("undefined"!=typeof imagesLoaded){var n=a.imagesLoaded(e);n.on("done",function(){t()})}else t()},r.$on("msMasonry:relayout",function(){i()})}function t(o){return{restrict:"AEC",controller:"msMasonryController",compile:function(i,s){return{pre:function(e,t,n,a){a.options=angular.fromJson(s.options||"{}"),a.container=i},post:function(e,t,n,a){o(function(){a.initialize()})}}}}}e.$inject=["$scope","$window","$mdMedia","$timeout"],t.$inject=["$timeout"],angular.module("app.core").controller("msMasonryController",e).directive("msMasonry",t).directive("msMasonryItem",function(){return{restrict:"AEC",require:"^msMasonry",priority:1,link:function(e,t,n,a){a.waitImagesLoaded(t,function(){a.reLayout()}),e.$on("msMasonryItem:finishReLayout",function(){e.$watch(function(){return t.height()},function(e,t){e!==t&&a.reLayout()})}),t.on("$destroy",function(){a.reLayout()})}}})}(),function(){"use strict";function e(n,e,a,i){var s=this;function o(e,t){s.selectedPalette=e,s.selectedHues=t}function r(){o(!(s.selectedColor={palette:"",hue:"",class:""}),!1),d()}function l(e,t){s.selectedColor={palette:e,hue:t,class:"md-"+e+"-"+t+"-bg",bgColorValue:i.rgba(s.palettes[e][t].value),fgColorValue:i.rgba(s.palettes[e][t].contrast)},"obj"!==s.msModelType||angular.equals(s.selectedColor,s.modelCtrl.$viewValue)||d(),o(e,s.palettes[e]),n.$selectedColor=s.selectedColor}function d(){"class"===s.msModelType?s.modelCtrl.$setViewValue(s.selectedColor.class):"obj"===s.msModelType&&s.modelCtrl.$setViewValue(s.selectedColor)}s.palettes=e,s.selectedPalette=!1,s.selectedHues=!1,n.$selectedColor={},s.activateHueSelection=o,s.selectColor=function(e,t){l(e,t),d(),a.hide()},s.removeColor=r,n.$watch("ngModel",function(){if(!s.modelCtrl.$viewValue||""===s.modelCtrl.$viewValue)return void r();var e,t;if("class"===s.msModelType){var n=s.modelCtrl.$viewValue.split("-");t=5<=n.length?(e=n[1]+"-"+n[2],n[3]):(e=n[1],n[2])}else"obj"===s.msModelType&&(e=s.modelCtrl.$viewValue.palette,t=s.modelCtrl.$viewValue.hue||500);l(e,t)})}e.$inject=["$scope","$mdColorPalette","$mdMenu","motionGenerator"],angular.module("app.core").controller("msMaterialColorPickerController",e).directive("msMaterialColorPicker",function(){return{require:["msMaterialColorPicker","ngModel"],restrict:"E",scope:{ngModel:"=",msModelType:"@?"},controller:"msMaterialColorPickerController as vm",transclude:!0,templateUrl:"app/core/directives/ms-material-color-picker/ms-material-color-picker.html",link:function(e,t,n,a,i){var s=a[0];s.modelCtrl=a[1],s.msModelType=e.msModelType||"class",i(e,function(e){(e=e.filter(function(e,t){return 1===t.nodeType})).length&&t.find("ms-color-picker-button").replaceWith(e)})}}})}(),function(){"use strict";function e(p,g,v){return{restrict:"A",link:function(e,t,n){var a="true"===n.msNavIsFolded,i=!1,s=angular.element(p[0].body),o=angular.element('<div id="ms-nav-fold-open-overlay"></div>'),r=angular.element('<div id="ms-nav-fold-close-overlay"></div>'),l=t.parent();function d(){s.addClass("ms-nav-folded"),g.$broadcast("msNav::forceCollapse"),t.scrollTop(0),l.append(o),o.on("mouseenter touchstart",function(e){c(e),i=!0})}function c(e){angular.isDefined(e)&&e.preventDefault(),s.addClass("ms-nav-folded-open"),g.$broadcast("msNav::expandMatchingToggles"),l.find(o).remove(),l.parent().append(r),r.on("mouseenter touchstart",function(e){m(e),i=!1})}function m(e){angular.isDefined(e)&&e.preventDefault(),g.$broadcast("msNav::forceCollapse"),t.scrollTop(0),s.removeClass("ms-nav-folded-open"),l.parent().find(r).remove(),l.append(o),o.on("mouseenter touchstart",function(e){c(e),i=!0})}function u(){s.removeClass("ms-nav-folded ms-nav-folded-open"),g.$broadcast("msNav::expandMatchingToggles"),t.off("mouseenter mouseleave")}v.setFoldable(e,t,a),a?d():u(),e.toggleFold=function(){(a=!a)?d():u()},e.openFolded=c,e.closeFolded=m,e.isNavFoldedOpen=function(){return i},e.$on("$destroy",function(){o.off("mouseenter touchstart"),r.off("mouseenter touchstart"),t.off("mouseenter mouseleave")})}}}function t(n,a,i){return{restrict:"E",scope:{},controller:"MsNavController",compile:function(e){return e.addClass("ms-nav"),function(e){n.$broadcast("msNav::expandMatchingToggles");var t=n.$on("$stateChangeSuccess",function(){n.$broadcast("msNav::expandMatchingToggles"),a.when("navigation").then(function(e){e.close(),i.isNavFoldedOpen()&&i.closeFolded()})});e.$on("$destroy",function(){t()})}}}}function n(m,u,p,g){return{restrict:"A",require:"^msNav",scope:!0,compile:function(e,t){return e.addClass("ms-nav-toggle"),angular.isUndefined(t.collapsed)&&(t.collapsed=!0),e.attr("collapsed",t.collapsed),function(a,i,e,n){var s={expanded:"expanded",expandAnimation:"expand-animation",collapseAnimation:"collapse-animation"},t=i.find("a"),o=[],r=/\(.*\)/g;function l(){return"true"===i.attr("collapsed")}function d(){var e=u.defer();if(!l())return e.reject({error:!0}),e.promise;i.attr("collapsed",!1);var t=angular.element(i.find("ms-nav-toggle-items")[0]);t.css({position:"absolute",visibility:"hidden",display:"block",height:"auto"});var n=t[0].offsetHeight;return t.css({position:"",visibility:"",display:"",height:""}),a.$evalAsync(function(){p.animate(t,{display:"block",height:"0px"},{height:n+"px"},s.expandAnimation).then(function(){t.addClass(s.expanded),t.css({height:""}),e.resolve({success:!0})})}),e.promise}function c(){var e=u.defer();if(l())return e.reject({error:!0}),e.promise;i.attr("collapsed",!0);var t=angular.element(i.find("ms-nav-toggle-items")[0]),n=t[0].offsetHeight;return a.$evalAsync(function(){p.animate(t,{height:n+"px"},{height:"0px"},s.collapseAnimation).then(function(){t.removeClass(s.expanded),t.css({display:"",height:""}),e.resolve({success:!0})})}),e.promise}angular.forEach(t,function(e){var t=angular.element(e).attr("ui-sref");angular.isUndefined(t)||(t=t.replace(r,""),o.push(t))}),n.setToggleItem(i,a),i.children(".ms-nav-button").on("click",function(){if(n.isDisabled())return;n.disable(),l()?(n.clearLockedItems(),a.$emit("msNav::pushToLockedList"),m.$broadcast("msNav::collapse"),d().then(function(){n.enable()})):a.$broadcast("msNav::forceCollapse")}),a.$on("$destroy",function(){i.children(".ms-nav-button").off("click")}),a.$on("msNav::collapse",function(){var e=n.getLockedItems(),t=!1;angular.forEach(e,function(e){angular.equals(e.scope,a)&&(t=!0)}),t||c().then(function(){n.enable()})}),a.$on("msNav::forceCollapse",function(){c().then(function(){n.enable()})}),a.$on("msNav::expandMatchingToggles",function(){var t=g.current.name,n=!1;angular.forEach(o,function(e){t===e&&(n=!0)}),n?d():c()}),a.$on("msNav::pushToLockedList",function(){n.setLockedItem(i,a)})}}}}e.$inject=["$document","$rootScope","msNavFoldService"],t.$inject=["$rootScope","$mdComponentRegistry","msNavFoldService"],n.$inject=["$rootScope","$q","$animate","$state"],angular.module("app.core").factory("msNavFoldService",function(){var n={};return{setFoldable:function(e,t){n={scope:e,element:t}},isNavFoldedOpen:function(){return n.scope.isNavFoldedOpen()},toggleFold:function(){n.scope.toggleFold()},openFolded:function(){n.scope.openFolded()},closeFolded:function(){n.scope.closeFolded()}}}).directive("msNavIsFolded",e).controller("MsNavController",function(){var e=this,t=!1,n=[],a=[];e.isDisabled=function(){return t},e.enable=function(){t=!1},e.disable=function(){t=!0},e.setToggleItem=function(e,t){n.push({element:e,scope:t})},e.getLockedItems=function(){return a},e.setLockedItem=function(e,t){a.push({element:e,scope:t})},e.clearLockedItems=function(){a=[]}}).directive("msNav",t).directive("msNavTitle",function(){return{restrict:"A",compile:function(e){return e.addClass("ms-nav-title"),function(){}}}}).directive("msNavButton",function(){return{restrict:"AE",compile:function(e){return e.addClass("ms-nav-button"),function(){}}}}).directive("msNavToggle",n)}(),function(){"use strict";function e(e,t){e.root?this.navigation=t.getNavigation(e.root):this.navigation=t.getNavigation(),this.toggleHorizontalMobileMenu=function(){angular.element("body").toggleClass("ms-navigation-horizontal-mobile-menu-active")},t.sort()}function t(c,m,u,p){return{restrict:"E",scope:{folded:"=",root:"@"},controller:"MsNavigationController as vm",templateUrl:"app/core/directives/ms-navigation/templates/vertical.html",transclude:!0,compile:function(e){return e.addClass("ms-navigation"),function(e,t){var n=angular.element("body"),a=angular.element('<div id="ms-navigation-fold-expander"></div>'),i=angular.element('<div id="ms-navigation-fold-collapser"></div>'),s=u("navigation");function o(e){if(p.setFolded(e),e)c.$broadcast("msNavigation::collapse"),n.addClass("ms-navigation-folded"),r();else{var t=p.getActiveItem();t&&t.scope.$emit("msNavigation::stateMatched"),n.removeClass("ms-navigation-folded ms-navigation-folded-open"),i.remove()}}function r(){t.parent().append(a),m(function(){a.on("mouseenter touchstart",l)})}function l(e){e&&e.preventDefault(),p.setFoldedOpen(!0);var t=p.getActiveItem();t&&t.scope.$emit("msNavigation::stateMatched"),n.addClass("ms-navigation-folded-open"),a.remove(),n.find("#main").append(i),i.on("mouseenter touchstart",d)}function d(e){e&&e.preventDefault(),p.setFoldedOpen(!1),c.$broadcast("msNavigation::collapse"),n.removeClass("ms-navigation-folded-open"),i.remove(),r()}p.setNavigationScope(e),function(){null===p.getFolded()&&p.setFolded(e.folded);p.getFolded()&&(m(function(){c.$broadcast("msNavigation::collapse")}),n.addClass("ms-navigation-folded"),r())}(),e.$watch(function(){return s.isLockedOpen()},function(e,t){if(!angular.isUndefined(e)&&!angular.equals(e,t)&&p.getFolded())if(e)c.$broadcast("msNavigation::collapse");else{var n=p.getActiveItem();n&&n.scope.$emit("msNavigation::stateMatched")}}),e.$watch("folded",function(e,t){angular.isUndefined(e)||angular.equals(e,t)||o(e)}),e.toggleFolded=function(){o(!p.getFolded())},e.$on("$stateChangeStart",function(){s.close()}),e.$on("$destroy",function(){i.off("mouseenter touchstart"),a.off("mouseenter touchstart")})}}}}function n(n,e,a,i,t,s){var o=this;o.element=e,o.node=n.node,o.hasChildren=void 0,o.collapsed=void 0,o.collapsable=void 0,o.group=void 0,o.animateHeightClass="animate-height",o.toggleCollapsed=function(){o.collapsed?o.expand():o.collapse()},o.collapse=function(){var e=o.element.children("ul"),t=e[0].offsetHeight;n.$evalAsync(function(){o.collapsed=!0,o.element.addClass("collapsing"),i.animate(e,{display:"block",height:t+"px"},{height:"0px"},o.animateHeightClass).then(function(){e.css({display:"",height:""}),o.element.removeClass("collapsing")}),n.$broadcast("msNavigation::collapse")})},o.expand=function(){var e=o.element.children("ul");e.css({position:"absolute",visibility:"hidden",display:"block",height:"auto"});var t=e[0].offsetHeight;e.css({position:"",visibility:"",display:"",height:""}),n.$evalAsync(function(){o.collapsed=!1,o.element.addClass("expanding"),i.animate(e,{display:"block",height:"0px"},{height:t+"px"},o.animateHeightClass).then(function(){e.css({height:""}),o.element.removeClass("expanding")}),a.$broadcast("msNavigation::collapse",o.node._path)})},o.getClass=function(){return o.node.class},o.isHidden=function(){if(angular.isDefined(o.node.hidden)&&angular.isFunction(o.node.hidden))return o.node.hidden();return!1},function(){o.hasChildren=0<o.node.children.length,o.group=!(!angular.isDefined(o.node.group)||!0!==o.node.group),!o.hasChildren||o.group?o.collapsable=!1:o.collapsable=!(!angular.isUndefined(o.node.collapsable)&&"boolean"==typeof o.node.collapsable&&!0!==o.node.collapsable);o.collapsable?o.collapsed=!(!angular.isUndefined(o.node.collapsed)&&"boolean"==typeof o.node.collapsed&&!0!==o.node.collapsed):o.collapsed=!1;if(o.node.state===t.current.name||t.includes(o.node.state)){if(angular.isDefined(o.node.stateParams)&&angular.isDefined(t.params)&&!angular.equals(o.node.stateParams,t.params))return;n.$emit("msNavigation::stateMatched"),s.setActiveItem(o.node,n)}n.$on("msNavigation::stateMatched",function(){o.collapsable&&o.collapsed&&n.$evalAsync(function(){o.collapsed=!1})}),n.$on("msNavigation::collapse",function(e,t){if(!o.collapsed&&o.collapsable)if(angular.isUndefined(t))o.collapse();else{var n=t.split("."),a=[],i=s.getActiveItem();if(i&&(a=i.node._path.split(".")),-1<n.indexOf(o.node._id))return;if(-1<a.indexOf(o.node._id))return;o.collapse()}}),n.$on("$stateChangeSuccess",function(){if(o.node.state===t.current.name){if(angular.isDefined(o.node.stateParams)&&angular.isDefined(t.params)&&!angular.equals(o.node.stateParams,t.params))return;s.setActiveItem(o.node,n),a.$broadcast("msNavigation::collapse",o.node._path)}if(t.includes(o.node.state)){if(angular.isDefined(o.node.stateParams)&&angular.isDefined(t.params)&&!angular.equals(o.node.stateParams,t.params))return;n.$emit("msNavigation::stateMatched")}})}()}function a(t){return{restrict:"E",scope:{root:"@"},controller:"MsNavigationController as vm",templateUrl:"app/core/directives/ms-navigation/templates/horizontal.html",transclude:!0,compile:function(e){return e.addClass("ms-navigation-horizontal"),function(e){t.setNavigationScope(e)}}}}function i(n,e,t,a,i){var s=this;s.element=e,s.node=n.node,s.hasChildren=void 0,s.group=void 0,s.getClass=function(){return s.node.class},function(){if(s.isActive=!1,s.hasChildren=0<s.node.children.length,s.group=!(!angular.isDefined(s.node.group)||!0!==s.node.group),s.node.state===a.current.name||a.includes(s.node.state)){if(angular.isDefined(s.node.stateParams)&&angular.isDefined(a.params)&&!angular.equals(s.node.stateParams,a.params))return;n.$emit("msNavigation::stateMatched"),i.setActiveItem(s.node,n)}n.$on("msNavigation::stateMatched",function(){s.hasChildren&&n.$evalAsync(function(){s.isActive=!0})}),n.$on("msNavigation::clearActive",function(){if(s.hasChildren){var e=[],t=i.getActiveItem();t&&(e=t.node._path.split(".")),-1<e.indexOf(s.node._id)?n.$evalAsync(function(){s.isActive=!0}):n.$evalAsync(function(){s.isActive=!1})}}),n.$on("$stateChangeSuccess",function(){if(s.node.state===a.current.name||a.includes(s.node.state)){if(angular.isDefined(s.node.stateParams)&&angular.isDefined(a.params)&&!angular.equals(s.node.stateParams,a.params))return;i.setActiveItem(s.node,n),t.$broadcast("msNavigation::clearActive")}})}()}function s(i){return{restrict:"A",require:"^msNavigationHorizontalNode",compile:function(e){return e.addClass("ms-navigation-horizontal-item"),function(e,t,n,a){t.on("click",function(){if(!a.hasChildren||i("gt-md"))return;t.toggleClass("expanded")}),e.$on("$destroy",function(){t.off("click")})}}}}e.$inject=["$scope","msNavigationService"],t.$inject=["$rootScope","$timeout","$mdSidenav","msNavigationService"],n.$inject=["$scope","$element","$rootScope","$animate","$state","msNavigationService"],a.$inject=["msNavigationService"],i.$inject=["$scope","$element","$rootScope","$state","msNavigationService"],s.$inject=["$mdMedia"],angular.module("app.core").provider("msNavigationService",function(){var r=angular.injector(["ng"]).get("$log"),l=[];function o(e,t){if(angular.isString(e)){for(var n=e.split("."),a=n[n.length-1],i=function(e){var t=l;if(1===e.length)return t;e.pop();for(var n=0;n<e.length;n++){for(var a=e[n],i=!0,s=0;s<t.length;s++)if(t[s]._id===a){t=t[s].children,i=!1;break}if(i){var o={_id:a,_path:e.join("."),title:a,weight:1,children:[]};t.push(o),t=o.children}}return t}(n),s=!1,o=0;o<i.length;o++)if(i[o]._id===a){s=i[o];break}s?(angular.extend(s,t),s.uisref=m(s)):(t.children=[],!angular.isUndefined(t.weight)&&angular.isNumber(t.weight)||(t.weight=1),t._id=a,t._path=e,t.uisref=m(t),i.push(t))}else r.error("path must be a string (eg. `dashboard.project`)")}function d(e){if(angular.isString(e)){for(var t=l,n=e.split("."),a=0;a<n.length;a++)for(var i=n[a],s=0;s<t.length;s++)if(t[s]._id===i){if(t[s]._path===e)return t.splice(s,1),!0;t=t[s].children;break}return!1}r.error("path must be a string (eg. `dashboard.project`)")}function c(e){e||(e=l).sort(a);for(var t=0;t<e.length;t++){var n=e[t].children;1<n.length&&n.sort(a),0<n.length&&c(n)}}function a(e,t){return parseInt(e.weight)-parseInt(t.weight)}function m(e){var t="";return angular.isDefined(e.state)&&(t=e.state,angular.isDefined(e.stateParams)&&angular.isObject(e.stateParams)&&(t=t+"("+angular.toJson(e.stateParams)+")")),t}this.saveItem=o,this.deleteItem=d,this.sortByWeight=c,this.$get=function(){var n=null,t=null,a=null,i=null,e={saveItem:o,deleteItem:d,sort:c,clearNavigation:function(){l=[],t&&(t.vm.navigation=l)},setActiveItem:function(e,t){n={node:e,scope:t}},getActiveItem:function(){return n},getNavigation:s,getFlatNavigation:function(e){return function e(t){var n=[];for(var a=0;a<t.length;a++){var i=angular.copy(t[a]);i.children=[],n.push(i),0<t[a].children.length&&(n=n.concat(e(t[a].children)))}return n}(s(e))},setNavigationScope:function(e){t=e},setFolded:function(e){a=e},getFolded:function(){return a},setFoldedOpen:function(e){i=e},getFoldedOpen:function(){return i},toggleFolded:function(){t.toggleFolded()}};return e;function s(e){if(e){for(var t=0;t<l.length;t++)if(l[t]._id===e)return[l[t]];return null}return l}}}).controller("MsNavigationController",e).directive("msNavigation",t).controller("MsNavigationNodeController",n).directive("msNavigationNode",function(){return{restrict:"A",bindToController:{node:"=msNavigationNode"},controller:"MsNavigationNodeController as vm",compile:function(e){return e.addClass("ms-navigation-node"),function(e,t,n,a){t.addClass(a.getClass()),a.group&&t.addClass("group")}}}}).directive("msNavigationItem",function(){return{restrict:"A",require:"^msNavigationNode",compile:function(e){return e.addClass("ms-navigation-item"),function(e,t,n,a){a.collapsable&&t.on("click",a.toggleCollapsed),e.$on("$destroy",function(){t.off("click")})}}}}).directive("msNavigationHorizontal",a).controller("MsNavigationHorizontalNodeController",i).directive("msNavigationHorizontalNode",function(){return{restrict:"A",bindToController:{node:"=msNavigationHorizontalNode"},controller:"MsNavigationHorizontalNodeController as vm",compile:function(e){return e.addClass("ms-navigation-horizontal-node"),function(e,t,n,a){t.addClass(a.getClass()),a.group&&t.addClass("group")}}}}).directive("msNavigationHorizontalItem",s)}(),function(){"use strict";function e(i,n,s,e,a,o,t,r,l,d,c){var m=this,u=["ringingId","speakerId","microphoneId","ringingVolume","speakerVolume","microphoneVolume","ringingMute","speakerMute","microphoneMute"],p=JSON.parse(t.localStorage.getItem("motion2.user:"+m.conf.id))||{webrtc:{ringingVolume:.5,speakerVolume:.5,microphoneVolume:1,ringingMute:!1,speakerMute:!1,microphoneMute:!1}};function g(){if(void 0!==jabra)return jabra.getUserDeviceMediaExt({}).then(function(e){var t=e.stream,n=e.deviceInfo,a=n.browserAudioInputId;!jabra.isDeviceSelectedForInput(t,n)||a!==m.conf.microphoneId&&a!==m.conf.speakerId&&a!==m.conf.ringingId?m.isJabraEnabled=!1:(m.isJabraEnabled=!0,console.log("jabra device attached"),jabra.onHook(),jabra.addEventListener("device attached",function(e){console.log("jabra device attached"),g()}),jabra.addEventListener("device detached",function(e){m.isJabraEnabled=!1,m.jabraSession=null}),jabra.addEventListener("reject",function(e){}),jabra.addEventListener("mute",function(e){jabra.mute(),m.conf.microphoneMute=!0}),jabra.addEventListener("unmute",function(e){jabra.unmute(),m.conf.microphoneMute=!1}),jabra.addEventListener("acceptcall",function(e){if(0<m.sessions.length){var t=m.sessions[m.sessions.length-1],n=!0;_.has(t,"localHold")&&t.localHold&&(n=!1),"incoming"===t.direction&&n&&(m.jabraSession=t,m.answer(t))}}),jabra.addEventListener("error",function(e){console.log(e)}),jabra.addEventListener("linebusy",function(e){}),jabra.addEventListener("endcall",function(e){if(e.data.ringing){if(0<m.sessions.length){var t=m.sessions[m.sessions.length-1];"incoming"===t.direction&&(m.jabraSession=t,m.answer(t))}}else m.isInConference?m.buttonClicked||(m.jabraClicked=!0,v(m.jabraSession.id,!0).then(function(e){jabra.onHook(),jabra.offHook(),m.jabraSession=e})):new Promise(function(e,t){for(var n=null,a=0;a<m.sessions.length;a++)_.has(m.sessions[a],"localHold")&&m.sessions[a].localHold||(n=m.sessions[a]);e(n)}).then(function(e){null!==e&&(e.terminate(),m.jabraSession=null)}),m.buttonClicked=!1}),jabra.addEventListener("flash",function(e){m.jabraSession.localHold?(m.jabraSession.unhold({useUpdate:!1}),jabra.resume(),jabra.offHook()):(m.jabraSession.hold({useUpdate:!1}),jabra.onHook(),jabra.hold())}))},function(e){e.horror;m.isJabraEnabled=!1,console.log("Jabra device not recognized")});m.isJabraEnabled=!1}function v(a,i){return new Promise(function(e,t){var n=null;return m.sessions[0]._id===a?(n=m.sessions[1],i&&m.sessions[0].terminate()):(n=m.sessions[0],i&&m.sessions[1].terminate()),e(n)})}function h(e){switch(e){case"ringing":m.conf.ringingMute?m.soundPlayer.muted=!0:m.soundPlayer.muted=!1,m.conf.ringingId&&m.soundPlayer.setSinkId(m.conf.ringingId).then(function(){m.soundPlayer.volume=m.conf.ringingVolume}).then(A).catch(function(e){console.info(e.message,m.conf.ringingId)});break;case"speaker":m.conf.speakerMute?m.remotePlayer.muted=!0:m.remotePlayer.muted=!1,m.conf.speakerId&&m.remotePlayer.setSinkId(m.conf.speakerId).then(function(){m.remotePlayer.volume=m.conf.speakerVolume}).then(A).catch(function(e){console.info(e.message,m.conf.speakerId)});break;case"microphone":for(var t=0;t<m.sessions.length;t+=1)m.conf.microphoneMute?(m.sessions[t].mute(),m.isJabraEnabled&&jabra.mute()):(m.sessions[t].unmute(),m.isJabraEnabled&&jabra.unmute());A();break;default:console.log("unknown device")}}function f(e,t,n){m.calls.unshift({target:e,fullname:n||e,inbound:t,time:moment().format("HH:mm")}),50<m.calls.length&&m.calls.pop()}function b(){return m.conf.license&&m.conf.isWebRTCSupported&&m.conf.hasMicrophone&&m.conf.hasSpeakers&&"https"===m.conf.protocol&&("chrome"===m.conf.browserName.toLowerCase()||"opera"===m.conf.browserName.toLowerCase()||"safari"===m.conf.browserName.toLowerCase())}function A(){p.webrtc=_.pick(m.conf,u),t.localStorage.setItem("motion2.user:"+m.conf.id,JSON.stringify(p))}function E(e){this.remotePlayer.srcObject=e.stream,this.remotePlayer.play()}function y(e){var t,n,a=e.session;switch(m.isJabraEnabled&&jabra.ring(),e.originator){case"local":a.outgoing=!0,a.name=e.request.ruri.user,a.user=e.request.ruri.user,f(a.user,!1);break;case"remote":a.incoming=!0,a.name=e.request.from.display_name,a.user=e.request.from.uri.user,t=e.session,n=t.name?t.name+" <"+t.user+">":t.user,c.create("Incoming call from: ",n,null,function(){t.answer(m.sessionConf)},function(){t.terminate()}).then(function(e){t.notification=e}).catch(function(e){console.error(e)}),f(e.session.user,!0),m.conf.autoAnswer&&s(function(){a.isInProgress()&&(a.autoAnswer=!0,m.conf.microphoneId?m.sessionConf.mediaConstraints.audio={deviceId:m.conf.microphoneId}:m.sessionConf.mediaConstraints.audio=!0,a.answer(m.sessionConf))},m.conf.autoAnswerDelay?1e3*m.conf.autoAnswerDelay:0)}a.call_id=e.request.call_id,a.connection&&(a.connection.onaddstream=E.bind(this)),a.on("progress",function(e,t){var n=!1;switch(t.originator){case"local":this.conf.ringingMute||(this.soundPlayer.setAttribute("src","assets/ms-phonebar/sounds/incoming-call.ogg"),n=!0);break;case"remote":this.putOtherCallsOnHold(e),this.soundPlayer.setAttribute("src","assets/ms-phonebar/sounds/outgoing-call.ogg"),n=!0}n&&(this.soundPlayer.loop="loop",this.soundPlayer.play().catch(function(e){console.log(e.message)}))}.bind(this,a)),a.on("confirmed",function(n,e){return n.confirmed=!0,"remote"===e.originator&&n.connection&&(n.connection.onaddstream=E.bind(this),_.head(n.connection.getRemoteStreams())&&(this.remotePlayer.srcObject=_.head(n.connection.getRemoteStreams()),this.remotePlayer.play())),this.soundPlayer.pause(),this.soundPlayer.loop=null,this.putOtherCallsOnHold(n),h("speaker"),h("microphone"),n.autoAnswer&&(this.soundPlayer.setAttribute("src","assets/ms-phonebar/sounds/beep.ogg"),this.soundPlayer.play().catch(function(e){console.log(e.message)})),2==m.sessions.length?m.canGoInConference=!0:m.canGoInConference=!1,m.isJabraEnabled&&(jabra.offHook(),m.jabraSession=n),d.rpc.getVoiceChannels().$promise.then(function(e){var t=_.find(e.rows,function(e){return e.sipcalllinkedid===n.call_id?e:e.sipcalluniqueid===n.call_id?e:null});t&&(n.monitor=t.monitor,n.uniqueid=t.uniqueid,n.monitors=t.monitors)}).catch(function(e){console.error(e)})}.bind(this,a)),a.on("hold",function(e,t){"local"===t.originator&&(e.localHold=!0)}.bind(this,a)),a.on("unhold",function(e,t){"local"===t.originator&&(e.localHold=!1)}.bind(this,a)),a.on("ended",function(e,t){m.isInConference?_.includes(m.currentConferenceSessions,e.id)&&(O(),m.buttonClicked=!0,m.isJabraEnabled&&!m.jabraClicked?v(e.id,!1).then(function(e){m.jabraSession=e,jabra.offHook()}):jabra.offHook(),m.jabraClicked=!1):m.isJabraEnabled&&(m.jabraSession=null,jabra.onHook()),_.remove(this.sessions,{id:e.id}),2!==m.sessions.length&&(m.canGoInConference=!1)}.bind(this,a)),a.on("failed",function(e,t){this.soundPlayer.pause(),this.soundPlayer.loop=null,e.notification&&e.notification.close(),m.isInConference&&_.includes(m.currentConferenceSessions,e.id)&&O(),_.remove(this.sessions,{id:e.id}),2!==m.sessions.length&&(m.canGoInConference=!1),m.isJabraEnabled&&jabra.onHook()}.bind(this,a)),this.sessions.push(a),i.$$phase||i.$root.$$phase||i.$apply()}function S(){m.target="",document.getElementById("ms-target").blur(),document.getElementById("ms-target").value="",i.$broadcast("angucomplete-alt:clearInput","ms-target-wrap")}function T(e,t,n,a){return function(){o.show(o.simple().textContent(t).position(n).hideDelay(a)),e.terminate()}}function I(t){return d.user.getVoicePrefixes({id:m.conf.id}).$promise.then(function(e){if(e.count)return a.show({controller:"PrefixDialogController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/prefix/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{prefixes:e,required:m.conf.phoneBarPrefixRequired}})}).then(function(e){if(m.conf.phoneBarPrefixRequired){if(e&&-1!==e)return e+t}else{if(e&&-1!==e)return e+t;if(!e)return t}})}function C(){new AudioContext;if(m.isInConference){var e=m.sessions[0].connection.getReceivers()[0],t=m.sessions[1].connection.getReceivers()[0],n=new MediaStream;n.addTrack(e.track),n.addTrack(t.track);var a=document.getElementById("remote-audio");a.srcObject=n;var i=a.play();void 0!==i&&i.then(function(){}).catch(function(e){console.log(e)})}}function O(){m.canGoInConference=!1,m.isInConference=!1,m.currentconferenceSessions=[]}e(function(){},999),m.direction="right",m.selectedMode="md-scale",m.target="",m.showDialpad=!1,m.soundPlayer=document.createElement("audio"),m.remotePlayer=document.getElementById(m.conf.remotePlayerId),m.soundPlayer.volume=1,m.sessionConf={mediaConstraints:{audio:!0,video:!1}},m.sessions=[],m.calls=[],m.canGoInConference=!1,m.isInConference=!1,m.currentConferenceSessions=[],m.ua=new JsSIP.UA({sockets:[new JsSIP.WebSocketInterface("wss://"+m.conf.host+":8089/ws")],uri:new JsSIP.URI("sip",m.conf.name,m.conf.host,5060,null,null).toString(),authorization_user:m.conf.name,ha1:m.conf.ha1,realm:m.conf.realm,user_agent:m.conf.ua,session_timers_refresh_method:"invite",register_expires:m.conf.phoneBarExpires||60,register:!0}),m.conf=_.merge(p.webrtc,m.conf),m.isJabraEnabled=!1,m.jabraSession=null,m.jabraClicked=!1,m.buttonClicked=!1,n.bind("keyup",function(e){switch(e.keyCode){case 27:s(function(){m.showDialpad=!1})}}),m.$onInit=function(){h("ringing"),h("speaker"),jabra.init().then(function(){return jabra.getInstallInfo()}).then(function(e){e.installationOk?g():m.isJabraEnabled=!1}),this.ua.on("registered",function(){this.registered=!0}.bind(this)),this.ua.on("unregistered",function(){this.registered=!1}.bind(this)),this.ua.on("newRTCSession",y.bind(this)),DetectRTC.load(function(){this.conf.hasMicrophone=DetectRTC.hasMicrophone,this.conf.hasSpeakers="Chrome"!==DetectRTC.browser.name&&"Edge"!==DetectRTC.browser.name&&"Opera"!==DetectRTC.browser.name||DetectRTC.hasSpeakers,this.conf.isWebRTCSupported=DetectRTC.isWebRTCSupported,this.conf.osName=DetectRTC.osName,this.conf.osVersion=DetectRTC.osVersion,this.conf.browserName=DetectRTC.browser.name,this.conf.browserVersion=DetectRTC.browser.version,b()?this.ua.start():this.conf.license||l.warning({title:r.instant("TOOLBAR.WARNING"),msg:r.instant("TOOLBAR.WEBRTC_LICENSE_NOT_ENABELD"),clickToClose:!0,showClose:!0,shake:!1,timeout:!1,position:"bottom-right"})}.bind(this))}.bind(this),m.type=function(e,t){var n=e;switch(m.target||(m.target=""),t&&(m.target+=e,i.$broadcast("angucomplete-alt:changeInput","ms-target-wrap",m.target)),e){case"*":n="asterisk";break;case"#":n="pound"}m.conf.enableDtmfTone&&(m.soundPlayer.setAttribute("src","assets/ms-phonebar/sounds/dialpad/"+n+".ogg"),m.soundPlayer.play().catch(function(e){console.log(e.message)}));for(var a=0;a<m.sessions.length;a+=1)m.sessions[a].isEstablished()&&!m.sessions[a].isOnHold().local&&m.sessions[a].sendDTMF(e)},m.call=function(){if(m.target&&m.target!==m.conf.name&&m.target!==m.conf.internal){m.conf.microphoneId?m.sessionConf.mediaConstraints.audio={deviceId:m.conf.microphoneId}:m.sessionConf.mediaConstraints.audio=!0;var e=m.target.replace(/ /g,"");return I(e=(e=e.replace(/\(/g,"")).replace(/\)/g,"")).then(function(e){e&&m.ua.call(e,m.sessionConf)}).then(function(){S()})}},m.hold=function(e){e.hold({useUpdate:!1}),m.isJabraEnabled&&(jabra.hold(),jabra.onHook())},m.refer=function(t){var e=a.prompt().title("Transfer").textContent("Type the target").placeholder("Target").ariaLabel("Target").ok("Transfer").cancel("Cancel");a.show(e).then(function(e){return I(e)}).then(function(e){t.refer(e,{eventHandlers:{requestSucceeded:T(t,"requestSucceeded","top right",3e3),requestFailed:T(t,"requestFailed","top right",3e3)}})})},m.record=function(e){a.show({controller:"RecordDialogController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/record/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{session:e,sessions:m.sessions}})},m.unhold=function(e){e.unhold({useUpdate:!1}),m.putOtherCallsOnHold(e),m.isJabraEnabled&&(jabra.resume(),jabra.offHook())},m.answer=function(e){m.conf.microphoneId?m.sessionConf.mediaConstraints.audio={deviceId:m.conf.microphoneId}:m.sessionConf.mediaConstraints.audio=!0,e.answer(m.sessionConf),m.isJabraEnabled&&(jabra.offHook(),m.jabraSession=e)},m.terminate=function(e){e.terminate(),m.isJabraEnabled&&0===m.sessions.length&&jabra.onHook()},m.selectSession=function(e){e.unhold({useUpdate:!1}),m.putOtherCallsOnHold(e)},m.typeWrapper=function(e){switch(e.key.toLowerCase()){case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"*":case"#":m.type(e.key);break;case"enter":m.call()}},m.toggleDialpad=function(){m.showDialpad=!m.showDialpad},m.referAttended=function(e){a.show({controller:"ReferAttendedDialogController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/referAttended/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{session:e,sessions:_.reject(m.sessions,{id:e.id})}})},m.closeDialpad=function(){m.showDialpad=!1},m.initDevice=h,m.putOtherCallsOnHold=function(e){if(1<m.sessions.length)for(var t=0;t<m.sessions.length;t+=1)m.sessions[t].id===e.id||m.sessions[t].isOnHold().remote||m.sessions[t].hold({useUpdate:!1})},m.targetChanged=function(e){e?/^(\w|\.|\+|#|\*|\(|\)|\s|\-)*$/.test(e)?(m.target=e,i.$broadcast("angucomplete-alt:changeInput","ms-target-wrap",m.target)):m.target?i.$broadcast("angucomplete-alt:changeInput","ms-target-wrap",m.target):S():S()},m.targetSelected=function(e){e&&(m.target=e.originalObject.target,m.call(),S())},m.start3WayConf=function(){m.isInConference=!0,m.canGoInConference=!1,m.currentConferenceSessions.push(m.sessions[0].id),m.currentConferenceSessions.push(m.sessions[1].id);var e=new AudioContext,t=m.sessions[0].connection.getSenders()[0],n=m.sessions[0].connection.getReceivers()[0];n.track.addEventListener("unmute",function(e){setTimeout(function(){C()},1e3)},!1);var a=m.sessions[1].connection.getSenders()[0],i=m.sessions[1].connection.getReceivers()[0];i.track.addEventListener("unmute",function(e){setTimeout(function(){C()},1e3)},!1),m.sessions[0].unhold({useUpdate:!1}),m.sessions[1].unhold({useUpdate:!1}),n.track.enabled=!0,i.track.enabled=!0;var s=new MediaStream,o=e.createMediaStreamDestination();o=(e=new AudioContext).createMediaStreamDestination(),e.createMediaStreamSource(new MediaStream([i.track])).connect(o),e.createMediaStreamSource(new MediaStream([t.track])).connect(o),t.replaceTrack(o.stream.getTracks()[0]).then(function(){}),o=e.createMediaStreamDestination(),e.createMediaStreamSource(new MediaStream([n.track])).connect(o),e.createMediaStreamSource(new MediaStream([a.track])).connect(o),a.replaceTrack(o.stream.getTracks()[0]).then(function(){s.addTrack(n.track),s.addTrack(i.track);var e=document.getElementById("remote-audio");e.srcObject=s;var t=e.play();void 0!==t&&t.then(function(){}).catch(function(e){console.log(e)})})},m.patchConference=C,i.$on("webrtc::settings",function(e){a.show({controller:"SettingsController",controllerAs:"vm",templateUrl:"assets/ms-phonebar/settings/settings.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,resolve:{devices:function(){return navigator.mediaDevices.enumerateDevices()}},locals:{conf:m.conf}}).then(function(e){e&&(m.conf=e,h("ringing"),h("speaker"),g())})}),i.$on("webrtc::logout",function(){m.ua.stop()}),i.$on("webrtc::call",function(e,t){t.target&&(m.target=t.target,m.call())}),i.$on("webrtc::transfer",function(e,t){if(t.target)for(var n=0;n<m.sessions.length;n+=1)if(m.sessions[n].isEstablished()&&!m.sessions[n].isOnHold().local)return I(t.target).then(function(e){e&&m.sessions[n].refer(e,{eventHandlers:{requestSucceeded:T(m.sessions[n],"requestSucceeded","top right",3e3),requestFailed:T(m.sessions[n],"requestFailed","top right",3e3)}})})})}e.$inject=["$scope","$document","$timeout","$interval","$mdDialog","$mdToast","$window","$translate","toasty","api","motNotification"],angular.module("app.core").controller("MsPhonebarController",e).directive("msPhonebar",function(){return{restrict:"E",scope:{conf:"="},require:"msPhonebar",controller:"MsPhonebarController",controllerAs:"vm_pb",bindToController:!0,templateUrl:"assets/ms-phonebar/ms-phonebar.html"}})}(),function(){"use strict";function e(t,e,n){var a=this;a.prefixes=e,a.required=n,a.closeDialog=function(e){t.hide(e)},a.call=function(){t.hide(a.prefix)}}e.$inject=["$mdDialog","prefixes","required"],angular.module("app.core").controller("PrefixDialogController",e)}(),function(){"use strict";function e(i){return{restrict:"C",controller:["$scope","$element",function(e,t){function n(){t.css("display","inline"),i(a,1e3)}function a(){t.css("display","none"),i(n,1e3)}n()}],replace:!0}}function t(t,i,s,e,n){var o=this;function a(t,e){console.log("startMonitor");var n=i.defer(),a=(e||t.filename.replace(/^.*[\\\/]/,"")).split(".")[0];return s.rpc.startMonitor({uniqueid:o.session.uniqueid,filename:a,format:"wav"}).$promise.then(function(e){t.filename=a+".wav",t.mixmonitorid=e.mixmonitorid,t.status="rec",o.session.monitor=!0,n.resolve(t)}).catch(function(e){n.reject(e)}),n.promise}o.title="Record",o.sessions=e,o.session=n,o.closeDialog=function(){t.hide()},o.addRecording=function(){var e=t.prompt({skipHide:!0}).title("Start new recording").textContent("Type the file name.").placeholder("File name").ariaLabel("File name").initialValue(function(){function e(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()}()).ok("Start").cancel("Cancel");t.show(e).then(function(e){return a({},e)}).then(function(e){o.session.monitors.push(e)})},o.stop=function(t){return console.log("stopMonitor"),s.rpc.stopMonitor({uniqueid:o.session.uniqueid,mixmonitorid:t.mixmonitorid}).$promise.then(function(e){t.status="pause",o.session.monitor=_.includes(o.session.monitors,{status:"rec"})}).catch(function(e){console.error(e)})},o.start=a}e.$inject=["$timeout"],t.$inject=["$mdDialog","$q","api","sessions","session"],angular.module("app.core").directive("msBlink",e).controller("RecordDialogController",t)}(),function(){"use strict";function e(t,a,i,e){var s=this;function o(e){t.hide(e)}s.title="Refer Attended",s.sessions=i,s.session=e,s.sessionTarget=null,i.length&&(s.target=i[0].user),s.closeDialog=o,s.transfer=function(){var e,t,n=_.find(i,function(e){if(e.user===s.target)return e});t=n.outgoing?(e=n,s.session):(e=s.session,n);t.refer(e.user,{replaces:e,eventHandlers:{requestSucceeded:function(e){a.show(a.simple().textContent("requestSucceeded").position("top right").hideDelay(3e3)),o(),t.terminate()},requestFailed:function(e){a.show(a.simple().textContent("requestFailed").position("top right").hideDelay(3e3)),o(),t.terminate()}}})}}e.$inject=["$mdDialog","$mdToast","sessions","session"],angular.module("app.core").controller("ReferAttendedDialogController",e)}(),function(){"use strict";function e(e,s,t){var n=this;function a(e,t,n){var a;if(s[n]){if(a=_.find(e,function(e){return e.deviceId===s[n]}))return a.deviceId;var i=_.findIndex(e,function(e){return e.kind===t});if(0<=i)return e[i].deviceId}else(a=_.find(e,function(e){return e.kind===t}))&&(s[n]=a.deviceId);return s[n]||null}s.ringingId=a(t,"audiooutput","ringingId"),s.speakerId=a(t,"audiooutput","speakerId"),s.microphoneId=a(t,"audioinput","microphoneId"),s.ringingVolume=s.ringingVolume||.5,s.speakerVolume=s.speakerVolume||.5,s.microphoneVolume=s.microphoneVolume||1,s.ringingMute=s.ringingMute||!1,s.speakerMute=s.speakerMute||!1,s.microphoneMute=s.microphoneMute||!1,n.conf=angular.copy(s),n.devices=t,n.saveSettings=function(){e.hide(n.conf)},n.closeDialog=function(){e.hide()},n.isCompatibleBrowser=function(){return"chrome"===n.conf.browserName.toLowerCase()||"opera"===n.conf.browserName.toLowerCase()||"safari"===n.conf.browserName.toLowerCase()}}e.$inject=["$mdDialog","conf","devices"],angular.module("app.toolbar").controller("SettingsController",e)}(),function(){"use strict";angular.module("app.core").directive("msRandomClass",function(){return{restrict:"A",scope:{msRandomClass:"="},link:function(e,t){var n=e.msRandomClass[Math.floor(Math.random()*e.msRandomClass.length)];t.addClass(n)}}})}(),function(){"use strict";function e(i){return{restrict:"E",scope:{id:"=",model:"=",download:"="},replace:!0,link:function(t,e){var n=!1,a=document.createElement("audio");t.download||a.setAttribute("controlsList","nodownload"),a.setAttribute("preload","none"),a.setAttribute("controls",""),a.setAttribute("style","width: 265px;"),a.setAttribute("src"," "),a.onplay=function(e){n||(n=!0,e.preventDefault(),i[t.model||"voiceRecording"].download({id:t.id}).$promise.then(function(e){var t=[e.buffer],n=new Blob(t,{type:e.type});a.setAttribute("type",e.type),a.setAttribute("src",URL.createObjectURL(n)),a.play()}).catch(function(e){console.error(e)}))},e.append(a)}}}e.$inject=["api"],angular.module("app.core").directive("msRecording",e)}(),function(){"use strict";angular.module("app.core").directive("msResponsiveTable",function(){return{restrict:"A",link:function(e,t){var n=angular.element('<div class="ms-responsive-table-wrapper"></div>');t.after(n),n.append(t)}}})}(),function(){"use strict";function e(s,o,t,n){return{restrict:"AE",compile:function(e){if(!(n.getConfig("disableCustomScrollbars")||n.getConfig("disableCustomScrollbarsOnMobile")&&t.isMobile()))return e.addClass("ms-scroll"),function(e,t,n){var a={};function i(){PerfectScrollbar.update(t[0])}n.msScroll&&(a=e.$eval(n.msScroll)),a=angular.extend({},o.getConfig(),a),s(function(){PerfectScrollbar.initialize(t[0],a)},0),t.on("mouseenter",i),e.$watch(function(){return t.prop("scrollHeight")},function(e,t){angular.isUndefined(e)||angular.equals(e,t)||i()}),e.$watch(function(){return t.prop("scrollWidth")},function(e,t){angular.isUndefined(e)||angular.equals(e,t)||i()}),e.$on("$destroy",function(){t.off("mouseenter"),PerfectScrollbar.destroy(t[0])})}}}}e.$inject=["$timeout","msScrollConfig","msUtils","motionConfig"],angular.module("app.core").provider("msScrollConfig",function(){var t={wheelSpeed:1,wheelPropagation:!1,swipePropagation:!0,minScrollbarLength:null,maxScrollbarLength:null,useBothWheelAxes:!1,useKeyboard:!0,suppressScrollX:!1,suppressScrollY:!1,scrollXMarginOffset:0,scrollYMarginOffset:0,stopPropagationOnClick:!0};this.config=function(e){t=angular.extend({},t,e)},this.$get=function(){var e={getConfig:function(){return t}};return e}}).directive("msScroll",e)}(),function(){"use strict";function e(s,i,e){var o=this;o.collapsed=!0,o.query=void 0,o.queryOptions={debounce:o.debounce||0};var t=!(!o.collapseOnBlur||"true"!=o.collapseOnBlur);o.resultsLoading=!1,o.results=null,o.selectedResultIndex=0,o.ignoreMouseEvents=!1,o.onInit=function(){s.$watch("MsSearchBar.query",function(e,t){if(!angular.isUndefined(e)&&!angular.equals(e,t)){if(o.collapsed){if(!e)return;s.expand()}var n=s.$parent.$eval(o.onSearch,{query:e}),a=angular.isArray(n),i=n&&!!n.then;a&&o.populateResults(n),i&&(o.resultsLoading=!0,n.then(function(e){o.populateResults(e)},function(){o.populateResults([])}).finally(function(){o.resultsLoading=!1}))}})},o.populateResults=function(e){if(o.collapsed)return;var t=angular.isArray(e),n=null===e;if(!t&&!n)return;o.selectedResultIndex=0,o.results=e},o.expand=function(){o.collapsed=!1,s.expand(),o.onExpand&&angular.isFunction(o.onExpand)&&o.onExpand()},o.collapse=function(){o.query="",o.populateResults(null),o.collapsed=!0,s.collapse(),o.onCollapse&&angular.isFunction(o.onCollapse)&&o.onCollapse()},o.blurCollapse=function(){if(!t)return;o.collapse()},o.absorbEvent=function(e){e.preventDefault()},o.handleKeydown=function(e){var t=e.keyCode;-1<[27,38,40].indexOf(t)&&e.preventDefault();switch(t){case 13:if(!o.results)return;o.handleResultClick(o.results[o.selectedResultIndex]);break;case 27:o.collapse();break;case 38:0<=o.selectedResultIndex-1&&(o.selectedResultIndex--,o.ensureSelectedResultIsVisible());break;case 40:if(!o.results)return;o.selectedResultIndex+1<o.results.length&&(o.selectedResultIndex++,o.ensureSelectedResultIsVisible())}},o.handleMouseenter=function(e){if(o.ignoreMouseEvents)return;o.selectedResultIndex=e},o.temporarilyIgnoreMouseEvents=function(){o.ignoreMouseEvents=!0,e.cancel(o.mouseEventIgnoreTimeout),o.mouseEventIgnoreTimeout=e(function(){o.ignoreMouseEvents=!1},250)},o.handleResultClick=function(e){o.onResultClick&&o.onResultClick({item:e});o.collapse()},o.ensureSelectedResultIsVisible=function(){var e=i.find(".ms-search-bar-results"),t=angular.element(e.find(".result")[o.selectedResultIndex]);if(e&&t){var n=t.position().top-8,a=t.position().top+t.outerHeight()+8;o.temporarilyIgnoreMouseEvents(),e.scrollTop()>n&&e.scrollTop(n),a>e.height()+e.scrollTop()&&e.scrollTop(a-e.height())}}}function t(i){return{restrict:"E",scope:{},require:"msSearchBar",controller:"MsSearchBarController as MsSearchBar",bindToController:{query:"=?",debounce:"=?",direction:"@",onSearch:"@",onResultClick:"&?",onExpand:"&?",onCollapse:"&?",collapseOnBlur:"@"},templateUrl:"app/core/directives/ms-search-bar/ms-search-bar.html",compile:function(e){return e.addClass("ms-search-bar"),function(e,t){var n,a=i.find("body");e.collapse=function(){t.removeClass("expanded"),a.removeClass("ms-search-bar-expanded")},e.expand=function(){t.addClass("expanded"),"down"===e.MsSearchBar.direction&&t.addClass("down");a.addClass("ms-search-bar-expanded"),n.focus()},n=t.find("#ms-search-bar-input")}}}}e.$inject=["$scope","$element","$timeout"],t.$inject=["$document"],angular.module("app.core").controller("MsSearchBarController",e).directive("msSearchBar",t)}(),function(){"use strict";function e(e,n,i,o,r,l){var d=this;d.query="",d.queryOptions={debounce:300},d.resultsLoading=!1,d.selectedResultIndex=0,d.ignoreMouseEvents=!1,d.mobileBarActive=!1,d.results=null,d.shortcuts=[],d.sortableOptions={ghostClass:"ghost",forceFallback:!0,fallbackClass:"dragging",onSort:function(){d.saveShortcuts()}},d.populateResults=function(){for(var e=[],t=l.getFlatNavigation(),n=r.defer(),a=0;a<t.length;a++)t[a].uisref&&e.push(t[a]);if(d.query){e=e.filter(function(e){if(-1<angular.lowercase(e.title).search(angular.lowercase(d.query)))return!0});for(var i=0;i<e.length;i++){e[i].hasShortcut=!1;for(var s=0;s<d.shortcuts.length;s++)if(d.shortcuts[s]._id===e[i]._id){e[i].hasShortcut=!0;break}}}else 0<d.shortcuts.length&&(e=d.shortcuts);return d.selectedResultIndex=0,o(function(){n.resolve(e)},250),n.promise},d.loadShortcuts=function(){var e=r.defer(),t=angular.fromJson(n.get("motion.shortcuts"));angular.isUndefined(t)&&(t=[{title:"Agents",icon:"icon-account-multiple",state:"app.staff.agents",weight:5,children:[],uisref:"app.staff.agents",hasShortcut:!0},{title:"License",icon:"icon-cog",state:"app.settings.license",weight:10,children:[],uisref:"app.settings.license",hasShortcut:!0}],n.put("motion.shortcuts",angular.toJson(t)));return e.resolve(t),e.promise},d.saveShortcuts=function(){var e=r.defer();return n.put("motion.shortcuts",angular.toJson(d.shortcuts)),o(function(){e.resolve({success:!0})},250),e.promise},d.addShortcut=function(e){e.hasShortcut=!0,d.shortcuts.push(e),d.saveShortcuts()},d.removeShortcut=function(e){e.hasShortcut=!1;for(var t=0;t<d.shortcuts.length;t++)d.shortcuts[t]._id===e._id&&(d.shortcuts.splice(t,1),d.query||(0===d.shortcuts.length?d.results=null:t>=d.shortcuts.length&&(d.selectedResultIndex=d.shortcuts.length-1)));d.saveShortcuts()},d.handleResultClick=function(e){e.hasShortcut?d.removeShortcut(e):d.addShortcut(e)},d.absorbEvent=function(e){e.preventDefault()},d.handleKeydown=function(e){var t=e.keyCode;-1<[38,40].indexOf(t)&&e.preventDefault();switch(t){case 13:d.handleResultClick(d.results[d.selectedResultIndex]);break;case 38:0<=d.selectedResultIndex-1&&(d.selectedResultIndex--,d.ensureSelectedResultIsVisible());break;case 40:d.selectedResultIndex+1<d.results.length&&(d.selectedResultIndex++,d.ensureSelectedResultIsVisible())}},d.handleMouseenter=function(e){if(d.ignoreMouseEvents)return;d.selectedResultIndex=e},d.temporarilyIgnoreMouseEvents=function(){d.ignoreMouseEvents=!0,o.cancel(d.mouseEventIgnoreTimeout),d.mouseEventIgnoreTimeout=o(function(){d.ignoreMouseEvents=!1},250)},d.ensureSelectedResultIsVisible=function(){var e=i.find("#ms-shortcut-add-menu").find(".results"),t=angular.element(e.find(".result")[d.selectedResultIndex]);if(e&&t){var n=t.position().top-8,a=t.position().top+t.outerHeight()+8;d.temporarilyIgnoreMouseEvents(),e.scrollTop()>n&&e.scrollTop(n),a>e.height()+e.scrollTop()&&e.scrollTop(a-e.height())}},d.toggleMobileBar=function(){d.mobileBarActive=!d.mobileBarActive},d.loadShortcuts().then(function(e){d.shortcuts=e,0<d.shortcuts.length&&(d.results=e)}),e.$watch("MsShortcuts.query",function(e,t){angular.isUndefined(e)||angular.equals(e,t)||(d.resultsLoading=!0,d.populateResults().then(function(e){d.results=e},function(){d.results=[]}).finally(function(){d.resultsLoading=!1}))})}e.$inject=["$scope","$cookies","$document","$timeout","$q","msNavigationService"],angular.module("app.core").controller("MsShortcutsController",e).directive("msShortcuts",function(){return{restrict:"E",scope:{},require:"msShortcuts",controller:"MsShortcutsController as MsShortcuts",bindToController:{},templateUrl:"app/core/directives/ms-shortcuts/ms-shortcuts.html",compile:function(e){return e.addClass("ms-shortcuts"),function(e,t){}}}})}(),function(){"use strict";angular.module("app.core").directive("msSidenavHelper",function(){return{restrict:"A",require:"^mdSidenav",link:function(e,t,n,a){e.$watch(function(){return a.isOpen()&&!a.isLockedOpen()},function(e){angular.isUndefined(e)||(t.parent().toggleClass("full-height",e),angular.element("html").toggleClass("sidenav-open",e))})}}})}(),function(){"use strict";function e(a){return{restrict:"E",link:function(e,t){var n=e.$on("msSplashScreen::remove",function(){a.leave(t).then(function(){n(),e=t=null})})}}}e.$inject=["$animate"],angular.module("app.core").directive("msSplashScreen",e)}(),function(){"use strict";function e(e){var i=this;function t(){i.setCurrentStep(1)}function n(e){return o(e)?i.steps[e-1].scope.optionalStep:null}function a(e){return o(e)?!!i.steps[e-1].scope.hideStep:null}function s(e){return o(e)?!!n(e)||i.steps[e-1].form.$valid:null}function o(e){return!(angular.isUndefined(e)||e<1||e>i.steps.length)}i.mainForm=void 0,i.orientation="horizontal",i.steps=[],i.currentStep=void 0,i.currentStepNumber=1,i.setOrientation=function(e){i.orientation=e||"horizontal"},i.registerMainForm=function(e){i.mainForm=e},i.registerStep=function(e,t,n){var a={element:e,scope:t,form:n,stepNumber:t.step||i.steps.length+1,stepTitle:t.stepTitle,stepTitleTranslate:t.stepTitleTranslate};return i.steps.push(a),i.steps.sort(function(e,t){return e.stepNumber-t.stepNumber}),a},i.setupSteps=function(){i.setCurrentStep(i.currentStepNumber)},i.resetForm=function(){e(function(){for(var e=0;e<i.steps.length;e++)i.steps[e].form.$setPristine(),i.steps[e].form.$setUntouched();i.mainForm.$setPristine(),i.mainForm.$setUntouched(),t()})},i.setCurrentStep=function(e){if(!o(e))return;if(i.currentStepNumber=e,"horizontal"===i.orientation){for(var t=0;t<i.steps.length;t++)i.steps[t].element.hide();i.steps[i.currentStepNumber-1].element.show()}else if("vertical"===i.orientation){for(var n=0;n<i.steps.length;n++)i.steps[n].element.find(".ms-stepper-step-content").hide();i.steps[i.currentStepNumber-1].element.find(".ms-stepper-step-content").show()}},i.gotoStep=function(e){if(a(e))return;i.setCurrentStep(e)},i.gotoPreviousStep=function(){for(var e=i.currentStepNumber-1,t=e;1<=t;t--)if(!a(t)){e=t;break}i.setCurrentStep(e)},i.gotoNextStep=function(){for(var e=i.currentStepNumber+1,t=e;t<=i.steps.length;t++)if(!a(t)){e=t;break}i.setCurrentStep(e)},i.gotoFirstStep=t,i.gotoLastStep=function(){i.setCurrentStep(i.steps.length)},i.isFirstStep=function(){return 1===i.currentStepNumber},i.isLastStep=function(){return i.currentStepNumber===i.steps.length},i.isStepCurrent=function(e){return o(e)?i.currentStepNumber===e:null},i.isStepDisabled=function(e){if(!o(e))return null;for(var t=!1,n=1;n<e;n++)if(!s(n)){t=!0;break}return t},i.isStepOptional=n,i.isStepHidden=a,i.filterHiddenStep=function(e){return!a(e.stepNumber)},i.isStepValid=s,i.isStepNumberValid=o,i.isFormValid=function(){return i.mainForm.$valid}}function t(o){return{restrict:"A",scope:{},require:["form","msVerticalStepper"],priority:1001,controller:"MsStepperController as MsStepper",bindToController:{model:"=ngModel"},transclude:!0,templateUrl:"app/core/directives/ms-stepper/templates/vertical/vertical.html",compile:function(e){return e.addClass("ms-stepper"),function(e,t,n,a){var i=a[0],s=a[1];o(function(){s.setOrientation("vertical"),s.registerMainForm(i),s.setupSteps()})}}}}e.$inject=["$timeout"],t.$inject=["$timeout"],angular.module("app.core").controller("MsStepperController",e).directive("msHorizontalStepper",function(){return{restrict:"A",scope:{},require:["form","msHorizontalStepper"],priority:1001,controller:"MsStepperController as MsStepper",bindToController:{model:"=ngModel"},transclude:!0,templateUrl:"app/core/directives/ms-stepper/templates/horizontal/horizontal.html",compile:function(e){return e.addClass("ms-stepper"),function(e,t,n,a){var i=a[0],s=a[1];s.setOrientation("horizontal"),s.registerMainForm(i),s.setupSteps()}}}}).directive("msHorizontalStepperStep",function(){return{restrict:"E",require:["form","^msHorizontalStepper"],priority:1e3,scope:{step:"=?",stepTitle:"=?",stepTitleTranslate:"=?",optionalStep:"=?",hideStep:"=?"},compile:function(e){return e.addClass("ms-stepper-step"),function(e,t,n,a){var i=a[0],s=a[1];e.optionalStep=angular.isDefined(n.optionalStep),s.registerStep(t,e,i),t.hide()}}}}).directive("msVerticalStepper",t).directive("msVerticalStepperStep",function(){return{restrict:"E",require:["form","^msVerticalStepper"],priority:1e3,scope:{step:"=?",stepTitle:"=?",stepTitleTranslate:"=?",optionalStep:"=?",hideStep:"=?"},transclude:!0,templateUrl:"app/core/directives/ms-stepper/templates/vertical/step/vertical-step.html",compile:function(e){return e.addClass("ms-stepper-step"),function(e,t,n,a){var i=a[0],s=a[1];e.optionalStep=angular.isDefined(n.optionalStep),e.stepInfo=s.registerStep(t,e,i),e.MsStepper=s,t.find(".ms-stepper-step-content").hide()}}}})}(),function(){"use strict";function e(e){return{restrict:"E",scope:{},transclude:!0,controller:"MsTabScrollController",controllerAs:"vm",bindToController:!0,templateUrl:"app/core/directives/ms-tab-scroll/ms-tab-scroll.html",compile:function(e){return e.addClass("ms-tab-scroll"),function(e,t){}}}}e.$inject=["$document"],angular.module("app.core").controller("MsTabScrollController",function(){function t(){var e=document.getElementById("bar-container"),t=document.getElementById("tab-container");return t.scrollWidth>e.scrollWidth&&0==e.scrollLeft&&0==t.scrollLeft?"right":t.scrollWidth>e.scrollWidth&&t.scrollLeft>e.scrollLeft&&e.scrollWidth+t.scrollLeft>=t.scrollWidth?"left":t.scrollWidth>e.scrollWidth&&t.scrollLeft>e.scrollLeft&&e.scrollWidth+t.scrollLeft<t.scrollWidth?"both":"none"}this.onTabScroll=function(e){"left"==e?$("#tab-container").stop().animate({scrollLeft:"-=400"},1e3):$("#tab-container").stop().animate({scrollLeft:"+=400"},1e3)},this.canScroll=function(e){switch(t()){case"both":return!0;case"left":return"left"==e;case"right":return"right"==e;case"none":default:return!1}}}).directive("msTabScroll",e)}(),function(){"use strict";function e(m,u){return{scope:!0,require:"^msTimeline",compile:function(e){return e.addClass("ms-timeline-item").addClass("hidden"),function(e,n,t,a){var i=72,s=!1,o=!1,r=a.getScrollEl();!function(){n.find("ms-card")?e.$on("msCard::cardTemplateLoaded",function(e,t){var n=angular.element(t[0]);d(n).then(function(){m(function(){s=!0})})}):d(n).then(function(){m(function(){s=!0})});r.on("scroll",c),c()}();var l=e.$watch(function(){return s&&o},function(e,t){angular.equals(e,t)||e&&(n.removeClass("hidden").addClass("animate"),l())},!0);function d(e){var t=u.defer(),n=e.find("img");return 0<n.length?n.on("load",function(){t.resolve("Image is loaded")}):t.resolve("No images"),t.promise}function c(){r.scrollTop()+r.height()>n.position().top+i&&(m(function(){o=!0}),r.off("scroll",c))}}}}}e.$inject=["$timeout","$q"],angular.module("app.core").controller("MsTimelineController",function(){var t=this;t.scrollEl=void 0,t.setScrollEl=function(e){t.scrollEl=e},t.getScrollEl=function(){return t.scrollEl}}).directive("msTimeline",function(){return{scope:{msTimeline:"=?",loadMore:"&?msTimelineLoadMore"},controller:"MsTimelineController",compile:function(e){return e.addClass("ms-timeline"),function(e,t,n,a){var i=angular.element('<div class="ms-timeline-loader md-accent-bg md-whiteframe-4dp"><span class="spinner animate-rotate"></span></div>');t.append(i);var s={scrollEl:"#content"};s=angular.extend(s,e.msTimeline,{});var o=angular.element(s.scrollEl);a.setScrollEl(o);var r=144;function l(){o.scrollTop()+o.height()+r>i.position().top&&(i.addClass("show"),c(),e.loadMore().then(function(){i.removeClass("show"),d()},function(){i.remove()}))}function d(){o.on("scroll",l)}function c(){o.off("scroll",l)}d(),e.$on("$destroy",function(){c()})}}}}).directive("msTimelineItem",e)}(),function(){"use strict";function e(a,e,t,n,i,s,o,r,l){function d(){a.timeoutId&&clearTimeout(a.timeoutId)}function c(){void 0!==o.startTime&&(a.millis=moment().diff(moment(a.startTime))),a.maxTimeUnit&&"day"!==a.maxTimeUnit?"second"===a.maxTimeUnit?(a.seconds=Math.floor(a.millis/1e3),a.minutes=0,a.hours=0,a.days=0,a.months=0,a.years=0):"minute"===a.maxTimeUnit?(a.seconds=Math.floor(a.millis/1e3%60),a.minutes=Math.floor(a.millis/6e4),a.hours=0,a.days=0,a.months=0,a.years=0):"hour"===a.maxTimeUnit?(a.seconds=Math.floor(a.millis/1e3%60),a.minutes=Math.floor(a.millis/6e4%60),a.hours=Math.floor(a.millis/36e5),a.days=0,a.months=0,a.years=0):"month"===a.maxTimeUnit?(a.seconds=Math.floor(a.millis/1e3%60),a.minutes=Math.floor(a.millis/6e4%60),a.hours=Math.floor(a.millis/36e5%24),a.days=Math.floor(a.millis/36e5/24%30),a.months=Math.floor(a.millis/36e5/24/30),a.years=0):"year"===a.maxTimeUnit&&(a.seconds=Math.floor(a.millis/1e3%60),a.minutes=Math.floor(a.millis/6e4%60),a.hours=Math.floor(a.millis/36e5%24),a.days=Math.floor(a.millis/36e5/24%30),a.months=Math.floor(a.millis/36e5/24/30%12),a.years=Math.floor(a.millis/36e5/24/365)):(a.seconds=Math.floor(a.millis/1e3%60),a.minutes=Math.floor(a.millis/6e4%60),a.hours=Math.floor(a.millis/36e5%24),a.days=Math.floor(a.millis/36e5/24),a.months=0,a.years=0),a.secondsS=1===a.seconds||0===a.seconds?"":"s",a.minutesS=1===a.minutes||0===a.minutes?"":"s",a.hoursS=1===a.hours||0===a.hours?"":"s",a.daysS=1===a.days||0===a.days?"":"s",a.monthsS=1===a.months||0===a.months?"":"s",a.yearsS=1===a.years||0===a.years?"":"s",a.sseconds=a.seconds<10?"0"+a.seconds:a.seconds,a.mminutes=a.minutes<10?"0"+a.minutes:a.minutes,a.hhours=a.hours<10?"0"+a.hours:a.hours,a.ddays=a.days<10?"0"+a.days:a.days,a.mmonths=a.months<10?"0"+a.months:a.months,a.yyears=a.years<10?"0"+a.years:a.years}"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),a.autoStart=o.autoStart||o.autostart,0===r.html().trim().length?r.append(l("<span>{{millis}}</span>")(a)):r.append(l(r.contents())(a)),a.interval=a.intervalAttr||1e3,a.startTime=null,a.endTime=null,a.timeoutId=null,a.countdown=a.countdownAttr&&0<=parseInt(a.countdownAttr,10)?parseInt(a.countdownAttr,10):void 0,a.isRunning=!1,a.$watch("startTimeAttr",function(e,t){e!==t&&a.isRunning&&a.start()}),a.$on("timer-start",function(){a.start()}),a.$on("timer-resume",function(){a.resume()}),a.$on("timer-stop",function(){a.stop()}),a.$on("timer-clear",function(){a.clear()}),a.$on("timer-set-countdown",function(e,t){a.countdown=t}),a.start=r[0].start=function(){var e=moment(),t=a.startTimeAttr?moment(a.startTimeAttr):null;a.startTime=!t||e<t?e:t;var n=a.endTimeAttr?moment(a.endTimeAttr):null;a.endTime=!n||n<e?null:n,a.countdown||(a.countdown=a.countdownAttr&&0<parseInt(a.countdownAttr,10)?parseInt(a.countdownattr,10):void 0),d(),m(),a.isRunning=!0},a.resume=r[0].resume=function(){d(),a.countdownAttr&&(a.countdown+=1),a.startTime=moment().diff(moment(a.stoppedTime).diff(moment(a.startTime))),m(),a.isRunning=!0},a.stop=a.pause=r[0].stop=r[0].pause=function(){a.clear(),a.$emit("timer-stopped",{timeoutId:a.timeoutId,millis:a.millis,seconds:a.seconds,minutes:a.minutes,hours:a.hours,days:a.days})},a.clear=r[0].clear=function(){a.stoppedTime=moment(),d(),a.timeoutId=null,a.isRunning=!1},r.bind("$destroy",function(){d(),a.isRunning=!1});var m=function(){a.millis=moment().diff(a.startTime);var e=a.millis%1e3;if(a.endTimeAttr&&(a.millis=moment(a.endTime).diff(moment()),e=a.interval-a.millis%1e3),a.countdownAttr&&(a.millis=1e3*a.countdown),a.millis<0)return a.stop(),a.millis=0,c(),void(a.finishCallback&&a.$eval(a.finishCallback));c(),a.timeoutId=setTimeout(function(){m(),a.$digest()},a.interval-e),a.$emit("timer-tick",{timeoutId:a.timeoutId,millis:a.millis}),0<a.countdown?a.countdown--:a.countdown<=0&&(a.stop(),a.finishCallback&&a.$eval(a.finishCallback))};void 0!==a.autoStart&&!0!==a.autoStart||a.start()}e.$inject=["$scope","$document","$timeout","$interval","$window","$translate","$attrs","$element","$compile"],angular.module("app.core").controller("MsTimerController",e).directive("timer",function(){return{restrict:"EA",replace:!1,scope:{intervalAttr:"=interval",startTimeAttr:"=startTime",endTimeAttr:"=endTime",countdownAttr:"=countdown",autoStart:"&autoStart",maxTimeUnit:"="},controller:"MsTimerController"}})}(),function(){"use strict";angular.module("app.core").directive("msTimezone",function(){return{restrict:"E",scope:{ngModel:"="},controller:["$scope",function(e){e.timezone=[{name:"Europe/Andorra",utcOffset:60,offsetStr:"+01:00",countries:["AD"]},{name:"Asia/Dubai",utcOffset:240,offsetStr:"+04:00",countries:["AE","OM"]},{name:"Asia/Kabul",utcOffset:270,offsetStr:"+04:30",countries:["AF"]},{name:"Europe/Tirane",utcOffset:60,offsetStr:"+01:00",countries:["AL"]},{name:"Asia/Yerevan",utcOffset:240,offsetStr:"+04:00",countries:["AM"]},{name:"Antarctica/Rothera",utcOffset:-180,offsetStr:"-03:00",countries:["AQ"]},{name:"Antarctica/Palmer",utcOffset:-180,offsetStr:"-03:00",countries:["AQ"]},{name:"Antarctica/Mawson",utcOffset:300,offsetStr:"+05:00",countries:["AQ"]},{name:"Antarctica/Davis",utcOffset:420,offsetStr:"+07:00",countries:["AQ"]},{name:"Antarctica/Casey",utcOffset:480,offsetStr:"+08:00",countries:["AQ"]},{name:"Antarctica/Vostok",utcOffset:360,offsetStr:"+06:00",countries:["AQ"]},{name:"Antarctica/DumontDUrville",utcOffset:600,offsetStr:"+10:00",countries:["AQ"]},{name:"Antarctica/Syowa",utcOffset:180,offsetStr:"+03:00",countries:["AQ"]},{name:"Antarctica/Troll",utcOffset:0,offsetStr:"+00:00",countries:["AQ"]},{name:"America/Argentina/Buenos_Aires",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Cordoba",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Salta",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Jujuy",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Tucuman",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Catamarca",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/La_Rioja",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/San_Juan",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Mendoza",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/San_Luis",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Rio_Gallegos",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"America/Argentina/Ushuaia",utcOffset:-180,offsetStr:"-03:00",countries:["AR"]},{name:"Pacific/Pago_Pago",utcOffset:-660,offsetStr:"-11:00",countries:["AS","UM"]},{name:"Europe/Vienna",utcOffset:60,offsetStr:"+01:00",countries:["AT"]},{name:"Australia/Lord_Howe",utcOffset:660,offsetStr:"+11:00",countries:["AU"]},{name:"Antarctica/Macquarie",utcOffset:660,offsetStr:"+11:00",countries:["AU"]},{name:"Australia/Hobart",utcOffset:660,offsetStr:"+11:00",countries:["AU"]},{name:"Australia/Currie",utcOffset:660,offsetStr:"+11:00",countries:["AU"]},{name:"Australia/Melbourne",utcOffset:660,offsetStr:"+11:00",countries:["AU"]},{name:"Australia/Sydney",utcOffset:660,offsetStr:"+11:00",countries:["AU"]},{name:"Australia/Broken_Hill",utcOffset:630,offsetStr:"+10:30",countries:["AU"]},{name:"Australia/Brisbane",utcOffset:600,offsetStr:"+10:00",countries:["AU"]},{name:"Australia/Lindeman",utcOffset:600,offsetStr:"+10:00",countries:["AU"]},{name:"Australia/Adelaide",utcOffset:630,offsetStr:"+10:30",countries:["AU"]},{name:"Australia/Darwin",utcOffset:570,offsetStr:"+09:30",countries:["AU"]},{name:"Australia/Perth",utcOffset:480,offsetStr:"+08:00",countries:["AU"]},{name:"Australia/Eucla",utcOffset:525,offsetStr:"+08:45",countries:["AU"]},{name:"Asia/Baku",utcOffset:240,offsetStr:"+04:00",countries:["AZ"]},{name:"America/Barbados",utcOffset:-240,offsetStr:"-04:00",countries:["BB"]},{name:"Asia/Dhaka",utcOffset:360,offsetStr:"+06:00",countries:["BD"]},{name:"Europe/Brussels",utcOffset:60,offsetStr:"+01:00",countries:["BE"]},{name:"Europe/Sofia",utcOffset:120,offsetStr:"+02:00",countries:["BG"]},{name:"Atlantic/Bermuda",utcOffset:-240,offsetStr:"-04:00",countries:["BM"]},{name:"Asia/Brunei",utcOffset:480,offsetStr:"+08:00",countries:["BN"]},{name:"America/La_Paz",utcOffset:-240,offsetStr:"-04:00",countries:["BO"]},{name:"America/Noronha",utcOffset:-120,offsetStr:"-02:00",countries:["BR"]},{name:"America/Belem",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Fortaleza",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Recife",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Araguaina",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Maceio",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Bahia",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Sao_Paulo",utcOffset:-120,offsetStr:"-02:00",countries:["BR"]},{name:"America/Campo_Grande",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Cuiaba",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Santarem",utcOffset:-180,offsetStr:"-03:00",countries:["BR"]},{name:"America/Porto_Velho",utcOffset:-240,offsetStr:"-04:00",countries:["BR"]},{name:"America/Boa_Vista",utcOffset:-240,offsetStr:"-04:00",countries:["BR"]},{name:"America/Manaus",utcOffset:-240,offsetStr:"-04:00",countries:["BR"]},{name:"America/Eirunepe",utcOffset:-300,offsetStr:"-05:00",countries:["BR"]},{name:"America/Rio_Branco",utcOffset:-300,offsetStr:"-05:00",countries:["BR"]},{name:"America/Nassau",utcOffset:-300,offsetStr:"-05:00",countries:["BS"]},{name:"Asia/Thimphu",utcOffset:360,offsetStr:"+06:00",countries:["BT"]},{name:"Europe/Minsk",utcOffset:180,offsetStr:"+03:00",countries:["BY"]},{name:"America/Belize",utcOffset:-360,offsetStr:"-06:00",countries:["BZ"]},{name:"America/St_Johns",utcOffset:-210,offsetStr:"-03:30",countries:["CA"]},{name:"America/Halifax",utcOffset:-240,offsetStr:"-04:00",countries:["CA"]},{name:"America/Glace_Bay",utcOffset:-240,offsetStr:"-04:00",countries:["CA"]},{name:"America/Moncton",utcOffset:-240,offsetStr:"-04:00",countries:["CA"]},{name:"America/Goose_Bay",utcOffset:-240,offsetStr:"-04:00",countries:["CA"]},{name:"America/Blanc-Sablon",utcOffset:-240,offsetStr:"-04:00",countries:["CA"]},{name:"America/Toronto",utcOffset:-300,offsetStr:"-05:00",countries:["CA"]},{name:"America/Nipigon",utcOffset:-300,offsetStr:"-05:00",countries:["CA"]},{name:"America/Thunder_Bay",utcOffset:-300,offsetStr:"-05:00",countries:["CA"]},{name:"America/Iqaluit",utcOffset:-300,offsetStr:"-05:00",countries:["CA"]},{name:"America/Pangnirtung",utcOffset:-300,offsetStr:"-05:00",countries:["CA"]},{name:"America/Resolute",utcOffset:-360,offsetStr:"-06:00",countries:["CA"]},{name:"America/Atikokan",utcOffset:-300,offsetStr:"-05:00",countries:["CA"]},{name:"America/Rankin_Inlet",utcOffset:-360,offsetStr:"-06:00",countries:["CA"]},{name:"America/Winnipeg",utcOffset:-360,offsetStr:"-06:00",countries:["CA"]},{name:"America/Rainy_River",utcOffset:-360,offsetStr:"-06:00",countries:["CA"]},{name:"America/Regina",utcOffset:-360,offsetStr:"-06:00",countries:["CA"]},{name:"America/Swift_Current",utcOffset:-360,offsetStr:"-06:00",countries:["CA"]},{name:"America/Edmonton",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Cambridge_Bay",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Yellowknife",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Inuvik",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Creston",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Dawson_Creek",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Fort_Nelson",utcOffset:-420,offsetStr:"-07:00",countries:["CA"]},{name:"America/Vancouver",utcOffset:-480,offsetStr:"-08:00",countries:["CA"]},{name:"America/Whitehorse",utcOffset:-480,offsetStr:"-08:00",countries:["CA"]},{name:"America/Dawson",utcOffset:-480,offsetStr:"-08:00",countries:["CA"]},{name:"Indian/Cocos",utcOffset:390,offsetStr:"+06:30",countries:["CC"]},{name:"Europe/Zurich",utcOffset:60,offsetStr:"+01:00",countries:["CH","DE","LI"]},{name:"Africa/Abidjan",utcOffset:0,offsetStr:"+00:00",countries:["CI","BF","GM","GN","ML","MR","SH","SL","SN","ST","TG"]},{name:"Pacific/Rarotonga",utcOffset:-600,offsetStr:"-10:00",countries:["CK"]},{name:"America/Santiago",utcOffset:-180,offsetStr:"-03:00",countries:["CL"]},{name:"Pacific/Easter",utcOffset:-300,offsetStr:"-05:00",countries:["CL"]},{name:"Asia/Shanghai",utcOffset:480,offsetStr:"+08:00",countries:["CN"]},{name:"Asia/Urumqi",utcOffset:360,offsetStr:"+06:00",countries:["CN"]},{name:"America/Bogota",utcOffset:-300,offsetStr:"-05:00",countries:["CO"]},{name:"America/Costa_Rica",utcOffset:-360,offsetStr:"-06:00",countries:["CR"]},{name:"America/Havana",utcOffset:-300,offsetStr:"-05:00",countries:["CU"]},{name:"Atlantic/Cape_Verde",utcOffset:-60,offsetStr:"-01:00",countries:["CV"]},{name:"America/Curacao",utcOffset:-240,offsetStr:"-04:00",countries:["CW","AW","BQ","SX"]},{name:"Indian/Christmas",utcOffset:420,offsetStr:"+07:00",countries:["CX"]},{name:"Asia/Nicosia",utcOffset:120,offsetStr:"+02:00",countries:["CY"]},{name:"Europe/Prague",utcOffset:60,offsetStr:"+01:00",countries:["CZ","SK"]},{name:"Europe/Berlin",utcOffset:60,offsetStr:"+01:00",countries:["DE"]},{name:"Europe/Copenhagen",utcOffset:60,offsetStr:"+01:00",countries:["DK"]},{name:"America/Santo_Domingo",utcOffset:-240,offsetStr:"-04:00",countries:["DO"]},{name:"Africa/Algiers",utcOffset:60,offsetStr:"+01:00",countries:["DZ"]},{name:"America/Guayaquil",utcOffset:-300,offsetStr:"-05:00",countries:["EC"]},{name:"Pacific/Galapagos",utcOffset:-360,offsetStr:"-06:00",countries:["EC"]},{name:"Europe/Tallinn",utcOffset:120,offsetStr:"+02:00",countries:["EE"]},{name:"Africa/Cairo",utcOffset:120,offsetStr:"+02:00",countries:["EG"]},{name:"Africa/El_Aaiun",utcOffset:0,offsetStr:"+00:00",countries:["EH"]},{name:"Europe/Madrid",utcOffset:60,offsetStr:"+01:00",countries:["ES"]},{name:"Africa/Ceuta",utcOffset:60,offsetStr:"+01:00",countries:["ES"]},{name:"Atlantic/Canary",utcOffset:0,offsetStr:"+00:00",countries:["ES"]},{name:"Europe/Helsinki",utcOffset:120,offsetStr:"+02:00",countries:["FI","AX"]},{name:"Pacific/Fiji",utcOffset:720,offsetStr:"+12:00",countries:["FJ"]},{name:"Atlantic/Stanley",utcOffset:-180,offsetStr:"-03:00",countries:["FK"]},{name:"Pacific/Chuuk",utcOffset:600,offsetStr:"+10:00",countries:["FM"]},{name:"Pacific/Pohnpei",utcOffset:660,offsetStr:"+11:00",countries:["FM"]},{name:"Pacific/Kosrae",utcOffset:660,offsetStr:"+11:00",countries:["FM"]},{name:"Atlantic/Faroe",utcOffset:0,offsetStr:"+00:00",countries:["FO"]},{name:"Europe/Paris",utcOffset:60,offsetStr:"+01:00",countries:["FR"]},{name:"Europe/London",utcOffset:0,offsetStr:"+00:00",countries:["GB","GG","IM","JE"]},{name:"Asia/Tbilisi",utcOffset:240,offsetStr:"+04:00",countries:["GE"]},{name:"America/Cayenne",utcOffset:-180,offsetStr:"-03:00",countries:["GF"]},{name:"Africa/Accra",utcOffset:0,offsetStr:"+00:00",countries:["GH"]},{name:"Europe/Gibraltar",utcOffset:60,offsetStr:"+01:00",countries:["GI"]},{name:"America/Godthab",utcOffset:-180,offsetStr:"-03:00",countries:["GL"]},{name:"America/Danmarkshavn",utcOffset:0,offsetStr:"+00:00",countries:["GL"]},{name:"America/Scoresbysund",utcOffset:-60,offsetStr:"-01:00",countries:["GL"]},{name:"America/Thule",utcOffset:-240,offsetStr:"-04:00",countries:["GL"]},{name:"Europe/Athens",utcOffset:120,offsetStr:"+02:00",countries:["GR"]},{name:"Atlantic/South_Georgia",utcOffset:-120,offsetStr:"-02:00",countries:["GS"]},{name:"America/Guatemala",utcOffset:-360,offsetStr:"-06:00",countries:["GT"]},{name:"Pacific/Guam",utcOffset:600,offsetStr:"+10:00",countries:["GU","MP"]},{name:"Africa/Bissau",utcOffset:0,offsetStr:"+00:00",countries:["GW"]},{name:"America/Guyana",utcOffset:-240,offsetStr:"-04:00",countries:["GY"]},{name:"Asia/Hong_Kong",utcOffset:480,offsetStr:"+08:00",countries:["HK"]},{name:"America/Tegucigalpa",utcOffset:-360,offsetStr:"-06:00",countries:["HN"]},{name:"America/Port-au-Prince",utcOffset:-300,offsetStr:"-05:00",countries:["HT"]},{name:"Europe/Budapest",utcOffset:60,offsetStr:"+01:00",countries:["HU"]},{name:"Asia/Jakarta",utcOffset:420,offsetStr:"+07:00",countries:["ID"]},{name:"Asia/Pontianak",utcOffset:420,offsetStr:"+07:00",countries:["ID"]},{name:"Asia/Makassar",utcOffset:480,offsetStr:"+08:00",countries:["ID"]},{name:"Asia/Jayapura",utcOffset:540,offsetStr:"+09:00",countries:["ID"]},{name:"Europe/Dublin",utcOffset:0,offsetStr:"+00:00",countries:["IE"]},{name:"Asia/Jerusalem",utcOffset:120,offsetStr:"+02:00",countries:["IL"]},{name:"Asia/Kolkata",utcOffset:330,offsetStr:"+05:30",countries:["IN"]},{name:"Indian/Chagos",utcOffset:360,offsetStr:"+06:00",countries:["IO"]},{name:"Asia/Baghdad",utcOffset:180,offsetStr:"+03:00",countries:["IQ"]},{name:"Asia/Tehran",utcOffset:210,offsetStr:"+03:30",countries:["IR"]},{name:"Atlantic/Reykjavik",utcOffset:0,offsetStr:"+00:00",countries:["IS"]},{name:"Europe/Rome",utcOffset:60,offsetStr:"+01:00",countries:["IT","SM","VA"]},{name:"America/Jamaica",utcOffset:-300,offsetStr:"-05:00",countries:["JM"]},{name:"Asia/Amman",utcOffset:120,offsetStr:"+02:00",countries:["JO"]},{name:"Asia/Tokyo",utcOffset:540,offsetStr:"+09:00",countries:["JP"]},{name:"Africa/Nairobi",utcOffset:180,offsetStr:"+03:00",countries:["KE","DJ","ER","ET","KM","MG","SO","TZ","UG","YT"]},{name:"Asia/Bishkek",utcOffset:360,offsetStr:"+06:00",countries:["KG"]},{name:"Pacific/Tarawa",utcOffset:720,offsetStr:"+12:00",countries:["KI"]},{name:"Pacific/Enderbury",utcOffset:780,offsetStr:"+13:00",countries:["KI"]},{name:"Pacific/Kiritimati",utcOffset:840,offsetStr:"+14:00",countries:["KI"]},{name:"Asia/Pyongyang",utcOffset:510,offsetStr:"+08:30",countries:["KP"]},{name:"Asia/Seoul",utcOffset:540,offsetStr:"+09:00",countries:["KR"]},{name:"America/Cayman",utcOffset:-300,offsetStr:"-05:00",countries:["KY"]},{name:"Asia/Almaty",utcOffset:360,offsetStr:"+06:00",countries:["KZ"]},{name:"Asia/Qyzylorda",utcOffset:360,offsetStr:"+06:00",countries:["KZ"]},{name:"Asia/Aqtobe",utcOffset:300,offsetStr:"+05:00",countries:["KZ"]},{name:"Asia/Aqtau",utcOffset:300,offsetStr:"+05:00",countries:["KZ"]},{name:"Asia/Oral",utcOffset:300,offsetStr:"+05:00",countries:["KZ"]},{name:"Asia/Beirut",utcOffset:120,offsetStr:"+02:00",countries:["LB"]},{name:"Asia/Colombo",utcOffset:330,offsetStr:"+05:30",countries:["LK"]},{name:"Africa/Monrovia",utcOffset:0,offsetStr:"+00:00",countries:["LR"]},{name:"Europe/Vilnius",utcOffset:120,offsetStr:"+02:00",countries:["LT"]},{name:"Europe/Luxembourg",utcOffset:60,offsetStr:"+01:00",countries:["LU"]},{name:"Europe/Riga",utcOffset:120,offsetStr:"+02:00",countries:["LV"]},{name:"Africa/Tripoli",utcOffset:120,offsetStr:"+02:00",countries:["LY"]},{name:"Africa/Casablanca",utcOffset:0,offsetStr:"+00:00",countries:["MA"]},{name:"Europe/Monaco",utcOffset:60,offsetStr:"+01:00",countries:["MC"]},{name:"Europe/Chisinau",utcOffset:120,offsetStr:"+02:00",countries:["MD"]},{name:"Pacific/Majuro",utcOffset:720,offsetStr:"+12:00",countries:["MH"]},{name:"Pacific/Kwajalein",utcOffset:720,offsetStr:"+12:00",countries:["MH"]},{name:"Asia/Rangoon",utcOffset:390,offsetStr:"+06:30",countries:["MM"]},{name:"Asia/Ulaanbaatar",utcOffset:480,offsetStr:"+08:00",countries:["MN"]},{name:"Asia/Hovd",utcOffset:420,offsetStr:"+07:00",countries:["MN"]},{name:"Asia/Choibalsan",utcOffset:480,offsetStr:"+08:00",countries:["MN"]},{name:"Asia/Macau",utcOffset:480,offsetStr:"+08:00",countries:["MO"]},{name:"America/Martinique",utcOffset:-240,offsetStr:"-04:00",countries:["MQ"]},{name:"Europe/Malta",utcOffset:60,offsetStr:"+01:00",countries:["MT"]},{name:"Indian/Mauritius",utcOffset:240,offsetStr:"+04:00",countries:["MU"]},{name:"Indian/Maldives",utcOffset:300,offsetStr:"+05:00",countries:["MV"]},{name:"America/Mexico_City",utcOffset:-360,offsetStr:"-06:00",countries:["MX"]},{name:"America/Cancun",utcOffset:-300,offsetStr:"-05:00",countries:["MX"]},{name:"America/Merida",utcOffset:-360,offsetStr:"-06:00",countries:["MX"]},{name:"America/Monterrey",utcOffset:-360,offsetStr:"-06:00",countries:["MX"]},{name:"America/Matamoros",utcOffset:-360,offsetStr:"-06:00",countries:["MX"]},{name:"America/Mazatlan",utcOffset:-420,offsetStr:"-07:00",countries:["MX"]},{name:"America/Chihuahua",utcOffset:-420,offsetStr:"-07:00",countries:["MX"]},{name:"America/Ojinaga",utcOffset:-420,offsetStr:"-07:00",countries:["MX"]},{name:"America/Hermosillo",utcOffset:-420,offsetStr:"-07:00",countries:["MX"]},{name:"America/Tijuana",utcOffset:-480,offsetStr:"-08:00",countries:["MX"]},{name:"America/Santa_Isabel",utcOffset:-480,offsetStr:"-08:00",countries:["MX"]},{name:"America/Bahia_Banderas",utcOffset:-360,offsetStr:"-06:00",countries:["MX"]},{name:"Asia/Kuala_Lumpur",utcOffset:480,offsetStr:"+08:00",countries:["MY"]},{name:"Asia/Kuching",utcOffset:480,offsetStr:"+08:00",countries:["MY"]},{name:"Africa/Maputo",utcOffset:120,offsetStr:"+02:00",countries:["MZ","BI","BW","CD","MW","RW","ZM","ZW"]},{name:"Africa/Windhoek",utcOffset:120,offsetStr:"+02:00",countries:["NA"]},{name:"Pacific/Noumea",utcOffset:660,offsetStr:"+11:00",countries:["NC"]},{name:"Pacific/Norfolk",utcOffset:660,offsetStr:"+11:00",countries:["NF"]},{name:"Africa/Lagos",utcOffset:60,offsetStr:"+01:00",countries:["NG","AO","BJ","CD","CF","CG","CM","GA","GQ","NE"]},{name:"America/Managua",utcOffset:-360,offsetStr:"-06:00",countries:["NI"]},{name:"Europe/Amsterdam",utcOffset:60,offsetStr:"+01:00",countries:["NL"]},{name:"Europe/Oslo",utcOffset:60,offsetStr:"+01:00",countries:["NO","SJ"]},{name:"Asia/Kathmandu",utcOffset:345,offsetStr:"+05:45",countries:["NP"]},{name:"Pacific/Nauru",utcOffset:720,offsetStr:"+12:00",countries:["NR"]},{name:"Pacific/Niue",utcOffset:-660,offsetStr:"-11:00",countries:["NU"]},{name:"Pacific/Auckland",utcOffset:780,offsetStr:"+13:00",countries:["NZ","AQ"]},{name:"Pacific/Chatham",utcOffset:825,offsetStr:"+13:45",countries:["NZ"]},{name:"America/Panama",utcOffset:-300,offsetStr:"-05:00",countries:["PA"]},{name:"America/Lima",utcOffset:-300,offsetStr:"-05:00",countries:["PE"]},{name:"Pacific/Tahiti",utcOffset:-600,offsetStr:"-10:00",countries:["PF"]},{name:"Pacific/Marquesas",utcOffset:-570,offsetStr:"-09:30",countries:["PF"]},{name:"Pacific/Gambier",utcOffset:-540,offsetStr:"-09:00",countries:["PF"]},{name:"Pacific/Port_Moresby",utcOffset:600,offsetStr:"+10:00",countries:["PG"]},{name:"Pacific/Bougainville",utcOffset:660,offsetStr:"+11:00",countries:["PG"]},{name:"Asia/Manila",utcOffset:480,offsetStr:"+08:00",countries:["PH"]},{name:"Asia/Karachi",utcOffset:300,offsetStr:"+05:00",countries:["PK"]},{name:"Europe/Warsaw",utcOffset:60,offsetStr:"+01:00",countries:["PL"]},{name:"America/Miquelon",utcOffset:-180,offsetStr:"-03:00",countries:["PM"]},{name:"Pacific/Pitcairn",utcOffset:-480,offsetStr:"-08:00",countries:["PN"]},{name:"America/Puerto_Rico",utcOffset:-240,offsetStr:"-04:00",countries:["PR"]},{name:"Asia/Gaza",utcOffset:120,offsetStr:"+02:00",countries:["PS"]},{name:"Asia/Hebron",utcOffset:120,offsetStr:"+02:00",countries:["PS"]},{name:"Europe/Lisbon",utcOffset:0,offsetStr:"+00:00",countries:["PT"]},{name:"Atlantic/Madeira",utcOffset:0,offsetStr:"+00:00",countries:["PT"]},{name:"Atlantic/Azores",utcOffset:-60,offsetStr:"-01:00",countries:["PT"]},{name:"Pacific/Palau",utcOffset:540,offsetStr:"+09:00",countries:["PW"]},{name:"America/Asuncion",utcOffset:-180,offsetStr:"-03:00",countries:["PY"]},{name:"Asia/Qatar",utcOffset:180,offsetStr:"+03:00",countries:["QA","BH"]},{name:"Indian/Reunion",utcOffset:240,offsetStr:"+04:00",countries:["RE","TF"]},{name:"Europe/Bucharest",utcOffset:120,offsetStr:"+02:00",countries:["RO"]},{name:"Europe/Belgrade",utcOffset:60,offsetStr:"+01:00",countries:["RS","BA","HR","ME","MK","SI"]},{name:"Europe/Kaliningrad",utcOffset:120,offsetStr:"+02:00",countries:["RU"]},{name:"Europe/Moscow",utcOffset:180,offsetStr:"+03:00",countries:["RU"]},{name:"Europe/Simferopol",utcOffset:180,offsetStr:"+03:00",countries:["RU"]},{name:"Europe/Volgograd",utcOffset:180,offsetStr:"+03:00",countries:["RU"]},{name:"Europe/Samara",utcOffset:240,offsetStr:"+04:00",countries:["RU"]},{name:"Asia/Yekaterinburg",utcOffset:300,offsetStr:"+05:00",countries:["RU"]},{name:"Asia/Omsk",utcOffset:360,offsetStr:"+06:00",countries:["RU"]},{name:"Asia/Novosibirsk",utcOffset:360,offsetStr:"+06:00",countries:["RU"]},{name:"Asia/Novokuznetsk",utcOffset:420,offsetStr:"+07:00",countries:["RU"]},{name:"Asia/Krasnoyarsk",utcOffset:420,offsetStr:"+07:00",countries:["RU"]},{name:"Asia/Irkutsk",utcOffset:480,offsetStr:"+08:00",countries:["RU"]},{name:"Asia/Chita",utcOffset:480,offsetStr:"+08:00",countries:["RU"]},{name:"Asia/Yakutsk",utcOffset:540,offsetStr:"+09:00",countries:["RU"]},{name:"Asia/Khandyga",utcOffset:540,offsetStr:"+09:00",countries:["RU"]},{name:"Asia/Vladivostok",utcOffset:600,offsetStr:"+10:00",countries:["RU"]},{name:"Asia/Sakhalin",utcOffset:600,offsetStr:"+10:00",countries:["RU"]},{name:"Asia/Ust-Nera",utcOffset:600,offsetStr:"+10:00",countries:["RU"]},{name:"Asia/Magadan",utcOffset:600,offsetStr:"+10:00",countries:["RU"]},{name:"Asia/Srednekolymsk",utcOffset:660,offsetStr:"+11:00",countries:["RU"]},{name:"Asia/Kamchatka",utcOffset:720,offsetStr:"+12:00",countries:["RU"]},{name:"Asia/Anadyr",utcOffset:720,offsetStr:"+12:00",countries:["RU"]},{name:"Asia/Riyadh",utcOffset:180,offsetStr:"+03:00",countries:["SA","KW","YE"]},{name:"Pacific/Guadalcanal",utcOffset:660,offsetStr:"+11:00",countries:["SB"]},{name:"Indian/Mahe",utcOffset:240,offsetStr:"+04:00",countries:["SC"]},{name:"Africa/Khartoum",utcOffset:180,offsetStr:"+03:00",countries:["SD","SS"]},{name:"Europe/Stockholm",utcOffset:60,offsetStr:"+01:00",countries:["SE"]},{name:"Asia/Singapore",utcOffset:480,offsetStr:"+08:00",countries:["SG"]},{name:"America/Paramaribo",utcOffset:-180,offsetStr:"-03:00",countries:["SR"]},{name:"America/El_Salvador",utcOffset:-360,offsetStr:"-06:00",countries:["SV"]},{name:"Asia/Damascus",utcOffset:120,offsetStr:"+02:00",countries:["SY"]},{name:"America/Grand_Turk",utcOffset:-240,offsetStr:"-04:00",countries:["TC"]},{name:"Africa/Ndjamena",utcOffset:60,offsetStr:"+01:00",countries:["TD"]},{name:"Indian/Kerguelen",utcOffset:300,offsetStr:"+05:00",countries:["TF"]},{name:"Asia/Bangkok",utcOffset:420,offsetStr:"+07:00",countries:["TH","KH","LA","VN"]},{name:"Asia/Dushanbe",utcOffset:300,offsetStr:"+05:00",countries:["TJ"]},{name:"Pacific/Fakaofo",utcOffset:780,offsetStr:"+13:00",countries:["TK"]},{name:"Asia/Dili",utcOffset:540,offsetStr:"+09:00",countries:["TL"]},{name:"Asia/Ashgabat",utcOffset:300,offsetStr:"+05:00",countries:["TM"]},{name:"Africa/Tunis",utcOffset:60,offsetStr:"+01:00",countries:["TN"]},{name:"Pacific/Tongatapu",utcOffset:780,offsetStr:"+13:00",countries:["TO"]},{name:"Europe/Istanbul",utcOffset:120,offsetStr:"+02:00",countries:["TR"]},{name:"America/Port_of_Spain",utcOffset:-240,offsetStr:"-04:00",countries:["TT","AG","AI","BL","DM","GD","GP","KN","LC","MF","MS","VC","VG","VI"]},{name:"Pacific/Funafuti",utcOffset:720,offsetStr:"+12:00",countries:["TV"]},{name:"Asia/Taipei",utcOffset:480,offsetStr:"+08:00",countries:["TW"]},{name:"Europe/Kiev",utcOffset:120,offsetStr:"+02:00",countries:["UA"]},{name:"Europe/Uzhgorod",utcOffset:120,offsetStr:"+02:00",countries:["UA"]},{name:"Europe/Zaporozhye",utcOffset:120,offsetStr:"+02:00",countries:["UA"]},{name:"Pacific/Wake",utcOffset:720,offsetStr:"+12:00",countries:["UM"]},{name:"America/New_York",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Detroit",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Kentucky/Louisville",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Kentucky/Monticello",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Indiana/Indianapolis",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Indiana/Vincennes",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Indiana/Winamac",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Indiana/Marengo",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Indiana/Petersburg",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Indiana/Vevay",utcOffset:-300,offsetStr:"-05:00",countries:["US"]},{name:"America/Chicago",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/Indiana/Tell_City",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/Indiana/Knox",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/Menominee",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/North_Dakota/Center",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/North_Dakota/New_Salem",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/North_Dakota/Beulah",utcOffset:-360,offsetStr:"-06:00",countries:["US"]},{name:"America/Denver",utcOffset:-420,offsetStr:"-07:00",countries:["US"]},{name:"America/Boise",utcOffset:-420,offsetStr:"-07:00",countries:["US"]},{name:"America/Phoenix",utcOffset:-420,offsetStr:"-07:00",countries:["US"]},{name:"America/Los_Angeles",utcOffset:-480,offsetStr:"-08:00",countries:["US"]},{name:"America/Metlakatla",utcOffset:-480,offsetStr:"-08:00",countries:["US"]},{name:"America/Anchorage",utcOffset:-540,offsetStr:"-09:00",countries:["US"]},{name:"America/Juneau",utcOffset:-540,offsetStr:"-09:00",countries:["US"]},{name:"America/Sitka",utcOffset:-540,offsetStr:"-09:00",countries:["US"]},{name:"America/Yakutat",utcOffset:-540,offsetStr:"-09:00",countries:["US"]},{name:"America/Nome",utcOffset:-540,offsetStr:"-09:00",countries:["US"]},{name:"America/Adak",utcOffset:-600,offsetStr:"-10:00",countries:["US"]},{name:"Pacific/Honolulu",utcOffset:-600,offsetStr:"-10:00",countries:["US","UM"]},{name:"America/Montevideo",utcOffset:-180,offsetStr:"-03:00",countries:["UY"]},{name:"Asia/Samarkand",utcOffset:300,offsetStr:"+05:00",countries:["UZ"]},{name:"Asia/Tashkent",utcOffset:300,offsetStr:"+05:00",countries:["UZ"]},{name:"America/Caracas",utcOffset:-270,offsetStr:"-04:30",countries:["VE"]},{name:"Asia/Ho_Chi_Minh",utcOffset:420,offsetStr:"+07:00",countries:["VN"]},{name:"Pacific/Efate",utcOffset:660,offsetStr:"+11:00",countries:["VU"]},{name:"Pacific/Wallis",utcOffset:720,offsetStr:"+12:00",countries:["WF"]},{name:"Pacific/Apia",utcOffset:840,offsetStr:"+14:00",countries:["WS"]},{name:"Africa/Johannesburg",utcOffset:120,offsetStr:"+02:00",countries:["ZA","LS","SZ"]}]}],templateUrl:"app/core/directives/ms-timezone/ms-timezone.html"}})}(),function(){"use strict";angular.module("app.core").controller("MsWidgetEngineCounterController",function(){var a=this;a.filter=[],a.filtered=!1,a.fontSize=20,a.getCount=function(e){var t=0;if(e){a.fontSize=e.attrs[2]&&e.attrs[2].value?parseInt(e.attrs[2].value)-parseInt(e.attrs[2].value)%2:20,e.attrs[1].value&&e.attrs[1].value.length?(a.filtered=!0,a.filter=_.intersection(e.voiceQueuesSelected,e.attrs[1].value)):(a.filtered=!1,a.filter=e.voiceQueuesSelected);for(var n=0;n<e.voiceQueues.rows.length;n+=1)_.includes(a.filter,e.voiceQueues.rows[n].id)&&(t+=e.voiceQueues.rows[n][e.attrs[0].value]?parseInt(e.voiceQueues.rows[n][e.attrs[0].value]):0)}return t}})}(),function(){"use strict";function e(o,e){var r=this;r.filter=[],r.filtered=!1,r.properties=[],r.multiBarChart={labels:["QUEUE_NAME"],series:["TOTAL"],data:[[50]],options:{responsive:!0,legend:{display:!0,fontColor:"#2196f3"},scales:{xAxes:[{gridLines:{display:!0},ticks:{fontColor:"#2196f3",stepSize:1,beginAtZero:!0}}],yAxes:[{gridLines:{display:!1},ticks:{fontColor:"#2196f3"}}]}}},r.getMultiBarChart=function(e){e&&(e.attrs&&function(e){r.properties=_.map(_.filter(e.attrs,function(e){return e.name&&0<=e.name.indexOf("attrSerie")&&e.value&&"null"!==e.value}),"value"),e.attrs[3].value&&e.attrs[3].value.length?(r.filtered=!0,r.filter=_.intersection(e.voiceQueuesSelected,e.attrs[3].value)):(r.filtered=!1,r.filter=e.voiceQueuesSelected);if(r.multiBarChart.series.length>r.properties.length){var t=r.multiBarChart.series.length-r.properties.length;r.multiBarChart.series.splice(0,t),r.multiBarChart.data.splice(0,t)}for(var n=0;n<r.properties.length;n+=1){if(r.multiBarChart.series[n]=o.instant("TOOLS."+r.properties[n].toUpperCase()),_.isNil(r.multiBarChart.data[n])&&(r.multiBarChart.data[n]=[]),r.multiBarChart.labels.length>r.filter.length){var a=r.multiBarChart.labels.length-r.filter.length;r.multiBarChart.labels.splice(0,a),r.multiBarChart.data[n].splice(0,a)}for(var i=0,s=0;i<e.voiceQueues.rows.length;i+=1)_.includes(r.filter,e.voiceQueues.rows[i].id)&&(r.multiBarChart.labels[s]=e.voiceQueues.rows[i].name,r.multiBarChart.data[n][s]=e.voiceQueues.rows[i][r.properties[n]]?parseInt(e.voiceQueues.rows[i][r.properties[n]]):0,s+=1)}}(e),e.foreground&&function(e){r.multiBarChart.options.legend.fontColor=e.foreground;for(var t=0;t<r.multiBarChart.options.scales.xAxes.length;t+=1)r.multiBarChart.options.scales.xAxes[t].ticks.fontColor=e.foreground;for(var n=0;n<r.multiBarChart.options.scales.yAxes.length;n+=1)r.multiBarChart.options.scales.yAxes[n].ticks.fontColor=e.foreground}(e))}}e.$inject=["$translate","socket"],angular.module("app.core").controller("MsWidgetEngineMultibarChartController",e)}(),function(){"use strict";function e(s){var o=this;o.filter=[],o.filtered=!1,o.properties=[],o.pieChart={labels:["ANSWERED"],data:[30],options:{responsive:!0,legend:{display:!0}}},o.getPieChart=function(e){e&&(e.attrs&&function(e){o.properties=_.map(_.filter(e.attrs,function(e){return e.name&&0<=e.name.indexOf("attrSerie")&&e.value&&"null"!==e.value}),"value"),e.attrs[3].value&&e.attrs[3].value.length?(o.filtered=!0,o.filter=_.intersection(e.voiceQueuesSelected,e.attrs[3].value)):(o.filtered=!1,o.filter=e.voiceQueuesSelected);if(o.pieChart.labels.length>o.properties.length){var t=o.pieChart.labels.length-o.properties.length;o.pieChart.labels.splice(0,t),o.pieChart.data.splice(0,t)}for(var n=0,a=0;n<o.properties.length;n+=1){o.pieChart.labels[n]=s.instant("TOOLS."+o.properties[n].toUpperCase());for(var i=0;i<e.voiceQueues.rows.length;i+=1)_.includes(o.filter,e.voiceQueues.rows[i].id)&&(a+=e.voiceQueues.rows[i][o.properties[n]]?parseInt(e.voiceQueues.rows[i][o.properties[n]]):0);o.pieChart.data[n]=a,a=0}}(e),e.foreground&&(t=e,o.pieChart.options.legend.fontColor=t.foreground));var t}}e.$inject=["$translate"],angular.module("app.core").controller("MsWidgetEnginePieChartController",e)}(),function(){"use strict";function e(e,n,a,i){var s=this;function t(e){s.results=e||{count:0,rows:[]}}function o(){s.query.offset=(s.query.page-1)*s.query.limit,s.promise=i[s.reportRoute].run(s.query,t).$promise}s.countDown=0,s.refresh=0,s.title="",s.columns=[],s.results={rows:[],count:0},s.query={limit:10,page:1,startDate:moment().startOf("day").format("YYYY-MM-DD HH:mm:ss"),endDate:moment().endOf("day").format("YYYY-MM-DD HH:mm:ss"),output:"web"},s.onInit=function e(t){t&&t.attrs&&(t.attrs[0]&&t.attrs[0].value&&(s.query.id=t.attrs[0].value,i.analyticFieldReport.get({fields:"field,alias",nolimit:!0,DefaultReportId:"default"===t.attrs[0].type?t.attrs[0].value:void 0,CustomReportId:"custom"===t.attrs[0].type?t.attrs[0].value:void 0}).$promise.then(function(e){switch(e&&e.rows&&(s.columns=e.rows),t.attrs[0].type){case"default":s.reportRoute="analyticDefaultReport";break;case"custom":s.reportRoute="analyticCustomReport"}return i[s.reportRoute].get({id:t.attrs[0].value,fields:"id,name"}).$promise}).then(function(e){e&&e.name&&(s.title=e.name),o()}).catch(function(e){console.log(e)})),t.attrs[1]&&t.attrs[1].value&&(s.refresh=parseInt(t.attrs[1].value),!_.isNaN(s.refresh)&&0<s.refresh?(s.countDown=parseInt(t.attrs[1].value),s.interval=a(function(){s.countDown-=1},1e3,0),s.timeout=n(function(){s.interval&&a.cancel(s.interval),e(t)},1e3*s.refresh)):(s.interval&&a.cancel(s.interval),s.timeout&&n.cancel(s.timeout))))},s.getResults=o,s.valueReplacer=function(e,t){moment(t,"YYYY-MM-DDTHH:mm:ssZ",!0).isValid()&&(t=moment(t,"").format("YYYY-MM-DD HH:mm:ss"));return t},e.$on("$destroy",function(){s.interval&&a.cancel(s.interval),s.timeout&&n.cancel(s.timeout)})}e.$inject=["$scope","$timeout","$interval","api"],angular.module("app.core").controller("MsWidgetEngineWebReportController",e)}(),function(){"use strict";function e(e,t){this.getTrustedURL=function(e){return t.trustAsResourceUrl(e)}}function t(e){return{restrict:"E",scope:{config:"=?",onEdit:"&?",onDelete:"&?"},require:"msWidgetEngine",controller:"MsWidgetEngineController",controllerAs:"vm",bindToController:!0,templateUrl:"app/core/directives/ms-widget-engine/ms-widget-engine.html"}}e.$inject=["$mdDialog","$sce"],t.$inject=["$document"],angular.module("app.core").controller("MsWidgetEngineController",e).directive("msWidgetEngine",t)}(),function(){"use strict";function e(e,t){var n=this;n.flipped=!1,n.flip=function(){if(!angular.isDefined(e.flippable)||!0!==e.flippable)return;n.flipped=!n.flipped,t.toggleClass("flipped",n.flipped)}}e.$inject=["$scope","$element"],angular.module("app.core").controller("MsWidgetController",e).directive("msWidget",function(){return{restrict:"E",scope:{flippable:"=?"},controller:"MsWidgetController",transclude:!0,compile:function(e){return e.addClass("ms-widget"),function(e,t,n,a,i){i(function(e){t.empty(),t.append(e)})}}}}).directive("msWidgetFront",function(){return{restrict:"E",require:"^msWidget",transclude:!0,compile:function(e){return e.addClass("ms-widget-front"),function(e,t,n,a,i){i(function(e){t.empty(),t.append(e)}),e.flipWidget=a.flip}}}}).directive("msWidgetBack",function(){return{restrict:"E",require:"^msWidget",transclude:!0,compile:function(e){return e.addClass("ms-widget-back"),function(e,t,n,a,i){i(function(e){t.empty(),t.append(e)}),e.flipWidget=a.flip}}}})}(),function(){"use strict";angular.module("app.core").filter("altDate",function(){return function(e){var t=Date.now()-new Date(e);return t<36e5?moment(e).fromNow():t<864e5?moment(e).format("HH:mm"):t<6048e5?moment(e).format("dddd"):moment(e).calendar()}})}(),function(){"use strict";function e(t){return function(e){return t.trustAsHtml(e)}}e.$inject=["$sce"],angular.module("app.core").filter("toTrusted",e).filter("htmlToPlaintext",function(){return function(e){return String(e).replace(/<[^>]+>/gm,"")}}).filter("nospace",function(){return function(e){return e?e.replace(/ /g,""):""}}).filter("humanizeDoc",function(){return function(e){if(e)return"directive"===e.type?e.name.replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()}):e.label||e.name}})}(),function(){"use strict";angular.module("app.core").filter("filterByIds",function(){return function(e,t){if(0===e.length||!t)return e;if(0===t.length)return[];for(var n=[],a=0;a<e.length;a++){for(var i=e[a],s=!1,o=0;o<t.length;o++){var r=t[o];if(i.id===r){s=!0;break}}s&&n.push(i)}return n}})}(),function(){"use strict";angular.module("app.core").filter("filterByPropIds",function(){return function(e,t,n){if(0===e.length||!n||0===n.length)return e;for(var a=[],i=0;i<e.length;i++){for(var s=e[i],o=!1,r=0;r<n.length;r++){var l=n[r];if(-1<s[t].indexOf(l)){o=!0;break}}o&&a.push(s)}return a}})}(),function(){"use strict";angular.module("app.core").filter("filterByTags",function(){return function(e,n){if(0===e.length||0===n.length)return e;var a=[];return e.forEach(function(e){var t=n.every(function(t){var n=!1;return e.tags.forEach(function(e){e.name!==t.name||(n=!0)}),n});t&&a.push(e)}),a}}).filter("filterSingleByTags",function(){return function(e,t){if(0!==e.length&&0!==t.length){if(e.length<t.length)return[];var n=[],a=t.every(function(t){var n=!1;return e.forEach(function(e){e.name!==t.name||(n=!0)}),n});return a&&n.push(e),n}}})}(),function(){"use strict";function c(e,t,n,a){this.id=Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15),this.title=e,this.body=t,this.accept=n,this.reject=a,this.close=i}function m(){return/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)}function i(){var n=this;navigator.serviceWorker.ready.then(function(e){e.getNotifications().then(function(e){var t=_.find(e,function(e){return e.data.id===n.id});t&&t.close()})})}angular.module("app.dashboards").provider("motNotification",function(){return{$get:[function(){var l,n,d=[];"serviceWorker"in navigator&&m()?navigator.serviceWorker.register("notification.js").then(function(e){(l=e).update(),l.installing?n=l.installing:l.waiting?n=l.waiting:l.active&&(n=l.active)}).catch(function(e){console.error("Service worker registration failed",e)}):console.error("Service Worker is not supported");return navigator.serviceWorker.addEventListener("message",function(e){if(e.source===n){var t=_.find(d,{id:e.data.id});if(t)switch(e.data.action){case"accept":t.accept&&t.accept();break;case"reject":t.reject&&t.reject()}}}),{create:function(e,i,s,o,r){return new Promise(function(t,n){var a;m()&&(window.document.hidden||window.document.mozHidden||window.document.webkitHidden)?(a=new c(e||"MyTitle",i||"MyBody",o,r),d.push(a),a?window.Notification.requestPermission().then(function(e){if("granted"===e)return l.showNotification(a.title,{body:a.body,requireInteraction:!0,icon:s||"assets/images/business/queueCampaigns.jpg",data:{id:a.id},actions:[{action:"accept",title:"Accept"},{action:"reject",title:"Reject"}]})}).then(function(e){t(a)}).catch(function(e){n(e)}):n(new Error("Notification creating error"))):t()})}}}]}})}(),function(){"use strict";function e(l,d,c){return{resolve:function(e,t){var n=e.split("@"),a=n[0],i=n[1],s=t||{};if(!a||!i)return d.error("apiResolver.resolve requires correct action parameter (ResourceName@methodName)"),!1;var o=l.defer(),r=function(e){for(var t=e.split("."),n=c,a=0;a<t.length;a++){if(angular.isUndefined(n[t[a]])){d.error('Resource part "'+t[a]+'" is not defined!'),n=!1;break}n=n[t[a]]}return n||!1}(a);r?r[i](s,function(e){o.resolve(e)},function(e){o.reject(e)}):(d.error('Resource "'+a+'" is not defined in the api service!'),o.reject('Resource "'+a+'" is not defined in the api service!'));return o.promise}}}e.$inject=["$q","$log","api"],angular.module("app.core").factory("apiResolver",e)}(),function(){"use strict";angular.module("app.core").provider("msApi",function(){var n=angular.injector(["ng"]).get("$log"),a="",v=[];function t(e){a=e}function i(){return a}function s(e,t){angular.isString(e)?angular.isArray(t)?v[e]={url:a+(t[0]||""),paramDefaults:t[1]||[],actions:t[2]||[],options:t[3]||{}}:n.error('"resource" must be an array and it must follow $resource definition'):n.error('"path" must be a string (eg. `dashboard.project`)')}this.setBaseUrl=t,this.getBaseUrl=i,this.getApiObject=function(){return v},this.register=s,this.$get=["$log","$q","$resource","$rootScope",function(m,u,p,g){var e={setBaseUrl:t,getBaseUrl:i,register:s,resolve:function(e,t){g.$broadcast("msApi::resolveStart");var n=e.split("@"),a=n[0],i=n[1],s=t||{};if(!a||!i)return m.error("msApi.resolve requires correct action parameter (resourceName@methodName)"),!1;var o=u.defer(),r=v[a];if(r){var l=p(r.url,r.paramDefaults,r.actions,r.options);l[i](s,function(e){o.resolve(e),g.$broadcast("msApi::resolveSuccess")},function(e){o.reject(e),g.$broadcast("msApi::resolveError")})}else m.error('Resource "'+a+'" is not defined in the api service!'),o.reject('Resource "'+a+'" is not defined in the api service!');return o.promise},request:function(e,t,n,a){g.$broadcast("msApi::requestStart");var i=e.split("@"),s=i[0],o=i[1],r=t||{};if(!s||!o)return m.error("msApi.resolve requires correct action parameter (resourceName@methodName)"),!1;var l=u.defer(),d=v[s];if(d){var c=p(d.url,d.paramDefaults,d.actions,d.options);c[o](r,function(e){g.$broadcast("msApi::requestSuccess"),l.resolve(e),angular.isDefined(n)&&angular.isFunction(n)&&n(e)},function(e){g.$broadcast("msApi::requestError"),l.reject(e),angular.isDefined(a)&&angular.isFunction(a)&&a(e)})}else m.error('Resource "'+s+'" is not defined in the api service!'),l.reject('Resource "'+s+'" is not defined in the api service!');return l.promise}};return e}]})}(),function(){"use strict";function e(l){var e=new MobileDetect(l.navigator.userAgent),d=null;return{exists:function(e,t){return-1<t.indexOf(e)},detectBrowser:function(){if(d)return d;var e=[{string:l.navigator.userAgent,subString:"Edge",versionSearch:"Edge",identity:"Edge"},{string:l.navigator.userAgent,subString:"Chrome",identity:"Chrome"},{string:l.navigator.userAgent,subString:"OmniWeb",versionSearch:"OmniWeb/",identity:"OmniWeb"},{string:l.navigator.vendor,subString:"Apple",versionSearch:"Version",identity:"Safari"},{prop:l.opera,identity:"Opera"},{string:l.navigator.vendor,subString:"iCab",identity:"iCab"},{string:l.navigator.vendor,subString:"KDE",identity:"Konqueror"},{string:l.navigator.userAgent,subString:"Firefox",identity:"Firefox"},{string:l.navigator.vendor,subString:"Camino",identity:"Camino"},{string:l.navigator.userAgent,subString:"Netscape",identity:"Netscape"},{string:l.navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE"},{string:l.navigator.userAgent,subString:"Trident/7",identity:"Explorer",versionSearch:"rv"},{string:l.navigator.userAgent,subString:"Gecko",identity:"Mozilla",versionSearch:"rv"},{string:l.navigator.userAgent,subString:"Mozilla",identity:"Netscape",versionSearch:"Mozilla"}],t=[{string:l.navigator.platform,subString:"Win",identity:"Windows"},{string:l.navigator.platform,subString:"Mac",identity:"Mac"},{string:l.navigator.platform,subString:"Linux",identity:"Linux"},{string:l.navigator.platform,subString:"iPhone",identity:"iPhone"},{string:l.navigator.platform,subString:"iPod",identity:"iPod"},{string:l.navigator.platform,subString:"iPad",identity:"iPad"},{string:l.navigator.platform,subString:"Android",identity:"Android"}],i="";function n(e){for(var t=0;t<e.length;t++){var n=e[t].string,a=e[t].prop;if(i=e[t].versionSearch||e[t].identity,n){if(-1!==n.indexOf(e[t].subString))return e[t].identity}else if(a)return e[t].identity}}function a(e){var t=e.indexOf(i);if(-1!==t)return parseInt(e.substring(t+i.length+1))}var s=n(e)||"unknown-browser",o=a(l.navigator.userAgent)||a(l.navigator.appVersion)||"unknown-version",r=n(t)||"unknown-os";return s=s.toLowerCase(),o=s+"-"+o,r=r.toLowerCase(),d={browser:s,version:o,os:r}},guidGenerator:function(){var e=function(){return(65536*(1+Math.random())||0).toString(16).substring(1)};return e()+e()+e()+e()+e()+e()},isMobile:function(){return e.mobile()},toggleInArray:function(e,t){-1===t.indexOf(e)?t.push(e):t.splice(t.indexOf(e),1)}}}e.$inject=["$window"],angular.module("app.core").factory("msUtils",e)}(),function(){"use strict";function e(e,t){var n=this;n.themes=t.themes,n.layoutModes=[{label:"Boxed",value:"boxed"},{label:"Wide",value:"wide"}],n.layoutStyles=[{label:"Vertical Navigation",value:"verticalNavigation",figure:"/assets/images/theme-options/vertical-nav.jpg"},{label:"Vertical Navigation with Fullwidth Toolbar",value:"verticalNavigationFullwidthToolbar",figure:"/assets/images/theme-options/vertical-nav-with-full-toolbar.jpg"},{label:"Vertical Navigation with Fullwidth Toolbar 2",value:"verticalNavigationFullwidthToolbar2",figure:"/assets/images/theme-options/vertical-nav-with-full-toolbar-2.jpg"},{label:"Horizontal Navigation",value:"horizontalNavigation",figure:"/assets/images/theme-options/horizontal-nav.jpg"},{label:"Content with Toolbar",value:"contentWithToolbar",figure:"/assets/images/theme-options/content-with-toolbar.jpg"},{label:"Content Only",value:"contentOnly",figure:"/assets/images/theme-options/content-only.jpg"}],n.layoutMode="wide",n.layoutStyle=e.get("motion.layoutStyle")||"verticalNavigation",n.setActiveTheme=function(e){t.setActiveTheme(e)},n.getActiveTheme=function(){return t.themes.active},n.updateLayoutMode=function(){angular.element("body").toggleClass("boxed","boxed"===n.layoutMode)},n.updateLayoutStyle=function(){e.put("motion.layoutStyle",n.layoutStyle),location.reload()}}function t(t){return{restrict:"E",scope:{},controller:"MsThemeOptionsController as vm",templateUrl:"app/core/theme-options/theme-options.html",compile:function(e){return e.addClass("ms-theme-options"),function(e){e.toggleOptionsSidenav=function(){t("motion-theme-options").toggle()}}}}}e.$inject=["$cookies","motionTheming"],t.$inject=["$mdSidenav"],angular.module("app.core").controller("MsThemeOptionsController",e).directive("msThemeOptions",t)}(),function(){"use strict";function e(i,a,s){var o={};return{generate:function(){var e=angular.copy(s.getRegisteredThemes()),a=angular.copy(s.getRegisteredPalettes());angular.forEach(e,function(n){o[n.name]={},angular.forEach(n.colors,function(e,t){o[n.name][t]={name:e.name,levels:{default:{color:l(a[e.name][e.hues.default].value),contrast1:l(a[e.name][e.hues.default].contrast,1),contrast2:l(a[e.name][e.hues.default].contrast,2),contrast3:l(a[e.name][e.hues.default].contrast,3),contrast4:l(a[e.name][e.hues.default].contrast,4)},hue1:{color:l(a[e.name][e.hues["hue-1"]].value),contrast1:l(a[e.name][e.hues["hue-1"]].contrast,1),contrast2:l(a[e.name][e.hues["hue-1"]].contrast,2),contrast3:l(a[e.name][e.hues["hue-1"]].contrast,3),contrast4:l(a[e.name][e.hues["hue-1"]].contrast,4)},hue2:{color:l(a[e.name][e.hues["hue-2"]].value),contrast1:l(a[e.name][e.hues["hue-2"]].contrast,1),contrast2:l(a[e.name][e.hues["hue-2"]].contrast,2),contrast3:l(a[e.name][e.hues["hue-2"]].contrast,3),contrast4:l(a[e.name][e.hues["hue-2"]].contrast,4)},hue3:{color:l(a[e.name][e.hues["hue-3"]].value),contrast1:l(a[e.name][e.hues["hue-3"]].contrast,1),contrast2:l(a[e.name][e.hues["hue-3"]].contrast,2),contrast3:l(a[e.name][e.hues["hue-3"]].contrast,3),contrast4:l(a[e.name][e.hues["hue-3"]].contrast,4)}}}})}),function(e){var t=angular.copy(e);angular.forEach(t,function(n){angular.forEach(n,function(e,t){n[t]=e.levels,n[t].color=e.levels.default.color,n[t].contrast1=e.levels.default.contrast1,n[t].contrast2=e.levels.default.contrast2,n[t].contrast3=e.levels.default.contrast3,n[t].contrast4=e.levels.default.contrast4,delete n[t].default})}),s.setThemesList(t);var n=i.get("motion.selectedTheme");n?s.setActiveTheme(n):s.setActiveTheme("default")}(o);var r={};angular.forEach(o,function(e,t){var n,a,i,s,o;(r={})["@themeName"]=t,angular.forEach(e,function(e,a){angular.forEach(e.levels,function(e,n){angular.forEach(e,function(e,t){r["@"+a+d(n)+d(t)]=e})})}),n=r,a=new RegExp(Object.keys(n).join("|"),"gi"),i='/* Content hack because they wont fix */\n/* https://github.com/angular/material/pull/8067 */\n[md-theme="@themeName"] md-content.md-hue-1,\nmd-content.md-@themeName-theme.md-hue-1 {\n    color: @backgroundHue1Contrast1;\n    background-color: @backgroundHue1Color;\n}\n\n[md-theme="@themeName"] md-content.md-hue-2,\nmd-content.md-@themeName-theme.md-hue-2 {\n    color: @backgroundHue2Contrast1;\n    background-color: @backgroundHue2Color;\n}\n\n[md-theme="@themeName"] md-content.md-hue-3,\n md-content.md-@themeName-theme.md-hue-3 {\n    color: @backgroundHue3Contrast1;\n    background-color: @backgroundHue3Color;\n}\n\n/* Text Colors */\n[md-theme="@themeName"] a {\n    color: @accentDefaultColor;\n}\n\n[md-theme="@themeName"] .secondary-text,\n[md-theme="@themeName"] .icon {\n    color: @backgroundDefaultContrast2;\n}\n\n[md-theme="@themeName"] .hint-text,\n[md-theme="@themeName"] .disabled-text {\n    color: @backgroundDefaultContrast3;\n}\n\n[md-theme="@themeName"] .fade-text,\n[md-theme="@themeName"] .divider {\n    color: @backgroundDefaultContrast4;\n}\n\n/* Primary */\n[md-theme="@themeName"] .md-primary-bg {\n    background-color: @primaryDefaultColor;\n    color: @primaryDefaultContrast1;\n}\n\n[md-theme="@themeName"] .md-primary-bg .secondary-text,\n[md-theme="@themeName"] .md-primary-bg .icon {\n    color: @primaryDefaultContrast2;\n}\n\n[md-theme="@themeName"] .md-primary-bg .hint-text,\n[md-theme="@themeName"] .md-primary-bg .disabled-text {\n    color: @primaryDefaultContrast3;\n}\n\n[md-theme="@themeName"] .md-primary-bg .fade-text,\n[md-theme="@themeName"] .md-primary-bg .divider {\n    color: @primaryDefaultContrast4;\n}\n\n/* Primary, Hue-1 */\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 {\n    background-color: @primaryHue1Color;\n    color: @primaryHue1Contrast1;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 .secondary-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 .icon {\n    color: @primaryHue1Contrast2;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 .hint-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 .disabled-text {\n    color: @primaryHue1Contrast3;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 .fade-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-1 .divider {\n    color: @primaryHue1Contrast4;\n}\n\n/* Primary, Hue-2 */\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 {\n    background-color: @primaryHue2Color;\n    color: @primaryHue2Contrast1;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 .secondary-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 .icon {\n    color: @primaryHue2Contrast2;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 .hint-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 .disabled-text {\n    color: @primaryHue2Contrast3;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 .fade-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-2 .divider {\n    color: @primaryHue2Contrast4;\n}\n\n/* Primary, Hue-3 */\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 {\n    background-color: @primaryHue3Color;\n    color: @primaryHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 .secondary-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 .icon {\n    color: @primaryHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 .hint-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 .disabled-text {\n    color: @primaryHue3Contrast3;\n}\n\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 .fade-text,\n[md-theme="@themeName"] .md-primary-bg.md-hue-3 .divider {\n    color: @primaryHue3Contrast4;\n}\n\n/* Primary foreground */\n[md-theme="@themeName"] .md-primary-fg {\n    color: @primaryDefaultColor !important;\n}\n\n/* Primary foreground, Hue-1 */\n[md-theme="@themeName"] .md-primary-fg.md-hue-1 {\n    color: @primaryHue1Color !important;\n}\n\n/* Primary foreground, Hue-2 */\n[md-theme="@themeName"] .md-primary-fg.md-hue-2 {\n    color: @primaryHue2Color !important;\n}\n\n/* Primary foreground, Hue-3 */\n[md-theme="@themeName"] .md-primary-fg.md-hue-3 {\n    color: @primaryHue3Color !important;\n}\n\n/* Accent */\n[md-theme="@themeName"] .md-accent-bg {\n    background-color: @accentDefaultColor;\n    color: @accentDefaultContrast1;\n}\n\n[md-theme="@themeName"] .md-accent-bg .secondary-text,\n[md-theme="@themeName"] .md-accent-bg .icon {\n    color: @accentDefaultContrast2;\n}\n\n[md-theme="@themeName"] .md-accent-bg .hint-text,\n[md-theme="@themeName"] .md-accent-bg .disabled-text {\n    color: @accentDefaultContrast3;\n}\n\n[md-theme="@themeName"] .md-accent-bg .fade-text,\n[md-theme="@themeName"] .md-accent-bg .divider {\n    color: @accentDefaultContrast4;\n}\n\n/* Accent, Hue-1 */\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 {\n    background-color: @accentHue1Color;\n    color: @accentHue1Contrast1;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 .secondary-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 .icon {\n    color: @accentHue1Contrast2;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 .hint-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 .disabled-text {\n    color: @accentHue1Contrast3;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 .fade-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-1 .divider {\n    color: @accentHue1Contrast4;\n}\n\n/* Accent, Hue-2 */\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 {\n    background-color: @accentHue2Color;\n    color: @accentHue2Contrast1;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 .secondary-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 .icon {\n    color: @accentHue2Contrast2;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 .hint-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 .disabled-text {\n    color: @accentHue2Contrast3;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 .fade-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-2 .divider {\n    color: @accentHue2Contrast4;\n}\n\n/* Accent, Hue-3 */\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 {\n    background-color: @accentHue3Color;\n    color: @accentHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 .secondary-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 .icon {\n    color: @accentHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 .hint-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 .disabled-text {\n    color: @accentHue3Contrast3;\n}\n\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 .fade-text,\n[md-theme="@themeName"] .md-accent-bg.md-hue-3 .divider {\n    color: @accentHue3Contrast4;\n}\n\n/* Accent foreground */\n[md-theme="@themeName"] .md-accent-fg {\n    color: @accentDefaultColor !important;\n}\n\n/* Accent foreground, Hue-1 */\n[md-theme="@themeName"] .md-accent-fg.md-hue-1 {\n    color: @accentHue1Color !important;\n}\n\n/* Accent foreground, Hue-2 */\n[md-theme="@themeName"] .md-accent-fg.md-hue-2 {\n    color: @accentHue2Color !important;\n}\n\n/* Accent foreground, Hue-3 */\n[md-theme="@themeName"] .md-accent-fg.md-hue-3 {\n    color: @accentHue3Color !important;\n}\n\n/* Warn */\n[md-theme="@themeName"] .md-warn-bg {\n    background-color: @warnDefaultColor;\n    color: @warnDefaultContrast1;\n}\n\n[md-theme="@themeName"] .md-warn-bg .secondary-text,\n[md-theme="@themeName"] .md-warn-bg .icon {\n    color: @warnDefaultContrast2;\n}\n\n[md-theme="@themeName"] .md-warn-bg .hint-text,\n[md-theme="@themeName"] .md-warn-bg .disabled-text {\n    color: @warnDefaultContrast3;\n}\n\n[md-theme="@themeName"] .md-warn-bg .fade-text,\n[md-theme="@themeName"] .md-warn-bg .divider {\n    color: @warnDefaultContrast4;\n}\n\n/* Warn, Hue-1 */\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 {\n    background-color: @warnHue1Color;\n    color: @warnHue1Contrast1;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 .secondary-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 .icon {\n    color: @warnHue1Contrast2;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 .hint-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 .disabled-text {\n    color: @warnHue1Contrast3;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 .fade-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-1 .divider {\n    color: @warnHue1Contrast4;\n}\n\n/* Warn, Hue-2 */\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 {\n    background-color: @warnHue2Color;\n    color: @warnHue2Contrast1;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 .secondary-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 .icon {\n    color: @warnHue2Contrast2;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 .hint-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 .disabled-text {\n    color: @warnHue2Contrast3;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 .fade-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-2 .divider {\n    color: @warnHue2Contrast4;\n}\n\n/* Warn, Hue-3 */\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 {\n    background-color: @warnHue3Color;\n    color: @warnHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 .secondary-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 .icon {\n    color: @warnHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 .hint-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 .disabled-text {\n    color: @warnHue3Contrast3;\n}\n\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 .fade-text,\n[md-theme="@themeName"] .md-warn-bg.md-hue-3 .divider {\n    color: @warnHue3Contrast4;\n}\n\n/* Warn foreground */\n[md-theme="@themeName"] .md-warn-fg {\n    color: @warnDefaultColor !important;\n}\n\n/* Warn foreground, Hue-1 */\n[md-theme="@themeName"] .md-warn-fg.md-hue-1 {\n    color: @warnHue1Color !important;\n}\n\n/* Warn foreground, Hue-2 */\n[md-theme="@themeName"] .md-warn-fg.md-hue-2 {\n    color: @warnHue2Color !important;\n}\n\n/* Warn foreground, Hue-3 */\n[md-theme="@themeName"] .md-warn-fg.md-hue-3 {\n    color: @warnHue3Color !important;\n}\n\n/* Background */\n[md-theme="@themeName"] .md-background-bg {\n    background-color: @backgroundDefaultColor;\n    color: @backgroundDefaultContrast1;\n}\n\n[md-theme="@themeName"] .md-background-bg .secondary-text,\n[md-theme="@themeName"] .md-background-bg .icon {\n    color: @backgroundDefaultContrast2;\n}\n\n[md-theme="@themeName"] .md-background-bg .hint-text,\n[md-theme="@themeName"] .md-background-bg .disabled-text {\n    color: @backgroundDefaultContrast3;\n}\n\n[md-theme="@themeName"] .md-background-bg .fade-text,\n[md-theme="@themeName"] .md-background-bg .divider {\n    color: @backgroundDefaultContrast4;\n}\n\n/* Background, Hue-1 */\n[md-theme="@themeName"] .md-background-bg.md-hue-1 {\n    background-color: @backgroundHue1Color;\n    color: @backgroundHue1Contrast1;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-1 .secondary-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-1 .icon {\n    color: @backgroundHue1Contrast2;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-1 .hint-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-1 .disabled-text {\n    color: @backgroundHue1Contrast3;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-1 .fade-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-1 .divider {\n    color: @backgroundHue1Contrast4;\n}\n\n/* Background, Hue-2 */\n[md-theme="@themeName"] .md-background-bg.md-hue-2 {\n    background-color: @backgroundHue2Color;\n    color: @backgroundHue2Contrast1;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-2 .secondary-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-2 .icon {\n    color: @backgroundHue2Contrast2;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-2 .hint-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-2 .disabled-text {\n    color: @backgroundHue2Contrast3;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-2 .fade-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-2 .divider {\n    color: @backgroundHue2Contrast4;\n}\n\n/* Background, Hue-3 */\n[md-theme="@themeName"] .md-background-bg.md-hue-3 {\n    background-color: @backgroundHue3Color;\n    color: @backgroundHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-3 .secondary-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-3 .icon {\n    color: @backgroundHue3Contrast1;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-3 .hint-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-3 .disabled-text {\n    color: @backgroundHue3Contrast3;\n}\n\n[md-theme="@themeName"] .md-background-bg.md-hue-3 .fade-text,\n[md-theme="@themeName"] .md-background-bg.md-hue-3 .divider {\n    color: @backgroundHue3Contrast4;\n}\n\n/* Background foreground */\n[md-theme="@themeName"] .md-background-fg {\n    color: @backgroundDefaultColor !important;\n}\n\n/* Background foreground, Hue-1 */\n[md-theme="@themeName"] .md-background-fg.md-hue-1 {\n    color: @backgroundHue1Color !important;\n}\n\n/* Background foreground, Hue-2 */\n[md-theme="@themeName"] .md-background-fg.md-hue-2 {\n    color: @backgroundHue2Color !important;\n}\n\n/* Background foreground, Hue-3 */\n[md-theme="@themeName"] .md-background-fg.md-hue-3 {\n    color: @backgroundHue3Color !important;\n}'.replace(a,function(e){return n[e]}),s=angular.element("head"),(o=angular.element('<style type="text/css"></style>')).html(i),s.append(o)})},rgba:l};function l(e,t){var n=t||!1;return 4===e.length&&255===e[0]&&255===e[1]&&255===e[2]&&e.splice(3,4),n&&(e=function(e,t){var n={white:{1:"1",2:"0.7",3:"0.3",4:"0.12"},black:{1:"0.87",2:"0.54",3:"0.26",4:"0.12"}};255===e[0]&&255===e[1]&&255===e[2]?e[3]=n.white[t]:0===e[0]&&0===e[1]&&0===e[2]&&(e[3]=n.black[t]);return e}(e,n)),3===e.length?"rgb("+e.join(",")+")":4===e.length?"rgba("+e.join(",")+")":void a.error("Invalid number of arguments supplied in the color array: "+e.length+"\nThe array must have 3 or 4 colors.")}function d(e){return e.charAt(0).toUpperCase()+e.slice(1)}}e.$inject=["$cookies","$log","motionTheming"],angular.module("app.core").factory("motionGenerator",e)}(),function(){"use strict";angular.module("app.core").constant("motionPalettes",[{name:"motion-blue",options:{50:"#ebf1fa",100:"#c2d4ef",200:"#9ab8e5",300:"#78a0dc",400:"#5688d3",500:"#3470ca",600:"#2e62b1",700:"#275498",800:"#21467e",900:"#1a3865",A100:"#c2d4ef",A200:"#9ab8e5",A400:"#5688d3",A700:"#275498",contrastDefaultColor:"light",contrastDarkColors:"50 100 200 A100",contrastStrongLightColors:"300 400"}},{name:"motion-paleblue",options:{50:"#ececee",100:"#c5c6cb",200:"#9ea1a9",300:"#7d818c",400:"#5c616f",500:"#3c4252",600:"#353a48",700:"#2d323e",800:"#262933",900:"#1e2129",A100:"#c5c6cb",A200:"#9ea1a9",A400:"#5c616f",A700:"#2d323e",contrastDefaultColor:"light",contrastDarkColors:"50 100 200 A100",contrastStrongLightColors:"300 400"}}])}(),function(){"use strict";angular.module("app.core").constant("motionThemes",{default:{primary:{name:"motion-paleblue",hues:{default:"700","hue-1":"500","hue-2":"600","hue-3":"400"}},accent:{name:"light-blue",hues:{default:"600","hue-1":"400","hue-2":"700","hue-3":"A100"}},warn:{name:"red"},background:{name:"grey",hues:{default:"A100","hue-1":"A100","hue-2":"100","hue-3":"300"}}},pinkTheme:{primary:{name:"blue-grey",hues:{default:"800","hue-1":"600","hue-2":"400","hue-3":"A100"}},accent:{name:"pink",hues:{default:"400","hue-1":"300","hue-2":"600","hue-3":"A100"}},warn:{name:"blue"},background:{name:"grey",hues:{default:"A100","hue-1":"A100","hue-2":"100","hue-3":"300"}}},tealTheme:{primary:{name:"motion-blue",hues:{default:"900","hue-1":"600","hue-2":"500","hue-3":"A100"}},accent:{name:"teal",hues:{default:"500","hue-1":"400","hue-2":"600","hue-3":"A100"}},warn:{name:"deep-orange"},background:{name:"grey",hues:{default:"A100","hue-1":"A100","hue-2":"100","hue-3":"300"}}}})}(),function(){"use strict";function e(n,e,t){var a;angular.injector(["ngCookies"]).invoke(["$cookies",function(e){a=e}]);var i=a.getObject("motion.customTheme");i&&(t.custom=i),n.alwaysWatchTheme(!0),angular.forEach(e,function(e){n.definePalette(e.name,e.options)}),angular.forEach(t,function(e,t){n.theme(t).primaryPalette(e.primary.name,e.primary.hues).accentPalette(e.accent.name,e.accent.hues).warnPalette(e.warn.name,e.warn.hues).backgroundPalette(e.background.name,e.background.hues)})}e.$inject=["$mdThemingProvider","motionPalettes","motionThemes"],angular.module("app.core").config(e)}(),function(){"use strict";function e(t,n,e){var a={getRegisteredPalettes:function(){return e.PALETTES},getRegisteredThemes:function(){return e.THEMES},setActiveTheme:function(e){if(angular.isUndefined(a.themes.list[e]))return angular.isUndefined(a.themes.list.default)?void n.error('You must have at least one theme named "default"'):(n.warn('The theme "'+e+'" does not exist! Falling back to the "default" theme.'),a.themes.active.name="default",a.themes.active.theme=a.themes.list.default,void t.put("motion.selectedTheme",a.themes.active.name));a.themes.active.name=e,a.themes.active.theme=a.themes.list[e],t.put("motion.selectedTheme",e)},setThemesList:function(e){a.themes.list=e},themes:{list:{},active:{name:"",theme:{}}}};return a}e.$inject=["$cookies","$log","$mdTheming"],angular.module("app.core").service("motionTheming",e)}(),function(){"use strict";function e(t,s,o,r){this.search=function(t){for(var e=[],n=r.getFlatNavigation(),a=o.defer(),i=0;i<n.length;i+=1)n[i].uisref&&e.push(n[i]);t&&(e=e.filter(function(e){if(-1<angular.lowercase(e.title).search(angular.lowercase(t)))return!0}));return s(function(){a.resolve(e)},1e3),a.promise},this.searchResultClick=function(e){e.uisref&&(e.stateParams?t.go(e.state,e.stateParams):t.go(e.state))}}e.$inject=["$state","$timeout","$q","msNavigationService"],angular.module("app.errors.error-404").controller("Error404Controller",e)}(),function(){"use strict";function e(e,t){var n=this;n.code="",n.send=!1,n.error=e.params,n.sendReport=function(){t.post("/api/jira",n.error).then(function(e){n.send=!0,e.data&&(n.code=e.data.id)},function(e){n.send=!1})}}e.$inject=["$state","$http"],angular.module("app.errors.error-500").controller("Error500Controller",e)}(),function(){"use strict";function e(e,t){var n=this;n.currentUser=e.getCurrentUser(),n.cookieAlertHide=t.get("motion.cookieAlertHide:"+n.currentUser.id)||!1,n.cookieAlertOnClose=function(){t.put("motion.cookieAlertHide:"+n.currentUser.id,!0)}}e.$inject=["Auth","$cookies"],angular.module("app.footer").controller("FooterController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;s.form={},s.forgotPassword=function(){return i.auth.forgot(s.form).$promise.then(function(){t.success({title:n.instant("FORGOTPASSWORD.LINK_SENT"),msg:n.instant("FORGOTPASSWORD.LINNK_SENT_MESSAGE")})}).catch(function(e){e&&t.error({title:n.instant("FORGOTPASSWORD.PASSWORD_RESET_ERROR"),msg:e.data?e.data.message||e.message||e:e.message||e})})},s.onInit=function(){e.isLoggedIn()&&a.go("app.dashboards.general")}}e.$inject=["Auth","toasty","$translate","$state","api"],angular.module("app.forgot").controller("ForgotPasswordController",e)}(),function(){"use strict";function e(e,t){var n=this;n.currentUser=e.getCurrentUser(),n.newsAlertHide=t.get("motion.newsAlertHide:"+n.currentUser.id)||!1,n.newsAlertOnClose=function(){t.put("motion.newsAlertHide:"+n.currentUser.id,!0)}}e.$inject=["Auth","$cookies"],angular.module("app.header").controller("HeaderController",e)}(),function(){"use strict";function e(e){var t={baseUrl:"api/"};return t.auth=e(t.baseUrl+"auth/local",{},{local:{method:"post",url:t.baseUrl+"auth/local"},forgot:{method:"post",url:t.baseUrl+"auth/local/forgot"},reset:{method:"post",url:t.baseUrl+"auth/local/reset/:token",params:{token:"@token"}},google:{method:"post",url:t.baseUrl+"auth/google"}}),t.jira=e(t.baseUrl+"jira"),t.rpc=e(t.baseUrl+"rpc",{},{startMonitor:{method:"get",url:t.baseUrl+"rpc/voice/channels/:uniqueid/mixmonitor",params:{uniqueid:"@uniqueid"}},stopMonitor:{method:"get",url:t.baseUrl+"rpc/voice/channels/:uniqueid/stopmixmonitor",params:{uniqueid:"@uniqueid"}},getVoiceChannels:{method:"get",url:t.baseUrl+"rpc/voice/channels"},getVoiceQueues:{method:"get",url:t.baseUrl+"rpc/voice/queues"},getChatQueues:{method:"get",url:t.baseUrl+"rpc/chat/queues"},getMailQueues:{method:"get",url:t.baseUrl+"rpc/mail/queues"},getSmsQueues:{method:"get",url:t.baseUrl+"rpc/sms/queues"},getOpenchannelQueues:{method:"get",url:t.baseUrl+"rpc/openchannel/queues"},getFaxQueues:{method:"get",url:t.baseUrl+"rpc/fax/queues"},getVoiceQueuesPreview:{method:"get",url:t.baseUrl+"rpc/voice/queues/preview/:id"},getVoiceQueuesChannels:{method:"get",url:t.baseUrl+"rpc/voice/queues/channels"},getVoiceQueuesChannel:{method:"get",url:t.baseUrl+"rpc/voice/queues/channels/:uniqueid"},getVoiceQueuesChannelHangup:{method:"get",url:t.baseUrl+"rpc/voice/queues/channels/:uniqueid/hangup"},getVoiceQueuesChannelRedirect:{method:"get",url:t.baseUrl+"rpc/voice/queues/channels/:uniqueid/redirect/:exten"},getOutbound:{method:"get",url:t.baseUrl+"rpc/outbound"},getOutboundChannels:{method:"get",url:t.baseUrl+"rpc/outbound/channels"},getAgents:{method:"get",url:t.baseUrl+"rpc/agents"},setAgentCapacity:{method:"put",url:t.baseUrl+"rpc/agents/:id/capacity",params:{id:"@id"}},getTelephones:{method:"get",url:t.baseUrl+"rpc/telephones"},getTrunks:{method:"get",url:t.baseUrl+"rpc/trunks"},getCampaigns:{method:"get",url:t.baseUrl+"rpc/campaigns"},getMailAccounts:{method:"get",url:t.baseUrl+"rpc/mail/accounts"},getFaxAccounts:{method:"get",url:t.baseUrl+"rpc/fax/accounts"},getChatQueuesWaitingInteractions:{method:"get",url:t.baseUrl+"rpc/chat/queues/waitinginteractions"},getMailQueuesWaitingInteractions:{method:"get",url:t.baseUrl+"rpc/mail/queues/waitinginteractions"},getOpenchannelQueuesWaitingInteractions:{method:"get",url:t.baseUrl+"rpc/openchannel/queues/waitinginteractions"},getSmsQueuesWaitingInteractions:{method:"get",url:t.baseUrl+"rpc/sms/queues/waitinginteractions"},getFaxQueuesWaitingInteractions:{method:"get",url:t.baseUrl+"rpc/fax/queues/waitinginteractions"},mailQueueNotify:{method:"post",url:t.baseUrl+"rpc/mail/queues/:id/notify",params:{id:"@id"}},chatQueueNotify:{method:"post",url:t.baseUrl+"rpc/chat/queues/:id/notify",params:{id:"@id"}},faxQueueNotify:{method:"post",url:t.baseUrl+"rpc/fax/queues/:id/notify",params:{id:"@id"}},smsQueueNotify:{method:"post",url:t.baseUrl+"rpc/sms/queues/:id/notify",params:{id:"@id"}},openchannelQueueNotify:{method:"post",url:t.baseUrl+"rpc/openchannel/queues/:id/notify",params:{id:"@id"}},agentNotify:{method:"post",url:t.baseUrl+"rpc/agents/:id/notify",params:{id:"@id"}}}),t.version=e(t.baseUrl+"version",{},{fetch:{method:"get",url:t.baseUrl+"version/fetch"},reset:{method:"get",url:t.baseUrl+"version/reset"},pull:{method:"get",url:t.baseUrl+"version/pull"},restart:{method:"get",url:t.baseUrl+"version/restart"},migrations:{method:"get",url:t.baseUrl+"version/migrations"}}),t.system=e(t.baseUrl+"system",{},{killProcess:{method:"get",url:t.baseUrl+"system/process/:pid/kill",params:{pid:"@pid"}}}),t.pm2=e(t.baseUrl+"pm2/:id",{id:"@id"},{update:{method:"put",isArray:!0}}),t.user=e(t.baseUrl+"users/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"users/describe"},clone:{method:"post",url:t.baseUrl+"users/:id/clone",params:{includeAll:"@includeAll"}},bulkCreate:{method:"post",url:t.baseUrl+"users/create_many",isArray:!0},addContacts:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/contacts"},changePassword:{isArray:!1,method:"put",url:t.baseUrl+"users/:id/password"},addQueues:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/queues"},removeQueues:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/queues"},addAvatar:{isArray:!1,method:"post",url:t.baseUrl+"users/:id/avatar"},getAvatar:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/avatar"},getContacts:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/contacts"},getQueues:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/queues"},getVoiceQueuesRt:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/queues_rt"},getGroups:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/groups"},getRecordings:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/recordings"},getScreenRecordings:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/screen_recordings"},getChatInteractions:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/chat/interactions"},getOpenchannelInteractions:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/openchannel/interactions"},getMailInteractions:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/mail/interactions"},getSmsInteractions:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/sms/interactions"},getFaxInteractions:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/fax/interactions"},login:{isArray:!1,method:"post",url:t.baseUrl+"users/:id/login"},logout:{isArray:!1,method:"post",url:t.baseUrl+"users/:id/logout"},pause:{isArray:!1,method:"post",url:t.baseUrl+"users/:id/pause"},unpause:{isArray:!1,method:"post",url:t.baseUrl+"users/:id/unpause"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/teams"},getLists:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/lists"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/agents"},addChatInteractions:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/chat_interactions"},removeChatInteractions:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/chat_interactions"},addMailInteractions:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/mail_interactions"},removeMailInteractions:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/mail_interactions"},addFaxInteractions:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/fax_interactions"},removeFaxInteractions:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/fax_interactions"},addSmsInteractions:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/sms_interactions"},removeSmsInteractions:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/sms_interactions"},addOpenchannelInteractions:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/openchannel_interactions"},removeOpenchannelInteractions:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/openchannel_interactions"},getVoicePrefixes:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/prefixes"},getFaxAccounts:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/fax_accounts"},addFaxAccounts:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/fax_accounts"},removeFaxAccounts:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/fax_accounts"},getMailAccounts:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/mail_accounts"},addMailAccounts:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/mail_accounts"},removeMailAccounts:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/mail_accounts"},getOpenchannelAccounts:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/openchannel_accounts"},addOpenchannelAccounts:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/openchannel_accounts"},removeOpenchannelAccounts:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/openchannel_accounts"},getSmsAccounts:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/sms_accounts"},addSmsAccounts:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/sms_accounts"},removeSmsAccounts:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/sms_accounts"},getChatWebsites:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/chat_websites"},addChatWebsites:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/chat_websites"},removeChatWebsites:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/chat_websites"},getSquareProjects:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/square_projects"},addSquareProjects:{isArray:!0,method:"post",url:t.baseUrl+"users/:id/square_projects"},removeSquareProjects:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/square_projects"},getScheduledCalls:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/scheduled_calls"},getApiKey:{isArray:!1,method:"get",url:t.baseUrl+"users/:id/api_key"},createApiKey:{isArray:!1,method:"post",url:t.baseUrl+"users/:id/api_key"},removeApiKey:{isArray:!1,method:"delete",url:t.baseUrl+"users/:id/api_key"}}),t.voiceChanSpy=e(t.baseUrl+"voice/chanspy/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/chanspy/describe"},clone:{method:"post",url:t.baseUrl+"voice/chanspy/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceContext=e(t.baseUrl+"voice/contexts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/contexts/describe"},clone:{method:"post",url:t.baseUrl+"voice/contexts/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceExtension=e(t.baseUrl+"voice/extensions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/extensions/describe"},clone:{method:"post",url:t.baseUrl+"voice/extensions/:id/clone",params:{includeAll:"@includeAll"}},addApplications:{isArray:!1,method:"post",url:t.baseUrl+"voice/extensions/:id/applications"}}),t.voiceMusicOnHold=e(t.baseUrl+"voice/mohs/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/mohs/describe"},clone:{method:"post",url:t.baseUrl+"voice/mohs/:id/clone",params:{includeAll:"@includeAll"}},addSound:{isArray:!1,method:"post",url:t.baseUrl+"voice/mohs/:id/sounds"},removeSound:{isArray:!1,method:"delete",url:t.baseUrl+"voice/mohs/:id/sounds/:id2"},getSounds:{isArray:!1,method:"get",url:t.baseUrl+"voice/mohs/:id/sounds"}}),t.voiceQueue=e(t.baseUrl+"voice/queues/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/queues/describe"},clone:{method:"post",url:t.baseUrl+"voice/queues/:id/clone",params:{includeAll:"@includeAll"}},getHoppers:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/hoppers"},getHopperHistories:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/hopper_histories"},getHopperFinals:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/hopper_finals"},getHopperBlacks:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/hopper_black"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"voice/queues/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"voice/queues/:id/teams"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"voice/queues/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"voice/queues/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/users"},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/members"},getLists:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/lists"},addLists:{isArray:!0,method:"post",url:t.baseUrl+"voice/queues/:id/lists"},removeLists:{isArray:!0,method:"delete",url:t.baseUrl+"voice/queues/:id/lists"},getBlackLists:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/:id/blacklists"},addBlackLists:{isArray:!0,method:"post",url:t.baseUrl+"voice/queues/:id/blacklists"},removeBlackLists:{isArray:!0,method:"delete",url:t.baseUrl+"voice/queues/:id/blacklists"}}),t.voiceRecording=e(t.baseUrl+"voice/recordings/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/recordings/describe"},clone:{method:"post",url:t.baseUrl+"voice/recordings/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"voice/recordings/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}},downloads:{isArray:!1,method:"get",url:t.baseUrl+"voice/recordings/:id/downloads"}}),t.screenRecording=e(t.baseUrl+"screen/recordings/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"screen/recordings/describe"},clone:{method:"post",url:t.baseUrl+"screen/recordings/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"screen/recordings/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.voiceMail=e(t.baseUrl+"voice/mails/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/mails/describe"},clone:{method:"post",url:t.baseUrl+"voice/mails/:id/clone",params:{includeAll:"@includeAll"}},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"voice/mails/:id/messages"}}),t.voiceMailMessage=e(t.baseUrl+"voice/mails/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/mails/messages/describe"},clone:{method:"post",url:t.baseUrl+"voice/mails/messages/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"voice/mails/messages/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.voiceCallReport=e(t.baseUrl+"voice/calls/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/calls/reports/describe"},clone:{method:"post",url:t.baseUrl+"voice/calls/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceDialReport=e(t.baseUrl+"voice/dials/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/dials/reports/describe"},clone:{method:"post",url:t.baseUrl+"voice/dials/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceAgentReport=e(t.baseUrl+"voice/agents/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/agents/reports/describe"},clone:{method:"post",url:t.baseUrl+"voice/agents/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceQueueReport=e(t.baseUrl+"voice/queues/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/queues/reports/describe"},clone:{method:"post",url:t.baseUrl+"voice/queues/reports/:id/clone",params:{includeAll:"@includeAll"}},getVoiceQueuesReport:{isArray:!1,method:"get",url:t.baseUrl+"voice/queues/reports/index"}}),t.memberReport=e(t.baseUrl+"members/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"members/reports/describe"},clone:{method:"post",url:t.baseUrl+"members/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.trunk=e(t.baseUrl+"trunks/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"trunks/describe"},clone:{method:"post",url:t.baseUrl+"trunks/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceTransferReport=e(t.baseUrl+"voice/transfers/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/transfers/reports/describe"},clone:{method:"post",url:t.baseUrl+"voice/transfers/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.mailServerOut=e(t.baseUrl+"mail/out_servers/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/out_servers/describe"},clone:{method:"post",url:t.baseUrl+"mail/out_servers/:id/clone",params:{includeAll:"@includeAll"}}}),t.mailAccount=e(t.baseUrl+"mail/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/accounts/describe"},clone:{method:"post",url:t.baseUrl+"mail/accounts/:id/clone",params:{includeAll:"@includeAll"}},addDisposition:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/dispositions"},getDispositions:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/dispositions"},removeDispositions:{isArray:!1,method:"delete",url:t.baseUrl+"mail/accounts/:id/dispositions"},addAnswer:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/canned_answers"},getAnswers:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/canned_answers"},removeAnswers:{isArray:!1,method:"delete",url:t.baseUrl+"mail/accounts/:id/canned_answers"},getImap:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/in_servers"},addImap:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/in_servers"},removeImap:{isArray:!1,method:"delete",url:t.baseUrl+"mail/accounts/:id/in_servers"},getSmtp:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/out_servers"},addSmtp:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/out_servers"},removeSmtp:{isArray:!1,method:"delete",url:t.baseUrl+"mail/accounts/:id/out_servers"},addInteraction:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/interactions"},getInteractions:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/interactions"},addApplications:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/applications"},getApplications:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/applications"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/messages"},send:{isArray:!1,method:"post",url:t.baseUrl+"mail/accounts/:id/send"},verifySmtp:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/verify"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"mail/accounts/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"mail/accounts/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"mail/accounts/:id/users"}}),t.mailQueue=e(t.baseUrl+"mail/queues/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/queues/describe"},clone:{method:"post",url:t.baseUrl+"mail/queues/:id/clone",params:{includeAll:"@includeAll"}},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"mail/queues/:id/members"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"mail/queues/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"mail/queues/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"mail/queues/:id/teams"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"mail/queues/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"mail/queues/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"mail/queues/:id/users"}}),t.mailSubstatus=e(t.baseUrl+"mail/substatuses/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/substatuses/describe"},clone:{method:"post",url:t.baseUrl+"mail/substatuses/:id/clone",params:{includeAll:"@includeAll"}}}),t.mailInteraction=e(t.baseUrl+"mail/interactions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/interactions/describe"},clone:{method:"post",url:t.baseUrl+"mail/interactions/:id/clone",params:{includeAll:"@includeAll"}},addMessage:{isArray:!1,method:"post",url:t.baseUrl+"mail/interactions/:id/messages"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"mail/interactions/:id/messages"},addTags:{isArray:!1,method:"post",url:t.baseUrl+"mail/interactions/:id/tags"},removeTags:{isArray:!1,method:"delete",url:t.baseUrl+"mail/interactions/:id/tags"},download:{isArray:!1,method:"get",url:t.baseUrl+"mail/interactions/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.mailMessage=e(t.baseUrl+"mail/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/messages/describe"},clone:{method:"post",url:t.baseUrl+"mail/messages/:id/clone",params:{includeAll:"@includeAll"}},accept:{isArray:!1,method:"put",url:t.baseUrl+"mail/messages/:id/accept"},reject:{isArray:!1,method:"put",url:t.baseUrl+"mail/messages/:id/reject"},download:{isArray:!1,method:"get",url:t.baseUrl+"mail/messages/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.mailApplication=e(t.baseUrl+"mail/applications/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/applications/describe"},clone:{method:"post",url:t.baseUrl+"mail/applications/:id/clone",params:{includeAll:"@includeAll"}}}),t.mailQueueReport=e(t.baseUrl+"mail/reports/queue/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/reports/queue/describe"},clone:{method:"post",url:t.baseUrl+"mail/reports/queue/:id/clone",params:{includeAll:"@includeAll"}}}),t.dashboard=e(t.baseUrl+"dashboards/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"dashboards/describe"},clone:{method:"post",url:t.baseUrl+"dashboards/:id/clone",params:{includeAll:"@includeAll"}},addItem:{isArray:!1,method:"post",url:t.baseUrl+"dashboards/:id/items"},getItems:{isArray:!1,method:"get",url:t.baseUrl+"dashboards/:id/items"}}),t.dashboardItem=e(t.baseUrl+"dashboards/items/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"dashboards/items/describe"},clone:{method:"post",url:t.baseUrl+"dashboards/items/:id/clone",params:{includeAll:"@includeAll"}}}),t.faxAccount=e(t.baseUrl+"fax/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/accounts/describe"},clone:{method:"post",url:t.baseUrl+"fax/accounts/:id/clone",params:{includeAll:"@includeAll"}},addDisposition:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/:id/dispositions"},getDispositions:{isArray:!1,method:"get",url:t.baseUrl+"fax/accounts/:id/dispositions"},removeDispositions:{isArray:!1,method:"delete",url:t.baseUrl+"fax/accounts/:id/dispositions"},addAnswer:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/:id/canned_answers"},getAnswers:{isArray:!1,method:"get",url:t.baseUrl+"fax/accounts/:id/canned_answers"},removeAnswers:{isArray:!1,method:"delete",url:t.baseUrl+"fax/accounts/:id/canned_answers"},addInteraction:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/:id/interactions"},getInteractions:{isArray:!1,method:"get",url:t.baseUrl+"fax/accounts/:id/interactions"},addApplications:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/:id/applications"},getApplications:{isArray:!1,method:"get",url:t.baseUrl+"fax/accounts/:id/applications"},addAccountApplications:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/addaccountapplications"},updateAccountApplications:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/updateaccountapplications"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"fax/accounts/:id/messages"},send:{isArray:!1,method:"post",url:t.baseUrl+"fax/accounts/:id/send"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"fax/accounts/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"fax/accounts/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"fax/accounts/:id/users"}}),t.faxApplication=e(t.baseUrl+"fax/applications/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/applications/describe"},clone:{method:"post",url:t.baseUrl+"fax/applications/:id/clone",params:{includeAll:"@includeAll"}}}),t.faxInteraction=e(t.baseUrl+"fax/interactions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/interactions/describe"},clone:{method:"post",url:t.baseUrl+"fax/interactions/:id/clone",params:{includeAll:"@includeAll"}},addMessage:{isArray:!1,method:"post",url:t.baseUrl+"fax/interactions/:id/messages"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"fax/interactions/:id/messages"},addTags:{isArray:!1,method:"post",url:t.baseUrl+"fax/interactions/:id/tags"},removeTags:{isArray:!1,method:"delete",url:t.baseUrl+"fax/interactions/:id/tags"},download:{isArray:!1,method:"get",url:t.baseUrl+"fax/interactions/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.faxMessage=e(t.baseUrl+"fax/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/messages/describe"},clone:{method:"post",url:t.baseUrl+"fax/messages/:id/clone",params:{includeAll:"@includeAll"}},accept:{isArray:!1,method:"put",url:t.baseUrl+"fax/messages/:id/accept"},reject:{isArray:!1,method:"put",url:t.baseUrl+"fax/messages/:id/reject"},download:{isArray:!1,method:"get",url:t.baseUrl+"fax/messages/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.faxQueue=e(t.baseUrl+"fax/queues/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/queues/describe"},clone:{method:"post",url:t.baseUrl+"fax/queues/:id/clone",params:{includeAll:"@includeAll"}},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"fax/queues/:id/members"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"fax/queues/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"fax/queues/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"fax/queues/:id/teams"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"fax/queues/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"fax/queues/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"fax/queues/:id/users"}}),t.faxQueueReport=e(t.baseUrl+"fax/reports/queue/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/reports/queue/describe"},clone:{method:"post",url:t.baseUrl+"fax/reports/queue/:id/clone",params:{includeAll:"@includeAll"}}}),t.smsAccount=e(t.baseUrl+"sms/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/accounts/describe"},clone:{method:"post",url:t.baseUrl+"sms/accounts/:id/clone",params:{includeAll:"@includeAll"}},addDisposition:{isArray:!1,method:"post",url:t.baseUrl+"sms/accounts/:id/dispositions"},getDispositions:{isArray:!1,method:"get",url:t.baseUrl+"sms/accounts/:id/dispositions"},removeDispositions:{isArray:!1,method:"delete",url:t.baseUrl+"sms/accounts/:id/dispositions"},addAnswer:{isArray:!1,method:"post",url:t.baseUrl+"sms/accounts/:id/canned_answers"},getAnswers:{isArray:!1,method:"get",url:t.baseUrl+"sms/accounts/:id/canned_answers"},removeAnswers:{isArray:!1,method:"delete",url:t.baseUrl+"sms/accounts/:id/canned_answers"},notify:{isArray:!1,method:"post",url:t.baseUrl+"sms/accounts/:id/notify"},addApplications:{isArray:!1,method:"post",url:t.baseUrl+"sms/accounts/:id/applications"},getApplications:{isArray:!1,method:"get",url:t.baseUrl+"sms/accounts/:id/applications"},getInteractions:{isArray:!1,method:"get",url:t.baseUrl+"sms/accounts/:id/interactions"},send:{isArray:!1,method:"post",url:t.baseUrl+"sms/accounts/:id/send"},status:{isArray:!1,method:"post",url:t.baseUrl+"sms/accounts/:id/status"},statusGet:{isArray:!1,method:"get",url:t.baseUrl+"sms/accounts/:id/status"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"sms/accounts/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"sms/accounts/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"sms/accounts/:id/users"}}),t.smsApplication=e(t.baseUrl+"sms/applications/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/applications/describe"},clone:{method:"post",url:t.baseUrl+"sms/applications/:id/clone",params:{includeAll:"@includeAll"}}}),t.smsInteraction=e(t.baseUrl+"sms/interactions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/interactions/describe"},clone:{method:"post",url:t.baseUrl+"sms/interactions/:id/clone",params:{includeAll:"@includeAll"}},addMessage:{isArray:!1,method:"post",url:t.baseUrl+"sms/interactions/:id/messages"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"sms/interactions/:id/messages"},addTags:{isArray:!1,method:"post",url:t.baseUrl+"sms/interactions/:id/tags"},removeTags:{isArray:!1,method:"delete",url:t.baseUrl+"sms/interactions/:id/tags"},download:{isArray:!1,method:"get",url:t.baseUrl+"sms/interactions/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.smsMessage=e(t.baseUrl+"sms/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/messages/describe"},clone:{method:"post",url:t.baseUrl+"sms/messages/:id/clone",params:{includeAll:"@includeAll"}},accept:{isArray:!1,method:"put",url:t.baseUrl+"sms/messages/:id/accept"},reject:{isArray:!1,method:"put",url:t.baseUrl+"sms/messages/:id/reject"},status:{isArray:!1,method:"post",url:t.baseUrl+"sms/messages/:id/status"}}),t.smsQueue=e(t.baseUrl+"sms/queues/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/queues/describe"},clone:{method:"post",url:t.baseUrl+"sms/queues/:id/clone",params:{includeAll:"@includeAll"}},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"sms/queues/:id/members"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"sms/queues/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"sms/queues/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"sms/queues/:id/teams"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"sms/queues/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"sms/queues/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"sms/queues/:id/users"}}),t.openchannelAccount=e(t.baseUrl+"openchannel/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/accounts/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/accounts/:id/clone",params:{includeAll:"@includeAll"}},addDisposition:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/accounts/:id/dispositions"},getDispositions:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/accounts/:id/dispositions"},removeDispositions:{isArray:!1,method:"delete",url:t.baseUrl+"openchannel/accounts/:id/dispositions"},addAnswer:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/accounts/:id/canned_answers"},getAnswers:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/accounts/:id/canned_answers"},removeAnswers:{isArray:!1,method:"delete",url:t.baseUrl+"openchannel/accounts/:id/canned_answers"},notify:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/accounts/:id/notify"},addApplications:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/accounts/:id/applications"},getApplications:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/accounts/:id/applications"},getInteractions:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/accounts/:id/interactions"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"openchannel/accounts/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"openchannel/accounts/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/accounts/:id/users"},send:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/accounts/:id/send"}}),t.openchannelApplication=e(t.baseUrl+"openchannel/applications/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/applications/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/applications/:id/clone",params:{includeAll:"@includeAll"}}}),t.openchannelInteraction=e(t.baseUrl+"openchannel/interactions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/interactions/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/interactions/:id/clone",params:{includeAll:"@includeAll"}},addMessage:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/interactions/:id/messages"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/interactions/:id/messages"},addTags:{isArray:!1,method:"post",url:t.baseUrl+"openchannel/interactions/:id/tags"},removeTags:{isArray:!1,method:"delete",url:t.baseUrl+"openchannel/interactions/:id/tags"},download:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/interactions/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.openchannelMessage=e(t.baseUrl+"openchannel/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/messages/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/messages/:id/clone",params:{includeAll:"@includeAll"}},accept:{isArray:!1,method:"put",url:t.baseUrl+"openchannel/messages/:id/accept"},reject:{isArray:!1,method:"put",url:t.baseUrl+"openchannel/messages/:id/reject"}}),t.openchannelQueue=e(t.baseUrl+"openchannel/queues/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/queues/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/queues/:id/clone",params:{includeAll:"@includeAll"}},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/queues/:id/members"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/queues/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"openchannel/queues/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"openchannel/queues/:id/teams"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"openchannel/queues/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"openchannel/queues/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"openchannel/queues/:id/users"}}),t.chatWebsite=e(t.baseUrl+"chat/websites/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/websites/describe"},clone:{method:"post",url:t.baseUrl+"chat/websites/:id/clone",params:{includeAll:"@includeAll"}},addDisposition:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/dispositions"},getDispositions:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/dispositions"},removeDispositions:{isArray:!1,method:"delete",url:t.baseUrl+"chat/websites/:id/dispositions"},addAnswer:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/canned_answers"},getAnswers:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/canned_answers"},removeAnswers:{isArray:!1,method:"delete",url:t.baseUrl+"chat/websites/:id/canned_answers"},addLogo:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/logo"},addAvatar:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/avatar"},addCustomerAvatar:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/customer_avatar"},addSystemAvatar:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/system_avatar"},getLogo:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/logo"},getAvatar:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/avatar"},getCustomerAvatar:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/customer_avatar"},getSystemAvatar:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/system_avatar"},notify:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/notify"},offline:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/offline"},addInteraction:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/interactions"},getInteractions:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/interactions"},getSnippet:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/snippet"},addApplications:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/applications"},getApplications:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/applications"},addProactiveActions:{isArray:!1,method:"post",url:t.baseUrl+"chat/websites/:id/proactive_actions"},getProactiveActions:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/proactive_actions"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/fields"},getOfflineMessages:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/offline_messages"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"chat/websites/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"chat/websites/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"chat/websites/:id/users"}}),t.openchannelQueueReport=e(t.baseUrl+"openchannel/reports/queue/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/reports/queue/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/reports/queue/:id/clone",params:{includeAll:"@includeAll"}}}),t.chatApplication=e(t.baseUrl+"chat/applications/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/applications/describe"},clone:{method:"post",url:t.baseUrl+"chat/applications/:id/clone",params:{includeAll:"@includeAll"}}}),t.chatInteraction=e(t.baseUrl+"chat/interactions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/interactions/describe"},clone:{method:"post",url:t.baseUrl+"chat/interactions/:id/clone",params:{includeAll:"@includeAll"}},customUpdate:{isArray:!1,method:"put",url:t.baseUrl+"chat/interactions/:id/custom_update"},abandon:{isArray:!1,method:"put",url:t.baseUrl+"chat/interactions/:id/abandon"},attachmentUpload:{isArray:!1,method:"post",url:t.baseUrl+"chat/interactions/:id/attachment_upload"},attachmentDownload:{isArray:!1,method:"get",url:t.baseUrl+"chat/interactions/:id/attachment_download"},close:{isArray:!1,method:"put",url:t.baseUrl+"chat/interactions/:id/close"},addMessage:{isArray:!1,method:"post",url:t.baseUrl+"chat/interactions/:id/messages"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"chat/interactions/:id/messages"},getMyMessages:{isArray:!1,method:"get",url:t.baseUrl+"chat/interactions/:id/my_messages"},addTags:{isArray:!1,method:"post",url:t.baseUrl+"chat/interactions/:id/tags"},removeTags:{isArray:!1,method:"delete",url:t.baseUrl+"chat/interactions/:id/tags"},download:{isArray:!1,method:"get",url:t.baseUrl+"chat/interactions/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.chatMessage=e(t.baseUrl+"chat/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/messages/describe"},clone:{method:"post",url:t.baseUrl+"chat/messages/:id/clone",params:{includeAll:"@includeAll"}},accept:{isArray:!1,method:"put",url:t.baseUrl+"chat/messages/:id/accept"},reject:{isArray:!1,method:"put",url:t.baseUrl+"chat/messages/:id/reject"}}),t.chatOfflineMessage=e(t.baseUrl+"chat/offline_messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/offline_messages/describe"},clone:{method:"post",url:t.baseUrl+"chat/offline_messages/:id/clone",params:{includeAll:"@includeAll"}}}),t.chatQueue=e(t.baseUrl+"chat/queues/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/queues/describe"},clone:{method:"post",url:t.baseUrl+"chat/queues/:id/clone",params:{includeAll:"@includeAll"}},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"chat/queues/:id/members"},getTeams:{isArray:!1,method:"get",url:t.baseUrl+"chat/queues/:id/teams"},addTeams:{isArray:!0,method:"post",url:t.baseUrl+"chat/queues/:id/teams"},removeTeams:{isArray:!1,method:"delete",url:t.baseUrl+"chat/queues/:id/teams"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"chat/queues/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"chat/queues/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"chat/queues/:id/users"}}),t.chatGroup=e(t.baseUrl+"chat/groups/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/groups/describe"},clone:{method:"post",url:t.baseUrl+"chat/groups/:id/clone",params:{includeAll:"@includeAll"}},getUnread:{isArray:!1,method:"get",url:t.baseUrl+"chat/groups/:id/unread"},addMembers:{isArray:!0,method:"post",url:t.baseUrl+"chat/groups/:id/members"},getMembers:{isArray:!1,method:"get",url:t.baseUrl+"chat/groups/:id/members"},removeMembers:{isArray:!1,method:"delete",url:t.baseUrl+"chat/groups/:id/members"},addMessage:{isArray:!1,method:"post",url:t.baseUrl+"chat/groups/:id/messages"},getMessages:{isArray:!1,method:"get",url:t.baseUrl+"chat/groups/:id/messages"}}),t.chatProactiveAction=e(t.baseUrl+"chat/proactive_actions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/proactive_actions/describe"},clone:{method:"post",url:t.baseUrl+"chat/proactive_actions/:id/clone",params:{includeAll:"@includeAll"}}}),t.cmCompany=e(t.baseUrl+"cm/companies/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/companies/describe"},clone:{method:"post",url:t.baseUrl+"cm/companies/:id/clone",params:{includeAll:"@includeAll"}},addContacts:{isArray:!1,method:"post",url:t.baseUrl+"cm/companies/:id/contacts"},getContacts:{isArray:!1,method:"get",url:t.baseUrl+"cm/companies/:id/contacts"}}),t.cmContact=e(t.baseUrl+"cm/contacts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/contacts/describe"},clone:{method:"post",url:t.baseUrl+"cm/contacts/:id/clone",params:{includeAll:"@includeAll"}},merge:{isArray:!1,method:"post",url:t.baseUrl+"cm/contacts/merge"},bulkCreate:{isArray:!1,method:"post",url:t.baseUrl+"cm/contacts/create_many"},getTags:{isArray:!1,method:"get",url:t.baseUrl+"cm/contacts/:id/tags"},setTags:{isArray:!0,method:"post",url:t.baseUrl+"cm/contacts/:id/tags"},getHoppers:{isArray:!1,method:"get",url:t.baseUrl+"cm/contacts/:id/hoppers"},getHopperHistories:{isArray:!1,method:"get",url:t.baseUrl+"cm/contacts/:id/hopper_histories"},getHopperFinals:{isArray:!1,method:"get",url:t.baseUrl+"cm/contacts/:id/hopper_finals"},getJscriptySessions:{isArray:!1,method:"get",url:t.baseUrl+"cm/contacts/:id/jscripty_sessions"},uploadCsv:{isArray:!1,method:"post",url:t.baseUrl+"cm/contacts/csv"},upload:{isArray:!1,method:"post",url:t.baseUrl+"cm/contacts/upload"},import:{isArray:!1,method:"post",url:t.baseUrl+"cm/contacts/upload/:id"}}),t.cmHopper=e(t.baseUrl+"cm/hopper/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/hopper/describe"},clone:{method:"post",url:t.baseUrl+"cm/hopper/:id/clone",params:{includeAll:"@includeAll"}},getPreview:{isArray:!1,method:"post",url:t.baseUrl+"cm/hopper/preview"},getOpenContacts:{isArray:!1,method:"get",url:t.baseUrl+"cm/hopper/opencontacts"}}),t.cmHopperBlack=e(t.baseUrl+"cm/hopper_black/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/hopper_black/describe"},clone:{method:"post",url:t.baseUrl+"cm/hopper_black/:id/clone",params:{includeAll:"@includeAll"}}}),t.cmHopperFinal=e(t.baseUrl+"cm/hopper_final/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/hopper_final/describe"},clone:{method:"post",url:t.baseUrl+"cm/hopper_final/:id/clone",params:{includeAll:"@includeAll"}},countContactsQueueCampaignHopperFinal:{isArray:!0,method:"get",url:t.baseUrl+"cm/hopper_final/voice/queue/countAttributes/:id"},countContactsIvrCampaignHopperFinal:{isArray:!0,method:"get",url:t.baseUrl+"cm/hopper_final/campaign/countAttributes/:id"},moveContactsQueueCampaignHopperFinal:{isArray:!0,method:"post",url:t.baseUrl+"cm/hopper_final/voice/queue/moveContacts/:id"},moveContactsIvrCampaignHopperFinal:{isArray:!0,method:"post",url:t.baseUrl+"cm/hopper_final/voice/campaign/moveContacts/:id"},checkContactHopper:{isArray:!1,method:"post",url:t.baseUrl+"cm/hopper_final/checkContactHopper"}}),t.cmHopperHistory=e(t.baseUrl+"cm/hopper_history/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/hopper_history/describe"},clone:{method:"post",url:t.baseUrl+"cm/hopper_history/:id/clone",params:{includeAll:"@includeAll"}}}),t.cmCustomField=e(t.baseUrl+"cm/custom_fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/custom_fields/describe"},clone:{method:"post",url:t.baseUrl+"cm/custom_fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.action=e(t.baseUrl+"actions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"actions/describe"},clone:{method:"post",url:t.baseUrl+"actions/:id/clone",params:{includeAll:"@includeAll"}}}),t.automation=e(t.baseUrl+"automations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"automations/describe"},clone:{method:"post",url:t.baseUrl+"automations/:id/clone",params:{includeAll:"@includeAll"}},addConditions:{isArray:!1,method:"post",url:t.baseUrl+"automations/:id/conditions"},getConditions:{isArray:!1,method:"get",url:t.baseUrl+"automations/:id/conditions"},addActions:{isArray:!1,method:"post",url:t.baseUrl+"automations/:id/actions"},getActions:{isArray:!1,method:"get",url:t.baseUrl+"automations/:id/actions"}}),t.cannedAnswer=e(t.baseUrl+"canned_answers/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"canned_answers/describe"},clone:{method:"post",url:t.baseUrl+"canned_answers/:id/clone",params:{includeAll:"@includeAll"}}}),t.disposition=e(t.baseUrl+"dispositions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"dispositions/describe"},clone:{method:"post",url:t.baseUrl+"dispositions/:id/clone",params:{includeAll:"@includeAll"}}}),t.condition=e(t.baseUrl+"conditions/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"conditions/describe"},clone:{method:"post",url:t.baseUrl+"conditions/:id/clone",params:{includeAll:"@includeAll"}}}),t.interval=e(t.baseUrl+"intervals/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"intervals/describe"},clone:{method:"post",url:t.baseUrl+"intervals/:id/clone",params:{includeAll:"@includeAll"}},addInterval:{isArray:!1,method:"post",url:t.baseUrl+"intervals/:id/sub_intervals"},getIntervals:{isArray:!1,method:"get",url:t.baseUrl+"intervals/:id/sub_intervals"},addIntervals:{isArray:!0,method:"post",url:t.baseUrl+"intervals/:id/sub_intervals/create_many"}}),t.pause=e(t.baseUrl+"pauses/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"pauses/describe"},clone:{method:"post",url:t.baseUrl+"pauses/:id/clone",params:{includeAll:"@includeAll"}}}),t.cdr=e(t.baseUrl+"cdr/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cdr/describe"},clone:{method:"post",url:t.baseUrl+"cdr/:id/clone",params:{includeAll:"@includeAll"}}}),t.voiceQueuesLog=e(t.baseUrl+"voiceQueuesLog/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voiceQueuesLog/describe"},clone:{method:"post",url:t.baseUrl+"voiceQueuesLog/:id/clone",params:{includeAll:"@includeAll"}}}),t.schedule=e(t.baseUrl+"schedules/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"schedules/describe"},clone:{method:"post",url:t.baseUrl+"schedules/:id/clone",params:{includeAll:"@includeAll"}},run:{isArray:!1,method:"get",url:t.baseUrl+"schedules/:id/run"}}),t.sound=e(t.baseUrl+"sounds/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sounds/describe"},clone:{method:"post",url:t.baseUrl+"sounds/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"sounds/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}},delete:{isArray:!1,method:"delete",url:t.baseUrl+"sounds/:id"}}),t.tag=e(t.baseUrl+"tags/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"tags/describe"},clone:{method:"post",url:t.baseUrl+"tags/:id/clone",params:{includeAll:"@includeAll"}}}),t.template=e(t.baseUrl+"templates/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"templates/describe"},clone:{method:"post",url:t.baseUrl+"templates/:id/clone",params:{includeAll:"@includeAll"}}}),t.trigger=e(t.baseUrl+"triggers/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"triggers/describe"},clone:{method:"post",url:t.baseUrl+"triggers/:id/clone",params:{includeAll:"@includeAll"}},addAllCondition:{isArray:!1,method:"post",url:t.baseUrl+"triggers/:id/all_conditions"},addAnyCondition:{isArray:!1,method:"post",url:t.baseUrl+"triggers/:id/any_conditions"},getAllConditions:{isArray:!1,method:"get",url:t.baseUrl+"triggers/:id/all_conditions"},getAnyConditions:{isArray:!1,method:"get",url:t.baseUrl+"triggers/:id/any_conditions"},addAction:{isArray:!1,method:"post",url:t.baseUrl+"triggers/:id/actions"},getActions:{isArray:!1,method:"get",url:t.baseUrl+"triggers/:id/actions"}}),t.variable=e(t.baseUrl+"variables/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"variables/describe"},clone:{method:"post",url:t.baseUrl+"variables/:id/clone",params:{includeAll:"@includeAll"}}}),t.integration=e(t.baseUrl+"integrations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/:id/clone",params:{includeAll:"@includeAll"}}}),t.integrationReport=e(t.baseUrl+"integrations/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/reports/describe"},clone:{method:"post",url:t.baseUrl+"integrations/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.analyticCustomReport=e(t.baseUrl+"analytics/custom_reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"analytics/custom_reports/describe"},clone:{method:"post",url:t.baseUrl+"analytics/custom_reports/:id/clone",params:{includeAll:"@includeAll"}},preview:{isArray:!0,method:"get",url:t.baseUrl+"analytics/custom_reports/:id/preview"},run:{isArray:!1,method:"get",url:t.baseUrl+"analytics/custom_reports/:id/run"},query:{isArray:!1,method:"get",url:t.baseUrl+"analytics/custom_reports/:id/query"}}),t.analyticDefaultReport=e(t.baseUrl+"analytics/default_reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"analytics/default_reports/describe"},clone:{method:"post",url:t.baseUrl+"analytics/default_reports/:id/clone",params:{includeAll:"@includeAll"}},preview:{isArray:!0,method:"get",url:t.baseUrl+"analytics/default_reports/:id/preview"},run:{isArray:!1,method:"get",url:t.baseUrl+"analytics/default_reports/:id/run"},query:{isArray:!1,method:"get",url:t.baseUrl+"analytics/default_reports/:id/query"}}),t.analyticExtractedReport=e(t.baseUrl+"analytics/extracted_reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"analytics/extracted_reports/describe"},clone:{method:"post",url:t.baseUrl+"analytics/extracted_reports/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"analytics/extracted_reports/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.analyticMetric=e(t.baseUrl+"analytics/metrics/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"analytics/metrics/describe"},clone:{method:"post",url:t.baseUrl+"analytics/metrics/:id/clone",params:{includeAll:"@includeAll"}}}),t.analyticFieldReport=e(t.baseUrl+"analytics/field_reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"analytics/field_reports/describe"},clone:{method:"post",url:t.baseUrl+"analytics/field_reports/:id/clone",params:{includeAll:"@includeAll"}},bulkCreate:{method:"post",url:t.baseUrl+"analytics/field_reports/create_many",isArray:!0},bulkDestroy:{method:"delete",url:t.baseUrl+"analytics/field_reports/destroy_many",isArray:!0},addFields:{isArray:!0,method:"post",url:t.baseUrl+"analytics/field_reports/:id/create_many"}}),t.analyticTreeReport=e(t.baseUrl+"analytics/tree_reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"analytics/tree_reports/describe"},clone:{method:"post",url:t.baseUrl+"analytics/tree_reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.intSalesforceAccount=e(t.baseUrl+"integrations/salesforce/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/salesforce/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/salesforce/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/salesforce/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/salesforce/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/salesforce/accounts/:id/fields"}}),t.intSalesforceConfiguration=e(t.baseUrl+"integrations/salesforce/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/salesforce/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/salesforce/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/salesforce/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/salesforce/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/salesforce/configurations/:id/descriptions"}}),t.intSalesforceField=e(t.baseUrl+"integrations/salesforce/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/salesforce/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/salesforce/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intSugarcrmAccount=e(t.baseUrl+"integrations/sugarcrm/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/sugarcrm/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/sugarcrm/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/sugarcrm/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/sugarcrm/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/sugarcrm/accounts/:id/fields"}}),t.intSugarcrmConfiguration=e(t.baseUrl+"integrations/sugarcrm/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/sugarcrm/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/sugarcrm/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/sugarcrm/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/sugarcrm/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/sugarcrm/configurations/:id/descriptions"}}),t.intSugarcrmField=e(t.baseUrl+"integrations/sugarcrm/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/sugarcrm/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/sugarcrm/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intDeskAccount=e(t.baseUrl+"integrations/desk/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/desk/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/desk/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/desk/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/desk/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/desk/accounts/:id/fields"}}),t.intDeskConfiguration=e(t.baseUrl+"integrations/desk/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/desk/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/desk/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/desk/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/desk/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/desk/configurations/:id/descriptions"},getTags:{isArray:!1,method:"get",url:t.baseUrl+"integrations/desk/configurations/:id/tags"},setTags:{isArray:!0,method:"post",url:t.baseUrl+"integrations/desk/configurations/:id/tags"}}),t.intDeskField=e(t.baseUrl+"integrations/desk/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/desk/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/desk/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intZohoAccount=e(t.baseUrl+"integrations/zoho/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/zoho/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/zoho/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zoho/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/zoho/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zoho/accounts/:id/fields"}}),t.intZohoConfiguration=e(t.baseUrl+"integrations/zoho/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/zoho/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/zoho/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zoho/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zoho/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zoho/configurations/:id/descriptions"}}),t.intZohoField=e(t.baseUrl+"integrations/zoho/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/zoho/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/zoho/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intZendeskAccount=e(t.baseUrl+"integrations/zendesk/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/zendesk/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/zendesk/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zendesk/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/zendesk/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zendesk/accounts/:id/fields"}}),t.intZendeskConfiguration=e(t.baseUrl+"integrations/zendesk/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/zendesk/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/zendesk/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zendesk/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zendesk/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zendesk/configurations/:id/descriptions"},getTags:{isArray:!1,method:"get",url:t.baseUrl+"integrations/zendesk/configurations/:id/tags"},setTags:{isArray:!0,method:"post",url:t.baseUrl+"integrations/zendesk/configurations/:id/tags"}}),t.intZendeskField=e(t.baseUrl+"integrations/zendesk/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/zendesk/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/zendesk/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intFreshdeskAccount=e(t.baseUrl+"integrations/freshdesk/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/freshdesk/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/freshdesk/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/freshdesk/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/freshdesk/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/freshdesk/accounts/:id/fields"}}),t.intFreshdeskConfiguration=e(t.baseUrl+"integrations/freshdesk/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/freshdesk/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/freshdesk/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/freshdesk/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/freshdesk/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/freshdesk/configurations/:id/descriptions"},getTags:{isArray:!1,method:"get",url:t.baseUrl+"integrations/freshdesk/configurations/:id/tags"},setTags:{isArray:!0,method:"post",url:t.baseUrl+"integrations/freshdesk/configurations/:id/tags"}}),t.intFreshdeskField=e(t.baseUrl+"integrations/freshdesk/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/freshdesk/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/freshdesk/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intVtigerAccount=e(t.baseUrl+"integrations/vtiger/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/vtiger/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/vtiger/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/vtiger/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/vtiger/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/vtiger/accounts/:id/fields"}}),t.intVtigerConfiguration=e(t.baseUrl+"integrations/vtiger/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/vtiger/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/vtiger/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/vtiger/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/vtiger/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/vtiger/configurations/:id/descriptions"}}),t.intVtigerField=e(t.baseUrl+"integrations/vtiger/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/vtiger/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/vtiger/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intServicenowAccount=e(t.baseUrl+"integrations/servicenow/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/servicenow/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/servicenow/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/servicenow/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/servicenow/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/servicenow/accounts/:id/fields"}}),t.intServicenowConfiguration=e(t.baseUrl+"integrations/servicenow/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/servicenow/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/servicenow/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/servicenow/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/servicenow/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/servicenow/configurations/:id/descriptions"}}),t.intServicenowField=e(t.baseUrl+"integrations/servicenow/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/servicenow/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/servicenow/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.intDynamics365Account=e(t.baseUrl+"integrations/dynamics365/accounts/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/dynamics365/accounts/describe"},clone:{method:"post",url:t.baseUrl+"integrations/dynamics365/accounts/:id/clone",params:{includeAll:"@includeAll"}},getConfigurations:{isArray:!1,method:"get",url:t.baseUrl+"integrations/dynamics365/accounts/:id/configurations"},addConfiguration:{isArray:!1,method:"post",url:t.baseUrl+"integrations/dynamics365/accounts/:id/configurations"},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/dynamics365/accounts/:id/fields"}}),t.intDynamics365Configuration=e(t.baseUrl+"integrations/dynamics365/configurations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/dynamics365/configurations/describe"},clone:{method:"post",url:t.baseUrl+"integrations/dynamics365/configurations/:id/clone",params:{includeAll:"@includeAll"}},getFields:{isArray:!1,method:"get",url:t.baseUrl+"integrations/dynamics365/configurations/:id/fields"},getSubjects:{isArray:!1,method:"get",url:t.baseUrl+"integrations/dynamics365/configurations/:id/subjects"},getDescriptions:{isArray:!1,method:"get",url:t.baseUrl+"integrations/dynamics365/configurations/:id/descriptions"}}),t.intDynamics365Field=e(t.baseUrl+"integrations/dynamics365/fields/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"integrations/dynamics365/fields/describe"},clone:{method:"post",url:t.baseUrl+"integrations/dynamics365/fields/:id/clone",params:{includeAll:"@includeAll"}}}),t.network=e(t.baseUrl+"networks/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"networks/describe"},clone:{method:"post",url:t.baseUrl+"networks/:id/clone",params:{includeAll:"@includeAll"}}}),t.chatQueueReport=e(t.baseUrl+"chat/reports/queue/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/reports/queue/describe"},clone:{method:"post",url:t.baseUrl+"chat/reports/queue/:id/clone",params:{includeAll:"@includeAll"}}}),t.chatInternalMessage=e(t.baseUrl+"chat/internal/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/internal/messages/describe"},clone:{method:"post",url:t.baseUrl+"chat/internal/messages/:id/clone",params:{includeAll:"@includeAll"}},getUsers:{isArray:!1,method:"get",url:t.baseUrl+"chat/internal/messages/users"}}),t.jscriptyAnswerReport=e(t.baseUrl+"jscripty/answers/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"jscripty/answers/reports/describe"},clone:{method:"post",url:t.baseUrl+"jscripty/answers/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.jscriptyQuestionReport=e(t.baseUrl+"jscripty/questions/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"jscripty/questions/reports/describe"},clone:{method:"post",url:t.baseUrl+"jscripty/questions/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.jscriptySessionReport=e(t.baseUrl+"jscripty/sessions/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"jscripty/sessions/reports/describe"},clone:{method:"post",url:t.baseUrl+"jscripty/sessions/reports/:id/clone",params:{includeAll:"@includeAll"}},getQuestions:{isArray:!1,method:"get",url:t.baseUrl+"jscripty/sessions/reports/:id/questions"}}),t.smsQueueReport=e(t.baseUrl+"sms/reports/queue/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/reports/queue/describe"},clone:{method:"post",url:t.baseUrl+"sms/reports/queue/:id/clone",params:{includeAll:"@includeAll"}}}),t.squareReport=e(t.baseUrl+"square/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"square/reports/describe"},clone:{method:"post",url:t.baseUrl+"square/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.squareReportDetail=e(t.baseUrl+"square/details/reports/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"square/details/reports/describe"},clone:{method:"post",url:t.baseUrl+"square/details/reports/:id/clone",params:{includeAll:"@includeAll"}}}),t.jscriptyProject=e(t.baseUrl+"jscripty/projects/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"jscripty/projects/describe"},clone:{method:"post",url:t.baseUrl+"jscripty/projects/:id/clone",params:{includeAll:"@includeAll"}},getSessions:{isArray:!1,method:"get",url:t.baseUrl+"jscripty/projects/:id/sessions"},getAnswers:{isArray:!1,method:"get",url:t.baseUrl+"jscripty/projects/:id/answers"},getSummary:{isArray:!1,method:"get",url:t.baseUrl+"jscripty/projects/:id/summary",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.setting=e(t.baseUrl+"settings/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"settings/describe"},clone:{method:"post",url:t.baseUrl+"settings/:id/clone",params:{includeAll:"@includeAll"}},addLogo:{isArray:!1,method:"post",url:t.baseUrl+"settings/:id/logo"},addLogoLogin:{isArray:!1,method:"post",url:t.baseUrl+"settings/:id/logo_login"},getLogo:{isArray:!1,method:"get",url:t.baseUrl+"settings/:id/logo"},getLogoLogin:{isArray:!1,method:"get",url:t.baseUrl+"settings/:id/logo_login"},gdpr:{isArray:!1,method:"get",url:t.baseUrl+"settings/:id/gdpr"},addPreferred:{isArray:!1,method:"post",url:t.baseUrl+"settings/:id/preferred"},getPreferred:{isArray:!1,method:"get",url:t.baseUrl+"settings/:id/preferred"}}),t.squareOdbc=e(t.baseUrl+"square/odbc/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"square/odbc/describe"},clone:{method:"post",url:t.baseUrl+"square/odbc/:id/clone",params:{includeAll:"@includeAll"}},test:{isArray:!1,method:"get",url:t.baseUrl+"square/odbc/:id/test"}}),t.squareProject=e(t.baseUrl+"square/projects/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"square/projects/describe"},clone:{method:"post",url:t.baseUrl+"square/projects/:id/clone",params:{includeAll:"@includeAll"}},addUsers:{isArray:!0,method:"post",url:t.baseUrl+"square/projects/:id/users"},removeUsers:{isArray:!1,method:"delete",url:t.baseUrl+"square/projects/:id/users"},getUsers:{isArray:!1,method:"get",url:t.baseUrl+"square/projects/:id/users"}}),t.squareRecording=e(t.baseUrl+"square/recordings/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"square/recordings/describe"},clone:{method:"post",url:t.baseUrl+"square/recordings/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"square/recordings/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.squareMessage=e(t.baseUrl+"square/messages/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"square/messages/describe"},clone:{method:"post",url:t.baseUrl+"square/messages/:id/clone",params:{includeAll:"@includeAll"}}}),t.team=e(t.baseUrl+"teams/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"teams/describe"},clone:{method:"post",url:t.baseUrl+"teams/:id/clone",params:{includeAll:"@includeAll"}},getQueues:{isArray:!0,method:"get",url:t.baseUrl+"teams/:id/queues"},addQueues:{isArray:!0,method:"post",url:t.baseUrl+"teams/:id/queues"},removeQueues:{isArray:!1,method:"delete",url:t.baseUrl+"teams/:id/queues"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"teams/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"teams/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"teams/:id/users"}}),t.license=e(t.baseUrl+"license/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"license/describe"},clone:{method:"post",url:t.baseUrl+"license/:id/clone",params:{includeAll:"@includeAll"}}}),t.campaign=e(t.baseUrl+"campaigns/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"campaigns/describe"},clone:{method:"post",url:t.baseUrl+"campaigns/:id/clone",params:{includeAll:"@includeAll"}},getHoppers:{isArray:!1,method:"get",url:t.baseUrl+"campaigns/:id/hoppers"},getHopperHistories:{isArray:!1,method:"get",url:t.baseUrl+"campaigns/:id/hopper_histories"},getHopperFinals:{isArray:!1,method:"get",url:t.baseUrl+"campaigns/:id/hopper_finals"},getHopperBlacks:{isArray:!1,method:"get",url:t.baseUrl+"campaigns/:id/hopper_black"},getLists:{isArray:!1,method:"get",url:t.baseUrl+"campaigns/:id/lists"},addLists:{isArray:!0,method:"post",url:t.baseUrl+"campaigns/:id/lists"},removeLists:{isArray:!0,method:"delete",url:t.baseUrl+"campaigns/:id/lists"},getBlackLists:{isArray:!1,method:"get",url:t.baseUrl+"campaigns/:id/blacklists"},addBlackLists:{isArray:!0,method:"post",url:t.baseUrl+"campaigns/:id/blacklists"},removeBlackLists:{isArray:!0,method:"delete",url:t.baseUrl+"campaigns/:id/blacklists"}}),t.migration=e(t.baseUrl+"migrations/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"migrations/describe"},clone:{method:"post",url:t.baseUrl+"migrations/:id/clone",params:{includeAll:"@includeAll"}}}),t.attachment=e(t.baseUrl+"attachments/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"attachments/describe"},clone:{method:"post",url:t.baseUrl+"attachments/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"attachments/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}}}),t.plugin=e(t.baseUrl+"plugins/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"plugins/describe"},clone:{method:"post",url:t.baseUrl+"plugins/:id/clone",params:{includeAll:"@includeAll"}},download:{isArray:!1,method:"get",url:t.baseUrl+"plugins/:id/download",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}},upload:{isArray:!1,method:"post",url:t.baseUrl+"plugins/"},delete:{isArray:!1,method:"delete",url:t.baseUrl+"plugins/:id"},webhookGet:{isArray:!1,method:"get",url:t.baseUrl+"plugins/webhook"},webhookPost:{isArray:!1,method:"post",url:t.baseUrl+"plugins/webhook"}}),t.mailTransferReport=e(t.baseUrl+"mail/reports/transfer/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"mail/reports/transfer/describe"},clone:{method:"post",url:t.baseUrl+"mail/reports/transfer/:id/clone",params:{includeAll:"@includeAll"}}}),t.chatTransferReport=e(t.baseUrl+"chat/reports/transfer/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"chat/reports/transfer/describe"},clone:{method:"post",url:t.baseUrl+"chat/reports/transfer/:id/clone",params:{includeAll:"@includeAll"}}}),t.faxTransferReport=e(t.baseUrl+"fax/reports/transfer/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"fax/reports/transfer/describe"},clone:{method:"post",url:t.baseUrl+"fax/reports/transfer/:id/clone",params:{includeAll:"@includeAll"}}}),t.openchannelTransferReport=e(t.baseUrl+"openchannel/reports/transfer/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"openchannel/reports/transfer/describe"},clone:{method:"post",url:t.baseUrl+"openchannel/reports/transfer/:id/clone",params:{includeAll:"@includeAll"}}}),t.smsTransferReport=e(t.baseUrl+"sms/reports/transfer/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"sms/reports/transfer/describe"},clone:{method:"post",url:t.baseUrl+"sms/reports/transfer/:id/clone",params:{includeAll:"@includeAll"}}}),t.cmList=e(t.baseUrl+"cm/lists/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"cm/lists/describe"},clone:{method:"post",url:t.baseUrl+"cm/lists/:id/clone",params:{includeAll:"@includeAll"}},addDisposition:{isArray:!1,method:"post",url:t.baseUrl+"cm/lists/:id/dispositions"},getDispositions:{isArray:!1,method:"get",url:t.baseUrl+"cm/lists/:id/dispositions"},removeDispositions:{isArray:!1,method:"delete",url:t.baseUrl+"cm/lists/:id/dispositions"},addContacts:{isArray:!1,method:"post",url:t.baseUrl+"cm/lists/:id/contacts"},getContacts:{isArray:!0,method:"get",url:t.baseUrl+"cm/lists/:id/contacts"},getContactsCsv:{isArray:!1,method:"get",url:t.baseUrl+"cm/lists/:id/contacts/csv",responseType:"arraybuffer",cache:!1,transformResponse:function(e,t){var n=t();return{type:n["content-type"],length:n["content-length"],buffer:e}}},addCustomField:{isArray:!1,method:"post",url:t.baseUrl+"cm/lists/:id/fields"},getCustomFields:{isArray:!1,method:"get",url:t.baseUrl+"cm/lists/:id/fields"},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"cm/lists/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"cm/lists/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"cm/lists/:id/users"}}),t.voicePrefix=e(t.baseUrl+"voice/prefixes/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"voice/prefixes/describe"},clone:{method:"post",url:t.baseUrl+"voice/prefixes/:id/clone",params:{includeAll:"@includeAll"}},addAgents:{isArray:!0,method:"post",url:t.baseUrl+"voice/prefixes/:id/users"},removeAgents:{isArray:!1,method:"delete",url:t.baseUrl+"voice/prefixes/:id/users"},getAgents:{isArray:!1,method:"get",url:t.baseUrl+"voice/prefixes/:id/users"}}),t.userProfile=e(t.baseUrl+"userProfiles/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"userProfiles/describe"},clone:{method:"post",url:t.baseUrl+"userProfiles/:id/clone",params:{includeAll:"@includeAll"}},addSections:{isArray:!0,method:"post",url:t.baseUrl+"userProfiles/:id/sections"},removeSections:{isArray:!1,method:"delete",url:t.baseUrl+"userProfiles/:id/sections"},addResources:{isArray:!0,method:"post",url:t.baseUrl+"userProfiles/:id/resources"},removeResources:{isArray:!1,method:"delete",url:t.baseUrl+"userProfiles/:id/resources"},getResources:{isArray:!1,method:"get",url:t.baseUrl+"userProfiles/:id/resources"}}),t.userProfileSection=e(t.baseUrl+"userProfile/sections/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"userProfile/sections/describe"},clone:{method:"post",url:t.baseUrl+"userProfile/sections/:id/clone",params:{includeAll:"@includeAll"}}}),t.userProfileResource=e(t.baseUrl+"userProfile/resources/:id",{id:"@id"},{update:{method:"put"},describe:{method:"get",url:t.baseUrl+"userProfile/resources/describe"},clone:{method:"post",url:t.baseUrl+"userProfile/resources/:id/clone",params:{includeAll:"@includeAll"}}}),t}e.$inject=["$resource"],angular.module("motion").factory("api",e)}(),function(){"use strict";function e(e,t){t.setConfig({position:"top-right",sound:!1,html:!0,theme:"material"}),e.useLoader("$translatePartialLoader",{urlTemplate:"{part}/i18n/{lang}.json"}),e.preferredLanguage("en"),e.useSanitizeValueStrategy(null)}e.$inject=["$translateProvider","toastyConfigProvider"],angular.module("motion").config(e)}(),function(){"use strict";angular.module("motion")}(),function(){"use strict";function e(e,t,n,a){var i=this;i.themes=e.themes,i.direction="ltr";var s=n.get("motion.language");s&&(t.use(s),0<=["ar","fa","he"].indexOf(s)&&a.setting.get({id:1}).$promise.then(function(e){e&&e.rtlSupport&&(i.direction="rtl")}).catch(function(e){e&&toasty.error({title:"Error",msg:e.data?e.data.message||e.message||e:e.message||e})}))}e.$inject=["motionTheming","$translate","$cookies","api"],angular.module("motion").controller("IndexController",e)}(),function(){"use strict";function e(a,i){return function(e){var t=new Date,n=new Date(e);return n.getDate()===t.getDate()&&n.getMonth()===t.getMonth()&&n.getFullYear()===t.getFullYear()?a("date")(n.getTime(),"shortTime"):n.getDate()===t.getDate()-1&&n.getMonth()===t.getMonth()&&n.getFullYear()===t.getFullYear()?i.instant("DASHBOARDS.YESTERDAY")+" "+a("date")(n.getTime(),"shortTime"):a("date")(n.getTime(),"MMM d, y h:mm a")}}function t(e){return{Today:e.instant("DASHBOARDS.TODAY"),Yesterday:e.instant("DASHBOARDS.YESTERDAY"),"This Week":e.instant("DASHBOARDS.THIS_WEEK"),"Last Week":e.instant("DASHBOARDS.LAST_WEEK"),"This Month":e.instant("DASHBOARDS.THIS_MONTH"),"Last Month":e.instant("DASHBOARDS.LAST_MONTH"),"This Year":e.instant("DASHBOARDS.THIS_YEAR"),"Last Year":e.instant("DASHBOARDS.LAST_YEAR"),January:e.instant("DASHBOARDS.JANUARY"),February:e.instant("DASHBOARDS.FEBRUARY"),March:e.instant("DASHBOARDS.MARCH"),April:e.instant("DASHBOARDS.APRIL"),May:e.instant("DASHBOARDS.MAY"),June:e.instant("DASHBOARDS.JUNE"),July:e.instant("DASHBOARDS.JULY"),August:e.instant("DASHBOARDS.AUGUST"),September:e.instant("DASHBOARDS.SEPTEMBER"),October:e.instant("DASHBOARDS.OCTOBER"),November:e.instant("DASHBOARDS.NOVEMBER"),December:e.instant("DASHBOARDS.DECEMBER"),Mon:e.instant("DASHBOARDS.MON"),Tue:e.instant("DASHBOARDS.TUE"),Wed:e.instant("DASHBOARDS.WED"),Thu:e.instant("DASHBOARDS.THU"),Fri:e.instant("DASHBOARDS.FRI"),Sat:e.instant("DASHBOARDS.SAT"),Sun:e.instant("DASHBOARDS.SUN")}}e.$inject=["$filter","$translate"],t.$inject=["$translate"],angular.module("motion").filter("limitObjectFromTo",function(){return function(e,t,n){var a,i={},s=0;for(a in e)if(n<=s&&(i[a]=e[a]),++s===n+t)break;return i}}).filter("formatdate",e).factory("IndexFactory",function(){var e=[{value:"jan"},{value:"feb"},{value:"mar"},{value:"apr"},{value:"may"},{value:"jun"},{value:"jul"},{value:"aug"},{value:"sep"},{value:"oct"},{value:"nov"},{value:"dec"}],t=[{value:"1"},{value:"2"},{value:"3"},{value:"4"},{value:"5"},{value:"6"},{value:"7"},{value:"8"},{value:"9"},{value:"10"},{value:"11"},{value:"12"}],n=[{value:"mon"},{value:"tue"},{value:"wed"},{value:"thu"},{value:"fri"},{value:"sat"},{value:"sun"}],a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];return{getMonthName:function(){return e},getMonthNumber:function(){return t},getDaysOfWeek:function(){return n},getDaysOfMonth:function(){return a}}}).factory("dateFilterLocalizationFactory",t).factory("Sequence",function(){return{enqueue:function(e){this.tail=this.tail?this.tail.finally(e):e()}}})}(),function(){"use strict";function e(e,t,n){var a;n.html5Mode(!0),t.otherwise("/dashboards/general"),angular.injector(["ngCookies"]).invoke(["$cookies",function(e){a=e}]);var i=a.get("motion.layoutStyle")||"verticalNavigation",s={verticalNavigation:{main:"app/core/layouts/vertical-navigation.html",toolbar:"app/toolbar/layouts/vertical-navigation/toolbar.html",navigation:"app/navigation/layouts/vertical-navigation/navigation.html",header:"app/header/layouts/vertical-navigation/header.html",footer:"app/footer/layouts/vertical-navigation/footer.html"},verticalNavigationFullwidthToolbar:{main:"app/core/layouts/vertical-navigation-fullwidth-toolbar.html",toolbar:"app/toolbar/layouts/vertical-navigation-fullwidth-toolbar/toolbar.html",navigation:"app/navigation/layouts/vertical-navigation/navigation.html"},verticalNavigationFullwidthToolbar2:{main:"app/core/layouts/vertical-navigation-fullwidth-toolbar-2.html",toolbar:"app/toolbar/layouts/vertical-navigation-fullwidth-toolbar-2/toolbar.html",navigation:"app/navigation/layouts/vertical-navigation-fullwidth-toolbar-2/navigation.html"},horizontalNavigation:{main:"app/core/layouts/horizontal-navigation.html",toolbar:"app/toolbar/layouts/horizontal-navigation/toolbar.html",navigation:"app/navigation/layouts/horizontal-navigation/navigation.html"},contentOnly:{main:"app/core/layouts/content-only.html",toolbar:"",navigation:""},contentWithToolbar:{main:"app/core/layouts/content-with-toolbar.html",toolbar:"app/toolbar/layouts/content-with-toolbar/toolbar.html",navigation:""}};e.state("app",{abstract:!0,views:{"main@":{templateUrl:s[i].main,controller:"MainController as vm"},"toolbar@app":{templateUrl:s[i].toolbar,controller:"ToolbarController as vm"},"navigation@app":{templateUrl:s[i].navigation,controller:"NavigationController as vm"},"quickPanel@app":{templateUrl:"app/quick-panel/quick-panel.html",controller:"QuickPanelController as vm"},"header@app":{templateUrl:s[i].header,controller:"HeaderController as vm"},"footer@app":{templateUrl:s[i].footer,controller:"FooterController as vm"}},resolve:{license:["apiResolver",function(e){return e.resolve("license@get")}],setting:["apiResolver",function(e){return e.resolve("setting@get",{id:1})}]}})}e.$inject=["$stateProvider","$urlRouterProvider","$locationProvider"],angular.module("motion").config(e)}(),function(){"use strict";function e(e,t,n){var a=e.$on("$stateChangeStart",function(){e.loadingProgress=!0}),i=e.$on("$stateChangeSuccess",function(){t(function(){e.loadingProgress=!1})});e.state=n,e.$on("$destroy",function(){a(),i()})}e.$inject=["$rootScope","$timeout","$state"],angular.module("motion").run(e)}(),function(){"use strict";function e(a,e){var i;function s(){i=io({query:"id="+e.getCurrentUser().id,transports:["websocket","polling"]})}return{connect:s,on:function(e,t){t=t||angular.noop,i||s(),i.on(e,function(){var e=arguments;a.$apply(function(){t.apply(i,e)})})},onWithoutApply:function(e,t){t=t||angular.noop,i||s(),i.on(e,function(){t.apply(i,arguments)})},emit:function(e,t,n){n=n||angular.noop,i||s(),i.emit(e,t,function(){var e=arguments;a.$apply(function(){n.apply(i,e)})})},removeAllListeners:function(e){i||s(),i.removeAllListeners(e)},removeListener:function(e,t){i||s(),i.removeListener(e,t)},disconnect:function(){i||s(),i.disconnect()}}}e.$inject=["$rootScope","Auth"],angular.module("motion").factory("socket",e)}(),function(){"use strict";function e(t,n,e,a,i,s){var o=this;o.progresslogin=!1,o.login=function(){return o.progresslogin=!0,o.message="",s.login(o.form).then(function(){return t.go("app.dashboards.general")}).catch(function(e){o.message=e.message}).finally(function(){o.progresslogin=!1})},o.loginOauth=function(e){o.message="",n.location.href="/api/auth/"+e},o.onInit=function(){{if(t.params.token&&t.params.userId)return s.removeCookies(),o.progresslogin=!0,e.put("motion.token",t.params.token),i.user.get({id:t.params.userId}).$promise.then(function(e){e&&(s.updateCurrentUser(e),t.go("app.dashboards.general"))}).finally(function(){o.progresslogin=!1});s.isLoggedIn()&&t.go("app.dashboards.general")}},o.onInit()}e.$inject=["$state","$window","$cookies","$timeout","api","Auth"],angular.module("app.login").controller("LoginController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="ANALYTICS.EDIT_EXTRACTEDREPORT",g.extractedReport=angular.copy(l),g.extractedReports=r,g.newExtractedReport=!1,g.extractedReport||(g.extractedReport={},g.title="ANALYTICS.NEW_EXTRACTEDREPORT",g.newExtractedReport=!0),g.addNewExtractedReport=function(){g.errors=[],d.analyticExtractedReport.save(g.extractedReport).$promise.then(function(e){g.extractedReports.unshift(e.toJSON()),o.success({title:"ExtractedReport properly created",msg:g.extractedReport.name?g.extractedReport.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.analyticExtractedReport.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticExtractedReport.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveExtractedReport=function(){g.errors=[],d.analyticExtractedReport.update({id:g.extractedReport.id},g.extractedReport).$promise.then(function(e){var t=_.find(g.extractedReports,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ExtractedReport properly saved!",msg:g.extractedReport.name?g.extractedReport.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.analyticExtractedReport.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticExtractedReport.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteExtractedReport=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The extractedReport will be deleted.").ariaLabel("Delete ExtractedReport").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.analyticExtractedReport.delete({id:g.extractedReport.id}).$promise.then(function(){_.remove(g.extractedReports,{id:g.extractedReport.id}),o.success({title:"ExtractedReport properly deleted!",msg:(g.extractedReport.name||"extractedReport")+" has been deleted!"}),v(g.extractedReport)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.analyticExtractedReport.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticExtractedReport.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","extractedReports","extractedReport","api","Auth","license","setting","crudPermissions"],angular.module("app.analytics").controller("CreateOrEditExtractedReportDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.extractedReports=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="extractedReports",b.listOrder="",b.listOrderAsc=null,b.selectedExtractedReports=[],b.query={fields:"createdAt,updatedAt,id,name,basename,savename,type,startDate,endDate,status,output,reportId,reportType",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditExtractedReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/extractedReports/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{extractedReport:e,extractedReports:b.extractedReports.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.downloadfile2=function(s,e){return m.analyticExtractedReport.download({id:s.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=s.savename;var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticExtractedReport.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("extractedReport")+"?").htmlContent("<b>"+(e.name||"extractedReport")+"</b> will be deleted.").ariaLabel("delete extractedReport").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getExtractedReports=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.analyticExtractedReport.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ExtractedReports",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditExtractedReport=function(e,t){i.show({controller:"CreateOrEditExtractedReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/extractedReports/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{extractedReport:t,extractedReports:b.extractedReports.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteExtractedReport=S,b.exportSelectedExtractedReports=function(){var e=angular.copy(b.selectedExtractedReports);return b.selectedExtractedReports=[],e},b.deleteSelectedExtractedReports=function(e){var t=i.confirm().title("Are you sure want to delete the selected extractedReports?").htmlContent("<b>"+b.selectedExtractedReports.length+" selected</b> will be deleted.").ariaLabel("delete ExtractedReports").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedExtractedReports.forEach(function(e){S(e)}),b.selectedExtractedReports=[]})},b.deselectExtractedReports=function(){b.selectedExtractedReports=[]},b.selectAllExtractedReports=function(){b.selectedExtractedReports=b.extractedReports.rows};var A=!0,E=1;function y(e){b.extractedReports=e||{count:0,rows:[]}}function S(e){m.analyticExtractedReport.delete({id:e.id}).$promise.then(function(){_.remove(b.extractedReports.rows,{id:e.id}),b.extractedReports.count-=1,b.extractedReports.rows.length||b.getExtractedReports(),p.success({title:_.startCase("ExtractedReport")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEanalyticExtractedReport"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEanalyticExtractedReport",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getExtractedReports())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","extractedReports","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.analytics").controller("ExtractedReportsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="ANALYTICS.EDIT_METRIC",g.metric=angular.copy(l),g.metrics=r,g.newMetric=!1,g.metric||(g.metric={table:"report_agent"},g.title="ANALYTICS.NEW_METRIC",g.newMetric=!0),g.addNewMetric=function(){g.errors=[],d.analyticMetric.save(g.metric).$promise.then(function(e){g.metrics.unshift(e.toJSON()),o.success({title:"Metric properly created",msg:g.metric.name?g.metric.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.analyticMetric.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticMetric.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMetric=function(){g.errors=[],d.analyticMetric.update({id:g.metric.id},g.metric).$promise.then(function(e){var t=_.find(g.metrics,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Metric properly saved!",msg:g.metric.name?g.metric.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.analyticMetric.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticMetric.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMetric=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The metric will be deleted.").ariaLabel("Delete Metric").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.analyticMetric.delete({id:g.metric.id}).$promise.then(function(){_.remove(g.metrics,{id:g.metric.id}),o.success({title:"Metric properly deleted!",msg:(g.metric.name||"metric")+" has been deleted!"}),v(g.metric)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.analyticMetric.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticMetric.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","metrics","metric","api","Auth","license","setting","crudPermissions"],angular.module("app.analytics").controller("CreateOrEditMetricDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.metrics=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="metrics",b.listOrder="",b.listOrderAsc=null,b.selectedMetrics=[],b.query={fields:"createdAt,updatedAt,id,name,table,metric,description",sort:"-updatedAt",limit:10,page:1},b.arraytable=_.keyBy([{option:"Agent Report",value:"'report_agent'"},{option:"Call Report",value:"'report_call'"},{option:"Contacts",value:"'cm_contacts'"},{option:"CSquare Report",value:"'report_square'"},{option:"CSquare Details Report",value:"'report_square_details'"},{option:"Dialer Hopper Processing",value:"'cm_hopper'"},{option:"Dialer Hopper Logs",value:"'cm_hopper_history'"},{option:"Dialer Hopper Final",value:"'cm_hopper_final'"},{option:"Integration Report",value:"'report_integration'"},{option:"Jscripty Sessions",value:"'report_jscripty_sessions'"},{option:"Jscripty Questions",value:"'report_jscripty_questions'"},{option:"Jscripty Answers",value:"'report_jscripty_answers'"},{option:"Lists",value:"'cm_lists'"},{option:"Member Report",value:"'report_member'"},{option:"Queue Report",value:"'report_queue'"},{option:"Users",value:"'users'"},{option:"Voice Recordings",value:"'voice_recordings'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editdialog=function(e,t){i.show({controller:"CreateOrEditMetricDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/metrics/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{metric:e,metrics:b.metrics.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("metric")+"?").htmlContent("<b>"+(e.name||"metric")+"</b> will be deleted.").ariaLabel("delete metric").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getMetrics=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.analyticMetric.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Metrics",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditMetric=function(e,t){i.show({controller:"CreateOrEditMetricDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/metrics/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{metric:t,metrics:b.metrics.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteMetric=S,b.exportSelectedMetrics=function(){var e=angular.copy(b.selectedMetrics);return b.selectedMetrics=[],e},b.deleteSelectedMetrics=function(e){var t=i.confirm().title("Are you sure want to delete the selected metrics?").htmlContent("<b>"+b.selectedMetrics.length+" selected</b> will be deleted.").ariaLabel("delete Metrics").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedMetrics.forEach(function(e){S(e)}),b.selectedMetrics=[]})},b.deselectMetrics=function(){b.selectedMetrics=[]},b.selectAllMetrics=function(){b.selectedMetrics=b.metrics.rows};var A=!0,E=1;function y(e){b.metrics=e||{count:0,rows:[]}}function S(e){m.analyticMetric.delete({id:e.id}).$promise.then(function(){_.remove(b.metrics.rows,{id:e.id}),b.metrics.count-=1,b.metrics.rows.length||b.getMetrics(),p.success({title:_.startCase("Metric")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEanalyticMetric"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEanalyticMetric",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getMetrics())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","metrics","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.analytics").controller("MetricsController",e)}(),function(){"use strict";function e(e,t,a,n,i,s,o){var r=this;function l(){t.hide()}r.errors=[],r.report=angular.copy(n),r.report.name+="-copy",r.treeCustomData=o,r.treeCustomConfig={core:{multiple:!1,animation:!0,error:function(e){console.error("treeCtrl: error from js tree - "+angular.toJson(e))},check_callback:!0,worker:!0},version:1,plugins:["wholerow"]},r.treeCustomEvents={select_node:function(e,t){r.currentNode=t.node}},r.copyReport=function(){var n;r.errors=[],i.analyticCustomReport.save({name:r.report.name,description:r.report.description,table:r.report.table,conditions:r.report.conditions,joins:r.report.joins,parent:r.currentNode.id}).$promise.then(function(e){n=e,a.success({title:"Report properly copied!",msg:r.report.name?r.report.name+" has been copied!":""});var t={fields:"field,alias,function,format,groupBy,orderBy,custom,MetricId",nolimit:!0};return t["analyticCustomReport"===s?"CustomReportId":"DefaultReportId"]=r.report.id,i.analyticFieldReport.get(t).$promise}).then(function(e){var e=_.map(e.rows,function(e){return _.extend({},e,{CustomReportId:n.id})});return i.analyticFieldReport.bulkCreate(e).$promise}).then(function(){a.success({title:"Fields copied!",msg:"Fields has been copied!"}),l()}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:COPYREPORT",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$location","$mdDialog","toasty","report","api","apiName","treeCustomData"],angular.module("app.analytics").controller("CopyReportDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;function m(){t.hide()}c.errors=[],c.joinTables=[],c.title="ANALYTICS.EDIT_REPORT",c.crudPermissions=d,c.report=angular.copy(i),c.reports=a,c.newReport=!1,c.tables=l.getMap(),c.joinTypes=[{key:"join",value:"Join"},{key:"left_join",value:"Left Join"},{key:"right_join",value:"Right Join"},{key:"cross_join",value:"Cross Join"}],c.report||(c.report={name:"",table:"report_agent",description:"",parent:r.id},c.title="ANALYTICS.NEW_REPORT",c.newReport=!0),c.addNewReport=function(){c.errors=[],c.report.joins=_.map(c.joinTables||[],function(e){return{parentKey:e.parentKey,foreignTable:e.name,foreignKey:e.foreignKey,type:e.type.toLowerCase()}}),c.report.joins=JSON.stringify(c.report.joins),s[o].save(c.report).$promise.then(function(e){c.reports.unshift(e),n.success({title:"Report properly created",msg:c.report.name?c.report.name+" has been created!":""}),m()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){c.errors=e.data.errors||[{message:e.toString(),type:"api.analyticReport.save"}];for(var t=0;t<e.data.errors.length;t++)n.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticReport.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.saveReport=function(){c.errors=[],s[o].update({id:c.report.id},c.report).$promise.then(function(e){var t=_.find(c.reports,{id:e.id});t&&_.merge(t,e),n.success({title:"Report properly saved!",msg:c.report.name?c.report.name+" has been saved!":""}),m()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){c.errors=e.data.errors||[{message:e.toString(),type:"api.analyticReport.update"}];for(var t=0;t<e.data.errors.length;t++)n.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticReport.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.deleteReport=function(){c.errors=[];var e=t.confirm().title("Are you sure?").content("The report will be deleted.").ariaLabel("Delete Report").ok("Delete").cancel("Cancel").targetEvent(event);t.show(e).then(function(){s[o].delete({id:c.report.id}).$promise.then(function(){_.remove(c.reports,{id:c.report.id}),n.success({title:"Report properly deleted!",msg:c.report.name?c.report.name+" has been deleted!":""}),m()}).catch(function(e){c.errors=e.data.errors||[{message:e.toString(),type:"api.analyticReport.delete"}]})},function(){})},c.closeDialog=m,c.selectedTableChange=function(e){e&&(delete c.selectedItem,c.joinTables.push(e))},c.removeJoin=function(e){c.joinTables.splice(e,1)},c.getFields=function(t,n,e){var a=_.find(c.tables,{name:e});a&&a.api&&s[a.api].describe().$promise.then(function(e){t[n]=_.difference(_.keys(e),["$promise","$resolved"])}).catch(function(e){console.error(e)})}}e.$inject=["$location","$mdDialog","toasty","reports","report","api","apiName","currentNode","describeTable","crudPermissions"],angular.module("app.analytics").controller("CreateOrEditReportDialogController",e)}(),function(){"use strict";function e(i,s,o,e){var r=this;r.report={},r.conditions=e.getConditions,r.init=function(e,t){r.report=e,r.report.condition=angular.fromJson(e.conditions)||{group:{operator:"AND",rules:[]}},r.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1};for(var n=0;n<r.report.condition.group.rules.length;n++)if(r.report.condition.group.rules[n].field){var a=r.report.condition.group.rules[n].field.split(".");1===a.length&&(r.report.condition.group.rules[n].field=r.report.table+"."+r.report.condition.group.rules[n].field)}s.getColumns(r.report.table).then(function(e){r.columns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt"])}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DESCRIBE",msg:e.data?JSON.stringify(e.data):e.toString()})})},r.addCondition=function(e){e.unshift({condition:"=",field:"",value:""})},r.addGroup=function(e){e.push({group:{operator:"AND",rules:[]}})},r.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the item?").htmlContent("The item will be deleted.").ariaLabel("delete item").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){e.splice(t,1)},function(){console.log("CANCEL")})},r.isValueByCondition=function(e){return!_.includes(["IS NULL","IS NOT NULL","IS EMPTY","IS NOT EMPTY"],e)}}e.$inject=["$mdDialog","describeTable","toasty","sqlUtil"],angular.module("app.analytics").controller("ReportConditionsController",e)}(),function(){"use strict";function e(t){var a={cm_contacts:"cmContact",cm_hopper:"cmHopper",cm_hopper_final:"cmHopperFinal",cm_hopper_history:"cmHopperHistory",cm_lists:"cmList",chat_websites:"chatWebsite",chat_queues:"chatQueue",chat_interactions:"chatInteraction",chat_messages:"chatMessage",chat_offline_messages:"chatOfflineMessage",report_chat_queue:"chatQueueReport",report_chat_transfer:"chatTransferReport",mail_accounts:"mailAccount",mail_queues:"mailQueue",mail_interactions:"mailInteraction",mail_messages:"mailMessage",report_mail_queue:"mailQueueReport",report_mail_transfer:"mailTransferReport",openchannel_accounts:"openchannelAccount",openchannel_queues:"openchannelQueue",openchannel_interactions:"openchannelInteraction",openchannel_messages:"openchannelMessage",report_openchannel_queue:"openchannelQueueReport",report_openchannel_transfer:"openchannelTransferReport",sms_accounts:"smsAccount",sms_queues:"smsQueue",sms_interactions:"smsInteraction",sms_messages:"smsMessage",report_sms_queue:"smsQueueReport",report_sms_transfer:"smsTransferReport",fax_accounts:"faxAccount",fax_queues:"faxQueue",fax_interactions:"faxInteraction",fax_messages:"faxMessage",report_fax_transfer:"faxTransferReport",report_fax_queue:"faxQueueReport",report_call:"voiceCallReport",report_agent:"voiceAgentReport",report_square:"squareReport",report_member:"memberReport",report_queue:"voiceQueueReport",report_square_details:"squareReportDetail",report_dial:"voiceDialReport",report_jscripty_sessions:"jscriptySessionReport",report_jscripty_questions:"jscriptyQuestionReport",report_jscripty_answers:"jscriptyAnswerReport",users:"user",voice_recordings:"voiceRecording",cdr:"cdr"};return{getMap:function(){var n=[];return _.forIn(a,function(e,t){n.push({name:t,api:e})}),n},getColumns:function(e){return t[a[e]].describe().$promise}}}e.$inject=["api"],angular.module("app.analytics").factory("describeTable",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;(u.errors=[],u.title="Edit Report Field",u.report=i,u.reportField=angular.copy(o),u.reportFields=s,u.metrics=r,u.columns=l,u.sqlUtil=d,u.newReportField=!1,u.crudPermissions=m,u.reportField)?(u.reportField.type=u.reportField.custom?"custom":u.reportField.MetricId?"metric":"column",u.reportField.field&&!u.reportField.custom&&_.isNil(u.reportField.MetricId)&&1===u.reportField.field.split(".").length&&(u.reportField.field=u.report.table+"."+u.reportField.field)):(u.reportField={type:"column",function:null,format:null,groupBy:!1,orderBy:null},u.title="New Report Field",u.newReportField=!0);function p(){n.hide()}u.addNewReportField=function(){u.errors=[],u.reportField.custom="custom"===u.reportField.type,u.reportField.MetricId="metric"===u.reportField.type?u.reportField.MetricId:null,u.reportField.CustomReportId=u.report.id,c.analyticFieldReport.save(u.reportField).$promise.then(function(e){u.reportFields.push(e),a.success({title:"Report field properly created",msg:u.reportField.field?u.reportField.field+" has been created!":u.reportField.type+" has been created!"}),p()}).catch(function(e){u.errors=e.data.errors||[{message:e.toString(),type:"api.analyticFieldReport.save"}]})},u.saveReportField=function(){u.errors=[],u.reportField.custom="custom"===u.reportField.type,u.reportField.MetricId="metric"===u.reportField.type?u.reportField.MetricId:null,c.analyticFieldReport.update({id:u.reportField.id},u.reportField).$promise.then(function(e){var t=_.find(u.reportFields,{id:e.id});t&&_.merge(t,e),a.success({title:"Report Field properly saved!",msg:u.reportField.field?u.reportField.field+" has been saved!":""}),p()}).catch(function(e){u.errors=e.data.errors||[{message:e.toString(),type:"api.analyticFieldReport.update"}]})},u.deleteReportField=function(e){u.errors=[];var t=n.confirm().title("Are you sure?").content("The field will be deleted.").ariaLabel("Delete Report").ok("Delete").cancel("Cancel").targetEvent(e);n.show(t).then(function(){c.analyticFieldReport.delete({id:u.reportField.id}).$promise.then(function(){_.remove(u.reportFields,{id:u.reportField.id}),a.success({title:"Report Field properly deleted!",msg:u.reportField.field?u.reportField.field+" has been deleted!":""}),p()}).catch(function(e){u.errors=e.data.errors||[{message:e.toString(),type:"api.analyticReportField.delete"}]})},function(){})},u.closeDialog=p}e.$inject=["$scope","$location","$mdDialog","toasty","report","reportFields","reportField","metrics","columns","sqlUtil","api","crudPermissions"],angular.module("app.analytics").controller("CreateOrEditReportFieldDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.report={},c.reportFields={count:0,rows:[]},c.functions=_.keyBy(l.getFunctions,"value"),c.formats=_.keyBy(l.getFormats,"value"),c.groupBy=_.keyBy(l.getGroupBy,"value"),c.orderBy=_.keyBy(l.getOrderBy,"value"),c.selectedReportFields=[],c.query={fields:"createdAt,updatedAt,id,field,alias,function,format,groupBy,orderBy,custom,MetricId",nolimit:!0},c.sortableTable={animation:100,onSort:function(e){o.analyticFieldReport.addFields({id:c.report.id},e.models).$promise.then(function(e){c.reportFields.rows=e}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ADDFIELDS"})})}},c.init=function(e,t){c.report=e,c.query.CustomReportId=c.report.id,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.sortableTable.disabled=!c.crudPermissions.canEdit,r.getColumns(c.report.table).then(function(e){return c.columns=_.difference(_.keys(e),["$promise","$resolved"]),o.analyticMetric.get({fields:"id,name,metric,table",nolimit:!0}).$promise}).then(function(e){c.metrics=e.rows}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DESCRIBE",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.getReportFields()},c.deleteConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>"+e.field+"</b> will be deleted.").ariaLabel("delete field").targetEvent(t).ok("OK").cancel("CANCEL");a.show(n).then(function(){p(e)},function(){console.log("CANCEL")})},c.success=u,c.getReportFields=function(){c.promise=o.analyticFieldReport.get(c.query,u).$promise},c.createOrEditReportField=function(e,t){a.show({controller:"CreateOrEditReportFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/reports/edit/field/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{report:c.report,reportField:t,reportFields:c.reportFields.rows,metrics:c.metrics,columns:c.columns,setting:null,crudPermissions:c.crudPermissions}})},c.deleteReportField=p,c.deleteSelectedReportFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+c.selectedReportFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){c.selectedReportFields.forEach(function(e){p(e)}),c.selectedReportFields=[]})},c.getMetricName=function(e){var t=_.find(c.metrics,{id:e});return t?t.name:d.instant("ANALYTICS.NO_METRIC_FOUND")},c.getMetricValue=function(e){var t=_.find(c.metrics,{id:e});return t?t.metric:d.instant("ANALYTICS.NO_METRIC_FOUND")};var m=!0;function u(e){c.reportFields=e||{count:0,rows:[]}}function p(e){o.analyticFieldReport.delete({id:e.id}).$promise.then(function(){c.selectedReportFields=[],_.remove(c.reportFields.rows,{id:e.id}),c.reportFields.count-=1,c.reportFields.rows.length||c.getReportFields(),s.success({title:"Field deleted!",msg:e.field?e.field+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}t.$watch("vm_rf.query.filter",function(e,t){m?n(function(){m=!1}):c.getReportFields()})}e.$inject=["$cookies","$scope","$timeout","$mdDialog","$document","toasty","api","describeTable","sqlUtil","$translate"],angular.module("app.analytics").controller("ReportFieldsController",e)}(),function(){"use strict";angular.module("app.analytics").factory("sqlUtil",function(){return{getFunctions:[{value:"SUM",option:function(e){return"SUM ("+e+")"}},{value:"COUNT",option:function(e){return"COUNT ("+e+")"}},{value:"COUNT DISTINCT",option:function(e){return"COUNT (DISTINCT "+e+")"}},{value:"MAX",option:function(e){return"MAX ("+e+")"}},{value:"MIN",option:function(e){return"MIN ("+e+")"}},{value:"AVG",option:function(e){return"AVG ("+e+")"}},{value:"GROUP_CONCAT",option:function(e){return"GROUP_CONCAT ("+e+")"}},{value:"GROUP_CONCAT ASC",option:function(e){return"GROUP_CONCAT ("+e+" ORDER BY "+e+" ASC)"}},{value:"GROUP_CONCAT DESC",option:function(e){return"GROUP_CONCAT ("+e+" ORDER BY "+e+" DESC)"}}],getFormats:[{value:"SEC_TO_TIME",option:function(e){return"SEC_TO_TIME ("+e+")"}},{value:"DATE",option:function(e){return"DATE ("+e+")"}},{value:"HOUR",option:function(e){return"HOUR ("+e+")"}},{value:"ROUND",option:function(e){return"ROUND ("+e+")"}},{value:"UNIX_TIMESTAMP",option:function(e){return"UNIX_TIMESTAMP ("+e+")"}}],getGroupBy:[{value:!1,option:function(){return"No"}},{value:!0,option:function(e){return"GROUP BY "+e}}],getOrderBy:[{value:"ASC",option:function(e){return"ORDER BY "+e+" ASC"}},{value:"DESC",option:function(e){return"ORDER BY "+e+" DESC"}}],getConditions:["=","!=","<","<=",">",">=","LIKE","NOT LIKE","IS NULL","IS NOT NULL","IS EMPTY","IS NOT EMPTY"]}})}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;function r(e){return _.isArray(e)}o.report=a||{},o.userProfileSection=s&&1==s.count?s.rows[0]:null,o.crudPermissions=i.parseCrudPermissions(o.userProfileSection?o.userProfileSection.crudPermissions:null),o.selectedTab=e.params.tab||0,o.gotoReports=function(){e.go("app.analytics.reports")},o.saveReport=function(){o.report.conditions=angular.toJson(o.report.condition),n.analyticCustomReport.update({id:o.report.id},_.omit(o.report,"joins")).$promise.then(function(){t.success({title:"Report updated!",msg:o.report.name?o.report.name+" has been updated!":""})}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETreport",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.previewReport=function(){o.columns=[],o.rows=[],o.error=!1,n.analyticFieldReport.get({fields:"field,alias",nolimit:!0,CustomReportId:o.report.id}).$promise.then(function(e){return o.columns=e?e.rows:[],n.analyticCustomReport.preview({id:o.report.id}).$promise}).then(function(e){o.rows=e}).catch(function(e){console.log(e),o.error={title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:analyticFieldReport",msg:e.data?e.data.message:e.toString(),sql:e.data&&e.data.parent?e.data.parent.sql:"NO QUERY"},t.error(o.error)})},o.queryReport=function(){return o.queryResult="Loading...",n.analyticCustomReport.query({id:o.report.id}).$promise.then(function(e){o.queryResult=e.sql}).catch(function(e){o.queryResult="",console.log(e),o.error={title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:analyticFieldReport",msg:e.data?e.data.message:e.toString(),sql:e.data&&e.data.parent?e.data.parent.sql:"NO QUERY"},t.error(o.error)})},o.mapArray=function(e,t){if(r(e))return _.map(e,t).join(",");return""},o.isArray=r,o.valueReplacer=function(e,t){moment(t,"YYYY-MM-DDTHH:mm:ssZ",!0).isValid()&&(t=moment(t,"").format("YYYY-MM-DD HH:mm:ss"));return t}}e.$inject=["$state","toasty","api","report","Auth","userProfileSection"],angular.module("app.analytics").controller("ReportController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;o.errors=[],o.report=angular.copy(a),o.valueReplacer=function(e,t){moment(t,"YYYY-MM-DDTHH:mm:ssZ",!0).isValid()&&(t=moment(t,"").format("YYYY-MM-DD HH:mm:ss"));return t},o.closeDialog=function(){t.hide()},function(){o.columns=[],o.rows=[],o.error=!1;var e={fields:"field,alias",nolimit:!0};e["analyticCustomReport"===s?"CustomReportId":"DefaultReportId"]=o.report.id,o.promise=i.analyticFieldReport.get(e).$promise.then(function(e){return o.columns=e?e.rows:[],i[s].preview({id:o.report.id}).$promise}).then(function(e){o.rows=e}).catch(function(e){console.log(e),o.error={title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:analyticFieldReport",msg:e.data?e.data.message:e.toString(),sql:e.data&&e.data.parent?e.data.parent.sql:"NO QUERY"},n.error(o.error)})}()}e.$inject=["$location","$mdDialog","toasty","report","api","apiName"],angular.module("app.analytics").controller("PreviewReportDialogController",e)}(),function(){"use strict";function e(e,n,a,i,s,o,t,r,l,d,c,m,u){var p=this;p.currentUser=u.getCurrentUser(),p.reports={count:0,rows:[]},p.userProfile=r,p.userProfileSection=l&&1==l.count?l.rows[0]:null,p.crudPermissions=u.parseCrudPermissions(p.userProfileSection?p.userProfileSection.crudPermissions:null),p.selectedReports=[],p.query={fields:"createdAt,updatedAt,id,name,description,table,parent,conditions,joins",limit:10,page:1,sort:"-updatedAt"},p.apiName=null,p.currentPath="",p.customTree=!0,p.editstate=function(e,t){s.go("app.analytics.reports.edit",{id:e.id,crudPermissions:p.crudPermissions})},p.copydialog=function(e,t){i.show({controller:"CopyReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/reports/copy/dialog.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{report:e,apiName:p.apiName,treeCustomData:p.treeCustomInstance.jstree(!0).get_json("#")}}).finally(function(){})},p.previewdialog=function(e,t){i.show({controller:"PreviewReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/reports/preview/dialog.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{report:e,apiName:p.apiName}})},p.rundialog=function(e,t){i.show({controller:"RunReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/reports/run/dialog.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{report:e,apiName:p.apiName,currentPath:p.currentPath}})},p.downloadfile=function(a,e){var i;d.analyticMetric.get({fields:"id,name,metric,table",nolimit:!0}).$promise.then(function(e){i=_.keyBy(e.rows,"id");var t={fields:"field,alias,function,format,groupBy,orderBy,custom,MetricId",nolimit:!0};return t["analyticCustomReport"===p.apiName?"CustomReportId":"DefaultReportId"]=a.id,d.analyticFieldReport.get(t).$promise}).then(function(e){for(var t=0;t<e.rows.length;t+=1)e.rows[t].MetricId&&(e.rows[t].field=i[e.rows[t].MetricId].metric,e.rows[t].custom=!0),delete e.rows[t].MetricId;var n=o.document.createElement("a");n.href="data:text/json;charset=utf-8,"+o.encodeURIComponent(angular.toJson({name:a.name,description:a.description,table:a.table,conditions:a.conditions,joins:a.joins,fields:e.rows})),n.download=a.name+".json",n.target="_self",n.click(),m.success({title:"Report downloaded!",msg:a.name?a.name+" has been downloaded!":""})}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DOWNLOADJSON",msg:e.data?JSON.stringify(e.data):e.toString()})})},p.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the report?").htmlContent("<b>"+e.name+"</b> will be deleted.").ariaLabel("delete report").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){b(e)},function(){console.log("CANCEL")})},p.success=h,p.getReports=f,p.createOrEditReport=function(e,t){i.show({controller:"CreateOrEditReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/reports/create/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{report:t,reports:p.reports.rows,apiName:p.apiName,currentNode:p.currentNode,setting:null,crudPermissions:p.crudPermissions}})},p.importReport=function(e,t,n){if("application/json"===e.file.type){var a=new FileReader;a.onload=function(e){console.log(e.target.result);try{var n=atob(e.target.result.split(",")[1]);n=angular.fromJson(n),d.analyticCustomReport.save({name:n.name,description:n.description,table:n.table,conditions:n.conditions,joins:n.joins,parent:p.currentNode.id}).$promise.then(function(t){p.reports.rows.unshift(t),m.success({title:"Report saved!",msg:t.name?t.name+" has been saved!":""});var e=_.map(n.fields,function(e){return _.extend({},e,{CustomReportId:t.id})});return d.analyticFieldReport.bulkCreate(e).$promise}).then(function(e){m.success({title:"Fields saved!",msg:"Fields has been saved!"})}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETanalyticReport",msg:e.data?JSON.stringify(e.data):e.toString()})})}catch(e){console.error(e),m.error({title:"Decode File Error",msg:e.toString()})}},a.readAsDataURL(e.file)}else m.error({title:"Format Error",msg:"Please use only json files"})},p.deleteReport=b,p.exportSelectedReports=function(){var e=angular.copy(p.selectedReports);return p.selectedReports=[],e},p.deleteSelectedReports=function(e){var t=i.confirm().title("Are you sure want to delete the selected reports?").htmlContent("<b>"+p.selectedReports.length+" selected</b> will be deleted.").ariaLabel("delete Reports").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){p.selectedReports.forEach(function(e){b(e)}),p.selectedReports=[]})},p.deselectReports=function(){p.selectedReports=[]},p.selectAllReports=function(){p.selectedReports=p.reports.rows},p.treeDefaultData=c.rows[0]?angular.fromJson(c.rows[0].tree):[],p.treeCustomData=c.rows[1]?angular.fromJson(c.rows[1].tree):[],p.treeDefaultConfig=S(!1),p.treeCustomConfig=S(!0),p.treeDefaultEvents=T(!1),p.treeCustomEvents=T(!0);var g=!0,v=1;function h(e){p.reports=e||{count:0,rows:[]}}function f(){if(p.query.offset=(p.query.page-1)*p.query.limit,p.apiName)if("admin"===p.currentUser.role||p.userProfileSection.autoAssociation)p.promise=d[p.apiName].get(p.query,h).$promise;else{var a=[];p.promise=d[p.apiName].get(p.query).$promise.then(function(e){return 0<(a=e&&e.rows?e.rows:[]).length?d.userProfileResource.get({sectionId:p.userProfileSection.id,type:"analyticDefaultReport"===p.apiName?"DefaultReports":"CustomReports"}).$promise.then(function(e){var t=e&&e.rows?e.rows:[];if(0<t.length){var n=[];return a.forEach(function(e){_.find(t,["resourceId",e.id])&&n.push(e)}),h({count:n.length,rows:n})}return h(null)}):h(null)})}}function b(e){p.apiName&&d[p.apiName].delete({id:e.id}).$promise.then(function(){_.remove(p.reports.rows,{id:e.id}),p.reports.count-=1,p.reports.rows.length||p.getReports(),m.success({title:"Report deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.analyticreport.delete"}];for(var t=0;t<e.data.errors.length;t++)m.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.analyticreport.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}function A(e,t){p.treeDefaultInstance.jstree(!0).deselect_all(),p.treeDefaultInstance.jstree(!0).close_all(),p.currentNode=t.node,p.currentNode.custom=!0,p.currentPath=p.treeCustomInstance.jstree(!0).get_path(p.currentNode).join("/ "),p.apiName="analyticCustomReport",p.query.parent=t.node.id,f()}function E(e,t){p.treeCustomInstance.jstree(!0).deselect_all(),p.treeCustomInstance.jstree(!0).close_all(),p.currentNode=t.node,p.currentNode.custom=!1,p.currentPath=p.treeDefaultInstance.jstree(!0).get_path(p.currentNode).join("/ "),p.apiName="analyticDefaultReport",p.query.parent=t.node.id,f()}function y(e,t){var n=angular.toJson(p.treeCustomInstance.jstree(!0).get_json("#"));d.analyticTreeReport.update({id:2,tree:n}).$promise.then(function(){c.rows[1]&&(c.rows[1].tree=n),m.success({title:"Node Updated",msg:t.node.text?t.node.text+" has been updated!":"Node has been updated!"})}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEanalyticTreeReport",msg:e.data?JSON.stringify(e.data):e.toString()})})}function S(e){return{core:{multiple:!1,animation:!0,error:function(e){console.error("treeCtrl: error from js tree - "+angular.toJson(e))},check_callback:!0,worker:!0},version:1,plugins:e?["contextmenu","dnd","search","state","wholerow"]:["search","state","wholerow"],contextmenu:{items:function(n){var e={};return p.crudPermissions.canEdit&&_.assign(e,{create:{label:t.instant("ANALYTICS.CREATE"),action:function(){n=p.treeCustomInstance.jstree(!0).create_node(n),p.treeCustomInstance.jstree(!0).edit(n)}},rename:{_disabled:"#"===n.parent,label:t.instant("ANALYTICS.RENAME"),action:function(){p.treeCustomInstance.jstree(!0).edit(n)}}}),p.crudPermissions.canDelete&&_.assign(e,{remove:{_disabled:"#"===n.parent,label:t.instant("ANALYTICS.REMOVE"),action:function(){var e=i.confirm().title("Are you sure want to delete the node?").htmlContent("<b>"+(n.text?n.text:"Node")+"</b> and its subnode will be deleted.").ariaLabel("delete node").ok("OK").cancel("CANCEL");i.show(e).then(function(){var e,t=p.treeCustomInstance.jstree(!0).get_parent(n);t=p.treeCustomInstance.jstree(!0).get_node(t),p.treeCustomInstance.jstree(!0).delete_node(n),e=[n.id].concat(n.children_d||[]),d.analyticCustomReport.get({parent:e.join(","),fields:"id,name"}).$promise.then(function(e){e&&e.rows&&e.rows.forEach(function(e){b(e)})}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEreportsByParents",msg:e.data?JSON.stringify(e.data):e.toString()})}),p.treeCustomInstance.jstree(!0).select_node(t)})}}}),e}}}}function T(e){return e?{create_node:y,rename_node:y,move_node:y,delete_node:y,select_node:A}:{select_node:E}}e.$watch("vm.query.filter",function(e,t){g?n(function(){g=!1}):(t||(v=p.query.page),e!==t&&(p.query.page=1),e||(p.query.page=v),p.getReports())}),e.$watch("vm.search",function(e,t){p.treeDefaultInstance&&p.treeDefaultInstance.jstree(!0).search(e),p.treeCustomInstance&&p.treeCustomInstance.jstree(!0).search(e)})}e.$inject=["$scope","$timeout","$document","$mdDialog","$state","$window","$translate","userProfile","userProfileSection","api","treeReports","toasty","Auth"],angular.module("app.analytics").controller("ReportsController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r){var l=this;function d(){l.export={id:l.report.id,name:l.report.name,startDate:new Date(moment().startOf("day")),endDate:new Date(moment().endOf("day")),output:"xlsx",fullPath:r?r+"/"+l.report.name:l.report.name}}function c(){n.hide()}l.errors=[],l.report=angular.copy(t),l.export={},l.runReport=function(t){l.errors=[],l.exportDate=_.assign({},l.export,{startDate:moment(l.export.startDate).format("YYYY-MM-DD HH:mm:ss"),endDate:moment(l.export.endDate).format("YYYY-MM-DD HH:mm:ss")}),i[s].run(l.exportDate).$promise.then(function(e){"web"===l.export.output?n.show({controller:"WebReportDialogController",controllerAs:"vm",templateUrl:"app/main/apps/analytics/views/reports/run/web/dialog.html",parent:angular.element(o.body),targetEvent:t,skipHide:!0,locals:{apiName:s,exportDate:l.exportDate,results:e},resolve:{columns:["apiResolver",function(e){var t={fields:"field,alias",nolimit:!0};return t["analyticCustomReport"===s?"CustomReportId":"DefaultReportId"]=l.report.id,e.resolve("analyticFieldReport@get",t)}]}}):(a.success({title:"Report properly run!",msg:l.report.name?l.report.name+" has been run!":""}),c())}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DESCRIBE",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},l.closeDialog=c,(l.refreshDate=d)()}e.$inject=["$location","$mdDialog","toasty","report","api","apiName","$document","currentPath"],angular.module("app.analytics").controller("RunReportDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o){var r=this;function l(e){r.results=e||{count:0,rows:[]}}r.errors=[],r.columns=a?a.rows:[],r.results=i||{rows:[],count:0},r.query={limit:10,page:1},r.closeDialog=function(){e.hide()},r.getResults=function(){o.offset=(r.query.page-1)*r.query.limit,o.limit=r.query.limit,r.promise=n[s].run(o,l).$promise},r.valueReplacer=function(e,t){moment(t,"YYYY-MM-DDTHH:mm:ssZ",!0).isValid()&&(t=moment(t,"").format("YYYY-MM-DD HH:mm:ss"));return t}}e.$inject=["$mdDialog","toasty","api","columns","results","apiName","exportDate"],angular.module("app.analytics").controller("WebReportDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CALLYSQUARE.EDIT_ODBC",g.odbc=angular.copy(l),g.odbcs=r,g.newOdbc=!1,g.odbc||(g.odbc={},g.title="CALLYSQUARE.NEW_ODBC",g.newOdbc=!0),g.addNewOdbc=function(){g.errors=[],d.squareOdbc.save(g.odbc).$promise.then(function(e){g.odbcs.unshift(e.toJSON()),o.success({title:"Odbc properly created",msg:g.odbc.name?g.odbc.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.squareOdbc.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareOdbc.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveOdbc=function(){g.errors=[],d.squareOdbc.update({id:g.odbc.id},g.odbc).$promise.then(function(e){var t=_.find(g.odbcs,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Odbc properly saved!",msg:g.odbc.name?g.odbc.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.squareOdbc.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareOdbc.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteOdbc=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The odbc will be deleted.").ariaLabel("Delete Odbc").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.squareOdbc.delete({id:g.odbc.id}).$promise.then(function(){_.remove(g.odbcs,{id:g.odbc.id}),o.success({title:"Odbc properly deleted!",msg:(g.odbc.name||"odbc")+" has been deleted!"}),v(g.odbc)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.squareOdbc.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareOdbc.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","odbcs","odbc","api","Auth","license","setting","crudPermissions"],angular.module("app.callysquare").controller("CreateOrEditOdbcDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.odbcs=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="odbcs",b.listOrder="",b.listOrderAsc=null,b.selectedODBC=[],b.query={fields:"createdAt,updatedAt,id,name,dsn,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditOdbcDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/odbcs/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{odbc:e,odbcs:b.odbcs.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.testtestOdbc=function(e,t){return m.squareOdbc.test({id:e.id}).$promise.then(function(){p.success({title:"Square ODBC properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"Square ODBC properly tested",msg:e.data?JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("odbc")+"?").htmlContent("<b>"+(e.name||"odbc")+"</b> will be deleted.").ariaLabel("delete odbc").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getODBC=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.squareOdbc.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ODBC",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditOdbc=function(e,t){i.show({controller:"CreateOrEditOdbcDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/odbcs/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{odbc:t,odbcs:b.odbcs.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteOdbc=S,b.exportSelectedODBC=function(){var e=angular.copy(b.selectedODBC);return b.selectedODBC=[],e},b.deleteSelectedODBC=function(e){var t=i.confirm().title("Are you sure want to delete the selected odbcs?").htmlContent("<b>"+b.selectedODBC.length+" selected</b> will be deleted.").ariaLabel("delete Odbcs").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedODBC.forEach(function(e){S(e)}),b.selectedODBC=[]})},b.deselectODBC=function(){b.selectedODBC=[]},b.selectAllODBC=function(){b.selectedODBC=b.odbcs.rows};var A=!0,E=1;function y(e){b.odbcs=e||{count:0,rows:[]}}function S(e){m.squareOdbc.delete({id:e.id}).$promise.then(function(){_.remove(b.odbcs.rows,{id:e.id}),b.odbcs.count-=1,b.odbcs.rows.length||b.getODBC(),p.success({title:_.startCase("Odbc")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsquareOdbc"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEsquareOdbc",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getODBC())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","odbcs","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.callysquare").controller("OdbcsController",e)}(),function(){"use strict";function e(t,n,a,i,s,e,o,r,l,d){var c=this;function m(e){t.hide(e)}c.errors=[],c.title="CALLYSQUARE.EDIT_PROJECT",c.crudPermissions=d,c.project=angular.copy(o),c.newWindow=!0,c.projects=e,c.newProject=!1,c.openFromEditor=l,c.project||(c.project={name:"",description:""},c.title="CALLYSQUARE.NEW_PROJECT",c.newProject=!0),c.addNewProject=function(){c.errors=[],r.squareProject.save(c.project).$promise.then(function(e){return r.user.addSquareProjects({id:i.getCurrentUser().id,ids:[e.id]}).$promise,e}).then(function(e){c.projects.unshift(e),s.success({title:"Project properly created",msg:c.project.name?c.project.name+" has been created!":""}),m(e),c.openFromEditor&&(c.newWindow?n.open("/callysquare/projects/"+e.id,"_blank"):a.go("app.callysquare.projects.edit",{id:e.id}))}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){c.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.save"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareProject.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.saveProject=function(){c.errors=[],r.squareProject.update({id:c.project.id},c.project).$promise.then(function(e){var t=_.find(c.projects,{id:e.id});t&&_.merge(t,e),s.success({title:"Project properly saved!",msg:c.project.name?c.project.name+" has been saved!":""}),m(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){c.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.update"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareProject.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.deleteProject=function(){c.errors=[];var e=t.confirm().title("Are you sure?").content("The project will be deleted.").ariaLabel("Delete Project").ok("Delete").cancel("Cancel").targetEvent(event);t.show(e).then(function(){r.squareProject.delete({id:c.project.id}).$promise.then(function(){return r.squareProject.getUsers({id:c.project.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(r.user.removeSquareProjects({id:i.getCurrentUser().id,ids:[c.project.id]}).$promise);return $q.all(t)}).then(function(){_.remove(c.projects,{id:c.project.id}),s.success({title:"Project properly deleted!",msg:c.project.name?c.project.name+" has been deleted!":""}),m(c.project)}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.delete"}]})},function(){})},c.closeDialog=m}e.$inject=["$mdDialog","$window","$state","Auth","toasty","projects","project","api","openFromEditor","crudPermissions"],angular.module("app.callysquare").controller("CreateOrEditSquareProjectDialogController",e)}(),function(){"use strict";function e(t,n,a,e,i,s,o,r,l,d,c,m,u,p,g,v,h,f,b,A,E,y,S,T,I,C,O,x,w,R){var N=this,D={playback:["file_id"],answer:["timeout"],menu:["file_id","digit","response","retry"],getdigits:["file_id","variable_id","mindigit","maxdigit","retry"],getsecretdigits:["file_id","variable_id","mindigit","maxdigit","hiddendigitsnum","retry"],vswitch:["variable_id"],database:["odbc_id","query"],ext_dial:["trunk_name","phone","timeout"],set:["variable_id"],math:["variable_id"],gotoc:["context","extension","priority"],system:["command"],agi:["command"],gotoif:["condition"],saydigits:["digits"],saynumber:["number"],sayphonetic:["text"],record:["file","timeout"],goal:["goalname"],dial:["sip_id","timeout"],queue:["queue_id","timeout"],callback:["list_id","name","phone","delay"],gotoiftime:["interval_id"],voicemail:["mailbox"],subproject:["project_id"],sendSMS:["sms_account_id","to","sms_text"],sendMail:["account_id","to"],sendFax:["account_id","to","attachment_path"],tts:["text"],ispeechtts:["text","key","speed"],ispeechasr:["key","timeout"],custom_app:["application"],googleasr:["key","timeout"],awspolly:["aws_access_key_id","aws_secret_access_key","text","aws_text_type"],lumenvoxtts:["text"],sestektts:["text"],lumenvoxasr:["grammar"],sestekasr:["grammar"],tildeasr:["appid","appsecret","uri"],login:["findBy"],pause:["findBy","pause_id"],unpause:["findBy"],logout:["findBy"],dialogflow:["key","text","dialogflow_language"],awslex:["aws_access_key_id","aws_secret_access_key","aws_lex_region","aws_bot_name","text"],sesteknda:["text","ndauth_url","username","password","ndassistant_url"]},P={queue:["file_id"],database:["variable_id"],pause:["pause_id"]},L={sendMail:["to","cc","bcc"],voicemail:["mailbox"]};function k(e,t,n,a){return _.map(e,function(e){return{value:e[t],option:e[n],group:a?e[a]:void 0,canSelect:void 0===e.canSelect||e.canSelect}})}function M(){var e=Number(_.find(N.attributes,{name:"sip_id"}).value);if(!_.some(l,{id:e})&&0<e)return n.user.get({id:e,fields:"id,fullname,role"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,l.push(t),N.values.sip_id=k(l,"id","fullname","role")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_USER",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.sip_id=k(l,"id","fullname","role")}function U(){var e=Number(_.find(N.attributes,{name:"list_id"}).value);if(!_.some(A,{id:e})&&0<e)return n.cmList.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,A.push(t),N.values.list_id=k(A,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_LIST",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.list_id=k(A,"id","name")}function F(){var e=Number(_.find(N.attributes,{name:"trunk_id"}).value);if(!_.some(d,{id:e})&&0<e)return n.trunk.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,d.push(t),N.values.trunk_id=k(d,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_TRUNK",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.trunk_id=k(d,"id","name")}function $(){var e=_.find(N.attributes,{name:"trunk_name"}).value;if(!_.some(d,{name:e})&&e)return n.trunk.get({name:e,fields:"id,name"}).$promise.then(function(e){if(0<e.count&&0<e.rows.length){var t=e.rows[0];t.canSelect=!1,d.push(t),N.values.trunk_name=k(d,"name","name")}}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_TRUNK",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.trunk_name=k(d,"name","name")}function q(){var e=Number(_.find(N.attributes,{name:"queue_id"}).value);if(!_.some(c,{id:e})&&0<e)return n.voiceQueue.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,c.push(t),N.values.queue_id=k(c,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_QUEUE",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.queue_id=k(c,"id","name")}function G(){var e=Number(_.find(N.attributes,{name:"file_id"}).value);if(!_.some(m,{id:e})&&0<e)return n.sound.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,m.push(t),N.values.file_id=k(m,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_SOUND",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.file_id=k(m,"id","name")}function H(){var e=Number(_.find(N.attributes,{name:"variable_id"}).value);if(!_.some(u,{id:e})&&0<e)return n.variable.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,u.push(t),N.values.variable_id=k(u,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_VARIABLE",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.variable_id=k(u,"id","name")}function V(){var e=Number(_.find(N.attributes,{name:"odbc_id"}).value);if(!_.some(p,{id:e})&&0<e)return n.squareOdbc.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,p.push(t),N.values.odbc_id=k(p,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_ODBC",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.odbc_id=k(p,"id","name")}function B(){var e=Number(_.find(N.attributes,{name:"project_id"}).value);if(!_.some(g,{id:e})&&0<e)return n.squareProject.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,g.push(t),N.values.project_id=k(g,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_PROJECT",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.project_id=k(g,"id","name")}function Q(){var e=Number(_.find(N.attributes,{name:"context"}).value);if(!_.some(v,{id:e})&&0<e)return n.voiceContext.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,v.push(t),N.values.context=k(v,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_CONTEXT",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.context=k(v,"id","name")}function W(){var e=Number(_.find(N.attributes,{name:"interval_id"}).value);if(!_.some(h,{id:e})&&0<e)return n.interval.get({id:e,fields:"id,name,IntervalId"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,h.push(t),N.values.interval_id=k(h,"id","name","IntervalId")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_INTERVAL",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.interval_id=k(h,"id","name","IntervalId")}function Y(){var e=Number(_.find(N.attributes,{name:"account_id"}).value);if(!_.some(f,{id:e})&&0<e)return n.mailAccount.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,f.push(t),N.values.account_id=k(f,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_MAIL_ACCOUNT",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.account_id=k(f,"id","name")}function j(){var e=Number(_.find(N.attributes,{name:"sms_account_id"}).value);if(!_.some(I,{id:e})&&0<e)return n.smsAccount.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,I.push(t),N.values.sms_account_id=k(I,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_SMS_ACCOUNT",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.sms_account_id=k(I,"id","name")}function z(){var e=Number(_.find(N.attributes,{name:"template_id"}).value);if(!_.some(b,{id:e})&&0<e)return n.template.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,b.push(t),N.values.template_id=k(b,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_TEMPLATE",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.template_id=k(b,"id","name")}function J(){var e=Number(_.find(N.attributes,{name:"pause_id"}).value);if(!_.some(C,{id:e})&&0<e)return n.pause.get({id:e,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,C.push(t),N.values.pause_id=k(C,"id","name")}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_PAUSE",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values.pause_id=k(C,"id","name")}N.cellName=E.tagName,N.attributes=_.map(E.attributes,function(e){return{name:e.name,value:e.value,defaultValue:P[N.cellName]&&_.includes(P[N.cellName],e.name),required:D[N.cellName]&&_.includes(D[N.cellName],e.name),help:L[N.cellName]&&_.includes(L[N.cellName],e.name)}}),N.values={answer:[{value:"yes",option:"Yes"},{value:"no",option:"No"}],ndagenerate_audio:[{value:1,option:"Yes"},{value:0,option:"No"}],ndaactivity_type:[{value:"message",option:"Message"},{value:"conversationUpdate",option:"Conversation Update"},{value:"contactRelationUpdate",option:"Contact Relation Update"},{value:"endOfConversation",option:"End of Conversation"}],hiddendigitspos:[{value:"first",option:"First"},{value:"last",option:"Last"}],recordingFormat:[{value:"wav",option:"Wav"},{value:"gsm",option:"Gsm"}],intkey:[{value:"#",option:"#"},{value:"*",option:"*"}],beep:[{value:"BEEP",option:"Yes"},{value:"NOBEEP",option:"No"}],model:e,ispeech_asr_language:i,ispeech_tts_language:o,google_tts_language:r,google_asr_language:s,aws_polly_region:T,aws_polly_voice:S,aws_text_type:[{value:"text",option:"Text"},{value:"ssml",option:"SSML"}],callback_priority:[{option:"Highest",value:4},{option:"High",value:3},{option:"Medium",value:2},{option:"Low",value:1},{option:"Lowest",value:0}],findBy:[{value:"internal",option:"Internal"},{value:"phone",option:"Phone"},{value:"mobile",option:"Mobile"}],dialogflow_language:O,aws_lex_region:x},N.crudPermissions=R,N.onInit=function(){w.hasRole("admin")?(e={sip_id:k(l,"id","fullname","role"),trunk_name:k(d,"name","name"),trunk_id:k(d,"id","name"),queue_id:k(c,"id","name"),file_id:k(m,"id","name"),variable_id:k(u,"id","name"),odbc_id:k(p,"id","name"),project_id:k(g,"id","name"),context:k(v,"id","name"),interval_id:(n=h,a="id",i="name",s="IntervalId",o=_.filter(n,function(e){return null===e[s]}),r=[],_.forEach(o,function(t){r.push({value:t[a],option:t[i]});var e=_.filter(n,function(e){return e[s]===t.id});_.forEach(e,function(e){r.push({value:e[a],option:" - "+e[i]})})}),r),account_id:k(f,"id","name"),template_id:k(b,"id","name"),list_id:k(A,"id","name"),sms_account_id:k(I,"id","name"),pause_id:k(C,"id","name")},t=_.merge(N.values,e),N.values=t):function(){for(var e=["sip_id","trunk_name","trunk_id","queue_id","file_id","variable_id","odbc_id","project_id","context","interval_id","account_id","template_id","list_id","sms_account_id","pause_id"],t=0;t<N.attributes.length;t++)if(_.includes(e,N.attributes[t].name))switch(N.attributes[t].name){case"sip_id":M();break;case"trunk_name":$();break;case"trunk_id":F();break;case"queue_id":q();break;case"file_id":G();break;case"variable_id":H();break;case"odbc_id":V();break;case"project_id":B();break;case"context":Q();break;case"interval_id":W();break;case"account_id":Y();break;case"template_id":z();break;case"list_id":U();break;case"sms_account_id":j();break;case"pause_id":J()}}();var e,t,n,a,i,s,o,r},N.closeDialog=function(e){e&&y(N.attributes),t.hide()},N.getMap=k}e.$inject=["$mdDialog","api","toasty","ispeechAsrModel","ispeechAsrLanguage","googleAsrLanguage","ispeechTtsLanguage","googleTtsLanguage","users","trunks","queues","sounds","variables","databases","projects","contexts","intervals","mailAccounts","templates","lists","cell","saveCallback","awsPollyVoice","awsPollyRegion","smsAccounts","pauses","dialogFlowLanguage","awsLexRegion","Auth","crudPermissions"],angular.module("app.callysquare").controller("MxGraphDialogController",e)}(),function(){"use strict";angular.module("app.callysquare").directive("stringToNumber",function(){return{require:"ngModel",link:function(e,t,n,a){a.$parsers.push(function(e){return""+e}),a.$formatters.push(function(e){return parseFloat(e)})}}})}(),function(){"use strict";angular.module("app.callysquare").factory("ispeechAsrModel",function(){return[{value:"0",option:"Default"},{value:"date",option:"Date"},{value:"usmoney",option:"US Money"},{value:"numbersto9",option:"Numbers to 9"},{value:"numbersto99",option:"Numbers to 99"},{value:"numbersto999",option:"Numbers to 999"},{value:"time",option:"Time"},{value:"phonenumber",option:"Phone number"},{value:"streets",option:"Streets"},{value:"citystate",option:"US City/States"}]}).factory("ispeechAsrLanguage",function(){return[{value:"en-US",option:"English (US)"},{value:"en-CA",option:"English (Canada)"},{value:"en-GB",option:"English (UK)"},{value:"en-AU",option:"English (Australia)"},{value:"es-ES",option:"Spanish (Spain)"},{value:"es-MX",option:"Spanish (Mexico)"},{value:"it-IT",option:"Italian (Italy) / Finnish (Finland)"},{value:"fr-FR",option:"German (Germany)"},{value:"fr-CA",option:"French (Canada)"},{value:"pl-PL",option:"Polish (Poland)"},{value:"pt-PT",option:"Portuguese (Portugal)"},{value:"ca-ES",option:"Catalan (Catalan)"},{value:"zh-TW",option:"Chinese (Taiwan)"},{value:"da-DK",option:"Danish (Denmark)"},{value:"ja-JP",option:"Japanese (Japan)"},{value:"ko-KR",option:"Korean (Korea)"},{value:"nl-NL",option:"Dutch (Netherlands)"},{value:"nb-NO",option:"Norwegian (Norway)"},{value:"pt-BR",option:"Portuguese (Brazil)"},{value:"ru-RU",option:"Russian (Russia)"},{value:"sv-SE",option:"Swedish (Sweden)"},{value:"zh-CN",option:"Chinese (China)"},{value:"zh-HK",option:"Chinese (Hong Kong)"}]}).factory("ispeechTtsLanguage",function(){return[{value:"usenglishfemale",option:"US English Female"},{value:"usenglishmale",option:"US English Male"},{value:"ukenglishfemale",option:"UK English Female"},{value:"ukenglishmale",option:"UK English Male"},{value:"auenglishfemale",option:"Australian English"},{value:"usspanishfemale",option:"US Spanish Female"},{value:"usspanishmale",option:"US Spanish Male"},{value:"chchinesefemale",option:"Chinese Female"},{value:"chchinesemale",option:"Chinese Male"},{value:"hkchinesefemale",option:"Hong Kong Cantonese Female"},{value:"twchinesefemale",option:"Taiwan Chinese Female"},{value:"jpjapanesefemale",option:"Japanese Female"},{value:"jpjapanesemale",option:"Japanese Male"},{value:"krkoreanfemale",option:"Korean Female"},{value:"krkoreanmale",option:"Korean Male"},{value:"caenglishfemale",option:"Canadian English Female"},{value:"huhungarianfemale",option:"Hungarian Female"},{value:"brportuguesefemale",option:"Brazilian Portuguese Female"},{value:"eurportuguesefemale",option:"European Portuguese Female"},{value:"eurportuguesemale",option:"European Portuguese Male"},{value:"eurspanishfemale",option:"European Spanish Female"},{value:"eurspanishmale",option:"European Spanish Male"},{value:"eurcatalanfemale",option:"European Catalan Female"},{value:"eurczechfemale",option:"European Czech Female"},{value:"eurdanishfemale",option:"European Danish Female"},{value:"eurfinnishfemale",option:"European Finnish Female"},{value:"eurfrenchfemale",option:"European French Female"},{value:"eurfrenchmale",option:"European French Male"},{value:"eurnorwegianfemale",option:"European Norwegian Female"},{value:"eurdutchfemale",option:"European Dutch Female"},{value:"eurpolishfemale",option:"European Polish Female"},{value:"euritalianfemale",option:"European Italian Female"},{value:"euritalianmale",option:"European Italian Male"},{value:"eurturkishfemale",option:"European Turkish Female"},{value:"eurturkishmale",option:"European Turkish Male"},{value:"eurgermanfemale",option:"European German Female"},{value:"eurgermanmale",option:"European German Male"},{value:"rurussianfemale",option:"Russian Female"},{value:"rurussianmale",option:"Russian Male"},{value:"swswedishfemale",option:"Swedish Female"},{value:"cafrenchfemale",option:"Canadian French Female"},{value:"cafrenchmale",option:"Canadian French Male"}]}).factory("googleTtsLanguage",function(){return[{value:"af",option:"Afrikaans"},{value:"sq",option:"Albanian"},{value:"am",option:"Amharic"},{value:"ar",option:"Arabic"},{value:"hy",option:"Armenian"},{value:"az",option:"Azerbaijani"},{value:"eu",option:"Basque"},{value:"be",option:"Belarusian"},{value:"bn",option:"Bengali"},{value:"bh",option:"Bihari"},{value:"bs",option:"Bosnian"},{value:"br",option:"Breton"},{value:"bg",option:"Bulgarian"},{value:"km",option:"Cambodian"},{value:"ca",option:"Catalan"},{value:"zh-CN",option:"Chinese (Simplified)"},{value:"zh-TW",option:"Chinese (Traditional)"},{value:"co",option:"Corsican"},{value:"hr",option:"Croatian"},{value:"cs",option:"Czech"},{value:"da",option:"Danish"},{value:"nl",option:"Dutch"},{value:"en",option:"English"},{value:"eo",option:"Esperanto"},{value:"et",option:"Estonian"},{value:"fo",option:"Faroese"},{value:"tl",option:"Filipino"},{value:"fi",option:"Finnish"},{value:"fr",option:"French"},{value:"fy",option:"Frisian"},{value:"gl",option:"Galician"},{value:"ka",option:"Georgian"},{value:"de",option:"German"},{value:"el",option:"Greek"},{value:"gn",option:"Guarani"},{value:"gu",option:"Gujarati"},{value:"xx-hacker",option:"Hacker"},{value:"ha",option:"Hausa"},{value:"iw",option:"Hebrew"},{value:"hi",option:"Hindi"},{value:"hu",option:"Hungarian"},{value:"is",option:"Icelandic"},{value:"id",option:"Indonesian"},{value:"ia",option:"Interlingua"},{value:"ga",option:"Irish"},{value:"it",option:"Italian"},{value:"jw",option:"Javanese"},{value:"ja",option:"Japanese"},{value:"kn",option:"Kannada"},{value:"kk",option:"Kazakh"},{value:"rw",option:"Kinyarwanda"},{value:"rn",option:"Kirundi"},{value:"xx-klingon",option:"Klingon"},{value:"ku",option:"Kurdish"},{value:"ko",option:"Korean"},{value:"ky",option:"Kyrgyz"},{value:"lo",option:"Laothian"},{value:"la",option:"Latin"},{value:"lv",option:"Latvian"},{value:"ln",option:"Lingala"},{value:"lt",option:"Lithuanian"},{value:"mk",option:"Macedonian"},{value:"mg",option:"Malagasy"},{value:"ml",option:"Malayalam"},{value:"mt",option:"Maltese"},{value:"mi",option:"Maori"},{value:"mr",option:"Marathi"},{value:"mo",option:"Moldavian"},{value:"mn",option:"Mongolian"},{value:"sr-ME",option:"Montenegrin"},{value:"ne",option:"Nepali"},{value:"no",option:"Norwegian"},{value:"nn",option:"Norwegian (Nynorsk)"},{value:"oc",option:"Occitan"},{value:"or",option:"Oriya"},{value:"om",option:"Oromo"},{value:"ps",option:"Pashto"},{value:"fa",option:"Persian"},{value:"xx-pirate",option:"Pirate"},{value:"pl",option:"Polish"},{value:"pt-BR",option:"Portuguese (Brazil)"},{value:"pt-PT",option:"Portuguese (Portugal)"},{value:"pa",option:"Punjabi"},{value:"qu",option:"Quechua"},{value:"ro",option:"Romanian"},{value:"rm",option:"Romansh"},{value:"ru",option:"Russian"},{value:"gd",option:"Scots Gaelic"},{value:"sr",option:"Serbian"},{value:"sh",option:"Serbo-Croatian"},{value:"st",option:"Sesotho"},{value:"sn",option:"Shona"},{value:"sd",option:"Sindhi"},{value:"si",option:"Sinhalese"},{value:"sk",option:"Slovak"},{value:"sl",option:"Slovenian"},{value:"so",option:"Somali"},{value:"es",option:"Spanish"},{value:"su",option:"Sundanese"},{value:"sw",option:"Swahili"},{value:"sv",option:"Swedish"},{value:"tg",option:"Tajik"},{value:"ta",option:"Tamil"},{value:"tt",option:"Tatar"},{value:"te",option:"Telugu"},{value:"th",option:"Thai"},{value:"ti",option:"Tigrinya"},{value:"to",option:"Tonga"},{value:"tr",option:"Turkish"},{value:"tk",option:"Turkmen"},{value:"tw",option:"Twi"},{value:"ug",option:"Uighur"},{value:"uk",option:"Ukrainian"},{value:"ur",option:"Urdu"},{value:"uz",option:"Uzbek"},{value:"vi",option:"Vietnamese"},{value:"cy",option:"Welsh"},{value:"xh",option:"Xhosa"},{value:"yi",option:"Yiddish"},{value:"yo",option:"Yoruba"},{value:"zu",option:"Zulu"}]}).factory("googleAsrLanguage",function(){return[{value:"af-ZA",option:"Afrikaans (South Africa)"},{value:"am-ET",option:"Amharic (Ethiopia)"},{value:"hy-AM",option:"Armenian (Armenia)"},{value:"az-AZ",option:"Azerbaijani (Azerbaijan)"},{value:"id-ID",option:"Indonesian (Indonesia)"},{value:"ms-MY",option:"Malay (Malaysia)"},{value:"bn-BD",option:"Bengali (Bangladesh)"},{value:"bn-IN",option:"Bengali (India)"},{value:"ca-ES",option:"Catalan (Spain)"},{value:"cs-CZ",option:"Czech (Czech Republic)"},{value:"da-DK",option:"Danish (Denmark)"},{value:"de-DE",option:"German (Germany)"},{value:"en-AU",option:"English (Australia)"},{value:"en-CA",option:"English (Canada)"},{value:"en-GH",option:"English (Ghana)"},{value:"en-GB",option:"English (United Kingdom)"},{value:"en-IN",option:"English (India)"},{value:"en-IE",option:"English (Ireland)"},{value:"en-KE",option:"English (Kenya)"},{value:"en-NZ",option:"English (New Zealand)"},{value:"en-NG",option:"English (Nigeria)"},{value:"en-PH",option:"English (Philippines)"},{value:"en-ZA",option:"English (South Africa)"},{value:"en-TZ",option:"English (Tanzania)"},{value:"en-US",option:"English (United States)"},{value:"es-AR",option:"Spanish (Argentina)"},{value:"es-BO",option:"Spanish (Bolivia)"},{value:"es-CL",option:"Spanish (Chile)"},{value:"es-CO",option:"Spanish (Colombia)"},{value:"es-CR",option:"Spanish (Costa Rica)"},{value:"es-EC",option:"Spanish (Ecuador)"},{value:"es-SV",option:"Spanish (El Salvador)"},{value:"es-ES",option:"Spanish (Spain)"},{value:"es-US",option:"Spanish (United States)"},{value:"es-GT",option:"Spanish (Guatemala)"},{value:"es-HN",option:"Spanish (Honduras)"},{value:"es-MX",option:"Spanish (Mexico)"},{value:"es-NI",option:"Spanish (Nicaragua)"},{value:"es-PA",option:"Spanish (Panama)"},{value:"es-PY",option:"Spanish (Paraguay)"},{value:"es-PE",option:"Spanish (Peru)"},{value:"es-PR",option:"Spanish (Puerto Rico)"},{value:"es-DO",option:"Spanish (Dominican Republic)"},{value:"es-UY",option:"Spanish (Uruguay)"},{value:"es-VE",option:"Spanish (Venezuela)"},{value:"eu-ES",option:"Basque (Spain)"},{value:"fil-PH",option:"Filipino (Philippines)"},{value:"fr-CA",option:"French (Canada)"},{value:"fr-FR",option:"French (France)"},{value:"gl-ES",option:"Galician (Spain)"},{value:"ka-GE",option:"Georgian (Georgia)"},{value:"gu-IN",option:"Gujarati (India)"},{value:"hr-HR",option:"Croatian (Croatia)"},{value:"zu-ZA",option:"Zulu (South Africa)"},{value:"is-IS",option:"Icelandic (Iceland)"},{value:"it-IT",option:"Italian (Italy)"},{value:"jv-ID",option:"Javanese (Indonesia)"},{value:"kn-IN",option:"Kannada (India)"},{value:"km-KH",option:"Khmer (Cambodia)"},{value:"lo-LA",option:"Lao (Laos)"},{value:"lv-LV",option:"Latvian (Latvia)"},{value:"lt-LT",option:"Lithuanian (Lithuania)"},{value:"hu-HU",option:"Hungarian (Hungary)"},{value:"ml-IN",option:"Malayalam (India)"},{value:"mr-IN",option:"Marathi (India)"},{value:"nl-NL",option:"Dutch (Netherlands)"},{value:"ne-NP",option:"Nepali (Nepal)"},{value:"nb-NO",option:"Norwegian Bokmal (Norway)"},{value:"pl-PL",option:"Polish (Poland)"},{value:"pt-BR",option:"Portuguese (Brazil)"},{value:"pt-PT",option:"Portuguese (Portugal)"},{value:"ro-RO",option:"Romanian (Romania)"},{value:"si-LK",option:"Sinhala (Srilanka)"},{value:"sk-SK",option:"Slovak (Slovakia)"},{value:"sl-SI",option:"Slovenian (Slovenia)"},{value:"su-ID",option:"Sundanese (Indonesia)"},{value:"sw-TZ",option:"Swahili (Tanzania)"},{value:"sw-KE",option:"Swahili (Kenya)"},{value:"fi-FI",option:"Finnish (Finland)"},{value:"sv-SE",option:"Swedish (Sweden)"},{value:"ta-IN",option:"Tamil (India)"},{value:"ta-SG",option:"Tamil (Singapore)"},{value:"ta-LK",option:"Tamil (Sri Lanka)"},{value:"ta-MY",option:"Tamil (Malaysia)"},{value:"te-IN",option:"Telugu (India)"},{value:"vi-VN",option:"Vietnamese (Vietnam)"},{value:"tr-TR",option:"Turkish (Turkey)"},{value:"ur-PK",option:"Urdu (Pakistan)"},{value:"ur-IN",option:"Urdu (India)"},{value:"el-GR",option:"Greek (Greece)"},{value:"bg-BG",option:"Bulgarian (Bulgaria)"},{value:"ru-RU",option:"Russian (Russia)"},{value:"sr-RS",option:"Serbian (Serbia)"},{value:"uk-UA",option:"Ukrainian (Ukraine)"},{value:"he-IL",option:"Hebrew (Israel)"},{value:"ar-IL",option:"Arabic (Israel)"},{value:"ar-JO",option:"Arabic (Jordan)"},{value:"ar-AE",option:"Arabic (United Arab Emirates)"},{value:"ar-BH",option:"Arabic (Bahrain)"},{value:"ar-DZ",option:"Arabic (Algeria)"},{value:"ar-SA",option:"Arabic (Saudi Arabia)"},{value:"ar-IQ",option:"Arabic (Iraq)"},{value:"ar-KW",option:"Arabic (Kuwait)"},{value:"ar-MA",option:"Arabic (Morocco)"},{value:"ar-TN",option:"Arabic (Tunisia)"},{value:"ar-OM",option:"Arabic (Oman)"},{value:"ar-PS",option:"Arabic (State of Palestine)"},{value:"ar-QA",option:"Arabic (Qatar)"},{value:"ar-LB",option:"Arabic (Lebanon)"},{value:"ar-EG",option:"Arabic (Egypt)"},{value:"fa-IR",option:"Persian (Iran)"},{value:"hi-IN",option:"Hindi (India)"},{value:"th-TH",option:"Thai (Thailand)"},{value:"ko-KR",option:"Korean (South Korea)"},{value:"cmn-Hant-TW",option:"Chinese, Mandarin (Traditional, Taiwan)"},{value:"yue-Hant-HK",option:"Chinese, Cantonese (Traditional, Hong Kong)"},{value:"ja-JP",option:"Japanese (Japan)"},{value:"cmn-Hans-HK",option:"Chinese, Mandarin (Simplified, Hong Kong)"},{value:"cmn-Hans-CN",option:"Chinese, Mandarin (Simplified, China)"}]}).factory("awsPollyVoice",function(){return[{value:"Amy",option:"Amy (English, British, Female)"},{value:"Astrid",option:"Astrid (Swedish, Female)"},{value:"Brian",option:"Brian (English, British, Male)"},{value:"Carla",option:"Carla (Italian, Female)"},{value:"Carmen",option:"Carmen (Romanian, Female)"},{value:"Celine",option:"Celine (French, Female)"},{value:"Chantal",option:"Chantal (French, Canadian, Female)"},{value:"Conchita",option:"Conchita (Spanish, Castilian, Female)"},{value:"Cristiano",option:"Cristiano (Portuguese, Male)"},{value:"Dora",option:"Dora (Icelandic, Female)"},{value:"Emma",option:"Emma (English, British, Female)"},{value:"Enrique",option:"Enrique (Spanish, Castilian, Male)"},{value:"Ewa",option:"Ewa (Polish, Female)"},{value:"Filiz",option:"Filiz (Turkish, Female)"},{value:"Geraint",option:"Geraint (English, Welsh, Male)"},{value:"Giorgio",option:"Giorgio (Italian, Male)"},{value:"Gwineth",option:"Gwineth (Welsh, Female)"},{value:"Hans",option:"Hans (German, Male)"},{value:"Ines",option:"Ines (Portuguese, Female)"},{value:"Ivy",option:"Ivy (English, US, Female)"},{value:"Jacek",option:"Jacek (Polish, Male)"},{value:"Jan",option:"Jan (Polish, Male)"},{value:"Joanna",option:"Joanna (English, US, Female)"},{value:"Joey",option:"Joey (English, US, Male)"},{value:"Justin",option:"Justin (English, US, Male)"},{value:"Karl",option:"Karl (Icelandic, Male)"},{value:"Kendra",option:"Kendra (English, US, Female)"},{value:"Kimberly",option:"Kimberly (English, US, Female)"},{value:"Liv",option:"Liv (Norwegian, Female)"},{value:"Lotte",option:"Lotte (Dutch, Female)"},{value:"Mads",option:"Mads (Danish, Male)"},{value:"Maja",option:"Maja (Polish, Female)"},{value:"Marlene",option:"Marlene (German, Female)"},{value:"Mathieu",option:"Mathieu (French, Male)"},{value:"Maxim",option:"Maxim (Russian, Male)"},{value:"Miguel",option:"Miguel (Spanish, US, Male)"},{value:"Mizuki",option:"Mizuki (Japanese, Female)"},{value:"Naja",option:"Naja (Danish, Female)"},{value:"Nicole",option:"Nicole (English, Austrialian, Female)"},{value:"Penelope",option:"Penelope (Spanish, US, Female)"},{value:"Raveena",option:"Raveena (English, Indian, Female)"},{value:"Ricardo",option:"Ricardo (Portuguese, Brazilian, Male)"},{value:"Ruben",option:"Ruben (Dutch, Male)"},{value:"Russell",option:"Russell (English, Austrialian, Male)"},{value:"Salli",option:"Salli (English, US, Female)"},{value:"Tatyana",option:"Tatyana (Russian, Female)"},{value:"Vitoria",option:"Vitoria (Portuguese, Brazilian, Female)"}]}).factory("awsPollyRegion",function(){return[{value:"us-east-1",option:"US East (N. Virginia)"},{value:"us-east-2",option:"US East (Ohio)"},{value:"us-west-1",option:"US West (N. California)"},{value:"us-west-2",option:"US West (Oregon)"},{value:"ca-central-1",option:"Canada (Central)"},{value:"eu-west-1",option:"EU (Ireland)"},{value:"eu-central-1",option:"EU (Frankfurt)"},{value:"eu-west-2",option:"EU (London)"},{value:"eu-west-3",option:"EU (Paris)"},{value:"ap-southeast-1",option:"Asia Pacific (Singapore)"},{value:"ap-southeast-2",option:"Asia Pacific (Sydney)"},{value:"ap-northeast-2",option:"Asia Pacific (Seoul)"},{value:"ap-northeast-1",option:"Asia Pacific (Tokyo)"},{value:"ap-south-1",option:"Asia Pacific (Mumbai)"},{value:"sa-east-1",option:"South America (São Paulo)"}]}).factory("awsLexRegion",function(){return[{value:"us-east-1",option:"US East (N. Virginia)"},{value:"us-west-2",option:"US West (Oregon)"},{value:"eu-west-1",option:"EU (Ireland)"},{value:"ap-southeast-2",option:"Asia Pacific (Sydney)"}]}).factory("dialogFlowLanguage",function(){return[{value:"da",option:"Danish"},{value:"en",option:"English"},{value:"de",option:"German"},{value:"it",option:"Italian"},{value:"es",option:"Spanish"},{value:"fr",option:"French"},{value:"id",option:"Indonesian"},{value:"ja",option:"Japanese"},{value:"ko",option:"Korean (South Korea)"},{value:"nl",option:"Dutch"},{value:"no",option:"Norwegian"},{value:"pt",option:"Portuguese (European)"},{value:"pt-br",option:"Portuguese (Nrazilian)"},{value:"ru",option:"Russian"},{value:"sv",option:"Swedish"},{value:"th",option:"Thai"},{value:"uk",option:"Ukrainian"},{value:"zh-CN",option:"Chinese (Simplified)"},{value:"zh-HK",option:"Chinese (Hong Kong)"},{value:"zh-TW",option:"Chinese (Traditional)"}]})}(),function(){"use strict";function e(t,e,n,a){var i=this;i.project={preproduction:n},i.closeDialog=function(e){e?(a(i.project.preproduction),t.hide(i.project.preproduction)):t.hide()}}e.$inject=["$mdDialog","toasty","currentXML","saveCallback"],angular.module("app.callysquare").controller("MxGraphEditXMLController",e)}(),function(){"use strict";function e(t,n){var a=this;function i(e){e?(n(e),t.hide(e)):t.hide()}a.errors=[],a.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:5242880,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},a.ngFlow={flow:{}},a.dropping=!1,a.closeDialog=i,a.fileAdded=function(e){a.errors=[];_.includes(["xml"],e.getExtension())||a.errors.push({message:"The extension "+e.getExtension()+" is not supported!"});5242880<e.size&&a.errors.push({message:"The file is too big. The max allowed size is 5MB"});if(!a.errors.length){var t=new FileReader;t.onload=function(e){i(e.target.result)},t.readAsText(e.file)}}}e.$inject=["$mdDialog","saveCallback"],angular.module("app.callysquare").controller("MxGraphImportXMLController",e)}(),function(){"use strict";function e(t,n,e,a){var i=this;i.project=_.clone(e),i.closeDialog=function(){t.hide()},i.save=function(){i.errors=[],a.squareProject.update({id:i.project.id},{notes:i.project.notes,description:i.project.description}).$promise.then(function(e){n.success({title:"Project updated!",msg:i.project.name?i.project.name+" has been updated!":""}),t.hide(e)}).catch(function(e){console.error(e),i.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.update"}]})}}e.$inject=["$mdDialog","toasty","project","api"],angular.module("app.callysquare").controller("MxGraphUpdateInfoController",e)}(),function(){"use strict";function e(t,e,n,a,i){var s=this;s.projects=n,s.id="",s.newWindow=!0,s.closeDialog=function(e){s.errors=[],e?(t.hide(),s.newWindow?a.open("/callysquare/projects/"+s.id,"_blank"):i.go("app.callysquare.projects.edit",{id:s.id})):t.hide()}}e.$inject=["$mdDialog","toasty","projects","$window","$state"],angular.module("app.callysquare").controller("MxGraphOpenProjectController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o){var r=this;function l(){return a.squareProject.getUsers({id:r.project.id,fields:"id,name,fullname,internal",nolimit:!0,role:"user"}).$promise.then(function(e){return r.selectedItems=e.rows?_.map(e.rows,function(e){return e}):[],r.dualMultiselectOptions.selectedItems=r.selectedItems,a.user.get({fields:"id,fullname,name,internal",role:"user",nolimit:!0}).$promise}).then(function(e){r.items=e.rows?_.map(e.rows,function(e){return e}):[],r.dualMultiselectOptions.items=_.differenceBy(r.items,r.selectedItems,"id")}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETUSERS",msg:e.status?JSON.stringify(e.data):e.toString()})})}r.project=t,r.penalty=0,r.items=[],r.selectedItems=[],r.closeDialog=function(){e.hide()},r.dualMultiselectOptions={readOnly:!1,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("CALLYSQUARE.ALL_USERS"),labelSelected:s.instant("CALLYSQUARE.SELECTED_USERS"),transferCallback:function(e,t){a.squareProject[t?"removeUsers":"addUsers"]({id:r.project.id,ids:_.map(e,"id"),penalty:r.penalty||0}).$promise.then(function(){n.success({title:"Project properly "+(t?"removed":"added"),msg:"Project has been "+(t?"removed":"added")+"!"}),t||l()}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:squareProjects.ADDUSERS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},l()}e.$inject=["$mdDialog","toasty","api","project","projects","$translate","Auth"],angular.module("app.callysquare").controller("ProjectspermissionaddController",e)}(),function(){"use strict";function e(t,n,e,a,i,s,o){var r=this;r.project=angular.copy(e),r.project.name+="_new",r.project.preproduction=a,r.newWindow=!0,r.closeDialog=function(){t.hide()},r.save=function(){delete r.project.id,i.squareProject.save(r.project).$promise.then(function(e){n.success({title:"Project properly created",msg:r.project.name?r.project.name+" has been created!":""}),t.hide(e),r.newWindow?s.open("/callysquare/projects/"+e.id,"_blank"):o.go("app.callysquare.projects.edit",{id:e.id})}).catch(function(e){console.error(e),r.errors=e.data.errors||[{message:e.toString(),type:"api.squareProject.save"}]})}}e.$inject=["$mdDialog","toasty","project","currentXML","api","$window","$state"],angular.module("app.callysquare").controller("MxGraphSaveProjectAsController",e)}(),function(){"use strict";function e(e,n,a,i,s,o,r,t,l,d,c,m,u,p,g,v,h,f,b,A,E,y,S,T){var I=this;I.currentUser=T.getCurrentUser(),I.project=t||{},I.userProfileSection=S&&1==S.count?S.rows[0]:null,I.crudPermissions=T.parseCrudPermissions(I.userProfileSection?I.userProfileSection.crudPermissions:null),I.onInit=function(){new EditorUi(I,new Editor,document.getElementById("geEditor")).openString(I.project.preproduction,I.project.name,I.project)},I.saveOrPublishProject=function(e,t){var n={preproduction:e};t&&(n.production=e);r.squareProject.update({id:I.project.id},n).$promise.then(function(e){o.success({title:"Project "+(t?"published":"saved")+"!",msg:I.project.name?I.project.name+" has been "+(t?"published":"saved")+"!":""}),I.project.preproduction=e.preproduction}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsquareProject",msg:e.data?JSON.stringify(e.data):e.toString()})})},I.openDialog=function(e,t){a.show({controller:"MxGraphDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/dialog/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{users:l.rows||[],trunks:d.rows||[],queues:c.rows||[],sounds:m.rows||[],variables:u.rows||[],databases:p.rows||[],contexts:g.rows||[],projects:v.rows||[],intervals:h.rows||[],mailAccounts:f.rows||[],smsAccounts:E.rows||[],pauses:y.rows||[],templates:b.rows||[],lists:A.rows||[],cell:e,saveCallback:t,crudPermissions:I.crudPermissions}})},I.newProject=function(e){a.show({controller:"CreateOrEditSquareProjectDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/create/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{project:e,projects:v.rows,openFromEditor:!0,license:null,setting:null,crudPermissions:I.crudPermissions}})},I.openProject=function(){a.show({controller:"MxGraphOpenProjectController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/open/open.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{projects:v.rows||[]}})},I.saveProjectAs=function(e){a.show({controller:"MxGraphSaveProjectAsController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/saveAs/saveAs.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{project:I.project,currentXML:e}}).then(function(e){e&&v.rows.push(e)})},I.newVariable=function(t){return i(function(a,t){return r.userProfileSection.get({userProfileId:I.currentUser.userProfileId,sectionId:1012}).$promise.then(function(e){var t=e.rows?e.rows[0]:null,n=T.parseCrudPermissions(t?t.crudPermissions:null);a(n)}).catch(function(e){t(e)})}).then(function(e){e.canEdit?a.show({controller:"CreateOrEditVariableDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/variables/create/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{variable:t,variables:u.rows,license:null,setting:null,crudPermissions:e}}):o.info({title:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_CREATION_MESSAGE")})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"API:NEW_VARIABLE",msg:e.data?JSON.stringify(e.data):e.toString()})})},I.updateInfo=function(e){a.show({controller:"MxGraphUpdateInfoController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/info/info.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:I.project}}).then(function(e){e&&_.merge(I.project,e)})},I.editXML=function(e,t){a.show({controller:"MxGraphEditXMLController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/edit/edit.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{currentXML:e,saveCallback:t}}).then(function(e){e&&(I.project.preproduction=e)})},I.importXML=function(e){a.show({controller:"MxGraphImportXMLController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/edit/import/import.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{saveCallback:e}}).then(function(e){e&&(I.project.preproduction=e)})},I.gotoProjects=function(){e.go("app.callysquare.projects")}}e.$inject=["$state","$document","$mdDialog","$q","$translate","toasty","api","project","users","trunks","queues","sounds","variables","databases","contexts","projects","intervals","mailAccounts","templates","lists","smsAccounts","pauses","userProfileSection","Auth"],angular.module("app.callysquare").controller("ProjectController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m,u){var p=this;p.currentUser=u.getCurrentUser(),p.projects=a||{count:0,rows:[]},p.userProfile=i,p.userProfileSection=s&&1==s.count?s.rows[0]:null,p.crudPermissions=u.parseCrudPermissions(p.userProfileSection?p.userProfileSection.crudPermissions:null),p.table="projects",p.listOrder="",p.listOrderAsc=null,p.selectedProjects=[],p.query={fields:"id,name,description,notes",sort:"-updatedAt",limit:10,page:1},p.editstate=function(e,t){n.go("app.callysquare.projects.edit",{id:e.id,crudPermissions:p.crudPermissions})},p.deleteconfirm=function(e,t){var n=l.confirm().title("Are you sure want to delete the project?").htmlContent("<b>"+e.name+"</b> will be deleted.").ariaLabel("delete project").targetEvent(t).ok("OK").cancel("CANCEL");l.show(n).then(function(){f(e)},function(){console.log("CANCEL")})},p.success=h,p.getProjects=function(){p.query.offset=(p.query.page-1)*p.query.limit,u.hasRole("admin")?p.promise=o.squareProject.get(p.query,h).$promise:(p.query.id=p.userProfile.id,p.query.section="SquareProjects",p.promise=o.userProfile.getResources(p.query,h).$promise)},p.createOrEditProject=function(e,t){l.show({controller:"CreateOrEditSquareProjectDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/projects/create/dialog.html",parent:angular.element(d.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:t,projects:p.projects.rows,openFromEditor:null,setting:null,crudPermissions:p.crudPermissions}})},p.deleteProject=f,p.exportSelectedProjects=function(){var e=angular.copy(p.selectedProjects);return p.selectedProjects=[],e},p.deleteSelectedProjects=function(e){var t=l.confirm().title("Are you sure want to delete the selected projects?").htmlContent("<b>"+p.selectedProjects.length+" selected</b> will be deleted.").ariaLabel("delete Projects").targetEvent(e).ok("OK").cancel("CANCEL");l.show(t).then(function(){p.selectedProjects.forEach(function(e){f(e)}),p.selectedProjects=[]})},p.deselectProjects=function(){p.selectedProjects=[]},p.selectAllProjects=function(){p.selectedProjects=p.projects.rows};var g=!0,v=1;function h(e){p.projects=e||{count:0,rows:[]}}function f(e){o.squareProject.delete({id:e.id}).$promise.then(function(){_.remove(p.projects.rows,{id:e.id}),p.projects.count-=1,p.projects.rows.length||p.getProjects(),m.success({title:"Project deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.project.delete"}];for(var t=0;t<e.data.errors.length;t++)m.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.project.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){g?c(function(){g=!1}):(t||(v=p.query.page),e!==t&&(p.query.page=1),e||(p.query.page=v),p.getProjects())})}e.$inject=["$scope","$state","$mdSidenav","projects","userProfile","userProfileSection","api","msUtils","$mdDialog","$document","$timeout","toasty","Auth"],angular.module("app.callysquare").controller("ProjectsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CALLYSQUARE.EDIT_SQUARERECORDING",g.squareRecording=angular.copy(l),g.squareRecordings=r,g.newSquareRecording=!1,g.squareRecording||(g.squareRecording={},g.title="CALLYSQUARE.NEW_SQUARERECORDING",g.newSquareRecording=!0),g.addNewSquareRecording=function(){g.errors=[],d.squareRecording.save(g.squareRecording).$promise.then(function(e){g.squareRecordings.unshift(e.toJSON()),o.success({title:"SquareRecording properly created",msg:g.squareRecording.name?g.squareRecording.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.squareRecording.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSquareRecording=function(){g.errors=[],d.squareRecording.update({id:g.squareRecording.id},g.squareRecording).$promise.then(function(e){var t=_.find(g.squareRecordings,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SquareRecording properly saved!",msg:g.squareRecording.name?g.squareRecording.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.squareRecording.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareRecording.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSquareRecording=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The squareRecording will be deleted.").ariaLabel("Delete SquareRecording").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.squareRecording.delete({id:g.squareRecording.id}).$promise.then(function(){_.remove(g.squareRecordings,{id:g.squareRecording.id}),o.success({title:"SquareRecording properly deleted!",msg:(g.squareRecording.name||"squareRecording")+" has been deleted!"}),v(g.squareRecording)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.squareRecording.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareRecording.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","squareRecordings","squareRecording","api","Auth","license","setting","crudPermissions"],angular.module("app.callysquare").controller("CreateOrEditSquareRecordingDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.squareRecordings=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="squareRecordings",b.listOrder="",b.listOrderAsc=null,b.selectedSquareRecordings=[],b.query={fields:"createdAt,updatedAt,id,filename,projectName,uniqueid,callerid,extension,audio",sort:"-updatedAt",limit:10,page:1},b.downloadfile2=function(r,e){return m.squareRecording.download({id:r.id}).$promise.then(function(e){var t,n,a=[e.buffer],i="download",s=new Blob(a,{type:e.type});t=r.value,n=-1<t.lastIndexOf("/")?t.substring(t.lastIndexOf("/")+1):-1<t.lastIndexOf("\\")?t.substring(t.lastIndexOf("\\")+1):t,i=(n=n.substring(0,n.lastIndexOf(".")))+".wav";var o=window.document.createElement("a");o.setAttribute("href",URL.createObjectURL(s)),o.setAttribute("download",i),document.body.appendChild(o),o.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.squareRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("squareRecording")+"?").htmlContent("<b>"+(e.name||"squareRecording")+"</b> will be deleted.").ariaLabel("delete squareRecording").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getSquareRecordings=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.squareRecording.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="SquareRecordings",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSquareRecording=function(e,t){i.show({controller:"CreateOrEditSquareRecordingDialogController",controllerAs:"vm",templateUrl:"app/main/apps/callysquare/views/squareRecordings/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{squareRecording:t,squareRecordings:b.squareRecordings.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSquareRecording=S,b.exportSelectedSquareRecordings=function(){var e=angular.copy(b.selectedSquareRecordings);return b.selectedSquareRecordings=[],e},b.deleteSelectedSquareRecordings=function(e){var t=i.confirm().title("Are you sure want to delete the selected squareRecordings?").htmlContent("<b>"+b.selectedSquareRecordings.length+" selected</b> will be deleted.").ariaLabel("delete SquareRecordings").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedSquareRecordings.forEach(function(e){S(e)}),b.selectedSquareRecordings=[]})},b.deselectSquareRecordings=function(){b.selectedSquareRecordings=[]},b.selectAllSquareRecordings=function(){b.selectedSquareRecordings=b.squareRecordings.rows};var A=!0,E=1;function y(e){b.squareRecordings=e||{count:0,rows:[]}}function S(e){m.squareRecording.delete({id:e.id}).$promise.then(function(){_.remove(b.squareRecordings.rows,{id:e.id}),b.squareRecordings.count-=1,b.squareRecordings.rows.length||b.getSquareRecordings(),p.success({title:_.startCase("SquareRecording")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsquareRecording"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEsquareRecording",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getSquareRecordings())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","squareRecordings","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.callysquare").controller("SquareRecordingsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.chatQueues=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="chatQueues",b.listOrder="",b.listOrderAsc=null,b.selectedChatQueues=[],b.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"chat",limit:10,page:1},b.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.chat.chatQueues.edit",{id:e.id,chatQueue:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"ChatQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatQueue:e,chatQueues:b.chatQueues?b.chatQueues.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"ChatQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatQueue:e,chatQueues:b.chatQueues?b.chatQueues.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("chatQueue")+"?").htmlContent("<b>"+(e.name||"chatQueue")+"</b> will be deleted.").ariaLabel("delete chatQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:510}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.chat.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.chat.realtime.queues",{})}},b.success=y,b.getChatQueues=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.chatQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ChatQueues",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditChatQueue=function(e,t){i.show({controller:"CreateOrEditChatQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatQueue:t,chatQueues:b.chatQueues.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteChatQueue=S,b.exportSelectedChatQueues=function(){var e=angular.copy(b.selectedChatQueues);return b.selectedChatQueues=[],e},b.deleteSelectedChatQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected chatQueues?").htmlContent("<b>"+b.selectedChatQueues.length+" selected</b> will be deleted.").ariaLabel("delete ChatQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedChatQueues.forEach(function(e){S(e)}),b.selectedChatQueues=[]})},b.deselectChatQueues=function(){b.selectedChatQueues=[]},b.selectAllChatQueues=function(){b.selectedChatQueues=b.chatQueues.rows};var A=!0,E=1;function y(e){b.chatQueues=e||{count:0,rows:[]}}function S(e){m.chatQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.chatQueues.rows,{id:e.id}),b.chatQueues.count-=1,b.chatQueues.rows.length||b.getChatQueues(),p.success({title:_.startCase("ChatQueue")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEchatQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEchatQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getChatQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","chatQueues","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.chat").controller("ChatQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CHAT.EDIT_CHATQUEUE",g.chatQueue=angular.copy(l),g.chatQueues=r,g.newChatQueue=!1,g.chatQueue||(g.chatQueue={strategy:"beepall",timeout:10},g.title="CHAT.NEW_CHATQUEUE",g.newChatQueue=!0),g.addNewChatQueue=function(){g.errors=[],d.chatQueue.save(g.chatQueue).$promise.then(function(e){g.chatQueues.unshift(e.toJSON()),o.success({title:"ChatQueue properly created",msg:g.chatQueue.name?g.chatQueue.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveChatQueue=function(){g.errors=[],d.chatQueue.update({id:g.chatQueue.id},g.chatQueue).$promise.then(function(e){var t=_.find(g.chatQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatQueue properly saved!",msg:g.chatQueue.name?g.chatQueue.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteChatQueue=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The chatQueue will be deleted.").ariaLabel("Delete ChatQueue").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.chatQueue.delete({id:g.chatQueue.id}).$promise.then(function(){_.remove(g.chatQueues,{id:g.chatQueue.id}),o.success({title:"ChatQueue properly deleted!",msg:(g.chatQueue.name||"chatQueue")+" has been deleted!"}),v(g.chatQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","chatQueues","chatQueue","api","Auth","license","setting","crudPermissions"],angular.module("app.chat").controller("CreateOrEditChatQueueDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.chatQueue.getAgents({id:c.chatQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserChatQueue?"penalty "+e.UserChatQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.chatQueue=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.chatQueue.removeAgents({id:c.chatQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.chatQueue.addAgents({id:c.chatQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("CHAT.ALL_AGENTS"),labelSelected:r.instant("CHAT.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","chatQueue","chatQueues","realtime","$translate","Auth","crudPermissions"],angular.module("app.chat").controller("ChatQueueagentaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r){var l=this;function d(){return a(function(n,t){return a(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.chatQueue.getTeams({id:l.chatQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.chatQueue=t,l.crudPermissions=r,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("CHAT.ALL_TEAMS"),labelSelected:n.instant("CHAT.SELECTED_TEAMS"),transferCallback:function(e,t){var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.chatQueue.removeTeams({id:l.chatQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.chatQueue.addTeams({id:l.chatQueue.id,teams:_.map(n,function(e){return _.pick(e,["id"])})}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),i.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","chatQueue","$translate","Auth","crudPermissions"],angular.module("app.chat").controller("ChatQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.chatQueue=c||e.params.chatQueue||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.teamadddialog=function(e,t){n.show({controller:"ChatQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/teamadd/teamadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatQueue:e,chatQueues:u.chatQueues?u.chatQueues.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){n.show({controller:"ChatQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatQueue:e,chatQueues:u.chatQueues?u.chatQueues.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoChatQueues=function(){e.go("app.chat.chatQueues")},u.saveChatQueue=function(){r.chatQueue.update({id:u.chatQueue.id},u.chatQueue).$promise.then(function(){l.success({title:"ChatQueue updated!",msg:u.chatQueue.name?u.chatQueue.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","chatQueue","userProfileSection"],angular.module("app.chat").controller("ChatQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.chatWebsites=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="chatWebsites",b.listOrder="",b.listOrderAsc=null,b.selectedChatWebsites=[],b.query={fields:"createdAt,updatedAt,id,token,agentIdentifier,customerAlias,messageFontSize,name,key,address,remote,ListId,fidelity,timeout,agentAlias,closingQuestion,formSubmitSuccessMessage,formSubmitFailureMessage,color,color_focus,color_button,textColor,backgroundColor,fontSize,header_shape,showAgentAvatar,showCustomerAvatar,alignment,verticalAlignment,messagesAlignment,defaultTitle,animation,defaultWhiteLabel,whiteLabel,defaultLogo,conditionAgreement,autoclose,enableUnmanagedNote,unmanagedMessage,skipUnmanaged,sendUnmanaged,enableCustomerWriting,waitingTitle,waitingMessage,closingMessage,noteTitle,placeholderMessage,skipMessageButton,enableRating,ratingType,ratingStarsNumber,enableFeedback,forwardTranscript,forwardTranscriptMessage,closingMessageButton,download_transcript,enableCustomerAttachment,enableCustomerCheckmarks,systemAlias,enquiry_enable,enquiry_forwarding,enquiry_forwarding_address,name_title,username_placeholder,email_title,email_placeholder,header_online,hideWhenOffline,header_offline,start_chat_button,offline_chat_button,offlineMessageSubject,offlineMessageBody,offline_message,message_title,enquiry_message_placeholder,enquiry_button,rating_message,rating_send,rating_skip,onlineForm,offlineForm,mapKey,mapKeyOffline,forwardOffline,forwardOfflineAddress,IntervalId,timezone,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},b.arrayagentIdentifier=_.keyBy([{option:"WebsiteAlias",value:"'website_alias'"},{option:"AgentAlias",value:"'agent_alias'"},{option:"AgentFullname",value:"'agent_fullname'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayheader_shape=_.keyBy([{option:"Rounded",value:"'rounded'"},{option:"Squared",value:"'squared'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayalignment=_.keyBy([{option:"bottom_right",value:"'bottom_right'"},{option:"right",value:"'right'"},{option:"left",value:"'left'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraymessagesAlignment=_.keyBy([{option:"alternate",value:"'alternate'"},{option:"centered",value:"'centered'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayratingType=_.keyBy([{option:"Star",value:"'star'"},{option:"Thumb",value:"'thumb'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.chat.chatWebsites.edit",{id:e.id,chatWebsite:e,crudPermissions:b.crudPermissions})},b.interactionsgoto=function(e,t){n.go("app.chat.chatWebsites.edit",{id:e.id,tab:9})},b.offlinemessagesgoto=function(e,t){n.go("app.chat.chatWebsites.edit",{id:e.id,tab:10})},b.agentadddialog=function(e,t){i.show({controller:"ChatWebsiteagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatWebsite:e,chatWebsites:b.chatWebsites?b.chatWebsites.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("chatWebsite")+"?").htmlContent("<b>"+(e.name||"chatWebsite")+"</b> will be deleted.").ariaLabel("delete chatWebsite").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getChatWebsites=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.chatWebsite.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ChatWebsites",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditChatWebsite=function(e,t){i.show({controller:"CreateOrEditChatWebsiteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:t,chatWebsites:b.chatWebsites.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteChatWebsite=S,b.exportSelectedChatWebsites=function(){var e=angular.copy(b.selectedChatWebsites);return b.selectedChatWebsites=[],e},b.deleteSelectedChatWebsites=function(e){var t=i.confirm().title("Are you sure want to delete the selected chatWebsites?").htmlContent("<b>"+b.selectedChatWebsites.length+" selected</b> will be deleted.").ariaLabel("delete ChatWebsites").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedChatWebsites.forEach(function(e){S(e)}),b.selectedChatWebsites=[]})},b.deselectChatWebsites=function(){b.selectedChatWebsites=[]},b.selectAllChatWebsites=function(){b.selectedChatWebsites=b.chatWebsites.rows},g.hasRole("admin")?m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.lists,{id:e.resourceId})}),n=null;if(b.chatWebsite&&(n=_.find(b.lists,{id:Number(b.chatWebsite.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.lists,{id:n.id});a.canSelect=!1,t.push(a)}b.lists=t})}else{var n=[],a=null;b.chatWebsite&&(a=_.find(b.lists,{id:Number(b.chatWebsite.ListId)}));for(var i=0;i<b.lists.length;i++)a&&b.lists[i].id===a.id&&(b.lists[i].canSelect=!1,n.push(b.lists[i]));b.lists=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),g.hasRole("admin")?m.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){b.interval=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){b.interval=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.interval,{id:e.resourceId})}),n=null;if(b.chatWebsite&&(n=_.find(b.interval,{id:Number(b.chatWebsite.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.interval,{id:n.id});a.canSelect=!1,t.push(a)}b.interval=t})}else{var n=[],a=null;b.chatWebsite&&(a=_.find(b.interval,{id:Number(b.chatWebsite.IntervalId)}));for(var i=0;i<b.interval.length;i++)a&&b.interval[i].id===a.id&&(b.interval[i].canSelect=!1,n.push(b.interval[i]));b.interval=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.chatWebsites=e||{count:0,rows:[]}}function S(e){m.chatWebsite.delete({id:e.id}).$promise.then(function(){_.remove(b.chatWebsites.rows,{id:e.id}),b.chatWebsites.count-=1,b.chatWebsites.rows.length||b.getChatWebsites(),p.success({title:_.startCase("ChatWebsite")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEchatWebsite"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getChatWebsites())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","chatWebsites","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.chat").controller("ChatWebsitesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CHAT.EDIT_CHATWEBSITE",g.chatWebsite=angular.copy(l),g.chatWebsites=r,g.newChatWebsite=!1,g.chatWebsite||(g.chatWebsite={remote:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():""),header_shape:"rounded",alignment:"bottom_right",verticalAlignment:30,messagesAlignment:"alternate",IntervalId:"null",timezone:"null",waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},g.title="CHAT.NEW_CHATWEBSITE",g.newChatWebsite=!0),t.params.id&&(g.chatWebsite.ChatWebsiteId=t.params.id),g.addNewChatWebsite=function(){g.errors=[],d.chatWebsite.save(g.chatWebsite).$promise.then(function(e){g.chatWebsites.unshift(e.toJSON()),o.success({title:"ChatWebsite properly created",msg:g.chatWebsite.name?g.chatWebsite.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatWebsite.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatWebsite.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveChatWebsite=function(){g.errors=[],d.chatWebsite.update({id:g.chatWebsite.id},g.chatWebsite).$promise.then(function(e){var t=_.find(g.chatWebsites,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatWebsite properly saved!",msg:g.chatWebsite.name?g.chatWebsite.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatWebsite.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatWebsite.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteChatWebsite=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The chatWebsite will be deleted.").ariaLabel("Delete ChatWebsite").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.chatWebsite.delete({id:g.chatWebsite.id}).$promise.then(function(){_.remove(g.chatWebsites,{id:g.chatWebsite.id}),o.success({title:"ChatWebsite properly deleted!",msg:(g.chatWebsite.name||"chatWebsite")+" has been deleted!"}),v(g.chatWebsite)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatWebsite.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatWebsite.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.lists,{id:e.resourceId})}),n=null;if(g.chatWebsite&&(n=_.find(g.lists,{id:Number(g.chatWebsite.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.lists,{id:n.id});a.canSelect=!1,t.push(a)}g.lists=t})}else{var n=[],a=null;g.chatWebsite&&(a=_.find(g.lists,{id:Number(g.chatWebsite.ListId)}));for(var i=0;i<g.lists.length;i++)a&&g.lists[i].id===a.id&&(g.lists[i].canSelect=!1,n.push(g.lists[i]));g.lists=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.hasRole("admin")?d.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){g.interval=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){g.interval=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.interval,{id:e.resourceId})}),n=null;if(g.chatWebsite&&(n=_.find(g.interval,{id:Number(g.chatWebsite.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.interval,{id:n.id});a.canSelect=!1,t.push(a)}g.interval=t})}else{var n=[],a=null;g.chatWebsite&&(a=_.find(g.interval,{id:Number(g.chatWebsite.IntervalId)}));for(var i=0;i<g.interval.length;i++)a&&g.interval[i].id===a.id&&(g.interval[i].canSelect=!1,n.push(g.interval[i]));g.interval=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","chatWebsites","chatWebsite","api","Auth","license","setting","crudPermissions"],angular.module("app.chat").controller("CreateOrEditChatWebsiteDialogController",e)}(),function(){"use strict";function e(o,i,a,s,e){var r=this;function t(e,t){if(r.chatWebsiteApps.rows.length){var n=r.chatWebsiteApps.rows[t]?r.chatWebsiteApps.rows[t]:r.chatWebsiteApps.rows[0];i.show({controller:"EditChatWebsiteApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsiteApp:n,chatWebsite:r.chatWebsite,crudPermissions:r.crudPermissions}}).then(function(e){e&&(e.id?r.chatWebsiteApps.rows[t]=e:r.chatWebsiteApps.rows.splice(t,0,e),l())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function l(){for(var e=1,t=[],n=0;n<r.chatWebsiteApps.rows.length;n++,0){var a=r.chatWebsiteApps.rows[n],i=[],s=[];a.intervals="*,*,*,*"!==a.interval?[a.interval]:a.IntervalId?_.map(_.filter(r.intervals.rows,{IntervalId:a.IntervalId}),"interval"):[],a.context=r.chatWebsite.context,a.exten=r.chatWebsite.exten,a.type&&(a.type=a.type.toLowerCase()),a.priority=i.length?_.last(i).priority+1:e,e=(s.length?_.last(s).priority:a.priority)+1,t=_.concat(t,i,[a],s)}o.chatWebsite.addApplications({id:r.chatWebsite.id},_.sortBy(t,"priority")).$promise.then(function(e){r.chatWebsiteApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){r.chatWebsiteApps=e||{count:0,rows:[]}}r.currentUser=e.getCurrentUser(),r.chatWebsite={},r.chatWebsiteApps={count:0,rows:[]},r.selectedChatWebsiteApps=[],r.crudPermissions,r.query={sort:"priority"},r.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",types:["always","custom","list"],fields:[],isApp:!1},{app:"noop",appType:"noop",type:"noop",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,fields:[{title:"Value",name:"value",type:"text",param:0}]},{app:"system",appType:"system",type:"system",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,extraApi:[{name:"variables",field:{name:"variable",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1012}}],fields:[{title:"Command",name:"command",type:"text",required:!0,param:0},{title:"Variable",name:"variable",type:"apiselect",values:"variables",value:"variable.name",option:"variable.name",defaultValues:[{value:"''",option:"None"}],defaultValue:"''",param:1}]},{app:"gotop",appType:"gotop",type:"goto",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Priority",name:"priority",type:"number",required:!0,min:0,param:0}]},{app:"gotoif",appType:"gotoif",type:"gotoif",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Condition",name:"condition",type:"text",required:!0,param:0},{title:"truepriority",name:"truepriority",type:"number",min:1,required:!0,param:1},{title:"falsepriority",name:"falsepriority",type:"number",min:1,required:!0,param:2}]},{app:"queue",appType:"queue",foreignKey:"ChatQueueId",type:"queue",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"queues",field:{name:"queue",key:"name"},route:"chatQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:501}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",defaultValue:300,required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:300,param:1}]},{app:"agent",appType:"agent",type:"agent",foreignKey:"UserId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"agents",field:{name:"agent",key:"name"},route:"user",filters:{fields:"id,name",role:"agent",sort:"name",nolimit:!0},permissions:{section:202}}],fields:[{title:"Agent",name:"agent",type:"apiselect",values:"agents",value:"agent.name",option:"agent.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:30,param:1}]},{app:"close",appType:"close",type:"close",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Disposition",name:"disposition",type:"text",required:!0,param:0}]},{app:"autoreply",appType:"autoreply",type:"autoreply",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"times",name:"times",type:"select",defaultValue:"1",values:[{option:"One Time",value:"1"},{option:"Always",value:"0"}],required:!0,param:0},{title:"Text",name:"text",type:"textarea",required:!0,param:1}]},{app:"tag",appType:"tag",type:"tag",foreignKey:"TagId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"tags",field:{name:"tag",key:"name"},route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1008}}],fields:[{title:"Tag",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",required:!0,param:0}]},{app:"dialogflow",appType:"dialogflow",type:"dialogflow",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Key",name:"key",type:"text",required:!0,param:0},{title:"language",name:"language",type:"select",defaultValue:"'en'",values:[{option:"Danish",value:"'da'"},{option:"English",value:"'en'"},{option:"German",value:"'de'"},{option:"Italian",value:"'it'"},{option:"Spanish",value:"'es'"},{option:"French",value:"'fr'"},{option:"Indonesian",value:"'id'"},{option:"Japanese",value:"'ja'"},{option:"Korean (South Korea)",value:"'ko'"},{option:"Dutch",value:"'nl'"},{option:"Norwegian",value:"'no'"},{option:"Portuguese (European)",value:"'pt'"},{option:"Portuguese (Nrazilian)",value:"'pt-br'"},{option:"Russian",value:"'ru'"},{option:"Swedish",value:"'sv'"},{option:"Thai",value:"'th'"},{option:"Ukrainian",value:"'uk'"},{option:"Chinese (Simplified)",value:"'zh-CN'"},{option:"Chinese (Hong Kong)",value:"'zh-HK'"},{option:"Chinese (Traditional)",value:"'zh-TW'"}],required:!0,param:1},{title:"welcomemessage",name:"welcomemessage",type:"textarea",maxlength:255,param:2,help:!0}]},{app:"amazonlex",appType:"amazonlex",type:"amazonlex",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"accesskeyid",name:"accesskeyid",type:"text",required:!0,param:0},{title:"secretaccesskey",name:"secretaccesskey",type:"text",required:!0,param:1},{title:"lexregion",name:"lexregion",type:"select",defaultValue:"'us-east-1'",values:[{option:"US East (N. Virginia)",value:"'us-east-1'"},{option:"US West (Oregon)",value:"'us-west-2'"},{option:"EU (Ireland)",value:"'eu-west-1'"},{option:"Asia Pacific (Sydney)",value:"'ap-southeast-2'"}],required:!0,param:2},{title:"botname",name:"botname",type:"text",required:!0,param:3},{title:"welcomemessage",name:"welcomemessage",type:"textarea",maxlength:255,param:4,help:!0}]}],["app"]),{isApp:!1}),r.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},r.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){l()}},r.init=function(e,t){r.chatWebsite=e,r.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},r.applications.disabled=!r.crudPermissions.canEdit,r.query.id=e.id,r.query.isApp=!0,r.query.nolimit=!0,r.getChatWebsiteApps(),r.getIntervals()},r.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){r.chatWebsiteApps.rows.splice(t,1),l()},function(){console.log("CANCEL")})},r.getChatWebsiteApps=function(){r.promise=o.chatWebsite.getApplications(r.query,n).$promise},r.editChatWebsiteApp=t,r.editInterval=function(e,t){if(r.chatWebsiteApps.rows.length){var n=r.chatWebsiteApps.rows[t]?r.chatWebsiteApps.rows[t]:r.chatWebsiteApps.rows[0];i.show({controller:"EditChatWebsiteAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:r.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,l())})}},r.deleteChatWebsiteApp=function(e){_.remove(r.chatWebsiteApps.rows,{id:e.id}),l(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},r.deleteSelectedChatWebsiteApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+r.selectedChatWebsiteApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){r.selectedChatWebsiteApps.forEach(function(e){_.remove(r.chatWebsiteApps.rows,{id:e.id})}),r.selectedChatWebsiteApps=[],l()})},r.rewriteRouting=l,r.getIntervals=function(){return o.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){r.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.chat").controller("ChatWebsiteActionsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.chatWebsite.getAgents({id:c.chatWebsite.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserChatWebsite?"penalty "+e.UserChatWebsite.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.chatWebsite=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.chatWebsite.removeAgents({id:c.chatWebsite.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.chatWebsite.addAgents({id:c.chatWebsite.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("CHAT.ALL_AGENTS"),labelSelected:r.instant("CHAT.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","chatWebsite","chatWebsites","realtime","$translate","Auth","crudPermissions"],angular.module("app.chat").controller("ChatWebsiteagentaddController",e)}(),function(){"use strict";function e(e,a){var i=this;i.chatWebsite={},i.crudPermissions,i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.chatWebsite.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.chatWebsite.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e,t){i.chatWebsite=angular.copy(e),i.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.ngFlowOptions.target="/api/chat/websites/:id/avatar".replace(":id",i.chatWebsite.id),i.chatWebsite.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.chat").controller("ChatWebsiteagentAvatarController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.agent=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agent.appdata)switch(l.agent.appType?l.agent.appType.toLowerCase():l.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agent.appdata.split(",");l.agent.key=d[0],l.agent.language=d[1],l.agent.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agent.appdata.split(",");l.agent.accesskeyid=d[0],l.agent.secretaccesskey=d[1],l.agent.lexregion=d[2],l.agent.botname=d[3],l.agent.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agent.appdata.split(",");l.agent.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agent.text=d.slice(1,d.length).join(",");break;case"message":l.agent.text=l.agent.appdata;break;case"set":l.agent.name=l.agent.appdata.split("=")[0],l.agent.value=l.agent.appdata.split("=")[1];break;case"agi":l.agent.project=l.agent.appdata;break;default:var c=l.agent.appdata.split(",");l.agent.agent=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.agent.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.agent.timeout=30;function m(e){t.hide(e)}l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outbounddial"===l.agent.appType.toLowerCase()&&(l.agent.prefix=l.agent.phone?l.agent.phone.split("$")[0]:void 0,l.agent.callerId=l.agent.callerID?"CALLERID(all)="+l.agent.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outboundDial"===l.agent.appType&&(l.agent.phone=i.cutdigits?(l.agent.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agent.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agent.options+="U(xcally-mixmonitor-context)"):l.agent.options=l.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.agents,{name:l.agent.agent});t&&(l.agent.UserId=t.id);if(l.agent.appType&&"custom"===l.agent.appType);else switch((l.agent.app||l.agent.appType).toLowerCase()){case"set":l.agent.appdata=l.agent.name+"="+l.agent.value;break;case"custom":break;default:e[0]=l.agent.agent,e[1]=l.agent.timeout,l.agent.appdata=e.join(",")}m(l.agent)},l.closeDialog=m,o.hasRole("admin")?s.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){l.agents=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){l.agents=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.agents,{id:e.resourceId})}),n=null;if(l.agent&&(n=_.find(l.agents,{name:l.agent.agent})),n&&!_.some(t,["id",n.id])){var a=_.find(l.agents,{id:n.id});a.canSelect=!1,t.push(a)}l.agents=t})}else{var n=[],a=null;l.agent&&(a=_.find(l.agents,{name:l.agent.agent}));for(var i=0;i<l.agents.length;i++)a&&l.agents[i].id===a.id&&(l.agents[i].canSelect=!1,n.push(l.agents[i]));l.agents=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.amazonlex=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.amazonlex.appdata)switch(l.amazonlex.appType?l.amazonlex.appType.toLowerCase():l.amazonlex.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.amazonlex.appdata.split(",");l.amazonlex.key=d[0],l.amazonlex.language=d[1],l.amazonlex.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.amazonlex.appdata.split(",");l.amazonlex.accesskeyid=d[0],l.amazonlex.secretaccesskey=d[1],l.amazonlex.lexregion=d[2],l.amazonlex.botname=d[3],l.amazonlex.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.amazonlex.appdata.split(",");l.amazonlex.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.amazonlex.text=d.slice(1,d.length).join(",");break;case"message":l.amazonlex.text=l.amazonlex.appdata;break;case"set":l.amazonlex.name=l.amazonlex.appdata.split("=")[0],l.amazonlex.value=l.amazonlex.appdata.split("=")[1];break;case"agi":l.amazonlex.project=l.amazonlex.appdata;break;default:var c=l.amazonlex.appdata.split(",");l.amazonlex.accesskeyid=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.amazonlex.secretaccesskey=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.amazonlex.lexregion=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.amazonlex.botname=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10),l.amazonlex.welcomemessage=_.isEmpty(c[4])?c[4]:isNaN(c[4])?c[4]:parseInt(c[4],10)}else l.amazonlex.lexregion="us-east-1";function m(e){t.hide(e)}l.amazonlex.type&&"outbound"===l.amazonlex.type.toLowerCase()&&"outbounddial"===l.amazonlex.appType.toLowerCase()&&(l.amazonlex.prefix=l.amazonlex.phone?l.amazonlex.phone.split("$")[0]:void 0,l.amazonlex.callerId=l.amazonlex.callerID?"CALLERID(all)="+l.amazonlex.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.amazonlex.type&&"outbound"===l.amazonlex.type.toLowerCase()&&"outboundDial"===l.amazonlex.appType&&(l.amazonlex.phone=i.cutdigits?(l.amazonlex.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.amazonlex.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.amazonlex.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.amazonlex.options+="U(xcally-mixmonitor-context)"):l.amazonlex.options=l.amazonlex.options.replace("U(xcally-mixmonitor-context)",""));if(l.amazonlex.appType&&"custom"===l.amazonlex.appType);else switch((l.amazonlex.app||l.amazonlex.appType).toLowerCase()){case"set":l.amazonlex.appdata=l.amazonlex.name+"="+l.amazonlex.value;break;case"custom":break;default:e[0]=l.amazonlex.accesskeyid,e[1]=l.amazonlex.secretaccesskey,e[2]=l.amazonlex.lexregion,e[3]=l.amazonlex.botname,e[4]=l.amazonlex.welcomemessage,l.amazonlex.appdata=e.join(",")}m(l.amazonlex)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppamazonlexDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.autoreply=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.autoreply.appdata)switch(l.autoreply.appType?l.autoreply.appType.toLowerCase():l.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.autoreply.appdata.split(",");l.autoreply.key=d[0],l.autoreply.language=d[1],l.autoreply.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.autoreply.appdata.split(",");l.autoreply.accesskeyid=d[0],l.autoreply.secretaccesskey=d[1],l.autoreply.lexregion=d[2],l.autoreply.botname=d[3],l.autoreply.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.autoreply.appdata.split(",");l.autoreply.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.autoreply.text=d.slice(1,d.length).join(",");break;case"message":l.autoreply.text=l.autoreply.appdata;break;case"set":l.autoreply.name=l.autoreply.appdata.split("=")[0],l.autoreply.value=l.autoreply.appdata.split("=")[1];break;case"agi":l.autoreply.project=l.autoreply.appdata;break;default:var c=l.autoreply.appdata.split(",");l.autoreply.times=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.autoreply.text=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.autoreply.times=1;function m(e){t.hide(e)}l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outbounddial"===l.autoreply.appType.toLowerCase()&&(l.autoreply.prefix=l.autoreply.phone?l.autoreply.phone.split("$")[0]:void 0,l.autoreply.callerId=l.autoreply.callerID?"CALLERID(all)="+l.autoreply.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outboundDial"===l.autoreply.appType&&(l.autoreply.phone=i.cutdigits?(l.autoreply.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.autoreply.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.autoreply.options+="U(xcally-mixmonitor-context)"):l.autoreply.options=l.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(l.autoreply.appType&&"custom"===l.autoreply.appType);else switch((l.autoreply.app||l.autoreply.appType).toLowerCase()){case"set":l.autoreply.appdata=l.autoreply.name+"="+l.autoreply.value;break;case"custom":break;default:e[0]=l.autoreply.times,e[1]=l.autoreply.text,l.autoreply.appdata=e.join(",")}m(l.autoreply)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.close=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.close.appdata)switch(l.close.appType?l.close.appType.toLowerCase():l.close.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.close.appdata.split(",");l.close.key=d[0],l.close.language=d[1],l.close.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.close.appdata.split(",");l.close.accesskeyid=d[0],l.close.secretaccesskey=d[1],l.close.lexregion=d[2],l.close.botname=d[3],l.close.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.close.appdata.split(",");l.close.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.close.text=d.slice(1,d.length).join(",");break;case"message":l.close.text=l.close.appdata;break;case"set":l.close.name=l.close.appdata.split("=")[0],l.close.value=l.close.appdata.split("=")[1];break;case"agi":l.close.project=l.close.appdata;break;default:var c=l.close.appdata.split(",");l.close.disposition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outbounddial"===l.close.appType.toLowerCase()&&(l.close.prefix=l.close.phone?l.close.phone.split("$")[0]:void 0,l.close.callerId=l.close.callerID?"CALLERID(all)="+l.close.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outboundDial"===l.close.appType&&(l.close.phone=i.cutdigits?(l.close.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.close.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.close.options+="U(xcally-mixmonitor-context)"):l.close.options=l.close.options.replace("U(xcally-mixmonitor-context)",""));if(l.close.appType&&"custom"===l.close.appType);else switch((l.close.app||l.close.appType).toLowerCase()){case"set":l.close.appdata=l.close.name+"="+l.close.value;break;case"custom":break;default:e[0]=l.close.disposition,l.close.appdata=e.join(",")}m(l.close)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.dialogflow=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.dialogflow.appdata)switch(l.dialogflow.appType?l.dialogflow.appType.toLowerCase():l.dialogflow.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.dialogflow.appdata.split(",");l.dialogflow.key=d[0],l.dialogflow.language=d[1],l.dialogflow.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.dialogflow.appdata.split(",");l.dialogflow.accesskeyid=d[0],l.dialogflow.secretaccesskey=d[1],l.dialogflow.lexregion=d[2],l.dialogflow.botname=d[3],l.dialogflow.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.dialogflow.appdata.split(",");l.dialogflow.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.dialogflow.text=d.slice(1,d.length).join(",");break;case"message":l.dialogflow.text=l.dialogflow.appdata;break;case"set":l.dialogflow.name=l.dialogflow.appdata.split("=")[0],l.dialogflow.value=l.dialogflow.appdata.split("=")[1];break;case"agi":l.dialogflow.project=l.dialogflow.appdata;break;default:var c=l.dialogflow.appdata.split(",");l.dialogflow.key=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.dialogflow.language=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.dialogflow.welcomemessage=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}else l.dialogflow.language="en";function m(e){t.hide(e)}l.dialogflow.type&&"outbound"===l.dialogflow.type.toLowerCase()&&"outbounddial"===l.dialogflow.appType.toLowerCase()&&(l.dialogflow.prefix=l.dialogflow.phone?l.dialogflow.phone.split("$")[0]:void 0,l.dialogflow.callerId=l.dialogflow.callerID?"CALLERID(all)="+l.dialogflow.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.dialogflow.type&&"outbound"===l.dialogflow.type.toLowerCase()&&"outboundDial"===l.dialogflow.appType&&(l.dialogflow.phone=i.cutdigits?(l.dialogflow.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.dialogflow.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.dialogflow.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.dialogflow.options+="U(xcally-mixmonitor-context)"):l.dialogflow.options=l.dialogflow.options.replace("U(xcally-mixmonitor-context)",""));if(l.dialogflow.appType&&"custom"===l.dialogflow.appType);else switch((l.dialogflow.app||l.dialogflow.appType).toLowerCase()){case"set":l.dialogflow.appdata=l.dialogflow.name+"="+l.dialogflow.value;break;case"custom":break;default:e[0]=l.dialogflow.key,e[1]=l.dialogflow.language,e[2]=l.dialogflow.welcomemessage,l.dialogflow.appdata=e.join(",")}m(l.dialogflow)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppdialogflowDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotoif=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotoif.appdata)switch(l.gotoif.appType?l.gotoif.appType.toLowerCase():l.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotoif.appdata.split(",");l.gotoif.key=d[0],l.gotoif.language=d[1],l.gotoif.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotoif.appdata.split(",");l.gotoif.accesskeyid=d[0],l.gotoif.secretaccesskey=d[1],l.gotoif.lexregion=d[2],l.gotoif.botname=d[3],l.gotoif.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotoif.appdata.split(",");l.gotoif.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotoif.text=d.slice(1,d.length).join(",");break;case"message":l.gotoif.text=l.gotoif.appdata;break;case"set":l.gotoif.name=l.gotoif.appdata.split("=")[0],l.gotoif.value=l.gotoif.appdata.split("=")[1];break;case"agi":l.gotoif.project=l.gotoif.appdata;break;default:var c=l.gotoif.appdata.split(",");l.gotoif.condition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.gotoif.truepriority=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.gotoif.falsepriority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outbounddial"===l.gotoif.appType.toLowerCase()&&(l.gotoif.prefix=l.gotoif.phone?l.gotoif.phone.split("$")[0]:void 0,l.gotoif.callerId=l.gotoif.callerID?"CALLERID(all)="+l.gotoif.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outboundDial"===l.gotoif.appType&&(l.gotoif.phone=i.cutdigits?(l.gotoif.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotoif.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotoif.options+="U(xcally-mixmonitor-context)"):l.gotoif.options=l.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotoif.appType&&"custom"===l.gotoif.appType);else switch((l.gotoif.app||l.gotoif.appType).toLowerCase()){case"set":l.gotoif.appdata=l.gotoif.name+"="+l.gotoif.value;break;case"custom":break;default:e[0]=l.gotoif.condition,e[1]=l.gotoif.truepriority,e[2]=l.gotoif.falsepriority,l.gotoif.appdata=e.join(",")}m(l.gotoif)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotop.appdata)switch(l.gotop.appType?l.gotop.appType.toLowerCase():l.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotop.appdata.split(",");l.gotop.key=d[0],l.gotop.language=d[1],l.gotop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotop.appdata.split(",");l.gotop.accesskeyid=d[0],l.gotop.secretaccesskey=d[1],l.gotop.lexregion=d[2],l.gotop.botname=d[3],l.gotop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotop.appdata.split(",");l.gotop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotop.text=d.slice(1,d.length).join(",");break;case"message":l.gotop.text=l.gotop.appdata;break;case"set":l.gotop.name=l.gotop.appdata.split("=")[0],l.gotop.value=l.gotop.appdata.split("=")[1];break;case"agi":l.gotop.project=l.gotop.appdata;break;default:var c=l.gotop.appdata.split(",");l.gotop.priority=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outbounddial"===l.gotop.appType.toLowerCase()&&(l.gotop.prefix=l.gotop.phone?l.gotop.phone.split("$")[0]:void 0,l.gotop.callerId=l.gotop.callerID?"CALLERID(all)="+l.gotop.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outboundDial"===l.gotop.appType&&(l.gotop.phone=i.cutdigits?(l.gotop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotop.options+="U(xcally-mixmonitor-context)"):l.gotop.options=l.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotop.appType&&"custom"===l.gotop.appType);else switch((l.gotop.app||l.gotop.appType).toLowerCase()){case"set":l.gotop.appdata=l.gotop.name+"="+l.gotop.value;break;case"custom":break;default:e[0]=l.gotop.priority,l.gotop.appdata=e.join(",")}m(l.gotop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditChatWebsiteAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.noop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.noop.appdata)switch(l.noop.appType?l.noop.appType.toLowerCase():l.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.noop.appdata.split(",");l.noop.key=d[0],l.noop.language=d[1],l.noop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.noop.appdata.split(",");l.noop.accesskeyid=d[0],l.noop.secretaccesskey=d[1],l.noop.lexregion=d[2],l.noop.botname=d[3],l.noop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.noop.appdata.split(",");l.noop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.noop.text=d.slice(1,d.length).join(",");break;case"message":l.noop.text=l.noop.appdata;break;case"set":l.noop.name=l.noop.appdata.split("=")[0],l.noop.value=l.noop.appdata.split("=")[1];break;case"agi":l.noop.project=l.noop.appdata;break;default:var c=l.noop.appdata.split(",");l.noop.value=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outbounddial"===l.noop.appType.toLowerCase()&&(l.noop.prefix=l.noop.phone?l.noop.phone.split("$")[0]:void 0,l.noop.callerId=l.noop.callerID?"CALLERID(all)="+l.noop.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outboundDial"===l.noop.appType&&(l.noop.phone=i.cutdigits?(l.noop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.noop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.noop.options+="U(xcally-mixmonitor-context)"):l.noop.options=l.noop.options.replace("U(xcally-mixmonitor-context)",""));if(l.noop.appType&&"custom"===l.noop.appType);else switch((l.noop.app||l.noop.appType).toLowerCase()){case"set":l.noop.appdata=l.noop.name+"="+l.noop.value;break;case"custom":break;default:e[0]=l.noop.value,l.noop.appdata=e.join(",")}m(l.noop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppnoopDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.queue.queue=300,l.queue.timeout=300;function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.queues,{name:l.queue.queue});t&&(l.queue[_.capitalize("chat")+"QueueId"]=t.id);if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.timeout,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.chatQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.chatQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:501}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppqueueDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.system=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.system.appdata)switch(l.system.appType?l.system.appType.toLowerCase():l.system.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.system.appdata.split(",");l.system.key=d[0],l.system.language=d[1],l.system.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.system.appdata.split(",");l.system.accesskeyid=d[0],l.system.secretaccesskey=d[1],l.system.lexregion=d[2],l.system.botname=d[3],l.system.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.system.appdata.split(",");l.system.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.system.text=d.slice(1,d.length).join(",");break;case"message":l.system.text=l.system.appdata;break;case"set":l.system.name=l.system.appdata.split("=")[0],l.system.value=l.system.appdata.split("=")[1];break;case"agi":l.system.project=l.system.appdata;break;default:var c=l.system.appdata.split(",");l.system.command=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.system.variable=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.system.variable="";function m(e){t.hide(e)}l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outbounddial"===l.system.appType.toLowerCase()&&(l.system.prefix=l.system.phone?l.system.phone.split("$")[0]:void 0,l.system.callerId=l.system.callerID?"CALLERID(all)="+l.system.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outboundDial"===l.system.appType&&(l.system.phone=i.cutdigits?(l.system.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.system.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.system.options+="U(xcally-mixmonitor-context)"):l.system.options=l.system.options.replace("U(xcally-mixmonitor-context)",""));if(l.system.appType&&"custom"===l.system.appType);else switch((l.system.app||l.system.appType).toLowerCase()){case"set":l.system.appdata=l.system.name+"="+l.system.value;break;case"custom":break;default:e[0]=l.system.command,e[1]=l.system.variable,l.system.appdata=e.join(",")}m(l.system)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.system&&(n=_.find(l.variables,{name:l.system.variable})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.system&&(a=_.find(l.variables,{name:l.system.variable}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteAppsystemDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="CHAT.EDIT_"+(a.appType||a.app).toUpperCase(),l.tag=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.tag.appdata)switch(l.tag.appType?l.tag.appType.toLowerCase():l.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.tag.appdata.split(",");l.tag.key=d[0],l.tag.language=d[1],l.tag.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.tag.appdata.split(",");l.tag.accesskeyid=d[0],l.tag.secretaccesskey=d[1],l.tag.lexregion=d[2],l.tag.botname=d[3],l.tag.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.tag.appdata.split(",");l.tag.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.tag.text=d.slice(1,d.length).join(",");break;case"message":l.tag.text=l.tag.appdata;break;case"set":l.tag.name=l.tag.appdata.split("=")[0],l.tag.value=l.tag.appdata.split("=")[1];break;case"agi":l.tag.project=l.tag.appdata;break;default:var c=l.tag.appdata.split(",");l.tag.tag=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outbounddial"===l.tag.appType.toLowerCase()&&(l.tag.prefix=l.tag.phone?l.tag.phone.split("$")[0]:void 0,l.tag.callerId=l.tag.callerID?"CALLERID(all)="+l.tag.callerID:void 0),l.saveChatWebsiteApp=function(){l.errors=[];var e=[];l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outboundDial"===l.tag.appType&&(l.tag.phone=i.cutdigits?(l.tag.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.tag.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.tag.options+="U(xcally-mixmonitor-context)"):l.tag.options=l.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.tags,{name:l.tag.tag});t&&(l.tag.TagId=t.id);if(l.tag.appType&&"custom"===l.tag.appType);else switch((l.tag.app||l.tag.appType).toLowerCase()){case"set":l.tag.appdata=l.tag.name+"="+l.tag.value;break;case"custom":break;default:e[0]=l.tag.tag,l.tag.appdata=e.join(",")}m(l.tag)},l.closeDialog=m,o.hasRole("admin")?s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1008}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.tags,{id:e.resourceId})}),n=null;if(l.tag&&(n=_.find(l.tags,{name:l.tag.tag})),n&&!_.some(t,["id",n.id])){var a=_.find(l.tags,{id:n.id});a.canSelect=!1,t.push(a)}l.tags=t})}else{var n=[],a=null;l.tag&&(a=_.find(l.tags,{name:l.tag.tag}));for(var i=0;i<l.tags.length;i++)a&&l.tags[i].id===a.id&&(l.tags[i].canSelect=!1,n.push(l.tags[i]));l.tags=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtags",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","chatWebsiteApp","chatWebsite","api","Auth","crudPermissions"],angular.module("app.chat").controller("EditChatWebsiteApptagDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteChatCannedAnswers={count:0,rows:[]},c.selectedChatWebsiteChatCannedAnswers=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,key,value,description",limit:10,page:1},c.init=function(e,t){c.chatWebsite=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.chatWebsite.id,c.query.ChatWebsiteId=c.chatWebsite.id,c.getChatWebsiteChatCannedAnswers()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the chatCannedAnswer?").htmlContent("<b>"+(e.name||"chatCannedAnswer")+"</b> will be deleted.").ariaLabel("delete chatCannedAnswer").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getChatWebsiteChatCannedAnswers=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.chatWebsite.getAnswers(c.query,p).$promise},c.createOrEditChatWebsiteChatCannedAnswer=function(e,t){s.show({controller:"CreateOrEditChatCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/chatCannedAnswers/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,chatCannedAnswer:t,chatCannedAnswers:c.chatWebsiteChatCannedAnswers.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedChatWebsiteChatCannedAnswers=function(){var e=angular.copy(c.selectedChatWebsiteChatCannedAnswers);return c.selectedChatWebsiteChatCannedAnswers=[],e},c.deleteChatWebsiteChatCannedAnswer=g,c.deleteSelectedChatWebsiteChatCannedAnswers=function(e){var t=s.confirm().title("Are you sure want to delete the selected chatCannedAnswers?").htmlContent("<b>"+c.selectedChatWebsiteChatCannedAnswers.length+" selected</b> will be deleted.").ariaLabel("delete chatCannedAnswers").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedChatWebsiteChatCannedAnswers.forEach(function(e){g(e)}),c.selectedChatWebsiteChatCannedAnswers=[]})};var m=!0,u=1;function p(e){c.chatWebsiteChatCannedAnswers=e||{count:0,rows:[]}}function g(e){l.cannedAnswer.delete({id:e.id}).$promise.then(function(){_.remove(c.chatWebsiteChatCannedAnswers.rows,{id:e.id}),c.chatWebsiteChatCannedAnswers.count-=1,c.chatWebsiteChatCannedAnswers.rows.length||c.getChatWebsiteChatCannedAnswers(),r.success({title:"ChatCannedAnswer deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETchatWebsite"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getChatWebsiteChatCannedAnswers())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.chat").controller("ChatWebsiteChatCannedAnswersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CHAT.EDIT_CHATCANNEDANSWER",g.chatCannedAnswer=angular.copy(l),g.chatCannedAnswers=r,g.newChatCannedAnswer=!1,g.chatCannedAnswer||(g.chatCannedAnswer={},g.title="CHAT.NEW_CHATCANNEDANSWER",g.newChatCannedAnswer=!0),t.params.id&&(g.chatCannedAnswer.ChatWebsiteId=t.params.id),g.addNewChatCannedAnswer=function(){g.errors=[],d.cannedAnswer.save(g.chatCannedAnswer).$promise.then(function(e){g.chatCannedAnswers.unshift(e.toJSON()),o.success({title:"ChatCannedAnswer properly created",msg:g.chatCannedAnswer.name?g.chatCannedAnswer.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveChatCannedAnswer=function(){g.errors=[],d.cannedAnswer.update({id:g.chatCannedAnswer.id},g.chatCannedAnswer).$promise.then(function(e){var t=_.find(g.chatCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatCannedAnswer properly saved!",msg:g.chatCannedAnswer.name?g.chatCannedAnswer.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteChatCannedAnswer=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The chatCannedAnswer will be deleted.").ariaLabel("Delete ChatCannedAnswer").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cannedAnswer.delete({id:g.chatCannedAnswer.id}).$promise.then(function(){_.remove(g.chatCannedAnswers,{id:g.chatCannedAnswer.id}),o.success({title:"ChatCannedAnswer properly deleted!",msg:(g.chatCannedAnswer.name||"chatCannedAnswer")+" has been deleted!"}),v(g.chatCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","chatCannedAnswers","chatCannedAnswer","api","Auth","license","setting","crudPermissions"],angular.module("app.chat").controller("CreateOrEditChatCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteChatDispositions={count:0,rows:[]},c.selectedChatWebsiteChatDispositions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e,t){c.chatWebsite=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.chatWebsite.id,c.query.ChatWebsiteId=c.chatWebsite.id,c.getChatWebsiteChatDispositions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the chatDisposition?").htmlContent("<b>"+(e.name||"chatDisposition")+"</b> will be deleted.").ariaLabel("delete chatDisposition").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getChatWebsiteChatDispositions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.chatWebsite.getDispositions(c.query,p).$promise},c.createOrEditChatWebsiteChatDisposition=function(e,t){s.show({controller:"CreateOrEditChatDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/chatDispositions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,chatDisposition:t,chatDispositions:c.chatWebsiteChatDispositions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedChatWebsiteChatDispositions=function(){var e=angular.copy(c.selectedChatWebsiteChatDispositions);return c.selectedChatWebsiteChatDispositions=[],e},c.deleteChatWebsiteChatDisposition=g,c.deleteSelectedChatWebsiteChatDispositions=function(e){var t=s.confirm().title("Are you sure want to delete the selected chatDispositions?").htmlContent("<b>"+c.selectedChatWebsiteChatDispositions.length+" selected</b> will be deleted.").ariaLabel("delete chatDispositions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedChatWebsiteChatDispositions.forEach(function(e){g(e)}),c.selectedChatWebsiteChatDispositions=[]})};var m=!0,u=1;function p(e){c.chatWebsiteChatDispositions=e||{count:0,rows:[]}}function g(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(c.chatWebsiteChatDispositions.rows,{id:e.id}),c.chatWebsiteChatDispositions.count-=1,c.chatWebsiteChatDispositions.rows.length||c.getChatWebsiteChatDispositions(),r.success({title:"ChatDisposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETchatWebsite"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getChatWebsiteChatDispositions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.chat").controller("ChatWebsiteChatDispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CHAT.EDIT_CHATDISPOSITION",g.chatDisposition=angular.copy(l),g.chatDispositions=r,g.newChatDisposition=!1,g.chatDisposition||(g.chatDisposition={},g.title="CHAT.NEW_CHATDISPOSITION",g.newChatDisposition=!0),t.params.id&&(g.chatDisposition.ChatWebsiteId=t.params.id),g.addNewChatDisposition=function(){g.errors=[],d.disposition.save(g.chatDisposition).$promise.then(function(e){g.chatDispositions.unshift(e.toJSON()),o.success({title:"ChatDisposition properly created",msg:g.chatDisposition.name?g.chatDisposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveChatDisposition=function(){g.errors=[],d.disposition.update({id:g.chatDisposition.id},g.chatDisposition).$promise.then(function(e){var t=_.find(g.chatDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatDisposition properly saved!",msg:g.chatDisposition.name?g.chatDisposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteChatDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The chatDisposition will be deleted.").ariaLabel("Delete ChatDisposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.chatDisposition.id}).$promise.then(function(){_.remove(g.chatDispositions,{id:g.chatDisposition.id}),o.success({title:"ChatDisposition properly deleted!",msg:(g.chatDisposition.name||"chatDisposition")+" has been deleted!"}),v(g.chatDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","chatDispositions","chatDisposition","api","Auth","license","setting","crudPermissions"],angular.module("app.chat").controller("CreateOrEditChatDispositionDialogController",e)}(),function(){"use strict";function e(n,e,a){var i=this;i.chatWebsite={},i.offlineForm={},i.buttons=[{type:"label",name:"Label",icon:"icon-label"},{type:"chooseFromList",name:"Select",icon:"icon-playlist-plus"},{type:"input",name:"Input",icon:"icon-keyboard"},{type:"textarea",name:"Textarea",icon:"icon-format-text"},{type:"multipleChoices",name:"Radio Buttons",icon:"icon-radiobox-marked"},{type:"checkboxes",name:"Checkboxes",icon:"icon-checkbox-multiple-marked-outline"},{type:"agreement",name:"Agreement",icon:"icon-checkbox-marked-outline"}],i.init=function(e){i.fields=[],i.customFields=[],i.uselessFields=["id","createdAt","updatedAt","ListId","CompanyId","$promise","$resolved"],i.chatWebsite=e,_.isEmpty(i.chatWebsite.offlineForm)&&(i.chatWebsite.offlineForm={items:[],fromKey:null});a.cmList.getCustomFields({id:i.chatWebsite.ListId}).$promise.then(function(e){for(var t=0;t<e.rows.length;t++)i.customFields.push({key:"cf_"+e.rows[t].id,value:e.rows[t].alias});return a.cmContact.describe().$promise}).then(function(e){for(var t=_.keys(e),n=0;n<t.length;n++)_.includes(i.uselessFields,t[n])||_.startsWith(t[n],"cf_")||i.fields.unshift({key:t[n],value:t[n]});return a.variable.get().$promise}).then(function(e){i.variables=e.rows}).catch(function(e){console.error(e)})},i.up=function(e,t){if(0!==t){var n=i.chatWebsite.offlineForm.items[t-1];i.chatWebsite.offlineForm.items[t]=n,i.chatWebsite.offlineForm.items[t-1]=angular.copy(e),i.chatWebsite.offlineForm.fromKey===t?i.chatWebsite.offlineForm.fromKey--:i.chatWebsite.offlineForm.fromKey===t-1&&i.chatWebsite.offlineForm.fromKey++}},i.down=function(e,t){if(t!==i.chatWebsite.offlineForm.items.length-1){var n=i.chatWebsite.offlineForm.items[t+1];i.chatWebsite.offlineForm.items[t]=n,i.chatWebsite.offlineForm.items[t+1]=angular.copy(e),i.chatWebsite.offlineForm.fromKey===t?i.chatWebsite.offlineForm.fromKey++:i.chatWebsite.offlineForm.fromKey===t+1&&i.chatWebsite.offlineForm.fromKey--}},i.add=function(e){i.chatWebsite.offlineForm.items.push({type:e,cmField:null,variable:null})},i.remove=function(e){var t=n.confirm().title("The component will be deleted.").textContent("Are you sure?").ariaLabel("Lucky day").ok("Ok").cancel("Cancel");n.show(t).then(function(){i.chatWebsite.offlineForm.items.splice(e,1)})}}e.$inject=["$mdDialog","$document","api"],angular.module("app.chat").controller("ChatWebsiteofflineFormController",e)}(),function(){"use strict";function e(n,e,a){var i=this;i.chatWebsite={},i.onlineForm={},i.buttons=[{type:"label",name:"Label",icon:"icon-label"},{type:"chooseFromList",name:"Select",icon:"icon-playlist-plus"},{type:"input",name:"Input",icon:"icon-keyboard"},{type:"textarea",name:"Textarea",icon:"icon-format-text"},{type:"multipleChoices",name:"Radio Buttons",icon:"icon-radiobox-marked"},{type:"checkboxes",name:"Checkboxes",icon:"icon-checkbox-multiple-marked-outline"},{type:"agreement",name:"Agreement",icon:"icon-checkbox-marked-outline"}],i.init=function(e){i.fields=[],i.customFields=[],i.uselessFields=["id","createdAt","updatedAt","ListId","CompanyId","$promise","$resolved"],i.chatWebsite=e,_.isEmpty(i.chatWebsite.onlineForm)&&(i.chatWebsite.onlineForm={items:[],fromKey:null});a.cmList.getCustomFields({id:i.chatWebsite.ListId}).$promise.then(function(e){for(var t=0;t<e.rows.length;t++)i.customFields.push({key:"cf_"+e.rows[t].id,value:e.rows[t].alias});return a.cmContact.describe().$promise}).then(function(e){for(var t=_.keys(e),n=0;n<t.length;n++)_.includes(i.uselessFields,t[n])||_.startsWith(t[n],"cf_")||i.fields.unshift({key:t[n],value:t[n]});return a.variable.get().$promise}).then(function(e){i.variables=e.rows}).catch(function(e){console.error(e)})},i.up=function(e,t){if(0!==t){var n=i.chatWebsite.onlineForm.items[t-1];i.chatWebsite.onlineForm.items[t]=n,i.chatWebsite.onlineForm.items[t-1]=angular.copy(e),i.chatWebsite.onlineForm.fromKey===t?i.chatWebsite.onlineForm.fromKey--:i.chatWebsite.onlineForm.fromKey===t-1&&i.chatWebsite.onlineForm.fromKey++}},i.down=function(e,t){if(t!==i.chatWebsite.onlineForm.items.length-1){var n=i.chatWebsite.onlineForm.items[t+1];i.chatWebsite.onlineForm.items[t]=n,i.chatWebsite.onlineForm.items[t+1]=angular.copy(e),i.chatWebsite.onlineForm.fromKey===t?i.chatWebsite.onlineForm.fromKey++:i.chatWebsite.onlineForm.fromKey===t+1&&i.chatWebsite.onlineForm.fromKey--}},i.add=function(e){i.chatWebsite.onlineForm.items.push({type:e,cmField:null,variable:null})},i.remove=function(e){var t=n.confirm().title("The component will be deleted.").textContent("Are you sure?").ariaLabel("Lucky day").ok("Ok").cancel("Cancel");n.show(t).then(function(){i.chatWebsite.onlineForm.fromKey===e&&(i.chatWebsite.onlineForm.fromKey=null),i.chatWebsite.onlineForm.items.splice(e,1),i.chatWebsite.onlineForm.items.length||(i.chatWebsite.onlineForm.fromKey=null)})}}e.$inject=["$mdDialog","$document","api"],angular.module("app.chat").controller("ChatWebsiteonlineFormController",e)}(),function(){"use strict";function e(e,a){var i=this;i.chatWebsite={},i.crudPermissions,i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.chatWebsite.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.chatWebsite.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e,t){i.chatWebsite=angular.copy(e),i.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.ngFlowOptions.target="/api/chat/websites/:id/customer_avatar".replace(":id",i.chatWebsite.id),i.chatWebsite.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.chat").controller("ChatWebsitecustomerAvatarController",e)}(),function(){"use strict";function e(e,a,t,n,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteInteractions={count:0,rows:[]},c.selectedChatWebsiteInteractions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,UserId,ContactId,ChatWebsiteId,id,closedAt,Contact.firstName,Owner.name,disposition,ratingValue,ratingType,note,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e,t){c.chatWebsite=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.chatWebsite.id,c.getChatWebsiteInteractions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the interaction?").htmlContent("<b>"+(e.name||"interaction")+"</b> will be deleted.").ariaLabel("delete interaction").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.chatInteractionDownload=function(s,e,t){return l.chatInteraction.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="interaction"+s.id,a=new Blob(t,{type:e.type});n="chat-interaction"+s.id+".zip";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatWebsite.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getChatWebsiteInteractions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.chatWebsite.getInteractions(c.query,p).$promise},c.createOrEditChatWebsiteInteraction=function(e,t){s.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/interactions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,interaction:t,interactions:c.chatWebsiteInteractions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.spychatInteraction=function(e,n){s.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,onShowing:function(e,t){e.vm.init({id:1,channel:"chat",interaction:n,spy:!0},a.$parent.vm.setting)}})},c.exportSelectedChatWebsiteInteractions=function(){var e=angular.copy(c.selectedChatWebsiteInteractions);return c.selectedChatWebsiteInteractions=[],e},c.deleteChatWebsiteInteraction=g,c.deleteSelectedChatWebsiteInteractions=function(e){var t=s.confirm().title("Are you sure want to delete the selected interactions?").htmlContent("<b>"+c.selectedChatWebsiteInteractions.length+" selected</b> will be deleted.").ariaLabel("delete interactions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedChatWebsiteInteractions.forEach(function(e){g(e)}),c.selectedChatWebsiteInteractions=[]})};var m=!0,u=1;function p(e){c.chatWebsiteInteractions=e||{count:0,rows:[]}}function g(e){l.chatInteraction.delete({id:e.id}).$promise.then(function(){_.remove(c.chatWebsiteInteractions.rows,{id:e.id}),c.chatWebsiteInteractions.count-=1,c.chatWebsiteInteractions.rows.length||c.getChatWebsiteInteractions(),r.success({title:"Interaction deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETchatWebsite"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}a.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getChatWebsiteInteractions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.chat").controller("ChatWebsiteInteractionsController",e)}(),function(){"use strict";function e(e,a){var i=this;i.chatWebsite={},i.crudPermissions,i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.chatWebsite.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.chatWebsite.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e,t){i.chatWebsite=angular.copy(e),i.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.ngFlowOptions.target="/api/chat/websites/:id/logo".replace(":id",i.chatWebsite.id),i.chatWebsite.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.chat").controller("ChatWebsitelogoController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteOfflineMessages={count:0,rows:[]},c.selectedChatWebsiteOfflineMessages=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,ContactId",sort:"-createdAt",limit:10,page:1},c.init=function(e,t){c.chatWebsite=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.chatWebsite.id,c.getChatWebsiteOfflineMessages()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the offlineMessage?").htmlContent("<b>"+(e.name||"offlineMessage")+"</b> will be deleted.").ariaLabel("delete offlineMessage").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getChatWebsiteOfflineMessages=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.chatWebsite.getOfflineMessages(c.query,p).$promise},c.createOrEditChatWebsiteOfflineMessage=function(e,t){s.show({controller:"CreateOrEditOfflineMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/offlineMessages/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,offlineMessage:t,offlineMessages:c.chatWebsiteOfflineMessages.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.showOfflineMessageChatWebsiteOfflineMessage=function(e,n){s.show({controller:"ShowOfflineMessageOfflineMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/offlineMessages/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,resolve:{message:["apiResolver","$stateParams",function(e,t){return e.resolve("chatOfflineMessage@get",{fields:"id,body",id:n.id})}]}})},c.exportSelectedChatWebsiteOfflineMessages=function(){var e=angular.copy(c.selectedChatWebsiteOfflineMessages);return c.selectedChatWebsiteOfflineMessages=[],e},c.deleteChatWebsiteOfflineMessage=g,c.deleteSelectedChatWebsiteOfflineMessages=function(e){var t=s.confirm().title("Are you sure want to delete the selected offlineMessages?").htmlContent("<b>"+c.selectedChatWebsiteOfflineMessages.length+" selected</b> will be deleted.").ariaLabel("delete offlineMessages").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedChatWebsiteOfflineMessages.forEach(function(e){g(e)}),c.selectedChatWebsiteOfflineMessages=[]})},l.cmContact.get({fields:"id,firstName,lastName",nolimit:"true"}).$promise.then(function(e){c.contacts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTACTS",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=!0,u=1;function p(e){c.chatWebsiteOfflineMessages=e||{count:0,rows:[]}}function g(e){l.chatOfflineMessage.delete({id:e.id}).$promise.then(function(){_.remove(c.chatWebsiteOfflineMessages.rows,{id:e.id}),c.chatWebsiteOfflineMessages.count-=1,c.chatWebsiteOfflineMessages.rows.length||c.getChatWebsiteOfflineMessages(),r.success({title:"OfflineMessage deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETchatWebsite"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getChatWebsiteOfflineMessages())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.chat").controller("ChatWebsiteOfflineMessagesController",e)}(),function(){"use strict";function e(t,e){this.title="CHAT.OFFLINE_MESSAGE",this.message=e,this.closeDialog=function(e){t.hide(e)}}e.$inject=["$mdDialog","message"],angular.module("app.chat").controller("ShowOfflineMessageOfflineMessageDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.chatWebsite={},c.chatWebsiteProactiveActions={count:0,rows:[]},c.selectedChatWebsiteProactiveActions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name,type,selector,timeout",limit:10,page:1},c.arraytype=_.keyBy([{option:"MouseOver",value:"'mouseOver'"},{option:"Timeout",value:"'timeout'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.chatWebsite=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.chatWebsite.id,c.query.ChatWebsiteId=c.chatWebsite.id,c.getChatWebsiteProactiveActions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the chatProactiveAction?").htmlContent("<b>"+(e.name||"chatProactiveAction")+"</b> will be deleted.").ariaLabel("delete chatProactiveAction").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getChatWebsiteProactiveActions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.chatWebsite.getProactiveActions(c.query,p).$promise},c.createOrEditChatWebsiteChatProactiveAction=function(e,t){s.show({controller:"CreateOrEditChatProactiveActionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/proactive/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatWebsite:c.chatWebsite,chatProactiveAction:t,proactive:c.chatWebsiteProactiveActions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedChatWebsiteProactiveActions=function(){var e=angular.copy(c.selectedChatWebsiteProactiveActions);return c.selectedChatWebsiteProactiveActions=[],e},c.deleteChatWebsiteChatProactiveAction=g,c.deleteSelectedChatWebsiteProactiveActions=function(e){var t=s.confirm().title("Are you sure want to delete the selected proactive?").htmlContent("<b>"+c.selectedChatWebsiteProactiveActions.length+" selected</b> will be deleted.").ariaLabel("delete proactive").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedChatWebsiteProactiveActions.forEach(function(e){g(e)}),c.selectedChatWebsiteProactiveActions=[]})};var m=!0,u=1;function p(e){c.chatWebsiteProactiveActions=e||{count:0,rows:[]}}function g(e){l.chatProactiveAction.delete({id:e.id}).$promise.then(function(){_.remove(c.chatWebsiteProactiveActions.rows,{id:e.id}),c.chatWebsiteProactiveActions.count-=1,c.chatWebsiteProactiveActions.rows.length||c.getChatWebsiteProactiveActions(),r.success({title:"ChatProactiveAction deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETchatWebsite"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getChatWebsiteProactiveActions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.chat").controller("ChatWebsiteProactiveActionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CHAT.EDIT_CHATPROACTIVEACTION",g.chatProactiveAction=angular.copy(l),g.proactive=r,g.newChatProactiveAction=!1,g.chatProactiveAction||(g.chatProactiveAction={type:"mouseOver"},g.title="CHAT.NEW_CHATPROACTIVEACTION",g.newChatProactiveAction=!0),t.params.id&&(g.chatProactiveAction.ChatWebsiteId=t.params.id),g.addNewChatProactiveAction=function(){g.errors=[],d.chatProactiveAction.save(g.chatProactiveAction).$promise.then(function(e){g.proactive.unshift(e.toJSON()),o.success({title:"ChatProactiveAction properly created",msg:g.chatProactiveAction.name?g.chatProactiveAction.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatProactiveAction.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatProactiveAction.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveChatProactiveAction=function(){g.errors=[],d.chatProactiveAction.update({id:g.chatProactiveAction.id},g.chatProactiveAction).$promise.then(function(e){var t=_.find(g.proactive,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ChatProactiveAction properly saved!",msg:g.chatProactiveAction.name?g.chatProactiveAction.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatProactiveAction.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatProactiveAction.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteChatProactiveAction=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The chatProactiveAction will be deleted.").ariaLabel("Delete ChatProactiveAction").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.chatProactiveAction.delete({id:g.chatProactiveAction.id}).$promise.then(function(){_.remove(g.proactive,{id:g.chatProactiveAction.id}),o.success({title:"ChatProactiveAction properly deleted!",msg:(g.chatProactiveAction.name||"chatProactiveAction")+" has been deleted!"}),v(g.chatProactiveAction)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatProactiveAction.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatProactiveAction.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","proactive","chatProactiveAction","api","Auth","license","setting","crudPermissions"],angular.module("app.chat").controller("CreateOrEditChatProactiveActionDialogController",e)}(),function(){"use strict";function e(e){var t=this;t.chatWebsite={},t.init=function(e){t.chatWebsite=e,t.start="\n\x3c!-- START Motion Chat Script --\x3e",t.script='\n    <script src="'+t.chatWebsite.remote+"/api/chat/websites/"+t.chatWebsite.id+"/snippet?token="+t.chatWebsite.token+'"><\/script>',t.end="\n\x3c!-- START Motion Chat Script --\x3e"},t.info={},e.$watch("vm_ac.chatWebsite.remote",function(e){t.script='\n    <script src="'+t.chatWebsite.remote+"/api/chat/websites/"+t.chatWebsite.id+"/snippet?token="+t.chatWebsite.token+'"><\/script>'})}e.$inject=["$scope"],angular.module("app.chat").controller("ChatWebsiteScriptController",e)}(),function(){"use strict";function e(e,a){var i=this;i.chatWebsite={},i.crudPermissions,i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.chatWebsite.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.chatWebsite.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e,t){i.chatWebsite=angular.copy(e),i.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.ngFlowOptions.target="/api/chat/websites/:id/system_avatar".replace(":id",i.chatWebsite.id),i.chatWebsite.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.chat").controller("ChatWebsitesystemAvatarController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.chatWebsite=c||e.params.chatWebsite||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.agentadddialog=function(e,t){n.show({controller:"ChatWebsiteagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatWebsites/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{chatWebsite:e,chatWebsites:u.chatWebsites?u.chatWebsites.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoChatWebsites=function(){e.go("app.chat.chatWebsites")},u.saveChatWebsite=function(){r.chatWebsite.update({id:u.chatWebsite.id},u.chatWebsite).$promise.then(function(){l.success({title:"ChatWebsite updated!",msg:u.chatWebsite.name?u.chatWebsite.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatWebsite",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.lists,{id:e.resourceId})}),n=null;if(u.chatWebsite&&(n=_.find(u.lists,{id:Number(u.chatWebsite.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.lists,{id:n.id});a.canSelect=!1,t.push(a)}u.lists=t})}else{var n=[],a=null;u.chatWebsite&&(a=_.find(u.lists,{id:Number(u.chatWebsite.ListId)}));for(var i=0;i<u.lists.length;i++)a&&u.lists[i].id===a.id&&(u.lists[i].canSelect=!1,n.push(u.lists[i]));u.lists=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.interval,{id:e.resourceId})}),n=null;if(u.chatWebsite&&(n=_.find(u.interval,{id:Number(u.chatWebsite.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.interval,{id:n.id});a.canSelect=!1,t.push(a)}u.interval=t})}else{var n=[],a=null;u.chatWebsite&&(a=_.find(u.interval,{id:Number(u.chatWebsite.IntervalId)}));for(var i=0;i<u.interval.length;i++)a&&u.interval[i].id===a.id&&(u.interval[i].canSelect=!1,n.push(u.interval[i]));u.interval=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","chatWebsite","userProfileSection"],angular.module("app.chat").controller("ChatWebsiteController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"chat",direction:"inbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsChatRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.chatQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].ChatQueueId].paused++,g.queues[e[t].rows[n].ChatQueueId].loggedInDb++,g.queues[e[t].rows[n].ChatQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].ChatQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"chat",type:"inbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.chatQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="ChatQueues",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditChatQueue=function(e,t){a.show({controller:"CreateOrEditChatQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatQueue:t,chatQueues:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.agentAdd=function(e,t){a.show({controller:"ChatQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/chat/views/chatQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{chatQueue:t,chatQueues:g.queues?g.queues.rows:[],realtime:!1,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.chatQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&_.merge(g.queues[e.id],_.pick(e,v))},g.onSaveMember=function(e){g.queues[e.ChatQueueId]&&g.queues[e.ChatQueueId].loggedInDb++},g.onRemoveMember=function(e){g.queues[e.ChatQueueId]&&g.queues[e.ChatQueueId].loggedInDb--},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.ChatQueueId]&&(g.queues[e.ChatQueueId].loggedInDb+=1,g.queues[e.ChatQueueId].agents[e.UserId]=e.ChatQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.ChatQueueId]&&0<g.queues[e.ChatQueueId].loggedInDb&&(g.queues[e.ChatQueueId].loggedInDb-=1,delete g.queues[e.ChatQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.on("chat_queue:save",g.onSave),d.on("userChatQueue:save",g.onSaveMember),d.on("userChatQueue:remove",g.onRemoveMember),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("chat_queue:save"),d.removeAllListeners("userChatQueue:remove"),d.removeAllListeners("userChatQueue:save"),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.chat").controller("QueuesChatRealtimeController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){switch(t.disconnect(),t.connect(),this.selectedTab=0,n.current.name){case"app.chat.realtime.agents":this.selectedTab=0;break;case"app.chat.realtime.queues":this.selectedTab=1;break;default:this.selectedTab=0,n.go("app.chat.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.chat.realtime.agents");break;case 1:n.go("app.chat.realtime.queues");break;default:n.go("app.chat.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.chat").controller("ChatRealtimeController",e)}(),function(){"use strict";function e(e,t,a,n,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.companies=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="companies",b.listOrder="",b.listOrderAsc=null,b.selectedCompanies=[],b.query={fields:"createdAt,updatedAt,id,name,phone,vat,fax,companyId,type,website,emailDomain,email,description,sStreet,sPostalCode,sCity,sCountry,street,postalCode,city,country",sort:"-updatedAt",limit:10,page:1},b.editstate=function(e,t){a.go("app.contactmanager.companies.edit",{id:e.id,company:e,crudPermissions:b.crudPermissions})},b.gotocontactsgoto=function(n,e){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:303}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?a.go("app.contactmanager.contacts",{CompanyId:n.id}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});a.go("app.contactmanager.contacts",{CompanyId:n.id})}},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("company")+"?").htmlContent("<b>"+(e.name||"company")+"</b> will be deleted.").ariaLabel("delete company").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getCompanies=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.cmCompany.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Companies",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditCompany=function(e,t){i.show({controller:"CreateOrEditCompanyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/companies/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{company:t,companies:b.companies.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteCompany=S,b.exportSelectedCompanies=function(){var e=angular.copy(b.selectedCompanies);return b.selectedCompanies=[],e},b.deleteSelectedCompanies=function(e){var t=i.confirm().title("Are you sure want to delete the selected companies?").htmlContent("<b>"+b.selectedCompanies.length+" selected</b> will be deleted.").ariaLabel("delete Companys").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedCompanies.forEach(function(e){S(e)}),b.selectedCompanies=[]})},b.deselectCompanies=function(){b.selectedCompanies=[]},b.selectAllCompanies=function(){b.selectedCompanies=b.companies.rows};var A=!0,E=1;function y(e){b.companies=e||{count:0,rows:[]}}function S(e){m.cmCompany.delete({id:e.id}).$promise.then(function(){_.remove(b.companies.rows,{id:e.id}),b.companies.count-=1,b.companies.rows.length||b.getCompanies(),p.success({title:_.startCase("Company")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcmCompany"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEcmCompany",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getCompanies())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","companies","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.contactmanager").controller("CompaniesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CONTACTMANAGER.EDIT_COMPANY",g.company=angular.copy(l),g.companies=r,g.newCompany=!1,g.company||(g.company={},g.title="CONTACTMANAGER.NEW_COMPANY",g.newCompany=!0),g.addNewCompany=function(){g.errors=[],d.cmCompany.save(g.company).$promise.then(function(e){g.companies.unshift(e.toJSON()),o.success({title:"Company properly created",msg:g.company.name?g.company.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCompany.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCompany.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveCompany=function(){g.errors=[],d.cmCompany.update({id:g.company.id},g.company).$promise.then(function(e){var t=_.find(g.companies,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Company properly saved!",msg:g.company.name?g.company.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCompany.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCompany.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteCompany=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The company will be deleted.").ariaLabel("Delete Company").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cmCompany.delete({id:g.company.id}).$promise.then(function(){_.remove(g.companies,{id:g.company.id}),o.success({title:"Company properly deleted!",msg:(g.company.name||"company")+" has been deleted!"}),v(g.company)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCompany.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCompany.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","companies","company","api","Auth","license","setting","crudPermissions"],angular.module("app.contactmanager").controller("CreateOrEditCompanyDialogController",e)}(),function(){"use strict";function e(a,e,t,n,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.company=c||a.params.company||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=a.params.tab||0,u.gotogoto=function(n,e){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:303}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?a.go("app.contactmanager.contacts",{CompanyId:n.id}):l.info({title:i.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:i.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});a.go("app.contactmanager.contacts",{CompanyId:n.id})}},u.alert=l.info,u.gotoCompanies=function(){a.go("app.contactmanager.companies")},u.saveCompany=function(){r.cmCompany.update({id:u.company.id},u.company).$promise.then(function(){l.success({title:"Company updated!",msg:u.company.name?u.company.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcmCompany",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","company","userProfileSection"],angular.module("app.contactmanager").controller("CompanyController",e)}(),function(){"use strict";function e(t,i,n,a,e,s,o,r,l,d,c,m,u,p,g,v,h,f,b){var A=this;A.currentUser=f.getCurrentUser(),A.license=b,A.userProfile=r,A.userProfileSection=l&&1==l.count?l.rows[0]:null,A.crudPermissions=f.parseCrudPermissions(A.userProfileSection?A.userProfileSection.crudPermissions:null);var E=60,y=1024*E*1024;A.ngFlowOptions={target:"api/cm/contacts/upload",singleFile:!0,maxChunkRetries:1,chunkSize:y,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},A.contacts=c||{count:0,rows:[]},A.options={hidden:!1,hover:!1,isOpen:!1},A.table="cm_contacts",A.selectedContacts=[],A.lists=m||{rows:[],count:0},A.companies=p||{rows:[],count:0},A.tags=v||{rows:[],count:0},A.listsMap=u,A.companiesMap=g,A.selectedTags=[],A.selectedList=null,A.selectedCompany=null,A.query=_.merge({includeAll:!0,sort:"-updatedAt",limit:10,offset:0,page:1},e),A.editdialog=function(e,t){a.go("app.contactmanager.contacts.edit",{id:e.id,crudPermissions:A.crudPermissions})},A.deleteconfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the contact?").htmlContent("<b>"+(e.firstName||e.email||e.phone||"Contact")+"</b> will be deleted.").ariaLabel("delete contact").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){C(e)})},A.success=I,A.getContacts=function(){A.query.offset=(A.query.page-1)*A.query.limit,f.hasRole("admin")?A.promise=d.cmContact.get(A.query,I).$promise:(A.query.id=A.userProfile.id,A.query.ListId=A.query.ListId?A.query.ListId:_.map(A.lists.rows,"id"),A.query.CompanyId=A.query.CompanyId?A.query.CompanyId:_(A.companies.rows).filter({canSelect:void 0}).map("id").value(),A.query.section="Contacts",A.promise=d.userProfile.getResources(A.query,I).$promise)},A.getAssignedCompanies=function(){if(!f.hasRole("admin")){var e=_(A.contacts.rows).map(function(e){return{id:e.CompanyId}}).uniqBy("id").filter(function(e){return e.id&&0<e.id}).pullAllBy(A.companies.rows,"id").value();if(!_.isEmpty(e)){var t=[];e.forEach(function(e){t.push(d.cmCompany.get({id:e.id,fields:"id,name"}).$promise)}),o.all(t).then(function(e){e.forEach(function(e){var t=e.toJSON();t.canSelect=!1,A.companies.rows.push(t);var n={};n[t.id]=t.name,A.companiesMap=_.assignIn(A.companiesMap,n)})}).catch(function(e){h.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_COMPANY",msg:e.data?JSON.stringify(e.data.message):e.toString()})})}}},A.mergeContact=function(e,t){s.show({controller:"MergeContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/merge/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:t.id})}],lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"id,name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Lists",fields:"id,name",nolimit:!0})}]},locals:{contacts:A.contacts.rows}})},A.duplicateContact=function(e,t){s.show({controller:"DuplicateContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:t.id})}],lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"id,name",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Lists",fields:"id,name",nolimit:!0})}]},locals:{contacts:A.contacts.rows}})},A.createOrEditContact=function(e,t){t&&t.dateOfBirth&&(t.dateOfBirth=new Date(t.dateOfBirth));s.show({controller:"CreateOrEditContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{ListId:A.query.ListId||a.params.ListId,CompanyId:A.query.CompanyId||a.params.CompanyId,contact:t,contacts:A.contacts.rows,companies:A.companies,lists:A.lists,setting:null,crudPermissions:A.crudPermissions}})},A.deleteContact=C,A.exportSelectedContacts=function(){var e=angular.copy(A.selectedContacts);return A.selectedContacts=[],e},A.deleteSelectedContacts=function(e){var t=s.confirm().title("Are you sure want to delete the selected contacts?").htmlContent("<b>"+A.selectedContacts.length+" selected</b> will be deleted.").ariaLabel("delete Contacts").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){A.selectedContacts.forEach(function(e){C(e)}),A.selectedContacts=[]})},A.deselectContacts=function(){A.selectedContacts=[]},A.selectAllContacts=function(){A.selectedContacts=A.contacts.rows},A.createTag=function(e){var t=s.prompt().title("What would you name your tag?").placeholder("Tag name").ariaLabel("Tag name").targetEvent(e).ok("Ok").cancel("Cancel");return s.show(t).then(function(e){if(e)return d.tag.save({name:e});h.error({title:"Error creating tag!",msg:"Invalid tag name."})}).then(function(e){e&&(A.tags.rows.push(e),h.success({title:"Tag properly created!",msg:e.tag?e.name+" has been created!":""}))})},A.createList=function(e){var t=s.prompt().title("What would you name your list?").placeholder("List name").ariaLabel("List name").targetEvent(e).ok("Ok").cancel("Cancel");return s.show(t).then(function(e){if(e)return d.cmList.save({name:e});h.error({title:"Error creating list!",msg:"Invalid list name."})}).then(function(e){e&&(A.lists.rows.push(e),h.success({title:"List properly created!",msg:e.name?e.name+" has been created!":""}))})},A.createCompany=function(e){var t=s.prompt().title("What would you name your company?").placeholder("Company name").ariaLabel("Company name").targetEvent(e).ok("Ok").cancel("Cancel");return s.show(t).then(function(e){if(e)return d.cmCompany.save({name:e});h.error({title:"Error creating company!",msg:"Invalid company name."})}).then(function(e){e&&(A.companies.rows.push(e),h.success({title:"Company properly created!",msg:e.name?e.name+" has been created!":""}))})},A.importContacts=function(e,t,n){var a=JSON.parse(t);s.show({controller:"ImportContactsDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/import/import.html",parent:angular.element(i.body),clickOutsideToClose:!1,locals:{lists:m,companies:p,file:a.file,fields:a.fields,license:A.license}}).then(function(){A.getContacts()}).catch(function(e){console.error()})},A.hasPermission=function(){return f.hasPermission(303)||f.hasRole("admin")},A.fileAdded=function(e){var t=["csv"];if(!_.includes(t,e.getExtension()))return h.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(e.size>y)return h.error({title:"File too big",msg:"The max allowed size is "+E+"MB"}),!1;return!0},a.params.ListId&&(A.selectedList=a.params.ListId),a.params.CompanyId&&(A.selectedCompany=a.params.CompanyId),t.$watch("vm.options.isOpen",function(e){e?n(function(){t.tooltipVisible=A.options.isOpen},600):t.tooltipVisible=A.options.isOpen});var S=!0,T=1;function I(e){A.contacts=e||{count:0,rows:[]}}function C(e){d.cmContact.delete({id:e.id}).$promise.then(function(){_.remove(A.contacts.rows,{id:e.id}),A.contacts.count-=1,A.contacts.rows.length||A.getContacts(),h.success({title:"Contact deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){A.errors=e.data.errors||[{message:e.toString(),type:"api.contact.delete"}];for(var t=0;t<e.data.errors.length;t++)h.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else h.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.contact.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm.query.filter",function(e,t){S?n(function(){S=!1}):(t||(T=A.query.page),e!==t&&(A.query.page=1),e||(A.query.page=T),A.getContacts())},!0),t.$watch("vm.selectedList",function(e,t){e!==t&&(A.query.ListId=A.selectedList||void 0,A.getContacts())}),t.$watch("vm.selectedCompany",function(e,t){e!==t&&(A.query.CompanyId=A.selectedCompany||void 0,A.getContacts())}),t.$watch("vm.selectedTags",function(e,t){(e.length||t.length)&&A.getContacts()})}e.$inject=["$scope","$document","$timeout","$state","$stateParams","$mdDialog","$q","userProfile","userProfileSection","api","contacts","lists","listsMap","companies","companiesMap","tags","toasty","Auth","license"],angular.module("app.contactmanager").controller("ContactsController",e)}(),function(){"use strict";function e(n,a,e,t,i,s,o,r,l,d){var c=this;function m(){n.hide()}c.errors=[],c.title="CONTACTMANAGER.EDIT_CONTACT",c.crudPermissions=d,c.contact=angular.copy(s),c.contacts=e||{rows:[],count:0},c.lists=t||{rows:[],count:0},c.companies=i||{rows:[],count:0},c.customFields={rows:[],count:0},c.newContact=!1,c.contact?(delete c.contact.List,c.ListId=c.contact.ListId||void 0):(c.contact={ListId:o?parseInt(o,10):void 0,CompanyId:r?parseInt(r,10):void 0},c.title="CONTACTMANAGER.NEW_CONTACT",c.newContact=!0),c.addNewContact=function(){c.errors=[],l.cmContact.save(c.contact).$promise.then(function(e){c.contacts.unshift(e),a.success({title:"Contact properly created",msg:c.contact.name?c.contact.name+" has been created!":""}),m()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){c.errors=e.data.errors||[{message:e.toString(),type:"api.user.save"}];for(var t=0;t<e.data.errors.length;t++)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.contacts.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.saveContact=function(){c.errors=[],l.cmContact.update({id:c.contact.id},c.contact).$promise.then(function(e){var t=_.find(c.contacts,{id:e.id});t&&_.merge(t,e),a.success({title:"Contact properly saved!",msg:c.contact.name?c.contact.name+" has been saved!":""}),m()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){c.errors=e.data.errors||[{message:e.toString(),type:"api.contact.update"}];for(var t=0;t<e.data.errors.length;t++)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.contact.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.deleteContact=function(e){c.errors=[];var t=n.confirm().title("Are you sure?").content("The contact will be deleted.").ariaLabel("Delete Contact").ok("Delete").cancel("Cancel").targetEvent(e);n.show(t).then(function(){l.cmContact.delete({id:c.contact.id}).$promise.then(function(){_.remove(c.contacts,{id:c.contact.id}),a.success({title:"Contact properly deleted!",msg:c.contact.name?c.contact.name+" has been deleted!":""}),m()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.contact.delete"}]})},function(){})},c.closeDialog=m,c.getCustomFields=function(e){{if(e)return l.cmList.getCustomFields({id:e}).$promise.then(function(e){e&&(c.customFields=e)}).catch(function(e){console.error(e)});c.customFields={rows:[],count:0}}},c.getDateFromString=function(e){return null===e?void 0:new Date(e)}}e.$inject=["$mdDialog","toasty","contacts","lists","companies","contact","ListId","CompanyId","api","crudPermissions"],angular.module("app.tools").controller("CreateOrEditContactDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;function r(){e.hide()}o.errors=[],o.title="CONTACTMANAGER.COPY_CONTACT",o.contact=angular.copy(n),o.lists=i||{rows:[],count:0},o.addNewContact=function(){o.errors=[],delete o.contact.id,o.contact.tags&&!o.contact.tags.length&&delete o.contact.tags;s.cmContact.save(o.contact).$promise.then(function(e){a.unshift(e),t.success({title:"Contact properly created",msg:o.contact.name?o.contact.name+" has been created!":""}),r()}).catch(function(e){console.error(e),o.errors=e.data.errors||[{message:e.toString(),type:"api.contact.save"}]})},o.closeDialog=r}e.$inject=["$mdDialog","toasty","contact","contacts","lists","api"],angular.module("app.tools").controller("DuplicateContactDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l){var d=this;function c(e){a.hide(e)}d.errors=[],d.title="CONTACTMANAGER.EDIT_HOPPER",d.hopper=angular.copy(o),d.hoppers=s,d.newHopper=!1,d.crudPermissions=l,d.hopper||(d.hopper={},d.title="CONTACTMANAGER.NEW_HOPPER",d.newHopper=!0),d.saveHopper=function(){d.errors=[],r.cmHopper.update({id:d.hopper.id},d.hopper).$promise.then(function(e){var t=_.find(d.hoppers,{id:e.id});t&&_.merge(t,e),i.success({title:"Hopper properly saved!",msg:d.hopper.name?d.hopper.name+" has been saved!":""}),c(e)}).catch(function(e){console.error(e),d.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.update"}]})},d.getDateFromString=function(e){return null===e?void 0:new Date(e)},d.closeDialog=c}e.$inject=["$scope","$state","$location","$mdDialog","toasty","hoppers","hopper","api","crudPermissions"],angular.module("app.contactmanager.contacts").controller("EditHopperDialogController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f,b,A){var E=this;E.currentUser=b.getCurrentUser(),E.license=f,E.journey=[],E.contact=r||{},E.hoppers=l||{rows:[],count:0},E.finals=d||{rows:[],count:0},E.histories=c||{rows:[],count:0},E.companies=u||{rows:[],count:0},E.lists=p||{rows:[],count:0},E.customFields=g||{rows:[],count:0},E.tags=v||{rows:[],count:0},E.jscriptySessions=h||{rows:[],count:0},E.timelineOptions={scrollEl:"#interaction-content"},E.userProfileSection=A&&1==A.count?A.rows[0]:null,E.crudPermissions=b.parseCrudPermissions(E.userProfileSection?E.userProfileSection.crudPermissions:null),E.arraypriority=_.keyBy([{option:"Highest",value:"'4'"},{option:"High",value:"'3'"},{option:"Medium",value:"'2'"},{option:"Low",value:"'1'"},{option:"Lowest",value:"'0'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),E.queryHopper={fields:"id,phone,scheduledat,priority,recallme,VoiceQueueId,CampaignId,UserId",sort:"-updatedAt",limit:10,page:1},E.queryFinal={fields:"id,uniqueid,calleridnum,statedesc,starttime,disposition",sort:"-id",limit:10,page:1},E.queryHistory={fields:"id,uniqueid,calleridnum,statedesc,scheduledat,starttime,endtime",sort:"-id",limit:10,page:1},E.queryJscriptySession={fields:"id,starttime,endtime,membername,projectname",sort:"-starttime",limit:10,page:1},E.selectedTab=t.params.tab||0,E.onInit=function(){b.hasRole("admin")||(function(){if(!_.some(E.companies.rows,{id:E.contact.CompanyId}))o.cmCompany.get({id:E.contact.CompanyId,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,E.companies.rows.push(t)}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_COMPANY",msg:e.data?JSON.stringify(e.data.message):e.toString()})})}(),function(){var e=_.map(E.contact.Tags,function(e){return{id:e.id,name:e.name}});if(!_.isEmpty(e))for(var t=0;t<e.length;t++)_.some(E.tags.rows,{id:e.id})||(e[t].canSelect=!1,E.tags.rows.push(e[t]))}());return o.user.get({fields:"id,fullname",nolimit:!0}).$promise.then(function(e){E.users=e||{count:0,rows:[]},E.usersMap=_.mapValues(_.keyBy(E.users.rows,"id"),"fullname"),E.Tags=_.map(E.contact.Tags,"id")}).then(function(e){var t=["mail","chat","sms","openchannel","fax"];if(e&&e.id){for(var n=0;n<t.length;n++)o[t[n]+"Interaction"].get({ContactId:e.id,includeAll:!0}).$promise.then(I);o.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(I).catch(function(e){console.error(e)})}}(r))},E.gotoContacts=function(){t.go("app.contactmanager.contacts",{},{reload:!0,notify:!0})},E.duplicateContact=function(e){i.show({controller:"DuplicateContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,resolve:{lists:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmList@get",{fields:"id,name"}):e.resolve("userProfile@getResources",{id:E.currentUser.userProfileId,section:"Lists",fields:"id,name"})}]},locals:{contacts:m.rows,contact:r}})},E.saveContact=function(){o.cmContact.update({id:E.contact.id},E.contact).$promise.then(function(){s.success({title:"Contact updated!",msg:E.contact.name?E.contact.name+" has been updated!":""})}).then(function(){return o.cmContact.setTags({id:E.contact.id,ids:E.Tags}).$promise}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEcontact",msg:e.data?JSON.stringify(e.data):e.toString()})})},E.editCompany=function(e,t){var n=_.find(E.companies.rows,{id:t});i.show({controller:"CreateOrEditCompanyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/companies/create/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{companies:[],license:null,setting:null,crudPermissions:!1===n.canSelect?{readOnly:!0,canEdit:!1,canDelete:!1}:o.userProfileSection.get({userProfileId:E.currentUser.userProfileId,sectionId:302}).$promise.then(function(e){var t=e.rows?e.rows[0]:null;return b.parseCrudPermissions(t?t.crudPermissions:null)}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"API:GET_COMPANY_SECTION",msg:e.data?JSON.stringify(e.data):e.toString()})})},resolve:{company:["apiResolver",function(e){return e.resolve("cmCompany@get",{id:t})}]}})},E.onSelectList=function(e){if(E.contact.ListId){var t=i.confirm().title("You are selecting the list number: "+E.contact.ListId).textContent("Warning! You won't select a different list for the contact "+E.contact.firstName||E.contact.lastName||E.contact.id).targetEvent(e).ok("Ok").cancel("Cancel");return i.show(t).then(E.onSelectListSuccess).catch(function(){E.contact.ListId=null})}},E.onSelectListSuccess=function(){return o.cmList.getCustomFields({id:E.contact.ListId}).$promise.then(function(e){E.customFields=e||{rows:[],count:0}}).catch(function(e){console.error(e)})},E.getDateFromString=function(e){return null===e?void 0:new Date(e)},E.getHoppers=function(){E.queryHopper.offset=(E.queryHopper.page-1)*E.queryHopper.limit,E.queryHopper.id=E.contact.id,E.promise=o.cmContact.getHoppers(E.queryHopper,T("hoppers")).$promise},E.getFinals=function(){E.queryFinal.offset=(E.queryFinal.page-1)*E.queryFinal.limit,E.queryFinal.id=E.contact.id,E.promise=o.cmContact.getHopperFinals(E.queryFinal,T("finals")).$promise},E.getHistories=function(){E.queryHistory.offset=(E.queryHistory.page-1)*E.queryHistory.limit,E.queryHistory.id=E.contact.id,E.promise=o.cmContact.getHopperHistories(E.queryHistory,T("histories")).$promise},E.getJscriptySessions=function(){E.queryJscriptySession.offset=(E.queryJscriptySession.page-1)*E.queryJscriptySession.limit,E.queryJscriptySession.id=E.contact.id,E.promise=o.cmContact.getJscriptySessions(E.queryJscriptySession,T("jscriptySessions")).$promise},E.deleteconfirm=function(t,e){var n=i.confirm().title("Are you sure want to delete the agent?").htmlContent("<b>"+(t.phone||"hopper")+"</b> will be deleted.").ariaLabel("delete hopper").targetEvent(e).ok("OK").cancel("CANCEL");i.show(n).then(function(){var e;e=t,o.cmHopper.delete({id:e.id}).$promise.then(function(){_.remove(E.hoppers.rows,{id:e.id}),E.hoppers.count--,E.hoppers.rows.length||E.getHoppers(),s.success({title:"Hopper deleted!",msg:e.phone?e.phone+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEhopper",msg:e.data?JSON.stringify(e.data):e.toString()})})},function(){console.log("CANCEL")})},E.editHopper=function(e,t){i.show({controller:"CreateOrEditHopperVoiceQueueIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hoppers/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{hopper:t,hoppers:E.hoppers.rows,license:null,setting:null,crudPermissions:E.crudPermissions}})},E.createOrEditIvrCampaignHopper=function(e,t){i.show({controller:"CreateOrEditHopperCampaignIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hoppers/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{hopper:t,hoppers:E.hoppers.rows,license:null,setting:null,crudPermissions:E.crudPermissions}})},E.getColorByItem=function(e){var t="";e.FaxAccountId?t="fax":e.OpenchannelAccountId?t="openchannel":e.SmsAccountId?t="sms":e.MailAccountId?t="mail":e.ChatWebsiteId?t="chat":e.amaflags&&(t="voice");return function(e){switch(e){case"chat":return"green-A700";case"mail":return"teal";case"sms":return"orange";case"openchannel":return"amber-A200";case"fax":return"blue-grey-A200";default:return"blue-A700"}}(t)};var y=!0,S=1;function T(t){return function(e){E[t]=e||{count:0,rows:[]}}}function I(e){e&&e.count&&e.rows.length&&(E.journey=_.concat(E.journey,e.rows))}e.$watch("vm.queryHopper.filter",function(e,t){y?n(function(){y=!1}):(t||(S=E.queryHopper.page),e!==t&&(E.queryHopper.page=1),e||(E.queryHopper.page=S),E.getHoppers())}),e.$watch("vm.queryFinal.filter",function(e,t){y?n(function(){y=!1}):(t||(S=E.queryFinal.page),e!==t&&(E.queryFinal.page=1),e||(E.queryFinal.page=S),E.getFinals())}),e.$watch("vm.queryHistory.filter",function(e,t){y?n(function(){y=!1}):(t||(S=E.queryHistory.page),e!==t&&(E.queryHistory.page=1),e||(E.queryHistory.page=S),E.getHistories())})}e.$inject=["$scope","$timeout","$state","$document","$mdDialog","toasty","api","contact","hoppers","finals","histories","contacts","companies","lists","customFields","tags","jscriptySessions","license","Auth","userProfileSection"],angular.module("app.contactmanager.contacts").controller("ContactController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;g.processing=!1,g.stopping=!0,g.license=p,g.pid=0,g.result={finish:!1,rows:0,affectedRows:0,failedRows:0,duplicatedRows:0,errors:[]},g.contactFields=[{key:"firstName",required:!0},{key:"lastName",required:!1},{key:"phone",required:!0},{key:"mobile",required:!1},{key:"email",required:!1},{key:"dateOfBirth",required:!1},{key:"country",required:!1},{key:"city",required:!1},{key:"street",required:!1},{key:"postalCode",required:!1},{key:"fax",required:!1}],g.motionBullFields=[{key:"UserId",required:!1},{key:"scheduledat",required:!1},{key:"priority",required:!1}],g.binding={},g.duplicate=[],g.lists=s||{rows:[],count:0},g.companies=o||{rows:[],count:0},g.customFields={rows:[],count:0},g.fields=u||[],g.closeDialog=function(){d.removeAllListeners("contact:import:"+v),t.hide()},g.onChangeList=function(){return l.cmList.getCustomFields({id:g.ListId}).$promise.then(function(e){g.customFields=e}).catch(function(e){console.error(e)})},g.uploadCsv=function(){g.processing=moment(),l.cmContact.import({id:m.filename,binding:g.binding,ListId:g.ListId,CompanyId:g.CompanyId,duplicates:g.duplicates,socket_timestamp:v}).$promise.then(function(e){g.stopping=!1,e&&e.pid&&(g.pid=e.pid)}).catch(function(e){g.processing=!1,r.error({title:"Import process failed!",msg:"Please retry with a new file"})})},g.getHeaderErrors=function(){var e=u;return e.push("contact_import_error"),e},g.getArrayErrors=function(){for(var e=[],t=0;t<g.result.errors.length;t+=1){var n=g.result.errors[t].row;n.contact_import_error=g.result.errors[t].message,e.push(n)}return e},g.stopUpload=function(){if(g.stopping=!0,g.pid)return l.system.killProcess({pid:g.pid}).$promise.then(function(e){r.success({title:"CSV import process stopped!",msg:"Import has been stopped!"})}).catch(function(e){r.error({title:"CSV stop import process failed!",msg:"pid is unknown"})})};var v=moment().unix();d.on("contact:import:"+v,function(n){i(function(){if(g.result.rows=n.rows,n.errors)for(var e=0;e<n.errors.length;e++)g.result.errors.push(n.errors[e]);if(n.finish){g.result.finish=!0,g.result.affectedRows=n.affectedRows,g.result.failedRows=g.result.errors.length;var t=g.result.rows-g.result.affectedRows-g.result.errors.length;t&&0<t&&(g.duplicates.length?g.result.duplicatedRows=t:g.result.failedRows+=t),g.result.elapsed=moment().diff(g.processing,"seconds")}})}),c.$on("$destroy",function(){d.removeAllListeners("contact:import:"+v)})}e.$inject=["$cookies","$mdDialog","$interval","$q","$timeout","lists","companies","toasty","api","socket","$scope","file","fields","license"],angular.module("app.tools").controller("ImportContactsDialogController",e)}(),function(){"use strict";function e(i,e,s,t,o,n,r){var a=this;a.errors=[],a.title="CONTACTMANAGER.MERGE_CONTACT",a.contact=angular.copy(t),a.lists=n||[],a.change=function(){a.searchTerm?r.cmContact.get({fields:"id,firstName,lastName,phone,email",filter:a.searchTerm,ListId:t.ListId}).$promise.then(function(e){a.contacts=e.rows}).catch(function(e){console.error(e)}):a.contacts=[]},a.showConfirm=function(e,t,n){var a=i.confirm({skipHide:!0}).title("Would you like to merge your contacs?").textContent("All unfilled values of the contact #"+n.id+" will be overwritten by the fields of the contact #"+t.id+".").targetEvent(e).ok("Ok").cancel("Cancel");i.show(a).then(function(){return r.cmContact.merge({to:n.id,from:t.id}).$promise}).then(function(e){i.hide({new:e,to:n,from:t}),_.remove(o,{id:n.id}),_.remove(o,{id:t.id}),o.unshift(e)}).then(function(){s.success({title:"Contact properly merged!"})}).catch(function(e){e&&e.status&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:MERGE_CONTACT",msg:e.data?JSON.stringify(e.data):e.toString()})})},a.closeDialog=function(){i.hide()}}e.$inject=["$mdDialog","$scope","toasty","contact","contacts","lists","api"],angular.module("app.tools").controller("MergeContactDialogController",e)}(),function(){"use strict";function e(a,e,t,n,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){n.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CONTACTMANAGER.EDIT_GLOBALCUSTOMFIELD",g.sortable={animation:800,sort:!0,onSort:function(e){a.globalCustomFieldForm.$pristine=!1}},g.globalCustomField=l,g.globalCustomFields=r,g.newGlobalCustomField=!1,g.globalCustomField||(g.globalCustomField={type:"text"},g.title="CONTACTMANAGER.NEW_GLOBALCUSTOMFIELD",g.newGlobalCustomField=!0),a.$watch("vm.globalCustomField.type",function(e,t){if(e!==t)switch(e){case"text":g.globalCustomField.values="";break;case"select":g.globalCustomField.values=[]}}),g.addNewGlobalCustomField=function(){g.errors=[],d.cmCustomField.save(g.globalCustomField).$promise.then(function(e){g.globalCustomFields.unshift(e.toJSON()),o.success({title:"GlobalCustomField properly created",msg:g.globalCustomField.name?g.globalCustomField.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCustomField.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCustomField.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveGlobalCustomField=function(){g.errors=[],d.cmCustomField.update({id:g.globalCustomField.id},g.globalCustomField).$promise.then(function(e){var t=_.find(g.globalCustomFields,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"GlobalCustomField properly saved!",msg:g.globalCustomField.name?g.globalCustomField.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCustomField.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCustomField.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteGlobalCustomField=function(e){g.errors=[];var t=n.confirm().title("Are you sure?").content("The globalCustomField will be deleted.").ariaLabel("Delete GlobalCustomField").ok("Delete").cancel("Cancel").targetEvent(e);n.show(t).then(function(){d.cmCustomField.delete({id:g.globalCustomField.id}).$promise.then(function(){_.remove(g.globalCustomFields,{id:g.globalCustomField.id}),o.success({title:"GlobalCustomField properly deleted!",msg:(g.globalCustomField.name||"globalCustomField")+" has been deleted!"}),v(g.globalCustomField)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCustomField.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCustomField.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.addItem=function(e){e.push({value:"New Item"}),a.globalCustomFieldForm.$pristine=!1},g.removeItem=function(e,t){e.splice(t,1),a.globalCustomFieldForm.$pristine=!1},g.removeItems=function(e){for(var t=e.length,n=0;n<t;n++)e.splice(0,1);a.globalCustomFieldForm.$pristine=!1},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","globalCustomFields","globalCustomField","api","Auth","license","setting","crudPermissions"],angular.module("app.contactmanager").controller("CreateOrEditGlobalCustomFieldDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.globalCustomFields=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="globalCustomFields",b.listOrder="",b.listOrderAsc=null,b.selectedGlobalCustomFields=[],b.query={fields:"createdAt,updatedAt,id,alias,type,values,required",sort:"-updatedAt",ListId:"null",limit:10,page:1},b.arraytype=_.keyBy([{option:"Text",value:"'text'"},{option:"Select",value:"'select'"},{option:"Number",value:"'number'"},{option:"Switch",value:"'switch'"},{option:"Datetime",value:"'datetime'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editdialog=function(e,t){i.show({controller:"CreateOrEditGlobalCustomFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/globalCustomFields/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{globalCustomField:e,globalCustomFields:b.globalCustomFields.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("globalCustomField")+"?").htmlContent("<b>"+(e.name||"globalCustomField")+"</b> will be deleted.").ariaLabel("delete globalCustomField").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getGlobalCustomFields=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.cmCustomField.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="GlobalCustomFields",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditGlobalCustomField=function(e,t){i.show({controller:"CreateOrEditGlobalCustomFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/globalCustomFields/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{globalCustomField:t,globalCustomFields:b.globalCustomFields.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteGlobalCustomField=S,b.exportSelectedGlobalCustomFields=function(){var e=angular.copy(b.selectedGlobalCustomFields);return b.selectedGlobalCustomFields=[],e},b.deleteSelectedGlobalCustomFields=function(e){var t=i.confirm().title("Are you sure want to delete the selected globalCustomFields?").htmlContent("<b>"+b.selectedGlobalCustomFields.length+" selected</b> will be deleted.").ariaLabel("delete GlobalCustomFields").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedGlobalCustomFields.forEach(function(e){S(e)}),b.selectedGlobalCustomFields=[]})},b.deselectGlobalCustomFields=function(){b.selectedGlobalCustomFields=[]},b.selectAllGlobalCustomFields=function(){b.selectedGlobalCustomFields=b.globalCustomFields.rows};var A=!0,E=1;function y(e){b.globalCustomFields=e||{count:0,rows:[]}}function S(e){m.cmCustomField.delete({id:e.id}).$promise.then(function(){_.remove(b.globalCustomFields.rows,{id:e.id}),b.globalCustomFields.count-=1,b.globalCustomFields.rows.length||b.getGlobalCustomFields(),p.success({title:_.startCase("GlobalCustomField")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcmCustomField"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEcmCustomField",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getGlobalCustomFields())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","globalCustomFields","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.contactmanager").controller("GlobalCustomFieldsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CONTACTMANAGER.EDIT_LIST",g.list=angular.copy(l),g.lists=r,g.newList=!1,g.list||(g.list={},g.title="CONTACTMANAGER.NEW_LIST",g.newList=!0),g.addNewList=function(){g.errors=[],d.cmList.save(g.list).$promise.then(function(e){g.lists.unshift(e.toJSON()),o.success({title:"List properly created",msg:g.list.name?g.list.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmList.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmList.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveList=function(){g.errors=[],d.cmList.update({id:g.list.id},g.list).$promise.then(function(e){var t=_.find(g.lists,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"List properly saved!",msg:g.list.name?g.list.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmList.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmList.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteList=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The list will be deleted.").ariaLabel("Delete List").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cmList.delete({id:g.list.id}).$promise.then(function(){_.remove(g.lists,{id:g.list.id}),o.success({title:"List properly deleted!",msg:(g.list.name||"list")+" has been deleted!"}),v(g.list)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmList.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmList.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","lists","list","api","Auth","license","setting","crudPermissions"],angular.module("app.contactmanager").controller("CreateOrEditListDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.cmList.getAgents({id:c.list.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserList?"penalty "+e.UserList.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.list=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.cmList.removeAgents({id:c.list.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.cmList.addAgents({id:c.list.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("CONTACTMANAGER.ALL_AGENTS"),labelSelected:r.instant("CONTACTMANAGER.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","list","lists","realtime","$translate","Auth","crudPermissions"],angular.module("app.contactmanager").controller("ListagentaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.list={},c.listCustomFields={count:0,rows:[]},c.selectedListCustomFields=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,alias,type,values,required",limit:10,page:1},c.arraytype=_.keyBy([{option:"Text",value:"'text'"},{option:"Select",value:"'select'"},{option:"Number",value:"'number'"},{option:"Switch",value:"'switch'"},{option:"Datetime",value:"'datetime'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.list=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.list.id,c.query.ListId=c.list.id,c.getListCustomFields()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the customField?").htmlContent("<b>"+(e.name||"customField")+"</b> will be deleted.").ariaLabel("delete customField").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getListCustomFields=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.cmList.getCustomFields(c.query,p).$promise},c.createOrEditListCustomField=function(e,t){s.show({controller:"CreateOrEditCustomFieldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/customFields/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{list:c.list,customField:t,customFields:c.listCustomFields.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedListCustomFields=function(){var e=angular.copy(c.selectedListCustomFields);return c.selectedListCustomFields=[],e},c.deleteListCustomField=g,c.deleteSelectedListCustomFields=function(e){var t=s.confirm().title("Are you sure want to delete the selected customFields?").htmlContent("<b>"+c.selectedListCustomFields.length+" selected</b> will be deleted.").ariaLabel("delete customFields").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedListCustomFields.forEach(function(e){g(e)}),c.selectedListCustomFields=[]})};var m=!0,u=1;function p(e){c.listCustomFields=e||{count:0,rows:[]}}function g(e){l.cmCustomField.delete({id:e.id}).$promise.then(function(){_.remove(c.listCustomFields.rows,{id:e.id}),c.listCustomFields.count-=1,c.listCustomFields.rows.length||c.getListCustomFields(),r.success({title:"CustomField deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETcmList"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcmList",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getListCustomFields())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.contactmanager").controller("ListCustomFieldsController",e)}(),function(){"use strict";function e(a,e,t,n,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){n.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CONTACTMANAGER.EDIT_CUSTOMFIELD",g.sortable={animation:800,sort:!0,onSort:function(e){a.customFieldForm.$pristine=!1}},g.customField=l,g.customFields=r,g.newCustomField=!1,g.customField||(g.customField={type:"text"},g.title="CONTACTMANAGER.NEW_CUSTOMFIELD",g.newCustomField=!0),e.params.id&&(g.customField.ListId=e.params.id),a.$watch("vm.customField.type",function(e,t){if(e!==t)switch(e){case"text":g.customField.values="";break;case"select":g.customField.values=[]}}),g.addNewCustomField=function(){g.errors=[],d.cmList.addCustomField({id:e.params.id},g.customField).$promise.then(function(e){g.customFields.unshift(e.toJSON()),o.success({title:"CustomField properly created",msg:g.customField.name?g.customField.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCustomField.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCustomField.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveCustomField=function(){g.errors=[],d.cmCustomField.update({id:g.customField.id},g.customField).$promise.then(function(e){var t=_.find(g.customFields,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"CustomField properly saved!",msg:g.customField.name?g.customField.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCustomField.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCustomField.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteCustomField=function(e){g.errors=[];var t=n.confirm().title("Are you sure?").content("The customField will be deleted.").ariaLabel("Delete CustomField").ok("Delete").cancel("Cancel").targetEvent(e);n.show(t).then(function(){d.cmCustomField.delete({id:g.customField.id}).$promise.then(function(){_.remove(g.customFields,{id:g.customField.id}),o.success({title:"CustomField properly deleted!",msg:(g.customField.name||"customField")+" has been deleted!"}),v(g.customField)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmCustomField.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmCustomField.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.addItem=function(e){e.push({value:"New Item"}),a.customFieldForm.$pristine=!1},g.removeItem=function(e,t){e.splice(t,1),a.customFieldForm.$pristine=!1},g.removeItems=function(e){for(var t=e.length,n=0;n<t;n++)e.splice(0,1);a.customFieldForm.$pristine=!1},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","customFields","customField","api","Auth","license","setting","crudPermissions"],angular.module("app.contactmanager").controller("CreateOrEditCustomFieldDialogController",e)}(),function(){"use strict";function e(a,e,n,i,s,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.list=c||a.params.list||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=a.params.tab||0,u.gotogoto=function(n,e){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:303}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?a.go("app.contactmanager.contacts",{ListId:n.id}):l.info({title:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});a.go("app.contactmanager.contacts",{ListId:n.id})}},u.agentadddialog=function(e,t){n.show({controller:"ListagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{list:e,lists:u.lists?u.lists.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoLists=function(){a.go("app.contactmanager.lists")},u.saveList=function(){r.cmList.update({id:u.list.id},u.list).$promise.then(function(){l.success({title:"List updated!",msg:u.list.name?u.list.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcmList",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","list","userProfileSection"],angular.module("app.contactmanager").controller("ListController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.list={},c.listVoiceDispositions={count:0,rows:[]},c.selectedListVoiceDispositions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e,t){c.list=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.list.id,c.query.ListId=c.list.id,c.getListVoiceDispositions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the voiceDisposition?").htmlContent("<b>"+(e.name||"voiceDisposition")+"</b> will be deleted.").ariaLabel("delete voiceDisposition").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getListVoiceDispositions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.cmList.getDispositions(c.query,p).$promise},c.createOrEditListVoiceDisposition=function(e,t){s.show({controller:"CreateOrEditVoiceDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/voiceDispositions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{list:c.list,voiceDisposition:t,voiceDispositions:c.listVoiceDispositions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedListVoiceDispositions=function(){var e=angular.copy(c.selectedListVoiceDispositions);return c.selectedListVoiceDispositions=[],e},c.deleteListVoiceDisposition=g,c.deleteSelectedListVoiceDispositions=function(e){var t=s.confirm().title("Are you sure want to delete the selected voiceDispositions?").htmlContent("<b>"+c.selectedListVoiceDispositions.length+" selected</b> will be deleted.").ariaLabel("delete voiceDispositions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedListVoiceDispositions.forEach(function(e){g(e)}),c.selectedListVoiceDispositions=[]})};var m=!0,u=1;function p(e){c.listVoiceDispositions=e||{count:0,rows:[]}}function g(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(c.listVoiceDispositions.rows,{id:e.id}),c.listVoiceDispositions.count-=1,c.listVoiceDispositions.rows.length||c.getListVoiceDispositions(),r.success({title:"VoiceDisposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETcmList"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcmList",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getListVoiceDispositions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.contactmanager").controller("ListVoiceDispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="CONTACTMANAGER.EDIT_VOICEDISPOSITION",g.voiceDisposition=angular.copy(l),g.voiceDispositions=r,g.newVoiceDisposition=!1,g.voiceDisposition||(g.voiceDisposition={},g.title="CONTACTMANAGER.NEW_VOICEDISPOSITION",g.newVoiceDisposition=!0),t.params.id&&(g.voiceDisposition.ListId=t.params.id),g.addNewVoiceDisposition=function(){g.errors=[],d.disposition.save(g.voiceDisposition).$promise.then(function(e){g.voiceDispositions.unshift(e.toJSON()),o.success({title:"VoiceDisposition properly created",msg:g.voiceDisposition.name?g.voiceDisposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVoiceDisposition=function(){g.errors=[],d.disposition.update({id:g.voiceDisposition.id},g.voiceDisposition).$promise.then(function(e){var t=_.find(g.voiceDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VoiceDisposition properly saved!",msg:g.voiceDisposition.name?g.voiceDisposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVoiceDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The voiceDisposition will be deleted.").ariaLabel("Delete VoiceDisposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.voiceDisposition.id}).$promise.then(function(){_.remove(g.voiceDispositions,{id:g.voiceDisposition.id}),o.success({title:"VoiceDisposition properly deleted!",msg:(g.voiceDisposition.name||"voiceDisposition")+" has been deleted!"}),v(g.voiceDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","voiceDispositions","voiceDisposition","api","Auth","license","setting","crudPermissions"],angular.module("app.contactmanager").controller("CreateOrEditVoiceDispositionDialogController",e)}(),function(){"use strict";function e(e,t,a,n,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.lists=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="lists",b.listOrder="",b.listOrderAsc=null,b.selectedLists=[],b.query={fields:"createdAt,updatedAt,id,name,description,dialPrefix",sort:"-updatedAt",limit:10,page:1},b.editstate=function(e,t){a.go("app.contactmanager.lists.edit",{id:e.id,list:e,crudPermissions:b.crudPermissions})},b.gotocontactsgoto=function(n,e){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:303}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?a.go("app.contactmanager.contacts",{ListId:n.id}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});a.go("app.contactmanager.contacts",{ListId:n.id})}},b.exportcsvcontactsexport=function(i,e){return m.cmList.getContactsCsv({id:i.id,nolimit:!0}).$promise.then(function(e){if(void 0!==e.length){var t=[e.buffer],n=new Blob(t,{type:e.type}),a=window.document.createElement("a");a.setAttribute("href",URL.createObjectURL(n)),a.setAttribute("download","exportContacts_"+i.id+".csv"),a.click()}else p.info({title:"EXPORT",msg:"The list is empty"})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcmList",msg:e.data?JSON.stringify(e.data):e.toString()})})},b.agentadddialog=function(e,t){i.show({controller:"ListagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{list:e,lists:b.lists?b.lists.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("list")+"?").htmlContent("<b>"+(e.name||"list")+"</b> will be deleted.").ariaLabel("delete list").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getLists=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.cmList.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Lists",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditList=function(e,t){i.show({controller:"CreateOrEditListDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/lists/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{list:t,lists:b.lists.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteList=S,b.exportSelectedLists=function(){var e=angular.copy(b.selectedLists);return b.selectedLists=[],e},b.deleteSelectedLists=function(e){var t=i.confirm().title("Are you sure want to delete the selected lists?").htmlContent("<b>"+b.selectedLists.length+" selected</b> will be deleted.").ariaLabel("delete Lists").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedLists.forEach(function(e){S(e)}),b.selectedLists=[]})},b.deselectLists=function(){b.selectedLists=[]},b.selectAllLists=function(){b.selectedLists=b.lists.rows};var A=!0,E=1;function y(e){b.lists=e||{count:0,rows:[]}}function S(e){m.cmList.delete({id:e.id}).$promise.then(function(){_.remove(b.lists.rows,{id:e.id}),b.lists.count-=1,b.lists.rows.length||b.getLists(),p.success({title:_.startCase("List")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcmList"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEcmList",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getLists())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","lists","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.contactmanager").controller("ListsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l){var d=this;d.currentUser=s.getCurrentUser(),d.userProfile=r,d.userProfileSection=l&&1==l.count?l.rows[0]:null,d.crudPermissions=s.parseCrudPermissions(d.userProfileSection?d.userProfileSection.crudPermissions:null),d.customDashboard={},d.voiceQueues=o&&o.count?o:{count:0,rows:[]},d.voiceQueuesSelected=o&&o.count?_.map(o.rows,"id"):[],d.interval=t(function(){},1e3),d.onChangeVoiceQueues=function(){for(var e=0;e<d.customDashboard.widgets.length;e+=1)d.customDashboard.widgets[e].voiceQueuesSelected=d.voiceQueuesSelected},d.goToEdit=function(){e.go("app.tools.customDashboards.edit",{id:d.customDashboard.id,tab:1})},i.onWithoutApply("voice_queue:save",function(e){var t=_.find(d.voiceQueues.rows,{id:e.id});t&&_.merge(t,_.pick(e,_.keys(t)))}),a.dashboard.get({id:e.params.id}).$promise.then(function(e){if(e)return d.customDashboard=e,d.customDashboard.widgets=[],d.customDashboard.preview=!0,d.customDashboard.draggable={enabled:!1},d.customDashboard.resizable={enabled:!1},a.dashboard.getItems({id:d.customDashboard.id}).$promise}).then(function(e){if(e&&e.count&&e.rows)for(var t=0;t<e.rows.length;t+=1)e.rows[t].templateUrl="app/core/directives/ms-widget-engine/ms-widget-engine-"+e.rows[t].type+"/ms-widget-engine."+e.rows[t].type+".html",e.rows[t].voiceQueues=d.voiceQueues,e.rows[t].voiceQueuesSelected=d.voiceQueuesSelected,d.customDashboard.widgets.push(e.rows[t])}).catch(function(e){d.customDashboard=void 0}),n.$on("$destroy",function(){i.removeAllListeners("voice_queue:save"),d.interval&&t.cancel(d.interval)})}e.$inject=["$state","$interval","$scope","api","socket","Auth","voiceQueues","userProfile","userProfileSection"],angular.module("app.dashboards.custom").controller("DashboardCustomController",e)}(),function(){"use strict";function e(e,i,a,o,s,t,r,n,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=p,b.setting=g;function A(e){var t={};for(var n in b.tabs)b.tabs.hasOwnProperty(n)&&(t[n]=b.tabs[n],b.tabs[n].interaction&&(t[n].interaction=_.pick(b.tabs[n].interaction,["id","OpenchannelAccountId","MailAccountId","ChatWebsiteId","FaxAccountId","SmsAccountId","closed","draft"])));a.localStorage.setItem("motion2.user:"+b.user.id,JSON.stringify({tabs:t,currentTab:b.currentTab})),e&&E(e)}function E(e){if(_.isNil(e)||e&&"interaction"===e.type){var t={id:b.user.id,online:!0,capacity:{mail:0,fax:0,sms:0,openchannel:0,chat:0},interaction:{mail:[],fax:[],sms:[],openchannel:[],chat:[]}};for(var n in b.tabs)b.tabs.hasOwnProperty(n)&&t.capacity.hasOwnProperty(b.tabs[n].channel)&&b.tabs[n].interaction&&!b.tabs[n].interaction.closed&&(t.capacity[b.tabs[n].channel]+=1,t.interaction[b.tabs[n].channel].push(b.tabs[n].interaction.id));if(!_.isEqual(b.agentCapacity,t.capacity))return b.agentCapacity=t.capacity,r.rpc.setAgentCapacity(t)}}function y(t){if(b.tabs[t.id]&&(function(e){if(e.channel&&e.interaction)r.user["remove"+_.upperFirst(e.channel)+"Interactions"]({id:b.user.id,ids:[e.interaction.id]}).$promise.catch(function(e){console.error(e)})}(b.tabs[t.id]),delete b.tabs[t.id],b.currentTab=0,A(t),"interaction"===t.type))return r[t.channel+"Interaction"].get({id:t.interaction.id}).$promise.then(function(e){return r.user["remove"+_.upperFirst(t.channel)+"Interactions"]({id:b.user.id,ids:[e.id]}).$promise}).catch(function(e){console.error(e)})}function S(e){e.id=_.random(1e10),e.openedAt=new Date,e.saved=!1,e.badges=0,b.tabs[e.id]=e,b.currentTab=e.id,A(e)}function T(t,n){var e=_.find(b.tabs,function(e){return"interaction"===e.type&&e.interaction&&e.interaction.id===n.id&&e.channel===t});e?(e.isDraft=n.isDraft||!1,b.currentTab=e.id):S(e={type:"interaction",title:t?t.toUpperCase():"openchannel",icon:function(e){switch(e){case"chat":return"icon-hangouts";case"mail":return"icon-email";case"sms":return"icon-message-text";case"openchannel":return"icon-google-earth";case"fax":return"icon-deskphone";default:return"icon-hangouts"}}(t),color:function(e){switch(e){case"chat":return"green-A700";case"mail":return"teal";case"sms":return"orange";case"openchannel":return"amber-A200";case"fax":return"blue-grey-A200";default:return"grey"}}(t),channel:t,interaction:n,isDraft:n.isDraft||!1})}function I(e){e&&e.uniqueid&&b.notifications[e.uniqueid]&&(l.clear(b.notifications[e.uniqueid]),delete b.notifications[e.uniqueid])}function C(t,e,n){return function(){if(_.find(n.calls,function(e){return e.uniqueid===t}))return r.voiceCallReport.update({id:t,ContactId:e}).$promise.catch(function(e){console.error(e)})}}function O(e,t){return 0<=t&&(e.calls[t].disposedAt=new Date,!0)}function x(){return function(e){if(404===e.status)l.warning({title:o.instant("DASHBOARDS.ATTENTION"),msg:o.instant("DASHBOARDS.ACCEPT_ELSEWHERE")});else if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelMessage.accept"}];for(var t=0;t<e.data.errors.length;t+=1)l.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelMessage.accept",msg:e.data?JSON.stringify(e.data.message):e.toString()})}}b.detectBrowser=h.detectBrowser(),b.user=t.getCurrentUser(),b.currentTab=0,b.notifications={},b.tabs={},b.agentCapacity={},b.globalUserLists=d||{count:0,rows:[]},b.globalLists=c||{count:0,rows:[]},b.globalCompanies=m||{count:0,rows:[]},b.globalTags=u||{count:0,rows:[]},b.onContactManager=function(t){var e={ListId:t.ListId,limit:1,offset:0,sort:"-updatedAt"},n=!1,a=t.calleridname&&"<unknown>"!==t.calleridname?t.calleridname:t.calleridnum||t.uniqueid,i=t.calleridnum;_.isNil(t["xmd-contactid"])?_.isNil(t.routeId)?e.phone=t.calleridnum:(e.phone=t.destcalleridnum,a=t.destcalleridname&&"<unknown>"!==t.destcalleridname?t.destcalleridname:t.destcalleridnum||t.uniqueid,i=t.destcalleridnum):(e.id=t["xmd-contactid"],n=!0,_.isNil(t["xmd-listid"])||parseInt(t["xmd-listid"],10)===t.ListId||t["xmd-contactid2"]&&(e.id=t["xmd-contactid2"]));return r.cmContact.get(e).$promise.then(function(e){n?e&&b.addContactTab(e,t):e.count&&e.rows[0]?b.addContactTab(e.rows[0],t):b.addContactTab({firstName:a,ListId:t.ListId,phone:i},t)}).catch(x())},b.onJscripty=function(n){return r.jscriptyProject.get({id:n.ProjectId}).$promise.then(function(t){if(t){if(!_.isUndefined(n["xmd-contactid"]))return r.cmContact.get({id:n["xmd-contactid"]}).$promise.then(function(e){try{t.formData=Mustache.render(t.formData,_.merge(n,{user:b.user,contact:e}))}catch(e){console.error(e)}S({type:"jscripty",title:t.name,icon:"icon-script",color:"grey",project:t,call:n,contact:e})}).catch(x());try{t.formData=Mustache.render(t.formData,_.merge(n,{user:b.user}))}catch(e){console.error(e)}S({type:"jscripty",title:t.name,icon:"icon-script",color:"grey",project:t,call:n})}}).catch(x())},b.onBot=function(t){var n=t.calleridname&&"<unknown>"!==t.calleridname?t.calleridname:t.calleridnum,a=t.calleridnum;return r.squareMessage.get({fields:"id",limit:1,offset:0,uniqueid:t.uniqueid}).$promise.then(function(e){e.count&&S({type:"bot",title:n+" <"+a+">",icon:"fas fa-robot",color:"pink",data:{uniqueid:t.uniqueid}})})},b.onBrowserUrl=function(e){if(e&&e.uri)if(e.uri=_.replace(e.uri,"&lt%3B",""),e.uri=_.replace(e.uri,"=&gt%3B=",""),e.uriLocation)switch(e.uriLocation){case"0":a.open(e.uri);break;case"1":a.open(e.uri,"_blank","width="+(e.windowWidth||"800")+",height="+e.windowHeight||"600");break;default:a.open(e.uri)}else a.open(e.uri)},b.onBrowserPopup=function(e){e&&e.html&&S({type:"popup",title:e.calleridnum||"popup",icon:"icon-tablet",color:"grey",html:e.html})},b.onNotificationSave=function(e){if(e&&e.uniqueid){n=e,v.isSupported()?v.requestPermission().then(function(){var e,t;t={autoClose:!0,duration:10,showOnPageHidden:!0,icon:"../../../../../../../assets/images/avatars/customer.png",body:(e=n).queue?"Queue: "+e.queue:"",focusOnclick:!0,closeOnClick:!0},v.show(e.title,t)},function(e){console.error("Please enable browser notifications!",e)}):console.error("Browser notifications are not supported by the browser. Normal notifications will be used.");var t=b.alreadyExistsTab(e);if(t){if(r[e.channel+"Message"])return b.currentTab!==t.id&&(t.badges+=1),r[e.channel+"Message"].accept({id:e.id,UserId:b.user.id}).$promise.catch(x())}else l.wait({title:e.title,msg:e.msg||"",showClose:!1,clickToClose:!1,timeout:!1,sound:e.sound,html:!0,shake:e.shake||!1,onAdd:function(){b.notifications[e.uniqueid]=this.id},onAccept:function(){if(I(e),r[e.channel+"Message"])return r[e.channel+"Message"].accept({id:e.id,UserId:b.user.id,manual:!0}).$promise.then(function(e){T(e.channel,e.interaction),l.success({title:"Message properly accepted!",msg:"Message has been accepted!"})}).catch(x())},onReject:function(){if(I(e),r[e.channel+"Message"])return r[e.channel+"Message"].reject({id:e.id,UserId:b.user.id}).$promise.then(function(e){l.success({title:"Message properly rejected!",msg:"Message has been rejected!"})}).catch(x())}})}var n},b.onNotificationRemove=I,b.onVoiceChannelRemove=function(t){for(var e in b.tabs)if(b.tabs.hasOwnProperty(e)){var n=b.tabs[e],a=_.findLastIndex(n.calls,function(e){return e.uniqueid===t.uniqueid});if(!O(n,a)){var i=_.find(b.tabs,{calls:[{uniqueid:t.uniqueid}]});if(i){var s=_.findLastIndex(i.calls,function(e){return e.uniqueid===t.uniqueid});O(i,s)}}b.contact&&b.contact.id&&$timeout(C(t.uniqueid,b.contact.id,n),1e3)}},b.onClickTab=function(e){b.currentTab=e,A(b.tabs[e])},b.isActiveTab=function(e){return e===b.currentTab},b.alreadyExistsTab=function(t){return _.find(b.tabs,function(e){return"interaction"===e.type&&e.interaction&&e.interaction.id==t.interactionId&&e.channel==t.channel})},b.addContactTab=function(t,n){var a={type:"contact",title:t?function(e){var t="";e&&(e.firstName||e.lastName?(e.firstName&&(t+=e.firstName+" "),e.lastName&&(t+=e.lastName)):e.phone&&(t=e.phone));return t}(t):o.instant("DASHBOARDS.NEW_CONTACT"),icon:"icon-account-circle",color:"red",contact:t,userLists:d,lists:c,companies:m,tags:u,calls:n?[n]:[],autoCreate:n?n.autoCreate:0};if(n){if(n["xmd-cdrtype"]&&"dialer"===n["xmd-cdrtype"])n.answeredAt=n.agentcalledAt?moment(n.agentcalledAt,"YYYY-MM-DD HH:mm:ss").toDate():new Date;else if(n.uniqueid){var e=n.uniqueid.split(".")[0];n.answeredAt=e?new Date(1e3*parseInt(e)):new Date}(n.agentcompleteAt||n.endtime)&&(n.disposedAt=new Date)}if(t){var i=_.find(b.tabs,function(e){return e.contact&&e.contact.id?"contact"===e.type&&e.contact&&e.contact.id==t.id:"contact"===e.type&&e.contact&&e.contact.phone==t.phone});if(i){if(n)if(i.calls){var s=_.find(i.calls,function(e){return e.uniqueid===n.uniqueid});s||i.calls.push(n)}else i.calls=[n];b.currentTab=i.id}else{if(t.ListId)return r.disposition.get({ListId:t.ListId}).$promise.then(function(e){return a.dispositions=e,r.cmList.getCustomFields({id:t.ListId}).$promise}).then(function(e){a.customFields=e}).catch(x()).finally(function(){S(a)});S(a)}}else S(a)},b.addInteractionTab=T,b.addTab=S,b.removeTab=y,b.updateLocalStorage=A,b.closeTab=function(e){var t=i.confirm().title("interaction"===e.type?"Do you want to close the interaction?":"Are you sure want to close the "+e.type+"?").textContent("interaction"===e.type?"":"The "+e.type+" has been modified. Closing will lose all changes!").ariaLabel("Close Contact").ok("interaction"===e.type?"YES":"OK").cancel("interaction"===e.type?"NO":"CANCEL");{if(!e.saved){var n=b.user.voicePause||b.user.chatPause||b.user.mailPause||b.user.openchannelPause||b.user.faxPause,a=!1;return"interaction"===e.type&&(a=e.interaction.Account.mandatoryDisposition),i.show(t).then(function(){"interaction"===e.type&&i.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(s.body),onRemoving:function(e,t){b.user&&a&&!n&&r.user.unpause({id:b.user.id}).$promise.catch(function(e){console.error(e)})},clickOutsideToClose:!a,escapeToClose:!a,locals:{user:b.user,channel:e.channel,interaction:e.interaction}}),y(e)}).catch(function(){"interaction"===e.type&&y(e)})}var a=!1;if(_.forEach(e.calls,function(e){e.mandatoryDisposition&&(a=!0)}),"contact"===e.type&&0<e.calls.length){if(!a)return t._options.textContent="There is a call that hasn't been disposed yet.",i.show(t).then(function(){y(e)});alert=i.alert().title("Warning").textContent("There is a call that hasn't been disposed yet.").ok("OK"),i.show(alert).finally(function(){alert=void 0})}else y(e)}},n.on("trigger:contactmanager",b.onContactManager),n.on("trigger:jscripty",b.onJscripty),n.on("trigger:bot",b.onBot),n.on("trigger:browser:url",b.onBrowserUrl),n.on("trigger:browser:popup",b.onBrowserPopup),n.on("notification:save",b.onNotificationSave),n.on("notification:remove",b.onNotificationRemove),n.on("voice_queue_channel:remove",b.onVoiceChannelRemove),n.on("voice_outbound_channel:remove",b.onVoiceChannelRemove),function(){var e=a.localStorage.getItem("motion2.user:"+b.user.id);if(e)try{e=JSON.parse(e),b.tabs=e.tabs?e.tabs:{},b.currentTab=e.currentTab?e.currentTab:0,E(b.tabs[b.currentTab])}catch(e){console.error(e)}}(),e.$on("$destroy",function(){for(var e in b.notifications)b.notifications.hasOwnProperty(e)&&I({uniqueid:e});n.removeAllListeners("trigger:contactmanager"),n.removeAllListeners("trigger:jscripty"),n.removeAllListeners("trigger:browser:url"),n.removeAllListeners("trigger:browser:popup"),n.removeAllListeners("notification:save"),n.removeAllListeners("notification:remove"),n.removeAllListeners("voice_queue_channel:remove"),n.removeAllListeners("voice_outbound_channel:remove")})}function t(n,a,t,i){var s={},o={},r={},l={};function d(){if(o=i.getCurrentUser(),r=JSON.parse(t.localStorage.getItem("motion2.home:"+o.id)).currentSidebarTab,l=t.localStorage.getItem("motion2.home."+r+":"+o.id)){var e=JSON.parse(l);e.drafts||(e.drafts={}),l=e}else l={drafts:{}};return l.drafts}function c(){_.isEmpty(s.drafts)?delete l.drafts:l.drafts=s.drafts,t.localStorage.setItem("motion2.home."+r+":"+o.id,JSON.stringify(l))}return s.init=function(){s.drafts=d()},s.getByInteraction=function(t){return s.drafts=d(),_.find(_.values(s.drafts),function(e){return e.interaction&&e.interaction.id===t})},s.removeByInteraction=function(t){s.drafts=d();var e=_.find(_.values(s.drafts),function(e){return e.interaction&&e.interaction.id===t});e&&(delete s.drafts[e.id],c())},s.add=function(e){s.drafts=d();var t=a.instant("DASHBOARDS.UNTITLED");e.contact?t=e.contact.firstName||e.contact.email:_.isEmpty(e.message.subject)||(t=e.message.subject);var n={type:"draft",title:e.account.key+" - "+t,channel:e.channel,content:e.message,account:e.account,interaction:e.interaction,id:_.random(1e10),openedAt:new Date,saved:!1};s.drafts[n.id]=n,c()},s.update=function(e){s.drafts=d();var t=s.drafts[e.id];t&&(t.content=e.message,s.drafts[e.id]=t,c())},s.open=function(e){s.drafts=d();var t=s.drafts[e];t&&n.$broadcast("open"+_.startCase(r)+"Draft",t)},s.remove=function(e){s.drafts=d(),s.drafts[e]&&(delete s.drafts[e],c())},s}e.$inject=["$scope","$mdDialog","$window","$translate","$document","Auth","api","socket","toasty","globalUserLists","globalLists","globalCompanies","globalTags","license","setting","desktopNotification","msUtils","draftManager"],t.$inject=["$rootScope","$translate","$window","Auth"],angular.module("app.dashboards").controller("AgentDashboardGeneralController",e).factory("draftManager",t)}(),function(){"use strict";angular.module("app.dashboards").provider("desktopNotification",function(){var f={autoClose:!0,duration:5,showOnPageHidden:!1};return{config:function(e){for(var t in e)f.hasOwnProperty(t)&&null!=e[t]&&(f[t]=e[t])},$get:["$q","$timeout","$window","PERMISSIONS",function(e,u,t,p){var g=t.Notification||t.mozNotification||t.webkitNotification;return{isSupported:v,currentPermission:h,requestPermission:function(){if(!v())return e.reject("Notification API not supported");var n=e.defer();Promise.resolve(g.requestPermission)==g.requestPermission?g.requestPermission().then(function(e){p.GRANTED===e?n.resolve(e):n.reject(e)}):g.requestPermission(function(e,t){p.GRANTED===e?n.resolve(e):n.reject(e)});return n.promise},show:function(e,t){if(t=t||{},!v()||(n=e,a=t,i=angular.isString(n),s=!a.onClick||angular.isFunction(a.onClick),!i||!s)||function(e){if(e||f.showOnPageHidden)return!(window.document.hidden||window.document.mozHidden||window.document.webkitHidden)}(t.showOnPageHidden)||h()!==p.GRANTED)return;var n,a,i,s;var o=new g(e,t),r=t.duration||f.duration,l=void 0===t.autoClose?f.autoClose:t.autoClose;o.onclick=function(){t.onClick&&t.onClick(),t.focusOnclick&&window.focus(),t.closeOnClick&&o.close()},l&&(d=o,c=r,m=1e3*c,u(d.close.bind(d),m,!1));var d,c,m;return o},permissions:{default:p.DEFAULT,granted:p.GRANTED,denied:p.DENIED}};function v(){return!(void 0===g)}function h(){return(g||{}).permission}}]}}).provider("msNavigationAgentService",function(){var r=angular.injector(["ng"]).get("$log"),l=[];function t(e,t){if(angular.isString(e)){for(var n=e.split("."),a=n[n.length-1],i=function(e){var t=l;if(1===e.length)return t;e.pop();for(var n=0;n<e.length;n++){for(var a=e[n],i=!0,s=0;s<t.length;s++)if(t[s]._id===a){t=t[s].children,i=!1;break}if(i){var o={_id:a,_path:e.join("."),title:a,weight:1,children:[]};t.push(o),t=o.children}}return t}(n),s=!1,o=0;o<i.length;o++)if(i[o]._id===a){s=i[o];break}s?(angular.extend(s,t),s.uisref=d(s)):(t.children=[],!angular.isUndefined(t.weight)&&angular.isNumber(t.weight)||(t.weight=1),t._id=a,t._path=e,t.uisref=d(t),i.push(t))}else r.error("path must be a string (eg. `dashboard.project`)")}function d(e){var t="";return angular.isDefined(e.state)&&(t=e.state,angular.isDefined(e.stateParams)&&angular.isObject(e.stateParams)&&(t=t+"("+angular.toJson(e.stateParams)+")")),t}this.saveItem=t,this.deleteItem=function(e){if(!angular.isString(e))return void r.error("path must be a string (eg. `dashboard.project`)");for(var t=l,n=e.split("."),a=0;a<n.length;a++)for(var i=n[a],s=0;s<t.length;s++)if(t[s]._id===i){if(t[s]._path===e)return t.splice(s,1),!0;t=t[s].children;break}return!1},this.$get=function(){var e={saveItem:t,getNavigation:function(e){if(e){for(var t=0;t<l.length;t++)if(l[t]._id===e)return[l[t]];return null}return l}};return e}}).constant("PERMISSIONS",{DEFAULT:"default",GRANTED:"granted",DENIED:"denied"})}(),function(){"use strict";function e(n){var a=this;a.setting={},a.messages={count:0,rows:[]},a.showInteraction=!1,a.init=function(e,t){{if(a.setting=t,a.tab=e,a.tab.saved=!0,a.tab&&a.tab.data&&a.tab.data.uniqueid)return n.squareMessage.get({uniqueid:a.tab.data.uniqueid}).$promise.then(function(e){a.messages=e}).finally(function(){a.showInteraction=!0});a.showInteraction=!0}},a.getMessagesAlignment=function(e){switch(a.setting.messagesAlignment){case"left":return"in"==e.direction?e.direction:"out-left-aligned";case"right":return"in"==e.direction?"in-right-aligned":e.direction;default:return e.direction}}}e.$inject=["api"],angular.module("app.dashboards").controller("AgentGeneralBotController",e)}(),function(){"use strict";function e(d,c,n,m,u,p,t,e,s,a){var g=this;function i(e){e&&e.count&&e.rows.length&&(g.journey=_.concat(g.journey,e.rows))}g.user=t.getCurrentUser(),g.detectBrowser=a.detectBrowser(),g.journey=[],g.queryHopper={fields:"id,phone,scheduledat",sort:"-updatedAt",limit:10,page:1},g.queryFinal={fields:"uniqueid,calleridnum,statedesc,starttime,disposition",sort:"-updatedAt",limit:10,page:1},g.queryHistory={fields:"uniqueid,calleridnum,statedesc,scheduledat,starttime,endtime",sort:"-updatedAt",limit:10,page:1},g.hoppers={rows:[],count:0},g.finals={rows:[],count:0},g.histories={rows:[],count:0},g.addNewContact=function(){g.errors=[],u.cmContact.save(g.contact).$promise.then(function(e){return g.contact.id=e.id,g.newContact=!1,g.tab.title=e.firstName||e.phone,g.tab.contact=g.contact,u.user.addContacts({id:t.getCurrentUser().id,ids:[e.id]})}).then(function(){g.detailForm.$pristine=!0,g.customFieldsForm.$pristine=!0,p.success({title:"Contact properly created",msg:g.contact.firstName?g.contact.firstName+" has been created!":""})}).then(function(){return u.cmContact.setTags({id:g.contact.id,ids:g.tab.Tags}).$promise}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.contact.save"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.contact.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveContact=function(){g.errors=[],u.cmContact.update({id:g.contact.id},g.contact).$promise.then(function(e){return g.tab.title=e.firstName||e.phone,g.tab.contact=g.contact,m.$parent.vm.updateLocalStorage(),u.user.addContacts({id:t.getCurrentUser().id,ids:[e.id]})}).then(function(){return u.cmContact.setTags({id:g.contact.id,ids:g.tab.Tags}).$promise}).then(function(){g.detailForm.$pristine=!0,g.customFieldsForm.$pristine=!0,p.success({title:"Contact properly updated!",msg:g.contact.name?g.contact.name+" has been updated!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.contact.save"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.contact.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getCustomFields=function(e){return u.cmList.getCustomFields({id:e}).$promise.then(function(e){g.tab.customFields=e}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"LIST:GETCustomFields",msg:e.data?JSON.stringify(e.data):e.toString()})})},g.call=m.$parent.vm.call,g.disposeCall=function(e,a){var n=g.user.voicePause||g.user.chatPause||g.user.mailPause||g.user.openchannelPause||g.user.faxPause,i=a.mandatoryDisposition;if(g.newContact)return void p.error({title:"ATTENTION",msg:"Please save the contact before disposing!"});d.show({controller:"DisposeCallDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/contact/dispose/dialog.html",parent:angular.element(c.body),targetEvent:a,clickOutsideToClose:!a.mandatoryDisposition,escapeToClose:!a.mandatoryDisposition,resolve:{globalDispositions:["apiResolver",function(e){return e.resolve("disposition@get",{MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null"})}]},onRemoving:function(e,t){g.user&&i&&!n&&u.user.unpause({id:g.user.id}).$promise.catch(function(e){console.error(e)})},locals:{dispositions:g.tab.dispositions,contact:g.contact,call:a}}).then(function(e){for(var t in e&&("BLACKLIST"===e?p.success({title:s.instant("DASHBOARDS.INFO"),msg:s.instant("DASHBOARDS.CALL_DISPOSED")+" "+e}):"RECALLME"===e||"RESCHEDULE"===e||p.success({title:s.instant("DASHBOARDS.INFO"),msg:s.instant("DASHBOARDS.CALL_SAVED")})),m.$parent.$parent.$parent.vm.tabs)if(m.$parent.$parent.$parent.vm.tabs.hasOwnProperty(t)){var n=m.$parent.$parent.$parent.vm.tabs[t];_.remove(n.calls,function(e){return e.uniqueid===a.uniqueid})}})},g.duplicateContact=function(e){d.show({controller:"DuplicateContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",parent:angular.element(c.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:g.contact.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:t.getCurrentUser().id,fields:"id,name"})}]},locals:{contacts:[]}})},g.mergeContact=function(e){d.show({controller:"MergeContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/merge/dialog.html",parent:angular.element(c.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:g.contact.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:t.getCurrentUser().id,fields:"id,name"})}]},locals:{contacts:[]}}).then(function(e){if(e){for(var t in m.$parent.$parent.$parent.vm.tabs)if(m.$parent.$parent.$parent.vm.tabs.hasOwnProperty(t)){var n=m.$parent.$parent.$parent.vm.tabs[t];n&&n.contact&&(e.from&&e.from.id&&e.from.id===n.contact.id&&m.$parent.$parent.$parent.vm.removeTab(n),e.to&&e.to.id&&e.to.id===n.contact.id&&m.$parent.$parent.$parent.vm.removeTab(n))}e.new&&m.$parent.$parent.$parent.vm.addContactTab(e.new)}})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.addJscriptyTab=function(e){try{e.formData=Mustache.render(e.formData,{contact:g.contact,user:g.user})}catch(e){console.error(e)}try{m.$parent.$parent.$parent.vm.addTab({type:"jscripty",title:e.name,icon:"icon-script",color:"grey",project:e,contact:g.contact})}catch(e){p.error({title:"ERROR OPENING JSCRIPTY PROJECT",msg:"The project cannot be started"+JSON.stringify(e)})}},g.getHoppers=function(){g.contact&&g.contact.id&&(g.queryHopper.ContactId=g.contact.id,g.queryHopper.offset=(g.queryHopper.page-1)*g.queryHopper.limit,g.promise=u.cmHopper.get(g.queryHopper,l("hoppers")).$promise)},g.getFinals=function(){g.contact&&g.contact.id&&(g.queryFinal.ContactId=g.contact.id,g.queryFinal.offset=(g.queryFinal.page-1)*g.queryFinal.limit,g.promise=u.cmHopperFinal.get(g.queryFinal,l("finals")).$promise)},g.getHistories=function(){g.contact&&g.contact.id&&(g.queryHistory.ContactId=g.contact.id,g.queryHistory.offset=(g.queryHistory.page-1)*g.queryHistory.limit,g.promise=u.cmHopperHistory.get(g.queryHistory,l("histories")).$promise)},g.getJscriptyProjects=function(){u.jscriptyProject.get({fields:"createdAt,updatedAt,id,name,description,createdAt,formData,enableUncompleteSave",sort:"-updatedAt",nolimit:!0}).$promise.then(function(e){g.jscriptyProjects=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.jscripty.account"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.jscripty.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getMailAccounts=function(){u.user.getMailAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.mailAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mail.account"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mail.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getFaxAccounts=function(){u.user.getFaxAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.faxAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.fax.account"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.fax.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getSmsAccounts=function(){u.user.getSmsAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.smsAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.sms.account"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.sms.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getOpenchannelAccounts=function(){u.user.getOpenchannelAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.openchannelAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.sms.account"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannel.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getChatWebsites=function(){u.user.getChatWebsites({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.chatAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.chatAccounts.account"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatAccounts.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getLists=function(){u.user.getLists({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.lists=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cm.lists"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cm.lists",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.composeInteraction=function(e,o,r,t){var l=o.toLowerCase();d.show({controller:"Compose"+o+"InteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/compose"+o+"/dialog.html",parent:angular.element(c.body),clickOutsideToClose:!1,locals:{account:r,message:{to:"mail"==l?t:t.split(",")},type:"new",interaction:{Contact:g.contact}},fullscreen:!0}).then(function(s){return u[l+"Account"].send({id:r.id},s).$promise.then(function(e){if("Mail"===o){var t=e;if(t&&t.Messages&&t.Messages.length){if(s.attachments&&s.attachments.length)for(var n=0;n<s.attachments.length;n+=1)u.attachment.update({id:s.attachments[n].id},{MailMessageId:_.head(t.Messages).id});if(p.success({title:"Message properly sent!",msg:"Message has been sent!"}),t.closed){t.disposition=null;var a=!r.mandatoryDisposition,i=g.user.voicePause||g.user.chatPause||g.user.mailPause||g.user.openchannelPause||g.user.faxPause;d.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(c.body),onRemoving:function(e,t){g.user&&r.mandatoryDisposition&&!i&&u.user.unpause({id:g.user.id}).$promise.catch(function(e){console.error(e)})},clickOutsideToClose:a,escapeToClose:a,locals:{user:g.user,channel:"mail",interaction:t}})}else m.$parent.vm.addInteractionTab("mail",t)}}else p.success({title:"Message properly sent!",msg:"Message has been sent!"}),m.$parent.vm.addInteractionTab(l,e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else"fax"===l?p.error({title:"FAX:SEND",msg:e.data?JSON.stringify(e.data):e.message||e.toString()}):p.error({title:e.status?"API:"+e.status+" - "+e.statusText:o.toUpperCase()+"ACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})})},g.init=function(e,t){g.tab=e,m.$watchGroup(["vm.detailForm.$pristine","vm.customFieldsForm.$pristine"],function(e){g.tab.saved=e[0]&&e[1]}),g.license=t,g.contact=g.tab.contact,g.newContact=!1,g.currentTab=0,g.contact&&g.contact.id?(u.user.addContacts({id:g.user.id,ids:[g.contact.id]}),g.contact.ListId&&(g.tab.userLists.rows=_.unionBy(g.tab.userLists.rows,_.filter(g.tab.lists.rows,{id:g.contact.ListId}),"id"),g.list=_.find(g.tab.userLists.rows,{id:g.contact.ListId})),g.getHoppers(),g.getFinals(),g.getHistories(),g.getMailAccounts(),g.getFaxAccounts(),g.getSmsAccounts(),g.getOpenchannelAccounts(),g.getChatWebsites(),g.getLists()):(g.newContact=!0,e.autoCreate&&(console.log("autoCreate"),g.addNewContact()));u.user.get({fields:"id,fullname",nolimit:!0}).$promise.then(function(e){g.users=e||{count:0,rows:[]},g.usersMap=_.mapValues(_.keyBy(g.users.rows,"id"),"fullname")}).then(function(){if(g.contact&&g.contact.id)return u.cmContact.getTags({id:g.contact.id}).$promise}).then(function(e){e&&(g.tab.Tags=_.map(e.rows,"id"))}).then(function(e){var t=["mail","chat","sms","openchannel","fax"];if(e&&e.id){for(var n=0;n<t.length;n++)u[t[n]+"Interaction"].get({ContactId:e.id,includeAll:!0}).$promise.then(i);u.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(i).catch(function(e){console.error(e)})}}(g.contact))},g.hasPermission=function(e){return t.hasPermission(e)},g.openInteraction=function(e,t){try{if(t.MailAccountId)return m.$parent.$parent.$parent.vm.addInteractionTab("mail",t);if(t.ChatWebsiteId)return m.$parent.$parent.$parent.vm.addInteractionTab("chat",t);if(t.SmsAccountId)return m.$parent.$parent.$parent.vm.addInteractionTab("sms",t);if(t.OpenchannelAccountId)return m.$parent.$parent.$parent.vm.addInteractionTab("openchannel",t);if(t.FaxAccountId)return m.$parent.$parent.$parent.vm.addInteractionTab("fax",t)}catch(e){p.error({title:"ERROR OPEN INTERACTION",msg:"Customer Journey can't open the interaction"})}},g.getColorByItem=function(e){var t="";e.FaxAccountId?t="fax":e.OpenchannelAccountId?t="openchannel":e.SmsAccountId?t="sms":e.MailAccountId?t="mail":e.ChatWebsiteId?t="chat":e.amaflags&&(t="voice");return function(e){switch(e){case"chat":return"green-A700";case"mail":return"teal";case"sms":return"orange";case"openchannel":return"amber-A200";case"fax":return"blue-grey-A200";default:return"blue-A700"}}(t)},g.isMyAccount=function(e){{if(e.FaxAccountId)return _.includes(_.map(g.faxAccounts?g.faxAccounts.rows:[],"id"),e.FaxAccountId);if(e.OpenchannelAccountId)return _.includes(_.map(g.openchannelAccounts?g.openchannelAccounts.rows:[],"id"),e.OpenchannelAccountId);if(e.SmsAccountId)return _.includes(_.map(g.smsAccounts?g.smsAccounts.rows:[],"id"),e.SmsAccountId);if(e.MailAccountId)return _.includes(_.map(g.mailAccounts?g.mailAccounts.rows:[],"id"),e.MailAccountId);if(e.ChatWebsiteId)return _.includes(_.map(g.chatAccounts?g.chatAccounts.rows:[],"id"),e.ChatWebsiteId);if(e.amaflags)return!0}return!1},g.getJscriptyProjects(),m.$watch("currentTab",function(e,t){1===g.currentTab&&(g.getHoppers(),g.getFinals(),g.getHistories())});var o=!0,r=1;function l(t){return function(e){g[t]=e||{count:0,rows:[]}}}m.$watch("queryHopper.filter",function(e,t){o?n(function(){o=!1}):(t||(r=g.queryHopper.page),e!==t&&(g.queryHopper.page=1),e||(g.queryHopper.page=r),g.getHoppers())}),m.$watch("queryFinal.filter",function(e,t){o?n(function(){o=!1}):(t||(r=g.queryFinal.page),e!==t&&(g.queryFinal.page=1),e||(g.queryFinal.page=r),g.getFinals())}),m.$watch("queryHistory.filter",function(e,t){o?n(function(){o=!1}):(t||(r=g.queryHistory.page),e!==t&&(g.queryHistory.page=1),e||(g.queryHistory.page=r),g.getHistories())}),m.$on("$destroy",function(){})}e.$inject=["$mdDialog","$document","$timeout","$scope","api","toasty","Auth","socket","$translate","msUtils"],angular.module("app.dashboards").controller("AgentGeneralContactController",e)}(),function(){"use strict";function e(t,i,s,o,e,n,a,r,l,d){var c=this;function m(){var e=c.choice?c.choice.toLowerCase():void 0;return{id:c.call.uniqueid,disposition:c.choice,dispositionat:moment(),amd:"amd"===e,fax:"fax"===e,blacklist:"blacklist"===e,recallme:"recallme"===e,UserId:"recallme"===e?l.getCurrentUser().id:null,OwnerId:l.getCurrentUser().id}}c.choice=null,c.isReschedule=!1,c.recallme=!1,c.queueCampaigns={count:0,rows:[]},c.queueCampaign=void 0,c.dispositions=e,c.globalDispositions=n,c.contact=r,c.call=a,c.note=c.call.note||void 0,c.dialerCall=!1,c.hasBlackLists=!1,c.hopper={minDate:new Date,dateTime:new Date},c.call&&c.call.variables&&c.call.variables["xmd-voicequeueid"]?(c.dialerCall=!0,o.voiceQueue.getBlackLists({id:c.call.variables["xmd-voicequeueid"]}).$promise.then(function(e){e&&e.rows&&0<e.rows.length&&(c.hasBlackLists=!0)}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.getBlackLists",msg:e.data?JSON.stringify(e.data):e.toString()})})):o.user.getQueues({id:l.getCurrentUser().id,fields:"id,name,dialActive",channel:"voice",type:"outbound",nolimit:!0}).$promise.then(function(e){c.queueCampaigns=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}),c.saveDisposition=function(e){c.choice=_.isNil(e)?c.choice:e,c.call.note=c.note,o.voiceCallReport.update({id:c.call.uniqueid,userDisposition:c.choice,note:c.note,UserId:l.getCurrentUser().id,ContactId:c.contact.id}).$promise.catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEVOICECALLREPORT",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.voiceRecording.get({uniqueid:c.call.uniqueid}).$promise.then(function(e){if(e)for(var t=0;t<e.rows.length;t+=1)o.voiceRecording.update({id:e.rows[t].id,userDisposition:c.choice}).$promise.catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEVOICERECORDING",msg:e.data?JSON.stringify(e.data):e.toString()})})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEVOICERECORDING",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.dialerCall&&(o.cmHopperFinal.update(m()).$promise.catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECMHOPPERFINAL",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.cmHopperHistory.update(m()).$promise.catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECMHOPPERHISTORY",msg:e.data?JSON.stringify(e.data):e.toString()})}));if(_.isNil(c.choice))t.hide(c.choice?c.choice.toUpperCase():"");else switch(c.choice.toLowerCase()){case"blacklist":c.call&&c.call.variables&&c.call.variables["xmd-voicequeueid"]&&function(e){if(e)o.voiceQueue.getBlackLists({id:e,type:"outbound",fields:"id"}).$promise.then(function(e){var t=[];if(e&&0<e.count){for(var n=0;n<e.rows.length;n+=1){var a=angular.copy(c.contact);delete a.id,a.ListId=e.rows[n].id,t.push(o.cmContact.save(a).$promise)}return i.all(t)}s.success({title:d.instant("DASHBOARDS.INFO"),msg:d.instant("DASHBOARDS.NOTAVAILABLE")+" "+c.choice}),c.choice=void 0}).then(function(e){e&&t.hide(c.choice?c.choice.toUpperCase():"")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATEBLACKLIST",msg:e.data?JSON.stringify(e.data):e.toString()}),t.hide(c.choice?c.choice.toUpperCase():"")})}(c.call.variables["xmd-voicequeueid"]);break;case"reschedule":c.isReschedule=!0,c.recallme=!1;break;case"recallme":c.isReschedule=!0,c.recallme=!0;break;default:t.hide(c.choice?c.choice.toUpperCase():"")}},c.closeDialog=function(){t.cancel()},c.saveReschedule=function(){return c.disable=!0,o.cmHopper.save({phone:c.contact.phone,UserId:c.recallme?l.getCurrentUser().id:null,ContactId:c.contact.id,ListId:c.contact.ListId,VoiceQueueId:c.dialerCall?Number(c.call["xmd-voicequeueid"]):c.queueCampaign?c.queueCampaign.id:null,scheduledat:moment(c.hopper.dateTime).format("YYYY-MM-DD HH:mm:ss"),priority:3,recallme:c.recallme,OwnerId:l.getCurrentUser().id}).$promise.then(function(){c.dialerCall&&o.cmHopperFinal.update({id:c.call.uniqueid,rescheduled:!0,rescheduledat:moment(c.hopper.dateTime).format("YYYY-MM-DD HH:mm:ss"),recallme:c.recallme}).$promise.catch(function(e){console.log(e)})}).then(function(){s.success({title:d.instant("DASHBOARDS.INFO"),msg:d.instant("DASHBOARDS.CALL_DISPOSED")+" "+(c.recallme?d.instant("DASHBOARDS.RECALLME"):d.instant("DASHBOARDS.RESCHEDULE"))})}).catch(function(e){t.hide(c.choice?c.choice.toUpperCase():"")}).finally(function(){c.disable=!1,t.hide(c.choice?c.choice.toUpperCase():"")})}}e.$inject=["$mdDialog","$q","toasty","api","dispositions","globalDispositions","call","contact","Auth","$translate"],angular.module("app.staff").controller("DisposeCallDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.call=l,u.contact=r,u.hopper={minDate:new Date,dateTime:new Date},u.closeDialog=function(){a.cancel()},u.saveDialog=function(){return u.disable=!0,o.cmHopper.save({phone:u.contact.phone,UserId:c?d.getCurrentUser().id:null,ContactId:u.contact.id,ListId:u.contact.ListId,VoiceQueueId:Number(u.call["xmd-voicequeueid"]),scheduledat:moment(u.hopper.dateTime).format("YYYY-MM-DD HH:mm:ss"),priority:3,recallme:c,OwnerId:d.getCurrentUser().id}).$promise.then(function(){o.cmHopperFinal.update({id:u.call.uniqueid,rescheduled:!0,rescheduledat:moment(u.hopper.dateTime).format("YYYY-MM-DD HH:mm:ss"),recallme:c}).$promise}).then(function(){s.success({title:m.instant("DASHBOARDS.INFO"),msg:m.instant("DASHBOARDS.CALL_DISPOSED")+" "+(c?m.instant("DASHBOARDS.RECALLME"):m.instant("DASHBOARDS.RESCHEDULE"))}),a.hide()}).catch(function(e){a.cancel(e)}).finally(function(){u.disable=!1})}}e.$inject=["$scope","$state","$location","$mdDialog","$timeout","toasty","api","contact","call","Auth","recallme","$translate"],angular.module("app.staff").controller("RescheduleCallDialogController",e)}(),function(){"use strict";function e(e,t){var n=t(function(){},999);e.$on("$destroy",function(){n&&(t.cancel(n),n=null)})}e.$inject=["$scope","$interval"],angular.module("app.dashboards").controller("AgentHomeAbandonedController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c){var m=this;function u(){var e=i.localStorage.getItem("motion2.home.abandoned.bull.calls:"+m.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(m.query=_.merge(e.query,_.omit(m.query,["sort","limit","page"])),m.query=_.omit(m.query,"filter")),o.disposition.get({MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null"}).$promise.then(function(e){m.disposition=e?e.rows:[]}).catch(function(e){console.log(e)}),o.user.getQueues({id:r.getCurrentUser().id,fields:"id,name",channel:"voice",type:"outbound",nolimit:!0}).$promise.then(function(e){m.queues=e||{count:0,rows:[]},m.queuesMap=_.mapValues(_.keyBy(m.queues.rows,"name"),"name"),m.defaultQueues=m.queues.rows?_.map(m.queues.rows,"name").join(","):void 0}).catch(function(e){console.error(e)}).finally(function(){m.isSearchBarVisible=!!m.query.filter,m.getAbandonedCalls()})}function p(e){m.abandonedCalls=e||{count:0,rows:[]},!1,m.refresh=!0}m.showTooltip=!1,m.refresh=!0,m.disable=[],m.disposition={count:0,rows:[]},m.currentUser=r.getCurrentUser(),m.localizationMap=c,m.pickerModel={dateStart:null},m.queues={},m.abandonedCalls={count:0,rows:[]},m.query={fields:"id,type,calleridnum,calleridname,queue,queuecallerabandonAt,queuecallerexitAt,queuecallerexitreason,assigned,lastAssignedTo,updatedAt,disposition",type:"outbound",queuecallerexitreason:"TIMEOUT,ABANDONED",sort:"-updatedAt",limit:10,page:1},m.clearAll=function(){m.pickerModel={dateStart:null},m.getAbandonedCalls()},m.getAbandonedCalls=function(){if(m.pickerModel.dateStart){var e=moment(m.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();m.query.createdAt={$gte:m.pickerModel.dateStart,$lte:e}}else m.query.createdAt=void 0;m.query.queue=m.query.queue||m.defaultQueues,m.query.offset=(m.query.page-1)*m.query.limit,i.localStorage.setItem("motion2.home.abandoned.bull.calls:"+m.currentUser.id,JSON.stringify({query:_.omit(m.query,"queue")})),m.promise=o.voiceQueueReport.getVoiceQueuesReport(m.query,p).$promise},m.refreshAbandonedCalls=function(){m.showTooltip=!1,m.getAbandonedCalls()},m.onInit=u,m.reserved=function(e,t){e&&(m.disable[e.id]=!0,o.voiceQueueReport.update({id:e.id,lastAssignedTo:e.assigned?m.currentUser.name:null,assigned:e.assigned,disposition:t||null}).$promise.catch(function(e){console.log(e)}).finally(function(){m.disable[e.id]=!1}))},m.onSavevoiceQueueReport=function(e){m.queuesMap&&"outbound"===e.type&&m.queuesMap[e.queue]&&(m.showTooltip=!0)},m.onUpdatevoiceQueueReport=function(e){if(e){var t=_.findIndex(m.abandonedCalls.rows,["id",e.id]);0<=t&&_.merge(m.abandonedCalls.rows[t],e)}},m.call=e.$parent.$parent.$parent.$parent.vm.call,m.transfer=e.$parent.$parent.$parent.$parent.vm.transfer,m.webcall=e.$parent.$parent.$parent.$parent.vm.webcall,m.webtransfer=e.$parent.$parent.$parent.$parent.vm.webtransfer,m.onSearchBarCollapse=function(){m.query.filter=void 0,m.isSearchBarVisible=!1},m.onSearchBarExpand=function(){m.isSearchBarVisible=!0},l.onWithoutApply("voiceQueueReport:save",m.onSavevoiceQueueReport),l.onWithoutApply("voiceQueueReport:update",m.onUpdatevoiceQueueReport),u();var g=!0,v=1;e.$watch("vm_bull.query.filter",function(e,t){g?n(function(){g=!1}):(t||(v=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=v),m.getAbandonedCalls())}),e.$on("$destroy",function(){l.removeAllListeners("voiceQueueReport:save"),l.removeAllListeners("voiceQueueReport:update")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeAbandonedBullController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c){var m=this;function u(){var e=i.localStorage.getItem("motion2.home.abandoned.voice.calls:"+m.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(m.query=_.merge(e.query,_.omit(m.query,["sort","limit","page"])),m.query=_.omit(m.query,"filter")),o.disposition.get({MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null"}).$promise.then(function(e){m.disposition=e?e.rows:[]}).catch(function(e){console.log(e)}),o.user.getQueues({id:r.getCurrentUser().id,fields:"id,name",channel:"voice",type:"inbound",nolimit:!0}).$promise.then(function(e){m.queues=e||{count:0,rows:[]},m.queuesMap=_.mapValues(_.keyBy(m.queues.rows,"name"),"name"),m.defaultQueues=m.queues.rows?_.map(m.queues.rows,"name").join(","):void 0}).catch(function(e){console.error(e)}).finally(function(){m.isSearchBarVisible=!!m.query.filter,m.getAbandonedCalls()})}function p(e){m.abandonedCalls=e||{count:0,rows:[]},!1,m.refresh=!0}m.showTooltip=!1,m.refresh=!0,m.disable=[],m.disposition={count:0,rows:[]},m.currentUser=r.getCurrentUser(),m.localizationMap=c,m.pickerModel={dateStart:null},m.queues={},m.abandonedCalls={count:0,rows:[]},m.query={fields:"id,type,calleridnum,calleridname,queue,queuecallerabandonAt,queuecallerexitAt,queuecallerexitreason,assigned,lastAssignedTo,updatedAt,disposition",type:"inbound",queuecallerexitreason:"TIMEOUT,ABANDONED",sort:"-updatedAt",limit:10,page:1},m.clearAll=function(){m.pickerModel={dateStart:null},m.getAbandonedCalls()},m.getAbandonedCalls=function(){if(m.pickerModel.dateStart){var e=moment(m.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();m.query.createdAt={$gte:m.pickerModel.dateStart,$lte:e}}else m.query.createdAt=void 0;m.query.queue=m.query.queue||m.defaultQueues,m.query.offset=(m.query.page-1)*m.query.limit,i.localStorage.setItem("motion2.home.abandoned.voice.calls:"+m.currentUser.id,JSON.stringify({query:_.omit(m.query,"queue")})),m.promise=o.voiceQueueReport.getVoiceQueuesReport(m.query,p).$promise},m.refreshAbandonedCalls=function(){m.showTooltip=!1,m.getAbandonedCalls()},m.onInit=u,m.reserved=function(e,t){e&&(m.disable[e.id]=!0,o.voiceQueueReport.update({id:e.id,lastAssignedTo:e.assigned?m.currentUser.name:null,assigned:e.assigned,disposition:t||null}).$promise.catch(function(e){console.log(e)}).finally(function(){m.disable[e.id]=!1}))},m.onSavevoiceQueueReport=function(e){m.queuesMap&&"inbound"===e.type&&m.queuesMap[e.queue]&&(m.showTooltip=!0)},m.onUpdatevoiceQueueReport=function(e){if(e){var t=_.findIndex(m.abandonedCalls.rows,["id",e.id]);0<=t&&_.merge(m.abandonedCalls.rows[t],e)}},m.call=e.$parent.$parent.$parent.$parent.vm.call,m.transfer=e.$parent.$parent.$parent.$parent.vm.transfer,m.webcall=e.$parent.$parent.$parent.$parent.vm.webcall,m.webtransfer=e.$parent.$parent.$parent.$parent.vm.webtransfer,m.onSearchBarCollapse=function(){m.query.filter=void 0,m.isSearchBarVisible=!1},m.onSearchBarExpand=function(){m.isSearchBarVisible=!0},l.onWithoutApply("voiceQueueReport:save",m.onSavevoiceQueueReport),l.onWithoutApply("voiceQueueReport:update",m.onUpdatevoiceQueueReport),u();var g=!0,v=1;e.$watch("vm_voice.query.filter",function(e,t){g?n(function(){g=!1}):(t||(v=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=v),m.getAbandonedCalls())}),e.$on("$destroy",function(){l.removeAllListeners("voiceQueueReport:save"),l.removeAllListeners("voiceQueueReport:update")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeAbandonedVoiceController",e)}(),function(){"use strict";function e(t,e,a,n,i,s,o,r,l){var d=this;d.user=s.getCurrentUser(),d.license={},d.plugin={},d.setting={},d.sidebar="dashboard",d.draftManager=l,d.selectedAllText=n.instant("DASHBOARDS.ALL"),d.noResourcesAvailableText=n.instant("DASHBOARDS.NONE"),d.noTagsSelectedText=n.instant("DASHBOARDS.TAGS"),d.navigation=r.getNavigation(),d.addContactTab=t.$parent.vm.addContactTab,d.addInteractionTab=t.$parent.vm.addInteractionTab,d.init=function(e,t){d.license=e,d.setting=t;var n=a.localStorage.getItem("motion2.home:"+d.user.id);if(n){try{n=JSON.parse(n),d.sidebar=n.currentSidebarTab?n.currentSidebarTab:"dashboard"}catch(e){console.error(e),d.sidebar="dashboard"}"mail"===d.sidebar&&d.draftManager.init()}},d.changeSidebarTab=function(e){d.sidebar=e.view,"plugin"===d.sidebar&&(d.plugin=e.stateParams,d.pluginId=e.id,t.$broadcast("pluginUpdated",{plugin:d.plugin}));a.localStorage.setItem("motion2.home:"+d.user.id,JSON.stringify({currentSidebarTab:e.view}))},d.hasPermission=function(e){return s.hasPermission(e)},t.$on("quickFilter-setSelectedText",function(e,t,n){var i={};t.forEach(function(e){var t=e.queryParam,n=e.resources,a=e.key;_.isEmpty(n)?i[a]=d.noResourcesAvailableText:"tag"!==a||t&&!_.isEmpty(t)?t.length===n.length?i[a]=d.selectedAllText:i[a]=_(n).filter(function(e){return _.includes(t,e.id)}).map("name").value().join(", "):i[a]=d.noTagsSelectedText}),n(i)}),t.$watch("vm_home.sidebar",function(e,t){"mail"===e?d.draftManager.init():d.draftManager.drafts={}})}e.$inject=["$scope","$timeout","$window","$translate","api","Auth","socket","msNavigationAgentService","draftManager"],angular.module("app.dashboards").controller("AgentGeneralHomeController",e)}(),function(){"use strict";function e(a,n,e,t,i,s,o,r,l,d,c){var m=this;function u(e){m.chatInteractions=e||{count:0,rows:[]};for(var t=0;t<m.chatInteractions.rows.length;t+=1)g(m.chatInteractions.rows[t])}function p(e,t){e||(m.query.page=1),m.pickerModel.dateStart?m.query.createdAt={$gte:moment(m.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(m.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:m.query.createdAt=void 0,m.query.offset=(m.query.page-1)*m.query.limit;var n=i.localStorage.getItem("motion2.home.chat:"+m.user.id);(n=n?JSON.parse(n):{}).query=m.query,i.localStorage.setItem("motion2.home.chat:"+m.user.id,JSON.stringify(n)),m.promise=o.chatInteraction.get(m.query,u).$promise,a.$emit("quickFilter-setSelectedText",[{queryParam:m.query.ChatWebsiteId,resources:m.chatAccounts.rows,key:"account"},{queryParam:m.query.tag,resources:m.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){m.quickFilterSelectedText[t]=e})})}function g(e){e.Contact?e.contactName=(e.Contact.firstName||"")+" "+(e.Contact.lastName||""):e.contactName=s.instant("DASHBOARDS.UNKNOWN")}m.user=r.getCurrentUser(),m.license={},m.setting={},m.tags={count:0,rows:[]},m.chatInteractions={count:0,rows:[]},m.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null},m.filter={activeConditions:[],fields:[{name:"Id",column:"id",tableAlias:"i",type:"number"},{name:"Contact",column:"ContactId",valueColumn:"id",tableAlias:"i",type:"text"},{name:"Body",column:"plainBody",tableAlias:"me",type:"text"},{name:"Status",column:"closed",tableAlias:"i",type:"select"},{name:"Substatus",column:"substatus",tableAlias:"i",type:"select"},{name:"Agent",column:"UserId",tableAlias:"i",valueColumn:"id",type:"autocomplete"},{name:"Chat Website",column:"ChatWebsiteId",tableAlias:"i",type:"select"},{name:"Tags",column:"TagId",tableAlias:"t",valueColumn:"id",type:"select"},{name:"Start Date",column:"createdAt",tableAlias:"i",type:"date"},{name:"Read",column:"Messages.count",tableAlias:"me",type:"select"}],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Chat Website":t.values=m.chatAccounts.rows;break;case"Agent":o.user.get({role:"agent",fields:"id,name,fullname"}).$promise.then(function(e){t.source=e.rows||[]}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_AGENTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"Read":t.values=[{id:1,name:"Read",value:1},{id:2,name:"Unread",value:0}];break;case"Status":t.values=[{id:1,name:"Opened",value:0},{id:2,name:"Closed",value:1}];break;case"Substatus":t.values=m.subStatuses.rows;break;case"Tags":t.values=m.tags.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(m.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?m.filter.activeConditions.splice(i,1,s):m.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(m.filter.activeConditions)?m.query.advancedFilter=void 0:(m.query.advancedFilter={},_.forEach(m.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:e.condition};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,m.query.advancedFilter[e.column]?_.isArray(m.query.advancedFilter[e.column])?m.query.advancedFilter[e.column].push(t):m.query.advancedFilter[e.column]=[].concat(m.query.advancedFilter[e.column],t):m.query.advancedFilter[e.column]=t})),p()}},m.isAdvancedFilterVisible=!1,m.quickFilterSelectedText={tag:s.instant("DASHBOARDS.TAGS"),account:s.instant("DASHBOARDS.ALL")},m.success=u,m.getChatInteractions=p,m.showChatInteraction=function(e,t){a.$parent.vm.addInteractionTab("chat",t)},m.downloadChatInteraction=function(e,s,t){o.chatInteraction.download({id:s.id,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="chat-interaction"+s.id+".zip",a=new Blob(t,{type:e.type}),i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)d.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"downloadChatInteraction",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getContactLabel=g,m.getUserLabel=function(e){if(e.UserId)return e.UserId===r.getCurrentUser().id?s.instant("DASHBOARDS.ME"):m.usersByKey[e.UserId].fullname+" <"+m.usersByKey[e.UserId].internal+">";return s.instant("DASHBOARDS.NOT_ASSIGNED")},m.getChatWebsiteLabel=function(e){if(e.Account)return e.Account.key;return s.instant("DASHBOARDS.UNKNOWN")},m.clearAll=function(){m.calendarModel={dateStart:null},m.pickerModel={dateStart:null},m.serviceModel={dateStart:null},m.getChatInteractions()},m.clearSelection=function(e){switch(e){case"account":m.query.ChatWebsiteId=[].concat(m.chatAccounts.rows[0].id);break;case"tag":m.query.tag=[]}m.getChatInteractions()},m.selectAll=function(e){switch(e){case"account":m.query.ChatWebsiteId=_.map(m.chatAccounts.rows,"id");break;case"tag":m.query.tag=_.map(m.tags.rows,"id")}m.getChatInteractions()},m.onInit=function(e,t){return m.license=e,m.setting=t,o.user["get"+_.upperFirst("ChatWebsites")]({id:m.user.id,nolimit:!0}).$promise.then(function(e){return m.chatAccounts=e||{count:0,rows:[]},o.tag.get().$promise}).then(function(e){m.tags=e||{count:0,rows:[]}}).then(function(){return o.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){m.usersByKey=_.keyBy(e.rows,"id")}).catch(function(e){console.error(e)}).finally(function(){var e=i.localStorage.getItem("motion2.home.chat:"+m.user.id);if(e)try{(e=JSON.parse(e)).query&&(m.query=_.merge(m.query,e.query),m.query=_.omit(m.query,"filter"),m.query.sort&&0<=m.query.sort.indexOf("lastMessage")&&(m.query=_.omit(m.query,"sort")),m.query.includeAll=!0,m.isSearchBarVisible=!!m.query.filter,m.isAdvancedFilterVisible=!!m.query.advancedFilter),e.filterConditions&&(m.filter.activeConditions=e.filterConditions)}catch(e){console.error(e)}else m.query.ChatWebsiteId=_.map(m.chatAccounts.rows,"id");l.on("chatInteraction:save",m.onChatInteractionSave),l.on("chatInteraction:update",m.onChatInteractionSave),l.on("chatInteractionTags:save",m.onChatInteractionTagsSave),l.on("chatMessage:save",m.onChatMessageSave),l.on("chatMessage:update",m.onChatMessageSave),l.on("user_has_chat_interactions:save",m.onChatInteractionOpen),l.on("user_has_chat_interactions:remove",m.onChatInteractionClose),m.getChatInteractions(m.query.page)})},m.onChatInteractionSave=function(e){if(e){var t=_.find(m.chatInteractions.rows,{id:e.id});if(t){if(t.Users=[],e.closed&&(t.unreadMessages=0),m.query.sort){var n=_.startsWith(m.query.sort,"-")?"desc":"asc";m.chatInteractions.rows=_.orderBy(m.chatInteractions.rows,_.trimStart(m.query.sort,"-"),n)}_.merge(t,_.pick(e,_.keys(t)))}else p(m.query.page)}},m.onChatInteractionTagsSave=function(e){if(e){var t=_.find(m.chatInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},m.onChatMessageSave=function(e){if(e&&!e.secret){var t=_.find(m.chatInteractions.rows,{id:e.ChatInteractionId});if(t){var n=_.find(t.Messages,{id:e.id});n?_.merge(n,_.pick(e,_.keys(n))):(_.isNil(t.Messages)&&(t.Messages={count:0}),e.read||(t.Messages.count+=1))}}},m.onChatInteractionOpen=function(e){var t=_.find(m.chatInteractions.rows,{id:e.ChatInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},m.onChatInteractionClose=function(e){var t=_.find(m.chatInteractions.rows,{id:e.ChatInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},m.onSearchBarCollapse=function(){m.query.advancedFilter=void 0,m.isSearchBarVisible=!1},m.onSearchBarExpand=function(){m.isSearchBarVisible=!0},m.localizationMap=c,m.pickerModel={dateStart:null};var v=!0,h=1;a.$watch("vm.query.filter",function(e,t){v?n(function(){v=!1}):(t||(h=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=h),m.getChatInteractions(m.query.page))}),a.$on("$destroy",function(){l.removeAllListeners("chatMessage:save"),l.removeAllListeners("chatMessage:update"),l.removeAllListeners("chatInteraction:save"),l.removeAllListeners("chatInteractionTags:save"),l.removeAllListeners("chatInteraction:update"),l.removeAllListeners("user_has_chat_interactions:save"),l.removeAllListeners("user_has_chat_interactions:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeChatController",e)}(),function(){"use strict";function e(n,t,e,a,i,s,o,r,l){var d=this;function c(e){d.contacts=e||{count:0,rows:[]}}function m(){r.cmContact.describe({id:d.query.ListId}).$promise.then(function(e){var t=e.toJSON();d.filter.fields=[],Object.entries(t).forEach(function(e){var t=function(e){var t={name:_.startCase(e.displayName),tableAlias:"c"};if(e.custom)switch(e.custom.type){case"text":t.type="text";break;case"select":t.type="select",t.values=_.map(JSON.parse(e.custom.values),function(e,t){return{id:t,name:e.value,value:e.value}});break;case"switch":t.type="select",t.values=[{id:1,name:"Disabled",value:0},{id:2,name:"Enabled",value:1}];break;case"number":t.type="number";break;case"datetime":t.type="date"}else switch(e.columnName){case"dateOfBirth":t.type="date",t.column=e.columnName;break;case"CompanyId":t.name="Company",t.type="select",t.column=e.columnName;break;case"ListId":t.name="List",t.type="select",t.column=e.columnName;break;default:_.includes(e.type.toLowerCase(),"int")?t.type="number":_.includes(e.type.toLowerCase(),"date")?t.type="date":t.type="text",t.column=e.columnName}return t}(e[1]);d.filter.fields.push(t)})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"DESCRIBE_CM_CONTACTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})}),d.query.offset=(d.query.page-1)*d.query.limit,s.localStorage.setItem("motion2.home.contacts:"+d.currentUser.id,JSON.stringify({query:d.query,filterConditions:d.filter.activeConditions})),d.promise=r.cmContact.get(d.query,c).$promise,t.$emit("quickFilter-setSelectedText",[{queryParam:d.query.ListId,resources:d.lists.rows,key:"list"},{queryParam:d.query.tag,resources:d.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){d.quickFilterSelectedText[t]=e})})}d.currentUser=o.getCurrentUser(),d.isAdvancedFilterVisible=!1,d.quickFilterSelectedText={tag:e.instant("DASHBOARDS.TAGS"),list:e.instant("DASHBOARDS.ALL")},d.lists={},d.contacts={count:0,rows:[]},d.tags={count:0,rows:[]},d.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1},d.filter={activeConditions:[],fields:[],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Company":r.cmCompany.get().$promise.then(function(e){t.values=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_COMPANIES",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"List":t.values=d.lists.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(d.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?d.filter.activeConditions.splice(i,1,s):d.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(d.filter.activeConditions)?d.query.advancedFilter=void 0:(d.query.advancedFilter={},_.forEach(d.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:e.condition.value};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,d.query.advancedFilter[e.column]?_.isArray(d.query.advancedFilter[e.column])?d.query.advancedFilter[e.column].push(t):d.query.advancedFilter[e.column]=[].concat(d.query.advancedFilter[e.column],t):d.query.advancedFilter[e.column]=t})),m()}},d.getContacts=m,d.refreshContacts=function(){d.getContacts()},d.mergeContact=function(e,t){i.show({controller:"MergeContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/merge/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:t.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:d.currentUser.id,fields:"id,name"})}]},locals:{contacts:d.contacts.rows}})},d.duplicateContact=function(e,t){i.show({controller:"DuplicateContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:t.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:d.currentUser.id,fields:"id,name"})}]},locals:{contacts:d.contacts.rows}})},d.openContact=function(e){return r.cmContact.get({id:e}).$promise.then(function(e){t.$parent.vm.addContactTab(e)})},d.call=t.$parent.vm.call,d.clearSelection=function(e){switch(e){case"list":d.query.ListId=[].concat(d.lists.rows[0].id);break;case"tag":d.query.tag=[]}d.getContacts()},d.selectAll=function(e){switch(e){case"list":d.query.ListId=_.map(d.lists.rows,"id");break;case"tag":d.query.tag=_.map(d.tags.rows,"id")}d.getContacts()},d.onInit=function(){r.user.getLists({id:d.currentUser.id,fields:"id,name,dialPrefix",sort:"name",nolimit:!0}).$promise.then(function(e){return d.lists=e||{count:0,rows:[]},d.listsMap=_.keyBy(d.lists.rows,"id"),r.tag.get().$promise}).then(function(e){d.tags=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){var e=s.localStorage.getItem("motion2.home.contacts:"+d.currentUser.id);e?((e=JSON.parse(e))&&e.query&&(d.query=_.merge(d.query,e.query),d.query=_.omit(d.query,"filter"),d.query.advancedFilter&&_.mapKeys(d.query.advancedFilter,function(e,t){d.filter.activeConditions.push()})),e.filterConditions&&(d.filter.activeConditions=e.filterConditions)):d.query.ListId=_.isEmpty(d.lists.rows)?"null":_.map(d.lists.rows,"id"),d.isSearchBarVisible=!!d.query.filter,d.isAdvancedFilterVisible=!!d.query.advancedFilter,d.getContacts()})},d.onSearchBarCollapse=function(){d.query.advancedFilter=void 0,d.isSearchBarVisible=!1},d.onSearchBarExpand=function(){d.isSearchBarVisible=!0};var u=!0,p=1;t.$watch("vm.query.filter",function(e,t){u?a(function(){u=!1}):(t||(p=d.query.page),e!==t&&(d.query.page=1),e||(d.query.page=p),d.getContacts())})}e.$inject=["$document","$scope","$translate","$timeout","$mdDialog","$window","Auth","api","toasty"],angular.module("app.dashboards").controller("AgentHomeContactsController",e)}(),function(){"use strict";function e(e,t){var n=t(function(){},999);e.$on("$destroy",function(){n&&(t.cancel(n),n=null)})}e.$inject=["$scope","$interval"],angular.module("app.dashboards").controller("AgentHomeDashboardController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["type","waiting","dialMethod","dialActive"];function u(e){c.voiceQueuesTotal=e.count?e.count:0,c.voiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.voiceQueues,function(e,t){c.rpcVoiceQueues[t]&&(c.voiceQueues[t].waiting=c.rpcVoiceQueues[t].waiting||0)})}c.voiceQueues={},c.voiceQueuesTotal=0,c.rpcVoiceQueues={},c.getVoiceQueues={},c.rpcVoiceQueuesChannels={},c.addVoiceQueuesChannels={},c.deleteVoiceQueuesChannels=[],c.load=!0,c.query={id:r.getCurrentUser().id,fields:"id,name,type,dialMethod,dialActive",channel:"voice",type:"outbound",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=u,c.getVoiceQueues=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,u).$promise},c.getSize=function(e){return _.size(e)},c.onSaveQueue=function(e){c.voiceQueues[e.id]&&c.rpcVoiceQueues[e.id]&&(c.rpcVoiceQueues[e.id]=e,_.merge(c.voiceQueues[e.id],_.pick(e,m)))},c.onSaveChannel=function(e){"outbound"===e.type&&(e.queuecallerleaveAt?(delete c.rpcVoiceQueuesChannels[e.uniqueid],c.load&&c.deleteVoiceQueuesChannels.push(e.uniqueid)):(c.rpcVoiceQueuesChannels[e.uniqueid]=e,c.load&&(c.addVoiceQueuesChannels[e.uniqueid]=e)))},c.onUserVoiceQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getVoiceQueues()},c.onSaveVoiceQueue=function(e){_.isNil(e)||(c.rpcVoiceQueues[e.id]=_.pick(e,m))},c.onUpdateVoiceQueue=function(e){_.isNil(e)||(c.rpcVoiceQueues[e.id]&&_.merge(c.rpcVoiceQueues[e.id],_.pick(e,m)),c.voiceQueues[e.id]&&_.merge(c.voiceQueues[e.id],_.pick(e,m)))},c.onRemoveVoiceQueue=function(e){_.isNil(e)||(delete c.rpcVoiceQueues[e.id],delete c.voiceQueues[e.id])},l.onWithoutApply("voice_queue:save",c.onSaveQueue),l.onWithoutApply("voice_queue_channel:save",c.onSaveChannel),l.onWithoutApply("userVoiceQueue:save",c.onUserVoiceQueue),l.onWithoutApply("userVoiceQueue:remove",c.onUserVoiceQueue),l.onWithoutApply("voiceQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("voiceQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("voiceQueue:update",c.onUpdateVoiceQueue),o.rpc.getVoiceQueues().$promise.then(function(e){return c.rpcVoiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},o.rpc.getVoiceQueuesChannels().$promise}).then(function(e){c.rpcVoiceQueuesChannels=e?_.keyBy(e.rows?_.filter(e.rows,{type:"outbound",queuecallerleaveAt:null}):[],"uniqueid"):{}}).catch(function(e){console.error(e)}).finally(function(){_.merge(c.rpcVoiceQueuesChannels,c.addVoiceQueuesChannels);for(var e=0;e<c.deleteVoiceQueuesChannels.length;e+=1)delete c.rpcVoiceQueuesChannels[c.deleteVoiceQueuesChannels[e]];c.load=!1,c.addVoiceQueuesChannels={},c.deleteVoiceQueuesChannels=[],c.getVoiceQueues()});var p=!0,g=1;e.$watch("vm_dc.query.filter",function(e,t){p?n(function(){p=!1}):(t||(g=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=g),c.getVoiceQueues())}),e.$on("$destroy",function(){l.removeAllListeners("voice_queue:save"),l.removeAllListeners("voice_queue_channel:save"),l.removeAllListeners("userVoiceQueue:save"),l.removeAllListeners("userVoiceQueue:remove"),l.removeAllListeners("voiceQueue:save"),l.removeAllListeners("voiceQueue:update"),l.removeAllListeners("voiceQueue:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardBullController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["id","name","mapAgentsId","waiting"],u=!0;function p(){var e=(c.queryChannels.page-1)*c.queryChannels.limit;c.paginatedInteractions=_.orderBy(c.rpcChatQueuesWaitingInteractions,["joinAt"],["desc"]),c.interactions=_.drop(c.paginatedInteractions,e).slice(0,c.queryChannels.limit)}function g(e){c.chatQueuesTotal=e.count?e.count:0,c.chatQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.chatQueues,function(e,t){c.rpcChatQueues[t]&&(c.chatQueues[t].waiting=c.rpcChatQueues[t].waiting||0)})}function v(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,g).$promise}c.chatQueues={},c.chatQueuesTotal=0,c.rpcChatQueues={},c.paginatedInteractions=[],c.deleteChatQueuesWaitingInteractions=[],c.rpcChatQueuesWaitingInteractions={},c.query={id:r.getCurrentUser().id,channel:"chat",fields:"id,name,mapAgentsId,waiting",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=g,c.getChatQueues=v,c.getSize=function(e){return _.size(e)},c.getColorByChannel=function(e){switch(e){case"chat":return"green-A700-bg";case"mail":return"teal-bg";case"sms":return"orange-bg";case"openchannel":return"amber-A200-bg";case"fax":return"blue-grey-A200-bg";default:return"white-bg"}},c.paginate=p,c.onSaveQueue=function(e){c.chatQueues[e.id]&&c.rpcChatQueues[e.id]&&(_.merge(c.rpcChatQueues[e.id],_.pick(e,m)),_.merge(c.chatQueues[e.id],_.pick(e,m)))},c.onSaveChatQueue=function(e){_.isNil(e)||(c.rpcChatQueues[e.id]=_.pick(e,m))},c.onUpdateChatQueue=function(e){_.isNil(e)||(c.rpcChatQueues[e.id]&&_.merge(c.rpcChatQueues[e.id],_.pick(e,m)),c.chatQueues[e.id]&&_.merge(c.chatQueues[e.id],_.pick(e,m)))},c.onRemoveChatQueue=function(e){_.isNil(e)||(delete c.rpcChatQueues[e.id],delete c.chatQueues[e.id])},c.onSaveUserChatQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getChatQueues()},c.onRemoveUserChatQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getChatQueues()},c.onSaveChatQueueChannel=function(e){c.chatQueues[e.queue_id]&&(c.rpcChatQueuesWaitingInteractions[e.id]=e,p())},c.onRemoveChatQueueChannel=function(e){delete c.rpcChatQueuesWaitingInteractions[e.id],u&&c.deleteChatQueuesWaitingInteractions.push(e.id);p()},l.onWithoutApply("chat_queue:save",c.onSaveQueue),l.onWithoutApply("chatQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("chatQueue:update",c.onUpdateVoiceQueue),l.onWithoutApply("chatQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("userChatQueue:save",c.onSaveUserChatQueue),l.onWithoutApply("userChatQueue:remove",c.onRemoveUserChatQueue),l.onWithoutApply("chat_queue_waiting_interaction:save",c.onSaveChatQueueChannel),l.onWithoutApply("chat_queue_waiting_interaction:remove",c.onRemoveChatQueueChannel),o.rpc.getChatQueues().$promise.then(function(e){c.rpcChatQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return o.user.getQueues({id:r.getCurrentUser().id,channel:"chat"}).$promise}).then(function(e){return c.myQueues=e.rows,o.rpc.getChatQueuesWaitingInteractions().$promise}).then(function(e){var t=_.filter(e.rows,function(e){return _.includes(c.myQueues,{id:e.queue_id})});e.rows=t,e.count=t.length,_.merge(c.rpcChatQueuesWaitingInteractions,e?_.keyBy(e.rows?e.rows:[],"id"):{})}).catch(function(e){console.error(e)}).finally(function(){for(var e=0;e<c.deleteChatQueuesWaitingInteractions.length;e+=1)delete c.rpcChatQueuesWaitingInteractions[c.deleteChatQueuesWaitingInteractions[e]];u=!1,c.deleteChatQueuesWaitingInteractions=[],v(),p()});var h=!0,f=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=f),c.getChatQueues())}),e.$on("$destroy",function(){l.removeAllListeners("chat_queue:save"),l.removeAllListeners("chatQueue:save"),l.removeAllListeners("chatQueue:update"),l.removeAllListeners("chatQueue:remove"),l.removeAllListeners("userChatQueue:save"),l.removeAllListeners("userChatQueue:remove"),l.removeAllListeners("chat_queue_waiting_interaction:save"),l.removeAllListeners("chat_queue_waiting_interaction:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardMultiChannelChatController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["id","name","mapAgentsId","waiting"],u=!0;function p(){var e=(c.queryChannels.page-1)*c.queryChannels.limit;c.paginatedInteractions=_.orderBy(c.rpcFaxQueuesWaitingInteractions,["joinAt"],["desc"]),c.interactions=_.drop(c.paginatedInteractions,e).slice(0,c.queryChannels.limit)}function g(e){c.faxQueuesTotal=e.count?e.count:0,c.faxQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.faxQueues,function(e,t){c.rpcFaxQueues[t]&&(c.faxQueues[t].waiting=c.rpcFaxQueues[t].waiting||0)})}function v(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,g).$promise}c.faxQueues={},c.faxQueuesTotal=0,c.rpcFaxQueues={},c.paginatedInteractions=[],c.deleteFaxQueuesWaitingInteractions=[],c.rpcFaxQueuesWaitingInteractions={},c.query={id:r.getCurrentUser().id,channel:"fax",fields:"id,name,mapAgentsId,waiting",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=g,c.getFaxQueues=v,c.getSize=function(e){return _.size(e)},c.getColorByChannel=function(e){switch(e){case"chat":return"green-A700-bg";case"mail":return"teal-bg";case"sms":return"orange-bg";case"openchannel":return"amber-A200-bg";case"fax":return"blue-grey-A200-bg";default:return"white-bg"}},c.paginate=p,c.onSaveQueue=function(e){c.faxQueues[e.id]&&c.rpcFaxQueues[e.id]&&(_.merge(c.rpcFaxQueues[e.id],_.pick(e,m)),_.merge(c.faxQueues[e.id],_.pick(e,m)))},c.onSaveFaxQueue=function(e){_.isNil(e)||(c.rpcFaxQueues[e.id]=_.pick(e,m))},c.onUpdateFaxQueue=function(e){_.isNil(e)||(c.rpcFaxQueues[e.id]&&_.merge(c.rpcFaxQueues[e.id],_.pick(e,m)),c.faxQueues[e.id]&&_.merge(c.faxQueues[e.id],_.pick(e,m)))},c.onRemoveFaxQueue=function(e){_.isNil(e)||(delete c.rpcFaxQueues[e.id],delete c.faxQueues[e.id])},c.onSaveUserFaxQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getFaxQueues()},c.onRemoveUserFaxQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getFaxQueues()},c.onSaveFaxQueueChannel=function(e){c.faxQueues[e.queue_id]&&(c.rpcFaxQueuesWaitingInteractions[e.id]=e,p())},c.onRemoveFaxQueueChannel=function(e){delete c.rpcFaxQueuesWaitingInteractions[e.id],u&&c.deleteFaxQueuesWaitingInteractions.push(e.id);p()},l.onWithoutApply("fax_queue:save",c.onSaveQueue),l.onWithoutApply("faxQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("faxQueue:update",c.onUpdateVoiceQueue),l.onWithoutApply("faxQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("userFaxQueue:save",c.onSaveUserFaxQueue),l.onWithoutApply("userFaxQueue:remove",c.onRemoveUserFaxQueue),l.onWithoutApply("fax_queue_waiting_interaction:save",c.onSaveFaxQueueChannel),l.onWithoutApply("fax_queue_waiting_interaction:remove",c.onRemoveFaxQueueChannel),o.rpc.getFaxQueues().$promise.then(function(e){c.rpcFaxQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return o.user.getQueues({id:r.getCurrentUser().id,channel:"fax"}).$promise}).then(function(e){return c.myQueues=e.rows,o.rpc.getFaxQueuesWaitingInteractions().$promise}).then(function(e){var t=_.filter(e.rows,function(e){return _.includes(c.myQueues,{id:e.queue_id})});e.rows=t,e.count=t.length,_.merge(c.rpcFaxQueuesWaitingInteractions,e?_.keyBy(e.rows?e.rows:[],"id"):{})}).catch(function(e){console.error(e)}).finally(function(){for(var e=0;e<c.deleteFaxQueuesWaitingInteractions.length;e+=1)delete c.rpcFaxQueuesWaitingInteractions[c.deleteFaxQueuesWaitingInteractions[e]];u=!1,c.deleteFaxQueuesWaitingInteractions=[],v(),p()});var h=!0,f=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=f),c.getFaxQueues())}),e.$on("$destroy",function(){l.removeAllListeners("fax_queue:save"),l.removeAllListeners("faxQueue:save"),l.removeAllListeners("faxQueue:update"),l.removeAllListeners("faxQueue:remove"),l.removeAllListeners("userFaxQueue:save"),l.removeAllListeners("userFaxQueue:remove"),l.removeAllListeners("fax_queue_waiting_interaction:save"),l.removeAllListeners("fax_queue_waiting_interaction:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardMultiChannelFaxController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["id","name","mapAgentsId","waiting"],u=!0;function p(){var e=(c.queryChannels.page-1)*c.queryChannels.limit;c.paginatedInteractions=_.orderBy(c.rpcMailQueuesWaitingInteractions,["joinAt"],["desc"]),c.interactions=_.drop(c.paginatedInteractions,e).slice(0,c.queryChannels.limit)}function g(e){c.mailQueuesTotal=e.count?e.count:0,c.mailQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.mailQueues,function(e,t){c.rpcMailQueues[t]&&(c.mailQueues[t].waiting=c.rpcMailQueues[t].waiting||0)})}function v(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,g).$promise}c.mailQueues={},c.mailQueuesTotal=0,c.rpcMailQueues={},c.paginatedInteractions=[],c.deleteMailQueuesWaitingInteractions=[],c.rpcMailQueuesWaitingInteractions={},c.query={id:r.getCurrentUser().id,channel:"mail",fields:"id,name,mapAgentsId,waiting",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=g,c.getMailQueues=v,c.getSize=function(e){return _.size(e)},c.getColorByChannel=function(e){switch(e){case"chat":return"green-A700-bg";case"mail":return"teal-bg";case"sms":return"orange-bg";case"openchannel":return"amber-A200-bg";case"fax":return"blue-grey-A200-bg";default:return"white-bg"}},c.paginate=p,c.onSaveQueue=function(e){c.mailQueues[e.id]&&c.rpcMailQueues[e.id]&&(_.merge(c.rpcMailQueues[e.id],_.pick(e,m)),_.merge(c.mailQueues[e.id],_.pick(e,m)))},c.onSaveMailQueue=function(e){_.isNil(e)||(c.rpcMailQueues[e.id]=_.pick(e,m))},c.onUpdateMailQueue=function(e){_.isNil(e)||(c.rpcMailQueues[e.id]&&_.merge(c.rpcMailQueues[e.id],_.pick(e,m)),c.mailQueues[e.id]&&_.merge(c.mailQueues[e.id],_.pick(e,m)))},c.onRemoveMailQueue=function(e){_.isNil(e)||(delete c.rpcMailQueues[e.id],delete c.mailQueues[e.id])},c.onSaveUserMailQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getMailQueues()},c.onRemoveUserMailQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getMailQueues()},c.onSaveMailQueueChannel=function(e){c.mailQueues[e.queue_id]&&(c.rpcMailQueuesWaitingInteractions[e.id]=e,p())},c.onRemoveMailQueueChannel=function(e){delete c.rpcMailQueuesWaitingInteractions[e.id],u&&c.deleteMailQueuesWaitingInteractions.push(e.id);p()},l.onWithoutApply("mail_queue:save",c.onSaveQueue),l.onWithoutApply("mailQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("mailQueue:update",c.onUpdateVoiceQueue),l.onWithoutApply("mailQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("userMailQueue:save",c.onSaveUserMailQueue),l.onWithoutApply("userMailQueue:remove",c.onRemoveUserMailQueue),l.onWithoutApply("mail_queue_waiting_interaction:save",c.onSaveMailQueueChannel),l.onWithoutApply("mail_queue_waiting_interaction:remove",c.onRemoveMailQueueChannel),o.rpc.getMailQueues().$promise.then(function(e){c.rpcMailQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return o.user.getQueues({id:r.getCurrentUser().id,channel:"mail"}).$promise}).then(function(e){return c.myQueues=e.rows,o.rpc.getMailQueuesWaitingInteractions().$promise}).then(function(e){var t=_.filter(e.rows,function(e){return _.includes(c.myQueues,{id:e.queue_id})});e.rows=t,e.count=t.length,_.merge(c.rpcMailQueuesWaitingInteractions,e?_.keyBy(e.rows?e.rows:[],"id"):{})}).catch(function(e){console.error(e)}).finally(function(){for(var e=0;e<c.deleteMailQueuesWaitingInteractions.length;e+=1)delete c.rpcMailQueuesWaitingInteractions[c.deleteMailQueuesWaitingInteractions[e]];u=!1,c.deleteMailQueuesWaitingInteractions=[],v(),p()});var h=!0,f=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=f),c.getMailQueues())}),e.$on("$destroy",function(){l.removeAllListeners("mail_queue:save"),l.removeAllListeners("mailQueue:save"),l.removeAllListeners("mailQueue:update"),l.removeAllListeners("mailQueue:remove"),l.removeAllListeners("userMailQueue:save"),l.removeAllListeners("userMailQueue:remove"),l.removeAllListeners("mail_queue_waiting_interaction:save"),l.removeAllListeners("mail_queue_waiting_interaction:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardMultiChannelMailController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["id","name","mapAgentsId","waiting"],u=!0;function p(){var e=(c.queryChannels.page-1)*c.queryChannels.limit;c.paginatedInteractions=_.orderBy(c.rpcOpenchannelQueuesWaitingInteractions,["joinAt"],["desc"]),c.interactions=_.drop(c.paginatedInteractions,e).slice(0,c.queryChannels.limit)}function g(e){c.openchannelQueuesTotal=e.count?e.count:0,c.openchannelQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.openchannelQueues,function(e,t){c.rpcOpenchannelQueues[t]&&(c.openchannelQueues[t].waiting=c.rpcOpenchannelQueues[t].waiting||0)})}function v(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,g).$promise}c.openchannelQueues={},c.openchannelQueuesTotal=0,c.rpcOpenchannelQueues={},c.paginatedInteractions=[],c.deleteOpenchannelQueuesWaitingInteractions=[],c.rpcOpenchannelQueuesWaitingInteractions={},c.query={id:r.getCurrentUser().id,channel:"openchannel",fields:"id,name,mapAgentsId,waiting",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=g,c.getOpenchannelQueues=v,c.getSize=function(e){return _.size(e)},c.getColorByChannel=function(e){switch(e){case"chat":return"green-A700-bg";case"mail":return"teal-bg";case"sms":return"orange-bg";case"openchannel":return"amber-A200-bg";case"fax":return"blue-grey-A200-bg";default:return"white-bg"}},c.paginate=p,c.onSaveQueue=function(e){c.openchannelQueues[e.id]&&c.rpcOpenchannelQueues[e.id]&&(_.merge(c.rpcOpenchannelQueues[e.id],_.pick(e,m)),_.merge(c.openchannelQueues[e.id],_.pick(e,m)))},c.onSaveOpenchannelQueue=function(e){_.isNil(e)||(c.rpcOpenchannelQueues[e.id]=_.pick(e,m))},c.onUpdateOpenchannelQueue=function(e){_.isNil(e)||(c.rpcOpenchannelQueues[e.id]&&_.merge(c.rpcOpenchannelQueues[e.id],_.pick(e,m)),c.openchannelQueues[e.id]&&_.merge(c.openchannelQueues[e.id],_.pick(e,m)))},c.onRemoveOpenchannelQueue=function(e){_.isNil(e)||(delete c.rpcOpenchannelQueues[e.id],delete c.openchannelQueues[e.id])},c.onSaveUserOpenchannelQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getOpenchannelQueues()},c.onRemoveUserOpenchannelQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getOpenchannelQueues()},c.onSaveOpenchannelQueueChannel=function(e){c.openchannelQueues[e.queue_id]&&(c.rpcOpenchannelQueuesWaitingInteractions[e.id]=e,p())},c.onRemoveOpenchannelQueueChannel=function(e){delete c.rpcOpenchannelQueuesWaitingInteractions[e.id],u&&c.deleteOpenchannelQueuesWaitingInteractions.push(e.id);p()},l.onWithoutApply("openchannel_queue:save",c.onSaveQueue),l.onWithoutApply("openchannelQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("openchannelQueue:update",c.onUpdateVoiceQueue),l.onWithoutApply("openchannelQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("userOpenchannelQueue:save",c.onSaveUserOpenchannelQueue),l.onWithoutApply("userOpenchannelQueue:remove",c.onRemoveUserOpenchannelQueue),l.onWithoutApply("openchannel_queue_waiting_interaction:save",c.onSaveOpenchannelQueueChannel),l.onWithoutApply("openchannel_queue_waiting_interaction:remove",c.onRemoveOpenchannelQueueChannel),o.rpc.getOpenchannelQueues().$promise.then(function(e){c.rpcOpenchannelQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return o.user.getQueues({id:r.getCurrentUser().id,channel:"openchannel"}).$promise}).then(function(e){return c.myQueues=e.rows,o.rpc.getOpenchannelQueuesWaitingInteractions().$promise}).then(function(e){var t=_.filter(e.rows,function(e){return _.includes(c.myQueues,{id:e.queue_id})});e.rows=t,e.count=t.length,_.merge(c.rpcOpenchannelQueuesWaitingInteractions,e?_.keyBy(e.rows?e.rows:[],"id"):{})}).catch(function(e){console.error(e)}).finally(function(){for(var e=0;e<c.deleteOpenchannelQueuesWaitingInteractions.length;e+=1)delete c.rpcOpenchannelQueuesWaitingInteractions[c.deleteOpenchannelQueuesWaitingInteractions[e]];u=!1,c.deleteOpenchannelQueuesWaitingInteractions=[],v(),p()});var h=!0,f=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=f),c.getOpenchannelQueues())}),e.$on("$destroy",function(){l.removeAllListeners("openchannel_queue:save"),l.removeAllListeners("openchannelQueue:save"),l.removeAllListeners("openchannelQueue:update"),l.removeAllListeners("openchannelQueue:remove"),l.removeAllListeners("userOpenchannelQueue:save"),l.removeAllListeners("userOpenchannelQueue:remove"),l.removeAllListeners("openchannel_queue_waiting_interaction:save"),l.removeAllListeners("openchannel_queue_waiting_interaction:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardMultiChannelOpenchannelController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["id","name","mapAgentsId","waiting"],u=!0;function p(){var e=(c.queryChannels.page-1)*c.queryChannels.limit;c.paginatedInteractions=_.orderBy(c.rpcSmsQueuesWaitingInteractions,["joinAt"],["desc"]),c.interactions=_.drop(c.paginatedInteractions,e).slice(0,c.queryChannels.limit)}function g(e){c.smsQueuesTotal=e.count?e.count:0,c.smsQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.smsQueues,function(e,t){c.rpcSmsQueues[t]&&(c.smsQueues[t].waiting=c.rpcSmsQueues[t].waiting||0)})}function v(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,g).$promise}c.smsQueues={},c.smsQueuesTotal=0,c.rpcSmsQueues={},c.paginatedInteractions=[],c.deleteSmsQueuesWaitingInteractions=[],c.rpcSmsQueuesWaitingInteractions={},c.query={id:r.getCurrentUser().id,channel:"sms",fields:"id,name,mapAgentsId,waiting",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=g,c.getSmsQueues=v,c.getSize=function(e){return _.size(e)},c.getColorByChannel=function(e){switch(e){case"chat":return"green-A700-bg";case"mail":return"teal-bg";case"sms":return"orange-bg";case"openchannel":return"amber-A200-bg";case"fax":return"blue-grey-A200-bg";default:return"white-bg"}},c.paginate=p,c.onSaveQueue=function(e){c.smsQueues[e.id]&&c.rpcSmsQueues[e.id]&&(_.merge(c.rpcSmsQueues[e.id],_.pick(e,m)),_.merge(c.smsQueues[e.id],_.pick(e,m)))},c.onSaveSmsQueue=function(e){_.isNil(e)||(c.rpcSmsQueues[e.id]=_.pick(e,m))},c.onUpdateSmsQueue=function(e){_.isNil(e)||(c.rpcSmsQueues[e.id]&&_.merge(c.rpcSmsQueues[e.id],_.pick(e,m)),c.smsQueues[e.id]&&_.merge(c.smsQueues[e.id],_.pick(e,m)))},c.onRemoveSmsQueue=function(e){_.isNil(e)||(delete c.rpcSmsQueues[e.id],delete c.smsQueues[e.id])},c.onSaveUserSmsQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getSmsQueues()},c.onRemoveUserSmsQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getSmsQueues()},c.onSaveSmsQueueChannel=function(e){c.smsQueues[e.queue_id]&&(c.rpcSmsQueuesWaitingInteractions[e.id]=e,p())},c.onRemoveSmsQueueChannel=function(e){delete c.rpcSmsQueuesWaitingInteractions[e.id],u&&c.deleteSmsQueuesWaitingInteractions.push(e.id);p()},l.onWithoutApply("sms_queue:save",c.onSaveQueue),l.onWithoutApply("smsQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("smsQueue:update",c.onUpdateVoiceQueue),l.onWithoutApply("smsQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("userSmsQueue:save",c.onSaveUserSmsQueue),l.onWithoutApply("userSmsQueue:remove",c.onRemoveUserSmsQueue),l.onWithoutApply("sms_queue_waiting_interaction:save",c.onSaveSmsQueueChannel),l.onWithoutApply("sms_queue_waiting_interaction:remove",c.onRemoveSmsQueueChannel),o.rpc.getSmsQueues().$promise.then(function(e){c.rpcSmsQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}).then(function(e){return o.user.getQueues({id:r.getCurrentUser().id,channel:"sms"}).$promise}).then(function(e){return c.myQueues=e.rows,o.rpc.getSmsQueuesWaitingInteractions().$promise}).then(function(e){var t=_.filter(e.rows,function(e){return _.includes(c.myQueues,{id:e.queue_id})});e.rows=t,e.count=t.length,_.merge(c.rpcSmsQueuesWaitingInteractions,e?_.keyBy(e.rows?e.rows:[],"id"):{})}).catch(function(e){console.error(e)}).finally(function(){for(var e=0;e<c.deleteSmsQueuesWaitingInteractions.length;e+=1)delete c.rpcSmsQueuesWaitingInteractions[c.deleteSmsQueuesWaitingInteractions[e]];u=!1,c.deleteSmsQueuesWaitingInteractions=[],v(),p()});var h=!0,f=1;e.$watch("vm_dc.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=f),c.getSmsQueues())}),e.$on("$destroy",function(){l.removeAllListeners("sms_queue:save"),l.removeAllListeners("smsQueue:save"),l.removeAllListeners("smsQueue:update"),l.removeAllListeners("smsQueue:remove"),l.removeAllListeners("userSmsQueue:save"),l.removeAllListeners("userSmsQueue:remove"),l.removeAllListeners("sms_queue_waiting_interaction:save"),l.removeAllListeners("sms_queue_waiting_interaction:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardMultiChannelSmsController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["type","waiting","dialMethod","dialActive"];function u(e){c.voiceQueuesTotal=e.count?e.count:0,c.voiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{},_.forIn(c.voiceQueues,function(e,t){c.rpcVoiceQueues[t]&&(c.voiceQueues[t].waiting=c.rpcVoiceQueues[t].waiting||0)})}c.voiceQueues={},c.voiceQueuesTotal=0,c.rpcVoiceQueues={},c.getVoiceQueues={},c.rpcVoiceQueuesChannels={},c.addVoiceQueuesChannels={},c.deleteVoiceQueuesChannels=[],c.load=!0,c.query={id:r.getCurrentUser().id,fields:"id,name,type,dialMethod,dialActive",channel:"voice",type:"inbound",limit:10,page:1},c.queryChannels={limit:10,page:1},c.success=u,c.getVoiceQueues=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=o.user.getQueues(c.query,u).$promise},c.getSize=function(e){return _.size(e)},c.onSaveQueue=function(e){c.voiceQueues[e.id]&&c.rpcVoiceQueues[e.id]&&(c.rpcVoiceQueues[e.id]=e,_.merge(c.voiceQueues[e.id],_.pick(e,m)))},c.onSaveChannel=function(e){"inbound"===e.type&&(e.queuecallerleaveAt?(delete c.rpcVoiceQueuesChannels[e.uniqueid],c.load&&c.deleteVoiceQueuesChannels.push(e.uniqueid)):(c.rpcVoiceQueuesChannels[e.uniqueid]=e,c.load&&(c.addVoiceQueuesChannels[e.uniqueid]=e)))},c.onUserVoiceQueue=function(e){_.toInteger(e.UserId)===r.getCurrentUser().id&&c.getVoiceQueues()},c.onSaveVoiceQueue=function(e){_.isNil(e)||(c.rpcVoiceQueues[e.id]=_.pick(e,m))},c.onUpdateVoiceQueue=function(e){_.isNil(e)||(c.rpcVoiceQueues[e.id]&&_.merge(c.rpcVoiceQueues[e.id],_.pick(e,m)),c.voiceQueues[e.id]&&_.merge(c.voiceQueues[e.id],_.pick(e,m)))},c.onRemoveVoiceQueue=function(e){_.isNil(e)||(delete c.rpcVoiceQueues[e.id],delete c.voiceQueues[e.id])},l.onWithoutApply("voice_queue:save",c.onSaveQueue),l.onWithoutApply("voice_queue_channel:save",c.onSaveChannel),l.onWithoutApply("userVoiceQueue:save",c.onUserVoiceQueue),l.onWithoutApply("userVoiceQueue:remove",c.onUserVoiceQueue),l.onWithoutApply("voiceQueue:save",c.onSaveVoiceQueue),l.onWithoutApply("voiceQueue:remove",c.onRemoveVoiceQueue),l.onWithoutApply("voiceQueue:update",c.onUpdateVoiceQueue),o.user.getQueues(c.query).$promise.then(function(e){return c.myQueues=e,o.rpc.getVoiceQueues().$promise}).then(function(e){for(var t=e.rows,n=_.keyBy(t,"id"),a=0;a<c.myQueues.count;a++){var i=c.myQueues.rows[a];c.rpcVoiceQueues[i.id]=n[i.id]}return o.rpc.getVoiceQueuesChannels().$promise}).then(function(e){c.rpcVoiceQueuesChannels=e?_.keyBy(e.rows?_.filter(e.rows,function(e){return!("inbound"!==e.type||e.queuecallerleaveAt||!_.find(c.myQueues.rows,{name:e.queue}))}):[],"uniqueid"):{}}).catch(function(e){console.error(e)}).finally(function(){_.merge(c.rpcVoiceQueuesChannels,c.addVoiceQueuesChannels);for(var e=0;e<c.deleteVoiceQueuesChannels.length;e+=1)delete c.rpcVoiceQueuesChannels[c.deleteVoiceQueuesChannels[e]];c.load=!1,c.addVoiceQueuesChannels={},c.deleteVoiceQueuesChannels=[],c.getVoiceQueues()});var p=!0,g=1;e.$watch("vm_dc.query.filter",function(e,t){p?n(function(){p=!1}):(t||(g=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=g),c.getVoiceQueues())}),e.$on("$destroy",function(){l.removeAllListeners("voice_queue:save"),l.removeAllListeners("voice_queue_channel:save"),l.removeAllListeners("userVoiceQueue:save"),l.removeAllListeners("userVoiceQueue:remove"),l.removeAllListeners("voiceQueue:save"),l.removeAllListeners("voiceQueue:update"),l.removeAllListeners("voiceQueue:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty"],angular.module("app.dashboards").controller("AgentHomeDashboardVoiceController",e)}(),function(){"use strict";function e(i,n,t,s,a,o,r,l,d,c,e,m){var u=this;function p(e){u.faxInteractions=e||{count:0,rows:[]};for(var t=0;t<u.faxInteractions.rows.length;t+=1)v(u.faxInteractions.rows[t])}function g(e,t){e||(u.query.page=1),u.pickerModel.dateStart?u.query.createdAt={$gte:moment(u.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(u.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:u.query.createdAt=void 0,u.query.offset=(u.query.page-1)*u.query.limit;var n=a.localStorage.getItem("motion2.home.fax:"+u.user.id);(n=n?JSON.parse(n):{}).query=u.query,a.localStorage.setItem("motion2.home.fax:"+u.user.id,JSON.stringify(n)),u.promise=r.faxInteraction.get(u.query,p).$promise,i.$emit("quickFilter-setSelectedText",[{queryParam:u.query.FaxAccountId,resources:u.faxAccounts.rows,key:"account"},{queryParam:u.query.tag,resources:u.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){u.quickFilterSelectedText[t]=e})})}function v(e){e.Contact?(e.contactName=(e.Contact.firstName||"")+" "+(e.Contact.lastName||""),e.contactInfo=e.Contact.fax):e.contactName=o.instant("DASHBOARDS.UNKNOWN")}u.user=l.getCurrentUser(),u.license={},u.setting={},u.tags={count:0,rows:[]},u.faxInteractions={count:0,rows:[]},u.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null},u.filter={activeConditions:[],fields:[{name:"Id",column:"id",tableAlias:"i",type:"number"},{name:"Contact",column:"ContactId",valueColumn:"id",tableAlias:"i",type:"text"},{name:"Body",column:"plainBody",tableAlias:"me",type:"text"},{name:"Status",column:"closed",tableAlias:"i",type:"select"},{name:"Substatus",column:"substatus",tableAlias:"i",type:"select"},{name:"Agent",column:"UserId",tableAlias:"i",valueColumn:"id",type:"autocomplete"},{name:"Account",column:"",valueColumn:"id",tableAlias:"i",type:"select"},{name:"Tags",column:"TagId",tableAlias:"t",valueColumn:"id",type:"select"},{name:"Start Date",column:"createdAt",tableAlias:"i",type:"date"},{name:"Read",column:"Messages.count",tableAlias:"me",type:"select"}],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Account":t.values=u.faxAccounts.rows;break;case"Agent":r.user.get({role:"agent",fields:"id,name,fullname"}).$promise.then(function(e){t.source=e.rows||[]}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_AGENTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"Read":t.values=[{id:1,name:"Read",value:1},{id:2,name:"Unread",value:0}];break;case"Status":t.values=[{id:1,name:"Opened",value:0},{id:2,name:"Closed",value:1}];break;case"Substatus":t.values=u.subStatuses.rows;break;case"Tags":t.values=u.tags.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(u.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?u.filter.activeConditions.splice(i,1,s):u.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(u.filter.activeConditions)?u.query.advancedFilter=void 0:(u.query.advancedFilter={},_.forEach(u.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:e.condition};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,u.query.advancedFilter[e.column]?_.isArray(u.query.advancedFilter[e.column])?u.query.advancedFilter[e.column].push(t):u.query.advancedFilter[e.column]=[].concat(u.query.advancedFilter[e.column],t):u.query.advancedFilter[e.column]=t})),g()}},u.isAdvancedFilterVisible=!1,u.quickFilterSelectedText={tag:o.instant("DASHBOARDS.TAGS"),account:o.instant("DASHBOARDS.ALL")},u.success=p,u.getFaxInteractions=g,u.showFaxInteraction=function(e,t){i.$parent.vm.addInteractionTab("fax",t)},u.downloadFaxInteraction=function(e,s,t){r.faxInteraction.download({id:s.id,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="fax-interaction"+s.id+".zip",a=new Blob(t,{type:e.type}),i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"downloadFaxInteraction",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.getContactLabel=v,u.getUserLabel=function(e){if(e.UserId)return e.UserId===l.getCurrentUser().id?o.instant("DASHBOARDS.ME"):u.usersByKey[e.UserId].fullname+" <"+u.usersByKey[e.UserId].internal+">";return o.instant("DASHBOARDS.NOT_ASSIGNED")},u.getFaxAccountLabel=function(e){if(e.Account)return e.Account.key;return o.instant("DASHBOARDS.UNKNOWN")},u.clearAll=function(){u.calendarModel={dateStart:null},u.pickerModel={dateStart:null},u.serviceModel={dateStart:null},u.getFaxInteractions()},u.clearSelection=function(e){switch(e){case"account":u.query.FaxAccountId=[].concat(u.faxAccounts.rows[0].id);break;case"tag":u.query.tag=[]}u.getFaxInteractions()},u.selectAll=function(e){switch(e){case"account":u.query.FaxAccountId=_.map(u.faxAccounts.rows,"id");break;case"tag":u.query.tag=_.map(u.tags.rows,"id")}u.getFaxInteractions()},u.composeFaxInteraction=function(e,a){t.show({controller:"ComposeFaxInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeFax/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:a,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var t=e;return r.faxAccount.send({id:a.id},t).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("fax",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:"FAX:SEND",msg:e.data?JSON.stringify(e.data):e.message||e.toString()})})}var n={channel:"fax",account:a,message:e.message,contact:e.contact};m.add(n)}})},u.onInit=function(e,t){return u.license=e,u.setting=t,r.user["get"+_.upperFirst("faxAccounts")]({id:u.user.id,nolimit:!0}).$promise.then(function(e){return u.faxAccounts=e||{count:0,rows:[]},r.tag.get().$promise}).then(function(e){u.tags=e||{count:0,rows:[]}}).then(function(){return r.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){u.usersByKey=_.keyBy(e.rows,"id")}).catch(function(e){console.error(e)}).finally(function(){var e=a.localStorage.getItem("motion2.home.fax:"+u.user.id);if(e)try{(e=JSON.parse(e)).query&&(u.query=_.merge(u.query,e.query),u.query=_.omit(u.query,"filter"),u.query.sort&&0<=u.query.sort.indexOf("lastMessage")&&(u.query=_.omit(u.query,"sort")),u.query.includeAll=!0,u.isSearchBarVisible=!!u.query.filter,u.isAdvancedFilterVisible=!!u.query.advancedFilter),e.filterConditions&&(u.filter.activeConditions=e.filterConditions)}catch(e){console.error(e)}else u.query.FaxAccountId=_.map(u.faxAccounts.rows,"id");d.on("faxInteraction:save",u.onFaxInteractionSave),d.on("faxInteraction:update",u.onFaxInteractionSave),d.on("faxInteractionTags:save",u.onFaxInteractionTagsSave),d.on("faxMessage:save",u.onFaxMessageSave),d.on("faxMessage:update",u.onFaxMessageSave),d.on("user_has_fax_interactions:save",u.onFaxInteractionOpen),d.on("user_has_fax_interactions:remove",u.onFaxInteractionClose),u.getFaxInteractions(u.query.page)})},u.onFaxInteractionSave=function(e){if(e){var t=_.find(u.faxInteractions.rows,{id:e.id});if(t){if(t.Users=[],e.closed&&(t.unreadMessages=0),u.query.sort){var n=_.startsWith(u.query.sort,"-")?"desc":"asc";u.faxInteractions.rows=_.orderBy(u.faxInteractions.rows,_.trimStart(u.query.sort,"-"),n)}_.merge(t,_.pick(e,_.keys(t)))}else g(u.query.page)}},u.onFaxInteractionTagsSave=function(e){if(e){var t=_.find(u.faxInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},u.onFaxMessageSave=function(e){if(e&&!e.secret){var t=_.find(u.faxInteractions.rows,{id:e.FaxInteractionId});if(t){var n=_.find(t.Messages,{id:e.id});n?_.merge(n,_.pick(e,_.keys(n))):(_.isNil(t.Messages)&&(t.Messages={count:0}),e.read||(t.Messages.count+=1))}}},u.onFaxInteractionOpen=function(e){var t=_.find(u.faxInteractions.rows,{id:e.FaxInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},u.onFaxInteractionClose=function(e){var t=_.find(u.faxInteractions.rows,{id:e.FaxInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},u.onSearchBarCollapse=function(){u.query.advancedFilter=void 0,u.isSearchBarVisible=!1},u.onSearchBarExpand=function(){u.isSearchBarVisible=!0},u.localizationMap=e,u.pickerModel={dateStart:null},i.$on("openFaxDraft",function(e,a){a.interaction?(a.interaction.isDraft=!0,showMailInteraction(null,a.interaction)):t.show({controller:"ComposeFaxInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeFax/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:a.account,message:a.content,type:"draft",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var t=e;return r.faxAccount.send({id:account.id},t).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("fax",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:"FAX:SEND",msg:e.data?JSON.stringify(e.data):e.message||e.toString()})})}var n={id:a.id,channel:"fax",account:e.account,message:e.message};m.update(n)}})});var h=!0,f=1;i.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=f),u.getFaxInteractions(u.query.page))}),i.$on("$destroy",function(){d.removeAllListeners("faxMessage:save"),d.removeAllListeners("faxMessage:update"),d.removeAllListeners("faxInteraction:save"),d.removeAllListeners("faxInteractionTags:save"),d.removeAllListeners("faxInteraction:update"),d.removeAllListeners("user_has_fax_interactions:save"),d.removeAllListeners("user_has_fax_interactions:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory","draftManager"],angular.module("app.dashboards").controller("AgentHomeFaxController",e)}(),function(){"use strict";function e(o,n,r,l,a,t,d,i,s,c,e,m){var u=this;function p(e){u.mailInteractions=e||{count:0,rows:[]};for(var t=0;t<u.mailInteractions.rows.length;t+=1)h(u.mailInteractions.rows[t])}function g(e,t){e||(u.query.page=1),u.pickerModel.dateStart?u.query.createdAt={$gte:moment(u.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(u.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:u.query.createdAt=void 0,u.query.offset=(u.query.page-1)*u.query.limit;var n=a.localStorage.getItem("motion2.home.mail:"+u.user.id);(n=n?JSON.parse(n):{}).query=u.query,a.localStorage.setItem("motion2.home.mail:"+u.user.id,JSON.stringify(n)),u.promise=d.mailInteraction.get(u.query,p).$promise,o.$emit("quickFilter-setSelectedText",[{queryParam:u.query.MailAccountId,resources:u.mailAccounts.rows,key:"account"},{queryParam:u.query.tag,resources:u.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){u.quickFilterSelectedText[t]=e})})}function v(e,t){o.$parent.vm.addInteractionTab("mail",t)}function h(e){_.isEmpty(e.to)||!e.Account||_.includes(e.to,e.Account.email)?e.Contact?(e.contactName=(e.Contact.firstName||"")+" "+(e.Contact.lastName||""),e.contactInfo=e.Contact.email||""):e.contactName=t.instant("DASHBOARDS.UNKNOWN"):(e.contactName=e.to.split(" <")[0],e.contactInfo=e.to.split("<").pop().split(">")[0])}u.user=i.getCurrentUser(),u.license={},u.setting={},u.tags={count:0,rows:[]},u.mailInteractions={count:0,rows:[]},u.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null},u.filter={activeConditions:[],fields:[{name:"Id",column:"id",tableAlias:"i",type:"number"},{name:"Contact",column:"ContactId",valueColumn:"id",tableAlias:"i",type:"text"},{name:"Subject",column:"subject",tableAlias:"i",type:"text"},{name:"Body",column:"plainBody",tableAlias:"me",type:"text"},{name:"Status",column:"closed",tableAlias:"i",type:"select"},{name:"Substatus",column:"substatus",tableAlias:"i",type:"select"},{name:"Agent",column:"UserId",tableAlias:"i",valueColumn:"id",type:"autocomplete"},{name:"Account",column:"",valueColumn:"id",tableAlias:"i",type:"select"},{name:"Tags",column:"TagId",tableAlias:"t",valueColumn:"id",type:"select"},{name:"Start Date",column:"createdAt",tableAlias:"i",type:"date"},{name:"Read",column:"Messages.count",tableAlias:"me",type:"select"}],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Account":t.values=u.mailAccounts.rows;break;case"Agent":d.user.get({role:"agent",fields:"id,name,fullname"}).$promise.then(function(e){t.source=e.rows||[]}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_AGENTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"Read":t.values=[{id:1,name:"Read",value:1},{id:2,name:"Unread",value:0}];break;case"Status":t.values=[{id:1,name:"Opened",value:0},{id:2,name:"Closed",value:1}];break;case"Substatus":t.values=u.subStatuses.rows;break;case"Tags":t.values=u.tags.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(u.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?u.filter.activeConditions.splice(i,1,s):u.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(u.filter.activeConditions)?u.query.advancedFilter=void 0:(u.query.advancedFilter={},_.forEach(u.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:e.condition};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,u.query.advancedFilter[e.column]?_.isArray(u.query.advancedFilter[e.column])?u.query.advancedFilter[e.column].push(t):u.query.advancedFilter[e.column]=[].concat(u.query.advancedFilter[e.column],t):u.query.advancedFilter[e.column]=t})),g()}},u.isAdvancedFilterVisible=!1,u.quickFilterSelectedText={tag:t.instant("DASHBOARDS.TAGS"),account:t.instant("DASHBOARDS.ALL")},u.success=p,u.getMailInteractions=g,u.showMailInteraction=v,u.downloadMailInteraction=function(e,s,t){d.mailInteraction.download({id:s.id,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="mail-interaction"+s.id+".zip",a=new Blob(t,{type:e.type}),i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"downloadMailInteraction",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.getContactLabel=h,u.getUserLabel=function(e){if(e.UserId)return e.UserId===i.getCurrentUser().id?t.instant("DASHBOARDS.ME"):u.usersByKey[e.UserId].fullname+" <"+u.usersByKey[e.UserId].internal+">";return t.instant("DASHBOARDS.NOT_ASSIGNED")},u.getMailAccountLabel=function(e){if(e.Account)return e.Account.key;return t.instant("DASHBOARDS.UNKNOWN")},u.clearAll=function(){u.calendarModel={dateStart:null},u.pickerModel={dateStart:null},u.serviceModel={dateStart:null},u.getMailInteractions()},u.clearSelection=function(e){switch(e){case"account":u.query.MailAccountId=[].concat(u.mailAccounts.rows[0].id);break;case"tag":u.query.tag=[]}u.getMailInteractions()},u.selectAll=function(e){switch(e){case"account":u.query.MailAccountId=_.map(u.mailAccounts.rows,"id");break;case"tag":u.query.tag=_.map(u.tags.rows,"id")}u.getMailInteractions()},u.composeMailInteraction=function(e,s){r.show({controller:"ComposeMailInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeMail/dialog.html",parent:angular.element(l.body),clickOutsideToClose:!1,locals:{account:s,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var i=e;return d.mailAccount.send({id:s.id},i).$promise.then(function(e){if(e&&e.Messages&&e.Messages.length){if(i.attachments&&i.attachments.length)for(var t=0;t<i.attachments.length;t+=1)d.attachment.update({id:i.attachments[t].id},{MailMessageId:_.head(e.Messages).id});if(c.success({title:"Message properly sent!",msg:"Message has been sent!"}),e.closed){e.disposition=null;var n=!s.mandatoryDisposition,a=u.user.voicePause||u.user.chatPause||u.user.mailPause||u.user.openchannelPause||u.user.faxPause;r.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(l.body),onRemoving:function(e,t){u.user&&s.mandatoryDisposition&&!a&&d.user.unpause({id:u.user.id}).$promise.catch(function(e){console.error(e)})},clickOutsideToClose:n,escapeToClose:n,locals:{user:u.user,channel:"mail",interaction:e}})}else o.$parent.vm.addInteractionTab("mail",e)}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"MAILACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}var t={channel:"mail",account:s,message:e.message,contact:e.contact};m.add(t)}})},u.onInit=function(e,t){return u.license=e,u.setting=t,d.user["get"+_.upperFirst("mailAccounts")]({id:u.user.id,nolimit:!0}).$promise.then(function(e){return u.mailAccounts=e||{count:0,rows:[]},d.tag.get().$promise}).then(function(e){u.tags=e||{count:0,rows:[]}}).then(function(){return d.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){u.usersByKey=_.keyBy(e.rows,"id")}).then(function(){return d.mailSubstatus.get({nolimit:!0}).$promise}).then(function(e){u.subStatuses=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){var e=a.localStorage.getItem("motion2.home.mail:"+u.user.id);if(e)try{(e=JSON.parse(e)).query&&(u.query=_.merge(u.query,e.query),u.query=_.omit(u.query,"filter"),u.query.sort&&0<=u.query.sort.indexOf("lastMessage")&&(u.query=_.omit(u.query,"sort")),u.query.includeAll=!0,u.isSearchBarVisible=!!u.query.filter,u.isAdvancedFilterVisible=!!u.query.advancedFilter),e.filterConditions&&(u.filter.activeConditions=e.filterConditions)}catch(e){console.error(e)}else u.query.MailAccountId=_.map(u.mailAccounts.rows,"id");s.on("mailInteraction:save",u.onMailInteractionSave),s.on("mailInteraction:update",u.onMailInteractionSave),s.on("mailInteractionTags:save",u.onMailInteractionTagsSave),s.on("mailMessage:save",u.onMailMessageSave),s.on("mailMessage:update",u.onMailMessageSave),s.on("user_has_mail_interactions:save",u.onMailInteractionOpen),s.on("user_has_mail_interactions:remove",u.onMailInteractionClose),u.getMailInteractions(u.query.page)})},u.onMailInteractionSave=function(e){if(e){var t=_.find(u.mailInteractions.rows,{id:e.id});if(t){if(t.Users=[],e.closed&&(t.unreadMessages=0),u.query.sort){var n=_.startsWith(u.query.sort,"-")?"desc":"asc";u.mailInteractions.rows=_.orderBy(u.mailInteractions.rows,_.trimStart(u.query.sort,"-"),n)}_.merge(t,_.pick(e,_.keys(t)))}else g(u.query.page)}},u.onMailInteractionTagsSave=function(e){if(e){var t=_.find(u.mailInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},u.onMailMessageSave=function(e){if(e&&!e.secret){var t=_.find(u.mailInteractions.rows,{id:e.MailInteractionId});if(t){var n=_.find(t.Messages,{id:e.id});n?_.merge(n,_.pick(e,_.keys(n))):(_.isNil(t.Messages)&&(t.Messages={count:0}),e.read||(t.Messages.count+=1))}}},u.onMailInteractionOpen=function(e){var t=_.find(u.mailInteractions.rows,{id:e.MailInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},u.onMailInteractionClose=function(e){var t=_.find(u.mailInteractions.rows,{id:e.MailInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},u.onSearchBarCollapse=function(){u.query.advancedFilter=void 0,u.isSearchBarVisible=!1},u.onSearchBarExpand=function(){u.isSearchBarVisible=!0},u.localizationMap=e,u.pickerModel={dateStart:null},o.$on("openMailDraft",function(e,n){n.interaction?(n.interaction.isDraft=!0,v(null,n.interaction)):r.show({controller:"ComposeMailInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeMail/dialog.html",parent:angular.element(l.body),clickOutsideToClose:!1,locals:{account:n.account,message:n.content,type:"draft",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var i=e;return d.mailAccount.send({id:account.id},i).$promise.then(function(e){if(e&&e.Messages&&e.Messages.length){if(i.attachments&&i.attachments.length)for(var t=0;t<i.attachments.length;t+=1)d.attachment.update({id:i.attachments[t].id},{MailMessageId:_.head(e.Messages).id});if(c.success({title:"Message properly sent!",msg:"Message has been sent!"}),e.closed){e.disposition=null;var n=!account.mandatoryDisposition,a=u.user.voicePause||u.user.chatPause||u.user.mailPause||u.user.openchannelPause||u.user.faxPause;r.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(l.body),onRemoving:function(e,t){u.user&&account.mandatoryDisposition&&!a&&d.user.unpause({id:u.user.id}).$promise.catch(function(e){console.error(e)})},clickOutsideToClose:n,escapeToClose:n,locals:{user:u.user,channel:"mail",interaction:e}})}else o.$parent.vm.addInteractionTab("mail",e)}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"MAILACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}var t={id:n.id,channel:"mail",account:e.account,message:e.message};m.update(t)}})});var f=!0,b=1;o.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=b),u.getMailInteractions(u.query.page))}),o.$on("$destroy",function(){s.removeAllListeners("mailMessage:save"),s.removeAllListeners("mailMessage:update"),s.removeAllListeners("mailInteraction:save"),s.removeAllListeners("mailInteractionTags:save"),s.removeAllListeners("mailInteraction:update"),s.removeAllListeners("user_has_mail_interactions:save"),s.removeAllListeners("user_has_mail_interactions:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory","draftManager"],angular.module("app.dashboards").controller("AgentHomeMailController",e)}(),function(){"use strict";function e(n,e,a,i,s,t,o,r){var l=this;function d(e){l.contacts=e||{count:0,rows:[]}}function c(){o.cmContact.describe({id:l.query.ListId}).$promise.then(function(e){var t=e.toJSON();l.filter.fields=[],Object.entries(t).forEach(function(e){var t=function(e){var t={name:_.startCase(e.displayName),tableAlias:"c"};if(e.custom)switch(e.custom.type){case"text":t.type="text";break;case"select":t.type="select",t.values=_.map(JSON.parse(e.custom.values),function(e,t){return{id:t,name:e.value,value:e.value}});break;case"switch":t.type="select",t.values=[{id:1,name:"Disabled",value:0},{id:2,name:"Enabled",value:1}];break;case"number":t.type="number";break;case"datetime":t.type="date"}else switch(e.columnName){case"dateOfBirth":t.type="date",t.column=e.columnName;break;case"CompanyId":t.name="Company",t.type="select",t.column=e.columnName;break;case"ListId":t.name="List",t.type="select",t.column=e.columnName;break;default:_.includes(e.type.toLowerCase(),"int")?t.type="number":_.includes(e.type.toLowerCase(),"date")?t.type="date":t.type="text",t.column=e.columnName}return t}(e[1]);l.filter.fields.push(t)})}).catch(function(e){toasty.error({title:e.status?"API:"+e.status+" - "+e.statusText:"DESCRIBE_CM_CONTACTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})}),l.query.offset=(l.query.page-1)*l.query.limit,r.localStorage.setItem("motion2.home.mycontacts:"+l.currentUser.id,JSON.stringify({query:l.query,filterConditions:l.filter.activeConditions})),l.promise=o.user.getContacts(l.query,d).$promise,a.$emit("quickFilter-setSelectedText",[{queryParam:l.query.ListId,resources:l.lists.rows,key:"list"},{queryParam:l.query.tag,resources:l.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){l.quickFilterSelectedText[t]=e})})}l.currentUser=t.getCurrentUser(),l.isAdvancedFilterVisible=!1,l.quickFilterSelectedText={tag:e.instant("DASHBOARDS.TAGS"),list:e.instant("DASHBOARDS.ALL")},l.lists={},l.contacts={count:0,rows:[]},l.tags={count:0,rows:[]},l.query={includeAll:!0,id:l.currentUser.id,sort:"-updatedAt",limit:10,page:1},l.filter={activeConditions:[],fields:[],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Company":o.cmCompany.get().$promise.then(function(e){t.values=e.rows||[]}).catch(function(e){toasty.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_COMPANIES",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"List":t.values=l.lists.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(l.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?l.filter.activeConditions.splice(i,1,s):l.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(l.filter.activeConditions)?l.query.advancedFilter=void 0:(l.query.advancedFilter={},_.forEach(l.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:{name:e.condition.name,value:e.condition.value}};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,l.query.advancedFilter[e.column]?_.isArray(l.query.advancedFilter[e.column])?l.query.advancedFilter[e.column].push(t):l.query.advancedFilter[e.column]=[].concat(l.query.advancedFilter[e.column],t):l.query.advancedFilter[e.column]=t})),c()}},l.getContacts=c,l.refreshContacts=function(){l.getContacts()},l.mergeContact=function(e,t){s.show({controller:"MergeContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/merge/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:t.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:l.currentUser.id,fields:"id,name"})}]},locals:{contacts:l.contacts.rows}})},l.duplicateContact=function(e,t){s.show({controller:"DuplicateContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:t.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:l.currentUser.id,fields:"id,name"})}]},locals:{contacts:l.contacts.rows}})},l.openContact=function(e,t){a.$parent.vm.addContactTab(t)},l.call=a.$parent.vm.call,l.clearSelection=function(e){switch(e){case"list":l.query.ListId=[].concat(l.lists.rows[0].id);break;case"tag":l.query.tag=[]}l.getContacts()},l.selectAll=function(e){switch(e){case"list":l.query.ListId=_.map(l.lists.rows,"id");break;case"tag":l.query.tag=_.map(l.tags.rows,"id")}l.getContacts()},l.onInit=function(){o.cmList.get({fields:"id,name,dialPrefix",sort:"name",nolimit:!0}).$promise.then(function(e){return l.lists=e||{count:0,rows:[]},l.listsMap=_.keyBy(l.lists.rows,"id"),o.tag.get().$promise}).then(function(e){l.tags=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){var e=r.localStorage.getItem("motion2.home.mycontacts:"+l.currentUser.id);if(e)try{(e=JSON.parse(e)).query&&(l.query=_.omit(e.query,"filter")),e.filterConditions&&(l.filter.activeConditions=e.filterConditions)}catch(e){console.error(e)}else l.query.ListId=_.isEmpty(l.lists.rows)?"null":_.map(l.lists.rows,"id");l.isSearchBarVisible=!!l.query.filter,l.isAdvancedFilterVisible=!!l.query.advancedFilter,l.getContacts()})},l.onSearchBarCollapse=function(){l.query.advancedFilter=void 0,l.isSearchBarVisible=!1},l.onSearchBarExpand=function(){l.isSearchBarVisible=!0};var m=!0,u=1;a.$watch("vm.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=l.query.page),e!==t&&(l.query.page=1),e||(l.query.page=u),l.getContacts())})}e.$inject=["$document","$translate","$scope","$timeout","$mdDialog","Auth","api","$window"],angular.module("app.dashboards").controller("AgentHomeMyContactsController",e)}(),function(){"use strict";function e(i,n,t,s,a,o,r,l,d,c,e,m){var u=this;function p(e){u.openchannelInteractions=e||{count:0,rows:[]};for(var t=0;t<u.openchannelInteractions.rows.length;t+=1)v(u.openchannelInteractions.rows[t])}function g(e,t){e||(u.query.page=1),u.pickerModel.dateStart?u.query.createdAt={$gte:moment(u.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(u.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:u.query.createdAt=void 0,u.query.offset=(u.query.page-1)*u.query.limit;var n=a.localStorage.getItem("motion2.home.openchannel:"+u.user.id);(n=n?JSON.parse(n):{}).query=u.query,a.localStorage.setItem("motion2.home.openchannel:"+u.user.id,JSON.stringify(n)),u.promise=r.openchannelInteraction.get(u.query,p).$promise,i.$emit("quickFilter-setSelectedText",[{queryParam:u.query.OpenchannelAccountId,resources:u.openchannelAccounts.rows,key:"account"},{queryParam:u.query.tag,resources:u.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){u.quickFilterSelectedText[t]=e})})}function v(e){e.from?e.contactName=e.from:e.Contact?e.contactName=(e.Contact.firstName||"")+" "+(e.Contact.lastName||""):e.contactName=o.instant("DASHBOARDS.UNKNOWN")}u.user=l.getCurrentUser(),u.license={},u.setting={},u.tags={count:0,rows:[]},u.openchannelInteractions={count:0,rows:[]},u.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null},u.filter={activeConditions:[],fields:[{name:"Id",column:"id",tableAlias:"i",type:"number"},{name:"Contact",column:"ContactId",valueColumn:"id",tableAlias:"i",type:"text"},{name:"Body",column:"plainBody",tableAlias:"me",type:"text"},{name:"Status",column:"closed",tableAlias:"i",type:"select"},{name:"Substatus",column:"substatus",tableAlias:"i",type:"select"},{name:"Agent",column:"UserId",tableAlias:"i",valueColumn:"id",type:"autocomplete"},{name:"Account",column:"",valueColumn:"id",tableAlias:"i",type:"select"},{name:"Tags",column:"TagId",tableAlias:"t",valueColumn:"id",type:"select"},{name:"Start Date",column:"createdAt",tableAlias:"i",type:"date"},{name:"Read",column:"Messages.count",tableAlias:"me",type:"select"}],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Account":t.values=u.openchannelAccounts.rows;break;case"Agent":r.user.get({role:"agent",fields:"id,name,fullname"}).$promise.then(function(e){t.source=e.rows||[]}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_AGENTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"Read":t.values=[{id:1,name:"Read",value:1},{id:2,name:"Unread",value:0}];break;case"Status":t.values=[{id:1,name:"Opened",value:0},{id:2,name:"Closed",value:1}];break;case"Substatus":t.values=u.subStatuses.rows;break;case"Tags":t.values=u.tags.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(u.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?u.filter.activeConditions.splice(i,1,s):u.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(u.filter.activeConditions)?u.query.advancedFilter=void 0:(u.query.advancedFilter={},_.forEach(u.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:e.condition};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,u.query.advancedFilter[e.column]?_.isArray(u.query.advancedFilter[e.column])?u.query.advancedFilter[e.column].push(t):u.query.advancedFilter[e.column]=[].concat(u.query.advancedFilter[e.column],t):u.query.advancedFilter[e.column]=t})),g()}},u.isAdvancedFilterVisible=!1,u.quickFilterSelectedText={tag:o.instant("DASHBOARDS.TAGS"),account:o.instant("DASHBOARDS.ALL")},u.success=p,u.getOpenchannelInteractions=g,u.showOpenchannelInteraction=function(e,t){i.$parent.vm.addInteractionTab("openchannel",t)},u.downloadOpenchannelInteraction=function(e,s,t){r.openchannelInteraction.download({id:s.id,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="openchannel-interaction"+s.id+".zip",a=new Blob(t,{type:e.type}),i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"downloadOpenchannelInteraction",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.getContactLabel=v,u.getUserLabel=function(e){if(e.UserId)return e.UserId===l.getCurrentUser().id?o.instant("DASHBOARDS.ME"):u.usersByKey[e.UserId].fullname+" <"+u.usersByKey[e.UserId].internal+">";return o.instant("DASHBOARDS.NOT_ASSIGNED")},u.getOpenchannelAccountLabel=function(e){if(e.Account)return e.Account.key;return o.instant("DASHBOARDS.UNKNOWN")},u.clearAll=function(){u.calendarModel={dateStart:null},u.pickerModel={dateStart:null},u.serviceModel={dateStart:null},u.getOpenchannelInteractions()},u.clearSelection=function(e){switch(e){case"account":u.query.OpenchannelAccountId=[].concat(u.openchannelAccounts.rows[0].id);break;case"tag":u.query.tag=[]}u.getOpenchannelInteractions()},u.selectAll=function(e){switch(e){case"account":u.query.OpenchannelAccountId=_.map(u.openchannelAccounts.rows,"id");break;case"tag":u.query.tag=_.map(u.tags.rows,"id")}u.getOpenchannelInteractions()},u.composeOpenchannelInteraction=function(e,a){t.show({controller:"ComposeOpenchannelInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeOpenchannel/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:a,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var t=e;return r.openchannelAccount.send({id:a.id},t).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("openchannel",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"OPENCHANNELACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}var n={channel:"openchannel",account:a,message:e.message,contact:e.contact};m.add(n)}})},u.onInit=function(e,t){return u.license=e,u.setting=t,r.user["get"+_.upperFirst("openchannelAccounts")]({id:u.user.id,nolimit:!0}).$promise.then(function(e){return u.openchannelAccounts=e||{count:0,rows:[]},r.tag.get().$promise}).then(function(e){u.tags=e||{count:0,rows:[]}}).then(function(){return r.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){u.usersByKey=_.keyBy(e.rows,"id")}).catch(function(e){console.error(e)}).finally(function(){var e=a.localStorage.getItem("motion2.home.openchannel:"+u.user.id);if(e)try{(e=JSON.parse(e)).query&&(u.query=_.merge(u.query,e.query),u.query=_.omit(u.query,"filter"),u.query.sort&&0<=u.query.sort.indexOf("lastMessage")&&(u.query=_.omit(u.query,"sort")),u.query.includeAll=!0,u.isSearchBarVisible=!!u.query.filter,u.isAdvancedFilterVisible=!!u.query.advancedFilter),e.filterConditions&&(u.filter.activeConditions=e.filterConditions)}catch(e){console.error(e)}else u.query.OpenchannelAccountId=_.map(u.openchannelAccounts.rows,"id");d.on("openchannelInteraction:save",u.onOpenchannelInteractionSave),d.on("openchannelInteraction:update",u.onOpenchannelInteractionSave),d.on("openchannelInteractionTags:save",u.onOpenchannelInteractionTagsSave),d.on("openchannelMessage:save",u.onOpenchannelMessageSave),d.on("openchannelMessage:update",u.onOpenchannelMessageSave),d.on("user_has_openchannel_interactions:save",u.onOpenchannelInteractionOpen),d.on("user_has_openchannel_interactions:remove",u.onOpenchannelInteractionClose),u.getOpenchannelInteractions(u.query.page)})},u.onOpenchannelInteractionSave=function(e){if(e){var t=_.find(u.openchannelInteractions.rows,{id:e.id});if(t){if(t.Users=[],e.closed&&(t.unreadMessages=0),u.query.sort){var n=_.startsWith(u.query.sort,"-")?"desc":"asc";u.openchannelInteractions.rows=_.orderBy(u.openchannelInteractions.rows,_.trimStart(u.query.sort,"-"),n)}_.merge(t,_.pick(e,_.keys(t)))}else g(u.query.page)}},u.onOpenchannelInteractionTagsSave=function(e){if(e){var t=_.find(u.openchannelInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},u.onOpenchannelMessageSave=function(e){if(e&&!e.secret){var t=_.find(u.openchannelInteractions.rows,{id:e.OpenchannelInteractionId});if(t){var n=_.find(t.Messages,{id:e.id});n?_.merge(n,_.pick(e,_.keys(n))):(_.isNil(t.Messages)&&(t.Messages={count:0}),e.read||(t.Messages.count+=1))}}},u.onOpenchannelInteractionOpen=function(e){var t=_.find(u.openchannelInteractions.rows,{id:e.OpenchannelInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},u.onOpenchannelInteractionClose=function(e){var t=_.find(u.openchannelInteractions.rows,{id:e.OpenchannelInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},u.onSearchBarCollapse=function(){u.query.advancedFilter=void 0,u.isSearchBarVisible=!1},u.onSearchBarExpand=function(){u.isSearchBarVisible=!0},u.localizationMap=e,u.pickerModel={dateStart:null},i.$on("openOpenchannelDraft",function(e,a){a.interaction?(a.interaction.isDraft=!0,showMailInteraction(null,a.interaction)):t.show({controller:"ComposeOpenchannelInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeOpenchannel/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:a.account,message:a.content,type:"draft",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var t=e;return r.openchannelAccount.send({id:account.id},t).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("openchannel",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"OPENCHANNELACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}var n={id:a.id,channel:"openchannel",account:e.account,message:e.message};m.update(n)}})});var h=!0,f=1;i.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=f),u.getOpenchannelInteractions(u.query.page))}),i.$on("$destroy",function(){d.removeAllListeners("openchannelMessage:save"),d.removeAllListeners("openchannelMessage:update"),d.removeAllListeners("openchannelInteraction:save"),d.removeAllListeners("openchannelInteractionTags:save"),d.removeAllListeners("openchannelInteraction:update"),d.removeAllListeners("user_has_openchannel_interactions:save"),d.removeAllListeners("user_has_openchannel_interactions:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory","draftManager"],angular.module("app.dashboards").controller("AgentHomeOpenchannelController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l){var d=this;function c(e,t,n){d.license=e,d.setting=t,d.plugin=n}d.currentUser=o.getCurrentUser(),d.plugin={},d.onInit=c,d.getTrustedURL=function(){return s.trustAsResourceUrl(d.plugin.agentUrl)},c(),t.$on("pluginUpdated",function(e,t){d.plugin=t.plugin})}e.$inject=["$document","$scope","$timeout","$mdDialog","$stateParams","$sce","Auth","api","$window"],angular.module("app.dashboards").controller("AgentHomePluginsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(e){p.voiceRecordings=e||{count:0,rows:[]}}p.currentUser=c.getCurrentUser(),p.voiceRecordings={},p.localizationMap=u,p.pickerModel={dateStart:null},p.table="voiceRecordings",p.query={UserId:p.currentUser.id,fields:"createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,rating,audio,UserId",sort:"-updatedAt",limit:10,page:1,type:null},p.downloadfile=function(i,e){return r.voiceRecording.download({id:i.id,exists:!0}).$promise.then(function(e){var t=[e.buffer],n=new Blob(t,{type:e.type}),a=window.document.createElement("a");a.setAttribute("href",URL.createObjectURL(n)),a.setAttribute("download",i.uniqueid+i.format),a.click()}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceRecording",msg:e.data?JSON.stringify(e.data):e.toString()})})},p.success=g,p.getVoiceRecordings=function(){p.pickerModel.dateStart?p.query.createdAt={$gte:moment(p.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(p.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:p.query.createdAt=void 0;p.query.offset=(p.query.page-1)*p.query.limit,t.localStorage.setItem("motion2.home.recordings:"+p.currentUser.id,JSON.stringify({query:p.query})),p.promise=r.voiceRecording.get(p.query,g).$promise},p.onInit=function(){var e=t.localStorage.getItem("motion2.home.recordings:"+p.currentUser.id);if(e)try{(e=JSON.parse(e)).query&&(p.query=_.omit(e.query,["filter","id"]),p.query.fields="createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,rating,audio,UserId",p.query.UserId=p.currentUser.id)}catch(e){console.error(e)}p.isSearchBarVisible=!!p.query.filter,p.getVoiceRecordings()},p.clearAll=function(){p.pickerModel={dateStart:null},p.getVoiceRecordings()},p.onSearchBarCollapse=function(){p.query.filter=void 0,p.isSearchBarVisible=!1},p.onSearchBarExpand=function(){p.isSearchBarVisible=!0};var v=!0,h=1;e.$watch("vm.query.filter",function(e,t){v?o(function(){v=!1}):(t||(h=p.query.page),e!==t&&(p.query.page=1),e||(p.query.page=h),p.getVoiceRecordings())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","api","msUtils","toasty","Auth","$translate","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeRecordingsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l){var d=this;function c(e){d.scheduledCalls=e||{count:0,rows:[]}}d.currentUser=r.getCurrentUser(),d.priorities=["Lowest","Low","Medium","High","Highest"],d.crudPermissions={readOnly:!1,canEdit:!0,canDelete:!0},d.localizationMap=l,d.pickerModel={dateStart:null},d.scheduledCalls={},d.query={id:d.currentUser.id,fields:"id,phone,scheduledat,recallme,priority,UserId,OwnerId",sort:"scheduledat",limit:10,page:1},d.queueCampaigns={rows:[],count:0},d.success=c,d.getScheduledCalls=function(){d.pickerModel.dateStart?d.query.createdAt={$gte:moment(d.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(d.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:d.query.createdAt=void 0;d.query.id=d.currentUser.id,d.query.includeAll=!0,d.query.offset=(d.query.page-1)*d.query.limit,t.localStorage.setItem("motion2.home.scheduled:"+d.currentUser.id,JSON.stringify({query:d.query})),d.promise=o.user.getScheduledCalls(d.query,c).$promise},d.onInit=function(){var e=t.localStorage.getItem("motion2.home.scheduled:"+d.currentUser.id);if(e)try{(e=JSON.parse(e)).query&&(d.query=_.omit(e.query,["filter"]))}catch(e){console.error(e)}o.user.getQueues({id:r.getCurrentUser().id,fields:"id,name",channel:"voice",type:"outbound",nolimit:!0}).$promise.then(function(e){d.queueCampaigns=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){d.getScheduledCalls()})},d.clearAll=function(){d.pickerModel={dateStart:null},d.getScheduledCalls()},d.isDateBeforeToday=function(e){return moment(e).isBefore(moment())},d.createOrEditQueueCampaignHopper=function(e,t){a.show({controller:"CreateOrEditHopperVoiceQueueIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hoppers/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:null,hopper:t,hoppers:d.scheduledCalls.rows,license:null,setting:null,crudPermissions:d.crudPermissions}})},d.deleteConfirm=function(t,e){var n=a.confirm().title("Are you sure want to delete the scheduled call?").htmlContent("<b>Scheduled call</b> will be deleted.").ariaLabel("delete scheduled call").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){var e;e=t,o.cmHopper.delete({id:e.id}).$promise.then(function(){_.remove(d.scheduledCalls.rows,{id:e.id}),d.scheduledCalls.count-=1,d.scheduledCalls.rows.length||d.getScheduledCalls(),s.success({title:"Scheduled call deleted!",msg:e.name?"Scheduled call has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){d.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETE_HOPPER"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETE_HOPPER",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){console.log("CANCEL")})};var m=!0,u=1;e.$watch("vm.query.filter",function(e,t){m?n(function(){m=!1}):(t||(u=d.query.page),e!==t&&(d.query.page=1),e||(d.query.page=u),d.getScheduledCalls())})}e.$inject=["$scope","$window","$timeout","$mdDialog","$document","toasty","api","Auth","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeScheduledCallsController",e)}(),function(){"use strict";function e(i,n,t,s,a,o,r,l,d,c,e,m){var u=this;function p(e){u.smsInteractions=e||{count:0,rows:[]};for(var t=0;t<u.smsInteractions.rows.length;t+=1)v(u.smsInteractions.rows[t])}function g(e,t){e||(u.query.page=1),u.pickerModel.dateStart?u.query.createdAt={$gte:moment(u.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(u.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:u.query.createdAt=void 0,u.query.offset=(u.query.page-1)*u.query.limit;var n=a.localStorage.getItem("motion2.home.sms:"+u.user.id);(n=n?JSON.parse(n):{}).query=u.query,a.localStorage.setItem("motion2.home.sms:"+u.user.id,JSON.stringify(n)),u.promise=r.smsInteraction.get(u.query,p).$promise,i.$emit("quickFilter-setSelectedText",[{queryParam:u.query.SmsAccountId,resources:u.smsAccounts.rows,key:"account"},{queryParam:u.query.tag,resources:u.tags.rows,key:"tag"}],function(e){_.mapKeys(e,function(e,t){u.quickFilterSelectedText[t]=e})})}function v(e){e.Contact?(e.contactName=(e.Contact.firstName||"")+" "+(e.Contact.lastName||""),e.contactInfo=e.Contact.mobile):e.contactName=o.instant("DASHBOARDS.UNKNOWN")}u.user=l.getCurrentUser(),u.license={},u.setting={},u.tags={count:0,rows:[]},u.smsInteractions={count:0,rows:[]},u.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null},u.filter={activeConditions:[],fields:[{name:"Id",column:"id",tableAlias:"i",type:"number"},{name:"Contact",column:"ContactId",valueColumn:"id",tableAlias:"i",type:"text"},{name:"Body",column:"plainBody",tableAlias:"me",type:"text"},{name:"Status",column:"closed",tableAlias:"i",type:"select"},{name:"Substatus",column:"substatus",tableAlias:"i",type:"select"},{name:"Agent",column:"UserId",tableAlias:"i",valueColumn:"id",type:"autocomplete"},{name:"Account",column:"",valueColumn:"id",tableAlias:"i",type:"select"},{name:"Tags",column:"TagId",tableAlias:"t",valueColumn:"id",type:"select"},{name:"Start Date",column:"createdAt",tableAlias:"i",type:"date"},{name:"Read",column:"Messages.count",tableAlias:"me",type:"select"}],selectedField:null,selectedCondition:null,selectedValue:null,getFieldValues:function(t){switch(t.name){case"Account":t.values=u.smsAccounts.rows;break;case"Agent":r.user.get({role:"agent",fields:"id,name,fullname"}).$promise.then(function(e){t.source=e.rows||[]}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_AGENTS",msg:e.data?JSON.stringify(e.data.message):e.toString()})});break;case"Read":t.values=[{id:1,name:"Read",value:1},{id:2,name:"Unread",value:0}];break;case"Status":t.values=[{id:1,name:"Opened",value:0},{id:2,name:"Closed",value:1}];break;case"Substatus":t.values=u.subStatuses.rows;break;case"Tags":t.values=u.tags.rows}},searchItem:function(e,t){e.values=_.filter(e.source,function(e){return _.includes(e.name.toLowerCase(),t.toLowerCase())})},addCondition:function(e,t,n,a){var i=_.findIndex(u.filter.activeConditions,{name:e.name,condition:t}),s={name:e.name,condition:t,values:n,displayValue:a,column:e.column,tableAlias:e.tableAlias,field:e.valueColumn};-1<i?u.filter.activeConditions.splice(i,1,s):u.filter.activeConditions.push(s)},getResults:function(){_.isEmpty(u.filter.activeConditions)?u.query.advancedFilter=void 0:(u.query.advancedFilter={},_.forEach(u.filter.activeConditions,function(e){var t={tableAlias:e.tableAlias,condition:e.condition};_.isArray(e.values)?t.value=e.field?_.map(e.values,e.field):_.map(e.values,"value"):t.value=e.values,u.query.advancedFilter[e.column]?_.isArray(u.query.advancedFilter[e.column])?u.query.advancedFilter[e.column].push(t):u.query.advancedFilter[e.column]=[].concat(u.query.advancedFilter[e.column],t):u.query.advancedFilter[e.column]=t})),g()}},u.isAdvancedFilterVisible=!1,u.quickFilterSelectedText={tag:o.instant("DASHBOARDS.TAGS"),account:o.instant("DASHBOARDS.ALL")},u.success=p,u.getSmsInteractions=g,u.showSmsInteraction=function(e,t){i.$parent.vm.addInteractionTab("sms",t)},u.downloadSmsInteraction=function(e,s,t){r.smsInteraction.download({id:s.id,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="sms-interaction"+s.id+".zip",a=new Blob(t,{type:e.type}),i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"downloadSmsInteraction",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},u.getContactLabel=v,u.getUserLabel=function(e){if(e.UserId)return e.UserId===l.getCurrentUser().id?o.instant("DASHBOARDS.ME"):u.usersByKey[e.UserId].fullname+" <"+u.usersByKey[e.UserId].internal+">";return o.instant("DASHBOARDS.NOT_ASSIGNED")},u.getSmsAccountLabel=function(e){if(e.Account)return e.Account.key;return o.instant("DASHBOARDS.UNKNOWN")},u.clearAll=function(){u.calendarModel={dateStart:null},u.pickerModel={dateStart:null},u.serviceModel={dateStart:null},u.getSmsInteractions()},u.clearSelection=function(e){switch(e){case"account":u.query.SmsAccountId=[].concat(u.smsAccounts.rows[0].id);break;case"tag":u.query.tag=[]}u.getSmsInteractions()},u.selectAll=function(e){switch(e){case"account":u.query.SmsAccountId=_.map(u.smsAccounts.rows,"id");break;case"tag":u.query.tag=_.map(u.tags.rows,"id")}u.getSmsInteractions()},u.composeSmsInteraction=function(e,a){t.show({controller:"ComposeSmsInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeSms/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:a,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var t=e;return r.smsAccount.send({id:a.id},t).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("sms",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SMSACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}var n={channel:"sms",account:a,message:e.message,contact:e.contact};m.add(n)}})},u.onInit=function(e,t){return u.license=e,u.setting=t,r.user["get"+_.upperFirst("smsAccounts")]({id:u.user.id,nolimit:!0}).$promise.then(function(e){return u.smsAccounts=e||{count:0,rows:[]},r.tag.get().$promise}).then(function(e){u.tags=e||{count:0,rows:[]}}).then(function(){return r.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){u.usersByKey=_.keyBy(e.rows,"id")}).catch(function(e){console.error(e)}).finally(function(){var e=a.localStorage.getItem("motion2.home.sms:"+u.user.id);if(e)try{(e=JSON.parse(e)).query&&(u.query=_.merge(u.query,e.query),u.query=_.omit(u.query,"filter"),u.query.sort&&0<=u.query.sort.indexOf("lastMessage")&&(u.query=_.omit(u.query,"sort")),u.query.includeAll=!0,u.isSearchBarVisible=!!u.query.filter,u.isAdvancedFilterVisible=!!u.query.advancedFilter),e.filterConditions&&(u.filter.activeConditions=e.filterConditions)}catch(e){console.error(e)}else u.query.SmsAccountId=_.map(u.smsAccounts.rows,"id");d.on("smsInteraction:save",u.onSmsInteractionSave),d.on("smsInteraction:update",u.onSmsInteractionSave),d.on("smsInteractionTags:save",u.onSmsInteractionTagsSave),d.on("smsMessage:save",u.onSmsMessageSave),d.on("smsMessage:update",u.onSmsMessageSave),d.on("user_has_sms_interactions:save",u.onSmsInteractionOpen),d.on("user_has_sms_interactions:remove",u.onSmsInteractionClose),u.getSmsInteractions(u.query.page)})},u.onSmsInteractionSave=function(e){if(e){var t=_.find(u.smsInteractions.rows,{id:e.id});if(t){if(t.Users=[],e.closed&&(t.unreadMessages=0),u.query.sort){var n=_.startsWith(u.query.sort,"-")?"desc":"asc";u.smsInteractions.rows=_.orderBy(u.smsInteractions.rows,_.trimStart(u.query.sort,"-"),n)}_.merge(t,_.pick(e,_.keys(t)))}else g(u.query.page)}},u.onSmsInteractionTagsSave=function(e){if(e){var t=_.find(u.smsInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},u.onSmsMessageSave=function(e){if(e&&!e.secret){var t=_.find(u.smsInteractions.rows,{id:e.SmsInteractionId});if(t){var n=_.find(t.Messages,{id:e.id});n?_.merge(n,_.pick(e,_.keys(n))):(_.isNil(t.Messages)&&(t.Messages={count:0}),e.read||(t.Messages.count+=1))}}},u.onSmsInteractionOpen=function(e){var t=_.find(u.smsInteractions.rows,{id:e.SmsInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},u.onSmsInteractionClose=function(e){var t=_.find(u.smsInteractions.rows,{id:e.SmsInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},u.onSearchBarCollapse=function(){u.query.advancedFilter=void 0,u.isSearchBarVisible=!1},u.onSearchBarExpand=function(){u.isSearchBarVisible=!0},u.localizationMap=e,u.pickerModel={dateStart:null},i.$on("openSmsDraft",function(e,a){a.interaction?(a.interaction.isDraft=!0,showMailInteraction(null,a.interaction)):t.show({controller:"ComposeSmsInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeSms/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:a.account,message:a.content,type:"draft",interaction:{}},fullscreen:!0}).then(function(e){if(e){if(!e.message||!e.message.savedAsDraft){var t=e;return r.smsAccount.send({id:account.id},t).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("sms",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SMSACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}var n={id:a.id,channel:"sms",account:e.account,message:e.message};m.update(n)}})});var h=!0,f=1;i.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=f),u.getSmsInteractions(u.query.page))}),i.$on("$destroy",function(){d.removeAllListeners("smsMessage:save"),d.removeAllListeners("smsMessage:update"),d.removeAllListeners("smsInteraction:save"),d.removeAllListeners("smsInteractionTags:save"),d.removeAllListeners("smsInteraction:update"),d.removeAllListeners("user_has_sms_interactions:save"),d.removeAllListeners("user_has_sms_interactions:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory","draftManager"],angular.module("app.dashboards").controller("AgentHomeSmsController",e)}(),function(){"use strict";function e(t,n,e,a,i,s,o,r,l,d){var c=this;function m(e){c.voiceCalls=e||{count:0,rows:[]}}c.currentUser=i.getCurrentUser(),c.voiceCalls={},c.localizationMap=d,c.pickerModel={dateStart:null},c.table="voiceCalls",c.query={UserId:c.currentUser.id,fields:"id,type,uniqueid,tag,starttime,endtime,source,destination,userDisposition,note,duration,billableseconds,answertime",sort:"-updatedAt",limit:10,page:1,type:null},c.success=m,c.getVoiceCalls=function(){c.pickerModel.dateStart?c.query.createdAt={$gte:moment(c.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(c.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:c.query.createdAt=void 0;c.query.offset=(c.query.page-1)*c.query.limit,o.localStorage.setItem("motion2.home.voice:"+c.currentUser.id,JSON.stringify({query:c.query})),c.promise=e.voiceCallReport.get(c.query,m).$promise},c.onInit=function(){return e.tag.get().$promise.then(function(e){c.tags=e||{count:0,rows:[]}}).catch(function(e){a.error({title:"Init error",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()}),c.tags={count:0,rows:[]}}).finally(function(){var e=o.localStorage.getItem("motion2.home.voice:"+c.currentUser.id);if(e)try{(e=JSON.parse(e)).query&&(c.query=_.omit(e.query,"filter"))}catch(e){console.error(e)}c.getVoiceCalls()})},c.showDetails=function(e){t.show({controller:"AgentHomeVoiceDetailsController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/home/voice/details/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{call:e}})},c.clearAll=function(){c.pickerModel={dateStart:null},c.getVoiceCalls()},c.onSearchBarCollapse=function(){c.query.filter=void 0,c.isSearchBarVisible=!1},c.onSearchBarExpand=function(){c.isSearchBarVisible=!0};var u=!0,p=1;r.$watch("vm.query.filter",function(e,t){u?l(function(){u=!1}):(t||(p=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=p),c.getVoiceCalls())})}e.$inject=["$mdDialog","$document","api","toasty","Auth","$translate","$window","$scope","$timeout","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeVoiceController",e)}(),function(){"use strict";function e(e,t){this.call=t,this.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","call"],angular.module("app.dashboards").controller("AgentHomeVoiceDetailsController",e)}(),function(){"use strict";function e(e,t,a,i,s,o,r,n,l,d,c,m,u,p){var g=this,v=25,h=1024*v*1024;function f(){var n=g.user.voicePause||g.user.chatPause||g.user.mailPause||g.user.openchannelPause||g.user.faxPause,e=!g.tab.interaction.Account.mandatoryDisposition;s.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(a.body),clickOutsideToClose:e,escapeToClose:e,onRemoving:function(e,t){g.user&&g.interaction.Account.mandatoryDisposition&&!n&&l.user.unpause({id:g.user.id}).$promise.catch(function(e){console.error(e)})},locals:{user:g.user,channel:g.tab.channel,interaction:g.tab.interaction}}).then(function(e){g.tab.saved=Boolean(e),e&&i.$parent.$parent.$parent.vm.closeTab(g.tab)})}function b(e,t){g.tab.message&&!g.draft||(g.tab.message=t),s.show({controller:"ComposeMailInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeMail/dialog.html",parent:angular.element(a.body),clickOutsideToClose:!1,locals:{account:g.account,message:g.tab.message,type:e,interaction:g.interaction},fullscreen:!0,skipHide:Boolean(g.tab.spy)}).then(function(e){if(e)if(e.message&&e.message.savedAsDraft)g.draft?p.update({id:g.draft.id,channel:"mail",account:g.account,message:e.message,contact:g.contact,interaction:g.interaction}):p.add({channel:"mail",account:g.account,message:e.message,contact:g.contact,interaction:g.interaction}),g.draft=p.getByInteraction(g.tab.interaction.id);else{var t=e;t&&E(t),t.Interaction&&g.interaction&&g.interaction.id&&(t.Interaction.id=g.interaction.id,l.mailInteraction.update(t.Interaction).$promise.then(function(e){e&&e.closed?(g.tab.saved=!0,g.interaction.closed=!0,f()):null!==t.Interaction.substatus&&(g.tab.saved=!0,g.tab.interaction.substatus=t.Interaction.substatus,i.$parent.$parent.$parent.vm.closeTab(g.tab))}).catch(function(e){console.error(e)}))}}).finally(function(){g.tab.isDraft=!1})}function A(){"mail"!==g.tab.channel&&t(function(){var e=angular.element(a.find("md-content[name*='interaction-content-"+g.tab.id+"']"));e&&e[0]&&(e[0].scrollTop=e[0].scrollHeight)},0)}function E(n){if(n)return n["chat"===g.tab.channel?"ChatWebsiteId":_.capitalize(g.tab.channel)+"AccountId"]=g.interaction["chat"===g.tab.channel?"ChatWebsiteId":_.capitalize(g.tab.channel)+"AccountId"],n[_.capitalize(g.tab.channel)+"InteractionId"]=g.interaction.id,n.UserId=g.user.id,n.ContactId=g.interaction.ContactId,n.direction="out",n.secret=Boolean(g.tab.spy||n.secret),l[g.tab.channel+"Message"].save(n).$promise.then(function(e){if(e&&e.id&&n.attachments&&n.attachments.length)for(var t=0;t<n.attachments.length;t+=1)l.attachment.update({id:n.attachments[t].id},{MailMessageId:e.id})}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:SENDMESSAGE",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){n.isDraft&&(p.removeByInteraction(g.interaction.id),g.draft=null),g.tab.areaText="",A()})}function y(e){switch(e){case"chat":return"green-A700";case"mail":return"teal";case"sms":return"orange";case"openchannel":return"amber-A200";case"fax":return"blue-grey-A200";default:return"blue-A700"}}function S(e){e&&e.count&&e.rows.length&&(g.journey=_.concat(g.journey,e.rows))}function T(){switch(g.tab.channel){case"mail":b(g.draft.type,g.draft.content)}}g.showFooter=!1,g.showInteraction=!1,g.user=c.getCurrentUser(),g.detectBrowser=u.detectBrowser(),g.journey=[],g.acceptedMessages=[],g.omniChannels=["mail","chat","sms","openchannel","fax"],g.ngFlowOptions={target:"api/attachments",singleFile:!0,maxChunkRetries:1,chunkSize:h,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},g.ngFlow={flow:{}},g.selectedMailShowDetails={},g.selectedMailShowSystemMessage={},g.setting={},g.ctrlMethods={},g.embedOptions={fontSmiley:!0,sanitizeHtml:!0,emoji:!0,link:!0,linkTarget:"_blank"},g.init=function(e,t){g.tab=e,g.tab.saved=!0,g.tab.badges=0,g.setting=t||{},g.tab&&g.tab.channel&&g.tab.interaction&&(g.interaction=g.tab.interaction,l[g.tab.channel+"Interaction"].get({id:g.tab.interaction.id,includeAll:!0}).$promise.then(function(e){return e&&(g.interaction=e,g.tab.interaction=e),g.tab.saved=g.interaction.closed,g.queryMessage={id:g.interaction.id,includeAll:!0},"mail"===g.tab.channel?(g.queryMessage.sort="-id",g.queryMessage.offset=0,g.queryMessage.limit=3):(g.queryMessage.sort="id",g.queryMessage.nolimit=!0),l[g.tab.channel+"Interaction"].getMessages(g.queryMessage).$promise}).then(function(e){return g.messages=e||{count:0,rows:[]},l["chat"===g.tab.channel?"chatWebsite":g.tab.channel+"Account"].get({id:g.interaction["chat"===g.tab.channel?"ChatWebsiteId":_.capitalize(g.tab.channel)+"AccountId"]}).$promise}).then(function(e){if(g.account=e,g.tab.title=g.account.key||g.account.name,g.interaction.ContactId)return l.cmContact.get({id:g.interaction.ContactId}).$promise}).then(function(e){return e&&(g.contact=e),g.showInteraction=!0,g.contact?(!function(e){if(e&&e.id){for(var t=0;t<g.omniChannels.length;t++)l[g.omniChannels[t]+"Interaction"].get({ContactId:e.id,includeAll:!0}).$promise.then(S);l.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(S)}}(g.contact),g.tab.title+=" - "+g.contact.firstName):g.tab.title+=" - "+n.instant(g.tab.channel.toUpperCase()+".UNKNOWN"),l.user.get({fields:"id,fullname",nolimit:!0}).$promise}).then(function(e){g.users=e||{count:0,rows:[]},g.usersMap=_.mapValues(_.keyBy(g.users.rows,"id"),"fullname")}).then(function(){if(g.tab.channel&&g.interaction)return l.user["add"+_.upperFirst(g.tab.channel)+"Interactions"]({id:g.user.id,ids:[g.interaction.id]})}).then(function(){return l.mailSubstatus.get({nolimit:!0}).$promise}).then(function(e){g.subStatuses=e||{count:0,rows:[]}}).then(function(){return g.getMailAccounts()}).then(function(){return g.getFaxAccounts()}).then(function(){return g.getSmsAccounts()}).then(function(){return g.getOpenchannelAccounts()}).then(function(){return g.getChatWebsites()}).then(function(){return g.getLists()}).catch(function(e){g.showInteraction=!0}).finally(function(){!function(){if(!g.tab.spy&&!g.interaction.closed)for(var e=0;e<g.messages.rows.length;e+=1)"in"!==g.messages.rows[e].direction||g.messages.rows[e].read||(l[g.tab.channel+"Message"].accept({id:g.messages.rows[e].id,UserId:g.user.id}),g.acceptedMessages.push(g.messages.rows[e].id))}(),A(),m.on(g.tab.channel+"Message:save",g.onMessageSave),m.on(g.tab.channel+"Message:update",g.onMessageSave),m.on(g.tab.channel+"Interaction:save",g.onInteractionSave),m.on(g.tab.channel+"Interaction:update",g.onInteractionSave),m.on("user_has_"+g.tab.channel+"_interactions:save",g.onInteractionOpen),m.on("user_has_"+g.tab.channel+"_interactions:remove",g.onInteractionClose),g.tab.areaText=g.tab.areaText?g.tab.areaText:"",g.showFooter=!0,g.draft=p.getByInteraction(g.tab.interaction.id),g.tab.isDraft&&(g.tab.interaction.closed?(p.removeByInteraction(g.tab.interaction.id),g.draft=null):T())}))},g.getLabelByMessage=function(e){var t="loading...";if(e)return"in"===e.direction?e.Contact?e.Contact.firstName||"Anonymous":t:e.UserId?g.usersMap?g.usersMap[e.UserId]:t:"System"},g.openContact=function(e,t){try{g.tab&&!g.tab.spy&&i.$parent.$parent.$parent.vm.addContactTab(t||g.contact)}catch(e){d.error({title:"ERROR OPEN CONTACT",msg:"Unable to open the contact"})}},g.openInteraction=function(e,t){try{if(t.MailAccountId)return i.$parent.$parent.$parent.vm.addInteractionTab("mail",t);if(t.ChatWebsiteId)return i.$parent.$parent.$parent.vm.addInteractionTab("chat",t);if(t.SmsAccountId)return i.$parent.$parent.$parent.vm.addInteractionTab("sms",t);if(t.OpenchannelAccountId)return i.$parent.$parent.$parent.vm.addInteractionTab("openchannel",t);if(t.FaxAccountId)return i.$parent.$parent.$parent.vm.addInteractionTab("fax",t)}catch(e){d.error({title:"ERROR OPEN INTERACTION",msg:"Customer Journey can't open the interaction"})}},g.disposeInteraction=f,g.tagInteraction=function(){s.show({controller:"TagInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/tag/dialog.html",parent:angular.element(a.body),clickOutsideToClose:!0,skipHide:Boolean(g.tab.spy),resolve:{tags:["apiResolver",function(e){return e.resolve("tag@get",{nolimit:!0,fields:"id,name,color"})}]},locals:{channel:g.tab.channel,interaction:g.tab.interaction}})},g.composeMailInteraction=function(t,e){if(e.inReplyTo){var n=_.find(g.messages.rows,{messageId:e.inReplyTo});if(!n)return l.mailMessage.get({messageId:e.inReplyTo}).$promise.then(function(e){b(t,e&&e.count?e.rows[0]:void 0)}).catch(function(e){console.error(e),b(t,void 0)});b(t,n)}else b(t,e)},g.composeFaxInteraction=function(e){var t={to:[]};t.to.push(g.contact.fax),s.show({controller:"ComposeFaxInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeFax/dialog.html",parent:angular.element(a.body),clickOutsideToClose:!1,locals:{account:g.account,message:t,type:e},fullscreen:!0}).then(function(e){return l.faxAccount.send({id:g.account.id},e).$promise.then(function(e){d.success({title:"Message properly sent!",msg:"Message has been sent!"}),i.$parent.vm.addInteractionTab("fax",e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)d.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else d.error({title:"FAX:SEND",msg:e.data?JSON.stringify(e.data):e.message||e.toString()})})})},g.composeSmsInteraction=function(e,t){s.show({controller:"ComposeSmsInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeSms/dialog.html",parent:angular.element(a.body),clickOutsideToClose:!1,locals:{account:g.account,message:t,type:e},fullscreen:!0,skipHide:Boolean(g.tab.spy)}).then(function(e){e&&E(e)})},g.transferLastMessage=function(){if(g.interaction){var e=_.findLast(g.messages.rows,function(e){return"in"===e.direction});e?s.show({controller:"TransferMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/transfer/dialog.html",parent:angular.element(a.body),clickOutsideToClose:!1,locals:{account:g.account,interaction:g.interaction,message:e,channel:g.tab.channel}}).then(function(e){g.tab.saved=Boolean(e),e&&i.$parent.$parent.$parent.vm.closeTab(g.tab)}):d.error({title:"Invalid transfer",msg:"Message not found!"})}},g.downloadMessage=function(s,e){g.tab.channel&&s.id&&l[g.tab.channel+"Message"].download({id:s.id,attachments:e}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=g.tab.channel+"-message"+s.id+".eml";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)d.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.downloadMessage.get",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.downloadInteraction=function(s,e){g.tab.channel&&s.id&&l[g.tab.channel+"Interaction"].download({id:s.id,attachments:e}).$promise.then(function(e){var t=[e.buffer],n=g.tab.channel+"-interaction"+s.id+".zip",a=new Blob(t,{type:e.type}),i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)d.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.inteactionMessage.get",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.openDraft=T,g.getMailAccounts=function(){l.user.getMailAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.mailAccounts=e||{count:0,rows:[]}})},g.getFaxAccounts=function(){l.user.getFaxAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.faxAccounts=e||{count:0,rows:[]}})},g.getSmsAccounts=function(){l.user.getSmsAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.smsAccounts=e||{count:0,rows:[]}})},g.getOpenchannelAccounts=function(){l.user.getOpenchannelAccounts({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.openchannelAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mail.account"}];for(var t=0;t<e.data.errors.length;t+=1)d.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mail.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.getChatWebsites=function(){l.user.getChatWebsites({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.chatAccounts=e||{count:0,rows:[]}})},g.getLists=function(){l.user.getLists({id:g.user.id,nolimit:!0}).$promise.then(function(e){g.voiceAccounts=e||{count:0,rows:[]}})},g.reply=function(e,t){if(e&&13===e.keyCode&&e.shiftKey)return;if(e&&13!==e.keyCode)return;if(""===t.trim())return;E(function(e){var t={},n="chat"===g.tab.channel?"ChatWebsiteId":_.capitalize(g.tab.channel)+"AccountId";t[n]=g.interaction[n].toString(),t[_.capitalize(g.tab.channel)+"InteractionId"]=g.interaction.id,"sms"===g.tab.channel&&(t.phone=g.interaction.phone);e&&(t.UserId=g.user.id,t.ContactId=g.interaction.ContactId,t.body=e,t.createdAt=Date.now());return t}(t.replace(/\n$/,"")))},g.upload=function(){g.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},g.ngFlow.flow.upload()},g.fileAdded=function(e){if(e.size>h)return d.error({title:"File too big",msg:"The max allowed size is "+v+"MB"}),!1;return!0},g.fileSuccess=function(e,t){var n=JSON.parse(t),a=n.name;"chat"===g.tab.channel&&(a='<a href="'+(g.account.remote?g.account.remote:r.protocol()+"://"+r.host())+"/api/chat/interactions/"+g.interaction.id+"/attachment_download?attachId="+n.id+"&token="+g.account.token+'" target="_self">'+n.name+"</a>");E({body:a,AttachmentId:n.id})},g.onMessageSave=function(e){if(e&&g.interaction.id!=e[_.capitalize(g.tab.channel)+"InteractionId"])return;var t=!1;g.messages?t=_.find(g.messages.rows,{id:e.id}):g.messages={rows:[],count:0};t?_.merge(t,e):("mail"===g.tab.channel?g.messages.rows.unshift(e):g.messages.rows.push(e),A())},g.onInteractionSave=function(e){if(e&&g.interaction.id!==e.id)return;e.closed&&(g.tab.saved=!0);_.merge(g.interaction,e)},g.searchTextChange=function(t){var n=o.defer(),a=[],e={},i="chat"===g.tab.channel?"ChatWebsiteId":_.capitalize(g.tab.channel)+"AccountId";return e.filter=t,e[i]=g.account.id,l.cannedAnswer.get(e).$promise.then(function(e){return a=_.concat(a,e.rows),l.cannedAnswer.get({filter:t}).$promise}).then(function(e){a=_.concat(a,_.filter(e.rows,function(e){return!(e.MailAccountId||e.FaxAccountId||e.SmsAccountId||e.OpenchannelAccountId||e.ChatWebsiteId)})),n.resolve(a)}).catch(function(e){n.reject(e)}),n.promise},g.selectedItemChange=function(t){if(t){try{_.templateSettings.interpolate=/{{([\s\S]+?)}}/g;var e=_.template(t.value),n={user:g.user,account:g.account,interaction:g.interaction,contact:g.interaction&&g.interaction.Contact?g.interaction.Contact:{}};g.tab.areaText+=" "+e(n),g.ctrlMethods.setText(g.tab.areaText)}catch(e){g.tab.areaText+=" "+t.value,g.ctrlMethods.setText(g.tab.areaText)}g.selectedItem=null,g.changeDisplayCannedAnswerInputValue()}},g.getIconByChannel=function(e){switch(e){case"chat":return"icon-hangouts";case"mail":return"icon-email";case"sms":return"icon-message-text";case"openchannel":return"icon-google-earth";case"fax":return"icon-deskphone";default:return"icon-hangouts"}},g.getColorByChannel=y,g.getColorByItem=function(e){var t="";e.FaxAccountId?t="fax":e.OpenchannelAccountId?t="openchannel":e.SmsAccountId?t="sms":e.MailAccountId?t="mail":e.ChatWebsiteId?t="chat":e.amaflags&&(t="voice");return y(t)},g.getMessagesAlignment=function(e){if(e.secret&&g.user.id!=e.UserId)return"in";switch(g.setting.messagesAlignment){case"left":return"in"==e.direction?e.direction:"out-left-aligned";case"right":return"in"==e.direction?"in-right-aligned":e.direction;default:return e.direction}},g.displayCannedAnswerInput=!1,g.changeDisplayCannedAnswerInputValue=function(){g.displayCannedAnswerInput=!g.displayCannedAnswerInput},g.setAs=function(e){g.tab.channel&&g.interaction&&g.interaction.id&&l[g.tab.channel+"Interaction"].update({id:g.interaction.id,substatus:e}).$promise.catch(function(e){console.error(e)})},g.markAsUnread=function(){if(g.tab.channel&&g.interaction&&g.interaction.id)if(g.acceptedMessages.length)for(var e=0;e<g.acceptedMessages.length;e+=1)l[g.tab.channel+"Message"].update({id:g.acceptedMessages[e],read:!1,UserId:null});else for(var t=0;t<g.messages.rows.length;t+=1)if("in"===g.messages.rows[t].direction){g.messages.rows[t].UserId===g.user.id?l[g.tab.channel+"Message"].update({id:g.messages.rows[t].id,read:!1,UserId:null}):d.error({title:"You can't mark as unread",msg:"You are not the owner of the last message!"});break}g.tab.saved=!0,i.$parent.$parent.$parent.vm.closeTab(g.tab)},g.isMyAccount=function(e){{if(e.FaxAccountId)return _.includes(_.map(g.faxAccounts?g.faxAccounts.rows:[],"id"),e.FaxAccountId);if(e.OpenchannelAccountId)return _.includes(_.map(g.openchannelAccounts?g.openchannelAccounts.rows:[],"id"),e.OpenchannelAccountId);if(e.SmsAccountId)return _.includes(_.map(g.smsAccounts?g.smsAccounts.rows:[],"id"),e.SmsAccountId);if(e.MailAccountId)return _.includes(_.map(g.mailAccounts?g.mailAccounts.rows:[],"id"),e.MailAccountId);if(e.ChatWebsiteId)return _.includes(_.map(g.chatAccounts?g.chatAccounts.rows:[],"id"),e.ChatWebsiteId);if(e.amaflags)return!0}return!1},g.getAttachments=function(t){return l.attachment.get({MailMessageId:t.id}).$promise.then(function(e){e&&e.rows&&(t.attachments=e.rows)}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"ATTACHMENTS:GET",msg:e.data?JSON.stringify(e.data):e.toString()})})},g.getAttachment=function(i){return l.attachment.download({id:i.id}).$promise.then(function(e){if(e){var t=new Blob([e.buffer],{type:e.type}),n=document.createElement("a"),a=window.URL.createObjectURL(t);n.href=a,n.target="_self",n.download=i.name,document.body.appendChild(n),n.click(),setTimeout(function(){document.body.removeChild(n),window.URL.revokeObjectURL(a)},100)}}).catch(function(e){d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"ATTACHMENTS:GET",msg:e.data?JSON.stringify(e.data):e.toString()})})},g.htmlToPlaintext=function(e){return e?String(e).replace(/<[^>]+>/gm,""):""},g.onInteractionOpen=function(e){var t;g.interaction.id==e[_.upperFirst(g.tab.channel)+"InteractionId"]&&(g.interaction.Users&&(t=_.find(g.interaction.Users,{id:e.UserId})),t||g.interaction.Users.push({id:e.UserId}))},g.onInteractionClose=function(e){g.interaction.id==e[_.upperFirst(g.tab.channel)+"InteractionId"]&&g.interaction.Users&&_.remove(g.interaction.Users,{id:e.UserId})},g.loadNextPage=function(){var n=o.defer();if(g.queryMessage)return g.queryMessage.offset=g.messages.rows.length,l[g.tab.channel+"Interaction"].getMessages(g.queryMessage).$promise.then(function(e){for(var t=0;t<e.rows.length;t+=1)g.messages.rows.push(e.rows[t]),g.interaction.closed||"in"!==e.rows[t].direction||e.rows[t].read||(l[g.tab.channel+"Message"].accept({id:e.rows[t].id,UserId:g.user.id}),g.acceptedMessages.push(e.rows[t].id));return n.resolve(e)}).catch(function(e){return n.reject(e)});return n.reject()},g.timelineOptions={scrollEl:"#interaction-content"},i.$on("$destroy",function(){m.removeAllListeners(g.tab.channel+"Message:save"),m.removeAllListeners(g.tab.channel+"Message:update"),m.removeAllListeners(g.tab.channel+"Interaction:save"),m.removeAllListeners(g.tab.channel+"Interaction:update"),m.removeAllListeners("user_has_"+g.tab.channel+"_interactions:save"),m.removeAllListeners("user_has_"+g.tab.channel+"_interactions:remove")})}function t(a){return{scope:{ngBindHtmlUnsafe:"="},template:"<div ng-bind-html='trustedHtml'></div>",link:function(n){n.updateView=function(){var e,t=_.replace(n.ngBindHtmlUnsafe,'<div id="xm-mail-content"','<a style="cursor:pointer" class="toggle-details md-accent-color" onclick="document.getElementById(\''+(e="xm-mail-content-"+Math.floor(9999*Math.random()+1))+"').style.display='block'; this.parentNode.removeChild(this)\">See More</a><div id=\""+e+'" style="display:none"');n.trustedHtml=a.trustAsHtml(t)},n.$watch("ngBindHtmlUnsafe",function(e,t){n.updateView(e)})}}}e.$inject=["$cookies","$timeout","$document","$scope","$mdDialog","$q","$location","$translate","api","toasty","Auth","socket","msUtils","draftManager"],t.$inject=["$sce"],angular.module("app.dashboards").directive("ngBindHtmlUnsafe",t).filter("getChannelByItem",function(){return function(e,t,n,a){for(var i=[],s=0;s<e.length;s+=1){var o=!0;switch(t){case"voice":o=Boolean(e[s].uniqueid);break;case"chat":o=Boolean(e[s].ChatWebsiteId);break;case"mail":o=Boolean(e[s].MailAccountId);break;case"sms":o=Boolean(e[s].SmsAccountId);break;case"fax":o=Boolean(e[s].FaxAccountId);break;case"openchannel":o=Boolean(e[s].OpenchannelAccountId);break;default:o=!0}o&&n&&a&&(o=moment(e[s].createdAt).isBetween(moment(n).utcOffset(0,!0),moment(a).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds"))),o&&i.push(e[s])}return i}}).controller("AgentGeneralInteractionController",e)}(),function(){"use strict";angular.module("app.dashboards").factory("Emojis",function(){return{watchEmbedData:!1,sanitizeHtml:!1,fontSmiley:!1,emoji:!0,link:!0,linkTarget:"_blank",pdf:{embed:!0},image:{embed:!0},audio:{embed:!0},basicVideo:!1,gdevAuth:"xxxxxxxx",video:{embed:!1,width:null,height:null,ytTheme:"dark",details:!1,thumbnailQuality:"medium",autoPlay:!0},twitchtvEmbed:!0,dailymotionEmbed:!0,tedEmbed:!0,dotsubEmbed:!0,liveleakEmbed:!0,ustreamEmbed:!0,soundCloudEmbed:!0,soundCloudOptions:{height:160,themeColor:"f50000",autoPlay:!1,hideRelated:!1,showComments:!0,showUser:!0,showReposts:!1,visual:!1,download:!1},spotifyEmbed:!0,tweetEmbed:!0,tweetOptions:{maxWidth:550,hideMedia:!1,hideThread:!1,align:"none",lang:"en"},code:{highlight:!0,lineNumbers:!1},codepenEmbed:!0,codepenHeight:300,jsfiddleEmbed:!0,jsfiddleHeight:300,jsbinEmbed:!0,jsbinHeight:300,plunkerEmbed:!0,githubgistEmbed:!0,ideoneEmbed:!0,ideoneHeight:300}})}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this,m=25,u=1024*m*1024;c.separatorKeys=[a.KEY_CODE.ENTER,a.KEY_CODE.COMMA,a.KEY_CODE.TAB],c.message={from:i.localstationid,to:_.isNil(s.to)||_.isEmpty(s.to)?[]:s.to,attachments:[]},c.ngFlowOptions={target:"api/attachments",singleFile:!0,maxChunkRetries:1,chunkSize:u,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},c.ngFlow={flow:{}},c.send=function(e){1===c.message.attachments.length?c.message.to.length?(s.draft=void 0,n.hide({from:c.message.from,to:c.message.to,attach:c.message.attachments.length,attachments:c.message.attachments})):l.error("To is mandatory"):l.error("Attachment is mandatory")},c.upload=function(){c.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},c.ngFlow.flow.upload()},c.fileSuccess=function(e,t){try{(t=JSON.parse(t)).size=e.size,c.message.attachments.push(t)}catch(e){console.error(e)}},c.fileAdded=function(e){var t=["pdf","tif"];if(!_.includes(t,e.getExtension()))return l.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extensions: "+t.join()}),!1;if(e.size>u)return l.error({title:"File too big",msg:"The max allowed size is "+m+"MB"}),!1;return!0},c.getContact=function(e){var t="";e.firstName&&e.firstName!==e.fax&&(t+=e.firstName+" ");e.lastName&&e.lastName!==e.fax&&(t+=e.lastName+" ");return t+="<"+e.fax+">"},c.contactSearch=function(e){return i&&i.ListId?r.cmContact.get({ListId:i.ListId,nolimit:!0,filter:e,fields:"firstName,lastName,fax"}).$promise.then(function(e){return e.rows}):[]},c.transformContact=function(e){var t=e;if(_.isObject(e))return e.fax;if(n=t,!/[&\/\\#,()$~%.'":;*?<>{}\s\\|a-zA-Z\pS!òàùè…_§°çéì-]/.test(n))return t;var n;return l.error("Fax "+t+" is not valid"),null},c.closeDialog=function(){s.draft=c.message,n.cancel()}}e.$inject=["$cookies","$window","$mdDialog","$mdConstant","account","message","type","api","toasty","$q"],angular.module("app.dashboards").controller("ComposeFaxInteractionDialogController",e)}(),function(){"use strict";function e(t,e,i,n,a,s,o,r,l,d,c,m,u,p){var g=this,v=25,h=1024*v*1024;g.currentUser=m.getCurrentUser(),g.secret="note"===r,g.hiddenCC=!0,g.hiddenBCC=!0,g.verifySmtp=!0,g.errors=[],g.separatorKeys=[n.KEY_CODE.ENTER,n.KEY_CODE.COMMA,n.KEY_CODE.TAB],g.searchTextChange=function(t){var n=c.defer(),a=[];return l.cannedAnswer.get({filter:t,MailAccountId:s.id}).$promise.then(function(e){return a=_.concat(a,e.rows),l.cannedAnswer.get({filter:t}).$promise}).then(function(e){a=_.concat(a,_.filter(e.rows,function(e){return!(e.MailAccountId||e.FaxAccountId||e.SmsAccountId||e.OpenchannelAccountId||e.ChatWebsiteId)})),n.resolve(a)}).catch(function(e){n.reject(e)}),n.promise},g.selectedItemChange=function(t){if(t&&t.value&&g.ckEditorInstance)try{var e=_.template(t.value),n={user:g.currentUser,account:s,interaction:u,contact:u&&u.Contact?u.Contact:{}};g.ckEditorInstance.insertHtml(e(n))}catch(e){console.error(e),g.ckEditorInstance.insertHtml(t.value)}document.getElementById("html-area").focus(),g.selectedItem=null},g.onReadyEditor=function(e){try{g.ckEditorInstance=CKEDITOR.instances["html-area"]}catch(e){console.error("Unable to get Html Editor instance",e)}},_.templateSettings.interpolate=/{{([\s\S]+?)}}/g,g.fromTemplate=_.template("{{ name }} <{{ email }}>"),g.replyTemplate=_.template("On {{ date }}, at {{ time }}, {{ from }} wrote:"),g.forwardTemplate=_.template("Begin forwarded message:<br><br><strong>From:</strong> {{ from }}<br><strong>Subject:</strong> {{ subject }}<br><strong>Date:</strong> {{ date }}, at {{ time }}<br><strong>To:</strong> {{ to }}"),g.message={from:g.fromTemplate({name:s.name,email:s.email||s.Smtp.user}),to:[],cc:[],bcc:[],body:y(),type:r,attachments:[],showLastMessage:!0},g.draft=null,g.ckeditor={skin:"office2013",startupFocus:!0,language:"en",allowedContent:!0,extraPlugins:"font,colorbutton,autogrow,autoembed,autocorrect,googlethisterm,pastebase64",toolbarGroups:[{name:"styles",groups:["styles"]},{name:"clipboard",groups:["undo"]},{name:"colors",groups:["colors"]},{name:"basicstyles",groups:["basicstyles"]},{name:"paragraph",groups:["list","indent","align"]}],autoGrow_onStartup:!0,autoGrow_minHeight:g.secret?160:300,autoGrow_maxHeight:e.innerHeight-400,autocorrect_enabled:!0,disableNativeSpellChecker:!1,enterMode:CKEDITOR.ENTER_BR,font_defaultLabel:s.fontFamily?s.fontFamily.split(",")[0]:"Arial",fontSize_defaultLabel:s.fontSize||"12",removePlugins:"magicline"};for(var f=[],b=8;b<=72;b++)f.push(b+"/"+b+"pt");switch(g.ckeditor.fontSize_sizes=f.join(";"),g.ngFlowOptions={target:"api/attachments",singleFile:!0,maxChunkRetries:1,chunkSize:h,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},g.ngFlow={flow:{}},g.reply=function(e){angular.isDefined(o)&&(g.message.type="reply",g.message.to="in"===o.direction?o.from.split(","):o.to.split(","),g.message.subject=_.startsWith(o.subject,"Re:")?o.subject:"Re: "+o.subject,g.message.inReplyTo=o.messageId,g.message.body=y(),g.message.attachments=[],e&&o.cc&&(g.hiddenCC=!1,g.message.cc=o.cc.split(",")),g.message.showLastMessage=!1)},g.newMail=function(){angular.isDefined(o)&&(g.message.type="new",g.message.to=o.to?o.to.split(","):[])},g.forward=function(){if(angular.isDefined(o)){if(g.message.type="forward",g.message.subject=_.startsWith(o.subject,"Fwd:")?o.subject:"Fwd: "+o.subject,g.message.body=y(),o.Attachments&&o.Attachments.length)for(var e=0;e<o.Attachments.length;e++)g.message.attachments.push(o.Attachments[e]);g.message.showLastMessage=!1}},g.editDraft=function(){g.isDraft=!0,angular.isDefined(o)&&(o.savedAsDraft=!1,g.message=angular.copy(o),_.isEmpty(g.message.cc)||(g.hiddenCC=!1),_.isEmpty(g.message.bcc)||(g.hiddenBCC=!1))},g.send=function(e,t,n){if(g.message.to&&g.message.body)if(g.message.to.length)if(_.isEmpty(g.message.subject)){var a=i.confirm({skipHide:!0}).title("Warning").textContent("This message has no subject. Are you sure you want to send it?").ariaLabel("Warning").targetEvent(e).ok("Send Anyway").cancel("Cancel");i.show(a).then(function(){A(t,n)})}else A(t,n);else d.error("To is mandatory")},g.note=function(){g.type="note",g.secret=!0,g.message.body='<div style="font-family:'+s.fontFamily+";font-size:"+s.fontSize+'pt"><p></p></div>'},g.addNote=function(){g.message.body&&i.hide({secret:!0,body:g.message.body,attach:g.message.attachments.length,attachments:g.message.attachments})},g.upload=function(e){g.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+t.get("motion.token")},g.ngFlow.flow.upload()},g.fileSuccess=function(e,t){try{(t=JSON.parse(t)).size=e.size,g.message.attachments.push(t)}catch(e){console.error(e)}},g.deleteAttachment=function(e){g.message.attachments=_.reject(g.message.attachments,{id:e.id}),l.attachment.delete({id:e.id}).$promise.then(function(){d.success({title:"Attachment deleted!",msg:e.name?e.name+" has been deleted!":""})})},g.fileAdded=function(e){if(e.size>h)return d.error({title:"File too big",msg:"The max allowed size is "+v+"MB"}),!1;return!0},g.getContact=function(e){var t="";e.firstName&&e.firstName!==e.email&&(t+=e.firstName+" ");e.lastName&&e.lastName!==e.email&&(t+=e.lastName+" ");return t+="<"+e.email+">"},g.contactSearch=function(e){return s&&s.ListId?l.cmContact.get({ListId:s.ListId,nolimit:!0,filter:e,fields:"firstName,lastName,email"}).$promise.then(function(e){return e.rows}):[]},g.transformContact=function(e,t){if(_.isObject(e))return(g.contact=e).email;if(_.isString(e)){if(E(e))return g.contact={email:e},e;for(var n=e.split(","),a=0;a<n.length;a+=1)E(n[a])?_.isArray(t)&&_.indexOf(t,n[a])<0&&t.push(n[a]):d.error("Email "+n[a]+" is not valid");return g.contact={email:e.split(",")[0]},null}return d.error("Email field is not valid"),null},g.saveDraft=function(){g.message.savedAsDraft=!0,g.draft=p.getByInteraction(u.id);var e={account:s,message:g.message,contact:g.contact,interaction:u};if(g.draft&&!g.isDraft){var t=i.confirm({skipHide:!0}).title(a.instant("DASHBOARDS.DRAFT_SAVE_WARNING_TITLE")).content(a.instant("DASHBOARDS.DRAFT_SAVE_WARNING_MESSAGE")).ariaLabel("Save draft").ok(a.instant("DASHBOARDS.OVERWRITE")).cancel(a.instant("DASHBOARDS.CANCEL"));i.show(t).then(function(){i.hide(e)})}else i.hide(e)},g.closeDialog=function(){i.cancel()},g.loadLastMessage=function(){g.message.body+=S(g.message.type)},r){case"reply":g.reply(!1);break;case"replyAll":g.reply(!0);break;case"forward":g.forward();break;case"draft":g.editDraft();break;case"new":g.newMail();break;case"note":g.note()}function A(e,t){var n={from:g.message.from,to:g.message.to.join(","),cc:g.message.cc.join(","),bcc:g.message.bcc.join(","),subject:g.message.subject,body:g.message.showLastMessage?g.message.body:g.message.body+S(g.message.type),inReplyTo:g.message.inReplyTo,attach:g.message.attachments.length,attachments:g.message.attachments,Interaction:{lastMsgDirection:"out",lastMsgBody:g.message.body,substatus:t},isDraft:g.isDraft};n.html='<div id="xm-mail-content">'+_.replace(n.body,'<div id="xm-mail-content"',"<div")+"</div>",e&&(n.Interaction.closed=!0),i.hide(n)}function E(e){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)}function y(){return'<div style="font-family:'+s.fontFamily+";font-size:"+s.fontSize+'pt">'+function(){if(_.isNil(s.template))return"";try{return _.template(s.template)({user:g.currentUser,account:s,interaction:u,contact:u&&u.Contact?u.Contact:{}})}catch(e){return console.error(e),""}}()+"</div>"}function S(e){var t,n,a='<div id="xm-mail-content"><blockquote type="cite">';switch(e){case"reply":case"replyAll":a+=g.replyTemplate({date:moment(o.createdAt).format("D MMM YYYY")||"",time:moment(o.createdAt).format("HH:mm")||"",from:_.escape(o.from)||""});break;case"forward":a+=g.forwardTemplate({date:moment(o.createdAt).format("D MMM YYYY")||"",time:moment(o.createdAt).format("HH:mm")||"",from:_.escape(o.from)||"",to:_.escape(o.to)||"",subject:_.escape(o.subject)||""})}return a+="<br><br>",a+=(t=o.body?_.replace(o.body,'<div id="xm-mail-content"',"<div"):"",(n=t.match(/\<body[^>]*\>([^]*)\<\/body/m))?n[1]:t),a+="</blockquote></div>",e?a:""}l.mailSubstatus.get({nolimit:!0}).$promise.then(function(e){g.subStatuses=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}),g.secret||l.mailAccount.verifySmtp({id:s.id}).$promise.catch(function(e){g.verifySmtp=!1,g.errors.push({message:e.data,type:e.status}),g.errors.push({message:"You can't reply or send an email. Please contact the administrator!",type:"500"})})}e.$inject=["$cookies","$window","$mdDialog","$mdConstant","$translate","account","message","type","api","toasty","$q","Auth","interaction","draftManager"],angular.module("app.dashboards").controller("ComposeMailInteractionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;switch(p.currentUser=u.getCurrentUser(),p.errors=[],p.separatorKeys=[i.KEY_CODE.ENTER,i.KEY_CODE.COMMA,i.KEY_CODE.TAB],p.searchTextChange=function(t){var n=c.defer(),a=[];return l.cannedAnswer.get({filter:t,OpenchannelAccountId:s.id}).$promise.then(function(e){return a=_.concat(a,e.rows),l.cannedAnswer.get({filter:t}).$promise}).then(function(e){a=_.concat(a,_.filter(e.rows,function(e){return!(e.MailAccountId||e.FaxAccountId||e.SmsAccountId||e.OpenchannelAccountId||e.ChatWebsiteId)})),n.resolve(a)}).catch(function(e){n.reject(e)}),n.promise},p.selectedItemChange=function(t){if(t){try{_.templateSettings.interpolate=/{{([\s\S]+?)}}/g;var e=_.template(t.value),n={user:p.currentUser,account:s};p.message.body+=" "+e(n),p.ctrlMethods.setText(p.message.body)}catch(e){p.message.body+=" "+t.value,p.ctrlMethods.setText(p.message.body)}p.selectedItem=null}},p.note=function(){p.secret=!0},p.addNote=function(){p.message.body&&a.hide({secret:!0,body:p.message.body})},p.ctrlMethods={},p.message={from:s.phone,to:_.isNil(o.to)||_.isEmpty(o.to)?[]:o.to,body:""},p.send=function(e){p.message.to&&p.message.body&&(p.message.to.length?(t=p.message.body,a.hide({to:p.message.to.join(","),body:t})):d.error("To is mandatory"));var t},p.getContact=function(e){var t="";e.firstName&&e.firstName!==e[s.mapKey]&&(t+=e.firstName+" ");e.lastName&&e.lastName!==e[s.mapKey]&&(t+=e.lastName+" ");return t+="<"+e[s.mapKey]+">"},p.closeDialog=function(){a.cancel()},p.contactSearch=function(e){if(s&&s.ListId){var t="firstName,lastName,phone,mobile";return s.mapKey&&(t+=","+s.mapKey),l.cmContact.get({ListId:s.ListId,nolimit:!0,filter:e,fields:t}).$promise.then(function(e){return e.rows})}return[]},p.transformContact=function(e){var t=e;if(_.isObject(t))return e[s.mapKey];return t},r){case"note":p.note()}}e.$inject=["$cookies","$timeout","$window","$mdDialog","$mdConstant","account","message","type","api","toasty","$q","$translate","Auth"],angular.module("app.dashboards").controller("ComposeOpenchannelInteractionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;switch(p.currentUser=u.getCurrentUser(),p.errors=[],p.separatorKeys=[i.KEY_CODE.ENTER,i.KEY_CODE.COMMA,i.KEY_CODE.TAB],p.searchTextChange=function(t){var n=c.defer(),a=[];return l.cannedAnswer.get({filter:t,SmsAccountId:s.id}).$promise.then(function(e){return a=_.concat(a,e.rows),l.cannedAnswer.get({filter:t}).$promise}).then(function(e){a=_.concat(a,_.filter(e.rows,function(e){return!(e.MailAccountId||e.FaxAccountId||e.SmsAccountId||e.OpenchannelAccountId||e.ChatWebsiteId)})),n.resolve(a)}).catch(function(e){n.reject(e)}),n.promise},p.selectedItemChange=function(t){if(t){try{_.templateSettings.interpolate=/{{([\s\S]+?)}}/g;var e=_.template(t.value),n={user:p.currentUser,account:s};p.message.body+=" "+e(n),p.ctrlMethods.setText(p.message.body)}catch(e){p.message.body+=" "+t.value,p.ctrlMethods.setText(p.message.body)}p.selectedItem=null}},p.note=function(){p.secret=!0},p.addNote=function(){p.message.body&&a.hide({secret:!0,body:p.message.body})},p.ctrlMethods={},p.message={from:s.phone,to:_.isNil(o.to)||_.isEmpty(o.to)?[]:o.to,body:""},p.send=function(e){p.message.to&&p.message.body&&(p.message.to.length?(t=p.message.body,a.hide({to:p.message.to.join(","),body:t})):d.error("To is mandatory"));var t},p.getContact=function(e){var t="";e.firstName&&e.firstName!==e.mobile&&(t+=e.firstName+" ");e.lastName&&e.lastName!==e.mobile&&(t+=e.lastName+" ");return t+="<"+e.mobile+">"},p.closeDialog=function(){a.cancel()},p.contactSearch=function(e){if(s&&s.ListId)return l.cmContact.get({ListId:s.ListId,nolimit:!0,filter:e,fields:"firstName,lastName,mobile"}).$promise.then(function(e){return e.rows});return[]},p.transformContact=function(e){var t=e;if(_.isObject(t))return e.mobile;if(n=t,/^(\+|\d)[0-9]{7,16}$/.test(n))return t;var n;return d.error("Mobile "+t+" is not valid"),null},r){case"note":p.note()}}e.$inject=["$cookies","$timeout","$window","$mdDialog","$mdConstant","account","message","type","api","toasty","$q","$translate","Auth"],angular.module("app.dashboards").controller("ComposeSmsInteractionDialogController",e)}(),function(){"use strict";function e(t,n,a,e,i,s,o){var r,l=this;function d(e){t.hide(e)}l.errors=[],l.dispositions={count:0,rows:[]},l.globalDispositions={count:0,rows:[]},l.interaction=angular.copy(e),l.interaction.disposition||(l.interaction.disposition=null),l.channel=i,l.apiRoute=l.channel+"Interaction",l.apiAccountRoute=l.channel+("chat"===l.channel?"Website":"Account"),l.accountProperty=_.capitalize(l.channel)+("chat"===l.channel?"Website":"Account")+"Id",l.mandatoryDisposition=!1,l.mandatoryDispositionPause="",l.wasUserInPause=s.voicePause||s.chatPause||s.mailPause||s.openchannelPause||s.faxPause,l.saveDisposition=function(e){l.errors=[],l.interaction.UserId=s.id,l.interaction.closed=!0,l.interaction.closeReason="agent",a[l.apiRoute]?a[l.apiRoute].update(_.pick(l.interaction,["MailAccountId","FaxAccountId","SmsAccountId","ChatWebsiteId","OpenchannelAccountId","closed","closeReason","disposition","id","note","UserId"])).$promise.then(function(e){l.interaction=e,o.removeByInteraction(l.interaction.id),n.success({title:"Interaction properly closed!",msg:"Interaction has been closed!"})}).then(function(){d(!0)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){l.errors=e.data.errors||[{message:e.toString(),type:"api.variable.update"}];for(var t=0;t<e.data.errors.length;t++)n.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.variable.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})}):d(!1)},l.closeDialog=d,(r={fields:"id,name",sort:"name",nolimit:!0})[l.accountProperty]=e[l.accountProperty],a[l.apiAccountRoute].get({id:e[l.accountProperty]}).$promise.then(function(e){l.mandatoryDisposition=e.mandatoryDisposition,l.mandatoryDisposition&&(l.mandatoryDispositionPause=e.mandatoryDispositionPause.name)}).then(function(){l.mandatoryDisposition&&!l.wasUserInPause&&a.user.pause({id:s.id,type:l.mandatoryDispositionPause||"DEFAULT PAUSE"}).$promise.then(function(e){}).catch(function(e){console.error(e)})}),a.disposition.get(r).$promise.then(function(e){l.dispositions=e}).catch(function(e){console.error(e)}),a.disposition.get({MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null"}).$promise.then(function(e){l.globalDispositions=e}).catch(function(e){console.error(e)})}e.$inject=["$mdDialog","toasty","api","interaction","channel","user","draftManager"],angular.module("app.dashboards").controller("DisposeInteractionDialogController",e)}(),function(){"use strict";function e(t,n,e,a,i,s){var o=this;function r(e){t.hide(e)}o.errors=[],o.tags=s,o.interaction=angular.copy(a),o.interaction.Tags=_.map(o.interaction.Tags,function(e){return{id:e.id,name:e.name,color:e.color}}),o.channel=i,o.autocompleteRequireMatch=!0,o.saveTag=function(){{if(o.errors=[],e[o.apiRoute])return e[o.apiRoute].addTags({id:o.interaction.id,ids:_.map(o.interaction.Tags,"id")}).$promise.then(function(){n.success({title:"Interaction properly tagged!",msg:"Interaction has been tagged!"}),a.Tags=o.interaction.Tags,r(!0)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)n.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.variable.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})});r(!1)}},o.closeDialog=r,o.apiRoute=o.channel+"Interaction"}e.$inject=["$mdDialog","toasty","api","interaction","channel","tags"],angular.module("app.dashboards").controller("TagInteractionDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;function d(e){t.hide(e)}l.currentUser=n.getCurrentUser(),l.channel=s.toLowerCase(),l.message=o,l.account=r,l.transfer={id:0,type:"queue"},l.agents=l.queues={count:0,rows:[]},l.queueMethod=l.channel+"Queue",l.queueNotifyMethod=l.channel+"QueueNotify",l.onTransfer=function(){d(!0),e(function(){return a.rpc["agent"===l.transfer.type?"agentNotify":l.queueNotifyMethod]({id:l.transfer.id,messageId:l.message.id,channel:l.channel}).$promise.then(function(e){i.success({title:"Trasfer properly done!",msg:"Transfer "+l.transfer.type+" has been done!"})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){l.errors=e.data.errors||[{message:e.toString(),type:"api.rpc.notify"}];for(var t=0;t<e.data.errors.length;t++)i.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.rpc.notify",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},5e3)},l.closeDialog=d,l.init=function(){return a.user.get({fields:"id,name",role:"agent",nolimit:!0}).$promise.then(function(e){return l.agents=e||{count:0,rows:[]},a[l.queueMethod].get({fields:"id,name",nolimit:!0}).$promise}).then(function(e){l.queues=e||{count:0,rows:[]}}).catch(function(e){console.error(e)})},l.init()}e.$inject=["$mdDialog","$timeout","Auth","api","toasty","channel","message","account"],angular.module("app.dashboards").controller("TransferMessageDialogController",e)}(),function(){"use strict";function e(i,s,o,e,l,d,t,n,a,r,c){var m=this;function u(){try{i.$parent.$parent.$parent.vm.updateLocalStorage()}catch(e){d.error({title:"ERROR UPDATE LOCAL TABS",msg:"Error updating locally stored tabs"})}}function p(n,e){var r=t.getCurrentUser();l.jscriptySessionReport.save({starttime:m.starttime,membername:m.call&&m.call.membername?m.call.membername:r.name,calleridname:m.call&&m.call.calleridname?m.call.calleridname:void 0,calleridnum:m.call&&m.call.calleridnum?m.call.calleridnum:void 0,queue:m.call&&m.call.queue?m.call.queue:void 0,uniqueid:m.call&&m.call.uniqueid?m.call.uniqueid:void 0,VoiceQueueId:m.call&&m.call["xmd-voicequeueid"]?m.call["xmd-voicequeueid"]:void 0,ProjectId:m.project&&m.project.id?m.project.id:void 0,projectname:m.project&&m.project.name?m.project.name:void 0,ContactId:m.contact&&m.contact.id?m.contact.id:void 0,completed:e}).$promise.then(function(e){if(e)for(var t=m.getResponseSheetHeaders(),n=m.getResponseSheetRow(),a=m.getQuestionWithResponseList(),i=0;i<t.length;i+=1)if(!_.isEmpty(n[i])){l.jscriptyQuestionReport.save({question:t[i],answer:n[i],questionId:a[i].id,membername:m.call&&m.call.membername?m.call.membername:r.name,calleridname:m.call&&m.call.calleridname?m.call.calleridname:void 0,calleridnum:m.call&&m.call.calleridnum?m.call.calleridnum:void 0,queue:m.call&&m.call.queue?m.call.queue:void 0,uniqueid:m.call&&m.call.uniqueid?m.call.uniqueid:void 0,SessionId:e.id,ProjectId:m.project.id,projectname:m.project.name});for(var s=n[i].toString().split(";"),o=0;o<s.length;o+=1)l.jscriptyAnswerReport.save({question:t[i],questionId:a[i].id,answer:s[o].trim(),membername:m.call&&m.call.membername?m.call.membername:r.name,calleridname:m.call&&m.call.calleridname?m.call.calleridname:void 0,calleridnum:m.call&&m.call.calleridnum?m.call.calleridnum:void 0,queue:m.call&&m.call.queue?m.call.queue:void 0,uniqueid:m.call&&m.call.uniqueid?m.call.uniqueid:void 0,SessionId:e.id,ProjectId:m.project.id,projectname:m.project.name})}return e}).then(function(e){e?n.resolve(!0):n.reject()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.contact.save"}];for(var t=0;t<e.data.errors.length;t+=1)d.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.contact.save",msg:e.data?JSON.stringify(e.data.message):e.toString()});n.reject()})}m.formViewer={},m.showResetButton=!0,m.showIncompleteSubmitButton=!1,m.detectBrowser=c.detectBrowser(),m.onSubmit=function(e,t){var n=s.defer();if(t){var a=o.confirm().title("Would you like to save your survey?").textContent("").ariaLabel("survey").targetEvent(e).ok("YES").cancel("NO");o.show(a).then(function(){p(n,!1)},function(){n.resolve()})}else p(n,!0);return n.promise.then(function(e){e&&(d.success({title:"Session saved",msg:"Your survey session has been properly saved!"}),function(e){try{i.$parent.$parent.$parent.vm.removeTab(e)}catch(e){d.error({title:"ERROR REMOVE TAB",msg:"Error while removing tab"})}}(m.tab))}).catch(function(e){d.error({title:"Session save error",msg:"There has been an error while trying to save your survey session!"})})},m.openContact=function(e,t){try{i.$parent.$parent.$parent.vm.addContactTab(t)}catch(e){d.error({title:"ERROR OPEN CONTACT",msg:"Jscripty can't open the contact"})}},m.isJsonString=function(e){if(_.isNil(e))return!1;try{JSON.parse(e)}catch(e){return!1}return!0},m.getResponseSheet=function(){return e.getResponseSheet(m.project.formData,m.project.responseData,!1)},m.getResponseSheetRow=function(){return e.getResponseSheetRow(m.project.formData,m.project.responseData)},m.getResponseSheetHeaders=function(){return e.getResponseSheetHeaders(m.project.formData,!1)},m.getQuestionWithResponseList=function(){return e.getQuestionWithResponseList(m.project.formData,m.project.responseData)},m.init=function(e){m.tab=e,m.tab&&(m.call=m.tab.call,m.starttime=m.tab.openedAt,m.contact=m.tab.contact,m.project=m.tab.project,m.project&&(_.isObjectLike(m.project.formData)?m.project.formData=m.project.formData:m.isJsonString(m.project.formData)?m.project.formData=JSON.parse(m.project.formData):m.project.formData=void 0,m.project.responseData=m.project.responseData||{},void 0!==m.project.currentPage&&r(function(){a.$broadcast("mwForm.pageEvents.changePage",{page:m.project.currentPage})}),i.$on("mwForm.pageEvents.pageCurrentChanged",function(e,t){if(t.currentPage&&(m.project.currentPage=t.currentPage.number-1,u(),m.project.enableUncompleteSave&&(1<=t.currentPage.number&&t.currentPage.number<m.project.formData.pages.length?m.showIncompleteSubmitButton=!0:m.showIncompleteSubmitButton=!1),m.project.formData&&m.project.formData.pages))for(var n=0,a=m.project.formData.pages.length;n<a;n++)if(t.currentPage.number<n+1&&m.project.formData.pages[n].elements)for(var i=0,s=m.project.formData.pages[n].elements.length;i<s;i++)"question"===m.project.formData.pages[n].elements[i].type&&m.project.formData.pages[n].elements[i].question&&delete m.project.responseData[m.project.formData.pages[n].elements[i].question.id]})))},m.resetViewer=function(e){if(m.formViewer.reset){var t=o.confirm().title(n.instant("JSCRIPTY.DO_YOU_WANT_TO_RESET_SESSION")).content(n.instant("JSCRIPTY.ALL_SURVEY_DATA_WILL_BE_LOST")).textContent("").ariaLabel("survey").targetEvent(e).ok(n.instant("JSCRIPTY.YES")).cancel(n.instant("JSCRIPTY.NO"));o.show(t).then(function(){m.showIncompleteSubmitButton=!1,m.project.currentPage=void 0,u(),m.formViewer.reset()})}}}e.$inject=["$scope","$q","$mdDialog","mwFormResponseUtils","api","toasty","Auth","$translate","$rootScope","$timeout","msUtils"],angular.module("app.dashboards").controller("AgentGeneralJscriptyController",e)}(),function(){"use strict";function e(n,a,e,t,i){var s=this;function o(){return function(e){if(404===e.status)a.info({title:n.instant("DASHBOARDS.ATTENTION"),msg:n.instant("DASHBOARDS.ACCEPT_ELSEWHERE")});else if(e.data&&e.data.errors&&e.data.errors.length){s.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelMessage.accept"}];for(var t=0;t<e.data.errors.length;t+=1)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelMessage.accept",msg:e.data?JSON.stringify(e.data.message):e.toString()})}}s.notification=e,s.user=i.getCurrentUser(),s.accept=function(e){{if(t[s.notification.channel+"Message"])return t[s.notification.channel+"Message"].accept({id:s.notification.id,UserId:s.user.id,manual:!0}).$promise.then(function(e){a.success({title:"Message properly accepted!",msg:"Message has been accepted!"})}).catch(o());a.error({title:"API:ERROR",msg:"API accept message not found: "+s.notification.channel+"Message"})}},s.reject=function(e){{if(t[s.notification.channel+"Message"])return t[s.notification.channel+"Message"].reject({id:s.notification.id,UserId:s.user.id}).$promise.then(function(e){a.success({title:"Message properly rejected!",msg:"Message has been rejected!"})}).catch(o());a.error({title:"API:ERROR",msg:"API reject message not found: "+s.notification.channel+"Message"})}}}e.$inject=["$translate","toasty","notification","api","Auth"],angular.module("app.dashboards").controller("NotificationController",e)}(),function(){"use strict";angular.module("app.dashboards").controller("AgentGeneralPopupController",function(){var t=this;t.init=function(e){t.tab=e,t.tab&&(t.tab.saved=!0,t.html=t.tab.html)}})}(),function(){"use strict";function e(e,t,n,a){var i=this,s=[];function o(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(s,e.id)||(i.inbound.talking+=1,s.push(e.id),!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),e.closed&&"abandoned"===e.disposition?(i.inbound.abandoned+=1,!t&&i.inbound.waiting&&(i.inbound.waiting-=1)):e.closed&&!e.UserId&&e.disposition?(i.inbound.unmanaged+=1,!t&&i.inbound.waiting&&(i.inbound.waiting-=1)):e.closed&&e.UserId&&(i.inbound.sumBillable+=moment(e.closedAt).diff(moment(e.read1stAt),i.config.unit),i.inbound.sumHoldTime+=moment(e.read1stAt).diff(moment(e.createdAt),i.config.unit),i.inbound.answered+=1,!t&&i.inbound.talking&&(i.inbound.talking-=1)),t&&(i.inbound.total+=1)}function r(){i.inbound.abandonRate=Math.round((i.inbound.abandoned+i.inbound.unmanaged)/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.answerRate=Math.round(i.inbound.answered/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.avgHoldTime=moment.duration(Math.round(i.inbound.sumHoldTime/i.inbound.answered),i.config.unit).format(i.config.format,i.config),i.inbound.avgTalkTime=moment.duration(Math.round(i.inbound.sumBillable/i.inbound.answered),i.config.unit).format(i.config.format,i.config)}function l(e){return!!_.some(i.chatWebsites,{id:e.ChatWebsiteId})}function d(e){return moment(e).isBetween(moment().startOf("day").toString(),moment().endOf("day").toString())}i.config={format:"hh:mm:ss",unit:"seconds",trim:!1},i.inbound={waiting:0,talking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0},i.chatWebsites=a?_.keyBy(a.rows?a.rows:[],"id"):{},i.onSaveChatInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!0),r())},i.onUpdateChatInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!1),r())},t.on("chatInteraction:save",i.onSaveChatInteraction),t.on("chatInteraction:update",i.onUpdateChatInteraction),function(){if(0<Object.keys(i.chatWebsites).length)for(var e=0;e<n.rows.length;e+=1)if(l(n.rows[e])){var t=n.rows[e];o(t,!0),r()}}(),e.$on("$destroy",function(){t.removeAllListeners("chatInteraction:save"),t.removeAllListeners("chatInteraction:update")})}e.$inject=["$scope","socket","chatInteractions","chatWebsites"],angular.module("app.dashboards").controller("UserChatDashboardGeneralController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r){var l=this;function d(){s({queues:l.outboundQueues,rpcQueues:l.rpcQueues}).then(function(e){l.inbound=e})}function c(){o({rpcCampaigns:l.rpcCampaigns}).then(function(e){l.ivr=e})}l.outboundQueues=a?_.keyBy(a.rows?a.rows:[],"id"):{},l.rpcQueues=i?_.keyBy(i.rows?i.rows:[],"id"):{},l.rpcCampaigns=r?_.keyBy(r.rows?r.rows:[],"id"):{},l.ivr={originated:0,limitCalls:0},l.inbound={waiting:0,talking:0,pTalking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0,outboundDropCallsDayCallersExit:0,outboundDropCallsDayTimeout:0},l.onSaveQueue=function(e){l.outboundQueues[e.id]&&l.rpcQueues[e.id]&&(l.rpcQueues[e.id]=e)},l.onSaveCampaign=function(e){l.rpcCampaigns[e.id]&&(l.rpcCampaigns[e.id]=e)},n.onWithoutApply("voice_queue:save",l.onSaveQueue),l.interval=t(function(){d(),c()},999),n.onWithoutApply("campaign:save",l.onSaveCampaign),d(),c(),e.$on("$destroy",function(){n.removeAllListeners("voice_queue:save"),n.removeAllListeners("campaign:save"),l.interval&&t.cancel(l.interval)})}e.$inject=["$scope","$interval","socket","outboundQueues","rpcQueues","initializeRealtimeQueue","initializeRealtimeCampaign","rpcCampaigns"],angular.module("app.dashboards").controller("UserVoiceDashboardDialerController",e)}(),function(){"use strict";function e(e,t,n,a){var i=this,s=[];function o(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(s,e.id)||(i.inbound.talking+=1,s.push(e.id),!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),e.closed&&e.UserId&&(i.inbound.sumBillable+=moment(e.closedAt).diff(moment(e.read1stAt),i.config.unit),i.inbound.sumHoldTime+=moment(e.read1stAt).diff(moment(e.createdAt),i.config.unit),i.inbound.answered+=1,!t&&i.inbound.talking&&(i.inbound.talking-=1)),e.closed&&!e.UserId&&(i.inbound.unmanaged+=1,!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),t&&(i.inbound.total+=1)}function r(){i.inbound.abandonRate=Math.round((i.inbound.abandoned+i.inbound.unmanaged)/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.answerRate=Math.round(i.inbound.answered/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.avgHoldTime=moment.duration(Math.round(i.inbound.sumHoldTime/i.inbound.answered),i.config.unit).format(i.config.format,i.config),i.inbound.avgTalkTime=moment.duration(Math.round(i.inbound.sumBillable/i.inbound.answered),i.config.unit).format(i.config.format,i.config)}function l(e){return!!_.some(i.faxAccounts,{id:e.FaxAccountId})}function d(e){return moment(e).isBetween(moment().startOf("day").toString(),moment().endOf("day").toString())}i.config={format:"hh:mm:ss",unit:"seconds",trim:!1},i.inbound={waiting:0,talking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0},i.faxAccounts=a?_.keyBy(a.rows?a.rows:[],"id"):{},i.onSaveFaxInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!0),r())},i.onUpdateFaxInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!1),r())},t.on("faxInteraction:save",i.onSaveFaxInteraction),t.on("faxInteraction:update",i.onUpdateFaxInteraction),function(){if(0<Object.keys(i.faxAccounts).length)for(var e=0;e<n.rows.length;e+=1)if(l(n.rows[e])){var t=n.rows[e];o(t,!0),r()}}(),e.$on("$destroy",function(){t.removeAllListeners("faxInteraction:save"),t.removeAllListeners("faxInteraction:update")})}e.$inject=["$scope","socket","faxInteractions","faxAccounts"],angular.module("app.dashboards").controller("UserFaxDashboardGeneralController",e)}(),function(){"use strict";function e(e,t,n,a){var i=this,s=[];function o(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(s,e.id)||(i.inbound.talking+=1,s.push(e.id),!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),e.closed&&e.UserId&&(i.inbound.sumBillable+=moment(e.closedAt).diff(moment(e.read1stAt),i.config.unit),i.inbound.sumHoldTime+=moment(e.read1stAt).diff(moment(e.createdAt),i.config.unit),i.inbound.answered+=1,!t&&i.inbound.talking&&(i.inbound.talking-=1)),e.closed&&!e.UserId&&(i.inbound.unmanaged+=1,!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),t&&(i.inbound.total+=1)}function r(){i.inbound.abandonRate=Math.round((i.inbound.abandoned+i.inbound.unmanaged)/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.answerRate=Math.round(i.inbound.answered/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.avgHoldTime=moment.duration(Math.round(i.inbound.sumHoldTime/i.inbound.answered),i.config.unit).format(i.config.format,i.config),i.inbound.avgTalkTime=moment.duration(Math.round(i.inbound.sumBillable/i.inbound.answered),i.config.unit).format(i.config.format,i.config)}function l(e){return!!_.some(i.mailAccounts,{id:e.MailAccountId})}function d(e){return moment(e).isBetween(moment().startOf("day").toString(),moment().endOf("day").toString())}i.config={format:"hh:mm:ss",unit:"seconds",trim:!1},i.inbound={waiting:0,talking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0},i.mailAccounts=a?_.keyBy(a.rows?a.rows:[],"id"):{},i.onSaveMailInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!0),r())},i.onUpdateMailInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!1),r())},t.on("mailInteraction:save",i.onSaveMailInteraction),t.on("mailInteraction:update",i.onUpdateMailInteraction),function(){if(0<Object.keys(i.mailAccounts).length)for(var e=0;e<n.rows.length;e+=1)if(l(n.rows[e])){var t=n.rows[e];o(t,!0),r()}}(),e.$on("$destroy",function(){t.removeAllListeners("mailInteraction:save"),t.removeAllListeners("mailInteraction:update")})}e.$inject=["$scope","socket","mailInteractions","mailAccounts"],angular.module("app.dashboards").controller("UserMailDashboardGeneralController",e)}(),function(){"use strict";function e(e,t,n,a){var i=this,s=[];function o(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(s,e.id)||(i.inbound.talking+=1,s.push(e.id),!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),e.closed&&e.UserId&&(i.inbound.sumBillable+=moment(e.closedAt).diff(moment(e.read1stAt),i.config.unit),i.inbound.sumHoldTime+=moment(e.read1stAt).diff(moment(e.createdAt),i.config.unit),i.inbound.answered+=1,!t&&i.inbound.talking&&(i.inbound.talking-=1)),e.closed&&!e.UserId&&(i.inbound.unmanaged+=1,!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),t&&(i.inbound.total+=1)}function r(){i.inbound.abandonRate=Math.round((i.inbound.abandoned+i.inbound.unmanaged)/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.answerRate=Math.round(i.inbound.answered/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.avgHoldTime=moment.duration(Math.round(i.inbound.sumHoldTime/i.inbound.answered),i.config.unit).format(i.config.format,i.config),i.inbound.avgTalkTime=moment.duration(Math.round(i.inbound.sumBillable/i.inbound.answered),i.config.unit).format(i.config.format,i.config)}function l(e){return!!_.some(i.openchannelAccounts,{id:e.OpenchannelAccountId})}function d(e){return moment(e).isBetween(moment().startOf("day").toString(),moment().endOf("day").toString())}i.config={format:"hh:mm:ss",unit:"seconds",trim:!1},i.inbound={waiting:0,talking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0},i.openchannelAccounts=a?_.keyBy(a.rows?a.rows:[],"id"):{},i.onSaveOpenchannelInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!0),r())},i.onUpdateOpenchannelInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!1),r())},t.on("openchannelInteraction:save",i.onSaveOpenchannelInteraction),t.on("openchannelInteraction:update",i.onUpdateOpenchannelInteraction),function(){if(0<Object.keys(i.openchannelAccounts).length)for(var e=0;e<n.rows.length;e+=1)if(l(n.rows[e])){var t=n.rows[e];o(t,!0),r()}}(),e.$on("$destroy",function(){t.removeAllListeners("openchannelInteraction:save"),t.removeAllListeners("openchannelInteraction:update")})}e.$inject=["$scope","socket","openchannelInteractions","openchannelAccounts"],angular.module("app.dashboards").controller("UserOpenchannelDashboardGeneralController",e)}(),function(){"use strict";function e(e,t,n,a){var i=this,s=[];function o(e,t){e.closed||e.UserId||!t||(i.inbound.waiting+=1),e.closed||!e.UserId||_.includes(s,e.id)||(i.inbound.talking+=1,s.push(e.id),!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),e.closed&&e.UserId&&(i.inbound.sumBillable+=moment(e.closedAt).diff(moment(e.read1stAt),i.config.unit),i.inbound.sumHoldTime+=moment(e.read1stAt).diff(moment(e.createdAt),i.config.unit),i.inbound.answered+=1,!t&&i.inbound.talking&&(i.inbound.talking-=1)),e.closed&&!e.UserId&&(i.inbound.unmanaged+=1,!t&&i.inbound.waiting&&(i.inbound.waiting-=1)),t&&(i.inbound.total+=1)}function r(){i.inbound.abandonRate=Math.round((i.inbound.abandoned+i.inbound.unmanaged)/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.answerRate=Math.round(i.inbound.answered/(i.inbound.total-i.inbound.talking-i.inbound.waiting)*100,-2),i.inbound.avgHoldTime=moment.duration(Math.round(i.inbound.sumHoldTime/i.inbound.answered),i.config.unit).format(i.config.format,i.config),i.inbound.avgTalkTime=moment.duration(Math.round(i.inbound.sumBillable/i.inbound.answered),i.config.unit).format(i.config.format,i.config)}function l(e){return!!_.some(i.smsAccounts,{id:e.SmsAccountId})}function d(e){return moment(e).isBetween(moment().startOf("day").toString(),moment().endOf("day").toString())}i.config={format:"hh:mm:ss",unit:"seconds",trim:!1},i.inbound={waiting:0,talking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0},i.smsAccounts=a?_.keyBy(a.rows?a.rows:[],"id"):{},i.onSaveSmsInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!0),r())},i.onUpdateSmsInteraction=function(e){l(e)&&d(e.createdAt)&&(o(e,!1),r())},t.on("smsInteraction:save",i.onSaveSmsInteraction),t.on("smsInteraction:update",i.onUpdateSmsInteraction),function(){if(0<Object.keys(i.smsAccounts).length)for(var e=0;e<n.rows.length;e+=1)if(l(n.rows[e])){var t=n.rows[e];o(t,!0),r()}}(),e.$on("$destroy",function(){t.removeAllListeners("smsInteraction:save"),t.removeAllListeners("smsInteraction:update")})}e.$inject=["$scope","socket","smsInteractions","smsAccounts"],angular.module("app.dashboards").controller("UserSmsDashboardGeneralController",e)}(),function(){"use strict";function e(n){var i=[],s=function(){var n=i[0],a={waiting:0,talking:0,pTalking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0,originated:0,outboundDropCallsDayCallersExit:0,outboundDropCallsDayTimeout:0};_.forIn(n.queues,function(e,t){n.rpcQueues[t]&&(a.waiting+=n.rpcQueues[t].waiting||0,a.talking+=(n.rpcQueues[t].talking||0)+(n.rpcQueues[t].pTalking||0),a.answered+=n.rpcQueues[t].answered||0,a.abandoned+=n.rpcQueues[t].abandoned||0,a.sumHoldTime+=n.rpcQueues[t].sumHoldTime||0,a.sumBillable+=n.rpcQueues[t].sumBillable||0,a.total+=n.rpcQueues[t].total||0,a.originated+=n.rpcQueues[t].originated||0,a.outboundDropCallsDayCallersExit+=n.rpcQueues[t].outboundDropCallsDayCallersExit||0,a.outboundDropCallsDayTimeout+=n.rpcQueues[t].outboundDropCallsDayTimeout||0)});var e=a.total-a.answered-a.abandoned;a.unmanaged=0<e?e:0,a.avgHoldTime=Math.round(0<a.total?a.sumHoldTime/a.total:0),a.avgHoldTime=new Date(1e3*a.avgHoldTime).toISOString().substr(11,8),a.avgTalkTime=Math.round(0<a.answered?a.sumBillable/a.answered:0),a.avgTalkTime=new Date(1e3*a.avgTalkTime).toISOString().substr(11,8),a.answerRate=Math.round((0<a.total?a.answered/a.total*100:0)*Math.pow(10,1))/Math.pow(10,1),a.abandonRate=Math.round((0<a.total?a.abandoned/a.total*100:0)*Math.pow(10,1))/Math.pow(10,1),a.outboundDropRate=Math.round((0<a.total?a.outboundDropCallsDayTimeout/a.total*100:0)*Math.pow(10,1))/Math.pow(10,1),a.outboundAbandonRate=Math.round((0<a.total?a.outboundDropCallsDayCallersExit/a.total*100:0)*Math.pow(10,1))/Math.pow(10,1),a.outboundanswerRate=0<100-a.outboundDropRate-a.outboundAbandonRate&&a.total?100-a.outboundDropRate-a.outboundAbandonRate:0,i.shift(),n.defer.resolve(a),0<i.length&&s()};return function(e){var t=n.defer();return i.push({queues:e.queues,rpcQueues:e.rpcQueues,defer:t}),1===i.length&&s(),t.promise}}function t(n){var i=[],s=function(){var n=i[0],a={originated:0,limitCalls:0};_.forIn(n.rpcCampaigns,function(e,t){n.rpcCampaigns[t]&&(a.originated+=n.rpcCampaigns[t].originated||0,a.limitCalls+=n.rpcCampaigns[t].limitCalls||0)}),i.shift(),n.defer.resolve(a),0<i.length&&s()};return function(e){var t=n.defer();return i.push({rpcCampaigns:e.rpcCampaigns,defer:t}),1===i.length&&s(),t.promise}}function n(e,o,t,n){var r=this;r.hasPermission=function(){return t.hasPermission(101)||t.hasRole("admin")},r.license=n,e.$on("$stateChangeSuccess",function(e,t,n,a,i){var s=[];r.license.voice&&s.push("app.dashboards.general.voice"),r.license.dialer&&s.push("app.dashboards.general.dialer"),r.license.chat&&s.push("app.dashboards.general.chat"),r.license.mail&&s.push("app.dashboards.general.mail"),r.license.messaging&&s.push("app.dashboards.general.sms"),r.license.openchannel&&s.push("app.dashboards.general.openchannel"),r.license.fax&&s.push("app.dashboards.general.fax"),r.selectedTab=_.indexOf(s,t.name),r.selectedTab<0&&(r.selectedTab=0)<s.length&&o.go(_.first(s))})}e.$inject=["$q"],t.$inject=["$q"],n.$inject=["$scope","$state","Auth","license"],angular.module("app.dashboards").filter("secToTime",function(){return function(e){return new Date(1e3*e).toISOString().substr(11,8)}}).factory("initializeRealtimeQueue",e).factory("initializeRealtimeCampaign",t).controller("UserDashboardGeneralController",n)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;function r(){s({queues:o.inboundQueues,rpcQueues:o.rpcQueues}).then(function(e){o.inbound=e})}o.inboundQueues=n?_.keyBy(n.rows?n.rows:[],"id"):{},o.rpcQueues=a?_.keyBy(a.rows?a.rows:[],"id"):{},o.inbound={waiting:0,talking:0,answered:0,abandoned:0,unmanaged:0,sumHoldTime:0,sumBillable:0,total:0,avgHoldTime:"00:00:00",avgTalkTime:"00:00:00",answerRate:0,abandonRate:0},o.outbound=i||{answered:0,sumBillable:0,sumDuration:0,sumHoldTime:0,total:0},o.onSaveQueue=function(e){o.inboundQueues[e.id]&&o.rpcQueues[e.id]&&(o.rpcQueues[e.id]=e,r())},o.onSaveOutbound=function(e){o.outbound=e},t.on("voice_queue:save",o.onSaveQueue),t.on("voice_outbound:save",o.onSaveOutbound),r(),e.$on("$destroy",function(){t.removeAllListeners("voice_queue:save"),t.removeAllListeners("voice_outbound:save")})}e.$inject=["$scope","socket","inboundQueues","rpcQueues","outbound","initializeRealtimeQueue"],angular.module("app.dashboards").controller("UserVoiceDashboardGeneralController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="FAX.EDIT_FAXACCOUNT",g.faxAccount=angular.copy(l),g.faxAccounts=r,g.newFaxAccount=!1,g.faxAccount||(g.faxAccount={waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},g.title="FAX.NEW_FAXACCOUNT",g.newFaxAccount=!0),t.params.id&&(g.faxAccount.FaxAccountId=t.params.id),g.addNewFaxAccount=function(){g.errors=[],d.faxAccount.addAccountApplications(g.faxAccount).$promise.then(function(e){g.faxAccounts.unshift(e.toJSON()),o.success({title:"FaxAccount properly created",msg:g.faxAccount.name?g.faxAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.faxAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveFaxAccount=function(){g.errors=[],d.faxAccount.updateAccountApplications(g.faxAccount).$promise.then(function(e){var t=_.find(g.faxAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FaxAccount properly saved!",msg:g.faxAccount.name?g.faxAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.faxAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteFaxAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The faxAccount will be deleted.").ariaLabel("Delete FaxAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.faxAccount.delete({id:g.faxAccount.id}).$promise.then(function(){_.remove(g.faxAccounts,{id:g.faxAccount.id}),o.success({title:"FaxAccount properly deleted!",msg:(g.faxAccount.name||"faxAccount")+" has been deleted!"}),v(g.faxAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.faxAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.trunks=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.trunks=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.trunks,{id:e.resourceId})}),n=null;if(g.faxAccount&&(n=_.find(g.trunks,{id:Number(g.faxAccount.TrunkId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.trunks,{id:n.id});a.canSelect=!1,t.push(a)}g.trunks=t})}else{var n=[],a=null;g.faxAccount&&(a=_.find(g.trunks,{id:Number(g.faxAccount.TrunkId)}));for(var i=0;i<g.trunks.length;i++)a&&g.trunks[i].id===a.id&&(g.trunks[i].canSelect=!1,n.push(g.trunks[i]));g.trunks=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.hasRole("admin")?d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.lists,{id:e.resourceId})}),n=null;if(g.faxAccount&&(n=_.find(g.lists,{id:Number(g.faxAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.lists,{id:n.id});a.canSelect=!1,t.push(a)}g.lists=t})}else{var n=[],a=null;g.faxAccount&&(a=_.find(g.lists,{id:Number(g.faxAccount.ListId)}));for(var i=0;i<g.lists.length;i++)a&&g.lists[i].id===a.id&&(g.lists[i].canSelect=!1,n.push(g.lists[i]));g.lists=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","faxAccounts","faxAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.fax").controller("CreateOrEditFaxAccountDialogController",e)}(),function(){"use strict";function e(o,i,a,s,e){var r=this;function t(e,t){if(r.faxAccountApps.rows.length){var n=r.faxAccountApps.rows[t]?r.faxAccountApps.rows[t]:r.faxAccountApps.rows[0];i.show({controller:"EditFaxAccountApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccountApp:n,faxAccount:r.faxAccount,crudPermissions:r.crudPermissions}}).then(function(e){e&&(e.id?r.faxAccountApps.rows[t]=e:r.faxAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function l(){for(var e=1,t=[],n=0;n<r.faxAccountApps.rows.length;n++,0){var a=r.faxAccountApps.rows[n],i=[],s=[];a.intervals="*,*,*,*"!==a.interval?[a.interval]:a.IntervalId?_.map(_.filter(r.intervals.rows,{IntervalId:a.IntervalId}),"interval"):[],a.context=r.faxAccount.context,a.exten=r.faxAccount.exten,a.type&&(a.type=a.type.toLowerCase()),a.priority=i.length?_.last(i).priority+1:e,e=(s.length?_.last(s).priority:a.priority)+1,t=_.concat(t,i,[a],s)}o.faxAccount.addApplications({id:r.faxAccount.id},_.sortBy(t,"priority")).$promise.then(function(e){r.faxAccountApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){r.faxAccountApps=e||{count:0,rows:[]}}r.currentUser=e.getCurrentUser(),r.faxAccount={},r.faxAccountApps={count:0,rows:[]},r.selectedFaxAccountApps=[],r.crudPermissions,r.query={sort:"priority"},r.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",types:["always","custom","list"],fields:[],isApp:!1},{app:"noop",appType:"noop",type:"noop",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,fields:[{title:"Value",name:"value",type:"text",param:0}]},{app:"system",appType:"system",type:"system",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,extraApi:[{name:"variables",field:{name:"variable",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1012}}],fields:[{title:"Command",name:"command",type:"text",required:!0,param:0},{title:"Variable",name:"variable",type:"apiselect",values:"variables",value:"variable.name",option:"variable.name",defaultValues:[{value:"''",option:"None"}],defaultValue:"''",param:1}]},{app:"gotop",appType:"gotop",type:"goto",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Priority",name:"priority",type:"number",required:!0,min:0,param:0}]},{app:"gotoif",appType:"gotoif",type:"gotoif",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Condition",name:"condition",type:"text",required:!0,param:0},{title:"truepriority",name:"truepriority",type:"number",min:1,required:!0,param:1},{title:"falsepriority",name:"falsepriority",type:"number",min:1,required:!0,param:2}]},{app:"queue",appType:"queue",foreignKey:"FaxQueueId",type:"queue",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"queues",field:{name:"queue",key:"name"},route:"faxQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:901}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",defaultValue:300,required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,defaultValue:300,required:!0,param:1}]},{app:"agent",appType:"agent",type:"agent",foreignKey:"UserId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"agents",field:{name:"agent",key:"name"},route:"user",filters:{fields:"id,name",sort:"name",role:"agent",nolimit:!0},permissions:{section:202}}],fields:[{title:"Agent",name:"agent",type:"apiselect",values:"agents",value:"agent.name",option:"agent.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:30,param:1}]},{app:"close",appType:"close",type:"close",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Disposition",name:"disposition",type:"text",required:!0,param:0}]},{app:"tag",appType:"tag",type:"tag",foreignKey:"TagId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"tags",field:{name:"tag",key:"name"},route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1008}}],fields:[{title:"Tag",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",required:!0,param:0}]}],["app"]),{isApp:!1}),r.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},r.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){l()}},r.init=function(e,t){r.faxAccount=e,r.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},r.applications.disabled=!r.crudPermissions.canEdit,r.query.id=e.id,r.query.isApp=!0,r.query.nolimit=!0,r.getFaxAccountApps(),r.getIntervals()},r.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){r.faxAccountApps.rows.splice(t,1),l()},function(){console.log("CANCEL")})},r.getFaxAccountApps=function(){r.promise=o.faxAccount.getApplications(r.query,n).$promise},r.editFaxAccountApp=t,r.editInterval=function(e,t){if(r.faxAccountApps.rows.length){var n=r.faxAccountApps.rows[t]?r.faxAccountApps.rows[t]:r.faxAccountApps.rows[0];i.show({controller:"EditFaxAccountAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:r.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,l())})}},r.deleteFaxAccountApp=function(e){_.remove(r.faxAccountApps.rows,{id:e.id}),l(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},r.deleteSelectedFaxAccountApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+r.selectedFaxAccountApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){r.selectedFaxAccountApps.forEach(function(e){_.remove(r.faxAccountApps.rows,{id:e.id})}),r.selectedFaxAccountApps=[],l()})},r.rewriteRouting=l,r.getIntervals=function(){return o.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){r.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.fax").controller("FaxAccountActionsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.faxAccount.getAgents({id:c.faxAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserFaxAccount?"penalty "+e.UserFaxAccount.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.faxAccount=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.faxAccount.removeAgents({id:c.faxAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.faxAccount.addAgents({id:c.faxAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("FAX.ALL_AGENTS"),labelSelected:r.instant("FAX.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","faxAccount","faxAccounts","realtime","$translate","Auth","crudPermissions"],angular.module("app.fax").controller("FaxAccountagentaddController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.agent=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agent.appdata)switch(l.agent.appType?l.agent.appType.toLowerCase():l.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agent.appdata.split(",");l.agent.key=d[0],l.agent.language=d[1],l.agent.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agent.appdata.split(",");l.agent.accesskeyid=d[0],l.agent.secretaccesskey=d[1],l.agent.lexregion=d[2],l.agent.botname=d[3],l.agent.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agent.appdata.split(",");l.agent.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agent.text=d.slice(1,d.length).join(",");break;case"message":l.agent.text=l.agent.appdata;break;case"set":l.agent.name=l.agent.appdata.split("=")[0],l.agent.value=l.agent.appdata.split("=")[1];break;case"agi":l.agent.project=l.agent.appdata;break;default:var c=l.agent.appdata.split(",");l.agent.agent=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.agent.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.agent.timeout=30;function m(e){t.hide(e)}l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outbounddial"===l.agent.appType.toLowerCase()&&(l.agent.prefix=l.agent.phone?l.agent.phone.split("$")[0]:void 0,l.agent.callerId=l.agent.callerID?"CALLERID(all)="+l.agent.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outboundDial"===l.agent.appType&&(l.agent.phone=i.cutdigits?(l.agent.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agent.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agent.options+="U(xcally-mixmonitor-context)"):l.agent.options=l.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.agents,{name:l.agent.agent});t&&(l.agent.UserId=t.id);if(l.agent.appType&&"custom"===l.agent.appType);else switch((l.agent.app||l.agent.appType).toLowerCase()){case"set":l.agent.appdata=l.agent.name+"="+l.agent.value;break;case"custom":break;default:e[0]=l.agent.agent,e[1]=l.agent.timeout,l.agent.appdata=e.join(",")}m(l.agent)},l.closeDialog=m,o.hasRole("admin")?s.user.get({fields:"id,name",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){l.agents=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.user.get({fields:"id,name",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){l.agents=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.agents,{id:e.resourceId})}),n=null;if(l.agent&&(n=_.find(l.agents,{name:l.agent.agent})),n&&!_.some(t,["id",n.id])){var a=_.find(l.agents,{id:n.id});a.canSelect=!1,t.push(a)}l.agents=t})}else{var n=[],a=null;l.agent&&(a=_.find(l.agents,{name:l.agent.agent}));for(var i=0;i<l.agents.length;i++)a&&l.agents[i].id===a.id&&(l.agents[i].canSelect=!1,n.push(l.agents[i]));l.agents=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.close=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.close.appdata)switch(l.close.appType?l.close.appType.toLowerCase():l.close.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.close.appdata.split(",");l.close.key=d[0],l.close.language=d[1],l.close.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.close.appdata.split(",");l.close.accesskeyid=d[0],l.close.secretaccesskey=d[1],l.close.lexregion=d[2],l.close.botname=d[3],l.close.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.close.appdata.split(",");l.close.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.close.text=d.slice(1,d.length).join(",");break;case"message":l.close.text=l.close.appdata;break;case"set":l.close.name=l.close.appdata.split("=")[0],l.close.value=l.close.appdata.split("=")[1];break;case"agi":l.close.project=l.close.appdata;break;default:var c=l.close.appdata.split(",");l.close.disposition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outbounddial"===l.close.appType.toLowerCase()&&(l.close.prefix=l.close.phone?l.close.phone.split("$")[0]:void 0,l.close.callerId=l.close.callerID?"CALLERID(all)="+l.close.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outboundDial"===l.close.appType&&(l.close.phone=i.cutdigits?(l.close.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.close.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.close.options+="U(xcally-mixmonitor-context)"):l.close.options=l.close.options.replace("U(xcally-mixmonitor-context)",""));if(l.close.appType&&"custom"===l.close.appType);else switch((l.close.app||l.close.appType).toLowerCase()){case"set":l.close.appdata=l.close.name+"="+l.close.value;break;case"custom":break;default:e[0]=l.close.disposition,l.close.appdata=e.join(",")}m(l.close)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotoif=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotoif.appdata)switch(l.gotoif.appType?l.gotoif.appType.toLowerCase():l.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotoif.appdata.split(",");l.gotoif.key=d[0],l.gotoif.language=d[1],l.gotoif.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotoif.appdata.split(",");l.gotoif.accesskeyid=d[0],l.gotoif.secretaccesskey=d[1],l.gotoif.lexregion=d[2],l.gotoif.botname=d[3],l.gotoif.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotoif.appdata.split(",");l.gotoif.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotoif.text=d.slice(1,d.length).join(",");break;case"message":l.gotoif.text=l.gotoif.appdata;break;case"set":l.gotoif.name=l.gotoif.appdata.split("=")[0],l.gotoif.value=l.gotoif.appdata.split("=")[1];break;case"agi":l.gotoif.project=l.gotoif.appdata;break;default:var c=l.gotoif.appdata.split(",");l.gotoif.condition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.gotoif.truepriority=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.gotoif.falsepriority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outbounddial"===l.gotoif.appType.toLowerCase()&&(l.gotoif.prefix=l.gotoif.phone?l.gotoif.phone.split("$")[0]:void 0,l.gotoif.callerId=l.gotoif.callerID?"CALLERID(all)="+l.gotoif.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outboundDial"===l.gotoif.appType&&(l.gotoif.phone=i.cutdigits?(l.gotoif.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotoif.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotoif.options+="U(xcally-mixmonitor-context)"):l.gotoif.options=l.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotoif.appType&&"custom"===l.gotoif.appType);else switch((l.gotoif.app||l.gotoif.appType).toLowerCase()){case"set":l.gotoif.appdata=l.gotoif.name+"="+l.gotoif.value;break;case"custom":break;default:e[0]=l.gotoif.condition,e[1]=l.gotoif.truepriority,e[2]=l.gotoif.falsepriority,l.gotoif.appdata=e.join(",")}m(l.gotoif)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotop.appdata)switch(l.gotop.appType?l.gotop.appType.toLowerCase():l.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotop.appdata.split(",");l.gotop.key=d[0],l.gotop.language=d[1],l.gotop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotop.appdata.split(",");l.gotop.accesskeyid=d[0],l.gotop.secretaccesskey=d[1],l.gotop.lexregion=d[2],l.gotop.botname=d[3],l.gotop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotop.appdata.split(",");l.gotop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotop.text=d.slice(1,d.length).join(",");break;case"message":l.gotop.text=l.gotop.appdata;break;case"set":l.gotop.name=l.gotop.appdata.split("=")[0],l.gotop.value=l.gotop.appdata.split("=")[1];break;case"agi":l.gotop.project=l.gotop.appdata;break;default:var c=l.gotop.appdata.split(",");l.gotop.priority=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outbounddial"===l.gotop.appType.toLowerCase()&&(l.gotop.prefix=l.gotop.phone?l.gotop.phone.split("$")[0]:void 0,l.gotop.callerId=l.gotop.callerID?"CALLERID(all)="+l.gotop.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outboundDial"===l.gotop.appType&&(l.gotop.phone=i.cutdigits?(l.gotop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotop.options+="U(xcally-mixmonitor-context)"):l.gotop.options=l.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotop.appType&&"custom"===l.gotop.appType);else switch((l.gotop.app||l.gotop.appType).toLowerCase()){case"set":l.gotop.appdata=l.gotop.name+"="+l.gotop.value;break;case"custom":break;default:e[0]=l.gotop.priority,l.gotop.appdata=e.join(",")}m(l.gotop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditFaxAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.noop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.noop.appdata)switch(l.noop.appType?l.noop.appType.toLowerCase():l.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.noop.appdata.split(",");l.noop.key=d[0],l.noop.language=d[1],l.noop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.noop.appdata.split(",");l.noop.accesskeyid=d[0],l.noop.secretaccesskey=d[1],l.noop.lexregion=d[2],l.noop.botname=d[3],l.noop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.noop.appdata.split(",");l.noop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.noop.text=d.slice(1,d.length).join(",");break;case"message":l.noop.text=l.noop.appdata;break;case"set":l.noop.name=l.noop.appdata.split("=")[0],l.noop.value=l.noop.appdata.split("=")[1];break;case"agi":l.noop.project=l.noop.appdata;break;default:var c=l.noop.appdata.split(",");l.noop.value=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outbounddial"===l.noop.appType.toLowerCase()&&(l.noop.prefix=l.noop.phone?l.noop.phone.split("$")[0]:void 0,l.noop.callerId=l.noop.callerID?"CALLERID(all)="+l.noop.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outboundDial"===l.noop.appType&&(l.noop.phone=i.cutdigits?(l.noop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.noop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.noop.options+="U(xcally-mixmonitor-context)"):l.noop.options=l.noop.options.replace("U(xcally-mixmonitor-context)",""));if(l.noop.appType&&"custom"===l.noop.appType);else switch((l.noop.app||l.noop.appType).toLowerCase()){case"set":l.noop.appdata=l.noop.name+"="+l.noop.value;break;case"custom":break;default:e[0]=l.noop.value,l.noop.appdata=e.join(",")}m(l.noop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.queue.queue=300,l.queue.timeout=300;function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.queues,{name:l.queue.queue});t&&(l.queue[_.capitalize("fax")+"QueueId"]=t.id);if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.timeout,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.faxQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.faxQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:901}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.system=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.system.appdata)switch(l.system.appType?l.system.appType.toLowerCase():l.system.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.system.appdata.split(",");l.system.key=d[0],l.system.language=d[1],l.system.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.system.appdata.split(",");l.system.accesskeyid=d[0],l.system.secretaccesskey=d[1],l.system.lexregion=d[2],l.system.botname=d[3],l.system.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.system.appdata.split(",");l.system.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.system.text=d.slice(1,d.length).join(",");break;case"message":l.system.text=l.system.appdata;break;case"set":l.system.name=l.system.appdata.split("=")[0],l.system.value=l.system.appdata.split("=")[1];break;case"agi":l.system.project=l.system.appdata;break;default:var c=l.system.appdata.split(",");l.system.command=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.system.variable=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.system.variable="";function m(e){t.hide(e)}l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outbounddial"===l.system.appType.toLowerCase()&&(l.system.prefix=l.system.phone?l.system.phone.split("$")[0]:void 0,l.system.callerId=l.system.callerID?"CALLERID(all)="+l.system.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outboundDial"===l.system.appType&&(l.system.phone=i.cutdigits?(l.system.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.system.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.system.options+="U(xcally-mixmonitor-context)"):l.system.options=l.system.options.replace("U(xcally-mixmonitor-context)",""));if(l.system.appType&&"custom"===l.system.appType);else switch((l.system.app||l.system.appType).toLowerCase()){case"set":l.system.appdata=l.system.name+"="+l.system.value;break;case"custom":break;default:e[0]=l.system.command,e[1]=l.system.variable,l.system.appdata=e.join(",")}m(l.system)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.system&&(n=_.find(l.variables,{name:l.system.variable})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.system&&(a=_.find(l.variables,{name:l.system.variable}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="FAX.EDIT_"+(a.appType||a.app).toUpperCase(),l.tag=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.tag.appdata)switch(l.tag.appType?l.tag.appType.toLowerCase():l.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.tag.appdata.split(",");l.tag.key=d[0],l.tag.language=d[1],l.tag.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.tag.appdata.split(",");l.tag.accesskeyid=d[0],l.tag.secretaccesskey=d[1],l.tag.lexregion=d[2],l.tag.botname=d[3],l.tag.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.tag.appdata.split(",");l.tag.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.tag.text=d.slice(1,d.length).join(",");break;case"message":l.tag.text=l.tag.appdata;break;case"set":l.tag.name=l.tag.appdata.split("=")[0],l.tag.value=l.tag.appdata.split("=")[1];break;case"agi":l.tag.project=l.tag.appdata;break;default:var c=l.tag.appdata.split(",");l.tag.tag=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outbounddial"===l.tag.appType.toLowerCase()&&(l.tag.prefix=l.tag.phone?l.tag.phone.split("$")[0]:void 0,l.tag.callerId=l.tag.callerID?"CALLERID(all)="+l.tag.callerID:void 0),l.saveFaxAccountApp=function(){l.errors=[];var e=[];l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outboundDial"===l.tag.appType&&(l.tag.phone=i.cutdigits?(l.tag.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.tag.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.tag.options+="U(xcally-mixmonitor-context)"):l.tag.options=l.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.tags,{name:l.tag.tag});t&&(l.tag.TagId=t.id);if(l.tag.appType&&"custom"===l.tag.appType);else switch((l.tag.app||l.tag.appType).toLowerCase()){case"set":l.tag.appdata=l.tag.name+"="+l.tag.value;break;case"custom":break;default:e[0]=l.tag.tag,l.tag.appdata=e.join(",")}m(l.tag)},l.closeDialog=m,o.hasRole("admin")?s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1008}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.tags,{id:e.resourceId})}),n=null;if(l.tag&&(n=_.find(l.tags,{name:l.tag.tag})),n&&!_.some(t,["id",n.id])){var a=_.find(l.tags,{id:n.id});a.canSelect=!1,t.push(a)}l.tags=t})}else{var n=[],a=null;l.tag&&(a=_.find(l.tags,{name:l.tag.tag}));for(var i=0;i<l.tags.length;i++)a&&l.tags[i].id===a.id&&(l.tags[i].canSelect=!1,n.push(l.tags[i]));l.tags=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtags",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","faxAccountApp","faxAccount","api","Auth","crudPermissions"],angular.module("app.fax").controller("EditFaxAccountApptagDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.faxAccount={},c.faxAccountFaxDispositions={count:0,rows:[]},c.selectedFaxAccountFaxDispositions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e,t){c.faxAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.faxAccount.id,c.query.FaxAccountId=c.faxAccount.id,c.getFaxAccountFaxDispositions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the faxDisposition?").htmlContent("<b>"+(e.name||"faxDisposition")+"</b> will be deleted.").ariaLabel("delete faxDisposition").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getFaxAccountFaxDispositions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.faxAccount.getDispositions(c.query,p).$promise},c.createOrEditFaxAccountFaxDisposition=function(e,t){s.show({controller:"CreateOrEditFaxDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/faxDispositions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccount:c.faxAccount,faxDisposition:t,faxDispositions:c.faxAccountFaxDispositions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedFaxAccountFaxDispositions=function(){var e=angular.copy(c.selectedFaxAccountFaxDispositions);return c.selectedFaxAccountFaxDispositions=[],e},c.deleteFaxAccountFaxDisposition=g,c.deleteSelectedFaxAccountFaxDispositions=function(e){var t=s.confirm().title("Are you sure want to delete the selected faxDispositions?").htmlContent("<b>"+c.selectedFaxAccountFaxDispositions.length+" selected</b> will be deleted.").ariaLabel("delete faxDispositions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedFaxAccountFaxDispositions.forEach(function(e){g(e)}),c.selectedFaxAccountFaxDispositions=[]})};var m=!0,u=1;function p(e){c.faxAccountFaxDispositions=e||{count:0,rows:[]}}function g(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(c.faxAccountFaxDispositions.rows,{id:e.id}),c.faxAccountFaxDispositions.count-=1,c.faxAccountFaxDispositions.rows.length||c.getFaxAccountFaxDispositions(),r.success({title:"FaxDisposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETfaxAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getFaxAccountFaxDispositions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.fax").controller("FaxAccountFaxDispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="FAX.EDIT_FAXDISPOSITION",g.faxDisposition=angular.copy(l),g.faxDispositions=r,g.newFaxDisposition=!1,g.faxDisposition||(g.faxDisposition={},g.title="FAX.NEW_FAXDISPOSITION",g.newFaxDisposition=!0),t.params.id&&(g.faxDisposition.FaxAccountId=t.params.id),g.addNewFaxDisposition=function(){g.errors=[],d.disposition.save(g.faxDisposition).$promise.then(function(e){g.faxDispositions.unshift(e.toJSON()),o.success({title:"FaxDisposition properly created",msg:g.faxDisposition.name?g.faxDisposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveFaxDisposition=function(){g.errors=[],d.disposition.update({id:g.faxDisposition.id},g.faxDisposition).$promise.then(function(e){var t=_.find(g.faxDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FaxDisposition properly saved!",msg:g.faxDisposition.name?g.faxDisposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteFaxDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The faxDisposition will be deleted.").ariaLabel("Delete FaxDisposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.faxDisposition.id}).$promise.then(function(){_.remove(g.faxDispositions,{id:g.faxDisposition.id}),o.success({title:"FaxDisposition properly deleted!",msg:(g.faxDisposition.name||"faxDisposition")+" has been deleted!"}),v(g.faxDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","faxDispositions","faxDisposition","api","Auth","license","setting","crudPermissions"],angular.module("app.fax").controller("CreateOrEditFaxDispositionDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.faxAccount={},c.faxAccountInteractions={count:0,rows:[]},c.selectedFaxAccountInteractions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,Contact.firstName,Owner.name,closedAt,disposition,note,UserId,ContactId,FaxAccountId,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e,t){c.faxAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.faxAccount.id,c.getFaxAccountInteractions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the interaction?").htmlContent("<b>"+(e.name||"interaction")+"</b> will be deleted.").ariaLabel("delete interaction").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.faxInteractionDownload=function(s,e,t){return l.faxInteraction.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="interaction"+s.id,a=new Blob(t,{type:e.type});n="fax-interaction"+s.id+".zip";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getFaxAccountInteractions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.faxAccount.getInteractions(c.query,p).$promise},c.createOrEditFaxAccountInteraction=function(e,t){s.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/interactions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccount:c.faxAccount,interaction:t,interactions:c.faxAccountInteractions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.spyfaxInteraction=function(e,n){s.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,onShowing:function(e,t){e.vm.init({id:1,channel:"fax",interaction:n,spy:!0},a.$parent.vm.setting)}})},c.exportSelectedFaxAccountInteractions=function(){var e=angular.copy(c.selectedFaxAccountInteractions);return c.selectedFaxAccountInteractions=[],e},c.deleteFaxAccountInteraction=g,c.deleteSelectedFaxAccountInteractions=function(e){var t=s.confirm().title("Are you sure want to delete the selected interactions?").htmlContent("<b>"+c.selectedFaxAccountInteractions.length+" selected</b> will be deleted.").ariaLabel("delete interactions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedFaxAccountInteractions.forEach(function(e){g(e)}),c.selectedFaxAccountInteractions=[]})};var m=!0,u=1;function p(e){c.faxAccountInteractions=e||{count:0,rows:[]}}function g(e){l.faxInteraction.delete({id:e.id}).$promise.then(function(){_.remove(c.faxAccountInteractions.rows,{id:e.id}),c.faxAccountInteractions.count-=1,c.faxAccountInteractions.rows.length||c.getFaxAccountInteractions(),r.success({title:"Interaction deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETfaxAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}a.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getFaxAccountInteractions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.fax").controller("FaxAccountInteractionsController",e)}(),function(){"use strict";function e(n,e,a,i,s,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.faxAccount=c||n.params.faxAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.gotogoto=function(e,t){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:910}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.fax.realtime.accounts",{}):l.info({title:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.fax.realtime.accounts",{})}},u.agentadddialog=function(e,t){a.show({controller:"FaxAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxAccount:e,faxAccounts:u.faxAccounts?u.faxAccounts.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoFaxAccounts=function(){n.go("app.fax.faxAccounts")},u.saveFaxAccount=function(){r.faxAccount.updateAccountApplications(u.faxAccount).$promise.then(function(){l.success({title:"FaxAccount updated!",msg:u.faxAccount.name?u.faxAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.trunks,{id:e.resourceId})}),n=null;if(u.faxAccount&&(n=_.find(u.trunks,{id:Number(u.faxAccount.TrunkId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.trunks,{id:n.id});a.canSelect=!1,t.push(a)}u.trunks=t})}else{var n=[],a=null;u.faxAccount&&(a=_.find(u.trunks,{id:Number(u.faxAccount.TrunkId)}));for(var i=0;i<u.trunks.length;i++)a&&u.trunks[i].id===a.id&&(u.trunks[i].canSelect=!1,n.push(u.trunks[i]));u.trunks=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.lists,{id:e.resourceId})}),n=null;if(u.faxAccount&&(n=_.find(u.lists,{id:Number(u.faxAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.lists,{id:n.id});a.canSelect=!1,t.push(a)}u.lists=t})}else{var n=[],a=null;u.faxAccount&&(a=_.find(u.lists,{id:Number(u.faxAccount.ListId)}));for(var i=0;i<u.lists.length;i++)a&&u.lists[i].id===a.id&&(u.lists[i].canSelect=!1,n.push(u.lists[i]));u.lists=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","faxAccount","userProfileSection"],angular.module("app.fax").controller("FaxAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.faxAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="faxAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedFaxAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,key,headerinfo,TrunkId,localstationid,ListId,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,ecm,minrate,maxrate,modem,gateway,faxdetect,t38timeout,tech,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},b.arrayecm=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayminrate=_.keyBy([{option:"2400",value:"'2400'"},{option:"4800",value:"'4800'"},{option:"7200",value:"'7200'"},{option:"9600",value:"'9600'"},{option:"12000",value:"'12000'"},{option:"14400",value:"'14400'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraymaxrate=_.keyBy([{option:"2400",value:"'2400'"},{option:"4800",value:"'4800'"},{option:"7200",value:"'7200'"},{option:"9600",value:"'9600'"},{option:"12000",value:"'12000'"},{option:"14400",value:"'14400'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytech=_.keyBy([{option:"SIP",value:"'SIP'"},{option:"IAX",value:"'IAX'"},{option:"DADHI",value:"'DADHI'"},{option:"KHOMP",value:"'KHOMP'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.fax.faxAccounts.edit",{id:e.id,faxAccount:e,crudPermissions:b.crudPermissions})},b.interactionsgoto=function(e,t){n.go("app.fax.faxAccounts.edit",{id:e.id,tab:5})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:910}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.fax.realtime.accounts",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.fax.realtime.accounts",{})}},b.agentadddialog=function(e,t){i.show({controller:"FaxAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxAccount:e,faxAccounts:b.faxAccounts?b.faxAccounts.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("faxAccount")+"?").htmlContent("<b>"+(e.name||"faxAccount")+"</b> will be deleted.").ariaLabel("delete faxAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getFaxAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.faxAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="FaxAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditFaxAccount=function(e,t){i.show({controller:"CreateOrEditFaxAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxAccount:t,faxAccounts:b.faxAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteFaxAccount=S,b.exportSelectedFaxAccounts=function(){var e=angular.copy(b.selectedFaxAccounts);return b.selectedFaxAccounts=[],e},b.deleteSelectedFaxAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected faxAccounts?").htmlContent("<b>"+b.selectedFaxAccounts.length+" selected</b> will be deleted.").ariaLabel("delete FaxAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedFaxAccounts.forEach(function(e){S(e)}),b.selectedFaxAccounts=[]})},b.deselectFaxAccounts=function(){b.selectedFaxAccounts=[]},b.selectAllFaxAccounts=function(){b.selectedFaxAccounts=b.faxAccounts.rows},g.hasRole("admin")?m.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.trunks=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.trunks=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(b.trunks,{id:e.resourceId})}),a=null;a=[],b.faxAccounts.rows.forEach(function(e){var t=_.find(b.trunks,{id:Number(e.TrunkId)});a.push(t)}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(b.trunks,{id:e.id});t.canSelect=!1,n.push(t)}}),b.trunks=n})}else{var n=[],a=[];b.faxAccounts.rows.forEach(function(e){var t=_.find(b.trunks,{id:Number(e.TrunkId)});a.push(t)});for(var i=0;i<b.trunks.length;i++){_.some(a,{id:b.trunks[i].id})&&(b.trunks[i].canSelect=!1,n.push(b.trunks[i]))}b.trunks=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),g.hasRole("admin")?m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.lists,{id:e.resourceId})}),n=null;if(b.faxAccount&&(n=_.find(b.lists,{id:Number(b.faxAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.lists,{id:n.id});a.canSelect=!1,t.push(a)}b.lists=t})}else{var n=[],a=null;b.faxAccount&&(a=_.find(b.lists,{id:Number(b.faxAccount.ListId)}));for(var i=0;i<b.lists.length;i++)a&&b.lists[i].id===a.id&&(b.lists[i].canSelect=!1,n.push(b.lists[i]));b.lists=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.faxAccounts=e||{count:0,rows:[]}}function S(e){m.faxAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.faxAccounts.rows,{id:e.id}),b.faxAccounts.count-=1,b.faxAccounts.rows.length||b.getFaxAccounts(),p.success({title:_.startCase("FaxAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEfaxAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEfaxAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getFaxAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","faxAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.fax").controller("FaxAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="FAX.EDIT_FAXQUEUE",g.faxQueue=angular.copy(l),g.faxQueues=r,g.newFaxQueue=!1,g.faxQueue||(g.faxQueue={strategy:"beepall",timeout:10},g.title="FAX.NEW_FAXQUEUE",g.newFaxQueue=!0),g.addNewFaxQueue=function(){g.errors=[],d.faxQueue.save(g.faxQueue).$promise.then(function(e){g.faxQueues.unshift(e.toJSON()),o.success({title:"FaxQueue properly created",msg:g.faxQueue.name?g.faxQueue.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.faxQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveFaxQueue=function(){g.errors=[],d.faxQueue.update({id:g.faxQueue.id},g.faxQueue).$promise.then(function(e){var t=_.find(g.faxQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FaxQueue properly saved!",msg:g.faxQueue.name?g.faxQueue.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.faxQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteFaxQueue=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The faxQueue will be deleted.").ariaLabel("Delete FaxQueue").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.faxQueue.delete({id:g.faxQueue.id}).$promise.then(function(){_.remove(g.faxQueues,{id:g.faxQueue.id}),o.success({title:"FaxQueue properly deleted!",msg:(g.faxQueue.name||"faxQueue")+" has been deleted!"}),v(g.faxQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.faxQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.faxQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","faxQueues","faxQueue","api","Auth","license","setting","crudPermissions"],angular.module("app.fax").controller("CreateOrEditFaxQueueDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.faxQueue.getAgents({id:c.faxQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserFaxQueue?"penalty "+e.UserFaxQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.faxQueue=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.faxQueue.removeAgents({id:c.faxQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.faxQueue.addAgents({id:c.faxQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("FAX.ALL_AGENTS"),labelSelected:r.instant("FAX.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","faxQueue","faxQueues","realtime","$translate","Auth","crudPermissions"],angular.module("app.fax").controller("FaxQueueagentaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r){var l=this;function d(){return a(function(n,t){return a(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.faxQueue.getTeams({id:l.faxQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.faxQueue=t,l.crudPermissions=r,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("FAX.ALL_TEAMS"),labelSelected:n.instant("FAX.SELECTED_TEAMS"),transferCallback:function(e,t){var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.faxQueue.removeTeams({id:l.faxQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.faxQueue.addTeams({id:l.faxQueue.id,teams:_.map(n,function(e){return _.pick(e,["id"])})}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),i.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","faxQueue","$translate","Auth","crudPermissions"],angular.module("app.fax").controller("FaxQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.faxQueue=c||e.params.faxQueue||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.teamadddialog=function(e,t){n.show({controller:"FaxQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/teamadd/teamadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxQueue:e,faxQueues:u.faxQueues?u.faxQueues.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){n.show({controller:"FaxQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxQueue:e,faxQueues:u.faxQueues?u.faxQueues.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoFaxQueues=function(){e.go("app.fax.faxQueues")},u.saveFaxQueue=function(){r.faxQueue.update({id:u.faxQueue.id},u.faxQueue).$promise.then(function(){l.success({title:"FaxQueue updated!",msg:u.faxQueue.name?u.faxQueue.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","faxQueue","userProfileSection"],angular.module("app.fax").controller("FaxQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.faxQueues=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="faxQueues",b.listOrder="",b.listOrderAsc=null,b.selectedFaxQueues=[],b.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"fax",limit:10,page:1},b.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.fax.faxQueues.edit",{id:e.id,faxQueue:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"FaxQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxQueue:e,faxQueues:b.faxQueues?b.faxQueues.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"FaxQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{faxQueue:e,faxQueues:b.faxQueues?b.faxQueues.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("faxQueue")+"?").htmlContent("<b>"+(e.name||"faxQueue")+"</b> will be deleted.").ariaLabel("delete faxQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:910}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.fax.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.fax.realtime.queues",{})}},b.success=y,b.getFaxQueues=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.faxQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="FaxQueues",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditFaxQueue=function(e,t){i.show({controller:"CreateOrEditFaxQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxQueue:t,faxQueues:b.faxQueues.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteFaxQueue=S,b.exportSelectedFaxQueues=function(){var e=angular.copy(b.selectedFaxQueues);return b.selectedFaxQueues=[],e},b.deleteSelectedFaxQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected faxQueues?").htmlContent("<b>"+b.selectedFaxQueues.length+" selected</b> will be deleted.").ariaLabel("delete FaxQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedFaxQueues.forEach(function(e){S(e)}),b.selectedFaxQueues=[]})},b.deselectFaxQueues=function(){b.selectedFaxQueues=[]},b.selectAllFaxQueues=function(){b.selectedFaxQueues=b.faxQueues.rows};var A=!0,E=1;function y(e){b.faxQueues=e||{count:0,rows:[]}}function S(e){m.faxQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.faxQueues.rows,{id:e.id}),b.faxQueues.count-=1,b.faxQueues.rows.length||b.getFaxQueues(),p.success({title:_.startCase("FaxQueue")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEfaxQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEfaxQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getFaxQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","faxQueues","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.fax").controller("FaxQueuesController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){_.forIn(p.faxAccounts,function(e,t){p.rpcFaxAccounts[t]&&_.merge(e,p.rpcFaxAccounts[t])}),_.forIn(p.faxAccounts,function(t,e){var n={id:e,sort:"-id",direction:"in",limit:1,offset:0,$gte:"createdAt,"+moment().startOf("day").format("YYYY-MM-DD HH:mm:ss")};s.faxAccount.getMessages(n).$promise.then(function(e){return e&&(t.in=e.count||0,t.lastIn=e.rows&&e.rows.length?e.rows[0].createdAt:void 0),n.direction="out",s.faxAccount.getMessages(n).$promise}).then(function(e){e&&(t.out=e.count||0,t.lastOut=e.rows&&e.rows.length?e.rows[0].createdAt:void 0)}).catch(function(e){console.log(e)})})}p.currentUser=u.getCurrentUser(),p.count=l&&l.count?l.count:0,p.faxAccounts=l?_.keyBy(l.rows?l.rows:[],"id"):{},p.rpcFaxAccounts=d?_.keyBy(d.rows?d.rows:[],"id"):{},p.userProfile=c,p.userProfileSection=m&&1==m.count?m.rows[0]:null,p.crudPermissions=u.parseCrudPermissions(p.userProfileSection?p.userProfileSection.crudPermissions:null),p.query={sort:"-name",limit:10,page:1},p.success=f,p.$onInit=g,p.getFaxAccounts=function(){p.query.offset=(p.query.page-1)*p.query.limit,u.hasRole("admin")?p.promise=s.faxAccount.get(p.query,f).$promise:(p.query.id=p.userProfile.id,p.query.section="FaxAccounts",p.promise=s.userProfile.getResources(p.query,f).$promise)},p.onSave=function(e){p.faxAccounts[e.id]&&_.merge(p.faxAccounts[e.id],e)},p.onFaxMessageSave=function(e){p.faxAccounts[e.FaxAccountId]&&("in"==e.direction?(p.faxAccounts[e.FaxAccountId].in+=1,p.faxAccounts[e.FaxAccountId].lastIn=e.createdAt):(p.faxAccounts[e.FaxAccountId].out+=1,p.faxAccounts[e.FaxAccountId].lastOut=e.createdAt))},p.goToFaxAccount=function(e,t){i.go("app.fax.faxAccounts.edit",{id:t.id,faxAccount:t})},p.order=[],_.forIn(p.faxAccounts,function(e,t){p.order.push(e.id)}),o.on("faxAccount:save",p.onSave),o.on("faxAccount:update",p.onSave),o.on("faxMessage:save",p.onFaxMessageSave);var v=!0,h=1;function f(e){if(p.faxAccounts=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){p.order=[];for(var t=0;t<e.rows.length;t++)p.order.push(e.rows[t].id)}g()}e.$watch("vm.query.filter",function(e,t){v?n(function(){v=!1}):(t||(h=p.query.page),e!==t&&(p.query.page=1),e||(p.query.page=h),p.getFaxAccounts())}),e.$on("$destroy",function(){o.removeAllListeners("faxAccount:save"),o.removeAllListeners("faxAccount:update"),o.removeAllListeners("faxMessage:save")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$state","api","socket","toasty","faxAccounts","rpcFaxAccounts","userProfile","userProfileSection","Auth"],angular.module("app.fax").controller("FaxAccountsRealtimeController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"fax",direction:"inbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsFaxRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.faxQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].FaxQueueId].paused++,g.queues[e[t].rows[n].FaxQueueId].loggedInDb++,g.queues[e[t].rows[n].FaxQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].FaxQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"fax",type:"inbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.faxQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="FaxQueues",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditFaxQueue=function(e,t){a.show({controller:"CreateOrEditFaxQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxQueue:t,faxQueues:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.agentAdd=function(e,t){a.show({controller:"FaxQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/fax/views/faxQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{faxQueue:t,faxQueues:g.queues?g.queues.rows:[],realtime:!1,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.faxQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&_.merge(g.queues[e.id],_.pick(e,v))},g.onSaveMember=function(e){g.queues[e.FaxQueueId]&&g.queues[e.FaxQueueId].loggedInDb++},g.onRemoveMember=function(e){g.queues[e.FaxQueueId]&&g.queues[e.FaxQueueId].loggedInDb--},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.FaxQueueId]&&(g.queues[e.FaxQueueId].loggedInDb+=1,g.queues[e.FaxQueueId].agents[e.UserId]=e.FaxQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.FaxQueueId]&&0<g.queues[e.FaxQueueId].loggedInDb&&(g.queues[e.FaxQueueId].loggedInDb-=1,delete g.queues[e.FaxQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.on("fax_queue:save",g.onSave),d.on("userFaxQueue:save",g.onSaveMember),d.on("userFaxQueue:remove",g.onRemoveMember),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("fax_queue:save"),d.removeAllListeners("userFaxQueue:remove"),d.removeAllListeners("userFaxQueue:save"),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.fax").controller("QueuesFaxRealtimeController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){switch(t.disconnect(),t.connect(),this.selectedTab=0,n.current.name){case"app.fax.realtime.agents":this.selectedTab=0;break;case"app.fax.realtime.trunks":this.selectedTab=1;break;case"app.fax.realtime.queues":this.selectedTab=2;break;case"app.fax.realtime.accounts":this.selectedTab=3;break;default:this.selectedTab=0,n.go("app.fax.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.fax.realtime.agents");break;case 1:n.go("app.fax.realtime.trunks");break;case 2:n.go("app.fax.realtime.queues");break;case 3:n.go("app.fax.realtime.accounts");break;default:n.go("app.fax.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.fax").controller("FaxRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m){var u=this,p=["status","stateRegistry","registry","host","port","internal","state","status"];function g(){for(var e,t=0;t<u.trunks.length;t+=1)0<=(e=_.findIndex(u.rpcTrunks,["id",u.trunks[t].id]))&&_.merge(u.trunks[t],_.pick(u.rpcTrunks[e],p))}function v(e,t,n){0<=t&&_.merge(e[t],_.pick(n,p))}u.currentUser=m.getCurrentUser(),u.count=a.count,u.trunks=a?a.rows:[],u.rpcTrunks=i&&i.rows?i.rows:[],u.query={fields:"id,name",active:!0,sort:"-updatedAt",limit:10,page:1},u.statusClass=r.status,u.stateClass=r.state,u.userProfile=d,u.userProfileSection=c&&1==c.count?c.rows[0]:null,u.crudPermissions=m.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.success=b,u.$onInit=g,u.showInfo=function(e){t.show(t.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},u.getTrunks=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=s.trunk.get(u.query,b).$promise:(u.query.id=u.userProfile.id,u.query.section="Trunks",u.promise=s.userProfile.getResources(u.query,b).$promise)},u.goToTrunk=function(e,t){l.go("app.tools.trunks.edit",{id:t.id})},u.onSave=function(e){var t=_.findIndex(u.trunks,["id",e.id]),n=_.findIndex(u.rpcTrunks,["id",e.id]);v(u.trunks,t,e),v(u.rpcTrunks,n,e)},o.on("trunk:save",u.onSave);var h=!0,f=1;function b(e){u.count=e.count,u.trunks=e&&e.rows?e.rows:[],g()}e.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=f),u.getTrunks())}),e.$on("$destroy",function(){o.removeAllListeners("trunk:save")})}e.$inject=["$scope","$timeout","$mdDialog","trunks","rpcTrunks","api","socket","helperClasses","$state","userProfile","userProfileSection","Auth"],angular.module("app.fax").controller("TrunksFaxRealtimeController",e)}(),function(){"use strict";function e(e,t){this.info=e,this.license=t}e.$inject=["info","license"],angular.module("app.help.about").controller("AboutController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_DESKACCOUNT",g.deskAccount=angular.copy(l),g.deskAccounts=r,g.newDeskAccount=!1,g.deskAccount||(g.deskAccount={type:"integrationTab",authType:"basic",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_DESKACCOUNT",g.newDeskAccount=!0),g.addNewDeskAccount=function(){g.errors=[],d.intDeskAccount.save(g.deskAccount).$promise.then(function(e){g.deskAccounts.unshift(e.toJSON()),o.success({title:"DeskAccount properly created",msg:g.deskAccount.name?g.deskAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDeskAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDeskAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveDeskAccount=function(){g.errors=[],d.intDeskAccount.update({id:g.deskAccount.id},g.deskAccount).$promise.then(function(e){var t=_.find(g.deskAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"DeskAccount properly saved!",msg:g.deskAccount.name?g.deskAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDeskAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDeskAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteDeskAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The deskAccount will be deleted.").ariaLabel("Delete DeskAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intDeskAccount.delete({id:g.deskAccount.id}).$promise.then(function(){_.remove(g.deskAccounts,{id:g.deskAccount.id}),o.success({title:"DeskAccount properly deleted!",msg:(g.deskAccount.name||"deskAccount")+" has been deleted!"}),v(g.deskAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDeskAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDeskAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","deskAccounts","deskAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditDeskAccountDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.deskAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="deskAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedDeskAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,type,remoteUri,authType,username,password,serverUrl,description",limit:10,page:1},b.arraytype=_.keyBy([{option:"Integration_Tab",value:"'integrationTab'"},{option:"New_Tab",value:"'newTab'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayauthType=_.keyBy([{option:"Basic",value:"'basic'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.integrations.deskAccounts.edit",{id:e.id,deskAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intDeskAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"DeskAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"DeskAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("deskAccount")+"?").htmlContent("<b>"+(e.name||"deskAccount")+"</b> will be deleted.").ariaLabel("delete deskAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getDeskAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intDeskAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="DeskAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditDeskAccount=function(e,t){i.show({controller:"CreateOrEditDeskAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/deskAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{deskAccount:t,deskAccounts:b.deskAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteDeskAccount=S,b.exportSelectedDeskAccounts=function(){var e=angular.copy(b.selectedDeskAccounts);return b.selectedDeskAccounts=[],e},b.deleteSelectedDeskAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected deskAccounts?").htmlContent("<b>"+b.selectedDeskAccounts.length+" selected</b> will be deleted.").ariaLabel("delete DeskAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedDeskAccounts.forEach(function(e){S(e)}),b.selectedDeskAccounts=[]})},b.deselectDeskAccounts=function(){b.selectedDeskAccounts=[]},b.selectAllDeskAccounts=function(){b.selectedDeskAccounts=b.deskAccounts.rows};var A=!0,E=1;function y(e){b.deskAccounts=e||{count:0,rows:[]}}function S(e){m.intDeskAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.deskAccounts.rows,{id:e.id}),b.deskAccounts.count-=1,b.deskAccounts.rows.length||b.getDeskAccounts(),p.success({title:_.startCase("DeskAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintDeskAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintDeskAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getDeskAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","deskAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("DeskAccountsController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intDeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intDeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intDeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.deskAccount={},o.deskConfiguration={},o.configurations=[],o.selectedDeskConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.deskAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intDeskAccount.getConfigurations({id:o.deskAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getDeskConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getDeskConfiguration=function(e){o.deskConfiguration=o.configurations[e],o.selectedDeskConfiguration=e,i.intDeskConfiguration.getSubjects({id:o.deskConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intDeskConfiguration.getDescriptions({id:o.deskConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intDeskConfiguration.getFields({id:o.deskConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.intDeskConfiguration.getTags({id:o.deskConfiguration.id}).$promise.then(function(e){o.selectedTags=e.rows?_.map(e.rows,"id"):[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditDeskConfiguration=function(e,t){a.show({controller:"CreateOrEditDeskConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/deskAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{deskConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getDeskConfiguration(0)})},o.deleteDeskConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the deskConfiguration?").htmlContent("<b>"+(t.name||"deskConfiguration")+"</b> will be deleted.").ariaLabel("delete deskConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intDeskConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"DeskConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getDeskConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.deskConfiguration.id},o.deskConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedTags=[],o.selectTagsChanged=function(e){i.intDeskConfiguration.setTags({id:o.deskConfiguration.id,ids:o.selectedTags}).$promise.then(function(){s.success({title:"Tags set!",msg:"Tags has been set!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ADDTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},i.tag.get({nolimit:!0,sort:"name"}).$promise.then(function(e){o.tags=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditDeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/deskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.deskConfiguration,account:o.deskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditDeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/deskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.deskConfiguration,account:o.deskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditDeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/deskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.deskConfiguration,account:o.deskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("DeskAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_DESKCONFIGURATION",g.deskConfiguration=angular.copy(l),g.configurations=r,g.newDeskConfiguration=!1,g.deskConfiguration||(g.deskConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_DESKCONFIGURATION",g.newDeskConfiguration=!0),g.addNewDeskConfiguration=function(){g.errors=[],d.intDeskAccount.addConfiguration({id:t.params.id},g.deskConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"DeskConfiguration properly created",msg:g.deskConfiguration.name?g.deskConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDeskConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDeskConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveDeskConfiguration=function(){g.errors=[],d.intDeskConfiguration.update({id:g.deskConfiguration.id},g.deskConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"DeskConfiguration properly saved!",msg:g.deskConfiguration.name?g.deskConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDeskConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDeskConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteDeskConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The deskConfiguration will be deleted.").ariaLabel("Delete DeskConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intDeskConfiguration.delete({id:g.deskConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.deskConfiguration.id}),o.success({title:"DeskConfiguration properly deleted!",msg:(g.deskConfiguration.name||"deskConfiguration")+" has been deleted!"}),v(g.deskConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDeskConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDeskConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","deskConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditDeskConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intDeskField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intDeskField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intDeskField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intDeskAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditDeskAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.deskAccount=c||e.params.deskAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoDeskAccounts=function(){e.go("app.integrations.deskAccounts")},u.saveDeskAccount=function(){r.intDeskAccount.update({id:u.deskAccount.id},u.deskAccount).$promise.then(function(){l.success({title:"DeskAccount updated!",msg:u.deskAccount.name?u.deskAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintDeskAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","deskAccount","userProfileSection"],angular.module("app.integrations").controller("DeskAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_DYNAMICS365ACCOUNT",g.dynamics365Account=angular.copy(l),g.dynamics365Accounts=r,g.newDynamics365Account=!1,g.dynamics365Account||(g.dynamics365Account={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_DYNAMICS365ACCOUNT",g.newDynamics365Account=!0),g.addNewDynamics365Account=function(){g.errors=[],d.intDynamics365Account.save(g.dynamics365Account).$promise.then(function(e){g.dynamics365Accounts.unshift(e.toJSON()),o.success({title:"Dynamics365Account properly created",msg:g.dynamics365Account.name?g.dynamics365Account.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDynamics365Account.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDynamics365Account.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveDynamics365Account=function(){g.errors=[],d.intDynamics365Account.update({id:g.dynamics365Account.id},g.dynamics365Account).$promise.then(function(e){var t=_.find(g.dynamics365Accounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Dynamics365Account properly saved!",msg:g.dynamics365Account.name?g.dynamics365Account.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDynamics365Account.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDynamics365Account.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteDynamics365Account=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The dynamics365Account will be deleted.").ariaLabel("Delete Dynamics365Account").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intDynamics365Account.delete({id:g.dynamics365Account.id}).$promise.then(function(){_.remove(g.dynamics365Accounts,{id:g.dynamics365Account.id}),o.success({title:"Dynamics365Account properly deleted!",msg:(g.dynamics365Account.name||"dynamics365Account")+" has been deleted!"}),v(g.dynamics365Account)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDynamics365Account.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDynamics365Account.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","dynamics365Accounts","dynamics365Account","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditDynamics365AccountDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.dynamics365Accounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="dynamics365Accounts",b.listOrder="",b.listOrderAsc=null,b.selectedDynamics365Accounts=[],b.query={fields:"createdAt,updatedAt,id,name,username,password,remoteUri,tenantId,clientId,clientSecret,serverUrl,description",limit:10,page:1},b.editstate=function(e,t){n.go("app.integrations.dynamics365Accounts.edit",{id:e.id,dynamics365Account:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intDynamics365Account.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"Dynamics365Account properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"Dynamics365Account properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("dynamics365Account")+"?").htmlContent("<b>"+(e.name||"dynamics365Account")+"</b> will be deleted.").ariaLabel("delete dynamics365Account").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getDynamics365Accounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intDynamics365Account.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Dynamics365Accounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditDynamics365Account=function(e,t){i.show({controller:"CreateOrEditDynamics365AccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{dynamics365Account:t,dynamics365Accounts:b.dynamics365Accounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteDynamics365Account=S,b.exportSelectedDynamics365Accounts=function(){var e=angular.copy(b.selectedDynamics365Accounts);return b.selectedDynamics365Accounts=[],e},b.deleteSelectedDynamics365Accounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected dynamics365Accounts?").htmlContent("<b>"+b.selectedDynamics365Accounts.length+" selected</b> will be deleted.").ariaLabel("delete Dynamics365Accounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedDynamics365Accounts.forEach(function(e){S(e)}),b.selectedDynamics365Accounts=[]})},b.deselectDynamics365Accounts=function(){b.selectedDynamics365Accounts=[]},b.selectAllDynamics365Accounts=function(){b.selectedDynamics365Accounts=b.dynamics365Accounts.rows};var A=!0,E=1;function y(e){b.dynamics365Accounts=e||{count:0,rows:[]}}function S(e){m.intDynamics365Account.delete({id:e.id}).$promise.then(function(){_.remove(b.dynamics365Accounts.rows,{id:e.id}),b.dynamics365Accounts.count-=1,b.dynamics365Accounts.rows.length||b.getDynamics365Accounts(),p.success({title:_.startCase("Dynamics365Account")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintDynamics365Account"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintDynamics365Account",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getDynamics365Accounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","dynamics365Accounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("Dynamics365AccountsController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intDynamics365Field.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intDynamics365Field.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intDynamics365Field.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.dynamics365Account={},o.dynamics365Configuration={},o.configurations=[],o.selectedDynamics365Configuration=-1,o.crudPermissions,o.init=function(e,t){o.dynamics365Account=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intDynamics365Account.getConfigurations({id:o.dynamics365Account.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getDynamics365Configuration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getDynamics365Configuration=function(e){o.dynamics365Configuration=o.configurations[e],o.selectedDynamics365Configuration=e,i.intDynamics365Configuration.getSubjects({id:o.dynamics365Configuration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intDynamics365Configuration.getDescriptions({id:o.dynamics365Configuration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intDynamics365Configuration.getFields({id:o.dynamics365Configuration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditDynamics365Configuration=function(e,t){a.show({controller:"CreateOrEditDynamics365ConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{dynamics365Configuration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getDynamics365Configuration(0)})},o.deleteDynamics365Configuration=function(e,t){var n=a.confirm().title("Are you sure want to delete the dynamics365Configuration?").htmlContent("<b>"+(t.name||"dynamics365Configuration")+"</b> will be deleted.").ariaLabel("delete dynamics365Configuration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intDynamics365Configuration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"Dynamics365Configuration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getDynamics365Configuration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.dynamics365Configuration.id},o.dynamics365Configuration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditDynamics365AccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.dynamics365Configuration,account:o.dynamics365Account,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditDynamics365AccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.dynamics365Configuration,account:o.dynamics365Account,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditDynamics365AccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/dynamics365Accounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.dynamics365Configuration,account:o.dynamics365Account,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("Dynamics365AccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_DYNAMICS365CONFIGURATION",g.dynamics365Configuration=angular.copy(l),g.configurations=r,g.newDynamics365Configuration=!1,g.dynamics365Configuration||(g.dynamics365Configuration={channel:"voice",type:"inbound",ticketType:"incident"},g.title="INTEGRATIONS.NEW_DYNAMICS365CONFIGURATION",g.newDynamics365Configuration=!0),g.addNewDynamics365Configuration=function(){g.errors=[],d.intDynamics365Account.addConfiguration({id:t.params.id},g.dynamics365Configuration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"Dynamics365Configuration properly created",msg:g.dynamics365Configuration.name?g.dynamics365Configuration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDynamics365Configuration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDynamics365Configuration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveDynamics365Configuration=function(){g.errors=[],d.intDynamics365Configuration.update({id:g.dynamics365Configuration.id},g.dynamics365Configuration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Dynamics365Configuration properly saved!",msg:g.dynamics365Configuration.name?g.dynamics365Configuration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDynamics365Configuration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDynamics365Configuration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteDynamics365Configuration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The dynamics365Configuration will be deleted.").ariaLabel("Delete Dynamics365Configuration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intDynamics365Configuration.delete({id:g.dynamics365Configuration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.dynamics365Configuration.id}),o.success({title:"Dynamics365Configuration properly deleted!",msg:(g.dynamics365Configuration.name||"dynamics365Configuration")+" has been deleted!"}),v(g.dynamics365Configuration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intDynamics365Configuration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intDynamics365Configuration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","dynamics365Configuration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditDynamics365ConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intDynamics365Field.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intDynamics365Field.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intDynamics365Field.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intDynamics365Account.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditDynamics365AccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.dynamics365Account=c||e.params.dynamics365Account||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoDynamics365Accounts=function(){e.go("app.integrations.dynamics365Accounts")},u.saveDynamics365Account=function(){r.intDynamics365Account.update({id:u.dynamics365Account.id},u.dynamics365Account).$promise.then(function(){l.success({title:"Dynamics365Account updated!",msg:u.dynamics365Account.name?u.dynamics365Account.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintDynamics365Account",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","dynamics365Account","userProfileSection"],angular.module("app.integrations").controller("Dynamics365AccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_FRESHDESKACCOUNT",g.freshdeskAccount=angular.copy(l),g.freshdeskAccounts=r,g.newFreshdeskAccount=!1,g.freshdeskAccount||(g.freshdeskAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_FRESHDESKACCOUNT",g.newFreshdeskAccount=!0),g.addNewFreshdeskAccount=function(){g.errors=[],d.intFreshdeskAccount.save(g.freshdeskAccount).$promise.then(function(e){g.freshdeskAccounts.unshift(e.toJSON()),o.success({title:"FreshdeskAccount properly created",msg:g.freshdeskAccount.name?g.freshdeskAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intFreshdeskAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intFreshdeskAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveFreshdeskAccount=function(){g.errors=[],d.intFreshdeskAccount.update({id:g.freshdeskAccount.id},g.freshdeskAccount).$promise.then(function(e){var t=_.find(g.freshdeskAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FreshdeskAccount properly saved!",msg:g.freshdeskAccount.name?g.freshdeskAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intFreshdeskAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intFreshdeskAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteFreshdeskAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The freshdeskAccount will be deleted.").ariaLabel("Delete FreshdeskAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intFreshdeskAccount.delete({id:g.freshdeskAccount.id}).$promise.then(function(){_.remove(g.freshdeskAccounts,{id:g.freshdeskAccount.id}),o.success({title:"FreshdeskAccount properly deleted!",msg:(g.freshdeskAccount.name||"freshdeskAccount")+" has been deleted!"}),v(g.freshdeskAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intFreshdeskAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intFreshdeskAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","freshdeskAccounts","freshdeskAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditFreshdeskAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intFreshdeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intFreshdeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intFreshdeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.freshdeskAccount={},o.freshdeskConfiguration={},o.configurations=[],o.selectedFreshdeskConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.freshdeskAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intFreshdeskAccount.getConfigurations({id:o.freshdeskAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getFreshdeskConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getFreshdeskConfiguration=function(e){o.freshdeskConfiguration=o.configurations[e],o.selectedFreshdeskConfiguration=e,i.intFreshdeskConfiguration.getSubjects({id:o.freshdeskConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intFreshdeskConfiguration.getDescriptions({id:o.freshdeskConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intFreshdeskConfiguration.getFields({id:o.freshdeskConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.intFreshdeskConfiguration.getTags({id:o.freshdeskConfiguration.id}).$promise.then(function(e){o.selectedTags=e.rows?_.map(e.rows,"id"):[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditFreshdeskConfiguration=function(e,t){a.show({controller:"CreateOrEditFreshdeskConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{freshdeskConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getFreshdeskConfiguration(0)})},o.deleteFreshdeskConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the freshdeskConfiguration?").htmlContent("<b>"+(t.name||"freshdeskConfiguration")+"</b> will be deleted.").ariaLabel("delete freshdeskConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intFreshdeskConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"FreshdeskConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getFreshdeskConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.freshdeskConfiguration.id},o.freshdeskConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedTags=[],o.selectTagsChanged=function(e){i.intFreshdeskConfiguration.setTags({id:o.freshdeskConfiguration.id,ids:o.selectedTags}).$promise.then(function(){s.success({title:"Tags set!",msg:"Tags has been set!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ADDTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},i.tag.get({nolimit:!0,sort:"name"}).$promise.then(function(e){o.tags=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditFreshdeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.freshdeskConfiguration,account:o.freshdeskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditFreshdeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.freshdeskConfiguration,account:o.freshdeskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditFreshdeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.freshdeskConfiguration,account:o.freshdeskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("FreshdeskAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_FRESHDESKCONFIGURATION",g.freshdeskConfiguration=angular.copy(l),g.configurations=r,g.newFreshdeskConfiguration=!1,g.freshdeskConfiguration||(g.freshdeskConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_FRESHDESKCONFIGURATION",g.newFreshdeskConfiguration=!0),g.addNewFreshdeskConfiguration=function(){g.errors=[],d.intFreshdeskAccount.addConfiguration({id:t.params.id},g.freshdeskConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"FreshdeskConfiguration properly created",msg:g.freshdeskConfiguration.name?g.freshdeskConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intFreshdeskConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intFreshdeskConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveFreshdeskConfiguration=function(){g.errors=[],d.intFreshdeskConfiguration.update({id:g.freshdeskConfiguration.id},g.freshdeskConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"FreshdeskConfiguration properly saved!",msg:g.freshdeskConfiguration.name?g.freshdeskConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intFreshdeskConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intFreshdeskConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteFreshdeskConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The freshdeskConfiguration will be deleted.").ariaLabel("Delete FreshdeskConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intFreshdeskConfiguration.delete({id:g.freshdeskConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.freshdeskConfiguration.id}),o.success({title:"FreshdeskConfiguration properly deleted!",msg:(g.freshdeskConfiguration.name||"freshdeskConfiguration")+" has been deleted!"}),v(g.freshdeskConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intFreshdeskConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intFreshdeskConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","freshdeskConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditFreshdeskConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intFreshdeskField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intFreshdeskField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intFreshdeskField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intFreshdeskAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditFreshdeskAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.freshdeskAccount=c||e.params.freshdeskAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoFreshdeskAccounts=function(){e.go("app.integrations.freshdeskAccounts")},u.saveFreshdeskAccount=function(){r.intFreshdeskAccount.update({id:u.freshdeskAccount.id},u.freshdeskAccount).$promise.then(function(){l.success({title:"FreshdeskAccount updated!",msg:u.freshdeskAccount.name?u.freshdeskAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintFreshdeskAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","freshdeskAccount","userProfileSection"],angular.module("app.integrations").controller("FreshdeskAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.freshdeskAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="freshdeskAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedFreshdeskAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,username,remoteUri,apiKey,serverUrl,description",limit:10,page:1},b.editstate=function(e,t){n.go("app.integrations.freshdeskAccounts.edit",{id:e.id,freshdeskAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intFreshdeskAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"FreshdeskAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"FreshdeskAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("freshdeskAccount")+"?").htmlContent("<b>"+(e.name||"freshdeskAccount")+"</b> will be deleted.").ariaLabel("delete freshdeskAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getFreshdeskAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intFreshdeskAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="FreshdeskAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditFreshdeskAccount=function(e,t){i.show({controller:"CreateOrEditFreshdeskAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/freshdeskAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{freshdeskAccount:t,freshdeskAccounts:b.freshdeskAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteFreshdeskAccount=S,b.exportSelectedFreshdeskAccounts=function(){var e=angular.copy(b.selectedFreshdeskAccounts);return b.selectedFreshdeskAccounts=[],e},b.deleteSelectedFreshdeskAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected freshdeskAccounts?").htmlContent("<b>"+b.selectedFreshdeskAccounts.length+" selected</b> will be deleted.").ariaLabel("delete FreshdeskAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedFreshdeskAccounts.forEach(function(e){S(e)}),b.selectedFreshdeskAccounts=[]})},b.deselectFreshdeskAccounts=function(){b.selectedFreshdeskAccounts=[]},b.selectAllFreshdeskAccounts=function(){b.selectedFreshdeskAccounts=b.freshdeskAccounts.rows};var A=!0,E=1;function y(e){b.freshdeskAccounts=e||{count:0,rows:[]}}function S(e){m.intFreshdeskAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.freshdeskAccounts.rows,{id:e.id}),b.freshdeskAccounts.count-=1,b.freshdeskAccounts.rows.length||b.getFreshdeskAccounts(),p.success({title:_.startCase("FreshdeskAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintFreshdeskAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintFreshdeskAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getFreshdeskAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","freshdeskAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("FreshdeskAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_SALESFORCEACCOUNT",g.salesforceAccount=angular.copy(l),g.salesforceAccounts=r,g.newSalesforceAccount=!1,g.salesforceAccount||(g.salesforceAccount={type:"integrationTab",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_SALESFORCEACCOUNT",g.newSalesforceAccount=!0),g.addNewSalesforceAccount=function(){g.errors=[],d.intSalesforceAccount.save(g.salesforceAccount).$promise.then(function(e){g.salesforceAccounts.unshift(e.toJSON()),o.success({title:"SalesforceAccount properly created",msg:g.salesforceAccount.name?g.salesforceAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSalesforceAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSalesforceAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSalesforceAccount=function(){g.errors=[],d.intSalesforceAccount.update({id:g.salesforceAccount.id},g.salesforceAccount).$promise.then(function(e){var t=_.find(g.salesforceAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SalesforceAccount properly saved!",msg:g.salesforceAccount.name?g.salesforceAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSalesforceAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSalesforceAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSalesforceAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The salesforceAccount will be deleted.").ariaLabel("Delete SalesforceAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intSalesforceAccount.delete({id:g.salesforceAccount.id}).$promise.then(function(){_.remove(g.salesforceAccounts,{id:g.salesforceAccount.id}),o.success({title:"SalesforceAccount properly deleted!",msg:(g.salesforceAccount.name||"salesforceAccount")+" has been deleted!"}),v(g.salesforceAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSalesforceAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSalesforceAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","salesforceAccounts","salesforceAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditSalesforceAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intSalesforceField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intSalesforceField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intSalesforceField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.salesforceAccount={},o.salesforceConfiguration={},o.configurations=[],o.selectedSalesforceConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.salesforceAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intSalesforceAccount.getConfigurations({id:o.salesforceAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getSalesforceConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getSalesforceConfiguration=function(e){o.salesforceConfiguration=o.configurations[e],o.selectedSalesforceConfiguration=e,i.intSalesforceConfiguration.getSubjects({id:o.salesforceConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intSalesforceConfiguration.getDescriptions({id:o.salesforceConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intSalesforceConfiguration.getFields({id:o.salesforceConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditSalesforceConfiguration=function(e,t){a.show({controller:"CreateOrEditSalesforceConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/salesforceAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{salesforceConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getSalesforceConfiguration(0)})},o.deleteSalesforceConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the salesforceConfiguration?").htmlContent("<b>"+(t.name||"salesforceConfiguration")+"</b> will be deleted.").ariaLabel("delete salesforceConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intSalesforceConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"SalesforceConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getSalesforceConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.salesforceConfiguration.id},o.salesforceConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditSalesforceAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/salesforceAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.salesforceConfiguration,account:o.salesforceAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditSalesforceAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/salesforceAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.salesforceConfiguration,account:o.salesforceAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditSalesforceAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/salesforceAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.salesforceConfiguration,account:o.salesforceAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("SalesforceAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_SALESFORCECONFIGURATION",g.salesforceConfiguration=angular.copy(l),g.configurations=r,g.newSalesforceConfiguration=!1,g.salesforceConfiguration||(g.salesforceConfiguration={channel:"voice",type:"inbound",ticketType:"Task"},g.title="INTEGRATIONS.NEW_SALESFORCECONFIGURATION",g.newSalesforceConfiguration=!0),g.addNewSalesforceConfiguration=function(){g.errors=[],d.intSalesforceAccount.addConfiguration({id:t.params.id},g.salesforceConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"SalesforceConfiguration properly created",msg:g.salesforceConfiguration.name?g.salesforceConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSalesforceConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSalesforceConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSalesforceConfiguration=function(){g.errors=[],d.intSalesforceConfiguration.update({id:g.salesforceConfiguration.id},g.salesforceConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SalesforceConfiguration properly saved!",msg:g.salesforceConfiguration.name?g.salesforceConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSalesforceConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSalesforceConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSalesforceConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The salesforceConfiguration will be deleted.").ariaLabel("Delete SalesforceConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intSalesforceConfiguration.delete({id:g.salesforceConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.salesforceConfiguration.id}),o.success({title:"SalesforceConfiguration properly deleted!",msg:(g.salesforceConfiguration.name||"salesforceConfiguration")+" has been deleted!"}),v(g.salesforceConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSalesforceConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSalesforceConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","salesforceConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditSalesforceConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intSalesforceField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intSalesforceField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intSalesforceField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intSalesforceAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditSalesforceAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.salesforceAccount=c||e.params.salesforceAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoSalesforceAccounts=function(){e.go("app.integrations.salesforceAccounts")},u.saveSalesforceAccount=function(){r.intSalesforceAccount.update({id:u.salesforceAccount.id},u.salesforceAccount).$promise.then(function(){l.success({title:"SalesforceAccount updated!",msg:u.salesforceAccount.name?u.salesforceAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintSalesforceAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","salesforceAccount","userProfileSection"],angular.module("app.integrations").controller("SalesforceAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.salesforceAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="salesforceAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedSalesforceAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,type,username,remoteUri,password,clientId,clientSecret,securityToken,serverUrl,description",limit:10,page:1},b.arraytype=_.keyBy([{option:"Integration_Tab",value:"'integrationTab'"},{option:"New_Tab",value:"'newTab'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.integrations.salesforceAccounts.edit",{id:e.id,salesforceAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intSalesforceAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"SalesforceAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"SalesforceAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("salesforceAccount")+"?").htmlContent("<b>"+(e.name||"salesforceAccount")+"</b> will be deleted.").ariaLabel("delete salesforceAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getSalesforceAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intSalesforceAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="SalesforceAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSalesforceAccount=function(e,t){i.show({controller:"CreateOrEditSalesforceAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/salesforceAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{salesforceAccount:t,salesforceAccounts:b.salesforceAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSalesforceAccount=S,b.exportSelectedSalesforceAccounts=function(){var e=angular.copy(b.selectedSalesforceAccounts);return b.selectedSalesforceAccounts=[],e},b.deleteSelectedSalesforceAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected salesforceAccounts?").htmlContent("<b>"+b.selectedSalesforceAccounts.length+" selected</b> will be deleted.").ariaLabel("delete SalesforceAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedSalesforceAccounts.forEach(function(e){S(e)}),b.selectedSalesforceAccounts=[]})},b.deselectSalesforceAccounts=function(){b.selectedSalesforceAccounts=[]},b.selectAllSalesforceAccounts=function(){b.selectedSalesforceAccounts=b.salesforceAccounts.rows};var A=!0,E=1;function y(e){b.salesforceAccounts=e||{count:0,rows:[]}}function S(e){m.intSalesforceAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.salesforceAccounts.rows,{id:e.id}),b.salesforceAccounts.count-=1,b.salesforceAccounts.rows.length||b.getSalesforceAccounts(),p.success({title:_.startCase("SalesforceAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintSalesforceAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintSalesforceAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getSalesforceAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","salesforceAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("SalesforceAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_SERVICENOWACCOUNT",g.servicenowAccount=angular.copy(l),g.servicenowAccounts=r,g.newServicenowAccount=!1,g.servicenowAccount||(g.servicenowAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_SERVICENOWACCOUNT",g.newServicenowAccount=!0),g.addNewServicenowAccount=function(){g.errors=[],d.intServicenowAccount.save(g.servicenowAccount).$promise.then(function(e){g.servicenowAccounts.unshift(e.toJSON()),o.success({title:"ServicenowAccount properly created",msg:g.servicenowAccount.name?g.servicenowAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intServicenowAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intServicenowAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveServicenowAccount=function(){g.errors=[],d.intServicenowAccount.update({id:g.servicenowAccount.id},g.servicenowAccount).$promise.then(function(e){var t=_.find(g.servicenowAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ServicenowAccount properly saved!",msg:g.servicenowAccount.name?g.servicenowAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intServicenowAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intServicenowAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteServicenowAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The servicenowAccount will be deleted.").ariaLabel("Delete ServicenowAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intServicenowAccount.delete({id:g.servicenowAccount.id}).$promise.then(function(){_.remove(g.servicenowAccounts,{id:g.servicenowAccount.id}),o.success({title:"ServicenowAccount properly deleted!",msg:(g.servicenowAccount.name||"servicenowAccount")+" has been deleted!"}),v(g.servicenowAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intServicenowAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intServicenowAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","servicenowAccounts","servicenowAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditServicenowAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intServicenowField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intServicenowField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intServicenowField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.servicenowAccount={},o.servicenowConfiguration={},o.configurations=[],o.selectedServicenowConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.servicenowAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intServicenowAccount.getConfigurations({id:o.servicenowAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getServicenowConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getServicenowConfiguration=function(e){o.servicenowConfiguration=o.configurations[e],o.selectedServicenowConfiguration=e,i.intServicenowConfiguration.getSubjects({id:o.servicenowConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intServicenowConfiguration.getDescriptions({id:o.servicenowConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intServicenowConfiguration.getFields({id:o.servicenowConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditServicenowConfiguration=function(e,t){a.show({controller:"CreateOrEditServicenowConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/servicenowAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{servicenowConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getServicenowConfiguration(0)})},o.deleteServicenowConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the servicenowConfiguration?").htmlContent("<b>"+(t.name||"servicenowConfiguration")+"</b> will be deleted.").ariaLabel("delete servicenowConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intServicenowConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"ServicenowConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getServicenowConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.servicenowConfiguration.id},o.servicenowConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditServicenowAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/servicenowAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.servicenowConfiguration,account:o.servicenowAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditServicenowAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/servicenowAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.servicenowConfiguration,account:o.servicenowAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditServicenowAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/servicenowAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.servicenowConfiguration,account:o.servicenowAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("ServicenowAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_SERVICENOWCONFIGURATION",g.servicenowConfiguration=angular.copy(l),g.configurations=r,g.newServicenowConfiguration=!1,g.servicenowConfiguration||(g.servicenowConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_SERVICENOWCONFIGURATION",g.newServicenowConfiguration=!0),g.addNewServicenowConfiguration=function(){g.errors=[],d.intServicenowAccount.addConfiguration({id:t.params.id},g.servicenowConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"ServicenowConfiguration properly created",msg:g.servicenowConfiguration.name?g.servicenowConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intServicenowConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intServicenowConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveServicenowConfiguration=function(){g.errors=[],d.intServicenowConfiguration.update({id:g.servicenowConfiguration.id},g.servicenowConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ServicenowConfiguration properly saved!",msg:g.servicenowConfiguration.name?g.servicenowConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intServicenowConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intServicenowConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteServicenowConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The servicenowConfiguration will be deleted.").ariaLabel("Delete ServicenowConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intServicenowConfiguration.delete({id:g.servicenowConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.servicenowConfiguration.id}),o.success({title:"ServicenowConfiguration properly deleted!",msg:(g.servicenowConfiguration.name||"servicenowConfiguration")+" has been deleted!"}),v(g.servicenowConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intServicenowConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intServicenowConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","servicenowConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditServicenowConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intServicenowField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intServicenowField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intServicenowField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intServicenowAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditServicenowAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.servicenowAccount=c||e.params.servicenowAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoServicenowAccounts=function(){e.go("app.integrations.servicenowAccounts")},u.saveServicenowAccount=function(){r.intServicenowAccount.update({id:u.servicenowAccount.id},u.servicenowAccount).$promise.then(function(){l.success({title:"ServicenowAccount updated!",msg:u.servicenowAccount.name?u.servicenowAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintServicenowAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","servicenowAccount","userProfileSection"],angular.module("app.integrations").controller("ServicenowAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.servicenowAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="servicenowAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedServicenowAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,username,password,email,remoteUri,serverUrl,description",limit:10,page:1},b.editstate=function(e,t){n.go("app.integrations.servicenowAccounts.edit",{id:e.id,servicenowAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intServicenowAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"ServicenowAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"ServicenowAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("servicenowAccount")+"?").htmlContent("<b>"+(e.name||"servicenowAccount")+"</b> will be deleted.").ariaLabel("delete servicenowAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getServicenowAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intServicenowAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ServicenowAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditServicenowAccount=function(e,t){i.show({controller:"CreateOrEditServicenowAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/servicenowAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{servicenowAccount:t,servicenowAccounts:b.servicenowAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteServicenowAccount=S,b.exportSelectedServicenowAccounts=function(){var e=angular.copy(b.selectedServicenowAccounts);return b.selectedServicenowAccounts=[],e},b.deleteSelectedServicenowAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected servicenowAccounts?").htmlContent("<b>"+b.selectedServicenowAccounts.length+" selected</b> will be deleted.").ariaLabel("delete ServicenowAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedServicenowAccounts.forEach(function(e){S(e)}),b.selectedServicenowAccounts=[]})},b.deselectServicenowAccounts=function(){b.selectedServicenowAccounts=[]},b.selectAllServicenowAccounts=function(){b.selectedServicenowAccounts=b.servicenowAccounts.rows};var A=!0,E=1;function y(e){b.servicenowAccounts=e||{count:0,rows:[]}}function S(e){m.intServicenowAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.servicenowAccounts.rows,{id:e.id}),b.servicenowAccounts.count-=1,b.servicenowAccounts.rows.length||b.getServicenowAccounts(),p.success({title:_.startCase("ServicenowAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintServicenowAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintServicenowAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getServicenowAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","servicenowAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("ServicenowAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_SUGARCRMACCOUNT",g.sugarcrmAccount=angular.copy(l),g.sugarcrmAccounts=r,g.newSugarcrmAccount=!1,g.sugarcrmAccount||(g.sugarcrmAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_SUGARCRMACCOUNT",g.newSugarcrmAccount=!0),g.addNewSugarcrmAccount=function(){g.errors=[],d.intSugarcrmAccount.save(g.sugarcrmAccount).$promise.then(function(e){g.sugarcrmAccounts.unshift(e.toJSON()),o.success({title:"SugarcrmAccount properly created",msg:g.sugarcrmAccount.name?g.sugarcrmAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSugarcrmAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSugarcrmAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSugarcrmAccount=function(){g.errors=[],d.intSugarcrmAccount.update({id:g.sugarcrmAccount.id},g.sugarcrmAccount).$promise.then(function(e){var t=_.find(g.sugarcrmAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SugarcrmAccount properly saved!",msg:g.sugarcrmAccount.name?g.sugarcrmAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSugarcrmAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSugarcrmAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSugarcrmAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The sugarcrmAccount will be deleted.").ariaLabel("Delete SugarcrmAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intSugarcrmAccount.delete({id:g.sugarcrmAccount.id}).$promise.then(function(){_.remove(g.sugarcrmAccounts,{id:g.sugarcrmAccount.id}),o.success({title:"SugarcrmAccount properly deleted!",msg:(g.sugarcrmAccount.name||"sugarcrmAccount")+" has been deleted!"}),v(g.sugarcrmAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSugarcrmAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSugarcrmAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","sugarcrmAccounts","sugarcrmAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditSugarcrmAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intSugarcrmField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intSugarcrmField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intSugarcrmField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.sugarcrmAccount={},o.sugarcrmConfiguration={},o.configurations=[],o.selectedSugarcrmConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.sugarcrmAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intSugarcrmAccount.getConfigurations({id:o.sugarcrmAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getSugarcrmConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getSugarcrmConfiguration=function(e){o.sugarcrmConfiguration=o.configurations[e],o.selectedSugarcrmConfiguration=e,i.intSugarcrmConfiguration.getSubjects({id:o.sugarcrmConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intSugarcrmConfiguration.getDescriptions({id:o.sugarcrmConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intSugarcrmConfiguration.getFields({id:o.sugarcrmConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditSugarcrmConfiguration=function(e,t){a.show({controller:"CreateOrEditSugarcrmConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{sugarcrmConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getSugarcrmConfiguration(0)})},o.deleteSugarcrmConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the sugarcrmConfiguration?").htmlContent("<b>"+(t.name||"sugarcrmConfiguration")+"</b> will be deleted.").ariaLabel("delete sugarcrmConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intSugarcrmConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"SugarcrmConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getSugarcrmConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.sugarcrmConfiguration.id},o.sugarcrmConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditSugarcrmAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.sugarcrmConfiguration,account:o.sugarcrmAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditSugarcrmAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.sugarcrmConfiguration,account:o.sugarcrmAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditSugarcrmAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.sugarcrmConfiguration,account:o.sugarcrmAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("SugarcrmAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_SUGARCRMCONFIGURATION",g.sugarcrmConfiguration=angular.copy(l),g.configurations=r,g.newSugarcrmConfiguration=!1,g.sugarcrmConfiguration||(g.sugarcrmConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_SUGARCRMCONFIGURATION",g.newSugarcrmConfiguration=!0),g.addNewSugarcrmConfiguration=function(){g.errors=[],d.intSugarcrmAccount.addConfiguration({id:t.params.id},g.sugarcrmConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"SugarcrmConfiguration properly created",msg:g.sugarcrmConfiguration.name?g.sugarcrmConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSugarcrmConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSugarcrmConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSugarcrmConfiguration=function(){g.errors=[],d.intSugarcrmConfiguration.update({id:g.sugarcrmConfiguration.id},g.sugarcrmConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SugarcrmConfiguration properly saved!",msg:g.sugarcrmConfiguration.name?g.sugarcrmConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSugarcrmConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSugarcrmConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSugarcrmConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The sugarcrmConfiguration will be deleted.").ariaLabel("Delete SugarcrmConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intSugarcrmConfiguration.delete({id:g.sugarcrmConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.sugarcrmConfiguration.id}),o.success({title:"SugarcrmConfiguration properly deleted!",msg:(g.sugarcrmConfiguration.name||"sugarcrmConfiguration")+" has been deleted!"}),v(g.sugarcrmConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intSugarcrmConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intSugarcrmConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","sugarcrmConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditSugarcrmConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intSugarcrmField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intSugarcrmField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intSugarcrmField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intSugarcrmAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditSugarcrmAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.sugarcrmAccount=c||e.params.sugarcrmAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoSugarcrmAccounts=function(){e.go("app.integrations.sugarcrmAccounts")},u.saveSugarcrmAccount=function(){r.intSugarcrmAccount.update({id:u.sugarcrmAccount.id},u.sugarcrmAccount).$promise.then(function(){l.success({title:"SugarcrmAccount updated!",msg:u.sugarcrmAccount.name?u.sugarcrmAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintSugarcrmAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","sugarcrmAccount","userProfileSection"],angular.module("app.integrations").controller("SugarcrmAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.sugarcrmAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="sugarcrmAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedSugarcrmAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,username,remoteUri,password,serverUrl,description",limit:10,page:1},b.editstate=function(e,t){n.go("app.integrations.sugarcrmAccounts.edit",{id:e.id,sugarcrmAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intSugarcrmAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"SugarcrmAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"SugarcrmAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("sugarcrmAccount")+"?").htmlContent("<b>"+(e.name||"sugarcrmAccount")+"</b> will be deleted.").ariaLabel("delete sugarcrmAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getSugarcrmAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intSugarcrmAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="SugarcrmAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSugarcrmAccount=function(e,t){i.show({controller:"CreateOrEditSugarcrmAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/sugarcrmAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{sugarcrmAccount:t,sugarcrmAccounts:b.sugarcrmAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSugarcrmAccount=S,b.exportSelectedSugarcrmAccounts=function(){var e=angular.copy(b.selectedSugarcrmAccounts);return b.selectedSugarcrmAccounts=[],e},b.deleteSelectedSugarcrmAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected sugarcrmAccounts?").htmlContent("<b>"+b.selectedSugarcrmAccounts.length+" selected</b> will be deleted.").ariaLabel("delete SugarcrmAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedSugarcrmAccounts.forEach(function(e){S(e)}),b.selectedSugarcrmAccounts=[]})},b.deselectSugarcrmAccounts=function(){b.selectedSugarcrmAccounts=[]},b.selectAllSugarcrmAccounts=function(){b.selectedSugarcrmAccounts=b.sugarcrmAccounts.rows};var A=!0,E=1;function y(e){b.sugarcrmAccounts=e||{count:0,rows:[]}}function S(e){m.intSugarcrmAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.sugarcrmAccounts.rows,{id:e.id}),b.sugarcrmAccounts.count-=1,b.sugarcrmAccounts.rows.length||b.getSugarcrmAccounts(),p.success({title:_.startCase("SugarcrmAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintSugarcrmAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintSugarcrmAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getSugarcrmAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","sugarcrmAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("SugarcrmAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_VTIGERACCOUNT",g.vtigerAccount=angular.copy(l),g.vtigerAccounts=r,g.newVtigerAccount=!1,g.vtigerAccount||(g.vtigerAccount={serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_VTIGERACCOUNT",g.newVtigerAccount=!0),g.addNewVtigerAccount=function(){g.errors=[],d.intVtigerAccount.save(g.vtigerAccount).$promise.then(function(e){g.vtigerAccounts.unshift(e.toJSON()),o.success({title:"VtigerAccount properly created",msg:g.vtigerAccount.name?g.vtigerAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intVtigerAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intVtigerAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVtigerAccount=function(){g.errors=[],d.intVtigerAccount.update({id:g.vtigerAccount.id},g.vtigerAccount).$promise.then(function(e){var t=_.find(g.vtigerAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VtigerAccount properly saved!",msg:g.vtigerAccount.name?g.vtigerAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intVtigerAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intVtigerAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVtigerAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The vtigerAccount will be deleted.").ariaLabel("Delete VtigerAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intVtigerAccount.delete({id:g.vtigerAccount.id}).$promise.then(function(){_.remove(g.vtigerAccounts,{id:g.vtigerAccount.id}),o.success({title:"VtigerAccount properly deleted!",msg:(g.vtigerAccount.name||"vtigerAccount")+" has been deleted!"}),v(g.vtigerAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intVtigerAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intVtigerAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","vtigerAccounts","vtigerAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditVtigerAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intVtigerField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intVtigerField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intVtigerField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.vtigerAccount={},o.vtigerConfiguration={},o.configurations=[],o.selectedVtigerConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.vtigerAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intVtigerAccount.getConfigurations({id:o.vtigerAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getVtigerConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getVtigerConfiguration=function(e){o.vtigerConfiguration=o.configurations[e],o.selectedVtigerConfiguration=e,i.intVtigerConfiguration.getSubjects({id:o.vtigerConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intVtigerConfiguration.getDescriptions({id:o.vtigerConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intVtigerConfiguration.getFields({id:o.vtigerConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditVtigerConfiguration=function(e,t){a.show({controller:"CreateOrEditVtigerConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/vtigerAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{vtigerConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getVtigerConfiguration(0)})},o.deleteVtigerConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the vtigerConfiguration?").htmlContent("<b>"+(t.name||"vtigerConfiguration")+"</b> will be deleted.").ariaLabel("delete vtigerConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intVtigerConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"VtigerConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getVtigerConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.vtigerConfiguration.id},o.vtigerConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditVtigerAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/vtigerAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.vtigerConfiguration,account:o.vtigerAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditVtigerAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/vtigerAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.vtigerConfiguration,account:o.vtigerAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditVtigerAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/vtigerAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.vtigerConfiguration,account:o.vtigerAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("VtigerAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_VTIGERCONFIGURATION",g.vtigerConfiguration=angular.copy(l),g.configurations=r,g.newVtigerConfiguration=!1,g.vtigerConfiguration||(g.vtigerConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_VTIGERCONFIGURATION",g.newVtigerConfiguration=!0),g.addNewVtigerConfiguration=function(){g.errors=[],d.intVtigerAccount.addConfiguration({id:t.params.id},g.vtigerConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"VtigerConfiguration properly created",msg:g.vtigerConfiguration.name?g.vtigerConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intVtigerConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intVtigerConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVtigerConfiguration=function(){g.errors=[],d.intVtigerConfiguration.update({id:g.vtigerConfiguration.id},g.vtigerConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VtigerConfiguration properly saved!",msg:g.vtigerConfiguration.name?g.vtigerConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intVtigerConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intVtigerConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVtigerConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The vtigerConfiguration will be deleted.").ariaLabel("Delete VtigerConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intVtigerConfiguration.delete({id:g.vtigerConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.vtigerConfiguration.id}),o.success({title:"VtigerConfiguration properly deleted!",msg:(g.vtigerConfiguration.name||"vtigerConfiguration")+" has been deleted!"}),v(g.vtigerConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intVtigerConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intVtigerConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","vtigerConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditVtigerConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intVtigerField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intVtigerField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intVtigerField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intVtigerAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditVtigerAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.vtigerAccount=c||e.params.vtigerAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoVtigerAccounts=function(){e.go("app.integrations.vtigerAccounts")},u.saveVtigerAccount=function(){r.intVtigerAccount.update({id:u.vtigerAccount.id},u.vtigerAccount).$promise.then(function(){l.success({title:"VtigerAccount updated!",msg:u.vtigerAccount.name?u.vtigerAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintVtigerAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","vtigerAccount","userProfileSection"],angular.module("app.integrations").controller("VtigerAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.vtigerAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="vtigerAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedVtigerAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,description,username,accessKey,remoteUri,serverUrl",limit:10,page:1},b.editstate=function(e,t){n.go("app.integrations.vtigerAccounts.edit",{id:e.id,vtigerAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intVtigerAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"VtigerAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"VtigerAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("vtigerAccount")+"?").htmlContent("<b>"+(e.name||"vtigerAccount")+"</b> will be deleted.").ariaLabel("delete vtigerAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getVtigerAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intVtigerAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="VtigerAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditVtigerAccount=function(e,t){i.show({controller:"CreateOrEditVtigerAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/vtigerAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{vtigerAccount:t,vtigerAccounts:b.vtigerAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteVtigerAccount=S,b.exportSelectedVtigerAccounts=function(){var e=angular.copy(b.selectedVtigerAccounts);return b.selectedVtigerAccounts=[],e},b.deleteSelectedVtigerAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected vtigerAccounts?").htmlContent("<b>"+b.selectedVtigerAccounts.length+" selected</b> will be deleted.").ariaLabel("delete VtigerAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedVtigerAccounts.forEach(function(e){S(e)}),b.selectedVtigerAccounts=[]})},b.deselectVtigerAccounts=function(){b.selectedVtigerAccounts=[]},b.selectAllVtigerAccounts=function(){b.selectedVtigerAccounts=b.vtigerAccounts.rows};var A=!0,E=1;function y(e){b.vtigerAccounts=e||{count:0,rows:[]}}function S(e){m.intVtigerAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.vtigerAccounts.rows,{id:e.id}),b.vtigerAccounts.count-=1,b.vtigerAccounts.rows.length||b.getVtigerAccounts(),p.success({title:_.startCase("VtigerAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintVtigerAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintVtigerAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getVtigerAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","vtigerAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("VtigerAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_ZENDESKACCOUNT",g.zendeskAccount=angular.copy(l),g.zendeskAccounts=r,g.newZendeskAccount=!1,g.zendeskAccount||(g.zendeskAccount={type:"integrationTab",authType:"password",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_ZENDESKACCOUNT",g.newZendeskAccount=!0),g.addNewZendeskAccount=function(){g.errors=[],d.intZendeskAccount.save(g.zendeskAccount).$promise.then(function(e){g.zendeskAccounts.unshift(e.toJSON()),o.success({title:"ZendeskAccount properly created",msg:g.zendeskAccount.name?g.zendeskAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZendeskAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZendeskAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveZendeskAccount=function(){g.errors=[],d.intZendeskAccount.update({id:g.zendeskAccount.id},g.zendeskAccount).$promise.then(function(e){var t=_.find(g.zendeskAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZendeskAccount properly saved!",msg:g.zendeskAccount.name?g.zendeskAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZendeskAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZendeskAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteZendeskAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The zendeskAccount will be deleted.").ariaLabel("Delete ZendeskAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intZendeskAccount.delete({id:g.zendeskAccount.id}).$promise.then(function(){_.remove(g.zendeskAccounts,{id:g.zendeskAccount.id}),o.success({title:"ZendeskAccount properly deleted!",msg:(g.zendeskAccount.name||"zendeskAccount")+" has been deleted!"}),v(g.zendeskAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZendeskAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZendeskAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","zendeskAccounts","zendeskAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditZendeskAccountDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intZendeskField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intZendeskField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intZendeskField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intZendeskAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditZendeskAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.zendeskAccount=c||e.params.zendeskAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoZendeskAccounts=function(){e.go("app.integrations.zendeskAccounts")},u.saveZendeskAccount=function(){r.intZendeskAccount.update({id:u.zendeskAccount.id},u.zendeskAccount).$promise.then(function(){l.success({title:"ZendeskAccount updated!",msg:u.zendeskAccount.name?u.zendeskAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintZendeskAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","zendeskAccount","userProfileSection"],angular.module("app.integrations").controller("ZendeskAccountController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intZendeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intZendeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intZendeskField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.zendeskAccount={},o.zendeskConfiguration={},o.zendeskConfigurations=[],o.selectedZendeskConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.zendeskAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intZendeskAccount.getConfigurations({id:o.zendeskAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.zendeskConfigurations=e.rows?e.rows:[],o.zendeskConfigurations.length&&o.getZendeskConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getZendeskConfiguration=function(e){o.zendeskConfiguration=o.zendeskConfigurations[e],o.selectedZendeskConfiguration=e,i.intZendeskConfiguration.getSubjects({id:o.zendeskConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intZendeskConfiguration.getDescriptions({id:o.zendeskConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intZendeskConfiguration.getFields({id:o.zendeskConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})}),i.intZendeskConfiguration.getTags({id:o.zendeskConfiguration.id}).$promise.then(function(e){o.selectedTags=e.rows?_.map(e.rows,"id"):[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditZendeskConfiguration=function(e,t){a.show({controller:"CreateOrEditZendeskConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zendeskAccounts/edit/zendeskConfigurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{zendeskConfiguration:t,zendeskConfigurations:o.zendeskConfigurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getZendeskConfiguration(0)})},o.deleteZendeskConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the zendeskConfiguration?").htmlContent("<b>"+(t.name||"zendeskConfiguration")+"</b> will be deleted.").ariaLabel("delete zendeskConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intZendeskConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.zendeskConfigurations,{id:t.id}),s.success({title:"ZendeskConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getZendeskConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.zendeskConfiguration.id},o.zendeskConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedTags=[],o.selectTagsChanged=function(e){i.intZendeskConfiguration.setTags({id:o.zendeskConfiguration.id,ids:o.selectedTags}).$promise.then(function(){s.success({title:"Tags set!",msg:"Tags has been set!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ADDTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})},i.tag.get({nolimit:!0,sort:"name"}).$promise.then(function(e){o.tags=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditZendeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zendeskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.zendeskConfiguration,account:o.zendeskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditZendeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zendeskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.zendeskConfiguration,account:o.zendeskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditZendeskAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zendeskAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.zendeskConfiguration,account:o.zendeskAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("ZendeskAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_ZENDESKCONFIGURATION",g.zendeskConfiguration=angular.copy(l),g.zendeskConfigurations=r,g.newZendeskConfiguration=!1,g.zendeskConfiguration||(g.zendeskConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_ZENDESKCONFIGURATION",g.newZendeskConfiguration=!0),g.addNewZendeskConfiguration=function(){g.errors=[],d.intZendeskAccount.addConfiguration({id:t.params.id},g.zendeskConfiguration).$promise.then(function(e){g.zendeskConfigurations.unshift(e.toJSON()),o.success({title:"ZendeskConfiguration properly created",msg:g.zendeskConfiguration.name?g.zendeskConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZendeskConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZendeskConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveZendeskConfiguration=function(){g.errors=[],d.intZendeskConfiguration.update({id:g.zendeskConfiguration.id},g.zendeskConfiguration).$promise.then(function(e){var t=_.find(g.zendeskConfigurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZendeskConfiguration properly saved!",msg:g.zendeskConfiguration.name?g.zendeskConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZendeskConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZendeskConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteZendeskConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The zendeskConfiguration will be deleted.").ariaLabel("Delete ZendeskConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intZendeskConfiguration.delete({id:g.zendeskConfiguration.id}).$promise.then(function(){_.remove(g.zendeskConfigurations,{id:g.zendeskConfiguration.id}),o.success({title:"ZendeskConfiguration properly deleted!",msg:(g.zendeskConfiguration.name||"zendeskConfiguration")+" has been deleted!"}),v(g.zendeskConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZendeskConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZendeskConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","zendeskConfigurations","zendeskConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditZendeskConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.zendeskAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="zendeskAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedZendeskAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,type,username,remoteUri,authType,password,token,serverUrl,description",limit:10,page:1},b.arraytype=_.keyBy([{option:"Integration_Tab",value:"'integrationTab'"},{option:"New_Tab",value:"'newTab'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayauthType=_.keyBy([{option:"Password",value:"'password'"},{option:"Token",value:"'token'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.integrations.zendeskAccounts.edit",{id:e.id,zendeskAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intZendeskAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"ZendeskAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"ZendeskAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("zendeskAccount")+"?").htmlContent("<b>"+(e.name||"zendeskAccount")+"</b> will be deleted.").ariaLabel("delete zendeskAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getZendeskAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intZendeskAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ZendeskAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditZendeskAccount=function(e,t){i.show({controller:"CreateOrEditZendeskAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zendeskAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{zendeskAccount:t,zendeskAccounts:b.zendeskAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteZendeskAccount=S,b.exportSelectedZendeskAccounts=function(){var e=angular.copy(b.selectedZendeskAccounts);return b.selectedZendeskAccounts=[],e},b.deleteSelectedZendeskAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected zendeskAccounts?").htmlContent("<b>"+b.selectedZendeskAccounts.length+" selected</b> will be deleted.").ariaLabel("delete ZendeskAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedZendeskAccounts.forEach(function(e){S(e)}),b.selectedZendeskAccounts=[]})},b.deselectZendeskAccounts=function(){b.selectedZendeskAccounts=[]},b.selectAllZendeskAccounts=function(){b.selectedZendeskAccounts=b.zendeskAccounts.rows};var A=!0,E=1;function y(e){b.zendeskAccounts=e||{count:0,rows:[]}}function S(e){m.intZendeskAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.zendeskAccounts.rows,{id:e.id}),b.zendeskAccounts.count-=1,b.zendeskAccounts.rows.length||b.getZendeskAccounts(),p.success({title:_.startCase("ZendeskAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintZendeskAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintZendeskAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getZendeskAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","zendeskAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("ZendeskAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_ZOHOACCOUNT",g.zohoAccount=angular.copy(l),g.zohoAccounts=r,g.newZohoAccount=!1,g.zohoAccount||(g.zohoAccount={host:"zoho.com",serverUrl:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():"")},g.title="INTEGRATIONS.NEW_ZOHOACCOUNT",g.newZohoAccount=!0),g.addNewZohoAccount=function(){g.errors=[],d.intZohoAccount.save(g.zohoAccount).$promise.then(function(e){g.zohoAccounts.unshift(e.toJSON()),o.success({title:"ZohoAccount properly created",msg:g.zohoAccount.name?g.zohoAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZohoAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZohoAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveZohoAccount=function(){g.errors=[],d.intZohoAccount.update({id:g.zohoAccount.id},g.zohoAccount).$promise.then(function(e){var t=_.find(g.zohoAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZohoAccount properly saved!",msg:g.zohoAccount.name?g.zohoAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZohoAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZohoAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteZohoAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The zohoAccount will be deleted.").ariaLabel("Delete ZohoAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intZohoAccount.delete({id:g.zohoAccount.id}).$promise.then(function(){_.remove(g.zohoAccounts,{id:g.zohoAccount.id}),o.success({title:"ZohoAccount properly deleted!",msg:(g.zohoAccount.name||"zohoAccount")+" has been deleted!"}),v(g.zohoAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZohoAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZohoAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","zohoAccounts","zohoAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditZohoAccountDialogController",e)}(),function(){"use strict";function e(a,n,i,s,e){var o=this;function r(e){i.intZohoField.delete({id:e.id}).$promise.then(function(){_.remove(o.subjects,{id:e.id}),s.success({title:"Subject deleted!",msg:"Subject has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function l(e){i.intZohoField.delete({id:e.id}).$promise.then(function(){_.remove(o.descriptions,{id:e.id}),s.success({title:"Description deleted!",msg:"Description has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}function d(e){i.intZohoField.delete({id:e.id}).$promise.then(function(){_.remove(o.fields,{id:e.id}),s.success({title:"Field deleted!",msg:"Field has been deleted!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})}o.currentUser=e.getCurrentUser(),o.zohoAccount={},o.zohoConfiguration={},o.configurations=[],o.selectedZohoConfiguration=-1,o.crudPermissions,o.init=function(e,t){o.zohoAccount=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.intZohoAccount.getConfigurations({id:o.zohoAccount.id,sort:"-updatedAt"}).$promise.then(function(e){return o.configurations=e.rows?e.rows:[],o.configurations.length&&o.getZohoConfiguration(0),i.variable.get({nolimit:!0,sort:"name"}).$promise}).then(function(e){o.variables=e.rows?e.rows:[],o.variablesById=_.keyBy(o.variables,"id")}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETCONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getZohoConfiguration=function(e){o.zohoConfiguration=o.configurations[e],o.selectedZohoConfiguration=e,i.intZohoConfiguration.getSubjects({id:o.zohoConfiguration.id}).$promise.then(function(e){return o.subjects=e.rows?e.rows:[],i.intZohoConfiguration.getDescriptions({id:o.zohoConfiguration.id}).$promise}).then(function(e){return o.descriptions=e.rows?e.rows:[],i.intZohoConfiguration.getFields({id:o.zohoConfiguration.id}).$promise}).then(function(e){o.fields=e.rows?e.rows:[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETConfigurations",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.createOrEditZohoConfiguration=function(e,t){a.show({controller:"CreateOrEditZohoConfigurationDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zohoAccounts/edit/configurations/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{zohoConfiguration:t,configurations:o.configurations,license:null,setting:null,crudPermissions:o.crudPermissions}}).finally(function(){o.getZohoConfiguration(0)})},o.deleteZohoConfiguration=function(e,t){var n=a.confirm().title("Are you sure want to delete the zohoConfiguration?").htmlContent("<b>"+(t.name||"zohoConfiguration")+"</b> will be deleted.").ariaLabel("delete zohoConfiguration").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){i.intZohoConfiguration.delete({id:t.id}).$promise.then(function(){_.remove(o.configurations,{id:t.id}),s.success({title:"ZohoConfiguration deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETECONFIGURATION",msg:e.data?JSON.stringify(e.data):e.toString()})}).finally(function(){o.getZohoConfiguration(0)})},function(){console.log("CANCEL")})},o.selectChangedAdvanced=function(){return i.intSalesforceConfiguration.update({id:o.zohoConfiguration.id},o.zohoConfiguration).$promise.then(function(){s.success({title:"Module updated!",msg:"Module has been updated!"})}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATECONFIGURATIONFIELD",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.selectedSubjects=[],o.createOrEditSubject=function(e,t){a.show({controller:"CreateOrEditZohoAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zohoAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"subject",item:t,items:o.subjects,configuration:o.zohoConfiguration,account:o.zohoAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteSubjectConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the subject?").htmlContent("<b>Subject</b> will be deleted.").ariaLabel("delete subject").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){r(t)},function(){console.log("CANCEL")})},o.deleteSelectedSubjects=function(e){var t=a.confirm().title("Are you sure want to delete the selected subjects?").htmlContent("<b>"+o.selectedSubjects.length+" selected</b> will be deleted.").ariaLabel("delete subjects").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedSubjects.forEach(function(e){r(e)}),o.selectedSubjects=[]})},o.selectedDescriptions=[],o.createOrEditDescription=function(e,t){a.show({controller:"CreateOrEditZohoAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zohoAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"description",item:t,items:o.descriptions,configuration:o.zohoConfiguration,account:o.zohoAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteDescriptionConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the description?").htmlContent("<b>Description</b> will be deleted.").ariaLabel("delete description").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){l(t)},function(){console.log("CANCEL")})},o.deleteSelectedDescriptions=function(e){var t=a.confirm().title("Are you sure want to delete the selected descriptions?").htmlContent("<b>"+o.selectedDescriptions.length+" selected</b> will be deleted.").ariaLabel("delete descriptions").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedDescriptions.forEach(function(e){l(e)}),o.selectedDescriptions=[]})},o.selectedFields=[],o.createOrEditField=function(e,t){a.show({controller:"CreateOrEditZohoAccountItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zohoAccounts/edit/item/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{type:"field",item:t,items:o.fields,configuration:o.zohoConfiguration,account:o.zohoAccount,license:null,setting:null,crudPermissions:o.crudPermissions}})},o.deleteFieldConfirm=function(e,t){var n=a.confirm().title("Are you sure want to delete the field?").htmlContent("<b>Field</b> will be deleted.").ariaLabel("delete field").targetEvent(e).ok("OK").cancel("CANCEL");a.show(n).then(function(){d(t)},function(){console.log("CANCEL")})},o.deleteSelectedFields=function(e){var t=a.confirm().title("Are you sure want to delete the selected fields?").htmlContent("<b>"+o.selectedFields.length+" selected</b> will be deleted.").ariaLabel("delete fields").targetEvent(e).ok("OK").cancel("CANCEL");a.show(t).then(function(){o.selectedFields.forEach(function(e){d(e)}),o.selectedFields=[]})}}e.$inject=["$mdDialog","$document","api","toasty","Auth"],angular.module("app.integrations").controller("ZohoAccountConfigurationsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="INTEGRATIONS.EDIT_ZOHOCONFIGURATION",g.zohoConfiguration=angular.copy(l),g.configurations=r,g.newZohoConfiguration=!1,g.zohoConfiguration||(g.zohoConfiguration={channel:"voice",type:"inbound"},g.title="INTEGRATIONS.NEW_ZOHOCONFIGURATION",g.newZohoConfiguration=!0),g.addNewZohoConfiguration=function(){g.errors=[],d.intZohoAccount.addConfiguration({id:t.params.id},g.zohoConfiguration).$promise.then(function(e){g.configurations.unshift(e.toJSON()),o.success({title:"ZohoConfiguration properly created",msg:g.zohoConfiguration.name?g.zohoConfiguration.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZohoConfiguration.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZohoConfiguration.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveZohoConfiguration=function(){g.errors=[],d.intZohoConfiguration.update({id:g.zohoConfiguration.id},g.zohoConfiguration).$promise.then(function(e){var t=_.find(g.configurations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"ZohoConfiguration properly saved!",msg:g.zohoConfiguration.name?g.zohoConfiguration.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZohoConfiguration.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZohoConfiguration.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteZohoConfiguration=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The zohoConfiguration will be deleted.").ariaLabel("Delete ZohoConfiguration").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.intZohoConfiguration.delete({id:g.zohoConfiguration.id}).$promise.then(function(){_.remove(g.configurations,{id:g.zohoConfiguration.id}),o.success({title:"ZohoConfiguration properly deleted!",msg:(g.zohoConfiguration.name||"zohoConfiguration")+" has been deleted!"}),v(g.zohoConfiguration)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.intZohoConfiguration.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.intZohoConfiguration.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","configurations","zohoConfiguration","api","Auth","license","setting","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditZohoConfigurationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){a.hide()}p.currentUser=m.getCurrentUser(),p.errors=[],p.title="INTEGRATIONS.EDIT_"+_.toUpper(d),p.item=angular.copy(r),p.items=o,p.type=d,p.crudPermissions=u,p.newItem=!1,p.item||(p.item={type:"string"},p.item[_.capitalize(d)+"Id"]=s.id,p.title="INTEGRATIONS.NEW_"+_.toUpper(d),p.newItem=!0),p.addNewItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intZohoField.save(p.item).$promise.then(function(e){p.items.unshift(e),i.success({title:_.capitalize(d)+" properly created",msg:_.capitalize(d)+" has been created!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.save"}]})},p.saveItem=function(){p.errors=[],p.customField&&(p.item.idField=p.customField.id,p.item.nameField=p.customField.name,p.item.customField=p.customField.custom);c.intZohoField.update({id:p.item.id},p.item).$promise.then(function(e){var t=_.find(p.items,{id:e.id});t&&_.merge(t,e),i.success({title:_.capitalize(d)+" properly saved!",msg:_.capitalize(d)+" has been saved!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.intItem.update"}]})},p.deleteItem=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The "+d+" will be deleted.").ariaLabel("Delete "+_.capitalize(d)).ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.intZohoField.delete({id:p.item.id}).$promise.then(function(){_.remove(p.items,{id:p.item.id}),i.success({title:_.capitalize(d)+" properly deleted!",msg:_.capitalize(d)+" has been deleted!"}),g()}).catch(function(e){console.error(e),p.errors=e.data.errors||[{message:e.toString(),type:"api.item.delete"}]})},function(){})},p.getSelectedVariable=function(){return void 0!==p.item.variableName?p.item.variableName:"Please select a variable"},p.closeDialog=g,c.variable.get({nolimit:!0}).$promise.then(function(e){return p.variables=e.rows?e.rows:[],c.voiceAgentReport.describe().$promise}).then(function(e){return p.voiceAgentReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceAgentReportColumns.push("recordingURL"),c.voiceDialReport.describe().$promise}).then(function(e){p.voiceDialReportColumns=_.difference(_.keys(e),["$promise","$resolved","createdAt","updatedAt","sourceid"]),p.voiceDialReportColumns.push("recordingURL")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETVARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intZohoAccount.getFields({id:l.id,ticketType:s.ticketType?s.ticketType:void 0}).$promise.then(function(e){p.accountConnected=!0,p.fields=e.rows?e.rows:[],p.item.idField&&(p.customField=_.find(p.fields,{id:p.item.idField}))}).catch(function(e){p.accountConnected=!1,console.error(e)})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","configuration","items","item","account","type","api","Auth","crudPermissions"],angular.module("app.integrations").controller("CreateOrEditZohoAccountItemDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.zohoAccount=c||e.params.zohoAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoZohoAccounts=function(){e.go("app.integrations.zohoAccounts")},u.saveZohoAccount=function(){r.intZohoAccount.update({id:u.zohoAccount.id},u.zohoAccount).$promise.then(function(){l.success({title:"ZohoAccount updated!",msg:u.zohoAccount.name?u.zohoAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETintZohoAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","zohoAccount","userProfileSection"],angular.module("app.integrations").controller("ZohoAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.zohoAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="zohoAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedZohoAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,host,authToken,serverUrl,description",limit:10,page:1},b.arrayhost=_.keyBy([{option:"zoho.com",value:"'zoho.com'"},{option:"zoho.eu",value:"'zoho.eu'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.integrations.zohoAccounts.edit",{id:e.id,zohoAccount:e,crudPermissions:b.crudPermissions})},b.testtestintegrationaccount=function(e,t){return m.intZohoAccount.getFields({id:e.id,test:!0}).$promise.then(function(){p.success({title:"ZohoAccount properly tested",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"ZohoAccount properly tested",msg:e.data?e.data.message?e.data.message:JSON.stringify(e.data):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("zohoAccount")+"?").htmlContent("<b>"+(e.name||"zohoAccount")+"</b> will be deleted.").ariaLabel("delete zohoAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getZohoAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.intZohoAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ZohoAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditZohoAccount=function(e,t){i.show({controller:"CreateOrEditZohoAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/integrations/views/zohoAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{zohoAccount:t,zohoAccounts:b.zohoAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteZohoAccount=S,b.exportSelectedZohoAccounts=function(){var e=angular.copy(b.selectedZohoAccounts);return b.selectedZohoAccounts=[],e},b.deleteSelectedZohoAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected zohoAccounts?").htmlContent("<b>"+b.selectedZohoAccounts.length+" selected</b> will be deleted.").ariaLabel("delete ZohoAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedZohoAccounts.forEach(function(e){S(e)}),b.selectedZohoAccounts=[]})},b.deselectZohoAccounts=function(){b.selectedZohoAccounts=[]},b.selectAllZohoAccounts=function(){b.selectedZohoAccounts=b.zohoAccounts.rows};var A=!0,E=1;function y(e){b.zohoAccounts=e||{count:0,rows:[]}}function S(e){m.intZohoAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.zohoAccounts.rows,{id:e.id}),b.zohoAccounts.count-=1,b.zohoAccounts.rows.length||b.getZohoAccounts(),p.success({title:_.startCase("ZohoAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEintZohoAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEintZohoAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getZohoAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","zohoAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.integrations").controller("ZohoAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="JSCRIPTY.EDIT_PROJECT",g.project=angular.copy(l),g.projects=r,g.newProject=!1,g.project||(g.project={enableUncompleteSave:!0},g.title="JSCRIPTY.NEW_PROJECT",g.newProject=!0),g.addNewProject=function(){g.errors=[],d.jscriptyProject.save(g.project).$promise.then(function(e){g.projects.unshift(e.toJSON()),o.success({title:"Project properly created",msg:g.project.name?g.project.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.jscriptyProject.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.jscriptyProject.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveProject=function(){g.errors=[],d.jscriptyProject.update({id:g.project.id},g.project).$promise.then(function(e){var t=_.find(g.projects,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Project properly saved!",msg:g.project.name?g.project.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.jscriptyProject.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.jscriptyProject.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteProject=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The project will be deleted.").ariaLabel("Delete Project").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.jscriptyProject.delete({id:g.project.id}).$promise.then(function(){_.remove(g.projects,{id:g.project.id}),o.success({title:"Project properly deleted!",msg:(g.project.name||"project")+" has been deleted!"}),v(g.project)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.jscriptyProject.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.jscriptyProject.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","projects","project","api","Auth","license","setting","crudPermissions"],angular.module("app.jscripty").controller("CreateOrEditProjectDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;o.project={},o.localizationMap=s;var r=new Date;r.setHours(0,0,0,0),o.pickerModel={dateStart:r,dateEnd:null,selectedTemplate:"TD"},o.init=function(e){o.project=e,o.getAnswers()},o.getSummary=function(){return a.jscriptyProject.getSummary({id:o.project.id,startTime:{$gte:o.pickerModel.dateStart,$lte:moment(o.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format()},nolimit:!0}).$promise.then(function(e){if(void 0!==e.length){var t=[e.buffer],n=new Blob(t,{type:e.type}),a=window.document.createElement("a");a.setAttribute("href",URL.createObjectURL(n)),a.setAttribute("download","jscriptyProjectSummary_"+o.project.id+".csv"),a.click()}else i.info({title:"EXPORT",msg:"No answers available"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.jscriptyProject.getSummary",msg:e.data?JSON.stringify(e.data):e.toString()})})},o.getAnswers=function(){return o.hasIdAnswers=!1,a.jscriptyProject.getAnswers({id:o.project.id,sort:"-createdAt,questionId",createdAt:{$gte:o.pickerModel.dateStart,$lte:moment(o.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format()},nolimit:!0}).$promise.then(function(e){if(e&&e.rows&&e.hasOwnProperty("count")){o.answers={};for(var t=0,n=e.count;t<n;t++)e.rows[t].questionId&&(o.hasIdAnswers=!0,o.answers.hasOwnProperty(e.rows[t].questionId)||(o.answers[e.rows[t].questionId]={question:e.rows[t].question,answers:{},sum:0}),""===e.rows[t].answer&&(e.rows[t].answer="NO_ANSWER"),o.answers[e.rows[t].questionId].answers[e.rows[t].answer]?o.answers[e.rows[t].questionId].answers[e.rows[t].answer]+=1:o.answers[e.rows[t].questionId].answers[e.rows[t].answer]=1,o.answers[e.rows[t].questionId].sum+=1)}}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETANSWERS",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$mdDialog","$document","$window","api","toasty","dateFilterLocalizationFactory"],angular.module("app.jscripty").controller("ProjectAnswersController",e)}(),function(){"use strict";angular.module("app.jscripty").controller("ProjectBuilderController",function(){var t=this;t.project={},t.optionsBuilder={questionTypes:["text","textarea","radio","checkbox","select","number","date","time","email","range","url"],elementTypes:["question","paragraph"]},t.init=function(e){t.project=e,_.isObjectLike(e.formData)?t.project.formData=e.formData:t.isJsonString(e.formData)?t.project.formData=JSON.parse(e.formData):t.project.formData={}},t.isJsonString=function(e){if(_.isNil(e))return!1;try{JSON.parse(e)}catch(e){return!1}return!0}})}(),function(){"use strict";function e(t,n,a,e,i,s,o){var r=this;function l(e){t.hide(e)}r.newProject=!0,r.project=angular.copy(i),r.projects=s,r.title=o.instant("JSCRIPTY.CLONE_PROJECT"),i&&i.name&&(r.title+=": "+i.name),r.cloneProject=function(){return e.jscriptyProject.clone({id:i.id},r.project).$promise.then(function(e){r.projects.unshift(e.toJSON()),a.success({title:"Project properly cloned",msg:r.project.name?r.project.name+" has been cloned!":""}),n.go("app.jscripty.projects.edit",{id:e.id}),l(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){r.errors=e.data.errors||[{message:e.toString(),type:"api.jscriptyProject.clone"}];for(var t=0;t<e.data.errors.length;t+=1)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.jscriptyProject.clone",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$mdDialog","$state","toasty","api","project","projects","$translate"],angular.module("app.jscripty").controller("ProjectcloneController",e)}(),function(){"use strict";function e(a,i,t){var o=this;o.project={},o.responseData={},o.formViewer={},o.init=function(e){o.project=e,t.$on("mwForm.pageEvents.pageCurrentChanged",function(e,t){if(t.currentPage&&o.project.formData&&o.project.formData.pages)for(var n=0,a=o.project.formData.pages.length;n<a;n++)if(t.currentPage.number<n+1&&o.project.formData.pages[n].elements)for(var i=0,s=o.project.formData.pages[n].elements.length;i<s;i++)"question"===o.project.formData.pages[n].elements[i].type&&o.project.formData.pages[n].elements[i].question&&delete o.responseData[o.project.formData.pages[n].elements[i].question.id]})},o.onSubmit=function(e){var t=a.defer(),n=i.confirm().title("Would you like to save your survey?").textContent("").ariaLabel("survey").targetEvent(e).ok("SAVE").cancel("CANCEL");return i.show(n).then(function(){t.resolve(!0)},function(){t.reject()}),t.promise},o.resetViewer=function(){o.formViewer.reset&&o.formViewer.reset()}}e.$inject=["$q","$mdDialog","$scope"],angular.module("app.jscripty").controller("ProjectViewerController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.project={},c.projectSessions={count:0,rows:[]},c.selectedProjectSessions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,starttime,endtime,membername,calleridnum,completed",sort:"-starttime",limit:10,page:1},c.init=function(e,t){c.project=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.project.id,c.getProjectSessions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the session?").htmlContent("<b>"+(e.name||"session")+"</b> will be deleted.").ariaLabel("delete session").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getProjectSessions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.jscriptyProject.getSessions(c.query,p).$promise},c.createOrEditProjectSession=function(e,t){s.show({controller:"CreateOrEditSessionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/sessions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:c.project,session:t,sessions:c.projectSessions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.showQuestionsProjectSession=function(e,n){s.show({controller:"ShowQuestionsSessionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/sessions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,resolve:{questions:["apiResolver","$stateParams",function(e,t){return e.resolve("jscriptySessionReport@getQuestions",{fields:"question,answer",sort:"id",id:n.id})}]},locals:{project:c.project,session:n}})},c.exportSelectedProjectSessions=function(){var e=angular.copy(c.selectedProjectSessions);return c.selectedProjectSessions=[],e},c.deleteProjectSession=g,c.deleteSelectedProjectSessions=function(e){var t=s.confirm().title("Are you sure want to delete the selected sessions?").htmlContent("<b>"+c.selectedProjectSessions.length+" selected</b> will be deleted.").ariaLabel("delete sessions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedProjectSessions.forEach(function(e){g(e)}),c.selectedProjectSessions=[]})};var m=!0,u=1;function p(e){c.projectSessions=e||{count:0,rows:[]}}function g(e){l.jscriptySessionReport.delete({id:e.id}).$promise.then(function(){_.remove(c.projectSessions.rows,{id:e.id}),c.projectSessions.count-=1,c.projectSessions.rows.length||c.getProjectSessions(),r.success({title:"Session deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETjscriptyProject"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETjscriptyProject",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getProjectSessions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.jscripty").controller("ProjectSessionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l){this.title="JSCRIPTY.SESSION_RESULTS",this.session=s,this.questions=o,this.project=r,this.closeDialog=function(e){a.hide(e)}}e.$inject=["$scope","$state","$location","$mdDialog","toasty","session","questions","project","api"],angular.module("app.jscripty").controller("ShowQuestionsSessionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.project=c||e.params.project||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.clonedialog=function(e,t){n.show({controller:"ProjectcloneController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/clone/clone.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{project:e,projects:u.projects?u.projects.rows:[],crudPermissions:u.crudPermissions}})},u.alert=l.info,u.gotoProjects=function(){e.go("app.jscripty.projects")},u.saveProject=function(){r.jscriptyProject.update({id:u.project.id},u.project).$promise.then(function(){l.success({title:"Project updated!",msg:u.project.name?u.project.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETjscriptyProject",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","project","userProfileSection"],angular.module("app.jscripty").controller("JscriptyProjectController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.projects=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="projects",b.listOrder="",b.listOrderAsc=null,b.selectedProjects=[],b.query={fields:"createdAt,updatedAt,id,name,enableUncompleteSave,description,formData",sort:"-updatedAt",limit:10,page:1},b.editstate=function(e,t){n.go("app.jscripty.projects.edit",{id:e.id,project:e,crudPermissions:b.crudPermissions})},b.clonedialog=function(e,t){i.show({controller:"ProjectcloneController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{project:e,projects:b.projects?b.projects.rows:[],crudPermissions:b.crudPermissions}})},b.sessionsgoto=function(e,t){n.go("app.jscripty.projects.edit",{id:e.id,tab:3})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("project")+"?").htmlContent("<b>"+(e.name||"project")+"</b> will be deleted.").ariaLabel("delete project").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getProjects=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.jscriptyProject.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Projects",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditProject=function(e,t){i.show({controller:"CreateOrEditProjectDialogController",controllerAs:"vm",templateUrl:"app/main/apps/jscripty/views/projects/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{project:t,projects:b.projects.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteProject=S,b.exportSelectedProjects=function(){var e=angular.copy(b.selectedProjects);return b.selectedProjects=[],e},b.deleteSelectedProjects=function(e){var t=i.confirm().title("Are you sure want to delete the selected projects?").htmlContent("<b>"+b.selectedProjects.length+" selected</b> will be deleted.").ariaLabel("delete Projects").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedProjects.forEach(function(e){S(e)}),b.selectedProjects=[]})},b.deselectProjects=function(){b.selectedProjects=[]},b.selectAllProjects=function(){b.selectedProjects=b.projects.rows};var A=!0,E=1;function y(e){b.projects=e||{count:0,rows:[]}}function S(e){m.jscriptyProject.delete({id:e.id}).$promise.then(function(){_.remove(b.projects.rows,{id:e.id}),b.projects.count-=1,b.projects.rows.length||b.getProjects(),p.success({title:_.startCase("Project")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEjscriptyProject"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEjscriptyProject",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getProjects())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","projects","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.jscripty").controller("JscriptyProjectsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MAIL.EDIT_MAILACCOUNT",g.mailAccount=angular.copy(l),g.mailAccounts=r,g.newMailAccount=!1,g.mailAccount||(g.mailAccount={active:!0,cservice:"null",cauthentication:!0,fontSize:13,waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},g.title="MAIL.NEW_MAILACCOUNT",g.newMailAccount=!0),t.params.id&&(g.mailAccount.MailAccountId=t.params.id),g.addNewMailAccount=function(){g.errors=[],d.mailAccount.save(g.mailAccount).$promise.then(function(e){g.mailAccounts.unshift(e.toJSON()),o.success({title:"MailAccount properly created",msg:g.mailAccount.name?g.mailAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMailAccount=function(){g.errors=[],d.mailAccount.update({id:g.mailAccount.id},g.mailAccount).$promise.then(function(e){var t=_.find(g.mailAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailAccount properly saved!",msg:g.mailAccount.name?g.mailAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMailAccount=function(e){if(g.mailAccount.service)return o.error({title:"Mail Account not deleted!",msg:"You can't remove service account"});g.errors=[];var t=a.confirm().title("Are you sure?").content("The mailAccount will be deleted.").ariaLabel("Delete MailAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.mailAccount.delete({id:g.mailAccount.id}).$promise.then(function(){_.remove(g.mailAccounts,{id:g.mailAccount.id}),o.success({title:"MailAccount properly deleted!",msg:(g.mailAccount.name||"mailAccount")+" has been deleted!"}),v(g.mailAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.lists,{id:e.resourceId})}),n=null;if(g.mailAccount&&(n=_.find(g.lists,{id:Number(g.mailAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.lists,{id:n.id});a.canSelect=!1,t.push(a)}g.lists=t})}else{var n=[],a=null;g.mailAccount&&(a=_.find(g.lists,{id:Number(g.mailAccount.ListId)}));for(var i=0;i<g.lists.length;i++)a&&g.lists[i].id===a.id&&(g.lists[i].canSelect=!1,n.push(g.lists[i]));g.lists=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","mailAccounts","mailAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.mail").controller("CreateOrEditMailAccountDialogController",e)}(),function(){"use strict";function e(o,i,a,s,e){var r=this;function t(e,t){if(r.mailAccountApps.rows.length){var n=r.mailAccountApps.rows[t]?r.mailAccountApps.rows[t]:r.mailAccountApps.rows[0];i.show({controller:"EditMailAccountApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccountApp:n,mailAccount:r.mailAccount,crudPermissions:r.crudPermissions}}).then(function(e){e&&(e.id?r.mailAccountApps.rows[t]=e:r.mailAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function l(){for(var e=1,t=[],n=0;n<r.mailAccountApps.rows.length;n++,0){var a=r.mailAccountApps.rows[n],i=[],s=[];a.intervals="*,*,*,*"!==a.interval?[a.interval]:a.IntervalId?_.map(_.filter(r.intervals.rows,{IntervalId:a.IntervalId}),"interval"):[],a.context=r.mailAccount.context,a.exten=r.mailAccount.exten,a.type&&(a.type=a.type.toLowerCase()),a.priority=i.length?_.last(i).priority+1:e,e=(s.length?_.last(s).priority:a.priority)+1,t=_.concat(t,i,[a],s)}o.mailAccount.addApplications({id:r.mailAccount.id},_.sortBy(t,"priority")).$promise.then(function(e){r.mailAccountApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){r.mailAccountApps=e||{count:0,rows:[]}}r.currentUser=e.getCurrentUser(),r.mailAccount={},r.mailAccountApps={count:0,rows:[]},r.selectedMailAccountApps=[],r.crudPermissions,r.query={sort:"priority"},r.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",types:["always","custom","list"],fields:[],isApp:!1},{app:"noop",appType:"noop",type:"noop",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,fields:[{title:"Value",name:"value",type:"text",param:0}]},{app:"system",appType:"system",type:"system",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,extraApi:[{name:"variables",field:{name:"variable",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1012}}],fields:[{title:"Command",name:"command",type:"text",required:!0,param:0},{title:"Variable",name:"variable",type:"apiselect",values:"variables",value:"variable.name",option:"variable.name",defaultValues:[{value:"''",option:"None"}],defaultValue:"''",param:1}]},{app:"gotop",appType:"gotop",type:"goto",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Priority",name:"priority",type:"number",required:!0,min:0,param:0}]},{app:"gotoif",appType:"gotoif",type:"gotoif",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Condition",name:"condition",type:"text",required:!0,param:0},{title:"truepriority",name:"truepriority",type:"number",min:1,required:!0,param:1},{title:"falsepriority",name:"falsepriority",type:"number",min:1,required:!0,param:2}]},{app:"queue",appType:"queue",foreignKey:"MailQueueId",type:"queue",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"queues",field:{name:"queue",key:"name"},route:"mailQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:601}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",defaultValue:300,required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:300,param:1}]},{app:"agent",appType:"agent",type:"agent",foreignKey:"UserId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"agents",field:{name:"agent",key:"name"},route:"user",filters:{fields:"id,name",sort:"name",nolimit:!0,role:"agent"},permissions:{section:202}}],fields:[{title:"Agent",name:"agent",type:"apiselect",values:"agents",value:"agent.name",option:"agent.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:30,param:1}]},{app:"autoreply",appType:"autoreply",type:"autoreply",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"times",name:"times",type:"select",defaultValue:"1",values:[{option:"One Time",value:"1"},{option:"Always",value:"0"}],required:!0,param:0},{title:"Text",name:"text",type:"html",required:!0,param:1}]},{app:"close",appType:"close",type:"close",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Disposition",name:"disposition",type:"text",required:!0,param:0}]},{app:"tag",appType:"tag",type:"tag",foreignKey:"TagId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"tags",field:{name:"tag",key:"name"},route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1008}}],fields:[{title:"Tag",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",required:!0,param:0}]}],["app"]),{isApp:!1}),r.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},r.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){l()}},r.init=function(e,t){r.mailAccount=e,r.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},r.applications.disabled=!r.crudPermissions.canEdit,r.query.id=e.id,r.query.isApp=!0,r.query.nolimit=!0,r.getMailAccountApps(),r.getIntervals()},r.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){r.mailAccountApps.rows.splice(t,1),l()},function(){console.log("CANCEL")})},r.getMailAccountApps=function(){r.promise=o.mailAccount.getApplications(r.query,n).$promise},r.editMailAccountApp=t,r.editInterval=function(e,t){if(r.mailAccountApps.rows.length){var n=r.mailAccountApps.rows[t]?r.mailAccountApps.rows[t]:r.mailAccountApps.rows[0];i.show({controller:"EditMailAccountAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:r.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,l())})}},r.deleteMailAccountApp=function(e){_.remove(r.mailAccountApps.rows,{id:e.id}),l(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},r.deleteSelectedMailAccountApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+r.selectedMailAccountApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){r.selectedMailAccountApps.forEach(function(e){_.remove(r.mailAccountApps.rows,{id:e.id})}),r.selectedMailAccountApps=[],l()})},r.rewriteRouting=l,r.getIntervals=function(){return o.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){r.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.mail").controller("MailAccountActionsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.mailAccount.getAgents({id:c.mailAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserMailAccount?"penalty "+e.UserMailAccount.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.mailAccount=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.mailAccount.removeAgents({id:c.mailAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.mailAccount.addAgents({id:c.mailAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("MAIL.ALL_AGENTS"),labelSelected:r.instant("MAIL.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","mailAccount","mailAccounts","realtime","$translate","Auth","crudPermissions"],angular.module("app.mail").controller("MailAccountagentaddController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.agent=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agent.appdata)switch(l.agent.appType?l.agent.appType.toLowerCase():l.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agent.appdata.split(",");l.agent.key=d[0],l.agent.language=d[1],l.agent.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agent.appdata.split(",");l.agent.accesskeyid=d[0],l.agent.secretaccesskey=d[1],l.agent.lexregion=d[2],l.agent.botname=d[3],l.agent.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agent.appdata.split(",");l.agent.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agent.text=d.slice(1,d.length).join(",");break;case"message":l.agent.text=l.agent.appdata;break;case"set":l.agent.name=l.agent.appdata.split("=")[0],l.agent.value=l.agent.appdata.split("=")[1];break;case"agi":l.agent.project=l.agent.appdata;break;default:var c=l.agent.appdata.split(",");l.agent.agent=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.agent.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.agent.timeout=30;function m(e){t.hide(e)}l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outbounddial"===l.agent.appType.toLowerCase()&&(l.agent.prefix=l.agent.phone?l.agent.phone.split("$")[0]:void 0,l.agent.callerId=l.agent.callerID?"CALLERID(all)="+l.agent.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outboundDial"===l.agent.appType&&(l.agent.phone=i.cutdigits?(l.agent.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agent.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agent.options+="U(xcally-mixmonitor-context)"):l.agent.options=l.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.agents,{name:l.agent.agent});t&&(l.agent.UserId=t.id);if(l.agent.appType&&"custom"===l.agent.appType);else switch((l.agent.app||l.agent.appType).toLowerCase()){case"set":l.agent.appdata=l.agent.name+"="+l.agent.value;break;case"custom":break;default:e[0]=l.agent.agent,e[1]=l.agent.timeout,l.agent.appdata=e.join(",")}m(l.agent)},l.closeDialog=m,o.hasRole("admin")?s.user.get({fields:"id,name",sort:"name",nolimit:"true",role:"agent"}).$promise.then(function(e){l.agents=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.user.get({fields:"id,name",sort:"name",nolimit:"true",role:"agent"}).$promise.then(function(e){l.agents=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.agents,{id:e.resourceId})}),n=null;if(l.agent&&(n=_.find(l.agents,{name:l.agent.agent})),n&&!_.some(t,["id",n.id])){var a=_.find(l.agents,{id:n.id});a.canSelect=!1,t.push(a)}l.agents=t})}else{var n=[],a=null;l.agent&&(a=_.find(l.agents,{name:l.agent.agent}));for(var i=0;i<l.agents.length;i++)a&&l.agents[i].id===a.id&&(l.agents[i].canSelect=!1,n.push(l.agents[i]));l.agents=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.autoreply=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.autoreply.appdata)switch(l.autoreply.appType?l.autoreply.appType.toLowerCase():l.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.autoreply.appdata.split(",");l.autoreply.key=d[0],l.autoreply.language=d[1],l.autoreply.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.autoreply.appdata.split(",");l.autoreply.accesskeyid=d[0],l.autoreply.secretaccesskey=d[1],l.autoreply.lexregion=d[2],l.autoreply.botname=d[3],l.autoreply.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.autoreply.appdata.split(",");l.autoreply.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.autoreply.text=d.slice(1,d.length).join(",");break;case"message":l.autoreply.text=l.autoreply.appdata;break;case"set":l.autoreply.name=l.autoreply.appdata.split("=")[0],l.autoreply.value=l.autoreply.appdata.split("=")[1];break;case"agi":l.autoreply.project=l.autoreply.appdata;break;default:var c=l.autoreply.appdata.split(",");l.autoreply.times=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.autoreply.text=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.autoreply.times=1;function m(e){t.hide(e)}l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outbounddial"===l.autoreply.appType.toLowerCase()&&(l.autoreply.prefix=l.autoreply.phone?l.autoreply.phone.split("$")[0]:void 0,l.autoreply.callerId=l.autoreply.callerID?"CALLERID(all)="+l.autoreply.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outboundDial"===l.autoreply.appType&&(l.autoreply.phone=i.cutdigits?(l.autoreply.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.autoreply.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.autoreply.options+="U(xcally-mixmonitor-context)"):l.autoreply.options=l.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(l.autoreply.appType&&"custom"===l.autoreply.appType);else switch((l.autoreply.app||l.autoreply.appType).toLowerCase()){case"set":l.autoreply.appdata=l.autoreply.name+"="+l.autoreply.value;break;case"custom":break;default:e[0]=l.autoreply.times,e[1]=l.autoreply.text,l.autoreply.appdata=e.join(",")}m(l.autoreply)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.close=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.close.appdata)switch(l.close.appType?l.close.appType.toLowerCase():l.close.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.close.appdata.split(",");l.close.key=d[0],l.close.language=d[1],l.close.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.close.appdata.split(",");l.close.accesskeyid=d[0],l.close.secretaccesskey=d[1],l.close.lexregion=d[2],l.close.botname=d[3],l.close.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.close.appdata.split(",");l.close.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.close.text=d.slice(1,d.length).join(",");break;case"message":l.close.text=l.close.appdata;break;case"set":l.close.name=l.close.appdata.split("=")[0],l.close.value=l.close.appdata.split("=")[1];break;case"agi":l.close.project=l.close.appdata;break;default:var c=l.close.appdata.split(",");l.close.disposition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outbounddial"===l.close.appType.toLowerCase()&&(l.close.prefix=l.close.phone?l.close.phone.split("$")[0]:void 0,l.close.callerId=l.close.callerID?"CALLERID(all)="+l.close.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outboundDial"===l.close.appType&&(l.close.phone=i.cutdigits?(l.close.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.close.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.close.options+="U(xcally-mixmonitor-context)"):l.close.options=l.close.options.replace("U(xcally-mixmonitor-context)",""));if(l.close.appType&&"custom"===l.close.appType);else switch((l.close.app||l.close.appType).toLowerCase()){case"set":l.close.appdata=l.close.name+"="+l.close.value;break;case"custom":break;default:e[0]=l.close.disposition,l.close.appdata=e.join(",")}m(l.close)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotoif=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotoif.appdata)switch(l.gotoif.appType?l.gotoif.appType.toLowerCase():l.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotoif.appdata.split(",");l.gotoif.key=d[0],l.gotoif.language=d[1],l.gotoif.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotoif.appdata.split(",");l.gotoif.accesskeyid=d[0],l.gotoif.secretaccesskey=d[1],l.gotoif.lexregion=d[2],l.gotoif.botname=d[3],l.gotoif.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotoif.appdata.split(",");l.gotoif.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotoif.text=d.slice(1,d.length).join(",");break;case"message":l.gotoif.text=l.gotoif.appdata;break;case"set":l.gotoif.name=l.gotoif.appdata.split("=")[0],l.gotoif.value=l.gotoif.appdata.split("=")[1];break;case"agi":l.gotoif.project=l.gotoif.appdata;break;default:var c=l.gotoif.appdata.split(",");l.gotoif.condition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.gotoif.truepriority=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.gotoif.falsepriority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outbounddial"===l.gotoif.appType.toLowerCase()&&(l.gotoif.prefix=l.gotoif.phone?l.gotoif.phone.split("$")[0]:void 0,l.gotoif.callerId=l.gotoif.callerID?"CALLERID(all)="+l.gotoif.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outboundDial"===l.gotoif.appType&&(l.gotoif.phone=i.cutdigits?(l.gotoif.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotoif.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotoif.options+="U(xcally-mixmonitor-context)"):l.gotoif.options=l.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotoif.appType&&"custom"===l.gotoif.appType);else switch((l.gotoif.app||l.gotoif.appType).toLowerCase()){case"set":l.gotoif.appdata=l.gotoif.name+"="+l.gotoif.value;break;case"custom":break;default:e[0]=l.gotoif.condition,e[1]=l.gotoif.truepriority,e[2]=l.gotoif.falsepriority,l.gotoif.appdata=e.join(",")}m(l.gotoif)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotop.appdata)switch(l.gotop.appType?l.gotop.appType.toLowerCase():l.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotop.appdata.split(",");l.gotop.key=d[0],l.gotop.language=d[1],l.gotop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotop.appdata.split(",");l.gotop.accesskeyid=d[0],l.gotop.secretaccesskey=d[1],l.gotop.lexregion=d[2],l.gotop.botname=d[3],l.gotop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotop.appdata.split(",");l.gotop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotop.text=d.slice(1,d.length).join(",");break;case"message":l.gotop.text=l.gotop.appdata;break;case"set":l.gotop.name=l.gotop.appdata.split("=")[0],l.gotop.value=l.gotop.appdata.split("=")[1];break;case"agi":l.gotop.project=l.gotop.appdata;break;default:var c=l.gotop.appdata.split(",");l.gotop.priority=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outbounddial"===l.gotop.appType.toLowerCase()&&(l.gotop.prefix=l.gotop.phone?l.gotop.phone.split("$")[0]:void 0,l.gotop.callerId=l.gotop.callerID?"CALLERID(all)="+l.gotop.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outboundDial"===l.gotop.appType&&(l.gotop.phone=i.cutdigits?(l.gotop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotop.options+="U(xcally-mixmonitor-context)"):l.gotop.options=l.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotop.appType&&"custom"===l.gotop.appType);else switch((l.gotop.app||l.gotop.appType).toLowerCase()){case"set":l.gotop.appdata=l.gotop.name+"="+l.gotop.value;break;case"custom":break;default:e[0]=l.gotop.priority,l.gotop.appdata=e.join(",")}m(l.gotop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditMailAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.noop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.noop.appdata)switch(l.noop.appType?l.noop.appType.toLowerCase():l.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.noop.appdata.split(",");l.noop.key=d[0],l.noop.language=d[1],l.noop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.noop.appdata.split(",");l.noop.accesskeyid=d[0],l.noop.secretaccesskey=d[1],l.noop.lexregion=d[2],l.noop.botname=d[3],l.noop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.noop.appdata.split(",");l.noop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.noop.text=d.slice(1,d.length).join(",");break;case"message":l.noop.text=l.noop.appdata;break;case"set":l.noop.name=l.noop.appdata.split("=")[0],l.noop.value=l.noop.appdata.split("=")[1];break;case"agi":l.noop.project=l.noop.appdata;break;default:var c=l.noop.appdata.split(",");l.noop.value=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outbounddial"===l.noop.appType.toLowerCase()&&(l.noop.prefix=l.noop.phone?l.noop.phone.split("$")[0]:void 0,l.noop.callerId=l.noop.callerID?"CALLERID(all)="+l.noop.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outboundDial"===l.noop.appType&&(l.noop.phone=i.cutdigits?(l.noop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.noop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.noop.options+="U(xcally-mixmonitor-context)"):l.noop.options=l.noop.options.replace("U(xcally-mixmonitor-context)",""));if(l.noop.appType&&"custom"===l.noop.appType);else switch((l.noop.app||l.noop.appType).toLowerCase()){case"set":l.noop.appdata=l.noop.name+"="+l.noop.value;break;case"custom":break;default:e[0]=l.noop.value,l.noop.appdata=e.join(",")}m(l.noop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.queue.queue=300,l.queue.timeout=300;function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.queues,{name:l.queue.queue});t&&(l.queue[_.capitalize("mail")+"QueueId"]=t.id);if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.timeout,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.mailQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.mailQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:601}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.system=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.system.appdata)switch(l.system.appType?l.system.appType.toLowerCase():l.system.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.system.appdata.split(",");l.system.key=d[0],l.system.language=d[1],l.system.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.system.appdata.split(",");l.system.accesskeyid=d[0],l.system.secretaccesskey=d[1],l.system.lexregion=d[2],l.system.botname=d[3],l.system.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.system.appdata.split(",");l.system.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.system.text=d.slice(1,d.length).join(",");break;case"message":l.system.text=l.system.appdata;break;case"set":l.system.name=l.system.appdata.split("=")[0],l.system.value=l.system.appdata.split("=")[1];break;case"agi":l.system.project=l.system.appdata;break;default:var c=l.system.appdata.split(",");l.system.command=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.system.variable=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.system.variable="";function m(e){t.hide(e)}l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outbounddial"===l.system.appType.toLowerCase()&&(l.system.prefix=l.system.phone?l.system.phone.split("$")[0]:void 0,l.system.callerId=l.system.callerID?"CALLERID(all)="+l.system.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outboundDial"===l.system.appType&&(l.system.phone=i.cutdigits?(l.system.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.system.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.system.options+="U(xcally-mixmonitor-context)"):l.system.options=l.system.options.replace("U(xcally-mixmonitor-context)",""));if(l.system.appType&&"custom"===l.system.appType);else switch((l.system.app||l.system.appType).toLowerCase()){case"set":l.system.appdata=l.system.name+"="+l.system.value;break;case"custom":break;default:e[0]=l.system.command,e[1]=l.system.variable,l.system.appdata=e.join(",")}m(l.system)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.system&&(n=_.find(l.variables,{name:l.system.variable})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.system&&(a=_.find(l.variables,{name:l.system.variable}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="MAIL.EDIT_"+(a.appType||a.app).toUpperCase(),l.tag=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.tag.appdata)switch(l.tag.appType?l.tag.appType.toLowerCase():l.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.tag.appdata.split(",");l.tag.key=d[0],l.tag.language=d[1],l.tag.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.tag.appdata.split(",");l.tag.accesskeyid=d[0],l.tag.secretaccesskey=d[1],l.tag.lexregion=d[2],l.tag.botname=d[3],l.tag.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.tag.appdata.split(",");l.tag.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.tag.text=d.slice(1,d.length).join(",");break;case"message":l.tag.text=l.tag.appdata;break;case"set":l.tag.name=l.tag.appdata.split("=")[0],l.tag.value=l.tag.appdata.split("=")[1];break;case"agi":l.tag.project=l.tag.appdata;break;default:var c=l.tag.appdata.split(",");l.tag.tag=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outbounddial"===l.tag.appType.toLowerCase()&&(l.tag.prefix=l.tag.phone?l.tag.phone.split("$")[0]:void 0,l.tag.callerId=l.tag.callerID?"CALLERID(all)="+l.tag.callerID:void 0),l.saveMailAccountApp=function(){l.errors=[];var e=[];l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outboundDial"===l.tag.appType&&(l.tag.phone=i.cutdigits?(l.tag.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.tag.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.tag.options+="U(xcally-mixmonitor-context)"):l.tag.options=l.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.tags,{name:l.tag.tag});t&&(l.tag.TagId=t.id);if(l.tag.appType&&"custom"===l.tag.appType);else switch((l.tag.app||l.tag.appType).toLowerCase()){case"set":l.tag.appdata=l.tag.name+"="+l.tag.value;break;case"custom":break;default:e[0]=l.tag.tag,l.tag.appdata=e.join(",")}m(l.tag)},l.closeDialog=m,o.hasRole("admin")?s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1008}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.tags,{id:e.resourceId})}),n=null;if(l.tag&&(n=_.find(l.tags,{name:l.tag.tag})),n&&!_.some(t,["id",n.id])){var a=_.find(l.tags,{id:n.id});a.canSelect=!1,t.push(a)}l.tags=t})}else{var n=[],a=null;l.tag&&(a=_.find(l.tags,{name:l.tag.tag}));for(var i=0;i<l.tags.length;i++)a&&l.tags[i].id===a.id&&(l.tags[i].canSelect=!1,n.push(l.tags[i]));l.tags=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtags",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","mailAccountApp","mailAccount","api","Auth","crudPermissions"],angular.module("app.mail").controller("EditMailAccountApptagDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.mailAccount={},c.mailAccountInteractions={count:0,rows:[]},c.selectedMailAccountInteractions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,UserId,ContactId,MailAccountId,id,Contact.firstName,Owner.name,closedAt,disposition,note,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e,t){c.mailAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.mailAccount.id,c.getMailAccountInteractions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the interaction?").htmlContent("<b>"+(e.name||"interaction")+"</b> will be deleted.").ariaLabel("delete interaction").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.mailInteractionDownload=function(s,e,t){return l.mailInteraction.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="interaction"+s.id,a=new Blob(t,{type:e.type});n="mail-interaction"+s.id+".zip";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getMailAccountInteractions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.mailAccount.getInteractions(c.query,p).$promise},c.createOrEditMailAccountInteraction=function(e,t){s.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/interactions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:c.mailAccount,interaction:t,interactions:c.mailAccountInteractions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.spymailInteraction=function(e,n){s.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,onShowing:function(e,t){e.vm.init({id:1,channel:"mail",interaction:n,spy:!0},a.$parent.vm.setting)}})},c.exportSelectedMailAccountInteractions=function(){var e=angular.copy(c.selectedMailAccountInteractions);return c.selectedMailAccountInteractions=[],e},c.deleteMailAccountInteraction=g,c.deleteSelectedMailAccountInteractions=function(e){var t=s.confirm().title("Are you sure want to delete the selected interactions?").htmlContent("<b>"+c.selectedMailAccountInteractions.length+" selected</b> will be deleted.").ariaLabel("delete interactions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedMailAccountInteractions.forEach(function(e){g(e)}),c.selectedMailAccountInteractions=[]})};var m=!0,u=1;function p(e){c.mailAccountInteractions=e||{count:0,rows:[]}}function g(e){l.mailInteraction.delete({id:e.id}).$promise.then(function(){_.remove(c.mailAccountInteractions.rows,{id:e.id}),c.mailAccountInteractions.count-=1,c.mailAccountInteractions.rows.length||c.getMailAccountInteractions(),r.success({title:"Interaction deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETmailAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}a.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getMailAccountInteractions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.mail").controller("MailAccountInteractionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.mailAccount={},c.mailAccountMailCannedAnswers={count:0,rows:[]},c.selectedMailAccountMailCannedAnswers=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,key,value,description",limit:10,page:1},c.init=function(e,t){c.mailAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.mailAccount.id,c.query.MailAccountId=c.mailAccount.id,c.getMailAccountMailCannedAnswers()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the mailCannedAnswer?").htmlContent("<b>"+(e.name||"mailCannedAnswer")+"</b> will be deleted.").ariaLabel("delete mailCannedAnswer").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getMailAccountMailCannedAnswers=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.mailAccount.getAnswers(c.query,p).$promise},c.createOrEditMailAccountMailCannedAnswer=function(e,t){s.show({controller:"CreateOrEditMailCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/mailCannedAnswers/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:c.mailAccount,mailCannedAnswer:t,mailCannedAnswers:c.mailAccountMailCannedAnswers.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedMailAccountMailCannedAnswers=function(){var e=angular.copy(c.selectedMailAccountMailCannedAnswers);return c.selectedMailAccountMailCannedAnswers=[],e},c.deleteMailAccountMailCannedAnswer=g,c.deleteSelectedMailAccountMailCannedAnswers=function(e){var t=s.confirm().title("Are you sure want to delete the selected mailCannedAnswers?").htmlContent("<b>"+c.selectedMailAccountMailCannedAnswers.length+" selected</b> will be deleted.").ariaLabel("delete mailCannedAnswers").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedMailAccountMailCannedAnswers.forEach(function(e){g(e)}),c.selectedMailAccountMailCannedAnswers=[]})};var m=!0,u=1;function p(e){c.mailAccountMailCannedAnswers=e||{count:0,rows:[]}}function g(e){l.cannedAnswer.delete({id:e.id}).$promise.then(function(){_.remove(c.mailAccountMailCannedAnswers.rows,{id:e.id}),c.mailAccountMailCannedAnswers.count-=1,c.mailAccountMailCannedAnswers.rows.length||c.getMailAccountMailCannedAnswers(),r.success({title:"MailCannedAnswer deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETmailAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getMailAccountMailCannedAnswers())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.mail").controller("MailAccountMailCannedAnswersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MAIL.EDIT_MAILCANNEDANSWER",g.mailCannedAnswer=angular.copy(l),g.mailCannedAnswers=r,g.newMailCannedAnswer=!1,g.mailCannedAnswer||(g.mailCannedAnswer={},g.title="MAIL.NEW_MAILCANNEDANSWER",g.newMailCannedAnswer=!0),t.params.id&&(g.mailCannedAnswer.MailAccountId=t.params.id),g.addNewMailCannedAnswer=function(){g.errors=[],d.cannedAnswer.save(g.mailCannedAnswer).$promise.then(function(e){g.mailCannedAnswers.unshift(e.toJSON()),o.success({title:"MailCannedAnswer properly created",msg:g.mailCannedAnswer.name?g.mailCannedAnswer.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMailCannedAnswer=function(){g.errors=[],d.cannedAnswer.update({id:g.mailCannedAnswer.id},g.mailCannedAnswer).$promise.then(function(e){var t=_.find(g.mailCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailCannedAnswer properly saved!",msg:g.mailCannedAnswer.name?g.mailCannedAnswer.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMailCannedAnswer=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The mailCannedAnswer will be deleted.").ariaLabel("Delete MailCannedAnswer").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cannedAnswer.delete({id:g.mailCannedAnswer.id}).$promise.then(function(){_.remove(g.mailCannedAnswers,{id:g.mailCannedAnswer.id}),o.success({title:"MailCannedAnswer properly deleted!",msg:(g.mailCannedAnswer.name||"mailCannedAnswer")+" has been deleted!"}),v(g.mailCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","mailCannedAnswers","mailCannedAnswer","api","Auth","license","setting","crudPermissions"],angular.module("app.mail").controller("CreateOrEditMailCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.mailAccount={},c.mailAccountMailDispositions={count:0,rows:[]},c.selectedMailAccountMailDispositions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e,t){c.mailAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.mailAccount.id,c.query.MailAccountId=c.mailAccount.id,c.getMailAccountMailDispositions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the mailDisposition?").htmlContent("<b>"+(e.name||"mailDisposition")+"</b> will be deleted.").ariaLabel("delete mailDisposition").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getMailAccountMailDispositions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.mailAccount.getDispositions(c.query,p).$promise},c.createOrEditMailAccountMailDisposition=function(e,t){s.show({controller:"CreateOrEditMailDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/mailDispositions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:c.mailAccount,mailDisposition:t,mailDispositions:c.mailAccountMailDispositions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedMailAccountMailDispositions=function(){var e=angular.copy(c.selectedMailAccountMailDispositions);return c.selectedMailAccountMailDispositions=[],e},c.deleteMailAccountMailDisposition=g,c.deleteSelectedMailAccountMailDispositions=function(e){var t=s.confirm().title("Are you sure want to delete the selected mailDispositions?").htmlContent("<b>"+c.selectedMailAccountMailDispositions.length+" selected</b> will be deleted.").ariaLabel("delete mailDispositions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedMailAccountMailDispositions.forEach(function(e){g(e)}),c.selectedMailAccountMailDispositions=[]})};var m=!0,u=1;function p(e){c.mailAccountMailDispositions=e||{count:0,rows:[]}}function g(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(c.mailAccountMailDispositions.rows,{id:e.id}),c.mailAccountMailDispositions.count-=1,c.mailAccountMailDispositions.rows.length||c.getMailAccountMailDispositions(),r.success({title:"MailDisposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETmailAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getMailAccountMailDispositions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.mail").controller("MailAccountMailDispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MAIL.EDIT_MAILDISPOSITION",g.mailDisposition=angular.copy(l),g.mailDispositions=r,g.newMailDisposition=!1,g.mailDisposition||(g.mailDisposition={},g.title="MAIL.NEW_MAILDISPOSITION",g.newMailDisposition=!0),t.params.id&&(g.mailDisposition.MailAccountId=t.params.id),g.addNewMailDisposition=function(){g.errors=[],d.disposition.save(g.mailDisposition).$promise.then(function(e){g.mailDispositions.unshift(e.toJSON()),o.success({title:"MailDisposition properly created",msg:g.mailDisposition.name?g.mailDisposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMailDisposition=function(){g.errors=[],d.disposition.update({id:g.mailDisposition.id},g.mailDisposition).$promise.then(function(e){var t=_.find(g.mailDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailDisposition properly saved!",msg:g.mailDisposition.name?g.mailDisposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMailDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The mailDisposition will be deleted.").ariaLabel("Delete MailDisposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.mailDisposition.id}).$promise.then(function(){_.remove(g.mailDispositions,{id:g.mailDisposition.id}),o.success({title:"MailDisposition properly deleted!",msg:(g.mailDisposition.name||"mailDisposition")+" has been deleted!"}),v(g.mailDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","mailDispositions","mailDisposition","api","Auth","license","setting","crudPermissions"],angular.module("app.mail").controller("CreateOrEditMailDispositionDialogController",e)}(),function(){"use strict";function e(n,e,a,i,s,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.mailAccount=c||n.params.mailAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.gotogoto=function(e,t){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:610}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.mail.realtime.accounts",{}):l.info({title:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.mail.realtime.accounts",{})}},u.agentadddialog=function(e,t){a.show({controller:"MailAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailAccount:e,mailAccounts:u.mailAccounts?u.mailAccounts.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoMailAccounts=function(){n.go("app.mail.mailAccounts")},u.saveMailAccount=function(){r.mailAccount.update({id:u.mailAccount.id},u.mailAccount).$promise.then(function(){l.success({title:"MailAccount updated!",msg:u.mailAccount.name?u.mailAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.lists,{id:e.resourceId})}),n=null;if(u.mailAccount&&(n=_.find(u.lists,{id:Number(u.mailAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.lists,{id:n.id});a.canSelect=!1,t.push(a)}u.lists=t})}else{var n=[],a=null;u.mailAccount&&(a=_.find(u.lists,{id:Number(u.mailAccount.ListId)}));for(var i=0;i<u.lists.length;i++)a&&u.lists[i].id===a.id&&(u.lists[i].canSelect=!1,n.push(u.lists[i]));u.lists=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","mailAccount","userProfileSection"],angular.module("app.mail").controller("MailAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.mailAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="mailAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedMailAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,key,email,ListId,active,cservice,Imap.service,Imap.host,Imap.port,Imap.tls,Imap.authentication,Imap.user,Imap.password,Imap.mailbox,Imap.connTimeout,Imap.authTimeout,Smtp.service,Smtp.host,Smtp.port,Smtp.secure,Smtp.authentication,Smtp.user,Smtp.pass,cauthentication,cuser,cpassword,fontFamily,fontSize,template,markAsUnread,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},b.arraycservice=_.keyBy([{option:"Custom",value:"null"},{option:"Gmail",value:"'gmail'"},{option:"Hotmail",value:"'hotmail'"},{option:"Yahoo",value:"'yahoo'"},{option:"Outlook365",value:"'outlook365'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b["arrayImap.service"]=_.keyBy([{option:"Custom",value:"null"},{option:"Gmail",value:"'gmail'"},{option:"Hotmail",value:"'hotmail'"},{option:"Yahoo",value:"'yahoo'"},{option:"Outlook365",value:"'outlook365'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b["arraySmtp.service"]=_.keyBy([{option:"Custom",value:"null"},{option:"Gmail",value:"'gmail'"},{option:"Hotmail",value:"'hotmail'"},{option:"Yahoo",value:"'yahoo'"},{option:"Outlook365",value:"'outlook365'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.mail.mailAccounts.edit",{id:e.id,mailAccount:e,crudPermissions:b.crudPermissions})},b.verifysmtpverifysmtp=function(e,t){{if(e&&e.id)return m.mailAccount.verifySmtp({id:e.id}).$promise.then(function(){p.success({title:"Smtp properly verified",msg:"Connection succeded!"})}).catch(function(e){p.error({title:"Smtp properly verified",msg:e.data?JSON.stringify(e.data):e.toString()})});p.error({title:"Smtp properly verified",msg:"Smpt id unknown"})}},b.interactionsgoto=function(e,t){n.go("app.mail.mailAccounts.edit",{id:e.id,tab:7})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:610}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.mail.realtime.accounts",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.mail.realtime.accounts",{})}},b.agentadddialog=function(e,t){i.show({controller:"MailAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailAccount:e,mailAccounts:b.mailAccounts?b.mailAccounts.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("mailAccount")+"?").htmlContent("<b>"+(e.name||"mailAccount")+"</b> will be deleted.").ariaLabel("delete mailAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getMailAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.mailAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="MailAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditMailAccount=function(e,t){i.show({controller:"CreateOrEditMailAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailAccount:t,mailAccounts:b.mailAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteMailAccount=S,b.exportSelectedMailAccounts=function(){var e=angular.copy(b.selectedMailAccounts);return b.selectedMailAccounts=[],e},b.deleteSelectedMailAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected mailAccounts?").htmlContent("<b>"+b.selectedMailAccounts.length+" selected</b> will be deleted.").ariaLabel("delete MailAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedMailAccounts.forEach(function(e){S(e)}),b.selectedMailAccounts=[]})},b.deselectMailAccounts=function(){b.selectedMailAccounts=[]},b.selectAllMailAccounts=function(){b.selectedMailAccounts=b.mailAccounts.rows},g.hasRole("admin")?m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.lists,{id:e.resourceId})}),n=null;if(b.mailAccount&&(n=_.find(b.lists,{id:Number(b.mailAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.lists,{id:n.id});a.canSelect=!1,t.push(a)}b.lists=t})}else{var n=[],a=null;b.mailAccount&&(a=_.find(b.lists,{id:Number(b.mailAccount.ListId)}));for(var i=0;i<b.lists.length;i++)a&&b.lists[i].id===a.id&&(b.lists[i].canSelect=!1,n.push(b.lists[i]));b.lists=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.mailAccounts=e||{count:0,rows:[]}}function S(e){if(e.service)return p.error({title:"Mail Account not deleted!",msg:"You can't remove service account"});m.mailAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.mailAccounts.rows,{id:e.id}),b.mailAccounts.count-=1,b.mailAccounts.rows.length||b.getMailAccounts(),p.success({title:_.startCase("MailAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEmailAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEmailAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getMailAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","mailAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.mail").controller("MailAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MAIL.EDIT_MAILQUEUE",g.mailQueue=angular.copy(l),g.mailQueues=r,g.newMailQueue=!1,g.mailQueue||(g.mailQueue={strategy:"beepall",timeout:10},g.title="MAIL.NEW_MAILQUEUE",g.newMailQueue=!0),g.addNewMailQueue=function(){g.errors=[],d.mailQueue.save(g.mailQueue).$promise.then(function(e){g.mailQueues.unshift(e.toJSON()),o.success({title:"MailQueue properly created",msg:g.mailQueue.name?g.mailQueue.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMailQueue=function(){g.errors=[],d.mailQueue.update({id:g.mailQueue.id},g.mailQueue).$promise.then(function(e){var t=_.find(g.mailQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailQueue properly saved!",msg:g.mailQueue.name?g.mailQueue.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMailQueue=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The mailQueue will be deleted.").ariaLabel("Delete MailQueue").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.mailQueue.delete({id:g.mailQueue.id}).$promise.then(function(){_.remove(g.mailQueues,{id:g.mailQueue.id}),o.success({title:"MailQueue properly deleted!",msg:(g.mailQueue.name||"mailQueue")+" has been deleted!"}),v(g.mailQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","mailQueues","mailQueue","api","Auth","license","setting","crudPermissions"],angular.module("app.mail").controller("CreateOrEditMailQueueDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.mailQueue.getAgents({id:c.mailQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserMailQueue?"penalty "+e.UserMailQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.mailQueue=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.mailQueue.removeAgents({id:c.mailQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.mailQueue.addAgents({id:c.mailQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("MAIL.ALL_AGENTS"),labelSelected:r.instant("MAIL.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","mailQueue","mailQueues","realtime","$translate","Auth","crudPermissions"],angular.module("app.mail").controller("MailQueueagentaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r){var l=this;function d(){return a(function(n,t){return a(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.mailQueue.getTeams({id:l.mailQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.mailQueue=t,l.crudPermissions=r,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("MAIL.ALL_TEAMS"),labelSelected:n.instant("MAIL.SELECTED_TEAMS"),transferCallback:function(e,t){var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.mailQueue.removeTeams({id:l.mailQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.mailQueue.addTeams({id:l.mailQueue.id,teams:_.map(n,function(e){return _.pick(e,["id"])})}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),i.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","mailQueue","$translate","Auth","crudPermissions"],angular.module("app.mail").controller("MailQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.mailQueue=c||e.params.mailQueue||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.teamadddialog=function(e,t){n.show({controller:"MailQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/teamadd/teamadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailQueue:e,mailQueues:u.mailQueues?u.mailQueues.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){n.show({controller:"MailQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailQueue:e,mailQueues:u.mailQueues?u.mailQueues.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoMailQueues=function(){e.go("app.mail.mailQueues")},u.saveMailQueue=function(){r.mailQueue.update({id:u.mailQueue.id},u.mailQueue).$promise.then(function(){l.success({title:"MailQueue updated!",msg:u.mailQueue.name?u.mailQueue.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","mailQueue","userProfileSection"],angular.module("app.mail").controller("MailQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.mailQueues=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="mailQueues",b.listOrder="",b.listOrderAsc=null,b.selectedMailQueues=[],b.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"mail",limit:10,page:1},b.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.mail.mailQueues.edit",{id:e.id,mailQueue:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"MailQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailQueue:e,mailQueues:b.mailQueues?b.mailQueues.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"MailQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailQueue:e,mailQueues:b.mailQueues?b.mailQueues.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("mailQueue")+"?").htmlContent("<b>"+(e.name||"mailQueue")+"</b> will be deleted.").ariaLabel("delete mailQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:610}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.mail.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.mail.realtime.queues",{})}},b.success=y,b.getMailQueues=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.mailQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="MailQueues",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditMailQueue=function(e,t){i.show({controller:"CreateOrEditMailQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailQueue:t,mailQueues:b.mailQueues.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteMailQueue=S,b.exportSelectedMailQueues=function(){var e=angular.copy(b.selectedMailQueues);return b.selectedMailQueues=[],e},b.deleteSelectedMailQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected mailQueues?").htmlContent("<b>"+b.selectedMailQueues.length+" selected</b> will be deleted.").ariaLabel("delete MailQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedMailQueues.forEach(function(e){S(e)}),b.selectedMailQueues=[]})},b.deselectMailQueues=function(){b.selectedMailQueues=[]},b.selectAllMailQueues=function(){b.selectedMailQueues=b.mailQueues.rows};var A=!0,E=1;function y(e){b.mailQueues=e||{count:0,rows:[]}}function S(e){m.mailQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.mailQueues.rows,{id:e.id}),b.mailQueues.count-=1,b.mailQueues.rows.length||b.getMailQueues(),p.success({title:_.startCase("MailQueue")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEmailQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEmailQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getMailQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","mailQueues","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.mail").controller("MailQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MAIL.EDIT_MAILSUBSTATUS",g.mailSubstatus=angular.copy(l),g.mailSubtatuses=r,g.newMailSubstatus=!1,g.mailSubstatus||(g.mailSubstatus={},g.title="MAIL.NEW_MAILSUBSTATUS",g.newMailSubstatus=!0),g.addNewMailSubstatus=function(){g.errors=[],d.mailSubstatus.save(g.mailSubstatus).$promise.then(function(e){g.mailSubtatuses.unshift(e.toJSON()),o.success({title:"MailSubstatus properly created",msg:g.mailSubstatus.name?g.mailSubstatus.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailSubstatus.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailSubstatus.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMailSubstatus=function(){g.errors=[],d.mailSubstatus.update({id:g.mailSubstatus.id},g.mailSubstatus).$promise.then(function(e){var t=_.find(g.mailSubtatuses,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MailSubstatus properly saved!",msg:g.mailSubstatus.name?g.mailSubstatus.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailSubstatus.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailSubstatus.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMailSubstatus=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The mailSubstatus will be deleted.").ariaLabel("Delete MailSubstatus").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.mailSubstatus.delete({id:g.mailSubstatus.id}).$promise.then(function(){_.remove(g.mailSubtatuses,{id:g.mailSubstatus.id}),o.success({title:"MailSubstatus properly deleted!",msg:(g.mailSubstatus.name||"mailSubstatus")+" has been deleted!"}),v(g.mailSubstatus)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailSubstatus.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailSubstatus.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","mailSubtatuses","mailSubstatus","api","Auth","license","setting","crudPermissions"],angular.module("app.mail").controller("CreateOrEditMailSubstatusDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.mailSubtatuses=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="mailSubtatuses",b.listOrder="",b.listOrderAsc=null,b.selectedMailSubstatuses=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditMailSubstatusDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailSubtatuses/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{mailSubstatus:e,mailSubtatuses:b.mailSubtatuses.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("mailSubstatus")+"?").htmlContent("<b>"+(e.name||"mailSubstatus")+"</b> will be deleted.").ariaLabel("delete mailSubstatus").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getMailSubstatuses=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.mailSubstatus.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="MailSubstatuses",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditMailSubstatus=function(e,t){i.show({controller:"CreateOrEditMailSubstatusDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailSubtatuses/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailSubstatus:t,mailSubtatuses:b.mailSubtatuses.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteMailSubstatus=S,b.exportSelectedMailSubstatuses=function(){var e=angular.copy(b.selectedMailSubstatuses);return b.selectedMailSubstatuses=[],e},b.deleteSelectedMailSubstatuses=function(e){var t=i.confirm().title("Are you sure want to delete the selected mailSubtatuses?").htmlContent("<b>"+b.selectedMailSubstatuses.length+" selected</b> will be deleted.").ariaLabel("delete MailSubstatuss").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedMailSubstatuses.forEach(function(e){S(e)}),b.selectedMailSubstatuses=[]})},b.deselectMailSubstatuses=function(){b.selectedMailSubstatuses=[]},b.selectAllMailSubstatuses=function(){b.selectedMailSubstatuses=b.mailSubtatuses.rows};var A=!0,E=1;function y(e){b.mailSubtatuses=e||{count:0,rows:[]}}function S(e){m.mailSubstatus.delete({id:e.id}).$promise.then(function(){_.remove(b.mailSubtatuses.rows,{id:e.id}),b.mailSubtatuses.count-=1,b.mailSubtatuses.rows.length||b.getMailSubstatuses(),p.success({title:_.startCase("MailSubstatus")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEmailSubstatus"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEmailSubstatus",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getMailSubstatuses())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","mailSubtatuses","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.mail").controller("MailSubstatusesController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m,u){var p=this;function g(){_.forIn(p.mailAccounts,function(e,t){p.rpcMailAccounts[t]&&_.merge(e,p.rpcMailAccounts[t])}),_.forIn(p.mailAccounts,function(t,e){var n={id:e,sort:"-id",direction:"in",limit:1,offset:0,$gte:"createdAt,"+moment().startOf("day").format("YYYY-MM-DD HH:mm:ss")};s.mailAccount.getMessages(n).$promise.then(function(e){return e&&(t.in=e.count||0,t.lastIn=e.rows&&e.rows.length?e.rows[0].createdAt:void 0),n.direction="out",s.mailAccount.getMessages(n).$promise}).then(function(e){e&&(t.out=e.count||0,t.lastOut=e.rows&&e.rows.length?e.rows[0].createdAt:void 0)}).catch(function(e){console.log(e)})})}p.currentUser=u.getCurrentUser(),p.count=l&&l.count?l.count:0,p.mailAccounts=l?_.keyBy(l.rows?l.rows:[],"id"):{},p.rpcMailAccounts=d?_.keyBy(d.rows?d.rows:[],"id"):{},p.userProfile=c,p.userProfileSection=m&&1==m.count?m.rows[0]:null,p.crudPermissions=u.parseCrudPermissions(p.userProfileSection?p.userProfileSection.crudPermissions:null),p.query={sort:"-name",limit:10,page:1},p.success=f,p.$onInit=g,p.getMailAccounts=function(){p.query.offset=(p.query.page-1)*p.query.limit,u.hasRole("admin")?p.promise=s.mailAccount.get(p.query,f).$promise:(p.query.id=p.userProfile.id,p.query.section="MailAccounts",p.promise=s.userProfile.getResources(p.query,f).$promise)},p.onSave=function(e){p.mailAccounts[e.id]&&_.merge(p.mailAccounts[e.id],e)},p.onMailMessageSave=function(e){p.mailAccounts[e.MailAccountId]&&("in"==e.direction?(p.mailAccounts[e.MailAccountId].in+=1,p.mailAccounts[e.MailAccountId].lastIn=e.createdAt):(p.mailAccounts[e.MailAccountId].out+=1,p.mailAccounts[e.MailAccountId].lastOut=e.createdAt))},p.goToMailAccount=function(e,t){i.go("app.mail.mailAccounts.edit",{id:t.id,mailAccount:t})},p.verifySmtp=function(e,t){{if(t&&t.id)return s.mailAccount.verifySmtp({id:t.id}).$promise.then(function(){r.success({title:"Smtp properly verified",msg:"Connection succeded!"})}).catch(function(e){r.error({title:"Smtp properly verified",msg:e.data?JSON.stringify(e.data):e.toString()})});r.error({title:"Smtp properly verified",msg:"Smpt id unknown"})}},p.order=[],_.forIn(p.mailAccounts,function(e,t){p.order.push(e.id)}),o.on("mailAccount:save",p.onSave),o.on("mailAccount:update",p.onSave),o.on("mailMessage:save",p.onMailMessageSave);var v=!0,h=1;function f(e){if(p.mailAccounts=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){p.order=[];for(var t=0;t<e.rows.length;t++)p.order.push(e.rows[t].id)}g()}e.$watch("vm.query.filter",function(e,t){v?n(function(){v=!1}):(t||(h=p.query.page),e!==t&&(p.query.page=1),e||(p.query.page=h),p.getMailAccounts())}),e.$on("$destroy",function(){o.removeAllListeners("mailAccount:save"),o.removeAllListeners("mailAccount:update"),o.removeAllListeners("mailMessage:save")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$state","api","socket","toasty","mailAccounts","rpcMailAccounts","userProfile","userProfileSection","Auth"],angular.module("app.mail").controller("MailAccountsRealtimeController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"mail",direction:"inbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsMailRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.mailQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].MailQueueId].paused++,g.queues[e[t].rows[n].MailQueueId].loggedInDb++,g.queues[e[t].rows[n].MailQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].MailQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"mail",type:"inbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.mailQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="MailQueues",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditMailQueue=function(e,t){a.show({controller:"CreateOrEditMailQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailQueue:t,mailQueues:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.agentAdd=function(e,t){a.show({controller:"MailQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/mail/views/mailQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{mailQueue:t,mailQueues:g.queues?g.queues.rows:[],realtime:!1,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.mailQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&_.merge(g.queues[e.id],_.pick(e,v))},g.onSaveMember=function(e){g.queues[e.MailQueueId]&&g.queues[e.MailQueueId].loggedInDb++},g.onRemoveMember=function(e){g.queues[e.MailQueueId]&&g.queues[e.MailQueueId].loggedInDb--},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.MailQueueId]&&(g.queues[e.MailQueueId].loggedInDb+=1,g.queues[e.MailQueueId].agents[e.UserId]=e.MailQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.MailQueueId]&&0<g.queues[e.MailQueueId].loggedInDb&&(g.queues[e.MailQueueId].loggedInDb-=1,delete g.queues[e.MailQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.on("mail_queue:save",g.onSave),d.on("userMailQueue:save",g.onSaveMember),d.on("userMailQueue:remove",g.onRemoveMember),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("mail_queue:save"),d.removeAllListeners("userMailQueue:remove"),d.removeAllListeners("userMailQueue:save"),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.mail").controller("QueuesMailRealtimeController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){switch(t.disconnect(),t.connect(),this.selectedTab=0,n.current.name){case"app.mail.realtime.agents":this.selectedTab=0;break;case"app.mail.realtime.queues":this.selectedTab=1;break;case"app.mail.realtime.accounts":this.selectedTab=2;break;default:this.selectedTab=0,n.go("app.mail.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.mail.realtime.agents");break;case 1:n.go("app.mail.realtime.queues");break;case 2:n.go("app.mail.realtime.accounts");break;default:n.go("app.mail.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.mail").controller("MailRealtimeController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MARKETPLACE.EDIT_PLUGIN",g.plugin=angular.copy(l),g.plugins=r,g.newPlugin=!1,g.plugin||(g.plugin={},g.title="MARKETPLACE.NEW_PLUGIN",g.newPlugin=!0),g.addNewPlugin=function(){g.errors=[],d.plugin.save(g.plugin).$promise.then(function(e){g.plugins.unshift(e.toJSON()),o.success({title:"Plugin properly created",msg:g.plugin.name?g.plugin.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.plugin.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.savePlugin=function(){g.errors=[],d.plugin.update({id:g.plugin.id},g.plugin).$promise.then(function(e){var t=_.find(g.plugins,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Plugin properly saved!",msg:g.plugin.name?g.plugin.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.plugin.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deletePlugin=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The plugin will be deleted.").ariaLabel("Delete Plugin").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.plugin.delete({id:g.plugin.id}).$promise.then(function(){_.remove(g.plugins,{id:g.plugin.id}),o.success({title:"Plugin properly deleted!",msg:(g.plugin.name||"plugin")+" has been deleted!"}),v(g.plugin)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.plugin.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","plugins","plugin","api","Auth","license","setting","crudPermissions"],angular.module("app.marketplace").controller("CreateOrEditPluginDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.plugin=c||e.params.plugin||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoPlugins=function(){e.go("app.marketplace.plugins")},u.savePlugin=function(){r.plugin.update({id:u.plugin.id},u.plugin).$promise.then(function(){l.success({title:"Plugin updated!",msg:u.plugin.name?u.plugin.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETplugin",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","plugin","userProfileSection"],angular.module("app.marketplace").controller("MarketplacePluginController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.plugins=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="plugins",b.listOrder="",b.listOrderAsc=null,b.selectedPlugins=[],b.query={fields:"createdAt,updatedAt,id,name,type,active,description,icon,sidebar,path,adminUrl,agentUrl,scriptName,scriptPath,version",sort:"name",limit:10,page:1},b.installing=!1,b.arraysidebar=_.keyBy([{option:"Always",value:"'always'"},{option:"Admin Only",value:"'adminOnly'"},{option:"Agent Only",value:"'agentOnly'"},{option:"Never",value:"'never'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.installplugin=function(e){{if("script"!==e.type)return e.active=!0,m.plugin.update({id:e.id},e).$promise.then(function(){p.success({title:"Plugin installed!",msg:e.name?e.name+" has been installed!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.update"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.plugin.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})});b.installing=!0,m.pm2.save({name:e.scriptName,script:e.path+"/"+e.scriptPath}).$promise.then(function(){return e.active=!0,m.plugin.update({id:e.id},e).$promise}).then(function(){b.installing=!1,p.success({title:"Plugin installed!",msg:e.name?e.name+" has been installed!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.pm2.save"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pm2.save",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}},b.editstate=function(e,t){n.go("app.marketplace.plugins.edit",{id:e.id,plugin:e,crudPermissions:b.crudPermissions})},b.stopplugin=function(e,t){var n=i.confirm().title("Are you sure want to stop the plugin attached process?").htmlContent("<b>"+(e.name||"plugin")+"</b> attached process will be stoppped.").ariaLabel("stop plugin process").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){var n;n=e,m.pm2.get().$promise.then(function(e){if(!e||!e.rows)throw new Error("Failed to retrieve pm2 processes");var t=_.find(e.rows,{name:n.scriptName});if(!t)throw new Error("No corresponding process found");m.pm2.update({id:t.pm_id,status:"stopped"}).$promise.then(function(){p.success({title:"Process stopped!",msg:"Attached pm2 process successfully stopped"})})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.pm2.update"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pm2.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){console.log("CANCEL")})},b.restartplugin=function(e,t){var n=i.confirm().title("Are you sure want to restart the plugin attached process?").htmlContent("<b>"+(e.name||"plugin")+"</b> attached process will be restarted.").ariaLabel("restart plugin process").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){var n;n=e,m.pm2.get().$promise.then(function(e){if(!e||!e.rows)throw new Error("Failed to retrieve pm2 processes");var t=_.find(e.rows,{name:n.scriptName});if(!t)throw new Error("No corresponding process found");m.pm2.update({id:t.pm_id,status:"online"}).$promise.then(function(){p.success({title:"Process restarted!",msg:"Attached pm2 process successfully restarted"})})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.pm2.update"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pm2.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){console.log("CANCEL")})},b.downloadfile2=function(s,e){return m.plugin.download({id:s.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=s.name.replace(" ","_").toLowerCase()+".zip";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.plugin.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.uninstallplugin=function(e,t){var n=i.confirm().title("Are you sure want to uninstall the plugin?").htmlContent("<b>"+(e.name||"plugin")+"</b> will be uninstalled.").ariaLabel("uninstall plugin").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){!function(n){"script"===n.type&&m.pm2.get().$promise.then(function(e){if(!e||!e.rows)throw new Error("Failed to retrieve pm2 processes");var t=_.find(e.rows,{name:n.scriptName});if(!t)throw new Error("No corresponding process found");m.pm2.delete({id:t.pm_id,name:n.scriptName}).$promise}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pm2.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})});n.active=!1,m.plugin.update({id:n.id},n).$promise.then(function(){p.success({title:"Plugin uninstalled!",msg:n.name?n.name+" has been uninstalled!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"api.plugin.update"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.plugin.update",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}(e)},function(){console.log("CANCEL")})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("plugin")+"?").htmlContent("<b>"+(e.name||"plugin")+"</b> will be deleted.").ariaLabel("delete plugin").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getPlugins=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.plugin.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Plugins",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditPlugin=function(e,t){i.show({controller:"CreateOrEditPluginDialogController",controllerAs:"vm",templateUrl:"app/main/apps/marketplace/views/plugins/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{plugin:t,plugins:b.plugins.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deletePlugin=S,b.exportSelectedPlugins=function(){var e=angular.copy(b.selectedPlugins);return b.selectedPlugins=[],e},b.deleteSelectedPlugins=function(e){var t=i.confirm().title("Are you sure want to delete the selected plugins?").htmlContent("<b>"+b.selectedPlugins.length+" selected</b> will be deleted.").ariaLabel("delete Plugins").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedPlugins.forEach(function(e){S(e)}),b.selectedPlugins=[]})},b.deselectPlugins=function(){b.selectedPlugins=[]},b.selectAllPlugins=function(){b.selectedPlugins=b.plugins.rows},b.uploadPlugin=function(e){i.show({controller:"UploadPluginDialogController",controllerAs:"vm",templateUrl:"app/main/apps/marketplace/views/plugins/upload/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{plugins:b.plugins.rows}})};var A=!0,E=1;function y(e){b.plugins=e||{count:0,rows:[]}}function S(n){n.active&&"script"==n.type&&m.pm2.get().$promise.then(function(e){if(!e||!e.rows)return p.error({title:"Plugin not deleted!",msg:"Failed to retrieve pm2 processes"});var t=_.find(e.rows,{name:n.scriptName});t?m.pm2.delete({id:t.pm_id,name:n.scriptName}).$promise:console.log("No '%s' process found",n.scriptName)}).catch(function(e){return p.error({title:"PM2 process not found!",msg:"Failed to delete the attached pm2 process"})}),m.plugin.delete({id:n.id}).$promise.then(function(){_.remove(b.plugins.rows,{id:n.id}),b.plugins.count-=1,b.plugins.rows.length||b.getPlugins(),p.success({title:_.startCase("Plugin")+" deleted!",msg:n.name?n.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEplugin"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEplugin",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getPlugins())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","plugins","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.marketplace").controller("MarketplacePluginsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this,r=2,l=1024*r*1024;o.currentUser=s.getCurrentUser(),o.errors=[],o.title="MARKETPLACE.UPLOAD_PLUGIN",o.plugins=a,o.uploadPlugins=[],o.uploadState="none",o.plugin={},o.ngFlowOptions={maxChunkRetries:1,chunkSize:l,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0,target:"api/plugins"},o.ngFlow={flow:{}},o.dropping=!1,o.fileAdded=function(e){var t=["zip"];if(!_.includes(t,e.getExtension()))return n.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(e.size>l)return n.error({title:"File too big",msg:"The max allowed size is "+r+"MB"}),!1;return o.plugin={id:e.uniqueIdentifier,file:e},o.uploadPlugins.unshift(o.plugin),!0},o.upload=function(){o.uploadState="uploading",o.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},o.ngFlow.flow.opts.query={role:o.currentUser.role,userProfileId:o.currentUser.userProfileId},o.ngFlow.flow.upload()},o.fileSuccess=function(a,e){o.plugins.unshift(JSON.parse(e)),angular.forEach(o.uploadPlugins,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result}}})},o.uploadError=function(e,t){o.ngFlow.flow.cancel(),n.error({title:"Upload error",msg:"Cannot upload the plugin"}),o.uploadState="failed"},o.uploadComplete=function(){"failed"!==o.uploadState&&(o.uploadState="completed",n.success({title:"Upload completed",msg:o.plugin.file.name+" uploaded successfully"}))},o.closeDialog=function(){t.hide()}}e.$inject=["$cookies","$mdDialog","toasty","plugins","api","Auth"],angular.module("app.marketplace").controller("UploadPluginDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MOTIONDIALER.EDIT_IVRCAMPAIGN",g.ivrCampaign=angular.copy(l),g.ivrCampaigns=r,g.newIvrCampaign=!1,g.ivrCampaign||(g.ivrCampaign={active:!0,type:"ivr",dialCheckDuplicateType:"always",dialCutDigit:0,limitCalls:30,dialRandomLastDigitCallerIdNumber:0,dialOriginateTimeout:30,dialGlobalMaxRetry:4,dialCongestionMaxRetry:3,dialCongestionRetryFrequency:150,dialBusyMaxRetry:3,dialBusyRetryFrequency:150,dialNoAnswerMaxRetry:3,dialNoAnswerRetryFrequency:150,dialOrderByScheduledAt:"ASC",dialGlobalInterval:"07:00-22:00,*,*,*",dialAMDInitialSilence:2500,dialAMDGreeting:1500,dialAMDAfterGreetingSilence:800,dialAMDTotalAnalysisTime:5e3,dialAMDMinWordLength:100,dialAMDBetweenWordsSilence:50,dialAMDMaximumNumberOfWords:3,dialAMDSilenceThreshold:256,dialAMDMaximumWordLength:5e3},g.title="MOTIONDIALER.NEW_IVRCAMPAIGN",g.newIvrCampaign=!0),g.addNewIvrCampaign=function(){g.errors=[],d.campaign.save(g.ivrCampaign).$promise.then(function(e){g.ivrCampaigns.unshift(e.toJSON()),o.success({title:"IvrCampaign properly created",msg:g.ivrCampaign.name?g.ivrCampaign.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.campaign.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.campaign.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveIvrCampaign=function(){g.errors=[],d.campaign.update({id:g.ivrCampaign.id},g.ivrCampaign).$promise.then(function(e){var t=_.find(g.ivrCampaigns,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"IvrCampaign properly saved!",msg:g.ivrCampaign.name?g.ivrCampaign.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.campaign.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.campaign.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteIvrCampaign=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The ivrCampaign will be deleted.").ariaLabel("Delete IvrCampaign").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.campaign.delete({id:g.ivrCampaign.id}).$promise.then(function(){_.remove(g.ivrCampaigns,{id:g.ivrCampaign.id}),o.success({title:"IvrCampaign properly deleted!",msg:(g.ivrCampaign.name||"ivrCampaign")+" has been deleted!"}),v(g.ivrCampaign)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.campaign.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.campaign.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.trunk.get({fields:"id,name",sort:"name",table:"true"}).$promise.then(function(e){g.trunks=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.trunk.get({fields:"id,name",sort:"name",table:"true"}).$promise.then(function(e){g.trunks=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.trunks,{id:e.resourceId})});g.trunks.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),g.trunks=t})}else g.trunks=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.hasRole("admin")?d.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.projects=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.projects=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1103}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.projects,{id:e.resourceId})}),n=null;if(g.ivrCampaign&&(n=_.find(g.projects,{id:Number(g.ivrCampaign.SquareProjectId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.projects,{id:n.id});a.canSelect=!1,t.push(a)}g.projects=t})}else{var n=[],a=null;g.ivrCampaign&&(a=_.find(g.projects,{id:Number(g.ivrCampaign.SquareProjectId)}));for(var i=0;i<g.projects.length;i++)a&&g.projects[i].id===a.id&&(g.projects[i].canSelect=!1,n.push(g.projects[i]));g.projects=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.hasRole("admin")?d.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){g.interval=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){g.interval=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.interval,{id:e.resourceId})}),n=null;if(g.ivrCampaign&&(n=_.find(g.interval,{id:Number(g.ivrCampaign.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.interval,{id:n.id});a.canSelect=!1,t.push(a)}g.interval=t})}else{var n=[],a=null;g.ivrCampaign&&(a=_.find(g.interval,{id:Number(g.ivrCampaign.IntervalId)}));for(var i=0;i<g.interval.length;i++)a&&g.interval[i].id===a.id&&(g.interval[i].canSelect=!1,n.push(g.interval[i]));g.interval=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","ivrCampaigns","ivrCampaign","api","Auth","license","setting","crudPermissions"],angular.module("app.motiondialer").controller("CreateOrEditIvrCampaignDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l){var d=this;function c(){return a(function(n,t){return a(function(t,n){return s.cmList.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return d.items=e.rows?e.rows:[],r.hasRole("admin")?e:d.section?d.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:d.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return d.allowedItems=_.map(t,function(e){return _.find(d.items,{id:r.hasRole("admin")||d.section.autoAssociation?e.id:e.resourceId})}),d.startingAllowedItems=angular.copy(d.allowedItems),d.items.forEach(function(e){var t=_.find(d.allowedItems,{id:e.id});"admin"===d.currentUser.role?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s[d.apiRoute][d.getApi]({id:d.ivrCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];d.selectedItems=_.map(t,function(e){return _.find(d.items,{id:e.id})}),d.startingSelectedItems=angular.copy(d.selectedItems),d.dualMultiselectOptions.selectedItems=d.selectedItems,d.dualMultiselectOptions.items=_.differenceBy(d.allowedItems,d.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}d.currentUser=r.getCurrentUser(),d.ivrCampaign=t,d.crudPermissions=l,d.apiRoute="voiceQueue",d.getApi="getBlackLists",d.addApi="addBlackLists",d.removeApi="removeBlackLists",d.items=[],d.allowedItems=[],d.selectedItems=[],d.startingAllowedItems=[],d.startingSelectedItems=[],d.pendingChanges=!1,d.loading=!1,d.dualMultiselectOptions={readOnly:!d.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:n.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){var n=_.xorBy(d.startingSelectedItems,d.selectedItems,"id");d.pendingChanges=!_.isEmpty(n)}},d.onInit=function(){return r.hasRole("admin")?c().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:d.currentUser.userProfileId,name:"Lists"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return d.section=e,c()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},d.saveLists=function(){d.loading=!0;var e=_.differenceBy(d.startingSelectedItems,d.selectedItems,"id"),t=_.differenceBy(d.selectedItems,d.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.removeApi]({id:d.ivrCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.addApi]({id:d.ivrCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){d.pendingChanges=!1,d.startingAllowedItems=angular.copy(d.allowedItems),d.startingSelectedItems=angular.copy(d.selectedItems),i.success({title:"SUCCESS",msg:"Lists association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){d.loading=!1});var n},d.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","ivrCampaign","$translate","$timeout","Auth","crudPermissions"],angular.module("app.motiondialer").controller("IvrCampaignblacklistaddController",e)}(),function(){"use strict";function e(t,n,a,e,i,s,o){var r=this;function l(e){t.hide(e)}r.newIvrCampaign=!0,r.ivrCampaign=angular.copy(i),r.ivrCampaigns=s,r.title=o.instant("MOTIONDIALER.CLONE_IVRCAMPAIGN"),i&&i.name&&(r.title+=": "+i.name),r.cloneIvrCampaign=function(){return e.campaign.clone({id:i.id},r.ivrCampaign).$promise.then(function(e){r.ivrCampaigns.unshift(e.toJSON()),a.success({title:"IvrCampaign properly cloned",msg:r.ivrCampaign.name?r.ivrCampaign.name+" has been cloned!":""}),n.go("app.motiondialer.ivrCampaigns.edit",{id:e.id}),l(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){r.errors=e.data.errors||[{message:e.toString(),type:"api.campaign.clone"}];for(var t=0;t<e.data.errors.length;t+=1)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.campaign.clone",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$mdDialog","$state","toasty","api","ivrCampaign","ivrCampaigns","$translate"],angular.module("app.motiondialer").controller("IvrCampaigncloneController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.ivrCampaign={},c.ivrCampaignHopperBlacks={count:0,rows:[]},c.selectedIvrCampaignHopperBlacks=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,ContactId,phone",sort:"-id",limit:10,page:1},c.init=function(e,t){c.ivrCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHopperBlacks()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopperBlack?").htmlContent("<b>"+(e.name||"hopperBlack")+"</b> will be deleted.").ariaLabel("delete hopperBlack").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getIvrCampaignHopperBlacks=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.campaign.getHopperBlacks(c.query,p).$promise},c.createOrEditIvrCampaignHopperBlack=function(e,t){s.show({controller:"CreateOrEditHopperBlackDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hopperBlacks/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopperBlack:t,hopperBlacks:c.ivrCampaignHopperBlacks.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedIvrCampaignHopperBlacks=function(){var e=angular.copy(c.selectedIvrCampaignHopperBlacks);return c.selectedIvrCampaignHopperBlacks=[],e},c.deleteIvrCampaignHopperBlack=g,c.deleteSelectedIvrCampaignHopperBlacks=function(e){var t=s.confirm().title("Are you sure want to delete the selected hopperBlacks?").htmlContent("<b>"+c.selectedIvrCampaignHopperBlacks.length+" selected</b> will be deleted.").ariaLabel("delete hopperBlacks").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedIvrCampaignHopperBlacks.forEach(function(e){g(e)}),c.selectedIvrCampaignHopperBlacks=[]})};var m=!0,u=1;function p(e){c.ivrCampaignHopperBlacks=e||{count:0,rows:[]}}function g(e){l.hopperBlack.delete({id:e.id}).$promise.then(function(){_.remove(c.ivrCampaignHopperBlacks.rows,{id:e.id}),c.ivrCampaignHopperBlacks.count-=1,c.ivrCampaignHopperBlacks.rows.length||c.getIvrCampaignHopperBlacks(),r.success({title:"HopperBlack deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETcampaign"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getIvrCampaignHopperBlacks())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("IvrCampaignHopperBlacksController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.contacts={},c.ivrCampaign={},c.ivrCampaignHopperFinals={count:0,rows:[]},c.selectedIvrCampaignHopperFinals=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,uniqueid,ContactId,calleridnum,calleridname,statedesc,countcongestionretry,countbusyretry,countnoanswerretry,countglobal,scheduledat,starttime,responsetime,endtime,disposition,ListId,UserId,VoiceQueueId,CampaignId,recallme,deleted,campaign",sort:"-id",limit:10,page:1},c.init=function(e,t){c.ivrCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHopperFinals()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopperFinal?").htmlContent("<b>"+(e.name||"hopperFinal")+"</b> will be deleted.").ariaLabel("delete hopperFinal").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getIvrCampaignHopperFinals=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.campaign.getHopperFinals(c.query,p).$promise},c.createOrEditIvrCampaignHopperFinal=function(e,t){s.show({controller:"CreateOrEditHopperFinalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hopperFinals/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopperFinal:t,hopperFinals:c.ivrCampaignHopperFinals.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedIvrCampaignHopperFinals=function(){var e=angular.copy(c.selectedIvrCampaignHopperFinals);return c.selectedIvrCampaignHopperFinals=[],e},c.deleteIvrCampaignHopperFinal=g,c.deleteSelectedIvrCampaignHopperFinals=function(e){var t=s.confirm().title("Are you sure want to delete the selected hopperFinals?").htmlContent("<b>"+c.selectedIvrCampaignHopperFinals.length+" selected</b> will be deleted.").ariaLabel("delete hopperFinals").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedIvrCampaignHopperFinals.forEach(function(e){g(e)}),c.selectedIvrCampaignHopperFinals=[]})},c.moveIvrCampaignHopperFinal=v,c.moveContactsIvrCampaignHopperFinal=function(e){l.cmHopperFinal.moveContactsIvrCampaignHopperFinal({id:c.query.id,state:e}).$promise.then(function(e){_.isNil(e)&&_.isNil(e[0])?r.info({title:"Restored Contacts",msg:"0"}):r.info({title:"Restored Contacts",msg:JSON.stringify(e[0].affectedRows)})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},c.countContactsIvrCampaignHopperFinal=function(e){l.cmHopperFinal.countContactsIvrCampaignHopperFinal({id:e}).$promise.then(function(e){_.merge(c.contacts,e[0])}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},c.moveConfirm=function(e,t){var n=s.confirm().title("Are you sure want to restore the contact?").htmlContent("<b>Contact</b> will be restored.").ariaLabel("Restore Contact").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){v(e)},function(){console.log("CANCEL")})},c.moveSelectedIvrCampaignHopperFinals=function(e){var t=s.confirm().title("Are you sure want to restore the selected contacts?").htmlContent("<b> Contacts selected</b> will be restored.").ariaLabel("Restore Contacts").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedIvrCampaignHopperFinals.forEach(function(e){v(e)}),c.selectedIvrCampaignHopperFinals=[]})};var m=!0,u=1;function p(e){c.ivrCampaignHopperFinals=e||{count:0,rows:[]}}function g(e){l.hopperFinal.delete({id:e.id}).$promise.then(function(){_.remove(c.ivrCampaignHopperFinals.rows,{id:e.id}),c.ivrCampaignHopperFinals.count-=1,c.ivrCampaignHopperFinals.rows.length||c.getIvrCampaignHopperFinals(),r.success({title:"HopperFinal deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETcampaign"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}function v(a){l.cmHopperFinal.checkContactHopper(a).$promise.then(function(e){r.info({title:"The contact is in the hopper",msg:"Contact ID "+e.ContactId})}).catch(function(e){var t,n;"Not Found"===e.data?l.cmHopper.save((t=a,n={},n.phone=t.calleridnum,n.scheduledat=moment().format("YYYY-MM-DD HH:mm:ss"),n.countbusyretry=0,n.countcongestionretry=0,n.countnoanswerretry=0,n.countglobal=0,n.ContactId=t.ContactId,n.ListId=t.ListId,n.UserId=t.deleted?null:t.UserId,n.VoiceQueueId=t.VoiceQueueId,n.CampaignId=t.CampaignId,n.priority=t.recallme?3:2,n.recallme=!!t.recallme,n)).$promise.then(function(e){var t,n;r.info({title:"Restored Contact",msg:"Contact ID "+e.ContactId}),e.ContactId&&l.cmHopperHistory.save(((n={}).calleridnum=(t=a).calleridnum,n.calleridname=t.calleridname,n.scheduledat=moment().format("YYYY-MM-DD HH:mm:ss"),n.countbusyretry=t.countbusyretry,n.countcongestionretry=t.countcongestionretry,n.countnoanswerretry=t.countnoanswerretry,n.countglobal=t.countglobal,n.ContactId=t.ContactId,n.ListId=t.ListId,n.UserId=d.getCurrentUser().id,n.VoiceQueueId=t.VoiceQueueId,n.CampaignId=t.CampaignId,n.editedat=moment().format("YYYY-MM-DD HH:mm:ss"),n.edited=!0,n.state=25,n.statedesc="Restored",n.campaign=t.campaign,n.campaigntype=t.VoiceQueueId?"queue":"ivr",n))}).catch(function(e){_.isNil(e.data)||"Validation error"!==e.data.message?r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()}):r.info({title:"The contact is in the hopper",msg:"Contact ID "+a.ContactId})}):r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getIvrCampaignHopperFinals())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("IvrCampaignHopperFinalsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.ivrCampaign={},c.ivrCampaignHopperHistories={count:0,rows:[]},c.selectedIvrCampaignHopperHistories=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,uniqueid,ContactId,calleridnum,calleridname,statedesc,scheduledat,starttime,responsetime,endtime",sort:"-id",limit:10,page:1},c.init=function(e,t){c.ivrCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHopperHistories()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopperHistory?").htmlContent("<b>"+(e.name||"hopperHistory")+"</b> will be deleted.").ariaLabel("delete hopperHistory").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getIvrCampaignHopperHistories=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.campaign.getHopperHistories(c.query,p).$promise},c.createOrEditIvrCampaignHopperHistory=function(e,t){s.show({controller:"CreateOrEditHopperHistoryDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hopperHistories/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopperHistory:t,hopperHistories:c.ivrCampaignHopperHistories.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedIvrCampaignHopperHistories=function(){var e=angular.copy(c.selectedIvrCampaignHopperHistories);return c.selectedIvrCampaignHopperHistories=[],e},c.deleteIvrCampaignHopperHistory=g,c.deleteSelectedIvrCampaignHopperHistories=function(e){var t=s.confirm().title("Are you sure want to delete the selected hopperHistories?").htmlContent("<b>"+c.selectedIvrCampaignHopperHistories.length+" selected</b> will be deleted.").ariaLabel("delete hopperHistories").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedIvrCampaignHopperHistories.forEach(function(e){g(e)}),c.selectedIvrCampaignHopperHistories=[]})};var m=!0,u=1;function p(e){c.ivrCampaignHopperHistories=e||{count:0,rows:[]}}function g(e){l.hopperHistory.delete({id:e.id}).$promise.then(function(){_.remove(c.ivrCampaignHopperHistories.rows,{id:e.id}),c.ivrCampaignHopperHistories.count-=1,c.ivrCampaignHopperHistories.rows.length||c.getIvrCampaignHopperHistories(),r.success({title:"HopperHistory deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETcampaign"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getIvrCampaignHopperHistories())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("IvrCampaignHopperHistoriesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.ivrCampaign={},c.ivrCampaignHoppers={count:0,rows:[]},c.selectedIvrCampaignHoppers=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,ContactId,phone,countcongestionretry,countbusyretry,countnoanswerretry,scheduledat,priority",sort:"-updatedAt",limit:10,page:1},c.arraypriority=_.keyBy([{option:"Highest",value:"'4'"},{option:"High",value:"'3'"},{option:"Medium",value:"'2'"},{option:"Low",value:"'1'"},{option:"Lowest",value:"'0'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.ivrCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.ivrCampaign.id,c.query.CampaignId=c.ivrCampaign.id,c.getIvrCampaignHoppers()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopper?").htmlContent("<b>"+(e.name||"hopper")+"</b> will be deleted.").ariaLabel("delete hopper").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getIvrCampaignHoppers=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.campaign.getHoppers(c.query,p).$promise},c.createOrEditIvrCampaignHopper=function(e,t){s.show({controller:"CreateOrEditHopperCampaignIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/hoppers/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:c.ivrCampaign,hopper:t,hoppers:c.ivrCampaignHoppers.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedIvrCampaignHoppers=function(){var e=angular.copy(c.selectedIvrCampaignHoppers);return c.selectedIvrCampaignHoppers=[],e},c.deleteIvrCampaignHopper=g,c.deleteSelectedIvrCampaignHoppers=function(e){var t=s.confirm().title("Are you sure want to delete the selected hoppers?").htmlContent("<b>"+c.selectedIvrCampaignHoppers.length+" selected</b> will be deleted.").ariaLabel("delete hoppers").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedIvrCampaignHoppers.forEach(function(e){g(e)}),c.selectedIvrCampaignHoppers=[]})},d.hasRole("admin")?l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(c.agents,{id:e.resourceId})});c.agents.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),c.agents=t})}else c.agents=[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=!0,u=1;function p(e){c.ivrCampaignHoppers=e||{count:0,rows:[]}}function g(e){l.cmHopper.delete({id:e.id}).$promise.then(function(){_.remove(c.ivrCampaignHoppers.rows,{id:e.id}),c.ivrCampaignHoppers.count-=1,c.ivrCampaignHoppers.rows.length||c.getIvrCampaignHoppers(),r.success({title:"Hopper deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETcampaign"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getIvrCampaignHoppers())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("IvrCampaignHoppersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MOTIONDIALER.EDIT_HOPPER",g.hopper=angular.copy(l),g.hoppers=r,g.newHopper=!1,g.hopper||(g.hopper={},g.title="MOTIONDIALER.NEW_HOPPER",g.newHopper=!0),t.params.id&&(g.hopper.CampaignId=t.params.id),g.addNewHopper=function(){g.errors=[],d.cmHopper.save(g.hopper).$promise.then(function(e){g.hoppers.unshift(e.toJSON()),o.success({title:"Hopper properly created",msg:g.hopper.name?g.hopper.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmHopper.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveHopper=function(){var n,a,i,s;g.errors=[],g.hopper.UserId=g.hopper.recallme?g.hopper.UserId:null,g.hopper.OwnerId=c.getCurrentUser().id,d.cmHopper.get({id:g.hopper.id,attributes:["scheduledat"]}).$promise.then(function(e){n=_.isNil(e)||_.isEmpty(e)?moment().format("YYYY-MM-DD HH:mm:ss"):e.scheduledat}).finally(function(){d.cmHopper.update({id:g.hopper.id},_.omit(g.hopper,["VoiceQueueId","CampaignId","ContactId","ListId"])).$promise.then(function(e){a=e,d.cmContact.get({id:a.ContactId,attributes:["firstName","lastName"]}).$promise.then(function(e){_.isNil(e)||_.isNil(e.firstName)||(i=e.firstName,_.isNil(e.lastName)||(i+=" "+e.lastName))}).catch(function(){i=void 0}).finally(function(){d.campaign.get({raw:!1,id:a.CampaignId,attributes:["name"]}).$promise.then(function(e){s=e.name}).catch(function(e){s=void 0}).finally(function(){d.cmHopperHistory.save({state:24,statedesc:"Edited",scheduledat:n,calleridnum:a.phone,calleridname:i,campaigntype:a.VoiceQueueId?"queue":"ivr",campaign:s,editedat:moment().format("YYYY-MM-DD HH:mm:ss"),edited:!0,ListId:a.ListId,UserId:c.getCurrentUser().id,VoiceQueueId:a.VoiceQueueId,CampaignId:a.CampaignId,ContactId:a.ContactId,callback:a.callback,callbackuniqueid:a.callbackuniqueid,countbusyretry:a.countbusyretry,countcongestionretry:a.countcongestionretry,countglobal:a.countglobal,countnoanswerretry:a.countnoanswerretry,followuptime:a.followuptime,recallme:a.recallme})})});var t=_.find(g.hoppers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Hopper properly saved!",msg:g.hopper.name?g.hopper.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmHopper.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})})},g.deleteHopper=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The hopper will be deleted.").ariaLabel("Delete Hopper").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cmHopper.delete({id:g.hopper.id}).$promise.then(function(){_.remove(g.hoppers,{id:g.hopper.id}),o.success({title:"Hopper properly deleted!",msg:(g.hopper.name||"hopper")+" has been deleted!"}),v(g.hopper)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmHopper.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){g.agents=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){g.agents=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.agents,{id:e.resourceId})});g.agents.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),g.agents=t})}else g.agents=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","hoppers","hopper","api","Auth","license","setting","crudPermissions"],angular.module("app.motiondialer").controller("CreateOrEditHopperCampaignIdDialogController",e)}(),function(){"use strict";function e(n,a){var i=this;i.ivrCampaign={},i.init=function(t){i.ivrCampaign=t,n.cmHopper.get({limit:0,CampaignId:t.id}).$promise.then(function(e){return i.total=e.count||0,n.cmHopper.get({limit:0,CampaignId:t.id,active:!1,countbusyretry:0,countcongestionretry:0,countnoanswerretry:0}).$promise}).then(function(e){return i.fresh=e.count||0,n.cmHopperFinal.get({limit:0,CampaignId:t.id}).$promise}).then(function(e){i.closed=e.count||0}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["api","toasty"],angular.module("app.motiondialer").controller("IvrCampaignHopperStatisticsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l){var d=this;function c(){return a(function(n,t){return a(function(t,n){return s.cmList.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return d.items=e.rows?e.rows:[],r.hasRole("admin")?e:d.section?d.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:d.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return d.allowedItems=_.map(t,function(e){return _.find(d.items,{id:r.hasRole("admin")||d.section.autoAssociation?e.id:e.resourceId})}),d.startingAllowedItems=angular.copy(d.allowedItems),d.items.forEach(function(e){var t=_.find(d.allowedItems,{id:e.id});"admin"===d.currentUser.role?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s[d.apiRoute][d.getApi]({id:d.ivrCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];d.selectedItems=_.map(t,function(e){return _.find(d.items,{id:e.id})}),d.startingSelectedItems=angular.copy(d.selectedItems),d.dualMultiselectOptions.selectedItems=d.selectedItems,d.dualMultiselectOptions.items=_.differenceBy(d.allowedItems,d.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}d.currentUser=r.getCurrentUser(),d.ivrCampaign=t,d.crudPermissions=l,d.apiRoute="campaign",d.getApi="getLists",d.addApi="addLists",d.removeApi="removeLists",d.items=[],d.allowedItems=[],d.selectedItems=[],d.startingAllowedItems=[],d.startingSelectedItems=[],d.pendingChanges=!1,d.loading=!1,d.dualMultiselectOptions={readOnly:!d.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:n.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){var n=_.xorBy(d.startingSelectedItems,d.selectedItems,"id");d.pendingChanges=!_.isEmpty(n)}},d.onInit=function(){return r.hasRole("admin")?c().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:d.currentUser.userProfileId,name:"Lists"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return d.section=e,c()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},d.saveLists=function(){d.loading=!0;var e=_.differenceBy(d.startingSelectedItems,d.selectedItems,"id"),t=_.differenceBy(d.selectedItems,d.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.removeApi]({id:d.ivrCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.addApi]({id:d.ivrCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){d.pendingChanges=!1,d.startingAllowedItems=angular.copy(d.allowedItems),d.startingSelectedItems=angular.copy(d.selectedItems),i.success({title:"SUCCESS",msg:"Lists association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){d.loading=!1});var n},d.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","ivrCampaign","$translate","$timeout","Auth","crudPermissions"],angular.module("app.motiondialer").controller("IvrCampaignlistaddController",e)}(),function(){"use strict";function e(e,t,a,i,s,n,o,r){var l=this;function d(){t.hide()}function c(e,t){var n=t.id;o.enqueue(function(){return i.campaign.removeLists({id:e,ids:n}).$promise.then(function(){return i.campaign.addLists({id:e,ids:n,dialCheckDuplicateType:"never"}).$promise}).then(function(){a.success({title:"Reset Succesfull",msg:"List "+t.name+" has been reset"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:queueCampaign.RESETLIST",msg:e.status?JSON.stringify(e.data):e.toString()})})})}l.selected=[],l.items=n||[],l.loading=!1,l.closeDialog=d,l.exists=function(e,t){return-1<t.indexOf(e)},l.toggle=function(e,t){var n=t.indexOf(e);-1<n?t.splice(n,1):t.push(e)},l.isIndeterminate=function(){return 0!==l.selected.length&&l.selected.length!==l.items.length},l.isChecked=function(){return l.selected.length===l.items.length},l.toggleAll=function(){l.selected.length===l.items.length?l.selected=[]:(0===l.selected.length||0<l.selected.length)&&(l.selected=l.items.slice(0))},l.listSelected=function(){l.loading=!0,r(function(e,t){for(var n=0;n<l.selected.length;n+=1)c(s.id,l.selected[n]);var a;a=e,o.enqueue(function(){return a()})}).finally(function(){l.loading=!1,d()})}}e.$inject=["$scope","$mdDialog","toasty","api","ivrCampaign","listsCampaign","Sequence","$q"],angular.module("app.motiondialer").controller("IvrCampaignresetlistController",e)}(),function(){"use strict";function e(n,e,i,s,a,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.ivrCampaign=c||n.params.ivrCampaign||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.clonedialog=function(e,t){i.show({controller:"IvrCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:u.ivrCampaigns?u.ivrCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.listadddialog=function(e,t){i.show({controller:"IvrCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/listadd/listadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:u.ivrCampaigns?u.ivrCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.blacklistadddialog=function(e,t){i.show({controller:"IvrCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:u.ivrCampaigns?u.ivrCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.resetlistdialog=function(t,n){r.campaign.getLists({id:t.id,fields:"id,name",nolimit:!0}).$promise.then(function(a){if(_.isNil(a.rows)||_.isEmpty(a.rows))l.info({title:"Campaign Without Lists"});else if(1===a.rows.length){var e=i.confirm().title("Are you sure want to reset the list "+a.rows[0].name+" ?").htmlContent("<b>"+a.rows[0].name+"</b> will be reset.").ariaLabel("Reset List").targetEvent(n).ok("OK").cancel("CANCEL");i.show(e).then(function(){var e,t,n;e=u.ivrCampaign.id,t=a.rows[0],n=t.id,r.campaign.removeLists({id:e,ids:n}).$promise.then(function(){return r.campaign.addLists({id:e,ids:n,dialCheckDuplicateType:"never"}).$promise}).then(function(){l.success({title:"Reset Succesfull",msg:"List "+t.name+" has been reset"})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:ivrCampaign.REMOVELIST",msg:e.status?JSON.stringify(e.data):e.toString()})})})}else i.show({controller:"IvrCampaignresetlistController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/resetlist/resetlist.html",parent:angular.element(s.body),targetEvent:n,clickOutsideToClose:!1,locals:{ivrCampaign:t,listsCampaign:a?a.rows:[]}})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:RESETLIST",msg:e.status?JSON.stringify(e.data):e.toString()})})},u.gotogoto=function(e,t){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:1510}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.motiondialer.realtime.ivr_campaigns",{}):l.info({title:a.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:a.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.motiondialer.realtime.ivr_campaigns",{})}},u.alert=l.info,u.gotoIvrCampaigns=function(){n.go("app.motiondialer.ivrCampaigns")},u.saveIvrCampaign=function(){r.campaign.update({id:u.ivrCampaign.id},u.ivrCampaign).$promise.then(function(){l.success({title:"IvrCampaign updated!",msg:u.ivrCampaign.name?u.ivrCampaign.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcampaign",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.trunks,{id:e.resourceId})});u.trunks.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.trunks=t})}else u.trunks=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.projects=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.projects=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1103}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.projects,{id:e.resourceId})}),n=null;if(u.ivrCampaign&&(n=_.find(u.projects,{id:Number(u.ivrCampaign.SquareProjectId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.projects,{id:n.id});a.canSelect=!1,t.push(a)}u.projects=t})}else{var n=[],a=null;u.ivrCampaign&&(a=_.find(u.projects,{id:Number(u.ivrCampaign.SquareProjectId)}));for(var i=0;i<u.projects.length;i++)a&&u.projects[i].id===a.id&&(u.projects[i].canSelect=!1,n.push(u.projects[i]));u.projects=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.interval,{id:e.resourceId})}),n=null;if(u.ivrCampaign&&(n=_.find(u.interval,{id:Number(u.ivrCampaign.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.interval,{id:n.id});a.canSelect=!1,t.push(a)}u.interval=t})}else{var n=[],a=null;u.ivrCampaign&&(a=_.find(u.interval,{id:Number(u.ivrCampaign.IntervalId)}));for(var i=0;i<u.interval.length;i++)a&&u.interval[i].id===a.id&&(u.interval[i].canSelect=!1,n.push(u.interval[i]));u.interval=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","ivrCampaign","userProfileSection"],angular.module("app.motiondialer").controller("IvrCampaignController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.ivrCampaigns=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="ivrCampaigns",b.listOrder="",b.listOrderAsc=null,b.selectedIvrCampaigns=[],b.query={fields:"createdAt,updatedAt,id,name,active,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,SquareProjectId,limitCalls,description,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,dialOrderByScheduledAt,dialGlobalInterval,dialTimezone,dialPrefix,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength",type:"ivr",sort:"-updatedAt",limit:10,page:1},b.arraydialCheckDuplicateType=_.keyBy([{option:"ALWAYS",value:"'always'"},{option:"NEVER",value:"'never'"},{option:"ONLY_IF_OPEN",value:"'onlyIfOpen'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydialOrderByScheduledAt=_.keyBy([{option:"DESC",value:"'DESC'"},{option:"ASC",value:"'ASC'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.motiondialer.ivrCampaigns.edit",{id:e.id,ivrCampaign:e,crudPermissions:b.crudPermissions})},b.clonedialog=function(e,t){i.show({controller:"IvrCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:b.ivrCampaigns?b.ivrCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.listadddialog=function(e,t){i.show({controller:"IvrCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/listadd/listadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:b.ivrCampaigns?b.ivrCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.blacklistadddialog=function(e,t){i.show({controller:"IvrCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{ivrCampaign:e,ivrCampaigns:b.ivrCampaigns?b.ivrCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("ivrCampaign")+"?").htmlContent("<b>"+(e.name||"ivrCampaign")+"</b> will be deleted.").ariaLabel("delete ivrCampaign").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:1510}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.motiondialer.realtime.ivr_campaigns",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.motiondialer.realtime.ivr_campaigns",{})}},b.success=y,b.getIvrCampaigns=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.campaign.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="IvrCampaigns",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditIvrCampaign=function(e,t){i.show({controller:"CreateOrEditIvrCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:t,ivrCampaigns:b.ivrCampaigns.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteIvrCampaign=S,b.exportSelectedIvrCampaigns=function(){var e=angular.copy(b.selectedIvrCampaigns);return b.selectedIvrCampaigns=[],e},b.deleteSelectedIvrCampaigns=function(e){var t=i.confirm().title("Are you sure want to delete the selected ivrCampaigns?").htmlContent("<b>"+b.selectedIvrCampaigns.length+" selected</b> will be deleted.").ariaLabel("delete IvrCampaigns").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedIvrCampaigns.forEach(function(e){S(e)}),b.selectedIvrCampaigns=[]})},b.deselectIvrCampaigns=function(){b.selectedIvrCampaigns=[]},b.selectAllIvrCampaigns=function(){b.selectedIvrCampaigns=b.ivrCampaigns.rows},g.hasRole("admin")?m.trunk.get({fields:"id,name",sort:"name",table:"true"}).$promise.then(function(e){b.trunks=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.trunk.get({fields:"id,name",sort:"name",table:"true"}).$promise.then(function(e){b.trunks=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.trunks,{id:e.resourceId})});b.trunks.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),b.trunks=t})}else b.trunks=[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),g.hasRole("admin")?m.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.projects=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.projects=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1103}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(b.projects,{id:e.resourceId})}),a=null;a=[],b.ivrCampaigns.rows.forEach(function(e){var t=_.find(b.projects,{id:Number(e.SquareProjectId)});a.push(t)}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(b.projects,{id:e.id});t.canSelect=!1,n.push(t)}}),b.projects=n})}else{var n=[],a=[];b.ivrCampaigns.rows.forEach(function(e){var t=_.find(b.projects,{id:Number(e.SquareProjectId)});a.push(t)});for(var i=0;i<b.projects.length;i++){_.some(a,{id:b.projects[i].id})&&(b.projects[i].canSelect=!1,n.push(b.projects[i]))}b.projects=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),g.hasRole("admin")?m.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){b.interval=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){b.interval=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.interval,{id:e.resourceId})}),n=null;if(b.ivrCampaign&&(n=_.find(b.interval,{id:Number(b.ivrCampaign.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.interval,{id:n.id});a.canSelect=!1,t.push(a)}b.interval=t})}else{var n=[],a=null;b.ivrCampaign&&(a=_.find(b.interval,{id:Number(b.ivrCampaign.IntervalId)}));for(var i=0;i<b.interval.length;i++)a&&b.interval[i].id===a.id&&(b.interval[i].canSelect=!1,n.push(b.interval[i]));b.interval=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.ivrCampaigns=e||{count:0,rows:[]}}function S(e){m.campaign.delete({id:e.id}).$promise.then(function(){_.remove(b.ivrCampaigns.rows,{id:e.id}),b.ivrCampaigns.count-=1,b.ivrCampaigns.rows.length||b.getIvrCampaigns(),p.success({title:_.startCase("IvrCampaign")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcampaign"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEcampaign",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getIvrCampaigns())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","ivrCampaigns","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.motiondialer").controller("IvrCampaignsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MOTIONDIALER.EDIT_QUEUECAMPAIGN",g.queueCampaign=angular.copy(l),g.queueCampaigns=r,g.newQueueCampaign=!1,g.queueCampaign||(g.queueCampaign={dialActive:!0,type:"outbound",dialCheckDuplicateType:"always",dialCutDigit:0,autopause:"no",ringinuse:"no",timeoutrestart:"no",setinterfacevar:"no",setqueuevar:"no",setqueueentryvar:"no",dialOrderByScheduledAt:"ASC",dialGlobalInterval:"07:00-22:00,*,*,*",dialAMDInitialSilence:2500,dialAMDGreeting:1500,dialAMDAfterGreetingSilence:800,dialAMDTotalAnalysisTime:5e3,dialAMDMinWordLength:100,dialAMDBetweenWordsSilence:50,dialAMDMaximumNumberOfWords:3,dialAMDSilenceThreshold:256,dialAMDMaximumWordLength:5e3,dialMethod:"progressive",dialPowerLevel:1,dialPredictiveOptimization:"dropRate",dialPredictiveOptimizationPercentage:3,dialPredictiveInterval:10,dialLimitQueue:0,dialRandomLastDigitCallerIdNumber:0,dialOriginateTimeout:30,dialQueueOptions:"tTxX",dialQueueTimeout:3,strategy:"rrmemory",timeout:3,retry:3,weight:1,dialGlobalMaxRetry:4,dialCongestionMaxRetry:3,dialCongestionRetryFrequency:150,dialBusyMaxRetry:3,dialBusyRetryFrequency:150,dialNoAnswerMaxRetry:3,dialNoAnswerRetryFrequency:150,dialPredictiveIntervalMaxThreshold:20,dialPredictiveIntervalMinThreshold:10},g.title="MOTIONDIALER.NEW_QUEUECAMPAIGN",g.newQueueCampaign=!0),g.addNewQueueCampaign=function(){g.errors=[],d.voiceQueue.save(g.queueCampaign).$promise.then(function(e){g.queueCampaigns.unshift(e.toJSON()),o.success({title:"QueueCampaign properly created",msg:g.queueCampaign.name?g.queueCampaign.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveQueueCampaign=function(){g.errors=[],d.voiceQueue.update({id:g.queueCampaign.id},g.queueCampaign).$promise.then(function(e){var t=_.find(g.queueCampaigns,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"QueueCampaign properly saved!",msg:g.queueCampaign.name?g.queueCampaign.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteQueueCampaign=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The queueCampaign will be deleted.").ariaLabel("Delete QueueCampaign").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceQueue.delete({id:g.queueCampaign.id}).$promise.then(function(){_.remove(g.queueCampaigns,{id:g.queueCampaign.id}),o.success({title:"QueueCampaign properly deleted!",msg:(g.queueCampaign.name||"queueCampaign")+" has been deleted!"}),v(g.queueCampaign)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.trunks=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.trunks=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.trunks,{id:e.resourceId})}),n=null;if(g.queueCampaign&&(n=_.find(g.trunks,{id:Number(g.queueCampaign.TrunkId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.trunks,{id:n.id});a.canSelect=!1,t.push(a)}g.trunks=t})}else{var n=[],a=null;g.queueCampaign&&(a=_.find(g.trunks,{id:Number(g.queueCampaign.TrunkId)}));for(var i=0;i<g.trunks.length;i++)a&&g.trunks[i].id===a.id&&(g.trunks[i].canSelect=!1,n.push(g.trunks[i]));g.trunks=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.hasRole("admin")?d.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){g.interval=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){g.interval=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.interval,{id:e.resourceId})}),n=null;if(g.queueCampaign&&(n=_.find(g.interval,{id:Number(g.queueCampaign.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.interval,{id:n.id});a.canSelect=!1,t.push(a)}g.interval=t})}else{var n=[],a=null;g.queueCampaign&&(a=_.find(g.interval,{id:Number(g.queueCampaign.IntervalId)}));for(var i=0;i<g.interval.length;i++)a&&g.interval[i].id===a.id&&(g.interval[i].canSelect=!1,n.push(g.interval[i]));g.interval=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","queueCampaigns","queueCampaign","api","Auth","license","setting","crudPermissions"],angular.module("app.motiondialer").controller("CreateOrEditQueueCampaignDialogController",e)}(),function(){"use strict";function e(e,l,a,d,t,n,i,s,o,r){var c=this;function m(){return l(function(n,t){return l(function(t,n){return d.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],o.hasRole("admin")?e:c.section?c.section.autoAssociation?e:l(function(t,n){return d.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:o.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),l(function(t,n){return d.voiceQueue.getAgents({id:c.queueCampaign.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=o.getCurrentUser(),c.queueCampaign=t,c.crudPermissions=r,c.penalty=0,c.realtime=i,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return o.hasRole("admin")?m().catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):l(function(n,t){d.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceWith(c.selectedItems,c.startingSelectedItems,function(e,t){return e.id===t.id&&e.penalty===t.penalty});return(n=e,l(function(e,t){_.isEmpty(n)?e():d.voiceQueue.removeAgents({id:c.queueCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return r=t,l(function(e,t){if(_.isEmpty(r))e();else{for(var n=[],a=_.groupBy(r,"penalty"),i=0;i<Object.keys(a).length;i++){var s=Object.keys(a)[i],o=_.filter(r,["penalty",s]);n.push(d.voiceQueue.addAgents({id:c.queueCampaign.id,ids:_.map(o,"id"),penalty:_.trim(s,"penalty "),realtime:c.realtime||!1}).$promise)}l.all(n).then(function(){e()}).catch(function(e){t(e)})}});var r}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),a.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("MOTIONDIALER.ALL_AGENTS"),labelSelected:s.instant("MOTIONDIALER.SELECTED_AGENTS"),transferCallback:function(e,t){t?e.forEach(function(e){e.penalty=void 0}):e.forEach(function(e){e.penalty="penalty "+c.penalty});var n=_.xorWith(c.startingSelectedItems,c.selectedItems,function(e,t){return e.id===t.id&&e.penalty===t.penalty});c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","queueCampaign","queueCampaigns","realtime","$translate","Auth","crudPermissions"],angular.module("app.motiondialer").controller("QueueCampaignagentaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l){var d=this;function c(){return a(function(n,t){return a(function(t,n){return s.cmList.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return d.items=e.rows?e.rows:[],r.hasRole("admin")?e:d.section?d.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:d.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return d.allowedItems=_.map(t,function(e){return _.find(d.items,{id:r.hasRole("admin")||d.section.autoAssociation?e.id:e.resourceId})}),d.startingAllowedItems=angular.copy(d.allowedItems),d.items.forEach(function(e){var t=_.find(d.allowedItems,{id:e.id});"admin"===d.currentUser.role?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s[d.apiRoute][d.getApi]({id:d.queueCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];d.selectedItems=_.map(t,function(e){return _.find(d.items,{id:e.id})}),d.startingSelectedItems=angular.copy(d.selectedItems),d.dualMultiselectOptions.selectedItems=d.selectedItems,d.dualMultiselectOptions.items=_.differenceBy(d.allowedItems,d.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}d.currentUser=r.getCurrentUser(),d.queueCampaign=t,d.crudPermissions=l,d.apiRoute="voiceQueue",d.getApi="getBlackLists",d.addApi="addBlackLists",d.removeApi="removeBlackLists",d.items=[],d.allowedItems=[],d.selectedItems=[],d.startingAllowedItems=[],d.startingSelectedItems=[],d.pendingChanges=!1,d.loading=!1,d.dualMultiselectOptions={readOnly:!d.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:n.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){var n=_.xorBy(d.startingSelectedItems,d.selectedItems,"id");d.pendingChanges=!_.isEmpty(n)}},d.onInit=function(){return r.hasRole("admin")?c().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:d.currentUser.userProfileId,name:"Lists"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return d.section=e,c()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},d.saveLists=function(){d.loading=!0;var e=_.differenceBy(d.startingSelectedItems,d.selectedItems,"id"),t=_.differenceBy(d.selectedItems,d.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.removeApi]({id:d.queueCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.addApi]({id:d.queueCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){d.pendingChanges=!1,d.startingAllowedItems=angular.copy(d.allowedItems),d.startingSelectedItems=angular.copy(d.selectedItems),i.success({title:"SUCCESS",msg:"Lists association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){d.loading=!1});var n},d.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","queueCampaign","$translate","$timeout","Auth","crudPermissions"],angular.module("app.motiondialer").controller("QueueCampaignblacklistaddController",e)}(),function(){"use strict";function e(t,n,a,e,i,s,o){var r=this;function l(e){t.hide(e)}r.newQueueCampaign=!0,r.queueCampaign=angular.copy(i),r.queueCampaigns=s,r.title=o.instant("MOTIONDIALER.CLONE_QUEUECAMPAIGN"),i&&i.name&&(r.title+=": "+i.name),r.cloneQueueCampaign=function(){return e.voiceQueue.clone({id:i.id},r.queueCampaign).$promise.then(function(e){r.queueCampaigns.unshift(e.toJSON()),a.success({title:"QueueCampaign properly cloned",msg:r.queueCampaign.name?r.queueCampaign.name+" has been cloned!":""}),n.go("app.motiondialer.queueCampaigns.edit",{id:e.id}),l(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){r.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.clone"}];for(var t=0;t<e.data.errors.length;t+=1)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.clone",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$mdDialog","$state","toasty","api","queueCampaign","queueCampaigns","$translate"],angular.module("app.motiondialer").controller("QueueCampaigncloneController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.queueCampaign={},c.queueCampaignHopperBlacks={count:0,rows:[]},c.selectedQueueCampaignHopperBlacks=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,ContactId,phone",sort:"-id",limit:10,page:1},c.init=function(e,t){c.queueCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHopperBlacks()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopperBlack?").htmlContent("<b>"+(e.name||"hopperBlack")+"</b> will be deleted.").ariaLabel("delete hopperBlack").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getQueueCampaignHopperBlacks=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.voiceQueue.getHopperBlacks(c.query,p).$promise},c.createOrEditQueueCampaignHopperBlack=function(e,t){s.show({controller:"CreateOrEditHopperBlackDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hopperBlacks/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopperBlack:t,hopperBlacks:c.queueCampaignHopperBlacks.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedQueueCampaignHopperBlacks=function(){var e=angular.copy(c.selectedQueueCampaignHopperBlacks);return c.selectedQueueCampaignHopperBlacks=[],e},c.deleteQueueCampaignHopperBlack=g,c.deleteSelectedQueueCampaignHopperBlacks=function(e){var t=s.confirm().title("Are you sure want to delete the selected hopperBlacks?").htmlContent("<b>"+c.selectedQueueCampaignHopperBlacks.length+" selected</b> will be deleted.").ariaLabel("delete hopperBlacks").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedQueueCampaignHopperBlacks.forEach(function(e){g(e)}),c.selectedQueueCampaignHopperBlacks=[]})};var m=!0,u=1;function p(e){c.queueCampaignHopperBlacks=e||{count:0,rows:[]}}function g(e){l.hopperBlack.delete({id:e.id}).$promise.then(function(){_.remove(c.queueCampaignHopperBlacks.rows,{id:e.id}),c.queueCampaignHopperBlacks.count-=1,c.queueCampaignHopperBlacks.rows.length||c.getQueueCampaignHopperBlacks(),r.success({title:"HopperBlack deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETvoiceQueue"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getQueueCampaignHopperBlacks())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("QueueCampaignHopperBlacksController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.contacts={},c.queueCampaign={},c.queueCampaignHopperFinals={count:0,rows:[]},c.selectedQueueCampaignHopperFinals=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,uniqueid,ContactId,calleridnum,calleridname,statedesc,countcongestionretry,countbusyretry,countnoanswerretry,countglobal,scheduledat,starttime,responsetime,endtime,disposition,ListId,UserId,VoiceQueueId,CampaignId,recallme,deleted,campaign",sort:"-id",limit:10,page:1},c.init=function(e,t){c.queueCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHopperFinals()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopperFinal?").htmlContent("<b>"+(e.name||"hopperFinal")+"</b> will be deleted.").ariaLabel("delete hopperFinal").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getQueueCampaignHopperFinals=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.voiceQueue.getHopperFinals(c.query,p).$promise},c.createOrEditQueueCampaignHopperFinal=function(e,t){s.show({controller:"CreateOrEditHopperFinalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hopperFinals/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopperFinal:t,hopperFinals:c.queueCampaignHopperFinals.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedQueueCampaignHopperFinals=function(){var e=angular.copy(c.selectedQueueCampaignHopperFinals);return c.selectedQueueCampaignHopperFinals=[],e},c.deleteQueueCampaignHopperFinal=g,c.deleteSelectedQueueCampaignHopperFinals=function(e){var t=s.confirm().title("Are you sure want to delete the selected hopperFinals?").htmlContent("<b>"+c.selectedQueueCampaignHopperFinals.length+" selected</b> will be deleted.").ariaLabel("delete hopperFinals").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedQueueCampaignHopperFinals.forEach(function(e){g(e)}),c.selectedQueueCampaignHopperFinals=[]})},c.moveQueueCampaignHopperFinal=v,c.moveContactsQueueCampaignHopperFinal=function(e){l.cmHopperFinal.moveContactsQueueCampaignHopperFinal({id:c.query.id,state:e}).$promise.then(function(e){_.isNil(e)&&_.isNil(e[0])?r.info({title:"Restored Contacts",msg:"0"}):r.info({title:"Restored Contacts",msg:JSON.stringify(e[0].affectedRows)})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},c.countContactsQueueCampaignHopperFinal=function(e){l.cmHopperFinal.countContactsQueueCampaignHopperFinal({id:e}).$promise.then(function(e){_.merge(c.contacts,e[0])}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},c.moveConfirm=function(e,t){var n=s.confirm().title("Are you sure want to restore the contact?").htmlContent("<b>Contact</b> will be restored.").ariaLabel("Restore Contact").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){v(e)},function(){console.log("CANCEL")})},c.moveSelectedQueueCampaignHopperFinals=function(e){var t=s.confirm().title("Are you sure want to restore the selected contacts?").htmlContent("<b> Contacts selected</b> will be restored.").ariaLabel("Restore Contacts").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedQueueCampaignHopperFinals.forEach(function(e){v(e)}),c.selectedQueueCampaignHopperFinals=[]})};var m=!0,u=1;function p(e){c.queueCampaignHopperFinals=e||{count:0,rows:[]}}function g(e){l.hopperFinal.delete({id:e.id}).$promise.then(function(){_.remove(c.queueCampaignHopperFinals.rows,{id:e.id}),c.queueCampaignHopperFinals.count-=1,c.queueCampaignHopperFinals.rows.length||c.getQueueCampaignHopperFinals(),r.success({title:"HopperFinal deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETvoiceQueue"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}function v(a){l.cmHopperFinal.checkContactHopper(a).$promise.then(function(e){r.info({title:"The contact is in the hopper",msg:"Contact ID "+e.ContactId})}).catch(function(e){var t,n;"Not Found"===e.data?l.cmHopper.save((t=a,n={},n.phone=t.calleridnum,n.scheduledat=moment().format("YYYY-MM-DD HH:mm:ss"),n.countbusyretry=0,n.countcongestionretry=0,n.countnoanswerretry=0,n.countglobal=0,n.ContactId=t.ContactId,n.ListId=t.ListId,n.UserId=t.deleted?null:t.UserId,n.VoiceQueueId=t.VoiceQueueId,n.CampaignId=t.CampaignId,n.priority=t.recallme?3:2,n.recallme=!!t.recallme,n)).$promise.then(function(e){var t,n;r.info({title:"Restored Contact",msg:"Contact ID "+e.ContactId}),e.ContactId&&l.cmHopperHistory.save(((n={}).calleridnum=(t=a).calleridnum,n.calleridname=t.calleridname,n.scheduledat=moment().format("YYYY-MM-DD HH:mm:ss"),n.countbusyretry=t.countbusyretry,n.countcongestionretry=t.countcongestionretry,n.countnoanswerretry=t.countnoanswerretry,n.countglobal=t.countglobal,n.ContactId=t.ContactId,n.ListId=t.ListId,n.UserId=d.getCurrentUser().id,n.VoiceQueueId=t.VoiceQueueId,n.CampaignId=t.CampaignId,n.editedat=moment().format("YYYY-MM-DD HH:mm:ss"),n.edited=!0,n.state=25,n.statedesc="Restored",n.campaign=t.campaign,n.campaigntype=t.VoiceQueueId?"queue":"ivr",n))}).catch(function(e){_.isNil(e.data)||"Validation error"!==e.data.message?r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()}):r.info({title:"The contact is in the hopper",msg:"Contact ID "+a.ContactId})}):r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getQueueCampaignHopperFinals())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("QueueCampaignHopperFinalsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.queueCampaign={},c.queueCampaignHopperHistories={count:0,rows:[]},c.selectedQueueCampaignHopperHistories=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,uniqueid,ContactId,calleridnum,calleridname,statedesc,scheduledat,starttime,responsetime,endtime",sort:"-id",limit:10,page:1},c.init=function(e,t){c.queueCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHopperHistories()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopperHistory?").htmlContent("<b>"+(e.name||"hopperHistory")+"</b> will be deleted.").ariaLabel("delete hopperHistory").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getQueueCampaignHopperHistories=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.voiceQueue.getHopperHistories(c.query,p).$promise},c.createOrEditQueueCampaignHopperHistory=function(e,t){s.show({controller:"CreateOrEditHopperHistoryDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hopperHistories/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopperHistory:t,hopperHistories:c.queueCampaignHopperHistories.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedQueueCampaignHopperHistories=function(){var e=angular.copy(c.selectedQueueCampaignHopperHistories);return c.selectedQueueCampaignHopperHistories=[],e},c.deleteQueueCampaignHopperHistory=g,c.deleteSelectedQueueCampaignHopperHistories=function(e){var t=s.confirm().title("Are you sure want to delete the selected hopperHistories?").htmlContent("<b>"+c.selectedQueueCampaignHopperHistories.length+" selected</b> will be deleted.").ariaLabel("delete hopperHistories").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedQueueCampaignHopperHistories.forEach(function(e){g(e)}),c.selectedQueueCampaignHopperHistories=[]})};var m=!0,u=1;function p(e){c.queueCampaignHopperHistories=e||{count:0,rows:[]}}function g(e){l.hopperHistory.delete({id:e.id}).$promise.then(function(){_.remove(c.queueCampaignHopperHistories.rows,{id:e.id}),c.queueCampaignHopperHistories.count-=1,c.queueCampaignHopperHistories.rows.length||c.getQueueCampaignHopperHistories(),r.success({title:"HopperHistory deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETvoiceQueue"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getQueueCampaignHopperHistories())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("QueueCampaignHopperHistoriesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.queueCampaign={},c.queueCampaignHoppers={count:0,rows:[]},c.selectedQueueCampaignHoppers=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,ContactId,phone,countcongestionretry,countbusyretry,countnoanswerretry,scheduledat,priority,recallme,UserId",sort:"-updatedAt",limit:10,page:1},c.arraypriority=_.keyBy([{option:"Highest",value:"'4'"},{option:"High",value:"'3'"},{option:"Medium",value:"'2'"},{option:"Low",value:"'1'"},{option:"Lowest",value:"'0'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.queueCampaign=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.queueCampaign.id,c.query.VoiceQueueId=c.queueCampaign.id,c.getQueueCampaignHoppers()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the hopper?").htmlContent("<b>"+(e.name||"hopper")+"</b> will be deleted.").ariaLabel("delete hopper").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getQueueCampaignHoppers=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.voiceQueue.getHoppers(c.query,p).$promise},c.createOrEditQueueCampaignHopper=function(e,t){s.show({controller:"CreateOrEditHopperVoiceQueueIdDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/hoppers/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:c.queueCampaign,hopper:t,hoppers:c.queueCampaignHoppers.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedQueueCampaignHoppers=function(){var e=angular.copy(c.selectedQueueCampaignHoppers);return c.selectedQueueCampaignHoppers=[],e},c.deleteQueueCampaignHopper=g,c.deleteSelectedQueueCampaignHoppers=function(e){var t=s.confirm().title("Are you sure want to delete the selected hoppers?").htmlContent("<b>"+c.selectedQueueCampaignHoppers.length+" selected</b> will be deleted.").ariaLabel("delete hoppers").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedQueueCampaignHoppers.forEach(function(e){g(e)}),c.selectedQueueCampaignHoppers=[]})},d.hasRole("admin")?l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(c.agents,{id:e.resourceId})}),n=null;if(c.queueCampaign&&(n=_.find(c.agents,{id:Number(c.queueCampaign.UserId)})),n&&!_.some(t,["id",n.id])){var a=_.find(c.agents,{id:n.id});a.canSelect=!1,t.push(a)}c.agents=t})}else{var n=[],a=null;c.queueCampaign&&(a=_.find(c.agents,{id:Number(c.queueCampaign.UserId)}));for(var i=0;i<c.agents.length;i++)a&&c.agents[i].id===a.id&&(c.agents[i].canSelect=!1,n.push(c.agents[i]));c.agents=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=!0,u=1;function p(e){c.queueCampaignHoppers=e||{count:0,rows:[]}}function g(e){l.cmHopper.delete({id:e.id}).$promise.then(function(){_.remove(c.queueCampaignHoppers.rows,{id:e.id}),c.queueCampaignHoppers.count-=1,c.queueCampaignHoppers.rows.length||c.getQueueCampaignHoppers(),r.success({title:"Hopper deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETvoiceQueue"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getQueueCampaignHoppers())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.motiondialer").controller("QueueCampaignHoppersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="MOTIONDIALER.EDIT_HOPPER",g.hopper=angular.copy(l),g.hoppers=r,g.newHopper=!1,g.hopper||(g.hopper={},g.title="MOTIONDIALER.NEW_HOPPER",g.newHopper=!0),t.params.id&&(g.hopper.VoiceQueueId=t.params.id),g.addNewHopper=function(){g.errors=[],d.cmHopper.save(g.hopper).$promise.then(function(e){g.hoppers.unshift(e.toJSON()),o.success({title:"Hopper properly created",msg:g.hopper.name?g.hopper.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmHopper.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveHopper=function(){var n,a,i,s;g.errors=[],g.hopper.UserId=g.hopper.recallme?g.hopper.UserId:null,g.hopper.OwnerId=c.getCurrentUser().id,d.cmHopper.get({id:g.hopper.id,attributes:["scheduledat"]}).$promise.then(function(e){n=_.isNil(e)||_.isEmpty(e)?moment().format("YYYY-MM-DD HH:mm:ss"):e.scheduledat}).finally(function(){d.cmHopper.update({id:g.hopper.id},_.omit(g.hopper,["VoiceQueueId","CampaignId","ContactId","ListId"])).$promise.then(function(e){a=e,d.cmContact.get({id:a.ContactId,attributes:["firstName","lastName"]}).$promise.then(function(e){_.isNil(e)||_.isNil(e.firstName)||(i=e.firstName,_.isNil(e.lastName)||(i+=" "+e.lastName))}).catch(function(){i=void 0}).finally(function(){d.voiceQueue.get({raw:!1,id:a.VoiceQueueId,attributes:["name"]}).$promise.then(function(e){s=e.name}).catch(function(e){s=void 0}).finally(function(){d.cmHopperHistory.save({state:24,statedesc:"Edited",scheduledat:n,calleridnum:a.phone,calleridname:i,campaigntype:a.VoiceQueueId?"queue":"ivr",campaign:s,editedat:moment().format("YYYY-MM-DD HH:mm:ss"),edited:!0,ListId:a.ListId,UserId:c.getCurrentUser().id,VoiceQueueId:a.VoiceQueueId,CampaignId:a.CampaignId,ContactId:a.ContactId,callback:a.callback,callbackuniqueid:a.callbackuniqueid,countbusyretry:a.countbusyretry,countcongestionretry:a.countcongestionretry,countglobal:a.countglobal,countnoanswerretry:a.countnoanswerretry,followuptime:a.followuptime,recallme:a.recallme})})});var t=_.find(g.hoppers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Hopper properly saved!",msg:g.hopper.name?g.hopper.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmHopper.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})})},g.deleteHopper=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The hopper will be deleted.").ariaLabel("Delete Hopper").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cmHopper.delete({id:g.hopper.id}).$promise.then(function(){_.remove(g.hoppers,{id:g.hopper.id}),o.success({title:"Hopper properly deleted!",msg:(g.hopper.name||"hopper")+" has been deleted!"}),v(g.hopper)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cmHopper.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cmHopper.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){g.agents=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.user.get({fields:"id,name",role:"agent",sort:"name",nolimit:"true"}).$promise.then(function(e){g.agents=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.agents,{id:e.resourceId})}),n=null;if(g.hopper&&(n=_.find(g.agents,{id:Number(g.hopper.UserId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.agents,{id:n.id});a.canSelect=!1,t.push(a)}g.agents=t})}else{var n=[],a=null;g.hopper&&(a=_.find(g.agents,{id:Number(g.hopper.UserId)}));for(var i=0;i<g.agents.length;i++)a&&g.agents[i].id===a.id&&(g.agents[i].canSelect=!1,n.push(g.agents[i]));g.agents=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","hoppers","hopper","api","Auth","license","setting","crudPermissions"],angular.module("app.motiondialer").controller("CreateOrEditHopperVoiceQueueIdDialogController",e)}(),function(){"use strict";function e(n,a){var i=this;i.queueCampaign={},i.init=function(t){i.queueCampaign=t,n.cmHopper.get({limit:0,VoiceQueueId:t.id}).$promise.then(function(e){return i.total=e.count||0,n.cmHopper.get({limit:0,VoiceQueueId:t.id,active:!1,countbusyretry:0,countcongestionretry:0,countnoanswerretry:0}).$promise}).then(function(e){return i.fresh=e.count||0,n.cmHopperFinal.get({limit:0,VoiceQueueId:t.id}).$promise}).then(function(e){i.closed=e.count||0}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETTAGS",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["api","toasty"],angular.module("app.motiondialer").controller("QueueCampaignHopperStatisticsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l){var d=this;function c(){return a(function(n,t){return a(function(t,n){return s.cmList.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return d.items=e.rows?e.rows:[],r.hasRole("admin")?e:d.section?d.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:d.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return d.allowedItems=_.map(t,function(e){return _.find(d.items,{id:r.hasRole("admin")||d.section.autoAssociation?e.id:e.resourceId})}),d.startingAllowedItems=angular.copy(d.allowedItems),d.items.forEach(function(e){var t=_.find(d.allowedItems,{id:e.id});"admin"===d.currentUser.role?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s[d.apiRoute][d.getApi]({id:d.queueCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];d.selectedItems=_.map(t,function(e){return _.find(d.items,{id:e.id})}),d.startingSelectedItems=angular.copy(d.selectedItems),d.dualMultiselectOptions.selectedItems=d.selectedItems,d.dualMultiselectOptions.items=_.differenceBy(d.allowedItems,d.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}d.currentUser=r.getCurrentUser(),d.queueCampaign=t,d.crudPermissions=l,d.apiRoute="voiceQueue",d.getApi="getLists",d.addApi="addLists",d.removeApi="removeLists",d.items=[],d.allowedItems=[],d.selectedItems=[],d.startingAllowedItems=[],d.startingSelectedItems=[],d.pendingChanges=!1,d.loading=!1,d.dualMultiselectOptions={readOnly:!d.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!1,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("MOTIONDIALER.ALL_LISTS"),labelSelected:n.instant("MOTIONDIALER.SELECTED_LISTS"),transferCallback:function(e,t){var n=_.xorBy(d.startingSelectedItems,d.selectedItems,"id");d.pendingChanges=!_.isEmpty(n)}},d.onInit=function(){return r.hasRole("admin")?c().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:d.currentUser.userProfileId,name:"Lists"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return d.section=e,c()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETLISTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},d.saveLists=function(){d.loading=!0;var e=_.differenceBy(d.startingSelectedItems,d.selectedItems,"id"),t=_.differenceBy(d.selectedItems,d.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.removeApi]({id:d.queueCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s[d.apiRoute][d.addApi]({id:d.queueCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){d.pendingChanges=!1,d.startingAllowedItems=angular.copy(d.allowedItems),d.startingSelectedItems=angular.copy(d.selectedItems),i.success({title:"SUCCESS",msg:"Lists association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})}).finally(function(){d.loading=!1});var n},d.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","queueCampaign","$translate","$timeout","Auth","crudPermissions"],angular.module("app.motiondialer").controller("QueueCampaignlistaddController",e)}(),function(){"use strict";function e(e,t,a,i,s,n,o,r){var l=this;function d(){t.hide()}function c(e,t){var n=t.id;o.enqueue(function(){return i.voiceQueue.removeLists({id:e,ids:n}).$promise.then(function(){return i.voiceQueue.addLists({id:e,ids:n,dialCheckDuplicateType:"never"}).$promise}).then(function(){a.success({title:"Reset Succesfull",msg:"List "+t.name+" has been reset"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:queueCampaign.RESETLIST",msg:e.status?JSON.stringify(e.data):e.toString()})})})}l.selected=[],l.items=n||[],l.loading=!1,l.closeDialog=d,l.exists=function(e,t){return-1<t.indexOf(e)},l.toggle=function(e,t){var n=t.indexOf(e);-1<n?t.splice(n,1):t.push(e)},l.isIndeterminate=function(){return 0!==l.selected.length&&l.selected.length!==l.items.length},l.isChecked=function(){return l.selected.length===l.items.length},l.toggleAll=function(){l.selected.length===l.items.length?l.selected=[]:(0===l.selected.length||0<l.selected.length)&&(l.selected=l.items.slice(0))},l.listSelected=function(){l.loading=!0,r(function(e,t){for(var n=0;n<l.selected.length;n+=1)c(s.id,l.selected[n]);var a;a=e,o.enqueue(function(){return a()})}).finally(function(){l.loading=!1,d()})}}e.$inject=["$scope","$mdDialog","toasty","api","queueCampaign","listsCampaign","Sequence","$q"],angular.module("app.motiondialer").controller("QueueCampaignresetlistController",e)}(),function(){"use strict";function e(e,i,a,s,t,n,o,r){var l=this;function d(){return i(function(n,t){return i(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:i(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),i(function(t,n){return s.voiceQueue.getTeams({id:l.queueCampaign.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.queueCampaign=t,l.crudPermissions=r,l.penalty=0,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("MOTIONDIALER.ALL_TEAMS"),labelSelected:n.instant("MOTIONDIALER.SELECTED_TEAMS"),transferCallback:function(e,t){t?e.forEach(function(e){e.penalty=void 0}):e.forEach(function(e){e.penalty="penalty "+l.penalty});var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):i(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,i(function(e,t){_.isEmpty(n)?e():s.voiceQueue.removeTeams({id:l.queueCampaign.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return a=t,i(function(e,t){if(!_.isEmpty(a)){var n=_.map(a,function(e){return{id:e.id,penalty:_.trim(e.penalty,"penalty ")}});return s.voiceQueue.addTeams({id:l.queueCampaign.id,teams:n}).$promise.then(function(){e()}).catch(function(e){t(e)})}e()});var a}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),a.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","queueCampaign","$translate","Auth","crudPermissions"],angular.module("app.motiondialer").controller("QueueCampaignteamaddController",e)}(),function(){"use strict";function e(n,e,i,s,a,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.queueCampaign=c||n.params.queueCampaign||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.clonedialog=function(e,t){i.show({controller:"QueueCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:u.queueCampaigns?u.queueCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.listadddialog=function(e,t){i.show({controller:"QueueCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/listadd/listadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:u.queueCampaigns?u.queueCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.blacklistadddialog=function(e,t){i.show({controller:"QueueCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:u.queueCampaigns?u.queueCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.teamadddialog=function(e,t){i.show({controller:"QueueCampaignteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:u.queueCampaigns?u.queueCampaigns.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){i.show({controller:"QueueCampaignagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:u.queueCampaigns?u.queueCampaigns.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.resetlistdialog=function(t,n){r.voiceQueue.getLists({id:t.id,fields:"id,name",nolimit:!0}).$promise.then(function(a){if(_.isNil(a.rows)||_.isEmpty(a.rows))l.info({title:"Campaign Without Lists"});else if(1===a.rows.length){var e=i.confirm().title("Are you sure want to reset the list "+a.rows[0].name+" ?").htmlContent("<b>"+a.rows[0].name+"</b> will be reset.").ariaLabel("Reset List").targetEvent(n).ok("OK").cancel("CANCEL");i.show(e).then(function(){var e,t,n;e=u.queueCampaign.id,t=a.rows[0],n=t.id,r.voiceQueue.removeLists({id:e,ids:n}).$promise.then(function(){return r.voiceQueue.addLists({id:e,ids:n,dialCheckDuplicateType:"never"}).$promise}).then(function(){l.success({title:"Reset Succesfull",msg:"List "+t.name+" has been reset"})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:queueCampaign.REMOVELIST",msg:e.status?JSON.stringify(e.data):e.toString()})})})}else i.show({controller:"QueueCampaignresetlistController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/resetlist/resetlist.html",parent:angular.element(s.body),targetEvent:n,clickOutsideToClose:!1,locals:{queueCampaign:t,listsCampaign:a?a.rows:[]}})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:RESETLIST",msg:e.status?JSON.stringify(e.data):e.toString()})})},u.gotogoto=function(e,t){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:1510}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.motiondialer.realtime.queues",{}):l.info({title:a.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:a.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.motiondialer.realtime.queues",{})}},u.alert=l.info,u.gotoQueueCampaigns=function(){n.go("app.motiondialer.queueCampaigns")},u.saveQueueCampaign=function(){r.voiceQueue.update({id:u.queueCampaign.id},u.queueCampaign).$promise.then(function(){l.success({title:"QueueCampaign updated!",msg:u.queueCampaign.name?u.queueCampaign.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceMusicOnHold.get({fields:"id,name",nolimit:"true"}).$promise.then(function(e){u.musiconholds=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MUSICONHOLDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceMusicOnHold.get({fields:"id,name",nolimit:"true"}).$promise.then(function(e){u.musiconholds=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:407}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.musiconholds,{id:e.resourceId})}),n=null;if(u.queueCampaign&&(n=_.find(u.musiconholds,{name:u.queueCampaign.musiconhold})),n&&!_.some(t,["id",n.id])){var a=_.find(u.musiconholds,{id:n.id});a.canSelect=!1,t.push(a)}u.musiconholds=t}):r.voiceMusicOnHold.get({fields:"id,name",nolimit:"true",defaultEntry:1}).$promise.then(function(e){u.musiconholds=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmusiconholds",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.trunks=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.trunks,{id:e.resourceId})}),n=null;if(u.queueCampaign&&(n=_.find(u.trunks,{id:Number(u.queueCampaign.TrunkId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.trunks,{id:n.id});a.canSelect=!1,t.push(a)}u.trunks=t})}else{var n=[],a=null;u.queueCampaign&&(a=_.find(u.trunks,{id:Number(u.queueCampaign.TrunkId)}));for(var i=0;i<u.trunks.length;i++)a&&u.trunks[i].id===a.id&&(u.trunks[i].canSelect=!1,n.push(u.trunks[i]));u.trunks=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.projects=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.projects=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1103}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.projects,{id:e.resourceId})}),n=null;if(u.queueCampaign&&(n=_.find(u.projects,{name:u.queueCampaign.dialQueueProject})),n&&!_.some(t,["id",n.id])){var a=_.find(u.projects,{id:n.id});a.canSelect=!1,t.push(a)}u.projects=t})}else{var n=[],a=null;u.queueCampaign&&(a=_.find(u.projects,{name:u.queueCampaign.dialQueueProject}));for(var i=0;i<u.projects.length;i++)a&&u.projects[i].id===a.id&&(u.projects[i].canSelect=!1,n.push(u.projects[i]));u.projects=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){u.interval=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.interval,{id:e.resourceId})}),n=null;if(u.queueCampaign&&(n=_.find(u.interval,{id:Number(u.queueCampaign.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.interval,{id:n.id});a.canSelect=!1,t.push(a)}u.interval=t})}else{var n=[],a=null;u.queueCampaign&&(a=_.find(u.interval,{id:Number(u.queueCampaign.IntervalId)}));for(var i=0;i<u.interval.length;i++)a&&u.interval[i].id===a.id&&(u.interval[i].canSelect=!1,n.push(u.interval[i]));u.interval=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","queueCampaign","userProfileSection"],angular.module("app.motiondialer").controller("QueueCampaignController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.queueCampaigns=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="queueCampaigns",b.listOrder="",b.listOrderAsc=null,b.selectedQueueCampaigns=[],b.query={fields:"createdAt,updatedAt,id,name,dialActive,TrunkId,TrunkBackupId,type,IntervalId,dialCheckDuplicateType,dialCutDigit,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,dialOrderByScheduledAt,dialRecallMeTimeout,dialRecallInQueue,dialGlobalInterval,dialTimezone,dialAMDActive,dialAMDInitialSilence,dialAMDGreeting,dialAMDAfterGreetingSilence,dialAMDTotalAnalysisTime,dialAMDMinWordLength,dialAMDBetweenWordsSilence,dialAMDMaximumNumberOfWords,dialAMDSilenceThreshold,dialAMDMaximumWordLength,dialMethod,dialPowerLevel,dialPredictiveOptimization,dialPredictiveOptimizationPercentage,dialPredictiveInterval,dialLimitQueue,dialOriginateCallerIdName,dialOriginateCallerIdNumber,dialRandomLastDigitCallerIdNumber,dialOriginateTimeout,dialPrefix,dialQueueOptions,dialQueueTimeout,strategy,timeout,retry,wrapuptime,weight,musiconhold,dialQueueProject,dialQueueProject2,dialAgiAfterHangupAgent,dialGlobalMaxRetry,dialCongestionMaxRetry,dialCongestionRetryFrequency,dialBusyMaxRetry,dialBusyRetryFrequency,dialNoAnswerMaxRetry,dialNoAnswerRetryFrequency,description,mandatoryDisposition,mandatoryDispositionPauseId,dialPredictiveIntervalMaxThreshold,dialPredictiveIntervalMinThreshold",type:"outbound",sort:"-updatedAt",channel:"voice",limit:10,page:1},b.arraydialCheckDuplicateType=_.keyBy([{option:"ALWAYS",value:"'always'"},{option:"NEVER",value:"'never'"},{option:"ONLY_IF_OPEN",value:"'onlyIfOpen'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayautopause=_.keyBy([{option:"Yes",value:"'all'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayringinuse=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytimeoutrestart=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraymonitor_format=_.keyBy([{option:"Inactive",value:"''"},{option:"wav",value:"'wav'"},{option:"wav49",value:"'wav49'"},{option:"gsm",value:"'gsm'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysetinterfacevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysetqueuevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysetqueueentryvar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydialOrderByScheduledAt=_.keyBy([{option:"DESC",value:"'DESC'"},{option:"ASC",value:"'ASC'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydialMethod=_.keyBy([{option:"Progressive",value:"'progressive'"},{option:"PowerDialing",value:"'power'"},{option:"Predictive",value:"'predictive'"},{option:"Preview",value:"'preview'"},{option:"BookedProgressive",value:"'booked'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydialPredictiveOptimization=_.keyBy([{option:"AgentBusyFactor",value:"'agentBusyFactor'"},{option:"DropRate",value:"'dropRate'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraystrategy=_.keyBy([{option:"Round Robin Memory",value:"'rrmemory'"},{option:"Round Robin",value:"'roundrobin'",ngIf:"vm.queueCampaign.dialMethod === 'booked'"},{option:"Least Recent",value:"'leastrecent'",ngIf:"vm.queueCampaign.dialMethod !== 'booked'"},{option:"Fewest Calls",value:"'fewestcalls'",ngIf:"vm.queueCampaign.dialMethod !== 'booked'"},{option:"Random",value:"'random'",ngIf:"vm.queueCampaign.dialMethod !== 'booked'"},{option:"Linear",value:"'linear'",ngIf:"vm.queueCampaign.dialMethod !== 'booked'"},{option:"Weight Random",value:"'wrandom'",ngIf:"vm.queueCampaign.dialMethod !== 'booked'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.motiondialer.queueCampaigns.edit",{id:e.id,queueCampaign:e,crudPermissions:b.crudPermissions})},b.clonedialog=function(e,t){i.show({controller:"QueueCampaigncloneController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:b.queueCampaigns?b.queueCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.listadddialog=function(e,t){i.show({controller:"QueueCampaignlistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/listadd/listadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:b.queueCampaigns?b.queueCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.blacklistadddialog=function(e,t){i.show({controller:"QueueCampaignblacklistaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/blacklistadd/blacklistadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:b.queueCampaigns?b.queueCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.teamadddialog=function(e,t){i.show({controller:"QueueCampaignteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:b.queueCampaigns?b.queueCampaigns.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"QueueCampaignagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{queueCampaign:e,queueCampaigns:b.queueCampaigns?b.queueCampaigns.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("queueCampaign")+"?").htmlContent("<b>"+(e.name||"queueCampaign")+"</b> will be deleted.").ariaLabel("delete queueCampaign").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:1510}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.motiondialer.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.motiondialer.realtime.queues",{})}},b.success=y,b.getQueueCampaigns=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="QueueCampaigns",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditQueueCampaign=function(e,t){i.show({controller:"CreateOrEditQueueCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:t,queueCampaigns:b.queueCampaigns.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteQueueCampaign=S,b.exportSelectedQueueCampaigns=function(){var e=angular.copy(b.selectedQueueCampaigns);return b.selectedQueueCampaigns=[],e},b.deleteSelectedQueueCampaigns=function(e){var t=i.confirm().title("Are you sure want to delete the selected queueCampaigns?").htmlContent("<b>"+b.selectedQueueCampaigns.length+" selected</b> will be deleted.").ariaLabel("delete QueueCampaigns").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedQueueCampaigns.forEach(function(e){S(e)}),b.selectedQueueCampaigns=[]})},b.deselectQueueCampaigns=function(){b.selectedQueueCampaigns=[]},b.selectAllQueueCampaigns=function(){b.selectedQueueCampaigns=b.queueCampaigns.rows},g.hasRole("admin")?m.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.trunks=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.trunks=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(b.trunks,{id:e.resourceId})}),a=null;a=[],b.queueCampaigns.rows.forEach(function(e){var t=_.find(b.trunks,{id:Number(e.TrunkId)});a.push(t)}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(b.trunks,{id:e.id});t.canSelect=!1,n.push(t)}}),b.trunks=n})}else{var n=[],a=[];b.queueCampaigns.rows.forEach(function(e){var t=_.find(b.trunks,{id:Number(e.TrunkId)});a.push(t)});for(var i=0;i<b.trunks.length;i++){_.some(a,{id:b.trunks[i].id})&&(b.trunks[i].canSelect=!1,n.push(b.trunks[i]))}b.trunks=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),g.hasRole("admin")?m.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){b.interval=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVAL",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.interval.get({fields:"id,name",sort:"name",IntervalId:"null"}).$promise.then(function(e){b.interval=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.interval,{id:e.resourceId})}),n=null;if(b.queueCampaign&&(n=_.find(b.interval,{id:Number(b.queueCampaign.IntervalId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.interval,{id:n.id});a.canSelect=!1,t.push(a)}b.interval=t})}else{var n=[],a=null;b.queueCampaign&&(a=_.find(b.interval,{id:Number(b.queueCampaign.IntervalId)}));for(var i=0;i<b.interval.length;i++)a&&b.interval[i].id===a.id&&(b.interval[i].canSelect=!1,n.push(b.interval[i]));b.interval=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.queueCampaigns=e||{count:0,rows:[]}}function S(e){m.voiceQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.queueCampaigns.rows,{id:e.id}),b.queueCampaigns.count-=1,b.queueCampaigns.rows.length||b.getQueueCampaigns(),p.success({title:_.startCase("QueueCampaign")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getQueueCampaigns())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","queueCampaigns","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.motiondialer").controller("QueueCampaignsController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m,u,p,g){var v=this,h=!0;function f(){var e=i.localStorage.getItem("motion2.realtime.abandoned.bull.contacts:"+v.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(v.query=_.merge(e.query,_.omit(v.query,["sort","limit","page"])),v.query=_.omit(v.query,"filter")),d.hasRole("admin")?o.user.getQueues({id:d.getCurrentUser().id,fields:"id,name",channel:"voice",type:"outbound",nolimit:!0}).$promise.then(function(e){v.queues=e||{count:0,rows:[]},v.queuesMap=_.mapValues(_.keyBy(v.queues.rows,"name"),"name")}).catch(function(e){console.error(e)}).finally(function(){v.getContacts()}):o.userProfile.getResources({id:v.currentUser.userProfileId,section:"QueueCampaigns",channel:"voice",type:"outbound",sort:"-updatedAt",nolimit:!0}).$promise.then(function(e){v.queues=e||{count:0,rows:[]},v.queuesMap=_.mapValues(_.keyBy(v.queues.rows,"name"),"name")}).catch(function(e){console.error(e)}).finally(function(){v.getContacts()})}function b(e){v.contacts=e||{count:0,rows:[]},h=!1,v.refresh=!0}v.showTooltip=!1,v.refresh=!0,v.disable=[],v.agents=p||[],v.currentUser=d.getCurrentUser(),v.localizationMap=u,v.pickerModel={dateStart:null,dateEnd:null},v.queues={},v.contacts={count:0,rows:[]},v.dispositions=g,v.userProfile=r,v.userProfileSection=l&&1==l.count?l.rows[0]:null,v.crudPermissions=d.parseCrudPermissions(v.userProfileSection?v.userProfileSection.crudPermissions:null),v.query={fields:"id,type,calleridnum,calleridname,queue,queuecallerabandonAt,queuecallerexitAt,queuecallerexitreason,assigned,lastAssignedTo,updatedAt,disposition",type:"outbound",queuecallerexitreason:"TIMEOUT,ABANDONED",sort:"-updatedAt",limit:10,page:1},v.clearAll=function(){v.query.createdAt=void 0,v.pickerModel={dateStart:null,dateEnd:null},v.getContacts()},v.getContacts=function(){if(v.refresh=!1,v.pickerModel.dateStart&&!h){var e=moment(v.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();v.query.createdAt={$gte:v.pickerModel.dateStart,$lte:e}}else v.query.createdAt=void 0;v.query.queue=v.query.queue,v.query.offset=(v.query.page-1)*v.query.limit,i.localStorage.setItem("motion2.realtime.abandoned.bull.contacts:"+v.currentUser.id,JSON.stringify({query:_.omit(v.query,"queue")})),v.promise=o.voiceQueueReport.getVoiceQueuesReport(v.query,b).$promise},v.refreshContacts=function(){v.showTooltip=!1,v.getContacts()},v.onInit=f,v.assignedA=function(e,t){e&&(v.disable[e.id]=!0,o.voiceQueueReport.update({id:e.id,lastAssignedTo:t?t.name:null,assigned:!!t}).$promise.catch(function(e){console.log(e)}).finally(function(){v.disable[e.id]=!1}))},v.disposed=function(e,t){e&&o.voiceQueueReport.update({id:e.id,disposition:t||null}).$promise.catch(function(e){console.log(e)})},v.onSavevoiceQueueReport=function(e){e&&v.queuesMap&&"outbound"===e.type&&v.queuesMap[e.queue]&&(v.showTooltip=!0)},v.onUpdatevoiceQueueReport=function(e){if(e){var t=_.findIndex(v.contacts.rows,["id",e.id]);0<=t&&_.merge(v.contacts.rows[t],e)}},c.onWithoutApply("voiceQueueReport:save",v.onSavevoiceQueueReport),c.on("voiceQueueReport:update",v.onUpdatevoiceQueueReport),f();var A=!0,E=1;e.$watch("vm.query.filter",function(e,t){A?n(function(){A=!1}):(t||(E=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=E),v.getContacts())}),e.$on("$destroy",function(){c.removeAllListeners("voiceQueueReport:save"),c.removeAllListeners("voiceQueueReport:update")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","userProfile","userProfileSection","Auth","socket","toasty","dateFilterLocalizationFactory","agents","dispositions"],angular.module("app.motiondialer").controller("AbandonedCallsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"voice",direction:"outbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,n,a,i,t,s,o,r,l,d,c,m){var u=this,p=["name","active","limitCalls","message","originated","IntervalId","SquareProjectId","Trunk","TrunkId","ivrAnswerCallsDay","dialQueueProject","ivrTotalCallsDays","description"];function g(){_.forIn(u.campaigns,function(e,t){u.rpcCampaigns[t]&&_.merge(e,_.pick(u.rpcCampaigns[t],p))})}u.currentUser=m.getCurrentUser(),u.count=o.count,u.campaigns=o?_.keyBy(o.rows?o.rows:[],"id"):{},u.rpcCampaigns=s?_.keyBy(s.rows?s.rows:[],"id"):{},u.userProfile=d,u.userProfileSection=c&&1==c.count?c.rows[0]:null,u.crudPermissions=m.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.query={sort:"-updatedAt",limit:10,page:1},u.success=f,u.getCampaigns=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=r.campaign.get(u.query,f).$promise:(u.query.id=u.userProfile.id,u.query.section="IvrCampaigns",u.promise=r.userProfile.getResources(u.query,f).$promise)},u.onSave=function(e){u.campaigns[e.id]&&(_.merge(u.campaigns[e.id],_.pick(e,p)),_.merge(u.rpcCampaigns[e.id],_.pick(e,p)))},u.$onInit=g,u.createOrEditIvrCampaign=function(e,t){a.show({controller:"CreateOrEditIvrCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/ivrCampaigns/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{ivrCampaign:t,ivrCampaigns:_.values(u.campaigns),license:null,setting:null,crudPermissions:u.crudPermissions}})},l.onWithoutApply("campaign:save",u.onSave),u.interval=t(function(){},999);var v=!0,h=1;function f(e){u.count=e.count,u.campaigns=e?_.keyBy(e.rows?e.rows:[],"id"):{},g()}e.$watch("vm.query.filter",function(e,t){v?n(function(){v=!1}):(t||(h=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=h),u.getCampaigns())}),e.$on("$destroy",function(){l.removeAllListeners("campaign:save"),u.interval&&t.cancel(u.interval)})}e.$inject=["$scope","$timeout","$mdDialog","$document","$interval","rpcCampaigns","campaigns","api","socket","userProfile","userProfileSection","Auth"],angular.module("app.motiondialer").controller("IvrCampaignsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,t,a,n,i,s,o,r,l,d,c,m,u){var p=this;p.currentUser=u.getCurrentUser(),p.agents=n||{count:0,rows:[]},p.queues=i?_.keyBy(i.rows?i.rows:[],"name"):{},p.rpcVoiceQueuesChannelsTmp=s?_.keyBy(s.rows?_.filter(s.rows,{type:"outbound"}):[],"uniqueid"):{},p.rpcVoiceQueuesChannels={},p.userProfile=c,p.userProfileSection=m&&1==m.count?m.rows[0]:null,p.crudPermissions=u.parseCrudPermissions(p.userProfileSection?p.userProfileSection.crudPermissions:null),p.queryChannels={limit:10,page:1},p.getSize=function(e){return _.size(e)},p.$onInit=function(){_.forIn(p.rpcVoiceQueuesChannelsTmp,function(e,t){_.find(p.queues,{name:e.name})&&(p.rpcVoiceQueuesChannels[t]=e)})},p.onSave=function(e){"outbound"===e.type&&_.find(p.queues,{name:e.name})&&(p.rpcVoiceQueuesChannels[e.uniqueid]=e)},p.onRemove=function(e){p.rpcVoiceQueuesChannels[e.uniqueid]&&delete p.rpcVoiceQueuesChannels[e.uniqueid]},p.hangup=function(t){return o.rpc.getVoiceQueuesChannelHangup({uniqueid:t}).$promise.then(function(e){d.success({title:"Channel "+t+" properly hangup!",msg:e.message||""})}).catch(function(e){d.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},p.redirectToAgent=function(t,e,n){return o.rpc.getVoiceQueuesChannelRedirect({uniqueid:t,exten:e,context:n}).$promise.then(function(e){d.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){d.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},p.redirectToNumber=function(e,t){var n=a.prompt().title("Which number do you want transfer the call to?").placeholder("Number").targetEvent(e).ok("Ok").cancel("Cancel");return a.show(n).then(function(e){return o.rpc.getVoiceQueuesChannelRedirect({uniqueid:t,exten:e}).$promise}).then(function(e){d.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){d.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},r.on("voice_queue_channel:save",p.onSave),r.on("voice_queue_channel:remove",p.onRemove),e.$on("$destroy",function(){r.removeAllListeners("voice_queue_channel:save"),r.removeAllListeners("voice_queue_channel:remove")})}e.$inject=["$scope","$timeout","$mdDialog","agents","queues","rpcVoiceQueuesChannels","api","socket","helperClasses","toasty","userProfile","userProfileSection","Auth"],angular.module("app.motiondialer").controller("QueueCallsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["total","answered","sumHoldTime","sumDuration","sumBillable","outboundNoAnswerCallsDay","outboundBusyCallsDay","outboundCongestionCallsDay","outboundNoSuchCallsDay","outboundUnknownCallsDay","outboundDropCallsDayTimeout","outboundDropCallsDayCallersExit","outboundBlacklistCallsDay","outboundOriginateFailureCallsDay","outboundAnswerAgiCallsDay","outboundReCallsDay","outboundRejectCallsDay"];function u(){_.forIn(c.queues,function(e,t){c.rpcQueues[t]&&_.merge(e,_.pick(c.rpcQueues[t],m))})}c.count=a.count,c.queues=a?_.keyBy(a.rows?a.rows:[],"id"):{},c.rpcQueues=i?_.keyBy(i.rows?i.rows:[],"id"):{},c.userProfile=r,c.userProfileSection=l&&1==l.count?l.rows[0]:null,c.crudPermissions=d.parseCrudPermissions(c.userProfileSection?c.userProfileSection.crudPermissions:null),d.hasRole("admin")?c.query={type:"outbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1}:c.query={id:d.getCurrentUser().id,channel:"voice",type:"outbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1},c.success=v,c.getQueues=function(){c.query.offset=(c.query.page-1)*c.query.limit,d.hasRole("admin")?c.promise=s.voiceQueue.get(c.query,v).$promise:(c.query.id=c.userProfile.id,c.query.section="QueueCampaigns",c.promise=s.userProfile.getResources(c.query,v).$promise)},c.onSave=function(e){c.queues[e.id]&&_.merge(c.queues[e.id],_.pick(e,m))},c.$onInit=u,o.onWithoutApply("voice_queue:save",c.onSave),c.interval=t(function(){},999);var p=!0,g=1;function v(e){c.count=e.count,c.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},u()}e.$watch("vm.query.filter",function(e,t){p?n(function(){p=!1}):(t||(g=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=g),c.getQueues())}),e.$on("$destroy",function(){o.removeAllListeners("voice_queue:save"),c.interval&&t.cancel(c.interval)})}e.$inject=["$scope","$timeout","$interval","queues","rpcQueues","api","socket","userProfile","userProfileSection","Auth"],angular.module("app.motiondialer").controller("QueueParamsMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused","startPredictive","startProgressive","erlangCalls","erlangCallToSecond","erlangAbandonmentRate","erlangBusyFactor","dialPredictiveInterval","dialPredictiveIntervalMaxThreshold","dialPredictiveIntervalMinThreshold","predictiveIntervalAvailable","predictiveIntervalTotalCalls","predictiveIntervalAnsweredCalls","predictiveIntervalDroppedCallsTimeout","predictiveIntervalDroppedCallsCallersExit","predictiveIntervalAvgHoldtime","predictiveIntervalAvgTalktime"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.voiceQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].VoiceQueueId].paused++,g.queues[e[t].rows[n].VoiceQueueId].loggedInDb++,g.queues[e[t].rows[n].VoiceQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].VoiceQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"outbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"voice",type:"outbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.voiceQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="QueueCampaigns",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditMotionDialerQueue=function(e,t){a.show({controller:"CreateOrEditQueueCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:t,queueCampaigns:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.showPredictiveQueueCampaignInfo=function(e,t){a.show({controller:"PredictiveQueueCampaignDialogController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/realtime/queues/predictive/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:t}})},g.agentAdd=function(e,t){a.show({controller:"QueueCampaignagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/motiondialer/views/queueCampaigns/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{queueCampaign:t,queueCampaigns:g.queues?g.queues.rows:[],realtime:!0,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.voiceQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&(_.merge(g.queues[e.id],_.pick(e,v)),_.isNil(e.startPredictive)&&(g.queues[e.id].startPredictive=void 0))},g.onSaveMember=function(e){g.queues[e.MotionDialerQueueId]&&g.queues[e.MotionDialerQueueId].loggedInDb++},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.VoiceQueueId]&&(g.queues[e.VoiceQueueId].loggedInDb+=1,g.queues[e.VoiceQueueId].agents[e.UserId]=e.VoiceQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.VoiceQueueId]&&0<g.queues[e.VoiceQueueId].loggedInDb&&(g.queues[e.VoiceQueueId].loggedInDb-=1,delete g.queues[e.VoiceQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.onWithoutApply("voice_queue:save",g.onSave),g.interval=s(function(){},999),d.on("userVoiceQueueRt:save",g.onSaveMember),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("voice_queue:save"),g.interval&&s.cancel(g.interval),d.removeAllListeners("userVoiceQueueRt:save"),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.motiondialer").controller("QueuesMotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,t,n){this.queueCampaign=n,this.addMinutes=function(e,t){return moment(e).add("m",t).format("HH:mm:ss")},this.setFormatTime=function(e){return moment(e).format("HH:mm:ss")},this.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$interval","queueCampaign"],angular.module("app.motiondialer").controller("PredictiveQueueCampaignDialogController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){switch(t.disconnect(),t.connect(),this.selectedTab=0,n.current.name){case"app.motiondialer.realtime.agents":this.selectedTab=0;break;case"app.motiondialer.realtime.queues":this.selectedTab=1;break;case"app.motiondialer.realtime.queue_calls":this.selectedTab=2;break;case"app.motiondialer.realtime.abandonedcalls":this.selectedTab=3;break;case"app.motiondialer.realtime.queue_params":this.selectedTab=4;break;case"app.motiondialer.realtime.ivr_campaigns":this.selectedTab=5;break;default:this.selectedTab=0,n.go("app.motiondialer.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.motiondialer.realtime.agents");break;case 1:n.go("app.motiondialer.realtime.queues");break;case 2:n.go("app.motiondialer.realtime.queue_calls");break;case 3:n.go("app.motiondialer.realtime.abandonedcalls");break;case 4:n.go("app.motiondialer.realtime.queue_params");break;case 5:n.go("app.motiondialer.realtime.ivr_campaigns");break;default:n.go("app.motiondialer.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.motiondialer").controller("MotionDialerRealtimeController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="OPENCHANNEL.EDIT_OPENCHANNELACCOUNT",g.openchannelAccount=angular.copy(l),g.openchannelAccounts=r,g.newOpenchannelAccount=!1,g.openchannelAccount||(g.openchannelAccount={waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},g.title="OPENCHANNEL.NEW_OPENCHANNELACCOUNT",g.newOpenchannelAccount=!0),t.params.id&&(g.openchannelAccount.OpenchannelAccountId=t.params.id),g.addNewOpenchannelAccount=function(){g.errors=[],d.openchannelAccount.save(g.openchannelAccount).$promise.then(function(e){g.openchannelAccounts.unshift(e.toJSON()),o.success({title:"OpenchannelAccount properly created",msg:g.openchannelAccount.name?g.openchannelAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveOpenchannelAccount=function(){g.errors=[],d.openchannelAccount.update({id:g.openchannelAccount.id},g.openchannelAccount).$promise.then(function(e){var t=_.find(g.openchannelAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelAccount properly saved!",msg:g.openchannelAccount.name?g.openchannelAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteOpenchannelAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The openchannelAccount will be deleted.").ariaLabel("Delete OpenchannelAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.openchannelAccount.delete({id:g.openchannelAccount.id}).$promise.then(function(){_.remove(g.openchannelAccounts,{id:g.openchannelAccount.id}),o.success({title:"OpenchannelAccount properly deleted!",msg:(g.openchannelAccount.name||"openchannelAccount")+" has been deleted!"}),v(g.openchannelAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.lists,{id:e.resourceId})}),n=null;if(g.openchannelAccount&&(n=_.find(g.lists,{id:Number(g.openchannelAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.lists,{id:n.id});a.canSelect=!1,t.push(a)}g.lists=t})}else{var n=[],a=null;g.openchannelAccount&&(a=_.find(g.lists,{id:Number(g.openchannelAccount.ListId)}));for(var i=0;i<g.lists.length;i++)a&&g.lists[i].id===a.id&&(g.lists[i].canSelect=!1,n.push(g.lists[i]));g.lists=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","openchannelAccounts","openchannelAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelAccountDialogController",e)}(),function(){"use strict";function e(o,i,a,s,e){var r=this;function t(e,t){if(r.openchannelAccountApps.rows.length){var n=r.openchannelAccountApps.rows[t]?r.openchannelAccountApps.rows[t]:r.openchannelAccountApps.rows[0];i.show({controller:"EditOpenchannelAccountApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccountApp:n,openchannelAccount:r.openchannelAccount,crudPermissions:r.crudPermissions}}).then(function(e){e&&(e.id?r.openchannelAccountApps.rows[t]=e:r.openchannelAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function l(){for(var e=1,t=[],n=0;n<r.openchannelAccountApps.rows.length;n++,0){var a=r.openchannelAccountApps.rows[n],i=[],s=[];a.intervals="*,*,*,*"!==a.interval?[a.interval]:a.IntervalId?_.map(_.filter(r.intervals.rows,{IntervalId:a.IntervalId}),"interval"):[],a.context=r.openchannelAccount.context,a.exten=r.openchannelAccount.exten,a.type&&(a.type=a.type.toLowerCase()),a.priority=i.length?_.last(i).priority+1:e,e=(s.length?_.last(s).priority:a.priority)+1,t=_.concat(t,i,[a],s)}o.openchannelAccount.addApplications({id:r.openchannelAccount.id},_.sortBy(t,"priority")).$promise.then(function(e){r.openchannelAccountApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){r.openchannelAccountApps=e||{count:0,rows:[]}}r.currentUser=e.getCurrentUser(),r.openchannelAccount={},r.openchannelAccountApps={count:0,rows:[]},r.selectedOpenchannelAccountApps=[],r.crudPermissions,r.query={sort:"priority"},r.apps=_.reject(_.sortBy([{app:"dialogflow",appType:"dialogflow",type:"dialogflow",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Key",name:"key",type:"text",required:!0,param:0},{title:"language",name:"language",type:"select",defaultValue:"'en'",values:[{option:"Danish",value:"'da'"},{option:"English",value:"'en'"},{option:"German",value:"'de'"},{option:"Italian",value:"'it'"},{option:"Spanish",value:"'es'"},{option:"French",value:"'fr'"},{option:"Indonesian",value:"'id'"},{option:"Japanese",value:"'ja'"},{option:"Korean (South Korea)",value:"'ko'"},{option:"Dutch",value:"'nl'"},{option:"Norwegian",value:"'no'"},{option:"Portuguese (European)",value:"'pt'"},{option:"Portuguese (Nrazilian)",value:"'pt-br'"},{option:"Russian",value:"'ru'"},{option:"Swedish",value:"'sv'"},{option:"Thai",value:"'th'"},{option:"Ukrainian",value:"'uk'"},{option:"Chinese (Simplified)",value:"'zh-CN'"},{option:"Chinese (Hong Kong)",value:"'zh-HK'"},{option:"Chinese (Traditional)",value:"'zh-TW'"}],required:!0,param:1},{title:"welcomemessage",name:"welcomemessage",type:"textarea",maxlength:255,required:!1,param:2,help:!0}]},{app:"amazonlex",appType:"amazonlex",type:"amazonlex",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"accesskeyid",name:"accesskeyid",type:"text",required:!0,param:0},{title:"secretaccesskey",name:"secretaccesskey",type:"text",required:!0,param:1},{title:"lexregion",name:"lexregion",type:"select",defaultValue:"'us-east-1'",values:[{option:"US East (N. Virginia)",value:"'us-east-1'"},{option:"US West (Oregon)",value:"'us-west-2'"},{option:"EU (Ireland)",value:"'eu-west-1'"},{option:"Asia Pacific (Sydney)",value:"'ap-southeast-2'"}],required:!0,param:2},{title:"botname",name:"botname",type:"text",required:!0,param:3},{title:"welcomemessage",name:"welcomemessage",type:"textarea",maxlength:255,required:!1,param:4,help:!0}]},{app:"Interval",appType:"interval",types:["always","custom","list"],fields:[],isApp:!1},{app:"noop",appType:"noop",type:"noop",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,fields:[{title:"Value",name:"value",type:"text",param:0}]},{app:"system",appType:"system",type:"system",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,extraApi:[{name:"variables",field:{name:"variable",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1012}}],fields:[{title:"Command",name:"command",type:"text",required:!0,param:0},{title:"Variable",name:"variable",type:"apiselect",values:"variables",value:"variable.name",option:"variable.name",defaultValues:[{value:"''",option:"None"}],defaultValue:"''",param:1}]},{app:"gotop",appType:"gotop",type:"goto",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Priority",name:"priority",type:"number",required:!0,min:0,param:0}]},{app:"gotoif",appType:"gotoif",type:"gotoif",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Condition",name:"condition",type:"text",required:!0,param:0},{title:"truepriority",name:"truepriority",type:"number",min:1,required:!0,param:1},{title:"falsepriority",name:"falsepriority",type:"number",min:1,required:!0,param:2}]},{app:"queue",appType:"queue",foreignKey:"OpenchannelQueueId",type:"queue",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"queues",field:{name:"queue",key:"name"},route:"openchannelQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:801}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",defaultValue:300,required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,defaultValue:300,required:!0,param:1}]},{app:"agent",appType:"agent",type:"agent",foreignKey:"UserId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"agents",field:{name:"agent",key:"name"},route:"user",filters:{fields:"id,name",sort:"name",role:"agent",nolimit:!0},permissions:{section:202}}],fields:[{title:"Agent",name:"agent",type:"apiselect",values:"agents",value:"agent.name",option:"agent.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:30,param:1}]},{app:"autoreply",appType:"autoreply",type:"autoreply",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"times",name:"times",type:"select",defaultValue:"1",values:[{option:"One Time",value:"1"},{option:"Always",value:"0"}],required:!0,param:0},{title:"Text",name:"text",type:"textarea",required:!0,param:1}]},{app:"close",appType:"close",type:"close",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Disposition",name:"disposition",type:"text",required:!0,param:0}]},{app:"tag",appType:"tag",type:"tag",foreignKey:"TagId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"tags",field:{name:"tag",key:"name"},route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1008}}],fields:[{title:"Tag",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",required:!0,param:0}]}],["app"]),{isApp:!1}),r.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},r.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){l()}},r.init=function(e,t){r.openchannelAccount=e,r.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},r.applications.disabled=!r.crudPermissions.canEdit,r.query.id=e.id,r.query.isApp=!0,r.query.nolimit=!0,r.getOpenchannelAccountApps(),r.getIntervals()},r.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){r.openchannelAccountApps.rows.splice(t,1),l()},function(){console.log("CANCEL")})},r.getOpenchannelAccountApps=function(){r.promise=o.openchannelAccount.getApplications(r.query,n).$promise},r.editOpenchannelAccountApp=t,r.editInterval=function(e,t){if(r.openchannelAccountApps.rows.length){var n=r.openchannelAccountApps.rows[t]?r.openchannelAccountApps.rows[t]:r.openchannelAccountApps.rows[0];i.show({controller:"EditOpenchannelAccountAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:r.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,l())})}},r.deleteOpenchannelAccountApp=function(e){_.remove(r.openchannelAccountApps.rows,{id:e.id}),l(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},r.deleteSelectedOpenchannelAccountApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+r.selectedOpenchannelAccountApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){r.selectedOpenchannelAccountApps.forEach(function(e){_.remove(r.openchannelAccountApps.rows,{id:e.id})}),r.selectedOpenchannelAccountApps=[],l()})},r.rewriteRouting=l,r.getIntervals=function(){return o.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){r.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.openchannel").controller("OpenchannelAccountActionsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.openchannelAccount.getAgents({id:c.openchannelAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserOpenchannelAccount?"penalty "+e.UserOpenchannelAccount.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.openchannelAccount=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.openchannelAccount.removeAgents({id:c.openchannelAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.openchannelAccount.addAgents({id:c.openchannelAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("OPENCHANNEL.ALL_AGENTS"),labelSelected:r.instant("OPENCHANNEL.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","openchannelAccount","openchannelAccounts","realtime","$translate","Auth","crudPermissions"],angular.module("app.openchannel").controller("OpenchannelAccountagentaddController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.agent=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agent.appdata)switch(l.agent.appType?l.agent.appType.toLowerCase():l.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agent.appdata.split(",");l.agent.key=d[0],l.agent.language=d[1],l.agent.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agent.appdata.split(",");l.agent.accesskeyid=d[0],l.agent.secretaccesskey=d[1],l.agent.lexregion=d[2],l.agent.botname=d[3],l.agent.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agent.appdata.split(",");l.agent.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agent.text=d.slice(1,d.length).join(",");break;case"message":l.agent.text=l.agent.appdata;break;case"set":l.agent.name=l.agent.appdata.split("=")[0],l.agent.value=l.agent.appdata.split("=")[1];break;case"agi":l.agent.project=l.agent.appdata;break;default:var c=l.agent.appdata.split(",");l.agent.agent=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.agent.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.agent.timeout=30;function m(e){t.hide(e)}l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outbounddial"===l.agent.appType.toLowerCase()&&(l.agent.prefix=l.agent.phone?l.agent.phone.split("$")[0]:void 0,l.agent.callerId=l.agent.callerID?"CALLERID(all)="+l.agent.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outboundDial"===l.agent.appType&&(l.agent.phone=i.cutdigits?(l.agent.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agent.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agent.options+="U(xcally-mixmonitor-context)"):l.agent.options=l.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.agents,{name:l.agent.agent});t&&(l.agent.UserId=t.id);if(l.agent.appType&&"custom"===l.agent.appType);else switch((l.agent.app||l.agent.appType).toLowerCase()){case"set":l.agent.appdata=l.agent.name+"="+l.agent.value;break;case"custom":break;default:e[0]=l.agent.agent,e[1]=l.agent.timeout,l.agent.appdata=e.join(",")}m(l.agent)},l.closeDialog=m,o.hasRole("admin")?s.user.get({fields:"id,name",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){l.agents=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.user.get({fields:"id,name",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){l.agents=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.agents,{id:e.resourceId})}),n=null;if(l.agent&&(n=_.find(l.agents,{name:l.agent.agent})),n&&!_.some(t,["id",n.id])){var a=_.find(l.agents,{id:n.id});a.canSelect=!1,t.push(a)}l.agents=t})}else{var n=[],a=null;l.agent&&(a=_.find(l.agents,{name:l.agent.agent}));for(var i=0;i<l.agents.length;i++)a&&l.agents[i].id===a.id&&(l.agents[i].canSelect=!1,n.push(l.agents[i]));l.agents=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.amazonlex=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.amazonlex.appdata)switch(l.amazonlex.appType?l.amazonlex.appType.toLowerCase():l.amazonlex.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.amazonlex.appdata.split(",");l.amazonlex.key=d[0],l.amazonlex.language=d[1],l.amazonlex.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.amazonlex.appdata.split(",");l.amazonlex.accesskeyid=d[0],l.amazonlex.secretaccesskey=d[1],l.amazonlex.lexregion=d[2],l.amazonlex.botname=d[3],l.amazonlex.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.amazonlex.appdata.split(",");l.amazonlex.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.amazonlex.text=d.slice(1,d.length).join(",");break;case"message":l.amazonlex.text=l.amazonlex.appdata;break;case"set":l.amazonlex.name=l.amazonlex.appdata.split("=")[0],l.amazonlex.value=l.amazonlex.appdata.split("=")[1];break;case"agi":l.amazonlex.project=l.amazonlex.appdata;break;default:var c=l.amazonlex.appdata.split(",");l.amazonlex.accesskeyid=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.amazonlex.secretaccesskey=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.amazonlex.lexregion=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.amazonlex.botname=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10),l.amazonlex.welcomemessage=_.isEmpty(c[4])?c[4]:isNaN(c[4])?c[4]:parseInt(c[4],10)}else l.amazonlex.lexregion="us-east-1";function m(e){t.hide(e)}l.amazonlex.type&&"outbound"===l.amazonlex.type.toLowerCase()&&"outbounddial"===l.amazonlex.appType.toLowerCase()&&(l.amazonlex.prefix=l.amazonlex.phone?l.amazonlex.phone.split("$")[0]:void 0,l.amazonlex.callerId=l.amazonlex.callerID?"CALLERID(all)="+l.amazonlex.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.amazonlex.type&&"outbound"===l.amazonlex.type.toLowerCase()&&"outboundDial"===l.amazonlex.appType&&(l.amazonlex.phone=i.cutdigits?(l.amazonlex.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.amazonlex.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.amazonlex.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.amazonlex.options+="U(xcally-mixmonitor-context)"):l.amazonlex.options=l.amazonlex.options.replace("U(xcally-mixmonitor-context)",""));if(l.amazonlex.appType&&"custom"===l.amazonlex.appType);else switch((l.amazonlex.app||l.amazonlex.appType).toLowerCase()){case"set":l.amazonlex.appdata=l.amazonlex.name+"="+l.amazonlex.value;break;case"custom":break;default:e[0]=l.amazonlex.accesskeyid,e[1]=l.amazonlex.secretaccesskey,e[2]=l.amazonlex.lexregion,e[3]=l.amazonlex.botname,e[4]=l.amazonlex.welcomemessage,l.amazonlex.appdata=e.join(",")}m(l.amazonlex)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppamazonlexDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.autoreply=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.autoreply.appdata)switch(l.autoreply.appType?l.autoreply.appType.toLowerCase():l.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.autoreply.appdata.split(",");l.autoreply.key=d[0],l.autoreply.language=d[1],l.autoreply.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.autoreply.appdata.split(",");l.autoreply.accesskeyid=d[0],l.autoreply.secretaccesskey=d[1],l.autoreply.lexregion=d[2],l.autoreply.botname=d[3],l.autoreply.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.autoreply.appdata.split(",");l.autoreply.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.autoreply.text=d.slice(1,d.length).join(",");break;case"message":l.autoreply.text=l.autoreply.appdata;break;case"set":l.autoreply.name=l.autoreply.appdata.split("=")[0],l.autoreply.value=l.autoreply.appdata.split("=")[1];break;case"agi":l.autoreply.project=l.autoreply.appdata;break;default:var c=l.autoreply.appdata.split(",");l.autoreply.times=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.autoreply.text=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.autoreply.times=1;function m(e){t.hide(e)}l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outbounddial"===l.autoreply.appType.toLowerCase()&&(l.autoreply.prefix=l.autoreply.phone?l.autoreply.phone.split("$")[0]:void 0,l.autoreply.callerId=l.autoreply.callerID?"CALLERID(all)="+l.autoreply.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outboundDial"===l.autoreply.appType&&(l.autoreply.phone=i.cutdigits?(l.autoreply.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.autoreply.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.autoreply.options+="U(xcally-mixmonitor-context)"):l.autoreply.options=l.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(l.autoreply.appType&&"custom"===l.autoreply.appType);else switch((l.autoreply.app||l.autoreply.appType).toLowerCase()){case"set":l.autoreply.appdata=l.autoreply.name+"="+l.autoreply.value;break;case"custom":break;default:e[0]=l.autoreply.times,e[1]=l.autoreply.text,l.autoreply.appdata=e.join(",")}m(l.autoreply)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.close=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.close.appdata)switch(l.close.appType?l.close.appType.toLowerCase():l.close.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.close.appdata.split(",");l.close.key=d[0],l.close.language=d[1],l.close.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.close.appdata.split(",");l.close.accesskeyid=d[0],l.close.secretaccesskey=d[1],l.close.lexregion=d[2],l.close.botname=d[3],l.close.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.close.appdata.split(",");l.close.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.close.text=d.slice(1,d.length).join(",");break;case"message":l.close.text=l.close.appdata;break;case"set":l.close.name=l.close.appdata.split("=")[0],l.close.value=l.close.appdata.split("=")[1];break;case"agi":l.close.project=l.close.appdata;break;default:var c=l.close.appdata.split(",");l.close.disposition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outbounddial"===l.close.appType.toLowerCase()&&(l.close.prefix=l.close.phone?l.close.phone.split("$")[0]:void 0,l.close.callerId=l.close.callerID?"CALLERID(all)="+l.close.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outboundDial"===l.close.appType&&(l.close.phone=i.cutdigits?(l.close.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.close.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.close.options+="U(xcally-mixmonitor-context)"):l.close.options=l.close.options.replace("U(xcally-mixmonitor-context)",""));if(l.close.appType&&"custom"===l.close.appType);else switch((l.close.app||l.close.appType).toLowerCase()){case"set":l.close.appdata=l.close.name+"="+l.close.value;break;case"custom":break;default:e[0]=l.close.disposition,l.close.appdata=e.join(",")}m(l.close)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.dialogflow=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.dialogflow.appdata)switch(l.dialogflow.appType?l.dialogflow.appType.toLowerCase():l.dialogflow.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.dialogflow.appdata.split(",");l.dialogflow.key=d[0],l.dialogflow.language=d[1],l.dialogflow.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.dialogflow.appdata.split(",");l.dialogflow.accesskeyid=d[0],l.dialogflow.secretaccesskey=d[1],l.dialogflow.lexregion=d[2],l.dialogflow.botname=d[3],l.dialogflow.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.dialogflow.appdata.split(",");l.dialogflow.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.dialogflow.text=d.slice(1,d.length).join(",");break;case"message":l.dialogflow.text=l.dialogflow.appdata;break;case"set":l.dialogflow.name=l.dialogflow.appdata.split("=")[0],l.dialogflow.value=l.dialogflow.appdata.split("=")[1];break;case"agi":l.dialogflow.project=l.dialogflow.appdata;break;default:var c=l.dialogflow.appdata.split(",");l.dialogflow.key=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.dialogflow.language=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.dialogflow.welcomemessage=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}else l.dialogflow.language="en";function m(e){t.hide(e)}l.dialogflow.type&&"outbound"===l.dialogflow.type.toLowerCase()&&"outbounddial"===l.dialogflow.appType.toLowerCase()&&(l.dialogflow.prefix=l.dialogflow.phone?l.dialogflow.phone.split("$")[0]:void 0,l.dialogflow.callerId=l.dialogflow.callerID?"CALLERID(all)="+l.dialogflow.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.dialogflow.type&&"outbound"===l.dialogflow.type.toLowerCase()&&"outboundDial"===l.dialogflow.appType&&(l.dialogflow.phone=i.cutdigits?(l.dialogflow.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.dialogflow.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.dialogflow.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.dialogflow.options+="U(xcally-mixmonitor-context)"):l.dialogflow.options=l.dialogflow.options.replace("U(xcally-mixmonitor-context)",""));if(l.dialogflow.appType&&"custom"===l.dialogflow.appType);else switch((l.dialogflow.app||l.dialogflow.appType).toLowerCase()){case"set":l.dialogflow.appdata=l.dialogflow.name+"="+l.dialogflow.value;break;case"custom":break;default:e[0]=l.dialogflow.key,e[1]=l.dialogflow.language,e[2]=l.dialogflow.welcomemessage,l.dialogflow.appdata=e.join(",")}m(l.dialogflow)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppdialogflowDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotoif=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotoif.appdata)switch(l.gotoif.appType?l.gotoif.appType.toLowerCase():l.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotoif.appdata.split(",");l.gotoif.key=d[0],l.gotoif.language=d[1],l.gotoif.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotoif.appdata.split(",");l.gotoif.accesskeyid=d[0],l.gotoif.secretaccesskey=d[1],l.gotoif.lexregion=d[2],l.gotoif.botname=d[3],l.gotoif.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotoif.appdata.split(",");l.gotoif.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotoif.text=d.slice(1,d.length).join(",");break;case"message":l.gotoif.text=l.gotoif.appdata;break;case"set":l.gotoif.name=l.gotoif.appdata.split("=")[0],l.gotoif.value=l.gotoif.appdata.split("=")[1];break;case"agi":l.gotoif.project=l.gotoif.appdata;break;default:var c=l.gotoif.appdata.split(",");l.gotoif.condition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.gotoif.truepriority=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.gotoif.falsepriority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outbounddial"===l.gotoif.appType.toLowerCase()&&(l.gotoif.prefix=l.gotoif.phone?l.gotoif.phone.split("$")[0]:void 0,l.gotoif.callerId=l.gotoif.callerID?"CALLERID(all)="+l.gotoif.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outboundDial"===l.gotoif.appType&&(l.gotoif.phone=i.cutdigits?(l.gotoif.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotoif.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotoif.options+="U(xcally-mixmonitor-context)"):l.gotoif.options=l.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotoif.appType&&"custom"===l.gotoif.appType);else switch((l.gotoif.app||l.gotoif.appType).toLowerCase()){case"set":l.gotoif.appdata=l.gotoif.name+"="+l.gotoif.value;break;case"custom":break;default:e[0]=l.gotoif.condition,e[1]=l.gotoif.truepriority,e[2]=l.gotoif.falsepriority,l.gotoif.appdata=e.join(",")}m(l.gotoif)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotop.appdata)switch(l.gotop.appType?l.gotop.appType.toLowerCase():l.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotop.appdata.split(",");l.gotop.key=d[0],l.gotop.language=d[1],l.gotop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotop.appdata.split(",");l.gotop.accesskeyid=d[0],l.gotop.secretaccesskey=d[1],l.gotop.lexregion=d[2],l.gotop.botname=d[3],l.gotop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotop.appdata.split(",");l.gotop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotop.text=d.slice(1,d.length).join(",");break;case"message":l.gotop.text=l.gotop.appdata;break;case"set":l.gotop.name=l.gotop.appdata.split("=")[0],l.gotop.value=l.gotop.appdata.split("=")[1];break;case"agi":l.gotop.project=l.gotop.appdata;break;default:var c=l.gotop.appdata.split(",");l.gotop.priority=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outbounddial"===l.gotop.appType.toLowerCase()&&(l.gotop.prefix=l.gotop.phone?l.gotop.phone.split("$")[0]:void 0,l.gotop.callerId=l.gotop.callerID?"CALLERID(all)="+l.gotop.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outboundDial"===l.gotop.appType&&(l.gotop.phone=i.cutdigits?(l.gotop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotop.options+="U(xcally-mixmonitor-context)"):l.gotop.options=l.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotop.appType&&"custom"===l.gotop.appType);else switch((l.gotop.app||l.gotop.appType).toLowerCase()){case"set":l.gotop.appdata=l.gotop.name+"="+l.gotop.value;break;case"custom":break;default:e[0]=l.gotop.priority,l.gotop.appdata=e.join(",")}m(l.gotop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditOpenchannelAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.noop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.noop.appdata)switch(l.noop.appType?l.noop.appType.toLowerCase():l.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.noop.appdata.split(",");l.noop.key=d[0],l.noop.language=d[1],l.noop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.noop.appdata.split(",");l.noop.accesskeyid=d[0],l.noop.secretaccesskey=d[1],l.noop.lexregion=d[2],l.noop.botname=d[3],l.noop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.noop.appdata.split(",");l.noop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.noop.text=d.slice(1,d.length).join(",");break;case"message":l.noop.text=l.noop.appdata;break;case"set":l.noop.name=l.noop.appdata.split("=")[0],l.noop.value=l.noop.appdata.split("=")[1];break;case"agi":l.noop.project=l.noop.appdata;break;default:var c=l.noop.appdata.split(",");l.noop.value=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outbounddial"===l.noop.appType.toLowerCase()&&(l.noop.prefix=l.noop.phone?l.noop.phone.split("$")[0]:void 0,l.noop.callerId=l.noop.callerID?"CALLERID(all)="+l.noop.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outboundDial"===l.noop.appType&&(l.noop.phone=i.cutdigits?(l.noop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.noop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.noop.options+="U(xcally-mixmonitor-context)"):l.noop.options=l.noop.options.replace("U(xcally-mixmonitor-context)",""));if(l.noop.appType&&"custom"===l.noop.appType);else switch((l.noop.app||l.noop.appType).toLowerCase()){case"set":l.noop.appdata=l.noop.name+"="+l.noop.value;break;case"custom":break;default:e[0]=l.noop.value,l.noop.appdata=e.join(",")}m(l.noop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.queue.queue=300,l.queue.timeout=300;function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.queues,{name:l.queue.queue});t&&(l.queue[_.capitalize("openChannel")+"QueueId"]=t.id);if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.timeout,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.openchannelQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.openchannelQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:801}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.system=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.system.appdata)switch(l.system.appType?l.system.appType.toLowerCase():l.system.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.system.appdata.split(",");l.system.key=d[0],l.system.language=d[1],l.system.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.system.appdata.split(",");l.system.accesskeyid=d[0],l.system.secretaccesskey=d[1],l.system.lexregion=d[2],l.system.botname=d[3],l.system.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.system.appdata.split(",");l.system.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.system.text=d.slice(1,d.length).join(",");break;case"message":l.system.text=l.system.appdata;break;case"set":l.system.name=l.system.appdata.split("=")[0],l.system.value=l.system.appdata.split("=")[1];break;case"agi":l.system.project=l.system.appdata;break;default:var c=l.system.appdata.split(",");l.system.command=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.system.variable=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.system.variable="";function m(e){t.hide(e)}l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outbounddial"===l.system.appType.toLowerCase()&&(l.system.prefix=l.system.phone?l.system.phone.split("$")[0]:void 0,l.system.callerId=l.system.callerID?"CALLERID(all)="+l.system.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outboundDial"===l.system.appType&&(l.system.phone=i.cutdigits?(l.system.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.system.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.system.options+="U(xcally-mixmonitor-context)"):l.system.options=l.system.options.replace("U(xcally-mixmonitor-context)",""));if(l.system.appType&&"custom"===l.system.appType);else switch((l.system.app||l.system.appType).toLowerCase()){case"set":l.system.appdata=l.system.name+"="+l.system.value;break;case"custom":break;default:e[0]=l.system.command,e[1]=l.system.variable,l.system.appdata=e.join(",")}m(l.system)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.system&&(n=_.find(l.variables,{name:l.system.variable})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.system&&(a=_.find(l.variables,{name:l.system.variable}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="OPENCHANNEL.EDIT_"+(a.appType||a.app).toUpperCase(),l.tag=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.tag.appdata)switch(l.tag.appType?l.tag.appType.toLowerCase():l.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.tag.appdata.split(",");l.tag.key=d[0],l.tag.language=d[1],l.tag.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.tag.appdata.split(",");l.tag.accesskeyid=d[0],l.tag.secretaccesskey=d[1],l.tag.lexregion=d[2],l.tag.botname=d[3],l.tag.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.tag.appdata.split(",");l.tag.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.tag.text=d.slice(1,d.length).join(",");break;case"message":l.tag.text=l.tag.appdata;break;case"set":l.tag.name=l.tag.appdata.split("=")[0],l.tag.value=l.tag.appdata.split("=")[1];break;case"agi":l.tag.project=l.tag.appdata;break;default:var c=l.tag.appdata.split(",");l.tag.tag=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outbounddial"===l.tag.appType.toLowerCase()&&(l.tag.prefix=l.tag.phone?l.tag.phone.split("$")[0]:void 0,l.tag.callerId=l.tag.callerID?"CALLERID(all)="+l.tag.callerID:void 0),l.saveOpenchannelAccountApp=function(){l.errors=[];var e=[];l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outboundDial"===l.tag.appType&&(l.tag.phone=i.cutdigits?(l.tag.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.tag.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.tag.options+="U(xcally-mixmonitor-context)"):l.tag.options=l.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.tags,{name:l.tag.tag});t&&(l.tag.TagId=t.id);if(l.tag.appType&&"custom"===l.tag.appType);else switch((l.tag.app||l.tag.appType).toLowerCase()){case"set":l.tag.appdata=l.tag.name+"="+l.tag.value;break;case"custom":break;default:e[0]=l.tag.tag,l.tag.appdata=e.join(",")}m(l.tag)},l.closeDialog=m,o.hasRole("admin")?s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1008}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.tags,{id:e.resourceId})}),n=null;if(l.tag&&(n=_.find(l.tags,{name:l.tag.tag})),n&&!_.some(t,["id",n.id])){var a=_.find(l.tags,{id:n.id});a.canSelect=!1,t.push(a)}l.tags=t})}else{var n=[],a=null;l.tag&&(a=_.find(l.tags,{name:l.tag.tag}));for(var i=0;i<l.tags.length;i++)a&&l.tags[i].id===a.id&&(l.tags[i].canSelect=!1,n.push(l.tags[i]));l.tags=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtags",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","openchannelAccountApp","openchannelAccount","api","Auth","crudPermissions"],angular.module("app.openchannel").controller("EditOpenchannelAccountApptagDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.openchannelAccount={},c.openchannelAccountInteractions={count:0,rows:[]},c.selectedOpenchannelAccountInteractions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,Contact.firstName,Owner.name,closedAt,disposition,note,UserId,ContactId,OpenchannelAccountId,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e,t){c.openchannelAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.openchannelAccount.id,c.getOpenchannelAccountInteractions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the interaction?").htmlContent("<b>"+(e.name||"interaction")+"</b> will be deleted.").ariaLabel("delete interaction").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.openchannelInteractionDownload=function(s,e,t){return l.openchannelInteraction.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="interaction"+s.id,a=new Blob(t,{type:e.type});n="openchannel-interaction"+s.id+".zip";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getOpenchannelAccountInteractions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.openchannelAccount.getInteractions(c.query,p).$promise},c.createOrEditOpenchannelAccountInteraction=function(e,t){s.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/interactions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:c.openchannelAccount,interaction:t,interactions:c.openchannelAccountInteractions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.spyopenchannelInteraction=function(e,n){s.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,onShowing:function(e,t){e.vm.init({id:1,channel:"openchannel",interaction:n,spy:!0},a.$parent.vm.setting)}})},c.exportSelectedOpenchannelAccountInteractions=function(){var e=angular.copy(c.selectedOpenchannelAccountInteractions);return c.selectedOpenchannelAccountInteractions=[],e},c.deleteOpenchannelAccountInteraction=g,c.deleteSelectedOpenchannelAccountInteractions=function(e){var t=s.confirm().title("Are you sure want to delete the selected interactions?").htmlContent("<b>"+c.selectedOpenchannelAccountInteractions.length+" selected</b> will be deleted.").ariaLabel("delete interactions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedOpenchannelAccountInteractions.forEach(function(e){g(e)}),c.selectedOpenchannelAccountInteractions=[]})};var m=!0,u=1;function p(e){c.openchannelAccountInteractions=e||{count:0,rows:[]}}function g(e){l.openchannelInteraction.delete({id:e.id}).$promise.then(function(){_.remove(c.openchannelAccountInteractions.rows,{id:e.id}),c.openchannelAccountInteractions.count-=1,c.openchannelAccountInteractions.rows.length||c.getOpenchannelAccountInteractions(),r.success({title:"Interaction deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETopenchannelAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}a.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getOpenchannelAccountInteractions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.openchannel").controller("OpenchannelAccountInteractionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.openchannelAccount={},c.openchannelAccountOpenchannelCannedAnswers={count:0,rows:[]},c.selectedOpenchannelAccountOpenchannelCannedAnswers=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,key,value,description",limit:10,page:1},c.init=function(e,t){c.openchannelAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.openchannelAccount.id,c.query.OpenchannelAccountId=c.openchannelAccount.id,c.getOpenchannelAccountOpenchannelCannedAnswers()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the openchannelCannedAnswer?").htmlContent("<b>"+(e.name||"openchannelCannedAnswer")+"</b> will be deleted.").ariaLabel("delete openchannelCannedAnswer").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getOpenchannelAccountOpenchannelCannedAnswers=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.openchannelAccount.getAnswers(c.query,p).$promise},c.createOrEditOpenchannelAccountOpenchannelCannedAnswer=function(e,t){s.show({controller:"CreateOrEditOpenchannelCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/openchannelCannedAnswers/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:c.openchannelAccount,openchannelCannedAnswer:t,openchannelCannedAnswers:c.openchannelAccountOpenchannelCannedAnswers.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedOpenchannelAccountOpenchannelCannedAnswers=function(){var e=angular.copy(c.selectedOpenchannelAccountOpenchannelCannedAnswers);return c.selectedOpenchannelAccountOpenchannelCannedAnswers=[],e},c.deleteOpenchannelAccountOpenchannelCannedAnswer=g,c.deleteSelectedOpenchannelAccountOpenchannelCannedAnswers=function(e){var t=s.confirm().title("Are you sure want to delete the selected openchannelCannedAnswers?").htmlContent("<b>"+c.selectedOpenchannelAccountOpenchannelCannedAnswers.length+" selected</b> will be deleted.").ariaLabel("delete openchannelCannedAnswers").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedOpenchannelAccountOpenchannelCannedAnswers.forEach(function(e){g(e)}),c.selectedOpenchannelAccountOpenchannelCannedAnswers=[]})};var m=!0,u=1;function p(e){c.openchannelAccountOpenchannelCannedAnswers=e||{count:0,rows:[]}}function g(e){l.cannedAnswer.delete({id:e.id}).$promise.then(function(){_.remove(c.openchannelAccountOpenchannelCannedAnswers.rows,{id:e.id}),c.openchannelAccountOpenchannelCannedAnswers.count-=1,c.openchannelAccountOpenchannelCannedAnswers.rows.length||c.getOpenchannelAccountOpenchannelCannedAnswers(),r.success({title:"OpenchannelCannedAnswer deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETopenchannelAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getOpenchannelAccountOpenchannelCannedAnswers())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.openchannel").controller("OpenchannelAccountOpenchannelCannedAnswersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="OPENCHANNEL.EDIT_OPENCHANNELCANNEDANSWER",g.openchannelCannedAnswer=angular.copy(l),g.openchannelCannedAnswers=r,g.newOpenchannelCannedAnswer=!1,g.openchannelCannedAnswer||(g.openchannelCannedAnswer={},g.title="OPENCHANNEL.NEW_OPENCHANNELCANNEDANSWER",g.newOpenchannelCannedAnswer=!0),t.params.id&&(g.openchannelCannedAnswer.OpenchannelAccountId=t.params.id),g.addNewOpenchannelCannedAnswer=function(){g.errors=[],d.cannedAnswer.save(g.openchannelCannedAnswer).$promise.then(function(e){g.openchannelCannedAnswers.unshift(e.toJSON()),o.success({title:"OpenchannelCannedAnswer properly created",msg:g.openchannelCannedAnswer.name?g.openchannelCannedAnswer.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveOpenchannelCannedAnswer=function(){g.errors=[],d.cannedAnswer.update({id:g.openchannelCannedAnswer.id},g.openchannelCannedAnswer).$promise.then(function(e){var t=_.find(g.openchannelCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelCannedAnswer properly saved!",msg:g.openchannelCannedAnswer.name?g.openchannelCannedAnswer.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteOpenchannelCannedAnswer=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The openchannelCannedAnswer will be deleted.").ariaLabel("Delete OpenchannelCannedAnswer").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cannedAnswer.delete({id:g.openchannelCannedAnswer.id}).$promise.then(function(){_.remove(g.openchannelCannedAnswers,{id:g.openchannelCannedAnswer.id}),o.success({title:"OpenchannelCannedAnswer properly deleted!",msg:(g.openchannelCannedAnswer.name||"openchannelCannedAnswer")+" has been deleted!"}),v(g.openchannelCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","openchannelCannedAnswers","openchannelCannedAnswer","api","Auth","license","setting","crudPermissions"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.openchannelAccount={},c.openchannelAccountOpenchannelDispositions={count:0,rows:[]},c.selectedOpenchannelAccountOpenchannelDispositions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e,t){c.openchannelAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.openchannelAccount.id,c.query.OpenchannelAccountId=c.openchannelAccount.id,c.getOpenchannelAccountOpenchannelDispositions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the openchannelDisposition?").htmlContent("<b>"+(e.name||"openchannelDisposition")+"</b> will be deleted.").ariaLabel("delete openchannelDisposition").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getOpenchannelAccountOpenchannelDispositions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.openchannelAccount.getDispositions(c.query,p).$promise},c.createOrEditOpenchannelAccountOpenchannelDisposition=function(e,t){s.show({controller:"CreateOrEditOpenchannelDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/openchannelDispositions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:c.openchannelAccount,openchannelDisposition:t,openchannelDispositions:c.openchannelAccountOpenchannelDispositions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedOpenchannelAccountOpenchannelDispositions=function(){var e=angular.copy(c.selectedOpenchannelAccountOpenchannelDispositions);return c.selectedOpenchannelAccountOpenchannelDispositions=[],e},c.deleteOpenchannelAccountOpenchannelDisposition=g,c.deleteSelectedOpenchannelAccountOpenchannelDispositions=function(e){var t=s.confirm().title("Are you sure want to delete the selected openchannelDispositions?").htmlContent("<b>"+c.selectedOpenchannelAccountOpenchannelDispositions.length+" selected</b> will be deleted.").ariaLabel("delete openchannelDispositions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedOpenchannelAccountOpenchannelDispositions.forEach(function(e){g(e)}),c.selectedOpenchannelAccountOpenchannelDispositions=[]})};var m=!0,u=1;function p(e){c.openchannelAccountOpenchannelDispositions=e||{count:0,rows:[]}}function g(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(c.openchannelAccountOpenchannelDispositions.rows,{id:e.id}),c.openchannelAccountOpenchannelDispositions.count-=1,c.openchannelAccountOpenchannelDispositions.rows.length||c.getOpenchannelAccountOpenchannelDispositions(),r.success({title:"OpenchannelDisposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETopenchannelAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getOpenchannelAccountOpenchannelDispositions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.openchannel").controller("OpenchannelAccountOpenchannelDispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="OPENCHANNEL.EDIT_OPENCHANNELDISPOSITION",g.openchannelDisposition=angular.copy(l),g.openchannelDispositions=r,g.newOpenchannelDisposition=!1,g.openchannelDisposition||(g.openchannelDisposition={},g.title="OPENCHANNEL.NEW_OPENCHANNELDISPOSITION",g.newOpenchannelDisposition=!0),t.params.id&&(g.openchannelDisposition.OpenchannelAccountId=t.params.id),g.addNewOpenchannelDisposition=function(){g.errors=[],d.disposition.save(g.openchannelDisposition).$promise.then(function(e){g.openchannelDispositions.unshift(e.toJSON()),o.success({title:"OpenchannelDisposition properly created",msg:g.openchannelDisposition.name?g.openchannelDisposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveOpenchannelDisposition=function(){g.errors=[],d.disposition.update({id:g.openchannelDisposition.id},g.openchannelDisposition).$promise.then(function(e){var t=_.find(g.openchannelDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelDisposition properly saved!",msg:g.openchannelDisposition.name?g.openchannelDisposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteOpenchannelDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The openchannelDisposition will be deleted.").ariaLabel("Delete OpenchannelDisposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.openchannelDisposition.id}).$promise.then(function(){_.remove(g.openchannelDispositions,{id:g.openchannelDisposition.id}),o.success({title:"OpenchannelDisposition properly deleted!",msg:(g.openchannelDisposition.name||"openchannelDisposition")+" has been deleted!"}),v(g.openchannelDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","openchannelDispositions","openchannelDisposition","api","Auth","license","setting","crudPermissions"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.openchannelAccount=c||e.params.openchannelAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.agentadddialog=function(e,t){n.show({controller:"OpenchannelAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelAccount:e,openchannelAccounts:u.openchannelAccounts?u.openchannelAccounts.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoOpenchannelAccounts=function(){e.go("app.openchannel.openchannelAccounts")},u.saveOpenchannelAccount=function(){r.openchannelAccount.update({id:u.openchannelAccount.id},u.openchannelAccount).$promise.then(function(){l.success({title:"OpenchannelAccount updated!",msg:u.openchannelAccount.name?u.openchannelAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.lists,{id:e.resourceId})}),n=null;if(u.openchannelAccount&&(n=_.find(u.lists,{id:Number(u.openchannelAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.lists,{id:n.id});a.canSelect=!1,t.push(a)}u.lists=t})}else{var n=[],a=null;u.openchannelAccount&&(a=_.find(u.lists,{id:Number(u.openchannelAccount.ListId)}));for(var i=0;i<u.lists.length;i++)a&&u.lists[i].id===a.id&&(u.lists[i].canSelect=!1,n.push(u.lists[i]));u.lists=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),r.cmContact.describe({id:u.openchannelAccount.ListId}).$promise.then(function(e){u.fields=[];e=_.values(e.toJSON());for(var t=["id","createdAt","updatedAt","deletedAt","scheduledat","ListId","CompanyId"],n=0;n<e.length;n++)_.includes(t,e[n].columnName)||u.fields.push(e[n])}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FIELDS",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","openchannelAccount","userProfileSection"],angular.module("app.openchannel").controller("OpenchannelAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.openchannelAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="openchannelAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedOpenchannelAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,key,token,replyUri,ListId,waitForTheAssignedAgent,mapKey,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUri,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},b.editstate=function(e,t){n.go("app.openchannel.openchannelAccounts.edit",{id:e.id,openchannelAccount:e,crudPermissions:b.crudPermissions})},b.interactionsgoto=function(e,t){n.go("app.openchannel.openchannelAccounts.edit",{id:e.id,tab:5})},b.agentadddialog=function(e,t){i.show({controller:"OpenchannelAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelAccount:e,openchannelAccounts:b.openchannelAccounts?b.openchannelAccounts.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("openchannelAccount")+"?").htmlContent("<b>"+(e.name||"openchannelAccount")+"</b> will be deleted.").ariaLabel("delete openchannelAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getOpenchannelAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.openchannelAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="OpenchannelAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditOpenchannelAccount=function(e,t){i.show({controller:"CreateOrEditOpenchannelAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelAccount:t,openchannelAccounts:b.openchannelAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteOpenchannelAccount=S,b.exportSelectedOpenchannelAccounts=function(){var e=angular.copy(b.selectedOpenchannelAccounts);return b.selectedOpenchannelAccounts=[],e},b.deleteSelectedOpenchannelAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected openchannelAccounts?").htmlContent("<b>"+b.selectedOpenchannelAccounts.length+" selected</b> will be deleted.").ariaLabel("delete OpenchannelAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedOpenchannelAccounts.forEach(function(e){S(e)}),b.selectedOpenchannelAccounts=[]})},b.deselectOpenchannelAccounts=function(){b.selectedOpenchannelAccounts=[]},b.selectAllOpenchannelAccounts=function(){b.selectedOpenchannelAccounts=b.openchannelAccounts.rows},g.hasRole("admin")?m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.lists,{id:e.resourceId})}),n=null;if(b.openchannelAccount&&(n=_.find(b.lists,{id:Number(b.openchannelAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.lists,{id:n.id});a.canSelect=!1,t.push(a)}b.lists=t})}else{var n=[],a=null;b.openchannelAccount&&(a=_.find(b.lists,{id:Number(b.openchannelAccount.ListId)}));for(var i=0;i<b.lists.length;i++)a&&b.lists[i].id===a.id&&(b.lists[i].canSelect=!1,n.push(b.lists[i]));b.lists=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.openchannelAccounts=e||{count:0,rows:[]}}function S(e){m.openchannelAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.openchannelAccounts.rows,{id:e.id}),b.openchannelAccounts.count-=1,b.openchannelAccounts.rows.length||b.getOpenchannelAccounts(),p.success({title:_.startCase("OpenchannelAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEopenchannelAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEopenchannelAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getOpenchannelAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","openchannelAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.openchannel").controller("OpenchannelAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="OPENCHANNEL.EDIT_OPENCHANNELQUEUE",g.openchannelQueue=angular.copy(l),g.openchannelQueues=r,g.newOpenchannelQueue=!1,g.openchannelQueue||(g.openchannelQueue={strategy:"beepall",timeout:10},g.title="OPENCHANNEL.NEW_OPENCHANNELQUEUE",g.newOpenchannelQueue=!0),g.addNewOpenchannelQueue=function(){g.errors=[],d.openchannelQueue.save(g.openchannelQueue).$promise.then(function(e){g.openchannelQueues.unshift(e.toJSON()),o.success({title:"OpenchannelQueue properly created",msg:g.openchannelQueue.name?g.openchannelQueue.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveOpenchannelQueue=function(){g.errors=[],d.openchannelQueue.update({id:g.openchannelQueue.id},g.openchannelQueue).$promise.then(function(e){var t=_.find(g.openchannelQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"OpenchannelQueue properly saved!",msg:g.openchannelQueue.name?g.openchannelQueue.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteOpenchannelQueue=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The openchannelQueue will be deleted.").ariaLabel("Delete OpenchannelQueue").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.openchannelQueue.delete({id:g.openchannelQueue.id}).$promise.then(function(){_.remove(g.openchannelQueues,{id:g.openchannelQueue.id}),o.success({title:"OpenchannelQueue properly deleted!",msg:(g.openchannelQueue.name||"openchannelQueue")+" has been deleted!"}),v(g.openchannelQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","openchannelQueues","openchannelQueue","api","Auth","license","setting","crudPermissions"],angular.module("app.openchannel").controller("CreateOrEditOpenchannelQueueDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.openchannelQueue.getAgents({id:c.openchannelQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserOpenchannelQueue?"penalty "+e.UserOpenchannelQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.openchannelQueue=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.openchannelQueue.removeAgents({id:c.openchannelQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.openchannelQueue.addAgents({id:c.openchannelQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("OPENCHANNEL.ALL_AGENTS"),labelSelected:r.instant("OPENCHANNEL.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","openchannelQueue","openchannelQueues","realtime","$translate","Auth","crudPermissions"],angular.module("app.openchannel").controller("OpenchannelQueueagentaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r){var l=this;function d(){return a(function(n,t){return a(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.openchannelQueue.getTeams({id:l.openchannelQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.openchannelQueue=t,l.crudPermissions=r,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("OPENCHANNEL.ALL_TEAMS"),labelSelected:n.instant("OPENCHANNEL.SELECTED_TEAMS"),transferCallback:function(e,t){var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.openchannelQueue.removeTeams({id:l.openchannelQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.openchannelQueue.addTeams({id:l.openchannelQueue.id,teams:_.map(n,function(e){return _.pick(e,["id"])})}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),i.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","openchannelQueue","$translate","Auth","crudPermissions"],angular.module("app.openchannel").controller("OpenchannelQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.openchannelQueue=c||e.params.openchannelQueue||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.teamadddialog=function(e,t){n.show({controller:"OpenchannelQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/teamadd/teamadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelQueue:e,openchannelQueues:u.openchannelQueues?u.openchannelQueues.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){n.show({controller:"OpenchannelQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelQueue:e,openchannelQueues:u.openchannelQueues?u.openchannelQueues.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoOpenchannelQueues=function(){e.go("app.openchannel.openchannelQueues")},u.saveOpenchannelQueue=function(){r.openchannelQueue.update({id:u.openchannelQueue.id},u.openchannelQueue).$promise.then(function(){l.success({title:"OpenchannelQueue updated!",msg:u.openchannelQueue.name?u.openchannelQueue.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","openchannelQueue","userProfileSection"],angular.module("app.openchannel").controller("OpenchannelQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.openchannelQueues=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="openchannelQueues",b.listOrder="",b.listOrderAsc=null,b.selectedOpenchannelQueues=[],b.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"openchannel",limit:10,page:1},b.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.openchannel.openchannelQueues.edit",{id:e.id,openchannelQueue:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"OpenchannelQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelQueue:e,openchannelQueues:b.openchannelQueues?b.openchannelQueues.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"OpenchannelQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{openchannelQueue:e,openchannelQueues:b.openchannelQueues?b.openchannelQueues.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("openchannelQueue")+"?").htmlContent("<b>"+(e.name||"openchannelQueue")+"</b> will be deleted.").ariaLabel("delete openchannelQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:810}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.openchannel.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.openchannel.realtime.queues",{})}},b.success=y,b.getOpenchannelQueues=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.openchannelQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="OpenchannelQueues",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditOpenchannelQueue=function(e,t){i.show({controller:"CreateOrEditOpenchannelQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelQueue:t,openchannelQueues:b.openchannelQueues.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteOpenchannelQueue=S,b.exportSelectedOpenchannelQueues=function(){var e=angular.copy(b.selectedOpenchannelQueues);return b.selectedOpenchannelQueues=[],e},b.deleteSelectedOpenchannelQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected openchannelQueues?").htmlContent("<b>"+b.selectedOpenchannelQueues.length+" selected</b> will be deleted.").ariaLabel("delete OpenchannelQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedOpenchannelQueues.forEach(function(e){S(e)}),b.selectedOpenchannelQueues=[]})},b.deselectOpenchannelQueues=function(){b.selectedOpenchannelQueues=[]},b.selectAllOpenchannelQueues=function(){b.selectedOpenchannelQueues=b.openchannelQueues.rows};var A=!0,E=1;function y(e){b.openchannelQueues=e||{count:0,rows:[]}}function S(e){m.openchannelQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.openchannelQueues.rows,{id:e.id}),b.openchannelQueues.count-=1,b.openchannelQueues.rows.length||b.getOpenchannelQueues(),p.success({title:_.startCase("OpenchannelQueue")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEopenchannelQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEopenchannelQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getOpenchannelQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","openchannelQueues","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.openchannel").controller("OpenchannelQueuesController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"openchannel",direction:"inbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsOpenchannelRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.openchannelQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].OpenchannelQueueId].paused++,g.queues[e[t].rows[n].OpenchannelQueueId].loggedInDb++,g.queues[e[t].rows[n].OpenchannelQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].OpenchannelQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"openchannel",type:"inbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.openchannelQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="OpenchannelQueues",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditOpenchannelQueue=function(e,t){a.show({controller:"CreateOrEditOpenchannelQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelQueue:t,openchannelQueues:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.agentAdd=function(e,t){a.show({controller:"OpenchannelQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/openchannel/views/openchannelQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{openchannelQueue:t,openchannelQueues:g.queues?g.queues.rows:[],realtime:!1,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.openchannelQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&_.merge(g.queues[e.id],_.pick(e,v))},g.onSaveMember=function(e){g.queues[e.OpenchannelQueueId]&&g.queues[e.OpenchannelQueueId].loggedInDb++},g.onRemoveMember=function(e){g.queues[e.OpenchannelQueueId]&&g.queues[e.OpenchannelQueueId].loggedInDb--},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.OpenchannelQueueId]&&(g.queues[e.OpenchannelQueueId].loggedInDb+=1,g.queues[e.OpenchannelQueueId].agents[e.UserId]=e.OpenchannelQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.OpenchannelQueueId]&&0<g.queues[e.OpenchannelQueueId].loggedInDb&&(g.queues[e.OpenchannelQueueId].loggedInDb-=1,delete g.queues[e.OpenchannelQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.on("openchannel_queue:save",g.onSave),d.on("userOpenchannelQueue:save",g.onSaveMember),d.on("userOpenchannelQueue:remove",g.onRemoveMember),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("openchannel_queue:save"),d.removeAllListeners("userOpenchannelQueue:remove"),d.removeAllListeners("userOpenchannelQueue:save"),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.openchannel").controller("QueuesOpenchannelRealtimeController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){switch(t.disconnect(),t.connect(),this.selectedTab=0,n.current.name){case"app.openchannel.realtime.agents":this.selectedTab=0;break;case"app.openchannel.realtime.queues":this.selectedTab=1;break;default:this.selectedTab=0,n.go("app.openchannel.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.openchannel.realtime.agents");break;case 1:n.go("app.openchannel.realtime.queues");break;default:n.go("app.openchannel.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.openchannel").controller("OpenchannelRealtimeController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;o.currentUser=s.getCurrentUser(),o.plugin={},o.getTrustedURL=function(){return n.trustAsResourceUrl(o.plugin.adminUrl)},a.plugin.get({id:e.params.id}).$promise.then(function(e){if(e)return o.plugin=e,a.plugin.get({id:o.plugin.id}).$promise}).catch(function(e){o.plugin=void 0})}e.$inject=["$state","$scope","$sce","api","socket","Auth"],angular.module("app.plugins.plugin").controller("PluginController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SETTINGS.EDIT_CUSTOMIZATION",g.customization=angular.copy(l),g.customizations=r,g.newCustomization=!1,g.customization||(g.customization={},g.title="SETTINGS.NEW_CUSTOMIZATION",g.newCustomization=!0),g.addNewCustomization=function(){g.errors=[],d.setting.save(g.customization).$promise.then(function(e){g.customizations.unshift(e.toJSON()),o.success({title:"Customization properly created",msg:g.customization.name?g.customization.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.setting.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.setting.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveCustomization=function(){g.errors=[],d.setting.update({id:g.customization.id},g.customization).$promise.then(function(e){var t=_.find(g.customizations,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Customization properly saved!",msg:g.customization.name?g.customization.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.setting.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.setting.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteCustomization=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The customization will be deleted.").ariaLabel("Delete Customization").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.setting.delete({id:g.customization.id}).$promise.then(function(){_.remove(g.customizations,{id:g.customization.id}),o.success({title:"Customization properly deleted!",msg:(g.customization.name||"customization")+" has been deleted!"}),v(g.customization)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.setting.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.setting.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","customizations","customization","api","Auth","license","setting","crudPermissions"],angular.module("app.settings").controller("CreateOrEditCustomizationDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;s.currentUser=i.getCurrentUser(),s.license=a,s.customizations=e,s.customization={},s.customizations&&s.customizations.rows&&s.customizations.rows.length&&(s.customization=s.customizations.rows[0]),s.saveCustomization=function(){s.customization.id?t.setting.update({id:s.customization.id},s.customization).$promise.then(function(){n.success({title:"Customization updated!",msg:s.customization.name?s.customization.name+" has been updated!":""})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsetting",msg:e.data?JSON.stringify(e.data):e.toString()})}):t.setting.save(s.customization).$promise.then(function(e){_.merge(s.customization,e),n.success({title:"Customization updated!",msg:s.customization.name?s.customization.name+" has been updated!":""})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsetting",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["customizations","api","toasty","license","Auth"],angular.module("app.settings").controller("CustomizationsController",e)}(),function(){"use strict";function e(e,a){var i=this;i.customization={},i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.customization.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.customization.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e){i.customization=angular.copy(e),i.ngFlowOptions.target="/api/settings/1/logo".replace(":id",i.customization.id),i.customization.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.settings").controller("CustomizationlogoController",e)}(),function(){"use strict";function e(e,a){var i=this;i.customization={},i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.customization.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.customization.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e){i.customization=angular.copy(e),i.ngFlowOptions.target="/api/settings/1/logo_login".replace(":id",i.customization.id),i.customization.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.settings").controller("CustomizationlogologinController",e)}(),function(){"use strict";function e(e,a){var i=this;i.customization={},i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.customization.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.customization.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e){i.customization=angular.copy(e),i.ngFlowOptions.target="/api/settings/1/preferred".replace(":id",i.customization.id),i.customization.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.settings").controller("CustomizationpreferredController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SETTINGS.EDIT_GENERAL",g.general=angular.copy(l),g.generals=r,g.newGeneral=!1,g.general||(g.general={min_internal:1e3,chatTimeout:30,phoneBarAutoUpdater:!0,phoneBarAutoUpdaterUrl:"https://www.xcally.com/bar/phonebar/autoupdater.xml",splitSizeCsv:5e3,splitSizePdf:1e3,splitSizeXlsx:5e3,messagesAlignment:"alternate",phoneBarRememberMeEnabled:!0,allowedLoginAttempts:5,blockDuration:10},g.title="SETTINGS.NEW_GENERAL",g.newGeneral=!0),g.addNewGeneral=function(){g.errors=[],d.setting.save(g.general).$promise.then(function(e){g.generals.unshift(e.toJSON()),o.success({title:"General properly created",msg:g.general.name?g.general.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.setting.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.setting.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveGeneral=function(){g.errors=[],d.setting.update({id:g.general.id},g.general).$promise.then(function(e){var t=_.find(g.generals,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"General properly saved!",msg:g.general.name?g.general.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.setting.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.setting.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteGeneral=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The general will be deleted.").ariaLabel("Delete General").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.setting.delete({id:g.general.id}).$promise.then(function(){_.remove(g.generals,{id:g.general.id}),o.success({title:"General properly deleted!",msg:(g.general.name||"general")+" has been deleted!"}),v(g.general)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.setting.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.setting.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","generals","general","api","Auth","license","setting","crudPermissions"],angular.module("app.settings").controller("CreateOrEditGeneralDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;s.currentUser=i.getCurrentUser(),s.license=a,s.generals=e,s.general={},s.generals&&s.generals.rows&&s.generals.rows.length&&(s.general=s.generals.rows[0]),s.saveGeneral=function(){s.general.id?t.setting.update({id:s.general.id},s.general).$promise.then(function(){n.success({title:"General updated!",msg:s.general.name?s.general.name+" has been updated!":""})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsetting",msg:e.data?JSON.stringify(e.data):e.toString()})}):t.setting.save(s.general).$promise.then(function(e){_.merge(s.general,e),n.success({title:"General updated!",msg:s.general.name?s.general.name+" has been updated!":""})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsetting",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["generals","api","toasty","license","Auth"],angular.module("app.settings").controller("GeneralsController",e)}(),function(){"use strict";function e(t,n,a,i,e,s){var o=this;o.license=i||{},o.agents=0,o.users=0,o.telephones=0,o.channels=[{name:"voice",icon:"icon-phone"},{name:"chat",icon:"icon-hangouts"},{name:"mail",icon:"icon-email"},{name:"messaging",icon:"icon-message-text"},{name:"fax",icon:"icon-deskphone"},{name:"openchannel",icon:"icon-google-earth"}],o.modules=[{name:"cm",icon:"icon-account-circle"},{name:"dialer",icon:"icon-crosshairs"},{name:"jscripty",icon:"icon-console"}],o.addons=[{name:"webrtc",icon:"icon-server-plus"},{name:"jaws",icon:"icon-fish"},{name:"custom",icon:"icon-table-edit"},{name:"screenrecording",icon:"icon-video"}],o.sessions=[{name:"callysquare",icon:"icon-sitemap",restart:!0,label:"channels",enabled:"voice"},{name:"virtual",icon:"icon-dots-horizontal",restart:!1,label:"sessions",enabled:"chat"}],o.others=[{name:"update",icon:"icon-cloud-download"}],o.requestLicense=function(e){n.show({controller:"RequestLicenseDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/license/request/dialog.html",parent:angular.element(t.body),targetEvent:e,clickOutsideToClose:!0,locals:{license:i,channels:o.channels,modules:o.modules,addons:o.addons,sessions:o.sessions,others:o.others}})},o.updateLicense=function(e){n.show({controller:"UpdateLicenseDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/license/update/dialog.html",parent:angular.element(t.body),targetEvent:e,clickOutsideToClose:!0,locals:{license:i}})},o.gotoProcess=function(e){a.go("app.settings.system",{tab:1})},s.user.get({fields:"id",role:"agent",online:!0}).$promise.then(function(e){return o.agents=e&&e.count?e.count:0,s.user.get({fields:"id",role:"user,admin"}).$promise}).then(function(e){return o.users=e&&e.count?e.count:0,s.user.get({fields:"id",role:"telephone"}).$promise}).then(function(e){o.telephones=e&&e.count?e.count:0}).catch(function(e){console.log(e)})}e.$inject=["$document","$mdDialog","$state","license","toasty","api"],angular.module("app.settings.license").controller("LicenseController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c){var m=this;function u(){e.hide()}m.errors=[],m.user=d.getCurrentUser(),m.license=angular.copy(n),m.channels=a,m.modules=i,m.addons=s,m.sessions=o,m.others=r,m.license.name=m.user.fullname,m.license.email=m.user.email,m.sendRequest=function(){for(var e in m.errors=[],m.table="||FIELD||OLD||NEW||\n",m.license)m.license.hasOwnProperty(e)&&!_.includes(["$promise","$resolved"],e)&&(n[e]===m.license[e]?m.table+="|"+e+"|"+(void 0!==n[e]?n[e]:"")+"|"+m.license[e]+"|\n":m.table+="|"+e+"|{color:red}"+(void 0!==n[e]?n[e]:"")+"{color}|*"+m.license[e]+"*|\n");l.jira.save({key:"MOTLICENSE",summary:"Motion License Request",description:m.table,issuetype:"License Request"}).$promise.then(function(e){t.success({title:"Request sent!",msg:c.instant("SETTINGS.LICENSE_REQUEST_SENT"),timeout:15e3}),u()}).catch(function(e){console.error(e),m.errors=[{message:c.instant("SETTINGS.JIRA_ERROR_MESSAGE"),type:"api.jira"}]})},m.closeDialog=u}e.$inject=["$mdDialog","toasty","license","channels","modules","addons","sessions","others","api","Auth","$translate"],angular.module("app.settings.license").controller("RequestLicenseDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;s.errors=[],s.license=angular.copy(n),s.licenseKey,s.updateLicense=function(){return a.license.update({id:1,key:s.licenseKey}).$promise.then(function(e){e&&(e.demo?t.error({title:"License update failed!",msg:"Invalid license key"}):t.success({title:"License properly updated!",msg:"The license has been updated!"}))}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UPDATElicense",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","toasty","license","api","$translate"],angular.module("app.settings.license").controller("UpdateLicenseDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u){var p=this;function g(e){a.hide(e)}p.currentUser=c.getCurrentUser(),p.errors=[],p.setting=u,p.license=m,p.hasModulePermissions={},p.passwordPattern=p.setting&&p.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",p.title="SETTINGS.EDIT_NETWORK",p.network=angular.copy(l),p.networks=r,p.newNetwork=!1,p.network||(p.network={type:"localnet"},p.title="SETTINGS.NEW_NETWORK",p.newNetwork=!0),p.addNewNetwork=function(){p.errors=[],d.network.save(p.network).$promise.then(function(e){p.networks.unshift(e.toJSON()),o.success({title:"Network properly created",msg:p.network.name?p.network.name+" has been created!":""}),g(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.network.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.network.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},p.saveNetwork=function(){p.errors=[],d.network.update({id:p.network.id},p.network).$promise.then(function(e){var t=_.find(p.networks,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Network properly saved!",msg:p.network.name?p.network.name+" has been saved!":""}),g(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.network.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.network.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},p.deleteNetwork=function(e){p.errors=[];var t=a.confirm().title("Are you sure?").content("The network will be deleted.").ariaLabel("Delete Network").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.network.delete({id:p.network.id}).$promise.then(function(){_.remove(p.networks,{id:p.network.id}),o.success({title:"Network properly deleted!",msg:(p.network.name||"network")+" has been deleted!"}),g(p.network)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.errors=e.data.errors||[{message:e.toString(),type:"api.network.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.network.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},p.getDateFromString=function(e){return null===e?void 0:new Date(e)},p.closeDialog=g}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","networks","network","api","Auth","license","setting"],angular.module("app.settings").controller("CreateOrEditNetworkDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v){var h=this;h.license=p,h.setting=g,h.currentUser=u.getCurrentUser(),h.networks=l||{count:0,rows:[]},h.table="networks",h.listOrder="",h.listOrderAsc=null,h.selectedNetworks=[],h.query={fields:"createdAt,updatedAt,id,type,value",sort:"-updatedAt",limit:10,page:1},h.arraytype=_.keyBy([{option:"LocalNET",value:"'localnet'"},{option:"ExternIP",value:"'externip'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),h.editdialog=function(e,t){i.show({controller:"CreateOrEditNetworkDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/networks/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{network:e,networks:h.networks.rows,license:h.license,setting:null,crudPermissions:h.crudPermissions}})},h.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("network")+"?").htmlContent("<b>"+(e.name||"network")+"</b> will be deleted.").ariaLabel("delete network").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){E(e)},function(){console.log("CANCEL")})},h.success=A,h.getNetworks=function(){h.query.offset=(h.query.page-1)*h.query.limit,u.hasRole("admin")?h.promise=d.network.get(h.query,A).$promise:(h.query.id=h.userProfile.id,h.query.section="Networks",h.promise=d.userProfile.getResources(h.query,A).$promise)},h.createOrEditNetwork=function(e,t){i.show({controller:"CreateOrEditNetworkDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/networks/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{network:t,networks:h.networks.rows,license:h.license,setting:h.setting,crudPermissions:h.crudPermissions}})},h.deleteNetwork=E,h.exportSelectedNetworks=function(){var e=angular.copy(h.selectedNetworks);return h.selectedNetworks=[],e},h.deleteSelectedNetworks=function(e){var t=i.confirm().title("Are you sure want to delete the selected networks?").htmlContent("<b>"+h.selectedNetworks.length+" selected</b> will be deleted.").ariaLabel("delete Networks").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){h.selectedNetworks.forEach(function(e){E(e)}),h.selectedNetworks=[]})},h.deselectNetworks=function(){h.selectedNetworks=[]},h.selectAllNetworks=function(){h.selectedNetworks=h.networks.rows};var f=!0,b=1;function A(e){h.networks=e||{count:0,rows:[]}}function E(e){d.network.delete({id:e.id}).$promise.then(function(){_.remove(h.networks.rows,{id:e.id}),h.networks.count-=1,h.networks.rows.length||h.getNetworks(),m.success({title:_.startCase("Network")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){h.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEnetwork"}];for(var t=0;t<e.data.errors.length;t++)m.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEnetwork",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){f?o(function(){f=!1}):(t||(b=h.query.page),e!==t&&(h.query.page=1),e||(h.query.page=b),h.getNetworks())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","networks","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.settings").controller("NetworksController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SETTINGS.EDIT_SMTP",g.smtp=angular.copy(l),g.smtps=r,g.newSmtp=!1,g.smtp||(g.smtp={service:!0},g.title="SETTINGS.NEW_SMTP",g.newSmtp=!0),g.addNewSmtp=function(){g.errors=[],d.mailAccount.save(g.smtp).$promise.then(function(e){g.smtps.unshift(e.toJSON()),o.success({title:"Smtp properly created",msg:g.smtp.name?g.smtp.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSmtp=function(){g.errors=[],d.mailAccount.update({id:g.smtp.id},g.smtp).$promise.then(function(e){var t=_.find(g.smtps,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Smtp properly saved!",msg:g.smtp.name?g.smtp.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSmtp=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The smtp will be deleted.").ariaLabel("Delete Smtp").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.mailAccount.delete({id:g.smtp.id}).$promise.then(function(){_.remove(g.smtps,{id:g.smtp.id}),o.success({title:"Smtp properly deleted!",msg:(g.smtp.name||"smtp")+" has been deleted!"}),v(g.smtp)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.mailAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.mailAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","smtps","smtp","api","Auth","license","setting","crudPermissions"],angular.module("app.settings").controller("CreateOrEditSmtpDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;s.currentUser=i.getCurrentUser(),s.license=a,s.smtps=e,s.smtp={},s.smtps&&s.smtps.rows&&s.smtps.rows.length?s.smtp=s.smtps.rows[0]:s.smtp={service:!0,Smtp:{service:null}},s.saveSmtp=function(){s.smtp.id?t.mailAccount.update({id:s.smtp.id},s.smtp).$promise.then(function(){n.success({title:"Smtp updated!",msg:s.smtp.name?s.smtp.name+" has been updated!":""})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data):e.toString()})}):t.mailAccount.save(s.smtp).$promise.then(function(e){_.merge(s.smtp,e),n.success({title:"Smtp updated!",msg:s.smtp.name?s.smtp.name+" has been updated!":""})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},s.verifySmtp=function(){s.smtp.id&&t.mailAccount.verifySmtp({id:s.smtp.id}).$promise.then(function(){n.success({title:"Smtp verified!",msg:s.smtp.name?s.smtp.name+" has been verified!":""})}).catch(function(e){n.error({title:"Smtp not verified! Remember to save before to verify!",msg:e.data?JSON.stringify(e.data):e.toString(),timeout:1e4})})}}e.$inject=["smtps","api","toasty","license","Auth"],angular.module("app.settings").controller("SmtpController",e)}(),function(){"use strict";function e(e,i,s,t,n,a,o,r){var l,d=this;d.system=n||{},d.processes=a?a.rows:[],d.processLimit=7,d.selectedTab=t.params.tab||0,d.getInfo=function(){return r.system.get().$promise.then(function(e){_.merge(d.system,e)}).catch(d.cancelInterval)},d.getProcesses=function(){return r.pm2.get().$promise.then(function(e){_.merge(d.processes,e?e.rows:[])}).catch(d.cancelInterval)},d.cancelInterval=function(e){i.cancel(l)},d.updateProcess=function(e,t,n){var a=s.confirm().title("Would you like to change the status of the process #"+t+"?").textContent("The status will be changed to: "+n.toUpperCase()).ariaLabel("Lucky day").targetEvent(e).ok("Ok").cancel("Cancel");s.show(a).then(function(){return r.pm2.update({id:t,status:n})}).then(function(){i(d.getProcesses,1e3,1)}).then(function(){o.success({title:"Process updated!",msg:"Status properly changed to: "+n})})},l=i(d.getInfo,5e3),e.$on("$destroy",function(){d.cancelInterval()})}e.$inject=["$scope","$interval","$mdDialog","$state","system","processes","toasty","api"],angular.module("app.settings.system").controller("SystemController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;s.title="SETTINGS.UPDATE",s.progress=0,s.updating=!0,s.output="Waiting...",s.success=!0,s.interval=t(function(){s.progress<90&&(s.progress+=1)},1e3),s.closeDialog=function(){e.hide()},s.reload=function(){n.location.reload()},s.stopInterval=function(){angular.isDefined(s.interval)&&(t.cancel(s.interval),s.interval=void 0);s.progress=100,s.updating=!1},i.version.fetch().$promise.then(function(e){return s.output=e.output+"...",i.version.reset().$promise}).then(function(e){return s.output=e.output+"...",i.version.pull().$promise}).then(function(e){return s.output=e.output+"...",i.version.migrations().$promise}).then(function(e){return s.output=e.output+"...",i.version.restart().$promise}).then(function(e){s.output="Waiting to restart motion...",a(function(){s.stopInterval()},3e4)}).catch(function(e){s.success=!1,s.stopInterval(),s.output=JSON.stringify(e)})}e.$inject=["$mdDialog","$interval","$window","$timeout","api"],angular.module("app.settings").controller("UpdateDialogController",e)}(),function(){"use strict";function e(n,e,a,t,i){this.version=t||{},this.updateConfirm=function(e){var t=n.confirm().title("Would you like to update your system?").htmlContent('The system request time for the update should be below 1 minute.<br><br>Do you agree the terms of this <a href="http://www.xcally.com/support/eula-xcally-license-en.pdf" target="_blank">End User License Agreement<a>?').ariaLabel("").targetEvent(e).clickOutsideToClose(!0).parent(angular.element(a.body)).ok("I agree").cancel("Disagree");n.show(t).then(function(){n.show({controller:"UpdateDialogController",controllerAs:"vm",templateUrl:"app/main/apps/settings/views/updates/update/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!1})})}}e.$inject=["$mdDialog","$interval","$document","version","toasty"],angular.module("app.settings").controller("UpdatesController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"sms",direction:"inbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsSmsRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.smsQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].SmsQueueId].paused++,g.queues[e[t].rows[n].SmsQueueId].loggedInDb++,g.queues[e[t].rows[n].SmsQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].SmsQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"sms",type:"inbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.smsQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="SmsQueues",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditSmsQueue=function(e,t){a.show({controller:"CreateOrEditSmsQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsQueue:t,smsQueues:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.agentAdd=function(e,t){a.show({controller:"SmsQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsQueue:t,smsQueues:g.queues?g.queues.rows:[],realtime:!1,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.smsQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&_.merge(g.queues[e.id],_.pick(e,v))},g.onSaveMember=function(e){g.queues[e.SmsQueueId]&&g.queues[e.SmsQueueId].loggedInDb++},g.onRemoveMember=function(e){g.queues[e.SmsQueueId]&&g.queues[e.SmsQueueId].loggedInDb--},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.SmsQueueId]&&(g.queues[e.SmsQueueId].loggedInDb+=1,g.queues[e.SmsQueueId].agents[e.UserId]=e.SmsQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.SmsQueueId]&&0<g.queues[e.SmsQueueId].loggedInDb&&(g.queues[e.SmsQueueId].loggedInDb-=1,delete g.queues[e.SmsQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.on("sms_queue:save",g.onSave),d.on("userSmsQueue:save",g.onSaveMember),d.on("userSmsQueue:remove",g.onRemoveMember),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("sms_queue:save"),d.removeAllListeners("userSmsQueue:remove"),d.removeAllListeners("userSmsQueue:save"),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.sms").controller("QueuesSmsRealtimeController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){switch(t.disconnect(),t.connect(),this.selectedTab=0,n.current.name){case"app.sms.realtime.agents":this.selectedTab=0;break;case"app.sms.realtime.queues":this.selectedTab=1;break;default:this.selectedTab=0,n.go("app.sms.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.sms.realtime.agents");break;case 1:n.go("app.sms.realtime.queues");break;default:n.go("app.sms.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.sms").controller("SmsRealtimeController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SMS.EDIT_SMSACCOUNT",g.smsAccount=angular.copy(l),g.smsAccounts=r,g.newSmsAccount=!1,g.smsAccount||(g.smsAccount={remote:n.protocol()+"://"+n.host()+(n.port()?":"+n.port():""),type:"twilio",waitForTheAssignedAgent:10,notificationSound:!0,queueTransferTimeout:300,agentTransferTimeout:300},g.title="SMS.NEW_SMSACCOUNT",g.newSmsAccount=!0),t.params.id&&(g.smsAccount.SmsAccountId=t.params.id),g.addNewSmsAccount=function(){g.errors=[],d.smsAccount.save(g.smsAccount).$promise.then(function(e){g.smsAccounts.unshift(e.toJSON()),o.success({title:"SmsAccount properly created",msg:g.smsAccount.name?g.smsAccount.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.smsAccount.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSmsAccount=function(){g.errors=[],d.smsAccount.update({id:g.smsAccount.id},g.smsAccount).$promise.then(function(e){var t=_.find(g.smsAccounts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsAccount properly saved!",msg:g.smsAccount.name?g.smsAccount.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.smsAccount.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsAccount.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSmsAccount=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The smsAccount will be deleted.").ariaLabel("Delete SmsAccount").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.smsAccount.delete({id:g.smsAccount.id}).$promise.then(function(){_.remove(g.smsAccounts,{id:g.smsAccount.id}),o.success({title:"SmsAccount properly deleted!",msg:(g.smsAccount.name||"smsAccount")+" has been deleted!"}),v(g.smsAccount)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.smsAccount.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsAccount.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.lists=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.lists,{id:e.resourceId})}),n=null;if(g.smsAccount&&(n=_.find(g.lists,{id:Number(g.smsAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.lists,{id:n.id});a.canSelect=!1,t.push(a)}g.lists=t})}else{var n=[],a=null;g.smsAccount&&(a=_.find(g.lists,{id:Number(g.smsAccount.ListId)}));for(var i=0;i<g.lists.length;i++)a&&g.lists[i].id===a.id&&(g.lists[i].canSelect=!1,n.push(g.lists[i]));g.lists=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","smsAccounts","smsAccount","api","Auth","license","setting","crudPermissions"],angular.module("app.sms").controller("CreateOrEditSmsAccountDialogController",e)}(),function(){"use strict";function e(o,i,a,s,e){var r=this;function t(e,t){if(r.smsAccountApps.rows.length){var n=r.smsAccountApps.rows[t]?r.smsAccountApps.rows[t]:r.smsAccountApps.rows[0];i.show({controller:"EditSmsAccountApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccountApp:n,smsAccount:r.smsAccount,crudPermissions:r.crudPermissions}}).then(function(e){e&&(e.id?r.smsAccountApps.rows[t]=e:r.smsAccountApps.rows.splice(t,0,e),l())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function l(){for(var e=1,t=[],n=0;n<r.smsAccountApps.rows.length;n++,0){var a=r.smsAccountApps.rows[n],i=[],s=[];a.intervals="*,*,*,*"!==a.interval?[a.interval]:a.IntervalId?_.map(_.filter(r.intervals.rows,{IntervalId:a.IntervalId}),"interval"):[],a.context=r.smsAccount.context,a.exten=r.smsAccount.exten,a.type&&(a.type=a.type.toLowerCase()),a.priority=i.length?_.last(i).priority+1:e,e=(s.length?_.last(s).priority:a.priority)+1,t=_.concat(t,i,[a],s)}o.smsAccount.addApplications({id:r.smsAccount.id},_.sortBy(t,"priority")).$promise.then(function(e){r.smsAccountApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){r.smsAccountApps=e||{count:0,rows:[]}}r.currentUser=e.getCurrentUser(),r.smsAccount={},r.smsAccountApps={count:0,rows:[]},r.selectedSmsAccountApps=[],r.crudPermissions,r.query={sort:"priority"},r.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",types:["always","custom","list"],fields:[],isApp:!1},{app:"noop",appType:"noop",type:"noop",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,fields:[{title:"Value",name:"value",type:"text",param:0}]},{app:"system",appType:"system",type:"system",icon:"icon-apps",interval:"*,*,*,*",required:!0,isApp:!0,extraApi:[{name:"variables",field:{name:"variable",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1012}}],fields:[{title:"Command",name:"command",type:"text",required:!0,param:0},{title:"Variable",name:"variable",type:"apiselect",values:"variables",value:"variable.name",option:"variable.name",defaultValues:[{value:"''",option:"None"}],defaultValue:"''",param:1}]},{app:"gotop",appType:"gotop",type:"goto",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Priority",name:"priority",type:"number",required:!0,min:0,param:0}]},{app:"gotoif",appType:"gotoif",type:"gotoif",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Condition",name:"condition",type:"text",required:!0,param:0},{title:"truepriority",name:"truepriority",type:"number",min:1,required:!0,param:1},{title:"falsepriority",name:"falsepriority",type:"number",min:1,required:!0,param:2}]},{app:"queue",appType:"queue",foreignKey:"SmsQueueId",type:"queue",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"queues",field:{name:"queue",key:"name"},route:"smsQueue",filters:{fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:701}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",defaultValue:300,required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:300,param:1}]},{app:"agent",appType:"agent",type:"agent",foreignKey:"UserId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"agents",field:{name:"agent",key:"name"},route:"user",filters:{fields:"id,name",sort:"name",nolimit:!0,role:"agent"},permissions:{section:202}}],fields:[{title:"Agent",name:"agent",type:"apiselect",values:"agents",value:"agent.name",option:"agent.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",max:2147483,min:0,required:!0,defaultValue:30,param:1}]},{app:"autoreply",appType:"autoreply",type:"autoreply",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"times",name:"times",type:"select",defaultValue:"1",values:[{option:"One Time",value:"1"},{option:"Always",value:"0"}],required:!0,param:0},{title:"Text",name:"text",type:"textarea",required:!0,param:1}]},{app:"close",appType:"close",type:"close",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Disposition",name:"disposition",type:"text",required:!0,param:0}]},{app:"tag",appType:"tag",type:"tag",foreignKey:"TagId",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"tags",field:{name:"tag",key:"name"},route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1008}}],fields:[{title:"Tag",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",required:!0,param:0}]}],["app"]),{isApp:!1}),r.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},r.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){l()}},r.init=function(e,t){r.smsAccount=e,r.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},r.applications.disabled=!r.crudPermissions.canEdit,r.query.id=e.id,r.query.isApp=!0,r.query.nolimit=!0,r.getSmsAccountApps(),r.getIntervals()},r.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){r.smsAccountApps.rows.splice(t,1),l()},function(){console.log("CANCEL")})},r.getSmsAccountApps=function(){r.promise=o.smsAccount.getApplications(r.query,n).$promise},r.editSmsAccountApp=t,r.editInterval=function(e,t){if(r.smsAccountApps.rows.length){var n=r.smsAccountApps.rows[t]?r.smsAccountApps.rows[t]:r.smsAccountApps.rows[0];i.show({controller:"EditSmsAccountAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:r.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,l())})}},r.deleteSmsAccountApp=function(e){_.remove(r.smsAccountApps.rows,{id:e.id}),l(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},r.deleteSelectedSmsAccountApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+r.selectedSmsAccountApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){r.selectedSmsAccountApps.forEach(function(e){_.remove(r.smsAccountApps.rows,{id:e.id})}),r.selectedSmsAccountApps=[],l()})},r.rewriteRouting=l,r.getIntervals=function(){return o.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){r.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.sms").controller("SmsAccountActionsController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.smsAccount.getAgents({id:c.smsAccount.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserSmsAccount?"penalty "+e.UserSmsAccount.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.smsAccount=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.smsAccount.removeAgents({id:c.smsAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.smsAccount.addAgents({id:c.smsAccount.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("SMS.ALL_AGENTS"),labelSelected:r.instant("SMS.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","smsAccount","smsAccounts","realtime","$translate","Auth","crudPermissions"],angular.module("app.sms").controller("SmsAccountagentaddController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.agent=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agent.appdata)switch(l.agent.appType?l.agent.appType.toLowerCase():l.agent.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agent.appdata.split(",");l.agent.key=d[0],l.agent.language=d[1],l.agent.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agent.appdata.split(",");l.agent.accesskeyid=d[0],l.agent.secretaccesskey=d[1],l.agent.lexregion=d[2],l.agent.botname=d[3],l.agent.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agent.appdata.split(",");l.agent.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agent.text=d.slice(1,d.length).join(",");break;case"message":l.agent.text=l.agent.appdata;break;case"set":l.agent.name=l.agent.appdata.split("=")[0],l.agent.value=l.agent.appdata.split("=")[1];break;case"agi":l.agent.project=l.agent.appdata;break;default:var c=l.agent.appdata.split(",");l.agent.agent=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.agent.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.agent.timeout=30;function m(e){t.hide(e)}l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outbounddial"===l.agent.appType.toLowerCase()&&(l.agent.prefix=l.agent.phone?l.agent.phone.split("$")[0]:void 0,l.agent.callerId=l.agent.callerID?"CALLERID(all)="+l.agent.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.agent.type&&"outbound"===l.agent.type.toLowerCase()&&"outboundDial"===l.agent.appType&&(l.agent.phone=i.cutdigits?(l.agent.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agent.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agent.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agent.options+="U(xcally-mixmonitor-context)"):l.agent.options=l.agent.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.agents,{name:l.agent.agent});t&&(l.agent.UserId=t.id);if(l.agent.appType&&"custom"===l.agent.appType);else switch((l.agent.app||l.agent.appType).toLowerCase()){case"set":l.agent.appdata=l.agent.name+"="+l.agent.value;break;case"custom":break;default:e[0]=l.agent.agent,e[1]=l.agent.timeout,l.agent.appdata=e.join(",")}m(l.agent)},l.closeDialog=m,o.hasRole("admin")?s.user.get({fields:"id,name",sort:"name",nolimit:"true",role:"agent"}).$promise.then(function(e){l.agents=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.user.get({fields:"id,name",sort:"name",nolimit:"true",role:"agent"}).$promise.then(function(e){l.agents=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:202}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.agents,{id:e.resourceId})}),n=null;if(l.agent&&(n=_.find(l.agents,{name:l.agent.agent})),n&&!_.some(t,["id",n.id])){var a=_.find(l.agents,{id:n.id});a.canSelect=!1,t.push(a)}l.agents=t})}else{var n=[],a=null;l.agent&&(a=_.find(l.agents,{name:l.agent.agent}));for(var i=0;i<l.agents.length;i++)a&&l.agents[i].id===a.id&&(l.agents[i].canSelect=!1,n.push(l.agents[i]));l.agents=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppagentDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.autoreply=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.autoreply.appdata)switch(l.autoreply.appType?l.autoreply.appType.toLowerCase():l.autoreply.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.autoreply.appdata.split(",");l.autoreply.key=d[0],l.autoreply.language=d[1],l.autoreply.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.autoreply.appdata.split(",");l.autoreply.accesskeyid=d[0],l.autoreply.secretaccesskey=d[1],l.autoreply.lexregion=d[2],l.autoreply.botname=d[3],l.autoreply.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.autoreply.appdata.split(",");l.autoreply.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.autoreply.text=d.slice(1,d.length).join(",");break;case"message":l.autoreply.text=l.autoreply.appdata;break;case"set":l.autoreply.name=l.autoreply.appdata.split("=")[0],l.autoreply.value=l.autoreply.appdata.split("=")[1];break;case"agi":l.autoreply.project=l.autoreply.appdata;break;default:var c=l.autoreply.appdata.split(",");l.autoreply.times=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.autoreply.text=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.autoreply.times=1;function m(e){t.hide(e)}l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outbounddial"===l.autoreply.appType.toLowerCase()&&(l.autoreply.prefix=l.autoreply.phone?l.autoreply.phone.split("$")[0]:void 0,l.autoreply.callerId=l.autoreply.callerID?"CALLERID(all)="+l.autoreply.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.autoreply.type&&"outbound"===l.autoreply.type.toLowerCase()&&"outboundDial"===l.autoreply.appType&&(l.autoreply.phone=i.cutdigits?(l.autoreply.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.autoreply.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.autoreply.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.autoreply.options+="U(xcally-mixmonitor-context)"):l.autoreply.options=l.autoreply.options.replace("U(xcally-mixmonitor-context)",""));if(l.autoreply.appType&&"custom"===l.autoreply.appType);else switch((l.autoreply.app||l.autoreply.appType).toLowerCase()){case"set":l.autoreply.appdata=l.autoreply.name+"="+l.autoreply.value;break;case"custom":break;default:e[0]=l.autoreply.times,e[1]=l.autoreply.text,l.autoreply.appdata=e.join(",")}m(l.autoreply)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppautoreplyDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.close=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.close.appdata)switch(l.close.appType?l.close.appType.toLowerCase():l.close.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.close.appdata.split(",");l.close.key=d[0],l.close.language=d[1],l.close.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.close.appdata.split(",");l.close.accesskeyid=d[0],l.close.secretaccesskey=d[1],l.close.lexregion=d[2],l.close.botname=d[3],l.close.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.close.appdata.split(",");l.close.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.close.text=d.slice(1,d.length).join(",");break;case"message":l.close.text=l.close.appdata;break;case"set":l.close.name=l.close.appdata.split("=")[0],l.close.value=l.close.appdata.split("=")[1];break;case"agi":l.close.project=l.close.appdata;break;default:var c=l.close.appdata.split(",");l.close.disposition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outbounddial"===l.close.appType.toLowerCase()&&(l.close.prefix=l.close.phone?l.close.phone.split("$")[0]:void 0,l.close.callerId=l.close.callerID?"CALLERID(all)="+l.close.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.close.type&&"outbound"===l.close.type.toLowerCase()&&"outboundDial"===l.close.appType&&(l.close.phone=i.cutdigits?(l.close.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.close.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.close.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.close.options+="U(xcally-mixmonitor-context)"):l.close.options=l.close.options.replace("U(xcally-mixmonitor-context)",""));if(l.close.appType&&"custom"===l.close.appType);else switch((l.close.app||l.close.appType).toLowerCase()){case"set":l.close.appdata=l.close.name+"="+l.close.value;break;case"custom":break;default:e[0]=l.close.disposition,l.close.appdata=e.join(",")}m(l.close)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppcloseDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotoif=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotoif.appdata)switch(l.gotoif.appType?l.gotoif.appType.toLowerCase():l.gotoif.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotoif.appdata.split(",");l.gotoif.key=d[0],l.gotoif.language=d[1],l.gotoif.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotoif.appdata.split(",");l.gotoif.accesskeyid=d[0],l.gotoif.secretaccesskey=d[1],l.gotoif.lexregion=d[2],l.gotoif.botname=d[3],l.gotoif.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotoif.appdata.split(",");l.gotoif.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotoif.text=d.slice(1,d.length).join(",");break;case"message":l.gotoif.text=l.gotoif.appdata;break;case"set":l.gotoif.name=l.gotoif.appdata.split("=")[0],l.gotoif.value=l.gotoif.appdata.split("=")[1];break;case"agi":l.gotoif.project=l.gotoif.appdata;break;default:var c=l.gotoif.appdata.split(",");l.gotoif.condition=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.gotoif.truepriority=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.gotoif.falsepriority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outbounddial"===l.gotoif.appType.toLowerCase()&&(l.gotoif.prefix=l.gotoif.phone?l.gotoif.phone.split("$")[0]:void 0,l.gotoif.callerId=l.gotoif.callerID?"CALLERID(all)="+l.gotoif.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.gotoif.type&&"outbound"===l.gotoif.type.toLowerCase()&&"outboundDial"===l.gotoif.appType&&(l.gotoif.phone=i.cutdigits?(l.gotoif.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotoif.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotoif.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotoif.options+="U(xcally-mixmonitor-context)"):l.gotoif.options=l.gotoif.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotoif.appType&&"custom"===l.gotoif.appType);else switch((l.gotoif.app||l.gotoif.appType).toLowerCase()){case"set":l.gotoif.appdata=l.gotoif.name+"="+l.gotoif.value;break;case"custom":break;default:e[0]=l.gotoif.condition,e[1]=l.gotoif.truepriority,e[2]=l.gotoif.falsepriority,l.gotoif.appdata=e.join(",")}m(l.gotoif)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppgotoifDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.gotop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.gotop.appdata)switch(l.gotop.appType?l.gotop.appType.toLowerCase():l.gotop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.gotop.appdata.split(",");l.gotop.key=d[0],l.gotop.language=d[1],l.gotop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.gotop.appdata.split(",");l.gotop.accesskeyid=d[0],l.gotop.secretaccesskey=d[1],l.gotop.lexregion=d[2],l.gotop.botname=d[3],l.gotop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.gotop.appdata.split(",");l.gotop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.gotop.text=d.slice(1,d.length).join(",");break;case"message":l.gotop.text=l.gotop.appdata;break;case"set":l.gotop.name=l.gotop.appdata.split("=")[0],l.gotop.value=l.gotop.appdata.split("=")[1];break;case"agi":l.gotop.project=l.gotop.appdata;break;default:var c=l.gotop.appdata.split(",");l.gotop.priority=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outbounddial"===l.gotop.appType.toLowerCase()&&(l.gotop.prefix=l.gotop.phone?l.gotop.phone.split("$")[0]:void 0,l.gotop.callerId=l.gotop.callerID?"CALLERID(all)="+l.gotop.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.gotop.type&&"outbound"===l.gotop.type.toLowerCase()&&"outboundDial"===l.gotop.appType&&(l.gotop.phone=i.cutdigits?(l.gotop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.gotop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.gotop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.gotop.options+="U(xcally-mixmonitor-context)"):l.gotop.options=l.gotop.options.replace("U(xcally-mixmonitor-context)",""));if(l.gotop.appType&&"custom"===l.gotop.appType);else switch((l.gotop.app||l.gotop.appType).toLowerCase()){case"set":l.gotop.appdata=l.gotop.name+"="+l.gotop.value;break;case"custom":break;default:e[0]=l.gotop.priority,l.gotop.appdata=e.join(",")}m(l.gotop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppgotopDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditSmsAccountAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.noop=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.noop.appdata)switch(l.noop.appType?l.noop.appType.toLowerCase():l.noop.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.noop.appdata.split(",");l.noop.key=d[0],l.noop.language=d[1],l.noop.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.noop.appdata.split(",");l.noop.accesskeyid=d[0],l.noop.secretaccesskey=d[1],l.noop.lexregion=d[2],l.noop.botname=d[3],l.noop.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.noop.appdata.split(",");l.noop.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.noop.text=d.slice(1,d.length).join(",");break;case"message":l.noop.text=l.noop.appdata;break;case"set":l.noop.name=l.noop.appdata.split("=")[0],l.noop.value=l.noop.appdata.split("=")[1];break;case"agi":l.noop.project=l.noop.appdata;break;default:var c=l.noop.appdata.split(",");l.noop.value=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outbounddial"===l.noop.appType.toLowerCase()&&(l.noop.prefix=l.noop.phone?l.noop.phone.split("$")[0]:void 0,l.noop.callerId=l.noop.callerID?"CALLERID(all)="+l.noop.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.noop.type&&"outbound"===l.noop.type.toLowerCase()&&"outboundDial"===l.noop.appType&&(l.noop.phone=i.cutdigits?(l.noop.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.noop.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.noop.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.noop.options+="U(xcally-mixmonitor-context)"):l.noop.options=l.noop.options.replace("U(xcally-mixmonitor-context)",""));if(l.noop.appType&&"custom"===l.noop.appType);else switch((l.noop.app||l.noop.appType).toLowerCase()){case"set":l.noop.appdata=l.noop.name+"="+l.noop.value;break;case"custom":break;default:e[0]=l.noop.value,l.noop.appdata=e.join(",")}m(l.noop)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppnoopDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.queue.queue=300,l.queue.timeout=300;function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.queues,{name:l.queue.queue});t&&(l.queue[_.capitalize("sms")+"QueueId"]=t.id);if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.timeout,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.smsQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.smsQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:701}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppqueueDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.system=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.system.appdata)switch(l.system.appType?l.system.appType.toLowerCase():l.system.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.system.appdata.split(",");l.system.key=d[0],l.system.language=d[1],l.system.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.system.appdata.split(",");l.system.accesskeyid=d[0],l.system.secretaccesskey=d[1],l.system.lexregion=d[2],l.system.botname=d[3],l.system.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.system.appdata.split(",");l.system.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.system.text=d.slice(1,d.length).join(",");break;case"message":l.system.text=l.system.appdata;break;case"set":l.system.name=l.system.appdata.split("=")[0],l.system.value=l.system.appdata.split("=")[1];break;case"agi":l.system.project=l.system.appdata;break;default:var c=l.system.appdata.split(",");l.system.command=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.system.variable=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}else l.system.variable="";function m(e){t.hide(e)}l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outbounddial"===l.system.appType.toLowerCase()&&(l.system.prefix=l.system.phone?l.system.phone.split("$")[0]:void 0,l.system.callerId=l.system.callerID?"CALLERID(all)="+l.system.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.system.type&&"outbound"===l.system.type.toLowerCase()&&"outboundDial"===l.system.appType&&(l.system.phone=i.cutdigits?(l.system.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.system.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.system.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.system.options+="U(xcally-mixmonitor-context)"):l.system.options=l.system.options.replace("U(xcally-mixmonitor-context)",""));if(l.system.appType&&"custom"===l.system.appType);else switch((l.system.app||l.system.appType).toLowerCase()){case"set":l.system.appdata=l.system.name+"="+l.system.value;break;case"custom":break;default:e[0]=l.system.command,e[1]=l.system.variable,l.system.appdata=e.join(",")}m(l.system)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.system&&(n=_.find(l.variables,{name:l.system.variable})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.system&&(a=_.find(l.variables,{name:l.system.variable}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountAppsystemDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="SMS.EDIT_"+(a.appType||a.app).toUpperCase(),l.tag=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.tag.appdata)switch(l.tag.appType?l.tag.appType.toLowerCase():l.tag.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.tag.appdata.split(",");l.tag.key=d[0],l.tag.language=d[1],l.tag.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.tag.appdata.split(",");l.tag.accesskeyid=d[0],l.tag.secretaccesskey=d[1],l.tag.lexregion=d[2],l.tag.botname=d[3],l.tag.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.tag.appdata.split(",");l.tag.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.tag.text=d.slice(1,d.length).join(",");break;case"message":l.tag.text=l.tag.appdata;break;case"set":l.tag.name=l.tag.appdata.split("=")[0],l.tag.value=l.tag.appdata.split("=")[1];break;case"agi":l.tag.project=l.tag.appdata;break;default:var c=l.tag.appdata.split(",");l.tag.tag=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outbounddial"===l.tag.appType.toLowerCase()&&(l.tag.prefix=l.tag.phone?l.tag.phone.split("$")[0]:void 0,l.tag.callerId=l.tag.callerID?"CALLERID(all)="+l.tag.callerID:void 0),l.saveSmsAccountApp=function(){l.errors=[];var e=[];l.tag.type&&"outbound"===l.tag.type.toLowerCase()&&"outboundDial"===l.tag.appType&&(l.tag.phone=i.cutdigits?(l.tag.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.tag.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.tag.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.tag.options+="U(xcally-mixmonitor-context)"):l.tag.options=l.tag.options.replace("U(xcally-mixmonitor-context)",""));var t=_.find(l.tags,{name:l.tag.tag});t&&(l.tag.TagId=t.id);if(l.tag.appType&&"custom"===l.tag.appType);else switch((l.tag.app||l.tag.appType).toLowerCase()){case"set":l.tag.appdata=l.tag.name+"="+l.tag.value;break;case"custom":break;default:e[0]=l.tag.tag,l.tag.appdata=e.join(",")}m(l.tag)},l.closeDialog=m,o.hasRole("admin")?s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1008}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.tags,{id:e.resourceId})}),n=null;if(l.tag&&(n=_.find(l.tags,{name:l.tag.tag})),n&&!_.some(t,["id",n.id])){var a=_.find(l.tags,{id:n.id});a.canSelect=!1,t.push(a)}l.tags=t})}else{var n=[],a=null;l.tag&&(a=_.find(l.tags,{name:l.tag.tag}));for(var i=0;i<l.tags.length;i++)a&&l.tags[i].id===a.id&&(l.tags[i].canSelect=!1,n.push(l.tags[i]));l.tags=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtags",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","smsAccountApp","smsAccount","api","Auth","crudPermissions"],angular.module("app.sms").controller("EditSmsAccountApptagDialogController",e)}(),function(){"use strict";function e(e,a,t,n,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.smsAccount={},c.smsAccountInteractions={count:0,rows:[]},c.selectedSmsAccountInteractions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,Contact.firstName,Owner.name,closedAt,disposition,note,UserId,ContactId,SmsAccountId,tag",sort:"-createdAt",includeAll:"true",limit:10,page:1},c.init=function(e,t){c.smsAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.smsAccount.id,c.getSmsAccountInteractions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the interaction?").htmlContent("<b>"+(e.name||"interaction")+"</b> will be deleted.").ariaLabel("delete interaction").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.smsInteractionDownload=function(s,e,t){return l.smsInteraction.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="interaction"+s.id,a=new Blob(t,{type:e.type});n="sms-interaction"+s.id+".zip";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsAccount.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getSmsAccountInteractions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.smsAccount.getInteractions(c.query,p).$promise},c.createOrEditSmsAccountInteraction=function(e,t){s.show({controller:"CreateOrEditInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/interactions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:c.smsAccount,interaction:t,interactions:c.smsAccountInteractions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.spysmsInteraction=function(e,n){s.show({controller:"AgentGeneralInteractionController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,onShowing:function(e,t){e.vm.init({id:1,channel:"sms",interaction:n,spy:!0},a.$parent.vm.setting)}})},c.exportSelectedSmsAccountInteractions=function(){var e=angular.copy(c.selectedSmsAccountInteractions);return c.selectedSmsAccountInteractions=[],e},c.deleteSmsAccountInteraction=g,c.deleteSelectedSmsAccountInteractions=function(e){var t=s.confirm().title("Are you sure want to delete the selected interactions?").htmlContent("<b>"+c.selectedSmsAccountInteractions.length+" selected</b> will be deleted.").ariaLabel("delete interactions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedSmsAccountInteractions.forEach(function(e){g(e)}),c.selectedSmsAccountInteractions=[]})};var m=!0,u=1;function p(e){c.smsAccountInteractions=e||{count:0,rows:[]}}function g(e){l.smsInteraction.delete({id:e.id}).$promise.then(function(){_.remove(c.smsAccountInteractions.rows,{id:e.id}),c.smsAccountInteractions.count-=1,c.smsAccountInteractions.rows.length||c.getSmsAccountInteractions(),r.success({title:"Interaction deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETsmsAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}a.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getSmsAccountInteractions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.sms").controller("SmsAccountInteractionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.smsAccount={},c.smsAccountSmsCannedAnswers={count:0,rows:[]},c.selectedSmsAccountSmsCannedAnswers=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,key,value,description",limit:10,page:1},c.init=function(e,t){c.smsAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.smsAccount.id,c.query.SmsAccountId=c.smsAccount.id,c.getSmsAccountSmsCannedAnswers()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the smsCannedAnswer?").htmlContent("<b>"+(e.name||"smsCannedAnswer")+"</b> will be deleted.").ariaLabel("delete smsCannedAnswer").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getSmsAccountSmsCannedAnswers=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.smsAccount.getAnswers(c.query,p).$promise},c.createOrEditSmsAccountSmsCannedAnswer=function(e,t){s.show({controller:"CreateOrEditSmsCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/smsCannedAnswers/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:c.smsAccount,smsCannedAnswer:t,smsCannedAnswers:c.smsAccountSmsCannedAnswers.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedSmsAccountSmsCannedAnswers=function(){var e=angular.copy(c.selectedSmsAccountSmsCannedAnswers);return c.selectedSmsAccountSmsCannedAnswers=[],e},c.deleteSmsAccountSmsCannedAnswer=g,c.deleteSelectedSmsAccountSmsCannedAnswers=function(e){var t=s.confirm().title("Are you sure want to delete the selected smsCannedAnswers?").htmlContent("<b>"+c.selectedSmsAccountSmsCannedAnswers.length+" selected</b> will be deleted.").ariaLabel("delete smsCannedAnswers").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedSmsAccountSmsCannedAnswers.forEach(function(e){g(e)}),c.selectedSmsAccountSmsCannedAnswers=[]})};var m=!0,u=1;function p(e){c.smsAccountSmsCannedAnswers=e||{count:0,rows:[]}}function g(e){l.cannedAnswer.delete({id:e.id}).$promise.then(function(){_.remove(c.smsAccountSmsCannedAnswers.rows,{id:e.id}),c.smsAccountSmsCannedAnswers.count-=1,c.smsAccountSmsCannedAnswers.rows.length||c.getSmsAccountSmsCannedAnswers(),r.success({title:"SmsCannedAnswer deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETsmsAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getSmsAccountSmsCannedAnswers())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.sms").controller("SmsAccountSmsCannedAnswersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SMS.EDIT_SMSCANNEDANSWER",g.smsCannedAnswer=angular.copy(l),g.smsCannedAnswers=r,g.newSmsCannedAnswer=!1,g.smsCannedAnswer||(g.smsCannedAnswer={},g.title="SMS.NEW_SMSCANNEDANSWER",g.newSmsCannedAnswer=!0),t.params.id&&(g.smsCannedAnswer.SmsAccountId=t.params.id),g.addNewSmsCannedAnswer=function(){g.errors=[],d.cannedAnswer.save(g.smsCannedAnswer).$promise.then(function(e){g.smsCannedAnswers.unshift(e.toJSON()),o.success({title:"SmsCannedAnswer properly created",msg:g.smsCannedAnswer.name?g.smsCannedAnswer.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSmsCannedAnswer=function(){g.errors=[],d.cannedAnswer.update({id:g.smsCannedAnswer.id},g.smsCannedAnswer).$promise.then(function(e){var t=_.find(g.smsCannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsCannedAnswer properly saved!",msg:g.smsCannedAnswer.name?g.smsCannedAnswer.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSmsCannedAnswer=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The smsCannedAnswer will be deleted.").ariaLabel("Delete SmsCannedAnswer").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cannedAnswer.delete({id:g.smsCannedAnswer.id}).$promise.then(function(){_.remove(g.smsCannedAnswers,{id:g.smsCannedAnswer.id}),o.success({title:"SmsCannedAnswer properly deleted!",msg:(g.smsCannedAnswer.name||"smsCannedAnswer")+" has been deleted!"}),v(g.smsCannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","smsCannedAnswers","smsCannedAnswer","api","Auth","license","setting","crudPermissions"],angular.module("app.sms").controller("CreateOrEditSmsCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.smsAccount={},c.smsAccountSmsDispositions={count:0,rows:[]},c.selectedSmsAccountSmsDispositions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,name",limit:10,page:1},c.init=function(e,t){c.smsAccount=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.smsAccount.id,c.query.SmsAccountId=c.smsAccount.id,c.getSmsAccountSmsDispositions()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the smsDisposition?").htmlContent("<b>"+(e.name||"smsDisposition")+"</b> will be deleted.").ariaLabel("delete smsDisposition").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getSmsAccountSmsDispositions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.smsAccount.getDispositions(c.query,p).$promise},c.createOrEditSmsAccountSmsDisposition=function(e,t){s.show({controller:"CreateOrEditSmsDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/smsDispositions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:c.smsAccount,smsDisposition:t,smsDispositions:c.smsAccountSmsDispositions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedSmsAccountSmsDispositions=function(){var e=angular.copy(c.selectedSmsAccountSmsDispositions);return c.selectedSmsAccountSmsDispositions=[],e},c.deleteSmsAccountSmsDisposition=g,c.deleteSelectedSmsAccountSmsDispositions=function(e){var t=s.confirm().title("Are you sure want to delete the selected smsDispositions?").htmlContent("<b>"+c.selectedSmsAccountSmsDispositions.length+" selected</b> will be deleted.").ariaLabel("delete smsDispositions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedSmsAccountSmsDispositions.forEach(function(e){g(e)}),c.selectedSmsAccountSmsDispositions=[]})};var m=!0,u=1;function p(e){c.smsAccountSmsDispositions=e||{count:0,rows:[]}}function g(e){l.disposition.delete({id:e.id}).$promise.then(function(){_.remove(c.smsAccountSmsDispositions.rows,{id:e.id}),c.smsAccountSmsDispositions.count-=1,c.smsAccountSmsDispositions.rows.length||c.getSmsAccountSmsDispositions(),r.success({title:"SmsDisposition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETsmsAccount"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getSmsAccountSmsDispositions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.sms").controller("SmsAccountSmsDispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SMS.EDIT_SMSDISPOSITION",g.smsDisposition=angular.copy(l),g.smsDispositions=r,g.newSmsDisposition=!1,g.smsDisposition||(g.smsDisposition={},g.title="SMS.NEW_SMSDISPOSITION",g.newSmsDisposition=!0),t.params.id&&(g.smsDisposition.SmsAccountId=t.params.id),g.addNewSmsDisposition=function(){g.errors=[],d.disposition.save(g.smsDisposition).$promise.then(function(e){g.smsDispositions.unshift(e.toJSON()),o.success({title:"SmsDisposition properly created",msg:g.smsDisposition.name?g.smsDisposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSmsDisposition=function(){g.errors=[],d.disposition.update({id:g.smsDisposition.id},g.smsDisposition).$promise.then(function(e){var t=_.find(g.smsDispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsDisposition properly saved!",msg:g.smsDisposition.name?g.smsDisposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSmsDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The smsDisposition will be deleted.").ariaLabel("Delete SmsDisposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.smsDisposition.id}).$promise.then(function(){_.remove(g.smsDispositions,{id:g.smsDisposition.id}),o.success({title:"SmsDisposition properly deleted!",msg:(g.smsDisposition.name||"smsDisposition")+" has been deleted!"}),v(g.smsDisposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","smsDispositions","smsDisposition","api","Auth","license","setting","crudPermissions"],angular.module("app.sms").controller("CreateOrEditSmsDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.smsAccount=c||e.params.smsAccount||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.agentadddialog=function(e,t){n.show({controller:"SmsAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsAccount:e,smsAccounts:u.smsAccounts?u.smsAccounts.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoSmsAccounts=function(){e.go("app.sms.smsAccounts")},u.saveSmsAccount=function(){r.smsAccount.update({id:u.smsAccount.id},u.smsAccount).$promise.then(function(){l.success({title:"SmsAccount updated!",msg:u.smsAccount.name?u.smsAccount.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccount",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.lists=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.lists,{id:e.resourceId})}),n=null;if(u.smsAccount&&(n=_.find(u.lists,{id:Number(u.smsAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(u.lists,{id:n.id});a.canSelect=!1,t.push(a)}u.lists=t})}else{var n=[],a=null;u.smsAccount&&(a=_.find(u.lists,{id:Number(u.smsAccount.ListId)}));for(var i=0;i<u.lists.length;i++)a&&u.lists[i].id===a.id&&(u.lists[i].canSelect=!1,n.push(u.lists[i]));u.lists=n}}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","smsAccount","userProfileSection"],angular.module("app.sms").controller("SmsAccountController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.smsAccounts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="smsAccounts",b.listOrder="",b.listOrderAsc=null,b.selectedSmsAccounts=[],b.query={fields:"createdAt,updatedAt,id,name,key,token,remote,ListId,type,phone,accountSid,authId,authToken,smsMethod,username,password,baseUrl,apiKey,senderString,deliveryReport,waitForTheAssignedAgent,mandatoryDisposition,mandatoryDispositionPauseId,description,receiveUrl,deliveryReportUrl,notificationSound,notificationShake,notificationTemplate,queueTransfer,queueTransferTimeout,agentTransfer,agentTransferTimeout",sort:"-updatedAt",limit:10,page:1},b.arraytype=_.keyBy([{option:"Twilio",value:"'twilio'"},{option:"Skebby",value:"'skebby'"},{option:"Connectel",value:"'connectel'"},{option:"ClickSend",value:"'clicksend'"},{option:"Plivo",value:"'plivo'"},{option:"Infobip",value:"'infobip'"},{option:"Clickatell",value:"'clickatell'"},{option:"CSCTelecom",value:"'csc'"},{option:"Intelepeer",value:"'intelepeer'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysmsMethod=_.keyBy([{option:"Basic",value:"'SI'"},{option:"Classic",value:"'TI'"},{option:"Classic+",value:"'GP'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.sms.smsAccounts.edit",{id:e.id,smsAccount:e,crudPermissions:b.crudPermissions})},b.interactionsgoto=function(e,t){n.go("app.sms.smsAccounts.edit",{id:e.id,tab:5})},b.agentadddialog=function(e,t){i.show({controller:"SmsAccountagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsAccount:e,smsAccounts:b.smsAccounts?b.smsAccounts.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("smsAccount")+"?").htmlContent("<b>"+(e.name||"smsAccount")+"</b> will be deleted.").ariaLabel("delete smsAccount").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getSmsAccounts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.smsAccount.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="SmsAccounts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSmsAccount=function(e,t){i.show({controller:"CreateOrEditSmsAccountDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsAccounts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsAccount:t,smsAccounts:b.smsAccounts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSmsAccount=S,b.exportSelectedSmsAccounts=function(){var e=angular.copy(b.selectedSmsAccounts);return b.selectedSmsAccounts=[],e},b.deleteSelectedSmsAccounts=function(e){var t=i.confirm().title("Are you sure want to delete the selected smsAccounts?").htmlContent("<b>"+b.selectedSmsAccounts.length+" selected</b> will be deleted.").ariaLabel("delete SmsAccounts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedSmsAccounts.forEach(function(e){S(e)}),b.selectedSmsAccounts=[]})},b.deselectSmsAccounts=function(){b.selectedSmsAccounts=[]},b.selectAllSmsAccounts=function(){b.selectedSmsAccounts=b.smsAccounts.rows},g.hasRole("admin")?m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.cmList.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.lists=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.lists,{id:e.resourceId})}),n=null;if(b.smsAccount&&(n=_.find(b.lists,{id:Number(b.smsAccount.ListId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.lists,{id:n.id});a.canSelect=!1,t.push(a)}b.lists=t})}else{var n=[],a=null;b.smsAccount&&(a=_.find(b.lists,{id:Number(b.smsAccount.ListId)}));for(var i=0;i<b.lists.length;i++)a&&b.lists[i].id===a.id&&(b.lists[i].canSelect=!1,n.push(b.lists[i]));b.lists=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.smsAccounts=e||{count:0,rows:[]}}function S(e){m.smsAccount.delete({id:e.id}).$promise.then(function(){_.remove(b.smsAccounts.rows,{id:e.id}),b.smsAccounts.count-=1,b.smsAccounts.rows.length||b.getSmsAccounts(),p.success({title:_.startCase("SmsAccount")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsmsAccount"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEsmsAccount",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getSmsAccounts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","smsAccounts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.sms").controller("SmsAccountsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="SMS.EDIT_SMSQUEUE",g.smsQueue=angular.copy(l),g.smsQueues=r,g.newSmsQueue=!1,g.smsQueue||(g.smsQueue={strategy:"beepall",timeout:10},g.title="SMS.NEW_SMSQUEUE",g.newSmsQueue=!0),g.addNewSmsQueue=function(){g.errors=[],d.smsQueue.save(g.smsQueue).$promise.then(function(e){g.smsQueues.unshift(e.toJSON()),o.success({title:"SmsQueue properly created",msg:g.smsQueue.name?g.smsQueue.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.smsQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSmsQueue=function(){g.errors=[],d.smsQueue.update({id:g.smsQueue.id},g.smsQueue).$promise.then(function(e){var t=_.find(g.smsQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"SmsQueue properly saved!",msg:g.smsQueue.name?g.smsQueue.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.smsQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSmsQueue=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The smsQueue will be deleted.").ariaLabel("Delete SmsQueue").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.smsQueue.delete({id:g.smsQueue.id}).$promise.then(function(){_.remove(g.smsQueues,{id:g.smsQueue.id}),o.success({title:"SmsQueue properly deleted!",msg:(g.smsQueue.name||"smsQueue")+" has been deleted!"}),v(g.smsQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.smsQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.smsQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","smsQueues","smsQueue","api","Auth","license","setting","crudPermissions"],angular.module("app.sms").controller("CreateOrEditSmsQueueDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.smsQueue.getAgents({id:c.smsQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserSmsQueue?"penalty "+e.UserSmsQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.smsQueue=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.smsQueue.removeAgents({id:c.smsQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.smsQueue.addAgents({id:c.smsQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("SMS.ALL_AGENTS"),labelSelected:r.instant("SMS.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","smsQueue","smsQueues","realtime","$translate","Auth","crudPermissions"],angular.module("app.sms").controller("SmsQueueagentaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r){var l=this;function d(){return a(function(n,t){return a(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.smsQueue.getTeams({id:l.smsQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.smsQueue=t,l.crudPermissions=r,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("SMS.ALL_TEAMS"),labelSelected:n.instant("SMS.SELECTED_TEAMS"),transferCallback:function(e,t){var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.smsQueue.removeTeams({id:l.smsQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.smsQueue.addTeams({id:l.smsQueue.id,teams:_.map(n,function(e){return _.pick(e,["id"])})}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),i.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","smsQueue","$translate","Auth","crudPermissions"],angular.module("app.sms").controller("SmsQueueteamaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.smsQueue=c||e.params.smsQueue||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.teamadddialog=function(e,t){n.show({controller:"SmsQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/teamadd/teamadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsQueue:e,smsQueues:u.smsQueues?u.smsQueues.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){n.show({controller:"SmsQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/agentadd/agentadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsQueue:e,smsQueues:u.smsQueues?u.smsQueues.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.alert=l.info,u.gotoSmsQueues=function(){e.go("app.sms.smsQueues")},u.saveSmsQueue=function(){r.smsQueue.update({id:u.smsQueue.id},u.smsQueue).$promise.then(function(){l.success({title:"SmsQueue updated!",msg:u.smsQueue.name?u.smsQueue.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","smsQueue","userProfileSection"],angular.module("app.sms").controller("SmsQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.smsQueues=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="smsQueues",b.listOrder="",b.listOrderAsc=null,b.selectedSmsQueues=[],b.query={fields:"createdAt,updatedAt,id,name,strategy,timeout,description",sort:"-updatedAt",channel:"sms",limit:10,page:1},b.arraystrategy=_.keyBy([{option:"Beepall",value:"'beepall'"},{option:"RR Memory",value:"'rrmemory'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.sms.smsQueues.edit",{id:e.id,smsQueue:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"SmsQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsQueue:e,smsQueues:b.smsQueues?b.smsQueues.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"SmsQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{smsQueue:e,smsQueues:b.smsQueues?b.smsQueues.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("smsQueue")+"?").htmlContent("<b>"+(e.name||"smsQueue")+"</b> will be deleted.").ariaLabel("delete smsQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:710}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.sms.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.sms.realtime.queues",{})}},b.success=y,b.getSmsQueues=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.smsQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="SmsQueues",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSmsQueue=function(e,t){i.show({controller:"CreateOrEditSmsQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/sms/views/smsQueues/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{smsQueue:t,smsQueues:b.smsQueues.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSmsQueue=S,b.exportSelectedSmsQueues=function(){var e=angular.copy(b.selectedSmsQueues);return b.selectedSmsQueues=[],e},b.deleteSelectedSmsQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected smsQueues?").htmlContent("<b>"+b.selectedSmsQueues.length+" selected</b> will be deleted.").ariaLabel("delete SmsQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedSmsQueues.forEach(function(e){S(e)}),b.selectedSmsQueues=[]})},b.deselectSmsQueues=function(){b.selectedSmsQueues=[]},b.selectAllSmsQueues=function(){b.selectedSmsQueues=b.smsQueues.rows};var A=!0,E=1;function y(e){b.smsQueues=e||{count:0,rows:[]}}function S(e){m.smsQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.smsQueues.rows,{id:e.id}),b.smsQueues.count-=1,b.smsQueues.rows.length||b.getSmsQueues(),p.success({title:_.startCase("SmsQueue")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsmsQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEsmsQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getSmsQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","smsQueues","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.sms").controller("SmsQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.agents=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="agents",b.listOrder="",b.listOrderAsc=null,b.selectedAgents=[],b.query={fields:"createdAt,updatedAt,id,role,fullname,name,alias,showWebBar,email,phone,mobile,userpic,password,hotdesk,autointernal,internal,loginInPause,description,dtlscertfile,dtlsprivatekey,voicemail,transport,host,nat,type,allow,callerid,context,callgroup,pickupgroup,chanspy,videosupport,extensionMonitor,chatCapacity,mailCapacity,faxCapacity,smsCapacity,openchannelCapacity,phoneBarEnableSettings,phoneBarAutoAnswer,phoneBarAutoAnswerDelay,phoneBarRingInUse,phoneBarEnableRecording,phoneBarEnableDtmfTone,phoneBarDnd,phoneBarUnansweredCallBadge,phoneBarEnableJaws,phoneBarOutboundProxy,phoneBarUnconditional,phoneBarUnconditionalNumber,phoneBarRemoteControl,phoneBarRemoteControlPort,phoneBarExpires,phoneBarListenPort,permissions,allowmessenger,phoneBarPrefixRequired,passwordResetAt,disabled,blocked,phoneBarEnableScreenRecordingByAgent,phoneBarEnableAutomaticScreenRecording",role:"agent",sort:"-updatedAt",limit:10,page:1},b.arrayshowWebBar=_.keyBy([{option:"Phonebar",value:"0"},{option:"External",value:"1"},{option:"WebRTC",value:"2"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytransport=_.keyBy([{option:"udp",value:"'udp'"},{option:"tcp",value:"'tcp'"},{option:"ws",value:"'ws'",ngIf:"vm.agent.showWebBar == 1"},{option:"wss",value:"'wss'",ngIf:"vm.agent.showWebBar == 1"},{option:"tls",value:"'tls'",ngIf:"vm.agent.showWebBar == 1"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraynat=_.keyBy([{option:"force_rport",value:"'force_rport'"},{option:"comedia",value:"'comedia'"},{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"never",value:"'never'"},{option:"route",value:"'route'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytype=_.keyBy([{option:"Friend",value:"'friend'"},{option:"User",value:"'user'"},{option:"Peer",value:"'peer'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayallow=_.keyBy([{option:"ulaw",value:"'ulaw'"},{option:"alaw",value:"'alaw'"},{option:"gsm",value:"'gsm'"},{option:"g722",value:"'g722'"},{option:"g729",value:"'g729'"},{option:"opus",value:"'opus'"},{option:"h264",value:"'h264'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayvideosupport=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Always",value:"'always'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayextensionMonitor=_.keyBy([{option:"Inactive",value:"''"},{option:"wav",value:"'wav'"},{option:"wav49",value:"'WAV'"},{option:"gsm",value:"'gsm'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.staff.agents.edit",{id:e.id,agent:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"AgentteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:b.agents?b.agents.rows:[],crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("agent")+"?").htmlContent("<b>"+(e.name||"agent")+"</b> will be deleted.").ariaLabel("delete agent").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getAgents=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.user.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Agents",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditAgent=function(e,t){i.show({controller:"CreateOrEditAgentDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{agent:t,agents:b.agents.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteAgent=S,b.exportSelectedAgents=function(){var e=angular.copy(b.selectedAgents);return b.selectedAgents=[],e},b.deleteSelectedAgents=function(e){var t=i.confirm().title("Are you sure want to delete the selected agents?").htmlContent("<b>"+b.selectedAgents.length+" selected</b> will be deleted.").ariaLabel("delete Agents").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedAgents.forEach(function(e){S(e)}),b.selectedAgents=[]})},b.deselectAgents=function(){b.selectedAgents=[]},b.selectAllAgents=function(){b.selectedAgents=b.agents.rows};var A=!0,E=1;function y(e){b.agents=e||{count:0,rows:[]}}function S(e){m.user.delete({id:e.id}).$promise.then(function(){_.remove(b.agents.rows,{id:e.id}),b.agents.count-=1,b.agents.rows.length||b.getAgents(),p.success({title:_.startCase("Agent")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuser"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEuser",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getAgents())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","agents","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("AgentsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="STAFF.EDIT_AGENT",g.agent=angular.copy(l),g.agents=r,g.newAgent=!1,g.agent||(g.agent={role:"agent",showWebBar:"0",autointernal:!0,type:"friend",context:"from-sip",phoneBarRemoteControl:!0,phoneBarRemoteControlPort:9888,allowmessenger:!0},g.title="STAFF.NEW_AGENT",g.newAgent=!0),g.addNewAgent=function(){g.errors=[],d.user.save(g.agent).$promise.then(function(e){g.agents.unshift(e.toJSON()),o.success({title:"Agent properly created",msg:g.agent.name?g.agent.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveAgent=function(){g.errors=[],d.user.update({id:g.agent.id},g.agent).$promise.then(function(e){var t=_.find(g.agents,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Agent properly saved!",msg:g.agent.name?g.agent.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteAgent=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The agent will be deleted.").ariaLabel("Delete Agent").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.user.delete({id:g.agent.id}).$promise.then(function(){_.remove(g.agents,{id:g.agent.id}),o.success({title:"Agent properly deleted!",msg:(g.agent.name||"agent")+" has been deleted!"}),v(g.agent)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","agents","agent","api","Auth","license","setting","crudPermissions"],angular.module("app.staff").controller("CreateOrEditAgentDialogController",e)}(),function(){"use strict";function e(e,a){var i=this;i.agent={},i.crudPermissions,i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.agent.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.agent.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e,t){i.agent=angular.copy(e),i.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.ngFlowOptions.target="api/users/"+i.agent.id+"/avatar",i.agent.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.staff").controller("Agentchange_avatarController",e)}(),function(){"use strict";function e(n,e,t,a,i,s,o){var r=this;function l(){e.hide()}r.currentUser=o.getCurrentUser(),r.errors=[],r.setting=s,r.passwordPattern=r.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",r.agent=i,r.password="",r.oldPassword="",r.savePassword=function(){r.errors=[];var e={id:r.agent.id,newPassword:r.password};r.currentUser.id==r.agent.id&&(e.oldPassword=r.oldPassword);a.user.changePassword(e).$promise.then(function(){t.success({title:"Agent password properly updated!"}),l()}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.agent.save",msg:e.data?JSON.stringify(e.data.message):e.toString()}),r.errors=e.data.errors||[{message:e.toString(),type:"api.agent.changePassword"}]})},r.closeDialog=l,n.$watch("vm.password",function(e,t){_.isNil(r.oldPassword)||(e===r.oldPassword?n.agentForm.password.$setValidity("oldPasswordMatch",!1):n.agentForm.password.$setValidity("oldPasswordMatch",!0))})}e.$inject=["$scope","$mdDialog","toasty","api","agent","setting","Auth"],angular.module("app.staff").controller("AgentchangepasswordController",e)}(),function(){"use strict";function e(e,t,i,n,s){var o=this;o.agent={},o.navigation=n.getNavigation(),o.crudPermissions,o.init=function(e,t){o.agent=e,o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1}},o.onChange=function(t,n){if((n||t).enabled){if(n)n.enabled=!0,o.agent.permissions.push(n.id);else for(var e=0;e<t.children.length;e++)t.children[e].enabled=!0,o.agent.permissions.push(t.children[e].id);t.enabled=!0,o.agent.permissions.push(t.id)}else if(n)n.enabled=!1,_.remove(o.agent.permissions,function(e){return n.id===e}),_.filter(t.children,{enabled:!1}).length===t.children.length&&(t.enabled=!1,_.remove(o.agent.permissions,function(e){return t.id===e}));else{t.enabled=!1,_.remove(o.agent.permissions,function(e){return t.id===e});for(var a=0;a<t.children.length;a++)t.children[a].enabled=!1,_.remove(o.agent.permissions,function(e){return t.children[a].id===e})}return i.user.update({id:o.agent.id,permissions:_.uniq(o.agent.permissions)}).$promise.then(function(){s.success({title:"agent updated!",msg:o.agent.name?o.agent.name+" has been updated!":""})}).catch(function(e){console.error(e)})}}e.$inject=["$document","$mdDialog","api","msNavigationAgentService","toasty"],angular.module("app.staff").controller("AgentPermissionsController",e)}(),function(){"use strict";function e(e,l,a,d,t,n,i,s,o,r){var c=this;function m(){return l(function(n,t){return l(function(t,n){return d[c.apiName].get({fields:"id,name,strategy,type",channel:"bull"===c.channel?"voice":c.channel,type:c.direction,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],o.hasRole("admin")?e:c.section?c.section.autoAssociation?e:l(function(t,n){return d.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:o.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),l(function(t,n){return d.user.getQueues({id:c.agent.id,fields:"id,name,strategy,type,penalty",nolimit:!0,type:c.direction,channel:c.channel}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return"voice"===c.channel&&(t.penalty=void 0!==t&&void 0!==e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"penalty 0"),t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=o.getCurrentUser(),c.agent=t,c.crudPermissions=r,c.penalty=0,c.channel=n,c.direction=i,c.apiName=c.channel+"Queue",c.title=s.instant("STAFF.QUEUEADD_AGENT_"+c.channel.toUpperCase()+"_"+c.direction.toUpperCase()),c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"type",line3:"voice"===c.channel?"penalty":"",labelAll:s.instant("STAFF.ALL_QUEUES_"+c.channel.toUpperCase()+"_"+c.direction.toUpperCase()),labelSelected:s.instant("STAFF.SELECTED_QUEUES_"+c.channel.toUpperCase()+"_"+c.direction.toUpperCase()),transferCallback:function(e,t){t?e.forEach(function(e){e.penalty=void 0}):e.forEach(function(e){e.penalty="penalty "+c.penalty});var n=_.xorWith(c.startingSelectedItems,c.selectedItems,function(e,t){return e.id===t.id&&e.penalty===t.penalty});c.pendingChanges=!_.isEmpty(n)}},c.onInit=function(){return o.hasRole("admin")?m().catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})}):l(function(n,t){var e;switch(c.channel){case"voice":switch(c.direction){case"inbound":e="VoiceQueues";break;case"outbound":e="QueueCampaigns"}break;case"chat":e="ChatQueues";break;case"mail":e="MailQueues";break;case"sms":e="SmsQueues";break;case"openchannel":e="OpenchannelQueues";break;case"fax":e="FaxQueues"}d.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:e}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveQueues=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceWith(c.selectedItems,c.startingSelectedItems,function(e,t){return e.id===t.id&&e.penalty===t.penalty});return(n=e,l(function(e,t){_.isEmpty(n)?e():d.user.removeQueues({id:c.agent.id,ids:_.map(n,"id"),channel:c.channel}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return r=t,l(function(e,t){if(_.isEmpty(r))e();else if("voice"===c.channel){for(var n=[],a=_.groupBy(r,"penalty"),i=0;i<Object.keys(a).length;i++){var s=Object.keys(a)[i],o=_.filter(r,["penalty",s]);n.push(d.user.addQueues({id:c.agent.id,ids:_.map(o,"id"),channel:c.channel,penalty:_.trim(s,"penalty ")}).$promise)}l.all(n).then(function(){e()}).catch(function(e){t(e)})}else d.user.addQueues({id:c.agent.id,ids:_.map(r,"id"),channel:c.channel}).$promise.then(function(){e()}).catch(function(e){t(e)})});var r}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),a.success({title:"SUCCESS",msg:"Queues association has been updated!"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:QUEUES_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","agent","channel","direction","$translate","Auth","crudPermissions"],angular.module("app.staff").controller("AgentqueueaddController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r){var l=this;function d(){return a(function(n,t){return a(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.user.getTeams({id:l.agent.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.agent=t,l.crudPermissions=r,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("STAFF.ALL_TEAMS"),labelSelected:n.instant("STAFF.SELECTED_TEAMS"),transferCallback:function(e,t){var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.user.removeTeams({id:l.agent.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.user.addTeams({id:l.agent.id,teams:_.map(n,function(e){return _.pick(e,["id"])})}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),i.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","agent","$translate","Auth","crudPermissions"],angular.module("app.staff").controller("AgentteamaddController",e)}(),function(){"use strict";function e(e,t,i,s,n,a,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=a,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.agent=c||e.params.agent||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.queueaddchannel=function(e,t,n,a){i.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(s.body),targetEvent:n,clickOutsideToClose:!0,locals:{agent:e,agents:u.agents?u.agents.rows:[],channel:t,direction:a||"inbound",crudPermissions:u.crudPermissions}})},u.teamadddialog=function(e,t){i.show({controller:"AgentteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:u.agents?u.agents.rows:[],crudPermissions:u.crudPermissions}})},u.changepassworddialog=function(e,t){i.show({controller:"AgentchangepasswordController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/changepassword/changepassword.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,setting:o,agents:u.agents?u.agents.rows:[],crudPermissions:u.crudPermissions}})},u.onEnableScreenRecordingByAgentSelection=function(){["phoneBarEnableAutomaticScreenRecording"].forEach(function(e){u.agent.phoneBarEnableScreenRecordingByAgent&&(u.agent[e]=!u.agent.phoneBarEnableScreenRecordingByAgent)})},u.onEnableAutomaticScreenRecordingSelection=function(){["phoneBarEnableScreenRecordingByAgent"].forEach(function(e){u.agent.phoneBarEnableAutomaticScreenRecording&&(u.agent[e]=!u.agent.phoneBarEnableAutomaticScreenRecording)})},u.alert=l.info,u.gotoAgents=function(){e.go("app.staff.agents")},u.saveAgent=function(){u.agent=_.omit(u.agent,"userpic"),r.user.update({id:u.agent.id},u.agent).$promise.then(function(){l.success({title:"Agent updated!",msg:u.agent.name?u.agent.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuser",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.agent&&(n=_.find(u.contexts,{name:u.agent.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","agent","userProfileSection"],angular.module("app.staff").controller("AgentController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="STAFF.EDIT_TEAM",g.team=angular.copy(l),g.teams=r,g.newTeam=!1,g.team||(g.team={},g.title="STAFF.NEW_TEAM",g.newTeam=!0),g.addNewTeam=function(){g.errors=[],d.team.save(g.team).$promise.then(function(e){g.teams.unshift(e.toJSON()),o.success({title:"Team properly created",msg:g.team.name?g.team.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.team.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.team.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveTeam=function(){g.errors=[],d.team.update({id:g.team.id},g.team).$promise.then(function(e){var t=_.find(g.teams,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Team properly saved!",msg:g.team.name?g.team.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.team.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.team.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteTeam=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The team will be deleted.").ariaLabel("Delete Team").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.team.delete({id:g.team.id}).$promise.then(function(){_.remove(g.teams,{id:g.team.id}),o.success({title:"Team properly deleted!",msg:(g.team.name||"team")+" has been deleted!"}),v(g.team)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.team.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.team.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","teams","team","api","Auth","license","setting","crudPermissions"],angular.module("app.staff").controller("CreateOrEditTeamDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.team.getAgents({id:c.team.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserTeam?"penalty "+e.UserTeam.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.team=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.team.removeAgents({id:c.team.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.team.addAgents({id:c.team.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("STAFF.ALL_AGENTS"),labelSelected:r.instant("STAFF.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","team","teams","realtime","$translate","Auth","crudPermissions"],angular.module("app.staff").controller("TeamagentaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.teams=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="teams",b.listOrder="",b.listOrderAsc=null,b.selectedTeams=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditTeamDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/teams/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{team:e,teams:b.teams.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"TeamagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/teams/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{team:e,teams:b.teams?b.teams.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("team")+"?").htmlContent("<b>"+(e.name||"team")+"</b> will be deleted.").ariaLabel("delete team").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getTeams=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.team.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Teams",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditTeam=function(e,t){i.show({controller:"CreateOrEditTeamDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/teams/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{team:t,teams:b.teams.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteTeam=S,b.exportSelectedTeams=function(){var e=angular.copy(b.selectedTeams);return b.selectedTeams=[],e},b.deleteSelectedTeams=function(e){var t=i.confirm().title("Are you sure want to delete the selected teams?").htmlContent("<b>"+b.selectedTeams.length+" selected</b> will be deleted.").ariaLabel("delete Teams").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedTeams.forEach(function(e){S(e)}),b.selectedTeams=[]})},b.deselectTeams=function(){b.selectedTeams=[]},b.selectAllTeams=function(){b.selectedTeams=b.teams.rows};var A=!0,E=1;function y(e){b.teams=e||{count:0,rows:[]}}function S(e){m.team.delete({id:e.id}).$promise.then(function(){_.remove(b.teams.rows,{id:e.id}),b.teams.count-=1,b.teams.rows.length||b.getTeams(),p.success({title:_.startCase("Team")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEteam"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEteam",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getTeams())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","teams","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("TeamsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="STAFF.EDIT_TELEPHONE",g.telephone=angular.copy(l),g.telephones=r,g.newTelephone=!1,g.telephone||(g.telephone={role:"telephone",autointernal:!0,context:"from-sip"},g.title="STAFF.NEW_TELEPHONE",g.newTelephone=!0),g.addNewTelephone=function(){g.errors=[],d.user.save(g.telephone).$promise.then(function(e){g.telephones.unshift(e.toJSON()),o.success({title:"Telephone properly created",msg:g.telephone.name?g.telephone.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveTelephone=function(){g.errors=[],d.user.update({id:g.telephone.id},g.telephone).$promise.then(function(e){var t=_.find(g.telephones,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Telephone properly saved!",msg:g.telephone.name?g.telephone.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteTelephone=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The telephone will be deleted.").ariaLabel("Delete Telephone").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.user.delete({id:g.telephone.id}).$promise.then(function(){_.remove(g.telephones,{id:g.telephone.id}),o.success({title:"Telephone properly deleted!",msg:(g.telephone.name||"telephone")+" has been deleted!"}),v(g.telephone)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","telephones","telephone","api","Auth","license","setting","crudPermissions"],angular.module("app.staff").controller("CreateOrEditTelephoneDialogController",e)}(),function(){"use strict";function e(n,e,t,a,i,s,o){var r=this;function l(){e.hide()}r.currentUser=o.getCurrentUser(),r.errors=[],r.setting=s,r.passwordPattern=r.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",r.telephone=i,r.password="",r.oldPassword="",r.savePassword=function(){r.errors=[];var e={id:r.telephone.id,newPassword:r.password};r.currentUser.id==r.telephone.id&&(e.oldPassword=r.oldPassword);a.user.changePassword(e).$promise.then(function(){t.success({title:"Telephone password properly updated!"}),l()}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.telephone.save",msg:e.data?JSON.stringify(e.data.message):e.toString()}),r.errors=e.data.errors||[{message:e.toString(),type:"api.telephone.changePassword"}]})},r.closeDialog=l,n.$watch("vm.password",function(e,t){_.isNil(r.oldPassword)||(e===r.oldPassword?n.telephoneForm.password.$setValidity("oldPasswordMatch",!1):n.telephoneForm.password.$setValidity("oldPasswordMatch",!0))})}e.$inject=["$scope","$mdDialog","toasty","api","telephone","setting","Auth"],angular.module("app.staff").controller("TelephonechangepasswordController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.telephone=c||e.params.telephone||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.changepassworddialog=function(e,t){n.show({controller:"TelephonechangepasswordController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/telephones/edit/changepassword/changepassword.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{telephone:e,setting:o,telephones:u.telephones?u.telephones.rows:[],crudPermissions:u.crudPermissions}})},u.alert=l.info,u.gotoTelephones=function(){e.go("app.staff.telephones")},u.saveTelephone=function(){r.user.update({id:u.telephone.id},u.telephone).$promise.then(function(){l.success({title:"Telephone updated!",msg:u.telephone.name?u.telephone.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuser",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.telephone&&(n=_.find(u.contexts,{name:u.telephone.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","telephone","userProfileSection"],angular.module("app.staff").controller("TelephoneController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.telephones=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="telephones",b.listOrder="",b.listOrderAsc=null,b.selectedTelephones=[],b.query={fields:"createdAt,updatedAt,id,role,fullname,name,email,password,description,autointernal,internal,voicemail,transport,nat,allow,callerid,context,callgroup,pickupgroup,videosupport,encryption,phone,mobile",role:"telephone",sort:"-updatedAt",limit:10,page:1},b.arraytransport=_.keyBy([{option:"udp",value:"'udp'"},{option:"tcp",value:"'tcp'"},{option:"ws",value:"'ws'"},{option:"wss",value:"'wss'"},{option:"tls",value:"'tls'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraynat=_.keyBy([{option:"force_rport",value:"'force_rport'"},{option:"comedia",value:"'comedia'"},{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"never",value:"'never'"},{option:"route",value:"'route'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayallow=_.keyBy([{option:"ulaw",value:"'ulaw'"},{option:"alaw",value:"'alaw'"},{option:"gsm",value:"'gsm'"},{option:"g722",value:"'g722'"},{option:"g729",value:"'g729'"},{option:"opus",value:"'opus'"},{option:"h264",value:"'h264'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayvideosupport=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Always",value:"'always'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayencryption=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.staff.telephones.edit",{id:e.id,telephone:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("telephone")+"?").htmlContent("<b>"+(e.name||"telephone")+"</b> will be deleted.").ariaLabel("delete telephone").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getTelephones=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.user.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Telephones",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditTelephone=function(e,t){i.show({controller:"CreateOrEditTelephoneDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/telephones/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{telephone:t,telephones:b.telephones.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteTelephone=S,b.exportSelectedTelephones=function(){var e=angular.copy(b.selectedTelephones);return b.selectedTelephones=[],e},b.deleteSelectedTelephones=function(e){var t=i.confirm().title("Are you sure want to delete the selected telephones?").htmlContent("<b>"+b.selectedTelephones.length+" selected</b> will be deleted.").ariaLabel("delete Telephones").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedTelephones.forEach(function(e){S(e)}),b.selectedTelephones=[]})},b.deselectTelephones=function(){b.selectedTelephones=[]},b.selectAllTelephones=function(){b.selectedTelephones=b.telephones.rows};var A=!0,E=1;function y(e){b.telephones=e||{count:0,rows:[]}}function S(e){m.user.delete({id:e.id}).$promise.then(function(){_.remove(b.telephones.rows,{id:e.id}),b.telephones.count-=1,b.telephones.rows.length||b.getTelephones(),p.success({title:_.startCase("Telephone")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuser"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEuser",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getTelephones())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","telephones","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("TelephonesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="STAFF.EDIT_USERPROFILE",g.userProfile=angular.copy(l),g.userProfiles=r,g.newUserProfile=!1,g.userProfile||(g.userProfile={crudPermissions:["r"]},g.title="STAFF.NEW_USERPROFILE",g.newUserProfile=!0),g.addNewUserProfile=function(){g.errors=[],d.userProfile.save(g.userProfile).$promise.then(function(e){var t,n;n=[],(t=e).crudPermissions.forEach(function(e){var t;switch(e){case"r":t="READ_PERMISSION";break;case"e":t="EDIT_PERMISSION";break;case"d":t="DELETE_PERMISSION"}n.push(s.instant("STAFF."+t))}),t.selectedcrudPermissions=n.join(", "),g.userProfiles.unshift(e.toJSON()),o.success({title:"UserProfile properly created",msg:g.userProfile.name?g.userProfile.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.userProfile.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.userProfile.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveUserProfile=function(){g.errors=[],d.userProfile.update({id:g.userProfile.id},g.userProfile).$promise.then(function(e){var t=_.find(g.userProfiles,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"UserProfile properly saved!",msg:g.userProfile.name?g.userProfile.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.userProfile.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.userProfile.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteUserProfile=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The userProfile will be deleted.").ariaLabel("Delete UserProfile").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.userProfile.delete({id:g.userProfile.id}).$promise.then(function(){_.remove(g.userProfiles,{id:g.userProfile.id}),o.success({title:"UserProfile properly deleted!",msg:(g.userProfile.name||"userProfile")+" has been deleted!"}),v(g.userProfile)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.userProfile.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.userProfile.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","userProfiles","userProfile","api","Auth","license","setting","crudPermissions"],angular.module("app.staff").controller("CreateOrEditUserProfileDialogController",e)}(),function(){"use strict";function e(t,a,i,e,n,s,o){var r=this;function l(e){t.hide(e)}r.newUserProfile=!0,r.userProfile=angular.copy(n),r.userProfiles=s,r.title=o.instant("STAFF.CLONE_USERPROFILE"),n&&n.name&&(r.title+=": "+n.name),r.cloneUserProfile=function(){return e.userProfile.clone({id:n.id},r.userProfile).$promise.then(function(e){var t,n;n=[],(t=e).crudPermissions.forEach(function(e){var t;switch(e){case"r":t="READ_PERMISSION";break;case"e":t="EDIT_PERMISSION";break;case"d":t="DELETE_PERMISSION"}n.push(o.instant("STAFF."+t))}),t.selectedcrudPermissions=n.join(", "),r.userProfiles.unshift(e.toJSON()),i.success({title:"UserProfile properly cloned",msg:r.userProfile.name?r.userProfile.name+" has been cloned!":""}),a.go("app.staff.userProfiles.edit",{id:e.id}),l(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){r.errors=e.data.errors||[{message:e.toString(),type:"api.userProfile.clone"}];for(var t=0;t<e.data.errors.length;t+=1)i.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.userProfile.clone",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$mdDialog","$state","toasty","api","userProfile","userProfiles","$translate"],angular.module("app.staff").controller("UserProfilecloneController",e)}(),function(){"use strict";function e(n,o,r,l,d,e,t,c){var m=this;function u(e,t){switch(e.allResourcesEnabled="full"===t,t){case"full":return _.find(m.statusList,["tag","full"]);case"partial":return _.find(m.statusList,["tag","partial"]);case"disabled":return _.find(m.statusList,["tag","disabled"]);case"unlicensed":return _.find(m.statusList,["tag","unlicensed"]);case"unknown":default:return _.find(m.statusList,["tag","unknown"])}}function p(e){return l(function(t,n){var i,a;void 0!==e.channel&&_.includes(e.route,"Queue")?(a=e,l(function(t,n){var e=void 0!==a.channel&&"bull"===a.channel?"outbound":"inbound";return d[a.route].get({fields:"id,name,strategy,type",channel:"bull"===a.channel?"voice":a.channel,type:e,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})).then(function(e){t(e)}).catch(function(e){n(e)}):(i=e,l(function(a,t){switch(i.route){case"voiceExtension":var e;switch(i.title){case"InboundRoutes":e="inbound";break;case"OutboundRoutes":e="outbound";break;case"InternalRoutes":e="internal"}break;case"user":var n;switch(i.title){case"Agents":n="agent";break;case"Telephones":n="telephone";break;case"Users":n="user"}}if("Reports"===i.title){if(!i.reportType)return d.analyticDefaultReport.get({nolimit:!0}).$promise.then(function(n){d.analyticCustomReport.get({nolimit:!0}).$promise.then(function(e){var t=_.union(n.rows,e.rows);a({count:t.length,rows:t.rows})})}).catch(function(e){t(e)});switch(i.reportType){case"default":i.route="analyticDefaultReport";break;case"custom":i.route="analyticCustomReport"}}return d[i.route].get({role:n||void 0,type:e||void 0,VoiceExtensionId:e?"null":void 0,nolimit:!0}).$promise.then(function(e){a(e)}).catch(function(e){t(e)})})).then(function(e){t(e)}).catch(function(e){n(e)})})}function g(e,t,n){var a=e&&0<e.length?e[0]:null;if(!a)return n;var i,s,o=_.find(t,["sectionId",a.id]);return o?(t=_.remove(t,["sectionId",a.id]),(i=a,s=o.id,l(function(t,n){d.userProfileResource.get({sectionId:s}).$promise.then(function(t){return p(i).then(function(e){return _.differenceBy(t.rows,e.rows,"id")})}).then(function(e){_.isEmpty(e)?t():n()}).catch(function(e){n(e)})})).then(function(){return n="full",g(e.shift(),t,n)}).catch(function(e){return l.reject(e)})):void 0}function a(a){var n="Marketplace"===a.title?"AppZone":a.title;m.license?void 0===a.permissions||a.permissions.association?void 0===a.license||m.license[a.license]?d.userProfileSection.get({userProfileId:m.userProfile.id,category:n}).$promise.then(function(e){var t=e&&e.rows&&0<e.rows.length?e.rows:[];if("Dashboards"===a.title)return _.isEmpty(t)?"disabled":t[0].autoAssociation?"full":d.userProfileResource.get({sectionId:t[0].id,resourceId:101}).$promise.then(function(e){return(e&&e.rows?e.rows[0]:null)?"full":"partial"});var n=_.filter(a.children,function(e){return void 0!==e.permissions&&e.permissions.hidden?void 0:e});return t.length!==n.length?0===t.length?"disabled":"partial":_.every(t,["autoAssociation",!0])?"full":g(_.filter(n,function(e){return void 0===e.permissions||e.permissions.association?e:void 0}),t,"partial")}).then(function(e){a.status=u(a,e)}).catch(function(e){var t=e?"unknown":"partial";a.status=u(a,t),e&&c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GETRESOURCES("+n.toUpperCase()+")",msg:e.status?JSON.stringify(e.data):e.toString()})}):a.status=u(a,"unlicensed"):d.userProfileSection.get({userProfileId:m.userProfile.id,sectionId:a.id}).$promise.then(function(e){var t=(e&&1===e.rows.length?e.rows[0]:null)?"full":"disabled";a.status=u(a,t)}):a.status=u(a,"unknown")}m.userProfile={},m.license={},m.navigation=e.getNavigation(),m.modules=m.navigation[0].children,m.statusList=[{id:0,name:"Fully Enabled",color:"green-A700-bg",info:"All resources enabled",tag:"full"},{id:1,name:"Partially Enabled",color:"orange-A700-bg",info:"Some resources enabled",tag:"partial"},{id:2,name:"Disabled",color:"grey-A400-bg",info:"No resources enabled",tag:"disabled"},{id:3,name:"Unlicensed",color:"red-A700-bg",info:"Module not included in the license",tag:"unlicensed"},{id:4,name:"Unknown",color:"grey-A700-bg",info:"Unknown status",tag:"unknown"}],m.dashboardSections=[{title:"Dashboards",translate:"DASHBOARDS.DASHBOARDS",id:100}],m.init=function(e,t){m.userProfile=e,m.license=t},m.onChangeEnableAllResources=function(t){var e=void 0!==t.permissions&&!t.permissions.association,a="Marketplace"===t.title?"AppZone":t.title;if("Fully Enabled"!==t.status.name){var i=[];if(e)return i.push({category:a,sectionId:t.id,name:a,enabled:!0,crudPermissions:"red"}),d.userProfile.addSections({id:m.userProfile.id},i).$promise.then(function(){t.status=u(t,"full"),c.success({title:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_ENABLED_ALL_SUCCESS_TITLE",{sectionName:r.instant(t.translate),userProfileName:m.userProfile.name}),msg:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_ENABLED_ALL_SUCCESS_MESSAGE_NO_RESOURCES",{sectionName:r.instant(t.translate),userProfileName:m.userProfile.name})})}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USERPROFILE.ADDSECTIONS",msg:e.status?JSON.stringify(e.data):e.toString()})});var n=o.confirm({skipHide:!0}).title("Warning").textContent(r.instant("STAFF.PERMISSIONS_WARNING_ENABLE_ALL",{sectionName:r.instant(t.translate)})).ariaLabel("Warning").ok(r.instant("STAFF.CONFIRM")).cancel(r.instant("STAFF.CANCEL"));o.show(n).then(function(){switch(a){case"Dashboards":_.map(m.dashboardSections,function(e){i.push({category:a,sectionId:e.id,name:e.title,enabled:!0,autoAssociation:!0,crudPermissions:_.map(m.userProfile.crudPermissions).join("")})});break;default:_.map(t.children,function(e){var t=!(void 0===e.permissions||!e.permissions.hidden);if(!t){var n=e.title;switch(a){case"CallySquare":n="Projects"===n?"SquareProjects":n}i.push({category:a,sectionId:e.id,name:n,enabled:!0,autoAssociation:!0,crudPermissions:_.map(m.userProfile.crudPermissions).join("")})}})}return d.userProfile.addSections({id:m.userProfile.id},i).$promise.then(function(){t.status=u(t,"full"),c.success({title:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_ENABLED_ALL_SUCCESS_TITLE",{sectionName:r.instant(t.translate),userProfileName:m.userProfile.name}),msg:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_ENABLED_ALL_SUCCESS_MESSAGE",{sectionName:r.instant(t.translate),userProfileName:m.userProfile.name})})})}).catch(function(e){e?c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USERPROFILE.ADDSECTIONS",msg:e.status?JSON.stringify(e.data):e.toString()}):t.status=u(t,t.status.tag)})}else if("Fully Enabled"===t.status.name){t.status=u(t,"disabled");var s=[];switch(a){case"Settings":case"Help":s=[t.id];break;case"Dashboards":s=_.map(m.dashboardSections,function(e){return e.id});break;default:s=_.map(t.children,function(e){return e.id})}return d.userProfile.removeSections({id:m.userProfile.id,ids:s}).$promise.then(function(){c.success({title:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_DISABLED_ALL_SUCCESS_TITLE",{sectionName:r.instant(t.translate),userProfileName:m.userProfile.name}),msg:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_DISABLED_ALL_SUCCESS_MESSAGE",{sectionName:r.instant(t.translate),userProfileName:m.userProfile.name})})}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USERPROFILE.REMOVESECTIONS",msg:e.status?JSON.stringify(e.data):e.toString()})})}},m.manageResources=function(e,t){o.show({controller:"UserProfilepermissionsmanageController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/userProfiles/edit/permissionsmanage/permissionsmanage.html",parent:angular.element(n.body),targetEvent:t,clickOutsideToClose:!1,locals:{userProfile:m.userProfile,userProfiles:[],section:e}}).then(function(){a(e)})},m.checkSectionResources=a}e.$inject=["$document","$mdDialog","$translate","$q","api","msNavigationService","Auth","toasty"],angular.module("app.staff").controller("UserProfilePermissionsController",e)}(),function(){"use strict";function e(t,n,i,o,s,e,a,r,l,d){var c=this;function m(){var a=void 0!==c.selectedSection.pending&&c.selectedSection.pending;return i(function(n,t){s.userProfileSection.get({userProfileId:c.userProfile.id,sectionId:c.selectedSection.id}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;a||(c.selectedSection.enabled=!!t&&!!t.enabled,c.selectedSection.autoAssociation=!!t&&!!t.autoAssociation,c.selectedSection.crudPermissions=v(t?t.crudPermissions:c.userProfile.crudPermissions)),n(t)}).catch(function(e){t(e)})})}function u(){return i(function(t,n){c.loadedSection?s.userProfileResource.get({sectionId:c.loadedSection.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)}):t(null)})}function p(){return i(function(t,n){void 0!==c.selectedSection.channel&&_.includes(c.selectedSection.route,"Queue")?i(function(t,n){var e=void 0!==c.selectedSection.channel&&"bull"===c.selectedSection.channel?"outbound":"inbound";return s[c.selectedSection.route].get({fields:"id,name,strategy,type",channel:"bull"===c.selectedSection.channel?"voice":c.selectedSection.channel,type:e,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){t(e)}).catch(function(e){n(e)}):i(function(t,n){var e,a;if("voiceExtension"===c.selectedSection.route)switch(c.selectedSection.title){case"InboundRoutes":e="inbound";break;case"OutboundRoutes":e="outbound";break;case"InternalRoutes":e="internal"}if("user"===c.selectedSection.route)switch(c.selectedSection.title){case"Agents":a="agent";break;case"Telephones":a="telephone";break;case"Users":a="user"}if("interval"===c.selectedSection.route)var i=!0;if("Reports"===c.selectedSection.title&&(c.selectedSection.route="default"===c.selectedSection.reportType?"analyticDefaultReport":"analyticCustomReport"),"Dashboards"!==c.selectedSection.title)return s[c.selectedSection.route].get({role:a||void 0,type:e||void 0,VoiceExtensionId:e?"null":void 0,IntervalId:i?"null":void 0,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)});t({count:1,rows:[{id:101,name:r.instant("DASHBOARDS.GENERAL")}]})}).then(function(e){t(e)}).catch(function(e){n(e)})})}function g(){var i=void 0!==c.selectedSection.pending&&c.selectedSection.pending,s=[];return u().then(function(e){var t;return s=e&&e.rows?e.rows:[],"Reports"===c.selectedSection.title&&(c.associatedReports=c.associatedReports?c.associatedReports:s,t=c.associatedReports,s=_.filter(t,{type:"default"===c.selectedSection.reportType?"DefaultReports":"CustomReports"})),void 0===c.selectedSection.permissions||c.selectedSection.permissions.association?p():{rows:[]}}).then(function(e){c.items=e.rows?_.map(e.rows,function(e){var t,n;return"Reports"===c.selectedSection.title&&(e.fullPath=(t=e.parent,n=c.treeStructure[0].text,n=function e(t,n,a){if(!a||_.isEmpty(a.children))return t;var a=_.find(a.children,function(e){return _.includes(n,e.id)?e:void 0});return t+=a?"/"+a.text:"",e(t,n,a)}(n,t,c.treeStructure[0])).replace(" ","_")),e.isValid=!0,e}):[],i||(c.selectedSection.selectedItems=_.map(s,function(e){return _.find(c.items,{id:e.resourceId})}));var t,n=_.differenceBy(c.selectedSection.selectedItems,c.items,"id");switch(_.isEmpty(n)||(c.selectedSection.selectedItems=_.pullAllBy(c.selectedSection.selectedItems,n,"id")),c.selectedSection.title){case"Contexts":c.selectedSection.selectedItems=_.filter(c.items,function(e){return e.defaultEntry?(e.isValid=!1,e):void 0!==_.find(s,{resourceId:e.id})?(e.isValid=!0,e):void 0});break;case"MusicOnHolds":c.selectedSection.selectedItems=_.filter(c.items,function(e){return e.defaultEntry?(e.isValid=!1,e):void 0!==_.find(s,{resourceId:e.id})?(e.isValid=!0,e):void 0});break;case"Reports":var a=(t=c.allReportsSelected,_.filter(t,function(e){return _.startsWith(e.parent,"default"===c.selectedSection.reportType?"motion":"custom")}));c.selectedSection.selectedItems=b(c.selectedSection.selectedItems),c.selectedSection.selectedItems=_.unionBy(c.selectedSection.selectedItems,a,"id")}c.dualMultiselectOptions.selectedItems=c.selectedSection.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.items,c.dualMultiselectOptions.selectedItems,"id")}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET"+c.selectedSection.title.toUpperCase(),msg:e.status?JSON.stringify(e.data):e.toString()})})}function v(e){return e&&(c.selectedSection.allowEdit=!!_.includes(e,"e"),c.selectedSection.allowDelete=!!_.includes(e,"d")),function(){var e=["r"];if(c.selectedSection.allowEdit)e.push("e");else{var t=_.indexOf(e,["e"]);0<t&&c.selectedSection.crudPermissions.replace("e","")}if(c.selectedSection.allowDelete)e.push("d");else{var t=_.indexOf(e,["d"]);0<t&&c.selectedSection.crudPermissions.replace("d","")}return e}()}function h(e){var t=_.findIndex(c.subsections,function(e){return e.id==c.selectedSection.id});c.subsections[t].pending=e,f()}function f(){return c.pendingChanges=_.some(c.subsections,["pending",!0])}function b(e){return _.remove(e,function(e){return _.startsWith(e.parent,"default"===c.selectedSection.reportType?"motion":"custom")})}function A(){_.isEmpty(c.selectedSection.selectedItems)?c.allReportsSelected=_.remove(c.allReportsSelected,function(e){return e.type===("default"===c.selectedSection.reportType?"CustomReports":"DefaultReports")}):c.selectedSection.selectedItems.forEach(function(e){_.some(c.allReportsSelected,{id:e.id,parent:e.parent})||c.allReportsSelected.push(e)})}c.userProfile=e,c.penalty=0,c.section=angular.copy(d),c.title=r.instant("STAFF.PERMISSIONS_SECTION_TITLE",{sectionName:r.instant(c.section.translate)}),c.items=[],c.selectedItems=[],c.subsections=_.filter(c.section.children,function(e){return void 0!==e.permissions&&e.permissions.hidden?void 0:e}),c.dashboardSections=[{title:"Dashboards",translate:"DASHBOARDS.DASHBOARDS",id:100}],c.dashboardItems=[],"Dashboards"===c.section.title&&(c.dashboardItems=c.subsections,c.subsections=c.dashboardSections),c.selectedSection=null,c.loadedSection=null,c.allReportsSelected=[],c.closeDialog=function(e){if(c.pendingChanges){var t=n.confirm({skipHide:!0}).title("Warning").textContent(r.instant("STAFF.PERMISSIONS_WARNING_CLOSE")).ariaLabel("Warning").targetEvent(e).ok(r.instant("STAFF.CLOSE")).cancel(r.instant("STAFF.CANCEL"));n.show(t).then(function(){n.hide()})}else n.hide()},c.onChangeSection=function(){return m().then(function(e){if(c.loadedSection=e,"Reports"===c.selectedSection.title)return i(function(t,n){s.analyticTreeReport.get({}).$promise.then(function(e){c.treeReports=e.rows||[],t(c.treeReports)}).catch(function(e){n(e)})}).then(function(){if(!c.selectedSection.reportType)return u().then(function(e){c.allReportsSelected=e?_.map(e.rows,function(e){return{id:e.resourceId,name:e.name,type:e.type}}):[]})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TREE_REPORT_STRUCTURE",msg:e.data?JSON.stringify(e.data):e.toString()})});g()}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET"+c.selectedSection.title.toUpperCase(),msg:e.status?JSON.stringify(e.data):e.toString()})})},c.onChangeVisibility=function(){c.selectedSection.enabled=!c.selectedSection.enabled,h(!0)},c.onChangeAutoAssociation=function(){if(!c.selectedSection.autoAssociation){for(var e=[],t=0;t<c.dualMultiselectOptions.items.length;t++)e.push(c.dualMultiselectOptions.items[t]),c.dualMultiselectOptions.selectedItems.push(c.dualMultiselectOptions.items[t]);c.dualMultiselectOptions.items=[],c.dualMultiselectOptions.transferCallback(e,!1)}h(!0)},c.onChangeReportType=function(){c.treeStructure="default"===c.selectedSection.reportType?c.treeReports[0]?angular.fromJson(c.treeReports[0].tree):[]:c.treeReports[1]?angular.fromJson(c.treeReports[1].tree):[],c.selectedSection.selectedItems&&(c.allReportsSelected=b(c.allReportsSelected),A());g()},c.setPermission=function(e){"edit"===e?c.selectedSection.allowEdit=!c.selectedSection.allowEdit:"delete"===e&&(c.selectedSection.allowDelete=!c.selectedSection.allowDelete);c.selectedSection.crudPermissions=v(),h(!0)},c.saveSection=function(){var a="Marketplace"===c.section.title?"AppZone":c.section.title,e=_(c.subsections).filter({pending:!0}).map(function(e){var t="CallySquare"===a&&"Projects"===e.title?"SquareProjects":e.title,n="Reports"===t?c.allReportsSelected:e.selectedItems;return"Integrations"===a&&(e.autoAssociation=!0),{category:a,sectionId:e.id,name:t,enabled:e.enabled,autoAssociation:e.autoAssociation,crudPermissions:_.map(e.crudPermissions).join(""),Resources:_.map(n,function(e){return{name:e.name,resourceId:e.id,type:function(e,t){if("Reports"!==e)return e;{if(t.parent){var n=_.startsWith(t.parent,"motion")?"Default":"Custom";return n+e}return t.type}}(t,e)}})}}).value();return s.userProfile.addSections({id:c.userProfile.id},e).$promise.then(function(){c.subsections.forEach(function(e){e.pending=void 0}),c.associatedReports=null,f(),"Reports"!==c.selectedSection.title||c.selectedSection.reportType||t.userProfileForm.$setPristine(),o.success({title:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_SAVED_SUCCESS_TITLE",{sectionName:r.instant(a.translate)}),msg:r.instant("STAFF.NOTIFICATIONS.PERMISSIONS_SAVED_SUCCESS_MESSAGE")})}).then(function(){return m().then(function(e){c.loadedSection=e})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:USERPROFILE.ADDSECTIONS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.dualMultiselectOptions={readOnly:!1,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",line4:"fullPath",labelAll:r.instant("STAFF.PERMISSIONS_ALL_RESOURCES"),labelSelected:r.instant("STAFF.PERMISSIONS_SELECTED_RESOURCES"),labelSearch:r.instant("STAFF.PERMISSIONS_PLACEHOLDER_SEARCH"),transferCallback:function(e,t){h(!0),t?(c.selectedSection.selectedItems=_.pullAllBy(c.selectedSection.selectedItems,e,"id"),c.selectedSection.autoAssociation=!1):c.selectedSection.selectedItems=_.unionBy(c.selectedSection.selectedItems,e,"id"),"Reports"===c.selectedSection.title&&A()}}}e.$inject=["$scope","$mdDialog","$q","toasty","api","userProfile","userProfiles","$translate","Auth","section"],angular.module("app.staff").controller("UserProfilepermissionsmanageController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.userProfile=c||e.params.userProfile||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.permissionsmanagedialog=function(e,t){n.show({controller:"UserProfilepermissionsmanageController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/userProfiles/edit/permissionsmanage/permissionsmanage.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{userProfile:e,userProfiles:u.userProfiles?u.userProfiles.rows:[],crudPermissions:u.crudPermissions}})},u.clonedialog=function(e,t){n.show({controller:"UserProfilecloneController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/userProfiles/edit/clone/clone.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{userProfile:e,userProfiles:u.userProfiles?u.userProfiles.rows:[],crudPermissions:u.crudPermissions}})},u.alert=l.info,u.gotoUserProfiles=function(){e.go("app.staff.userProfiles")},u.saveUserProfile=function(){r.userProfile.update({id:u.userProfile.id},u.userProfile).$promise.then(function(){l.success({title:"UserProfile updated!",msg:u.userProfile.name?u.userProfile.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuserProfile",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","userProfile","userProfileSection"],angular.module("app.staff").controller("UserProfileController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.userProfiles=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="userProfiles",b.listOrder="",b.listOrderAsc=null,b.selectedUserProfiles=[],b.query={fields:"createdAt,updatedAt,id,name,description,crudPermissions",sort:"-updatedAt",limit:10,page:1},b.arraycrudPermissions=_.keyBy([{option:"Read_permission",value:"'r'",disabled:!0},{option:"Edit_permission",value:"'e'"},{option:"Delete_permission",value:"'d'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.userProfiles&&0<b.userProfiles.count&&b.userProfiles.rows.forEach(function(e){var t=[];e.crudPermissions.forEach(function(e){t.push(b.arraycrudPermissions[e].option)});var n=[];t.forEach(function(e){n.push(r.instant("STAFF."+e.toUpperCase()))}),e.selectedcrudPermissions=n.join(", ")}),b.editstate=function(e,t){n.go("app.staff.userProfiles.edit",{id:e.id,userProfile:e,crudPermissions:b.crudPermissions})},b.clonedialog=function(e,t){i.show({controller:"UserProfilecloneController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/userProfiles/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{userProfile:e,userProfiles:b.userProfiles?b.userProfiles.rows:[],crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("userProfile")+"?").htmlContent("<b>"+(e.name||"userProfile")+"</b> will be deleted.").ariaLabel("delete userProfile").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getUserProfiles=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.userProfile.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="UserProfiles",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditUserProfile=function(e,t){i.show({controller:"CreateOrEditUserProfileDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/userProfiles/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{userProfile:t,userProfiles:b.userProfiles.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteUserProfile=S,b.exportSelectedUserProfiles=function(){var e=angular.copy(b.selectedUserProfiles);return b.selectedUserProfiles=[],e},b.deleteSelectedUserProfiles=function(e){var t=i.confirm().title("Are you sure want to delete the selected userProfiles?").htmlContent("<b>"+b.selectedUserProfiles.length+" selected</b> will be deleted.").ariaLabel("delete UserProfiles").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedUserProfiles.forEach(function(e){S(e)}),b.selectedUserProfiles=[]})},b.deselectUserProfiles=function(){b.selectedUserProfiles=[]},b.selectAllUserProfiles=function(){b.selectedUserProfiles=b.userProfiles.rows};var A=!0,E=1;function y(e){b.userProfiles=e||{count:0,rows:[]}}function S(e){m.userProfile.delete({id:e.id}).$promise.then(function(){_.remove(b.userProfiles.rows,{id:e.id}),b.userProfiles.count-=1,b.userProfiles.rows.length||b.getUserProfiles(),p.success({title:_.startCase("UserProfile")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuserProfile"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEuserProfile",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getUserProfiles())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","userProfiles","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("UserProfilesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="STAFF.EDIT_USER",g.user=angular.copy(l),g.users=r,g.newUser=!1,g.user||(g.user={role:"user",autointernal:!0,context:"from-sip"},g.title="STAFF.NEW_USER",g.newUser=!0),g.addNewUser=function(){g.errors=[],d.user.save(g.user).$promise.then(function(e){g.users.unshift(e.toJSON()),o.success({title:"User properly created",msg:g.user.name?g.user.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveUser=function(){g.errors=[],d.user.update({id:g.user.id},g.user).$promise.then(function(e){var t=_.find(g.users,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"User properly saved!",msg:g.user.name?g.user.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteUser=function(e){if(c.getCurrentUser().id===g.user.id)return o.error({title:"User not deleted!",msg:"You can't remove yourself"});g.errors=[];var t=a.confirm().title("Are you sure?").content("The user will be deleted.").ariaLabel("Delete User").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.user.delete({id:g.user.id}).$promise.then(function(){_.remove(g.users,{id:g.user.id}),o.success({title:"User properly deleted!",msg:(g.user.name||"user")+" has been deleted!"}),v(g.user)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.user.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,d.userProfile.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.userProfiles=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERPROFILES",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","users","user","api","Auth","license","setting","crudPermissions"],angular.module("app.staff").controller("CreateOrEditUserDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i){var s=this;function o(){e.hide()}s.currentUser=i.getCurrentUser(),s.errors=[],s.user=a,s.generateApiKey=function(){s.errors=[],n.user.createApiKey({id:s.user.id}).$promise.then(function(e){s.user.apiKey=e.api_key||"N/A",t.success({title:"User API key updated!"}),o()}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.createApiKey",msg:e.data?JSON.stringify(e.data.message):e.toString()}),s.errors=e.data.errors||[{message:e.toString(),type:"api.user.createApiKey"}]})},s.removeApiKey=function(){s.errors=[],n.user.removeApiKey({id:s.user.id}).$promise.then(function(){s.user.apiKey="N/A",t.success({title:"User API key removed!"}),o()}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.removeApiKey",msg:e.data?JSON.stringify(e.data.message):e.toString()}),s.errors=e.data.errors||[{message:e.toString(),type:"api.user.removeApiKey"}]})},s.closeDialog=o}e.$inject=["$mdDialog","toasty","api","user","Auth"],angular.module("app.staff").controller("UserapikeymanagerController",e)}(),function(){"use strict";function e(e,a){var i=this;i.user={},i.crudPermissions,i.ngFlowOptions={singleFile:!0,maxChunkRetries:1,chunkSize:8388608,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},i.ngFlow={flow:{}},i.dropping=!1,i.fileAdded=function(e){var t=["png","jpg"];if(!_.includes(t,e.getExtension()))return a.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(8388608<e.size)return a.error({title:"File too big",msg:"The max allowed size is 8MB"}),!1;var n={id:e.uniqueIdentifier,file:e,type:"uploading"};return i.user.images.unshift(n),!0},i.upload=function(){i.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},i.ngFlow.flow.upload()},i.fileSuccess=function(a,e){angular.forEach(i.user.images,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result},t.type="image"}})},i.init=function(e,t){i.user=angular.copy(e),i.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},i.ngFlowOptions.target="api/users/"+i.user.id+"/avatar",i.user.images=[]}}e.$inject=["$cookies","toasty"],angular.module("app.staff").controller("Userchange_avatarController",e)}(),function(){"use strict";function e(n,e,t,a,i,s,o){var r=this;function l(){e.hide()}r.currentUser=o.getCurrentUser(),r.errors=[],r.setting=s,r.passwordPattern=r.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",r.user=i,r.password="",r.oldPassword="",r.savePassword=function(){r.errors=[];var e={id:r.user.id,newPassword:r.password};r.currentUser.id==r.user.id&&(e.oldPassword=r.oldPassword);a.user.changePassword(e).$promise.then(function(){t.success({title:"User password properly updated!"}),l()}).catch(function(e){t.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.save",msg:e.data?JSON.stringify(e.data.message):e.toString()}),r.errors=e.data.errors||[{message:e.toString(),type:"api.user.changePassword"}]})},r.closeDialog=l,n.$watch("vm.password",function(e,t){_.isNil(r.oldPassword)||(e===r.oldPassword?n.userForm.password.$setValidity("oldPasswordMatch",!1):n.userForm.password.$setValidity("oldPasswordMatch",!0))})}e.$inject=["$scope","$mdDialog","toasty","api","user","setting","Auth"],angular.module("app.staff").controller("UserchangepasswordController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.user=c||e.params.user||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.apikeymanagerdialog=function(e,t){n.show({controller:"UserapikeymanagerController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/edit/apikeymanager/apikeymanager.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{user:e,users:u.users?u.users.rows:[],crudPermissions:u.crudPermissions}})},u.changepassworddialog=function(e,t){n.show({controller:"UserchangepasswordController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/edit/changepassword/changepassword.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{user:e,setting:o,users:u.users?u.users.rows:[],crudPermissions:u.crudPermissions}})},u.alert=l.info,u.gotoUsers=function(){e.go("app.staff.users")},u.saveUser=function(){u.user=_.omit(u.user,"userpic"),r.user.update({id:u.user.id},u.user).$promise.then(function(){l.success({title:"User updated!",msg:u.user.name?u.user.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETuser",msg:e.data?JSON.stringify(e.data):e.toString()})})},r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),r.userProfile.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.userProfiles=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERPROFILES",msg:e.data?JSON.stringify(e.data):e.toString()})}),r.user.getApiKey({id:u.user.id}).$promise.then(function(e){u.user.apiKey=e.api_key?e.api_key:"N/A"}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_APIKEY",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","user","userProfileSection"],angular.module("app.staff").controller("UserController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.users=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="users",b.listOrder="",b.listOrderAsc=null,b.selectedUsers=[],b.query={fields:"createdAt,updatedAt,role,userProfileId,id,fullname,name,email,phone,mobile,userpic,password,description,autointernal,internal,transport,nat,allow,context,callgroup,pickupgroup,passwordResetAt,apiKey,videosupport,disabled,blocked",role:"admin,user",sort:"-updatedAt",limit:10,page:1},b.arrayrole=_.keyBy([{option:"Admin",value:"'admin'"},{option:"User",value:"'user'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytransport=_.keyBy([{option:"udp",value:"'udp'"},{option:"tcp",value:"'tcp'"},{option:"ws",value:"'ws'"},{option:"wss",value:"'wss'"},{option:"tls",value:"'tls'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraynat=_.keyBy([{option:"force_rport",value:"'force_rport'"},{option:"comedia",value:"'comedia'"},{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"never",value:"'never'"},{option:"route",value:"'route'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayallow=_.keyBy([{option:"ulaw",value:"'ulaw'"},{option:"alaw",value:"'alaw'"},{option:"gsm",value:"'gsm'"},{option:"g722",value:"'g722'"},{option:"g729",value:"'g729'"},{option:"opus",value:"'opus'"},{option:"h264",value:"'h264'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayvideosupport=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Always",value:"'always'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.staff.users.edit",{id:e.id,user:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("user")+"?").htmlContent("<b>"+(e.name||"user")+"</b> will be deleted.").ariaLabel("delete user").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getUsers=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.user.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Users",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditUser=function(e,t){i.show({controller:"CreateOrEditUserDialogController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/users/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{user:t,users:b.users.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteUser=S,b.exportSelectedUsers=function(){var e=angular.copy(b.selectedUsers);return b.selectedUsers=[],e},b.deleteSelectedUsers=function(e){var t=i.confirm().title("Are you sure want to delete the selected users?").htmlContent("<b>"+b.selectedUsers.length+" selected</b> will be deleted.").ariaLabel("delete Users").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedUsers.forEach(function(e){S(e)}),b.selectedUsers=[]})},b.deselectUsers=function(){b.selectedUsers=[]},b.selectAllUsers=function(){b.selectedUsers=b.users.rows},m.userProfile.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.userProfiles=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERPROFILES",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.users=e||{count:0,rows:[]}}function S(e){m.user.delete({id:e.id}).$promise.then(function(){_.remove(b.users.rows,{id:e.id}),b.users.count-=1,b.users.rows.length||b.getUsers(),p.success({title:_.startCase("User")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEuser"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEuser",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getUsers())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","users","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.staff").controller("UsersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.cannedAnswers=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="cannedAnswers",b.listOrder="",b.listOrderAsc=null,b.selectedCannedAnswers=[],b.query={fields:"createdAt,updatedAt,id,key,value,description",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/cannedAnswers/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{cannedAnswer:e,cannedAnswers:b.cannedAnswers.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("cannedAnswer")+"?").htmlContent("<b>"+(e.name||"cannedAnswer")+"</b> will be deleted.").ariaLabel("delete cannedAnswer").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getCannedAnswers=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.cannedAnswer.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="CannedAnswers",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditCannedAnswer=function(e,t){i.show({controller:"CreateOrEditCannedAnswerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/cannedAnswers/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{cannedAnswer:t,cannedAnswers:b.cannedAnswers.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteCannedAnswer=S,b.exportSelectedCannedAnswers=function(){var e=angular.copy(b.selectedCannedAnswers);return b.selectedCannedAnswers=[],e},b.deleteSelectedCannedAnswers=function(e){var t=i.confirm().title("Are you sure want to delete the selected cannedAnswers?").htmlContent("<b>"+b.selectedCannedAnswers.length+" selected</b> will be deleted.").ariaLabel("delete CannedAnswers").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedCannedAnswers.forEach(function(e){S(e)}),b.selectedCannedAnswers=[]})},b.deselectCannedAnswers=function(){b.selectedCannedAnswers=[]},b.selectAllCannedAnswers=function(){b.selectedCannedAnswers=b.cannedAnswers.rows};var A=!0,E=1;function y(e){b.cannedAnswers=e||{count:0,rows:[]}}function S(e){m.cannedAnswer.delete({id:e.id}).$promise.then(function(){_.remove(b.cannedAnswers.rows,{id:e.id}),b.cannedAnswers.count-=1,b.cannedAnswers.rows.length||b.getCannedAnswers(),p.success({title:_.startCase("CannedAnswer")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEcannedAnswer"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEcannedAnswer",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getCannedAnswers())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","cannedAnswers","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("CannedAnswersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_CANNEDANSWER",g.cannedAnswer=angular.copy(l),g.cannedAnswers=r,g.newCannedAnswer=!1,g.cannedAnswer||(g.cannedAnswer={},g.title="TOOLS.NEW_CANNEDANSWER",g.newCannedAnswer=!0),g.addNewCannedAnswer=function(){g.errors=[],d.cannedAnswer.save(g.cannedAnswer).$promise.then(function(e){g.cannedAnswers.unshift(e.toJSON()),o.success({title:"CannedAnswer properly created",msg:g.cannedAnswer.name?g.cannedAnswer.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveCannedAnswer=function(){g.errors=[],d.cannedAnswer.update({id:g.cannedAnswer.id},g.cannedAnswer).$promise.then(function(e){var t=_.find(g.cannedAnswers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"CannedAnswer properly saved!",msg:g.cannedAnswer.name?g.cannedAnswer.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteCannedAnswer=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The cannedAnswer will be deleted.").ariaLabel("Delete CannedAnswer").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.cannedAnswer.delete({id:g.cannedAnswer.id}).$promise.then(function(){_.remove(g.cannedAnswers,{id:g.cannedAnswer.id}),o.success({title:"CannedAnswer properly deleted!",msg:(g.cannedAnswer.name||"cannedAnswer")+" has been deleted!"}),v(g.cannedAnswer)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.cannedAnswer.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.cannedAnswer.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","cannedAnswers","cannedAnswer","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditCannedAnswerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_CUSTOMDASHBOARD",g.customDashboard=angular.copy(l),g.customDashboards=r,g.newCustomDashboard=!1,g.customDashboard||(g.customDashboard={},g.title="TOOLS.NEW_CUSTOMDASHBOARD",g.newCustomDashboard=!0),g.addNewCustomDashboard=function(){g.errors=[],d.dashboard.save(g.customDashboard).$promise.then(function(e){g.customDashboards.unshift(e.toJSON()),o.success({title:"CustomDashboard properly created",msg:g.customDashboard.name?g.customDashboard.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.dashboard.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboard.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveCustomDashboard=function(){g.errors=[],d.dashboard.update({id:g.customDashboard.id},g.customDashboard).$promise.then(function(e){var t=_.find(g.customDashboards,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"CustomDashboard properly saved!",msg:g.customDashboard.name?g.customDashboard.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.dashboard.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboard.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteCustomDashboard=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The customDashboard will be deleted.").ariaLabel("Delete CustomDashboard").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.dashboard.delete({id:g.customDashboard.id}).$promise.then(function(){_.remove(g.customDashboards,{id:g.customDashboard.id}),o.success({title:"CustomDashboard properly deleted!",msg:(g.customDashboard.name||"customDashboard")+" has been deleted!"}),v(g.customDashboard)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.dashboard.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboard.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","customDashboards","customDashboard","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditCustomDashboardDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.customDashboards=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="customDashboards",b.listOrder="",b.listOrderAsc=null,b.selectedCustomDashboards=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},b.editstate=function(e,t){n.go("app.tools.customDashboards.edit",{id:e.id,customDashboard:e,crudPermissions:b.crudPermissions})},b.clonedialog=function(e,t){i.show({controller:"CustomDashboardcloneController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{customDashboard:e,customDashboards:b.customDashboards?b.customDashboards.rows:[],crudPermissions:b.crudPermissions}})},b.gotodashboardgoto=function(e,t){n.go("app.dashboards.custom",{id:e.id})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("customDashboard")+"?").htmlContent("<b>"+(e.name||"customDashboard")+"</b> will be deleted.").ariaLabel("delete customDashboard").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getCustomDashboards=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.dashboard.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="CustomDashboards",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditCustomDashboard=function(e,t){i.show({controller:"CreateOrEditCustomDashboardDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{customDashboard:t,customDashboards:b.customDashboards.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteCustomDashboard=S,b.exportSelectedCustomDashboards=function(){var e=angular.copy(b.selectedCustomDashboards);return b.selectedCustomDashboards=[],e},b.deleteSelectedCustomDashboards=function(e){var t=i.confirm().title("Are you sure want to delete the selected customDashboards?").htmlContent("<b>"+b.selectedCustomDashboards.length+" selected</b> will be deleted.").ariaLabel("delete CustomDashboards").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedCustomDashboards.forEach(function(e){S(e)}),b.selectedCustomDashboards=[]})},b.deselectCustomDashboards=function(){b.selectedCustomDashboards=[]},b.selectAllCustomDashboards=function(){b.selectedCustomDashboards=b.customDashboards.rows};var A=!0,E=1;function y(e){b.customDashboards=e||{count:0,rows:[]}}function S(e){m.dashboard.delete({id:e.id}).$promise.then(function(){_.remove(b.customDashboards.rows,{id:e.id}),b.customDashboards.count-=1,b.customDashboards.rows.length||b.getCustomDashboards(),p.success({title:_.startCase("CustomDashboard")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEdashboard"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEdashboard",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getCustomDashboards())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","customDashboards","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("CustomDashboardsController",e)}(),function(){"use strict";function e(t,n,a,e,i,s,o){var r=this;function l(e){t.hide(e)}r.newCustomDashboard=!0,r.customDashboard=angular.copy(i),r.customDashboards=s,r.title=o.instant("TOOLS.CLONE_CUSTOMDASHBOARD"),i&&i.name&&(r.title+=": "+i.name),r.cloneCustomDashboard=function(){return e.dashboard.clone({id:i.id,includeAll:!0},r.customDashboard).$promise.then(function(e){r.customDashboards.unshift(e.toJSON()),a.success({title:"CustomDashboard properly cloned",msg:r.customDashboard.name?r.customDashboard.name+" has been cloned!":""}),n.go("app.tools.customDashboards.edit",{id:e.id}),l(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){r.errors=e.data.errors||[{message:e.toString(),type:"api.dashboard.clone"}];for(var t=0;t<e.data.errors.length;t+=1)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboard.clone",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$mdDialog","$state","toasty","api","customDashboard","customDashboards","$translate"],angular.module("app.tools").controller("CustomDashboardcloneController",e)}(),function(){"use strict";function e(n,a,e,i,s){var o=this;function r(e,t,n){return s.dashboardItem.update(n).$promise.catch(function(e){console.error(e)})}o.customDashboard={},o.voiceQueues=s.rpc.getVoiceQueues({fields:"id,name"}),o.init=function(e,t){return o.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},o.customDashboard=e,o.customDashboard.draggable={enabled:!0,handle:".draggable",stop:r},o.customDashboard.resizable={enabled:!0,handle:".resizable",stop:r},o.customDashboard.widgets=[],s.dashboard.getItems({id:e.id}).$promise.then(function(e){if(e&&e.count&&e.rows)for(var t=0;t<e.rows.length;t+=1)e.rows[t].voiceQueues=o.voiceQueues,e.rows[t].voiceQueuesSelected=_.map(o.voiceQueues.rows,"id"),e.rows[t].templateUrl="app/core/directives/ms-widget-engine/ms-widget-engine-"+e.rows[t].type+"/ms-widget-engine."+e.rows[t].type+".html",o.customDashboard.widgets.push(e.rows[t])}).catch(function(e){console.error(e)})},o.createOrEditWidget=function(e){if(e&&e.attrs)for(var t=0;t<e.attrs.length;t+=1)"attrReport"===e.attrs[t].name&&(e.reportType=e.attrs[t].type),e[e.attrs[t].name]=e.attrs[t].value;n.show({controller:"CreateOrEditDashboardItemDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/edit/dashboard/dialog.html",parent:angular.element(a.body),clickOutsideToClose:!0,locals:{dashboarditem:e,dashboard:o.customDashboard.widgets,license:null,setting:null,crudPermissions:o.crudPermissions}}).then(function(e){if(e)for(var t=0;t<o.customDashboard.widgets.length;t+=1)o.customDashboard.widgets[t].id===e.id&&(o.customDashboard.widgets[t].attrs=e.attrs,o.customDashboard.widgets[t].voiceQueues=o.voiceQueues,o.customDashboard.widgets[t].voiceQueuesSelected=_.map(o.voiceQueues.rows,"id"),o.customDashboard.widgets[t].templateUrl="app/core/directives/ms-widget-engine/ms-widget-engine-"+o.customDashboard.widgets[t].type+"/ms-widget-engine."+o.customDashboard.widgets[t].type+".html")})},o.deleteWidget=function(t){var e=n.confirm().title("Would you like to delete "+t.title+"?").textContent("").ariaLabel("Delete Widget").ok("YES").cancel("NO");n.show(e).then(function(){return s.dashboardItem.delete({id:t.id}).$promise.then(function(e){_.remove(o.customDashboard.widgets,{id:t.id}),i.success({title:"Widget deleted!",msg:t.name?t.name+" has been deleted!":"Widget has been deleted!"})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){o.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETE.customDashboard"}];for(var t=0;t<e.data.errors.length;t++)i.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEdashboard",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()});console.error(e)})})}}e.$inject=["$mdDialog","$document","socket","toasty","api"],angular.module("app.tools").controller("CustomDashboardItemsController",e)}(),function(){"use strict";function e(t,e,n,a,o,i,s,r,l,d,c,m,u,p){var g=this;g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_DASHBOARDITEM",g.dashboarditem=angular.copy(l),g.dashboard=r,g.newDashboardItem=!1,g.selectedReport=[],g.query={fields:"createdAt,updatedAt,id,name,description,table,parent,conditions,joins",limit:10,page:1,sort:"-updatedAt"},g.dashboarditem?"web-report"==g.dashboarditem.type&&(g.apiName="custom"===g.dashboarditem.reportType?"analyticCustomReport":"analyticDefaultReport",d[g.apiName].get({fields:"id,name,parent"}).$promise.then(function(e){g.currentReport=_.find(e.rows,{id:g.dashboarditem.attrReport}),g.dashboarditem.report=g.currentReport.name,g.query.parent=g.currentReport.parent})):(g.dashboarditem={type:"counter",attrUrl:"https://",attrHourFormat:"HH:mm:ss",attrTimezone:"0.00",attrMetric:"total",attrSerie1:"total",attrSerie2:"null",attrSerie3:"null",attrRefresh:10,attrFontSize:20,foreground:"#2196f3",background:"#ffffff"},g.title="TOOLS.NEW_DASHBOARDITEM",g.newDashboardItem=!0),g.addNewDashboardItem=function(){g.errors=[],d.dashboard.addItem({id:e.params.id},g.dashboarditem).$promise.then(function(e){g.dashboard.unshift(e.toJSON()),s.success({title:"DashboardItem properly created",msg:g.dashboarditem.name?g.dashboarditem.name+" has been created!":""}),I(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.dashboardItem.save"}];for(var t=0;t<e.data.errors.length;t+=1)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboardItem.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveDashboardItem=function(){g.errors=[],d.dashboardItem.update({id:g.dashboarditem.id},g.dashboarditem).$promise.then(function(e){var t=_.find(g.dashboard,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),s.success({title:"DashboardItem properly saved!",msg:g.dashboarditem.name?g.dashboarditem.name+" has been saved!":""}),I(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.dashboardItem.update"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboardItem.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteDashboardItem=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The dashboarditem will be deleted.").ariaLabel("Delete DashboardItem").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.dashboardItem.delete({id:g.dashboarditem.id}).$promise.then(function(){_.remove(g.dashboard,{id:g.dashboarditem.id}),s.success({title:"DashboardItem properly deleted!",msg:(g.dashboarditem.name||"dashboarditem")+" has been deleted!"}),I(g.dashboarditem)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.dashboardItem.delete"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.dashboardItem.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.getReports=S,g.selectReport=function(){if(g.dashboarditem.report=g.selectedReport[0].name,g.dashboarditem.attrReport=g.selectedReport[0].id,g.dashboarditem.reportType=g.currentNode.custom?"custom":"default",!g.newDashboardItem){var e={name:"attrReport",type:g.dashboarditem.reportType,value:g.selectedReport[0].id};g.dashboarditem.attrs.splice(_.findIndex(g.dashboarditem.attrs,1,e))}t.dashboarditemForm.report.$setDirty(),a.hide()},g.closeReportDialog=function(){a.hide()},g.searchReport=function(){g.treeDefaultData=g.treeReports[0]?angular.fromJson(g.treeReports[0].tree):[],g.treeCustomData=g.treeReports[1]?angular.fromJson(g.treeReports[1].tree):[],g.treeConfig=(t={core:{multiple:!1,animation:!0,error:function(e){console.error("treeCtrl: error from js tree - "+angular.toJson(e))},check_callback:!0,worker:!0},version:1,plugins:["wholerow"]},"admin"!==g.currentUser.role?d.userProfileSection.get({fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:g.currentUser.userProfileId,sectionId:1203}).$promise.then(function(e){return g.userProfileSection=e&&1==e.count?e.rows[0]:null,t}).catch(function(e){s.error({title:"ERROR",msg:e.message})}):t),g.treeDefaultEvents=f(!1),g.treeCustomEvents=f(!0),a.show({controller:function(){return g},controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/partialViews/reports/treeReports.html",autoWrap:!0,skipHide:!0});var t},g.closeDialog=I,d.analyticTreeReport.get({}).$promise.then(function(e){g.treeReports=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TREEREPORTS",msg:e.data?JSON.stringify(e.data):e.toString()})});var v=[{id:401,type:"inbound"},{id:1501,type:"outbound"}],h=null;function f(e){return e?{loaded:E,select_node:b}:{loaded:y,select_node:A}}function b(e,t){g.treeDefaultInstance.jstree(!0).deselect_all(),g.treeDefaultInstance.jstree(!0).close_all(),g.currentNode=t.node,g.currentNode.custom=!0,g.currentPath=g.treeCustomInstance.jstree(!0).get_path(g.currentNode).join("/ "),g.apiName="analyticCustomReport",g.query.parent=t.node.id,S()}function A(e,t){g.treeCustomInstance.jstree(!0).deselect_all(),g.treeCustomInstance.jstree(!0).close_all(),g.currentNode=t.node,g.currentNode.custom=!1,g.currentPath=g.treeDefaultInstance.jstree(!0).get_path(g.currentNode).join("/ "),g.apiName="analyticDefaultReport",g.query.parent=t.node.id,S()}function E(){if(!g.newDashboardItem&&"analyticCustomReport"===g.apiName){var e=g.treeCustomInstance.jstree(!0).get_node(g.query.parent);b(0,{node:e,selected:e.id})}}function y(){if(!g.newDashboardItem&&"analyticDefaultReport"===g.apiName){var e=g.treeDefaultInstance.jstree(!0).get_node(g.query.parent);A(0,{node:e,selected:e.id})}}function S(){if(g.query.offset=(g.query.page-1)*g.query.limit,g.apiName)if("admin"===g.currentUser.role)g.promise=d[g.apiName].get(g.query,T).$promise;else{if(!g.userProfileSection)return T(null);if(g.userProfileSection.autoAssociation)g.promise=d[g.apiName].get(g.query,T).$promise;else{var a=[];g.promise=d[g.apiName].get(g.query).$promise.then(function(e){return 0<(a=e&&e.rows?e.rows:[]).length?d.userProfileResource.get({sectionId:g.userProfileSection.id,type:"analyticDefaultReport"===g.apiName?"DefaultReports":"CustomReports"}).$promise.then(function(e){var t=e&&e.rows?e.rows:[];if(0<t.length){var n=[];return a.forEach(function(e){_.find(t,["resourceId",e.id])&&n.push(e)}),T({count:n.length,rows:n})}return T(null)}):T(null)}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_REPORTS",msg:e.data?JSON.stringify(e.data):e.toString()})})}}}function T(e){g.reports=e||{count:0,rows:[]},g.newDashboardItem||g.selectedReport.push(_.find(g.reports.rows,{id:g.currentReport.id}))}function I(e){a.hide(e)}c.hasRole("admin")?d.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){g.voiceQueues=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VOICEQUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){h=e.rows||[]}).then(function(){for(var e=[],t=0;t<v.length;t++)e.push(d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:v[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<v.length;a++){var i=_.find(t,["sectionId",v[a].id]);if(i)if(i.autoAssociation){var s=[];h.forEach(function(e){e.type===v[a].type&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(d.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;g.dashboarditem&&(n=_.find(h,{id:Number(g.dashboarditem.attrVoiceQueues)}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&h.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),g.voiceQueues=t}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","dashboard","dashboarditem","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditDashboardItemDialogController",e)}(),function(){"use strict";function e(n,e,a,i,t,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.customDashboard=c||n.params.customDashboard||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.clonedialog=function(e,t){a.show({controller:"CustomDashboardcloneController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/customDashboards/edit/clone/clone.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{customDashboard:e,customDashboards:u.customDashboards?u.customDashboards.rows:[],crudPermissions:u.crudPermissions}})},u.gotogoto=function(e,t){n.go("app.dashboards.custom",{id:e.id})},u.alert=l.info,u.gotoCustomDashboards=function(){n.go("app.tools.customDashboards")},u.saveCustomDashboard=function(){r.dashboard.update({id:u.customDashboard.id},u.customDashboard).$promise.then(function(){l.success({title:"CustomDashboard updated!",msg:u.customDashboard.name?u.customDashboard.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETdashboard",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","customDashboard","userProfileSection"],angular.module("app.tools").controller("CustomDashboardController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_DISPOSITION",g.disposition=angular.copy(l),g.dispositions=r,g.newDisposition=!1,g.disposition||(g.disposition={},g.title="TOOLS.NEW_DISPOSITION",g.newDisposition=!0),g.addNewDisposition=function(){g.errors=[],d.disposition.save(g.disposition).$promise.then(function(e){g.dispositions.unshift(e.toJSON()),o.success({title:"Disposition properly created",msg:g.disposition.name?g.disposition.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveDisposition=function(){g.errors=[],d.disposition.update({id:g.disposition.id},g.disposition).$promise.then(function(e){var t=_.find(g.dispositions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Disposition properly saved!",msg:g.disposition.name?g.disposition.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteDisposition=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The disposition will be deleted.").ariaLabel("Delete Disposition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.disposition.delete({id:g.disposition.id}).$promise.then(function(){_.remove(g.dispositions,{id:g.disposition.id}),o.success({title:"Disposition properly deleted!",msg:(g.disposition.name||"disposition")+" has been deleted!"}),v(g.disposition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.disposition.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.disposition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","dispositions","disposition","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditDispositionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.dispositions=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="dispositions",b.listOrder="",b.listOrderAsc=null,b.selectedDispositions=[],b.query={fields:"createdAt,updatedAt,id,name",sort:"-updatedAt",MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/dispositions/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{disposition:e,dispositions:b.dispositions.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("disposition")+"?").htmlContent("<b>"+(e.name||"disposition")+"</b> will be deleted.").ariaLabel("delete disposition").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getDispositions=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.disposition.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Dispositions",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditDisposition=function(e,t){i.show({controller:"CreateOrEditDispositionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/dispositions/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{disposition:t,dispositions:b.dispositions.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteDisposition=S,b.exportSelectedDispositions=function(){var e=angular.copy(b.selectedDispositions);return b.selectedDispositions=[],e},b.deleteSelectedDispositions=function(e){var t=i.confirm().title("Are you sure want to delete the selected dispositions?").htmlContent("<b>"+b.selectedDispositions.length+" selected</b> will be deleted.").ariaLabel("delete Dispositions").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedDispositions.forEach(function(e){S(e)}),b.selectedDispositions=[]})},b.deselectDispositions=function(){b.selectedDispositions=[]},b.selectAllDispositions=function(){b.selectedDispositions=b.dispositions.rows};var A=!0,E=1;function y(e){b.dispositions=e||{count:0,rows:[]}}function S(e){m.disposition.delete({id:e.id}).$promise.then(function(){_.remove(b.dispositions.rows,{id:e.id}),b.dispositions.count-=1,b.dispositions.rows.length||b.getDispositions(),p.success({title:_.startCase("Disposition")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEdisposition"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEdisposition",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getDispositions())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","dispositions","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("DispositionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_INTERVAL",g.interval=angular.copy(l),g.intervals=r,g.newInterval=!1,g.interval||(g.interval={},g.title="TOOLS.NEW_INTERVAL",g.newInterval=!0),g.addNewInterval=function(){g.errors=[],d.interval.save(g.interval).$promise.then(function(e){g.intervals.unshift(e.toJSON()),o.success({title:"Interval properly created",msg:g.interval.name?g.interval.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.interval.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveInterval=function(){g.errors=[],d.interval.update({id:g.interval.id},g.interval).$promise.then(function(e){var t=_.find(g.intervals,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Interval properly saved!",msg:g.interval.name?g.interval.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.interval.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteInterval=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The interval will be deleted.").ariaLabel("Delete Interval").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.interval.delete({id:g.interval.id}).$promise.then(function(){_.remove(g.intervals,{id:g.interval.id}),o.success({title:"Interval properly deleted!",msg:(g.interval.name||"interval")+" has been deleted!"}),v(g.interval)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.interval.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.interval.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","intervals","interval","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditIntervalDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditAppintervalDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.interval={},c.intervalIntervals={count:0,rows:[]},c.selectedIntervalIntervals=[],c.crudPermissions,c.sortableTable={animation:100,onSort:function(e){l.interval.addIntervals({id:c.interval.id},e.models).$promise.then(function(e){c.intervalIntervals.rows=e}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:SORTABLETABLE",msg:e.data?JSON.stringify(e.data):e.toString()})})}},c.query={fields:"createdAt,updatedAt,id,name,interval",nolimit:"true",limit:10,page:1},c.init=function(e,t){c.interval=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.sortableTable.disabled=!c.crudPermissions.canEdit,c.query.id=c.interval.id,c.getIntervalIntervals()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the interval?").htmlContent("<b>"+(e.name||"interval")+"</b> will be deleted.").ariaLabel("delete interval").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getIntervalIntervals=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.interval.getIntervals(c.query,p).$promise},c.createOrEditIntervalInterval=function(e,t){s.show({controller:"EditAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/intervals/edit/apps/interval/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:c.interval,interval:t,intervals:c.intervalIntervals.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedIntervalIntervals=function(){var e=angular.copy(c.selectedIntervalIntervals);return c.selectedIntervalIntervals=[],e},c.deleteIntervalInterval=g,c.deleteSelectedIntervalIntervals=function(e){var t=s.confirm().title("Are you sure want to delete the selected intervals?").htmlContent("<b>"+c.selectedIntervalIntervals.length+" selected</b> will be deleted.").ariaLabel("delete intervals").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedIntervalIntervals.forEach(function(e){g(e)}),c.selectedIntervalIntervals=[]})};var m=!0,u=1;function p(e){c.intervalIntervals=e||{count:0,rows:[]}}function g(e){l.interval.delete({id:e.id}).$promise.then(function(){_.remove(c.intervalIntervals.rows,{id:e.id}),c.intervalIntervals.count-=1,c.intervalIntervals.rows.length||c.getIntervalIntervals(),r.success({title:"Interval deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETinterval"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getIntervalIntervals())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.tools").controller("IntervalIntervalsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_INTERVAL",g.interval=angular.copy(l),g.intervals=r,g.newInterval=!1,g.interval||(g.interval={},g.title="TOOLS.NEW_INTERVAL",g.newInterval=!0),g.addNewInterval=function(){g.errors=[],d.interval.save(g.interval).$promise.then(function(e){g.intervals.unshift(e.toJSON()),o.success({title:"Interval properly created",msg:g.interval.name?g.interval.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.interval.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveInterval=function(){g.errors=[],d.interval.update({id:g.interval.id},g.interval).$promise.then(function(e){var t=_.find(g.intervals,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Interval properly saved!",msg:g.interval.name?g.interval.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.interval.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteInterval=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The interval will be deleted.").ariaLabel("Delete Interval").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.interval.delete({id:g.interval.id}).$promise.then(function(){_.remove(g.intervals,{id:g.interval.id}),o.success({title:"Interval properly deleted!",msg:(g.interval.name||"interval")+" has been deleted!"}),v(g.interval)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.interval.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.interval.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","intervals","interval","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditIntervalDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.interval=c||e.params.interval||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoIntervals=function(){e.go("app.tools.intervals")},u.saveInterval=function(){r.interval.update({id:u.interval.id},u.interval).$promise.then(function(){l.success({title:"Interval updated!",msg:u.interval.name?u.interval.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETinterval",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","interval","userProfileSection"],angular.module("app.tools").controller("IntervalController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.intervals=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="intervals",b.listOrder="",b.listOrderAsc=null,b.selectedIntervals=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",IntervalId:"null",limit:10,page:1},b.editstate=function(e,t){n.go("app.tools.intervals.edit",{id:e.id,interval:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("interval")+"?").htmlContent("<b>"+(e.name||"interval")+"</b> will be deleted.").ariaLabel("delete interval").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getIntervals=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.interval.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Intervals",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditInterval=function(e,t){i.show({controller:"CreateOrEditIntervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/intervals/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:t,intervals:b.intervals.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteInterval=S,b.exportSelectedIntervals=function(){var e=angular.copy(b.selectedIntervals);return b.selectedIntervals=[],e},b.deleteSelectedIntervals=function(e){var t=i.confirm().title("Are you sure want to delete the selected intervals?").htmlContent("<b>"+b.selectedIntervals.length+" selected</b> will be deleted.").ariaLabel("delete Intervals").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedIntervals.forEach(function(e){S(e)}),b.selectedIntervals=[]})},b.deselectIntervals=function(){b.selectedIntervals=[]},b.selectAllIntervals=function(){b.selectedIntervals=b.intervals.rows};var A=!0,E=1;function y(e){b.intervals=e||{count:0,rows:[]}}function S(e){m.interval.delete({id:e.id}).$promise.then(function(){_.remove(b.intervals.rows,{id:e.id}),b.intervals.count-=1,b.intervals.rows.length||b.getIntervals(),p.success({title:_.startCase("Interval")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEinterval"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEinterval",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getIntervals())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","intervals","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("IntervalsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_PAUSE",g.pause=angular.copy(l),g.pauses=r,g.newPause=!1,g.pause||(g.pause={},g.title="TOOLS.NEW_PAUSE",g.newPause=!0),g.addNewPause=function(){g.errors=[],d.pause.save(g.pause).$promise.then(function(e){g.pauses.unshift(e.toJSON()),o.success({title:"Pause properly created",msg:g.pause.name?g.pause.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.pause.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pause.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.savePause=function(){g.errors=[],d.pause.update({id:g.pause.id},g.pause).$promise.then(function(e){var t=_.find(g.pauses,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Pause properly saved!",msg:g.pause.name?g.pause.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.pause.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pause.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deletePause=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The pause will be deleted.").ariaLabel("Delete Pause").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.pause.delete({id:g.pause.id}).$promise.then(function(){_.remove(g.pauses,{id:g.pause.id}),o.success({title:"Pause properly deleted!",msg:(g.pause.name||"pause")+" has been deleted!"}),v(g.pause)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.pause.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.pause.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","pauses","pause","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditPauseDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.pauses=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="pauses",b.listOrder="",b.listOrderAsc=null,b.selectedPauses=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditPauseDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/pauses/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{pause:e,pauses:b.pauses.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("pause")+"?").htmlContent("<b>"+(e.name||"pause")+"</b> will be deleted.").ariaLabel("delete pause").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getPauses=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.pause.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Pauses",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditPause=function(e,t){i.show({controller:"CreateOrEditPauseDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/pauses/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{pause:t,pauses:b.pauses.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deletePause=S,b.exportSelectedPauses=function(){var e=angular.copy(b.selectedPauses);return b.selectedPauses=[],e},b.deleteSelectedPauses=function(e){var t=i.confirm().title("Are you sure want to delete the selected pauses?").htmlContent("<b>"+b.selectedPauses.length+" selected</b> will be deleted.").ariaLabel("delete Pauses").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedPauses.forEach(function(e){S(e)}),b.selectedPauses=[]})},b.deselectPauses=function(){b.selectedPauses=[]},b.selectAllPauses=function(){b.selectedPauses=b.pauses.rows};var A=!0,E=1;function y(e){b.pauses=e||{count:0,rows:[]}}function S(e){m.pause.delete({id:e.id}).$promise.then(function(){_.remove(b.pauses.rows,{id:e.id}),b.pauses.count-=1,b.pauses.rows.length||b.getPauses(),p.success({title:_.startCase("Pause")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEpause"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEpause",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getPauses())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","pauses","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("PausesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;if(g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_SCHEDULE",g.schedule=angular.copy(l),g.schedules=r,g.newSchedule=!1,g.selectedReport=[],g.query={fields:"createdAt,updatedAt,id,name,description,table,parent,conditions,joins",limit:10,page:1,sort:"-updatedAt"},g.schedule){g.apiName=g.schedule.DefaultReportId?"analyticDefaultReport":"analyticCustomReport";var v=g.schedule.DefaultReportId?g.schedule.DefaultReportId:g.schedule.CustomReportId;d[g.apiName].get({fields:"id,name,parent"}).$promise.then(function(e){g.currentReport=_.find(e.rows,{id:v}),g.schedule.report=g.currentReport.name,g.query.parent=g.currentReport.parent})}else g.schedule={output:"xlsx",active:!0,startAt:new Date,endAt:new Date(Date.now()+2592e6),cron:"0 0 * * *",subtractNumber:1,subtractUnit:"days",sendMail:!1,sendIfEmpty:!0},g.title="TOOLS.NEW_SCHEDULE",g.newSchedule=!0;function h(e){return e?{loaded:A,select_node:f}:{loaded:E,select_node:b}}function f(e,t){g.treeDefaultInstance.jstree(!0).deselect_all(),g.treeDefaultInstance.jstree(!0).close_all(),g.currentNode=t.node,g.currentNode.custom=!0,g.currentPath=g.treeCustomInstance.jstree(!0).get_path(g.currentNode).join("/ "),g.apiName="analyticCustomReport",g.query.parent=t.node.id,y()}function b(e,t){g.treeCustomInstance.jstree(!0).deselect_all(),g.treeCustomInstance.jstree(!0).close_all(),g.currentNode=t.node,g.currentNode.custom=!1,g.currentPath=g.treeDefaultInstance.jstree(!0).get_path(g.currentNode).join("/ "),g.apiName="analyticDefaultReport",g.query.parent=t.node.id,y()}function A(){if(!g.newSchedule&&"analyticCustomReport"===g.apiName){var e=g.treeCustomInstance.jstree(!0).get_node(g.query.parent);f(0,{node:e,selected:e.id})}}function E(){if(!g.newSchedule&&"analyticDefaultReport"===g.apiName){var e=g.treeDefaultInstance.jstree(!0).get_node(g.query.parent);b(0,{node:e,selected:e.id})}}function y(){if(g.query.offset=(g.query.page-1)*g.query.limit,g.apiName)if("admin"===g.currentUser.role)g.promise=d[g.apiName].get(g.query,S).$promise;else{if(!g.userProfileSection)return S(null);if(g.userProfileSection.autoAssociation)g.promise=d[g.apiName].get(g.query,S).$promise;else{var a=[];g.promise=d[g.apiName].get(g.query).$promise.then(function(e){return 0<(a=e&&e.rows?e.rows:[]).length?d.userProfileResource.get({sectionId:g.userProfileSection.id,type:"analyticDefaultReport"===g.apiName?"DefaultReports":"CustomReports"}).$promise.then(function(e){var t=e&&e.rows?e.rows:[];if(0<t.length){var n=[];return a.forEach(function(e){_.find(t,["resourceId",e.id])&&n.push(e)}),S({count:n.length,rows:n})}return S(null)}):S(null)}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_REPORTS",msg:e.data?JSON.stringify(e.data):e.toString()})})}}}function S(e){g.reports=e||{count:0,rows:[]},g.newSchedule||g.selectedReport.push(_.find(g.reports.rows,{id:g.currentReport.id}))}function T(e){a.hide(e)}g.addNewSchedule=function(){g.errors=[],d.schedule.save(g.schedule).$promise.then(function(e){g.schedules.unshift(e.toJSON()),o.success({title:"Schedule properly created",msg:g.schedule.name?g.schedule.name+" has been created!":""}),T(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.schedule.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.schedule.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSchedule=function(){g.errors=[],d.schedule.update({id:g.schedule.id},g.schedule).$promise.then(function(e){var t=_.find(g.schedules,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Schedule properly saved!",msg:g.schedule.name?g.schedule.name+" has been saved!":""}),T(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.schedule.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.schedule.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSchedule=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The schedule will be deleted.").ariaLabel("Delete Schedule").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.schedule.delete({id:g.schedule.id}).$promise.then(function(){_.remove(g.schedules,{id:g.schedule.id}),o.success({title:"Schedule properly deleted!",msg:(g.schedule.name||"schedule")+" has been deleted!"}),T(g.schedule)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.schedule.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.schedule.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.getReports=y,g.selectReport=function(){g.schedule.report=g.selectedReport[0].name,g.currentNode.custom?(g.schedule.CustomReportId=g.selectedReport[0].id,delete g.schedule.DefaultReportId):(g.schedule.DefaultReportId=g.selectedReport[0].id,delete g.schedule.CustomReportId);e.scheduleForm.report.$setDirty(),a.hide()},g.closeReportDialog=function(){a.hide()},g.searchReport=function(){g.treeDefaultData=g.treeReports[0]?angular.fromJson(g.treeReports[0].tree):[],g.treeCustomData=g.treeReports[1]?angular.fromJson(g.treeReports[1].tree):[],g.treeConfig=(t={core:{multiple:!1,animation:!0,error:function(e){console.error("treeCtrl: error from js tree - "+angular.toJson(e))},check_callback:!0,worker:!0},version:1,plugins:["wholerow"]},"admin"!==g.currentUser.role?d.userProfileSection.get({fields:"id,name,enabled,includeAll,autoAssociation,crudPermissions",userProfileId:g.currentUser.userProfileId,sectionId:1203}).$promise.then(function(e){return g.userProfileSection=e&&1==e.count?e.rows[0]:null,t}).catch(function(e){o.error({title:"ERROR",msg:e.message})}):t),g.treeDefaultEvents=h(!1),g.treeCustomEvents=h(!0),a.show({controller:function(){return g},controllerAs:"vm",templateUrl:"app/main/apps/tools/views/schedules/partialViews/reports/treeReports.html",autoWrap:!0,skipHide:!0});var t},g.closeDialog=T,d.analyticTreeReport.get({}).$promise.then(function(e){g.treeReports=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TREEREPORTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.hasRole("admin")?d.mailAccount.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.mailAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MAILACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.mailAccount.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.mailAccounts=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:602}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.mailAccounts,{id:e.resourceId})}),n=null;if(g.schedule&&(n=_.find(g.mailAccounts,{id:Number(g.schedule.MailAccountId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.mailAccounts,{id:n.id});a.canSelect=!1,t.push(a)}g.mailAccounts=t})}else{var n=[],a=null;g.schedule&&(a=_.find(g.mailAccounts,{id:Number(g.schedule.MailAccountId)}));for(var i=0;i<g.mailAccounts.length;i++)a&&g.mailAccounts[i].id===a.id&&(g.mailAccounts[i].canSelect=!1,n.push(g.mailAccounts[i]));g.mailAccounts=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","schedules","schedule","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditScheduleDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.schedules=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="schedules",b.listOrder="",b.listOrderAsc=null,b.selectedScheduler=[],b.query={fields:"createdAt,updatedAt,id,name,CustomReportId,DefaultReportId,output,active,startAt,endAt,cron,subtractNumber,subtractUnit,sendMail,MailAccountId,email,cc,bcc,sendIfEmpty,description",sort:"-updatedAt",limit:10,page:1},b.arrayoutput=_.keyBy([{option:"CSV",value:"'csv'"},{option:"PDF",value:"'pdf'"},{option:"Excel",value:"'xlsx'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysubtractUnit=_.keyBy([{option:"Minutes",value:"'minutes'"},{option:"Hours",value:"'hours'"},{option:"Days",value:"'days'"},{option:"Weeks",value:"'weeks'"},{option:"Months",value:"'months'"},{option:"Quarters",value:"'quarters'"},{option:"Years",value:"'years'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editdialog=function(e,t){i.show({controller:"CreateOrEditScheduleDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/schedules/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{schedule:e,schedules:b.schedules.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.runconfirm=function(e,t){var n=i.confirm().title("Are you sure want to run the schedule?").htmlContent("<b>"+(e.name||"schedule")+"</b> will be run.").ariaLabel("delete schedule").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){return m.schedule.run({id:e.id}).$promise},function(){console.log("CANCEL")})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("schedule")+"?").htmlContent("<b>"+(e.name||"schedule")+"</b> will be deleted.").ariaLabel("delete schedule").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getScheduler=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.schedule.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Scheduler",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSchedule=function(e,t){i.show({controller:"CreateOrEditScheduleDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/schedules/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{schedule:t,schedules:b.schedules.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSchedule=S,b.exportSelectedScheduler=function(){var e=angular.copy(b.selectedScheduler);return b.selectedScheduler=[],e},b.deleteSelectedScheduler=function(e){var t=i.confirm().title("Are you sure want to delete the selected schedules?").htmlContent("<b>"+b.selectedScheduler.length+" selected</b> will be deleted.").ariaLabel("delete Schedules").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedScheduler.forEach(function(e){S(e)}),b.selectedScheduler=[]})},b.deselectScheduler=function(){b.selectedScheduler=[]},b.selectAllScheduler=function(){b.selectedScheduler=b.schedules.rows},m.analyticTreeReport.get({}).$promise.then(function(e){b.treeReports=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TREEREPORTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),g.hasRole("admin")?m.mailAccount.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.mailAccounts=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MAILACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.mailAccount.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.mailAccounts=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:602}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.mailAccounts,{id:e.resourceId})}),n=null;if(b.schedule&&(n=_.find(b.mailAccounts,{id:Number(b.schedule.MailAccountId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.mailAccounts,{id:n.id});a.canSelect=!1,t.push(a)}b.mailAccounts=t})}else{var n=[],a=null;b.schedule&&(a=_.find(b.mailAccounts,{id:Number(b.schedule.MailAccountId)}));for(var i=0;i<b.mailAccounts.length;i++)a&&b.mailAccounts[i].id===a.id&&(b.mailAccounts[i].canSelect=!1,n.push(b.mailAccounts[i]));b.mailAccounts=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.schedules=e||{count:0,rows:[]}}function S(e){m.schedule.delete({id:e.id}).$promise.then(function(){_.remove(b.schedules.rows,{id:e.id}),b.schedules.count-=1,b.schedules.rows.length||b.getScheduler(),p.success({title:_.startCase("Schedule")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEschedule"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEschedule",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getScheduler())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","schedules","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("SchedulesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_SOUND",g.sound=angular.copy(l),g.sounds=r,g.newSound=!1,g.sound||(g.sound={},g.title="TOOLS.NEW_SOUND",g.newSound=!0),g.addNewSound=function(){g.errors=[],d.sound.save(g.sound).$promise.then(function(e){g.sounds.unshift(e.toJSON()),o.success({title:"Sound properly created",msg:g.sound.name?g.sound.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.sound.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.sound.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveSound=function(){g.errors=[],d.sound.update({id:g.sound.id},g.sound).$promise.then(function(e){var t=_.find(g.sounds,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Sound properly saved!",msg:g.sound.name?g.sound.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.sound.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.sound.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteSound=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The sound will be deleted.").ariaLabel("Delete Sound").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.sound.delete({id:g.sound.id}).$promise.then(function(){_.remove(g.sounds,{id:g.sound.id}),o.success({title:"Sound properly deleted!",msg:(g.sound.name||"sound")+" has been deleted!"}),v(g.sound)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.sound.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.sound.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","sounds","sound","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditSoundDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.sounds=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="sounds",b.listOrder="",b.listOrderAsc=null,b.selectedSounds=[],b.query={fields:"createdAt,updatedAt,id,save_name,converted_format,name,audio,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/sounds/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{sound:e,sounds:b.sounds.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.downloadfile2=function(s,e){return m.sound.download({id:s.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=s.converted_format?s.save_name+"."+s.converted_format:s.save_name;var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.sound.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("sound")+"?").htmlContent("<b>"+(e.name||"sound")+"</b> will be deleted.").ariaLabel("delete sound").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getSounds=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.sound.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Sounds",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditSound=function(e,t){i.show({controller:"CreateOrEditSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/sounds/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{sound:t,sounds:b.sounds.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteSound=S,b.exportSelectedSounds=function(){var e=angular.copy(b.selectedSounds);return b.selectedSounds=[],e},b.deleteSelectedSounds=function(e){var t=i.confirm().title("Are you sure want to delete the selected sounds?").htmlContent("<b>"+b.selectedSounds.length+" selected</b> will be deleted.").ariaLabel("delete Sounds").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedSounds.forEach(function(e){S(e)}),b.selectedSounds=[]})},b.deselectSounds=function(){b.selectedSounds=[]},b.selectAllSounds=function(){b.selectedSounds=b.sounds.rows},b.uploadSound=function(e){i.show({controller:"UploadSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/sounds/upload/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{sounds:b.sounds.rows}})};var A=!0,E=1;function y(e){b.sounds=e||{count:0,rows:[]}}function S(e){m.sound.delete({id:e.id}).$promise.then(function(){_.remove(b.sounds.rows,{id:e.id}),b.sounds.count-=1,b.sounds.rows.length||b.getSounds(),p.success({title:_.startCase("Sound")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEsound"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEsound",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getSounds())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","sounds","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("SoundsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this,r=15,l=1024*r*1024;o.currentUser=s.getCurrentUser(),o.errors=[],o.title="TOOLS.UPLOAD_SOUND",o.sounds=a,o.uploadSounds=[],o.uploadState="none",o.sound={},o.ngFlowOptions={maxChunkRetries:1,chunkSize:l,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0,target:"api/sounds"},o.ngFlow={flow:{}},o.dropping=!1,o.fileAdded=function(e){var t=["wav","mp3","gsm"];if(!_.includes(t,e.getExtension()))return n.error({title:"Invalid extension: "+e.getExtension(),msg:"Supported extension: "+t.join()}),!1;if(e.size>l)return n.error({title:"File too big",msg:"The max allowed size is "+r+"MB"}),!1;return o.sound={id:e.uniqueIdentifier,file:e},o.uploadSounds.unshift(o.sound),!0},o.upload=function(){o.uploadState="uploading",o.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},o.ngFlow.flow.opts.query={role:o.currentUser.role,userProfileId:o.currentUser.userProfileId},o.ngFlow.flow.upload()},o.fileSuccess=function(a,e){o.sounds.unshift(JSON.parse(e)),angular.forEach(o.uploadSounds,function(t,e){if(t.id===a.uniqueIdentifier){var n=new FileReader;n.readAsDataURL(t.file.file),n.onload=function(e){t.url=e.target.result}}})},o.uploadError=function(e,t){o.ngFlow.flow.cancel(),n.error({title:"Upload error",msg:"Cannot upload the sound"}),o.uploadState="failed"},o.uploadComplete=function(){"failed"!==o.uploadState&&(o.uploadState="completed",n.success({title:"Upload completed",msg:o.sound.file.name+" uploaded successfully"}))},o.closeDialog=function(){t.hide()}}e.$inject=["$cookies","$mdDialog","toasty","sounds","api","Auth"],angular.module("app.tools").controller("UploadSoundDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_TAG",g.tag=angular.copy(l),g.tags=r,g.newTag=!1,g.tag||(g.tag={},g.title="TOOLS.NEW_TAG",g.newTag=!0),g.addNewTag=function(){g.errors=[],d.tag.save(g.tag).$promise.then(function(e){g.tags.unshift(e.toJSON()),o.success({title:"Tag properly created",msg:g.tag.name?g.tag.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.tag.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.tag.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveTag=function(){g.errors=[],d.tag.update({id:g.tag.id},g.tag).$promise.then(function(e){var t=_.find(g.tags,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Tag properly saved!",msg:g.tag.name?g.tag.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.tag.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.tag.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteTag=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The tag will be deleted.").ariaLabel("Delete Tag").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.tag.delete({id:g.tag.id}).$promise.then(function(){_.remove(g.tags,{id:g.tag.id}),o.success({title:"Tag properly deleted!",msg:(g.tag.name||"tag")+" has been deleted!"}),v(g.tag)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.tag.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.tag.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","tags","tag","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditTagDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.tags=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="tags",b.listOrder="",b.listOrderAsc=null,b.selectedTags=[],b.query={fields:"createdAt,updatedAt,id,name,description,color",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditTagDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/tags/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{tag:e,tags:b.tags.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("tag")+"?").htmlContent("<b>"+(e.name||"tag")+"</b> will be deleted.").ariaLabel("delete tag").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getTags=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.tag.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Tags",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditTag=function(e,t){i.show({controller:"CreateOrEditTagDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/tags/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{tag:t,tags:b.tags.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteTag=S,b.exportSelectedTags=function(){var e=angular.copy(b.selectedTags);return b.selectedTags=[],e},b.deleteSelectedTags=function(e){var t=i.confirm().title("Are you sure want to delete the selected tags?").htmlContent("<b>"+b.selectedTags.length+" selected</b> will be deleted.").ariaLabel("delete Tags").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedTags.forEach(function(e){S(e)}),b.selectedTags=[]})},b.deselectTags=function(){b.selectedTags=[]},b.selectAllTags=function(){b.selectedTags=b.tags.rows};var A=!0,E=1;function y(e){b.tags=e||{count:0,rows:[]}}function S(e){m.tag.delete({id:e.id}).$promise.then(function(){_.remove(b.tags.rows,{id:e.id}),b.tags.count-=1,b.tags.rows.length||b.getTags(),p.success({title:_.startCase("Tag")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtag"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEtag",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getTags())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","tags","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TagsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_TEMPLATE",g.template=angular.copy(l),g.templates=r,g.newTemplate=!1,g.template||(g.template={},g.title="TOOLS.NEW_TEMPLATE",g.newTemplate=!0),g.addNewTemplate=function(){g.errors=[],d.template.save(g.template).$promise.then(function(e){g.templates.unshift(e.toJSON()),o.success({title:"Template properly created",msg:g.template.name?g.template.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.template.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.template.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveTemplate=function(){g.errors=[],d.template.update({id:g.template.id},g.template).$promise.then(function(e){var t=_.find(g.templates,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Template properly saved!",msg:g.template.name?g.template.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.template.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.template.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteTemplate=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The template will be deleted.").ariaLabel("Delete Template").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.template.delete({id:g.template.id}).$promise.then(function(){_.remove(g.templates,{id:g.template.id}),o.success({title:"Template properly deleted!",msg:(g.template.name||"template")+" has been deleted!"}),v(g.template)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.template.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.template.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","templates","template","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditTemplateDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.templates=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="templates",b.listOrder="",b.listOrderAsc=null,b.selectedTemplates=[],b.query={fields:"createdAt,updatedAt,id,name,html,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditTemplateDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/templates/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{template:e,templates:b.templates.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("template")+"?").htmlContent("<b>"+(e.name||"template")+"</b> will be deleted.").ariaLabel("delete template").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getTemplates=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.template.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Templates",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditTemplate=function(e,t){i.show({controller:"CreateOrEditTemplateDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/templates/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{template:t,templates:b.templates.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteTemplate=S,b.exportSelectedTemplates=function(){var e=angular.copy(b.selectedTemplates);return b.selectedTemplates=[],e},b.deleteSelectedTemplates=function(e){var t=i.confirm().title("Are you sure want to delete the selected templates?").htmlContent("<b>"+b.selectedTemplates.length+" selected</b> will be deleted.").ariaLabel("delete Templates").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedTemplates.forEach(function(e){S(e)}),b.selectedTemplates=[]})},b.deselectTemplates=function(){b.selectedTemplates=[]},b.selectAllTemplates=function(){b.selectedTemplates=b.templates.rows};var A=!0,E=1;function y(e){b.templates=e||{count:0,rows:[]}}function S(e){m.template.delete({id:e.id}).$promise.then(function(){_.remove(b.templates.rows,{id:e.id}),b.templates.count-=1,b.templates.rows.length||b.getTemplates(),p.success({title:_.startCase("Template")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtemplate"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEtemplate",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getTemplates())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","templates","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TemplatesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_TRIGGER",g.trigger=angular.copy(l),g.triggers=r,g.newTrigger=!1,g.trigger||(g.trigger={channel:"voice"},g.title="TOOLS.NEW_TRIGGER",g.newTrigger=!0),g.addNewTrigger=function(){g.errors=[],d.trigger.save(g.trigger).$promise.then(function(e){g.triggers.unshift(e.toJSON()),o.success({title:"Trigger properly created",msg:g.trigger.name?g.trigger.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.trigger.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trigger.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveTrigger=function(){g.errors=[],d.trigger.update({id:g.trigger.id},g.trigger).$promise.then(function(e){var t=_.find(g.triggers,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Trigger properly saved!",msg:g.trigger.name?g.trigger.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.trigger.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trigger.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteTrigger=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The trigger will be deleted.").ariaLabel("Delete Trigger").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.trigger.delete({id:g.trigger.id}).$promise.then(function(){_.remove(g.triggers,{id:g.trigger.id}),o.success({title:"Trigger properly deleted!",msg:(g.trigger.name||"trigger")+" has been deleted!"}),v(g.trigger)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.trigger.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trigger.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","triggers","trigger","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditTriggerDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.trigger={},c.triggerActions={count:0,rows:[]},c.selectedTriggerActions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,action,data1,data2,data6,data7,data3,data4,data5",limit:10,page:1},c.arrayaction=_.keyBy([{option:"CONTACT_MANAGER",value:"'contactManager'",ngIf:"vm.trigger.channel == 'voice'"},{option:"INTEGRATIONS",value:"'integration'",ngIf:"vm.trigger.channel == 'voice' && ((vm.newAction && vm.hasModulePermissions.Integrations) || !vm.newAction)"},{option:"MOTION_BAR",value:"'motionbar'"},{option:"JSCRIPTY",value:"'jscripty'"},{option:"URL_FORWARD",value:"'urlForward'"},{option:"BROWSER",value:"'browser'"},{option:"BOT",value:"'bot'",ngIf:"vm.trigger.channel == 'voice'"},{option:"SCRIPT",value:"'script'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.browserValues=_.keyBy([{option:"Popup",value:"'0'"},{option:"CTI URL",value:"'1'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.autoCreateContact=_.keyBy([{option:"yes",value:"'1'"},{option:"no",value:"'0'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.urlForwardValues=_.keyBy([{option:"GET",value:"'GET'"},{option:"POST",value:"'POST'"},{option:"PUT",value:"'PUT'"},{option:"DELETE",value:"'DELETE'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.integrationValues=_.keyBy([{option:"Zendesk",value:"'zendesk'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1301]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1301])"},{option:"Salesforce",value:"'salesforce'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1302]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1302])"},{option:"SugarCRM",value:"'sugarcrm'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1305]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1305])"},{option:"Freshdesk",value:"'freshdesk'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1303]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1303])"},{option:"Desk",value:"'desk'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1306]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1306])"},{option:"Zoho",value:"'zoho'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1307]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1307])"},{option:"vTiger",value:"'vtiger'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1308]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1308])"},{option:"Dynamics365",value:"'dynamics365'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1309]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1309])"},{option:"ServiceNow",value:"'servicenow'",ngIf:"(vm.newAction && vm.hasSectionPermissions[1310]) || !vm.newAction",disabled:"(!vm.newAction && !vm.hasSectionPermissions[1310])"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.motionbarValues=_.keyBy([{option:"Popup",value:"'0'"},{option:"CTI URL",value:"'1'"},{option:"Windows App",value:"'2'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.eventVariables=_.keyBy([{option:"yes",value:"'1'"},{option:"no",value:"'0'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.location=_.keyBy([{option:"NEW_TAB",value:"'0'"},{option:"NEW_WINDOW",value:"'1'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.trigger=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.trigger.id,c.query.ActionId=c.trigger.id,c.getTriggerActions(),n=[1301,1302,1303,1305,1306,1307,1308],d.hasModulesPermissions(["Integrations"]).then(function(e){c.hasModulePermissions=_.merge(c.hasModulePermissions,e)}).then(function(){d.hasSectionsPermissions(n).then(function(e){c.hasSectionPermissions=_.merge(c.hasSectionPermissions,e)})}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTEGRATIONS_PERMISSIONS",msg:e.data?JSON.stringify(e.data):e.toString()})});var n},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the action?").htmlContent("<b>"+(e.name||"action")+"</b> will be deleted.").ariaLabel("delete action").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.success=p,c.getTriggerActions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getActions(c.query,p).$promise},c.createOrEditTriggerAction=function(e,t){s.show({controller:"CreateOrEditActionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/triggers/edit/actions/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{trigger:c.trigger,action:t,actions:c.triggerActions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedTriggerActions=function(){var e=angular.copy(c.selectedTriggerActions);return c.selectedTriggerActions=[],e},c.deleteTriggerAction=g,c.deleteSelectedTriggerActions=function(e){var t=s.confirm().title("Are you sure want to delete the selected actions?").htmlContent("<b>"+c.selectedTriggerActions.length+" selected</b> will be deleted.").ariaLabel("delete actions").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedTriggerActions.forEach(function(e){g(e)}),c.selectedTriggerActions=[]})},d.hasRole("admin")?l.cmList.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){c.lists=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.cmList.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){c.lists=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.lists,{id:e.resourceId})}),a=null;a=[],c.triggerActions.rows.forEach(function(e){if("contactManager"===e.action){var t=_.find(c.lists,{id:Number(e.data1)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.lists,{id:e.id});t.canSelect=!1,n.push(t)}}),c.lists=n})}else{var n=[],a=[];c.triggerActions.rows.forEach(function(e){if("contactManager"===e.action){var t=_.find(c.lists,{id:Number(e.data1)});a.push(t)}});for(var i=0;i<c.lists.length;i++){_.some(a,{id:c.lists[i].id})&&(c.lists[i].canSelect=!1,n.push(c.lists[i]))}c.lists=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.jscriptyProject.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){c.projects=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.jscriptyProject.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){c.projects=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1701}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.projects,{id:e.resourceId})}),a=null;a=[],c.triggerActions.rows.forEach(function(e){if("jscripty"===e.action){var t=_.find(c.projects,{id:Number(e.data1)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.projects,{id:e.id});t.canSelect=!1,n.push(t)}}),c.projects=n})}else{var n=[],a=[];c.triggerActions.rows.forEach(function(e){if("jscripty"===e.action){var t=_.find(c.projects,{id:Number(e.data1)});a.push(t)}});for(var i=0;i<c.projects.length;i++){_.some(a,{id:c.projects[i].id})&&(c.projects[i].canSelect=!1,n.push(c.projects[i]))}c.projects=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intZendeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.zendeskAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZENDESKACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intDeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.deskAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DESKACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intZohoAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.zohoAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZOHOACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intSalesforceAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.salesforceAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SALESFORCEACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intSugarcrmAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.sugarcrmAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SUGARCRMACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intFreshdeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.freshdeskAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FRESHDESKACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intVtigerAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.vtigerAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VTIGERACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intDynamics365Account.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.dynamics365Accounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DYNAMICS365ACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intServicenowAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.servicenowAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SERVICENOWACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intZendeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.zendeskConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZENDESKCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intDeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.deskConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DESKCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intZohoConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.zohoConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZOHOCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intSalesforceConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.salesforceConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SALESFORCECONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intSugarcrmConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.sugarcrmConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SUGARCRMCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intFreshdeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.freshdeskConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FRESHDESKCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intVtigerConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.vtigerConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VTIGERCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intDynamics365Configuration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.dynamics365Configurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DYNAMICS365CONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),l.intServicenowConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){c.servicenowConfigurations=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SERVICENOWCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.template.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.templates=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEMPLATES",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.template.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.templates=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1009}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.templates,{id:e.resourceId})}),a=null;a=[],c.triggerActions.rows.forEach(function(e){if("motionbar"===e.action){var t=_.find(c.templates,{id:Number(e.data2)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.templates,{id:e.id});t.canSelect=!1,n.push(t)}}),c.templates=n})}else{var n=[],a=[];c.triggerActions.rows.forEach(function(e){if("motionbar"===e.action){var t=_.find(c.templates,{id:Number(e.data2)});a.push(t)}});for(var i=0;i<c.templates.length;i++){_.some(a,{id:c.templates[i].id})&&(c.templates[i].canSelect=!1,n.push(c.templates[i]))}c.templates=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtemplates",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=!0,u=1;function p(e){c.triggerActions=e||{count:0,rows:[]}}function g(e){l.action.delete({id:e.id}).$promise.then(function(){_.remove(c.triggerActions.rows,{id:e.id}),c.triggerActions.count-=1,c.triggerActions.rows.length||c.getTriggerActions(),r.success({title:"Action deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETtrigger"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrigger",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getTriggerActions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.tools").controller("TriggerActionsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g){var v=this;function h(e){a.hide(e)}v.currentUser=m.getCurrentUser(),v.errors=[],v.setting=p,v.license=u,v.crudPermissions=g,v.hasModulePermissions={},v.passwordPattern=v.setting&&v.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",v.title="TOOLS.EDIT_ACTION",v.action=angular.copy(l),v.actions=r,v.newAction=!1,v.trigger=angular.copy(d),v.action||(v.action={data3:"0",data4:"0",data5:"800",data6:"600"},v.title="TOOLS.NEW_ACTION",v.newAction=!0),t.params.id&&(v.action.ActionId=t.params.id),v.addNewAction=function(){v.errors=[],c.trigger.addAction({id:t.params.id},v.action).$promise.then(function(e){v.actions.unshift(e.toJSON()),o.success({title:"Action properly created",msg:v.action.name?v.action.name+" has been created!":""}),h(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.action.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.action.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.saveAction=function(){v.errors=[],c.action.update({id:v.action.id},v.action).$promise.then(function(e){var t=_.find(v.actions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Action properly saved!",msg:v.action.name?v.action.name+" has been saved!":""}),h(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.action.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.action.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteAction=function(e){v.errors=[];var t=a.confirm().title("Are you sure?").content("The action will be deleted.").ariaLabel("Delete Action").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.action.delete({id:v.action.id}).$promise.then(function(){_.remove(v.actions,{id:v.action.id}),o.success({title:"Action properly deleted!",msg:(v.action.name||"action")+" has been deleted!"}),h(v.action)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.action.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.action.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},v.getDateFromString=function(e){return null===e?void 0:new Date(e)},v.onActionInit=function(){m.hasModulesPermissions(["Integrations"]).then(function(e){v.hasModulePermissions=_.merge(v.hasModulePermissions,e)}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MODULES_PERMISSIONS",msg:e.data?JSON.stringify(e.data):e.toString()})})},v.onIntegrationInit=function(){m.hasSectionsPermissions([1301,1302,1303,1305,1306,1307,1308,1309,1310]).then(function(e){v.hasSectionPermissions=_.merge(v.hasSectionPermissions,e)}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SECTIONS_PERMISSIONS",msg:e.data?JSON.stringify(e.data):e.toString()})})},v.closeDialog=h,m.hasRole("admin")?c.cmList.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){v.lists=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_LISTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.cmList.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){v.lists=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:301}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.lists,{id:e.resourceId})}),n=null;if(v.action&&(n=_.find(v.lists,{id:Number(v.action.data1)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.lists,{id:n.id});a.canSelect=!1,t.push(a)}v.lists=t})}else{var n=[],a=null;v.action&&(a=_.find(v.lists,{id:Number(v.action.data1)}));for(var i=0;i<v.lists.length;i++)a&&v.lists[i].id===a.id&&(v.lists[i].canSelect=!1,n.push(v.lists[i]));v.lists=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETlists",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.jscriptyProject.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){v.projects=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.jscriptyProject.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){v.projects=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:1701}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.projects,{id:e.resourceId})}),n=null;if(v.action&&(n=_.find(v.projects,{id:Number(v.action.data1)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.projects,{id:n.id});a.canSelect=!1,t.push(a)}v.projects=t})}else{var n=[],a=null;v.action&&(a=_.find(v.projects,{id:Number(v.action.data1)}));for(var i=0;i<v.projects.length;i++)a&&v.projects[i].id===a.id&&(v.projects[i].canSelect=!1,n.push(v.projects[i]));v.projects=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intZendeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.zendeskAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZENDESKACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intDeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.deskAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DESKACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intZohoAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.zohoAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZOHOACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intSalesforceAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.salesforceAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SALESFORCEACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intSugarcrmAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.sugarcrmAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SUGARCRMACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intFreshdeskAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.freshdeskAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FRESHDESKACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intVtigerAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.vtigerAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VTIGERACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intDynamics365Account.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.dynamics365Accounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DYNAMICS365ACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intServicenowAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.servicenowAccounts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SERVICENOWACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intZendeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.zendeskConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZENDESKCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intDeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.deskConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DESKCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intZohoConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.zohoConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_ZOHOCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intSalesforceConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.salesforceConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SALESFORCECONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intSugarcrmConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.sugarcrmConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SUGARCRMCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intFreshdeskConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.freshdeskConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FRESHDESKCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intVtigerConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.vtigerConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VTIGERCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intDynamics365Configuration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.dynamics365Configurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_DYNAMICS365CONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),c.intServicenowConfiguration.get({fields:"id,name,AccountId",sort:"id",nolimit:"true"}).$promise.then(function(e){v.servicenowConfigurations=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SERVICENOWCONFIGURATIONS",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.template.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.templates=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEMPLATES",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.template.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.templates=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:1009}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.templates,{id:e.resourceId})}),n=null;if(v.action&&(n=_.find(v.templates,{id:Number(v.action.data2)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.templates,{id:n.id});a.canSelect=!1,t.push(a)}v.templates=t})}else{var n=[],a=null;v.action&&(a=_.find(v.templates,{id:Number(v.action.data2)}));for(var i=0;i<v.templates.length;i++)a&&v.templates[i].id===a.id&&(v.templates[i].canSelect=!1,n.push(v.templates[i]));v.templates=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtemplates",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","actions","action","trigger","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditActionDialogController",e)}(),function(){"use strict";function e(e,t,n,o,a,i,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.trigger={},c.triggerAllConditions={count:0,rows:[]},c.selectedTriggerAllConditions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,field,operator,value",limit:10,page:1},c.arrayfield=_.keyBy([{option:"Queue",value:"'queue'",ngIf:"vm.trigger.channel == 'voice'"},{option:"Call_Status",value:"'lastevent'",ngIf:"vm.trigger.channel == 'voice'"},{option:"OutboundRoute",value:"'routeId'",ngIf:"vm.trigger.channel == 'voice'"},{option:"Agent",value:"'agent'",ngIf:"vm.trigger.channel == 'voice'"},{option:"Account",value:"'account'",ngIf:"vm.trigger.channel != 'voice'"},{option:"Interaction",value:"'interaction'",ngIf:"vm.trigger.channel != 'voice'"},{option:"Message",value:"'message'",ngIf:"vm.trigger.channel != 'voice'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.arrayoperator=_.keyBy([{option:"Equals",value:"'equals'"},{option:"Not_Equals",value:"'not_equals'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.callStatusValues=_.keyBy([{option:"Abandon",value:"'abandoned'"},{option:"Hangup",value:"'complete'"},{option:"Reject",value:"'rejected'"},{option:"Ring",value:"'called'"},{option:"Answer",value:"'connect'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.interactionStatusValues=_.keyBy([{option:"Opened",value:"'opened'"},{option:"Closed",value:"'closed'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.messageStatusValues=_.keyBy([{option:"Incoming",value:"'in'"},{option:"Outgoing",value:"'out'"},{option:"Accepted",value:"'accept'"},{option:"Rejected",value:"'reject'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.trigger=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.trigger.id,c.query.TriggerAllId=c.trigger.id,c.getTriggerAllConditions()},c.deleteConfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the allCondition?").htmlContent("<b>"+(e.name||"allCondition")+"</b> will be deleted.").ariaLabel("delete allCondition").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){f(e)},function(){console.log("CANCEL")})},c.success=h,c.getTriggerAllConditions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getAllConditions(c.query,h).$promise},c.createOrEditTriggerAllCondition=function(e,t){i.show({controller:"CreateOrEditAllConditionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/triggers/edit/allconditions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{trigger:c.trigger,allCondition:t,allconditions:c.triggerAllConditions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedTriggerAllConditions=function(){var e=angular.copy(c.selectedTriggerAllConditions);return c.selectedTriggerAllConditions=[],e},c.deleteTriggerAllCondition=f,c.deleteSelectedTriggerAllConditions=function(e){var t=i.confirm().title("Are you sure want to delete the selected allconditions?").htmlContent("<b>"+c.selectedTriggerAllConditions.length+" selected</b> will be deleted.").ariaLabel("delete allconditions").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){c.selectedTriggerAllConditions.forEach(function(e){f(e)}),c.selectedTriggerAllConditions=[]})},d.hasRole("admin")?l.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.chatAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CHATACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.chatAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:502}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.chatAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.chatAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.chatAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.chatAccounts=n})}else{var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.chatAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.chatAccounts.length;i++){_.some(a,{id:c.chatAccounts[i].id})&&(c.chatAccounts[i].canSelect=!1,n.push(c.chatAccounts[i]))}c.chatAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.mailAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MAILACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.mailAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:602}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.mailAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.mailAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.mailAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.mailAccounts=n})}else{var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.mailAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.mailAccounts.length;i++){_.some(a,{id:c.mailAccounts[i].id})&&(c.mailAccounts[i].canSelect=!1,n.push(c.mailAccounts[i]))}c.mailAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.smsAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SMSACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.smsAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:702}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.smsAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.smsAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.smsAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.smsAccounts=n})}else{var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.smsAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.smsAccounts.length;i++){_.some(a,{id:c.smsAccounts[i].id})&&(c.smsAccounts[i].canSelect=!1,n.push(c.smsAccounts[i]))}c.smsAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.faxAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FAXACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.faxAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:902}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.faxAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.faxAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.faxAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.faxAccounts=n})}else{var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.faxAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.faxAccounts.length;i++){_.some(a,{id:c.faxAccounts[i].id})&&(c.faxAccounts[i].canSelect=!1,n.push(c.faxAccounts[i]))}c.faxAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.openchannelAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OPENCHANNELACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.openchannelAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:802}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.openchannelAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.openchannelAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.openchannelAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.openchannelAccounts=n})}else{var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.openchannelAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.openchannelAccounts.length;i++){_.some(a,{id:c.openchannelAccounts[i].id})&&(c.openchannelAccounts[i].canSelect=!1,n.push(c.openchannelAccounts[i]))}c.openchannelAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=[{id:401,type:"inbound"},{id:1501,type:"outbound"}],u=null;d.hasRole("admin")?l.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){c.queues=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){u=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];u.forEach(function(e){e.type===m[a].type&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(l.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("queue"===e.field){var t=_.find(u,{name:e.value});a.push(t)}});for(var t=0;t<e.length;t++){(e[t].rows||[]).forEach(function(e){n.push(e)})}_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["resourceId",e.id])){var t=_.find(u,{id:e.id});t.canSelect=!1,n.push(t)}}),c.queues=n}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){c.outboundRoutes=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OUTBOUNDROUTES",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){c.outboundRoutes=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:403}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.outboundRoutes,{id:e.resourceId})}),a=null;a=[],c.triggerAllConditions.rows.forEach(function(e){if("routeId"===e.field){var t=_.find(c.outboundRoutes,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.outboundRoutes,{id:e.id});t.canSelect=!1,n.push(t)}}),c.outboundRoutes=n})}else{var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("routeId"===e.field){var t=_.find(c.outboundRoutes,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.outboundRoutes.length;i++){_.some(a,{id:c.outboundRoutes[i].id})&&(c.outboundRoutes[i].canSelect=!1,n.push(c.outboundRoutes[i]))}c.outboundRoutes=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})});m=[{id:202,role:"agent"}];var p=null;d.hasRole("admin")?l.user.get({fields:"id,name,fullname",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){c.agents=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.user.get({fields:"id,name,fullname",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){p=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];p.forEach(function(e){e.role===m[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(l.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var n=[],a=[];c.triggerAllConditions.rows.forEach(function(e){if("agent"===e.field){var t=_.find(p,{name:e.value});a.push(t)}});for(var t=0;t<e.length;t++){(e[t].rows||[]).forEach(function(e){n.push(e)})}_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["resourceId",e.id])){var t=_.find(p,{id:e.id});t.canSelect=!1,n.push(t)}}),c.agents=n}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})});var g=!0,v=1;function h(e){c.triggerAllConditions=e||{count:0,rows:[]}}function f(e){l.condition.delete({id:e.id}).$promise.then(function(){_.remove(c.triggerAllConditions.rows,{id:e.id}),c.triggerAllConditions.count-=1,c.triggerAllConditions.rows.length||c.getTriggerAllConditions(),r.success({title:"AllCondition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETtrigger"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrigger",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){g?a(function(){g=!1}):(t||(v=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=v),c.getTriggerAllConditions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.tools").controller("TriggerAllConditionsController",e)}(),function(){"use strict";function e(e,t,n,a,o,i,s,r,l,d,c,m,u,p,g){var v=this;v.currentUser=m.getCurrentUser(),v.errors=[],v.setting=p,v.license=u,v.crudPermissions=g,v.hasModulePermissions={},v.passwordPattern=v.setting&&v.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",v.title="TOOLS.EDIT_ALLCONDITION",v.allCondition=angular.copy(l),v.allconditions=r,v.newAllCondition=!1,v.trigger=angular.copy(d),v.allCondition||(v.allCondition={field:"queue",operator:"equals",value:"abandoned",value:"opened",value:"in"},v.title="TOOLS.NEW_ALLCONDITION",v.newAllCondition=!0),t.params.id&&(v.allCondition.TriggerAllId=t.params.id),v.addNewAllCondition=function(){v.errors=[],c.trigger.addAllCondition({id:t.params.id},v.allCondition).$promise.then(function(e){v.allconditions.unshift(e.toJSON()),s.success({title:"AllCondition properly created",msg:v.allCondition.name?v.allCondition.name+" has been created!":""}),A(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.condition.save"}];for(var t=0;t<e.data.errors.length;t+=1)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.saveAllCondition=function(){v.errors=[],c.condition.update({id:v.allCondition.id},v.allCondition).$promise.then(function(e){var t=_.find(v.allconditions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),s.success({title:"AllCondition properly saved!",msg:v.allCondition.name?v.allCondition.name+" has been saved!":""}),A(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.condition.update"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteAllCondition=function(e){v.errors=[];var t=a.confirm().title("Are you sure?").content("The allCondition will be deleted.").ariaLabel("Delete AllCondition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.condition.delete({id:v.allCondition.id}).$promise.then(function(){_.remove(v.allconditions,{id:v.allCondition.id}),s.success({title:"AllCondition properly deleted!",msg:(v.allCondition.name||"allCondition")+" has been deleted!"}),A(v.allCondition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.condition.delete"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},v.getDateFromString=function(e){return null===e?void 0:new Date(e)},v.closeDialog=A,m.hasRole("admin")?c.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.chatAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CHATACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.chatAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:502}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.chatAccounts,{id:e.resourceId})}),n=null;if(v.allCondition&&(n=_.find(v.chatAccounts,{id:Number(v.allCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.chatAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.chatAccounts=t})}else{var n=[],a=null;v.allCondition&&(a=_.find(v.chatAccounts,{id:Number(v.allCondition.value)}));for(var i=0;i<v.chatAccounts.length;i++)a&&v.chatAccounts[i].id===a.id&&(v.chatAccounts[i].canSelect=!1,n.push(v.chatAccounts[i]));v.chatAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.mailAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MAILACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.mailAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:602}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.mailAccounts,{id:e.resourceId})}),n=null;if(v.allCondition&&(n=_.find(v.mailAccounts,{id:Number(v.allCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.mailAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.mailAccounts=t})}else{var n=[],a=null;v.allCondition&&(a=_.find(v.mailAccounts,{id:Number(v.allCondition.value)}));for(var i=0;i<v.mailAccounts.length;i++)a&&v.mailAccounts[i].id===a.id&&(v.mailAccounts[i].canSelect=!1,n.push(v.mailAccounts[i]));v.mailAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.smsAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SMSACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.smsAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:702}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.smsAccounts,{id:e.resourceId})}),n=null;if(v.allCondition&&(n=_.find(v.smsAccounts,{id:Number(v.allCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.smsAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.smsAccounts=t})}else{var n=[],a=null;v.allCondition&&(a=_.find(v.smsAccounts,{id:Number(v.allCondition.value)}));for(var i=0;i<v.smsAccounts.length;i++)a&&v.smsAccounts[i].id===a.id&&(v.smsAccounts[i].canSelect=!1,n.push(v.smsAccounts[i]));v.smsAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.faxAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FAXACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.faxAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:902}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.faxAccounts,{id:e.resourceId})}),n=null;if(v.allCondition&&(n=_.find(v.faxAccounts,{id:Number(v.allCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.faxAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.faxAccounts=t})}else{var n=[],a=null;v.allCondition&&(a=_.find(v.faxAccounts,{id:Number(v.allCondition.value)}));for(var i=0;i<v.faxAccounts.length;i++)a&&v.faxAccounts[i].id===a.id&&(v.faxAccounts[i].canSelect=!1,n.push(v.faxAccounts[i]));v.faxAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.openchannelAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OPENCHANNELACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.openchannelAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:802}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.openchannelAccounts,{id:e.resourceId})}),n=null;if(v.allCondition&&(n=_.find(v.openchannelAccounts,{id:Number(v.allCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.openchannelAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.openchannelAccounts=t})}else{var n=[],a=null;v.allCondition&&(a=_.find(v.openchannelAccounts,{id:Number(v.allCondition.value)}));for(var i=0;i<v.openchannelAccounts.length;i++)a&&v.openchannelAccounts[i].id===a.id&&(v.openchannelAccounts[i].canSelect=!1,n.push(v.openchannelAccounts[i]));v.openchannelAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=[{id:401,type:"inbound"},{id:1501,type:"outbound"}],f=null;m.hasRole("admin")?c.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){v.queues=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){f=e.rows||[]}).then(function(){for(var e=[],t=0;t<h.length;t++)e.push(c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:h[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<h.length;a++){var i=_.find(t,["sectionId",h[a].id]);if(i)if(i.autoAssociation){var s=[];f.forEach(function(e){e.type===h[a].type&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(c.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;v.allCondition&&(n=_.find(f,{name:v.allCondition.value}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&f.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),v.queues=t}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){v.outboundRoutes=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OUTBOUNDROUTES",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){v.outboundRoutes=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:403}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.outboundRoutes,{id:e.resourceId})}),n=null;if(v.allCondition&&(n=_.find(v.outboundRoutes,{id:Number(v.allCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.outboundRoutes,{id:n.id});a.canSelect=!1,t.push(a)}v.outboundRoutes=t})}else{var n=[],a=null;v.allCondition&&(a=_.find(v.outboundRoutes,{id:Number(v.allCondition.value)}));for(var i=0;i<v.outboundRoutes.length;i++)a&&v.outboundRoutes[i].id===a.id&&(v.outboundRoutes[i].canSelect=!1,n.push(v.outboundRoutes[i]));v.outboundRoutes=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})});h=[{id:202,role:"agent"}];var b=null;function A(e){a.hide(e)}m.hasRole("admin")?c.user.get({fields:"id,name,fullname",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){v.agents=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.user.get({fields:"id,name,fullname",sort:"name",role:"agent",nolimit:"true"}).$promise.then(function(e){b=e.rows||[]}).then(function(){for(var e=[],t=0;t<h.length;t++)e.push(c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:h[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<h.length;a++){var i=_.find(t,["sectionId",h[a].id]);if(i)if(i.autoAssociation){var s=[];b.forEach(function(e){e.role===h[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(c.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;v.allCondition&&(n=_.find(b,{name:v.allCondition.value}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&b.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),v.agents=t}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","allconditions","allCondition","trigger","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditAllConditionDialogController",e)}(),function(){"use strict";function e(e,t,n,o,a,i,s,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.trigger={},c.triggerAnyConditions={count:0,rows:[]},c.selectedTriggerAnyConditions=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,field,operator,value",limit:10,page:1},c.arrayfield=_.keyBy([{option:"Queue",value:"'queue'",ngIf:"vm.trigger.channel == 'voice'"},{option:"Call_Status",value:"'lastevent'",ngIf:"vm.trigger.channel == 'voice'"},{option:"OutboundRoute",value:"'routeId'",ngIf:"vm.trigger.channel == 'voice'"},{option:"Agent",value:"'name'",ngIf:"vm.trigger.channel == 'voice'"},{option:"Account",value:"'account'",ngIf:"vm.trigger.channel != 'voice'"},{option:"Interaction",value:"'interaction'",ngIf:"vm.trigger.channel != 'voice'"},{option:"Message",value:"'message'",ngIf:"vm.trigger.channel != 'voice'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.arrayoperator=_.keyBy([{option:"Equals",value:"'equals'"},{option:"Not_Equals",value:"'not_equals'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.callStatusValues=_.keyBy([{option:"Abandon",value:"'abandoned'"},{option:"Hangup",value:"'complete'"},{option:"Reject",value:"'rejected'"},{option:"Ring",value:"'called'"},{option:"Answer",value:"'connect'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.interactionStatusValues=_.keyBy([{option:"Opened",value:"'opened'"},{option:"Closed",value:"'closed'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.messageStatusValues=_.keyBy([{option:"Incoming",value:"'in'"},{option:"Outgoing",value:"'out'"},{option:"Accepted",value:"'accept'"},{option:"Rejected",value:"'reject'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),c.init=function(e,t){c.trigger=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.trigger.id,c.query.TriggerAnyId=c.trigger.id,c.getTriggerAnyConditions()},c.deleteConfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the anyCondition?").htmlContent("<b>"+(e.name||"anyCondition")+"</b> will be deleted.").ariaLabel("delete anyCondition").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){f(e)},function(){console.log("CANCEL")})},c.success=h,c.getTriggerAnyConditions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getAnyConditions(c.query,h).$promise},c.createOrEditTriggerAnyCondition=function(e,t){i.show({controller:"CreateOrEditAnyConditionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/triggers/edit/anyconditions/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{trigger:c.trigger,anyCondition:t,anyconditions:c.triggerAnyConditions.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedTriggerAnyConditions=function(){var e=angular.copy(c.selectedTriggerAnyConditions);return c.selectedTriggerAnyConditions=[],e},c.deleteTriggerAnyCondition=f,c.deleteSelectedTriggerAnyConditions=function(e){var t=i.confirm().title("Are you sure want to delete the selected anyconditions?").htmlContent("<b>"+c.selectedTriggerAnyConditions.length+" selected</b> will be deleted.").ariaLabel("delete anyconditions").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){c.selectedTriggerAnyConditions.forEach(function(e){f(e)}),c.selectedTriggerAnyConditions=[]})},d.hasRole("admin")?l.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.chatAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CHATACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.chatAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:502}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.chatAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.chatAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.chatAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.chatAccounts=n})}else{var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.chatAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.chatAccounts.length;i++){_.some(a,{id:c.chatAccounts[i].id})&&(c.chatAccounts[i].canSelect=!1,n.push(c.chatAccounts[i]))}c.chatAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.mailAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MAILACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.mailAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:602}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.mailAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.mailAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.mailAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.mailAccounts=n})}else{var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.mailAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.mailAccounts.length;i++){_.some(a,{id:c.mailAccounts[i].id})&&(c.mailAccounts[i].canSelect=!1,n.push(c.mailAccounts[i]))}c.mailAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.smsAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SMSACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.smsAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:702}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.smsAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.smsAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.smsAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.smsAccounts=n})}else{var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.smsAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.smsAccounts.length;i++){_.some(a,{id:c.smsAccounts[i].id})&&(c.smsAccounts[i].canSelect=!1,n.push(c.smsAccounts[i]))}c.smsAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.faxAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FAXACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.faxAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:902}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.faxAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.faxAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.faxAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.faxAccounts=n})}else{var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.faxAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.faxAccounts.length;i++){_.some(a,{id:c.faxAccounts[i].id})&&(c.faxAccounts[i].canSelect=!1,n.push(c.faxAccounts[i]))}c.faxAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.openchannelAccounts=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OPENCHANNELACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){c.openchannelAccounts=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:802}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.openchannelAccounts,{id:e.resourceId})}),a=null;a=[],c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.openchannelAccounts,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.openchannelAccounts,{id:e.id});t.canSelect=!1,n.push(t)}}),c.openchannelAccounts=n})}else{var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("account"===e.field){var t=_.find(c.openchannelAccounts,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.openchannelAccounts.length;i++){_.some(a,{id:c.openchannelAccounts[i].id})&&(c.openchannelAccounts[i].canSelect=!1,n.push(c.openchannelAccounts[i]))}c.openchannelAccounts=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=[{id:401,type:"inbound"},{id:1501,type:"outbound"}],u=null;d.hasRole("admin")?l.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){c.queues=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){u=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];u.forEach(function(e){e.type===m[a].type&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(l.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("queue"===e.field){var t=_.find(u,{name:e.value});a.push(t)}});for(var t=0;t<e.length;t++){(e[t].rows||[]).forEach(function(e){n.push(e)})}_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["resourceId",e.id])){var t=_.find(u,{id:e.id});t.canSelect=!1,n.push(t)}}),c.queues=n}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?l.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){c.outboundRoutes=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OUTBOUNDROUTES",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){c.outboundRoutes=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:403}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var n=_.map(e.rows,function(e){return _.find(c.outboundRoutes,{id:e.resourceId})}),a=null;a=[],c.triggerAnyConditions.rows.forEach(function(e){if("routeId"===e.field){var t=_.find(c.outboundRoutes,{id:Number(e.value)});a.push(t)}}),_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["id",e.id])){var t=_.find(c.outboundRoutes,{id:e.id});t.canSelect=!1,n.push(t)}}),c.outboundRoutes=n})}else{var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("routeId"===e.field){var t=_.find(c.outboundRoutes,{id:Number(e.value)});a.push(t)}});for(var i=0;i<c.outboundRoutes.length;i++){_.some(a,{id:c.outboundRoutes[i].id})&&(c.outboundRoutes[i].canSelect=!1,n.push(c.outboundRoutes[i]))}c.outboundRoutes=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})});m=[{id:202,role:"agent"}];var p=null;d.hasRole("admin")?l.user.get({fields:"id,name,fullname,role",sort:"name",nolimit:"true"}).$promise.then(function(e){c.agents=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.user.get({fields:"id,name,fullname,role",sort:"name",nolimit:"true"}).$promise.then(function(e){p=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];p.forEach(function(e){e.role===m[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(l.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var n=[],a=[];c.triggerAnyConditions.rows.forEach(function(e){if("agent"===e.field){var t=_.find(p,{name:e.value});a.push(t)}});for(var t=0;t<e.length;t++){(e[t].rows||[]).forEach(function(e){n.push(e)})}_.isEmpty(a)||a.forEach(function(e){if(!_.some(n,["resourceId",e.id])){var t=_.find(p,{id:e.id});t.canSelect=!1,n.push(t)}}),c.agents=n}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})});var g=!0,v=1;function h(e){c.triggerAnyConditions=e||{count:0,rows:[]}}function f(e){l.condition.delete({id:e.id}).$promise.then(function(){_.remove(c.triggerAnyConditions.rows,{id:e.id}),c.triggerAnyConditions.count-=1,c.triggerAnyConditions.rows.length||c.getTriggerAnyConditions(),r.success({title:"AnyCondition deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETtrigger"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrigger",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){g?a(function(){g=!1}):(t||(v=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=v),c.getTriggerAnyConditions())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.tools").controller("TriggerAnyConditionsController",e)}(),function(){"use strict";function e(e,t,n,a,o,i,s,r,l,d,c,m,u,p,g){var v=this;v.currentUser=m.getCurrentUser(),v.errors=[],v.setting=p,v.license=u,v.crudPermissions=g,v.hasModulePermissions={},v.passwordPattern=v.setting&&v.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",v.title="TOOLS.EDIT_ANYCONDITION",v.anyCondition=angular.copy(l),v.anyconditions=r,v.newAnyCondition=!1,v.trigger=angular.copy(d),v.anyCondition||(v.anyCondition={field:"queue",operator:"equals",value:"abandoned",value:"opened",value:"in"},v.title="TOOLS.NEW_ANYCONDITION",v.newAnyCondition=!0),t.params.id&&(v.anyCondition.TriggerAnyId=t.params.id),v.addNewAnyCondition=function(){v.errors=[],c.trigger.addAnyCondition({id:t.params.id},v.anyCondition).$promise.then(function(e){v.anyconditions.unshift(e.toJSON()),s.success({title:"AnyCondition properly created",msg:v.anyCondition.name?v.anyCondition.name+" has been created!":""}),A(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.condition.save"}];for(var t=0;t<e.data.errors.length;t+=1)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.saveAnyCondition=function(){v.errors=[],c.condition.update({id:v.anyCondition.id},v.anyCondition).$promise.then(function(e){var t=_.find(v.anyconditions,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),s.success({title:"AnyCondition properly saved!",msg:v.anyCondition.name?v.anyCondition.name+" has been saved!":""}),A(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.condition.update"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},v.deleteAnyCondition=function(e){v.errors=[];var t=a.confirm().title("Are you sure?").content("The anyCondition will be deleted.").ariaLabel("Delete AnyCondition").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){c.condition.delete({id:v.anyCondition.id}).$promise.then(function(){_.remove(v.anyconditions,{id:v.anyCondition.id}),s.success({title:"AnyCondition properly deleted!",msg:(v.anyCondition.name||"anyCondition")+" has been deleted!"}),A(v.anyCondition)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){v.errors=e.data.errors||[{message:e.toString(),type:"api.condition.delete"}];for(var t=0;t<e.data.errors.length;t++)s.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.condition.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},v.getDateFromString=function(e){return null===e?void 0:new Date(e)},v.closeDialog=A,m.hasRole("admin")?c.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.chatAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CHATACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.chatWebsite.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.chatAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:502}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.chatAccounts,{id:e.resourceId})}),n=null;if(v.anyCondition&&(n=_.find(v.chatAccounts,{id:Number(v.anyCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.chatAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.chatAccounts=t})}else{var n=[],a=null;v.anyCondition&&(a=_.find(v.chatAccounts,{id:Number(v.anyCondition.value)}));for(var i=0;i<v.chatAccounts.length;i++)a&&v.chatAccounts[i].id===a.id&&(v.chatAccounts[i].canSelect=!1,n.push(v.chatAccounts[i]));v.chatAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETchatAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.mailAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MAILACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.mailAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.mailAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:602}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.mailAccounts,{id:e.resourceId})}),n=null;if(v.anyCondition&&(n=_.find(v.mailAccounts,{id:Number(v.anyCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.mailAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.mailAccounts=t})}else{var n=[],a=null;v.anyCondition&&(a=_.find(v.mailAccounts,{id:Number(v.anyCondition.value)}));for(var i=0;i<v.mailAccounts.length;i++)a&&v.mailAccounts[i].id===a.id&&(v.mailAccounts[i].canSelect=!1,n.push(v.mailAccounts[i]));v.mailAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmailAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.smsAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SMSACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.smsAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.smsAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:702}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.smsAccounts,{id:e.resourceId})}),n=null;if(v.anyCondition&&(n=_.find(v.smsAccounts,{id:Number(v.anyCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.smsAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.smsAccounts=t})}else{var n=[],a=null;v.anyCondition&&(a=_.find(v.smsAccounts,{id:Number(v.anyCondition.value)}));for(var i=0;i<v.smsAccounts.length;i++)a&&v.smsAccounts[i].id===a.id&&(v.smsAccounts[i].canSelect=!1,n.push(v.smsAccounts[i]));v.smsAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsmsAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.faxAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_FAXACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.faxAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.faxAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:902}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.faxAccounts,{id:e.resourceId})}),n=null;if(v.anyCondition&&(n=_.find(v.faxAccounts,{id:Number(v.anyCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.faxAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.faxAccounts=t})}else{var n=[],a=null;v.anyCondition&&(a=_.find(v.faxAccounts,{id:Number(v.anyCondition.value)}));for(var i=0;i<v.faxAccounts.length;i++)a&&v.faxAccounts[i].id===a.id&&(v.faxAccounts[i].canSelect=!1,n.push(v.faxAccounts[i]));v.faxAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETfaxAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.openchannelAccounts=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OPENCHANNELACCOUNTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.openchannelAccount.get({fields:"id,name",sort:"id",nolimit:"true"}).$promise.then(function(e){v.openchannelAccounts=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:802}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.openchannelAccounts,{id:e.resourceId})}),n=null;if(v.anyCondition&&(n=_.find(v.openchannelAccounts,{id:Number(v.anyCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.openchannelAccounts,{id:n.id});a.canSelect=!1,t.push(a)}v.openchannelAccounts=t})}else{var n=[],a=null;v.anyCondition&&(a=_.find(v.openchannelAccounts,{id:Number(v.anyCondition.value)}));for(var i=0;i<v.openchannelAccounts.length;i++)a&&v.openchannelAccounts[i].id===a.id&&(v.openchannelAccounts[i].canSelect=!1,n.push(v.openchannelAccounts[i]));v.openchannelAccounts=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETopenchannelAccounts",msg:e.data?JSON.stringify(e.data):e.toString()})});var h=[{id:401,type:"inbound"},{id:1501,type:"outbound"}],f=null;m.hasRole("admin")?c.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){v.queues=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.voiceQueue.get({fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){f=e.rows||[]}).then(function(){for(var e=[],t=0;t<h.length;t++)e.push(c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:h[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<h.length;a++){var i=_.find(t,["sectionId",h[a].id]);if(i)if(i.autoAssociation){var s=[];f.forEach(function(e){e.type===h[a].type&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(c.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;v.anyCondition&&(n=_.find(f,{name:v.anyCondition.value}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&f.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),v.queues=t}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})}),m.hasRole("admin")?c.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){v.outboundRoutes=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OUTBOUNDROUTES",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){v.outboundRoutes=e.rows||[]}).then(function(){return c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:403}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return c.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(v.outboundRoutes,{id:e.resourceId})}),n=null;if(v.anyCondition&&(n=_.find(v.outboundRoutes,{id:Number(v.anyCondition.value)})),n&&!_.some(t,["id",n.id])){var a=_.find(v.outboundRoutes,{id:n.id});a.canSelect=!1,t.push(a)}v.outboundRoutes=t})}else{var n=[],a=null;v.anyCondition&&(a=_.find(v.outboundRoutes,{id:Number(v.anyCondition.value)}));for(var i=0;i<v.outboundRoutes.length;i++)a&&v.outboundRoutes[i].id===a.id&&(v.outboundRoutes[i].canSelect=!1,n.push(v.outboundRoutes[i]));v.outboundRoutes=n}}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})});h=[{id:202,role:"agent"}];var b=null;function A(e){a.hide(e)}m.hasRole("admin")?c.user.get({fields:"id,name,fullname,role",sort:"name",nolimit:"true"}).$promise.then(function(e){v.agents=e.rows||[]}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):c.user.get({fields:"id,name,fullname,role",sort:"name",nolimit:"true"}).$promise.then(function(e){b=e.rows||[]}).then(function(){for(var e=[],t=0;t<h.length;t++)e.push(c.userProfileSection.get({userProfileId:v.currentUser.userProfileId,sectionId:h[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<h.length;a++){var i=_.find(t,["sectionId",h[a].id]);if(i)if(i.autoAssociation){var s=[];b.forEach(function(e){e.role===h[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(c.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;v.anyCondition&&(n=_.find(b,{name:v.anyCondition.value}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&b.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),v.agents=t}).catch(function(e){s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETagents",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","anyconditions","anyCondition","trigger","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditAnyConditionDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.trigger=c||e.params.trigger||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoTriggers=function(){e.go("app.tools.triggers")},u.saveTrigger=function(){r.trigger.update({id:u.trigger.id},u.trigger).$promise.then(function(){l.success({title:"Trigger updated!",msg:u.trigger.name?u.trigger.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrigger",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","trigger","userProfileSection"],angular.module("app.tools").controller("TriggerController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.triggers=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="triggers",b.listOrder="",b.listOrderAsc=null,b.selectedTriggers=[],b.query={fields:"createdAt,updatedAt,id,name,channel,status,description",sort:"-updatedAt",limit:10,page:1},b.arraychannel=_.keyBy([{option:"Voice",value:"'voice'"},{option:"Openchannel",value:"'openchannel'",ngIf:"vm.license.openchannel"},{option:"Chat",value:"'chat'",ngIf:"vm.license.chat"},{option:"Mail",value:"'mail'",ngIf:"vm.license.mail"},{option:"Sms",value:"'sms'",ngIf:"vm.license.messaging"},{option:"Fax",value:"'fax'",ngIf:"vm.license.fax"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.tools.triggers.edit",{id:e.id,trigger:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("trigger")+"?").htmlContent("<b>"+(e.name||"trigger")+"</b> will be deleted.").ariaLabel("delete trigger").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getTriggers=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.trigger.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Triggers",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditTrigger=function(e,t){i.show({controller:"CreateOrEditTriggerDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/triggers/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{trigger:t,triggers:b.triggers.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteTrigger=S,b.exportSelectedTriggers=function(){var e=angular.copy(b.selectedTriggers);return b.selectedTriggers=[],e},b.deleteSelectedTriggers=function(e){var t=i.confirm().title("Are you sure want to delete the selected triggers?").htmlContent("<b>"+b.selectedTriggers.length+" selected</b> will be deleted.").ariaLabel("delete Triggers").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedTriggers.forEach(function(e){S(e)}),b.selectedTriggers=[]})},b.deselectTriggers=function(){b.selectedTriggers=[]},b.selectAllTriggers=function(){b.selectedTriggers=b.triggers.rows};var A=!0,E=1;function y(e){b.triggers=e||{count:0,rows:[]}}function S(e){m.trigger.delete({id:e.id}).$promise.then(function(){_.remove(b.triggers.rows,{id:e.id}),b.triggers.count-=1,b.triggers.rows.length||b.getTriggers(),p.success({title:_.startCase("Trigger")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtrigger"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEtrigger",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getTriggers())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","triggers","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TriggersController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_TRUNK",g.trunk=angular.copy(l),g.trunks=r,g.newTrunk=!1,g.trunk||(g.trunk={active:!0,type:"friend",dtmfmode:"rfc2833",qualify:"yes",t38pt_udptl:"no"},g.title="TOOLS.NEW_TRUNK",g.newTrunk=!0),g.addNewTrunk=function(){g.errors=[],d.trunk.save(g.trunk).$promise.then(function(e){g.trunks.unshift(e.toJSON()),o.success({title:"Trunk properly created",msg:g.trunk.name?g.trunk.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.trunk.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trunk.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveTrunk=function(){g.errors=[],d.trunk.update({id:g.trunk.id},g.trunk).$promise.then(function(e){var t=_.find(g.trunks,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Trunk properly saved!",msg:g.trunk.name?g.trunk.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.trunk.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trunk.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteTrunk=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The trunk will be deleted.").ariaLabel("Delete Trunk").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.trunk.delete({id:g.trunk.id}).$promise.then(function(){_.remove(g.trunks,{id:g.trunk.id}),o.success({title:"Trunk properly deleted!",msg:(g.trunk.name||"trunk")+" has been deleted!"}),v(g.trunk)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.trunk.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trunk.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","trunks","trunk","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditTrunkDialogController",e)}(),function(){"use strict";function e(t,n,a,e,i,s,o){var r=this;function l(e){t.hide(e)}r.newTrunk=!0,r.trunk=angular.copy(i),r.trunks=s,r.title=o.instant("TOOLS.CLONE_TRUNK"),i&&i.name&&(r.title+=": "+i.name),r.cloneTrunk=function(){return e.trunk.clone({id:i.id},r.trunk).$promise.then(function(e){r.trunks.unshift(e.toJSON()),a.success({title:"Trunk properly cloned",msg:r.trunk.name?r.trunk.name+" has been cloned!":""}),n.go("app.tools.trunks.edit",{id:e.id}),l(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){r.errors=e.data.errors||[{message:e.toString(),type:"api.trunk.clone"}];for(var t=0;t<e.data.errors.length;t+=1)a.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.trunk.clone",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},r.closeDialog=l}e.$inject=["$mdDialog","$state","toasty","api","trunk","trunks","$translate"],angular.module("app.tools").controller("TrunkcloneController",e)}(),function(){"use strict";function e(n,e,a,i,s,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.trunk=c||n.params.trunk||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.gotogoto=function(e,t){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:411}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.voice.realtime.trunks",{}):l.info({title:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.voice.realtime.trunks",{})}},u.clonedialog=function(e,t){a.show({controller:"TrunkcloneController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/trunks/edit/clone/clone.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{trunk:e,trunks:u.trunks?u.trunks.rows:[],crudPermissions:u.crudPermissions}})},u.alert=l.info,u.gotoTrunks=function(){n.go("app.tools.trunks")},u.saveTrunk=function(){r.trunk.update({id:u.trunk.id},u.trunk).$promise.then(function(){l.success({title:"Trunk updated!",msg:u.trunk.name?u.trunk.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunk",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.trunk&&(n=_.find(u.contexts,{name:u.trunk.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","trunk","userProfileSection"],angular.module("app.tools").controller("TrunkController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.trunks=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="trunks",b.listOrder="",b.listOrderAsc=null,b.selectedTrunks=[],b.query={fields:"createdAt,updatedAt,id,name,active,host,secret,defaultuser,context,callerid,type,dtmfmode,nat,qualify,allow,insecure,call_limit,registry,description,directmedia,callcounter,fromdomain,fromuser,outboundproxy,usereqphone,trustrpid,sendrpid,encryption,port,transport,t38pt_udptl,videosupport,otherFields",sort:"-updatedAt",limit:10,page:1},b.arraytype=_.keyBy([{option:"Friend",value:"'friend'"},{option:"User",value:"'user'"},{option:"Peer",value:"'peer'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydtmfmode=_.keyBy([{option:"rfc2833",value:"'rfc2833'"},{option:"info",value:"'info'"},{option:"shortinfo",value:"'shortinfo'"},{option:"inband",value:"'inband'"},{option:"auto",value:"'auto'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraynat=_.keyBy([{option:"force_rport",value:"'force_rport'"},{option:"comedia",value:"'comedia'"},{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"never",value:"'never'"},{option:"route",value:"'route'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayqualify=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayallow=_.keyBy([{option:"ulaw",value:"'ulaw'"},{option:"alaw",value:"'alaw'"},{option:"gsm",value:"'gsm'"},{option:"g723",value:"'g723'"},{option:"g726",value:"'g726'"},{option:"g722",value:"'g722'"},{option:"g729",value:"'g729'"},{option:"ilbc",value:"'ilbc'"},{option:"opus",value:"'opus'"},{option:"h264",value:"'h264'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayinsecure=_.keyBy([{option:"port",value:"'port'"},{option:"invite",value:"'invite'"},{option:"very",value:"'very'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydirectmedia=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"nonat",value:"'nonat'"},{option:"update",value:"'update'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraycallcounter=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayusereqphone=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytrustrpid=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysendrpid=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"},{option:"pai",value:"'pai'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayencryption=_.keyBy([{option:"yes",value:"'yes'"},{option:"no",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytransport=_.keyBy([{option:"udp",value:"'udp'"},{option:"tcp",value:"'tcp'"},{option:"ws",value:"'ws'"},{option:"wss",value:"'wss'"},{option:"tls",value:"'tls'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayvideosupport=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Always",value:"'always'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.tools.trunks.edit",{id:e.id,trunk:e,crudPermissions:b.crudPermissions})},b.clonedialog=function(e,t){i.show({controller:"TrunkcloneController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/trunks/edit/clone/clone.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{trunk:e,trunks:b.trunks?b.trunks.rows:[],crudPermissions:b.crudPermissions}})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:411}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.voice.realtime.trunks",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.voice.realtime.trunks",{})}},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("trunk")+"?").htmlContent("<b>"+(e.name||"trunk")+"</b> will be deleted.").ariaLabel("delete trunk").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getTrunks=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.trunk.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Trunks",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditTrunk=function(e,t){i.show({controller:"CreateOrEditTrunkDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/trunks/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{trunk:t,trunks:b.trunks.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteTrunk=S,b.exportSelectedTrunks=function(){var e=angular.copy(b.selectedTrunks);return b.selectedTrunks=[],e},b.deleteSelectedTrunks=function(e){var t=i.confirm().title("Are you sure want to delete the selected trunks?").htmlContent("<b>"+b.selectedTrunks.length+" selected</b> will be deleted.").ariaLabel("delete Trunks").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedTrunks.forEach(function(e){S(e)}),b.selectedTrunks=[]})},b.deselectTrunks=function(){b.selectedTrunks=[]},b.selectAllTrunks=function(){b.selectedTrunks=b.trunks.rows};var A=!0,E=1;function y(e){b.trunks=e||{count:0,rows:[]}}function S(e){m.trunk.delete({id:e.id}).$promise.then(function(){_.remove(b.trunks.rows,{id:e.id}),b.trunks.count-=1,b.trunks.rows.length||b.getTrunks(),p.success({title:_.startCase("Trunk")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEtrunk"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEtrunk",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getTrunks())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","trunks","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("TrunksController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="TOOLS.EDIT_VARIABLE",g.variable=angular.copy(l),g.variables=r,g.newVariable=!1,g.variable||(g.variable={},g.title="TOOLS.NEW_VARIABLE",g.newVariable=!0),g.addNewVariable=function(){g.errors=[],d.variable.save(g.variable).$promise.then(function(e){g.variables.unshift(e.toJSON()),o.success({title:"Variable properly created",msg:g.variable.name?g.variable.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.variable.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.variable.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVariable=function(){g.errors=[],d.variable.update({id:g.variable.id},g.variable).$promise.then(function(e){var t=_.find(g.variables,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Variable properly saved!",msg:g.variable.name?g.variable.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.variable.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.variable.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVariable=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The variable will be deleted.").ariaLabel("Delete Variable").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.variable.delete({id:g.variable.id}).$promise.then(function(){_.remove(g.variables,{id:g.variable.id}),o.success({title:"Variable properly deleted!",msg:(g.variable.name||"variable")+" has been deleted!"}),v(g.variable)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.variable.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.variable.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","variables","variable","api","Auth","license","setting","crudPermissions"],angular.module("app.tools").controller("CreateOrEditVariableDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.variables=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="variables",b.listOrder="",b.listOrderAsc=null,b.selectedVariables=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditVariableDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/variables/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{variable:e,variables:b.variables.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("variable")+"?").htmlContent("<b>"+(e.name||"variable")+"</b> will be deleted.").ariaLabel("delete variable").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getVariables=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.variable.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Variables",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditVariable=function(e,t){i.show({controller:"CreateOrEditVariableDialogController",controllerAs:"vm",templateUrl:"app/main/apps/tools/views/variables/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{variable:t,variables:b.variables.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteVariable=S,b.exportSelectedVariables=function(){var e=angular.copy(b.selectedVariables);return b.selectedVariables=[],e},b.deleteSelectedVariables=function(e){var t=i.confirm().title("Are you sure want to delete the selected variables?").htmlContent("<b>"+b.selectedVariables.length+" selected</b> will be deleted.").ariaLabel("delete Variables").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedVariables.forEach(function(e){S(e)}),b.selectedVariables=[]})},b.deselectVariables=function(){b.selectedVariables=[]},b.selectAllVariables=function(){b.selectedVariables=b.variables.rows};var A=!0,E=1;function y(e){b.variables=e||{count:0,rows:[]}}function S(e){m.variable.delete({id:e.id}).$promise.then(function(){_.remove(b.variables.rows,{id:e.id}),b.variables.count-=1,b.variables.rows.length||b.getVariables(),p.success({title:_.startCase("Variable")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvariable"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvariable",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getVariables())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","variables","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.tools").controller("VariablesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VIDEO.EDIT_SCREENRECORDING",g.screenRecording=angular.copy(l),g.screenRecordings=r,g.newscreenRecording=!1,g.screenRecording||(g.screenRecording={},g.title="VIDEO.NEW_SCREENRECORDING",g.newscreenRecording=!0),g.addNewscreenRecording=function(){g.errors=[],d.screenRecording.save(g.screenRecording).$promise.then(function(e){g.screenRecordings.unshift(e.toJSON()),o.success({title:"screenRecording properly created",msg:g.screenRecording.name?g.screenRecording.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.screenRecording.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.screenRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.savescreenRecording=function(){g.errors=[],d.screenRecording.update({id:g.screenRecording.id},g.screenRecording).$promise.then(function(e){var t=_.find(g.screenRecordings,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"screenRecording properly saved!",msg:g.screenRecording.name?g.screenRecording.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.screenRecording.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.screenRecording.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deletescreenRecording=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The screenRecording will be deleted.").ariaLabel("Delete screenRecording").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.screenRecording.delete({id:g.screenRecording.id}).$promise.then(function(){_.remove(g.screenRecordings,{id:g.screenRecording.id}),o.success({title:"screenRecording properly deleted!",msg:(g.screenRecording.name||"screenRecording")+" has been deleted!"}),v(g.screenRecording)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.screenRecording.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.screenRecording.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,d.user.get({fields:"id,name,fullname",sort:"name",nolimit:"true"}).$promise.then(function(e){g.users=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERS",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","screenRecordings","screenRecording","api","Auth","license","setting","crudPermissions"],angular.module("app.video").controller("CreateOrEditscreenRecordingDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c,m=this;if(m.loading=!1,m.recording=Object.assign({},i),m.route="screenRecording",m.element=l,m.actionOptions=Object.assign({},s),m.path=r,m.label=o,m.app="video",m.model="screenRecording",console.log("TCL: vm.path",m.path),console.log("TCL: vm.recording[vm.path]",m.recording[m.path]),m.filename=-1<m.recording[m.path].indexOf("/")?m.recording[m.path].substring(m.recording[m.path].lastIndexOf("/")+1):-1<m.recording[m.path].indexOf("\\")?m.recording[m.path].substring(m.recording[m.path].lastIndexOf("\\")+1):m.recording[m.path],m.format=!1,_.isNil(m.recording.format)&&(m.recording.format=m.filename.slice(m.filename.lastIndexOf("."))),(".wav"===m.recording.format&&"audio"===m.element||".mp4"===m.recording.format&&"video"===m.element)&&(m.format=!0),m.found=!0,m.format&&(c=d.defer(),a.screenRecording.download({id:m.recording.id,path:String(m.path)}).$promise.then(function(e){m.format=!0,m.found=!0,c.resolve()}).catch(function(e){console.log("err"),m.format=!1,m.found=!1,c.resolve()}),c.promise),!_.isNil(s.properties)&&s.properties){if(m.properties=Object.assign({},i),Object.keys(i).forEach(function(e){String(e[0].toUpperCase())===String(e[0])&&delete m.properties[e]}),m.propertiesDefault={},!_.isNil(s.propertiesList)&&0<s.propertiesList.length){m.propertiesDefault=Object.assign({},i);var u=s.propertiesList,p=Object.keys(i),g=!0;p.forEach(function(t){g=!0,u.forEach(function(e){String(t)===String(e)&&(g=!1)}),g&&delete m.propertiesDefault[t]}),m.properties=m.propertiesDefault}if(!_.isNil(s.extraData)&&0<s.extraData.length){m.propertiesExtra={};for(var v=s.extraData,h=0;h<v.length;h++)for(var f=v[h].values,b=v[h].model,A=0;A<f.length;A++)m.propertiesExtra[f[A].text]=i[b][f[A].key];m.properties=Object.assign({},m.propertiesDefault,m.propertiesExtra)}}m.closeDialog=function(){t.hide()}}e.$inject=["$scope","$mdDialog","toasty","api","recording","actionOptions","label","varPath","elementTag","$q"],angular.module("app.video").controller("screenRecordingplayController",e)}(),function(){"use strict";function e(e,t,n,a,r,l,i,o,s,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.screenRecordings=s||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="screenRecordings",b.listOrder="",b.listOrderAsc=null,b.selectedScreenRecordings=[],b.query={fields:"createdAt,updatedAt,id,interactionid,channel,format,value,rating,UserId,duration,startedAt,closedAt",includeAll:"true",sort:"-updatedAt",limit:10,page:1},b.localizationMap=f,b.pickerModel={dateStart:null},b.playrecording=function(e,t,n,a,i){var s={route:"screenRecording",name:"screenRecordings",model:"screenRecording",singular:"screenRecording"},a=String(a),o=String(n);console.log("TCL:  path",String(n)),r.show({controller:"screenRecordingplayController",controllerAs:"vm",templateUrl:"app/main/apps/video/views/screenRecordings/partialViews/play.html",parent:angular.element(l.body),targetEvent:t,clickOutsideToClose:!0,locals:{recording:e,recordings:b.screenRecordings.rows,license:b.license,setting:null,item:s,actionOptions:{upperTitle:!1,lowerTitle:!0,properties:!0,propertiesIcon:"icon-video",propertiesList:["format","interactionid","duration","startedAt","closedAt","createdAt"],extraData:[{model:"User",values:[{key:"name",text:"agentname"}]}]},label:a,varPath:o,elementTag:String(i)}})},b.downloadfile2=function(e,t){var n=!1,a=_.isNil(e.format)?e.value.substring(e.value.lastIndexOf(".")):e.format;n=".mp4"===a;var s=-1<e.value.lastIndexOf("/")?e.value.substring(e.value.lastIndexOf("/")+1):-1<e.value.lastIndexOf("\\")?e.value.substring(e.value.lastIndexOf("\\")+1):e.value;return m.screenRecording.download({id:e.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=s;var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else"404"===String(e.status)&&!1===n?p.info({title:o.instant("VIDEO.CANT_DOWNLOAD_THIS_FILE"),msg:o.instant("VIDEO.WRONG_EXTENSION")}):"404"===String(e.status)?p.info({title:o.instant("VIDEO.CANT_DOWNLOAD_THIS_FILE"),msg:o.instant("VIDEO.FILE_NOT_FOUND")}):p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.screenRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.deleteconfirm=function(e,t){var n=r.confirm().title("Are you sure want to delete the "+_.startCase("screenRecording")+"?").htmlContent("<b>"+(e.name||"screenRecording")+"</b> will be deleted.").ariaLabel("delete screenRecording").targetEvent(t).ok("OK").cancel("CANCEL");r.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getScreenRecordings=function(){b.pickerModel.dateStart?b.query.createdAt={$gte:moment(b.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(b.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:b.query.createdAt=void 0;b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.screenRecording.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ScreenRecordings",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditscreenRecording=function(e,t){r.show({controller:"CreateOrEditscreenRecordingDialogController",controllerAs:"vm",templateUrl:"app/main/apps/video/views/screenRecordings/create/dialog.html",parent:angular.element(l.body),targetEvent:e,clickOutsideToClose:!0,locals:{screenRecording:t,screenRecordings:b.screenRecordings.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deletescreenRecording=S,b.exportSelectedScreenRecordings=function(){var e=angular.copy(b.selectedScreenRecordings);return b.selectedScreenRecordings=[],e},b.deleteSelectedScreenRecordings=function(e){var t=r.confirm().title("Are you sure want to delete the selected screenRecordings?").htmlContent("<b>"+b.selectedScreenRecordings.length+" selected</b> will be deleted.").ariaLabel("delete screenRecordings").targetEvent(e).ok("OK").cancel("CANCEL");r.show(t).then(function(){b.selectedScreenRecordings.forEach(function(e){S(e)}),b.selectedScreenRecordings=[]})},b.deselectScreenRecordings=function(){b.selectedScreenRecordings=[]},b.selectAllScreenRecordings=function(){b.selectedScreenRecordings=b.screenRecordings.rows},b.convertDuration=function(e){var t=Math.floor(e/1e3%60),n=Math.floor(e/6e4%60),a=Math.floor(e/36e5%24),i=a<10?"0"+String(a):String(a),s=n<10?"0"+String(n):String(n),o=t<10?"0"+String(t):String(t);return i+":"+s+":"+o},b.clearDateFilter=function(){b.pickerModel={dateStart:null},b.getScreenRecordings()},m.user.get({fields:"id,name,fullname",sort:"name",nolimit:"true"}).$promise.then(function(e){b.users=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERS",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.screenRecordings=e||{count:0,rows:[]}}function S(e){m.screenRecording.delete({id:e.id}).$promise.then(function(){_.remove(b.screenRecordings.rows,{id:e.id}),b.screenRecordings.count-=1,b.screenRecordings.rows.length||b.getScreenRecordings(),p.success({title:_.startCase("screenRecording")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEscreenRecording"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEscreenRecording",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?i(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getScreenRecordings())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","screenRecordings","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.video").controller("ScreenRecordingsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.chanSpies=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="chanSpies",b.listOrder="",b.listOrderAsc=null,b.selectedChanSpies=[],b.query={fields:"createdAt,updatedAt,id,name,prefix,options,auth,password,record,recordingFormat,description",sort:"-updatedAt",limit:10,page:1},b.arrayoptions=_.keyBy([{option:"b: Only spy on channels involved in a bridged call.",value:"'b'"},{option:"B: Instead of whispering on a single channel barge in on both channels involved in the call.",value:"'B'"},{option:"E: Exit when the spied-on channel hangs up.",value:"'E'"},{option:"o: Only listen to audio coming from this channel.",value:"'o'"},{option:"q: Don't play a beep when beginning to spy on a channel, or speak the selected channel name.",value:"'q'"},{option:"s: Skip the playback of the channel type (i.e. SIP, IAX, etc) when speaking the selected channel name.",value:"'s'"},{option:"S: Stop when no more channels are left to spy on.",value:"'S'"},{option:"w: Enable whisper mode, so the spying channel can talk to the spied-on channel.",value:"'w'"},{option:"W: Enable private whisper mode, so the spying channel can talk to the spied-on channel but cannot listen to that channel.",value:"'W'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayrecordingFormat=_.keyBy([{option:"wav",value:"'wav'"},{option:"gsm",value:"'gsm'"},{option:"wav49",value:"'WAV'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editdialog=function(e,t){i.show({controller:"CreateOrEditchanSpyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/chanSpies/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{chanSpy:e,chanSpies:b.chanSpies.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("chanSpy")+"?").htmlContent("<b>"+(e.name||"chanSpy")+"</b> will be deleted.").ariaLabel("delete chanSpy").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getChanSpies=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceChanSpy.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="ChanSpies",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditchanSpy=function(e,t){i.show({controller:"CreateOrEditchanSpyDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/chanSpies/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{chanSpy:t,chanSpies:b.chanSpies.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deletechanSpy=S,b.exportSelectedChanSpies=function(){var e=angular.copy(b.selectedChanSpies);return b.selectedChanSpies=[],e},b.deleteSelectedChanSpies=function(e){var t=i.confirm().title("Are you sure want to delete the selected chanSpies?").htmlContent("<b>"+b.selectedChanSpies.length+" selected</b> will be deleted.").ariaLabel("delete chanSpys").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedChanSpies.forEach(function(e){S(e)}),b.selectedChanSpies=[]})},b.deselectChanSpies=function(){b.selectedChanSpies=[]},b.selectAllChanSpies=function(){b.selectedChanSpies=b.chanSpies.rows};var A=!0,E=1;function y(e){b.chanSpies=e||{count:0,rows:[]}}function S(e){m.voiceChanSpy.delete({id:e.id}).$promise.then(function(){_.remove(b.chanSpies.rows,{id:e.id}),b.chanSpies.count-=1,b.chanSpies.rows.length||b.getChanSpies(),p.success({title:_.startCase("chanSpy")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceChanSpy"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceChanSpy",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getChanSpies())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","chanSpies","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("ChanSpiesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_CHANSPY",g.chanSpy=angular.copy(l),g.chanSpies=r,g.newchanSpy=!1,g.chanSpy||(g.chanSpy={recordingFormat:"wav"},g.title="VOICE.NEW_CHANSPY",g.newchanSpy=!0),g.addNewchanSpy=function(){g.errors=[],d.voiceChanSpy.save(g.chanSpy).$promise.then(function(e){g.chanSpies.unshift(e.toJSON()),o.success({title:"chanSpy properly created",msg:g.chanSpy.name?g.chanSpy.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceChanSpy.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceChanSpy.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.savechanSpy=function(){g.errors=[],d.voiceChanSpy.update({id:g.chanSpy.id},g.chanSpy).$promise.then(function(e){var t=_.find(g.chanSpies,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"chanSpy properly saved!",msg:g.chanSpy.name?g.chanSpy.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceChanSpy.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceChanSpy.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deletechanSpy=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The chanSpy will be deleted.").ariaLabel("Delete chanSpy").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceChanSpy.delete({id:g.chanSpy.id}).$promise.then(function(){_.remove(g.chanSpies,{id:g.chanSpy.id}),o.success({title:"chanSpy properly deleted!",msg:(g.chanSpy.name||"chanSpy")+" has been deleted!"}),v(g.chanSpy)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceChanSpy.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceChanSpy.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","chanSpies","chanSpy","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditchanSpyDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.contexts=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="contexts",b.listOrder="",b.listOrderAsc=null,b.selectedContexts=[],b.query={fields:"createdAt,updatedAt,id,name,description",sort:"-updatedAt",defaultEntry:"false",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditContextDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/contexts/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{context:e,contexts:b.contexts.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("context")+"?").htmlContent("<b>"+(e.name||"context")+"</b> will be deleted.").ariaLabel("delete context").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getContexts=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceContext.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Contexts",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditContext=function(e,t){i.show({controller:"CreateOrEditContextDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/contexts/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{context:t,contexts:b.contexts.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteContext=S,b.exportSelectedContexts=function(){var e=angular.copy(b.selectedContexts);return b.selectedContexts=[],e},b.deleteSelectedContexts=function(e){var t=i.confirm().title("Are you sure want to delete the selected contexts?").htmlContent("<b>"+b.selectedContexts.length+" selected</b> will be deleted.").ariaLabel("delete Contexts").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedContexts.forEach(function(e){S(e)}),b.selectedContexts=[]})},b.deselectContexts=function(){b.selectedContexts=[]},b.selectAllContexts=function(){b.selectedContexts=b.contexts.rows};var A=!0,E=1;function y(e){b.contexts=e||{count:0,rows:[]}}function S(e){m.voiceContext.delete({id:e.id}).$promise.then(function(){_.remove(b.contexts.rows,{id:e.id}),b.contexts.count-=1,b.contexts.rows.length||b.getContexts(),p.success({title:_.startCase("Context")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceContext"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceContext",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getContexts())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","contexts","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("ContextsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_CONTEXT",g.context=angular.copy(l),g.contexts=r,g.newContext=!1,g.context||(g.context={},g.title="VOICE.NEW_CONTEXT",g.newContext=!0),g.addNewContext=function(){g.errors=[],d.voiceContext.save(g.context).$promise.then(function(e){g.contexts.unshift(e.toJSON()),o.success({title:"Context properly created",msg:g.context.name?g.context.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceContext.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceContext.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveContext=function(){g.errors=[],d.voiceContext.update({id:g.context.id},g.context).$promise.then(function(e){var t=_.find(g.contexts,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Context properly saved!",msg:g.context.name?g.context.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceContext.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceContext.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteContext=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The context will be deleted.").ariaLabel("Delete Context").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceContext.delete({id:g.context.id}).$promise.then(function(){_.remove(g.contexts,{id:g.context.id}),o.success({title:"Context properly deleted!",msg:(g.context.name||"context")+" has been deleted!"}),v(g.context)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceContext.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceContext.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","contexts","context","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditContextDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_INBOUNDROUTE",g.inboundroute=angular.copy(l),g.inboundroutes=r,g.newInboundRoute=!1,g.inboundroute||(g.inboundroute={appdata:"Inbound Call",type:"inbound",context:"from-voip-provider"},g.title="VOICE.NEW_INBOUNDROUTE",g.newInboundRoute=!0),g.addNewInboundRoute=function(){g.errors=[],d.voiceExtension.save(g.inboundroute).$promise.then(function(e){g.inboundroutes.unshift(e.toJSON()),o.success({title:"InboundRoute properly created",msg:g.inboundroute.name?g.inboundroute.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveInboundRoute=function(){g.errors=[],d.voiceExtension.update({id:g.inboundroute.id},g.inboundroute).$promise.then(function(e){var t=_.find(g.inboundroutes,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"InboundRoute properly saved!",msg:g.inboundroute.name?g.inboundroute.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteInboundRoute=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The inboundroute will be deleted.").ariaLabel("Delete InboundRoute").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceExtension.delete({id:g.inboundroute.id}).$promise.then(function(){_.remove(g.inboundroutes,{id:g.inboundroute.id}),o.success({title:"InboundRoute properly deleted!",msg:(g.inboundroute.name||"inboundroute")+" has been deleted!"}),v(g.inboundroute)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.contexts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.contexts=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.contexts,{id:e.resourceId})}),n=null;if(g.inboundroute&&(n=_.find(g.contexts,{name:g.inboundroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(g.contexts,{id:n.id});a.canSelect=!1,t.push(a)}g.contexts=t}):d.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){g.contexts=e.rows||[]})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","inboundroutes","inboundroute","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditInboundRouteDialogController",e)}(),function(){"use strict";function e(m,i,a,s,e){var u=this;function t(e,t){if(u.inboundrouteApps.rows.length){var n=u.inboundrouteApps.rows[t]?u.inboundrouteApps.rows[t]:u.inboundrouteApps.rows[0];i.show({controller:"EditInboundApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/inboundroutes/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{inboundrouteApp:n,inboundroute:u.inboundroute,crudPermissions:u.crudPermissions}}).then(function(e){e&&(e.id?u.inboundrouteApps.rows[t]=e:u.inboundrouteApps.rows.splice(t,0,e),o())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function o(){var e=["queue","playback"],t=2,n=[];n.push({type:"inbound",app:"Set",appdata:"CDR(type)=inbound",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:t++,VoiceExtensionId:u.inboundroute.id}),n.push({type:"inbound",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:t++,VoiceExtensionId:u.inboundroute.id}),n.push({type:"inbound",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:t++,VoiceExtensionId:u.inboundroute.id}),n.push({type:"inbound",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:t++,VoiceExtensionId:u.inboundroute.id});for(var a=0,i=0;a<u.inboundrouteApps.rows.length;a++,i=0){var s=u.inboundrouteApps.rows[a],o=[],r=[];s.intervals="*,*,*,*"!==s.interval?[s.interval]:s.IntervalId?_.map(_.filter(u.intervals.rows,{IntervalId:s.IntervalId}),"interval"):[],s.context=u.inboundroute.context,s.exten=u.inboundroute.exten,s.type&&(s.type=s.type.toLowerCase()),s.hasOwnProperty("answer")&&e.includes(s.app.toLowerCase())&&"custom"!==s.appType&&(s.answer?(o.push({type:s.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-ANSWER}=0]?Answer",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id}),o.push({type:s.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-ANSWER=1",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id})):(o.push({type:s.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-PROGRESS}=0]?Progress",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id}),o.push({type:s.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-PROGRESS=1",context:u.inboundroute.context,exten:u.inboundroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.inboundroute.id})));for(var l=0;l<s.intervals.length;l++){var d=t+s.intervals.length,c=l===s.intervals.length-1?t+o.length+r.length+2:t+l+1;o.splice(l,0,{type:"inbound",app:"GotoIfTime",appdata:s.intervals[l]+"?"+u.inboundroute.context+",${EXTEN},"+d+":"+u.inboundroute.context+",${EXTEN},"+c,exten:u.inboundroute.exten,context:u.inboundroute.context,priority:t+l,VoiceExtensionId:u.inboundroute.id})}s.priority=o.length?_.last(o).priority+1:t,t=(r.length?_.last(r).priority:s.priority)+1,n=_.concat(n,o,[s],r)}n.push({type:"inbound",app:"Hangup",exten:u.inboundroute.exten,context:u.inboundroute.context,priority:t,VoiceExtensionId:u.inboundroute.id}),m.voiceExtension.addApplications({id:u.inboundroute.id},_.sortBy(n,"priority")).$promise.then(function(e){u.inboundrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){u.inboundrouteApps=e||{count:0,rows:[]}}u.currentUser=e.getCurrentUser(),u.inboundroute={},u.inboundrouteApps={count:0,rows:[]},u.selectedInboundRouteApps=[],u.crudPermissions,u.query={sort:"priority"},u.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",types:["always","custom","list"],fields:[],isApp:!1},{app:"Queue",appType:"queue",context:"from-voip-provider",type:"Inbound",appdata:",xX,,,300,,,,,",icon:"icon-apps",options:"xX",interval:"*,*,*,*",answer:!0,isApp:!0,extraApi:[{name:"sounds",field:{name:"sound",key:"save_name",prefix:"/var/opt/motion2/server/files/sounds/converted/"},route:"sound",filters:{fields:"id,name,save_name",sort:"name"},permissions:{section:1007}},{name:"queues",field:{name:"queue",key:"name"},route:"voiceQueue",filters:{type:"inbound",fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:401}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",required:!0,param:0},{title:"Options",name:"options",type:"text",param:1},{title:"Url",name:"URL",type:"text",param:2},{title:"Announce_Overrides",name:"sound",type:"apiselect",values:"sounds",value:"'/var/opt/motion2/server/files/sounds/converted/{{sound.save_name}}'",option:"sound.name",defaultValues:[{value:"''",option:"None"}],param:3},{title:"Timeout",name:"timeout",type:"number",min:0,param:4},{title:"Agi",name:"agi",type:"text",param:5},{title:"Macro",name:"macro",type:"text",param:6},{title:"GoSub",name:"gosub",type:"text",param:7},{title:"Rule",name:"rule",type:"text",param:8},{title:"Position",name:"position",type:"number",min:0,param:9},{title:"Answer",name:"answer",type:"switch",general:!0}]},{app:"Playback",appType:"playback",context:"from-voip-provider",type:"Inbound",icon:"icon-apps",interval:"*,*,*,*",answer:!0,isApp:!0,extraApi:[{name:"sounds",field:{name:"sound",key:"save_name",prefix:"/var/opt/motion2/server/files/sounds/converted/"},route:"sound",filters:{fields:"id,name,save_name",sort:"name"},permissions:{section:1007}}],fields:[{title:"Audio_Files",name:"appdata",type:"apiselect",values:"sounds",value:"'/var/opt/motion2/server/files/sounds/converted/{{appdata.save_name}}'",option:"appdata.name",required:!0,param:0},{title:"Options",name:"options",type:"text",param:1},{title:"Answer",name:"answer",type:"switch",general:!0}]},{app:"Dial",appType:"dial",context:"from-voip-provider",type:"Inbound",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,fields:[{title:"Technology/Resource",name:"tech",type:"text",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"Dial",appType:"internalDial",context:"from-voip-provider",type:"Inbound",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"users",field:{name:"user",key:"name",prefix:"SIP/"},route:"user",filters:{fields:"id,name,role",sort:"name"},permissions:{sections:[{id:202,role:"agent"},{id:203,role:"telephone"}]}}],fields:[{title:"User",name:"user",type:"apiselect",values:"users",value:"'SIP/{{user.name}}'",option:"user.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"Dial",appType:"externalDial",context:"from-voip-provider",type:"inbound",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"trunks",field:{name:"trunk",key:"name"},route:"trunk",filters:{fields:"id,name",sort:"name"},permissions:{section:1011}}],fields:[{title:"Trunk",name:"trunk",type:"apiselect",values:"trunks",value:"trunk.name",option:"trunk.name",required:!0,param:0},{title:"Phone",name:"phone",required:!0,type:"text"},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"Dial",appType:"ringGroup",context:"from-voip-provider",type:"inbound",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"users",field:{name:"multipleUsers",key:"name",prefix:"SIP/"},route:"user",filters:{fields:"id,name,role",sort:"name"},permissions:{sections:[{id:202,role:"agent"},{id:203,role:"telephone"}]}}],fields:[{title:"User",name:"multipleUsers",type:"apiselect",multiple:!0,values:"users",value:"'SIP/{{multipleUsers.name}}'",option:"multipleUsers.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"AGI",alias:"CallySquare",appType:"agi",context:"from-voip-provider",type:"inbound",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"projects",field:{name:"project",key:"name",prefix:"agi://127.0.0.1/square,"},route:"squareProject",filters:{fields:"id,name",sort:"name"},permissions:{section:1103}}],fields:[{title:"Project",name:"project",type:"apiselect",values:"projects",value:"'agi://127.0.0.1/square,{{project.name}}'",option:"project.name",required:!0,param:0}]},{app:"goto",appType:"goTo",context:"from-voip-provider",type:"Inbound",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"contexts",field:{name:"context",key:"name"},route:"voiceContext",filters:{fields:"id,name",sort:"name"},permissions:{section:405}}],fields:[{title:"Context",name:"context",type:"apiselect",values:"contexts",value:"context.name",option:"context.name",required:!0,param:0},{title:"Extension",name:"extension",type:"text",required:!0,param:1},{title:"Priority",name:"priority",type:"text",required:!0,param:2}]},{app:"hangup",appType:"hangup",context:"from-voip-provider",type:"Inbound",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Hangup_Cause",name:"appdata",type:"select",param:0,values:[{option:"HANGUPCAUSE_1",value:"'1'"},{option:"HANGUPCAUSE_16",value:"'16'"},{option:"HANGUPCAUSE_17",value:"'17'"},{option:"HANGUPCAUSE_18",value:"'18'"},{option:"HANGUPCAUSE_21",value:"'21'"},{option:"HANGUPCAUSE_22",value:"'22'"},{option:"HANGUPCAUSE_27",value:"'27'"},{option:"HANGUPCAUSE_38",value:"'38'"},{option:"HANGUPCAUSE_41",value:"'41'"}],translate:!0,required:!0,general:!0}]},{app:"Set",appType:"set",context:"from-voip-provider",type:"Inbound",separator:"=",icon:"icon-apps",interval:"*,*,*,*",extraApi:[{name:"variables",field:{name:"name",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name"},permissions:{section:1012}}],isApp:!0,fields:[{title:"Variable",name:"name",type:"apiselect",values:"variables",value:"name.name",option:"name.name",required:!0,param:0},{title:"Value",name:"value",type:"text",required:!0,param:1}]},{app:null,appType:"custom",icon:"icon-apps",type:"Inbound",interval:"*,*,*,*",isApp:!0,fields:[{title:"Application_Name",name:"app",type:"text",required:!0,param:0},{title:"Arguments",name:"appdata",type:"text",param:1}]},{app:"Voicemail",appType:"voicemail",context:"from-voip-provider",icon:"icon-apps",type:"Inbound",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"voiceMails",field:{name:"voiceMail",key:"mailbox",suffix:"@from-voicemail"},route:"voiceMail",filters:{fields:"id,mailbox",sort:"mailbox"},permissions:{section:406}}],fields:[{title:"Mailbox@Context",name:"voiceMail",type:"apiselect",values:"voiceMails",value:"'{{voiceMail.mailbox}}@from-voicemail'",option:"voiceMail.mailbox",required:!0,param:0},{title:"Options",name:"options",type:"text",param:1}]}],["app"]),{isApp:!1}),u.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},u.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){o()}},u.init=function(e,t){u.inboundroute=e,u.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},u.applications.disabled=!u.crudPermissions.canEdit,u.query.VoiceExtensionId=e.id,u.query.isApp=!0,u.query.nolimit=!0,u.getInboundRouteApps(),u.getIntervals()},u.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){u.inboundrouteApps.rows.splice(t,1),o()},function(){console.log("CANCEL")})},u.getInboundRouteApps=function(){u.promise=m.voiceExtension.get(u.query,n).$promise},u.editInboundRouteApp=t,u.editInterval=function(e,t){if(u.inboundrouteApps.rows.length){var n=u.inboundrouteApps.rows[t]?u.inboundrouteApps.rows[t]:u.inboundrouteApps.rows[0];i.show({controller:"EditInboundAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/inboundroutes/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:u.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,o())})}},u.deleteInboundRouteApp=function(e){_.remove(u.inboundrouteApps.rows,{id:e.id}),o(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},u.deleteSelectedInboundRouteApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+u.selectedInboundRouteApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){u.selectedInboundRouteApps.forEach(function(e){_.remove(u.inboundrouteApps.rows,{id:e.id})}),u.selectedInboundRouteApps=[],o()})},u.rewriteRouting=o,u.getIntervals=function(){return m.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){u.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.voice").controller("InboundRouteActionsController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.agi=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agi.appdata)switch(l.agi.appType?l.agi.appType.toLowerCase():l.agi.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agi.appdata.split(",");l.agi.key=d[0],l.agi.language=d[1],l.agi.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agi.appdata.split(",");l.agi.accesskeyid=d[0],l.agi.secretaccesskey=d[1],l.agi.lexregion=d[2],l.agi.botname=d[3],l.agi.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agi.appdata.split(",");l.agi.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agi.text=d.slice(1,d.length).join(",");break;case"message":l.agi.text=l.agi.appdata;break;case"set":l.agi.name=l.agi.appdata.split("=")[0],l.agi.value=l.agi.appdata.split("=")[1];break;case"agi":l.agi.project=l.agi.appdata;break;default:var c=l.agi.appdata.split(",");l.agi.project=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.agi.type&&"outbound"===l.agi.type.toLowerCase()&&"outbounddial"===l.agi.appType.toLowerCase()&&(l.agi.prefix=l.agi.phone?l.agi.phone.split("$")[0]:void 0,l.agi.callerId=l.agi.callerID?"CALLERID(all)="+l.agi.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.agi.type&&"outbound"===l.agi.type.toLowerCase()&&"outboundDial"===l.agi.appType&&(l.agi.phone=i.cutdigits?(l.agi.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agi.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agi.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agi.options+="U(xcally-mixmonitor-context)"):l.agi.options=l.agi.options.replace("U(xcally-mixmonitor-context)",""));if(l.agi.appType&&"custom"===l.agi.appType);else switch((l.agi.app||l.agi.appType).toLowerCase()){case"set":l.agi.appdata=l.agi.name+"="+l.agi.value;break;case"custom":break;default:e[0]=l.agi.project,l.agi.appdata=e.join(",")}m(l.agi)},l.closeDialog=m,o.hasRole("admin")?s.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.projects=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.projects=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1103}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.projects,{id:e.resourceId})}),n=null;if(l.agi&&(n=_.find(l.projects,{name:l.agi.project})),n&&!_.some(t,["id",n.id])){var a=_.find(l.projects,{id:n.id});a.canSelect=!1,t.push(a)}l.projects=t})}else{var n=[],a=null;l.agi&&(a=_.find(l.projects,{name:l.agi.project}));for(var i=0;i<l.projects.length;i++)a&&l.projects[i].id===a.id&&(l.projects[i].canSelect=!1,n.push(l.projects[i]));l.projects=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppagiDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.custom=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.custom.appdata)switch(l.custom.appType?l.custom.appType.toLowerCase():l.custom.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.custom.appdata.split(",");l.custom.key=d[0],l.custom.language=d[1],l.custom.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.custom.appdata.split(",");l.custom.accesskeyid=d[0],l.custom.secretaccesskey=d[1],l.custom.lexregion=d[2],l.custom.botname=d[3],l.custom.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.custom.appdata.split(",");l.custom.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.custom.text=d.slice(1,d.length).join(",");break;case"message":l.custom.text=l.custom.appdata;break;case"set":l.custom.name=l.custom.appdata.split("=")[0],l.custom.value=l.custom.appdata.split("=")[1];break;case"agi":l.custom.project=l.custom.appdata;break;default:var c=l.custom.appdata.split(",");l.custom.app=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.custom.appdata=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.custom.type&&"outbound"===l.custom.type.toLowerCase()&&"outbounddial"===l.custom.appType.toLowerCase()&&(l.custom.prefix=l.custom.phone?l.custom.phone.split("$")[0]:void 0,l.custom.callerId=l.custom.callerID?"CALLERID(all)="+l.custom.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.custom.type&&"outbound"===l.custom.type.toLowerCase()&&"outboundDial"===l.custom.appType&&(l.custom.phone=i.cutdigits?(l.custom.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.custom.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.custom.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.custom.options+="U(xcally-mixmonitor-context)"):l.custom.options=l.custom.options.replace("U(xcally-mixmonitor-context)",""));if(l.custom.appType&&"custom"===l.custom.appType);else switch((l.custom.app||l.custom.appType).toLowerCase()){case"set":l.custom.appdata=l.custom.name+"="+l.custom.value;break;case"custom":break;default:e[0]=l.custom.app,e[1]=l.custom.appdata,l.custom.appdata=e.join(",")}m(l.custom)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppcustomDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.dial=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.dial.appdata)switch(l.dial.appType?l.dial.appType.toLowerCase():l.dial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.dial.appdata.split(",");l.dial.key=d[0],l.dial.language=d[1],l.dial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.dial.appdata.split(",");l.dial.accesskeyid=d[0],l.dial.secretaccesskey=d[1],l.dial.lexregion=d[2],l.dial.botname=d[3],l.dial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.dial.appdata.split(",");l.dial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.dial.text=d.slice(1,d.length).join(",");break;case"message":l.dial.text=l.dial.appdata;break;case"set":l.dial.name=l.dial.appdata.split("=")[0],l.dial.value=l.dial.appdata.split("=")[1];break;case"agi":l.dial.project=l.dial.appdata;break;default:var c=l.dial.appdata.split(",");l.dial.tech=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.dial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.dial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.dial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}function m(e){t.hide(e)}l.dial.type&&"outbound"===l.dial.type.toLowerCase()&&"outbounddial"===l.dial.appType.toLowerCase()&&(l.dial.prefix=l.dial.phone?l.dial.phone.split("$")[0]:void 0,l.dial.callerId=l.dial.callerID?"CALLERID(all)="+l.dial.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.dial.type&&"outbound"===l.dial.type.toLowerCase()&&"outboundDial"===l.dial.appType&&(l.dial.phone=i.cutdigits?(l.dial.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.dial.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.dial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.dial.options+="U(xcally-mixmonitor-context)"):l.dial.options=l.dial.options.replace("U(xcally-mixmonitor-context)",""));if(l.dial.appType&&"custom"===l.dial.appType);else switch((l.dial.app||l.dial.appType).toLowerCase()){case"set":l.dial.appdata=l.dial.name+"="+l.dial.value;break;case"custom":break;default:e[0]=l.dial.tech,e[1]=l.dial.timeout,e[2]=l.dial.options,e[3]=l.dial.url,l.dial.appdata=e.join(",")}m(l.dial)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppdialDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.externaldial=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.externaldial.appdata)switch(l.externaldial.appType?l.externaldial.appType.toLowerCase():l.externaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.externaldial.appdata.split(",");l.externaldial.key=d[0],l.externaldial.language=d[1],l.externaldial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.externaldial.appdata.split(",");l.externaldial.accesskeyid=d[0],l.externaldial.secretaccesskey=d[1],l.externaldial.lexregion=d[2],l.externaldial.botname=d[3],l.externaldial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.externaldial.appdata.split(",");l.externaldial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.externaldial.text=d.slice(1,d.length).join(",");break;case"message":l.externaldial.text=l.externaldial.appdata;break;case"set":l.externaldial.name=l.externaldial.appdata.split("=")[0],l.externaldial.value=l.externaldial.appdata.split("=")[1];break;case"agi":l.externaldial.project=l.externaldial.appdata;break;default:var c=l.externaldial.appdata.split(",");l.externaldial.trunk=c[0].split("/")[1],l.externaldial.phone=c[0].split("/")[2],l.externaldial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.externaldial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.externaldial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}function m(e){t.hide(e)}l.externaldial.type&&"outbound"===l.externaldial.type.toLowerCase()&&"outbounddial"===l.externaldial.appType.toLowerCase()&&(l.externaldial.prefix=l.externaldial.phone?l.externaldial.phone.split("$")[0]:void 0,l.externaldial.callerId=l.externaldial.callerID?"CALLERID(all)="+l.externaldial.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.externaldial.type&&"outbound"===l.externaldial.type.toLowerCase()&&"outboundDial"===l.externaldial.appType&&(l.externaldial.phone=i.cutdigits?(l.externaldial.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.externaldial.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.externaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.externaldial.options+="U(xcally-mixmonitor-context)"):l.externaldial.options=l.externaldial.options.replace("U(xcally-mixmonitor-context)",""));if(l.externaldial.appType&&"custom"===l.externaldial.appType);else switch((l.externaldial.app||l.externaldial.appType).toLowerCase()){case"set":l.externaldial.appdata=l.externaldial.name+"="+l.externaldial.value;break;case"custom":break;default:e[0]=["SIP",l.externaldial.trunk,l.externaldial.phone].join("/"),e[1]=l.externaldial.timeout,e[2]=l.externaldial.options,e[3]=l.externaldial.url,l.externaldial.appdata=e.join(",")}m(l.externaldial)},l.closeDialog=m,o.hasRole("admin")?s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.trunks=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.trunks=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.trunks,{id:e.resourceId})}),n=null;if(l.externaldial&&(n=_.find(l.trunks,{name:l.externaldial.trunk})),n&&!_.some(t,["id",n.id])){var a=_.find(l.trunks,{id:n.id});a.canSelect=!1,t.push(a)}l.trunks=t})}else{var n=[],a=null;l.externaldial&&(a=_.find(l.trunks,{name:l.externaldial.trunk}));for(var i=0;i<l.trunks.length;i++)a&&l.trunks[i].id===a.id&&(l.trunks[i].canSelect=!1,n.push(l.trunks[i]));l.trunks=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppexternaldialDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.goto=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.goto.appdata)switch(l.goto.appType?l.goto.appType.toLowerCase():l.goto.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.goto.appdata.split(",");l.goto.key=d[0],l.goto.language=d[1],l.goto.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.goto.appdata.split(",");l.goto.accesskeyid=d[0],l.goto.secretaccesskey=d[1],l.goto.lexregion=d[2],l.goto.botname=d[3],l.goto.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.goto.appdata.split(",");l.goto.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.goto.text=d.slice(1,d.length).join(",");break;case"message":l.goto.text=l.goto.appdata;break;case"set":l.goto.name=l.goto.appdata.split("=")[0],l.goto.value=l.goto.appdata.split("=")[1];break;case"agi":l.goto.project=l.goto.appdata;break;default:var c=l.goto.appdata.split(",");l.goto.context=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.goto.extension=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.goto.priority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.goto.type&&"outbound"===l.goto.type.toLowerCase()&&"outbounddial"===l.goto.appType.toLowerCase()&&(l.goto.prefix=l.goto.phone?l.goto.phone.split("$")[0]:void 0,l.goto.callerId=l.goto.callerID?"CALLERID(all)="+l.goto.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.goto.type&&"outbound"===l.goto.type.toLowerCase()&&"outboundDial"===l.goto.appType&&(l.goto.phone=i.cutdigits?(l.goto.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.goto.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.goto.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.goto.options+="U(xcally-mixmonitor-context)"):l.goto.options=l.goto.options.replace("U(xcally-mixmonitor-context)",""));if(l.goto.appType&&"custom"===l.goto.appType);else switch((l.goto.app||l.goto.appType).toLowerCase()){case"set":l.goto.appdata=l.goto.name+"="+l.goto.value;break;case"custom":break;default:e[0]=l.goto.context,e[1]=l.goto.extension,e[2]=l.goto.priority,l.goto.appdata=e.join(",")}m(l.goto)},l.closeDialog=m,o.hasRole("admin")?s.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.contexts=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.contexts=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.contexts,{id:e.resourceId})}),n=null;if(l.goto&&(n=_.find(l.contexts,{name:l.goto.context})),n&&!_.some(t,["id",n.id])){var a=_.find(l.contexts,{id:n.id});a.canSelect=!1,t.push(a)}l.contexts=t}):s.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){l.contexts=e.rows||[]})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppgotoDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.hangup=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.hangup.appdata)switch(l.hangup.appType?l.hangup.appType.toLowerCase():l.hangup.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.hangup.appdata.split(",");l.hangup.key=d[0],l.hangup.language=d[1],l.hangup.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.hangup.appdata.split(",");l.hangup.accesskeyid=d[0],l.hangup.secretaccesskey=d[1],l.hangup.lexregion=d[2],l.hangup.botname=d[3],l.hangup.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.hangup.appdata.split(",");l.hangup.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.hangup.text=d.slice(1,d.length).join(",");break;case"message":l.hangup.text=l.hangup.appdata;break;case"set":l.hangup.name=l.hangup.appdata.split("=")[0],l.hangup.value=l.hangup.appdata.split("=")[1];break;case"agi":l.hangup.project=l.hangup.appdata;break;default:var c=l.hangup.appdata.split(",");l.hangup.appdata=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.hangup.type&&"outbound"===l.hangup.type.toLowerCase()&&"outbounddial"===l.hangup.appType.toLowerCase()&&(l.hangup.prefix=l.hangup.phone?l.hangup.phone.split("$")[0]:void 0,l.hangup.callerId=l.hangup.callerID?"CALLERID(all)="+l.hangup.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.hangup.type&&"outbound"===l.hangup.type.toLowerCase()&&"outboundDial"===l.hangup.appType&&(l.hangup.phone=i.cutdigits?(l.hangup.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.hangup.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.hangup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.hangup.options+="U(xcally-mixmonitor-context)"):l.hangup.options=l.hangup.options.replace("U(xcally-mixmonitor-context)",""));if(l.hangup.appType&&"custom"===l.hangup.appType);else switch((l.hangup.app||l.hangup.appType).toLowerCase()){case"set":l.hangup.appdata=l.hangup.name+"="+l.hangup.value;break;case"custom":break;default:e[0]=l.hangup.appdata,l.hangup.appdata=e.join(",")}m(l.hangup)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundApphangupDialogController",e)}(),function(){"use strict";function e(t,o,n,e,a,r,i,s){var l=this;if(l.currentUser=i.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),l.internaldial=angular.copy(e),l.crudPermissions=s,l.hasModulePermissions={},l.internaldial.appdata)switch(l.internaldial.appType?l.internaldial.appType.toLowerCase():l.internaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.internaldial.appdata.split(",");l.internaldial.key=d[0],l.internaldial.language=d[1],l.internaldial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.internaldial.appdata.split(",");l.internaldial.accesskeyid=d[0],l.internaldial.secretaccesskey=d[1],l.internaldial.lexregion=d[2],l.internaldial.botname=d[3],l.internaldial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.internaldial.appdata.split(",");l.internaldial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.internaldial.text=d.slice(1,d.length).join(",");break;case"message":l.internaldial.text=l.internaldial.appdata;break;case"set":l.internaldial.name=l.internaldial.appdata.split("=")[0],l.internaldial.value=l.internaldial.appdata.split("=")[1];break;case"agi":l.internaldial.project=l.internaldial.appdata;break;default:var c=l.internaldial.appdata.split(",");l.internaldial.user=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.internaldial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.internaldial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.internaldial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}l.internaldial.type&&"outbound"===l.internaldial.type.toLowerCase()&&"outbounddial"===l.internaldial.appType.toLowerCase()&&(l.internaldial.prefix=l.internaldial.phone?l.internaldial.phone.split("$")[0]:void 0,l.internaldial.callerId=l.internaldial.callerID?"CALLERID(all)="+l.internaldial.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.internaldial.type&&"outbound"===l.internaldial.type.toLowerCase()&&"outboundDial"===l.internaldial.appType&&(l.internaldial.phone=a.cutdigits?(l.internaldial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(l.internaldial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?l.internaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.internaldial.options+="U(xcally-mixmonitor-context)"):l.internaldial.options=l.internaldial.options.replace("U(xcally-mixmonitor-context)",""));if(l.internaldial.appType&&"custom"===l.internaldial.appType);else switch((l.internaldial.app||l.internaldial.appType).toLowerCase()){case"set":l.internaldial.appdata=l.internaldial.name+"="+l.internaldial.value;break;case"custom":break;default:e[0]=l.internaldial.user,e[1]=l.internaldial.timeout,e[2]=l.internaldial.options,e[3]=l.internaldial.url,l.internaldial.appdata=e.join(",")}p(l.internaldial)},l.closeDialog=p;var m=[{id:202,role:"agent"},{id:203,role:"telephone"}],u=null;function p(e){t.hide(e)}i.hasRole("admin")?r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){l.users=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){u=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(r.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];u.forEach(function(e){e.role===m[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(r.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;l.internaldial&&(n=_.find(u,{name:l.internaldial.user}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&u.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),l.users=t}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETusers",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppinternaldialDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.playback=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.playback.appdata)switch(l.playback.appType?l.playback.appType.toLowerCase():l.playback.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.playback.appdata.split(",");l.playback.key=d[0],l.playback.language=d[1],l.playback.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.playback.appdata.split(",");l.playback.accesskeyid=d[0],l.playback.secretaccesskey=d[1],l.playback.lexregion=d[2],l.playback.botname=d[3],l.playback.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.playback.appdata.split(",");l.playback.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.playback.text=d.slice(1,d.length).join(",");break;case"message":l.playback.text=l.playback.appdata;break;case"set":l.playback.name=l.playback.appdata.split("=")[0],l.playback.value=l.playback.appdata.split("=")[1];break;case"agi":l.playback.project=l.playback.appdata;break;default:var c=l.playback.appdata.split(",");l.playback.appdata=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.playback.options=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.playback.type&&"outbound"===l.playback.type.toLowerCase()&&"outbounddial"===l.playback.appType.toLowerCase()&&(l.playback.prefix=l.playback.phone?l.playback.phone.split("$")[0]:void 0,l.playback.callerId=l.playback.callerID?"CALLERID(all)="+l.playback.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.playback.type&&"outbound"===l.playback.type.toLowerCase()&&"outboundDial"===l.playback.appType&&(l.playback.phone=i.cutdigits?(l.playback.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.playback.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.playback.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.playback.options+="U(xcally-mixmonitor-context)"):l.playback.options=l.playback.options.replace("U(xcally-mixmonitor-context)",""));if(l.playback.appType&&"custom"===l.playback.appType);else switch((l.playback.app||l.playback.appType).toLowerCase()){case"set":l.playback.appdata=l.playback.name+"="+l.playback.value;break;case"custom":break;default:e[0]=l.playback.appdata,e[1]=l.playback.options,l.playback.appdata=e.join(",")}m(l.playback)},l.closeDialog=m,o.hasRole("admin")?s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.sounds,{id:e.resourceId})}),n=null;if(l.playback&&(n=_.find(l.sounds,{save_name:l.playback.sound})),n&&!_.some(t,["id",n.id])){var a=_.find(l.sounds,{id:n.id});a.canSelect=!1,t.push(a)}l.sounds=t})}else{var n=[],a=null;l.playback&&(a=_.find(l.sounds,{save_name:l.playback.sound}));for(var i=0;i<l.sounds.length;i++)a&&l.sounds[i].id===a.id&&(l.sounds[i].canSelect=!1,n.push(l.sounds[i]));l.sounds=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppplaybackDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.options=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.queue.URL=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.queue.sound=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10),l.queue.timeout=_.isEmpty(c[4])?c[4]:isNaN(c[4])?c[4]:parseInt(c[4],10),l.queue.agi=_.isEmpty(c[5])?c[5]:isNaN(c[5])?c[5]:parseInt(c[5],10),l.queue.macro=_.isEmpty(c[6])?c[6]:isNaN(c[6])?c[6]:parseInt(c[6],10),l.queue.gosub=_.isEmpty(c[7])?c[7]:isNaN(c[7])?c[7]:parseInt(c[7],10),l.queue.rule=_.isEmpty(c[8])?c[8]:isNaN(c[8])?c[8]:parseInt(c[8],10),l.queue.position=_.isEmpty(c[9])?c[9]:isNaN(c[9])?c[9]:parseInt(c[9],10)}function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.options,e[2]=l.queue.URL,e[3]=l.queue.sound,e[4]=l.queue.timeout,e[5]=l.queue.agi,e[6]=l.queue.macro,e[7]=l.queue.gosub,e[8]=l.queue.rule,e[9]=l.queue.position,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.sounds,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.sounds,{save_name:l.queue.sound})),n&&!_.some(t,["id",n.id])){var a=_.find(l.sounds,{id:n.id});a.canSelect=!1,t.push(a)}l.sounds=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.sounds,{save_name:l.queue.sound}));for(var i=0;i<l.sounds.length;i++)a&&l.sounds[i].id===a.id&&(l.sounds[i].canSelect=!1,n.push(l.sounds[i]));l.sounds=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.hasRole("admin")?s.voiceQueue.get({type:"inbound",fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.voiceQueue.get({type:"inbound",fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:401}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppqueueDialogController",e)}(),function(){"use strict";function e(t,o,n,e,a,r,i,s){var l=this;if(l.currentUser=i.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),l.ringgroup=angular.copy(e),l.crudPermissions=s,l.hasModulePermissions={},l.ringgroup.appdata)switch(l.ringgroup.appType?l.ringgroup.appType.toLowerCase():l.ringgroup.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.ringgroup.appdata.split(",");l.ringgroup.key=d[0],l.ringgroup.language=d[1],l.ringgroup.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.ringgroup.appdata.split(",");l.ringgroup.accesskeyid=d[0],l.ringgroup.secretaccesskey=d[1],l.ringgroup.lexregion=d[2],l.ringgroup.botname=d[3],l.ringgroup.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.ringgroup.appdata.split(",");l.ringgroup.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.ringgroup.text=d.slice(1,d.length).join(",");break;case"message":l.ringgroup.text=l.ringgroup.appdata;break;case"set":l.ringgroup.name=l.ringgroup.appdata.split("=")[0],l.ringgroup.value=l.ringgroup.appdata.split("=")[1];break;case"agi":l.ringgroup.project=l.ringgroup.appdata;break;default:var c=l.ringgroup.appdata.split(",");l.ringgroup.multipleUsers=c[0].split("&"),l.ringgroup.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.ringgroup.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.ringgroup.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}l.ringgroup.type&&"outbound"===l.ringgroup.type.toLowerCase()&&"outbounddial"===l.ringgroup.appType.toLowerCase()&&(l.ringgroup.prefix=l.ringgroup.phone?l.ringgroup.phone.split("$")[0]:void 0,l.ringgroup.callerId=l.ringgroup.callerID?"CALLERID(all)="+l.ringgroup.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.ringgroup.type&&"outbound"===l.ringgroup.type.toLowerCase()&&"outboundDial"===l.ringgroup.appType&&(l.ringgroup.phone=a.cutdigits?(l.ringgroup.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(l.ringgroup.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?l.ringgroup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.ringgroup.options+="U(xcally-mixmonitor-context)"):l.ringgroup.options=l.ringgroup.options.replace("U(xcally-mixmonitor-context)",""));if(l.ringgroup.appType&&"custom"===l.ringgroup.appType);else switch((l.ringgroup.app||l.ringgroup.appType).toLowerCase()){case"set":l.ringgroup.appdata=l.ringgroup.name+"="+l.ringgroup.value;break;case"custom":break;default:e[0]=l.ringgroup.multipleUsers.join("&"),e[1]=l.ringgroup.timeout,e[2]=l.ringgroup.options,e[3]=l.ringgroup.url,l.ringgroup.appdata=e.join(",")}p(l.ringgroup)},l.closeDialog=p;var m=[{id:202,role:"agent"},{id:203,role:"telephone"}],u=null;function p(e){t.hide(e)}i.hasRole("admin")?r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){l.users=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){u=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(r.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];u.forEach(function(e){e.role===m[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(r.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;l.ringgroup&&(n=_.find(u,{name:l.ringgroup.multipleUsers}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&u.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),l.users=t}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETusers",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppringgroupDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.set=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.set.appdata)switch(l.set.appType?l.set.appType.toLowerCase():l.set.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.set.appdata.split(",");l.set.key=d[0],l.set.language=d[1],l.set.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.set.appdata.split(",");l.set.accesskeyid=d[0],l.set.secretaccesskey=d[1],l.set.lexregion=d[2],l.set.botname=d[3],l.set.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.set.appdata.split(",");l.set.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.set.text=d.slice(1,d.length).join(",");break;case"message":l.set.text=l.set.appdata;break;case"set":l.set.name=l.set.appdata.split("=")[0],l.set.value=l.set.appdata.split("=")[1];break;case"agi":l.set.project=l.set.appdata;break;default:var c=l.set.appdata.split("=");l.set.name=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.set.value=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.set.type&&"outbound"===l.set.type.toLowerCase()&&"outbounddial"===l.set.appType.toLowerCase()&&(l.set.prefix=l.set.phone?l.set.phone.split("$")[0]:void 0,l.set.callerId=l.set.callerID?"CALLERID(all)="+l.set.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.set.type&&"outbound"===l.set.type.toLowerCase()&&"outboundDial"===l.set.appType&&(l.set.phone=i.cutdigits?(l.set.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.set.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.set.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.set.options+="U(xcally-mixmonitor-context)"):l.set.options=l.set.options.replace("U(xcally-mixmonitor-context)",""));if(l.set.appType&&"custom"===l.set.appType);else switch((l.set.app||l.set.appType).toLowerCase()){case"set":l.set.appdata=l.set.name+"="+l.set.value;break;case"custom":break;default:e[0]=l.set.name,e[1]=l.set.value,l.set.appdata=e.join("=")}m(l.set)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.set&&(n=_.find(l.variables,{name:l.set.name})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.set&&(a=_.find(l.variables,{name:l.set.name}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppsetDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.voicemail=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.voicemail.appdata)switch(l.voicemail.appType?l.voicemail.appType.toLowerCase():l.voicemail.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.voicemail.appdata.split(",");l.voicemail.key=d[0],l.voicemail.language=d[1],l.voicemail.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.voicemail.appdata.split(",");l.voicemail.accesskeyid=d[0],l.voicemail.secretaccesskey=d[1],l.voicemail.lexregion=d[2],l.voicemail.botname=d[3],l.voicemail.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.voicemail.appdata.split(",");l.voicemail.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.voicemail.text=d.slice(1,d.length).join(",");break;case"message":l.voicemail.text=l.voicemail.appdata;break;case"set":l.voicemail.name=l.voicemail.appdata.split("=")[0],l.voicemail.value=l.voicemail.appdata.split("=")[1];break;case"agi":l.voicemail.project=l.voicemail.appdata;break;default:var c=l.voicemail.appdata.split(",");l.voicemail.voiceMail=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.voicemail.options=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.voicemail.type&&"outbound"===l.voicemail.type.toLowerCase()&&"outbounddial"===l.voicemail.appType.toLowerCase()&&(l.voicemail.prefix=l.voicemail.phone?l.voicemail.phone.split("$")[0]:void 0,l.voicemail.callerId=l.voicemail.callerID?"CALLERID(all)="+l.voicemail.callerID:void 0),l.saveInboundRouteApp=function(){l.errors=[];var e=[];l.voicemail.type&&"outbound"===l.voicemail.type.toLowerCase()&&"outboundDial"===l.voicemail.appType&&(l.voicemail.phone=i.cutdigits?(l.voicemail.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.voicemail.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.voicemail.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.voicemail.options+="U(xcally-mixmonitor-context)"):l.voicemail.options=l.voicemail.options.replace("U(xcally-mixmonitor-context)",""));if(l.voicemail.appType&&"custom"===l.voicemail.appType);else switch((l.voicemail.app||l.voicemail.appType).toLowerCase()){case"set":l.voicemail.appdata=l.voicemail.name+"="+l.voicemail.value;break;case"custom":break;default:e[0]=l.voicemail.voiceMail,e[1]=l.voicemail.options,l.voicemail.appdata=e.join(",")}m(l.voicemail)},l.closeDialog=m,o.hasRole("admin")?s.voiceMail.get({fields:"id,mailbox",sort:"mailbox"}).$promise.then(function(e){l.voiceMails=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VOICEMAILS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.voiceMail.get({fields:"id,mailbox",sort:"mailbox"}).$promise.then(function(e){l.voiceMails=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:406}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.voiceMails,{id:e.resourceId})}),n=null;if(l.voicemail&&(n=_.find(l.voiceMails,{mailbox:l.voicemail.voiceMail})),n&&!_.some(t,["id",n.id])){var a=_.find(l.voiceMails,{id:n.id});a.canSelect=!1,t.push(a)}l.voiceMails=t})}else{var n=[],a=null;l.voicemail&&(a=_.find(l.voiceMails,{mailbox:l.voicemail.voiceMail}));for(var i=0;i<l.voiceMails.length;i++)a&&l.voiceMails[i].id===a.id&&(l.voiceMails[i].canSelect=!1,n.push(l.voiceMails[i]));l.voiceMails=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMails",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","inboundrouteApp","inboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInboundAppvoicemailDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.inboundroute=c||e.params.inboundroute||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoInboundRoutes=function(){e.go("app.voice.inboundroutes")},u.saveInboundRoute=function(){r.voiceExtension.update({id:u.inboundroute.id},u.inboundroute).$promise.then(function(){l.success({title:"InboundRoute updated!",msg:u.inboundroute.name?u.inboundroute.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceExtension",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.inboundroute&&(n=_.find(u.contexts,{name:u.inboundroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","inboundroute","userProfileSection"],angular.module("app.voice").controller("InboundRouteController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.inboundroutes=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="inboundroutes",b.listOrder="",b.listOrderAsc=null,b.selectedInboundRoutes=[],b.query={fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"inbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,page:1},b.editstate=function(e,t){n.go("app.voice.inboundroutes.edit",{id:e.id,inboundroute:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("inboundroute")+"?").htmlContent("<b>"+(e.name||"inboundroute")+"</b> will be deleted.").ariaLabel("delete inboundroute").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getInboundRoutes=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceExtension.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="InboundRoutes",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditInboundRoute=function(e,t){i.show({controller:"CreateOrEditInboundRouteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/inboundroutes/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{inboundroute:t,inboundroutes:b.inboundroutes.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteInboundRoute=S,b.exportSelectedInboundRoutes=function(){var e=angular.copy(b.selectedInboundRoutes);return b.selectedInboundRoutes=[],e},b.deleteSelectedInboundRoutes=function(e){var t=i.confirm().title("Are you sure want to delete the selected inboundroutes?").htmlContent("<b>"+b.selectedInboundRoutes.length+" selected</b> will be deleted.").ariaLabel("delete InboundRoutes").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedInboundRoutes.forEach(function(e){S(e)}),b.selectedInboundRoutes=[]})},b.deselectInboundRoutes=function(){b.selectedInboundRoutes=[]},b.selectAllInboundRoutes=function(){b.selectedInboundRoutes=b.inboundroutes.rows},g.hasRole("admin")?m.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.contexts=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.contexts=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.contexts,{id:e.resourceId})}),n=null;if(b.inboundroute&&(n=_.find(b.contexts,{name:b.inboundroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(b.contexts,{id:n.id});a.canSelect=!1,t.push(a)}b.contexts=t}):m.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){b.contexts=e.rows||[]})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.inboundroutes=e||{count:0,rows:[]}}function S(e){m.voiceExtension.delete({id:e.id}).$promise.then(function(){_.remove(b.inboundroutes.rows,{id:e.id}),b.inboundroutes.count-=1,b.inboundroutes.rows.length||b.getInboundRoutes(),p.success({title:_.startCase("InboundRoute")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceExtension"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceExtension",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getInboundRoutes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","inboundroutes","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("InboundRoutesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_INTERNALROUTE",g.internalroute=angular.copy(l),g.internalroutes=r,g.newInternalRoute=!1,g.internalroute||(g.internalroute={appdata:"Internal Call",type:"internal",context:"from-sip"},g.title="VOICE.NEW_INTERNALROUTE",g.newInternalRoute=!0),g.addNewInternalRoute=function(){g.errors=[],d.voiceExtension.save(g.internalroute).$promise.then(function(e){g.internalroutes.unshift(e.toJSON()),o.success({title:"InternalRoute properly created",msg:g.internalroute.name?g.internalroute.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveInternalRoute=function(){g.errors=[],d.voiceExtension.update({id:g.internalroute.id},g.internalroute).$promise.then(function(e){var t=_.find(g.internalroutes,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"InternalRoute properly saved!",msg:g.internalroute.name?g.internalroute.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteInternalRoute=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The internalroute will be deleted.").ariaLabel("Delete InternalRoute").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceExtension.delete({id:g.internalroute.id}).$promise.then(function(){_.remove(g.internalroutes,{id:g.internalroute.id}),o.success({title:"InternalRoute properly deleted!",msg:(g.internalroute.name||"internalroute")+" has been deleted!"}),v(g.internalroute)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.contexts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.contexts=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.contexts,{id:e.resourceId})}),n=null;if(g.internalroute&&(n=_.find(g.contexts,{name:g.internalroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(g.contexts,{id:n.id});a.canSelect=!1,t.push(a)}g.contexts=t}):d.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){g.contexts=e.rows||[]})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","internalroutes","internalroute","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditInternalRouteDialogController",e)}(),function(){"use strict";function e(m,i,a,s,e){var u=this;function t(e,t){if(u.internalrouteApps.rows.length){var n=u.internalrouteApps.rows[t]?u.internalrouteApps.rows[t]:u.internalrouteApps.rows[0];i.show({controller:"EditInternalApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/internalroutes/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{internalrouteApp:n,internalroute:u.internalroute,crudPermissions:u.crudPermissions}}).then(function(e){e&&(e.id?u.internalrouteApps.rows[t]=e:u.internalrouteApps.rows.splice(t,0,e),o())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function o(){var e=["queue","playback"],t=2,n=[];n.push({type:"internal",app:"Set",appdata:"CDR(type)=internal",context:u.internalroute.context,exten:u.internalroute.exten,priority:t++,VoiceExtensionId:u.internalroute.id}),n.push({type:"internal",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:u.internalroute.context,exten:u.internalroute.exten,priority:t++,VoiceExtensionId:u.internalroute.id}),n.push({type:"internal",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:u.internalroute.context,exten:u.internalroute.exten,priority:t++,VoiceExtensionId:u.internalroute.id}),n.push({type:"internal",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:u.internalroute.context,exten:u.internalroute.exten,priority:t++,VoiceExtensionId:u.internalroute.id});for(var a=0,i=0;a<u.internalrouteApps.rows.length;a++,i=0){var s=u.internalrouteApps.rows[a],o=[],r=[];s.intervals="*,*,*,*"!==s.interval?[s.interval]:s.IntervalId?_.map(_.filter(u.intervals.rows,{IntervalId:s.IntervalId}),"interval"):[],s.context=u.internalroute.context,s.exten=u.internalroute.exten,s.type&&(s.type=s.type.toLowerCase()),s.hasOwnProperty("answer")&&e.includes(s.app.toLowerCase())&&"custom"!==s.appType&&(s.answer?(o.push({type:s.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-ANSWER}=0]?Answer",context:u.internalroute.context,exten:u.internalroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id}),o.push({type:s.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-ANSWER=1",context:u.internalroute.context,exten:u.internalroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id})):(o.push({type:s.type.toLowerCase(),app:"ExecIf",appdata:"$[${XCALLY-MOTION-PROGRESS}=0]?Progress",context:u.internalroute.context,exten:u.internalroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id}),o.push({type:s.type.toLowerCase(),app:"Set",appdata:"XCALLY-MOTION-PROGRESS=1",context:u.internalroute.context,exten:u.internalroute.exten,priority:s.intervals.length+t+i++,VoiceExtensionId:u.internalroute.id})));for(var l=0;l<s.intervals.length;l++){var d=t+s.intervals.length,c=l===s.intervals.length-1?t+o.length+r.length+2:t+l+1;o.splice(l,0,{type:"internal",app:"GotoIfTime",appdata:s.intervals[l]+"?"+u.internalroute.context+",${EXTEN},"+d+":"+u.internalroute.context+",${EXTEN},"+c,exten:u.internalroute.exten,context:u.internalroute.context,priority:t+l,VoiceExtensionId:u.internalroute.id})}s.priority=o.length?_.last(o).priority+1:t,t=(r.length?_.last(r).priority:s.priority)+1,n=_.concat(n,o,[s],r)}n.push({type:"internal",app:"Hangup",exten:u.internalroute.exten,context:u.internalroute.context,priority:t,VoiceExtensionId:u.internalroute.id}),m.voiceExtension.addApplications({id:u.internalroute.id},_.sortBy(n,"priority")).$promise.then(function(e){u.internalrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function n(e){u.internalrouteApps=e||{count:0,rows:[]}}u.currentUser=e.getCurrentUser(),u.internalroute={},u.internalrouteApps={count:0,rows:[]},u.selectedInternalRouteApps=[],u.crudPermissions,u.query={sort:"priority"},u.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",type:"Internal",types:["always","custom","list"],fields:[],isApp:!1},{app:"Queue",appType:"queue",context:"from-sip",type:"Internal",options:"xX",appdata:",xX,,,300,,,,,",icon:"icon-apps",interval:"*,*,*,*",answer:!0,isApp:!0,extraApi:[{name:"sounds",field:{name:"sound",key:"save_name",prefix:"/var/opt/motion2/server/files/sounds/converted/"},route:"sound",filters:{fields:"id,name,save_name",sort:"name"},permissions:{section:1007}},{name:"queues",field:{name:"queue",key:"name"},route:"voiceQueue",filters:{type:"inbound",fields:"id,name,type",sort:"name",nolimit:!0},permissions:{section:401}}],fields:[{title:"Queue",name:"queue",type:"apiselect",values:"queues",value:"queue.name",option:"queue.name",required:!0,param:0},{title:"Options",name:"options",type:"text",param:1},{title:"Url",name:"URL",type:"text",param:2},{title:"Announce_Overrides",name:"sound",type:"apiselect",values:"sounds",value:"'/var/opt/motion2/server/files/sounds/converted/{{sound.save_name}}'",option:"sound.name",defaultValues:[{value:"''",option:"None"}],param:3},{title:"Timeout",name:"timeout",type:"number",min:0,param:4},{title:"Agi",name:"agi",type:"text",param:5},{title:"Macro",name:"macro",type:"text",param:6},{title:"GoSub",name:"gosub",type:"text",param:7},{title:"Rule",name:"rule",type:"text",param:8},{title:"Position",name:"position",type:"number",min:0,param:9},{title:"Answer",name:"answer",type:"switch",general:!0}]},{app:"Playback",appType:"playback",context:"from-sip",type:"Internal",icon:"icon-apps",interval:"*,*,*,*",answer:!0,isApp:!0,extraApi:[{name:"sounds",field:{name:"appdata",key:"save_name",prefix:"/var/opt/motion2/server/files/sounds/converted/"},route:"sound",filters:{fields:"id,name,save_name",sort:"name"},permissions:{section:1007}}],fields:[{title:"Audio_Files",name:"appdata",type:"apiselect",values:"sounds",value:"'/var/opt/motion2/server/files/sounds/converted/{{appdata.save_name}}'",option:"appdata.name",required:!0,param:0},{title:"Options",name:"options",type:"text",param:1},{title:"Answer",name:"answer",type:"switch",general:!0}]},{app:"Dial",appType:"dial",context:"from-sip",type:"Internal",icon:"icon-apps",options:"xX",interval:"*,*,*,*",isApp:!0,fields:[{title:"Technology/Resource",name:"tech",type:"text",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"Dial",appType:"internalDial",context:"from-sip",type:"Internal",icon:"icon-apps",options:"xX",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"users",field:{name:"user",key:"name",prefix:"SIP/"},route:"user",filters:{fields:"id,name,role",sort:"name"},permissions:{sections:[{id:202,role:"agent"},{id:203,role:"telephone"}]}}],fields:[{title:"User",name:"user",type:"apiselect",values:"users",value:"'SIP/{{user.name}}'",option:"user.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"Dial",appType:"externalDial",context:"from-sip",type:"Internal",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"trunks",field:{name:"trunk",key:"name"},route:"trunk",filters:{fields:"id,name",sort:"name"},permissions:{section:1011}}],fields:[{title:"Trunk",name:"trunk",type:"apiselect",values:"trunks",value:"trunk.name",option:"trunk.name",required:!0,param:0},{title:"Phone",name:"phone",type:"text"},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"Dial",appType:"ringGroup",context:"from-sip",type:"Internal",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"users",field:{name:"multipleUsers",key:"name",prefix:"SIP/"},route:"user",filters:{fields:"id,name,role",sort:"name"},permissions:{sections:[{id:202,role:"agent"},{id:203,role:"telephone"}]}}],fields:[{title:"User",name:"multipleUsers",type:"apiselect",multiple:!0,values:"users",value:"'SIP/{{multipleUsers.name}}'",option:"multipleUsers.name",required:!0,param:0},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:"AGI",alias:"CallySquare",appType:"agi",context:"from-sip",type:"Internal",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"projects",field:{name:"project",key:"name",prefix:"agi://127.0.0.1/square,"},route:"squareProject",filters:{fields:"id,name",sort:"name"},permissions:{section:1103}}],fields:[{title:"Project",name:"project",type:"apiselect",values:"projects",value:"'agi://127.0.0.1/square,{{project.name}}'",option:"project.name",required:!0,param:0}]},{app:"goto",appType:"goTo",context:"from-sip",type:"Internal",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"contexts",field:{name:"context",key:"name"},route:"voiceContext",filters:{fields:"id,name",sort:"name"},permissions:{section:405}}],fields:[{title:"Context",name:"context",type:"apiselect",values:"contexts",value:"context.name",option:"context.name",required:!0,param:0},{title:"Extension",name:"extension",type:"text",required:!0,param:1},{title:"Priority",name:"priority",type:"text",required:!0,param:2}]},{app:"hangup",appType:"hangup",context:"from-sip",type:"Internal",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Hangup_Cause",name:"appdata",type:"select",param:0,values:[{option:"HANGUPCAUSE_1",value:"'1'"},{option:"HANGUPCAUSE_16",value:"'16'"},{option:"HANGUPCAUSE_17",value:"'17'"},{option:"HANGUPCAUSE_18",value:"'18'"},{option:"HANGUPCAUSE_21",value:"'21'"},{option:"HANGUPCAUSE_22",value:"'22'"},{option:"HANGUPCAUSE_27",value:"'27'"},{option:"HANGUPCAUSE_38",value:"'38'"},{option:"HANGUPCAUSE_41",value:"'41'"}],translate:!0,required:!0,general:!0}]},{app:"Set",appType:"set",context:"from-sip",type:"Internal",separator:"=",icon:"icon-apps",interval:"*,*,*,*",extraApi:[{name:"variables",field:{name:"name",key:"name"},route:"variable",filters:{fields:"id,name",sort:"name"},permissions:{section:1012}}],isApp:!0,fields:[{title:"Variable",name:"name",type:"apiselect",values:"variables",value:"name.name",option:"name.name",required:!0,param:0},{title:"Value",name:"value",type:"text",required:!0,param:1}]},{app:null,appType:"custom",icon:"icon-apps",type:"Internal",interval:"*,*,*,*",isApp:!0,fields:[{title:"Application_Name",name:"app",type:"text",required:!0,param:0},{title:"Arguments",name:"appdata",type:"text",param:1}]},{app:"Voicemail",appType:"voicemail",context:"from-sip",icon:"icon-apps",type:"Internal",interval:"*,*,*,*",isApp:!0,extraApi:[{name:"voiceMails",field:{name:"voiceMail",key:"mailbox",suffix:"@from-voicemail"},route:"voiceMail",filters:{fields:"id,mailbox",sort:"mailbox"},permissions:{section:406}}],fields:[{title:"Mailbox@Context",name:"voiceMail",type:"apiselect",values:"voiceMails",value:"'{{voiceMail.mailbox}}@from-voicemail'",option:"voiceMail.mailbox",required:!0,param:0},{title:"Options",name:"options",type:"text",param:1}]}],["app"]),{isApp:!1}),u.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},u.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){t(e,e.newIndex)},onSort:function(e){o()}},u.init=function(e,t){u.internalroute=e,u.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},u.applications.disabled=!u.crudPermissions.canEdit,u.query.VoiceExtensionId=e.id,u.query.isApp=!0,u.query.nolimit=!0,u.getInternalRouteApps(),u.getIntervals()},u.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){u.internalrouteApps.rows.splice(t,1),o()},function(){console.log("CANCEL")})},u.getInternalRouteApps=function(){u.promise=m.voiceExtension.get(u.query,n).$promise},u.editInternalRouteApp=t,u.editInterval=function(e,t){if(u.internalrouteApps.rows.length){var n=u.internalrouteApps.rows[t]?u.internalrouteApps.rows[t]:u.internalrouteApps.rows[0];i.show({controller:"EditInternalAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/internalroutes/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:u.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,o())})}},u.deleteInternalRouteApp=function(e){_.remove(u.internalrouteApps.rows,{id:e.id}),o(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},u.deleteSelectedInternalRouteApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+u.selectedInternalRouteApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){u.selectedInternalRouteApps.forEach(function(e){_.remove(u.internalrouteApps.rows,{id:e.id})}),u.selectedInternalRouteApps=[],o()})},u.rewriteRouting=o,u.getIntervals=function(){return m.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){u.intervals=e}).catch(function(e){console.error(e)})}}e.$inject=["api","$mdDialog","$document","toasty","Auth"],angular.module("app.voice").controller("InternalRouteActionsController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.agi=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.agi.appdata)switch(l.agi.appType?l.agi.appType.toLowerCase():l.agi.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.agi.appdata.split(",");l.agi.key=d[0],l.agi.language=d[1],l.agi.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.agi.appdata.split(",");l.agi.accesskeyid=d[0],l.agi.secretaccesskey=d[1],l.agi.lexregion=d[2],l.agi.botname=d[3],l.agi.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.agi.appdata.split(",");l.agi.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.agi.text=d.slice(1,d.length).join(",");break;case"message":l.agi.text=l.agi.appdata;break;case"set":l.agi.name=l.agi.appdata.split("=")[0],l.agi.value=l.agi.appdata.split("=")[1];break;case"agi":l.agi.project=l.agi.appdata;break;default:var c=l.agi.appdata.split(",");l.agi.project=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.agi.type&&"outbound"===l.agi.type.toLowerCase()&&"outbounddial"===l.agi.appType.toLowerCase()&&(l.agi.prefix=l.agi.phone?l.agi.phone.split("$")[0]:void 0,l.agi.callerId=l.agi.callerID?"CALLERID(all)="+l.agi.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.agi.type&&"outbound"===l.agi.type.toLowerCase()&&"outboundDial"===l.agi.appType&&(l.agi.phone=i.cutdigits?(l.agi.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.agi.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.agi.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.agi.options+="U(xcally-mixmonitor-context)"):l.agi.options=l.agi.options.replace("U(xcally-mixmonitor-context)",""));if(l.agi.appType&&"custom"===l.agi.appType);else switch((l.agi.app||l.agi.appType).toLowerCase()){case"set":l.agi.appdata=l.agi.name+"="+l.agi.value;break;case"custom":break;default:e[0]=l.agi.project,l.agi.appdata=e.join(",")}m(l.agi)},l.closeDialog=m,o.hasRole("admin")?s.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.projects=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PROJECTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.squareProject.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.projects=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1103}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.projects,{id:e.resourceId})}),n=null;if(l.agi&&(n=_.find(l.projects,{name:l.agi.project})),n&&!_.some(t,["id",n.id])){var a=_.find(l.projects,{id:n.id});a.canSelect=!1,t.push(a)}l.projects=t})}else{var n=[],a=null;l.agi&&(a=_.find(l.projects,{name:l.agi.project}));for(var i=0;i<l.projects.length;i++)a&&l.projects[i].id===a.id&&(l.projects[i].canSelect=!1,n.push(l.projects[i]));l.projects=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETprojects",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppagiDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.custom=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.custom.appdata)switch(l.custom.appType?l.custom.appType.toLowerCase():l.custom.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.custom.appdata.split(",");l.custom.key=d[0],l.custom.language=d[1],l.custom.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.custom.appdata.split(",");l.custom.accesskeyid=d[0],l.custom.secretaccesskey=d[1],l.custom.lexregion=d[2],l.custom.botname=d[3],l.custom.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.custom.appdata.split(",");l.custom.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.custom.text=d.slice(1,d.length).join(",");break;case"message":l.custom.text=l.custom.appdata;break;case"set":l.custom.name=l.custom.appdata.split("=")[0],l.custom.value=l.custom.appdata.split("=")[1];break;case"agi":l.custom.project=l.custom.appdata;break;default:var c=l.custom.appdata.split(",");l.custom.app=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.custom.appdata=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.custom.type&&"outbound"===l.custom.type.toLowerCase()&&"outbounddial"===l.custom.appType.toLowerCase()&&(l.custom.prefix=l.custom.phone?l.custom.phone.split("$")[0]:void 0,l.custom.callerId=l.custom.callerID?"CALLERID(all)="+l.custom.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.custom.type&&"outbound"===l.custom.type.toLowerCase()&&"outboundDial"===l.custom.appType&&(l.custom.phone=i.cutdigits?(l.custom.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.custom.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.custom.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.custom.options+="U(xcally-mixmonitor-context)"):l.custom.options=l.custom.options.replace("U(xcally-mixmonitor-context)",""));if(l.custom.appType&&"custom"===l.custom.appType);else switch((l.custom.app||l.custom.appType).toLowerCase()){case"set":l.custom.appdata=l.custom.name+"="+l.custom.value;break;case"custom":break;default:e[0]=l.custom.app,e[1]=l.custom.appdata,l.custom.appdata=e.join(",")}m(l.custom)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppcustomDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.dial=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.dial.appdata)switch(l.dial.appType?l.dial.appType.toLowerCase():l.dial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.dial.appdata.split(",");l.dial.key=d[0],l.dial.language=d[1],l.dial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.dial.appdata.split(",");l.dial.accesskeyid=d[0],l.dial.secretaccesskey=d[1],l.dial.lexregion=d[2],l.dial.botname=d[3],l.dial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.dial.appdata.split(",");l.dial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.dial.text=d.slice(1,d.length).join(",");break;case"message":l.dial.text=l.dial.appdata;break;case"set":l.dial.name=l.dial.appdata.split("=")[0],l.dial.value=l.dial.appdata.split("=")[1];break;case"agi":l.dial.project=l.dial.appdata;break;default:var c=l.dial.appdata.split(",");l.dial.tech=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.dial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.dial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.dial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}function m(e){t.hide(e)}l.dial.type&&"outbound"===l.dial.type.toLowerCase()&&"outbounddial"===l.dial.appType.toLowerCase()&&(l.dial.prefix=l.dial.phone?l.dial.phone.split("$")[0]:void 0,l.dial.callerId=l.dial.callerID?"CALLERID(all)="+l.dial.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.dial.type&&"outbound"===l.dial.type.toLowerCase()&&"outboundDial"===l.dial.appType&&(l.dial.phone=i.cutdigits?(l.dial.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.dial.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.dial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.dial.options+="U(xcally-mixmonitor-context)"):l.dial.options=l.dial.options.replace("U(xcally-mixmonitor-context)",""));if(l.dial.appType&&"custom"===l.dial.appType);else switch((l.dial.app||l.dial.appType).toLowerCase()){case"set":l.dial.appdata=l.dial.name+"="+l.dial.value;break;case"custom":break;default:e[0]=l.dial.tech,e[1]=l.dial.timeout,e[2]=l.dial.options,e[3]=l.dial.url,l.dial.appdata=e.join(",")}m(l.dial)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppdialDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.externaldial=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.externaldial.appdata)switch(l.externaldial.appType?l.externaldial.appType.toLowerCase():l.externaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.externaldial.appdata.split(",");l.externaldial.key=d[0],l.externaldial.language=d[1],l.externaldial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.externaldial.appdata.split(",");l.externaldial.accesskeyid=d[0],l.externaldial.secretaccesskey=d[1],l.externaldial.lexregion=d[2],l.externaldial.botname=d[3],l.externaldial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.externaldial.appdata.split(",");l.externaldial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.externaldial.text=d.slice(1,d.length).join(",");break;case"message":l.externaldial.text=l.externaldial.appdata;break;case"set":l.externaldial.name=l.externaldial.appdata.split("=")[0],l.externaldial.value=l.externaldial.appdata.split("=")[1];break;case"agi":l.externaldial.project=l.externaldial.appdata;break;default:var c=l.externaldial.appdata.split(",");l.externaldial.trunk=c[0].split("/")[1],l.externaldial.phone=c[0].split("/")[2],l.externaldial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.externaldial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.externaldial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}function m(e){t.hide(e)}l.externaldial.type&&"outbound"===l.externaldial.type.toLowerCase()&&"outbounddial"===l.externaldial.appType.toLowerCase()&&(l.externaldial.prefix=l.externaldial.phone?l.externaldial.phone.split("$")[0]:void 0,l.externaldial.callerId=l.externaldial.callerID?"CALLERID(all)="+l.externaldial.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.externaldial.type&&"outbound"===l.externaldial.type.toLowerCase()&&"outboundDial"===l.externaldial.appType&&(l.externaldial.phone=i.cutdigits?(l.externaldial.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.externaldial.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.externaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.externaldial.options+="U(xcally-mixmonitor-context)"):l.externaldial.options=l.externaldial.options.replace("U(xcally-mixmonitor-context)",""));if(l.externaldial.appType&&"custom"===l.externaldial.appType);else switch((l.externaldial.app||l.externaldial.appType).toLowerCase()){case"set":l.externaldial.appdata=l.externaldial.name+"="+l.externaldial.value;break;case"custom":break;default:e[0]=["SIP",l.externaldial.trunk,l.externaldial.phone].join("/"),e[1]=l.externaldial.timeout,e[2]=l.externaldial.options,e[3]=l.externaldial.url,l.externaldial.appdata=e.join(",")}m(l.externaldial)},l.closeDialog=m,o.hasRole("admin")?s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.trunks=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.trunks=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.trunks,{id:e.resourceId})}),n=null;if(l.externaldial&&(n=_.find(l.trunks,{name:l.externaldial.trunk})),n&&!_.some(t,["id",n.id])){var a=_.find(l.trunks,{id:n.id});a.canSelect=!1,t.push(a)}l.trunks=t})}else{var n=[],a=null;l.externaldial&&(a=_.find(l.trunks,{name:l.externaldial.trunk}));for(var i=0;i<l.trunks.length;i++)a&&l.trunks[i].id===a.id&&(l.trunks[i].canSelect=!1,n.push(l.trunks[i]));l.trunks=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppexternaldialDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.goto=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.goto.appdata)switch(l.goto.appType?l.goto.appType.toLowerCase():l.goto.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.goto.appdata.split(",");l.goto.key=d[0],l.goto.language=d[1],l.goto.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.goto.appdata.split(",");l.goto.accesskeyid=d[0],l.goto.secretaccesskey=d[1],l.goto.lexregion=d[2],l.goto.botname=d[3],l.goto.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.goto.appdata.split(",");l.goto.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.goto.text=d.slice(1,d.length).join(",");break;case"message":l.goto.text=l.goto.appdata;break;case"set":l.goto.name=l.goto.appdata.split("=")[0],l.goto.value=l.goto.appdata.split("=")[1];break;case"agi":l.goto.project=l.goto.appdata;break;default:var c=l.goto.appdata.split(",");l.goto.context=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.goto.extension=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.goto.priority=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10)}function m(e){t.hide(e)}l.goto.type&&"outbound"===l.goto.type.toLowerCase()&&"outbounddial"===l.goto.appType.toLowerCase()&&(l.goto.prefix=l.goto.phone?l.goto.phone.split("$")[0]:void 0,l.goto.callerId=l.goto.callerID?"CALLERID(all)="+l.goto.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.goto.type&&"outbound"===l.goto.type.toLowerCase()&&"outboundDial"===l.goto.appType&&(l.goto.phone=i.cutdigits?(l.goto.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.goto.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.goto.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.goto.options+="U(xcally-mixmonitor-context)"):l.goto.options=l.goto.options.replace("U(xcally-mixmonitor-context)",""));if(l.goto.appType&&"custom"===l.goto.appType);else switch((l.goto.app||l.goto.appType).toLowerCase()){case"set":l.goto.appdata=l.goto.name+"="+l.goto.value;break;case"custom":break;default:e[0]=l.goto.context,e[1]=l.goto.extension,e[2]=l.goto.priority,l.goto.appdata=e.join(",")}m(l.goto)},l.closeDialog=m,o.hasRole("admin")?s.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.contexts=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.contexts=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.contexts,{id:e.resourceId})}),n=null;if(l.goto&&(n=_.find(l.contexts,{name:l.goto.context})),n&&!_.some(t,["id",n.id])){var a=_.find(l.contexts,{id:n.id});a.canSelect=!1,t.push(a)}l.contexts=t}):s.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){l.contexts=e.rows||[]})}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppgotoDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.hangup=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.hangup.appdata)switch(l.hangup.appType?l.hangup.appType.toLowerCase():l.hangup.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.hangup.appdata.split(",");l.hangup.key=d[0],l.hangup.language=d[1],l.hangup.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.hangup.appdata.split(",");l.hangup.accesskeyid=d[0],l.hangup.secretaccesskey=d[1],l.hangup.lexregion=d[2],l.hangup.botname=d[3],l.hangup.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.hangup.appdata.split(",");l.hangup.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.hangup.text=d.slice(1,d.length).join(",");break;case"message":l.hangup.text=l.hangup.appdata;break;case"set":l.hangup.name=l.hangup.appdata.split("=")[0],l.hangup.value=l.hangup.appdata.split("=")[1];break;case"agi":l.hangup.project=l.hangup.appdata;break;default:var c=l.hangup.appdata.split(",");l.hangup.appdata=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10)}function m(e){t.hide(e)}l.hangup.type&&"outbound"===l.hangup.type.toLowerCase()&&"outbounddial"===l.hangup.appType.toLowerCase()&&(l.hangup.prefix=l.hangup.phone?l.hangup.phone.split("$")[0]:void 0,l.hangup.callerId=l.hangup.callerID?"CALLERID(all)="+l.hangup.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.hangup.type&&"outbound"===l.hangup.type.toLowerCase()&&"outboundDial"===l.hangup.appType&&(l.hangup.phone=i.cutdigits?(l.hangup.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.hangup.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.hangup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.hangup.options+="U(xcally-mixmonitor-context)"):l.hangup.options=l.hangup.options.replace("U(xcally-mixmonitor-context)",""));if(l.hangup.appType&&"custom"===l.hangup.appType);else switch((l.hangup.app||l.hangup.appType).toLowerCase()){case"set":l.hangup.appdata=l.hangup.name+"="+l.hangup.value;break;case"custom":break;default:e[0]=l.hangup.appdata,l.hangup.appdata=e.join(",")}m(l.hangup)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalApphangupDialogController",e)}(),function(){"use strict";function e(t,o,n,e,a,r,i,s){var l=this;if(l.currentUser=i.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),l.internaldial=angular.copy(e),l.crudPermissions=s,l.hasModulePermissions={},l.internaldial.appdata)switch(l.internaldial.appType?l.internaldial.appType.toLowerCase():l.internaldial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.internaldial.appdata.split(",");l.internaldial.key=d[0],l.internaldial.language=d[1],l.internaldial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.internaldial.appdata.split(",");l.internaldial.accesskeyid=d[0],l.internaldial.secretaccesskey=d[1],l.internaldial.lexregion=d[2],l.internaldial.botname=d[3],l.internaldial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.internaldial.appdata.split(",");l.internaldial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.internaldial.text=d.slice(1,d.length).join(",");break;case"message":l.internaldial.text=l.internaldial.appdata;break;case"set":l.internaldial.name=l.internaldial.appdata.split("=")[0],l.internaldial.value=l.internaldial.appdata.split("=")[1];break;case"agi":l.internaldial.project=l.internaldial.appdata;break;default:var c=l.internaldial.appdata.split(",");l.internaldial.user=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.internaldial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.internaldial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.internaldial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}l.internaldial.type&&"outbound"===l.internaldial.type.toLowerCase()&&"outbounddial"===l.internaldial.appType.toLowerCase()&&(l.internaldial.prefix=l.internaldial.phone?l.internaldial.phone.split("$")[0]:void 0,l.internaldial.callerId=l.internaldial.callerID?"CALLERID(all)="+l.internaldial.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.internaldial.type&&"outbound"===l.internaldial.type.toLowerCase()&&"outboundDial"===l.internaldial.appType&&(l.internaldial.phone=a.cutdigits?(l.internaldial.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(l.internaldial.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?l.internaldial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.internaldial.options+="U(xcally-mixmonitor-context)"):l.internaldial.options=l.internaldial.options.replace("U(xcally-mixmonitor-context)",""));if(l.internaldial.appType&&"custom"===l.internaldial.appType);else switch((l.internaldial.app||l.internaldial.appType).toLowerCase()){case"set":l.internaldial.appdata=l.internaldial.name+"="+l.internaldial.value;break;case"custom":break;default:e[0]=l.internaldial.user,e[1]=l.internaldial.timeout,e[2]=l.internaldial.options,e[3]=l.internaldial.url,l.internaldial.appdata=e.join(",")}p(l.internaldial)},l.closeDialog=p;var m=[{id:202,role:"agent"},{id:203,role:"telephone"}],u=null;function p(e){t.hide(e)}i.hasRole("admin")?r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){l.users=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){u=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(r.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];u.forEach(function(e){e.role===m[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(r.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;l.internaldial&&(n=_.find(u,{name:l.internaldial.user}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&u.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),l.users=t}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETusers",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppinternaldialDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.playback=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.playback.appdata)switch(l.playback.appType?l.playback.appType.toLowerCase():l.playback.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.playback.appdata.split(",");l.playback.key=d[0],l.playback.language=d[1],l.playback.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.playback.appdata.split(",");l.playback.accesskeyid=d[0],l.playback.secretaccesskey=d[1],l.playback.lexregion=d[2],l.playback.botname=d[3],l.playback.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.playback.appdata.split(",");l.playback.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.playback.text=d.slice(1,d.length).join(",");break;case"message":l.playback.text=l.playback.appdata;break;case"set":l.playback.name=l.playback.appdata.split("=")[0],l.playback.value=l.playback.appdata.split("=")[1];break;case"agi":l.playback.project=l.playback.appdata;break;default:var c=l.playback.appdata.split(",");l.playback.appdata=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.playback.options=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.playback.type&&"outbound"===l.playback.type.toLowerCase()&&"outbounddial"===l.playback.appType.toLowerCase()&&(l.playback.prefix=l.playback.phone?l.playback.phone.split("$")[0]:void 0,l.playback.callerId=l.playback.callerID?"CALLERID(all)="+l.playback.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.playback.type&&"outbound"===l.playback.type.toLowerCase()&&"outboundDial"===l.playback.appType&&(l.playback.phone=i.cutdigits?(l.playback.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.playback.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.playback.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.playback.options+="U(xcally-mixmonitor-context)"):l.playback.options=l.playback.options.replace("U(xcally-mixmonitor-context)",""));if(l.playback.appType&&"custom"===l.playback.appType);else switch((l.playback.app||l.playback.appType).toLowerCase()){case"set":l.playback.appdata=l.playback.name+"="+l.playback.value;break;case"custom":break;default:e[0]=l.playback.appdata,e[1]=l.playback.options,l.playback.appdata=e.join(",")}m(l.playback)},l.closeDialog=m,o.hasRole("admin")?s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.sounds,{id:e.resourceId})}),n=null;if(l.playback&&(n=_.find(l.sounds,{save_name:l.playback.appdata})),n&&!_.some(t,["id",n.id])){var a=_.find(l.sounds,{id:n.id});a.canSelect=!1,t.push(a)}l.sounds=t})}else{var n=[],a=null;l.playback&&(a=_.find(l.sounds,{save_name:l.playback.appdata}));for(var i=0;i<l.sounds.length;i++)a&&l.sounds[i].id===a.id&&(l.sounds[i].canSelect=!1,n.push(l.sounds[i]));l.sounds=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppplaybackDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.queue=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.queue.appdata)switch(l.queue.appType?l.queue.appType.toLowerCase():l.queue.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.queue.appdata.split(",");l.queue.key=d[0],l.queue.language=d[1],l.queue.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.queue.appdata.split(",");l.queue.accesskeyid=d[0],l.queue.secretaccesskey=d[1],l.queue.lexregion=d[2],l.queue.botname=d[3],l.queue.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.queue.appdata.split(",");l.queue.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.queue.text=d.slice(1,d.length).join(",");break;case"message":l.queue.text=l.queue.appdata;break;case"set":l.queue.name=l.queue.appdata.split("=")[0],l.queue.value=l.queue.appdata.split("=")[1];break;case"agi":l.queue.project=l.queue.appdata;break;default:var c=l.queue.appdata.split(",");l.queue.queue=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.queue.options=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.queue.URL=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.queue.sound=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10),l.queue.timeout=_.isEmpty(c[4])?c[4]:isNaN(c[4])?c[4]:parseInt(c[4],10),l.queue.agi=_.isEmpty(c[5])?c[5]:isNaN(c[5])?c[5]:parseInt(c[5],10),l.queue.macro=_.isEmpty(c[6])?c[6]:isNaN(c[6])?c[6]:parseInt(c[6],10),l.queue.gosub=_.isEmpty(c[7])?c[7]:isNaN(c[7])?c[7]:parseInt(c[7],10),l.queue.rule=_.isEmpty(c[8])?c[8]:isNaN(c[8])?c[8]:parseInt(c[8],10),l.queue.position=_.isEmpty(c[9])?c[9]:isNaN(c[9])?c[9]:parseInt(c[9],10)}function m(e){t.hide(e)}l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outbounddial"===l.queue.appType.toLowerCase()&&(l.queue.prefix=l.queue.phone?l.queue.phone.split("$")[0]:void 0,l.queue.callerId=l.queue.callerID?"CALLERID(all)="+l.queue.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.queue.type&&"outbound"===l.queue.type.toLowerCase()&&"outboundDial"===l.queue.appType&&(l.queue.phone=i.cutdigits?(l.queue.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.queue.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.queue.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.queue.options+="U(xcally-mixmonitor-context)"):l.queue.options=l.queue.options.replace("U(xcally-mixmonitor-context)",""));if(l.queue.appType&&"custom"===l.queue.appType);else switch((l.queue.app||l.queue.appType).toLowerCase()){case"set":l.queue.appdata=l.queue.name+"="+l.queue.value;break;case"custom":break;default:e[0]=l.queue.queue,e[1]=l.queue.options,e[2]=l.queue.URL,e[3]=l.queue.sound,e[4]=l.queue.timeout,e[5]=l.queue.agi,e[6]=l.queue.macro,e[7]=l.queue.gosub,e[8]=l.queue.rule,e[9]=l.queue.position,l.queue.appdata=e.join(",")}m(l.queue)},l.closeDialog=m,o.hasRole("admin")?s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.sound.get({fields:"id,name,save_name",sort:"name"}).$promise.then(function(e){l.sounds=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.sounds,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.sounds,{save_name:l.queue.sound})),n&&!_.some(t,["id",n.id])){var a=_.find(l.sounds,{id:n.id});a.canSelect=!1,t.push(a)}l.sounds=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.sounds,{save_name:l.queue.sound}));for(var i=0;i<l.sounds.length;i++)a&&l.sounds[i].id===a.id&&(l.sounds[i].canSelect=!1,n.push(l.sounds[i]));l.sounds=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.hasRole("admin")?s.voiceQueue.get({type:"inbound",fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_QUEUES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.voiceQueue.get({type:"inbound",fields:"id,name,type",sort:"name",nolimit:"true"}).$promise.then(function(e){l.queues=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:401}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.queues,{id:e.resourceId})}),n=null;if(l.queue&&(n=_.find(l.queues,{name:l.queue.queue})),n&&!_.some(t,["id",n.id])){var a=_.find(l.queues,{id:n.id});a.canSelect=!1,t.push(a)}l.queues=t})}else{var n=[],a=null;l.queue&&(a=_.find(l.queues,{name:l.queue.queue}));for(var i=0;i<l.queues.length;i++)a&&l.queues[i].id===a.id&&(l.queues[i].canSelect=!1,n.push(l.queues[i]));l.queues=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETqueues",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppqueueDialogController",e)}(),function(){"use strict";function e(t,o,n,e,a,r,i,s){var l=this;if(l.currentUser=i.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(e.appType||e.app).toUpperCase(),l.ringgroup=angular.copy(e),l.crudPermissions=s,l.hasModulePermissions={},l.ringgroup.appdata)switch(l.ringgroup.appType?l.ringgroup.appType.toLowerCase():l.ringgroup.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.ringgroup.appdata.split(",");l.ringgroup.key=d[0],l.ringgroup.language=d[1],l.ringgroup.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.ringgroup.appdata.split(",");l.ringgroup.accesskeyid=d[0],l.ringgroup.secretaccesskey=d[1],l.ringgroup.lexregion=d[2],l.ringgroup.botname=d[3],l.ringgroup.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.ringgroup.appdata.split(",");l.ringgroup.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.ringgroup.text=d.slice(1,d.length).join(",");break;case"message":l.ringgroup.text=l.ringgroup.appdata;break;case"set":l.ringgroup.name=l.ringgroup.appdata.split("=")[0],l.ringgroup.value=l.ringgroup.appdata.split("=")[1];break;case"agi":l.ringgroup.project=l.ringgroup.appdata;break;default:var c=l.ringgroup.appdata.split(",");l.ringgroup.multipleUsers=c[0].split("&"),l.ringgroup.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.ringgroup.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.ringgroup.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}l.ringgroup.type&&"outbound"===l.ringgroup.type.toLowerCase()&&"outbounddial"===l.ringgroup.appType.toLowerCase()&&(l.ringgroup.prefix=l.ringgroup.phone?l.ringgroup.phone.split("$")[0]:void 0,l.ringgroup.callerId=l.ringgroup.callerID?"CALLERID(all)="+l.ringgroup.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.ringgroup.type&&"outbound"===l.ringgroup.type.toLowerCase()&&"outboundDial"===l.ringgroup.appType&&(l.ringgroup.phone=a.cutdigits?(l.ringgroup.prefix||"")+"${EXTEN:"+a.cutdigits+"}":(l.ringgroup.prefix||"")+"${EXTEN}","none"!==a.recordingFormat?l.ringgroup.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.ringgroup.options+="U(xcally-mixmonitor-context)"):l.ringgroup.options=l.ringgroup.options.replace("U(xcally-mixmonitor-context)",""));if(l.ringgroup.appType&&"custom"===l.ringgroup.appType);else switch((l.ringgroup.app||l.ringgroup.appType).toLowerCase()){case"set":l.ringgroup.appdata=l.ringgroup.name+"="+l.ringgroup.value;break;case"custom":break;default:e[0]=l.ringgroup.multipleUsers.join("&"),e[1]=l.ringgroup.timeout,e[2]=l.ringgroup.options,e[3]=l.ringgroup.url,l.ringgroup.appdata=e.join(",")}p(l.ringgroup)},l.closeDialog=p;var m=[{id:202,role:"agent"},{id:203,role:"telephone"}],u=null;function p(e){t.hide(e)}i.hasRole("admin")?r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){l.users=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_USERS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.user.get({fields:"id,name,role",sort:"name"}).$promise.then(function(e){u=e.rows||[]}).then(function(){for(var e=[],t=0;t<m.length;t++)e.push(r.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:m[t].id}).$promise);return o.all(e)}).then(function(e){for(var t=_.map(e,function(e){return e&&e.rows?e.rows[0]:null}),n=[],a=0;a<m.length;a++){var i=_.find(t,["sectionId",m[a].id]);if(i)if(i.autoAssociation){var s=[];u.forEach(function(e){e.role===m[a].role&&s.push(e)}),n.push({rows:s,count:s.length})}else n.push(r.userProfileResource.get({sectionId:i.id}).$promise)}return o.all(n)}).then(function(e){var t=[],n=null;l.ringgroup&&(n=_.find(u,{name:l.ringgroup.multipleUsers}));for(var a=0;a<e.length;a++){(e[a].rows||[]).forEach(function(e){t.push(e)})}n&&!_.some(t,["resourceId",n.id])&&u.forEach(function(e){e.id===n.id&&(e.canSelect=!1,t.push(e))}),l.users=t}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETusers",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppringgroupDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.set=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.set.appdata)switch(l.set.appType?l.set.appType.toLowerCase():l.set.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.set.appdata.split(",");l.set.key=d[0],l.set.language=d[1],l.set.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.set.appdata.split(",");l.set.accesskeyid=d[0],l.set.secretaccesskey=d[1],l.set.lexregion=d[2],l.set.botname=d[3],l.set.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.set.appdata.split(",");l.set.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.set.text=d.slice(1,d.length).join(",");break;case"message":l.set.text=l.set.appdata;break;case"set":l.set.name=l.set.appdata.split("=")[0],l.set.value=l.set.appdata.split("=")[1];break;case"agi":l.set.project=l.set.appdata;break;default:var c=l.set.appdata.split("=");l.set.name=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.set.value=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.set.type&&"outbound"===l.set.type.toLowerCase()&&"outbounddial"===l.set.appType.toLowerCase()&&(l.set.prefix=l.set.phone?l.set.phone.split("$")[0]:void 0,l.set.callerId=l.set.callerID?"CALLERID(all)="+l.set.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.set.type&&"outbound"===l.set.type.toLowerCase()&&"outboundDial"===l.set.appType&&(l.set.phone=i.cutdigits?(l.set.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.set.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.set.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.set.options+="U(xcally-mixmonitor-context)"):l.set.options=l.set.options.replace("U(xcally-mixmonitor-context)",""));if(l.set.appType&&"custom"===l.set.appType);else switch((l.set.app||l.set.appType).toLowerCase()){case"set":l.set.appdata=l.set.name+"="+l.set.value;break;case"custom":break;default:e[0]=l.set.name,e[1]=l.set.value,l.set.appdata=e.join("=")}m(l.set)},l.closeDialog=m,o.hasRole("admin")?s.variable.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.variables=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VARIABLES",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.variable.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.variables=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1012}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.variables,{id:e.resourceId})}),n=null;if(l.set&&(n=_.find(l.variables,{name:l.set.name})),n&&!_.some(t,["id",n.id])){var a=_.find(l.variables,{id:n.id});a.canSelect=!1,t.push(a)}l.variables=t})}else{var n=[],a=null;l.set&&(a=_.find(l.variables,{name:l.set.name}));for(var i=0;i<l.variables.length;i++)a&&l.variables[i].id===a.id&&(l.variables[i].canSelect=!1,n.push(l.variables[i]));l.variables=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvariables",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppsetDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.voicemail=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.voicemail.appdata)switch(l.voicemail.appType?l.voicemail.appType.toLowerCase():l.voicemail.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.voicemail.appdata.split(",");l.voicemail.key=d[0],l.voicemail.language=d[1],l.voicemail.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.voicemail.appdata.split(",");l.voicemail.accesskeyid=d[0],l.voicemail.secretaccesskey=d[1],l.voicemail.lexregion=d[2],l.voicemail.botname=d[3],l.voicemail.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.voicemail.appdata.split(",");l.voicemail.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.voicemail.text=d.slice(1,d.length).join(",");break;case"message":l.voicemail.text=l.voicemail.appdata;break;case"set":l.voicemail.name=l.voicemail.appdata.split("=")[0],l.voicemail.value=l.voicemail.appdata.split("=")[1];break;case"agi":l.voicemail.project=l.voicemail.appdata;break;default:var c=l.voicemail.appdata.split(",");l.voicemail.voiceMail=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.voicemail.options=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.voicemail.type&&"outbound"===l.voicemail.type.toLowerCase()&&"outbounddial"===l.voicemail.appType.toLowerCase()&&(l.voicemail.prefix=l.voicemail.phone?l.voicemail.phone.split("$")[0]:void 0,l.voicemail.callerId=l.voicemail.callerID?"CALLERID(all)="+l.voicemail.callerID:void 0),l.saveInternalRouteApp=function(){l.errors=[];var e=[];l.voicemail.type&&"outbound"===l.voicemail.type.toLowerCase()&&"outboundDial"===l.voicemail.appType&&(l.voicemail.phone=i.cutdigits?(l.voicemail.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.voicemail.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.voicemail.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.voicemail.options+="U(xcally-mixmonitor-context)"):l.voicemail.options=l.voicemail.options.replace("U(xcally-mixmonitor-context)",""));if(l.voicemail.appType&&"custom"===l.voicemail.appType);else switch((l.voicemail.app||l.voicemail.appType).toLowerCase()){case"set":l.voicemail.appdata=l.voicemail.name+"="+l.voicemail.value;break;case"custom":break;default:e[0]=l.voicemail.voiceMail,e[1]=l.voicemail.options,l.voicemail.appdata=e.join(",")}m(l.voicemail)},l.closeDialog=m,o.hasRole("admin")?s.voiceMail.get({fields:"id,mailbox",sort:"mailbox"}).$promise.then(function(e){l.voiceMails=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_VOICEMAILS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.voiceMail.get({fields:"id,mailbox",sort:"mailbox"}).$promise.then(function(e){l.voiceMails=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:406}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.voiceMails,{id:e.resourceId})}),n=null;if(l.voicemail&&(n=_.find(l.voiceMails,{mailbox:l.voicemail.voiceMail})),n&&!_.some(t,["id",n.id])){var a=_.find(l.voiceMails,{id:n.id});a.canSelect=!1,t.push(a)}l.voiceMails=t})}else{var n=[],a=null;l.voicemail&&(a=_.find(l.voiceMails,{mailbox:l.voicemail.voiceMail}));for(var i=0;i<l.voiceMails.length;i++)a&&l.voiceMails[i].id===a.id&&(l.voiceMails[i].canSelect=!1,n.push(l.voiceMails[i]));l.voiceMails=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMails",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","internalrouteApp","internalroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditInternalAppvoicemailDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.internalroute=c||e.params.internalroute||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoInternalRoutes=function(){e.go("app.voice.internalroutes")},u.saveInternalRoute=function(){r.voiceExtension.update({id:u.internalroute.id},u.internalroute).$promise.then(function(){l.success({title:"InternalRoute updated!",msg:u.internalroute.name?u.internalroute.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceExtension",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.internalroute&&(n=_.find(u.contexts,{name:u.internalroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","internalroute","userProfileSection"],angular.module("app.voice").controller("InternalRouteController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.internalroutes=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="internalroutes",b.listOrder="",b.listOrderAsc=null,b.selectedInternalRoutes=[],b.query={fields:"createdAt,updatedAt,id,appdata,type,exten,context,description",type:"internal",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,page:1},b.editstate=function(e,t){n.go("app.voice.internalroutes.edit",{id:e.id,internalroute:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("internalroute")+"?").htmlContent("<b>"+(e.name||"internalroute")+"</b> will be deleted.").ariaLabel("delete internalroute").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getInternalRoutes=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceExtension.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="InternalRoutes",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditInternalRoute=function(e,t){i.show({controller:"CreateOrEditInternalRouteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/internalroutes/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{internalroute:t,internalroutes:b.internalroutes.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteInternalRoute=S,b.exportSelectedInternalRoutes=function(){var e=angular.copy(b.selectedInternalRoutes);return b.selectedInternalRoutes=[],e},b.deleteSelectedInternalRoutes=function(e){var t=i.confirm().title("Are you sure want to delete the selected internalroutes?").htmlContent("<b>"+b.selectedInternalRoutes.length+" selected</b> will be deleted.").ariaLabel("delete InternalRoutes").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedInternalRoutes.forEach(function(e){S(e)}),b.selectedInternalRoutes=[]})},b.deselectInternalRoutes=function(){b.selectedInternalRoutes=[]},b.selectAllInternalRoutes=function(){b.selectedInternalRoutes=b.internalroutes.rows},g.hasRole("admin")?m.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.contexts=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.contexts=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.contexts,{id:e.resourceId})}),n=null;if(b.internalroute&&(n=_.find(b.contexts,{name:b.internalroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(b.contexts,{id:n.id});a.canSelect=!1,t.push(a)}b.contexts=t}):m.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){b.contexts=e.rows||[]})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.internalroutes=e||{count:0,rows:[]}}function S(e){m.voiceExtension.delete({id:e.id}).$promise.then(function(){_.remove(b.internalroutes.rows,{id:e.id}),b.internalroutes.count-=1,b.internalroutes.rows.length||b.getInternalRoutes(),p.success({title:_.startCase("InternalRoute")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceExtension"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceExtension",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getInternalRoutes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","internalroutes","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("InternalRoutesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_MUSICONHOLD",g.musiconhold=angular.copy(l),g.musiconholds=r,g.newMusicOnHold=!1,g.musiconhold||(g.musiconhold={mode:"files"},g.title="VOICE.NEW_MUSICONHOLD",g.newMusicOnHold=!0),g.addNewMusicOnHold=function(){g.errors=[],d.voiceMusicOnHold.save(g.musiconhold).$promise.then(function(e){g.musiconholds.unshift(e.toJSON()),o.success({title:"MusicOnHold properly created",msg:g.musiconhold.name?g.musiconhold.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMusicOnHold.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMusicOnHold=function(){g.errors=[],d.voiceMusicOnHold.update({id:g.musiconhold.id},g.musiconhold).$promise.then(function(e){var t=_.find(g.musiconholds,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MusicOnHold properly saved!",msg:g.musiconhold.name?g.musiconhold.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMusicOnHold.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMusicOnHold=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The musiconhold will be deleted.").ariaLabel("Delete MusicOnHold").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceMusicOnHold.delete({id:g.musiconhold.id}).$promise.then(function(){_.remove(g.musiconholds,{id:g.musiconhold.id}),o.success({title:"MusicOnHold properly deleted!",msg:(g.musiconhold.name||"musiconhold")+" has been deleted!"}),v(g.musiconhold)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMusicOnHold.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","musiconholds","musiconhold","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditMusicOnHoldDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.musiconhold={},c.musiconholdMohSounds={count:0,rows:[]},c.selectedMusicOnHoldMohSounds=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,save_name,converted_format,audio",limit:10,page:1},c.init=function(e,t){c.musiconhold=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.musiconhold.id,c.query.VoiceMusicOnHoldId=c.musiconhold.id,c.getMusicOnHoldMohSounds()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the mohSound?").htmlContent("<b>"+(e.name||"mohSound")+"</b> will be deleted.").ariaLabel("delete mohSound").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.voiceMusicOnHoldDownload=function(s,e,t){return l.sound.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="mohSound"+s.id,a=new Blob(t,{type:e.type});n=s.converted_format?s.save_name+"."+s.converted_format:s.save_name;var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getMusicOnHoldMohSounds=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.voiceMusicOnHold.getSounds(c.query,p).$promise},c.createOrEditMusicOnHoldMohSound=function(e,t){s.show({controller:"CreateOrEditMohSoundDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/musiconholds/edit/mohSounds/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{musiconhold:c.musiconhold,mohSound:t,mohSounds:c.musiconholdMohSounds.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedMusicOnHoldMohSounds=function(){var e=angular.copy(c.selectedMusicOnHoldMohSounds);return c.selectedMusicOnHoldMohSounds=[],e},c.deleteMusicOnHoldMohSound=g,c.deleteSelectedMusicOnHoldMohSounds=function(e){var t=s.confirm().title("Are you sure want to delete the selected mohSounds?").htmlContent("<b>"+c.selectedMusicOnHoldMohSounds.length+" selected</b> will be deleted.").ariaLabel("delete mohSounds").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedMusicOnHoldMohSounds.forEach(function(e){g(e)}),c.selectedMusicOnHoldMohSounds=[]})},d.hasRole("admin")?l.sound.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.sounds=e.rows||[]}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):l.sound.get({fields:"id,name",sort:"name"}).$promise.then(function(e){c.sounds=e.rows||[]}).then(function(){return l.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return l.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(c.sounds,{id:e.resourceId})}),n=null;if(c.musiconhold&&(n=_.find(c.sounds,{id:Number(c.musiconhold.id)})),n&&!_.some(t,["id",n.id])){var a=_.find(c.sounds,{id:n.id});a.canSelect=!1,t.push(a)}c.sounds=t})}else{var n=[],a=null;c.musiconhold&&(a=_.find(c.sounds,{id:Number(c.musiconhold.id)}));for(var i=0;i<c.sounds.length;i++)a&&c.sounds[i].id===a.id&&(c.sounds[i].canSelect=!1,n.push(c.sounds[i]));c.sounds=n}}).catch(function(e){r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})});var m=!0,u=1;function p(e){c.musiconholdMohSounds=e||{count:0,rows:[]}}function g(e){l.voiceMusicOnHold.removeSound({id:n.params.id,id2:e.id}).$promise.then(function(){_.remove(c.musiconholdMohSounds.rows,{id:e.id}),c.musiconholdMohSounds.count-=1,c.musiconholdMohSounds.rows.length||c.getMusicOnHoldMohSounds(),r.success({title:"MohSound deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETvoiceMusicOnHold"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMusicOnHold",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getMusicOnHoldMohSounds())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.voice").controller("MusicOnHoldMohSoundsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_MOHSOUND",g.mohSound=angular.copy(l),g.mohSounds=r,g.newMohSound=!1,g.mohSound||(g.mohSound={},g.title="VOICE.NEW_MOHSOUND",g.newMohSound=!0),t.params.id&&(g.mohSound.VoiceMusicOnHoldId=t.params.id),g.addNewMohSound=function(){g.errors=[],d.voiceMusicOnHold.addSound({id:t.params.id},g.mohSound).$promise.then(function(e){g.mohSounds.unshift(e.toJSON()),o.success({title:"MohSound properly created",msg:g.mohSound.name?g.mohSound.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMusicOnHold.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveMohSound=function(){g.errors=[],d.voiceMusicOnHold.update({id:g.mohSound.id},g.mohSound).$promise.then(function(e){var t=_.find(g.mohSounds,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"MohSound properly saved!",msg:g.mohSound.name?g.mohSound.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMusicOnHold.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteMohSound=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The mohSound will be deleted.").ariaLabel("Delete MohSound").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceMusicOnHold.delete({id:g.mohSound.id}).$promise.then(function(){_.remove(g.mohSounds,{id:g.mohSound.id}),o.success({title:"MohSound properly deleted!",msg:(g.mohSound.name||"mohSound")+" has been deleted!"}),v(g.mohSound)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMusicOnHold.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMusicOnHold.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.sound.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.sounds=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.sound.get({fields:"id,name",sort:"name"}).$promise.then(function(e){g.sounds=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.sounds,{id:e.resourceId})}),n=null;if(g.mohSound&&(n=_.find(g.sounds,{id:Number(g.mohSound.id)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.sounds,{id:n.id});a.canSelect=!1,t.push(a)}g.sounds=t})}else{var n=[],a=null;g.mohSound&&(a=_.find(g.sounds,{id:Number(g.mohSound.id)}));for(var i=0;i<g.sounds.length;i++)a&&g.sounds[i].id===a.id&&(g.sounds[i].canSelect=!1,n.push(g.sounds[i]));g.sounds=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","mohSounds","mohSound","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditMohSoundDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.musiconhold=c||e.params.musiconhold||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoMusicOnHolds=function(){e.go("app.voice.musiconholds")},u.saveMusicOnHold=function(){r.voiceMusicOnHold.update({id:u.musiconhold.id},u.musiconhold).$promise.then(function(){l.success({title:"MusicOnHold updated!",msg:u.musiconhold.name?u.musiconhold.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMusicOnHold",msg:e.data?JSON.stringify(e.data):e.toString()})})}}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","musiconhold","userProfileSection"],angular.module("app.voice").controller("MusicOnHoldController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.musiconholds=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="musiconholds",b.listOrder="",b.listOrderAsc=null,b.selectedMusicOnHolds=[],b.query={fields:"createdAt,updatedAt,id,name,mode,directory,application,format,sort",defaultEntry:"false",limit:10,page:1},b.arraymode=_.keyBy([{option:"Files",value:"'files'"},{option:"Custom",value:"'custom'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysort=_.keyBy([{option:"Random",value:"'random'"},{option:"Alphabetical",value:"'alpha'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.voice.musiconholds.edit",{id:e.id,musiconhold:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("musiconhold")+"?").htmlContent("<b>"+(e.name||"musiconhold")+"</b> will be deleted.").ariaLabel("delete musiconhold").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getMusicOnHolds=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceMusicOnHold.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="MusicOnHolds",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditMusicOnHold=function(e,t){i.show({controller:"CreateOrEditMusicOnHoldDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/musiconholds/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{musiconhold:t,musiconholds:b.musiconholds.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteMusicOnHold=S,b.exportSelectedMusicOnHolds=function(){var e=angular.copy(b.selectedMusicOnHolds);return b.selectedMusicOnHolds=[],e},b.deleteSelectedMusicOnHolds=function(e){var t=i.confirm().title("Are you sure want to delete the selected musiconholds?").htmlContent("<b>"+b.selectedMusicOnHolds.length+" selected</b> will be deleted.").ariaLabel("delete MusicOnHolds").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedMusicOnHolds.forEach(function(e){S(e)}),b.selectedMusicOnHolds=[]})},b.deselectMusicOnHolds=function(){b.selectedMusicOnHolds=[]},b.selectAllMusicOnHolds=function(){b.selectedMusicOnHolds=b.musiconholds.rows};var A=!0,E=1;function y(e){b.musiconholds=e||{count:0,rows:[]}}function S(e){m.voiceMusicOnHold.delete({id:e.id}).$promise.then(function(){_.remove(b.musiconholds.rows,{id:e.id}),b.musiconholds.count-=1,b.musiconholds.rows.length||b.getMusicOnHolds(),p.success({title:_.startCase("MusicOnHold")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceMusicOnHold"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceMusicOnHold",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getMusicOnHolds())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","musiconholds","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("MusicOnHoldsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,h,d,c,m,u){var f=this;function p(){var e=2,t=[];t.push({type:"outbound",app:"Set",appdata:"CDR(type)=outbound",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"CDR(destination)="+(f.outboundroute.cutdigits?"${EXTEN:"+f.outboundroute.cutdigits+"}":"${EXTEN}"),context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"outboundrouteid="+f.outboundroute.id,context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),f.outboundroute.hasOwnProperty("recordingFormat")&&"none"!==f.outboundroute.recordingFormat&&(t.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}),t.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_FORMAT="+f.outboundroute.recordingFormat||"wav",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:e++,VoiceExtensionId:f.outboundroute.id}));for(var n=0,a=0;n<f.outboundrouteApps.rows.length;n++,a=0){var i=f.outboundrouteApps.rows[n],s=[],o=[];i.intervals="*,*,*,*"!==i.interval?[i.interval]:i.IntervalId?_.map(_.filter(f.intervals.rows,{IntervalId:i.IntervalId}),"interval"):[],i.context=f.outboundroute.context,i.exten=f.outboundroute.exten,i.type&&(i.type=i.type.toLowerCase()),i.hasOwnProperty("tag")&&i.tag&&"--"!==i.tag&&s.push({type:i.type.toLowerCase(),app:"Set",appdata:"CDR(tag)="+i.tag,context:f.outboundroute.context,exten:f.outboundroute.exten,priority:i.intervals.length+e+a++,VoiceExtensionId:f.outboundroute.id}),i.callerID?s.push({type:i.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)="+i.callerID+")",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:i.intervals.length+e+a++,VoiceExtensionId:f.outboundroute.id}):s.push({type:i.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):NoOp(No number available)",context:f.outboundroute.context,exten:f.outboundroute.exten,priority:i.intervals.length+e+a++,VoiceExtensionId:f.outboundroute.id});for(var r=0;r<i.intervals.length;r++){var l=e+i.intervals.length,d=r===i.intervals.length-1?e+s.length+o.length+2:e+r+1;s.splice(r,0,{type:"outbound",app:"GotoIfTime",appdata:i.intervals[r]+"?"+f.outboundroute.context+",${EXTEN},"+l+":"+f.outboundroute.context+",${EXTEN},"+d,exten:f.outboundroute.exten,context:f.outboundroute.context,priority:e+r,VoiceExtensionId:f.outboundroute.id})}if("outboundDial"===i.appType){var c=_.find(f.apps,{appType:"outboundDial"});if(c&&c.fields){for(var m={},u=i.appdata.split(","),p=[],g=0,v=c.fields.length;g<v;g++)if(c.fields[g].hasOwnProperty("param"))switch(c.fields[g].name){case"trunk":m.trunk=u[c.fields[g].param].split("/")[1],m.phone=u[c.fields[g].param].split("/")[2],m.prefix=m.phone?m.phone.split("$")[0]:void 0,m.phone=f.outboundroute.cutdigits?(m.prefix||"")+"${EXTEN:"+f.outboundroute.cutdigits+"}":(m.prefix||"")+"${EXTEN}",p[c.fields[g].param]=["SIP",m.trunk,m.phone].join("/");break;case"options":m.options=u[c.fields[g].param],"none"!==f.outboundroute.recordingFormat?m.options.indexOf("U(xcally-mixmonitor-context)")<0&&(m.options+="U(xcally-mixmonitor-context)"):m.options=m.options.replace("U(xcally-mixmonitor-context)",""),p[c.fields[g].param]=m.options;break;default:p[c.fields[g].param]=u[c.fields[g].param]}i.appdata=p.join(",")}}i.priority=s.length?_.last(s).priority+1:e,e=(o.length?_.last(o).priority:i.priority)+1,t=_.concat(t,s,[i],o)}t.push({type:"outbound",app:"Hangup",exten:f.outboundroute.exten,context:f.outboundroute.context,priority:e,VoiceExtensionId:f.outboundroute.id}),h.voiceExtension.addApplications({id:f.outboundroute.id},_.sortBy(t,"priority")).$promise.then(function(e){f.outboundrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function g(e){a.hide(e)}f.currentUser=d.getCurrentUser(),f.errors=[],f.setting=m,f.license=c,f.crudPermissions=u,f.hasModulePermissions={},f.passwordPattern=f.setting&&f.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",f.title="VOICE.EDIT_OUTBOUNDROUTE",f.outboundroute=angular.copy(l),f.outboundroutes=r,f.newOutboundRoute=!1,f.outboundrouteApps={count:0,rows:[]},f.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",type:"Outbound",types:["always","custom","list"],fields:[],isApp:!1},{app:"Dial",appType:"outboundDial",context:"from-sip",type:"Outbound",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"trunks",route:"trunk",filters:{fields:"name",sort:"name"}},{name:"tags",route:"tag",filters:{fields:"name",sort:"name",nolimit:!0}}],fields:[{title:"Trunk",name:"trunk",type:"apiselect",values:"trunks",value:"trunk.name",option:"trunk.name",required:!0,param:0},{title:"Caller_ID",name:"callerID",type:"text",ngPattern:"/&quot;(.*)&quot;\\s&lt;(.*?)&gt;$/",help:!0},{title:"Prefix",name:"prefix",type:"text"},{title:"Tags",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",defaultValues:[{value:"'--'",option:"None"}]},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:null,type:"Outbound",appType:"custom",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Application_Name",name:"app",type:"text",required:!0,param:0},{title:"Arguments",name:"appdata",type:"text",param:1}]}],["app"]),{isApp:!1}),f.outboundroute||(f.outboundroute={appdata:"Outbound Call",type:"outbound",context:"from-sip",recordingFormat:"none"},f.title="VOICE.NEW_OUTBOUNDROUTE",f.newOutboundRoute=!0),f.addNewOutboundRoute=function(){f.errors=[],h.voiceExtension.save(f.outboundroute).$promise.then(function(e){f.outboundroutes.unshift(e.toJSON()),o.success({title:"OutboundRoute properly created",msg:f.outboundroute.name?f.outboundroute.name+" has been created!":""}),g(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){f.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},f.saveOutboundRoute=function(){f.errors=[],h.voiceExtension.update({id:f.outboundroute.id},f.outboundroute).$promise.then(function(e){var t=_.find(f.outboundroutes,{id:e.id});t&&(_.merge(t,_.pick(e.toJSON(),_.keys(t))),h.voiceExtension.get({sort:"priority",VoiceExtensionId:t.id,isApp:!0,nolimit:!0}).$promise.then(function(e){f.outboundrouteApps=e,p()})),o.success({title:"OutboundRoute properly saved!",msg:f.outboundroute.name?f.outboundroute.name+" has been saved!":""}),g(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){f.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},f.deleteOutboundRoute=function(n){h.voicePrefix.get({VoiceExtensionId:l.id}).$promise.then(function(e){if(e&&e.rows&&0<e.rows.length)return o.error({title:"Outbound route not deleted!",msg:"You can't remove an outbound route associated to an out prefix"});f.errors=[];var t=a.confirm().title("Are you sure?").content("The outboundroute will be deleted.").ariaLabel("Delete OutboundRoute").ok("Delete").cancel("Cancel").targetEvent(n);a.show(t).then(function(){h.voiceExtension.delete({id:f.outboundroute.id}).$promise.then(function(){_.remove(f.outboundroutes,{id:f.outboundroute.id}),o.success({title:"OutboundRoute properly deleted!",msg:(f.outboundroute.name||"outboundroute")+" has been deleted!"}),g(f.outboundroute)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){f.errors=e.data.errors||[{message:e.toString(),type:"api.voiceExtension.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceExtension.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})})},f.getDateFromString=function(e){return null===e?void 0:new Date(e)},f.rewriteRouting=p,f.closeDialog=g,d.hasRole("admin")?h.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){f.contexts=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):h.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){f.contexts=e.rows||[]}).then(function(){return h.userProfileSection.get({userProfileId:f.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:h.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(f.contexts,{id:e.resourceId})}),n=null;if(f.outboundroute&&(n=_.find(f.contexts,{name:f.outboundroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(f.contexts,{id:n.id});a.canSelect=!1,t.push(a)}f.contexts=t}):h.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){f.contexts=e.rows||[]})}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","outboundroutes","outboundroute","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditOutboundRouteDialogController",e)}(),function(){"use strict";function e(b,i,a,s,n,e,t){var A=this;function o(e,t){if(A.outboundrouteApps.rows.length){var n=A.outboundrouteApps.rows[t]?A.outboundrouteApps.rows[t]:A.outboundrouteApps.rows[0];i.show({controller:"EditoutboundApp"+(n.appType||n.app).toLowerCase()+"DialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/outboundroutes/edit/apps/"+(n.appType||n.app).toLowerCase()+"/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{outboundrouteApp:n,outboundroute:A.outboundroute,crudPermissions:A.crudPermissions}}).then(function(e){e&&(e.id?A.outboundrouteApps.rows[t]=e:A.outboundrouteApps.rows.splice(t,0,e),r())}).catch(function(e){e&&s.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:EDITMODALSHOW",msg:e.data?JSON.stringify(e.data):e.toString()})})}}function r(e){var t=2,n=[];n.push({type:"outbound",app:"Set",appdata:"CDR(type)=outbound",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"CDR(destination)="+(A.outboundroute.cutdigits?"${EXTEN:"+A.outboundroute.cutdigits+"}":"${EXTEN}"),context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"CDR(routeid)="+A.outboundroute.id,context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id});var a=t++;n.push({type:"outbound",app:"ExecIf",appdata:"$[${LEN(${CDR(prefix)})} > 0]?Goto("+(a+2)+"):Goto("+(a+1)+")",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:a,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:A.outboundroute.cutdigits?"CDR(prefix)=${EXTEN:0:"+A.outboundroute.cutdigits+"}":"CDR(prefix)=noprefix",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"outboundrouteid="+A.outboundroute.id,context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),A.outboundroute.hasOwnProperty("recordingFormat")&&"none"!==A.outboundroute.recordingFormat&&(n.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_FORMAT="+A.outboundroute.recordingFormat||"wav",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:t++,VoiceExtensionId:A.outboundroute.id}));for(var i=0,s=0;i<A.outboundrouteApps.rows.length;i++,s=0){var o=A.outboundrouteApps.rows[i],r=[],l=[];o.intervals="*,*,*,*"!==o.interval?[o.interval]:o.IntervalId?_.map(_.filter(A.intervals.rows,{IntervalId:o.IntervalId}),"interval"):[],o.context=A.outboundroute.context,o.exten=A.outboundroute.exten,o.type&&(o.type=o.type.toLowerCase()),o.hasOwnProperty("tag")&&o.tag&&"--"!==o.tag&&r.push({type:o.type.toLowerCase(),app:"Set",appdata:"CDR(tag)="+o.tag,context:A.outboundroute.context,exten:A.outboundroute.exten,priority:o.intervals.length+t+s++,VoiceExtensionId:A.outboundroute.id}),o.callerID?r.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)="+o.callerID+")",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:o.intervals.length+t+s++,VoiceExtensionId:A.outboundroute.id}):r.push({type:o.type.toLowerCase(),app:"ExecIf",appdata:"$[${LEN(${PREFIX-CALLERIDALL})} > 0]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):NoOp(No number available)",context:A.outboundroute.context,exten:A.outboundroute.exten,priority:o.intervals.length+t+s++,VoiceExtensionId:A.outboundroute.id});for(var d=0;d<o.intervals.length;d++){var c=t+o.intervals.length,m=d===o.intervals.length-1?t+r.length+l.length+2:t+d+1;r.splice(d,0,{type:"outbound",app:"GotoIfTime",appdata:o.intervals[d]+"?"+A.outboundroute.context+",${EXTEN},"+c+":"+A.outboundroute.context+",${EXTEN},"+m,exten:A.outboundroute.exten,context:A.outboundroute.context,priority:t+d,VoiceExtensionId:A.outboundroute.id})}if(e&&"outboundDial"===o.appType){var u=_.find(A.apps,{appType:"outboundDial"});if(u&&u.fields){for(var p={},g=o.appdata.split(","),v=[],h=0,f=u.fields.length;h<f;h++)if(u.fields[h].hasOwnProperty("param"))switch(u.fields[h].name){case"trunk":p.trunk=g[u.fields[h].param].split("/")[1],p.phone=g[u.fields[h].param].split("/")[2],p.prefix=p.phone?p.phone.split("$")[0]:void 0,p.phone=A.outboundroute.cutdigits?(p.prefix||"")+"${EXTEN:"+A.outboundroute.cutdigits+"}":(p.prefix||"")+"${EXTEN}",v[u.fields[h].param]=["SIP",p.trunk,p.phone].join("/");break;case"options":p.options=g[u.fields[h].param],"none"!==A.outboundroute.recordingFormat?p.options.indexOf("U(xcally-mixmonitor-context)")<0&&(p.options+="U(xcally-mixmonitor-context)"):p.options=p.options.replace("U(xcally-mixmonitor-context)",""),v[u.fields[h].param]=p.options;break;default:v[u.fields[h].param]=g[u.fields[h].param]}o.appdata=v.join(",")}}o.priority=r.length?_.last(r).priority+1:t,t=(l.length?_.last(l).priority:o.priority)+1,n=_.concat(n,r,[o],l)}n.push({type:"outbound",app:"Hangup",exten:A.outboundroute.exten,context:A.outboundroute.context,priority:t,VoiceExtensionId:A.outboundroute.id}),b.voiceExtension.addApplications({id:A.outboundroute.id},_.sortBy(n,"priority")).$promise.then(function(e){A.outboundrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function l(e){A.outboundrouteApps=e||{count:0,rows:[]}}A.currentUser=t.getCurrentUser(),A.outboundroute={},A.outboundrouteApps={count:0,rows:[]},A.selectedOutboundRouteApps=[],A.crudPermissions,A.query={sort:"priority"},A.apps=_.reject(_.sortBy([{app:"Interval",appType:"interval",type:"Outbound",types:["always","custom","list"],fields:[],isApp:!1},{app:"Dial",appType:"outboundDial",context:"from-sip",type:"Outbound",icon:"icon-apps",interval:"*,*,*,*",options:"xX",isApp:!0,extraApi:[{name:"trunks",field:{name:"trunk",key:"name"},route:"trunk",filters:{fields:"id,name",sort:"name"},permissions:{section:1011}},{name:"tags",field:{name:"tag",key:"name"},route:"tag",filters:{fields:"id,name",sort:"name",nolimit:!0},permissions:{section:1008}}],fields:[{title:"Trunk",name:"trunk",type:"apiselect",values:"trunks",value:"trunk.name",option:"trunk.name",required:!0,param:0},{title:"Caller_ID",name:"callerID",type:"text",help:!0},{title:"Prefix",name:"prefix",type:"text"},{title:"Tags",name:"tag",type:"apiselect",values:"tags",value:"tag.name",option:"tag.name",defaultValues:[{value:"'--'",option:"None"}]},{title:"Timeout",name:"timeout",type:"number",min:0,param:1},{title:"Options",name:"options",type:"text",param:2},{title:"Url",name:"url",type:"text",param:3}]},{app:null,type:"Outbound",appType:"custom",icon:"icon-apps",interval:"*,*,*,*",isApp:!0,fields:[{title:"Application_Name",name:"app",type:"text",required:!0,param:0},{title:"Arguments",name:"appdata",type:"text",param:1}]}],["app"]),{isApp:!1}),A.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},A.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){o(e,e.newIndex)},onSort:function(e){r()}},A.init=function(e,t){A.outboundroute=e,A.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},A.applications.disabled=!A.crudPermissions.canEdit,n.on("voiceExtension:update",A.onVoiceExtensionUpdate),A.query.VoiceExtensionId=e.id,A.query.isApp=!0,A.query.nolimit=!0,A.getOutboundRouteApps(),A.getIntervals()},A.deleteConfirm=function(e,t,n){var a=i.confirm().title("Are you sure want to delete the application?").htmlContent("<b>"+e.app+"</b> will be deleted.").ariaLabel("delete application").targetEvent(n).ok("OK").cancel("CANCEL");i.show(a).then(function(){A.outboundrouteApps.rows.splice(t,1),r()},function(){console.log("CANCEL")})},A.getOutboundRouteApps=function(){A.promise=b.voiceExtension.get(A.query,l).$promise},A.editOutboundRouteApp=o,A.editInterval=function(e,t){if(A.outboundrouteApps.rows.length){var n=A.outboundrouteApps.rows[t]?A.outboundrouteApps.rows[t]:A.outboundrouteApps.rows[0];i.show({controller:"EditoutboundAppintervalDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/outboundroutes/edit/apps/interval/dialog.html",parent:angular.element(a.body),targetEvent:e,clickOutsideToClose:!0,locals:{interval:{interval:n.interval,IntervalId:n.IntervalId,application:!0},intervals:[],crudPermissions:A.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,r())})}},A.deleteOutboundRouteApp=function(e){_.remove(A.outboundrouteApps.rows,{id:e.id}),r(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},A.deleteSelectedOutboundRouteApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+A.selectedOutboundRouteApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){A.selectedOutboundRouteApps.forEach(function(e){_.remove(A.outboundrouteApps.rows,{id:e.id})}),A.selectedOutboundRouteApps=[],r()})},A.rewriteRouting=r,A.getIntervals=function(){return b.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){A.intervals=e}).catch(function(e){console.error(e)})},A.onVoiceExtensionUpdate=function(e){e.VoiceExtensionId===A.outboundroute.id&&r(!0)},e.$on("$destroy",function(){n.removeAllListeners("voiceExtension:update")})}e.$inject=["api","$mdDialog","$document","toasty","socket","$scope","Auth"],angular.module("app.voice").controller("OutboundRouteActionsController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.custom=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.custom.appdata)switch(l.custom.appType?l.custom.appType.toLowerCase():l.custom.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.custom.appdata.split(",");l.custom.key=d[0],l.custom.language=d[1],l.custom.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.custom.appdata.split(",");l.custom.accesskeyid=d[0],l.custom.secretaccesskey=d[1],l.custom.lexregion=d[2],l.custom.botname=d[3],l.custom.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.custom.appdata.split(",");l.custom.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.custom.text=d.slice(1,d.length).join(",");break;case"message":l.custom.text=l.custom.appdata;break;case"set":l.custom.name=l.custom.appdata.split("=")[0],l.custom.value=l.custom.appdata.split("=")[1];break;case"agi":l.custom.project=l.custom.appdata;break;default:var c=l.custom.appdata.split(",");l.custom.app=_.isEmpty(c[0])?c[0]:isNaN(c[0])?c[0]:parseInt(c[0],10),l.custom.appdata=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10)}function m(e){t.hide(e)}l.custom.type&&"outbound"===l.custom.type.toLowerCase()&&"outbounddial"===l.custom.appType.toLowerCase()&&(l.custom.prefix=l.custom.phone?l.custom.phone.split("$")[0]:void 0,l.custom.callerId=l.custom.callerID?"CALLERID(all)="+l.custom.callerID:void 0),l.saveOutboundRouteApp=function(){l.errors=[];var e=[];l.custom.type&&"outbound"===l.custom.type.toLowerCase()&&"outboundDial"===l.custom.appType&&(l.custom.phone=i.cutdigits?(l.custom.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.custom.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.custom.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.custom.options+="U(xcally-mixmonitor-context)"):l.custom.options=l.custom.options.replace("U(xcally-mixmonitor-context)",""));if(l.custom.appType&&"custom"===l.custom.appType);else switch((l.custom.app||l.custom.appType).toLowerCase()){case"set":l.custom.appdata=l.custom.name+"="+l.custom.value;break;case"custom":break;default:e[0]=l.custom.app,e[1]=l.custom.appdata,l.custom.appdata=e.join(",")}m(l.custom)},l.closeDialog=m}e.$inject=["$mdDialog","$q","toasty","outboundrouteApp","outboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditoutboundAppcustomDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;if(c.currentUser=l.getCurrentUser(),c.errors=[],c.title="TOOLS.EDIT_INTERVAL",c.interval=angular.copy(i),c.intervals=s,c.newInterval=!1,c.types=["always","custom","list"],c.crudPermissions=d,c.daysOfWeek=a.getDaysOfWeek(),c.monthNumber=a.getMonthNumber(),c.monthName=a.getMonthName(),c.daysOfMonth=a.getDaysOfMonth(),c.interval)if("*,*,*,*"!==c.interval.interval){c.type="custom";var m=c.interval.interval.split(","),u=m[0],p=m[1],g=m[2],v=m[3];if("*"!==u){var h,f=u.split("-")[0],b=u.split("-")[1];(h=new Date).setHours(Number(f.split(":")[0])),h.setMinutes(Number(f.split(":")[1])),c.timeRangeFrom=h,(h=new Date).setHours(Number(b.split(":")[0])),h.setMinutes(Number(b.split(":")[1])),c.timeRangeTo=h}"*"!==p&&(c.dayOfWeekFrom=p.split("-")[0],c.dayOfWeekTo=p.split("-")[1]),"*"!==g&&(c.monthDayFrom=g.split("-")[0],c.monthDayTo=g.split("-")[1]),"*"!==v&&(c.monthFrom=v.split("-")[0],c.monthTo=v.split("-")[1])}else c.type="always";else c.interval={interval:"*,*,*,*"},c.type="always",c.title="TOOLS.NEW_INTERVAL",c.newInterval=!0;function A(){switch(c.type){case"always":case"list":return"*,*,*,*";case"custom":var e=[];if("*"!==c.timeRangeFrom&&c.timeRangeFrom&&c.timeRangeTo){var t=(c.timeRangeFrom.getHours()<10?"0":"")+c.timeRangeFrom.getHours()+":"+(c.timeRangeFrom.getMinutes()<10?"0":"")+c.timeRangeFrom.getMinutes(),n=(c.timeRangeTo.getHours()<10?"0":"")+c.timeRangeTo.getHours()+":"+(c.timeRangeTo.getMinutes()<10?"0":"")+c.timeRangeTo.getMinutes();e.push(t+"-"+n)}else e.push("*");return c.dayOfWeekFrom?c.dayOfWeekTo?e.push(c.dayOfWeekFrom+"-"+c.dayOfWeekTo):e.push(c.dayOfWeekFrom):e.push("*"),c.monthDayFrom?c.monthDayTo?e.push(c.monthDayFrom+"-"+c.monthDayTo):e.push(c.monthDayFrom):e.push("*"),c.monthFrom?c.monthTo?e.push(c.monthFrom+"-"+c.monthTo):e.push(c.monthFrom):e.push("*"),e.join()}}function E(e){t.hide(e)}e.params.id&&!c.interval.application&&(c.interval.IntervalId=e.params.id),c.interval.IntervalId&&c.interval.application&&(c.type="list"),c.addNewInterval=function(){c.errors=[],c.interval.interval=A(),r.interval.save(c.interval).$promise.then(function(e){c.intervals.push(e),o.success({title:"Interval properly created",msg:c.interval.name?c.interval.name+" has been created!":""}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.save"}]})},c.saveInterval=function(){c.errors=[],c.interval.interval=A(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),E(c.interval)):r.interval.update({id:c.interval.id},c.interval).$promise.then(function(e){var t=_.find(c.intervals,{id:e.id});t&&_.merge(t,e),o.success({title:"Interval properly saved!",msg:"Interval has been saved!"}),E()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=E,c.interval.application&&(l.hasRole("admin")?r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.interval.get({fields:"id,name,interval,IntervalId",IntervalId:"null",nolimit:!0}).$promise.then(function(e){c.intervals=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:c.currentUser.userProfileId,sectionId:1004}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=e&&e.rows?e.rows:[],n=[],a=null;c.interval&&(a=_.find(c.intervals,{name:c.interval.IntervalId})),a&&!_.some(t,["resourceId",a.id])&&c.intervals.forEach(function(e){e.id===a.id&&(e.canSelect=!1,n.push(e))}),c.intervals=n})}else c.intervals=[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_INTERVALS",msg:e.data?JSON.stringify(e.data):e.toString()})}))}e.$inject=["$state","$mdDialog","$mdToast","IndexFactory","interval","intervals","toasty","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditoutboundAppintervalDialogController",e)}(),function(){"use strict";function e(t,e,n,a,i,s,o,r){var l=this;if(l.currentUser=o.getCurrentUser(),l.errors=[],l.title="VOICE.EDIT_"+(a.appType||a.app).toUpperCase(),l.outbounddial=angular.copy(a),l.crudPermissions=r,l.hasModulePermissions={},l.outbounddial.appdata)switch(l.outbounddial.appType?l.outbounddial.appType.toLowerCase():l.outbounddial.app.toLowerCase()){case"custom":break;case"dialogflow":var d=l.outbounddial.appdata.split(",");l.outbounddial.key=d[0],l.outbounddial.language=d[1],l.outbounddial.welcomemessage=d.slice(2,d.length).join(",");break;case"amazonlex":d=l.outbounddial.appdata.split(",");l.outbounddial.accesskeyid=d[0],l.outbounddial.secretaccesskey=d[1],l.outbounddial.lexregion=d[2],l.outbounddial.botname=d[3],l.outbounddial.welcomemessage=d.slice(4,d.length).join(",");break;case"autoreply":d=l.outbounddial.appdata.split(",");l.outbounddial.times=isNaN(d[0])?d[0]:parseInt(d[0],10),l.outbounddial.text=d.slice(1,d.length).join(",");break;case"message":l.outbounddial.text=l.outbounddial.appdata;break;case"set":l.outbounddial.name=l.outbounddial.appdata.split("=")[0],l.outbounddial.value=l.outbounddial.appdata.split("=")[1];break;case"agi":l.outbounddial.project=l.outbounddial.appdata;break;default:var c=l.outbounddial.appdata.split(",");l.outbounddial.trunk=c[0].split("/")[1],l.outbounddial.phone=c[0].split("/")[2],l.outbounddial.timeout=_.isEmpty(c[1])?c[1]:isNaN(c[1])?c[1]:parseInt(c[1],10),l.outbounddial.options=_.isEmpty(c[2])?c[2]:isNaN(c[2])?c[2]:parseInt(c[2],10),l.outbounddial.url=_.isEmpty(c[3])?c[3]:isNaN(c[3])?c[3]:parseInt(c[3],10)}function m(e){t.hide(e)}l.outbounddial.type&&"outbound"===l.outbounddial.type.toLowerCase()&&"outbounddial"===l.outbounddial.appType.toLowerCase()&&(l.outbounddial.prefix=l.outbounddial.phone?l.outbounddial.phone.split("$")[0]:void 0,l.outbounddial.callerId=l.outbounddial.callerID?"CALLERID(all)="+l.outbounddial.callerID:void 0),l.saveOutboundRouteApp=function(){l.errors=[];var e=[];l.outbounddial.type&&"outbound"===l.outbounddial.type.toLowerCase()&&"outboundDial"===l.outbounddial.appType&&(l.outbounddial.phone=i.cutdigits?(l.outbounddial.prefix||"")+"${EXTEN:"+i.cutdigits+"}":(l.outbounddial.prefix||"")+"${EXTEN}","none"!==i.recordingFormat?l.outbounddial.options.indexOf("U(xcally-mixmonitor-context)")<0&&(l.outbounddial.options+="U(xcally-mixmonitor-context)"):l.outbounddial.options=l.outbounddial.options.replace("U(xcally-mixmonitor-context)",""));if(l.outbounddial.appType&&"custom"===l.outbounddial.appType);else switch((l.outbounddial.app||l.outbounddial.appType).toLowerCase()){case"set":l.outbounddial.appdata=l.outbounddial.name+"="+l.outbounddial.value;break;case"custom":break;default:e[0]=["SIP",l.outbounddial.trunk,l.outbounddial.phone].join("/"),e[1]=l.outbounddial.timeout,e[2]=l.outbounddial.options,e[3]=l.outbounddial.url,l.outbounddial.appdata=e.join(",")}m(l.outbounddial)},l.closeDialog=m,o.hasRole("admin")?s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.trunks=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TRUNKS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.trunk.get({fields:"id,name",sort:"name"}).$promise.then(function(e){l.trunks=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1011}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.trunks,{id:e.resourceId})}),n=null;if(l.outbounddial&&(n=_.find(l.trunks,{name:l.outbounddial.trunk})),n&&!_.some(t,["id",n.id])){var a=_.find(l.trunks,{id:n.id});a.canSelect=!1,t.push(a)}l.trunks=t})}else{var n=[],a=null;l.outbounddial&&(a=_.find(l.trunks,{name:l.outbounddial.trunk}));for(var i=0;i<l.trunks.length;i++)a&&l.trunks[i].id===a.id&&(l.trunks[i].canSelect=!1,n.push(l.trunks[i]));l.trunks=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtrunks",msg:e.data?JSON.stringify(e.data):e.toString()})}),o.hasRole("admin")?s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TAGS",msg:e.data?JSON.stringify(e.data):e.toString()})}):s.tag.get({fields:"id,name",sort:"name",nolimit:"true"}).$promise.then(function(e){l.tags=e.rows||[]}).then(function(){return s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,sectionId:1008}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return s.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(l.tags,{id:e.resourceId})}),n=null;if(l.outbounddial&&(n=_.find(l.tags,{name:l.outbounddial.tag})),n&&!_.some(t,["id",n.id])){var a=_.find(l.tags,{id:n.id});a.canSelect=!1,t.push(a)}l.tags=t})}else{var n=[],a=null;l.outbounddial&&(a=_.find(l.tags,{name:l.outbounddial.tag}));for(var i=0;i<l.tags.length;i++)a&&l.tags[i].id===a.id&&(l.tags[i].canSelect=!1,n.push(l.tags[i]));l.tags=n}}).catch(function(e){n.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETtags",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$mdDialog","$q","toasty","outboundrouteApp","outboundroute","api","Auth","crudPermissions"],angular.module("app.voice").controller("EditoutboundAppoutbounddialDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.outboundroute=c||e.params.outboundroute||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoOutboundRoutes=function(){e.go("app.voice.outboundroutes")},u.saveOutboundRoute=function(){r.voiceExtension.update({id:u.outboundroute.id},u.outboundroute).$promise.then(function(){l.success({title:"OutboundRoute updated!",msg:u.outboundroute.name?u.outboundroute.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceExtension",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.outboundroute&&(n=_.find(u.contexts,{name:u.outboundroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","outboundroute","userProfileSection"],angular.module("app.voice").controller("OutboundRouteController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.outboundroutes=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="outboundroutes",b.listOrder="",b.listOrderAsc=null,b.selectedOutboundRoutes=[],b.query={fields:"createdAt,updatedAt,id,appdata,type,exten,context,recordingFormat,cutdigits,description",type:"outbound",sort:"-updatedAt",VoiceExtensionId:"null",limit:10,page:1},b.arrayrecordingFormat=_.keyBy([{option:"none",value:"'none'"},{option:"wav",value:"'wav'"},{option:"wav49",value:"'WAV'"},{option:"gsm",value:"'gsm'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.voice.outboundroutes.edit",{id:e.id,outboundroute:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("outboundroute")+"?").htmlContent("<b>"+(e.name||"outboundroute")+"</b> will be deleted.").ariaLabel("delete outboundroute").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getOutboundRoutes=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceExtension.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="OutboundRoutes",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditOutboundRoute=function(e,t){i.show({controller:"CreateOrEditOutboundRouteDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/outboundroutes/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{outboundroute:t,outboundroutes:b.outboundroutes.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteOutboundRoute=S,b.exportSelectedOutboundRoutes=function(){var e=angular.copy(b.selectedOutboundRoutes);return b.selectedOutboundRoutes=[],e},b.deleteSelectedOutboundRoutes=function(e){var t=i.confirm().title("Are you sure want to delete the selected outboundroutes?").htmlContent("<b>"+b.selectedOutboundRoutes.length+" selected</b> will be deleted.").ariaLabel("delete OutboundRoutes").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedOutboundRoutes.forEach(function(e){S(e)}),b.selectedOutboundRoutes=[]})},b.deselectOutboundRoutes=function(){b.selectedOutboundRoutes=[]},b.selectAllOutboundRoutes=function(){b.selectedOutboundRoutes=b.outboundroutes.rows},g.hasRole("admin")?m.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.contexts=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){b.contexts=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.contexts,{id:e.resourceId})}),n=null;if(b.outboundroute&&(n=_.find(b.contexts,{name:b.outboundroute.context})),n&&!_.some(t,["id",n.id])){var a=_.find(b.contexts,{id:n.id});a.canSelect=!1,t.push(a)}b.contexts=t}):m.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){b.contexts=e.rows||[]})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.outboundroutes=e||{count:0,rows:[]}}function S(t){m.voicePrefix.get({VoiceExtensionId:t.id}).$promise.then(function(e){if(e&&e.rows&&0<e.rows.length)return p.error({title:"Outbound route not deleted!",msg:"You can't remove an outbound route associated to an out prefix"});m.voiceExtension.delete({id:t.id}).$promise.then(function(){_.remove(b.outboundroutes.rows,{id:t.id}),b.outboundroutes.count-=1,b.outboundroutes.rows.length||b.getOutboundRoutes(),p.success({title:_.startCase("OutboundRoute")+" deleted!",msg:t.name?t.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceExtension"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceExtension",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getOutboundRoutes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","outboundroutes","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("OutboundRoutesController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m,u,p,g){var v=this,h=!0;function f(){var e=i.localStorage.getItem("motion2.realtime.abandoned.voice.contacts:"+v.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(v.query=_.merge(e.query,_.omit(v.query,["sort","limit","page"])),v.query=_.omit(v.query,"filter")),d.hasRole("admin")?o.user.getQueues({id:d.getCurrentUser().id,fields:"id,name",channel:"voice",type:"inbound",nolimit:!0}).$promise.then(function(e){v.queues=e||{count:0,rows:[]},v.queuesMap=_.mapValues(_.keyBy(v.queues.rows,"name"),"name")}).catch(function(e){console.error(e)}).finally(function(){v.getContacts()}):o.userProfile.getResources({id:v.currentUser.userProfileId,section:"QueueCampaigns",channel:"voice",type:"inbound",sort:"-updatedAt",nolimit:!0}).$promise.then(function(e){v.queues=e||{count:0,rows:[]},v.queuesMap=_.mapValues(_.keyBy(v.queues.rows,"name"),"name")}).catch(function(e){console.error(e)}).finally(function(){v.getContacts()})}function b(e){v.contacts=e||{count:0,rows:[]},h=!1,v.refresh=!0}v.showTooltip=!1,v.refresh=!0,v.disable=[],v.agents=p||[],v.currentUser=d.getCurrentUser(),v.localizationMap=u,v.pickerModel={dateStart:null,dateEnd:null},v.queues={},v.contacts={count:0,rows:[]},v.dispositions=g,v.userProfile=r,v.userProfileSection=l&&1==l.count?l.rows[0]:null,v.crudPermissions=d.parseCrudPermissions(v.userProfileSection?v.userProfileSection.crudPermissions:null),v.query={fields:"id,type,calleridnum,calleridname,queue,queuecallerabandonAt,queuecallerexitAt,queuecallerexitreason,assigned,lastAssignedTo,updatedAt,disposition",type:"inbound",queuecallerexitreason:"TIMEOUT,ABANDONED",sort:"-updatedAt",limit:10,page:1},v.clearAll=function(){v.query.createdAt=void 0,v.pickerModel={dateStart:null,dateEnd:null},v.getContacts()},v.getContacts=function(){if(v.refresh=!1,v.pickerModel.dateStart&&!h){var e=moment(v.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();v.query.createdAt={$gte:v.pickerModel.dateStart,$lte:e}}else v.query.createdAt=void 0;v.query.queue=v.query.queue,v.query.offset=(v.query.page-1)*v.query.limit,i.localStorage.setItem("motion2.realtime.abandoned.voice.contacts:"+v.currentUser.id,JSON.stringify({query:_.omit(v.query,"queue")})),v.promise=o.voiceQueueReport.getVoiceQueuesReport(v.query,b).$promise},v.refreshContacts=function(){v.showTooltip=!1,v.getContacts()},v.onInit=f,v.assignedA=function(e,t){e&&(v.disable[e.id]=!0,o.voiceQueueReport.update({id:e.id,lastAssignedTo:t?t.name:null,assigned:!!t}).$promise.catch(function(e){console.log(e)}).finally(function(){v.disable[e.id]=!1}))},v.disposed=function(e,t){e&&o.voiceQueueReport.update({id:e.id,disposition:t||null}).$promise.catch(function(e){console.log(e)})},v.onSavevoiceQueueReport=function(e){e&&v.queuesMap&&"inbound"===e.type&&v.queuesMap[e.queue]&&(v.showTooltip=!0)},v.onUpdatevoiceQueueReport=function(e){if(e){var t=_.findIndex(v.contacts.rows,["id",e.id]);0<=t&&_.merge(v.contacts.rows[t],e)}},c.onWithoutApply("voiceQueueReport:save",v.onSavevoiceQueueReport),c.on("voiceQueueReport:update",v.onUpdatevoiceQueueReport),f();var A=!0,E=1;e.$watch("vm.query.filter",function(e,t){A?n(function(){A=!1}):(t||(E=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=E),v.getContacts())}),e.$on("$destroy",function(){c.removeAllListeners("voiceQueueReport:save"),c.removeAllListeners("voiceQueueReport:update")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","userProfile","userProfileSection","Auth","socket","toasty","dateFilterLocalizationFactory","agents","dispositions"],angular.module("app.voice").controller("AbandonedCallsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,o,t,n,a,i,s,r,l,d,c,m,u,p,g,v,h,f){var b=this,A=["userpic","online","lastLoginAt","lastPauseAt","pauseType","lastPauseAt","internal","address","chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","chatCapacity","openchannelCapacity","mailCapacity","smsCapacity","faxCapacity","chatCurrentCapacity","openchannelCurrentCapacity","mailCurrentCapacity","smsCurrentCapacity","faxCurrentCapacity","chatStatus","openchannelStatus","mailStatus","smsStatus","faxStatus","voiceStatus","chatStatusTime","openchannelStatusTime","mailStatusTime","smsStatusTime","faxStatusTime","voiceStatusTime","queue","destconnectedlinenum","screenrecording","phoneBarEnableScreenRecordingByAgent","phoneBarEnableAutomaticScreenRecording"],E=["chatPause","openchannelPause","mailPause","smsPause","faxPause","voicePause","online"];for(var y in b.currentUser=v.getCurrentUser(),b.availableStates=["ringing","inuse","busy","onhold","not_inuse"],b.pauses=s||{count:0,rows:[]},b.license=h,b.userProfile=p,b.userProfileSection=g&&1==g.count?g.rows[0]:null,b.crudPermissions=v.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.agents=r?_.keyBy(r.rows?r.rows:[],"id"):{},b.rpcAgents=l?_.keyBy(l.rows?l.rows:[],"id"):{},b.paginatedAgents={},b.load=!1,b.order=[],b.agentInternal={},b.agents)b.agents.hasOwnProperty(y)&&(b.agents[y].init=!0);b.query={limit:10,page:1,order:"fullname",globalStatusFilter:"",pauseTypeFilter:""},b.logout=function(e,t){return d.user.logout({id:e.id,device:"realtime",agent_id:e.id,agent_name:e.name}).$promise.then(function(){m.success({title:"Agent logout",msg:e.fullname+"  properly logout"}),b.agents[e.id]&&(b.agents[e.id].online=!1),b.rpcAgents[e.id]&&(b.rpcAgents[e.id].online=!1),T()}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.queueAdd=function(e,t){n.show({controller:"AgentqueueaddController",controllerAs:"vm",templateUrl:"app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",parent:angular.element(a.body),targetEvent:t,clickOutsideToClose:!0,locals:{agent:e,agents:[],channel:"voice",direction:"inbound",crudPermissions:b.crudPermissions}})},b.pause=function(t,e){return d.user.pause({id:t.id,type:e}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.unPause=function(t){return d.user.unpause({id:t.id}).$promise.then(function(e){b.agents[t.id]&&_.merge(b.agents[t.id],_.pick(e,A)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,A)),x(b.agents[t.id])}).catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.staff.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.showInfo=function(e){n.show(n.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},b.getAgentStatus=O,b.getAgentGlobalStatus=x,b.isPause=I,b.checkPause=function(e){return"pause"===e},b.isPartialPause=function(e){return"*pause"===e},b.onSave=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(_.omit(e,E),A)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,E),A)),x(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,A)),_.merge(b.rpcAgents[e.id],_.pick(e,A)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),x(b.agents[e.id]))},b.onInit=T,b.onConnect=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(_.merge(b.agents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])),_.merge(b.rpcAgents[b.agentInternal[e.destaccountcode]],_.pick(e,["queue","destconnectedlinenum"])))},b.onComplete=function(e){b.agents[b.agentInternal[e.destaccountcode]]&&(b.agents[b.agentInternal[e.destaccountcode]]=_.omit(b.agents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]),b.rpcAgents[b.agentInternal[e.destaccountcode]]=_.omit(b.rpcAgents[b.agentInternal[e.destaccountcode]],["queue","destconnectedlinenum"]))},b.screenRecording=function(e,t){return d.user.update({id:e.id},{screenrecording:t}).$promise.catch(function(e){m.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.user.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.on("user:save",b.onSave),c.on("user:update",b.onUpdate),c.on("user:agentconnect",b.onConnect),c.on("user:agentcomplete",b.onComplete),T();var S=f(function(){b.load&&(b.load=!1,T())},999);function T(e){b.load=!1;var t,n,a=o.defer();b.promise=a.promise,b.filteredAgents=[],b.order=[],_.forIn(b.agents,function(e,t){b.rpcAgents[t]&&_.merge(e,_.pick(_.omit(b.rpcAgents[t],E),A)),x(e),e.online?(b.filteredAgents.push(e),b.agentInternal[e.internal]=t):e.globalStatusTime=_.toNumber(moment().format("x"))}),b.query.globalStatusFilter&&_.remove(b.filteredAgents,function(e){return e.globalStatus!==b.query.globalStatusFilter}),b.query.pauseTypeFilter&&_.remove(b.filteredAgents,function(e){return e.pauseType!==b.query.pauseTypeFilter}),b.query.filter&&_.remove(b.filteredAgents,function(e){return e.fullname.toLowerCase().indexOf(b.query.filter.toLowerCase())<0}),b.filteredAgents=(t=b.filteredAgents,n=_.startsWith(b.query.order,"-")?"desc":"asc",_.orderBy(t,[b.query.order.replace("-","")],[n]));var i=(b.query.page-1)*b.query.limit;b.paginatedAgents=_.drop(b.filteredAgents,i).slice(0,b.query.limit);for(var s=0;s<b.paginatedAgents.length;s+=1)b.order.push(b.paginatedAgents[s].id);a.resolve(),b.load=!0}function I(e){return"pause"===e||"*pause"===e}function C(e){return"idle"===e||"unknown"===e||"unavailable"===e||"ringing"===e||_.isNil(e)}function O(e,t){return"voice"===t?"idle"!==e[t+"Status"]?e[t+"Status"]:e[t+"Pause"]?e[t+"Status"]="pause":"idle":e[t+"Pause"]?e[t+"Status"]="pause":e[t+"Status"]}function x(e){var t="unknown";t=_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"pause":_.some([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],I)?"*pause":_.every([O(e,"voice"),O(e,"chat"),O(e,"mail"),O(e,"openchannel"),O(e,"sms"),O(e,"fax")],C)?"idle":"busy",e.globalStatus!==t&&(e.globalStatus=t,e.init?(e.init=!1,e.globalStatusTime=I(t)?_.toNumber(moment(e.lastPauseAt).format("x")):_.max([e.voiceStatusTime,e.chatStatusTime,e.mailStatusTime,e.smsStatusTime,e.openchannelStatusTime,e.faxStatusTime])):e.globalStatusTime=_.toNumber(moment().format("x")))}e.$on("$destroy",function(){c.removeAllListeners("user:save"),c.removeAllListeners("user:update"),c.removeAllListeners("user:agentconnect"),c.removeAllListeners("user:agentcomplete"),S&&(f.cancel(S),S=null)})}e.$inject=["$scope","$q","$timeout","$mdDialog","$document","$filter","pauses","agents","rpcAgents","api","socket","toasty","helperClasses","userProfile","userProfileSection","Auth","license","$interval"],angular.module("app.voice").controller("AgentsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,s){var o=this;o.calls=i||{rows:[],count:0},o.query={limit:10,page:1},o.channelStatus=s.channelStatusOut,o.onSave=function(e){var t=_.find(o.calls.rows,{channel:e.channel});e.channelstatedesc=e.dialstatus?"up":"ring",t?_.merge(t,e):e.channel&&o.calls.rows.push(e)},o.onRemove=function(e){var t=_.findIndex(o.calls.rows,{channel:e.channel});0<=t&&(o.calls.rows[t].status="hangup");n(function(){o.calls.rows.splice(t,1)},5e3)},a.on("voice_outbound_channel:save",o.onSave),a.on("voice_outbound_channel:remove",o.onRemove),e.$on("$destroy",function(){a.removeAllListeners("voice_outbound_channel:save"),a.removeAllListeners("voice_outbound_channel:remove")})}e.$inject=["$scope","$timeout","api","socket","rpcCalls","helperClasses"],angular.module("app.voice").controller("OutboundCallsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,t,a,n,i,s,o,r,l,d,c,m,u){var p=this;p.currentUser=u.getCurrentUser(),p.agents=n||{count:0,rows:[]},p.queues=i?_.keyBy(i.rows?i.rows:[],"name"):{},p.rpcVoiceQueuesChannelsTmp=s?_.keyBy(s.rows?_.filter(s.rows,{type:"inbound"}):[],"uniqueid"):{},p.rpcVoiceQueuesChannels={},p.userProfile=c,p.userProfileSection=m&&1==m.count?m.rows[0]:null,p.crudPermissions=u.parseCrudPermissions(p.userProfileSection?p.userProfileSection.crudPermissions:null),p.queryChannels={limit:10,page:1},p.getSize=function(e){return _.size(e)},p.$onInit=function(){_.forIn(p.rpcVoiceQueuesChannelsTmp,function(e,t){_.find(p.queues,{name:e.name})&&(p.rpcVoiceQueuesChannels[t]=e)})},p.onSave=function(e){"inbound"===e.type&&_.find(p.queues,{name:e.name})&&(p.rpcVoiceQueuesChannels[e.uniqueid]=e)},p.onRemove=function(e){p.rpcVoiceQueuesChannels[e.uniqueid]&&delete p.rpcVoiceQueuesChannels[e.uniqueid]},p.hangup=function(t){return o.rpc.getVoiceQueuesChannelHangup({uniqueid:t}).$promise.then(function(e){d.success({title:"Channel "+t+" properly hangup!",msg:e.message||""})}).catch(function(e){d.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},p.redirectToAgent=function(t,e,n){return o.rpc.getVoiceQueuesChannelRedirect({uniqueid:t,exten:e,context:n}).$promise.then(function(e){d.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){d.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},p.redirectToNumber=function(e,t){var n=a.prompt().title("Which number do you want transfer the call to?").placeholder("Number").targetEvent(e).ok("Ok").cancel("Cancel");return a.show(n).then(function(e){return o.rpc.getVoiceQueuesChannelRedirect({uniqueid:t,exten:e}).$promise}).then(function(e){d.success({title:"Channel "+t+" properly redirect!",msg:e.message||""})}).catch(function(e){d.error({title:e.status+" - "+e.statusText,msg:JSON.stringify(e.data)||e.message.join(" ")})})},r.on("voice_queue_channel:save",p.onSave),r.on("voice_queue_channel:remove",p.onRemove),e.$on("$destroy",function(){r.removeAllListeners("voice_queue_channel:save"),r.removeAllListeners("voice_queue_channel:remove")})}e.$inject=["$scope","$timeout","$mdDialog","agents","queues","rpcVoiceQueuesChannels","api","socket","helperClasses","toasty","userProfile","userProfileSection","Auth"],angular.module("app.voice").controller("QueueCallsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d){var c=this,m=["total","answered","unmanaged","abandoned","sumHoldTime","sumDuration","sumBillable"];function u(){_.forIn(c.queues,function(e,t){c.rpcQueues[t]&&_.merge(e,_.pick(c.rpcQueues[t],m))})}c.count=a.count,c.queues=a?_.keyBy(a.rows?a.rows:[],"id"):{},c.rpcQueues=i?_.keyBy(i.rows?i.rows:[],"id"):{},c.userProfile=r,c.userProfileSection=l&&1==l.count?l.rows[0]:null,c.crudPermissions=d.parseCrudPermissions(c.userProfileSection?c.userProfileSection.crudPermissions:null),d.hasRole("admin")?c.query={type:"inbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1}:c.query={id:d.getCurrentUser().id,channel:"voice",type:"inbound",fields:"id,name",sort:"-updatedAt",limit:10,page:1},c.success=v,c.getQueues=function(){c.query.offset=(c.query.page-1)*c.query.limit,d.hasRole("admin")?c.promise=s.voiceQueue.get(c.query,v).$promise:(c.query.id=c.userProfile.id,c.query.section="VoiceQueues",c.promise=s.userProfile.getResources(c.query,v).$promise)},c.onSave=function(e){c.queues[e.id]&&_.merge(c.queues[e.id],_.pick(e,m))},c.$onInit=u,o.onWithoutApply("voice_queue:save",c.onSave),c.interval=t(function(){},999);var p=!0,g=1;function v(e){c.count=e.count,c.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},u()}e.$watch("vm.query.filter",function(e,t){p?n(function(){p=!1}):(t||(g=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=g),c.getQueues())}),e.$on("$destroy",function(){o.removeAllListeners("voice_queue:save"),c.interval&&t.cancel(c.interval)})}e.$inject=["$scope","$timeout","$interval","queues","rpcQueues","api","socket","userProfile","userProfileSection","Auth"],angular.module("app.voice").controller("QueueParamsVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,a,t,i,s,o,r,l,d,c,m,u,p){var g=this,v=["loggedIn","available","waiting","talking","pTalking","originated","message","dialActive","dialMethod","Trunk","paused"];function h(){var n=[];return _.forIn(g.queues,function(e,t){e.paused=0,e.loggedInDb=0,g.queues[t].agents={},n.push(l.voiceQueue.getMembers({id:t}).$promise),g.rpcQueues[t]&&_.merge(e,_.pick(g.rpcQueues[t],v))}),t.all(n).then(function(e){for(var t=0;t<e.length;t+=1)for(var n=0;n<e[t].rows.length;n++)e[t].rows[n].paused&&g.queues[e[t].rows[n].VoiceQueueId].paused++,g.queues[e[t].rows[n].VoiceQueueId].loggedInDb++,g.queues[e[t].rows[n].VoiceQueueId].agents[e[t].rows[n].UserId]=e[t].rows[n].VoiceQueueId}).catch(function(e){console.error(e)})}g.currentUser=p.getCurrentUser(),g.count=o.count?o.count:0,g.queues=o?_.keyBy(o.rows?o.rows:[],"id"):{},g.rpcQueues=r?_.keyBy(r.rows?r.rows:[],"id"):{},g.userProfile=m,g.userProfileSection=u&&1==u.count?u.rows[0]:null,g.crudPermissions=p.parseCrudPermissions(g.userProfileSection?g.userProfileSection.crudPermissions:null),p.hasRole("admin")?g.query={type:"inbound",sort:"-updatedAt",limit:10,page:1}:g.query={id:g.currentUser.id,channel:"voice",type:"inbound",sort:"-updatedAt",limit:10,page:1},g.success=A,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.voiceQueue.get(g.query,A).$promise:(g.query.id=g.userProfile.id,g.query.section="VoiceQueues",g.promise=l.userProfile.getResources(g.query,A).$promise)},g.createOrEditVoiceQueue=function(e,t){a.show({controller:"CreateOrEditVoiceQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/create/dialog.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{voiceQueue:t,voiceQueues:_.values(g.queues),license:null,setting:null,crudPermissions:g.crudPermissions}})},g.agentAdd=function(e,t){a.show({controller:"VoiceQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:e,clickOutsideToClose:!0,locals:{voiceQueue:t,voiceQueues:g.queues?g.queues.rows:[],realtime:!0,crudPermissions:g.crudPermissions}})},g.updateQueue=function(e){return l.voiceQueue.update(e).$promise.then(function(){c.success({title:"Queue properly updated!",msg:e.name?e.name+" has been updated!":""})}).catch(function(e){c.error({title:"Error creating queue!",msg:e.message})})},g.onSave=function(e){g.queues[e.id]&&_.merge(g.queues[e.id],_.pick(e,v))},g.onPause=function(n){console.log("onPause",n),n.voicePause?_.forIn(g.queues,function(e,t){e.agents[n.id]&&(e.paused+=1,console.log("pause"))}):n.voicePause||_.forIn(g.queues,function(e,t){e.agents[n.id]&&0<e.paused&&(e.paused-=1,console.log("unpause"))})},g.onLogin=function(e){console.log("onLogged",e),g.queues[e.VoiceQueueId]&&(g.queues[e.VoiceQueueId].loggedInDb+=1,g.queues[e.VoiceQueueId].agents[e.UserId]=e.VoiceQueueId)},g.onLogout=function(e){console.log("onLogout",e),g.queues[e.VoiceQueueId]&&0<g.queues[e.VoiceQueueId].loggedInDb&&(g.queues[e.VoiceQueueId].loggedInDb-=1,delete g.queues[e.VoiceQueueId].agents[e.UserId])},g.$onInit=h,g.order=[],_.forIn(g.queues,function(e,t){g.order.push(e.id)}),d.onWithoutApply("voice_queue:save",g.onSave),g.interval=s(function(){},999),d.on("user:update",g.onPause),d.on("userVoiceQueue:remove",g.onLogout),d.on("userVoiceQueue:save",g.onLogin);var f=!0,b=1;function A(e){if(g.count=e.count,g.queues=e?_.keyBy(e.rows?e.rows:[],"id"):{},e.rows){g.order=[];for(var t=0;t<e.rows.length;t++)g.order.push(e.rows[t].id)}h()}e.$watch("vm.query.filter",function(e,t){f?n(function(){f=!1}):(t||(b=g.query.page),e!==t&&(g.query.page=1),e||(g.query.page=b),g.getQueues())}),e.$on("$destroy",function(){d.removeAllListeners("voice_queue:save"),g.interval&&s.cancel(g.interval),d.removeAllListeners("user:update"),d.removeAllListeners("userVoiceQueue:remove"),d.removeAllListeners("userVoiceQueue:save")})}e.$inject=["$scope","$timeout","$mdDialog","$q","$document","$interval","queues","rpcQueues","api","socket","toasty","userProfile","userProfileSection","Auth"],angular.module("app.voice").controller("QueuesVoiceRealtimeController",e)}(),function(){"use strict";angular.module("app.auth").factory("helperClasses",function(){return{status:{registered:"green-300-fg icon-checkbox-marked-circle",unregistered:"red-300-fg icon-close-circle",lagged:"red-300-fg icon-close-circle",reachable:"green-300-fg icon-checkbox-marked-circle",unreachable:"red-300-fg icon-close-circle",unknown:"grey-fg icon-minus-circle"},state:{unknown:"grey-fg icon-phone-hangup",not_inuse:"green-300-fg icon-phone-hangup",inuse:"red-300-fg icon-phone-in-talk",busy:"red-300-fg icon-phone-locked",invalid:"grey-fg icon-phone-hangup",unavailable:"grey-fg icon-phone-hangup",ringing:"blue-300-fg icon-phone-incoming",ringinuse:"blue-300-fg icon-phone-incoming",onhold:"blue-300-fg icon-phone-paused"},channelStatus:{ring:"blue-300-fg icon-phone-incoming",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"},channelStatusOut:{ring:"blue-300-fg icon-phone-outgoing",up:"green-300-fg icon-phone-in-talk",hangup:"red-300-fg icon-phone-hangup"}}})}(),function(){"use strict";function e(e,n,t){var a=this;switch(t.disconnect(),t.connect(),a.selectedTab=0,n.current.name){case"app.voice.realtime.agents":a.selectedTab=0;break;case"app.voice.realtime.telephones":a.selectedTab=1;break;case"app.voice.realtime.trunks":a.selectedTab=2;break;case"app.voice.realtime.queues":a.selectedTab=3;break;case"app.voice.realtime.queue_calls":a.selectedTab=4;break;case"app.voice.realtime.abandonedcalls":a.selectedTab=5;break;case"app.voice.realtime.queue_params":a.selectedTab=6;break;case"app.voice.realtime.outbound_calls":a.selectedTab=7;break;default:a.selectedTab=0,n.go("app.voice.realtime.agents")}e.$watch("vm.selectedTab",function(e,t){if(e!==t)switch(e){case 0:n.go("app.voice.realtime.agents");break;case 1:n.go("app.voice.realtime.telephones");break;case 2:n.go("app.voice.realtime.trunks");break;case 3:n.go("app.voice.realtime.queues");break;case 4:n.go("app.voice.realtime.queue_calls");break;case 5:n.go("app.voice.realtime.abandonedcalls");break;case 6:n.go("app.voice.realtime.queue_params");break;case 7:n.go("app.voice.realtime.outbound_calls");break;default:n.go("app.voice.realtime.agents")}})}e.$inject=["$scope","$state","socket"],angular.module("app.voice").controller("VoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c){var m=this,u=["fullname","internal","state","status"];function p(){_.forIn(m.telephones,function(e,t){m.rpcTelephones[t]&&_.merge(e,_.pick(m.rpcTelephones[t],u))})}m.count=a.count,m.attributes=["fullname","internal","state","status","address"],m.telephones=a?_.keyBy(a.rows?a.rows:[],"id"):{},m.rpcTelephones=i?_.keyBy(i.rows?i.rows:[],"id"):{},m.userProfile=l,m.userProfileSection=d&&1==d.count?d.rows[0]:null,m.crudPermissions=c.parseCrudPermissions(m.userProfileSection?m.userProfileSection.crudPermissions:null),m.query={fields:"id,fullname,internal",role:"telephone",sort:"-updatedAt",limit:10,page:1},m.statusClass=r.status,m.stateClass=r.state,m.success=h,m.$onInit=p,m.showInfo=function(e){t.show(t.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},m.getTelephones=function(){m.query.offset=(m.query.page-1)*m.query.limit,c.hasRole("admin")?m.promise=s.user.get(m.query,h).$promise:(m.query.id=m.userProfile.id,m.query.section="Telephones",m.promise=s.userProfile.getResources(m.query,h).$promise)},m.onSave=function(e){m.telephones[e.id]&&_.merge(m.telephones[e.id],_.pick(e,u))},o.on("telephone:save",m.onSave);var g=!0,v=1;function h(e){m.telephones=e?_.keyBy(e.rows?e.rows:[],"id"):{},p()}e.$watch("vm.query.filter",function(e,t){g?n(function(){g=!1}):(t||(v=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=v),m.getTelephones())}),e.$on("$destroy",function(){o.removeAllListeners("telephone:save")})}e.$inject=["$scope","$timeout","$mdDialog","telephones","rpcTelephones","api","socket","helperClasses","userProfile","userProfileSection","Auth"],angular.module("app.voice").controller("TelephonesVoiceRealtimeController",e)}(),function(){"use strict";function e(e,n,t,a,i,s,o,r,l,d,c,m){var u=this,p=["status","stateRegistry","registry","host","port","internal","state","status"];function g(){for(var e,t=0;t<u.trunks.length;t+=1)0<=(e=_.findIndex(u.rpcTrunks,["id",u.trunks[t].id]))&&_.merge(u.trunks[t],_.pick(u.rpcTrunks[e],p))}function v(e,t,n){0<=t&&_.merge(e[t],_.pick(n,p))}u.currentUser=m.getCurrentUser(),u.count=a.count,u.trunks=a?a.rows:[],u.rpcTrunks=i&&i.rows?i.rows:[],u.query={fields:"id,name",active:!0,sort:"-updatedAt",limit:10,page:1},u.statusClass=r.status,u.stateClass=r.state,u.userProfile=d,u.userProfileSection=c&&1==c.count?c.rows[0]:null,u.crudPermissions=m.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.success=b,u.$onInit=g,u.showInfo=function(e){t.show(t.alert().clickOutsideToClose(!0).title("Legend").htmlContent("<div>TODO legend status + state</div>").ok("Ok").targetEvent(e))},u.getTrunks=function(){u.query.offset=(u.query.page-1)*u.query.limit,m.hasRole("admin")?u.promise=s.trunk.get(u.query,b).$promise:(u.query.id=u.userProfile.id,u.query.section="Trunks",u.promise=s.userProfile.getResources(u.query,b).$promise)},u.goToTrunk=function(e,t){l.go("app.tools.trunks.edit",{id:t.id})},u.onSave=function(e){var t=_.findIndex(u.trunks,["id",e.id]),n=_.findIndex(u.rpcTrunks,["id",e.id]);v(u.trunks,t,e),v(u.rpcTrunks,n,e)},o.on("trunk:save",u.onSave);var h=!0,f=1;function b(e){u.count=e.count,u.trunks=e&&e.rows?e.rows:[],g()}e.$watch("vm.query.filter",function(e,t){h?n(function(){h=!1}):(t||(f=u.query.page),e!==t&&(u.query.page=1),e||(u.query.page=f),u.getTrunks())}),e.$on("$destroy",function(){o.removeAllListeners("trunk:save")})}e.$inject=["$scope","$timeout","$mdDialog","trunks","rpcTrunks","api","socket","helperClasses","$state","userProfile","userProfileSection","Auth"],angular.module("app.voice").controller("TrunksVoiceRealtimeController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_VOICEMAIL",g.voicemail=angular.copy(l),g.voicemails=r,g.newVoicemail=!1,g.voicemail||(g.voicemail={attach:"no"},g.title="VOICE.NEW_VOICEMAIL",g.newVoicemail=!0),g.addNewVoicemail=function(){g.errors=[],d.voiceMail.save(g.voicemail).$promise.then(function(e){g.voicemails.unshift(e.toJSON()),o.success({title:"Voicemail properly created",msg:g.voicemail.name?g.voicemail.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMail.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMail.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVoicemail=function(){g.errors=[],d.voiceMail.update({id:g.voicemail.id},g.voicemail).$promise.then(function(e){var t=_.find(g.voicemails,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"Voicemail properly saved!",msg:g.voicemail.name?g.voicemail.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMail.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMail.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVoicemail=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The voicemail will be deleted.").ariaLabel("Delete Voicemail").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceMail.delete({id:g.voicemail.id}).$promise.then(function(){_.remove(g.voicemails,{id:g.voicemail.id}),o.success({title:"Voicemail properly deleted!",msg:(g.voicemail.name||"voicemail")+" has been deleted!"}),v(g.voicemail)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceMail.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMail.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","voicemails","voicemail","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditVoicemailDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d){var c=this;c.currentUser=d.getCurrentUser(),c.voicemail={},c.voicemailMessages={count:0,rows:[]},c.selectedVoicemailMessages=[],c.crudPermissions,c.query={fields:"createdAt,updatedAt,id,callerid,duration,audio,stamp,msg_id",sort:"-stamp",limit:10,page:1},c.init=function(e,t){c.voicemail=e,c.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},c.query.id=c.voicemail.id,c.getVoicemailMessages()},c.deleteConfirm=function(e,t){var n=s.confirm().title("Are you sure want to delete the message?").htmlContent("<b>"+(e.name||"message")+"</b> will be deleted.").ariaLabel("delete message").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){g(e)},function(){console.log("CANCEL")})},c.voiceMailMessageDownload=function(s,e,t){return l.voiceMailMessage.download({id:s.id,exists:!0,attachments:t}).$promise.then(function(e){var t=[e.buffer],n="message"+s.id,a=new Blob(t,{type:e.type});n=s.msg_id+".wav";var i=window.document.createElement("a");i.setAttribute("href",URL.createObjectURL(a)),i.setAttribute("download",n),document.body.appendChild(i),i.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceMail.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.success=p,c.getVoicemailMessages=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.voiceMail.getMessages(c.query,p).$promise},c.createOrEditVoicemailMessage=function(e,t){s.show({controller:"CreateOrEditMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicemails/edit/messages/dialog.html",parent:angular.element(o.body),targetEvent:e,clickOutsideToClose:!0,locals:{voicemail:c.voicemail,message:t,messages:c.voicemailMessages.rows,license:null,setting:null,crudPermissions:c.crudPermissions}})},c.exportSelectedVoicemailMessages=function(){var e=angular.copy(c.selectedVoicemailMessages);return c.selectedVoicemailMessages=[],e},c.deleteVoicemailMessage=g,c.deleteSelectedVoicemailMessages=function(e){var t=s.confirm().title("Are you sure want to delete the selected messages?").htmlContent("<b>"+c.selectedVoicemailMessages.length+" selected</b> will be deleted.").ariaLabel("delete messages").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){c.selectedVoicemailMessages.forEach(function(e){g(e)}),c.selectedVoicemailMessages=[]})};var m=!0,u=1;function p(e){c.voicemailMessages=e||{count:0,rows:[]}}function g(e){l.voiceMailMessage.delete({id:e.id}).$promise.then(function(){_.remove(c.voicemailMessages.rows,{id:e.id}),c.voicemailMessages.count-=1,c.voicemailMessages.rows.length||c.getVoicemailMessages(),r.success({title:"Message deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){vm.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:GETvoiceMail"}];for(var t=0;t<e.data.errors.length;t++)r.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else r.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMail",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}t.$watch("vm_dc.query.filter",function(e,t){m?i(function(){m=!1}):(t||(u=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=u),c.getVoicemailMessages())})}e.$inject=["$cookies","$scope","$state","$q","$timeout","$mdDialog","$document","toasty","api","Auth"],angular.module("app.voice").controller("VoicemailMessagesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=s,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=t.protocol()+"://"+t.host(),u.voicemail=c||e.params.voicemail||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=e.params.tab||0,u.alert=l.info,u.gotoVoicemails=function(){e.go("app.voice.voicemails")},u.saveVoicemail=function(){r.voiceMail.update({id:u.voicemail.id},u.voicemail).$promise.then(function(){l.success({title:"Voicemail updated!",msg:u.voicemail.name?u.voicemail.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceMail",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_CONTEXTS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceContext.get({fields:"id,name",sort:"name"}).$promise.then(function(e){u.contexts=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:405}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.contexts,{id:e.resourceId})}),n=null;if(u.voicemail&&(n=_.find(u.contexts,{name:u.voicemail.context})),n&&!_.some(t,["id",n.id])){var a=_.find(u.contexts,{id:n.id});a.canSelect=!1,t.push(a)}u.contexts=t}):r.voiceContext.get({fields:"id,name",sort:"name",defaultEntry:1}).$promise.then(function(e){u.contexts=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETcontexts",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","voicemail","userProfileSection"],angular.module("app.voice").controller("VoicemailController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.voicemails=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="voicemails",b.listOrder="",b.listOrderAsc=null,b.selectedVoicemails=[],b.query={fields:"createdAt,updatedAt,id,customer_id,fullname,email,password,mailbox,context,tz,attach,envelope,delete,emailbody,emailsubject,maxsecs,maxmsg",sort:"-updatedAt",limit:10,page:1},b.arrayattach=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayenvelope=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraydelete=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.voice.voicemails.edit",{id:e.id,voicemail:e,crudPermissions:b.crudPermissions})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("voicemail")+"?").htmlContent("<b>"+(e.name||"voicemail")+"</b> will be deleted.").ariaLabel("delete voicemail").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getVoicemails=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceMail.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="Voicemails",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditVoicemail=function(e,t){i.show({controller:"CreateOrEditVoicemailDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicemails/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{voicemail:t,voicemails:b.voicemails.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteVoicemail=S,b.exportSelectedVoicemails=function(){var e=angular.copy(b.selectedVoicemails);return b.selectedVoicemails=[],e},b.deleteSelectedVoicemails=function(e){var t=i.confirm().title("Are you sure want to delete the selected voicemails?").htmlContent("<b>"+b.selectedVoicemails.length+" selected</b> will be deleted.").ariaLabel("delete Voicemails").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedVoicemails.forEach(function(e){S(e)}),b.selectedVoicemails=[]})},b.deselectVoicemails=function(){b.selectedVoicemails=[]},b.selectAllVoicemails=function(){b.selectedVoicemails=b.voicemails.rows};var A=!0,E=1;function y(e){b.voicemails=e||{count:0,rows:[]}}function S(e){m.voiceMail.delete({id:e.id}).$promise.then(function(){_.remove(b.voicemails.rows,{id:e.id}),b.voicemails.count-=1,b.voicemails.rows.length||b.getVoicemails(),p.success({title:_.startCase("Voicemail")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceMail"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceMail",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getVoicemails())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","voicemails","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoicemailsController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_VOICEPREFIX",g.voicePrefix=angular.copy(l),g.voicePrefixes=r,g.newvoicePrefix=!1,g.voicePrefix||(g.voicePrefix={},g.title="VOICE.NEW_VOICEPREFIX",g.newvoicePrefix=!0),g.addNewvoicePrefix=function(){g.errors=[],d.voicePrefix.save(g.voicePrefix).$promise.then(function(e){g.voicePrefixes.unshift(e.toJSON()),o.success({title:"voicePrefix properly created",msg:g.voicePrefix.name?g.voicePrefix.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voicePrefix.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voicePrefix.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.savevoicePrefix=function(){g.errors=[],d.voicePrefix.update({id:g.voicePrefix.id},g.voicePrefix).$promise.then(function(e){var t=_.find(g.voicePrefixes,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"voicePrefix properly saved!",msg:g.voicePrefix.name?g.voicePrefix.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voicePrefix.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voicePrefix.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deletevoicePrefix=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The voicePrefix will be deleted.").ariaLabel("Delete voicePrefix").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voicePrefix.delete({id:g.voicePrefix.id}).$promise.then(function(){_.remove(g.voicePrefixes,{id:g.voicePrefix.id}),o.success({title:"voicePrefix properly deleted!",msg:(g.voicePrefix.name||"voicePrefix")+" has been deleted!"}),v(g.voicePrefix)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voicePrefix.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voicePrefix.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v,c.hasRole("admin")?d.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){g.outboundRoutes=e.rows||[]}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OUTBOUNDROUTES",msg:e.data?JSON.stringify(e.data):e.toString()})}):d.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){g.outboundRoutes=e.rows||[]}).then(function(){return d.userProfileSection.get({userProfileId:g.currentUser.userProfileId,sectionId:403}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return d.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(g.outboundRoutes,{id:e.resourceId})}),n=null;if(g.voicePrefix&&(n=_.find(g.outboundRoutes,{id:Number(g.voicePrefix.VoiceExtensionId)})),n&&!_.some(t,["id",n.id])){var a=_.find(g.outboundRoutes,{id:n.id});a.canSelect=!1,t.push(a)}g.outboundRoutes=t})}else{var n=[],a=null;g.voicePrefix&&(a=_.find(g.outboundRoutes,{id:Number(g.voicePrefix.VoiceExtensionId)}));for(var i=0;i<g.outboundRoutes.length;i++)a&&g.outboundRoutes[i].id===a.id&&(g.outboundRoutes[i].canSelect=!1,n.push(g.outboundRoutes[i]));g.outboundRoutes=n}}).catch(function(e){o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","voicePrefixes","voicePrefix","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditvoicePrefixDialogController",e)}(),function(){"use strict";function e(e,a,i,s,t,n,o,r,l,d){var c=this;function m(){return a(function(n,t){return a(function(t,n){return s.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],l.hasRole("admin")?e:c.section?c.section.autoAssociation?e:a(function(t,n){return s.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:l.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});l.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),a(function(t,n){return s.voicePrefix.getAgents({id:c.voicePrefix.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UservoicePrefix?"penalty "+e.UservoicePrefix.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=l.getCurrentUser(),c.voicePrefix=t,c.crudPermissions=d,c.realtime=o,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return l.hasRole("admin")?m().catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):a(function(n,t){s.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceBy(c.selectedItems,c.startingSelectedItems,"id");return(n=e,a(function(e,t){_.isEmpty(n)?e():s.voicePrefix.removeAgents({id:c.voicePrefix.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return n=t,a(function(e,t){_.isEmpty(n)?e():s.voicePrefix.addAgents({id:c.voicePrefix.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})});var n}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),i.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"",labelAll:r.instant("VOICE.ALL_AGENTS"),labelSelected:r.instant("VOICE.SELECTED_AGENTS"),transferCallback:function(e,t){var n=_.xorBy(c.startingSelectedItems,c.selectedItems,"id");c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","voicePrefix","voicePrefixes","realtime","$translate","Auth","crudPermissions"],angular.module("app.voice").controller("voicePrefixagentaddController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.voicePrefixes=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="voicePrefixes",b.listOrder="",b.listOrderAsc=null,b.selectedVoicePrefixes=[],b.query={fields:"createdAt,updatedAt,id,name,VoiceExtensionId,callerIdAll,description",limit:10,page:1},b.editdialog=function(e,t){i.show({controller:"CreateOrEditvoicePrefixDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicePrefixes/create/dialog.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{voicePrefix:e,voicePrefixes:b.voicePrefixes.rows,license:b.license,setting:null,crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"voicePrefixagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicePrefixes/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{voicePrefix:e,voicePrefixes:b.voicePrefixes?b.voicePrefixes.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("voicePrefix")+"?").htmlContent("<b>"+(e.name||"voicePrefix")+"</b> will be deleted.").ariaLabel("delete voicePrefix").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getVoicePrefixes=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voicePrefix.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="VoicePrefixes",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditvoicePrefix=function(e,t){i.show({controller:"CreateOrEditvoicePrefixDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voicePrefixes/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{voicePrefix:t,voicePrefixes:b.voicePrefixes.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deletevoicePrefix=S,b.exportSelectedVoicePrefixes=function(){var e=angular.copy(b.selectedVoicePrefixes);return b.selectedVoicePrefixes=[],e},b.deleteSelectedVoicePrefixes=function(e){var t=i.confirm().title("Are you sure want to delete the selected voicePrefixes?").htmlContent("<b>"+b.selectedVoicePrefixes.length+" selected</b> will be deleted.").ariaLabel("delete voicePrefixs").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedVoicePrefixes.forEach(function(e){S(e)}),b.selectedVoicePrefixes=[]})},b.deselectVoicePrefixes=function(){b.selectedVoicePrefixes=[]},b.selectAllVoicePrefixes=function(){b.selectedVoicePrefixes=b.voicePrefixes.rows},g.hasRole("admin")?m.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){b.outboundRoutes=e.rows||[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_OUTBOUNDROUTES",msg:e.data?JSON.stringify(e.data):e.toString()})}):m.voiceExtension.get({fields:"id,exten",type:"outbound",VoiceExtensionId:"null",nolimit:"true"}).$promise.then(function(e){b.outboundRoutes=e.rows||[]}).then(function(){return m.userProfileSection.get({userProfileId:b.currentUser.userProfileId,sectionId:403}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return m.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(b.outboundRoutes,{id:e.resourceId})}),n=null;if(b.voicePrefix&&(n=_.find(b.outboundRoutes,{id:Number(b.voicePrefix.VoiceExtensionId)})),n&&!_.some(t,["id",n.id])){var a=_.find(b.outboundRoutes,{id:n.id});a.canSelect=!1,t.push(a)}b.outboundRoutes=t})}else{var n=[],a=null;b.voicePrefix&&(a=_.find(b.outboundRoutes,{id:Number(b.voicePrefix.VoiceExtensionId)}));for(var i=0;i<b.outboundRoutes.length;i++)a&&b.outboundRoutes[i].id===a.id&&(b.outboundRoutes[i].canSelect=!1,n.push(b.outboundRoutes[i]));b.outboundRoutes=n}}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GEToutboundRoutes",msg:e.data?JSON.stringify(e.data):e.toString()})});var A=!0,E=1;function y(e){b.voicePrefixes=e||{count:0,rows:[]}}function S(e){m.voicePrefix.delete({id:e.id}).$promise.then(function(){_.remove(b.voicePrefixes.rows,{id:e.id}),b.voicePrefixes.count-=1,b.voicePrefixes.rows.length||b.getVoicePrefixes(),p.success({title:_.startCase("voicePrefix")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoicePrefix"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoicePrefix",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getVoicePrefixes())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","voicePrefixes","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoicePrefixesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_VOICEQUEUE",g.voiceQueue=angular.copy(l),g.voiceQueues=r,g.newVoiceQueue=!1,g.voiceQueue||(g.voiceQueue={type:"inbound",strategy:"ringall",timeout:15,retry:2,random_periodic_announce:"no",announce_holdtime:"no",announce_position:"no",reportholdtime:"no",autopause:"no",ringinuse:"no",timeoutrestart:"no",setinterfacevar:"no",setqueuevar:"no",setqueueentryvar:"no"},g.title="VOICE.NEW_VOICEQUEUE",g.newVoiceQueue=!0),g.addNewVoiceQueue=function(){g.errors=[],d.voiceQueue.save(g.voiceQueue).$promise.then(function(e){g.voiceQueues.unshift(e.toJSON()),o.success({title:"VoiceQueue properly created",msg:g.voiceQueue.name?g.voiceQueue.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVoiceQueue=function(){g.errors=[],d.voiceQueue.update({id:g.voiceQueue.id},g.voiceQueue).$promise.then(function(e){var t=_.find(g.voiceQueues,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VoiceQueue properly saved!",msg:g.voiceQueue.name?g.voiceQueue.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVoiceQueue=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The voiceQueue will be deleted.").ariaLabel("Delete VoiceQueue").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceQueue.delete({id:g.voiceQueue.id}).$promise.then(function(){_.remove(g.voiceQueues,{id:g.voiceQueue.id}),o.success({title:"VoiceQueue properly deleted!",msg:(g.voiceQueue.name||"voiceQueue")+" has been deleted!"}),v(g.voiceQueue)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceQueue.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceQueue.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","voiceQueues","voiceQueue","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditVoiceQueueDialogController",e)}(),function(){"use strict";function e(e,l,a,d,t,n,i,s,o,r){var c=this;function m(){return l(function(n,t){return l(function(t,n){return d.user.get({fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],o.hasRole("admin")?e:c.section?c.section.autoAssociation?e:l(function(t,n){return d.userProfileResource.get({sectionId:c.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return c.allowedItems=_.map(t,function(e){return _.find(c.items,{id:o.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.startingAllowedItems=angular.copy(c.allowedItems),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),l(function(t,n){return d.voiceQueue.getAgents({id:c.voiceQueue.id,fields:"id,name,internal,fullname",nolimit:!0,role:"agent"}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];c.selectedItems=_.map(t,function(e){var t=_.find(c.items,{id:e.id});return t.penalty=e.UserVoiceQueue?"penalty "+e.UserVoiceQueue.penalty:"",t.internal=e.hasOwnProperty("internal")?"<"+e.internal+">":"",t}),c.startingSelectedItems=angular.copy(c.selectedItems),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=o.getCurrentUser(),c.voiceQueue=t,c.crudPermissions=r,c.penalty=0,c.realtime=i,c.items=[],c.allowedItems=[],c.selectedItems=[],c.startingAllowedItems=[],c.startingSelectedItems=[],c.pendingChanges=!1,c.onInit=function(){return o.hasRole("admin")?m().catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})}):l(function(n,t){d.userProfileSection.get({userProfileId:c.currentUser.userProfileId,name:"Agents"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return c.section=e,m()}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_AGENTS",msg:e.status?JSON.stringify(e.data):e.toString()})})},c.saveAgents=function(){var e=_.differenceBy(c.startingSelectedItems,c.selectedItems,"id"),t=_.differenceWith(c.selectedItems,c.startingSelectedItems,function(e,t){return e.id===t.id&&e.penalty===t.penalty});return(n=e,l(function(e,t){_.isEmpty(n)?e():d.voiceQueue.removeAgents({id:c.voiceQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return r=t,l(function(e,t){if(_.isEmpty(r))e();else{for(var n=[],a=_.groupBy(r,"penalty"),i=0;i<Object.keys(a).length;i++){var s=Object.keys(a)[i],o=_.filter(r,["penalty",s]);n.push(d.voiceQueue.addAgents({id:c.voiceQueue.id,ids:_.map(o,"id"),penalty:_.trim(s,"penalty "),realtime:c.realtime||!1}).$promise)}l.all(n).then(function(){e()}).catch(function(e){t(e)})}});var r}).then(function(){c.pendingChanges=!1,c.startingAllowedItems=angular.copy(c.allowedItems),c.startingSelectedItems=angular.copy(c.selectedItems),a.success({title:"SUCCESS",msg:"Agents association has been updated!"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},c.closeDialog=function(){e.hide()},c.dualMultiselectOptions={readOnly:!c.crudPermissions.canEdit,items:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"fullname",line2:["name","internal"],line3:"penalty",labelAll:s.instant("VOICE.ALL_AGENTS"),labelSelected:s.instant("VOICE.SELECTED_AGENTS"),transferCallback:function(e,t){t?e.forEach(function(e){e.penalty=void 0}):e.forEach(function(e){e.penalty="penalty "+c.penalty});var n=_.xorWith(c.startingSelectedItems,c.selectedItems,function(e,t){return e.id===t.id&&e.penalty===t.penalty});c.pendingChanges=!_.isEmpty(n)}}}e.$inject=["$mdDialog","$q","toasty","api","voiceQueue","voiceQueues","realtime","$translate","Auth","crudPermissions"],angular.module("app.voice").controller("VoiceQueueagentaddController",e)}(),function(){"use strict";function e(e,i,a,s,t,n,o,r){var l=this;function d(){return i(function(n,t){return i(function(t,n){return s.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return l.items=e.rows?e.rows:[],o.hasRole("admin")?e:l.section?l.section.autoAssociation?e:i(function(t,n){return s.userProfileResource.get({sectionId:l.section.id,nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}):null}).then(function(e){var t=e&&e.rows?e.rows:[];return l.allowedItems=_.map(t,function(e){return _.find(l.items,{id:o.hasRole("admin")||l.section.autoAssociation?e.id:e.resourceId})}),l.items.forEach(function(e){var t=_.find(l.allowedItems,{id:e.id});o.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),i(function(t,n){return s.voiceQueue.getTeams({id:l.voiceQueue.id,fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})})}).then(function(e){var t=e&&e.rows?e.rows:[];l.selectedItems=_.map(t,function(e){return _.find(l.items,{id:e.id})}),l.startingSelectedItems=angular.copy(l.selectedItems),l.dualMultiselectOptions.selectedItems=l.selectedItems,l.dualMultiselectOptions.items=_.differenceBy(l.allowedItems,l.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}l.currentUser=o.getCurrentUser(),l.voiceQueue=t,l.crudPermissions=r,l.penalty=0,l.items=[],l.allowedItems=[],l.selectedItems=[],l.startingAllowedItems=[],l.startingSelectedItems=[],l.pendingChanges=!1,l.dualMultiselectOptions={readOnly:!l.crudPermissions.canEdit,allowedItems:[],selectedItems:[],showSelectAndDeselectAll:!0,orderBy:"name",line1:"name",line2:"",line3:"",labelAll:n.instant("VOICE.ALL_TEAMS"),labelSelected:n.instant("VOICE.SELECTED_TEAMS"),transferCallback:function(e,t){t?e.forEach(function(e){e.penalty=void 0}):e.forEach(function(e){e.penalty="penalty "+l.penalty});var n=_.xorBy(l.startingSelectedItems,l.selectedItems,"id");l.pendingChanges=!_.isEmpty(n)}},l.onInit=function(){return o.hasRole("admin")?d().catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})}):i(function(n,t){s.userProfileSection.get({userProfileId:l.currentUser.userProfileId,name:"Teams"}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;n(t)}).catch(function(e){t(e)})}).then(function(e){return l.section=e,d()}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_TEAMS",msg:e.status?JSON.stringify(e.data):e.toString()})})},l.saveTeams=function(){var e=_.differenceBy(l.startingSelectedItems,l.selectedItems,"id"),t=_.differenceBy(l.selectedItems,l.startingSelectedItems,"id");return(n=e,i(function(e,t){_.isEmpty(n)?e():s.voiceQueue.removeTeams({id:l.voiceQueue.id,ids:_.map(n,"id")}).$promise.then(function(){e()}).catch(function(e){t(e)})})).then(function(){return a=t,i(function(e,t){if(!_.isEmpty(a)){var n=_.map(a,function(e){return{id:e.id,penalty:_.trim(e.penalty,"penalty ")}});return s.voiceQueue.addTeams({id:l.voiceQueue.id,teams:n}).$promise.then(function(){e()}).catch(function(e){t(e)})}e()});var a}).then(function(){l.pendingChanges=!1,l.startingAllowedItems=angular.copy(l.allowedItems),l.startingSelectedItems=angular.copy(l.selectedItems),a.success({title:"SUCCESS",msg:"Teams association has been updated!"})}).catch(function(e){a.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:LISTS_ASSOCIATION",msg:e.status?JSON.stringify(e.data):e.toString()})});var n},l.closeDialog=function(){e.hide()}}e.$inject=["$mdDialog","$q","toasty","api","voiceQueue","$translate","Auth","crudPermissions"],angular.module("app.voice").controller("VoiceQueueteamaddController",e)}(),function(){"use strict";function e(n,e,a,i,s,t,o,r,l,d,c,m){var u=this;u.currentUser=d.getCurrentUser(),u.license=t,u.setting=o,u.passwordPattern=u.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",u.location=e.protocol()+"://"+e.host(),u.voiceQueue=c||n.params.voiceQueue||{},u.userProfileSection=m&&1==m.count?m.rows[0]:null,u.crudPermissions=d.parseCrudPermissions(u.userProfileSection?u.userProfileSection.crudPermissions:null),u.hasModulePermissions={},u.selectedTab=n.params.tab||0,u.teamadddialog=function(e,t){a.show({controller:"VoiceQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/teamadd/teamadd.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{voiceQueue:e,voiceQueues:u.voiceQueues?u.voiceQueues.rows:[],crudPermissions:u.crudPermissions}})},u.agentadddialog=function(e,t){a.show({controller:"VoiceQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/agentadd/agentadd.html",parent:angular.element(i.body),targetEvent:t,clickOutsideToClose:!0,locals:{voiceQueue:e,voiceQueues:u.voiceQueues?u.voiceQueues.rows:[],crudPermissions:u.crudPermissions,realtime:!1}})},u.gotogoto=function(e,t){{if(!d.hasRole("admin"))return r.userProfileSection.get({userProfileId:d.getCurrentUser().userProfileId,sectionId:411}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.voice.realtime.queues",{}):l.info({title:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:s.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.voice.realtime.queues",{})}},u.alert=l.info,u.gotoVoiceQueues=function(){n.go("app.voice.voiceQueues")},u.saveVoiceQueue=function(){r.voiceQueue.update({id:u.voiceQueue.id},u.voiceQueue).$promise.then(function(){l.success({title:"VoiceQueue updated!",msg:u.voiceQueue.name?u.voiceQueue.name+" has been updated!":""})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETvoiceQueue",msg:e.data?JSON.stringify(e.data):e.toString()})})},d.hasRole("admin")?r.voiceMusicOnHold.get({fields:"id,name",nolimit:"true"}).$promise.then(function(e){u.musiconholds=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_MUSICONHOLDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.voiceMusicOnHold.get({fields:"id,name",nolimit:"true"}).$promise.then(function(e){u.musiconholds=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:407}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;return t?t.autoAssociation?void 0:r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.musiconholds,{id:e.resourceId})}),n=null;if(u.voiceQueue&&(n=_.find(u.musiconholds,{name:u.voiceQueue.musiconhold})),n&&!_.some(t,["id",n.id])){var a=_.find(u.musiconholds,{id:n.id});a.canSelect=!1,t.push(a)}u.musiconholds=t}):r.voiceMusicOnHold.get({fields:"id,name",nolimit:"true",defaultEntry:1}).$promise.then(function(e){u.musiconholds=e.rows||[]})}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETmusiconholds",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.sound.get({fields:"id,name,save_name",sort:"name",nolimit:"true"}).$promise.then(function(e){u.sounds=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_SOUNDS",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.sound.get({fields:"id,name,save_name",sort:"name",nolimit:"true"}).$promise.then(function(e){u.sounds=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1007}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.sounds,{id:e.resourceId})});u.sounds.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.sounds=t})}else u.sounds=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETsounds",msg:e.data?JSON.stringify(e.data):e.toString()})}),d.hasRole("admin")?r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GET_PAUSES",msg:e.data?JSON.stringify(e.data):e.toString()})}):r.pause.get({fields:"name,id",sort:"name",nolimit:"true"}).$promise.then(function(e){u.pauses=e.rows||[]}).then(function(){return r.userProfileSection.get({userProfileId:u.currentUser.userProfileId,sectionId:1005}).$promise}).then(function(e){var t=e&&e.rows?e.rows[0]:null;if(t){if(!t.autoAssociation)return r.userProfileResource.get({sectionId:t.id}).$promise.then(function(e){var t=_.map(e.rows,function(e){return _.find(u.pauses,{id:e.resourceId})});u.pauses.forEach(function(e){_.some(t,["id",e.id])||(e.canSelect=!1),t.push(e)}),u.pauses=t})}else u.pauses=[]}).catch(function(e){l.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETpauses",msg:e.data?JSON.stringify(e.data):e.toString()})})}e.$inject=["$state","$location","$mdDialog","$document","$translate","license","setting","api","toasty","Auth","voiceQueue","userProfileSection"],angular.module("app.voice").controller("VoiceQueueController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.voiceQueues=l||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="voiceQueues",b.listOrder="",b.listOrderAsc=null,b.selectedVoiceQueues=[],b.query={fields:"createdAt,updatedAt,id,name,type,strategy,timeout,maxlen,retry,wrapuptime,weight,joinempty,leavewhenempty,musiconhold,announce,description,periodic_announce,queue_reporthold,queue_youarenext,queue_thereare,queue_callswaiting,queue_holdtime,queue_minutes,queue_minute,queue_seconds,queue_thankyou,announce_frequency,min_announce_frequency,periodic_announce_frequency,random_periodic_announce,announce_holdtime,announce_position,announce_position_limit,reportholdtime,acw,acwTimeout,autopause,ringinuse,memberdelay,timeoutrestart,monitor_format,context,setinterfacevar,setqueuevar,setqueueentryvar,mandatoryDisposition,mandatoryDispositionPauseId",type:"inbound",sort:"-updatedAt",channel:"voice",limit:10,page:1},b.arraystrategy=_.keyBy([{option:"Ringall",value:"'ringall'"},{option:"Round Robin Memory",value:"'rrmemory'"},{option:"Least Recent",value:"'leastrecent'"},{option:"Fewest Calls",value:"'fewestcalls'"},{option:"Random",value:"'random'"},{option:"Linear",value:"'linear'"},{option:"Weight Random",value:"'wrandom'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayjoinempty=_.keyBy([{option:"no",value:"'no'"},{option:"yes",value:"'yes'"},{option:"strict",value:"'strict'"},{option:"loose",value:"'loose'"},{option:"paused",value:"'paused'"},{option:"penalty",value:"'penalty'"},{option:"inuse",value:"'inuse'"},{option:"ringing",value:"'ringing'"},{option:"unavailable",value:"'unavailable'"},{option:"invalid",value:"'invalid'"},{option:"unknown",value:"'unknown'"},{option:"wrapup",value:"'wrapup'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayleavewhenempty=_.keyBy([{option:"no",value:"'no'"},{option:"yes",value:"'yes'"},{option:"strict",value:"'strict'"},{option:"loose",value:"'loose'"},{option:"paused",value:"'paused'"},{option:"penalty",value:"'penalty'"},{option:"inuse",value:"'inuse'"},{option:"ringing",value:"'ringing'"},{option:"unavailable",value:"'unavailable'"},{option:"invalid",value:"'invalid'"},{option:"unknown",value:"'unknown'"},{option:"wrapup",value:"'wrapup'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayrandom_periodic_announce=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayannounce_holdtime=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Once",value:"'once'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayannounce_position=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"},{option:"Limit",value:"'limit'"},{option:"More",value:"'more'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayreportholdtime=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayautopause=_.keyBy([{option:"Yes",value:"'all'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arrayringinuse=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraytimeoutrestart=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraymonitor_format=_.keyBy([{option:"Inactive",value:"''"},{option:"wav",value:"'wav'"},{option:"wav49",value:"'wav49'"},{option:"gsm",value:"'gsm'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysetinterfacevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysetqueuevar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.arraysetqueueentryvar=_.keyBy([{option:"Yes",value:"'yes'"},{option:"No",value:"'no'"}],function(e){return _.replace(e.value,new RegExp("'","g"),"")}),b.editstate=function(e,t){n.go("app.voice.voiceQueues.edit",{id:e.id,voiceQueue:e,crudPermissions:b.crudPermissions})},b.teamadddialog=function(e,t){i.show({controller:"VoiceQueueteamaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/teamadd/teamadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{voiceQueue:e,voiceQueues:b.voiceQueues?b.voiceQueues.rows:[],crudPermissions:b.crudPermissions}})},b.agentadddialog=function(e,t){i.show({controller:"VoiceQueueagentaddController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/edit/agentadd/agentadd.html",parent:angular.element(s.body),targetEvent:t,clickOutsideToClose:!0,locals:{voiceQueue:e,voiceQueues:b.voiceQueues?b.voiceQueues.rows:[],crudPermissions:b.crudPermissions,realtime:!1}})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("voiceQueue")+"?").htmlContent("<b>"+(e.name||"voiceQueue")+"</b> will be deleted.").ariaLabel("delete voiceQueue").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.gotorealtimegoto=function(e,t){{if(!g.hasRole("admin"))return m.userProfileSection.get({userProfileId:g.getCurrentUser().userProfileId,sectionId:411}).$promise.then(function(e){var t=e&&e.rows?e.rows[0]:null;t&&t.enabled?n.go("app.voice.realtime.queues",{}):p.info({title:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE"),msg:r.instant("STAFF.PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE")})}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"USERPROFILE:GET_SECTION",msg:e.status?JSON.stringify(e.data):e.toString()})});n.go("app.voice.realtime.queues",{})}},b.success=y,b.getVoiceQueues=function(){b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceQueue.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="VoiceQueues",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditVoiceQueue=function(e,t){i.show({controller:"CreateOrEditVoiceQueueDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceQueues/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{voiceQueue:t,voiceQueues:b.voiceQueues.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteVoiceQueue=S,b.exportSelectedVoiceQueues=function(){var e=angular.copy(b.selectedVoiceQueues);return b.selectedVoiceQueues=[],e},b.deleteSelectedVoiceQueues=function(e){var t=i.confirm().title("Are you sure want to delete the selected voiceQueues?").htmlContent("<b>"+b.selectedVoiceQueues.length+" selected</b> will be deleted.").ariaLabel("delete VoiceQueues").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedVoiceQueues.forEach(function(e){S(e)}),b.selectedVoiceQueues=[]})},b.deselectVoiceQueues=function(){b.selectedVoiceQueues=[]},b.selectAllVoiceQueues=function(){b.selectedVoiceQueues=b.voiceQueues.rows};var A=!0,E=1;function y(e){b.voiceQueues=e||{count:0,rows:[]}}function S(e){m.voiceQueue.delete({id:e.id}).$promise.then(function(){_.remove(b.voiceQueues.rows,{id:e.id}),b.voiceQueues.count-=1,b.voiceQueues.rows.length||b.getVoiceQueues(),p.success({title:_.startCase("VoiceQueue")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceQueue"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceQueue",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getVoiceQueues())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","voiceQueues","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoiceQueuesController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m,u,p){var g=this;function v(e){a.hide(e)}g.currentUser=c.getCurrentUser(),g.errors=[],g.setting=u,g.license=m,g.crudPermissions=p,g.hasModulePermissions={},g.passwordPattern=g.setting&&g.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",g.title="VOICE.EDIT_VOICERECORDING",g.voiceRecording=angular.copy(l),g.voiceRecordings=r,g.newVoiceRecording=!1,g.voiceRecording||(g.voiceRecording={},g.title="VOICE.NEW_VOICERECORDING",g.newVoiceRecording=!0),g.addNewVoiceRecording=function(){g.errors=[],d.voiceRecording.save(g.voiceRecording).$promise.then(function(e){g.voiceRecordings.unshift(e.toJSON()),o.success({title:"VoiceRecording properly created",msg:g.voiceRecording.name?g.voiceRecording.name+" has been created!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceRecording.save"}];for(var t=0;t<e.data.errors.length;t+=1)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.saveVoiceRecording=function(){g.errors=[],d.voiceRecording.update({id:g.voiceRecording.id},g.voiceRecording).$promise.then(function(e){var t=_.find(g.voiceRecordings,{id:e.id});t&&_.merge(t,_.pick(e.toJSON(),_.keys(t))),o.success({title:"VoiceRecording properly saved!",msg:g.voiceRecording.name?g.voiceRecording.name+" has been saved!":""}),v(e)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceRecording.update"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceRecording.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},g.deleteVoiceRecording=function(e){g.errors=[];var t=a.confirm().title("Are you sure?").content("The voiceRecording will be deleted.").ariaLabel("Delete VoiceRecording").ok("Delete").cancel("Cancel").targetEvent(e);a.show(t).then(function(){d.voiceRecording.delete({id:g.voiceRecording.id}).$promise.then(function(){_.remove(g.voiceRecordings,{id:g.voiceRecording.id}),o.success({title:"VoiceRecording properly deleted!",msg:(g.voiceRecording.name||"voiceRecording")+" has been deleted!"}),v(g.voiceRecording)}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){g.errors=e.data.errors||[{message:e.toString(),type:"api.voiceRecording.delete"}];for(var t=0;t<e.data.errors.length;t++)o.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else o.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceRecording.delete",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})},function(){})},g.getDateFromString=function(e){return null===e?void 0:new Date(e)},g.closeDialog=v}e.$inject=["$scope","$state","$location","$mdDialog","$q","$translate","toasty","voiceRecordings","voiceRecording","api","Auth","license","setting","crudPermissions"],angular.module("app.voice").controller("CreateOrEditVoiceRecordingDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,l,r,d,c,m,u,p,g,v,h,f){var b=this;b.license=v,b.setting=h,b.currentUser=g.getCurrentUser(),b.voiceRecordings=r||{count:0,rows:[]},b.userProfile=d,b.userProfileSection=c&&1==c.count?c.rows[0]:null,b.crudPermissions=g.parseCrudPermissions(b.userProfileSection?b.userProfileSection.crudPermissions:null),b.table="voiceRecordings",b.listOrder="",b.listOrderAsc=null,b.selectedVoiceRecordings=[],b.query={fields:"createdAt,updatedAt,id,format,value,type,uniqueid,calleridnum,exten,connectedlinenum,queue,membername,rating,audio,userDisposition",sort:"-updatedAt",limit:10,page:1},b.localizationMap=f,b.pickerModel={dateStart:null},b.downloadfile2=function(r,e){var n=!1,t=_.isNil(r.format)?r.value.substring(r.value.lastIndexOf(".")):r.format;n=".mp4"===t;-1<r.value.lastIndexOf("/")?r.value.substring(r.value.lastIndexOf("/")+1):-1<r.value.lastIndexOf("\\")?r.value.substring(r.value.lastIndexOf("\\")+1):r.value;return m.voiceRecording.download({id:r.id}).$promise.then(function(e){var t,n,a=[e.buffer],i="download",s=new Blob(a,{type:e.type});t=r.value,n=-1<t.lastIndexOf("/")?t.substring(t.lastIndexOf("/")+1):-1<t.lastIndexOf("\\")?t.substring(t.lastIndexOf("\\")+1):t,i=(n=n.substring(0,n.lastIndexOf(".")))+r.format;var o=window.document.createElement("a");o.setAttribute("href",URL.createObjectURL(s)),o.setAttribute("download",i),document.body.appendChild(o),o.click()}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else"404"===String(e.status)&&!1===n?p.info({title:l.instant("VOICE.CANT_DOWNLOAD_THIS_FILE"),msg:l.instant("VOICE.WRONG_EXTENSION")}):"404"===String(e.status)?p.info({title:l.instant("VOICE.CANT_DOWNLOAD_THIS_FILE"),msg:l.instant("VOICE.FILE_NOT_FOUND")}):p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.voiceRecording.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},b.deleteconfirm=function(e,t){var n=i.confirm().title("Are you sure want to delete the "+_.startCase("voiceRecording")+"?").htmlContent("<b>"+(e.name||"voiceRecording")+"</b> will be deleted.").ariaLabel("delete voiceRecording").targetEvent(t).ok("OK").cancel("CANCEL");i.show(n).then(function(){S(e)},function(){console.log("CANCEL")})},b.success=y,b.getVoiceRecordings=function(){b.pickerModel.dateStart?b.query.createdAt={$gte:moment(b.pickerModel.dateStart).utcOffset(0,!0).format(),$lte:moment(b.pickerModel.dateEnd).utcOffset(0,!0).add(23,"hours").add(59,"minutes").add(59,"seconds").format()}:b.query.createdAt=void 0;b.query.offset=(b.query.page-1)*b.query.limit,g.hasRole("admin")?b.promise=m.voiceRecording.get(b.query,y).$promise:(b.query.id=b.userProfile.id,b.query.section="VoiceRecordings",b.promise=m.userProfile.getResources(b.query,y).$promise)},b.createOrEditVoiceRecording=function(e,t){i.show({controller:"CreateOrEditVoiceRecordingDialogController",controllerAs:"vm",templateUrl:"app/main/apps/voice/views/voiceRecordings/create/dialog.html",parent:angular.element(s.body),targetEvent:e,clickOutsideToClose:!0,locals:{voiceRecording:t,voiceRecordings:b.voiceRecordings.rows,license:b.license,setting:b.setting,crudPermissions:b.crudPermissions}})},b.deleteVoiceRecording=S,b.exportSelectedVoiceRecordings=function(){var e=angular.copy(b.selectedVoiceRecordings);return b.selectedVoiceRecordings=[],e},b.deleteSelectedVoiceRecordings=function(e){var t=i.confirm().title("Are you sure want to delete the selected voiceRecordings?").htmlContent("<b>"+b.selectedVoiceRecordings.length+" selected</b> will be deleted.").ariaLabel("delete VoiceRecordings").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){b.selectedVoiceRecordings.forEach(function(e){S(e)}),b.selectedVoiceRecordings=[]})},b.deselectVoiceRecordings=function(){b.selectedVoiceRecordings=[]},b.selectAllVoiceRecordings=function(){b.selectedVoiceRecordings=b.voiceRecordings.rows},b.clearDateFilter=function(){b.pickerModel={dateStart:null},b.getVoiceRecordings()};var A=!0,E=1;function y(e){b.voiceRecordings=e||{count:0,rows:[]}}function S(e){m.voiceRecording.delete({id:e.id}).$promise.then(function(){_.remove(b.voiceRecordings.rows,{id:e.id}),b.voiceRecordings.count-=1,b.voiceRecordings.rows.length||b.getVoiceRecordings(),p.success({title:_.startCase("VoiceRecording")+" deleted!",msg:e.name?e.name+" has been deleted!":""})}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){b.errors=e.data.errors||[{message:e.toString(),type:"SYSTEM:DELETEvoiceRecording"}];for(var t=0;t<e.data.errors.length;t++)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:DELETEvoiceRecording",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})}e.$watch("vm.query.filter",function(e,t){A?o(function(){A=!1}):(t||(E=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=E),b.getVoiceRecordings())})}e.$inject=["$scope","$window","$state","$mdSidenav","$mdDialog","$document","$timeout","$translate","voiceRecordings","userProfile","userProfileSection","api","msUtils","toasty","Auth","license","setting","dateFilterLocalizationFactory"],angular.module("app.voice").controller("VoiceRecordingsController",e)}(),function(){"use strict";function e(t,n,s,a,o,e,i,r){var l=this;function d(e,t){return{id:e,title:t.name||"NONAME",state:"app.dashboards.custom",stateParams:t,weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(e)&&!o.hasRole("admin")}}}function c(e,t){return{id:e,title:t.name||"NONAME",state:"app.plugins.plugin",stateParams:t,weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(e)&&!o.hasRole("admin")}}}function m(e,t){a.saveItem("apps.home.plugin_"+e,{id:e,title:t.name,translate:t.name,state:"plugin_"+t.id,stateParams:t,view:"plugin",icon:t.icon,weight:12,hidden:function(){return!o.hasPermission(e)}})}function u(e){return _.map(e.children,function(e){return e.id})}l.isAgent=function(){return o.getCurrentUser()&&o.hasRole("agent")},s.saveItem("apps",{title:"APPS",group:!0,weight:1,hidden:function(){return o.hasRole("agent")}}),i.version.get().$promise.then(function(e){l.version=e&&e.current?e.current:"UNKNOWN"}).catch(function(e){l.version="UNKNOWN"}).finally(function(){s.saveItem("version",{title:"VERSION "+l.version,group:!0,weight:2,hidden:function(){return o.hasRole("agent")}})}),o.isLoggedIn()&&(i.dashboard.get().$promise.then(function(e){for(var t=0,n=0;n<e.rows.length;n+=1)t=99999+e.rows[n].id,s.saveItem("apps.dashboards.custom_"+t,d(t,e.rows[n]))}),i.plugin.get({active:!0}).$promise.then(function(e){var t=0;if(e.count){var n=_.filter(e.rows,function(e){return"never"!=e.sidebar&&"agentOnly"!=e.sidebar});if(0<n.length){s.saveItem("apps.plugins",{id:1900,title:"Plugins",translate:"PLUGINS.PLUGINS",icon:"icon-apps",permissions:{hidden:!0},weight:17,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}});for(var a=0;a<n.length;a+=1)t=88888+n[a].id,s.saveItem("apps.plugins.plugin_"+t,c(t,n[a]));s.sort()}var i=_.filter(e.rows,function(e){return"never"!=e.sidebar&&"adminOnly"!=e.sidebar});if(0<i.length)for(a=0;a<i.length;a+=1)m(t=88888+i[a].id,i[a])}})),e.custom&&!r.defaultPageTitle&&r.pageTitle&&angular.element("#pageTitle").html(r.pageTitle),s.saveItem("apps.dashboards",{id:100,title:"Dashboards",translate:"DASHBOARDS.DASHBOARDS",icon:"icon-tile-four",weight:2,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.dashboards.general",{id:101,title:"General",route:"",translate:"DASHBOARDS.GENERAL",state:"app.dashboards.general",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(101)&&!o.hasRole("admin")}}),s.saveItem("apps.staff",{id:200,title:"Staff",translate:"STAFF.STAFF",icon:"icon-account-multiple",weight:3,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.staff.users",{id:201,title:"Users",route:"user",translate:"STAFF.USERS",state:"app.staff.users",permissions:{hidden:!0},weight:1,hidden:function(){return o.hasRole("agent")||o.hasRole("user")||!o.hasPermission(201)&&!o.hasRole("admin")}}),s.saveItem("apps.staff.agents",{id:202,title:"Agents",route:"user",translate:"STAFF.AGENTS",state:"app.staff.agents",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(202)&&!o.hasRole("admin")}}),s.saveItem("apps.staff.telephones",{id:203,title:"Telephones",route:"user",translate:"STAFF.TELEPHONES",state:"app.staff.telephones",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(203)&&!o.hasRole("admin")}}),s.saveItem("apps.staff.teams",{id:204,title:"Teams",route:"team",translate:"STAFF.TEAMS",state:"app.staff.teams",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(204)&&!o.hasRole("admin")}}),s.saveItem("apps.staff.userProfiles",{id:205,title:"UserProfiles",route:"userProfile",translate:"STAFF.USERPROFILES",state:"app.staff.userProfiles",permissions:{hidden:!0},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(205)&&!o.hasRole("admin")}}),s.saveItem("apps.contactmanager",{id:300,title:"ContactManager",translate:"CONTACTMANAGER.CONTACTMANAGER",icon:"icon-account-circle",license:"cm",weight:4,hidden:function(){return!e.cm||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.contactmanager.lists",{id:301,title:"Lists",route:"cmList",translate:"CONTACTMANAGER.LISTS",state:"app.contactmanager.lists",weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(301)&&!o.hasRole("admin")}}),s.saveItem("apps.contactmanager.companies",{id:302,title:"Companies",route:"cmCompany",translate:"CONTACTMANAGER.COMPANIES",state:"app.contactmanager.companies",weight:3,hidden:function(){return o.hasRole("agent")||!o.hasPermission(302)&&!o.hasRole("admin")}}),s.saveItem("apps.contactmanager.globalCustomFields",{id:304,title:"GlobalCustomFields",route:"cmCustomField",translate:"CONTACTMANAGER.GLOBALCUSTOMFIELDS",state:"app.contactmanager.globalCustomFields",permissions:{association:!1},weight:4,hidden:function(){return o.hasRole("agent")||!o.hasPermission(304)&&!o.hasRole("admin")}}),s.saveItem("apps.contactmanager.contacts",{id:303,title:"Contacts",route:"",translate:"CONTACTMANAGER.CONTACTS",state:"app.contactmanager.contacts",permissions:{association:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(303)&&!o.hasRole("admin")}}),s.saveItem("apps.voice",{id:400,title:"Voice",translate:"VOICE.VOICE",icon:"icon-phone",license:"voice",weight:5,hidden:function(){return!e.voice||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.voice.voiceQueues",{id:401,title:"VoiceQueues",route:"voiceQueue",channel:"voice",translate:"VOICE.VOICEQUEUES",state:"app.voice.voiceQueues",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(401)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.inboundroutes",{id:402,title:"InboundRoutes",route:"voiceExtension",translate:"VOICE.INBOUNDROUTES",state:"app.voice.inboundroutes",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(402)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.outboundroutes",{id:403,title:"OutboundRoutes",route:"voiceExtension",translate:"VOICE.OUTBOUNDROUTES",state:"app.voice.outboundroutes",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(403)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.internalroutes",{id:404,title:"InternalRoutes",route:"voiceExtension",translate:"VOICE.INTERNALROUTES",state:"app.voice.internalroutes",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(404)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.contexts",{id:405,title:"Contexts",route:"voiceContext",translate:"VOICE.CONTEXTS",state:"app.voice.contexts",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(405)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.voicemails",{id:406,title:"Voicemails",route:"voiceMail",translate:"VOICE.VOICEMAILS",state:"app.voice.voicemails",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(406)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.musiconholds",{id:407,title:"MusicOnHolds",route:"voiceMusicOnHold",translate:"VOICE.MUSICONHOLDS",state:"app.voice.musiconholds",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(407)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.voiceRecordings",{id:408,title:"VoiceRecordings",route:"voiceRecording",translate:"VOICE.VOICERECORDINGS",state:"app.voice.voiceRecordings",permissions:{association:!1,loading:!0},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(408)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.chanSpies",{id:409,title:"ChanSpies",route:"voiceChanSpy",translate:"VOICE.CHANSPIES",state:"app.voice.chanSpies",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(409)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.voicePrefixes",{id:410,title:"VoicePrefixes",route:"voicePrefix",translate:"VOICE.VOICEPREFIXES",state:"app.voice.voicePrefixes",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(410)&&!o.hasRole("admin")}}),s.saveItem("apps.voice.realtime",{id:411,title:"Realtime",route:"",translate:"VOICE.REALTIME",state:"app.voice.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(411)&&!o.hasRole("admin")}}),s.saveItem("apps.chat",{id:500,title:"Chat",translate:"CHAT.CHAT",icon:"icon-hangouts",license:"chat",weight:6,hidden:function(){return!e.chat||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.chat.chatQueues",{id:501,title:"ChatQueues",route:"chatQueue",channel:"chat",translate:"CHAT.CHATQUEUES",state:"app.chat.chatQueues",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(501)&&!o.hasRole("admin")}}),s.saveItem("apps.chat.chatWebsites",{id:502,title:"ChatWebsites",route:"chatWebsite",channel:"chat",translate:"CHAT.CHATWEBSITES",state:"app.chat.chatWebsites",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(502)&&!o.hasRole("admin")}}),s.saveItem("apps.chat.realtime",{id:510,title:"Realtime",route:"",translate:"CHAT.REALTIME",state:"app.chat.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(510)&&!o.hasRole("admin")}}),s.saveItem("apps.mail",{id:600,title:"Mail",translate:"MAIL.MAIL",icon:"icon-email",license:"mail",weight:7,hidden:function(){return!e.mail||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.mail.mailQueues",{id:601,title:"MailQueues",route:"mailQueue",channel:"mail",translate:"MAIL.MAILQUEUES",state:"app.mail.mailQueues",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(601)&&!o.hasRole("admin")}}),s.saveItem("apps.mail.mailAccounts",{id:602,title:"MailAccounts",route:"mailAccount",channel:"mail",translate:"MAIL.MAILACCOUNTS",state:"app.mail.mailAccounts",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(602)&&!o.hasRole("admin")}}),s.saveItem("apps.mail.mailSubtatuses",{id:603,title:"MailSubstatuses",route:"mailSubstatus",channel:"mail",translate:"MAIL.MAILSUBSTATUSES",state:"app.mail.mailSubtatuses",permissions:{association:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(603)&&!o.hasRole("admin")}}),s.saveItem("apps.mail.realtime",{id:610,title:"Realtime",route:"",translate:"MAIL.REALTIME",state:"app.mail.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(610)&&!o.hasRole("admin")}}),s.saveItem("apps.sms",{id:700,title:"Sms",translate:"SMS.SMS",icon:"icon-message-text",license:"messaging",weight:8,hidden:function(){return!e.messaging||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.sms.smsQueues",{id:701,title:"SmsQueues",route:"smsQueue",channel:"sms",translate:"SMS.SMSQUEUES",state:"app.sms.smsQueues",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(701)&&!o.hasRole("admin")}}),s.saveItem("apps.sms.smsAccounts",{id:702,title:"SmsAccounts",route:"smsAccount",channel:"sms",translate:"SMS.SMSACCOUNTS",state:"app.sms.smsAccounts",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(702)&&!o.hasRole("admin")}}),s.saveItem("apps.sms.realtime",{id:710,title:"Realtime",route:"",translate:"SMS.REALTIME",state:"app.sms.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(710)&&!o.hasRole("admin")}}),s.saveItem("apps.openchannel",{id:800,title:"Openchannel",translate:"OPENCHANNEL.OPENCHANNEL",icon:"icon-google-earth",license:"openchannel",weight:9,hidden:function(){return!e.openchannel||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.openchannel.openchannelQueues",{id:801,title:"OpenchannelQueues",route:"openchannelQueue",channel:"openChannel",translate:"OPENCHANNEL.OPENCHANNELQUEUES",state:"app.openchannel.openchannelQueues",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(801)&&!o.hasRole("admin")}}),s.saveItem("apps.openchannel.openchannelAccounts",{id:802,title:"OpenchannelAccounts",route:"openchannelAccount",channel:"openChannel",translate:"OPENCHANNEL.OPENCHANNELACCOUNTS",state:"app.openchannel.openchannelAccounts",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(802)&&!o.hasRole("admin")}}),s.saveItem("apps.openchannel.realtime",{id:810,title:"Realtime",route:"",translate:"OPENCHANNEL.REALTIME",state:"app.openchannel.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(810)&&!o.hasRole("admin")}}),s.saveItem("apps.fax",{id:900,title:"Fax",translate:"FAX.FAX",icon:"icon-deskphone",license:"fax",weight:10,hidden:function(){return!e.fax||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.fax.faxQueues",{id:901,title:"FaxQueues",route:"faxQueue",channel:"fax",translate:"FAX.FAXQUEUES",state:"app.fax.faxQueues",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(901)&&!o.hasRole("admin")}}),s.saveItem("apps.fax.faxAccounts",{id:902,title:"FaxAccounts",route:"faxAccount",channel:"fax",translate:"FAX.FAXACCOUNTS",state:"app.fax.faxAccounts",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(902)&&!o.hasRole("admin")}}),s.saveItem("apps.fax.realtime",{id:910,title:"Realtime",route:"",translate:"FAX.REALTIME",state:"app.fax.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(910)&&!o.hasRole("admin")}}),s.saveItem("apps.tools",{id:1e3,title:"Tools",translate:"TOOLS.TOOLS",icon:"icon-auto-fix",weight:13,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.tools.cannedAnswers",{id:1001,title:"CannedAnswers",route:"cannedAnswer",translate:"TOOLS.CANNEDANSWERS",state:"app.tools.cannedAnswers",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1001)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.dispositions",{id:1002,title:"Dispositions",route:"disposition",translate:"TOOLS.DISPOSITIONS",state:"app.tools.dispositions",weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1002)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.customDashboards",{id:1003,title:"CustomDashboards",route:"dashboard",translate:"TOOLS.CUSTOMDASHBOARDS",state:"app.tools.customDashboards",weight:3,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1003)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.intervals",{id:1004,title:"Intervals",route:"interval",translate:"TOOLS.INTERVALS",state:"app.tools.intervals",weight:4,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1004)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.pauses",{id:1005,title:"Pauses",route:"pause",translate:"TOOLS.PAUSES",state:"app.tools.pauses",weight:5,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1005)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.schedules",{id:1006,title:"Scheduler",route:"schedule",translate:"TOOLS.SCHEDULER",state:"app.tools.schedules",weight:6,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1006)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.sounds",{id:1007,title:"Sounds",route:"sound",translate:"TOOLS.SOUNDS",state:"app.tools.sounds",weight:7,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1007)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.tags",{id:1008,title:"Tags",route:"tag",translate:"TOOLS.TAGS",state:"app.tools.tags",weight:8,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1008)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.templates",{id:1009,title:"Templates",route:"template",translate:"TOOLS.TEMPLATES",state:"app.tools.templates",weight:9,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1009)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.triggers",{id:1010,title:"Triggers",route:"trigger",translate:"TOOLS.TRIGGERS",state:"app.tools.triggers",weight:10,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1010)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.trunks",{id:1011,title:"Trunks",route:"trunk",translate:"TOOLS.TRUNKS",state:"app.tools.trunks",weight:11,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1011)&&!o.hasRole("admin")}}),s.saveItem("apps.tools.variables",{id:1012,title:"Variables",route:"variable",translate:"TOOLS.VARIABLES",state:"app.tools.variables",weight:12,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1012)&&!o.hasRole("admin")}}),s.saveItem("apps.callysquare",{id:1100,title:"CallySquare",translate:"CALLYSQUARE.CALLYSQUARE",icon:"icon-sitemap",license:"voice",weight:12,hidden:function(){return!e.voice||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.callysquare.odbcs",{id:1101,title:"ODBC",route:"squareOdbc",translate:"CALLYSQUARE.ODBC",state:"app.callysquare.odbcs",weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1101)&&!o.hasRole("admin")}}),s.saveItem("apps.callysquare.squareRecordings",{id:1102,title:"SquareRecordings",route:"squareRecording",translate:"CALLYSQUARE.SQUARERECORDINGS",state:"app.callysquare.squareRecordings",permissions:{association:!1,loading:!0},weight:3,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1102)&&!o.hasRole("admin")}}),s.saveItem("apps.callysquare.projects",{id:1103,title:"Projects",route:"squareProject",translate:"CALLYSQUARE.PROJECTS",state:"app.callysquare.projects",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1103)&&!o.hasRole("admin")}}),s.saveItem("apps.analytics",{id:1200,title:"Analytics",translate:"ANALYTICS.ANALYTICS",icon:"icon-chart-line",weight:14,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.analytics.metrics",{id:1201,title:"Metrics",route:"analyticMetric",translate:"ANALYTICS.METRICS",state:"app.analytics.metrics",weight:3,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1201)&&!o.hasRole("admin")}}),s.saveItem("apps.analytics.extractedReports",{id:1202,title:"ExtractedReports",route:"analyticExtractedReport",translate:"ANALYTICS.EXTRACTEDREPORTS",state:"app.analytics.extractedReports",permissions:{association:!1,loading:!0},weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1202)&&!o.hasRole("admin")}}),s.saveItem("apps.analytics.reports",{id:1203,title:"Reports",route:"",translate:"ANALYTICS.REPORTS",state:"app.analytics.reports",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1203)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations",{id:1300,title:"Integrations",translate:"INTEGRATIONS.INTEGRATIONS",icon:"icon-heart",weight:15,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.zendeskAccounts",{id:1301,title:"ZendeskAccounts",route:"intZendeskAccount",translate:"INTEGRATIONS.ZENDESKACCOUNTS",state:"app.integrations.zendeskAccounts",permissions:{association:!1,loading:!0},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1301)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.salesforceAccounts",{id:1302,title:"SalesforceAccounts",route:"intSalesforceAccount",translate:"INTEGRATIONS.SALESFORCEACCOUNTS",state:"app.integrations.salesforceAccounts",permissions:{association:!1,loading:!0},weight:2,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1302)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.freshdeskAccounts",{id:1303,title:"FreshdeskAccounts",route:"intFreshdeskAccount",translate:"INTEGRATIONS.FRESHDESKACCOUNTS",state:"app.integrations.freshdeskAccounts",permissions:{association:!1,loading:!0},weight:3,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1303)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.sugarcrmAccounts",{id:1305,title:"SugarcrmAccounts",route:"intSugarcrmAccount",translate:"INTEGRATIONS.SUGARCRMACCOUNTS",state:"app.integrations.sugarcrmAccounts",permissions:{association:!1,loading:!0},weight:4,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1305)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.deskAccounts",{id:1306,title:"DeskAccounts",route:"intDeskAccount",translate:"INTEGRATIONS.DESKACCOUNTS",state:"app.integrations.deskAccounts",permissions:{association:!1,loading:!0},weight:5,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1306)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.zohoAccounts",{id:1307,title:"ZohoAccounts",route:"intZohoAccount",translate:"INTEGRATIONS.ZOHOACCOUNTS",state:"app.integrations.zohoAccounts",permissions:{association:!1,loading:!0},weight:6,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1307)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.vtigerAccounts",{id:1308,title:"VtigerAccounts",route:"intVtigerAccount",translate:"INTEGRATIONS.VTIGERACCOUNTS",state:"app.integrations.vtigerAccounts",permissions:{association:!1,loading:!0},weight:7,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1308)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.dynamics365Accounts",{id:1309,title:"Dynamics365Accounts",route:"intDynamics365Account",translate:"INTEGRATIONS.DYNAMICS365ACCOUNTS",state:"app.integrations.dynamics365Accounts",permissions:{association:!1,loading:!0},weight:8,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1309)&&!o.hasRole("admin")}}),s.saveItem("apps.integrations.servicenowAccounts",{id:1310,title:"ServicenowAccounts",route:"intServicenowAccount",translate:"INTEGRATIONS.SERVICENOWACCOUNTS",state:"app.integrations.servicenowAccounts",permissions:{association:!1,loading:!0},weight:9,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1310)&&!o.hasRole("admin")}}),s.saveItem("apps.settings",{id:1400,title:"Settings",translate:"SETTINGS.SETTINGS",icon:"icon-cog",permissions:{hidden:!0},weight:18,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.generals",{id:1401,title:"General",route:"setting",translate:"SETTINGS.GENERAL",state:"app.settings.generals",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.smtps",{id:1402,title:"Smtp",route:"mailAccount",translate:"SETTINGS.SMTP",state:"app.settings.smtps",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.networks",{id:1403,title:"Networks",route:"network",translate:"SETTINGS.NETWORKS",state:"app.settings.networks",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.customizations",{id:1407,title:"Customizations",route:"setting",translate:"SETTINGS.CUSTOMIZATIONS",state:"app.settings.customizations",weight:1,hidden:function(){return!e.custom||o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.updates",{id:1404,title:"Updates",route:"",translate:"SETTINGS.UPDATES",state:"app.settings.updates",weight:1,hidden:function(){return!e.update||o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.license",{id:1405,title:"License",route:"",translate:"SETTINGS.LICENSE",state:"app.settings.license",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.settings.system",{id:1406,title:"System",route:"",translate:"SETTINGS.SYSTEM",state:"app.settings.system",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1400)&&!o.hasRole("admin")}}),s.saveItem("apps.motiondialer",{id:1500,title:"MotionDialer",translate:"MOTIONDIALER.MOTIONDIALER",icon:"icon-fire",license:"dialer",weight:5,hidden:function(){return!e.dialer||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.motiondialer.queueCampaigns",{id:1501,title:"QueueCampaigns",route:"voiceQueue",channel:"bull",translate:"MOTIONDIALER.QUEUECAMPAIGNS",state:"app.motiondialer.queueCampaigns",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1501)&&!o.hasRole("admin")}}),s.saveItem("apps.motiondialer.ivrCampaigns",{id:1502,title:"IvrCampaigns",route:"campaign",translate:"MOTIONDIALER.IVRCAMPAIGNS",state:"app.motiondialer.ivrCampaigns",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1502)&&!o.hasRole("admin")}}),s.saveItem("apps.motiondialer.realtime",{id:1510,title:"Realtime",route:"",translate:"MOTIONDIALER.REALTIME",state:"app.motiondialer.realtime",permissions:{association:!1,crud:!1},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1510)&&!o.hasRole("admin")}}),s.saveItem("apps.help",{id:1600,title:"Help",translate:"HELP.HELP",icon:"icon-help",permissions:{association:!1},weight:19,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1600)&&!o.hasRole("admin")}}),s.saveItem("apps.help.about",{id:1601,title:"About",route:"",translate:"HELP.ABOUT",state:"app.help.about",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1600)&&!o.hasRole("admin")}}),s.saveItem("apps.jscripty",{id:1700,title:"jscripty",translate:"JSCRIPTY.JSCRIPTY",icon:"icon-script",license:"jscripty",weight:12,hidden:function(){return!e.jscripty||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.jscripty.projects",{id:1701,title:"Projects",route:"jscriptyProject",translate:"JSCRIPTY.PROJECTS",state:"app.jscripty.projects",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1701)&&!o.hasRole("admin")}}),s.saveItem("apps.marketplace",{id:1800,title:"Marketplace",translate:"MARKETPLACE.MARKETPLACE",icon:"icon-cart",weight:16,hidden:function(){return o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.marketplace.plugins",{id:1801,title:"Plugins",route:"plugin",translate:"MARKETPLACE.PLUGINS",state:"app.marketplace.plugins",weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(1801)&&!o.hasRole("admin")}}),s.saveItem("apps.video",{id:2e3,title:"Video",translate:"VIDEO.VIDEO",icon:"icon-video",license:"screenrecording",weight:11,hidden:function(){return!e.screenrecording||o.hasRole("agent")||!o.hasChildrenPermissions(u(this))&&!o.hasRole("admin")}}),s.saveItem("apps.video.screenRecordings",{id:2001,title:"ScreenRecordings",route:"screenRecording",translate:"VIDEO.SCREENRECORDINGS",state:"app.video.screenRecordings",permissions:{association:!1,loading:!0},weight:1,hidden:function(){return o.hasRole("agent")||!o.hasPermission(2001)&&!o.hasRole("admin")}}),s.sort(),a.saveItem("apps",{title:"APPS",group:!0,weight:1}),a.saveItem("apps.home",{id:100,title:"Home",translate:"DASHBOARDS.HOME",icon:"icon-home",weight:1}),a.saveItem("apps.home.dashboard",{id:101,title:"Dashboard",translate:"DASHBOARDS.DASHBOARD",state:"dashboard",view:"dashboard",icon:"icon-tile-four",iconClass:"cyan-500-fg",weight:1,hidden:function(){return!o.hasPermission(101)}}),a.saveItem("apps.home.contacts",{id:102,title:"Contacts",translate:"DASHBOARDS.CONTACTS",state:"contacts",view:"contacts",icon:"icon-account-circle",iconClass:"red-fg",weight:2,hidden:function(){return!e.cm||!o.hasPermission(102)}}),a.saveItem("apps.home.mycontacts",{id:103,title:"Contacts",translate:"DASHBOARDS.MYCONTACTS",state:"mycontacts",view:"mycontacts",icon:"icon-account-multiple",iconClass:"red-fg",weight:3,hidden:function(){return!e.cm||!o.hasPermission(103)}}),a.saveItem("apps.home.scheduled",{id:113,title:"Scheduled Calls",translate:"DASHBOARDS.SCHEDULED_CALLS",state:"scheduled",view:"scheduled",icon:"icon-calendar-clock",iconClass:"blue-grey-fg",weight:3,hidden:function(){return!e.dialer||!o.hasPermission(113)}}),a.saveItem("apps.home.voice",{id:110,title:"Voice",translate:"DASHBOARDS.VOICE",state:"voice",view:"voice",icon:"icon-phone",iconClass:"blue-A700-fg",weight:4,hidden:function(){return!e.voice||!o.hasPermission(110)}}),a.saveItem("apps.home.abandoned",{id:111,title:"Abandoned",translate:"DASHBOARDS.ABANDONED",state:"abandoned",view:"abandoned",icon:"icon-phone-missed",iconClass:"blue-fg",weight:5,hidden:function(){return!e.voice||!o.hasPermission(111)}}),a.saveItem("apps.home.recordings",{id:104,title:"Recordings",translate:"DASHBOARDS.RECORDINGS",state:"recordings",view:"recordings",icon:"icon-audiobook",iconClass:"indigo-A100-fg",weight:6,hidden:function(){return!e.voice||!o.hasPermission(104)}}),a.saveItem("apps.home.chat",{id:105,title:"Chat",translate:"DASHBOARDS.CHAT",state:"chat",view:"chat",icon:"icon-hangouts",iconClass:"green-A700-fg",weight:7,hidden:function(){return!e.chat||!o.hasPermission(105)}}),a.saveItem("apps.home.mail",{id:106,title:"Mail",translate:"DASHBOARDS.MAIL",state:"mail",view:"mail",icon:"icon-email",iconClass:"teal-fg",weight:8,hidden:function(){return!e.mail||!o.hasPermission(106)}}),a.saveItem("apps.home.sms",{id:107,title:"Sms",translate:"DASHBOARDS.SMS",state:"sms",view:"sms",icon:"icon-message-text",iconClass:"orange-fg",weight:9,hidden:function(){return!e.messaging||!o.hasPermission(107)}}),a.saveItem("apps.home.openchannel",{id:108,title:"Openchannel",translate:"DASHBOARDS.OPENCHANNEL",state:"openchannel",view:"openchannel",icon:"icon-google-earth",iconClass:"amber-A200-fg",weight:10,hidden:function(){return!e.openchannel||!o.hasPermission(108)}}),a.saveItem("apps.home.fax",{id:109,title:"Fax",translate:"DASHBOARDS.FAX",state:"fax",view:"fax",icon:"icon-deskphone",iconClass:"blue-grey-A200-fg",weight:11,hidden:function(){return!e.fax||!o.hasPermission(109)}}),t.$on("$viewContentAnimationEnded",function(e){e.targetScope.$id===t.$id&&n.$broadcast("msSplashScreen::remove")})}e.$inject=["$scope","$rootScope","msNavigationService","msNavigationAgentService","Auth","license","api","setting"],angular.module("motion").controller("MainController",e)}(),function(){"use strict";function e(e,t,n,a,o,r){var i=this;function s(e){if(e&&e.id){var t=99999+e.id;o.saveItem("apps.dashboards.custom_"+t,{id:t,title:e.name||"NONAME",state:"app.dashboards.custom",stateParams:e,weight:2,hidden:function(){return r.hasRole("agent")||!r.hasPermission(t)&&!r.hasRole("admin")}})}}function l(e){if(e&&e.id&&"never"!=e.sidebar)if(e.active){if("always"==e.sidebar||"adminOnly"==e.sidebar){o.saveItem("apps.plugins",{id:1900,title:"Plugins",translate:"PLUGINS.PLUGINS",icon:"icon-apps",weight:17,hidden:function(){return r.hasRole("agent")||!r.hasPermission(1900)&&!r.hasRole("admin")}});var t=88888+e.id;o.saveItem("apps.plugins.plugin_"+t,{id:t,title:e.name||"NONAME",state:"app.plugins.plugin",stateParams:e,weight:2,hidden:function(){return r.hasRole("agent")||!r.hasPermission(t)&&!r.hasRole("admin")}}),o.sort()}}else{t=88888+e.id;n=1900,a=t,i=o.getNavigation(),(s=_.find(i[0].children,{id:n}))&&_.some(s.children,{id:a})&&("always"==e.sidebar||"adminOnly"==e.sidebar)&&(o.deleteItem("apps.plugins.plugin_"+t),d(1900)||o.saveItem("apps.plugins",{id:1900,title:"Plugins",translate:"PLUGINS.PLUGINS",icon:"icon-apps",weight:17,hidden:function(){return!0}}))}var n,a,i,s}function d(e){var t=o.getNavigation(),n=_.find(t[0].children,{id:e});return!!(n&&0<n.children.length)}i.bodyEl=angular.element("body"),i.msScrollOptions={suppressScrollX:!0},i.setting=n,i.$onInit=function(){i.folded="true"===t.get("motion.folded")||!1},i.toggleMsNavigationFolded=function(){i.folded=!i.folded,t.put("motion.folded",i.folded)},i.getLogo=function(){return i.setting.defaultHeaderWhiteLabel?"xCALLY Motion":i.setting.headerWhiteLabel},a.on("dashboard:save",s),a.on("dashboard:update",s),a.on("dashboard:remove",function(e){if(e&&e.id){var t=99999+e.id;o.deleteItem("apps.dashboards.custom_"+t)}}),a.on("plugin:save",l),a.on("plugin:update",l),a.on("plugin:remove",function(e){if(e&&e.id&&"never"!=e.sidebar){var t=88888+e.id;"always"!=e.sidebar&&"adminOnly"!=e.sidebar||(o.deleteItem("apps.plugins.plugin_"+t),d(1900)||o.saveItem("apps.plugins",{id:1900,title:"Plugins",translate:"PLUGINS.PLUGINS",icon:"icon-apps",weight:17,hidden:function(){return!0}}))}}),e.$on("$stateChangeSuccess",function(){i.bodyEl.removeClass("ms-navigation-horizontal-mobile-menu-active")})}e.$inject=["$scope","$cookies","setting","socket","msNavigationService","Auth"],angular.module("app.navigation").controller("NavigationController",e)}(),function(){"use strict";function e(e,a,i,t,n,s,o,r){var l=this;function d(n){o.isSupported()?o.requestPermission().then(function(){var e,t;t={autoClose:!0,duration:10,showOnPageHidden:!0,icon:"api/users/"+(e=n).FromId+"/avatar",body:e.body||"",focusOnclick:!0,closeOnClick:!0},o.show(a.instant("QUICKPANEL.NEW_INTERNAL_MESSAGE"),t)},function(e){console.error("Please enable browser notifications!",e)}):console.error("Browser notifications are not supported by the browser. Normal notifications will be used.")}l.date=moment().format(),l.currentUser=t.getCurrentUser(),l.license=r,l.unreadTotalMessages=0,l.unreadTotalGroupMessages=0,l.userIsNotPhonebar=function(){return"admin"===l.currentUser.role||"user"===l.currentUser.role||"agent"===l.currentUser.role&&0!==l.currentUser.showWebBar},l.onMessageSave=function(e){e.ToId===l.currentUser.id&&e.FromId!==l.currentUser.id&&!e.read&&e.ChatGroupId&&(l.unreadTotalGroupMessages++,d(e));e.ToId!==l.currentUser.id||e.ChatGroupId||(l.unreadTotalMessages+=1,d(e))},l.onMessageUpdate=function(e){e.ToId===l.currentUser.id&&e.read&&0<l.unreadTotalMessages&&!e.ChatGroupId&&(l.unreadTotalMessages-=1);e.ToId==l.currentUser.id&&e.FromId!==l.currentUser.id&&e.ChatGroupId&&e.read&&0<l.unreadTotalGroupMessages&&l.unreadTotalGroupMessages--},n.on("chatInternalMessage:save",l.onMessageSave),n.on("chatInternalMessage:update",l.onMessageUpdate),s.chatInternalMessage.get({fields:"FromId",ToId:l.currentUser.id,read:!1,nolimit:!0,ChatGroupId:"null"}).$promise.then(function(e){return e&&e.count&&(l.unreadTotalMessages=e.count),s.user.getGroups({id:l.currentUser.id}).$promise}).then(function(e){for(var t=[],n=e.rows,a=0;a<n.length;a++)t.push(s.chatGroup.getUnread({id:n[a].id}).$promise);return i.all(t)}).then(function(e){for(var t=0;t<e.length;t++)l.unreadTotalGroupMessages+=e[t].count}).catch(function(e){console.error(e)}),e.$on("$destroy",function(){n.removeAllListeners("chatInternalMessage:save"),n.removeAllListeners("chatInternalMessage:update")})}e.$inject=["$scope","$translate","$q","Auth","socket","api","desktopNotification","license"],angular.module("app.quick-panel").controller("QuickPanelController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l,d,c,m){var u=this;function p(e){var t=angular.element("#chat-dialog");a(function(){t.animate({scrollTop:t[0].scrollHeight},e)},0)}function g(e){return _.isNil(e)?"":e.replace(/[^\w.+#*\-]+/g,"")}function v(e){return m.get(e).success(function(){t.success({title:"Successful call",msg:"Call properly handled!"})}).error(function(e){t.error({title:"PhoneBar API Error",msg:d.instant("CONTACTMANAGER.ERRORS.PHONEBAR_API")})})}u.currentUser=i.getCurrentUser(),u.user=void 0,u.users={count:0,rows:[]},u.standardDate=moment(0).format("YYYY-MM-DD HH:mm:ss"),u.unreadMessage={},u.replyMessage="",u.disabled=!1,u.init=function(e){u.license=e},u.toggleChat=function(e){if(e){if(!e.allowmessenger&&"agent"===e.role)return t.warning({title:d.instant("QUICKPANEL.WARNING"),msg:d.instant("QUICKPANEL.MESSENGER_DISABLED")}),void(u.user=void 0);u.user=e,u.replyMessage="",n.chatInternalMessage.get({sort:"createdAt",FromId:u.currentUser.id+","+e.id,ToId:u.currentUser.id+","+e.id,ChatGroupId:"null"}).$promise.then(function(e){if(e&&e.rows){u.user.messages=e;for(var t=0;t<u.user.messages.rows.length;t+=1)!1===u.user.messages.rows[t].read&&u.user.messages.rows[t].ToId===u.currentUser.id&&n.chatInternalMessage.update({id:u.user.messages.rows[t].id,read:!0})}}).finally(function(){p(0)})}else u.user=void 0},u.reply=function(){u.disabled=!0;Date.now();if(""===u.replyMessage)return void(u.disabled=!1);var e={FromId:u.currentUser.id,ToId:u.user.id,body:u.replyMessage,read:!1};u.replyMessage="",n.chatInternalMessage.save(e).$promise.then(function(e){u.user.messages.rows.push(e),u.user.lastMessageAt=e.createdAt,u.user.lastMessage=e,p(400)}).catch(function(e){}).finally(function(){u.disabled=!1})},u.onMessageSave=function(e){if(e.ToId===u.currentUser.id&&!e.ChatGroupId){u.user&&u.user.id===e.FromId?(u.user.messages.rows.push(e),p(0),n.chatInternalMessage.update({id:e.id,read:!0})):u.unreadMessage[e.FromId]=u.unreadMessage[e.FromId]?u.unreadMessage[e.FromId]+1:1;var t=_.find(u.users.rows,{id:e.FromId});t&&(t.lastMessageAt=e.createdAt,t.lastMessage=e)}},u.onMessageUpdate=function(e){if((e.FromId===u.currentUser.id||e.ToId===u.currentUser.id)&&!e.ChatGroupId){if(u.user){var t=_.find(u.user.messages.rows,{id:e.id});t&&_.merge(t,e)}var n=_.find(u.users.rows,{id:u.currentUser.id===e.FromId?e.ToId:e.FromId});n&&n.lastMessage&&_.merge(n.lastMessage,e),e.ToId===u.currentUser.id&&e.read&&0<u.unreadMessage[e.FromId]&&(u.unreadMessage[e.FromId]-=1)}},u.onUserUpdate=function(e){var t=_.find(u.users.rows,{id:e.id});t&&(_.isNil(e.online)||t.online===e.online||(t.online=e.online),_.isNil(e.allowmessenger)||t.allowmessenger===e.allowmessenger||(t.allowmessenger=e.allowmessenger))},u.webcall=function(e){c.$broadcast("webrtc::call",{target:g(e)})},u.call=function(e){return v("http://127.0.0.1:"+(u.user.phoneBarRemoteControlPort||"9888")+"/api/originate/"+g(e))},u.transfer=function(e){return v("http://127.0.0.1:"+(u.user.phoneBarRemoteControlPort||"9888")+"/api/transfer?number="+g(e))},s.on("chatInternalMessage:save",u.onMessageSave),s.on("chatInternalMessage:update",u.onMessageUpdate),s.on("user:update",u.onUserUpdate),o("quick-panel").onClose(function(){u.user=void 0}),n.chatInternalMessage.get({fields:"FromId",ToId:u.currentUser.id,read:!1,nolimit:!0,ChatGroupId:"null"}).$promise.then(function(e){u.unreadMessage=_.countBy(e.rows,"FromId")}).catch(function(e){}),n.chatInternalMessage.getUsers().$promise.then(function(e){u.users=e}).catch(function(e){console.error(e)}),e.$on("$destroy",function(){s.removeAllListeners("chatInternalMessage:save"),s.removeAllListeners("chatInternalMessage:update"),s.removeAllListeners("user:update")})}e.$inject=["$scope","toasty","api","$timeout","Auth","socket","$mdSidenav","$q","$interval","$translate","$rootScope","$http"],angular.module("app.quick-panel").controller("ChatInternalController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r,l){var d=this;function c(e){a.hide(e)}d.errors=[],d.title="QUICKPANEL.EDIT_CHATGROUP",d.group=angular.copy(r),d.currentUser=o.getCurrentUser(),d.members=l,d.newChatGroup=!0,d.group||(d.group={write:!0,members:[]},d.title="QUICKPANEL.NEW_CHATGROUP"),d.saveChatGroup=function(){var n;return d.errors=[],s.chatGroup.save({name:d.group.name,write:d.group.write}).$promise.then(function(e){var t=_.map(d.group.members,"id");return t.unshift(d.currentUser.id),n=e,s.chatGroup.addMembers({id:n.id,ids:t}).$promise}).then(function(){i.success({title:"Group properly saved!",msg:n.name+" has been saved!"}),c(n)}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatQueue.update",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},d.closeDialog=c,d.querySearch=function(e){return e?d.members.rows.filter((t=e,n=angular.lowercase(t),function(e){var t=e.name.toLowerCase();return-1!=t.indexOf(n)})):[];var t,n}}e.$inject=["$scope","$state","$location","$mdDialog","toasty","api","Auth","group","members"],angular.module("app.quick-panel").controller("CreateOrEditChatGroupDialogController",e)}(),function(){"use strict";function e(e,n,a,s,t,o,i,r,l,d){var c=this;function m(){delete c.group}function u(e){var t=angular.element("#chat-group-dialog");a(function(){t.animate({scrollTop:t[0].scrollHeight},e)},0)}c.currentUser=i.getCurrentUser(),c.unreadGroupMessages={},c.groups={},c.participants,c.group,c.init=function(e){return c.license=e,r.user.getGroups({id:c.currentUser.id}).$promise.then(function(e){for(var t=0,n=[];t<e.rows.length;t++)e.rows[t].unreadGroupMessages=0,c.groups[e.rows[t].id]=e.rows[t],n.push(r.chatGroup.getUnread({id:e.rows[t].id}).$promise);return o.all(n)}).then(function(e){for(var t=0;t<e.length;t++)c.groups[e[t].id].unreadGroupMessages+=e[t].count}).catch(function(e){console.error(e)})},c.back=m,c.addGroup=function(e,t){s.show({controller:"CreateOrEditChatGroupDialogController",controllerAs:"vm",templateUrl:"app/quick-panel/tabs/groups/create/dialog.html",parent:angular.element(n.body),targetEvent:t,clickOutsideToClose:!0,locals:{group:e,me:c.currentUser,license:null,setting:null},resolve:{members:function(){return i.hasRole("admin")?r.user.get({role:"agent"}).$promise:r.userProfile.getResources({id:i.getCurrentUser().userProfileId,section:"Agents",role:"agent"}).$promise}}}).then(function(e){e&&(c.groups[e.id]=e)}).catch(function(e){e&&console.error(e.message)})},c.deleteGroup=function(e,t){var n=s.confirm().title("Are you sure want to delete the selected group?").htmlContent("Group <b>"+e.name+"</b> will be deleted.").ariaLabel("delete Group").targetEvent(t).ok("OK").cancel("CANCEL");s.show(n).then(function(){return r.chatGroup.delete({id:e.id}).$promise}).then(function(){delete c.groups[e.id],d.success({title:"Group properly deleted!",msg:e.name+" has been deleted!"})}).catch(function(e){e&&d.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.chatGroup.delete",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},c.groupsToArray=function(){return _.values(c.groups)},c.showMessageInfo=function(e,i){s.show({controller:"ShowMessageInfoDialogController",controllerAs:"vm",templateUrl:"app/quick-panel/tabs/groups/info/dialog.html",parent:angular.element(n.body),targetEvent:e,clickOutsideToClose:!0,locals:{message:i},resolve:{data:function(){var a={messages:[]};return r.chatInternalMessage.get({ChatInternalMessageId:i.id}).$promise.then(function(e){var t=[];a.messages=e.rows,a.messages.unshift(i);for(var n=0;n<a.messages.length;n++)t.push(r.user.get({id:a.messages[n].ToId,fields:"id,name,fullname,userpic"}).$promise);return o.all(t)}).then(function(e){return a.users=e,a}).catch(function(e){e&&console.error(e)})}}}).then(function(){}).catch(function(e){e&&console.error(e.message)})},c.toggleChat=function(t){c.group={id:t.id,write:t.write,messages:{}},r.chatGroup.getMembers({id:t.id,fields:"id,name,fullname"}).$promise.then(function(e){return c.group.membersByKeys=_.keyBy(e.rows,"id"),c.group.members=_.differenceBy(e.rows,[{id:c.currentUser.id}],"id"),c.participants=_.map(c.group.members,"fullname").join(", "),r.chatGroup.getMessages({id:t.id,nolimit:!0}).$promise}).then(function(e){for(var t,n=0,a=[];n<e.count;n++)e.rows[n].ToId===c.currentUser.id&&(t=e.rows[n],c.group.messages[t.id]=t,e.rows[n].ToId!=c.currentUser.id||e.rows[n].FromId===c.currentUser.id||t.read||a.push(r.chatInternalMessage.update({id:t.id,read:!0})));return o.all(a)}).then(function(){u(400)}).catch(function(e){console.error(e.message)})},c.reply=function(){if(!c.replyMessage)return;var n={id:c.group.id,FromId:c.currentUser.id,ToId:c.currentUser.id,body:c.replyMessage,read:!0},a=[];c.replyMessage="",r.chatGroup.addMessage(n).$promise.then(function(e){n.read=!1,n.ChatInternalMessageId=e.id;for(var t=0;t<c.group.members.length;t++)c.group.members[t].id!==c.currentUser.id&&(n.ToId=c.group.members[t].id,a.push(r.chatGroup.addMessage(angular.copy(n)).$promise));return o.all(a)}).catch(function(e){console.log(e)})},l.on("chatInternalMessage:save",function(t){if(!c.group&&t.ToId===c.currentUser.id&&t.FromId!==c.currentUser.id&&!t.read&&t.ChatGroupId){var e=c.groups[t.ChatGroupId];if(!e)return r.chatGroup.get({id:t.ChatGroupId}).$promise.then(function(e){e.unreadGroupMessages=1,c.groups[e.id]=e});e.unreadGroupMessages||(e.unreadGroupMessages=0),e.unreadGroupMessages++}c.group&&t.ChatGroupId===c.group.id&&t.ToId===c.currentUser.id&&r.chatInternalMessage.update({id:t.id,read:!0}).$promise.then(function(){var e;e=t,c.group.messages[e.id]=e,u(400)})}),l.on("chatInternalMessage:update",function(e){e.ToId==c.currentUser.id&&e.FromId!==c.currentUser.id&&e.ChatGroupId&&e.read&&(0<c.groups[e.ChatGroupId].unreadGroupMessages&&c.groups[e.ChatGroupId].unreadGroupMessages--,c.group.messages[e.id]&&(c.group.messages[e.id].read=!0))}),l.on("chatGroup:remove",function(e){c.groups[e.id]&&delete c.groups[e.id]}),t("quick-panel").onClose(m),e.$on("$destroy",function(){l.removeAllListeners("chatInternalMessage:save"),l.removeAllListeners("chatInternalMessage:update"),l.removeAllListeners("chatGroup:remove")})}e.$inject=["$scope","$document","$timeout","$mdDialog","$mdSidenav","$q","Auth","api","socket","toasty"],angular.module("app.quick-panel").controller("ChatGroupController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r){this.data=r,this.title="QUICKPANEL.INFO",this.closeDialog=function(){a.hide()}}e.$inject=["$scope","$state","$location","$mdDialog","toasty","api","Auth","data"],angular.module("app.quick-panel").controller("ShowMessageInfoDialogController",e)}(),function(){"use strict";function e(e,t,n,a,i,s){var o=this;o.form={token:s.token},o.setting={},o.resetPassword=function(){return i.auth.reset(o.form).$promise.then(function(){t.success({title:n.instant("RESETPASSWORD.PASSWORD_RESET"),msg:n.instant("RESETPASSWORD.PASSWORD_RESET_MESSAGE")}),a.go("app.login")}).catch(function(e){e&&t.error({title:n.instant("RESETPASSWORD.PASSWORD_RESET_ERROR"),msg:e.data?e.data.message||e.message||e:e.message||e})})},o.onInit=function(){e.isLoggedIn()&&a.go("app.dashboards.general");return i.setting.gdpr({id:1}).$promise.then(function(e){o.setting=e,o.passwordPattern=o.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:""}).catch(function(e){e&&t.error({title:"Error",msg:e.data?e.data.message||e.message||e:e.message||e})})}}e.$inject=["Auth","toasty","$translate","$state","api","$stateParams"],angular.module("app.reset").controller("ResetPasswordController",e)}(),function(){"use strict";function e(n,e,t,a,i,s,o){var r=this;function l(){e.hide()}r.errors=[],r.user=i,r.setting=s,r.reset=o,r.passwordPattern=r.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",r.savePassword=function(){r.errors=[],a.user.changePassword({id:r.user.id},{oldPassword:r.oldPassword,newPassword:r.password}).$promise.then(function(){t.show(t.simple().textContent("Your password properly updated").position("top right").hideDelay(5e3)),l()}).catch(function(e){console.error(e),r.errors=e.data.errors&&e.data.errors.length?e.data.errors:[{message:e.data.message||"Authorization error",type:"api.user.changePassword"}]})},r.closeDialog=l,n.$watch("vm.password",function(e,t){_.isNil(r.oldPassword)||(e===r.oldPassword?n.changePasswordForm.password.$setValidity("oldPasswordMatch",!1):n.changePasswordForm.password.$setValidity("oldPasswordMatch",!0))})}e.$inject=["$scope","$mdDialog","$mdToast","api","user","setting","reset"],angular.module("app.toolbar").controller("ChangePasswordController",e)}(),function(){"use strict";function e(e,t,n,a,i,s,o,r){var l=this;function d(e){_.isNil(e)&&s.cmHopper.update({id:l.preview.id,UserId:null}),a.hide()}l.customFieldsMap=r&&r.rows?_.mapValues(_.keyBy(r.rows,function(e){return"cf_"+e.id}),"name"):{},l.errors=[],l.hopperIds=[],l.preview=o,l.originated=!1,l.disable=!1,l.disableGetContact=!1,l.hopperIds.push(l.preview.id),l.originatePreview=function(){l.originated=!0,l.disable=!0,_.isEmpty(l.preview)?(i.error({title:"Message",msg:"Contact not available"}),l.disable=!1,l.hopperIds=[],d(!0)):s.rpc.getVoiceQueuesPreview({id:l.preview.id}).$promise.then(function(e){d(!0)}).catch(function(e){i.error({title:"Message",msg:e.data}),d(!0)}).finally(function(){l.disable=!1,l.hopperIds=[]})},l.closeDialog=d,l.nextContact=function(){return l.disableGetContact=!0,s.cmHopper.getPreview({hopperIds:l.hopperIds,direction:"next"}).$promise.then(function(e){l.disableGetContact=!1,_.isNil(e)||_.isNil(e.Queue)||!e.Queue.dialActive?(l.hopperIds=[],a.hide(),i.info({title:"PREVIEW",msg:"CAMPAIGN NOT ACTIVE"})):(l.originated||s.cmHopper.update({id:l.preview.id,UserId:null}),l.preview=e,l.hopperIds.push(l.preview.id))}).catch(function(e){if(l.disableGetContact=!1,l.hopperIds=[],404===e.status)l.getFirstAvailableContact();else if(e.data&&e.data.errors&&e.data.errors.length){a.hide();for(var t=0;t<e.data.errors.length;t+=1)i.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else a.hide(),i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api preview",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},l.previousContact=function(){if(l.disableGetContact=!0,1<l.hopperIds.length){var e=_.without(l.hopperIds,l.preview.id);return s.cmHopper.getPreview({hopperIds:e,direction:"prev"}).$promise.then(function(e){l.disableGetContact=!1,_.isNil(e)||_.isNil(e.Queue)||!e.Queue.dialActive?(l.hopperIds=[],a.hide(),i.info({title:"PREVIEW",msg:"CAMPAIGN NOT ACTIVE"})):(_.remove(l.hopperIds,function(e){return e==l.preview.id}),l.originated||s.cmHopper.update({id:l.preview.id,UserId:null}),l.preview=e)}).catch(function(e){if(404===e.status)l.hopperIds=[l.preview.id],i.info({title:"PREVIEW",msg:"PREVIOUS CONTACTS NOT AVAILABLE"});else if(e.data&&e.data.errors&&e.data.errors.length){l.hopperIds=[],a.hide();for(var t=0;t<e.data.errors.length;t+=1)i.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else l.hopperIds=[],a.hide(),i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api preview",msg:e.data?JSON.stringify(e.data.message):e.toString()})})}},l.getFirstAvailableContact=function(){return l.disableGetContact=!0,i.info({title:"PREVIEW",msg:"CONTACTS NOT AVAILABLE. REWINDING THE LIST"}),s.cmHopper.getPreview({hopperIds:[l.preview.id],direction:"next"}).$promise.then(function(e){_.isNil(e)||_.isNil(e.Queue)||!e.Queue.dialActive?(a.hide(),i.info({title:"PREVIEW",msg:"CAMPAIGN NOT ACTIVE"})):(l.originated||s.cmHopper.update({id:l.preview.id,UserId:null}),l.preview=e,l.hopperIds.push(l.preview.id))}).catch(function(e){if(a.hide(),404===e.status)i.info({title:"PREVIEW",msg:"CONTACTS NOT AVAILABLE"});else if(e.data&&e.data.errors&&e.data.errors.length)for(var t=0;t<e.data.errors.length;t+=1)i.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api preview",msg:e.data?JSON.stringify(e.data.message):e.toString()})}).finally(function(){l.disableGetContact=!1})},l.isCustomField=function(e){return _.startsWith(e,"cf_")},l.isHiddenField=function(e){return _.includes(["Company","CompanyId","ListId","UserId","createdAt","deletedAt","id","priority","scheduledat","tags","updatedAt","facebook","twitter","skype","wechat","teams","viber","line","telegram"],e)},l.isNil=function(e){return _.isNil(e)},e.$on("$destroy",function(){l.originated||s.cmHopper.update({id:l.preview.id,UserId:null})})}e.$inject=["$scope","$state","$location","$mdDialog","toasty","api","preview","customFields"],angular.module("app.toolbar").controller("PreviewDialogController",e)}(),function(){"use strict";function e(t,n,s,a,o,e,i,r,l,d,c,m,u,p,g,v,h,f,b,A,E){var y,S=this;S.voiceQueues={},S.polling=!0,n.global={search:""},S.pauses=[],S.license=b,S.currentUser=v.getCurrentUser(),S.unreadTotalMessages=0,S.unreadTotalGroupMessages=0,S.contcts=0,"agent"===S.currentUser.role&&(y=E(function(){_.some(S.voiceQueues,{dialMethod:"preview",dialActive:!0})&&S.license.dialer&&S.polling?(S.polling=!1,f.cmHopper.getOpenContacts().$promise.then(function(e){e&&_.isNumber(e.contacts)&&(S.contacts=e.contacts)}).finally(function(){S.polling=!0})):S.contacts=0},14999)),S.setting=A,S.bodyEl=angular.element("body"),S.conf={realm:"asterisk",host:e.host(),protocol:e.protocol(),remotePlayerId:"remote-audio",ua:"Motion WebRTC Bar 0.2.0",license:S.license.webrtc,phoneBarExpires:S.currentUser.phoneBarExpires,phoneBarPrefixRequired:S.currentUser.phoneBarPrefixRequired},S.query={id:v.getCurrentUser().id,fields:"id,name,type,dialMethod,dialActive",channel:"voice",nolimit:!0},S.userStatusOptions=[{title:"Online",icon:"icon-checkbox-marked-circle",color:"#4CAF50"},{title:"Away",icon:"icon-clock",color:"#FFC107"},{title:"Do not Disturb",icon:"icon-minus-circle",color:"#F44336"},{title:"Invisible",icon:"icon-checkbox-blank-circle-outline",color:"#BDBDBD"},{title:"Offline",icon:"icon-checkbox-blank-circle-outline",color:"#616161"}],S.languages={ar:{title:"Arabic",translation:"TOOLBAR.ARABIC",code:"ar",flag:"ar"},da:{title:"Danish",translation:"TOOLBAR.DANISH",code:"da",flag:"da"},de:{title:"German",translation:"TOOLBAR.GERMAN",code:"de",flag:"de"},en:{title:"English",translation:"TOOLBAR.ENGLISH",code:"en",flag:"us"},es:{title:"Spanish",translation:"TOOLBAR.SPANISH",code:"es",flag:"es"},fa:{title:"Persian",translation:"TOOLBAR.PERSIAN",code:"fa",flag:"fa"},fi:{title:"Finnish",translation:"TOOLBAR.FINNISH",code:"fi",flag:"fi"},fr:{title:"French",translation:"TOOLBAR.FRENCH",code:"fr",flag:"fr"},he:{title:"Hebrew",translation:"TOOLBAR.HEBREW",code:"he",flag:"he"},hi:{title:"Hindi",translation:"TOOLBAR.HINDI",code:"hi",flag:"hi"},id:{title:"Indonesian",translation:"TOOLBAR.INDONESIAN",code:"id",flag:"id"},it:{title:"Italian",translation:"TOOLBAR.ITALIAN",code:"it",flag:"it"},ja:{title:"Japanese",translation:"TOOLBAR.JAPANESE",code:"ja",flag:"ja"},ko:{title:"Korean",translation:"TOOLBAR.KOREAN",code:"ko",flag:"ko"},lv:{title:"Latvian",translation:"TOOLBAR.LATVIAN",code:"lv",flag:"lv"},nl:{title:"Dutch",translation:"TOOLBAR.DUTCH",code:"nl",flag:"nl"},no:{title:"Norwegian",translation:"TOOLBAR.NORWEGIAN",code:"no",flag:"no"},pl:{title:"Polish",translation:"TOOLBAR.POLISH",code:"pl",flag:"pl"},"pt-BR":{title:"Brazilian",translation:"TOOLBAR.BRAZILIAN",code:"pt-BR",flag:"pt-BR"},"pt-PT":{title:"Portuguese",translation:"TOOLBAR.PORTUGUESE",code:"pt-PT",flag:"pt-PT"},ru:{title:"Russian",translation:"TOOLBAR.RUSSIAN",code:"ru",flag:"ru"},sv:{title:"Swedish",translation:"TOOLBAR.SWEDISH",code:"sv",flag:"sv"},tr:{title:"Turkish",translation:"TOOLBAR.TURKISH",code:"tr",flag:"tr"},"zh-CN":{title:"ChineseSimplified",translation:"TOOLBAR.CHINESESIMPLIFIED",code:"zh-CN",flag:"zh-CN"},"zh-TW":{title:"ChineseTraditional",translation:"TOOLBAR.CHINESETRADITIONAL",code:"zh-TW",flag:"zh-TW"}};var T=["ar","fa","he"];function I(e){S.voiceQueues=e?_.keyBy(e.rows?e.rows:[],"id"):{}}function C(){S.promise=f.user.getQueues(S.query,I).$promise}function O(e){return v.logout(e).then(function(){return h.disconnect(),n.$broadcast("webrtc::logout"),a.go("app.login")}).catch(function(e){console.error(e)})}function x(e,t){c.show({controller:"ChangePasswordController",controllerAs:"vm",templateUrl:"app/toolbar/changepassword/changepassword.html",parent:angular.element(m.body),targetEvent:e,clickOutsideToClose:!t,locals:{user:S.user,setting:A,reset:t}})}S.toggleSidenav=function(e){i(e).toggle()},S.logout=O,S.changeLanguage=function(e){if(!S.languages.hasOwnProperty(e.code)){return void l.show({template:'<md-toast id="language-message" layout="column" layout-align="center start"><div class="md-toast-content">Motion supports multiple translations through angular-translate module, but currently we do not support the selected language. If you want to help us, send us a message.</div></md-toast>',hideDelay:7e3,position:"top right",parent:"#content"})}S.selectedLanguage=e,u.put("motion.language",e.code),r.use(e.code),"app.callysquare.projects.edit"===a.current.name&&d.location.reload();0<=T.indexOf(e.code)?p.info({title:r.instant("TOOLBAR.CHANGE_LANGUAGE_TITLE"),msg:r.instant("TOOLBAR.CHANGE_LANGUAGE_MESSAGE")}):t.$parent.$parent.vm.direction="ltr"},S.setUserStatus=function(e){S.userStatus=e},S.toggleHorizontalMobileMenu=function(){S.bodyEl.toggleClass("ms-navigation-horizontal-mobile-menu-active")},S.toggleMsNavigationFolded=function(){g.toggleFolded()},S.search=function(t){for(var e=[],n=g.getFlatNavigation(),a=s.defer(),i=0;i<n.length;i++)n[i].uisref&&e.push(n[i]);t&&(e=e.filter(function(e){if(-1<angular.lowercase(e.title).search(angular.lowercase(t)))return!0}));return o(function(){a.resolve(e)},1e3),a.promise},S.searchResultClick=function(e){e.uisref&&(e.stateParams?a.go(e.state,e.stateParams):a.go(e.state))},S.openSettings=function(e){n.$broadcast("webrtc::settings")},S.changePassword=x,S.isAgent=function(){return v.getCurrentUser()&&v.hasRole("agent")},S.onUserUpdate=function(e){if(e.id===S.user.id)if("agent"===e.role&&_.isBoolean(e.online)&&!e.online)if(0!==S.user.showWebBar){var t=c.confirm().title(r.instant("TOOLBAR.WARNING")+"!").textContent(r.instant("TOOLBAR.SOMEONE_LOGGED_YOU_OUT")).ariaLabel(r.instant("TOOLBAR.WARNING")+"!").ok(r.instant("TOOLBAR.STAY_LOGGED")).cancel("Logout");c.show(t).then(function(){v.queueLogin()}).catch(function(e){O(!0)}).finally(function(){_.merge(S.user,e),v.updateCurrentUser(S.user)})}else O(!0),_.merge(S.user,e),v.updateCurrentUser(S.user);else _.merge(S.user,e),v.updateCurrentUser(S.user)},S.onUserCalled=function(e){2===S.currentUser.showWebBar&&"agent"===S.currentUser.role&&S.currentUser.name===e.membername&&p.info({title:"WebRTC Popup",msg:"<div>                    <span>Call from: "+e.calleridnum+"</span><br>                    <span>Queue: "+e.queue+"</span><br>                    <span>Extra: "+(e.variables&&e.variables.extravar?e.variables.extravar:"Not defined")+"</span><br>                    </div>",showClose:!0,timeout:1e4,html:!0})},S.pause=function(e){return f.user.pause({id:S.user.id,type:e||"DEFAULT PAUSE"}).$promise.catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:PAUSEUSER",msg:e.status?JSON.stringify(e.data):e.toString()})})},S.unpause=function(){return f.user.unpause({id:S.user.id}).$promise.catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:UNPAUSEUSER",msg:e.status?JSON.stringify(e.data):e.toString()})})},S.preview=function(t){return S.disable=!0,f.cmHopper.getPreview().$promise.then(function(e){_.isNil(e)||_.isNil(e.Queue)||!e.Queue.dialActive?p.info({title:"PREVIEW",msg:"CAMPAIGN NOT ACTIVE"}):c.show({controller:"PreviewDialogController",controllerAs:"vm",templateUrl:"app/toolbar/preview/dialog.html",parent:angular.element(m.body),targetEvent:t,clickOutsideToClose:!0,locals:{preview:e},resolve:{customFields:["apiResolver",function(e){return e.resolve("cmCustomField@get",{nolimit:!0})}]}})}).catch(function(e){if(404===e.status)p.info({title:"PREVIEW",msg:"CONTACT NOT AVAILABLE"});else if(e.data&&e.data.errors&&e.data.errors.length){S.errors=e.data.errors||[{message:e.toString(),type:"api.openchannelMessage.accept"}];for(var t=0;t<e.data.errors.length;t+=1)p.error({title:e.data.errors[t].type,msg:e.data.errors[t].message})}else p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"api.openchannelMessage.accept",msg:e.data?JSON.stringify(e.data.message):e.toString()})}).finally(function(){S.disable=!1})},S.getLogo=function(){return S.setting.defaultHeaderWhiteLabel?"xCALLY Motion":S.setting.headerWhiteLabel},S.userIsNotPhonebar=function(){return"admin"===S.currentUser.role||"user"===S.currentUser.role||"agent"===S.currentUser.role&&0!==S.currentUser.showWebBar},S.onInternalMessageSave=function(e){e.ToId!==S.currentUser.id||e.ChatGroupId||(S.unreadTotalMessages+=1);e.ToId===S.currentUser.id&&e.FromId!==S.currentUser.id&&!e.read&&e.ChatGroupId&&S.unreadTotalGroupMessages++},S.onInternalMessageUpdate=function(e){e.ToId===S.currentUser.id&&e.read&&0<S.unreadTotalMessages&&!e.ChatGroupId&&(S.unreadTotalMessages-=1);e.ToId===S.currentUser.id&&e.read&&e.ChatGroupId&&0<S.unreadTotalGroupMessages&&S.unreadTotalGroupMessages--},S.onUserVoiceQueue=function(e){_.toInteger(e.UserId)===v.getCurrentUser().id&&C()},S.onVoiceQueue=function(e){C()},h.connect(),h.on("user:update",S.onUserUpdate),h.on("user:called",S.onUserCalled),h.on("chatInternalMessage:save",S.onInternalMessageSave),h.on("chatInternalMessage:update",S.onInternalMessageUpdate),h.on("userVoiceQueue:save",S.onUserVoiceQueue),h.on("voiceQueue:save",S.onVoiceQueue),h.on("userVoiceQueue:remove",S.onUserVoiceQueue),h.on("voiceQueue:remove",S.onVoiceQueue),h.on("voiceQueue:update",S.onVoiceQueue),function(){S.user=v.getCurrentUser(),S.conf.ha1=S.user.md5secret,S.conf.id=S.user.id,S.conf.name=S.user.name,S.conf.fullname=S.user.fullname,S.conf.internal=S.user.internal,S.conf.recording=S.user.phoneBarEnableRecording,S.conf.autoAnswer=S.user.phoneBarAutoAnswer,S.conf.enableSettings=S.user.phoneBarEnableSettings,S.conf.enableDtmfTone=S.user.phoneBarEnableDtmfTone,S.conf.autoAnswerDelay=S.user.phoneBarAutoAnswerDelay,S.userStatus=S.userStatusOptions[0];var e=u.get("motion.language");e&&S.languages.hasOwnProperty(e)?S.selectedLanguage=S.languages[e]:S.selectedLanguage=S.languages[r.preferredLanguage()];if(f.pause.get({fields:"name",nolimit:!0}).$promise.then(function(e){S.pauses=e.rows?e.rows:[]}).catch(function(e){p.error({title:e.status?"API:"+e.status+" - "+e.statusText:"SYSTEM:GETPAUSES",msg:e.status?JSON.stringify(e.data):e.toString()})}),S.setting.securePassword)if(S.user.passwordResetAt){var t=moment(S.user.passwordResetAt).add(S.setting.passwordExpiresDays||90,"day");moment().isAfter(t)?x(null,!0):moment().add(15,"day").isAfter(t)&&p.warning({title:r.instant("TOOLBAR.WARNING")+"!",msg:r.instant("TOOLBAR.PASSWORD_EXPIRE_REMAINING_DAYS")+": "+Math.ceil(t.diff(moment(),"days",!0)),timeout:2e4})}else x(null,!0)}(),C(),f.chatInternalMessage.get({fields:"FromId",ToId:S.currentUser.id,read:!1,nolimit:!0}).$promise.then(function(e){S.unreadTotalMessages=e.rows.length}),t.$on("$destroy",function(){h.removeAllListeners("user:called"),h.removeAllListeners("user:update"),h.removeAllListeners("chatInternalMessage:save"),h.removeAllListeners("chatInternalMessage:update"),h.removeAllListeners("userVoiceQueue:save"),h.removeAllListeners("voiceQueue:save"),h.removeAllListeners("userVoiceQueue:remove"),h.removeAllListeners("voiceQueue:remove"),h.removeAllListeners("voiceQueue:update"),y&&(E.cancel(y),y=null)})}e.$inject=["$scope","$rootScope","$q","$state","$timeout","$location","$mdSidenav","$translate","$mdToast","$window","$mdDialog","$document","$cookies","toasty","msNavigationService","Auth","socket","api","license","setting","$interval"],angular.module("app.toolbar").controller("ToolbarController",e)}();var urlParams=function(e){var t=new Object,n=e.lastIndexOf("?");if(0<n)for(var a=e.substring(n+1).split("&"),i=0;i<a.length;i++)0<(n=a[i].indexOf("="))&&(t[a[i].substring(0,n)]=a[i].substring(n+1));return t}(window.location.href),t0=new Date,MAX_REQUEST_SIZE=10485760,MAX_WIDTH=12e3,MAX_HEIGHT=12e3,EXPORT_URL="http://exp.draw.io/ImageExport2/export",SHARE_HOST="http://localhost:3000",SAVE_URL="api/square/projects/",VARIABLE_URL="/api/variables",STENCIL_PATH="/assets/plugins/square/stencils",SHAPES_PATH="/assets/plugins/square/shapes",IMAGE_PATH="/assets/plugins/square/images",STYLE_PATH="/assets/plugins/square/styles",CSS_PATH="/assets/plugins/square/styles",OPEN_FORM="api/square/projects/open",TEMPLATE_PATH="/assets/plugins/square/templates",RESOURCES_PATH="/assets/plugins/square/resources",RESOURCE_BASE=RESOURCES_PATH+"/grapheditor",CRUD_PERMISSIONS={readOnly:!1,canEdit:!1,canDelete:!1},tapAndHoldStartsConnection=!0,showConnectorImg=!0,mxLoadResources=!1,mxLanguages=["it","fr","ko","es","sv","ru","de","ja","zh-CN","zh-TW","nl","fi","da","pt-PT","no","hi","tr","fa"],mxLanguage="en",match=document.cookie.match(new RegExp("(^| )motion.language=([^;]+)"));match&&mxLanguages.includes(match[2])&&(mxLanguage=match[2]);var mxBasePath="assets/plugins/mxgraph",mxClient={VERSION:"2.0.0.0",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&navigator.userAgent.indexOf("MSIE")<0,IS_OP:0<=navigator.userAgent.indexOf("Opera/"),IS_OT:navigator.userAgent.indexOf("Presto/2.4.")<0&&navigator.userAgent.indexOf("Presto/2.3.")<0&&navigator.userAgent.indexOf("Presto/2.2.")<0&&navigator.userAgent.indexOf("Presto/2.1.")<0&&navigator.userAgent.indexOf("Presto/2.0.")<0&&navigator.userAgent.indexOf("Presto/1.")<0,IS_SF:0<=navigator.userAgent.indexOf("AppleWebKit/")&&navigator.userAgent.indexOf("Chrome/")<0,IS_GC:0<=navigator.userAgent.indexOf("Chrome/"),IS_MT:0<=navigator.userAgent.indexOf("Firefox/")&&navigator.userAgent.indexOf("Firefox/1.")<0&&navigator.userAgent.indexOf("Firefox/2.")<0||0<=navigator.userAgent.indexOf("Iceweasel/")&&navigator.userAgent.indexOf("Iceweasel/1.")<0&&navigator.userAgent.indexOf("Iceweasel/2.")<0||0<=navigator.userAgent.indexOf("SeaMonkey/")&&navigator.userAgent.indexOf("SeaMonkey/1.")<0||0<=navigator.userAgent.indexOf("Iceape/")&&navigator.userAgent.indexOf("Iceape/1.")<0,IS_SVG:0<=navigator.userAgent.indexOf("Firefox/")||0<=navigator.userAgent.indexOf("Iceweasel/")||0<=navigator.userAgent.indexOf("Seamonkey/")||0<=navigator.userAgent.indexOf("Iceape/")||0<=navigator.userAgent.indexOf("Galeon/")||0<=navigator.userAgent.indexOf("Epiphany/")||0<=navigator.userAgent.indexOf("AppleWebKit/")||0<=navigator.userAgent.indexOf("Gecko/")||0<=navigator.userAgent.indexOf("Opera/"),NO_FO:0<=navigator.userAgent.indexOf("Firefox/1.")||0<=navigator.userAgent.indexOf("Iceweasel/1.")||0<=navigator.userAgent.indexOf("Firefox/2.")||0<=navigator.userAgent.indexOf("Iceweasel/2.")||0<=navigator.userAgent.indexOf("SeaMonkey/1.")||0<=navigator.userAgent.indexOf("Iceape/1.")||0<=navigator.userAgent.indexOf("Camino/1.")||0<=navigator.userAgent.indexOf("Epiphany/2.")||0<=navigator.userAgent.indexOf("Opera/")||0<=navigator.userAgent.indexOf("MSIE")||0<=navigator.userAgent.indexOf("Mozilla/2."),IS_VML:"MICROSOFT INTERNET EXPLORER"==navigator.appName.toUpperCase(),IS_MAC:0<navigator.userAgent.toUpperCase().indexOf("MACINTOSH"),IS_TOUCH:0<navigator.userAgent.toUpperCase().indexOf("IPAD")||0<navigator.userAgent.toUpperCase().indexOf("IPOD")||0<navigator.userAgent.toUpperCase().indexOf("IPHONE")||0<navigator.userAgent.toUpperCase().indexOf("ANDROID"),IS_LOCAL:document.location.href.indexOf("http://")<0&&document.location.href.indexOf("https://")<0,isBrowserSupported:function(){return mxClient.IS_VML||mxClient.IS_SVG},link:function(e,t,n){if(n=n||document,mxClient.IS_IE6)n.write('<link rel="'+e+'" href="'+t+'" charset="ISO-8859-1" type="text/css"/>');else{var a=n.createElement("link");a.setAttribute("rel",e),a.setAttribute("href",t),a.setAttribute("charset","ISO-8859-1"),a.setAttribute("type","text/css"),n.getElementsByTagName("head")[0].appendChild(a)}},include:function(e){document.write('<script src="'+e+'"><\/script>')},dispose:function(){for(var e=0;e<mxEvent.objects.length;e++)null!=mxEvent.objects[e].mxListenerList&&mxEvent.removeAllListeners(mxEvent.objects[e])}};if(mxClient.IS_OP&&mxClient.IS_OT?mxClient.CSS_PREFIX="O":mxClient.IS_SF||mxClient.IS_GC?mxClient.CSS_PREFIX="Webkit":mxClient.IS_MT?mxClient.CSS_PREFIX="Moz":mxClient.IS_IE&&9<=document.documentMode&&(mxClient.CSS_PREFIX="ms"),void 0===mxLoadResources&&(mxLoadResources=!0),"undefined"==typeof mxResourceExtension&&(mxResourceExtension=".txt"),"undefined"==typeof mxLoadStylesheets&&(mxLoadStylesheets=!0),void 0!==mxBasePath&&0<mxBasePath.length?("/"==mxBasePath.substring(mxBasePath.length-1)&&(mxBasePath=mxBasePath.substring(0,mxBasePath.length-1)),mxClient.basePath=mxBasePath):mxClient.basePath=".","undefined"!=typeof mxImageBasePath&&0<mxImageBasePath.length?("/"==mxImageBasePath.substring(mxImageBasePath.length-1)&&(mxImageBasePath=mxImageBasePath.substring(0,mxImageBasePath.length-1)),mxClient.imageBasePath=mxImageBasePath):mxClient.imageBasePath=mxClient.basePath+"/images",mxClient.language=void 0!==mxLanguage?mxLanguage:mxClient.IS_IE?navigator.userLanguage:navigator.language,mxClient.defaultLanguage="undefined"!=typeof mxDefaultLanguage?mxDefaultLanguage:"en",mxLoadStylesheets&&mxClient.link("stylesheet",mxClient.basePath+"/css/common.css"),void 0!==mxLanguages&&(mxClient.languages=mxLanguages),mxClient.IS_IE){if(9<=document.documentMode)mxClient.IS_VML=!1,mxClient.IS_SVG=!0;else{8==document.documentMode?(document.namespaces.add(mxClient.VML_PREFIX,"urn:schemas-microsoft-com:vml","#default#VML"),document.namespaces.add(mxClient.OFFICE_PREFIX,"urn:schemas-microsoft-com:office:office","#default#VML")):(document.namespaces.add(mxClient.VML_PREFIX,"urn:schemas-microsoft-com:vml"),document.namespaces.add(mxClient.OFFICE_PREFIX,"urn:schemas-microsoft-com:office:office"));var ss=document.createStyleSheet();ss.cssText="v\\:*{behavior:url(#default#VML)}o\\:*{behavior:url(#default#VML)}",mxLoadStylesheets&&mxClient.link("stylesheet",mxClient.basePath+"/css/explorer.css")}window.attachEvent("onunload",mxClient.dispose)}var mxLog={consoleName:"Console",TRACE:!1,DEBUG:!0,WARN:!0,buffer:"",init:function(){if(null==mxLog.window&&null!=document.body){var e=mxLog.consoleName+" - mxGraph "+mxClient.VERSION,t=document.createElement("table");t.setAttribute("width","100%"),t.setAttribute("height","100%");var n=document.createElement("tbody"),a=document.createElement("tr"),i=document.createElement("td");if(i.style.verticalAlign="top",mxLog.textarea=document.createElement("textarea"),mxLog.textarea.setAttribute("readOnly","true"),mxLog.textarea.style.height="100%",mxLog.textarea.style.resize="none",mxLog.textarea.value=mxLog.buffer,mxLog.textarea.style.width=mxClient.IS_NS&&"BackCompat"!=document.compatMode?"99%":"100%",i.appendChild(mxLog.textarea),a.appendChild(i),n.appendChild(a),a=document.createElement("tr"),mxLog.td=document.createElement("td"),mxLog.td.style.verticalAlign="top",mxLog.td.setAttribute("height","30px"),a.appendChild(mxLog.td),n.appendChild(a),t.appendChild(n),mxLog.addButton("Info",function(e){mxLog.info()}),mxLog.addButton("DOM",function(e){e=mxUtils.getInnerHtml(document.body),mxLog.debug(e)}),mxLog.addButton("Trace",function(e){mxLog.TRACE=!mxLog.TRACE,mxLog.TRACE?mxLog.debug("Tracing enabled"):mxLog.debug("Tracing disabled")}),mxLog.addButton("Copy",function(e){try{mxUtils.copy(mxLog.textarea.value)}catch(e){mxUtils.alert(e)}}),mxLog.addButton("Show",function(e){try{mxUtils.popup(mxLog.textarea.value)}catch(e){mxUtils.alert(e)}}),mxLog.addButton("Clear",function(e){mxLog.textarea.value=""}),a=n=0,a="number"==typeof window.innerWidth?(n=window.innerHeight,window.innerWidth):(n=document.documentElement.clientHeight||document.body.clientHeight,document.body.clientWidth),mxLog.window=new mxWindow(e,t,Math.max(0,a-320),Math.max(0,n-210),300,160),mxLog.window.setMaximizable(!0),mxLog.window.setScrollable(!1),mxLog.window.setResizable(!0),mxLog.window.setClosable(!0),mxLog.window.destroyOnClose=!1,(mxClient.IS_NS||mxClient.IS_IE)&&!mxClient.IS_GC&&!mxClient.IS_SF&&"BackCompat"!=document.compatMode){var s=mxLog.window.getElement();e=function(e,t){mxLog.textarea.style.height=Math.max(0,s.offsetHeight-70)+"px"};mxLog.window.addListener(mxEvent.RESIZE_END,e),mxLog.window.addListener(mxEvent.MAXIMIZE,e),mxLog.window.addListener(mxEvent.NORMALIZE,e),mxLog.textarea.style.height="92px"}}},info:function(){mxLog.writeln(mxUtils.toString(navigator))},addButton:function(e,t){var n=document.createElement("button");mxUtils.write(n,e),mxEvent.addListener(n,"click",t),mxLog.td.appendChild(n)},isVisible:function(){return null!=mxLog.window&&mxLog.window.isVisible()},show:function(){mxLog.setVisible(!0)},setVisible:function(e){null==mxLog.window&&mxLog.init(),null!=mxLog.window&&mxLog.window.setVisible(e)},enter:function(e){if(mxLog.TRACE)return mxLog.writeln("Entering "+e),(new Date).getTime()},leave:function(e,t){if(mxLog.TRACE){var n=0!=t?" ("+((new Date).getTime()-t)+" ms)":"";mxLog.writeln("Leaving "+e+n)}},debug:function(){mxLog.DEBUG&&mxLog.writeln.apply(this,arguments)},warn:function(){mxLog.WARN&&mxLog.writeln.apply(this,arguments)},write:function(){for(var e="",t=0;t<arguments.length;t++)e+=arguments[t],t<arguments.length-1&&(e+=" ");null!=mxLog.textarea?(mxLog.textarea.value+=e,0<=navigator.userAgent.indexOf("Presto/2.5")&&(mxLog.textarea.style.visibility="hidden",mxLog.textarea.style.visibility="visible"),mxLog.textarea.scrollTop=mxLog.textarea.scrollHeight):mxLog.buffer+=e},writeln:function(){for(var e="",t=0;t<arguments.length;t++)e+=arguments[t],t<arguments.length-1&&(e+=" ");mxLog.write(e+"\n")}},mxObjectIdentity={FIELD_NAME:"mxObjectId",counter:0,get:function(e){if("object"==typeof e&&null==e[mxObjectIdentity.FIELD_NAME]){var t=mxUtils.getFunctionName(e.constructor);e[mxObjectIdentity.FIELD_NAME]=t+"#"+mxObjectIdentity.counter++}return e[mxObjectIdentity.FIELD_NAME]},clear:function(e){"object"==typeof e&&delete e[mxObjectIdentity.FIELD_NAME]}};function mxDictionary(){this.clear()}mxDictionary.prototype.map=null,mxDictionary.prototype.clear=function(){this.map={}},mxDictionary.prototype.get=function(e){return e=mxObjectIdentity.get(e),this.map[e]},mxDictionary.prototype.put=function(e,t){var n=mxObjectIdentity.get(e),a=this.map[n];return this.map[n]=t,a},mxDictionary.prototype.remove=function(e){e=mxObjectIdentity.get(e);var t=this.map[e];return delete this.map[e],t},mxDictionary.prototype.getKeys=function(){var e,t=[];for(e in this.map)t.push(e);return t},mxDictionary.prototype.getValues=function(){var e,t=[];for(e in this.map)t.push(this.map[e]);return t},mxDictionary.prototype.visit=function(e){for(var t in this.map)e(t,this.map[t])};var mxResources={resources:[],extension:mxResourceExtension,resourcesEncoded:!1,loadDefaultBundle:!0,loadSpecialBundle:!0,isLanguageSupported:function(e){return null==mxClient.languages||0<=mxUtils.indexOf(mxClient.languages,e)},getDefaultBundle:function(e,t){return mxResources.loadDefaultBundle||!mxResources.isLanguageSupported(t)?e+mxResources.extension:null},getSpecialBundle:function(e,t){if(null==mxClient.languages||!this.isLanguageSupported(t)){var n=t.indexOf("-");0<n&&(t=t.substring(0,n))}return mxResources.loadSpecialBundle&&mxResources.isLanguageSupported(t)&&t!=mxClient.defaultLanguage?e+"_"+t+mxResources.extension:null},add:function(e,t){if((t=null!=t?t:mxClient.language.toLowerCase())!=mxConstants.NONE){var n=mxResources.getDefaultBundle(e,t);if(null!=n)try{var a=mxUtils.load(n);a.isReady()&&mxResources.parse(a.getText())}catch(e){}if(null!=(n=mxResources.getSpecialBundle(e,t)))try{(a=mxUtils.load(n)).isReady()&&mxResources.parse(a.getText())}catch(e){}}},parse:function(e){if(null!=e){e=e.split("\n");for(var t=0;t<e.length;t++)if("#"!=e[t].charAt(0)){var n=e[t].indexOf("=");if(0<n){var a=e[t].substring(0,n),i=e[t].length;13==e[t].charCodeAt(i-1)&&i--,n=e[t].substring(n+1,i),this.resourcesEncoded?(n=n.replace(/\\(?=u[a-fA-F\d]{4})/g,"%"),mxResources.resources[a]=unescape(n)):mxResources.resources[a]=n}}}},get:function(e,t,n){if(null==(e=mxResources.resources[e])&&(e=n),null!=e&&null!=t){n=[];for(var a=null,i=0;i<e.length;i++){var s=e.charAt(i);"{"==s?a="":null!=a&&"}"==s?(0<=(a=parseInt(a)-1)&&a<t.length&&n.push(t[a]),a=null):null!=a?a+=s:n.push(s)}e=n.join("")}return e}};function mxPoint(e,t){this.x=null!=e?e:0,this.y=null!=t?t:0}function mxRectangle(e,t,n,a){mxPoint.call(this,e,t),this.width=null!=n?n:0,this.height=null!=a?a:0}mxPoint.prototype.x=null,mxPoint.prototype.y=null,mxPoint.prototype.equals=function(e){return e.x==this.x&&e.y==this.y},mxPoint.prototype.clone=function(){return mxUtils.clone(this)},mxRectangle.prototype=new mxPoint,mxRectangle.prototype.constructor=mxRectangle,mxRectangle.prototype.width=null,mxRectangle.prototype.height=null,mxRectangle.prototype.setRect=function(e,t,n,a){this.x=e,this.y=t,this.width=n,this.height=a},mxRectangle.prototype.getCenterX=function(){return this.x+this.width/2},mxRectangle.prototype.getCenterY=function(){return this.y+this.height/2},mxRectangle.prototype.add=function(e){if(null!=e){var t=Math.min(this.x,e.x),n=Math.min(this.y,e.y),a=Math.max(this.x+this.width,e.x+e.width);e=Math.max(this.y+this.height,e.y+e.height),this.x=t,this.y=n,this.width=a-t,this.height=e-n}},mxRectangle.prototype.grow=function(e){this.x-=e,this.y-=e,this.width+=2*e,this.height+=2*e},mxRectangle.prototype.getPoint=function(){return new mxPoint(this.x,this.y)},mxRectangle.prototype.equals=function(e){return e.x==this.x&&e.y==this.y&&e.width==this.width&&e.height==this.height};var mxEffects={animateChanges:function(l,d,c){var m=0,u=function(){for(var e=!1,t=0;t<d.length;t++){var n=d[t];if(n instanceof mxGeometryChange||n instanceof mxTerminalChange||n instanceof mxValueChange||n instanceof mxChildChange||n instanceof mxStyleChange){var a=l.getView().getState(n.cell||n.child,!1);if(null!=a)if(e=!0,n.constructor!=mxGeometryChange||l.model.isEdge(n.cell))mxUtils.setOpacity(a.shape.node,100*m/10);else{var i=l.getView().scale,s=(n.geometry.x-n.previous.x)*i,o=(n.geometry.y-n.previous.y)*i,r=(n.geometry.width-n.previous.width)*i;i=(n.geometry.height-n.previous.height)*i;0==m?(a.x-=s,a.y-=o,a.width-=r,a.height-=i):(a.x+=s/10,a.y+=o/10,a.width+=r/10,a.height+=i/10),l.cellRenderer.redraw(a),mxEffects.cascadeOpacity(l,n.cell,100*m/10)}}}m<10&&e?(m++,window.setTimeout(u,p)):null!=c&&c()},p=30;u()},cascadeOpacity:function(e,t,n){for(var a=e.model.getChildCount(t),i=0;i<a;i++){var s=e.model.getChildAt(t,i),o=e.getView().getState(s);null!=o&&(mxUtils.setOpacity(o.shape.node,n),mxEffects.cascadeOpacity(e,s,n))}if(null!=(t=e.model.getEdges(t)))for(i=0;i<t.length;i++)null!=(a=e.getView().getState(t[i]))&&mxUtils.setOpacity(a.shape.node,n)},fadeOut:function(e,t,n,a,i,s){a=a||40,i=i||30;var o=t||100;if(mxUtils.setOpacity(e,o),s||null==s){var r=function(){o=Math.max(o-a,0),mxUtils.setOpacity(e,o),0<o?window.setTimeout(r,i):(e.style.visibility="hidden",n&&e.parentNode&&e.parentNode.removeChild(e))};window.setTimeout(r,i)}else e.style.visibility="hidden",n&&e.parentNode&&e.parentNode.removeChild(e)}},mxUtils={errorResource:"none"!=mxClient.language?"error":"",closeResource:"none"!=mxClient.language?"close":"",errorImage:mxClient.imageBasePath+"/error.gif",removeCursors:function(e){if(null!=e.style&&(e.style.cursor=""),null!=(e=e.childNodes))for(var t=e.length,n=0;n<t;n+=1)mxUtils.removeCursors(e[n])},getCurrentStyle:mxClient.IS_IE?function(e){return null!=e?e.currentStyle:null}:function(e){return null!=e?window.getComputedStyle(e,""):null},hasScrollbars:function(e){return null!=(e=mxUtils.getCurrentStyle(e))&&("scroll"==e.overflow||"auto"==e.overflow)},bind:function(e,t){return function(){return t.apply(e,arguments)}},eval:function(a){var b=null;if(0<=a.indexOf("function"))try{eval("var _mxJavaScriptExpression="+a),b=_mxJavaScriptExpression,_mxJavaScriptExpression=null}catch(e){mxLog.warn(e.message+" while evaluating "+a)}else try{b=eval(a)}catch(e){mxLog.warn(e.message+" while evaluating "+a)}return b},findNode:function(e,t,n){var a=e.getAttribute(t);if(null!=a&&a==n)return e;for(e=e.firstChild;null!=e;){if(null!=(a=mxUtils.findNode(e,t,n)))return a;e=e.nextSibling}return null},findNodeByAttribute:9<=document.documentMode?function(e,t,n){var a=null;if(null!=e)if(e.nodeType==mxConstants.NODETYPE_ELEMENT&&e.getAttribute(t)==n)a=e;else for(e=e.firstChild;null!=e&&null==a;)a=mxUtils.findNodeByAttribute(e,t,n),e=e.nextSibling;return a}:mxClient.IS_IE?function(e,t,n){return null==e?null:e.ownerDocument.selectSingleNode("//*[@"+t+"='"+n+"']")}:function(e,t,n){return null==e?null:e.ownerDocument.evaluate("//*[@"+t+"='"+n+"']",e.ownerDocument,null,XPathResult.ANY_TYPE,null).iterateNext()},getFunctionName:function(e){var t=null;if(null!=e)if(null!=e.name)t=e.name;else{for(e=e.toString(),t=9;" "==e.charAt(t);)t++;var n=e.indexOf("(",t);t=e.substring(t,n)}return t},indexOf:function(e,t){if(null!=e&&null!=t)for(var n=0;n<e.length;n++)if(e[n]==t)return n;return-1},remove:function(e,t){var n=null;if("object"==typeof t)for(var a=mxUtils.indexOf(t,e);0<=a;)t.splice(a,1),n=e,a=mxUtils.indexOf(t,e);for(var i in t)t[i]==e&&(delete t[i],n=e);return n},isNode:function(e,t,n,a){return!(null==e||isNaN(e.nodeType)||null!=t&&e.nodeName.toLowerCase()!=t.toLowerCase())&&(null==n||e.getAttribute(n)==a)},getChildNodes:function(e,t){t=t||mxConstants.NODETYPE_ELEMENT;for(var n=[],a=e.firstChild;null!=a;)a.nodeType==t&&n.push(a),a=a.nextSibling;return n},createXmlDocument:function(){var e=null;return document.implementation&&document.implementation.createDocument?e=document.implementation.createDocument("","",null):window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLDOM")),e},parseXml:mxClient.IS_IE&&(void 0===document.documentMode||document.documentMode<9)?function(e){var t=mxUtils.createXmlDocument();return t.async="false",t.loadXML(e),t}:function(e){return(new DOMParser).parseFromString(e,"text/xml")},clearSelection:document.selection?function(){document.selection.empty()}:window.getSelection?function(){window.getSelection().removeAllRanges()}:void 0,getPrettyXml:function(e,t,n){var a=[];if(null!=e)if(t=t||"  ",n=n||"",e.nodeType==mxConstants.NODETYPE_TEXT)a.push(e.nodeValue);else{a.push(n+"<"+e.nodeName);var i=e.attributes;if(null!=i)for(var s=0;s<i.length;s++){var o=mxUtils.htmlEntities(i[s].nodeValue);a.push(" "+i[s].nodeName+'="'+o+'"')}if(null!=(i=e.firstChild)){for(a.push(">\n");null!=i;)a.push(mxUtils.getPrettyXml(i,t,n+t)),i=i.nextSibling;a.push(n+"</"+e.nodeName+">\n")}else a.push("/>\n")}return a.join("")},removeWhitespace:function(e,t){for(var n=t?e.previousSibling:e.nextSibling;null!=n&&n.nodeType==mxConstants.NODETYPE_TEXT;){var a=t?n.previousSibling:n.nextSibling,i=mxUtils.getTextContent(n);0==mxUtils.trim(i).length&&n.parentNode.removeChild(n),n=a}},htmlEntities:function(e,t){return e=(e=(e=(e=(e=(e||"").replace(/&/g,"&amp;")).replace(/"/g,"&quot;")).replace(/\'/g,"&#39;")).replace(/</g,"&lt;")).replace(/>/g,"&gt;"),(null==t||t)&&(e=e.replace(/\n/g,"&#xa;")),e},isVml:function(e){return null!=e&&"urn:schemas-microsoft-com:vml"==e.tagUrn},getXml:function(e,t){var n="";return null!=e&&(n=null==(n=e.xml)?e.innerHTML?e.innerHTML:(new XMLSerializer).serializeToString(e):n.replace(/\r\n\t[\t]*/g,"").replace(/>\r\n/g,">").replace(/\r\n/g,"\n")),n.replace(/\n/g,t||"&#xa;")},getTextContent:function(e){var t="";return null!=e&&(null!=e.firstChild&&(e=e.firstChild),t=e.nodeValue||""),t},getInnerHtml:mxClient.IS_IE?function(e){return null!=e?e.innerHTML:""}:function(e){return null!=e?(new XMLSerializer).serializeToString(e):""},getOuterHtml:mxClient.IS_IE?function(e){if(null==e)return"";if(null!=e.outerHTML)return e.outerHTML;var t=[];t.push("<"+e.nodeName);var n=e.attributes;if(null!=n)for(var a=0;a<n.length;a++){var i=n[a].nodeValue;null!=i&&0<i.length&&(t.push(" "),t.push(n[a].nodeName),t.push('="'),t.push(i),t.push('"'))}return 0==e.innerHTML.length?t.push("/>"):(t.push(">"),t.push(e.innerHTML),t.push("</"+e.nodeName+">")),t.join("")}:function(e){return null!=e?(new XMLSerializer).serializeToString(e):""},write:function(e,t){var n=e.ownerDocument.createTextNode(t);return null!=e&&e.appendChild(n),n},writeln:function(e,t){var n=e.ownerDocument.createTextNode(t);return null!=e&&(e.appendChild(n),e.appendChild(document.createElement("br"))),n},br:function(e,t){t=t||1;for(var n=null,a=0;a<t;a++)null!=e&&(n=e.ownerDocument.createElement("br"),e.appendChild(n));return n},button:function(e,t,n){return n=(n=null!=n?n:document).createElement("button"),mxUtils.write(n,e),mxEvent.addListener(n,"click",function(e){t(e)}),n},para:function(e,t){var n=document.createElement("p");return mxUtils.write(n,t),null!=e&&e.appendChild(n),n},addTransparentBackgroundFilter:function(e){e.style.filter+="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+mxClient.imageBasePath+"/transparent.gif', sizingMethod='scale')"},linkAction:function(e,t,n,a,i){return mxUtils.link(e,t,function(){n.execute(a)},i)},linkInvoke:function(e,t,n,a,i,s){return mxUtils.link(e,t,function(){n[a](i)},s)},link:function(e,t,n,a){var i=document.createElement("span");return i.style.color="blue",i.style.textDecoration="underline",i.style.cursor="pointer",null!=a&&(i.style.paddingLeft=a+"px"),mxEvent.addListener(i,"click",n),mxUtils.write(i,t),null!=e&&e.appendChild(i),i},fit:function(e){var t=parseInt(e.offsetLeft),n=parseInt(e.offsetWidth),a=document.body,i=document.documentElement,s=(a.scrollLeft||i.scrollLeft)+(a.clientWidth||i.clientWidth);s<t+n&&(e.style.left=Math.max(a.scrollLeft||i.scrollLeft,s-n)+"px"),t=parseInt(e.offsetTop),n=parseInt(e.offsetHeight),(s=(a.scrollTop||i.scrollTop)+Math.max(a.clientHeight||0,i.clientHeight))<t+n&&(e.style.top=Math.max(a.scrollTop||i.scrollTop,s-n)+"px")},open:function(e){if(mxClient.IS_NS){try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")}catch(e){return mxUtils.alert("Permission to read file denied."),""}var t=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);return t.initWithPath(e),t.exists()?((e=Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream)).init(t,1,4,null),(t=Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream)).init(e),t.read(t.available())):(mxUtils.alert("File not found."),"")}return e=(t=new ActiveXObject("Scripting.FileSystemObject").OpenTextFile(e,1)).readAll(),t.close(),e},save:function(e,t){if(mxClient.IS_NS){try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")}catch(e){return void mxUtils.alert("Permission to write file denied.")}var n=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);n.initWithPath(e),n.exists()||n.create(0,420);var a=Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);a.init(n,34,4,null),a.write(t,t.length),a.flush(),a.close()}else(n=new ActiveXObject("Scripting.FileSystemObject").CreateTextFile(e,!0)).Write(t),n.Close()},saveAs:function(e){var t=document.createElement("iframe");t.setAttribute("src",""),t.style.visibility="hidden",document.body.appendChild(t);try{if(mxClient.IS_NS){var n=t.contentDocument;n.open(),n.write(e),n.close();try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"),t.focus(),saveDocument(n)}catch(e){mxUtils.alert("Permission to save document denied.")}}else(n=t.contentWindow.document).write(e),n.execCommand("SaveAs",!1,document.location)}finally{document.body.removeChild(t)}},copy:function(e){if(window.clipboardData)window.clipboardData.setData("Text",e);else{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");var t=Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard);if(t){var n=Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);if(n){n.addDataFlavor("text/unicode");var a=Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);a.data=e,n.setTransferData("text/unicode",a,2*e.length),t.setData(n,null,Components.interfaces.nsIClipboard.kGlobalClipboard)}}}},load:function(e){return(e=new mxXmlRequest(e,null,"GET",!1)).send(),e},get:function(e,t,n){return new mxXmlRequest(e,null,"GET").send(t,n)},post:function(e,t,n,a){return new mxXmlRequest(e,t).send(n,a)},submit:function(e,t,n,a){return new mxXmlRequest(e,t).simulate(n,a)},loadInto:function(e,t,n){mxClient.IS_IE?t.onreadystatechange=function(){4==t.readyState&&n()}:t.addEventListener("load",n,!1),t.load(e)},getValue:function(e,t,n){return null==(e=null!=e?e[t]:null)&&(e=n),e},getNumber:function(e,t,n){return null==(e=null!=e?e[t]:null)&&(e=n||0),Number(e)},getColor:function(e,t,n){return null==(e=null!=e?e[t]:null)?e=n:e==mxConstants.NONE&&(e=null),e},clone:function(e,t,n){n=null!=n&&n;var a=null;if(null!=e&&"function"==typeof e.constructor){var i;a=new e.constructor;for(i in e)i!=mxObjectIdentity.FIELD_NAME&&(null==t||mxUtils.indexOf(t,i)<0)&&(a[i]=n||"object"!=typeof e[i]?e[i]:mxUtils.clone(e[i]))}return a},equalPoints:function(e,t){if(null==e&&null!=t||null!=e&&null==t||null!=e&&null!=t&&e.length!=t.length)return!1;if(null!=e&&null!=t)for(var n=0;n<e.length;n++)if(e[n]==t[n]||null!=e[n]&&!e[n].equals(t[n]))return!1;return!0},equalEntries:function(e,t){if(null==e&&null!=t||null!=e&&null==t||null!=e&&null!=t&&e.length!=t.length)return!1;if(null!=e&&null!=t)for(var n in e)if(e[n]!=t[n])return!1;return!0},extend:function(e,t){var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e},toString:function(e){var t,n="";for(t in e)try{if(null==e[t])n+=t+" = [null]\n";else if("function"==typeof e[t])n+=t+" => [Function]\n";else if("object"==typeof e[t])n=n+(t+" => [")+mxUtils.getFunctionName(e[t].constructor)+"]\n";else n+=t+" = "+e[t]+"\n"}catch(e){n+=t+"="+e.message}return n},toRadians:function(e){return Math.PI*e/180},arcToCurves:function(e,t,n,a,i,s,o,r,l){if(r-=e,l-=t,0===n||0===a)return h;n=Math.abs(n),a=Math.abs(a);var d=-r/2,c=-l/2,m=Math.cos(i*Math.PI/180);i=m*d+(h=Math.sin(i*Math.PI/180))*c;d=-1*h*d+m*c;r=m*(c=(s=1<(v=(c=i*i)/(g=n*n)+(p=d*d)/(A=a*a))?(n*=Math.sqrt(v),a*=Math.sqrt(v),0):(v=1,s===o&&(v=-1),v*Math.sqrt((g*A-g*p-A*c)/(g*p+A*c))))*n*d/a)-h*(p=-1*s*a*i/n)+r/2,l=h*c+m*p+l/2,s=0<=(g=Math.atan2((d-p)/a,(i-c)/n)-Math.atan2(0,1))?g:2*Math.PI+g,i=0<=(g=Math.atan2((-d-p)/a,(-i-c)/n)-Math.atan2((d-p)/a,(i-c)/n))?g:2*Math.PI+g,0==o&&0<i?i-=2*Math.PI:0!=o&&i<0&&(i+=2*Math.PI),o=2*i/Math.PI,i/=o=Math.ceil(o<0?-1*o:o),d=8/3*Math.sin(i/4)*Math.sin(i/4)/Math.sin(i/2),c=m*n,m*=a,n*=h,a*=h;for(var u=Math.cos(s),p=-d*(c*(b=Math.sin(s))+a*u),g=-d*(n*b-m*u),v=A=0,h=[],f=0;f<o;++f){s+=i;var b,A=c*(u=Math.cos(s))-a*(b=Math.sin(s))+r,E=(v=n*u+m*b+l,-d*(c*b+a*u));u=-d*(n*b-m*u);h[b=6*f]=Number(p+e),h[b+1]=Number(g+t),h[b+2]=Number(A-E+e),h[b+3]=Number(v-u+t),h[b+4]=Number(A+e),h[b+5]=Number(v+t),p=A+E,g=v+u}return h},getBoundingBox:function(e,t){var n=null;if(null!=e&&null!=t&&0!=t){var a=mxUtils.toRadians(t),i=(n=Math.cos(a),Math.sin(a)),s=new mxPoint(e.x+e.width/2,e.y+e.height/2),o=new mxPoint(e.x,e.y),r=new mxPoint((a=new mxPoint(e.x+e.width,e.y)).x,e.y+e.height),l=new mxPoint(e.x,r.y);o=mxUtils.getRotatedPoint(o,n,i,s),a=mxUtils.getRotatedPoint(a,n,i,s),r=mxUtils.getRotatedPoint(r,n,i,s),l=mxUtils.getRotatedPoint(l,n,i,s);(n=new mxRectangle(o.x,o.y,0,0)).add(new mxRectangle(a.x,a.y,0,0)),n.add(new mxRectangle(r.x,r.y,0,0)),n.add(new mxRectangle(l.x,l.y,0,0))}return n},getRotatedPoint:function(e,t,n,a){a=null!=a?a:new mxPoint;var i=e.x-a.x;return new mxPoint(i*t-(e=e.y-a.y)*n+a.x,e*t+i*n+a.y)},getPortConstraints:function(e,t,n,a){return null==(e=mxUtils.getValue(e.style,mxConstants.STYLE_PORT_CONSTRAINT,null))?a:(a=e.toString(),e=mxConstants.DIRECTION_MASK_NONE,0<=a.indexOf(mxConstants.DIRECTION_NORTH)&&(e|=mxConstants.DIRECTION_MASK_NORTH),0<=a.indexOf(mxConstants.DIRECTION_WEST)&&(e|=mxConstants.DIRECTION_MASK_WEST),0<=a.indexOf(mxConstants.DIRECTION_SOUTH)&&(e|=mxConstants.DIRECTION_MASK_SOUTH),0<=a.indexOf(mxConstants.DIRECTION_EAST)&&(e|=mxConstants.DIRECTION_MASK_EAST),e)},reversePortConstraints:function(e){return(e&mxConstants.DIRECTION_MASK_WEST)<<3|(e&mxConstants.DIRECTION_MASK_NORTH)<<1|(e&mxConstants.DIRECTION_MASK_SOUTH)>>1|(e&mxConstants.DIRECTION_MASK_EAST)>>3},findNearestSegment:function(e,t,n){var a=-1;if(0<e.absolutePoints.length)for(var i=e.absolutePoints[0],s=null,o=1;o<e.absolutePoints.length;o++){var r=e.absolutePoints[o];i=mxUtils.ptSegDistSq(i.x,i.y,r.x,r.y,t,n);(null==s||i<s)&&(s=i,a=o-1),i=r}return a},rectangleIntersectsSegment:function(e,t,n){var a=e.y,i=e.x,s=a+e.height,o=i+e.width;e=t.x;var r=n.x;if(t.x>n.x&&(e=n.x,r=t.x),o<r&&(r=o),e<i&&(e=i),r<e)return!1;i=t.y,o=n.y;var l=n.x-t.x;return 1e-7<Math.abs(l)&&(i=(n=(n.y-t.y)/l)*e+(t=t.y-n*t.x),o=n*r+t),o<i&&(t=o,o=i,i=t),s<o&&(o=s),i<a&&(i=a),!(o<i)},contains:function(e,t,n){return e.x<=t&&e.x+e.width>=t&&e.y<=n&&e.y+e.height>=n},intersects:function(e,t){var n=e.width,a=e.height,i=t.width,s=t.height;if(i<=0||s<=0||n<=0||a<=0)return!1;var o=e.x,r=e.y,l=t.x,d=t.y;s+=d,n+=o,a+=r;return((i=i+l)<l||o<i)&&(s<d||r<s)&&(n<o||l<n)&&(a<r||d<a)},intersectsHotspot:function(e,t,n,a,i,s){if(i=null!=i?i:0,s=null!=s?s:0,0<(a=null!=a?a:1)){var o=e.getCenterX(),r=e.getCenterY(),l=e.width,d=e.height,c=mxUtils.getValue(e.style,mxConstants.STYLE_STARTSIZE)*e.view.scale;return 0<c&&(mxUtils.getValue(e.style,mxConstants.STYLE_HORIZONTAL,!0)?(r=e.y+c/2,d=c):(o=e.x+c/2,l=c)),l=Math.max(i,l*a),d=Math.max(i,d*a),0<s&&(l=Math.min(l,s),d=Math.min(d,s)),a=new mxRectangle(o-l/2,r-d/2,l,d),0!=(o=mxUtils.toRadians(mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION)||0))&&(i=Math.cos(-o),s=Math.sin(-o),o=new mxPoint(e.getCenterX(),e.getCenterY()),t=(e=mxUtils.getRotatedPoint(new mxPoint(t,n),i,s,o)).x,n=e.y),mxUtils.contains(a,t,n)}return!0},getOffset:function(e,t){var n=0,a=0;if(null!=t&&t){var i=document.body,s=document.documentElement;n=n+(i.scrollLeft||s.scrollLeft),a=a+(i.scrollTop||s.scrollTop)}for(;e.offsetParent;)n+=e.offsetLeft,a+=e.offsetTop,e=e.offsetParent;return new mxPoint(n,a)},getScrollOrigin:function(e){for(var t=document.body,n=document.documentElement,a=new mxPoint(t.scrollLeft||n.scrollLeft,t.scrollTop||n.scrollTop);null!=e&&e!=t&&e!=n;)!isNaN(e.scrollLeft)&&!isNaN(e.scrollTop)&&(a.x+=e.scrollLeft,a.y+=e.scrollTop),e=e.parentNode;return a},convertPoint:function(e,t,n){var a=mxUtils.getScrollOrigin(e);return(e=mxUtils.getOffset(e)).x-=a.x,e.y-=a.y,new mxPoint(t-e.x,n-e.y)},ltrim:function(e,t){return e.replace(RegExp("^["+(t||"\\s")+"]+","g"),"")},rtrim:function(e,t){return e.replace(RegExp("["+(t||"\\s")+"]+$","g"),"")},trim:function(e,t){return mxUtils.ltrim(mxUtils.rtrim(e,t),t)},isNumeric:function(e){return null!=e&&(null==e.length||0<e.length&&e.indexOf("0x")<0&&e.indexOf("0X")<0)&&!isNaN(e)},mod:function(e,t){return(e%t+t)%t},intersection:function(e,t,n,a,i,s,o,r){var l=(r-s)*(n-e)-(o-i)*(a-t);return o=((o-i)*(t-s)-(r-s)*(e-i))/l,i=((n-e)*(t-s)-(a-t)*(e-i))/l,0<=o&&o<=1&&0<=i&&i<=1?new mxPoint(e+o*(n-e),t+o*(a-t)):null},ptSegDistSq:function(e,t,n,a,i,s){return n=(i-=e)*(n-=e)+(s-=t)*(a-=t)<=0?0:(e=(i=n-i)*n+(s=a-s)*a)<=0?0:e*e/(n*n+a*a),(i=i*i+s*s-n)<0&&(i=0),i},relativeCcw:function(e,t,n,a,i,s){return 0==(e=(i-=e)*(a-=t)-(s-=t)*(n-=e))&&(0<(e=i*n+s*a)&&((e=(i-n)*n+(s-a)*a)<0&&(e=0))),e<0?-1:0<e?1:0},animateChanges:function(e,t){mxEffects.animateChanges.apply(this,arguments)},cascadeOpacity:function(e,t,n){mxEffects.cascadeOpacity.apply(this,arguments)},fadeOut:function(e,t,n,a,i,s){mxEffects.fadeOut.apply(this,arguments)},setOpacity:function(e,t){mxUtils.isVml(e)?e.style.filter=100<=t?null:"alpha(opacity="+t/5+")":mxClient.IS_IE&&(void 0===document.documentMode||document.documentMode<9)?e.style.filter=100<=t?null:"alpha(opacity="+t+")":e.style.opacity=t/100},createImage:function(e){var t=null;return mxClient.IS_IE6&&"CSS1Compat"!=document.compatMode?((t=document.createElement(mxClient.VML_PREFIX+":image")).setAttribute("src",e),t.style.borderStyle="none"):((t=document.createElement("img")).setAttribute("src",e),t.setAttribute("border","0")),t},sortCells:function(e,i){i=null==i||i;var s=new mxDictionary;return e.sort(function(e,t){var n=s.get(e);null==n&&(n=mxCellPath.create(e).split(mxCellPath.PATH_SEPARATOR),s.put(e,n));var a=s.get(t);return null==a&&(a=mxCellPath.create(t).split(mxCellPath.PATH_SEPARATOR),s.put(t,a)),0==(n=mxCellPath.compare(n,a))?0:0<n==i?1:-1}),e},getStylename:function(e){return null!=e&&(e=e.split(";")[0]).indexOf("=")<0?e:""},getStylenames:function(e){var t=[];if(null!=e){e=e.split(";");for(var n=0;n<e.length;n++)e[n].indexOf("=")<0&&t.push(e[n])}return t},indexOfStylename:function(e,t){if(null!=e&&null!=t)for(var n=e.split(";"),a=0,i=0;i<n.length;i++){if(n[i]==t)return a;a+=n[i].length+1}return-1},addStylename:function(e,t){return mxUtils.indexOfStylename(e,t)<0&&(null==e?e="":0<e.length&&";"!=e.charAt(e.length-1)&&(e+=";"),e+=t),e},removeStylename:function(e,t){var n=[];if(null!=e)for(var a=e.split(";"),i=0;i<a.length;i++)a[i]!=t&&n.push(a[i]);return n.join(";")},removeAllStylenames:function(e){var t=[];if(null!=e){e=e.split(";");for(var n=0;n<e.length;n++)0<=e[n].indexOf("=")&&t.push(e[n])}return t.join(";")},setCellStyles:function(e,t,n,a){if(null!=t&&0<t.length){e.beginUpdate();try{for(var i=0;i<t.length;i++)if(null!=t[i]){var s=mxUtils.setStyle(e.getStyle(t[i]),n,a);e.setStyle(t[i],s)}}finally{e.endUpdate()}}},setStyle:function(e,t,n){var a=null!=n&&(void 0===n.length||0<n.length);if(null==e||0==e.length)a&&(e=t+"="+n);else{var i=e.indexOf(t+"=");i<0?a&&(a=";"==e.charAt(e.length-1)?"":";",e=e+a+t+"="+n):(t=a?t+"="+n:"",n=e.indexOf(";",i),a||n++,e=e.substring(0,i)+t+(i<n?e.substring(n):""))}return e},setCellStyleFlags:function(e,t,n,a,i){if(null!=t&&0<t.length){e.beginUpdate();try{for(var s=0;s<t.length;s++)if(null!=t[s]){var o=mxUtils.setStyleFlag(e.getStyle(t[s]),n,a,i);e.setStyle(t[s],o)}}finally{e.endUpdate()}}},setStyleFlag:function(e,t,n,a){if(null==e||0==e.length)e=a||null==a?t+"="+n:t+"=0";else{var i=e.indexOf(t+"=");if(i<0)i=";"==e.charAt(e.length-1)?"":";",e=a||null==a?e+i+t+"="+n:e+i+t+"=0";else{var s=e.indexOf(";",i),o="";o=s<0?e.substring(i+t.length+1):e.substring(i+t.length+1,s),o=null==a?parseInt(o)^n:a?parseInt(o)|n:parseInt(o)&~n;e=e.substring(0,i)+t+"="+o+(0<=s?e.substring(s):"")}}return e},getAlignmentAsPoint:function(e,t){var n=0,a=0;return e==mxConstants.ALIGN_CENTER?n=-.5:e==mxConstants.ALIGN_RIGHT&&(n=-1),t==mxConstants.ALIGN_MIDDLE?a=-.5:t==mxConstants.ALIGN_BOTTOM&&(a=-1),new mxPoint(n,a)},getSizeForString:function(e,t,n){t=null!=t?t:mxConstants.DEFAULT_FONTSIZE,n=null!=n?n:mxConstants.DEFAULT_FONTFAMILY;var a=document.createElement("div");return a.style.fontFamily=n,a.style.fontSize=Math.round(t)+"px",a.style.lineHeight=Math.round(t*mxConstants.LINE_HEIGHT)+"px",a.style.position="absolute",a.style.whiteSpace="nowrap",a.style.visibility="hidden",a.style.display=mxClient.IS_QUIRKS?"inline":"inline-block",a.style.zoom="1",a.innerHTML=e,document.body.appendChild(a),e=new mxRectangle(0,0,a.offsetWidth,a.offsetHeight),document.body.removeChild(a),e},getViewXml:function(e,t,n,a,i){a=null!=a?a:0,i=null!=i?i:0,t=null!=t?t:1,null==n&&(n=[e.getModel().getRoot()]);var s=e.getView(),o=null,r=s.isEventsEnabled();s.setEventsEnabled(!1);var l=s.drawPane,d=s.overlayPane;e.dialect==mxConstants.DIALECT_SVG?(s.drawPane=document.createElementNS(mxConstants.NS_SVG,"g"),s.canvas.appendChild(s.drawPane),s.overlayPane=document.createElementNS(mxConstants.NS_SVG,"g")):(s.drawPane=s.drawPane.cloneNode(!1),s.canvas.appendChild(s.drawPane),s.overlayPane=s.overlayPane.cloneNode(!1)),s.canvas.appendChild(s.overlayPane);var c=s.getTranslate();s.translate=new mxPoint(a,i),t=new mxTemporaryCellStates(e.getView(),t,n);try{o=(new mxCodec).encode(e.getView())}finally{t.destroy(),s.translate=c,s.canvas.removeChild(s.drawPane),s.canvas.removeChild(s.overlayPane),s.drawPane=l,s.overlayPane=d,s.setEventsEnabled(r)}return o},getScaleForPageCount:function(e,t,n,a){if(e<1)return 1;a=null!=a?a:0;var i=(n=null!=n?n:mxConstants.PAGE_FORMAT_A4_PORTRAIT).width-2*a;n=n.height-2*a,a=t.getGraphBounds().clone(),t=t.getView().getScale(),a.width/=t,a.height/=t,n=(t=a.width)/a.height/(i/n),a=Math.sqrt(e);var s=Math.sqrt(n);if(n=a*s,a/=s,n<1&&e<a){var o=a/e;a=e,n/=o}for(a<1&&e<n&&(o=n/e,n=e,a/=o),o=Math.ceil(n)*Math.ceil(a),s=0;e<o;){o=Math.floor(n)/n;var r=Math.floor(a)/a;if(1==o&&(o=Math.floor(n-1)/n),1==r&&(r=Math.floor(a-1)/a),n*=o=r<o?o:r,a*=o,o=Math.ceil(n)*Math.ceil(a),10<++s)break}return i*n/t*.99999},show:function(e,t,n,a){if(n=null!=n?n:0,a=null!=a?a:0,null==t?t=window.open().document:t.open(),n=-(i=e.getGraphBounds()).x+n,a=-i.y+a,mxClient.IS_IE){for(var i="<html><head>",s=document.getElementsByTagName("base"),o=0;o<s.length;o++)i+=s[o].outerHTML;for(i+="<style>",o=0;o<document.styleSheets.length;o++)try{i+=document.styleSheets(o).cssText}catch(e){}i+="</style></head>",i+="<body>",i+=e.container.innerHTML,i+="</body>",i+="<html>",t.writeln(i),t.close(),null!=(e=t.body.getElementsByTagName("DIV")[0])&&(e.style.position="absolute",e.style.left=n+"px",e.style.top=a+"px")}else{for(t.writeln("<html"),t.writeln("<head>"),s=document.getElementsByTagName("base"),o=0;o<s.length;o++)t.writeln(mxUtils.getOuterHtml(s[o]));for(s=document.getElementsByTagName("link"),o=0;o<s.length;o++)t.writeln(mxUtils.getOuterHtml(s[o]));for(s=document.getElementsByTagName("style"),o=0;o<s.length;o++)t.writeln(mxUtils.getOuterHtml(s[o]));for(t.writeln("</head>"),t.writeln("</html>"),t.close(),null==t.body&&t.documentElement.appendChild(t.createElement("body")),t.body.style.overflow="auto",e=e.container.firstChild;null!=e;)o=e.cloneNode(!0),t.body.appendChild(o),e=e.nextSibling;null!=(e=t.getElementsByTagName("g")[0])&&(e.setAttribute("transform","translate("+n+","+a+")"),(n=e.ownerSVGElement).setAttribute("width",i.width+Math.max(i.x,0)+3),n.setAttribute("height",i.height+Math.max(i.y,0)+3))}return mxUtils.removeCursors(t.body),t},printScreen:function(e){var t=window.open();mxUtils.show(e,t.document),e=function(){t.focus(),t.print(),t.close()},mxClient.IS_GC?t.setTimeout(e,500):e()},popup:function(e,t){if(t){var n=document.createElement("div");n.style.overflow="scroll",n.style.width="636px",n.style.height="460px";var a=document.createElement("pre");a.innerHTML=mxUtils.htmlEntities(e,!1).replace(/\n/g,"<br>").replace(/ /g,"&nbsp;"),n.appendChild(a),(n=new mxWindow("Popup Window",n,document.body.clientWidth/2-320,(document.body.clientHeight||document.documentElement.clientHeight)/2-240,640,480,!1,!0)).setClosable(!0),n.setVisible(!0)}else mxClient.IS_NS?((n=window.open()).document.writeln("<pre>"+mxUtils.htmlEntities(e)+"</pre"),n.document.close()):((a=(n=window.open()).document.createElement("pre")).innerHTML=mxUtils.htmlEntities(e,!1).replace(/\n/g,"<br>").replace(/ /g,"&nbsp;"),n.document.body.appendChild(a))},alert:function(e){alert(e)},prompt:function(e,t){return prompt(e,t)},confirm:function(e){return confirm(e)},error:function(e,t,n,a){var i=document.createElement("div");i.style.padding="20px";var s=document.createElement("img");s.setAttribute("src",a||mxUtils.errorImage),s.setAttribute("valign","bottom"),s.style.verticalAlign="middle",i.appendChild(s),i.appendChild(document.createTextNode(" ")),i.appendChild(document.createTextNode(" ")),i.appendChild(document.createTextNode(" ")),mxUtils.write(i,e),e=document.body.clientWidth,a=document.body.clientHeight||document.documentElement.clientHeight;var o=new mxWindow(mxResources.get(mxUtils.errorResource)||mxUtils.errorResource,i,(e-t)/2,a/4,t,null,!1,!0);return n&&(mxUtils.br(i),t=document.createElement("p"),n=document.createElement("button"),mxClient.IS_IE?n.style.cssText="float:right":n.setAttribute("style","float:right"),mxEvent.addListener(n,"click",function(e){o.destroy()}),mxUtils.write(n,mxResources.get(mxUtils.closeResource)||mxUtils.closeResource),t.appendChild(n),i.appendChild(t),mxUtils.br(i),o.setClosable(!0)),o.setVisible(!0),o},makeDraggable:function(e,t,n,i,a,s,o,r,l,d){return(e=new mxDragSource(e,n)).dragOffset=new mxPoint(null!=a?a:0,null!=s?s:mxConstants.TOOLTIP_VERTICAL_OFFSET),e.autoscroll=o,e.setGuidesEnabled(!1),null!=l&&(e.highlightDropTargets=l),null!=d&&(e.getDropTarget=d),e.getGraphForEvent=function(e){return"function"==typeof t?t(e):t},null!=i&&(e.createDragElement=function(){return i.cloneNode(!0)},r&&(e.createPreviewElement=function(e){var t=i.cloneNode(!0),n=parseInt(t.style.width),a=parseInt(t.style.height);return t.style.width=Math.round(n*e.view.scale)+"px",t.style.height=Math.round(a*e.view.scale)+"px",t})),e}},mxConstants={DEFAULT_HOTSPOT:.3,MIN_HOTSPOT_SIZE:8,MAX_HOTSPOT_SIZE:0,RENDERING_HINT_EXACT:"exact",RENDERING_HINT_FASTER:"faster",RENDERING_HINT_FASTEST:"fastest",DIALECT_SVG:"svg",DIALECT_VML:"vml",DIALECT_MIXEDHTML:"mixedHtml",DIALECT_PREFERHTML:"preferHtml",DIALECT_STRICTHTML:"strictHtml",NS_SVG:"http://www.w3.org/2000/svg",NS_XHTML:"http://www.w3.org/1999/xhtml",NS_XLINK:"http://www.w3.org/1999/xlink",SHADOWCOLOR:"gray",SHADOW_OFFSET_X:2,SHADOW_OFFSET_Y:3,SHADOW_OPACITY:1,NODETYPE_ELEMENT:1,NODETYPE_ATTRIBUTE:2,NODETYPE_TEXT:3,NODETYPE_CDATA:4,NODETYPE_ENTITY_REFERENCE:5,NODETYPE_ENTITY:6,NODETYPE_PROCESSING_INSTRUCTION:7,NODETYPE_COMMENT:8,NODETYPE_DOCUMENT:9,NODETYPE_DOCUMENTTYPE:10,NODETYPE_DOCUMENT_FRAGMENT:11,NODETYPE_NOTATION:12,TOOLTIP_VERTICAL_OFFSET:16,DEFAULT_VALID_COLOR:"#00FF00",DEFAULT_INVALID_COLOR:"#FF0000",HIGHLIGHT_STROKEWIDTH:3,CURSOR_MOVABLE_VERTEX:"move",CURSOR_MOVABLE_EDGE:"move",CURSOR_LABEL_HANDLE:"default",CURSOR_BEND_HANDLE:"pointer",CURSOR_CONNECT:"pointer",HIGHLIGHT_COLOR:"#00FF00",CONNECT_TARGET_COLOR:"#0000FF",INVALID_CONNECT_TARGET_COLOR:"#FF0000",DROP_TARGET_COLOR:"#0000FF",VALID_COLOR:"#00FF00",INVALID_COLOR:"#FF0000",EDGE_SELECTION_COLOR:"#00FF00",VERTEX_SELECTION_COLOR:"#00FF00",VERTEX_SELECTION_STROKEWIDTH:1,EDGE_SELECTION_STROKEWIDTH:1,VERTEX_SELECTION_DASHED:!0,EDGE_SELECTION_DASHED:!0,GUIDE_COLOR:"#FF0000",GUIDE_STROKEWIDTH:1,OUTLINE_COLOR:"#0099FF",OUTLINE_STROKEWIDTH:mxClient.IS_IE?2:3,HANDLE_SIZE:7,LABEL_HANDLE_SIZE:4,HANDLE_FILLCOLOR:"#00FF00",HANDLE_STROKECOLOR:"black",LABEL_HANDLE_FILLCOLOR:"yellow",CONNECT_HANDLE_FILLCOLOR:"#0000FF",LOCKED_HANDLE_FILLCOLOR:"#FF0000",OUTLINE_HANDLE_FILLCOLOR:"#00FFFF",OUTLINE_HANDLE_STROKECOLOR:"#0033FF",DEFAULT_FONTFAMILY:"Arial,Helvetica",DEFAULT_FONTSIZE:11,LINE_HEIGHT:1.2,DEFAULT_FONTSTYLE:0,DEFAULT_STARTSIZE:40,DEFAULT_MARKERSIZE:6,DEFAULT_IMAGESIZE:24,ENTITY_SEGMENT:30,RECTANGLE_ROUNDING_FACTOR:.15,LINE_ARCSIZE:20,ARROW_SPACING:10,ARROW_WIDTH:30,ARROW_SIZE:30,PAGE_FORMAT_A4_PORTRAIT:new mxRectangle(0,0,826,1169),PAGE_FORMAT_A4_LANDSCAPE:new mxRectangle(0,0,1169,826),PAGE_FORMAT_LETTER_PORTRAIT:new mxRectangle(0,0,850,1100),PAGE_FORMAT_LETTER_LANDSCAPE:new mxRectangle(0,0,1100,850),NONE:"none",STYLE_PERIMETER:"perimeter",STYLE_SOURCE_PORT:"sourcePort",STYLE_TARGET_PORT:"targetPort",STYLE_PORT_CONSTRAINT:"portConstraint",STYLE_OPACITY:"opacity",STYLE_TEXT_OPACITY:"textOpacity",STYLE_OVERFLOW:"overflow",STYLE_ORTHOGONAL:"orthogonal",STYLE_EXIT_X:"exitX",STYLE_EXIT_Y:"exitY",STYLE_EXIT_PERIMETER:"exitPerimeter",STYLE_ENTRY_X:"entryX",STYLE_ENTRY_Y:"entryY",STYLE_ENTRY_PERIMETER:"entryPerimeter",STYLE_WHITE_SPACE:"whiteSpace",STYLE_ROTATION:"rotation",STYLE_FILLCOLOR:"fillColor",STYLE_SWIMLANE_FILLCOLOR:"swimlaneFillColor",STYLE_GRADIENTCOLOR:"gradientColor",STYLE_GRADIENT_DIRECTION:"gradientDirection",STYLE_STROKECOLOR:"strokeColor",STYLE_SEPARATORCOLOR:"separatorColor",STYLE_STROKEWIDTH:"strokeWidth",STYLE_ALIGN:"align",STYLE_VERTICAL_ALIGN:"verticalAlign",STYLE_LABEL_POSITION:"labelPosition",STYLE_VERTICAL_LABEL_POSITION:"verticalLabelPosition",STYLE_IMAGE_ASPECT:"imageAspect",STYLE_IMAGE_ALIGN:"imageAlign",STYLE_IMAGE_VERTICAL_ALIGN:"imageVerticalAlign",STYLE_GLASS:"glass",STYLE_IMAGE:"image",STYLE_IMAGE_WIDTH:"imageWidth",STYLE_IMAGE_HEIGHT:"imageHeight",STYLE_IMAGE_BACKGROUND:"imageBackground",STYLE_IMAGE_BORDER:"imageBorder",STYLE_FLIPH:"flipH",STYLE_FLIPV:"flipV",STYLE_NOLABEL:"noLabel",STYLE_NOEDGESTYLE:"noEdgeStyle",STYLE_LABEL_BACKGROUNDCOLOR:"labelBackgroundColor",STYLE_LABEL_BORDERCOLOR:"labelBorderColor",STYLE_LABEL_PADDING:"labelPadding",STYLE_INDICATOR_SHAPE:"indicatorShape",STYLE_INDICATOR_IMAGE:"indicatorImage",STYLE_INDICATOR_COLOR:"indicatorColor",STYLE_INDICATOR_STROKECOLOR:"indicatorStrokeColor",STYLE_INDICATOR_GRADIENTCOLOR:"indicatorGradientColor",STYLE_INDICATOR_SPACING:"indicatorSpacing",STYLE_INDICATOR_WIDTH:"indicatorWidth",STYLE_INDICATOR_HEIGHT:"indicatorHeight",STYLE_INDICATOR_DIRECTION:"indicatorDirection",STYLE_SHADOW:"shadow",STYLE_SEGMENT:"segment",STYLE_ENDARROW:"endArrow",STYLE_STARTARROW:"startArrow",STYLE_ENDSIZE:"endSize",STYLE_STARTSIZE:"startSize",STYLE_SWIMLANE_LINE:"swimlaneLine",STYLE_ENDFILL:"endFill",STYLE_STARTFILL:"startFill",STYLE_DASHED:"dashed",STYLE_DASH_PATTERN:"dashPattern",STYLE_ROUNDED:"rounded",STYLE_CURVED:"curved",STYLE_ARCSIZE:"arcSize",STYLE_SMOOTH:"smooth",STYLE_SOURCE_PERIMETER_SPACING:"sourcePerimeterSpacing",STYLE_TARGET_PERIMETER_SPACING:"targetPerimeterSpacing",STYLE_PERIMETER_SPACING:"perimeterSpacing",STYLE_SPACING:"spacing",STYLE_SPACING_TOP:"spacingTop",STYLE_SPACING_LEFT:"spacingLeft",STYLE_SPACING_BOTTOM:"spacingBottom",STYLE_SPACING_RIGHT:"spacingRight",STYLE_HORIZONTAL:"horizontal",STYLE_DIRECTION:"direction",STYLE_ELBOW:"elbow",STYLE_FONTCOLOR:"fontColor",STYLE_FONTFAMILY:"fontFamily",STYLE_FONTSIZE:"fontSize",STYLE_FONTSTYLE:"fontStyle",STYLE_AUTOSIZE:"autosize",STYLE_FOLDABLE:"foldable",STYLE_EDITABLE:"editable",STYLE_BENDABLE:"bendable",STYLE_MOVABLE:"movable",STYLE_RESIZABLE:"resizable",STYLE_CLONEABLE:"cloneable",STYLE_DELETABLE:"deletable",STYLE_SHAPE:"shape",STYLE_EDGE:"edgeStyle",STYLE_LOOP:"loopStyle",STYLE_ROUTING_CENTER_X:"routingCenterX",STYLE_ROUTING_CENTER_Y:"routingCenterY",FONT_BOLD:1,FONT_ITALIC:2,FONT_UNDERLINE:4,FONT_SHADOW:8,SHAPE_RECTANGLE:"rectangle",SHAPE_ELLIPSE:"ellipse",SHAPE_DOUBLE_ELLIPSE:"doubleEllipse",SHAPE_RHOMBUS:"rhombus",SHAPE_LINE:"line",SHAPE_IMAGE:"image",SHAPE_ARROW:"arrow",SHAPE_LABEL:"label",SHAPE_CYLINDER:"cylinder",SHAPE_SWIMLANE:"swimlane",SHAPE_CONNECTOR:"connector",SHAPE_ACTOR:"actor",SHAPE_CLOUD:"cloud",SHAPE_TRIANGLE:"triangle",SHAPE_HEXAGON:"hexagon",ARROW_CLASSIC:"classic",ARROW_BLOCK:"block",ARROW_OPEN:"open",ARROW_OVAL:"oval",ARROW_DIAMOND:"diamond",ARROW_DIAMOND_THIN:"diamondThin",ALIGN_LEFT:"left",ALIGN_CENTER:"center",ALIGN_RIGHT:"right",ALIGN_TOP:"top",ALIGN_MIDDLE:"middle",ALIGN_BOTTOM:"bottom",DIRECTION_NORTH:"north",DIRECTION_SOUTH:"south",DIRECTION_EAST:"east",DIRECTION_WEST:"west",DIRECTION_MASK_NONE:0,DIRECTION_MASK_WEST:1,DIRECTION_MASK_NORTH:2,DIRECTION_MASK_SOUTH:4,DIRECTION_MASK_EAST:8,DIRECTION_MASK_ALL:15,ELBOW_VERTICAL:"vertical",ELBOW_HORIZONTAL:"horizontal",EDGESTYLE_ELBOW:"elbowEdgeStyle",EDGESTYLE_ENTITY_RELATION:"entityRelationEdgeStyle",EDGESTYLE_LOOP:"loopEdgeStyle",EDGESTYLE_SIDETOSIDE:"sideToSideEdgeStyle",EDGESTYLE_TOPTOBOTTOM:"topToBottomEdgeStyle",EDGESTYLE_ORTHOGONAL:"orthogonalEdgeStyle",EDGESTYLE_SEGMENT:"segmentEdgeStyle",PERIMETER_ELLIPSE:"ellipsePerimeter",PERIMETER_RECTANGLE:"rectanglePerimeter",PERIMETER_RHOMBUS:"rhombusPerimeter",PERIMETER_TRIANGLE:"trianglePerimeter"};function mxEventObject(e){this.name=e,this.properties=[];for(var t=1;t<arguments.length;t+=2)null!=arguments[t+1]&&(this.properties[arguments[t]]=arguments[t+1])}function mxMouseEvent(e,t){this.evt=e,this.state=t}function mxEventSource(e){this.setEventSource(e)}mxEventObject.prototype.name=null,mxEventObject.prototype.properties=null,mxEventObject.prototype.consumed=!1,mxEventObject.prototype.getName=function(){return this.name},mxEventObject.prototype.getProperties=function(){return this.properties},mxEventObject.prototype.getProperty=function(e){return this.properties[e]},mxEventObject.prototype.isConsumed=function(){return this.consumed},mxEventObject.prototype.consume=function(){this.consumed=!0},mxMouseEvent.prototype.consumed=!1,mxMouseEvent.prototype.evt=null,mxMouseEvent.prototype.graphX=null,mxMouseEvent.prototype.graphY=null,mxMouseEvent.prototype.state=null,mxMouseEvent.prototype.getEvent=function(){return this.evt},mxMouseEvent.prototype.getSource=function(){return mxEvent.getSource(this.evt)},mxMouseEvent.prototype.isSource=function(e){if(null!=e)for(var t=this.getSource();null!=t;){if(t==e.node)return!0;t=t.parentNode}return!1},mxMouseEvent.prototype.getX=function(){return mxEvent.getClientX(this.getEvent())},mxMouseEvent.prototype.getY=function(){return mxEvent.getClientY(this.getEvent())},mxMouseEvent.prototype.getGraphX=function(){return this.graphX},mxMouseEvent.prototype.getGraphY=function(){return this.graphY},mxMouseEvent.prototype.getState=function(){return this.state},mxMouseEvent.prototype.getCell=function(){var e=this.getState();return null!=e?e.cell:null},mxMouseEvent.prototype.isPopupTrigger=function(){return mxEvent.isPopupTrigger(this.getEvent())},mxMouseEvent.prototype.isConsumed=function(){return this.consumed},mxMouseEvent.prototype.consume=function(e){(null==e||e)&&this.evt.preventDefault&&this.evt.preventDefault(),this.evt.returnValue=!1,this.consumed=!0},mxEventSource.prototype.eventListeners=null,mxEventSource.prototype.eventsEnabled=!0,mxEventSource.prototype.eventSource=null,mxEventSource.prototype.isEventsEnabled=function(){return this.eventsEnabled},mxEventSource.prototype.setEventsEnabled=function(e){this.eventsEnabled=e},mxEventSource.prototype.getEventSource=function(){return this.eventSource},mxEventSource.prototype.setEventSource=function(e){this.eventSource=e},mxEventSource.prototype.addListener=function(e,t){null==this.eventListeners&&(this.eventListeners=[]),this.eventListeners.push(e),this.eventListeners.push(t)},mxEventSource.prototype.removeListener=function(e){if(null!=this.eventListeners)for(var t=0;t<this.eventListeners.length;)this.eventListeners[t+1]==e?this.eventListeners.splice(t,2):t+=2},mxEventSource.prototype.fireEvent=function(e,t){if(null!=this.eventListeners&&this.isEventsEnabled()){null==e&&(e=new mxEventObject),null==t&&(t=this.getEventSource()),null==t&&(t=this);for(var n=[t,e],a=0;a<this.eventListeners.length;a+=2){var i=this.eventListeners[a];(null==i||i==e.getName())&&this.eventListeners[a+1].apply(this,n)}}};var mxEvent={objects:[],addListener:function(){var a=function(e,t,n){null==e.mxListenerList&&(e.mxListenerList=[],mxEvent.objects.push(e)),e.mxListenerList.push({name:t,f:n})};return window.addEventListener?function(e,t,n){e.addEventListener(t,n,!1),a(e,t,n)}:function(e,t,n){e.attachEvent("on"+t,n),a(e,t,n)}}(),removeListener:function(){var a=function(e,t,n){if(null!=e.mxListenerList){t=e.mxListenerList.length;for(var a=0;a<t;a++)if(e.mxListenerList[a].f==n){e.mxListenerList.splice(a,1);break}0==e.mxListenerList.length&&(e.mxListenerList=null)}};return window.removeEventListener?function(e,t,n){e.removeEventListener(t,n,!1),a(e,t,n)}:function(e,t,n){e.detachEvent("on"+t,n),a(e,t,n)}}(),removeAllListeners:function(e){var t=e.mxListenerList;if(null!=t)for(;0<t.length;){var n=t[0];mxEvent.removeListener(e,n.name,n.f)}},addGestureListeners:function(e,t,n,a){null!=t&&mxEvent.addListener(e,"mousedown",t),null!=n&&mxEvent.addListener(e,"mousemove",n),null!=a&&mxEvent.addListener(e,"mouseup",a),mxClient.IS_TOUCH&&(null!=t&&mxEvent.addListener(e,"touchstart",t),null!=n&&mxEvent.addListener(e,"touchmove",n),null!=a&&mxEvent.addListener(e,"touchend",a))},removeGestureListeners:function(e,t,n,a){null!=t&&mxEvent.removeListener(e,"mousedown",t),null!=n&&mxEvent.removeListener(e,"mousemove",n),null!=a&&mxEvent.removeListener(e,"mouseup",a),mxClient.IS_TOUCH&&(null!=t&&mxEvent.removeListener(e,"touchstart",t),null!=n&&mxEvent.removeListener(e,"touchmove",n),null!=a&&mxEvent.removeListener(e,"touchend",a))},redirectMouseEvents:function(e,n,t,a,i,s,o){var r=function(e){return"function"==typeof t?t(e):t};mxEvent.addGestureListeners(e,function(e){null!=a?a(e):mxEvent.isConsumed(e)||n.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e,r(e)))},function(e){null!=i?i(e):mxEvent.isConsumed(e)||n.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,r(e)))},function(e){null!=s?s(e):mxEvent.isConsumed(e)||n.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e,r(e)))}),mxEvent.addListener(e,"dblclick",function(e){if(null!=o)o(e);else if(!mxEvent.isConsumed(e)){var t=r(e);n.dblClick(e,null!=t?t.cell:null)}})},release:function(e){if(null!=e&&(mxEvent.removeAllListeners(e),null!=(e=e.childNodes)))for(var t=e.length,n=0;n<t;n+=1)mxEvent.release(e[n])},addMouseWheelListener:function(n){if(null!=n){var e=function(e){null==e&&(e=window.event);var t=0;0!=(t=!mxClient.IS_NS||mxClient.IS_SF||mxClient.IS_GC?e.wheelDelta/120:-e.detail/2)&&n(e,0<t)};mxClient.IS_NS?mxEvent.addListener(window,mxClient.IS_SF||mxClient.IS_GC?"mousewheel":"DOMMouseScroll",e):mxEvent.addListener(document,"mousewheel",e)}},disableContextMenu:mxClient.IS_IE&&(void 0===document.documentMode||document.documentMode<9)?function(e){mxEvent.addListener(e,"contextmenu",function(){return!1})}:function(e){e.setAttribute("oncontextmenu","return false;")},getSource:function(e){return null!=e.srcElement?e.srcElement:e.target},isConsumed:function(e){return null!=e.isConsumed&&e.isConsumed},isLeftMouseButton:function(e){return e.button==(mxClient.IS_IE&&(void 0===document.documentMode||document.documentMode<9)?1:0)},isRightMouseButton:function(e){return 2==e.button},isPopupTrigger:function(e){return mxEvent.isRightMouseButton(e)||mxEvent.isShiftDown(e)&&!mxEvent.isControlDown(e)},isShiftDown:function(e){return null!=e&&e.shiftKey},isAltDown:function(e){return null!=e&&e.altKey},isControlDown:function(e){return null!=e&&e.ctrlKey},isMetaDown:function(e){return null!=e&&e.metaKey},getMainEvent:function(e){return"touchstart"!=e.type&&"touchmove"!=e.type||null==e.touches||null==e.touches[0]?"touchend"==e.type&&null!=e.changedTouches&&null!=e.changedTouches[0]&&(e=e.changedTouches[0]):e=e.touches[0],e},getClientX:function(e){return mxEvent.getMainEvent(e).clientX},getClientY:function(e){return mxEvent.getMainEvent(e).clientY},consume:function(e,t,n){n=null==n||n,(null==t||t)&&(e.preventDefault?(n&&e.stopPropagation(),e.preventDefault()):n&&(e.cancelBubble=!0)),e.isConsumed=!0,e.returnValue=!1},LABEL_HANDLE:-1,ROTATION_HANDLE:-2,MOUSE_DOWN:"mouseDown",MOUSE_MOVE:"mouseMove",MOUSE_UP:"mouseUp",ACTIVATE:"activate",RESIZE_START:"resizeStart",RESIZE:"resize",RESIZE_END:"resizeEnd",MOVE_START:"moveStart",MOVE:"move",MOVE_END:"moveEnd",PAN_START:"panStart",PAN:"pan",PAN_END:"panEnd",MINIMIZE:"minimize",NORMALIZE:"normalize",MAXIMIZE:"maximize",HIDE:"hide",SHOW:"show",CLOSE:"close",DESTROY:"destroy",REFRESH:"refresh",SIZE:"size",SELECT:"select",FIRED:"fired",GET:"get",RECEIVE:"receive",CONNECT:"connect",DISCONNECT:"disconnect",SUSPEND:"suspend",RESUME:"resume",MARK:"mark",SESSION:"session",ROOT:"root",POST:"post",OPEN:"open",SAVE:"save",BEFORE_ADD_VERTEX:"beforeAddVertex",ADD_VERTEX:"addVertex",AFTER_ADD_VERTEX:"afterAddVertex",DONE:"done",EXECUTE:"execute",EXECUTED:"executed",BEGIN_UPDATE:"beginUpdate",START_EDIT:"startEdit",END_UPDATE:"endUpdate",END_EDIT:"endEdit",BEFORE_UNDO:"beforeUndo",UNDO:"undo",REDO:"redo",CHANGE:"change",NOTIFY:"notify",LAYOUT_CELLS:"layoutCells",CLICK:"click",SCALE:"scale",TRANSLATE:"translate",SCALE_AND_TRANSLATE:"scaleAndTranslate",UP:"up",DOWN:"down",ADD:"add",REMOVE:"remove",CLEAR:"clear",ADD_CELLS:"addCells",CELLS_ADDED:"cellsAdded",MOVE_CELLS:"moveCells",CELLS_MOVED:"cellsMoved",RESIZE_CELLS:"resizeCells",CELLS_RESIZED:"cellsResized",TOGGLE_CELLS:"toggleCells",CELLS_TOGGLED:"cellsToggled",ORDER_CELLS:"orderCells",CELLS_ORDERED:"cellsOrdered",REMOVE_CELLS:"removeCells",CELLS_REMOVED:"cellsRemoved",GROUP_CELLS:"groupCells",UNGROUP_CELLS:"ungroupCells",REMOVE_CELLS_FROM_PARENT:"removeCellsFromParent",FOLD_CELLS:"foldCells",CELLS_FOLDED:"cellsFolded",ALIGN_CELLS:"alignCells",LABEL_CHANGED:"labelChanged",CONNECT_CELL:"connectCell",CELL_CONNECTED:"cellConnected",SPLIT_EDGE:"splitEdge",FLIP_EDGE:"flipEdge",START_EDITING:"startEditing",ADD_OVERLAY:"addOverlay",REMOVE_OVERLAY:"removeOverlay",UPDATE_CELL_SIZE:"updateCellSize",ESCAPE:"escape",CLICK:"click",DOUBLE_CLICK:"doubleClick",START:"start",RESET:"reset"};function mxXmlRequest(e,t,n,a,i,s){this.url=e,this.params=t,this.method=n||"POST",this.async=null==a||a,this.username=i,this.password=s}mxXmlRequest.prototype.url=null,mxXmlRequest.prototype.params=null,mxXmlRequest.prototype.method=null,mxXmlRequest.prototype.async=null,mxXmlRequest.prototype.binary=!1,mxXmlRequest.prototype.username=null,mxXmlRequest.prototype.password=null,mxXmlRequest.prototype.request=null,mxXmlRequest.prototype.isBinary=function(){return this.binary},mxXmlRequest.prototype.setBinary=function(e){this.binary=e},mxXmlRequest.prototype.getText=function(){return this.request.responseText},mxXmlRequest.prototype.isReady=function(){return 4==this.request.readyState},mxXmlRequest.prototype.getDocumentElement=function(){var e=this.getXml();return null!=e?e.documentElement:null},mxXmlRequest.prototype.getXml=function(){var e=this.request.responseXML;return(9<=document.documentMode||null==e||null==e.documentElement)&&(e=mxUtils.parseXml(this.request.responseText)),e},mxXmlRequest.prototype.getText=function(){return this.request.responseText},mxXmlRequest.prototype.getStatus=function(){return this.request.status},mxXmlRequest.prototype.create=window.XMLHttpRequest?function(){var e=new XMLHttpRequest;return this.isBinary()&&e.overrideMimeType&&e.overrideMimeType("text/plain; charset=x-user-defined"),e}:"undefined"!=typeof ActiveXObject?function(){return new ActiveXObject("Microsoft.XMLHTTP")}:void 0,mxXmlRequest.prototype.send=function(e,t){this.request=this.create(),null!=this.request&&(null!=e&&(this.request.onreadystatechange=mxUtils.bind(this,function(){this.isReady()&&(e(this),this.onreadystatechaange=null)})),this.request.open(this.method,this.url,this.async,this.username,this.password),this.setRequestHeaders(this.request,this.params),this.request.send(this.params))},mxXmlRequest.prototype.setRequestHeaders=function(e,t){null!=t&&e.setRequestHeader("Content-Type","application/x-www-form-urlencoded")},mxXmlRequest.prototype.simulate=function(e,t){var n=null;(e=e||document)==document&&(n=window.onbeforeunload,window.onbeforeunload=null);var a=e.createElement("form");a.setAttribute("method",this.method),a.setAttribute("action",this.url),null!=t&&a.setAttribute("target",t),a.style.display="none",a.style.visibility="hidden";for(var i=0<this.params.indexOf("&")?this.params.split("&"):this.params.split(),s=0;s<i.length;s++){if(0<(o=i[s].indexOf("="))){var o,r=i[s].substring(0,o),l=i[s].substring(o+1);(o=e.createElement("textarea")).setAttribute("name",r),l=l.replace(/\n/g,"&#xa;"),r=e.createTextNode(l),o.appendChild(r),a.appendChild(o)}}e.body.appendChild(a),a.submit(),e.body.removeChild(a),null!=n&&(window.onbeforeunload=n)};var mxClipboard={STEPSIZE:10,insertCount:1,cells:null,isEmpty:function(){return null==mxClipboard.cells},cut:function(e,t){return t=mxClipboard.copy(e,t),mxClipboard.insertCount=0,mxClipboard.removeCells(e,t),t},removeCells:function(e,t){e.removeCells(t)},copy:function(e,t){t=t||e.getSelectionCells();var n=e.getExportableCells(t);return mxClipboard.insertCount=1,mxClipboard.cells=e.cloneCells(n),n},paste:function(e){if(null!=mxClipboard.cells){var t=e.getImportableCells(mxClipboard.cells),n=mxClipboard.insertCount*mxClipboard.STEPSIZE,a=e.getDefaultParent();t=e.importCells(t,n,n,a);mxClipboard.insertCount++,e.setSelectionCells(t)}}};function mxWindow(e,t,n,a,i,s,o,r,l,d){null!=t&&(o=null==o||o,this.content=t,this.init(n,a,i,s,d),this.installMaximizeHandler(),this.installMinimizeHandler(),this.installCloseHandler(),this.setMinimizable(o),this.setTitle(e),(null==r||r)&&this.installMoveHandler(),null!=l&&null!=l.parentNode?l.parentNode.replaceChild(this.div,l):document.body.appendChild(this.div))}function mxForm(e){this.table=document.createElement("table"),this.table.className=e,this.body=document.createElement("tbody"),this.table.appendChild(this.body)}function mxImage(e,t,n){this.src=e,this.width=t,this.height=n}function mxDivResizer(e,t){if("div"==e.nodeName.toLowerCase()){null==t&&(t=window),this.div=e;var n=mxUtils.getCurrentStyle(e);null!=n&&(this.resizeWidth="auto"==n.width,this.resizeHeight="auto"==n.height),mxEvent.addListener(t,"resize",mxUtils.bind(this,function(e){this.handlingResize||(this.handlingResize=!0,this.resize(),this.handlingResize=!1)})),this.resize()}}function mxDragSource(e,t){this.element=e,this.dropHandler=t,mxEvent.addGestureListeners(e,mxUtils.bind(this,this.mouseDown))}function mxToolbar(e){this.container=e}function mxSession(t,e,n,a){this.model=t,this.urlInit=e,this.urlPoll=n,this.urlNotify=a,null!=t&&(this.codec=new mxCodec,this.codec.lookup=function(e){return t.getCell(e)}),t.addListener(mxEvent.NOTIFY,mxUtils.bind(this,function(e,t){var n=t.getProperty("edit");(null!=n&&this.debug||this.connected&&!this.suspended)&&this.notify("<edit>"+this.encodeChanges(n.changes,n.undone)+"</edit>")}))}function mxUndoableEdit(e,t){this.source=e,this.changes=[],this.significant=null==t||t}function mxUndoManager(e){this.size=null!=e?e:100,this.clear()}mxWindow.prototype=new mxEventSource,mxWindow.prototype.constructor=mxWindow,mxWindow.prototype.closeImage=mxClient.imageBasePath+"/close.gif",mxWindow.prototype.minimizeImage=mxClient.imageBasePath+"/minimize.gif",mxWindow.prototype.normalizeImage=mxClient.imageBasePath+"/normalize.gif",mxWindow.prototype.maximizeImage=mxClient.imageBasePath+"/maximize.gif",mxWindow.prototype.resizeImage=mxClient.imageBasePath+"/resize.gif",mxWindow.prototype.visible=!1,mxWindow.prototype.content=!1,mxWindow.prototype.minimumSize=new mxRectangle(0,0,50,40),mxWindow.prototype.title=!1,mxWindow.prototype.content=!1,mxWindow.prototype.destroyOnClose=!0,mxWindow.prototype.init=function(e,t,n,a,i){i=null!=i?i:"mxWindow",this.div=document.createElement("div"),this.div.className=i,this.div.style.left=e+"px",this.div.style.top=t+"px",this.table=document.createElement("table"),this.table.className=i,null!=n&&(mxClient.IS_IE||(this.div.style.width=n+"px"),this.table.style.width=n+"px"),null!=a&&(mxClient.IS_IE||(this.div.style.height=a+"px"),this.table.style.height=a+"px"),e=document.createElement("tbody"),t=document.createElement("tr"),this.title=document.createElement("td"),this.title.className=i+"Title",t.appendChild(this.title),e.appendChild(t),t=document.createElement("tr"),this.td=document.createElement("td"),this.td.className=i+"Pane",this.contentWrapper=document.createElement("div"),this.contentWrapper.className=i+"Pane",this.contentWrapper.style.width="100%",this.contentWrapper.appendChild(this.content),(mxClient.IS_IE||"DIV"!=this.content.nodeName.toUpperCase())&&(this.contentWrapper.style.height="100%"),this.td.appendChild(this.contentWrapper),t.appendChild(this.td),e.appendChild(t),this.table.appendChild(e),this.div.appendChild(this.table),i=mxUtils.bind(this,function(e){this.activate()}),mxEvent.addListener(this.title,"mousedown",i),mxEvent.addListener(this.table,"mousedown",i),mxClient.IS_TOUCH&&(mxEvent.addListener(this.title,"touchstart",i),mxEvent.addListener(this.table,"touchstart",i)),this.hide()},mxWindow.prototype.setTitle=function(e){for(var t=this.title.firstChild;null!=t;){var n=t.nextSibling;t.nodeType==mxConstants.NODETYPE_TEXT&&t.parentNode.removeChild(t),t=n}mxUtils.write(this.title,e||"")},mxWindow.prototype.setScrollable=function(e){navigator.userAgent.indexOf("Presto/2.5")<0&&(this.contentWrapper.style.overflow=e?"auto":"hidden")},mxWindow.prototype.activate=function(){if(mxWindow.activeWindow!=this){var e=null!=(e=mxUtils.getCurrentStyle(this.getElement()))?e.zIndex:3;if(mxWindow.activeWindow){var t=mxWindow.activeWindow.getElement();null!=t&&null!=t.style&&(t.style.zIndex=e)}t=mxWindow.activeWindow,this.getElement().style.zIndex=parseInt(e)+1,(mxWindow.activeWindow=this).fireEvent(new mxEventObject(mxEvent.ACTIVATE,"previousWindow",t))}},mxWindow.prototype.getElement=function(){return this.div},mxWindow.prototype.fit=function(){mxUtils.fit(this.div)},mxWindow.prototype.isResizable=function(){return null!=this.resize&&"none"!=this.resize.style.display},mxWindow.prototype.setResizable=function(e){e?null==this.resize?(this.resize=document.createElement("img"),this.resize.style.position="absolute",this.resize.style.bottom="2px",this.resize.style.right="2px",this.resize.setAttribute("src",mxClient.imageBasePath+"/resize.gif"),this.resize.style.cursor="nw-resize",mxEvent.addGestureListeners(this.resize,mxUtils.bind(this,function(e){this.activate();var a=mxEvent.getClientX(e),i=mxEvent.getClientY(e),s=this.div.offsetWidth,o=this.div.offsetHeight,t=mxUtils.bind(this,function(e){var t=mxEvent.getClientX(e)-a,n=mxEvent.getClientY(e)-i;this.setSize(s+t,o+n),this.fireEvent(new mxEventObject(mxEvent.RESIZE,"event",e)),mxEvent.consume(e)}),n=mxUtils.bind(this,function(e){mxEvent.removeGestureListeners(document,null,t,n),this.fireEvent(new mxEventObject(mxEvent.RESIZE_END,"event",e)),mxEvent.consume(e)});mxEvent.addGestureListeners(document,null,t,n),this.fireEvent(new mxEventObject(mxEvent.RESIZE_START,"event",e)),mxEvent.consume(e)}),null,null),this.div.appendChild(this.resize)):this.resize.style.display="inline":null!=this.resize&&(this.resize.style.display="none")},mxWindow.prototype.setSize=function(e,t){e=Math.max(this.minimumSize.width,e),t=Math.max(this.minimumSize.height,t),mxClient.IS_IE||(this.div.style.width=e+"px",this.div.style.height=t+"px"),this.table.style.width=e+"px",this.table.style.height=t+"px",mxClient.IS_IE||(this.contentWrapper.style.height=this.div.offsetHeight-this.title.offsetHeight-2+"px")},mxWindow.prototype.setMinimizable=function(e){this.minimize.style.display=e?"":"none"},mxWindow.prototype.getMinimumSize=function(){return new mxRectangle(0,0,0,this.title.offsetHeight)},mxWindow.prototype.installMinimizeHandler=function(){this.minimize=document.createElement("img"),this.minimize.setAttribute("src",this.minimizeImage),this.minimize.setAttribute("align","right"),this.minimize.setAttribute("title","Minimize"),this.minimize.style.cursor="pointer",this.minimize.style.marginRight="1px",this.minimize.style.display="none",this.title.appendChild(this.minimize);var n=!1,a=null,i=null,e=mxUtils.bind(this,function(e){if(this.activate(),n)n=!1,this.minimize.setAttribute("src",this.minimizeImage),this.minimize.setAttribute("title","Minimize"),this.contentWrapper.style.display="",this.maximize.style.display=a,mxClient.IS_IE||(this.div.style.height=i),this.table.style.height=i,null!=this.resize&&(this.resize.style.visibility=""),this.fireEvent(new mxEventObject(mxEvent.NORMALIZE,"event",e));else{n=!0,this.minimize.setAttribute("src",this.normalizeImage),this.minimize.setAttribute("title","Normalize"),this.contentWrapper.style.display="none",a=this.maximize.style.display,this.maximize.style.display="none",i=this.table.style.height;var t=this.getMinimumSize();0<t.height&&(mxClient.IS_IE||(this.div.style.height=t.height+"px"),this.table.style.height=t.height+"px"),0<t.width&&(mxClient.IS_IE||(this.div.style.width=t.width+"px"),this.table.style.width=t.width+"px"),null!=this.resize&&(this.resize.style.visibility="hidden"),this.fireEvent(new mxEventObject(mxEvent.MINIMIZE,"event",e))}mxEvent.consume(e)});mxEvent.addListener(this.minimize,"mousedown",e),mxClient.IS_TOUCH&&mxEvent.addListener(this.minimize,"touchstart",e)},mxWindow.prototype.setMaximizable=function(e){this.maximize.style.display=e?"":"none"},mxWindow.prototype.installMaximizeHandler=function(){this.maximize=document.createElement("img"),this.maximize.setAttribute("src",this.maximizeImage),this.maximize.setAttribute("align","right"),this.maximize.setAttribute("title","Maximize"),this.maximize.style.cursor="default",this.maximize.style.marginLeft="1px",this.maximize.style.cursor="pointer",this.maximize.style.display="none",this.title.appendChild(this.maximize);var n=!1,a=null,i=null,s=null,o=null,e=mxUtils.bind(this,function(e){if(this.activate(),"none"!=this.maximize.style.display){if(n)n=!1,this.maximize.setAttribute("src",this.maximizeImage),this.maximize.setAttribute("title","Maximize"),this.contentWrapper.style.display="",this.minimize.style.visibility="",this.div.style.left=a+"px",this.div.style.top=i+"px",mxClient.IS_IE||(this.div.style.height=s,this.div.style.width=o,"auto"!=(t=mxUtils.getCurrentStyle(this.contentWrapper)).overflow&&null==this.resize)||(this.contentWrapper.style.height=this.div.offsetHeight-this.title.offsetHeight-2+"px"),this.table.style.height=s,this.table.style.width=o,null!=this.resize&&(this.resize.style.visibility=""),this.fireEvent(new mxEventObject(mxEvent.NORMALIZE,"event",e));else{if(n=!0,this.maximize.setAttribute("src",this.normalizeImage),this.maximize.setAttribute("title","Normalize"),this.contentWrapper.style.display="",this.minimize.style.visibility="hidden",a=parseInt(this.div.style.left),i=parseInt(this.div.style.top),s=this.table.style.height,o=this.table.style.width,this.div.style.left="0px",this.div.style.top="0px",mxClient.IS_IE||(this.div.style.height=document.body.clientHeight-2+"px",this.div.style.width=document.body.clientWidth-2+"px"),this.table.style.width=document.body.clientWidth-2+"px",this.table.style.height=document.body.clientHeight-2+"px",null!=this.resize&&(this.resize.style.visibility="hidden"),!mxClient.IS_IE){var t=mxUtils.getCurrentStyle(this.contentWrapper);"auto"!=t.overflow&&null==this.resize||(this.contentWrapper.style.height=this.div.offsetHeight-this.title.offsetHeight-2+"px")}this.fireEvent(new mxEventObject(mxEvent.MAXIMIZE,"event",e))}mxEvent.consume(e)}});mxEvent.addGestureListeners(this.maximize,e),mxEvent.addListener(this.title,"dblclick",e)},mxWindow.prototype.installMoveHandler=function(){this.title.style.cursor="move",mxEvent.addGestureListeners(this.title,mxUtils.bind(this,function(e){var a=mxEvent.getClientX(e),i=mxEvent.getClientY(e),s=this.getX(),o=this.getY(),t=mxUtils.bind(this,function(e){var t=mxEvent.getClientX(e)-a,n=mxEvent.getClientY(e)-i;this.setLocation(s+t,o+n),this.fireEvent(new mxEventObject(mxEvent.MOVE,"event",e)),mxEvent.consume(e)}),n=mxUtils.bind(this,function(e){mxEvent.removeGestureListeners(document,null,t,n),this.fireEvent(new mxEventObject(mxEvent.MOVE_END,"event",e)),mxEvent.consume(e)});mxEvent.addGestureListeners(document,null,t,n),this.fireEvent(new mxEventObject(mxEvent.MOVE_START,"event",e)),mxEvent.consume(e)}))},mxWindow.prototype.setLocation=function(e,t){this.div.style.left=e+"px",this.div.style.top=t+"px"},mxWindow.prototype.getX=function(){return parseInt(this.div.style.left)},mxWindow.prototype.getY=function(){return parseInt(this.div.style.top)},mxWindow.prototype.installCloseHandler=function(){this.closeImg=document.createElement("img"),this.closeImg.setAttribute("src",this.closeImage),this.closeImg.setAttribute("align","right"),this.closeImg.setAttribute("title","Close"),this.closeImg.style.marginLeft="2px",this.closeImg.style.cursor="pointer",this.closeImg.style.display="none",this.title.insertBefore(this.closeImg,this.title.firstChild),mxEvent.addGestureListeners(this.closeImg,mxUtils.bind(this,function(e){this.fireEvent(new mxEventObject(mxEvent.CLOSE,"event",e)),this.destroyOnClose?this.destroy():this.setVisible(!1),mxEvent.consume(e)}))},mxWindow.prototype.setImage=function(e){this.image=document.createElement("img"),this.image.setAttribute("src",e),this.image.setAttribute("align","left"),this.image.style.marginRight="4px",this.image.style.marginLeft="0px",this.image.style.marginTop="-2px",this.title.insertBefore(this.image,this.title.firstChild)},mxWindow.prototype.setClosable=function(e){this.closeImg.style.display=e?"":"none"},mxWindow.prototype.isVisible=function(){return null!=this.div&&"hidden"!=this.div.style.visibility},mxWindow.prototype.setVisible=function(e){null!=this.div&&this.isVisible()!=e&&(e?this.show():this.hide())},mxWindow.prototype.show=function(){this.div.style.visibility="",this.activate();var e=mxUtils.getCurrentStyle(this.contentWrapper);mxClient.IS_IE||"auto"!=e.overflow&&null==this.resize||(this.contentWrapper.style.height=this.div.offsetHeight-this.title.offsetHeight-2+"px"),this.fireEvent(new mxEventObject(mxEvent.SHOW))},mxWindow.prototype.hide=function(){this.div.style.visibility="hidden",this.fireEvent(new mxEventObject(mxEvent.HIDE))},mxWindow.prototype.destroy=function(){this.fireEvent(new mxEventObject(mxEvent.DESTROY)),null!=this.div&&(mxEvent.release(this.div),this.div.parentNode.removeChild(this.div),this.div=null),this.contentWrapper=this.content=this.title=null},mxForm.prototype.table=null,mxForm.prototype.body=!1,mxForm.prototype.getTable=function(){return this.table},mxForm.prototype.addButtons=function(e,t){var n=document.createElement("tr"),a=document.createElement("td");n.appendChild(a);a=document.createElement("td");var i=document.createElement("button");mxUtils.write(i,mxResources.get("ok")||"OK"),a.appendChild(i),mxEvent.addListener(i,"click",function(){e()}),i=document.createElement("button"),mxUtils.write(i,mxResources.get("cancel")||"Cancel"),a.appendChild(i),mxEvent.addListener(i,"click",function(){t()}),n.appendChild(a),this.body.appendChild(n)},mxForm.prototype.addText=function(e,t){var n=document.createElement("input");return n.setAttribute("type","text"),n.value=t,this.addField(e,n)},mxForm.prototype.addCheckbox=function(e,t){var n=document.createElement("input");return n.setAttribute("type","checkbox"),this.addField(e,n),t&&(n.checked=!0),n},mxForm.prototype.addTextarea=function(e,t,n){var a=document.createElement("textarea");return mxClient.IS_NS&&n--,a.setAttribute("rows",n||2),a.value=t,this.addField(e,a)},mxForm.prototype.addCombo=function(e,t,n){var a=document.createElement("select");return null!=n&&a.setAttribute("size",n),t&&a.setAttribute("multiple","true"),this.addField(e,a)},mxForm.prototype.addOption=function(e,t,n,a){var i=document.createElement("option");mxUtils.writeln(i,t),i.setAttribute("value",n),a&&i.setAttribute("selected",a),e.appendChild(i)},mxForm.prototype.addField=function(e,t){var n=document.createElement("tr"),a=document.createElement("td");return mxUtils.write(a,e),n.appendChild(a),(a=document.createElement("td")).appendChild(t),n.appendChild(a),this.body.appendChild(n),t},mxImage.prototype.src=null,mxImage.prototype.width=null,mxImage.prototype.height=null,mxDivResizer.prototype.resizeWidth=!0,mxDivResizer.prototype.resizeHeight=!0,mxDivResizer.prototype.handlingResize=!1,mxDivResizer.prototype.resize=function(){var e=this.getDocumentWidth(),t=this.getDocumentHeight(),n=parseInt(this.div.style.left),a=parseInt(this.div.style.right),i=parseInt(this.div.style.top),s=parseInt(this.div.style.bottom);this.resizeWidth&&!isNaN(n)&&!isNaN(a)&&0<=n&&0<=a&&0<e-a-n&&(this.div.style.width=e-a-n+"px"),this.resizeHeight&&!isNaN(i)&&!isNaN(s)&&0<=i&&0<=s&&0<t-i-s&&(this.div.style.height=t-i-s+"px")},mxDivResizer.prototype.getDocumentWidth=function(){return document.body.clientWidth},mxDivResizer.prototype.getDocumentHeight=function(){return document.body.clientHeight},mxDragSource.prototype.element=null,mxDragSource.prototype.dropHandler=null,mxDragSource.prototype.dragOffset=null,mxDragSource.prototype.dragElement=null,mxDragSource.prototype.previewElement=null,mxDragSource.prototype.enabled=!0,mxDragSource.prototype.currentGraph=null,mxDragSource.prototype.currentDropTarget=null,mxDragSource.prototype.currentPoint=null,mxDragSource.prototype.currentGuide=null,mxDragSource.prototype.currentHighlight=null,mxDragSource.prototype.autoscroll=!0,mxDragSource.prototype.guidesEnabled=!0,mxDragSource.prototype.gridEnabled=!0,mxDragSource.prototype.highlightDropTargets=!0,mxDragSource.prototype.dragElementZIndex=100,mxDragSource.prototype.dragElementOpacity=70,mxDragSource.prototype.isEnabled=function(){return this.enabled},mxDragSource.prototype.setEnabled=function(e){this.enabled=e},mxDragSource.prototype.isGuidesEnabled=function(){return this.guidesEnabled},mxDragSource.prototype.setGuidesEnabled=function(e){this.guidesEnabled=e},mxDragSource.prototype.isGridEnabled=function(){return this.gridEnabled},mxDragSource.prototype.setGridEnabled=function(e){this.gridEnabled=e},mxDragSource.prototype.getGraphForEvent=function(e){return null},mxDragSource.prototype.getDropTarget=function(e,t,n){return e.getCellAt(t,n)},mxDragSource.prototype.createDragElement=function(e){return this.element.cloneNode(!0)},mxDragSource.prototype.createPreviewElement=function(e){return null},mxDragSource.prototype.mouseDown=function(e){this.enabled&&!mxEvent.isConsumed(e)&&null==this.mouseMoveHandler&&(this.startDrag(e),this.mouseMoveHandler=mxUtils.bind(this,this.mouseMove),this.mouseUpHandler=mxUtils.bind(this,this.mouseUp),mxEvent.addGestureListeners(document,null,this.mouseMoveHandler,this.mouseUpHandler),mxEvent.consume(e,!0,!1))},mxDragSource.prototype.startDrag=function(e){this.dragElement=this.createDragElement(e),this.dragElement.style.position="absolute",this.dragElement.style.zIndex=this.dragElementZIndex,mxUtils.setOpacity(this.dragElement,this.dragElementOpacity)},mxDragSource.prototype.stopDrag=function(e){null!=this.dragElement&&(null!=this.dragElement.parentNode&&this.dragElement.parentNode.removeChild(this.dragElement),this.dragElement=null)},mxDragSource.prototype.graphContainsEvent=function(e,t){var n=mxEvent.getClientX(t),a=mxEvent.getClientY(t),i=mxUtils.getOffset(e.container),s=mxUtils.getScrollOrigin();return n>=i.x-s.x&&a>=i.y-s.y&&n<=i.x-s.x+e.container.offsetWidth&&a<=i.y-s.y+e.container.offsetHeight},mxDragSource.prototype.mouseMove=function(e){if(null!=(t=this.getGraphForEvent(e))&&!this.graphContainsEvent(t,e)&&(t=null),t!=this.currentGraph&&(null!=this.currentGraph&&this.dragExit(this.currentGraph),this.currentGraph=t,null!=this.currentGraph&&this.dragEnter(this.currentGraph)),null!=this.currentGraph&&this.dragOver(this.currentGraph,e),null==this.dragElement||null!=this.previewElement&&"visible"==this.previewElement.style.visibility)null!=this.dragElement&&(this.dragElement.style.visibility="hidden");else{var t=mxEvent.getClientX(e),n=mxEvent.getClientY(e);null==this.dragElement.parentNode&&document.body.appendChild(this.dragElement),this.dragElement.style.visibility="visible",null!=this.dragOffset&&(t+=this.dragOffset.x,n+=this.dragOffset.y),t+=document.body.scrollLeft||document.documentElement.scrollLeft,n+=document.body.scrollTop||document.documentElement.scrollTop,this.dragElement.style.left=t+"px",this.dragElement.style.top=n+"px"}mxEvent.consume(e)},mxDragSource.prototype.mouseUp=function(e){if(null!=this.currentGraph){if(null!=this.currentPoint&&(null==this.previewElement||"hidden"!=this.previewElement.style.visibility)){var t=this.currentGraph.view.scale,n=this.currentGraph.view.translate;this.drop(this.currentGraph,e,this.currentDropTarget,this.currentPoint.x/t-n.x,this.currentPoint.y/t-n.y)}this.dragExit(this.currentGraph)}this.stopDrag(e),mxEvent.removeGestureListeners(document,null,this.mouseMoveHandler,this.mouseUpHandler),this.currentGraph=this.mouseUpHandler=this.mouseMoveHandler=null,mxEvent.consume(e)},mxDragSource.prototype.dragEnter=function(e){e.isMouseDown=!0,this.previewElement=this.createPreviewElement(e),this.isGuidesEnabled()&&null!=this.previewElement&&(this.currentGuide=new mxGuide(e,e.graphHandler.getGuideStates())),this.highlightDropTargets&&(this.currentHighlight=new mxCellHighlight(e,mxConstants.DROP_TARGET_COLOR))},mxDragSource.prototype.dragExit=function(e){this.currentPoint=this.currentDropTarget=null,e.isMouseDown=!1,null!=this.previewElement&&(null!=this.previewElement.parentNode&&this.previewElement.parentNode.removeChild(this.previewElement),this.previewElement=null),null!=this.currentGuide&&(this.currentGuide.destroy(),this.currentGuide=null),null!=this.currentHighlight&&(this.currentHighlight.destroy(),this.currentHighlight=null)},mxDragSource.prototype.dragOver=function(e,t){var n=mxUtils.getOffset(e.container),a=mxUtils.getScrollOrigin(e.container),i=mxEvent.getClientX(t)-n.x+a.x;n=mxEvent.getClientY(t)-n.y+a.y;if(e.autoScroll&&(null==this.autoscroll||this.autoscroll)&&e.scrollPointToVisible(i,n,e.autoExtend),null!=this.currentHighlight&&e.isDropEnabled()&&(this.currentDropTarget=this.getDropTarget(e,i,n),a=e.getView().getState(this.currentDropTarget),this.currentHighlight.highlight(a)),null!=this.previewElement){null==this.previewElement.parentNode&&(e.container.appendChild(this.previewElement),this.previewElement.style.zIndex="3",this.previewElement.style.position="absolute");a=this.isGridEnabled()&&e.isGridEnabledEvent(t);var s=!0;if(null!=this.currentGuide&&this.currentGuide.isEnabledForEvent(t))s=new mxRectangle(0,0,s=parseInt(this.previewElement.style.width),o=parseInt(this.previewElement.style.height)),n=new mxPoint(i,n),n=this.currentGuide.move(s,n,a),s=!1,i=n.x,n=n.y;else if(a){a=e.view.scale;var o=e.view.translate,r=e.gridSize/2;i=(e.snap(i/a-o.x-r)+o.x)*a,n=(e.snap(n/a-o.y-r)+o.y)*a}null!=this.currentGuide&&s&&this.currentGuide.hide(),null!=this.previewOffset&&(i+=this.previewOffset.x,n+=this.previewOffset.y),this.previewElement.style.left=Math.round(i)+"px",this.previewElement.style.top=Math.round(n)+"px",this.previewElement.style.visibility="visible"}this.currentPoint=new mxPoint(i,n)},mxDragSource.prototype.drop=function(e,t,n,a,i){this.dropHandler(e,t,n,a,i),e.container.focus()},mxToolbar.prototype=new mxEventSource,mxToolbar.prototype.constructor=mxToolbar,mxToolbar.prototype.container=null,mxToolbar.prototype.enabled=!0,mxToolbar.prototype.noReset=!1,mxToolbar.prototype.updateDefaultMode=!0,mxToolbar.prototype.addItem=function(e,t,n,a,i,s){var o=document.createElement(null!=t?"img":"button"),r=i||(null!=s?"mxToolbarMode":"mxToolbarItem");return o.className=r,o.setAttribute("src",t),null!=e&&(null!=t?o.setAttribute("title",e):mxUtils.write(o,e)),this.container.appendChild(o),null!=n&&(mxEvent.addListener(o,"click",n),mxClient.IS_TOUCH&&mxEvent.addListener(o,"touchend",n)),e=mxUtils.bind(this,function(e){null!=a?o.setAttribute("src",t):o.style.backgroundColor=""}),mxEvent.addGestureListeners(o,mxUtils.bind(this,function(e){if(null!=a?o.setAttribute("src",a):o.style.backgroundColor="gray",null!=s){null==this.menu&&(this.menu=new mxPopupMenu,this.menu.init());var t=this.currentImg;this.menu.isMenuShowing()&&this.menu.hideMenu(),t!=o&&(this.currentImg=o,this.menu.factoryMethod=s,t=new mxPoint(o.offsetLeft,o.offsetTop+o.offsetHeight),this.menu.popup(t.x,t.y,null,e),this.menu.isMenuShowing()&&(o.className=r+"Selected",this.menu.hideMenu=function(){mxPopupMenu.prototype.hideMenu.apply(this),o.className=r,this.currentImg=null}))}}),null,e),mxEvent.addListener(o,"mouseout",e),o},mxToolbar.prototype.addCombo=function(e){var t=document.createElement("div");t.style.display="inline",t.className="mxToolbarComboContainer";var n=document.createElement("select");return n.className=e||"mxToolbarCombo",t.appendChild(n),this.container.appendChild(t),n},mxToolbar.prototype.addActionCombo=function(e,t){var n=document.createElement("select");return n.className=t||"mxToolbarCombo",this.addOption(n,e,null),mxEvent.addListener(n,"change",function(e){var t=n.options[n.selectedIndex];n.selectedIndex=0,null!=t.funct&&t.funct(e)}),this.container.appendChild(n),n},mxToolbar.prototype.addOption=function(e,t,n){var a=document.createElement("option");return mxUtils.writeln(a,t),"function"==typeof n?a.funct=n:a.setAttribute("value",n),e.appendChild(a),a},mxToolbar.prototype.addSwitchMode=function(e,t,n,a,i){var s=document.createElement("img");return s.initialClassName=i||"mxToolbarMode",s.className=s.initialClassName,s.setAttribute("src",t),s.altIcon=a,null!=e&&s.setAttribute("title",e),mxEvent.addListener(s,"click",mxUtils.bind(this,function(e){null!=(e=this.selectedMode.altIcon)?(this.selectedMode.altIcon=this.selectedMode.getAttribute("src"),this.selectedMode.setAttribute("src",e)):this.selectedMode.className=this.selectedMode.initialClassName,this.updateDefaultMode&&(this.defaultMode=s),null!=(e=(this.selectedMode=s).altIcon)?(s.altIcon=s.getAttribute("src"),s.setAttribute("src",e)):s.className=s.initialClassName+"Selected",this.fireEvent(new mxEventObject(mxEvent.SELECT)),n()})),this.container.appendChild(s),null==this.defaultMode&&(this.defaultMode=s,this.selectMode(s),n()),s},mxToolbar.prototype.addMode=function(e,t,n,a,i,s){s=null==s||s;var o=document.createElement(null!=t?"img":"button");return o.initialClassName=i||"mxToolbarMode",o.className=o.initialClassName,o.setAttribute("src",t),o.altIcon=a,null!=e&&o.setAttribute("title",e),this.enabled&&s&&(mxEvent.addListener(o,"click",mxUtils.bind(this,function(e){this.selectMode(o,n),this.noReset=!1})),mxEvent.addListener(o,"dblclick",mxUtils.bind(this,function(e){this.selectMode(o,n),this.noReset=!0})),null==this.defaultMode&&(this.defaultMode=o,this.defaultFunction=n,this.selectMode(o,n))),this.container.appendChild(o),o},mxToolbar.prototype.selectMode=function(e,t){if(this.selectedMode!=e){if(null!=this.selectedMode){var n=this.selectedMode.altIcon;null!=n?(this.selectedMode.altIcon=this.selectedMode.getAttribute("src"),this.selectedMode.setAttribute("src",n)):this.selectedMode.className=this.selectedMode.initialClassName}this.selectedMode=e,null!=(n=this.selectedMode.altIcon)?(this.selectedMode.altIcon=this.selectedMode.getAttribute("src"),this.selectedMode.setAttribute("src",n)):this.selectedMode.className=this.selectedMode.initialClassName+"Selected",this.fireEvent(new mxEventObject(mxEvent.SELECT,"function",t))}},mxToolbar.prototype.resetMode=function(e){(e||!this.noReset)&&this.selectedMode!=this.defaultMode&&this.selectMode(this.defaultMode,this.defaultFunction)},mxToolbar.prototype.addSeparator=function(e){return this.addItem(null,e,null)},mxToolbar.prototype.addBreak=function(){mxUtils.br(this.container)},mxToolbar.prototype.addLine=function(){var e=document.createElement("hr");e.style.marginRight="6px",e.setAttribute("size","1"),this.container.appendChild(e)},mxToolbar.prototype.destroy=function(){mxEvent.release(this.container),this.selectedMode=this.defaultFunction=this.defaultMode=this.container=null,null!=this.menu&&this.menu.destroy()},mxSession.prototype=new mxEventSource,mxSession.prototype.constructor=mxSession,mxSession.prototype.model=null,mxSession.prototype.urlInit=null,mxSession.prototype.urlPoll=null,mxSession.prototype.urlNotify=null,mxSession.prototype.codec=null,mxSession.prototype.linefeed="&#xa;",mxSession.prototype.escapePostData=!0,mxSession.prototype.significantRemoteChanges=!0,mxSession.prototype.sent=0,mxSession.prototype.received=0,mxSession.prototype.debug=!1,mxSession.prototype.connected=!1,mxSession.prototype.suspended=!1,mxSession.prototype.polling=!1,mxSession.prototype.start=function(){this.debug?(this.connected=!0,this.fireEvent(new mxEventObject(mxEvent.CONNECT))):this.connected||this.get(this.urlInit,mxUtils.bind(this,function(e){this.connected=!0,this.fireEvent(new mxEventObject(mxEvent.CONNECT)),this.poll()}))},mxSession.prototype.suspend=function(){this.connected&&!this.suspended&&(this.suspended=!0,this.fireEvent(new mxEventObject(mxEvent.SUSPEND)))},mxSession.prototype.resume=function(e,t,n){this.connected&&this.suspended&&(this.suspended=!1,this.fireEvent(new mxEventObject(mxEvent.RESUME)),this.polling||this.poll())},mxSession.prototype.stop=function(e){this.connected&&(this.connected=!1),this.fireEvent(new mxEventObject(mxEvent.DISCONNECT,"reason",e))},mxSession.prototype.poll=function(){this.connected&&!this.suspended&&null!=this.urlPoll?(this.polling=!0,this.get(this.urlPoll,mxUtils.bind(this,function(){this.poll()}))):this.polling=!1},mxSession.prototype.notify=function(e,t,n){null!=e&&0<e.length&&(null!=this.urlNotify&&(this.debug?(mxLog.show(),mxLog.debug("mxSession.notify: "+this.urlNotify+" xml="+e)):(e="<message><delta>"+e+"</delta></message>",this.escapePostData&&(e=encodeURIComponent(e)),mxUtils.post(this.urlNotify,"xml="+e,t,n))),this.sent+=e.length,this.fireEvent(new mxEventObject(mxEvent.NOTIFY,"url",this.urlNotify,"xml",e)))},mxSession.prototype.get=function(n,a,t){if(void 0!==mxUtils){var i=mxUtils.bind(this,function(e){null!=t?t(e):this.stop(e)});mxUtils.get(n,mxUtils.bind(this,function(e){if(void 0!==mxUtils)if(e.isReady()&&404!=e.getStatus()){if(this.received+=e.getText().length,this.fireEvent(new mxEventObject(mxEvent.GET,"url",n,"request",e)),this.isValidResponse(e)){if(0<e.getText().length){var t=e.getDocumentElement();null==t?i("Invalid response: "+e.getText()):this.receive(t)}null!=a&&a(e)}}else i("Response not ready")}),function(e){i("Transmission error")})}},mxSession.prototype.isValidResponse=function(e){return e.getText().indexOf("<?php")<0},mxSession.prototype.encodeChanges=function(e,t){for(var n="",a=t?-1:1,i=t?e.length-1:0;0<=i&&i<e.length;i+=a){var s=this.codec.encode(e[i]);n=n+mxUtils.getXml(s,this.linefeed)}return n},mxSession.prototype.receive=function(e){if(null!=e&&e.nodeType==mxConstants.NODETYPE_ELEMENT){var t=e.getAttribute("namespace");for(null!=t&&(this.model.prefix=t+"-"),t=e.firstChild;null!=t;){var n=t.nodeName.toLowerCase();"state"==n?this.processState(t):"delta"==n&&this.processDelta(t),t=t.nextSibling}this.fireEvent(new mxEventObject(mxEvent.RECEIVE,"node",e))}},mxSession.prototype.processState=function(e){new mxCodec(e.ownerDocument).decode(e.firstChild,this.model)},mxSession.prototype.processDelta=function(e){for(e=e.firstChild;null!=e;)"edit"==e.nodeName&&this.processEdit(e),e=e.nextSibling},mxSession.prototype.processEdit=function(e){if(0<(e=this.decodeChanges(e)).length){var t=this.createUndoableEdit(e);this.model.fireEvent(new mxEventObject(mxEvent.CHANGE,"edit",t,"changes",e)),this.model.fireEvent(new mxEventObject(mxEvent.UNDO,"edit",t)),this.fireEvent(new mxEventObject(mxEvent.FIRED,"edit",t))}},mxSession.prototype.createUndoableEdit=function(e){var t=new mxUndoableEdit(this.model,this.significantRemoteChanges);return t.changes=e,t.notify=function(){t.source.fireEvent(new mxEventObject(mxEvent.CHANGE,"edit",t,"changes",t.changes)),t.source.fireEvent(new mxEventObject(mxEvent.NOTIFY,"edit",t,"changes",t.changes))},t},mxSession.prototype.decodeChanges=function(e){this.codec.document=e.ownerDocument;var t=[];for(e=e.firstChild;null!=e;){var n=this.decodeChange(e);null!=n&&t.push(n),e=e.nextSibling}return t},mxSession.prototype.decodeChange=function(e){var t=null;return e.nodeType==mxConstants.NODETYPE_ELEMENT&&(null!=(t="mxRootChange"==e.nodeName?new mxCodec(e.ownerDocument).decode(e):this.codec.decode(e))&&(t.model=this.model,t.execute(),"mxChildChange"==e.nodeName&&null==t.parent&&this.cellRemoved(t.child))),t},mxSession.prototype.cellRemoved=function(e,t){this.codec.putObject(e.getId(),e);for(var n=this.model.getChildCount(e),a=0;a<n;a++)this.cellRemoved(this.model.getChildAt(e,a))},mxUndoableEdit.prototype.source=null,mxUndoableEdit.prototype.changes=null,mxUndoableEdit.prototype.significant=null,mxUndoableEdit.prototype.undone=!1,mxUndoableEdit.prototype.redone=!1,mxUndoableEdit.prototype.isEmpty=function(){return 0==this.changes.length},mxUndoableEdit.prototype.isSignificant=function(){return this.significant},mxUndoableEdit.prototype.add=function(e){this.changes.push(e)},mxUndoableEdit.prototype.notify=function(){},mxUndoableEdit.prototype.die=function(){},mxUndoableEdit.prototype.undo=function(){if(!this.undone){this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT));for(var e=this.changes.length-1;0<=e;e--){var t=this.changes[e];null!=t.execute?t.execute():null!=t.undo&&t.undo(),this.source.fireEvent(new mxEventObject(mxEvent.EXECUTED,"change",t))}this.undone=!0,this.redone=!1,this.source.fireEvent(new mxEventObject(mxEvent.END_EDIT))}this.notify()},mxUndoableEdit.prototype.redo=function(){if(!this.redone){this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT));for(var e=this.changes.length,t=0;t<e;t++){var n=this.changes[t];null!=n.execute?n.execute():null!=n.redo&&n.redo(),this.source.fireEvent(new mxEventObject(mxEvent.EXECUTED,"change",n))}this.undone=!1,this.redone=!0,this.source.fireEvent(new mxEventObject(mxEvent.END_EDIT))}this.notify()},mxUndoManager.prototype=new mxEventSource,mxUndoManager.prototype.constructor=mxUndoManager,mxUndoManager.prototype.size=null,mxUndoManager.prototype.history=null,mxUndoManager.prototype.indexOfNextAdd=0,mxUndoManager.prototype.isEmpty=function(){return 0==this.history.length},mxUndoManager.prototype.clear=function(){this.history=[],this.indexOfNextAdd=0,this.fireEvent(new mxEventObject(mxEvent.CLEAR))},mxUndoManager.prototype.canUndo=function(){return 0<this.indexOfNextAdd},mxUndoManager.prototype.undo=function(){for(;0<this.indexOfNextAdd;){var e=this.history[--this.indexOfNextAdd];if(e.undo(),e.isSignificant()){this.fireEvent(new mxEventObject(mxEvent.UNDO,"edit",e));break}}},mxUndoManager.prototype.canRedo=function(){return this.indexOfNextAdd<this.history.length},mxUndoManager.prototype.redo=function(){for(var e=this.history.length;this.indexOfNextAdd<e;){var t=this.history[this.indexOfNextAdd++];if(t.redo(),t.isSignificant()){this.fireEvent(new mxEventObject(mxEvent.REDO,"edit",t));break}}},mxUndoManager.prototype.undoableEditHappened=function(e){this.trim(),0<this.size&&this.size==this.history.length&&this.history.shift(),this.history.push(e),this.indexOfNextAdd=this.history.length,this.fireEvent(new mxEventObject(mxEvent.ADD,"edit",e))},mxUndoManager.prototype.trim=function(){if(this.history.length>this.indexOfNextAdd)for(var e=this.history.splice(this.indexOfNextAdd,this.history.length-this.indexOfNextAdd),t=0;t<e.length;t++)e[t].die()};var mxUrlConverter=function(e){var n=!0,a=null,i=null;return{isEnabled:function(){return n},setEnabled:function(e){n=e},getBaseUrl:function(){return a},setBaseUrl:function(e){a=e},getBaseDomain:function(){return a},setBaseDomain:function(e){a=e},isRelativeUrl:function(e){return"http://"!=e.substring(0,7)&&"https://"!=e.substring(0,8)&&"data:image"!=e.substring(0,10)},convert:function(e){if(n&&this.isRelativeUrl(e)){if(null==a){i=location.protocol+"//"+location.host;var t=(a=i+location.pathname).lastIndexOf("/");0<t&&(a=a.substring(0,t+1))}e="/"==e.charAt(0)?i+e:a+e}return e}}};function mxPanningManager(s){this.thread=null,this.active=!1,this.dy=this.dx=this.t0y=this.t0x=this.tdy=this.tdx=0,this.scrollbars=!1,this.scrollTop=this.scrollLeft=0,this.mouseListener={mouseDown:function(e,t){},mouseMove:function(e,t){},mouseUp:mxUtils.bind(this,function(e,t){this.active&&this.stop()})},s.addMouseListener(this.mouseListener),mxEvent.addListener(document,"mouseup",mxUtils.bind(this,function(){this.active&&this.stop()}));var o=mxUtils.bind(this,function(){return this.scrollbars=mxUtils.hasScrollbars(s.container),this.scrollLeft=s.container.scrollLeft,this.scrollTop=s.container.scrollTop,window.setInterval(mxUtils.bind(this,function(){if(this.tdx-=this.dx,this.tdy-=this.dy,this.scrollbars){var e=-s.container.scrollLeft-Math.ceil(this.dx),t=-s.container.scrollTop-Math.ceil(this.dy);s.panGraph(e,t),s.panDx=this.scrollLeft-s.container.scrollLeft,s.panDy=this.scrollTop-s.container.scrollTop,s.fireEvent(new mxEventObject(mxEvent.PAN))}else s.panGraph(this.getDx(),this.getDy())}),this.delay)});this.isActive=function(){return active},this.getDx=function(){return Math.round(this.tdx)},this.getDy=function(){return Math.round(this.tdy)},this.start=function(){this.t0x=s.view.translate.x,this.t0y=s.view.translate.y,this.active=!0},this.panTo=function(e,t,n,a){this.active||this.start(),this.scrollLeft=s.container.scrollLeft,this.scrollTop=s.container.scrollTop,a=null!=a?a:0;var i=s.container;this.dx=e+(null!=n?n:0)-i.scrollLeft-i.clientWidth,this.dx<0&&Math.abs(this.dx)<this.border?this.dx=this.border+this.dx:this.dx=this.handleMouseOut?Math.max(this.dx,0):0,0==this.dx&&(this.dx=e-i.scrollLeft,this.dx=0<this.dx&&this.dx<this.border?this.dx-this.border:this.handleMouseOut?Math.min(0,this.dx):0),this.dy=t+a-i.scrollTop-i.clientHeight,this.dy<0&&Math.abs(this.dy)<this.border?this.dy=this.border+this.dy:this.dy=this.handleMouseOut?Math.max(this.dy,0):0,0==this.dy&&(this.dy=t-i.scrollTop,this.dy=0<this.dy&&this.dy<this.border?this.dy-this.border:this.handleMouseOut?Math.min(0,this.dy):0),0!=this.dx||0!=this.dy?(this.dx*=this.damper,this.dy*=this.damper,null==this.thread&&(this.thread=o())):null!=this.thread&&(window.clearInterval(this.thread),this.thread=null)},this.stop=function(){if(this.active)if(this.active=!1,null!=this.thread&&(window.clearInterval(this.thread),this.thread=null),this.tdy=this.tdx=0,this.scrollbars)s.panDx=0,s.panDy=0,s.fireEvent(new mxEventObject(mxEvent.PAN));else{var e=s.panDx,t=s.panDy;0==e&&0==t||(s.panGraph(0,0),s.view.setTranslate(this.t0x+e/s.view.scale,this.t0y+t/s.view.scale))}},this.destroy=function(){s.removeMouseListener(this.mouseListener)}}function mxPopupMenu(e){null!=(this.factoryMethod=e)&&this.init()}function mxAutoSaveManager(e){this.changeHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.graphModelChanged(t.getProperty("edit").changes)}),this.setGraph(e)}function mxAnimation(e){this.delay=null!=e?e:20}function mxMorphing(e,t,n,a){mxAnimation.call(this,a),this.graph=e,this.steps=null!=t?t:6,this.ease=null!=n?n:1.5}function mxImageBundle(e){this.images=[],this.alt=null!=e&&e}function mxImageExport(){}function mxAbstractCanvas2D(){this.converter=this.createUrlConverter(),this.reset()}function mxXmlCanvas2D(e){mxAbstractCanvas2D.call(this),this.root=e,this.writeDefaults()}function mxSvgCanvas2D(e,t){mxAbstractCanvas2D.call(this),this.root=e,this.gradients=[],this.defs=null,this.styleEnabled=null!=t&&t;var n=null;if(e.ownerDocument!=document)for(n=e;null!=n&&"svg"!=n.nodeName;)n=n.parentNode;null!=n&&(0<n.getElementsByTagName("defs").length&&(this.defs=n.getElementsByTagName("defs")[0]),null==this.defs&&(this.defs=this.createElement("defs"),null!=n.firstChild?n.insertBefore(this.defs,n.firstChild):n.appendChild(this.defs)),this.styleEnabled&&this.defs.appendChild(this.createStyle()))}mxPanningManager.prototype.damper=1/6,mxPanningManager.prototype.delay=10,mxPanningManager.prototype.handleMouseOut=!0,mxPanningManager.prototype.border=0,mxPopupMenu.prototype=new mxEventSource,mxPopupMenu.prototype.constructor=mxPopupMenu,mxPopupMenu.prototype.submenuImage=mxClient.imageBasePath+"/submenu.gif",mxPopupMenu.prototype.zIndex=10006,mxPopupMenu.prototype.factoryMethod=null,mxPopupMenu.prototype.useLeftButtonForPopup=!1,mxPopupMenu.prototype.enabled=!0,mxPopupMenu.prototype.itemCount=0,mxPopupMenu.prototype.autoExpand=!1,mxPopupMenu.prototype.smartSeparators=!1,mxPopupMenu.prototype.labels=!0,mxPopupMenu.prototype.init=function(){this.table=document.createElement("table"),this.table.className="mxPopupMenu",this.tbody=document.createElement("tbody"),this.table.appendChild(this.tbody),this.div=document.createElement("div"),this.div.className="mxPopupMenu",this.div.style.display="inline",this.div.style.zIndex=this.zIndex,this.div.appendChild(this.table),mxEvent.disableContextMenu(this.div)},mxPopupMenu.prototype.isEnabled=function(){return this.enabled},mxPopupMenu.prototype.setEnabled=function(e){this.enabled=e},mxPopupMenu.prototype.isPopupTrigger=function(e){return e.isPopupTrigger()||this.useLeftButtonForPopup&&mxEvent.isLeftMouseButton(e.getEvent())},mxPopupMenu.prototype.addItem=function(e,t,n,a,i,s){a=a||this,this.itemCount++,a.willAddSeparator&&(a.containsItems&&this.addSeparator(a,!0),a.willAddSeparator=!1),a.containsItems=!0;var o=document.createElement("tr");o.className="mxPopupMenuItem";var r=document.createElement("td");return r.className="mxPopupMenuIcon",null!=t?((i=document.createElement("img")).src=t,r.appendChild(i)):null!=i&&((t=document.createElement("div")).className=i,r.appendChild(t)),o.appendChild(r),this.labels&&((r=document.createElement("td")).className="mxPopupMenuItem"+(null==s||s?"":" disabled"),mxUtils.write(r,e),r.align="left",o.appendChild(r),(e=document.createElement("td")).className="mxPopupMenuItem"+(null==s||s?"":" disabled"),e.style.paddingRight="6px",e.style.textAlign="right",o.appendChild(e),null==a.div&&this.createSubmenu(a)),a.tbody.appendChild(o),(null==s||s)&&(mxEvent.addGestureListeners(o,mxUtils.bind(this,function(e){this.eventReceiver=o,a.activeRow!=o&&a.activeRow!=a&&(null!=a.activeRow&&null!=a.activeRow.div.parentNode&&this.hideSubmenu(a),null!=o.div&&(this.showSubmenu(a,o),a.activeRow=o)),mxEvent.consume(e)}),mxUtils.bind(this,function(e){a.activeRow!=o&&a.activeRow!=a&&(null!=a.activeRow&&null!=a.activeRow.div.parentNode&&this.hideSubmenu(a),this.autoExpand&&null!=o.div&&(this.showSubmenu(a,o),a.activeRow=o)),o.className="mxPopupMenuItemHover"}),mxUtils.bind(this,function(e){this.eventReceiver==o&&(a.activeRow!=o&&this.hideMenu(),null!=n&&n(e)),this.eventReceiver=null,mxEvent.consume(e)})),mxEvent.addListener(o,"mouseout",mxUtils.bind(this,function(e){o.className="mxPopupMenuItem"}))),o},mxPopupMenu.prototype.createSubmenu=function(e){e.table=document.createElement("table"),e.table.className="mxPopupMenu",e.tbody=document.createElement("tbody"),e.table.appendChild(e.tbody),e.div=document.createElement("div"),e.div.className="mxPopupMenu",e.div.style.position="absolute",e.div.style.display="inline",e.div.style.zIndex=this.zIndex,e.div.appendChild(e.table);var t=document.createElement("img");t.setAttribute("src",this.submenuImage),td=e.firstChild.nextSibling.nextSibling,td.appendChild(t)},mxPopupMenu.prototype.showSubmenu=function(e,t){if(null!=t.div){t.div.style.left=e.div.offsetLeft+t.offsetLeft+t.offsetWidth-1+"px",t.div.style.top=e.div.offsetTop+t.offsetTop+"px",document.body.appendChild(t.div);var n=parseInt(t.div.offsetLeft),a=parseInt(t.div.offsetWidth),i=document.body,s=document.documentElement;n+a>(i.scrollLeft||s.scrollLeft)+(i.clientWidth||s.clientWidth)&&(t.div.style.left=e.div.offsetLeft-a+(mxClient.IS_IE?6:-6)+"px"),mxUtils.fit(t.div)}},mxPopupMenu.prototype.addSeparator=function(e,t){if(e=e||this,this.smartSeparators&&!t)e.willAddSeparator=!0;else if(null!=e.tbody){e.willAddSeparator=!1;var n=document.createElement("tr"),a=document.createElement("td");a.className="mxPopupMenuIcon",a.style.padding="0 0 0 0px",n.appendChild(a),(a=document.createElement("td")).style.padding="0 0 0 0px",a.setAttribute("colSpan","2");var i=document.createElement("hr");i.setAttribute("size","1"),a.appendChild(i),n.appendChild(a),e.tbody.appendChild(n)}},mxPopupMenu.prototype.popup=function(e,t,n,a){if(null!=this.div&&null!=this.tbody&&null!=this.factoryMethod){for(this.div.style.left=e+"px",this.div.style.top=t+"px";null!=this.tbody.firstChild;)mxEvent.release(this.tbody.firstChild),this.tbody.removeChild(this.tbody.firstChild);this.itemCount=0,this.factoryMethod(this,n,a),0<this.itemCount&&(this.showMenu(),this.fireEvent(new mxEventObject(mxEvent.SHOW)))}},mxPopupMenu.prototype.isMenuShowing=function(){return null!=this.div&&this.div.parentNode==document.body},mxPopupMenu.prototype.showMenu=function(){9<=document.documentMode&&(this.div.style.filter="none"),document.body.appendChild(this.div),mxUtils.fit(this.div)},mxPopupMenu.prototype.hideMenu=function(){null!=this.div&&(null!=this.div.parentNode&&this.div.parentNode.removeChild(this.div),this.hideSubmenu(this),this.containsItems=!1)},mxPopupMenu.prototype.hideSubmenu=function(e){null!=e.activeRow&&(this.hideSubmenu(e.activeRow),null!=e.activeRow.div.parentNode&&e.activeRow.div.parentNode.removeChild(e.activeRow.div),e.activeRow=null)},mxPopupMenu.prototype.destroy=function(){null!=this.div&&(mxEvent.release(this.div),null!=this.div.parentNode&&this.div.parentNode.removeChild(this.div),this.div=null)},mxAutoSaveManager.prototype=new mxEventSource,mxAutoSaveManager.prototype.constructor=mxAutoSaveManager,mxAutoSaveManager.prototype.graph=null,mxAutoSaveManager.prototype.autoSaveDelay=10,mxAutoSaveManager.prototype.autoSaveThrottle=2,mxAutoSaveManager.prototype.autoSaveThreshold=5,mxAutoSaveManager.prototype.ignoredChanges=0,mxAutoSaveManager.prototype.lastSnapshot=0,mxAutoSaveManager.prototype.enabled=!0,mxAutoSaveManager.prototype.changeHandler=null,mxAutoSaveManager.prototype.isEnabled=function(){return this.enabled},mxAutoSaveManager.prototype.setEnabled=function(e){this.enabled=e},mxAutoSaveManager.prototype.setGraph=function(e){null!=this.graph&&this.graph.getModel().removeListener(this.changeHandler),this.graph=e,null!=this.graph&&this.graph.getModel().addListener(mxEvent.CHANGE,this.changeHandler)},mxAutoSaveManager.prototype.save=function(){},mxAutoSaveManager.prototype.graphModelChanged=function(e){(e=((new Date).getTime()-this.lastSnapshot)/1e3)>this.autoSaveDelay||this.ignoredChanges>=this.autoSaveThreshold&&e>this.autoSaveThrottle?(this.save(),this.reset()):this.ignoredChanges++},mxAutoSaveManager.prototype.reset=function(){this.lastSnapshot=(new Date).getTime(),this.ignoredChanges=0},mxAutoSaveManager.prototype.destroy=function(){this.setGraph(null)},mxAnimation.prototype=new mxEventSource,mxAnimation.prototype.constructor=mxAnimation,mxAnimation.prototype.delay=null,mxAnimation.prototype.thread=null,mxAnimation.prototype.startAnimation=function(){null==this.thread&&(this.thread=window.setInterval(mxUtils.bind(this,this.updateAnimation),this.delay))},mxAnimation.prototype.updateAnimation=function(){this.fireEvent(new mxEventObject(mxEvent.EXECUTE))},mxAnimation.prototype.stopAnimation=function(){null!=this.thread&&(window.clearInterval(this.thread),this.thread=null,this.fireEvent(new mxEventObject(mxEvent.DONE)))},mxMorphing.prototype=new mxAnimation,mxMorphing.prototype.constructor=mxMorphing,mxMorphing.prototype.graph=null,mxMorphing.prototype.steps=null,mxMorphing.prototype.step=0,mxMorphing.prototype.ease=null,mxMorphing.prototype.cells=null,mxMorphing.prototype.updateAnimation=function(){var e=new mxCellStatePreview(this.graph);if(null!=this.cells)for(var t=0;t<this.cells.length;t++)this.animateCell(cells[t],e,!1);else this.animateCell(this.graph.getModel().getRoot(),e,!0);this.show(e),(e.isEmpty()||this.step++>=this.steps)&&this.stopAnimation()},mxMorphing.prototype.show=function(e){e.show()},mxMorphing.prototype.animateCell=function(e,t,n){var a=this.graph.getView().getState(e),i=null;if(null!=a&&(i=this.getDelta(a),this.graph.getModel().isVertex(e)&&(0!=i.x||0!=i.y))){var s=this.graph.view.getTranslate(),o=this.graph.view.getScale();i.x+=s.x*o,i.y+=s.y*o,t.moveState(a,-i.x/this.ease,-i.y/this.ease)}if(n&&!this.stopRecursion(a,i))for(a=this.graph.getModel().getChildCount(e),i=0;i<a;i++)this.animateCell(this.graph.getModel().getChildAt(e,i),t,n)},mxMorphing.prototype.stopRecursion=function(e,t){return null!=t&&(0!=t.x||0!=t.y)},mxMorphing.prototype.getDelta=function(e){var t=this.getOriginForCell(e.cell),n=this.graph.getView().getTranslate(),a=this.graph.getView().getScale();return e=new mxPoint(e.x/a-n.x,e.y/a-n.y),new mxPoint((t.x-e.x)*a,(t.y-e.y)*a)},mxMorphing.prototype.getOriginForCell=function(e){var t=null;return null!=e&&(t=this.getOriginForCell(this.graph.getModel().getParent(e)),null!=(e=this.graph.getCellGeometry(e))&&(t.x+=e.x,t.y+=e.y)),null==t&&(t=new mxPoint(-(t=this.graph.view.getTranslate()).x,-t.y)),t},mxImageBundle.prototype.images=null,mxImageBundle.prototype.images=null,mxImageBundle.prototype.putImage=function(e,t,n){this.images[e]={value:t,fallback:n}},mxImageBundle.prototype.getImage=function(e){var t=null;return null!=e&&(null!=(e=this.images[e])&&(t=this.alt?e.fallback:e.value)),t},mxImageExport.prototype.includeOverlays=!1,mxImageExport.prototype.drawState=function(e,t){null!=e&&(this.visitStatesRecursive(e,t,this.drawCellState),this.includeOverlays&&this.visitStatesRecursive(e,t,this.drawOverlays))},mxImageExport.prototype.visitStatesRecursive=function(e,t,n){if(null!=e){n(e,t);for(var a=e.view.graph,i=a.model.getChildCount(e.cell),s=0;s<i;s++){var o=a.view.getState(a.model.getChildAt(e.cell,s));this.visitStatesRecursive(o,t,n)}}},mxImageExport.prototype.drawCellState=function(e,t){e.shape instanceof mxShape&&(t.save(),e.shape.paint(t),t.restore()),null!=e.text&&(t.save(),e.text.paint(t),t.restore())},mxImageExport.prototype.drawOverlays=function(e,n){null!=e.overlays&&e.overlays.visit(function(e,t){t instanceof mxShape&&t.paint(n)})},mxAbstractCanvas2D.prototype.state=null,mxAbstractCanvas2D.prototype.states=null,mxAbstractCanvas2D.prototype.path=null,mxAbstractCanvas2D.prototype.rotateHtml=!0,mxAbstractCanvas2D.prototype.lastX=0,mxAbstractCanvas2D.prototype.lastY=0,mxAbstractCanvas2D.prototype.moveOp="M",mxAbstractCanvas2D.prototype.lineOp="L",mxAbstractCanvas2D.prototype.quadOp="Q",mxAbstractCanvas2D.prototype.curveOp="C",mxAbstractCanvas2D.prototype.closeOp="Z",mxAbstractCanvas2D.prototype.pointerEvents=!1,mxAbstractCanvas2D.prototype.createUrlConverter=function(){return new mxUrlConverter},mxAbstractCanvas2D.prototype.reset=function(){this.state=this.createState(),this.states=[]},mxAbstractCanvas2D.prototype.createState=function(){return{dx:0,dy:0,scale:1,alpha:1,fillColor:null,fillAlpha:1,gradientColor:null,gradientAlpha:1,gradientDirection:null,strokeColor:null,strokeWidth:1,dashed:!1,dashPattern:"3 3",lineCap:"flat",lineJoin:"miter",miterLimit:10,fontColor:"#000000",fontBackgroundColor:null,fontBorderColor:null,fontSize:mxConstants.DEFAULT_FONTSIZE,fontFamily:mxConstants.DEFAULT_FONTFAMILY,fontStyle:0,shadow:!1,shadowColor:mxConstants.SHADOWCOLOR,shadowAlpha:mxConstants.SHADOW_OPACITY,shadowDx:mxConstants.SHADOW_OFFSET_X,shadowDy:mxConstants.SHADOW_OFFSET_Y,rotation:0,rotationCx:0,rotationCy:0}},mxAbstractCanvas2D.prototype.format=function(e){return Math.round(parseFloat(e))},mxAbstractCanvas2D.prototype.addOp=function(){if(null!=this.path&&(this.path.push(arguments[0]),2<arguments.length))for(var e=this.state,t=2;t<arguments.length;t+=2)this.lastX=arguments[t-1],this.lastY=arguments[t],this.path.push(this.format((this.lastX+e.dx)*e.scale)),this.path.push(this.format((this.lastY+e.dy)*e.scale))},mxAbstractCanvas2D.prototype.rotatePoint=function(e,t,n,a,i){return n*=Math.PI/180,mxUtils.getRotatedPoint(new mxPoint(e,t),Math.cos(n),Math.sin(n),new mxPoint(a,i))},mxAbstractCanvas2D.prototype.save=function(){this.states.push(this.state),this.state=mxUtils.clone(this.state)},mxAbstractCanvas2D.prototype.restore=function(){this.state=this.states.pop()},mxAbstractCanvas2D.prototype.scale=function(e){this.state.scale*=e,this.state.strokeWidth*=e},mxAbstractCanvas2D.prototype.translate=function(e,t){this.state.dx+=e,this.state.dy+=t},mxAbstractCanvas2D.prototype.setAlpha=function(e){this.state.alpha=e},mxAbstractCanvas2D.prototype.setFillColor=function(e){e==mxConstants.NONE&&(e=null),this.state.fillColor=e,this.state.gradientColor=null},mxAbstractCanvas2D.prototype.setGradient=function(e,t,n,a,i,s,o,r,l){(n=this.state).fillColor=e,n.fillAlpha=null!=r?r:1,n.gradientColor=t,n.gradientAlpha=null!=l?l:1,n.gradientDirection=o},mxAbstractCanvas2D.prototype.setStrokeColor=function(e){e==mxConstants.NONE&&(e=null),this.state.strokeColor=e},mxAbstractCanvas2D.prototype.setStrokeWidth=function(e){this.state.strokeWidth=e},mxAbstractCanvas2D.prototype.setDashed=function(e){this.state.dashed=e},mxAbstractCanvas2D.prototype.setDashPattern=function(e){this.state.dashPattern=e},mxAbstractCanvas2D.prototype.setLineCap=function(e){this.state.lineCap=e},mxAbstractCanvas2D.prototype.setLineJoin=function(e){this.state.lineJoin=e},mxAbstractCanvas2D.prototype.setMiterLimit=function(e){this.state.miterLimit=e},mxAbstractCanvas2D.prototype.setFontColor=function(e){e==mxConstants.NONE&&(e=null),this.state.fontColor=e},mxAbstractCanvas2D.prototype.setFontBackgroundColor=function(e){e==mxConstants.NONE&&(e=null),this.state.fontBackgroundColor=e},mxAbstractCanvas2D.prototype.setFontBorderColor=function(e){e==mxConstants.NONE&&(e=null),this.state.fontBorderColor=e},mxAbstractCanvas2D.prototype.setFontSize=function(e){this.state.fontSize=e},mxAbstractCanvas2D.prototype.setFontFamily=function(e){this.state.fontFamily=e},mxAbstractCanvas2D.prototype.setFontStyle=function(e){null==e&&(e=0),this.state.fontStyle=e},mxAbstractCanvas2D.prototype.setShadow=function(e){this.state.shadow=e},mxAbstractCanvas2D.prototype.setShadowColor=function(e){e==mxConstants.NONE&&(e=null),this.state.shadowColor=e},mxAbstractCanvas2D.prototype.setShadowAlpha=function(e){this.state.shadowAlpha=e},mxAbstractCanvas2D.prototype.setShadowOffset=function(e,t){this.state.shadowDx=e,this.state.shadowDy=t},mxAbstractCanvas2D.prototype.begin=function(){this.lastY=this.lastX=0,this.path=[]},mxAbstractCanvas2D.prototype.moveTo=function(e,t){this.addOp(this.moveOp,e,t)},mxAbstractCanvas2D.prototype.lineTo=function(e,t){this.addOp(this.lineOp,e,t)},mxAbstractCanvas2D.prototype.quadTo=function(e,t,n,a){this.addOp(this.quadOp,e,t,n,a)},mxAbstractCanvas2D.prototype.curveTo=function(e,t,n,a,i,s){this.addOp(this.curveOp,e,t,n,a,i,s)},mxAbstractCanvas2D.prototype.arcTo=function(e,t,n,a,i,s,o){for(e=mxUtils.arcToCurves(this.lastX,this.lastY,e,t,n,a,i,s,o),t=0;t<e.length;t+=6)this.curveTo(e[t],e[t+1],e[t+2],e[t+3],e[t+4],e[t+5])},mxAbstractCanvas2D.prototype.close=function(e,t,n,a,i,s){this.addOp(this.closeOp)},mxAbstractCanvas2D.prototype.end=function(){},mxUtils.extend(mxXmlCanvas2D,mxAbstractCanvas2D),mxXmlCanvas2D.prototype.textEnabled=!0,mxXmlCanvas2D.prototype.compressed=!0,mxXmlCanvas2D.prototype.writeDefaults=function(){var e;(e=this.createElement("fontfamily")).setAttribute("family",mxConstants.DEFAULT_FONTFAMILY),this.root.appendChild(e),(e=this.createElement("fontsize")).setAttribute("size",mxConstants.DEFAULT_FONTSIZE),this.root.appendChild(e),(e=this.createElement("shadowcolor")).setAttribute("color",mxConstants.SHADOWCOLOR),this.root.appendChild(e),(e=this.createElement("shadowalpha")).setAttribute("alpha",mxConstants.SHADOW_OPACITY),this.root.appendChild(e),(e=this.createElement("shadowoffset")).setAttribute("dx",mxConstants.SHADOW_OFFSET_X),e.setAttribute("dy",mxConstants.SHADOW_OFFSET_Y),this.root.appendChild(e)},mxXmlCanvas2D.prototype.format=function(e){return parseFloat(parseFloat(e).toFixed(2))},mxXmlCanvas2D.prototype.createElement=function(e){return this.root.ownerDocument.createElement(e)},mxXmlCanvas2D.prototype.save=function(){this.compressed&&mxAbstractCanvas2D.prototype.save.apply(this,arguments),this.root.appendChild(this.createElement("save"))},mxXmlCanvas2D.prototype.restore=function(){this.compressed&&mxAbstractCanvas2D.prototype.restore.apply(this,arguments),this.root.appendChild(this.createElement("restore"))},mxXmlCanvas2D.prototype.scale=function(e){if(this.compressed){if(this.state.scale==e)return;mxAbstractCanvas2D.prototype.setAlpha.apply(this,arguments)}var t=this.createElement("scale");t.setAttribute("scale",e),this.root.appendChild(t)},mxXmlCanvas2D.prototype.translate=function(e,t){var n=this.createElement("translate");n.setAttribute("dx",this.format(e)),n.setAttribute("dy",this.format(t)),this.root.appendChild(n)},mxXmlCanvas2D.prototype.rotate=function(e,t,n,a,i){var s=this.createElement("rotate");(0!=e||t||n)&&(s.setAttribute("theta",this.format(e)),s.setAttribute("flipH",t?"1":"0"),s.setAttribute("flipV",n?"1":"0"),s.setAttribute("cx",this.format(a)),s.setAttribute("cy",this.format(i)),this.root.appendChild(s))},mxXmlCanvas2D.prototype.setAlpha=function(e){if(this.compressed){if(this.state.alpha==e)return;mxAbstractCanvas2D.prototype.setAlpha.apply(this,arguments)}var t=this.createElement("alpha");t.setAttribute("alpha",this.format(e)),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setFillColor=function(e){if(e==mxConstants.NONE&&(e=null),this.compressed){if(this.state.fillColor==e)return;mxAbstractCanvas2D.prototype.setFillColor.apply(this,arguments)}var t=this.createElement("fillcolor");t.setAttribute("color",null!=e?e:mxConstants.NONE),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setGradient=function(e,t,n,a,i,s,o,r,l){if(null!=e&&null!=t){mxAbstractCanvas2D.prototype.setGradient.apply(this,arguments);var d=this.createElement("gradient");d.setAttribute("c1",e),d.setAttribute("c2",t),d.setAttribute("x",this.format(n)),d.setAttribute("y",this.format(a)),d.setAttribute("w",this.format(i)),d.setAttribute("h",this.format(s)),null!=o&&d.setAttribute("direction",o),null!=r&&d.setAttribute("alpha1",r),null!=l&&d.setAttribute("alpha2",l),this.root.appendChild(d)}},mxXmlCanvas2D.prototype.setStrokeColor=function(e){if(e==mxConstants.NONE&&(e=null),this.compressed){if(this.state.strokeColor==e)return;mxAbstractCanvas2D.prototype.setStrokeColor.apply(this,arguments)}var t=this.createElement("strokecolor");t.setAttribute("color",null!=e?e:mxConstants.NONE),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setStrokeWidth=function(e){if(this.compressed){if(this.state.strokeWidth==e)return;mxAbstractCanvas2D.prototype.setStrokeWidth.apply(this,arguments)}var t=this.createElement("strokewidth");t.setAttribute("width",this.format(e)),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setDashed=function(e){if(this.compressed){if(this.state.dashed==e)return;mxAbstractCanvas2D.prototype.setDashed.apply(this,arguments)}var t=this.createElement("dashed");t.setAttribute("dashed",e?"1":"0"),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setDashPattern=function(e){if(this.compressed){if(this.state.dashPattern==e)return;mxAbstractCanvas2D.prototype.setDashPattern.apply(this,arguments)}var t=this.createElement("dashpattern");t.setAttribute("pattern",e),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setLineCap=function(e){if(this.compressed){if(this.state.lineCap==e)return;mxAbstractCanvas2D.prototype.setLineCap.apply(this,arguments)}var t=this.createElement("linecap");t.setAttribute("cap",e),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setLineJoin=function(e){if(this.compressed){if(this.state.lineJoin==e)return;mxAbstractCanvas2D.prototype.setLineJoin.apply(this,arguments)}var t=this.createElement("linejoin");t.setAttribute("join",e),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setMiterLimit=function(e){if(this.compressed){if(this.state.miterLimit==e)return;mxAbstractCanvas2D.prototype.setMiterLimit.apply(this,arguments)}var t=this.createElement("miterlimit");t.setAttribute("limit",e),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setFontColor=function(e){if(this.textEnabled){if(e==mxConstants.NONE&&(e=null),this.compressed){if(this.state.fontColor==e)return;mxAbstractCanvas2D.prototype.setFontColor.apply(this,arguments)}var t=this.createElement("fontcolor");t.setAttribute("color",null!=e?e:mxConstants.NONE),this.root.appendChild(t)}},mxXmlCanvas2D.prototype.setFontBackgroundColor=function(e){if(this.textEnabled){if(e==mxConstants.NONE&&(e=null),this.compressed){if(this.state.fontBackgroundColor==e)return;mxAbstractCanvas2D.prototype.setFontBackgroundColor.apply(this,arguments)}var t=this.createElement("fontbackgroundcolor");t.setAttribute("color",null!=e?e:mxConstants.NONE),this.root.appendChild(t)}},mxXmlCanvas2D.prototype.setFontBorderColor=function(e){if(this.textEnabled){if(e==mxConstants.NONE&&(e=null),this.compressed){if(this.state.fontBorderColor==e)return;mxAbstractCanvas2D.prototype.setFontBorderColor.apply(this,arguments)}var t=this.createElement("fontbordercolor");t.setAttribute("color",null!=e?e:mxConstants.NONE),this.root.appendChild(t)}},mxXmlCanvas2D.prototype.setFontSize=function(e){if(this.textEnabled){if(this.compressed){if(this.state.fontSize==e)return;mxAbstractCanvas2D.prototype.setFontSize.apply(this,arguments)}var t=this.createElement("fontsize");t.setAttribute("size",e),this.root.appendChild(t)}},mxXmlCanvas2D.prototype.setFontFamily=function(e){if(this.textEnabled){if(this.compressed){if(this.state.fontFamily==e)return;mxAbstractCanvas2D.prototype.setFontFamily.apply(this,arguments)}var t=this.createElement("fontfamily");t.setAttribute("family",e),this.root.appendChild(t)}},mxXmlCanvas2D.prototype.setFontStyle=function(e){if(this.textEnabled){if(null==e&&(e=0),this.compressed){if(this.state.fontStyle==e)return;mxAbstractCanvas2D.prototype.setFontStyle.apply(this,arguments)}var t=this.createElement("fontstyle");t.setAttribute("style",e),this.root.appendChild(t)}},mxXmlCanvas2D.prototype.setShadow=function(e){if(this.compressed){if(this.state.shadow==e)return;mxAbstractCanvas2D.prototype.setShadow.apply(this,arguments)}var t=this.createElement("shadow");t.setAttribute("enabled",e?"1":"0"),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setShadowColor=function(e){if(this.compressed){if(e==mxConstants.NONE&&(e=null),this.state.shadowColor==e)return;mxAbstractCanvas2D.prototype.setShadowColor.apply(this,arguments)}var t=this.createElement("shadowcolor");t.setAttribute("color",null!=e?e:mxConstants.NONE),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setShadowAlpha=function(e){if(this.compressed){if(this.state.shadowAlpha==e)return;mxAbstractCanvas2D.prototype.setShadowAlpha.apply(this,arguments)}var t=this.createElement("shadowalpha");t.setAttribute("alpha",e),this.root.appendChild(t)},mxXmlCanvas2D.prototype.setShadowOffset=function(e,t){if(this.compressed){if(this.state.shadowDx==e&&this.state.shadowDy==t)return;mxAbstractCanvas2D.prototype.setShadowOffset.apply(this,arguments)}var n=this.createElement("shadowoffset");n.setAttribute("dx",e),n.setAttribute("dy",t),this.root.appendChild(n)},mxXmlCanvas2D.prototype.rect=function(e,t,n,a){var i=this.createElement("rect");i.setAttribute("x",this.format(e)),i.setAttribute("y",this.format(t)),i.setAttribute("w",this.format(n)),i.setAttribute("h",this.format(a)),this.root.appendChild(i)},mxXmlCanvas2D.prototype.roundrect=function(e,t,n,a,i,s){var o=this.createElement("roundrect");o.setAttribute("x",this.format(e)),o.setAttribute("y",this.format(t)),o.setAttribute("w",this.format(n)),o.setAttribute("h",this.format(a)),o.setAttribute("dx",this.format(i)),o.setAttribute("dy",this.format(s)),this.root.appendChild(o)},mxXmlCanvas2D.prototype.ellipse=function(e,t,n,a){var i=this.createElement("ellipse");i.setAttribute("x",this.format(e)),i.setAttribute("y",this.format(t)),i.setAttribute("w",this.format(n)),i.setAttribute("h",this.format(a)),this.root.appendChild(i)},mxXmlCanvas2D.prototype.image=function(e,t,n,a,i,s,o,r){i=this.converter.convert(i);var l=this.createElement("image");l.setAttribute("x",this.format(e)),l.setAttribute("y",this.format(t)),l.setAttribute("w",this.format(n)),l.setAttribute("h",this.format(a)),l.setAttribute("src",i),l.setAttribute("aspect",s?"1":"0"),l.setAttribute("flipH",o?"1":"0"),l.setAttribute("flipV",r?"1":"0"),this.root.appendChild(l)},mxXmlCanvas2D.prototype.begin=function(){this.root.appendChild(this.createElement("begin")),this.lastY=this.lastX=0},mxXmlCanvas2D.prototype.moveTo=function(e,t){var n=this.createElement("move");n.setAttribute("x",this.format(e)),n.setAttribute("y",this.format(t)),this.root.appendChild(n),this.lastX=e,this.lastY=t},mxXmlCanvas2D.prototype.lineTo=function(e,t){var n=this.createElement("line");n.setAttribute("x",this.format(e)),n.setAttribute("y",this.format(t)),this.root.appendChild(n),this.lastX=e,this.lastY=t},mxXmlCanvas2D.prototype.quadTo=function(e,t,n,a){var i=this.createElement("quad");i.setAttribute("x1",this.format(e)),i.setAttribute("y1",this.format(t)),i.setAttribute("x2",this.format(n)),i.setAttribute("y2",this.format(a)),this.root.appendChild(i),this.lastX=n,this.lastY=a},mxXmlCanvas2D.prototype.curveTo=function(e,t,n,a,i,s){var o=this.createElement("curve");o.setAttribute("x1",this.format(e)),o.setAttribute("y1",this.format(t)),o.setAttribute("x2",this.format(n)),o.setAttribute("y2",this.format(a)),o.setAttribute("x3",this.format(i)),o.setAttribute("y3",this.format(s)),this.root.appendChild(o),this.lastX=i,this.lastY=s},mxXmlCanvas2D.prototype.close=function(){this.root.appendChild(this.createElement("close"))},mxXmlCanvas2D.prototype.text=function(e,t,n,a,i,s,o,r,l,d,c,m){if(this.textEnabled&&null!=i){mxUtils.isNode(i)&&(i=mxUtils.getOuterHtml(i));var u=this.createElement("text");u.setAttribute("x",this.format(e)),u.setAttribute("y",this.format(t)),u.setAttribute("w",this.format(n)),u.setAttribute("h",this.format(a)),u.setAttribute("str",i),null!=s&&u.setAttribute("align",s),null!=o&&u.setAttribute("valign",o),u.setAttribute("wrap",r?"1":"0"),null==l&&(l=""),u.setAttribute("format",l),null!=d&&u.setAttribute("fill",d?"1":"0"),null!=c&&u.setAttribute("clip",c?"1":"0"),null!=m&&u.setAttribute("rotation",m),this.root.appendChild(u)}},mxXmlCanvas2D.prototype.stroke=function(){this.root.appendChild(this.createElement("stroke"))},mxXmlCanvas2D.prototype.fill=function(){this.root.appendChild(this.createElement("fill"))},mxXmlCanvas2D.prototype.fillAndStroke=function(){this.root.appendChild(this.createElement("fillstroke"))},mxUtils.extend(mxSvgCanvas2D,mxAbstractCanvas2D),mxSvgCanvas2D.prototype.node=null,mxSvgCanvas2D.prototype.matchHtmlAlignment=!0,mxSvgCanvas2D.prototype.textEnabled=!0,mxSvgCanvas2D.prototype.foEnabled=!0,mxSvgCanvas2D.prototype.strokeTolerance=0,mxSvgCanvas2D.prototype.refCount=0,mxSvgCanvas2D.prototype.blockImagePointerEvents=!1,mxSvgCanvas2D.prototype.reset=function(){mxAbstractCanvas2D.prototype.reset.apply(this,arguments),this.gradients=[]},mxSvgCanvas2D.prototype.createStyle=function(e){return(e=this.createElement("style")).setAttribute("type","text/css"),mxUtils.write(e,"svg{font-family:"+mxConstants.DEFAULT_FONTFAMILY+";font-size:"+mxConstants.DEFAULT_FONTSIZE+";fill:none;stroke-miterlimit:10}"),e},mxSvgCanvas2D.prototype.createElement=function(e,t){if(null!=this.root.ownerDocument.createElementNS)return this.root.ownerDocument.createElementNS(t||mxConstants.NS_SVG,e);var n=this.root.ownerDocument.createElement(e);return null!=t&&n.setAttribute("xmlns",t),n},mxSvgCanvas2D.prototype.createGradientId=function(e,t,n,a,i){return"#"==e.charAt(0)&&(e=e.substring(1)),"#"==t.charAt(0)&&(t=t.substring(1)),e=e.toLowerCase()+"-"+n,t=t.toLowerCase()+"-"+a,(n=null)==i||i==mxConstants.DIRECTION_SOUTH?n="s":i==mxConstants.DIRECTION_EAST?n="e":(a=e,e=t,t=a,i==mxConstants.DIRECTION_NORTH?n="s":i==mxConstants.DIRECTION_WEST&&(n="e")),"mx-gradient-"+e+"-"+t+"-"+n},mxSvgCanvas2D.prototype.getSvgGradient=function(e,t,n,a,i){var s=this.createGradientId(e,t,n,a,i),o=this.gradients[s];if(null==o){var r=this.root.ownerSVGElement,l=0,d=s+"-"+l;if(null!=r)for(o=r.ownerDocument.getElementById(d);null!=o&&o.ownerSVGElement!=r;)d=s+"-"+l++,o=r.ownerDocument.getElementById(d);else d="id"+ ++this.refCount;null==o&&((o=this.createSvgGradient(e,t,n,a,i)).setAttribute("id",d),null!=this.defs?this.defs.appendChild(o):r.appendChild(o)),this.gradients[s]=o}return o.getAttribute("id")},mxSvgCanvas2D.prototype.createSvgGradient=function(e,t,n,a,i){var s=this.createElement("linearGradient");return s.setAttribute("x1","0%"),s.setAttribute("y1","0%"),s.setAttribute("x2","0%"),s.setAttribute("y2","0%"),null==i||i==mxConstants.DIRECTION_SOUTH?s.setAttribute("y2","100%"):i==mxConstants.DIRECTION_EAST?s.setAttribute("x2","100%"):i==mxConstants.DIRECTION_NORTH?s.setAttribute("y1","100%"):i==mxConstants.DIRECTION_WEST&&s.setAttribute("x1","100%"),n=n<1?";stop-opacity:"+n:"",(i=this.createElement("stop")).setAttribute("offset","0%"),i.setAttribute("style","stop-color:"+e+n),s.appendChild(i),n=a<1?";stop-opacity:"+a:"",(i=this.createElement("stop")).setAttribute("offset","100%"),i.setAttribute("style","stop-color:"+t+n),s.appendChild(i),s},mxSvgCanvas2D.prototype.addNode=function(e,t){var n=this.node,a=this.state;if(null!=n){if("path"==n.nodeName){if(!(null!=this.path&&0<this.path.length))return;n.setAttribute("d",this.path.join(" "))}e&&null!=a.fillColor?this.updateFill():this.styleEnabled||("ellipse"!=n.nodeName||!mxClient.IS_NS||mxClient.IS_GC||mxClient.IS_SF?n.setAttribute("fill","none"):n.setAttribute("fill","transparent"),e=!1),t&&null!=a.strokeColor?this.updateStroke():this.styleEnabled||n.setAttribute("stroke","none"),null!=a.transform&&0<a.transform.length&&n.setAttribute("transform",a.transform),a.shadow&&this.root.appendChild(this.createShadow(n)),0<this.strokeTolerance&&!e&&this.root.appendChild(this.createTolerance(n)),this.pointerEvents&&("path"!=n.nodeName||this.path[this.path.length-1]==this.closeOp)&&n.setAttribute("pointer-events","all"),this.root.appendChild(n)}},mxSvgCanvas2D.prototype.updateFill=function(){var e=this.state;e.alpha<1&&this.node.setAttribute("fill-opacity",e.alpha),null!=e.fillColor&&(null!=e.gradientColor?(e=this.getSvgGradient(e.fillColor,e.gradientColor,e.fillAlpha,e.gradientAlpha,e.gradientDirection),this.node.setAttribute("fill","url(#"+e+")")):this.node.setAttribute("fill",e.fillColor.toLowerCase()))},mxSvgCanvas2D.prototype.updateStroke=function(){var e=this.state;this.node.setAttribute("stroke",e.strokeColor.toLowerCase()),e.alpha<1&&this.node.setAttribute("stroke-opacity",e.alpha);var t=Math.max(1,this.format(e.strokeWidth*e.scale));1!=t&&this.node.setAttribute("stroke-width",t),"path"==this.node.nodeName&&this.updateStrokeAttributes(),e.dashed&&this.node.setAttribute("stroke-dasharray",this.createDashPattern(t))},mxSvgCanvas2D.prototype.updateStrokeAttributes=function(){var e=this.state;if(null!=e.lineJoin&&"miter"!=e.lineJoin&&this.node.setAttribute("stroke-linejoin",e.lineJoin),null!=e.lineCap){var t=e.lineCap;"flat"==t&&(t="butt"),"butt"!=t&&this.node.setAttribute("stroke-linecap",t)}null!=e.miterLimit&&(!this.styleEnabled||10!=e.miterLimit)&&this.node.setAttribute("stroke-miterlimit",e.miterLimit)},mxSvgCanvas2D.prototype.createDashPattern=function(e){var t=this.state.dashPattern.split(" "),n=[];if(0<t.length)for(var a=0;a<t.length;a++)n[a]=Number(t[a])*e;return n.join(" ")},mxSvgCanvas2D.prototype.createTolerance=function(e){e=e.cloneNode(!0);var t=parseFloat(e.getAttribute("stroke-width")||1)+this.strokeTolerance;return e.setAttribute("pointer-events","stroke"),e.setAttribute("visibility","hidden"),e.removeAttribute("stroke-dasharray"),e.setAttribute("stroke-width",t),e.setAttribute("fill","none"),e.setAttribute("stroke",mxClient.IS_OP?"none":"white"),e},mxSvgCanvas2D.prototype.createShadow=function(e){e=e.cloneNode(!0);var t=this.state;return"none"!=e.getAttribute("fill")&&e.setAttribute("fill",t.shadowColor),"none"!=e.getAttribute("stroke")&&e.setAttribute("stroke",t.shadowColor),e.setAttribute("transform","translate("+this.format(t.shadowDx*t.scale)+","+this.format(t.shadowDy*t.scale)+")"+(t.transform||"")),e.setAttribute("opacity",t.shadowAlpha),e},mxSvgCanvas2D.prototype.rotate=function(e,t,n,a,i){if(0!=e||t||n){var s=this.state;if(a+=s.dx,i+=s.dy,a*=s.scale,i*=s.scale,s.transform=s.transform||"",t&&n)e+=180;else if(t^n){var o=t?a:0,r=t?-1:1,l=n?i:0,d=n?-1:1;s.transform+="translate("+this.format(o)+","+this.format(l)+")scale("+this.format(r)+","+this.format(d)+")translate("+this.format(-o)+","+this.format(-l)+")"}(t?!n:n)&&(e*=-1),0!=e&&(s.transform+="rotate("+this.format(e)+","+this.format(a)+","+this.format(i)+")"),s.rotation+=e,s.rotationCx=a,s.rotationCy=i}},mxSvgCanvas2D.prototype.begin=function(){mxAbstractCanvas2D.prototype.begin.apply(this,arguments),this.node=this.createElement("path")},mxSvgCanvas2D.prototype.rect=function(e,t,n,a){var i=this.state,s=this.createElement("rect");s.setAttribute("x",this.format((e+i.dx)*i.scale)),s.setAttribute("y",this.format((t+i.dy)*i.scale)),s.setAttribute("width",this.format(n*i.scale)),s.setAttribute("height",this.format(a*i.scale)),this.node=s},mxSvgCanvas2D.prototype.roundrect=function(e,t,n,a,i,s){this.rect(e,t,n,a),0<i&&this.node.setAttribute("rx",this.format(i*this.state.scale)),0<s&&this.node.setAttribute("ry",this.format(s*this.state.scale))},mxSvgCanvas2D.prototype.ellipse=function(e,t,n,a){var i=this.state,s=this.createElement("ellipse");s.setAttribute("cx",Math.round((e+n/2+i.dx)*i.scale)),s.setAttribute("cy",Math.round((t+a/2+i.dy)*i.scale)),s.setAttribute("rx",n/2*i.scale),s.setAttribute("ry",a/2*i.scale),this.node=s},mxSvgCanvas2D.prototype.image=function(e,t,n,a,i,s,o,r){i=this.converter.convert(i),s=null==s||s,o=null!=o&&o,r=null!=r&&r;var l=this.state;e+=l.dx,t+=l.dy;var d=this.createElement("image");if(d.setAttribute("x",this.format(e*l.scale)),d.setAttribute("y",this.format(t*l.scale)),d.setAttribute("width",this.format(n*l.scale)),d.setAttribute("height",this.format(a*l.scale)),null==d.setAttributeNS?d.setAttribute("xlink:href",i):d.setAttributeNS(mxConstants.NS_XLINK,"href",i),s||d.setAttribute("preserveAspectRatio","none"),l.alpha<1&&d.setAttribute("opacity",l.alpha),i=this.state.transform||"",o||r){var c=s=1,m=0,u=0;o&&(s=-1,m=-n-2*e),r&&(c=-1,u=-a-2*t),i+="scale("+s+","+c+")translate("+m+","+u+")"}0<i.length&&d.setAttribute("transform",i),this.root.appendChild(d),this.blockImagePointerEvents&&(d.setAttribute("style","pointer-events:none"),(d=this.createElement("rect")).setAttribute("visibility","hidden"),d.setAttribute("pointer-events","fill"),d.setAttribute("x",this.format(e*l.scale)),d.setAttribute("y",this.format(t*l.scale)),d.setAttribute("width",this.format(n*l.scale)),d.setAttribute("height",this.format(a*l.scale)),this.root.appendChild(d))},mxSvgCanvas2D.prototype.createDiv=function(e,t,n,a,i){return n=this.state,a="display:inline-block;font-size:"+Math.round(n.fontSize)+"px;font-family:"+n.fontFamily+";color:"+n.fontColor+";line-height:"+Math.round(n.fontSize*mxConstants.LINE_HEIGHT)+"px;"+a,(n.fontStyle&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD&&(a+="font-weight:bold;"),(n.fontStyle&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC&&(a+="font-style:italic;"),(n.fontStyle&mxConstants.FONT_UNDERLINE)==mxConstants.FONT_UNDERLINE&&(a+="font-decoration:underline;"),t==mxConstants.ALIGN_CENTER?a+="text-align:center;":t==mxConstants.ALIGN_RIGHT&&(a+="text-align:right;"),t="",null!=n.fontBackgroundColor&&(t+="background-color:"+n.fontBackgroundColor+";"),null!=n.fontBorderColor&&(t+="border:1px solid "+n.fontBorderColor+";"),mxUtils.isNode(e)||((n=document.createElement("textarea")).innerHTML=e.replace(/&lt;/g,"&amp;lt;").replace(/&gt;/g,"&amp;gt;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),e=n.value,i?a+=t:0<t.length&&(e='<div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;'+t+'">'+e+"</div>")),!mxClient.IS_IE&&document.createElementNS?((i=document.createElementNS("http://www.w3.org/1999/xhtml","div")).setAttribute("style",a),mxUtils.isNode(e)?this.root.ownerDocument!=document?i.appendChild(e.cloneNode(!0)):i.appendChild(e):i.innerHTML=e,i):(mxUtils.isNode(e)&&this.root.ownerDocument!=document&&(e=e.outerHTML),e=e.replace(/<br>/g,"<br />").replace(/<hr>/g,"<hr />"),mxUtils.parseXml('<div xmlns="http://www.w3.org/1999/xhtml" style="'+a+'">'+e+"</div>").documentElement)},mxSvgCanvas2D.prototype.text=function(e,t,n,a,i,s,o,r,l,d,c,m){if(this.textEnabled&&null!=i){m=null!=m?m:0;var u=this.state;if(e+=u.dx,t+=u.dy,this.foEnabled&&"html"==l){var p="vertical-align:top;";if(c?(p+="overflow:hidden;",0<a&&(p+="max-height:"+Math.round(a)+"px;"),0<n&&(p+="width:"+Math.round(n)+"px;")):d&&(p+="width:"+Math.round(n)+"px;",0<a&&(p+="max-height:"+Math.round(a)+"px;")),r?(!c&&0<n&&(p+="width:"+Math.round(n)+"px;"),p+="white-space:normal;"):p+="white-space:nowrap;",r=this.createElement("g"),u.alpha<1&&r.setAttribute("opacity",u.alpha),(l=this.createElement("foreignObject")).setAttribute("pointer-events","all"),null!=(p=this.createDiv(i,s,o,p,d))){r.appendChild(l),this.root.appendChild(r);var g=0;if(mxClient.IS_IE&&!mxClient.IS_SVG){var v=document.createElement("div");v.style.cssText=p.getAttribute("style"),v.style.display=mxClient.IS_QUIRKS?"inline":"inline-block",v.style.visibility="hidden",v.innerHTML=mxUtils.isNode(i)?i.outerHTML:i,document.body.appendChild(v),g=v.offsetWidth,a=mxClient.IS_QUIRKS&&0<a&&c?Math.min(a,v.offsetHeight+2):v.offsetHeight,v.parentNode.removeChild(v),l.appendChild(p)}else this.root.ownerDocument!=document?(p.style.visibility="hidden",document.body.appendChild(p),g=p.offsetWidth,a=p.offsetHeight,l.appendChild(p),p.style.visibility=""):(l.appendChild(p),g=p.offsetWidth,a=p.offsetHeight);n=d?Math.max(n,g):g,u.alpha<1&&r.setAttribute("opacity",u.alpha),d=i=0,s==mxConstants.ALIGN_CENTER?i-=n/2:s==mxConstants.ALIGN_RIGHT&&(i-=n),e+=i,o==mxConstants.ALIGN_MIDDLE?d-=a/2:o==mxConstants.ALIGN_BOTTOM&&(d-=a),t+=d,s=1!=u.scale?"scale("+u.scale+")":"",0!=u.rotation&&this.rotateHtml?(s+="rotate("+u.rotation+","+n/2+","+a/2+")",e=(t=this.rotatePoint((e+n/2)*u.scale,(t+a/2)*u.scale,u.rotation,u.rotationCx,u.rotationCy)).x-n*u.scale/2,t=t.y-a*u.scale/2):(e*=u.scale,t*=u.scale),0!=m&&(s+="rotate("+m+","+-i+","+-d+")"),r.setAttribute("transform","translate("+Math.round(e)+","+Math.round(t)+")"+s),l.setAttribute("width",Math.round(Math.max(1,n))),l.setAttribute("height",Math.round(Math.max(1,a)))}}else this.plainText(e,t,n,a,i,s,o,r,d,c,m)}},mxSvgCanvas2D.prototype.createClip=function(e,t,n,a){for(var i="mx-clip-"+(e=Math.round(e))+"-"+(t=Math.round(t))+"-"+(n=Math.round(n))+"-"+(a=Math.round(a)),s=0,o=i+"-"+s;null!=document.getElementById(o);)o=i+"-"+ ++s;return clip=this.createElement("clipPath"),clip.setAttribute("id",o),(i=this.createElement("rect")).setAttribute("x",e),i.setAttribute("y",t),i.setAttribute("width",n),i.setAttribute("height",a),clip.appendChild(i),clip},mxSvgCanvas2D.prototype.plainText=function(e,t,n,a,i,s,o,r,l,d,c){c=null!=c?c:0,r=this.state;var m=Math.round(r.fontSize),u=this.createElement("g"),p=r.transform||"";if(0!=c&&(p+="rotate("+c+","+this.format(e*r.scale)+","+this.format(t*r.scale)+")"),d&&0<n&&0<a){var g=e;c=t,s==mxConstants.ALIGN_CENTER?g-=n/2:s==mxConstants.ALIGN_RIGHT&&(g-=n),o==mxConstants.ALIGN_MIDDLE?c-=a/2:o==mxConstants.ALIGN_BOTTOM&&(c-=a),c=this.createClip(g*r.scale-2,c*r.scale-2,n*r.scale+4,a*r.scale+4),null!=this.defs?this.defs.appendChild(c):this.root.appendChild(c),u.setAttribute("clip-path","url(#"+c.getAttribute("id")+")")}this.updateFont(u,s),"start"!=(c=s==mxConstants.ALIGN_RIGHT?"end":s==mxConstants.ALIGN_CENTER?"middle":"start")&&u.setAttribute("text-anchor",c),(!this.styleEnabled||m!=mxConstants.DEFAULT_FONTSIZE)&&u.setAttribute("font-size",Math.round(m*r.scale)+"px"),0<p.length&&u.setAttribute("transform",p),r.alpha<1&&u.setAttribute("opacity",r.alpha);p=i.split("\n"),g=Math.round(m*mxConstants.LINE_HEIGHT);var v=m+(p.length-1)*g;for(c=t+m-1,o==mxConstants.ALIGN_MIDDLE?c-=(a=(this.matchHtmlAlignment&&d&&0<a?Math.min(v,a):v)/2)+1:o==mxConstants.ALIGN_BOTTOM&&(c-=(a=this.matchHtmlAlignment&&d&&0<a?Math.min(v,a):v)+2),a=0;a<p.length;a++)0<p[a].length&&0<mxUtils.trim(p[a]).length&&((d=this.createElement("text")).setAttribute("x",this.format(e*r.scale)),d.setAttribute("y",this.format(c*r.scale)),mxUtils.write(d,p[a]),u.appendChild(d)),c+=g;this.root.appendChild(u),this.addTextBackground(u,i,e,t,n,v,s,o,l)},mxSvgCanvas2D.prototype.updateFont=function(e){var t=this.state;e.setAttribute("fill",t.fontColor),(!this.styleEnabled||t.fontFamily!=mxConstants.DEFAULT_FONTFAMILY)&&e.setAttribute("font-family",t.fontFamily),(t.fontStyle&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD&&e.setAttribute("font-weight","bold"),(t.fontStyle&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC&&e.setAttribute("font-style","italic"),(t.fontStyle&mxConstants.FONT_UNDERLINE)==mxConstants.FONT_UNDERLINE&&e.setAttribute("text-decoration","underline")},mxSvgCanvas2D.prototype.addTextBackground=function(e,t,n,a,i,s,o,r,l){var d=this.state;if(null!=d.fontBackgroundColor||null!=d.fontBorderColor){var c=null;null!=(c=l?(o==mxConstants.ALIGN_CENTER?n-=i/2:o==mxConstants.ALIGN_RIGHT&&(n-=i),r==mxConstants.ALIGN_MIDDLE?a-=s/2:r==mxConstants.ALIGN_BOTTOM&&(a-=s),new mxRectangle((n+1)*d.scale,a*d.scale,(i-2)*d.scale,(s+2)*d.scale)):null!=e.getBBox&&this.root.ownerDocument==document?(c=e.getBBox(),t=mxClient.IS_IE&&mxClient.IS_SVG,new mxRectangle(c.x,c.y+(t?0:1),c.width,c.height+(t?1:0))):((c=document.createElement("div")).style.lineHeight=Math.round(d.fontSize*mxConstants.LINE_HEIGHT)+"px",c.style.fontSize=Math.round(d.fontSize)+"px",c.style.fontFamily=d.fontFamily,c.style.whiteSpace="nowrap",c.style.position="absolute",c.style.visibility="hidden",c.style.display=mxClient.IS_QUIRKS?"inline":"inline-block",c.style.zoom="1",(d.fontStyle&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD&&(c.style.fontWeight="bold"),(d.fontStyle&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC&&(c.style.fontStyle="italic"),t=mxUtils.htmlEntities(t,!1),c.innerHTML=t.replace(/\n/g,"<br/>"),document.body.appendChild(c),i=c.offsetWidth,s=c.offsetHeight,c.parentNode.removeChild(c),o==mxConstants.ALIGN_CENTER?n-=i/2:o==mxConstants.ALIGN_RIGHT&&(n-=i),r==mxConstants.ALIGN_MIDDLE?a-=s/2:r==mxConstants.ALIGN_BOTTOM&&(a-=s),new mxRectangle((n+1)*d.scale,(a+2)*d.scale,i*d.scale,(s+1)*d.scale)))&&((t=this.createElement("rect")).setAttribute("fill",d.fontBackgroundColor||"none"),t.setAttribute("stroke",d.fontBorderColor||"none"),t.setAttribute("x",Math.floor(c.x-1)),t.setAttribute("y",Math.floor(c.y-1)),t.setAttribute("width",Math.ceil(c.width+2)),t.setAttribute("height",Math.ceil(c.height)),d=null!=d.fontBorderColor?Math.max(1,this.format(d.scale)):0,t.setAttribute("stroke-width",d),this.root.ownerDocument==document&&1==mxUtils.mod(d,2)&&t.setAttribute("transform","translate(0.5, 0.5)"),e.insertBefore(t,e.firstChild))}},mxSvgCanvas2D.prototype.stroke=function(){this.addNode(!1,!0)},mxSvgCanvas2D.prototype.fill=function(){this.addNode(!0,!1)},mxSvgCanvas2D.prototype.fillAndStroke=function(){this.addNode(!0,!0)};var mxVmlCanvas2D=function(e){mxAbstractCanvas2D.call(this),this.root=e};function mxGuide(e,t){this.graph=e,this.setStates(t)}function mxStencil(e){this.desc=e,this.parseDescription(),this.parseConstraints()}function mxShape(e){this.stencil=e,this.strokewidth=1,this.rotation=0,this.opacity=100,this.flipV=this.flipH=!1}mxUtils.extend(mxVmlCanvas2D,mxAbstractCanvas2D),mxVmlCanvas2D.prototype.node=null,mxVmlCanvas2D.prototype.textEnabled=!0,mxVmlCanvas2D.prototype.moveOp="m",mxVmlCanvas2D.prototype.lineOp="l",mxVmlCanvas2D.prototype.curveOp="c",mxVmlCanvas2D.prototype.closeOp="x",mxVmlCanvas2D.prototype.rotatedHtmlBackground="",mxVmlCanvas2D.prototype.vmlScale=1,mxVmlCanvas2D.prototype.addNode=function(e,t){var n=this.node,a=this.state;if(null!=n){if("shape"==n.nodeName){if(!(null!=this.path&&0<this.path.length))return;n.path=this.path.join(" ")+" e",n.style.width=this.root.style.width,n.style.height=this.root.style.height,n.coordsize=parseInt(n.style.width)+" "+parseInt(n.style.height)}n.strokeweight=this.format(Math.max(1,a.strokeWidth*a.scale/this.vmlScale))+"px",a.shadow&&this.root.appendChild(this.createShadow(n,e&&null!=a.fillColor,t&&null!=a.strokeColor)),t&&null!=a.strokeColor?(n.stroked="true",n.strokecolor=a.strokeColor):n.stroked="false",n.appendChild(this.createStroke()),e&&null!=a.fillColor?n.appendChild(this.createFill()):!this.pointerEvents||"shape"==n.nodeName&&this.path[this.path.length-1]!=this.closeOp?n.filled="false":n.appendChild(this.createTransparentFill()),this.root.appendChild(n)}},mxVmlCanvas2D.prototype.createTransparentFill=function(){var e=document.createElement(mxClient.VML_PREFIX+":fill");return e.src=mxClient.imageBasePath+"/transparent.gif",e.type="tile",e},mxVmlCanvas2D.prototype.createFill=function(){var e=this.state,t=document.createElement(mxClient.VML_PREFIX+":fill");if(t.color=e.fillColor,null!=e.gradientColor){t.type="gradient",t.method="none",t.color2=e.gradientColor;var n=180-e.rotation;n=e.gradientDirection==mxConstants.DIRECTION_WEST?n-(90+("x"==this.root.style.flip?180:0)):e.gradientDirection==mxConstants.DIRECTION_EAST?n+(90+("x"==this.root.style.flip?180:0)):e.gradientDirection==mxConstants.DIRECTION_NORTH?n-(180+("y"==this.root.style.flip?-180:0)):n+("y"==this.root.style.flip?-180:0);"x"!=this.root.style.flip&&"y"!=this.root.style.flip||(n*=-1),t.angle=mxUtils.mod(n,360),t.opacity=100*e.alpha*e.fillAlpha+"%",t.setAttribute(mxClient.OFFICE_PREFIX+":opacity2",100*e.alpha*e.gradientAlpha+"%")}else e.alpha<1&&(t.opacity=100*e.alpha+"%");return t},mxVmlCanvas2D.prototype.createStroke=function(){var e=this.state,t=document.createElement(mxClient.VML_PREFIX+":stroke");return t.endcap=e.lineCap||"flat",t.joinstyle=e.lineJoin||"miter",t.miterlimit=e.miterLimit||"10",e.alpha<1&&(t.opacity=100*e.alpha+"%"),e.dashed&&(t.dashstyle=this.getVmlDashStyle()),t},mxVmlCanvas2D.prototype.getVmlDashStyle=function(){var e="dash";if(null!=this.state.dashPattern){var t=this.state.dashPattern.split(" ");0<t.length&&1==t[0]&&(e="0 2")}return e},mxVmlCanvas2D.prototype.createShadow=function(e,t,n){var a=this.state,i=-a.rotation*(Math.PI/180),s=Math.cos(i),o=(i=Math.sin(i),a.shadowDx*a.scale),r=a.shadowDy*a.scale;"x"==this.root.style.flip?o*=-1:"y"==this.root.style.flip&&(r*=-1);var l=e.cloneNode(!0);return l.style.marginLeft=Math.round(o*s-r*i)+"px",l.style.marginTop=Math.round(o*i+r*s)+"px",8==document.documentMode&&(l.strokeweight=e.strokeweight,"shape"==e.nodeName&&(l.path=this.path.join(" ")+" e",l.style.width=this.root.style.width,l.style.height=this.root.style.height,l.coordsize=parseInt(e.style.width)+" "+parseInt(e.style.height))),n?(l.strokecolor=a.shadowColor,l.appendChild(this.createShadowStroke())):l.stroked="false",t?l.appendChild(this.createShadowFill()):l.filled="false",l},mxVmlCanvas2D.prototype.createShadowFill=function(){var e=document.createElement(mxClient.VML_PREFIX+":fill");return e.color=this.state.shadowColor,e.opacity=100*this.state.alpha*this.state.shadowAlpha+"%",e},mxVmlCanvas2D.prototype.createShadowStroke=function(){var e=this.createStroke();return e.opacity=100*this.state.alpha*this.state.shadowAlpha+"%",e},mxVmlCanvas2D.prototype.rotate=function(e,t,n,a,i){t&&n?e+=180:t?this.root.style.flip="x":n&&(this.root.style.flip="y"),(t?!n:n)&&(e*=-1),this.root.style.rotation=e,this.state.rotation+=e,this.state.rotationCx=a,this.state.rotationCy=i},mxVmlCanvas2D.prototype.begin=function(){mxAbstractCanvas2D.prototype.begin.apply(this,arguments),this.node=document.createElement(mxClient.VML_PREFIX+":shape"),this.node.style.position="absolute"},mxVmlCanvas2D.prototype.quadTo=function(e,t,n,a){var i=this.state,s=(this.lastX+i.dx)*i.scale,o=(this.lastY+i.dy)*i.scale;e=(e+i.dx)*i.scale;o+=2/3*((t=(t+i.dy)*i.scale)-o);var r=(n=(n+i.dx)*i.scale)+2/3*(e-n);t=(a=(a+i.dy)*i.scale)+2/3*(t-a),this.path.push("c "+this.format(s+2/3*(e-s))+" "+this.format(o)+" "+this.format(r)+" "+this.format(t)+" "+this.format(n)+" "+this.format(a)),this.lastX=n/i.scale-i.dx,this.lastY=a/i.scale-i.dy},mxVmlCanvas2D.prototype.createRect=function(e,t,n,a,i){var s=this.state;return(e=document.createElement(e)).style.position="absolute",e.style.left=this.format((t+s.dx)*s.scale)+"px",e.style.top=this.format((n+s.dy)*s.scale)+"px",e.style.width=this.format(a*s.scale)+"px",e.style.height=this.format(i*s.scale)+"px",e},mxVmlCanvas2D.prototype.rect=function(e,t,n,a){this.node=this.createRect(mxClient.VML_PREFIX+":rect",e,t,n,a)},mxVmlCanvas2D.prototype.roundrect=function(e,t,n,a,i,s){this.node=this.createRect(mxClient.VML_PREFIX+":roundrect",e,t,n,a),this.node.setAttribute("arcsize",Math.max(100*i/n,100*s/a)+"%")},mxVmlCanvas2D.prototype.ellipse=function(e,t,n,a){this.node=this.createRect(mxClient.VML_PREFIX+":oval",e,t,n,a)},mxVmlCanvas2D.prototype.image=function(e,t,n,a,i,s,o,r){var l=null;s?((l=this.createRect(mxClient.VML_PREFIX+":rect",e,t,n,a)).stroked="false",(e=document.createElement(mxClient.VML_PREFIX+":fill")).aspect=s?"atmost":"ignore",e.rotate="true",e.type="frame",e.src=i,l.appendChild(e)):(l=this.createRect(mxClient.VML_PREFIX+":image",e,t,n,a)).src=i,o&&r?l.style.rotation="180":o?l.style.flip="x":r&&(l.style.flip="y"),this.state.alpha<1&&(l.style.filter+="alpha(opacity="+100*this.state.alpha+")"),this.root.appendChild(l)},mxVmlCanvas2D.prototype.createDiv=function(e,t,n,a){n=document.createElement("div");var i=this.state,s="";return null!=i.fontBackgroundColor&&(s+="background-color:"+i.fontBackgroundColor+";"),null!=i.fontBorderColor&&(s+="border:1px solid "+i.fontBorderColor+";"),mxUtils.isNode(e)?n.appendChild(e):0<s.length&&!a?((a=document.createElement("div")).style.cssText=s,a.style.display=mxClient.IS_QUIRKS?"inline":"inline-block",a.style.zoom="1",a.innerHTML=e,n.appendChild(a)):(n.style.cssText=s,n.innerHTML=e),(e=n.style).fontSize=Math.round(i.fontSize/this.vmlScale)+"px",e.fontFamily=i.fontFamily,e.color=i.fontColor,e.verticalAlign="top",e.textAlign=t||"left",e.lineHeight=Math.round(i.fontSize*mxConstants.LINE_HEIGHT/this.vmlScale)+"px",(i.fontStyle&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD&&(e.fontWeight="bold"),(i.fontStyle&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC&&(e.fontStyle="italic"),(i.fontStyle&mxConstants.FONT_UNDERLINE)==mxConstants.FONT_UNDERLINE&&(e.fontDecoration="underline"),n},mxVmlCanvas2D.prototype.text=function(e,t,n,a,i,s,o,r,l,d,c,m){if(this.textEnabled&&null!=i){var u=this.state;if("html"==l){null!=u.rotation&&(e=(t=this.rotatePoint(e,t,u.rotation,u.rotationCx,u.rotationCy)).x,t=t.y),8==document.documentMode?(e+=u.dx,t+=u.dy):(e*=u.scale,t*=u.scale),(l=8==document.documentMode?document.createElement(mxClient.VML_PREFIX+":group"):document.createElement("div")).style.position="absolute",l.style.display="inline",l.style.left=this.format(e)+"px",l.style.top=this.format(t)+"px",l.style.zoom=u.scale;var p=document.createElement("div");p.style.position="relative",p.style.display="inline";var g=(v=mxUtils.getAlignmentAsPoint(s,o)).x,v=v.y;if(i=this.createDiv(i,s,o,d),s=document.createElement("div"),r?(!c&&0<n&&(i.style.width=Math.round(n)+"px"),i.style.whiteSpace="normal"):i.style.whiteSpace="nowrap",r=u.rotation+(m||0),this.rotateHtml&&0!=r?(s.style.display="inline",s.style.zoom="1",s.appendChild(i),8==document.documentMode&&"DIV"!=this.root.nodeName?(p.appendChild(s),l.appendChild(p)):l.appendChild(s)):8==document.documentMode?(p.appendChild(i),l.appendChild(p)):(i.style.display="inline",l.appendChild(i)),"DIV"!=this.root.nodeName?((m=document.createElement(mxClient.VML_PREFIX+":rect")).stroked="false",m.filled="false",m.appendChild(l),this.root.appendChild(m)):this.root.appendChild(l),c?(i.style.overflow="hidden",0<n&&(i.style.width=Math.round(n)+"px"),0<a&&8==document.documentMode&&(i.style.maxHeight=Math.round(a)+"px")):d&&(i.style.width=n+"px",0<a&&(i.style.maxHeight=Math.round(a)+"px")),this.rotateHtml&&0!=r){n=r*(Math.PI/180),r=parseFloat(parseFloat(Math.cos(n)).toFixed(8)),m=parseFloat(parseFloat(Math.sin(-n)).toFixed(8)),(n%=2*Math.PI)<0&&(n+=2*Math.PI),(n%=Math.PI)>Math.PI/2&&(n=Math.PI-n),o=Math.cos(n);var h=Math.sin(n);8==document.documentMode&&(i.style.display="inline-block",s.style.display="inline-block",p.style.display="inline-block"),i.style.visibility="hidden",document.body.appendChild(i),n=i.offsetWidth,p=i.offsetHeight,mxClient.IS_QUIRKS&&(c||d)&&a<p&&(p=a,i.style.height=p+"px"),c=((a=p)-a*o+n*-h)/2-m*n*(g+.5)+r*a*(v+.5),d=(n-n*o+a*-h)/2+r*n*(g+.5)+m*a*(v+.5),"group"==l.nodeName&&"DIV"==this.root.nodeName?((g=document.createElement("div")).style.display="inline-block",g.style.position="absolute",g.style.left=this.format(e+(d-n/2)*u.scale)+"px",g.style.top=this.format(t+(c-a/2)*u.scale)+"px",l.parentNode.appendChild(g),g.appendChild(l)):(u=8==document.documentMode?1:u.scale,l.style.left=this.format(e+(d-n/2)*u)+"px",l.style.top=this.format(t+(c-a/2)*u)+"px"),s.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11="+r+", M12="+m+", M21="+-m+", M22="+r+", sizingMethod='auto expand')",s.style.backgroundColor=this.rotatedHtmlBackground,this.state.alpha<1&&(s.style.filter+="alpha(opacity="+100*this.state.alpha+")"),i.style.visibility="",s.appendChild(i)}else 8!=document.documentMode?(i.style.verticalAlign="top",this.state.alpha<1&&(l.style.filter="alpha(opacity="+100*this.state.alpha+")"),u=i.parentNode,i.style.visibility="hidden",document.body.appendChild(i),n=i.offsetWidth,p=i.offsetHeight,mxClient.IS_QUIRKS&&c&&a<p&&(p=a,i.style.height=p+"px"),a=p,i.style.visibility="",u.appendChild(i),l.style.left=this.format(e+n*g*this.state.scale)+"px",l.style.top=this.format(t+a*v*this.state.scale)+"px"):(this.state.alpha<1&&(i.style.filter="alpha(opacity="+100*this.state.alpha+")"),p.style.left=100*g+"%",p.style.top=100*v+"%")}else this.plainText(e,t,n,a,mxUtils.htmlEntities(i,!1),s,o,r,l,d,c,m)}},mxVmlCanvas2D.prototype.plainText=function(e,t,n,a,i,s,o,r,l,d,c,m){e=(e+(a=this.state).dx)*a.scale,t=(t+a.dy)*a.scale,(n=document.createElement(mxClient.VML_PREFIX+":shape")).style.width="1px",n.style.height="1px",n.stroked="false",(d=document.createElement(mxClient.VML_PREFIX+":fill")).color=a.fontColor,d.opacity=100*a.alpha+"%",n.appendChild(d),(d=document.createElement(mxClient.VML_PREFIX+":path")).textpathok="true",d.v="m "+this.format(0)+" "+this.format(0)+" l "+this.format(1)+" "+this.format(0),n.appendChild(d),(d=document.createElement(mxClient.VML_PREFIX+":textpath")).style.cssText="v-text-align:"+s,d.style.align=s,d.style.fontFamily=a.fontFamily,d.string=i,d.on="true",s=Math.round(a.fontSize*a.scale/this.vmlScale),d.style.fontSize=s+"px",(a.fontStyle&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD&&(d.style.fontWeight="bold"),(a.fontStyle&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC&&(d.style.fontStyle="italic"),(a.fontStyle&mxConstants.FONT_UNDERLINE)==mxConstants.FONT_UNDERLINE&&(d.style.textDecoration="underline"),a=s+((i=i.split("\n")).length-1)*s*mxConstants.LINE_HEIGHT,s=i=0,o==mxConstants.ALIGN_BOTTOM?s=-a/2:o!=mxConstants.ALIGN_MIDDLE&&(s=a/2),null!=m&&(o=(n.style.rotation=m)*(Math.PI/180),i=Math.sin(o)*s,s*=Math.cos(o)),n.appendChild(d),n.style.left=this.format(e-i)+"px",n.style.top=this.format(t+s)+"px",this.root.appendChild(n)},mxVmlCanvas2D.prototype.stroke=function(){this.addNode(!1,!0)},mxVmlCanvas2D.prototype.fill=function(){this.addNode(!0,!1)},mxVmlCanvas2D.prototype.fillAndStroke=function(){this.addNode(!0,!0)},mxGuide.prototype.graph=null,mxGuide.prototype.states=null,mxGuide.prototype.horizontal=!0,mxGuide.prototype.vertical=!0,mxGuide.prototype.guideX=null,mxGuide.prototype.guideY=null,mxGuide.prototype.setStates=function(e){this.states=e},mxGuide.prototype.isEnabledForEvent=function(e){return!0},mxGuide.prototype.getGuideTolerance=function(){return this.graph.gridSize*this.graph.view.scale/2},mxGuide.prototype.createGuideShape=function(e){return(e=new mxPolyline([],mxConstants.GUIDE_COLOR,mxConstants.GUIDE_STROKEWIDTH)).isDashed=!0,e},mxGuide.prototype.move=function(a,e,t){if(null!=this.states&&(this.horizontal||this.vertical)&&null!=a&&null!=e){var n=this.graph.getView().translate,i=this.graph.getView().scale,s=e.x,o=e.y,r=!1,l=!1,d=f=this.getGuideTolerance(),c=f;(f=a.clone()).x+=e.x,f.y+=e.y;var m=f.x,u=f.x+f.width,p=f.getCenterX(),g=f.y,v=f.y+f.height,h=f.getCenterY();e=function(e){e+=this.graph.panDx;var t=!1;if(Math.abs(e-p)<d?(s=e-a.getCenterX(),d=Math.abs(e-p),t=!0):Math.abs(e-m)<d?(s=e-a.x,d=Math.abs(e-m),t=!0):Math.abs(e-u)<d&&(s=e-a.x-a.width,d=Math.abs(e-u),t=!0),t){null==this.guideX&&(this.guideX=this.createGuideShape(!0),this.guideX.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,this.guideX.pointerEvents=!1,this.guideX.init(this.graph.getView().getOverlayPane()));var n=this.graph.container;e-=this.graph.panDx,this.guideX.points=[new mxPoint(e,-this.graph.panDy),new mxPoint(e,n.scrollHeight-3-this.graph.panDy)]}r=r||t};for(var f=function(e){e+=this.graph.panDy;var t=!1;if(Math.abs(e-h)<c?(o=e-a.getCenterY(),c=Math.abs(e-h),t=!0):Math.abs(e-g)<c?(o=e-a.y,c=Math.abs(e-g),t=!0):Math.abs(e-v)<c&&(o=e-a.y-a.height,c=Math.abs(e-v),t=!0),t){null==this.guideY&&(this.guideY=this.createGuideShape(!1),this.guideY.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,this.guideY.pointerEvents=!1,this.guideY.init(this.graph.getView().getOverlayPane()));var n=this.graph.container;e-=this.graph.panDy,this.guideY.points=[new mxPoint(-this.graph.panDx,e),new mxPoint(n.scrollWidth-3-this.graph.panDx,e)]}l=l||t},b=0;b<this.states.length;b++){var A=this.states[b];null!=A&&(this.horizontal&&(e.call(this,A.getCenterX()),e.call(this,A.x),e.call(this,A.x+A.width)),this.vertical&&(f.call(this,A.getCenterY()),f.call(this,A.y),f.call(this,A.y+A.height)))}r||null==this.guideX?null!=this.guideX&&(this.guideX.node.style.visibility="visible",this.guideX.redraw()):this.guideX.node.style.visibility="hidden",l||null==this.guideY?null!=this.guideY&&(this.guideY.node.style.visibility="visible",this.guideY.redraw()):this.guideY.node.style.visibility="hidden",t&&(r||(t=a.x-(this.graph.snap(a.x/i-n.x)+n.x)*i,s=this.graph.snap(s/i)*i-t),l||(n=a.y-(this.graph.snap(a.y/i-n.y)+n.y)*i,o=this.graph.snap(o/i)*i-n)),e=new mxPoint(s,o)}return e},mxGuide.prototype.hide=function(){null!=this.guideX&&(this.guideX.node.style.visibility="hidden"),null!=this.guideY&&(this.guideY.node.style.visibility="hidden")},mxGuide.prototype.destroy=function(){null!=this.guideX&&(this.guideX.destroy(),this.guideX=null),null!=this.guideY&&(this.guideY.destroy(),this.guideY=null)},mxStencil.defaultLocalized=!1,mxStencil.prototype.desc=null,mxStencil.prototype.constraints=null,mxStencil.prototype.aspect=null,mxStencil.prototype.w0=null,mxStencil.prototype.h0=null,mxStencil.prototype.bgNode=null,mxStencil.prototype.fgNode=null,mxStencil.prototype.strokewidth=null,mxStencil.prototype.parseDescription=function(){this.fgNode=this.desc.getElementsByTagName("foreground")[0],this.bgNode=this.desc.getElementsByTagName("background")[0],this.w0=Number(this.desc.getAttribute("w")||100),this.h0=Number(this.desc.getAttribute("h")||100);var e=this.desc.getAttribute("aspect");this.aspect=null!=e?e:"variable",e=this.desc.getAttribute("strokewidth"),this.strokewidth=null!=e?e:"1"},mxStencil.prototype.parseConstraints=function(){var e=this.desc.getElementsByTagName("connections")[0];if(null!=e&&(null!=(e=mxUtils.getChildNodes(e))&&0<e.length)){this.constraints=[];for(var t=0;t<e.length;t++)this.constraints.push(this.parseConstraint(e[t]))}},mxStencil.prototype.parseConstraint=function(e){var t=Number(e.getAttribute("x")),n=Number(e.getAttribute("y"));return e="1"==e.getAttribute("perimeter"),new mxConnectionConstraint(new mxPoint(t,n),e)},mxStencil.prototype.evaluateTextAttribute=function(e,t,n){return t=this.evaluateAttribute(e,t,n),e=e.getAttribute("localized"),(mxStencil.defaultLocalized&&null==e||"1"==e)&&(t=mxResources.get(t)),t},mxStencil.prototype.evaluateAttribute=function(e,t,n){return null==(t=e.getAttribute(t))&&(null!=(e=mxUtils.getTextContent(e))&&("function"==typeof(e=mxUtils.eval(e))&&(t=e(n)))),t},mxStencil.prototype.drawShape=function(e,t,n,a,i,s){this.drawChildren(e,t,n,a,i,s,this.bgNode,!1),this.drawChildren(e,t,n,a,i,s,this.fgNode,!0)},mxStencil.prototype.drawChildren=function(e,t,n,a,i,s,o,r){if(null!=o){var l=mxUtils.getValue(t.style,mxConstants.STYLE_DIRECTION,null);for(n=this.computeAspect(t.style,n,a,i,s,l),a=Math.min(n.width,n.height),a="inherit"==this.strokewidth?Number(mxUtils.getNumber(t.style,mxConstants.STYLE_STROKEWIDTH,1)):Number(this.strokewidth)*a,e.setStrokeWidth(a),o=o.firstChild;null!=o;)o.nodeType==mxConstants.NODETYPE_ELEMENT&&this.drawNode(e,t,o,n,r),o=o.nextSibling}},mxStencil.prototype.computeAspect=function(e,t,n,a,i,s){e=t,t=a/this.w0;var o=i/this.h0;if(s="north"==s||"south"==s){o=a/this.h0,t=i/this.w0;var r=(a-i)/2;e+=r,n-=r}return"fixed"==this.aspect&&(t=o=Math.min(t,o),s?(e+=(i-this.w0*t)/2,n+=(a-this.h0*o)/2):(e+=(a-this.w0*t)/2,n+=(i-this.h0*o)/2)),new mxRectangle(e,n,t,o)},mxStencil.prototype.drawNode=function(e,t,n,a,i){var s=n.nodeName,o=a.x,r=a.y,l=a.width,d=a.height,c=Math.min(l,d);if("save"==s)e.save();else if("restore"==s)e.restore();else if("path"==s)for(e.begin(),n=n.firstChild;null!=n;)n.nodeType==mxConstants.NODETYPE_ELEMENT&&this.drawNode(e,t,n,a,i),n=n.nextSibling;else if("close"==s)e.close();else if("move"==s)e.moveTo(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d);else if("line"==s)e.lineTo(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d);else if("quad"==s)e.quadTo(o+Number(n.getAttribute("x1"))*l,r+Number(n.getAttribute("y1"))*d,o+Number(n.getAttribute("x2"))*l,r+Number(n.getAttribute("y2"))*d);else if("curve"==s)e.curveTo(o+Number(n.getAttribute("x1"))*l,r+Number(n.getAttribute("y1"))*d,o+Number(n.getAttribute("x2"))*l,r+Number(n.getAttribute("y2"))*d,o+Number(n.getAttribute("x3"))*l,r+Number(n.getAttribute("y3"))*d);else if("arc"==s)e.arcTo(Number(n.getAttribute("rx"))*l,Number(n.getAttribute("ry"))*d,Number(n.getAttribute("x-axis-rotation")),Number(n.getAttribute("large-arc-flag")),Number(n.getAttribute("sweep-flag")),o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d);else if("rect"==s)e.rect(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,Number(n.getAttribute("w"))*l,Number(n.getAttribute("h"))*d);else if("roundrect"==s)0==(t=n.getAttribute("arcsize"))&&(t=100*mxConstants.RECTANGLE_ROUNDING_FACTOR),c=Number(n.getAttribute("w"))*l,a=Number(n.getAttribute("h"))*d,t=Number(t)/100,t=Math.min(c*t,a*t),e.roundrect(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,c,a,t,t);else if("ellipse"==s)e.ellipse(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,Number(n.getAttribute("w"))*l,Number(n.getAttribute("h"))*d);else if("image"==s)t=this.evaluateAttribute(n,"src",t),e.image(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,Number(n.getAttribute("w"))*l,Number(n.getAttribute("h"))*d,t,!1,"1"==n.getAttribute("flipH"),"1"==n.getAttribute("flipV"));else if("text"==s){if(c=this.evaluateTextAttribute(n,"str",t),a="1"==n.getAttribute("vertical")?-90:0,"0"==n.getAttribute("align-shape")){var m=t.rotation,u=1==mxUtils.getValue(t.style,mxConstants.STYLE_FLIPH,0);t=1==mxUtils.getValue(t.style,mxConstants.STYLE_FLIPV,0),a=u&&t?a-m:u||t?a+m:a-m}a-=n.getAttribute("rotation"),e.text(o+Number(n.getAttribute("x"))*l,r+Number(n.getAttribute("y"))*d,0,0,c,n.getAttribute("align")||"left",n.getAttribute("valign")||"top",!1,"",!1,!1,a)}else if("include-shape"==s)null!=(m=mxStencilRegistry.getStencil(n.getAttribute("name")))&&(o+=Number(n.getAttribute("x"))*l,r+=Number(n.getAttribute("y"))*d,c=Number(n.getAttribute("w"))*l,a=Number(n.getAttribute("h"))*d,m.drawShape(e,t,o,r,c,a));else if("fillstroke"==s)e.fillAndStroke();else if("fill"==s)e.fill();else if("stroke"==s)e.stroke();else if("strokewidth"==s)e.setStrokeWidth(Number(n.getAttribute("width"))*c);else if("dashed"==s)e.setDashed("1"==n.getAttribute("dashed"));else if("dashpattern"==s){if(null!=(n=n.getAttribute("pattern"))){for(n=n.split(" "),l=[],d=0;d<n.length;d++)0<n[d].length&&l.push(Number(n[d])*c);n=l.join(" "),e.setDashPattern(n)}}else"strokecolor"==s?e.setStrokeColor(n.getAttribute("color")):"linecap"==s?e.setLineCap(n.getAttribute("cap")):"linejoin"==s?e.setLineJoin(n.getAttribute("join")):"miterlimit"==s?e.setMiterLimit(Number(n.getAttribute("limit"))):"fillcolor"==s?e.setFillColor(n.getAttribute("color")):"alpha"==s?e.setAlpha(n.getAttribute("alpha")):"fontcolor"==s?e.setFontColor(n.getAttribute("color")):"fontstyle"==s?e.setFontStyle(n.getAttribute("style")):"fontfamily"==s?e.setFontFamily(n.getAttribute("family")):"fontsize"==s&&e.setFontSize(Number(n.getAttribute("size"))*c);i&&("fillstroke"==s||"fill"==s||"stroke"==s)&&e.setShadow(!1)},mxShape.prototype.dialect=null,mxShape.prototype.scale=1,mxShape.prototype.bounds=null,mxShape.prototype.points=null,mxShape.prototype.node=null,mxShape.prototype.style=null,mxShape.prototype.style=null,mxShape.prototype.boundingBox=null,mxShape.prototype.stencil=null,mxShape.prototype.svgStrokeTolerance=6,mxShape.prototype.pointerEvents=!0,mxShape.prototype.stencilPointerEvents=!1,mxShape.prototype.vmlScale=1,mxShape.prototype.init=function(e){null==this.node&&(this.node=this.create(e),null!=e&&e.appendChild(this.node))},mxShape.prototype.isParseVml=function(){return!0},mxShape.prototype.isHtmlAllowed=function(){return!1},mxShape.prototype.getSvgScreenOffset=function(){return 1==mxUtils.mod(Math.max(1,Math.round(this.strokewidth*this.scale)),2)?.5:0},mxShape.prototype.create=function(e){return null!=e.ownerSVGElement?this.createSvg(e):8==document.documentMode||this.dialect==mxConstants.DIALECT_SVG||this.dialect!=mxConstants.DIALECT_VML&&this.isHtmlAllowed()?this.createHtml(e):this.createVml(e)},mxShape.prototype.createSvg=function(){return document.createElementNS(mxConstants.NS_SVG,"g")},mxShape.prototype.createVml=function(){var e=document.createElement(mxClient.VML_PREFIX+":group");return e.style.position="absolute",e},mxShape.prototype.createHtml=function(){var e=document.createElement("div");return e.style.position="absolute",e},mxShape.prototype.reconfigure=function(){this.redraw()},mxShape.prototype.redraw=function(){this.updateBoundsFromPoints(),this.checkBounds()?(this.node.style.visibility="","DIV"==this.node.nodeName&&this.isHtmlAllowed()?this.redrawHtmlShape():this.redrawShape(),this.updateBoundingBox()):(this.node.style.visibility="hidden",this.boundingBox=null)},mxShape.prototype.updateBoundsFromPoints=function(){var e=this.points;if(null!=e&&0<e.length&&null!=e[0]){this.bounds=new mxRectangle(Number(e[0].x),Number(e[0].y),1,1);for(var t=1;t<this.points.length;t++)null!=e[t]&&this.bounds.add(new mxRectangle(Number(e[t].x),Number(e[t].y),1,1))}},mxShape.prototype.checkBounds=function(){return null!=this.bounds&&!isNaN(this.bounds.x)&&!isNaN(this.bounds.y)&&!isNaN(this.bounds.width)&&!isNaN(this.bounds.height)&&0<this.bounds.width&&0<this.bounds.height},mxShape.prototype.createVmlGroup=function(){var e=document.createElement(mxClient.VML_PREFIX+":group");return e.style.position="absolute",e.style.width=this.node.style.width,e.style.height=this.node.style.height,e},mxShape.prototype.redrawShape=function(){var e=this.createCanvas();for(e.pointerEvents=this.pointerEvents;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);this.paint(e),this.node!=e.root&&this.node.insertAdjacentHTML("beforeend",e.root.outerHTML),"DIV"==this.node.nodeName&&8==document.documentMode&&(this.node.style.filter="",(null==this.stencil||!this.stencilPointerEvents)&&mxUtils.addTransparentBackgroundFilter(this.node)),this.destroyCanvas(e)},mxShape.prototype.createCanvas=function(){var e=null,t=null;if(null!=this.node.ownerSVGElement)(e=new mxSvgCanvas2D(this.node,!1)).strokeTolerance=this.svgStrokeTolerance,e.blockImagePointerEvents=mxClient.IS_NS&&!mxClient.IS_SF&&!mxClient.IS_GC,0!=(t=this.getSvgScreenOffset())?this.node.setAttribute("transform","translate("+t+","+t+")"):this.node.removeAttribute("transform");else{this.updateVmlContainer();var n=Math.max(1,Math.round(this.bounds.width)),a=Math.max(1,Math.round(this.bounds.height));t=8==document.documentMode&&this.isParseVml()?this.createVmlGroup():this.node,e=new mxVmlCanvas2D(t,!1);""!=t.tagUrn&&(t.coordsize=n*this.vmlScale+","+a*this.vmlScale,e.scale(this.vmlScale),e.vmlScale=this.vmlScale),t=this.scale,e.translate(-Math.round(this.bounds.x/t),-Math.round(this.bounds.y/t))}return e},mxShape.prototype.updateVmlContainer=function(){this.node.style.left=Math.round(this.bounds.x)+"px",this.node.style.top=Math.round(this.bounds.y)+"px";var e=Math.max(1,Math.round(this.bounds.width)),t=Math.max(1,Math.round(this.bounds.height));this.node.style.width=e+"px",this.node.style.height=t+"px",this.node.style.overflow="visible"},mxShape.prototype.destroyCanvas=function(e){if(e instanceof mxSvgCanvas2D){for(var t in e.gradients){var n=e.gradients[t];n.mxRefCount=(n.mxRefCount||0)+1}this.releaseSvgGradients(this.oldGradients),this.oldGradients=e.gradients}},mxShape.prototype.paint=function(e){var t=this.scale,n=this.bounds.x/t,a=this.bounds.y/t,i=this.bounds.width/t,s=this.bounds.height/t;if(this.isPaintBoundsInverted()){n=n+(o=(i-s)/2),a=a-o;var o=i;i=s,s=o}if(this.updateTransform(e,n,a,i,s),this.configureCanvas(e,n,a,i,s),null!=this.stencil)this.paintStencilShape(e,n,a,i,s);else if(e.setStrokeWidth(this.strokewidth),null!=this.points){for(n=[],a=0;a<this.points.length;a++)n.push(new mxPoint(this.points[a].x/t,this.points[a].y/t));this.paintEdgeShape(e,n)}else this.paintVertexShape(e,n,a,i,s)},mxShape.prototype.configureCanvas=function(e,t,n,a,i){var s=null;null!=this.style&&(s=this.style.dashPattern),e.setAlpha(this.opacity/100),null!=this.isShadow&&e.setShadow(this.isShadow),null!=this.isDashed&&e.setDashed(this.isDashed),null!=s&&e.setDashPattern(s),null!=this.gradient?(t=this.getGradientBounds(e,t,n,a,i),e.setGradient(this.fill,this.gradient,t.x,t.y,t.width,t.height,this.gradientDirection)):e.setFillColor(this.fill),e.setStrokeColor(this.stroke)},mxShape.prototype.getGradientBounds=function(e,t,n,a,i){return new mxRectangle(t,n,a,i)},mxShape.prototype.updateTransform=function(e,t,n,a,i){e.scale(this.scale),e.rotate(this.getShapeRotation(),this.flipH,this.flipV,t+a/2,n+i/2)},mxShape.prototype.paintStencilShape=function(e,t,n,a,i){this.stencilPointerEvents&&(this.dialect==mxConstants.DIALECT_SVG?this.addTransparentBackgroundRectangle(this.node,t,n,a,i):8!=document.documentMode&&this.setTransparentBackgroundImage(this.node)),this.stencil.drawShape(e,this,t,n,a,i)},mxShape.prototype.paintVertexShape=function(e,t,n,a,i){this.paintBackground(e,t,n,a,i),e.setShadow(!1),this.paintForeground(e,t,n,a,i)},mxShape.prototype.paintBackground=function(e,t,n,a,i){},mxShape.prototype.paintForeground=function(e,t,n,a,i){},mxShape.prototype.paintEdgeShape=function(e,t){},mxShape.prototype.getArcSize=function(e,t){var n=mxUtils.getValue(this.style,mxConstants.STYLE_ARCSIZE,100*mxConstants.RECTANGLE_ROUNDING_FACTOR)/100;return Math.min(e*n,t*n)},mxShape.prototype.paintGlassEffect=function(e,t,n,a,i,s){var o=Math.ceil(this.strokewidth/2);e.setGradient("#ffffff","#ffffff",t,n,a,.6*i,"south",.9,.1),e.begin(),s+=2*o,this.isRounded?(e.moveTo(t-o+s,n-o),e.quadTo(t-o,n-o,t-o,n-o+s),e.lineTo(t-o,n+.4*i),e.quadTo(t+.5*a,n+.7*i,t+a+o,n+.4*i),e.lineTo(t+a+o,n-o+s),e.quadTo(t+a+o,n-o,t+a+o-s,n-o)):(e.moveTo(t-o,n-o),e.lineTo(t-o,n+.4*i),e.quadTo(t+.5*a,n+.7*i,t+a+o,n+.4*i),e.lineTo(t+a+o,n-o)),e.close(),e.fill()},mxShape.prototype.apply=function(e){this.state=e,this.style=e.style,null!=this.style&&(this.fill=mxUtils.getValue(this.style,mxConstants.STYLE_FILLCOLOR,this.fill),this.gradient=mxUtils.getValue(this.style,mxConstants.STYLE_GRADIENTCOLOR,this.gradient),this.gradientDirection=mxUtils.getValue(this.style,mxConstants.STYLE_GRADIENT_DIRECTION,this.gradientDirection),this.opacity=mxUtils.getValue(this.style,mxConstants.STYLE_OPACITY,this.opacity),this.stroke=mxUtils.getValue(this.style,mxConstants.STYLE_STROKECOLOR,this.stroke),this.strokewidth=mxUtils.getNumber(this.style,mxConstants.STYLE_STROKEWIDTH,this.strokewidth),this.spacing=mxUtils.getValue(this.style,mxConstants.STYLE_SPACING,this.spacing),this.startSize=mxUtils.getNumber(this.style,mxConstants.STYLE_STARTSIZE,this.startSize),this.endSize=mxUtils.getNumber(this.style,mxConstants.STYLE_ENDSIZE,this.endSize),this.startArrow=mxUtils.getValue(this.style,mxConstants.STYLE_STARTARROW,this.startArrow),this.endArrow=mxUtils.getValue(this.style,mxConstants.STYLE_ENDARROW,this.endArrow),this.rotation=mxUtils.getValue(this.style,mxConstants.STYLE_ROTATION,this.rotation),this.direction=mxUtils.getValue(this.style,mxConstants.STYLE_DIRECTION,this.direction),this.flipH=1==mxUtils.getValue(this.style,mxConstants.STYLE_FLIPH,0),this.flipV=1==mxUtils.getValue(this.style,mxConstants.STYLE_FLIPV,0),null!=this.stencil&&(this.flipH=1==mxUtils.getValue(this.style,"stencilFlipH",0)||this.flipH,this.flipV=1==mxUtils.getValue(this.style,"stencilFlipV",0)||this.flipV),"north"!=this.direction&&"south"!=this.direction||(e=this.flipH,this.flipH=this.flipV,this.flipV=e),this.isShadow=1==mxUtils.getValue(this.style,mxConstants.STYLE_SHADOW,this.isShadow),this.isDashed=1==mxUtils.getValue(this.style,mxConstants.STYLE_DASHED,this.isDashed),this.isRounded=1==mxUtils.getValue(this.style,mxConstants.STYLE_ROUNDED,this.isRounded),this.glass=1==mxUtils.getValue(this.style,mxConstants.STYLE_GLASS,this.glass),"none"==this.fill&&(this.fill=null),"none"==this.gradient&&(this.gradient=null),"none"==this.stroke&&(this.stroke=null))},mxShape.prototype.setCursor=function(e){null==e&&(e=""),this.cursor=e,null!=this.node&&(this.node.style.cursor=e)},mxShape.prototype.getCursor=function(){return this.cursor},mxShape.prototype.updateBoundingBox=function(){if(null!=this.bounds){var e=this.createBoundingBox();if(null!=e){this.augmentBoundingBox(e);var t=this.getShapeRotation();0!=t&&(e=mxUtils.getBoundingBox(e,t)),e.x=Math.floor(e.x),e.y=Math.floor(e.y),e.width=Math.ceil(e.width),e.height=Math.ceil(e.height)}this.boundingBox=e}},mxShape.prototype.createBoundingBox=function(){var e=this.bounds.clone();if(this.isPaintBoundsInverted()){var t=(e.width-e.height)/2;e.x+=t,e.y-=t,t=e.width,e.width=e.height,e.height=t}return e},mxShape.prototype.augmentBoundingBox=function(e){this.isShadow&&(e.width+=Math.ceil(mxConstants.SHADOW_OFFSET_X*this.scale),e.height+=Math.ceil(mxConstants.SHADOW_OFFSET_Y*this.scale));var t=Math.ceil(this.strokewidth*this.scale);e.grow(Math.ceil(t/2))},mxShape.prototype.isPaintBoundsInverted=function(){return null==this.stencil&&("north"==this.direction||"south"==this.direction)},mxShape.prototype.getRotation=function(){return null!=this.rotation?this.rotation:0},mxShape.prototype.getTextRotation=function(){var e=this.getRotation();return 1!=mxUtils.getValue(this.style,mxConstants.STYLE_HORIZONTAL,1)&&(e+=mxText.prototype.verticalTextRotation),e},mxShape.prototype.getShapeRotation=function(){var e=this.getRotation();return null!=this.direction&&("north"==this.direction?e+=270:"west"==this.direction?e+=180:"south"==this.direction&&(e+=90)),e},mxShape.prototype.addTransparentBackgroundRectangle=function(e,t,n,a,i){(e=document.createElementNS(mxConstants.NS_SVG,"rect")).setAttribute("x",t),e.setAttribute("y",n),e.setAttribute("width",a),e.setAttribute("height",i),e.setAttribute("fill","none"),e.setAttribute("stroke","none"),e.setAttribute("pointer-events","all"),this.node.appendChild(e)},mxShape.prototype.setTransparentBackgroundImage=function(e){e.style.backgroundImage="url('"+mxClient.imageBasePath+"/transparent.gif')"},mxShape.prototype.releaseSvgGradients=function(e){if(null!=e)for(var t in e){var n=e[t];n.mxRefCount=(n.mxRefCount||0)-1,0==n.mxRefCount&&null!=n.parentNode&&n.parentNode.removeChild(n)}},mxShape.prototype.destroy=function(){null!=this.node&&(mxEvent.release(this.node),null!=this.node.parentNode&&this.node.parentNode.removeChild(this.node),this.node=null),this.releaseSvgGradients(this.oldGradients),this.oldGradients=null};var mxStencilRegistry={stencils:[],addStencil:function(e,t){mxStencilRegistry.stencils[e]=t},getStencil:function(e){return mxStencilRegistry.stencils[e]}},mxMarker={markers:[],addMarker:function(e,t){mxMarker.markers[e]=t},createMarker:function(e,t,n,a,i,s,o,r,l,d){var c=mxMarker.markers[n];return null!=c?c(e,t,n,a,i,s,o,r,l,d):null}};function mxActor(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxCloud(e,t,n,a){mxActor.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxRectangleShape(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxEllipse(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxDoubleEllipse(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxRhombus(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxPolyline(e,t,n){mxShape.call(this),this.points=e,this.stroke=t,this.strokewidth=null!=n?n:1}function mxArrow(e,t,n,a,i,s,o){mxShape.call(this),this.points=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1,this.arrowWidth=null!=i?i:mxConstants.ARROW_WIDTH,this.spacing=null!=s?s:mxConstants.ARROW_SPACING,this.endSize=null!=o?o:mxConstants.ARROW_SIZE}function mxText(e,t,n,a,i,s,o,r,l,d,c,m,u,p,g,v,h,f,b,A){mxShape.call(this),this.value=e,this.bounds=t,this.color=null!=i?i:"black",this.align=null!=n?n:"",this.valign=null!=a?a:"",this.family=null!=s?s:mxConstants.DEFAULT_FONTFAMILY,this.size=null!=o?o:mxConstants.DEFAULT_FONTSIZE,this.fontStyle=null!=r?r:mxConstants.DEFAULT_FONTSTYLE,this.spacing=parseInt(l||2),this.spacingTop=this.spacing+parseInt(d||0),this.spacingRight=this.spacing+parseInt(c||0),this.spacingBottom=this.spacing+parseInt(m||0),this.spacingLeft=this.spacing+parseInt(u||0),this.horizontal=null==p||p,this.background=g,this.border=v,this.wrap=null!=h&&h,this.clipped=null!=f&&f,this.overflow=null!=b?b:"visible",this.labelPadding=null!=A?A:0,this.rotation=0}function mxTriangle(){mxActor.call(this)}function mxHexagon(){mxActor.call(this)}function mxLine(e,t,n){mxShape.call(this),this.bounds=e,this.stroke=t,this.strokewidth=null!=n?n:1}function mxImageShape(e,t,n,a,i){mxShape.call(this),this.bounds=e,this.image=t,this.fill=n,this.stroke=a,this.strokewidth=null!=i?i:1,this.shadow=!1}function mxLabel(e,t,n,a){mxRectangleShape.call(this,e,t,n,a)}function mxCylinder(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxConnector(e,t,n){mxPolyline.call(this,e,t,n)}function mxSwimlane(e,t,n,a){mxShape.call(this),this.bounds=e,this.fill=t,this.stroke=n,this.strokewidth=null!=a?a:1}function mxGraphLayout(e){this.graph=e}function mxStackLayout(e,t,n,a,i,s){mxGraphLayout.call(this,e),this.horizontal=null==t||t,this.spacing=null!=n?n:0,this.x0=null!=a?a:0,this.y0=null!=i?i:0,this.border=null!=s?s:0}function mxPartitionLayout(e,t,n,a){mxGraphLayout.call(this,e),this.horizontal=null==t||t,this.spacing=n||0,this.border=a||0}function mxCompactTreeLayout(e,t,n){mxGraphLayout.call(this,e),this.horizontal=null==t||t,this.invert=null!=n&&n}function WeightedCellSorter(e,t){this.cell=e,this.weightedValue=t}function mxFastOrganicLayout(e){mxGraphLayout.call(this,e)}function mxCircleLayout(e,t){mxGraphLayout.call(this,e),this.radius=null!=t?t:100}function mxParallelEdgeLayout(e){mxGraphLayout.call(this,e)}function mxCompositeLayout(e,t,n){mxGraphLayout.call(this,e),this.layouts=t,this.master=n}function mxEdgeLabelLayout(e,t){mxGraphLayout.call(this,e)}function mxGraphAbstractHierarchyCell(){this.x=[],this.y=[],this.temp=[]}function mxGraphHierarchyNode(e){mxGraphAbstractHierarchyCell.apply(this,arguments),this.cell=e}function mxGraphHierarchyEdge(e){mxGraphAbstractHierarchyCell.apply(this,arguments),this.edges=e}function mxGraphHierarchyModel(e,t,n,a,i){for(e.getGraph(),this.tightenToSource=i,this.roots=n,this.parent=a,this.vertexMapper={},this.edgeMapper={},this.maxRank=0,n=[],null==t&&(t=this.graph.getChildVertices(a)),this.maxRank=this.SOURCESCANSTARTRANK,this.createInternalCells(e,t,n),a=0;a<t.length;a++){i=n[a].connectsAsSource;for(var s=0;s<i.length;s++){var o=i[s];if(null!=(r=o.edges)&&0<r.length){var r=r[0],l=e.getVisibleTerminal(r,!1);l=mxCellPath.create(l),l=this.vertexMapper[l];n[a]==l&&(l=e.getVisibleTerminal(r,!0),l=mxCellPath.create(l),l=this.vertexMapper[l]),null!=l&&n[a]!=l&&(0==(o.target=l).connectsAsTarget.length&&(l.connectsAsTarget=[]),mxUtils.indexOf(l.connectsAsTarget,o)<0&&l.connectsAsTarget.push(o))}}n[a].temp[0]=1}}function mxHierarchicalLayoutStage(){}function mxMedianHybridCrossingReduction(e){this.layout=e}function MedianCellSorter(){}function mxMinimumCycleRemover(e){this.layout=e}function mxCoordinateAssignment(e,t,n,a,i,s){this.layout=e,this.intraCellSpacing=t,this.interRankCellSpacing=n,this.orientation=a,this.initialX=i,this.parallelEdgeSpacing=s}!function(){function e(e,t,n,a,i,s,o,r,l,d){t=1.118*i*l,r=1.118*s*l,i*=o+l,s*=o+l;var c=a.clone();return c.x-=t,c.y-=r,o=n!=mxConstants.ARROW_CLASSIC?1:.75,a.x+=-i*o-t,a.y+=-s*o-r,function(){e.begin(),e.moveTo(c.x,c.y),e.lineTo(c.x-i-s/2,c.y-s+i/2),n==mxConstants.ARROW_CLASSIC&&e.lineTo(c.x-3*i/4,c.y-3*s/4),e.lineTo(c.x+s/2-i,c.y-s-i/2),e.close(),d?e.fillAndStroke():e.stroke()}}function t(e,t,n,a,i,s,o,r,l,d){r=n==mxConstants.ARROW_DIAMOND?.7071:.9862,t=i*l*r,r*=s*l,i*=o+l,s*=o+l;var c=a.clone();c.x-=t,c.y-=r,a.x+=-i-t,a.y+=-s-r;var m=n==mxConstants.ARROW_DIAMOND?2:3.4;return function(){e.begin(),e.moveTo(c.x,c.y),e.lineTo(c.x-i/2-s/m,c.y+i/m-s/2),e.lineTo(c.x-i,c.y-s),e.lineTo(c.x-i/2+s/m,c.y-s/2-i/m),e.close(),d?e.fillAndStroke():e.stroke()}}mxMarker.addMarker("classic",e),mxMarker.addMarker("block",e),mxMarker.addMarker("open",function(e,t,n,a,i,s,o,r,l,d){t=1.118*i*l,n=1.118*s*l,i*=o+l,s*=o+l;var c=a.clone();return c.x-=t,c.y-=n,a.x+=2*-t,a.y+=2*-n,function(){e.begin(),e.moveTo(c.x-i-s/2,c.y-s+i/2),e.lineTo(c.x,c.y),e.lineTo(c.x+s/2-i,c.y-s-i/2),e.stroke()}}),mxMarker.addMarker("oval",function(e,t,n,a,i,s,o,r,l,d){var c=o/2,m=a.clone();return a.x-=i*c,a.y-=s*c,function(){e.ellipse(m.x-c,m.y-c,o,o),d?e.fillAndStroke():e.stroke()}}),mxMarker.addMarker("diamond",t),mxMarker.addMarker("diamondThin",t)}(),mxUtils.extend(mxActor,mxShape),mxActor.prototype.paintVertexShape=function(e,t,n,a,i){e.translate(t,n),e.begin(),this.redrawPath(e,t,n,a,i),e.fillAndStroke()},mxActor.prototype.redrawPath=function(e,t,n,a,i){t=a/3,e.moveTo(0,i),e.curveTo(0,3*i/5,0,2*i/5,a/2,2*i/5),e.curveTo(a/2-t,2*i/5,a/2-t,0,a/2,0),e.curveTo(a/2+t,0,a/2+t,2*i/5,a/2,2*i/5),e.curveTo(a,2*i/5,a,3*i/5,a,i),e.close()},mxUtils.extend(mxCloud,mxActor),mxCloud.prototype.redrawPath=function(e,t,n,a,i){e.moveTo(.25*a,.25*i),e.curveTo(.05*a,.25*i,0,.5*i,.16*a,.55*i),e.curveTo(0,.66*i,.18*a,.9*i,.31*a,.8*i),e.curveTo(.4*a,i,.7*a,i,.8*a,.8*i),e.curveTo(a,.8*i,a,.6*i,.875*a,.5*i),e.curveTo(a,.3*i,.8*a,.1*i,.625*a,.2*i),e.curveTo(.5*a,.05*i,.3*a,.05*i,.25*a,.25*i),e.close()},mxUtils.extend(mxRectangleShape,mxShape),mxRectangleShape.prototype.isHtmlAllowed=function(){return!this.isRounded&&!this.glass&&0==this.rotation},mxRectangleShape.prototype.paintBackground=function(e,t,n,a,i){if(this.isRounded){var s=mxUtils.getValue(this.style,mxConstants.STYLE_ARCSIZE,100*mxConstants.RECTANGLE_ROUNDING_FACTOR)/100;s=Math.min(a*s,i*s);e.roundrect(t,n,a,i,s,s)}else e.rect(t,n,a,i);e.fillAndStroke()},mxRectangleShape.prototype.paintForeground=function(e,t,n,a,i){this.glass&&this.paintGlassEffect(e,t,n,a,i,this.getArcSize(a+this.strokewidth,i+this.strokewidth))},mxRectangleShape.prototype.redrawHtmlShape=function(){this.updateHtmlBounds(this.node),this.updateHtmlFilters(this.node),this.updateHtmlColors(this.node)},mxRectangleShape.prototype.updateHtmlBounds=function(e){var t=9<=document.documentMode?0:Math.ceil(this.strokewidth*this.scale);e.style.borderWidth=Math.max(1,t)+"px",e.style.overflow="hidden",e.style.left=Math.round(this.bounds.x-t/2)+"px",e.style.top=Math.round(this.bounds.y-t/2)+"px","CSS1Compat"==document.compatMode&&(t=-t),e.style.width=Math.round(Math.max(0,this.bounds.width+t))+"px",e.style.height=Math.round(Math.max(0,this.bounds.height+t))+"px"},mxRectangleShape.prototype.updateHtmlColors=function(e){var t=this.stroke;null!=t&&t!=mxConstants.NONE?(e.style.borderColor=t,this.isDashed?e.style.borderStyle="dashed":0<this.strokewidth&&(e.style.borderStyle="solid"),e.style.borderWidth=Math.max(1,Math.ceil(this.strokewidth*this.scale))+"px"):e.style.borderWidth="0px",null!=(t=this.fill)&&t!=mxConstants.NONE?(e.style.backgroundColor=t,e.style.backgroundImage="none"):this.pointerEvents?e.style.backgroundColor="transparent":8==document.documentMode?mxUtils.addTransparentBackgroundFilter(e):this.setTransparentBackgroundImage(e)},mxRectangleShape.prototype.updateHtmlFilters=function(e){var t="";if(this.opacity<100&&(t+="alpha(opacity="+this.opacity+")"),this.isShadow&&(t+="progid:DXImageTransform.Microsoft.dropShadow (OffX='"+Math.round(mxConstants.SHADOW_OFFSET_X*this.scale)+"', OffY='"+Math.round(mxConstants.SHADOW_OFFSET_Y*this.scale)+"', Color='"+mxConstants.SHADOWCOLOR+"')"),this.gradient){var n=this.fill,a=this.gradient,i="0",s={east:0,south:1,west:2,north:3},o=null!=this.direction?s[this.direction]:0;null!=this.gradientDirection&&(o=mxUtils.mod(o+s[this.gradientDirection]-1,4)),1==o?(i="1",s=n,n=a,a=s):2==o?(s=n,n=a,a=s):3==o&&(i="1"),t+="progid:DXImageTransform.Microsoft.gradient(startColorStr='"+n+"', endColorStr='"+a+"', gradientType='"+i+"')"}e.style.filter=t},mxUtils.extend(mxEllipse,mxShape),mxEllipse.prototype.paintVertexShape=function(e,t,n,a,i){e.ellipse(t,n,a,i),e.fillAndStroke()},mxUtils.extend(mxDoubleEllipse,mxShape),mxDoubleEllipse.prototype.vmlScale=10,mxDoubleEllipse.prototype.paintBackground=function(e,t,n,a,i){e.ellipse(t,n,a,i),e.fillAndStroke()},mxDoubleEllipse.prototype.paintForeground=function(e,t,n,a,i){var s=Math.min(4,Math.min(a/5,i/5));i-=2*s,0<(a-=2*s)&&0<i&&e.ellipse(t+s,n+s,a,i),e.stroke()},mxUtils.extend(mxRhombus,mxShape),mxRhombus.prototype.paintVertexShape=function(e,t,n,a,i){var s=a/2,o=i/2;e.begin(),e.moveTo(t+s,n),e.lineTo(t+a,n+o),e.lineTo(t+s,n+i),e.lineTo(t,n+o),e.close(),e.fillAndStroke()},mxUtils.extend(mxPolyline,mxShape),mxPolyline.prototype.getRotation=function(){return 0},mxPolyline.prototype.paintEdgeShape=function(e,t){this.paintLine(e,t,this.isRounded)},mxPolyline.prototype.paintLine=function(e,t,n){var a=mxUtils.getValue(this.style,mxConstants.STYLE_ARCSIZE,mxConstants.LINE_ARCSIZE)/2,i=t[0],s=t[t.length-1];e.begin(),e.moveTo(i.x,i.y);for(var o=1;o<t.length-1;o++){var r=t[o],l=i.x-r.x;i=i.y-r.y;if(n&&o<t.length-1&&(0!=l||0!=i)){var d=Math.sqrt(l*l+i*i);l=l*Math.min(a,d/2)/d,i=i*Math.min(a,d/2)/d;e.lineTo(r.x+l,r.y+i),l=(i=t[o+1]).x-r.x,i=i.y-r.y,d=Math.max(1,Math.sqrt(l*l+i*i)),l=l*Math.min(a,d/2)/d,i=i*Math.min(a,d/2)/d,l=r.x+l,i=r.y+i,e.quadTo(r.x,r.y,l,i),r=new mxPoint(l,i)}else e.lineTo(r.x,r.y);i=r}e.lineTo(s.x,s.y),e.stroke()},mxUtils.extend(mxArrow,mxShape),mxArrow.prototype.paintEdgeShape=function(e,t){var n=mxConstants.ARROW_SPACING,a=mxConstants.ARROW_WIDTH,i=mxConstants.ARROW_SIZE,s=t[0],o=t[t.length-1],r=o.x-s.x,l=o.y-s.y,d=(c=Math.sqrt(r*r+l*l))-2*n-i,c=(r=r/c,a*(l=l/c)/3),m=(a=-a*r/3,(i=s.x-c/2+n*r)+c),u=(s=s.y-a/2+n*l)+a,p=m+d*r,g=p+c,v=(d=u+d*l)+a,h=g-3*c,f=v-3*a;e.begin(),e.moveTo(i,s),e.lineTo(m,u),e.lineTo(p,d),e.lineTo(g,v),e.lineTo(o.x-n*r,o.y-n*l),e.lineTo(h,f),e.lineTo(h+c,f+a),e.close(),e.fillAndStroke()},mxUtils.extend(mxText,mxShape),mxText.prototype.baseSpacingTop=0,mxText.prototype.baseSpacingBottom=0,mxText.prototype.baseSpacingLeft=0,mxText.prototype.baseSpacingRight=0,mxText.prototype.replaceLinefeeds=!0,mxText.prototype.verticalTextRotation=-90,mxText.prototype.ignoreClippedStringSize=!0,mxText.prototype.ignoreStringSize=!1,mxText.prototype.isParseVml=function(){return!1},mxText.prototype.isHtmlAllowed=function(){return 8!=document.documentMode},mxText.prototype.getSvgScreenOffset=function(){return 0},mxText.prototype.checkBounds=function(){return!(null==this.bounds||isNaN(this.bounds.x)||isNaN(this.bounds.y)||isNaN(this.bounds.width)||isNaN(this.bounds.height))},mxText.prototype.updateBoundingBox=function(){var e=this.node;8==document.documentMode&&null!=e.firstChild&&(null!=(e=e.firstChild).firstChild&&(e=e.firstChild)),this.boundingBox=this.bounds.clone();var t=this.getTextRotation();if(this.ignoreStringSize||null==e||"fill"==this.overflow||this.clipped&&this.ignoreClippedStringSize)this.boundingBox.x+=this.margin.x*this.boundingBox.width,this.boundingBox.y+=this.margin.y*this.boundingBox.height;else{var n=null,a=null;if(null!=e.ownerSVGElement)if(null!=e.firstChild&&null!=e.firstChild.firstChild&&"foreignObject"==e.firstChild.firstChild.nodeName)e=e.firstChild.firstChild,n=this.wrap?this.bounds.width:parseInt(e.getAttribute("width"))*this.scale,a=parseInt(e.getAttribute("height"))*this.scale;else{if(0==(t=e.getBBox()).width&&0==t.height)return;this.boundingBox=new mxRectangle(t.x,t.y,t.width,t.height),t=0}else a=this.state.view.textDiv,a=null!=this.offsetWidth&&null!=this.offsetHeight?(n=this.wrap?this.bounds.width:this.offsetWidth*this.scale,this.offsetHeight*this.scale):null!=a?(this.updateFont(a),this.updateSize(a),mxUtils.isNode(this.value)?a.innerHTML=this.value.outerHTML:(n=this.replaceLinefeeds?this.value.replace(/\n/g,"<br/>"):this.value,a.innerHTML=n),n=this.wrap?this.bounds.width:a.offsetWidth*this.scale,a.offsetHeight*this.scale):(n=this.wrap?this.bounds.width:e.offsetWidth*this.scale,e.offsetHeight*this.scale);null!=n&&null!=a&&(this.boundingBox=new mxRectangle(this.bounds.x+this.margin.x*n,this.bounds.y+this.margin.y*a,n,a))}null!=this.boundingBox&&(0!=t&&(t=mxUtils.getBoundingBox(this.boundingBox,t),this.boundingBox.x=t.x,this.boundingBox.y=t.y,mxClient.IS_QUIRKS||(this.boundingBox.width=t.width,this.boundingBox.height=t.height)),this.boundingBox.x=Math.floor(this.boundingBox.x),this.boundingBox.y=Math.floor(this.boundingBox.y),this.boundingBox.width=Math.ceil(this.boundingBox.width),this.boundingBox.height=Math.ceil(this.boundingBox.height))},mxText.prototype.getShapeRotation=function(){return 0},mxText.prototype.getTextRotation=function(){return null!=this.state&&null!=this.state.shape?this.state.shape.getTextRotation():0},mxText.prototype.isPaintBoundsInverted=function(){return!this.horizontal&&null!=this.state&&this.state.view.graph.model.isVertex(this.state.cell)},mxText.prototype.configureCanvas=function(e,t,n,a,i){mxShape.prototype.configureCanvas.apply(this,arguments),e.setFontColor(this.color),e.setFontBackgroundColor(this.background),e.setFontBorderColor(this.border),e.setFontFamily(this.family),e.setFontSize(this.size),e.setFontStyle(this.fontStyle)},mxText.prototype.updateVmlContainer=function(){this.node.style.left=Math.round(this.bounds.x)+"px",this.node.style.top=Math.round(this.bounds.y)+"px",this.node.style.width="1px",this.node.style.height="1px",this.node.style.overflow="visible"},mxText.prototype.paint=function(e){var t=this.scale,n=this.bounds.x/t,a=this.bounds.y/t,i=this.bounds.width/t;t=this.bounds.height/t;this.updateTransform(e,n,a,i,t),this.configureCanvas(e,n,a,i,t);var s=mxUtils.isNode(this.value)||this.dialect==mxConstants.DIALECT_STRICTHTML,o=s||e instanceof mxVmlCanvas2D?"html":"",r=this.value;!s&&"html"==o&&(r=mxUtils.htmlEntities(r,!1)),r=!mxUtils.isNode(this.value)&&this.replaceLinefeeds&&"html"==o?r.replace(/\n/g,"<br/>"):r,e.text(n,a,i,t,r,this.align,this.valign,this.wrap,o,"fill"==this.overflow,this.clipped,this.getTextRotation())},mxText.prototype.redrawHtmlShape=function(){var e=this.node.style;e.opacity=this.opacity<1?this.opacity:"",e.overflow="",e.width="",e.height="",this.updateFont(this.node),this.updateSize(this.node),this.updateValue(),this.offsetHeight=this.offsetWidth=null,null!=mxClient.CSS_PREFIX?this.updateHtmlTransform():this.updateHtmlFilter()},mxText.prototype.updateHtmlTransform=function(){var e=this.getTextRotation(),t=this.node.style,n=this.margin.x,a=this.margin.y;0!=e?(t[mxClient.CSS_PREFIX+"TransformOrigin"]=100*-n+"% "+100*-a+"%",t[mxClient.CSS_PREFIX+"Transform"]="translate("+100*n+"%,"+100*a+"%)scale("+this.scale+") rotate("+e+"deg)"):(t[mxClient.CSS_PREFIX+"TransformOrigin"]="0% 0%",t[mxClient.CSS_PREFIX+"Transform"]="scale("+this.scale+")translate("+100*n+"%,"+100*a+"%)"),t.left=Math.round(this.bounds.x)+"px",t.top=Math.round(this.bounds.y)+"px"},mxText.prototype.updateHtmlFilter=function(){var e=this.node.style,t=this.margin.x,n=this.margin.y,a=this.scale;e.filter="";var i=0,s=0;if(null!=(r=null!=this.state?this.state.view.textDiv:null)){if(r.style.overflow="",r.style.height="",r.style.width="",this.updateFont(r),this.updateSize(r),mxUtils.isNode(this.value))r.innerHTML=this.value.outerHTML;else{var o=this.value;this.dialect!=mxConstants.DIALECT_STRICTHTML&&(o=mxUtils.htmlEntities(o,!1)),o=this.replaceLinefeeds?o.replace(/\n/g,"<br/>"):o,r.innerHTML=o}i=r.offsetWidth+2,s=r.offsetHeight+2}else i=this.node.offsetWidth,s=this.node.offsetHeight+1;this.offsetWidth=i,this.offsetHeight=s,r=this.bounds.width/a,o=this.bounds.height/a,mxClient.IS_QUIRKS&&(this.clipped||"fill"==this.overflow)&&0<o?(o=Math.min(o,s),e.height=Math.round(o+1)+"px"):o=s,"fill"!=this.overflow&&(mxClient.IS_QUIRKS&&(this.clipped||this.wrap)&&0<r?(r=Math.min(r,i),e.width=Math.round(r)+"px"):r=i);o*=a;var r=r*a,l=(i=this.getTextRotation()*(Math.PI/180),s=parseFloat(parseFloat(Math.cos(i)).toFixed(8)),parseFloat(parseFloat(Math.sin(-i)).toFixed(8)));(i=i%(2*Math.PI))<0&&(i+=2*Math.PI),(i%=Math.PI)>Math.PI/2&&(i=Math.PI-i);var d=Math.cos(i),c=Math.sin(-i),m=(o-o*d+r*c)/2+l*(t=r*-(t+.5))-s*(n=o*-(n+.5));0!=i&&(e.filter="progid:DXImageTransform.Microsoft.Matrix(M11="+s+", M12="+l+", M21="+-l+", M22="+s+", sizingMethod='auto expand')"),e.zoom=a,e.left=Math.round(this.bounds.x+((r-r*d+o*c)/2-s*t-l*n)-r/2)+"px",e.top=Math.round(this.bounds.y+m-o/2)+"px"},mxText.prototype.updateValue=function(){if(mxUtils.isNode(this.value))this.node.innerHTML="",this.node.appendChild(this.value);else{var e=this.value;this.dialect!=mxConstants.DIALECT_STRICTHTML&&(e=mxUtils.htmlEntities(e,!1));e=this.replaceLinefeeds?e.replace(/\n/g,"<br/>"):e;var t=null!=this.background&&this.background!=mxConstants.NONE?this.background:null,n=null!=this.border&&this.border!=mxConstants.NONE?this.border:null;if(null!=t||null!=n)if("fill"==this.overflow)null!=t&&(this.node.style.backgroundColor=t),null!=n&&(this.node.style.border="1px solid "+n);else{var a="";null!=t&&(a+="background-color:"+t+";"),null!=n&&(a+="border:1px solid "+n+";"),e='<div style="zoom:1;'+a+"display:inline-block;_display:inline;padding-bottom:1px;padding-right:1px;line-height:"+this.node.style.lineHeight+'">'+e+"</div>",this.node.style.lineHeight=""}this.node.innerHTML=e}},mxText.prototype.updateFont=function(e){(e=e.style).lineHeight=Math.round(this.size*mxConstants.LINE_HEIGHT)+"px",e.fontSize=Math.round(this.size)+"px",e.fontFamily=this.family,e.verticalAlign="top",e.color=this.color,e.fontWeight=(this.fontStyle&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD?"bold":"",e.fontStyle=(this.fontStyle&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC?"italic":"",e.fontDecoration=(this.fontStyle&mxConstants.FONT_UNDERLINE)==mxConstants.FONT_UNDERLINE?"underline":"",e.textAlign=this.align==mxConstants.ALIGN_CENTER?"center":this.align==mxConstants.ALIGN_RIGHT?"right":"left"},mxText.prototype.updateSize=function(e){var t=Math.round(this.bounds.width/this.scale),n=Math.round(this.bounds.height/this.scale);e=e.style,this.clipped?(e.overflow="hidden",0<n&&(e.maxHeight=n+"px"),0<t&&(e.width=t+"px")):"fill"==this.overflow&&(e.width=t+"px",0<n&&(e.maxHeight=n+"px")),this.wrap?(!this.clipped&&0<t&&(e.width=t+"px"),e.whiteSpace="normal"):e.whiteSpace="nowrap"},mxText.prototype.updateMargin=function(){this.margin=mxUtils.getAlignmentAsPoint(this.align,this.valign)},mxText.prototype.getSpacing=function(){return new mxPoint(this.align==mxConstants.ALIGN_CENTER?(this.spacingLeft-this.spacingRight)/2:this.align==mxConstants.ALIGN_RIGHT?-this.spacingRight-this.baseSpacingRight:this.spacingLeft+this.baseSpacingLeft,this.valign==mxConstants.ALIGN_MIDDLE?(this.spacingTop-this.spacingBottom)/2:this.valign==mxConstants.ALIGN_BOTTOM?-this.spacingBottom-this.baseSpacingBottom:this.spacingTop+this.baseSpacingTop)},mxUtils.extend(mxTriangle,mxActor),mxTriangle.prototype.redrawPath=function(e,t,n,a,i){e.moveTo(0,0),e.lineTo(a,.5*i),e.lineTo(0,i),e.close()},mxUtils.extend(mxHexagon,mxActor),mxHexagon.prototype.redrawPath=function(e,t,n,a,i){e.moveTo(.25*a,0),e.lineTo(.75*a,0),e.lineTo(a,.5*i),e.lineTo(.75*a,i),e.lineTo(.25*a,i),e.lineTo(0,.5*i),e.close()},mxUtils.extend(mxLine,mxShape),mxLine.prototype.paintVertexShape=function(e,t,n,a,i){n+=i/2,e.begin(),e.moveTo(t,n),e.lineTo(t+a,n),e.stroke()},mxUtils.extend(mxImageShape,mxRectangleShape),mxImageShape.prototype.preserveImageAspect=!0,mxImageShape.prototype.getSvgScreenOffset=function(){return mxClient.IS_IE?0:.5},mxImageShape.prototype.apply=function(e){mxShape.prototype.apply.apply(this,arguments),this.gradient=this.stroke=this.fill=null,null!=this.style&&(this.fill=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_BACKGROUND),this.stroke=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_BORDER),this.preserveImageAspect=1==mxUtils.getNumber(this.style,mxConstants.STYLE_IMAGE_ASPECT,1),this.flipH=this.flipH||1==mxUtils.getValue(this.style,"imageFlipH",0),this.flipV=this.flipV||1==mxUtils.getValue(this.style,"imageFlipV",0))},mxImageShape.prototype.isHtmlAllowed=function(){return!this.preserveImageAspect},mxImageShape.prototype.createHtml=function(){var e=document.createElement("div");return e.style.position="absolute",e},mxImageShape.prototype.paintVertexShape=function(e,t,n,a,i){if(null!=this.image){var s=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_BACKGROUND,null),o=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_BORDER,null);null==s&&null==o||(e.setFillColor(s),e.setStrokeColor(o),e.rect(t,n,a,i),e.fillAndStroke()),e.image(t,n,a,i,this.image,this.preserveImageAspect,!1,!1)}else mxRectangleShape.prototype.paintBackground.apply(this,arguments)},mxImageShape.prototype.redrawHtmlShape=function(){if(this.node.style.left=Math.round(this.bounds.x)+"px",this.node.style.top=Math.round(this.bounds.y)+"px",this.node.style.width=Math.max(0,Math.round(this.bounds.width))+"px",this.node.style.height=Math.max(0,Math.round(this.bounds.height))+"px",this.node.style.backgroundColor=this.fill||"",this.node.style.borderColor=this.stroke||"",this.node.innerHTML="",null!=this.image){var e=document.createElement(mxClient.IS_IE6||null==mxClient.CSS_PREFIX&&0!=this.rotation?mxClient.VML_PREFIX+":image":"img");e.style.position="absolute",e.src=this.image;var t=this.opacity<100?"alpha(opacity="+this.opacity+")":"";this.node.style.filter=t,this.flipH&&this.flipV?t+="progid:DXImageTransform.Microsoft.BasicImage(rotation=2)":this.flipH?t+="progid:DXImageTransform.Microsoft.BasicImage(mirror=1)":this.flipV&&(t+="progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"),e.style.filter!=t&&(e.style.filter=t),"image"==e.nodeName?e.style.rotation=this.rotation:e.style[mxClient.CSS_PREFIX+"Transform"]="rotate("+this.rotation+"deg)",e.style.width=this.node.style.width,e.style.height=this.node.style.height,this.node.style.backgroundImage="",this.node.appendChild(e)}else this.setTransparentBackgroundImage(this.node)},mxUtils.extend(mxLabel,mxRectangleShape),mxLabel.prototype.imageSize=mxConstants.DEFAULT_IMAGESIZE,mxLabel.prototype.spacing=2,mxLabel.prototype.indicatorSize=10,mxLabel.prototype.indicatorSpacing=2,mxLabel.prototype.init=function(e){mxShape.prototype.init.apply(this,arguments),null!=this.indicatorColor&&null!=this.indicatorShape&&(this.indicator=new this.indicatorShape,this.indicator.dialect=this.dialect,this.indicator.bounds=this.bounds,this.indicator.fill=this.indicatorColor,this.indicator.stroke=this.indicatorColor,this.indicator.gradient=this.indicatorGradientColor,this.indicator.direction=this.indicatorDirection,this.indicator.init(this.node))},mxLabel.prototype.redraw=function(){null!=this.indicator&&(this.indicator.fill=this.indicatorColor,this.indicator.stroke=this.indicatorColor,this.indicator.gradient=this.indicatorGradientColor,this.indicator.direction=this.indicatorDirection),mxShape.prototype.redraw.apply(this,arguments)},mxLabel.prototype.isHtmlAllowed=function(){return mxRectangleShape.prototype.isHtmlAllowed.apply(this,arguments)&&null==this.indicatorColor&&null==this.indicatorShape},mxLabel.prototype.paintForeground=function(e,t,n,a,i){this.paintImage(e,t,n,a,i),this.paintIndicator(e,t,n,a,i),mxRectangleShape.prototype.paintForeground.apply(this,arguments)},mxLabel.prototype.paintImage=function(e,t,n,a,i){null!=this.image&&(t=this.getImageBounds(t,n,a,i),e.image(t.x,t.y,t.width,t.height,this.image,!1,!1,!1))},mxLabel.prototype.getImageBounds=function(e,t,n,a){var i=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_ALIGN,mxConstants.ALIGN_LEFT),s=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),o=mxUtils.getNumber(this.style,mxConstants.STYLE_IMAGE_WIDTH,mxConstants.DEFAULT_IMAGESIZE),r=mxUtils.getNumber(this.style,mxConstants.STYLE_IMAGE_HEIGHT,mxConstants.DEFAULT_IMAGESIZE),l=mxUtils.getNumber(this.style,mxConstants.STYLE_SPACING,this.spacing)+5;return new mxRectangle(e=i==mxConstants.ALIGN_CENTER?e+(n-o)/2:i==mxConstants.ALIGN_RIGHT?e+(n-o-l):e+l,t=s==mxConstants.ALIGN_TOP?t+l:s==mxConstants.ALIGN_BOTTOM?t+(a-r-l):t+(a-r)/2,o,r)},mxLabel.prototype.paintIndicator=function(e,t,n,a,i){null!=this.indicator?(this.indicator.bounds=this.getIndicatorBounds(t,n,a,i),this.indicator.paint(e)):null!=this.indicatorImage&&(t=this.getIndicatorBounds(t,n,a,i),e.image(t.x,t.y,t.width,t.height,this.indicatorImage,!1,!1,!1))},mxLabel.prototype.getIndicatorBounds=function(e,t,n,a){var i=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_ALIGN,mxConstants.ALIGN_LEFT),s=mxUtils.getValue(this.style,mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),o=mxUtils.getNumber(this.style,mxConstants.STYLE_INDICATOR_WIDTH,this.indicatorSize),r=mxUtils.getNumber(this.style,mxConstants.STYLE_INDICATOR_HEIGHT,this.indicatorSize),l=this.spacing+5;return new mxRectangle(e=i==mxConstants.ALIGN_RIGHT?e+(n-o-l):i==mxConstants.ALIGN_CENTER?e+(n-o)/2:e+l,t=s==mxConstants.ALIGN_BOTTOM?t+(a-r-l):s==mxConstants.ALIGN_TOP?t+l:t+(a-r)/2,o,r)},mxLabel.prototype.redrawHtmlShape=function(){for(mxRectangleShape.prototype.redrawHtmlShape.apply(this,arguments);this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);if(null!=this.image){var e=document.createElement("img");e.style.position="relative",e.setAttribute("border","0");var t=this.getImageBounds(this.bounds.x,this.bounds.y,this.bounds.width,this.bounds.height);t.x-=this.bounds.x,t.y-=this.bounds.y,e.style.left=Math.round(t.x)+"px",e.style.top=Math.round(t.y)+"px",e.style.width=Math.round(t.width)+"px",e.style.height=Math.round(t.height)+"px",e.src=this.image,this.node.appendChild(e)}},mxUtils.extend(mxCylinder,mxShape),mxCylinder.prototype.maxHeight=40,mxCylinder.prototype.svgStrokeTolerance=0,mxCylinder.prototype.paintVertexShape=function(e,t,n,a,i){e.translate(t,n),e.begin(),this.redrawPath(e,t,n,a,i,!1),e.fillAndStroke(),e.setShadow(!1),e.begin(),this.redrawPath(e,t,n,a,i,!0),e.stroke()},mxCylinder.prototype.redrawPath=function(e,t,n,a,i,s){t=Math.min(this.maxHeight,Math.round(i/5)),(s&&null!=this.fill||!s&&null==this.fill)&&(e.moveTo(0,t),e.curveTo(0,2*t,a,2*t,a,t),s||(e.stroke(),e.begin())),s||(e.moveTo(0,t),e.curveTo(0,-t/3,a,-t/3,a,t),e.lineTo(a,i-t),e.curveTo(a,i+t/3,0,i+t/3,0,i-t),e.close())},mxUtils.extend(mxConnector,mxPolyline),mxConnector.prototype.paintEdgeShape=function(e,t){var n=this.createMarker(e,t,!0),a=this.createMarker(e,t,!1);null==this.style||1!=this.style[mxConstants.STYLE_CURVED]?this.paintLine(e,t,this.isRounded):this.paintCurvedLine(e,t),e.setFillColor(this.stroke),e.setShadow(!1),e.setDashed(!1),null!=n&&n(),null!=a&&a()},mxConnector.prototype.paintCurvedLine=function(e,t){e.begin();var n=t[0],a=t.length;for(e.moveTo(n.x,n.y),n=1;n<a-2;n++){var i=t[n],s=t[n+1];e.quadTo(i.x,i.y,(i.x+s.x)/2,(i.y+s.y)/2)}i=t[a-2],s=t[a-1],e.quadTo(i.x,i.y,s.x,s.y),e.stroke()},mxConnector.prototype.createMarker=function(e,t,n){var a=t.length,i=n?t[1]:t[a-2],s=(a=(t=n?t[0]:t[a-1]).x-i.x,t.y-i.y),o=(i=a/(o=Math.max(1,Math.sqrt(a*a+s*s))),a=s/o,s=mxUtils.getNumber(this.style,n?mxConstants.STYLE_STARTSIZE:mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE),mxUtils.getValue(this.style,n?mxConstants.STYLE_STARTARROW:mxConstants.STYLE_ENDARROW));return mxMarker.createMarker(e,this,o,t,i,a,s,n,this.strokewidth,0!=this.style[n?mxConstants.STYLE_STARTFILL:mxConstants.STYLE_ENDFILL])},mxConnector.prototype.augmentBoundingBox=function(e){mxShape.prototype.augmentBoundingBox.apply(this,arguments);var t=0;mxUtils.getValue(this.style,mxConstants.STYLE_STARTARROW,mxConstants.NONE)!=mxConstants.NONE&&(t=mxUtils.getNumber(this.style,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_MARKERSIZE)+1),mxUtils.getValue(this.style,mxConstants.STYLE_ENDARROW,mxConstants.NONE)!=mxConstants.NONE&&(t=Math.max(t,mxUtils.getNumber(this.style,mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE))+1),e.grow(Math.ceil(t*this.scale))},mxUtils.extend(mxSwimlane,mxShape),mxSwimlane.prototype.imageSize=16,mxSwimlane.prototype.getGradientBounds=function(e,t,n,a,i){return new mxRectangle(t,n,a,Math.min(i,mxUtils.getValue(this.style,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)))},mxSwimlane.prototype.getRotation=function(){var e=mxShape.prototype.getRotation.apply(this,arguments);return 1!=mxUtils.getValue(this.style,mxConstants.STYLE_HORIZONTAL,1)&&(e+=mxText.prototype.verticalTextRotation),e},mxSwimlane.prototype.getTextRotation=function(){return this.getRotation()},mxSwimlane.prototype.isPaintBoundsInverted=function(){return mxShape.prototype.isPaintBoundsInverted.apply(this,arguments)||1!=mxUtils.getValue(this.style,mxConstants.STYLE_HORIZONTAL,1)},mxSwimlane.prototype.getArcSize=function(e,t,n){return 3*n*(mxUtils.getValue(this.style,mxConstants.STYLE_ARCSIZE,100*mxConstants.RECTANGLE_ROUNDING_FACTOR)/100)},mxSwimlane.prototype.paintVertexShape=function(e,t,n,a,i){var s=Math.min(i,mxUtils.getValue(this.style,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)),o=mxUtils.getValue(this.style,mxConstants.STYLE_SWIMLANE_FILLCOLOR,mxConstants.NONE),r=1==mxUtils.getValue(this.style,mxConstants.STYLE_SWIMLANE_LINE,1),l=0;e.translate(t,n),this.isRounded?(l=this.getArcSize(a,i,s),this.paintRoundedSwimlane(e,t,n,a,i,s,l,o,r)):this.paintSwimlane(e,t,n,a,i,s,o,r),o=mxUtils.getValue(this.style,mxConstants.STYLE_SEPARATORCOLOR,mxConstants.NONE),this.paintSeparator(e,a,s,i,o),null!=this.image&&(i=this.getImageBounds(t,s,a,i),e.image(i.x-t,i.y-n,i.width,i.height,this.image,!1,!1,!1)),this.glass&&(e.setShadow(!1),this.paintGlassEffect(e,0,0,a,s,l))},mxSwimlane.prototype.paintSwimlane=function(e,t,n,a,i,s,o,r){o!=mxConstants.NONE&&(e.save(),e.setFillColor(o),e.rect(0,0,a,i),e.fillAndStroke(),e.restore(),e.setShadow(!1)),e.begin(),e.moveTo(0,s),e.lineTo(0,0),e.lineTo(a,0),e.lineTo(a,s),r&&e.close(),e.fillAndStroke(),s<i&&o==mxConstants.NONE&&(e.pointerEvents=!1,e.begin(),e.moveTo(0,s),e.lineTo(0,i),e.lineTo(a,i),e.lineTo(a,s),e.stroke())},mxSwimlane.prototype.paintRoundedSwimlane=function(e,t,n,a,i,s,o,r,l){r!=mxConstants.NONE&&(e.save(),e.setFillColor(r),e.roundrect(0,0,a,i,o,o),e.fillAndStroke(),e.restore(),e.setShadow(!1)),e.begin(),e.moveTo(a,s),e.lineTo(a,o),e.quadTo(a,0,a-Math.min(a/2,o),0),e.lineTo(Math.min(a/2,o),0),e.quadTo(0,0,0,o),e.lineTo(0,s),l&&e.close(),e.fillAndStroke(),s<i&&r==mxConstants.NONE&&(e.pointerEvents=!1,e.begin(),e.moveTo(0,s),e.lineTo(0,i-o),e.quadTo(0,i,Math.min(a/2,o),i),e.lineTo(a-Math.min(a/2,o),i),e.quadTo(a,i,a,i-o),e.lineTo(a,s),e.stroke())},mxSwimlane.prototype.paintSeparator=function(e,t,n,a,i){i!=mxConstants.NONE&&(e.setStrokeColor(i),e.setDashed(!0),e.begin(),e.moveTo(t,n),e.lineTo(t,a),e.stroke(),e.setDashed(!1))},mxSwimlane.prototype.getImageBounds=function(e,t,n,a){return new mxRectangle(e+n-this.imageSize,t,this.imageSize,this.imageSize)},mxGraphLayout.prototype.graph=null,mxGraphLayout.prototype.useBoundingBox=!0,mxGraphLayout.prototype.parent=null,mxGraphLayout.prototype.moveCell=function(e,t,n){},mxGraphLayout.prototype.execute=function(e){},mxGraphLayout.prototype.getGraph=function(){return this.graph},mxGraphLayout.prototype.getConstraint=function(e,t,n,a){return null!=(t=null!=(n=this.graph.view.getState(t))?n.style:this.graph.getCellStyle(t))?t[e]:null},mxGraphLayout.traverse=function(e,t,n,a,i){if(null!=n&&null!=e){t=null==t||t,i=i||[];var s=mxCellPath.create(e);if(null==i[s]&&(null==(a=n(i[s]=e,a))||a)&&0<(a=this.graph.model.getEdgeCount(e)))for(s=0;s<a;s++){var o=this.graph.model.getEdgeAt(e,s),r=this.graph.model.getTerminal(o,!0)==e;t&&!r||(r=this.graph.view.getVisibleTerminal(o,!r),this.traverse(r,t,n,o,i))}}},mxGraphLayout.prototype.isVertexMovable=function(e){return this.graph.isCellMovable(e)},mxGraphLayout.prototype.isVertexIgnored=function(e){return!this.graph.getModel().isVertex(e)||!this.graph.isCellVisible(e)},mxGraphLayout.prototype.isEdgeIgnored=function(e){var t=this.graph.getModel();return!t.isEdge(e)||!this.graph.isCellVisible(e)||null==t.getTerminal(e,!0)||null==t.getTerminal(e,!1)},mxGraphLayout.prototype.setEdgeStyleEnabled=function(e,t){this.graph.setCellStyles(mxConstants.STYLE_NOEDGESTYLE,t?"0":"1",[e])},mxGraphLayout.prototype.setOrthogonalEdge=function(e,t){this.graph.setCellStyles(mxConstants.STYLE_ORTHOGONAL,t?"1":"0",[e])},mxGraphLayout.prototype.getParentOffset=function(e){var t=new mxPoint;if(null!=e&&e!=this.parent){var n=this.graph.getModel();if(n.isAncestor(this.parent,e))for(var a=n.getGeometry(e);e!=this.parent;)t.x+=a.x,t.y+=a.y,e=n.getParent(e),a=n.getGeometry(e)}return t},mxGraphLayout.prototype.setEdgePoints=function(e,t){if(null!=e){var n=this.graph.model,a=n.getGeometry(e);if(null==a?(a=new mxGeometry).setRelative(!0):a=a.clone(),null!=this.parent&&null!=t)for(var i=n.getParent(e),s=(i=this.getParentOffset(i),0);s<t.length;s++)t[s].x-=i.x,t[s].y-=i.y;a.points=t,n.setGeometry(e,a)}},mxGraphLayout.prototype.setVertexLocation=function(e,t,n){var a=this.graph.getModel(),i=a.getGeometry(e),s=null;if(null!=i){if(s=new mxRectangle(t,n,i.width,i.height),this.useBoundingBox){var o=this.graph.getView().getState(e);if(null!=o&&null!=o.text&&null!=o.text.boundingBox){var r=this.graph.getView().scale,l=o.text.boundingBox;o.text.boundingBox.x<o.x&&(t+=(o.x-l.x)/r,s.width=l.width),o.text.boundingBox.y<o.y&&(n+=(o.y-l.y)/r,s.height=l.height)}}null!=this.parent&&(null!=(o=a.getParent(e))&&o!=this.parent&&(t-=(o=this.getParentOffset(o)).x,n-=o.y)),i.x==t&&i.y==n||((i=i.clone()).x=t,i.y=n,a.setGeometry(e,i))}return s},mxGraphLayout.prototype.getVertexBounds=function(e){var t=this.graph.getModel().getGeometry(e);if(this.useBoundingBox&&(null!=(r=this.graph.getView().getState(e))&&null!=r.text&&null!=r.text.boundingBox)){var n=this.graph.getView().scale,a=r.text.boundingBox,i=Math.max(r.x-a.x,0)/n,s=Math.max(r.y-a.y,0)/n,o=Math.max(a.x+a.width-(r.x+r.width),0)/n,r=Math.max(a.y+a.height-(r.y+r.height),0)/n;t=new mxRectangle(t.x-i,t.y-s,t.width+i+o,t.height+s+r)}return null!=this.parent&&(e=this.graph.getModel().getParent(e),t=t.clone(),null!=e&&e!=this.parent&&(e=this.getParentOffset(e),t.x+=e.x,t.y+=e.y)),new mxRectangle(t.x,t.y,t.width,t.height)},mxGraphLayout.prototype.arrangeGroups=function(e,t){this.graph.getModel().beginUpdate();try{for(var n=e.length-1;0<=n;n--){var a=e[n],i=this.graph.getChildVertices(a),s=this.graph.getBoundingBoxFromGeometry(i),o=this.graph.getCellGeometry(a),r=0,l=0;if(this.graph.isSwimlane(a)){var d=this.graph.getStartSize(a);r=d.width,l=d.height}null!=s&&null!=o&&((o=o.clone()).x=o.x+s.x-t-r,o.y=o.y+s.y-t-l,o.width=s.width+2*t+r,o.height=s.height+2*t+l,this.graph.getModel().setGeometry(a,o),this.graph.moveCells(i,t+r-s.x,t+l-s.y))}}finally{this.graph.getModel().endUpdate()}},mxStackLayout.prototype=new mxGraphLayout,mxStackLayout.prototype.constructor=mxStackLayout,mxStackLayout.prototype.horizontal=null,mxStackLayout.prototype.spacing=null,mxStackLayout.prototype.x0=null,mxStackLayout.prototype.y0=null,mxStackLayout.prototype.border=0,mxStackLayout.prototype.keepFirstLocation=!1,mxStackLayout.prototype.fill=!1,mxStackLayout.prototype.resizeParent=!1,mxStackLayout.prototype.resizeLast=!1,mxStackLayout.prototype.wrap=null,mxStackLayout.prototype.isHorizontal=function(){return this.horizontal},mxStackLayout.prototype.moveCell=function(e,t,n){var a=this.graph.getModel(),i=a.getParent(e),s=this.isHorizontal();if(null!=e&&null!=i){var o=0,r=0,l=a.getChildCount(i);for(t=s?t:n,null!=(o=this.graph.getView().getState(i))&&(t-=s?o.x:o.y),o=0;o<l;o++)if((n=a.getChildAt(i,o))!=e&&null!=(n=a.getGeometry(n))){if(n=s?n.x+n.width/2:n.y+n.height/2,r<t&&t<n)break;r=n}s=i.getIndex(e),s=Math.max(0,o-(s<o?1:0)),a.add(i,e,s)}},mxStackLayout.prototype.getParentSize=function(e){var t=this.graph.getModel(),n=t.getGeometry(e);return null!=this.graph.container&&(null==n&&t.isLayer(e)||e==this.graph.getView().currentRoot)&&(n=new mxRectangle(0,0,this.graph.container.offsetWidth-1,this.graph.container.offsetHeight-1)),n},mxStackLayout.prototype.execute=function(e){if(null!=e){var t=this.isHorizontal(),n=this.graph.getModel(),a=this.getParentSize(e),i=0;null!=a&&(i=t?a.height:a.width);i=i-(2*this.spacing+2*this.border);var s=this.x0+this.border,o=this.y0+this.border;if(this.graph.isSwimlane(e)){var r=this.graph.getCellStyle(e),l=mxUtils.getValue(r,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE);t==(r=mxUtils.getValue(r,mxConstants.STYLE_HORIZONTAL,!0))&&(i-=l),t?o+=l:s+=l}n.beginUpdate();try{l=0,r=null;for(var d=n.getChildCount(e),c=0;c<d;c++){var m=n.getChildAt(e,c);if(!this.isVertexIgnored(m)&&this.isVertexMovable(m)){var u=n.getGeometry(m);null!=u&&(u=u.clone(),null!=this.wrap&&null!=r&&(t&&r.x+r.width+u.width+2*this.spacing>this.wrap||!t&&r.y+r.height+u.height+2*this.spacing>this.wrap)&&(r=null,t?o+=l+this.spacing:s+=l+this.spacing,l=0),l=Math.max(l,t?u.height:u.width),null!=r?t?u.x=r.x+r.width+this.spacing:u.y=r.y+r.height+this.spacing:this.keepFirstLocation||(t?u.x=s:u.y=o),t?u.y=o:u.x=s,this.fill&&0<i&&(t?u.height=i:u.width=i),n.setGeometry(m,u),r=u)}}this.resizeParent&&null!=a&&null!=r&&!this.graph.isCellCollapsed(e)?(a=a.clone(),t?a.width=r.x+r.width+this.spacing:a.height=r.y+r.height+this.spacing,n.setGeometry(e,a)):this.resizeLast&&null!=a&&null!=r&&(t?r.width=a.width-r.x-this.spacing:r.height=a.height-r.y-this.spacing)}finally{n.endUpdate()}}},mxPartitionLayout.prototype=new mxGraphLayout,mxPartitionLayout.prototype.constructor=mxPartitionLayout,mxPartitionLayout.prototype.horizontal=null,mxPartitionLayout.prototype.spacing=null,mxPartitionLayout.prototype.border=null,mxPartitionLayout.prototype.resizeVertices=!0,mxPartitionLayout.prototype.isHorizontal=function(){return this.horizontal},mxPartitionLayout.prototype.moveCell=function(e,t,n){var a=(n=this.graph.getModel()).getParent(e);if(null!=e&&null!=a){var i=0,s=0,o=n.getChildCount(a);for(i=0;i<o;i++){var r=n.getChildAt(a,i);if(null!=(r=this.getVertexBounds(r))){if(r=r.x+r.width/2,s<t&&t<r)break;s=r}}t=a.getIndex(e),t=Math.max(0,i-(t<i?1:0)),n.add(a,e,t)}},mxPartitionLayout.prototype.execute=function(e){var t=this.isHorizontal(),n=this.graph.getModel(),a=n.getGeometry(e);if(null!=this.graph.container&&(null==a&&n.isLayer(e)||e==this.graph.getView().currentRoot)&&(a=new mxRectangle(0,0,this.graph.container.offsetWidth-1,this.graph.container.offsetHeight-1)),null!=a){for(var i=[],s=n.getChildCount(e),o=0;o<s;o++){var r=n.getChildAt(e,o);!this.isVertexIgnored(r)&&this.isVertexMovable(r)&&i.push(r)}if(0<(s=i.length)){var l=this.border,d=this.border,c=(c=t?a.height:a.width)-2*this.border;if(e=this.graph.isSwimlane(e)?this.graph.getStartSize(e):new mxRectangle,c-=t?e.height:e.width,l+=e.width,d+=e.height,e=this.border+(s-1)*this.spacing,0<(a=t?(a.width-l-e)/s:(a.height-d-e)/s)){n.beginUpdate();try{for(o=0;o<s;o++){r=i[o];var m=n.getGeometry(r);null!=m&&((m=m.clone()).x=l,m.y=d,t?(this.resizeVertices&&(m.width=a,m.height=c),l+=a+this.spacing):(this.resizeVertices&&(m.height=a,m.width=c),d+=a+this.spacing),n.setGeometry(r,m))}}finally{n.endUpdate()}}}}},mxCompactTreeLayout.prototype=new mxGraphLayout,mxCompactTreeLayout.prototype.constructor=mxCompactTreeLayout,mxCompactTreeLayout.prototype.horizontal=null,mxCompactTreeLayout.prototype.invert=null,mxCompactTreeLayout.prototype.resizeParent=!0,mxCompactTreeLayout.prototype.groupPadding=10,mxCompactTreeLayout.prototype.parentsChanged=null,mxCompactTreeLayout.prototype.moveTree=!1,mxCompactTreeLayout.prototype.levelDistance=10,mxCompactTreeLayout.prototype.nodeDistance=20,mxCompactTreeLayout.prototype.resetEdges=!0,mxCompactTreeLayout.prototype.prefHozEdgeSep=5,mxCompactTreeLayout.prototype.prefVertEdgeOff=4,mxCompactTreeLayout.prototype.minEdgeJetty=8,mxCompactTreeLayout.prototype.channelBuffer=4,mxCompactTreeLayout.prototype.edgeRouting=!0,mxCompactTreeLayout.prototype.isVertexIgnored=function(e){return mxGraphLayout.prototype.isVertexIgnored.apply(this,arguments)||0==this.graph.getConnections(e).length},mxCompactTreeLayout.prototype.isHorizontal=function(){return this.horizontal},mxCompactTreeLayout.prototype.execute=function(e,t){this.parent=e;var n=this.graph.getModel();if(null==t)if(0<this.graph.getEdges(e,n.getParent(e),this.invert,!this.invert,!1).length)t=e;else{if(0<(o=this.graph.findTreeRoots(e,!0,this.invert)).length)for(var a=0;a<o.length;a++)if(!this.isVertexIgnored(o[a])&&0<this.graph.getEdges(o[a],null,this.invert,!this.invert,!1).length){t=o[a];break}}if(null!=t){this.parentsChanged=this.resizeParent?{}:null,n.beginUpdate();try{var i=this.dfs(t,e);if(null!=i){this.layout(i);var s=this.graph.gridSize,o=s;if(!this.moveTree){var r=this.getVertexBounds(t);null!=r&&(s=r.x,o=r.y)}if((r=null)!=(r=this.isHorizontal()?this.horizontalLayout(i,s,o):this.verticalLayout(i,null,s,o))){var l=a=0;r.x<0&&(a=Math.abs(s-r.x)),r.y<0&&(l=Math.abs(o-r.y)),(0!=a||0!=l)&&this.moveNode(i,a,l),this.resizeParent&&this.adjustParents(),this.edgeRouting&&this.localEdgeProcessing(i)}}}finally{n.endUpdate()}}},mxCompactTreeLayout.prototype.moveNode=function(e,t,n){for(e.x+=t,e.y+=n,this.apply(e),e=e.child;null!=e;)this.moveNode(e,t,n),e=e.next},mxCompactTreeLayout.prototype.dfs=function(e,t,n){n=null!=n?n:[];var a=mxCellPath.create(e),i=null;if(null!=e&&null==n[a]&&!this.isVertexIgnored(e)){n[a]=e;i=this.createNode(e),a=this.graph.getModel();var s=null;e=this.graph.getEdges(e,t,this.invert,!this.invert,!1,!0);for(var o=this.graph.getView(),r=0;r<e.length;r++){var l=e[r];if(!this.isEdgeIgnored(l)){this.resetEdges&&this.setEdgePoints(l,null),this.edgeRouting&&(this.setEdgeStyleEnabled(l,!1),this.setEdgePoints(l,null));var d;l=null!=(d=o.getState(l))?d.getVisibleTerminal(this.invert):o.getVisibleTerminal(l,this.invert);null!=(d=this.dfs(l,t,n))&&null!=a.getGeometry(l)&&(null==s?i.child=d:s.next=d,s=d)}}}return i},mxCompactTreeLayout.prototype.layout=function(e){if(null!=e){for(var t=e.child;null!=t;)this.layout(t),t=t.next;null!=e.child?this.attachParent(e,this.join(e)):this.layoutLeaf(e)}},mxCompactTreeLayout.prototype.horizontalLayout=function(e,t,n,a){if(e.x+=t+e.offsetX,e.y+=n+e.offsetY,a=this.apply(e,a),null!=(t=e.child)){a=this.horizontalLayout(t,e.x,e.y,a),n=e.y+t.offsetY;for(var i=t.next;null!=i;)a=this.horizontalLayout(i,e.x+t.offsetX,n,a),n+=i.offsetY,i=i.next}return a},mxCompactTreeLayout.prototype.verticalLayout=function(e,t,n,a,i){if(e.x+=n+e.offsetY,e.y+=a+e.offsetX,i=this.apply(e,i),null!=(t=e.child))for(i=this.verticalLayout(t,e,e.x,e.y,i),n=e.x+t.offsetY,a=t.next;null!=a;)i=this.verticalLayout(a,e,n,e.y+t.offsetX,i),n+=a.offsetY,a=a.next;return i},mxCompactTreeLayout.prototype.attachParent=function(e,t){var n=this.nodeDistance+this.levelDistance,a=(t-e.width)/2-this.nodeDistance,i=a+e.width+2*this.nodeDistance-t;e.child.offsetX=n+e.height,e.child.offsetY=i,e.contour.upperHead=this.createLine(e.height,0,this.createLine(n,i,e.contour.upperHead)),e.contour.lowerHead=this.createLine(e.height,0,this.createLine(n,a,e.contour.lowerHead))},mxCompactTreeLayout.prototype.layoutLeaf=function(e){var t=2*this.nodeDistance;e.contour.upperTail=this.createLine(e.height+t,0),e.contour.upperHead=e.contour.upperTail,e.contour.lowerTail=this.createLine(0,-e.width-t),e.contour.lowerHead=this.createLine(e.height+t,0,e.contour.lowerTail)},mxCompactTreeLayout.prototype.join=function(e){var t=2*this.nodeDistance,n=e.child;e.contour=n.contour;var a=n.width+t,i=a;for(n=n.next;null!=n;){var s=this.merge(e.contour,n.contour);n.offsetY=s+a,n.offsetX=0,i+=s+(a=n.width+t),n=n.next}return i},mxCompactTreeLayout.prototype.merge=function(e,t){for(var n=0,a=0,i=0,s=e.lowerHead,o=t.upperHead;null!=o&&null!=s;){var r=this.offset(n,a,o.dx,o.dy,s.dx,s.dy);a=a+r,i=i+r;n+o.dx<=s.dx?(n+=o.dx,a+=o.dy,o=o.next):(n-=s.dx,a-=s.dy,s=s.next)}return null!=o?(n=this.bridge(e.upperTail,0,0,o,n,a),e.upperTail=null!=n.next?t.upperTail:n,e.lowerTail=t.lowerTail):null==(n=this.bridge(t.lowerTail,n,a,s,0,0)).next&&(e.lowerTail=n),e.lowerHead=t.lowerHead,i},mxCompactTreeLayout.prototype.offset=function(e,t,n,a,i,s){var o;return i<=e||e+n<=0?0:0<(o=0<i*a-n*s?e<0?e*a/n-t:0<e?e*s/i-t:-t:i<e+n?s-(t+(i-e)*a/n):e+n<i?(n+e)*s/i-(t+a):s-(t+a))?o:0},mxCompactTreeLayout.prototype.bridge=function(e,t,n,a,i,s){return t=i+a.dx-t,i=i=0,0==a.dx?i=a.dy:(i=t*a.dy,i/=a.dx),t=this.createLine(t,i,a.next),e.next=this.createLine(0,s+a.dy-i-n,t),t},mxCompactTreeLayout.prototype.createNode=function(e){var t={};return t.cell=e,t.x=0,t.y=0,t.width=0,t.height=0,null!=(e=this.getVertexBounds(e))&&(this.isHorizontal()?(t.width=e.height,t.height=e.width):(t.width=e.width,t.height=e.height)),t.offsetX=0,t.offsetY=0,t.contour={},t},mxCompactTreeLayout.prototype.apply=function(e,t){var n=this.graph.getModel(),a=e.cell,i=n.getGeometry(a);return null!=a&&null!=i&&(this.isVertexMovable(a)&&(i=this.setVertexLocation(a,e.x,e.y),this.resizeParent&&(n=n.getParent(a),a=mxCellPath.create(n),null==this.parentsChanged[a]&&(this.parentsChanged[a]=n))),t=null==t?new mxRectangle(i.x,i.y,i.width,i.height):new mxRectangle(Math.min(t.x,i.x),Math.min(t.y,i.y),Math.max(t.x+t.width,i.x+i.width),Math.max(t.y+t.height,i.y+i.height))),t},mxCompactTreeLayout.prototype.createLine=function(e,t,n){var a={};return a.dx=e,a.dy=t,a.next=n,a},mxCompactTreeLayout.prototype.adjustParents=function(){var e,t=[];for(e in this.parentsChanged)t.push(this.parentsChanged[e]);this.arrangeGroups(mxUtils.sortCells(t,!0),this.groupPadding)},mxCompactTreeLayout.prototype.localEdgeProcessing=function(e){for(this.processNodeOutgoing(e),e=e.child;null!=e;)this.localEdgeProcessing(e),e=e.next},mxCompactTreeLayout.prototype.processNodeOutgoing=function(e){for(var t=e.child,n=e.cell,a=0,i=[];null!=t;){a++;var s=t.x;this.horizontal&&(s=t.y),i.push(new WeightedCellSorter(t,s)),t=t.next}i.sort(WeightedCellSorter.prototype.compare),(s=e.width)>(o=(a+1)*this.prefHozEdgeSep)+2*this.prefHozEdgeSep&&(s-=2*this.prefHozEdgeSep),t=(e=s/a)/2,s>o+2*this.prefHozEdgeSep&&(t+=this.prefHozEdgeSep);s=this.minEdgeJetty-this.prefVertEdgeOff;for(var o=0,r=this.getVertexBounds(n),l=0;l<i.length;l++){for(var d=i[l].cell.cell,c=this.getVertexBounds(d),m=(d=this.graph.getEdgesBetween(n,d,!1),[]),u=0,p=0,g=0;g<d.length;g++)this.horizontal?(u=r.x+r.width,p=r.y+t,m.push(new mxPoint(u,p)),u=r.x+r.width+s,m.push(new mxPoint(u,p)),p=c.y+c.height/2):(u=r.x+t,p=r.y+r.height,m.push(new mxPoint(u,p)),p=r.y+r.height+s,m.push(new mxPoint(u,p)),u=c.x+c.width/2),m.push(new mxPoint(u,p)),this.setEdgePoints(d[g],m);l<a/2?s+=this.prefVertEdgeOff:a/2<l&&(s-=this.prefVertEdgeOff),t+=e,o=Math.max(o,s)}},WeightedCellSorter.prototype.weightedValue=0,WeightedCellSorter.prototype.nudge=!1,WeightedCellSorter.prototype.visited=!1,WeightedCellSorter.prototype.rankIndex=null,WeightedCellSorter.prototype.cell=null,WeightedCellSorter.prototype.compare=function(e,t){return null!=e&&null!=t?t.weightedValue>e.weightedValue?1:t.weightedValue<e.weightedValue?-1:t.nudge?1:-1:0},mxFastOrganicLayout.prototype=new mxGraphLayout,mxFastOrganicLayout.prototype.constructor=mxFastOrganicLayout,mxFastOrganicLayout.prototype.useInputOrigin=!0,mxFastOrganicLayout.prototype.resetEdges=!0,mxFastOrganicLayout.prototype.disableEdgeStyle=!0,mxFastOrganicLayout.prototype.forceConstant=50,mxFastOrganicLayout.prototype.forceConstantSquared=0,mxFastOrganicLayout.prototype.minDistanceLimit=2,mxFastOrganicLayout.prototype.maxDistanceLimit=500,mxFastOrganicLayout.prototype.minDistanceLimitSquared=4,mxFastOrganicLayout.prototype.initialTemp=200,mxFastOrganicLayout.prototype.temperature=0,mxFastOrganicLayout.prototype.maxIterations=0,mxFastOrganicLayout.prototype.iteration=0,mxFastOrganicLayout.prototype.allowedToRun=!0,mxFastOrganicLayout.prototype.isVertexIgnored=function(e){return mxGraphLayout.prototype.isVertexIgnored.apply(this,arguments)||0==this.graph.getConnections(e).length},mxFastOrganicLayout.prototype.execute=function(e){var t=this.graph.getModel();this.vertexArray=[];for(var n=this.graph.getChildVertices(e),a=0;a<n.length;a++)this.isVertexIgnored(n[a])||this.vertexArray.push(n[a]);var i=this.useInputOrigin?this.graph.view.getBounds(this.vertexArray):null,s=this.vertexArray.length;for(this.indices=[],this.dispX=[],this.dispY=[],this.cellLocation=[],this.isMoveable=[],this.neighbours=[],this.radius=[],this.radiusSquared=[],this.forceConstant<.001&&(this.forceConstant=.001),this.forceConstantSquared=this.forceConstant*this.forceConstant,a=0;a<this.vertexArray.length;a++){var o=this.vertexArray[a];this.cellLocation[a]=[];var r=mxCellPath.create(o);this.indices[r]=a;var l=this.getVertexBounds(o),d=l.width,c=l.height,m=l.x,u=l.y;this.cellLocation[a][0]=m+d/2,this.cellLocation[a][1]=u+c/2,this.radius[a]=Math.min(d,c),this.radiusSquared[a]=this.radius[a]*this.radius[a]}t.beginUpdate();try{for(a=0;a<s;a++){this.dispX[a]=0,this.dispY[a]=0,this.isMoveable[a]=this.isVertexMovable(this.vertexArray[a]);var p=this.graph.getConnections(this.vertexArray[a],e);n=this.graph.getOpposites(p,this.vertexArray[a]);for(this.neighbours[a]=[],d=0;d<n.length;d++){this.resetEdges&&this.graph.resetEdge(p[d]),this.disableEdgeStyle&&this.setEdgeStyleEnabled(p[d],!1);r=mxCellPath.create(n[d]);var g=this.indices[r];this.neighbours[a][d]=null!=g?g:a}}for(this.temperature=this.initialTemp,0==this.maxIterations&&(this.maxIterations=20*Math.sqrt(s)),this.iteration=0;this.iteration<this.maxIterations;this.iteration++){if(!this.allowedToRun)return;this.calcRepulsion(),this.calcAttraction(),this.calcPositions(),this.reduceTemperature()}for(e=n=null,a=0;a<this.vertexArray.length;a++)o=this.vertexArray[a],this.isVertexMovable(o)&&(null!=(l=this.getVertexBounds(o))&&(this.cellLocation[a][0]-=l.width/2,this.cellLocation[a][1]-=l.height/2,m=this.graph.snap(this.cellLocation[a][0]),u=this.graph.snap(this.cellLocation[a][1]),this.setVertexLocation(o,m,u),n=null==n?m:Math.min(n,m),e=null==e?u:Math.min(e,u)));a=1-(n||0),o=1-(e||0),null!=i&&(a+=i.x,o+=i.y),this.graph.moveCells(this.vertexArray,a,o)}finally{t.endUpdate()}},mxFastOrganicLayout.prototype.calcPositions=function(){for(var e=0;e<this.vertexArray.length;e++)if(this.isMoveable[e]){(n=Math.sqrt(this.dispX[e]*this.dispX[e]+this.dispY[e]*this.dispY[e]))<.001&&(n=.001);var t=this.dispX[e]/n*Math.min(n,this.temperature),n=this.dispY[e]/n*Math.min(n,this.temperature);this.dispX[e]=0,this.dispY[e]=0,this.cellLocation[e][0]+=t,this.cellLocation[e][1]+=n}},mxFastOrganicLayout.prototype.calcAttraction=function(){for(var e=0;e<this.vertexArray.length;e++)for(var t=0;t<this.neighbours[e].length;t++){var n=this.neighbours[e][t];if(e!=n&&this.isMoveable[e]&&this.isMoveable[n]){(a=(s=this.cellLocation[e][0]-this.cellLocation[n][0])*s+(o=this.cellLocation[e][1]-this.cellLocation[n][1])*o-this.radiusSquared[e]-this.radiusSquared[n])<this.minDistanceLimitSquared&&(a=this.minDistanceLimitSquared);var a,i=Math.sqrt(a),s=s/i*(a=a/this.forceConstant),o=o/i*a;this.dispX[e]-=s,this.dispY[e]-=o,this.dispX[n]+=s,this.dispY[n]+=o}}},mxFastOrganicLayout.prototype.calcRepulsion=function(){for(var e=this.vertexArray.length,t=0;t<e;t++)for(var n=t;n<e;n++){if(!this.allowedToRun)return;if(n!=t&&this.isMoveable[t]&&this.isMoveable[n]){var a=this.cellLocation[t][0]-this.cellLocation[n][0],i=this.cellLocation[t][1]-this.cellLocation[n][1];0==a&&(a=.01+Math.random()),0==i&&(i=.01+Math.random());var s=Math.sqrt(a*a+i*i),o=s-this.radius[t]-this.radius[n];o>this.maxDistanceLimit||(o<this.minDistanceLimit&&(o=this.minDistanceLimit),a=a/s*(o=this.forceConstantSquared/o),i=i/s*o,this.dispX[t]+=a,this.dispY[t]+=i,this.dispX[n]-=a,this.dispY[n]-=i)}}},mxFastOrganicLayout.prototype.reduceTemperature=function(){this.temperature=this.initialTemp*(1-this.iteration/this.maxIterations)},mxCircleLayout.prototype=new mxGraphLayout,mxCircleLayout.prototype.constructor=mxCircleLayout,mxCircleLayout.prototype.radius=null,mxCircleLayout.prototype.moveCircle=!1,mxCircleLayout.prototype.x0=0,mxCircleLayout.prototype.y0=0,mxCircleLayout.prototype.resetEdges=!0,mxCircleLayout.prototype.disableEdgeStyle=!0,mxCircleLayout.prototype.execute=function(e){var t=this.graph.getModel();t.beginUpdate();try{for(var n=0,a=null,i=null,s=[],o=t.getChildCount(e),r=0;r<o;r++){var l=t.getChildAt(e,r);if(this.isVertexIgnored(l))this.isEdgeIgnored(l)||(this.resetEdges&&this.graph.resetEdge(l),this.disableEdgeStyle&&this.setEdgeStyleEnabled(l,!1));else{s.push(l);var d=this.getVertexBounds(l);a=null==a?d.y:Math.min(a,d.y),i=null==i?d.x:Math.min(i,d.x),n=Math.max(n,Math.max(d.width,d.height))}}var c=this.getRadius(s.length,n);this.moveCircle&&(i=this.x0,a=this.y0),this.circle(s,c,i,a)}finally{t.endUpdate()}},mxCircleLayout.prototype.getRadius=function(e,t){return Math.max(e*t/Math.PI,this.radius)},mxCircleLayout.prototype.circle=function(e,t,n,a){for(var i=e.length,s=2*Math.PI/i,o=0;o<i;o++)this.isVertexMovable(e[o])&&this.setVertexLocation(e[o],n+t+t*Math.sin(o*s),a+t+t*Math.cos(o*s))},mxParallelEdgeLayout.prototype=new mxGraphLayout,mxParallelEdgeLayout.prototype.constructor=mxParallelEdgeLayout,mxParallelEdgeLayout.prototype.spacing=20,mxParallelEdgeLayout.prototype.execute=function(e){e=this.findParallels(e),this.graph.model.beginUpdate();try{for(var t in e){var n=e[t];1<n.length&&this.layout(n)}}finally{this.graph.model.endUpdate()}},mxParallelEdgeLayout.prototype.findParallels=function(e){for(var t=this.graph.getModel(),n=[],a=t.getChildCount(e),i=0;i<a;i++){var s=t.getChildAt(e,i);if(!this.isEdgeIgnored(s)){var o=this.getEdgeId(s);null!=o&&(null==n[o]&&(n[o]=[]),n[o].push(s))}}return n},mxParallelEdgeLayout.prototype.getEdgeId=function(e){var t=this.graph.getView(),n=t.getState(e),a=null!=n?n.getVisibleTerminal(!0):t.getVisibleTerminal(e,!0);return e=null!=n?n.getVisibleTerminal(!1):t.getVisibleTerminal(e,!1),null!=a&&null!=e?(a=mxCellPath.create(a),(e=mxCellPath.create(e))<a?e+"-"+a:a+"-"+e):null},mxParallelEdgeLayout.prototype.layout=function(e){var t=e[0];if((o=(n=this.graph.getModel()).getGeometry(n.getTerminal(t,!0)))==(s=n.getGeometry(n.getTerminal(t,!1)))){t=o.x+o.width+this.spacing;for(var n=o.y+o.height/2,a=0;a<e.length;a++)this.route(e[a],t,n),t+=this.spacing}else if(null!=o&&null!=s){t=o.x+o.width/2,n=o.y+o.height/2,a=s.x+s.width/2-t;var i=s.y+s.height/2-n,s=Math.sqrt(a*a+i*i),o=i*this.spacing/s;for(s=a*this.spacing/s,t=t+a/2+o*(e.length-1)/2,n=n+i/2-s*(e.length-1)/2,a=0;a<e.length;a++)this.route(e[a],t,n),t-=o,n+=s}},mxParallelEdgeLayout.prototype.route=function(e,t,n){this.graph.isCellMovable(e)&&this.setEdgePoints(e,[new mxPoint(t,n)])},mxCompositeLayout.prototype=new mxGraphLayout,mxCompositeLayout.prototype.constructor=mxCompositeLayout,mxCompositeLayout.prototype.layouts=null,mxCompositeLayout.prototype.master=null,mxCompositeLayout.prototype.moveCell=function(e,t,n){null!=this.master?this.master.move.apply(this.master,arguments):this.layouts[0].move.apply(this.layouts[0],arguments)},mxCompositeLayout.prototype.execute=function(e){var t=this.graph.getModel();t.beginUpdate();try{for(var n=0;n<this.layouts.length;n++)this.layouts[n].execute.apply(this.layouts[n],arguments)}finally{t.endUpdate()}},mxEdgeLabelLayout.prototype=new mxGraphLayout,mxEdgeLabelLayout.prototype.constructor=mxEdgeLabelLayout,mxEdgeLabelLayout.prototype.execute=function(e){for(var t=this.graph.view,n=this.graph.getModel(),a=[],i=[],s=n.getChildCount(e),o=0;o<s;o++){var r=n.getChildAt(e,o),l=t.getState(r);null!=l&&(this.isVertexIgnored(r)?this.isEdgeIgnored(r)||a.push(l):i.push(l))}this.placeLabels(i,a)},mxEdgeLabelLayout.prototype.placeLabels=function(e,t){var n=this.graph.getModel();n.beginUpdate();try{for(var a=0;a<t.length;a++){var i=t[a];if(null!=i&&null!=i.text&&null!=i.text.boundingBox)for(var s=0;s<e.length;s++){var o=e[s];null!=o&&this.avoid(i,o)}}}finally{n.endUpdate()}},mxEdgeLabelLayout.prototype.avoid=function(e,t){var n=this.graph.getModel(),a=e.text.boundingBox;if(mxUtils.intersects(a,t)){var i=-a.y-a.height+t.y,s=-a.y+t.y+t.height;i=Math.abs(i)<Math.abs(s)?i:s,s=-a.x-a.width+t.x,a=-a.x+t.x+t.width,a=Math.abs(s)<Math.abs(a)?s:a;Math.abs(a)<Math.abs(i)?i=0:a=0,null!=(s=n.getGeometry(e.cell))&&(null!=(s=s.clone()).offset?(s.offset.x+=a,s.offset.y+=i):s.offset=new mxPoint(a,i),n.setGeometry(e.cell,s))}},mxGraphAbstractHierarchyCell.prototype.maxRank=-1,mxGraphAbstractHierarchyCell.prototype.minRank=-1,mxGraphAbstractHierarchyCell.prototype.x=null,mxGraphAbstractHierarchyCell.prototype.y=null,mxGraphAbstractHierarchyCell.prototype.width=0,mxGraphAbstractHierarchyCell.prototype.height=0,mxGraphAbstractHierarchyCell.prototype.nextLayerConnectedCells=null,mxGraphAbstractHierarchyCell.prototype.previousLayerConnectedCells=null,mxGraphAbstractHierarchyCell.prototype.temp=null,mxGraphAbstractHierarchyCell.prototype.getNextLayerConnectedCells=function(e){return null},mxGraphAbstractHierarchyCell.prototype.getPreviousLayerConnectedCells=function(e){return null},mxGraphAbstractHierarchyCell.prototype.isEdge=function(){return!1},mxGraphAbstractHierarchyCell.prototype.isVertex=function(){return!1},mxGraphAbstractHierarchyCell.prototype.getGeneralPurposeVariable=function(e){return null},mxGraphAbstractHierarchyCell.prototype.setGeneralPurposeVariable=function(e,t){return null},mxGraphAbstractHierarchyCell.prototype.setX=function(e,t){this.isVertex()?this.x[0]=t:this.isEdge()&&(this.x[e-this.minRank-1]=t)},mxGraphAbstractHierarchyCell.prototype.getX=function(e){return this.isVertex()?this.x[0]:this.isEdge()?this.x[e-this.minRank-1]:0},mxGraphAbstractHierarchyCell.prototype.setY=function(e,t){this.isVertex()?this.y[0]=t:this.isEdge()&&(this.y[e-this.minRank-1]=t)},mxGraphHierarchyNode.prototype=new mxGraphAbstractHierarchyCell,mxGraphHierarchyNode.prototype.constructor=mxGraphHierarchyNode,mxGraphHierarchyNode.prototype.cell=null,mxGraphHierarchyNode.prototype.connectsAsTarget=[],mxGraphHierarchyNode.prototype.connectsAsSource=[],mxGraphHierarchyNode.prototype.hashCode=!1,mxGraphHierarchyNode.prototype.getRankValue=function(e){return this.maxRank},mxGraphHierarchyNode.prototype.getNextLayerConnectedCells=function(e){if(null==this.nextLayerConnectedCells){this.nextLayerConnectedCells=[],this.nextLayerConnectedCells[0]=[];for(var t=0;t<this.connectsAsTarget.length;t++){var n=this.connectsAsTarget[t];-1==n.maxRank||n.maxRank==e+1?this.nextLayerConnectedCells[0].push(n.source):this.nextLayerConnectedCells[0].push(n)}}return this.nextLayerConnectedCells[0]},mxGraphHierarchyNode.prototype.getPreviousLayerConnectedCells=function(e){if(null==this.previousLayerConnectedCells){this.previousLayerConnectedCells=[],this.previousLayerConnectedCells[0]=[];for(var t=0;t<this.connectsAsSource.length;t++){var n=this.connectsAsSource[t];-1==n.minRank||n.minRank==e-1?this.previousLayerConnectedCells[0].push(n.target):this.previousLayerConnectedCells[0].push(n)}}return this.previousLayerConnectedCells[0]},mxGraphHierarchyNode.prototype.isVertex=function(){return!0},mxGraphHierarchyNode.prototype.getGeneralPurposeVariable=function(e){return this.temp[0]},mxGraphHierarchyNode.prototype.setGeneralPurposeVariable=function(e,t){this.temp[0]=t},mxGraphHierarchyNode.prototype.isAncestor=function(e){if(null!=e&&null!=this.hashCode&&null!=e.hashCode&&this.hashCode.length<e.hashCode.length){if(this.hashCode==e.hashCode)return!0;if(null==this.hashCode||null==this.hashCode)return!1;for(var t=0;t<this.hashCode.length;t++)if(this.hashCode[t]!=e.hashCode[t])return!1;return!0}return!1},mxGraphHierarchyNode.prototype.getCoreCell=function(){return this.cell},mxGraphHierarchyEdge.prototype=new mxGraphAbstractHierarchyCell,mxGraphHierarchyEdge.prototype.constructor=mxGraphHierarchyEdge,mxGraphHierarchyEdge.prototype.edges=null,mxGraphHierarchyEdge.prototype.source=null,mxGraphHierarchyEdge.prototype.target=null,mxGraphHierarchyEdge.prototype.isReversed=!1,mxGraphHierarchyEdge.prototype.invert=function(e){e=this.source,this.source=this.target,this.target=e,this.isReversed=!this.isReversed},mxGraphHierarchyEdge.prototype.getNextLayerConnectedCells=function(e){if(null==this.nextLayerConnectedCells){this.nextLayerConnectedCells=[];for(var t=0;t<this.temp.length;t++)this.nextLayerConnectedCells[t]=[],t==this.temp.length-1?this.nextLayerConnectedCells[t].push(this.source):this.nextLayerConnectedCells[t].push(this)}return this.nextLayerConnectedCells[e-this.minRank-1]},mxGraphHierarchyEdge.prototype.getPreviousLayerConnectedCells=function(e){if(null==this.previousLayerConnectedCells){this.previousLayerConnectedCells=[];for(var t=0;t<this.temp.length;t++)this.previousLayerConnectedCells[t]=[],0==t?this.previousLayerConnectedCells[t].push(this.target):this.previousLayerConnectedCells[t].push(this)}return this.previousLayerConnectedCells[e-this.minRank-1]},mxGraphHierarchyEdge.prototype.isEdge=function(){return!0},mxGraphHierarchyEdge.prototype.getGeneralPurposeVariable=function(e){return this.temp[e-this.minRank-1]},mxGraphHierarchyEdge.prototype.setGeneralPurposeVariable=function(e,t){this.temp[e-this.minRank-1]=t},mxGraphHierarchyEdge.prototype.getCoreCell=function(){return null!=this.edges&&0<this.edges.length?this.edges[0]:null},mxGraphHierarchyModel.prototype.maxRank=null,mxGraphHierarchyModel.prototype.vertexMapper=null,mxGraphHierarchyModel.prototype.edgeMapper=null,mxGraphHierarchyModel.prototype.ranks=null,mxGraphHierarchyModel.prototype.roots=null,mxGraphHierarchyModel.prototype.parent=null,mxGraphHierarchyModel.prototype.dfsCount=0,mxGraphHierarchyModel.prototype.SOURCESCANSTARTRANK=1e8,mxGraphHierarchyModel.prototype.tightenToSource=!1,mxGraphHierarchyModel.prototype.createInternalCells=function(e,t,n){for(var a=e.getGraph(),i=0;i<t.length;i++){n[i]=new mxGraphHierarchyNode(t[i]);var s=mxCellPath.create(t[i]);this.vertexMapper[s]=n[i],s=e.getEdges(t[i]),n[i].connectsAsSource=[];for(var o=0;o<s.length;o++){if((d=e.getVisibleTerminal(s[o],!1))!=t[i]&&d!=t[i]&&e.graph.model.isVertex(d)&&!e.isVertexIgnored(d)){var r=e.getEdgesBetween(t[i],d,!1),l=e.getEdgesBetween(t[i],d,!0),d=mxCellPath.create(r[0]);if(null!=r&&0<r.length&&null==this.edgeMapper[d]&&2*l.length>=r.length){l=new mxGraphHierarchyEdge(r);for(var c=0;c<r.length;c++){var m=r[c];d=mxCellPath.create(m);this.edgeMapper[d]=l,a.resetEdge(m),e.disableEdgeStyle&&(e.setEdgeStyleEnabled(m,!1),e.setOrthogonalEdge(m,!0))}l.source=n[i],mxUtils.indexOf(n[i].connectsAsSource,l)<0&&n[i].connectsAsSource.push(l)}}}n[i].temp[0]=0}},mxGraphHierarchyModel.prototype.initialRank=function(){var e=[];if(null!=this.roots)for(var t=0;t<this.roots.length;t++){var n=mxCellPath.create(this.roots[t]);null!=(n=this.vertexMapper[n])&&e.push(n)}for(var a in this.vertexMapper)(n=this.vertexMapper[a]).temp[0]=-1;for(var i=e.slice();0<e.length;){var s,o;s=(n=e[0]).connectsAsTarget,o=n.connectsAsSource;var r=!0,l=this.SOURCESCANSTARTRANK;for(t=0;t<s.length;t++){var d=s[t];if(5270620!=d.temp[0]){r=!1;break}d=d.source,l=Math.min(l,d.temp[0]-1)}if(r){if(n.temp[0]=l,this.maxRank=Math.min(this.maxRank,l),null!=o)for(t=0;t<o.length;t++)(d=o[t]).temp[0]=5270620,-1==(d=d.target).temp[0]&&(e.push(d),d.temp[0]=-2);e.shift()}else if(t=e.shift(),e.push(n),t==n&&1==e.length)break}for(a in this.vertexMapper)(n=this.vertexMapper[a]).temp[0]-=this.maxRank;for(t=0;t<i.length;t++)for(e=0,s=(n=i[t]).connectsAsSource,a=0;a<s.length;a++)d=(d=s[a]).target,n.temp[0]=Math.max(e,d.temp[0]+1),e=n.temp[0];this.maxRank=this.SOURCESCANSTARTRANK-this.maxRank},mxGraphHierarchyModel.prototype.fixRanks=function(){var s=[];this.ranks=[];for(var e=0;e<this.maxRank+1;e++)s[e]=[],this.ranks[e]=s[e];var t=null;if(null!=this.roots){var n=this.roots;for(t=[],e=0;e<n.length;e++){var a=mxCellPath.create(n[e]);t[e]=this.vertexMapper[a]}}this.visit(function(e,t,n,a,i){if(0==i&&t.maxRank<0&&t.minRank<0&&(s[t.temp[0]].push(t),t.maxRank=t.temp[0],t.minRank=t.temp[0],t.temp[0]=s[t.maxRank].length-1),null!=e&&null!=n&&1<e.maxRank-t.maxRank)for(n.maxRank=e.maxRank,n.minRank=t.maxRank,n.temp=[],n.x=[],n.y=[],e=n.minRank+1;e<n.maxRank;e++)s[e].push(n),n.setGeneralPurposeVariable(e,s[e].length-1)},t,!1,null)},mxGraphHierarchyModel.prototype.visit=function(e,t,n,a){if(null!=t){for(var i=0;i<t.length;i++){var s=t[i];null!=s&&(null==a&&(a={}),n?(s.hashCode=[],s.hashCode[0]=this.dfsCount,s.hashCode[1]=i,this.extendedDfs(null,s,null,e,a,s.hashCode,i,0)):this.dfs(null,s,null,e,a,0))}this.dfsCount++}},mxGraphHierarchyModel.prototype.dfs=function(e,t,n,a,i,s){if(null!=t){var o=mxCellPath.create(t.cell);if(null==i[o])for(a(e,i[o]=t,n,s,0),e=t.connectsAsSource.slice(),n=0;n<e.length;n++)o=e[n],this.dfs(t,o.target,o,a,i,s+1);else a(e,t,n,s,1)}},mxGraphHierarchyModel.prototype.extendedDfs=function(e,t,n,a,i,s,o,r){if(null!=t)if(null==e||null!=t.hashCode&&t.hashCode[0]==e.hashCode[0]||(s=e.hashCode.length+1,t.hashCode=e.hashCode.slice(),t.hashCode[s-1]=o),null==i[o=mxCellPath.create(t.cell)])for(a(e,i[o]=t,n,r,0),e=t.connectsAsSource.slice(),n=0;n<e.length;n++)o=e[n],this.extendedDfs(t,o.target,o,a,i,t.hashCode,n,r+1);else a(e,t,n,r,1)},mxHierarchicalLayoutStage.prototype.execute=function(e){},mxMedianHybridCrossingReduction.prototype=new mxHierarchicalLayoutStage,mxMedianHybridCrossingReduction.prototype.constructor=mxMedianHybridCrossingReduction,mxMedianHybridCrossingReduction.prototype.layout=null,mxMedianHybridCrossingReduction.prototype.maxIterations=24,mxMedianHybridCrossingReduction.prototype.nestedBestRanks=null,mxMedianHybridCrossingReduction.prototype.currentBestCrossings=0,mxMedianHybridCrossingReduction.prototype.iterationsWithoutImprovement=0,mxMedianHybridCrossingReduction.prototype.maxNoImprovementIterations=2,mxMedianHybridCrossingReduction.prototype.execute=function(e){e=this.layout.getModel(),this.nestedBestRanks=[];for(var t=0;t<e.ranks.length;t++)this.nestedBestRanks[t]=e.ranks[t].slice();var n=0,a=this.calculateCrossings(e);for(t=0;t<this.maxIterations&&n<this.maxNoImprovementIterations;t++){this.weightedMedian(t,e),this.transpose(t,e);var i=this.calculateCrossings(e);if(i<a)for(a=i,i=n=0;i<this.nestedBestRanks.length;i++)for(var s=e.ranks[i],o=0;o<s.length;o++){var r=s[o];this.nestedBestRanks[i][r.getGeneralPurposeVariable(i)]=r}else for(n++,i=0;i<this.nestedBestRanks.length;i++)for(s=e.ranks[i],o=0;o<s.length;o++)(r=s[o]).setGeneralPurposeVariable(i,o);if(0==a)break}for(n=[],a=[],t=0;t<e.maxRank+1;t++)a[t]=[],n[t]=a[t];for(t=0;t<this.nestedBestRanks.length;t++)for(i=0;i<this.nestedBestRanks[t].length;i++)a[t].push(this.nestedBestRanks[t][i]);e.ranks=n},mxMedianHybridCrossingReduction.prototype.calculateCrossings=function(e){for(var t=e.ranks.length,n=0,a=1;a<t;a++)n+=this.calculateRankCrossing(a,e);return n},mxMedianHybridCrossingReduction.prototype.calculateRankCrossing=function(e,t){for(var n=0,a=t.ranks[e],i=a.length,s=t.ranks[e-1].length,o=[],r=0;r<i;r++)o[r]=[];for(r=0;r<a.length;r++)for(var l=(c=a[r]).getGeneralPurposeVariable(e),d=c.getPreviousLayerConnectedCells(e),c=0;c<d.length;c++){var m=d[c].getGeneralPurposeVariable(e-1);o[l][m]=201207}for(r=0;r<i;r++)for(c=0;c<s;c++)if(201207==o[r][c]){for(a=r+1;a<i;a++)for(l=0;l<c;l++)201207==o[a][l]&&n++;for(a=0;a<r;a++)for(l=c+1;l<s;l++)201207==o[a][l]&&n++}return n/2},mxMedianHybridCrossingReduction.prototype.transpose=function(e,t){for(var n=!0,a=0;n&&a++<10;)for(var i=1==e%2&&1==a%2,s=(n=!1,0);s<t.ranks.length;s++){for(var o=t.ranks[s],r=[],l=0;l<o.length;l++){(b=(f=o[l]).getGeneralPurposeVariable(s))<0&&(b=l),r[b]=f}var d=b=f=null,c=null,m=null,u=null,p=null,g=null,v=null,h=null;for(l=0;l<o.length-1;l++){if(0==l){for(var f=(v=r[l]).getNextLayerConnectedCells(s),b=v.getPreviousLayerConnectedCells(s),A=(m=[],u=[],0);A<f.length;A++)m[A]=f[A].getGeneralPurposeVariable(s+1);for(A=0;A<b.length;A++)u[A]=b[A].getGeneralPurposeVariable(s-1)}else f=d,b=c,m=p,u=g,v=h;for(d=(h=r[l+1]).getNextLayerConnectedCells(s),c=h.getPreviousLayerConnectedCells(s),p=[],g=[],A=0;A<d.length;A++)p[A]=d[A].getGeneralPurposeVariable(s+1);for(A=0;A<c.length;A++)g[A]=c[A].getGeneralPurposeVariable(s-1);var E=0,y=0;for(A=0;A<m.length;A++)for(var S=0;S<p.length;S++)m[A]>p[S]&&E++,m[A]<p[S]&&y++;for(A=0;A<u.length;A++)for(S=0;S<g.length;S++)u[A]>g[S]&&E++,u[A]<g[S]&&y++;(y<E||y==E&&i)&&(d=v.getGeneralPurposeVariable(s),v.setGeneralPurposeVariable(s,h.getGeneralPurposeVariable(s)),h.setGeneralPurposeVariable(s,d),d=f,c=b,p=m,g=u,h=v,i||(n=!0))}}},mxMedianHybridCrossingReduction.prototype.weightedMedian=function(e,t){var n=0==e%2;if(n)for(var a=t.maxRank-1;0<=a;a--)this.medianRank(a,n);else for(a=1;a<t.maxRank;a++)this.medianRank(a,n)},mxMedianHybridCrossingReduction.prototype.medianRank=function(e,t){for(var n=this.nestedBestRanks[e].length,a=[],i=[],s=0;s<n;s++){var o,r,l=this.nestedBestRanks[e][s],d=new MedianCellSorter;d.cell=l,r=t?e+1:e-1,null!=(o=t?l.getNextLayerConnectedCells(e):l.getPreviousLayerConnectedCells(e))&&0!=o.length?(d.medianValue=this.medianValue(o,r),a.push(d)):i[l.getGeneralPurposeVariable(e)]=!0}for(a.sort(MedianCellSorter.prototype.compare),s=0;s<n;s++)null==i[s]&&(l=a.shift().cell).setGeneralPurposeVariable(e,s)},mxMedianHybridCrossingReduction.prototype.medianValue=function(e,t){for(var n=[],a=0,i=0;i<e.length;i++){var s=e[i];n[a++]=s.getGeneralPurposeVariable(t)}return n.sort(function(e,t){return e-t}),1==a%2?n[Math.floor(a/2)]:2==a?(n[0]+n[1])/2:(s=n[(i=a/2)-1]-n[0],a=n[a-1]-n[i],(n[i-1]*a+n[i]*s)/(s+a))},MedianCellSorter.prototype.medianValue=0,MedianCellSorter.prototype.cell=!1,MedianCellSorter.prototype.compare=function(e,t){return null!=e&&null!=t?t.medianValue>e.medianValue?-1:t.medianValue<e.medianValue?1:0:0},mxMinimumCycleRemover.prototype=new mxHierarchicalLayoutStage,mxMinimumCycleRemover.prototype.constructor=mxMinimumCycleRemover,mxMinimumCycleRemover.prototype.layout=null,mxMinimumCycleRemover.prototype.execute=function(e){var t=this.layout.getModel(),s={},o=mxUtils.clone(t.vertexMapper,null,!0),n=null;if(null!=t.roots){var a=t.roots;n=[];for(e=0;e<a.length;e++){var i=mxCellPath.create(a[e]);n[e]=t.vertexMapper[i]}}if(t.visit(function(e,t,n,a,i){t.isAncestor(e)&&(n.invert(),mxUtils.remove(n,e.connectsAsSource),e.connectsAsTarget.push(n),mxUtils.remove(n,t.connectsAsTarget),t.connectsAsSource.push(n)),e=mxCellPath.create(t.cell),s[e]=t,delete o[e]},n,!0,null),n=null,0<o.lenth&&(n=mxUtils.clone(o,null,!0)),e=mxUtils.clone(s,null,!0),t.visit(function(e,t,n,a,i){t.isAncestor(e)&&(n.invert(),mxUtils.remove(n,e.connectsAsSource),t.connectsAsSource.push(n),e.connectsAsTarget.push(n),mxUtils.remove(n,t.connectsAsTarget)),e=mxCellPath.create(t.cell),s[e]=t,delete o[e]},o,!0,e),a=this.layout.getGraph(),null!=n&&0<n.length)for(t=t.roots,e=0;e<n.length;e++)i=n[e].cell,0==a.getIncomingEdges(i).length&&t.push(i)};var mxHierarchicalEdgeStyle={ORTHOGONAL:1,POLYLINE:2,STRAIGHT:3,CURVE:4};function WeightedCellSorter(e,t){this.cell=e,this.weightedValue=t}function mxHierarchicalLayout(e,t,n){mxGraphLayout.call(this,e),this.orientation=null!=t?t:mxConstants.DIRECTION_NORTH,this.deterministic=null==n||n}function mxGraphModel(e){this.currentEdit=this.createUndoableEdit(),null!=e?this.setRoot(e):this.clear()}function mxRootChange(e,t){this.model=e,this.previous=this.root=t}function mxChildChange(e,t,n,a){this.model=e,this.previous=this.parent=t,this.child=n,this.previousIndex=this.index=a}function mxTerminalChange(e,t,n,a){this.model=e,this.cell=t,this.previous=this.terminal=n,this.source=a}function mxValueChange(e,t,n){this.model=e,this.cell=t,this.previous=this.value=n}function mxStyleChange(e,t,n){this.model=e,this.cell=t,this.previous=this.style=n}function mxGeometryChange(e,t,n){this.model=e,this.cell=t,this.previous=this.geometry=n}function mxCollapseChange(e,t,n){this.model=e,this.cell=t,this.previous=this.collapsed=n}function mxVisibleChange(e,t,n){this.model=e,this.cell=t,this.previous=this.visible=n}function mxCellAttributeChange(e,t,n){this.cell=e,this.attribute=t,this.previous=this.value=n}function mxCell(e,t,n){this.value=e,this.setGeometry(t),this.setStyle(n),null!=this.onInit&&this.onInit()}function mxGeometry(e,t,n,a){mxRectangle.call(this,e,t,n,a)}mxCoordinateAssignment.prototype=new mxHierarchicalLayoutStage,mxCoordinateAssignment.prototype.constructor=mxCoordinateAssignment,mxCoordinateAssignment.prototype.layout=null,mxCoordinateAssignment.prototype.intraCellSpacing=30,mxCoordinateAssignment.prototype.interRankCellSpacing=100,mxCoordinateAssignment.prototype.parallelEdgeSpacing=10,mxCoordinateAssignment.prototype.maxIterations=8,mxCoordinateAssignment.prototype.prefHozEdgeSep=5,mxCoordinateAssignment.prototype.prefVertEdgeOff=2,mxCoordinateAssignment.prototype.minEdgeJetty=12,mxCoordinateAssignment.prototype.channelBuffer=4,mxCoordinateAssignment.prototype.jettyPositions=null,mxCoordinateAssignment.prototype.orientation=mxConstants.DIRECTION_NORTH,mxCoordinateAssignment.prototype.initialX=null,mxCoordinateAssignment.prototype.limitX=null,mxCoordinateAssignment.prototype.currentXDelta=null,mxCoordinateAssignment.prototype.widestRank=null,mxCoordinateAssignment.prototype.rankTopY=null,mxCoordinateAssignment.prototype.rankBottomY=null,mxCoordinateAssignment.prototype.widestRankValue=null,mxCoordinateAssignment.prototype.rankWidths=null,mxCoordinateAssignment.prototype.rankY=null,mxCoordinateAssignment.prototype.fineTuning=!0,mxCoordinateAssignment.prototype.edgeStyle=mxHierarchicalEdgeStyle.POLYLINE,mxCoordinateAssignment.prototype.nextLayerConnectedCache=null,mxCoordinateAssignment.prototype.previousLayerConnectedCache=null,mxCoordinateAssignment.prototype.groupPadding=10,mxCoordinateAssignment.prototype.printStatus=function(){var e=this.layout.getModel();mxLog.show(),mxLog.writeln("======Coord assignment debug=======");for(var t=0;t<e.ranks.length;t++){mxLog.write("Rank ",t," : ");for(var n=e.ranks[t],a=0;a<n.length;a++)mxLog.write(n[a].getGeneralPurposeVariable(t),"  ");mxLog.writeln()}mxLog.writeln("====================================")},mxCoordinateAssignment.prototype.execute=function(e){this.jettyPositions=[],e=this.layout.getModel(),this.currentXDelta=0,this.initialCoords(this.layout.getGraph(),e),this.fineTuning&&this.minNode(e);var t=1e8;if(this.fineTuning)for(var n=0;n<this.maxIterations;n++){if(0!=n&&(this.medianPos(n,e),this.minNode(e)),this.currentXDelta<t){for(var a=0;a<e.ranks.length;a++)for(var i=e.ranks[a],s=0;s<i.length;s++){var o=i[s];o.setX(a,o.getGeneralPurposeVariable(a))}t=this.currentXDelta}else for(a=0;a<e.ranks.length;a++)for(i=e.ranks[a],s=0;s<i.length;s++)(o=i[s]).setGeneralPurposeVariable(a,o.getX(a));this.minPath(this.layout.getGraph(),e),this.currentXDelta=0}this.setCellLocations(this.layout.getGraph(),e)},mxCoordinateAssignment.prototype.minNode=function(e){for(var t=[],n=[],a=[],i=0;i<=e.maxRank;i++){a[i]=e.ranks[i];for(var s=0;s<a[i].length;s++){var o=a[i][s];(r=new WeightedCellSorter(o,i)).rankIndex=s,r.visited=!0,t.push(r),n[o=mxCellPath.create(o.getCoreCell())]=r}}for(e=10*t.length,s=0;0<t.length&&s<=e;){i=(r=t.shift()).cell;var r,l=r.weightedValue,d=parseInt(r.rankIndex),c=(o=i.getNextLayerConnectedCells(l),i.getPreviousLayerConnectedCells(l)),m=o.length,u=c.length,p=this.medianXValue(o,l+1),g=this.medianXValue(c,l-1),v=m+u,h=i.getGeneralPurposeVariable(l),f=h;if(0<v&&(f=(p*m+g*u)/v),m=!1,f<h-1?0==d?(i.setGeneralPurposeVariable(l,f),m=!0):(h=(h=(d=a[l][d-1]).getGeneralPurposeVariable(l))+d.width/2+this.intraCellSpacing+i.width/2)<f?(i.setGeneralPurposeVariable(l,f),m=!0):h<i.getGeneralPurposeVariable(l)-1&&(i.setGeneralPurposeVariable(l,h),m=!0):h+1<f&&(d==a[l].length-1?(i.setGeneralPurposeVariable(l,f),m=!0):f<(h=(h=(d=a[l][d+1]).getGeneralPurposeVariable(l))-d.width/2-this.intraCellSpacing-i.width/2)?(i.setGeneralPurposeVariable(l,f),m=!0):h>i.getGeneralPurposeVariable(l)+1&&(i.setGeneralPurposeVariable(l,h),m=!0)),m){for(i=0;i<o.length;i++)l=o[i],null!=(l=n[l=mxCellPath.create(l.getCoreCell())])&&0==l.visited&&(l.visited=!0,t.push(l));for(i=0;i<c.length;i++)l=c[i],null!=(l=n[l=mxCellPath.create(l.getCoreCell())])&&0==l.visited&&(l.visited=!0,t.push(l))}r.visited=!1,s++}},mxCoordinateAssignment.prototype.medianPos=function(e,t){if(0==e%2)for(var n=t.maxRank;0<n;n--)this.rankMedianPosition(n-1,t,n);else for(n=0;n<t.maxRank-1;n++)this.rankMedianPosition(n+1,t,n)},mxCoordinateAssignment.prototype.rankMedianPosition=function(e,t,n){t=t.ranks[e];for(var a=[],i=[],s=0;s<t.length;s++){var o=t[s];a[s]=new WeightedCellSorter,a[s].cell=o,a[s].rankIndex=s;var r=mxCellPath.create(o.getCoreCell());i[r]=a[s];var l=null;l=n<e?o.getPreviousLayerConnectedCells(e):o.getNextLayerConnectedCells(e);a[s].weightedValue=this.calculatedWeightedValue(o,l)}for(a.sort(WeightedCellSorter.prototype.compare),s=0;s<a.length;s++){r=0,o=a[s].cell,r=0,null!=(l=n<e?o.getPreviousLayerConnectedCells(e).slice():o.getNextLayerConnectedCells(e).slice())&&(r=0<(r=l.length)?this.medianXValue(l,n):o.getGeneralPurposeVariable(e));for(var d=0,c=(l=-1e8,a[s].rankIndex-1);0<=c;){var m;if(null!=(m=i[m=mxCellPath.create(t[c].getCoreCell())])){var u=m.cell;m.visited?(l=u.getGeneralPurposeVariable(e)+u.width/2+this.intraCellSpacing+d+o.width/2,c=-1):(d+=u.width+this.intraCellSpacing,c--)}}for(d=0,u=1e8,c=a[s].rankIndex+1;c<a.length;)if(null!=(m=i[m=mxCellPath.create(t[c].getCoreCell())])){var p=m.cell;m.visited?(u=p.getGeneralPurposeVariable(e)-p.width/2-this.intraCellSpacing-d-o.width/2,c=a.length):(d+=p.width+this.intraCellSpacing,c++)}l<=r&&r<=u?o.setGeneralPurposeVariable(e,r):r<l?(o.setGeneralPurposeVariable(e,l),this.currentXDelta+=l-r):u<r&&(o.setGeneralPurposeVariable(e,u),this.currentXDelta+=r-u),a[s].visited=!0}},mxCoordinateAssignment.prototype.calculatedWeightedValue=function(e,t){for(var n=0,a=0;a<t.length;a++){var i=t[a];e.isVertex()&&i.isVertex()?n++:n=e.isEdge()&&i.isEdge()?n+8:n+2}return n},mxCoordinateAssignment.prototype.medianXValue=function(e,t){if(0==e.length)return 0;for(var n=[],a=0;a<e.length;a++)n[a]=e[a].getGeneralPurposeVariable(t);return n.sort(function(e,t){return e-t}),1==e.length%2?n[Math.floor(e.length/2)]:(n[(a=e.length/2)-1]+n[a])/2},mxCoordinateAssignment.prototype.initialCoords=function(e,t){this.calculateWidestRank(e,t);for(var n=this.widestRank;0<=n;n--)n<t.maxRank&&this.rankCoordinates(n,e,t);for(n=this.widestRank+1;n<=t.maxRank;n++)0<n&&this.rankCoordinates(n,e,t)},mxCoordinateAssignment.prototype.rankCoordinates=function(e,t,n){t=n.ranks[e],n=0;for(var a=this.initialX+(this.widestRankValue-this.rankWidths[e])/2,i=!1,s=0;s<t.length;s++){var o=t[s];if(o.isVertex()){var r=this.layout.getVertexBounds(o.cell);null!=r?this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(o.width=r.width,o.height=r.height):(o.width=r.height,o.height=r.width):i=!0,n=Math.max(n,o.height)}else o.isEdge()&&(r=1,null!=o.edges?r=o.edges.length:mxLog.warn("edge.edges is null"),o.width=(r-1)*this.parallelEdgeSpacing);a+=o.width/2,o.setX(e,a),o.setGeneralPurposeVariable(e,a),a+=o.width/2,a+=this.intraCellSpacing}1==i&&mxLog.warn("At least one cell has no bounds")},mxCoordinateAssignment.prototype.calculateWidestRank=function(e,t){var n=-this.interRankCellSpacing,a=0;this.rankWidths=[],this.rankY=[];for(var i=t.maxRank;0<=i;i--){for(var s=0,o=t.ranks[i],r=this.initialX,l=!1,d=0;d<o.length;d++){var c=o[d];if(c.isVertex()){var m=this.layout.getVertexBounds(c.cell);null!=m?this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(c.width=m.width,c.height=m.height):(c.width=m.height,c.height=m.width):l=!0,s=Math.max(s,c.height)}else c.isEdge()&&(m=1,null!=c.edges?m=c.edges.length:mxLog.warn("edge.edges is null"),c.width=(m-1)*this.parallelEdgeSpacing);r+=c.width/2,c.setX(i,r),c.setGeneralPurposeVariable(i,r),r+=c.width/2,(r+=this.intraCellSpacing)>this.widestRankValue&&(this.widestRankValue=r,this.widestRank=i),this.rankWidths[i]=r}for(1==l&&mxLog.warn("At least one cell has no bounds"),this.rankY[i]=n,r=s/2+a/2+this.interRankCellSpacing,a=s,n=this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_WEST?n+r:n-r,d=0;d<o.length;d++)o[d].setY(i,n)}},mxCoordinateAssignment.prototype.minPath=function(e,t){var n,a=t.edgeMapper;for(n in a){var i=a[n];if(!(i.maxRank-i.minRank-1<1)){for(var s=i.getGeneralPurposeVariable(i.minRank+1),o=!0,r=0,l=i.minRank+2;l<i.maxRank;l++){s!=(d=i.getGeneralPurposeVariable(l))?(o=!1,s=d):r++}if(!o){o=s=0;var d=[],c=[],m=i.getGeneralPurposeVariable(i.minRank+1);for(l=i.minRank+1;l<i.maxRank-1;l++){var u=i.getX(l+1);m==u?(d[l-i.minRank-1]=m,s++):this.repositionValid(t,i,l+1,m)?(d[l-i.minRank-1]=m,s++):m=d[l-i.minRank-1]=u}for(m=i.getX(l),l=i.maxRank-1;l>i.minRank+1;l--)m==(u=i.getX(l-1))?(c[l-i.minRank-2]=m,o++):this.repositionValid(t,i,l-1,m)?(c[l-i.minRank-2]=m,o++):(c[l-i.minRank-2]=i.getX(l-1),m=u);if(r<o||r<s)if(s<=o)for(l=i.maxRank-2;l>i.minRank;l--)i.setX(l,c[l-i.minRank-1]);else if(o<s)for(l=i.minRank+2;l<i.maxRank;l++)i.setX(l,d[l-i.minRank-2])}}}},mxCoordinateAssignment.prototype.repositionValid=function(e,t,n,a){e=e.ranks[n];for(var i=-1,s=0;s<e.length;s++)if(t==e[s]){i=s;break}if(i<0)return!1;if(a<(s=t.getGeneralPurposeVariable(n))){if(0==i)return!0;if(!((n=(n=(e=e[i-1]).getGeneralPurposeVariable(n))+e.width/2+this.intraCellSpacing+t.width/2)<=a))return!1}else if(s<a){if(i==e.length-1)return!0;if(!(a<=(n=(n=(e=e[i+1]).getGeneralPurposeVariable(n))-e.width/2-this.intraCellSpacing-t.width/2)))return!1}return!0},mxCoordinateAssignment.prototype.setCellLocations=function(e,t){this.rankTopY=[],this.rankBottomY=[];for(var n=0;n<t.ranks.length;n++)this.rankTopY[n]=Number.MAX_VALUE,this.rankBottomY[n]=0;n=null,this.layout.resizeParent&&(n={});var a,i=t.edgeMapper,s=t.vertexMapper;for(a in s){var o=s[a];if(this.setVertexLocation(o),this.layout.resizeParent){o=e.model.getParent(o.cell);var r=mxCellPath.create(o);null==n[r]&&(n[r]=o)}}for(a in this.layout.resizeParent&&null!=n&&this.adjustParents(n),(this.edgeStyle==mxHierarchicalEdgeStyle.ORTHOGONAL||this.edgeStyle==mxHierarchicalEdgeStyle.POLYLINE||this.edgeStyle==mxHierarchicalEdgeStyle.CURVE)&&this.localEdgeProcessing(t),i)this.setEdgePosition(i[a])},mxCoordinateAssignment.prototype.adjustParents=function(e){var t,n=[];for(t in e)n.push(e[t]);this.layout.arrangeGroups(mxUtils.sortCells(n,!0),this.groupPadding)},mxCoordinateAssignment.prototype.localEdgeProcessing=function(e){for(var t=0;t<e.ranks.length;t++)for(var n=e.ranks[t],a=0;a<n.length;a++){var i=n[a];if(i.isVertex())for(var s=i.getPreviousLayerConnectedCells(t),o=t-1,r=0;r<2;r++){if(-1<o&&o<e.ranks.length&&null!=s&&0<s.length){for(var l=[],d=0;d<s.length;d++){var c=new WeightedCellSorter(s[d],s[d].getX(o));l.push(c)}l.sort(WeightedCellSorter.prototype.compare);var m=(c=i.x[0]-i.width/2)+i.width,u=s=0;for(o=[],d=0;d<l.length;d++){var p,g=l[d].cell;if(g.isVertex()){p=0==r?i.connectsAsSource:i.connectsAsTarget;for(var v=0;v<p.length;v++)p[v].source!=g&&p[v].target!=g||(s+=p[v].edges.length,u++,o.push(p[v]))}else s+=g.edges.length,u++,o.push(g)}for(i.width>(s+1)*this.prefHozEdgeSep+2*this.prefHozEdgeSep&&(c+=this.prefHozEdgeSep,m-=this.prefHozEdgeSep),c+=(l=(m-c)/s)/2,m=this.minEdgeJetty-this.prefVertEdgeOff,d=u=0;d<o.length;d++){for(g=o[d].edges.length,v=mxCellPath.create(o[d].edges[0]),null==(p=this.jettyPositions[v])&&(p=[],this.jettyPositions[v]=p),d<s/2?m+=this.prefVertEdgeOff:s/2<d&&(m-=this.prefVertEdgeOff),v=0;v<g;v++)p[4*v+2*r]=c,c+=l,p[4*v+2*r+1]=m;u=Math.max(u,m)}}s=i.getNextLayerConnectedCells(t),o=t+1}}},mxCoordinateAssignment.prototype.setEdgePosition=function(e){var t=0;if(101207!=e.temp[0]){var n=e.maxRank,a=e.minRank;n==a&&(n=e.source.maxRank,a=e.target.minRank);for(var i=0,s=mxCellPath.create(e.edges[0]),o=(s=this.jettyPositions[s],e.isReversed?e.target.cell:e.source.cell),r=this.layout.graph,l=0;l<e.edges.length;l++){var d=e.edges[l],c=this.layout.getVisibleTerminal(d,!0),m=r.model.getTerminal(d,!0),u=[],p=e.isReversed;if(c!=o&&(p=!p),null!=s){var g=p?2:0,v=p?this.rankTopY[a]:this.rankBottomY[n],h=s[4*i+1+g];p&&(h=-h),v+=h,g=s[4*i+g],m=r.model.getTerminal(d,!0),this.layout.isPort(m)&&r.model.getParent(m)==c&&(g=null!=(g=r.view.getState(m))?g.x:c.geometry.x+e.source.width*m.geometry.x),this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(u.push(new mxPoint(g,v)),this.edgeStyle==mxHierarchicalEdgeStyle.CURVE&&u.push(new mxPoint(g,v+h))):(u.push(new mxPoint(v,g)),this.edgeStyle==mxHierarchicalEdgeStyle.CURVE&&u.push(new mxPoint(v+h,g)))}for(g=e.x.length-1,v=h=-1,c=e.maxRank-1,p&&(g=0,h=e.x.length,v=1,c=e.minRank+1);e.maxRank!=e.minRank&&g!=h;g+=v){m=e.x[g]+t;var f=(this.rankTopY[c]+this.rankBottomY[c+1])/2,b=(this.rankTopY[c-1]+this.rankBottomY[c])/2;if(p){var A=f;f=b,b=A}this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(u.push(new mxPoint(m,f)),u.push(new mxPoint(m,b))):(u.push(new mxPoint(f,m)),u.push(new mxPoint(b,m))),this.limitX=Math.max(this.limitX,m),c+=v}null!=s&&(g=p?2:0,v=p?this.rankBottomY[n]:this.rankTopY[a],h=s[4*i+3-g],p&&(h=-h),v-=h,g=s[4*i+2-g],p=r.model.getTerminal(d,!1),c=this.layout.getVisibleTerminal(d,!1),this.layout.isPort(p)&&r.model.getParent(p)==c&&(g=null!=(g=r.view.getState(p))?g.x:c.geometry.x+e.target.width*p.geometry.x),this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(this.edgeStyle==mxHierarchicalEdgeStyle.CURVE&&u.push(new mxPoint(g,v-h)),u.push(new mxPoint(g,v))):(this.edgeStyle==mxHierarchicalEdgeStyle.CURVE&&u.push(new mxPoint(v-h,g)),u.push(new mxPoint(v,g)))),e.isReversed&&this.processReversedEdge(e,d),this.layout.setEdgePoints(d,u),t=0==t?this.parallelEdgeSpacing:0<t?-t:-t+this.parallelEdgeSpacing,i++}e.temp[0]=101207}},mxCoordinateAssignment.prototype.setVertexLocation=function(e){var t=e.cell,n=e.x[0]-e.width/2,a=e.y[0]-e.height/2;this.rankTopY[e.minRank]=Math.min(this.rankTopY[e.minRank],a),this.rankBottomY[e.minRank]=Math.max(this.rankBottomY[e.minRank],a+e.height),this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?this.layout.setVertexLocation(t,n,a):this.layout.setVertexLocation(t,a,n),this.limitX=Math.max(this.limitX,n+e.width)},mxCoordinateAssignment.prototype.processReversedEdge=function(e,t){},WeightedCellSorter.prototype.weightedValue=0,WeightedCellSorter.prototype.nudge=!1,WeightedCellSorter.prototype.visited=!1,WeightedCellSorter.prototype.rankIndex=null,WeightedCellSorter.prototype.cell=null,WeightedCellSorter.prototype.compare=function(e,t){return null!=e&&null!=t?t.weightedValue>e.weightedValue?-1:t.weightedValue<e.weightedValue?1:t.nudge?-1:1:0},mxHierarchicalLayout.prototype=new mxGraphLayout,mxHierarchicalLayout.prototype.constructor=mxHierarchicalLayout,mxHierarchicalLayout.prototype.roots=null,mxHierarchicalLayout.prototype.resizeParent=!1,mxHierarchicalLayout.prototype.moveParent=!1,mxHierarchicalLayout.prototype.parentBorder=0,mxHierarchicalLayout.prototype.intraCellSpacing=30,mxHierarchicalLayout.prototype.interRankCellSpacing=100,mxHierarchicalLayout.prototype.interHierarchySpacing=60,mxHierarchicalLayout.prototype.parallelEdgeSpacing=10,mxHierarchicalLayout.prototype.orientation=mxConstants.DIRECTION_NORTH,mxHierarchicalLayout.prototype.fineTuning=!0,mxHierarchicalLayout.prototype.tightenToSource=!0,mxHierarchicalLayout.prototype.disableEdgeStyle=!0,mxHierarchicalLayout.prototype.traverseAncestors=!0,mxHierarchicalLayout.prototype.model=null,mxHierarchicalLayout.prototype.edgesCache=null,mxHierarchicalLayout.prototype.getModel=function(){return this.model},mxHierarchicalLayout.prototype.execute=function(e,t){this.parent=e;var n=this.graph.model;if(this.edgesCache={},null!=t||null!=e){if(null!=t&&null!=e){for(var a=[],i=0;i<t.length;i++)n.isAncestor(e,t[i])&&a.push(t[i]);this.roots=a}else this.roots=t;n.beginUpdate();try{this.run(e),this.resizeParent&&!this.graph.isCellCollapsed(e)&&this.graph.updateGroupBounds([e],this.parentBorder,this.moveParent)}finally{n.endUpdate()}}},mxHierarchicalLayout.prototype.findRoots=function(e,t){var n=[];if(null!=e&&null!=t){var a,i=this.graph.model,s=null,o=-1e5;for(a in t){var r=t[a];if(i.isVertex(r)&&this.graph.isCellVisible(r)){for(var l=this.getEdges(r),d=0,c=0,m=0;m<l.length;m++)this.getVisibleTerminal(l[m],!0)==r?d++:c++;0==c&&0<d&&n.push(r),o<(l=d-c)&&(o=l,s=r)}}0==n.length&&null!=s&&n.push(s)}return n},mxHierarchicalLayout.prototype.getEdges=function(e){var t=mxCellPath.create(e);if(null!=this.edgesCache[t])return this.edgesCache[t];for(var n=this.graph.model,a=[],i=this.graph.isCellCollapsed(e),s=n.getChildCount(e),o=0;o<s;o++){var r=n.getChildAt(e,o);this.isPort(r)?a=a.concat(n.getEdges(r,!0,!0)):!i&&this.graph.isCellVisible(r)||(a=a.concat(n.getEdges(r,!0,!0)))}for(a=a.concat(n.getEdges(e,!0,!0)),n=[],o=0;o<a.length;o++)((i=this.getVisibleTerminal(a[o],!0))==(s=this.getVisibleTerminal(a[o],!1))||i!=s&&(s==e&&(null==this.parent||this.graph.isValidAncestor(i,this.parent,this.traverseAncestors))||i==e&&(null==this.parent||this.graph.isValidAncestor(s,this.parent,this.traverseAncestors))))&&n.push(a[o]);return this.edgesCache[t]=n},mxHierarchicalLayout.prototype.getVisibleTerminal=function(e,t){var n=null!=(n=this.graph.view.getState(e))?n.getVisibleTerminal(t):this.graph.view.getVisibleTerminal(e,t);return this.isPort(n)&&(n=this.graph.model.getParent(n)),n},mxHierarchicalLayout.prototype.run=function(e){var t=[],n=[];if(null==this.roots&&null!=e){var a={};this.filterDescendants(e,a),this.roots=[];var i,s=!0;for(i in a)if(null!=a[i]){s=!1;break}for(;!s;){var o=this.findRoots(e,a);for(s=0;s<o.length;s++){var r=[];t.push(r),this.traverse(o[s],!0,null,n,r,t,a)}for(s=0;s<o.length;s++)this.roots.push(o[s]);for(i in s=!0,a)if(null!=a[i]){s=!1;break}}}else for(s=0;s<roots.length;s++)r=[],t.push(r),traverse(roots.get(s),!0,null,n,r,t,null);for(s=n=0;s<t.length;s++){for(i in a=[],r=t[s])a.push(r[i]);this.model=new mxGraphHierarchyModel(this,a,this.roots,e,this.tightenToSource),this.cycleStage(e),this.layeringStage(),this.crossingStage(e),n=this.placementStage(n,e)}},mxHierarchicalLayout.prototype.filterDescendants=function(e,t){var n=this.graph.model;if(n.isVertex(e)&&e!=this.parent&&this.graph.isCellVisible(e)&&(t[mxCellPath.create(e)]=e),this.traverseAncestors||e==this.parent&&this.graph.isCellVisible(e))for(var a=n.getChildCount(e),i=0;i<a;i++){var s=n.getChildAt(e,i);this.isPort(s)||this.filterDescendants(s,t)}},mxHierarchicalLayout.prototype.isPort=function(e){return!!e.geometry.relative},mxHierarchicalLayout.prototype.getEdgesBetween=function(e,t,n){n=null!=n&&n;for(var a=this.getEdges(e),i=[],s=0;s<a.length;s++){var o=this.getVisibleTerminal(a[s],!0),r=this.getVisibleTerminal(a[s],!1);(o==e&&r==t||!n&&o==t&&r==e)&&i.push(a[s])}return i},mxHierarchicalLayout.prototype.traverse=function(e,t,n,a,i,s,o){if(null!=e&&null!=a){var r=mxCellPath.create(e);if(null!=a[r]||null!=o&&null==o[r]){if(null==i[r])for(n=0;n<s.length;n++)if(null!=(e=s[n])[r]){for(l in i)e[l]=i[l];return s.pop(),e}}else{null==i[r]&&(i[r]=e),null==a[r]&&(a[r]=e),delete o[r];var l=this.getEdges(e);for(n=0;n<l.length;n++)r=this.getVisibleTerminal(l[n],!0)==e,(!t||r)&&(r=this.getVisibleTerminal(l[n],!r),i=this.traverse(r,t,l[n],a,i,s,o))}}return i},mxHierarchicalLayout.prototype.cycleStage=function(e){new mxMinimumCycleRemover(this).execute(e)},mxHierarchicalLayout.prototype.layeringStage=function(){this.model.initialRank(),this.model.fixRanks()},mxHierarchicalLayout.prototype.crossingStage=function(e){new mxMedianHybridCrossingReduction(this).execute(e)},mxHierarchicalLayout.prototype.placementStage=function(e,t){var n=new mxCoordinateAssignment(this,this.intraCellSpacing,this.interRankCellSpacing,this.orientation,e,this.parallelEdgeSpacing);return n.fineTuning=this.fineTuning,n.execute(t),n.limitX+this.interHierarchySpacing},mxGraphModel.prototype=new mxEventSource,mxGraphModel.prototype.constructor=mxGraphModel,mxGraphModel.prototype.root=null,mxGraphModel.prototype.cells=null,mxGraphModel.prototype.maintainEdgeParent=!0,mxGraphModel.prototype.createIds=!0,mxGraphModel.prototype.prefix="",mxGraphModel.prototype.postfix="",mxGraphModel.prototype.nextId=0,mxGraphModel.prototype.currentEdit=null,mxGraphModel.prototype.updateLevel=0,mxGraphModel.prototype.endingUpdate=!1,mxGraphModel.prototype.clear=function(){this.setRoot(this.createRoot())},mxGraphModel.prototype.isCreateIds=function(){return this.createIds},mxGraphModel.prototype.setCreateIds=function(e){this.createIds=e},mxGraphModel.prototype.createRoot=function(){var e=new mxCell;return e.insert(new mxCell),e},mxGraphModel.prototype.getCell=function(e){return null!=this.cells?this.cells[e]:null},mxGraphModel.prototype.filterCells=function(e,t){var n=null;if(null!=e){n=[];for(var a=0;a<e.length;a++)t(e[a])&&n.push(e[a])}return n},mxGraphModel.prototype.getDescendants=function(e){return this.filterDescendants(null,e)},mxGraphModel.prototype.filterDescendants=function(e,t){var n=[];t=t||this.getRoot(),(null==e||e(t))&&n.push(t);for(var a=this.getChildCount(t),i=0;i<a;i++){var s=this.getChildAt(t,i);n=n.concat(this.filterDescendants(e,s))}return n},mxGraphModel.prototype.getRoot=function(e){var t=e||this.root;if(null!=e)for(;null!=e;)t=e,e=this.getParent(e);return t},mxGraphModel.prototype.setRoot=function(e){return this.execute(new mxRootChange(this,e)),e},mxGraphModel.prototype.rootChanged=function(e){var t=this.root;return this.root=e,this.nextId=0,this.cells=null,this.cellAdded(e),t},mxGraphModel.prototype.isRoot=function(e){return null!=e&&this.root==e},mxGraphModel.prototype.isLayer=function(e){return this.isRoot(this.getParent(e))},mxGraphModel.prototype.isAncestor=function(e,t){for(;null!=t&&t!=e;)t=this.getParent(t);return t==e},mxGraphModel.prototype.contains=function(e){return this.isAncestor(this.root,e)},mxGraphModel.prototype.getParent=function(e){return null!=e?e.getParent():null},mxGraphModel.prototype.add=function(e,t,n){if(t!=e&&null!=e&&null!=t){null==n&&(n=this.getChildCount(e));var a=e!=this.getParent(t);this.execute(new mxChildChange(this,e,t,n)),this.maintainEdgeParent&&a&&this.updateEdgeParents(t)}return t},mxGraphModel.prototype.cellAdded=function(e){if(null!=e){if(null==e.getId()&&this.createIds&&e.setId(this.createId(e)),null!=e.getId())if((t=this.getCell(e.getId()))!=e){for(;null!=t;)e.setId(this.createId(e)),t=this.getCell(e.getId());null==this.cells&&(this.cells={}),this.cells[e.getId()]=e}mxUtils.isNumeric(e.getId())&&(this.nextId=Math.max(this.nextId,e.getId()));for(var t=this.getChildCount(e),n=0;n<t;n++)this.cellAdded(this.getChildAt(e,n))}},mxGraphModel.prototype.createId=function(e){return e=this.nextId,this.nextId++,this.prefix+e+this.postfix},mxGraphModel.prototype.updateEdgeParents=function(e,t){t=t||this.getRoot(e);for(var n=this.getChildCount(e),a=0;a<n;a++){var i=this.getChildAt(e,a);this.updateEdgeParents(i,t)}for(i=this.getEdgeCount(e),n=[],a=0;a<i;a++)n.push(this.getEdgeAt(e,a));for(a=0;a<n.length;a++)i=n[a],this.isAncestor(t,i)&&this.updateEdgeParent(i,t)},mxGraphModel.prototype.updateEdgeParent=function(e,t){for(var n=this.getTerminal(e,!0),a=this.getTerminal(e,!1),i=null;null!=n&&!this.isEdge(n)&&null!=n.geometry&&n.geometry.relative;)n=this.getParent(n);for(;null!=a&&!this.isEdge(a)&&null!=a.geometry&&a.geometry.relative;)a=this.getParent(a);if(this.isAncestor(t,n)&&this.isAncestor(t,a)&&(null!=(i=n==a?this.getParent(n):this.getNearestCommonAncestor(n,a))&&(this.getParent(i)!=this.root||this.isAncestor(i,e))&&this.getParent(e)!=i)){if(null!=(n=this.getGeometry(e))){var s=this.getOrigin(this.getParent(e)),o=this.getOrigin(i);a=o.x-s.x,s=o.y-s.y;(n=n.clone()).translate(-a,-s),this.setGeometry(e,n)}this.add(i,e,this.getChildCount(i))}},mxGraphModel.prototype.getOrigin=function(e){var t=null;return null!=e?(t=this.getOrigin(this.getParent(e)),this.isEdge(e)||null!=(e=this.getGeometry(e))&&(t.x+=e.x,t.y+=e.y)):t=new mxPoint,t},mxGraphModel.prototype.getNearestCommonAncestor=function(e,t){if(null!=e&&null!=t&&(null!=(s=mxCellPath.create(t))&&0<s.length)){var n=e,a=mxCellPath.create(n);if(s.length<a.length){n=t;var i=a,s=(a=s,i)}for(;null!=n;){if(i=this.getParent(n),0==s.indexOf(a+mxCellPath.PATH_SEPARATOR)&&null!=i)return n;a=mxCellPath.getParentPath(a),n=i}}return null},mxGraphModel.prototype.remove=function(e){return e==this.root?this.setRoot(null):null!=this.getParent(e)&&this.execute(new mxChildChange(this,null,e)),e},mxGraphModel.prototype.cellRemoved=function(e){if(null!=e&&null!=this.cells){for(var t=this.getChildCount(e)-1;0<=t;t--)this.cellRemoved(this.getChildAt(e,t));null!=this.cells&&null!=e.getId()&&delete this.cells[e.getId()]}},mxGraphModel.prototype.parentForCellChanged=function(e,t,n){var a=this.getParent(e);return null!=t?(t!=a||a.getIndex(e)!=n)&&t.insert(e,n):null!=a&&(n=a.getIndex(e),a.remove(n)),this.contains(a)||null==t?null==t&&this.cellRemoved(e):this.cellAdded(e),a},mxGraphModel.prototype.getChildCount=function(e){return null!=e?e.getChildCount():0},mxGraphModel.prototype.getChildAt=function(e,t){return null!=e?e.getChildAt(t):null},mxGraphModel.prototype.getChildren=function(e){return null!=e?e.children:null},mxGraphModel.prototype.getChildVertices=function(e){return this.getChildCells(e,!0,!1)},mxGraphModel.prototype.getChildEdges=function(e){return this.getChildCells(e,!1,!0)},mxGraphModel.prototype.getChildCells=function(e,t,n){t=null!=t&&t,n=null!=n&&n;for(var a=this.getChildCount(e),i=[],s=0;s<a;s++){var o=this.getChildAt(e,s);(!n&&!t||n&&this.isEdge(o)||t&&this.isVertex(o))&&i.push(o)}return i},mxGraphModel.prototype.getTerminal=function(e,t){return null!=e?e.getTerminal(t):null},mxGraphModel.prototype.setTerminal=function(e,t,n){var a=t!=this.getTerminal(e,n);return this.execute(new mxTerminalChange(this,e,t,n)),this.maintainEdgeParent&&a&&this.updateEdgeParent(e,this.getRoot()),t},mxGraphModel.prototype.setTerminals=function(e,t,n){this.beginUpdate();try{this.setTerminal(e,t,!0),this.setTerminal(e,n,!1)}finally{this.endUpdate()}},mxGraphModel.prototype.terminalForCellChanged=function(e,t,n){var a=this.getTerminal(e,n);return null!=t?t.insertEdge(e,n):null!=a&&a.removeEdge(e,n),a},mxGraphModel.prototype.getEdgeCount=function(e){return null!=e?e.getEdgeCount():0},mxGraphModel.prototype.getEdgeAt=function(e,t){return null!=e?e.getEdgeAt(t):null},mxGraphModel.prototype.getDirectedEdgeCount=function(e,t,n){for(var a=0,i=this.getEdgeCount(e),s=0;s<i;s++){var o=this.getEdgeAt(e,s);o!=n&&this.getTerminal(o,t)==e&&a++}return a},mxGraphModel.prototype.getConnections=function(e){return this.getEdges(e,!0,!0,!1)},mxGraphModel.prototype.getIncomingEdges=function(e){return this.getEdges(e,!0,!1,!1)},mxGraphModel.prototype.getOutgoingEdges=function(e){return this.getEdges(e,!1,!0,!1)},mxGraphModel.prototype.getEdges=function(e,t,n,a){t=null==t||t,n=null==n||n,a=null==a||a;for(var i=this.getEdgeCount(e),s=[],o=0;o<i;o++){var r=this.getEdgeAt(e,o),l=this.getTerminal(r,!0),d=this.getTerminal(r,!1);(a&&l==d||l!=d&&(t&&d==e||n&&l==e))&&s.push(r)}return s},mxGraphModel.prototype.getEdgesBetween=function(e,t,n){n=null!=n&&n;var a=this.getEdgeCount(e),i=this.getEdgeCount(t),s=e,o=a;for(i<a&&(o=i,s=t),a=[],i=0;i<o;i++){var r=this.getEdgeAt(s,i),l=this.getTerminal(r,!0),d=this.getTerminal(r,!1);(l==e&&d==t||!n&&(d==e&&l==t))&&a.push(r)}return a},mxGraphModel.prototype.getOpposites=function(e,t,n,a){n=null==n||n,a=null==a||a;var i=[];if(null!=e)for(var s=0;s<e.length;s++){var o=this.getTerminal(e[s],!0),r=this.getTerminal(e[s],!1);o==t&&null!=r&&r!=t&&a?i.push(r):r==t&&null!=o&&o!=t&&n&&i.push(o)}return i},mxGraphModel.prototype.getTopmostCells=function(e){for(var t=[],n=0;n<e.length;n++){for(var a=e[n],i=!0,s=this.getParent(a);null!=s;){if(0<=mxUtils.indexOf(e,s)){i=!1;break}s=this.getParent(s)}i&&t.push(a)}return t},mxGraphModel.prototype.isVertex=function(e){return null!=e&&e.isVertex()},mxGraphModel.prototype.isEdge=function(e){return null!=e&&e.isEdge()},mxGraphModel.prototype.isConnectable=function(e){return null!=e&&e.isConnectable()},mxGraphModel.prototype.getValue=function(e){return null!=e?e.getValue():null},mxGraphModel.prototype.setValue=function(e,t){return this.execute(new mxValueChange(this,e,t)),t},mxGraphModel.prototype.valueForCellChanged=function(e,t){return e.valueChanged(t)},mxGraphModel.prototype.getGeometry=function(e,t){return null!=e?e.getGeometry():null},mxGraphModel.prototype.setGeometry=function(e,t){return t!=this.getGeometry(e)&&this.execute(new mxGeometryChange(this,e,t)),t},mxGraphModel.prototype.geometryForCellChanged=function(e,t){var n=this.getGeometry(e);return e.setGeometry(t),n},mxGraphModel.prototype.getStyle=function(e){return null!=e?e.getStyle():null},mxGraphModel.prototype.setStyle=function(e,t){return t!=this.getStyle(e)&&this.execute(new mxStyleChange(this,e,t)),t},mxGraphModel.prototype.styleForCellChanged=function(e,t){var n=this.getStyle(e);return e.setStyle(t),n},mxGraphModel.prototype.isCollapsed=function(e){return null!=e&&e.isCollapsed()},mxGraphModel.prototype.setCollapsed=function(e,t){return t!=this.isCollapsed(e)&&this.execute(new mxCollapseChange(this,e,t)),t},mxGraphModel.prototype.collapsedStateForCellChanged=function(e,t){var n=this.isCollapsed(e);return e.setCollapsed(t),n},mxGraphModel.prototype.isVisible=function(e){return null!=e&&e.isVisible()},mxGraphModel.prototype.setVisible=function(e,t){return t!=this.isVisible(e)&&this.execute(new mxVisibleChange(this,e,t)),t},mxGraphModel.prototype.visibleStateForCellChanged=function(e,t){var n=this.isVisible(e);return e.setVisible(t),n},mxGraphModel.prototype.execute=function(e){e.execute(),this.beginUpdate(),this.currentEdit.add(e),this.fireEvent(new mxEventObject(mxEvent.EXECUTE,"change",e)),this.fireEvent(new mxEventObject(mxEvent.EXECUTED,"change",e)),this.endUpdate()},mxGraphModel.prototype.beginUpdate=function(){this.updateLevel++,this.fireEvent(new mxEventObject(mxEvent.BEGIN_UPDATE)),1==this.updateLevel&&this.fireEvent(new mxEventObject(mxEvent.START_EDIT))},mxGraphModel.prototype.endUpdate=function(){if(this.updateLevel--,0==this.updateLevel&&this.fireEvent(new mxEventObject(mxEvent.END_EDIT)),!this.endingUpdate){this.endingUpdate=0==this.updateLevel,this.fireEvent(new mxEventObject(mxEvent.END_UPDATE,"edit",this.currentEdit));try{if(this.endingUpdate&&!this.currentEdit.isEmpty()){this.fireEvent(new mxEventObject(mxEvent.BEFORE_UNDO,"edit",this.currentEdit));var e=this.currentEdit;this.currentEdit=this.createUndoableEdit(),e.notify(),this.fireEvent(new mxEventObject(mxEvent.UNDO,"edit",e))}}finally{this.endingUpdate=!1}}},mxGraphModel.prototype.createUndoableEdit=function(){var e=new mxUndoableEdit(this,!0);return e.notify=function(){e.source.fireEvent(new mxEventObject(mxEvent.CHANGE,"edit",e,"changes",e.changes)),e.source.fireEvent(new mxEventObject(mxEvent.NOTIFY,"edit",e,"changes",e.changes))},e},mxGraphModel.prototype.mergeChildren=function(e,t,n){n=null==n||n,this.beginUpdate();try{var a={};for(var i in this.mergeChildrenImpl(e,t,n,a),a){var s=a[i],o=this.getTerminal(s,!0);null!=o&&(o=a[mxCellPath.create(o)],this.setTerminal(s,o,!0)),null!=(o=this.getTerminal(s,!1))&&(o=a[mxCellPath.create(o)],this.setTerminal(s,o,!1))}}finally{this.endUpdate()}},mxGraphModel.prototype.mergeChildrenImpl=function(e,t,n,a){this.beginUpdate();try{for(var i=e.getChildCount(),s=0;s<i;s++){var o=e.getChildAt(s);if("function"==typeof o.getId){var r=o.getId(),l=null==r||this.isEdge(o)&&n?null:this.getCell(r);if(null==l){var d=o.clone();d.setId(r),d.setTerminal(o.getTerminal(!0),!0),d.setTerminal(o.getTerminal(!1),!1),l=t.insert(d),this.cellAdded(l)}a[mxCellPath.create(o)]=l,this.mergeChildrenImpl(o,l,n,a)}}}finally{this.endUpdate()}},mxGraphModel.prototype.getParents=function(e){var t=[];if(null!=e)for(var n={},a=0;a<e.length;a++){var i=this.getParent(e[a]);if(null!=i){var s=mxCellPath.create(i);null==n[s]&&(n[s]=i,t.push(i))}}return t},mxGraphModel.prototype.cloneCell=function(e){return null!=e?this.cloneCells([e],!0)[0]:null},mxGraphModel.prototype.cloneCells=function(e,t){for(var n={},a=[],i=0;i<e.length;i++)null!=e[i]?a.push(this.cloneCellImpl(e[i],n,t)):a.push(null);for(i=0;i<a.length;i++)null!=a[i]&&this.restoreClone(a[i],e[i],n);return a},mxGraphModel.prototype.cloneCellImpl=function(e,t,n){var a=this.cellCloned(e);if(t[mxObjectIdentity.get(e)]=a,n){n=this.getChildCount(e);for(var i=0;i<n;i++){var s=this.cloneCellImpl(this.getChildAt(e,i),t,!0);a.insert(s)}}return a},mxGraphModel.prototype.cellCloned=function(e){return e.clone()},mxGraphModel.prototype.restoreClone=function(e,t,n){null!=(a=this.getTerminal(t,!0))&&(null!=(a=n[mxObjectIdentity.get(a)])&&a.insertEdge(e,!0)),null!=(a=this.getTerminal(t,!1))&&(null!=(a=n[mxObjectIdentity.get(a)])&&a.insertEdge(e,!1));for(var a=this.getChildCount(e),i=0;i<a;i++)this.restoreClone(this.getChildAt(e,i),this.getChildAt(t,i),n)},mxRootChange.prototype.execute=function(){this.root=this.previous,this.previous=this.model.rootChanged(this.previous)},mxChildChange.prototype.execute=function(){var e=this.model.getParent(this.child),t=null!=e?e.getIndex(this.child):0;null==this.previous&&this.connect(this.child,!1),e=this.model.parentForCellChanged(this.child,this.previous,this.previousIndex),null!=this.previous&&this.connect(this.child,!0),this.parent=this.previous,this.previous=e,this.index=this.previousIndex,this.previousIndex=t},mxChildChange.prototype.connect=function(e,t){t=null==t||t;var n=e.getTerminal(!0),a=e.getTerminal(!1);for(null!=n&&(t?this.model.terminalForCellChanged(e,n,!0):this.model.terminalForCellChanged(e,null,!0)),null!=a&&(t?this.model.terminalForCellChanged(e,a,!1):this.model.terminalForCellChanged(e,null,!1)),e.setTerminal(n,!0),e.setTerminal(a,!1),n=this.model.getChildCount(e),a=0;a<n;a++)this.connect(this.model.getChildAt(e,a),t)},mxTerminalChange.prototype.execute=function(){this.terminal=this.previous,this.previous=this.model.terminalForCellChanged(this.cell,this.previous,this.source)},mxValueChange.prototype.execute=function(){this.value=this.previous,this.previous=this.model.valueForCellChanged(this.cell,this.previous)},mxStyleChange.prototype.execute=function(){this.style=this.previous,this.previous=this.model.styleForCellChanged(this.cell,this.previous)},mxGeometryChange.prototype.execute=function(){this.geometry=this.previous,this.previous=this.model.geometryForCellChanged(this.cell,this.previous)},mxCollapseChange.prototype.execute=function(){this.collapsed=this.previous,this.previous=this.model.collapsedStateForCellChanged(this.cell,this.previous)},mxVisibleChange.prototype.execute=function(){this.visible=this.previous,this.previous=this.model.visibleStateForCellChanged(this.cell,this.previous)},mxCellAttributeChange.prototype.execute=function(){var e=this.cell.getAttribute(this.attribute);null==this.previous?this.cell.value.removeAttribute(this.attribute):this.cell.setAttribute(this.attribute,this.previous),this.previous=e},mxCell.prototype.id=null,mxCell.prototype.value=null,mxCell.prototype.geometry=null,mxCell.prototype.style=null,mxCell.prototype.vertex=!1,mxCell.prototype.edge=!1,mxCell.prototype.connectable=!0,mxCell.prototype.visible=!0,mxCell.prototype.collapsed=!1,mxCell.prototype.parent=null,mxCell.prototype.source=null,mxCell.prototype.target=null,mxCell.prototype.children=null,mxCell.prototype.edges=null,mxCell.prototype.mxTransient="id value parent source target children edges".split(" "),mxCell.prototype.getId=function(){return this.id},mxCell.prototype.setId=function(e){this.id=e},mxCell.prototype.getValue=function(){return this.value},mxCell.prototype.setValue=function(e){this.value=e},mxCell.prototype.valueChanged=function(e){var t=this.getValue();return this.setValue(e),t},mxCell.prototype.getGeometry=function(){return this.geometry},mxCell.prototype.setGeometry=function(e){this.geometry=e},mxCell.prototype.getStyle=function(){return this.style},mxCell.prototype.setStyle=function(e){this.style=e},mxCell.prototype.isVertex=function(){return this.vertex},mxCell.prototype.setVertex=function(e){this.vertex=e},mxCell.prototype.isEdge=function(){return this.edge},mxCell.prototype.setEdge=function(e){this.edge=e},mxCell.prototype.isConnectable=function(){return this.connectable},mxCell.prototype.setConnectable=function(e){this.connectable=e},mxCell.prototype.isVisible=function(){return this.visible},mxCell.prototype.setVisible=function(e){this.visible=e},mxCell.prototype.isCollapsed=function(){return this.collapsed},mxCell.prototype.setCollapsed=function(e){this.collapsed=e},mxCell.prototype.getParent=function(){return this.parent},mxCell.prototype.setParent=function(e){this.parent=e},mxCell.prototype.getTerminal=function(e){return e?this.source:this.target},mxCell.prototype.setTerminal=function(e,t){return t?this.source=e:this.target=e,e},mxCell.prototype.getChildCount=function(){return null==this.children?0:this.children.length},mxCell.prototype.getIndex=function(e){return mxUtils.indexOf(this.children,e)},mxCell.prototype.getChildAt=function(e){return null==this.children?null:this.children[e]},mxCell.prototype.insert=function(e,t){return null!=e&&(null==t&&(t=this.getChildCount(),e.getParent()==this&&t--),e.removeFromParent(),e.setParent(this),null==this.children?(this.children=[],this.children.push(e)):this.children.splice(t,0,e)),e},mxCell.prototype.remove=function(e){var t=null;return null!=this.children&&0<=e&&(null!=(t=this.getChildAt(e))&&(this.children.splice(e,1),t.setParent(null))),t},mxCell.prototype.removeFromParent=function(){if(null!=this.parent){var e=this.parent.getIndex(this);this.parent.remove(e)}},mxCell.prototype.getEdgeCount=function(){return null==this.edges?0:this.edges.length},mxCell.prototype.getEdgeIndex=function(e){return mxUtils.indexOf(this.edges,e)},mxCell.prototype.getEdgeAt=function(e){return null==this.edges?null:this.edges[e]},mxCell.prototype.insertEdge=function(e,t){return null!=e&&(e.removeFromTerminal(t),e.setTerminal(this,t),null==this.edges||e.getTerminal(!t)!=this||mxUtils.indexOf(this.edges,e)<0)&&(null==this.edges&&(this.edges=[]),this.edges.push(e)),e},mxCell.prototype.removeEdge=function(e,t){if(null!=e){if(e.getTerminal(!t)!=this&&null!=this.edges){var n=this.getEdgeIndex(e);0<=n&&this.edges.splice(n,1)}e.setTerminal(null,t)}return e},mxCell.prototype.removeFromTerminal=function(e){var t=this.getTerminal(e);null!=t&&t.removeEdge(this,e)},mxCell.prototype.getAttribute=function(e,t){var n=this.getValue();return(null!=n&&n.nodeType==mxConstants.NODETYPE_ELEMENT?n.getAttribute(e):null)||t},mxCell.prototype.setAttribute=function(e,t){var n=this.getValue();null!=n&&n.nodeType==mxConstants.NODETYPE_ELEMENT&&n.setAttribute(e,t)},mxCell.prototype.clone=function(){var e=mxUtils.clone(this,this.mxTransient);return e.setValue(this.cloneValue()),e},mxCell.prototype.cloneValue=function(){var e=this.getValue();return null!=e&&("function"==typeof e.clone?e=e.clone():isNaN(e.nodeType)||(e=e.cloneNode(!0))),e},mxGeometry.prototype=new mxRectangle,mxGeometry.prototype.constructor=mxGeometry,mxGeometry.prototype.TRANSLATE_CONTROL_POINTS=!0,mxGeometry.prototype.alternateBounds=null,mxGeometry.prototype.sourcePoint=null,mxGeometry.prototype.targetPoint=null,mxGeometry.prototype.points=null,mxGeometry.prototype.offset=null,mxGeometry.prototype.relative=!1,mxGeometry.prototype.swap=function(){if(null!=this.alternateBounds){var e=new mxRectangle(this.x,this.y,this.width,this.height);this.x=this.alternateBounds.x,this.y=this.alternateBounds.y,this.width=this.alternateBounds.width,this.height=this.alternateBounds.height,this.alternateBounds=e}},mxGeometry.prototype.getTerminalPoint=function(e){return e?this.sourcePoint:this.targetPoint},mxGeometry.prototype.setTerminalPoint=function(e,t){return t?this.sourcePoint=e:this.targetPoint=e,e},mxGeometry.prototype.translate=function(e,t){if(this.clone(),this.relative||(this.x+=e,this.y+=t),null!=this.sourcePoint&&(this.sourcePoint.x+=e,this.sourcePoint.y+=t),null!=this.targetPoint&&(this.targetPoint.x+=e,this.targetPoint.y+=t),this.TRANSLATE_CONTROL_POINTS&&null!=this.points)for(var n=this.points.length,a=0;a<n;a++){var i=this.points[a];null!=i&&(i.x+=e,i.y+=t)}};var mxCellPath={PATH_SEPARATOR:".",create:function(e){var t="";if(null!=e)for(var n=e.getParent();null!=n;)t=n.getIndex(e)+mxCellPath.PATH_SEPARATOR+t,n=(e=n).getParent();return 1<(e=t.length)&&(t=t.substring(0,e-1)),t},getParentPath:function(e){if(null!=e){var t=e.lastIndexOf(mxCellPath.PATH_SEPARATOR);if(0<=t)return e.substring(0,t);if(0<e.length)return""}return null},resolve:function(e,t){var n=e;if(null!=t)for(var a=t.split(mxCellPath.PATH_SEPARATOR),i=0;i<a.length;i++)n=n.getChildAt(parseInt(a[i]));return n},compare:function(e,t){for(var n=Math.min(e.length,t.length),a=0,i=0;i<n;i++)if(e[i]!=t[i]){a=0==e[i].length||0==t[i].length?e[i]==t[i]?0:e[i]>t[i]?1:-1:(n=parseInt(e[i]))==(i=parseInt(t[i]))?0:i<n?1:-1;break}return 0==a&&((n=e.length)!=(i=t.length)&&(a=i<n?1:-1)),a}},mxPerimeter={RectanglePerimeter:function(e,t,n,a){t=e.getCenterX();var i=e.getCenterY(),s=Math.atan2(n.y-i,n.x-t),o=new mxPoint(0,0),r=Math.PI,l=Math.PI/2-s,d=Math.atan2(e.height,e.width);return s<-r+d||r-d<s?(o.x=e.x,o.y=i-e.width*Math.tan(s)/2):s<-d?(o.y=e.y,o.x=t-e.height*Math.tan(l)/2):s<d?(o.x=e.x+e.width,o.y=i+e.width*Math.tan(s)/2):(o.y=e.y+e.height,o.x=t+e.height*Math.tan(l)/2),a&&(n.x>=e.x&&n.x<=e.x+e.width?o.x=n.x:n.y>=e.y&&n.y<=e.y+e.height&&(o.y=n.y),n.x<e.x?o.x=e.x:n.x>e.x+e.width&&(o.x=e.x+e.width),n.y<e.y?o.y=e.y:n.y>e.y+e.height&&(o.y=e.y+e.height)),o},EllipsePerimeter:function(e,t,n,a){var i=e.x,s=e.y,o=e.width/2,r=e.height/2,l=i+o,d=s+r;t=n.x,n=n.y;var c=parseInt(t-l),m=parseInt(n-d);if(0==c&&0!=m)return new mxPoint(l,d+r*m/Math.abs(m));if(0==c&&0==m)return new mxPoint(t,n);if(a){if(s<=n&&n<=s+e.height)return e=n-d,e=Math.sqrt(o*o*(1-e*e/(r*r)))||0,t<=i&&(e=-e),new mxPoint(l+e,n);if(i<=t&&t<=i+e.width)return e=t-l,e=Math.sqrt(r*r*(1-e*e/(o*o)))||0,n<=s&&(e=-e),new mxPoint(t,d+e)}return d-=(i=m/c)*l,l=i*(o=(-(e=-2*l*(s=o*o*i*i+r*r))+(r=Math.sqrt(e*e-4*s*(o*o*i*i*l*l+r*r*l*l-o*o*r*r))))/(2*s))+d,d=i*(r=(-e-r)/(2*s))+d,i=Math.sqrt(Math.pow(o-t,2)+Math.pow(l-n,2)),t=Math.sqrt(Math.pow(r-t,2)+Math.pow(d-n,2)),s=n=0,s=i<t?(n=o,l):(n=r,d),new mxPoint(n,s)},RhombusPerimeter:function(e,t,n,a){t=e.x;var i=e.y,s=e.width,o=t+s/2,r=i+(e=e.height)/2,l=n.x;if(n=n.y,o==l)return new mxPoint(o,n<r?i:i+e);if(r==n)return new mxPoint(l<o?t:t+s,r);var d=o,c=r;return a&&(t<=l&&l<=t+s?d=l:i<=n&&n<=i+e&&(c=n)),l<o?n<r?mxUtils.intersection(l,n,d,c,o,i,t,r):mxUtils.intersection(l,n,d,c,o,i+e,t,r):n<r?mxUtils.intersection(l,n,d,c,o,i,t+s,r):mxUtils.intersection(l,n,d,c,o,i+e,t+s,r)},TrianglePerimeter:function(e,t,n,a){var i=(t=null!=t?t.style[mxConstants.STYLE_DIRECTION]:null)==mxConstants.DIRECTION_NORTH||t==mxConstants.DIRECTION_SOUTH,s=e.x,o=e.y,r=e.width,l=s+r/2,d=o+(e=e.height)/2,c=new mxPoint(s,o),m=new mxPoint(s+r,d),u=new mxPoint(s,o+e);t==mxConstants.DIRECTION_NORTH?(c=u,m=new mxPoint(l,o),u=new mxPoint(s+r,o+e)):t==mxConstants.DIRECTION_SOUTH?(m=new mxPoint(l,o+e),u=new mxPoint(s+r,o)):t==mxConstants.DIRECTION_WEST&&(c=new mxPoint(s+r,o),m=new mxPoint(s,d),u=new mxPoint(s+r,o+e));var p=n.x-l,g=n.y-d,v=(p=i?Math.atan2(p,g):Math.atan2(g,p),i?Math.atan2(r,e):Math.atan2(e,r));g=!1,g=t==mxConstants.DIRECTION_NORTH||t==mxConstants.DIRECTION_WEST?-v<p&&p<v:p<-Math.PI+v||p>Math.PI-v,v=null;return null==(v=g?a&&(i&&n.x>=c.x&&n.x<=u.x||!i&&n.y>=c.y&&n.y<=u.y)?i?new mxPoint(n.x,c.y):new mxPoint(c.x,n.y):t==mxConstants.DIRECTION_NORTH?new mxPoint(s+r/2+e*Math.tan(p)/2,o+e):t==mxConstants.DIRECTION_SOUTH?new mxPoint(s+r/2-e*Math.tan(p)/2,o):t==mxConstants.DIRECTION_WEST?new mxPoint(s+r,o+e/2+r*Math.tan(p)/2):new mxPoint(s,o+e/2-r*Math.tan(p)/2):(a&&(a=new mxPoint(l,d),n.y>=o&&n.y<=o+e?(a.x=i?l:t==mxConstants.DIRECTION_WEST?s+r:s,a.y=n.y):n.x>=s&&n.x<=s+r&&(a.x=n.x,a.y=i?t==mxConstants.DIRECTION_NORTH?o+e:o:d),l=a.x,d=a.y),i&&n.x<=s+r/2||!i&&n.y<=o+e/2?mxUtils.intersection(n.x,n.y,l,d,c.x,c.y,m.x,m.y):mxUtils.intersection(n.x,n.y,l,d,m.x,m.y,u.x,u.y)))&&(v=new mxPoint(l,d)),v}};function mxPrintPreview(e,t,n,a,i,s,o,r,l){this.graph=e,this.scale=null!=t?t:1/e.pageScale,this.border=null!=a?a:0,this.pageFormat=null!=n?n:e.pageFormat,this.title=null!=r?r:"Printer-friendly version",this.x0=null!=i?i:0,this.y0=null!=s?s:0,this.borderColor=o,this.pageSelector=null==l||l}function mxStylesheet(){this.styles={},this.putDefaultVertexStyle(this.createDefaultVertexStyle()),this.putDefaultEdgeStyle(this.createDefaultEdgeStyle())}function mxCellState(e,t,n){this.view=e,this.cell=t,this.style=n,this.origin=new mxPoint,this.absoluteOffset=new mxPoint}function mxGraphSelectionModel(e){this.graph=e,this.cells=[]}function mxSelectionChange(e,t,n){this.selectionModel=e,this.added=null!=t?t.slice():null,this.removed=null!=n?n.slice():null}function mxCellEditor(e){this.graph=e}function mxCellRenderer(){}mxPrintPreview.prototype.graph=null,mxPrintPreview.prototype.pageFormat=null,mxPrintPreview.prototype.scale=null,mxPrintPreview.prototype.border=0,mxPrintPreview.prototype.x0=0,mxPrintPreview.prototype.y0=0,mxPrintPreview.prototype.autoOrigin=!0,mxPrintPreview.prototype.printOverlays=!1,mxPrintPreview.prototype.borderColor=null,mxPrintPreview.prototype.title=null,mxPrintPreview.prototype.pageSelector=null,mxPrintPreview.prototype.wnd=null,mxPrintPreview.prototype.pageCount=0,mxPrintPreview.prototype.getWindow=function(){return this.wnd},mxPrintPreview.prototype.getDoctype=function(){var e="";return 8==document.documentMode&&(e='<meta http-equiv="X-UA-Compatible" content="IE=8">'),e},mxPrintPreview.prototype.open=function(e){var t=this.graph.cellRenderer.initializeOverlay,n=null;try{if(this.printOverlays&&(this.graph.cellRenderer.initializeOverlay=function(e,t){t.init(e.view.getDrawPane())}),null==this.wnd){this.wnd=window.open();var a=this.wnd.document,i=this.getDoctype();null!=i&&0<i.length&&a.writeln(i),a.writeln("<html>"),a.writeln("<head>"),this.writeHead(a,e),a.writeln("</head>"),a.writeln('<body class="mxPage">'),mxClient.link("stylesheet",mxClient.basePath+"/css/common.css",a),mxClient.IS_VML&&(a.namespaces.add("v","urn:schemas-microsoft-com:vml"),a.namespaces.add("o","urn:schemas-microsoft-com:office:office"),a.createStyleSheet().cssText="v\\:*{behavior:url(#default#VML)}o\\:*{behavior:url(#default#VML)}",mxClient.link("stylesheet",mxClient.basePath+"/css/explorer.css",a));var s=this.graph.getGraphBounds().clone(),o=this.graph.getView().getScale(),r=o/this.scale,l=this.graph.getView().getTranslate();this.autoOrigin||(this.x0=-l.x*this.scale,this.y0=-l.y*this.scale,s.width+=s.x,s.height+=s.y,s.x=0,this.border=s.y=0),s.width/=r,s.height/=r;var d=this.pageFormat.width-2*this.border,c=this.pageFormat.height-2*this.border,m=Math.max(1,Math.ceil((s.width+this.x0)/d)),u=Math.max(1,Math.ceil((s.height+this.y0)/c));this.pageCount=m*u;var p=mxUtils.bind(this,function(){if(this.pageSelector&&(1<u||1<m)){var e=this.createPageSelector(u,m);if(a.body.appendChild(e),mxClient.IS_IE){e.style.position="absolute";var t=function(){e.style.top=a.body.scrollTop+10+"px"};mxEvent.addListener(this.wnd,"scroll",function(e){t()}),mxEvent.addListener(this.wnd,"resize",function(e){t()})}}});if(e=function(e,t){if(null!=this.borderColor&&(e.style.borderColor=this.borderColor,e.style.borderStyle="solid",e.style.borderWidth="1px"),e.style.background="white",t&&(e.style.pageBreakAfter="always"),mxClient.IS_IE?(a.writeln(e.outerHTML),e.parentNode.removeChild(e)):(e.parentNode.removeChild(e),a.body.appendChild(e)),t){var n=a.createElement("hr");n.className="mxPageBreak",a.body.appendChild(n)}},null!=(f=this.getCoverPages(this.pageFormat.width,this.pageFormat.height)))for(var g=0;g<f.length;g++)e(f[g],!0);var v=this.getAppendices(this.pageFormat.width,this.pageFormat.height);for(g=0;g<u;g++)for(var h=g*c/this.scale-this.y0/this.scale+(s.y-l.y*o)/o,f=0;f<m;f++){if(null==this.wnd)return null;var b=f*d/this.scale-this.x0/this.scale+(s.x-l.x*o)/o,A=g*m+f+1;(n=this.renderPage(this.pageFormat.width,this.pageFormat.height,mxUtils.bind(this,function(e){this.addGraphFragment(-b,-h,this.scale,A,e)}))).setAttribute("id","mxPage-"+A),e(n,null!=v||g<u-1||f<m-1)}if(null!=v)for(g=0;g<v.length;g++)e(v[g],g<v.length);a.writeln("</body>"),a.writeln("</html>"),a.close(),p(),mxEvent.release(a.body)}this.wnd.focus()}catch(e){null!=n&&null!=n.parentNode&&n.parentNode.removeChild(n)}finally{this.graph.cellRenderer.initializeOverlay=t}return this.wnd},mxPrintPreview.prototype.writeHead=function(e,t){null!=this.title&&e.writeln("<title>"+this.title+"</title>"),e.writeln('<style type="text/css">'),e.writeln("@media print {"),e.writeln("  table.mxPageSelector { display: none; }"),e.writeln("  hr.mxPageBreak { display: none; }"),e.writeln("}"),e.writeln("@media screen {"),e.writeln("  table.mxPageSelector { position: fixed; right: 10px; top: 10px;font-family: Arial; font-size:10pt; border: solid 1px darkgray;background: white; border-collapse:collapse; }"),e.writeln("  table.mxPageSelector td { border: solid 1px gray; padding:4px; }"),e.writeln("  body.mxPage { background: gray; }"),e.writeln("}"),null!=t&&e.writeln(t),e.writeln("</style>")},mxPrintPreview.prototype.createPageSelector=function(e,t){var n=this.wnd.document,a=n.createElement("table");a.className="mxPageSelector",a.setAttribute("border","0");for(var i=n.createElement("tbody"),s=0;s<e;s++){for(var o=n.createElement("tr"),r=0;r<t;r++){var l=s*t+r+1,d=n.createElement("td");if(!mxClient.IS_NS||mxClient.IS_SF||mxClient.IS_GC){var c=n.createElement("a");c.setAttribute("href","#mxPage-"+l),mxUtils.write(c,l,n),d.appendChild(c)}else mxUtils.write(d,l,n);o.appendChild(d)}i.appendChild(o)}return a.appendChild(i),a},mxPrintPreview.prototype.renderPage=function(e,t,n){var a=document.createElement("div");try{a.style.width=e+"px",a.style.height=t+"px",a.style.overflow="hidden",a.style.pageBreakInside="avoid",a.style.position="relative";var i=document.createElement("div");i.style.top=this.border+"px",i.style.left=this.border+"px",i.style.width=e-2*this.border+"px",i.style.height=t-2*this.border+"px",i.style.overflow="hidden",this.graph.dialect==mxConstants.DIALECT_VML&&(i.style.position="absolute"),a.appendChild(i),document.body.appendChild(a),n(i)}catch(e){throw a.parentNode.removeChild(a),e}return a},mxPrintPreview.prototype.addGraphFragment=function(e,t,n,a,i){a=this.graph.getView();var s=this.graph.container;this.graph.container=i;var o=a.getCanvas(),r=a.getBackgroundPane(),l=a.getDrawPane(),d=a.getOverlayPane();this.graph.dialect==mxConstants.DIALECT_SVG?a.createSvg():this.graph.dialect==mxConstants.DIALECT_VML?a.createVml():a.createHtml();var c=a.isEventsEnabled();a.setEventsEnabled(!1);var m=this.graph.isEnabled();this.graph.setEnabled(!1);var u=a.getTranslate();a.translate=new mxPoint(e,t),e=null;try{var p=[this.graph.getModel().getRoot()];e=new mxTemporaryCellStates(a,n,p)}finally{if(mxClient.IS_IE)a.overlayPane.innerHTML="";else for(n=i.firstChild;null!=n;)p=n.nextSibling,"svg"==(t=n.nodeName.toLowerCase())?(n.setAttribute("width",parseInt(i.style.width)),n.setAttribute("height",parseInt(i.style.height))):"default"!=n.style.cursor&&"table"!=t&&n.parentNode.removeChild(n),n=p;a.overlayPane.parentNode.removeChild(a.overlayPane),this.graph.setEnabled(m),this.graph.container=s,a.canvas=o,a.backgroundPane=r,a.drawPane=l,a.overlayPane=d,a.translate=u,e.destroy(),a.setEventsEnabled(c)}},mxPrintPreview.prototype.getCoverPages=function(){return null},mxPrintPreview.prototype.getAppendices=function(){return null},mxPrintPreview.prototype.print=function(){var e=this.open();null!=e&&e.print()},mxPrintPreview.prototype.close=function(){null!=this.wnd&&(this.wnd.close(),this.wnd=null)},mxStylesheet.prototype.createDefaultVertexStyle=function(){var e={};return e[mxConstants.STYLE_SHAPE]=mxConstants.SHAPE_RECTANGLE,e[mxConstants.STYLE_PERIMETER]=mxPerimeter.RectanglePerimeter,e[mxConstants.STYLE_VERTICAL_ALIGN]=mxConstants.ALIGN_MIDDLE,e[mxConstants.STYLE_ALIGN]=mxConstants.ALIGN_CENTER,e[mxConstants.STYLE_FILLCOLOR]="#C3D9FF",e[mxConstants.STYLE_STROKECOLOR]="#6482B9",e[mxConstants.STYLE_FONTCOLOR]="#774400",e},mxStylesheet.prototype.createDefaultEdgeStyle=function(){var e={};return e[mxConstants.STYLE_SHAPE]=mxConstants.SHAPE_CONNECTOR,e[mxConstants.STYLE_ENDARROW]=mxConstants.ARROW_CLASSIC,e[mxConstants.STYLE_VERTICAL_ALIGN]=mxConstants.ALIGN_MIDDLE,e[mxConstants.STYLE_ALIGN]=mxConstants.ALIGN_CENTER,e[mxConstants.STYLE_STROKECOLOR]="#6482B9",e[mxConstants.STYLE_FONTCOLOR]="#446299",e},mxStylesheet.prototype.putDefaultVertexStyle=function(e){this.putCellStyle("defaultVertex",e)},mxStylesheet.prototype.putDefaultEdgeStyle=function(e){this.putCellStyle("defaultEdge",e)},mxStylesheet.prototype.getDefaultVertexStyle=function(){return this.styles.defaultVertex},mxStylesheet.prototype.getDefaultEdgeStyle=function(){return this.styles.defaultEdge},mxStylesheet.prototype.putCellStyle=function(e,t){this.styles[e]=t},mxStylesheet.prototype.getCellStyle=function(e,t){var n=t;if(null!=e&&0<e.length)for(var a=e.split(";"),i=(n=null!=n&&";"!=e.charAt(0)?mxUtils.clone(n):{},0);i<a.length;i++){var s=(o=a[i]).indexOf("=");if(0<=s){var o,r=o.substring(0,s);(o=o.substring(s+1))==mxConstants.NONE?delete n[r]:mxUtils.isNumeric(o)?n[r]=parseFloat(o):n[r]=o}else if(null!=(o=this.styles[o]))for(r in o)n[r]=o[r]}return n},mxCellState.prototype=new mxRectangle,mxCellState.prototype.constructor=mxCellState,mxCellState.prototype.view=null,mxCellState.prototype.cell=null,mxCellState.prototype.style=null,mxCellState.prototype.invalid=!0,mxCellState.prototype.invalidOrder=!1,mxCellState.prototype.orderChanged=!1,mxCellState.prototype.origin=null,mxCellState.prototype.absolutePoints=null,mxCellState.prototype.absoluteOffset=null,mxCellState.prototype.visibleSourceState=null,mxCellState.prototype.visibleTargetState=null,mxCellState.prototype.terminalDistance=0,mxCellState.prototype.length=0,mxCellState.prototype.segments=null,mxCellState.prototype.shape=null,mxCellState.prototype.text=null,mxCellState.prototype.getPerimeterBounds=function(e,t){if(e=e||0,t=null!=t?t:new mxRectangle(this.x,this.y,this.width,this.height),null!=this.shape&&null!=this.shape.stencil){var n=this.shape.stencil.computeAspect(this.style,t.x,t.y,t.width,t.height);t.x=n.x,t.y=n.y,t.width=this.shape.stencil.w0*n.width,t.height=this.shape.stencil.h0*n.height}return 0!=e&&t.grow(e),t},mxCellState.prototype.setAbsoluteTerminalPoint=function(e,t){t?(null==this.absolutePoints&&(this.absolutePoints=[]),0==this.absolutePoints.length?this.absolutePoints.push(e):this.absolutePoints[0]=e):null==this.absolutePoints?(this.absolutePoints=[],this.absolutePoints.push(null),this.absolutePoints.push(e)):1==this.absolutePoints.length?this.absolutePoints.push(e):this.absolutePoints[this.absolutePoints.length-1]=e},mxCellState.prototype.setCursor=function(e){null!=this.shape&&this.shape.setCursor(e),null!=this.text&&this.text.setCursor(e)},mxCellState.prototype.getVisibleTerminal=function(e){return null!=(e=this.getVisibleTerminalState(e))?e.cell:null},mxCellState.prototype.getVisibleTerminalState=function(e){return e?this.visibleSourceState:this.visibleTargetState},mxCellState.prototype.setVisibleTerminalState=function(e,t){t?this.visibleSourceState=e:this.visibleTargetState=e},mxCellState.prototype.destroy=function(){this.view.graph.cellRenderer.destroy(this)},mxCellState.prototype.clone=function(){var e=new mxCellState(this.view,this.cell,this.style);if(null!=this.absolutePoints){e.absolutePoints=[];for(var t=0;t<this.absolutePoints.length;t++)e.absolutePoints[t]=this.absolutePoints[t].clone()}return null!=this.origin&&(e.origin=this.origin.clone()),null!=this.absoluteOffset&&(e.absoluteOffset=this.absoluteOffset.clone()),null!=this.boundingBox&&(e.boundingBox=this.boundingBox.clone()),e.terminalDistance=this.terminalDistance,e.segments=this.segments,e.length=this.length,e.x=this.x,e.y=this.y,e.width=this.width,e.height=this.height,e},mxGraphSelectionModel.prototype=new mxEventSource,mxGraphSelectionModel.prototype.constructor=mxGraphSelectionModel,mxGraphSelectionModel.prototype.doneResource="none"!=mxClient.language?"done":"",mxGraphSelectionModel.prototype.updatingSelectionResource="none"!=mxClient.language?"updatingSelection":"",mxGraphSelectionModel.prototype.graph=null,mxGraphSelectionModel.prototype.singleSelection=!1,mxGraphSelectionModel.prototype.isSingleSelection=function(){return this.singleSelection},mxGraphSelectionModel.prototype.setSingleSelection=function(e){this.singleSelection=e},mxGraphSelectionModel.prototype.isSelected=function(e){return null!=e&&0<=mxUtils.indexOf(this.cells,e)},mxGraphSelectionModel.prototype.isEmpty=function(){return 0==this.cells.length},mxGraphSelectionModel.prototype.clear=function(){this.changeSelection(null,this.cells)},mxGraphSelectionModel.prototype.setCell=function(e){null!=e&&this.setCells([e])},mxGraphSelectionModel.prototype.setCells=function(e){if(null!=e){this.singleSelection&&(e=[this.getFirstSelectableCell(e)]);for(var t=[],n=0;n<e.length;n++)this.graph.isCellSelectable(e[n])&&t.push(e[n]);this.changeSelection(t,this.cells)}},mxGraphSelectionModel.prototype.getFirstSelectableCell=function(e){if(null!=e)for(var t=0;t<e.length;t++)if(this.graph.isCellSelectable(e[t]))return e[t];return null},mxGraphSelectionModel.prototype.addCell=function(e){null!=e&&this.addCells([e])},mxGraphSelectionModel.prototype.addCells=function(e){if(null!=e){var t=null;this.singleSelection&&(t=this.cells,e=[this.getFirstSelectableCell(e)]);for(var n=[],a=0;a<e.length;a++)!this.isSelected(e[a])&&this.graph.isCellSelectable(e[a])&&n.push(e[a]);this.changeSelection(n,t)}},mxGraphSelectionModel.prototype.removeCell=function(e){null!=e&&this.removeCells([e])},mxGraphSelectionModel.prototype.removeCells=function(e){if(null!=e){for(var t=[],n=0;n<e.length;n++)this.isSelected(e[n])&&t.push(e[n]);this.changeSelection(null,t)}},mxGraphSelectionModel.prototype.changeSelection=function(e,t){if(null!=e&&0<e.length&&null!=e[0]||null!=t&&0<t.length&&null!=t[0]){var n=new mxSelectionChange(this,e,t);n.execute();var a=new mxUndoableEdit(this,!1);a.add(n),this.fireEvent(new mxEventObject(mxEvent.UNDO,"edit",a))}},mxGraphSelectionModel.prototype.cellAdded=function(e){null!=e&&!this.isSelected(e)&&this.cells.push(e)},mxGraphSelectionModel.prototype.cellRemoved=function(e){null!=e&&(0<=(e=mxUtils.indexOf(this.cells,e))&&this.cells.splice(e,1))},mxSelectionChange.prototype.execute=function(){var e=mxLog.enter("mxSelectionChange.execute");if(window.status=mxResources.get(this.selectionModel.updatingSelectionResource)||this.selectionModel.updatingSelectionResource,null!=this.removed)for(var t=0;t<this.removed.length;t++)this.selectionModel.cellRemoved(this.removed[t]);if(null!=this.added)for(t=0;t<this.added.length;t++)this.selectionModel.cellAdded(this.added[t]);t=this.added,this.added=this.removed,this.removed=t,window.status=mxResources.get(this.selectionModel.doneResource)||this.selectionModel.doneResource,mxLog.leave("mxSelectionChange.execute",e),this.selectionModel.fireEvent(new mxEventObject(mxEvent.CHANGE,"added",this.added,"removed",this.removed))},mxCellEditor.prototype.graph=null,mxCellEditor.prototype.textarea=null,mxCellEditor.prototype.editingCell=null,mxCellEditor.prototype.trigger=null,mxCellEditor.prototype.modified=!1,mxCellEditor.prototype.autoSize=!0,mxCellEditor.prototype.emptyLabelText="",mxCellEditor.prototype.textNode="",mxCellEditor.prototype.init=function(){this.textarea=document.createElement("textarea"),this.textarea.className="mxCellEditor",this.textarea.style.position="absolute",this.textarea.style.overflow="visible",this.textarea.setAttribute("cols","20"),this.textarea.setAttribute("rows","4"),mxClient.IS_NS&&(this.textarea.style.resize="none"),mxEvent.addListener(this.textarea,"blur",mxUtils.bind(this,function(e){this.focusLost()})),mxEvent.addListener(this.textarea,"keydown",mxUtils.bind(this,function(e){mxEvent.isConsumed(e)||(113==e.keyCode||this.graph.isEnterStopsCellEditing()&&13==e.keyCode&&!mxEvent.isControlDown(e)&&!mxEvent.isShiftDown(e)?(this.graph.stopEditing(!1),mxEvent.consume(e)):27==e.keyCode?(this.graph.stopEditing(!0),mxEvent.consume(e)):(this.clearOnChange&&(this.clearOnChange=!1,this.textarea.value=""),this.setModified(!0)))})),mxEvent.addListener(this.textarea,"keypress",mxUtils.bind(this,function(e){this.autoSize&&!mxEvent.isConsumed(e)&&setTimeout(mxUtils.bind(this,function(){this.resize()}),0)}))},mxCellEditor.prototype.resize=function(){if(null!=this.textDiv){var e=this.graph.getView().getState(this.editingCell),t=this.graph.isLabelClipped(e.cell),n=this.graph.isWrapping(e.cell);if(this.graph.getModel().isEdge(e.cell))this.bounds.x=e.absoluteOffset.x,this.bounds.y=e.absoluteOffset.y,this.bounds.width=0,this.bounds.height=0;else if(null!=this.bounds){this.bounds.x=e.x,this.bounds.y=e.y,this.bounds.width=e.width,this.bounds.height=e.height,(a=mxUtils.getValue(e.style,mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER))==mxConstants.ALIGN_LEFT?this.bounds.x-=e.width:a==mxConstants.ALIGN_RIGHT&&(this.bounds.x+=e.width),(a=mxUtils.getValue(e.style,mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE))==mxConstants.ALIGN_TOP?this.bounds.y-=e.height:a==mxConstants.ALIGN_BOTTOM&&(this.bounds.y+=e.height)}"\n"!=(a=this.textarea.value).charAt(a.length-1)&&""!=a||(a+="&nbsp;"),a=mxUtils.htmlEntities(a,!1),n?(this.textDiv.style.whiteSpace="normal",this.textDiv.style.width=this.bounds.width+"px"):a=a.replace(/ /g,"&nbsp;"),a=a.replace(/\n/g,"<br/>"),this.textDiv.innerHTML=a;var a=this.textDiv.offsetWidth+30,i=this.textDiv.offsetHeight+16;a=Math.max(a,40),i=Math.max(i,20);t&&(a=Math.min(this.bounds.width-4,a),i=Math.min(this.bounds.height,i));var s=null!=e.text?e.text.margin:null;null==s&&(s=mxUtils.getValue(e.style,mxConstants.STYLE_ALIGN,mxConstants.ALIGN_CENTER),e=mxUtils.getValue(e.style,mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),s=mxUtils.getAlignmentAsPoint(s,e)),null!=s&&(!t&&n||(this.textarea.style.left=Math.max(0,Math.round(this.bounds.x-s.x*this.bounds.width+s.x*a)-3)+"px"),this.textarea.style.top=Math.max(0,Math.round(this.bounds.y-s.y*this.bounds.height+s.y*i)+4)+"px"),!t&&n||(this.textarea.style.width=a+"px"),this.textarea.style.height=i+"px"}},mxCellEditor.prototype.isModified=function(){return this.modified},mxCellEditor.prototype.setModified=function(e){this.modified=e},mxCellEditor.prototype.focusLost=function(){this.stopEditing(!this.graph.isInvokesStopCellEditing())},mxCellEditor.prototype.startEditing=function(e,t){null==this.textarea&&this.init(),this.stopEditing(!0);var n=this.graph.getView().getState(e);if(null!=n){this.editingCell=e,this.trigger=t,(this.textNode=null)!=n.text&&this.isHideLabel(n)&&(this.textNode=n.text.node,this.textNode.style.visibility="hidden");var a=this.graph.getView().scale,i=(a=mxUtils.getValue(n.style,mxConstants.STYLE_FONTSIZE,mxConstants.DEFAULT_FONTSIZE)*a,mxUtils.getValue(n.style,mxConstants.STYLE_FONTFAMILY,mxConstants.DEFAULT_FONTFAMILY)),s=mxUtils.getValue(n.style,mxConstants.STYLE_FONTCOLOR,"black"),o=mxUtils.getValue(n.style,mxConstants.STYLE_ALIGN,mxConstants.ALIGN_LEFT),r=(mxUtils.getValue(n.style,mxConstants.STYLE_FONTSTYLE,0)&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD,l=(mxUtils.getValue(n.style,mxConstants.STYLE_FONTSTYLE,0)&mxConstants.FONT_ITALIC)==mxConstants.FONT_ITALIC,d=(mxUtils.getValue(n.style,mxConstants.STYLE_FONTSTYLE,0)&mxConstants.FONT_UNDERLINE)==mxConstants.FONT_UNDERLINE;this.textarea.style.fontSize=Math.round(a)+"px",this.textarea.style.lineHeight=Math.round(a*mxConstants.LINE_HEIGHT)+"px",this.textarea.style.fontFamily=i,this.textarea.style.textAlign=o,this.textarea.style.color=s,this.textarea.style.fontWeight=r?"bold":"normal",this.textarea.style.fontStyle=l?"italic":"",this.textarea.style.textDecoration=d?"underline":"",this.textarea.style.overflow="auto",this.textarea.style.outline="none",this.bounds=a=this.getEditorBounds(n),this.textarea.style.left=a.x+"px",this.textarea.style.top=a.y+"px",this.textarea.style.width=a.width+"px",this.textarea.style.height=a.height+"px",this.textarea.style.zIndex=5,null==(n=this.getInitialValue(n,t))||0==n.length?(n=this.getEmptyLabelText(),this.clearOnChange=!0):this.clearOnChange=!1,this.setModified(!1),this.textarea.value=n,this.graph.container.appendChild(this.textarea),"none"!=this.textarea.style.display&&(this.autoSize&&(this.textDiv=this.createTextDiv(),document.body.appendChild(this.textDiv),this.resize()),this.textarea.focus(),this.textarea.select())}},mxCellEditor.prototype.createTextDiv=function(){var e=document.createElement("div"),t=e.style;return t.position="absolute",t.whiteSpace="nowrap",t.visibility="hidden",t.display=mxClient.IS_QUIRKS?"inline":"inline-block",t.zoom="1",t.verticalAlign="top",t.lineHeight=this.textarea.style.lineHeight,t.fontSize=this.textarea.style.fontSize,t.fontFamily=this.textarea.style.fontFamily,t.fontWeight=this.textarea.style.fontWeight,t.textAlign=this.textarea.style.textAlign,t.fontStyle=this.textarea.style.fontStyle,t.textDecoration=this.textarea.style.textDecoration,e},mxCellEditor.prototype.stopEditing=function(e){null!=this.editingCell&&(null!=this.textNode&&(this.textNode.style.visibility="visible",this.textNode=null),!e&&this.isModified()&&this.graph.labelChanged(this.editingCell,this.getCurrentValue(),this.trigger),null!=this.textDiv&&(document.body.removeChild(this.textDiv),this.textDiv=null),this.bounds=this.trigger=this.editingCell=null,this.textarea.blur(),this.textarea.parentNode.removeChild(this.textarea))},mxCellEditor.prototype.getInitialValue=function(e,t){return this.graph.getEditingValue(e.cell,t)},mxCellEditor.prototype.getCurrentValue=function(){return this.textarea.value.replace(/\r/g,"")},mxCellEditor.prototype.isHideLabel=function(e){return!0},mxCellEditor.prototype.getMinimumSize=function(e){var t=this.graph.getView().scale;return new mxRectangle(0,0,null==e.text?30:e.text.size*t+20,"left"==this.textarea.style.textAlign?120:40)},mxCellEditor.prototype.getEditorBounds=function(e){var t=this.graph.getModel().isEdge(e.cell),n=this.graph.getView().scale,a=(i=this.getMinimumSize(e)).width,i=i.height,s=parseInt(e.style[mxConstants.STYLE_SPACING]||2)*n,o=parseInt(e.style[mxConstants.STYLE_SPACING_TOP]||0)*n+s,r=parseInt(e.style[mxConstants.STYLE_SPACING_RIGHT]||0)*n+s,l=parseInt(e.style[mxConstants.STYLE_SPACING_BOTTOM]||0)*n+s;n=parseInt(e.style[mxConstants.STYLE_SPACING_LEFT]||0)*n+s,r=new mxRectangle(e.x,e.y,Math.max(a,e.width-n-r),Math.max(i,e.height-o-l));return t?(r.x=e.absoluteOffset.x,r.y=e.absoluteOffset.y,null!=e.text&&null!=e.text.boundingBox&&(0<e.text.boundingBox.x&&(r.x=e.text.boundingBox.x),0<e.text.boundingBox.y&&(r.y=e.text.boundingBox.y))):null!=e.text&&null!=e.text.boundingBox&&(r.x=Math.min(r.x,e.text.boundingBox.x),r.y=Math.min(r.y,e.text.boundingBox.y)),r.x+=n,r.y+=o,null!=e.text&&null!=e.text.boundingBox&&(t?(r.width=Math.max(a,e.text.boundingBox.width),r.height=Math.max(i,e.text.boundingBox.height)):(r.width=Math.max(r.width,e.text.boundingBox.width),r.height=Math.max(r.height,e.text.boundingBox.height))),this.graph.getModel().isVertex(e.cell)&&((t=mxUtils.getValue(e.style,mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER))==mxConstants.ALIGN_LEFT?r.x-=e.width:t==mxConstants.ALIGN_RIGHT&&(r.x+=e.width),(t=mxUtils.getValue(e.style,mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE))==mxConstants.ALIGN_TOP?r.y-=e.height:t==mxConstants.ALIGN_BOTTOM&&(r.y+=e.height)),r},mxCellEditor.prototype.getEmptyLabelText=function(e){return this.emptyLabelText},mxCellEditor.prototype.getEditingCell=function(){return this.editingCell},mxCellEditor.prototype.destroy=function(){null!=this.textarea&&(mxEvent.release(this.textarea),null!=this.textarea.parentNode&&this.textarea.parentNode.removeChild(this.textarea),this.textarea=null)},mxCellRenderer.prototype.defaultEdgeShape=mxConnector,mxCellRenderer.prototype.defaultVertexShape=mxRectangleShape,mxCellRenderer.prototype.defaultTextShape=mxText,mxCellRenderer.prototype.legacyControlPosition=!0,mxCellRenderer.prototype.defaultShapes={},mxCellRenderer.registerShape=function(e,t){mxCellRenderer.prototype.defaultShapes[e]=t},mxCellRenderer.registerShape(mxConstants.SHAPE_RECTANGLE,mxRectangleShape),mxCellRenderer.registerShape(mxConstants.SHAPE_ELLIPSE,mxEllipse),mxCellRenderer.registerShape(mxConstants.SHAPE_RHOMBUS,mxRhombus),mxCellRenderer.registerShape(mxConstants.SHAPE_CYLINDER,mxCylinder),mxCellRenderer.registerShape(mxConstants.SHAPE_CONNECTOR,mxConnector),mxCellRenderer.registerShape(mxConstants.SHAPE_ACTOR,mxActor),mxCellRenderer.registerShape(mxConstants.SHAPE_TRIANGLE,mxTriangle),mxCellRenderer.registerShape(mxConstants.SHAPE_HEXAGON,mxHexagon),mxCellRenderer.registerShape(mxConstants.SHAPE_CLOUD,mxCloud),mxCellRenderer.registerShape(mxConstants.SHAPE_LINE,mxLine),mxCellRenderer.registerShape(mxConstants.SHAPE_ARROW,mxArrow),mxCellRenderer.registerShape(mxConstants.SHAPE_DOUBLE_ELLIPSE,mxDoubleEllipse),mxCellRenderer.registerShape(mxConstants.SHAPE_SWIMLANE,mxSwimlane),mxCellRenderer.registerShape(mxConstants.SHAPE_IMAGE,mxImageShape),mxCellRenderer.registerShape(mxConstants.SHAPE_LABEL,mxLabel),mxCellRenderer.prototype.initialize=function(e,t){var n=e.view.graph.getModel();null!=e.view.graph.container&&null==e.shape&&e.cell!=e.view.currentRoot&&(n.isVertex(e.cell)||n.isEdge(e.cell))&&(this.createShape(e),null==e.shape||null!=t&&!t||(this.initializeShape(e),e.view.graph.ordered||n.isEdge(e.cell)?e.invalidOrder=!0:e.view.graph.keepEdgesInForeground&&null!=this.firstEdge&&(this.firstEdge.parentNode==e.shape.node.parentNode?this.insertState(e,this.firstEdge):this.firstEdge=null),e.shape.scale=e.view.scale,this.createCellOverlays(e),this.installListeners(e)))},mxCellRenderer.prototype.initializeShape=function(e){e.shape.init(e.view.getDrawPane())},mxCellRenderer.prototype.getPreviousStateInContainer=function(e,t){for(var n=null,a=e.view.graph,i=a.getModel(),s=e.cell,o=i.getParent(s);null!=o&&null==n;)n=this.findPreviousStateInContainer(a,o,s,t),s=o,o=i.getParent(s);return n},mxCellRenderer.prototype.findPreviousStateInContainer=function(e,t,n,a){var i=null,s=e.getModel();for(n=null!=n?t.getIndex(n)-1:s.getChildCount(t)-1;0<=n&&null==i;n--)i=this.findPreviousStateInContainer(e,s.getChildAt(t,n),null,a);return null!=i||(null==(i=e.view.getState(t))||null!=i.shape&&null!=i.shape.node&&i.shape.node.parentNode==a)||(i=null),i},mxCellRenderer.prototype.order=function(e){var t=e.shape.node.parentNode,n=this.getPreviousStateInContainer(e,t),a=t.firstChild;null!=n&&(a=n.shape.node,null!=n.text&&null!=n.text.node&&n.text.node.parentNode==t&&(a=n.text.node),a=a.nextSibling),this.insertState(e,a)},mxCellRenderer.prototype.orderEdge=function(e){var t=(n=e.view).graph.getModel();if(n.graph.keepEdgesInForeground)null!=this.firstEdge&&null!=this.firstEdge.parentNode&&this.firstEdge.parentNode==e.shape.node.parentNode||(this.firstEdge=e.shape.node);else if(n.graph.keepEdgesInBackground){var n,a=e.shape.node,i=a.parentNode;t=t.getParent(e.cell);null!=(i=null!=(n=n.getState(t))&&null!=n.shape&&null!=n.shape.node?n.shape.node.nextSibling:i.firstChild)&&i!=a&&this.insertState(e,i)}},mxCellRenderer.prototype.insertState=function(e,t){e.shape.node.parentNode.insertBefore(e.shape.node,t),null!=e.text&&null!=e.text.node&&e.text.node.parentNode==e.shape.node.parentNode&&e.shape.node.parentNode.insertBefore(e.text.node,e.shape.node.nextSibling)},mxCellRenderer.prototype.createShape=function(e){if(null!=e.style){var t=mxStencilRegistry.getStencil(e.style[mxConstants.STYLE_SHAPE]);null!=t?e.shape=new mxShape(t):(t=this.getShapeConstructor(e),e.shape=new t),e.shape.points=e.absolutePoints,e.shape.bounds=new mxRectangle(e.x,e.y,e.width,e.height),e.shape.dialect=e.view.graph.dialect,this.configureShape(e)}},mxCellRenderer.prototype.getShape=function(e){return null!=e?mxCellRenderer.prototype.defaultShapes[e]:null},mxCellRenderer.prototype.getShapeConstructor=function(e){var t=this.getShape(e.style[mxConstants.STYLE_SHAPE]);return null==t&&(t=e.view.graph.getModel().isEdge(e.cell)?this.defaultEdgeShape:this.defaultVertexShape),t},mxCellRenderer.prototype.configureShape=function(e){e.shape.apply(e),e.shape.image=e.view.graph.getImage(e),e.shape.indicatorShape=this.getShape(e.view.graph.getIndicatorShape(e)),e.shape.indicatorColor=e.view.graph.getIndicatorColor(e),e.shape.indicatorGradientColor=e.view.graph.getIndicatorGradientColor(e),e.shape.indicatorDirection=e.style[mxConstants.STYLE_INDICATOR_DIRECTION],e.shape.indicatorImage=e.view.graph.getIndicatorImage(e),this.postConfigureShape(e)},mxCellRenderer.prototype.postConfigureShape=function(e){null!=e.shape&&(this.resolveColor(e,"indicatorColor",mxConstants.STYLE_FILLCOLOR),this.resolveColor(e,"indicatorGradientColor",mxConstants.STYLE_GRADIENTCOLOR),this.resolveColor(e,"fill",mxConstants.STYLE_FILLCOLOR),this.resolveColor(e,"stroke",mxConstants.STYLE_STROKECOLOR),this.resolveColor(e,"gradient",mxConstants.STYLE_GRADIENTCOLOR))},mxCellRenderer.prototype.resolveColor=function(e,t,n){var a=e.shape[t],i=e.view.graph,s=null;"inherit"==a?s=i.model.getParent(e.cell):"swimlane"==a?(s=null!=i.model.getTerminal(e.cell,!1)?i.model.getTerminal(e.cell,!1):e.cell,s=i.getSwimlane(s),n=i.swimlaneIndicatorColorAttribute):"indicated"==a&&(e.shape[t]=e.shape.indicatorColor),null!=s&&(a=i.getView().getState(s),(e.shape[t]=null)!=a&&(e.shape[t]=null!=a.shape&&"indicatorColor"!=t?a.shape[t]:a.style[n]))},mxCellRenderer.prototype.getLabelValue=function(e){return e.view.graph.getLabel(e.cell)},mxCellRenderer.prototype.createLabel=function(n,e){var a=n.view.graph;if(a.getModel().isEdge(n.cell),0<n.style[mxConstants.STYLE_FONTSIZE]||null==n.style[mxConstants.STYLE_FONTSIZE]){var t=a.isHtmlLabel(n.cell)||null!=e&&mxUtils.isNode(e);n.text=new this.defaultTextShape(e,new mxRectangle,n.style[mxConstants.STYLE_ALIGN]||mxConstants.ALIGN_CENTER,a.getVerticalAlign(n),n.style[mxConstants.STYLE_FONTCOLOR],n.style[mxConstants.STYLE_FONTFAMILY],n.style[mxConstants.STYLE_FONTSIZE],n.style[mxConstants.STYLE_FONTSTYLE],n.style[mxConstants.STYLE_SPACING],n.style[mxConstants.STYLE_SPACING_TOP],n.style[mxConstants.STYLE_SPACING_RIGHT],n.style[mxConstants.STYLE_SPACING_BOTTOM],n.style[mxConstants.STYLE_SPACING_LEFT],n.style[mxConstants.STYLE_HORIZONTAL],n.style[mxConstants.STYLE_LABEL_BACKGROUNDCOLOR],n.style[mxConstants.STYLE_LABEL_BORDERCOLOR],a.isWrapping(n.cell)&&a.isHtmlLabel(n.cell),a.isLabelClipped(n.cell),n.style[mxConstants.STYLE_OVERFLOW],n.style[mxConstants.STYLE_LABEL_PADDING]),n.text.opacity=mxUtils.getValue(n.style,mxConstants.STYLE_TEXT_OPACITY,100),n.text.dialect=t?mxConstants.DIALECT_STRICTHTML:n.view.graph.dialect,n.text.state=n,this.initializeLabel(n);var i=!1,s=function(e){var t=n;return(mxClient.IS_TOUCH||i)&&(t=mxEvent.getClientX(e),e=mxEvent.getClientY(e),e=mxUtils.convertPoint(a.container,t,e),t=a.view.getState(a.getCellAt(e.x,e.y))),t};mxEvent.addGestureListeners(n.text.node,mxUtils.bind(this,function(e){this.isLabelEvent(n,e)&&(a.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e,n)),i=a.dialect!=mxConstants.DIALECT_SVG&&"IMG"==mxEvent.getSource(e).nodeName)}),mxUtils.bind(this,function(e){this.isLabelEvent(n,e)&&a.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,s(e)))}),mxUtils.bind(this,function(e){this.isLabelEvent(n,e)&&(a.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e,s(e))),i=!1)})),mxEvent.addListener(n.text.node,"dblclick",mxUtils.bind(this,function(e){this.isLabelEvent(n,e)&&(a.dblClick(e,n.cell),mxEvent.consume(e))}))}},mxCellRenderer.prototype.initializeLabel=function(e){var t=e.view.graph;e.text.dialect!=mxConstants.DIALECT_SVG&&(mxClient.IS_SVG&&mxClient.NO_FO?e.text.init(t.container):mxUtils.isVml(e.view.getDrawPane())&&(null!=e.shape.label?e.text.init(e.shape.label):e.text.init(e.shape.node))),null==e.text.node&&(e.text.init(e.view.getDrawPane()),null!=e.shape&&null!=e.text&&e.shape.node.parentNode.insertBefore(e.text.node,e.shape.node.nextSibling))},mxCellRenderer.prototype.createCellOverlays=function(e){var t=e.view.graph.getCellOverlays(e.cell),n=null;if(null!=t){n=new mxDictionary;for(var a=0;a<t.length;a++){var i=null!=e.overlays?e.overlays.remove(t[a]):null;null==i&&((i=new mxImageShape(new mxRectangle,t[a].image.src)).dialect=e.view.graph.dialect,i.preserveImageAspect=!1,i.overlay=t[a],this.initializeOverlay(e,i),this.installCellOverlayListeners(e,t[a],i),null!=t[a].cursor&&(i.node.style.cursor=t[a].cursor)),n.put(t[a],i)}}null!=e.overlays&&e.overlays.visit(function(e,t){t.destroy()}),e.overlays=n},mxCellRenderer.prototype.initializeOverlay=function(e,t){t.init(e.view.getOverlayPane())},mxCellRenderer.prototype.installCellOverlayListeners=function(t,n,e){var a=t.view.graph;mxEvent.addListener(e.node,"click",function(e){a.isEditing()&&a.stopEditing(!a.isInvokesStopCellEditing()),n.fireEvent(new mxEventObject(mxEvent.CLICK,"event",e,"cell",t.cell))}),mxEvent.addGestureListeners(e.node,function(e){mxEvent.consume(e)},function(e){a.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,t))}),mxClient.IS_TOUCH&&mxEvent.addListener(e.node,"touchend",function(e){n.fireEvent(new mxEventObject(mxEvent.CLICK,"event",e,"cell",t.cell))})},mxCellRenderer.prototype.createControl=function(n){var a=n.view.graph,e=a.getFoldingImage(n);if(a.foldingEnabled&&null!=e){if(null==n.control){var t=new mxRectangle(0,0,e.width,e.height);n.control=new mxImageShape(t,e.src),n.control.preserveImageAspect=!1,n.control.dialect=a.dialect,this.initControl(n,n.control,!0,function(e){if(a.isEnabled()){var t=!a.isCellCollapsed(n.cell);a.foldCells(t,!1,[n.cell]),mxEvent.consume(e)}})}}else null!=n.control&&(n.control.destroy(),n.control=null)},mxCellRenderer.prototype.initControl=function(t,e,n,a){var i=t.view.graph;return i.isHtmlLabel(t.cell)&&mxClient.NO_FO&&i.dialect==mxConstants.DIALECT_SVG?(e.dialect=mxConstants.DIALECT_PREFERHTML,e.init(i.container),e.node.style.zIndex=1):e.init(t.view.getOverlayPane()),e=e.innerNode||e.node,a&&(i.isEnabled()&&(e.style.cursor="pointer"),mxEvent.addListener(e,"click",a)),n&&mxEvent.addGestureListeners(e,function(e){i.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e,t)),mxEvent.consume(e)},function(e){i.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,t))}),e},mxCellRenderer.prototype.isShapeEvent=function(e,t){return!0},mxCellRenderer.prototype.isLabelEvent=function(e,t){return!0},mxCellRenderer.prototype.installListeners=function(n){var a=n.view.graph,t=function(e){var t=n;return(a.dialect!=mxConstants.DIALECT_SVG&&"IMG"==mxEvent.getSource(e).nodeName||mxClient.IS_TOUCH)&&(t=mxEvent.getClientX(e),e=mxEvent.getClientY(e),e=mxUtils.convertPoint(a.container,t,e),t=a.view.getState(a.getCellAt(e.x,e.y))),t},i=!1;mxEvent.addListener(n.shape.node,"gesturestart",mxUtils.bind(this,function(e){a.lastTouchTime=0,i=!0,mxEvent.consume(e)})),mxEvent.addGestureListeners(n.shape.node,mxUtils.bind(this,function(e){this.isShapeEvent(n,e)&&!i?a.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e,null!=n.shape&&mxEvent.getSource(e)==n.shape.content?null:n)):i&&mxEvent.consume(e)}),mxUtils.bind(this,function(e){this.isShapeEvent(n,e)&&!i?a.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,null!=n.shape&&mxEvent.getSource(e)==n.shape.content?null:t(e))):i&&mxEvent.consume(e)}),mxUtils.bind(this,function(e){this.isShapeEvent(n,e)&&!i?a.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e,null!=n.shape&&mxEvent.getSource(e)==n.shape.content?null:t(e))):i&&mxEvent.consume(e)}));var s=mxClient.IS_TOUCH?"gestureend":"dblclick";mxEvent.addListener(n.shape.node,s,mxUtils.bind(this,function(e){i=!1,"gestureend"==s?(a.lastTouchTime=0,a.gestureEnabled&&(a.handleGesture(n,e),mxEvent.consume(e))):this.isShapeEvent(n,e)&&(a.dblClick(e,null!=n.shape&&mxEvent.getSource(e)==n.shape.content?null:n.cell),mxEvent.consume(e))}))},mxCellRenderer.prototype.redrawLabel=function(e,t){var n=this.getLabelValue(e);if(null==e.text&&null!=n&&(mxUtils.isNode(n)||0<n.length)?this.createLabel(e,n):null==e.text||null!=n&&0!=n.length||(e.text.destroy(),e.text=null),null!=e.text){var a=(i=e.view.graph).isWrapping(e.cell),i=i.isLabelClipped(e.cell),s=this.getLabelBounds(e);!t&&e.text.value==n&&e.text.isWrapping==a&&e.text.isClipping==i&&e.text.scale==e.view.scale&&e.text.bounds.equals(s)||(e.text.value=n,e.text.bounds=s,e.text.scale=this.getTextScale(e),e.text.isWrapping=a,e.text.isClipping=i,e.text.redraw())}},mxCellRenderer.prototype.getTextScale=function(e){return e.view.scale},mxCellRenderer.prototype.getLabelBounds=function(e){var t=e.view.graph,n=e.view.scale,a=t.getModel().isEdge(e.cell),i=new mxRectangle(e.absoluteOffset.x,e.absoluteOffset.y);return e.text.updateMargin(),a?(a=e.text.getSpacing(),i.x+=a.x*n,i.y+=a.y*n,null!=(t=t.getCellGeometry(e.cell))&&(i.width=Math.max(0,e.text.margin.x*t.width*n-e.text.spacingLeft*n-e.text.spacingRight*n),i.height=Math.max(0,e.text.margin.y*t.height*n-e.text.spacingTop*n-e.text.spacingBottom*n))):(e.text.isPaintBoundsInverted()&&(a=i.x,i.x=i.y,i.y=a),i.x+=e.x,i.y+=e.y,i.width=Math.max(1,e.width),i.height=Math.max(1,e.height),t.isSwimlane(e.cell)&&(0<(t=t.getStartSize(e.cell)).width?(a=Math.min(i.width,t.width*n),e.shape.flipH&&(i.x+=i.width-a),i.width=a):0<t.height&&(a=Math.min(i.height,t.height*n),e.shape.flipV&&(i.y+=i.height-a),i.height=a)),this.rotateLabelBounds(e,i)),i},mxCellRenderer.prototype.rotateLabelBounds=function(e,t){if(e.text.isPaintBoundsInverted()){var n=(e.width-e.height)/2;t.x+=n,t.y-=n,n=t.width,t.width=t.height,t.height=n}if(t.x-=e.text.margin.x*t.width,t.y-=e.text.margin.y*t.height,"fill"!=e.style[mxConstants.STYLE_OVERFLOW]){n=e.view.scale;var a=e.text.getSpacing();t.x+=a.x*n,t.y+=a.y*n,t.width=Math.max(0,t.width-e.text.spacingLeft*n-e.text.spacingRight*n),t.height=Math.max(0,t.height-e.text.spacingTop*n-e.text.spacingBottom*n)}var i=e.text.getTextRotation();0!=i&&null!=e&&e.view.graph.model.isVertex(e.cell)&&(n=e.getCenterX(),a=e.getCenterY(),t.x!=n||t.y!=a)&&(i*=Math.PI/180,pt=mxUtils.getRotatedPoint(new mxPoint(t.x,t.y),Math.cos(i),Math.sin(i),new mxPoint(n,a)),t.x=pt.x,t.y=pt.y)},mxCellRenderer.prototype.redrawCellOverlays=function(s,o){if(this.createCellOverlays(s),null!=s.overlays){var r=mxUtils.mod(mxUtils.getValue(s.style,mxConstants.STYLE_ROTATION,0),90),e=mxUtils.toRadians(r),l=Math.cos(e),d=Math.sin(e);s.overlays.visit(function(e,t){var n=t.overlay.getBounds(s);if(!s.view.graph.getModel().isEdge(s.cell)&&null!=s.shape&&0!=r){var a=n.getCenterX(),i=n.getCenterY();a=(i=mxUtils.getRotatedPoint(new mxPoint(a,i),l,d,new mxPoint(s.getCenterX(),s.getCenterY()))).x,i=i.y;n.x=Math.round(a-n.width/2),n.y=Math.round(i-n.height/2)}!o&&null!=t.bounds&&t.scale==s.view.scale&&t.bounds.equals(n)||(t.bounds=n,t.scale=s.view.scale,t.redraw())})}},mxCellRenderer.prototype.redrawControl=function(e,t){if(null!=e.control){var n=this.getControlBounds(e),a=this.legacyControlPosition?mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION,0):e.shape.getTextRotation(),i=e.view.scale;!t&&e.control.scale==i&&e.control.bounds.equals(n)&&e.control.rotation==a||(e.control.rotation=a,e.control.bounds=n,e.control.scale=i,e.control.redraw())}},mxCellRenderer.prototype.getControlBounds=function(e){if(null==e.control)return null;var t=e.control.scale,n=e.control.bounds.width/t,a=(t=e.control.bounds.height/t,e.view.scale),i=e.getCenterX(),s=e.getCenterY();if(!e.view.graph.getModel().isEdge(e.cell)&&(i=e.x+n*a,s=e.y+t*a,null!=e.shape)){var o=e.shape.getShapeRotation();if(this.legacyControlPosition)o=mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION,0);else if(e.shape.isPaintBoundsInverted()){var r=(e.width-e.height)/2;i=i+r,s=s-r}0!=o&&(r=mxUtils.toRadians(o),o=Math.cos(r),r=Math.sin(r),i=(s=mxUtils.getRotatedPoint(new mxPoint(i,s),o,r,new mxPoint(e.getCenterX(),e.getCenterY()))).x,s=s.y)}return e.view.graph.getModel().isEdge(e.cell),new mxRectangle(Math.round(i-n/2*a),Math.round(s-t/2*a),Math.round(n*a),Math.round(t*a))},mxCellRenderer.prototype.redraw=function(e,t,n){if(null!=e.shape){var a=!1;e.view.graph.getModel().isEdge(e.cell),reconfigure=null!=t&&t,this.createControl(e),(e.orderChanged||e.invalidOrder)&&(e.view.graph.ordered?this.order(e):this.orderEdge(e)),!e.orderChanged&&mxUtils.equalEntries(e.shape.style,e.style)||(this.configureShape(e),t=!0),delete e.invalidOrder,delete e.orderChanged,!t&&null!=e.shape.bounds&&e.shape.scale==e.view.scale&&e.shape.bounds.equals(e)&&mxUtils.equalPoints(e.shape.points,e.absolutePoints)||(a=!0,e.shape.points=null!=e.absolutePoints?e.absolutePoints.slice():null,e.shape.bounds=new mxRectangle(e.x,e.y,e.width,e.height),e.shape.scale=e.view.scale,null==n||n?e.shape.redraw():e.shape.updateBoundingBox()),(null==n||n)&&(this.redrawLabel(e,a),this.redrawCellOverlays(e,a),this.redrawControl(e,a))}},mxCellRenderer.prototype.destroy=function(e){null!=e.shape&&(null!=e.text&&(e.text.destroy(),e.text=null),null!=e.overlays&&(e.overlays.visit(function(e,t){t.destroy()}),e.overlays=null),null!=e.control&&(e.control.destroy(),e.control=null),e.shape.destroy(),e.shape=null)};var mxEdgeStyle={EntityRelation:function(e,t,n,a,i){var s=e.view,o=s.graph;a=mxUtils.getValue(e.style,mxConstants.STYLE_SEGMENT,mxConstants.ENTITY_SEGMENT)*s.scale;var r=(d=e.absolutePoints)[0],l=d[d.length-1],d=!1;if(null!=r)(t=new mxCellState).x=r.x,t.y=r.y;else{if(null==t)return;var c=mxUtils.getPortConstraints(t,e,!0,mxConstants.DIRECTION_MASK_NONE);c!=mxConstants.DIRECTION_MASK_NONE?d=c==mxConstants.DIRECTION_MASK_WEST:(r=o.getCellGeometry(t.cell)).relative?d=r.x<=.5:null!=n&&(d=n.x+n.width<t.x)}r=!0,null!=l?((n=new mxCellState).x=l.x,n.y=l.y):null!=n&&((c=mxUtils.getPortConstraints(n,e,!1,mxConstants.DIRECTION_MASK_NONE))!=mxConstants.DIRECTION_MASK_NONE?r=c==mxConstants.DIRECTION_MASK_WEST:(e=o.getCellGeometry(n.cell)).relative?r=e.x<=.5:null!=t&&(r=t.x+t.width<n.x)),null!=t&&null!=n&&(e=d?t.x:t.x+t.width,t=s.getRoutingCenterY(t),o=r?n.x:n.x+n.width,n=s.getRoutingCenterY(n),s=new mxPoint(e+(d?-a:a),t),l=new mxPoint(o+(r?-a:a),n),d==r?(a=d?Math.min(e,o)-a:Math.max(e,o)+a,i.push(new mxPoint(a,t)),i.push(new mxPoint(a,n))):(s.x<l.x==d?(a=t+(n-t)/2,i.push(s),i.push(new mxPoint(s.x,a)),i.push(new mxPoint(l.x,a))):i.push(s),i.push(l)))},Loop:function(e,t,n,a,i){if(null!=t){var s=(n=e.view).graph;null!=(a=null!=a&&0<a.length?a[0]:null)&&(a=n.transformControlPoint(e,a),mxUtils.contains(t,a.x,a.y)&&(a=null));var o=0,r=0,l=0,d=0;s=mxUtils.getValue(e.style,mxConstants.STYLE_SEGMENT,s.gridSize)*n.scale;(e=mxUtils.getValue(e.style,mxConstants.STYLE_DIRECTION,mxConstants.DIRECTION_WEST))==mxConstants.DIRECTION_NORTH||e==mxConstants.DIRECTION_SOUTH?(o=n.getRoutingCenterX(t),r=s):(l=n.getRoutingCenterY(t),d=s),null==a||a.x<t.x||a.x>t.x+t.width?null!=a?(o=a.x,d=Math.max(Math.abs(l-a.y),d)):e==mxConstants.DIRECTION_NORTH?l=t.y-2*r:e==mxConstants.DIRECTION_SOUTH?l=t.y+t.height+2*r:o=e==mxConstants.DIRECTION_EAST?t.x-2*d:t.x+t.width+2*d:null!=a&&(o=n.getRoutingCenterX(t),r=Math.max(Math.abs(o-a.x),d),l=a.y,d=0),i.push(new mxPoint(o-r,l-d)),i.push(new mxPoint(o+r,l+d))}},ElbowConnector:function(e,t,n,a,i){var s=null!=a&&0<a.length?a[0]:null,o=!1,r=!1;if(null!=t&&null!=n)if(null!=s){var l=Math.min(t.x,n.x),d=Math.max(t.x+t.width,n.x+n.width),c=(r=Math.min(t.y,n.y),Math.max(t.y+t.height,n.y+n.height));o=(s=e.view.transformControlPoint(e,s)).y<r||s.y>c,r=s.x<l||s.x>d}else(o=(l=Math.max(t.x,n.x))==(d=Math.min(t.x+t.width,n.x+n.width)))||(r=(r=Math.max(t.y,n.y))==(c=Math.min(t.y+t.height,n.y+n.height)));r||!o&&e.style[mxConstants.STYLE_ELBOW]!=mxConstants.ELBOW_VERTICAL?mxEdgeStyle.SideToSide(e,t,n,a,i):mxEdgeStyle.TopToBottom(e,t,n,a,i)},SideToSide:function(e,t,n,a,i){var s=e.view;a=null!=a&&0<a.length?a[0]:null;var o=(r=e.absolutePoints)[0],r=r[r.length-1];null!=a&&(a=s.transformControlPoint(e,a)),null!=o&&((t=new mxCellState).x=o.x,t.y=o.y),null!=r&&((n=new mxCellState).x=r.x,n.y=r.y),null!=t&&null!=n&&(e=Math.max(t.x,n.x),o=Math.min(t.x+t.width,n.x+n.width),e=null!=a?a.x:o+(e-o)/2,o=s.getRoutingCenterY(t),s=s.getRoutingCenterY(n),null!=a&&(a.y>=t.y&&a.y<=t.y+t.height&&(o=a.y),a.y>=n.y&&a.y<=n.y+n.height&&(s=a.y)),!mxUtils.contains(n,e,o)&&!mxUtils.contains(t,e,o)&&i.push(new mxPoint(e,o)),!mxUtils.contains(n,e,s)&&!mxUtils.contains(t,e,s)&&i.push(new mxPoint(e,s)),1==i.length&&(null!=a?!mxUtils.contains(n,e,a.y)&&!mxUtils.contains(t,e,a.y)&&i.push(new mxPoint(e,a.y)):(s=Math.max(t.y,n.y),t=Math.min(t.y+t.height,n.y+n.height),i.push(new mxPoint(e,s+(t-s)/2)))))},TopToBottom:function(e,t,n,a,i){var s=e.view;a=null!=a&&0<a.length?a[0]:null;var o=(r=e.absolutePoints)[0],r=r[r.length-1];null!=a&&(a=s.transformControlPoint(e,a)),null!=o&&((t=new mxCellState).x=o.x,t.y=o.y),null!=r&&((n=new mxCellState).x=r.x,n.y=r.y),null!=t&&null!=n&&(o=Math.max(t.y,n.y),r=Math.min(t.y+t.height,n.y+n.height),e=s.getRoutingCenterX(t),null!=a&&a.x>=t.x&&a.x<=t.x+t.width&&(e=a.x),o=null!=a?a.y:r+(o-r)/2,!mxUtils.contains(n,e,o)&&!mxUtils.contains(t,e,o)&&i.push(new mxPoint(e,o)),e=null!=a&&a.x>=n.x&&a.x<=n.x+n.width?a.x:s.getRoutingCenterX(n),!mxUtils.contains(n,e,o)&&!mxUtils.contains(t,e,o)&&i.push(new mxPoint(e,o)),1==i.length&&(null!=a&&1==i.length?!mxUtils.contains(n,a.x,o)&&!mxUtils.contains(t,a.x,o)&&i.push(new mxPoint(a.x,o)):(s=Math.max(t.x,n.x),t=Math.min(t.x+t.width,n.x+n.width),i.push(new mxPoint(s+(t-s)/2,o)))))},SegmentConnector:function(e,t,n,a,i){var s=e.absolutePoints,o=!0,r=null,l=s[0];null==l&&null!=t?l=new mxPoint(e.view.getRoutingCenterX(t),e.view.getRoutingCenterY(t)):null!=l&&(l=l.clone());var d=s.length-1;if(null!=a&&0<a.length){r=e.view.transformControlPoint(e,a[0]);for(var c=t,m=s[0],u=!1,p=!1,g=(u=r,a.length),v=0;v<2;v++){var h=null!=m&&m.x==u.x,f=null!=m&&m.y==u.y,b=null!=c&&u.y>=c.y&&u.y<=c.y+c.height;c=null!=c&&u.x>=c.x&&u.x<=c.x+c.width,u=f||null==m&&b,p=h||null==m&&c;if(null!=m&&!f&&!h&&(b||c)){o=!b;break}if(p||u){o=u,1==v&&(o=0==a.length%2?u:p);break}c=n,m=s[d],u=e.view.transformControlPoint(e,a[g-1])}for(o&&(null!=s[0]&&s[0].y!=r.y||null==s[0]&&null!=t&&(r.y<t.y||r.y>t.y+t.height))?i.push(new mxPoint(l.x,r.y)):!o&&(null!=s[0]&&s[0].x!=r.x||null==s[0]&&null!=t&&(r.x<t.x||r.x>t.x+t.width))&&i.push(new mxPoint(r.x,l.y)),o?l.y=r.y:l.x=r.x,v=0;v<a.length;v++)o=!o,r=e.view.transformControlPoint(e,a[v]),o?l.y=r.y:l.x=r.x,i.push(l.clone())}else r=l,o=!0;if(null==(l=s[d])&&null!=n&&(l=new mxPoint(e.view.getRoutingCenterX(n),e.view.getRoutingCenterY(n))),o&&(null!=s[d]&&s[d].y!=r.y||null==s[d]&&null!=n&&(r.y<n.y||r.y>n.y+n.height))?i.push(new mxPoint(l.x,r.y)):!o&&(null!=s[d]&&s[d].x!=r.x||null==s[d]&&null!=n&&(r.x<n.x||r.x>n.x+n.width))&&i.push(new mxPoint(r.x,l.y)),null==s[0]&&null!=t)for(;1<i.length&&mxUtils.contains(t,i[1].x,i[1].y);)i=i.splice(1,1);if(null==s[d]&&null!=n)for(;1<i.length&&mxUtils.contains(n,i[i.length-1].x,i[i.length-1].y);)i=i.splice(i.length-1,1)},orthBuffer:10,dirVectors:[[-1,0],[0,-1],[1,0],[0,1],[-1,0],[0,-1],[1,0]],wayPoints1:[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],routePatterns:[[[513,2308,2081,2562],[513,1090,514,2184,2114,2561],[513,1090,514,2564,2184,2562],[513,2308,2561,1090,514,2568,2308]],[[514,1057,513,2308,2081,2562],[514,2184,2114,2561],[514,2184,2562,1057,513,2564,2184],[514,1057,513,2568,2308,2561]],[[1090,514,1057,513,2308,2081,2562],[2114,2561],[1090,2562,1057,513,2564,2184],[1090,514,1057,513,2308,2561,2568]],[[2081,2562],[1057,513,1090,514,2184,2114,2561],[1057,513,1090,514,2184,2562,2564],[1057,2561,1090,514,2568,2308]]],inlineRoutePatterns:[[null,[2114,2568],null,null],[null,[514,2081,2114,2568],null,null],[null,[2114,2561],null,null],[[2081,2562],[1057,2114,2568],[2184,2562],null]],vertexSeperations:[],limits:[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]],LEFT_MASK:32,TOP_MASK:64,RIGHT_MASK:128,BOTTOM_MASK:256,LEFT:1,TOP:2,RIGHT:4,BOTTOM:8,SIDE_MASK:480,CENTER_MASK:512,SOURCE_MASK:1024,TARGET_MASK:2048,VERTEX_MASK:3072,OrthConnector:function(e,t,n,a,i){var s=e.view.graph,o=null!=t&&s.getModel().isEdge(t.cell);s=null!=n&&s.getModel().isEdge(n.cell);if(null!=a&&0<a.length||o||s)mxEdgeStyle.SegmentConnector(e,t,n,a,i);else{var r=(a=e.absolutePoints)[0],l=a[a.length-1];a=null!=t?t.x:r.x;o=null!=t?t.y:r.y;var d=null!=t?t.width:1,c=null!=t?t.height:1,m=null!=n?n.x:l.x,u=null!=n?n.y:l.y,p=null!=n?n.width:1,g=null!=n?n.height:1,v=(s=e.view.scale*mxEdgeStyle.orthBuffer,[mxConstants.DIRECTION_MASK_ALL,mxConstants.DIRECTION_MASK_ALL]);for(null!=t&&(v[0]=mxUtils.getPortConstraints(t,e,!0,mxConstants.DIRECTION_MASK_ALL)),null!=n&&(v[1]=mxUtils.getPortConstraints(n,e,!1,mxConstants.DIRECTION_MASK_ALL)),e=[0,0],a=[[a,o,d,c],[m,u,p,g]],d=0;d<2;d++)mxEdgeStyle.limits[d][1]=a[d][0]-s,mxEdgeStyle.limits[d][2]=a[d][1]-s,mxEdgeStyle.limits[d][4]=a[d][0]+a[d][2]+s,mxEdgeStyle.limits[d][8]=a[d][1]+a[d][3]+s;for(d=a[0][0]+a[0][2]/2-(a[1][0]+a[1][2]/2),c=a[0][1]+a[0][3]/2-(a[1][1]+a[1][3]/2),d<(o=0)?o=c<0?2:1:c<=0&&(o=3,0==d&&(o=2)),(c=null)!=t&&(c=r),t=[[.5,.5],[.5,.5]],d=0;d<2;d++)null!=c&&(t[d][0]=(c.x-a[d][0])/a[d][2],t[d][0]<.01?e[d]=mxConstants.DIRECTION_MASK_WEST:.99<t[d][0]&&(e[d]=mxConstants.DIRECTION_MASK_EAST),t[d][1]=(c.y-a[d][1])/a[d][3],t[d][1]<.01?e[d]=mxConstants.DIRECTION_MASK_NORTH:.99<t[d][1]&&(e[d]=mxConstants.DIRECTION_MASK_SOUTH)),(c=null)!=n&&(c=l);for(d=a[0][1]-(a[1][1]+a[1][3]),c=a[0][0]-(a[1][0]+a[1][2]),m=a[1][1]-(a[0][1]+a[0][3]),u=a[1][0]-(a[0][0]+a[0][2]),mxEdgeStyle.vertexSeperations[1]=Math.max(c-2*s,0),mxEdgeStyle.vertexSeperations[2]=Math.max(d-2*s,0),mxEdgeStyle.vertexSeperations[4]=Math.max(m-2*s,0),mxEdgeStyle.vertexSeperations[3]=Math.max(u-2*s,0),n=[],l=[],(r=[])[0]=u<=c?mxConstants.DIRECTION_MASK_WEST:mxConstants.DIRECTION_MASK_EAST,l[0]=m<=d?mxConstants.DIRECTION_MASK_NORTH:mxConstants.DIRECTION_MASK_SOUTH,r[1]=mxUtils.reversePortConstraints(r[0]),l[1]=mxUtils.reversePortConstraints(l[0]),c=u<=c?c:u,m=m<=d?d:m,p=!(u=[[0,0],[0,0]]),d=0;d<2;d++)0==e[d]&&(0==(r[d]&v[d])&&(r[d]=mxUtils.reversePortConstraints(r[d])),0==(l[d]&v[d])&&(l[d]=mxUtils.reversePortConstraints(l[d])),u[d][0]=l[d],u[d][1]=r[d]);for(2*s<m&&2*s<c&&(0<(r[0]&v[0])&&0<(l[1]&v[1])?(u[0][0]=r[0],u[0][1]=l[0],u[1][0]=l[1],u[1][1]=r[1],p=!0):0<(l[0]&v[0])&&0<(r[1]&v[1])&&(u[0][0]=l[0],u[0][1]=r[0],u[1][0]=r[1],u[1][1]=l[1],p=!0)),2*s<m&&!p&&(u[0][0]=l[0],u[0][1]=r[0],u[1][0]=l[1],u[1][1]=r[1],p=!0),2*s<c&&!p&&(u[0][0]=r[0],u[0][1]=l[0],u[1][0]=r[1],u[1][1]=l[1]),d=0;d<2;d++)0==e[d]&&(0==(u[d][0]&v[d])&&(u[d][0]=u[d][1]),n[d]=u[d][0]&v[d],n[d]|=(u[d][1]&v[d])<<8,n[d]|=(u[1-d][d]&v[d])<<16,n[d]|=(u[1-d][1-d]&v[d])<<24,0==(15&n[d])&&(n[d]<<=8),0==(3840&n[d])&&(n[d]=15&n[d]|n[d]>>8),0==(983040&n[d])&&(n[d]=65535&n[d]|(251658240&n[d])>>8),e[d]=15&n[d],v[d]==mxConstants.DIRECTION_MASK_WEST||v[d]==mxConstants.DIRECTION_MASK_NORTH||v[d]==mxConstants.DIRECTION_MASK_EAST||v[d]==mxConstants.DIRECTION_MASK_SOUTH)&&(e[d]=v[d]);switch(d=e[0]==mxConstants.DIRECTION_MASK_EAST?3:e[0],v=e[1]==mxConstants.DIRECTION_MASK_EAST?3:e[1],(d-=o)<1&&(d+=4),(v-=o)<1&&(v+=4),v=mxEdgeStyle.routePatterns[d-1][v-1],mxEdgeStyle.wayPoints1[0][0]=a[0][0],mxEdgeStyle.wayPoints1[0][1]=a[0][1],e[0]){case mxConstants.DIRECTION_MASK_WEST:mxEdgeStyle.wayPoints1[0][0]-=s,mxEdgeStyle.wayPoints1[0][1]+=t[0][1]*a[0][3];break;case mxConstants.DIRECTION_MASK_SOUTH:mxEdgeStyle.wayPoints1[0][0]+=t[0][0]*a[0][2],mxEdgeStyle.wayPoints1[0][1]+=a[0][3]+s;break;case mxConstants.DIRECTION_MASK_EAST:mxEdgeStyle.wayPoints1[0][0]+=a[0][2]+s,mxEdgeStyle.wayPoints1[0][1]+=t[0][1]*a[0][3];break;case mxConstants.DIRECTION_MASK_NORTH:mxEdgeStyle.wayPoints1[0][0]+=t[0][0]*a[0][2],mxEdgeStyle.wayPoints1[0][1]-=s}for(r=n=(s=0)<(e[0]&(mxConstants.DIRECTION_MASK_EAST|mxConstants.DIRECTION_MASK_WEST))?0:1,d=l=0;d<v.length;d++){g=(l=15&v[d])==mxConstants.DIRECTION_MASK_EAST?3:l,4<(g+=o)&&(g-=4),c=mxEdgeStyle.dirVectors[g-1],(l=0<g%2?0:1)!=n&&(s++,mxEdgeStyle.wayPoints1[s][0]=mxEdgeStyle.wayPoints1[s-1][0],mxEdgeStyle.wayPoints1[s][1]=mxEdgeStyle.wayPoints1[s-1][1]);var h=0<(v[d]&mxEdgeStyle.TARGET_MASK);p=0<(v[d]&mxEdgeStyle.SOURCE_MASK);15<(m=(m=(v[d]&mxEdgeStyle.SIDE_MASK)>>5)<<o)&&(m>>=4),u=0<(v[d]&mxEdgeStyle.CENTER_MASK),(p||h)&&m<9?(g=0,p=p?0:1,g=u&&0==l?a[p][0]+t[p][0]*a[p][2]:u?a[p][1]+t[p][1]*a[p][3]:mxEdgeStyle.limits[p][m],0==l?0<(m=(g-mxEdgeStyle.wayPoints1[s][0])*c[0])&&(mxEdgeStyle.wayPoints1[s][0]+=c[0]*m):0<(m=(g-mxEdgeStyle.wayPoints1[s][1])*c[1])&&(mxEdgeStyle.wayPoints1[s][1]+=c[1]*m)):u&&(mxEdgeStyle.wayPoints1[s][0]+=c[0]*Math.abs(mxEdgeStyle.vertexSeperations[g]/2),mxEdgeStyle.wayPoints1[s][1]+=c[1]*Math.abs(mxEdgeStyle.vertexSeperations[g]/2)),0<s&&mxEdgeStyle.wayPoints1[s][l]==mxEdgeStyle.wayPoints1[s-1][l]?s--:n=l}for(d=0;d<=s&&(d!=s||((0<(e[1]&(mxConstants.DIRECTION_MASK_EAST|mxConstants.DIRECTION_MASK_WEST))?0:1)==r?0:1)==(s+1)%2);d++)i.push(new mxPoint(mxEdgeStyle.wayPoints1[d][0],mxEdgeStyle.wayPoints1[d][1]))}},getRoutePattern:function(e,t,n,a){var i=e[0]==mxConstants.DIRECTION_MASK_EAST?3:e[0];return e=e[1]==mxConstants.DIRECTION_MASK_EAST?3:e[1],(i-=t)<1&&(i+=4),(e-=t)<1&&(e+=4),t=routePatterns[i-1][e-1],0!=n&&0!=a||null!=inlineRoutePatterns[i-1][e-1]&&(t=inlineRoutePatterns[i-1][e-1]),t}},mxStyleRegistry={values:[],putValue:function(e,t){mxStyleRegistry.values[e]=t},getValue:function(e){return mxStyleRegistry.values[e]},getName:function(e){for(var t in mxStyleRegistry.values)if(mxStyleRegistry.values[t]==e)return t;return null}};function mxGraphView(e){this.graph=e,this.translate=new mxPoint,this.graphBounds=new mxRectangle,this.states=new mxDictionary}function mxCurrentRootChange(e,t){if(this.view=e,this.previous=this.root=t,this.isUp=null==t,!this.isUp)for(var n=this.view.currentRoot,a=this.view.graph.getModel();null!=n;){if(n==t){this.isUp=!0;break}n=a.getParent(n)}}function mxGraph(e,t,n,a){this.mouseListeners=null,this.renderHint=n,this.dialect=mxClient.IS_SVG?mxConstants.DIALECT_SVG:n==mxConstants.RENDERING_HINT_EXACT&&mxClient.IS_VML?mxConstants.DIALECT_VML:n==mxConstants.RENDERING_HINT_FASTEST?mxConstants.DIALECT_STRICTHTML:n==mxConstants.RENDERING_HINT_FASTER?mxConstants.DIALECT_PREFERHTML:mxConstants.DIALECT_MIXEDHTML,this.model=null!=t?t:new mxGraphModel,this.multiplicities=[],this.imageBundles=[],this.cellRenderer=this.createCellRenderer(),this.setSelectionModel(this.createSelectionModel()),this.setStylesheet(null!=a?a:this.createStylesheet()),this.view=this.createGraphView(),this.graphModelChangeListener=mxUtils.bind(this,function(e,t){this.graphModelChanged(t.getProperty("edit").changes)}),this.model.addListener(mxEvent.CHANGE,this.graphModelChangeListener),this.createHandlers(),null!=e&&this.init(e),this.view.revalidate()}function mxCellOverlay(e,t,n,a,i,s){this.image=e,this.tooltip=t,this.align=null!=n?n:this.align,this.verticalAlign=null!=a?a:this.verticalAlign,this.offset=null!=i?i:new mxPoint,this.cursor=null!=s?s:"help"}function mxOutline(e,t){this.source=e,null!=t&&this.init(t)}function mxMultiplicity(e,t,n,a,i,s,o,r,l,d){this.source=e,this.type=t,this.attr=n,this.value=a,this.min=null!=i?i:0,this.max=null!=s?s:"n",this.validNeighbors=o,this.countError=mxResources.get(r)||r,this.typeError=mxResources.get(l)||l,this.validNeighborsAllowed=null==d||d}function mxLayoutManager(e){this.undoHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.beforeUndo(t.getProperty("edit"))}),this.moveHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.cellsMoved(t.getProperty("cells"),t.getProperty("event"))}),this.setGraph(e)}function mxSpaceManager(e,t,n,a){this.resizeHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.cellsResized(t.getProperty("cells"))}),this.foldHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.cellsResized(t.getProperty("cells"))}),this.shiftRightwards=null==t||t,this.shiftDownwards=null==n||n,this.extendParents=null==a||a,this.setGraph(e)}function mxSwimlaneManager(e,t,n,a){this.horizontal=null==t||t,this.addEnabled=null==n||n,this.resizeEnabled=null==a||a,this.addHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.isAddEnabled()&&this.cellsAdded(t.getProperty("cells"))}),this.resizeHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.isResizeEnabled()&&this.cellsResized(t.getProperty("cells"))}),this.setGraph(e)}function mxTemporaryCellStates(e,t,n){if(this.view=e,t=null!=t?t:1,this.oldBounds=e.getGraphBounds(),this.oldStates=e.getStates(),this.oldScale=e.getScale(),e.setStates(new mxDictionary),e.setScale(t),null!=n){t=e.createState(new mxCell);for(var a=0;a<n.length;a++)e.validateBounds(t,n[a]);var i=null;for(a=0;a<n.length;a++){var s=e.validatePoints(t,n[a]);null==i?i=s:i.add(s)}null==i&&(i=new mxRectangle),e.setGraphBounds(i)}}function mxCellStatePreview(e){this.graph=e,this.deltas={}}function mxConnectionConstraint(e,t){this.point=e,this.perimeter=null==t||t}function mxGraphHandler(e){this.graph=e,this.graph.addMouseListener(this),this.panHandler=mxUtils.bind(this,function(){this.updatePreviewShape()}),this.graph.addListener(mxEvent.PAN,this.panHandler)}function mxPanningHandler(e,t){null!=e&&(this.graph=e,this.factoryMethod=t,this.graph.addMouseListener(this),this.init())}function mxCellMarker(e,t,n,a){mxEventSource.call(this),null!=e&&(this.graph=e,this.validColor=null!=t?t:mxConstants.DEFAULT_VALID_COLOR,this.invalidColor=null!=t?n:mxConstants.DEFAULT_INVALID_COLOR,this.hotspot=null!=a?a:mxConstants.DEFAULT_HOTSPOT,this.highlight=new mxCellHighlight(e))}function mxSelectionCellsHandler(e){mxEventSource.call(this),this.graph=e,this.handlers=new mxDictionary,this.graph.addMouseListener(this),this.refreshHandler=mxUtils.bind(this,function(e,t){this.isEnabled()&&this.refresh()}),this.graph.getSelectionModel().addListener(mxEvent.CHANGE,this.refreshHandler),this.graph.getModel().addListener(mxEvent.CHANGE,this.refreshHandler),this.graph.getView().addListener(mxEvent.SCALE,this.refreshHandler),this.graph.getView().addListener(mxEvent.TRANSLATE,this.refreshHandler),this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE,this.refreshHandler),this.graph.getView().addListener(mxEvent.DOWN,this.refreshHandler),this.graph.getView().addListener(mxEvent.UP,this.refreshHandler)}function mxConnectionHandler(e,t){mxEventSource.call(this),null!=e&&(this.graph=e,this.factoryMethod=t,this.init())}function mxConstraintHandler(e){this.graph=e}function mxRubberband(e){null!=e&&(this.graph=e,this.graph.addMouseListener(this),this.panHandler=mxUtils.bind(this,function(){this.repaint()}),this.graph.addListener(mxEvent.PAN,this.panHandler),mxClient.IS_IE&&mxEvent.addListener(window,"unload",mxUtils.bind(this,function(){this.destroy()})))}function mxVertexHandler(e){null!=e&&(this.state=e,this.init())}function mxEdgeHandler(e){null!=e&&(this.state=e,this.init())}function mxElbowEdgeHandler(e){mxEdgeHandler.call(this,e)}function mxEdgeSegmentHandler(e){mxEdgeHandler.call(this,e)}function mxKeyHandler(e,t){null!=e&&(this.graph=e,this.target=t||document.documentElement,this.normalKeys=[],this.shiftKeys=[],this.controlKeys=[],this.controlShiftKeys=[],mxEvent.addListener(this.target,"keydown",mxUtils.bind(this,function(e){this.keyDown(e)})),mxClient.IS_IE&&mxEvent.addListener(window,"unload",mxUtils.bind(this,function(){this.destroy()})))}function mxTooltipHandler(e,t){null!=e&&(this.graph=e,this.delay=t||500,this.graph.addMouseListener(this))}function mxCellTracker(e,t,n){mxCellMarker.call(this,e,t),this.graph.addMouseListener(this),null!=n&&(this.getCell=n),mxClient.IS_IE&&mxEvent.addListener(window,"unload",mxUtils.bind(this,function(){this.destroy()}))}function mxCellHighlight(e,t,n,a){null!=e&&(this.graph=e,this.highlightColor=null!=t?t:mxConstants.DEFAULT_VALID_COLOR,this.strokeWidth=null!=n?n:mxConstants.HIGHLIGHT_STROKEWIDTH,this.dashed=null!=a&&a,this.repaintHandler=mxUtils.bind(this,function(){this.repaint()}),this.graph.getView().addListener(mxEvent.SCALE,this.repaintHandler),this.graph.getView().addListener(mxEvent.TRANSLATE,this.repaintHandler),this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE,this.repaintHandler),this.graph.getModel().addListener(mxEvent.CHANGE,this.repaintHandler),this.resetHandler=mxUtils.bind(this,function(){this.hide()}),this.graph.getView().addListener(mxEvent.DOWN,this.resetHandler),this.graph.getView().addListener(mxEvent.UP,this.resetHandler))}function mxDefaultKeyHandler(t){if(null!=t){this.editor=t,this.handler=new mxKeyHandler(t.graph);var n=this.handler.escape;this.handler.escape=function(e){n.apply(this,arguments),t.hideProperties(),t.fireEvent(new mxEventObject(mxEvent.ESCAPE,"event",e))}}}function mxDefaultPopupMenu(e){this.config=e}function mxDefaultToolbar(e,t){this.editor=t,null!=e&&null!=t&&this.init(e)}function mxEditor(e){this.actions=[],this.addActions(),null!=document.body&&(this.cycleAttributeValues=[],this.popupHandler=new mxDefaultPopupMenu,this.undoManager=new mxUndoManager,this.graph=this.createGraph(),this.toolbar=this.createToolbar(),this.keyHandler=new mxDefaultKeyHandler(this),this.configure(e),this.graph.swimlaneIndicatorColorAttribute=this.cycleAttributeName,!mxClient.IS_LOCAL&&null!=this.urlInit&&(this.session=this.createSession()),null!=this.onInit&&this.onInit(),mxClient.IS_IE&&mxEvent.addListener(window,"unload",mxUtils.bind(this,function(){this.destroy()})))}mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ELBOW,mxEdgeStyle.ElbowConnector),mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ENTITY_RELATION,mxEdgeStyle.EntityRelation),mxStyleRegistry.putValue(mxConstants.EDGESTYLE_LOOP,mxEdgeStyle.Loop),mxStyleRegistry.putValue(mxConstants.EDGESTYLE_SIDETOSIDE,mxEdgeStyle.SideToSide),mxStyleRegistry.putValue(mxConstants.EDGESTYLE_TOPTOBOTTOM,mxEdgeStyle.TopToBottom),mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ORTHOGONAL,mxEdgeStyle.OrthConnector),mxStyleRegistry.putValue(mxConstants.EDGESTYLE_SEGMENT,mxEdgeStyle.SegmentConnector),mxStyleRegistry.putValue(mxConstants.PERIMETER_ELLIPSE,mxPerimeter.EllipsePerimeter),mxStyleRegistry.putValue(mxConstants.PERIMETER_RECTANGLE,mxPerimeter.RectanglePerimeter),mxStyleRegistry.putValue(mxConstants.PERIMETER_RHOMBUS,mxPerimeter.RhombusPerimeter),mxStyleRegistry.putValue(mxConstants.PERIMETER_TRIANGLE,mxPerimeter.TrianglePerimeter),mxGraphView.prototype=new mxEventSource,mxGraphView.prototype.constructor=mxGraphView,mxGraphView.prototype.EMPTY_POINT=new mxPoint,mxGraphView.prototype.doneResource="none"!=mxClient.language?"done":"",mxGraphView.prototype.updatingDocumentResource="none"!=mxClient.language?"updatingDocument":"",mxGraphView.prototype.allowEval=!1,mxGraphView.prototype.captureDocumentGesture=!0,mxGraphView.prototype.optimizeVmlReflows=!0,mxGraphView.prototype.rendering=!0,mxGraphView.prototype.graph=null,mxGraphView.prototype.currentRoot=null,mxGraphView.prototype.graphBounds=null,mxGraphView.prototype.scale=1,mxGraphView.prototype.translate=null,mxGraphView.prototype.updateStyle=!1,mxGraphView.prototype.getGraphBounds=function(){return this.graphBounds},mxGraphView.prototype.setGraphBounds=function(e){this.graphBounds=e},mxGraphView.prototype.getBounds=function(e){var t=null;if(null!=e&&0<e.length)for(var n=this.graph.getModel(),a=0;a<e.length;a++)if(n.isVertex(e[a])||n.isEdge(e[a])){var i=this.getState(e[a]);null!=i&&(null==t?t=new mxRectangle(i.x,i.y,i.width,i.height):t.add(i))}return t},mxGraphView.prototype.setCurrentRoot=function(e){if(this.currentRoot!=e){var t=new mxCurrentRootChange(this,e);t.execute();var n=new mxUndoableEdit(this,!1);n.add(t),this.fireEvent(new mxEventObject(mxEvent.UNDO,"edit",n)),this.graph.sizeDidChange()}return e},mxGraphView.prototype.scaleAndTranslate=function(e,t,n){var a=this.scale,i=new mxPoint(this.translate.x,this.translate.y);this.scale==e&&this.translate.x==t&&this.translate.y==n||(this.scale=e,this.translate.x=t,this.translate.y=n,this.isEventsEnabled()&&(this.revalidate(),this.graph.sizeDidChange())),this.fireEvent(new mxEventObject(mxEvent.SCALE_AND_TRANSLATE,"scale",e,"previousScale",a,"translate",this.translate,"previousTranslate",i))},mxGraphView.prototype.getScale=function(){return this.scale},mxGraphView.prototype.setScale=function(e){var t=this.scale;this.scale!=e&&(this.scale=e,this.isEventsEnabled()&&(this.revalidate(),this.graph.sizeDidChange())),this.fireEvent(new mxEventObject(mxEvent.SCALE,"scale",e,"previousScale",t))},mxGraphView.prototype.getTranslate=function(){return this.translate},mxGraphView.prototype.setTranslate=function(e,t){var n=new mxPoint(this.translate.x,this.translate.y);this.translate.x==e&&this.translate.y==t||(this.translate.x=e,this.translate.y=t,this.isEventsEnabled()&&(this.revalidate(),this.graph.sizeDidChange())),this.fireEvent(new mxEventObject(mxEvent.TRANSLATE,"translate",this.translate,"previousTranslate",n))},mxGraphView.prototype.refresh=function(){null!=this.currentRoot&&this.clear(),this.revalidate()},mxGraphView.prototype.revalidate=function(){this.invalidate(),this.validate()},mxGraphView.prototype.clear=function(e,t,n){var a=this.graph.getModel();if(e=e||a.getRoot(),t=null!=t&&t,n=null==n||n,this.removeState(e),n&&(t||e!=this.currentRoot)){n=a.getChildCount(e);for(var i=0;i<n;i++)this.clear(a.getChildAt(e,i),t)}else this.invalidate(e)},mxGraphView.prototype.invalidate=function(e,t,n,a){var i=this.graph.getModel();if(e=e||i.getRoot(),t=null==t||t,n=null==n||n,a=null!=a&&a,null!=(o=this.getState(e))&&(o.invalid=!0,a&&(o.orderChanged=!0)),t)for(var s=i.getChildCount(e),o=0;o<s;o++){var r=i.getChildAt(e,o);this.invalidate(r,t,n,a)}if(n)for(a=i.getEdgeCount(e),o=0;o<a;o++)this.invalidate(i.getEdgeAt(e,o),t,n)},mxGraphView.prototype.validate=function(e){var t=mxLog.enter("mxGraphView.validate");window.status=mxResources.get(this.updatingDocumentResource)||this.updatingDocumentResource;var n=null;if(this.optimizeVmlReflows&&null!=this.canvas&&null==this.textDiv&&(8==document.documentMode||mxClient.IS_QUIRKS)){n=this.canvas.style.display,this.canvas.style.display="none";var a=document.createElement("div");a.style.position="absolute",a.style.whiteSpace="nowrap",a.style.visibility="hidden",a.style.display=mxClient.IS_QUIRKS?"inline":"inline-block",a.style.zoom="1",document.body.appendChild(a),this.textDiv=a}e=e||(null!=this.currentRoot?this.currentRoot:this.graph.getModel().getRoot()),this.validateBounds(null,e),null==(e=this.validatePoints(null,e))&&(e=new mxRectangle),this.setGraphBounds(e),this.validateBackground(),null!=n&&(this.canvas.style.display=n,document.body.removeChild(this.textDiv),this.textDiv=null),window.status=mxResources.get(this.doneResource)||this.doneResource,mxLog.leave("mxGraphView.validate",t)},mxGraphView.prototype.createBackgroundPageShape=function(e){return new mxRectangleShape(e,"white","black")},mxGraphView.prototype.validateBackground=function(){var e=this.graph.getBackgroundImage();if(null!=e){if(null==this.backgroundImage||this.backgroundImage.image!=e.src){null!=this.backgroundImage&&this.backgroundImage.destroy();var t=new mxRectangle(0,0,1,1);this.backgroundImage=new mxImageShape(t,e.src),this.backgroundImage.dialect=this.graph.dialect,this.backgroundImage.init(this.backgroundPane),this.backgroundImage.redraw()}this.redrawBackgroundImage(this.backgroundImage,e)}else null!=this.backgroundImage&&(this.backgroundImage.destroy(),this.backgroundImage=null);this.graph.pageVisible?(t=this.getBackgroundPageBounds(),null==this.backgroundPageShape?(this.backgroundPageShape=this.createBackgroundPageShape(t),this.backgroundPageShape.scale=this.scale,this.backgroundPageShape.isShadow=!0,this.backgroundPageShape.dialect=this.graph.dialect,this.backgroundPageShape.init(this.backgroundPane),this.backgroundPageShape.redraw(),mxEvent.addListener(this.backgroundPageShape.node,"dblclick",mxUtils.bind(this,function(e){this.graph.dblClick(e)})),mxEvent.addGestureListeners(this.backgroundPageShape.node,mxUtils.bind(this,function(e){this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e))}),mxUtils.bind(this,function(e){null!=this.graph.tooltipHandler&&this.graph.tooltipHandler.isHideOnHover()&&this.graph.tooltipHandler.hide(),this.graph.isMouseDown&&!mxEvent.isConsumed(e)&&this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e))}),mxUtils.bind(this,function(e){this.graph.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e))}))):(this.backgroundPageShape.scale=this.scale,this.backgroundPageShape.bounds=t,this.backgroundPageShape.redraw())):null!=this.backgroundPageShape&&(this.backgroundPageShape.destroy(),this.backgroundPageShape=null)},mxGraphView.prototype.getBackgroundPageBounds=function(){var e=this.graph.pageFormat,t=this.scale*this.graph.pageScale;return new mxRectangle(this.scale*this.translate.x,this.scale*this.translate.y,e.width*t,e.height*t)},mxGraphView.prototype.redrawBackgroundImage=function(e,t){e.scale=this.scale,e.bounds.x=this.scale*this.translate.x,e.bounds.y=this.scale*this.translate.y,e.bounds.width=this.scale*t.width,e.bounds.height=this.scale*t.height,e.redraw()},mxGraphView.prototype.validateBounds=function(e,t){var n=this.graph.getModel(),a=this.getState(t,!0);if(null!=a&&a.invalid){if(this.graph.isCellVisible(t)){if(t!=this.currentRoot&&null!=e)if(a.absoluteOffset.x=0,a.absoluteOffset.y=0,a.origin.x=e.origin.x,a.origin.y=e.origin.y,null!=(s=this.graph.getCellGeometry(t))){if(!n.isEdge(t)){var i=s.offset||this.EMPTY_POINT;s.relative?(a.origin.x+=s.x*e.width/this.scale+i.x,a.origin.y+=s.y*e.height/this.scale+i.y):(a.absoluteOffset.x=this.scale*i.x,a.absoluteOffset.y=this.scale*i.y,a.origin.x+=s.x,a.origin.y+=s.y)}if(a.x=this.scale*(this.translate.x+a.origin.x),a.y=this.scale*(this.translate.y+a.origin.y),a.width=this.scale*s.width,a.height=this.scale*s.height,n.isVertex(t)){if(s.relative&&0!=(i=mxUtils.toRadians(e.style[mxConstants.STYLE_ROTATION]||"0"))){var s=Math.cos(i),o=(i=Math.sin(i),new mxPoint(a.getCenterX(),a.getCenterY())),r=new mxPoint(e.getCenterX(),e.getCenterY());s=mxUtils.getRotatedPoint(o,s,i,r);a.x=s.x-a.width/2,a.y=s.y-a.height/2}this.updateVertexLabelOffset(a)}}}else this.removeState(t);null!=(i=this.graph.getChildOffsetForCell(t))&&(a.origin.x+=i.x,a.origin.y+=i.y)}if(null!=a&&(!this.graph.isCellCollapsed(t)||t==this.currentRoot))for(s=n.getChildCount(t),i=0;i<s;i++)o=n.getChildAt(t,i),this.validateBounds(a,o)},mxGraphView.prototype.updateVertexLabelOffset=function(e){var t=mxUtils.getValue(e.style,mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER);t==mxConstants.ALIGN_LEFT?e.absoluteOffset.x-=e.width:t==mxConstants.ALIGN_RIGHT&&(e.absoluteOffset.x+=e.width),(t=mxUtils.getValue(e.style,mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE))==mxConstants.ALIGN_TOP?e.absoluteOffset.y-=e.height:t==mxConstants.ALIGN_BOTTOM&&(e.absoluteOffset.y+=e.height)},mxGraphView.prototype.validatePoints=function(e,t){var n=this.graph.getModel(),a=this.getState(t),i=null;if(null!=a){if(a.invalid){var s=this.graph.getCellGeometry(t);if(null!=s&&n.isEdge(t)){var o=this.getState(this.getVisibleTerminal(t,!0));if(a.setVisibleTerminalState(o,!0),null!=o&&n.isEdge(o.cell)&&!n.isAncestor(o.cell,t)){var r=this.getState(n.getParent(o.cell));this.validatePoints(r,o.cell)}var l=this.getState(this.getVisibleTerminal(t,!1));a.setVisibleTerminalState(l,!1),null!=l&&n.isEdge(l.cell)&&!n.isAncestor(l.cell,t)&&(r=this.getState(n.getParent(l.cell)),this.validatePoints(r,l.cell)),this.updateFixedTerminalPoints(a,o,l),this.updatePoints(a,s.points,o,l),this.updateFloatingTerminalPoints(a,o,l),this.updateEdgeBounds(a),this.updateEdgeLabelOffset(a)}else null!=s&&s.relative&&null!=e&&n.isEdge(e.cell)&&(null!=(s=this.getPoint(e,s))&&(a.x=s.x,a.y=s.y,s.x=s.x/this.scale-this.translate.x,s.y=s.y/this.scale-this.translate.y,a.origin=s,this.childMoved(e,a)));a.invalid=!1,t!=this.currentRoot&&this.graph.cellRenderer.redraw(a,!1,this.isRendering())}(n.isEdge(t)||n.isVertex(t))&&(null!=a.shape&&null!=a.shape.boundingBox&&(i=a.shape.boundingBox.clone()),null!=a.text&&!this.graph.isLabelClipped(a.cell)&&null!=a.text.boundingBox&&(null!=i?i.add(a.text.boundingBox):i=a.text.boundingBox.clone()))}if(null!=a&&(!this.graph.isCellCollapsed(t)||t==this.currentRoot))for(s=n.getChildCount(t),o=0;o<s;o++)r=n.getChildAt(t,o),null!=(r=this.validatePoints(a,r))&&(null==i?i=r:i.add(r));return i},mxGraphView.prototype.childMoved=function(e,t){var n=t.cell;if(!this.graph.isCellCollapsed(n)||n==this.currentRoot)for(var a=this.graph.getModel(),i=a.getChildCount(n),s=0;s<i;s++)this.validateBounds(t,a.getChildAt(n,s))},mxGraphView.prototype.updateFixedTerminalPoints=function(e,t,n){this.updateFixedTerminalPoint(e,t,!0,this.graph.getConnectionConstraint(e,t,!0)),this.updateFixedTerminalPoint(e,n,!1,this.graph.getConnectionConstraint(e,n,!1))},mxGraphView.prototype.updateFixedTerminalPoint=function(e,t,n,a){var i=null;if(null!=a&&(i=this.graph.getConnectionPoint(t,a)),null==i&&null==t){t=this.scale,a=this.translate;var s=e.origin;null!=(i=this.graph.getCellGeometry(e.cell).getTerminalPoint(n))&&(i=new mxPoint(t*(a.x+i.x+s.x),t*(a.y+i.y+s.y)))}e.setAbsoluteTerminalPoint(i,n)},mxGraphView.prototype.updatePoints=function(e,t,n,a){if(null!=e){var i=[];i.push(e.absolutePoints[0]);var s=this.getEdgeStyle(e,t,n,a);if(null!=s)s(e,n=this.getTerminalPort(e,n,!0),a=this.getTerminalPort(e,a,!1),t,i);else if(null!=t)for(s=0;s<t.length;s++)null!=t[s]&&(a=mxUtils.clone(t[s]),i.push(this.transformControlPoint(e,a)));t=e.absolutePoints,i.push(t[t.length-1]),e.absolutePoints=i}},mxGraphView.prototype.transformControlPoint=function(e,t){var n=e.origin;return new mxPoint(this.scale*(t.x+this.translate.x+n.x),this.scale*(t.y+this.translate.y+n.y))},mxGraphView.prototype.getEdgeStyle=function(e,t,n,a){return"string"==typeof(e=null!=n&&n==a?mxUtils.getValue(e.style,mxConstants.STYLE_LOOP,this.graph.defaultLoopStyle):mxUtils.getValue(e.style,mxConstants.STYLE_NOEDGESTYLE,!1)?null:e.style[mxConstants.STYLE_EDGE])&&(null==(t=mxStyleRegistry.getValue(e))&&this.isAllowEval()&&(t=mxUtils.eval(e)),e=t),"function"==typeof e?e:null},mxGraphView.prototype.updateFloatingTerminalPoints=function(e,t,n){var a=e.absolutePoints,i=a[0];null==a[a.length-1]&&null!=n&&this.updateFloatingTerminalPoint(e,n,t,!1),null==i&&null!=t&&this.updateFloatingTerminalPoint(e,t,n,!0)},mxGraphView.prototype.updateFloatingTerminalPoint=function(e,t,n,a){t=this.getTerminalPort(e,t,a);var i=this.getNextPoint(e,n,a),s=this.graph.isOrthogonal(e);n=mxUtils.toRadians(Number(t.style[mxConstants.STYLE_ROTATION]||"0"));var o=new mxPoint(t.getCenterX(),t.getCenterY());if(0!=n){var r=Math.cos(-n),l=Math.sin(-n);i=mxUtils.getRotatedPoint(i,r,l,o)}r=parseFloat(e.style[mxConstants.STYLE_PERIMETER_SPACING]||0),r+=parseFloat(e.style[a?mxConstants.STYLE_SOURCE_PERIMETER_SPACING:mxConstants.STYLE_TARGET_PERIMETER_SPACING]||0),t=this.getPerimeterPoint(t,i,0==n&&s,r),0!=n&&(r=Math.cos(n),l=Math.sin(n),t=mxUtils.getRotatedPoint(t,r,l,o)),e.setAbsoluteTerminalPoint(t,a)},mxGraphView.prototype.getTerminalPort=function(e,t,n){return null!=(e=mxUtils.getValue(e.style,n?mxConstants.STYLE_SOURCE_PORT:mxConstants.STYLE_TARGET_PORT))&&(null!=(e=this.getState(this.graph.getModel().getCell(e)))&&(t=e)),t},mxGraphView.prototype.getPerimeterPoint=function(e,t,n,a){var i=null;if(null!=e){var s=this.getPerimeterFunction(e);null!=s&&null!=t&&(0<(a=this.getPerimeterBounds(e,a)).width||0<a.height)&&(i=s(a,e,t,n)),null==i&&(i=this.getPoint(e))}return i},mxGraphView.prototype.getRoutingCenterX=function(e){var t=null!=e.style&&parseFloat(e.style[mxConstants.STYLE_ROUTING_CENTER_X])||0;return e.getCenterX()+t*e.width},mxGraphView.prototype.getRoutingCenterY=function(e){var t=null!=e.style&&parseFloat(e.style[mxConstants.STYLE_ROUTING_CENTER_Y])||0;return e.getCenterY()+t*e.height},mxGraphView.prototype.getPerimeterBounds=function(e,t){return t=null!=t?t:0,null!=e&&(t+=parseFloat(e.style[mxConstants.STYLE_PERIMETER_SPACING]||0)),e.getPerimeterBounds(t*this.scale)},mxGraphView.prototype.getPerimeterFunction=function(e){if("string"==typeof(e=e.style[mxConstants.STYLE_PERIMETER])){var t=mxStyleRegistry.getValue(e);null==t&&this.isAllowEval()&&(t=mxUtils.eval(e)),e=t}return"function"==typeof e?e:null},mxGraphView.prototype.getNextPoint=function(e,t,n){var a=null;return null!=(e=e.absolutePoints)&&(n||2<e.length||null==t)&&(a=e.length,a=e[n?Math.min(1,a-1):Math.max(0,a-2)]),null==a&&null!=t&&(a=new mxPoint(t.getCenterX(),t.getCenterY())),a},mxGraphView.prototype.getVisibleTerminal=function(e,t){for(var n=this.graph.getModel(),a=n.getTerminal(e,t),i=a;null!=a&&a!=this.currentRoot;)this.graph.isCellVisible(i)&&!this.graph.isCellCollapsed(a)||(i=a),a=n.getParent(a);return n.getParent(i)==n.getRoot()&&(i=null),i},mxGraphView.prototype.updateEdgeBounds=function(e){var t=e.absolutePoints;if(e.length=0,null!=t&&0<t.length){var n=t[0],a=t[t.length-1];if(null==n||null==a)e.cell!=this.currentRoot&&this.clear(e.cell,!0);else{if(n.x!=a.x||n.y!=a.y){var i=a.x-n.x,s=a.y-n.y;e.terminalDistance=Math.sqrt(i*i+s*s)}else e.terminalDistance=0;a=0;var o=[];if(null!=(s=n)){n=s.x;for(var r=s.y,l=n,d=r,c=1;c<t.length;c++){var m=t[c];null!=m&&(i=s.x-m.x,s=s.y-m.y,i=Math.sqrt(i*i+s*s),o.push(i),a+=i,s=m,n=Math.min(s.x,n),r=Math.min(s.y,r),l=Math.max(s.x,l),d=Math.max(s.y,d))}e.length=a,e.segments=o,e.x=n,e.y=r,e.width=Math.max(1,l-n),e.height=Math.max(1,d-r)}}}},mxGraphView.prototype.getPoint=function(e,t){var n=e.getCenterX(),a=e.getCenterY();if(null==e.segments||null!=t&&!t.relative)null!=t&&(null!=(d=t.offset)&&(n+=d.x,a+=d.y));else{for(var i=e.absolutePoints.length,s=(.5+(null!=t?t.x/2:0))*e.length,o=e.segments[0],r=0,l=1;r+o<s&&l<i-1;)r+=o,o=e.segments[l++];if(i=0==o?0:(s-r)/o,s=e.absolutePoints[l-1],l=e.absolutePoints[l],null!=s&&null!=l){if(r=n=a=0,null!=t){a=t.y;var d=t.offset;null!=d&&(n=d.x,r=d.y)}d=l.x-s.x,l=l.y-s.y,n=s.x+d*i+((0==o?0:l/o)*a+n)*this.scale,a=s.y+l*i-((0==o?0:d/o)*a-r)*this.scale}}return new mxPoint(n,a)},mxGraphView.prototype.getRelativePoint=function(e,t,n){if(null!=(i=this.graph.getModel().getGeometry(e.cell))){var a=e.absolutePoints.length;if(i.relative&&1<a){for(var i=e.length,s=e.segments,o=e.absolutePoints[0],r=e.absolutePoints[1],l=mxUtils.ptSegDistSq(o.x,o.y,r.x,r.y,t,n),d=0,c=0,m=0,u=2;u<a;u++)c+=s[u-2],r=e.absolutePoints[u],(o=mxUtils.ptSegDistSq(o.x,o.y,r.x,r.y,t,n))<=l&&(l=o,d=u-1,m=c),o=r;return a=s[d],o=e.absolutePoints[d],l=(r=e.absolutePoints[d+1]).x,s=r.y,s=(l=(e=o.x-l)-(l=t-l))*e+(s=(d=o.y-s)-(s=n-s))*d,a<(e=Math.sqrt(s<=0?0:s*s/(e*e+d*d)))&&(e=a),a=Math.sqrt(mxUtils.ptSegDistSq(o.x,o.y,r.x,r.y,t,n)),-1==mxUtils.relativeCcw(o.x,o.y,r.x,r.y,t,n)&&(a=-a),new mxPoint((i/2-m-e)/i*-2,a/this.scale)}}return new mxPoint},mxGraphView.prototype.updateEdgeLabelOffset=function(e){var t=e.absolutePoints;if(e.absoluteOffset.x=e.getCenterX(),e.absoluteOffset.y=e.getCenterY(),null!=t&&0<t.length&&null!=e.segments)if((i=this.graph.getCellGeometry(e.cell)).relative){null!=(n=this.getPoint(e,i))&&(e.absoluteOffset=n)}else{var n=t[0],a=t[t.length-1];if(null!=n&&null!=a){t=a.x-n.x;var i,s=a.y-n.y,o=a=0;null!=(i=i.offset)&&(a=i.x,o=i.y),i=n.y+s/2+o*this.scale,e.absoluteOffset.x=n.x+t/2+a*this.scale,e.absoluteOffset.y=i}}},mxGraphView.prototype.getState=function(e,t){t=t||!1;var n=null;return null!=e&&(n=this.states.get(e),this.graph.isCellVisible(e)&&(null==n&&t&&this.graph.isCellVisible(e)?(n=this.createState(e),this.states.put(e,n)):t&&null!=n&&this.updateStyle&&(n.style=this.graph.getCellStyle(e)))),n},mxGraphView.prototype.isRendering=function(){return this.rendering},mxGraphView.prototype.setRendering=function(e){this.rendering=e},mxGraphView.prototype.isAllowEval=function(){return this.allowEval},mxGraphView.prototype.setAllowEval=function(e){this.allowEval=e},mxGraphView.prototype.getStates=function(){return this.states},mxGraphView.prototype.setStates=function(e){this.states=e},mxGraphView.prototype.getCellStates=function(e){if(null==e)return this.states;for(var t=[],n=0;n<e.length;n++){var a=this.getState(e[n]);null!=a&&t.push(a)}return t},mxGraphView.prototype.removeState=function(e){var t=null;return null!=e&&(null!=(t=this.states.remove(e))&&(this.graph.cellRenderer.destroy(t),t.destroy())),t},mxGraphView.prototype.createState=function(e){var t=this.graph.getCellStyle(e);return e=new mxCellState(this,e,t),this.graph.cellRenderer.initialize(e,this.isRendering()),e},mxGraphView.prototype.getCanvas=function(){return this.canvas},mxGraphView.prototype.getBackgroundPane=function(){return this.backgroundPane},mxGraphView.prototype.getDrawPane=function(){return this.drawPane},mxGraphView.prototype.getOverlayPane=function(){return this.overlayPane},mxGraphView.prototype.isContainerEvent=function(e){return(e=mxEvent.getSource(e))==this.graph.container||e.parentNode==this.backgroundPane||null!=e.parentNode&&e.parentNode.parentNode==this.backgroundPane||e==this.canvas.parentNode||e==this.canvas||e==this.backgroundPane||e==this.drawPane||e==this.overlayPane},mxGraphView.prototype.isScrollEvent=function(e){var t=mxUtils.getOffset(this.graph.container);e=new mxPoint(e.clientX-t.x,e.clientY-t.y);t=this.graph.container.offsetWidth;var n=this.graph.container.clientWidth;return n<t&&e.x>n+2&&e.x<=t||(t=this.graph.container.offsetHeight,(n=this.graph.container.clientHeight)<t&&e.y>n+2&&e.y<=t)},mxGraphView.prototype.init=function(){this.installListeners();var e=this.graph;e.dialect==mxConstants.DIALECT_SVG?this.createSvg():e.dialect==mxConstants.DIALECT_VML?this.createVml():this.createHtml()},mxGraphView.prototype.installListeners=function(){var a=this.graph,i=a.container;if(null!=i){mxEvent.addGestureListeners(i,mxUtils.bind(this,function(e){mxClient.IS_TOUCH&&a.isEditing()&&a.stopEditing(!a.isInvokesStopCellEditing()),this.isContainerEvent(e)&&(!mxClient.IS_IE&&!mxClient.IS_GC&&!mxClient.IS_OP&&!mxClient.IS_SF||!this.isScrollEvent(e))&&a.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e))}),mxUtils.bind(this,function(e){this.isContainerEvent(e)&&a.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e))}),mxUtils.bind(this,function(e){this.isContainerEvent(e)&&a.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e))})),mxEvent.addListener(i,"dblclick",mxUtils.bind(this,function(e){a.dblClick(e)}));a.addMouseListener({mouseDown:function(e,t){a.panningHandler.hideMenu()},mouseMove:function(){},mouseUp:function(){}}),this.moveHandler=mxUtils.bind(this,function(e){var t,n;null!=a.tooltipHandler&&a.tooltipHandler.isHideOnHover()&&a.tooltipHandler.hide(),this.captureDocumentGesture&&a.isMouseDown&&!mxEvent.isConsumed(e)&&a.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,(t=e,n=null,mxClient.IS_TOUCH&&(n=mxEvent.getClientX(t),t=mxEvent.getClientY(t),t=mxUtils.convertPoint(i,n,t),n=a.view.getState(a.getCellAt(t.x,t.y))),n)))}),this.endHandler=mxUtils.bind(this,function(e){this.captureDocumentGesture&&a.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e))}),mxEvent.addGestureListeners(document,null,this.moveHandler,this.endHandler)}},mxGraphView.prototype.createHtml=function(){var e=this.graph.container;null!=e&&(this.canvas=this.createHtmlPane("100%","100%"),this.backgroundPane=this.createHtmlPane("1px","1px"),this.drawPane=this.createHtmlPane("1px","1px"),this.overlayPane=this.createHtmlPane("1px","1px"),this.canvas.appendChild(this.backgroundPane),this.canvas.appendChild(this.drawPane),this.canvas.appendChild(this.overlayPane),e.appendChild(this.canvas),mxClient.IS_QUIRKS&&(e=mxUtils.bind(this,function(e){e=this.getGraphBounds(),this.updateHtmlCanvasSize(e.x+e.width+this.graph.border,e.y+e.height+this.graph.border)}),mxEvent.addListener(window,"resize",e)))},mxGraphView.prototype.updateHtmlCanvasSize=function(e,t){if(null!=this.graph.container){var n=this.graph.container.offsetHeight;this.canvas.style.width=this.graph.container.offsetWidth<e?e+"px":"100%",this.canvas.style.height=n<t?t+"px":"100%"}},mxGraphView.prototype.createHtmlPane=function(e,t){var n=document.createElement("DIV");return null!=e&&null!=t?(n.style.position="absolute",n.style.left="0px",n.style.top="0px",n.style.width=e,n.style.height=t):n.style.position="relative",n},mxGraphView.prototype.createVml=function(){var e=this.graph.container;if(null!=e){var t=e.offsetWidth,n=e.offsetHeight;this.canvas=this.createVmlPane(t,n),this.backgroundPane=this.createVmlPane(t,n),this.drawPane=this.createVmlPane(t,n),this.overlayPane=this.createVmlPane(t,n),this.canvas.appendChild(this.backgroundPane),this.canvas.appendChild(this.drawPane),this.canvas.appendChild(this.overlayPane),e.appendChild(this.canvas)}},mxGraphView.prototype.createVmlPane=function(e,t){var n=document.createElement(mxClient.VML_PREFIX+":group");return n.style.position="absolute",n.style.left="0px",n.style.top="0px",n.style.width=e+"px",n.style.height=t+"px",n.setAttribute("coordsize",e+","+t),n.setAttribute("coordorigin","0,0"),n},mxGraphView.prototype.createSvg=function(){var e=this.graph.container;this.canvas=document.createElementNS(mxConstants.NS_SVG,"g"),this.backgroundPane=document.createElementNS(mxConstants.NS_SVG,"g"),this.canvas.appendChild(this.backgroundPane),this.drawPane=document.createElementNS(mxConstants.NS_SVG,"g"),this.canvas.appendChild(this.drawPane),this.overlayPane=document.createElementNS(mxConstants.NS_SVG,"g"),this.canvas.appendChild(this.overlayPane);var t=document.createElementNS(mxConstants.NS_SVG,"svg");t.style.width="100%",t.style.height="100%",t.style.display="block",t.appendChild(this.canvas),null!=e&&(e.appendChild(t),"static"==mxUtils.getCurrentStyle(e).position&&(e.style.position="relative"))},mxGraphView.prototype.destroy=function(){var e=null!=this.canvas?this.canvas.ownerSVGElement:null;null==e&&(e=this.canvas),null!=e&&null!=e.parentNode&&(this.clear(this.currentRoot,!0),mxEvent.removeGestureListeners(document,null,this.moveHandler,this.endHandler),mxEvent.release(this.graph.container),e.parentNode.removeChild(e),this.overlayPane=this.drawPane=this.backgroundPane=this.canvas=this.endHandler=this.moveHandler=null)},mxCurrentRootChange.prototype.execute=function(){var e=this.view.currentRoot;this.view.currentRoot=this.previous,this.previous=e,null!=(e=this.view.graph.getTranslateForRoot(this.view.currentRoot))&&(this.view.translate=new mxPoint(-e.x,-e.y)),this.view.fireEvent(new mxEventObject(this.isUp?mxEvent.UP:mxEvent.DOWN,"root",this.view.currentRoot,"previous",this.previous)),this.isUp?(this.view.clear(this.view.currentRoot,!0),this.view.validate()):this.view.refresh(),this.isUp=!this.isUp},mxLoadResources&&mxResources.add(mxClient.basePath+"/resources/graph"),mxGraph.prototype=new mxEventSource,mxGraph.prototype.constructor=mxGraph,mxGraph.prototype.EMPTY_ARRAY=[],mxGraph.prototype.mouseListeners=null,mxGraph.prototype.isMouseDown=!1,mxGraph.prototype.model=null,mxGraph.prototype.view=null,mxGraph.prototype.stylesheet=null,mxGraph.prototype.selectionModel=null,mxGraph.prototype.cellEditor=null,mxGraph.prototype.cellRenderer=null,mxGraph.prototype.multiplicities=null,mxGraph.prototype.renderHint=null,mxGraph.prototype.dialect=null,mxGraph.prototype.gridSize=10,mxGraph.prototype.gridEnabled=!0,mxGraph.prototype.portsEnabled=!0,mxGraph.prototype.doubleTapEnabled=!0,mxGraph.prototype.doubleTapTimeout=700,mxGraph.prototype.doubleTapTolerance=25,mxGraph.prototype.lastTouchY=0,mxGraph.prototype.lastTouchY=0,mxGraph.prototype.lastTouchTime=0,mxGraph.prototype.gestureEnabled=!0,mxGraph.prototype.tolerance=4,mxGraph.prototype.defaultOverlap=.5,mxGraph.prototype.defaultParent=null,mxGraph.prototype.alternateEdgeStyle=null,mxGraph.prototype.backgroundImage=null,mxGraph.prototype.pageVisible=!1,mxGraph.prototype.pageBreaksVisible=!1,mxGraph.prototype.pageBreakColor="gray",mxGraph.prototype.pageBreakDashed=!0,mxGraph.prototype.minPageBreakDist=20,mxGraph.prototype.preferPageSize=!1,mxGraph.prototype.pageFormat=mxConstants.PAGE_FORMAT_A4_PORTRAIT,mxGraph.prototype.pageScale=1.5,mxGraph.prototype.enabled=!0,mxGraph.prototype.escapeEnabled=!0,mxGraph.prototype.invokesStopCellEditing=!0,mxGraph.prototype.enterStopsCellEditing=!1,mxGraph.prototype.useScrollbarsForPanning=!0,mxGraph.prototype.exportEnabled=!0,mxGraph.prototype.importEnabled=!0,mxGraph.prototype.cellsLocked=!1,mxGraph.prototype.cellsCloneable=!0,mxGraph.prototype.foldingEnabled=!0,mxGraph.prototype.cellsEditable=!0,mxGraph.prototype.cellsDeletable=!0,mxGraph.prototype.cellsMovable=!0,mxGraph.prototype.edgeLabelsMovable=!0,mxGraph.prototype.vertexLabelsMovable=!1,mxGraph.prototype.dropEnabled=!1,mxGraph.prototype.splitEnabled=!0,mxGraph.prototype.cellsResizable=!0,mxGraph.prototype.cellsBendable=!0,mxGraph.prototype.cellsSelectable=!0,mxGraph.prototype.cellsDisconnectable=!0,mxGraph.prototype.autoSizeCells=!1,mxGraph.prototype.autoScroll=!0,mxGraph.prototype.timerAutoScroll=!1,mxGraph.prototype.allowAutoPanning=!1,mxGraph.prototype.ignoreScrollbars=!1,mxGraph.prototype.autoExtend=!0,mxGraph.prototype.maximumGraphBounds=null,mxGraph.prototype.minimumGraphSize=null,mxGraph.prototype.minimumContainerSize=null,mxGraph.prototype.maximumContainerSize=null,mxGraph.prototype.resizeContainer=!1,mxGraph.prototype.border=0,mxGraph.prototype.ordered=!0,mxGraph.prototype.keepEdgesInForeground=!1,mxGraph.prototype.keepEdgesInBackground=!0,mxGraph.prototype.allowNegativeCoordinates=!0,mxGraph.prototype.constrainChildren=!0,mxGraph.prototype.extendParents=!0,mxGraph.prototype.extendParentsOnAdd=!0,mxGraph.prototype.collapseToPreferredSize=!0,mxGraph.prototype.zoomFactor=1.2,mxGraph.prototype.keepSelectionVisibleOnZoom=!1,mxGraph.prototype.centerZoom=!0,mxGraph.prototype.resetViewOnRootChange=!0,mxGraph.prototype.resetEdgesOnResize=!1,mxGraph.prototype.resetEdgesOnMove=!1,mxGraph.prototype.resetEdgesOnConnect=!0,mxGraph.prototype.allowLoops=!1,mxGraph.prototype.defaultLoopStyle=mxEdgeStyle.Loop,mxGraph.prototype.multigraph=!0,mxGraph.prototype.connectableEdges=!1,mxGraph.prototype.allowDanglingEdges=!0,mxGraph.prototype.cloneInvalidEdges=!1,mxGraph.prototype.disconnectOnMove=!0,mxGraph.prototype.labelsVisible=!0,mxGraph.prototype.htmlLabels=!1,mxGraph.prototype.swimlaneSelectionEnabled=!0,mxGraph.prototype.swimlaneNesting=!0,mxGraph.prototype.swimlaneIndicatorColorAttribute=mxConstants.STYLE_FILLCOLOR,mxGraph.prototype.imageBundles=null,mxGraph.prototype.minFitScale=.1,mxGraph.prototype.maxFitScale=8,mxGraph.prototype.panDx=0,mxGraph.prototype.panDy=0,mxGraph.prototype.collapsedImage=new mxImage(mxClient.imageBasePath+"/collapsed.gif",9,9),mxGraph.prototype.expandedImage=new mxImage(mxClient.imageBasePath+"/expanded.gif",9,9),mxGraph.prototype.warningImage=new mxImage("/assets/plugins/mxgraph/images/warning.gif",16,16),mxGraph.prototype.alreadyConnectedResource="none"!=mxClient.language?"alreadyConnected":"",mxGraph.prototype.containsValidationErrorsResource="none"!=mxClient.language?"containsValidationErrors":"",mxGraph.prototype.collapseExpandResource="none"!=mxClient.language?"collapse-expand":"",mxGraph.prototype.init=function(e){this.container=e,this.cellEditor=this.createCellEditor(),this.view.init(),this.sizeDidChange(),mxClient.IS_IE&&(mxEvent.addListener(window,"unload",mxUtils.bind(this,function(){this.destroy()})),mxEvent.addListener(e,"selectstart",mxUtils.bind(this,function(){return this.isEditing()}))),8==document.documentMode&&e.insertAdjacentHTML("beforeend",'<v:group style="DISPLAY: none;"></v:group>')},mxGraph.prototype.createHandlers=function(e){this.tooltipHandler=new mxTooltipHandler(this),this.tooltipHandler.setEnabled(!1),this.panningHandler=new mxPanningHandler(this),this.panningHandler.panningEnabled=!1,this.selectionCellsHandler=new mxSelectionCellsHandler(this),this.connectionHandler=new mxConnectionHandler(this),this.connectionHandler.setEnabled(!1),this.graphHandler=new mxGraphHandler(this)},mxGraph.prototype.createSelectionModel=function(){return new mxGraphSelectionModel(this)},mxGraph.prototype.createStylesheet=function(){return new mxStylesheet},mxGraph.prototype.createGraphView=function(){return new mxGraphView(this)},mxGraph.prototype.createCellRenderer=function(){return new mxCellRenderer},mxGraph.prototype.createCellEditor=function(){return new mxCellEditor(this)},mxGraph.prototype.getModel=function(){return this.model},mxGraph.prototype.getView=function(){return this.view},mxGraph.prototype.getStylesheet=function(){return this.stylesheet},mxGraph.prototype.setStylesheet=function(e){this.stylesheet=e},mxGraph.prototype.getSelectionModel=function(){return this.selectionModel},mxGraph.prototype.setSelectionModel=function(e){this.selectionModel=e},mxGraph.prototype.getSelectionCellsForChanges=function(e){for(var t=[],n=0;n<e.length;n++){var a=e[n];if(a.constructor!=mxRootChange){var i=null;a instanceof mxChildChange&&null==a.previous?i=a.child:null!=a.cell&&a.cell instanceof mxCell&&(i=a.cell),null!=i&&mxUtils.indexOf(t,i)<0&&t.push(i)}}return this.getModel().getTopmostCells(t)},mxGraph.prototype.graphModelChanged=function(e){for(var t=0;t<e.length;t++)this.processChange(e[t]);this.removeSelectionCells(this.getRemovedCellsForChanges(e)),this.view.validate(),this.sizeDidChange()},mxGraph.prototype.getRemovedCellsForChanges=function(e){for(var t=[],n=0;n<e.length;n++){var a=e[n];if(a instanceof mxRootChange)break;a instanceof mxChildChange?null!=a.previous&&null==a.parent&&(t=t.concat(this.model.getDescendants(a.child))):a instanceof mxVisibleChange&&(t=t.concat(this.model.getDescendants(a.cell)))}return t},mxGraph.prototype.processChange=function(e){if(e instanceof mxRootChange)this.clearSelection(),this.removeStateForCell(e.previous),this.resetViewOnRootChange&&(this.view.scale=1,this.view.translate.x=0,this.view.translate.y=0),this.fireEvent(new mxEventObject(mxEvent.ROOT));else if(e instanceof mxChildChange){var t=this.model.getParent(e.child);null!=t?this.view.invalidate(e.child,!0,!1,null!=e.previous):(this.removeStateForCell(e.child),this.view.currentRoot==e.child&&this.home()),t!=e.previous&&(null!=t&&this.view.invalidate(t,!1,!1),null!=e.previous&&this.view.invalidate(e.previous,!1,!1))}else e instanceof mxTerminalChange||e instanceof mxGeometryChange?this.view.invalidate(e.cell):e instanceof mxValueChange?this.view.invalidate(e.cell,!1,!1):e instanceof mxStyleChange?(this.view.invalidate(e.cell,!0,!0,!1),this.view.removeState(e.cell)):null!=e.cell&&e.cell instanceof mxCell&&this.removeStateForCell(e.cell)},mxGraph.prototype.removeStateForCell=function(e){for(var t=this.model.getChildCount(e),n=0;n<t;n++)this.removeStateForCell(this.model.getChildAt(e,n));this.view.removeState(e)},mxGraph.prototype.addCellOverlay=function(e,t){null==e.overlays&&(e.overlays=[]),e.overlays.push(t);var n=this.view.getState(e);return null!=n&&this.cellRenderer.redraw(n),this.fireEvent(new mxEventObject(mxEvent.ADD_OVERLAY,"cell",e,"overlay",t)),t},mxGraph.prototype.getCellOverlays=function(e){return e.overlays},mxGraph.prototype.removeCellOverlay=function(e,t){if(null==t)this.removeCellOverlays(e);else{var n=mxUtils.indexOf(e.overlays,t);0<=n?(e.overlays.splice(n,1),0==e.overlays.length&&(e.overlays=null),null!=(n=this.view.getState(e))&&this.cellRenderer.redraw(n),this.fireEvent(new mxEventObject(mxEvent.REMOVE_OVERLAY,"cell",e,"overlay",t))):t=null}return t},mxGraph.prototype.removeCellOverlays=function(e){var t=e.overlays;if(null!=t){e.overlays=null;var n=this.view.getState(e);for(null!=n&&this.cellRenderer.redraw(n),n=0;n<t.length;n++)this.fireEvent(new mxEventObject(mxEvent.REMOVE_OVERLAY,"cell",e,"overlay",t[n]))}return t},mxGraph.prototype.clearCellOverlays=function(e){e=null!=e?e:this.model.getRoot(),this.removeCellOverlays(e);for(var t=this.model.getChildCount(e),n=0;n<t;n++){var a=this.model.getChildAt(e,n);this.clearCellOverlays(a)}},mxGraph.prototype.setCellWarning=function(n,e,t,a){return null!=e&&0<e.length?(e=new mxCellOverlay(t=null!=t?t:this.warningImage,"<font color=red>"+e+"</font>"),a&&e.addListener(mxEvent.CLICK,mxUtils.bind(this,function(e,t){this.isEnabled()&&this.setSelectionCell(n)})),this.addCellOverlay(n,e)):(this.removeCellOverlays(n),null)},mxGraph.prototype.startEditing=function(e){this.startEditingAtCell(null,e)},mxGraph.prototype.startEditingAtCell=function(e,t){null==e&&(null!=(e=this.getSelectionCell())&&!this.isCellEditable(e)&&(e=null)),null!=e&&(this.fireEvent(new mxEventObject(mxEvent.START_EDITING,"cell",e,"event",t)),this.cellEditor.startEditing(e,t))},mxGraph.prototype.getEditingValue=function(e,t){return this.convertValueToString(e)},mxGraph.prototype.stopEditing=function(e){this.cellEditor.stopEditing(e)},mxGraph.prototype.labelChanged=function(e,t,n){this.model.beginUpdate();try{this.cellLabelChanged(e,t,this.isAutoSizeCell(e)),this.fireEvent(new mxEventObject(mxEvent.LABEL_CHANGED,"cell",e,"value",t,"event",n))}finally{this.model.endUpdate()}return e},mxGraph.prototype.cellLabelChanged=function(e,t,n){this.model.beginUpdate();try{this.model.setValue(e,t),n&&this.cellSizeUpdated(e,!1)}finally{this.model.endUpdate()}},mxGraph.prototype.escape=function(e){this.stopEditing(!0),this.connectionHandler.reset(),this.graphHandler.reset(),e=this.getSelectionCells();for(var t=0;t<e.length;t++){var n=this.view.getState(e[t]);null!=n&&null!=n.handler&&n.handler.reset()}},mxGraph.prototype.click=function(e){var t=e.getEvent(),n=e.getCell(),a=new mxEventObject(mxEvent.CLICK,"event",t,"cell",n);e.isConsumed()&&a.consume(),this.fireEvent(a),this.isEnabled()&&!mxEvent.isConsumed(t)&&!a.isConsumed()&&(null!=n?this.selectCellForEvent(n,t):(n=null,this.isSwimlaneSelectionEnabled()&&(n=this.getSwimlaneAt(e.getGraphX(),e.getGraphY())),null!=n?this.selectCellForEvent(n,t):this.isToggleEvent(t)||this.clearSelection()))},mxGraph.prototype.dblClick=function(e,t){var n=new mxEventObject(mxEvent.DOUBLE_CLICK,"event",e,"cell",t);this.fireEvent(n),this.isEnabled()&&!mxEvent.isConsumed(e)&&!n.isConsumed()&&null!=t&&this.isCellEditable(t)&&this.startEditingAtCell(t,e)},mxGraph.prototype.scrollPointToVisible=function(e,t,n,a){if(this.timerAutoScroll||!this.ignoreScrollbars&&!mxUtils.hasScrollbars(this.container))this.allowAutoPanning&&!this.panningHandler.active&&(null==this.panningManager&&(this.panningManager=this.createPanningManager()),this.panningManager.panTo(e+this.panDx,t+this.panDy));else{var i=this.container;if(a=null!=a?a:20,e>=i.scrollLeft&&t>=i.scrollTop&&e<=i.scrollLeft+i.clientWidth&&t<=i.scrollTop+i.clientHeight){var s=i.scrollLeft+i.clientWidth-e;if(s<a){if(e=i.scrollLeft,i.scrollLeft+=a-s,n&&e==i.scrollLeft){if(this.dialect==mxConstants.DIALECT_SVG){e=this.view.getDrawPane().ownerSVGElement;var o=this.container.scrollWidth+a-s}else o=Math.max(i.clientWidth,i.scrollWidth)+a-s,e=this.view.getCanvas();e.style.width=o+"px",i.scrollLeft+=a-s}}else(s=e-i.scrollLeft)<a&&(i.scrollLeft-=a-s);(s=i.scrollTop+i.clientHeight-t)<a?(e=i.scrollTop,i.scrollTop+=a-s,e==i.scrollTop&&n&&(this.dialect==mxConstants.DIALECT_SVG?(e=this.view.getDrawPane().ownerSVGElement,t=this.container.scrollHeight+a-s):(t=Math.max(i.clientHeight,i.scrollHeight)+a-s,e=this.view.getCanvas()),e.style.height=t+"px",i.scrollTop+=a-s)):(s=t-i.scrollTop)<a&&(i.scrollTop-=a-s)}}},mxGraph.prototype.createPanningManager=function(){return new mxPanningManager(this)},mxGraph.prototype.getBorderSizes=function(){function e(e){var t=0;t="thin"==e?2:"medium"==e?4:"thick"==e?6:parseInt(e);return isNaN(t)&&(t=0),t}var t=mxUtils.getCurrentStyle(this.container),n=new mxRectangle;return n.x=e(t.borderLeftWidth)+parseInt(t.paddingLeft||0),n.y=e(t.borderTopWidth)+parseInt(t.paddingTop||0),n.width=e(t.borderRightWidth)+parseInt(t.paddingRight||0),n.height=e(t.borderBottomWidth)+parseInt(t.paddingBottom||0),n},mxGraph.prototype.getPreferredPageSize=function(e,t,n){e=this.view.scale;var a=this.view.translate,i=this.pageFormat,s=e*this.pageScale;i=new mxRectangle(0,0,i.width*s,i.height*s);return t=this.pageBreaksVisible?Math.ceil(t/i.width):1,n=this.pageBreaksVisible?Math.ceil(n/i.height):1,new mxRectangle(0,0,t*i.width+2+a.x/e,n*i.height+2+a.y/e)},mxGraph.prototype.sizeDidChange=function(){var e=this.getGraphBounds();if(null!=this.container){var t=this.getBorder(),n=Math.max(0,e.x+e.width+1+t);t=Math.max(0,e.y+e.height+1+t);if(null!=this.minimumContainerSize&&(n=Math.max(n,this.minimumContainerSize.width),t=Math.max(t,this.minimumContainerSize.height)),this.resizeContainer&&this.doResizeContainer(n,t),this.preferPageSize||!mxClient.IS_IE&&this.pageVisible){var a=this.getPreferredPageSize(e,n,t);null!=a&&(n=a.width,t=a.height)}null!=this.minimumGraphSize&&(n=Math.max(n,this.minimumGraphSize.width*this.view.scale),t=Math.max(t,this.minimumGraphSize.height*this.view.scale)),n=Math.ceil(n-1),t=Math.ceil(t-1),this.dialect==mxConstants.DIALECT_SVG?((a=this.view.getDrawPane().ownerSVGElement).style.minWidth=Math.max(1,n)+"px",a.style.minHeight=Math.max(1,t)+"px",a.style.width="100%",a.style.height="100%"):mxClient.IS_QUIRKS?this.view.updateHtmlCanvasSize(Math.max(1,n),Math.max(1,t)):(this.view.canvas.style.minWidth=Math.max(1,n)+"px",this.view.canvas.style.minHeight=Math.max(1,t)+"px"),this.updatePageBreaks(this.pageBreaksVisible,n-1,t-1)}this.fireEvent(new mxEventObject(mxEvent.SIZE,"bounds",e))},mxGraph.prototype.doResizeContainer=function(e,t){if(mxClient.IS_IE)if(mxClient.IS_QUIRKS){var n=this.getBorderSizes();e+=Math.max(2,n.x+n.width+1),t+=Math.max(2,n.y+n.height+1)}else 9<=document.documentMode?(e+=3,t+=5):(e+=1,t+=1);else t+=1;null!=this.maximumContainerSize&&(e=Math.min(this.maximumContainerSize.width,e),t=Math.min(this.maximumContainerSize.height,t)),this.container.style.width=Math.ceil(e)+"px",this.container.style.height=Math.ceil(t)+"px"},mxGraph.prototype.updatePageBreaks=function(e,t,n){var a=this.view.scale,i=this.view.translate,s=this.pageFormat,o=a*this.pageScale;i=new mxRectangle(a*i.x,a*i.y,s.width*o,s.height*o);if(e=e&&Math.min(i.width,i.height)>this.minPageBreakDist,i.x=mxUtils.mod(i.x,i.width),i.y=mxUtils.mod(i.y,i.height),s=e?Math.ceil((t-i.x)/i.width):0,e=e?Math.ceil((n-i.y)/i.height):0,null==this.horizontalPageBreaks&&0<s&&(this.horizontalPageBreaks=[]),null!=this.horizontalPageBreaks){for(o=0;o<=s;o++){var r=[new mxPoint(i.x+o*i.width,1),new mxPoint(i.x+o*i.width,n)];null!=this.horizontalPageBreaks[o]?(this.horizontalPageBreaks[o].scale=1,this.horizontalPageBreaks[o].points=r,this.horizontalPageBreaks[o].redraw()):((r=new mxPolyline(r,this.pageBreakColor,this.scale)).dialect=this.dialect,r.isDashed=this.pageBreakDashed,r.scale=a,r.init(this.view.backgroundPane),r.redraw(),this.horizontalPageBreaks[o]=r)}for(o=s;o<this.horizontalPageBreaks.length;o++)this.horizontalPageBreaks[o].destroy();this.horizontalPageBreaks.splice(s,this.horizontalPageBreaks.length-s)}if(null==this.verticalPageBreaks&&0<e&&(this.verticalPageBreaks=[]),null!=this.verticalPageBreaks){for(o=0;o<=e;o++)r=[new mxPoint(1,i.y+o*i.height),new mxPoint(t,i.y+o*i.height)],null!=this.verticalPageBreaks[o]?(this.verticalPageBreaks[o].scale=1,this.verticalPageBreaks[o].points=r,this.verticalPageBreaks[o].redraw()):((r=new mxPolyline(r,this.pageBreakColor,a)).dialect=this.dialect,r.isDashed=this.pageBreakDashed,r.scale=a,r.init(this.view.backgroundPane),r.redraw(),this.verticalPageBreaks[o]=r);for(o=e;o<this.verticalPageBreaks.length;o++)this.verticalPageBreaks[o].destroy();this.verticalPageBreaks.splice(e,this.verticalPageBreaks.length-e)}},mxGraph.prototype.getCellStyle=function(e){var t=this.model.getStyle(e),n=null;n=this.model.isEdge(e)?this.stylesheet.getDefaultEdgeStyle():this.stylesheet.getDefaultVertexStyle();return null!=t&&(n=this.postProcessCellStyle(this.stylesheet.getCellStyle(t,n))),null==n&&(n=mxGraph.prototype.EMPTY_ARRAY),n},mxGraph.prototype.postProcessCellStyle=function(e){if(null!=e){var t=e[mxConstants.STYLE_IMAGE],n=this.getImageFromBundles(t);null!=n?e[mxConstants.STYLE_IMAGE]=n:n=t,null!=n&&"data:image/"==n.substring(0,11)&&(0<(t=n.indexOf(","))&&(n=n.substring(0,t)+";base64,"+n.substring(t+1)),e[mxConstants.STYLE_IMAGE]=n)}return e},mxGraph.prototype.setCellStyle=function(e,t){if(null!=(t=t||this.getSelectionCells())){this.model.beginUpdate();try{for(var n=0;n<t.length;n++)this.model.setStyle(t[n],e)}finally{this.model.endUpdate()}}},mxGraph.prototype.toggleCellStyle=function(e,t,n){n=n||this.getSelectionCell(),this.toggleCellStyles(e,t,[n])},mxGraph.prototype.toggleCellStyles=function(e,t,n){var a;(t=null!=t&&t,null!=(n=n||this.getSelectionCells())&&0<n.length)&&(null!=(a=null!=(a=this.view.getState(n[0]))?a.style:this.getCellStyle(n[0]))&&(t=mxUtils.getValue(a,e,t)?0:1,this.setCellStyles(e,t,n)))},mxGraph.prototype.setCellStyles=function(e,t,n){n=n||this.getSelectionCells(),mxUtils.setCellStyles(this.model,n,e,t)},mxGraph.prototype.toggleCellStyleFlags=function(e,t,n){this.setCellStyleFlags(e,t,null,n)},mxGraph.prototype.setCellStyleFlags=function(e,t,n,a){if(null!=(a=a||this.getSelectionCells())&&0<a.length){var i;if(null==n)null!=(i=null!=(i=this.view.getState(a[0]))?i.style:this.getCellStyle(a[0]))&&(n=(parseInt(i[e]||0)&t)!=t);mxUtils.setCellStyleFlags(this.model,a,e,t,n)}},mxGraph.prototype.alignCells=function(e,t,n){if(null==t&&(t=this.getSelectionCells()),null!=t&&1<t.length){if(null==n)for(var a=0;a<t.length;a++){var i=this.getCellGeometry(t[a]);if(null!=i&&!this.model.isEdge(t[a]))if(null==n){if(e==mxConstants.ALIGN_CENTER){n=i.x+i.width/2;break}if(e==mxConstants.ALIGN_RIGHT)n=i.x+i.width;else if(e==mxConstants.ALIGN_TOP)n=i.y;else{if(e==mxConstants.ALIGN_MIDDLE){n=i.y+i.height/2;break}n=e==mxConstants.ALIGN_BOTTOM?i.y+i.height:i.x}}else n=e==mxConstants.ALIGN_RIGHT?Math.max(n,i.x+i.width):e==mxConstants.ALIGN_TOP?Math.min(n,i.y):e==mxConstants.ALIGN_BOTTOM?Math.max(n,i.y+i.height):Math.min(n,i.x)}if(null!=n){this.model.beginUpdate();try{for(a=0;a<t.length;a++)null!=(i=this.getCellGeometry(t[a]))&&!this.model.isEdge(t[a])&&(i=i.clone(),e==mxConstants.ALIGN_CENTER?i.x=n-i.width/2:e==mxConstants.ALIGN_RIGHT?i.x=n-i.width:e==mxConstants.ALIGN_TOP?i.y=n:e==mxConstants.ALIGN_MIDDLE?i.y=n-i.height/2:e==mxConstants.ALIGN_BOTTOM?i.y=n-i.height:i.x=n,this.model.setGeometry(t[a],i));this.fireEvent(new mxEventObject(mxEvent.ALIGN_CELLS,"align",e,"cells",t))}finally{this.model.endUpdate()}}}return t},mxGraph.prototype.flipEdge=function(e){if(null!=e&&null!=this.alternateEdgeStyle){this.model.beginUpdate();try{var t=this.model.getStyle(e);null==t||0==t.length?this.model.setStyle(e,this.alternateEdgeStyle):this.model.setStyle(e,null),this.resetEdge(e),this.fireEvent(new mxEventObject(mxEvent.FLIP_EDGE,"edge",e))}finally{this.model.endUpdate()}}return e},mxGraph.prototype.addImageBundle=function(e){this.imageBundles.push(e)},mxGraph.prototype.removeImageBundle=function(e){for(var t=[],n=0;n<this.imageBundles.length;n++)this.imageBundles[n]!=e&&t.push(this.imageBundles[n]);this.imageBundles=t},mxGraph.prototype.getImageFromBundles=function(e){if(null!=e)for(var t=0;t<this.imageBundles.length;t++){var n=this.imageBundles[t].getImage(e);if(null!=n)return n}return null},mxGraph.prototype.orderCells=function(e,t){null==t&&(t=mxUtils.sortCells(this.getSelectionCells(),!0)),this.model.beginUpdate();try{this.cellsOrdered(t,e),this.fireEvent(new mxEventObject(mxEvent.ORDER_CELLS,"back",e,"cells",t))}finally{this.model.endUpdate()}return t},mxGraph.prototype.cellsOrdered=function(e,t){if(null!=e){this.model.beginUpdate();try{for(var n=0;n<e.length;n++){var a=this.model.getParent(e[n]);t?this.model.add(a,e[n],n):this.model.add(a,e[n],this.model.getChildCount(a)-1)}this.fireEvent(new mxEventObject(mxEvent.CELLS_ORDERED,"back",t,"cells",e))}finally{this.model.endUpdate()}}},mxGraph.prototype.groupCells=function(e,t,n){null==n&&(n=mxUtils.sortCells(this.getSelectionCells(),!0)),n=this.getCellsForGroup(n),null==e&&(e=this.createGroupCell(n));var a=this.getBoundsForGroup(e,n,t);if(0<n.length&&null!=a){var i=this.model.getParent(e);null==i&&(i=this.model.getParent(n[0])),this.model.beginUpdate();try{null==this.getCellGeometry(e)&&this.model.setGeometry(e,new mxGeometry);var s=this.model.getChildCount(i);this.cellsAdded([e],i,s,null,null,!1),s=this.model.getChildCount(e),this.cellsAdded(n,e,s,null,null,!1,!1),this.cellsMoved(n,-a.x,-a.y,!1,!0),this.cellsResized([e],[a]),this.fireEvent(new mxEventObject(mxEvent.GROUP_CELLS,"group",e,"border",t,"cells",n))}finally{this.model.endUpdate()}}return e},mxGraph.prototype.getCellsForGroup=function(e){var t=[];if(null!=e&&0<e.length){var n=this.model.getParent(e[0]);t.push(e[0]);for(var a=1;a<e.length;a++)this.model.getParent(e[a])==n&&t.push(e[a])}return t},mxGraph.prototype.getBoundsForGroup=function(e,t,n){return null!=(t=this.getBoundingBoxFromGeometry(t))&&(this.isSwimlane(e)&&(e=this.getStartSize(e),t.x-=e.width,t.y-=e.height,t.width+=e.width,t.height+=e.height),t.x-=n,t.y-=n,t.width+=2*n,t.height+=2*n),t},mxGraph.prototype.createGroupCell=function(e){return(e=new mxCell("")).setVertex(!0),e.setConnectable(!1),e},mxGraph.prototype.ungroupCells=function(e){var t=[];if(null==e){e=this.getSelectionCells();for(var n=[],a=0;a<e.length;a++)0<this.model.getChildCount(e[a])&&n.push(e[a]);e=n}if(null!=e&&0<e.length){this.model.beginUpdate();try{for(a=0;a<e.length;a++){if(null!=(i=this.model.getChildren(e[a]))&&0<i.length){var i=i.slice(),s=this.model.getParent(e[a]),o=this.model.getChildCount(s);this.cellsAdded(i,s,o,null,null,!0),t=t.concat(i)}}this.cellsRemoved(this.addAllEdges(e)),this.fireEvent(new mxEventObject(mxEvent.UNGROUP_CELLS,"cells",e))}finally{this.model.endUpdate()}}return t},mxGraph.prototype.removeCellsFromParent=function(e){null==e&&(e=this.getSelectionCells()),this.model.beginUpdate();try{var t=this.getDefaultParent(),n=this.model.getChildCount(t);this.cellsAdded(e,t,n,null,null,!0),this.fireEvent(new mxEventObject(mxEvent.REMOVE_CELLS_FROM_PARENT,"cells",e))}finally{this.model.endUpdate()}return e},mxGraph.prototype.updateGroupBounds=function(e,t,n){null==e&&(e=this.getSelectionCells()),t=null!=t?t:0,n=null!=n&&n,this.model.beginUpdate();try{for(var a=0;a<e.length;a++){if(null!=(r=this.getCellGeometry(e[a]))){var i=this.getChildCells(e[a]);if(null!=i&&0<i.length){var s=this.getBoundingBoxFromGeometry(i);if(0<s.width&&0<s.height){var o=this.isSwimlane(e[a])?this.getStartSize(e[a]):new mxRectangle,r=r.clone();n&&(r.x+=s.x-o.width-t,r.y+=s.y-o.height-t),r.width=s.width+o.width+2*t,r.height=s.height+o.height+2*t,this.model.setGeometry(e[a],r),this.moveCells(i,-s.x+o.width+t,-s.y+o.height+t)}}}}}finally{this.model.endUpdate()}return e},mxGraph.prototype.cloneCells=function(e,t){t=null==t||t;var n=null;if(null!=e){for(var a={},i=(n=[],0);i<e.length;i++){a[s=mxCellPath.create(e[i])]=e[i],n.push(e[i])}if(0<n.length){var s=this.view.scale,o=this.view.translate;for(n=this.model.cloneCells(e,!0),i=0;i<e.length;i++)if(!t&&this.model.isEdge(n[i])&&null!=this.getEdgeValidationError(n[i],this.model.getTerminal(n[i],!0),this.model.getTerminal(n[i],!1)))n[i]=null;else{var r=this.model.getGeometry(n[i]);if(null!=r){var l=this.view.getState(e[i]),d=this.view.getState(this.model.getParent(e[i]));if(null!=l&&null!=d){var c=d.origin.x;d=d.origin.y;if(this.model.isEdge(n[i])){l=l.absolutePoints;for(var m=this.model.getTerminal(e[i],!0),u=mxCellPath.create(m);null!=m&&null==a[u];)m=this.model.getParent(m),u=mxCellPath.create(m);for(null==m&&r.setTerminalPoint(new mxPoint(l[0].x/s-o.x,l[0].y/s-o.y),!0),m=this.model.getTerminal(e[i],!1),u=mxCellPath.create(m);null!=m&&null==a[u];)m=this.model.getParent(m),u=mxCellPath.create(m);if(null==m&&(m=l.length-1,r.setTerminalPoint(new mxPoint(l[m].x/s-o.x,l[m].y/s-o.y),!1)),null!=(r=r.points))for(l=0;l<r.length;l++)r[l].x+=c,r[l].y+=d}else r.x+=c,r.y+=d}}}}else n=[]}return n},mxGraph.prototype.insertVertex=function(e,t,n,a,i,s,o,r,l){return t=this.createVertex(e,t,n,a,i,s,o,r,l),this.addCell(t,e)},mxGraph.prototype.createVertex=function(e,t,n,a,i,s,o,r,l){return(e=new mxGeometry(a,i,s,o)).relative=null!=l&&l,(n=new mxCell(n,e,r)).setId(t),n.setVertex(!0),n.setConnectable(!0),n},mxGraph.prototype.insertEdge=function(e,t,n,a,i,s){return t=this.createEdge(e,t,n,a,i,s),this.addEdge(t,e,a,i)},mxGraph.prototype.createEdge=function(e,t,n,a,i,s){return(e=new mxCell(n,new mxGeometry,s)).setId(t),e.setEdge(!0),e.geometry.relative=!0,e},mxGraph.prototype.addEdge=function(e,t,n,a,i){return this.addCell(e,t,i,n,a)},mxGraph.prototype.addCell=function(e,t,n,a,i){return this.addCells([e],t,n,a,i)[0]},mxGraph.prototype.addCells=function(e,t,n,a,i){null==t&&(t=this.getDefaultParent()),null==n&&(n=this.model.getChildCount(t)),this.model.beginUpdate();try{this.cellsAdded(e,t,n,a,i,!1,!0),this.fireEvent(new mxEventObject(mxEvent.ADD_CELLS,"cells",e,"parent",t,"index",n,"source",a,"target",i))}finally{this.model.endUpdate()}return e},mxGraph.prototype.cellsAdded=function(e,t,n,a,i,s,o){if(null!=e&&null!=t&&null!=n){this.model.beginUpdate();try{for(var r=null!=(d=s?this.view.getState(t):null)?d.origin:null,l=new mxPoint(0,0),d=0;d<e.length;d++)if(null==e[d])n--;else{var c=this.model.getParent(e[d]);if(null!=r&&e[d]!=t&&t!=c){var m=this.view.getState(c),u=null!=m?m.origin:l;if(null!=(p=this.model.getGeometry(e[d]))){var p,g=u.x-r.x,v=u.y-r.y;(p=p.clone()).translate(g,v),!p.relative&&this.model.isVertex(e[d])&&!this.isAllowNegativeCoordinates()&&(p.x=Math.max(0,p.x),p.y=Math.max(0,p.y)),this.model.setGeometry(e[d],p)}}t==c&&n+d>this.model.getChildCount(t)&&n--,this.model.add(t,e[d],n+d),this.isExtendParentsOnAdd()&&this.isExtendParent(e[d])&&this.extendParent(e[d]),(null==o||o)&&this.constrainChild(e[d]),null!=a&&this.cellConnected(e[d],a,!0),null!=i&&this.cellConnected(e[d],i,!1)}this.fireEvent(new mxEventObject(mxEvent.CELLS_ADDED,"cells",e,"parent",t,"index",n,"source",a,"target",i,"absolute",s))}finally{this.model.endUpdate()}}},mxGraph.prototype.removeCells=function(e,t){t=null==t||t,null==e&&(e=this.getDeletableCells(this.getSelectionCells())),t&&(e=this.getDeletableCells(this.addAllEdges(e))),this.model.beginUpdate();try{this.cellsRemoved(e),this.fireEvent(new mxEventObject(mxEvent.REMOVE_CELLS,"cells",e,"includeEdges",t))}finally{this.model.endUpdate()}return e},mxGraph.prototype.cellsRemoved=function(e){if(null!=e&&0<e.length){var t=this.view.scale,n=this.view.translate;this.model.beginUpdate();try{for(var a={},i=0;i<e.length;i++){var s=mxCellPath.create(e[i]);a[s]=e[i]}for(i=0;i<e.length;i++){for(var o=this.getConnections(e[i]),r=0;r<o.length;r++)if(null==a[s=mxCellPath.create(o[r])]){if(null!=(d=this.model.getGeometry(o[r]))){var l=this.view.getState(o[r]);if(null!=l){var d=d.clone(),c=l.getVisibleTerminal(!0)==e[i],m=l.absolutePoints,u=c?0:m.length-1;d.setTerminalPoint(new mxPoint(m[u].x/t-n.x,m[u].y/t-n.y),c),this.model.setTerminal(o[r],null,c),this.model.setGeometry(o[r],d)}}}this.model.remove(e[i])}this.fireEvent(new mxEventObject(mxEvent.CELLS_REMOVED,"cells",e))}finally{this.model.endUpdate()}}},mxGraph.prototype.splitEdge=function(e,t,n,a,i){a=a||0,i=i||0,null==n&&(n=this.cloneCells([e])[0]);var s=this.model.getParent(e),o=this.model.getTerminal(e,!0);this.model.beginUpdate();try{this.cellsMoved(t,a,i,!1,!1),this.cellsAdded(t,s,this.model.getChildCount(s),null,null,!0),this.cellsAdded([n],s,this.model.getChildCount(s),o,t[0],!1),this.cellConnected(e,t[0],!0),this.fireEvent(new mxEventObject(mxEvent.SPLIT_EDGE,"edge",e,"cells",t,"newEdge",n,"dx",a,"dy",i))}finally{this.model.endUpdate()}return n},mxGraph.prototype.toggleCells=function(e,t,n){null==t&&(t=this.getSelectionCells()),n&&(t=this.addAllEdges(t)),this.model.beginUpdate();try{this.cellsToggled(t,e),this.fireEvent(new mxEventObject(mxEvent.TOGGLE_CELLS,"show",e,"cells",t,"includeEdges",n))}finally{this.model.endUpdate()}return t},mxGraph.prototype.cellsToggled=function(e,t){if(null!=e&&0<e.length){this.model.beginUpdate();try{for(var n=0;n<e.length;n++)this.model.setVisible(e[n],t)}finally{this.model.endUpdate()}}},mxGraph.prototype.foldCells=function(e,t,n,a){t=null!=t&&t,null==n&&(n=this.getFoldableCells(this.getSelectionCells(),e)),this.stopEditing(!1),this.model.beginUpdate();try{this.cellsFolded(n,e,t,a),this.fireEvent(new mxEventObject(mxEvent.FOLD_CELLS,"collapse",e,"recurse",t,"cells",n))}finally{this.model.endUpdate()}return n},mxGraph.prototype.cellsFolded=function(e,t,n,a){if(null!=e&&0<e.length){this.model.beginUpdate();try{for(var i=0;i<e.length;i++)if((!a||this.isCellFoldable(e[i],t))&&t!=this.isCellCollapsed(e[i])&&(this.model.setCollapsed(e[i],t),this.swapBounds(e[i],t),this.isExtendParent(e[i])&&this.extendParent(e[i]),n)){var s=this.model.getChildren(e[i]);this.foldCells(s,t,n)}this.fireEvent(new mxEventObject(mxEvent.CELLS_FOLDED,"cells",e,"collapse",t,"recurse",n))}finally{this.model.endUpdate()}}},mxGraph.prototype.swapBounds=function(e,t){if(null!=e){var n=this.model.getGeometry(e);null!=n&&(n=n.clone(),this.updateAlternateBounds(e,n,t),n.swap(),this.model.setGeometry(e,n))}},mxGraph.prototype.updateAlternateBounds=function(e,t,n){if(null!=e&&null!=t){if(n=null!=(n=this.view.getState(e))?n.style:this.getCellStyle(e),null==t.alternateBounds){var a=t;this.collapseToPreferredSize&&(null!=(e=this.getPreferredSizeForCell(e))&&(a=e,0<(e=mxUtils.getValue(n,mxConstants.STYLE_STARTSIZE))&&(a.height=Math.max(a.height,e)))),t.alternateBounds=new mxRectangle(0,0,a.width,a.height)}if(null!=t.alternateBounds){t.alternateBounds.x=t.x,t.alternateBounds.y=t.y;var i=mxUtils.toRadians(n[mxConstants.STYLE_ROTATION]||"0");0!=i&&(e=t.alternateBounds.getCenterX()-t.getCenterX(),n=t.alternateBounds.getCenterY()-t.getCenterY(),a=Math.cos(i),i=Math.sin(i),t.alternateBounds.x+=a*e-i*n-e,t.alternateBounds.y+=i*e+a*n-n)}}},mxGraph.prototype.addAllEdges=function(e){var t=e.slice();return t.concat(this.getAllEdges(e))},mxGraph.prototype.getAllEdges=function(e){var t=[];if(null!=e)for(var n=0;n<e.length;n++){for(var a=this.model.getEdgeCount(e[n]),i=0;i<a;i++)t.push(this.model.getEdgeAt(e[n],i));a=this.model.getChildren(e[n]),t=t.concat(this.getAllEdges(a))}return t},mxGraph.prototype.updateCellSize=function(e,t){t=null!=t&&t,this.model.beginUpdate();try{this.cellSizeUpdated(e,t),this.fireEvent(new mxEventObject(mxEvent.UPDATE_CELL_SIZE,"cell",e,"ignoreChildren",t))}finally{this.model.endUpdate()}return e},mxGraph.prototype.cellSizeUpdated=function(e,t){if(null!=e){this.model.beginUpdate();try{var n=this.getPreferredSizeForCell(e),a=this.model.getGeometry(e);if(null!=n&&null!=a){var i=this.isCellCollapsed(e);a=a.clone();if(this.isSwimlane(e)){var s=this.view.getState(e),o=null!=s?s.style:this.getCellStyle(e),r=this.model.getStyle(e);null==r&&(r=""),mxUtils.getValue(o,mxConstants.STYLE_HORIZONTAL,!0)?(r=mxUtils.setStyle(r,mxConstants.STYLE_STARTSIZE,n.height+8),i&&(a.height=n.height+8),a.width=n.width):(r=mxUtils.setStyle(r,mxConstants.STYLE_STARTSIZE,n.width+8),i&&(a.width=n.width+8),a.height=n.height),this.model.setStyle(e,r)}else a.width=n.width,a.height=n.height;if(!t&&!i){var l=this.view.getBounds(this.model.getChildren(e));if(null!=l){var d=this.view.translate,c=this.view.scale,m=(l.y+l.height)/c-a.y-d.y;a.width=Math.max(a.width,(l.x+l.width)/c-a.x-d.x),a.height=Math.max(a.height,m)}}this.cellsResized([e],[a])}}finally{this.model.endUpdate()}}},mxGraph.prototype.getPreferredSizeForCell=function(e){var t=null;if(null!=e){var n=this.view.getState(e),a=null!=n?n.style:this.getCellStyle(e);if(null!=a&&!this.model.isEdge(e)){var i=a[mxConstants.STYLE_FONTSIZE]||mxConstants.DEFAULT_FONTSIZE,s=0;t=0;null==this.getImage(n)&&null==a[mxConstants.STYLE_IMAGE]||a[mxConstants.STYLE_SHAPE]!=mxConstants.SHAPE_LABEL||(a[mxConstants.STYLE_VERTICAL_ALIGN]==mxConstants.ALIGN_MIDDLE&&(s+=parseFloat(a[mxConstants.STYLE_IMAGE_WIDTH])||mxLabel.prototype.imageSize),a[mxConstants.STYLE_ALIGN]!=mxConstants.ALIGN_CENTER&&(t+=parseFloat(a[mxConstants.STYLE_IMAGE_HEIGHT])||mxLabel.prototype.imageSize)),s+=2*(a[mxConstants.STYLE_SPACING]||0),s+=a[mxConstants.STYLE_SPACING_LEFT]||0,s+=a[mxConstants.STYLE_SPACING_RIGHT]||0,t+=2*(a[mxConstants.STYLE_SPACING]||0),t+=a[mxConstants.STYLE_SPACING_TOP]||0,t+=a[mxConstants.STYLE_SPACING_BOTTOM]||0,null!=(n=this.getFoldingImage(n))&&(s+=n.width+8),t=null!=(n=this.getLabel(e))&&0<n.length?(this.isHtmlLabel(e)||(n=n.replace(/\n/g,"<br>")),e=(i=mxUtils.getSizeForString(n,i,a[mxConstants.STYLE_FONTFAMILY])).width+s,t=i.height+t,mxUtils.getValue(a,mxConstants.STYLE_HORIZONTAL,!0)||(a=t,t=e,e=a),this.gridEnabled&&(e=this.snap(e+this.gridSize/2),t=this.snap(t+this.gridSize/2)),new mxRectangle(0,0,e,t)):new mxRectangle(0,0,a=4*this.gridSize,a)}}return t},mxGraph.prototype.handleGesture=function(e,t){if(.2<Math.abs(1-t.scale)){var n=this.view.scale,a=this.view.translate,i=e.width*t.scale,s=e.height*t.scale,o=e.y-(s-e.height)/2;n=new mxRectangle(this.snap((e.x-(i-e.width)/2)/n)-a.x,this.snap(o/n)-a.y,this.snap(i/n),this.snap(s/n));this.resizeCell(e.cell,n)}},mxGraph.prototype.resizeCell=function(e,t){return this.resizeCells([e],[t])[0]},mxGraph.prototype.resizeCells=function(e,t){this.model.beginUpdate();try{this.cellsResized(e,t),this.fireEvent(new mxEventObject(mxEvent.RESIZE_CELLS,"cells",e,"bounds",t))}finally{this.model.endUpdate()}return e},mxGraph.prototype.cellsResized=function(e,t){if(null!=e&&null!=t&&e.length==t.length){this.model.beginUpdate();try{for(var n=0;n<e.length;n++){var a=t[n],i=this.model.getGeometry(e[n]);if(null!=i&&(i.x!=a.x||i.y!=a.y||i.width!=a.width||i.height!=a.height)){if((i=i.clone()).relative){var s=i.offset;null!=s&&(s.x+=a.x-i.x,s.y+=a.y-i.y)}else i.x=a.x,i.y=a.y;i.width=a.width,i.height=a.height,!i.relative&&this.model.isVertex(e[n])&&!this.isAllowNegativeCoordinates()&&(i.x=Math.max(0,i.x),i.y=Math.max(0,i.y)),this.model.setGeometry(e[n],i),this.isExtendParent(e[n])&&this.extendParent(e[n])}}this.resetEdgesOnResize&&this.resetEdges(e),this.fireEvent(new mxEventObject(mxEvent.CELLS_RESIZED,"cells",e,"bounds",t))}finally{this.model.endUpdate()}}},mxGraph.prototype.extendParent=function(e){if(null!=e){var t=this.model.getParent(e),n=this.model.getGeometry(t);null!=t&&null!=n&&!this.isCellCollapsed(t)&&(null!=(e=this.model.getGeometry(e))&&(n.width<e.x+e.width||n.height<e.y+e.height))&&((n=n.clone()).width=Math.max(n.width,e.x+e.width),n.height=Math.max(n.height,e.y+e.height),this.cellsResized([t],[n]))}},mxGraph.prototype.importCells=function(e,t,n,a,i){return this.moveCells(e,t,n,!0,a,i)},mxGraph.prototype.moveCells=function(e,t,n,a,i,s){if(t=null!=t?t:0,n=null!=n?n:0,a=null!=a&&a,null!=e&&(0!=t||0!=n||a||null!=i)){this.model.beginUpdate();try{a&&(e=this.cloneCells(e,this.isCloneInvalidEdges()),null==i&&(i=this.getDefaultParent()));var o=this.isAllowNegativeCoordinates();if(null!=i&&this.setAllowNegativeCoordinates(!0),this.cellsMoved(e,t,n,!a&&this.isDisconnectOnMove()&&this.isAllowDanglingEdges(),null==i),this.setAllowNegativeCoordinates(o),null!=i){var r=this.model.getChildCount(i);this.cellsAdded(e,i,r,null,null,!0)}this.fireEvent(new mxEventObject(mxEvent.MOVE_CELLS,"cells",e,"dx",t,"dy",n,"clone",a,"target",i,"event",s))}finally{this.model.endUpdate()}}return e},mxGraph.prototype.cellsMoved=function(e,t,n,a,i){if(null!=e&&(0!=t||0!=n)){this.model.beginUpdate();try{a&&this.disconnectGraph(e);for(var s=0;s<e.length;s++)this.translateCell(e[s],t,n),i&&this.constrainChild(e[s]);this.resetEdgesOnMove&&this.resetEdges(e),this.fireEvent(new mxEventObject(mxEvent.CELLS_MOVED,"cells",e,"dx",n,"dy",n,"disconnect",a))}finally{this.model.endUpdate()}}},mxGraph.prototype.translateCell=function(e,t,n){var a=this.model.getGeometry(e);null!=a&&((a=a.clone()).translate(t,n),!a.relative&&this.model.isVertex(e)&&!this.isAllowNegativeCoordinates()&&(a.x=Math.max(0,a.x),a.y=Math.max(0,a.y)),a.relative&&!this.model.isEdge(e)&&(null==a.offset?a.offset=new mxPoint(t,n):(a.offset.x+=t,a.offset.y+=n)),this.model.setGeometry(e,a))},mxGraph.prototype.getCellContainmentArea=function(e){if(null!=e&&!this.model.isEdge(e)){var t=this.model.getParent(e);if(t==this.getDefaultParent()||t==this.getCurrentRoot())return this.getMaximumGraphBounds();if(null!=t&&t!=this.getDefaultParent())if(null!=(i=this.model.getGeometry(t))){var n=e=0,a=i.width,i=i.height;return this.isSwimlane(t)&&(e=(t=this.getStartSize(t)).width,a-=t.width,n=t.height,i-=t.height),new mxRectangle(e,n,a,i)}}return null},mxGraph.prototype.getMaximumGraphBounds=function(){return this.maximumGraphBounds},mxGraph.prototype.constrainChild=function(e){if(null!=e){var t=this.model.getGeometry(e),n=this.isConstrainChild(e)?this.getCellContainmentArea(e):this.getMaximumGraphBounds();null!=t&&null!=n&&!t.relative&&(t.x<n.x||t.y<n.y||n.width<t.x+t.width||n.height<t.y+t.height)&&(e=this.getOverlap(e),0<n.width&&(t.x=Math.min(t.x,n.x+n.width-(1-e)*t.width)),0<n.height&&(t.y=Math.min(t.y,n.y+n.height-(1-e)*t.height)),t.x=Math.max(t.x,n.x-t.width*e),t.y=Math.max(t.y,n.y-t.height*e))}},mxGraph.prototype.resetEdges=function(e){if(null!=e){for(var t={},n=0;n<e.length;n++){var a=mxCellPath.create(e[n]);t[a]=e[n]}this.model.beginUpdate();try{for(n=0;n<e.length;n++){var i=this.model.getEdges(e[n]);if(null!=i)for(a=0;a<i.length;a++){var s=this.view.getState(i[a]),o=null!=s?s.getVisibleTerminal(!0):this.view.getVisibleTerminal(i[a],!0),r=null!=s?s.getVisibleTerminal(!1):this.view.getVisibleTerminal(i[a],!1),l=mxCellPath.create(o),d=mxCellPath.create(r);(null==t[l]||null==t[d])&&this.resetEdge(i[a])}this.resetEdges(this.model.getChildren(e[n]))}}finally{this.model.endUpdate()}}},mxGraph.prototype.resetEdge=function(e){var t=this.model.getGeometry(e);return null!=t&&null!=t.points&&0<t.points.length&&((t=t.clone()).points=[],this.model.setGeometry(e,t)),e},mxGraph.prototype.getAllConnectionConstraints=function(e,t){return null!=e&&null!=e.shape&&null!=e.shape.stencil?e.shape.stencil.constraints:null},mxGraph.prototype.getConnectionConstraint=function(e,t,n){t=null;var a=e.style[n?mxConstants.STYLE_EXIT_X:mxConstants.STYLE_ENTRY_X];if(null!=a){var i=e.style[n?mxConstants.STYLE_EXIT_Y:mxConstants.STYLE_ENTRY_Y];null!=i&&(t=new mxPoint(parseFloat(a),parseFloat(i)))}return a=!1,null!=t&&(a=mxUtils.getValue(e.style,n?mxConstants.STYLE_EXIT_PERIMETER:mxConstants.STYLE_ENTRY_PERIMETER,!0)),new mxConnectionConstraint(t,a)},mxGraph.prototype.setConnectionConstraint=function(e,t,n,a){if(null!=a){this.model.beginUpdate();try{null==a||null==a.point?(this.setCellStyles(n?mxConstants.STYLE_EXIT_X:mxConstants.STYLE_ENTRY_X,null,[e]),this.setCellStyles(n?mxConstants.STYLE_EXIT_Y:mxConstants.STYLE_ENTRY_Y,null,[e]),this.setCellStyles(n?mxConstants.STYLE_EXIT_PERIMETER:mxConstants.STYLE_ENTRY_PERIMETER,null,[e])):null!=a.point&&(this.setCellStyles(n?mxConstants.STYLE_EXIT_X:mxConstants.STYLE_ENTRY_X,a.point.x,[e]),this.setCellStyles(n?mxConstants.STYLE_EXIT_Y:mxConstants.STYLE_ENTRY_Y,a.point.y,[e]),a.perimeter?this.setCellStyles(n?mxConstants.STYLE_EXIT_PERIMETER:mxConstants.STYLE_ENTRY_PERIMETER,null,[e]):this.setCellStyles(n?mxConstants.STYLE_EXIT_PERIMETER:mxConstants.STYLE_ENTRY_PERIMETER,"0",[e]))}finally{this.model.endUpdate()}}},mxGraph.prototype.getConnectionPoint=function(e,t){var n=null;if(null!=e){var a=this.view.getPerimeterBounds(e),i=new mxPoint(a.getCenterX(),a.getCenterY()),s=e.style[mxConstants.STYLE_DIRECTION],o=0;if(null!=s&&("north"==s?o+=270:"west"==s?o+=180:"south"==s&&(o+=90),"north"==s||"south"==s)){a.x+=a.width/2-a.height/2,a.y+=a.height/2-a.width/2;var r=a.width;a.width=a.height,a.height=r}if(null!=t.point){var l=n=1,d=0,c=0;if(this.getModel().isVertex(e.cell)){var m=e.style[mxConstants.STYLE_FLIPH],u=e.style[mxConstants.STYLE_FLIPV];null!=e.shape.stencil&&(m=1==mxUtils.getValue(e.style,"stencilFlipH",0)||m,u=1==mxUtils.getValue(e.style,"stencilFlipV",0)||u),"north"!=s&&"south"!=s||(r=m,m=u,u=r),m&&(n=-1,d=-a.width),u&&(l=-1,c=-a.height)}n=new mxPoint(a.x+t.point.x*a.width*n-d,a.y+t.point.y*a.height*l-c)}s=e.style[mxConstants.STYLE_ROTATION]||0,t.perimeter?(0!=o&&null!=n&&(r=a=0,90==o?r=1:180==o?a=-1:270==s&&(r=-1),n=mxUtils.getRotatedPoint(n,a,r,i)),null!=n&&t.perimeter&&(n=this.view.getPerimeterPoint(e,n,!1))):s+=o,0!=s&&null!=n&&(o=mxUtils.toRadians(s),a=Math.cos(o),r=Math.sin(o),n=mxUtils.getRotatedPoint(n,a,r,i))}return n},mxGraph.prototype.connectCell=function(e,t,n,a){this.model.beginUpdate();try{var i=this.model.getTerminal(e,n);this.cellConnected(e,t,n,a),this.fireEvent(new mxEventObject(mxEvent.CONNECT_CELL,"edge",e,"terminal",t,"source",n,"previous",i))}finally{this.model.endUpdate()}return e},mxGraph.prototype.cellConnected=function(e,t,n,a){if(null!=e){this.model.beginUpdate();try{var i=this.model.getTerminal(e,n);this.setConnectionConstraint(e,t,n,a),this.isPortsEnabled()&&(a=null,this.isPort(t)&&(a=t.getId(),t=this.getTerminalForPort(t,n)),this.setCellStyles(n?mxConstants.STYLE_SOURCE_PORT:mxConstants.STYLE_TARGET_PORT,a,[e])),this.model.setTerminal(e,t,n),this.resetEdgesOnConnect&&this.resetEdge(e),this.fireEvent(new mxEventObject(mxEvent.CELL_CONNECTED,"edge",e,"terminal",t,"source",n,"previous",i))}finally{this.model.endUpdate()}}},mxGraph.prototype.disconnectGraph=function(e){if(null!=e){this.model.beginUpdate();try{for(var t=this.view.scale,n=this.view.translate,a={},i=0;i<e.length;i++){a[mxCellPath.create(e[i])]=e[i]}for(i=0;i<e.length;i++)if(this.model.isEdge(e[i])){if(null!=(r=this.model.getGeometry(e[i]))){var s=this.view.getState(e[i]),o=this.view.getState(this.model.getParent(e[i]));if(null!=s&&null!=o){var r=r.clone(),l=-o.origin.x,d=-o.origin.y,c=s.absolutePoints,m=this.model.getTerminal(e[i],!0);if(null!=m&&this.isCellDisconnectable(e[i],m,!0)){for(var u=mxCellPath.create(m);null!=m&&null==a[u];)m=this.model.getParent(m),u=mxCellPath.create(m);null==m&&(r.setTerminalPoint(new mxPoint(c[0].x/t-n.x+l,c[0].y/t-n.y+d),!0),this.model.setTerminal(e[i],null,!0))}var p=this.model.getTerminal(e[i],!1);if(null!=p&&this.isCellDisconnectable(e[i],p,!1)){for(var g=mxCellPath.create(p);null!=p&&null==a[g];)p=this.model.getParent(p),g=mxCellPath.create(p);if(null==p){var v=c.length-1;r.setTerminalPoint(new mxPoint(c[v].x/t-n.x+l,c[v].y/t-n.y+d),!1),this.model.setTerminal(e[i],null,!1)}}this.model.setGeometry(e[i],r)}}}}finally{this.model.endUpdate()}}},mxGraph.prototype.getCurrentRoot=function(){return this.view.currentRoot},mxGraph.prototype.getTranslateForRoot=function(e){return null},mxGraph.prototype.isPort=function(e){return!1},mxGraph.prototype.getTerminalForPort=function(e,t){return this.model.getParent(e)},mxGraph.prototype.getChildOffsetForCell=function(e){return null},mxGraph.prototype.enterGroup=function(e){null!=(e=e||this.getSelectionCell())&&this.isValidRoot(e)&&(this.view.setCurrentRoot(e),this.clearSelection())},mxGraph.prototype.exitGroup=function(){var e=this.model.getRoot(),t=this.getCurrentRoot();if(null!=t){for(var n=this.model.getParent(t);n!=e&&!this.isValidRoot(n)&&this.model.getParent(n)!=e;)n=this.model.getParent(n);n==e||this.model.getParent(n)==e?this.view.setCurrentRoot(null):this.view.setCurrentRoot(n),null!=this.view.getState(t)&&this.setSelectionCell(t)}},mxGraph.prototype.home=function(){var e=this.getCurrentRoot();null!=e&&(this.view.setCurrentRoot(null),null!=this.view.getState(e)&&this.setSelectionCell(e))},mxGraph.prototype.isValidRoot=function(e){return null!=e},mxGraph.prototype.getGraphBounds=function(){return this.view.getGraphBounds()},mxGraph.prototype.getCellBounds=function(e,t,n){var a=[e];if(t&&(a=a.concat(this.model.getEdges(e))),a=this.view.getBounds(a),n){n=this.model.getChildCount(e);for(var i=0;i<n;i++){var s=this.getCellBounds(this.model.getChildAt(e,i),t,!0);null!=a?a.add(s):a=s}}return a},mxGraph.prototype.getBoundingBoxFromGeometry=function(e,t){t=null!=t&&t;var n=null;if(null!=e)for(var a=0;a<e.length;a++)if(t||this.model.isVertex(e[a])){var i=this.getCellGeometry(e[a]);if(null!=i){var s=i.points;if(null!=s&&0<s.length){for(var o=new mxRectangle(s[0].x,s[0].y,0,0),r=function(e){null!=e&&o.add(new mxRectangle(e.x,e.y,0,0))},l=1;l<s.length;l++)r(s[l]);r(i.getTerminalPoint(!0)),r(i.getTerminalPoint(!1))}null==n?n=new mxRectangle(i.x,i.y,i.width,i.height):n.add(i)}}return n},mxGraph.prototype.refresh=function(e){this.view.clear(e,null==e),this.view.validate(),this.sizeDidChange(),this.fireEvent(new mxEventObject(mxEvent.REFRESH))},mxGraph.prototype.snap=function(e){return this.gridEnabled&&(e=Math.round(e/this.gridSize)*this.gridSize),e},mxGraph.prototype.panGraph=function(e,t){if(this.useScrollbarsForPanning&&mxUtils.hasScrollbars(this.container))this.container.scrollLeft=-e,this.container.scrollTop=-t;else{var n=this.view.getCanvas();if(this.dialect==mxConstants.DIALECT_SVG)if(0==e&&0==t){if(mxClient.IS_IE?n.setAttribute("transform","translate("+e+","+t+")"):n.removeAttribute("transform"),null!=this.shiftPreview1){for(var a=this.shiftPreview1.firstChild;null!=a;){var i=a.nextSibling;this.container.appendChild(a),a=i}for(this.shiftPreview1.parentNode.removeChild(this.shiftPreview1),this.shiftPreview1=null,this.container.appendChild(n.parentNode),a=this.shiftPreview2.firstChild;null!=a;)i=a.nextSibling,this.container.appendChild(a),a=i;this.shiftPreview2.parentNode.removeChild(this.shiftPreview2),this.shiftPreview2=null}}else{if(n.setAttribute("transform","translate("+e+","+t+")"),null==this.shiftPreview1){this.shiftPreview1=document.createElement("div"),this.shiftPreview1.style.position="absolute",this.shiftPreview1.style.overflow="visible",this.shiftPreview2=document.createElement("div"),this.shiftPreview2.style.position="absolute",this.shiftPreview2.style.overflow="visible";var s=this.shiftPreview1;for(a=this.container.firstChild;null!=a;)i=a.nextSibling,a!=n.parentNode?s.appendChild(a):s=this.shiftPreview2,a=i;this.container.insertBefore(this.shiftPreview1,n.parentNode),this.container.appendChild(this.shiftPreview2)}this.shiftPreview1.style.left=e+"px",this.shiftPreview1.style.top=t+"px",this.shiftPreview2.style.left=e+"px",this.shiftPreview2.style.top=t+"px"}else n.style.left=e+"px",n.style.top=t+"px";this.panDx=e,this.panDy=t,this.fireEvent(new mxEventObject(mxEvent.PAN))}},mxGraph.prototype.zoomIn=function(){this.zoom(this.zoomFactor)},mxGraph.prototype.zoomOut=function(){this.zoom(1/this.zoomFactor)},mxGraph.prototype.zoomActual=function(){1==this.view.scale?this.view.setTranslate(0,0):(this.view.translate.x=0,this.view.translate.y=0,this.view.setScale(1))},mxGraph.prototype.zoomTo=function(e,t){this.zoom(e/this.view.scale,t)},mxGraph.prototype.zoom=function(e,t){t=null!=t?t:this.centerZoom;var n=this.view.scale*e,a=this.view.getState(this.getSelectionCell());if(this.keepSelectionVisibleOnZoom&&null!=a)a=new mxRectangle(a.x*e,a.y*e,a.width*e,a.height*e),this.view.scale=n,this.scrollRectToVisible(a)||(this.view.revalidate(),this.view.setScale(n));else if(t&&!mxUtils.hasScrollbars(this.container)){a=this.container.offsetWidth;var i=this.container.offsetHeight;if(1<e){var s=(e-1)/(2*n);a=a*-s,i=i*-s}else a*=s=(1/e-1)/(2*this.view.scale),i*=s;this.view.scaleAndTranslate(n,this.view.translate.x+a,this.view.translate.y+i)}else this.view.setScale(n),mxUtils.hasScrollbars(this.container)&&(i=a=0,t&&(a=this.container.offsetWidth*(e-1)/2,i=this.container.offsetHeight*(e-1)/2),this.container.scrollLeft=Math.round(this.container.scrollLeft*e+a),this.container.scrollTop=Math.round(this.container.scrollTop*e+i))},mxGraph.prototype.zoomToRect=function(e){var t=this.container.clientWidth/e.width/(this.container.clientHeight/e.height);e.x=Math.max(0,e.x),e.y=Math.max(0,e.y);var n=Math.min(this.container.scrollWidth,e.x+e.width),a=Math.min(this.container.scrollHeight,e.y+e.height);e.width=n-e.x,e.height=a-e.y,t<1?(n=((t=e.height/t)-e.height)/2,e.height=t,t=Math.min(e.y,n),e.y-=t,a=Math.min(this.container.scrollHeight,e.y+e.height),e.height=a-e.y):(n=((t*=e.width)-e.width)/2,e.width=t,t=Math.min(e.x,n),e.x-=t,n=Math.min(this.container.scrollWidth,e.x+e.width),e.width=n-e.x),t=this.container.clientWidth/e.width,n=this.view.scale*t,mxUtils.hasScrollbars(this.container)?(this.view.setScale(n),this.container.scrollLeft=Math.round(e.x*t),this.container.scrollTop=Math.round(e.y*t)):this.view.scaleAndTranslate(n,this.view.translate.x-e.x/this.view.scale,this.view.translate.y-e.y/this.view.scale)},mxGraph.prototype.fit=function(e,t){if(null!=this.container){e=null!=e?e:0,t=null!=t&&t;var n=this.container.clientWidth,a=this.container.clientHeight,i=this.view.getGraphBounds();t&&null!=i.x&&null!=i.y&&(i.width+=i.x,i.height+=i.y,i.x=0,i.y=0);var s=this.view.scale,o=i.width/s,r=i.height/s;null!=this.backgroundImage&&(o=Math.max(o,this.backgroundImage.width-i.x/s),r=Math.max(r,this.backgroundImage.height-i.y/s));var l=t?e:2*e;n=Math.floor(100*Math.min(n/(o+l),a/(r+l)))/100;null!=this.minFitScale&&(n=Math.max(n,this.minFitScale)),null!=this.maxFitScale&&(n=Math.min(n,this.maxFitScale)),t?this.view.scale!=n&&this.view.setScale(n):mxUtils.hasScrollbars(this.container)?(this.view.setScale(n),null!=i.x&&(this.container.scrollLeft=Math.round(i.x/s)*n-e-Math.max(0,(this.container.clientWidth-o*n)/2)),null!=i.y&&(this.container.scrollTop=Math.round(i.y/s)*n-e-Math.max(0,(this.container.clientHeight-r*n)/2))):this.view.scaleAndTranslate(n,null!=i.x?Math.floor(this.view.translate.x-i.x/s+e+1):e,null!=i.y?Math.floor(this.view.translate.y-i.y/s+e+1):e)}return this.view.scale},mxGraph.prototype.scrollCellToVisible=function(e,t){var n=-this.view.translate.x,a=-this.view.translate.y,i=this.view.getState(e);null!=i&&(n=new mxRectangle(n+i.x,a+i.y,i.width,i.height),t&&null!=this.container&&(a=this.container.clientWidth,i=this.container.clientHeight,n.x=n.getCenterX()-a/2,n.width=a,n.y=n.getCenterY()-i/2,n.height=i),this.scrollRectToVisible(n)&&this.view.setTranslate(this.view.translate.x,this.view.translate.y))},mxGraph.prototype.scrollRectToVisible=function(e){var t=!1;if(null!=e){var n=this.container.offsetWidth,a=this.container.offsetHeight,i=Math.min(n,e.width),s=Math.min(a,e.height);if(mxUtils.hasScrollbars(this.container)){n=this.container,e.x+=this.view.translate.x,e.y+=this.view.translate.y;var o=n.scrollLeft-e.x;a=Math.max(o-n.scrollLeft,0);0<o?n.scrollLeft-=o+2:0<(o=e.x+i-n.scrollLeft-n.clientWidth)&&(n.scrollLeft+=o+2),i=n.scrollTop-e.y,o=Math.max(0,i-n.scrollTop),0<i?n.scrollTop-=i+2:0<(i=e.y+s-n.scrollTop-n.clientHeight)&&(n.scrollTop+=i+2),!this.useScrollbarsForPanning&&(0!=a||0!=o)&&this.view.setTranslate(a,o)}else{o=-this.view.translate.x;var r=-this.view.translate.y,l=this.view.scale;e.x+i>o+n&&(this.view.translate.x-=(e.x+i-n-o)/l,t=!0),e.y+s>r+a&&(this.view.translate.y-=(e.y+s-a-r)/l,t=!0),e.x<o&&(this.view.translate.x+=(o-e.x)/l,t=!0),e.y<r&&(this.view.translate.y+=(r-e.y)/l,t=!0),t&&(this.view.refresh(),null!=this.selectionCellsHandler&&this.selectionCellsHandler.refresh())}}return t},mxGraph.prototype.getCellGeometry=function(e){return this.model.getGeometry(e)},mxGraph.prototype.isCellVisible=function(e){return this.model.isVisible(e)},mxGraph.prototype.isCellCollapsed=function(e){return this.model.isCollapsed(e)},mxGraph.prototype.isCellConnectable=function(e){return this.model.isConnectable(e)},mxGraph.prototype.isOrthogonal=function(e){var t=e.style[mxConstants.STYLE_ORTHOGONAL];return null!=t?t:(e=this.view.getEdgeStyle(e))==mxEdgeStyle.SegmentConnector||e==mxEdgeStyle.ElbowConnector||e==mxEdgeStyle.SideToSide||e==mxEdgeStyle.TopToBottom||e==mxEdgeStyle.EntityRelation||e==mxEdgeStyle.OrthConnector},mxGraph.prototype.isLoop=function(e){var t=e.getVisibleTerminalState(!0);return e=e.getVisibleTerminalState(!1),null!=t&&t==e},mxGraph.prototype.isCloneEvent=function(e){return mxEvent.isControlDown(e)},mxGraph.prototype.isToggleEvent=function(e){return mxClient.IS_MAC?mxEvent.isMetaDown(e):mxEvent.isControlDown(e)},mxGraph.prototype.isGridEnabledEvent=function(e){return null!=e&&!mxEvent.isAltDown(e)},mxGraph.prototype.isConstrainedEvent=function(e){return mxEvent.isShiftDown(e)},mxGraph.prototype.isForceMarqueeEvent=function(e){return mxEvent.isAltDown(e)},mxGraph.prototype.validationAlert=function(e){mxUtils.alert(e)},mxGraph.prototype.isEdgeValid=function(e,t,n){return null==this.getEdgeValidationError(e,t,n)},mxGraph.prototype.getEdgeValidationError=function(e,t,n){if(null!=e&&!this.isAllowDanglingEdges()&&(null==t||null==n))return"";if(null!=e&&null==this.model.getTerminal(e,!0)&&null==this.model.getTerminal(e,!1))return null;if(!this.allowLoops&&t==n&&null!=t||!this.isValidConnection(t,n))return"";if(null==t||null==n)return this.allowDanglingEdges?null:"";var a="";this.multigraph||(1<(i=this.model.getEdgesBetween(t,n,!0)).length||1==i.length&&i[0]!=e)&&(a+=(mxResources.get(this.alreadyConnectedResource)||this.alreadyConnectedResource)+"\n");var i=this.model.getDirectedEdgeCount(t,!0,e),s=this.model.getDirectedEdgeCount(n,!1,e);if(null!=this.multiplicities)for(var o=0;o<this.multiplicities.length;o++){var r=this.multiplicities[o].check(this,e,t,n,i,s);null!=r&&(a+=r)}return null!=(r=this.validateEdge(e,t,n))&&(a+=r),0<a.length?a:null},mxGraph.prototype.validateEdge=function(e,t,n){return null},mxGraph.prototype.validateGraph=function(e,t){e=null!=e?e:this.model.getRoot(),t=null!=t?t:{};for(var n=!0,a=this.model.getChildCount(e),i=0;i<a;i++){var s=this.model.getChildAt(e,i),o=t;this.isValidRoot(s)&&(o={}),null!=(o=this.validateGraph(s,o))?this.setCellWarning(s,o.replace(/\n/g,"<br>")):this.setCellWarning(s,null),n=n&&null==o}return a="",this.isCellCollapsed(e)&&!n&&(a+=(mxResources.get(this.containsValidationErrorsResource)||this.containsValidationErrorsResource)+"\n"),a=this.model.isEdge(e)?a+(this.getEdgeValidationError(e,this.model.getTerminal(e,!0),this.model.getTerminal(e,!1))||""):a+(this.getCellValidationError(e)||""),null!=(i=this.validateCell(e,t))&&(a+=i),null==this.model.getParent(e)&&this.view.validate(),0<a.length||!n?a:null},mxGraph.prototype.getCellValidationError=function(e){var t=this.model.getDirectedEdgeCount(e,!0),n=this.model.getDirectedEdgeCount(e,!1);e=this.model.getValue(e);var a="";if(null!=this.multiplicities)for(var i=0;i<this.multiplicities.length;i++){var s=this.multiplicities[i];s.source&&mxUtils.isNode(e,s.type,s.attr,s.value)&&(0==s.max&&0<t||1==s.min&&0==t||1==s.max&&1<t)?a+=s.countError+"\n":!s.source&&mxUtils.isNode(e,s.type,s.attr,s.value)&&(0==s.max&&0<n||1==s.min&&0==n||1==s.max&&1<n)&&(a+=s.countError+"\n")}return 0<a.length?a:null},mxGraph.prototype.validateCell=function(e,t){return null},mxGraph.prototype.getBackgroundImage=function(){return this.backgroundImage},mxGraph.prototype.setBackgroundImage=function(e){this.backgroundImage=e},mxGraph.prototype.getFoldingImage=function(e){if(null!=e&&this.foldingEnabled&&!this.getModel().isEdge(e.cell)){var t=this.isCellCollapsed(e.cell);if(this.isCellFoldable(e.cell,!t))return t?this.collapsedImage:this.expandedImage}return null},mxGraph.prototype.convertValueToString=function(e){if(null!=(e=this.model.getValue(e))){if(mxUtils.isNode(e))return e.nodeName;if("function"==typeof e.toString)return e.toString()}return""},mxGraph.prototype.getLabel=function(e){var t="";if(this.labelsVisible&&null!=e){var n=null!=(n=this.view.getState(e))?n.style:this.getCellStyle(e);mxUtils.getValue(n,mxConstants.STYLE_NOLABEL,!1)||(t=this.convertValueToString(e))}return t},mxGraph.prototype.isHtmlLabel=function(e){return this.isHtmlLabels()},mxGraph.prototype.isHtmlLabels=function(){return this.htmlLabels},mxGraph.prototype.setHtmlLabels=function(e){this.htmlLabels=e},mxGraph.prototype.isWrapping=function(e){var t=this.view.getState(e);return null!=(e=null!=t?t.style:this.getCellStyle(e))&&"wrap"==e[mxConstants.STYLE_WHITE_SPACE]},mxGraph.prototype.isLabelClipped=function(e){var t=this.view.getState(e);return null!=(e=null!=t?t.style:this.getCellStyle(e))&&"hidden"==e[mxConstants.STYLE_OVERFLOW]},mxGraph.prototype.getTooltip=function(e,n,t,a){var i=null;return null!=e&&(null==e.control||n!=e.control.node&&n.parentNode!=e.control.node||(i=this.collapseExpandResource,i=mxResources.get(i)||i),null==i&&null!=e.overlays&&e.overlays.visit(function(e,t){null!=i||n!=t.node&&n.parentNode!=t.node||(i=t.overlay.toString())}),null==i&&(null!=(t=this.selectionCellsHandler.getHandler(e.cell))&&"function"==typeof t.getTooltipForNode&&(i=t.getTooltipForNode(n))),null==i&&(i=this.getTooltipForCell(e.cell))),i},mxGraph.prototype.getTooltipForCell=function(e){return null!=e&&null!=e.getTooltip?e.getTooltip():this.convertValueToString(e)},mxGraph.prototype.getCursorForCell=function(e){return null},mxGraph.prototype.getStartSize=function(e){var t=new mxRectangle,n=this.view.getState(e);return null!=(e=null!=n?n.style:this.getCellStyle(e))&&(n=parseInt(mxUtils.getValue(e,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)),mxUtils.getValue(e,mxConstants.STYLE_HORIZONTAL,!0)?t.height=n:t.width=n),t},mxGraph.prototype.getImage=function(e){return null!=e&&null!=e.style?e.style[mxConstants.STYLE_IMAGE]:null},mxGraph.prototype.getVerticalAlign=function(e){return null!=e&&null!=e.style?e.style[mxConstants.STYLE_VERTICAL_ALIGN]||mxConstants.ALIGN_MIDDLE:null},mxGraph.prototype.getIndicatorColor=function(e){return null!=e&&null!=e.style?e.style[mxConstants.STYLE_INDICATOR_COLOR]:null},mxGraph.prototype.getIndicatorGradientColor=function(e){return null!=e&&null!=e.style?e.style[mxConstants.STYLE_INDICATOR_GRADIENTCOLOR]:null},mxGraph.prototype.getIndicatorShape=function(e){return null!=e&&null!=e.style?e.style[mxConstants.STYLE_INDICATOR_SHAPE]:null},mxGraph.prototype.getIndicatorImage=function(e){return null!=e&&null!=e.style?e.style[mxConstants.STYLE_INDICATOR_IMAGE]:null},mxGraph.prototype.getBorder=function(){return this.border},mxGraph.prototype.setBorder=function(e){this.border=e},mxGraph.prototype.isSwimlane=function(e){var t;if(null!=e&&this.model.getParent(e)!=this.model.getRoot()&&(null!=(t=null!=(t=this.view.getState(e))?t.style:this.getCellStyle(e))&&!this.model.isEdge(e)))return t[mxConstants.STYLE_SHAPE]==mxConstants.SHAPE_SWIMLANE;return!1},mxGraph.prototype.isResizeContainer=function(){return this.resizeContainer},mxGraph.prototype.setResizeContainer=function(e){this.resizeContainer=e},mxGraph.prototype.isEnabled=function(){return this.enabled},mxGraph.prototype.setEnabled=function(e){this.enabled=e},mxGraph.prototype.isEscapeEnabled=function(){return this.escapeEnabled},mxGraph.prototype.setEscapeEnabled=function(e){this.escapeEnabled=e},mxGraph.prototype.isInvokesStopCellEditing=function(){return this.invokesStopCellEditing},mxGraph.prototype.setInvokesStopCellEditing=function(e){this.invokesStopCellEditing=e},mxGraph.prototype.isEnterStopsCellEditing=function(){return this.enterStopsCellEditing},mxGraph.prototype.setEnterStopsCellEditing=function(e){this.enterStopsCellEditing=e},mxGraph.prototype.isCellLocked=function(e){var t=this.model.getGeometry(e);return this.isCellsLocked()||null!=t&&this.model.isVertex(e)&&t.relative},mxGraph.prototype.isCellsLocked=function(){return this.cellsLocked},mxGraph.prototype.setCellsLocked=function(e){this.cellsLocked=e},mxGraph.prototype.getCloneableCells=function(e){return this.model.filterCells(e,mxUtils.bind(this,function(e){return this.isCellCloneable(e)}))},mxGraph.prototype.isCellCloneable=function(e){var t=this.view.getState(e);return e=null!=t?t.style:this.getCellStyle(e),this.isCellsCloneable()&&0!=e[mxConstants.STYLE_CLONEABLE]},mxGraph.prototype.isCellsCloneable=function(){return this.cellsCloneable},mxGraph.prototype.setCellsCloneable=function(e){this.cellsCloneable=e},mxGraph.prototype.getExportableCells=function(e){return this.model.filterCells(e,mxUtils.bind(this,function(e){return this.canExportCell(e)}))},mxGraph.prototype.canExportCell=function(e){return this.exportEnabled},mxGraph.prototype.getImportableCells=function(e){return this.model.filterCells(e,mxUtils.bind(this,function(e){return this.canImportCell(e)}))},mxGraph.prototype.canImportCell=function(e){return this.importEnabled},mxGraph.prototype.isCellSelectable=function(e){return this.isCellsSelectable()},mxGraph.prototype.isCellsSelectable=function(){return this.cellsSelectable},mxGraph.prototype.setCellsSelectable=function(e){this.cellsSelectable=e},mxGraph.prototype.getDeletableCells=function(e){return this.model.filterCells(e,mxUtils.bind(this,function(e){return this.isCellDeletable(e)}))},mxGraph.prototype.isCellDeletable=function(e){var t=this.view.getState(e);return e=null!=t?t.style:this.getCellStyle(e),this.isCellsDeletable()&&0!=e[mxConstants.STYLE_DELETABLE]},mxGraph.prototype.isCellsDeletable=function(){return this.cellsDeletable},mxGraph.prototype.setCellsDeletable=function(e){this.cellsDeletable=e},mxGraph.prototype.isLabelMovable=function(e){return!this.isCellLocked(e)&&(this.model.isEdge(e)&&this.edgeLabelsMovable||this.model.isVertex(e)&&this.vertexLabelsMovable)},mxGraph.prototype.getMovableCells=function(e){return this.model.filterCells(e,mxUtils.bind(this,function(e){return this.isCellMovable(e)}))},mxGraph.prototype.isCellMovable=function(e){var t=null!=(t=this.view.getState(e))?t.style:this.getCellStyle(e);return this.isCellsMovable()&&!this.isCellLocked(e)&&0!=t[mxConstants.STYLE_MOVABLE]},mxGraph.prototype.isCellsMovable=function(){return this.cellsMovable},mxGraph.prototype.setCellsMovable=function(e){this.cellsMovable=e},mxGraph.prototype.isGridEnabled=function(){return this.gridEnabled},mxGraph.prototype.setGridEnabled=function(e){this.gridEnabled=e},mxGraph.prototype.isPortsEnabled=function(){return this.portsEnabled},mxGraph.prototype.setPortsEnabled=function(e){this.portsEnabled=e},mxGraph.prototype.getGridSize=function(){return this.gridSize},mxGraph.prototype.setGridSize=function(e){this.gridSize=e},mxGraph.prototype.getTolerance=function(){return this.tolerance},mxGraph.prototype.setTolerance=function(e){this.tolerance=e},mxGraph.prototype.isVertexLabelsMovable=function(){return this.vertexLabelsMovable},mxGraph.prototype.setVertexLabelsMovable=function(e){this.vertexLabelsMovable=e},mxGraph.prototype.isEdgeLabelsMovable=function(){return this.edgeLabelsMovable},mxGraph.prototype.setEdgeLabelsMovable=function(e){this.edgeLabelsMovable=e},mxGraph.prototype.isSwimlaneNesting=function(){return this.swimlaneNesting},mxGraph.prototype.setSwimlaneNesting=function(e){this.swimlaneNesting=e},mxGraph.prototype.isSwimlaneSelectionEnabled=function(){return this.swimlaneSelectionEnabled},mxGraph.prototype.setSwimlaneSelectionEnabled=function(e){this.swimlaneSelectionEnabled=e},mxGraph.prototype.isMultigraph=function(){return this.multigraph},mxGraph.prototype.setMultigraph=function(e){this.multigraph=e},mxGraph.prototype.isAllowLoops=function(){return this.allowLoops},mxGraph.prototype.setAllowDanglingEdges=function(e){this.allowDanglingEdges=e},mxGraph.prototype.isAllowDanglingEdges=function(){return this.allowDanglingEdges},mxGraph.prototype.setConnectableEdges=function(e){this.connectableEdges=e},mxGraph.prototype.isConnectableEdges=function(){return this.connectableEdges},mxGraph.prototype.setCloneInvalidEdges=function(e){this.cloneInvalidEdges=e},mxGraph.prototype.isCloneInvalidEdges=function(){return this.cloneInvalidEdges},mxGraph.prototype.setAllowLoops=function(e){this.allowLoops=e},mxGraph.prototype.isDisconnectOnMove=function(){return this.disconnectOnMove},mxGraph.prototype.setDisconnectOnMove=function(e){this.disconnectOnMove=e},mxGraph.prototype.isDropEnabled=function(){return this.dropEnabled},mxGraph.prototype.setDropEnabled=function(e){this.dropEnabled=e},mxGraph.prototype.isSplitEnabled=function(){return this.splitEnabled},mxGraph.prototype.setSplitEnabled=function(e){this.splitEnabled=e},mxGraph.prototype.isCellResizable=function(e){var t=null!=(t=this.view.getState(e))?t.style:this.getCellStyle(e);return this.isCellsResizable()&&!this.isCellLocked(e)&&0!=t[mxConstants.STYLE_RESIZABLE]},mxGraph.prototype.isCellsResizable=function(){return this.cellsResizable},mxGraph.prototype.setCellsResizable=function(e){this.cellsResizable=e},mxGraph.prototype.isTerminalPointMovable=function(e,t){return!0},mxGraph.prototype.isCellBendable=function(e){var t=null!=(t=this.view.getState(e))?t.style:this.getCellStyle(e);return this.isCellsBendable()&&!this.isCellLocked(e)&&0!=t[mxConstants.STYLE_BENDABLE]},mxGraph.prototype.isCellsBendable=function(){return this.cellsBendable},mxGraph.prototype.setCellsBendable=function(e){this.cellsBendable=e},mxGraph.prototype.isCellEditable=function(e){var t=null!=(t=this.view.getState(e))?t.style:this.getCellStyle(e);return this.isCellsEditable()&&!this.isCellLocked(e)&&0!=t[mxConstants.STYLE_EDITABLE]},mxGraph.prototype.isCellsEditable=function(){return this.cellsEditable},mxGraph.prototype.setCellsEditable=function(e){this.cellsEditable=e},mxGraph.prototype.isCellDisconnectable=function(e,t,n){return this.isCellsDisconnectable()&&!this.isCellLocked(e)},mxGraph.prototype.isCellsDisconnectable=function(){return this.cellsDisconnectable},mxGraph.prototype.setCellsDisconnectable=function(e){this.cellsDisconnectable=e},mxGraph.prototype.isValidSource=function(e){return null==e&&this.allowDanglingEdges||null!=e&&(!this.model.isEdge(e)||this.connectableEdges)&&this.isCellConnectable(e)},mxGraph.prototype.isValidTarget=function(e){return this.isValidSource(e)},mxGraph.prototype.isValidConnection=function(e,t){return this.isValidSource(e)&&this.isValidTarget(t)},mxGraph.prototype.setConnectable=function(e){this.connectionHandler.setEnabled(e)},mxGraph.prototype.isConnectable=function(e){return this.connectionHandler.isEnabled()},mxGraph.prototype.setTooltips=function(e){this.tooltipHandler.setEnabled(e)},mxGraph.prototype.setPanning=function(e){this.panningHandler.panningEnabled=e},mxGraph.prototype.isEditing=function(e){if(null==this.cellEditor)return!1;var t=this.cellEditor.getEditingCell();return null==e?null!=t:e==t},mxGraph.prototype.isAutoSizeCell=function(e){var t=this.view.getState(e);return e=null!=t?t.style:this.getCellStyle(e),this.isAutoSizeCells()||1==e[mxConstants.STYLE_AUTOSIZE]},mxGraph.prototype.isAutoSizeCells=function(){return this.autoSizeCells},mxGraph.prototype.setAutoSizeCells=function(e){this.autoSizeCells=e},mxGraph.prototype.isExtendParent=function(e){return!this.getModel().isEdge(e)&&this.isExtendParents()},mxGraph.prototype.isExtendParents=function(){return this.extendParents},mxGraph.prototype.setExtendParents=function(e){this.extendParents=e},mxGraph.prototype.isExtendParentsOnAdd=function(){return this.extendParentsOnAdd},mxGraph.prototype.setExtendParentsOnAdd=function(e){this.extendParentsOnAdd=e},mxGraph.prototype.isConstrainChild=function(e){return this.isConstrainChildren()&&!this.getModel().isEdge(this.getModel().getParent(e))},mxGraph.prototype.isConstrainChildren=function(){return this.constrainChildren},mxGraph.prototype.setConstrainChildren=function(e){this.constrainChildren=e},mxGraph.prototype.isAllowNegativeCoordinates=function(){return this.allowNegativeCoordinates},mxGraph.prototype.setAllowNegativeCoordinates=function(e){this.allowNegativeCoordinates=e},mxGraph.prototype.getOverlap=function(e){return this.isAllowOverlapParent(e)?this.defaultOverlap:0},mxGraph.prototype.isAllowOverlapParent=function(e){return!1},mxGraph.prototype.getFoldableCells=function(e,t){return this.model.filterCells(e,mxUtils.bind(this,function(e){return this.isCellFoldable(e,t)}))},mxGraph.prototype.isCellFoldable=function(e,t){var n=null!=(n=this.view.getState(e))?n.style:this.getCellStyle(e);return 0<this.model.getChildCount(e)&&0!=n[mxConstants.STYLE_FOLDABLE]},mxGraph.prototype.isValidDropTarget=function(e,t,n){return null!=e&&(this.isSplitEnabled()&&this.isSplitTarget(e,t,n)||!this.model.isEdge(e)&&(this.isSwimlane(e)||0<this.model.getChildCount(e)&&!this.isCellCollapsed(e)))},mxGraph.prototype.isSplitTarget=function(e,t,n){return!(!this.model.isEdge(e)||null==t||1!=t.length||!this.isCellConnectable(t[0])||null!=this.getEdgeValidationError(e,this.model.getTerminal(e,!0),t[0]))&&(n=this.model.getTerminal(e,!0),e=this.model.getTerminal(e,!1),!this.model.isAncestor(t[0],n)&&!this.model.isAncestor(t[0],e))},mxGraph.prototype.getDropTarget=function(e,t,n){if(!this.isSwimlaneNesting())for(var a=0;a<e.length;a++)if(this.isSwimlane(e[a]))return null;if((a=mxUtils.convertPoint(this.container,mxEvent.getClientX(t),mxEvent.getClientY(t))).x-=this.panDx,a.y-=this.panDy,a=this.getSwimlaneAt(a.x,a.y),null==n)n=a;else if(null!=a){for(var i=this.model.getParent(a);null!=i&&this.isSwimlane(i)&&i!=n;)i=this.model.getParent(i);i==n&&(n=a)}for(;null!=n&&!this.isValidDropTarget(n,e,t)&&!this.model.isLayer(n);)n=this.model.getParent(n);return!this.model.isLayer(n)&&mxUtils.indexOf(e,n)<0?n:null},mxGraph.prototype.getDefaultParent=function(){var e=this.defaultParent;return null==e&&(null==(e=this.getCurrentRoot())&&(e=this.model.getRoot(),e=this.model.getChildAt(e,0))),e},mxGraph.prototype.setDefaultParent=function(e){this.defaultParent=e},mxGraph.prototype.getSwimlane=function(e){for(;null!=e&&!this.isSwimlane(e);)e=this.model.getParent(e);return e},mxGraph.prototype.getSwimlaneAt=function(e,t,n){if(null!=(n=n||this.getDefaultParent()))for(var a=this.model.getChildCount(n),i=0;i<a;i++){var s=this.model.getChildAt(n,i),o=this.getSwimlaneAt(e,t,s);if(null!=o)return o;if(this.isSwimlane(s)&&(o=this.view.getState(s),this.intersects(o,e,t)))return s}return null},mxGraph.prototype.getCellAt=function(e,t,n,a,i){if(a=null==a||a,i=null==i||i,null!=(n=null!=n?n:this.getDefaultParent()))for(var s=this.model.getChildCount(n)-1;0<=s;s--){var o=this.model.getChildAt(n,s),r=this.getCellAt(e,t,o,a,i);if(null!=r)return r;if(this.isCellVisible(o)&&(i&&this.model.isEdge(o)||a&&this.model.isVertex(o))&&(r=this.view.getState(o),this.intersects(r,e,t)))return o}return null},mxGraph.prototype.intersects=function(e,t,n){if(null!=e){var a=e.absolutePoints;if(null!=a){e=this.tolerance*this.tolerance;for(var i=a[0],s=1;s<a.length;s++){var o=a[s];if(mxUtils.ptSegDistSq(i.x,i.y,o.x,o.y,t,n)<=e)return!0;i=o}}else if(0!=(i=mxUtils.toRadians(mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION)||0))&&(a=Math.cos(-i),i=Math.sin(-i),s=new mxPoint(e.getCenterX(),e.getCenterY()),t=(i=mxUtils.getRotatedPoint(new mxPoint(t,n),a,i,s)).x,n=i.y),mxUtils.contains(e,t,n))return!0}return!1},mxGraph.prototype.hitsSwimlaneContent=function(e,t,n){var a=this.getView().getState(e);if(e=this.getStartSize(e),null!=a){var i=this.getView().getScale();if(t-=a.x,n-=a.y,0<e.width&&0<t&&t>e.width*i||0<e.height&&0<n&&n>e.height*i)return!0}return!1},mxGraph.prototype.getChildVertices=function(e){return this.getChildCells(e,!0,!1)},mxGraph.prototype.getChildEdges=function(e){return this.getChildCells(e,!1,!0)},mxGraph.prototype.getChildCells=function(e,t,n){for(e=null!=e?e:this.getDefaultParent(),e=this.model.getChildCells(e,null!=t&&t,null!=n&&n),t=[],n=0;n<e.length;n++)this.isCellVisible(e[n])&&t.push(e[n]);return t},mxGraph.prototype.getConnections=function(e,t){return this.getEdges(e,t,!0,!0,!1)},mxGraph.prototype.getIncomingEdges=function(e,t){return this.getEdges(e,t,!0,!1,!1)},mxGraph.prototype.getOutgoingEdges=function(e,t){return this.getEdges(e,t,!1,!0,!1)},mxGraph.prototype.getEdges=function(e,t,n,a,i,s){n=null==n||n,a=null==a||a,i=null==i||i,s=null!=s&&s;for(var o=[],r=this.isCellCollapsed(e),l=this.model.getChildCount(e),d=0;d<l;d++){var c=this.model.getChildAt(e,d);!r&&this.isCellVisible(c)||(o=o.concat(this.model.getEdges(c,n,a)))}for(o=o.concat(this.model.getEdges(e,n,a)),r=[],d=0;d<o.length;d++)l=null!=(c=this.view.getState(o[d]))?c.getVisibleTerminal(!0):this.view.getVisibleTerminal(o[d],!0),c=null!=c?c.getVisibleTerminal(!1):this.view.getVisibleTerminal(o[d],!1),(i&&l==c||l!=c&&(n&&c==e&&(null==t||this.isValidAncestor(l,t,s))||a&&l==e&&(null==t||this.isValidAncestor(c,t,s))))&&r.push(o[d]);return r},mxGraph.prototype.isValidAncestor=function(e,t,n){return n?this.model.isAncestor(t,e):this.model.getParent(e)==t},mxGraph.prototype.getOpposites=function(e,t,n,a){n=null==n||n,a=null==a||a;var i=[],s={};if(null!=e)for(var o=0;o<e.length;o++){var r=null!=(l=this.view.getState(e[o]))?l.getVisibleTerminal(!0):this.view.getVisibleTerminal(e[o],!0),l=null!=l?l.getVisibleTerminal(!1):this.view.getVisibleTerminal(e[o],!1);if(r==t&&null!=l&&l!=t&&a){var d=mxCellPath.create(l);null==s[d]&&(s[d]=l,i.push(l))}else l==t&&null!=r&&r!=t&&n&&(null==s[d=mxCellPath.create(r)]&&(s[d]=r,i.push(r)))}return i},mxGraph.prototype.getEdgesBetween=function(e,t,n){n=null!=n&&n;for(var a=this.getEdges(e),i=[],s=0;s<a.length;s++){var o=null!=(r=this.view.getState(a[s]))?r.getVisibleTerminal(!0):this.view.getVisibleTerminal(a[s],!0),r=null!=r?r.getVisibleTerminal(!1):this.view.getVisibleTerminal(a[s],!1);(o==e&&r==t||!n&&o==t&&r==e)&&i.push(a[s])}return i},mxGraph.prototype.getPointForEvent=function(e,t){var n=mxUtils.convertPoint(this.container,mxEvent.getClientX(e),mxEvent.getClientY(e)),a=this.view.scale,i=this.view.translate,s=0!=t?this.gridSize/2:0;return n.x=this.snap(n.x/a-i.x-s),n.y=this.snap(n.y/a-i.y-s),n},mxGraph.prototype.getCells=function(e,t,n,a,i,s){if(s=null!=s?s:[],0<n||0<a){var o=e+n,r=t+a;if(null!=(i=i||this.getDefaultParent()))for(var l=this.model.getChildCount(i),d=0;d<l;d++){var c=this.model.getChildAt(i,d),m=this.view.getState(c);if(this.isCellVisible(c)&&null!=m){var u=m;0!=(m=mxUtils.getValue(m.style,mxConstants.STYLE_ROTATION)||0)&&(u=mxUtils.getBoundingBox(u,m)),u.x>=e&&u.y+u.height<=r&&u.y>=t&&u.x+u.width<=o?s.push(c):this.getCells(e,t,n,a,c,s)}}}return s},mxGraph.prototype.getCellsBeyond=function(e,t,n,a,i){var s=[];if((a||i)&&(null==n&&(n=this.getDefaultParent()),null!=n))for(var o=this.model.getChildCount(n),r=0;r<o;r++){var l=this.model.getChildAt(n,r),d=this.view.getState(l);this.isCellVisible(l)&&null!=d&&(!a||d.x>=e)&&(!i||d.y>=t)&&s.push(l)}return s},mxGraph.prototype.findTreeRoots=function(e,t,n){t=null!=t&&t,n=null!=n&&n;var a=[];if(null!=e){for(var i=this.getModel(),s=i.getChildCount(e),o=null,r=0,l=0;l<s;l++){var d=i.getChildAt(e,l);if(this.model.isVertex(d)&&this.isCellVisible(d)){for(var c=this.getConnections(d,t?e:null),m=0,u=0,p=0;p<c.length;p++)this.view.getVisibleTerminal(c[p],!0)==d?m++:u++;(n&&0==m&&0<u||!n&&0==u&&0<m)&&a.push(d),r<(c=n?u-m:m-u)&&(r=c,o=d)}}0==a.length&&null!=o&&a.push(o)}return a},mxGraph.prototype.traverse=function(e,t,n,a,i){if(null!=n&&null!=e){t=null==t||t,i=i||[];var s=mxCellPath.create(e);if(null==i[s]&&(null==(a=n(i[s]=e,a))||a)&&0<(a=this.model.getEdgeCount(e)))for(s=0;s<a;s++){var o=this.model.getEdgeAt(e,s),r=this.model.getTerminal(o,!0)==e;t&&!r||(r=this.model.getTerminal(o,!r),this.traverse(r,t,n,o,i))}}},mxGraph.prototype.isCellSelected=function(e){return this.getSelectionModel().isSelected(e)},mxGraph.prototype.isSelectionEmpty=function(){return this.getSelectionModel().isEmpty()},mxGraph.prototype.clearSelection=function(){return this.getSelectionModel().clear()},mxGraph.prototype.getSelectionCount=function(){return this.getSelectionModel().cells.length},mxGraph.prototype.getSelectionCell=function(){return this.getSelectionModel().cells[0]},mxGraph.prototype.getSelectionCells=function(){return this.getSelectionModel().cells.slice()},mxGraph.prototype.setSelectionCell=function(e){this.getSelectionModel().setCell(e)},mxGraph.prototype.setSelectionCells=function(e){this.getSelectionModel().setCells(e)},mxGraph.prototype.addSelectionCell=function(e){this.getSelectionModel().addCell(e)},mxGraph.prototype.addSelectionCells=function(e){this.getSelectionModel().addCells(e)},mxGraph.prototype.removeSelectionCell=function(e){this.getSelectionModel().removeCell(e)},mxGraph.prototype.removeSelectionCells=function(e){this.getSelectionModel().removeCells(e)},mxGraph.prototype.selectRegion=function(e,t){var n=this.getCells(e.x,e.y,e.width,e.height);return this.selectCellsForEvent(n,t),n},mxGraph.prototype.selectNextCell=function(){this.selectCell(!0)},mxGraph.prototype.selectPreviousCell=function(){this.selectCell()},mxGraph.prototype.selectParentCell=function(){this.selectCell(!1,!0)},mxGraph.prototype.selectChildCell=function(){this.selectCell(!1,!1,!0)},mxGraph.prototype.selectCell=function(e,t,n){var a=0<(i=this.selectionModel).cells.length?i.cells[0]:null;1<i.cells.length&&i.clear();var i=null!=a?this.model.getParent(a):this.getDefaultParent(),s=this.model.getChildCount(i);null==a&&0<s?(e=this.model.getChildAt(i,0),this.setSelectionCell(e)):null!=a&&!t||null==this.view.getState(i)||null==this.model.getGeometry(i)?null!=a&&n?0<this.model.getChildCount(a)&&(e=this.model.getChildAt(a,0),this.setSelectionCell(e)):0<s&&(t=i.getIndex(a),e=e?(t++,this.model.getChildAt(i,t%s)):(t--,this.model.getChildAt(i,t<0?s-1:t)),this.setSelectionCell(e)):this.getCurrentRoot()!=i&&this.setSelectionCell(i)},mxGraph.prototype.selectAll=function(e){e=e||this.getDefaultParent(),null!=(e=this.model.getChildren(e))&&this.setSelectionCells(e)},mxGraph.prototype.selectVertices=function(e){this.selectCells(!0,!1,e)},mxGraph.prototype.selectEdges=function(e){this.selectCells(!1,!0,e)},mxGraph.prototype.selectCells=function(t,n,e){e=e||this.getDefaultParent();var a=mxUtils.bind(this,function(e){return null!=this.view.getState(e)&&0==this.model.getChildCount(e)&&(this.model.isVertex(e)&&t||this.model.isEdge(e)&&n)});e=this.model.filterDescendants(a,e),this.setSelectionCells(e)},mxGraph.prototype.selectCellForEvent=function(e,t){var n=this.isCellSelected(e);this.isToggleEvent(t)?n?this.removeSelectionCell(e):this.addSelectionCell(e):(!n||1!=this.getSelectionCount())&&this.setSelectionCell(e)},mxGraph.prototype.selectCellsForEvent=function(e,t){this.isToggleEvent(t)?this.addSelectionCells(e):this.setSelectionCells(e)},mxGraph.prototype.createHandler=function(e){var t=null;return null!=e&&(t=this.model.isEdge(e.cell)?(t=this.view.getEdgeStyle(e),this.isLoop(e)||t==mxEdgeStyle.ElbowConnector||t==mxEdgeStyle.SideToSide||t==mxEdgeStyle.TopToBottom?new mxElbowEdgeHandler(e):t==mxEdgeStyle.SegmentConnector||t==mxEdgeStyle.OrthConnector?new mxEdgeSegmentHandler(e):new mxEdgeHandler(e)):new mxVertexHandler(e)),t},mxGraph.prototype.addMouseListener=function(e){null==this.mouseListeners&&(this.mouseListeners=[]),this.mouseListeners.push(e)},mxGraph.prototype.removeMouseListener=function(e){if(null!=this.mouseListeners)for(var t=0;t<this.mouseListeners.length;t++)if(this.mouseListeners[t]==e){this.mouseListeners.splice(t,1);break}},mxGraph.prototype.updateMouseEvent=function(e){if(null==e.graphX||null==e.graphY){var t=mxUtils.convertPoint(this.container,e.getX(),e.getY());e.graphX=t.x-this.panDx,e.graphY=t.y-this.panDy}},mxGraph.prototype.fireMouseEvent=function(e,t,n){if(null==n&&(n=this),this.updateMouseEvent(t),e==mxEvent.MOUSE_DOWN&&(this.isMouseDown=!0),mxClient.IS_TOUCH&&this.doubleTapEnabled&&e==mxEvent.MOUSE_DOWN){var a=(new Date).getTime();a-this.lastTouchTime<this.doubleTapTimeout&&Math.abs(this.lastTouchX-t.getX())<this.doubleTapTolerance&&Math.abs(this.lastTouchY-t.getY())<this.doubleTapTolerance?(this.lastTouchTime=0,this.dblClick(t.getEvent(),t.getCell()),t.getEvent().cancelBubble=!0):(this.lastTouchX=t.getX(),this.lastTouchY=t.getY(),this.lastTouchTime=a)}if(a=2!=t.getEvent().detail,mxClient.IS_IE&&"CSS1Compat"==document.compatMode&&((null!=this.lastMouseX&&Math.abs(this.lastMouseX-t.getX())>this.doubleTapTolerance||null!=this.lastMouseY&&Math.abs(this.lastMouseY-t.getY())>this.doubleTapTolerance)&&(a=!0),e==mxEvent.MOUSE_UP&&(this.lastMouseX=t.getX(),this.lastMouseY=t.getY())),(e!=mxEvent.MOUSE_UP||this.isMouseDown)&&a){if(e==mxEvent.MOUSE_UP&&(this.isMouseDown=!1),!this.isEditing()&&(mxClient.IS_OP||mxClient.IS_SF||mxClient.IS_GC||mxClient.IS_IE&&mxClient.IS_SVG||t.getEvent().target!=this.container)){if(e==mxEvent.MOUSE_MOVE&&this.isMouseDown&&this.autoScroll&&this.scrollPointToVisible(t.getGraphX(),t.getGraphY(),this.autoExtend),null!=this.mouseListeners)for(n=[n,t],t.getEvent().returnValue=!0,a=0;a<this.mouseListeners.length;a++){var i=this.mouseListeners[a];e==mxEvent.MOUSE_DOWN?i.mouseDown.apply(i,n):e==mxEvent.MOUSE_MOVE?i.mouseMove.apply(i,n):e==mxEvent.MOUSE_UP&&i.mouseUp.apply(i,n)}e==mxEvent.MOUSE_UP&&this.click(t)}}else e==mxEvent.MOUSE_UP&&(this.isMouseDown=!1)},mxGraph.prototype.destroy=function(){this.destroyed||(this.destroyed=!0,null!=this.tooltipHandler&&this.tooltipHandler.destroy(),null!=this.selectionCellsHandler&&this.selectionCellsHandler.destroy(),null!=this.panningHandler&&this.panningHandler.destroy(),null!=this.connectionHandler&&this.connectionHandler.destroy(),null!=this.graphHandler&&this.graphHandler.destroy(),null!=this.cellEditor&&this.cellEditor.destroy(),null!=this.view&&this.view.destroy(),null!=this.model&&null!=this.graphModelChangeListener&&(this.model.removeListener(this.graphModelChangeListener),this.graphModelChangeListener=null),this.container=null)},mxCellOverlay.prototype=new mxEventSource,mxCellOverlay.prototype.constructor=mxCellOverlay,mxCellOverlay.prototype.image=null,mxCellOverlay.prototype.tooltip=null,mxCellOverlay.prototype.align=mxConstants.ALIGN_RIGHT,mxCellOverlay.prototype.verticalAlign=mxConstants.ALIGN_BOTTOM,mxCellOverlay.prototype.offset=null,mxCellOverlay.prototype.cursor=null,mxCellOverlay.prototype.defaultOverlap=.5,mxCellOverlay.prototype.getBounds=function(e){var t=e.view.graph.getModel().isEdge(e.cell),n=e.view.scale,a=null,i=this.image.width,s=this.image.height;return t?a=1==(t=e.absolutePoints).length%2?t[Math.floor(t.length/2)]:(e=t[(a=t.length/2)-1],t=t[a],new mxPoint(e.x+(t.x-e.x)/2,e.y+(t.y-e.y)/2)):((a=new mxPoint).x=this.align==mxConstants.ALIGN_LEFT?e.x:this.align==mxConstants.ALIGN_CENTER?e.x+e.width/2:e.x+e.width,a.y=this.verticalAlign==mxConstants.ALIGN_TOP?e.y:this.verticalAlign==mxConstants.ALIGN_MIDDLE?e.y+e.height/2:e.y+e.height),new mxRectangle(Math.round(a.x-(i*this.defaultOverlap-this.offset.x)*n),Math.round(a.y-(s*this.defaultOverlap-this.offset.y)*n),i*n,s*n)},mxCellOverlay.prototype.toString=function(){return this.tooltip},mxOutline.prototype.source=null,mxOutline.prototype.outline=null,mxOutline.prototype.graphRenderHint=mxConstants.RENDERING_HINT_FASTER,mxOutline.prototype.enabled=!0,mxOutline.prototype.showViewport=!0,mxOutline.prototype.border=10,mxOutline.prototype.sizerSize=8,mxOutline.prototype.updateOnPan=!1,mxOutline.prototype.sizerImage=null,mxOutline.prototype.suspended=!1,mxOutline.prototype.init=function(e){this.outline=new mxGraph(e,this.source.getModel(),this.graphRenderHint,this.source.getStylesheet()),this.outline.foldingEnabled=!1,this.outline.autoScroll=!1;var t=this.outline.graphModelChanged;this.outline.graphModelChanged=mxUtils.bind(this,function(e){!this.suspended&&null!=this.outline&&t.apply(this.outline,arguments)}),mxClient.IS_SVG&&((e=this.outline.getView().getCanvas().parentNode).setAttribute("shape-rendering","optimizeSpeed"),e.setAttribute("image-rendering","optimizeSpeed")),this.outline.labelsVisible=!1,this.outline.setEnabled(!1),this.updateHandler=mxUtils.bind(this,function(e,t){!this.suspended&&!this.active&&this.update()}),this.source.getModel().addListener(mxEvent.CHANGE,this.updateHandler),this.outline.addMouseListener(this),(e=this.source.getView()).addListener(mxEvent.SCALE,this.updateHandler),e.addListener(mxEvent.TRANSLATE,this.updateHandler),e.addListener(mxEvent.SCALE_AND_TRANSLATE,this.updateHandler),e.addListener(mxEvent.DOWN,this.updateHandler),e.addListener(mxEvent.UP,this.updateHandler),mxEvent.addListener(this.source.container,"scroll",this.updateHandler),this.panHandler=mxUtils.bind(this,function(e){this.updateOnPan&&this.updateHandler.apply(this,arguments)}),this.source.addListener(mxEvent.PAN,this.panHandler),this.refreshHandler=mxUtils.bind(this,function(e){this.outline.setStylesheet(this.source.getStylesheet()),this.outline.refresh()}),this.source.addListener(mxEvent.REFRESH,this.refreshHandler),this.bounds=new mxRectangle(0,0,0,0),this.selectionBorder=new mxRectangleShape(this.bounds,null,mxConstants.OUTLINE_COLOR,mxConstants.OUTLINE_STROKEWIDTH),this.selectionBorder.dialect=this.outline.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,this.selectionBorder.init(this.outline.getView().getOverlayPane()),mxEvent.redirectMouseEvents(this.selectionBorder.node,this.outline),this.selectionBorder.node.style.background="",this.sizer=this.createSizer(),this.sizer.init(this.outline.getView().getOverlayPane()),this.enabled&&(this.sizer.node.style.cursor="pointer"),mxEvent.addListener(this.sizer.node,mxClient.IS_TOUCH?"touchstart":"mousedown",mxUtils.bind(this,function(e){this.outline.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e))})),this.selectionBorder.node.style.display=this.showViewport?"":"none",this.sizer.node.style.display=this.selectionBorder.node.style.display,this.selectionBorder.node.style.cursor="move",this.update(!1)},mxOutline.prototype.isEnabled=function(){return this.enabled},mxOutline.prototype.setEnabled=function(e){this.enabled=e},mxOutline.prototype.setZoomEnabled=function(e){this.sizer.node.style.visibility=e?"visible":"hidden"},mxOutline.prototype.refresh=function(){this.update(!0)},mxOutline.prototype.createSizer=function(){var e=null!=this.sizerImage?new mxImageShape(new mxRectangle(0,0,this.sizerImage.width,this.sizerImage.height),this.sizerImage.src):new mxRectangleShape(new mxRectangle(0,0,this.sizerSize,this.sizerSize),mxConstants.OUTLINE_HANDLE_FILLCOLOR,mxConstants.OUTLINE_HANDLE_STROKECOLOR);return e.dialect=this.outline.dialect,e},mxOutline.prototype.getSourceContainerSize=function(){return new mxRectangle(0,0,this.source.container.scrollWidth,this.source.container.scrollHeight)},mxOutline.prototype.getOutlineOffset=function(e){return null},mxOutline.prototype.update=function(e){if(null!=this.source){var t=this.source.view.scale,n=new mxRectangle((n=this.source.getGraphBounds()).x/t+this.source.panDx,n.y/t+this.source.panDy,n.width/t,n.height/t),a=new mxRectangle(0,0,this.source.container.clientWidth/t,this.source.container.clientHeight/t);(s=n.clone()).add(a);var i=this.getSourceContainerSize(),s=(a=Math.max(i.width/t,s.width),t=Math.max(i.height/t,s.height),Math.max(0,this.outline.container.clientWidth-this.border));i=Math.max(0,this.outline.container.clientHeight-this.border);if(0<(s=Math.min(s/a,i/t))){this.outline.getView().scale!=s&&(this.outline.getView().scale=s,e=!0),(a=this.outline.getView()).currentRoot!=this.source.getView().currentRoot&&a.setCurrentRoot(this.source.getView().currentRoot);i=(t=this.source.view.translate).x+this.source.panDx;var o=t.y+this.source.panDy;null!=(s=this.getOutlineOffset(s))&&(i+=s.x,o+=s.y),n.x<0&&(i-=n.x),n.y<0&&(o-=n.y),a.translate.x==i&&a.translate.y==o||(a.translate.x=i,a.translate.y=o,e=!0);n=a.translate,i=(s=this.source.getView().scale)/a.scale,o=1/a.scale;var r=this.source.container;this.bounds=new mxRectangle((n.x-t.x-this.source.panDx)/o,(n.y-t.y-this.source.panDy)/o,r.clientWidth/i,r.clientHeight/i),this.bounds.x+=this.source.container.scrollLeft*a.scale/s,this.bounds.y+=this.source.container.scrollTop*a.scale/s,(n=this.selectionBorder.bounds).x==this.bounds.x&&n.y==this.bounds.y&&n.width==this.bounds.width&&n.height==this.bounds.height||(this.selectionBorder.bounds=this.bounds,this.selectionBorder.redraw()),n=this.sizer.bounds,a=new mxRectangle(this.bounds.x+this.bounds.width-n.width/2,this.bounds.y+this.bounds.height-n.height/2,n.width,n.height),n.x==a.x&&n.y==a.y&&n.width==a.width&&n.height==a.height||(this.sizer.bounds=a,"hidden"!=this.sizer.node.style.visibility&&this.sizer.redraw()),e&&this.outline.view.revalidate()}}},mxOutline.prototype.mouseDown=function(e,t){this.enabled&&this.showViewport&&(this.zoom=t.isSource(this.sizer),this.startX=t.getX(),this.startY=t.getY(),this.active=!0,this.source.useScrollbarsForPanning&&mxUtils.hasScrollbars(this.source.container)?(this.dx0=this.source.container.scrollLeft,this.dy0=this.source.container.scrollTop):this.dy0=this.dx0=0),t.consume()},mxOutline.prototype.mouseMove=function(e,t){if(this.active){this.selectionBorder.node.style.display=this.showViewport?"":"none",this.sizer.node.style.display=this.selectionBorder.node.style.display;var n=t.getX()-this.startX,a=t.getY()-this.startY,i=null;if(this.zoom)a=n/((i=this.source.container).clientWidth/i.clientHeight),i=new mxRectangle(this.bounds.x,this.bounds.y,Math.max(1,this.bounds.width+n),Math.max(1,this.bounds.height+a)),this.selectionBorder.bounds=i,this.selectionBorder.redraw();else{var s=this.outline.getView().scale;i=new mxRectangle(this.bounds.x+n,this.bounds.y+a,this.bounds.width,this.bounds.height);this.selectionBorder.bounds=i,this.selectionBorder.redraw(),n=n/s*this.source.getView().scale,a=a/s*this.source.getView().scale,this.source.panGraph(-n-this.dx0,-a-this.dy0)}n=this.sizer.bounds,this.sizer.bounds=new mxRectangle(i.x+i.width-n.width/2,i.y+i.height-n.height/2,n.width,n.height),"hidden"!=this.sizer.node.style.visibility&&this.sizer.redraw(),t.consume()}},mxOutline.prototype.mouseUp=function(e,t){if(this.active){var n=t.getX()-this.startX,a=t.getY()-this.startY;if(0<Math.abs(n)||0<Math.abs(a)){if(this.zoom){a=this.selectionBorder.bounds.width;var i=this.source.getView().scale;this.source.zoomTo(i-n*i/a,!1)}else this.source.useScrollbarsForPanning&&mxUtils.hasScrollbars(this.source.container)||(this.source.panGraph(0,0),n/=this.outline.getView().scale,a/=this.outline.getView().scale,i=this.source.getView().translate,this.source.getView().setTranslate(i.x-n,i.y-a));this.update(),t.consume()}this.index=null,this.active=!1}},mxOutline.prototype.destroy=function(){null!=this.source&&(this.source.removeListener(this.panHandler),this.source.removeListener(this.refreshHandler),this.source.getModel().removeListener(this.updateHandler),this.source.getView().removeListener(this.updateHandler),mxEvent.addListener(this.source.container,"scroll",this.updateHandler),this.source=null),null!=this.outline&&(this.outline.removeMouseListener(this),this.outline.destroy(),this.outline=null),null!=this.selectionBorder&&(this.selectionBorder.destroy(),this.selectionBorder=null),null!=this.sizer&&(this.sizer.destroy(),this.sizer=null)},mxMultiplicity.prototype.type=null,mxMultiplicity.prototype.attr=null,mxMultiplicity.prototype.value=null,mxMultiplicity.prototype.source=null,mxMultiplicity.prototype.min=null,mxMultiplicity.prototype.max=null,mxMultiplicity.prototype.validNeighbors=null,mxMultiplicity.prototype.validNeighborsAllowed=!0,mxMultiplicity.prototype.countError=null,mxMultiplicity.prototype.typeError=null,mxMultiplicity.prototype.check=function(e,t,n,a,i,s){var o="";return(this.source&&this.checkTerminal(e,n,t)||!this.source&&this.checkTerminal(e,a,t))&&(null!=this.countError&&(this.source&&(0==this.max||i>=this.max)||!this.source&&(0==this.max||s>=this.max))&&(o+=this.countError+"\n"),null!=this.validNeighbors&&null!=this.typeError&&0<this.validNeighbors.length&&(this.checkNeighbors(e,t,n,a)||(o+=this.typeError+"\n"))),0<o.length?o:null},mxMultiplicity.prototype.checkNeighbors=function(e,t,n,a){t=e.model.getValue(n),a=e.model.getValue(a),n=!this.validNeighborsAllowed;for(var i=this.validNeighbors,s=0;s<i.length;s++){if(this.source&&this.checkType(e,a,i[s])){n=this.validNeighborsAllowed;break}if(!this.source&&this.checkType(e,t,i[s])){n=this.validNeighborsAllowed;break}}return n},mxMultiplicity.prototype.checkTerminal=function(e,t,n){return t=e.model.getValue(t),this.checkType(e,t,this.type,this.attr,this.value)},mxMultiplicity.prototype.checkType=function(e,t,n,a,i){return null!=t&&(isNaN(t.nodeType)?t==n:mxUtils.isNode(t,n,a,i))},mxLayoutManager.prototype=new mxEventSource,mxLayoutManager.prototype.constructor=mxLayoutManager,mxLayoutManager.prototype.graph=null,mxLayoutManager.prototype.bubbling=!0,mxLayoutManager.prototype.enabled=!0,mxLayoutManager.prototype.updateHandler=null,mxLayoutManager.prototype.moveHandler=null,mxLayoutManager.prototype.isEnabled=function(){return this.enabled},mxLayoutManager.prototype.setEnabled=function(e){this.enabled=e},mxLayoutManager.prototype.isBubbling=function(){return this.bubbling},mxLayoutManager.prototype.setBubbling=function(e){this.bubbling=e},mxLayoutManager.prototype.getGraph=function(){return this.graph},mxLayoutManager.prototype.setGraph=function(e){if(null!=this.graph){var t=this.graph.getModel();t.removeListener(this.undoHandler),this.graph.removeListener(this.moveHandler)}this.graph=e,null!=this.graph&&((t=this.graph.getModel()).addListener(mxEvent.BEFORE_UNDO,this.undoHandler),this.graph.addListener(mxEvent.MOVE_CELLS,this.moveHandler))},mxLayoutManager.prototype.getLayout=function(e){return null},mxLayoutManager.prototype.beforeUndo=function(e){e=this.getCellsForChanges(e.changes);var t=this.getGraph().getModel();if(this.isBubbling())for(var n=t.getParents(e);0<n.length;)e=e.concat(n),n=t.getParents(n);this.layoutCells(mxUtils.sortCells(e,!1))},mxLayoutManager.prototype.cellsMoved=function(e,t){if(null!=e&&null!=t)for(var n=mxUtils.convertPoint(this.getGraph().container,mxEvent.getClientX(t),mxEvent.getClientY(t)),a=this.getGraph().getModel(),i=0;i<e.length;i++){var s=this.getLayout(a.getParent(e[i]));null!=s&&s.moveCell(e[i],n.x,n.y)}},mxLayoutManager.prototype.getCellsForChanges=function(e){for(var t=[],n={},a=0;a<e.length;a++){if((i=e[a])instanceof mxRootChange)return[];for(var i=this.getCellsForChange(i),s=0;s<i.length;s++)if(null!=i[s]){var o=mxCellPath.create(i[s]);null==n[o]&&(n[o]=i[s],t.push(i[s]))}}return t},mxLayoutManager.prototype.getCellsForChange=function(e){var t=this.getGraph().getModel();return e instanceof mxChildChange?[e.child,e.previous,t.getParent(e.child)]:e instanceof mxTerminalChange||e instanceof mxGeometryChange?[e.cell,t.getParent(e.cell)]:[]},mxLayoutManager.prototype.layoutCells=function(e){if(0<e.length){var t=this.getGraph().getModel();t.beginUpdate();try{for(var n=null,a=0;a<e.length;a++)e[a]!=t.getRoot()&&e[a]!=n&&(n=e[a],this.executeLayout(this.getLayout(n),n));this.fireEvent(new mxEventObject(mxEvent.LAYOUT_CELLS,"cells",e))}finally{t.endUpdate()}}},mxLayoutManager.prototype.executeLayout=function(e,t){null!=e&&null!=t&&e.execute(t)},mxLayoutManager.prototype.destroy=function(){this.setGraph(null)},mxSpaceManager.prototype=new mxEventSource,mxSpaceManager.prototype.constructor=mxSpaceManager,mxSpaceManager.prototype.graph=null,mxSpaceManager.prototype.enabled=!0,mxSpaceManager.prototype.shiftRightwards=!0,mxSpaceManager.prototype.shiftDownwards=!0,mxSpaceManager.prototype.extendParents=!0,mxSpaceManager.prototype.resizeHandler=null,mxSpaceManager.prototype.foldHandler=null,mxSpaceManager.prototype.isCellIgnored=function(e){return!this.getGraph().getModel().isVertex(e)},mxSpaceManager.prototype.isCellShiftable=function(e){return this.getGraph().getModel().isVertex(e)&&this.getGraph().isCellMovable(e)},mxSpaceManager.prototype.isEnabled=function(){return this.enabled},mxSpaceManager.prototype.setEnabled=function(e){this.enabled=e},mxSpaceManager.prototype.isShiftRightwards=function(){return this.shiftRightwards},mxSpaceManager.prototype.setShiftRightwards=function(e){this.shiftRightwards=e},mxSpaceManager.prototype.isShiftDownwards=function(){return this.shiftDownwards},mxSpaceManager.prototype.setShiftDownwards=function(e){this.shiftDownwards=e},mxSpaceManager.prototype.isExtendParents=function(){return this.extendParents},mxSpaceManager.prototype.setExtendParents=function(e){this.extendParents=e},mxSpaceManager.prototype.getGraph=function(){return this.graph},mxSpaceManager.prototype.setGraph=function(e){null!=this.graph&&(this.graph.removeListener(this.resizeHandler),this.graph.removeListener(this.foldHandler)),this.graph=e,null!=this.graph&&(this.graph.addListener(mxEvent.RESIZE_CELLS,this.resizeHandler),this.graph.addListener(mxEvent.FOLD_CELLS,this.foldHandler))},mxSpaceManager.prototype.cellsResized=function(e){if(null!=e){var t=this.graph.getModel();t.beginUpdate();try{for(var n=0;n<e.length;n++)if(!this.isCellIgnored(e[n])){this.cellResized(e[n]);break}}finally{t.endUpdate()}}},mxSpaceManager.prototype.cellResized=function(e){var t=this.getGraph(),n=t.getView(),a=t.getModel(),i=n.getState(e),s=n.getState(a.getParent(e));if(null!=i&&null!=s){var o=this.getCellsToShift(i),r=a.getGeometry(e);if(null!=o&&null!=r){var l=n.translate,d=n.scale,c=(n=i.x-s.origin.x-l.x*d,s=i.y-s.origin.y-l.y*d,l=i.x+i.width,i.y+i.height),m=i.width-r.width*d+n-r.x*d,u=i.height-r.height*d+s-r.y*d,p=1-r.width*d/i.width;i=1-r.height*d/i.height;a.beginUpdate();try{for(r=0;r<o.length;r++)o[r]!=e&&this.isCellShiftable(o[r])&&this.shiftCell(o[r],m,u,n,s,l,c,p,i,this.isExtendParents()&&t.isExtendParent(o[r]))}finally{a.endUpdate()}}}},mxSpaceManager.prototype.shiftCell=function(e,t,n,a,i,s,o,r,l,d){var c=(a=this.getGraph()).getView().getState(e);if(null!=c){var m=a.getModel();if(null!=(p=m.getGeometry(e))){m.beginUpdate();try{if(this.isShiftRightwards())if(c.x>=s)(p=p.clone()).translate(-t,0);else{var u=Math.max(0,c.x-x0);(p=p.clone()).translate(-r*u,0)}if(this.isShiftDownwards())if(c.y>=o)(p=p.clone()).translate(0,-n);else{var p,g=Math.max(0,c.y-i);(p=p.clone()).translate(0,-l*g)}p!=m.getGeometry(e)&&(m.setGeometry(e,p),d&&a.extendParent(e))}finally{m.endUpdate()}}}},mxSpaceManager.prototype.getCellsToShift=function(e){var t=this.getGraph(),n=t.getModel().getParent(e.cell),a=this.isShiftDownwards(),i=this.isShiftRightwards();return t.getCellsBeyond(e.x+(a?0:e.width),e.y+(a&&i?0:e.height),n,i,a)},mxSpaceManager.prototype.destroy=function(){this.setGraph(null)},mxSwimlaneManager.prototype=new mxEventSource,mxSwimlaneManager.prototype.constructor=mxSwimlaneManager,mxSwimlaneManager.prototype.graph=null,mxSwimlaneManager.prototype.enabled=!0,mxSwimlaneManager.prototype.horizontal=!0,mxSwimlaneManager.prototype.addEnabled=!0,mxSwimlaneManager.prototype.resizeEnabled=!0,mxSwimlaneManager.prototype.addHandler=null,mxSwimlaneManager.prototype.resizeHandler=null,mxSwimlaneManager.prototype.isEnabled=function(){return this.enabled},mxSwimlaneManager.prototype.setEnabled=function(e){this.enabled=e},mxSwimlaneManager.prototype.isHorizontal=function(){return this.horizontal},mxSwimlaneManager.prototype.setHorizontal=function(e){this.horizontal=e},mxSwimlaneManager.prototype.isAddEnabled=function(){return this.addEnabled},mxSwimlaneManager.prototype.setAddEnabled=function(e){this.addEnabled=e},mxSwimlaneManager.prototype.isResizeEnabled=function(){return this.resizeEnabled},mxSwimlaneManager.prototype.setResizeEnabled=function(e){this.resizeEnabled=e},mxSwimlaneManager.prototype.getGraph=function(){return this.graph},mxSwimlaneManager.prototype.setGraph=function(e){null!=this.graph&&(this.graph.removeListener(this.addHandler),this.graph.removeListener(this.resizeHandler)),this.graph=e,null!=this.graph&&(this.graph.addListener(mxEvent.ADD_CELLS,this.addHandler),this.graph.addListener(mxEvent.CELLS_RESIZED,this.resizeHandler))},mxSwimlaneManager.prototype.isSwimlaneIgnored=function(e){return!this.getGraph().isSwimlane(e)},mxSwimlaneManager.prototype.isCellHorizontal=function(e){if(this.graph.isSwimlane(e)){var t=this.graph.view.getState(e);return e=null!=t?t.style:this.graph.getCellStyle(e),1==mxUtils.getValue(e,mxConstants.STYLE_HORIZONTAL,1)}return!this.isHorizontal()},mxSwimlaneManager.prototype.cellsAdded=function(e){if(null!=e){var t=this.getGraph().getModel();t.beginUpdate();try{for(var n=0;n<e.length;n++)this.isSwimlaneIgnored(e[n])||this.swimlaneAdded(e[n])}finally{t.endUpdate()}}},mxSwimlaneManager.prototype.swimlaneAdded=function(e){for(var t=this.getGraph().getModel(),n=t.getParent(e),a=t.getChildCount(n),i=null,s=0;s<a;s++){var o=t.getChildAt(n,s);if(o!=e&&!this.isSwimlaneIgnored(o)&&null!=(i=t.getGeometry(o)))break}null!=i&&this.resizeSwimlane(e,i.width,i.height)},mxSwimlaneManager.prototype.cellsResized=function(e){if(null!=e){var t=this.getGraph().getModel();t.beginUpdate();try{for(var n=0;n<e.length;n++)if(!this.isSwimlaneIgnored(e[n])){var a=t.getGeometry(e[n]);if(null!=a){for(var i=new mxRectangle(0,0,a.width,a.height),s=o=e[n];null!=s;){var o=s,r=(s=t.getParent(s),this.graph.isSwimlane(s)?this.graph.getStartSize(s):new mxRectangle);i.width+=r.width,i.height+=r.height}this.resizeSwimlane(o,i.width,i.height)}}}finally{t.endUpdate()}}},mxSwimlaneManager.prototype.resizeSwimlane=function(e,t,n){var a=this.getGraph().getModel();a.beginUpdate();try{if(!this.isSwimlaneIgnored(e))if(null!=(r=a.getGeometry(e))){var i=this.isCellHorizontal(e);(i&&r.height!=n||!i&&r.width!=t)&&(r=r.clone(),i?r.height=n:r.width=t,a.setGeometry(e,r))}var s=this.graph.isSwimlane(e)?this.graph.getStartSize(e):new mxRectangle;t-=s.width,n-=s.height;for(var o=a.getChildCount(e),r=0;r<o;r++){var l=a.getChildAt(e,r);this.resizeSwimlane(l,t,n)}}finally{a.endUpdate()}},mxSwimlaneManager.prototype.destroy=function(){this.setGraph(null)},mxTemporaryCellStates.prototype.view=null,mxTemporaryCellStates.prototype.oldStates=null,mxTemporaryCellStates.prototype.oldBounds=null,mxTemporaryCellStates.prototype.oldScale=null,mxTemporaryCellStates.prototype.destroy=function(){this.view.setScale(this.oldScale),this.view.setStates(this.oldStates),this.view.setGraphBounds(this.oldBounds)},mxCellStatePreview.prototype.graph=null,mxCellStatePreview.prototype.deltas=null,mxCellStatePreview.prototype.count=0,mxCellStatePreview.prototype.isEmpty=function(){return 0==this.count},mxCellStatePreview.prototype.moveState=function(e,t,n,a,i){a=null==a||a,i=null==i||i;var s=mxCellPath.create(e.cell),o=this.deltas[s];return null==o?(o=new mxPoint(t,n),this.deltas[s]=o,this.count++):a?(o.X+=t,o.Y+=n):(o.X=t,o.Y=n),i&&this.addEdges(e),o},mxCellStatePreview.prototype.show=function(e){var t,n=this.graph.getModel(),a=n.getRoot();for(t in this.deltas){var i=mxCellPath.resolve(a,t),s=this.graph.view.getState(i),o=this.deltas[t];i=this.graph.view.getState(n.getParent(i));this.translateState(i,s,o.x,o.y)}for(t in this.deltas)i=mxCellPath.resolve(a,t),s=this.graph.view.getState(i),o=this.deltas[t],i=this.graph.view.getState(n.getParent(i)),this.revalidateState(i,s,o.x,o.y,e)},mxCellStatePreview.prototype.translateState=function(e,t,n,a){if(null!=t){var i=this.graph.getModel();if(i.isVertex(t.cell)){t.invalid=!0,this.graph.view.validateBounds(e,t.cell),e=i.getGeometry(t.cell);var s=mxCellPath.create(t.cell);0==n&&0==a||null==e||e.relative&&null==this.deltas[s]||(t.x+=n,t.y+=a)}for(e=i.getChildCount(t.cell),s=0;s<e;s++)this.translateState(t,this.graph.view.getState(i.getChildAt(t.cell,s)),n,a)}},mxCellStatePreview.prototype.revalidateState=function(e,t,n,a,i){if(null!=t){t.invalid=!0,this.graph.view.validatePoints(e,t.cell);var s=mxCellPath.create(t.cell),o=this.graph.getModel(),r=this.graph.getCellGeometry(t.cell);for(0==n&&0==a||null==r||!r.relative||!o.isVertex(t.cell)||null!=e&&!o.isVertex(e.cell)&&null==this.deltas[s]||(t.x+=n,t.y+=a,this.graph.cellRenderer.redraw(t)),null!=i&&i(t),e=o.getChildCount(t.cell),s=0;s<e;s++)this.revalidateState(t,this.graph.view.getState(o.getChildAt(t.cell,s)),n,a,i)}},mxCellStatePreview.prototype.addEdges=function(e){for(var t=this.graph.getModel(),n=t.getEdgeCount(e.cell),a=0;a<n;a++){var i=this.graph.view.getState(t.getEdgeAt(e.cell,a));null!=i&&this.moveState(i,0,0)}},mxConnectionConstraint.prototype.point=null,mxConnectionConstraint.prototype.perimeter=null,mxGraphHandler.prototype.graph=null,mxGraphHandler.prototype.maxCells=mxClient.IS_IE?20:50,mxGraphHandler.prototype.enabled=!0,mxGraphHandler.prototype.highlightEnabled=!0,mxGraphHandler.prototype.cloneEnabled=!0,mxGraphHandler.prototype.moveEnabled=!0,mxGraphHandler.prototype.guidesEnabled=!1,mxGraphHandler.prototype.guide=null,mxGraphHandler.prototype.currentDx=null,mxGraphHandler.prototype.currentDy=null,mxGraphHandler.prototype.updateCursor=!0,mxGraphHandler.prototype.selectEnabled=!0,mxGraphHandler.prototype.removeCellsFromParent=!0,mxGraphHandler.prototype.connectOnDrop=!1,mxGraphHandler.prototype.scrollOnMove=!0,mxGraphHandler.prototype.minimumSize=6,mxGraphHandler.prototype.previewColor="black",mxGraphHandler.prototype.htmlPreview=!1,mxGraphHandler.prototype.shape=null,mxGraphHandler.prototype.scaleGrid=!1,mxGraphHandler.prototype.rotationEnabled=!0,mxGraphHandler.prototype.isEnabled=function(){return this.enabled},mxGraphHandler.prototype.setEnabled=function(e){this.enabled=e},mxGraphHandler.prototype.isCloneEnabled=function(){return this.cloneEnabled},mxGraphHandler.prototype.setCloneEnabled=function(e){this.cloneEnabled=e},mxGraphHandler.prototype.isMoveEnabled=function(){return this.moveEnabled},mxGraphHandler.prototype.setMoveEnabled=function(e){this.moveEnabled=e},mxGraphHandler.prototype.isSelectEnabled=function(){return this.selectEnabled},mxGraphHandler.prototype.setSelectEnabled=function(e){this.selectEnabled=e},mxGraphHandler.prototype.isRemoveCellsFromParent=function(){return this.removeCellsFromParent},mxGraphHandler.prototype.setRemoveCellsFromParent=function(e){this.removeCellsFromParent=e},mxGraphHandler.prototype.getInitialCellForEvent=function(e){return e.getCell()},mxGraphHandler.prototype.isDelayedSelection=function(e){return this.graph.isCellSelected(e)},mxGraphHandler.prototype.mouseDown=function(e,t){if(!t.isConsumed()&&this.isEnabled()&&this.graph.isEnabled()&&!this.graph.isForceMarqueeEvent(t.getEvent())&&null!=t.getState()){var n=this.getInitialCellForEvent(t);if(this.cell=null,this.delayedSelection=this.isDelayedSelection(n),this.isSelectEnabled()&&!this.delayedSelection&&this.graph.selectCellForEvent(n,t.getEvent()),this.isMoveEnabled()){var a=this.graph.model,i=a.getGeometry(n);this.graph.isCellMovable(n)&&(!a.isEdge(n)||1<this.graph.getSelectionCount()||null!=i.points&&0<i.points.length||null==a.getTerminal(n,!0)||null==a.getTerminal(n,!1)||this.graph.allowDanglingEdges||this.graph.isCloneEvent(t.getEvent())&&this.graph.isCellsCloneable())&&this.start(n,t.getX(),t.getY()),this.cellWasClicked=!0,!mxClient.IS_SF&&!mxClient.IS_GC||"SELECT"!=t.getSource().nodeName?t.consume():mxClient.IS_SF&&"SELECT"==t.getSource().nodeName&&(this.cellWasClicked=!1,this.first=null)}}},mxGraphHandler.prototype.getGuideStates=function(){var e=this.graph.getDefaultParent(),t=this.graph.getModel(),n=mxUtils.bind(this,function(e){return null!=this.graph.view.getState(e)&&t.isVertex(e)&&null!=t.getGeometry(e)&&!t.getGeometry(e).relative});return this.graph.view.getCellStates(t.filterDescendants(n,e))},mxGraphHandler.prototype.getCells=function(e){return!this.delayedSelection&&this.graph.isCellMovable(e)?[e]:this.graph.getMovableCells(this.graph.getSelectionCells())},mxGraphHandler.prototype.getPreviewBounds=function(e){return null!=(e=this.getBoundingBox(e))&&(e.grow(-1,-1),e.width<this.minimumSize&&(e.x-=(this.minimumSize-e.width)/2,e.width=this.minimumSize),e.height<this.minimumSize&&(e.y-=(this.minimumSize-e.height)/2,e.height=this.minimumSize)),e},mxGraphHandler.prototype.getBoundingBox=function(e){var t=null;if(null!=e&&0<e.length)for(var n=this.graph.getModel(),a=0;a<e.length;a++)if(n.isVertex(e[a])||n.isEdge(e[a])){var i=this.graph.view.getState(e[a]);if(null!=i){var s=i;n.isVertex(e[a])&&null!=i.shape&&null!=i.shape.boundingBox&&(s=i.shape.boundingBox),null==t?t=new mxRectangle(s.x,s.y,s.width,s.height):t.add(s)}}return t},mxGraphHandler.prototype.createPreviewShape=function(e){return(e=new mxRectangleShape(e,null,this.previewColor)).isDashed=!0,this.htmlPreview?(e.dialect=mxConstants.DIALECT_STRICTHTML,e.init(this.graph.container)):(e.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,e.init(this.graph.getView().getOverlayPane()),e.pointerEvents=!1),e},mxGraphHandler.prototype.start=function(e,t,n){this.cell=e,this.first=mxUtils.convertPoint(this.graph.container,t,n),this.cells=this.getCells(this.cell),this.bounds=this.graph.getView().getBounds(this.cells),this.pBounds=this.getPreviewBounds(this.cells),this.guidesEnabled&&(this.guide=new mxGuide(this.graph,this.getGuideStates()))},mxGraphHandler.prototype.useGuidesForEvent=function(e){return null==this.guide||this.guide.isEnabledForEvent(e.getEvent())},mxGraphHandler.prototype.snap=function(e){var t=this.scaleGrid?this.graph.view.scale:1;return e.x=this.graph.snap(e.x/t)*t,e.y=this.graph.snap(e.y/t)*t,e},mxGraphHandler.prototype.mouseMove=function(e,t){var n=this.graph;if(!t.isConsumed()&&n.isMouseDown&&null!=this.cell&&null!=this.first&&null!=this.bounds){var a=(s=mxUtils.convertPoint(n.container,t.getX(),t.getY())).x-this.first.x,i=s.y-this.first.y,s=n.tolerance;if(null!=this.shape||Math.abs(a)>s||Math.abs(i)>s){null==this.highlight&&(this.highlight=new mxCellHighlight(this.graph,mxConstants.DROP_TARGET_COLOR,3)),null==this.shape&&(this.shape=this.createPreviewShape(this.bounds));var o=n.isGridEnabledEvent(t.getEvent());s=!0;if(null!=this.guide&&this.useGuidesForEvent(t))s=!1,a=(i=this.guide.move(this.bounds,new mxPoint(a,i),o)).x,i=i.y;else if(o){var r=n.getView().translate,l=n.getView().scale;o=this.bounds.x-(n.snap(this.bounds.x/l-r.x)+r.x)*l,r=this.bounds.y-(n.snap(this.bounds.y/l-r.y)+r.y)*l,a=(i=this.snap(new mxPoint(a,i))).x-o,i=i.y-r}for(null!=this.guide&&s&&this.guide.hide(),n.isConstrainedEvent(t.getEvent())&&(Math.abs(a)>Math.abs(i)?i=0:a=0),this.currentDx=a,this.currentDy=i,this.updatePreviewShape(),s=null,i=t.getCell(),n.isDropEnabled()&&this.highlightEnabled&&(s=n.getDropTarget(this.cells,t.getEvent(),i)),o=s,r=n.getModel();null!=o&&o!=this.cells[0];)o=r.getParent(o);l=n.isCloneEvent(t.getEvent())&&n.isCellsCloneable()&&this.isCloneEnabled();var d=!1;null==(a=n.getView().getState(s))||null!=o||r.getParent(this.cell)==s&&!l?(this.target=null,this.connectOnDrop&&null!=i&&1==this.cells.length&&n.getModel().isVertex(i)&&n.isCellConnectable(i)&&(null!=(a=n.getView().getState(i))&&(n=null==n.getEdgeValidationError(null,this.cell,i)?mxConstants.VALID_COLOR:mxConstants.INVALID_CONNECT_TARGET_COLOR,this.setHighlightColor(n),d=!0))):(this.target!=s&&(this.target=s,this.setHighlightColor(mxConstants.DROP_TARGET_COLOR)),d=!0),null!=a&&d?this.highlight.highlight(a):this.highlight.hide()}t.consume(),mxEvent.consume(t.getEvent())}else!this.isMoveEnabled()&&!this.isCloneEnabled()||!this.updateCursor||t.isConsumed()||null==t.getState()||n.isMouseDown||(null==(a=n.getCursorForCell(t.getCell()))&&n.isEnabled()&&n.isCellMovable(t.getCell())&&(a=n.getModel().isEdge(t.getCell())?mxConstants.CURSOR_MOVABLE_EDGE:mxConstants.CURSOR_MOVABLE_VERTEX),t.getState().setCursor(a),t.consume())},mxGraphHandler.prototype.updatePreviewShape=function(){null!=this.shape&&(this.shape.bounds=new mxRectangle(Math.round(this.pBounds.x+this.currentDx-this.graph.panDx),Math.round(this.pBounds.y+this.currentDy-this.graph.panDy),this.pBounds.width,this.pBounds.height),this.shape.redraw())},mxGraphHandler.prototype.setHighlightColor=function(e){null!=this.highlight&&this.highlight.setHighlightColor(e)},mxGraphHandler.prototype.mouseUp=function(e,t){if(!t.isConsumed()){var n=this.graph;if(null!=this.cell&&null!=this.first&&null!=this.shape&&null!=this.currentDx&&null!=this.currentDy){var a=n.getView().scale,i=n.isCloneEvent(t.getEvent())&&n.isCellsCloneable()&&this.isCloneEnabled(),s=this.currentDx/a,o=(a=this.currentDy/a,t.getCell());this.connectOnDrop&&null==this.target&&null!=o&&n.getModel().isVertex(o)&&n.isCellConnectable(o)&&n.isEdgeValid(null,this.cell,o)?n.connectionHandler.connect(this.cell,o,t.getEvent()):(o=this.target,n.isSplitEnabled()&&n.isSplitTarget(o,this.cells,t.getEvent())?n.splitEdge(o,this.cells,null,s,a):this.moveCells(this.cells,s,a,i,this.target,t.getEvent()))}else this.isSelectEnabled()&&this.delayedSelection&&null!=this.cell&&this.selectDelayed(t)}this.cellWasClicked&&t.consume(),this.reset()},mxGraphHandler.prototype.selectDelayed=function(e){this.graph.selectCellForEvent(this.cell,e.getEvent())},mxGraphHandler.prototype.reset=function(){this.destroyShapes(),this.delayedSelection=this.cellWasClicked=!1,this.target=this.cell=this.first=this.guides=this.currentDy=this.currentDx=null},mxGraphHandler.prototype.shouldRemoveCellsFromParent=function(e,t,n){if(this.graph.getModel().isVertex(e)){if(e=this.graph.getView().getState(e),n=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(n),mxEvent.getClientY(n)),0!=(a=mxUtils.toRadians(mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION)||0))){t=Math.cos(-a);var a=Math.sin(-a),i=new mxPoint(e.getCenterX(),e.getCenterY());n=mxUtils.getRotatedPoint(n,t,a,i)}return null!=e&&!mxUtils.contains(e,n.x,n.y)}return!1},mxGraphHandler.prototype.moveCells=function(e,t,n,a,i,s){a&&(e=this.graph.getCloneableCells(e)),null==i&&this.isRemoveCellsFromParent()&&this.shouldRemoveCellsFromParent(this.graph.getModel().getParent(this.cell),e,s)&&(i=this.graph.getDefaultParent()),e=this.graph.moveCells(e,t-this.graph.panDx/this.graph.view.scale,n-this.graph.panDy/this.graph.view.scale,a,i,s),this.isSelectEnabled()&&this.scrollOnMove&&this.graph.scrollCellToVisible(e[0]),a&&this.graph.setSelectionCells(e)},mxGraphHandler.prototype.destroyShapes=function(){null!=this.shape&&(this.shape.destroy(),this.shape=null),null!=this.guide&&(this.guide.destroy(),this.guide=null),null!=this.highlight&&(this.highlight.destroy(),this.highlight=null)},mxGraphHandler.prototype.destroy=function(){this.graph.removeMouseListener(this),this.graph.removeListener(this.panHandler),this.destroyShapes()},mxPanningHandler.prototype=new mxPopupMenu,mxPanningHandler.prototype.constructor=mxPanningHandler,mxPanningHandler.prototype.graph=null,mxPanningHandler.prototype.triggerX=null,mxPanningHandler.prototype.triggerY=null,mxPanningHandler.prototype.usePopupTrigger=!0,mxPanningHandler.prototype.useLeftButtonForPanning=!1,mxPanningHandler.prototype.selectOnPopup=!0,mxPanningHandler.prototype.clearSelectionOnBackground=!0,mxPanningHandler.prototype.ignoreCell=!1,mxPanningHandler.prototype.previewEnabled=!0,mxPanningHandler.prototype.useGrid=!1,mxPanningHandler.prototype.panningEnabled=!0,mxPanningHandler.prototype.isPanningEnabled=function(){return this.panningEnabled},mxPanningHandler.prototype.setPanningEnabled=function(e){this.panningEnabled=e},mxPanningHandler.prototype.init=function(){mxPopupMenu.prototype.init.apply(this),mxEvent.addListener(this.div,mxClient.IS_TOUCH?"touchmove":"mousemove",mxUtils.bind(this,function(e){this.graph.tooltipHandler.hide()}))},mxPanningHandler.prototype.isPanningTrigger=function(e){var t=e.getEvent();return this.useLeftButtonForPanning&&(this.ignoreCell||null==e.getState())&&mxEvent.isLeftMouseButton(t)||mxEvent.isControlDown(t)&&mxEvent.isShiftDown(t)||this.usePopupTrigger&&mxEvent.isPopupTrigger(t)},mxPanningHandler.prototype.mouseDown=function(e,t){if(!t.isConsumed()&&this.isEnabled()){this.hideMenu(),this.dx0=-this.graph.container.scrollLeft,this.dy0=-this.graph.container.scrollTop;var n=mxUtils.convertPoint(this.graph.container,t.getX(),t.getY());this.triggerX=n.x,this.triggerY=n.y,this.popupTrigger=this.isPopupTrigger(t),this.panningTrigger=this.isPanningEnabled()&&this.isPanningTrigger(t),this.startX=t.getX(),this.startY=t.getY(),this.panningTrigger&&this.consumePanningTrigger(t)}},mxPanningHandler.prototype.consumePanningTrigger=function(e){e.consume()},mxPanningHandler.prototype.mouseMove=function(e,t){var n=t.getX()-this.startX,a=t.getY()-this.startY;if(this.active)this.previewEnabled&&(this.useGrid&&(n=this.graph.snap(n),a=this.graph.snap(a)),this.graph.panGraph(n+this.dx0,a+this.dy0)),this.fireEvent(new mxEventObject(mxEvent.PAN,"event",t)),t.consume();else if(this.panningTrigger){var i=this.active;this.active=Math.abs(n)>this.graph.tolerance||Math.abs(a)>this.graph.tolerance,!i&&this.active&&this.fireEvent(new mxEventObject(mxEvent.PAN_START,"event",t))}},mxPanningHandler.prototype.mouseUp=function(e,t){var n=Math.abs(t.getX()-this.startX),a=Math.abs(t.getY()-this.startY);if(this.active){if(!this.graph.useScrollbarsForPanning||!mxUtils.hasScrollbars(this.graph.container)){n=t.getX()-this.startX,a=t.getY()-this.startY,this.useGrid&&(n=this.graph.snap(n),a=this.graph.snap(a));var i=this.graph.getView().scale,s=this.graph.getView().translate;this.graph.panGraph(0,0),this.panGraph(s.x+n/i,s.y+a/i)}this.active=!1,this.fireEvent(new mxEventObject(mxEvent.PAN_END,"event",t)),t.consume()}else this.popupTrigger&&n<this.graph.tolerance&&a<this.graph.tolerance&&(n=this.getCellForPopupEvent(t),this.graph.isEnabled()&&this.selectOnPopup&&null!=n&&!this.graph.isCellSelected(n)?this.graph.setSelectionCell(n):this.clearSelectionOnBackground&&null==n&&this.graph.clearSelection(),this.graph.tooltipHandler.hide(),a=mxUtils.getScrollOrigin(),a=new mxPoint(t.getX()+a.x,t.getY()+a.y),this.popup(a.x+1,a.y+1,n,t.getEvent()),t.consume());this.popupTrigger=this.panningTrigger=!1},mxPanningHandler.prototype.getCellForPopupEvent=function(e){return e.getCell()},mxPanningHandler.prototype.panGraph=function(e,t){this.graph.getView().setTranslate(e,t)},mxPanningHandler.prototype.destroy=function(){this.graph.removeMouseListener(this),mxPopupMenu.prototype.destroy.apply(this)},mxUtils.extend(mxCellMarker,mxEventSource),mxCellMarker.prototype.graph=null,mxCellMarker.prototype.enabled=!0,mxCellMarker.prototype.hotspot=mxConstants.DEFAULT_HOTSPOT,mxCellMarker.prototype.hotspotEnabled=!1,mxCellMarker.prototype.validColor=null,mxCellMarker.prototype.invalidColor=null,mxCellMarker.prototype.currentColor=null,mxCellMarker.prototype.validState=null,mxCellMarker.prototype.markedState=null,mxCellMarker.prototype.setEnabled=function(e){this.enabled=e},mxCellMarker.prototype.isEnabled=function(){return this.enabled},mxCellMarker.prototype.setHotspot=function(e){this.hotspot=e},mxCellMarker.prototype.getHotspot=function(){return this.hotspot},mxCellMarker.prototype.setHotspotEnabled=function(e){this.hotspotEnabled=e},mxCellMarker.prototype.isHotspotEnabled=function(){return this.hotspotEnabled},mxCellMarker.prototype.hasValidState=function(){return null!=this.validState},mxCellMarker.prototype.getValidState=function(){return this.validState},mxCellMarker.prototype.getMarkedState=function(){return this.markedState},mxCellMarker.prototype.reset=function(){(this.validState=null)!=this.markedState&&(this.markedState=null,this.unmark())},mxCellMarker.prototype.process=function(e){var t=null;if(this.isEnabled()){var n=null!=(t=this.getState(e))&&this.isValidState(t);e=this.getMarkerColor(e.getEvent(),t,n),this.validState=n?t:null,t==this.markedState&&e==this.currentColor||(this.currentColor=e,null!=t&&null!=this.currentColor?(this.markedState=t,this.mark()):null!=this.markedState&&(this.markedState=null,this.unmark()))}return t},mxCellMarker.prototype.markCell=function(e,t){var n=this.graph.getView().getState(e);null!=n&&(this.currentColor=null!=t?t:this.validColor,this.markedState=n,this.mark())},mxCellMarker.prototype.mark=function(){this.highlight.setHighlightColor(this.currentColor),this.highlight.highlight(this.markedState),this.fireEvent(new mxEventObject(mxEvent.MARK,"state",this.markedState))},mxCellMarker.prototype.unmark=function(){this.mark()},mxCellMarker.prototype.isValidState=function(e){return!0},mxCellMarker.prototype.getMarkerColor=function(e,t,n){return n?this.validColor:this.invalidColor},mxCellMarker.prototype.getState=function(e){var t=this.graph.getView();return cell=this.getCell(e),null!=(t=this.getStateToMark(t.getState(cell)))&&this.intersects(t,e)?t:null},mxCellMarker.prototype.getCell=function(e){return e.getCell()},mxCellMarker.prototype.getStateToMark=function(e){return e},mxCellMarker.prototype.intersects=function(e,t){return!this.hotspotEnabled||mxUtils.intersectsHotspot(e,t.getGraphX(),t.getGraphY(),this.hotspot,mxConstants.MIN_HOTSPOT_SIZE,mxConstants.MAX_HOTSPOT_SIZE)},mxCellMarker.prototype.destroy=function(){this.graph.getView().removeListener(this.resetHandler),this.graph.getModel().removeListener(this.resetHandler),this.highlight.destroy()},mxUtils.extend(mxSelectionCellsHandler,mxEventSource),mxSelectionCellsHandler.prototype.graph=null,mxSelectionCellsHandler.prototype.enabled=!0,mxSelectionCellsHandler.prototype.refreshHandler=null,mxSelectionCellsHandler.prototype.maxHandlers=100,mxSelectionCellsHandler.prototype.handlers=null,mxSelectionCellsHandler.prototype.isEnabled=function(){return this.enabled},mxSelectionCellsHandler.prototype.setEnabled=function(e){this.enabled=e},mxSelectionCellsHandler.prototype.getHandler=function(e){return this.handlers.get(e)},mxSelectionCellsHandler.prototype.reset=function(){this.handlers.visit(function(e,t){t.reset.apply(t)})},mxSelectionCellsHandler.prototype.refresh=function(){var e=this.handlers;this.handlers=new mxDictionary;for(var t=this.graph.getSelectionCells(),n=0;n<t.length;n++){var a=this.graph.view.getState(t[n]);if(null!=a){var i=e.remove(t[n]);null!=i&&(i.state!=a?(i.destroy(),i=null):i.redraw()),null==i&&(i=this.graph.createHandler(a),this.fireEvent(new mxEventObject(mxEvent.ADD,"state",a))),null!=i&&this.handlers.put(t[n],i)}}e.visit(mxUtils.bind(this,function(e,t){this.fireEvent(new mxEventObject(mxEvent.REMOVE,"state",t.state)),t.destroy()}))},mxSelectionCellsHandler.prototype.mouseDown=function(e,t){if(this.graph.isEnabled()&&this.isEnabled()){var n=[e,t];this.handlers.visit(function(e,t){t.mouseDown.apply(t,n)})}},mxSelectionCellsHandler.prototype.mouseMove=function(e,t){if(this.graph.isEnabled()&&this.isEnabled()){var n=[e,t];this.handlers.visit(function(e,t){t.mouseMove.apply(t,n)})}},mxSelectionCellsHandler.prototype.mouseUp=function(e,t){if(this.graph.isEnabled()&&this.isEnabled()){var n=[e,t];this.handlers.visit(function(e,t){t.mouseUp.apply(t,n)})}},mxSelectionCellsHandler.prototype.destroy=function(){this.graph.removeMouseListener(this),null!=this.refreshHandler&&(this.graph.getSelectionModel().removeListener(this.refreshHandler),this.graph.getModel().removeListener(this.refreshHandler),this.graph.getView().removeListener(this.refreshHandler),this.refreshHandler=null)},mxUtils.extend(mxConnectionHandler,mxEventSource),mxConnectionHandler.prototype.graph=null,mxConnectionHandler.prototype.factoryMethod=!0,mxConnectionHandler.prototype.moveIconFront=!1,mxConnectionHandler.prototype.moveIconBack=!1,mxConnectionHandler.prototype.connectImage=null,mxConnectionHandler.prototype.targetConnectImage=!1,mxConnectionHandler.prototype.enabled=!0,mxConnectionHandler.prototype.select=!0,mxConnectionHandler.prototype.createTarget=!1;mxConnectionHandler.prototype.marker=null,mxConnectionHandler.prototype.constraintHandler=null,mxConnectionHandler.prototype.error=null,mxConnectionHandler.prototype.waypointsEnabled=!1,mxConnectionHandler.prototype.tapAndHoldEnabled=!0,mxConnectionHandler.prototype.tapAndHoldDelay=500,mxConnectionHandler.prototype.tapAndHoldInProgress=!1,mxConnectionHandler.prototype.tapAndHoldValid=!1,mxConnectionHandler.prototype.tapAndHoldTolerance=4,mxConnectionHandler.prototype.initialTouchX=0,mxConnectionHandler.prototype.initialTouchY=0,mxConnectionHandler.prototype.ignoreMouseDown=!1,mxConnectionHandler.prototype.first=null,mxConnectionHandler.prototype.connectIconOffset=new mxPoint(0,mxConstants.TOOLTIP_VERTICAL_OFFSET),mxConnectionHandler.prototype.edgeState=null,mxConnectionHandler.prototype.changeHandler=null,mxConnectionHandler.prototype.drillHandler=null,mxConnectionHandler.prototype.mouseDownCounter=0,mxConnectionHandler.prototype.movePreviewAway=mxClient.IS_VML,mxConnectionHandler.prototype.isEnabled=function(){return this.enabled},mxConnectionHandler.prototype.setEnabled=function(e){this.enabled=e},mxConnectionHandler.prototype.isCreateTarget=function(){return this.createTarget},mxConnectionHandler.prototype.setCreateTarget=function(e){this.createTarget=e},mxConnectionHandler.prototype.createShape=function(){var e=new mxPolyline([],mxConstants.INVALID_COLOR);if(e.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,e.init(this.graph.getView().getOverlayPane()),e.svgStrokeTolerance=0,e.pointerEvents=!1,e.isDashed=!0,this.graph.dialect==mxConstants.DIALECT_SVG)e.node.setAttribute("pointer-events","none");else{var t=mxUtils.bind(this,function(e){return e=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(e),mxEvent.getClientY(e)),this.graph.view.getState(this.graph.getCellAt(e.x,e.y))});mxEvent.redirectMouseEvents(e.node,this.graph,t)}return e},mxConnectionHandler.prototype.init=function(){this.graph.addMouseListener(this),this.marker=this.createMarker(),this.constraintHandler=new mxConstraintHandler(this.graph),this.changeHandler=mxUtils.bind(this,function(e){null!=this.iconState&&(this.iconState=this.graph.getView().getState(this.iconState.cell)),null!=this.iconState?this.redrawIcons(this.icons,this.iconState):(this.destroyIcons(this.icons),this.previous=null),this.constraintHandler.reset()}),this.graph.getModel().addListener(mxEvent.CHANGE,this.changeHandler),this.graph.getView().addListener(mxEvent.SCALE,this.changeHandler),this.graph.getView().addListener(mxEvent.TRANSLATE,this.changeHandler),this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE,this.changeHandler),this.drillHandler=mxUtils.bind(this,function(e){this.destroyIcons(this.icons)}),this.graph.addListener(mxEvent.START_EDITING,this.drillHandler),this.graph.getView().addListener(mxEvent.DOWN,this.drillHandler),this.graph.getView().addListener(mxEvent.UP,this.drillHandler)},mxConnectionHandler.prototype.isConnectableCell=function(e){return!0},mxConnectionHandler.prototype.createMarker=function(){var a=new mxCellMarker(this.graph);return a.hotspotEnabled=!0,a.getCell=mxUtils.bind(this,function(e,t){return t=mxCellMarker.prototype.getCell.apply(a,arguments),this.error=null,this.isConnectableCell(t)?(null!=t?this.isConnecting()?null!=this.previous&&(this.error=this.validateConnection(this.previous.cell,t),null!=this.error&&0==this.error.length&&(t=null,this.isCreateTarget()&&(this.error=null))):this.isValidSource(t)||(t=null):this.isConnecting()&&!this.isCreateTarget()&&!this.graph.allowDanglingEdges&&(this.error=""),t):null}),a.isValidState=mxUtils.bind(this,function(e){return this.isConnecting()?null==this.error:mxCellMarker.prototype.isValidState.apply(a,arguments)}),a.getMarkerColor=mxUtils.bind(this,function(e,t,n){return null==this.connectImage||this.isConnecting()?mxCellMarker.prototype.getMarkerColor.apply(a,arguments):null}),a.intersects=mxUtils.bind(this,function(e,t){return!(null==this.connectImage&&!this.isConnecting())||mxCellMarker.prototype.intersects.apply(a,arguments)}),a},mxConnectionHandler.prototype.start=function(e,t,n,a){this.previous=e,this.first=new mxPoint(t,n),this.edgeState=null!=a?a:this.createEdgeState(null),this.marker.currentColor=this.marker.validColor,this.marker.markedState=e,this.marker.mark(),this.fireEvent(new mxEventObject(mxEvent.START,"state",this.previous))},mxConnectionHandler.prototype.isConnecting=function(){return null!=this.first&&null!=this.shape},mxConnectionHandler.prototype.isValidSource=function(e){return this.graph.isValidSource(e)},mxConnectionHandler.prototype.isValidTarget=function(e){return!0},mxConnectionHandler.prototype.validateConnection=function(e,t){return this.isValidTarget(t)?this.graph.getEdgeValidationError(null,e,t):""},mxConnectionHandler.prototype.getConnectImage=function(e){return this.connectImage},mxConnectionHandler.prototype.isMoveIconToFrontForState=function(e){return null!=e.text&&e.text.node.parentNode==this.graph.container||this.moveIconFront},mxConnectionHandler.prototype.createIcons=function(e){if(null==(i=this.getConnectImage(e))||null==e)return null;this.iconState=e;var t=[],n=new mxImageShape(new mxRectangle(0,0,i.width,i.height),i.src,null,null,0);n.preserveImageAspect=!1,this.isMoveIconToFrontForState(e)?(n.dialect=mxConstants.DIALECT_STRICTHTML,n.init(this.graph.container)):(n.dialect=this.graph.dialect==mxConstants.DIALECT_SVG?mxConstants.DIALECT_SVG:mxConstants.DIALECT_VML,n.init(this.graph.getView().getOverlayPane()),this.moveIconBack&&null!=n.node.previousSibling&&n.node.parentNode.insertBefore(n.node,n.node.parentNode.firstChild)),n.node.style.cursor=mxConstants.CURSOR_CONNECT;var a=mxUtils.bind(this,function(){return null!=this.currentState?this.currentState:e}),i=mxUtils.bind(this,function(e){mxEvent.isConsumed(e)||(this.icon=n,this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e,a())))});return mxEvent.redirectMouseEvents(n.node,this.graph,a,i),t.push(n),this.redrawIcons(t,this.iconState),t},mxConnectionHandler.prototype.redrawIcons=function(e,t){if(null!=e&&null!=e[0]&&null!=t){var n=this.getIconPosition(e[0],t);e[0].bounds.x=n.x,e[0].bounds.y=n.y,e[0].redraw()}},mxConnectionHandler.prototype.getIconPosition=function(e,t){var n=this.graph.getView().scale,a=t.getCenterX(),i=t.getCenterY();if(this.graph.isSwimlane(t.cell)){a=0!=(s=this.graph.getStartSize(t.cell)).width?t.x+s.width*n/2:a,i=0!=s.height?t.y+s.height*n/2:i;if(0!=(s=mxUtils.toRadians(mxUtils.getValue(t.style,mxConstants.STYLE_ROTATION)||0))){n=Math.cos(s);var s=Math.sin(s),o=new mxPoint(t.getCenterX(),t.getCenterY());a=(i=mxUtils.getRotatedPoint(new mxPoint(a,i),n,s,o)).x,i=i.y}}return new mxPoint(a-e.bounds.width/2,i-e.bounds.height/2)},mxConnectionHandler.prototype.destroyIcons=function(e){if(null!=e){this.iconState=null;for(var t=0;t<e.length;t++)e[t].destroy()}},mxConnectionHandler.prototype.isStartEvent=function(e){return!this.graph.isForceMarqueeEvent(e.getEvent())&&(null!=this.constraintHandler.currentFocus&&null!=this.constraintHandler.currentConstraint||null!=this.previous&&null==this.error&&(null==this.icons||null!=this.icons&&null!=this.icon))},mxConnectionHandler.prototype.mouseDown=function(e,t){if(this.mouseDownCounter++,this.isEnabled()&&this.graph.isEnabled()&&!t.isConsumed()&&!this.isConnecting()&&this.isStartEvent(t)){if(null!=this.constraintHandler.currentConstraint&&null!=this.constraintHandler.currentFocus&&null!=this.constraintHandler.currentPoint?(this.sourceConstraint=this.constraintHandler.currentConstraint,this.previous=this.constraintHandler.currentFocus,this.first=this.constraintHandler.currentPoint.clone()):this.first=new mxPoint(t.getGraphX(),t.getGraphY()),this.edgeState=this.createEdgeState(t),this.mouseDownCounter=1,this.waypointsEnabled&&null==this.shape&&(this.waypoints=null,this.shape=this.createShape()),null==this.previous&&null!=this.edgeState){var n=this.graph.getPointForEvent(t.getEvent());this.edgeState.cell.geometry.setTerminalPoint(n,!0)}this.fireEvent(new mxEventObject(mxEvent.START,"state",this.previous)),t.consume()}else if(mxClient.IS_TOUCH&&this.tapAndHoldEnabled&&!this.tapAndHoldInProgress&&this.isEnabled()&&this.graph.isEnabled()&&!this.isConnecting()){this.tapAndHoldInProgress=!0,this.initialTouchX=t.getX(),this.initialTouchY=t.getY();var a=this.graph.view.getState(this.marker.getCell(t));this.tapAndHoldThread&&window.clearTimeout(this.tapAndHoldThread),this.tapAndHoldThread=window.setTimeout(mxUtils.bind(this,function(){this.tapAndHoldValid&&this.tapAndHold(t,a),this.tapAndHoldValid=this.tapAndHoldInProgress=!1}),this.tapAndHoldDelay),this.tapAndHoldValid=!0}this.selectedIcon=this.icon,this.icon=null},mxConnectionHandler.prototype.tapAndHold=function(e,t){null!=t&&(this.marker.currentColor=this.marker.validColor,this.marker.markedState=t,this.marker.mark(),this.first=new mxPoint(e.getGraphX(),e.getGraphY()),this.edgeState=this.createEdgeState(e),this.previous=t,this.fireEvent(new mxEventObject(mxEvent.START,"state",this.previous)))},mxConnectionHandler.prototype.isImmediateConnectSource=function(e){return!this.graph.isCellMovable(e.cell)},mxConnectionHandler.prototype.createEdgeState=function(e){return null},mxConnectionHandler.prototype.updateCurrentState=function(e){var t=this.marker.process(e);this.constraintHandler.update(e,null==this.first),this.currentState=t},mxConnectionHandler.prototype.convertWaypoint=function(e){var t=this.graph.getView().getScale(),n=this.graph.getView().getTranslate();e.x=e.x/t-n.x,e.y=e.y/t-n.y},mxConnectionHandler.prototype.mouseMove=function(e,t){if(this.tapAndHoldValid&&(this.tapAndHoldValid=Math.abs(this.initialTouchX-t.getX())<this.tapAndHoldTolerance&&Math.abs(this.initialTouchY-t.getY())<this.tapAndHoldTolerance),t.isConsumed()||!this.ignoreMouseDown&&null==this.first&&this.graph.isMouseDown)this.constraintHandler.reset();else{if(!this.isEnabled()&&null!=this.currentState&&(this.destroyIcons(this.icons),this.currentState=null),(null!=this.first||this.isEnabled()&&this.graph.isEnabled())&&this.updateCurrentState(t),null!=this.first){var n=this.graph.getView().scale,a=null,i=n=new mxPoint(this.graph.snap(t.getGraphX()/n)*n,this.graph.snap(t.getGraphY()/n)*n);null!=this.constraintHandler.currentConstraint&&null!=this.constraintHandler.currentFocus&&null!=this.constraintHandler.currentPoint&&(a=this.constraintHandler.currentConstraint,i=this.constraintHandler.currentPoint.clone());var s=this.first;if(null!=this.selectedIcon){var o=this.selectedIcon.bounds.width,r=this.selectedIcon.bounds.height;null!=this.currentState&&this.targetConnectImage?(o=this.getIconPosition(this.selectedIcon,this.currentState),this.selectedIcon.bounds.x=o.x,this.selectedIcon.bounds.y=o.y):(o=new mxRectangle(t.getGraphX()+this.connectIconOffset.x,t.getGraphY()+this.connectIconOffset.y,o,r),this.selectedIcon.bounds=o),this.selectedIcon.redraw()}if(null!=this.edgeState){if(this.edgeState.absolutePoints=[null,null!=this.currentState?null:i],this.graph.view.updateFixedTerminalPoint(this.edgeState,this.previous,!0,this.sourceConstraint),null!=this.currentState&&(null==a&&(a=this.graph.getConnectionConstraint(this.edgeState,this.previous,!1)),this.edgeState.setAbsoluteTerminalPoint(null,!1),this.graph.view.updateFixedTerminalPoint(this.edgeState,this.currentState,!1,a)),(s=null)!=this.waypoints)for(s=[],i=0;i<this.waypoints.length;i++)a=this.waypoints[i].clone(),this.convertWaypoint(a),s[i]=a;this.graph.view.updatePoints(this.edgeState,s,this.previous,this.currentState),this.graph.view.updateFloatingTerminalPoints(this.edgeState,this.previous,this.currentState),i=this.edgeState.absolutePoints[this.edgeState.absolutePoints.length-1],s=this.edgeState.absolutePoints[0]}else null!=this.currentState&&null==this.constraintHandler.currentConstraint&&(null!=(o=this.getTargetPerimeterPoint(this.currentState,t))&&(i=o)),null==this.sourceConstraint&&null!=this.previous&&(null!=(o=this.getSourcePerimeterPoint(this.previous,null!=this.waypoints&&0<this.waypoints.length?this.waypoints[0]:i,t))&&(s=o));if(null==this.currentState&&this.movePreviewAway){if(o=s,null!=this.edgeState&&2<this.edgeState.absolutePoints.length&&(null!=(a=this.edgeState.absolutePoints[this.edgeState.absolutePoints.length-2])&&(o=a)),a=i.x-o.x,o=i.y-o.y,0==(r=Math.sqrt(a*a+o*o)))return;i.x-=4*a/r,i.y-=4*o/r}null==this.shape&&(a=Math.abs(n.x-this.first.x),o=Math.abs(n.y-this.first.y),a>this.graph.tolerance||o>this.graph.tolerance)&&(this.shape=this.createShape(),this.updateCurrentState(t)),null!=this.shape&&(null!=this.edgeState?this.shape.points=this.edgeState.absolutePoints:(n=[s],null!=this.waypoints&&(n=n.concat(this.waypoints)),n.push(i),this.shape.points=n),this.drawPreview()),mxEvent.consume(t.getEvent()),t.consume()}else this.isEnabled()&&this.graph.isEnabled()?this.previous!=this.currentState&&null==this.edgeState?(this.destroyIcons(this.icons),(this.icons=null)!=this.currentState&&null==this.error&&(this.icons=this.createIcons(this.currentState),null==this.icons&&(this.currentState.setCursor(mxConstants.CURSOR_CONNECT),t.consume())),this.previous=this.currentState):this.previous==this.currentState&&null!=this.currentState&&null==this.icons&&!this.graph.isMouseDown&&t.consume():this.constraintHandler.reset();if(null!=this.constraintHandler.currentConstraint&&this.marker.reset(),!this.graph.isMouseDown&&null!=this.currentState&&null!=this.icons){for(n=!1,s=t.getSource(),i=0;i<this.icons.length&&!n;i++)n=s==this.icons[i].node||s.parentNode==this.icons[i].node;n||this.updateIcons(this.currentState,this.icons,t)}}},mxConnectionHandler.prototype.getTargetPerimeterPoint=function(e,t){var n=null,a=(i=e.view).getPerimeterFunction(e);if(null!=a){var i,s=null!=this.waypoints&&0<this.waypoints.length?this.waypoints[this.waypoints.length-1]:new mxPoint(this.previous.getCenterX(),this.previous.getCenterY());null!=(i=a(i.getPerimeterBounds(e),this.edgeState,s,!1))&&(n=i)}else n=new mxPoint(e.getCenterX(),e.getCenterY());return n},mxConnectionHandler.prototype.getSourcePerimeterPoint=function(e,t,n){n=null;var a=e.view,i=a.getPerimeterFunction(e),s=new mxPoint(e.getCenterX(),e.getCenterY());if(null!=i){var o=mxUtils.getValue(e.style,mxConstants.STYLE_ROTATION,0),r=-o*(Math.PI/180);0!=o&&(t=mxUtils.getRotatedPoint(new mxPoint(t.x,t.y),Math.cos(r),Math.sin(r),s)),null!=(e=i(a.getPerimeterBounds(e),e,t,!1))&&(0!=o&&(e=mxUtils.getRotatedPoint(new mxPoint(e.x,e.y),Math.cos(-r),Math.sin(-r),s)),n=e)}else n=s;return n},mxConnectionHandler.prototype.updateIcons=function(e,t,n){},mxConnectionHandler.prototype.isStopEvent=function(e){return null!=e.getState()},mxConnectionHandler.prototype.addWaypointForEvent=function(e){var t=mxUtils.convertPoint(this.graph.container,e.getX(),e.getY()),n=Math.abs(t.x-this.first.x);t=Math.abs(t.y-this.first.y);(null!=this.waypoints||1<this.mouseDownCounter&&(n>this.graph.tolerance||t>this.graph.tolerance))&&(null==this.waypoints&&(this.waypoints=[]),n=this.graph.view.scale,t=new mxPoint(this.graph.snap(e.getGraphX()/n)*n,this.graph.snap(e.getGraphY()/n)*n),this.waypoints.push(t))},mxConnectionHandler.prototype.mouseUp=function(e,t){if(!t.isConsumed()&&this.isConnecting()){if(this.waypointsEnabled&&!this.isStopEvent(t))return this.addWaypointForEvent(t),void t.consume();if(null==this.error){var n=null!=this.previous?this.previous.cell:null,a=null;null!=this.constraintHandler.currentConstraint&&null!=this.constraintHandler.currentFocus&&(a=this.constraintHandler.currentFocus.cell),null==a&&this.marker.hasValidState()&&(a=this.marker.validState.cell),this.connect(n,a,t.getEvent(),t.getCell())}else null!=this.previous&&null!=this.marker.validState&&this.previous.cell==this.marker.validState.cell&&this.graph.selectCellForEvent(this.marker.source,evt),0<this.error.length&&this.graph.validationAlert(this.error);this.destroyIcons(this.icons),t.consume()}null!=this.first&&this.reset(),this.tapAndHoldValid=this.tapAndHoldInProgress=!1},mxConnectionHandler.prototype.reset=function(){null!=this.shape&&(this.shape.destroy(),this.shape=null),this.destroyIcons(this.icons),this.icons=null,this.marker.reset(),this.constraintHandler.reset(),this.sourceConstraint=this.error=this.previous=this.edgeState=this.selectedIcon=null,this.mouseDownCounter=0,this.icon=this.first=null,this.fireEvent(new mxEventObject(mxEvent.RESET))},mxConnectionHandler.prototype.drawPreview=function(){var e=null==this.error;this.shape.strokewidth=this.getEdgeWidth(e),e=this.getEdgeColor(e),this.shape.stroke=e,this.shape.redraw()},mxConnectionHandler.prototype.getEdgeColor=function(e){return e?mxConstants.VALID_COLOR:mxConstants.INVALID_COLOR},mxConnectionHandler.prototype.getEdgeWidth=function(e){return e?3:1},mxConnectionHandler.prototype.connect=function(e,t,n,a){if(null!=t||this.isCreateTarget()||this.graph.allowDanglingEdges){var i=this.graph.getModel(),s=null;i.beginUpdate();try{if(null!=e&&null==t&&this.isCreateTarget()&&null!=(t=this.createTargetVertex(n,e))){if(null!=(a=this.graph.getDropTarget([t],n,a))&&this.graph.getModel().isEdge(a))a=this.graph.getDefaultParent();else{var o=this.graph.getView().getState(a);if(null!=o){var r=i.getGeometry(t);r.x-=o.origin.x,r.y-=o.origin.y}}this.graph.addCell(t,a)}var l=this.graph.getDefaultParent();if(null!=e&&null!=t&&i.getParent(e)==i.getParent(t)&&i.getParent(i.getParent(e))!=i.getRoot()&&(l=i.getParent(e),null!=e.geometry&&e.geometry.relative&&null!=t.geometry&&t.geometry.relative&&(l=i.getParent(l))),r=o=null,null!=this.edgeState&&(o=this.edgeState.cell.value,r=this.edgeState.cell.style),null!=(s=this.insertEdge(l,null,o,e,t,r))){this.graph.setConnectionConstraint(s,e,!0,this.sourceConstraint),this.graph.setConnectionConstraint(s,t,!1,this.constraintHandler.currentConstraint),null!=this.edgeState&&i.setGeometry(s,this.edgeState.cell.geometry);var d=i.getGeometry(s);if(null==d&&((d=new mxGeometry).relative=!0,i.setGeometry(s,d)),null!=this.waypoints&&0<this.waypoints.length){var c=this.graph.view.scale,m=this.graph.view.translate;for(d.points=[],e=0;e<this.waypoints.length;e++){var u=this.waypoints[e];d.points.push(new mxPoint(u.x/c-m.x,u.y/c-m.y))}}null==t&&((u=this.graph.getPointForEvent(n,!1)).x-=this.graph.panDx/this.graph.view.scale,u.y-=this.graph.panDy/this.graph.view.scale,d.setTerminalPoint(u,!1)),this.fireEvent(new mxEventObject(mxEvent.CONNECT,"cell",s,"event",n,"target",a))}}catch(e){mxLog.show(),mxLog.debug(e.message)}finally{i.endUpdate()}this.select&&this.selectCells(s,t)}},mxConnectionHandler.prototype.selectCells=function(e,t){this.graph.setSelectionCell(e)},mxConnectionHandler.prototype.insertEdge=function(e,t,n,a,i,s){return null==this.factoryMethod?this.graph.insertEdge(e,t,n,a,i,s):(t=this.createEdge(n,a,i,s),this.graph.addEdge(t,e,a,i))},mxConnectionHandler.prototype.createTargetVertex=function(e,t){for(var n=this.graph.getCellGeometry(t);null!=n&&n.relative;)t=this.graph.getModel().getParent(t),n=this.graph.getCellGeometry(t);var a=this.graph.cloneCells([t])[0];if(null!=(n=this.graph.getModel().getGeometry(a))){var i=this.graph.getPointForEvent(e);if(n.x=this.graph.snap(i.x-n.width/2)-this.graph.panDx/this.graph.view.scale,n.y=this.graph.snap(i.y-n.height/2)-this.graph.panDy/this.graph.view.scale,null!=this.first){var s=this.graph.view.getState(t);if(null!=s){var o=this.getAlignmentTolerance();Math.abs(this.graph.snap(this.first.x)-this.graph.snap(i.x))<=o?n.x=s.x:Math.abs(this.graph.snap(this.first.y)-this.graph.snap(i.y))<=o&&(n.y=s.y)}}}return a},mxConnectionHandler.prototype.getAlignmentTolerance=function(){return this.graph.isGridEnabled()?this.graph.gridSize:this.graph.tolerance},mxConnectionHandler.prototype.createEdge=function(e,t,n,a){var i=null;return null!=this.factoryMethod&&(i=this.factoryMethod(t,n,a)),null==i&&((i=new mxCell(e||"")).setEdge(!0),i.setStyle(a),(e=new mxGeometry).relative=!0,i.setGeometry(e)),i},mxConnectionHandler.prototype.destroy=function(){this.graph.removeMouseListener(this),null!=this.shape&&(this.shape.destroy(),this.shape=null),null!=this.marker&&(this.marker.destroy(),this.marker=null),null!=this.constraintHandler&&(this.constraintHandler.destroy(),this.constraintHandler=null),null!=this.changeHandler&&(this.graph.getModel().removeListener(this.changeHandler),this.graph.getView().removeListener(this.changeHandler),this.changeHandler=null),null!=this.drillHandler&&(this.graph.removeListener(this.drillHandler),this.graph.getView().removeListener(this.drillHandler),this.drillHandler=null)},mxConstraintHandler.prototype.pointImage=new mxImage(mxClient.imageBasePath+"/point.gif",5,5),mxConstraintHandler.prototype.graph=null,mxConstraintHandler.prototype.enabled=!0,mxConstraintHandler.prototype.highlightColor=mxConstants.DEFAULT_VALID_COLOR,mxConstraintHandler.prototype.isEnabled=function(){return this.enabled},mxConstraintHandler.prototype.setEnabled=function(e){this.enabled=e},mxConstraintHandler.prototype.reset=function(){if(null!=this.focusIcons){for(var e=0;e<this.focusIcons.length;e++)this.focusIcons[e].destroy();this.focusIcons=null}null!=this.focusHighlight&&(this.focusHighlight.destroy(),this.focusHighlight=null),this.focusPoints=this.currentFocus=this.currentPoint=this.currentFocusArea=this.currentConstraint=null},mxConstraintHandler.prototype.getTolerance=function(){return this.graph.getTolerance()},mxConstraintHandler.prototype.getImageForConstraint=function(e,t,n){return this.pointImage},mxConstraintHandler.prototype.isEventIgnored=function(e,t){return!1},mxConstraintHandler.prototype.update=function(e,t){if(this.isEnabled()&&!this.isEventIgnored(e)){var n=this.getTolerance(),a=new mxRectangle(e.getGraphX()-n,e.getGraphY()-n,2*n,2*n),i=null!=e.getCell()&&this.graph.isCellConnectable(e.getCell());if((null==this.currentFocusArea||!mxUtils.intersects(this.currentFocusArea,a)||null!=e.getState()&&null!=this.currentFocus&&i)&&(this.currentFocusArea=null,e.getState()!=this.currentFocus))if(this.currentFocus=null,this.constraints=null!=e.getState()&&i?this.graph.getAllConnectionConstraints(e.getState(),t):null,null!=this.constraints){if(this.currentFocus=e.getState(),this.currentFocusArea=new mxRectangle(e.getState().x,e.getState().y,e.getState().width,e.getState().height),null!=this.focusIcons){for(i=0;i<this.focusIcons.length;i++)this.focusIcons[i].destroy();this.focusPoints=this.focusIcons=null}for(this.focusIcons=[],this.focusPoints=[],i=0;i<this.constraints.length;i++){var s,o=this.graph.getConnectionPoint(e.getState(),this.constraints[i]),r=(s=this.getImageForConstraint(e.getState(),this.constraints[i],o)).src;(s=new mxImageShape(s=new mxRectangle(o.x-s.width/2,o.y-s.height/2,s.width,s.height),r)).dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_MIXEDHTML:mxConstants.DIALECT_SVG,s.preserveImageAspect=!1,s.init(this.graph.getView().getOverlayPane()),null!=s.node.previousSibling&&s.node.parentNode.insertBefore(s.node,s.node.parentNode.firstChild),r=mxUtils.bind(this,function(){return null!=this.currentFocus?this.currentFocus:e.getState()}),s.redraw(),mxEvent.redirectMouseEvents(s.node,this.graph,r),this.currentFocusArea.add(s.bounds),this.focusIcons.push(s),this.focusPoints.push(o)}this.currentFocusArea.grow(n)}else if(null!=this.focusIcons){for(null!=this.focusHighlight&&(this.focusHighlight.destroy(),this.focusHighlight=null),i=0;i<this.focusIcons.length;i++)this.focusIcons[i].destroy();this.focusPoints=this.focusIcons=null}if(this.currentPoint=this.currentConstraint=null,null!=this.focusIcons&&null!=this.constraints&&(null==e.getState()||this.currentFocus==e.getState()))for(i=0;i<this.focusIcons.length;i++)if(mxUtils.intersects(this.focusIcons[i].bounds,a)){this.currentConstraint=this.constraints[i],this.currentPoint=this.focusPoints[i],(n=this.focusIcons[i].bounds.clone()).grow(mxClient.IS_IE?3:2),mxClient.IS_IE&&(n.width-=1,n.height-=1),null==this.focusHighlight?((n=new mxRectangleShape(n,null,this.highlightColor,3)).dialect=this.graph.dialect==mxConstants.DIALECT_SVG?mxConstants.DIALECT_SVG:mxConstants.DIALECT_VML,n.init(this.graph.getView().getOverlayPane()),this.focusHighlight=n,r=mxUtils.bind(this,function(){return null!=this.currentFocus?this.currentFocus:e.getState()}),mxEvent.redirectMouseEvents(n.node,this.graph,r)):(this.focusHighlight.bounds=n,this.focusHighlight.redraw());break}null==this.currentConstraint&&null!=this.focusHighlight&&(this.focusHighlight.destroy(),this.focusHighlight=null)}},mxConstraintHandler.prototype.destroy=function(){this.reset()},mxRubberband.prototype.defaultOpacity=20,mxRubberband.prototype.enabled=!0,mxRubberband.prototype.div=null,mxRubberband.prototype.sharedDiv=null,mxRubberband.prototype.currentX=0,mxRubberband.prototype.currentY=0,mxRubberband.prototype.isEnabled=function(){return this.enabled},mxRubberband.prototype.setEnabled=function(e){this.enabled=e},mxRubberband.prototype.mouseDown=function(e,t){if(!t.isConsumed()&&this.isEnabled()&&this.graph.isEnabled()&&(this.graph.isForceMarqueeEvent(t.getEvent())||null==t.getState())){var n=mxUtils.getOffset(this.graph.container),a=mxUtils.getScrollOrigin(this.graph.container);if(a.x-=n.x,a.y-=n.y,this.start(t.getX()+a.x,t.getY()+a.y),mxClient.IS_NS&&!mxClient.IS_SF&&!mxClient.IS_GC){var i=this.graph.container,s=function(e){e=new mxMouseEvent(e);var t=mxUtils.convertPoint(i,e.getX(),e.getY());return e.graphX=t.x,e.graphY=t.y,e};this.dragHandler=mxUtils.bind(this,function(e){this.mouseMove(this.graph,s(e))}),this.dropHandler=mxUtils.bind(this,function(e){this.mouseUp(this.graph,s(e))}),mxEvent.addListener(document,"mousemove",this.dragHandler),mxEvent.addListener(document,"mouseup",this.dropHandler)}t.consume(!1)}},mxRubberband.prototype.start=function(e,t){this.first=new mxPoint(e,t)},mxRubberband.prototype.mouseMove=function(e,t){if(!t.isConsumed()&&null!=this.first){var n=mxUtils.getScrollOrigin(this.graph.container),a=mxUtils.getOffset(this.graph.container);n.x-=a.x,n.y-=a.y;a=t.getX()+n.x,n=t.getY()+n.y;var i=this.first.x-a,s=this.first.y-n,o=this.graph.tolerance;(null!=this.div||Math.abs(i)>o||Math.abs(s)>o)&&(null==this.div&&(this.div=this.createShape()),mxUtils.clearSelection(),this.update(a,n),t.consume())}},mxRubberband.prototype.createShape=function(){return null==this.sharedDiv&&(this.sharedDiv=document.createElement("div"),this.sharedDiv.className="mxRubberband",mxUtils.setOpacity(this.sharedDiv,this.defaultOpacity)),this.graph.container.appendChild(this.sharedDiv),this.sharedDiv},mxRubberband.prototype.mouseUp=function(e,t){var n=null!=this.div;this.reset(),n&&(n=new mxRectangle(this.x,this.y,this.width,this.height),this.graph.selectRegion(n,t.getEvent()),t.consume())},mxRubberband.prototype.reset=function(){null!=this.div&&this.div.parentNode.removeChild(this.div),null!=this.dragHandler&&(mxEvent.removeListener(document,"mousemove",this.dragHandler),this.dragHandler=null),null!=this.dropHandler&&(mxEvent.removeListener(document,"mouseup",this.dropHandler),this.dropHandler=null),this.currentY=this.currentX=0,this.div=this.first=null},mxRubberband.prototype.update=function(e,t){this.currentX=e,this.currentY=t,this.repaint()},mxRubberband.prototype.repaint=function(){if(null!=this.div){var e=this.currentX-this.graph.panDx,t=this.currentY-this.graph.panDy;this.x=Math.min(this.first.x,e),this.y=Math.min(this.first.y,t),this.width=Math.max(this.first.x,e)-this.x,this.height=Math.max(this.first.y,t)-this.y,e=mxClient.IS_VML?this.graph.panDy:0,this.div.style.left=this.x+(mxClient.IS_VML?this.graph.panDx:0)+"px",this.div.style.top=this.y+e+"px",this.div.style.width=Math.max(1,this.width)+"px",this.div.style.height=Math.max(1,this.height)+"px"}},mxRubberband.prototype.destroy=function(){this.destroyed||(this.destroyed=!0,this.graph.removeMouseListener(this),this.graph.removeListener(this.panHandler),this.reset(),null!=this.sharedDiv&&(this.sharedDiv=null))},mxVertexHandler.prototype.graph=null,mxVertexHandler.prototype.state=null,mxVertexHandler.prototype.singleSizer=!1,mxVertexHandler.prototype.index=null,mxVertexHandler.prototype.allowHandleBoundsCheck=!0,mxVertexHandler.prototype.handleImage=null,mxVertexHandler.prototype.tolerance=0,mxVertexHandler.prototype.rotationEnabled=!1,mxVertexHandler.prototype.rotationRaster=!0,mxVertexHandler.prototype.init=function(){if(this.graph=this.state.view.graph,this.selectionBounds=this.getSelectionBounds(this.state),this.bounds=new mxRectangle(this.selectionBounds.x,this.selectionBounds.y,this.selectionBounds.width,this.selectionBounds.height),this.selectionBorder=this.createSelectionShape(this.bounds),this.selectionBorder.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,this.selectionBorder.pointerEvents=!1,this.selectionBorder.init(this.graph.getView().getOverlayPane()),this.graph.isCellMovable(this.state.cell)&&(this.selectionBorder.node.style.cursor=mxConstants.CURSOR_MOVABLE_VERTEX),mxEvent.redirectMouseEvents(this.selectionBorder.node,this.graph,this.state),mxGraphHandler.prototype.maxCells<=0||this.graph.getSelectionCount()<mxGraphHandler.prototype.maxCells){var e=this.graph.isCellResizable(this.state.cell);if(this.sizers=[],e||this.graph.isLabelMovable(this.state.cell)&&2<=this.state.width&&2<=this.state.height){var t=0;e&&(this.singleSizer||(this.sizers.push(this.createSizer("nw-resize",t++)),this.sizers.push(this.createSizer("n-resize",t++)),this.sizers.push(this.createSizer("ne-resize",t++)),this.sizers.push(this.createSizer("w-resize",t++)),this.sizers.push(this.createSizer("e-resize",t++)),this.sizers.push(this.createSizer("sw-resize",t++)),this.sizers.push(this.createSizer("s-resize",t++))),this.sizers.push(this.createSizer("se-resize",t++))),null!=(e=this.graph.model.getGeometry(this.state.cell))&&!e.relative&&!this.graph.isSwimlane(this.state.cell)&&this.graph.isLabelMovable(this.state.cell)&&(this.labelShape=this.createSizer(mxConstants.CURSOR_LABEL_HANDLE,mxEvent.LABEL_HANDLE,mxConstants.LABEL_HANDLE_SIZE,mxConstants.LABEL_HANDLE_FILLCOLOR),this.sizers.push(this.labelShape))}else this.graph.isCellMovable(this.state.cell)&&!this.graph.isCellResizable(this.state.cell)&&this.state.width<2&&this.state.height<2&&(this.labelShape=this.createSizer(mxConstants.CURSOR_MOVABLE_VERTEX,null,null,mxConstants.LABEL_HANDLE_FILLCOLOR),this.sizers.push(this.labelShape))}this.rotationEnabled&&(mxGraphHandler.prototype.maxCells<=0||this.graph.getSelectionCount()<mxGraphHandler.prototype.maxCells)&&(this.rotationShape=this.createSizer("pointer",mxEvent.ROTATION_HANDLE,mxConstants.HANDLE_SIZE+3,mxConstants.HANDLE_FILLCOLOR),this.sizers.push(this.rotationShape)),this.redraw()},mxVertexHandler.prototype.getSelectionBounds=function(e){return new mxRectangle(Math.round(e.x),Math.round(e.y),Math.round(e.width),Math.round(e.height))},mxVertexHandler.prototype.createSelectionShape=function(e){return(e=new mxRectangleShape(e,null,this.getSelectionColor())).strokewidth=this.getSelectionStrokeWidth(),e.isDashed=this.isSelectionDashed(),e},mxVertexHandler.prototype.getSelectionColor=function(){return mxConstants.VERTEX_SELECTION_COLOR},mxVertexHandler.prototype.getSelectionStrokeWidth=function(){return mxConstants.VERTEX_SELECTION_STROKEWIDTH},mxVertexHandler.prototype.isSelectionDashed=function(){return mxConstants.VERTEX_SELECTION_DASHED},mxVertexHandler.prototype.createSizer=function(e,t,n,a){return n=new mxRectangle(0,0,n=n||mxConstants.HANDLE_SIZE,n),(a=this.createSizerShape(n,t,a)).isHtmlAllowed()&&null!=this.state.text&&this.state.text.node.parentNode==this.graph.container?(a.bounds.height-=1,a.bounds.width-=1,a.dialect=mxConstants.DIALECT_STRICTHTML,a.init(this.graph.container)):(a.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_MIXEDHTML:mxConstants.DIALECT_SVG,a.init(this.graph.getView().getOverlayPane())),mxEvent.redirectMouseEvents(a.node,this.graph,this.state),this.graph.isEnabled()&&(a.node.style.cursor=e),this.isSizerVisible(t)||(a.node.style.visibility="hidden"),a},mxVertexHandler.prototype.isSizerVisible=function(e){return!0},mxVertexHandler.prototype.createSizerShape=function(e,t,n){return null!=this.handleImage?(e.width=this.handleImage.width,e.height=this.handleImage.height,new mxImageShape(e,this.handleImage.src)):t==mxEvent.ROTATION_HANDLE?new mxEllipse(e,n||mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR):new mxRectangleShape(e,n||mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR)},mxVertexHandler.prototype.moveSizerTo=function(e,t,n){null!=e&&(e.bounds.x=Math.round(t-e.bounds.width/2),e.bounds.y=Math.round(n-e.bounds.height/2),e.redraw())},mxVertexHandler.prototype.getHandleForEvent=function(e){if(e.isSource(this.rotationShape))return mxEvent.ROTATION_HANDLE;if(e.isSource(this.labelShape))return mxEvent.LABEL_HANDLE;if(null!=this.sizers)for(var t=this.tolerance,n=(t=this.allowHandleBoundsCheck&&(mxClient.IS_IE||0<t)?new mxRectangle(e.getGraphX()-t,e.getGraphY()-t,2*t,2*t):null,0);n<this.sizers.length;n++)if(e.isSource(this.sizers[n])||null!=t&&mxUtils.intersects(this.sizers[n].bounds,t))return n;return null},mxVertexHandler.prototype.mouseDown=function(e,t){if(!t.isConsumed()&&this.graph.isEnabled()&&!this.graph.isForceMarqueeEvent(t.getEvent())&&(0<this.tolerance||t.getState()==this.state)){var n=this.getHandleForEvent(t);null!=n&&(this.start(t.getX(),t.getY(),n),t.consume())}},mxVertexHandler.prototype.start=function(e,t,n){e=mxUtils.convertPoint(this.graph.container,e,t),this.startX=e.x,this.startY=e.y,this.index=n,this.selectionBorder.node.style.display=n==mxEvent.ROTATION_HANDLE?"inline":"none",this.preview=this.createSelectionShape(this.bounds),mxClient.IS_SVG&&0!=Number(this.state.style[mxConstants.STYLE_ROTATION]||"0")||null==this.state.text||this.state.text.node.parentNode!=this.graph.container?(this.preview.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,this.preview.init(this.graph.view.getOverlayPane())):(this.preview.dialect=mxConstants.DIALECT_STRICTHTML,this.preview.init(this.graph.container))},mxVertexHandler.prototype.mouseMove=function(e,t){if(t.isConsumed()||null==this.index)null!=this.getHandleForEvent(t)&&t.consume(!1);else{var n=new mxPoint(t.getGraphX(),t.getGraphY()),a=this.graph.isGridEnabledEvent(t.getEvent()),i=this.graph.getView().scale;if(this.index==mxEvent.LABEL_HANDLE)a&&(n.x=this.graph.snap(n.x/i)*i,n.y=this.graph.snap(n.y/i)*i),this.moveSizerTo(this.sizers[this.sizers.length-1],n.x,n.y);else if(this.index==mxEvent.ROTATION_HANDLE){var s=this.state.x+this.state.width/2-n.x,o=this.state.y+this.state.height/2-n.y;this.currentAlpha=0!=s?180*Math.atan(o/s)/Math.PI+90:o<0?180:0,0<s&&(this.currentAlpha-=180),this.rotationRaster&&(s=n.x-this.state.getCenterX(),o=n.y-this.state.getCenterY(),s=Math.abs(Math.sqrt(s*s+o*o)-this.state.height/2-20),s=Math.max(1,5*Math.min(3,Math.max(0,Math.round(80/Math.abs(s))))),this.currentAlpha=Math.round(this.currentAlpha/s)*s),this.selectionBorder.rotation=this.currentAlpha,this.selectionBorder.redraw()}else{var r=mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION]||"0"),l=Math.cos(-r),d=Math.sin(-r),c=new mxPoint(this.state.getCenterX(),this.state.getCenterY()),m=(s=n.x-this.startX,o=n.y-this.startY,n=this.graph.view.translate,d*s+l*o);s=l*s-d*o;this.bounds=this.union(this.selectionBounds,s,m,this.index,a,i,n),l=Math.cos(r),c=(d=Math.sin(r))*(s=(o=new mxPoint(this.bounds.getCenterX(),this.bounds.getCenterY())).x-c.x)+l*(o=o.y-c.y)-o,this.bounds.x+=l*s-d*o-s,this.bounds.y+=c,this.drawPreview()}t.consume()}},mxVertexHandler.prototype.mouseUp=function(e,t){if(!t.isConsumed()&&null!=this.index&&null!=this.state){var n=new mxPoint(t.getGraphX(),t.getGraphY());this.graph.getModel().beginUpdate();try{if(this.index==mxEvent.ROTATION_HANDLE)null!=this.currentAlpha&&this.rotateCell(this.state.cell,this.currentAlpha-(this.state.style[mxConstants.STYLE_ROTATION]||0));else{var a=this.graph.isGridEnabledEvent(t.getEvent()),i=mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION]||"0"),s=Math.cos(-i),o=Math.sin(-i),r=(n=o*(r=n.x-this.startX)+s*(l=n.y-this.startY),s*r-o*l),l=n,d=this.graph.view.scale;this.resizeCell(this.state.cell,r/d,l/d,this.index,a)}}finally{this.graph.getModel().endUpdate()}this.reset(),t.consume()}},mxVertexHandler.prototype.rotateCell=function(e,t){var n=this.graph.getModel();if(n.isVertex(e)){if(null!=(s=e==this.state?this.state:this.graph.view.getState(e))&&this.graph.setCellStyles(mxConstants.STYLE_ROTATION,(s.style[mxConstants.STYLE_ROTATION]||0)+t,[e]),this.state.cell!=e&&(null!=(s=this.graph.getCellGeometry(e))&&!s.relative))if(0!=t){var a=this.graph.getModel().getParent(e),i=this.graph.getCellGeometry(a);if(!s.relative&&null!=i){var s,o=mxUtils.toRadians(t),r=(a=Math.cos(o),o=Math.sin(o),new mxPoint(s.getCenterX(),s.getCenterY()));i=new mxPoint(i.width/2,i.height/2),a=mxUtils.getRotatedPoint(r,a,o,i);(s=s.clone()).x=a.x-s.width/2,s.y=a.y-s.height/2,n.setGeometry(e,s)}}else(s=s.clone()).x+=dx,s.y+=dy,n.setGeometry(e,s);for(s=n.getChildCount(e),a=0;a<s;a++)this.rotateCell(n.getChildAt(e,a),t)}},mxVertexHandler.prototype.reset=function(){this.index=this.currentAlpha=null,null!=this.preview&&(this.preview.destroy(),this.preview=null),null!=this.selectionBorder&&(this.selectionBorder.node.style.display="inline",this.selectionBounds=this.getSelectionBounds(this.state),this.bounds=new mxRectangle(this.selectionBounds.x,this.selectionBounds.y,this.selectionBounds.width,this.selectionBounds.height),this.drawPreview())},mxVertexHandler.prototype.resizeCell=function(e,t,n,a,i){var s=this.graph.model.getGeometry(e);if(null!=s)if(a==mxEvent.LABEL_HANDLE)a=this.graph.view.scale,t=(this.labelShape.bounds.getCenterX()-this.startX)/a,n=(this.labelShape.bounds.getCenterY()-this.startY)/a,null==(s=s.clone()).offset?s.offset=new mxPoint(t,n):(s.offset.x+=t,s.offset.y+=n),this.graph.model.setGeometry(e,s);else{if(a=this.union(s,t,n,a,i,1,new mxPoint(0,0)),0!=(r=mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION]||"0"))){t=a.getCenterX()-s.getCenterX(),n=a.getCenterY()-s.getCenterY(),i=Math.cos(r);var o=Math.sin(r),r=i*t-o*n-t;t=o*t+i*n-n,n=a.x-s.x;var l=a.y-s.y,d=i*n-o*l;i=o*n+i*l,a.x+=r,a.y+=t,this.graph.isCellCollapsed(e)||0==r&&0==t||(n=s.x-a.x+d,l=s.y-a.y+i,this.moveChildren(e,n,l))}this.graph.resizeCell(e,a)}},mxVertexHandler.prototype.moveChildren=function(e,t,n){for(var a=this.graph.getModel(),i=a.getChildCount(e),s=0;s<i;s++){var o=a.getChildAt(e,s);if(a.isVertex(o)){var r=this.graph.getCellGeometry(o);null!=r&&!r.relative&&((r=r.clone()).x+=t,r.y+=n,a.setGeometry(o,r))}}},mxVertexHandler.prototype.union=function(e,t,n,a,i,s,o){if(this.singleSizer){o=e.x+e.width+t;var r=e.y+e.height+n;return i&&(o=this.graph.snap(o/s)*s,r=this.graph.snap(r/s)*s),(s=new mxRectangle(e.x,e.y,0,0)).add(new mxRectangle(o,r,0,0)),s}var l=(r=e.x-o.x*s)+e.width,d=e.y-o.y*s;return e=d+e.height,4<a?(e+=n,i&&(e=this.graph.snap(e/s)*s)):a<3&&(d+=n,i&&(d=this.graph.snap(d/s)*s)),0==a||3==a||5==a?(r+=t,i&&(r=this.graph.snap(r/s)*s)):2!=a&&4!=a&&7!=a||(l+=t,i&&(l=this.graph.snap(l/s)*s)),e-=d,(i=l-r)<0&&(r+=i,i=Math.abs(i)),e<0&&(d+=e,e=Math.abs(e)),new mxRectangle(r+o.x*s,d+o.y*s,i,e)},mxVertexHandler.prototype.redraw=function(){this.selectionBounds=this.getSelectionBounds(this.state),this.bounds=new mxRectangle(this.state.x,this.state.y,this.state.width,this.state.height);var e=this.state;if(null!=this.sizers){var t=e.x+e.width,n=e.y+e.height;if(this.singleSizer)this.moveSizerTo(this.sizers[0],t,n);else{var a=e.x+e.width/2,i=e.y+e.height/2;if(1<this.sizers.length){var s=mxUtils.toRadians(e.style[mxConstants.STYLE_ROTATION]||"0"),o=Math.cos(s),r=(s=Math.sin(s),new mxPoint(e.getCenterX(),e.getCenterY())),l=mxUtils.getRotatedPoint(new mxPoint(e.x,e.y),o,s,r);this.moveSizerTo(this.sizers[0],l.x,l.y),l.x=a,l.y=e.y,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[1],l.x,l.y),l.x=t,l.y=e.y,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[2],l.x,l.y),l.x=e.x,l.y=i,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[3],l.x,l.y),l.x=t,l.y=i,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[4],l.x,l.y),l.x=e.x,l.y=n,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[5],l.x,l.y),l.x=a,l.y=n,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[6],l.x,l.y),l.x=t,l.y=n,l=mxUtils.getRotatedPoint(l,o,s,r),this.moveSizerTo(this.sizers[7],l.x,l.y),this.moveSizerTo(this.sizers[8],a+e.absoluteOffset.x,i+e.absoluteOffset.y)}else 2<=this.state.width&&2<=this.state.height?this.moveSizerTo(this.sizers[0],a+e.absoluteOffset.x,i+e.absoluteOffset.y):this.moveSizerTo(this.sizers[0],e.x,e.y)}}null!=this.rotationShape&&(s=mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION]||"0"),o=Math.cos(s),s=Math.sin(s),r=new mxPoint(this.state.getCenterX(),this.state.getCenterY()),l=mxUtils.getRotatedPoint(new mxPoint(e.x+e.width/2,e.y-16),o,s,r),this.moveSizerTo(this.rotationShape,l.x,l.y)),this.selectionBorder.rotation=Number(this.state.style[mxConstants.STYLE_ROTATION]||"0"),this.drawPreview()},mxVertexHandler.prototype.drawPreview=function(){null!=this.preview&&(this.preview.bounds=this.bounds,this.preview.node.parentNode==this.graph.container&&(this.preview.bounds.width=Math.max(0,this.preview.bounds.width-1),this.preview.bounds.height=Math.max(0,this.preview.bounds.height-1)),this.preview.rotation=Number(this.state.style[mxConstants.STYLE_ROTATION]||"0"),this.preview.redraw()),this.selectionBorder.bounds=this.bounds,this.selectionBorder.redraw()},mxVertexHandler.prototype.destroy=function(){if(null!=this.preview&&(this.preview.destroy(),this.preview=null),this.selectionBorder.destroy(),this.labelShape=this.selectionBorder=null,null!=this.sizers)for(var e=0;e<this.sizers.length;e++)this.sizers[e].destroy(),this.sizers[e]=null},mxEdgeHandler.prototype.graph=null,mxEdgeHandler.prototype.state=null,mxEdgeHandler.prototype.marker=null,mxEdgeHandler.prototype.constraintHandler=null,mxEdgeHandler.prototype.error=null,mxEdgeHandler.prototype.shape=null,mxEdgeHandler.prototype.bends=null,mxEdgeHandler.prototype.labelShape=null,mxEdgeHandler.prototype.cloneEnabled=!0,mxEdgeHandler.prototype.addEnabled=!1,mxEdgeHandler.prototype.removeEnabled=!1,mxEdgeHandler.prototype.preferHtml=!1,mxEdgeHandler.prototype.allowHandleBoundsCheck=!0,mxEdgeHandler.prototype.snapToTerminals=!1,mxEdgeHandler.prototype.handleImage=null,mxEdgeHandler.prototype.tolerance=0,mxEdgeHandler.prototype.init=function(){if(this.graph=this.state.view.graph,this.marker=this.createMarker(),this.constraintHandler=new mxConstraintHandler(this.graph),this.points=[],this.abspoints=this.getSelectionPoints(this.state),this.shape=this.createSelectionShape(this.abspoints),this.shape.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_MIXEDHTML:mxConstants.DIALECT_SVG,this.shape.init(this.graph.getView().getOverlayPane()),this.shape.svgStrokeTolerance=0,this.shape.node.style.cursor=mxConstants.CURSOR_MOVABLE_EDGE,mxEvent.addListener(this.shape.node,"dblclick",mxUtils.bind(this,function(e){this.graph.dblClick(e,this.state.cell)})),mxEvent.addGestureListeners(this.shape.node,mxUtils.bind(this,function(e){this.addEnabled&&this.isAddPointEvent(e)?this.addPoint(this.state,e):this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e,this.state))}),mxUtils.bind(this,function(e){var t=this.state.cell;if(null!=this.index){var n=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(e),mxEvent.getClientY(e));t=this.graph.getCellAt(n.x,n.y);this.graph.isSwimlane(t)&&this.graph.hitsSwimlaneContent(t,n.x,n.y)&&(t=null)}this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e,this.graph.getView().getState(t)))}),mxUtils.bind(this,function(e){this.graph.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e,this.state))})),this.preferHtml=null!=this.state.text&&this.state.text.node.parentNode==this.graph.container,!this.preferHtml){var e=this.state.getVisibleTerminalState(!0);null!=e&&(this.preferHtml=null!=e.text&&e.text.node.parentNode==this.graph.container),this.preferHtml||null!=(e=this.state.getVisibleTerminalState(!1))&&(this.preferHtml=null!=e.text&&e.text.node.parentNode==this.graph.container)}(this.graph.getSelectionCount()<mxGraphHandler.prototype.maxCells||mxGraphHandler.prototype.maxCells<=0)&&(this.bends=this.createBends()),this.label=new mxPoint(this.state.absoluteOffset.x,this.state.absoluteOffset.y),this.labelShape=new mxRectangleShape(new mxRectangle,mxConstants.LABEL_HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR),this.labelShape.pointerEvents=!1,this.initBend(this.labelShape),this.labelShape.node.style.cursor=mxConstants.CURSOR_LABEL_HANDLE,mxEvent.redirectMouseEvents(this.labelShape.node,this.graph,this.state),this.redraw()},mxEdgeHandler.prototype.isAddPointEvent=function(e){return mxEvent.isShiftDown(e)},mxEdgeHandler.prototype.isRemovePointEvent=function(e){return mxEvent.isShiftDown(e)},mxEdgeHandler.prototype.getSelectionPoints=function(e){return e.absolutePoints},mxEdgeHandler.prototype.createSelectionShape=function(e){return(e=new mxPolyline(e,this.getSelectionColor())).strokewidth=this.getSelectionStrokeWidth(),e.isDashed=this.isSelectionDashed(),e},mxEdgeHandler.prototype.getSelectionColor=function(){return mxConstants.EDGE_SELECTION_COLOR},mxEdgeHandler.prototype.getSelectionStrokeWidth=function(){return mxConstants.EDGE_SELECTION_STROKEWIDTH},mxEdgeHandler.prototype.isSelectionDashed=function(){return mxConstants.EDGE_SELECTION_DASHED},mxEdgeHandler.prototype.isConnectableCell=function(e){return!0},mxEdgeHandler.prototype.createMarker=function(){var e=new mxCellMarker(this.graph),a=this;return e.getCell=function(e){var t=mxCellMarker.prototype.getCell.apply(this,arguments);if(!a.isConnectableCell(t))return null;var n=a.graph.getModel();return(t==a.state.cell||null!=t&&!a.graph.connectableEdges&&n.isEdge(t))&&(t=null),t},e.isValidState=function(e){var t=a.graph.getModel();t=null!=(t=a.graph.view.getTerminalPort(e,a.graph.view.getState(t.getTerminal(a.state.cell,!a.isSource)),!a.isSource))?t.cell:null;return a.error=a.validateConnection(a.isSource?e.cell:t,a.isSource?t:e.cell),null==a.error},e},mxEdgeHandler.prototype.validateConnection=function(e,t){return this.graph.getEdgeValidationError(this.state.cell,e,t)},mxEdgeHandler.prototype.createBends=function(){for(var e=this.state.cell,t=[],n=0;n<this.abspoints.length;n++)if(this.isHandleVisible(n)){var a=n==this.abspoints.length-1;if((a=0==n||a)||this.graph.isCellBendable(e)){var i=this.createHandleShape(n);if(this.initBend(i),mxClient.IS_TOUCH&&i.node.setAttribute("pointer-events","none"),this.isHandleEnabled(n))if(mxClient.IS_TOUCH){var s=mxUtils.bind(this,function(e){return e=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(e),mxEvent.getClientY(e)),this.graph.view.getState(this.graph.getCellAt(e.x,e.y))});mxEvent.redirectMouseEvents(i.node,this.graph,s)}else i.node.style.cursor=mxConstants.CURSOR_BEND_HANDLE,mxEvent.redirectMouseEvents(i.node,this.graph,this.state);t.push(i),a||(this.points.push(new mxPoint(0,0)),i.node.style.visibility="hidden")}}return t},mxEdgeHandler.prototype.isHandleEnabled=function(e){return!0},mxEdgeHandler.prototype.isHandleVisible=function(e){return!0},mxEdgeHandler.prototype.createHandleShape=function(e){return null!=this.handleImage?new mxImageShape(new mxRectangle(0,0,this.handleImage.width,this.handleImage.height),this.handleImage.src):(e=mxConstants.HANDLE_SIZE,this.preferHtml&&(e-=1),new mxRectangleShape(new mxRectangle(0,0,e,e),mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR))},mxEdgeHandler.prototype.initBend=function(e){this.preferHtml?(e.dialect=mxConstants.DIALECT_STRICTHTML,e.init(this.graph.container)):(e.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_MIXEDHTML:mxConstants.DIALECT_SVG,e.init(this.graph.getView().getOverlayPane()))},mxEdgeHandler.prototype.getHandleForEvent=function(e){if(null!=this.bends)for(var t=this.tolerance,n=(t=this.allowHandleBoundsCheck&&(mxClient.IS_IE||0<t)?new mxRectangle(e.getGraphX()-t,e.getGraphY()-t,2*t,2*t):null,0);n<this.bends.length;n++)if((e.isSource(this.bends[n])||null!=t&&mxUtils.intersects(this.bends[n].bounds,t))&&"hidden"!=this.bends[n].node.style.visibility)return n;return!(e.isSource(this.labelShape)&&"hidden"!=this.labelShape.node.style.visibility||e.isSource(this.state.text))||(mxClient.IS_SF||mxClient.IS_GC)&&"SELECT"==e.getSource().nodeName?null:mxEvent.LABEL_HANDLE},mxEdgeHandler.prototype.mouseDown=function(e,t){var n=null;null!=(n=this.getHandleForEvent(t))&&!t.isConsumed()&&this.graph.isEnabled()&&!this.graph.isForceMarqueeEvent(t.getEvent())&&(this.removeEnabled&&this.isRemovePointEvent(t.getEvent())?this.removePoint(this.state,n):(n!=mxEvent.LABEL_HANDLE||this.graph.isLabelMovable(t.getCell()))&&this.start(t.getX(),t.getY(),n),t.consume())},mxEdgeHandler.prototype.start=function(e,t,n){this.startX=e,this.startY=t,this.isSource=null!=this.bends&&0==n,this.isTarget=null!=this.bends&&n==this.bends.length-1,this.isLabel=n==mxEvent.LABEL_HANDLE,this.isSource||this.isTarget?(e=this.state.cell,(null==(t=this.graph.model.getTerminal(e,this.isSource))&&this.graph.isTerminalPointMovable(e,this.isSource)||null!=t&&this.graph.isCellDisconnectable(e,t,this.isSource))&&(this.index=n)):this.index=n},mxEdgeHandler.prototype.clonePreviewState=function(e,t){return this.state.clone()},mxEdgeHandler.prototype.getSnapToTerminalTolerance=function(){return this.graph.gridSize*this.graph.view.scale/2},mxEdgeHandler.prototype.getPointForEvent=function(e){var n=new mxPoint(e.getGraphX(),e.getGraphY()),a=this.getSnapToTerminalTolerance(),t=this.graph.getView(),i=!1,s=!1;if(this.snapToTerminals&&0<a){var o=function(e){if(null!=e){var t=e.x;Math.abs(n.x-t)<a&&(n.x=t,i=!0),e=e.y,Math.abs(n.y-e)<a&&(n.y=e,s=!0)}},r=function(e){null!=e&&o.call(this,new mxPoint(t.getRoutingCenterX(e),t.getRoutingCenterY(e)))};if(r.call(this,this.state.getVisibleTerminalState(!0)),r.call(this,this.state.getVisibleTerminalState(!1)),null!=this.abspoints)for(r=0;r<this.abspoints;r++)r!=this.index&&o.call(this,this.abspoints[r])}return this.graph.isGridEnabledEvent(e.getEvent())&&(e=t.scale,r=t.translate,i||(n.x=(this.graph.snap(n.x/e-r.x)+r.x)*e),s||(n.y=(this.graph.snap(n.y/e-r.y)+r.y)*e)),n},mxEdgeHandler.prototype.getPreviewTerminalState=function(e){this.constraintHandler.update(e,this.isSource),this.marker.process(e),e=this.marker.getValidState();var t=null;return null!=this.constraintHandler.currentFocus&&null!=this.constraintHandler.currentConstraint&&this.marker.reset(),null!=e?t=e:null!=this.constraintHandler.currentConstraint&&null!=this.constraintHandler.currentFocus&&(t=this.constraintHandler.currentFocus),t},mxEdgeHandler.prototype.getPreviewPoints=function(e){var t=null!=(t=this.graph.getCellGeometry(this.state.cell)).points?t.points.slice():null;return this.isSource||this.isTarget?this.graph.resetEdgesOnConnect&&(t=null):(this.convertPoint(e,!1),null==t?t=[e]:t[this.index-1]=e),t},mxEdgeHandler.prototype.updatePreviewState=function(e,t,n){var a=this.isSource?n:this.state.getVisibleTerminalState(!0),i=this.isTarget?n:this.state.getVisibleTerminalState(!1),s=this.graph.getConnectionConstraint(e,a,!0),o=this.graph.getConnectionConstraint(e,i,!1),r=this.constraintHandler.currentConstraint;null==r&&(r=new mxConnectionConstraint),this.isSource?s=r:this.isTarget&&(o=r),(!this.isSource||null!=a)&&e.view.updateFixedTerminalPoint(e,a,!0,s),(!this.isTarget||null!=i)&&e.view.updateFixedTerminalPoint(e,i,!1,o),(this.isSource||this.isTarget)&&null==n&&(e.setAbsoluteTerminalPoint(t,this.isSource),null==this.marker.getMarkedState()&&(this.error=this.graph.allowDanglingEdges?null:"")),e.view.updatePoints(e,this.points,a,i),e.view.updateFloatingTerminalPoints(e,a,i)},mxEdgeHandler.prototype.mouseMove=function(e,t){if(null!=this.index&&null!=this.marker){var n=this.getPointForEvent(t);if(this.isLabel)this.label.x=n.x,this.label.y=n.y;else{this.points=this.getPreviewPoints(n);var a=this.isSource||this.isTarget?this.getPreviewTerminalState(t):null,i=this.clonePreviewState(n,null!=a?a.cell:null);this.updatePreviewState(i,n,a),this.setPreviewColor(null==this.error?this.marker.validColor:this.marker.invalidColor),this.abspoints=i.absolutePoints,this.active=!0}this.drawPreview(),mxEvent.consume(t.getEvent()),t.consume()}else mxClient.IS_IE&&null!=this.getHandleForEvent(t)&&t.consume(!1)},mxEdgeHandler.prototype.mouseUp=function(e,t){if(null!=this.index&&null!=this.marker){var n=this.state.cell;if(t.getX()!=this.startX||t.getY()!=this.startY)if(null!=this.error)0<this.error.length&&this.graph.validationAlert(this.error);else if(this.isLabel)this.moveLabel(this.state,this.label.x,this.label.y);else if(this.isSource||this.isTarget){var a=null;if(null!=this.constraintHandler.currentConstraint&&null!=this.constraintHandler.currentFocus&&(a=this.constraintHandler.currentFocus.cell),null==a&&this.marker.hasValidState()&&(a=this.marker.validState.cell),null!=a)n=this.connect(n,a,this.isSource,this.graph.isCloneEvent(t.getEvent())&&this.cloneEnabled&&this.graph.isCellsCloneable(),t);else if(this.graph.isAllowDanglingEdges()){(a=this.abspoints[this.isSource?0:this.abspoints.length-1]).x=a.x/this.graph.view.scale-this.graph.view.translate.x,a.y=a.y/this.graph.view.scale-this.graph.view.translate.y;var i=this.graph.getView().getState(this.graph.getModel().getParent(n));null!=i&&(a.x-=i.origin.x,a.y-=i.origin.y),a.x-=this.graph.panDx/this.graph.view.scale,a.y-=this.graph.panDy/this.graph.view.scale,this.changeTerminalPoint(n,a,this.isSource)}}else this.active?this.changePoints(n,this.points):(this.graph.getView().invalidate(this.state.cell),this.graph.getView().revalidate(this.state.cell));null!=this.marker&&(this.reset(),n!=this.state.cell&&this.graph.setSelectionCell(n)),t.consume()}},mxEdgeHandler.prototype.reset=function(){this.points=this.label=this.index=this.error=null,this.isTarget=this.isSource=this.isLabel=this.active=!1,this.marker.reset(),this.constraintHandler.reset(),this.setPreviewColor(mxConstants.EDGE_SELECTION_COLOR),this.redraw()},mxEdgeHandler.prototype.setPreviewColor=function(e){null!=this.shape&&(this.shape.stroke=e)},mxEdgeHandler.prototype.convertPoint=function(e,t){var n=this.graph.getView().getScale(),a=this.graph.getView().getTranslate();return t&&(e.x=this.graph.snap(e.x),e.y=this.graph.snap(e.y)),e.x=Math.round(e.x/n-a.x),e.y=Math.round(e.y/n-a.y),null!=(n=this.graph.getView().getState(this.graph.getModel().getParent(this.state.cell)))&&(e.x-=n.origin.x,e.y-=n.origin.y),e},mxEdgeHandler.prototype.moveLabel=function(e,t,n){var a=this.graph.getModel();if(null!=(i=a.getGeometry(e.cell))){var i=i.clone(),s=this.graph.getView().getRelativePoint(e,t,n);i.x=s.x,i.y=s.y;var o=this.graph.getView().scale;i.offset=new mxPoint(0,0),s=this.graph.view.getPoint(e,i),i.offset=new mxPoint((t-s.x)/o,(n-s.y)/o),a.setGeometry(e.cell,i)}},mxEdgeHandler.prototype.connect=function(e,t,n,a,i){var s=(i=this.graph.getModel()).getParent(e);i.beginUpdate();try{if(a){var o=e.clone();i.add(s,o,i.getChildCount(s));var r=i.getTerminal(e,!n);this.graph.connectCell(o,r,!n),e=o}var l=this.constraintHandler.currentConstraint;null==l&&(l=new mxConnectionConstraint),this.graph.connectCell(e,t,n,l)}finally{i.endUpdate()}return e},mxEdgeHandler.prototype.changeTerminalPoint=function(e,t,n){var a=this.graph.getModel(),i=a.getGeometry(e);if(null!=i){a.beginUpdate();try{(i=i.clone()).setTerminalPoint(t,n),a.setGeometry(e,i),this.graph.connectCell(e,null,n,new mxConnectionConstraint)}finally{a.endUpdate()}}},mxEdgeHandler.prototype.changePoints=function(e,t){var n=this.graph.getModel(),a=n.getGeometry(e);null!=a&&((a=a.clone()).points=t,n.setGeometry(e,a))},mxEdgeHandler.prototype.addPoint=function(e,t){var n=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(t),mxEvent.getClientY(t)),a=this.graph.isGridEnabledEvent(t);this.convertPoint(n,a),this.addPointAt(e,n.x,n.y),mxEvent.consume(t)},mxEdgeHandler.prototype.addPointAt=function(e,t,n){var a=this.graph.getCellGeometry(e.cell);if(t=new mxPoint(t,n),null!=a){a=a.clone(),n=this.graph.view.translate;var i=this.graph.view.scale;n=mxUtils.findNearestSegment(e,(t.x+n.x)*i,(t.y+n.y)*i),null==a.points?a.points=[t]:a.points.splice(n,0,t),this.graph.getModel().setGeometry(e.cell,a),this.destroy(),this.init()}},mxEdgeHandler.prototype.removePoint=function(e,t){if(0<t&&t<this.abspoints.length-1){var n=this.graph.getCellGeometry(this.state.cell);null!=n&&null!=n.points&&((n=n.clone()).points.splice(t-1,1),this.graph.getModel().setGeometry(e.cell,n),this.destroy(),this.init())}},mxEdgeHandler.prototype.getHandleFillColor=function(e){e=0==e;var t=this.state.cell,n=this.graph.getModel().getTerminal(t,e),a=mxConstants.HANDLE_FILLCOLOR;return null!=n&&!this.graph.isCellDisconnectable(t,n,e)||null==n&&!this.graph.isTerminalPointMovable(t,e)?a=mxConstants.LOCKED_HANDLE_FILLCOLOR:null!=n&&this.graph.isCellDisconnectable(t,n,e)&&(a=mxConstants.CONNECT_HANDLE_FILLCOLOR),a},mxEdgeHandler.prototype.redraw=function(){this.abspoints=this.state.absolutePoints.slice();var e=this.state.cell,t=mxConstants.LABEL_HANDLE_SIZE;if(this.label=new mxPoint(this.state.absoluteOffset.x,this.state.absoluteOffset.y),this.labelShape.bounds=new mxRectangle(Math.round(this.label.x-t/2),Math.round(this.label.y-t/2),t,t),this.labelShape.redraw(),null!=(t=this.graph.getLabel(e))&&0<t.length&&this.graph.isLabelMovable(e)?this.labelShape.node.style.visibility="visible":this.labelShape.node.style.visibility="hidden",null!=this.bends&&0<this.bends.length){var n=this.abspoints.length-1,a=(e=this.abspoints[0],this.abspoints[0].y);t=this.bends[0].bounds;this.bends[0].bounds=new mxRectangle(Math.round(this.abspoints[0].x-t.width/2),Math.round(a-t.height/2),t.width,t.height),this.bends[0].fill=this.getHandleFillColor(0),this.bends[0].redraw();a=this.abspoints[n];var i=this.abspoints[n].x,s=(n=this.abspoints[n].y,this.bends.length-1);t=this.bends[s].bounds;this.bends[s].bounds=new mxRectangle(Math.round(i-t.width/2),Math.round(n-t.height/2),t.width,t.height),this.bends[s].fill=this.getHandleFillColor(s),this.bends[s].redraw(),this.redrawInnerBends(e,a)}this.drawPreview()},mxEdgeHandler.prototype.redrawInnerBends=function(e,t){var n=this.graph.getModel().getGeometry(this.state.cell).points;if(null!=n){null==this.points&&(this.points=[]);for(var a=1;a<this.bends.length-1;a++)if(null!=this.bends[a])if(null!=this.abspoints[a]){var i=this.abspoints[a].x,s=this.abspoints[a].y,o=this.bends[a].bounds;this.bends[a].node.style.visibility="visible",this.bends[a].bounds=new mxRectangle(Math.round(i-o.width/2),Math.round(s-o.height/2),o.width,o.height),this.bends[a].redraw(),this.points[a-1]=n[a-1]}else this.bends[a].destroy(),this.bends[a]=null}},mxEdgeHandler.prototype.drawPreview=function(){if(this.isLabel){var e=mxConstants.LABEL_HANDLE_SIZE;e=new mxRectangle(Math.round(this.label.x-e/2),Math.round(this.label.y-e/2),e,e);this.labelShape.bounds=e,this.labelShape.redraw()}else this.shape.points=this.abspoints,this.shape.redraw()},mxEdgeHandler.prototype.destroy=function(){if(null!=this.marker&&(this.marker.destroy(),this.marker=null),null!=this.shape&&(this.shape.destroy(),this.shape=null),null!=this.labelShape&&(this.labelShape.destroy(),this.labelShape=null),null!=this.constraintHandler&&(this.constraintHandler.destroy(),this.constraintHandler=null),null!=this.bends)for(var e=0;e<this.bends.length;e++)null!=this.bends[e]&&(this.bends[e].destroy(),this.bends[e]=null)},mxUtils.extend(mxElbowEdgeHandler,mxEdgeHandler),mxElbowEdgeHandler.prototype=new mxEdgeHandler,mxElbowEdgeHandler.prototype.constructor=mxElbowEdgeHandler,mxElbowEdgeHandler.prototype.flipEnabled=!0,mxElbowEdgeHandler.prototype.doubleClickOrientationResource="none"!=mxClient.language?"doubleClickOrientation":"",mxElbowEdgeHandler.prototype.createBends=function(){var e=[],t=this.createHandleShape(0);return this.initBend(t),t.node.style.cursor=mxConstants.CURSOR_BEND_HANDLE,mxEvent.redirectMouseEvents(t.node,this.graph,this.state),e.push(t),mxClient.IS_TOUCH&&t.node.setAttribute("pointer-events","none"),e.push(this.createVirtualBend()),this.points.push(new mxPoint(0,0)),t=this.createHandleShape(2),this.initBend(t),t.node.style.cursor=mxConstants.CURSOR_BEND_HANDLE,mxEvent.redirectMouseEvents(t.node,this.graph,this.state),e.push(t),mxClient.IS_TOUCH&&t.node.setAttribute("pointer-events","none"),e},mxElbowEdgeHandler.prototype.createVirtualBend=function(){var e=this.createHandleShape();this.initBend(e);var t=this.getCursorForBend();return e.node.style.cursor=t,t=mxUtils.bind(this,function(e){!mxEvent.isConsumed(e)&&this.flipEnabled&&(this.graph.flipEdge(this.state.cell,e),mxEvent.consume(e))}),mxEvent.redirectMouseEvents(e.node,this.graph,this.state,null,null,null,t),this.graph.isCellBendable(this.state.cell)||(e.node.style.display="none"),e},mxElbowEdgeHandler.prototype.getCursorForBend=function(){return this.state.style[mxConstants.STYLE_EDGE]==mxEdgeStyle.TopToBottom||this.state.style[mxConstants.STYLE_EDGE]==mxConstants.EDGESTYLE_TOPTOBOTTOM||(this.state.style[mxConstants.STYLE_EDGE]==mxEdgeStyle.ElbowConnector||this.state.style[mxConstants.STYLE_EDGE]==mxConstants.EDGESTYLE_ELBOW)&&this.state.style[mxConstants.STYLE_ELBOW]==mxConstants.ELBOW_VERTICAL?"row-resize":"col-resize"},mxElbowEdgeHandler.prototype.getTooltipForNode=function(e){var t=null;return null==this.bends||null==this.bends[1]||e!=this.bends[1].node&&e.parentNode!=this.bends[1].node||(t=this.doubleClickOrientationResource,t=mxResources.get(t)||t),t},mxElbowEdgeHandler.prototype.convertPoint=function(e,t){var n=this.graph.getView().getScale(),a=this.graph.getView().getTranslate(),i=this.state.origin;t&&(e.x=this.graph.snap(e.x),e.y=this.graph.snap(e.y)),e.x=Math.round(e.x/n-a.x-i.x),e.y=Math.round(e.y/n-a.y-i.y)},mxElbowEdgeHandler.prototype.redrawInnerBends=function(e,t){var n=null==(n=null!=(n=this.graph.getModel().getGeometry(this.state.cell).points)?n[0]:null)?new mxPoint(e.x+(t.x-e.x)/2,e.y+(t.y-e.y)/2):new mxPoint(this.graph.getView().scale*(n.x+this.graph.getView().translate.x+this.state.origin.x),this.graph.getView().scale*(n.y+this.graph.getView().translate.y+this.state.origin.y)),a=(i=this.bends[1].bounds).width,i=i.height;null==this.handleImage&&(i=a=mxConstants.HANDLE_SIZE);var s=new mxRectangle(Math.round(n.x-a/2),Math.round(n.y-i/2),a,i);null==this.handleImage&&"hidden"!=this.labelShape.node.style.visibility&&mxUtils.intersects(s,this.labelShape.bounds)&&(a+=3,i+=3,s=new mxRectangle(Math.round(n.x-a/2),Math.round(n.y-i/2),a,i)),this.bends[1].bounds=s,this.bends[1].redraw()},mxUtils.extend(mxEdgeSegmentHandler,mxEdgeHandler),mxEdgeSegmentHandler.prototype=new mxElbowEdgeHandler,mxEdgeSegmentHandler.prototype.constructor=mxEdgeSegmentHandler,mxEdgeSegmentHandler.prototype.getPreviewPoints=function(e){if(this.isSource||this.isTarget)return mxElbowEdgeHandler.prototype.getPreviewPoints.apply(this,arguments);this.convertPoint(e,!1);var t=this.state.absolutePoints,n=t[0].clone();this.convertPoint(n,!1);for(var a=[],i=1;i<t.length;i++){var s=t[i].clone();this.convertPoint(s,!1),i==this.index&&(n.x==s.x?(n.x=e.x,s.x=e.x):(n.y=e.y,s.y=e.y)),i<t.length-1&&a.push(s),n=s}if(1==a.length){if(n=this.state.view,i=this.state.getVisibleTerminalState(!0),null!=(s=this.state.getVisibleTerminalState(!1))&null!=i){var o=this.state.origin.x,r=this.state.origin.y;mxUtils.contains(s,a[0].x+o,a[0].y+r)?t[1].y==t[2].y?a[0].y=n.getRoutingCenterY(i)-r:a[0].x=n.getRoutingCenterX(i)-o:mxUtils.contains(i,a[0].x+o,a[0].y+r)&&(t[1].y==t[0].y?a[0].y=n.getRoutingCenterY(s)-r:a[0].x=n.getRoutingCenterX(s)-o)}}else 0==a.length&&(a=[e]);return a},mxEdgeSegmentHandler.prototype.createBends=function(){var e=[],t=this.createHandleShape(0);this.initBend(t),t.node.style.cursor=mxConstants.CURSOR_BEND_HANDLE,mxEvent.redirectMouseEvents(t.node,this.graph,this.state),e.push(t),mxClient.IS_TOUCH&&t.node.setAttribute("pointer-events","none");var n=this.state.absolutePoints;if(this.graph.isCellBendable(this.state.cell)){null==this.points&&(this.points=[]);for(var a=0;a<n.length-1;a++)t=this.createVirtualBend(),e.push(t),t.node.style.cursor=0==n[a].x-n[a+1].x?"col-resize":"row-resize",this.points.push(new mxPoint(0,0)),mxClient.IS_TOUCH&&t.node.setAttribute("pointer-events","none")}return t=this.createHandleShape(n.length),this.initBend(t),t.node.style.cursor=mxConstants.CURSOR_BEND_HANDLE,mxEvent.redirectMouseEvents(t.node,this.graph,this.state),e.push(t),mxClient.IS_TOUCH&&t.node.setAttribute("pointer-events","none"),e},mxEdgeSegmentHandler.prototype.redraw=function(){this.refresh(),mxEdgeHandler.prototype.redraw.apply(this,arguments)},mxEdgeSegmentHandler.prototype.refresh=function(){if(null!=this.bends){for(var e=0;e<this.bends.length;e++)null!=this.bends[e]&&(this.bends[e].destroy(),this.bends[e]=null);this.bends=this.createBends()}},mxEdgeSegmentHandler.prototype.redrawInnerBends=function(e,t){if(this.graph.isCellBendable(this.state.cell)){var n=mxConstants.HANDLE_SIZE,a=this.state.absolutePoints;if(null!=a&&1<a.length)for(var i=0;i<this.state.absolutePoints.length-1;i++)if(null!=this.bends[i+1]){e=a[i],t=a[i+1];var s=new mxPoint(e.x+(t.x-e.x)/2,e.y+(t.y-e.y)/2);this.bends[i+1].bounds=new mxRectangle(Math.round(s.x-n/2),Math.round(s.y-n/2),n,n),this.bends[i+1].redraw()}}},mxEdgeSegmentHandler.prototype.changePoints=function(e,t){t=[];var n=this.abspoints;if(1<n.length)for(var a=n[0],i=n[1],s=2;s<n.length;s++){var o=n[s];Math.round(a.x)==Math.round(i.x)&&Math.round(i.x)==Math.round(o.x)||Math.round(a.y)==Math.round(i.y)&&Math.round(i.y)==Math.round(o.y)||(i=(a=i).clone(),this.convertPoint(i,!1),t.push(i)),i=o}mxElbowEdgeHandler.prototype.changePoints.apply(this,arguments)},mxKeyHandler.prototype.graph=null,mxKeyHandler.prototype.target=null,mxKeyHandler.prototype.normalKeys=null,mxKeyHandler.prototype.shiftKeys=null,mxKeyHandler.prototype.controlKeys=null,mxKeyHandler.prototype.controlShiftKeys=null,mxKeyHandler.prototype.enabled=!0,mxKeyHandler.prototype.isEnabled=function(){return this.enabled},mxKeyHandler.prototype.setEnabled=function(e){this.enabled=e},mxKeyHandler.prototype.bindKey=function(e,t){this.normalKeys[e]=t},mxKeyHandler.prototype.bindShiftKey=function(e,t){this.shiftKeys[e]=t},mxKeyHandler.prototype.bindControlKey=function(e,t){this.controlKeys[e]=t},mxKeyHandler.prototype.bindControlShiftKey=function(e,t){this.controlShiftKeys[e]=t},mxKeyHandler.prototype.isControlDown=function(e){return mxEvent.isControlDown(e)},mxKeyHandler.prototype.getFunction=function(e){return null!=e?this.isControlDown(e)?mxEvent.isShiftDown(e)?this.controlShiftKeys[e.keyCode]:this.controlKeys[e.keyCode]:mxEvent.isShiftDown(e)?this.shiftKeys[e.keyCode]:this.normalKeys[e.keyCode]:null},mxKeyHandler.prototype.isGraphEvent=function(e){if((e=mxEvent.getSource(e))==this.target||e.parentNode==this.target||null!=this.graph.cellEditor&&e==this.graph.cellEditor.textarea)return!0;for(;null!=e;){if(e==this.graph.container)return!0;e=e.parentNode}return!1},mxKeyHandler.prototype.keyDown=function(e){if(this.graph.isEnabled()&&!mxEvent.isConsumed(e)&&this.isGraphEvent(e)&&this.isEnabled())if(27==e.keyCode)this.escape(e);else if(!this.graph.isEditing()){var t=this.getFunction(e);null!=t&&(t(e),mxEvent.consume(e))}},mxKeyHandler.prototype.escape=function(e){this.graph.isEscapeEnabled()&&this.graph.escape(e)},mxKeyHandler.prototype.destroy=function(){this.target=null},mxTooltipHandler.prototype.zIndex=10005,mxTooltipHandler.prototype.graph=null,mxTooltipHandler.prototype.delay=null,mxTooltipHandler.prototype.hideOnHover=!1,mxTooltipHandler.prototype.enabled=!0,mxTooltipHandler.prototype.isEnabled=function(){return this.enabled},mxTooltipHandler.prototype.setEnabled=function(e){this.enabled=e},mxTooltipHandler.prototype.isHideOnHover=function(){return this.hideOnHover},mxTooltipHandler.prototype.setHideOnHover=function(e){this.hideOnHover=e},mxTooltipHandler.prototype.init=function(){null!=document.body&&(this.div=document.createElement("div"),this.div.className="mxTooltip",this.div.style.visibility="hidden",this.div.style.zIndex=this.zIndex,document.body.appendChild(this.div),mxEvent.addListener(this.div,"mousedown",mxUtils.bind(this,function(e){this.hideTooltip()})))},mxTooltipHandler.prototype.mouseDown=function(e,t){this.reset(t,!1),this.hideTooltip()},mxTooltipHandler.prototype.mouseMove=function(e,t){t.getX()==this.lastX&&t.getY()==this.lastY||(this.reset(t,!0),(this.isHideOnHover()||t.getState()!=this.state||t.getSource()!=this.node&&(!this.stateSource||null!=t.getState()&&this.stateSource==(t.isSource(t.getState().shape)||!t.isSource(t.getState().text))))&&this.hideTooltip()),this.lastX=t.getX(),this.lastY=t.getY()},mxTooltipHandler.prototype.mouseUp=function(e,t){this.reset(t,!0),this.hideTooltip()},mxTooltipHandler.prototype.resetTimer=function(){null!=this.thread&&(window.clearTimeout(this.thread),this.thread=null)},mxTooltipHandler.prototype.reset=function(e,t){if(this.resetTimer(),t&&this.isEnabled()&&null!=e.getState()&&(null==this.div||"hidden"==this.div.style.visibility)){var n=e.getState(),a=e.getSource(),i=e.getX(),s=e.getY(),o=e.isSource(n.shape)||e.isSource(n.text);this.thread=window.setTimeout(mxUtils.bind(this,function(){if(!this.graph.isEditing()&&!this.graph.panningHandler.isMenuShowing()){var e=this.graph.getTooltip(n,a,i,s);this.show(e,i,s),this.state=n,this.node=a,this.stateSource=o}}),this.delay)}},mxTooltipHandler.prototype.hide=function(){this.resetTimer(),this.hideTooltip()},mxTooltipHandler.prototype.hideTooltip=function(){null!=this.div&&(this.div.style.visibility="hidden")},mxTooltipHandler.prototype.show=function(e,t,n){if(null!=e&&0<e.length){null==this.div&&this.init();var a=mxUtils.getScrollOrigin();this.div.style.left=t+a.x+"px",this.div.style.top=n+mxConstants.TOOLTIP_VERTICAL_OFFSET+a.y+"px",mxUtils.isNode(e)?(this.div.innerHTML="",this.div.appendChild(e)):this.div.innerHTML=e.replace(/\n/g,"<br>"),this.div.style.visibility="",mxUtils.fit(this.div)}},mxTooltipHandler.prototype.destroy=function(){this.graph.removeMouseListener(this),mxEvent.release(this.div),null!=this.div&&null!=this.div.parentNode&&this.div.parentNode.removeChild(this.div),this.div=null},mxUtils.extend(mxCellTracker,mxCellMarker),mxCellTracker.prototype.mouseDown=function(e,t){},mxCellTracker.prototype.mouseMove=function(e,t){this.isEnabled()&&this.process(t)},mxCellTracker.prototype.mouseUp=function(e,t){this.reset()},mxCellTracker.prototype.destroy=function(){this.destroyed||(this.destroyed=!0,this.graph.removeMouseListener(this),mxCellMarker.prototype.destroy.apply(this))},mxCellHighlight.prototype.keepOnTop=!1,mxCellHighlight.prototype.graph=!0,mxCellHighlight.prototype.state=null,mxCellHighlight.prototype.spacing=2,mxCellHighlight.prototype.resetHandler=null,mxCellHighlight.prototype.setHighlightColor=function(e){this.highlightColor=e,null!=this.shape&&(this.shape.stroke=e)},mxCellHighlight.prototype.drawHighlight=function(){this.shape=this.createShape(),this.repaint(),!this.keepOnTop&&this.shape.node.parentNode.firstChild!=this.shape.node&&this.shape.node.parentNode.insertBefore(this.shape.node,this.shape.node.parentNode.firstChild)},mxCellHighlight.prototype.createShape=function(){var e=null;return(e=this.graph.model.isEdge(this.state.cell)?new mxPolyline(this.state.absolutePoints,this.highlightColor,this.strokeWidth):new mxRectangleShape(new mxRectangle,null,this.highlightColor,this.strokeWidth)).dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_VML:mxConstants.DIALECT_SVG,e.init(this.graph.getView().getOverlayPane()),mxEvent.redirectMouseEvents(e.node,this.graph,this.state),e.svgStrokeTolerance=0,e.pointerEvents=!1,e.isDashed=this.dashed,e},mxCellHighlight.prototype.repaint=function(){if(null!=this.state&&null!=this.shape){var e=0;this.graph.model.isEdge(this.state.cell)?this.shape.points=this.state.absolutePoints:(this.shape.bounds=new mxRectangle(this.state.x-this.spacing,this.state.y-this.spacing,this.state.width+2*this.spacing,this.state.height+2*this.spacing),e=Number(this.state.style[mxConstants.STYLE_ROTATION]||"0")),null!=this.state.shape&&this.shape.setCursor(this.state.shape.getCursor()),0!=e&&(this.shape.rotation=e),this.shape.redraw()}},mxCellHighlight.prototype.hide=function(){this.highlight(null)},mxCellHighlight.prototype.highlight=function(e){this.state!=e&&(null!=this.shape&&(this.shape.destroy(),this.shape=null),this.state=e,null!=this.state&&this.drawHighlight())},mxCellHighlight.prototype.destroy=function(){this.graph.getView().removeListener(this.repaintHandler),this.graph.getModel().removeListener(this.repaintHandler),this.graph.getView().removeListener(this.resetHandler),this.graph.getModel().removeListener(this.resetHandler),null!=this.shape&&(this.shape.destroy(),this.shape=null)},mxDefaultKeyHandler.prototype.editor=null,mxDefaultKeyHandler.prototype.handler=null,mxDefaultKeyHandler.prototype.bindAction=function(e,t,n){var a=mxUtils.bind(this,function(){this.editor.execute(t)});n?this.handler.bindControlKey(e,a):this.handler.bindKey(e,a)},mxDefaultKeyHandler.prototype.destroy=function(){this.handler.destroy(),this.handler=null},mxDefaultPopupMenu.prototype.imageBasePath=null,mxDefaultPopupMenu.prototype.config=null,mxDefaultPopupMenu.prototype.createMenu=function(e,t,n,a){if(null!=this.config){var i=this.createConditions(e,n,a);this.addItems(e,t,n,a,i,this.config.firstChild,null)}},mxDefaultPopupMenu.prototype.addItems=function(e,t,n,a,i,s,o){for(var r=!1;null!=s;){if("add"==s.nodeName){if(null==(l=s.getAttribute("if"))||i[l]){var l=s.getAttribute("as"),d=(l=mxResources.get(l)||l,mxUtils.eval(mxUtils.getTextContent(s))),c=s.getAttribute("action"),m=s.getAttribute("icon"),u=s.getAttribute("iconCls");r&&(t.addSeparator(o),r=!1),null!=m&&this.imageBasePath&&(m=this.imageBasePath+m),l=this.addAction(t,e,l,m,d,c,n,o,u),this.addItems(e,t,n,a,i,s.firstChild,l)}}else"separator"==s.nodeName&&(r=!0);s=s.nextSibling}},mxDefaultPopupMenu.prototype.addAction=function(e,t,n,a,i,s,o,r,l){return e.addItem(n,a,function(e){"function"==typeof i&&i.call(t,t,o,e),null!=s&&t.execute(s,o,e)},r,l)},mxDefaultPopupMenu.prototype.createConditions=function(e,t,n){var a=e.graph.getModel(),i=a.getChildCount(t),s=[];for(s.nocell=null==t,s.ncells=1<e.graph.getSelectionCount(),s.notRoot=a.getRoot()!=a.getParent(e.graph.getDefaultParent()),s.cell=null!=t,a=null!=t&&1==e.graph.getSelectionCount(),s.nonEmpty=a&&0<i,s.expandable=a&&e.graph.isCellFoldable(t,!1),s.collapsable=a&&e.graph.isCellFoldable(t,!0),s.validRoot=a&&e.graph.isValidRoot(t),s.emptyValidRoot=s.validRoot&&0==i,s.swimlane=a&&e.graph.isSwimlane(t),i=this.config.getElementsByTagName("condition"),a=0;a<i.length;a++){var o=mxUtils.eval(mxUtils.getTextContent(i[a])),r=i[a].getAttribute("name");null!=r&&"function"==typeof o&&(s[r]=o(e,t,n))}return s},mxDefaultToolbar.prototype.editor=null,mxDefaultToolbar.prototype.toolbar=null,mxDefaultToolbar.prototype.resetHandler=null,mxDefaultToolbar.prototype.spacing=4,mxDefaultToolbar.prototype.connectOnDrop=!1,mxDefaultToolbar.prototype.init=function(e){null!=e&&(this.toolbar=new mxToolbar(e),this.toolbar.addListener(mxEvent.SELECT,mxUtils.bind(this,function(e,t){var n=t.getProperty("function");this.editor.insertFunction=null!=n?mxUtils.bind(this,function(){n.apply(this,arguments),this.toolbar.resetMode()}):null})),this.resetHandler=mxUtils.bind(this,function(){null!=this.toolbar&&this.toolbar.resetMode(!0)}),this.editor.graph.addListener(mxEvent.DOUBLE_CLICK,this.resetHandler),this.editor.addListener(mxEvent.ESCAPE,this.resetHandler))},mxDefaultToolbar.prototype.addItem=function(e,t,n,a){var i=mxUtils.bind(this,function(){null!=n&&0<n.length&&this.editor.execute(n)});return this.toolbar.addItem(e,t,i,a)},mxDefaultToolbar.prototype.addSeparator=function(e){e=e||mxClient.imageBasePath+"/separator.gif",this.toolbar.addSeparator(e)},mxDefaultToolbar.prototype.addCombo=function(){return this.toolbar.addCombo()},mxDefaultToolbar.prototype.addActionCombo=function(e){return this.toolbar.addActionCombo(e)},mxDefaultToolbar.prototype.addActionOption=function(e,t,n){var a=mxUtils.bind(this,function(){this.editor.execute(n)});this.addOption(e,t,a)},mxDefaultToolbar.prototype.addOption=function(e,t,n){return this.toolbar.addOption(e,t,n)},mxDefaultToolbar.prototype.addMode=function(e,t,n,a,i){var s=mxUtils.bind(this,function(){this.editor.setMode(n),null!=i&&i(this.editor)});return this.toolbar.addSwitchMode(e,t,s,a)},mxDefaultToolbar.prototype.addPrototype=function(e,t,n,a,i,s){var o=function(){return"function"==typeof n?n():null!=n?n.clone():null},r=mxUtils.bind(this,function(e,t){"function"==typeof i?i(this.editor,o(),e,t):this.drop(o(),e,t),this.toolbar.resetMode(),mxEvent.consume(e)});return e=this.toolbar.addMode(e,t,r,a,null,s),this.installDropHandler(e,function(e,t,n){r(t,n)}),e},mxDefaultToolbar.prototype.drop=function(e,t,n){var a=this.editor.graph,i=a.getModel();if(null!=n&&!i.isEdge(n)&&this.connectOnDrop&&a.isCellConnectable(n))this.connect(e,t,n);else{for(;null!=n&&!a.isValidDropTarget(n,[e],t);)n=i.getParent(n);this.insert(e,t,n)}},mxDefaultToolbar.prototype.insert=function(e,t,n){var a=this.editor.graph;if(a.canImportCell(e)){var i=mxEvent.getClientX(t),s=mxEvent.getClientY(t);i=mxUtils.convertPoint(a.container,i,s);return a.isSplitEnabled()&&a.isSplitTarget(n,[e],t)?a.splitEdge(n,[e],null,i.x,i.y):this.editor.addVertex(n,e,i.x,i.y)}return null},mxDefaultToolbar.prototype.connect=function(e,t,n){var a=(t=this.editor.graph).getModel();if(null!=n&&t.isCellConnectable(e)&&t.isEdgeValid(null,n,e)){var i=null;a.beginUpdate();try{var s=a.getGeometry(n),o=a.getGeometry(e).clone();o.x=s.x+(s.width-o.width)/2,o.y=s.y+(s.height-o.height)/2;var r=this.spacing*t.gridSize,l=20*a.getDirectedEdgeCount(n,!0);this.editor.horizontalFlow?o.x+=(o.width+s.width)/2+r+l:o.y+=(o.height+s.height)/2+r+l,e.setGeometry(o);var d=a.getParent(n);if(t.addCell(e,d),t.constrainChild(e),i=this.editor.createEdge(n,e),null==a.getGeometry(i)){var c=new mxGeometry;c.relative=!0,a.setGeometry(i,c)}t.addEdge(i,d,n,e)}finally{a.endUpdate()}t.setSelectionCells([e,i]),t.scrollCellToVisible(e)}},mxDefaultToolbar.prototype.installDropHandler=function(t,n){var a=document.createElement("img");a.setAttribute("src",t.getAttribute("src"));var i=mxUtils.bind(this,function(e){a.style.width=2*t.offsetWidth+"px",a.style.height=2*t.offsetHeight+"px",mxUtils.makeDraggable(t,this.editor.graph,n,a),mxEvent.removeListener(a,"load",i)});mxClient.IS_IE?i():mxEvent.addListener(a,"load",i)},mxDefaultToolbar.prototype.destroy=function(){null!=this.resetHandler&&(this.editor.graph.removeListener("dblclick",this.resetHandler),this.editor.removeListener("escape",this.resetHandler),this.resetHandler=null),null!=this.toolbar&&(this.toolbar.destroy(),this.toolbar=null)},mxLoadResources&&mxResources.add(mxClient.basePath+"/resources/editor"),mxEditor.prototype=new mxEventSource,mxEditor.prototype.constructor=mxEditor,mxEditor.prototype.askZoomResource="none"!=mxClient.language?"askZoom":"",mxEditor.prototype.lastSavedResource="none"!=mxClient.language?"lastSaved":"",mxEditor.prototype.currentFileResource="none"!=mxClient.language?"currentFile":"",mxEditor.prototype.propertiesResource="none"!=mxClient.language?"properties":"",mxEditor.prototype.tasksResource="none"!=mxClient.language?"tasks":"",mxEditor.prototype.helpResource="none"!=mxClient.language?"help":"",mxEditor.prototype.outlineResource="none"!=mxClient.language?"outline":"",mxEditor.prototype.outline=null,mxEditor.prototype.graph=null,mxEditor.prototype.graphRenderHint=null,mxEditor.prototype.toolbar=null,mxEditor.prototype.session=null,mxEditor.prototype.status=null,mxEditor.prototype.popupHandler=null,mxEditor.prototype.undoManager=null,mxEditor.prototype.keyHandler=null,mxEditor.prototype.actions=null,mxEditor.prototype.dblClickAction="edit",mxEditor.prototype.swimlaneRequired=!1,mxEditor.prototype.disableContextMenu=!0,mxEditor.prototype.insertFunction=null,mxEditor.prototype.forcedInserting=!1,mxEditor.prototype.templates=null,mxEditor.prototype.defaultEdge=null,mxEditor.prototype.defaultEdgeStyle=null,mxEditor.prototype.defaultGroup=null,mxEditor.prototype.groupBorderSize=null,mxEditor.prototype.filename=null,mxEditor.prototype.linefeed="&#xa;",mxEditor.prototype.postParameterName="xml",mxEditor.prototype.escapePostData=!0,mxEditor.prototype.urlPost=null,mxEditor.prototype.urlImage=null,mxEditor.prototype.urlInit=null,mxEditor.prototype.urlNotify=null,mxEditor.prototype.urlPoll=null,mxEditor.prototype.horizontalFlow=!1,mxEditor.prototype.layoutDiagram=!1,mxEditor.prototype.swimlaneSpacing=0,mxEditor.prototype.maintainSwimlanes=!1,mxEditor.prototype.layoutSwimlanes=!1,mxEditor.prototype.cycleAttributeValues=null,mxEditor.prototype.cycleAttributeIndex=0,mxEditor.prototype.cycleAttributeName="fillColor",mxEditor.prototype.tasks=null,mxEditor.prototype.tasksWindowImage=null,mxEditor.prototype.tasksTop=20,mxEditor.prototype.help=null,mxEditor.prototype.helpWindowImage=null,mxEditor.prototype.urlHelp=null,mxEditor.prototype.helpWidth=300,mxEditor.prototype.helpHeight=260,mxEditor.prototype.propertiesWidth=240,mxEditor.prototype.propertiesHeight=null,mxEditor.prototype.movePropertiesDialog=!1,mxEditor.prototype.validating=!1,mxEditor.prototype.modified=!1,mxEditor.prototype.isModified=function(){return this.modified},mxEditor.prototype.setModified=function(e){this.modified=e},mxEditor.prototype.addActions=function(){this.addAction("save",function(e){e.save()}),this.addAction("print",function(e){new mxPrintPreview(e.graph,1).open()}),this.addAction("show",function(e){mxUtils.show(e.graph,null,10,10)}),this.addAction("exportImage",function(e){var t=e.getUrlImage();if(null==t||mxClient.IS_LOCAL)e.execute("show");else{var n=mxUtils.getViewXml(e.graph,1);n=mxUtils.getXml(n,"\n");mxUtils.submit(t,e.postParameterName+"="+encodeURIComponent(n),document,"_blank")}}),this.addAction("refresh",function(e){e.graph.refresh()}),this.addAction("cut",function(e){e.graph.isEnabled()&&mxClipboard.cut(e.graph)}),this.addAction("copy",function(e){e.graph.isEnabled()&&mxClipboard.copy(e.graph)}),this.addAction("paste",function(e){e.graph.isEnabled()&&mxClipboard.paste(e.graph)}),this.addAction("delete",function(e){e.graph.isEnabled()&&e.graph.removeCells()}),this.addAction("group",function(e){e.graph.isEnabled()&&e.graph.setSelectionCell(e.groupCells())}),this.addAction("ungroup",function(e){e.graph.isEnabled()&&e.graph.setSelectionCells(e.graph.ungroupCells())}),this.addAction("removeFromParent",function(e){e.graph.isEnabled()&&e.graph.removeCellsFromParent()}),this.addAction("undo",function(e){e.graph.isEnabled()&&e.undo()}),this.addAction("redo",function(e){e.graph.isEnabled()&&e.redo()}),this.addAction("zoomIn",function(e){e.graph.zoomIn()}),this.addAction("zoomOut",function(e){e.graph.zoomOut()}),this.addAction("actualSize",function(e){e.graph.zoomActual()}),this.addAction("fit",function(e){e.graph.fit()}),this.addAction("showProperties",function(e,t){e.showProperties(t)}),this.addAction("selectAll",function(e){e.graph.isEnabled()&&e.graph.selectAll()}),this.addAction("selectNone",function(e){e.graph.isEnabled()&&e.graph.clearSelection()}),this.addAction("selectVertices",function(e){e.graph.isEnabled()&&e.graph.selectVertices()}),this.addAction("selectEdges",function(e){e.graph.isEnabled()&&e.graph.selectEdges()}),this.addAction("edit",function(e,t){e.graph.isEnabled()&&e.graph.isCellEditable(t)&&e.graph.startEditingAtCell(t)}),this.addAction("toBack",function(e,t){e.graph.isEnabled()&&e.graph.orderCells(!0)}),this.addAction("toFront",function(e,t){e.graph.isEnabled()&&e.graph.orderCells(!1)}),this.addAction("enterGroup",function(e,t){e.graph.enterGroup(t)}),this.addAction("exitGroup",function(e){e.graph.exitGroup()}),this.addAction("home",function(e){e.graph.home()}),this.addAction("selectPrevious",function(e){e.graph.isEnabled()&&e.graph.selectPreviousCell()}),this.addAction("selectNext",function(e){e.graph.isEnabled()&&e.graph.selectNextCell()}),this.addAction("selectParent",function(e){e.graph.isEnabled()&&e.graph.selectParentCell()}),this.addAction("selectChild",function(e){e.graph.isEnabled()&&e.graph.selectChildCell()}),this.addAction("collapse",function(e){e.graph.isEnabled()&&e.graph.foldCells(!0)}),this.addAction("collapseAll",function(e){if(e.graph.isEnabled()){var t=e.graph.getChildVertices();e.graph.foldCells(!0,!1,t)}}),this.addAction("expand",function(e){e.graph.isEnabled()&&e.graph.foldCells(!1)}),this.addAction("expandAll",function(e){if(e.graph.isEnabled()){var t=e.graph.getChildVertices();e.graph.foldCells(!1,!1,t)}}),this.addAction("bold",function(e){e.graph.isEnabled()&&e.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_BOLD)}),this.addAction("italic",function(e){e.graph.isEnabled()&&e.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_ITALIC)}),this.addAction("underline",function(e){e.graph.isEnabled()&&e.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_UNDERLINE)}),this.addAction("shadow",function(e){e.graph.isEnabled()&&e.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_SHADOW)}),this.addAction("alignCellsLeft",function(e){e.graph.isEnabled()&&e.graph.alignCells(mxConstants.ALIGN_LEFT)}),this.addAction("alignCellsCenter",function(e){e.graph.isEnabled()&&e.graph.alignCells(mxConstants.ALIGN_CENTER)}),this.addAction("alignCellsRight",function(e){e.graph.isEnabled()&&e.graph.alignCells(mxConstants.ALIGN_RIGHT)}),this.addAction("alignCellsTop",function(e){e.graph.isEnabled()&&e.graph.alignCells(mxConstants.ALIGN_TOP)}),this.addAction("alignCellsMiddle",function(e){e.graph.isEnabled()&&e.graph.alignCells(mxConstants.ALIGN_MIDDLE)}),this.addAction("alignCellsBottom",function(e){e.graph.isEnabled()&&e.graph.alignCells(mxConstants.ALIGN_BOTTOM)}),this.addAction("alignFontLeft",function(e){e.graph.setCellStyles(mxConstants.STYLE_ALIGN,mxConstants.ALIGN_LEFT)}),this.addAction("alignFontCenter",function(e){e.graph.isEnabled()&&e.graph.setCellStyles(mxConstants.STYLE_ALIGN,mxConstants.ALIGN_CENTER)}),this.addAction("alignFontRight",function(e){e.graph.isEnabled()&&e.graph.setCellStyles(mxConstants.STYLE_ALIGN,mxConstants.ALIGN_RIGHT)}),this.addAction("alignFontTop",function(e){e.graph.isEnabled()&&e.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_TOP)}),this.addAction("alignFontMiddle",function(e){e.graph.isEnabled()&&e.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE)}),this.addAction("alignFontBottom",function(e){e.graph.isEnabled()&&e.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_BOTTOM)}),this.addAction("zoom",function(e){var t=100*e.graph.getView().scale;t=parseFloat(mxUtils.prompt(mxResources.get(e.askZoomResource)||e.askZoomResource,t))/100;isNaN(t)||e.graph.getView().setScale(t)}),this.addAction("toggleTasks",function(e){null!=e.tasks?e.tasks.setVisible(!e.tasks.isVisible()):e.showTasks()}),this.addAction("toggleHelp",function(e){null!=e.help?e.help.setVisible(!e.help.isVisible()):e.showHelp()}),this.addAction("toggleOutline",function(e){null==e.outline?e.showOutline():e.outline.setVisible(!e.outline.isVisible())}),this.addAction("toggleConsole",function(e){mxLog.setVisible(!mxLog.isVisible())})},mxEditor.prototype.createSession=function(){var e=mxUtils.bind(this,function(e){this.fireEvent(new mxEventObject(mxEvent.SESSION,"session",e))});return this.connect(this.urlInit,this.urlPoll,this.urlNotify,e)},mxEditor.prototype.configure=function(e){null!=e&&(new mxCodec(e.ownerDocument).decode(e,this),this.resetHistory())},mxEditor.prototype.resetFirstTime=function(){document.cookie="mxgraph=seen; expires=Fri, 27 Jul 2001 02:47:11 UTC; path=/"},mxEditor.prototype.resetHistory=function(){this.lastSnapshot=(new Date).getTime(),this.undoManager.clear(),this.ignoredChanges=0,this.setModified(!1)},mxEditor.prototype.addAction=function(e,t){this.actions[e]=t},mxEditor.prototype.execute=function(t,e,n){var a=this.actions[t];if(null!=a)try{var i=arguments;i[0]=this,a.apply(this,i)}catch(e){throw mxUtils.error("Cannot execute "+t+": "+e.message,280,!0),e}else mxUtils.error("Cannot find action "+t,280,!0)},mxEditor.prototype.addTemplate=function(e,t){this.templates[e]=t},mxEditor.prototype.getTemplate=function(e){return this.templates[e]},mxEditor.prototype.createGraph=function(){var e=new mxGraph(null,null,this.graphRenderHint);return e.setTooltips(!0),e.setPanning(!0),this.installDblClickHandler(e),this.installUndoHandler(e),this.installDrillHandler(e),this.installChangeHandler(e),this.installInsertHandler(e),e.panningHandler.factoryMethod=mxUtils.bind(this,function(e,t,n){return this.createPopupMenu(e,t,n)}),e.connectionHandler.factoryMethod=mxUtils.bind(this,function(e,t){return this.createEdge(e,t)}),this.createSwimlaneManager(e),this.createLayoutManager(e),e},mxEditor.prototype.createSwimlaneManager=function(e){return(e=new mxSwimlaneManager(e,!1)).isHorizontal=mxUtils.bind(this,function(){return this.horizontalFlow}),e.isEnabled=mxUtils.bind(this,function(){return this.maintainSwimlanes}),e},mxEditor.prototype.createLayoutManager=function(a){var e=new mxLayoutManager(a),i=this;return e.getLayout=function(e){var t=null,n=i.graph.getModel();return null!=n.getParent(e)&&(i.layoutSwimlanes&&a.isSwimlane(e)?(null==i.swimlaneLayout&&(i.swimlaneLayout=i.createSwimlaneLayout()),t=i.swimlaneLayout):i.layoutDiagram&&(a.isValidRoot(e)||null==n.getParent(n.getParent(e)))&&(null==i.diagramLayout&&(i.diagramLayout=i.createDiagramLayout()),t=i.diagramLayout)),t},e},mxEditor.prototype.setGraphContainer=function(e){null==this.graph.container&&(this.graph.init(e),this.rubberband=new mxRubberband(this.graph),this.disableContextMenu&&mxEvent.disableContextMenu(e),mxClient.IS_QUIRKS&&new mxDivResizer(e))},mxEditor.prototype.installDblClickHandler=function(a){a.addListener(mxEvent.DOUBLE_CLICK,mxUtils.bind(this,function(e,t){var n=t.getProperty("cell");null!=n&&a.isEnabled()&&null!=this.dblClickAction&&(this.execute(this.dblClickAction,n),t.consume())}))},mxEditor.prototype.installUndoHandler=function(a){var e=mxUtils.bind(this,function(e,t){var n=t.getProperty("edit");this.undoManager.undoableEditHappened(n)});a.getModel().addListener(mxEvent.UNDO,e),a.getView().addListener(mxEvent.UNDO,e),e=function(e,t){var n=t.getProperty("edit").changes;a.setSelectionCells(a.getSelectionCellsForChanges(n))},this.undoManager.addListener(mxEvent.UNDO,e),this.undoManager.addListener(mxEvent.REDO,e)},mxEditor.prototype.installDrillHandler=function(e){var t=mxUtils.bind(this,function(e){this.fireEvent(new mxEventObject(mxEvent.ROOT))});e.getView().addListener(mxEvent.DOWN,t),e.getView().addListener(mxEvent.UP,t)},mxEditor.prototype.installChangeHandler=function(s){var e=mxUtils.bind(this,function(e,t){this.setModified(!0),1==this.validating&&s.validateGraph();for(var n=t.getProperty("edit").changes,a=0;a<n.length;a++){var i=n[a];if(i instanceof mxRootChange||i instanceof mxValueChange&&i.cell==this.graph.model.root||i instanceof mxCellAttributeChange&&i.cell==this.graph.model.root){this.fireEvent(new mxEventObject(mxEvent.ROOT));break}}});s.getModel().addListener(mxEvent.CHANGE,e)},mxEditor.prototype.installInsertHandler=function(e){var n=this;e.addMouseListener({mouseDown:function(e,t){null==n.insertFunction||t.isPopupTrigger()||!n.forcedInserting&&null!=t.getState()||(n.graph.clearSelection(),n.insertFunction(t.getEvent(),t.getCell()),this.isActive=!0,t.consume())},mouseMove:function(e,t){this.isActive&&t.consume()},mouseUp:function(e,t){this.isActive&&(this.isActive=!1,t.consume())}})},mxEditor.prototype.createDiagramLayout=function(){var e=this.graph.gridSize,t=new mxStackLayout(this.graph,!this.horizontalFlow,this.swimlaneSpacing,2*e,2*e);return t.isVertexIgnored=function(e){return!t.graph.isSwimlane(e)},t},mxEditor.prototype.createSwimlaneLayout=function(){return new mxCompactTreeLayout(this.graph,this.horizontalFlow)},mxEditor.prototype.createToolbar=function(){return new mxDefaultToolbar(null,this)},mxEditor.prototype.setToolbarContainer=function(e){this.toolbar.init(e),mxClient.IS_QUIRKS&&new mxDivResizer(e)},mxEditor.prototype.setStatusContainer=function(e){null==this.status&&(this.status=e,this.addListener(mxEvent.SAVE,mxUtils.bind(this,function(){var e=(new Date).toLocaleString();this.setStatus((mxResources.get(this.lastSavedResource)||this.lastSavedResource)+": "+e)})),this.addListener(mxEvent.OPEN,mxUtils.bind(this,function(){this.setStatus((mxResources.get(this.currentFileResource)||this.currentFileResource)+": "+this.filename)})),mxClient.IS_QUIRKS&&new mxDivResizer(e))},mxEditor.prototype.setStatus=function(e){null!=this.status&&null!=e&&(this.status.innerHTML=e)},mxEditor.prototype.setTitleContainer=function(t){this.addListener(mxEvent.ROOT,mxUtils.bind(this,function(e){t.innerHTML=this.getTitle()})),mxClient.IS_QUIRKS&&new mxDivResizer(t)},mxEditor.prototype.treeLayout=function(e,t){null!=e&&new mxCompactTreeLayout(this.graph,t).execute(e)},mxEditor.prototype.getTitle=function(){for(var e="",t=this.graph,n=t.getCurrentRoot();null!=n&&null!=t.getModel().getParent(t.getModel().getParent(n));)t.isValidRoot(n)&&(e=" > "+t.convertValueToString(n)+e),n=t.getModel().getParent(n);return this.getRootTitle()+e},mxEditor.prototype.getRootTitle=function(){var e=this.graph.getModel().getRoot();return this.graph.convertValueToString(e)},mxEditor.prototype.undo=function(){this.undoManager.undo()},mxEditor.prototype.redo=function(){this.undoManager.redo()},mxEditor.prototype.groupCells=function(){var e=null!=this.groupBorderSize?this.groupBorderSize:this.graph.gridSize;return this.graph.groupCells(this.createGroup(),e)},mxEditor.prototype.createGroup=function(){return this.graph.getModel().cloneCell(this.defaultGroup)},mxEditor.prototype.open=function(e){if(null!=e){var t=mxUtils.load(e).getXml();this.readGraphModel(t.documentElement),this.filename=e,this.fireEvent(new mxEventObject(mxEvent.OPEN,"filename",e))}},mxEditor.prototype.readGraphModel=function(e){new mxCodec(e.ownerDocument).decode(e,this.graph.getModel()),this.resetHistory()},mxEditor.prototype.save=function(e,t){if(null!=(e=e||this.getUrlPost())&&0<e.length){var n=this.writeGraphModel(t);this.postDiagram(e,n),this.setModified(!1)}this.fireEvent(new mxEventObject(mxEvent.SAVE,"url",e))},mxEditor.prototype.postDiagram=function(t,n){this.escapePostData&&(n=encodeURIComponent(n)),mxUtils.post(t,this.postParameterName+"="+n,mxUtils.bind(this,function(e){this.fireEvent(new mxEventObject(mxEvent.POST,"request",e,"url",t,"data",n))}))},mxEditor.prototype.writeGraphModel=function(e){e=null!=e?e:this.linefeed;var t=(new mxCodec).encode(this.graph.getModel());return mxUtils.getXml(t,e)},mxEditor.prototype.getUrlPost=function(){return this.urlPost},mxEditor.prototype.getUrlImage=function(){return this.urlImage},mxEditor.prototype.connect=function(e,t,n,a){var i=null;return mxClient.IS_LOCAL||((i=new mxSession(this.graph.getModel(),e,t,n)).addListener(mxEvent.RECEIVE,mxUtils.bind(this,function(e,t){null!=t.getProperty("node").getAttribute("namespace")&&this.resetHistory()})),i.addListener(mxEvent.DISCONNECT,a),i.addListener(mxEvent.CONNECT,a),i.addListener(mxEvent.NOTIFY,a),i.addListener(mxEvent.GET,a),i.start()),i},mxEditor.prototype.swapStyles=function(e,t){var n=this.graph.getStylesheet().styles[t];this.graph.getView().getStylesheet().putCellStyle(t,this.graph.getStylesheet().styles[e]),this.graph.getStylesheet().putCellStyle(e,n),this.graph.refresh()},mxEditor.prototype.showProperties=function(e){if(null==(e=e||this.graph.getSelectionCell())&&(null==(e=this.graph.getCurrentRoot())&&(e=this.graph.getModel().getRoot())),null!=e){this.graph.stopEditing(!0);var t=(n=mxUtils.getOffset(this.graph.container)).x+10,n=n.y;if(null==this.properties||this.movePropertiesDialog){var a=this.graph.getCellBounds(e);null!=a&&(t+=a.x+Math.min(200,a.width),n+=a.y)}else t=this.properties.getX(),n=this.properties.getY();this.hideProperties(),null!=(e=this.createProperties(e))&&(this.properties=new mxWindow(mxResources.get(this.propertiesResource)||this.propertiesResource,e,t,n,this.propertiesWidth,this.propertiesHeight,!1),this.properties.setVisible(!0))}},mxEditor.prototype.isPropertiesVisible=function(){return null!=this.properties},mxEditor.prototype.createProperties=function(n){var a=this.graph.getModel(),e=a.getValue(n);if(mxUtils.isNode(e)){var t=new mxForm("properties");t.addText("ID",n.getId()).setAttribute("readonly","true");var i=null,s=null,o=null,r=null,l=null;a.isVertex(n)&&(null!=(i=a.getGeometry(n))&&(s=t.addText("top",i.y),o=t.addText("left",i.x),r=t.addText("width",i.width),l=t.addText("height",i.height)));var d=a.getStyle(n),c=t.addText("Style",d||""),m=e.attributes,u=[];for(e=0;e<m.length;e++)u[e]=t.addTextarea(m[e].nodeName,m[e].nodeValue,"label"==m[e].nodeName?4:2);return e=mxUtils.bind(this,function(){this.hideProperties(),a.beginUpdate();try{null!=i&&((i=i.clone()).x=parseFloat(o.value),i.y=parseFloat(s.value),i.width=parseFloat(r.value),i.height=parseFloat(l.value),a.setGeometry(n,i)),0<c.value.length?a.setStyle(n,c.value):a.setStyle(n,null);for(var e=0;e<m.length;e++){var t=new mxCellAttributeChange(n,m[e].nodeName,u[e].value);a.execute(t)}this.graph.isAutoSizeCell(n)&&this.graph.updateCellSize(n)}finally{a.endUpdate()}}),d=mxUtils.bind(this,function(){this.hideProperties()}),t.addButtons(e,d),t.table}return null},mxEditor.prototype.hideProperties=function(){null!=this.properties&&(this.properties.destroy(),this.properties=null)},mxEditor.prototype.showTasks=function(){if(null==this.tasks){var t=document.createElement("div");t.style.padding="4px",t.style.paddingLeft="20px";var e=document.body.clientWidth;(e=new mxWindow(mxResources.get(this.tasksResource)||this.tasksResource,t,e-220,this.tasksTop,200)).setClosable(!0),e.destroyOnClose=!1;var n=mxUtils.bind(this,function(e){mxEvent.release(t),t.innerHTML="",this.createTasks(t)});this.graph.getModel().addListener(mxEvent.CHANGE,n),this.graph.getSelectionModel().addListener(mxEvent.CHANGE,n),this.graph.addListener(mxEvent.ROOT,n),null!=this.tasksWindowImage&&e.setImage(this.tasksWindowImage),this.tasks=e,this.createTasks(t)}this.tasks.setVisible(!0)},mxEditor.prototype.refreshTasks=function(e){null!=this.tasks&&(e=this.tasks.content,mxEvent.release(e),e.innerHTML="",this.createTasks(e))},mxEditor.prototype.createTasks=function(e){},mxEditor.prototype.showHelp=function(e){if(null==this.help){var t=document.createElement("iframe");t.setAttribute("src",mxResources.get("urlHelp")||this.urlHelp),t.setAttribute("height","100%"),t.setAttribute("width","100%"),t.setAttribute("frameBorder","0"),t.style.backgroundColor="white",e=document.body.clientWidth;var n=document.body.clientHeight||document.documentElement.clientHeight,a=new mxWindow(mxResources.get(this.helpResource)||this.helpResource,t,(e-this.helpWidth)/2,(n-this.helpHeight)/3,this.helpWidth,this.helpHeight);a.setMaximizable(!0),a.setClosable(!0),a.destroyOnClose=!1,a.setResizable(!0),null!=this.helpWindowImage&&a.setImage(this.helpWindowImage),mxClient.IS_NS&&(e=function(e){t.setAttribute("height",a.div.offsetHeight-26+"px")},a.addListener(mxEvent.RESIZE_END,e),a.addListener(mxEvent.MAXIMIZE,e),a.addListener(mxEvent.NORMALIZE,e),a.addListener(mxEvent.SHOW,e)),this.help=a}this.help.setVisible(!0)},mxEditor.prototype.showOutline=function(){if(null==this.outline){var e=document.createElement("div");e.style.overflow="hidden",e.style.width="100%",e.style.height="100%",e.style.background="white",e.style.cursor="move";var t=new mxWindow(mxResources.get(this.outlineResource)||this.outlineResource,e,600,480,200,200,!1),n=new mxOutline(this.graph,e);t.setClosable(!0),t.setResizable(!0),t.destroyOnClose=!1,t.addListener(mxEvent.RESIZE_END,function(){n.update()}),this.outline=t,this.outline.outline=n}this.outline.setVisible(!0),this.outline.outline.update(!0)},mxEditor.prototype.setMode=function(e){"select"==e?(this.graph.panningHandler.useLeftButtonForPanning=!1,this.graph.setConnectable(!1)):"connect"==e?(this.graph.panningHandler.useLeftButtonForPanning=!1,this.graph.setConnectable(!0)):"pan"==e&&(this.graph.panningHandler.useLeftButtonForPanning=!0,this.graph.setConnectable(!1))},mxEditor.prototype.createPopupMenu=function(e,t,n){this.popupHandler.createMenu(this,e,t,n)},mxEditor.prototype.createEdge=function(e,t){var n=null;if(null!=this.defaultEdge)n=this.graph.getModel().cloneCell(this.defaultEdge);else{(n=new mxCell("")).setEdge(!0);var a=new mxGeometry;a.relative=!0,n.setGeometry(a)}return null!=(a=this.getEdgeStyle())&&n.setStyle(a),n},mxEditor.prototype.getEdgeStyle=function(){return this.defaultEdgeStyle},mxEditor.prototype.consumeCycleAttribute=function(e){return null!=this.cycleAttributeValues&&0<this.cycleAttributeValues.length&&this.graph.isSwimlane(e)?this.cycleAttributeValues[this.cycleAttributeIndex++%this.cycleAttributeValues.length]:null},mxEditor.prototype.cycleAttribute=function(e){if(null!=this.cycleAttributeName){var t=this.consumeCycleAttribute(e);null!=t&&e.setStyle(e.getStyle()+";"+this.cycleAttributeName+"="+t)}},mxEditor.prototype.addVertex=function(e,t,n,a){for(var i=this.graph.getModel();null!=e&&!this.graph.isValidDropTarget(e);)e=i.getParent(e);e=null!=e?e:this.graph.getSwimlaneAt(n,a);var s=this.graph.getView().scale,o=i.getGeometry(t),r=i.getGeometry(e);if(this.graph.isSwimlane(t)&&!this.graph.swimlaneNesting)e=null;else{if(null==e&&this.swimlaneRequired)return null;if(null!=e&&null!=r){var l=this.graph.getView().getState(e);if(null!=l){if(n-=l.origin.x*s,a-=l.origin.y*s,this.graph.isConstrainedMoving){r=o.width;var d=o.height,c=l.x+l.width;c<n+r&&(n-=n+r-c),(c=l.y+l.height)<a+d&&(a-=a+d-c)}}else null!=r&&(n-=r.x*s,a-=r.y*s)}}(o=o.clone()).x=this.graph.snap(n/s-this.graph.getView().translate.x-this.graph.gridSize/2),o.y=this.graph.snap(a/s-this.graph.getView().translate.y-this.graph.gridSize/2),t.setGeometry(o),null==e&&(e=this.graph.getDefaultParent()),this.cycleAttribute(t),this.fireEvent(new mxEventObject(mxEvent.BEFORE_ADD_VERTEX,"vertex",t,"parent",e)),i.beginUpdate();try{null!=(t=this.graph.addCell(t,e))&&(this.graph.constrainChild(t),this.fireEvent(new mxEventObject(mxEvent.ADD_VERTEX,"vertex",t)))}finally{i.endUpdate()}return null!=t&&(this.graph.setSelectionCell(t),this.graph.scrollCellToVisible(t),this.fireEvent(new mxEventObject(mxEvent.AFTER_ADD_VERTEX,"vertex",t))),t},mxEditor.prototype.destroy=function(){this.destroyed||(this.destroyed=!0,null!=this.tasks&&this.tasks.destroy(),null!=this.outline&&this.outline.destroy(),null!=this.properties&&this.properties.destroy(),null!=this.keyHandler&&this.keyHandler.destroy(),null!=this.rubberband&&this.rubberband.destroy(),null!=this.toolbar&&this.toolbar.destroy(),null!=this.graph&&this.graph.destroy(),this.templates=this.status=null)};var mxCodecRegistry={codecs:[],aliases:[],register:function(e){if(null!=e){var t=e.getName();mxCodecRegistry.codecs[t]=e;var n=mxUtils.getFunctionName(e.template.constructor);n!=t&&mxCodecRegistry.addAlias(n,t)}return e},addAlias:function(e,t){mxCodecRegistry.aliases[e]=t},getCodec:function(e){var t=null;if(null!=e){t=mxUtils.getFunctionName(e);var n=mxCodecRegistry.aliases[t];if(null!=n&&(t=n),null==(t=mxCodecRegistry.codecs[t]))try{t=new mxObjectCodec(new e),mxCodecRegistry.register(t)}catch(e){}}return t}};function mxCodec(e){this.document=e||mxUtils.createXmlDocument(),this.objects=[]}function mxObjectCodec(e,t,n,a){for(var i in this.template=e,this.exclude=null!=t?t:[],this.idrefs=null!=n?n:[],this.mapping=null!=a?a:[],this.reverse={},this.mapping)this.reverse[this.mapping[i]]=i}mxCodec.prototype.document=null,mxCodec.prototype.objects=null,mxCodec.prototype.encodeDefaults=!1,mxCodec.prototype.putObject=function(e,t){return this.objects[e]=t},mxCodec.prototype.getObject=function(e){var t=null;return null!=e&&(null==(t=this.objects[e])&&(null==(t=this.lookup(e))&&(null!=(e=this.getElementById(e))&&(t=this.decode(e))))),t},mxCodec.prototype.lookup=function(e){return null},mxCodec.prototype.getElementById=function(e,t){return mxUtils.findNodeByAttribute(this.document.documentElement,null!=t?t:"id",e)},mxCodec.prototype.getId=function(e){var t=null;return null!=e&&(null==(t=this.reference(e))&&e instanceof mxCell&&(null==(t=e.getId())&&(0==(t=mxCellPath.create(e)).length&&(t="root")))),t},mxCodec.prototype.reference=function(e){return null},mxCodec.prototype.encode=function(e){var t=null;if(null!=e&&null!=e.constructor){var n=mxCodecRegistry.getCodec(e.constructor);null!=n?t=n.encode(this,e):mxUtils.isNode(e)?t=mxClient.IS_IE?e.cloneNode(!0):this.document.importNode(e,!0):mxLog.warn("mxCodec.encode: No codec for "+mxUtils.getFunctionName(e.constructor))}return t},mxCodec.prototype.decode=function(a,b){var c=null;if(null!=a&&a.nodeType==mxConstants.NODETYPE_ELEMENT){var d=null;try{d=eval(a.nodeName)}catch(e){}try{var f=mxCodecRegistry.getCodec(d);null!=f?c=f.decode(this,a,b):(c=a.cloneNode(!0),c.removeAttribute("as"))}catch(e){mxLog.debug("Cannot decode "+a.nodeName+": "+e.message)}}return c},mxCodec.prototype.encodeCell=function(e,t,n){if(t.appendChild(this.encode(e)),null==n||n){n=e.getChildCount();for(var a=0;a<n;a++)this.encodeCell(e.getChildAt(a),t)}},mxCodec.prototype.isCellCodec=function(e){return null!=e&&"function"==typeof e.isCellCodec&&e.isCellCodec()},mxCodec.prototype.decodeCell=function(e,t){t=null==t||t;var n=null;if(null!=e&&e.nodeType==mxConstants.NODETYPE_ELEMENT){if(n=mxCodecRegistry.getCodec(e.nodeName),!this.isCellCodec(n))for(var a=e.firstChild;null!=a&&!this.isCellCodec(n);)n=mxCodecRegistry.getCodec(a.nodeName),a=a.nextSibling;this.isCellCodec(n)||(n=mxCodecRegistry.getCodec(mxCell)),n=n.decode(this,e),t&&this.insertIntoGraph(n)}return n},mxCodec.prototype.insertIntoGraph=function(e){var t=e.parent,n=e.getTerminal(!0),a=e.getTerminal(!1);e.setTerminal(null,!1),e.setTerminal(null,!0),(e.parent=null)!=t&&t.insert(e),null!=n&&n.insertEdge(e,!0),null!=a&&a.insertEdge(e,!1)},mxCodec.prototype.setAttribute=function(e,t,n){null!=t&&null!=n&&e.setAttribute(t,n)},mxObjectCodec.prototype.template=null,mxObjectCodec.prototype.exclude=null,mxObjectCodec.prototype.idrefs=null,mxObjectCodec.prototype.mapping=null,mxObjectCodec.prototype.reverse=null,mxObjectCodec.prototype.getName=function(){return mxUtils.getFunctionName(this.template.constructor)},mxObjectCodec.prototype.cloneTemplate=function(){return new this.template.constructor},mxObjectCodec.prototype.getFieldName=function(e){if(null!=e){var t=this.reverse[e];null!=t&&(e=t)}return e},mxObjectCodec.prototype.getAttributeName=function(e){if(null!=e){var t=this.mapping[e];null!=t&&(e=t)}return e},mxObjectCodec.prototype.isExcluded=function(e,t,n,a){return t==mxObjectIdentity.FIELD_NAME||0<=mxUtils.indexOf(this.exclude,t)},mxObjectCodec.prototype.isReference=function(e,t,n,a){return 0<=mxUtils.indexOf(this.idrefs,t)},mxObjectCodec.prototype.encode=function(e,t){var n=e.document.createElement(this.getName());return t=this.beforeEncode(e,t,n),this.encodeObject(e,t,n),this.afterEncode(e,t,n)},mxObjectCodec.prototype.encodeObject=function(e,t,n){for(var a in e.setAttribute(n,"id",e.getId(t)),t){var i=a,s=t[i];null!=s&&!this.isExcluded(t,i,s,!0)&&(mxUtils.isNumeric(i)&&(i=null),this.encodeValue(e,t,i,s,n))}},mxObjectCodec.prototype.encodeValue=function(e,t,n,a,i){if(null!=a){if(this.isReference(t,n,a,!0)){var s=e.getId(a);if(null==s)return void mxLog.warn("mxObjectCodec.encode: No ID for "+this.getName()+"."+n+"="+a);a=s}s=this.template[n],(null==n||e.encodeDefaults||s!=a)&&(n=this.getAttributeName(n),this.writeAttribute(e,t,n,a,i))}},mxObjectCodec.prototype.writeAttribute=function(e,t,n,a,i){"object"!=typeof a?this.writePrimitiveAttribute(e,t,n,a,i):this.writeComplexAttribute(e,t,n,a,i)},mxObjectCodec.prototype.writePrimitiveAttribute=function(e,t,n,a,i){a=this.convertValueToXml(a),null==n?(t=e.document.createElement("add"),"function"==typeof a?t.appendChild(e.document.createTextNode(a)):e.setAttribute(t,"value",a),i.appendChild(t)):"function"!=typeof a&&e.setAttribute(i,n,a)},mxObjectCodec.prototype.writeComplexAttribute=function(e,t,n,a,i){null!=(e=e.encode(a))?(null!=n&&e.setAttribute("as",n),i.appendChild(e)):mxLog.warn("mxObjectCodec.encode: No node for "+this.getName()+"."+n+": "+a)},mxObjectCodec.prototype.convertValueToXml=function(e){return void 0!==e.length||1!=e&&0!=e||(e=1==e?"1":"0"),e},mxObjectCodec.prototype.convertValueFromXml=function(e){return mxUtils.isNumeric(e)&&(e=parseFloat(e)),e},mxObjectCodec.prototype.beforeEncode=function(e,t,n){return t},mxObjectCodec.prototype.afterEncode=function(e,t,n){return n},mxObjectCodec.prototype.decode=function(e,t,n){var a=t.getAttribute("id"),i=e.objects[a];return null==i&&(i=n||this.cloneTemplate(),null!=a&&e.putObject(a,i)),t=this.beforeDecode(e,t,i),this.decodeNode(e,t,i),this.afterDecode(e,t,i)},mxObjectCodec.prototype.decodeNode=function(e,t,n){null!=t&&(this.decodeAttributes(e,t,n),this.decodeChildren(e,t,n))},mxObjectCodec.prototype.decodeAttributes=function(e,t,n){if(null!=(t=t.attributes))for(var a=0;a<t.length;a++)this.decodeAttribute(e,t[a],n)},mxObjectCodec.prototype.decodeAttribute=function(e,t,n){var a=t.nodeName;if("as"!=a&&"id"!=a){t="value"==a?t.nodeValue:this.convertValueFromXml(t.nodeValue);var i=this.getFieldName(a);if(this.isReference(n,i,t,!1)){if(null==(e=e.getObject(t)))return void mxLog.warn("mxObjectCodec.decode: No object for "+this.getName()+"."+a+"="+t);t=e}this.isExcluded(n,a,t,!1)||(n[a]=t)}},mxObjectCodec.prototype.decodeChildren=function(e,t,n){for(t=t.firstChild;null!=t;){var a=t.nextSibling;t.nodeType==mxConstants.NODETYPE_ELEMENT&&!this.processInclude(e,t,n)&&this.decodeChild(e,t,n),t=a}},mxObjectCodec.prototype.decodeChild=function(e,t,n){var a=this.getFieldName(t.getAttribute("as"));if(null==a||!this.isExcluded(n,a,t,!1)){var i=this.getFieldTemplate(n,a,t),s=null;"add"==t.nodeName?null==(s=t.getAttribute("value"))&&(s=mxUtils.eval(mxUtils.getTextContent(t))):s=e.decode(t,i),this.addObjectValue(n,a,s,i)}},mxObjectCodec.prototype.getFieldTemplate=function(e,t,n){return(e=e[t])instanceof Array&&0<e.length&&(e=null),e},mxObjectCodec.prototype.addObjectValue=function(e,t,n,a){null!=n&&n!=a&&(null!=t&&0<t.length?e[t]=n:e.push(n))},mxObjectCodec.prototype.processInclude=function(e,t,n){if("include"!=t.nodeName)return!1;if(null!=(t=t.getAttribute("name")))try{var a=mxUtils.load(t).getDocumentElement();null!=a&&e.decode(a,n)}catch(e){}return!0},mxObjectCodec.prototype.beforeDecode=function(e,t,n){return t},mxObjectCodec.prototype.afterDecode=function(e,t,n){return n},mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxCell,["children","edges","overlays","mxTransient"],["parent","source","target"]);return e.isCellCodec=function(){return!0},e.isExcluded=function(e,t,n,a){return mxObjectCodec.prototype.isExcluded.apply(this,arguments)||a&&"value"==t&&n.nodeType==mxConstants.NODETYPE_ELEMENT},e.afterEncode=function(e,t,n){if(null!=t.value&&t.value.nodeType==mxConstants.NODETYPE_ELEMENT){var a=n;(n=mxClient.IS_IE?t.value.cloneNode(!0):e.document.importNode(t.value,!0)).appendChild(a),e=a.getAttribute("id"),n.setAttribute("id",e),a.removeAttribute("id")}return n},e.beforeDecode=function(e,t,n){var a=t,i=this.getName();if(t.nodeName!=i?(null!=(a=t.getElementsByTagName(i)[0])&&a.parentNode==t?(mxUtils.removeWhitespace(a,!0),mxUtils.removeWhitespace(a,!1),a.parentNode.removeChild(a)):a=null,n.value=t.cloneNode(!0),null!=(t=n.value.getAttribute("id"))&&(n.setId(t),n.value.removeAttribute("id"))):n.setId(t.getAttribute("id")),null!=a)for(t=0;t<this.idrefs.length;t++){i=this.idrefs[t];var s=a.getAttribute(i);if(null!=s){a.removeAttribute(i);var o=e.objects[s]||e.lookup(s);null==o&&(null!=(s=e.getElementById(s))&&(o=(mxCodecRegistry.codecs[s.nodeName]||this).decode(e,s))),n[i]=o}}return a},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxGraphModel);return e.encodeObject=function(e,t,n){var a=e.document.createElement("root");e.encodeCell(t.getRoot(),a),n.appendChild(a)},e.decodeChild=function(e,t,n){"root"==t.nodeName?this.decodeRoot(e,t,n):mxObjectCodec.prototype.decodeChild.apply(this,arguments)},e.decodeRoot=function(e,t,n){var a=null;for(t=t.firstChild;null!=t;){var i=e.decodeCell(t);null!=i&&null==i.getParent()&&(a=i),t=t.nextSibling}null!=a&&n.setRoot(a)},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxRootChange,["model","previous","root"]);return e.afterEncode=function(e,t,n){return e.encodeCell(t.root,n),n},e.beforeDecode=function(e,t,n){if(null!=t.firstChild&&t.firstChild.nodeType==mxConstants.NODETYPE_ELEMENT){var a=(t=t.cloneNode(!0)).firstChild;for(n.root=e.decodeCell(a,!1),n=a.nextSibling,a.parentNode.removeChild(a),a=n;null!=a;)n=a.nextSibling,e.decodeCell(a),a.parentNode.removeChild(a),a=n}return t},e.afterDecode=function(e,t,n){return n.previous=n.root,n},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxChildChange,["model","child","previousIndex"],["parent","previous"]);return e.isReference=function(e,t,n,a){return!("child"!=t||null==e.previous&&a)||0<=mxUtils.indexOf(this.idrefs,t)},e.afterEncode=function(e,t,n){return this.isReference(t,"child",t.child,!0)?n.setAttribute("child",e.getId(t.child)):e.encodeCell(t.child,n),n},e.beforeDecode=function(e,t,n){if(null!=t.firstChild&&t.firstChild.nodeType==mxConstants.NODETYPE_ELEMENT){var a=(t=t.cloneNode(!0)).firstChild;for(n.child=e.decodeCell(a,!1),n=a.nextSibling,a.parentNode.removeChild(a),a=n;null!=a;){if(n=a.nextSibling,a.nodeType==mxConstants.NODETYPE_ELEMENT){var i=a.getAttribute("id");null==e.lookup(i)&&e.decodeCell(a)}a.parentNode.removeChild(a),a=n}}else a=t.getAttribute("child"),n.child=e.getObject(a);return t},e.afterDecode=function(e,t,n){return n.child.parent=n.previous,n.previous=n.parent,n.previousIndex=n.index,n},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxTerminalChange,["model","previous"],["cell","terminal"]);return e.afterDecode=function(e,t,n){return n.previous=n.terminal,n},e}());var mxGenericChangeCodec=function(e,a){var t=new mxObjectCodec(e,["model","previous"],["cell"]);return t.afterDecode=function(e,t,n){return mxUtils.isNode(n.cell)&&(n.cell=e.decodeCell(n.cell,!1)),n.previous=n[a],n},t},jabra;function _slicedToArray(e,t){return _arrayWithHoles(e)||_iterableToArrayLimit(e,t)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function _iterableToArrayLimit(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],a=!0,i=!1,s=void 0;try{for(var o,r=e[Symbol.iterator]();!(a=(o=r.next()).done)&&(n.push(o.value),!t||n.length!==t);a=!0);}catch(e){i=!0,s=e}finally{try{a||null==r.return||r.return()}finally{if(i)throw s}}return n}}function _arrayWithHoles(e){if(Array.isArray(e))return e}function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _toConsumableArray(e){return _arrayWithoutHoles(e)||_iterableToArray(e)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function _iterableToArray(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}function _arrayWithoutHoles(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}function _instanceof(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function _defineProperties(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}function _classCallCheck(e,t){if(!_instanceof(e,t))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(e,t){return!t||"object"!==_typeof(t)&&"function"!=typeof t?_assertThisInitialized(e):t}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&_setPrototypeOf(e,t)}function _wrapNativeSuper(e){var n="function"==typeof Map?new Map:void 0;return(_wrapNativeSuper=function(e){if(null===e||!_isNativeFunction(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(e))return n.get(e);n.set(e,t)}function t(){return _construct(e,arguments,_getPrototypeOf(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),_setPrototypeOf(t,e)})(e)}function isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}function _construct(e,t,n){return(_construct=isNativeReflectConstruct()?Reflect.construct:function(e,t,n){var a=[null];a.push.apply(a,t);var i=new(Function.bind.apply(e,a));return n&&_setPrototypeOf(i,n.prototype),i}).apply(null,arguments)}function _isNativeFunction(e){return-1!==Function.toString.call(e).indexOf("[native code]")}function _setPrototypeOf(e,t){return(_setPrototypeOf=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function _getPrototypeOf(e){return(_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}mxCodecRegistry.register(mxGenericChangeCodec(new mxValueChange,"value")),mxCodecRegistry.register(mxGenericChangeCodec(new mxStyleChange,"style")),mxCodecRegistry.register(mxGenericChangeCodec(new mxGeometryChange,"geometry")),mxCodecRegistry.register(mxGenericChangeCodec(new mxCollapseChange,"collapsed")),mxCodecRegistry.register(mxGenericChangeCodec(new mxVisibleChange,"visible")),mxCodecRegistry.register(mxGenericChangeCodec(new mxCellAttributeChange,"value")),mxCodecRegistry.register(new mxObjectCodec(new mxGraph,"graphListeners eventListeners view container cellRenderer editor selection".split(" "))),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxGraphView);return e.encode=function(e,t){return this.encodeCell(e,t,t.graph.getModel().getRoot())},e.encodeCell=function(e,t,n){var a=t.graph.getModel(),i=t.getState(n),s=a.getParent(n);if(null==s||null!=i){var o=a.getChildCount(n),r=t.graph.getCellGeometry(n),l=null;if(s==a.getRoot()?l="layer":null==s?l="graph":a.isEdge(n)?l="edge":0<o&&null!=r?l="group":a.isVertex(n)&&(l="vertex"),null!=l){var d=e.document.createElement(l);if(null!=t.graph.getLabel(n)&&(d.setAttribute("label",t.graph.getLabel(n)),t.graph.isHtmlLabel(n)&&d.setAttribute("html",!0)),null==s){var c=t.getGraphBounds();null!=c&&(d.setAttribute("x",Math.round(c.x)),d.setAttribute("y",Math.round(c.y)),d.setAttribute("width",Math.round(c.width)),d.setAttribute("height",Math.round(c.height))),d.setAttribute("scale",t.scale)}else if(null!=i&&null!=r){for(c in i.style)"function"==typeof(s=i.style[c])&&"object"==typeof s&&(s=mxStyleRegistry.getName(s)),null!=s&&"function"!=typeof s&&"object"!=typeof s&&d.setAttribute(c,s);if(null!=(s=i.absolutePoints)&&0<s.length){for(r=Math.round(s[0].x)+","+Math.round(s[0].y),c=1;c<s.length;c++)r+=" "+Math.round(s[c].x)+","+Math.round(s[c].y);d.setAttribute("points",r)}else d.setAttribute("x",Math.round(i.x)),d.setAttribute("y",Math.round(i.y)),d.setAttribute("width",Math.round(i.width)),d.setAttribute("height",Math.round(i.height));null!=(c=i.absoluteOffset)&&(0!=c.x&&d.setAttribute("dx",Math.round(c.x)),0!=c.y&&d.setAttribute("dy",Math.round(c.y)))}for(c=0;c<o;c++)null!=(i=this.encodeCell(e,t,a.getChildAt(n,c)))&&d.appendChild(i)}}return d},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxStylesheet);return e.encode=function(e,t){var n,a=e.document.createElement(this.getName());for(n in t.styles){var i=t.styles[n],s=e.document.createElement("add");if(null!=n){for(var o in s.setAttribute("as",n),i){var r=this.getStringValue(o,i[o]);if(null!=r){var l=e.document.createElement("add");l.setAttribute("value",r),l.setAttribute("as",o),s.appendChild(l)}}0<s.childNodes.length&&a.appendChild(s)}}return a},e.getStringValue=function(e,t){var n=typeof t;return"function"==n?t=mxStyleRegistry.getName(style[j]):"object"==n&&(t=null),t},e.decode=function(e,t,n){n=n||new this.template.constructor;var a=t.getAttribute("id");for(null!=a&&(e.objects[a]=n),t=t.firstChild;null!=t;){if(!this.processInclude(e,t,n)&&"add"==t.nodeName&&null!=(a=t.getAttribute("as"))){var i=t.getAttribute("extend"),s=null!=i?mxUtils.clone(n.styles[i]):null;for(null==s&&(null!=i&&mxLog.warn("mxStylesheetCodec.decode: stylesheet "+i+" not found to extend"),s={}),i=t.firstChild;null!=i;){if(i.nodeType==mxConstants.NODETYPE_ELEMENT){var o=i.getAttribute("as");if("add"==i.nodeName){var r=mxUtils.getTextContent(i),l=null;null!=r&&0<r.length?l=mxUtils.eval(r):(l=i.getAttribute("value"),mxUtils.isNumeric(l)&&(l=parseFloat(l))),null!=l&&(s[o]=l)}else"remove"==i.nodeName&&delete s[o]}i=i.nextSibling}n.putCellStyle(a,s)}t=t.nextSibling}return n},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxDefaultKeyHandler);return e.encode=function(e,t){return null},e.decode=function(e,t,n){if(null!=n)for(t=t.firstChild;null!=t;){if(!this.processInclude(e,t,n)&&"add"==t.nodeName){var a=t.getAttribute("as"),i=t.getAttribute("action"),s=t.getAttribute("control");n.bindAction(a,i,s)}t=t.nextSibling}return n},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxDefaultToolbar);return e.encode=function(e,t){return null},e.decode=function(e,t,n){if(null!=n){var a=n.editor;for(t=t.firstChild;null!=t;){if(t.nodeType==mxConstants.NODETYPE_ELEMENT&&!this.processInclude(e,t,n))if("separator"==t.nodeName)n.addSeparator();else if("br"==t.nodeName)n.toolbar.addBreak();else if("hr"==t.nodeName)n.toolbar.addLine();else if("add"==t.nodeName){var i=t.getAttribute("as"),s=(i=mxResources.get(i)||i,t.getAttribute("icon")),o=t.getAttribute("pressedIcon"),r=t.getAttribute("action"),l=t.getAttribute("mode"),d=t.getAttribute("template"),c="0"!=t.getAttribute("toggle"),m=mxUtils.getTextContent(t),u=null;if(null!=r)u=n.addItem(i,s,r,o);else if(null!=l){var p=mxUtils.eval(m);u=n.addMode(i,s,l,o,p)}else if(null!=d||null!=m&&0<m.length)u=a.templates[d],d=t.getAttribute("style"),null!=u&&null!=d&&(u=u.clone()).setStyle(d),(d=null)!=m&&0<m.length&&(d=mxUtils.eval(m)),u=n.addPrototype(i,s,u,o,d,c);else if(0<(o=mxUtils.getChildNodes(t)).length)if(null==s)for(d=n.addActionCombo(i),i=0;i<o.length;i++)"separator"==(c=o[i]).nodeName?n.addOption(d,"---"):"add"==c.nodeName&&(s=c.getAttribute("as"),c=c.getAttribute("action"),n.addActionOption(d,s,c));else{var g=null,v=n.addPrototype(i,s,function(){if(null==(e=a.templates[g.value]))return mxLog.warn("Template "+e+" not found"),null;var e=e.clone(),t=g.options[g.selectedIndex].cellStyle;return null!=t&&e.setStyle(t),e},null,null,c);g=n.addCombo();for(mxEvent.addListener(g,"change",function(){n.toolbar.selectMode(v,function(e){return e=mxUtils.convertPoint(a.graph.container,mxEvent.getClientX(e),mxEvent.getClientY(e)),a.addVertex(null,p(),e.x,e.y)}),n.toolbar.noReset=!1}),i=0;i<o.length;i++)"separator"==(c=o[i]).nodeName?n.addOption(g,"---"):"add"==c.nodeName&&(s=c.getAttribute("as"),m=c.getAttribute("template"),n.addOption(g,s,m||d).cellStyle=c.getAttribute("style"))}null!=u&&(null!=(d=t.getAttribute("id"))&&0<d.length&&u.setAttribute("id",d))}t=t.nextSibling}}return n},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxDefaultPopupMenu);return e.encode=function(e,t){return null},e.decode=function(e,t,n){var a=t.getElementsByTagName("include")[0];return null!=a?this.processInclude(e,a,n):null!=n&&(n.config=t),n},e}()),mxCodecRegistry.register(function(){var e=new mxObjectCodec(new mxEditor,"modified lastSnapshot ignoredChanges undoManager graphContainer toolbarContainer".split(" "));return e.afterDecode=function(e,t,n){return null!=(e=t.getAttribute("defaultEdge"))&&(t.removeAttribute("defaultEdge"),n.defaultEdge=n.templates[e]),null!=(e=t.getAttribute("defaultGroup"))&&(t.removeAttribute("defaultGroup"),n.defaultGroup=n.templates[e]),n},e.decodeChild=function(e,t,n){if("Array"==t.nodeName){if("templates"==t.getAttribute("as"))return void this.decodeTemplates(e,t,n)}else if("ui"==t.nodeName)return void this.decodeUi(e,t,n);mxObjectCodec.prototype.decodeChild.apply(this,arguments)},e.decodeUi=function(e,t,n){for(e=t.firstChild;null!=e;){if("add"==e.nodeName){t=e.getAttribute("as");var a=e.getAttribute("element"),i=e.getAttribute("style"),s=null;if(null!=a)null!=(s=document.getElementById(a))&&null!=i&&(s.style.cssText+=";"+i);else{a=parseInt(e.getAttribute("x"));var o=parseInt(e.getAttribute("y")),r=e.getAttribute("width"),l=e.getAttribute("height");(s=document.createElement("div")).style.cssText=i,new mxWindow(mxResources.get(t)||t,s,a,o,r,l,!1,!0).setVisible(!0)}"graph"==t?n.setGraphContainer(s):"toolbar"==t?n.setToolbarContainer(s):"title"==t?n.setTitleContainer(s):"status"==t?n.setStatusContainer(s):"map"==t&&n.setMapContainer(s)}else"resource"==e.nodeName?mxResources.add(e.getAttribute("basename")):"stylesheet"==e.nodeName&&mxClient.link("stylesheet",e.getAttribute("name"));e=e.nextSibling}},e.decodeTemplates=function(e,t,n){null==n.templates&&(n.templates=[]),t=mxUtils.getChildNodes(t);for(var a=0;a<t.length;a++){for(var i=t[a].getAttribute("as"),s=t[a].firstChild;null!=s&&1!=s.nodeType;)s=s.nextSibling;null!=s&&(n.templates[i]=e.decodeCell(s))}},e}()),function(y){y.apiVersion="2.0.1";var e,t,n=y.apiVersion.includes("beta"),S=["devices","activedevice","getinstallinfo","Version","setmmifocus","setactivedevice2","setbusylight","setremotemmilightaction"];(e=y.ErrorCodes||(y.ErrorCodes={}))[e.NoError=0]="NoError",e[e.SSLError=1]="SSLError",e[e.CertError=2]="CertError",e[e.NetworkError=3]="NetworkError",e[e.DownloadError=4]="DownloadError",e[e.ParseError=5]="ParseError",e[e.OtherError=6]="OtherError",e[e.DeviceInfoError=7]="DeviceInfoError",e[e.FileNotAccessible=8]="FileNotAccessible",e[e.FileNotCompatible=9]="FileNotCompatible",e[e.Device_NotFound=10]="Device_NotFound",e[e.Parameter_fail=11]="Parameter_fail",e[e.Authorization_failed=12]="Authorization_failed",e[e.FileNotAvailable=13]="FileNotAvailable",e[e.ConfigParseError=14]="ConfigParseError",e[e.SetSettings_Fail=15]="SetSettings_Fail",e[e.Device_Reboot=16]="Device_Reboot",e[e.Device_ReadFail=17]="Device_ReadFail",e[e.Device_NotReady=18]="Device_NotReady",e[e.FilePartiallyCompatible=19]="FilePartiallyCompatible",(t=y.ErrorReturnCodes||(y.ErrorReturnCodes={}))[t.Return_Ok=0]="Return_Ok",t[t.Device_Unknown=1]="Device_Unknown",t[t.Device_Invalid=2]="Device_Invalid",t[t.Not_Supported=3]="Not_Supported",t[t.Return_ParameterFail=4]="Return_ParameterFail",t[t.ProtectedSetting_Write=5]="ProtectedSetting_Write",t[t.No_Information=6]="No_Information",t[t.NetworkRequest_Fail=7]="NetworkRequest_Fail",t[t.Device_WriteFail=8]="Device_WriteFail",t[t.Device_ReadFails=9]="Device_ReadFails",t[t.No_FactorySupported=10]="No_FactorySupported",t[t.System_Error=11]="System_Error",t[t.Device_BadState=12]="Device_BadState",t[t.FileWrite_Fail=13]="FileWrite_Fail",t[t.File_AlreadyExists=14]="File_AlreadyExists",t[t.File_Not_Accessible=15]="File_Not_Accessible",t[t.Firmware_UpToDate=16]="Firmware_UpToDate",t[t.Firmware_Available=17]="Firmware_Available",t[t.Return_Async=18]="Return_Async",t[t.Invalid_Authorization=19]="Invalid_Authorization",t[t.FWU_Application_Not_Available=20]="FWU_Application_Not_Available",t[t.Device_AlreadyConnected=21]="Device_AlreadyConnected",t[t.Device_NotConnected=22]="Device_NotConnected",t[t.CannotClear_DeviceConnected=23]="CannotClear_DeviceConnected",t[t.Device_Rebooted=24]="Device_Rebooted",t[t.Upload_AlreadyInProgress=25]="Upload_AlreadyInProgress",t[t.Download_AlreadyInProgress=26]="Download_AlreadyInProgress";var T=function(e){function i(e,t,n){var a;return _classCallCheck(this,i),(a=_possibleConstructorReturn(this,_getPrototypeOf(i).call(this,"Command "+e+" failed with error  message "+t+" and details: "+JSON.stringify(n||{})))).command=e,a.errmessage=t,a.data=n,a.name="CommandError",a}return _inherits(i,_wrapNativeSuper(Error)),i}();y.CommandError=T;var a,i,s,o,I=new Map;["mute","unmute","device attached","device detached","acceptcall","endcall","reject","flash","online","offline","linebusy","lineidle","redial","key0","key1","key2","key3","key4","key5","key6","key7","key8","key9","keyStar","keyPound","keyClear","Online","speedDial","voiceMail","LineBusy","outOfRange","intoRange","pseudoAcceptcall","pseudoEndcall","button1","button2","button3","volumeUp","volumeDown","fireAlarm","jackConnection","jackDisConnection","qdConnection","qdDisconnection","headsetConnection","headsetDisConnection","devlog","busylight","hearThrough","batteryStatus","gnpButton","mmi","error"].forEach(function(e){return I.set(e,[])}),(a=y.DeviceFeature||(y.DeviceFeature={}))[a.BusyLight=1e3]="BusyLight",a[a.FactoryReset=1001]="FactoryReset",a[a.PairingList=1002]="PairingList",a[a.RemoteMMI=1003]="RemoteMMI",a[a.MusicEqualizer=1004]="MusicEqualizer",a[a.EarbudInterconnectionStatus=1005]="EarbudInterconnectionStatus",a[a.StepRate=1006]="StepRate",a[a.HeartRate=1007]="HeartRate",a[a.RRInterval=1008]="RRInterval",a[a.RingtoneUpload=1009]="RingtoneUpload",a[a.ImageUpload=1010]="ImageUpload",a[a.NeedsExplicitRebootAfterOta=1011]="NeedsExplicitRebootAfterOta",a[a.NeedsToBePutIncCradleToCompleteFwu=1012]="NeedsToBePutIncCradleToCompleteFwu",a[a.RemoteMMIv2=1013]="RemoteMMIv2",a[a.Logging=1014]="Logging",a[a.PreferredSoftphoneListInDevice=1015]="PreferredSoftphoneListInDevice",a[a.VoiceAssistant=1016]="VoiceAssistant",a[a.PlayRingtone=1017]="PlayRingtone",(i=y.RemoteMmiType||(y.RemoteMmiType={}))[i.MMI_TYPE_MFB=0]="MMI_TYPE_MFB",i[i.MMI_TYPE_VOLUP=1]="MMI_TYPE_VOLUP",i[i.MMI_TYPE_VOLDOWN=2]="MMI_TYPE_VOLDOWN",i[i.MMI_TYPE_VCB=3]="MMI_TYPE_VCB",i[i.MMI_TYPE_APP=4]="MMI_TYPE_APP",i[i.MMI_TYPE_TR_FORW=5]="MMI_TYPE_TR_FORW",i[i.MMI_TYPE_TR_BACK=6]="MMI_TYPE_TR_BACK",i[i.MMI_TYPE_PLAY=7]="MMI_TYPE_PLAY",i[i.MMI_TYPE_MUTE=8]="MMI_TYPE_MUTE",i[i.MMI_TYPE_HOOK_OFF=9]="MMI_TYPE_HOOK_OFF",i[i.MMI_TYPE_HOOK_ON=10]="MMI_TYPE_HOOK_ON",i[i.MMI_TYPE_BLUETOOTH=11]="MMI_TYPE_BLUETOOTH",i[i.MMI_TYPE_JABRA=12]="MMI_TYPE_JABRA",i[i.MMI_TYPE_BATTERY=13]="MMI_TYPE_BATTERY",i[i.MMI_TYPE_PROG=14]="MMI_TYPE_PROG",i[i.MMI_TYPE_LINK=15]="MMI_TYPE_LINK",i[i.MMI_TYPE_ANC=16]="MMI_TYPE_ANC",i[i.MMI_TYPE_LISTEN_IN=17]="MMI_TYPE_LISTEN_IN",i[i.MMI_TYPE_DOT3=18]="MMI_TYPE_DOT3",i[i.MMI_TYPE_DOT4=19]="MMI_TYPE_DOT4",i[i.MMI_TYPE_ALL=255]="MMI_TYPE_ALL",(s=y.RemoteMmiSequence||(y.RemoteMmiSequence={}))[s.MMI_LED_SEQUENCE_OFF=0]="MMI_LED_SEQUENCE_OFF",s[s.MMI_LED_SEQUENCE_ON=1]="MMI_LED_SEQUENCE_ON",s[s.MMI_LED_SEQUENCE_SLOW=2]="MMI_LED_SEQUENCE_SLOW",s[s.MMI_LED_SEQUENCE_FAST=3]="MMI_LED_SEQUENCE_FAST",(o=y.RemoteMmiActionInput||(y.RemoteMmiActionInput={}))[o.MMI_ACTION_UP=1]="MMI_ACTION_UP",o[o.MMI_ACTION_DOWN=2]="MMI_ACTION_DOWN",o[o.MMI_ACTION_TAP=4]="MMI_ACTION_TAP",o[o.MMI_ACTION_DOUBLE_TAP=8]="MMI_ACTION_DOUBLE_TAP",o[o.MMI_ACTION_PRESS=16]="MMI_ACTION_PRESS",o[o.MMI_ACTION_LONG_PRESS=32]="MMI_ACTION_LONG_PRESS",o[o.MMI_ACTION_X_LONG_PRESS=64]="MMI_ACTION_X_LONG_PRESS",y.logLevel=2;var C=new(function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"trace",value:function(e){4<=y.logLevel&&console.log(e)}},{key:"info",value:function(e){3<=y.logLevel&&console.log(e)}},{key:"warn",value:function(e){2<=y.logLevel&&console.warn(e)}},{key:"error",value:function(e){1<=y.logLevel&&console.error(e)}}]),e}()),O=Math.random().toString(36).substr(2,9),r=new Map,l=1,d={};function c(t){return Array.isArray(t)?_toConsumableArray(new Set([].concat.apply([],t.map(function(e){return c(e)})))):_instanceof(t,RegExp)?Array.from(I.keys()).filter(function(e){return t.test(e)}):I.has(t)?[t]:(C.warn("Unknown event "+t+" ignored when adding/removing eventlistener"),[])}function m(){return g("getactivedevice")}function u(){return g("getdevices")}function p(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null,n=!(2<arguments.length&&void 0!==arguments[2])||arguments[2];if(!(!n||n&&d.initialized))throw new Error("Browser integration not initialized");var a={direction:"jabra-headset-extension-from-page-script",message:e,args:t||{},requestId:(l++).toString(),apiClientId:O,version_jsapi:y.apiVersion};C.trace("Sending command to content script: "+JSON.stringify(a)),window.postMessage(a,"*")}function g(a){var i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null,e=!(2<arguments.length&&void 0!==arguments[2])||arguments[2];if(!e||e&&d.initialized){var s=(l++).toString();return new Promise(function(e,t){r.set(s,{cmd:a,resolve:e,reject:t});var n={direction:"jabra-headset-extension-from-page-script",message:a,args:i||{},requestId:s,apiClientId:O,version_jsapi:y.apiVersion};C.trace("Sending command to content script expecting result: "+JSON.stringify(n)),window.postMessage(n,"*")})}return Promise.reject(new Error("Browser integration not initialized"))}function v(e,t){function n(t,n,e){return e.find(function(e){return e.groupId==t&&e.kind==n})}if(e&&e.deviceName){var a=void 0,i=void 0,s=void 0,o=void 0,r=t.filter(function(e){return e.label&&e.label.toLowerCase().includes("jabra")&&("audioinput"===e.kind||"audiooutput"===e.kind)}),l=function(a,e){function i(e,t){var n=e,a=t;e.length<t.length&&(n=t,a=e);var i=n.length;return 0===i?1:(i-function(e,t){e=e.toLowerCase(),t=t.toLowerCase();for(var n=new Array,a=0;a<=e.length;a++){for(var i=a,s=0;s<=t.length;s++)if(0==a)n[s]=s;else if(0<s){var o=n[s-1];e.charAt(a-1)!=t.charAt(s-1)&&(o=Math.min(Math.min(o,i),n[s])+1),n[s-1]=i,i=o}0<a&&(n[t.length]=i)}return n[t.length]}(n,a))/i}return 1==e.length?0:0<e.length?e.map(function(e){if(e.includes("("+a+")"))return 1;var t=e.indexOf(" - "),n=0<=t?e.substring(t+3):e;return i(a,n)}).reduce(function(e,t,n,a){return t>a[e]?n:e},0):-1}(e.deviceName,r.map(function(e){return e.label}));if(0<=l){var d=r[l];if(a=d.groupId,o=d.label,"audioinput"===d.kind){i=d.deviceId;var c=n(a,"audiooutput",r);c&&(s=c.deviceId)}else if("audiooutput"===d.kind){s=d.deviceId;var m=n(a,"audioinput",r);m&&(i=m.deviceId)}}a&&(e.browserGroupId=a),o&&(e.browserLabel=o),i&&(e.browserAudioInputId=i),s&&(e.browserAudioOutputId=s)}}function h(){return navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?d.initialized?"https:"!==location.protocol?Promise.reject(new Error("Your browser needs https for lookup to work")):Promise.all([m(),navigator.mediaDevices.enumerateDevices()]).then(function(e){var t=_slicedToArray(e,2),n=t[0];return v(n,t[1]),n}):Promise.reject(new Error("Browser integration not initialized")):Promise.reject(new Error("Your browser does not support required media api"))}function f(e){if(""===e||"string"!=typeof e&&!_instanceof(e,String)){if("boolean"==typeof e)return e;throw new Error("Illegal/missing argument - boolean or string expected")}return"true"===e||"1"===e}function b(e){if(""===e||"string"!=typeof e&&!_instanceof(e,String)){if("number"==typeof e)return e;throw new Error("Illegal/missing argument - number or string expected")}return parseInt(e)}y.init=function(){return new Promise(function(h,f){if(!/Chrome/.test(navigator.userAgent)||!/Google Inc/.test(navigator.vendor))return f(new Error("Jabra Browser Integration: Only supported by <a href='https://google.com/chrome'>Google Chrome</a>."));if(d.initialized||d.initializing)return f(new Error("Jabra Browser Integration already initialized"));d.initializing=!0,r.clear();var b=!0;function A(e,t){var n=I.get(e);n?n.forEach(function(e){e(t)}):C.error("Unexpected unknown eventName: "+e)}function E(e){var t;if(e)t=r.get(e),r.delete(e);else if(1===r.size){var n=r.entries().next().value;t=n[1],r.delete(n[0])}else t=void 0;var a=r.size;return 10<a&&a%10==0&&C.warn("Memory leak found - Request result map is getting too large (size #"+a+")"),t}d.eventCallback=function(e){if(e.source===window&&e.data.direction&&"jabra-headset-extension-from-content-script"===e.data.direction){var t=e.data.apiClientId||"",n=e.data.requestId||"";if(O===t||""===t)if(C.trace("Receiving event from content script: "+JSON.stringify(e.data)),"na"===e.data.message&&delete e.data.message,e.data.message&&e.data.message.startsWith("Error:")&&(e.data.error=e.data.message,delete e.data.message),e.data.message){C.trace("Got message: "+JSON.stringify(e.data));var a=e.data.message.substring(7);if(a.startsWith("logLevel"))return y.logLevel=parseInt(e.data.message.substring(16)),void C.trace("Logger set to level "+y.logLevel);var i=S.findIndex(function(e){return a.startsWith(e)});if(0<=i){("getinstallinfo"===a||a.startsWith("Version "))&&(e.data.data||(e.data.data={}),e.data.data.version_jsapi=y.apiVersion),"getinstallinfo"===a&&(e.data.data.installationOk=(g=e.data.data,!((v=[g.version_browserextension,g.version_chromehost,g.version_jsapi]).some(function(e){return!e})||!g.version_nativesdk||!v.map(function(e){var t=e.lastIndexOf("beta");return 0<=t&&e.length>t+4?e.substr(t+4):void 0}).filter(function(e){return e}).every(function(e,t,n){return e===n[0]}))));var s=E(n);if(s){var o;if(e.data.data)o=e.data.data;else{var r=S[i].length+1,l=a.substring(r);o={},l&&(o.legacy_result=l)}s.resolve(o)}else{var d="Result target information missing for message "+e.data.message+". This is likely due to some software components that have not been updated or a software bug. Please upgrade extension and/or chromehost";C.error(d),A("error",{error:d,message:e.data.message})}}else{if(!I.has(a))return C.warn("Unknown message: "+e.data.message),void A("error",{error:"Unknown message: ",message:e.data.message});var c=JSON.parse(JSON.stringify(e.data));delete c.direction,delete c.apiClientId,delete c.requestId,A(c.message=a,c)}if(b)return b=!1,h()}else if(e.data.error){C.error("Got error: "+e.data.error);var m=e.data.error.substring(7),u=E(n);if(u)u.reject(new T(u.cmd,m,e.data.data));else{var p=JSON.parse(JSON.stringify(e.data));delete p.direction,delete p.apiClientId,delete p.requestId,p.error=m,A("error",p)}if(b)return b=!1,f(new Error(e.data.error))}}var g,v},window.addEventListener("message",d.eventCallback),setTimeout(function(){g("getversion",null,!1).then(function(e){var t="string"==typeof e||_instanceof(e,String)?e:JSON.stringify(e,null,2);C.trace("getversion returned successfully with : "+t),p("logLevel",null,!1)}).catch(function(e){C.error(e)})},1e3),setTimeout(function(){!0===b&&(b=!1,f(new Error("Jabra Browser Integration: You need to use this <a href='https://chrome.google.com/webstore/detail/"+(n?"igcbbdnhomedfadljgcmcfpdcoonihfe":"okpeabepajdgiepelmhkfhkjlhhmofma")+"'>Extension</a> and then reload this page")))},5e3),d.initialized=!0,d.initializing=!1})},y.shutdown=function(){return d.initialized?(window.removeEventListener("message",d.eventCallback),d.eventCallback=void 0,r.clear(),l=1,d.initialized=!1,I.forEach(function(e,t){}),Promise.resolve()):Promise.reject(new Error("Browser integration not initialized"))},y.addEventListener=function(e,n){c(e).map(function(e){var t=I.get(e);t.find(function(e){return e===n})||t.push(n)})},y.removeEventListener=function(e,a){c(e).map(function(e){var t=I.get(e),n=t.findIndex(function(e){return e===a});0<=n&&t.splice(n,1)})},y.ring=function(){p("ring")},y.offHook=function(){p("offhook")},y.onHook=function(){p("onhook")},y.mute=function(){p("mute")},y.unmute=function(){p("unmute")},y.hold=function(){p("hold")},y.resume=function(){p("resume")},y.setMmiFocus=function(e,t){return g("setmmifocus",{type:b(e),capture:f(t)})},y.setRemoteMmiLightAction=function(e,t,n){return g("setremotemmilightaction",{type:b(e),color:function(e){if(""===e||"string"!=typeof e&&!_instanceof(e,String)){if("number"==typeof e){var t=e;return[t>>16&255,t>>8&255,255&t]}if(Array.isArray(e)){if(3!=e.length)throw new Error("Illegal argument - wrong dimension of number array (3 expected)");return e}throw new Error("Illegal/missing argument - number array or hex string expected")}var n=parseInt(e,16);return[n>>16&255,n>>8&255,255&n]}(t),effect:b(n)})},y.getActiveDevice=function(){return f(0<arguments.length&&void 0!==arguments[0]&&arguments[0])?h():m()},y.getDevices=function(){return f(0<arguments.length&&void 0!==arguments[0]&&arguments[0])?navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?d.initialized?"https:"===location.protocol?Promise.all([u(),navigator.mediaDevices.enumerateDevices()]).then(function(e){var t=_slicedToArray(e,2),n=t[0],a=t[1];return n.forEach(function(e){v(e,a)}),n}):Promise.reject(new Error("Your browser needs https for lookup to work")):Promise.reject(new Error("Browser integration not initialized")):Promise.reject(new Error("Your browser does not support required media api")):u()},y._setActiveDeviceId=function(e){var t=b(e);p("setactivedevice "+e.toString(),{id:t})},y.setActiveDeviceId=function(e){return g("setactivedevice2",{id:b(e)})},y.setBusyLight=function(e){return g("setbusylight",{busy:f(e)})},y.getInstallInfo=function(){return g("getinstallinfo")},y.trySetDeviceOutput=function(e,t){return e&&t?"function"!=typeof e.setSinkId?Promise.reject(new Error("Your browser does not support required Audio Output Devices API")):e.setSinkId(t.browserAudioOutputId).then(function(){return e.sinkId===t.browserAudioOutputId}):Promise.reject(new Error("Call to trySetDeviceOutput has argument(s) missing"))},y.isDeviceSelectedForInput=function(e,t){if(!e||!t)throw Error("Call to isDeviceSelectedForInput has argument(s) missing");for(var n=e.getAudioTracks(),a=0,i=n.length;a<i;a++)if(n[a].getCapabilities().deviceId!==t.browserAudioInputId)return!1;return!0},y.getUserDeviceMediaExt=function(n){if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)return Promise.reject(new Error("Your browser does not support required media api"));if(!d.initialized)return Promise.reject(new Error("Browser integration not initialized"));if("https:"!==location.protocol&&C.warn("This function needs to run under https for best UX experience (persisted permissions)"),null!=n&&"object"!==_typeof(n))return Promise.reject(new Error("Optional constraints parameter must be an object"));function i(e,t){if(null==t||"object"!==_typeof(e))return e;var n={};for(var a in t)n[a]=t[a];for(var a in e)n[a]=i(e[a],t[a]);return n}return navigator.mediaDevices.getUserMedia(i({audio:!0},n)).then(function(e){return h().then(function(t){return e.getTracks().forEach(function(e){e.stop()}),t&&t.browserAudioInputId?navigator.mediaDevices.getUserMedia(i({audio:{deviceId:t.browserAudioInputId}},n)).then(function(e){return{stream:e,deviceInfo:t}}):Promise.reject(new Error("Could not find a Jabra device with a microphone"))})})}}(jabra||(jabra={})),EditorUi=function(e,t,n){this.projectDesignController=e,this.editor=t||new Editor,this.container=n||document.body;var a=t.graph,i=this;CRUD_PERMISSIONS=this.projectDesignController.crudPermissions;var s=mxUtils.bind(this,function(e){return null==e&&(e=window.event),!!this.isEditingEnabled()&&a.isEditing()});this.container.style.overflow="hidden",(new Image).src=mxPopupMenu.prototype.submenuImage,null!=mxConnectionHandler.prototype.connectImage&&((new Image).src=mxConnectionHandler.prototype.connectImage.src),this.actions=new Actions(this),this.menus=new Menus(this),this.createDivs(),this.refresh(),this.createUi(),this.container==document.body&&(this.menubarContainer.onselectstart=s,this.menubarContainer.onmousedown=s,this.toolbarContainer.onselectstart=s,this.toolbarContainer.onmousedown=s,this.diagramContainer.onselectstart=s,this.diagramContainer.onmousedown=s,this.sidebarContainer.onselectstart=s,this.sidebarContainer.onmousedown=s,this.footerContainer.onselectstart=s,this.footerContainer.onmousedown=s),mxClient.IS_IE&&(void 0===document.documentMode||document.documentMode<9)?(mxEvent.addListener(this.diagramContainer,"contextmenu",s),mxEvent.addListener(this.sidebarContainer,"contextmenu",s)):(this.diagramContainer.oncontextmenu=s,this.sidebarContainer.oncontextmenu=s),a.init(this.diagramContainer),a.refresh(),a.setEnabled(this.isEditingEnabled()),a.container.setAttribute("tabindex","0"),a.container.style.cursor="default",a.container.style.backgroundImage="url("+t.gridImage+")",a.container.style.backgroundPosition="-1px -1px",a.container.focus();var o=a.fireMouseEvent;a.fireMouseEvent=function(e,t,n){e==mxEvent.MOUSE_DOWN&&this.container.focus(),o.apply(this,arguments)},this.createMultiplicities(a.multiplicities,["start","finally","end"],[[1,1],[1,1],[0,0]],[[0,0],[0,0],[1,"n"]]),this.createMultiplicities(a.multiplicities,["answer","hangup","dial","ext_dial","queue","voicemail","callback"],[[1,1],[0,0],[0,1],[0,1],[0,1],[1,1],[0,1]],[[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["login","pause","unpause","logout"],[[1,2],[1,2],[1,2],[1,2]],[[1,"n"],[1,"n"],[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["set","math"],[[1,1],[1,1]],[[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["background","playback","menu","saydigits","saynumber","sayphonetic","tts","ispeechtts","awspolly","getdigits","getsecretdigits","lumenvoxtts","sestektts"],[[1,"n"],[1,1],[1,"n"],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,"n"],[1,"n"],[1,1],[1,1]],[[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["record"],[[1,1]],[[1,"n"]]),this.createMultiplicities(a.multiplicities,["database","ispeechasr","sendSMS","sendMail","sendFax","googleasr","lumenvoxasr","tildeasr","dialogflow","awslex","sesteknda","sestekasr"],[[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1]],[[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["gotoc","gotoif","gotoiftime","vswitch"],[[0,0],[1,2],[1,2],[1,"n"]],[[1,"n"],[1,"n"],[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["queuelog","goal"],[[1,1],[1,1]],[[1,"n"],[1,"n"]]),this.createMultiplicities(a.multiplicities,["noop","system","agi","subproject","custom_app"],[[1,1],[1,1],[0,1],[0,1],[0,1]],[[1,"n"],[1,"n"],[1,"n"],[1,"n"],[1,"n"]]),a.dblClick=function(e,n){var t=new mxEventObject(mxEvent.DOUBLE_CLICK,"event",e,"cell",n);this.fireEvent(t),mxEvent.isConsumed(e)||t.isConsumed()||(this.getModel().isEdge(n)?0<=["background","gotoif","gotoiftime","menu","getdigits","getsecretdigits","vswitch","login","pause","unpause","logout"].indexOf(n.source.value.tagName)&&this.startEditingAtCell(n):this.getModel().isVertex(n)&&i.projectDesignController.openDialog(n.getValue(),function(e){for(var t=0;t<e.length;t+=1)n.setAttribute(e[t].name,e[t].value);a.refresh(n)}),t.consume())},a.panningHandler.autoExpand=!0,a.panningHandler.factoryMethod=mxUtils.bind(this,function(e,t,n){this.isEditingEnabled()&&this.menus.createPopupMenu(e,t,n)}),t.outline.init(this.outlineContainer),mxEvent.addGestureListeners(document,mxUtils.bind(this,function(e){a.panningHandler.hideMenu()})),mxClient.IS_TOUCH&&(mxEvent.addListener(a.container,"gesturechange",mxUtils.bind(this,function(e){a.view.getDrawPane().setAttribute("transform","scale("+e.scale+")"),a.view.getOverlayPane().style.visibility="hidden"})),mxEvent.addListener(a.container,"gestureend",mxUtils.bind(this,function(e){a.view.getDrawPane().removeAttribute("transform"),a.zoomToCenter=!0,a.zoom(e.scale),a.view.getOverlayPane().style.visibility="visible"})));var r=this.isEditingEnabled()?this.createKeyHandler(t):null;this.getKeyHandler=function(){return r},mxEvent.addListener(window,"resize",mxUtils.bind(this,function(){this.refresh(),a.sizeDidChange(),this.editor.outline.update(!1),this.editor.outline.outline.sizeDidChange()})),this.init(),this.open(),this.refresh()},EditorUi.prototype.splitSize=mxClient.IS_TOUCH?16:8,EditorUi.prototype.menubarHeight=33,EditorUi.prototype.toolbarHeight=36,EditorUi.prototype.footerHeight=0,EditorUi.prototype.hsplitPosition=204,EditorUi.prototype.vsplitPosition=190,EditorUi.prototype.init=function(){this.addUndoListener(),this.addSelectionListener();var e=this.actions.get("paste"),t=function(){e.setEnabled(!mxClipboard.isEmpty())},n=mxClipboard.cut;mxClipboard.cut=function(){n.apply(this,arguments),t()};var a=mxClipboard.copy;mxClipboard.copy=function(){a.apply(this,arguments),t()}},EditorUi.prototype.isEditingEnabled=function(){return!!CRUD_PERMISSIONS.canEdit},EditorUi.prototype.exportXML=function(e){var t=window.document.createElement("a");t.href="data:attachment/text;charset=utf-8,"+encodeURIComponent(e),t.download=this.editor.filename+".xml",t.target="_self",t.click()},EditorUi.prototype.open=function(){try{null!=window.opener&&null!=window.opener.openFile&&window.opener.openFile.setConsumer(mxUtils.bind(this,function(e,t){try{var n=mxUtils.parseXml(e);this.editor.setGraphXml(n.documentElement),this.editor.modified=!1,this.editor.undoManager.clear(),null!=t&&(this.editor.filename=t)}catch(e){mxUtils.alert(mxResources.get("invalidOrMissingFile")+": "+e.message)}}))}catch(e){}},EditorUi.prototype.openString=function(e,t,n){try{var a=mxUtils.parseXml(e);this.editor.setGraphXml(a.documentElement),this.editor.modified=!1,this.editor.undoManager.clear(),null!=t&&(this.editor.filename=t),null!=n&&(this.editor.data=n)}catch(e){mxUtils.alert(mxResources.get("invalidOrMissingFile")+": "+e.message)}},EditorUi.prototype.validate=function(e,t){for(var n=this.editor.graph,a=(e=null!=e?e:n.model.getRoot(),t=null!=t?t:{},!0),i=n.model.getChildCount(e),s=0;s<i;s++){var o=n.model.getChildAt(e,s),r=t;n.isValidRoot(o)&&(r={}),null!=(r=this.validate(o,r))?n.setCellWarning(o,r.replace(/\n/g,"<br>")):n.setCellWarning(o,null),a=a&&null==r}if(i="",n.model.isVertex(e))switch(e.value.nodeName){case"start":i=this.validateBlock("start")?"":"Only one Start block is allowed\n";break;case"finally":i=this.validateBlock("finally")?"":"Only one Finally block is allowed\n";break;case"playback":i=0<e.value.getAttribute("file_id")?"":mxResources.get("noAudioSelected")+"\n";break;case"answer":i=0<=e.value.getAttribute("timeout")?"":mxResources.get("invalidTimeout")+"\n";break;case"menu":i=0<e.value.getAttribute("file_id")?"":mxResources.get("noAudioSelected")+"\n",i+=0<e.value.getAttribute("digit")?"":mxResources.get("wrongMaxDigit")+"\n",i+=0<=e.value.getAttribute("response")?"":mxResources.get("invalidTimeout")+"\n",i+=0<=e.value.getAttribute("retry")?"":mxResources.get("invalidRetry")+"\n";break;case"getdigits":i=0<e.value.getAttribute("file_id")?"":mxResources.get("noAudioSelected")+"\n",i+=0<e.value.getAttribute("variable_id")?"":mxResources.get("noVariableSelected")+"\n",i+=0<e.value.getAttribute("mindigit")?"":mxResources.get("wrongMinDigit")+"\n",i+=0<e.value.getAttribute("maxdigit")?"":mxResources.get("wrongMaxDigit")+"\n",i+=0<=e.value.getAttribute("retry")?"":mxResources.get("invalidRetry")+"\n";break;case"getsecretdigits":i=0<e.value.getAttribute("file_id")?"":mxResources.get("noAudioSelected")+"\n",i+=0<e.value.getAttribute("variable_id")?"":mxResources.get("noVariableSelected")+"\n",i+=0<e.value.getAttribute("mindigit")?"":mxResources.get("wrongMinDigit")+"\n",i+=0<e.value.getAttribute("maxdigit")?"":mxResources.get("wrongMaxDigit")+"\n",i+=0<=e.value.getAttribute("hiddendigitsnum")?"":mxResources.get("wrongHiddenDigitsnum")+"\n",i+=0<=e.value.getAttribute("retry")?"":mxResources.get("invalidRetry")+"\n";break;case"vswitch":i=0<e.value.getAttribute("variable_id")?"":mxResources.get("noVariableSelected")+"\n";break;case"database":i=0<e.value.getAttribute("odbc_id")?"":mxResources.get("noDatabaseSelected")+"\n",i+=""!==e.value.getAttribute("query")?"":mxResources.get("missingQuery")+"\n";break;case"set":case"math":i=0<e.value.getAttribute("variable_id")?"":mxResources.get("noVariableSelected")+"\n";break;case"gotoc":i=""!==e.value.getAttribute("context")?"":mxResources.get("noContextSelected")+"\n",i+=""!==e.value.getAttribute("extension")?"":mxResources.get("noExtensionSelected")+"\n",i+=1<=e.value.getAttribute("priority")?"":mxResources.get("invalidPriority")+"\n";break;case"system":case"agi":i=""!==e.value.getAttribute("command")?"":mxResources.get("noCommandSelected")+"\n";break;case"gotoif":i=""!==e.value.getAttribute("condition")?"":mxResources.get("noConditionSelected")+"\n";break;case"saydigits":i=""!==e.value.getAttribute("digits")?"":mxResources.get("noDigitsSelected")+"\n";break;case"saynumber":i=""!==e.value.getAttribute("number")?"":mxResources.get("noNumberSelected")+"\n";break;case"sayphonetic":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n";break;case"record":i=""!==e.value.getAttribute("file")?"":mxResources.get("noFileSelected")+"\n",i+=-1<=e.value.getAttribute("timeout")?"":mxResources.get("invalidTimeout")+"\n";break;case"goal":i=""!==e.value.getAttribute("goalname")?"":mxResources.get("noGoalSelected")+"\n";break;case"ext_dial":i="-1"!==e.value.getAttribute("trunk_name")?"":mxResources.get("noTrunkSelected")+"\n",i+=""!==e.value.getAttribute("phone")?"":mxResources.get("noIdentifierSelected")+"\n",i+=0<=e.value.getAttribute("timeout")?"":mxResources.get("invalidTimeout")+"\n";break;case"dial":i=0<e.value.getAttribute("sip_id")?"":mxResources.get("noIdentifierSelected")+"\n",i+=0<=e.value.getAttribute("timeout")?"":mxResources.get("invalidTimeout")+"\n";break;case"queue":i="-1"!==e.value.getAttribute("queue_id")?"":mxResources.get("noQueueSelected")+"\n",i+=0<=e.value.getAttribute("timeout")?"":mxResources.get("invalidTimeout")+"\n";break;case"callback":i="-1"!==e.value.getAttribute("list_id")?"":mxResources.get("noListSelected")+"\n",i+=""!==e.value.getAttribute("name")?"":mxResources.get("noFirstNameSelected")+"\n",i+=""!==e.value.getAttribute("phone")?"":mxResources.get("noPhoneSelected")+"\n",i+=""!==e.value.getAttribute("delay")?"":mxResources.get("invalidDelay")+"\n";break;case"gotoiftime":i=0<e.value.getAttribute("interval_id")?"":mxResources.get("noIntervalSelected")+"\n";break;case"voicemail":i=""!==e.value.getAttribute("mailbox")?"":mxResources.get("noBoxNumberSelected")+"\n";break;case"subproject":i=0<e.value.getAttribute("project_id")?"":mxResources.get("noProjectSelected")+"\n";break;case"sendSMS":i=0<e.value.getAttribute("sms_account_id")?"":mxResources.get("noAccountSelected")+"\n",i+=""!==e.value.getAttribute("to")?"":mxResources.get("noRecipientSelected")+"\n",i+=""!==e.value.getAttribute("sms_text")?"":mxResources.get("noTextSelected")+"\n";break;case"sendMail":i=0<e.value.getAttribute("account_id")?"":mxResources.get("noAccountSelected")+"\n",i+=""!==e.value.getAttribute("to")?"":mxResources.get("noRecipientSelected")+"\n";break;case"sendFax":i=0<e.value.getAttribute("account_id")?"":mxResources.get("noAccountSelected")+"\n",i+=""!==e.value.getAttribute("to")?"":mxResources.get("noRecipientSelected")+"\n",i+=""!==e.value.getAttribute("attachment_path")?"":mxResources.get("noAttachmentSelected")+"\n";break;case"tts":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n";break;case"awspolly":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n",i=""!==e.value.getAttribute("aws_access_key_id")?"":mxResources.get("noAccessKeySelected")+"\n",i=""!==e.value.getAttribute("aws_secret_access_key")?"":mxResources.get("noSecretAccessKeySelected")+"\n";break;case"awslex":i=""!==e.value.getAttribute("aws_bot_name")?"":mxResources.get("noNameSelected")+"\n",i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n",i=""!==e.value.getAttribute("aws_access_key_id")?"":mxResources.get("noAccessKeySelected")+"\n",i=""!==e.value.getAttribute("aws_secret_access_key")?"":mxResources.get("noSecretAccessKeySelected")+"\n";break;case"ispeechtts":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n",i+=""!==e.value.getAttribute("key")?"":mxResources.get("noKeySelected")+"\n",i+=-10<=e.value.getAttribute("speed")&&e.value.getAttribute("speed")<=10?"":mxResources.get("invalidSpeed")+"\n";break;case"lumenvoxtts":case"sestektts":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n";break;case"lumenvoxasr":case"sestekasr":i=""!==e.value.getAttribute("grammar")?"":mxResources.get("noGrammarSelected")+"\n";break;case"ispeechasr":case"googleasr":i=""!==e.value.getAttribute("key")?"":mxResources.get("noKeySelected")+"\n",i+=-1<=e.value.getAttribute("timeout")?"":mxResources.get("invalidTimeout")+"\n";break;case"tildeasr":i=""!==e.value.getAttribute("appid")?"":mxResources.get("noAppIdInserted")+"\n",i+=""!==e.value.getAttribute("appsecret")?"":mxResources.get("noAppSecretInserted")+"\n",i+=""!==e.value.getAttribute("uri")?"":mxResources.get("noUrlInserted")+"\n";break;case"custom_app":i=""!==e.value.getAttribute("application")?"":mxResources.get("noApplicationSelected")+"\n";break;case"login":case"pause":case"unpause":case"logout":i=""!==e.value.getAttribute("findBy")?"":mxResources.get("noFindBySelected")+"\n";case"sesteknda":i=""!==e.value.getAttribute("text")?"":mxResources.get("noTextSelected")+"\n",i+=""!==e.value.getAttribute("ndauth_url")?"":mxResources.get("noUrlInserted")+"\n",i+=""!==e.value.getAttribute("ndassistant_url")?"":mxResources.get("noUrlInserted")+"\n",i+=""!==e.value.getAttribute("username")?"":mxResources.get("noUsernameSelected")+"\n",i+=""!==e.value.getAttribute("password")?"":mxResources.get("noPasswordSelected")+"\n"}if(n.model.isEdge(e))switch(n.model.getCell(e.source.getId()).value.nodeName){case"background":case"menu":if(void 0!==e.getValue()){var l=/^[0-9]+$|^[-]{1}$|^[i]{1}$|^[t]{1}$|^[*]{1}$|^[#]{1}$/;String(e.getValue()).split(",").forEach(function(e){i+=l.test(e)?"":mxResources.get("numberOrAll")+"\n"})}else i=i+mxResources.get("numberOrAll")+"\n";break;case"getsecretdigits":case"getdigits":if(void 0!==e.getValue())i+=(l=/^(x|i|-)$/).test(String(e.getValue()))?"":mxResources.get("numberOrInvalidOrDefault")+"\n";else i=i+mxResources.get("numberOrInvalidOrDefault")+"\n";break;case"gotoif":case"gotoiftime":if(void 0!==e.getValue())i+=(l=/^(true){1}$|^(false){1}$/).test(String(e.getValue()))?"":mxResources.get("trueOrFalse")+"\n";else i=i+mxResources.get("trueOrFalse")+"\n";break;case"login":case"pause":case"unpause":case"logout":if(void 0!==e.getValue())i+=(l=/^(success){1}$|^(failure){1}$/).test(String(e.getValue()))?"":mxResources.get("successOrFailure")+"\n";else i=i+mxResources.get("successOrFailure")+"\n"}return n.isCellCollapsed(e)&&!a&&(i+=(mxResources.get(n.containsValidationErrorsResource)||n.containsValidationErrorsResource)+"\n"),i=n.model.isEdge(e)?i+(n.getEdgeValidationError(e,n.model.getTerminal(e,!0),n.model.getTerminal(e,!1))||""):i+(n.getCellValidationError(e)||""),null!=(s=n.validateCell(e,t))&&(i+=s),null==n.model.getParent(e)&&n.view.validate(),0<i.length||!a?i:null},EditorUi.prototype.validateBlock=function(t){var n=this.editor.graph,e=n.getDefaultParent(),a=0;return e.children.forEach(function(e){n.model.isVertex(e)&&e.value.nodeName==t&&a++}),!(1<a)},EditorUi.prototype.getUrl=function(e){var t=null!=e?e:window.location.pathname,n=0<t.indexOf("?")?1:0;for(var a in urlParams)t+=0==n?"?":"&",t+=a+"="+urlParams[a],n++;return t},EditorUi.prototype.addUndoListener=function(){var e=this.actions.get("undo"),t=this.actions.get("redo"),n=this.editor.undoManager,a=function(){e.setEnabled(n.canUndo()),t.setEnabled(n.canRedo())};n.addListener(mxEvent.ADD,a),n.addListener(mxEvent.UNDO,a),n.addListener(mxEvent.REDO,a),n.addListener(mxEvent.CLEAR,a),a()},EditorUi.prototype.addSelectionListener=function(){var e=mxUtils.bind(this,function(){var e=this.editor.graph,t=!e.isSelectionEmpty(),n=!1,a=!1,i=e.getSelectionCells();if(null!=i)for(var s=0;s<i.length;s++){var o=i[s];if(e.getModel().isEdge(o)&&(a=!0),e.getModel().isVertex(o)&&(n=!0),a&&n)break}var r=["cut","copy","delete","duplicate","bold","italic","style","underline","toFront","toBack","dashed","rounded","shadow","tilt","autosize"];for(s=0;s<r.length;s++)this.actions.get(r[s]).setEnabled(t);this.actions.get("curved").setEnabled(a),this.actions.get("rotation").setEnabled(n),this.actions.get("wordWrap").setEnabled(n),this.actions.get("group").setEnabled(1<e.getSelectionCount()),this.actions.get("ungroup").setEnabled(1==e.getSelectionCount()&&0<e.getModel().getChildCount(e.getSelectionCell()));var l=n&&1==e.getSelectionCount();this.actions.get("removeFromGroup").setEnabled(l&&e.getModel().isVertex(e.getModel().getParent(e.getSelectionCell())));var d=["fontFamily","fontSize","alignment","position","text","format","arrange","linewidth","spacing"];for(s=0;s<d.length;s++)this.menus.get(d[s]).setEnabled(t);d=["line","lineend","linestart"];for(s=0;s<d.length;s++)this.menus.get(d[s]).setEnabled(a);this.actions.get("setAsDefaultEdge").setEnabled(a),this.menus.get("align").setEnabled(1<e.getSelectionCount()),this.menus.get("direction").setEnabled(n||a&&e.isLoop(e.view.getState(e.getSelectionCell()))),this.menus.get("navigation").setEnabled(e.foldingEnabled&&(null!=e.view.currentRoot||1==e.getSelectionCount()&&e.isValidRoot(e.getSelectionCell()))),this.actions.get("home").setEnabled(null!=e.view.currentRoot),this.actions.get("exitGroup").setEnabled(null!=e.view.currentRoot);var c=1==e.getSelectionCount()&&e.isValidRoot(e.getSelectionCell());this.actions.get("enterGroup").setEnabled(c),this.actions.get("expand").setEnabled(c),this.actions.get("collapse").setEnabled(c),this.actions.get("editLink").setEnabled(1==e.getSelectionCount()),this.actions.get("openLink").setEnabled(1==e.getSelectionCount()&&null!=e.getLinkForCell(e.getSelectionCell()))});this.editor.graph.getSelectionModel().addListener(mxEvent.CHANGE,e),e()},EditorUi.prototype.refresh=function(){var e=mxClient.IS_IE&&(null==document.documentMode||5==document.documentMode),t=this.container.clientWidth+390,n=this.container.clientHeight+190;this.container==document.body&&(t=document.body.clientWidth||document.documentElement.clientWidth,n=e&&document.body.clientHeight||document.documentElement.clientHeight);var a=Math.max(0,Math.min(this.hsplitPosition,t-this.splitSize-20)),i=Math.max(0,Math.min(this.vsplitPosition,n-this.menubarHeight-this.toolbarHeight-this.splitSize-1));this.menubarContainer.style.height=this.menubarHeight+"px",this.toolbarContainer.style.top=this.menubarHeight+"px",this.toolbarContainer.style.height=this.toolbarHeight+"px";var s=this.menubarHeight+this.toolbarHeight;if(mxClient.IS_QUIRKS||(s+=1),this.sidebarContainer.style.top=s+"px",this.sidebarContainer.style.width=a+"px",this.outlineContainer.style.width=a+"px",this.outlineContainer.style.height=i+"px",this.diagramContainer.style.left=this.isEditingEnabled()?a+this.splitSize+"px":"0px",this.diagramContainer.style.top=this.sidebarContainer.style.top,this.hsplit.style.top=this.sidebarContainer.style.top,this.hsplit.style.bottom=this.outlineContainer.style.bottom,this.hsplit.style.left=a+"px",this.vsplit.style.width=this.sidebarContainer.style.width,this.vsplit.style.bottom=i+this.footerHeight+"px",e){this.menubarContainer.style.width=t+"px",this.toolbarContainer.style.width=this.menubarContainer.style.width;var o=n-i-this.splitSize-this.menubarHeight-this.toolbarHeight;this.sidebarContainer.style.height=o+"px",this.diagramContainer.style.width=t-a-this.splitSize+"px";var r=n-this.menubarHeight-this.toolbarHeight;this.diagramContainer.style.height=r+"px",this.hsplit.style.height=r+"px"}else this.sidebarContainer.style.bottom=i+this.splitSize+"px",this.diagramContainer.style.bottom=this.outlineContainer.style.bottom},EditorUi.prototype.createDivs=function(){this.menubarContainer=this.createDiv("geMenubarContainer"),this.toolbarContainer=this.createDiv("geToolbarContainer"),this.sidebarContainer=this.createDiv("geSidebarContainer"),this.outlineContainer=this.createDiv("geOutlineContainer"),this.diagramContainer=this.createDiv("geDiagramContainer"),this.footerContainer=this.createDiv("geFooterContainer"),this.hsplit=this.createDiv("geHsplit"),this.vsplit=this.createDiv("geVsplit"),this.menubarContainer.style.top="0px",this.menubarContainer.style.left="0px",this.menubarContainer.style.right="0px",this.toolbarContainer.style.left="0px",this.toolbarContainer.style.right="0px",this.sidebarContainer.style.left="0px",this.outlineContainer.style.bottom="0px",this.outlineContainer.style.left="0px",this.diagramContainer.style.overflow="scroll",this.diagramContainer.style.right="0px",this.footerContainer.style.left="0px",this.footerContainer.style.right="0px",this.footerContainer.style.bottom="0px",this.vsplit.style.left="0px",this.vsplit.style.height=this.splitSize+"px",this.hsplit.style.width=this.splitSize+"px"},EditorUi.prototype.createUi=function(){this.menubar=this.menus.createMenubar(this.createDiv("geMenubar")),this.menubarContainer.appendChild(this.menubar.container),this.toolbar=this.createToolbar(this.createDiv("geToolbar")),this.toolbarContainer.appendChild(this.toolbar.container),this.sidebar=this.createSidebar(this.sidebarContainer),this.footerContainer.appendChild(this.createFooter()),this.statusContainer=this.createStatusContainer(),this.editor.addListener("statusChanged",mxUtils.bind(this,function(){this.setStatusText(this.editor.getStatus())})),this.setStatusText(this.editor.getStatus()),this.menubar.container.appendChild(this.statusContainer),this.isEditingEnabled()&&(this.container.appendChild(this.sidebarContainer),this.container.appendChild(this.hsplit),this.container.appendChild(this.vsplit)),this.container.appendChild(this.diagramContainer),this.container.appendChild(this.menubarContainer),this.container.appendChild(this.toolbarContainer),this.container.appendChild(this.outlineContainer),this.container.appendChild(this.footerContainer),this.addSplitHandler(this.hsplit,!0,0,mxUtils.bind(this,function(e){this.hsplitPosition=e,this.refresh(),this.editor.graph.sizeDidChange(),this.editor.outline.update(!1),this.editor.outline.outline.sizeDidChange()})),this.addSplitHandler(this.vsplit,!1,this.footerHeight,mxUtils.bind(this,function(e){this.vsplitPosition=e,this.refresh(),this.editor.outline.update(!1),this.editor.outline.outline.sizeDidChange()}))},EditorUi.prototype.createStatusContainer=function(){var e=document.createElement("a");return e.className="geItem geStatus",e},EditorUi.prototype.createStatusContainer=function(){var e=document.createElement("a");return e.className="geItem geStatus",e},EditorUi.prototype.setStatusText=function(e){this.statusContainer.innerHTML=e},EditorUi.prototype.createToolbar=function(e){return new Toolbar(this,e)},EditorUi.prototype.createSidebar=function(e){return new Sidebar(this,e)},EditorUi.prototype.createFooter=function(){return this.createDiv("geFooter")},EditorUi.prototype.createDiv=function(e){var t=document.createElement("div");return t.className=e,t},EditorUi.prototype.createHeader=function(e){return document.createElement(e)},EditorUi.prototype.createForm=function(e){var t=document.createElement("form");return t.className=e,t},EditorUi.prototype.addSplitHandler=function(t,n,a,i){var s=null,o=null;function r(e){if(null!=s){var t=new mxPoint(mxEvent.getClientX(e),mxEvent.getClientY(e));i(Math.max(0,o+(n?t.x-s.x:s.y-t.y)-a)),mxEvent.consume(e)}}function e(e){r(e),o=s=null}mxEvent.addGestureListeners(t,function(e){s=new mxPoint(mxEvent.getClientX(e),mxEvent.getClientY(e)),o=parseInt(n?t.style.left:t.style.bottom),mxEvent.consume(e)}),mxEvent.addListener(document,"mousemove",r),mxEvent.addListener(document,"touchmove",r),mxEvent.addListener(document,"mouseup",e),mxEvent.addListener(document,"touchend",e)},EditorUi.prototype.executeLayout=function(e,t,n){var a=this.editor.graph,i=a.getSelectionCell();t=null!=this.animate?this.animate:t,a.getModel().beginUpdate();try{e.execute(a.getDefaultParent(),i)}catch(e){throw e}finally{if(t&&navigator.userAgent.indexOf("Camino")<0){var s=new mxMorphing(a);s.addListener(mxEvent.DONE,mxUtils.bind(this,function(){a.getModel().endUpdate()})),s.startAnimation()}else a.getModel().endUpdate()}},EditorUi.prototype.createKeyHandler=function(e){var a=this.editor.graph,o=new mxKeyHandler(a);function t(e){if(!a.isSelectionEmpty()){var t=0,n=0;37==e?t=-1:38==e?n=-1:39==e?t=1:40==e&&(n=1),a.moveCells(a.getSelectionCells(),t,n),a.scrollCellToVisible(a.getSelectionCell())}}o.isControlDown=function(e){return mxEvent.isControlDown(e)||mxClient.IS_MAC&&e.metaKey};var n=mxUtils.bind(this,function(e,t,n,a){var i=this.actions.get(n);if(null!=i){var s=function(){i.enabled&&i.funct()};t?a?o.bindControlShiftKey(e,s):o.bindControlKey(e,s):a?o.bindShiftKey(e,s):o.bindKey(e,s)}});return o.enter=function(){},o.bindKey(8,function(){a.foldCells(!0)}),o.bindKey(13,function(){a.foldCells(!1)}),o.bindKey(33,function(){a.exitGroup()}),o.bindKey(34,function(){a.enterGroup()}),o.bindKey(36,function(){a.home()}),o.bindKey(35,function(){a.refresh()}),o.bindKey(37,function(){t(37)}),o.bindKey(38,function(){t(38)}),o.bindKey(39,function(){t(39)}),o.bindKey(40,function(){t(40)}),o.bindKey(113,function(){a.startEditingAtCell()}),n(46,!1,"delete"),n(82,!0,"tilt"),n(83,!0,"save"),n(83,!0,"saveAs",!0),n(107,!1,"zoomIn"),n(109,!1,"zoomOut"),n(65,!0,"selectAll"),n(86,!0,"selectVertices",!0),n(69,!0,"selectEdges",!0),n(69,!0,"export"),n(66,!0,"toBack"),n(70,!0,"toFront"),n(68,!0,"duplicate"),n(90,!0,"undo"),n(89,!0,"redo"),n(88,!0,"cut"),n(67,!0,"copy"),n(81,!0,"connect"),n(86,!0,"paste"),n(71,!0,"group"),n(71,!0,"grid",!0),n(85,!0,"ungroup"),n(112,!1,"about"),n(80,!0,"publish",!0),o},EditorUi.prototype.createMultiplicities=function(e,t,n,a){for(var i=0;i<t.length;i++)e.push(new mxMultiplicity(!0,t[i],null,null,n[i][0],n[i][1],null,mxResources.get(t[i])+mxResources.get("musthave")+n[i][0]+mxResources.get("outgoingedge"),null)),e.push(new mxMultiplicity(!1,t[i],null,null,a[i][0],a[i][1],null,mxResources.get(t[i])+mxResources.get("musthave")+a[i][0]+mxResources.get("incomingedge"),null))};var useLocalStorage=(mxClient.IS_TOUCH||"local"==urlParams.storage)&&"undefined"!=typeof localStorage,fileSupport=null!=window.File&&null!=window.FileReader&&null!=window.FileList,touchStyle=mxClient.IS_TOUCH||"1"==urlParams.touch,counter=0;try{for(var op=window;null!=op.opener&&!isNaN(op.opener.counter);)op=op.opener;null!=op&&(op.counter++,counter=op.counter)}catch(e){}function Sidebar(e,t){this.editorUi=e,this.container=t,this.palettes=new Object,this.taglist=new Object,this.showTooltips=!0,this.graph=new Graph(document.createElement("div"),null,null,this.editorUi.editor.graph.getStylesheet()),this.graph.resetViewOnRootChange=!1,this.graph.foldingEnabled=!1,this.graph.setConnectable(!1),this.graph.autoScroll=!1,this.graph.setTooltips(!1),this.graph.setEnabled(!1),this.graph.container.style.visibility="hidden",this.graph.container.style.position="absolute",this.graph.container.style.overflow="hidden",this.graph.container.style.height="1px",this.graph.container.style.width="1px",mxClient.IS_IE||mxClient.IS_IE11||(this.graph.container.style.display="none"),document.body.appendChild(this.graph.container),this.pointerUpHandler=mxUtils.bind(this,function(){this.showTooltips=!0}),mxEvent.addListener(document,mxClient.IS_POINTER?"pointerup":"mouseup",this.pointerUpHandler),this.pointerDownHandler=mxUtils.bind(this,function(){this.showTooltips=!1,this.hideTooltip()}),mxEvent.addListener(document,mxClient.IS_POINTER?"pointerdown":"mousedown",this.pointerDownHandler),this.pointerMoveHandler=mxUtils.bind(this,function(e){for(var t=mxEvent.getSource(e);null!=t;){if(t==this.currentElt)return;t=t.parentNode}this.hideTooltip()}),mxEvent.addListener(document,mxClient.IS_POINTER?"pointermove":"mousemove",this.pointerMoveHandler),this.pointerOutHandler=mxUtils.bind(this,function(e){null==e.toElement&&null==e.relatedTarget&&this.hideTooltip()}),mxEvent.addListener(document,mxClient.IS_POINTER?"pointerout":"mouseout",this.pointerOutHandler),mxEvent.addListener(t,"scroll",mxUtils.bind(this,function(){this.showTooltips=!0})),this.init(),mxClient.IS_SVG||((new Image).src=IMAGE_PATH+"/tooltip.png")}function Actions(e){this.editorUi=e,this.actions=new Object,this.init()}function Action(e,t,n,a,i){mxEventSource.call(this),this.label=e,this.funct=t,this.enabled=null==n||n,this.iconCls=a,this.shortcut=i}function Menubar(e,t){this.editorUi=e,this.container=t,mxEvent.addGestureListeners(document,mxUtils.bind(this,function(e){this.hideMenu()}))}function Menu(e,t){mxEventSource.call(this),this.funct=e,this.enabled=null==t||t}function Toolbar(e,t){this.editorUi=e,this.container=t,this.init(),mxEvent.addGestureListeners(document,mxUtils.bind(this,function(e){this.hideMenu()}))}function createCheckbox(e){var t=document.createElement("input");return t.setAttribute("type","checkbox"),e&&t.setAttribute("checked",!0),t}function createDropdownFromApi(e,n,a,i,t,s,o,r){var l=new XMLHttpRequest;l.open("GET",e,!1),l.setRequestHeader("Authorization","Bearer "+t.editor.data.token),l.send(null);var d=[];200===l.status&&(d=JSON.parse(l.response));var c=document.createElement("select"),m=document.createElement("option");return m.text="-- None --",m.value="-1",c.appendChild(m),d.rows.forEach(function(t){r&&t[a]==r||((m=document.createElement("option")).text=t[a],s&&o?(m.value=o,s.forEach(function(e){m.value=m.value.replace("%"+e+"%",t[e])}),m.selected=m.value==n):(m.value=t[i],m.selected=t[i]==n),c.appendChild(m))}),c.className="form-control select2",c}function createDropdownWithOptgroupFromApi(e,t,n,a,i,s){var o=new XMLHttpRequest;o.open("GET",e,!1),o.setRequestHeader("Authorization","Bearer "+i.editor.data.token),o.send(null);var r=[];200===o.status&&(r=JSON.parse(o.response));var l=document.createElement("select"),d=document.createElement("option");d.text="-- None --",d.value="-1",l.appendChild(d);var c=_.groupBy(r.rows,s);for(var m in c)if(c.hasOwnProperty(m)){var u=document.createElement("optgroup");u.label=_.capitalize(m),c[m].forEach(function(e){(d=document.createElement("option")).text=e[n],d.value=e[a],d.selected=e[a]==t,u.appendChild(d)}),l.appendChild(u)}return l.className="form-control select2",l}function createGroupedDropdownFromApi(e,t,n,a,i,s){var o=new XMLHttpRequest;o.open("GET",e,!1),o.setRequestHeader("Authorization","Bearer "+i.editor.data.token),o.send(null);var r=[];200===o.status&&(r=JSON.parse(o.response));var l=document.createElement("select"),d=document.createElement("option");return d.text="-- None --",d.value="0",l.appendChild(d),r.rows.forEach(function(e){(d=document.createElement("option")).className="select-group-father",d.text=e[n].toUpperCase(),d.value=e[a],d.selected=e[a]==t,l.appendChild(d),e[s].forEach(function(e){(d=document.createElement("option")).className="select-group-son",d.text="-"+_.capitalize(e[n]),d.value=e[a],d.selected=e[a]==t,l.appendChild(d)})}),l.className="form-control select2",l}function createDropdownFromArray(e,t){var n=document.createElement("select");for(var a in e){var i=document.createElement("option");i.text=e[a],i.value=a,(0<t||""!=t)&&(i.selected=t===a),n.appendChild(i)}return n.className="form-control select2",n}function createDropdownFromTigerDialList(e){var t=document.createElement("select"),n=[],a=new XMLHttpRequest;try{if(a.open("POST","/api/rest/list/list",!1),a.send(JSON.stringify({page:1,size:6e5})),200===a.status){var i=JSON.parse(a.response);if(0<i.status){var s=i.response.RMI.rows;for(var o in s)n[s[o].id]=s[o].name}}}catch(e){console.log(e)}for(var r in n){var l=document.createElement("option");l.text=n[r],l.value=r,(0<e||""!=e)&&(l.selected=e===r),t.appendChild(l)}return t.className="form-control select2",t}function Dialog(e,t,n,a,i,s,o){var r=0;mxClient.IS_IE&&9!=document.documentMode&&(r=60),n+=r,a+=r;Math.max(0,Math.round((document.body.scrollWidth-n)/2)),Math.max(0,Math.round((Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)-a)/3));var l=e.createDiv("geDialog");l.className="modal fade in center",l.style.display="block",l.style.paddingRight="12px";var d=e.createDiv("geModalDialog");d.className="modal-dialog",d.appendChild(t),l.appendChild(d),null==this.bg&&(this.bg=e.createDiv("background"),this.bg.className="modal-backdrop fade in",mxClient.IS_QUIRKS&&new mxDivResizer(this.bg)),i&&document.body.appendChild(this.bg),document.body.appendChild(l),this.onDialogClose=o,this.container=l}function ImportDialog(n){var e=n.createDiv("modal-content"),t=n.createDiv("modal-header"),a=n.createDiv("modal-body"),i=n.createDiv("modal-footer"),s=n.createHeader("h4");mxUtils.write(s,mxResources.get("import")+" XML");var o=mxUtils.button("",function(){n.hideDialog()});o.className="close",t.appendChild(o),t.appendChild(s);var r=n.createDiv("row"),l=n.createDiv("col-md-12"),d=document.createElement("textarea");d.style.width="100%",d.style.height="374px";var c=document.createElement("input");c.type="file",c.setAttribute("accept","text/xml"),c.addEventListener("change",function(e){var t=e.target.files[0];if(console.log(t),t)if("text/xml"===t.type){var n=new FileReader;n.onload=function(e){var t=e.target.result;mxUtils.write(d,t)},n.readAsText(t)}else alert("Failed to load format file");else alert("Failed to load file")},!1),l.appendChild(c),l.appendChild(d),r.appendChild(l),a.appendChild(r);var m=mxUtils.button(mxResources.get("import"),mxUtils.bind(this,function(e){var t=mxUtils.parseXml(d.value);n.editor.setGraphXml(t.documentElement),n.hideDialog()}));m.className="btn blue";var u=mxUtils.button(mxResources.get("cancel"),function(){n.hideDialog()});u.className="btn default",i.appendChild(m),i.appendChild(u),e.appendChild(t),e.appendChild(a),e.appendChild(i),this.container=e}function AboutDialog(e){var t=e.createDiv("modal-content"),n=e.createDiv("modal-header"),a=e.createDiv("modal-body"),i=e.createDiv("modal-footer"),s=e.createHeader("h4");mxUtils.write(s,mxResources.get("about")+" Cally Square");var o=mxUtils.button("",function(){e.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=document.createElement("img");r.style.border="0px",r.setAttribute("width","176"),r.setAttribute("width","151"),r.setAttribute("src",IMAGE_PATH+"/logo.png"),a.appendChild(r),mxUtils.br(a),mxUtils.write(a,"Powered by Xenialab "+mxClient.VERSION),mxUtils.br(a);var l=document.createElement("a");l.setAttribute("href","http://www.callysquare.com/"),l.setAttribute("target","_blank"),mxUtils.write(l,"www.callysquare.com"),a.appendChild(l),mxUtils.br(a),mxUtils.br(a);var d=mxUtils.button(mxResources.get("close"),function(){e.hideDialog()});d.className="btn default",i.appendChild(d),t.appendChild(n),t.appendChild(a),t.appendChild(i),this.container=t}function SaveDialog(e){var t=e.createDiv("modal-content"),n=e.createDiv("modal-header"),a=e.createDiv("modal-body"),i=e.createDiv("modal-footer"),s=e.createHeader("h4");mxUtils.write(s,mxResources.get("saveAs"));var o=mxUtils.button("",function(){e.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=e.editor.getOrCreateFilename(),l=e.createDiv("row"),d=e.createDiv("col-md-4"),c=e.createDiv("col-md-8"),m=document.createElement("label");m.className="control-label pull-right",mxUtils.write(m,mxResources.get("name")),d.appendChild(m);var u=document.createElement("input");u.setAttribute("value",r+"_copy"),u.setAttribute("id","_name"),u.className="form-control",c.appendChild(u),l.appendChild(d),l.appendChild(c),a.appendChild(l);var p=mxUtils.button(mxResources.get("save"),function(){e.saveAs(u.value),e.hideDialog()});p.className="btn blue";var g=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});g.className="btn default",i.appendChild(p),i.appendChild(g),t.appendChild(n),t.appendChild(a),t.appendChild(i),this.container=t}function NewDialog(e){var t=e.createDiv("modal-content"),n=e.createDiv("modal-header"),a=e.createDiv("modal-body"),i=e.createDiv("modal-footer"),s=e.createHeader("h4");mxUtils.write(s,mxResources.get("new"));var o=mxUtils.button("",function(){e.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=e.editor.getOrCreateFilename(),l=e.createDiv("row"),d=e.createDiv("col-md-4"),c=e.createDiv("col-md-8"),m=document.createElement("label");m.className="control-label pull-right",mxUtils.write(m,mxResources.get("name")),d.appendChild(m);var u=document.createElement("input");u.setAttribute("value",r+"_new"),u.setAttribute("id","_name"),u.className="form-control",c.appendChild(u),l.appendChild(d),l.appendChild(c),a.appendChild(l);var p=mxUtils.button(mxResources.get("new"),function(){e.new(u.value),e.hideDialog()});p.className="btn blue";var g=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});g.className="btn default",i.appendChild(p),i.appendChild(g),t.appendChild(n),t.appendChild(a),t.appendChild(i),this.container=t}function DescriptionDialog(e){console.log(e.editor.data);var t=e.createDiv("modal-content"),n=e.createDiv("modal-header"),a=e.createDiv("modal-body"),i=e.createDiv("modal-footer"),s=e.createHeader("h4");mxUtils.write(s,mxResources.get("description"));var o=mxUtils.button("",function(){e.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=e.createDiv("form-horizontal form-row-seperated"),l="description",d=e.editor.data.description||"",c=e.createDiv("form-group"),m=document.createElement("label");m.className="col-sm-4 control-label",mxUtils.write(m,mxResources.get(l)),c.appendChild(m);var u=document.createElement("input");u.setAttribute("value",d),u.className="form-control",u.setAttribute("id","_description");var p=e.createDiv("col-sm-8");p.appendChild(u),c.appendChild(p),r.appendChild(c),a.appendChild(r);var g=mxUtils.button(mxResources.get("update"),function(){e.description(u.value),e.hideDialog()});g.className="btn blue";var v=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});v.className="btn default",i.appendChild(g),i.appendChild(v),t.appendChild(n),t.appendChild(a),t.appendChild(i),this.container=t}function VariableDialog(e){var t=e.createDiv("modal-content"),n=e.createDiv("modal-header"),a=e.createDiv("modal-body"),i=e.createDiv("modal-footer"),s=e.createHeader("h4");mxUtils.write(s,mxResources.get("variable"));var o=mxUtils.button("",function(){e.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=e.createDiv("form-horizontal form-row-seperated"),l="name",d="_"+l,c="variable name",m=e.createDiv("form-group"),u=document.createElement("label");u.className="col-sm-4 control-label",mxUtils.write(u,mxResources.get(l)),m.appendChild(u);var p=document.createElement("input");p.setAttribute("value",c),p.className="form-control",p.setAttribute("id",d);var g=e.createDiv("col-sm-8");g.appendChild(p),m.appendChild(g),r.appendChild(m),d="_"+(l="description"),c="variable description",m=e.createDiv("form-group last"),(u=document.createElement("label")).className="col-sm-4 control-label",mxUtils.write(u,mxResources.get(l)),m.appendChild(u);var v=document.createElement("input");v.setAttribute("value",c),v.className="form-control",v.setAttribute("id",d),(g=e.createDiv("col-sm-8")).appendChild(v),m.appendChild(g),r.appendChild(m),a.appendChild(r);var h=mxUtils.button(mxResources.get("new"),function(){e.variable(p.value,v.value),e.hideDialog()});h.className="btn blue";var f=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});f.className="btn default",i.appendChild(h),i.appendChild(f),t.appendChild(n),t.appendChild(a),t.appendChild(i),this.container=t}function OpenDialog(e){var t=e.createDiv("modal-content"),n=e.createDiv("modal-header"),a=e.createDiv("modal-body"),i=e.createDiv("modal-footer"),s=e.createHeader("h4");mxUtils.write(s,mxResources.get("open"));var o=mxUtils.button("",function(){e.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=e.createDiv("row"),l=e.createDiv("col-md-4"),d=e.createDiv("col-md-8"),c=document.createElement("label");c.className="control-label pull-right",mxUtils.write(c,mxResources.get("name")),l.appendChild(c);var m=new XMLHttpRequest;m.open("GET","/api/square/projects",!1),m.setRequestHeader("Authorization","Bearer "+e.editor.data.token),m.send(null);var u=[];200===m.status&&(u=JSON.parse(m.response));for(var p=document.createElement("select"),g=0;g<u.length;g++){var v=document.createElement("option");v.text=u[g].name,v.value=u[g].id,p.appendChild(v)}p.className="form-control",d.appendChild(p),r.appendChild(l),r.appendChild(d),a.appendChild(r);var h=mxUtils.button(mxResources.get("open"),function(){console.log(p),console.log(p.value),window.open("square/project/"+p.value,"_blank"),e.hideDialog()});h.className="btn blue";var f=mxUtils.button(mxResources.get("cancel"),function(){e.hideDialog()});f.className="btn default",i.appendChild(h),i.appendChild(f),t.appendChild(n),t.appendChild(a),t.appendChild(i),this.container=t}function RenameDialog(n){var e=n.createDiv("modal-content"),t=n.createDiv("modal-header"),a=n.createDiv("modal-body"),i=n.createDiv("modal-footer"),s=n.createHeader("h4");mxUtils.write(s,mxResources.get("rename"));var o=mxUtils.button("",function(){n.hideDialog()});o.className="close",t.appendChild(o),t.appendChild(s);var r=n.createDiv("row"),l=n.createDiv("col-md-4"),d=n.createDiv("col-md-8"),c=document.createElement("label");c.className="control-label pull-right",mxUtils.write(c,mxResources.get("name")),l.appendChild(c);var m=n.editor.filename,u=document.createElement("input");u.setAttribute("value",m),u.className="form-control",d.appendChild(u),r.appendChild(l),r.appendChild(d),a.appendChild(r);var p=mxUtils.button(mxResources.get("save"),function(){var t=new XMLHttpRequest;t.open("PUT",SAVE_URL+n.editor.data.id,!0),t.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),t.setRequestHeader("Authorization","Bearer "+n.editor.data.token),t.send("name="+u.value),t.onload=function(e){200===t.status?(n.editor.setStatus("Project successfully renamed"),n.editor.filename=u.value):(console.log(t.response),n.editor.setStatus(JSON.parse(t.response).errors[0].message))},t.onerror=function(e){mxUtils.alert(t.statusText)},n.hideDialog()});p.className="btn blue";var g=mxUtils.button(mxResources.get("cancel"),function(){n.hideDialog()});g.className="btn default",i.appendChild(p),i.appendChild(g),e.appendChild(t),e.appendChild(a),e.appendChild(i),this.container=e}function EditFileDialog(t){var e=t.createDiv("modal-content"),n=t.createDiv("modal-header"),a=t.createDiv("modal-body"),i=t.createDiv("modal-footer"),s=t.createHeader("h4");mxUtils.write(s,mxResources.get("edit"));var o=mxUtils.button("",function(){t.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=t.createDiv("row"),l=t.createDiv("col-md-12"),d=document.createElement("textarea");if(d.style.width="100%",d.style.height="374px",d.value=mxUtils.getPrettyXml(t.editor.getGraphXml()),fileSupport){d.addEventListener("dragover",function(e){e.stopPropagation(),e.preventDefault()},!1),d.addEventListener("drop",function(e){if(e.stopPropagation(),e.preventDefault(),0<e.dataTransfer.files.length){var t=e.dataTransfer.files[0],n=new FileReader;n.onload=function(e){d.value=e.target.result},n.readAsText(t)}},!1)}l.appendChild(d),r.appendChild(l),a.appendChild(r);var c=mxUtils.button(mxResources.get("save"),function(){var e=mxUtils.parseXml(d.value);t.editor.setGraphXml(e.documentElement),t.hideDialog()});c.className="btn blue";var m=mxUtils.button(mxResources.get("cancel"),function(){t.hideDialog()});m.className="btn default",i.appendChild(c),i.appendChild(m),e.appendChild(n),e.appendChild(a),e.appendChild(i),this.container=e}function ExportDialog(t){var e=t.createDiv("modal-content"),n=t.createDiv("modal-header"),a=t.createDiv("modal-body form"),i=t.createDiv("modal-footer"),s=t.createHeader("h4");mxUtils.write(s,mxResources.get("export")+" XML");var o=mxUtils.button("",function(){t.hideDialog()});o.className="close",n.appendChild(o),n.appendChild(s);var r=t.createDiv("form-horizontal form-row-seperated"),l=t.createDiv("form-group last"),d=document.createElement("label");d.className="col-sm-4 control-label",mxUtils.write(d,mxResources.get("filename"));var c=document.createElement("input");c.setAttribute("value",t.editor.getOrCreateFilename()),c.className="form-control";var m=t.createDiv("col-sm-8");m.appendChild(c),l.appendChild(d),l.appendChild(m),r.appendChild(l),a.appendChild(r);var u=mxUtils.button(mxResources.get("export"),mxUtils.bind(this,function(e){t.save(!1);encodeURIComponent(mxUtils.getXml(t.editor.getGraphXml()));new mxXmlRequest(SAVE_URL+t.editor.data.id+"/download","filename="+c.value,"GET").simulate(document,"_blank"),t.hideDialog()}));u.className="btn blue";var p=mxUtils.button(mxResources.get("cancel"),function(){t.hideDialog()});p.className="btn default",i.appendChild(u),i.appendChild(p),e.appendChild(n),e.appendChild(a),e.appendChild(i),this.container=e}function GeneralDialog(i,s){console.log("general");var o=i.editor.graph,e=i.createDiv("md-dialog"),t=i.createDiv("md-toolbar"),n=i.createDiv("md-dialog-content"),a=i.createDiv("md-dialog-actions"),r=i.createHeader("h4");mxUtils.write(r,mxResources.get("edit")+" "+mxResources.get(s.value.nodeName));var l=mxUtils.button("",function(){i.hideDialog()});l.className="close",t.appendChild(l),t.appendChild(r);for(var d=s.value.attributes.length,c=i.createDiv("form-horizontal form-row-seperated"),m=0;m<d;m++){var u,p=s.value.attributes[m].name,g="_"+p,v=s.value.attributes[m].value,h=i.createDiv(m==d-1?"form-group last":"form-group"),f=document.createElement("label");switch(f.className="col-sm-4 control-label",mxUtils.write(f,mxResources.get(p)),h.appendChild(f),p){case"sip_id":u=createDropdownWithOptgroupFromApi("/api/users/all",v,"fullname","id",i,"role");break;case"queue_id":u=createDropdownFromApi("/api/voice/queues",v,"name","name",i);break;case"trunk_name":u=createDropdownFromApi("/api/trunks",v,"name","name",i);break;case"variable_id":u=createDropdownFromApi("/api/variables",v,"name","id",i);break;case"account_id":u="sendMail"==s.value.nodeName?createDropdownFromApi("/api/mail/servers/out",v,"username","id",i):createDropdownFromApi("/api/sms/accounts",v,"name","id",i);break;case"template_id":u=createDropdownFromApi("/api/templates",v,"name","id",i);break;case"context":u=createDropdownFromApi("/api/voice/contexts",v,"name","name",i);break;case"mailbox":u=createDropdownFromApi("/api/voice/voicemails",v,"mailbox","id",i,["mailbox","context"],"%mailbox%@%context%");break;case"model":u=createDropdownFromArray(ISPEECHASRMODEL,v);break;case"ispeech_asr_language":u=createDropdownFromArray(ISPEECHASRLANG,v);break;case"beep":u=createDropdownFromArray(ISPEECHBEEP,v);break;case"hiddendigitspos":u=createDropdownFromArray(SECRETDIGITSPOS,v);break;case"ispeech_tts_language":u=createDropdownFromArray(ISPEECHLANG,v);break;case"google_tts_language":u=createDropdownFromArray(GOOGLETTSLANG,v);break;case"intKey":u=createDropdownFromArray(ASRINTKEYS,v);break;case"recordingFormat":u=createDropdownFromArray(RECORDINGFORMAT,v);break;case"answer":u=createDropdownFromArray(BOOLSELECT,v);break;case"list_id":u=createDropdownFromTigerDialList(v);break;case"interval_id":u=createGroupedDropdownFromApi("/api/intervals",v,"name","id",i,"SubIntervals");break;case"project_id":u=createDropdownFromApi("/api/square/projects",v,"name","id",i,null,null,i.editor.getOrCreateFilename());break;case"odbc_id":u=createDropdownFromApi("/api/square/odbc",v,"name","id",i);break;case"file_id":u=createDropdownFromApi("/api/sounds",v,"display_name","id",i);break;case"timeout":case"digit":case"mindigit":case"maxdigit":case"response":case"retry":case"speed":(u=document.createElement("input")).setAttribute("type","number"),u.setAttribute("min",0),u.setAttribute("max",1e3),u.setAttribute("value",v),u.className="form-control";break;case"text":case"key":case"query":case"condition":case"command":case"body":(u=document.createElement("textarea")).innerHTML=v,u.className="form-control";break;case"sms_text":(u=document.createElement("textarea")).innerHTML=v,u.className="form-control",u.setAttribute("maxlength","160");break;default:(u=document.createElement("input")).setAttribute("value",v),u.className="form-control"}u.setAttribute("id",g);var b=i.createDiv("col-sm-8");if(b.appendChild(u),mxResources.get("help_"+p)){var A=i.createDiv("p");A.className="help-block",mxUtils.write(A,mxResources.get("help_"+p)),b.appendChild(A)}h.appendChild(b),c.appendChild(h)}n.appendChild(c);var E=mxUtils.button(mxResources.get("save"),mxUtils.bind(this,function(e){for(var t=0;t<s.value.attributes.length;t++){var n="_"+s.value.attributes[t].name,a=s.value.attributes[t].name;s.setAttribute(a,document.getElementById(n).value)}o.refresh(s),i.hideDialog()}));E.className="btn blue";var y=mxUtils.button(mxResources.get("cancel"),function(){i.hideDialog()});y.className="btn default",a.appendChild(E),a.appendChild(y),e.appendChild(t),e.appendChild(n),e.appendChild(a),this.container=e}Editor=function(){mxEventSource.call(this),this.init(),this.initStencilRegistry(),this.graph=new Graph,this.outline=new mxOutline(this.graph),this.outline.updateOnPan=!0,this.undoManager=this.createUndoManager(),this.status="",this.filename=null,this.getOrCreateFilename=function(){return this.filename||mxResources.get("drawing",[counter])+".xml"},this.getFilename=function(){return this.filename},this.setStatus=function(e){this.status=e,this.fireEvent(new mxEventObject("statusChanged"))},this.getStatus=function(){return this.status},this.modified=!1,this.graphChangeListener=function(){this.modified=!0},this.graph.getModel().addListener(mxEvent.CHANGE,mxUtils.bind(this,function(){this.graphChangeListener.apply(this,arguments)})),window.onbeforeunload=mxUtils.bind(this,function(){if(this.modified)return mxResources.get("allChangesLost")}),this.graph.resetViewOnRootChange=!1,this.graph.scrollbars=!0,this.graph.background=null},mxUtils.extend(Editor,mxEventSource),Editor.prototype.gridImage=IMAGE_PATH+"/grid.gif",Editor.prototype.transparentImage=IMAGE_PATH+"/transparent.gif",Editor.prototype.setGraphXml=function(e){var t=new mxCodec(e.ownerDocument);if("mxGraphModel"==e.nodeName){this.graph.view.scale=Number(e.getAttribute("scale")||1),this.graph.gridEnabled="0"!=e.getAttribute("grid"),this.graph.graphHandler.guidesEnabled="0"!=e.getAttribute("guides"),this.graph.setTooltips("0"!=e.getAttribute("tooltips")),this.graph.setConnectable("0"!=e.getAttribute("connect")),this.graph.foldingEnabled="0"!=e.getAttribute("fold"),this.graph.scrollbars="0"!=e.getAttribute("scrollbars"),this.graph.scrollbars||(this.graph.container.scrollLeft=0,this.graph.container.scrollTop=0,this.graph.view.translate.x=Number(e.getAttribute("dx")||0),this.graph.view.translate.y=Number(e.getAttribute("dy")||0)),this.graph.pageVisible="1"==e.getAttribute("page"),this.graph.pageBreaksVisible=this.graph.pageVisible,this.graph.preferPageSize=this.graph.pageBreaksVisible;var n=e.getAttribute("pageScale");this.graph.pageScale=null!=n?n:1.5;var a=e.getAttribute("pageWidth"),i=e.getAttribute("pageHeight");null!=a&&null!=i&&(this.graph.pageFormat=new mxRectangle(0,0,parseFloat(a),parseFloat(i)),this.outline.outline.pageFormat=this.graph.pageFormat);var s=e.getAttribute("background");null!=s&&0<s.length&&(this.graph.background=s),t.decode(e,this.graph.getModel()),this.updateGraphComponents()}},Editor.prototype.getGraphXml=function(){var e=new mxCodec(mxUtils.createXmlDocument()).encode(this.graph.getModel());return 0==this.graph.view.translate.x&&0==this.graph.view.translate.y||(e.setAttribute("dx",Math.round(100*this.graph.view.translate.x)/100),e.setAttribute("dy",Math.round(100*this.graph.view.translate.y)/100)),1!=this.graph.view.scale&&e.setAttribute("scale",Math.round(1e3*this.graph.view.scale)/1e3),e.setAttribute("grid",this.graph.isGridEnabled()?"1":"0"),e.setAttribute("guides",this.graph.graphHandler.guidesEnabled?"1":"0"),e.setAttribute("guides",this.graph.graphHandler.guidesEnabled?"1":"0"),e.setAttribute("tooltips",this.graph.tooltipHandler.isEnabled()?"1":"0"),e.setAttribute("connect",this.graph.connectionHandler.isEnabled()?"1":"0"),e.setAttribute("fold",this.graph.foldingEnabled?"1":"0"),e.setAttribute("page",this.graph.pageVisible?"1":"0"),e.setAttribute("pageScale",this.graph.pageScale),e.setAttribute("pageWidth",this.graph.pageFormat.width),e.setAttribute("pageHeight",this.graph.pageFormat.height),this.graph.scrollbars||e.setAttribute("scrollbars","0"),null!=this.graph.background&&e.setAttribute("background",this.graph.background),e},Editor.prototype.updateGraphComponents=function(){var e=this.graph,t=this.outline;if(null!=e.container&&null!=t.outline.container){null!=e.background?"none"==e.background?e.container.style.backgroundColor="transparent":(null!=e.view.backgroundPageShape&&(e.view.backgroundPageShape.fill=e.background,e.view.backgroundPageShape.reconfigure()),e.container.style.backgroundColor=e.background):e.container.style.backgroundColor="",e.pageVisible?(e.container.style.backgroundColor="#ebebeb",e.container.style.borderStyle="solid",e.container.style.borderColor="#e5e5e5",e.container.style.borderTopWidth="1px",e.container.style.borderLeftWidth="1px",e.container.style.borderRightWidth="0px",e.container.style.borderBottomWidth="0px"):e.container.style.border="",t.outline.container.style.backgroundColor=e.container.style.backgroundColor,t.outline.pageVisible==e.pageVisible&&t.outline.pageScale==e.pageScale||(t.outline.pageScale=e.pageScale,t.outline.pageVisible=e.pageVisible,t.outline.view.validate()),e.scrollbars&&"hidden"==e.container.style.overflow&&!touchStyle?e.container.style.overflow="auto":e.scrollbars&&!touchStyle||(e.container.style.overflow="hidden");var n=mxClient.IS_IE&&9<=document.documentMode?"url("+this.transparentImage+")":"none";e.container.style.backgroundImage=!e.pageVisible&&e.isGridEnabled()?"url("+this.gridImage+")":n,null!=e.view.backgroundPageShape&&(e.view.backgroundPageShape.node.style.backgroundImage=this.graph.isGridEnabled()?"url("+this.gridImage+")":"none")}},Editor.prototype.init=function(){mxClient.IS_IE6&&mxClient.link("stylesheet",CSS_PATH+"/grapheditor-ie6.css"),mxResources.loadDefaultBundle=!1,mxResources.add(RESOURCE_BASE),mxConstants.DEFAULT_HOTSPOT=.3;var e=mxConnectionHandler.prototype.createMarker;mxConnectionHandler.prototype.createMarker=function(){var n=e.apply(this,arguments);return n.intersects=mxUtils.bind(this,function(e,t){return!!this.isConnecting()||mxCellMarker.prototype.intersects.apply(n,arguments)}),n},mxConstants.SHADOWCOLOR="#d0d0d0",mxConstants.HANDLE_FILLCOLOR="#99ccff",mxConstants.HANDLE_STROKECOLOR="#0088cf",mxConstants.VERTEX_SELECTION_COLOR="#00a8ff",mxConstants.OUTLINE_COLOR="#00a8ff",mxConstants.OUTLINE_HANDLE_FILLCOLOR="#99ccff",mxConstants.OUTLINE_HANDLE_STROKECOLOR="#00a8ff",mxConstants.CONNECT_HANDLE_FILLCOLOR="#cee7ff",mxConstants.EDGE_SELECTION_COLOR="#00a8ff",mxConstants.DEFAULT_VALID_COLOR="#00a8ff",mxConstants.LABEL_HANDLE_FILLCOLOR="#cee7ff",mxConstants.GUIDE_COLOR="#0088cf",mxGraph.prototype.pageBreakColor="#c0c0c0",mxGraph.prototype.pageScale=1,mxRubberband.prototype.defaultOpacity=30,mxGraphView.prototype.createBackgroundPageShape=function(e){return new mxRectangleShape(e,this.graph.background||"white","#cacaca")},mxGraphView.prototype.getBackgroundPageBounds=function(){var e=this.getGraphBounds(),t=0<e.width?e.x/this.scale-this.translate.x:0,n=0<e.height?e.y/this.scale-this.translate.y:0,a=e.width/this.scale,i=e.height/this.scale,s=this.graph.pageFormat,o=this.graph.pageScale,r=s.width*o,l=s.height*o,d=Math.floor(Math.min(0,t)/r),c=Math.floor(Math.min(0,n)/l),m=Math.ceil(Math.max(1,t+a)/r)-d,u=Math.ceil(Math.max(1,n+i)/l)-c;return new mxRectangle(this.scale*(this.translate.x+d*r),this.scale*(this.translate.y+c*l),this.scale*m*r,this.scale*u*l)};var n=mxGraph.prototype.panGraph;mxGraph.prototype.panGraph=function(e,t){n.apply(this,arguments),this.dialect==mxConstants.DIALECT_SVG||null==this.view.backgroundPageShape||this.useScrollbarsForPanning&&mxUtils.hasScrollbars(this.container)||(this.view.backgroundPageShape.node.style.marginLeft=e+"px",this.view.backgroundPageShape.node.style.marginTop=t+"px")};var a=this;mxGraphView.prototype.validateBackground=function(){var e=this.graph.getBackgroundImage();if(null!=e){if(null==this.backgroundImage||this.backgroundImage.image!=e.src){null!=this.backgroundImage&&this.backgroundImage.destroy();var t=new mxRectangle(0,0,1,1);this.backgroundImage=new mxImageShape(t,e.src),this.backgroundImage.dialect=this.graph.dialect,this.backgroundImage.init(this.backgroundPane),this.backgroundImage.redraw()}this.redrawBackgroundImage(this.backgroundImage,e)}else null!=this.backgroundImage&&(this.backgroundImage.destroy(),this.backgroundImage=null);if(this.graph.pageVisible){t=this.getBackgroundPageBounds();null==this.backgroundPageShape?(this.backgroundPageShape=this.createBackgroundPageShape(t),this.backgroundPageShape.scale=1,this.backgroundPageShape.isShadow=!0,this.backgroundPageShape.dialect=mxConstants.DIALECT_STRICTHTML,this.backgroundPageShape.init(this.graph.container),this.graph.container.firstChild.style.position="absolute",this.graph.container.insertBefore(this.backgroundPageShape.node,this.graph.container.firstChild),this.backgroundPageShape.redraw(),this.backgroundPageShape.node.className="geBackgroundPage",this.backgroundPageShape.node.style.backgroundPosition="-1px -1px",mxEvent.addListener(this.backgroundPageShape.node,"dblclick",mxUtils.bind(this,function(e){this.graph.dblClick(e)})),mxEvent.addGestureListeners(this.backgroundPageShape.node,mxUtils.bind(this,function(e){this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(e))}),mxUtils.bind(this,function(e){null!=this.graph.tooltipHandler&&this.graph.tooltipHandler.isHideOnHover()&&this.graph.tooltipHandler.hide(),this.graph.isMouseDown&&!mxEvent.isConsumed(e)&&this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(e))}),mxUtils.bind(this,function(e){this.graph.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(e))}))):(this.backgroundPageShape.scale=1,this.backgroundPageShape.bounds=t,this.backgroundPageShape.redraw()),this.backgroundPageShape.node.style.backgroundImage=this.graph.isGridEnabled()?"url("+a.gridImage+")":"none"}else null!=this.backgroundPageShape&&(this.backgroundPageShape.destroy(),this.backgroundPageShape=null)},mxGraph.prototype.updatePageBreaks=function(e,t,n){var a=this.view.scale,i=this.view.translate,s=this.pageFormat,o=a*this.pageScale,r=this.view.getBackgroundPageBounds();t=r.width,n=r.height;var l=new mxRectangle(a*i.x,a*i.y,s.width*o,s.height*o),d=(e=e&&Math.min(l.width,l.height)>this.minPageBreakDist)?Math.ceil(t/l.width)-1:0,c=e?Math.ceil(n/l.height)-1:0,m=r.x+t,u=r.y+n;if(null==this.horizontalPageBreaks&&0<d&&(this.horizontalPageBreaks=[]),null!=this.horizontalPageBreaks){for(var p=0;p<=d;p++){var g=[new mxPoint(r.x+(p+1)*l.width,r.y),new mxPoint(r.x+(p+1)*l.width,u)];if(null!=this.horizontalPageBreaks[p])this.horizontalPageBreaks[p].scale=1,this.horizontalPageBreaks[p].points=g,this.horizontalPageBreaks[p].redraw();else(v=new mxPolyline(g,this.pageBreakColor,this.scale)).dialect=this.dialect,v.isDashed=this.pageBreakDashed,v.addPipe=!1,v.scale=a,v.init(this.view.backgroundPane),v.redraw(),this.horizontalPageBreaks[p]=v}for(p=d;p<this.horizontalPageBreaks.length;p++)this.horizontalPageBreaks[p].destroy();this.horizontalPageBreaks.splice(d,this.horizontalPageBreaks.length-d)}if(null==this.verticalPageBreaks&&0<c&&(this.verticalPageBreaks=[]),null!=this.verticalPageBreaks){for(p=0;p<=c;p++){var v;g=[new mxPoint(r.x,r.y+(p+1)*l.height),new mxPoint(m,r.y+(p+1)*l.height)];if(null!=this.verticalPageBreaks[p])this.verticalPageBreaks[p].scale=1,this.verticalPageBreaks[p].points=g,this.verticalPageBreaks[p].redraw();else(v=new mxPolyline(g,this.pageBreakColor,a)).dialect=this.dialect,v.isDashed=this.pageBreakDashed,v.addPipe=!1,v.scale=a,v.init(this.view.backgroundPane),v.redraw(),this.verticalPageBreaks[p]=v}for(p=c;p<this.verticalPageBreaks.length;p++)this.verticalPageBreaks[p].destroy();this.verticalPageBreaks.splice(c,this.verticalPageBreaks.length-c)}},mxEdgeHandler.prototype.snapToTerminals=!0,mxGraphHandler.prototype.guidesEnabled=!0;var s=mxGraphHandler.prototype.shouldRemoveCellsFromParent;mxGraphHandler.prototype.shouldRemoveCellsFromParent=function(e,t,n){for(var a=0;a<t.length;a++)if(this.graph.getModel().isVertex(t[a])){var i=this.graph.getCellGeometry(t[a]);if(null!=i&&i.relative)return!1}return s.apply(this,arguments)},mxGuide.prototype.isEnabledForEvent=function(e){return!mxEvent.isAltDown(e)};var r=mxPopupMenu.prototype.addItem;mxPopupMenu.prototype.addItem=function(e,t,n,a,i,s){var o=r.apply(this,arguments);return null==s||s||mxEvent.addListener(o,"mousedown",function(e){mxEvent.consume(e)}),o};var o=mxGraphHandler.prototype.getInitialCellForEvent;mxGraphHandler.prototype.getInitialCellForEvent=function(e){var t=this.graph.getModel(),n=t.getParent(this.graph.getSelectionCell()),a=o.apply(this,arguments),i=t.getParent(a);if(null==n||n!=a&&n!=i)for(;!this.graph.isCellSelected(a)&&!this.graph.isCellSelected(i)&&t.isVertex(i)&&!this.graph.isValidRoot(i);)a=i,i=this.graph.getModel().getParent(a);return a};var l=mxGraphHandler.prototype.isDelayedSelection;mxGraphHandler.prototype.isDelayedSelection=function(e){var t=l.apply(this,arguments),n=this.graph.getModel(),a=n.getParent(this.graph.getSelectionCell()),i=n.getParent(e);return(null==a||a!=e&&a!=i)&&(this.graph.isCellSelected(e)||!n.isVertex(i)||this.graph.isValidRoot(i)||(t=!0)),t},mxGraphHandler.prototype.selectDelayed=function(e){var t=e.getCell();null==t&&(t=this.cell);for(var n=this.graph.getModel(),a=n.getParent(t);this.graph.isCellSelected(t)&&n.isVertex(a)&&!this.graph.isValidRoot(a);)t=a,a=n.getParent(t);this.graph.selectCellForEvent(t,e.getEvent())},mxPanningHandler.prototype.getCellForPopupEvent=function(e){for(var t=e.getCell(),n=this.graph.getModel(),a=n.getParent(t);n.isVertex(a)&&!this.graph.isValidRoot(a);)this.graph.isCellSelected(a)&&(t=a),a=n.getParent(a);return t}},Editor.prototype.createUndoManager=function(){var s=this.graph,n=new mxUndoManager,e=function(e,t){n.undoableEditHappened(t.getProperty("edit"))};s.getModel().addListener(mxEvent.UNDO,e),s.getView().addListener(mxEvent.UNDO,e);var t=function(e,t){for(var n=s.getSelectionCellsForChanges(t.getProperty("edit").changes),a=[],i=1;i<n.length;i++)null!=s.view.getState(n[i])&&a.push(n[i]);s.setSelectionCells(a)};return n.addListener(mxEvent.UNDO,t),n.addListener(mxEvent.REDO,t),n},Editor.prototype.initStencilRegistry=function(){mxStencilRegistry.loadStencilSet(STENCIL_PATH+"/general.xml")},mxStencilRegistry.libraries={},mxStencilRegistry.packages=[],mxStencilRegistry.getStencil=function(e){var t=mxStencilRegistry.stencils[e];if(null==t){var n=mxStencilRegistry.getBasenameForStencil(e);if(null!=n){var a=mxStencilRegistry.libraries[n];if(null!=a){if(null==mxStencilRegistry.packages[n]){mxStencilRegistry.packages[n]=1;for(var i=0;i<a.length;i++){var s=a[i];if(".xml"==s.toLowerCase().substring(s.length-4,s.length))mxStencilRegistry.loadStencilSet(s,null);else if(".js"==s.toLowerCase().substring(s.length-3,s.length)){var o=mxUtils.load(s);null!=o&&eval.call(window,o.getText())}}}}else mxStencilRegistry.loadStencilSet(STENCIL_PATH+"/"+n+".xml",null);t=mxStencilRegistry.stencils[e]}}return t},mxStencilRegistry.getBasenameForStencil=function(e){var t=e.split("."),n=null;if(0<t.length&&"mxgraph"==t[0]){n=t[1];for(var a=2;a<t.length-1;a++)n+="/"+t[a]}return n},mxStencilRegistry.loadStencilSet=function(e,t,n){n=null!=n&&n;var a=mxStencilRegistry.packages[e];if(n||null==a){var i=!1;null==a&&(a=mxUtils.load(e).getXml(),mxStencilRegistry.packages[e]=a,i=!0),mxStencilRegistry.parseStencilSet(a,t,i)}},mxStencilRegistry.parseStencilSet=function(e,t,n){n=null==n||n;var a=e.documentElement,i=a.firstChild,s="",o=a.getAttribute("name");for(null!=o&&(s=o+".");null!=i;){if(i.nodeType==mxConstants.NODETYPE_ELEMENT&&null!=(o=i.getAttribute("name"))){s=s.toLowerCase();var r=o.replace(/ /g,"_");if(n&&mxStencilRegistry.addStencil(s+r.toLowerCase(),new mxStencil(i)),null!=t){var l=i.getAttribute("w"),d=i.getAttribute("h");t(s,r,o,l=null==l?80:parseInt(l,10),d=null==d?80:parseInt(d,10))}}i=i.nextSibling}},OpenFile=function(e){this.producer=null,this.consumer=null,this.done=e},OpenFile.prototype.setConsumer=function(e){this.consumer=e,this.execute()},OpenFile.prototype.setData=function(e,t){this.data=e,this.filename=t,this.execute()},OpenFile.prototype.error=function(e){this.cancel(),mxUtils.alert(e)},OpenFile.prototype.execute=function(){null!=this.consumer&&null!=this.data&&(this.consumer(this.data,this.filename),this.cancel())},OpenFile.prototype.cancel=function(){null!=this.done&&this.done()},Sidebar.prototype.init=function(){var e=STENCIL_PATH;this.addSearchPalette(!0),this.addImagePalette("entry",mxResources.get("entry"),e+"/entry/","_128x128.png",["start","finally","end"],[mxResources.get("start"),mxResources.get("finally"),mxResources.get("end")]),this.addImagePalette("call_management",mxResources.get("call_management"),e+"/call_management/","_128x128.png",["answer","hangup","dial","ext_dial","queue","voicemail","callback"],[mxResources.get("answer"),mxResources.get("hangup"),mxResources.get("dial"),mxResources.get("ext_dial"),mxResources.get("queue"),mxResources.get("voicemail"),mxResources.get("callback")]),this.addImagePalette("agent_management",mxResources.get("agent_management"),e+"/agent_management/","_128x128.png",["login","pause","unpause","logout"],[mxResources.get("login"),mxResources.get("pause"),mxResources.get("unpause"),mxResources.get("logout")]),this.addImagePalette("variable",mxResources.get("variable"),e+"/variable/","_128x128.png",["set","math"],[mxResources.get("set"),mxResources.get("math")]),this.addImagePalette("playback",mxResources.get("playback"),e+"/playback/","_128x128.png",["playback","menu","saydigits","saynumber","sayphonetic","getdigits","getsecretdigits"],[mxResources.get("playback"),mxResources.get("menu"),mxResources.get("saydigits"),mxResources.get("saynumber"),mxResources.get("sayphonetic"),mxResources.get("getdigits"),mxResources.get("getsecretdigits")]),this.addImagePalette("recording",mxResources.get("recording"),e+"/recording/","_128x128.png",["record"],[mxResources.get("record")]),this.addImagePalette("tts","TTS",e+"/tts/","_128x128.png",["tts","ispeechtts","awspolly","lumenvoxtts","sestektts"],["GoogleTTS","ISpeechTTS","AWSPolly","LumenvoxTTS","SestekTTS"]),this.addImagePalette("asr","ASR",e+"/asr/","_128x128.png",["googleasr","ispeechasr","lumenvoxasr","tildeasr","sestekasr"],["GoogleASR","ISpeechASR","LumenvoxASR","TildeASR","SestekASR"]),this.addImagePalette("integrationServer",mxResources.get("integrationServer"),e+"/integration_server/","_128x128.png",["database","sendMail","sendSMS","dialogflow","awslex","sesteknda"],[mxResources.get("database"),mxResources.get("sendMail"),mxResources.get("sendSMS"),"Dialogflow","AWSLex","SestekNDA"]),this.addImagePalette("callflow",mxResources.get("callflow"),e+"/callflow/","_128x128.png",["gotoc","gotoif","gotoiftime","vswitch"],[mxResources.get("gotoc"),mxResources.get("gotoif"),mxResources.get("gotoiftime"),mxResources.get("vswitch")]),this.addImagePalette("stats",mxResources.get("stats"),e+"/stats/","_128x128.png",["goal"],[mxResources.get("goal")]),this.addImagePalette("general",mxResources.get("general"),e+"/general/","_128x128.png",["noop","system","agi","subproject","custom_app"],[mxResources.get("noop"),mxResources.get("system"),mxResources.get("agi"),mxResources.get("subproject"),mxResources.get("custom_app")])},Sidebar.prototype.collapsedImage=mxClient.IS_SVG?"data:image/gif;base64,R0lGODlhDQANAIABAJmZmf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozNUQyRTJFNjZGNUYxMUU1QjZEOThCNDYxMDQ2MzNCQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozNUQyRTJFNzZGNUYxMUU1QjZEOThCNDYxMDQ2MzNCQiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjFERjc3MEUxNkY1RjExRTVCNkQ5OEI0NjEwNDYzM0JCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjFERjc3MEUyNkY1RjExRTVCNkQ5OEI0NjEwNDYzM0JCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAAAQAsAAAAAA0ADQAAAhSMj6lrwAjcC1GyahV+dcZJgeIIFgA7":IMAGE_PATH+"/collapsed.gif",Sidebar.prototype.expandedImage=mxClient.IS_SVG?"data:image/gif;base64,R0lGODlhDQANAIABAJmZmf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxREY3NzBERjZGNUYxMUU1QjZEOThCNDYxMDQ2MzNCQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxREY3NzBFMDZGNUYxMUU1QjZEOThCNDYxMDQ2MzNCQiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjFERjc3MERENkY1RjExRTVCNkQ5OEI0NjEwNDYzM0JCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjFERjc3MERFNkY1RjExRTVCNkQ5OEI0NjEwNDYzM0JCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAAAQAsAAAAAA0ADQAAAhGMj6nL3QAjVHIu6azbvPtWAAA7":IMAGE_PATH+"/expanded.gif",Sidebar.prototype.tooltipImage=mxClient.IS_SVG?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAbCAMAAAB7jU7LAAAACVBMVEX///+ZmZn///9Y2COLAAAAA3RSTlP//wDXyg1BAAAAOElEQVR42mXQMQ4AMAgDsWv//+iutcJmIQSk+9dJpVKpVCqVSqVSqZTdncWzF8/NeP7FkxWenPEDOnUBiL3jWx0AAAAASUVORK5CYII=":IMAGE_PATH+"/tooltip.png",Sidebar.prototype.searchImage=mxClient.IS_SVG?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAEaSURBVHjabNGxS5VxFIfxz71XaWuQUJCG/gCHhgTD9VpEETg4aMOlQRp0EoezObgcd220KQiXmpretTAHQRBdojlQEJyukPdt+b1ywfvAGc7wnHP4nlZd1yKijQW8xzNc4Su+ZOYfQ3T6/f4YNvEJYzjELXp4VVXVz263+7cR2niBxAFeZ2YPi3iHR/gYERPDwhpOsd6sz8x/mfkNG3iOlWFhFj8y89J9KvzGXER0GuEaD42mgwHqUtoljbcRsTBCeINpfM/MgZLKPpaxFxGbOCqDXmILN7hoJrTKH+axhxmcYRxP0MIDnOBDZv5q1XUNIuJxifJp+UNV7t7BFM6xeic0RMQ4Bpl5W/ol7GISx/eEUUTECrbx+f8A8xhiZht9zsgAAAAASUVORK5CYII=":IMAGE_PATH+"/search.png",Sidebar.prototype.enableTooltips=!0,Sidebar.prototype.tooltipBorder=16,Sidebar.prototype.tooltipDelay=300,Sidebar.prototype.dropTargetDelay=200,Sidebar.prototype.thumbWidth=36,Sidebar.prototype.thumbHeight=36,Sidebar.prototype.thumbPadding=5<=document.documentMode?0:1,Sidebar.prototype.thumbBorder=2,Sidebar.prototype.sidebarTitleSize=9,Sidebar.prototype.sidebarTitles=!1,Sidebar.prototype.tooltipTitles=!0,Sidebar.prototype.maxTooltipWidth=400,Sidebar.prototype.maxTooltipHeight=400,Sidebar.prototype.addStencilsToIndex=!0,Sidebar.prototype.defaultImageWidth=80,Sidebar.prototype.defaultImageHeight=80,Sidebar.prototype.getOffset=function(e){return{left:(e=e.getBoundingClientRect()).left+window.scrollX,top:e.top+window.scrollY}},Sidebar.prototype.showTooltip=function(c,m,u,p,g,v){if(this.enableTooltips&&this.showTooltips&&this.currentElt!=c){null!=this.thread&&(window.clearTimeout(this.thread),this.thread=null);var e=mxUtils.bind(this,function(){null==this.tooltip&&(this.tooltip=document.createElement("div"),this.tooltip.className="geSidebarTooltip",this.tooltip.style.zIndex=mxPopupMenu.prototype.zIndex-1,document.body.appendChild(this.tooltip),this.graph2=new Graph(this.tooltip,null,null,this.editorUi.editor.graph.getStylesheet()),this.graph2.resetViewOnRootChange=!1,this.graph2.foldingEnabled=!1,this.graph2.gridEnabled=!1,this.graph2.autoScroll=!1,this.graph2.setTooltips(!1),this.graph2.setConnectable(!1),this.graph2.setEnabled(!1),mxClient.IS_SVG||(this.graph2.view.canvas.style.position="relative"),this.tooltipImage=mxUtils.createImage(this.tooltipImage),this.tooltipImage.className="geSidebarTooltipImage",this.tooltipImage.style.zIndex=mxPopupMenu.prototype.zIndex-1,this.tooltipImage.style.position="absolute",this.tooltipImage.style.width="14px",this.tooltipImage.style.height="27px",document.body.appendChild(this.tooltipImage)),this.graph2.model.clear(),this.graph2.view.setTranslate(this.tooltipBorder,this.tooltipBorder),u>this.maxTooltipWidth||p>this.maxTooltipHeight?this.graph2.view.scale=Math.round(100*Math.min(this.maxTooltipWidth/u,this.maxTooltipHeight/p))/100:this.graph2.view.scale=1,this.tooltip.style.display="block",this.graph2.labelsVisible=null==v||v,this.graph2.addCells(m);var e=this.graph2.getGraphBounds(),t=e.width+2*this.tooltipBorder+4,n=e.height+2*this.tooltipBorder;if(mxClient.IS_QUIRKS?(n+=4,this.tooltip.style.overflow="hidden"):this.tooltip.style.overflow="visible",this.tooltipImage.style.visibility="visible",this.tooltip.style.width=t+"px",this.tooltipTitles&&null!=g&&0<g.length){null==this.tooltipTitle?(this.tooltipTitle=document.createElement("div"),this.tooltipTitle.style.borderTop="1px solid gray",this.tooltipTitle.style.textAlign="center",this.tooltipTitle.style.width="100%",this.tooltipTitle.style.overflow="hidden",mxClient.IS_SVG||(this.tooltipTitle.style.position="absolute"),this.tooltipTitle.style.paddingTop="6px",this.tooltip.appendChild(this.tooltipTitle)):this.tooltipTitle.innerHTML="",this.tooltipTitle.style.display="",mxUtils.write(this.tooltipTitle,g);var a=this.tooltipTitle.offsetHeight+10;n+=a,mxClient.IS_SVG?this.tooltipTitle.style.marginTop=2-a+"px":(n-=6,this.tooltipTitle.style.top=n-a+"px")}else null!=this.tooltipTitle&&null!=this.tooltipTitle.parentNode&&(this.tooltipTitle.style.display="none");this.tooltip.style.height=n+"px";var i=-Math.round(e.x-this.tooltipBorder),s=-Math.round(e.y-this.tooltipBorder),o=document.body,r=document.documentElement,l=(o.clientHeight||r.clientHeight,document.getElementById("vertical-navigation").offsetWidth+this.container.clientWidth),d=Math.max(0,this.getOffset(c).top-this.container.scrollTop-n/2+16);mxClient.IS_SVG?0!=i||0!=s?this.graph2.view.canvas.setAttribute("transform","translate("+i+","+s+")"):this.graph2.view.canvas.removeAttribute("transform"):(this.graph2.view.drawPane.style.left=i+"px",this.graph2.view.drawPane.style.top=s+"px"),this.tooltip.style.position="absolute",this.tooltip.style.left=l+"px",this.tooltip.style.top=d+"px",this.tooltipImage.style.left=l-13+"px",this.tooltipImage.style.top=d+n/2-13+"px"});null!=this.tooltip&&"none"!=this.tooltip.style.display?e():this.thread=window.setTimeout(e,this.tooltipDelay),this.currentElt=c}},Sidebar.prototype.hideTooltip=function(){null!=this.thread&&(window.clearTimeout(this.thread),this.thread=null),null!=this.tooltip&&(this.tooltip.style.display="none",this.tooltipImage.style.visibility="hidden",this.currentElt=null)},Sidebar.prototype.addEntry=function(e,t){if(null!=this.taglist&&null!=e&&0<e.length)for(var n=e.toLowerCase().replace(/[\/\,\(\)]/g," ").split(" "),a=0;a<n.length;a++)if(n[a]=n[a].replace(/\.*\d*$/,""),1<n[a].length){var i=this.taglist[n[a]];null==i&&(i={entries:[],dict:new mxDictionary},this.taglist[n[a]]=i),null==i.dict.get(t)&&(i.dict.put(t,t),i.entries.push(t))}return t},Sidebar.prototype.searchEntries=function(e,t,n,a,i){if(null!=this.taglist&&null!=e){for(var s=e.toLowerCase().split(" "),o=new mxDictionary,r=(n+1)*t,l=[],d=0,c=0;c<s.length;c++)if(0<s[c].length){var m=this.taglist[s[c]],u=new mxDictionary;if(null!=m){var p=m.entries;l=[];for(var g=0;g<p.length;g++){m=p[g];if(0==d==(null==o.get(m))&&(u.put(m,m),l.push(m),c==s.length-1&&l.length==r))return void a(l.slice(n*t,r),r,!0)}}else l=[];o=u,d++}var v=l.length;a(l.slice(n*t,(n+1)*t),v,!1)}else a([])},Sidebar.prototype.filterTags=function(e){if(null==e)return null;for(var t=e.split(" "),n=[],a={},i=0;i<t.length;i++)null==a[t[i]]&&(a[t[i]]="1",n.push(t[i]));return n.join(" ")},Sidebar.prototype.cloneCell=function(e,t){var n=e.clone();return null!=t&&(n.value=t),n},Sidebar.prototype.addSearchPalette=function(e){var t=document.createElement("div");t.style.visibility="hidden",this.container.appendChild(t);var r=document.createElement("div");r.className="geSidebar",r.style.boxSizing="border-box",r.style.overflow="hidden",r.style.width="100%",r.style.padding="8px",r.style.paddingTop="14px",r.style.paddingBottom="0px",e||(r.style.display="none");var n=document.createElement("div");n.style.whiteSpace="nowrap",n.style.textOverflow="clip",n.style.paddingBottom="8px",n.style.cursor="default";var a=document.createElement("input");a.setAttribute("placeholder",mxResources.get("searchShapes")),a.setAttribute("type","text"),a.style.fontSize="12px",a.style.overflow="hidden",a.style.boxSizing="border-box",a.style.border="solid 1px #d5d5d5",a.style.borderRadius="4px",a.style.width="100%",a.style.outline="none",a.style.padding="6px",n.appendChild(a);var i,s=document.createElement("img");s.setAttribute("src",Sidebar.prototype.searchImage),s.setAttribute("title",mxResources.get("search")),s.style.position="relative",s.style.left="-18px",mxClient.IS_QUIRKS?(a.style.height="28px",s.style.top="-4px"):s.style.top="2px",s.style.background="url('"+this.editorUi.editor.transparentImage+"')",n.appendChild(s),r.appendChild(n);var l=document.createElement("center"),d=mxUtils.button(mxResources.get("moreResults"),function(){i()});d.style.display="none",d.style.lineHeight="normal",d.style.marginTop="4px",d.style.marginBottom="8px",l.style.paddingTop="4px",l.style.paddingBottom="8px",l.appendChild(d),r.appendChild(l);var c="",m=!1,u=!1,p=0,g=new Object,v=12,h=mxUtils.bind(this,function(){m=!1,this.currentSearch=null;for(var e=r.firstChild;null!=e;){var t=e.nextSibling;e!=n&&e!=l&&e.parentNode.removeChild(e),e=t}});i=mxUtils.bind(this,function(){if(v=4*Math.max(1,Math.floor(this.container.clientWidth/(this.thumbWidth+10))),this.hideTooltip(),""!=a.value){if(null!=l.parentNode&&(c!=a.value&&(h(),c=a.value,g=new Object,u=!1,p=0),!m&&!u)){d.setAttribute("disabled","true"),d.style.display="",d.style.cursor="wait",d.innerHTML=mxResources.get("loading")+"...",m=!0;var o=new Object;this.currentSearch=o,this.searchEntries(c,v,p,mxUtils.bind(this,function(e,t,n){if(this.currentSearch==o){e=null!=e?e:[],m=!1,p++,l.parentNode.removeChild(l);for(var a=0;a<e.length;a++){var i=e[a]();null==g[i.innerHTML]&&(g[i.innerHTML]="1",r.appendChild(e[a]()))}if(n?(d.removeAttribute("disabled"),d.innerHTML=mxResources.get("moreResults")):(d.innerHTML=mxResources.get("reset"),d.style.display="none",u=!0),d.style.cursor="",0==e.length&&1==p){var s=document.createElement("div");s.className="geTitle",s.style.backgroundColor="transparent",s.style.borderColor="transparent",s.style.color="gray",s.style.padding="0px",s.style.margin="0px 8px 0px 8px",s.style.paddingTop="6px",s.style.textAlign="center",s.style.cursor="default",mxUtils.write(s,mxResources.get("noResultsFor",[c])),r.appendChild(s)}r.appendChild(l)}}),mxUtils.bind(this,function(){d.style.cursor=""}))}}else h(),a.value="",c="",g=new Object,d.style.display="none",u=!1,a.focus()}),mxEvent.addListener(a,"keydown",mxUtils.bind(this,function(e){13==e.keyCode&&i()})),mxEvent.addListener(a,"focus",function(){a.style.paddingRight="",s.style.display="none"}),mxEvent.addListener(a,"blur",function(){a.style.paddingRight="20px",s.style.display=""}),a.style.paddingRight="20px",mxEvent.addListener(a,"keyup",mxUtils.bind(this,function(e){""==a.value?(u=!0,d.style.display="none"):a.value!=c?(d.style.display="none",u=!1):m||(d.style.display=u?"none":"")})),mxEvent.addListener(a,"mousedown",function(e){e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0}),mxEvent.addListener(a,"selectstart",function(e){e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0});var o=document.createElement("div");o.appendChild(r),this.container.appendChild(o),this.palettes.search=[t,o]},Sidebar.prototype.createTitle=function(e){var t=document.createElement("a");return t.setAttribute("href","javascript:void(0);"),t.setAttribute("title",mxResources.get("sidebarTooltip")),t.className="geTitle",mxUtils.write(t,e),t},Sidebar.prototype.createThumb=function(e,t,n,a,i,s,o,r,l){this.graph.labelsVisible=null==s||s;var d=mxClient.NO_FO;mxClient.NO_FO=Editor.prototype.originalNoForeignObject,this.graph.view.scaleAndTranslate(1,0,0),this.graph.addCells(e);var c=this.graph.getGraphBounds(),m=Math.floor(100*Math.min((t-2*this.thumbBorder)/c.width,(n-2*this.thumbBorder)/c.height))/100;this.graph.view.scaleAndTranslate(m,Math.floor((t-c.width*m)/2/m-c.x),Math.floor((n-c.height*m)/2/m-c.y));var u=null;if(this.graph.dialect!=mxConstants.DIALECT_SVG||mxClient.NO_FO?(u=this.graph.container.cloneNode(!1)).innerHTML=this.graph.container.innerHTML:u=this.graph.view.getCanvas().ownerSVGElement.cloneNode(!0),this.graph.getModel().clear(),mxClient.NO_FO=d,mxClient.IS_IE6&&(a.style.backgroundImage="url("+this.editorUi.editor.transparentImage+")"),u.style.position="relative",u.style.overflow="hidden",u.style.cursor="move",u.style.left=this.thumbBorder+"px",u.style.top=this.thumbBorder+"px",u.style.width=t+"px",u.style.height=n+"px",u.style.visibility="",u.style.minWidth="",u.style.minHeight="",a.appendChild(u),this.sidebarTitles&&null!=i&&0!=o){var p=mxClient.IS_QUIRKS?2*this.thumbPadding+2:0;a.style.height=this.thumbHeight+p+this.sidebarTitleSize+8+"px";var g=document.createElement("div");g.style.fontSize=this.sidebarTitleSize+"px",g.style.color="#303030",g.style.textAlign="center",g.style.whiteSpace="nowrap",mxClient.IS_IE&&(g.style.height=this.sidebarTitleSize+12+"px"),g.style.paddingTop="4px",mxUtils.write(g,i),a.appendChild(g)}return c},Sidebar.prototype.createItem=function(t,n,a,e,i,s,o){var r=document.createElement("a");r.setAttribute("href","javascript:void(0);"),r.className="geItem",r.style.overflow="hidden";var l=mxClient.IS_QUIRKS?8+2*this.thumbPadding:2*this.thumbBorder;r.style.width=this.thumbWidth+l+"px",r.style.height=this.thumbHeight+l+"px",r.style.padding=this.thumbPadding+"px",mxEvent.addListener(r,"click",function(e){mxEvent.consume(e)}),this.createThumb(t,this.thumbWidth,this.thumbHeight,r,n,a,e,i,s);var d=new mxRectangle(0,0,i,s);if(1<t.length||t[0].vertex){var c=this.createDragSource(r,this.createDropHandler(t,!0,o,d),this.createDragPreview(i,s),t,d);this.addClickHandler(r,c,t),c.isGuidesEnabled=mxUtils.bind(this,function(){return this.editorUi.editor.graph.graphHandler.guidesEnabled})}else if(null!=t[0]&&t[0].edge){c=this.createDragSource(r,this.createDropHandler(t,!1,o,d),this.createDragPreview(i,s),t,d);this.addClickHandler(r,c,t)}return mxClient.IS_IOS||mxEvent.addGestureListeners(r,null,mxUtils.bind(this,function(e){this.showTooltip(r,t,d.width,d.height,n,a)})),r},Sidebar.prototype.createDropHandler=function(g,v,h,f){return h=null==h||h,mxUtils.bind(this,function(e,t,n,a,i){if(e.isEnabled()){if(0<(g=e.getImportableCells(g)).length){e.stopEditing();var s=null!=n&&e.isValidDropTarget(n,g,t),o=null;if(null==n||s||(n=null),!e.isCellLocked(n||e.getDefaultParent())){e.model.beginUpdate();try{if(a=Math.round(a),i=Math.round(i),v&&e.isSplitTarget(n,g,t)){var r=e.cloneCells(g);e.splitEdge(n,r,null,a-f.width/2,i-f.height/2),o=r}else 0<g.length&&(o=e.importCells(g,a,i,n));if(null!=e.layoutManager){var l=e.layoutManager.getLayout(n);if(null!=l)for(var d=e.view.scale,c=e.view.translate,m=(a+c.x)*d,u=(i+c.y)*d,p=0;p<o.length;p++)l.moveCell(o[p],m,u)}h&&e.fireEvent(new mxEventObject("cellsInserted","cells",o))}finally{e.model.endUpdate()}null!=o&&0<o.length&&(e.scrollCellToVisible(o[0]),e.setSelectionCells(o))}}mxEvent.consume(t)}})},Sidebar.prototype.createDragPreview=function(e,t){var n=document.createElement("div");return n.style.border="1px dashed black",n.style.width=e+"px",n.style.height=t+"px",n},Sidebar.prototype.createDragSource=function(e,t,n){var a=mxUtils.makeDraggable(e,this.editorUi.editor.graph,t,n,0,0,this.editorUi.editor.graph.autoscroll,!0,!0);return a.getDropTarget=function(e,t,n){var a=mxDragSource.prototype.getDropTarget.apply(this,arguments);return e.isValidRoot(a)||(a=null),a},a},Sidebar.prototype.addClickHandler=function(e,a){var i=this.editorUi.editor.graph,s=null;mxEvent.addGestureListeners(e,function(e){s=new mxPoint(mxEvent.getClientX(e),mxEvent.getClientY(e))});var o=a.mouseUp;a.mouseUp=function(e){if(!mxEvent.isPopupTrigger(e)&&null==this.currentGraph&&null!=s){var t=i.tolerance;if(Math.abs(s.x-mxEvent.getClientX(e))<=t&&Math.abs(s.y-mxEvent.getClientY(e))<=t){var n=i.getGridSize();a.drop(i,e,null,n,n)}}o.apply(this,arguments),s=null}},Sidebar.prototype.createVertexTemplateEntry=function(e,t,n,a,i,s,o,r){return r=null!=r&&0<r.length?r:i.toLowerCase(),this.addEntry(r,mxUtils.bind(this,function(){return this.createVertexTemplate(e,t,n,a,i,s,o)}))},Sidebar.prototype.createXmlDocument=function(e,t,n,a){var i=mxUtils.createXmlDocument().createElement(e);return i.setAttribute("label",t),n.forEach(function(e,t){i.setAttribute(e,a[t]?a[t]:"")}),i},Sidebar.prototype.createVertexTemplate=function(e,t,n,a,i,s,o,r){var l=[],d=[];switch(a){case"answer":l=["timeout"],d=["0"];break;case"start":l=["answer"],d=["yes"];break;case"googleasr":l=["key","google_asr_language","timeout","intKey","beep"],d=["","it-IT","10","#","BEEP"];break;case"tildeasr":l=["uri","appid","appsecret","timeout","intKey","beep"],d=["wss://runa.tilde.lv/client/ws/speech/LVASR-ONLINE","","","10","#","BEEP"];break;case"ispeechasr":l=["key","model","ispeech_asr_language","timeout","intKey","beep"],d=["","","it-IT","10","#","BEEP"];break;case"playback":l=["file_id","opts"],d=["0"];break;case"background":l=["file_id","response","digit"],d=["0","5","1"];break;case"menu":l=["file_id","response","digit","retry","variable_id"],d=["0","5","1","1","0"];break;case"getdigits":l=["file_id","response","mindigit","maxdigit","retry","variable_id"],d=["0","5","1","10","1","0"];break;case"getsecretdigits":l=["file_id","response","mindigit","maxdigit","retry","hiddendigitsnum","hiddendigitspos","variable_id"],d=["0","5","1","10","1","0","first","0"];break;case"custom_app":l=["application","options"],d=["",""];break;case"set":l=["variable_id","variable_value"],d=["0",""];break;case"database":l=["odbc_id","query","variable_id"],d=["0","",""];break;case"noop":l=["output"],d=[];break;case"gotoc":l=["context","extension","priority"],d=["","","1"];break;case"system":l=["variable_id","command"],d=[];break;case"agi":l=["command","args"],d=[];break;case"gotoif":l=["condition"],d=[];break;case"gotoiftime":l=["interval_id"],d=["0"];break;case"vswitch":l=["variable_id"],d=["0"];break;case"saydigits":l=["digits","escape_digits"],d=["","#"];break;case"saynumber":l=["number","escape_digits"],d=["","#"];break;case"sayphonetic":l=["text","escape_digits"],d=["","#"];break;case"record":l=["file","recordingFormat","timeout","escape_digits"],d=["","wav","-1","#"];break;case"dial":l=["sip_id","timeout","opts","url"],d=["0","60"];break;case"ext_dial":l=["phone","trunk_name","timeout","opts","url"],d=["","-1","60"];break;case"tts":l=["text","google_tts_language"],d=["","it"];break;case"ispeechtts":l=["text","key","ispeech_tts_language","speed","intKey"],d=["","","euritalianfemale","0","#"];break;case"lumenvoxtts":case"sestektts":l=["text","options"],d=["",""];break;case"lumenvoxasr":l=["grammar","options"],d=["",""];break;case"sestekasr":l=["grammar","options"],d=["/usr/local/unimrcp/data/grammar.xml",""];break;case"awspolly":l=["aws_access_key_id","aws_secret_access_key","aws_polly_region","aws_polly_voice","text","aws_text_type"],d=["","","eu-west-1","Amy","","text"];break;case"awslex":l=["aws_access_key_id","aws_secret_access_key","aws_lex_region","aws_bot_name","text"],d=["","","eu-west-1","",""];break;case"queue":l=["queue_id","opts","url","file_id","timeout","agi","macro","gosub","position"],d=["-1","xX","","","300"];break;case"voicemail":l=["mailbox","options"],d=["",""];break;case"subproject":l=["project_id"],d=["0"];break;case"math":l=["operation","variable_id"],d=["","0"];break;case"queuelog":l=["queuename","agent","queue_event","data1","data2","data3","data4","data5"],d=[];break;case"goal":l=["goalname"],d=[];break;case"callback":l=["name","lastName","phone","list_id","delay","callback_priority"],d=["{CALLERID(name)}","","{CALLERID(num)}","-1","5","2"];break;case"sendSMS":l=["sms_account_id","to","sms_text"],d=["0"];break;case"sendMail":l=["account_id","to","cc","bcc","subject","text"],d=["0"];break;case"sendFax":l=["account_id","to","choose_attachment","attachment_name","attachment_type","attachment_path"],d=["0"];break;case"login":case"unpause":case"logout":l=["findBy"],d=["internal"];break;case"pause":l=["findBy","pause_id"],d=["internal",""];break;case"dialogflow":l=["key","text","dialogflow_language"],d=["","","it"];break;case"sesteknda":l=["ndauth_url","username","password","ndassistant_url","text","project","ndagenerate_audio","custom_action","custom_action_data","ndaactivity_type"],d=["","","","","","",1,"","","message"];break;default:l=[],d=[]}var c=[new mxCell(this.createXmlDocument(a,i,l,d),new mxGeometry(0,0,t,n),e)];return c[0].vertex=!0,this.createVertexTemplateFromCells(c,t,n,i,s,o,r)},Sidebar.prototype.createVertexTemplateFromCells=function(e,t,n,a,i,s,o){return this.createItem(e,a,i,s,t,n,o)},Sidebar.prototype.createEdgeTemplate=function(e,t,n,a,i,s,o){var r=new mxCell(null!=a?a:"",new mxGeometry(0,0,t,n),e);return r.geometry.setTerminalPoint(new mxPoint(0,n),!0),r.geometry.setTerminalPoint(new mxPoint(t,0),!1),r.geometry.relative=!0,r.edge=!0,this.createEdgeTemplateFromCells([r],t,n,i,s,o)},Sidebar.prototype.createEdgeTemplateFromCells=function(e,t,n,a,i,s){return this.createItem(e,a,i,!0,t,n,s)},Sidebar.prototype.addPaletteFunctions=function(e,t,n,a){this.addPalette(e,t,n,mxUtils.bind(this,function(e){for(var t=0;t<a.length;t++)e.appendChild(a[t](e))}))},Sidebar.prototype.addPalette=function(e,t,n,a){var i=this.createTitle(t);this.container.appendChild(i);var s=document.createElement("div");s.className="geSidebar",mxClient.IS_POINTER&&(s.style.touchAction="none"),mxEvent.addListener(s,"mousemove",mxUtils.bind(this,function(e){mxEvent.getSource(e)==s?s.setAttribute("title",mxResources.get("sidebarTooltip")):s.removeAttribute("title")})),n?(a(s),a=null):s.style.display="none",this.addFoldingHandler(i,s,a);var o=document.createElement("div");return o.appendChild(s),this.container.appendChild(o),null!=e&&(this.palettes[e]=[i,o]),s},Sidebar.prototype.addFoldingHandler=function(n,a,i){var s=!1;(!mxClient.IS_IE||8<=document.documentMode)&&(n.style.backgroundImage="none"==a.style.display?"url('"+this.collapsedImage+"')":"url('"+this.expandedImage+"')"),n.style.backgroundRepeat="no-repeat",n.style.backgroundPosition="0% 50%",mxEvent.addListener(n,"click",mxUtils.bind(this,function(e){if("none"==a.style.display){if(s)a.style.display="block";else if(s=!0,null!=i){n.style.cursor="wait";var t=n.innerHTML;n.innerHTML=mxResources.get("loading")+"...",window.setTimeout(function(){var e=mxClient.NO_FO;mxClient.NO_FO=Editor.prototype.originalNoForeignObject,i(a),mxClient.NO_FO=e,a.style.display="block",n.style.cursor="",n.innerHTML=t},0)}else a.style.display="block";n.style.backgroundImage="url('"+this.expandedImage+"')"}else n.style.backgroundImage="url('"+this.collapsedImage+"')",a.style.display="none";mxEvent.consume(e)}))},Sidebar.prototype.addImagePalette=function(e,t,s,o,r,n,a){for(var l=[],d=0;d<r.length;d++)mxUtils.bind(this,function(e,t,n){if(null==n){var a=e.lastIndexOf("/"),i=e.lastIndexOf(".");n=e.substring(0<=a?a+1:0,0<=i?i:e.length).replace(/[-_]/g," ")}l.push(this.createVertexTemplateEntry("image;html=1;image="+s+e+o,this.defaultImageWidth,this.defaultImageHeight,r[d],t,!1,!0,this.filterTags(n)))})(r[d],null!=n?n[d]:null,null!=a?a[r[d]]:null);this.addPaletteFunctions(e,t,!1,l)},"undefined"!=typeof html4&&(html4.ATTRIBS["a::target"]=0),mxConstants.SHADOW_OPACITY=.25,mxConstants.SHADOWCOLOR="#000000",mxConstants.VML_SHADOWCOLOR="#d0d0d0",mxGraph.prototype.pageBreakColor="#c0c0c0",mxGraph.prototype.pageScale=1,function(){try{if(null!=navigator&&null!=navigator.language){var e=navigator.language.toLowerCase();mxGraph.prototype.pageFormat="en-us"===e||"en-ca"===e||"es-mx"===e?mxConstants.PAGE_FORMAT_LETTER_PORTRAIT:mxConstants.PAGE_FORMAT_A4_PORTRAIT}}catch(e){}}(),mxText.prototype.baseSpacingTop=5,mxText.prototype.baseSpacingBottom=1,mxGraphModel.prototype.ignoreRelativeEdgeParent=!1,mxGraphView.prototype.gridImage=mxClient.IS_SVG?"data:image/gif;base64,R0lGODlhCgAKAJEAAAAAAP///8zMzP///yH5BAEAAAMALAAAAAAKAAoAAAIJ1I6py+0Po2wFADs=":IMAGE_PATH+"/grid.gif",mxGraphView.prototype.gridSteps=4,mxGraphView.prototype.minGridSize=4,mxGraphView.prototype.gridColor="#e0e0e0",mxSvgCanvas2D.prototype.foAltText="[Not supported by viewer]",Graph=function(e,t,n,a){mxGraph.call(this,e,t,n,a),this.setConnectable(!0),this.setDropEnabled(!1),this.setPanning(!0),this.setTooltips(!mxClient.IS_TOUCH),this.setAllowLoops(!1),this.setMultigraph(!1),this.allowAutoPanning=!0,this.resetEdgesOnConnect=!1,this.constrainChildren=!1,this.connectionHandler.targetConnectImage=!0,this.setAllowDanglingEdges(!1),this.connectionHandler.setCreateTarget(!1),this.connectionHandler.isValidSource=function(){return mxConnectionHandler.prototype.isValidSource.apply(this,arguments)&&"2"!=urlParams.connect},this.alternateEdgeStyle="vertical",null==a&&this.loadStylesheet();var i=new mxRubberband(this);this.getRubberband=function(){return i},this.panningHandler.addListener(mxEvent.PAN_START,mxUtils.bind(this,function(){this.container.style.cursor="pointer"})),this.panningHandler.addListener(mxEvent.PAN_END,mxUtils.bind(this,function(){this.container.style.cursor="default"})),this.isHtmlLabel=function(e){var t=this.view.getState(e),n=null!=t?t.style:this.getCellStyle(e);return"1"==n.html||"wrap"==n.whiteSpace},this.cellRenderer.getLabelValue=function(e){var t=mxCellRenderer.prototype.getLabelValue.apply(this,arguments);return"wrap"==e.style.whiteSpace&&1!=e.style.html&&(t=mxUtils.htmlEntities(t,!1)),t},this.isCellLocked=function(e){return!1},this.connectionHandler.tapAndHoldTolerance=16;var s=this.connectionHandler.tapAndHold;this.connectionHandler.tapAndHold=function(e,t){null==t?this.graph.panningHandler.active||(i.start(e.getGraphX(),e.getGraphY()),this.graph.panningHandler.panningTrigger=!1):tapAndHoldStartsConnection?s.apply(this,arguments):this.graph.isCellSelected(t.cell)&&1<this.graph.getSelectionCount()&&this.graph.removeSelectionCell(t.cell)},touchStyle&&this.initTouch()},mxUtils.extend(Graph,mxGraph),Graph.prototype.minFitScale=null,Graph.prototype.maxFitScale=null,Graph.prototype.loadStylesheet=function(){var e=mxUtils.load(STYLE_PATH+"/default.xml").getDocumentElement();new mxCodec(e.ownerDocument).decode(e,this.getStylesheet())},Graph.prototype.flipEdge=function(e){if(null!=e){var t=this.view.getState(e),n=null!=t?t.style:this.getCellStyle(e);if(null!=n){var a=mxUtils.getValue(n,mxConstants.STYLE_ELBOW,mxConstants.ELBOW_HORIZONTAL)==mxConstants.ELBOW_HORIZONTAL?mxConstants.ELBOW_VERTICAL:mxConstants.ELBOW_HORIZONTAL;this.setCellStyles(mxConstants.STYLE_ELBOW,a,[e])}}},Graph.prototype.setDefaultEdge=function(e){if(null!=e&&this.getModel().isEdge(e)){var t=this.getModel().cloneCells([e])[0];null!=t.geometry&&(t.geometry.points=null);var n=t.getStyle();n=mxUtils.setStyle(n,mxConstants.STYLE_ENTRY_X,null),n=mxUtils.setStyle(n,mxConstants.STYLE_ENTRY_Y,null),n=mxUtils.setStyle(n,mxConstants.STYLE_EXIT_X,null),n=mxUtils.setStyle(n,mxConstants.STYLE_EXIT_Y,null),t.setStyle(n),this.connectionHandler.createEdgeState=function(e){return this.graph.view.createState(t)},this.connectionHandler.factoryMethod=function(){return this.graph.cloneCells([t])[0]}}},Graph.prototype.isCellFoldable=function(e){return this.foldingEnabled&&this.isSwimlane(e)},Graph.prototype.isValidRoot=function(e){return this.isSwimlane(e)},Graph.prototype.createGroupCell=function(){var e=mxGraph.prototype.createGroupCell.apply(this,arguments);return e.setStyle("group"),e},Graph.prototype.getTooltipForCell=function(e){var t="";return this.getModel().isVertex(e)?t+=mxResources.get("description_"+e.value.nodeName)||"":this.getModel().isEdge(e)&&(t=mxGraph.prototype.getTooltipForCell.apply(this,arguments)),t},Graph.prototype.convertValueToString=function(e){return null!=e.value&&"object"==typeof e.value?e.value.getAttribute("label"):mxGraph.prototype.convertValueToString.apply(this,arguments)},Graph.prototype.cellLabelChanged=function(e,t,n){if(null!=e.value&&"object"==typeof e.value){var a=e.value.cloneNode(!0);a.setAttribute("label",t),t=a}mxGraph.prototype.cellLabelChanged.apply(this,arguments)},Graph.prototype.setLinkForCell=function(e,t){var n=null;null!=e.value&&"object"==typeof e.value?n=e.value.cloneNode(!0):(n=mxUtils.createXmlDocument().createElement("UserObject")).setAttribute("label",e.value);null!=t&&0<t.length?n.setAttribute("link",t):n.removeAttribute("link"),this.model.setValue(e,n)},Graph.prototype.getLinkForCell=function(e){return null!=e.value&&"object"==typeof e.value?e.value.getAttribute("link"):null},Graph.prototype.initTouch=function(){this.connectionHandler.marker.isEnabled=function(){return null!=this.graph.connectionHandler.first},this.addListener(mxEvent.START_EDITING,function(e,t){this.panningHandler.hideMenu()});var s=!1,o=null;this.updateMouseEvent=function(e){if(mxGraph.prototype.updateMouseEvent.apply(this,arguments),null==e.getState()){var t=this.getCellAt(e.graphX,e.graphY);this.getModel().isEdge(t)&&(e.state=this.view.getState(t),null!=e.state&&null!=e.state.shape&&(this.container.style.cursor=e.state.shape.node.style.cursor))}null==e.getState()&&(this.container.style.cursor="default")},this.fireMouseEvent=function(e,t,n){if(e==mxEvent.MOUSE_DOWN)this.panningHandler.isMenuShowing()?(s=!1,o=null):(o=t.getCell(),s=null!=o?this.isCellSelected(o):this.isSelectionEmpty());else if(e==mxEvent.MOUSE_UP){if(s&&!this.isEditing()){if(!this.panningHandler.isMenuShowing()){var a=mxEvent.getClientX(t.getEvent()),i=mxEvent.getClientY(t.getEvent());this.panningHandler.popup(a+16,i,o,t.getEvent())}return s=!1,o=null,void t.consume()}s=!1,o=null}mxGraph.prototype.fireMouseEvent.apply(this,arguments),e==mxEvent.MOUSE_MOVE&&t.isConsumed()&&(s=!1,o=null)}},function(){if(mxVertexHandler.prototype.rotationEnabled=!0,mxText.prototype.baseSpacingTop=5,mxText.prototype.baseSpacingBottom=1,touchStyle){mxConstants.HANDLE_SIZE=16,mxConstants.LABEL_HANDLE_SIZE=7,mxClient.IS_TOUCH&&(mxVertexHandler.prototype.tolerance=4,mxEdgeHandler.prototype.tolerance=6,Graph.prototype.tolerance=14,Graph.prototype.gridSize=20,mxPanningHandler.prototype.selectOnPopup=!1,mxPanningHandler.prototype.useLeftButtonForPanning=!0,mxPanningHandler.prototype.isPanningTrigger=function(e){var t=e.getEvent();return this.useLeftButtonForPanning&&(this.ignoreCell||null==e.getState())||mxEvent.isControlDown(t)&&mxEvent.isShiftDown(t)||this.usePopupTrigger&&mxEvent.isPopupTrigger(t)});var n=mxGraphHandler.prototype.mouseDown;mxGraphHandler.prototype.mouseDown=function(e,t){n.apply(this,arguments),this.graph.isCellSelected(t.getCell())&&1<this.graph.getSelectionCount()&&(this.delayedSelection=!1)},Graph.prototype.createHandlers=function(e){this.tooltipHandler=new mxTooltipHandler(this),this.tooltipHandler.setEnabled(!1),this.selectionCellsHandler=new mxSelectionCellsHandler(this),this.panningHandler=new mxPanningHandler(this),this.panningHandler.panningEnabled=!1,this.connectionHandler=new mxConnectionHandler(this),this.connectionHandler.setEnabled(!1),this.graphHandler=new mxGraphHandler(this)},mxConnectionHandler.prototype.selectCells=function(e,t){touchStyle&&null!=t?this.graph.setSelectionCell(t):this.graph.setSelectionCell(e)};var a=mxGraph.prototype.dblClick;Graph.prototype.dblClick=function(e,t){if(null==t){var n=mxUtils.convertPoint(this.container,mxEvent.getClientX(e),mxEvent.getClientY(e));t=this.getCellAt(n.x,n.y)}a.call(this,e,t)};var e=new mxImage(IMAGE_PATH+"/touch-handle.png",16,16);mxVertexHandler.prototype.handleImage=e,mxEdgeHandler.prototype.handleImage=e,mxOutline.prototype.sizerImage=e,(new Image).src=e.src;var t=IMAGE_PATH+"/touch-connector.png",i=mxVertexHandler.prototype.init;mxVertexHandler.prototype.init=function(){i.apply(this,arguments),showConnectorImg&&this.graph.connectionHandler.isEnabled()&&this.graph.isCellConnectable(this.state.cell)&&!this.graph.isValidRoot(this.state.cell)&&1==this.graph.getSelectionCount()&&(this.connectorImg=mxUtils.createImage(t),this.connectorImg.style.cursor="pointer",this.connectorImg.style.width="29px",this.connectorImg.style.height="29px",this.connectorImg.style.position="absolute",mxClient.IS_TOUCH||(this.connectorImg.setAttribute("title",mxResources.get("connect")),mxEvent.redirectMouseEvents(this.connectorImg,this.graph,this.state)),this.connectorImg.style.padding="2px",mxEvent.addGestureListeners(this.connectorImg,mxUtils.bind(this,function(e){this.graph.panningHandler.hideMenu();var t=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(e),mxEvent.getClientY(e));this.graph.connectionHandler.start(this.state,t.x,t.y),this.graph.isMouseDown=!0,mxEvent.consume(e)})),this.graph.container.appendChild(this.connectorImg)),this.redrawTools()};var s=mxVertexHandler.prototype.redraw;mxVertexHandler.prototype.redraw=function(){s.apply(this),this.redrawTools()},mxVertexHandler.prototype.redrawTools=function(){null!=this.state&&null!=this.connectorImg&&(mxVertexHandler.prototype.singleSizer?(this.connectorImg.style.left=this.state.x+this.state.width-this.connectorImg.offsetWidth/2+"px",this.connectorImg.style.top=this.state.y-this.connectorImg.offsetHeight/2+"px"):(this.connectorImg.style.left=this.state.x+this.state.width+mxConstants.HANDLE_SIZE/2+4+"px",this.connectorImg.style.top=this.state.y+(this.state.height-this.connectorImg.offsetHeight)/2+"px"))};var o=mxVertexHandler.prototype.destroy;mxVertexHandler.prototype.destroy=function(e,t){o.apply(this,arguments),null!=this.connectorImg&&(this.connectorImg.parentNode.removeChild(this.connectorImg),this.connectorImg=null)},(new Image).src=t}else{var r=new mxImage(IMAGE_PATH+"/connector.png",15,15);if(mxConnectionHandler.prototype.connectImage=r,(new Image).src=r.src,"2"==urlParams.connect){r=new mxImage(IMAGE_PATH+"/connector.png",15,15),i=mxVertexHandler.prototype.init;mxVertexHandler.prototype.init=function(){i.apply(this,arguments),showConnectorImg&&this.graph.connectionHandler.isEnabled()&&this.graph.isCellConnectable(this.state.cell)&&!this.graph.isValidRoot(this.state.cell)&&1==this.graph.getSelectionCount()&&(mxClient.IS_IE&&!mxClient.IS_SVG?(this.connectorImg=document.createElement("div"),this.connectorImg.style.backgroundImage="url("+r.src+")",this.connectorImg.style.backgroundPosition="center",this.connectorImg.style.backgroundRepeat="no-repeat",this.connectorImg.style.width=r.width+4+"px",this.connectorImg.style.height=r.height+4+"px",this.connectorImg.style.display=mxClient.IS_QUIRKS?"inline":"inline-block"):(this.connectorImg=mxUtils.createImage(r.src),this.connectorImg.style.width=r.width+"px",this.connectorImg.style.height=r.height+"px"),this.connectorImg.style.cursor="pointer",this.connectorImg.style.position="absolute",this.connectorImg.setAttribute("title",mxResources.get("connect")),mxEvent.redirectMouseEvents(this.connectorImg,this.graph,this.state),this.connectorImg.style.padding="2px",mxEvent.addListener(this.connectorImg,"mousedown",mxUtils.bind(this,function(e){this.graph.panningHandler.hideMenu();var t=mxUtils.convertPoint(this.graph.container,mxEvent.getClientX(e),mxEvent.getClientY(e));this.graph.connectionHandler.start(this.state,t.x,t.y),this.graph.isMouseDown=!0,mxEvent.consume(e)})),this.graph.container.appendChild(this.connectorImg)),this.redrawTools()};s=mxVertexHandler.prototype.redraw;mxVertexHandler.prototype.redraw=function(){s.apply(this),this.redrawTools()},mxVertexHandler.prototype.redrawTools=function(){null!=this.state&&null!=this.connectorImg&&(mxVertexHandler.prototype.singleSizer?(this.connectorImg.style.left=this.state.x+this.state.width-this.connectorImg.offsetWidth/2+"px",this.connectorImg.style.top=this.state.y-this.connectorImg.offsetHeight/2+"px"):(this.connectorImg.style.left=this.state.x+this.state.width+mxConstants.HANDLE_SIZE/2+2+"px",this.connectorImg.style.top=this.state.y+(this.state.height-this.connectorImg.offsetHeight)/2+"px"))};o=mxVertexHandler.prototype.destroy;mxVertexHandler.prototype.destroy=function(e,t){o.apply(this,arguments),null!=this.connectorImg&&(this.connectorImg.parentNode.removeChild(this.connectorImg),this.connectorImg=null)}}}}(),Actions.prototype.init=function(){var t=this.editorUi,l=t.editor,d=l.graph;this.addAction("new",function(){t.projectDesignController.newProject()},CRUD_PERMISSIONS.canEdit),this.addAction("open",function(){t.projectDesignController.openProject()},CRUD_PERMISSIONS.canEdit),this.addAction("save",function(){t.projectDesignController.saveOrPublishProject(mxUtils.getPrettyXml(l.getGraphXml())),t.editor.modified=!1},CRUD_PERMISSIONS.canEdit,null,"Ctrl+S"),this.addAction("saveAs",function(){t.projectDesignController.saveProjectAs(mxUtils.getPrettyXml(l.getGraphXml()))},CRUD_PERMISSIONS.canEdit,null,"Ctrl+Shift+S"),this.addAction("publish",function(){t.editor.setStatus(""),null===t.validate()?(t.projectDesignController.saveOrPublishProject(mxUtils.getPrettyXml(l.getGraphXml()),!0),t.editor.modified=!1):(t.editor.setStatus("...Error publishing! Please check the project and try again!"),setTimeout(function(){t.editor.setStatus("")},3e3))},CRUD_PERMISSIONS.canEdit,null,"Ctrl+Shift+P"),this.addAction("variable",function(){t.projectDesignController.newVariable()},CRUD_PERMISSIONS.canEdit),this.addAction("import",function(){t.projectDesignController.importXML(function(e){l.setGraphXml(mxUtils.parseXml(e).documentElement)})},CRUD_PERMISSIONS.canEdit),this.addAction("export",function(){t.exportXML(mxUtils.getPrettyXml(l.getGraphXml()))},null,null,"Ctrl+E"),this.addAction("editFile",function(){t.projectDesignController.editXML(mxUtils.getPrettyXml(l.getGraphXml()),function(e){l.setGraphXml(mxUtils.parseXml(e).documentElement)})},CRUD_PERMISSIONS.canEdit),this.addAction("print",function(){mxUtils.printScreen(d)},null,"sprite-print","Ctrl+P"),this.addAction("preview",function(){mxUtils.show(d,null,10,10)}),this.addAction("undo",function(){l.undoManager.undo()},null,"sprite-undo","Ctrl+Z"),this.addAction("redo",function(){l.undoManager.redo()},null,"sprite-redo","Ctrl+Y"),this.addAction("cut",function(){mxClipboard.cut(d)},null,"sprite-cut","Ctrl+X"),this.addAction("copy",function(){mxClipboard.copy(d)},null,"sprite-copy","Ctrl+C"),this.addAction("paste",function(){mxClipboard.paste(d)},!1,"sprite-paste","Ctrl+V"),this.addAction("delete",function(){d.removeCells()},null,null,"Delete"),this.addAction("duplicate",function(){var e=d.gridSize;d.setSelectionCells(d.moveCells(d.getSelectionCells(),e,e,!0))},null,null,"Ctrl+D"),this.addAction("selectVertices",function(){d.selectVertices()},null,null,"Ctrl+Shift+V"),this.addAction("selectEdges",function(){d.selectEdges()},null,null,"Ctrl+Shift+E"),this.addAction("selectAll",function(){d.selectAll()},null,null,"Ctrl+A"),this.addAction("home",function(){d.home()},null,null,"Home"),this.addAction("exitGroup",function(){d.exitGroup()},null,null,"Page Up"),this.addAction("enterGroup",function(){d.enterGroup()},null,null,"Page Down"),this.addAction("expand",function(){d.foldCells(!1)},null,null,"Enter"),this.addAction("collapse",function(){d.foldCells(!0)},null,null,"Backspace"),this.addAction("toFront",function(){d.orderCells(!1)},null,null,"Ctrl+F"),this.addAction("toBack",function(){d.orderCells(!0)},null,null,"Ctrl+B"),this.addAction("group",function(){d.setSelectionCell(d.groupCells(null,0))},null,null,"Ctrl+G"),this.addAction("ungroup",function(){d.setSelectionCells(d.ungroupCells())},null,null,"Ctrl+U"),this.addAction("removeFromGroup",function(){d.removeCellsFromParent()}),this.addAction("editLink",function(){var e=d.getSelectionCell(),t=d.getLinkForCell(e);null==t&&(t=""),null!=(t=mxUtils.prompt(mxResources.get("enterValue"),t))&&d.setLinkForCell(e,t)}),this.addAction("openLink",function(){var e=d.getSelectionCell(),t=d.getLinkForCell(e);null!=t&&window.open(t)}),this.addAction("autosize",function(){var e=d.getSelectionCells();if(null!=e){d.getModel().beginUpdate();try{for(var t=0;t<e.length;t++){var n=e[t];d.getModel().getChildCount(n)?d.updateGroupBounds([n],20):d.updateCellSize(n)}}finally{d.getModel().endUpdate()}}}),this.addAction("wordWrap",function(){var e=d.getView().getState(d.getSelectionCell()),t="wrap";null!=e&&"wrap"==e.style[mxConstants.STYLE_WHITE_SPACE]&&(t=null),d.setCellStyles(mxConstants.STYLE_WHITE_SPACE,t)}),this.addAction("rotation",function(){var e="0",t=d.getView().getState(d.getSelectionCell());null!=t&&(e=t.style[mxConstants.STYLE_ROTATION]||e),null!=(e=mxUtils.prompt(mxResources.get("enterValue")+" ("+mxResources.get("rotation")+" 0-360)",e))&&d.setCellStyles(mxConstants.STYLE_ROTATION,e)}),this.addAction("tilt",function(){var e=d.getSelectionCells();if(null!=e){d.getModel().beginUpdate();try{for(var t=0;t<e.length;t++){var n=e[t];if(d.getModel().isVertex(n)&&0==d.getModel().getChildCount(n)){var a=d.getCellGeometry(n);if(null!=a){(a=a.clone()).x+=a.width/2-a.height/2,a.y+=a.height/2-a.width/2;var i=a.width;a.width=a.height,a.height=i,d.getModel().setGeometry(n,a);var s=d.view.getState(n);if(null!=s){var o=s.style[mxConstants.STYLE_DIRECTION]||"east";"east"==o?o="south":"south"==o?o="west":"west"==o?o="north":"north"==o&&(o="east"),d.setCellStyles(mxConstants.STYLE_DIRECTION,o,[n])}}}}}finally{d.getModel().endUpdate()}}},null,null,"Ctrl+R"),this.addAction("actualSize",function(){d.zoomTo(1)}),this.addAction("zoomIn",function(){d.zoomIn()},null,null,"Add"),this.addAction("zoomOut",function(){d.zoomOut()},null,null,"Subtract"),this.addAction("fitWindow",function(){d.fit()}),this.addAction("fitPage",mxUtils.bind(this,function(){d.pageVisible||this.get("pageView").funct();var e=d.pageFormat,t=d.pageScale,n=d.container.clientWidth-20,a=d.container.clientHeight-20,i=Math.floor(100*Math.min(n/e.width/t,a/e.height/t))/100;d.zoomTo(i),d.container.scrollLeft=Math.round(d.view.translate.x*i-Math.max(10,(d.container.clientWidth-e.width*t*i)/2)),d.container.scrollTop=Math.round(d.view.translate.y*i-Math.max(10,(d.container.clientHeight-e.height*t*i)/2))})),this.addAction("fitPageWidth",mxUtils.bind(this,function(){d.pageVisible||this.get("pageView").funct();var e=d.pageFormat,t=d.pageScale,n=d.container.clientWidth-20,a=Math.floor(100*n/e.width/t)/100;d.zoomTo(a),d.container.scrollLeft=Math.round(d.view.translate.x*a-Math.max(10,(d.container.clientWidth-e.width*t*a)/2)),d.container.scrollTop=Math.round(d.view.translate.y*a-Math.max(10,(d.container.clientHeight-e.height*t*a)/2))})),this.put("customZoom",new Action(mxResources.get("custom"),function(){var e=mxUtils.prompt(mxResources.get("enterValue")+" (%)",parseInt(100*d.getView().getScale()));null!=e&&0<e.length&&!isNaN(parseInt(e))&&d.zoomTo(parseInt(e)/100)}));var e=null;(e=this.addAction("grid",function(){d.setGridEnabled(!d.isGridEnabled()),l.updateGraphComponents()},null,null,"Ctrl+Shift+G")).setToggleAction(!0),e.setSelectedCallback(function(){return d.isGridEnabled()}),(e=this.addAction("guides",function(){d.graphHandler.guidesEnabled=!d.graphHandler.guidesEnabled})).setToggleAction(!0),e.setSelectedCallback(function(){return d.graphHandler.guidesEnabled}),(e=this.addAction("tooltips",function(){d.tooltipHandler.setEnabled(!d.tooltipHandler.isEnabled())})).setToggleAction(!0),e.setSelectedCallback(function(){return d.tooltipHandler.isEnabled()}),(e=this.addAction("navigation",function(){d.foldingEnabled=!d.foldingEnabled,d.view.revalidate()})).setToggleAction(!0),e.setSelectedCallback(function(){return d.foldingEnabled}),(e=this.addAction("scrollbars",function(){if(d.scrollbars=!d.scrollbars,l.updateGraphComponents(),d.scrollbars){var e=d.view.translate.x,t=d.view.translate.y;d.view.translate.x=0,d.view.translate.y=0,d.sizeDidChange(),d.container.scrollLeft-=Math.round(e*d.view.scale),d.container.scrollTop-=Math.round(t*d.view.scale)}else{var n=d.view.translate;d.view.setTranslate(n.x-d.container.scrollLeft/d.view.scale,n.y-d.container.scrollTop/d.view.scale),d.container.scrollLeft=0,d.container.scrollTop=0,d.sizeDidChange()}},!mxClient.IS_TOUCH)).setToggleAction(!0),e.setSelectedCallback(function(){return"auto"==d.container.style.overflow}),(e=this.addAction("pageView",mxUtils.bind(this,function(){d.pageVisible=!d.pageVisible,d.pageBreaksVisible=d.pageVisible,d.preferPageSize=d.pageBreaksVisible,d.view.validate(),d.sizeDidChange(),l.updateGraphComponents(),l.outline.update(),mxUtils.hasScrollbars(d.container)&&(d.pageVisible?(d.container.scrollLeft-=20,d.container.scrollTop-=20):(d.container.scrollLeft+=20,d.container.scrollTop+=20))}))).setToggleAction(!0),e.setSelectedCallback(function(){return d.pageVisible}),(e=this.addAction("connect",function(){d.setConnectable(!d.connectionHandler.isEnabled())},null,null,"Ctrl+Q")).setToggleAction(!0),e.setSelectedCallback(function(){return d.connectionHandler.isEnabled()}),(e=this.addAction("copyConnect",function(){d.connectionHandler.setCreateTarget(!d.connectionHandler.isCreateTarget())})).setToggleAction(!0),e.setSelectedCallback(function(){return d.connectionHandler.isCreateTarget()}),this.addAction("help",function(){window.open("https://wiki.xcallymotion.com/display/XMV/Cally+Square")}),this.put("about",new Action(mxResources.get("about")+" Cally Square",function(){window.open("http://callysquare.com/")},null,null,null));var n=mxUtils.bind(this,function(e,t){this.addAction(e,function(){d.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE,t)})});n("bold",mxConstants.FONT_BOLD),n("italic",mxConstants.FONT_ITALIC),n("underline",mxConstants.FONT_UNDERLINE),this.addAction("shadow",function(){d.toggleCellStyles(mxConstants.STYLE_SHADOW)}),this.addAction("dashed",function(){d.toggleCellStyles(mxConstants.STYLE_DASHED)}),this.addAction("rounded",function(){d.toggleCellStyles(mxConstants.STYLE_ROUNDED)}),this.addAction("curved",function(){d.toggleCellStyles(mxConstants.STYLE_CURVED)}),this.addAction("style",function(){var e=d.getSelectionCells();if(null!=e&&0<e.length){var t=d.getModel(),n=mxUtils.prompt(mxResources.get("enterValue")+" ("+mxResources.get("style")+")",t.getStyle(e[0])||"");null!=n&&d.setCellStyle(n,e)}}),this.addAction("setAsDefaultEdge",function(){d.setDefaultEdge(d.getSelectionCell())}),this.addAction("addWaypoint",function(){var e=d.getSelectionCell();if(null!=e&&d.getModel().isEdge(e)){var t=l.graph.selectionCellsHandler.getHandler(e);if(t instanceof mxEdgeHandler){var n=d.view.translate,a=d.view.scale,i=n.x,s=n.y,o=d.getModel().getParent(e),r=d.getCellGeometry(o);d.getModel().isVertex(o)&&null!=r&&(i+=r.x,s+=r.y),t.addPointAt(t.state,d.panningHandler.triggerX/a-i,d.panningHandler.triggerY/a-s)}}}),this.addAction("removeWaypoint",function(){var e=t.actions.get("removeWaypoint");null!=e.handler&&e.handler.removePoint(e.handler.state,e.index)}),this.addAction("image",function(){var e="",t=d.getView().getState(d.getSelectionCell());if(null!=t&&(e=t.style[mxConstants.STYLE_IMAGE]||e),null!=(e=mxUtils.prompt(mxResources.get("enterValue")+" ("+mxResources.get("url")+")",e))&&0<e.length){var n=new Image;n.onload=function(){!function(e,t,n){var a=null,i=d.getSelectionCells();d.getModel().beginUpdate();try{if(0==i.length){var s=d.getGridSize();a=i=[d.insertVertex(d.getDefaultParent(),null,"",s,s,t,n)]}if(d.setCellStyles(mxConstants.STYLE_IMAGE,e,i),d.setCellStyles(mxConstants.STYLE_SHAPE,"image",i),1==d.getSelectionCount()&&null!=t&&null!=n){var o=i[0],r=d.getModel().getGeometry(o);null!=r&&((r=r.clone()).width=t,r.height=n,d.getModel().setGeometry(o,r))}}finally{d.getModel().endUpdate()}null!=a&&(d.setSelectionCells(a),d.scrollCellToVisible(a[0]))}(e,n.width,n.height)},n.onerror=function(){mxUtils.alert(mxResources.get("fileNotFound"))},n.src=e}})},Actions.prototype.addAction=function(e,t,n,a,i){return this.put(e,new Action(mxResources.get(e),t,n,a,i))},Actions.prototype.put=function(e,t){return this.actions[e]=t},Actions.prototype.get=function(e){return this.actions[e]},mxUtils.extend(Action,mxEventSource),Action.prototype.setEnabled=function(e){this.enabled!=e&&(this.enabled=e,this.fireEvent(new mxEventObject("stateChanged")))},Action.prototype.setToggleAction=function(e){this.toggleAction=e},Action.prototype.setSelectedCallback=function(e){this.selectedCallback=e},Action.prototype.isSelected=function(){return this.selectedCallback()},Menus=function(e){this.editorUi=e,this.menus=new Object,this.init(),(new Image).src=IMAGE_PATH+"/checkmark.gif"},Menus.prototype.init=function(){var i=this.editorUi.editor.graph;this.put("fontFamily",new Menu(mxUtils.bind(this,function(e,t){for(var n=["Helvetica","Verdana","Times New Roman","Garamond","Comic Sans MS","Courier New","Georgia","Lucida Console","Tahoma"],a=0;a<n.length;a++){this.styleChange(e,n[a],[mxConstants.STYLE_FONTFAMILY],[n[a]],null,t).firstChild.nextSibling.style.fontFamily=n[a]}e.addSeparator(t),this.promptChange(e,mxResources.get("custom"),"",mxConstants.DEFAULT_FONTFAMILY,mxConstants.STYLE_FONTFAMILY,t)}))),this.put("fontSize",new Menu(mxUtils.bind(this,function(e,t){for(var n=[6,8,9,10,11,12,14,18,24,36,48,72],a=0;a<n.length;a++)this.styleChange(e,n[a],[mxConstants.STYLE_FONTSIZE],[n[a]],null,t);e.addSeparator(t),this.promptChange(e,mxResources.get("custom"),"(pt)","12",mxConstants.STYLE_FONTSIZE,t)}))),this.put("linewidth",new Menu(mxUtils.bind(this,function(e,t){for(var n=[1,2,3,4,8,12,16,24],a=0;a<n.length;a++)this.styleChange(e,n[a]+"px",[mxConstants.STYLE_STROKEWIDTH],[n[a]],null,t);e.addSeparator(t),this.promptChange(e,mxResources.get("custom"),"(px)","1",mxConstants.STYLE_STROKEWIDTH,t)}))),this.put("line",new Menu(mxUtils.bind(this,function(e,t){this.styleChange(e,mxResources.get("straight"),[mxConstants.STYLE_EDGE],[null],null,t),this.styleChange(e,mxResources.get("entityRelation"),[mxConstants.STYLE_EDGE],["entityRelationEdgeStyle"],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("horizontal"),[mxConstants.STYLE_EDGE,mxConstants.STYLE_ELBOW],["elbowEdgeStyle","horizontal"],null,t),this.styleChange(e,mxResources.get("vertical"),[mxConstants.STYLE_EDGE,mxConstants.STYLE_ELBOW],["elbowEdgeStyle","vertical"],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("manual"),[mxConstants.STYLE_EDGE],["segmentEdgeStyle"],null,t),this.styleChange(e,mxResources.get("automatic"),[mxConstants.STYLE_EDGE],["orthogonalEdgeStyle"],null,t)}))),this.put("lineend",new Menu(mxUtils.bind(this,function(e,t){this.styleChange(e,mxResources.get("classic"),[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_CLASSIC],null,t),this.styleChange(e,mxResources.get("openArrow"),[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_OPEN],null,t),this.styleChange(e,mxResources.get("block"),[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_BLOCK],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("oval"),[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_OVAL],null,t),this.styleChange(e,mxResources.get("diamond"),[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_DIAMOND],null,t),this.styleChange(e,mxResources.get("diamondThin"),[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_DIAMOND_THIN],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("none"),[mxConstants.STYLE_ENDARROW],[mxConstants.NONE],null,t),e.addSeparator(t),e.addItem(mxResources.get("transparent"),null,function(){i.toggleCellStyles("endFill",!0)},t,null,!0),e.addSeparator(t),this.promptChange(e,mxResources.get("size"),"(px)",mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_ENDSIZE,t)}))),this.put("linestart",new Menu(mxUtils.bind(this,function(e,t){this.styleChange(e,mxResources.get("classic"),[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_CLASSIC],null,t),this.styleChange(e,mxResources.get("openArrow"),[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_OPEN],null,t),this.styleChange(e,mxResources.get("block"),[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_BLOCK],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("oval"),[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_OVAL],null,t),this.styleChange(e,mxResources.get("diamond"),[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_DIAMOND],null,t),this.styleChange(e,mxResources.get("diamondThin"),[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_DIAMOND_THIN],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("none"),[mxConstants.STYLE_STARTARROW],[mxConstants.NONE],null,t),e.addSeparator(t),e.addItem(mxResources.get("transparent"),null,function(){i.toggleCellStyles("startFill",!0)},t,null,!0),e.addSeparator(t),this.promptChange(e,mxResources.get("size"),"(px)",mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_STARTSIZE,t)}))),this.put("spacing",new Menu(mxUtils.bind(this,function(e,t){var n=this.editorUi.actions.get("shadow").enabled,a=this.get("line").enabled;(n||e.showDisabled)&&(this.promptChange(e,mxResources.get("top"),"(px)","0",mxConstants.STYLE_SPACING_TOP,t,n),this.promptChange(e,mxResources.get("right"),"(px)","0",mxConstants.STYLE_SPACING_RIGHT,t,n),this.promptChange(e,mxResources.get("bottom"),"(px)","0",mxConstants.STYLE_SPACING_BOTTOM,t,n),this.promptChange(e,mxResources.get("left"),"(px)","0",mxConstants.STYLE_SPACING_LEFT,t,n),e.addSeparator(t),this.promptChange(e,mxResources.get("global"),"(px)","0",mxConstants.STYLE_SPACING,t,n),this.promptChange(e,mxResources.get("perimeter"),"(px)","0",mxConstants.STYLE_PERIMETER_SPACING,t,n)),(a||e.showDisabled)&&(e.addSeparator(t),this.promptChange(e,mxResources.get("sourceSpacing"),"(px)","0",mxConstants.STYLE_SOURCE_PERIMETER_SPACING,t,a),this.promptChange(e,mxResources.get("targetSpacing"),"(px)","0",mxConstants.STYLE_TARGET_PERIMETER_SPACING,t,a))}))),this.put("format",new Menu(mxUtils.bind(this,function(e,t){this.addMenuItem(e,"style",t)}))),this.put("text",new Menu(mxUtils.bind(this,function(e,t){var n=this.get("text").enabled;e.addSeparator(t),this.addSubmenu("fontFamily",e,t),this.addSubmenu("fontSize",e,t),this.addMenuItems(e,["-","bold","italic","underline","-"],t),this.addSubmenu("alignment",e,t),this.addMenuItem(e,"wordWrap",t),e.addSeparator(t),this.promptChange(e,mxResources.get("textOpacity"),"(%)","100",mxConstants.STYLE_TEXT_OPACITY,t,n),e.addItem(mxResources.get("hide"),null,function(){i.toggleCellStyles(mxConstants.STYLE_NOLABEL,!1)},t,null,n)}))),this.put("alignment",new Menu(mxUtils.bind(this,function(e,t){this.styleChange(e,mxResources.get("leftAlign"),[mxConstants.STYLE_ALIGN],[mxConstants.ALIGN_LEFT],null,t),this.styleChange(e,mxResources.get("center"),[mxConstants.STYLE_ALIGN],[mxConstants.ALIGN_CENTER],null,t),this.styleChange(e,mxResources.get("rightAlign"),[mxConstants.STYLE_ALIGN],[mxConstants.ALIGN_RIGHT],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("topAlign"),[mxConstants.STYLE_VERTICAL_ALIGN],[mxConstants.ALIGN_TOP],null,t),this.styleChange(e,mxResources.get("middle"),[mxConstants.STYLE_VERTICAL_ALIGN],[mxConstants.ALIGN_MIDDLE],null,t),this.styleChange(e,mxResources.get("bottomAlign"),[mxConstants.STYLE_VERTICAL_ALIGN],[mxConstants.ALIGN_BOTTOM],null,t),e.addSeparator(t),this.addSubmenu("position",e,t),this.addSubmenu("spacing",e,t),e.addSeparator(t);var n=this.get("text").enabled;e.addItem(mxResources.get("vertical"),null,function(){i.toggleCellStyles(mxConstants.STYLE_HORIZONTAL,!0)},t,null,n)}))),this.put("position",new Menu(mxUtils.bind(this,function(e,t){this.styleChange(e,mxResources.get("left"),[mxConstants.STYLE_LABEL_POSITION,mxConstants.STYLE_ALIGN],[mxConstants.ALIGN_LEFT,mxConstants.ALIGN_RIGHT],null,t),this.styleChange(e,mxResources.get("center"),[mxConstants.STYLE_LABEL_POSITION,mxConstants.STYLE_ALIGN],[mxConstants.ALIGN_CENTER,mxConstants.ALIGN_CENTER],null,t),this.styleChange(e,mxResources.get("right"),[mxConstants.STYLE_LABEL_POSITION,mxConstants.STYLE_ALIGN],[mxConstants.ALIGN_RIGHT,mxConstants.ALIGN_LEFT],null,t),e.addSeparator(t),this.styleChange(e,mxResources.get("top"),[mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.STYLE_VERTICAL_ALIGN],[mxConstants.ALIGN_TOP,mxConstants.ALIGN_BOTTOM],null,t),this.styleChange(e,mxResources.get("middle"),[mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.STYLE_VERTICAL_ALIGN],[mxConstants.ALIGN_MIDDLE,mxConstants.ALIGN_MIDDLE],null,t),this.styleChange(e,mxResources.get("bottom"),[mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.STYLE_VERTICAL_ALIGN],[mxConstants.ALIGN_BOTTOM,mxConstants.ALIGN_TOP],null,t)}))),this.put("direction",new Menu(mxUtils.bind(this,function(e,t){e.addItem(mxResources.get("flipH"),null,function(){i.toggleCellStyles(mxConstants.STYLE_FLIPH,!1)},t),e.addItem(mxResources.get("flipV"),null,function(){i.toggleCellStyles(mxConstants.STYLE_FLIPV,!1)},t),this.addMenuItems(e,["-","tilt","rotation"],t)}))),this.put("align",new Menu(mxUtils.bind(this,function(e,t){e.addItem(mxResources.get("leftAlign"),null,function(){i.alignCells(mxConstants.ALIGN_LEFT)},t),e.addItem(mxResources.get("center"),null,function(){i.alignCells(mxConstants.ALIGN_CENTER)},t),e.addItem(mxResources.get("rightAlign"),null,function(){i.alignCells(mxConstants.ALIGN_RIGHT)},t),e.addSeparator(t),e.addItem(mxResources.get("topAlign"),null,function(){i.alignCells(mxConstants.ALIGN_TOP)},t),e.addItem(mxResources.get("middle"),null,function(){i.alignCells(mxConstants.ALIGN_MIDDLE)},t),e.addItem(mxResources.get("bottomAlign"),null,function(){i.alignCells(mxConstants.ALIGN_BOTTOM)},t)}))),this.put("layout",new Menu(mxUtils.bind(this,function(e,t){e.addItem(mxResources.get("horizontalFlow"),null,mxUtils.bind(this,function(){var e=new mxHierarchicalLayout(i,mxConstants.DIRECTION_WEST);this.editorUi.executeLayout(e,!0,!0)}),t),e.addItem(mxResources.get("verticalFlow"),null,mxUtils.bind(this,function(){var e=new mxHierarchicalLayout(i,mxConstants.DIRECTION_NORTH);this.editorUi.executeLayout(e,!0,!0)}),t)}))),this.put("navigation",new Menu(mxUtils.bind(this,function(e,t){this.addMenuItems(e,["home","-","exitGroup","enterGroup","-","expand","collapse"],t)}))),this.put("arrange",new Menu(mxUtils.bind(this,function(e,t){this.addMenuItems(e,["toFront","toBack","-"],t),this.addSubmenu("layout",e,t),e.addSeparator(t),this.addMenuItems(e,["-","group","ungroup","removeFromGroup"],t)}))),this.put("view",new Menu(mxUtils.bind(this,function(t,n){this.addMenuItems(t,["actualSize"],n),t.addSeparator();for(var e=[.25,.5,.75,1,2,4],a=0;a<e.length;a++)!function(e){t.addItem(100*e+"%",null,function(){i.zoomTo(e)},n)}(e[a]);this.addMenuItems(t,["-","zoomIn","zoomOut","-","fitWindow","customZoom","-","fitPage","fitPageWidth"],n)}))),this.put("file",new Menu(mxUtils.bind(this,function(e,t){this.addMenuItems(e,["new","open","-","save","saveAs","publish","-","variable","-","import","export","-","editFile","description","-","print"],t)}))),this.put("edit",new Menu(mxUtils.bind(this,function(e,t){this.addMenuItems(e,["undo","redo","-","cut","copy","paste","delete","-","duplicate","-","selectVertices","selectEdges","selectAll"])}))),this.put("help",new Menu(mxUtils.bind(this,function(e,t){this.addMenuItems(e,["help","-","about"])})))},Menus.prototype.put=function(e,t){this.menus[e]=t},Menus.prototype.get=function(e){return this.menus[e]},Menus.prototype.addSubmenu=function(e,t,n){var a=this.get(e).enabled;if(t.showDisabled||a){var i=t.addItem(mxResources.get(e),null,null,n,null,a);this.addMenu(e,t,i)}},Menus.prototype.addMenu=function(e,t,n){var a=this.get(e);null!=a&&(t.showDisabled||a.enabled)&&this.get(e).execute(t,n)},Menus.prototype.styleChange=function(e,t,n,a,i,s){return e.addItem(t,null,mxUtils.bind(this,function(){var e=this.editorUi.editor.graph;e.getModel().beginUpdate();try{for(var t=0;t<n.length;t++)e.setCellStyles(n[t],a[t])}finally{e.getModel().endUpdate()}}),s,i)},Menus.prototype.promptChange=function(e,t,a,i,s,n,o){return e.addItem(t,null,mxUtils.bind(this,function(){var e=this.editorUi.editor.graph,t=i,n=e.getView().getState(e.getSelectionCell());null!=n&&(t=n.style[s]||t),null!=(t=mxUtils.prompt(mxResources.get("enterValue")+(0<a.length?" "+a:""),t))&&0<t.length&&e.setCellStyles(s,t)}),n,null,o)},Menus.prototype.addMenuItem=function(e,t,n){var a=this.editorUi.actions.get(t);if(null==a||!e.showDisabled&&!a.enabled)return null;var i=e.addItem(a.label,null,a.funct,n,null,a.enabled);return a.toggleAction&&a.isSelected()&&this.addCheckmark(i),this.addShortcut(i,a),i},Menus.prototype.addShortcut=function(e,t){if(null!=t.shortcut){var n=e.firstChild.nextSibling.nextSibling,a=document.createElement("span");a.style.color="gray",mxUtils.write(a,t.shortcut),n.appendChild(a)}},Menus.prototype.addCheckmark=function(e){var t=e.firstChild.nextSibling;t.style.backgroundImage="url("+IMAGE_PATH+"/checkmark.gif)",t.style.backgroundRepeat="no-repeat",t.style.backgroundPosition="2px 50%"},Menus.prototype.addMenuItems=function(e,t,n){for(var a=0;a<t.length;a++)"-"==t[a]?e.addSeparator(n):this.addMenuItem(e,t[a],n)},Menus.prototype.createPopupMenu=function(e,t,n){var a=this.editorUi.editor.graph;if(e.smartSeparators=!0,a.isSelectionEmpty()?this.addMenuItems(e,["undo","redo","-","paste","-"]):(this.addMenuItems(e,["delete","-","cut","copy","-","duplicate"]),1==a.getSelectionCount()&&a.getModel().isEdge(a.getSelectionCell())&&this.addMenuItems(e,["setAsDefaultEdge"]),e.addSeparator()),0<a.getSelectionCount()){if(this.addMenuItems(e,["toFront","toBack","-"]),a.getModel().isEdge(a.getSelectionCell())){var i=!1;if(null!=(t=a.getSelectionCell())&&a.getModel().isEdge(t)){var s=a.selectionCellsHandler.getHandler(t);if(s instanceof mxEdgeHandler&&null!=s.bends&&2<s.bends.length){var o=s.getHandleForEvent(new mxMouseEvent(n)),r=this.editorUi.actions.get("removeWaypoint");r.handler=s,i=0<(r.index=o)&&o<s.bends.length}}this.addMenuItems(e,["-",i?"removeWaypoint":"addWaypoint"])}else 1<a.getSelectionCount()&&(e.addSeparator(),this.addMenuItems(e,["group"]));if(e.addSeparator(),1==a.getSelectionCount())null!=a.getLinkForCell(a.getSelectionCell())&&this.addMenuItems(e,["openLink"])}else this.addMenuItems(e,["-","selectVertices","selectEdges","-","selectAll"])},Menus.prototype.createMenubar=function(e){var t=new Menubar(this.editorUi,e),n=[];n=CRUD_PERMISSIONS.canEdit?["file","edit","view","format","text","arrange","help"]:["file","view","help"];for(var a=0;a<n.length;a++)t.addMenu(mxResources.get(n[a]),this.get(n[a]).funct);return t},Menubar.prototype.hideMenu=function(){null!=this.currentMenu&&this.currentMenu.hideMenu()},Menubar.prototype.addMenu=function(e,t){var n=document.createElement("a");return n.setAttribute("href","javascript:void(0);"),n.className="geItem",mxUtils.write(n,e),this.addMenuHandler(n,t),this.container.appendChild(n),n},Menubar.prototype.getOffset=function(e){return{left:(e=e.getBoundingClientRect()).left+window.scrollX,top:e.top+window.scrollY}},Menubar.prototype.addMenuHandler=function(i,s){if(null!=s){var o=!0,t=mxUtils.bind(this,function(e){if(o&&null==i.enabled||i.enabled){this.editorUi.editor.graph.panningHandler.hideMenu();var t=new mxPopupMenu(s);t.div.className+=" geMenubarMenu",t.smartSeparators=!0,t.showDisabled=!0,t.autoExpand=!0,t.hideMenu=mxUtils.bind(this,function(){mxPopupMenu.prototype.hideMenu.apply(t,arguments),t.destroy(),this.currentMenu=null,this.currentElt=null});var n=this.getOffset(i).left,a=this.getOffset(i).top+i.offsetHeight;t.popup(n,a,null,e),this.currentMenu=t,this.currentElt=i}o=!0,mxEvent.consume(e)});mxEvent.addListener(i,"mousemove",mxUtils.bind(this,function(e){null!=this.currentMenu&&this.currentElt!=i&&(this.hideMenu(),t(e))})),mxEvent.addListener(i,"mousedown",mxUtils.bind(this,function(){o=this.currentElt!=i})),mxEvent.addListener(i,"click",t)}},mxUtils.extend(Menu,mxEventSource),Menu.prototype.setEnabled=function(e){this.enabled!=e&&(this.enabled=e,this.fireEvent(new mxEventObject("stateChanged")))},Menu.prototype.execute=function(e,t){this.funct(e,t)},Toolbar.prototype.init=function(){CRUD_PERMISSIONS.canEdit?this.addItems(["save","publish","-","print","undo","redo","-","copy","cut","paste","delete","-","duplicate","-","actualSize","zoomIn","zoomOut","-"]):this.addItems(["print","actualSize","zoomIn","zoomOut","-"])},Toolbar.prototype.hideMenu=function(){null!=this.currentMenu&&(this.currentMenu.hideMenu(),this.currentMenu.destroy(),this.currentMenu=null)},Toolbar.prototype.addMenu=function(e,t,n,a){var i=this.editorUi.menus.get(a),s=this.addMenuFunction(e,t,n,i.funct);return i.addListener("stateChanged",function(){s.setEnabled(i.enabled)}),s},Toolbar.prototype.addMenuFunction=function(e,t,n,a){var i=n?this.createLabel(e):this.createButton(e);return this.initElement(i,t),this.addMenuHandler(i,n,a),this.container.appendChild(i),i},Toolbar.prototype.addSeparator=function(){var e=document.createElement("div");return e.className="geSeparator",this.container.appendChild(e),e},Toolbar.prototype.addItems=function(e){for(var t=0;t<e.length;t++){var n=e[t];"-"==n?this.addSeparator():this.addItem("geSprite-"+n.toLowerCase(),n)}},Toolbar.prototype.addItem=function(e,t){var n=this.editorUi.actions.get(t),a=null;return null!=n&&((a=this.addButton(e,n.label,n.funct)).setEnabled(n.enabled),n.addListener("stateChanged",function(){a.setEnabled(n.enabled)})),a},Toolbar.prototype.addButton=function(e,t,n){var a=this.createButton(e);return this.initElement(a,t),this.addClickHandler(a,n),this.container.appendChild(a),a},Toolbar.prototype.addSelectionHandler=function(n){var a=this.editorUi.editor.graph,e=function(){for(var e=!a.isSelectionEmpty(),t=0;t<n.length;t++)n[t].setEnabled(e)};a.getSelectionModel().addListener(mxEvent.CHANGE,e),e()},Toolbar.prototype.addEdgeSelectionHandler=function(a){var i=this.editorUi.editor.graph,e=function(){var e=!1;if(!i.isSelectionEmpty())for(var t=i.getSelectionCells(),n=0;n<t.length;n++)if(i.getModel().isEdge(t[n])){e=!0;break}for(n=0;n<a.length;n++)a[n].setEnabled(e)};i.getSelectionModel().addListener(mxEvent.CHANGE,e),e()},Toolbar.prototype.initElement=function(e,t){e.setAttribute("tabindex","0"),null!=t&&e.setAttribute("title",t),this.addEnabledState(e)},Toolbar.prototype.addEnabledState=function(t){var n=t.className;t.setEnabled=function(e){t.enabled=e,t.className=e?n:n+" geDisabled"},t.setEnabled(!0)},Toolbar.prototype.addClickHandler=function(t,n){null!=n&&mxEvent.addListener(t,"click",function(e){t.enabled&&n(e),mxEvent.consume(e)})},Toolbar.prototype.createButton=function(e){var t=document.createElement("a");t.setAttribute("href","javascript:void(0);"),t.className="geButton";var n=document.createElement("div");return n.className="geSprite "+e,t.appendChild(n),t},Toolbar.prototype.createLabel=function(e,t){var n=document.createElement("a");return n.setAttribute("href","javascript:void(0);"),n.className="geLabel",mxUtils.write(n,e),n},Toolbar.prototype.addMenuHandler=function(t,n,a,i){if(null!=a){var s=this.editorUi.editor.graph,o=null;mxEvent.addListener(t,"click",mxUtils.bind(this,function(e){(null==t.enabled||t.enabled)&&(s.panningHandler.hideMenu(),(o=new mxPopupMenu(a)).div.className+=" geToolbarMenu",o.showDisabled=i,o.labels=n,o.autoExpand=!0,o.popup(t.offsetLeft,t.offsetTop+t.offsetHeight+34,null,e),this.currentMenu=o),mxEvent.consume(e)}))}},Dialog.prototype.close=function(){null!=this.onDialogClose&&(this.onDialogClose(),this.onDialogClose=null),this.container.parentNode.removeChild(this.container),this.bg.parentNode.removeChild(this.bg)},angular.module("motion").run(["$templateCache",function(e){"use strict";e.put("app/auth/services/hotdesk/dialog.html",'<md-dialog aria-label="Telephone">\n    <form ng-cloak>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div flex>\n                    <span class="title" translate="LOGIN.TELEPHONES">Telephones</span>\n                </div>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content>\n            <md-select ng-model="vm.name" placeholder="Select a telephone">\n                <md-option value="{{telephone.name}}" ng-repeat="telephone in vm.telephones.rows">{{telephone.fullname}}</md-option>\n            </md-select>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row">\n            <md-button ng-click="vm.closeDialog(vm.name)" class="send-button md-accent md-raised" aria-label="call" ng-disabled="!vm.name">\n                <span translate="LOGIN.SELECT">SELECT</span>\n            </md-button>\n            \x3c!-- <md-button ng-click="vm.closeDialog()" class="send-button md-accent md-raised" aria-label="cancel">\n                <span translate="LOGIN.CANCEL">Cancel</span>\n            </md-button> --\x3e\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/core/directives/ms-advanced-filter/ms-advanced-filter.html",'<div ng-cloak layout="column" class="advanced-filter-container">\n    <div layout="row" ng-if="options.activeConditions.length > 0" class="advanced-filter-conditions">\n        <md-list>\n            <md-list-item>\n                <md-chips ng-model="options.activeConditions" class="advanced-filter-chips" readonly="true" md-removable="true" md-on-remove="removeCondition()">\n                    <md-chip-template>\n                        <span>\n                            <p class="filter-text">{{ $chip.name }}</p>\n                            <p ng-show="$chip.condition" class="filter-text">{{ $chip.condition.name }}</p>\n                            <strong>{{ $chip.displayValue }}</strong>\n                        </span>\n                    </md-chip-template>\n                    <button md-chip-remove class="md-primary remove-filter">\n                        <md-icon md-font-icon="icon-cancel" aria-label="Remove Filter"></md-icon>\n                    </button>\n                </md-chips>\n            </md-list-item>\n        </md-list>\n        <div layout="row" layout-align="end center" flex>\n            <md-button class="md-raised" aria-label="Apply" translate translate-attr-aria-label="DASHBOARDS.APPLY" ng-click="applyFilter()">APPLY</md-button>\n            <md-button class="md-raised" aria-label="Clear" translate translate-attr-aria-label="DASHBOARDS.CLEAR" ng-click="clearConditions()">CLEAR</md-button>\n        </div>\n    </div>\n\n    <div layout="row" class="configuration-bar" layout-margin flex>\n        <md-input-container flex="33">\n            <label>Select field</label>\n            <md-icon md-font-icon="icon-filter-variant"></md-icon>\n            <md-select class="font-size-12" ng-model="options.selectedField" ng-change="getValues(options.selectedField)" aria-label="Field">\n                <md-option ng-value="field" ng-repeat="field in options.fields">{{ field.name }}</md-option>\n            </md-select>\n        </md-input-container>\n        <md-input-container ng-if="options.selectedField && [\'number\', \'text\'].indexOf(options.selectedField.type) > -1" flex="30">\n            <label>Select condition</label>\n            <md-icon md-font-icon="icon-format-text"></md-icon>\n            <md-select class="font-size-12" ng-model="options.selectedCondition" aria-label="Condition">\n                <md-option ng-value="condition" ng-repeat="condition in conditions">{{ condition.name }}</md-option>\n            </md-select>\n        </md-input-container>\n        <md-input-container ng-if="options.selectedField && options.selectedField.type === \'text\'" class="no-errors" flex="33">\n            <label>Value</label>\n            <md-icon md-font-icon="icon-format-text"></md-icon>\n            <input type="text" aria-label="Value" ng-model="options.selectedValue" ng-disabled="!options.selectedField" ng-keyup="$event.keyCode == 13 ? addNewCondition(options.selectedField, options.selectedCondition, options.selectedValue) : null"></input>\n        </md-input-container>\n        <md-input-container ng-if="options.selectedField && options.selectedField.type === \'number\'" class="no-errors" flex="33">\n            <label>Value</label>\n            <md-icon md-font-icon="icon-numeric"></md-icon>\n            <input type="number" aria-label="Value" ng-model="options.selectedValue" ng-disabled="!options.selectedField" ng-keyup="$event.keyCode == 13 ? addNewCondition(options.selectedField, options.selectedCondition, options.selectedValue) : null"></input>\n        </md-input-container>\n        <md-input-container ng-if="options.selectedField.type === \'select\'" flex="33">\n            <label>Value</label>\n            <md-icon md-font-icon="icon-format-text"></md-icon>\n            <md-select class="font-size-12" multiple="true" ng-model="options.selectedValue" ng-model-options="{trackBy: \'$value.id\'}" aria-label="Value">\n                <md-option ng-value="item" ng-repeat="item in options.selectedField.values">{{item.name}}</md-option>\n            </md-select>\n        </md-input-container>\n        <div layout="row" layout-align="start start" ng-if="options.selectedField.type === \'date\'" class="no-errors" flex="33">\n            <md-icon md-font-icon="icon-calendar"></md-icon>\n            <md-date-range localization-map="vm.localizationMap" ng-model="options.selectedValue" auto-confirm="true" show-template="true" placeholder="Value" flex></md-date-range>\n        </div>\n        <div layout="row" layout-align="start start" ng-if="options.selectedField.type === \'autocomplete\'" class="autocomplete-filter" flex="33">\n            <md-icon md-font-icon="icon-format-text"></md-icon>\n            <md-chips ng-model="options.selectedValue" md-autocomplete-snap md-require-match="true" input-aria-label="Selected values" flex>\n                <md-autocomplete flex md-no-cache="true" md-items="item in options.selectedField.values" md-search-text="options.searchText" md-search-text-change="searchText(options.selectedField, options.searchText)" md-item-text="item.name" placeholder="Select value">\n                    <md-item-template>\n                        <span md-highlight-text="options.searchText">{{item.name}}</span>\n                    </md-item-template>\n                </md-autocomplete>\n                <md-chip-template>\n                    <span>{{$chip.name}}</span>\n                </md-chip-template>\n            </md-chips>\n        </div>\n        <md-button class="md-raised" ng-hide="!options.selectedField" ng-disabled="!options.selectedValue && (options.selectedChips.length === 0)" aria-label="Add filter" ng-click="addNewCondition(options.selectedField, options.selectedCondition, options.selectedValue)" translate translate-attr-aria-label="DASHBOARDS.ADD">\n            ADD\n        </md-button>\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-1/template-1.html",'<div class="template-1">\n    <div class="media">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n\n    <div class="content pv-24 ph-16">\n        <div class="title h1" ng-if="card.title">\n            {{card.title}}\n        </div>\n\n        <div class="subtitle secondary-text" ng-if="card.subtitle">\n            {{card.subtitle}}\n        </div>\n\n        <div class="text pt-16" ng-if="card.text">\n            {{card.text}}\n        </div>\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-10/template-10.html",'<div class="template-10 p-16">\n    <div class="pb-16" layout="row" layout-align="space-between center">\n        <div class="info">\n            <div class="title secondary-text" ng-if="card.title">\n                {{card.title}}\n            </div>\n\n            <div class="subtitle h2" ng-if="card.subtitle">\n                {{card.subtitle}}\n            </div>\n        </div>\n\n        <div class="media ml-16">\n            <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n        </div>\n    </div>\n\n    <div class="text">\n        {{card.text}}\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-2/template-2.html",'<div class="template-2">\n    <div class="header p-16" layout="row" layout-align="start center">\n        <div ng-if="card.avatar">\n            <img class="avatar mr-16" ng-src="{{card.avatar.src}}" alt="{{card.avatar.alt}}">\n        </div>\n\n        <div class="info">\n            <div class="title" ng-if="card.title">\n                {{card.title}}\n            </div>\n\n            <div class="subtitle secondary-text" ng-if="card.subtitle">\n                {{card.subtitle}}\n            </div>\n        </div>\n    </div>\n\n    <div class="media">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n\n    <div class="text p-16" ng-if="card.text">\n        {{card.text}}\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-3/template-3.html",'<div class="template-3 p-16 teal-bg white-fg" layout="row" layout-align="space-between">\n    <div layout="column" layout-align="space-between">\n        <div class="info">\n            <div class="title h1" ng-if="card.title">\n                {{card.title}}\n            </div>\n\n            <div class="subtitle h3 secondary-text" ng-if="card.subtitle">\n                {{card.subtitle}}\n            </div>\n        </div>\n\n        <div class="cta">\n            <md-button class="m-0">{{card.cta}}</md-button>\n        </div>\n    </div>\n\n    <div class="media pl-16">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-4/template-4.html",'<div class="template-4">\n    <div class="info white-fg ph-16 pv-24">\n        <div class="title h1" ng-if="card.title">\n            {{card.title}}\n        </div>\n\n        <div class="text" ng-if="card.text">\n            {{card.text}}\n        </div>\n    </div>\n\n    <div class="media">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-5/template-5.html",'<div class="template-5 p-16" layout="row" layout-align="space-between start">\n    <div class="info">\n        <div class="title secondary-text" ng-if="card.title">\n            {{card.title}}\n        </div>\n\n        <div class="event h2" ng-if="card.event">\n            {{card.event}}\n        </div>\n    </div>\n\n    <div class="media ml-16">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-6/template-6.html",'<div class="template-6">\n    <div class="content pv-24 ph-16">\n        <div class="subtitle secondary-text" ng-if="card.subtitle">\n            {{card.subtitle}}\n        </div>\n\n        <div class="title h2" ng-if="card.title">\n            {{card.title}}\n        </div>\n\n        <div class="text pt-8" ng-if="card.text">\n            {{card.text}}\n        </div>\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-7/template-7.html",'<div class="template-7" layout="row" layout-align="space-between">\n    <div class="info" layout="column" layout-align="space-between" layout-fill flex>\n        <div class="p-16">\n            <div class="title h1" ng-if="card.title">\n                {{card.title}}\n            </div>\n\n            <div class="subtitle h4 secondary-text" ng-if="card.subtitle">\n                {{card.subtitle}}\n            </div>\n\n            <div class="text h4 pt-8" ng-if="card.text">\n                {{card.text}}\n            </div>\n        </div>\n\n        <div>\n            <md-divider></md-divider>\n            <div class="p-8" layout="row">\n                <md-icon md-font-icon="icon-star-outline" class="mh-5"></md-icon>\n                <md-icon md-font-icon="icon-star-outline" class="mh-5"></md-icon>\n                <md-icon md-font-icon="icon-star-outline" class="mh-5"></md-icon>\n                <md-icon md-font-icon="icon-star-outline" class="mh-5"></md-icon>\n                <md-icon md-font-icon="icon-star-outline" class="mh-5"></md-icon>\n            </div>\n        </div>\n    </div>\n\n    <div class="media">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-8/template-8.html",'<div class="template-8">\n    <div class="media">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n\n    <div class="content pv-24 ph-16">\n        <div class="title h1" ng-if="card.title">\n            {{card.title}}\n        </div>\n\n        <div class="subtitle secondary-text" ng-if="card.subtitle">\n            {{card.subtitle}}\n        </div>\n\n        <div class="buttons pt-16">\n            <md-button class="m-0">{{card.button1}}</md-button>\n            <md-button class="m-0 md-accent">{{card.button2}}</md-button>\n        </div>\n\n        <div class="text pt-16" ng-if="card.text">\n            {{card.text}}\n        </div>\n    </div>\n</div>'),e.put("app/core/directives/ms-card/templates/template-9/template-9.html",'<div class="template-9">\n    <div class="header p-16" layout="row" layout-align="start center">\n        <div ng-if="card.avatar">\n            <img class="avatar mr-16" ng-src="{{card.avatar.src}}" alt="{{card.avatar.alt}}">\n        </div>\n\n        <div class="info">\n            <div class="title" ng-if="card.title">\n                {{card.title}}\n            </div>\n\n            <div class="subtitle secondary-text" ng-if="card.subtitle">\n                {{card.subtitle}}\n            </div>\n\n        </div>\n    </div>\n\n    <div class="text ph-16 pb-16" ng-if="card.text">\n        {{card.text}}\n    </div>\n\n    <div class="media">\n        <img class="image" ng-src="{{card.media.image.src}}" alt="{{card.media.image.alt}}" ng-show="card.media.image">\n    </div>\n\n    <div class="buttons m-8">\n        <md-button class="md-icon-button mr-16" aria-label="Favorite">\n            <md-icon md-font-icon="icon-heart-outline" class="s24"></md-icon>\n        </md-button>\n        <md-button class="md-icon-button" aria-label="Share">\n            <md-icon md-font-icon="icon-share" class="s24"></md-icon>\n        </md-button>\n    </div>\n\n</div>'),e.put("app/core/directives/ms-click-to-call/ms-click-to-call.html",'<section ng-if="type !== \'button\'">\n    <span ng-if="!showMenu()">{{target}}</span>\n\n    <md-menu ng-if="showMenu()">\n        <a aria-label="Target" ng-click="$mdOpenMenu($event)">\n            <span ng-if="prefix">{{prefix}}-</span>{{target}}\n        </a>\n\n        <md-menu-content width="2">\n            <md-menu-item>\n                <md-button ng-click="call(prefix ? prefix + target : target)">\n                    {{\'DASHBOARDS.CALL_NUMBER\' | translate}} ({{prefix ? prefix + \'-\' + target : target}})\n                </md-button>\n            </md-menu-item>\n            <md-menu-item>\n                <md-button ng-click="transfer(prefix ? prefix + target : target)">\n                    {{\'DASHBOARDS.TRANSFER_NUMBER\' | translate}} ({{prefix ? prefix + \'-\' + target : target}})\n                </md-button>\n            </md-menu-item>\n        </md-menu-content>\n    </md-menu>\n</section>\n\n<section ng-if="type === \'button\'">\n    <md-button ng-if="!showMenu()" ng-disabled="true" class="md-icon-button md-raised md-accent ng-scope md-ink-ripple" title="NEW CALL" aria-label="NEW CALL">\n        <md-icon md-font-icon="icon-phone"></md-icon>\n    </md-button>\n\n    <md-menu ng-if="showMenu()">\n        <md-button class="md-icon-button md-raised md-accent ng-scope md-ink-ripple" title="NEW CALL" ng-click="$mdOpenMenu($event)" aria-label="NEW CALL">\n            <md-icon md-font-icon="icon-phone"></md-icon>\n        </md-button>\n\n        <md-menu-content width="2">\n            <md-menu-item>\n                <md-button ng-click="call(prefix ? prefix + target : target)">\n                    {{\'DASHBOARDS.CALL_NUMBER\' | translate}} ({{prefix ? prefix + \'-\' + target : target}})\n                </md-button>\n            </md-menu-item>\n            <md-menu-item>\n                <md-button ng-click="transfer(target)">\n'+"                    {{'DASHBOARDS.TRANSFER_NUMBER' | translate}} ({{prefix ? prefix + '-' + target : target}})\n                </md-button>\n            </md-menu-item>\n        </md-menu-content>\n    </md-menu>\n</section>"),e.put("app/core/directives/ms-dual-multiselect/ms-dual-multiselect.html",'<div ng-cloak layout-gt-sm="row" layout="column">\n    <div flex-gt-sm="50" flex="45">\n        <md-input-container class="md-icon-float md-block margin-0">\n            <md-icon md-font-icon="icon-magnify" aria-label="swap"></md-icon>\n            <input ng-model="query" type="text" placeholder="{{options.labelSearch || \'Search...\'}}">\n        </md-input-container>\n        <md-content class="border h-300">\n            <md-list class="md-dense no-padding" layout-fill layout-align="center center">\n                <md-list-item class="md-3-line" ng-class="options.readOnly ? \'read-only-mode\' : \'\'" ng-disabled="options.readOnly" ng-repeat="item in options.items | filter: query | orderBy: options.orderBy" ng-click="canTransfer(item, options, false)">\n                    <div class="md-list-item-text" layout="column">\n                        <h3 ng-if="options.line1">{{getLine(item, options.line1)}}</h3>\n                        <h4 ng-if="options.line2">{{getLine(item, options.line2)}}</h4>\n                        <p ng-if="options.line3">{{getLine(item, options.line3)}}</p>\n                        <p class="ms-dual-multiselect-line-xs" ng-if="options.line4">{{getLine(item, options.line4)}}\n                        </p>\n                    </div>\n                    <md-icon ng-show="!options.readOnly" md-font-icon="icon-arrow-right-bold" aria-label="swap"></md-icon>\n                    <md-divider></md-divider>\n                </md-list-item>\n            </md-list>\n        </md-content>\n        <div class="margin-10" layout="row">\n            <span class="h4" flex>{{options.labelAll || \'All Items\'}} ({{options.items.length}})</span>\n            <md-icon ng-show="options.showSelectAndDeselectAll && !options.readOnly" md-font-icon="icon-chevron-double-right" aria-label="swap" ng-click="transfer(options.items, options.selectedItems, -1, false)"></md-icon>\n        </div>\n    </div>\n\n    <div flex="10" layout="row" layout-align="center center">\n        <md-icon md-font-icon="icon-swap-horizontal" aria-label="swap"></md-icon>\n    </div>\n\n    <div flex-gt-sm="50" flex="45">\n        <md-input-container class="md-icon-float md-block margin-0">\n            <md-icon md-font-icon="icon-magnify" aria-label="swap"></md-icon>\n            <input ng-model="selectedQuery" type="text" placeholder="{{options.labelSearch || \'Search...\'}}">\n        </md-input-container>\n        <md-content class="border h-300">\n            <md-list class="md-dense no-padding" layout-fill layout-align="center center">\n                <md-list-item class="md-3-line" ng-class="options.readOnly || !item.isValid ? \'read-only-mode\' : \'\'" ng-disabled="options.readOnly" ng-repeat="item in options.selectedItems | filter: selectedQuery | orderBy: options.orderBy" ng-click="canTransfer(item, options, true)">\n                    <md-icon ng-class="options.readOnly || !item.isValid ? \'hidden\' : \'\'" md-font-icon="icon-arrow-left-bold" aria-label="swap"></md-icon>\n                    <div class="md-list-item-text" layout="column">\n                        <h3 ng-if="options.line1">{{getLine(item, options.line1)}}</h3>\n                        <h4 ng-if="options.line2">{{getLine(item, options.line2)}}</h4>\n                        <p ng-if="options.line3">{{getLine(item, options.line3)}}</p>\n                        <p class="ms-dual-multiselect-line-xs" ng-if="options.line4">{{getLine(item, options.line4)}}\n                        </p>\n                    </div>\n                    <md-divider></md-divider>\n                </md-list-item>\n            </md-list>\n        </md-content>\n        <div class="margin-10" layout="row">\n            <md-icon ng-show="options.showSelectAndDeselectAll && !options.readOnly" md-font-icon="icon-chevron-double-left" aria-label="swap" flex ng-click="transfer(options.selectedItems, options.items, -1, true)"></md-icon>\n            <span class="h4">{{options.labelSelected || \'Selected Items\'}} ({{options.selectedItems.length}})</span>\n        </div>\n    </div>\n</div>'),e.put("app/core/directives/ms-font-family/ms-font-family.html",'<md-select ng-model="ngModel" class="no-margin">\n    <md-option ng-repeat="font in fonts" ng-value="font.value" <span ng-style="{\'font-family\': font.value}">{{font.option}}</span>\n    </md-option>\n</md-select>'),e.put("app/core/directives/ms-info-bar/ms-info-bar.html",'<div id="ms-info-bar" layout="row" layout-align="start center" flex>\n    <div id="ms-info-bar-message" ng-transclude flex></div>\n    <md-button id="ms-info-bar-close" class="md-icon-button" aria-label="Close" ng-click="removeInfoBar()">\n        <md-icon md-font-icon="icon-close s20"></md-icon>\n    </md-button>\n</div>'),e.put("app/core/directives/ms-material-color-picker/ms-material-color-picker.html",'<md-menu md-position-mode="target-right target">\n\n    <div ng-click="$mdOpenMenu($event)">\n        <ms-color-picker-button>\n            <md-button aria-label="Row Color" md-menu-origin ng-click="$mdOpenMenu($event)" ng-class="vm.selectedColor.class">\n\n                <span ng-show="vm.selectedColor.palette">\n                    {{vm.selectedColor.palette}} {{vm.selectedColor.hue}}\n                </span>\n                <span ng-show="!vm.selectedColor.palette">\n                    Select Color\n                </span>\n            </md-button>\n        </ms-color-picker-button>\n    </div>\n\n    <md-menu-content class="ms-material-color-picker-menu-content" layout-column>\n\n        <header ng-class="vm.selectedColor.class || \'md-accent-bg\'" class="md-whiteframe-4dp" layout="row" layout-align="space-between center">\n            <md-button md-prevent-menu-close ng-click="vm.activateHueSelection(false,false)" class="md-icon-button" ng-class="{\'hidden\':!vm.selectedPalette}" aria-label="Palette">\n                <md-icon md-font-icon="icon-arrow-left" class="s20"></md-icon>\n            </md-button>\n\n            <span ng-if="vm.selectedColor.palette">\n                {{vm.selectedColor.palette}} {{vm.selectedColor.hue}}\n            </span>\n\n            <span ng-if="!vm.selectedColor.palette">\n                Select Color\n            </span>\n\n            <md-button class="remove-color-button md-icon-button" ng-click="vm.removeColor()" aria-label="Remove Color">\n                <md-icon md-font-icon="icon-delete" class="s20"></md-icon>\n            </md-button>\n        </header>\n\n        <div class="colors" ms-scroll>\n            <div ng-show="!vm.selectedPalette" layout="row" layout-wrap>\n                <div class="color" ng-class="\'md-\'+palette+\'-500-bg\'" ng-repeat="(palette, hues) in vm.palettes" ng-click="vm.activateHueSelection(palette,hues)" layout="row" layout-align="start end" md-prevent-menu-close md-ink-ripple>\n                    <span class="label">\n                        {{palette}}\n                    </span>\n                </div>\n            </div>\n\n            <div ng-show="vm.selectedPalette" layout="row" layout-wrap>\n                <div class="color" ng-class="\'md-\'+vm.selectedPalette+\'-\'+hue+\'-bg\'" ng-repeat="(hue, values) in vm.selectedHues" ng-click="vm.selectColor(vm.selectedPalette,hue)" layout="row" layout-align="start end" md-ink-ripple>\n                    <span class="label">\n                        {{hue}}\n                    </span>\n                    <i ng-if="vm.selectedPalette == vm.selectedColor.palette && hue == vm.selectedColor.hue" class="s16 icon-check">\n                    </i>\n                </div>\n            </div>\n\n        </div>\n\n    </md-menu-content>\n</md-menu>'),e.put("app/core/directives/ms-navigation/templates/horizontal.html",'<div class="navigation-toggle" hide-gt-sm>\n    <md-button class="md-icon-button" ng-click="vm.toggleHorizontalMobileMenu()" aria-label="Toggle Mobile Navigation">\n        <md-icon md-font-icon="icon-menu"></md-icon>\n    </md-button>\n</div>\n\n<ul class="horizontal">\n    <li ng-repeat="node in vm.navigation" ms-navigation-horizontal-node="node" ng-class="{\'has-children\': vm.hasChildren}" ng-include="\'navigation-horizontal-nested.html\'"></li>\n</ul>\n\n\x3c!-- Nested horizontal navigation template --\x3e\n<script type="text/ng-template" id="navigation-horizontal-nested.html">\n\n    <div ms-navigation-horizontal-item layout="row" ng-if="!vm.isHidden()">\n\n        <div class="ms-navigation-horizontal-button" ng-if="!node.uisref && node.title"\n             ng-class="{\'active md-accent-bg md-accent-fg\': vm.isActive}">\n            <i class="icon s18 {{node.icon}}" ng-if="node.icon"></i>\n            <span class="title" translate="{{node.translate}}" flex>{{node.title}}</span>\n            <span class="badge white-fg" style="background: {{node.badge.color}}" ng-if="node.badge">{{node.badge.content}}</span>\n            <i class="icon-chevron-right s18 arrow" ng-if="vm.hasChildren"></i>\n        </div>\n\n        <a class="ms-navigation-horizontal-button" ui-sref="{{node.uisref}}" ui-sref-active="active md-accent-bg"\n           ng-class="{\'active md-accent-bg md-accent-fg\': vm.isActive}"\n           ng-if="node.uisref && node.title">\n            <i class="icon s18 {{node.icon}}" ng-if="node.icon"></i>\n            <span class="title" translate="{{node.translate}}" flex>{{node.title}}</span>\n            <span class="badge white-fg" style="background: {{node.badge.color}}" ng-if="node.badge">{{node.badge.content}}</span>\n            <i class="icon-chevron-right s18 arrow" ng-if="vm.hasChildren"></i>\n        </a>\n\n    </div>\n\n    <ul ng-if="vm.hasChildren && !vm.isHidden()">\n        <li ng-repeat="node in node.children" ms-navigation-horizontal-node="node"\n            ng-class="{\'has-children\': vm.hasChildren}"\n            ng-include="\'navigation-horizontal-nested.html\'"></li>\n    </ul>\n\n<\/script>\n\x3c!-- / Nested navigation template --\x3e'),e.put("app/core/directives/ms-navigation/templates/vertical.html",'<ul>\n    <li ng-repeat="node in vm.navigation" ms-navigation-node="node" ng-class="{\'collapsed\': vm.collapsed, \'has-children\': vm.hasChildren}" ng-include="\'navigation-nested.html\'"></li>\n</ul>\n\n\x3c!-- Nested navigation template --\x3e\n<script type="text/ng-template" id="navigation-nested.html">\n\n    <div ms-navigation-item layout="row" ng-if="!vm.isHidden()">\n\n        <div class="ms-navigation-button" ng-if="!node.uisref && node.title">\n            <i class="icon s16 {{node.icon}}" ng-if="node.icon"></i>\n            <span class="title" translate="{{node.translate}}" flex>{{node.title}}</span>\n            <span class="badge white-fg margin-right-20" ng-style="{\'background\': node.badge.color}" ng-if="node.badge">{{node.badge.content}}</span>\n            <i class="icon-chevron-right s16 arrow" ng-if="vm.collapsable && vm.hasChildren"></i>\n        </div>\n\n        <a class="ms-navigation-button" ui-sref="{{node.uisref}}" ui-sref-active="active md-accent-bg" ng-if="node.uisref && node.title">\n            <i class="icon s16 {{node.icon}}" ng-if="node.icon"></i>\n            <span class="title" translate="{{node.translate}}" flex>{{node.title}}</span>\n            <span class="badge white-fg margin-right-20" ng-style="{\'background\': node.badge.color}" ng-if="node.badge">{{node.badge.content}}</span>\n            <i class="icon-chevron-right s16 arrow" ng-if="vm.collapsable && vm.hasChildren"></i>\n        </a>\n\n    </div>\n\n    <ul ng-if="vm.hasChildren && !vm.isHidden()">\n        <li ng-repeat="node in node.children" ms-navigation-node="node"\n            ng-class="{\'collapsed\': vm.collapsed, \'has-children\': vm.hasChildren}"\n            ng-include="\'navigation-nested.html\'"></li>\n    </ul>\n\n<\/script>\n\x3c!-- / Nested navigation template --\x3e'),e.put("assets/ms-phonebar/ms-phonebar-dialpad.html",'\x3c!-- Dialpad --\x3e\n<md-content ng-if="vm_pb.showDialpad" class="num-pad" layout="column">\n    <section layout="row" layout-align="start center">\n        <span><img class="num-pad-logo" layout-padding src="/api/settings/1/logo" alt="logo" /></span>\n        <span class="md-subhead">Dialpad</span>\n        <div layout="row" layout-align="end center" flex>\n            <md-button class="md-icon-button" ng-click="vm_pb.closeDialpad()">\n                <md-icon md-font-icon="icon-close"></md-icon>\n            </md-button>\n        </div>\n    </section>\n    <md-divider></md-divider>\n    <section layout="row">\n        <div class="span4" ng-repeat="item in ::[{n: 1, l: []}, {n: 2, l: [\'a\', \'b\', \'c\']}, {n: 3, l: [\'d\', \'e\', \'f\']}]" ng-click="vm_pb.type(item.n, true)">\n            <div class="num">\n                <div class="txt">\n                    {{item.n}} <span class="small">\n                        <p>\n                            <span ng-repeat="l in ::item.l">{{l | uppercase}}</span>\n                        </p>\n                    </span>\n                </div>\n            </div>\n        </div>\n    </section>\n    <section layout="row">\n        <div class="span4" ng-repeat="item in ::[{n: 4, l: [\'g\', \'h\', \'i\']}, {n: 5, l: [\'j\', \'k\', \'l\']}, {n: 6, l: [\'m\', \'n\', \'o\']}]" ng-click="vm_pb.type(item.n, true)">\n            <div class="num">\n                <div class="txt">\n                    {{item.n}} <span class="small">\n                        <p>\n                            <span ng-repeat="l in ::item.l">{{l | uppercase}}</span>\n                        </p>\n                    </span>\n                </div>\n            </div>\n        </div>\n    </section>\n    <section layout="row">\n        <div class="span4" ng-repeat="item in ::[{n: 7, l: [\'p\', \'q\', \'r\', \'s\']}, {n: 8, l: [\'t\', \'u\', \'v\']}, {n: 9, l: [\'w\', \'x\', \'y\', \'z\']}]" ng-click="vm_pb.type(item.n, true)">\n            <div class="num">\n                <div class="txt">\n                    {{item.n}} <span class="small">\n                        <p>\n                            <span ng-repeat="l in ::item.l">{{l | uppercase}}</span>\n                        </p>\n                    </span>\n                </div>\n            </div>\n        </div>\n    </section>\n    <section layout="row">\n        <div class="span4" ng-repeat="item in ::[{n: \'*\', l: []}]" ng-click="vm_pb.type(item.n, true)">\n            <div class="num" layout="column" layout-align="center center">\n                <div class="txt" layout="column" layout-align="center center">\n                    {{item.n}}\n                </div>\n            </div>\n        </div>\n        <div class="span4" ng-repeat="item in ::[{n: 0, l: [\'+\']}]" ng-click="vm_pb.type(item.n, true)">\n            <div class="num">\n                <div class="txt">\n                    {{item.n}} <span class="small">\n                        <p>\n                            <span ng-repeat="l in ::item.l">{{l | uppercase}}</span>\n                        </p>\n                    </span>\n                </div>\n            </div>\n        </div>\n        <div class="span4" ng-repeat="item in ::[{n: \'#\', l: []}]" ng-click="vm_pb.type(item.n, true)">\n            <div class="num" layout="column" layout-align="center center">\n                <div class="txt" layout="column" layout-align="center center">\n                    {{item.n}}\n                </div>\n            </div>\n        </div>\n    </section>\n</md-content>\n\x3c!-- Dialpad --\x3e\n\x3c!-- Input Area --\x3e\n<div layout="row" layout-align="start center">\n    <div layout="row" layout-align="center center">\n        \x3c!-- START Ringing Tone--\x3e\n        <md-button class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Ringing" ng-click="vm_pb.conf.ringingMute = !vm_pb.conf.ringingMute; vm_pb.initDevice(\'ringing\')" ng-disabled="!vm_pb.registered">\n            <md-icon md-font-icon="{{vm_pb.conf.ringingMute ? \'icon-bell-off\' : \'icon-bell-ring\'}}" class="icon s14" ng-class="vm_pb.conf.ringingMute ? \'red-fg\' : \'grey-fg\'">\n                <md-tooltip><span translate="TOOLBAR.RINGING">Ringing</span></md-tooltip>\n            </md-icon>\n        </md-button>\n        \x3c!-- END Ringing Tone --\x3e\n\n        \x3c!-- START Speaker --\x3e\n        <md-button class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Speaker" ng-click="vm_pb.conf.speakerMute = !vm_pb.conf.speakerMute; vm_pb.initDevice(\'speaker\')" ng-disabled="!vm_pb.registered">\n            <md-icon md-font-icon="{{vm_pb.conf.speakerMute ? \'icon-volume-off\' : \'icon-volume\'}}" class="icon s14" ng-class="vm_pb.conf.speakerMute ? \'red-fg\' : \'grey-fg\'">\n                <md-tooltip><span translate="TOOLBAR.SPEAKER">Speaker</span></md-tooltip>\n            </md-icon>\n        </md-button>\n        \x3c!-- END Speaker --\x3e\n\n        \x3c!-- START Microphone --\x3e\n        <md-button class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Microphone" ng-click="vm_pb.conf.microphoneMute = !vm_pb.conf.microphoneMute; vm_pb.initDevice(\'microphone\')" ng-disabled="!vm_pb.registered">\n            <md-icon md-font-icon="{{vm_pb.conf.microphoneMute ? \'icon-microphone-off\' : \'icon-microphone\'}}" class="icon s14" ng-class="vm_pb.conf.microphoneMute ? \'red-fg\' : \'grey-fg\'">\n                <md-tooltip><span translate="TOOLBAR.MICROPHONE">Microphone</span></md-tooltip>\n            </md-icon>\n        </md-button>\n        \x3c!-- END Microphone --\x3e\n\n        \x3c!-- START Registered --\x3e\n        <span>\n            <span class="quantity-indicator md-red-500-bg" ng-class="vm_pb.registered ? \'md-green-500-bg\' : \'md-red-500-bg\'"></span>\n            <md-tooltip><span>{{vm_pb.conf.license ? (vm_pb.registered ? \'TOOLBAR.REGISTERED\' : \'TOOLBAR.NOT_REGISTERED\') : \'TOOLBAR.WEBRTC_LICENSE_NOT_ENABELD\' | translate}}\n                    <timer ng-if="vm_pb.registered" interval="1000">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </span>\n        </span>\n        </md-tooltip>\n        </span>\n        \x3c!-- END Registered --\x3e\n    </div>\n    <div layout="column" layout-align="center start">\n        <div layout="row" layout-align="start center">\n            \x3c!-- START Target --\x3e\n            <angucomplete-alt id="ms-target-wrap" pause="10" local-data="vm_pb.calls" search-fields="target" title-field="target" minlength="0" input-class="input-number" disable-input="!vm_pb.registered" match-class="highlight" template-url="assets/ms-phonebar/ms-phonebar-input.html" input-changed="vm_pb.targetChanged" selected-object="vm_pb.targetSelected" clear-selected="true" ng-keypress="vm_pb.typeWrapper($event)" focus-first="true" />\n            \x3c!-- END Target --\x3e\n\n            \x3c!-- Auto Answer --\x3e\n            <div ng-if="vm_pb.conf.autoAnswer" class="red-fg" style="padding-left: 10px;">\n                <span class="font-size-20">A<span class="font-size-16">A</span></span>\n            </div>\n            \x3c!-- Auto Answer --\x3e\n\n            <md-button class="md-fab md-mini white-bg width-30 height-30" aria-label="Dialpad" ng-click="vm_pb.toggleDialpad()" ng-disabled="!vm_pb.registered">\n                <md-icon md-font-icon="icon-apps" class="icon grey-fg s16"></md-icon>\n            </md-button>\n            <md-button ng-if="vm_pb.target" class="md-fab md-mini white-bg width-25 height-25" aria-label="Call" style="margin-left: 0px;" ng-click="vm_pb.call()">\n                <md-icon md-font-icon="icon-phone" class="icon green-fg s12"></md-icon>\n            </md-button>\n        </div>\n    </div>\n</div>\n\x3c!-- START 3WC --\x3e\n<md-button ng-if="vm_pb.canGoInConference" class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="3Way" ng-click="vm_pb.start3WayConf();  $event.stopPropagation();">\n    <md-icon md-font-icon="icon-account-multiple-plus" class="icon orange-fg s14"></md-icon>\n    <md-tooltip><span translate="TOOLBAR.CONFERENCE">Conference</span></md-tooltip>\n</md-button>\n\x3c!-- END 3Way --\x3e\n\x3c!-- Input Area --\x3e\n\n<div class="toolbar-separator"></div>\n\n\x3c!-- Sessions Area --\x3e\n<div class="sessions" layout="row" layout-align="start center" flex>\n    <div layout="row" layout-align="center center" ng-if="!vm_pb.conf.license">\n        <md-icon md-font-icon="icon-account-alert" class="icon s36 red-fg"></md-icon>\n        <span layout-margin translate="TOOLBAR.WEBRTC_LICENSE_NOT_ENABELD"></span>\n    </div>\n\n    <div ng-repeat="session in vm_pb.sessions" class="session" layout="row" ng-click="(vm_pb.sessions.length > 1) && vm_pb.selectSession(session)">\n        <md-button ng-if="vm_pb.conf.recording && session.confirmed" class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Record" ng-click="vm_pb.record(session); $event.stopPropagation();">\n            <md-icon md-font-icon="icon-radiobox-marked" class="icon s14" ng-class="session.monitor ? \'red-fg\' : \'grey-fg\'"></md-icon>\n        </md-button>\n        <div layout="column" layout-align="center start">\n            <span class="session-info">{{ (session.user == session.name) ? session.user : (session.name + \' \' + session.user) }}</span>\n            <span class="session-info" layout="row" layout="start center">\n                <timer interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n            </span>\n        </div>\n\n        \x3c!-- START Answer --\x3e\n        <md-button ng-if="session.incoming && !session.confirmed" class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Hold" ng-click="vm_pb.answer(session); $event.stopPropagation();">\n            <md-icon md-font-icon="icon-phone" class="icon green-fg s12"></md-icon>\n        </md-button>\n        \x3c!-- END Answer --\x3e\n\n        \x3c!-- START Hangup --\x3e\n        <md-button class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Terminate" ng-click="vm_pb.terminate(session); $event.stopPropagation();">\n            <md-icon md-font-icon="icon-phone-hangup" class="icon red-fg s12"></md-icon>\n        </md-button>\n        \x3c!-- END Hangup --\x3e\n\n        \x3c!-- START Hold/Unhold --\x3e\n        <md-button ng-if="session.confirmed && !vm_pb.isInConference" class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Hold" ng-click="(session.localHold ? vm_pb.unhold(session) : vm_pb.hold(session)); $event.stopPropagation();">\n            <md-icon md-font-icon="{{session.localHold ? \'icon-play\' : \'icon-pause\'}}" class="icon grey-fg s12"></md-icon>\n        </md-button>\n        \x3c!-- END Hold/Unhold --\x3e\n\n        \x3c!-- START Transfer --\x3e\n        <md-button ng-if="session.confirmed && !session.localHold && vm_pb.sessions.length == 1 && !vm_pb.isInConference" class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Refer" ng-click="vm_pb.refer(session);  $event.stopPropagation();">\n            <md-icon md-font-icon="icon-phone-forward" class="icon purple-fg s12"></md-icon>\n        </md-button>\n        \x3c!-- END transfer --\x3e\n\n        \x3c!-- START Attended Transfer --\x3e\n        <md-button ng-if="session.confirmed && !session.localHold && vm_pb.sessions.length>1" class="md-fab md-mini white-bg width-25 height-25 margin-5" aria-label="Refer Attended" ng-click="vm_pb.referAttended(session);  $event.stopPropagation();">\n            <md-icon md-font-icon="icon-phone-forward" class="icon purple-fg s12"></md-icon>\n        </md-button>\n        \x3c!-- END Attended Transfer --\x3e\n    </div>\n</div>\n\x3c!-- Sessions Area --\x3e'),e.put("assets/ms-phonebar/ms-phonebar-input.html",'<div class="angucomplete-holder" ng-class="{\'angucomplete-dropdown-visible\': showDropdown}">\n    <input id="ms-target" ng-model="searchStr" ng-disabled="disableInput" type="text" placeholder="{{placeholder}}" ng-focus="onFocusHandler()" class="{{inputClass}}" ng-focus="resetHideResults()" ng-blur="hideResults($event)" autocapitalize="off" autocorrect="off" autocomplete="off" ng-change="inputChangeHandler(searchStr)" />\n    <div class="angucomplete-dropdown" ng-show="showDropdown && !(!searching && (!results || results.length == 0))">\n        <div class="angucomplete-row" ng-repeat="result in results" ng-click="selectResult(result)" ng-mouseenter="hoverRow($index)" ng-class="{\'angucomplete-selected-row\': $index == currentIndex}">\n            <div layout="row" layout-align="start center">\n                <md-icon md-font-icon="{{result.originalObject.inbound ? \'icon-arrow-bottom-left\' : \'icon-arrow-top-right\'}}" class="icon no-margin s22"></md-icon>\n                <span style="margin-left: 8px;">({{result.originalObject.time}}) - <span class="angucomplete-title" ng-if="matchClass" ng-bind-html="result.title"></span></span>\n            </div>\n        </div>\n    </div>\n</div>'),e.put("assets/ms-phonebar/ms-phonebar.html",'<div layout="row" layout-align="start center" flex>\n    \x3c!-- Audio stream --\x3e\n    <audio id="remote-audio" autoplay hidden=true></audio>\n    \x3c!-- Audio stream --\x3e\n\n    \x3c!-- WebRtc PhoneBar --\x3e\n    <div class="phonebar-container" ng-include="\'assets/ms-phonebar/ms-phonebar-dialpad.html\'" layout="row" layout-align="start center" flex></div>\n    \x3c!-- WebRtc PhoneBar --\x3e\n</div>'),e.put("assets/ms-phonebar/prefix/dialog.html",'<md-dialog aria-label="Prefix">\n    <form ng-cloak>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div flex>\n                    <span class="title" translate="TOOLBAR.PREFIXES">Prefixes</span>\n                </div>\n                <div layout="row" layout-align="end center">\n                    <md-button class="md-icon-button no-margin no-padding" ng-click="vm.closeDialog(-1)">\n                        <md-icon class="no-margin" md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content>\n            <md-radio-group ng-model="vm.prefix">\n                <md-radio-button ng-repeat="prefix in vm.prefixes.rows" value="{{prefix.prefix}}" class="md-primary">{{prefix.name}}</md-radio-button>\n                <md-radio-button ng-if="!vm.required" ng-value="null" class="md-primary">no prefix</md-radio-button>\n            </md-radio-group>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row">\n            <md-button ng-click="vm.call()" class="send-button md-accent md-raised" aria-label="call" ng-disabled="!vm.prefix && vm.required">\n                <span translate="TOOLBAR.CALL">CALL</span>\n            </md-button>\n            <md-button ng-click="vm.closeDialog(-1)" class="send-button md-accent md-raised" aria-label="cancel">\n                <span translate="TOOLBAR.CANCEL">Cancel</span>\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("assets/ms-phonebar/record/dialog.html",'<md-dialog aria-label="Recording" ng-init="vm.onInit()">\n    <form ng-cloak>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div flex>\n                    <span class="title" translate="TOOLBAR.RECORDING">Recording</span>\n                </div>\n                <div layout="row" layout-align="end center">\n                    <md-button class="md-icon-button no-margin no-padding">\n                        <md-icon class="no-margin" md-font-icon="icon-plus" aria-label="Add" ng-click="vm.addRecording()"></md-icon>\n                    </md-button>\n                    <md-button class="md-icon-button no-margin no-padding" ng-click="vm.closeDialog()">\n                        <md-icon class="no-margin" md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-toolbar>\n\n        <md-table-container>\n            <table md-table layout-padding>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column><span translate="TOOLBAR.FILENAME">File name</span></th>\n                        <th md-column><span translate="TOOLBAR.STATUS">Status</span></th>\n                        <th md-column><span translate="TOOLBAR.ACTIONS">Actions</span></th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm.session.monitors.length">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span translate="TOOLBAR.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="monitor in vm.session.monitors">\n                        <td md-cell>{{monitor.filename}}</td>\n                        <td md-cell class="no-padding">\n                            <md-icon md-font-icon="icon-radiobox-marked" class="icon s16" ng-class="(monitor.status == \'rec\') ? \'red-fg ms-blink\' : \'grey-fg\'"></md-icon>\n                        </td>\n                        <td md-cell class="no-padding">\n                            <md-button class="md-fab md-mini white-bg width-35 height-35 margin-5" aria-label="Record" ng-click="(monitor.status == \'rec\') ? vm.stop(monitor) : vm.start(monitor)">\n'+"                                <md-icon md-font-icon=\"{{monitor.status == 'rec' ? 'icon-stop' : 'icon-play'}}\" class=\"icon s16\" ng-class=\"monitor.status == 'rec' ? 'grey-fg' : 'red-fg'\"></md-icon>\n                            </md-button>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n    </form>\n</md-dialog>"),e.put("assets/ms-phonebar/referAttended/dialog.html",'<md-dialog aria-label="Transfer">\n    <form ng-cloak>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div flex>\n                    <span class="title" translate="TOOLBAR.ATTENDED_TRANSFER">Transfer</span>\n                </div>\n                <div layout="row" layout-align="end center">\n                    <md-button class="md-icon-button no-margin no-padding" ng-click="vm.closeDialog()">\n                        <md-icon class="no-margin" md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content>\n            <label translate="TOOLBAR.TARGET">Target</label>\n            <md-input-container class="md-block">\n                <md-select ng-model="vm.target">\n                    <md-option ng-repeat="session in vm.sessions" ng-value="session.user">\n                        {{ session.name }}\n                    </md-option>\n                </md-select>\n            </md-input-container>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row">\n            <md-button ng-click="vm.transfer()" class="send-button md-accent md-raised" aria-label="transfer" ng-disabled="!vm.target && !vm.sessionId">\n                <span translate="TOOLBAR.TRANSFER">TRANSFER</span>\n            </md-button>\n            <md-button ng-click="vm.closeDialog()" class="send-button md-accent md-raised" aria-label="cancel">\n                <span translate="TOOLBAR.CANCEL">Cancel</span>\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("assets/ms-phonebar/settings/settings.html",'<md-dialog class="md-phonebar-dialog" aria-label="{{vm.name}}">\n    <form name="settingsForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="TOOLBAR.SETTINGS">Settings</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content class="no-padding" ms-scroll>\n            <md-tabs md-no-pagination md-stretch-tabs="always">\n                <md-tab label="{{ \'TOOLBAR.PROFILE\' | translate}}">\n                    <md-content layout-padding layout="column">\n                        <span><span translate="TOOLBAR.FULLNAME">Fullname</span>: {{vm.conf.fullname}}</span>\n                        <span><span translate="TOOLBAR.NAME">Name</span>: {{vm.conf.name}}</span>\n                        <span><span translate="TOOLBAR.INTERNAL">Internal</span>: {{vm.conf.internal}}</span>\n                        <span><span translate="TOOLBAR.BROWSER">Browser</span>: {{vm.conf.browserName}} {{vm.conf.browserVersion}}</span>\n                        <span><span translate="TOOLBAR.OS">OS</span>: {{vm.conf.osName}} {{vm.conf.osVersion}}</span>\n                    </md-content>\n                </md-tab>\n                <md-tab label="{{ \'TOOLBAR.SERVICES\' | translate}}">\n                    <md-content layout-padding>\n                        <md-input-container class="md-block">\n                            <md-switch ng-model="vm.conf.autoAnswer" aria-label="Auto Answer">\n                                <span translate="TOOLBAR.AUTOANSWER">Auto Answer</span>\n                                <span>{{ vm.conf.autoAnswerDelay }} [s]</span>\n                            </md-switch>\n                        </md-input-container>\n                    </md-content>\n                </md-tab>\n                <md-tab label="{{ \'TOOLBAR.AUDIO\' | translate}}">\n                    <md-content layout-padding>\n                        <div class="border brad-5" layout-margin>\n                            <md-input-container class="md-block" ng-if="(vm.devices | filter: { kind: \'audiooutput\' }).length">\n                                <label translate="TOOLBAR.RINGINGDEVICE">Ringing Device</label>\n                                <md-select name="ringingDevice" ng-model="vm.conf.ringingId" required>\n                                    <md-option ng-value="device.deviceId" ng-repeat="device in vm.devices | filter: { kind: \'audiooutput\' }">{{ device.label || (\'Speaker \' + ($index + 1)) }}</md-option>\n                                </md-select>\n                                <div ng-messages="settingsForm[\'ringingDevice\'].$error" ng-show="settingsForm[\'ringingDevice\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLBAR.ERRORS.FIELD_REQUIRED">Field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <div layout="row" layout-align="space-between center">\n                                <md-switch ng-model="vm.conf.ringingMute" aria-label="Mute">\n                                    Mute\n                                </md-switch>\n\n                                <md-slider-container flex="80">\n                                    <md-slider flex step="0.1" min="0" max="1" ng-model="vm.conf.ringingVolume" aria-label="volume"></md-slider>\n                                </md-slider-container>\n                            </div>\n                        </div>\n\n                        <div class="border brad-5" layout-margin>\n                            <md-input-container class="md-block" ng-if="(vm.devices | filter: { kind: \'audiooutput\' }).length">\n                                <label translate="TOOLBAR.SPEAKERDEVICE">Speaker Device</label>\n                                <md-select name="speakerDevice" ng-model="vm.conf.speakerId" required>\n                                    <md-option ng-value="device.deviceId" ng-repeat="device in vm.devices | filter: { kind: \'audiooutput\' }">{{ device.label || (\'Speaker \' + ($index + 1)) }}</md-option>\n                                </md-select>\n                                <div ng-messages="settingsForm[\'speakerDevice\'].$error" ng-show="settingsForm[\'speakerDevice\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLBAR.ERRORS.FIELD_REQUIRED">Field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <div layout="row" layout-align="space-between cetner">\n                                <md-switch ng-model="vm.conf.speakerMute" aria-label="Mute">\n                                    Mute\n                                </md-switch>\n\n                                <md-slider-container flex="80">\n                                    <md-slider flex step="0.1" min="0" max="1" ng-model="vm.conf.speakerVolume" aria-label="volume"></md-slider>\n                                </md-slider-container>\n                            </div>\n                        </div>\n\n                        <div class="border brad-5" layout-margin>\n                            <md-input-container class="md-block" ng-if="(vm.devices | filter: { kind: \'audioinput\' }).length">\n                                <label translate="TOOLBAR.MICROPHONEDEVICE">Microphone Device</label>\n                                <md-select name="microphoneDevice" ng-model="vm.conf.microphoneId" required>\n                                    <md-option ng-value="device.deviceId" ng-repeat="device in vm.devices | filter: { kind: \'audioinput\' }">{{ device.label || (\'Microphone \' + ($index + 1))}}</md-option>\n                                </md-select>\n                                <div ng-messages="settingsForm[\'microphoneDevice\'].$error" ng-show="settingsForm[\'microphoneDevice\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLBAR.ERRORS.FIELD_REQUIRED">Field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <div layout="row" layout-align="space-between center">\n                                <md-switch ng-model="vm.conf.microphoneMute" aria-label="Mute">\n                                    Mute\n                                </md-switch>\n                            </div>\n                        </div>\n                    </md-content>\n                </md-tab>\n                <md-tab label="{{ \'TOOLBAR.REQUIREMENTS\' | translate}}">\n                    <md-content layout-padding>\n                        <md-list>\n                            <md-list-item>\n                                <h3 translate="TOOLBAR.LICENSE">License</h3>\n                                <md-icon class="md-secondary" ng-class="vm.conf.license ? \'green-fg\' : \'red-fg\'" md-font-icon="{{vm.conf.license ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            </md-list-item>\n                            <md-list-item>\n                                <h3 translate="TOOLBAR.BROWSER_COMPATIBILITY">Browser Compatibility</h3>\n                                <md-icon class="md-secondary" ng-class="vm.isCompatibleBrowser() ? \'green-fg\' : \'red-fg\'" md-font-icon="{{vm.isCompatibleBrowser() ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            </md-list-item>\n                            <md-list-item>\n                                <h3 translate="TOOLBAR.HTTPS">HTTPS</h3>\n                                <md-icon class="md-secondary" ng-class="vm.conf.protocol === \'https\' ? \'green-fg\' : \'red-fg\'" md-font-icon="{{vm.conf.protocol === \'https\' ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            </md-list-item>\n                            <md-list-item>\n                                <h3 translate="TOOLBAR.WEBRTCSUPPORT">WebRTC Support</h3>\n                                <md-icon class="md-secondary" ng-class="vm.conf.isWebRTCSupported ? \'green-fg\' : \'red-fg\'" md-font-icon="{{vm.conf.isWebRTCSupported ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            </md-list-item>\n                            <md-list-item>\n                                <h3 translate="TOOLBAR.MICROPHONE">Microphone</h3>\n                                <md-icon class="md-secondary" ng-class="vm.conf.hasMicrophone ? \'green-fg\' : \'red-fg\'" md-font-icon="{{vm.conf.hasMicrophone ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            </md-list-item>\n                            <md-list-item>\n                                <h3 translate="TOOLBAR.SPEAKER">Speaker</h3>\n                                <md-icon class="md-secondary" ng-class="vm.conf.hasSpeakers ? \'green-fg\' : \'red-fg\'" md-font-icon="{{vm.conf.hasSpeakers ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            </md-list-item>\n                        </md-list>\n                    </md-content>\n                </md-tab>\n            </md-tabs>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.saveSettings()" class="send-button md-accent md-raised" ng-disabled="settingsForm.$invalid || settingsForm.$pristine" aria-label="SAVE" translate="TOOLBAR.SAVE" translate-attr-aria-label="TOOLBAR.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/core/directives/ms-search-bar/ms-search-bar.html",'<div flex layout="row" layout-align="start center" ng-init="MsSearchBar.onInit()">\n    <label for="ms-search-bar-input">\n        <md-button class="ms-search-bar-expander md-icon-button" aria-label="Expand Search Bar" ng-click="MsSearchBar.expand()" ng-if="!MsSearchBar.resultsLoading || MsSearchBar.collapsed">\n            <md-icon md-font-icon="icon-magnify" class="icon s24"></md-icon>\n        </md-button>\n        <div class="ms-search-bar-loader" layout="row" layout-align="center center" ng-if="MsSearchBar.resultsLoading && !MsSearchBar.collapsed">\n            <md-progress-circular class="md-accent" md-diameter="32" md-mode="indeterminate"></md-progress-circular>\n        </div>\n    </label>\n    <input id="ms-search-bar-input" type="text" placeholder="Search" flex ng-model="MsSearchBar.query" ng-model-options="MsSearchBar.queryOptions" ng-blur="MsSearchBar.blurCollapse()" ng-keydown="MsSearchBar.handleKeydown($event)" />\n    <md-button class="ms-search-bar-collapser md-icon-button" ng-click="MsSearchBar.collapse()" aria-label="Collapse Search Bar">\n        <md-icon md-font-icon="icon-close" class="icon s24"></md-icon>\n    </md-button>\n\n    <div class="ms-search-bar-results" ng-if="MsSearchBar.results" ms-scroll>\n        <div class="no-results" ng-if="MsSearchBar.results.length === 0">No Results!</div>\n\n        <div class="result" ng-repeat="result in MsSearchBar.results" ng-click="MsSearchBar.handleResultClick(result)" ng-mouseenter="MsSearchBar.handleMouseenter($index)" ng-mousedown="MsSearchBar.absorbEvent($event)" ng-class="{\'selected\': $index == MsSearchBar.selectedResultIndex}" md-ink-ripple>\n            <div layout="row" layout-align="start center">\n                <div class="icon-container" layout="row" layout-align="center center">\n                    <i ng-if="result.icon" class="icon {{ result.icon }}"></i>\n                    <div ng-if="!result.icon" class="square md-accent-bg"></div>\n                </div>\n                <div>\n                    <div class="title">{{ result.title }}</div>\n                    <div class="description" ng-if="result.description">{{ result.description }}</div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>'),e.put("app/core/directives/ms-shortcuts/ms-shortcuts.html",'<div class="shortcuts-container" layout="row" layout-align="space-between center" flex ng-class="{\'mobile-bar-active\': MsShortcuts.mobileBarActive}">\n\n    <div class="flex-noshrink" layout="row" layout-align="start center" flex>\n        <div class="shortcuts hide show-gt-xs" layout="row" layout-align="start center" ms-scroll ng-if="MsShortcuts.shortcuts.length > 0" ng-sortable="MsShortcuts.sortableOptions">\n            <div ng-repeat="shortcut in MsShortcuts.shortcuts" layout="row" layout-align="center center">\n                <md-button class="md-icon-button shortcut" aria-label="{{shortcut.title}}" ui-sref="{{shortcut.uisref}}">\n                    <md-icon ng-if="shortcut.icon" md-font-icon="{{shortcut.icon}}" class="icon s24"></md-icon>\n                    <div ng-if="!shortcut.icon" class="first-letter">{{shortcut.title.charAt(0)}}</div>\n                    <md-tooltip md-direction="bottom">{{shortcut.title}}</md-tooltip>\n                </md-button>\n            </div>\n        </div>\n\n        \x3c!-- <md-menu md-offset="8 56" class="shortcut-menu hide show-gt-xs">\n            <md-button class="md-icon-button add-shortcut-button" aria-label="Add shortcut"\n                       ng-click="$mdOpenMenu($event)">\n                <md-icon md-menu-origin md-font-icon="icon-star" class="icon amber-600-fg s24"></md-icon>\n                <md-tooltip md-direction="bottom">Click to add/remove shortcut</md-tooltip>\n            </md-button>\n\n            <md-menu-content>\n                <div id="ms-shortcut-add-menu">\n                    <div class="shortcut-search" layout="row" layout-align="start center">\n                        <div class="search-icon" layout="row" layout-align="center center"\n                             ng-if="!MsShortcuts.resultsLoading">\n                            <md-icon md-menu-align-target md-font-icon="icon-magnify" class="icon s24"></md-icon>\n                        </div>\n                        <div class="shortcut-loader" layout="row" layout-align="center center"\n                             ng-if="MsShortcuts.resultsLoading">\n                            <md-progress-circular class="md-accent" md-diameter="20" md-mode="indeterminate">\n                            </md-progress-circular>\n                        </div>\n\n                        <input type="text" placeholder="Search" flex\n                               ng-model="MsShortcuts.query"\n                               ng-model-options="MsShortcuts.queryOptions"\n                               ng-keydown="MsShortcuts.handleKeydown($event)">\n                    </div>\n\n                    <div class="results" ng-if="MsShortcuts.results" ms-scroll>\n                        <div class="no-results" ng-if="MsShortcuts.results.length === 0">No Results!</div>\n\n                        <div class="result" ng-repeat="result in MsShortcuts.results"\n                             ng-click="MsShortcuts.handleResultClick(result)"\n                             ng-mouseenter="MsShortcuts.handleMouseenter($index)"\n                             ng-mousedown="MsShortcuts.absorbEvent($event)"\n                             ng-class="{\'selected\': $index == MsShortcuts.selectedResultIndex}"\n                             md-prevent-menu-close="md-prevent-menu-close"\n                             md-ink-ripple>\n                            <div layout="row" layout-align="start space-between">\n                                <div layout="row" layout-align="start center" flex>\n                                    <div class="icon icon-container" layout="row" layout-align="center center">\n                                        <i ng-if="result.icon" class="{{result.icon}}"></i>\n                                        <div ng-if="!result.icon" class="square md-accent-bg"></div>\n                                    </div>\n                                    <div>\n                                        <div class="title">{{result.title}}</div>\n                                    </div>\n                                </div>\n                                <md-icon md-font-icon="icon-pin" class="icon s18"\n                                         ng-class="{\'fade-text\': !result.hasShortcut}"></md-icon>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </md-menu-content>\n        </md-menu> --\x3e\n    </div>\n\n    <md-button class="md-icon-button toggle-mobile-menu hide-gt-xs" aria-label="Add shortcut" ng-click="MsShortcuts.toggleMobileBar()">\n        <md-icon md-menu-origin md-font-icon="icon-star" class="icon amber-600-fg s24" ng-hide="MsShortcuts.mobileBarActive"></md-icon>\n        <md-icon md-menu-origin md-font-icon="icon-close" class="icon s24" ng-hide="!MsShortcuts.mobileBarActive"></md-icon>\n    </md-button>\n</div>'),e.put("app/core/directives/ms-stepper/templates/horizontal/horizontal.html",'<div class="ms-stepper-horizontal">\n    <div class="ms-stepper-navigation-wrapper">\n        <div class="ms-stepper-navigation" layout="row" layout-align="center center">\n            <md-button class="ms-stepper-navigation-item" ng-class="{\'current\': MsStepper.isStepCurrent(step.stepNumber), \'valid\': MsStepper.isStepValid(step.stepNumber), \'disabled\': MsStepper.isStepDisabled(step.stepNumber), \'optional\': MsStepper.isStepOptional(step.stepNumber)}" ng-click="MsStepper.gotoStep(step.stepNumber)" ng-disabled="MsStepper.isStepDisabled(step.stepNumber)" ng-repeat="step in MsStepper.steps | filter:MsStepper.filterHiddenStep" layout="row" layout-align="start center">\n\n                <div class="step md-accent-bg" layout="row" layout-align="center center">\n                    <span ng-if="!MsStepper.isStepValid(step.stepNumber) || MsStepper.isStepOptional(step.stepNumber)">\n                        {{$index + 1}}\n                    </span>\n                    <span ng-if="MsStepper.isStepValid(step.stepNumber) && !MsStepper.isStepOptional(step.stepNumber)">\n                        <i class="icon icon-check s18"></i>\n                    </span>\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="title" translate="{{step.stepTitleTranslate}}">{{step.stepTitle}}</div>\n                    <div class="subtitle" ng-if="MsStepper.isStepOptional(step.stepNumber)">Optional</div>\n                </div>\n            </md-button>\n        </div>\n    </div>\n\n    <div class="ms-stepper-steps" ng-transclude></div>\n\n    <div class="ms-stepper-controls" layout="row" layout-align="center center">\n        <md-button class="md-accent md-raised" ng-disabled="MsStepper.isFirstStep()" ng-click="MsStepper.gotoPreviousStep()">\n            Back\n        </md-button>\n\n        <div class="ms-stepper-dots">\n            <span ng-repeat="step in MsStepper.steps" ng-hide="MsStepper.isStepHidden(step.stepNumber)" ng-class="{\'selected md-accent-bg\':MsStepper.currentStepNumber === $index + 1}">\n            </span>\n        </div>\n\n        <md-button class="md-accent md-raised" ng-if="!MsStepper.isLastStep()" ng-disabled="!MsStepper.isStepValid(MsStepper.currentStepNumber)" ng-click="MsStepper.gotoNextStep()">\n            Next\n        </md-button>\n\n        <md-button type="submit" class="md-accent md-raised" ng-click="MsStepper.resetForm()" ng-if="MsStepper.isLastStep()" ng-disabled="!MsStepper.isFormValid()">\n            Submit\n        </md-button>\n    </div>\n</div>'),e.put("app/core/directives/ms-stepper/templates/vertical/step/vertical-step.html",'<md-button class="ms-stepper-navigation-item" ng-class="{\'current\': MsStepper.isStepCurrent(stepInfo.stepNumber), \'valid\': MsStepper.isStepValid(stepInfo.stepNumber), \'disabled\': MsStepper.isStepDisabled(stepInfo.stepNumber), \'optional\': MsStepper.isStepOptional(stepInfo.stepNumber)}" ng-click="MsStepper.gotoStep(stepInfo.stepNumber)" ng-disabled="MsStepper.isStepDisabled(stepInfo.stepNumber)" ng-hide="MsStepper.isStepHidden(stepInfo.stepNumber)" aria-label="Stepper navigation button" layout="row" layout-align="start center">\n\n    <div class="step" layout="row" layout-align="center center">\n        <span ng-if="!MsStepper.isStepValid(stepInfo.stepNumber) || MsStepper.isStepOptional(stepInfo.stepNumber)">\n            <i class="icon icon-checkbox-blank-circle-outline s18 md-accent-fg"></i>\n        </span>\n        <span ng-if="MsStepper.isStepValid(stepInfo.stepNumber) && !MsStepper.isStepOptional(stepInfo.stepNumber)">\n            <i class="icon icon-check-circle s18 md-accent-fg"></i>\n        </span>\n    </div>\n\n    <div layout="column" layout-align="start start">\n        <div class="title" ng-if="stepInfo.stepTitleTranslate">{{stepInfo.stepTitleTranslate | translate }}</div>\n        <div class="title" ng-if="!stepInfo.stepTitleTranslate">{{stepInfo.stepTitle}}</div>\n        <div class="subtitle" ng-if="MsStepper.isStepOptional(stepInfo.stepNumber)">Optional</div>\n    </div>\n</md-button>\n\n<div class="ms-stepper-step-content" ng-transclude></div>\n\n<div class="ms-stepper-controls" layout="row" layout-align="start center" ng-show="MsStepper.isStepCurrent(stepInfo.stepNumber)">\n    <md-button class="md-accent md-raised" ng-disabled="MsStepper.isFirstStep()" ng-click="MsStepper.gotoPreviousStep()">\n        Back\n    </md-button>\n\n    <md-button class="md-accent md-raised" ng-if="!MsStepper.isLastStep()" ng-disabled="!MsStepper.isStepValid(MsStepper.currentStepNumber)" ng-click="MsStepper.gotoNextStep()">\n        Next\n    </md-button>\n\n    <md-button type="submit" class="md-accent md-raised" ng-click="MsStepper.resetForm()" ng-if="MsStepper.isLastStep()" ng-disabled="!MsStepper.isFormValid()">\n        Submit\n    </md-button>\n</div>'),e.put("app/core/directives/ms-stepper/templates/vertical/vertical.html",'<div class="ms-stepper-vertical">\n    <div class="ms-stepper-vertical-line"></div>\n    <div class="ms-stepper-steps" ng-transclude></div>\n</div>'),e.put("app/core/directives/ms-tab-scroll/ms-tab-scroll.html",'<div layout="row">\n    <md-button class="md-icon-button md-mini width-25 no-margin scroll-arrow" ng-click="vm.onTabScroll(\'left\')" ng-if="vm.canScroll(\'left\') == true">\n        <md-icon md-font-icon="icon-chevron-left" class="icon s26"></md-icon>\n    </md-button>\n    <div id="bar-container" layout="row" class="bar-container">\n        <div ng-transclude id="tab-container" layout="row" layout-align="start center" class="scroll-container">\n        </div>\n    </div>\n    <md-button class="md-icon-button md-mini width-25 no-margin scroll-arrow" ng-click="vm.onTabScroll(\'right\')" ng-if="vm.canScroll(\'right\') == true">\n        <md-icon md-font-icon="icon-chevron-right" class="icon s26"></md-icon>\n    </md-button>\n</div>'),e.put("app/core/directives/ms-timezone/ms-timezone.html",'<md-select ng-model="ngModel" class="no-margin">\n    <md-option ng-value="null">NONE</md-option>\n    <md-option ng-repeat="t in timezone | orderBy:\'utcOffset\'" value="{{t.name}}">{{t.name}} ({{t.offsetStr}})</md-option>\n</md-select>'),e.put("app/core/directives/ms-widget-engine/ms-widget-engine-counter/ms-widget-engine.counter.html",'<div class="pt-8 pb-32" layout="column" layout-align="center center" layout-fill ng-controller="MsWidgetEngineCounterController as vm">\n    <div ng-class="\'font-size-\' + (vm.fontSize * 3)" ng-style="{\'color\': widget.foreground}">\n        {{ vm.getCount(widget) }}\n    </div>\n    <div ng-class="\'font-size-\' + vm.fontSize" ng-style="{\'color\': widget.foreground}">{{ \'TOOLS.\' + widget.attrs[0].value | uppercase | translate }}<span ng-if="vm.filtered">*</span></div>\n</div>'),e.put("app/core/directives/ms-widget-engine/ms-widget-engine-multibar-chart/ms-widget-engine.multibar-chart.html",'<div ng-controller="MsWidgetEngineMultibarChartController as vm" ng-init="vm.getMultiBarChart(widget)" layout="column" layout-fill>\n\n    <span ng-show="false">{{ vm.getMultiBarChart(widget)}}</span>\n\n    <canvas style="overflow:scroll" id="bar" class="chart-horizontal-bar" chart-data="vm.multiBarChart.data" chart-options="vm.multiBarChart.options" chart-series="vm.multiBarChart.series" chart-labels="vm.multiBarChart.labels">\n    </canvas>\n</div>'),e.put("app/core/directives/ms-widget-engine/ms-widget-engine-pie-chart/ms-widget-engine.pie-chart.html",'<div ng-controller="MsWidgetEnginePieChartController as vm" ng-init="vm.getPieChart(widget)" layout="column" layout-fill>\n\n    <span ng-show="false">{{ vm.getPieChart(widget)}}</span>\n\n    <canvas style="overflow:scroll" id="pie" class="chart-pie" chart-data="vm.pieChart.data" chart-labels="vm.pieChart.labels" chart-options="vm.pieChart.options">\n    </canvas>\n</div>'),e.put("app/core/directives/ms-widget-engine/ms-widget-engine-web-report/ms-widget-engine.web-report.html",'<div ng-controller="MsWidgetEngineWebReportController as vm" ng-init="vm.onInit(widget)">\n    <dl ng-if="vm.error">\n        <dt class="text-bold">Query Error</dt>\n        <dd>{{vm.error.sql}}</dd>\n        <dt>Message</dt>\n        <dd>{{vm.error.msg}}</dd>\n    </dl>\n    <md-toolbar class="md-table-toolbar md-default">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead">{{vm.title}}</span>\n            <div flex></div>\n            <md-button class="md-icon-button" ng-click="vm.onInit(widget)" aria-label="refresh">\n                <md-icon md-font-icon="icon-refresh"></md-icon>\n            </md-button>\n            <span ng-if="vm.refresh && vm.countDown" class="md-subhead blue-fg">{{vm.countDown}}</span>\n        </div>\n    </md-toolbar>\n    <md-table-container ng-if="!vm.error">\n        <table md-table md-progress="vm.promise">\n            <thead md-head>\n                <tr md-row>\n                    <th md-column ng-repeat="column in vm.columns">{{column.alias || column.field}}</th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-repeat="row in vm.results.rows">\n                    <td md-cell ng-repeat="(key, value) in row">{{ vm.valueReplacer(key, value) }}</td>\n                </tr>\n                <tr md-row ng-if="!vm.results.rows.length">\n                    <td md-cell colspan="{{vm.columns.length}}">\n                        <div layout="row" layout-align="center center">\n                            <span>No Data</span>\n                        </div>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.results.count}}" md-on-paginate="vm.getResults" md-page-select></md-table-pagination>\n</div>'),e.put("app/core/directives/ms-widget-engine/ms-widget-engine.html",'<div gridster="vm.config">\n    <ul>\n        <li gridster-item="widget" ng-repeat="widget in vm.config.widgets">\n            <md-card layout-fill>\n                <md-toolbar class="height-40" ng-style="{\'background-color\': widget.background, \'color\': widget.foreground }">\n                    <div class="md-toolbar-tools height-40 no-margin" layout="row" layout-align="start center">\n                        <a ng-href="{{widget.link ? widget.link : \'javascript:void(0)\'}}" ng-style="{\'color\': widget.foreground}" class="text-truncate" flex>\n                            {{ widget.title || \'No Title\' }}\n                        </a>\n                        <md-button ng-if="!vm.config.preview" class="draggable md-icon-button width-30 no-margin no-padding" aria-label="Move">\n                            <md-tooltip><span translate="TOOLS.MOVE_WIDGET">Move</span></md-tooltip>\n                            <md-icon md-font-icon="icon-cursor-move" class="s20" ng-style="{\'color\': widget.foreground}"></md-icon>\n                        </md-button>\n                        <md-menu ng-if="!vm.config.preview">\n                            <md-button ng-click="$mdOpenMenu($event)" class="md-icon-button width-30 no-margin no-padding" aria-label="More">\n                                <md-icon md-font-icon="icon-dots-vertical" class="s20" ng-style="{\'color\': widget.foreground}"></md-icon>\n                            </md-button>\n                            <md-menu-content>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.onEdit({widget: widget})" translate="TOOLS.EDIT_WIDGET">Edit</md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.onDelete({widget: widget})" translate="TOOLS.DELETE_WIDGET">Delete</md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n\n                    </div>\n                </md-toolbar>\n                <md-card-content class="resizable" layout="column" layout-align="center center" flex ng-style="{\'background-color\': widget.background, \'color\': widget.foreground}">\n                    <div ng-switch="widget.type" layout-fill>\n                        <iframe ng-switch-when="iframe|custom" ng-switch-when-separator="|" ng-src="{{vm.getTrustedURL(widget.attrs[0].value)}}" frameborder=0 style="border:0px; width:100%; height:100%;"></iframe>\n                        <ds-widget-clock ng-class="\'font-size-\' + (widget.attrs[2].value || 12)" ng-switch-when="clock" digital-format="widget.attrs[0].value" gmt-offset="widget.attrs[1].value" data-show-digital show-gmt-info></ds-widget-clock>\n                        <div ng-switch-default layout-fill>\n                            <div ng-include="widget.templateUrl" layout-fill></div>\n                        </div>\n                    </div>\n                </md-card-content>\n            </md-card>\n        </li>\n    </ul>\n</div>'),e.put("app/core/layouts/content-only.html",'<div id="layout-content-only" class="template-layout" layout="column" flex>\n    <md-content id="content" class="animate-slide-up md-hue-2" ui-view="content" flex></md-content>\n</div>'),e.put("app/core/layouts/content-with-toolbar.html",'<div id="layout-content-with-toolbar" class="template-layout" layout="column" flex>\n    <md-toolbar id="toolbar" class="md-menu-toolbar md-whiteframe-1dp" ui-view="toolbar"></md-toolbar>\n    <md-content id="content" class="animate-slide-up md-hue-2" ui-view="content" flex></md-content>\n\n    <md-sidenav id="quick-panel" class="md-sidenav-right md-whiteframe-4dp" md-component-id="quick-panel" ms-scroll ui-view="quickPanel"></md-sidenav>\n</div>'),e.put("app/core/layouts/horizontal-navigation.html",'<div id="layout-horizontal-navigation" class="template-layout" layout="column" flex>\n\n    <div id="toolbar-navigation-container" class="md-whiteframe-1dp" layout="column" layout-align="space-between start">\n        <md-toolbar id="toolbar" class="md-menu-toolbar md-whiteframe-1dp" ui-view="toolbar"></md-toolbar>\n        <div id="horizontal-navigation" ui-view="navigation" layout="row" layout-align="start end" flex></div>\n    </div>\n\n    <div id="content-container" flex layout="column">\n        <md-content id="content" class="animate-slide-up md-hue-2" ms-scroll ui-view="content" flex></md-content>\n    </div>\n\n    <md-sidenav id="quick-panel" class="md-sidenav-right md-whiteframe-4dp" md-component-id="quick-panel" ms-scroll ui-view="quickPanel"></md-sidenav>\n\n</div>'),e.put("app/core/layouts/vertical-navigation-fullwidth-toolbar-2.html",'<div id="layout-vertical-navigation-fullwidth-toolbar-2" class="template-layout" layout="column" flex>\n\n    <md-toolbar id="toolbar" class="md-menu-toolbar md-whiteframe-1dp md-accent" ui-view="toolbar"></md-toolbar>\n\n    <div id="main-container" layout="row" flex>\n        <md-sidenav id="vertical-navigation" class="md-primary-bg" md-is-locked-open="$mdMedia(\'gt-sm\')" md-component-id="navigation" ms-scroll ui-view="navigation"></md-sidenav>\n\n        <div id="content-container" flex layout="column">\n            <md-content id="content" class="animate-slide-up md-hue-2" ms-scroll ui-view="content" flex></md-content>\n        </div>\n\n        <md-sidenav id="quick-panel" class="md-sidenav-right md-whiteframe-4dp" md-component-id="quick-panel" ms-scroll ui-view="quickPanel"></md-sidenav>\n    </div>\n\n\n</div>'),e.put("app/core/layouts/vertical-navigation-fullwidth-toolbar.html",'<div id="layout-vertical-navigation-fullwidth-toolbar" class="template-layout" layout="column" flex>\n\n    <md-toolbar id="toolbar" class="md-menu-toolbar md-whiteframe-1dp md-accent" ui-view="toolbar"></md-toolbar>\n\n    <div id="main-container" layout="row" flex>\n        <md-sidenav id="vertical-navigation" class="md-primary-bg" md-is-locked-open="$mdMedia(\'gt-sm\')" md-component-id="navigation" ms-scroll ui-view="navigation"></md-sidenav>\n\n        <div id="content-container" flex layout="column">\n            <md-content id="content" class="animate-slide-up md-hue-2" ms-scroll ui-view="content" flex></md-content>\n        </div>\n\n        <md-sidenav id="quick-panel" class="md-sidenav-right md-whiteframe-4dp" md-component-id="quick-panel" ms-scroll ui-view="quickPanel"></md-sidenav>\n    </div>\n\n\n</div>'),e.put("app/core/layouts/vertical-navigation.html",'<div id="header" ui-view="header"></div>\n\n<div id="layout-vertical-navigation" class="template-layout" layout="row" flex>\n\n    <md-sidenav id="vertical-navigation" class="md-primary-bg" md-is-locked-open="$mdMedia(\'gt-sm\')" md-component-id="navigation" ms-scroll ui-view="navigation" ng-if="!vm.isAgent()"></md-sidenav>\n\n    <div id="content-container" flex layout="column">\n        <md-toolbar id="toolbar" class="md-menu-toolbar md-whiteframe-1dp" ui-view="toolbar"></md-toolbar>\n\n        <md-content id="content" class="animate-slide-up md-hue-2" ms-scroll ui-view="content" flex></md-content>\n    </div>\n\n    <md-sidenav id="quick-panel" class="md-sidenav-right md-whiteframe-4dp" md-component-id="quick-panel" ms-scroll ui-view="quickPanel"></md-sidenav>\n\n</div>\n\n<div id="footer" ui-view="footer"></div>'),e.put("app/core/theme-options/theme-options.html",'<div class="ms-theme-options-button md-primary-bg" ng-click="toggleOptionsSidenav()">\n    <md-icon md-font-icon="icon-cog" class="white-text"></md-icon>\n</div>\n\n<md-sidenav md-component-id="motion-theme-options" class="md-sidenav-right">\n\n    <div class="ms-theme-options-list" layout="column">\n        <div class="theme-option layout-options">\n            <div class="option-title">Layout Style:</div>\n            <md-radio-group layout="row" layout-align="start start" layout-wrap ng-model="vm.layoutStyle" ng-change="vm.updateLayoutStyle()">\n                <md-radio-button ng-repeat="layoutStyle in vm.layoutStyles" ng-value="layoutStyle.value">\n                    <div layout="column" layout-align="center center">\n                        <img ng-src="{{layoutStyle.figure}}">\n                        <span class="text-center font-size-12 mt-8">{{layoutStyle.label}}</span>\n                    </div>\n                </md-radio-button>\n            </md-radio-group>\n        </div>\n\n        <md-divider></md-divider>\n\n        <div class="theme-option">\n            <div class="option-title">Layout Mode:</div>\n            <md-radio-group layout="row" layout-align="start center" ng-model="vm.layoutMode" ng-change="vm.updateLayoutMode()">\n                <md-radio-button ng-repeat="layoutMode in vm.layoutModes" ng-value="layoutMode.value">\n                    {{layoutMode.label}}\n                </md-radio-button>\n            </md-radio-group>\n        </div>\n\n        <md-divider></md-divider>\n\n        <div class="theme-option color-palettes">\n            <div class="option-title">Color Palette:</div>\n            <div layout="row" layout-align="start start" layout-wrap>\n                <md-button ng-repeat="(themeName, theme) in vm.themes.list" class="md-raised theme-button" layout="row" layout-align="center center" aria-label="{{themeName}}" ng-click="vm.setActiveTheme(themeName)" ng-style="{\'background-color\': theme.primary.color,\'border-color\': theme.accent.color,\'color\': theme.primary.contrast1}" ng-class="{active: vm.getActiveTheme().name === themeName}">\n                    <md-icon ng-style="{\'color\': theme.primary.contrast1}" md-font-icon="icon-palette" class="icon s32"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n</md-sidenav>'),e.put("app/errors/404/error-404.html",'<div id="error-404" layout="column" layout-align="center center">\n    <div class="content" layout="column" layout-align="center center">\n        <div class="error-code" translate="ERROR404.CODE">404</div>\n\n        <div class="message" translate="ERROR404.MESSAGE">Sorry but we couldn’t find the page you are looking for</div>\n        <ms-search-bar on-search="vm.search(query)" on-result-click="vm.searchResultClick(item)" debounce="300">Search for anything</ms-search-bar>\n\n        \x3c!-- <div class="search md-whiteframe-1dp" layout="row" layout-align="start center">\n            <md-icon md-font-icon="icon-magnify" class="icon s24"></md-icon>\n            <input ng-model="vm.search" type="text" placeholder="Search for anything" translate translate-attr-placeholder="ERROR404.SEARCH" flex>\n        </div> --\x3e\n\n        <a class="md-button md-raised md-primary back-link" href="/" translate="ERROR404.GO_BACK">Go back to dashboard</a>\n    </div>\n</div>'),e.put("app/errors/500/error-500.html",'<div id="error-500" layout="column" layout-align="center center">\n    <div ng-if="!vm.send" class="content" layout="column" layout-align="center center">\n        <div class="error-code" translate="ERROR500.CODE">500</div>\n        <div class="message" translate="ERROR500.MESSAGE">Well, you broke the internet!</div>\n        <div class="sub-message" translate="ERROR500.SUBMESSAGE">Just kidding, looks like we have an internal issue, please try again in couple minutes\n        </div>\n        <a class="md-button md-raised md-primary back-link" href="/" translate="ERROR500.GO_BACK">Go back to dashboard</a>\n        <md-button class="md-raised md-warn" ng-click="vm.sendReport()" translate="ERROR500.REPORT">Report this problem</md-button>\n    </div>\n    <pre ng-if="!vm.send">\n    {{vm.error}}\n    </pre>\n    <div ng-if="vm.send" class="content" layout="column" layout-align="center center">\n        <div class="error-code">#{{vm.code}}</div>\n        <div class="message" translate="ERROR500.JIRA_MESSAGE">Your request has been received and will be processed shortly.</div>\n        <div class="sub-message" translate="ERROR500.JIRA_SUBMESSAGE">Sorry for the inconvenience. If you have any questions or concerns, please do not hesitate to contact us.</div>\n        <a class="md-button md-raised md-primary back-link" href="/" translate="ERROR500.GO_BACK">Go back to dashboard</a>\n    </div>\n</div>'),e.put("app/footer/layouts/vertical-navigation/footer.html",'<div layout="row" layout-align="start center">\n    <ms-info-bar ng-if="!vm.cookieAlertHide" on-close="vm.cookieAlertOnClose()" class="grey-100-bg">\n        <div layout="row" layout-align="start center">\n            <span translate="FOOTER.COOKIE_LAW" flex class="text-center grey-600-fg"></span>\n        </div>\n    </ms-info-bar>\n</div>'),e.put("app/forgot/forgot.html",'<div id="forgot-password" class="flex-scrollable" layout="column" ms-scroll ng-init="vm.onInit()">\n    <div id="forgot-password-form-wrapper" layout="column" layout-align="center center">\n        <div id="forgot-password-form" class="md-whiteframe-8dp">\n\n            <img src="/api/settings/1/logo_login" alt="logo_login" class="logo_login" />\n\n            <div class="title" translate="FORGOTPASSWORD.TITLE">Recover your password</div>\n\n            <form name="forgotPasswordForm" novalidate>\n                <md-input-container class="md-block" md-no-float>\n                    <input type="email" name="email" ng-model="vm.form.email" placeholder="Email address" translate translate-attr-placeholder="FORGOTPASSWORD.EMAIL_ADRESS" ng-pattern="/^.+@.+\\..+$/" required>\n                    <div ng-messages="forgotPasswordForm.email.$error" role="alert" multiple>\n                        <div ng-message="required">\n                            <span translate="FORGOTPASSWORD.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                        </div>\n                        <div ng-message="pattern">\n                            <span translate="FORGOTPASSWORD.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                        </div>\n                    </div>\n                </md-input-container>\n\n                <md-button type="button" ng-click="vm.forgotPassword()" class="md-raised md-accent submit-button" aria-label="RESET MY PASSWORD" ng-disabled="forgotPasswordForm.$invalid || forgotPasswordForm.$pristine" translate="FORGOTPASSWORD.SEND_RESET_LINK" translate-attr-aria-label="FORGOTPASSWORD.SEND_RESET_LINK">\n                    SEND RESET LINK\n                </md-button>\n            </form>\n\n            <div class="login" layout="row" layout-align="center center">\n                <a class="link" ui-sref="app.login" translate="FORGOTPASSWORD.GO_BACK">Go back to login</a>\n            </div>\n        </div>\n    </div>\n</div>'),e.put("app/header/layouts/vertical-navigation/header.html",'\x3c!-- <div layout="row" layout-align="start center">\n    <ms-info-bar ng-if="vm.currentUser.role == \'admin\' && !vm.newsAlertHide" on-close="vm.newsAlertOnClose()" class="green-600-bg white-fg">\n        <div layout="row" layout-align="start center">\n            <md-icon md-font-icon="icon-message-text-outline" class="icon margin-right-10 s20"></md-icon>\n            <div flex hide-xs translate="HEADER.NEWS"></div>\n        </div>\n    </ms-info-bar>\n</div> --\x3e'),e.put("app/login/login.html",'<div id="login" class="flex-scrollable" layout="column" ms-scroll>\n    <div id="login-form-wrapper" layout="column" layout-align="center center">\n        <div id="login-form" class="md-whiteframe-8dp">\n\n            <img src="/api/settings/1/logo_login" alt="logo_login" class="logo_login" />\n            \x3c!-- <img src="assets/images/logos/login.png" alt="motion_logo_login" /> --\x3e\n\n            <div class="md-subhead padding-top-45" translate="LOGIN.TITLE">Log in to your account</div>\n\n            <form name="loginForm" novalidate ng-if="!vm.progressLogin">\n                <md-input-container class="md-block" md-no-float>\n                    <input type="input" name="name" ng-model="vm.form.name" autofocus aria-label="username" translate translate-attr-placeholder="LOGIN.USERNAME" required>\n                    <div ng-messages="loginForm.name.$error" role="alert" multiple>\n                        <div ng-message="required">\n                            <span translate="LOGIN.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n\n                <md-input-container class="md-block" md-no-float>\n                    <input type="password" name="password" ng-model="vm.form.password" aria-label="password" translate translate-attr-placeholder="LOGIN.PASSWORD" required>\n                    <div ng-messages="loginForm.password.$error" role="alert" multiple>\n                        <div ng-message="required">\n                            <span translate="LOGIN.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n\n                <div class="remember-forgot-password" layout="row" layout-xs="column" layout-align="end center">\n                    \x3c!-- <md-checkbox class="remember-me" ng-model="data.cb1" aria-label="Remember Me">\n                        <span translate="LOGIN.REMEMBER_ME">Remember Me</span>\n                    </md-checkbox> --\x3e\n                    <a ui-sref="app.forgot" class="forgot-password md-accent-color" style="cursor:pointer;" translate="LOGIN.FORGOT_PASSWORD">Forgot Password?</a>\n                </div>\n\n                <b layout="row" layout-align="center center" class="md-padding" ng-if="vm.message">\n                    <font color="red">{{vm.message}}</font>\n                </b>\n                <md-button type="submit" ng-click="vm.login()" class="md-raised md-accent submit-button" aria-label="LOGIN" translate="LOGIN.LOG_IN" translate-attr-aria-label="LOGIN.LOG_IN">\n                    LOG IN\n                </md-button>\n            </form>\n\n            <md-progress-circular ng-if="vm.progressLogin" md-diameter="96"></md-progress-circular>\n\n            <div class="separator">\n                <span class="text" translate="LOGIN.OR">OR</span>\n            </div>\n\n            <md-button ng-click="vm.loginOauth(\'google\')" class="md-raised google">\n                <div layout="row" layout-align="center center">\n                    <span>\n                        <md-icon md-font-icon="fab fa-google" class="s16"></md-icon>\n                        <span translate="LOGIN.WITH_GOOGLE">Log in with Google</span>\n                    </span>\n                </div>\n            </md-button>\n        </div>\n    </div>\n</div>'),e.put("app/main/apps/analytics/views/extractedReports/create/dialog.html",'<md-dialog class="extractedReport-dialog" aria-label="New ExtractedReport">\n    <form name="extractedReportForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.REPORTNAME">ReportName</label>\n                <input type="" name="name" ng-model="vm.extractedReport.name" ng-required="true" autofocus>\n\n                <div ng-messages="extractedReportForm[\'name\'].$error" ng-show="extractedReportForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.REPORTNAME_REQUIRED">ReportName field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.NAME">Name</label>\n                <input type="" name="basename" ng-model="vm.extractedReport.basename" ng-required="true">\n\n                <div ng-messages="extractedReportForm[\'basename\'].$error" ng-show="extractedReportForm[\'basename\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newExtractedReport" ng-click="vm.saveExtractedReport()" class="send-button md-accent md-raised" ng-disabled="extractedReportForm.$invalid || extractedReportForm.$pristine" aria-label="SAVE" translate="ANALYTICS.SAVE" translate-attr-aria-label="ANALYTICS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newExtractedReport" ng-click="vm.addNewExtractedReport()" class="send-button md-accent md-raised" ng-disabled="extractedReportForm.$invalid" aria-label="ADD" translate="ANALYTICS.ADD_EXTRACTEDREPORT" translate-attr-aria-label="ANALYTICS.ADD_EXTRACTEDREPORT">\n                    ADD EXTRACTEDREPORT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newExtractedReport" ng-click="vm.deleteExtractedReport($event)" aria-label="DELETE" translate translate-attr-aria-label="ANALYTICS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="ANALYTICS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/extractedReports/extractedReports.html",'<div id="extractedReports" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-chart-line" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="ANALYTICS.EXTRACTEDREPORTS">ExtractedReports</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="ANALYTICS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedExtractedReports.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedExtractedReports =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="ANALYTICS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-extractedReports-count">\n                    <span>{{vm.selectedExtractedReports.length}}</span>\n                    <span translate="ANALYTICS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="EXTRACTEDREPORTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllExtractedReports()" translate="ANALYTICS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectExtractedReports()" translate="ANALYTICS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedExtractedReports" csv-label="true" filename="extractedReports.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedExtractedReports($event)" aria-label="delete selected" translate translate-attr-label="EXTRACTEDREPORTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- EXTRACTEDREPORT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedExtractedReports" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getExtractedReports">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'ANALYTICS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'ANALYTICS.REPORTNAME\' | translate }}</th>\n                                <th md-column md-order-by="basename">{{ \'ANALYTICS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="type">{{ \'ANALYTICS.TYPE\' | translate }}</th>\n                                <th md-column md-order-by="startDate">{{ \'ANALYTICS.DATE_RANGE_FROM\' | translate }}</th>\n                                <th md-column md-order-by="endDate">{{ \'ANALYTICS.DATE_RANGE_TO\' | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ \'ANALYTICS.GENERATED_AT\' | translate }}</th>\n                                <th md-column md-order-by="status">{{ \'ANALYTICS.STATUS\' | translate }}</th>\n                                <th md-column md-order-by="output">{{ \'ANALYTICS.OUTPUT\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.extractedReports.rows.length">\n                                <td md-cell colspan="10">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="ANALYTICS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="extractedReport" md-select-id="id" ng-repeat="extractedReport in vm.extractedReports.rows">\n                                <td md-cell ng-if="extractedReport.userpic"><img class="avatar" alt="{{extractedReport.name}}" ng-src="api/users/{{extractedReport.id}}/avatar" /></td>\n                                <td md-cell ng-if="!extractedReport.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{extractedReport.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="id ">{{extractedReport.id}}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="name ">{{extractedReport.name}}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="basename ">{{extractedReport.basename}}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="type ">{{extractedReport.type}}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="startDate ">{{extractedReport.startDate | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="endDate ">{{extractedReport.endDate | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="createdAt ">{{extractedReport.createdAt | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="status ">{{extractedReport.status}}</td>\n                                <td ng-click="vm.createOrEditExtractedReport($event, extractedReport)" md-cell class="output ">{{extractedReport.output}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="ANALYTICS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(extractedReport, $event    )" translate="ANALYTICS.EDIT_EXTRACTEDREPORT">\n                                                    Edit ExtractedReport\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.downloadfile2(extractedReport, $event  , \'analytics/extracted_reports\'   )" translate="ANALYTICS.DOWNLOAD_EXTRACTEDREPORT">\n                                                    Download ExtractedReport\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(extractedReport, $event    )" translate="ANALYTICS.DELETE_EXTRACTEDREPORT">\n                                                    Delete ExtractedReport\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'ANALYTICS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'ANALYTICS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'ANALYTICS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.extractedReports.count}}" md-on-paginate="vm.getExtractedReports" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / EXTRACTEDREPORT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>'),e.put("app/main/apps/analytics/views/metrics/create/dialog.html",'<md-dialog class="metric-dialog" aria-label="New Metric">\n    <form name="metricForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.metric.name" ng-required="true" autofocus>\n\n                <div ng-messages="metricForm[\'name\'].$error" ng-show="metricForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.TABLE">Table</label>\n                <md-select name="table" ng-model="vm.metric.table" required>\n                    <md-option ng-value="\'report_agent\'">Agent Report</md-option>\n                    <md-option ng-value="\'report_call\'">Call Report</md-option>\n                    <md-option ng-value="\'cm_contacts\'">Contacts</md-option>\n                    <md-option ng-value="\'report_square\'">CSquare Report</md-option>\n                    <md-option ng-value="\'report_square_details\'">CSquare Details Report</md-option>\n                    <md-option ng-value="\'cm_hopper\'">Dialer Hopper Processing</md-option>\n                    <md-option ng-value="\'cm_hopper_history\'">Dialer Hopper Logs</md-option>\n                    <md-option ng-value="\'cm_hopper_final\'">Dialer Hopper Final</md-option>\n                    <md-option ng-value="\'report_integration\'">Integration Report</md-option>\n                    <md-option ng-value="\'report_jscripty_sessions\'">Jscripty Sessions</md-option>\n                    <md-option ng-value="\'report_jscripty_questions\'">Jscripty Questions</md-option>\n                    <md-option ng-value="\'report_jscripty_answers\'">Jscripty Answers</md-option>\n                    <md-option ng-value="\'cm_lists\'">Lists</md-option>\n                    <md-option ng-value="\'report_member\'">Member Report</md-option>\n                    <md-option ng-value="\'report_queue\'">Queue Report</md-option>\n                    <md-option ng-value="\'users\'">Users</md-option>\n                    <md-option ng-value="\'voice_recordings\'">Voice Recordings</md-option>\n                </md-select>\n                <div ng-messages="metricForm[\'table\'].$error" ng-show="metricForm[\'table\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.TABLE_REQUIRED">Table field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.METRIC">Metric</label>\n                <input type="text" name="metric" ng-model="vm.metric.metric" ng-required="true">\n\n                <div ng-messages="metricForm[\'metric\'].$error" ng-show="metricForm[\'metric\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.METRIC_REQUIRED">Metric field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.metric.description">\n\n                <div ng-messages="metricForm[\'description\'].$error" ng-show="metricForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMetric" ng-click="vm.saveMetric()" class="send-button md-accent md-raised" ng-disabled="metricForm.$invalid || metricForm.$pristine" aria-label="SAVE" translate="ANALYTICS.SAVE" translate-attr-aria-label="ANALYTICS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMetric" ng-click="vm.addNewMetric()" class="send-button md-accent md-raised" ng-disabled="metricForm.$invalid" aria-label="ADD" translate="ANALYTICS.ADD_METRIC" translate-attr-aria-label="ANALYTICS.ADD_METRIC">\n                    ADD METRIC\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMetric" ng-click="vm.deleteMetric($event)" aria-label="DELETE" translate translate-attr-aria-label="ANALYTICS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="ANALYTICS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/metrics/metrics.html",'<div id="metrics" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-chart-line" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="ANALYTICS.METRICS">Metrics</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="ANALYTICS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedMetrics.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedMetrics =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="ANALYTICS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-metrics-count">\n                    <span>{{vm.selectedMetrics.length}}</span>\n                    <span translate="ANALYTICS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="METRICS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllMetrics()" translate="ANALYTICS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectMetrics()" translate="ANALYTICS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedMetrics" csv-label="true" filename="metrics.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedMetrics($event)" aria-label="delete selected" translate translate-attr-label="METRICS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- METRIC TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedMetrics" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMetrics">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'ANALYTICS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'ANALYTICS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="table">{{ \'ANALYTICS.TABLE\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'ANALYTICS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.metrics.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="ANALYTICS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="metric" md-select-id="id" ng-repeat="metric in vm.metrics.rows">\n                                <td md-cell ng-if="metric.userpic"><img class="avatar" alt="{{metric.name}}" ng-src="api/users/{{metric.id}}/avatar" /></td>\n                                <td md-cell ng-if="!metric.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{metric.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditMetric($event, metric)" md-cell class="id ">{{metric.id}}</td>\n                                <td ng-click="vm.createOrEditMetric($event, metric)" md-cell class="name ">{{metric.name}}</td>\n                                <td ng-click="vm.createOrEditMetric($event, metric)" md-cell class="table ">{{ vm.arraytable[metric.table].option }}</td>\n                                <td ng-click="vm.createOrEditMetric($event, metric)" md-cell class="description ">{{metric.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="ANALYTICS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(metric, $event    )" translate="ANALYTICS.EDIT_METRIC">\n                                                    Edit Metric\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(metric, $event    )" translate="ANALYTICS.DELETE_METRIC">\n                                                    Delete Metric\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'ANALYTICS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'ANALYTICS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'ANALYTICS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.metrics.count}}" md-on-paginate="vm.getMetrics" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / METRIC TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD METRIC BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-metric-button" ng-click="vm.createOrEditMetric($event)" aria-label="add metric" translate translate-attr-aria-label="ANALYTICS.ADD_METRIC">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD METRIC BUTTON --\x3e\n</div>'),e.put("app/main/apps/analytics/views/reports/copy/dialog.html",'<md-dialog class="report-dialog" aria-label="Run Report">\n    <form name="reportForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="ANALYTICS.COPY_REPORT">Copy Report</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.NAME">Name</label>\n                <input name="name" ng-model="vm.report.name" required md-autofocus>\n                <div ng-messages="reportForm.name.$error" ng-show="reportForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="md-block">\n                <label translate="ANALYTICS.SELECT_NODE">Select Node</label>\n                <div js-tree="vm.treeCustomConfig" tree-events-obj="vm.treeCustomEvents" ng-model="vm.treeCustomData" tree="vm.treeCustomInstance"></div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.copyReport()" class="send-button md-accent md-raised" ng-disabled="!vm.currentNode" aria-label="COPY" translate="ANALYTICS.COPY_REPORT" translate-attr-aria-label="ANALYTICS.COPY_REPORT">\n                    COPY REPORT\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/reports/create/dialog.html",'<md-dialog class="report-dialog" aria-label="New Report">\n    <form name="reportForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.report.name" required md-autofocus>\n                <div ng-messages="reportForm.name.$error" ng-show="reportForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.newReport">\n                <label translate="ANALYTICS.TABLE">Table</label>\n                <md-select ng-model="vm.report.table" required>\n                    <md-option ng-repeat="table in vm.tables | orderBy:\'name\'" ng-value="table.name">{{table.name}}</md-option>\n                </md-select>\n                <div ng-messages="reportForm.table.$error" ng-show="reportForm.table.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.TABLE_REQUIRED">Table field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.report.description">\n                <div ng-messages="reportForm.description.$error" ng-show="reportForm.description.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-autocomplete ng-if="vm.newReport" md-selected-item="vm.selectedItem" md-search-text="vm.searchText" md-items="table in vm.tables | filter:vm.searchText" md-item-text="table.name" md-min-length="0" md-selected-item-change="vm.selectedTableChange(table)" placeholder="Select the table to Join">\n                <md-item-template>\n                    <span md-highlight-text="vm.searchText" md-highlight-flags="^i">{{table.name}}</span>\n                </md-item-template>\n                <md-not-found>\n                    No states matching "{{vm.searchText}}" were found.\n                </md-not-found>\n            </md-autocomplete>\n\n            <md-card ng-if="vm.newReport" md-theme="default" md-theme-watch ng-repeat="table in vm.joinTables">\n                <md-card-title>\n                    <md-card-title-text layout="row">\n                        <div layout="row" flex="50">\n                            <span class="md-subhead">{{table.name}}</span>\n                        </div>\n                        <div layout="row" layout-align="end center" flex>\n                            <md-button class="md-icon-button" ng-click="vm.removeJoin($index)">\n                                <md-icon md-font-icon="icon-delete" aria-label="alert error"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-card-title-text>\n                </md-card-title>\n                <md-card-content>\n                    <md-select ng-model="table.parentKey" placeholder="Select the parent key" ng-init="table.parentFields = []; vm.getFields(table, \'parentFields\', vm.report.table)" required>\n                        <md-option ng-repeat="field in table.parentFields" ng-value="field">{{field}}</md-option>\n                    </md-select>\n                    <md-select ng-model="table.foreignKey" placeholder="Select the foreign key" ng-init="table.foreignFields = []; vm.getFields(table, \'foreignFields\', table.name)" required>\n                        <md-option ng-repeat="field in table.foreignFields" ng-value="field">{{field}}</md-option>\n                    </md-select>\n                    <md-select ng-model="table.type" placeholder="Select join type" required>\n                        <md-option ng-repeat="join in vm.joinTypes" ng-value="join.key">{{join.value}}</md-option>\n                    </md-select>\n                </md-card-content>\n            </md-card>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-if="!vm.newReport" ng-click="vm.saveReport()" class="send-button md-accent md-raised" ng-disabled="reportForm.$invalid || reportForm.$pristine" aria-label="SAVE" translate="ANALYTICS.SAVE" translate-attr-aria-label="ANALYTICS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newReport" ng-click="vm.addNewReport()" class="send-button md-accent md-raised" ng-disabled="reportForm.$invalid || reportForm.$pristine" aria-label="ADD" translate="ANALYTICS.ADD_REPORT" translate-attr-aria-label="ANALYTICS.ADD_REPORT">\n                    ADD REPORT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newReport" ng-click="vm.deleteReport($event)" aria-label="DELETE" translate translate-attr-aria-label="ANALYTICS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="ANALYTICS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/reports/edit/condition/group.html",'<md-card class="padding-horizontal-15 padding-top-15">\n    <div layout="row" ng-if="vm_rc.crudPermissions.canEdit">\n        <md-input-container class="md-block" flex>\n            <label translate="ANALYTICS.OPERATOR">Operator</label>\n            <md-select ng-model="group.operator" required>\n                <md-option value="AND">AND</md-option>\n                <md-option value="OR">OR</md-option>\n            </md-select>\n            <div ng-messages="conditionsForm.operator.$error" ng-show="conditionsForm.operator.$touched" role="alert">\n                <div ng-message="required">\n                    <span translate="ANALYTICS.ERRORS.OPERATOR_REQUIRED">Operator field is required</span>\n                </div>\n            </div>\n        </md-input-container>\n        <md-input-container class="md-block">\n            <md-button class="md-raised md-accent" ng-click="vm_rc.addCondition(group.rules)">\n                <md-icon md-font-icon="icon-plus"></md-icon> {{\'ANALYTICS.CONDITION\' | translate}}\n            </md-button>\n        </md-input-container>\n        <md-input-container class="md-block">\n            <md-button class="md-raised md-accent" ng-click="vm_rc.addGroup(group.rules)">\n                <md-icon md-font-icon="icon-plus"></md-icon> {{\'ANALYTICS.GROUP\' | translate}}\n            </md-button>\n        </md-input-container>\n        <div flex></div>\n        <md-input-container class="md-block" ng-if="parent">\n            <md-button class="md-raised md-warn" ng-click="vm_rc.deleteConfirm(parent, index, $event)">\n                <md-icon md-font-icon="icon-delete"></md-icon> {{\'ANALYTICS.GROUP\' | translate}}\n            </md-button>\n        </md-input-container>\n    </div>\n    <div layout="column" ng-repeat="rule in group.rules track by $index">\n        <div layout="row" ng-if="!rule.group">\n            <md-input-container class="md-block" flex>\n                <label translate="ANALYTICS.COLUMN">COLUMN</label>\n                <md-select name="field" ng-model="rule.field" ng-disabled="!vm_rc.crudPermissions.canEdit" required>\n                    <md-optgroup label="{{vm_rc.report.table}}">\n                        <md-option ng-repeat="column in vm_rc.columns" value="{{vm_rc.report.table}}.{{column}}">{{column}}</md-option>\n                    </md-optgroup>\n                    <md-optgroup ng-if="vm_rc.report.joins" ng-repeat="join in vm_rc.report.joins" label="{{join.foreignTable}}">\n                        <md-option ng-repeat="field in join.foreignTableFields" value="{{join.foreignTable}}.{{field}}">{{field}}</md-option>\n                    </md-optgroup>\n                </md-select>\n                <div ng-messages="conditionsForm.field.$error" ng-show="conditionsForm.field.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.COLUMN_REQUIRED">Column field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" flex>\n                <label translate="ANALYTICS.CONDITION">CONDITION</label>\n                <md-select name="condition" ng-model="rule.condition" ng-disabled="!vm_rc.crudPermissions.canEdit" required>\n                    <md-option ng-repeat="condition in vm_rc.conditions" ng-value="condition">{{condition}}</md-option>\n                </md-select>\n                <div ng-messages="conditionsForm.condition.$error" ng-show="conditionsForm.condition.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.CONDITION_REQUIRED">Condition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm_rc.isValueByCondition(rule.condition)" class="md-block" flex>\n                <label translate="ANALYTICS.VALUE">VALUE</label>\n                <input type="text" name="value" ng-model="rule.value" ng-disabled="!vm_rc.crudPermissions.canEdit" required md-autofocus>\n                <div ng-messages="conditionsForm.value.$error" ng-show="conditionsForm.value.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm_rc.crudPermissions.canEdit" flex>\n                <md-button class="md-fab md-mini md-warn" aria-label="Delete row" ng-click="vm_rc.deleteConfirm(group.rules, $index, $event)">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </md-input-container>\n        </div>\n        <div ng-if="rule.group" ng-include="\'app/main/apps/analytics/views/reports/edit/condition/group.html\'" ng-init="parent=group.rules;index=$index;group=rule.group"></div>\n    </div>\n</md-card>'),e.put("app/main/apps/analytics/views/reports/edit/field/dialog.html",'<md-dialog class="reportField-dialog" aria-label="New Report Field">\n    <form name="reportFieldForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{vm.title}}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <pre></pre>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.reportField.type" ng-change="vm.reportField.field = undefined" required>\n                    <md-option value="column">Select a column</md-option>\n                    <md-option value="metric">Select an existing metric</md-option>\n                    <md-option value="custom">Write a custom metric</md-option>\n                </md-select>\n                <div ng-messages="reportForm.type.$error" ng-show="reportForm.type.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div ng-switch on="vm.reportField.type">\n                <md-input-container class="md-block" ng-switch-when="column">\n                    <label translate="ANALYTICS.COLUMN">Column Name</label>\n                    <md-select name="column" ng-model="vm.reportField.field" required>\n                        <md-optgroup label="{{vm.report.table}}">\n                            <md-option ng-repeat="column in vm.columns" value="{{vm.report.table}}.{{column}}">{{column}}</md-option>\n                            \x3c!-- <md-option ng-repeat="column in vm.columns" ng-value="">{{column}}</md-option> --\x3e\n                        </md-optgroup>\n                        <md-optgroup ng-if="vm.report.joins" ng-repeat="join in vm.report.joins" label="{{join.foreignTable}}">\n                            <md-option ng-repeat="field in join.foreignTableFields" value="{{join.foreignTable}}.{{field}}">{{field}}</md-option>\n                        </md-optgroup>\n                    </md-select>\n                    <div ng-messages="reportForm.column.$error" ng-show="reportForm.column.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="ANALYTICS.ERRORS.COLUMN_REQUIRED">Column field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n                <md-input-container class="md-block" ng-switch-when="metric">\n                    <label translate="ANALYTICS.METRIC_NAME">Metric Name</label>\n                    <md-select name="metric" ng-model="vm.reportField.MetricId" required>\n                        <md-option ng-repeat="metric in vm.metrics" ng-value="metric.id">{{metric.name}}</md-option>\n                    </md-select>\n                    <div ng-messages="reportForm.metric.$error" ng-show="reportForm.metric.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="ANALYTICS.ERRORS.METRIC_REQUIRED">Metric field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n                <md-input-container class="md-block" ng-switch-when="custom">\n                    <label translate="ANALYTICS.CUSTOM_METRIC">Custom Metric</label>\n                    <input type="text" name="field" ng-model="vm.reportField.field" required md-autofocus>\n                    <div ng-messages="reportFieldForm.field.$error" ng-show="reportFieldForm.field.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="ANALYTICS.ERRORS.CUSTOM_METRIC_REQUIRED">Custom Metric field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.ALIAS">Alias</label>\n                <input type="text" name="alias" ng-model="vm.reportField.alias" ng-required="vm.reportField.type === \'custom\' || vm.reportField.type === \'metric\'">\n                <div ng-messages="reportFieldForm.alias.$error" ng-show="reportFieldForm.alias.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.ALIAS_REQUIRED">Alias field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.reportField.type !== \'metric\'">\n                <label translate="ANALYTICS.FUNCTION">Function</label>\n                <md-select name="function" ng-model="vm.reportField.function">\n                    <md-option ng-value="null">No Function</md-option>\n                    <md-option ng-repeat="function in vm.sqlUtil.getFunctions" ng-value="function.value">{{function.value}}</md-option>\n                </md-select>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.reportField.type !== \'metric\'">\n                <label translate="ANALYTICS.FORMAT">Format</label>\n                <md-select name="format" ng-model="vm.reportField.format">\n                    <md-option ng-value="null">No Format</md-option>\n                    <md-option ng-repeat="format in vm.sqlUtil.getFormats" ng-value="format.value">{{format.value}}</md-option>\n                </md-select>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.GROUP_BY">Group By</label>\n                <md-select name="groupBy" ng-model="vm.reportField.groupBy">\n                    <md-option ng-repeat="gb in vm.sqlUtil.getGroupBy" ng-value="gb.value">{{gb.value ? \'Yes\' : \'No\'}}</md-option>\n                </md-select>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.ORDER_BY">Order By</label>\n                <md-select name="orderBy" ng-model="vm.reportField.orderBy">\n                    <md-option ng-value="null">No Order</md-option>\n                    <md-option ng-repeat="ob in vm.sqlUtil.getOrderBy" ng-value="ob.value">{{ob.value}}</md-option>\n                </md-select>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-if="!vm.newReportField" ng-click="vm.saveReportField()" class="send-button md-accent md-raised" ng-disabled="reportFieldForm.$invalid || reportFieldForm.$pristine" aria-label="SAVE" translate="ANALYTICS.SAVE" translate-attr-aria-label="ANALYTICS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newReportField" ng-click="vm.addNewReportField()" class="send-button md-accent md-raised" ng-disabled="reportFieldForm.$invalid || reportFieldForm.$pristine" aria-label="ADD" translate="ANALYTICS.ADD_REPORTFIELD" translate-attr-aria-label="ANALYTICS.ADD_REPORTFIELD">\n                    ADD REPORT FIELD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newReportField" ng-click="vm.deleteReportField($event)" aria-label="DELETE" translate translate-attr-aria-label="ANALYTICS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="ANALYTICS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/reports/edit/view.html",'<div id="analytics-report" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-reports-button md-icon-button" aria-label="Go to reports" ng-click="vm.gotoReports()" translate translate-attr-aria-label="ANALYTICS.GO_TO_ANALYTICSQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="report-image" hide-xs>\n                    <img ng-src="assets/images/business/reports.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.report.id}} {{vm.report.name}}\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="ANALYTICS.CREATED_AT"></span> <span>{{vm.report.createdAt | date:\'medium\'}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span>{{vm.report.description}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div>\n            <md-button type="submit" ng-click="vm.saveReport()" ng-disabled="generalForm.$pristine && conditionsForm.$pristine" class="send-button md-accent md-raised" translate="ANALYTICS.SAVE" translate-attr-aria-label="ANALYTICS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="ANALYTICS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="report-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="ANALYTICS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="ANALYTICS.NAME">Name</label>\n                                <input type="text" name="name" ng-disabled="!vm.crudPermissions.canEdit" ng-model="vm.report.name" required md-autofocus>\n                                <div ng-messages="generalForm.name.$error" ng-show="generalForm.name.$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="ANALYTICS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="ANALYTICS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-disabled="!vm.crudPermissions.canEdit" ng-model="vm.report.description">\n                                <div ng-messages="generalForm.description.$error" ng-show="generalForm.description.$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="ANALYTICS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="ANALYTICS.FIELDS">FIELDS</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="report-detail-form-container fields md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ReportFieldsController as vm_rf" ng-init="vm_rf.init(vm.report, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_rf.selectedReportFields.length">\n                                <div class="md-toolbar-tools">\n                                    <div layout="row" layout-align="start center">\n                                        <div layout="column" layout-align="start start">\n                                            <div class="md-subhead" translate="ANALYTICS.FIELDS">\n                                                <span translate="ANALYTICS.FIELDS">FIELDS</span>\n                                            </div>\n                                            <div class="h4">\n                                                <span translate="ANALYTICS.TABLE">TABLE</span> <span class="text-bold">{{vm.report.table}}</span>\n                                            </div>\n                                            <div class="h4" ng-if="vm.report.joins && vm.report.joins.length && vm.isArray(vm.report.joins)">\n                                                <span>Join</span> <span class="text-bold">{{ vm.mapArray(vm.report.joins, \'foreignTable\') }}</span>\n                                            </div>\n                                        </div>\n                                    </div>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_rf.query.filter = query" on-collapse="vm_rf.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-if="vm_rf.crudPermissions.canEdit" ng-click="vm_rf.createOrEditReportField($event)" aria-label="add field" translate translate-attr-label="ANALYTICS.ADD_FIELD">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_rf.selectedReportFields.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_rf.selectedReportFields.length}} {{vm_rf.selectedReportFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <md-button class="md-icon-button" ng-click="vm_rf.deleteSelectedReportFields($event)" aria-label="delete selected" translate translate-attr-label="ANALYTICS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select="vm_rf.crudPermissions.canDelete" multiple ng-model="vm_rf.selectedReportFields" md-progress="vm_rf.promise">\n                                    <thead md-head md-order="vm_rf.query.sort" md-on-reorder="vm_rf.getReportFields">\n                                        <tr md-row>\n                                            <th md-column width="10px" ng-if="vm_rf.crudPermissions.canEdit">\n                                                <md-icon md-font-icon="icon-drag-vertical"></md-icon>\n                                            </th>\n                                            <th md-column>Type</th>\n                                            <th md-column>Column or Metric</th>\n                                            <th md-column>Alias</th>\n                                            <th md-column>Function</th>\n                                            <th md-column>Format</th>\n                                            <th md-column>Group By</th>\n                                            <th md-column>Order By</th>\n                                            <th md-column width="10px" ng-if="vm_rf.crudPermissions.canEdit"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body ng-sortable="vm_rf.sortableTable">\n                                        <tr md-row md-select="reportField" md-select-id="id" ng-repeat="reportField in vm_rf.reportFields.rows">\n                                            <td md-cell class="handle" ng-if="vm_rf.crudPermissions.canEdit">\n                                                <md-icon md-font-icon="icon-drag-vertical" class="s16">\n                                            </td>\n                                            <td md-cell>\n                                                <div ng-if="reportField.MetricId && !reportField.custom" ng-click="vm_rf.createOrEditReportField($event, reportField)" class="icon icon-shape-plus s16"></div>\n                                                <div ng-if="!reportField.MetricId && reportField.custom" ng-click="vm_rf.createOrEditReportField($event, reportField)" class="icon icon-pencil-box-outline s16"></div>\n                                                <div ng-if="!reportField.MetricId && !reportField.custom" ng-click="vm_rf.createOrEditReportField($event, reportField)" class="icon icon-view-column s16"></div>\n                                            </td>\n                                            <td md-cell ng-click="vm_rf.createOrEditReportField($event, reportField)">{{reportField.MetricId ? vm_rf.getMetricName(reportField.MetricId) : reportField.field}}</td>\n                                            <td md-cell ng-click="vm_rf.createOrEditReportField($event, reportField)">{{reportField.alias}}</td>\n                                            <td md-cell ng-click="vm_rf.createOrEditReportField($event, reportField)"><span class="text-boxed blue-bg white-fg" ng-if="reportField.function">{{reportField.function}}</span><span ng-if="!reportField.function">--</span></td>\n                                            <td md-cell ng-click="vm_rf.createOrEditReportField($event, reportField)"><span class="text-boxed blue-bg white-fg" ng-if="reportField.format">{{reportField.format}}</span><span ng-if="!reportField.format">--</span></td>\n                                            <td md-cell ng-click="vm_rf.createOrEditReportField($event, reportField)"><span class="text-boxed blue-bg white-fg" ng-if="reportField.groupBy">YES</span><span ng-if="!reportField.groupBy">--</span></td>\n                                            <td md-cell ng-click="vm_rf.createOrEditReportField($event, reportField)"><span class="text-boxed blue-bg white-fg" ng-if="reportField.orderBy">{{reportField.orderBy}}</span><span ng-if="!reportField.orderBy">--</span></td>\n                                            <td md-cell class="actions" ng-if="vm_rf.crudPermissions.canEdit">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="ANALYTICS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_rf.createOrEditReportField($event, reportField)" translate="ANALYTICS.EDIT_REPORTFIELD">\n                                                                Edit Field\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_rf.deleteConfirm(reportField, $event)" translate="ANALYTICS.DELETE_REPORTFIELD">\n                                                                Delete Field\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                        </div>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="ANALYTICS.CONDITIONS">CONDITIONS</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="report-detail-form-container conditions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ReportConditionsController as vm_rc" ng-init="vm_rc.init(vm.report, vm.crudPermissions)">\n                            <div class="pb-16" layout="row" layout-align="start center">\n                                <div class="h2 secondary-text" translate="ANALYTICS.CONDITION">CONDITION</div>\n                            </div>\n                            <form name="conditionsForm" novalidate>\n                                <div ng-if="vm_rc.report.condition.group" ng-include="\'app/main/apps/analytics/views/reports/edit/condition/group.html\'" ng-init="group=vm_rc.report.condition.group"></div>\n                            </form>\n                        </div>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab md-on-select="vm.previewReport()">\n                <md-tab-label>\n                    <span translate="ANALYTICS.PREVIEW">PREVIEW</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="report-detail-form-container result md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div ng-if="vm.error" class="h2 secondary-text" translate="ANALYTICS.ERROR">ERROR</div>\n                            <div ng-if="!vm.error" class="h2 secondary-text" translate="ANALYTICS.LIMITED_RESULT">LIMITED RESULT</div>\n                        </div>\n                        <dl ng-if="vm.error">\n                            <dt class="text-bold" translate="ANALYTICS.QUERY_ERROR">Query Error</dt>\n                            <dd>{{vm.error.sql}}</dd>\n                            <dt translate="ANALYTICS.MESSAGE">Message</dt>\n                            <dd>{{vm.error.msg}}</dd>\n                        </dl>\n                        <md-table-container ng-if="!vm.error">\n                            <table md-table>\n                                <thead md-head>\n                                    <tr md-row>\n                                        <th ng-repeat="column in vm.columns">{{column.alias || column.field}}</th>\n                                    </tr>\n                                </thead>\n                                <tbody md-body>\n                                    <tr md-row ng-repeat="row in vm.rows">\n                                        <td md-cell ng-repeat="(key, value) in row">{{ vm.valueReplacer(key, value) }}</td>\n                                    </tr>\n                                    <tr md-row ng-if="!vm.rows.length">\n                                        <td md-cell colspan="{{vm.columns.length}}"><span translate="ANALYTICS.NO_DATA">NO DATA</span></td>\n                                    </tr>\n                                </tbody>\n                            </table>\n                        </md-table-container>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab md-on-select="vm.queryReport()">\n                <md-tab-label>\n                    <span>Query</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="report-detail-form-container result md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div ng-if="vm.error" class="h2 secondary-text" translate="ANALYTICS.ERROR">ERROR</div>\n                            <div ng-if="!vm.error" class="h2 secondary-text">SQL</div>\n                        </div>\n                        <dl ng-if="vm.error">\n                            <dt class="text-bold" translate="ANALYTICS.QUERY_ERROR">Query Error</dt>\n                            <dd>{{vm.error.sql}}</dd>\n                            <dt translate="ANALYTICS.MESSAGE">Message</dt>\n                            <dd>{{vm.error.msg}}</dd>\n                        </dl>\n                        <div ng-if="!vm.error">\n                            {{vm.queryResult}}\n                        </div>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/analytics/views/reports/preview/dialog.html",'<md-dialog aria-label="Run Report">\n    <form name="reportForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="ANALYTICS.PREVIEW_REPORT">Preview Report</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div class="md-block">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div ng-if="vm.error" class="h2 secondary-text" translate="ANALYTICS.ERROR">ERROR</div>\n                    <div ng-if="!vm.error" class="h2 secondary-text" translate="ANALYTICS.LIMITED_RESULT">LIMITED RESULT</div>\n                </div>\n                <dl ng-if="vm.error">\n                    <dt class="text-bold" translate="ANALYTICS.QUERY_ERROR">Query Error</dt>\n                    <dd>{{vm.error.sql}}</dd>\n                    <dt translate="ANALYTICS.MESSAGE">Message</dt>\n                    <dd>{{vm.error.msg}}</dd>\n                </dl>\n                <md-table-container ng-if="!vm.error">\n                    <table md-table md-progress="vm.promise">\n                        <thead md-head>\n                            <tr md-row>\n                                <th md-column ng-repeat="column in vm.columns">{{column.alias || column.field}}</th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-repeat="row in vm.rows">\n                                <td md-cell ng-repeat="(key, value) in row">{{ vm.valueReplacer(key, value) }}</td>\n                            </tr>\n                            <tr md-row ng-if="!vm.rows.length">\n                                <td md-cell colspan="{{vm.columns.length}}"><span translate="ANALYTICS.NO_DATA">NO DATA</span></td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div flex></div>\n            <md-button type="submit" ng-click="vm.closeDialog()" class="md-raised" aria-label="CLOSE" translate="ANALYTICS.CLOSE" translate-attr-aria-label="ANALYTICS.CLOSE">\n                CLOSE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/reports/reports.html",'<div id="reports" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-chart-line" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="ANALYTICS.REPORTS">Reports</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedReports.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedReports =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="ANALYTICS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-reports-count">\n                    <span>{{vm.selectedReports.length}}</span>\n                    <span translate="ANALYTICS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="ANALYTICS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllReports()" translate="ANALYTICS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectReports()" translate="ANALYTICS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedReports" csv-label="true" filename="reports.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button ng-if="vm.crudPermissions.canDelete && vm.currentNode.custom" class="md-icon-button" ng-click="vm.deleteSelectedReports($event)" aria-label="delete selected" translate translate-attr-label="ANALYTICS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div layout="column" flex="30">\n            <md-card class="padding-top-5 padding-horizontal-10 padding-bottom-0">\n                \x3c!-- SEARCH --\x3e\n                <div layout="row" layout-align="start center">\n                    <label for="searchFolder" class="m-0">\n                        <md-icon md-font-icon="icon-magnify"></md-icon>\n                    </label>\n                    <md-input-container md-no-float class="margin-horizontal-0 margin-bottom-0 margin-top-10" flex>\n                        <input id="searchFolder" placeholder="Search folder" type="text" ng-model="vm.search" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="ANALYTICS.SEARCH_FOR_FOLDER">\n                    </md-input-container>\n                </div>\n                \x3c!-- / SEARCH --\x3e\n            </md-card>\n            <md-card class="padding-10 scrollable" ms-scroll>\n                <div js-tree="vm.treeDefaultConfig" tree-events-obj="vm.treeDefaultEvents" ng-model="vm.treeDefaultData" tree="vm.treeDefaultInstance"></div>\n            </md-card>\n            <md-card class="padding-10 scrollable" ms-scroll>\n                <div js-tree="vm.treeCustomConfig" tree-events-obj="vm.treeCustomEvents" ng-model="vm.treeCustomData" tree="vm.treeCustomInstance"></div>\n            </md-card>\n        </div>\n        <md-card flex="70">\n            <md-toolbar class="md-table-toolbar md-default">\n                <div class="md-toolbar-tools">\n                    <span class="h2 secondary-text">{{vm.currentNode.text}}</span>\n                    <p ng-if="vm.currentPath">\n                        <span class="text-boxed">{{vm.currentPath}}</span>\n                    </p>\n                    <div flex></div>\n                    <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.query.filter = undefined" debounce="300"></ms-search-bar>\n                    <div flow-init flow-file-added="vm.importReport($file, $event, $flow)">\n                        <md-button ng-if="vm.crudPermissions.canEdit && vm.currentNode.custom" class="md-icon-button" aria-label="import report" translate translate-attr-label="ANALYTICS.IMPORT_REPORT" flow-btn>\n                            <md-icon md-font-icon="icon-upload"></md-icon>\n                        </md-button>\n                    </div>\n                    <md-button ng-if="vm.crudPermissions.canEdit && vm.currentNode.custom" class="md-icon-button" ng-click="vm.createOrEditReport($event)" aria-label="add report" translate translate-attr-label="ANALYTICS.ADD_REPORT">\n                        <md-icon md-font-icon="icon-plus"></md-icon>\n                    </md-button>\n                </div>\n            </md-toolbar>\n            <md-table-container>\n                <table md-table md-row-select multiple ng-model="vm.selectedReports" md-progress="vm.promise">\n                    <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getReports">\n                        <tr md-row>\n                            <th md-column md-order-by="id" width="10px">{{ \'ANALYTICS.ID\' | translate }}</th>\n                            <th md-column md-order-by="name">{{ \'ANALYTICS.NAME\' | translate }}</th>\n                            <th md-column md-order-by="description">{{ \'ANALYTICS.DESCRIPTION\' | translate }}</th>\n                            <th md-column md-order-by="createdAt">{{ \'ANALYTICS.CREATED_AT\' | translate }}</th>\n                            <th md-column width="10px"></th>\n                        </tr>\n                    </thead>\n                    <tbody md-body>\n                        <tr md-row ng-hide="vm.reports.rows.length">\n                            <td md-cell colspan="5">\n                                <div layout="row" layout-align="center center">\n                                    <span translate="ANALYTICS.NO_AVAILABLE_INFO">No Available Info</span>\n                                </div>\n                            </td>\n                        </tr>\n                        <tr md-row md-select="report" md-select-id="id" ng-repeat="report in vm.reports.rows">\n                            <td ng-click="!vm.crudPermissions.canEdit ? vm.currentNode.custom && vm.editstate(report, $event) : vm.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="id">{{report.id}}</td>\n                            <td ng-click="!vm.crudPermissions.canEdit ? vm.currentNode.custom && vm.editstate(report, $event) : vm.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="name">{{report.name}}</td>\n                            <td ng-click="!vm.crudPermissions.canEdit ? vm.currentNode.custom && vm.editstate(report, $event) : vm.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="description">{{report.description}}</td>\n                            <td ng-click="!vm.crudPermissions.canEdit ? vm.currentNode.custom && vm.editstate(report, $event) : vm.currentNode.custom && vm.createOrEditReport($event, report)" md-cell class="createdAt">{{report.createdAt | date:\'medium\'}}</td>\n                            <td md-cell class="actions">\n                                <md-menu>\n                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="ANALYTICS.MORE" ng-click="$mdOpenMenu($event)">\n                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                    </md-button>\n\n                                    <md-menu-content width="3">\n                                        <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                            <md-button ng-click="vm.copydialog(report, $event)" translate="ANALYTICS.COPY_REPORT">\n                                                Copy Report\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item>\n                                            <md-button ng-click="vm.previewdialog(report, $event)" translate="ANALYTICS.PREVIEW_REPORT">\n                                                Preview Report\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item>\n                                            <md-button ng-click="vm.rundialog(report, $event)" translate="ANALYTICS.RUN_REPORT">\n                                                Run Report\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item>\n                                            <md-button ng-click="vm.downloadfile(report, $event)" translate="ANALYTICS.DOWNLOAD_JSON_REPORT">\n                                                Download Json Report\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-divider ng-if="vm.crudPermissions.canEdit && vm.crudPermissions.canDelete && vm.currentNode.custom">\n                                        </md-menu-divider>\n                                        <md-menu-item ng-if="vm.crudPermissions.canEdit && vm.currentNode.custom">\n                                            <md-button ng-click="vm.editstate(report, $event)" translate="ANALYTICS.EDIT_REPORT">\n                                                Edit Report\n                                            </md-button>\n                                        </md-menu-item>\n\n                                        <md-menu-item ng-if="vm.crudPermissions.canDelete && vm.currentNode.custom">\n                                            <md-button ng-click="vm.deleteconfirm(report, $event)" translate="ANALYTICS.DELETE_REPORT">\n                                                Delete Report\n                                            </md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </td>\n                        </tr>\n                    </tbody>\n                </table>\n            </md-table-container>\n\n            <md-table-pagination md-label="{page: \'{{\'ANALYTICS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'ANALYTICS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'ANALYTICS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.reports.count}}" md-on-paginate="vm.getReports" md-page-select></md-table-pagination>\n        </md-card>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>'),e.put("app/main/apps/analytics/views/reports/run/dialog.html",'<md-dialog class="report-dialog" aria-label="Run Report">\n    <form name="reportForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="ANALYTICS.RUN_REPORT">Run Report</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.NAME">Name</label>\n                <input name="name" ng-model="vm.export.name" required md-autofocus>\n                <div ng-messages="reportForm.name.$error" ng-show="reportForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="ANALYTICS.FORMAT">FORMAT</label>\n                <md-select name="format" ng-model="vm.export.output" required>\n                    <md-option value="csv">CSV</md-option>\n                    <md-option value="xlsx">Excel (XLSX)</md-option>\n                    <md-option value="pdf">PDF</md-option>\n                    <md-option value="web">Web</md-option>\n                </md-select>\n                <div ng-messages="reportForm.format.$error" ng-show="reportForm.format.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="ANALYTICS.ERRORS.FORMAT_REQUIRED">Format field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div layout="row">\n                <div class="md-block" flex>\n                    <mdp-date-picker mdp-open-on-click required name="dateRangeFrom" mdp-placeholder="Date Range From" mdp-format="YYYY-MM-DD" mdp-max-date="vm.dateRangeTo" ng-model="vm.export.startDate">\n                        <div ng-messages="reportForm.dateRangeFrom.$error" ng-show="reportForm.dateRangeFrom.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="ANALYTICS.ERRORS.DATE_RANGE_FROM_REQUIRED">Date Range From field is required</span>\n                            </div>\n                            <div ng-message="format">\n                                <span translate="ANALYTICS.ERRORS.DATE_RANGE_FROM_INVALID">Date Range From field is invalid</span>\n                            </div>\n                            <div ng-message="maxDate">\n                                <span translate="ANALYTICS.ERRORS.DATE_RANGE_FROM_MAX_INVALID">Date Range From Max field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-date-picker>\n                </div>\n                <div class="md-block" flex>\n                    <mdp-date-picker mdp-open-on-click required name="dateRangeTo" mdp-placeholder="Date Range To" mdp-format="YYYY-MM-DD" mdp-min-date="vm.dateRangeFrom" ng-model="vm.export.endDate">\n                        <div ng-messages="reportForm.dateRangeTo.$error" ng-show="reportForm.dateRangeTo.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="ANALYTICS.ERRORS.DATE_RANGE_TO_REQUIRED">Date Range From field is required</span>\n                            </div>\n                            <div ng-message="format">\n                                <span translate="ANALYTICS.ERRORS.DATE_RANGE_TO_INVALID">Date Range From field is invalid</span>\n                            </div>\n                            <div ng-message="minDate">\n                                <span translate="ANALYTICS.ERRORS.DATE_RANGE_FROM_MIN_INVALID">Date Range From Min field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-date-picker>\n                </div>\n            </div>\n            <div layout="row">\n                <div class="md-block" flex>\n                    <mdp-time-picker required name="timeRangeFrom" mdp-placeholder="Time Range From" mdp-format="HH:mm:ss" mdp-auto-switch="true" mdp-max-date="vm.dateRangeTo" ng-model="vm.export.startDate">\n                        <div ng-messages="reportForm.timeRangeFrom.$error" ng-show="reportForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="ANALYTICS.ERRORS.TIME_RANGE_FROM_REQUIRED">Time Range From field is required</span>\n                            </div>\n                            <div ng-message="format">\n                                <span translate="ANALYTICS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex>\n                    <mdp-time-picker required name="timeRangeTo" mdp-placeholder="Time Range To" mdp-format="HH:mm:ss" mdp-auto-switch="true" mdp-min-date="vm.dateRangeFrom" ng-model="vm.export.endDate">\n                        <div ng-messages="reportForm.timeRangeTo.$error" ng-show="reportForm.timeRangeTo.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="ANALYTICS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range From field is required</span>\n                            </div>\n                            <div ng-message="format">\n                                <span translate="ANALYTICS.ERRORS.TIME_RANGE_TO_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.runReport($event)" class="send-button md-accent md-raised" ng-disabled="reportForm.$invalid" aria-label="RUN" translate="ANALYTICS.RUN_REPORT" translate-attr-aria-label="ANALYTICS.RUN_REPORT">\n                    RUN REPORT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-click="vm.refreshDate()" aria-label="REFRESH" translate translate-attr-aria-label="ANALYTICS.REFRESH">\n                    <md-icon md-font-icon="icon-refresh"></md-icon>\n                    <md-tooltip><span translate="ANALYTICS.REFRESH">REFRESH</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/analytics/views/reports/run/web/dialog.html",'<md-dialog class="web-dialog" aria-label="Show Report">\n    <form name="reportForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="ANALYTICS.PREVIEW_REPORT">Web Report</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div class="md-block">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div ng-if="vm.error" class="h2 secondary-text" translate="ANALYTICS.ERROR">ERROR</div>\n                </div>\n                <dl ng-if="vm.error">\n                    <dt class="text-bold" translate="ANALYTICS.QUERY_ERROR">Query Error</dt>\n                    <dd>{{vm.error.sql}}</dd>\n                    <dt translate="ANALYTICS.MESSAGE">Message</dt>\n                    <dd>{{vm.error.msg}}</dd>\n                </dl>\n                <md-table-container ng-if="!vm.error">\n                    <table md-table md-progress="vm.promise">\n                        <thead md-head>\n                            <tr md-row>\n                                <th md-column ng-repeat="column in vm.columns">{{column.alias || column.field}}</th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-repeat="row in vm.results.rows">\n                                <td md-cell ng-repeat="(key, value) in row">{{ vm.valueReplacer(key, value) }}</td>\n                            </tr>\n                            <tr md-row ng-if="!vm.results.rows.length">\n                                <td md-cell colspan="{{vm.columns.length}}">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="ANALYTICS.NO_DATA">NO DATA</span>\n                                    </div>\n                                </td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'ANALYTICS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'ANALYTICS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'ANALYTICS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.results.count}}" md-on-paginate="vm.getResults" md-page-select></md-table-pagination>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div flex></div>\n            <md-button type="submit" ng-click="vm.closeDialog()" class="md-raised" aria-label="CLOSE" translate="ANALYTICS.CLOSE" translate-attr-aria-label="ANALYTICS.CLOSE">\n                CLOSE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/odbcs/create/dialog.html",'<md-dialog class="odbc-dialog" aria-label="New Odbc">\n    <form name="odbcForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.odbc.name" ng-required="true" autofocus>\n\n                <div ng-messages="odbcForm[\'name\'].$error" ng-show="odbcForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.DSN">DSN</label>\n                <input type="text" name="dsn" ng-model="vm.odbc.dsn" ng-required="true">\n\n                <div class="hint"><span translate="CALLYSQUARE.HELP.DSN"></span></div>\n                <div ng-messages="odbcForm[\'dsn\'].$error" ng-show="odbcForm[\'dsn\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.DSN_REQUIRED">DSN field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.odbc.description">\n\n                <div ng-messages="odbcForm[\'description\'].$error" ng-show="odbcForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newOdbc" ng-click="vm.saveOdbc()" class="send-button md-accent md-raised" ng-disabled="odbcForm.$invalid || odbcForm.$pristine" aria-label="SAVE" translate="CALLYSQUARE.SAVE" translate-attr-aria-label="CALLYSQUARE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newOdbc" ng-click="vm.addNewOdbc()" class="send-button md-accent md-raised" ng-disabled="odbcForm.$invalid" aria-label="ADD" translate="CALLYSQUARE.ADD_ODBC" translate-attr-aria-label="CALLYSQUARE.ADD_ODBC">\n                    ADD ODBC\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newOdbc" ng-click="vm.deleteOdbc($event)" aria-label="DELETE" translate translate-attr-aria-label="CALLYSQUARE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CALLYSQUARE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/odbcs/odbcs.html",'<div id="odbcs" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-sitemap" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CALLYSQUARE.ODBC">ODBC</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CALLYSQUARE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedODBC.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedODBC =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CALLYSQUARE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-odbcs-count">\n                    <span>{{vm.selectedODBC.length}}</span>\n                    <span translate="CALLYSQUARE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="ODBC.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllODBC()" translate="CALLYSQUARE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectODBC()" translate="CALLYSQUARE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedODBC" csv-label="true" filename="odbcs.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedODBC($event)" aria-label="delete selected" translate translate-attr-label="ODBC.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- ODBC TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedODBC" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getODBC">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CALLYSQUARE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'CALLYSQUARE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="dsn">{{ \'CALLYSQUARE.DSN\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'CALLYSQUARE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.odbcs.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CALLYSQUARE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="odbc" md-select-id="id" ng-repeat="odbc in vm.odbcs.rows">\n                                <td md-cell ng-if="odbc.userpic"><img class="avatar" alt="{{odbc.name}}" ng-src="api/users/{{odbc.id}}/avatar" /></td>\n                                <td md-cell ng-if="!odbc.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{odbc.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditOdbc($event, odbc)" md-cell class="id ">{{odbc.id}}</td>\n                                <td ng-click="vm.createOrEditOdbc($event, odbc)" md-cell class="name ">{{odbc.name}}</td>\n                                <td ng-click="vm.createOrEditOdbc($event, odbc)" md-cell class="dsn ">{{odbc.dsn}}</td>\n                                <td ng-click="vm.createOrEditOdbc($event, odbc)" md-cell class="description ">{{odbc.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CALLYSQUARE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(odbc, $event    )" translate="CALLYSQUARE.EDIT_ODBC">\n                                                    Edit Odbc\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestOdbc(odbc, $event    )" translate="CALLYSQUARE.TEST_ODBC">\n                                                    Test Odbc\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(odbc, $event    )" translate="CALLYSQUARE.DELETE_ODBC">\n                                                    Delete Odbc\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CALLYSQUARE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CALLYSQUARE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CALLYSQUARE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.odbcs.count}}" md-on-paginate="vm.getODBC" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / ODBC TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD ODBC BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-odbc-button" ng-click="vm.createOrEditOdbc($event)" aria-label="add odbc" translate translate-attr-aria-label="CALLYSQUARE.ADD_ODBC">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD ODBC BUTTON --\x3e\n</div>'),e.put("app/main/apps/callysquare/views/projects/create/dialog.html",'<md-dialog class="project-dialog" aria-label="New Project">\n    <form name="projectForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{vm.title | translate}}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.NAME">Name</label>\n                <input name="name" ng-model="vm.project.name" required md-autofocus ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-disabled="!vm.newProject">\n                <div ng-messages="projectForm.name.$error" ng-show="projectForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="VOICE.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.DESCRIPTION">Description</label>\n                <input name="description" ng-model="vm.project.description">\n                <div ng-messages="projectForm.description.$error" ng-show="projectForm.description.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.openFromEditor" class="md-block">\n                \x3c!-- Added to check if I\'m opening the dialog directly from the square editor --\x3e\n                <md-switch ng-model="vm.newWindow" aria-label="{{\'CALLYSQUARE.OPEN_NEW_WINDOW\' | translate }}"><span translate="CALLYSQUARE.OPEN_NEW_WINDOW"></span></md-switch>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-if="!vm.newProject" ng-click="vm.saveProject()" class="send-button md-accent md-raised" ng-disabled="projectForm.$invalid || projectForm.$pristine" aria-label="SAVE" translate="CALLYSQUARE.SAVE" translate-attr-aria-label="CALLYSQUARE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newProject" ng-click="vm.addNewProject()" class="send-button md-accent md-raised" ng-disabled="projectForm.$invalid || projectForm.$pristine" aria-label="ADD" translate="CALLYSQUARE.ADD_PROJECT" translate-attr-aria-label="CALLYSQUARE.ADD_PROJECT">\n                    ADD PROJECT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newProject" ng-click="vm.deleteProject($event)" aria-label="DELETE" translate translate-attr-aria-label="CALLYSQUARE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CALLYSQUARE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/dialog/dialog.html",'<md-dialog class="project-dialog" aria-label="New dialog" ng-init="vm.onInit()">\n    <form name="dialogForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title"><span translate="CALLYSQUARE.EDIT"></span> <span translate="CALLYSQUARE.{{vm.cellName | uppercase}}"></span></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <md-input-container class="md-block" ng-repeat="attribute in vm.attributes" ng-switch="attribute.name">\n                <label translate="CALLYSQUARE.{{attribute.name | uppercase}}">{{attribute.name | ucfirst }}</label>\n\n                \x3c!--  START SELECT INPUT --\x3e\n                <md-select name="{{attribute.name}}" ng-model="attribute.value" ng-disabled="!vm.crudPermissions.canEdit" ng-switch-when-separator="|" ng-switch-when="answer|trunk_name|trunk_id|queue_id|file_id|variable_id|google_tts_language|ispeech_tts_language|ispeech_asr_language|google_asr_language|hiddendigitspos|odbc_id|project_id|beep|account_id|interval_id|template_id|list_id|recordingFormat|callback_priority|aws_polly_voice|aws_polly_region|aws_lex_region|sms_account_id|findBy|pause_id|aws_text_type|dialogflow_language|ndagenerate_audio|ndaactivity_type" ng-required="attribute.required">\n                    <md-option ng-if="attribute.defaultValue" ng-value="\'\'"> - None - </md-option>\n                    <md-option value="{{v.value}}" ng-repeat="v in vm.values[attribute.name]" ng-disabled="v.canSelect === false">{{v.option}}</md-option>\n                    <md-option ng-if="!vm.values[attribute.name].length" value="-1">No {{attribute.name}} available!</md-option>\n                </md-select>\n                \x3c!--  END SELECT INPUT --\x3e\n\n                \x3c!--  START SELECT INPUT --\x3e\n                <md-select name="{{attribute.name}}" ng-model="attribute.value" ng-disabled="!vm.crudPermissions.canEdit" ng-switch-when-separator="|" ng-switch-when="sip_id" ng-required="attribute.required">\n                    <md-optgroup label="{{\'CALLYSQUARE.AGENTS\' | translate}}">\n                        <md-option value="{{v.value}}" ng-repeat="v in vm.values[attribute.name]" ng-if="v.group === \'agent\'" ng-disabled="v.canSelect === false">{{v.option}}</md-option>\n                    </md-optgroup>\n                    <md-optgroup label="{{\'CALLYSQUARE.TELEPHONES\' | translate}}">\n                        <md-option value="{{v.value}}" ng-repeat="v in vm.values[attribute.name]" ng-if="v.group === \'telephone\'" ng-disabled="v.canSelect === false">{{v.option}}</md-option>\n                    </md-optgroup>\n                    <md-optgroup label="{{\'CALLYSQUARE.USERS\' | translate}}">\n                        <md-option value="{{v.value}}" ng-repeat="v in vm.values[attribute.name]" ng-if="v.group === \'admin\' || v.group === \'user\'">{{v.option}}</md-option>\n                    </md-optgroup>\n                    <md-option ng-if="!vm.values[attribute.name].length" value="-1">No {{attribute.name}} available!</md-option>\n                </md-select>\n                \x3c!--  END SELECT INPUT --\x3e\n\n                \x3c!--  START NUMBER INPUT --\x3e\n                <div ng-switch-when="timeout">\n                    <div ng-switch="vm.cellName">\n                        <input ng-switch-when-separator="|" ng-switch-when="answer|ext_dial|dial|queue" type="number" step="any" name="{{attribute.name}}" min="0" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit" string-to-number>\n                        <input ng-switch-when-separator="|" ng-switch-when="record|ispeechasr|googleasr" type="number" step="any" name="{{attribute.name}}" min="-1" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit" string-to-number>\n                        <input ng-switch-default type="number" step="any" name="{{attribute.name}}" min="0" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit" string-to-number>\n                    </div>\n                </div>\n                <input ng-switch-when-separator="|" ng-switch-when="speed" type="number" step="any" name="{{attribute.name}}" min="-10" max="-10" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit" string-to-number>\n                <input ng-switch-when-separator="|" ng-switch-when="maxdigit|mindigit|digit" type="number" step="any" name="{{attribute.name}}" min="1" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit" string-to-number>\n                <input ng-switch-when-separator="|" ng-switch-when="retry|response|hiddendigitsnum|priority" type="number" step="any" name="{{attribute.name}}" min="1" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit" string-to-number>\n                \x3c!--  END NUMBER INPUT --\x3e\n\n                \x3c!--  START TEXTAREA INPUT --\x3e\n                <textarea name="{{attribute.name}}" ng-model="attribute.value" ng-switch-when-separator="|" ng-switch-when="query|sms_text|condition|text|custom_action_data" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit"></textarea>\n                \x3c!--  END TEXTAREA INPUT --\x3e\n\n                \x3c!-- START URL INPUT --\x3e\n                <input ng-switch-when-separator="|" ng-switch-when="ndauth_url|ndassistant_url" type="url" name="{{attribute.name}}" ng-model="attribute.value" ng-required="attribute.required">\n                \x3c!-- END URL INPUT --\x3e\n\n                \x3c!--  START TEXT INPUT --\x3e\n                <input ng-switch-default name="{{attribute.name}}" ng-model="attribute.value" ng-required="attribute.required" ng-disabled="!vm.crudPermissions.canEdit">\n                \x3c!--  END TEXT INPUT--\x3e\n\n                <div class="hint" ng-if="attribute.help">\n                    <span translate="CALLYSQUARE.HELP.{{attribute.name | uppercase}}"></span>\n                </div>\n                <div ng-messages="dialogForm[attribute.name].$error" ng-show="dialogForm[attribute.name].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.FIELD_REQUIRED">The field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="vm.crudPermissions.canEdit">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.closeDialog(true)" class="send-button md-accent md-raised" ng-disabled="dialogForm.$invalid || dialogForm.$pristine" aria-label="SAVE" translate="CALLYSQUARE.SAVE" translate-attr-aria-label="CALLYSQUARE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/edit/edit.html",'<md-dialog class="project-dialog" aria-label="New dialog">\n    <form name="editForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title"><span translate="CALLYSQUARE.EDIT_XML"></span></span></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label>XML</label>\n                <textarea name="preproduction" ng-model="vm.project.preproduction"></textarea>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.closeDialog(true)" class="send-button md-accent md-raised" ng-disabled="editForm.$invalid" aria-label="SAVE" translate="CALLYSQUARE.SAVE" translate-attr-aria-label="CALLYSQUARE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/import/import.html",'<md-dialog class="project-dialog" aria-label="New dialog">\n    <form name="importForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title"><span translate="CALLYSQUARE.IMPORT_XML"></span></span></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div id="xml-uploader" flow-init="vm.ngFlowOptions" flow-name="vm.ngFlow.flow" flow-file-added="vm.fileAdded($file)" flow-drop flow-drag-enter="vm.dropping=true" flow-drag-leave="vm.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                <div class="drop-text hint-text" layout="row" layout-align="center center">\n                    <span translate="CALLYSQUARE.DROP_TO_UPLOAD">Drop to upload</span>\n                </div>\n\n                <div class="upload-button" layout="column" layout-align="center center">\n                    <md-button class="md-accent md-raised" flow-btn>\n                        Upload\n                    </md-button>\n                    <span class="secondary-text mt-8" translate="CALLYSQUARE.DROP_TO_UPLOAD_MESSAGE">You can also drop files here to upload. Only XML - Max. 5MB</span>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.closeDialog()" class="send-button md-accent md-raised" ng-disabled="importForm.$invalid" aria-label="CLOSE" translate="CALLYSQUARE.CLOSE" translate-attr-aria-label="CALLYSQUARE.CLOSE">\n                    CLOSE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/info/info.html",'<md-dialog class="project-dialog" aria-label="New dialog">\n    <form name="descriptionFrom" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title"><span translate="CALLYSQUARE.UPDATE_INFO"></span></span></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.DESCRIPTION">Description</label>\n                <input name="description" ng-model="vm.project.description" md-autofocus>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.NOTES">Description</label>\n                <textarea name="notes" ng-model="vm.project.notes"></textarea>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.save()" class="send-button md-accent md-raised" ng-disabled="descriptionFrom.$invalid" aria-label="SAVE" translate="CALLYSQUARE.UPDATE_INFO" translate-attr-aria-label="CALLYSQUARE.UPDATE">\n                    UPDATE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/open/open.html",'<md-dialog class="project-dialog" aria-label="New dialog">\n    <form name="openForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title"><span translate="CALLYSQUARE.OPEN_PROJECT"></span></span></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.PROJECT">Project</label>\n                <md-select name="id" ng-model="vm.id" required>\n                    <md-option value="{{p.id}}" ng-repeat="p in vm.projects">{{p.name}}</md-option>\n                </md-select>\n                <div ng-messages="openForm.id.$error" ng-show="openForm.id.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.PROJECT_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.newWindow" aria-label="{{\'CALLYSQUARE.OPEN_NEW_WINDOW\' | translate }}"><span translate="CALLYSQUARE.OPEN_NEW_WINDOW"></span></md-switch>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.closeDialog(true)" class="send-button md-accent md-raised" ng-disabled="openForm.$invalid" aria-label="SAVE" translate="CALLYSQUARE.OPEN_PROJECT" translate-attr-aria-label="CALLYSQUARE.OPEN">\n                    OPEN\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/permissionadd/permissionadd.html",'<md-dialog class="projects-dialog" aria-label="projects">\n    <form name="projectsForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="CALLYSQUARE.PERMISSIONADD_PROJECTS">Add User Permissions</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/saveAs/saveAs.html",'<md-dialog class="project-dialog" aria-label="New dialog">\n    <form name="newForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title"><span translate="CALLYSQUARE.COPY_PROJECT"></span></span></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.NAME">Name</label>\n                <input name="name" ng-model="vm.project.name" required md-autofocus>\n                <div ng-messages="newForm.name.$error" ng-show="newForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.newWindow" aria-label="{{\'CALLYSQUARE.OPEN_NEW_WINDOW\' | translate }}"><span translate="CALLYSQUARE.OPEN_NEW_WINDOW"></span></md-switch>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.save()" class="send-button md-accent md-raised" ng-disabled="newForm.$invalid" aria-label="SAVE" translate="CALLYSQUARE.COPY_PROJECT" translate-attr-aria-label="CALLYSQUARE.COPY">\n                    COPY\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/projects/edit/view.html",'<div id="callysquare-project" class="page-layout simple tabbed" layout="column" ng-init="vm.onInit()">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-projects-button md-icon-button" aria-label="Go to projects" ng-click="vm.gotoProjects()" translate translate-attr-aria-label="CALLYSQUARE.GO_TO_PROJECTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="project-image" hide-xs>\n                    <img ng-src="assets/images/business/cprojects.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.project.id}} {{vm.project.name}}\n                    </div>\n                    <div class="subtitle secondary-text text-truncate">\n                        <span ng-if="vm.project.description">{{vm.project.description}} - </span><span translate="CALLYSQUARE.CREATED_AT"></span> <span>{{vm.project.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-if="vm.crudPermissions.canEdit" ng-click="vm.updateInfo($event)" class="md-fab md-yellow-700-bg md-icon-button" aria-label="edit">\n                <md-icon md-font-icon="icon-tooltip-edit"></md-icon>\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <md-content class="callysquare-content">\n\n        <div id="geEditor" class="geEditor"></div>\n\n    </md-content>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/callysquare/views/projects/projects.html",'<div id="projects" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-vector-square" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CALLYSQUARE.PROJECTS">Projects</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        \x3c!-- SEARCH --\x3e\n        <div class="search-input-wrapper" layout="row" layout-align="start center">\n            <label for="search">\n                <md-icon md-font-icon="icon-magnify"></md-icon>\n            </label>\n            <md-input-container md-no-float class="m-0">\n                <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CALLYSQUARE.SEARCH_FOR_ANYONE">\n            </md-input-container>\n        </div>\n        \x3c!-- / SEARCH --\x3e\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedProjects.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedProjects =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CALLYSQUARE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-projects-count">\n                    <span>{{vm.selectedProjects.length}}</span>\n                    <span translate="CALLYSQUARE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CALLYSQUARE.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllProjects()" translate="CALLYSQUARE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectProjects()" translate="CALLYSQUARE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedProjects" csv-label="true" filename="projects.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button ng-if="vm.crudPermissions.canDelete" class="md-icon-button" ng-click="vm.deleteSelectedProjects($event)" aria-label="delete selected" translate translate-attr-label="CALLYSQUARE.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n            \x3c!-- PROJECT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedProjects" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getProjects">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CALLYSQUARE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'CALLYSQUARE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'CALLYSQUARE.DESCRIPTION\' | translate }}</th>\n                                <th md-column md-order-by="notes">{{ \'CALLYSQUARE.NOTES\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.projects.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CALLYSQUARE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="project" md-select-id="id" ng-repeat="project in vm.projects.rows">\n                                <td md-cell ng-if="project.userpic"><img class="avatar" alt="{{project.name}}" ng-src="api/users/{{project.id}}/avatar" /></td>\n                                <td md-cell ng-if="!project.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{project.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="id ">{{project.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="name ">{{project.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="description ">{{project.description}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="notes ">{{project.notes}}</td>\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n                                    <md-menu>\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CALLYSQUARE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(project, ev)" translate="CALLYSQUARE.EDIT_PROJECT">\n                                                    Edit Project\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(project, ev)" translate="CALLYSQUARE.DELETE_PROJECT">\n                                                    Delete Project\n                                                </md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CALLYSQUARE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CALLYSQUARE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CALLYSQUARE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.projects.count}}" md-on-paginate="vm.getProjects" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / PROJECT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD PROJECT BUTTON --\x3e\n    <md-button class="md-fab md-accent md-icon-button" id="add-project-button" ng-if="vm.crudPermissions.canEdit" ng-click="vm.createOrEditProject($event)" aria-label="add project" translate translate-attr-aria-label="CALLYSQUARE.ADD_PROJECT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD PROJECT BUTTON --\x3e\n\n</div>'),e.put("app/main/apps/callysquare/views/squareRecordings/create/dialog.html",'<md-dialog class="squareRecording-dialog" aria-label="New SquareRecording">\n    <form name="squareRecordingForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CALLYSQUARE.FILENAME">Filename</label>\n                <input type="" name="filename" ng-model="vm.squareRecording.filename" ng-required="true" autofocus>\n\n                <div ng-messages="squareRecordingForm[\'filename\'].$error" ng-show="squareRecordingForm[\'filename\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CALLYSQUARE.ERRORS.FILENAME_REQUIRED">Filename field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSquareRecording" ng-click="vm.saveSquareRecording()" class="send-button md-accent md-raised" ng-disabled="squareRecordingForm.$invalid || squareRecordingForm.$pristine" aria-label="SAVE" translate="CALLYSQUARE.SAVE" translate-attr-aria-label="CALLYSQUARE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSquareRecording" ng-click="vm.addNewSquareRecording()" class="send-button md-accent md-raised" ng-disabled="squareRecordingForm.$invalid" aria-label="ADD" translate="CALLYSQUARE.ADD_SQUARERECORDING" translate-attr-aria-label="CALLYSQUARE.ADD_SQUARERECORDING">\n                    ADD SQUARERECORDING\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSquareRecording" ng-click="vm.deleteSquareRecording($event)" aria-label="DELETE" translate translate-attr-aria-label="CALLYSQUARE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CALLYSQUARE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/callysquare/views/squareRecordings/squareRecordings.html",'<div id="squareRecordings" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-sitemap" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CALLYSQUARE.SQUARERECORDINGS">SquareRecordings</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CALLYSQUARE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedSquareRecordings.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedSquareRecordings =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CALLYSQUARE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-squareRecordings-count">\n                    <span>{{vm.selectedSquareRecordings.length}}</span>\n                    <span translate="CALLYSQUARE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SQUARERECORDINGS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllSquareRecordings()" translate="CALLYSQUARE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectSquareRecordings()" translate="CALLYSQUARE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedSquareRecordings" csv-label="true" filename="squareRecordings.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedSquareRecordings($event)" aria-label="delete selected" translate translate-attr-label="SQUARERECORDINGS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SQUARERECORDING TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedSquareRecordings" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSquareRecordings">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="filename">{{ \'CALLYSQUARE.FILENAME\' | translate }}</th>\n                                <th md-column md-order-by="projectName">{{ \'CALLYSQUARE.PROJECT\' | translate }}</th>\n                                <th md-column md-order-by="uniqueid">{{ \'CALLYSQUARE.UNIQUEID\' | translate }}</th>\n                                <th md-column md-order-by="callerid">{{ \'CALLYSQUARE.PHONE\' | translate }}</th>\n                                <th md-column md-order-by="extension">{{ \'CALLYSQUARE.EXTEN\' | translate }}</th>\n                                <th md-column md-order-by="audio">{{ \'CALLYSQUARE.AUDIO\' | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ \'CALLYSQUARE.CREATED_AT\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.squareRecordings.rows.length">\n                                <td md-cell colspan="8">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CALLYSQUARE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="squareRecording" md-select-id="id" ng-repeat="squareRecording in vm.squareRecordings.rows">\n                                <td md-cell ng-if="squareRecording.userpic"><img class="avatar" alt="{{squareRecording.name}}" ng-src="api/users/{{squareRecording.id}}/avatar" /></td>\n                                <td md-cell ng-if="!squareRecording.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{squareRecording.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditSquareRecording($event, squareRecording)" md-cell class="filename ">{{squareRecording.filename}}</td>\n                                <td ng-click="vm.createOrEditSquareRecording($event, squareRecording)" md-cell class="projectName ">{{squareRecording.projectName}}</td>\n                                <td ng-click="vm.createOrEditSquareRecording($event, squareRecording)" md-cell class="uniqueid ">{{squareRecording.uniqueid}}</td>\n                                <td ng-click="vm.createOrEditSquareRecording($event, squareRecording)" md-cell class="callerid ">{{squareRecording.callerid}}</td>\n                                <td ng-click="vm.createOrEditSquareRecording($event, squareRecording)" md-cell class="extension ">{{squareRecording.extension}}</td>\n\n                                <td md-cell class="audio ">\n                                    \x3c!-- audio recording directive --\x3e\n                                    <ms-recording id="squareRecording.id" model="\'squareRecording\'"></ms-recording>\n                                    \x3c!-- / audio recording directive --\x3e\n                                </td>\n                                <td ng-click="vm.createOrEditSquareRecording($event, squareRecording)" md-cell class="createdAt ">{{squareRecording.createdAt | date:\'medium\' }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CALLYSQUARE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.downloadfile2(squareRecording, $event  , \'square/recordings\'   )" translate="CALLYSQUARE.DOWNLOAD_SQUARERECORDING">\n                                                    Download SquareRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(squareRecording, $event    )" translate="CALLYSQUARE.DELETE_SQUARERECORDING">\n                                                    Delete SquareRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CALLYSQUARE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CALLYSQUARE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CALLYSQUARE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.squareRecordings.count}}" md-on-paginate="vm.getSquareRecordings" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SQUARERECORDING TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>'),e.put("app/main/apps/chat/views/chatQueues/chatQueues.html",'<div id="chatQueues" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-hangouts" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CHAT.CHATQUEUES">ChatQueues</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CHAT.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedChatQueues.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedChatQueues =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CHAT.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-chatQueues-count">\n                    <span>{{vm.selectedChatQueues.length}}</span>\n                    <span translate="CHAT.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CHATQUEUES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllChatQueues()" translate="CHAT.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectChatQueues()" translate="CHAT.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedChatQueues" csv-label="true" filename="chatQueues.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedChatQueues($event)" aria-label="delete selected" translate translate-attr-label="CHATQUEUES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- CHATQUEUE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedChatQueues" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getChatQueues">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'CHAT.NAME\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'CHAT.STRATEGY\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.chatQueues.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CHAT.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="chatQueue" md-select-id="id" ng-repeat="chatQueue in vm.chatQueues.rows">\n                                <td md-cell ng-if="chatQueue.userpic"><img class="avatar" alt="{{chatQueue.name}}" ng-src="api/users/{{chatQueue.id}}/avatar" /></td>\n                                <td md-cell ng-if="!chatQueue.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{chatQueue.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatQueue, ev) : vm.createOrEditChatQueue($event, chatQueue)" md-cell class="id ">{{chatQueue.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatQueue, ev) : vm.createOrEditChatQueue($event, chatQueue)" md-cell class="name ">{{chatQueue.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatQueue, ev) : vm.createOrEditChatQueue($event, chatQueue)" md-cell class="strategy ">{{ vm.arraystrategy[chatQueue.strategy].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(chatQueue, $event    )" translate="CHAT.EDIT_CHATQUEUE">\n                                                    Edit ChatQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(chatQueue, $event    )" translate="CHAT.TEAMADD_CHATQUEUE">\n                                                    teamadd ChatQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(chatQueue, $event    )" translate="CHAT.AGENTADD_CHATQUEUE">\n                                                    agentadd ChatQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(chatQueue, $event    )" translate="CHAT.DELETE_CHATQUEUE">\n                                                    Delete ChatQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(chatQueue, $event    )" translate="CHAT.GOTOREALTIME_CHATQUEUE">\n                                                    goToRealtime ChatQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.chatQueues.count}}" md-on-paginate="vm.getChatQueues" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / CHATQUEUE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD CHATQUEUE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-chatQueue-button" ng-click="vm.createOrEditChatQueue($event)" aria-label="add chatQueue" translate translate-attr-aria-label="CHAT.ADD_CHATQUEUE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD CHATQUEUE BUTTON --\x3e\n</div>'),e.put("app/main/apps/chat/views/chatQueues/create/dialog.html",'<md-dialog class="chatQueue-dialog" aria-label="New ChatQueue">\n    <form name="chatQueueForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.chatQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newChatQueue">\n\n                <div class="hint"><span translate="CHAT.HELP.NAME"></span></div>\n                <div ng-messages="chatQueueForm[\'name\'].$error" ng-show="chatQueueForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="CHAT.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.STRATEGY">Strategy</label>\n                <md-select name="strategy" ng-model="vm.chatQueue.strategy" required>\n                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                </md-select>\n                <div ng-messages="chatQueueForm[\'strategy\'].$error" ng-show="chatQueueForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.AGENT_TIMEOUT">Agent_Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.chatQueue.timeout" min="1" max="2147483" ng-required="true">\n\n                <div ng-messages="chatQueueForm[\'timeout\'].$error" ng-show="chatQueueForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="CHAT.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.chatQueue.description">\n\n                <div ng-messages="chatQueueForm[\'description\'].$error" ng-show="chatQueueForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newChatQueue" ng-click="vm.saveChatQueue()" class="send-button md-accent md-raised" ng-disabled="chatQueueForm.$invalid || chatQueueForm.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newChatQueue" ng-click="vm.addNewChatQueue()" class="send-button md-accent md-raised" ng-disabled="chatQueueForm.$invalid" aria-label="ADD" translate="CHAT.ADD_CHATQUEUE" translate-attr-aria-label="CHAT.ADD_CHATQUEUE">\n                    ADD CHATQUEUE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newChatQueue" ng-click="vm.deleteChatQueue($event)" aria-label="DELETE" translate translate-attr-aria-label="CHAT.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CHAT.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatQueues/edit/agentadd/agentadd.html",'<md-dialog class="chatQueue-dialog" aria-label="chatQueue" ng-init="vm.onInit()">\n    <form name="chatQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="CHAT.AGENTADD_CHATQUEUE">Add Agent to chatQueue</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatQueues/edit/teamadd/teamadd.html",'<md-dialog class="chatQueue-dialog" aria-label="chatQueue" ng-init="vm.onInit()">\n    <form name="chatQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="CHAT.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatQueues/edit/view.html",'<div id="chat-chatQueue" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-chatQueues-button md-icon-button" aria-label="Go to chatQueues" ng-click="vm.gotoChatQueues()" translate translate-attr-aria-label="CHAT.GO_TO_CHATQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="chatQueue-image" hide-xs>\n                    <img ng-src="assets/images/business/chatQueues.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.chatQueue.id}}\n                        <span ng-if="vm.chatQueue.name">{{vm.chatQueue.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="CHAT.CREATED_AT"></span> <span>{{vm.chatQueue.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.chatQueue, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="CHAT.TEAMADD_CHATQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.chatQueue, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="CHAT.AGENTADD_CHATQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveChatQueue()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid)" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CHAT.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="chatQueue-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CHAT.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.chatQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="CHAT.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="CHAT.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.chatQueue.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'strategy\'].$error" ng-show="generalForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.AGENT_TIMEOUT">Agent_Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.chatQueue.timeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="CHAT.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="CHAT.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.chatQueue.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/chat/views/chatWebsites/chatWebsites.html",'<div id="chatWebsites" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-hangouts" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CHAT.CHATWEBSITES">ChatWebsites</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CHAT.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedChatWebsites.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedChatWebsites =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CHAT.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-chatWebsites-count">\n                    <span>{{vm.selectedChatWebsites.length}}</span>\n                    <span translate="CHAT.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CHATWEBSITES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllChatWebsites()" translate="CHAT.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectChatWebsites()" translate="CHAT.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedChatWebsites" csv-label="true" filename="chatWebsites.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedChatWebsites($event)" aria-label="delete selected" translate translate-attr-label="CHATWEBSITES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- CHATWEBSITE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedChatWebsites" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getChatWebsites">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'CHAT.NAME\' | translate }}</th>\n                                <th md-column md-order-by="key">{{ \'CHAT.KEY\' | translate }}</th>\n                                <th md-column md-order-by="address">{{ \'CHAT.MOTIONADDRESS\' | translate }}</th>\n                                <th md-column md-order-by="remote">{{ \'CHAT.MOTIONPROXY\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'CHAT.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.chatWebsites.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CHAT.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="chatWebsite" md-select-id="id" ng-repeat="chatWebsite in vm.chatWebsites.rows">\n                                <td md-cell ng-if="chatWebsite.userpic"><img class="avatar" alt="{{chatWebsite.name}}" ng-src="api/users/{{chatWebsite.id}}/avatar" /></td>\n                                <td md-cell ng-if="!chatWebsite.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{chatWebsite.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatWebsite, ev) : vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="id ">{{chatWebsite.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatWebsite, ev) : vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="name ">{{chatWebsite.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatWebsite, ev) : vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="key ">{{chatWebsite.key}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatWebsite, ev) : vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="address ">{{chatWebsite.address}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatWebsite, ev) : vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="remote ">{{chatWebsite.remote}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chatWebsite, ev) : vm.createOrEditChatWebsite($event, chatWebsite)" md-cell class="description ">{{chatWebsite.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(chatWebsite, $event    )" translate="CHAT.EDIT_CHATWEBSITE">\n                                                    Edit ChatWebsite\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.interactionsgoto(chatWebsite, $event    )" translate="CHAT.INTERACTIONS_CHATWEBSITE">\n                                                    Interactions ChatWebsite\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.offlinemessagesgoto(chatWebsite, $event    )" translate="CHAT.OFFLINEMESSAGES_CHATWEBSITE">\n                                                    OfflineMessages ChatWebsite\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(chatWebsite, $event    )" translate="CHAT.AGENTADD_CHATWEBSITE">\n                                                    AgentAdd ChatWebsite\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(chatWebsite, $event    )" translate="CHAT.DELETE_CHATWEBSITE">\n                                                    Delete ChatWebsite\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.chatWebsites.count}}" md-on-paginate="vm.getChatWebsites" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / CHATWEBSITE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD CHATWEBSITE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-chatWebsite-button" ng-click="vm.createOrEditChatWebsite($event)" aria-label="add chatWebsite" translate translate-attr-aria-label="CHAT.ADD_CHATWEBSITE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD CHATWEBSITE BUTTON --\x3e\n</div>'),e.put("app/main/apps/chat/views/chatWebsites/create/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.chatWebsite.name" ng-required="true" autofocus ng-disabled="!vm.newChatWebsite">\n\n                <div ng-messages="chatWebsiteForm[\'name\'].$error" ng-show="chatWebsiteForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.KEY">key</label>\n                <input type="text" name="key" ng-model="vm.chatWebsite.key" md-maxlength="5" ng-required="true">\n\n                <div ng-messages="chatWebsiteForm[\'key\'].$error" ng-show="chatWebsiteForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.KEY_REQUIRED">key field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="CHAT.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.MOTIONADDRESS">MotionAddress</label>\n                <input type="url" name="address" ng-model="vm.chatWebsite.address" md-maxlength="255" ng-required="true">\n\n                <div ng-messages="chatWebsiteForm[\'address\'].$error" ng-show="chatWebsiteForm[\'address\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.MOTIONADDRESS_REQUIRED">MotionAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="CHAT.ERRORS.MOTIONADDRESS_MUST_VALID_URL">MotionAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="CHAT.ERRORS.MOTIONADDRESS_MAX_LENGTH" translate-values=\'{max: 255}\'>MotionAddress must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.MOTIONPROXY">MotionProxy</label>\n                <input type="url" name="remote" ng-model="vm.chatWebsite.remote" md-maxlength="255" ng-required="true">\n\n                <div class="hint"><span translate="CHAT.HELP.MOTIONPROXY"></span></div>\n                <div ng-messages="chatWebsiteForm[\'remote\'].$error" ng-show="chatWebsiteForm[\'remote\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.MOTIONPROXY_REQUIRED">MotionProxy field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="CHAT.ERRORS.MOTIONPROXY_MUST_VALID_URL">MotionProxy must be a valid url http://www.xcally.com</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="CHAT.ERRORS.MOTIONPROXY_MAX_LENGTH" translate-values=\'{max: 255}\'>MotionProxy must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.LIST">List</label>\n                <md-select name="ListId" ng-model="vm.chatWebsite.ListId" required>\n                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                </md-select>\n                <div class="hint"><span translate="CHAT.HELP.LIST"></span></div>\n                <div ng-messages="chatWebsiteForm[\'ListId\'].$error" ng-show="chatWebsiteForm[\'ListId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.INTERVAL">Interval</label>\n                <md-select name="IntervalId" ng-model="vm.chatWebsite.IntervalId">\n                    <md-option ng-value="null">Always</md-option>\n                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval" ng-disabled="IntervalId.canSelect === false">{{ IntervalId.name }}</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteForm[\'IntervalId\'].$error" ng-show="chatWebsiteForm[\'IntervalId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.INTERVAL_REQUIRED">Interval field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.chatWebsite.description">\n\n                <div ng-messages="chatWebsiteForm[\'description\'].$error" ng-show="chatWebsiteForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newChatWebsite" ng-click="vm.saveChatWebsite()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteForm.$invalid || chatWebsiteForm.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newChatWebsite" ng-click="vm.addNewChatWebsite()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteForm.$invalid" aria-label="ADD" translate="CHAT.ADD_CHATWEBSITE" translate-attr-aria-label="CHAT.ADD_CHATWEBSITE">\n                    ADD CHATWEBSITE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newChatWebsite" ng-click="vm.deleteChatWebsite($event)" aria-label="DELETE" translate translate-attr-aria-label="CHAT.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CHAT.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/agentadd/agentadd.html",'<md-dialog class="chatWebsite-dialog" aria-label="chatWebsite" ng-init="vm.onInit()">\n    <form name="chatWebsiteForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="CHAT.AGENTADD_CHATWEBSITE">Add Agent to chatWebsite</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/agent/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.AGENT">Agent</label>\n                <md-select name="agent" ng-model="vm.agent.agent" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents" ng-disabled="agent.canSelect === false">{{ agent.name }}</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'agent\'].$error" ng-show="chatWebsiteFormApp[\'agent\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.agent.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'timeout\'].$error" ng-show="chatWebsiteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="CHAT.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/amazonlex/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.ACCESSKEYID">accesskeyid</label>\n                <input type="text" name="accesskeyid" ng-model="vm.amazonlex.accesskeyid" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'accesskeyid\'].$error" ng-show="chatWebsiteFormApp[\'accesskeyid\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.ACCESSKEYID_REQUIRED">accesskeyid field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.SECRETACCESSKEY">secretaccesskey</label>\n                <input type="text" name="secretaccesskey" ng-model="vm.amazonlex.secretaccesskey" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'secretaccesskey\'].$error" ng-show="chatWebsiteFormApp[\'secretaccesskey\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.SECRETACCESSKEY_REQUIRED">secretaccesskey field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.LEXREGION">lexregion</label>\n                <md-select name="lexregion" ng-model="vm.amazonlex.lexregion" required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'us-east-1\'">US East (N. Virginia)</md-option>\n                    <md-option ng-value="\'us-west-2\'">US West (Oregon)</md-option>\n                    <md-option ng-value="\'eu-west-1\'">EU (Ireland)</md-option>\n                    <md-option ng-value="\'ap-southeast-2\'">Asia Pacific (Sydney)</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'lexregion\'].$error" ng-show="chatWebsiteFormApp[\'lexregion\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.LEXREGION_REQUIRED">lexregion field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.BOTNAME">botname</label>\n                <input type="text" name="botname" ng-model="vm.amazonlex.botname" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'botname\'].$error" ng-show="chatWebsiteFormApp[\'botname\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.BOTNAME_REQUIRED">botname field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.WELCOMEMESSAGE">welcomemessage</label>\n                <textarea name="welcomemessage" ng-model="vm.amazonlex.welcomemessage" md-maxlength="255"></textarea>\n                <div class="hint"><span translate="CHAT.HELP.WELCOMEMESSAGE"></span></div>\n\n                <div ng-messages="chatWebsiteFormApp[\'welcomemessage\'].$error" ng-show="chatWebsiteFormApp[\'welcomemessage\'].$touched" role="alert">\n\n\n                    <div ng-message="md-maxlength">\n                        <span translate="CHAT.ERRORS.WELCOMEMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>welcomemessage must have a maximum length equal to 255</span>\n                    </div>\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/autoreply/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TIMES">times</label>\n                <md-select name="times" ng-model="vm.autoreply.times" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="1">One Time</md-option>\n                    <md-option ng-value="0">Always</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'times\'].$error" ng-show="chatWebsiteFormApp[\'times\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TIMES_REQUIRED">times field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TEXT">Text</label>\n                <textarea name="text" ng-model="vm.autoreply.text" required></textarea>\n\n                <div ng-messages="chatWebsiteFormApp[\'text\'].$error" ng-show="chatWebsiteFormApp[\'text\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TEXT_REQUIRED">Text field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/close/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.DISPOSITION">Disposition</label>\n                <input type="text" name="disposition" ng-model="vm.close.disposition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'disposition\'].$error" ng-show="chatWebsiteFormApp[\'disposition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.DISPOSITION_REQUIRED">Disposition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/dialogflow/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.KEY">Key</label>\n                <input type="text" name="key" ng-model="vm.dialogflow.key" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'key\'].$error" ng-show="chatWebsiteFormApp[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.LANGUAGE">language</label>\n                <md-select name="language" ng-model="vm.dialogflow.language" required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'da\'">Danish</md-option>\n                    <md-option ng-value="\'en\'">English</md-option>\n                    <md-option ng-value="\'de\'">German</md-option>\n                    <md-option ng-value="\'it\'">Italian</md-option>\n                    <md-option ng-value="\'es\'">Spanish</md-option>\n                    <md-option ng-value="\'fr\'">French</md-option>\n                    <md-option ng-value="\'id\'">Indonesian</md-option>\n                    <md-option ng-value="\'ja\'">Japanese</md-option>\n                    <md-option ng-value="\'ko\'">Korean (South Korea)</md-option>\n                    <md-option ng-value="\'nl\'">Dutch</md-option>\n                    <md-option ng-value="\'no\'">Norwegian</md-option>\n                    <md-option ng-value="\'pt\'">Portuguese (European)</md-option>\n                    <md-option ng-value="\'pt-br\'">Portuguese (Nrazilian)</md-option>\n                    <md-option ng-value="\'ru\'">Russian</md-option>\n                    <md-option ng-value="\'sv\'">Swedish</md-option>\n                    <md-option ng-value="\'th\'">Thai</md-option>\n                    <md-option ng-value="\'uk\'">Ukrainian</md-option>\n                    <md-option ng-value="\'zh-CN\'">Chinese (Simplified)</md-option>\n                    <md-option ng-value="\'zh-HK\'">Chinese (Hong Kong)</md-option>\n                    <md-option ng-value="\'zh-TW\'">Chinese (Traditional)</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'language\'].$error" ng-show="chatWebsiteFormApp[\'language\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.LANGUAGE_REQUIRED">language field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.WELCOMEMESSAGE">welcomemessage</label>\n                <textarea name="welcomemessage" ng-model="vm.dialogflow.welcomemessage" md-maxlength="255"></textarea>\n                <div class="hint"><span translate="CHAT.HELP.WELCOMEMESSAGE"></span></div>\n\n                <div ng-messages="chatWebsiteFormApp[\'welcomemessage\'].$error" ng-show="chatWebsiteFormApp[\'welcomemessage\'].$touched" role="alert">\n\n\n                    <div ng-message="md-maxlength">\n                        <span translate="CHAT.ERRORS.WELCOMEMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>welcomemessage must have a maximum length equal to 255</span>\n                    </div>\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/gotoif/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.CONDITION">Condition</label>\n                <input type="text" name="condition" ng-model="vm.gotoif.condition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'condition\'].$error" ng-show="chatWebsiteFormApp[\'condition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.CONDITION_REQUIRED">Condition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TRUEPRIORITY">truepriority</label>\n                <input type="number" name="truepriority" ng-model="vm.gotoif.truepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'truepriority\'].$error" ng-show="chatWebsiteFormApp[\'truepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TRUEPRIORITY_REQUIRED">truepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.TRUEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">truepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.FALSEPRIORITY">falsepriority</label>\n                <input type="number" name="falsepriority" ng-model="vm.gotoif.falsepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'falsepriority\'].$error" ng-show="chatWebsiteFormApp[\'falsepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.FALSEPRIORITY_REQUIRED">falsepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.FALSEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">falsepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/gotop/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.PRIORITY">Priority</label>\n                <input type="number" name="priority" ng-model="vm.gotop.priority" min="0" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'priority\'].$error" ng-show="chatWebsiteFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.PRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Priority must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/noop/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.noop.value" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'value\'].$error" ng-show="chatWebsiteFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/queue/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'queue\'].$error" ng-show="chatWebsiteFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'timeout\'].$error" ng-show="chatWebsiteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="CHAT.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/system/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.COMMAND">Command</label>\n                <input type="text" name="command" ng-model="vm.system.command" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="chatWebsiteFormApp[\'command\'].$error" ng-show="chatWebsiteFormApp[\'command\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.COMMAND_REQUIRED">Command field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.VARIABLE">Variable</label>\n                <md-select name="variable" ng-model="vm.system.variable" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables" ng-disabled="variable.canSelect === false">{{ variable.name }}</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'variable\'].$error" ng-show="chatWebsiteFormApp[\'variable\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/apps/tag/dialog.html",'<md-dialog class="chatWebsite-dialog" aria-label="New ChatWebsite">\n    <form name="chatWebsiteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TAG">Tag</label>\n                <md-select name="tag" ng-model="vm.tag.tag" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags" ng-disabled="tag.canSelect === false">{{ tag.name }}</md-option>\n                </md-select>\n                <div ng-messages="chatWebsiteFormApp[\'tag\'].$error" ng-show="chatWebsiteFormApp[\'tag\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TAG_REQUIRED">Tag field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveChatWebsiteApp()" class="send-button md-accent md-raised" ng-disabled="chatWebsiteFormApp.$invalid || chatWebsiteFormApp.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/chatCannedAnswers/dialog.html",'<md-dialog class="chatCannedAnswer-dialog" aria-label="New ChatCannedAnswer">\n    <form name="chatCannedAnswerForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.KEY">Key</label>\n                <input type="" name="key" ng-model="vm.chatCannedAnswer.key" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="chatCannedAnswerForm[\'key\'].$error" ng-show="chatCannedAnswerForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.VALUE">Value</label>\n                <textarea name="value" ng-model="vm.chatCannedAnswer.value" required></textarea>\n\n                <div ng-messages="chatCannedAnswerForm[\'value\'].$error" ng-show="chatCannedAnswerForm[\'value\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.chatCannedAnswer.description">\n\n                <div ng-messages="chatCannedAnswerForm[\'description\'].$error" ng-show="chatCannedAnswerForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newChatCannedAnswer" ng-click="vm.saveChatCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="chatCannedAnswerForm.$invalid || chatCannedAnswerForm.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newChatCannedAnswer" ng-click="vm.addNewChatCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="chatCannedAnswerForm.$invalid" aria-label="ADD" translate="CHAT.ADD_CHATCANNEDANSWER" translate-attr-aria-label="CHAT.ADD_CHATCANNEDANSWER">\n                    ADD CHATCANNEDANSWER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newChatCannedAnswer" ng-click="vm.deleteChatCannedAnswer($event)" aria-label="DELETE" translate translate-attr-aria-label="CHAT.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CHAT.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/chatDispositions/dialog.html",'<md-dialog class="chatDisposition-dialog" aria-label="New ChatDisposition">\n    <form name="chatDispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.chatDisposition.name" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="chatDispositionForm[\'name\'].$error" ng-show="chatDispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newChatDisposition" ng-click="vm.saveChatDisposition()" class="send-button md-accent md-raised" ng-disabled="chatDispositionForm.$invalid || chatDispositionForm.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newChatDisposition" ng-click="vm.addNewChatDisposition()" class="send-button md-accent md-raised" ng-disabled="chatDispositionForm.$invalid" aria-label="ADD" translate="CHAT.ADD_CHATDISPOSITION" translate-attr-aria-label="CHAT.ADD_CHATDISPOSITION">\n                    ADD CHATDISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newChatDisposition" ng-click="vm.deleteChatDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="CHAT.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CHAT.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/offlineMessages/dialog.html",'<md-dialog class="offlineMessage-dialog" aria-label="New OfflineMessage">\n    <md-toolbar class="md-accent md-hue-2">\n        <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n            <span class="title">{{ vm.title | translate }}</span>\n            <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n\n    <md-content flex layout-padding>\n        <pre>{{vm.message.body}}</pre>\n    </md-content>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/proactive/dialog.html",'<md-dialog class="chatProactiveAction-dialog" aria-label="New ChatProactiveAction">\n    <form name="chatProactiveActionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CHAT.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.chatProactiveAction.name" ng-required="true" autofocus>\n\n                <div ng-messages="chatProactiveActionForm[\'name\'].$error" ng-show="chatProactiveActionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CHAT.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.chatProactiveAction.type">\n\n                    <md-option ng-value="\'mouseOver\'"> {{ \'CHAT.MOUSEOVER\' | translate }} </md-option>\n\n                    <md-option ng-value="\'timeout\'"> {{ \'CHAT.TIMEOUT\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="chatProactiveActionForm[\'type\'].$error" ng-show="chatProactiveActionForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.chatProactiveAction.type === \'mouseOver\'" class="md-block">\n                <label translate="CHAT.SELECTOR">Selector</label>\n                <input type="" name="selector" ng-model="vm.chatProactiveAction.selector" ng-required="true">\n\n                <div ng-messages="chatProactiveActionForm[\'selector\'].$error" ng-show="chatProactiveActionForm[\'selector\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.SELECTOR_REQUIRED">Selector field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.chatProactiveAction.type === \'timeout\'" class="md-block">\n                <label translate="CHAT.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.chatProactiveAction.timeout" min="1" ng-required="true">\n\n                <div ng-messages="chatProactiveActionForm[\'timeout\'].$error" ng-show="chatProactiveActionForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="CHAT.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newChatProactiveAction" ng-click="vm.saveChatProactiveAction()" class="send-button md-accent md-raised" ng-disabled="chatProactiveActionForm.$invalid || chatProactiveActionForm.$pristine" aria-label="SAVE" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newChatProactiveAction" ng-click="vm.addNewChatProactiveAction()" class="send-button md-accent md-raised" ng-disabled="chatProactiveActionForm.$invalid" aria-label="ADD" translate="CHAT.ADD_CHATPROACTIVEACTION" translate-attr-aria-label="CHAT.ADD_CHATPROACTIVEACTION">\n                    ADD CHATPROACTIVEACTION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newChatProactiveAction" ng-click="vm.deleteChatProactiveAction($event)" aria-label="DELETE" translate translate-attr-aria-label="CHAT.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CHAT.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/chat/views/chatWebsites/edit/view.html",'<div id="chat-chatWebsite" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-chatWebsites-button md-icon-button" aria-label="Go to chatWebsites" ng-click="vm.gotoChatWebsites()" translate translate-attr-aria-label="CHAT.GO_TO_CHATWEBSITES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="chatWebsite-image" hide-xs>\n                    <img ng-src="assets/images/business/chatWebsites.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.chatWebsite.id}}\n                        <span ng-if="vm.chatWebsite.name">{{vm.chatWebsite.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="CHAT.CREATED_AT"></span> <span>{{vm.chatWebsite.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.chatWebsite, $event)" class="md-fab md-warn md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="CHAT.AGENTADD_CHATWEBSITE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveChatWebsite()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (scriptForm.$invalid) || (intervalForm.$invalid) || (dispositionForm.$invalid) || (appearanceForm.$invalid) || (onlinestatusForm.$invalid) || (offlinestatusForm.$invalid) || (closingformForm.$invalid) || (unmanagedstatusForm.$invalid) || (interactionForm.$invalid) || (whitelabelForm.$invalid) || (logoForm.$invalid) || (agentAvatarForm.$invalid) || (customerAvatarForm.$invalid) || (systemAvatarForm.$invalid) || (chatFormOnlineForm.$invalid) || (chatFormOfflineForm.$invalid) || (proactiveForm.$invalid) || (chatDispositionsForm.$invalid) || (chatCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid) || (offlineMessagesForm.$invalid)" translate="CHAT.SAVE" translate-attr-aria-label="CHAT.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CHAT.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="chatWebsite-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CHAT.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.chatWebsite.name" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.KEY">key</label>\n                                <input type="text" name="key" ng-model="vm.chatWebsite.key" md-maxlength="5" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'key\'].$error" ng-show="generalForm[\'key\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.KEY_REQUIRED">key field is required</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="CHAT.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.MOTIONADDRESS">MotionAddress</label>\n                                <input type="url" name="address" ng-model="vm.chatWebsite.address" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'address\'].$error" ng-show="generalForm[\'address\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.MOTIONADDRESS_REQUIRED">MotionAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="CHAT.ERRORS.MOTIONADDRESS_MUST_VALID_URL">MotionAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="CHAT.ERRORS.MOTIONADDRESS_MAX_LENGTH" translate-values=\'{max: 255}\'>MotionAddress must have a maximum length equal to 255</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.LIST">List</label>\n                                <md-select name="ListId" ng-model="vm.chatWebsite.ListId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="CHAT.HELP.LIST"></span></div>\n                                <div ng-messages="generalForm[\'ListId\'].$error" ng-show="generalForm[\'ListId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.LIST_REQUIRED">List field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.chatWebsite.fidelity" class="md-block">\n                                <label translate="CHAT.TIMEOUT">Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.chatWebsite.timeout" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.WAITFORTHEASSIGNEDAGENT">WaitForTheAssignedAgent</label>\n                                <input type="number" name="waitForTheAssignedAgent" ng-model="vm.chatWebsite.waitForTheAssignedAgent" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'waitForTheAssignedAgent\'].$error" ng-show="generalForm[\'waitForTheAssignedAgent\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.WAITFORTHEASSIGNEDAGENT_REQUIRED">WaitForTheAssignedAgent field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="CHAT.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="CHAT.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_LESS_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.chatWebsite.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="chatWebsite-detail-form-container notification md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CHAT.NOTIFICATION">NOTIFICATION</div>\n                        </div>\n                        <form name="notificationForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.chatWebsite.notificationSound" aria-label="notificationSound" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.NOTIFICATIONSOUND">notificationSound</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.chatWebsite.notificationShake" aria-label="notificationShake" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.NOTIFICATIONSHAKE">notificationShake</span></md-switch>\n\n                            </md-input-container>\n                            <div class="md-block">\n                                <label class="md-caption grey-fg" translate="CHAT.NOTIFICATIONTEMPLATE">notificationTemplate</label>\n                                <textarea aria-label="notificationTemplate notificationTemplate" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.chatWebsite.notificationTemplate"></textarea>\n                            </div>\n\n                        </form>\n                    </div>\n                    <div class="chatWebsite-detail-form-container transfer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CHAT.TRANSFER">TRANSFER</div>\n                        </div>\n                        <form name="transferForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.chatWebsite.queueTransfer" aria-label="queueTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.QUEUETRANSFER">queueTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.chatWebsite.queueTransfer == true" class="md-block">\n                                <label translate="CHAT.QUEUETRANSFERTIMEOUT">queueTransferTimeout</label>\n                                <input type="number" name="queueTransferTimeout" ng-model="vm.chatWebsite.queueTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'queueTransferTimeout\'].$error" ng-show="transferForm[\'queueTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.QUEUETRANSFERTIMEOUT_REQUIRED">queueTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="CHAT.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="CHAT.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.chatWebsite.agentTransfer" aria-label="agentTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.AGENTTRANSFER">agentTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.chatWebsite.agentTransfer == true" class="md-block">\n                                <label translate="CHAT.AGENTTRANSFERTIMEOUT">agentTransferTimeout</label>\n                                <input type="number" name="agentTransferTimeout" ng-model="vm.chatWebsite.agentTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'agentTransferTimeout\'].$error" ng-show="transferForm[\'agentTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.AGENTTRANSFERTIMEOUT_REQUIRED">agentTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="CHAT.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="CHAT.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CHAT.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="chatWebsite-detail-form-container script md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ChatWebsiteScriptController as vm_ac" ng-init="vm_ac.init(vm.chatWebsite)" class="content" md-background-bg>\n                            <div class="pb-16" layout="row" layout-align="start center">\n                                <div class="h2 secondary-text" translate="CHAT.SCRIPT">SCRIPT</div>\n                            </div>\n\n                            <form name="scriptForm" flex="100" novalidate>\n                                <md-input-container class="md-block">\n                                    <label translate="CHAT.TOKEN">Token</label>\n                                    <input type="text" name="token" ng-model="vm_ac.chatWebsite.token" autofocus ng-disabled="true">\n                                </md-input-container>\n                                <md-input-container class="md-block">\n                                    <label translate="CHAT.MOTIONPROXY">MotionProxy</label>\n                                    <input type="url" name="remote" ng-model="vm_ac.chatWebsite.remote" required>\n                                    <div class="hint"><span translate="CHAT.HELP.MOTIONPROXY"></span></div>\n                                    <div ng-messages="scriptForm[\'remote\'].$error" ng-show="scriptForm[\'remote\'].$touched" role="alert">\n                                        <div ng-message="required">\n                                            <span translate="CHAT.ERRORS.MOTIONPROXY_REQUIRED">Motion Proxy field is required</span>\n                                        </div>\n                                        <div ng-message="url">\n                                            <span translate="CHAT.ERRORS.MOTIONPROXY_MUST_VALID_URL">Motion Proxy must be a valid url e.g.: http://www.xcally.com</span>\n                                        </div>\n                                    </div>\n                                </md-input-container>\n                                <md-input-container class="md-block">\n                                    <label translate="CHAT.WEBSITESCRIPT">WebsiteScript</label>\n                                    <div>\n                                        <pre style="font-size: 13px;">\n                                        {{vm_ac.start}} {{vm_ac.script}} {{vm_ac.end}}\n                                        </pre>\n                                    </div>\n                                    <div class="hint"><span translate="CHAT.HELP.COPYSCRIPTTOCLIPBOARD"></span></div>\n                                </md-input-container>\n                            </form>\n                        </div>\n\n                    </div>\n                    <div class="chatWebsite-detail-form-container interval md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CHAT.INTERVAL">INTERVAL</div>\n                        </div>\n                        <form name="intervalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.INTERVAL">Interval</label>\n                                <md-select name="IntervalId" ng-model="vm.chatWebsite.IntervalId" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Always</md-option>\n                                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval" ng-disabled="IntervalId.canSelect === false">{{ IntervalId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="intervalForm[\'IntervalId\'].$error" ng-show="intervalForm[\'IntervalId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CHAT.ERRORS.INTERVAL_REQUIRED">Interval field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CHAT.TIMEZONE">Timezone</label>\n                                <ms-timezone name="timezone" ng-model="vm.chatWebsite.timezone" ng-disabled="!vm.crudPermissions.canEdit">\n                                    < <div class="hint"><span translate="CHAT.HELP.TIMEZONE"></span>\n                    </div>\n                    <div ng-messages="intervalForm[\'timezone\'].$error" ng-show="intervalForm[timezone].$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="CHAT.ERRORS.TIMEZONE_REQUIRED">Timezone field is required</span>\n                        </div>\n                    </div>\n                    </md-input-container>\n\n                    </form>\n    </div>\n    <div class="chatWebsite-detail-form-container disposition md-background-bg md-whiteframe-1dp">\n        <div class="pb-16" layout="row" layout-align="start center">\n            <div class="h2 secondary-text" translate="CHAT.DISPOSITION">DISPOSITION</div>\n        </div>\n        <form name="dispositionForm" novalidate>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.chatWebsite.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.chatWebsite.mandatoryDisposition" class="md-block">\n                <label translate="CHAT.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                <md-select name="mandatoryDispositionPauseId" ng-model="vm.chatWebsite.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                </md-select>\n                <div class="hint"><span translate="CHAT.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                <div ng-messages="dispositionForm[\'mandatoryDispositionPauseId\'].$error" ng-show="dispositionForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CHAT.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n        </form>\n    </div>\n    </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.SNIPPET">SNIPPET</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container appearance md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.APPEARANCE">APPEARANCE</div>\n                </div>\n                <form name="appearanceForm" novalidate>\n                    <div flex md-color-picker ng-model="vm.chatWebsite.color" label="{{\'CHAT.MAINCOLOR\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n                    <div flex md-color-picker ng-model="vm.chatWebsite.color_button" label="{{\'CHAT.BUTTONCOLOR\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n                    <div flex md-color-picker ng-model="vm.chatWebsite.textColor" label="{{\'CHAT.TEXTCOLOR\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n                    <div flex md-color-picker ng-model="vm.chatWebsite.backgroundColor" label="{{\'CHAT.BACKGROUNDCOLOR\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.FONTSIZE">fontSize</label>\n                        <input type="number" name="fontSize" ng-model="vm.chatWebsite.fontSize" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="appearanceForm[\'fontSize\'].$error" ng-show="appearanceForm[\'fontSize\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.FONTSIZE_REQUIRED">fontSize field is required</span>\n                            </div>\n                            <div ng-message="min">\n                                <span translate="CHAT.ERRORS.FONTSIZE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">fontSize must be a valid greater or equal than</span> <span>0</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.HEADERSHAPE">headershape</label>\n                        <md-select name="header_shape" ng-model="vm.chatWebsite.header_shape" ng-disabled="!vm.crudPermissions.canEdit">\n\n                            <md-option ng-value="\'rounded\'"> {{ \'CHAT.ROUNDED\' | translate }} </md-option>\n\n                            <md-option ng-value="\'squared\'"> {{ \'CHAT.SQUARED\' | translate }} </md-option>\n                        </md-select>\n                        <div ng-messages="appearanceForm[\'header_shape\'].$error" ng-show="appearanceForm[\'header_shape\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.HEADERSHAPE_REQUIRED">headershape field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.showAgentAvatar" aria-label="ShowAgentAvatar" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.SHOWAGENTAVATAR">ShowAgentAvatar</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.showCustomerAvatar" aria-label="showCustomerAvatar" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.SHOWCUSTOMERAVATAR">showCustomerAvatar</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.SNIPPETSWIPEOUT">snippetSwipeOut</label>\n                        <md-select name="alignment" ng-model="vm.chatWebsite.alignment" ng-disabled="!vm.crudPermissions.canEdit">\n\n                            <md-option ng-value="\'bottom_right\'"> {{ \'CHAT.BOTTOM_RIGHT\' | translate }} </md-option>\n\n                            <md-option ng-value="\'right\'"> {{ \'CHAT.RIGHT\' | translate }} </md-option>\n\n                            <md-option ng-value="\'left\'"> {{ \'CHAT.LEFT\' | translate }} </md-option>\n                        </md-select>\n                        <div ng-messages="appearanceForm[\'alignment\'].$error" ng-show="appearanceForm[\'alignment\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.SNIPPETSWIPEOUT_REQUIRED">snippetSwipeOut field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.chatWebsite.alignment !== \'bottom_right\'" class="md-block">\n                        <label translate="CHAT.VERTICALPOSITION">verticalPosition</label>\n                        <input type="number" name="verticalAlignment" ng-model="vm.chatWebsite.verticalAlignment" min="0" max="100" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div class="hint"><span translate="CHAT.HELP.VERTICALPOSITION"></span></div>\n                        <div ng-messages="appearanceForm[\'verticalAlignment\'].$error" ng-show="appearanceForm[\'verticalAlignment\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.VERTICALPOSITION_REQUIRED">verticalPosition field is required</span>\n                            </div>\n                            <div ng-message="min">\n                                <span translate="CHAT.ERRORS.VERTICALPOSITION_MUST_BE_GREATER_THAN_OR_EQUAL_TO">verticalPosition must be a valid greater or equal than</span> <span>0</span>\n                            </div>\n                            <div ng-message="max">\n                                <span translate="CHAT.ERRORS.VERTICALPOSITION_MUST_BE_LESS_THAN_OR_EQUAL_TO">verticalPosition must be a valid greater or equal than</span> <span>100</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.MESSAGESALIGNMENT">messagesAlignment</label>\n                        <md-select name="messagesAlignment" ng-model="vm.chatWebsite.messagesAlignment" ng-disabled="!vm.crudPermissions.canEdit">\n\n                            <md-option ng-value="\'alternate\'"> {{ \'CHAT.ALTERNATE\' | translate }} </md-option>\n\n                            <md-option ng-value="\'centered\'"> {{ \'CHAT.CENTERED\' | translate }} </md-option>\n                        </md-select>\n                        <div ng-messages="appearanceForm[\'messagesAlignment\'].$error" ng-show="appearanceForm[\'messagesAlignment\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.MESSAGESALIGNMENT_REQUIRED">messagesAlignment field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.DEFAULTTITLE">defaultTitle</label>\n                        <input type="text" name="defaultTitle" ng-model="vm.chatWebsite.defaultTitle" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="appearanceForm[\'defaultTitle\'].$error" ng-show="appearanceForm[\'defaultTitle\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.DEFAULTTITLE_REQUIRED">defaultTitle field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.DEFAULTTITLE_MAX_LENGTH" translate-values=\'{max: 255}\'>defaultTitle must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div class="chatWebsite-detail-form-container onlinestatus md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.ONLINESTATUS">ONLINESTATUS</div>\n                </div>\n                <form name="onlinestatusForm" novalidate>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.HEADER_ONLINE">header_online</label>\n                        <input type="text" name="header_online" ng-model="vm.chatWebsite.header_online" md-maxlength="255" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="onlinestatusForm[\'header_online\'].$error" ng-show="onlinestatusForm[\'header_online\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.HEADER_ONLINE_REQUIRED">header_online field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.HEADER_ONLINE_MAX_LENGTH" translate-values=\'{max: 255}\'>header_online must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.START_CHAT_BUTTON">start_chat_button</label>\n                        <input type="text" name="start_chat_button" ng-model="vm.chatWebsite.start_chat_button" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="onlinestatusForm[\'start_chat_button\'].$error" ng-show="onlinestatusForm[\'start_chat_button\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.START_CHAT_BUTTON_REQUIRED">start_chat_button field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.START_CHAT_BUTTON_MAX_LENGTH" translate-values=\'{max: 255}\'>start_chat_button must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div class="chatWebsite-detail-form-container offlinestatus md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.OFFLINESTATUS">OFFLINESTATUS</div>\n                </div>\n                <form name="offlinestatusForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.hideWhenOffline" aria-label="hideWhenOffline" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.HIDEWHENOFFLINE">hideWhenOffline</span></md-switch>\n\n                        <div class="hint"><span translate="CHAT.HELP.HIDEWHENOFFLINE"></span></div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.HEADER_OFFLINE">header_offline</label>\n                        <input type="text" name="header_offline" ng-model="vm.chatWebsite.header_offline" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="offlinestatusForm[\'header_offline\'].$error" ng-show="offlinestatusForm[\'header_offline\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.HEADER_OFFLINE_REQUIRED">header_offline field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.HEADER_OFFLINE_MAX_LENGTH" translate-values=\'{max: 255}\'>header_offline must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.OFFLINE_CHAT_BUTTON">offline_chat_button</label>\n                        <input type="text" name="offline_chat_button" ng-model="vm.chatWebsite.offline_chat_button" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="offlinestatusForm[\'offline_chat_button\'].$error" ng-show="offlinestatusForm[\'offline_chat_button\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.OFFLINE_CHAT_BUTTON_REQUIRED">offline_chat_button field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.OFFLINE_CHAT_BUTTON_MAX_LENGTH" translate-values=\'{max: 255}\'>offline_chat_button must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.OFFLINEMESSAGESUBJECT">offlineMessageSubject</label>\n                        <input type="text" name="offlineMessageSubject" ng-model="vm.chatWebsite.offlineMessageSubject" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="offlinestatusForm[\'offlineMessageSubject\'].$error" ng-show="offlinestatusForm[\'offlineMessageSubject\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.OFFLINEMESSAGESUBJECT_REQUIRED">offlineMessageSubject field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.OFFLINEMESSAGESUBJECT_MAX_LENGTH" translate-values=\'{max: 255}\'>offlineMessageSubject must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.OFFLINEMESSAGEBODY">offlineMessageBody</label>\n                        <input type="text" name="offlineMessageBody" ng-model="vm.chatWebsite.offlineMessageBody" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="offlinestatusForm[\'offlineMessageBody\'].$error" ng-show="offlinestatusForm[\'offlineMessageBody\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.OFFLINEMESSAGEBODY_REQUIRED">offlineMessageBody field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.OFFLINEMESSAGEBODY_MAX_LENGTH" translate-values=\'{max: 255}\'>offlineMessageBody must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div class="chatWebsite-detail-form-container closingform md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.CLOSINGFORM">CLOSINGFORM</div>\n                </div>\n                <form name="closingformForm" novalidate>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.CLOSINGMESSAGE">closingMessage</label>\n                        <textarea name="closingMessage" ng-model="vm.chatWebsite.closingMessage" md-maxlength="255" required autofocus></textarea>\n\n                        <div ng-messages="closingformForm[\'closingMessage\'].$error" ng-show="closingformForm[\'closingMessage\'].$touched" role="alert">\n\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.CLOSINGMESSAGE_REQUIRED">closingMessage field is required</span>\n                            </div>\n\n\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.CLOSINGMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>closingMessage must have a maximum length equal to 255</span>\n                            </div>\n\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.SKIPMESSAGEBUTTON">skipMessageButton</label>\n                        <input type="text" name="skipMessageButton" ng-model="vm.chatWebsite.skipMessageButton" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="closingformForm[\'skipMessageButton\'].$error" ng-show="closingformForm[\'skipMessageButton\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.SKIPMESSAGEBUTTON_REQUIRED">skipMessageButton field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.SKIPMESSAGEBUTTON_MAX_LENGTH" translate-values=\'{max: 255}\'>skipMessageButton must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.enableRating" aria-label="enableRating" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.ENABLERATING">enableRating</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="vm.chatWebsite.enableRating" class="md-block">\n                        <label translate="CHAT.RATINGTYPE">ratingType</label>\n                        <md-select name="ratingType" ng-model="vm.chatWebsite.ratingType" ng-disabled="!vm.crudPermissions.canEdit">\n                            <md-option ng-value="\'star\'">Star</md-option>\n                            <md-option ng-value="\'thumb\'">Thumb</md-option>\n                        </md-select>\n                        <div ng-messages="closingformForm[\'ratingType\'].$error" ng-show="closingformForm[\'ratingType\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.RATINGTYPE_REQUIRED">ratingType field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.chatWebsite.enableRating && vm.chatWebsite.ratingType === \'star\'" class="md-block">\n                        <label translate="CHAT.RATINGSTARSNUMBER">ratingStarsNumber</label>\n                        <input type="number" name="ratingStarsNumber" ng-model="vm.chatWebsite.ratingStarsNumber" min="2" max="5" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="closingformForm[\'ratingStarsNumber\'].$error" ng-show="closingformForm[\'ratingStarsNumber\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.RATINGSTARSNUMBER_REQUIRED">ratingStarsNumber field is required</span>\n                            </div>\n                            <div ng-message="min">\n                                <span translate="CHAT.ERRORS.RATINGSTARSNUMBER_MUST_BE_GREATER_THAN_OR_EQUAL_TO">ratingStarsNumber must be a valid greater or equal than</span> <span>2</span>\n                            </div>\n                            <div ng-message="max">\n                                <span translate="CHAT.ERRORS.RATINGSTARSNUMBER_MUST_BE_LESS_THAN_OR_EQUAL_TO">ratingStarsNumber must be a valid greater or equal than</span> <span>5</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.enableFeedback" aria-label="enableFeedback" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.ENABLEFEEDBACK">enableFeedback</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.forwardTranscript" aria-label="forwardTranscript" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.FORWARDTRANSCRIPT">forwardTranscript</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="vm.chatWebsite.forwardTranscript" class="md-block">\n                        <label translate="CHAT.FORWARDTRANSCRIPTMESSAGE">forwardTranscriptMessage</label>\n                        <input type="text" name="forwardTranscriptMessage" ng-model="vm.chatWebsite.forwardTranscriptMessage" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="closingformForm[\'forwardTranscriptMessage\'].$error" ng-show="closingformForm[\'forwardTranscriptMessage\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.FORWARDTRANSCRIPTMESSAGE_REQUIRED">forwardTranscriptMessage field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.FORWARDTRANSCRIPTMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>forwardTranscriptMessage must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.CLOSINGMESSAGEBUTTON">closingMessageButton</label>\n                        <input type="text" name="closingMessageButton" ng-model="vm.chatWebsite.closingMessageButton" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="closingformForm[\'closingMessageButton\'].$error" ng-show="closingformForm[\'closingMessageButton\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.CLOSINGMESSAGEBUTTON_REQUIRED">closingMessageButton field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.CLOSINGMESSAGEBUTTON_MAX_LENGTH" translate-values=\'{max: 255}\'>closingMessageButton must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div class="chatWebsite-detail-form-container unmanagedstatus md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.UNMANAGEDSTATUS">UNMANAGEDSTATUS</div>\n                </div>\n                <form name="unmanagedstatusForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.autoclose" aria-label="autoclose" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.AUTOCLOSE">autoclose</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.enableUnmanagedNote" aria-label="enableUnmanagedNote" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.ENABLEUNMANAGEDNOTE">enableUnmanagedNote</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.UNMANAGEDMESSAGE">unmanagedMessage</label>\n                        <input type="text" name="unmanagedMessage" ng-model="vm.chatWebsite.unmanagedMessage" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="unmanagedstatusForm[\'unmanagedMessage\'].$error" ng-show="unmanagedstatusForm[\'unmanagedMessage\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.UNMANAGEDMESSAGE_REQUIRED">unmanagedMessage field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.UNMANAGEDMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>unmanagedMessage must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.SKIPUNMANAGED">skipUnmanaged</label>\n                        <input type="text" name="skipUnmanaged" ng-model="vm.chatWebsite.skipUnmanaged" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="unmanagedstatusForm[\'skipUnmanaged\'].$error" ng-show="unmanagedstatusForm[\'skipUnmanaged\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.SKIPUNMANAGED_REQUIRED">skipUnmanaged field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.SKIPUNMANAGED_MAX_LENGTH" translate-values=\'{max: 255}\'>skipUnmanaged must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.chatWebsite.enableUnmanagedNote" class="md-block">\n                        <label translate="CHAT.SENDUNMANAGED">sendUnmanaged</label>\n                        <input type="text" name="sendUnmanaged" ng-model="vm.chatWebsite.sendUnmanaged" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="unmanagedstatusForm[\'sendUnmanaged\'].$error" ng-show="unmanagedstatusForm[\'sendUnmanaged\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.SENDUNMANAGED_REQUIRED">sendUnmanaged field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.SENDUNMANAGED_MAX_LENGTH" translate-values=\'{max: 255}\'>sendUnmanaged must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div class="chatWebsite-detail-form-container interaction md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.INTERACTION">INTERACTION</div>\n                </div>\n                <form name="interactionForm" novalidate>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.AGENTIDENTIFIER">agentIdentifier</label>\n                        <md-select name="agentIdentifier" ng-model="vm.chatWebsite.agentIdentifier" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                            <md-option ng-value="\'website_alias\'"> {{ \'CHAT.WEBSITEALIAS\' | translate }} </md-option>\n\n                            <md-option ng-value="\'agent_alias\'"> {{ \'CHAT.AGENTALIAS\' | translate }} </md-option>\n\n                            <md-option ng-value="\'agent_fullname\'"> {{ \'CHAT.AGENTFULLNAME\' | translate }} </md-option>\n                        </md-select>\n                        <div class="hint"><span translate="CHAT.HELP.AGENTIDENTIFIER"></span></div>\n                        <div ng-messages="interactionForm[\'agentIdentifier\'].$error" ng-show="interactionForm[\'agentIdentifier\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.AGENTIDENTIFIER_REQUIRED">agentIdentifier field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.CUSTOMERALIAS">customerAlias</label>\n                        <input type="text" name="customerAlias" ng-model="vm.chatWebsite.customerAlias" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'customerAlias\'].$error" ng-show="interactionForm[\'customerAlias\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.CUSTOMERALIAS_REQUIRED">customerAlias field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.CUSTOMERALIAS_MAX_LENGTH" translate-values=\'{max: 255}\'>customerAlias must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.MESSAGEFONTSIZE">messageFontSize</label>\n                        <input type="number" name="messageFontSize" ng-model="vm.chatWebsite.messageFontSize" min="0" max="20" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'messageFontSize\'].$error" ng-show="interactionForm[\'messageFontSize\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.MESSAGEFONTSIZE_REQUIRED">messageFontSize field is required</span>\n                            </div>\n                            <div ng-message="min">\n                                <span translate="CHAT.ERRORS.MESSAGEFONTSIZE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">messageFontSize must be a valid greater or equal than</span> <span>0</span>\n                            </div>\n                            <div ng-message="max">\n                                <span translate="CHAT.ERRORS.MESSAGEFONTSIZE_MUST_BE_LESS_THAN_OR_EQUAL_TO">messageFontSize must be a valid greater or equal than</span> <span>20</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.chatWebsite.agentIdentifier === \'website_alias\'" class="md-block">\n                        <label translate="CHAT.WEBSITEALIAS">WebsiteAlias</label>\n                        <input type="text" name="agentAlias" ng-model="vm.chatWebsite.agentAlias" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div class="hint"><span translate="CHAT.HELP.WEBSITEALIAS"></span></div>\n                        <div ng-messages="interactionForm[\'agentAlias\'].$error" ng-show="interactionForm[\'agentAlias\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.WEBSITEALIAS_REQUIRED">WebsiteAlias field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.WEBSITEALIAS_MAX_LENGTH" translate-values=\'{max: 255}\'>WebsiteAlias must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.CLOSINGQUESTION">closingQuestion</label>\n                        <input type="text" name="closingQuestion" ng-model="vm.chatWebsite.closingQuestion" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'closingQuestion\'].$error" ng-show="interactionForm[\'closingQuestion\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.CLOSINGQUESTION_REQUIRED">closingQuestion field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.CLOSINGQUESTION_MAX_LENGTH" translate-values=\'{max: 255}\'>closingQuestion must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.FORMSUBMITSUCCESSMESSAGE">formSubmitSuccessMessage</label>\n                        <input type="text" name="formSubmitSuccessMessage" ng-model="vm.chatWebsite.formSubmitSuccessMessage" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'formSubmitSuccessMessage\'].$error" ng-show="interactionForm[\'formSubmitSuccessMessage\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.FORMSUBMITSUCCESSMESSAGE_REQUIRED">formSubmitSuccessMessage field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.FORMSUBMITSUCCESSMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>formSubmitSuccessMessage must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.FORMSUBMITFAILUREMESSAGE">formSubmitFailureMessage</label>\n                        <input type="text" name="formSubmitFailureMessage" ng-model="vm.chatWebsite.formSubmitFailureMessage" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'formSubmitFailureMessage\'].$error" ng-show="interactionForm[\'formSubmitFailureMessage\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.FORMSUBMITFAILUREMESSAGE_REQUIRED">formSubmitFailureMessage field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.FORMSUBMITFAILUREMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>formSubmitFailureMessage must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.enableCustomerWriting" aria-label="enableCustomerWriting" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.ENABLECUSTOMERWRITING">enableCustomerWriting</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="!vm.chatWebsite.enableCustomerWriting" class="md-block">\n                        <label translate="CHAT.WAITINGTITLE">waitingTitle</label>\n                        <input type="text" name="waitingTitle" ng-model="vm.chatWebsite.waitingTitle" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'waitingTitle\'].$error" ng-show="interactionForm[\'waitingTitle\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.WAITINGTITLE_REQUIRED">waitingTitle field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.WAITINGTITLE_MAX_LENGTH" translate-values=\'{max: 255}\'>waitingTitle must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="!vm.chatWebsite.enableCustomerWriting" class="md-block">\n                        <label translate="CHAT.WAITINGMESSAGE">waitingMessage</label>\n                        <textarea name="waitingMessage" ng-model="vm.chatWebsite.waitingMessage" md-maxlength="255" required></textarea>\n\n                        <div ng-messages="interactionForm[\'waitingMessage\'].$error" ng-show="interactionForm[\'waitingMessage\'].$touched" role="alert">\n\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.WAITINGMESSAGE_REQUIRED">waitingMessage field is required</span>\n                            </div>\n\n\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.WAITINGMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>waitingMessage must have a maximum length equal to 255</span>\n                            </div>\n\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.NOTETITLE">noteTitle</label>\n                        <input type="text" name="noteTitle" ng-model="vm.chatWebsite.noteTitle" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'noteTitle\'].$error" ng-show="interactionForm[\'noteTitle\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.NOTETITLE_REQUIRED">noteTitle field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.NOTETITLE_MAX_LENGTH" translate-values=\'{max: 255}\'>noteTitle must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.PLACEHOLDERMESSAGE">placeholderMessage</label>\n                        <input type="text" name="placeholderMessage" ng-model="vm.chatWebsite.placeholderMessage" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'placeholderMessage\'].$error" ng-show="interactionForm[\'placeholderMessage\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.PLACEHOLDERMESSAGE_REQUIRED">placeholderMessage field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.PLACEHOLDERMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>placeholderMessage must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.download_transcript" aria-label="downloadTranscript" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.DOWNLOADTRANSCRIPT">downloadTranscript</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.enableCustomerAttachment" aria-label="enableCustomerAttachment" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.ENABLECUSTOMERATTACHMENT">enableCustomerAttachment</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.enableCustomerCheckmarks" aria-label="enableCustomerCheckmarks" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.ENABLECUSTOMERCHECKMARKS">enableCustomerCheckmarks</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="CHAT.SYSTEMALIAS">systemAlias</label>\n                        <input type="text" name="systemAlias" ng-model="vm.chatWebsite.systemAlias" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                        <div ng-messages="interactionForm[\'systemAlias\'].$error" ng-show="interactionForm[\'systemAlias\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.SYSTEMALIAS_REQUIRED">systemAlias field is required</span>\n                            </div>\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.SYSTEMALIAS_MAX_LENGTH" translate-values=\'{max: 255}\'>systemAlias must have a maximum length equal to 255</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div ng-if="vm.license.custom" class="chatWebsite-detail-form-container whitelabel md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.WHITELABEL">WHITELABEL</div>\n                </div>\n                <form name="whitelabelForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.chatWebsite.defaultWhiteLabel" aria-label="default" ng-disabled="!vm.crudPermissions.canEdit"><span translate="CHAT.DEFAULT">default</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="!vm.chatWebsite.defaultWhiteLabel" class="md-block">\n                        <label translate="CHAT.WHITELABEL">whiteLabel</label>\n                        <textarea name="whiteLabel" ng-model="vm.chatWebsite.whiteLabel" md-maxlength="255" required></textarea>\n\n                        <div ng-messages="whitelabelForm[\'whiteLabel\'].$error" ng-show="whitelabelForm[\'whiteLabel\'].$touched" role="alert">\n\n                            <div ng-message="required">\n                                <span translate="CHAT.ERRORS.WHITELABEL_REQUIRED">whiteLabel field is required</span>\n                            </div>\n\n\n                            <div ng-message="md-maxlength">\n                                <span translate="CHAT.ERRORS.WHITELABEL_MAX_LENGTH" translate-values=\'{max: 255}\'>whiteLabel must have a maximum length equal to 255</span>\n                            </div>\n\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n            <div ng-if="vm.license.custom" class="chatWebsite-detail-form-container logo md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.LOGO">LOGO</div>\n                </div>\n                <div ng-controller="ChatWebsitelogoController as vm_ca" ng-init="vm_ca.init(vm.chatWebsite, vm.crudPermissions)" class="chatWebsite-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="chatWebsite-image-uploader" flow-init="vm_ca.ngFlowOptions" flow-name="vm_ca.ngFlow.flow" flow-files-submitted="vm_ca.upload()" flow-file-added="vm_ca.fileAdded($file)" flow-file-success="vm_ca.fileSuccess($file, $message)" flow-complete="vm_ca.uploadComplete()" flow-drop flow-drag-enter="vm_ca.dropping=true" flow-drag-leave="vm_ca.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn ng-disabled="!vm_ca.crudPermissions.canEdit">\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="logoimage in vm_ca.chatWebsite.images" ng-switch="logoimage.type">\n                                <div class="chatWebsite-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{logoimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="logoimage.file">\n                                </div>\n\n                                <div class="chatWebsite-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{logoimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n            <div class="chatWebsite-detail-form-container agentavatar md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.AGENTAVATAR">AGENTAVATAR</div>\n                </div>\n                <div ng-controller="ChatWebsiteagentAvatarController as vm_ca" ng-init="vm_ca.init(vm.chatWebsite, vm.crudPermissions)" class="chatWebsite-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="chatWebsite-image-uploader" flow-init="vm_ca.ngFlowOptions" flow-name="vm_ca.ngFlow.flow" flow-files-submitted="vm_ca.upload()" flow-file-added="vm_ca.fileAdded($file)" flow-file-success="vm_ca.fileSuccess($file, $message)" flow-complete="vm_ca.uploadComplete()" flow-drop flow-drag-enter="vm_ca.dropping=true" flow-drag-leave="vm_ca.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn ng-disabled="!vm_ca.crudPermissions.canEdit">\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="agentAvatarimage in vm_ca.chatWebsite.images" ng-switch="agentAvatarimage.type">\n                                <div class="chatWebsite-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{agentAvatarimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="agentAvatarimage.file">\n                                </div>\n\n                                <div class="chatWebsite-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{agentAvatarimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n            <div class="chatWebsite-detail-form-container customeravatar md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.CUSTOMERAVATAR">CUSTOMERAVATAR</div>\n                </div>\n                <div ng-controller="ChatWebsitecustomerAvatarController as vm_ca" ng-init="vm_ca.init(vm.chatWebsite, vm.crudPermissions)" class="chatWebsite-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="chatWebsite-image-uploader" flow-init="vm_ca.ngFlowOptions" flow-name="vm_ca.ngFlow.flow" flow-files-submitted="vm_ca.upload()" flow-file-added="vm_ca.fileAdded($file)" flow-file-success="vm_ca.fileSuccess($file, $message)" flow-complete="vm_ca.uploadComplete()" flow-drop flow-drag-enter="vm_ca.dropping=true" flow-drag-leave="vm_ca.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn ng-disabled="!vm_ca.crudPermissions.canEdit">\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="customerAvatarimage in vm_ca.chatWebsite.images" ng-switch="customerAvatarimage.type">\n                                <div class="chatWebsite-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{customerAvatarimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="customerAvatarimage.file">\n                                </div>\n\n                                <div class="chatWebsite-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{customerAvatarimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n            <div class="chatWebsite-detail-form-container systemavatar md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="CHAT.SYSTEMAVATAR">SYSTEMAVATAR</div>\n                </div>\n                <div ng-controller="ChatWebsitesystemAvatarController as vm_ca" ng-init="vm_ca.init(vm.chatWebsite, vm.crudPermissions)" class="chatWebsite-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="chatWebsite-image-uploader" flow-init="vm_ca.ngFlowOptions" flow-name="vm_ca.ngFlow.flow" flow-files-submitted="vm_ca.upload()" flow-file-added="vm_ca.fileAdded($file)" flow-file-success="vm_ca.fileSuccess($file, $message)" flow-complete="vm_ca.uploadComplete()" flow-drop flow-drag-enter="vm_ca.dropping=true" flow-drag-leave="vm_ca.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn ng-disabled="!vm_ca.crudPermissions.canEdit">\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="systemAvatarimage in vm_ca.chatWebsite.images" ng-switch="systemAvatarimage.type">\n                                <div class="chatWebsite-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{systemAvatarimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="systemAvatarimage.file">\n                                </div>\n\n                                <div class="chatWebsite-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{systemAvatarimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.ONLINE">ONLINE</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container chatformonline md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteonlineFormController as vm_fonc" ng-init="vm_fonc.init(vm.chatWebsite)" class="content" md-background-bg layout="column">\n                    <div flex>\n                        \x3c!-- START Buttons --\x3e\n                        <md-button aria-label="comment" class="md-fab md-mini" ng-click="vm_fonc.add(button.type)" ng-repeat="button in vm_fonc.buttons">\n                            <md-tooltip md-direction="top">{{button.name}}</md-tooltip>\n                            <md-icon md-font-icon="{{button.icon}}"></md-icon>\n                        </md-button>\n                        \x3c!-- END Buttons --\x3e\n                    </div>\n\n                    <div layout="row" flex>\n                        <div flex="50">\n                            <md-card>\n                                <md-card-title>\n                                    <md-card-title-text>\n                                        <div class="pb-16" layout="row" layout-align="start center">\n                                            <div class="h2 secondary-text" translate="CHAT.BUILDER">BUILDER</div>\n                                        </div>\n                                    </md-card-title-text>\n                                </md-card-title>\n                                <md-card-content>\n\n                                    <form name="onlineForm" novalidate>\n\n                                        \x3c!-- START MapKey --\x3e\n                                        <md-input-container class="md-block" ng-if="vm_fonc.chatWebsite.onlineForm.items.length">\n                                            <label translate="CHAT.HELP.MAPKEY">MapKey</label>\n                                            <md-select ng-model="vm_fonc.chatWebsite.mapKey">\n                                                <md-option ng-value="null">None</md-option>\n\n                                                <md-optgroup label="standard">\n                                                    <md-option ng-repeat="field in vm_fonc.fields" ng-value="field.key">{{ field.value }}</md-option>\n                                                </md-optgroup>\n\n                                                <md-optgroup label="custom" ng-if="vm_fonc.customFields.length">\n                                                    <md-option ng-repeat="field in vm_fonc.customFields" ng-value="field.key">{{ field.value }}</md-option>\n                                                </md-optgroup>\n                                            </md-select>\n                                        </md-input-container>\n                                        \x3c!-- END MapKey --\x3e\n\n                                        \x3c!-- START FromKey --\x3e\n                                        <md-input-container class="md-block" ng-if="vm_fonc.chatWebsite.onlineForm.items.length">\n                                            <label translate="CHAT.HELP.FROMKEY">FromKey</label>\n                                            <md-select ng-model="vm_fonc.chatWebsite.onlineForm.fromKey" md-selected-text="vm_fonc.chatWebsite.onlineForm.fromKey != null ? vm_fonc.chatWebsite.onlineForm.items[vm_fonc.chatWebsite.onlineForm.fromKey].props.title : \'None\'">\n                                                <md-option ng-value="null">None</md-option>\n                                                <md-option ng-repeat="item in vm_fonc.chatWebsite.onlineForm.items" ng-if="item.props.title" ng-value="$index">{{ item.props.title }}</md-option>\n                                            </md-select>\n                                        </md-input-container>\n                                        \x3c!-- END FromKey --\x3e\n\n                                        \x3c!-- START EXPANSION PANELS --\x3e\n                                        <md-expansion-panel ng-repeat="item in vm_fonc.chatWebsite.onlineForm.items track by $index" md-component-id="{{\'onlinePanel\' + $index}}">\n                                            <md-expansion-panel-collapsed md-no-sticky="true">\n                                                <md-button class="md-icon-button" aria-label="Down" ng-click="vm_fonc.down(item, $index); $event.stopPropagation()">\n                                                    <md-icon md-font-icon="icon-arrow-down-bold-circle-outline"></md-icon>\n                                                </md-button>\n                                                <md-button class="md-icon-button" aria-label="Up" ng-click="vm_fonc.up(item, $index); $event.stopPropagation()">\n                                                    <md-icon md-font-icon="icon-arrow-up-bold-circle-outline"></md-icon>\n                                                </md-button>\n\n                                                <div class="md-title">{{item.props.title || item.type}}</div>\n\n                                                <div flex></div>\n                                                <md-button class="md-icon-button" aria-label="Collapse" ng-click="$panel.collapse()">\n                                                    <md-icon md-font-icon="icon-chevron-down"></md-icon>\n                                                </md-button>\n                                            </md-expansion-panel-collapsed>\n\n                                            <md-expansion-panel-expanded>\n                                                <md-expansion-panel-header>\n                                                    <md-button class="md-icon-button" aria-label="Down" ng-click="vm_fonc.down(item, $index)">\n                                                        <md-icon md-font-icon="icon-arrow-down-bold-circle-outline"></md-icon>\n                                                    </md-button>\n                                                    <md-button class="md-icon-button" aria-label="Up" ng-click="vm_fonc.up(item, $index)">\n                                                        <md-icon md-font-icon="icon-arrow-up-bold-circle-outline"></md-icon>\n                                                    </md-button>\n\n                                                    <div class="md-title">{{item.props.title || item.type}}</div>\n\n                                                    <div flex></div>\n\n                                                    <md-button class="md-icon-button md-warn" aria-label="Remove" ng-click="vm_fonc.remove($index)">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                    <md-button class="md-icon-button" aria-label="Collapse" ng-click="$panel.collapse()">\n                                                        <md-icon md-font-icon="icon-chevron-up"></md-icon>\n                                                    </md-button>\n                                                </md-expansion-panel-header>\n\n                                                <md-expansion-panel-content>\n                                                    <form-item type="{{item.type}}" item="item" index="$index"></form-item>\n\n                                                    <md-input-container class="md-block">\n                                                        <label translate="CHAT.VARIABLE">Variable</label>\n                                                        <md-select ng-model="item.variable">\n                                                            <md-option ng-value="null">None</md-option>\n                                                            <md-option ng-repeat="variable in vm_fonc.variables" ng-value="variable.name">{{ variable.name }}</md-option>\n                                                        </md-select>\n                                                    </md-input-container>\n\n                                                    <md-input-container class="md-block">\n                                                        <label translate="CHAT.CM_FIELD">Contact Manager Field</label>\n                                                        <md-select ng-model="item.cmField">\n                                                            <md-option ng-value="null">None</md-option>\n\n                                                            <md-optgroup label="standard">\n                                                                <md-option ng-repeat="field in vm_fonc.fields" ng-value="field.key">{{ field.value }}</md-option>\n                                                            </md-optgroup>\n\n                                                            <md-optgroup label="custom" ng-if="vm_fonc.customFields.length">\n                                                                <md-option ng-repeat="field in vm_fonc.customFields" ng-value="field.key">{{ field.value }}</md-option>\n                                                            </md-optgroup>\n                                                        </md-select>\n                                                    </md-input-container>\n                                                </md-expansion-panel-content>\n\n                                            </md-expansion-panel-expanded>\n                                        </md-expansion-panel>\n                                        \x3c!-- END EXPANSION PANELS --\x3e\n                                    </form>\n\n                                </md-card-content>\n                            </md-card>\n                        </div>\n                        <div flex="50">\n                            <md-card>\n                                <md-card-title>\n                                    <md-card-title-text>\n                                        <div class="pb-16" layout="row" layout-align="start center">\n                                            <div class="h2 secondary-text" translate="CHAT.PREVIEW">PREVIEW</div>\n                                        </div>\n                                    </md-card-title-text>\n                                </md-card-title>\n                                <md-card-content flex>\n                                    <form-view form="vm_fonc.chatWebsite.onlineForm" flex="100"></form-view>\n                                </md-card-content>\n                            </md-card>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.OFFLINE">OFFLINE</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container chatformoffline md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteofflineFormController as vm_fonc" ng-init="vm_fonc.init(vm.chatWebsite)" class="content" md-background-bg layout="column">\n                    <div flex>\n                        \x3c!-- START Buttons --\x3e\n                        <md-button aria-label="comment" class="md-fab md-mini" ng-click="vm_fonc.add(button.type)" ng-repeat="button in vm_fonc.buttons">\n                            <md-tooltip md-direction="top">{{button.name}}</md-tooltip>\n                            <md-icon md-font-icon="{{button.icon}}"></md-icon>\n                        </md-button>\n                        \x3c!-- END Buttons --\x3e\n                    </div>\n\n                    <div layout="row" flex>\n                        <div flex="50">\n                            <md-card>\n                                <md-card-title>\n                                    <md-card-title-text>\n                                        <div class="pb-16" layout="row" layout-align="start center">\n                                            <div class="h2 secondary-text" translate="CHAT.BUILDER">BUILDER</div>\n                                        </div>\n                                    </md-card-title-text>\n                                </md-card-title>\n                                <md-card-content>\n\n                                    <form name="offlineForm" novalidate>\n                                        <md-input-container class="md-block">\n                                            <md-switch ng-model="vm_fonc.chatWebsite.forwardOffline" aria-label="forwardOffline"><span translate="CHAT.FORWARD_OFFLINE">forwardOffline</span></md-switch>\n                                        </md-input-container>\n\n                                        <md-input-container class="md-block" ng-if="vm_fonc.chatWebsite.forwardOffline">\n                                            <label translate="CHAT.FORWARD_OFFLINE_ADDRESS">FORWARD OFFLINE ADDRESS</label>\n                                            <input type="text" name="forwardOfflineAddress" ng-model="vm_fonc.chatWebsite.forwardOfflineAddress">\n                                            <div class="hint"><span translate="CHAT.HELP.FORWARD_OFFLINE"></span></div>\n                                            <div ng-messages="offlineForm[\'forwardOfflineAddress\'].$error" ng-show="offlineForm[\'forwardOfflineAddress\'].$touched" role="alert">\n                                                <div ng-message="email">\n                                                    <span translate="CHAT.ERRORS.EMAIL_MUST_BE_VALID">forwardOffline must be a valid e-mail address</span>\n                                                </div>\n                                            </div>\n                                        </md-input-container>\n\n                                        \x3c!-- START MapKey --\x3e\n                                        <md-input-container class="md-block" ng-if="vm_fonc.chatWebsite.offlineForm.items.length">\n                                            <label translate="CHAT.HELP.MAPKEY">MapKey</label>\n                                            <md-select ng-model="vm_fonc.chatWebsite.mapKeyOffline">\n                                                <md-option ng-value="null">None</md-option>\n\n                                                <md-optgroup label="standard">\n                                                    <md-option ng-repeat="field in vm_fonc.fields" ng-value="field.key">{{ field.value }}</md-option>\n                                                </md-optgroup>\n\n                                                <md-optgroup label="custom" ng-if="vm_fonc.customFields.length">\n                                                    <md-option ng-repeat="field in vm_fonc.customFields" ng-value="field.key">{{ field.value }}</md-option>\n                                                </md-optgroup>\n                                            </md-select>\n                                        </md-input-container>\n                                        \x3c!-- END MapKey --\x3e\n\n                                        \x3c!-- START FromKey --\x3e\n                                        <md-input-container class="md-block" ng-if="vm_fonc.chatWebsite.offlineForm.items.length">\n                                            <label translate="CHAT.HELP.FROMKEY">FromKey</label>\n                                            <md-select ng-model="vm_fonc.chatWebsite.offlineForm.fromKey" md-selected-text="vm_fonc.chatWebsite.offlineForm.fromKey != null ? vm_fonc.chatWebsite.offlineForm.items[vm_fonc.chatWebsite.offlineForm.fromKey].props.title : \'None\'">\n                                                <md-option ng-value="null">None</md-option>\n                                                <md-option ng-repeat="item in vm_fonc.chatWebsite.offlineForm.items" ng-if="item.props.title" ng-value="$index">{{ item.props.title }}</md-option>\n                                            </md-select>\n                                        </md-input-container>\n                                        \x3c!-- END FromKey --\x3e\n\n                                        \x3c!-- START EXPANSION PANELS --\x3e\n                                        <md-expansion-panel ng-repeat="item in vm_fonc.chatWebsite.offlineForm.items track by $index" md-component-id="{{\'offlinePanel\' + $index}}">\n                                            <md-expansion-panel-collapsed md-no-sticky="true">\n                                                <md-button class="md-icon-button" aria-label="Down" ng-click="vm_fonc.down(item, $index); $event.stopPropagation()">\n                                                    <md-icon md-font-icon="icon-arrow-down-bold-circle-outline"></md-icon>\n                                                </md-button>\n                                                <md-button class="md-icon-button" aria-label="Up" ng-click="vm_fonc.up(item, $index); $event.stopPropagation()">\n                                                    <md-icon md-font-icon="icon-arrow-up-bold-circle-outline"></md-icon>\n                                                </md-button>\n\n                                                <div class="md-title">{{item.props.title || item.type}}</div>\n\n                                                <div flex></div>\n                                                <md-button class="md-icon-button" aria-label="Collapse" ng-click="$panel.collapse()">\n                                                    <md-icon md-font-icon="icon-chevron-down"></md-icon>\n                                                </md-button>\n                                            </md-expansion-panel-collapsed>\n\n                                            <md-expansion-panel-expanded>\n                                                <md-expansion-panel-header>\n                                                    <md-button class="md-icon-button" aria-label="Down" ng-click="vm_fonc.down(item, $index)">\n                                                        <md-icon md-font-icon="icon-arrow-down-bold-circle-outline"></md-icon>\n                                                    </md-button>\n                                                    <md-button class="md-icon-button" aria-label="Up" ng-click="vm_fonc.up(item, $index)">\n                                                        <md-icon md-font-icon="icon-arrow-up-bold-circle-outline"></md-icon>\n                                                    </md-button>\n\n                                                    <div class="md-title">{{item.props.title || item.type}}</div>\n\n                                                    <div flex></div>\n\n                                                    <md-button class="md-icon-button md-warn" aria-label="Remove" ng-click="vm_fonc.remove($index)">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                    <md-button class="md-icon-button" aria-label="Collapse" ng-click="$panel.collapse()">\n                                                        <md-icon md-font-icon="icon-chevron-up"></md-icon>\n                                                    </md-button>\n                                                </md-expansion-panel-header>\n\n                                                <md-expansion-panel-content>\n                                                    <form-item type="{{item.type}}" item="item" index="$index"></form-item>\n\n\n                                                    <md-input-container class="md-block">\n                                                        <label translate="CHAT.CM_FIELD">Contact Manager Field</label>\n                                                        <md-select ng-model="item.cmField">\n                                                            <md-option ng-value="null">None</md-option>\n\n                                                            <md-optgroup label="standard">\n                                                                <md-option ng-repeat="field in vm_fonc.fields" ng-value="field.key">{{ field.value }}</md-option>\n                                                            </md-optgroup>\n\n                                                            <md-optgroup label="custom" ng-if="vm_fonc.customFields.length">\n                                                                <md-option ng-repeat="field in vm_fonc.customFields" ng-value="field.key">{{ field.value }}</md-option>\n                                                            </md-optgroup>\n                                                        </md-select>\n                                                    </md-input-container>\n                                                </md-expansion-panel-content>\n\n                                            </md-expansion-panel-expanded>\n                                        </md-expansion-panel>\n                                        \x3c!-- END EXPANSION PANELS --\x3e\n                                    </form>\n\n                                </md-card-content>\n                            </md-card>\n                        </div>\n                        <div flex="50">\n                            <md-card>\n                                <md-card-title>\n                                    <md-card-title-text>\n                                        <div class="pb-16" layout="row" layout-align="start center">\n                                            <div class="h2 secondary-text" translate="CHAT.PREVIEW">PREVIEW</div>\n                                        </div>\n                                    </md-card-title-text>\n                                </md-card-title>\n                                <md-card-content flex>\n                                    <form-view form="vm_fonc.chatWebsite.offlineForm" flex="100"></form-view>\n                                </md-card-content>\n                            </md-card>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.PROACTIVEACTIONS">PROACTIVEACTIONS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container proactive md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteProactiveActionsController as vm_dc" ng-init="vm_dc.init(vm.chatWebsite, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedChatWebsiteProactiveActions.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="CHAT.PROACTIVEACTIONS">ProactiveActions</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event)" aria-label="add chatProactiveAction" translate translate-attr-label="CHAT.ADD_CHATPROACTIVEACTION">\n                                <md-icon md-font-icon="icon-plus"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedChatWebsiteProactiveActions.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedChatWebsiteProactiveActions.length}} {{vm_dc.selectedChatWebsiteProactiveActions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedChatWebsiteProactiveActions" csv-label="true" filename="chatWebsites.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedChatWebsiteProactiveActions($event)" aria-label="delete selected" translate translate-attr-label="CHATWEBSITES.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedChatWebsiteProactiveActions" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getChatWebsiteProactiveActions">\n                                <tr md-row>\n                                    <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                    <th md-column md-order-by="name">{{ \'CHAT.NAME\' | translate }}</th>\n                                    <th md-column md-order-by="type">{{ \'CHAT.TYPE\' | translate }}</th>\n                                    <th md-column md-order-by="selector">{{ \'CHAT.SELECTOR\' | translate }}</th>\n                                    <th md-column md-order-by="timeout">{{ \'CHAT.TIMEOUT\' | translate }}</th>\n                                    <th md-column md-order-by="createdAt">{{ \'CHAT.CREATED_AT\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="chatProactiveAction" md-select-id="id" ng-repeat="chatProactiveAction in vm_dc.chatWebsiteProactiveActions.rows">\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" md-cell>{{chatProactiveAction.id}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" md-cell>{{chatProactiveAction.name}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" md-cell>{{ \'CHAT.\' + vm_dc.arraytype[chatProactiveAction.type].option | uppercase | translate }}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" md-cell>{{chatProactiveAction.selector}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" md-cell>{{chatProactiveAction.timeout}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" md-cell>{{chatProactiveAction.createdAt | date:\'medium\'}}</td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.createOrEditChatWebsiteChatProactiveAction($event, chatProactiveAction)" translate="CHAT.EDIT_CHATPROACTIVEACTION">\n                                                        Edit ChatProactiveAction\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(chatProactiveAction, $event)" translate="CHAT.DELETE_CHATPROACTIVEACTION">\n                                                        Delete ChatProactiveAction\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.chatWebsiteProactiveActions.rows.length">\n                                    <td md-cell colspan="8">\n                                        <span class="text-boxed-ligth" translate="CHAT.NO_CHATPROACTIVEACTION_AVAILABLE">No chatproactiveaction available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.chatWebsiteProactiveActions.count}}" md-on-paginate="vm_dc.getChatWebsiteProactiveActions" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.DISPOSITIONS">DISPOSITIONS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container chatdispositions md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteChatDispositionsController as vm_dc" ng-init="vm_dc.init(vm.chatWebsite, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedChatWebsiteChatDispositions.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="CHAT.CHATDISPOSITIONS">ChatDispositions</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditChatWebsiteChatDisposition($event)" aria-label="add chatDisposition" translate translate-attr-label="CHAT.ADD_CHATDISPOSITION">\n                                <md-icon md-font-icon="icon-plus"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedChatWebsiteChatDispositions.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedChatWebsiteChatDispositions.length}} {{vm_dc.selectedChatWebsiteChatDispositions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedChatWebsiteChatDispositions" csv-label="true" filename="chatWebsites.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedChatWebsiteChatDispositions($event)" aria-label="delete selected" translate translate-attr-label="CHATWEBSITES.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedChatWebsiteChatDispositions" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getChatWebsiteChatDispositions">\n                                <tr md-row>\n                                    <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                    <th md-column md-order-by="name">{{ \'CHAT.NAME\' | translate }}</th>\n                                    <th md-column md-order-by="createdAt">{{ \'CHAT.CREATED_AT\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="chatDisposition" md-select-id="id" ng-repeat="chatDisposition in vm_dc.chatWebsiteChatDispositions.rows">\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatDisposition($event, chatDisposition)" md-cell>{{chatDisposition.id}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatDisposition($event, chatDisposition)" md-cell>{{chatDisposition.name}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatDisposition($event, chatDisposition)" md-cell>{{chatDisposition.createdAt | date:\'medium\'}}</td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.createOrEditChatWebsiteChatDisposition($event, chatDisposition)" translate="CHAT.EDIT_CHATDISPOSITION">\n                                                        Edit ChatDisposition\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(chatDisposition, $event)" translate="CHAT.DELETE_CHATDISPOSITION">\n                                                        Delete ChatDisposition\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.chatWebsiteChatDispositions.rows.length">\n                                    <td md-cell colspan="5">\n                                        <span class="text-boxed-ligth" translate="CHAT.NO_CHATDISPOSITION_AVAILABLE">No chatdisposition available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.chatWebsiteChatDispositions.count}}" md-on-paginate="vm_dc.getChatWebsiteChatDispositions" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.CANNEDANSWERS">CANNEDANSWERS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container chatcannedanswers md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteChatCannedAnswersController as vm_dc" ng-init="vm_dc.init(vm.chatWebsite, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedChatWebsiteChatCannedAnswers.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="CHAT.CHATCANNEDANSWERS">ChatCannedAnswers</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event)" aria-label="add chatCannedAnswer" translate translate-attr-label="CHAT.ADD_CHATCANNEDANSWER">\n                                <md-icon md-font-icon="icon-plus"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedChatWebsiteChatCannedAnswers.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedChatWebsiteChatCannedAnswers.length}} {{vm_dc.selectedChatWebsiteChatCannedAnswers.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedChatWebsiteChatCannedAnswers" csv-label="true" filename="chatWebsites.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedChatWebsiteChatCannedAnswers($event)" aria-label="delete selected" translate translate-attr-label="CHATWEBSITES.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedChatWebsiteChatCannedAnswers" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getChatWebsiteChatCannedAnswers">\n                                <tr md-row>\n                                    <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                    <th md-column md-order-by="key">{{ \'CHAT.KEY\' | translate }}</th>\n                                    <th md-column md-order-by="value">{{ \'CHAT.VALUE\' | translate }}</th>\n                                    <th md-column md-order-by="description">{{ \'CHAT.DESCRIPTION\' | translate }}</th>\n                                    <th md-column md-order-by="createdAt">{{ \'CHAT.CREATED_AT\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="chatCannedAnswer" md-select-id="id" ng-repeat="chatCannedAnswer in vm_dc.chatWebsiteChatCannedAnswers.rows">\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event, chatCannedAnswer)" md-cell>{{chatCannedAnswer.id}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event, chatCannedAnswer)" md-cell>{{chatCannedAnswer.key}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event, chatCannedAnswer)" md-cell>{{chatCannedAnswer.value}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event, chatCannedAnswer)" md-cell>{{chatCannedAnswer.description}}</td>\n                                    <td ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event, chatCannedAnswer)" md-cell>{{chatCannedAnswer.createdAt | date:\'medium\'}}</td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.createOrEditChatWebsiteChatCannedAnswer($event, chatCannedAnswer)" translate="CHAT.EDIT_CHATCANNEDANSWER">\n                                                        Edit ChatCannedAnswer\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(chatCannedAnswer, $event)" translate="CHAT.DELETE_CHATCANNEDANSWER">\n                                                        Delete ChatCannedAnswer\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.chatWebsiteChatCannedAnswers.rows.length">\n                                    <td md-cell colspan="7">\n                                        <span class="text-boxed-ligth" translate="CHAT.NO_CHATCANNEDANSWER_AVAILABLE">No chatcannedanswer available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.chatWebsiteChatCannedAnswers.count}}" md-on-paginate="vm_dc.getChatWebsiteChatCannedAnswers" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.ACTIONS">ACTIONS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteActionsController as vm_ac" ng-init="vm_ac.init(vm.chatWebsite, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                    \x3c!-- SIDENAV --\x3e\n                    <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                        \x3c!-- SIDENAV CONTENT --\x3e\n                        <md-list class="no-padding">\n                            <md-subheader class="md-no-sticky">\n                                <span translate="VOICE.APPLICATIONS_LIST">\n                                    Applications List\n                                </span>\n                            </md-subheader>\n                        </md-list>\n                        <md-divider></md-divider>\n                        <md-list ng-sortable="vm_ac.list">\n                            <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                <p class="text-truncate" translate="CHAT.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                            </md-list-item>\n                        </md-list>\n                        \x3c!-- / SIDENAV CONTENT --\x3e\n                    </div>\n                    \x3c!-- / SIDENAV --\x3e\n                    <div flex></div>\n                    \x3c!-- MAIN --\x3e\n                    <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                        <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedChatWebsiteApps.length">\n                            <div class="md-toolbar-tools">\n                                <span class="md-subhead">Drag & Drop Routing</span>\n                                <div flex></div>\n                                <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                            </div>\n                        </md-toolbar>\n                        <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedChatWebsiteApps.length">\n                            <div class="md-toolbar-tools">\n                                <span class="md-subhead">{{vm_ac.selectedChatWebsiteApps.length}} {{vm_ac.selectedChatWebsiteApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                <div flex></div>\n                                <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedChatWebsiteApps($event)" aria-label="delete selected" translate translate-attr-label="CHAT.DELETE_SELECTED">\n                                    <md-icon md-font-icon="icon-delete"></md-icon>\n                                </md-button>\n                            </div>\n                        </md-toolbar>\n\n                        \x3c!-- QUEUES TABLE --\x3e\n                        <md-table-container>\n                            <table md-table md-row-select multiple ng-model="vm_ac.selectedChatWebsiteApps">\n                                <thead md-head>\n                                    <tr md-row>\n                                        <th md-column width="10px"></th>\n                                        <th md-column width="10px">\n                                            <span translate="VOICE.PRIORITY">Priority</span>\n                                        </th>\n                                        <th md-column>\n                                            <span>Type</span>\n                                        </th>\n                                        <th md-column>\n                                            <span>Appdata</span>\n                                        </th>\n                                        <th md-column>\n                                            <span>Interval</span>\n                                        </th>\n                                        <th md-column width="10px"></th>\n                                        <th md-column width="10px"></th>\n                                    </tr>\n                                </thead>\n                                <tbody md-body ng-sortable="vm_ac.applications">\n                                    <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.chatWebsiteApps.rows | filter: vm_ac.query.filter">\n                                        <td md-cell>\n                                            <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                        </td>\n                                        <td md-cell ng-click="vm_ac.editChatWebsiteApp($event, $index)"><span>{{app.priority}}</span></td>\n                                        <td md-cell ng-click="vm_ac.editChatWebsiteApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                        <td md-cell ng-click="vm_ac.editChatWebsiteApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                        <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                        <td md-cell>\n                                            <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                <md-icon md-font-icon="icon-timer"></md-icon>\n                                                <md-tooltip>\n                                                    {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                </md-tooltip>\n                                            </md-button>\n                                        </td>\n                                        <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                            <md-menu>\n                                                <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                    <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                </md-button>\n\n                                                <md-menu-content width="3">\n                                                    <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                        <md-button ng-click="vm_ac.editChatWebsiteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                            Edit App\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                    <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                        <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                            Edit Interval\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                    <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                        <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                            Delete App\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                </md-menu-content>\n                                            </md-menu>\n                                        </td>\n                                    </tr>\n                                    <tr md-row ng-hide="vm_ac.chatWebsiteApps.rows.length">\n                                        <td md-cell colspan="7">\n                                            <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                        </td>\n                                    </tr>\n                                </tbody>\n                            </table>\n                        </md-table-container>\n                        \x3c!-- / QUEUES TABLE --\x3e\n\n                        \x3c!-- NO RESULTS --\x3e\n\n                        \x3c!-- / NO RESULTS --\x3e\n                    </div>\n                    \x3c!-- / MAIN --\x3e\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.INTERACTIONS">INTERACTIONS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container interactions md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteInteractionsController as vm_dc" ng-init="vm_dc.init(vm.chatWebsite, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedChatWebsiteInteractions.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="CHAT.INTERACTIONS">Interactions</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getChatWebsiteInteractions()" aria-label="refresh Interactions" translate translate-attr-label="CHAT.REFRESH_INTERACTIONS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedChatWebsiteInteractions.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedChatWebsiteInteractions.length}} {{vm_dc.selectedChatWebsiteInteractions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedChatWebsiteInteractions" csv-label="true" filename="chatWebsites.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedChatWebsiteInteractions($event)" aria-label="delete selected" translate translate-attr-label="CHATWEBSITES.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedChatWebsiteInteractions" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getChatWebsiteInteractions">\n                                <tr md-row>\n                                    <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                    <th md-column md-order-by="createdAt">{{ \'CHAT.STARTEDAT\' | translate }}</th>\n                                    <th md-column md-order-by="closedAt">{{ \'CHAT.CLOSEDAT\' | translate }}</th>\n                                    <th md-column>{{ \'CHAT.CONTACT\' | translate }}</th>\n                                    <th md-column>{{ \'CHAT.AGENT\' | translate }}</th>\n                                    <th md-column md-order-by="disposition">{{ \'CHAT.DISPOSITION\' | translate }}</th>\n                                    <th md-column md-order-by="ratingValue">{{ \'CHAT.RATING\' | translate }}</th>\n                                    <th md-column md-order-by="note">{{ \'CHAT.NOTES\' | translate }}</th>\n                                    <th md-column md-order-by="tag">{{ \'CHAT.TAGS\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="interaction" md-select-id="id" ng-repeat="interaction in vm_dc.chatWebsiteInteractions.rows">\n                                    <td md-cell>{{interaction.id}}</td>\n                                    <td md-cell>{{interaction.createdAt | date:\'medium\'}}</td>\n                                    <td md-cell>{{interaction.closedAt | date:\'medium\'}}</td>\n                                    <td md-cell>{{interaction.Contact.firstName}}</td>\n                                    <td md-cell>{{interaction.Owner.name}}</td>\n                                    <td md-cell>{{interaction.disposition}}</td>\n                                    <td md-cell>\n                                        <md-icon md-font-icon="icon-star" style="color:red" ng-show="interaction.ratingValue != null && (!interaction.ratingType || interaction.ratingType == \'star\')" ng-repeat="ratingValue in [1,2,3,4,5] | limitTo:interaction.ratingValue"></md-icon>\n                                        <md-icon md-font-icon="icon-thumb-up" style="color:green" ng-show="interaction.ratingValue != null && interaction.ratingType && interaction.ratingType == \'thumb\' && interaction.ratingValue == 1"></md-icon>\n                                        <md-icon md-font-icon="icon-thumb-down" style="color:red" ng-show="interaction.ratingValue != null && interaction.ratingType && interaction.ratingType == \'thumb\' && interaction.ratingValue == 0"></md-icon><span ng-show="interaction.ratingValue == null" translate="CHAT.NO_RATINGVALUE">No ratingValue</span>\n                                    </td>\n                                    <td md-cell>{{interaction.note}}</td>\n                                    <td md-cell>\n                                        <div ng-if="interaction.Tags.length">\n                                            <md-tooltip md-direction="left" layout="row">\n                                                <span ng-repeat="tag in interaction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                            </md-tooltip>\n                                            <md-icon md-font-icon="icon-tag"></md-icon>\n                                        </div>\n                                    </td>\n                                    <td md-cell class="actions">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item>\n                                                    <md-button ng-click="vm_dc.spychatInteraction($event, interaction)" translate="CHAT.SPYINTERACTION">\n                                                        Spy Interaction\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item>\n                                                    <md-button class="md-primary" ng-click="vm_dc.chatInteractionDownload(interaction, $event)" translate="CHAT.DOWNLOAD_INTERACTION">\n                                                        Download Interaction\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(interaction, $event)" translate="CHAT.DELETE_INTERACTION">\n                                                        Delete Interaction\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.chatWebsiteInteractions.rows.length">\n                                    <td md-cell colspan="15">\n                                        <span class="text-boxed-ligth" translate="CHAT.NO_INTERACTION_AVAILABLE">No interaction available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.chatWebsiteInteractions.count}}" md-on-paginate="vm_dc.getChatWebsiteInteractions" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="CHAT.OFFLINEMESSAGES">OFFLINEMESSAGES</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="chatWebsite-detail-form-container offlinemessages md-background-bg md-whiteframe-1dp">\n                <div ng-controller="ChatWebsiteOfflineMessagesController as vm_dc" ng-init="vm_dc.init(vm.chatWebsite, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedChatWebsiteOfflineMessages.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="CHAT.OFFLINEMESSAGES">OfflineMessages</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedChatWebsiteOfflineMessages.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedChatWebsiteOfflineMessages.length}} {{vm_dc.selectedChatWebsiteOfflineMessages.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedChatWebsiteOfflineMessages" csv-label="true" filename="chatWebsites.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedChatWebsiteOfflineMessages($event)" aria-label="delete selected" translate translate-attr-label="CHATWEBSITES.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedChatWebsiteOfflineMessages" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getChatWebsiteOfflineMessages">\n                                <tr md-row>\n                                    <th md-column md-order-by="id">{{ \'CHAT.ID\' | translate }}</th>\n                                    <th md-column md-order-by="ContactId">{{ \'CHAT.CONTACT\' | translate }}</th>\n                                    <th md-column md-order-by="createdAt">{{ \'CHAT.CREATED_AT\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="offlineMessage" md-select-id="id" ng-repeat="offlineMessage in vm_dc.chatWebsiteOfflineMessages.rows">\n                                    <td md-cell>{{offlineMessage.id}}</td>\n                                    <td md-cell>{{ (vm_dc.contacts | filter : {\'id\':offlineMessage.ContactId})[0].firstName }}</td>\n                                    <td md-cell>{{offlineMessage.createdAt | date:\'medium\'}}</td>\n                                    <td md-cell class="actions">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item>\n                                                    <md-button ng-click="vm_dc.showOfflineMessageChatWebsiteOfflineMessage($event, offlineMessage)" translate="CHAT.SHOW_OFFLINEMESSAGE">\n                                                        SHOW OfflineMessage\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(offlineMessage, $event)" translate="CHAT.DELETE_OFFLINEMESSAGE">\n                                                        Delete OfflineMessage\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.chatWebsiteOfflineMessages.rows.length">\n                                    <td md-cell colspan="5">\n                                        <span class="text-boxed-ligth" translate="CHAT.NO_OFFLINEMESSAGE_AVAILABLE">No offlinemessage available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.chatWebsiteOfflineMessages.count}}" md-on-paginate="vm_dc.getChatWebsiteOfflineMessages" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    </md-tabs>\n\n</div>\n\x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/chat/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="CHAT.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'CHAT.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'CHAT.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'CHAT.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'CHAT.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'CHAT.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'CHAT.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'CHAT.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'CHAT.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'CHAT.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'CHAT.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'CHAT.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'CHAT.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"CHAT.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"CHAT.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"CHAT.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"CHAT.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"CHAT.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"CHAT.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"CHAT.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"CHAT.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'CHAT.PAGE' | translate}}:', rowsPerPage: '{{'CHAT.ROWSPERPAGE' | translate}}:', of: '{{'CHAT.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/chat/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="CHAT.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'CHAT.NAME\' | translate }}</th>\n                <th md-column>{{ \'CHAT.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'CHAT.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'CHAT.READY\' | translate }}</th>\n                <th md-column>{{ \'CHAT.WAITING\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="7">\n                    <div layout="row" layout-align="center center">\n                        <span translate="CHAT.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CHAT.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditChatQueue($event, vm.queues[value])" translate="CHAT.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="CHAT.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'CHAT.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CHAT.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CHAT.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/chat/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CHAT.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CHAT.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/contactmanager/views/companies/companies.html",'<div id="companies" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-circle" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CONTACTMANAGER.COMPANIES">Companies</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CONTACTMANAGER.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedCompanies.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedCompanies =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CONTACTMANAGER.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-companies-count">\n                    <span>{{vm.selectedCompanies.length}}</span>\n                    <span translate="CONTACTMANAGER.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="COMPANIES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllCompanies()" translate="CONTACTMANAGER.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectCompanies()" translate="CONTACTMANAGER.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedCompanies" csv-label="true" filename="companies.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedCompanies($event)" aria-label="delete selected" translate translate-attr-label="COMPANIES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- COMPANY TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedCompanies" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getCompanies">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'CONTACTMANAGER.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'CONTACTMANAGER.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.companies.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="company" md-select-id="id" ng-repeat="company in vm.companies.rows">\n                                <td md-cell ng-if="company.userpic"><img class="avatar" alt="{{company.name}}" ng-src="api/users/{{company.id}}/avatar" /></td>\n                                <td md-cell ng-if="!company.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{company.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(company, ev) : vm.createOrEditCompany($event, company)" md-cell class="id ">{{company.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(company, ev) : vm.createOrEditCompany($event, company)" md-cell class="name ">{{company.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(company, ev) : vm.createOrEditCompany($event, company)" md-cell class="description ">{{company.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(company, $event    )" translate="CONTACTMANAGER.EDIT_COMPANY">\n                                                    Edit Company\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotocontactsgoto(company, $event    )" translate="CONTACTMANAGER.GOTOCONTACTS_COMPANY">\n                                                    goToContacts Company\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(company, $event    )" translate="CONTACTMANAGER.DELETE_COMPANY">\n                                                    Delete Company\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.companies.count}}" md-on-paginate="vm.getCompanies" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / COMPANY TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD COMPANY BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-company-button" ng-click="vm.createOrEditCompany($event)" aria-label="add company" translate translate-attr-aria-label="CONTACTMANAGER.ADD_COMPANY">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD COMPANY BUTTON --\x3e\n</div>'),e.put("app/main/apps/contactmanager/views/companies/create/dialog.html",'<md-dialog class="company-dialog" aria-label="New Company">\n    <form name="companyForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.company.name" ng-required="true" autofocus>\n\n                <div ng-messages="companyForm[\'name\'].$error" ng-show="companyForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.PHONE">Phone</label>\n                <input type="text" name="phone" ng-model="vm.company.phone">\n\n                <div ng-messages="companyForm[\'phone\'].$error" ng-show="companyForm[\'phone\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.VAT">Vat</label>\n                <input type="text" name="vat" ng-model="vm.company.vat">\n\n                <div ng-messages="companyForm[\'vat\'].$error" ng-show="companyForm[\'vat\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.VAT_REQUIRED">Vat field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.FAX">Fax</label>\n                <input type="text" name="fax" ng-model="vm.company.fax">\n\n                <div ng-messages="companyForm[\'fax\'].$error" ng-show="companyForm[\'fax\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.FAX_REQUIRED">Fax field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.COMPANYID">CompanyId</label>\n                <input type="text" name="companyId" ng-model="vm.company.companyId">\n\n                <div ng-messages="companyForm[\'companyId\'].$error" ng-show="companyForm[\'companyId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.COMPANYID_REQUIRED">CompanyId field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.TYPE">Type</label>\n                <input type="text" name="type" ng-model="vm.company.type">\n\n                <div ng-messages="companyForm[\'type\'].$error" ng-show="companyForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.WEBSITE">Website</label>\n                <input type="text" name="website" ng-model="vm.company.website" md-maxlength="255">\n\n                <div ng-messages="companyForm[\'website\'].$error" ng-show="companyForm[\'website\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.WEBSITE_REQUIRED">Website field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="CONTACTMANAGER.ERRORS.WEBSITE_MAX_LENGTH" translate-values=\'{max: 255}\'>Website must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.EMAIL_DOMAIN">Email_Domain</label>\n                <input type="text" name="emailDomain" ng-model="vm.company.emailDomain">\n\n                <div ng-messages="companyForm[\'emailDomain\'].$error" ng-show="companyForm[\'emailDomain\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.EMAIL_DOMAIN_REQUIRED">Email_Domain field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.company.email">\n\n                <div ng-messages="companyForm[\'email\'].$error" ng-show="companyForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="CONTACTMANAGER.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.company.description">\n\n                <div ng-messages="companyForm[\'description\'].$error" ng-show="companyForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newCompany" ng-click="vm.saveCompany()" class="send-button md-accent md-raised" ng-disabled="companyForm.$invalid || companyForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newCompany" ng-click="vm.addNewCompany()" class="send-button md-accent md-raised" ng-disabled="companyForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_COMPANY" translate-attr-aria-label="CONTACTMANAGER.ADD_COMPANY">\n                    ADD COMPANY\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newCompany" ng-click="vm.deleteCompany($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/companies/edit/view.html",'<div id="contactmanager-company" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-companies-button md-icon-button" aria-label="Go to companies" ng-click="vm.gotoCompanies()" translate translate-attr-aria-label="CONTACTMANAGER.GO_TO_COMPANIES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="company-image" hide-xs>\n                    <img ng-src="assets/images/business/companies.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.company.id}}\n                        <span ng-if="vm.company.name">{{vm.company.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="CONTACTMANAGER.CREATED_AT"></span> <span>{{vm.company.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.company, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="CONTACTMANAGER.GOTO_COMPANY"></span></md-tooltip>\n                <md-icon md-font-icon="icon-forward"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveCompany()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (addressForm.$invalid) || (shipmentAddressForm.$invalid)" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.GENERAL">GENERAL</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="company-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CONTACTMANAGER.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.company.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.PHONE">Phone</label>\n                                <input type="text" name="phone" ng-model="vm.company.phone" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'phone\'].$error" ng-show="generalForm[\'phone\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.VAT">Vat</label>\n                                <input type="text" name="vat" ng-model="vm.company.vat" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'vat\'].$error" ng-show="generalForm[\'vat\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.VAT_REQUIRED">Vat field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.FAX">Fax</label>\n                                <input type="text" name="fax" ng-model="vm.company.fax" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'fax\'].$error" ng-show="generalForm[\'fax\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.FAX_REQUIRED">Fax field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.COMPANYID">CompanyId</label>\n                                <input type="text" name="companyId" ng-model="vm.company.companyId" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'companyId\'].$error" ng-show="generalForm[\'companyId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.COMPANYID_REQUIRED">CompanyId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.TYPE">Type</label>\n                                <input type="text" name="type" ng-model="vm.company.type" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.WEBSITE">Website</label>\n                                <input type="text" name="website" ng-model="vm.company.website" md-maxlength="255" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'website\'].$error" ng-show="generalForm[\'website\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.WEBSITE_REQUIRED">Website field is required</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="CONTACTMANAGER.ERRORS.WEBSITE_MAX_LENGTH" translate-values=\'{max: 255}\'>Website must have a maximum length equal to 255</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.EMAIL_DOMAIN">Email_Domain</label>\n                                <input type="text" name="emailDomain" ng-model="vm.company.emailDomain" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'emailDomain\'].$error" ng-show="generalForm[\'emailDomain\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.EMAIL_DOMAIN_REQUIRED">Email_Domain field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.EMAIL">Email</label>\n                                <input type="email" name="email" ng-model="vm.company.email" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'email\'].$error" ng-show="generalForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="CONTACTMANAGER.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.company.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.ADDRESS">ADDRESS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="company-detail-form-container address md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CONTACTMANAGER.ADDRESS">ADDRESS</div>\n                        </div>\n                        <form name="addressForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.STREET">Street</label>\n                                <input type="text" name="street" ng-model="vm.company.street" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="addressForm[\'street\'].$error" ng-show="addressForm[\'street\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.STREET_REQUIRED">Street field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.POSTAL_CODE">Postal_Code</label>\n                                <input type="text" name="postalCode" ng-model="vm.company.postalCode" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="addressForm[\'postalCode\'].$error" ng-show="addressForm[\'postalCode\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.POSTAL_CODE_REQUIRED">Postal_Code field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.CITY">City</label>\n                                <input type="text" name="city" ng-model="vm.company.city" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="addressForm[\'city\'].$error" ng-show="addressForm[\'city\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.CITY_REQUIRED">City field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.COUNTRY">Country</label>\n                                <input type="text" name="country" ng-model="vm.company.country" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="addressForm[\'country\'].$error" ng-show="addressForm[\'country\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.COUNTRY_REQUIRED">Country field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.SHIPMENTADDRESS">SHIPMENTADDRESS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="company-detail-form-container shipmentaddress md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CONTACTMANAGER.SHIPMENTADDRESS">SHIPMENTADDRESS</div>\n                        </div>\n                        <form name="shipmentAddressForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.STREET">Street</label>\n                                <input type="text" name="sStreet" ng-model="vm.company.sStreet" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="shipmentAddressForm[\'sStreet\'].$error" ng-show="shipmentAddressForm[\'sStreet\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.STREET_REQUIRED">Street field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.POSTAL_CODE">Postal_Code</label>\n                                <input type="text" name="sPostalCode" ng-model="vm.company.sPostalCode" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="shipmentAddressForm[\'sPostalCode\'].$error" ng-show="shipmentAddressForm[\'sPostalCode\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.POSTAL_CODE_REQUIRED">Postal_Code field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.CITY">City</label>\n                                <input type="text" name="sCity" ng-model="vm.company.sCity" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="shipmentAddressForm[\'sCity\'].$error" ng-show="shipmentAddressForm[\'sCity\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.CITY_REQUIRED">City field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.COUNTRY">Country</label>\n                                <input type="text" name="sCountry" ng-model="vm.company.sCountry" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="shipmentAddressForm[\'sCountry\'].$error" ng-show="shipmentAddressForm[\'sCountry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.COUNTRY_REQUIRED">Country field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/contactmanager/views/contacts/contacts.html",'<div id="contacts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-multiple" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CONTACTMANAGER.CONTACTS">Contacts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        \x3c!-- SEARCH --\x3e\n        <div class="search-input-wrapper" layout="row" layout-align="start center">\n            <label for="search">\n                <md-icon md-font-icon="icon-magnify"></md-icon>\n            </label>\n            <md-input-container md-no-float class="m-0">\n                <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CONTACTMANAGER.SEARCH_FOR_ANYONE">\n            </md-input-container>\n        </div>\n        \x3c!-- / SEARCH --\x3e\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedContacts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n        <div class="close-button-wrapper" ng-click="vm.selectedContacts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CONTACTMANAGER.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n            <div>\n                <span class="selected-contacts-count">\n                    <span>{{vm.selectedContacts.length}}</span>\n                    <span translate="CONTACTMANAGER.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CONTACTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllContacts()" translate="CONTACTMANAGER.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectContacts()" translate="CONTACTMANAGER.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedContacts" csv-label="true" filename="contacts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button ng-if="vm.crudPermissions.canDelete" class="md-icon-button" ng-click="vm.deleteSelectedContacts($event)" aria-label="delete selected" translate translate-attr-label="CONTACTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n            <div layout="row">\n                <div class="column" flex="20">\n                    <md-card>\n                        <md-card-content>\n                            <button layout-align="center center" md-mini-fab ng-click="vm.selectedList = null; vm.selectedCompany = null; vm.selectedTags = []">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>{{ \'CONTACTMANAGER.ALL_CONTACTS\' | translate }}\n                            </button>\n                        </md-card-content>\n                    </md-card>\n                    <md-card>\n                        <md-card-content>\n                            <md-input-container class="md-block" flex-gt-sm="">\n                                <label translate="CONTACTMANAGER.SELECT_LIST">Select a list</label>\n                                <md-select placeholder="Select a list" ng-model="vm.selectedList" ng-disabled="vm.lists.count === 0">\n                                    <md-option ng-value="null"><em translate="CONTACTMANAGER.ALL">All</em></md-option>\n                                    <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">{{list.name}}</md-option>\n                                </md-select>\n                            </md-input-container>\n                        </md-card-content>\n                    </md-card>\n                    <md-card>\n                        <md-card-content>\n                            <md-input-container class="md-block" flex-gt-sm="">\n                                <label translate="CONTACTMANAGER.SELECT_COMPANY">Select a company</label>\n                                <md-select placeholder="Select a company" flex="100" ng-model="vm.selectedCompany" ng-disabled="vm.companies.count === 0">\n                                    <md-option ng-value="null"><em translate="CONTACTMANAGER.ALL">All</em></md-option>\n                                    <md-option ng-value="company.id" ng-repeat="company in vm.companies.rows">{{company.name}}</md-option>\n                                </md-select>\n                            </md-input-container>\n                        </md-card-content>\n                    </md-card>\n                    <md-card>\n                        <md-card-content>\n                            <md-input-container class="md-block" flex-gt-sm="">\n                                <label translate="CONTACTMANAGER.SELECT_TAGS">Select one or more tags</label>\n                                <md-select multiple placeholder="Select one or more tags" flex="100" ng-model="vm.query.tag" ng-change="vm.getContacts()">\n                                    <md-option ng-value="tag.id" ng-repeat="tag in vm.tags.rows">{{tag.name}}</md-option>\n                                </md-select>\n                            </md-input-container>\n                        </md-card-content>\n                    </md-card>\n                </div>\n\n                \x3c!-- USER TABLE --\x3e\n                <md-card flex="80">\n                    <md-table-container ng-init="vm.getAssignedCompanies()">\n                        <table md-table md-row-select multiple ng-model="vm.selectedContacts" md-progress="vm.promise">\n                            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getContacts">\n                                <tr md-row>\n                                    <th md-column md-order-by="id">ID</th>\n                                    <th md-column md-order-by="firstName">{{\'CONTACTMANAGER.FULLNAME\' | translate}}</th>\n                                    <th md-column md-order-by="phone">{{\'CONTACTMANAGER.PHONE\' | translate}}</th>\n                                    <th md-column md-order-by="email">{{\'CONTACTMANAGER.EMAIL\' | translate}}</th>\n                                    <th md-column md-order-by="createdAt">{{\'CONTACTMANAGER.CREATED_AT\' | translate}}</th>\n                                    <th md-column md-order-by="ListId">{{\'CONTACTMANAGER.LIST\' | translate}}</th>\n                                    <th md-column md-order-by="CompanyId">{{\'CONTACTMANAGER.COMPANY\' | translate}}</th>\n                                    <th md-column md-order-by="tags">{{\'CONTACTMANAGER.TAGS\' | translate}}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row ng-hide="vm.contacts.rows.length">\n                                    <td md-cell colspan="8">\n                                        <div layout="row" layout-align="center center">\n                                            <span translate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                        </div>\n                                    </td>\n                                </tr>\n                                <tr md-row md-select="contact" md-select-id="id" ng-repeat="contact in vm.contacts.rows">\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="id">{{contact.id}}</td>\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="firstName">{{contact.firstName}} {{contact.lastName}}</td>\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="phone">{{contact.phone}}</td>\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="email">{{contact.email}}</td>\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="createdAt">{{contact.createdAt | date:\'medium\'}}</td>\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="list">{{vm.listsMap[contact.ListId]}}</td>\n                                    <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editdialog(contact, ev) : vm.createOrEditContact($event, contact)" md-cell class="company">{{vm.companiesMap[contact.CompanyId]}}</td>\n                                    <td md-cell class="tag">\n                                        <div ng-if="contact.Tags.length">\n                                            <div ng-if="contact.Tags.length == 1" layout="column" layout-align="center center">\n                                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': contact.Tags[0].color }"></md-icon>\n                                                <span class="text-truncate">{{contact.Tags[0].name}}</span>\n                                            </div>\n                                            <div ng-if="contact.Tags.length > 1" layout="column" layout-align="center center">\n                                                <md-tooltip md-direction="left" layout="row">\n                                                    <span ng-repeat="tag in contact.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                                </md-tooltip>\n                                                <md-icon md-font-icon="icon-tag"></md-icon>\n                                            </div>\n                                        </div>\n                                    </td>\n                                    <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm.editdialog(contact, ev)" translate="CONTACTMANAGER.EDIT_CONTACT">\n                                                        Edit Contact\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm.mergeContact(ev, contact)" translate="CONTACTMANAGER.MERGE_CONTACT">\n                                                        Merge Contact\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm.duplicateContact(ev, contact)" translate="CONTACTMANAGER.DUPLICATE_CONTACT">\n                                                        Duplicate Contact\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-divider ng-if="vm.crudPermissions.canEdit && vm.crudPermissions.canDelete"></md-menu-divider>\n                                                <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm.deleteconfirm(contact, ev)" translate="CONTACTMANAGER.DELETE_CONTACT">\n                                                        Delete Contact\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n\n                    <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.contacts.count}}" md-on-paginate="vm.getContacts" md-page-select></md-table-pagination>\n                </md-card>\n                \x3c!-- / USER TABLE --\x3e\n            </div>\n        </div>\n        \x3c!-- / MAIN --\x3e\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD USER BUTTON --\x3e\n    <md-fab-speed-dial id="add-contact-button" ng-if="vm.crudPermissions.canEdit" ng-hide="vm.options.hidden" md-direction="up" md-open="vm.options.isOpen" class="md-scale md-fab" ng-class="{ \'md-hover-full\': vm.options.hover }" ng-mouseenter="vm.options.isOpen=true" ng-mouseleave="vm.options.isOpen=false">\n        <md-fab-trigger>\n            <md-button aria-label="menu" class="md-fab md-accent">\n                <md-icon md-font-icon="icon-plus"></md-icon>\n            </md-button>\n        </md-fab-trigger>\n        <md-fab-actions>\n            <md-button class="md-fab md-mini md-warn" flow-btn flow-init="vm.ngFlowOptions" flow-files-submitted="$flow.upload()" flow-file-success="vm.importContacts($file, $message, $flow)" flow-file-added="vm.fileAdded($file)" aria-label="Select File" translate translate-attr-aria-label="CONTACTMANAGER.IMPORT_CONTACTS">\n                <md-tooltip md-direction="left" md-visible="tooltipVisible" md-autohide="false">\n                    {{\'CONTACTMANAGER.IMPORT_CONTACTS\' | translate}}\n                </md-tooltip>\n                <md-icon md-font-icon="icon-upload"></md-icon>\n            </md-button>\n            <md-button class="md-fab md-mini md-accent" ng-click="vm.createOrEditContact($event)" aria-label="add contact" translate translate-attr-aria-label="CONTACTMANAGER.ADD_CONTACT">\n                <md-tooltip md-direction="left" md-visible="tooltipVisible" md-autohide="false">\n                    {{\'CONTACTMANAGER.ADD_CONTACT\' | translate}}\n                </md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </md-fab-actions>\n    </md-fab-speed-dial>\n    \x3c!-- / ADD USER BUTTON --\x3e\n</div>'),e.put("app/main/apps/contactmanager/views/contacts/create/dialog.html",'<md-dialog class="cm-contact-dialog" aria-label="New Contact">\n    <form name="contactForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.FIRSTNAME">First name</label>\n                <input name="firstName" ng-model="vm.contact.firstName" required md-autofocus>\n\n                <div ng-messages="contactForm.firstName.$error" ng-show="contactForm.firstName.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.FIRSTNAME_REQUIRED">First name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.LASTNAME">Last name</label>\n                <input name="lastName" ng-model="vm.contact.lastName">\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.PHONE">Phone</label>\n                <input name="phone" ng-model="vm.contact.phone">\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.EMAIL">Email</label>\n                <input name="email" type="email" ng-model="vm.contact.email">\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.MOBILE">Mobile</label>\n                <input name="mobile" ng-model="vm.contact.mobile">\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.FAX">Fax</label>\n                <input name="fax" ng-model="vm.contact.fax">\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.LIST">List</label>\n                <md-select name="list" ng-model="vm.contact.ListId" ng-disabled="vm.contact.id && vm.contact.ListId" ng-init="vm.getCustomFields(vm.contact.ListId)" ng-change="vm.getCustomFields(vm.contact.ListId)" required>\n                    <md-optgroup label="Lists">\n                        <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">{{list.name}}</md-option>\n                        <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                    </md-optgroup>\n                </md-select>\n\n                <div ng-messages="contactForm.list.$error" ng-show="contactForm.list.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div ng-repeat="customField in vm.customFields.rows" class="md-block" ng-switch="customField.type">\n                <div ng-switch-when="datetime">\n                    <label>{{customField.alias}}</label>\n\n                    <div ng-init="vm.contact[\'cf_\' + customField.id] = vm.getDateFromString(vm.contact[\'cf_\' + customField.id])">\n                        <mdp-date-picker mdp-open-on-click ng-required="customField.required" mdp-format="YYYY-MM-DD" ng-model="vm.contact[\'cf_\' + customField.id]"></mdp-date-picker>\n                        <mdp-time-picker mdp-open-on-click mdp-placeholder="Time" ng-required="customField.required" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.contact[\'cf_\' + customField.id]"></mdp-time-picker>\n                    </div>\n                </div>\n\n                <div ng-switch-when="select">\n                    <label>{{customField.alias}}</label>\n\n                    <md-select ng-model="vm.contact[\'cf_\' + customField.id]" ng-required="customField.required">\n                        <md-option ng-repeat="value in customField.values" ng-value="value.value">{{value.value}}</md-option>\n                        <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                    </md-select>\n                </div>\n\n                <div ng-switch-when="switch">\n                    <md-switch aria-label="{{customField.alias}}" ng-model="vm.contact[\'cf_\' + customField.id]" ng-true-value="1" ng-false-value="0">\n                        {{customField.alias}}\n                    </md-switch>\n                </div>\n\n                <md-input-container ng-switch-default>\n                    <label>{{customField.alias}}</label>\n\n                    <input type="{{customField.type}}" ng-model="vm.contact[\'cf_\' + customField.id]" ng-required="customField.required">\n                </md-input-container>\n            </div>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.COMPANY">Company</label>\n                <md-select name="company" ng-model="vm.contact.CompanyId">\n                    <md-option ng-value="company.id" ng-repeat="company in vm.companies.rows" ng-hide="!vm.contact.CompanyId && company.canSelect === false" ng-disabled="company.canSelect === false">{{company.name}}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <div ng-if="!vm.allFields" layout="row" layout-align="center center">\n                <md-button class="md-accent" ng-click="vm.allFields = true" translate="CONTACTMANAGER.SHOW_ALL_FIELDS">Show All Fields</md-button>\n            </div>\n\n            <md-input-container class="md-block" ng-if="vm.allFields" flex-gt-sm="" ng-init="vm.contact.dateOfBirth = vm.getDateFromString(vm.contact.dateOfBirth)">\n                <label translate="CONTACTMANAGER.DATE_OF_BIRTH">Date of Birth</label>\n                <mdp-date-picker mdp-open-on-click mdp-format="YYYY-MM-DD" name="dateOfBirth" ng-model="vm.contact.dateOfBirth"></mdp-date-picker>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.allFields">\n                <label translate="CONTACTMANAGER.COUNTRY">Country</label>\n                <input type="text" name="country" ng-model="vm.contact.country">\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.allFields">\n                <label translate="CONTACTMANAGER.CITY">City</label>\n                <input type="text" name="city" ng-model="vm.contact.city">\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.allFields">\n                <label translate="CONTACTMANAGER.STREET">Street</label>\n                <input type="text" name="street" ng-model="vm.contact.street">\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.allFields">\n                <label translate="CONTACTMANAGER.POSTAL_CODE">Postal Code</label>\n                <input type="text" name="postalCode" ng-model="vm.contact.postalCode">\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.allFields">\n                <label translate="CONTACTMANAGER.NOTES">Notes</label>\n                <input type="text" name="description" ng-model="vm.contact.description">\n            </md-input-container>\n\n            <div ng-if="vm.allFields" layout="row" layout-align="center center">\n                <md-button class="md-accent" ng-click="vm.allFields = false" translate="CONTACTMANAGER.FEWER_FIELDS">Fewer Fields</md-button>\n            </div>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-if="!vm.newContact" ng-click="vm.saveContact()" class="send-button md-accent md-raised" ng-disabled="contactForm.$invalid || contactForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newContact" ng-click="vm.addNewContact()" class="send-button md-accent md-raised" ng-disabled="contactForm.$invalid || contactForm.$pristine" aria-label="ADD" translate="CONTACTMANAGER.ADD_CONTACT" translate-attr-aria-label="CONTACTMANAGER.ADD_CONTACT">\n                    ADD CONTACT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newContact" ng-click="vm.deleteContact($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",'<md-dialog class="cm-contact-dialog" aria-label="{{ \'CONTACTMANAGER.DUPLICATE_CONTACT\' | translate }}">\n    <form name="contactForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.LIST">List</label>\n                <md-select name="list" ng-model="vm.contact.ListId">\n                    <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">{{list.name}}</md-option>\n                </md-select>\n\n                <div ng-messages="contactForm.list.$error" ng-show="contactForm.list.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.addNewContact()" class="send-button md-accent md-raised" ng-disabled="contactForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_CONTACT" translate-attr-aria-label="CONTACTMANAGER.ADD_CONTACT">\n                    ADD CONTACT\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/contacts/edit/hoppers/dialog.html",'<md-dialog class="hopper-dialog" aria-label="New Hopper">\n    <form name="hopperForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div flex class="md-block">\n                <mdp-date-picker mdp-open-on-click name="scheduledatDate" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" ng-model="vm.hopper.scheduledat" ng-init="vm.hopper.scheduledat = vm.getDateFromString(vm.hopper.scheduledat)">\n                    <div ng-messages="hopperForm.dateRangeFrom.$error" ng-show="hopperForm.dateRangeFrom.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="CONTACTMANAGER.ERRORS.DATE_REQUIRED">Date is required</span>\n                        </div>\n                        <div ng-message="format">\n                            <span translate="CONTACTMANAGER.ERRORS.DATE_INVALID">Date is invalid</span>\n                        </div>\n                    </div>\n                </mdp-date-picker>\n            </div>\n\n            <div flex class="md-block">\n                <mdp-time-picker mdp-open-on-click name="scheduledatTime" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.hopper.scheduledat" ng-init="vm.hopper.scheduledat = vm.getDateFromString(vm.hopper.scheduledat)">\n                    <div ng-messages="hopperForm.timeRangeFrom.$error" ng-show="hopperForm.timeRangeFrom.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="CONTACTMANAGER.ERRORS.TIME_REQUIRED">Time is required</span>\n                        </div>\n                        <div ng-message="format">\n                            <span translate="CONTACTMANAGER.ERRORS.TIME_INVALID">Time is invalid</span>\n                        </div>\n                    </div>\n                </mdp-time-picker>\n            </div>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-if="!vm.newHopper" ng-click="vm.saveHopper()" class="send-button md-accent md-raised" ng-disabled="hopperForm.$invalid || hopperForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newHopper" ng-click="vm.addNewHopper()" class="send-button md-accent md-raised" ng-disabled="hopperForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_HOPPER" translate-attr-aria-label="CONTACTMANAGER.ADD_HOPPER">\n                    ADD HOPPER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="!vm.newHopper" ng-click="vm.deleteHopper($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/contacts/edit/view.html",'<div id="cm-contact" class="page-layout simple tabbed" layout="column" ng-init="vm.onInit()">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-contacts-button md-icon-button" aria-label="Go to contacts" ng-click="vm.gotoContacts()" translate translate-attr-aria-label="CONTACTMANAGER.GO_TO_CONTACTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="contact-image" hide-xs>\n                    <img ng-src="assets/images/business/contacts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.contact.id}} {{vm.contact.firstName}} {{vm.contact.lastName}}\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="CONTACTMANAGER.CREATED_AT"></span> <span>{{vm.contact.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-if="vm.contact.role && vm.contact.role !== \'admin\'" ng-controller="ContactQueueAddButtonController as vm_contact_qa" ng-cloak>\n            <md-fab-speed-dial ng-hide="vm_contact_qa.hidden" md-direction="left" md-open="vm_contact_qa.isOpen" class="md-scale md-fab" ng-class="{ \'md-hover-full\': vm_contact_qa.hover }" ng-mouseenter="vm_contact_qa.isOpen=true" ng-mouseleave="vm_contact_qa.isOpen=false">\n                <md-fab-trigger>\n                    <md-button aria-label="menu" class="md-fab md-primary md-icon-button">\n                        <md-tooltip md-direction="top" md-visible="tooltipVisible">Channels</md-tooltip>\n                        <md-icon md-font-icon="icon-eye" aria-label="channels"></md-icon>\n                    </md-button>\n                </md-fab-trigger>\n                <md-fab-actions>\n                    <div ng-repeat="channel in vm_contact_qa.channels">\n                        <md-button aria-label="{{channel.name}}" class="md-fab md-raised md-icon-button md-mini" ng-click="vm_contact_qa.openDialog($event, vm.contact, channel)">\n                            <md-tooltip md-direction="{{channel.direction}}" md-visible="tooltipVisible" md-autohide="false">\n                                {{channel.name}}\n                            </md-tooltip>\n                            <md-icon md-font-icon="{{channel.icon}}" aria-label="{{channel.name}}"></md-icon>\n                        </md-button>\n                    </div>\n                </md-fab-actions>\n            </md-fab-speed-dial>\n        </div>\n\n        <div ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.duplicateContact($event)" class="md-fab md-warn md-icon-button" aria-label="DUPLICATE">\n                <md-icon md-font-icon="icon-file-multiple"></md-icon>\n            </md-button>\n            <md-button type="submit" ng-click="vm.saveContact()" class="send-button md-accent md-raised" ng-disabled="detailForm.$pristine && customFieldsForm.$pristine && socialForm.$pristine" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                SAVE\n            </md-button>\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.DETAIL">DETAIL</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div layout="row">\n                        <div layout="column" flex="70">\n                            <md-card class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp">\n                                <div class="pb-16" layout="row" layout-align="start center">\n                                    <div class="h2 secondary-text text-truncate" translate="CONTACTMANAGER.PERSONAL_INFO">PERSONAL_INFO</div>\n                                </div>\n                                <form name="detailForm" novalidate>\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        \x3c!-- fistName --\x3e\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.FIRSTNAME">First Name</label>\n                                            <md-icon md-font-icon="icon-account" class="firstname"></md-icon>\n                                            <input type="text" name="firstName" ng-model="vm.contact.firstName" class="text-truncate" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                            <div ng-messages="detailForm.firstName.$error" ng-show="detailForm.firstName.$touched" role="alert">\n                                                <div ng-message="required">\n                                                    <span translate="CONTACTMANAGER.ERRORS.FIRSTNAME_REQUIRED">First name field is required</span>\n                                                </div>\n                                            </div>\n                                        </md-input-container>\n                                        <div flex="5"></div>\n                                        \x3c!-- lastName --\x3e\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.LASTNAME">Last Name</label>\n                                            <input type="text" name="lastName" ng-model="vm.contact.lastName" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                        </md-input-container>\n\n                                    </div>\n\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        \x3c!-- phone --\x3e\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.PHONE">Phone</label>\n                                            <md-icon md-font-icon="icon-phone"></md-icon>\n                                            <input type="text" name="phone" ng-model="vm.contact.phone" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                        </md-input-container>\n                                        <div flex="5"></div>\n                                        \x3c!-- mobile --\x3e\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.MOBILE">Mobile</label>\n                                            <md-icon md-font-icon="icon-cellphone-iphone"></md-icon>\n                                            <input type="text" name="mobile" ng-model="vm.contact.mobile" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                        </md-input-container>\n                                    </div>\n\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        \x3c!-- email --\x3e\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.EMAIL">Email</label>\n                                            <md-icon md-font-icon="icon-email" class="email"></md-icon>\n                                            <input type="email" name="email" ng-model="vm.contact.email" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                            <div ng-messages="detailForm.firstName.$error" ng-show="detailForm.firstName.$touched" role="alert">\n                                                <div ng-message="email">\n                                                    <span translate="CONTACTMANAGER.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                                </div>\n                                            </div>\n                                        </md-input-container>\n                                        <div flex="5"></div>\n                                        \x3c!-- fax --\x3e\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.FAX">Fax</label>\n                                            <md-icon md-font-icon="icon-deskphone"></md-icon>\n                                            <input type="text" name="fax" ng-model="vm.contact.fax" ng-disabled="!vm.crudPermissions.canEdit">\n                                        </md-input-container>\n                                    </div>\n\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        <md-input-container class="md-block" flex-gt-sm="" ng-init="vm.contact.dateOfBirth = vm.getDateFromString(vm.contact.dateOfBirth)">\n                                            <label translate="CONTACTMANAGER.DATE_OF_BIRTH">Date of Birth</label>\n                                            <mdp-date-picker mdp-open-on-click mdp-format="YYYY-MM-DD" name="dateOfBirth" ng-model="vm.contact.dateOfBirth" mdp-disabled="!vm.crudPermissions.canEdit"></mdp-date-picker>\n                                        </md-input-container>\n                                    </div>\n\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        <md-input-container ng-if="vm.companies.rows.length" class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.COMPANY">Company</label>\n                                            <md-icon md-font-icon="icon-domain"></md-icon>\n                                            <md-select name="company" ng-model="vm.contact.CompanyId" ng-disabled="!vm.crudPermissions.canEdit">\n                                                <md-optgroup label="Companies">\n                                                    <md-option ng-value="company.id" ng-repeat="company in vm.companies.rows" ng-disabled="company.canSelect === false"">{{company.name}}</md-option>\n                                                <md-option ng-value=" null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                                                </md-optgroup>\n                                            </md-select>\n                                            <md-icon class="pointer" ng-show="vm.contact.CompanyId" md-font-icon="icon-information-outline" ng-click="vm.editCompany($event, vm.contact.CompanyId)"></md-icon>\n                                        </md-input-container>\n                                        <section ng-if="!vm.companies.rows.length" flex-gt-sm="">\n                                            <md-icon md-font-icon="icon-briefcase"></md-icon>\n                                            <label translate="CONTACTMANAGER.NO_COMPANIES">No Companies</label>\n                                        </section>\n                                    </div>\n\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        <md-input-container ng-if="vm.tags.rows.length" class="md-block" flex-gt-sm="">\n                                            <label translate="CONTACTMANAGER.TAGS">Tags</label>\n                                            <md-icon md-font-icon="icon-tag"></md-icon>\n                                            <md-select ng-model="vm.Tags" multiple ng-disabled="!vm.crudPermissions.canEdit">\n                                                <md-optgroup label="Tags">\n                                                    <md-option ng-value="tag.id" ng-repeat="tag in vm.tags.rows" ng-disabled="tag.canSelect === false">{{tag.name}}</md-option>\n                                                </md-optgroup>\n                                            </md-select>\n                                        </md-input-container>\n                                        <section ng-if="!vm.tags.rows.length" flex-gt-sm="">\n                                            <md-icon md-font-icon="icon-tag"></md-icon>\n                                            <label translate="CONTACTMANAGER.NO_TAG">No Tags</label>\n                                            <md-button class="md-accent" translate="CONTACTMANAGER.ADD_TAG">Add Tag</md-button>\n                                        </section>\n                                    </div>\n\n                                    <div ng-if="!vm.allFields" layout="row" layout-align="center center">\n                                        <md-button class="md-accent" ng-click="vm.allFields = true" translate="CONTACTMANAGER.SHOW_ALL_FIELDS">Show All Fields</md-button>\n                                    </div>\n\n                                    <div ng-if="vm.allFields">\n                                        <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                            \x3c!-- country --\x3e\n                                            <md-input-container class="md-block" flex-gt-sm="">\n                                                <label translate="CONTACTMANAGER.COUNTRY">Country</label>\n                                                <md-icon md-font-icon="icon-home" class="country"></md-icon>\n                                                <input type="text" name="country" ng-model="vm.contact.country" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                            </md-input-container>\n                                            <div flex="5"></div>\n                                            \x3c!-- city --\x3e\n                                            <md-input-container class="md-block" flex-gt-sm="">\n                                                <label translate="CONTACTMANAGER.CITY">City</label>\n                                                <input type="text" name="city" ng-model="vm.contact.city" ng-disabled="!vm.crudPermissions.canEdit">\n                                            </md-input-container>\n                                        </div>\n\n                                        <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                            <div flex="5"></div>\n                                            \x3c!-- street --\x3e\n                                            <md-input-container class="md-block" flex-gt-sm="">\n                                                <label translate="CONTACTMANAGER.STREET">Street</label>\n                                                <input type="text" name="street" ng-model="vm.contact.street" ng-disabled="!vm.crudPermissions.canEdit">\n                                            </md-input-container>\n                                            <div flex="5"></div>\n                                            \x3c!-- postalCode --\x3e\n                                            <md-input-container class="md-block" flex-gt-sm="">\n                                                <label translate="CONTACTMANAGER.POSTALCODE">Postal Code</label>\n                                                <input type="text" name="postalCode" ng-model="vm.contact.postalCode" ng-disabled="!vm.crudPermissions.canEdit">\n                                            </md-input-container>\n                                        </div>\n\n                                        <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                            <md-input-container class="md-block" flex-gt-sm="">\n                                                <label translate translate-attr-placeholder="CONTACTMANAGER.NOTES">Notes</label>\n                                                <md-icon md-font-icon="icon-note"></md-icon>\n                                                <textarea ng-model="vm.contact.description" type="text" max-rows="4" ng-disabled="!vm.crudPermissions.canEdit"></textarea>\n                                            </md-input-container>\n                                        </div>\n\n                                        <div layout="row" layout-align="center center">\n                                            <md-button class="md-accent" ng-click="vm.allFields = false" translate="CONTACTMANAGER.FEWER_FIELDS">Fewer Fields\n                                            </md-button>\n                                        </div>\n\n                                    </div>\n                                </form>\n                            </md-card>\n                            <md-card class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp">\n                                <div class="pb-16" layout="row" layout-align="start center">\n                                    <div class="h2 secondary-text text-truncate" translate="CONTACTMANAGER.SOCIAL">Social</div>\n                                </div>\n                                <form name="socialForm" novalidate>\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>Facebook</label>\n                                            <md-icon md-font-icon="icon-facebook" class="facebook"></md-icon>\n                                            <input type="text" name="facebook" ng-model="vm.contact.facebook" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                        </md-input-container>\n                                        <div flex="5"></div>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>Twitter</label>\n                                            <md-icon md-font-icon="icon-twitter" class="twitter"></md-icon>\n                                            <input type="text" name="twitter" ng-model="vm.contact.twitter" class="text-truncate" ng-disabled="!vm.crudPermissions.canEdit">\n                                        </md-input-container>\n                                    </div>\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>Line</label>\n                                            <md-icon md-font-icon="fab fa-line"></md-icon>\n                                            <input type="text" name="line" ng-model="vm.contact.line" class="text-truncate">\n                                        </md-input-container>\n                                        <div flex="5"></div>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>Viber</label>\n                                            <md-icon md-font-icon="fab fa-viber"></md-icon>\n                                            <input type="text" name="viber" ng-model="vm.contact.viber" class="text-truncate">\n                                        </md-input-container>\n                                    </div>\n                                    <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>WeChat</label>\n                                            <md-icon md-font-icon="fab fa-weixin"></md-icon>\n                                            <input type="text" name="wechat" ng-model="vm.contact.wechat" class="text-truncate">\n                                        </md-input-container>\n                                        <div flex="5"></div>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label>Telegram</label>\n                                            <md-icon md-font-icon="icon-telegram"></md-icon>\n                                            <input type="text" name="telegram" ng-model="vm.contact.telegram" class="text-truncate">\n                                        </md-input-container>\n                                    </div>\n                                </form>\n                            </md-card>\n                        </div>\n\n                        <div flex></div>\n\n                        <div class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp" flex="25">\n                            <div class="pb-16" layout="row" layout-align="start center">\n                                <div class="h2 secondary-text text-truncate" translate="CONTACTMANAGER.CUSTOM_FIELDS">CUSTOM FIELDS</div>\n                            </div>\n                            <form name="customFieldsForm" novalidate>\n                                <md-input-container class="md-block">\n                                    <label translate translate-attr-placeholder="CONTACTMANAGER.LIST">List</label>\n                                    <md-select name="list" ng-model="vm.contact.ListId" md-on-close="vm.onSelectList($event)" ng-disabled="vm.contact.ListId">\n                                        <md-optgroup label="Lists">\n                                            <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">#{{list.id}} - {{list.name}}</md-option>\n                                            <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                                        </md-optgroup>\n                                    </md-select>\n                                </md-input-container>\n                                <div ng-repeat="customField in vm.customFields.rows" ng-switch="customField.type">\n                                    <md-input-container class="md-block" ng-switch-when="datetime">\n                                        <label>{{customField.alias}}</label>\n                                        <div ng-init="vm.contact[\'cf_\' + customField.id] = vm.getDateFromString(vm.contact[\'cf_\' + customField.id])">\n                                            <mdp-date-picker mdp-open-on-click ng-required="customField.required" mdp-format="YYYY-MM-DD" ng-model="vm.contact[\'cf_\' + customField.id]"></mdp-date-picker>\n                                            <mdp-time-picker mdp-open-on-click mdp-placeholder="Time" ng-required="customField.required" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.contact[\'cf_\' + customField.id]"></mdp-time-picker>\n                                        </div>\n                                    </md-input-container>\n\n                                    <md-input-container class="md-block" ng-switch-when="select">\n                                        <label>{{customField.alias}}</label>\n                                        <md-select ng-model="vm.contact[\'cf_\' + customField.id]" ng-required="customField.required" ng-disabled="!vm.crudPermissions.canEdit">\n                                            <md-option ng-repeat="value in customField.values" ng-value="value.value">{{value.value}}</md-option>\n                                            <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                                        </md-select>\n                                    </md-input-container>\n\n                                    <md-input-container class="md-block" ng-switch-when="switch">\n                                        <md-switch aria-label="{{customField.alias}}" ng-model="vm.contact[\'cf_\' + customField.id]" ng-true-value="1" ng-false-value="0">\n                                            {{customField.alias}}\n                                        </md-switch>\n                                    </md-input-container>\n\n                                    <md-input-container class="md-block" ng-switch-default>\n                                        <label>{{customField.alias}}</label>\n                                        <input type="{{customField.type}}" ng-model="vm.contact[\'cf_\' + customField.id]" ng-required="customField.required" ng-disabled="!vm.crudPermissions.canEdit">\n                                    </md-input-container>\n                                </div>\n                            </form>\n                        </div>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n\n            <md-tab ng-if="vm.license.dialer">\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.MOTION_BULL">MOTION BULL</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div layout="row">\n                        <div class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp" flex>\n                            <md-toolbar class="md-table-toolbar md-default">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="CONTACTMANAGER.HOPPER">Hopper</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm.queryHopper.filter = query;" on-collapse="vm.queryHopper.filter = undefined;" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm.getHoppers()" aria-label="reload" translate translate-attr-label="CONTACTMANAGER.RELOAD">\n                                        <md-tooltip>{{\'CONTACTMANAGER.RELOAD\' | translate}}</md-tooltip>\n                                        <md-icon md-font-icon="icon-reload"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n\n                            \x3c!-- HOPPER TABLE --\x3e\n                            <md-table-container>\n                                <table md-table multiple md-progress="vm.promise">\n                                    <thead md-head md-order="vm.queryHopper.sort" md-on-reorder="vm.getHoppers">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                            <th md-column md-order-by="phone">{{ \'CONTACTMANAGER.PHONE\' | translate }}</th>\n                                            <th md-column md-order-by="scheduledat">{{ \'CONTACTMANAGER.SCHEDULEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="priority">{{ \'MOTIONDIALER.PRIORITY\' | translate }}</th>\n                                            <th md-column md-order-by="scheduledat">{{ \'CONTACTMANAGER.SCHEDULEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="VoiceQueueId">{{ \'CONTACTMANAGER.VOICEQUEUEID\' | translate }}</th>\n                                            <th md-column md-order-by="CampaignId">{{ \'CONTACTMANAGER.CAMPAIGNID\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row ng-hide="vm.hoppers.count">\n                                            <td md-cell colspan="4">\n                                                <div layout="row" layout-align="center center">\n                                                    <span translate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                                </div>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-repeat="(id, hopper) in vm.hoppers.rows">\n                                            <td md-cell>{{hopper.id}}</td>\n                                            <td md-cell>{{hopper.phone}}</td>\n                                            <td md-cell>{{hopper.scheduledat | date:\'medium\'}}</td>\n                                            <td md-cell>{{ vm.arraypriority[hopper.priority].option }}</td>\n                                            <td md-cell class="recallme ">\n                                                <md-icon md-colors="{color: {{hopper.recallme ? \'\\\'green\\\'\' : \'\\\'red\\\'\'}}}" md-font-icon="{{hopper.recallme? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                            </td>\n                                            <td md-cell>{{hopper.VoiceQueueId}}</td>\n                                            <td md-cell>{{hopper.CampaignId}}</td>\n                                            <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="2">\n                                                        <md-menu-item>\n                                                            <md-button ng-if="vm.crudPermissions.canEdit && hopper.VoiceQueueId" ng-click="vm.editHopper($event, hopper)" translate="CONTACTMANAGER.EDIT_HOPPER">\n                                                                Edit Hopper\n                                                            </md-button>\n                                                            <md-button ng-if="vm.crudPermissions.canEdit && hopper.CampaignId" ng-click="vm.createOrEditIvrCampaignHopper($event, hopper)" translate="CONTACTMANAGER.EDIT_HOPPER">\n                                                                Edit Hopper\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm.crudPermissions.canDelete && vm.deleteconfirm(hopper, $event)" translate="CONTACTMANAGER.DELETE_HOPPER">\n                                                                Delete Hopper\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n\n                            <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.queryHopper.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.queryHopper.page" md-total="{{vm.hoppers.count}}" md-on-paginate="vm.getHoppers" md-page-select></md-table-pagination>\n                            \x3c!-- / HOPPER TABLE --\x3e\n                        </div>\n                    </div>\n\n                    <div layout="row">\n                        <div class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp" flex>\n                            <md-toolbar class="md-table-toolbar md-default">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="CONTACTMANAGER.FINAL">Final</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm.queryFinal.filter = query;" on-collapse="vm.queryFinal.filter = undefined;" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm.getFinals()" aria-label="reload" translate translate-attr-label="CONTACTMANAGER.RELOAD">\n                                        <md-tooltip>{{\'CONTACTMANAGER.RELOAD\' | translate}}</md-tooltip>\n                                        <md-icon md-font-icon="icon-reload"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n\n                            \x3c!-- HOPPER TABLE --\x3e\n                            <md-table-container>\n                                <table md-table multiple md-progress="vm.promise">\n                                    <thead md-head md-order="vm.queryFinal.sort" md-on-reorder="vm.getFinals">\n                                        <tr md-row>\n                                            <th md-column md-order-by="uniqueid">{{ \'CONTACTMANAGER.UNIQUEID\' | translate }}</th>\n                                            <th md-column md-order-by="calleridnum">{{ \'CONTACTMANAGER.PHONE\' | translate }}</th>\n                                            <th md-column md-order-by="state">{{ \'CONTACTMANAGER.STATE\' | translate }}</th>\n                                            <th md-column md-order-by="starttime">{{ \'CONTACTMANAGER.STARTTIME\' | translate }}</th>\n                                            <th md-column md-order-by="disposition">{{ \'CONTACTMANAGER.DISPOSITION\' | translate }}</th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row ng-hide="vm.finals.count">\n                                            <td md-cell colspan="5">\n                                                <div layout="row" layout-align="center center">\n                                                    <span translate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                                </div>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-repeat="(id, final) in vm.finals.rows">\n                                            <td md-cell>{{final.uniqueid}}</td>\n                                            <td md-cell>{{final.calleridnum}}</td>\n                                            <td md-cell>{{final.statedesc}}</td>\n                                            <td md-cell>{{final.starttime | date:\'medium\'}}</td>\n                                            <td md-cell>{{final.disposition}}</td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n\n                            <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.queryFinal.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.queryFinal.page" md-total="{{vm.finals.count}}" md-on-paginate="vm.getFinals" md-page-select></md-table-pagination>\n                            \x3c!-- / HOPPER TABLE --\x3e\n                        </div>\n                    </div>\n\n                    <div layout="row">\n                        <div class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp" flex>\n                            <md-toolbar class="md-table-toolbar md-default">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="CONTACTMANAGER.HISTORY">History</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm.queryHistory.filter = query;" on-collapse="vm.queryHistory.filter = undefined;" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm.getHistories()" aria-label="reload" translate translate-attr-label="CONTACTMANAGER.RELOAD">\n                                        <md-tooltip>{{\'CONTACTMANAGER.RELOAD\' | translate}}</md-tooltip>\n                                        <md-icon md-font-icon="icon-reload"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n\n                            \x3c!-- HOPPER TABLE --\x3e\n                            <md-table-container>\n                                <table md-table multiple md-progress="vm.promise">\n                                    <thead md-head md-order="vm.queryHistory.sort" md-on-reorder="vm.getHistories">\n                                        <tr md-row>\n                                            <th md-column md-order-by="uniqueid">{{ \'CONTACTMANAGER.UNIQUEID\' | translate }}</th>\n                                            <th md-column md-order-by="calleridnum">{{ \'CONTACTMANAGER.PHONE\' | translate }}</th>\n                                            <th md-column md-order-by="state">{{ \'CONTACTMANAGER.STATE\' | translate }}</th>\n                                            <th md-column md-order-by="scheduledat">{{ \'CONTACTMANAGER.SCHEDULEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="starttime">{{ \'CONTACTMANAGER.STARTTIME\' | translate }}</th>\n                                            <th md-column md-order-by="endtime">{{ \'CONTACTMANAGER.ENDTIME\' | translate }}</th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row ng-hide="vm.histories.count">\n                                            <td md-cell colspan="7">\n                                                <div layout="row" layout-align="center center">\n                                                    <span translate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                                </div>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-repeat="(id, history) in vm.histories.rows">\n                                            <td md-cell>{{history.uniqueid}}</td>\n                                            <td md-cell>{{history.calleridnum}}</td>\n                                            <td md-cell>{{history.statedesc}}</td>\n                                            <td md-cell>{{history.scheduledat | date:\'medium\'}}</td>\n                                            <td md-cell>{{history.starttime | date:\'medium\'}}</td>\n                                            <td md-cell>{{history.endtime | date:\'medium\'}}</td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n\n                            <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.queryHistory.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.queryHistory.page" md-total="{{vm.histories.count}}" md-on-paginate="vm.getHistories" md-page-select></md-table-pagination>\n                            \x3c!-- / HOPPER TABLE --\x3e\n                        </div>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n\n            <md-tab ng-if="vm.license.jscripty">\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.JSCRIPTY">JSCRIPTY</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div layout="row">\n                        <div class="contact-detail-form-container personal_info md-background-bg md-whiteframe-1dp" flex>\n                            <md-toolbar class="md-table-toolbar md-default">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="CONTACTMANAGER.SESSIONS">Sessions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm.queryJscriptySession.filter = query;" on-collapse="vm.queryJscriptySession.filter = undefined;" debounce="300"></ms-search-bar>\n                                </div>\n                            </md-toolbar>\n\n                            \x3c!-- SESSION TABLE --\x3e\n                            <md-table-container>\n                                <table md-table multiple md-progress="vm.promise">\n                                    <thead md-head md-order="vm.queryJscriptySession.sort" md-on-reorder="vm.getJscriptySessions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                            <th md-column md-order-by="starttime">{{ \'CONTACTMANAGER.STARTTIME\' | translate }}</th>\n                                            <th md-column md-order-by="endtime">{{ \'CONTACTMANAGER.ENDTIME\' | translate }}</th>\n                                            <th md-column md-order-by="agent">{{ \'CONTACTMANAGER.AGENT\' | translate }}</th>\n                                            <th md-column md-order-by="project">{{ \'CONTACTMANAGER.PROJECT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row ng-hide="vm.jscriptySessions.count">\n                                            <td md-cell colspan="6">\n                                                <div layout="row" layout-align="center center">\n                                                    <span translate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                                </div>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-repeat="(id, session) in vm.jscriptySessions.rows">\n                                            <td md-cell>{{session.id}}</td>\n                                            <td md-cell>{{session.starttime | date:\'medium\'}}</td>\n                                            <td md-cell>{{session.endtime | date:\'medium\'}}</td>\n                                            <td md-cell>{{session.membername}}</td>\n                                            <td md-cell>{{session.projectname}}</td>\n                                            <td md-cell class="actions"></td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n\n                            <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.queryHopper.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.queryHopper.page" md-total="{{vm.hoppers.count}}" md-on-paginate="vm.getHoppers" md-page-select></md-table-pagination>\n                            \x3c!-- / SESSION TABLE --\x3e\n                        </div>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.CUSTOMER_JOURNEY">CUSTOMER JOURNEY</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <md-content class="md-padding" id="interaction-content">\n                        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.html\'"></div>\n                    </md-content>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/contactmanager/views/contacts/import/import.html",'<md-dialog class="import-dialog" aria-label="Import contact">\n    <form name="importForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="CONTACTMANAGER.IMPORT_CONTACTS">Import Contacts</span>\n                <md-button ng-if="vm.result.finish || !vm.processing" class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <div md-background-bg layout="row" layout-align="start start">\n            <md-progress-linear ng-disabled="!vm.processing || vm.result.finish" md-mode="indeterminate" class="md-warn"></md-progress-linear>\n        </div>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div>\n                <md-content ng-show="!vm.processing">\n                    <div class="form-title" translate="CONTACTMANAGER.CONTACTMANAGER">CONTACT MANAGER</div>\n\n                    <md-input-container class="md-icon-float md-block" ng-repeat="contactField in vm.contactFields">\n                        <label>{{\'CONTACTMANAGER.\' + contactField.key | uppercase | translate}}</label>\n                        <md-select name="{{contactField.key}}" ng-model="vm.binding[contactField.key]" placeholder="{{\'CONTACTMANAGER.\' + contactField.key | uppercase | translate}}" ng-required="contactField.required">\n                            <md-option ng-value="field" ng-repeat="field in vm.fields">{{ field }}</md-option>\n                            <md-option ng-value="null" ng-hide="contactField.required">\n                                <em>{{ \'CONTACTMANAGER.NONE\' | translate }}</em>\n                            </md-option>\n                        </md-select>\n                    </md-input-container>\n\n                    <md-input-container class="md-icon-float md-block">\n                        <label translate="CONTACTMANAGER.LIST">List</label>\n                        <md-select name="list" ng-model="vm.ListId" placeholder="Select a list" ng-change="vm.onChangeList()" required>\n                            <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">{{list.name}}</md-option>\n                        </md-select>\n                    </md-input-container>\n\n                    <md-input-container class="md-icon-float md-block" ng-repeat="customField in vm.customFields.rows">\n                        <label>{{customField.alias}}</label>\n                        <md-select ng-model="vm.binding[\'cf_\' + customField.id]" placeholder="{{customField.alias}}" ng-required="customField.required">\n                            <md-option ng-value="field" ng-repeat="field in vm.fields">{{ field }}</md-option>\n                            <md-option ng-value="null" ng-hide="customField.required">\n                                <em>{{ \'CONTACTMANAGER.NONE\' | translate }}</em>\n                            </md-option>\n                        </md-select>\n                    </md-input-container>\n\n                    <md-input-container class="md-icon-float md-block">\n                        <label translate="CONTACTMANAGER.COMPANY">Company</label>\n                        <md-select name="company" ng-model="vm.CompanyId" placeholder="Select a company">\n                            <md-option ng-value="company.id" ng-repeat="company in vm.companies.rows">{{company.name}}</md-option>\n                            <md-option ng-value="null">\n                                <em translate="CONTACTMANAGER.NONE">None</em>\n                            </md-option>\n                        </md-select>\n                    </md-input-container>\n\n                    <md-input-container class="md-icon-float md-block">\n                        <md-select ng-model="vm.duplicates" placeholder="{{ \'CONTACTMANAGER.CHECK_DUPLICATES\' | translate}}" multiple>\n                            <md-option ng-value="contactField.key" ng-repeat="contactField in vm.contactFields">{{ \'CONTACTMANAGER.\' + contactField.key | uppercase | translate}}</md-option>\n                        </md-select>\n                    </md-input-container>\n\n                    <div ng-if="vm.license.dialer">\n                        <div class="form-title" translate="CONTACTMANAGER.MOTIONDIALER">MOTION BULL</div>\n\n                        <md-input-container class="md-icon-float md-block" ng-repeat="motionBullField in vm.motionBullFields">\n                            <label>{{\'CONTACTMANAGER.\' + motionBullField.key | uppercase | translate}}</label>\n                            <md-select name="{{motionBullField.key}}" ng-model="vm.binding[motionBullField.key]" placeholder="{{\'CONTACTMANAGER.\' + motionBullField.key | uppercase | translate}}" ng-required="motionBullField.required">\n                                <md-option ng-value="field" ng-repeat="field in vm.fields">{{ field }}</md-option>\n                                <md-option ng-value="null" ng-hide="contactField.required">\n                                    <em>{{ \'CONTACTMANAGER.NONE\' | translate }}</em>\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n\n                </md-content>\n\n                <div class="error-list" ng-if="vm.result.finish">\n                    <div class="info" layout="row" layout-align="space-between center">\n                        <div>\n                            <div class="message">{{\'CONTACTMANAGER.UPLOAD_COMPLETED\' | translate | uppercase}} ({{vm.result.elapsed}}s)</div>\n                        </div>\n                        <md-button class="md-icon-button">\n                            <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                        </md-button>\n                    </div>\n                </div>\n\n                <div layout="row" ng-if="vm.processing">\n                    \x3c!-- WIDGET PROCESSING --\x3e\n                    <ms-widget ng-if="!vm.result.finish" class="h-140" flex>\n                        \x3c!-- Front --\x3e\n                        <ms-widget-front class="p-16 white-bg">\n                            <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                <div class="md-display-1 pb-8 orange-fg">\n                                    <span ng-bind="vm.result.rows"></span>\n                                </div>\n                                <div ng-if="vm.processing" class="font-weight-500 secondary-text">Please wait, we are processing your contacts...</div>\n                            </div>\n                        </ms-widget-front>\n                        \x3c!-- / Front --\x3e\n                    </ms-widget>\n                    \x3c!-- / WIDGET PROCESSING --\x3e\n                    \x3c!-- WIDGET SUCCESS --\x3e\n                    <ms-widget ng-if="vm.result.finish" class="h-140" flex>\n                        \x3c!-- Front --\x3e\n                        <ms-widget-front class="p-16 white-bg">\n                            <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                <div class="md-display-1 pb-8 green-fg">\n                                    <span ng-bind="vm.result.affectedRows"></span>\n                                </div>\n                                <div class="font-weight-500 secondary-text" translate="CONTACTMANAGER.SUCCESS">Success</div>\n                            </div>\n                        </ms-widget-front>\n                        \x3c!-- / Front --\x3e\n                    </ms-widget>\n                    \x3c!-- / WIDGET SUCCESS --\x3e\n\n                    \x3c!-- WIDGET FAILURE --\x3e\n                    <ms-widget ng-if="vm.result.finish" class="h-140" flex>\n                        \x3c!-- Front --\x3e\n                        <ms-widget-front class="p-16 white-bg">\n                            <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                <div class="md-display-1 pb-8 red-fg">\n                                    <span ng-bind="vm.result.failedRows"></span>\n                                </div>\n                                <div class="font-weight-500 secondary-text" translate="CONTACTMANAGER.FAILURE">Failure</div>\n                            </div>\n                        </ms-widget-front>\n                        \x3c!-- / Front --\x3e\n                    </ms-widget>\n                    \x3c!-- / WIDGET FAILURE --\x3e\n\n                    \x3c!-- WIDGET DUPLICATES --\x3e\n                    <ms-widget ng-if="vm.result.duplicatedRows && vm.result.finish" class="h-140" flex>\n                        \x3c!-- Front --\x3e\n                        <ms-widget-front class="p-16 white-bg">\n                            <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                <div class="md-display-1 pb-8 orange-fg">\n                                    <span ng-bind="vm.result.duplicatedRows"></span>\n                                </div>\n                                <div class="font-weight-500 secondary-text" translate="CONTACTMANAGER.DUPLICATES">Duplicates</div>\n                            </div>\n                        </ms-widget-front>\n                        \x3c!-- / Front --\x3e\n                    </ms-widget>\n                    \x3c!-- / WIDGET DUPLICATES --\x3e\n                </div>\n\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row">\n                <md-button ng-if="!vm.processing" ng-disabled="importForm.$invalid || importForm.$pristine" ng-click="vm.uploadCsv()" class="md-accent md-raised" aria-label="UPLOAD" translate="CONTACTMANAGER.UPLOAD" translate-attr-aria-label="CONTACTMANAGER.IMPORT">\n                    IMPORT\n                </md-button>\n                <md-button ng-if="vm.processing && !vm.result.finish && !vm.stopping" ng-click="vm.stopUpload()" class="md-accent md-raised" aria-label="Stop Upload" translate="CONTACTMANAGER.STOP" translate-attr-aria-label="CONTACTMANAGER.STOP">\n                    STOP\n                </md-button>\n                <md-button ng-if="vm.result.finish && vm.result.errors.length" ng-csv="vm.getArrayErrors()" csv-header="vm.getHeaderErrors()" class="md-accent md-raised" aria-label="Export Errors" filename="contacts_import_errors.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon> {{\'CONTACTMANAGER.EXPORT_ERRORS\' | translate}}\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/contacts/merge/dialog.html",'<md-dialog class="cm-contact-dialog" aria-label="Merge Contact">\n    <form name="contactForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container class="md-block" flex-gt-sm>\n                <label>Filter</label>\n                <input ng-model="vm.searchTerm" name="searchTerm" ng-model-options="{ debounce: 300 }" ng-change="vm.change()">\n            </md-input-container>\n\n            <md-list flex>\n                <md-subheader class="md-no-sticky" ng-hide="vm.contacts.length"><em>Filter doesn\'t match any contact</em></md-subheader>\n                <md-list-item class="md-3-line" ng-repeat="contact in vm.contacts | filter:{ id: \'!\' + vm.contact.id}" ng-click="vm.showConfirm($event, vm.contact, contact)">\n                    <img ng-src="assets/images/avatars/profile.png" class="md-avatar" alt="{{contact.who}}" />\n                    <div class="md-list-item-text" layout="column">\n                        <h3>#{{ contact.id }} - {{ contact.firstName }} {{ contact.lastName }}</h3>\n                        <h4>{{ contact.email }}</h4>\n                        <p>{{ contact.phone }}</p>\n                    </div>\n                </md-list-item>\n            </md-list>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/globalCustomFields/create/dialog.html",'<md-dialog class="globalCustomField-dialog" aria-label="New GlobalCustomField">\n    <form name="globalCustomFieldForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.ALIAS">Alias</label>\n                <input type="" name="alias" ng-model="vm.globalCustomField.alias" ng-required="true" autofocus>\n\n                <div ng-messages="globalCustomFieldForm[\'alias\'].$error" ng-show="globalCustomFieldForm[\'alias\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.ALIAS_REQUIRED">Alias field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.globalCustomField.type" required ng-disabled="!vm.newGlobalCustomField">\n                    <md-option ng-value="\'text\'">Text</md-option>\n                    <md-option ng-value="\'select\'">Select</md-option>\n                    <md-option ng-value="\'number\'">Number</md-option>\n                    <md-option ng-value="\'switch\'">Switch</md-option>\n                    <md-option ng-value="\'datetime\'">Datetime</md-option>\n                </md-select>\n                <div ng-messages="globalCustomFieldForm[\'type\'].$error" ng-show="globalCustomFieldForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div ng-if="vm.globalCustomField.type == \'select\'" class="md-block">\n                <md-list>\n                    <md-list-item layout-margin>\n                        <md-button class="md-fab md-mini md-secondary" ng-click="vm.addItem(vm.globalCustomField.values);">\n                            <md-tooltip><span translate="CONTACTMANAGER.ADD">ADD</span></md-tooltip>\n                            <md-icon md-font-icon="icon-plus" aria-label="alert error"></md-icon>\n                        </md-button>\n                        <md-button ng-if="vm.globalCustomField.values.length" class="md-fab md-mini md-warn md-secondary" ng-click="vm.removeItems(vm.globalCustomField.values);">\n                            <md-tooltip><span translate="CONTACTMANAGER.DELETE_ALL">Delete All</span></md-tooltip>\n                            <md-icon md-font-icon="icon-delete" aria-label="alert error"></md-icon>\n                        </md-button>\n                    </md-list-item>\n                </md-list>\n                <md-list ng-sortable="vm.sortable">\n                    <md-list-item ng-repeat="item in vm.globalCustomField.values" style="border: 1px solid #ccc!important; border-radius: 7px;" layout-margin>\n                        <div>\n                            <md-icon class="s24" style="cursor:move" md-font-icon="icon-drag" aria-label="drag"></md-icon>\n                            <input type="text" ng-model="item.value" flex>\n                        </div>\n                        <md-button class="md-fab md-mini md-warn md-secondary" ng-click="vm.removeItem(vm.globalCustomField.values, $index);">\n                            <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                            <md-icon md-font-icon="icon-delete" aria-label="alert error"></md-icon>\n                        </md-button>\n                    </md-list-item>\n                </md-list>\n                <md-list>\n                    <md-list-item ng-if="!vm.globalCustomField.values.length" layout="row" layout-align="center center">\n                        <em translate="CONTACTMANAGER.NO_AVAILABLE_ITEMS">No Available Items</em>\n                    </md-list-item>\n                </md-list>\n            </div>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.globalCustomField.required" aria-label="Required"><span translate="CONTACTMANAGER.REQUIRED">Required</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newGlobalCustomField" ng-click="vm.saveGlobalCustomField()" class="send-button md-accent md-raised" ng-disabled="globalCustomFieldForm.$invalid || globalCustomFieldForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newGlobalCustomField" ng-click="vm.addNewGlobalCustomField()" class="send-button md-accent md-raised" ng-disabled="globalCustomFieldForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_GLOBALCUSTOMFIELD" translate-attr-aria-label="CONTACTMANAGER.ADD_GLOBALCUSTOMFIELD">\n                    ADD GLOBALCUSTOMFIELD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newGlobalCustomField" ng-click="vm.deleteGlobalCustomField($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/globalCustomFields/globalCustomFields.html",'<div id="globalCustomFields" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-circle" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CONTACTMANAGER.GLOBALCUSTOMFIELDS">GlobalCustomFields</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CONTACTMANAGER.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedGlobalCustomFields.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedGlobalCustomFields =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CONTACTMANAGER.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-globalCustomFields-count">\n                    <span>{{vm.selectedGlobalCustomFields.length}}</span>\n                    <span translate="CONTACTMANAGER.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="GLOBALCUSTOMFIELDS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllGlobalCustomFields()" translate="CONTACTMANAGER.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectGlobalCustomFields()" translate="CONTACTMANAGER.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedGlobalCustomFields" csv-label="true" filename="globalCustomFields.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedGlobalCustomFields($event)" aria-label="delete selected" translate translate-attr-label="GLOBALCUSTOMFIELDS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- GLOBALCUSTOMFIELD TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedGlobalCustomFields" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getGlobalCustomFields">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                <th md-column md-order-by="alias">{{ \'CONTACTMANAGER.ALIAS\' | translate }}</th>\n                                <th md-column md-order-by="type">{{ \'CONTACTMANAGER.TYPE\' | translate }}</th>\n                                <th md-column md-order-by="required">{{ \'CONTACTMANAGER.REQUIRED\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.globalCustomFields.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="globalCustomField" md-select-id="id" ng-repeat="globalCustomField in vm.globalCustomFields.rows">\n                                <td md-cell ng-if="globalCustomField.userpic"><img class="avatar" alt="{{globalCustomField.name}}" ng-src="api/users/{{globalCustomField.id}}/avatar" /></td>\n                                <td md-cell ng-if="!globalCustomField.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{globalCustomField.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditGlobalCustomField($event, globalCustomField)" md-cell class="id ">{{globalCustomField.id}}</td>\n                                <td ng-click="vm.createOrEditGlobalCustomField($event, globalCustomField)" md-cell class="alias ">{{globalCustomField.alias}}</td>\n                                <td ng-click="vm.createOrEditGlobalCustomField($event, globalCustomField)" md-cell class="type ">{{ vm.arraytype[globalCustomField.type].option }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(globalCustomField, ev) : vm.createOrEditGlobalCustomField($event, globalCustomField)" md-cell class="required ">\n                                    <md-icon md-colors="{color: {{globalCustomField.required ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{globalCustomField.required ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(globalCustomField, $event    )" translate="CONTACTMANAGER.EDIT_GLOBALCUSTOMFIELD">\n                                                    Edit GlobalCustomField\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(globalCustomField, $event    )" translate="CONTACTMANAGER.DELETE_GLOBALCUSTOMFIELD">\n                                                    Delete GlobalCustomField\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.globalCustomFields.count}}" md-on-paginate="vm.getGlobalCustomFields" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / GLOBALCUSTOMFIELD TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD GLOBALCUSTOMFIELD BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-globalCustomField-button" ng-click="vm.createOrEditGlobalCustomField($event)" aria-label="add globalCustomField" translate translate-attr-aria-label="CONTACTMANAGER.ADD_GLOBALCUSTOMFIELD">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD GLOBALCUSTOMFIELD BUTTON --\x3e\n</div>'),e.put("app/main/apps/contactmanager/views/lists/create/dialog.html",'<md-dialog class="list-dialog" aria-label="New List">\n    <form name="listForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.list.name" ng-required="true" autofocus>\n\n                <div ng-messages="listForm[\'name\'].$error" ng-show="listForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.list.description">\n\n                <div ng-messages="listForm[\'description\'].$error" ng-show="listForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newList" ng-click="vm.saveList()" class="send-button md-accent md-raised" ng-disabled="listForm.$invalid || listForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newList" ng-click="vm.addNewList()" class="send-button md-accent md-raised" ng-disabled="listForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_LIST" translate-attr-aria-label="CONTACTMANAGER.ADD_LIST">\n                    ADD LIST\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newList" ng-click="vm.deleteList($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/lists/edit/agentadd/agentadd.html",'<md-dialog class="list-dialog" aria-label="list" ng-init="vm.onInit()">\n    <form name="listForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="CONTACTMANAGER.AGENTADD_LIST">Add Agent to list</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/lists/edit/customFields/dialog.html",'<md-dialog class="customField-dialog" aria-label="New CustomField">\n    <form name="customFieldForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.ALIAS">Alias</label>\n                <input type="" name="alias" ng-model="vm.customField.alias" ng-required="true" autofocus>\n\n                <div ng-messages="customFieldForm[\'alias\'].$error" ng-show="customFieldForm[\'alias\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.ALIAS_REQUIRED">Alias field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.customField.type" required ng-disabled="!vm.newCustomField">\n                    <md-option ng-value="\'text\'">Text</md-option>\n                    <md-option ng-value="\'select\'">Select</md-option>\n                    <md-option ng-value="\'number\'">Number</md-option>\n                    <md-option ng-value="\'switch\'">Switch</md-option>\n                    <md-option ng-value="\'datetime\'">Datetime</md-option>\n                </md-select>\n                <div ng-messages="customFieldForm[\'type\'].$error" ng-show="customFieldForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div ng-if="vm.customField.type == \'select\'" class="md-block">\n                <md-list>\n                    <md-list-item layout-margin>\n                        <md-button class="md-fab md-mini md-secondary" ng-click="vm.addItem(vm.customField.values);">\n                            <md-tooltip><span translate="CONTACTMANAGER.ADD">ADD</span></md-tooltip>\n                            <md-icon md-font-icon="icon-plus" aria-label="alert error"></md-icon>\n                        </md-button>\n                        <md-button ng-if="vm.customField.values.length" class="md-fab md-mini md-warn md-secondary" ng-click="vm.removeItems(vm.customField.values);">\n                            <md-tooltip><span translate="CONTACTMANAGER.DELETE_ALL">Delete All</span></md-tooltip>\n                            <md-icon md-font-icon="icon-delete" aria-label="alert error"></md-icon>\n                        </md-button>\n                    </md-list-item>\n                </md-list>\n                <md-list ng-sortable="vm.sortable">\n                    <md-list-item ng-repeat="item in vm.customField.values" style="border: 1px solid #ccc!important; border-radius: 7px;" layout-margin>\n                        <div>\n                            <md-icon class="s24" style="cursor:move" md-font-icon="icon-drag" aria-label="drag"></md-icon>\n                            <input type="text" ng-model="item.value" flex>\n                        </div>\n                        <md-button class="md-fab md-mini md-warn md-secondary" ng-click="vm.removeItem(vm.customField.values, $index);">\n                            <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                            <md-icon md-font-icon="icon-delete" aria-label="alert error"></md-icon>\n                        </md-button>\n                    </md-list-item>\n                </md-list>\n                <md-list>\n                    <md-list-item ng-if="!vm.customField.values.length" layout="row" layout-align="center center">\n                        <em translate="CONTACTMANAGER.NO_AVAILABLE_ITEMS">No Available Items</em>\n                    </md-list-item>\n                </md-list>\n            </div>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.customField.required" aria-label="Required"><span translate="CONTACTMANAGER.REQUIRED">Required</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newCustomField" ng-click="vm.saveCustomField()" class="send-button md-accent md-raised" ng-disabled="customFieldForm.$invalid || customFieldForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newCustomField" ng-click="vm.addNewCustomField()" class="send-button md-accent md-raised" ng-disabled="customFieldForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_CUSTOMFIELD" translate-attr-aria-label="CONTACTMANAGER.ADD_CUSTOMFIELD">\n                    ADD CUSTOMFIELD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newCustomField" ng-click="vm.deleteCustomField($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/lists/edit/view.html",'<div id="contactmanager-list" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-lists-button md-icon-button" aria-label="Go to lists" ng-click="vm.gotoLists()" translate translate-attr-aria-label="CONTACTMANAGER.GO_TO_LISTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="list-image" hide-xs>\n                    <img ng-src="assets/images/business/lists.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.list.id}}\n                        <span ng-if="vm.list.name">{{vm.list.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="CONTACTMANAGER.CREATED_AT"></span> <span>{{vm.list.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.list, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="CONTACTMANAGER.GOTO_LIST"></span></md-tooltip>\n                <md-icon md-font-icon="icon-forward"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.list, $event)" class="md-fab md-warn md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="CONTACTMANAGER.AGENTADD_LIST"></span></md-tooltip>\n                <md-icon md-font-icon="icon-eye"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveList()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (customFieldsForm.$invalid) || (voiceDispositionsForm.$invalid)" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="list-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="CONTACTMANAGER.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.list.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.list.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="CONTACTMANAGER.PREFIX">Prefix</label>\n                                <input type="text" name="dialPrefix" ng-model="vm.list.dialPrefix" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'dialPrefix\'].$error" ng-show="generalForm[\'dialPrefix\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="CONTACTMANAGER.ERRORS.PREFIX_REQUIRED">Prefix field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.CUSTOMFIELDS">CUSTOMFIELDS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="list-detail-form-container customfields md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ListCustomFieldsController as vm_dc" ng-init="vm_dc.init(vm.list, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedListCustomFields.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="CONTACTMANAGER.CUSTOMFIELDS">CustomFields</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditListCustomField($event)" aria-label="add customField" translate translate-attr-label="CONTACTMANAGER.ADD_CUSTOMFIELD">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedListCustomFields.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedListCustomFields.length}} {{vm_dc.selectedListCustomFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedListCustomFields" csv-label="true" filename="lists.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedListCustomFields($event)" aria-label="delete selected" translate translate-attr-label="LISTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedListCustomFields" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getListCustomFields">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                            <th md-column md-order-by="alias">{{ \'CONTACTMANAGER.ALIAS\' | translate }}</th>\n                                            <th md-column md-order-by="type">{{ \'CONTACTMANAGER.TYPE\' | translate }}</th>\n                                            <th md-column md-order-by="required">{{ \'CONTACTMANAGER.REQUIRED\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="customField" md-select-id="id" ng-repeat="customField in vm_dc.listCustomFields.rows">\n                                            <td ng-click="vm_dc.createOrEditListCustomField($event, customField)" md-cell>{{customField.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditListCustomField($event, customField)" md-cell>{{customField.alias}}</td>\n                                            <td ng-click="vm_dc.createOrEditListCustomField($event, customField)" md-cell>{{ vm_dc.arraytype[customField.type].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditListCustomField($event, customField)" md-cell class="required ">\n                                                <md-icon md-colors="{color: {{customField.required ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{customField.required? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                            </td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditListCustomField($event, customField)" translate="CONTACTMANAGER.EDIT_CUSTOMFIELD">\n                                                                Edit CustomField\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(customField, $event)" translate="CONTACTMANAGER.DELETE_CUSTOMFIELD">\n                                                                Delete CustomField\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.listCustomFields.rows.length">\n                                            <td md-cell colspan="7">\n                                                <span class="text-boxed-ligth" translate="CONTACTMANAGER.NO_CUSTOMFIELD_AVAILABLE">No customfield available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.listCustomFields.count}}" md-on-paginate="vm_dc.getListCustomFields" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="CONTACTMANAGER.DISPOSITIONS">DISPOSITIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="list-detail-form-container voicedispositions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ListVoiceDispositionsController as vm_dc" ng-init="vm_dc.init(vm.list, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedListVoiceDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="CONTACTMANAGER.VOICEDISPOSITIONS">VoiceDispositions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditListVoiceDisposition($event)" aria-label="add voiceDisposition" translate translate-attr-label="CONTACTMANAGER.ADD_VOICEDISPOSITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedListVoiceDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedListVoiceDispositions.length}} {{vm_dc.selectedListVoiceDispositions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedListVoiceDispositions" csv-label="true" filename="lists.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedListVoiceDispositions($event)" aria-label="delete selected" translate translate-attr-label="LISTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedListVoiceDispositions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getListVoiceDispositions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                            <th md-column md-order-by="name">{{ \'CONTACTMANAGER.NAME\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'CONTACTMANAGER.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="voiceDisposition" md-select-id="id" ng-repeat="voiceDisposition in vm_dc.listVoiceDispositions.rows">\n                                            <td ng-click="vm_dc.createOrEditListVoiceDisposition($event, voiceDisposition)" md-cell>{{voiceDisposition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditListVoiceDisposition($event, voiceDisposition)" md-cell>{{voiceDisposition.name}}</td>\n                                            <td ng-click="vm_dc.createOrEditListVoiceDisposition($event, voiceDisposition)" md-cell>{{voiceDisposition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditListVoiceDisposition($event, voiceDisposition)" translate="CONTACTMANAGER.EDIT_VOICEDISPOSITION">\n                                                                Edit VoiceDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(voiceDisposition, $event)" translate="CONTACTMANAGER.DELETE_VOICEDISPOSITION">\n                                                                Delete VoiceDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.listVoiceDispositions.rows.length">\n                                            <td md-cell colspan="5">\n                                                <span class="text-boxed-ligth" translate="CONTACTMANAGER.NO_VOICEDISPOSITION_AVAILABLE">No voicedisposition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.listVoiceDispositions.count}}" md-on-paginate="vm_dc.getListVoiceDispositions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/contactmanager/views/lists/edit/voiceDispositions/dialog.html",'<md-dialog class="voiceDisposition-dialog" aria-label="New VoiceDisposition">\n    <form name="voiceDispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="CONTACTMANAGER.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.voiceDisposition.name" ng-required="true" autofocus>\n\n                <div ng-messages="voiceDispositionForm[\'name\'].$error" ng-show="voiceDispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="CONTACTMANAGER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVoiceDisposition" ng-click="vm.saveVoiceDisposition()" class="send-button md-accent md-raised" ng-disabled="voiceDispositionForm.$invalid || voiceDispositionForm.$pristine" aria-label="SAVE" translate="CONTACTMANAGER.SAVE" translate-attr-aria-label="CONTACTMANAGER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVoiceDisposition" ng-click="vm.addNewVoiceDisposition()" class="send-button md-accent md-raised" ng-disabled="voiceDispositionForm.$invalid" aria-label="ADD" translate="CONTACTMANAGER.ADD_VOICEDISPOSITION" translate-attr-aria-label="CONTACTMANAGER.ADD_VOICEDISPOSITION">\n                    ADD VOICEDISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVoiceDisposition" ng-click="vm.deleteVoiceDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="CONTACTMANAGER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="CONTACTMANAGER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/contactmanager/views/lists/lists.html",'<div id="lists" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-circle" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="CONTACTMANAGER.LISTS">Lists</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="CONTACTMANAGER.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedLists.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedLists =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="CONTACTMANAGER.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-lists-count">\n                    <span>{{vm.selectedLists.length}}</span>\n                    <span translate="CONTACTMANAGER.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="LISTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllLists()" translate="CONTACTMANAGER.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectLists()" translate="CONTACTMANAGER.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedLists" csv-label="true" filename="lists.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedLists($event)" aria-label="delete selected" translate translate-attr-label="LISTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- LIST TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedLists" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getLists">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'CONTACTMANAGER.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'CONTACTMANAGER.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'CONTACTMANAGER.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.lists.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="CONTACTMANAGER.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="list" md-select-id="id" ng-repeat="list in vm.lists.rows">\n                                <td md-cell ng-if="list.userpic"><img class="avatar" alt="{{list.name}}" ng-src="api/users/{{list.id}}/avatar" /></td>\n                                <td md-cell ng-if="!list.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{list.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(list, ev) : vm.createOrEditList($event, list)" md-cell class="id ">{{list.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(list, ev) : vm.createOrEditList($event, list)" md-cell class="name ">{{list.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(list, ev) : vm.createOrEditList($event, list)" md-cell class="description ">{{list.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="CONTACTMANAGER.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(list, $event    )" translate="CONTACTMANAGER.EDIT_LIST">\n                                                    Edit List\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotocontactsgoto(list, $event    )" translate="CONTACTMANAGER.GOTOCONTACTS_LIST">\n                                                    goToContacts List\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.exportcsvcontactsexport(list, $event    )" translate="CONTACTMANAGER.EXPORTCSVCONTACTS_LIST">\n                                                    exportCsvContacts List\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(list, $event    )" translate="CONTACTMANAGER.AGENTADD_LIST">\n                                                    AgentAdd List\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(list, $event    )" translate="CONTACTMANAGER.DELETE_LIST">\n                                                    Delete List\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'CONTACTMANAGER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'CONTACTMANAGER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'CONTACTMANAGER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.lists.count}}" md-on-paginate="vm.getLists" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / LIST TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD LIST BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-list-button" ng-click="vm.createOrEditList($event)" aria-label="add list" translate translate-attr-aria-label="CONTACTMANAGER.ADD_LIST">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD LIST BUTTON --\x3e\n</div>'),e.put("app/main/apps/dashboards/views/custom/custom.html",'<div ng-if="!vm.customDashboard">\n    <p>Custom Dashboard not available...</p>\n</div>\n<div id="dashboard-custom" ng-if="vm.customDashboard" ng-cloak layout-fill>\n    <md-content>\n        <md-toolbar class="md-default md-accent filter-header">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead">{{vm.customDashboard.name}}</span>\n                <div flex></div>\n                <div layout="column">\n                    <span class="font-size-10" translate="DASHBOARDS.FILTER_VOICE_QUEUES">Filter Voice Queues</span>\n                    <md-select placeholder="Select one or more queues" class="font-size-12 no-margin w-200" md-on-close="vm.onChangeVoiceQueues()" ng-model="vm.voiceQueuesSelected" multiple aria-label="voiceQueues">\n                        <md-option ng-value="voiceQueue.id" ng-repeat="voiceQueue in vm.voiceQueues.rows">{{ voiceQueue.name }}</md-option>\n                    </md-select>\n                </div>\n                <md-button ng-if="vm.crudPermissions.canEdit" class="md-icon-button" ng-click="vm.goToEdit()" aria-label="goToEdit">\n                    <md-tooltip md-direction="top"><span translate="DASHBOARDS.EDIT"></span></md-tooltip>\n                    <md-icon md-font-icon="icon-table-edit"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <ms-widget-engine config="vm.customDashboard"></ms-widget-engine>\n    </md-content>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/agent.general.home.permissions.html",'<md-content layout="row" layout-align="space-around center" flex layout-padding layout-wrap>\n    <div layout="column" layout-align="space-around center" flex="50">\n        <span class="font-size-40 text-center">{{ \'DASHBOARDS.WELCOME_TO_MOTION\' | translate }}!</span>\n        <span class="font-size-30 text-center" translate="DASHBOARDS.WELCOME_MESSAGE">Use the left sidebar to navigate through available sections.</span>\n    </div>\n\n    <div layout="column" flex="50">\n        <img src="assets/images/avatars/permissions.png" alt="permissions">\n    </div>\n</md-content>'),e.put("app/main/apps/dashboards/views/general/agent/agent.general.html",'<div id="agent-general" layout="column">\n    <div layout="row" layout-align="start center" class="md-primary-bg">\n        <md-button class="md-raised no-margin width-50" style="border-radius: 0px" ng-class="{\'md-primary\': !vm.isActiveTab(0)}" ng-click="vm.onClickTab(0)" aria-label="home">\n            <md-tooltip md-direction="bottom" md-delay="500">Home</md-tooltip>\n            <md-icon md-font-icon="icon-home" class="icon"></md-icon>\n        </md-button>\n\n        <ms-tab-scroll style="overflow: hidden;">\n            <div layout="column" ng-repeat="(key, tab) in vm.tabs" ng-click="vm.onClickTab(tab.id)" ng-class="{\'grey-50-bg\': vm.isActiveTab(tab.id)}">\n                <div style="height: 34px" layout="row" layout-align="space-between center">\n                    <md-icon md-font-icon="{{tab.icon}}" class="icon s16 margin-horizontal-5" ng-class="tab.color + \'-fg\'"></md-icon>\n                    <span class="text-truncate font-size-12" ng-class="vm.isActiveTab(tab.id) ? \'black-fg\' : \'grey-300-fg\'">\n                        {{tab.title}} <span ng-if="tab.badges" class="badge md-white-fg md-red-bg">{{tab.badges}}</span></span>\n                    <md-button class="md-icon-button md-mini no-margin" ng-class="vm.isActiveTab(tab.id) ? \'md-primary\' : \'grey-300-fg\'" aria-label="close" ng-click="vm.closeTab(tab)">\n                        <md-icon md-font-icon="icon-close-circle-outline" class="icon s16"></md-icon>\n                    </md-button>\n                </div>\n                <div style="height: 2px" ng-class="vm.isActiveTab(tab.id) ? tab.color + \'-bg\' : \'\'"></div>\n            </div>\n        </ms-tab-scroll>\n    </div>\n    <div layout="row" class="agent-content" ng-if="vm.isActiveTab(0)" ng-style="{\'top\': vm.detectBrowser.browser == \'safari\' ? \'100px\' : \'36px\'}" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.html\'" ng-controller="AgentGeneralHomeController as vm_home" ng-init="vm_home.init(vm.license, vm.setting)"></div>\n    <div ng-if="!vm.isActiveTab(0)" ng-repeat="(key, tab) in vm.tabs" ng-switch="tab.type">\n        <div ng-switch-when="contact">\n            <div class="agent-content" ms-scroll ng-if="vm.isActiveTab(tab.id)" ng-style="{\'top\': vm.detectBrowser.browser == \'safari\' ? \'100px\' : \'36px\'}" ng-include="\'app/main/apps/dashboards/views/general/agent/contact/agent.general.contact.html\'" ng-controller="AgentGeneralContactController as vm" ng-init="vm.init(tab,$parent.vm.license)"></div>\n        </div>\n        <div ng-switch-when="popup">\n            <div ng-if="vm.isActiveTab(tab.id)" ms-scroll ng-include="\'app/main/apps/dashboards/views/general/agent/popup/agent.general.popup.html\'" ng-controller="AgentGeneralPopupController as vm" ng-init="vm.init(tab)"></div>\n        </div>\n        <div ng-switch-when="jscripty">\n            <div class="agent-content" ms-scroll ng-if="vm.isActiveTab(tab.id)" ng-style="{\'top\': vm.detectBrowser.browser == \'safari\' ? \'100px\' : \'36px\'}" ng-include="\'app/main/apps/dashboards/views/general/agent/jscripty/agent.general.jscripty.html\'" ng-controller="AgentGeneralJscriptyController as vm" ng-init="vm.init(tab)"></div>\n        </div>\n        <div ng-switch-when="bot">\n            <div id="interaction-app" ng-if="vm.isActiveTab(tab.id)" class="agent-content" ng-style="{\'top\': vm.detectBrowser.browser == \'safari\' ? \'100px\' : \'36px\'}" ng-include="\'app/main/apps/dashboards/views/general/agent/bot/agent.general.bot.html\'" ng-controller="AgentGeneralBotController as vm" ng-init="vm.init(tab, $parent.vm.setting)"></div>\n        </div>\n        <div ng-switch-when="interaction">\n            <div id="interaction-app" ng-if="vm.isActiveTab(tab.id)" class="agent-content" ng-style="{\'top\': vm.detectBrowser.browser == \'safari\' ? \'100px\' : \'36px\'}" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.html\'" ng-controller="AgentGeneralInteractionController as vm" ng-init="vm.init(tab, $parent.vm.setting)">\n            </div>\n        </div>\n    </div>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/bot/agent.general.bot.html",'\x3c!-- CONTENT CARD --\x3e\n<md-content class="content-card" layout="row" layout-fill>\n\n    <div ng-if="!vm.showInteraction" class="start-point" flex layout="column" layout-align="center center">\n        <div class="big-circle md-whiteframe-4dp">\n            <md-icon class="s128 md-accent pink-fg" md-font-icon="fas fa-robot"></md-icon>\n        </div>\n        <span class="app-title" translate="DASHBOARDS.WAITING">Waiting</span>\n        <span class="hide show-gt-md secondary-text" translate="DASHBOARDS.LOADING_INTERACTION">We are loading the\n            interaction...</span>\n    </div>\n\n    <div ng-if="vm.showInteraction" flex layout="row">\n        <md-card flex="100" class="interaction">\n            \x3c!-- TOOLBAR --\x3e\n            <md-toolbar class="interaction-toolbar">\n                <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                    <md-icon md-font-icon="fas fa-robot" class="s20 pink-fg"></md-icon>\n                    <div class="padding-left-10" layout="column" layout-align="center start" flex>\n                        <div class="font-size-14" layout="row" layout-align="start center" layout-fill>\n                            <span>#{{vm.tab.data.uniqueid}} - {{vm.tab.title}}</span>\n                            \x3c!-- <div layout="row" layout-align="center center" class="blue-grey-300-fg padding-left-40"\n                                    ng-if="!vm.interaction.closed">\n                                    <timer start-time="vm.interaction.createdAt" interval="1000">{{ days > 0 ? days + \'d\' :\n                                        \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                                    <md-icon md-font-icon="icon-timelapse" class="s16 padding-left-5"></md-icon>\n                                </div> --\x3e\n                        </div>\n                    </div>\n                    <div layout="row" layout-align="end center">\n\n                    </div>\n                </div>\n            </md-toolbar>\n            \x3c!-- / TOOLBAR --\x3e\n\n            \x3c!-- CONTENT --\x3e\n            <md-content id="interaction-content" name="{{\'interaction-content-\' + vm.tab.id}}" flex ms-scroll layout-wrap>\n                <div class="interaction-messages">\n                    \x3c!-- MESSAGES --\x3e\n                    <div layout="row" ng-repeat="message in vm.messages.rows" class="md-padding message-row" ng-class="vm.getMessagesAlignment(message)">\n                        <img ng-if="message.direction ===\'in\'" src="assets/images/avatars/customer.png" class="avatar" />\n                        <img ng-if="message.direction ===\'out\'" class="avatar" src="assets/images/avatars/robot.png">\n\n                        <div class="bubble" ng-switch="message.direction">\n                            <div>\n                                <div ng-switch-when="in" class="time secondary-text">\n                                    {{vm.tab.title}} - {{message.createdAt | date: \'medium\'}}\n                                </div>\n                                <div ng-switch-when="out" class="time secondary-text" layout="row" layout-align="end center">\n                                    <div layout-padding>\n                                        System - {{message.createdAt | date: \'medium\'}}\n                                    </div>\n                                    <div>\n                                        <md-icon class="s18" md-font-icon="icon-check-all md-accent"></md-icon>\n                                    </div>\n                                </div>\n                            </div>\n                            <div ng-bind-html="message.body | embed:vm.emojiOptions" class="message" layout="row" layout-align="end center"></div>\n                        </div>\n                    </div>\n                    \x3c!-- / MESSAGES --\x3e\n                </div>\n            </md-content>\n            \x3c!-- / CONTENT --\x3e\n        </md-card>\n    </div>\n</md-content>\n\x3c!-- / CONTENT CARD --\x3e'),e.put("app/main/apps/dashboards/views/general/agent/contact/agent.general.contact.html",'<md-tabs md-selected="vm.currentTab" md-dynamic-height>\n    <md-tab>\n        <md-tab-label>\n            <span translate="DASHBOARDS.DETAIL">Detail</span>\n        </md-tab-label>\n        <md-tab-body>\n            <md-content>\n                <div layout="row">\n                    \x3c!-- MS-CARD --\x3e\n                    <md-card class="template-7" layout="row" layout-align="space-between" ng-repeat="call in vm.tab.calls track by call.uniqueid">\n                        <div class="info" layout="column" layout-align="space-between" layout-fill flex>\n                            <div layout="row">\n                                <span ng-if="call.answeredAt" class="text-boxed indigo-100-bg">\n                                    <timer start-time="call.answeredAt" interval="1000">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                                </span>\n                                <div flex></div>\n                                <span ng-if="call.disposedAt" class="text-boxed amber-200-bg">\n                                    <timer start-time="call.disposedAt" interval="1000">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                                </span>\n                            </div>\n                            <div class="p-16">\n                                <div class="title h1">\n                                    <md-icon ng-if="!call.routeId" md-font-icon="icon-phone-incoming"></md-icon>\n                                    <md-icon ng-if="call.routeId" md-font-icon="icon-phone-outgoing"></md-icon>\n                                    {{ call.routeId ? call.destcalleridnum : call.calleridnum }}\n                                </div>\n\n                                <div class="subtitle h4 secondary-text" ng-if="call.calleridname && call.calleridname != \'<unknown>\' && !call.routeId">\n                                    <md-icon md-font-icon="icon-account"></md-icon>\n                                    Name: {{ call.calleridname }}\n                                </div>\n\n                                <div class="text h4 pt-8" ng-if="call.queue">\n                                    <md-icon md-font-icon="icon-stackoverflow"></md-icon>\n                                    Queue: {{call.queue}}\n                                </div>\n                                <div class="text h4 pt-8" ng-if="call.variables.extravar">\n                                    <md-icon md-font-icon="icon-minus"></md-icon>\n                                    Extra: {{call.variables.extravar}}\n                                </div>\n                            </div>\n                            <div layout="row" layout-align="end center">\n                                <md-button ng-if="call.disposedAt" type="submit" ng-click="vm.disposeCall($event, call)" class="send-button md-accent md-raised">\n                                    {{ \'DASHBOARDS.DISPOSE\' | translate}}\n                                </md-button>\n                            </div>\n                        </div>\n                    </md-card>\n                    \x3c!-- / MS-CARD --\x3e\n                    <div flex layout="row" layout-align="end center">\n                        <md-button type="submit" ng-click="vm.mergeContact($event)" class="send-button md-raised md-accent ng-scope" ng-if="!vm.newContact" ng-disabled="vm.detailForm.$invalid || vm.customFieldsForm.$invalid || vm.socialForm.$invalid" aria-label="merge">\n                            <md-tooltip md-direction="top"><span translate="DASHBOARDS.MERGE"></span></md-tooltip>\n                            <md-icon md-font-icon="icon-source-fork"></md-icon>\n                        </md-button>\n                        <md-button type="submit" ng-click="vm.duplicateContact($event)" class="send-button md-raised md-accent ng-scope" ng-if="!vm.newContact" ng-disabled="vm.detailForm.$invalid || vm.customFieldsForm.$invalid || vm.socialForm.$invalid" aria-label="duplicate">\n                            <md-tooltip md-direction="top"><span translate="DASHBOARDS.DUPLICATE"></span></md-tooltip>\n                            <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n                        </md-button>\n                        <md-button type="submit" ng-click="vm.addNewContact($event)" class="send-button md-accent md-raised" ng-if="vm.newContact" ng-disabled="vm.detailForm.$invalid || vm.customFieldsForm.$invalid || vm.socialForm.$invalid" aria-label="add">\n                            {{ \'DASHBOARDS.ADD\'| translate }}\n                        </md-button>\n                        <md-button type="submit" ng-click="vm.saveContact($event)" class="send-button md-accent md-raised" ng-if="!vm.newContact" ng-disabled="vm.detailForm.$invalid || vm.customFieldsForm.$invalid || vm.socialForm.$invalid" aria-label="save">\n                            {{ \'DASHBOARDS.SAVE\' | translate }}\n                        </md-button>\n                    </div>\n                </div>\n                <div layout="row">\n                    <div layout="column" flex="75">\n                        <md-card layout-padding>\n                            <div class="h2 secondary-text text-truncate" translate="DASHBOARDS.PERSONAL_INFO">PERSONAL_INFO</div>\n                            <div class="subtitle secondary-text">\n                                <span translate="CONTACTMANAGER.CREATED_AT"></span> <span>{{vm.contact.createdAt | date:\'medium\'}}</span>\n                            </div>\n\n                            <form name="vm.detailForm" novalidate>\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <div layout="row" flex>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="DASHBOARDS.FIRSTNAME">First Name</label>\n                                            <md-icon md-font-icon="icon-account" class="firstname"></md-icon>\n                                            <input type="text" name="firstName" ng-model="vm.contact.firstName" class="text-truncate" required>\n                                            <div ng-messages="vm.detailForm.firstName.$error" ng-show="vm.detailForm.firstName.$touched" role="alert">\n                                                <div ng-message="required">\n                                                    <span translate="DASHBOARDS.ERRORS.FIRSTNAME_REQUIRED">First name field is required</span>\n                                                </div>\n                                            </div>\n                                        </md-input-container>\n                                        <div>\n                                            <md-menu ng-if="!vm.newContact">\n                                                <md-button ng-disabled="!vm.license.jscripty" class="md-icon-button md-raised md-accent ng-scope md-ink-ripple" title="JSCRIPTY PROJECTS" ng-click="$mdOpenMenu($event)" aria-label="jscripty">\n                                                    <md-icon md-font-icon="icon-script"></md-icon>\n                                                </md-button>\n\n                                                <md-menu-content>\n                                                    <md-menu-item ng-if="vm.jscriptyProjects && vm.jscriptyProjects.rows.length" ng-repeat="project in vm.jscriptyProjects.rows">\n                                                        <md-button ng-click="vm.addJscriptyTab(project, $event)">\n                                                            <md-icon md-font-icon="icon-script"></md-icon> {{project.name}}\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                    <md-menu-item ng-if="!vm.jscriptyProjects || !vm.jscriptyProjects.rows.length">\n                                                        <md-button disabled="disabled" translate="DASHBOARDS.NO_JSCRIPTY_PROJECTS_AVAILABLE">\n                                                            <md-icon md-font-icon="icon-script"></md-icon> No jscripty projects available\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                </md-menu-content>\n                                            </md-menu>\n                                        </div>\n                                    </div>\n                                    <div flex="5"></div>\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.LASTNAME">Last Name</label>\n                                        <input type="text" name="lastName" ng-model="vm.contact.lastName" class="text-truncate">\n                                    </md-input-container>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <div layout="row" flex>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="DASHBOARDS.PHONE">Phone</label>\n                                            <md-icon md-font-icon="icon-phone"></md-icon>\n                                            <input type="text" name="phone" ng-model="vm.contact.phone" class="text-truncate">\n                                            <div class="hint"><span ng-show="!vm.user.phoneBarRemoteControl || !vm.contact.phone" translate="CONTACTMANAGER.HELP.PHONEBAR_API"></span></div>\n                                        </md-input-container>\n                                        <div>\n                                            \x3c!-- click to call directive --\x3e\n                                            <ms-click-to-call target="vm.contact.phone" prefix="vm.list ? vm.list.dialPrefix : null" license="vm.license" type="\'button\'"></ms-click-to-call>\n                                            \x3c!--  / click to call directive --\x3e\n                                        </div>\n                                    </div>\n                                    <div flex="5"></div>\n                                    <div layout="row" flex>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="DASHBOARDS.MOBILE">Mobile</label>\n                                            <md-icon md-font-icon="icon-cellphone-iphone"></md-icon>\n                                            <input type="text" name="mobile" ng-model="vm.contact.mobile" class="text-truncate">\n                                            <div class="hint"><span ng-show="!vm.user.phoneBarRemoteControl || !vm.contact.mobile" translate="CONTACTMANAGER.HELP.PHONEBAR_API"></span></div>\n                                        </md-input-container>\n                                        <div>\n                                            \x3c!-- click to call directive --\x3e\n                                            <ms-click-to-call target="vm.contact.mobile" prefix="vm.list ? vm.list.dialPrefix : null" license="vm.license" type="\'button\'"></ms-click-to-call>\n                                            \x3c!--  / click to call directive --\x3e\n                                        </div>\n                                        <div>\n                                            <md-menu ng-if="!vm.newContact">\n                                                <md-button ng-disabled="!vm.license.messaging || !vm.hasPermission(107) || !vm.contact.mobile" class="md-icon-button md-raised md-accent ng-scope md-ink-ripple" title="NEW SMS" ng-click="$mdOpenMenu($event)" aria-label="sms">\n                                                    <md-icon md-font-icon="icon-message-text"></md-icon>\n                                                </md-button>\n\n                                                <md-menu-content>\n                                                    <md-menu-item ng-if="vm.smsAccounts && vm.smsAccounts.rows.length" ng-repeat="account in vm.smsAccounts.rows">\n                                                        <md-button ng-click="vm.composeInteraction($event, \'Sms\', account, vm.contact.mobile)">\n                                                            <md-icon md-font-icon="icon-message-text"></md-icon> {{account.name}}\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                    <md-menu-item ng-if="!vm.smsAccounts || !vm.smsAccounts.rows.length">\n                                                        <md-button disabled="disabled" translate="DASHBOARDS.NO_SMS_ACCOUNTS_AVAILABLE">\n                                                            <md-icon md-font-icon="icon-message-text"></md-icon> No sms accounts available\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                </md-menu-content>\n                                            </md-menu>\n                                        </div>\n                                    </div>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <div layout="row" flex>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="DASHBOARDS.EMAIL">Email</label>\n                                            <md-icon md-font-icon="icon-email" class="email"></md-icon>\n                                            <input type="email" name="email" ng-model="vm.contact.email" class="text-truncate">\n                                            <div ng-messages="vm.detailForm.firstName.$error" ng-show="vm.detailForm.firstName.$touched" role="alert">\n                                                <div ng-message="email">\n                                                    <span translate="DASHBOARDS.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                                </div>\n                                            </div>\n                                        </md-input-container>\n                                        <div>\n                                            <md-menu ng-if="!vm.newContact">\n                                                <md-button ng-disabled="!vm.license.mail || !vm.hasPermission(106) || !vm.contact.email" class="md-icon-button md-raised md-accent ng-scope md-ink-ripple" title="NEW EMAIL" ng-click="$mdOpenMenu($event)" aria-label="email">\n                                                    <md-icon md-font-icon="icon-email"></md-icon>\n                                                </md-button>\n\n                                                <md-menu-content>\n                                                    <md-menu-item ng-if="vm.mailAccounts && vm.mailAccounts.rows.length" ng-repeat="account in vm.mailAccounts.rows">\n                                                        <md-button ng-click="vm.composeInteraction($event, \'Mail\', account, vm.contact.email)">\n                                                            <md-icon md-font-icon="icon-email"></md-icon> {{account.name}}\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                    <md-menu-item ng-if="!vm.mailAccounts || !vm.mailAccounts.rows.length">\n                                                        <md-button disabled="disabled" translate="DASHBOARDS.NO_MAIL_ACCOUNTS_AVAILABLE">\n                                                            <md-icon md-font-icon="icon-email"></md-icon> No email accounts available\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                </md-menu-content>\n                                            </md-menu>\n                                        </div>\n                                    </div>\n                                    <div flex="5"></div>\n                                    <div layout="row" flex>\n                                        <md-input-container class="md-block" flex-gt-sm="">\n                                            <label translate="DASHBOARDS.FAX">Fax</label>\n                                            <md-icon md-font-icon="icon-deskphone"></md-icon>\n                                            <input type="text" name="fax" ng-model="vm.contact.fax">\n                                        </md-input-container>\n                                        <div>\n                                            <md-menu ng-if="!vm.newContact">\n                                                <md-button ng-disabled="!vm.license.fax || !vm.hasPermission(109) || !vm.contact.fax" class="md-icon-button md-raised md-accent ng-scope md-ink-ripple" title="NEW FAX" ng-click="$mdOpenMenu($event)" aria-label="fax">\n                                                    <md-icon md-font-icon="icon-deskphone"></md-icon>\n                                                </md-button>\n\n                                                <md-menu-content>\n                                                    <md-menu-item ng-if="vm.faxAccounts && vm.faxAccounts.rows.length" ng-repeat="account in vm.faxAccounts.rows">\n                                                        <md-button ng-click="vm.composeInteraction($event, \'Fax\', account, vm.contact.fax)">\n                                                            <md-icon md-font-icon="icon-deskphone"></md-icon> {{account.name}}\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                    <md-menu-item ng-if="!vm.faxAccounts || !vm.faxAccounts.rows.length">\n                                                        <md-button disabled="disabled" translate="DASHBOARDS.NO_FAX_ACCOUNTS_AVAILABLE">\n                                                            <md-icon md-font-icon="icon-deskphone"></md-icon> No fax accounts available\n                                                        </md-button>\n                                                    </md-menu-item>\n                                                </md-menu-content>\n                                            </md-menu>\n                                        </div>\n                                    </div>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <md-input-container class="md-block" flex-gt-sm="" ng-init="vm.contact.dateOfBirth = vm.getDateFromString(vm.contact.dateOfBirth)">\n                                        <label translate="DASHBOARDS.DATE_OF_BIRTH">Date of Birth</label>\n                                        <mdp-date-picker mdp-open-on-click mdp-format="YYYY-MM-DD" name="dateOfBirth" ng-model="vm.contact.dateOfBirth"></mdp-date-picker>\n                                    </md-input-container>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.COMPANY">Company</label>\n                                        <md-icon md-font-icon="icon-domain" class="email"></md-icon>\n                                        <md-select name="company" ng-model="vm.contact.CompanyId">\n                                            <md-option ng-value="company.id" ng-repeat="company in vm.tab.companies.rows">{{company.name}}</md-option>\n                                            <md-option ng-value="null"><em translate="DASHBOARDS.NONE">None</em></md-option>\n                                        </md-select>\n                                    </md-input-container>\n                                    <div flex="5"></div>\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.TAG">TAG</label>\n                                        <md-icon md-font-icon="icon-tag"></md-icon>\n                                        <md-select ng-model="vm.tab.Tags" multiple>\n                                            <md-option ng-value="tag.id" ng-repeat="tag in vm.tab.tags.rows">{{tag.name}}</md-option>\n                                        </md-select>\n                                    </md-input-container>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.COUNTRY">Country</label>\n                                        <md-icon md-font-icon="icon-home" class="country"></md-icon>\n                                        <input type="text" name="country" ng-model="vm.contact.country" class="text-truncate">\n                                    </md-input-container>\n                                    <div flex="5"></div>\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.CITY">City</label>\n                                        <input type="text" name="city" ng-model="vm.contact.city">\n                                    </md-input-container>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.STREET">Street</label>\n                                        <input type="text" name="street" ng-model="vm.contact.street">\n                                    </md-input-container>\n                                    <div flex="5"></div>\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate="DASHBOARDS.POSTALCODE">Postal Code</label>\n                                        <input type="text" name="postalCode" ng-model="vm.contact.postalCode">\n                                    </md-input-container>\n                                </div>\n\n                                <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                    <md-input-container class="md-block" flex-gt-sm="">\n                                        <label translate translate-attr-placeholder="DASHBOARDS.NOTES">Notes</label>\n                                        <md-icon md-font-icon="icon-note"></md-icon>\n                                        <textarea ng-model="vm.contact.description" type="text" max-rows="4"></textarea>\n                                    </md-input-container>\n                                </div>\n                            </form>\n                        </md-card>\n                        <md-card layout-padding>\n                            <div class="h2 secondary-text text-truncate" translate="DASHBOARDS.SOCIAL">Social</div>\n                            <form name="vm.socialForm" novalidate></form>\n                            <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                <md-input-container class="md-block" flex-gt-sm="">\n                                    <label>Facebook</label>\n                                    <md-icon md-font-icon="icon-facebook" class="facebook"></md-icon>\n                                    <input type="text" name="facebook" ng-model="vm.contact.facebook" class="text-truncate">\n                                </md-input-container>\n                                <div flex="5"></div>\n                                <md-input-container class="md-block" flex-gt-sm="">\n                                    <label>Twitter</label>\n                                    <md-icon md-font-icon="icon-twitter" class="twitter"></md-icon>\n                                    <input type="text" name="twitter" ng-model="vm.contact.twitter" class="text-truncate">\n                                </md-input-container>\n                            </div>\n                            <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                <md-input-container class="md-block" flex-gt-sm="">\n                                    <label>Line</label>\n                                    <md-icon md-font-icon="fab fa-line"></md-icon>\n                                    <input type="text" name="line" ng-model="vm.contact.line" class="text-truncate">\n                                </md-input-container>\n                                <div flex="5"></div>\n                                <md-input-container class="md-block" flex-gt-sm="">\n                                    <label>Viber</label>\n                                    <md-icon md-font-icon="fab fa-viber"></md-icon>\n                                    <input type="text" name="viber" ng-model="vm.contact.viber" class="text-truncate">\n                                </md-input-container>\n                            </div>\n                            <div layout-gt-sm="row" class="layout-gt-sm-row">\n                                <md-input-container class="md-block" flex-gt-sm="">\n                                    <label>WeChat</label>\n                                    <md-icon md-font-icon="fab fa-weixin"></md-icon>\n                                    <input type="text" name="wechat" ng-model="vm.contact.wechat" class="text-truncate">\n                                </md-input-container>\n                                <div flex="5"></div>\n                                <md-input-container class="md-block" flex-gt-sm="">\n                                    <label>Telegram</label>\n                                    <md-icon md-font-icon="icon-telegram"></md-icon>\n                                    <input type="text" name="telegram" ng-model="vm.contact.telegram" class="text-truncate">\n                                </md-input-container>\n                            </div>\n                            </form>\n                        </md-card>\n                    </div>\n                    <div flex="25" layout="column" layout-padding>\n                        <md-card flex="100" layout-padding>\n                            <div class="h2 secondary-text text-truncate" translate="DASHBOARDS.CUSTOM_FIELDS">CUSTOM FIELDS</div>\n                            <form name="vm.customFieldsForm" novalidate>\n\n                                \x3c!-- START INPUT LIST --\x3e\n                                <md-input-container class="md-block" ng-if="!vm.contact.ListId">\n                                    <label translate translate-attr-placeholder="DASHBOARDS.LIST">List</label>\n                                    <md-select name="list" ng-model="vm.contact.ListId" ng-change="vm.getCustomFields(vm.contact.ListId)" required>\n                                        <md-optgroup label="Lists">\n                                            <md-option ng-value="list.id" ng-repeat="list in vm.tab.userLists.rows">#{{list.id}} - {{list.name}}</md-option>\n                                        </md-optgroup>\n                                    </md-select>\n                                </md-input-container>\n                                <md-input-container class="md-block" ng-if="vm.contact.ListId">\n                                    <label translate translate-attr-placeholder="DASHBOARDS.LIST">List</label>\n                                    <md-select ng-disabled="!vm.newContact" name="list" ng-model="vm.contact.ListId" required>\n                                        <md-optgroup label="Lists">\n                                            <md-option ng-value="list.id" ng-repeat="list in vm.tab.lists.rows">#{{list.id}} - {{list.name}}</md-option>\n                                        </md-optgroup>\n                                    </md-select>\n                                </md-input-container>\n                                \x3c!-- END INPUT LIST --\x3e\n\n                                <div ng-repeat="customField in vm.tab.customFields.rows" ng-switch="customField.type">\n                                    <md-input-container class="md-block" ng-switch-when="datetime">\n                                        <label>{{customField.alias}}<span ng-if="customField.required">*</span></label>\n                                        <div ng-init="vm.contact[\'cf_\' + customField.id] = vm.getDateFromString(vm.contact[\'cf_\' + customField.id])">\n                                            <mdp-date-picker mdp-open-on-click ng-required="customField.required" mdp-format="YYYY-MM-DD" ng-model="vm.contact[\'cf_\' + customField.id]"></mdp-date-picker>\n                                            <mdp-time-picker mdp-open-on-click mdp-placeholder="Time" ng-required="customField.required" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.contact[\'cf_\' + customField.id]"></mdp-time-picker>\n                                        </div>\n                                    </md-input-container>\n\n                                    <md-input-container class="md-block" ng-switch-when="select">\n                                        <label>{{customField.alias}}<span ng-if="customField.required">*</span></label>\n                                        <md-select ng-model="vm.contact[\'cf_\' + customField.id]" ng-required="customField.required">\n                                            <md-option ng-repeat="value in customField.values" ng-value="value.value">{{value.value}}</md-option>\n                                            <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                                        </md-select>\n                                    </md-input-container>\n\n                                    <md-input-container class="md-block" ng-switch-when="switch">\n                                        <md-switch aria-label="{{customField.alias}}" ng-model="vm.contact[\'cf_\' + customField.id]" ng-true-value="1" ng-false-value="0">\n                                            {{customField.alias}}<span ng-if="customField.required">*</span>\n                                        </md-switch>\n                                    </md-input-container>\n\n                                    <md-input-container class="md-block" ng-switch-default>\n                                        <label>{{customField.alias}}<span ng-if="customField.required">*</span></label>\n                                        <input type="{{customField.type}}" ng-model="vm.contact[\'cf_\' + customField.id]" ng-required="customField.required">\n                                    </md-input-container>\n                                </div>\n                            </form>\n                        </md-card>\n                    </div>\n                </div>\n            </md-content>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="DASHBOARDS.CUSTOMER_JOURNEY">Customer Journey</span>\n        </md-tab-label>\n        <md-tab-body>\n            <md-content class="md-padding" id="interaction-content">\n                <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.html\'"></div>\n            </md-content>\n        </md-tab-body>\n    </md-tab>\n</md-tabs>'),e.put("app/main/apps/dashboards/views/general/agent/contact/dispose/dialog.html",'<md-dialog class="agent-dialog" aria-label="agent dispose">\n    <form name="disposition" class="md-inline-form" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="DASHBOARDS.DISPOSE"></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()" ng-if="!vm.call.mandatoryDisposition">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div ng-if="!vm.isReschedule">\n                <md-input-container class="md-block">\n                    <label translate="DASHBOARDS.DISPOSITIONS">Dispositions</label>\n                    <md-select name="disposition" ng-model="vm.choice" required>\n                        <md-option ng-value="g.name" ng-repeat="g in vm.dispositions.rows">{{ g.name }}</md-option>\n                        <md-option ng-value="gd.name" ng-repeat="gd in vm.globalDispositions.rows">{{ gd.name }}</md-option>\n                    </md-select>\n                </md-input-container>\n                <md-input-container class="md-block">\n                    <label translate="DASHBOARDS.NOTE">Note</label>\n                    <textarea ng-model="vm.note" md-maxlength="255" max-rows="5" autofocus></textarea>\n                </md-input-container>\n            </div>\n\n            <div ng-if="vm.isReschedule">\n                <div layout="row">\n                    <div flex class="md-block">\n                        <mdp-date-picker mdp-open-on-click required name="date" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" mdp-min-date="vm.hopper.minDate" ng-model="vm.hopper.dateTime">\n                            <div ng-messages="disposition.date.$error" ng-show="disposition.date.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="DASHBOARDS.ERRORS.DATE_REQUIRED">Date is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="DASHBOARDS.ERRORS.DATE_INVALID">Date is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-date-picker>\n                    </div>\n\n                    <div flex class="md-block">\n                        <mdp-time-picker mdp-open-on-click required name="time" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.hopper.dateTime">\n                            <div ng-messages="disposition.time.$error" ng-show="disposition.time.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="DASHBOARDS.ERRORS.TIME_REQUIRED">Time is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="DASHBOARDS.ERRORS.TIME_INVALID">Time is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-time-picker>\n                    </div>\n                </div>\n                <md-input-container ng-if="!vm.dialerCall" class="md-block">\n                    <label translate="DASHBOARDS.CAMPAIGN">Campaign</label>\n                    <md-select name="queueCampaign" ng-model="vm.queueCampaign" required>\n                        <md-option ng-value="queueCampaign" ng-repeat="queueCampaign in vm.queueCampaigns.rows">{{ queueCampaign.name }} ({{ queueCampaign.dialActive ? \'Active\' : \'Not Active\' }})</md-option>\n                    </md-select>\n                    <div ng-messages="disposition.queueCampaign.$error" ng-show="disposition.queueCampaign.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="DASHBOARDS.ERRORS.CAMPAIGN_REQUIRED">Campaign field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions ng-if="!vm.isReschedule" layout="row">\n            <md-button ng-disabled="disposition.$invalid || disposition.$pristine" class="send-button md-raised md-accent" ng-click="vm.saveDisposition()">\n                {{(vm.choice ? \'DASHBOARDS.DISPOSE\' : \'DASHBOARDS.SAVE\') | translate}}\n            </md-button>\n            <md-button class="send-button md-raised md-primary" translate="DASHBOARDS.RESCHEDULE" ng-click="vm.saveDisposition(\'reschedule\')">\n                Reschedule\n            </md-button>\n            <md-button class="send-button md-accent md-raised" translate="DASHBOARDS.RECALLME" ng-click="vm.saveDisposition(\'recallme\')">\n                Recall Me\n            </md-button>\n            <span flex></span>\n            <md-button ng-if="vm.hasBlackLists" class="md-raised md-warn" translate="DASHBOARDS.BLACKLIST" ng-click="vm.saveDisposition(\'blacklist\')">\n                Blacklist\n            </md-button>\n        </md-dialog-actions>\n        <md-dialog-actions ng-if="vm.isReschedule" layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.saveReschedule()" class="send-button md-accent md-raised" ng-disabled="disposition.$invalid || disposition.$pristine || vm.disable" aria-label="SAVE" translate="DASHBOARDS.SAVE" translate-attr-aria-label="DASHBOARDS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/contact/reschedule/dialog.html",'<md-dialog class="agent-dialog" aria-label="New Agent">\n    <form name="dateTime" class="md-inline-form" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div layout="row">\n                <div flex class="md-block">\n                    <mdp-date-picker mdp-open-on-click required name="date" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" mdp-min-date="vm.hopper.minDate" ng-model="vm.hopper.dateTime">\n                        <div ng-messages="dateTime.date.$error" ng-show="dateTime.date.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="DASHBOARDS.ERRORS.DATE_REQUIRED">Date is required</span>\n                            </div>\n                            <div ng-message="format">\n                                <span translate="DASHBOARDS.ERRORS.DATE_INVALID">Date is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-date-picker>\n                </div>\n\n                <div flex class="md-block">\n                    <mdp-time-picker mdp-open-on-click required name="time" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.hopper.dateTime">\n                        <div ng-messages="dateTime.time.$error" ng-show="dateTime.time.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="DASHBOARDS.ERRORS.TIME_REQUIRED">Time is required</span>\n                            </div>\n                            <div ng-message="format">\n                                <span translate="DASHBOARDS.ERRORS.TIME_INVALID">Time is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-disabled="vm.disable" ng-click="vm.saveDialog()" class="send-button md-accent md-raised" ng-disabled="dateTime.$invalid || dateTime.$pristine" aria-label="SAVE" translate="DASHBOARDS.SAVE" translate-attr-aria-label="DASHBOARDS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/home/abandoned/agent.general.abandoned.html",'<div ng-cloak>\n    <md-content>\n        <md-tabs md-selected="vm.selectedTab" md-dynamic-height md-border-bottom>\n            <md-tab ng-if="vm_home.hasPermission(110)" label="Voice">\n                <div ng-controller="AgentHomeAbandonedVoiceController as vm_voice">\n                    <md-content ng-if="vm.selectedTab==0" ng-include="\'app/main/apps/dashboards/views/general/agent/home/abandoned/voice/agent.general.abandoned.voice.html\'">\n                    </md-content>\n                </div>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(110) && vm_home.license.dialer" label="Bull">\n                <div ng-controller="AgentHomeAbandonedBullController as vm_bull">\n                    <md-content ng-if="vm.selectedTab==1" ng-include="\'app/main/apps/dashboards/views/general/agent/home/abandoned/bull/agent.general.abandoned.bull.html\'">\n                    </md-content>\n                </div>\n            </md-tab>\n        </md-tabs>\n    </md-content>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/abandoned/bull/agent.general.abandoned.bull.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header blue-bg" ng-class="{\'h-128\' : vm_bull.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools" layout="row" layout-align="center center">\n            <span class="md-subhead" translate="DASHBOARDS.ABANDONEDQUEUECALLS">ABANDONED QUEUE CALLS</span>\n            <ms-search-bar on-search="vm_bull.query.filter = query" on-collapse="vm_bull.onSearchBarCollapse()" on-expand="vm_bull.onSearchBarExpand()" query="vm_bull.query.filter" debounce="300" direction="down"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm_bull.pickerModel.dateStart" ng-click="vm_bull.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm_bull.localizationMap" ng-model="vm_bull.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm_bull.getAbandonedCalls()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm_bull.query.lastAssignedTo" ng-change="vm_bull.getAbandonedCalls()">\n                    <md-option ng-value="vm_bull.currentUser.name" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div ng-if="vm_bull.queues.count" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_CAMPAIGN">Select a Campaign</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm_bull.query.queue" ng-change="vm_bull.getAbandonedCalls()">\n                    <md-option ng-value="vm_bull.defaultQueues" ng-if="vm_bull.queues.count > 1"><em translate="DASHBOARDS.ALL">All</em></md-option>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm_bull.queues.rows">{{queue.name}}</md-option>\n                </md-select>\n            </div>\n            <md-button class="md-icon-button interaction-reload" ng-click="vm_bull.refresh && vm_bull.refreshAbandonedCalls($event)" aria-label="Reload" translate translate-attr-label="DASHBOARDS.RELOAD">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n                <md-tooltip ng-if="vm_bull.showTooltip" md-visible="vm_bull.showTooltip">{{\'DASHBOARDS.CLICKRELOAD\' | translate}}</md-tooltip>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm_bull.promise">\n            <thead md-head md-order="vm_bull.query.sort" md-on-reorder="vm_bull.getAbandonedCalls">\n                <tr md-row>\n                    <th md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column md-order-by="calleridname">{{\'DASHBOARDS.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="calleridnum">{{\'DASHBOARDS.PHONE\' | translate}}</th>\n                    <th md-column md-order-by="queue">{{\'DASHBOARDS.QUEUE\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerabandonAt">{{\'DASHBOARDS.ABANDONAT\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerexitAt">{{\'DASHBOARDS.QUEUECALLEREXITAT\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerexitreason">{{\'DASHBOARDS.QUEUECALLEREXITREASON\' | translate}}</th>\n                    <th md-column md-order-by="disposition">{{\'DASHBOARDS.DISPOSITION\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.RESERVED\' | translate}}</th>\n                    <th md-column md-order-by="lastAssignedTo">{{\'DASHBOARDS.LASTASSIGNEDTO\' | translate}}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm_bull.abandonedCalls.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="abandonedCall in vm_bull.abandonedCalls.rows">\n                    <td md-cell class="id">{{abandonedCall.id}}</td>\n                    <td md-cell class="firstName">{{abandonedCall.calleridname}}</td>\n                    <td md-cell class="phone">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="abandonedCall.calleridnum" license="vm_home.license" disabled="abandonedCall.lastAssignedTo !== vm_bull.currentUser.name"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="list">{{vm_bull.queuesMap[abandonedCall.queue]}}</td>\n                    <td md-cell class="list">{{abandonedCall.queuecallerabandonAt ? (abandonedCall.queuecallerabandonAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{abandonedCall.queuecallerexitAt ? (abandonedCall.queuecallerexitAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{abandonedCall.queuecallerexitreason}}</td>\n                    <td md-cell class="list">{{abandonedCall.disposition}}</td>\n                    <td md-cell class="actions">\n                        <md-switch no-margin ng-if="abandonedCall.lastAssignedTo === vm_bull.currentUser.name || !abandonedCall.lastAssignedTo" ng-disabled="vm_bull.disable[abandonedCall.id]" ng-model="abandonedCall.assigned" aria-label="reserved" ng-change="vm_bull.reserved(abandonedCall, abandonedCall.disposition)"></md-switch>\n                    </td>\n                    <td md-cell class="list">{{abandonedCall.lastAssignedTo}}</td>\n                    <td md-cell class="actions">\n                        <md-menu ng-if="abandonedCall.lastAssignedTo === vm_bull.currentUser.name">\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="1">\n                                <md-menu-item>\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.DISPOSE">Dispose</md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-if="vm_bull.disposition.length" ng-repeat="disposition in vm_bull.disposition">\n                                                <md-button ng-click="vm_bull.reserved(abandonedCall, disposition.name)">{{disposition.name}}</md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm_bull.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_bull.query.page" md-total="{{vm_bull.abandonedCalls.count}}" md-on-paginate="vm_bull.getAbandonedCalls" md-page-select></md-table-pagination>\n\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/abandoned/voice/agent.general.abandoned.voice.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header blue-bg" ng-class="{\'h-128\' : vm_voice.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools" layout="row" layout-align="center center">\n            <span class="md-subhead" translate="DASHBOARDS.ABANDONEDQUEUECALLS">ABANDONED QUEUE CALLS</span>\n            <ms-search-bar on-search="vm_voice.query.filter = query" on-collapse="vm_voice.onSearchBarCollapse()" on-expand="vm_voice.onSearchBarExpand()" query="vm_voice.query.filter" debounce="300" direction="down"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm_voice.pickerModel.dateStart" ng-click="vm_voice.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm_voice.localizationMap" ng-model="vm_voice.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm_voice.getAbandonedCalls()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm_voice.query.lastAssignedTo" ng-change="vm_voice.getAbandonedCalls()">\n                    <md-option ng-value="vm_voice.currentUser.name" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div ng-if="vm_voice.queues.count" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_CAMPAIGN">Select a Campaign</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm_voice.query.queue" ng-change="vm_voice.getAbandonedCalls()">\n                    <md-option ng-value="vm_voice.defaultQueues" ng-if="vm_voice.queues.count > 1"><em translate="DASHBOARDS.ALL">All</em></md-option>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm_voice.queues.rows">{{queue.name}}</md-option>\n                </md-select>\n            </div>\n            <md-button class="md-icon-button interaction-reload" ng-click="vm_voice.refresh && vm_voice.refreshAbandonedCalls($event)" aria-label="Reload" translate translate-attr-label="DASHBOARDS.RELOAD">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n                <md-tooltip ng-if="vm_voice.showTooltip" md-visible="vm_voice.showTooltip">{{\'DASHBOARDS.CLICKRELOAD\' | translate}}</md-tooltip>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm_voice.promise">\n            <thead md-head md-order="vm_voice.query.sort" md-on-reorder="vm_voice.getAbandonedCalls">\n                <tr md-row>\n                    <th md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column md-order-by="calleridname">{{\'DASHBOARDS.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="calleridnum">{{\'DASHBOARDS.PHONE\' | translate}}</th>\n                    <th md-column md-order-by="queue">{{\'DASHBOARDS.QUEUE\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerabandonAt">{{\'DASHBOARDS.ABANDONAT\' | translate}}</th>\n                    <th md-column md-order-by="disposition">{{\'DASHBOARDS.DISPOSITION\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.RESERVED\' | translate}}</th>\n                    <th md-column md-order-by="lastAssignedTo">{{\'DASHBOARDS.LASTASSIGNEDTO\' | translate}}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm_voice.abandonedCalls.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="abandonedCall in vm_voice.abandonedCalls.rows">\n                    <td md-cell class="id">{{abandonedCall.id}}</td>\n                    <td md-cell class="firstName">{{abandonedCall.calleridname}}</td>\n                    <td md-cell class="phone">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="abandonedCall.calleridnum" license="vm_home.license" disabled="abandonedCall.lastAssignedTo !== vm_voice.currentUser.name"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="list">{{vm_voice.queuesMap[abandonedCall.queue]}}</td>\n                    <td md-cell class="list">{{abandonedCall.queuecallerabandonAt ? (abandonedCall.queuecallerabandonAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{abandonedCall.disposition}}</td>\n                    <td md-cell class="actions">\n                        <md-switch no-margin ng-if="abandonedCall.lastAssignedTo === vm_voice.currentUser.name || !abandonedCall.lastAssignedTo" ng-disabled="vm_voice.disable[abandonedCall.id]" ng-model="abandonedCall.assigned" aria-label="reserved" ng-change="vm_voice.reserved(abandonedCall, abandonedCall.disposition)"></md-switch>\n                    </td>\n                    <td md-cell class="list">{{abandonedCall.lastAssignedTo}}</td>\n                    <td md-cell class="actions">\n                        <md-menu ng-if="abandonedCall.lastAssignedTo === vm_voice.currentUser.name">\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="1">\n                                <md-menu-item>\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.DISPOSE">Dispose</md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-if="vm_voice.disposition.length" ng-repeat="disposition in vm_voice.disposition">\n                                                <md-button ng-click="vm_voice.reserved(abandonedCall, disposition.name)">{{disposition.name}}</md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm_voice.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_voice.query.page" md-total="{{vm_voice.abandonedCalls.count}}" md-on-paginate="vm_voice.getAbandonedCalls" md-page-select></md-table-pagination>\n\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/agent.general.home.html",'<div layout="column" layout-align="start center" class="md-primary-bg width-50" ms-scroll>\n    <div ng-repeat="node in vm_home.navigation">\n        <div ng-repeat="home in node.children">\n            <md-button ng-repeat="button in home.children" ng-if="!button.hidden()" class="md-raised width-50 height-50 no-margin" style="border-radius: 0px" aria-label="{{button.state}}" ng-click="vm_home.changeSidebarTab(button)" ng-class="{\'md-primary\': vm_home.sidebar != button.state}">\n                <md-tooltip md-direction="right" md-delay="500"><span translate="{{button.translate}}"></span>\n                </md-tooltip>\n                <md-icon md-font-icon="{{button.icon}}" ng-class="button.iconClass"></md-icon>\n            </md-button>\n        </div>\n    </div>\n</div>\n<div layout="column" flex>\n    <div layout="column" flex>\n        <div ng-switch="vm_home.sidebar" style="overflow-y: auto" flex>\n            <div ng-switch-when="contacts">\n                <div ng-if="vm_home.hasPermission(102) && vm_home.license.cm" ng-include="\'app/main/apps/dashboards/views/general/agent/home/contacts/agent.general.contacts.html\'" ng-controller="AgentHomeContactsController as vm"></div>\n                <div ng-if="!vm_home.hasPermission(102) || !vm_home.license.cm" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="mycontacts">\n                <div ng-if="vm_home.hasPermission(103) && vm_home.license.cm" ng-include="\'app/main/apps/dashboards/views/general/agent/home/mycontacts/agent.general.mycontacts.html\'" ng-controller="AgentHomeMyContactsController as vm"></div>\n                <div ng-if="!vm_home.hasPermission(103) || !vm_home.license.cm" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="scheduled">\n                <div ng-if="vm_home.hasPermission(113) && vm_home.license.dialer" ng-include="\'app/main/apps/dashboards/views/general/agent/home/scheduled/agent.general.scheduled.html\'" ng-controller="AgentHomeScheduledCallsController as vm"></div>\n                <div ng-if="!vm_home.hasPermission(113) || !vm_home.license.dialer" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="voice">\n                <div ng-if="vm_home.hasPermission(110) && vm_home.license.voice" ng-include="\'app/main/apps/dashboards/views/general/agent/home/voice/agent.general.voice.html\'" ng-controller="AgentHomeVoiceController as vm"></div>\n                <div ng-if="!vm_home.hasPermission(110) || !vm_home.license.voice" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="abandoned">\n                <div ng-if="vm_home.hasPermission(111) && vm_home.license.voice" ng-include="\'app/main/apps/dashboards/views/general/agent/home/abandoned/agent.general.abandoned.html\'" ng-controller="AgentHomeAbandonedController as vm"></div>\n                <div ng-if="!vm_home.hasPermission(111) || !vm_home.license.voice" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="recordings">\n                <div ng-if="vm_home.hasPermission(104) && vm_home.license.voice" ng-include="\'app/main/apps/dashboards/views/general/agent/home/recordings/agent.general.recordings.html\'" ng-controller="AgentHomeRecordingsController as vm"></div>\n                <div ng-if="!vm_home.hasPermission(104) || !vm_home.license.voice" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="chat">\n                <div ng-if="vm_home.hasPermission(105) && vm_home.license.chat" ng-include="\'app/main/apps/dashboards/views/general/agent/home/chat/agent.general.chat.html\'" ng-controller="AgentHomeChatController as vm" ng-init="vm.onInit(vm_home.license, vm_home.setting)">\n                </div>\n                <div ng-if="!vm_home.hasPermission(105) || !vm_home.license.chat" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="mail">\n                <div ng-if="vm_home.hasPermission(106) && vm_home.license.mail" ng-include="\'app/main/apps/dashboards/views/general/agent/home/mail/agent.general.mail.html\'" ng-controller="AgentHomeMailController as vm" ng-init="vm.onInit(vm_home.license, vm_home.setting)">\n                </div>\n                <div ng-if="!vm_home.hasPermission(106) || !vm_home.license.mail" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="sms">\n                <div ng-if="vm_home.hasPermission(107) && vm_home.license.messaging" ng-include="\'app/main/apps/dashboards/views/general/agent/home/sms/agent.general.sms.html\'" ng-controller="AgentHomeSmsController as vm" ng-init="vm.onInit(vm_home.license, vm_home.setting)">\n                </div>\n                <div ng-if="!vm_home.hasPermission(107) || !vm_home.license.messaging" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="openchannel">\n                <div ng-if="vm_home.hasPermission(108) && vm_home.license.openchannel" ng-include="\'app/main/apps/dashboards/views/general/agent/home/openchannel/agent.general.openchannel.html\'" ng-controller="AgentHomeOpenchannelController as vm" ng-init="vm.onInit(vm_home.license, vm_home.setting)">\n                </div>\n                <div ng-if="!vm_home.hasPermission(108) || !vm_home.license.openchannel" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="fax">\n                <div ng-if="vm_home.hasPermission(109) && vm_home.license.fax" ng-include="\'app/main/apps/dashboards/views/general/agent/home/fax/agent.general.fax.html\'" ng-controller="AgentHomeFaxController as vm" ng-init="vm.onInit(vm_home.license, vm_home.setting)">\n                </div>\n                <div ng-if="!vm_home.hasPermission(109) || !vm_home.license.fax" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-when="plugin" layout-fill>\n                <div ng-if="vm_home.hasPermission(vm_home.pluginId)" ng-include="\'app/main/apps/dashboards/views/general/agent/home/plugins/agent.general.plugins.html\'" ng-controller="AgentHomePluginsController as vm" ng-init="vm.onInit(vm_home.license, vm_home.setting, vm_home.plugin)" layout-fill></div>\n                <div ng-if="!vm_home.hasPermission(vm_home.pluginId)" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n            <div ng-switch-default>\n                <div ng-if="vm_home.hasPermission(101)" ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/agent.general.dashboard.html\'" ng-controller=" AgentHomeDashboardController  as vm"></div>\n                <div ng-if="!vm_home.hasPermission(101)" ng-include="\'app/main/apps/dashboards/views/general/agent/home/agent.general.home.permissions.html\'">\n                </div>\n            </div>\n        </div>\n    </div>\n    <div ng-if="(vm_home.draftManager.drafts | json) != \'{}\'" layout="column" class="draft-manager-bar">\n        <ms-tab-scroll>\n            <div layout="column" ng-repeat="(key, draft) in vm_home.draftManager.drafts" class="grey-50-bg" ng-click="vm_home.draftManager.open(draft.id)">\n                <div class="draft-manager-tab" layout="row" layout-align="space-between center">\n                    <md-icon md-font-icon="icon-pencil" class="icon s16 margin-horizontal-5 black-fg"></md-icon>\n                    <span class="text-truncate font-size-12 black-fg">{{draft.title}}</span>\n                    <md-button class="md-icon-button md-mini no-margin md-primary" aria-label="close" ng-click="vm_home.draftManager.remove(draft.id)">\n                        <md-icon md-font-icon="icon-close-circle-outline" class="icon s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </ms-tab-scroll>\n    </div>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/chat/agent.general.chat.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header green-A700-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.CHAT_INTERACTIONS">Interactions</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down" exact-match-on-filter="true"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getChatInteractions()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_READ_UNREAD">Select Read/Unread</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.read" ng-change="vm.getChatInteractions()" aria-label="Filter read">\n                    <md-option value="0" translate="DASHBOARDS.UNREAD">READ</md-option>\n                    <md-option value="1" translate="DASHBOARDS.READ">UNREAD</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_STATUS">Select a status</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.closed" ng-change="vm.getChatInteractions()" aria-label="Filter status">\n                    <md-option value="0" translate="DASHBOARDS.OPENED">OPENED</md-option>\n                    <md-option value="1" translate="DASHBOARDS.CLOSED">CLOSED</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_WEBSITE">Select an account</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.ChatWebsiteId" md-selected-text="vm.quickFilterSelectedText.account" ng-change="vm.getChatInteractions()" ng-disabled="vm.chatAccounts.rows.length === 0" aria-label="Filter account">\n                    <md-option ng-repeat="chatAccount in vm.chatAccounts.rows" ng-value="chatAccount.id" ng-disabled="vm.query.ChatWebsiteId.length === 1 && vm.query.ChatWebsiteId[0] === chatAccount.id">{{chatAccount.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.ChatWebsiteId.length &lt; vm.chatAccounts.rows.length" layout-fill ng-click="vm.selectAll(\'account\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.ChatWebsiteId.length === vm.chatAccounts.rows.length" layout-fill ng-click="vm.clearSelection(\'account\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getChatInteractions()" aria-label="Filter agent">\n                    <md-option ng-value="vm.user.id" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getChatInteractions()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <div layout="column">\n                <md-button class="md-icon-button interaction-reload" aria-label="Reload" translate translate-attr-aria-label="DASHBOARDS.RELOAD" ng-click="vm.getChatInteractions()">\n                    <md-icon md-font-icon="icon-reload"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container class="interactions-list">\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getChatInteractions">\n                <tr md-row>\n                    <th class="id-header" md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column class="no-padding width-5">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column>{{\'DASHBOARDS.CONTACT\' | translate}}</th>\n                    <th md-column md-order-by="createdAt">{{\'DASHBOARDS.STARTEDAT\' | translate}}</th>\n                    <th md-column md-order-by="lastMsgAt">{{\'DASHBOARDS.LAST_MESSAGE\' | translate}}</th>\n                    <th md-column md-order-by="closed">{{\'DASHBOARDS.STATUS\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.WEBSITE\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.chatInteractions.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span translate="DASHBOARDS.NO_AVAILABLE_INTERACTION">No Available Interaction</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="chatInteraction in vm.chatInteractions.rows" ng-class="{\'text-bold text-italic\': chatInteraction.unreadMessages > 0}">\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell class="id">\n                        <div layout="row" layout-align="start center">\n                            <span class="font-size-10">{{chatInteraction.id}}</span>\n                        </div>\n                    </td>\n                    <td md-cell>\n                        <div ng-if="!chatInteraction.closed && chatInteraction.Users.length">\n                            <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                            <md-tooltip>\n                                <span ng-repeat="u in chatInteraction.Users">{{ (u.id == vm.user.id) ? \'DASHBOARDS.ME\' : vm.usersByKey[u.id].fullname | translate }}<span ng-if="!$last">, </span></span>\n                            </md-tooltip>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="!chatInteraction.closed && chatInteraction.unreadMessages > 0" layout="row" layout-align="start center">\n                            <span class="badge white-fg green-A700-bg" layout-margin>{{chatInteraction.unreadMessages}}</span>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="chatInteraction.attach" layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell>\n                        <div layout="column" layout-align="start start">\n                            <span class="font-size-12 text-truncate contact-text" ng-class="{\'no-margin-bottom\' : chatInteraction.contactInfo}" layout-margin>{{ chatInteraction.contactName }}</span>\n                            <span ng-if="chatInteraction.contactInfo" class="font-size-12 text-truncate contact-text no-margin-top" layout-margin>{{ chatInteraction.contactInfo }}</span>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell>\n                        <span class="font-size-10 text-truncate">{{chatInteraction.createdAt | formatdate }}</span>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell>\n                        <div layout="row" ng-if="chatInteraction.lastMsgAt">\n                            <span>\n                                <md-icon md-font-icon="{{chatInteraction.lastMsgDirection == \'in\' ? \'icon-arrow-down-bold blue-grey-800-fg\' : \'icon-arrow-up-bold blue-grey-300-fg\'}}"></md-icon>\n                            </span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{chatInteraction.lastMsgAt | formatdate }}</span>\n                            </div>\n                        </div>\n                        <span ng-if="!chatInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell>\n                        <span ng-if="chatInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="chatInteraction.disposition">- {{chatInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="chatInteraction.closed">{{chatInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!chatInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="chatInteraction.substatus"> - {{chatInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate width-80">{{ vm.getUserLabel(chatInteraction) }}</span>\n                    </td>\n                    <td ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell class="chatAccount">\n                        {{ vm.getChatWebsiteLabel(chatInteraction) }}\n                    </td>\n                    <td md-cell>\n                        <div ng-if="chatInteraction.Tags.length">\n                            <div layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in chatInteraction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': chatInteraction.Tags.length == 1 && chatInteraction.Tags[0].color }"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions actions-padding">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.showChatInteraction($event, chatInteraction)" translate="DASHBOARDS.SHOW">\n                                        Show Chat\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadChatInteraction($event, chatInteraction)" translate="DASHBOARDS.DOWNLOAD">\n                                        Download Chat\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-label="{page: \'{{\'DASHBOARDS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'DASHBOARDS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'DASHBOARDS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.chatInteractions.count}}" md-on-paginate="vm.getChatInteractions" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/contacts/agent.general.contacts.html",'<md-card ng-init="vm.onInit()">\n    <md-toolbar class="md-table-toolbar md-default table-header red-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools" layout="row" layout-align="center center">\n            <span class="md-subhead" translate="DASHBOARDS.CONTACTS">Contacts</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_LIST">Select a list</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.ListId" md-selected-text="vm.quickFilterSelectedText.list" ng-disabled="vm.lists.rows.length === 0" ng-change="vm.getContacts()" aria-label="Filter lists">\n                    <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows" ng-disabled="vm.query.ListId.length === 1 && vm.query.ListId[0] === list.id">{{list.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.ListId || vm.query.ListId.length &lt; vm.lists.rows.length" layout-fill ng-click="vm.selectAll(\'list\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.ListId.length === vm.lists.rows.length" layout-fill ng-click="vm.clearSelection(\'list\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getContacts()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <md-button class="md-icon-button interaction-reload" ng-click="vm.refreshContacts($event)" aria-label="Reload" translate translate-attr-label="DASHBOARDS.RELOAD">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n            </md-button>\n            <md-button ng-if="vm.crudPermissions.canEdit" class="md-icon-button interaction-new" ng-click="vm.openContact($event)" aria-label="add contact" translate translate-attr-label="DASHBOARDS.ADD_CONTACT">\n                <md-icon md-font-icon="icon-plus"></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getContacts">\n                <tr md-row>\n                    <th md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column md-order-by="firstName">{{\'DASHBOARDS.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="phone">{{\'DASHBOARDS.PHONE\' | translate}}</th>\n                    <th md-column md-order-by="mobile">{{\'DASHBOARDS.MOBILE\' | translate}}</th>\n                    <th md-column md-order-by="fax">{{\'DASHBOARDS.FAX\' | translate}}</th>\n                    <th md-column md-order-by="email">{{\'DASHBOARDS.EMAIL\' | translate}}</th>\n                    <th md-column md-order-by="ListId">{{\'DASHBOARDS.LIST\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.contacts.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="contact in vm.contacts.rows">\n                    <td ng-click="vm.openContact(contact.id)" md-cell class="id">{{contact.id}}</td>\n                    <td ng-click="vm.openContact(contact.id)" md-cell class="firstName">{{contact.firstName}} {{contact.lastName}}</td>\n                    <td ng-click="vm.openContact(contact.id)" md-cell class="phone">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="contact.phone" prefix="vm.listsMap[contact.ListId].dialPrefix" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td ng-click="vm.openContact($event, contact.id)" md-cell class="mobile">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="contact.mobile" prefix="vm.listsMap[contact.ListId].dialPrefix" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td ng-click="vm.openContact(contact.id)" md-cell class="fax">{{contact.fax}}</td>\n                    <td ng-click="vm.openContact(contact.id)" md-cell class="email">{{contact.email}}</td>\n                    <td ng-click="vm.openContact(contact.id)" md-cell class="list">{{vm.listsMap[contact.ListId].name}}</td>\n                    <td md-cell class="tag">\n                        <div ng-if="contact.Tags.length">\n                            <div ng-if="contact.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': contact.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{contact.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="contact.Tags.length > 1" layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in contact.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n\n                            <md-menu-content width="3">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.openContact(contact.id)" translate="DASHBOARDS.EDIT">\n                                        Edit Contact\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.mergeContact($event, contact)" translate="DASHBOARDS.MERGE">\n                                        Merge Contact\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.duplicateContact($event, contact)" translate="DASHBOARDS.DUPLICATE">\n                                        Duplicate Contact\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.contacts.count}}" md-on-paginate="vm.getContacts" md-page-select></md-table-pagination>\n\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/agent.general.dashboard.html",'<div ng-cloak>\n    <md-content>\n        <md-tabs md-dynamic-height md-border-bottom>\n            <md-tab ng-if="vm_home.hasPermission(110) && vm_home.license.voice" label="{{\'DASHBOARDS.VOICE\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/voice/agent.general.dashboard.voice.html\'" ng-controller="AgentHomeDashboardVoiceController as vm_voice" class="md-padding">\n                </md-content>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(110) && vm_home.license.dialer" label="{{\'DASHBOARDS.MOTION_BULL\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/bull/agent.general.dashboard.bull.html\'" ng-controller="AgentHomeDashboardBullController as vm_bull" class="md-padding">\n                </md-content>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(105) && vm_home.license.chat" label="{{\'DASHBOARDS.CHAT\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/chat/agent.general.dashboard.chat.html\'" ng-controller="AgentHomeDashboardMultiChannelChatController as vm_chat" class="md-padding">\n                </md-content>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(106) && vm_home.license.mail" label="{{\'DASHBOARDS.MAIL\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/mail/agent.general.dashboard.mail.html\'" ng-controller="AgentHomeDashboardMultiChannelMailController as vm_mail" class="md-padding">\n                </md-content>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(107) && vm_home.license.messaging" label="{{\'DASHBOARDS.SMS\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/sms/agent.general.dashboard.sms.html\'" ng-controller="AgentHomeDashboardMultiChannelSmsController as vm_sms" class="md-padding">\n                </md-content>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(108) && vm_home.license.openchannel" label="{{\'DASHBOARDS.OPENCHANNEL\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/openchannel/agent.general.dashboard.openchannel.html\'" ng-controller="AgentHomeDashboardMultiChannelOpenchannelController as vm_openchannel" class="md-padding">\n                </md-content>\n            </md-tab>\n            <md-tab ng-if="vm_home.hasPermission(109) && vm_home.license.fax" label="{{\'DASHBOARDS.FAX\' | translate}}">\n                <md-content ng-include="\'app/main/apps/dashboards/views/general/agent/home/dashboard/fax/agent.general.dashboard.fax.html\'" ng-controller="AgentHomeDashboardMultiChannelFaxController as vm_fax" class="md-padding">\n                </md-content>\n            </md-tab>\n        </md-tabs>\n    </md-content>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/bull/agent.general.dashboard.bull.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header red-900-bg">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="VOICE.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_bull.promise">\n                <thead md-head md-order="vm_bull.query.sort" md-on-reorder="vm_bull.getVoiceQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'VOICE.NAME\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.TYPE\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.WAITING\' | translate }}</th>\n                        <th ng-if="voiceQueue.type === \'outbound\'" md-column>{{ \'VOICE.ACTIVE\' | translate }}</th>\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_bull.getSize(vm_bull.voiceQueues)">\n                        <td md-cell colspan="4">\n                            <div layout="row" layout-align="center center">\n                                <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, voiceQueue) in vm_bull.voiceQueues">\n                        <td md-cell class="name">{{voiceQueue.name}}</td>\n                        <td ng-if="voiceQueue.type === \'outbound\'" md-cell class="waiting">{{voiceQueue.dialMethod}}</td>\n                        <td md-cell class="waiting">{{voiceQueue.waiting || 0}}</td>\n                        <td md-cell ng-if="voiceQueue.type === \'outbound\'" class="dialActive ">\n                            <md-icon md-colors="{color: {{voiceQueue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{voiceQueue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_bull.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_bull.query.page" md-total="{{vm_bull.voiceQueuesTotal}}" md-on-paginate="vm_bull.getVoiceQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header red-900-bg">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'VOICE.DID\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.CALLER\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_bull.getSize(vm_bull.rpcVoiceQueuesChannels)">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, channel) in vm_bull.rpcVoiceQueuesChannels | limitObjectFromTo: vm_bull.queryChannels.limit:(vm_bull.queryChannels.page - 1) * vm_bull.queryChannels.limit">\n                        <td md-cell>{{channel.exten}}</td>\n                        <td md-cell>{{channel.queue}}</td>\n                        <td md-cell>{{channel.calleridnum}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_bull.queryChannels.limit" md-page="vm_bull.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_bull.getSize(vm_bull.rpcVoiceQueuesChannels)}}" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/chat/agent.general.dashboard.chat.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_chat.getColorByChannel(\'chat\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_chat.promise">\n                <thead md-head md-order="vm_chat.query.sort" md-on-reorder="vm_chat.getChatQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.NAME\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.WAITING\' | translate }}</th>\n                        \x3c!-- <th md-column>{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_chat.getSize(vm_chat.chatQueues)">\n                        <td md-cell colspan="2">\n                            <div layout="row" layout-align="center center">\n                                <span translate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, queue) in vm_chat.chatQueues">\n                        <td md-cell class="name">{{queue.name}}</td>\n                        <td md-cell class="waiting">{{queue.waiting || 0}}</td>\n                        \x3c!-- <td md-cell class="dialActive ">\n                            <md-icon ng-if="queue.type === \'outbound\'" md-colors="{color: {{queue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{queue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            <md-icon ng-if="queue.type === \'inbound\'" md-colors="{color: \'green\'}" md-font-icon="icon-check"></md-icon>\n                        </td> --\x3e\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_chat.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_chat.query.page" md-total="{{vm_chat.chatQueuesTotal}}" md-on-paginate="vm_chat.getChatQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_chat.getColorByChannel(\'chat\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.CHANNEL_WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.ACCOUNT\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_FROM\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_chat.paginatedInteractions.length">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span translate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, interaction) in vm_chat.interactions">\n                        <td md-cell>{{interaction.account}}</td>\n                        <td md-cell>{{interaction.queue}}</td>\n                        <td md-cell>{{interaction.from}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_chat.queryChannels.limit" md-page="vm_chat.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_chat.paginatedInteractions.length}}" md-on-paginate="vm_chat.paginate" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/fax/agent.general.dashboard.fax.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_fax.getColorByChannel(\'fax\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_fax.promise">\n                <thead md-head md-order="vm_fax.query.sort" md-on-reorder="vm_fax.getFaxQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.NAME\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.WAITING\' | translate }}</th>\n                        \x3c!-- <th md-column>{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_fax.getSize(vm_fax.faxQueues)">\n                        <td md-cell colspan="2">\n                            <div layout="row" layout-align="center center">\n                                <span translate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, queue) in vm_fax.faxQueues">\n                        <td md-cell class="name">{{queue.name}}</td>\n                        <td md-cell class="waiting">{{queue.waiting || 0}}</td>\n                        \x3c!-- <td md-cell class="dialActive ">\n                            <md-icon ng-if="queue.type === \'outbound\'" md-colors="{color: {{queue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{queue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            <md-icon ng-if="queue.type === \'inbound\'" md-colors="{color: \'green\'}" md-font-icon="icon-check"></md-icon>\n                        </td> --\x3e\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_fax.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_fax.query.page" md-total="{{vm_fax.faxQueuesTotal}}" md-on-paginate="vm_fax.getFaxQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_fax.getColorByChannel(\'fax\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.CHANNEL_WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.ACCOUNT\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_FROM\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_fax.paginatedInteractions.length">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span translate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, interaction) in vm_fax.interactions">\n                        <td md-cell>{{interaction.account}}</td>\n                        <td md-cell>{{interaction.queue}}</td>\n                        <td md-cell>{{interaction.from}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_fax.queryChannels.limit" md-page="vm_fax.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_fax.paginatedInteractions.length}}" md-on-paginate="vm_fax.paginate" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/mail/agent.general.dashboard.mail.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_mail.getColorByChannel(\'mail\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_mail.promise">\n                <thead md-head md-order="vm_mail.query.sort" md-on-reorder="vm_mail.getMailQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.NAME\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.WAITING\' | translate }}</th>\n                        \x3c!-- <th md-column>{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_mail.getSize(vm_mail.mailQueues)">\n                        <td md-cell colspan="2">\n                            <div layout="row" layout-align="center center">\n                                <span translate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, queue) in vm_mail.mailQueues">\n                        <td md-cell class="name">{{queue.name}}</td>\n                        <td md-cell class="waiting">{{queue.waiting || 0}}</td>\n                        \x3c!-- <td md-cell class="dialActive ">\n                            <md-icon ng-if="queue.type === \'outbound\'" md-colors="{color: {{queue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{queue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            <md-icon ng-if="queue.type === \'inbound\'" md-colors="{color: \'green\'}" md-font-icon="icon-check"></md-icon>\n                        </td> --\x3e\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_mail.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_mail.query.page" md-total="{{vm_mail.mailQueuesTotal}}" md-on-paginate="vm_mail.getMailQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_mail.getColorByChannel(\'mail\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.CHANNEL_WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.ACCOUNT\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_FROM\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_mail.paginatedInteractions.length">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span translate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, interaction) in vm_mail.interactions">\n                        <td md-cell>{{interaction.account}}</td>\n                        <td md-cell>{{interaction.queue}}</td>\n                        <td md-cell>{{interaction.from}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_mail.queryChannels.limit" md-page="vm_mail.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_mail.paginatedInteractions.length}}" md-on-paginate="vm_mail.paginate" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/openchannel/agent.general.dashboard.openchannel.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_openchannel.getColorByChannel(\'openchannel\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_openchannel.promise">\n                <thead md-head md-order="vm_openchannel.query.sort" md-on-reorder="vm_openchannel.getOpenchannelQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.NAME\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.WAITING\' | translate }}</th>\n                        \x3c!-- <th md-column>{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_openchannel.getSize(vm_openchannel.openchannelQueues)">\n                        <td md-cell colspan="2">\n                            <div layout="row" layout-align="center center">\n                                <span translate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, queue) in vm_openchannel.openchannelQueues">\n                        <td md-cell class="name">{{queue.name}}</td>\n                        <td md-cell class="waiting">{{queue.waiting || 0}}</td>\n                        \x3c!-- <td md-cell class="dialActive ">\n                            <md-icon ng-if="queue.type === \'outbound\'" md-colors="{color: {{queue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{queue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            <md-icon ng-if="queue.type === \'inbound\'" md-colors="{color: \'green\'}" md-font-icon="icon-check"></md-icon>\n                        </td> --\x3e\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_openchannel.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_openchannel.query.page" md-total="{{vm_openchannel.openchannelQueuesTotal}}" md-on-paginate="vm_openchannel.getOpenchannelQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_openchannel.getColorByChannel(\'openchannel\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.CHANNEL_WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.ACCOUNT\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_FROM\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_openchannel.paginatedInteractions.length">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span translate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, interaction) in vm_openchannel.interactions">\n                        <td md-cell>{{interaction.account}}</td>\n                        <td md-cell>{{interaction.queue}}</td>\n                        <td md-cell>{{interaction.from}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_openchannel.queryChannels.limit" md-page="vm_openchannel.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_openchannel.paginatedInteractions.length}}" md-on-paginate="vm_openchannel.paginate" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/sms/agent.general.dashboard.sms.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_sms.getColorByChannel(\'sms\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_sms.promise">\n                <thead md-head md-order="vm_sms.query.sort" md-on-reorder="vm_sms.getSmsQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.NAME\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.WAITING\' | translate }}</th>\n                        \x3c!-- <th md-column>{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_sms.getSize(vm_sms.smsQueues)">\n                        <td md-cell colspan="2">\n                            <div layout="row" layout-align="center center">\n                                <span translate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, queue) in vm_sms.smsQueues">\n                        <td md-cell class="name">{{queue.name}}</td>\n                        <td md-cell class="waiting">{{queue.waiting || 0}}</td>\n                        \x3c!-- <td md-cell class="dialActive ">\n                            <md-icon ng-if="queue.type === \'outbound\'" md-colors="{color: {{queue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{queue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                            <md-icon ng-if="queue.type === \'inbound\'" md-colors="{color: \'green\'}" md-font-icon="icon-check"></md-icon>\n                        </td> --\x3e\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_sms.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_sms.query.page" md-total="{{vm_sms.smsQueuesTotal}}" md-on-paginate="vm_sms.getSmsQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header" ng-class="vm_sms.getColorByChannel(\'sms\')">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.CHANNEL_WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'DASHBOARDS.ACCOUNT\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'DASHBOARDS.CHANNEL_FROM\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_sms.paginatedInteractions.length">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span translate="DASHBOARDS.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, interaction) in vm_sms.interactions">\n                        <td md-cell>{{interaction.account}}</td>\n                        <td md-cell>{{interaction.queue}}</td>\n                        <td md-cell>{{interaction.from}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_sms.queryChannels.limit" md-page="vm_sms.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_sms.paginatedInteractions.length}}" md-on-paginate="vm_sms.paginate" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/dashboard/voice/agent.general.dashboard.voice.html",'<div layout="row" ngCloak>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header blue-A700-bg ">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="VOICE.QUEUES">Queues</span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table md-progress="vm_voice.promise">\n                <thead md-head md-order="vm_voice.query.sort" md-on-reorder="vm_voice.getVoiceQueues">\n                    <tr md-row>\n                        <th md-column>{{ \'VOICE.NAME\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.WAITING\' | translate }}</th>\n                        <th ng-if="voiceQueue.type === \'outbound\'" md-column>{{ \'VOICE.ACTIVE\' | translate }}</th>\n                        \x3c!-- <th md-column md-order-by="active">{{ \'VOICE.ACTIVE\' | translate }}</th> --\x3e\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_voice.getSize(vm_voice.voiceQueues)">\n                        <td md-cell colspan="2">\n                            <div layout="row" layout-align="center center">\n                                <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, voiceQueue) in vm_voice.voiceQueues">\n                        <td md-cell class="name">{{voiceQueue.name}}</td>\n                        <td ng-if="voiceQueue.type === \'outbound\'" md-cell class="waiting">{{voiceQueue.dialMethod}}</td>\n                        <td md-cell class="waiting">{{voiceQueue.waiting || 0}}</td>\n                        <td md-cell ng-if="voiceQueue.type === \'outbound\'" class="dialActive ">\n                            <md-icon md-colors="{color: {{voiceQueue.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{voiceQueue.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_voice.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_voice.query.page" md-total="{{vm_voice.voiceQueuesTotal}}" md-on-paginate="vm_voice.getVoiceQueues" md-page-select></md-table-pagination>\n    </md-card>\n    <md-card flex="50">\n        <md-toolbar class="md-table-toolbar md-default table-header blue-A700-bg ">\n            <div class="md-toolbar-tools">\n                <span class="md-subhead" translate="DASHBOARDS.WAITING_TEXT"></span>\n                <div flex></div>\n            </div>\n        </md-toolbar>\n        <md-table-container>\n            <table md-table>\n                <thead md-head>\n                    <tr md-row>\n                        <th md-column>{{ \'VOICE.DID\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.QUEUE\' | translate }}</th>\n                        <th md-column>{{ \'VOICE.CALLER\' | translate }}</th>\n                    </tr>\n                </thead>\n                <tbody md-body>\n                    <tr md-row ng-hide="vm_voice.getSize(vm_voice.rpcVoiceQueuesChannels)">\n                        <td md-cell colspan="3">\n                            <div layout="row" layout-align="center center">\n                                <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr md-row ng-repeat="(key, channel) in vm_voice.rpcVoiceQueuesChannels | limitObjectFromTo: vm_voice.queryChannels.limit:(vm_voice.queryChannels.page - 1) * vm_voice.queryChannels.limit">\n                        <td md-cell>{{channel.exten}}</td>\n                        <td md-cell>{{channel.queue}}</td>\n                        <td md-cell>{{channel.calleridnum}}</td>\n                    </tr>\n                </tbody>\n            </table>\n        </md-table-container>\n\n        <md-table-pagination md-limit="vm_voice.queryChannels.limit" md-page="vm_voice.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm_voice.getSize(vm_voice.rpcVoiceQueuesChannels)}}" md-page-select></md-table-pagination>\n    </md-card>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/fax/agent.general.fax.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header blue-grey-A200-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.FAX_INTERACTIONS">Interactions</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down" exact-match-on-filter="true"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getFaxInteractions()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_READ_UNREAD">Select Read/Unread</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.read" ng-change="vm.getFaxInteractions()" aria-label="Filter read">\n                    <md-option value="0" translate="DASHBOARDS.UNREAD">READ</md-option>\n                    <md-option value="1" translate="DASHBOARDS.READ">UNREAD</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_STATUS">Select a status</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.closed" ng-change="vm.getFaxInteractions()" aria-label="Filter status">\n                    <md-option value="0" translate="DASHBOARDS.OPENED">OPENED</md-option>\n                    <md-option value="1" translate="DASHBOARDS.CLOSED">CLOSED</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_ACCOUNT">Select an account</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.FaxAccountId" md-selected-text="vm.quickFilterSelectedText.account" ng-change="vm.getFaxInteractions()" ng-disabled="vm.faxAccounts.rows.length === 0" aria-label="Filter account">\n                    <md-option ng-repeat="faxAccount in vm.faxAccounts.rows" ng-value="faxAccount.id" ng-disabled="vm.query.FaxAccountId.length === 1 && vm.query.FaxAccountId[0] === faxAccount.id">{{faxAccount.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.FaxAccountId.length &lt; vm.faxAccounts.rows.length" layout-fill ng-click="vm.selectAll(\'account\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.FaxAccountId.length === vm.faxAccounts.rows.length" layout-fill ng-click="vm.clearSelection(\'account\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getFaxInteractions()" aria-label="Filter agent">\n                    <md-option ng-value="vm.user.id" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getFaxInteractions()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <div layout="column">\n                <md-button class="md-icon-button interaction-reload" aria-label="Reload" translate translate-attr-aria-label="DASHBOARDS.RELOAD" ng-click="vm.getFaxInteractions()">\n                    <md-icon md-font-icon="icon-reload"></md-icon>\n                </md-button>\n            </div>\n            <md-menu ng-if="vm.faxAccounts.rows && vm.faxAccounts.rows.length">\n                <md-button class="md-icon-button interaction-new" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                    <md-icon md-font-icon="icon-plus"></md-icon>\n                </md-button>\n                <md-menu-content width="3">\n                    <md-menu-item ng-repeat="faxAccount in vm.faxAccounts.rows">\n                        <md-button aria-label="compose" ng-click="vm.composeFaxInteraction($event, faxAccount)">{{ faxAccount.name }} ({{ faxAccount.key }})</md-button>\n                    </md-menu-item>\n                </md-menu-content>\n            </md-menu>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container class="interactions-list">\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getFaxInteractions">\n                <tr md-row>\n                    <th class="id-header" md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column class="no-padding width-5">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column>{{\'DASHBOARDS.CONTACT\' | translate}}</th>\n                    <th md-column md-order-by="createdAt">{{\'DASHBOARDS.STARTEDAT\' | translate}}</th>\n                    <th md-column md-order-by="lastMsgAt">{{\'DASHBOARDS.LAST_MESSAGE\' | translate}}</th>\n                    <th md-column md-order-by="closed">{{\'DASHBOARDS.STATUS\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.faxInteractions.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span translate="DASHBOARDS.NO_AVAILABLE_INTERACTION">No Available Interaction</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="faxInteraction in vm.faxInteractions.rows" ng-class="{\'text-bold text-italic\': faxInteraction.unreadMessages > 0}">\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell class="id">\n                        <div layout="row" layout-align="start center">\n                            <span class="font-size-10">{{faxInteraction.id}}</span>\n                        </div>\n                    </td>\n                    <td md-cell>\n                        <div ng-if="!faxInteraction.closed && faxInteraction.Users.length">\n                            <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                            <md-tooltip>\n                                <span ng-repeat="u in faxInteraction.Users">{{ (u.id == vm.user.id) ? \'DASHBOARDS.ME\' : vm.usersByKey[u.id].fullname | translate }}<span ng-if="!$last">, </span></span>\n                            </md-tooltip>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="!faxInteraction.closed && faxInteraction.unreadMessages > 0" layout="row" layout-align="start center">\n                            <span class="badge white-fg blue-grey-A200-bg" layout-margin>{{faxInteraction.unreadMessages}}</span>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="faxInteraction.attach" layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell>\n                        <div layout="column" layout-align="start start">\n                            <span class="font-size-12 text-truncate contact-text" ng-class="{\'no-margin-bottom\' : faxInteraction.contactInfo}" layout-margin>{{ faxInteraction.contactName }}</span>\n                            <span ng-if="faxInteraction.contactInfo" class="font-size-12 text-truncate contact-text no-margin-top" layout-margin>{{ faxInteraction.contactInfo }}</span>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell>\n                        <span class="font-size-10 text-truncate">{{faxInteraction.createdAt | formatdate }}</span>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell>\n                        <div layout="row" ng-if="faxInteraction.lastMsgAt">\n                            <span>\n                                <md-icon md-font-icon="{{faxInteraction.lastMsgDirection == \'in\' ? \'icon-arrow-down-bold blue-grey-800-fg\' : \'icon-arrow-up-bold blue-grey-300-fg\'}}"></md-icon>\n                            </span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{faxInteraction.lastMsgAt | formatdate }}</span>\n                            </div>\n                        </div>\n                        <span ng-if="!faxInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell>\n                        <span ng-if="faxInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="faxInteraction.disposition">- {{faxInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="faxInteraction.closed">{{faxInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!faxInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="faxInteraction.substatus"> - {{faxInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate width-80">{{ vm.getUserLabel(faxInteraction) }}</span>\n                    </td>\n                    <td ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell class="faxAccount">\n                        {{ vm.getFaxAccountLabel(faxInteraction) }}\n                    </td>\n                    <td md-cell>\n                        <div ng-if="faxInteraction.Tags.length">\n                            <div layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in faxInteraction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': faxInteraction.Tags.length == 1 && faxInteraction.Tags[0].color }"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions actions-padding">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.showFaxInteraction($event, faxInteraction)" translate="DASHBOARDS.SHOW">\n                                        Show Fax\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadFaxInteraction($event, faxInteraction)" translate="DASHBOARDS.DOWNLOAD">\n                                        Download Fax\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-label="{page: \'{{\'DASHBOARDS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'DASHBOARDS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'DASHBOARDS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.faxInteractions.count}}" md-on-paginate="vm.getFaxInteractions" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/mail/agent.general.mail.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header teal-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.MAIL_INTERACTIONS">Interactions</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down" exact-match-on-filter="true"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getMailInteractions()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_READ_UNREAD">Select Read/Unread</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.read" ng-change="vm.getMailInteractions()" aria-label="Filter read">\n                    <md-option value="0" translate="DASHBOARDS.UNREAD">READ</md-option>\n                    <md-option value="1" translate="DASHBOARDS.READ">UNREAD</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_STATUS">Select a status</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.closed" ng-change="vm.getMailInteractions()" aria-label="Filter status">\n                    <md-option value="0" translate="DASHBOARDS.OPENED">OPENED</md-option>\n                    <md-option value="1" translate="DASHBOARDS.CLOSED">CLOSED</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column" ng-if="vm.query.closed == 0">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_SUBSTATUS">Select a sub status</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.substatus" ng-change="vm.getMailInteractions()" aria-label="Filter sub status">\n                    <md-option ng-repeat="subStatus in vm.subStatuses.rows" ng-value="subStatus.name">{{subStatus.name}}</md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NONE"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_ACCOUNT">Select an account</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.MailAccountId" md-selected-text="vm.quickFilterSelectedText.account" ng-change="vm.getMailInteractions()" ng-disabled="vm.mailAccounts.rows.length === 0" aria-label="Filter account">\n                    <md-option ng-repeat="mailAccount in vm.mailAccounts.rows" ng-value="mailAccount.id" ng-disabled="vm.query.MailAccountId.length === 1 && vm.query.MailAccountId[0] === mailAccount.id">{{mailAccount.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.MailAccountId.length &lt; vm.mailAccounts.rows.length" layout-fill ng-click="vm.selectAll(\'account\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.MailAccountId.length === vm.mailAccounts.rows.length" layout-fill ng-click="vm.clearSelection(\'account\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getMailInteractions()" aria-label="Filter agent">\n                    <md-option ng-value="vm.user.id" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getMailInteractions()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <div layout="column">\n                <md-button class="md-icon-button interaction-reload" aria-label="Reload" translate translate-attr-aria-label="DASHBOARDS.RELOAD" ng-click="vm.getMailInteractions()">\n                    <md-icon md-font-icon="icon-reload"></md-icon>\n                </md-button>\n            </div>\n            <md-menu ng-if="vm.mailAccounts.rows && vm.mailAccounts.rows.length">\n                <md-button class="md-icon-button interaction-new" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                    <md-icon md-font-icon="icon-plus"></md-icon>\n                </md-button>\n                <md-menu-content width="3">\n                    <md-menu-item ng-repeat="mailAccount in vm.mailAccounts.rows">\n                        <md-button aria-label="compose" ng-click="vm.composeMailInteraction($event, mailAccount)">{{ mailAccount.name }} ({{ mailAccount.key }})</md-button>\n                    </md-menu-item>\n                </md-menu-content>\n            </md-menu>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container class="interactions-list">\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMailInteractions">\n                <tr md-row>\n                    <th class="id-header" md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column class="no-padding width-5">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column>{{\'DASHBOARDS.CONTACT\' | translate}}</th>\n                    <th md-column md-order-by="subject">{{\'DASHBOARDS.SUBJECT\' | translate}}</th>\n                    <th md-column md-order-by="createdAt">{{\'DASHBOARDS.STARTEDAT\' | translate}}</th>\n                    <th md-column md-order-by="lastMsgAt">{{\'DASHBOARDS.LAST_MESSAGE\' | translate}}</th>\n                    <th md-column md-order-by="closed">{{\'DASHBOARDS.STATUS\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.mailInteractions.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span translate="DASHBOARDS.NO_AVAILABLE_INTERACTION">No Available Interaction</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="mailInteraction in vm.mailInteractions.rows" ng-class="{\'text-bold text-italic\': mailInteraction.unreadMessages > 0}">\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell class="id">\n                        <div layout="row" layout-align="start center">\n                            <span class="font-size-10">{{mailInteraction.id}}</span>\n                        </div>\n                    </td>\n                    <td md-cell>\n                        <div ng-if="!mailInteraction.closed && mailInteraction.Users.length">\n                            <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                            <md-tooltip>\n                                <span ng-repeat="u in mailInteraction.Users">{{ (u.id == vm.user.id) ? \'DASHBOARDS.ME\' : vm.usersByKey[u.id].fullname | translate }}<span ng-if="!$last">, </span></span>\n                            </md-tooltip>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="!mailInteraction.closed && mailInteraction.unreadMessages > 0" layout="row" layout-align="start center">\n                            <span class="badge white-fg teal-bg" layout-margin>{{mailInteraction.unreadMessages}}</span>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="mailInteraction.attach" layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <div layout="column" layout-align="start start">\n                            <span class="font-size-12 text-truncate contact-text" ng-class="{\'no-margin-bottom\' : mailInteraction.contactInfo}" layout-margin>{{ mailInteraction.contactName }}</span>\n                            <span ng-if="mailInteraction.contactInfo" class="font-size-12 text-truncate contact-text no-margin-top" layout-margin>{{ mailInteraction.contactInfo }}</span>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <div ng-if="vm.setting.enableEmailPreview && mailInteraction.lastMsgText" class="tooltip-preview">\n                            <span class="text-truncate font-size-12 subject-text">{{ mailInteraction.subject }}</span>\n                            <md-card class="tooltip-preview-text" ng-style="{top: \'-\' + ((($index % 10) + 1) * 18) + \'px\'}">\n                                <md-card-content><span class="email-preview-message">{{ mailInteraction.lastMsgText }}</span></md-card-content>\n                            </md-card>\n                        </div>\n                        <span ng-if="!mailInteraction.lastMsgText || !vm.setting.enableEmailPreview" class="text-truncate font-size-12">{{ mailInteraction.subject }}</span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <span class="font-size-10 text-truncate">{{mailInteraction.createdAt | formatdate }}</span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <div layout="row" ng-if="mailInteraction.lastMsgAt">\n                            <span>\n                                <md-icon md-font-icon="{{mailInteraction.lastMsgDirection == \'in\' ? \'icon-arrow-down-bold blue-grey-800-fg\' : \'icon-arrow-up-bold blue-grey-300-fg\'}}"></md-icon>\n                            </span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{mailInteraction.lastMsgAt | formatdate }}</span>\n                            </div>\n                        </div>\n                        <span ng-if="!mailInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <span ng-if="mailInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="mailInteraction.disposition">- {{mailInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="mailInteraction.closed">{{mailInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!mailInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="mailInteraction.substatus"> - {{mailInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate width-80">{{ vm.getUserLabel(mailInteraction) }}</span>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell class="mailAccount">\n                        {{ vm.getMailAccountLabel(mailInteraction) }}\n                    </td>\n                    <td md-cell>\n                        <div ng-if="mailInteraction.Tags.length">\n                            <div layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in mailInteraction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': mailInteraction.Tags.length == 1 && mailInteraction.Tags[0].color }"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions actions-padding">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.showMailInteraction($event, mailInteraction)" translate="DASHBOARDS.SHOW">\n                                        Show Mail\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadMailInteraction($event, mailInteraction, true)" translate="MAIL.DOWNLOAD_WITH_ATTACHMENTS">\n                                        Download with attachments\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadMailInteraction($event, mailInteraction)" translate="MAIL.DOWNLOAD_WITHOUT_ATTACHMENTS">\n                                        Download without attachments\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-label="{page: \'{{\'DASHBOARDS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'DASHBOARDS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'DASHBOARDS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.mailInteractions.count}}" md-on-paginate="vm.getMailInteractions" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/mycontacts/agent.general.mycontacts.html",'<md-card ng-init="vm.onInit()">\n    <md-toolbar class="md-table-toolbar md-default table-header red-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools" layout="row" layout-align="center center">\n            <span class="md-subhead" translate="DASHBOARDS.MYCONTACTS">My Contacts</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_LIST">Select a list</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.ListId" md-selected-text="vm.quickFilterSelectedText.list" ng-change="vm.getContacts()" aria-label="Filter lists">\n                    <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows" ng-disabled="vm.query.ListId.length === 1 && vm.query.ListId[0] === list.id">{{list.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.ListId || vm.query.ListId.length &lt; vm.lists.rows.length" layout-fill ng-click="vm.selectAll(\'list\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.ListId.length === vm.lists.rows.length" layout-fill ng-click="vm.clearSelection(\'list\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getContacts()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <md-button class="md-icon-button interaction-reload" ng-click="vm.refreshContacts($event)" aria-label="Reload" translate translate-attr-label="DASHBOARDS.RELOAD">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n            </md-button>\n            <md-button class="md-icon-button interaction-new" ng-click="vm.openContact($event)" aria-label="add contact" translate translate-attr-label="DASHBOARDS.ADD_CONTACT">\n                <md-icon md-font-icon="icon-plus "></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getContacts">\n                <tr md-row>\n                    <th md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column md-order-by="firstName">{{\'DASHBOARDS.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="phone">{{\'DASHBOARDS.PHONE\' | translate}}</th>\n                    <th md-column md-order-by="mobile">{{\'DASHBOARDS.MOBILE\' | translate}}</th>\n                    <th md-column md-order-by="fax">{{\'DASHBOARDS.FAX\' | translate}}</th>\n                    <th md-column md-order-by="email">{{\'DASHBOARDS.EMAIL\' | translate}}</th>\n                    <th md-column md-order-by="ListId">{{\'DASHBOARDS.LIST\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.contacts.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="contact in vm.contacts.rows">\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="id">{{contact.id}}</td>\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="firstName">{{contact.firstName}} {{contact.lastName}}</td>\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="phone">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="contact.phone" prefix="vm.listsMap[contact.ListId].dialPrefix" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="mobile">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="contact.mobile" prefix="vm.listsMap[contact.ListId].dialPrefix" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="fax">{{contact.fax}}</td>\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="email">{{contact.email}}</td>\n                    <td ng-click="vm.openContact($event, contact)" md-cell class="list">{{vm.listsMap[contact.ListId].name}}</td>\n                    <td md-cell class="tag">\n                        <div ng-if="contact.Tags.length">\n                            <div ng-if="contact.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': contact.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{contact.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="contact.Tags.length > 1" layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in contact.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n\n                            <md-menu-content width="3">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.openContact($event, contact)" translate="DASHBOARDS.EDIT">\n                                        Edit Contact\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.mergeContact($event, contact)" translate="DASHBOARDS.MERGE">\n                                        Merge Contact\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.duplicateContact($event, contact)" translate="DASHBOARDS.DUPLICATE">\n                                        Duplicate Contact\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.contacts.count}}" md-on-paginate="vm.getContacts" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/openchannel/agent.general.openchannel.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header amber-A200-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.OPENCHANNEL_INTERACTIONS">Interactions</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down" exact-match-on-filter="true"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getOpenchannelInteractions()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_READ_UNREAD">Select Read/Unread</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.read" ng-change="vm.getOpenchannelInteractions()" aria-label="Filter read">\n                    <md-option value="0" translate="DASHBOARDS.UNREAD">READ</md-option>\n                    <md-option value="1" translate="DASHBOARDS.READ">UNREAD</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_STATUS">Select a status</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.closed" ng-change="vm.getOpenchannelInteractions()" aria-label="Filter status">\n                    <md-option value="0" translate="DASHBOARDS.OPENED">OPENED</md-option>\n                    <md-option value="1" translate="DASHBOARDS.CLOSED">CLOSED</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_ACCOUNT">Select an account</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.OpenchannelAccountId" md-selected-text="vm.quickFilterSelectedText.account" ng-change="vm.getOpenchannelInteractions()" ng-disabled="vm.openchannelAccounts.rows.length === 0" aria-label="Filter account">\n                    <md-option ng-repeat="openchannelAccount in vm.openchannelAccounts.rows" ng-value="openchannelAccount.id" ng-disabled="vm.query.OpenchannelAccountId.length === 1 && vm.query.OpenchannelAccountId[0] === openchannelAccount.id">{{openchannelAccount.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.OpenchannelAccountId.length &lt; vm.openchannelAccounts.rows.length" layout-fill ng-click="vm.selectAll(\'account\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.OpenchannelAccountId.length === vm.openchannelAccounts.rows.length" layout-fill ng-click="vm.clearSelection(\'account\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getOpenchannelInteractions()" aria-label="Filter agent">\n                    <md-option ng-value="vm.user.id" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getOpenchannelInteractions()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <div layout="column">\n                <md-button class="md-icon-button interaction-reload" aria-label="Reload" translate translate-attr-aria-label="DASHBOARDS.RELOAD" ng-click="vm.getOpenchannelInteractions()">\n                    <md-icon md-font-icon="icon-reload"></md-icon>\n                </md-button>\n            </div>\n            <md-menu ng-if="vm.openchannelAccounts.rows && vm.openchannelAccounts.rows.length">\n                <md-button class="md-icon-button interaction-new" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                    <md-icon md-font-icon="icon-plus"></md-icon>\n                </md-button>\n                <md-menu-content width="3">\n                    <md-menu-item ng-repeat="openchannelAccount in vm.openchannelAccounts.rows">\n                        <md-button aria-label="compose" ng-click="vm.composeOpenchannelInteraction($event, openchannelAccount)">{{ openchannelAccount.name }} ({{ openchannelAccount.key }})</md-button>\n                    </md-menu-item>\n                </md-menu-content>\n            </md-menu>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container class="interactions-list">\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getOpenchannelInteractions">\n                <tr md-row>\n                    <th class="id-header" md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column class="no-padding width-5">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column>{{\'DASHBOARDS.CONTACT\' | translate}}</th>\n                    <th md-column md-order-by="createdAt">{{\'DASHBOARDS.STARTEDAT\' | translate}}</th>\n                    <th md-column md-order-by="lastMsgAt">{{\'DASHBOARDS.LAST_MESSAGE\' | translate}}</th>\n                    <th md-column md-order-by="closed">{{\'DASHBOARDS.STATUS\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.openchannelInteractions.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span translate="DASHBOARDS.NO_AVAILABLE_INTERACTION">No Available Interaction</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="openchannelInteraction in vm.openchannelInteractions.rows" ng-class="{\'text-bold text-italic\': openchannelInteraction.unreadMessages > 0}">\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell class="id">\n                        <div layout="row" layout-align="start center">\n                            <span class="font-size-10">{{openchannelInteraction.id}}</span>\n                        </div>\n                    </td>\n                    <td md-cell>\n                        <div ng-if="!openchannelInteraction.closed && openchannelInteraction.Users.length">\n                            <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                            <md-tooltip>\n                                <span ng-repeat="u in openchannelInteraction.Users">{{ (u.id == vm.user.id) ? \'DASHBOARDS.ME\' : vm.usersByKey[u.id].fullname | translate }}<span ng-if="!$last">, </span></span>\n                            </md-tooltip>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="!openchannelInteraction.closed && openchannelInteraction.unreadMessages > 0" layout="row" layout-align="start center">\n                            <span class="badge white-fg amber-A200-bg" layout-margin>{{openchannelInteraction.unreadMessages}}</span>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="openchannelInteraction.attach" layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell>\n                        <div layout="column" layout-align="start start">\n                            <span class="font-size-12 text-truncate contact-text" ng-class="{\'no-margin-bottom\' : openchannelInteraction.contactInfo}" layout-margin>{{ openchannelInteraction.contactName }}</span>\n                            <span ng-if="openchannelInteraction.contactInfo" class="font-size-12 text-truncate contact-text no-margin-top" layout-margin>{{ openchannelInteraction.contactInfo }}</span>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell>\n                        <span class="font-size-10 text-truncate">{{openchannelInteraction.createdAt | formatdate }}</span>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell>\n                        <div layout="row" ng-if="openchannelInteraction.lastMsgAt">\n                            <span>\n                                <md-icon md-font-icon="{{openchannelInteraction.lastMsgDirection == \'in\' ? \'icon-arrow-down-bold blue-grey-800-fg\' : \'icon-arrow-up-bold blue-grey-300-fg\'}}"></md-icon>\n                            </span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{openchannelInteraction.lastMsgAt | formatdate }}</span>\n                            </div>\n                        </div>\n                        <span ng-if="!openchannelInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell>\n                        <span ng-if="openchannelInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="openchannelInteraction.disposition">- {{openchannelInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="openchannelInteraction.closed">{{openchannelInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!openchannelInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="openchannelInteraction.substatus"> - {{openchannelInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate width-80">{{ vm.getUserLabel(openchannelInteraction) }}</span>\n                    </td>\n                    <td ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell class="openchannelAccount">\n                        {{ vm.getOpenchannelAccountLabel(openchannelInteraction) }}\n                    </td>\n                    <td md-cell>\n                        <div ng-if="openchannelInteraction.Tags.length">\n                            <div layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in openchannelInteraction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': openchannelInteraction.Tags.length == 1 && openchannelInteraction.Tags[0].color }"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions actions-padding">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" translate="DASHBOARDS.SHOW">\n                                        Show Openchannel\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadOpenchannelInteraction($event, openchannelInteraction)" translate="DASHBOARDS.DOWNLOAD">\n                                        Download Openchannel\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-label="{page: \'{{\'DASHBOARDS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'DASHBOARDS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'DASHBOARDS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.openchannelInteractions.count}}" md-on-paginate="vm.getOpenchannelInteractions" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/plugins/agent.general.plugins.html",'<div id="plugin" ng-if="vm.plugin" ng-cloak layout-fill>\n    <iframe ng-src="{{vm.getTrustedURL()}}" frameborder=0 style="border:0px; width:100%; height:100%;"></iframe>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/home/recordings/agent.general.recordings.html",'<md-card ng-init="vm.onInit()">\n    <md-toolbar class="md-table-toolbar md-default table-header indigo-A100-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="VOICE.RECORDINGS">Recordings</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="VOICE.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'VOICE.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getVoiceRecordings()" placeholder="{{ \'VOICE.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="VOICE.SELECT_TYPE">Select a type</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.type" ng-change="vm.getVoiceRecordings()" aria-label="Filter type">\n                    <md-option value="internal" translate="VOICE.INTERNAL">Internal</md-option>\n                    <md-option value="inbound" translate="VOICE.INBOUND">Inbound</md-option>\n                    <md-option value="outbound" translate="VOICE.OUTBOUND">Outbound</md-option>\n                    <md-option value="dialer" translate="VOICE.DIALER">Dialer</md-option>\n                    <md-option ng-value="null" translate="VOICE.ALL">All</md-option>\n                </md-select>\n            </div>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVoiceRecordings">\n                <tr md-row>\n                    <th md-column md-order-by="type">{{ \'VOICE.TYPE\' | translate }}</th>\n                    <th md-column md-order-by="uniqueid">{{ \'VOICE.UNIQUEID\' | translate }}</th>\n                    <th md-column md-order-by="calleridnum">{{ \'VOICE.CALLER\' | translate }}</th>\n                    <th md-column md-order-by="exten">{{ \'VOICE.CALLED\' | translate }}</th>\n                    <th md-column md-order-by="connectedlinenum">{{ \'VOICE.CONNECTED\' | translate }}</th>\n                    <th md-column md-order-by="queue">{{ \'VOICE.QUEUE\' | translate }}</th>\n                    <th md-column md-order-by="rating">{{ \'VOICE.RATING\' | translate }}</th>\n                    <th md-column>{{ \'VOICE.AUDIO\' | translate }}</th>\n                    <th md-column md-order-by="createdAt">{{ \'VOICE.DATE\' | translate }}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.voiceRecordings.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="voiceRecording in vm.voiceRecordings.rows">\n                    <td md-cell class="type">{{voiceRecording.type}}</td>\n                    <td md-cell class="uniqueid">{{voiceRecording.uniqueid}}</td>\n                    <td md-cell class="calleridnum">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="voiceRecording.calleridnum" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="exten">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="voiceRecording.exten" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="connectedlinenum">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="voiceRecording.connectedlinenum" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="queue">{{voiceRecording.queue}}</td>\n                    <td md-cell class="rating">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-show="voiceRecording.rating" ng-repeat="rating in [1,2,3,4,5] | limitTo:voiceRecording.rating"></md-icon><span ng-hide="voiceRecording.rating" translate="VOICE.NO_RATING">No rating</span>\n                    </td>\n                    <td md-cell class="audio" ng-switch="voiceRecording.format">\n                        \x3c!-- audio recording directive --\x3e\n                        <ms-recording ng-switch-when=".wav" id="voiceRecording.id"></ms-recording>\n                        \x3c!-- / audio recording directive --\x3e\n                        <span ng-switch-when=".gsm">\n                            <em>{{ \'VOICE.CANT_PLAY_GSM_AUDIO_FILES\' | translate }}</em>\n                        </span>\n                    </td>\n                    <td md-cell class="createdAt ">{{voiceRecording.createdAt | date:\'medium\' }}</td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n\n                            <md-menu-content width="3">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadfile(voiceRecording, $event)" translate="VOICE.DOWNLOAD_VOICERECORDING">\n                                        Download VoiceRecording\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.voiceRecordings.count}}" md-on-paginate="vm.getVoiceRecordings" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/scheduled/agent.general.scheduled.html",'<md-card ng-init="vm.onInit()">\n    <md-toolbar class="md-table-toolbar md-default table-header blue-grey-bg">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="MOTIONDIALER.SCHEDULED_CALLS">Scheduled Calls</span>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="MOTIONDIALER.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'VOICE.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getScheduledCalls()" placeholder="{{ \'MOTIONDIALER.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div ng-if="vm.queueCampaigns.count" layout="column">\n                <span class="font-size-10" translate="MOTIONDIALER.SELECT_CAMPAIGN">Select a Campaign</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.VoiceQueueId" ng-change="vm.getScheduledCalls()">\n                    <md-option ng-value="undefined"><em translate="MOTIONDIALER.ALL">All</em></md-option>\n                    <md-option ng-value="queueCampaign.id" ng-repeat="queueCampaign in vm.queueCampaigns.rows">{{queueCampaign.name}}</md-option>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                        <span class="font-size-10" translate="MOTIONDIALER.SELECT_TYPE">Select type</span>\n                        <md-select class="font-size-12 no-margin" ng-model="vm.query.recallme" ng-change="vm.getScheduledCalls()">\n                            <md-option ng-value="undefined"><em translate="MOTIONDIALER.ALL">All</em></md-option>\n                            <md-option ng-value="1" translate="MOTIONDIALER.RECALLME">Recall me</md-option>\n                            <md-option ng-value="0" translate="MOTIONDIALER.INQUEUE">Recall in queue</md-option>\n                        </md-select>\n                    </div> --\x3e\n            <md-button class="md-icon-button" ng-click="vm.getScheduledCalls()" aria-label="refresh scheuled calls" translate translate-attr-label="MOTIONDIALER.REFRESH_SCHEDULED_CALLS">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n                <md-tooltip>{{\'MOTIONDIALER.REFRESH_SCHEDULED_CALLS\' | translate}}</md-tooltip>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getScheduledCalls">\n                <tr md-row>\n                    <th md-column>{{\'MOTIONDIALER.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="phone">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                    <th md-column md-order-by="scheduledat">{{ \'MOTIONDIALER.SCHEDULEDAT\' | translate }}</th>\n                    <th md-column>{{ \'MOTIONDIALER.PRIORITY\' | translate }}</th>\n                    <th md-column md-order-by="recallme">{{ \'MOTIONDIALER.RECALLME\' | translate }}</th>\n                    <th md-column>{{ \'MOTIONDIALER.CAMPAIGN\' | translate }}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.scheduledCalls.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span translate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="scheduledCall in vm.scheduledCalls.rows">\n                    <td md-cell>{{scheduledCall.Contact.firstName}} {{scheduledCall.Contact.lastName}}</td>\n                    <td md-cell>\n                        <ms-click-to-call target="scheduledCall.phone" license="vm_home.license"></ms-click-to-call>\n                    </td>\n                    <td md-colors="{color: {{ vm.isDateBeforeToday(scheduledCall.scheduledat) ? \'\\\'red\\\'\' : \'\\\'green\\\'\' }}}" md-cell>{{ scheduledCall.scheduledat | date:\'medium\' }}</td>\n                    <td md-cell>{{ vm.priorities[scheduledCall.priority] }}</td>\n                    <td md-cell>\n                        <md-icon md-colors="{color: {{ scheduledCall.recallme && scheduledCall.UserId == vm.currentUser.id ? \'\\\'green\\\'\' : \'\\\'grey\\\'\' }}}" md-font-icon="{{ scheduledCall.recallme  && scheduledCall.UserId == vm.currentUser.id ? \'icon-check\' : \'icon-close\' }}"></md-icon>\n                    </td>\n                    <td md-cell>\n                        <md-icon md-colors="{color: {{ scheduledCall.Queue.dialActive? \'\\\'green\\\'\' : \'\\\'red\\\'\' }}}" md-font-icon="icon-checkbox-blank-circle"></md-icon> {{scheduledCall.Queue.name}}\n                    </td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n\n                            <md-menu-content width="3">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.createOrEditQueueCampaignHopper($event, scheduledCall)" translate="MOTIONDIALER.EDIT_HOPPER">\n                                        Edit Hopper\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.deleteConfirm(scheduledCall, $event)" translate="MOTIONDIALER.DELETE_HOPPER">\n                                        Delete Hopper\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.scheduledCalls.count}}" md-on-paginate="vm.getScheduledCalls" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/sms/agent.general.sms.html",'<md-card ngCloak>\n    <md-toolbar class="md-table-toolbar md-default table-header orange-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.SMS_INTERACTIONS">Interactions</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down" exact-match-on-filter="true"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getSmsInteractions()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_READ_UNREAD">Select Read/Unread</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.read" ng-change="vm.getSmsInteractions()" aria-label="Filter read">\n                    <md-option value="0" translate="DASHBOARDS.UNREAD">READ</md-option>\n                    <md-option value="1" translate="DASHBOARDS.READ">UNREAD</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_STATUS">Select a status</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.closed" ng-change="vm.getSmsInteractions()" aria-label="Filter status">\n                    <md-option value="0" translate="DASHBOARDS.OPENED">OPENED</md-option>\n                    <md-option value="1" translate="DASHBOARDS.CLOSED">CLOSED</md-option>\n                    <md-option ng-value="null" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_ACCOUNT">Select an account</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.SmsAccountId" md-selected-text="vm.quickFilterSelectedText.account" ng-change="vm.getSmsInteractions()" ng-disabled="vm.smsAccounts.rows.length === 0" aria-label="Filter account">\n                    <md-option ng-repeat="smsAccount in vm.smsAccounts.rows" ng-value="smsAccount.id" ng-disabled="vm.query.SmsAccountId.length === 1 && vm.query.SmsAccountId[0] === smsAccount.id">{{smsAccount.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.SmsAccountId.length &lt; vm.smsAccounts.rows.length" layout-fill ng-click="vm.selectAll(\'account\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.SmsAccountId.length === vm.smsAccounts.rows.length" layout-fill ng-click="vm.clearSelection(\'account\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getSmsInteractions()" aria-label="Filter agent">\n                    <md-option ng-value="vm.user.id" translate="DASHBOARDS.ME"></md-option>\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                </md-select>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_TAG">Select a tag</span>\n                <md-select multiple class="font-size-12 no-margin" ng-model="vm.query.tag" md-selected-text="vm.quickFilterSelectedText.tag" ng-change="vm.getSmsInteractions()" aria-label="Filter tags">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                    <md-button md-no-ink class="md-primary" ng-if="!vm.query.tag || vm.query.tag.length &lt; vm.tags.rows.length" layout-fill ng-click="vm.selectAll(\'tag\')">{{\'DASHBOARDS.SELECT_ALL\' | translate}}</md-button>\n                    <md-button md-no-ink class="md-primary" ng-if="vm.query.tag.length === vm.tags.rows.length" layout-fill ng-click="vm.clearSelection(\'tag\')">{{\'DASHBOARDS.CLEAR\' | translate}}</md-button>\n                </md-select>\n            </div>\n            \x3c!-- <div layout="column">\n                <md-button class="md-icon-button advanced-filter" aria-label="Filter" translate translate-attr-aria-label="DASHBOARDS.FILTER" \n                    ng-click="vm.isAdvancedFilterVisible = !vm.isAdvancedFilterVisible">\n                    <md-icon md-font-icon="icon-filter-outline" ng-show="!vm.isAdvancedFilterVisible"></md-icon>\n                    <md-icon md-font-icon="icon-filter-remove-outline" ng-show="vm.isAdvancedFilterVisible"></md-icon>\n                </md-button>\n            </div> --\x3e\n            <div layout="column">\n                <md-button class="md-icon-button interaction-reload" aria-label="Reload" translate translate-attr-aria-label="DASHBOARDS.RELOAD" ng-click="vm.getSmsInteractions()">\n                    <md-icon md-font-icon="icon-reload"></md-icon>\n                </md-button>\n            </div>\n            <md-menu ng-if="vm.smsAccounts.rows && vm.smsAccounts.rows.length">\n                <md-button class="md-icon-button interaction-new" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                    <md-icon md-font-icon="icon-plus"></md-icon>\n                </md-button>\n                <md-menu-content width="3">\n                    <md-menu-item ng-repeat="smsAccount in vm.smsAccounts.rows">\n                        <md-button aria-label="compose" ng-click="vm.composeSmsInteraction($event, smsAccount)">{{ smsAccount.name }} ({{ smsAccount.key }})</md-button>\n                    </md-menu-item>\n                </md-menu-content>\n            </md-menu>\n        </div>\n    </md-toolbar>\n    <ms-advanced-filter ng-show="vm.isAdvancedFilterVisible" options="vm.filter"></ms-advanced-filter>\n    <md-table-container class="interactions-list">\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSmsInteractions">\n                <tr md-row>\n                    <th class="id-header" md-column md-order-by="id">{{\'DASHBOARDS.ID\' | translate}}</th>\n                    <th md-column class="no-padding width-5">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column class="no-padding width-5"></th>\n                    <th md-column>{{\'DASHBOARDS.CONTACT\' | translate}}</th>\n                    <th md-column md-order-by="createdAt">{{\'DASHBOARDS.STARTEDAT\' | translate}}</th>\n                    <th md-column md-order-by="lastMsgAt">{{\'DASHBOARDS.LAST_MESSAGE\' | translate}}</th>\n                    <th md-column md-order-by="closed">{{\'DASHBOARDS.STATUS\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.TAGS\' | translate}}</th>\n                    <th md-column></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.smsInteractions.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span translate="DASHBOARDS.NO_AVAILABLE_INTERACTION">No Available Interaction</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="smsInteraction in vm.smsInteractions.rows" ng-class="{\'text-bold text-italic\': smsInteraction.unreadMessages > 0}">\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell class="id">\n                        <div layout="row" layout-align="start center">\n                            <span class="font-size-10">{{smsInteraction.id}}</span>\n                        </div>\n                    </td>\n                    <td md-cell>\n                        <div ng-if="!smsInteraction.closed && smsInteraction.Users.length">\n                            <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                            <md-tooltip>\n                                <span ng-repeat="u in smsInteraction.Users">{{ (u.id == vm.user.id) ? \'DASHBOARDS.ME\' : vm.usersByKey[u.id].fullname | translate }}<span ng-if="!$last">, </span></span>\n                            </md-tooltip>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="!smsInteraction.closed && smsInteraction.unreadMessages > 0" layout="row" layout-align="start center">\n                            <span class="badge white-fg orange-bg" layout-margin>{{smsInteraction.unreadMessages}}</span>\n                        </div>\n                    </td>\n                    <td md-cell class="width-5 no-padding">\n                        <div ng-if="smsInteraction.attach" layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell>\n                        <div layout="column" layout-align="start start">\n                            <span class="font-size-12 text-truncate contact-text" ng-class="{\'no-margin-bottom\' : smsInteraction.contactInfo}" layout-margin>{{ smsInteraction.contactName }}</span>\n                            <span ng-if="smsInteraction.contactInfo" class="font-size-12 text-truncate contact-text no-margin-top" layout-margin>{{ smsInteraction.contactInfo }}</span>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell>\n                        <span class="font-size-10 text-truncate">{{smsInteraction.createdAt | formatdate }}</span>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell>\n                        <div layout="row" ng-if="smsInteraction.lastMsgAt">\n                            <span>\n                                <md-icon md-font-icon="{{smsInteraction.lastMsgDirection == \'in\' ? \'icon-arrow-down-bold blue-grey-800-fg\' : \'icon-arrow-up-bold blue-grey-300-fg\'}}"></md-icon>\n                            </span>\n                            <div layout="column" layout-align="center center">\n                                <span class="font-size-10 text-truncate">{{smsInteraction.lastMsgAt | formatdate }}</span>\n                            </div>\n                        </div>\n                        <span ng-if="!smsInteraction.lastMsgAt">No messages</span>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell>\n                        <span ng-if="smsInteraction.closed" class="red-fg font-size-12">{{ \'DASHBOARDS.CLOSED\' | translate}} <span ng-if="smsInteraction.disposition">- {{smsInteraction.disposition}}</span></span>\n                        <md-tooltip ng-if="smsInteraction.closed">{{smsInteraction.closedAt | formatdate }}</md-tooltip>\n                        <span ng-if="!smsInteraction.closed" class="green-fg font-size-12"><span translate="DASHBOARDS.OPENED"></span><span ng-if="smsInteraction.substatus"> - {{smsInteraction.substatus}}</span></span>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell class="user">\n                        <span class="font-size-12 text-truncate width-80">{{ vm.getUserLabel(smsInteraction) }}</span>\n                    </td>\n                    <td ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell class="smsAccount">\n                        {{ vm.getSmsAccountLabel(smsInteraction) }}\n                    </td>\n                    <td md-cell>\n                        <div ng-if="smsInteraction.Tags.length">\n                            <div layout="column" layout-align="center center">\n                                <md-tooltip md-direction="left" layout="row">\n                                    <span ng-repeat="tag in smsInteraction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': smsInteraction.Tags.length == 1 && smsInteraction.Tags[0].color }"></md-icon>\n                            </div>\n                        </div>\n                    </td>\n                    <td md-cell class="actions actions-padding">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.showSmsInteraction($event, smsInteraction)" translate="DASHBOARDS.SHOW">\n                                        Show Sms\n                                    </md-button>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.downloadSmsInteraction($event, smsInteraction)" translate="DASHBOARDS.DOWNLOAD">\n                                        Download Sms\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-label="{page: \'{{\'DASHBOARDS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'DASHBOARDS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'DASHBOARDS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.smsInteractions.count}}" md-on-paginate="vm.getSmsInteractions" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/voice/agent.general.voice.html",'<md-card ng-init="vm.onInit()">\n    <md-toolbar class="md-table-toolbar md-default table-header blue-A700-bg" ng-class="{\'h-128\' : vm.isSearchBarVisible === true}">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="VOICE.CALLS">Calls</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.onSearchBarCollapse()" on-expand="vm.onSearchBarExpand()" query="vm.query.filter" debounce="300" direction="down"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="VOICE.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'VOICE.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getVoiceCalls()" placeholder="{{ \'VOICE.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="VOICE.SELECT_TYPE">Select a type</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.type" ng-change="vm.getVoiceCalls()">\n                    <md-option value="internal" translate="VOICE.INTERNAL">Internal</md-option>\n                    <md-option value="inbound" translate="VOICE.INBOUND">Inbound</md-option>\n                    <md-option value="outbound" translate="VOICE.OUTBOUND">Outbound</md-option>\n                    <md-option value="dialer" translate="VOICE.DIALER">Dialer</md-option>\n                    <md-option ng-value="null" translate="VOICE.ALL">All</md-option>\n                </md-select>\n            </div>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVoiceCalls">\n                <tr md-row>\n                    <th md-column md-order-by="id">{{\'VOICE.ID\' | translate}}</th>\n                    <th md-column md-order-by="type">{{ \'VOICE.TYPE\' | translate }}</th>\n                    <th md-column md-order-by="source">{{ \'VOICE.SOURCE\' | translate }}</th>\n                    <th md-column md-order-by="destination">{{ \'VOICE.DESTINATION\' | translate }}</th>\n                    <th md-column md-order-by="starttime">{{ \'VOICE.STARTEDAT\' | translate }}</th>\n                    <th md-column md-order-by="endtime">{{ \'VOICE.ENDEDAT\' | translate }}</th>\n                    <th md-column md-order-by="userDisposition">{{ \'VOICE.DISPOSITION\' | translate }}</th>\n                    <th md-column>{{ \'VOICE.NOTE\' | translate }}</th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.voiceCalls.rows.length">\n                    <td md-cell colspan="8">\n                        <div layout="row" layout-align="center center">\n                            <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="voiceCall in vm.voiceCalls.rows" ng-click="vm.showDetails(voiceCall, $event)">\n                    <td md-cell class="type">{{voiceCall.id}}</td>\n                    <td md-cell class="type">{{voiceCall.type}}</td>\n                    <td md-cell class="source">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="voiceCall.source" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="destination">\n                        \x3c!-- click to call directive --\x3e\n                        <ms-click-to-call target="voiceCall.destination" license="vm_home.license"></ms-click-to-call>\n                        \x3c!--  / click to call directive --\x3e\n                    </td>\n                    <td md-cell class="starttime">{{voiceCall.starttime | date:\'medium\' }}</td>\n                    <td md-cell class="endtime">{{voiceCall.endtime | date:\'medium\' }}</td>\n                    <td md-cell class="disposition">{{voiceCall.userDisposition}}</td>\n                    <td md-cell class="note">\n                        <md-icon ng-if="voiceCall.note" md-font-icon="icon-clipboard-outline"></md-icon>\n                    </td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n\n                            <md-menu-content width="3">\n                                <md-menu-item>\n                                    <md-button ng-click="vm.showDetails(voiceCall, $event)" translate="VOICE.DETAILS">\n                                        Show Details\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.voiceCalls.count}}" md-on-paginate="vm.getVoiceCalls" md-page-select></md-table-pagination>\n</md-card>'),e.put("app/main/apps/dashboards/views/general/agent/home/voice/details/dialog.html",'<md-dialog class="details-dialog" aria-label="details">\n    <md-toolbar class="md-background-bg">\n        <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n            <span ng-if="!vm.interaction.closed" class="title" translate="VOICE.DETAILS"></span>\n            <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n\n    <md-dialog-content>\n        <md-list flex>\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.UNIQUEID">Uniqueid</p>\n                    <h4>{{vm.call.uniqueid}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.TYPE">Type</p>\n                    <h4>{{vm.call.type ? vm.call.type : \'no type\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.SOURCE">Source</p>\n                    <h4>{{vm.call.source ? vm.call.source : \'unknown\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.DESTINATION">Destination</p>\n                    <h4>{{vm.call.destination ? vm.call.destination : \'unknown\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.STARTEDAT">Started At</p>\n                    <h4>{{vm.call.starttime | date:\'medium\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.ANSWEREDAT">Answered At</p>\n                    <h4>{{vm.call.answertime ? (vm.call.answertime | date:\'medium\') : \'--\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.ENDEDAT">Ended At</p>\n                    <h4>{{vm.call.endtime ? (vm.call.endtime | date:\'medium\') : \'--\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.DURATION">Duration</p>\n                    <h4>{{vm.call.duration ? vm.call.duration : \'--\'}}s</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.BILLABLESECONDS">Billable Seconds</p>\n                    <h4>{{vm.call.billableseconds ? vm.call.billableseconds : \'--\'}}s</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.DISPOSITION">Disposition</p>\n                    <h4>{{vm.call.userDisposition ? vm.call.userDisposition : \'--\'}}</h4>\n                </div>\n            </md-list-item>\n\n            <md-list-item class="md-2-line">\n                <div class="md-list-item-text">\n                    <p translate="VOICE.NOTE">Note</p>\n                    <h4>{{vm.call.note ? vm.call.note : \'--\'}}</h4>\n                </div>\n            </md-list-item>\n        </md-list>\n    </md-dialog-content>\n\n    <md-dialog-actions layout="row" layout-align="space-between center">\n        <md-button type="button" ng-click="vm.closeDialog()" class="send-button md-accent md-raised" aria-label="DISPOSE" translate="VOICE.CLOSE" translate-attr-aria-label="VOICE.DISPOSE">\n            CLOSE\n        </md-button>\n    </md-dialog-actions>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.dialog.html",'<md-dialog id="agent-general-dialog" aria-label="Spy Dialog">\n    <div id="interaction-app" class="agent-content" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.html\'"></div>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/agent.general.interaction.html",'\x3c!-- CONTENT CARD --\x3e\n<md-content class="content-card" layout="row" layout-fill>\n\n    <div ng-if="!vm.showInteraction" class="start-point" flex layout="column" layout-align="center center" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.loading.html\'"></div>\n\n    <div ng-if="vm.showInteraction" flex layout="row">\n\n        <md-card flex="75" class="interaction">\n\n            <md-content class="interaction-agents" layout="row" layout-align="start center" ng-if="!vm.interaction.closed && vm.interaction.Users.length">\n                <strong layout-margin translate="DASHBOARDS.CURRENTLY_IN_USE_BY">Currently in use by </strong>\n\n                <div ng-repeat="u in vm.interaction.Users">\n                    <img class="avatar-small" ng-src="api/users/{{u.id}}/avatar">\n                    <md-tooltip> {{ (u.id == vm.user.id) ? \'DASHBOARDS.ME\' : vm.usersMap[u.id] | translate }} </md-tooltip>\n                </div>\n            </md-content>\n\n            \x3c!-- TOOLBAR --\x3e\n            <md-toolbar class="interaction-toolbar" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.html\'"></md-toolbar>\n            \x3c!-- / TOOLBAR --\x3e\n\n            \x3c!-- CONTENT --\x3e\n            <md-content id="interaction-content" name="{{\'interaction-content-\' + vm.tab.id}}" flex ms-scroll layout-wrap>\n                <div class="interaction-messages" ng-switch="vm.tab.channel">\n                    <div ng-switch-when="mail">\n                        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.interaction.mail.html\'"></div>\n                    </div>\n                    <div ng-switch-default>\n                        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.interaction.html\'"></div>\n                    </div>\n                </div>\n            </md-content>\n            \x3c!-- / CONTENT --\x3e\n\n            \x3c!-- FOOTER --\x3e\n            <div ng-if="!vm.interaction.closed && vm.tab.channel != \'mail\' && vm.tab.channel !== \'fax\' && (vm.tab.channel != \'sms\' || !vm.tab.spy)" class="interaction-footer flex-noshrink" layout="row" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.footer.html\'"></div>\n            \x3c!-- / FOOTER--\x3e\n        </md-card>\n\n        <md-card layout="column" flex class="info" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.html\'"></md-card>\n    </div>\n</md-content>\n\x3c!-- / CONTENT CARD --\x3e'),e.put("app/main/apps/dashboards/views/general/agent/interaction/composeFax/dialog.html",'<md-dialog class="compose-dialog-fax" aria-label="New Message">\n    <form class="md-inline-form" name="composeForm" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div layout="row">\n                    <md-button ng-click="vm.send()" class="md-raised md-blue-bg white-fg" aria-label="Send message">\n                        <span translate="FAX.SEND">SEND</span>\n                    </md-button>\n                    <md-button ng-disabled="vm.message.attachments.length === 1" class="md-fab md-mini md-white-bg" aria-label="attachment" translate-attr-aria-label="DASHBOARDS.ATTACHMENT" flow-btn flow-name="vm.ngFlow.flow" flow-files-submitted="vm.upload()" flow-init="vm.ngFlowOptions" flow-file-added="vm.fileAdded($file)" flow-file-success="vm.fileSuccess($file, $message)">\n                        <md-icon md-font-icon="icon-paperclip" class="red-fg"></md-icon>\n                    </md-button>\n                </div>\n                <span class="title">{{vm.message.from}}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()" aria-label="Close dialog" tranlate translate-aria-label="FAX.CLOSE_DIALOG">\n                    <md-icon md-font-icon="icon-close"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <md-input-container class="md-block to">\n                <label translate="FAX.TO">To</label>\n                <md-chips name="to" ng-model="vm.message.to" md-transform-chip="vm.transformContact($chip)" md-separator-keys="vm.separatorKeys" md-require-match="false" md-max-chips="1" required>\n                    \x3c!-- <input ng-model="vm.message.subject" type="text"> --\x3e\n                    <md-autocomplete ng-hide="vm.message.to.length === 1" md-search-text="vm.searchTo" md-items="contact in vm.contactSearch(vm.searchTo)" md-item-text="contact.fax" md-min-length="3">\n                        <md-item-template>\n                            <span>{{ vm.getContact(contact) }}</span>\n                        </md-item-template>\n                    </md-autocomplete>\n                </md-chips>\n                <div ng-messages="composeForm.to.$error" ng-if="composeForm.$dirty">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.TO_REQUIRED">To field is required</span>\n                    </div>\n                    <div ng-message="md-max-chips">You reached the maximum amount of chips</div>\n                </div>\n            </md-input-container>\n\n            <div class="attachment-list" ng-if="vm.message.attachments.length" layout="row" layout-wrap>\n                <div class="attachment" layout="row" layout-align="space-between center" ng-repeat="attachment in vm.message.attachments">\n                    <div>\n                        <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        <span class="filename">{{attachment.name}}</span>\n                        <span class="size">({{attachment.size | byteFmt: 0}})</span>\n                    </div>\n\n                    <md-button class="md-icon-button" aria-label="Delete attachment" translate translate-attr-aria-label="FAX.DELETE_ATTACHMENT">\n                        \x3c!-- <md-icon md-font-icon="icon-close" class="s16"></md-icon> --\x3e\n                    </md-button>\n                </div>\n            </div>\n\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/composeMail/dialog.html",'<md-dialog class="compose-dialog" aria-label="New Message" ng-style="{\n      \'max-width\':  {true: \'620px\', false: \'90%\'}[ vm.secret ],\n      \'width\': {true: \'620px\', false: \'100%\'}[ vm.secret ],\n      \'max-height\': {true: undefined, false: \'97%\'}[ vm.secret ]\n    }">\n    <form class="md-inline-form" name="composeForm" novalidate>\n        <md-toolbar ng-class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div layout="row">\n                    <div ng-if="!vm.secret" class="md-button md-raised blue-bg no-padding">\n                        <button class="white-fg margin-horizontal-10" aria-label="Send message" ng-disabled="!vm.verifySmtp" ng-click="vm.send($event, false, null)">\n                            <span>{{ \'MAIL.SEND\' | translate | uppercase }}</span>\n                        </button>\n                        <span class="white-fg secondary-text vertical-divider"></span>\n                        <md-menu>\n                            <button ng-disabled="!vm.verifySmtp" class="white-fg margin-left-0" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-menu-down" class="icon s24"></md-icon>\n                            </button>\n\n                            <md-menu-content width="2">\n                                <md-menu-item ng-if="vm.subStatuses.rows.length">\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="MAIL.SEND_AS">\n                                            Send as\n                                        </md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-repeat="subStatus in vm.subStatuses.rows">\n                                                <md-button ng-click="vm.send($event, false, subStatus.name)">\n                                                    {{subStatus.name}}\n                                                </md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-button ng-click="vm.send($event, true, null)" translate="MAIL.SEND_AND_CLOSE">\n                                        Send and Close\n                                    </md-button>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </div>\n                    <md-button class=" md-button md-raised blue-bg white-fg margin-horizontal-10" aria-label="Save draft" ng-click="vm.saveDraft()">\n                        <span>{{ (vm.isDraft ? \'DASHBOARDS.UPDATE_DRAFT\' : \'DASHBOARDS.SAVE_AS_DRAFT\') | translate | uppercase }}</span>\n                    </md-button>\n                    <md-button ng-if="vm.secret" ng-click="vm.addNote()" class="md-raised md-blue-bg white-fg" aria-label="Send message">\n                        <span translate="MAIL.ADD_NOTE">Add note</span>\n                    </md-button>\n                    <md-button ng-disabled="!vm.verifySmtp" class="md-fab md-mini md-white-bg" aria-label="attachment" translate-attr-aria-label="DASHBOARDS.ATTACHMENT" flow-btn flow-name="vm.ngFlow.flow" flow-files-submitted="vm.upload($files)" flow-init="vm.ngFlowOptions" flow-file-success="vm.fileSuccess($file, $message)" flow-file-added="vm.fileAdded($file)">\n                        <md-icon md-font-icon="icon-paperclip" class="red-fg"></md-icon>\n                    </md-button>\n                </div>\n                <span ng-if="!vm.secret" class="title">{{vm.message.from}}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()" aria-label="Close dialog" tranlate translate-aria-label="MAIL.CLOSE_DIALOG">\n                    <md-icon md-font-icon="icon-close"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container ng-if="!vm.secret" class="md-block to" ng-class="{\'hidden-cc\': vm.hiddenCC, \'hidden-bcc\': vm.hiddenBCC}">\n                <label translate="MAIL.TO">To</label>\n                <md-chips name="to" ng-model="vm.message.to" md-transform-chip="vm.transformContact($chip, vm.message.to)" md-separator-keys="vm.separatorKeys" md-require-match="false" required>\n                    <md-autocomplete md-search-text="vm.searchTo" md-items="contact in vm.contactSearch(vm.searchTo)" md-item-text="contact.email" md-min-length="3">\n                        <md-item-template>\n                            <span>{{ vm.getContact(contact) }}</span>\n                        </md-item-template>\n                    </md-autocomplete>\n                </md-chips>\n                <div ng-messages="composeForm.to.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.TO_REQUIRED">To field is required</span>\n                    </div>\n                </div>\n\n                <div class="cc-bcc" layout="row" layout-align="start center">\n                    <div class="show-cc" ng-show="vm.hiddenCC" ng-click="vm.hiddenCC = false">CC</div>\n                    <div class="show-bcc" ng-show="vm.hiddenBCC" ng-click="vm.hiddenBCC = false">BCC</div>\n                </div>\n            </md-input-container>\n\n            <md-input-container ng-if="!vm.secret" class="md-block" ng-hide="vm.hiddenCC">\n                <label translate="MAIL.CC">Cc</label>\n                <md-chips name="cc" ng-model="vm.message.cc" md-transform-chip="vm.transformContact($chip, vm.message.cc)" md-separator-keys="vm.separatorKeys" md-require-match="false" required>\n                    <md-autocomplete md-search-text="vm.searchCc" md-items="contact in vm.contactSearch(vm.searchCc)" md-item-text="contact.email" md-min-length="3">\n                        <md-item-template>\n                            <span>{{ vm.getContact(contact) }}</span>\n                        </md-item-template>\n                    </md-autocomplete>\n                </md-chips>\n            </md-input-container>\n\n            <md-input-container ng-if="!vm.secret" class="md-block" ng-hide="vm.hiddenBCC">\n                <label translate="MAIL.BCC">Bcc</label>\n                <md-chips name="bcc" ng-model="vm.message.bcc" md-transform-chip="vm.transformContact($chip, vm.message.bcc)" md-separator-keys="vm.separatorKeys" md-require-match="false" required>\n                    <md-autocomplete md-search-text="vm.searchBcc" md-items="contact in vm.contactSearch(vm.searchBcc)" md-item-text="contact.email" md-min-length="3">\n                        <md-item-template>\n                            <span>{{ vm.getContact(contact) }}</span>\n                        </md-item-template>\n                    </md-autocomplete>\n                </md-chips>\n            </md-input-container>\n\n            <md-input-container ng-if="!vm.secret" class="md-block no-margin">\n                <label translate="MAIL.SUBJECT">Subject</label>\n                <input ng-model="vm.message.subject" type="text">\n            </md-input-container>\n\n            <div class="attachment-list" ng-if="vm.message.attachments.length" layout="row" layout-wrap>\n                <div class="attachment" layout="row" layout-align="space-between center" ng-repeat="attachment in vm.message.attachments">\n                    <div>\n                        <md-icon md-font-icon="icon-paperclip" class="s16"></md-icon>\n                        <span class="filename">{{attachment.name}}</span>\n                        <span class="size" ng-if="attachment.size">({{attachment.size | byteFmt: 0}})</span>\n                    </div>\n\n                    <md-button ng-click="vm.deleteAttachment(attachment)" class="md-icon-button" aria-label="Delete attachment" translate translate-attr-aria-label="MAIL.DELETE_ATTACHMENT">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div class="padding-top-5">\n                <textarea ckeditor="vm.ckeditor" id="html-area" ng-model="vm.message.body" md-select-on-focus="" ready="vm.onReadyEditor()"></textarea>\n            </div>\n\n            <md-switch ng-if="!vm.message.showLastMessage && !vm.secret" ng-model="vm.message.showLastMessage" ng-change="vm.loadLastMessage()" aria-label="load last message"><span translate="MAIL.SHOW_ORIGINAL_MESSAGE">Show original message</span></md-switch>\n\n            <md-autocomplete ng-if="!vm.secret" md-selected-item="vm.selectedItem" md-search-text="vm.searchText" md-selected-item-change="vm.selectedItemChange(item)" md-items="item in vm.searchTextChange(vm.searchText)" md-item-text="item.value" md-min-length="1" md-floating-label="{{ \'MAIL.CANNED_ANSWER_SEARCH\' | translate}}" class="input-show-hide no-container-margin">\n                <md-item-template>\n                    <md-icon ng-if="!item.MailAccountId" md-font-icon="icon-earth" aria-label="alert email" class="s16">\n                    </md-icon>\n                    <md-icon ng-if="item.MailAccountId" md-font-icon="icon-email" aria-label="alert email" class="s16 teal-fg"></md-icon>\n                    <span md-highlight-text="vm.searchText" md-highlight-flags="^i">{{ item.key }} -\n                        {{ item.value | htmlToPlaintext }}</span>\n                </md-item-template>\n\n                <md-not-found>\n                    <span translate="MAIL.CANNED_ANSWER_NOT_FOUND">No canned answers were found</span>\n                </md-not-found>\n            </md-autocomplete>\n\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/composeOpenchannel/dialog.html",'<md-dialog class="compose-dialog" aria-label="New Message">\n    <form class="md-inline-form" name="composeForm" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div layout="row">\n                    <md-button ng-if="!vm.secret" ng-click="vm.send()" class="md-raised md-blue-bg white-fg" aria-label="Send message">\n                        <span translate="OPENCHANNEL.SEND">SEND</span>\n                    </md-button>\n                    <md-button ng-if="vm.secret" ng-click="vm.addNote()" class="md-raised md-blue-bg white-fg" aria-label="Add note">\n                        <span translate="OPENCHANNEL.ADD_NOTE">Add note</span>\n                    </md-button>\n                </div>\n                <span ng-if="!vm.secret" class="title">{{vm.message.from}}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()" aria-label="Close dialog" tranlate translate-aria-label="OPENCHANNEL.CLOSE_DIALOG">\n                    <md-icon md-font-icon="icon-close"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container ng-if="!vm.secret" class="md-block to">\n                <label translate="OPENCHANNEL.TO">To</label>\n                <md-chips name="to" ng-model="vm.message.to" md-transform-chip="vm.transformContact($chip)" md-separator-keys="vm.separatorKeys" md-require-match="false" md-max-chips="1" required>\n                    <md-autocomplete md-search-text="vm.searchTo" md-items="contact in vm.contactSearch(vm.searchTo)" md-item-text="contact.mapkey" md-min-length="3">\n                        <md-item-template>\n                            <span>{{ vm.getContact(contact) }}</span>\n                        </md-item-template>\n                    </md-autocomplete>\n                </md-chips>\n                <div ng-messages="composeForm.to.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TO_REQUIRED">To field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            \x3c!-- msEmojyArea directive --\x3e\n            <ms-emoji-area on-reply="vm.reply(event, body)" ctrl-methods="vm.ctrlMethods" ng-model="vm.message.body" placeholder="\'OPENCHANNEL.INSERT_MESSAGE_HERE\'"></ms-emoji-area>\n            \x3c!-- / msEmojyArea directive --\x3e\n\n            <md-autocomplete ng-if="!vm.secret" class="padding-top-5" md-selected-item="vm.selectedItem" md-search-text="vm.searchText" md-selected-item-change="vm.selectedItemChange(item)" md-items="item in vm.searchTextChange(vm.searchText)" md-item-text="item.value" md-min-length="1" md-floating-label="{{ \'OPENCHANNEL.CANNED_ANSWER_SEARCH\' | translate}}" class="input-show-hide no-container-margin">\n                <md-item-template>\n                    <md-icon ng-if="!item.OpenchannelAccountId" md-font-icon="icon-earth" aria-label="alert openchannel" class="s16"></md-icon>\n                    <md-icon ng-if="item.OpenchannelAccountId" md-font-icon="icon-message-text" aria-label="alert openchannel" class="s16 orange-fg"></md-icon>\n                    <span md-highlight-text="vm.searchText" md-highlight-flags="^i">{{item.key}} - {{item.value}}</span>\n                </md-item-template>\n\n                <md-not-found>\n                    <span translate="OPENCHANNEL.CANNED_ANSWER_NOT_FOUND">No canned answers were found</span>\n                </md-not-found>\n            </md-autocomplete>\n\n\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/composeSms/dialog.html",'<md-dialog class="compose-dialog" aria-label="New Message">\n    <form class="md-inline-form" name="composeForm" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <div layout="row">\n                    <md-button ng-if="!vm.secret" ng-click="vm.send()" class="md-raised md-blue-bg white-fg" aria-label="Send message">\n                        <span translate="SMS.SEND">SEND</span>\n                    </md-button>\n                    <md-button ng-if="vm.secret" ng-click="vm.addNote()" class="md-raised md-blue-bg white-fg" aria-label="Add note">\n                        <span translate="SMS.ADD_NOTE">Add note</span>\n                    </md-button>\n                </div>\n                <span ng-if="!vm.secret" class="title">{{vm.message.from}}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()" aria-label="Close dialog" tranlate translate-aria-label="SMS.CLOSE_DIALOG">\n                    <md-icon md-font-icon="icon-close"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container ng-if="!vm.secret" class="md-block to">\n                <label translate="SMS.TO">To</label>\n                <md-chips name="to" ng-model="vm.message.to" md-transform-chip="vm.transformContact($chip)" md-separator-keys="vm.separatorKeys" md-require-match="false" md-max-chips="1" required>\n                    <md-autocomplete md-search-text="vm.searchTo" md-items="contact in vm.contactSearch(vm.searchTo)" md-item-text="contact.mobile" md-min-length="3">\n                        <md-item-template>\n                            <span>{{ vm.getContact(contact) }}</span>\n                        </md-item-template>\n                    </md-autocomplete>\n                </md-chips>\n                <div ng-messages="composeForm.to.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TO_REQUIRED">To field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            \x3c!-- msEmojyArea directive --\x3e\n            <ms-emoji-area on-reply="vm.reply(event, body)" ctrl-methods="vm.ctrlMethods" ng-model="vm.message.body" placeholder="\'SMS.INSERT_MESSAGE_HERE\'"></ms-emoji-area>\n            \x3c!-- / msEmojyArea directive --\x3e\n\n            <md-autocomplete ng-if="!vm.secret" class="padding-top-5" md-selected-item="vm.selectedItem" md-search-text="vm.searchText" md-selected-item-change="vm.selectedItemChange(item)" md-items="item in vm.searchTextChange(vm.searchText)" md-item-text="item.value" md-min-length="1" md-floating-label="{{ \'SMS.CANNED_ANSWER_SEARCH\' | translate}}" class="input-show-hide no-container-margin">\n                <md-item-template>\n                    <md-icon ng-if="!item.SmsAccountId" md-font-icon="icon-earth" aria-label="alert sms" class="s16"></md-icon>\n                    <md-icon ng-if="item.SmsAccountId" md-font-icon="icon-message-text" aria-label="alert sms" class="s16 orange-fg"></md-icon>\n                    <span md-highlight-text="vm.searchText" md-highlight-flags="^i">{{item.key}} - {{item.value}}</span>\n                </md-item-template>\n\n                <md-not-found>\n                    <span translate="SMS.CANNED_ANSWER_NOT_FOUND">No canned answers were found</span>\n                </md-not-found>\n            </md-autocomplete>\n\n\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",'<md-dialog class="disposition-dialog" aria-label="disposition" ng-init="vm.onInit()">\n    <form name="dispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span ng-if="!vm.interaction.closed" class="title" translate="DASHBOARDS.DISPOSE"></span>\n                <span ng-if="vm.interaction.closed" class="title" translate="DASHBOARDS.INFO"></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()" ng-if="!vm.mandatoryDisposition">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="DASHBOARDS.DISPOSITIONS">Dispositions</label>\n                <md-select name="disposition" ng-model="vm.interaction.disposition" required>\n                    <md-option ng-value="null" ng-if="!vm.mandatoryDisposition">NONE</md-option>\n                    <md-option ng-value="d.name" ng-repeat="d in vm.dispositions.rows">{{ d.name }}</md-option>\n                    <md-option ng-value="gd.name" ng-repeat="gd in vm.globalDispositions.rows">{{ gd.name }}</md-option>\n                </md-select>\n                <div ng-messages="dispositionForm.disposition.$error" ng-show="dispositionForm.disposition.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="DASHBOARDS.ERRORS.DISPOSITION_REQUIRED">Disposition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="DASHBOARDS.NOTE">Note</label>\n                <textarea ng-model="vm.interaction.note" md-maxlength="255" max-rows="5" autofocus></textarea>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.saveDisposition()" class="send-button md-accent md-raised" ng-if="!vm.interaction.closed && vm.interaction.disposition" aria-label="CLOSE_AND_DISPOSE" translate="DASHBOARDS.CLOSE_AND_DISPOSE" translate-attr-aria-label="DASHBOARDS.CLOSE_AND_DISPOSE">\n                    CLOSE AND DISPOSE\n                </md-button>\n                <md-button type="submit" ng-click="vm.saveDisposition(false)" class="send-button md-accent md-raised" ng-if="!vm.interaction.closed && !vm.interaction.disposition" ng-disabled="vm.mandatoryDisposition" aria-label="CLOSE_WITHOUT_DISPOSE" translate="DASHBOARDS.CLOSE_WITHOUT_DISPOSE" translate-attr-aria-label="DASHBOARDS.CLOSE_WITHOUT_DISPOSE">\n                    CLOSE WITHOUT DISPOSE\n                </md-button>\n                <md-button type="submit" ng-click="vm.saveDisposition()" class="send-button md-accent md-raised" ng-if="vm.interaction.closed" ng-disabled="vm.mandatoryDisposition && !vm.interaction.disposition" aria-label="DISPOSE" translate="DASHBOARDS.DISPOSE" translate-attr-aria-label="DASHBOARDS.DISPOSE">\n                    DISPOSE\n                </md-button>\n                <div ng-if="vm.mandatoryDisposition">\n                    <md-icon md-font-icon="icon-information-outline" aria-label="Mandatory Disposition"></md-icon>\n                    <span class="no-margin font-size-12 line-height-30" translate="DASHBOARDS.HELP.MANDATORY_DISPOSITION_ENABLED"></span>\n                </div>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/tag/dialog.html",'<md-dialog class="tag-dialog" aria-label="tag">\n    <form name="tagForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="DASHBOARDS.TAGS"></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <md-chips ng-model="vm.interaction.Tags" md-autocomplete-snap md-require-match="vm.autocompleteRequireMatch">\n                    <md-autocomplete ng-blur="vm.searchText = \'\'" md-min-length="0" md-selected-item-change="vm.selectedItemChange" md-selected-item="vm.selectedItem" md-search-text="vm.searchText" md-items="item in vm.tags.rows | filter:{ name: vm.searchText }" md-item-text="item.name" placeholder="Search for a tag">\n                        <span md-highlight-text="vm.searchText">{{item.name}}</span>\n                    </md-autocomplete>\n                    <md-chip-template>\n                        <span>\n                            <strong>{{$chip.name}}</strong>\n                        </span>\n                    </md-chip-template>\n                </md-chips>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.saveTag(false)" ng-disabled="tagForm.$pristine" class="send-button md-accent md-raised" aria-label="TAG" translate="DASHBOARDS.SAVE" translate-attr-aria-label="DASHBOARDS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/transfer/dialog.html",'<md-dialog class="disposition-dialog" aria-label="disposition">\n    <form name="transferForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="DASHBOARDS.TRANSFER"></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog(false)">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container class="md-block">\n                <label translate="DASHBOARDS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.transfer.type" required>\n                    <md-option ng-value="\'queue\'" ng-if="vm.account.queueTransfer">Queue</md-option>\n                    <md-option ng-value="\'agent\'" ng-if="vm.account.agentTransfer">Agent</md-option>\n                </md-select>\n                <div ng-messages="transferForm.type.$error" ng-show="transferForm.type.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="DASHBOARDS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.transfer.type === \'queue\'">\n                <label translate="DASHBOARDS.QUEUES">Queues</label>\n                <md-select name="queue" ng-model="vm.transfer.id" required>\n                    <md-option ng-value="queue.id" ng-repeat="queue in vm.queues.rows">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="transferForm.queue.$error" ng-show="transferForm.queue.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="DASHBOARDS.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.transfer.type === \'agent\'">\n                <label translate="DASHBOARDS.AGENTS">Agents</label>\n                <md-select name="agent" ng-model="vm.transfer.id" required>\n                    <md-option ng-value="agent.id" ng-repeat="agent in vm.agents.rows" ng-if="vm.currentUser.id != agent.id">{{ agent.name }}</md-option>\n                </md-select>\n                <div ng-messages="transferForm.agent.$error" ng-show="transferForm.agent.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="DASHBOARDS.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        \x3c!-- <md-dialog-actions ng-if="!vm.interaction.closed || !vm.interaction.disposition" layout="row" layout-align="space-between center"> --\x3e\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.onTransfer(true)" ng-disabled="transferForm.$pristine" class="send-button md-accent md-raised" aria-label="DASHBOARDS.TRANSFER" translate="DASHBOARDS.TRANSFER" translate-attr-aria-label="DASHBOARDS.TRANSFER">\n                    TRANSFER\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.footer.html",'\x3c!-- REPLY FORM --\x3e\n<div ng-show="vm.showFooter" layout="column" layout-align "center center" flex>\n    <div layout="row" layout-align="center center" flex>\n        \x3c!-- msEmojyArea directive --\x3e\n        <ms-emoji-area ng-if="vm.tab.channel != \'fax\'" on-reply="vm.reply(event, body)" ctrl-methods="vm.ctrlMethods" ng-model="vm.tab.areaText" placeholder="vm.tab.channel.toUpperCase() + \'.INSERT_MESSAGE_HERE\'"></ms-emoji-area>\n        \x3c!-- / msEmojyArea directive --\x3e\n\n        <div layout="row" layout-align="end center">\n            <md-button ng-if="vm.tab.channel != \'fax\'" style="margin:1px;" class="md-icon-button md-mini" ng-click="vm.changeDisplayCannedAnswerInputValue()" aria-label="Search canned answer" translate translate-attr-aria-label="DASHBOARDS.SEND_MESSAGE">\n                <md-icon md-font-icon="icon-auto-fix" class="green-fg"></md-icon>\n            </md-button>\n\n            <md-button ng-if="vm.tab.channel == \'openchannel\' || vm.tab.channel == \'chat\' || vm.tab.channel == \'fax\'" style="margin:1px;" class="md-icon-button md-warn md-mini" aria-label="attachment" translate-attr-aria-label="DASHBOARDS.ATTACHMENT" flow-btn flow-name="vm.ngFlow.flow" flow-files-submitted="vm.upload()" flow-init="vm.ngFlowOptions" flow-file-added="vm.fileAdded($file)" flow-file-success="vm.fileSuccess($file, $message)">\n                <md-icon md-font-icon="icon-paperclip"></md-icon>\n            </md-button>\n        </div>\n    </div>\n\n    <md-autocomplete ng-hide="!vm.displayCannedAnswerInput" md-selected-item="vm.selectedItem" md-search-text="vm.searchText" md-selected-item-change="vm.selectedItemChange(item)" md-items="item in vm.searchTextChange(vm.searchText)" md-item-text="item.value" md-min-length="1" placeholder="{{ \'DASHBOARDS.CANNED_ANSWER_SEARCH\' | translate}}" class="cannedarea input-show-hide">\n        <md-item-template>\n            <md-icon ng-if="!item[vm.tab.channel === \'chat\' ? \'ChatWebsiteId\' : _.capitalize(vm.tab.channel) + \'AccountId\']" md-font-icon="icon-earth" aria-label="alert channel" class="s16"></md-icon>\n            <md-icon ng-if="item[vm.tab.channel === \'chat\' ? \'ChatWebsiteId\' : _.capitalize(vm.tab.channel) + \'AccountId\']" md-font-icon="{{vm.getIconByChannel(vm.tab.channel)}}" aria-label="alert channel" class="s16" ng-class="vm.getColorByChannel(vm.tab.channel) + \'-fg\'"></md-icon>\n            <span md-highlight-text="vm.searchText" md-highlight-flags="^i">{{item.key}} - {{item.value}}</span>\n        </md-item-template>\n\n        <md-not-found>\n            <span translate="DASHBOARDS.CANNED_ANSWER_NOT_FOUND">No canned answers were found</span>\n        </md-not-found>\n    </md-autocomplete>\n</div>\n\x3c!-- / REPLY FORM --\x3e'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.chat.html",'<div ng-init="item = item || vm.interaction">\n    <md-list-item class="md-2-line" ng-if="item.browserName">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.BROWSER_NAME">Browser Name</p>\n            <h4>{{item.browserName}}</h4>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-2-line" ng-if="item.osName">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.OS_NAME">OS Name</p>\n            <h4>{{item.osName}}</h4>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-2-line" ng-if="item.deviceModel">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.DEVICE_MODEL">Device Model</p>\n            <h4>{{item.deviceModel}}</h4>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-2-line" ng-if="item.referer">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.REFERER">Referer</p>\n            <h4>{{item.referer}}</h4>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-2-line" ng-if="item.customerIp">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.CUSTOMER_IP">Customer IP</p>\n            <h4>{{item.customerIp}}</h4>\n        </div>\n    </md-list-item>\n    <md-divider></md-divider>\n    <md-list-item class="md-2-line" ng-if="item.closed && item.ratingValue != null">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.RATING">Rating</p>\n            <md-icon md-font-icon="icon-star" style="color:red" ng-show="!item.ratingType || item.ratingType == \'star\'" ng-repeat="ratingValue in [1,2,3,4,5] | limitTo:item.ratingValue"></md-icon>\n            <md-icon md-font-icon="icon-thumb-up" style="color:green" ng-show="item.ratingType && item.ratingType == \'thumb\' && item.ratingValue == 1"></md-icon>\n            <md-icon md-font-icon="icon-thumb-down" style="color:red" ng-show="item.ratingType && item.ratingType == \'thumb\' && item.ratingValue == 0"></md-icon>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-2-line" ng-if="item.ratingMessage">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.FEEDBACK">Feedback</p>\n            <h4 style="overflow-wrap: break-word; white-space: normal">{{item.ratingMessage}}</h4>\n        </div>\n    </md-list-item>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.html",'<md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex>\n    <md-tab>\n        <md-tab-label>\n            <span translate="DASHBOARDS.CONTACT">Contact</span>\n        </md-tab-label>\n        <md-tab-body>\n            <md-content class="md-padding">\n                <form name="contactForm" class="md-inline-form" novalidate>\n                    <md-input-container class="md-block">\n                        <md-icon md-font-icon="icon-account"></md-icon>\n                        <label translate="DASHBOARDS.NAME">Name</label>\n                        <input type="text" name="firstName" ng-model="vm.contact.firstName" disabled>\n                    </md-input-container>\n\n                    <md-input-container class="md-block">\n                        <md-icon md-font-icon="icon-email"></md-icon>\n                        <label translate="DASHBOARDS.EMAIL">Email</label>\n                        <input type="email" name="email" ng-model="vm.contact.email" disabled>\n                    </md-input-container>\n\n                    <md-input-container ng-if="vm.tab.channel != \'fax\'" class="md-block">\n                        <md-icon md-font-icon="icon-phone"></md-icon>\n                        <label translate="DASHBOARDS.PHONE">Phone</label>\n                        <input type="text" name="phone" ng-model="vm.contact.phone" disabled>\n                    </md-input-container>\n\n                    <md-input-container ng-if="vm.tab.channel == \'fax\'" class="md-block">\n                        <md-icon md-font-icon="icon-deskphone"></md-icon>\n                        <label translate="DASHBOARDS.FAX">Fax</label>\n                        <input type="text" name="fax" ng-model="vm.contact.fax" disabled>\n                    </md-input-container>\n\n                    <div ng-if="!vm.tab.spy" layout="row" layout-align="center center">\n                        <md-button class="md-raised md-accent" ng-click="vm.openContact(ev)" translate="DASHBOARDS.MORE">\n                            More\n                        </md-button>\n                    </div>\n                </form>\n            </md-content>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="DASHBOARDS.INTERACTION">Interaction</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div layout="column" layout-align="space-between center" class="md-padding">\n                <md-icon class="s42" md-font-icon="{{vm.getIconByChannel(vm.tab.channel)}}" ng-class="vm.getColorByChannel(vm.tab.channel) + \'-fg\'"></md-icon>\n                <span ng-if="vm.interaction.closed" class="md-background-bg red-fg font-size-14">#{{vm.interaction.id}} - <span translate="DASHBOARDS.CLOSED"></span></span>\n                <span ng-if="!vm.interaction.closed" class="md-background-bg green-fg font-size-14">#{{vm.interaction.id}} - <span translate="DASHBOARDS.OPENED"></span></span>\n                <span ng-if="!vm.interaction.closed && vm.interaction.substatus" class="md-background-bg green-fg font-size-14">{{vm.interaction.substatus}}</span>\n            </div>\n            <md-divider></md-divider>\n            <md-list flex>\n                <md-list-item class="md-2-line">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.WEBSITE" ng-if="vm.tab.channel == \'chat\'">Website</p>\n                        <p translate="DASHBOARDS.ACCOUNT" ng-if="vm.tab.channel != \'chat\'">Account</p>\n                        <h4>{{vm.account.name}}</h4>\n                    </div>\n                </md-list-item>\n\n                <md-list-item class="md-2-line">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.AGENT">Agent</p>\n                        <h4>{{vm.agent.fullname || vm.usersMap[vm.interaction.UserId]}}</h4>\n                    </div>\n                </md-list-item>\n\n                <md-list-item class="md-2-line" ng-if="vm.interaction.externalUrl">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.EXTERNAL_URL">External URL</p>\n                        <a href="{{vm.interaction.externalUrl}}" target="_blank">\n                            <h4>{{vm.interaction.externalUrl}}</h4>\n                        </a>\n                    </div>\n                </md-list-item>\n\n                <md-list-item class="md-2-line">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.CREATED_AT">Created At</p>\n                        <h4>{{vm.interaction.createdAt | date: \'medium\'}}</h4>\n                    </div>\n                </md-list-item>\n\n                <div ng-switch="vm.tab.channel">\n                    <div ng-switch-when="chat">\n                        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.chat.html\'"></div>\n                    </div>\n                    <div ng-switch-when="mail">\n                        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.mail.html\'"></div>\n                    </div>\n                    <div ng-switch-when="openchannel">\n                        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.openchannel.html\'"></div>\n                    </div>\n                </div>\n\n                <md-list-item class="md-2-line" ng-if="vm.interaction.Tags.length">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.TAGS">Tags</p>\n                        <div class="tags padding-bottom-5" layout="row" layout-align="start center" layout-wrap>\n                            <div class="tag margin-right-5 margin-top-5 margin-bottom-5" layout="row" layout-align="center center" ng-repeat="tag in vm.interaction.Tags">\n                                <div class="tag-color" ng-style="{\'background\': tag.color}"></div>\n                                <div class="tag-label">{{tag.name}}</div>\n                            </div>\n                        </div>\n                    </div>\n                </md-list-item>\n\n                <md-divider ng-if="vm.interaction.closed"></md-divider>\n\n                <md-list-item class="md-2-line" ng-if="vm.interaction.closed">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.CLOSED_AT">Closed At</p>\n                        <h4>{{vm.interaction.closedAt | date: \'medium\'}}</h4>\n                    </div>\n                </md-list-item>\n                <md-list-item class="md-2-line" ng-if="vm.interaction.closed && vm.interaction.disposition">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.DISPOSITION">Disposition</p>\n                        <h4>{{ vm.interaction.disposition }}</h4>\n                    </div>\n                </md-list-item>\n                <md-list-item class="md-3-line md-long-text" ng-if="vm.interaction.closed && vm.interaction.note">\n                    <div class="md-list-item-text">\n                        <p translate="DASHBOARDS.NOTE">NOTE</p>\n                        <h4 style="overflow-wrap: break-word; white-space: normal">{{ vm.interaction.note }}</h4>\n                    </div>\n                </md-list-item>\n            </md-list>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="DASHBOARDS.CUSTOMER_JOURNEY">Journey</span>\n        </md-tab-label>\n        <md-tab-body>\n            <md-content class="md-padding">\n                <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.html\'"></div>\n            </md-content>\n        </md-tab-body>\n    </md-tab>\n</md-tabs>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.all.html",'<md-divider></md-divider>\n\n<md-list flex>\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.AGENT">Agent</p>\n            <h4>{{vm.agent.fullname || vm.usersMap[item.UserId] || \'DASHBOARDS.NOT_ASSIGNED\' | translate}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line" ng-if="item.externalUrl">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.EXTERNAL_URL">External URL</p>\n            <a href="{{item.externalUrl}}" target="_blank">\n                <h4>{{item.externalUrl}}</h4>\n            </a>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.CREATED_AT">Created At</p>\n            <h4>{{item.createdAt | date: \'medium\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <div ng-if="item.ChatWebsiteId">\n        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.chat.html\'"></div>\n    </div>\n    <div ng-if="item.MailAccountId">\n        <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.mail.html\'"></div>\n    </div>\n\n    <md-divider ng-if="item.closed"></md-divider>\n    <md-list-item class="md-2-line" ng-if="item.closed">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.CLOSED_AT">Closed At</p>\n            <h4>{{item.closedAt | date: \'medium\'}}</h4>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-2-line" ng-if="item.closed && item.disposition">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.DISPOSITION">Disposition</p>\n            <h4>{{ item.disposition }}</h4>\n        </div>\n    </md-list-item>\n    <md-list-item class="md-3-line md-long-text" ng-if="item.closed && item.note">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.NOTE">NOTE</p>\n            <h4 style="overflow-wrap: break-word; white-space: normal">{{ item.note }}</h4>\n        </div>\n    </md-list-item>\n\n    <p class="padding-horizontal-15 grey-fg">Tags</p>\n    <md-list-item ng-if="item.Tags.length">\n        <div class="tags padding-bottom-5" layout="row" layout-align="start center" layout-wrap>\n            <div class="tag margin-right-5 margin-top-5 margin-bottom-5" layout="row" layout-align="center center" ng-repeat="tag in item.Tags">\n                <div class="tag-color" ng-style="{\'background\': tag.color}"></div>\n                <div class="tag-label">{{tag.name}}</div>\n            </div>\n        </div>\n    </md-list-item>\n</md-list>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.html",'<md-content layout="column" layout-align="end center">\n    <div layout-margin>\n        <md-input-container>\n            <md-select ng-model="vm.channel" placeholder="Channel">\n                <md-option ng-value="undefined" translate="DASHBOARDS.ALL">All</md-option>\n                <md-option ng-value="\'voice\'" translate="DASHBOARDS.VOICE">Voice</md-option>\n                <md-option ng-value="\'chat\'">Chat</md-option>\n                <md-option ng-value="\'mail\'">Mail</md-option>\n                <md-option ng-value="\'sms\'">Sms</md-option>\n                <md-option ng-value="\'fax\'">Fax</md-option>\n                <md-option ng-value="\'openchannel\'">Openchannel</md-option>\n            </md-select>\n        </md-input-container>\n    </div>\n    <div layout-margin layout="row" layout-align="space-between center">\n        <div flex-gt-xs>\n            <md-datepicker ng-model="vm.dateFrom" md-placeholder="Enter date"></md-datepicker>\n        </div>\n\n        <div flex-gt-xs>\n            <md-datepicker ng-model="vm.dateTo" md-placeholder="Enter date"></md-datepicker>\n        </div>\n    </div>\n</md-content>\n\n<div id="timeline" ms-timeline="vm.timelineOptions" layout="column" ng-if="vm.journey && vm.journey.length">\n    \x3c!-- TIMELINE ITEM --\x3e\n    <div class="ms-timeline-item" layout-align="center center" ng-repeat="item in vm.journey | getChannelByItem:vm.channel:vm.dateFrom:vm.dateTo | orderBy:\'-createdAt\'">\n        <div class="timeline-card">\n            <md-card class="channel" ng-class="{\'md-grey-200-bg\': item.id == vm.interaction.id}">\n                <div class="header p-6" layout="row" layout-align="space-between center">\n\n                    <md-button class="md-fab md-mini" aria-label="icon-channel" ng-class="vm.getColorByItem(item) + \'-bg\'">\n                        <md-icon ng-if="item.FaxAccountId" md-font-icon="icon-deskphone"></md-icon>\n                        <md-icon ng-if="item.OpenchannelAccountId" md-font-icon="icon-google-earth"></md-icon>\n                        <md-icon ng-if="item.SmsAccountId" md-font-icon="icon-message-text"></md-icon>\n                        <md-icon ng-if="item.MailAccountId" md-font-icon="icon-email"></md-icon>\n                        <md-icon ng-if="item.ChatWebsiteId" md-font-icon="icon-hangouts"></md-icon>\n                        <md-icon ng-if="item.amaflags" md-font-icon="icon-phone"></md-icon>\n                    </md-button>\n\n                    <div class="info" layout="column" ng-init="item.showMore = false">\n                        <span class="font-size-12 text-truncate">#{{item.id}} - {{ item.Account.key || item.destination }}</span>\n                        <span class="font-size-10">{{item.createdAt | date: \'medium\'}}</span>\n                        <span>\n                            <a class="toggle-details md-accent-color" ng-hide="item.showMore" ng-click="item.showMore = !item.showMore" translate="DASHBOARDS.SHOW_DETAILS">\n                                Show Details\n                            </a>\n                            <a class="toggle-details md-accent-color" ng-show="item.showMore" ng-click="item.showMore = !item.showMore" translate="DASHBOARDS.HIDE_DETAILS">\n                                Hide Details\n                            </a>\n                        </span>\n                    </div>\n\n                    <span>\n                        <img ng-if="item.UserId" class="avatar" ng-src="api/users/{{item.UserId}}/avatar">\n                        <md-tooltip md-direction="left">{{item.Owner.fullname || item.User.fullname}}</md-tooltip>\n                    </span>\n\n                </div>\n\n                <div ng-if="item.showMore">\n                    <div ng-if="!item.amaflags" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.all.html\'"></div>\n                    <div ng-if="item.amaflags" ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.voice.html\'"></div>\n                </div>\n\n                <md-divider></md-divider>\n\n                <div ng-if="item.id != vm.interaction.id" layout="row" layout-align="space-around center">\n                    <div ng-if="item.closed && !amaflags" class="text-truncate white-fg">\n                        <span class="text-boxed md-background-bg red-fg" title="{{ \'DASHBOARDS.STATUS\' | translate}}: {{ \'DASHBOARDS.CLOSED\' | translate}} ({{ item.disposition || (\'DASHBOARDS.NO_DISPOSITION_SET\' | translate)}})">{{ \'DASHBOARDS.STATUS\' | translate}}: {{ \'DASHBOARDS.CLOSED\' | translate}} ({{ item.disposition || (\'DASHBOARDS.NO_DISPOSITION_SET\' | translate) }})</span>\n                    </div>\n                    <span class="text-boxed md-background-bg green-fg" ng-if="!item.closed && !item.amaflags" title="{{ \'DASHBOARDS.STATUS\' | translate}}: {{ \'DASHBOARDS.OPENED\' | translate}}">{{ \'DASHBOARDS.STATUS\' | translate}}: {{ \'DASHBOARDS.OPENED\' | translate}}<span ng-if="item.substatus"> - {{ item.substatus }}</span></span>\n                    <span ng-if="item.amaflags" class="text-boxed md-background-bg red-fg" title="{{ \'DASHBOARDS.DISPOSITION\' | translate}}: {{ item.userDisposition || \'No Dispose\'}}">{{ \'DASHBOARDS.DISPOSITION\' | translate}}: {{ item.userDisposition || (\'DASHBOARDS.NO_DISPOSITION_SET\' | translate)}}</span>\n                    <div flex></div>\n                    <md-button ng-if="!vm.tab.spy && vm.user.role === \'agent\' && vm.isMyAccount(item)" ng-disabled="item.amaflags" class="md-icon-button" aria-label="go" ng-click="vm.openInteraction($event, item)">\n                        <md-icon md-font-icon="icon-open-in-new" class="s20"></md-icon>\n                    </md-button>\n\n                </div>\n            </md-card>\n        </div>\n    </div>\n    \x3c!-- / TIMELINE ITEM --\x3e\n</div>\n<div ng-if="!vm.journey || !vm.journey.length" layout="row" layout-align="center center">\n    <em translate="DASHBOARDS.NO_DATA_AVAILABLE">No data available</em>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.journey.voice.html",'<md-divider></md-divider>\n\n<md-list flex>\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.TYPE">Type</p>\n            <h4>{{item.type ? item.type : \'no type\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.SOURCE">Source</p>\n            <h4>{{item.source ? item.source : \'unknown\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.DESTINATION">Destination</p>\n            <h4>{{item.destination ? item.destination : \'unknown\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.CALLERID">Caller Id</p>\n            <h4>{{item.callerid ? item.callerid : \'unknown\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.STARTEDAT">Started At</p>\n            <h4>{{item.starttime | date:\'medium\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.UNIQUEID">Uniqueid</p>\n            <h4>{{item.uniqueid ? item.uniqueid : \'unknown\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.END_AT">End At</p>\n            <h4>{{item.endtime | date:\'medium\'}}</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.DURATION">Duration</p>\n            <h4>{{item.duration ? item.duration : \'--\'}}s</h4>\n        </div>\n    </md-list-item>\n\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.NOTE">Note</p>\n            <h4>{{item.note ? item.note : \'--\'}}</h4>\n        </div>\n    </md-list-item>\n</md-list>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.mail.html",'<div ng-init="item = item || vm.interaction">\n    <md-list-item class="md-2-line" ng-if="item.subject">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.SUBJECT">Subject</p>\n            <h4>{{item.subject}}</h4>\n        </div>\n    </md-list-item>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.info.openchannel.html",'<div ng-init="item = item || vm.interaction">\n    <md-list-item class="md-2-line">\n        <div class="md-list-item-text">\n            <p translate="DASHBOARDS.VISIBILITY">Visibility</p>\n            <h4 ng-if="item.threadId" translate="DASHBOARDS.PUBLIC">Public</h4>\n            <h4 ng-if="!item.threadId" translate="DASHBOARDS.PRIVATE">Private</h4>\n        </div>\n    </md-list-item>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.interaction.html",'\x3c!-- MESSAGES --\x3e\n<div layout="row" ng-repeat="message in vm.messages.rows" class="md-padding message-row" ng-class="vm.getMessagesAlignment(message)">\n    <img ng-if="message.direction ===\'in\'" src="assets/images/avatars/customer.png" class="avatar" />\n    <img ng-if="message.direction ===\'out\' && message.UserId && !message.secret" ng-src="api/users/{{message.UserId}}/avatar" class="avatar" />\n    <img ng-if="message.direction ===\'out\' && message.UserId && message.secret" ng-src="api/users/{{message.UserId}}/avatar" class="avatar" />\n    <img ng-if="message.direction ===\'out\' && !message.UserId" class="avatar" src="assets/images/avatars/robot.png">\n    <md-button ng-if="vm.tab.channel === \'fax\'" class="md-fab md-mini no-margin" aria-label="Download" ng-click="vm.downloadMessage(message)">\n        <md-icon md-font-icon="icon-download" class="icon s24"></md-icon>\n    </md-button>\n\n    <div class="bubble" ng-class="{\'md-yellow-200-bg\': message.secret}" ng-switch="message.direction">\n        <div ng-if="message.secret">\n            <div class="time secondary-text" layout="row" layout-align="end center">\n                <div layout-padding>\n                    {{ vm.getLabelByMessage(message) }} - {{message.createdAt | date: \'medium\'}}\n                </div>\n                <div ng-if="message.id">\n                    <md-icon class="s18" md-font-icon="icon-lock"></md-icon>\n                </div>\n            </div>\n        </div>\n        <div ng-if="!message.secret">\n            <div ng-switch-when="in" class="time secondary-text" ng-click="message.Contact && vm.openContact(ev, message.Contact)">\n                {{ vm.getLabelByMessage(message) }} - {{message.createdAt | date: \'medium\'}}\n            </div>\n            <div ng-switch-when="out" class="time secondary-text" layout="row" layout-align="end center">\n                <div layout-padding>\n                    {{ vm.getLabelByMessage(message) }} - {{message.createdAt | date: \'medium\'}}\n                </div>\n                <div ng-if="message.id && vm.tab.channel !== \'fax\'">\n                    <md-icon ng-if="!message.read" class="s18" md-font-icon="icon-check"></md-icon>\n                    <md-icon ng-if="message.read" class="s18" md-font-icon="icon-check-all md-accent"></md-icon>\n                </div>\n                <div ng-if="message.id && vm.tab.channel === \'fax\'">\n                    <md-icon ng-if="!message.read && !(message.failMessage )" class="s18" md-font-icon="icon-check"></md-icon>\n                    <md-icon ng-if="message.read" class="s18" md-font-icon="icon-check-all md-accent"></md-icon>\n                    <span ng-if="!message.read && message.failMessage" class="s18 red-900-fg"> {{ message.failMessage }}</span>\n                    <md-icon ng-if="!message.read && message.failMessage" class="s18 red-900-fg" md-font-icon="icon-close md-accent"></md-icon>\n                </div>\n            </div>\n        </div>\n        <div ng-if="message.AttachmentId" layout="row" layout-align="end center">\n            <md-button class="md-raised md-accent" ng-click="vm.getAttachment({id: message.AttachmentId, name: vm.htmlToPlaintext(message.body)})">\n                <span>{{vm.htmlToPlaintext(message.body)}}</span>\n                <md-icon md-font-icon="icon-download"></md-icon>\n            </md-button>\n        </div>\n        <div ng-if="!message.AttachmentId" class="message" layout="row" layout-align="end center">\n            <span ng-bind-html="message.body | embed: vm.embedOptions"></span>\n        </div>\n    </div>\n</div>\n\x3c!-- / MESSAGES --\x3e'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.interaction.mail.html",'<div ms-timeline="vm.timelineOptions" ms-timeline-load-more="vm.loadNextPage()">\n    <div ng-repeat="message in vm.messages.rows track by message.id" ng-init="vm.selectedMailShowSystemMessage[message.id] = false">\n        <md-card ng-if="message.secret" class="md-padding md-yellow-100-bg" layout="column">\n            <div layout="row" layout-align="start center">\n                <img class="avatar" ng-src="api/users/{{message.UserId}}/avatar">\n                <div layout="column">\n                    <span class="grey-fg">{{vm.agent.fullname || vm.usersMap[message.UserId]}}</span>\n                    <span class="grey-fg">{{message.createdAt | date:\'medium\'}}</span>\n                </div>\n            </div>\n            <div layout="row" layout-align="center center" layout-fill ng-if="message.attach">\n                <div flex>\n                    <md-divider></md-divider>\n                </div>\n                <md-menu>\n                    <md-button aria-label="attachments" class="md-icon-button" ng-click="vm.getAttachments(message); $mdOpenMenu($event);">\n                        <md-tooltip md-direction="bottom"><span translate="MAIL.ATTACHMENTS">Attachments</span>\n                        </md-tooltip>\n                        <div layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="icon s24"></md-icon>\n                            <span>{{message.attach}}</span>\n                        </div>\n                    </md-button>\n                    <md-menu-content width="4">\n                        <div layout="column" layout-align="center center" ng-if="!message.attachments">\n                            <md-progress-circular md-mode="indeterminate"></md-progress-circular>\n                            <span translate="MAIL.ATTACHMENTS">Attachments</span>\n                        </div>\n                        <md-menu-item ng-if="message.attachments" ng-repeat="attachment in message.attachments">\n                            <md-button ng-click="vm.getAttachment(attachment)">\n                                {{ attachment.name || (\'attachment-\' + $index) }}</md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n                <div flex>\n                    <md-divider></md-divider>\n                </div>\n            </div>\n            <div class="padding-top-5" ng-bind-html-unsafe="message.body"></div>\n        </md-card>\n        <div ng-if="!message.secret">\n            <div layout="row" layout-align="center center" ng-if="message.direction == \'out\' && !message.UserId && !vm.selectedMailShowSystemMessage[message.id]">\n                <md-button class="md-raised blue-grey-300-bg white-fg" ng-click="vm.selectedMailShowSystemMessage[message.id] = !vm.selectedMailShowSystemMessage[message.id]">\n                    [{{message.createdAt | date: \'medium\'}}] {{ \'MAIL.SHOW_AUTOREPLY\' | translate }}</md-button>\n            </div>\n            <md-card layout="column" class="md-padding message-row" ng-if="message.direction == \'in\' || (message.direction == \'out\' && (message.UserId || vm.selectedMailShowSystemMessage[message.id]))">\n                <md-content class="mail-content">\n                    <div class="info" layout="row" layout-align="space-between start">\n                        <div layout="column" layout-align="start start">\n                            <div layout="row" layout-align="start start">\n                                <div layout="column" layout-align="start start">\n                                    <div class="name" ng-click="message.Contact && vm.openContact(ev, message.Contact)">\n                                        <strong>{{message.from}}</strong>\n                                        <md-icon ng-if="message.attach" md-font-icon="icon-paperclip" class="s16">\n                                        </md-icon>\n                                    </div>\n                                    <div class="name">\n                                        <div>{{message.subject}}</div>\n                                    </div>\n                                    <div class="name" layout="row" layout-align="start center"><span translate="MAIL.TO">To</span>: <span class="padding-left-5 subject text-truncate">{{ message.originTo || message.to }}</span>\n                                    </div>\n                                    <div class="name padding-top-10" layout="row" layout-align="start center" ng-if="message.direction == \'in\' && message.originCc && message.originCc.indexOf(vm.account.email) >= 0">\n                                        <em><span class="blue-grey" translate="MAIL.YOU_ARE_REGISTERED_AS_A">You are\n                                                registered as a</span> <span class="blue-grey">CC</span></em></div>\n                                    <div class="name padding-top-10" layout="row" layout-align="start center" ng-if="message.direction == \'in\' && message.bcc && message.bcc.indexOf(vm.account.email) >= 0">\n                                        <em><span class="red-fg" translate="MAIL.YOU_ARE_REGISTERED_AS_A">You are\n                                                registered as a</span> <span class="red-fg">BCC</span></em></div>\n                                </div>\n                            </div>\n\n                            <a class="toggle-details md-accent-color" ng-hide="vm.selectedMailShowDetails[message.id]" ng-click="vm.selectedMailShowDetails[message.id] = !vm.selectedMailShowDetails[message.id]" translate="MAIL.SHOW_DETAILS">\n                                Show Details\n                            </a>\n                            <a class="toggle-details md-accent-color" ng-show="vm.selectedMailShowDetails[message.id]" ng-click="vm.selectedMailShowDetails[message.id] = !vm.selectedMailShowDetails[message.id]" translate="MAIL.HIDE_DETAILS">\n                                Hide Details\n                            </a>\n                            <div ng-show="vm.selectedMailShowDetails[message.id]" class="details" layout="row" layout-align="start start">\n                                <div layout="column">\n                                    <span class="title" translate="MAIL.DATE">Date:</span>\n                                    <span class="title" translate="MAIL.FROM">From:</span>\n                                    <span class="title" translate="MAIL.TO">To:</span>\n                                    \x3c!-- NOTE: Start retrocompatibility with replyCc 2.0.66 --\x3e\n                                    <span class="title" translate="MAIL.CC" ng-if="message.direction === \'in\' && message.originCc">Cc:</span>\n                                    <span class="title" translate="MAIL.CC" ng-if="message.direction === \'in\' && !message.originCc && !message.originTo && message.cc">Cc:</span>\n                                    <span class="title" translate="MAIL.CC" ng-if="message.direction === \'out\' && message.cc">Cc:</span>\n                                    \x3c!-- End retrocompatibility --\x3e\n                                    <span class="title" translate="MAIL.BCC" ng-if="message.bcc">Bcc:</span>\n                                    <span class="title" translate="MAIL.ACCEPTED" ng-if="message.UserId && message.direction ===\'in\'">Accepted:</span>\n                                </div>\n\n                                <div layout="column">\n                                    <span class="detail">{{message.createdAt | date:\'medium\'}}</span>\n                                    <span class="detail">{{message.from}}</span>\n                                    <span class="detail">{{message.originTo || message.to}}</span>\n                                    \x3c!-- NOTE: Start retrocompatibility with replyCc 2.0.66 --\x3e\n                                    <span class="detail" ng-if="message.direction === \'in\' && message.originCc">{{ message.originCc }}</span>\n                                    <span class="detail" ng-if="message.direction === \'in\' && !message.originCc && !message.originTo && message.cc">{{ message.cc }}</span>\n                                    <span class="detail" ng-if="message.direction === \'out\' && message.cc">{{ message.cc }}</span>\n                                    \x3c!-- End retrocompatibility --\x3e\n                                    <span class="detail" ng-if="message.bcc">{{message.bcc}}</span>\n                                    <span class="detail" ng-if="message.UserId && message.direction ===\'in\'">{{vm.usersMap[message.UserId]}}</span>\n                                </div>\n                            </div>\n                        </div>\n\n                        <div layout="row" layout-align="center center">\n                            <div layout="column" layout-align="center end" class="md-padding">\n                                <span class="grey-fg" ng-if="message.direction ===\'in\'">{{message.from.indexOf(vm.contact.email) >= 0 ? vm.contact.firstName + \' \' + vm.contact.lastName : \'*\' + message.from}}</span>\n                                <span class="grey-fg" ng-if="message.direction ===\'out\' && message.UserId">{{vm.agent.fullname || vm.usersMap[message.UserId]}}</span>\n                                <span class="grey-fg" ng-if="message.direction ===\'out\' && !message.UserId">System</span>\n                                <span class="grey-fg">{{message.createdAt | date:\'medium\'}}</span>\n                            </div>\n                            <img ng-if="message.direction ===\'in\'" ng-src="assets/images/avatars/customer.png" class="avatar" alt="customer" />\n                            <img ng-if="message.direction ===\'out\' && message.UserId" class="avatar" ng-src="api/users/{{message.UserId}}/avatar">\n                            <img ng-if="message.direction ===\'out\' && !message.UserId" class="avatar" src="assets/images/avatars/robot.png">\n                            \x3c!-- <md-button class="md-fab md-mini no-margin" aria-label="Download" ng-click="vm.downloadMessage(message)">\n                                <md-icon md-font-icon="icon-download" class="icon s24"></md-icon>\n                            </md-button> --\x3e\n                        </div>\n                    </div>\n\n                    <div layout="row" layout-align="center center" layout-fill>\n                        <div flex>\n                            <md-divider></md-divider>\n                        </div>\n                        <div>\n                            <div class="interaction-reply-button-container">\n                                <md-tooltip md-direction="bottom"><span translate="DASHBOARDS.DRAFT">Draft</span>\n                                </md-tooltip>\n                                <md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="draft" ng-disabled="!vm.draft" ng-click="vm.openDraft()">\n                                    <md-icon md-font-icon="icon-pencil-box" class="icon s24"></md-icon>\n                                </md-button>\n                            </div>\n                            <md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="reply" ng-click="vm.composeMailInteraction(\'reply\', message)">\n                                <md-tooltip md-direction="bottom"><span translate="MAIL.REPLY">Reply</span></md-tooltip>\n                                <md-icon md-font-icon="icon-reply" class="icon s24"></md-icon>\n                            </md-button>\n                            <md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="replyAll" ng-click="vm.composeMailInteraction(\'replyAll\', message)">\n                                <md-tooltip md-direction="bottom"><span translate="MAIL.REPLY_ALL">Reply All</span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-reply-all" class="icon s24"></md-icon>\n                            </md-button>\n                            <md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="forward" ng-click="vm.composeMailInteraction(\'forward\', message)">\n                                <md-tooltip md-direction="bottom"><span translate="MAIL.FORWARD">Forward</span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-forward" class="icon s24"></md-icon>\n                            </md-button>\n                            <md-button ng-if="!message.attach" class="md-icon-button" aria-label="forward" ng-click="vm.downloadMessage(message)">\n                                <md-tooltip md-direction="bottom"><span translate="MAIL.DOWNLOAD">Download</span>\n                                </md-tooltip>\n                                <md-icon md-font-icon="icon-download" class="icon s24"></md-icon>\n                            </md-button>\n                            <md-menu ng-if="message.attach" class="no-margin" md-position-mode="target-right target">\n                                <md-button class="md-icon-button" ng-click="$mdOpenMenu()" aria-label="download">\n                                    <md-tooltip md-direction="bottom"><span translate="MAIL.DOWNLOAD">Download</span>\n                                    </md-tooltip>\n                                    <md-icon md-font-icon="icon-download"></md-icon>\n                                </md-button>\n                                <md-menu-content width="2">\n                                    <md-menu-item>\n                                        <md-button ng-click="vm.downloadMessage(message, true)" translate="MAIL.DOWNLOAD_WITH_ATTACHMENTS">\n                                            Download with attachments\n                                        </md-button>\n                                    </md-menu-item>\n                                    <md-menu-item>\n                                        <md-button ng-click="vm.downloadMessage(message)" translate="MAIL.DOWNLOAD_WITHOUT_ATTACHMENTS">\n                                            Download without attachments\n                                        </md-button>\n                                    </md-menu-item>\n                                </md-menu-content>\n                            </md-menu>\n                            <md-menu ng-if="message.attach">\n                                <md-button aria-label="attachments" class="md-icon-button" ng-click="vm.getAttachments(message); $mdOpenMenu($event);">\n                                    <md-tooltip md-direction="bottom"><span translate="MAIL.ATTACHMENTS">Attachments</span></md-tooltip>\n                                    <div layout="row" layout-align="start center">\n                                        <md-icon md-font-icon="icon-paperclip" class="icon s24"></md-icon>\n                                        <span>{{message.attach}}</span>\n                                    </div>\n                                </md-button>\n                                <md-menu-content width="4">\n                                    <div layout="column" layout-align="center center" ng-if="!message.attachments">\n                                        <md-progress-circular md-mode="indeterminate"></md-progress-circular>\n                                        <span translate="MAIL.ATTACHMENTS">Attachments</span>\n                                    </div>\n                                    <md-menu-item ng-if="message.attachments" ng-repeat="attachment in message.attachments">\n                                        <md-button ng-click="vm.getAttachment(attachment)">\n                                            {{ attachment.name || (\'attachment-\' + $index) }}</md-button>\n                                    </md-menu-item>\n                                </md-menu-content>\n                            </md-menu>\n                        </div>\n                        <div flex>\n                            <md-divider></md-divider>\n                        </div>\n                    </div>\n\n                    <md-content ng-bind-html-unsafe="message.body"></md-content>\n                </md-content>\n            </md-card>\n        </div>\n    </div>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.loading.html",'<div class="big-circle md-whiteframe-4dp">\n    <md-icon class="s128 md-accent" md-font-icon="{{vm.getIconByChannel(vm.tab.channel)}}" ng-class="vm.getColorByChannel(vm.tab.channel) + \'-fg\'"></md-icon>\n</div>\n<span class="app-title" translate="DASHBOARDS.WAITING">Waiting</span>\n<span class="hide show-gt-md secondary-text" translate="DASHBOARDS.LOADING_INTERACTION">We are loading the interaction...</span>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.fax.html",'<md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="reply" ng-click="vm.composeFaxInteraction(\'new\')">\n    <md-tooltip md-direction="bottom"><span translate="FAX.REPLY">Reply</span></md-tooltip>\n    <md-icon md-font-icon="icon-reply" class="icon s24"></md-icon>\n</md-button>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.html",'<div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n    <md-icon md-font-icon="{{vm.getIconByChannel(vm.tab.channel)}}" class="s20" ng-class="vm.getColorByChannel(vm.tab.channel) + \'-fg\'"></md-icon>\n    <div class="padding-left-10" layout="column" layout-align="center start" flex>\n        <div class="font-size-14" layout="row" layout-align="start center" layout-fill>\n            <span>#{{vm.interaction.id}} - {{vm.account.key}}</span>\n            <div layout="row" layout-align="center center" class="p-8">\n                <md-icon ng-if="vm.tab.channel === \'openchannel\' && vm.interaction.threadId" md-font-icon="fas fa-users" class="s16">\n                    <md-tooltip><span translate="DASHBOARDS.PUBLIC_INTERACTION">The interaction is public</span></md-tooltip>\n                </md-icon>\n                <md-icon ng-if="vm.interaction.attach" md-font-icon="icon-paperclip" class="s16"></md-icon>\n            </div>\n            <span class="red-fg padding-left-25" ng-if="vm.interaction.closed" translate="DASHBOARDS.CLOSED">CLOSED</span>\n            <span class="green-fg padding-left-25" ng-if="!vm.interaction.closed"><span translate="DASHBOARDS.OPENED">OPENED</span><span ng-if="vm.interaction.substatus"> - {{vm.interaction.substatus}}</span></span>\n            <div layout="row" layout-align="center center" class="blue-grey-300-fg padding-left-40" ng-if="!vm.interaction.closed">\n                <timer start-time="vm.interaction.createdAt" interval="1000">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                <md-icon md-font-icon="icon-timelapse" class="s16 padding-left-5"></md-icon>\n            </div>\n        </div>\n        <div class="tags" layout="row" layout-align="start center" ng-if="vm.interaction.Tags.length" ng-class="{\'padding-top-5\': vm.interaction.Tags.length}">\n            <div class="tag margin-right-5" layout="row" layout-align="center center" ng-repeat="tag in vm.interaction.Tags">\n                <div class="tag-color" ng-style="{\'background\': tag.color}"></div>\n                <div class="tag-label">{{tag.name}}</div>\n            </div>\n        </div>\n    </div>\n    <div layout="row" layout-align="end center">\n        <div ng-switch="vm.tab.channel">\n            <div ng-switch-when="mail">\n                <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.mail.html\'"></div>\n            </div>\n            <div ng-switch-when="fax">\n                <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.fax.html\'"></div>\n            </div>\n            <div ng-switch-when="sms">\n                <div ng-include="\'app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.sms.html\'"></div>\n            </div>\n        </div>\n        <md-button ng-if="vm.tab.channel !== \'mail\'" class="md-icon-button" aria-label="Download" ng-click="vm.downloadInteraction(vm.interaction)">\n            <md-tooltip md-direction="bottom"><span translate="DASHBOARDS.DOWNLOAD">Download</span></md-tooltip>\n            <md-icon md-font-icon="icon-download" class="icon s24"></md-icon>\n        </md-button>\n        <md-menu class="no-margin" ng-if="!vm.interaction.disposition" md-position-mode="target-right target">\n            <md-button class="md-icon-button" ng-click="$mdOpenMenu()" aria-label="more">\n                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n            </md-button>\n\n            <md-menu-content width="2">\n                <md-menu-item>\n                    <md-button ng-click="vm.tagInteraction()" translate="DASHBOARDS.TAG">\n                        Tag\n                    </md-button>\n                </md-menu-item>\n                <md-menu-item ng-if="vm.account.queueTransfer || vm.account.agentTransfer">\n                    <md-button ng-click="vm.transferLastMessage()" translate="DASHBOARDS.TRANSFER">\n                        Transfer\n                    </md-button>\n                </md-menu-item>\n                <md-menu-item ng-if="!vm.interaction.closed && vm.tab.channel == \'mail\' && (vm.subStatuses.rows.length || vm.interaction.substatus != null)">\n                    <md-menu>\n                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.SET_AS">\n                            Set as\n                        </md-button>\n                        <md-menu-content>\n                            <md-menu-item ng-if="vm.interaction.substatus != null">\n                                <md-button ng-click="vm.setAs(null)" translate="DASHBOARDS.NONE">\n                                    None\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item ng-repeat="subStatus in vm.subStatuses.rows">\n                                <md-button ng-click="vm.setAs(subStatus.name)">\n                                    {{subStatus.name}}\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </md-menu-item>\n                <md-menu-item ng-if="!vm.interaction.closed && vm.tab.channel == \'mail\' && vm.account.markAsUnread">\n                    <md-button ng-click="vm.markAsUnread()" translate="DASHBOARDS.MARK_AS_UNREAD">\n                        Unread\n                    </md-button>\n                </md-menu-item>\n                <md-menu-item ng-if="!vm.tab.spy && !vm.interaction.closed">\n                    <md-button ng-click="vm.disposeInteraction()" translate="DASHBOARDS.CLOSE_AND_DISPOSE">\n                        Close and Dispose\n                    </md-button>\n                </md-menu-item>\n                <md-menu-item ng-if="!vm.tab.spy && vm.interaction.closed && !vm.interaction.disposition">\n                    <md-button ng-click="vm.disposeInteraction(ev)" translate="DASHBOARDS.DISPOSE">\n                        Dispose\n                    </md-button>\n                </md-menu-item>\n            </md-menu-content>\n        </md-menu>\n    </div>\n</div>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.mail.html",'<div class="interaction-reply-button-container">\n    <md-tooltip md-direction="bottom"><span translate="DASHBOARDS.DRAFT">Draft</span></md-tooltip>\n    <md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="draft" ng-disabled="!vm.draft" ng-click="vm.openDraft()">\n        <md-icon ng-cloak md-font-icon="icon-pencil-box" class="icon s24" ng-class="vm.draft ? \'red-500-fg\' : \'grey-fg\'"></md-icon>\n    </md-button>\n</div>\n<md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="reply" ng-click="vm.composeMailInteraction(\'reply\', vm.interaction)">\n    <md-tooltip md-direction="bottom"><span translate="MAIL.REPLY">Reply</span></md-tooltip>\n    <md-icon md-font-icon="icon-reply" class="icon s24"></md-icon>\n</md-button>\n<md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="replyAll" ng-click="vm.composeMailInteraction(\'replyAll\', vm.interaction)">\n    <md-tooltip md-direction="bottom"><span translate="MAIL.REPLY_ALL">Reply All</span></md-tooltip>\n    <md-icon md-font-icon="icon-reply-all" class="icon s24"></md-icon>\n</md-button>\n<md-button ng-if="!vm.interaction.closed && !vm.tab.spy" class="md-icon-button" aria-label="forward" ng-click="vm.composeMailInteraction(\'forward\', vm.interaction)">\n    <md-tooltip md-direction="bottom"><span translate="MAIL.FORWARD">Forward</span></md-tooltip>\n    <md-icon md-font-icon="icon-forward" class="icon s24"></md-icon>\n</md-button>\n<md-button class="md-icon-button" aria-label="note" ng-click="vm.composeMailInteraction(\'note\', vm.interaction)">\n    <md-tooltip md-direction="bottom"><span translate="MAIL.NOTE">Note</span></md-tooltip>\n    <md-icon md-font-icon="icon-note-outline" class="icon s24"></md-icon>\n</md-button>\n<md-menu class="no-margin" md-position-mode="target-right target">\n    <md-button class="md-icon-button" ng-click="$mdOpenMenu()" aria-label="download">\n        <md-tooltip md-direction="bottom"><span translate="MAIL.DOWNLOAD">Download</span></md-tooltip>\n        <md-icon md-font-icon="icon-download"></md-icon>\n    </md-button>\n    <md-menu-content width="2">\n        <md-menu-item>\n            <md-button ng-click="vm.downloadInteraction(vm.interaction, true)" translate="MAIL.DOWNLOAD_WITH_ATTACHMENTS">\n                Download with attachments\n            </md-button>\n        </md-menu-item>\n        <md-menu-item>\n            <md-button ng-click="vm.downloadInteraction(vm.interaction)" translate="MAIL.DOWNLOAD_WITHOUT_ATTACHMENTS">\n                Download without attachments\n            </md-button>\n        </md-menu-item>\n    </md-menu-content>\n</md-menu>'),e.put("app/main/apps/dashboards/views/general/agent/interaction/views/agent.general.toolbar.sms.html",'<md-button class="md-icon-button" aria-label="note" ng-click="vm.composeSmsInteraction(\'note\', vm.interaction)">\n    <md-tooltip md-direction="bottom"><span translate="SMS.NOTE">Note</span></md-tooltip>\n    <md-icon md-font-icon="icon-note-outline" class="icon s24"></md-icon>\n</md-button>'),e.put("app/main/apps/dashboards/views/general/agent/jscripty/agent.general.jscripty.html",'<md-content class="md-padding" layout="column" layout-align="center center">\n    <div layout="row" layout-align="center center">\n        <span ng-if="!vm.tab.saved" class="text-boxed md-green-bg">\n            <timer start-time="vm.starttime" interval="1000">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n        </span>\n        <span ng-if="vm.contact" class="text-boxed md-gray-bg font-weight-900">{{vm.contact.firstName}} {{vm.contact.lastName}} {{vm.contact.phone}}</span>\n        <md-button ng-if="vm.showResetButton" ng-click="vm.resetViewer()" md-no-ink class="md-raised md-accent orange-bg">\n            <md-icon md-font-icon="icon-rotate-left" class="icon s16"></md-icon> {{\'JSCRIPTY.RESET_SESSION\' | translate}}\n        </md-button>\n        <md-button ng-if="vm.contact" ng-click="vm.openContact($event, vm.contact)" md-no-ink class="md-raised md-accent" translate="JSCRIPTY.OPEN_CONTACT"></md-button>\n        <md-button ng-if="vm.showIncompleteSubmitButton" ng-click="vm.onSubmit($event, true)" md-no-ink class="md-raised md-accent green-bg" translate="JSCRIPTY.SUBMIT"></md-button>\n    </div>\n    <h1 ng-if="!vm.project.formData"><span translate="JSCRIPTY.PROJECT_NOT_AVAILABLE">Project is not available. Please contact the administrator</span></h1>\n    <mw-form-viewer ng-if="vm.project.formData" form-data="vm.project.formData" response-data="vm.project.responseData" on-submit="vm.onSubmit($event)" template-data="call" api="vm.formViewer"></mw-form-viewer>\n</md-content>'),e.put("app/main/apps/dashboards/views/general/agent/notification/dialog.html",'\x3c!-- <md-toast> --\x3e\n<div class="md-padding" layout="column" layout-align="center center">\n    <span class="md-title">#{{vm.notification.id}} {{vm.notification.title}}</span>\n    <span class="md-subhead" ng-if="vm.notification.queue">{{vm.notification.queue}}</span>\n    <div class="padding-top-5" layout="row">\n        <md-button class="md-raised md-accent" ng-click="vm.accept($event)" translate="DASHBOARDS.ACCEPT">\n            ACCEPT\n        </md-button>\n        <md-button class="md-raised md-warn" ng-click="vm.reject($event)" translate="DASHBOARDS.REJECT">\n            REJECT\n        </md-button>\n    </div>\n</div>\n\x3c!-- </md-toast> --\x3e'),e.put("app/main/apps/dashboards/views/general/agent/popup/agent.general.popup.html",'<md-content class="md-padding" flex>\n    <div ng-if="vm.html" ng-bind-html="vm.html"></div>\n    <h1 ng-if="!vm.html">Template is empty. Please contact the administrator</h1>\n</md-content>'),e.put("app/main/apps/dashboards/views/general/user/chat/user.general.chat.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-hangouts" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_INTERACTIONS_STATS">Today Interactions STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{vm.inbound.talking || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OPENED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.OPENED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OPENED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-52 line-height-72">\n                        {{vm.inbound.abandoned || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.ABANDONED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.ABANDONED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.ABANDONED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOTAL_OFFERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.TOTAL_OFFERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOTAL_OFFERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgHoldTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_HOLD_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_HOLD_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_HOLD_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgTalkTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_MANAGED_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_MANAGED_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_MANAGED_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.answerRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.abandonRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.ABANDONED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.ABANDONED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.ABANDONED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.unmanaged || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET INBOUND --\x3e'),e.put("app/main/apps/dashboards/views/general/user/dialer/user.general.dialer.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-phone-outgoing" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_MOTION_BULL_STATS">Today Motion Bull STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-timelapse"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-in-talk"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{(vm.inbound.talking || 0) + (vm.inbound.pTalking || 0)}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_TALKING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_TALKING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_TALKING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ANSWERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ANSWERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_ANSWERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-missed"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-52 line-height-72">\n                        {{vm.inbound.outboundDropCallsDayCallersExit || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ABANDONED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ABANDONED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.ABANDON_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-outgoing"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.outboundDropCallsDayTimeout || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.DROPPED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.DROPPED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.DROPPED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-dots"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.originated || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.ORIGINATED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.ORIGINATED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.ORIGINATED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-in-talk"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgTalkTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_AVG_TALK_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_AVG_TALK_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_AVG_TALK_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-percent"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.outboundanswerRate || 0 |number : 1}}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ANSWER_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ANSWER_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_ANSWER_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-percent"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.outboundAbandonRate || 0}}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ABANDON_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ABANDON_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_ABANDON_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-percent"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.outboundDropRate }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.DROP_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.DROP_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.DROP_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET OUTBOUND --\x3e\n\n\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-phone-outgoing" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_IVR_CAMPAIGNS_STATS">Today IVR campaigns stats</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-dots"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.ivr.originated || 0}}/{{vm.ivr.limitCalls || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.ORIGINATED\' | translate | uppercase}}/{{\'DASHBOARDS.LIMITED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.LIMITED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.ORIGINATEDLIMITED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET IVR --\x3e'),e.put("app/main/apps/dashboards/views/general/user/fax/user.general.fax.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-deskphone" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_INTERACTIONS_STATS">Today Interactions STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{vm.inbound.talking || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OPENED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.OPENED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OPENED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.unmanaged || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOTAL_OFFERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.TOTAL_OFFERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOTAL_OFFERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="50">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgHoldTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_HOLD_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_HOLD_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_HOLD_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.answerRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.abandonRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET INBOUND --\x3e'),e.put("app/main/apps/dashboards/views/general/user/mail/user.general.mail.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-email" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_INTERACTIONS_STATS">Today Interactions STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{vm.inbound.talking || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OPENED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.OPENED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OPENED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.unmanaged || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOTAL_OFFERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.TOTAL_OFFERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOTAL_OFFERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="50">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgHoldTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_HOLD_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_HOLD_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_HOLD_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.answerRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.abandonRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET INBOUND --\x3e'),e.put("app/main/apps/dashboards/views/general/user/openchannel/user.general.openchannel.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-google-earth" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_INTERACTIONS_STATS">Today Interactions STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{vm.inbound.talking || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OPENED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.OPENED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OPENED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.unmanaged || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOTAL_OFFERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.TOTAL_OFFERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOTAL_OFFERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="50">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgHoldTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_HOLD_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_HOLD_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_HOLD_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.answerRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.abandonRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET INBOUND --\x3e'),e.put("app/main/apps/dashboards/views/general/user/sms/user.general.sms.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-message-text" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_INTERACTIONS_STATS">Today Interactions STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{vm.inbound.talking || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OPENED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.OPENED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OPENED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.unmanaged || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOTAL_OFFERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.TOTAL_OFFERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOTAL_OFFERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="50">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgHoldTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_HOLD_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_HOLD_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_HOLD_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.answerRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.MANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.MANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.MANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.abandonRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.UNMANAGED_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.UNMANAGED_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.UNMANAGED_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET INBOUND --\x3e'),e.put("app/main/apps/dashboards/views/general/user/user.general.html",'<div id="dashboard-general" class="page-layout simple right-sidenav" layout="row">\n    \x3c!-- CENTER --\x3e\n    <div class="center" flex ms-scroll>\n        \x3c!-- CONTENT --\x3e\n        <div class="content">\n            \x3c!--  NOTE: aggoiungere nel controller ng-if="vm.hasPermission()" --\x3e\n            <md-tabs ng-if="vm.hasPermission()" md-selected="vm.selectedTab" md-dynamic-height>\n                <md-tab ng-if="vm.license.voice" label="{{\'DASHBOARDS.VOICE\' | translate}}" ui-sref="app.dashboards.general.voice">\n                    <div ui-view="voice"></div>\n                </md-tab>\n                <md-tab ng-if="vm.license.dialer" label="{{\'DASHBOARDS.MOTIONDIALER\' | translate}}" ui-sref="app.dashboards.general.dialer">\n                    <div ui-view="dialer"></div>\n                </md-tab>\n                <md-tab ng-if="vm.license.chat" label="{{\'DASHBOARDS.CHAT\' | translate}}" ui-sref="app.dashboards.general.chat">\n                    <div ui-view="chat"></div>\n                </md-tab>\n                <md-tab ng-if="vm.license.mail" label="{{\'DASHBOARDS.MAIL\' | translate}}" ui-sref="app.dashboards.general.mail">\n                    <div ui-view="mail"></div>\n                </md-tab>\n                <md-tab ng-if="vm.license.messaging" label="{{\'DASHBOARDS.SMS\' | translate}}" ui-sref="app.dashboards.general.sms">\n                    <div ui-view="sms"></div>\n                </md-tab>\n                <md-tab ng-if="vm.license.openchannel" label="{{\'DASHBOARDS.OPENCHANNEL\' | translate}}" ui-sref="app.dashboards.general.openchannel">\n                    <div ui-view="openchannel"></div>\n                </md-tab>\n                <md-tab ng-if="vm.license.fax" label="{{\'DASHBOARDS.FAX\' | translate}}" ui-sref="app.dashboards.general.fax">\n                    <div ui-view="fax"></div>\n                </md-tab>\n            </md-tabs>\n        </div>\n        \x3c!-- END CONTENT --\x3e\n\n        <md-content ng-if="!vm.hasPermission()" layout="row" layout-align="space-around center" flex layout-padding layout-wrap>\n            <div layout="column" layout-align="space-around center" flex="50">\n                <span class="font-size-40 text-center">{{ \'DASHBOARDS.WELCOME_TO_MOTION\' | translate }}!</span>\n                <span class="font-size-30 text-center" translate="DASHBOARDS.WELCOME_MESSAGE">Use the left sidebar to navigate through available sections.</span>\n            </div>\n\n            <div layout="column" flex="50">\n                <img src="assets/images/avatars/permissions.png" alt="permissions">\n            </div>\n        </md-content>\n    </div>\n</div>'),e.put("app/main/apps/dashboards/views/general/user/voice/user.general.voice.html",'\x3c!-- WIDGET INBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-phone-incoming" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_INBOUND_STATS">Today Inbound STATS</div>\n    </div>\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-timelapse"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.inbound.waiting || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_WAITING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_WAITING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_WAITING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-in-talk"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-52 line-height-72">\n                        {{vm.inbound.talking || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_TALKING\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_TALKING_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_TALKING\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.inbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ANSWERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ANSWERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_ANSWERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-missed"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-52 line-height-72">\n                        {{vm.inbound.abandoned || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ABANDONED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ABANDONED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_ABANDONED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-incoming"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_TOTAL_OFFERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_TOTAL_OFFERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_TOTAL_OFFERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-timer-sand"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgHoldTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_AVG_HOLD_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_AVG_HOLD_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_AVG_HOLD_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-in-talk"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-42 line-height-72">\n                        {{ vm.inbound.avgTalkTime || \'00:00:00\' }}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_AVG_TALK_TIME\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_AVG_TALK_TIME_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_AVG_TALK_TIME\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-percent"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-42 line-height-72">\n                        {{ vm.inbound.answerRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ANSWER_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ANSWER_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_ANSWER_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-percent"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{ vm.inbound.abandonRate || 0 }}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_ABANDON_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_ABANDON_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.ABANDON_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-dots"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-52 line-height-72">\n                        {{vm.inbound.unmanaged || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.VOICE_UNMANAGED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.VOICE_UNMANAGED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.VOICE_UNMANAGED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET INBOUND --\x3e\n\n\x3c!-- WIDGET OUTBOUND --\x3e\n<div class="dashboard-container md-background-bg md-whiteframe-1dp">\n    <div class="pb-16" layout="row" layout-align="start center">\n        <md-icon md-font-icon="icon-phone-outgoing" class="m-0 mr-16"></md-icon>\n        <div class="h2 secondary-text" translate="DASHBOARDS.TODAY_OUTBOUND_STATS">Today Outbound STATS</div>\n    </div>\n    \x3c!-- WIDGET GROUP --\x3e\n    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n        \x3c!-- WIDGET 1 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone-outgoing"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="light-blue-fg font-size-52 line-height-72">\n                        {{vm.outbound.total || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOTAL\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 light-blue-fg secondary-text text-truncate">{{\'DASHBOARDS.TOTAL_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOTAL\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 1 --\x3e\n\n        \x3c!-- WIDGET 2 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="ph-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-phone"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="red-fg font-size-52 line-height-72">\n                        {{vm.outbound.answered || 0}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OUTBOUND_ANSWERED\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 red-fg secondary-text text-truncate">{{\'DASHBOARDS.OUTBOUND_ANSWERED_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OUTBOUND_ANSWERED\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 2 --\x3e\n\n        \x3c!-- WIDGET 3 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-clock"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="orange-fg font-size-42 line-height-72">\n                        {{vm.outbound.sumDuration || 0 | secToTime | date:\'HH:mm:ss\'}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.TOT_DURATION\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 orange-fg secondary-text text-truncate">{{\'DASHBOARDS.TOT_DURATION_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.TOT_DURATION\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 3 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-division"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-grey-fg font-size-42 line-height-72">\n                        {{vm.outbound.total ? ((vm.outbound.sumDuration / vm.outbound.total) | number: 0) : 0 | secToTime | date:\'HH:mm:ss\'}}\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.AVG_DURATION\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-grey-fg secondary-text text-truncate">{{\'DASHBOARDS.AVG_DURATION_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.AVG_DURATION\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n        \x3c!-- WIDGET 4 --\x3e\n        <ms-widget flippable="true" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="20">\n\n            \x3c!-- Front --\x3e\n            <ms-widget-front class="grey-50-bg">\n                <div class="pl-16 pr-8 pv-16 h-55" layout="row" layout-align="space-between center">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="more">\n                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-button style="cursor:auto" class="md-icon-button" aria-label="more">\n                        <md-icon md-font-icon="icon-percent"></md-icon>\n                    </md-button>\n                </div>\n\n                <div class="pt-8 pb-32" layout="column" layout-align="center center">\n                    <div class="blue-green-fg font-size-42 line-height-72">\n                        {{vm.outbound.total ? (vm.outbound.answered / vm.outbound.total * 100) : 0 | number: 1}}%\n                    </div>\n                    <div class="h3 secondary-text font-weight-500">{{\'DASHBOARDS.OUTBOUND_ANSWER_RATE\' | translate | uppercase}}</div>\n                </div>\n\n                <div class="p-16 grey-200-bg text-center border-top" layout-align="start center">\n                    <span class="h6 blue-green-fg secondary-text text-truncate">{{\'DASHBOARDS.OUTBOUND_ANSWER_RATE_TEXT\' | translate | uppercase}}</span>\n                </div>\n            </ms-widget-front>\n            \x3c!-- / Front --\x3e\n\n            \x3c!-- Back --\x3e\n            <ms-widget-back class="p-16 grey-50-bg">\n                <div class="flip-to-front">\n                    <md-button class="md-icon-button" ng-click="flipWidget()" aria-label="Flip widget">\n                        <md-icon md-font-icon="icon-close" class="s16"></md-icon>\n                    </md-button>\n                </div>\n\n                <div>\n                    {{\'DASHBOARDS.HELP.OUTBOUND_ANSWER_RATE\' | translate}}\n                </div>\n            </ms-widget-back>\n            \x3c!-- / Back --\x3e\n\n        </ms-widget>\n        \x3c!-- / WIDGET 4 --\x3e\n\n    </div>\n    \x3c!-- / WIDGET GROUP --\x3e\n</div>\n\x3c!-- / WIDGET OUTBOUND --\x3e'),e.put("app/main/apps/fax/views/faxAccounts/create/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.faxAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="faxAccountForm[\'name\'].$error" ng-show="faxAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.KEY">key</label>\n                <input type="text" name="key" ng-model="vm.faxAccount.key" md-maxlength="5" ng-required="true">\n\n                <div ng-messages="faxAccountForm[\'key\'].$error" ng-show="faxAccountForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.KEY_REQUIRED">key field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="FAX.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.TRUNK">trunk</label>\n                <md-select name="TrunkId" ng-model="vm.faxAccount.TrunkId" required>\n                    <md-option ng-value="TrunkId.id" ng-repeat="TrunkId in vm.trunks" ng-disabled="TrunkId.canSelect === false">{{ TrunkId.name }}</md-option>\n                </md-select>\n                <div ng-messages="faxAccountForm[\'TrunkId\'].$error" ng-show="faxAccountForm[\'TrunkId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.TRUNK_REQUIRED">trunk field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.LOCALSTATIONID">localstationid</label>\n                <input type="text" name="localstationid" ng-model="vm.faxAccount.localstationid" ng-required="true">\n\n                <div class="hint"><span translate="FAX.HELP.LOCALSTATIONID"></span></div>\n                <div ng-messages="faxAccountForm[\'localstationid\'].$error" ng-show="faxAccountForm[\'localstationid\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.LOCALSTATIONID_REQUIRED">localstationid field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.LIST">List</label>\n                <md-select name="ListId" ng-model="vm.faxAccount.ListId" required>\n                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                </md-select>\n                <div ng-messages="faxAccountForm[\'ListId\'].$error" ng-show="faxAccountForm[\'ListId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.faxAccount.description">\n\n                <div ng-messages="faxAccountForm[\'description\'].$error" ng-show="faxAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newFaxAccount" ng-click="vm.saveFaxAccount()" class="send-button md-accent md-raised" ng-disabled="faxAccountForm.$invalid || faxAccountForm.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newFaxAccount" ng-click="vm.addNewFaxAccount()" class="send-button md-accent md-raised" ng-disabled="faxAccountForm.$invalid" aria-label="ADD" translate="FAX.ADD_FAXACCOUNT" translate-attr-aria-label="FAX.ADD_FAXACCOUNT">\n                    ADD FAXACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newFaxAccount" ng-click="vm.deleteFaxAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="FAX.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="FAX.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/agentadd/agentadd.html",'<md-dialog class="faxAccount-dialog" aria-label="faxAccount" ng-init="vm.onInit()">\n    <form name="faxAccountForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="FAX.AGENTADD_FAXACCOUNT">Add Agent to faxAccount</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/agent/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.AGENT">Agent</label>\n                <md-select name="agent" ng-model="vm.agent.agent" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents" ng-disabled="agent.canSelect === false">{{ agent.name }}</md-option>\n                </md-select>\n                <div ng-messages="faxAccountFormApp[\'agent\'].$error" ng-show="faxAccountFormApp[\'agent\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.agent.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'timeout\'].$error" ng-show="faxAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="FAX.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="FAX.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/close/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.DISPOSITION">Disposition</label>\n                <input type="text" name="disposition" ng-model="vm.close.disposition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'disposition\'].$error" ng-show="faxAccountFormApp[\'disposition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.DISPOSITION_REQUIRED">Disposition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/gotoif/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.CONDITION">Condition</label>\n                <input type="text" name="condition" ng-model="vm.gotoif.condition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'condition\'].$error" ng-show="faxAccountFormApp[\'condition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.CONDITION_REQUIRED">Condition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.TRUEPRIORITY">truepriority</label>\n                <input type="number" name="truepriority" ng-model="vm.gotoif.truepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'truepriority\'].$error" ng-show="faxAccountFormApp[\'truepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.TRUEPRIORITY_REQUIRED">truepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="FAX.ERRORS.TRUEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">truepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.FALSEPRIORITY">falsepriority</label>\n                <input type="number" name="falsepriority" ng-model="vm.gotoif.falsepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'falsepriority\'].$error" ng-show="faxAccountFormApp[\'falsepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.FALSEPRIORITY_REQUIRED">falsepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="FAX.ERRORS.FALSEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">falsepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/gotop/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.PRIORITY">Priority</label>\n                <input type="number" name="priority" ng-model="vm.gotop.priority" min="0" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'priority\'].$error" ng-show="faxAccountFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="FAX.ERRORS.PRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Priority must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/noop/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.noop.value" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'value\'].$error" ng-show="faxAccountFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/queue/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="faxAccountFormApp[\'queue\'].$error" ng-show="faxAccountFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'timeout\'].$error" ng-show="faxAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="FAX.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="FAX.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/system/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.COMMAND">Command</label>\n                <input type="text" name="command" ng-model="vm.system.command" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="faxAccountFormApp[\'command\'].$error" ng-show="faxAccountFormApp[\'command\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.COMMAND_REQUIRED">Command field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.VARIABLE">Variable</label>\n                <md-select name="variable" ng-model="vm.system.variable" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables" ng-disabled="variable.canSelect === false">{{ variable.name }}</md-option>\n                </md-select>\n                <div ng-messages="faxAccountFormApp[\'variable\'].$error" ng-show="faxAccountFormApp[\'variable\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/apps/tag/dialog.html",'<md-dialog class="faxAccount-dialog" aria-label="New FaxAccount">\n    <form name="faxAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.TAG">Tag</label>\n                <md-select name="tag" ng-model="vm.tag.tag" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags" ng-disabled="tag.canSelect === false">{{ tag.name }}</md-option>\n                </md-select>\n                <div ng-messages="faxAccountFormApp[\'tag\'].$error" ng-show="faxAccountFormApp[\'tag\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.TAG_REQUIRED">Tag field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveFaxAccountApp()" class="send-button md-accent md-raised" ng-disabled="faxAccountFormApp.$invalid || faxAccountFormApp.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/faxDispositions/dialog.html",'<md-dialog class="faxDisposition-dialog" aria-label="New FaxDisposition">\n    <form name="faxDispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.faxDisposition.name" ng-required="true" autofocus>\n\n                <div ng-messages="faxDispositionForm[\'name\'].$error" ng-show="faxDispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newFaxDisposition" ng-click="vm.saveFaxDisposition()" class="send-button md-accent md-raised" ng-disabled="faxDispositionForm.$invalid || faxDispositionForm.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newFaxDisposition" ng-click="vm.addNewFaxDisposition()" class="send-button md-accent md-raised" ng-disabled="faxDispositionForm.$invalid" aria-label="ADD" translate="FAX.ADD_FAXDISPOSITION" translate-attr-aria-label="FAX.ADD_FAXDISPOSITION">\n                    ADD FAXDISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newFaxDisposition" ng-click="vm.deleteFaxDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="FAX.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="FAX.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxAccounts/edit/view.html",'<div id="fax-faxAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-faxAccounts-button md-icon-button" aria-label="Go to faxAccounts" ng-click="vm.gotoFaxAccounts()" translate translate-attr-aria-label="FAX.GO_TO_FAXACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="faxAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/faxAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.faxAccount.id}}\n                        <span ng-if="vm.faxAccount.name">{{vm.faxAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="FAX.CREATED_AT"></span> <span>{{vm.faxAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.faxAccount, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="FAX.GOTO_FAXACCOUNT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-cast"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.faxAccount, $event)" class="md-fab md-warn md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="FAX.AGENTADD_FAXACCOUNT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveFaxAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (advancedForm.$invalid) || (dispositionForm.$invalid) || (faxDispositionsForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="faxAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="FAX.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.faxAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.KEY">key</label>\n                                <input type="text" name="key" ng-model="vm.faxAccount.key" md-maxlength="5" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'key\'].$error" ng-show="generalForm[\'key\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.KEY_REQUIRED">key field is required</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="FAX.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.HEADERINFO">headerinfo</label>\n                                <input type="text" name="headerinfo" ng-model="vm.faxAccount.headerinfo" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="FAX.HELP.HEADERINFO"></span></div>\n                                <div ng-messages="generalForm[\'headerinfo\'].$error" ng-show="generalForm[\'headerinfo\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.HEADERINFO_REQUIRED">headerinfo field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.TRUNK">trunk</label>\n                                <md-select name="TrunkId" ng-model="vm.faxAccount.TrunkId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="TrunkId.id" ng-repeat="TrunkId in vm.trunks" ng-disabled="TrunkId.canSelect === false">{{ TrunkId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'TrunkId\'].$error" ng-show="generalForm[\'TrunkId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.TRUNK_REQUIRED">trunk field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.LOCALSTATIONID">localstationid</label>\n                                <input type="text" name="localstationid" ng-model="vm.faxAccount.localstationid" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="FAX.HELP.LOCALSTATIONID"></span></div>\n                                <div ng-messages="generalForm[\'localstationid\'].$error" ng-show="generalForm[\'localstationid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.LOCALSTATIONID_REQUIRED">localstationid field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.LIST">List</label>\n                                <md-select name="ListId" ng-model="vm.faxAccount.ListId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'ListId\'].$error" ng-show="generalForm[\'ListId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.LIST_REQUIRED">List field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.WAITFORTHEASSIGNEDAGENT">WaitForTheAssignedAgent</label>\n                                <input type="number" name="waitForTheAssignedAgent" ng-model="vm.faxAccount.waitForTheAssignedAgent" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'waitForTheAssignedAgent\'].$error" ng-show="generalForm[\'waitForTheAssignedAgent\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.WAITFORTHEASSIGNEDAGENT_REQUIRED">WaitForTheAssignedAgent field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="FAX.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="FAX.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_LESS_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.faxAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="faxAccount-detail-form-container notification md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="FAX.NOTIFICATION">NOTIFICATION</div>\n                        </div>\n                        <form name="notificationForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.faxAccount.notificationSound" aria-label="notificationSound" ng-disabled="!vm.crudPermissions.canEdit"><span translate="FAX.NOTIFICATIONSOUND">notificationSound</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.faxAccount.notificationShake" aria-label="notificationShake" ng-disabled="!vm.crudPermissions.canEdit"><span translate="FAX.NOTIFICATIONSHAKE">notificationShake</span></md-switch>\n\n                            </md-input-container>\n                            <div class="md-block">\n                                <label class="md-caption grey-fg" translate="FAX.NOTIFICATIONTEMPLATE">notificationTemplate</label>\n                                <textarea aria-label="notificationTemplate notificationTemplate" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.faxAccount.notificationTemplate"></textarea>\n                            </div>\n\n                        </form>\n                    </div>\n                    <div class="faxAccount-detail-form-container transfer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="FAX.TRANSFER">TRANSFER</div>\n                        </div>\n                        <form name="transferForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.faxAccount.queueTransfer" aria-label="queueTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="FAX.QUEUETRANSFER">queueTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.faxAccount.queueTransfer == true" class="md-block">\n                                <label translate="FAX.QUEUETRANSFERTIMEOUT">queueTransferTimeout</label>\n                                <input type="number" name="queueTransferTimeout" ng-model="vm.faxAccount.queueTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'queueTransferTimeout\'].$error" ng-show="transferForm[\'queueTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.QUEUETRANSFERTIMEOUT_REQUIRED">queueTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="FAX.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="FAX.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.faxAccount.agentTransfer" aria-label="agentTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="FAX.AGENTTRANSFER">agentTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.faxAccount.agentTransfer == true" class="md-block">\n                                <label translate="FAX.AGENTTRANSFERTIMEOUT">agentTransferTimeout</label>\n                                <input type="number" name="agentTransferTimeout" ng-model="vm.faxAccount.agentTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'agentTransferTimeout\'].$error" ng-show="transferForm[\'agentTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.AGENTTRANSFERTIMEOUT_REQUIRED">agentTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="FAX.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="FAX.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="faxAccount-detail-form-container advanced md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="FAX.ADVANCED">ADVANCED</div>\n                        </div>\n                        <form name="advancedForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.ECM">ECM</label>\n                                <md-select name="ecm" ng-model="vm.faxAccount.ecm" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="FAX.HELP.ECM"></span></div>\n                                <div ng-messages="advancedForm[\'ecm\'].$error" ng-show="advancedForm[\'ecm\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.ECM_REQUIRED">ECM field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.MINRATE">minrate</label>\n                                <md-select name="minrate" ng-model="vm.faxAccount.minrate" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'2400\'">2400</md-option>\n                                    <md-option ng-value="\'4800\'">4800</md-option>\n                                    <md-option ng-value="\'7200\'">7200</md-option>\n                                    <md-option ng-value="\'9600\'">9600</md-option>\n                                    <md-option ng-value="\'12000\'">12000</md-option>\n                                    <md-option ng-value="\'14400\'">14400</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="FAX.HELP.MINRATE"></span></div>\n                                <div ng-messages="advancedForm[\'minrate\'].$error" ng-show="advancedForm[\'minrate\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.MINRATE_REQUIRED">minrate field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.MAXRATE">maxrate</label>\n                                <md-select name="maxrate" ng-model="vm.faxAccount.maxrate" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'2400\'">2400</md-option>\n                                    <md-option ng-value="\'4800\'">4800</md-option>\n                                    <md-option ng-value="\'7200\'">7200</md-option>\n                                    <md-option ng-value="\'9600\'">9600</md-option>\n                                    <md-option ng-value="\'12000\'">12000</md-option>\n                                    <md-option ng-value="\'14400\'">14400</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="FAX.HELP.MAXRATE"></span></div>\n                                <div ng-messages="advancedForm[\'maxrate\'].$error" ng-show="advancedForm[\'maxrate\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.MAXRATE_REQUIRED">maxrate field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.MODEM">modem</label>\n                                <input type="text" name="modem" ng-model="vm.faxAccount.modem" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="FAX.HELP.MODEM"></span></div>\n                                <div ng-messages="advancedForm[\'modem\'].$error" ng-show="advancedForm[\'modem\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.MODEM_REQUIRED">modem field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.GATEWAY">gateway</label>\n                                <input type="text" name="gateway" ng-model="vm.faxAccount.gateway" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="FAX.HELP.GATEWAY"></span></div>\n                                <div ng-messages="advancedForm[\'gateway\'].$error" ng-show="advancedForm[\'gateway\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.GATEWAY_REQUIRED">gateway field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.FAXDETECT">faxdetect</label>\n                                <input type="text" name="faxdetect" ng-model="vm.faxAccount.faxdetect" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="FAX.HELP.FAXDETECT"></span></div>\n                                <div ng-messages="advancedForm[\'faxdetect\'].$error" ng-show="advancedForm[\'faxdetect\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.FAXDETECT_REQUIRED">faxdetect field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.T38TIMEOUT">t38timeout</label>\n                                <input type="number" name="t38timeout" ng-model="vm.faxAccount.t38timeout" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="FAX.HELP.T38TIMEOUT"></span></div>\n                                <div ng-messages="advancedForm[\'t38timeout\'].$error" ng-show="advancedForm[\'t38timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.T38TIMEOUT_REQUIRED">t38timeout field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.SIP">SIP</label>\n                                <md-select name="tech" ng-model="vm.faxAccount.tech" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'SIP\'">SIP</md-option>\n                                    <md-option ng-value="\'IAX\'">IAX</md-option>\n                                    <md-option ng-value="\'DADHI\'">DADHI</md-option>\n                                    <md-option ng-value="\'KHOMP\'">KHOMP</md-option>\n                                </md-select>\n                                <div ng-messages="advancedForm[\'tech\'].$error" ng-show="advancedForm[\'tech\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.SIP_REQUIRED">SIP field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="faxAccount-detail-form-container disposition md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="FAX.DISPOSITION">DISPOSITION</div>\n                        </div>\n                        <form name="dispositionForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.faxAccount.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="FAX.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.faxAccount.mandatoryDisposition" class="md-block">\n                                <label translate="FAX.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.faxAccount.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="FAX.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="dispositionForm[\'mandatoryDispositionPauseId\'].$error" ng-show="dispositionForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.DISPOSITIONS">DISPOSITIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="faxAccount-detail-form-container faxdispositions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="FaxAccountFaxDispositionsController as vm_dc" ng-init="vm_dc.init(vm.faxAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedFaxAccountFaxDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="FAX.FAXDISPOSITIONS">FaxDispositions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditFaxAccountFaxDisposition($event)" aria-label="add faxDisposition" translate translate-attr-label="FAX.ADD_FAXDISPOSITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedFaxAccountFaxDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedFaxAccountFaxDispositions.length}} {{vm_dc.selectedFaxAccountFaxDispositions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedFaxAccountFaxDispositions" csv-label="true" filename="faxAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedFaxAccountFaxDispositions($event)" aria-label="delete selected" translate translate-attr-label="FAXACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedFaxAccountFaxDispositions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getFaxAccountFaxDispositions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'FAX.ID\' | translate }}</th>\n                                            <th md-column md-order-by="name">{{ \'FAX.NAME\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'FAX.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="faxDisposition" md-select-id="id" ng-repeat="faxDisposition in vm_dc.faxAccountFaxDispositions.rows">\n                                            <td ng-click="vm_dc.createOrEditFaxAccountFaxDisposition($event, faxDisposition)" md-cell>{{faxDisposition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditFaxAccountFaxDisposition($event, faxDisposition)" md-cell>{{faxDisposition.name}}</td>\n                                            <td ng-click="vm_dc.createOrEditFaxAccountFaxDisposition($event, faxDisposition)" md-cell>{{faxDisposition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="FAX.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditFaxAccountFaxDisposition($event, faxDisposition)" translate="FAX.EDIT_FAXDISPOSITION">\n                                                                Edit FaxDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(faxDisposition, $event)" translate="FAX.DELETE_FAXDISPOSITION">\n                                                                Delete FaxDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.faxAccountFaxDispositions.rows.length">\n                                            <td md-cell colspan="5">\n                                                <span class="text-boxed-ligth" translate="FAX.NO_FAXDISPOSITION_AVAILABLE">No faxdisposition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.faxAccountFaxDispositions.count}}" md-on-paginate="vm_dc.getFaxAccountFaxDispositions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="faxAccount-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="FaxAccountActionsController as vm_ac" ng-init="vm_ac.init(vm.faxAccount, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="FAX.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedFaxAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedFaxAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedFaxAccountApps.length}} {{vm_ac.selectedFaxAccountApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedFaxAccountApps($event)" aria-label="delete selected" translate translate-attr-label="FAX.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedFaxAccountApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px">\n                                                    <span translate="VOICE.PRIORITY">Priority</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.faxAccountApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editFaxAccountApp($event, $index)"><span>{{app.priority}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editFaxAccountApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editFaxAccountApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editFaxAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.faxAccountApps.rows.length">\n                                                <td md-cell colspan="7">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.INTERACTIONS">INTERACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="faxAccount-detail-form-container interactions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="FaxAccountInteractionsController as vm_dc" ng-init="vm_dc.init(vm.faxAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedFaxAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="FAX.INTERACTIONS">Interactions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm_dc.getFaxAccountInteractions()" aria-label="refresh Interactions" translate translate-attr-label="FAX.REFRESH_INTERACTIONS">\n                                        <md-icon md-font-icon="icon-refresh"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedFaxAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedFaxAccountInteractions.length}} {{vm_dc.selectedFaxAccountInteractions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedFaxAccountInteractions" csv-label="true" filename="faxAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedFaxAccountInteractions($event)" aria-label="delete selected" translate translate-attr-label="FAXACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedFaxAccountInteractions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getFaxAccountInteractions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'FAX.ID\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'FAX.STARTEDAT\' | translate }}</th>\n                                            <th md-column>{{ \'FAX.CONTACT\' | translate }}</th>\n                                            <th md-column>{{ \'FAX.AGENT\' | translate }}</th>\n                                            <th md-column md-order-by="closedAt">{{ \'FAX.CLOSEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="disposition">{{ \'FAX.DISPOSITION\' | translate }}</th>\n                                            <th md-column md-order-by="note">{{ \'FAX.NOTES\' | translate }}</th>\n                                            <th md-column md-order-by="tag">{{ \'FAX.TAGS\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="interaction" md-select-id="id" ng-repeat="interaction in vm_dc.faxAccountInteractions.rows">\n                                            <td md-cell>{{interaction.id}}</td>\n                                            <td md-cell>{{interaction.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.Contact.firstName}}</td>\n                                            <td md-cell>{{interaction.Owner.name}}</td>\n                                            <td md-cell>{{interaction.closedAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.disposition}}</td>\n                                            <td md-cell>{{interaction.note}}</td>\n                                            <td md-cell>\n                                                <div ng-if="interaction.Tags.length">\n                                                    <md-tooltip md-direction="left" layout="row">\n                                                        <span ng-repeat="tag in interaction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                                    </md-tooltip>\n                                                    <md-icon md-font-icon="icon-tag"></md-icon>\n                                                </div>\n                                            </td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="FAX.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_dc.spyfaxInteraction($event, interaction)" translate="FAX.SPYINTERACTION">\n                                                                Spy Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.faxInteractionDownload(interaction, $event)" translate="FAX.DOWNLOAD_INTERACTION">\n                                                                Download Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(interaction, $event)" translate="FAX.DELETE_INTERACTION">\n                                                                Delete Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.faxAccountInteractions.rows.length">\n                                            <td md-cell colspan="13">\n                                                <span class="text-boxed-ligth" translate="FAX.NO_INTERACTION_AVAILABLE">No interaction available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.faxAccountInteractions.count}}" md-on-paginate="vm_dc.getFaxAccountInteractions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/fax/views/faxAccounts/faxAccounts.html",'<div id="faxAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-deskphone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="FAX.FAXACCOUNTS">FaxAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="FAX.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedFaxAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedFaxAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="FAX.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-faxAccounts-count">\n                    <span>{{vm.selectedFaxAccounts.length}}</span>\n                    <span translate="FAX.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="FAXACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllFaxAccounts()" translate="FAX.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectFaxAccounts()" translate="FAX.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedFaxAccounts" csv-label="true" filename="faxAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedFaxAccounts($event)" aria-label="delete selected" translate translate-attr-label="FAXACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- FAXACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedFaxAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getFaxAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'FAX.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'FAX.NAME\' | translate }}</th>\n                                <th md-column md-order-by="key">{{ \'FAX.KEY\' | translate }}</th>\n                                <th md-column md-order-by="TrunkId">{{ \'FAX.TRUNK\' | translate }}</th>\n                                <th md-column md-order-by="localstationid">{{ \'FAX.LOCALSTATIONID\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'FAX.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.faxAccounts.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="FAX.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="faxAccount" md-select-id="id" ng-repeat="faxAccount in vm.faxAccounts.rows">\n                                <td md-cell ng-if="faxAccount.userpic"><img class="avatar" alt="{{faxAccount.name}}" ng-src="api/users/{{faxAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!faxAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{faxAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxAccount, ev) : vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="id ">{{faxAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxAccount, ev) : vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="name ">{{faxAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxAccount, ev) : vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="key ">{{faxAccount.key}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxAccount, ev) : vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="TrunkId ">{{ (vm.trunks | filter : {\'id\':faxAccount.TrunkId} : true)[0].name }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxAccount, ev) : vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="localstationid ">{{faxAccount.localstationid}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxAccount, ev) : vm.createOrEditFaxAccount($event, faxAccount)" md-cell class="description ">{{faxAccount.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="FAX.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(faxAccount, $event    )" translate="FAX.EDIT_FAXACCOUNT">\n                                                    Edit FaxAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.interactionsgoto(faxAccount, $event    )" translate="FAX.INTERACTIONS_FAXACCOUNT">\n                                                    Interactions FaxAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(faxAccount, $event    )" translate="FAX.GOTOREALTIME_FAXACCOUNT">\n                                                    goToRealtime FaxAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(faxAccount, $event    )" translate="FAX.AGENTADD_FAXACCOUNT">\n                                                    AgentAdd FaxAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(faxAccount, $event    )" translate="FAX.DELETE_FAXACCOUNT">\n                                                    Delete FaxAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.faxAccounts.count}}" md-on-paginate="vm.getFaxAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / FAXACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD FAXACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-faxAccount-button" ng-click="vm.createOrEditFaxAccount($event)" aria-label="add faxAccount" translate translate-attr-aria-label="FAX.ADD_FAXACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD FAXACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/fax/views/faxQueues/create/dialog.html",'<md-dialog class="faxQueue-dialog" aria-label="New FaxQueue">\n    <form name="faxQueueForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="FAX.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.faxQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newFaxQueue">\n\n                <div class="hint"><span translate="FAX.HELP.NAME"></span></div>\n                <div ng-messages="faxQueueForm[\'name\'].$error" ng-show="faxQueueForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="FAX.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.STRATEGY">Strategy</label>\n                <md-select name="strategy" ng-model="vm.faxQueue.strategy" required>\n                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                </md-select>\n                <div ng-messages="faxQueueForm[\'strategy\'].$error" ng-show="faxQueueForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.AGENT_TIMEOUT">Agent_Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.faxQueue.timeout" min="1" max="2147483" ng-required="true">\n\n                <div ng-messages="faxQueueForm[\'timeout\'].$error" ng-show="faxQueueForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="FAX.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="FAX.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="FAX.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.faxQueue.description">\n\n                <div ng-messages="faxQueueForm[\'description\'].$error" ng-show="faxQueueForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="FAX.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newFaxQueue" ng-click="vm.saveFaxQueue()" class="send-button md-accent md-raised" ng-disabled="faxQueueForm.$invalid || faxQueueForm.$pristine" aria-label="SAVE" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newFaxQueue" ng-click="vm.addNewFaxQueue()" class="send-button md-accent md-raised" ng-disabled="faxQueueForm.$invalid" aria-label="ADD" translate="FAX.ADD_FAXQUEUE" translate-attr-aria-label="FAX.ADD_FAXQUEUE">\n                    ADD FAXQUEUE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newFaxQueue" ng-click="vm.deleteFaxQueue($event)" aria-label="DELETE" translate translate-attr-aria-label="FAX.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="FAX.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxQueues/edit/agentadd/agentadd.html",'<md-dialog class="faxQueue-dialog" aria-label="faxQueue" ng-init="vm.onInit()">\n    <form name="faxQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="FAX.AGENTADD_FAXQUEUE">Add Agent to faxQueue</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxQueues/edit/teamadd/teamadd.html",'<md-dialog class="faxQueue-dialog" aria-label="faxQueue" ng-init="vm.onInit()">\n    <form name="faxQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="FAX.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/fax/views/faxQueues/edit/view.html",'<div id="fax-faxQueue" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-faxQueues-button md-icon-button" aria-label="Go to faxQueues" ng-click="vm.gotoFaxQueues()" translate translate-attr-aria-label="FAX.GO_TO_FAXQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="faxQueue-image" hide-xs>\n                    <img ng-src="assets/images/business/faxQueues.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.faxQueue.id}}\n                        <span ng-if="vm.faxQueue.name">{{vm.faxQueue.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="FAX.CREATED_AT"></span> <span>{{vm.faxQueue.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.faxQueue, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="FAX.TEAMADD_FAXQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.faxQueue, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="FAX.AGENTADD_FAXQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveFaxQueue()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid)" translate="FAX.SAVE" translate-attr-aria-label="FAX.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="faxQueue-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="FAX.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.faxQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="FAX.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="FAX.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.faxQueue.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'strategy\'].$error" ng-show="generalForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.AGENT_TIMEOUT">Agent_Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.faxQueue.timeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="FAX.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="FAX.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="FAX.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.faxQueue.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="FAX.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/fax/views/faxQueues/faxQueues.html",'<div id="faxQueues" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-deskphone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="FAX.FAXQUEUES">FaxQueues</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="FAX.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedFaxQueues.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedFaxQueues =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="FAX.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-faxQueues-count">\n                    <span>{{vm.selectedFaxQueues.length}}</span>\n                    <span translate="FAX.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="FAXQUEUES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllFaxQueues()" translate="FAX.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectFaxQueues()" translate="FAX.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedFaxQueues" csv-label="true" filename="faxQueues.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedFaxQueues($event)" aria-label="delete selected" translate translate-attr-label="FAXQUEUES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- FAXQUEUE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedFaxQueues" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getFaxQueues">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'FAX.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'FAX.NAME\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'FAX.STRATEGY\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.faxQueues.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="FAX.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="faxQueue" md-select-id="id" ng-repeat="faxQueue in vm.faxQueues.rows">\n                                <td md-cell ng-if="faxQueue.userpic"><img class="avatar" alt="{{faxQueue.name}}" ng-src="api/users/{{faxQueue.id}}/avatar" /></td>\n                                <td md-cell ng-if="!faxQueue.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{faxQueue.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxQueue, ev) : vm.createOrEditFaxQueue($event, faxQueue)" md-cell class="id ">{{faxQueue.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxQueue, ev) : vm.createOrEditFaxQueue($event, faxQueue)" md-cell class="name ">{{faxQueue.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(faxQueue, ev) : vm.createOrEditFaxQueue($event, faxQueue)" md-cell class="strategy ">{{ vm.arraystrategy[faxQueue.strategy].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="FAX.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(faxQueue, $event    )" translate="FAX.EDIT_FAXQUEUE">\n                                                    Edit FaxQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(faxQueue, $event    )" translate="FAX.TEAMADD_FAXQUEUE">\n                                                    teamadd FaxQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(faxQueue, $event    )" translate="FAX.AGENTADD_FAXQUEUE">\n                                                    agentadd FaxQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(faxQueue, $event    )" translate="FAX.DELETE_FAXQUEUE">\n                                                    Delete FaxQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(faxQueue, $event    )" translate="FAX.GOTOREALTIME_FAXQUEUE">\n                                                    goToRealtime FaxQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.faxQueues.count}}" md-on-paginate="vm.getFaxQueues" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / FAXQUEUE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD FAXQUEUE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-faxQueue-button" ng-click="vm.createOrEditFaxQueue($event)" aria-label="add faxQueue" translate translate-attr-aria-label="FAX.ADD_FAXQUEUE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD FAXQUEUE BUTTON --\x3e\n</div>'),e.put("app/main/apps/fax/views/realtime/accounts/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="FAX.ACCOUNTS">Accounts</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getFaxAccounts">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'FAX.NAME\' | translate }}</th>\n                <th md-column>{{ \'FAX.KEY\' | translate }}</th>\n                <th md-column>{{ \'FAX.TOTAL\' | translate }}</th>\n                <th md-column>{{ \'FAX.IN\' | translate }}</th>\n                <th md-column>{{ \'FAX.OUT\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.faxAccounts">\n                <td md-cell colspan="4">\n                    <div layout="row" layout-align="center center">\n                        <span translate="FAX.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.faxAccounts[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.faxAccounts[value].name}}</td>\n                <td md-cell>{{vm.faxAccounts[value].key}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{(vm.faxAccounts[value].in || 0) + (vm.faxAccounts[value].out || 0)}}</span>\n                </td>\n                <td md-cell>\n                    <div layout="row">\n                        <span>\n                            <md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon>\n                        </span>\n                        <span class="md-capture blue-fg">{{vm.faxAccounts[value].in || 0}}</span>\n                        <span class="text-boxed" ng-if="mailAccount.in">{{vm.faxAccounts[value].lastIn ?  (vm.faxAccounts[value].lastIn | date: \'shortTime\') : \'\'}}</span>\n                    </div>\n                </td>\n                <td md-cell>\n                    <div layout="row">\n                        <span>\n                            <md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon>\n                        </span>\n                        <span class="md-capture green-fg">{{vm.faxAccounts[value].out || 0}}</span>\n                        <span class="text-boxed" ng-if="mailAccount.out">{{vm.faxAccounts[value].lastOut ?  (vm.faxAccounts[value].lastOut | date: \'shortTime\') : \'\'}}</span>\n                    </div>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="4">\n                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                <md-button ng-click="vm.goToFaxAccount($event, vm.faxAccounts[value])" translate="FAX.EDIT_ACCOUNT">\n                                    Edit Account\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getfaxAccounts" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/fax/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="FAX.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'FAX.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'FAX.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'FAX.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'FAX.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'FAX.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'FAX.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'FAX.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'FAX.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'FAX.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'FAX.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'FAX.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'FAX.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'FAX.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"FAX.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"FAX.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"FAX.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"FAX.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"FAX.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"FAX.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"FAX.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"FAX.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'FAX.PAGE' | translate}}:', rowsPerPage: '{{'FAX.ROWSPERPAGE' | translate}}:', of: '{{'FAX.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/fax/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="FAX.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'FAX.NAME\' | translate }}</th>\n                <th md-column>{{ \'FAX.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'FAX.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'FAX.READY\' | translate }}</th>\n                <th md-column>{{ \'FAX.WAITING\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="7">\n                    <div layout="row" layout-align="center center">\n                        <span translate="FAX.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="FAX.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditFaxQueue($event, vm.queues[value])" translate="FAX.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="FAX.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/fax/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.TRUNKS">Trunks</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="FAX.ACCOUNTS">Accounts</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/fax/views/realtime/trunks/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="FAX.TRUNKS">Telephones</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n        \x3c!-- <md-button class="md-icon-button" ng-click="vm.showInfo($event)">\n      <i class="icon-information-outline grey-600-fg">\n        <md-tooltip>{{\'FAX.INFO\' | translate}}</md-tooltip>\n      </i>\n    </md-button> --\x3e\n    </div>\n</md-toolbar>\n\n\x3c!-- TRUNKS TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head>\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTrunks">\n                <tr md-row>\n                    <th md-column md-order-by="name">{{ \'FAX.NAME\' | translate }}</th>\n                    <th md-column>{{ \'FAX.TRUNK_STATUS\' | translate }}</th>\n                    <th md-column>{{ \'FAX.REGISTRY\' | translate }}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.trunks">\n                <td md-cell colspan="3">\n                    <div layout="row" layout-align="center center">\n                        <span translate="FAX.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(id, trunk) in vm.trunks">\n                <td md-cell>{{trunk.name}}</td>\n                <td md-cell>\n                    <i ng-class="vm.statusClass[trunk.status.toLowerCase()]">\n                        <md-tooltip>{{\'FAX.\' + trunk.status | uppercase | translate}}</md-tooltip>\n                    </i>\n                    <span ng-if="trunk.status === \'registered\'" class="text-boxed">{{trunk.address}}</span>\n                </td>\n                <td md-cell>\n                    <i ng-if="trunk.registry" ng-class="(trunk.stateRegistry.toLowerCase() === \'registered\') ? \'green-300-fg icon-checkbox-marked-circle\' : \'red-300-fg icon-close-circle\'">\n                        <md-tooltip>{{\'FAX.\' + trunk.stateRegistry | uppercase | translate}}</md-tooltip>\n                    </i>\n                    <span ng-if="trunk.registry && trunk.host && trunk.port" class="text-boxed">{{trunk.host}}:{{trunk.port}}</span>\n                    <span ng-if="!trunk.registry" translate="FAX.NO_REGISTRY">\n                        No Registry\n                    </span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="4">\n                            <md-menu-item>\n                                <md-button ng-click="vm.goToTrunk($event, trunk)" translate="FAX.EDIT_TRUNK">\n                                    Edit Trunk\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'FAX.PAGE\' | translate}}:\', rowsPerPage: \'{{\'FAX.ROWSPERPAGE\' | translate}}:\', of: \'{{\'FAX.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getTrunks" md-page-select></md-table-pagination>\n\x3c!-- / TRUNKS TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/help/views/about/about.html",'<div id="maintenance" class="flex-scrollable" layout="column" ms-scroll>\n    <div id="maintenance-form-wrapper" layout="column" layout-align="center center">\n        <div id="maintenance-form" class="md-whiteframe-8dp">\n            <div>\n                <img src="/api/settings/1/logo_login" alt="logo_login" />\n            </div>\n\n            <br>\n\n            <div>\n                <div class="info-line">\n                    <div class="title">Useful pages</div>\n                </div>\n                <section layout="row" flex layout-sm="column" layout-align="center center" layout-wrap>\n                    <div layout="column" flex="25" layout-align="center center">\n                        <a class="md-fab md-mini md-button grey-bg" href="https://wiki.xcallymotion.com/display/XMV" target="_blank">\n                            <md-icon md-font-icon="icon-wikipedia"></md-icon>\n                        </a>\n                        <div class="info"><a href="https://wiki.xcallymotion.com/display/XMV" target="_blank">Wiki</a></div>\n                    </div>\n\n                    <div layout="column" flex="25" layout-align="center center">\n                        <a class="md-fab md-mini md-button md-accent" href="/apidoc" target="_blank">\n                            <md-icon md-font-icon="icon-apple-mobileme"></md-icon>\n                        </a>\n                        <div class="info"><a href="/apidoc" target="_blank">Motion API</a></div>\n                    </div>\n\n                    <div layout="column" flex="25" layout-align="center center">\n                        <a class="md-fab md-mini md-button orange-bg" href="http://www.xcally.com/bar/phonebar/Setup.msi" target="_blank">\n                            <md-icon md-font-icon="icon-headphones"></md-icon>\n                        </a>\n                        <div class="info"><a href="http://www.xcally.com/bar/phonebar/Setup.msi" target="_blank">Phonebar Download</a></div>\n                    </div>\n\n                    <div layout="column" flex="25" layout-align="center center">\n                        <a class="md-fab md-mini md-button green-bg" href="/demo" target="_blank">\n                            <md-icon md-font-icon="icon-console"></md-icon>\n                        </a>\n                        <div class="info"><a href="/demo" target="_blank">Playground</a></div>\n                    </div>\n\n                </section>\n\n                <br>\n\n                <div class="info-line" ng-if="!vm.license.custom">\n                    <div class="title">Follow us on</div>\n                </div>\n                <section ng-if="!vm.license.custom" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                    <a class="md-fab md-mini md-button blue-900-bg" href="https://www.facebook.com/xcallymotion" target="_blank">\n                        <md-icon md-font-icon="icon-facebook"></md-icon>\n                    </a>\n\n                    <a class="md-fab md-mini md-button" href="https://twitter.com/xcallymotion" target="_blank">\n                        <md-icon md-font-icon="icon-twitter"></md-icon>\n                    </a>\n                    <a class="md-fab md-mini md-button md-warn" href="https://plus.google.com/+Xcally" target="_blank">\n                        <md-icon md-font-icon="icon-google-plus"></md-icon>\n                    </a>\n                    <a class="md-fab md-mini md-button light-blue-800-bg" href="https://www.linkedin.com/company/xcally" target="_blank">\n                        <md-icon md-font-icon="icon-linkedin"></md-icon>\n                    </a>\n                </section>\n\n                <br ng-if="!vm.license.custom">\n\n                <div class="info-line" ng-if="!vm.license.custom">\n                    <div class="title" translate="HELP.CONTACT_US">Contact Us</div>\n                </div>\n                <div class="info-line" ng-if="!vm.license.custom">\n                    <div class="info"><a href="mailto:support@xcally.com" target="_top">support@xcally.com</a></div>\n                </div>\n\n                <br ng-if="!vm.license.custom">\n\n                <div class="info">xCALLY Motion <u>{{vm.info.current}}</u> | <a href="https://wiki.xcallymotion.com/display/XMV/Motion+GUI#MotionGUI-Version{{vm.info.current}}" target="_blank">Changelog</a></div>\n\n                <br>\n\n                <div class="info" ng-if="!vm.license.custom">xCALLY© 2016 - 2018 | Powered by Xenialab | <a href="http://www.xcally.com/support/eula-xcally-license-en.pdf" target="_blank">EULA</a></div>\n\n                <br ng-if="!vm.license.custom">\n\n                <div class="info" ng-if="!vm.license.custom"><a href="https://www.xenialab.com/" target="_blank">www.xenialab.com</a> | <a href="https://www.xcallymotion.com/" target="_blank">www.xcallymotion.com</a></div>\n            </div>\n        </div>\n    </div>\n</div>'),e.put("app/main/apps/integrations/views/deskAccounts/create/dialog.html",'<md-dialog class="deskAccount-dialog" aria-label="New DeskAccount">\n    <form name="deskAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.deskAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="deskAccountForm[\'name\'].$error" ng-show="deskAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.deskAccount.type" required>\n\n                    <md-option ng-value="\'integrationTab\'"> {{ \'INTEGRATIONS.INTEGRATION_TAB\' | translate }} </md-option>\n\n                    <md-option ng-value="\'newTab\'"> {{ \'INTEGRATIONS.NEW_TAB\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="deskAccountForm[\'type\'].$error" ng-show="deskAccountForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.URI">Uri</label>\n                <input type="url" name="remoteUri" ng-model="vm.deskAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="deskAccountForm[\'remoteUri\'].$error" ng-show="deskAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.AUTHTYPE">AuthType</label>\n                <md-select name="authType" ng-model="vm.deskAccount.authType" required>\n                    <md-option ng-value="\'basic\'">Basic</md-option>\n                </md-select>\n                <div ng-messages="deskAccountForm[\'authType\'].$error" ng-show="deskAccountForm[\'authType\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.AUTHTYPE_REQUIRED">AuthType field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.deskAccount.authType == \'basic\'" class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.deskAccount.username" ng-required="true">\n\n                <div ng-messages="deskAccountForm[\'username\'].$error" ng-show="deskAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.deskAccount.authType == \'basic\'">\n                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.deskAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                <div ng-messages="deskAccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.deskAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="deskAccountForm[\'serverUrl\'].$error" ng-show="deskAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.deskAccount.description">\n\n                <div ng-messages="deskAccountForm[\'description\'].$error" ng-show="deskAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newDeskAccount" ng-click="vm.saveDeskAccount()" class="send-button md-accent md-raised" ng-disabled="deskAccountForm.$invalid || deskAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newDeskAccount" ng-click="vm.addNewDeskAccount()" class="send-button md-accent md-raised" ng-disabled="deskAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_DESKACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_DESKACCOUNT">\n                    ADD DESKACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newDeskAccount" ng-click="vm.deleteDeskAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/deskAccounts/deskAccounts.html",'<div id="deskAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.DESKACCOUNTS">DeskAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedDeskAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedDeskAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-deskAccounts-count">\n                    <span>{{vm.selectedDeskAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="DESKACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllDeskAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectDeskAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedDeskAccounts" csv-label="true" filename="deskAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedDeskAccounts($event)" aria-label="delete selected" translate translate-attr-label="DESKACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- DESKACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedDeskAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getDeskAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.URI\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.deskAccounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="deskAccount" md-select-id="id" ng-repeat="deskAccount in vm.deskAccounts.rows">\n                                <td md-cell ng-if="deskAccount.userpic"><img class="avatar" alt="{{deskAccount.name}}" ng-src="api/users/{{deskAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!deskAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{deskAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(deskAccount, ev) : vm.createOrEditDeskAccount($event, deskAccount)" md-cell class="id ">{{deskAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(deskAccount, ev) : vm.createOrEditDeskAccount($event, deskAccount)" md-cell class="name ">{{deskAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(deskAccount, ev) : vm.createOrEditDeskAccount($event, deskAccount)" md-cell class="remoteUri ">{{deskAccount.remoteUri}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(deskAccount, ev) : vm.createOrEditDeskAccount($event, deskAccount)" md-cell class="username ">{{deskAccount.username}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(deskAccount, $event    )" translate="INTEGRATIONS.EDIT_DESKACCOUNT">\n                                                    Edit DeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(deskAccount, $event    )" translate="INTEGRATIONS.TEST_DESKACCOUNT">\n                                                    Test DeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(deskAccount, $event    )" translate="INTEGRATIONS.DELETE_DESKACCOUNT">\n                                                    Delete DeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.deskAccounts.count}}" md-on-paginate="vm.getDeskAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / DESKACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD DESKACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-deskAccount-button" ng-click="vm.createOrEditDeskAccount($event)" aria-label="add deskAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_DESKACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD DESKACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/deskAccounts/edit/configurations/dialog.html",'<md-dialog class="deskConfiguration-dialog" aria-label="New DeskConfiguration">\n    <form name="deskConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.deskConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="deskConfigurationForm[\'name\'].$error" ng-show="deskConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.deskConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="deskConfigurationForm[\'channel\'].$error" ng-show="deskConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.deskConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="deskConfigurationForm[\'type\'].$error" ng-show="deskConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newDeskConfiguration" ng-click="vm.saveDeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="deskConfigurationForm.$invalid || deskConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newDeskConfiguration" ng-click="vm.addNewDeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="deskConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_DESKCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_DESKCONFIGURATION">\n                    ADD DESKCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newDeskConfiguration" ng-click="vm.deleteDeskConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/deskAccounts/edit/item/dialog.html",'<md-dialog class="deskAccount-item-dialog" aria-label="New Item">\n    <form name="deskAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="deskAccountItemForm.type.$error" ng-show="deskAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="deskAccountItemForm.content.$error" ng-show="deskAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="deskAccountItemForm.key.$error" ng-show="deskAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="deskAccountItemForm.keyType.$error" ng-show="deskAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="deskAccountItemForm.keyContent.$error" ng-show="deskAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="deskAccountItemForm.variableName.$error" ng-show="deskAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="deskAccountItemForm.customField.$error" ng-show="deskAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="deskAccountItemForm.$invalid || deskAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="deskAccountItemForm.$invalid || deskAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="deskAccountItemForm.type.$error" ng-show="deskAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="deskAccountItemForm.option.$error"\n            ng-show="deskAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="deskAccountItemForm.content.$error"\n            ng-show="deskAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="deskAccountItemForm.variableName.$error"\n            ng-show="deskAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="deskAccountItemForm.type.$error" ng-show="deskAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="deskAccountItemForm.content.$error"\n          ng-show="deskAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="deskAccountItemForm.variableName.$error"\n          ng-show="deskAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/deskAccounts/edit/view.html",'<div id="integrations-deskAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-deskAccounts-button md-icon-button" aria-label="Go to deskAccounts" ng-click="vm.gotoDeskAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_DESKACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="deskAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/deskAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.deskAccount.id}}\n                        <span ng-if="vm.deskAccount.name">{{vm.deskAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.deskAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveDeskAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="deskAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.deskAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.TYPE">Type</label>\n                                <md-select name="type" ng-model="vm.deskAccount.type" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'integrationTab\'"> {{ \'INTEGRATIONS.INTEGRATION_TAB\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'newTab\'"> {{ \'INTEGRATIONS.NEW_TAB\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.URI">Uri</label>\n                                <input type="url" name="remoteUri" ng-model="vm.deskAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.AUTHTYPE">AuthType</label>\n                                <md-select name="authType" ng-model="vm.deskAccount.authType" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'basic\'">Basic</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'authType\'].$error" ng-show="generalForm[\'authType\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.AUTHTYPE_REQUIRED">AuthType field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.deskAccount.authType == \'basic\'" class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.deskAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block" ng-if="vm.deskAccount.authType == \'basic\'">\n                                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.deskAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.deskAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.deskAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="deskAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="DeskAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.deskAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditDeskConfiguration($event)" class="md-icon-button" aria-label="create deskConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="deskConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedDeskConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getDeskConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ deskConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteDeskConfiguration($event, deskConfiguration)" translate="INTEGRATIONS.DELETE_DESKCONFIGURATION">\n                                                        Delete DeskConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.TAGS">TAGS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-table-container class="md-whiteframe-1dp padding-20">\n                                                <md-input-container class="md-block">\n                                                    <label translate="INTEGRATIONS.TAGS">Tags</label>\n                                                    <md-select ng-model="vm_cc.selectedTags" ng-change="vm_cc.selectTagsChanged($event)" multiple>\n                                                        <md-option ng-value="tag.id" ng-repeat="tag in vm_cc.tags">{{ tag.name }}</md-option>\n                                                    </md-select>\n                                                </md-input-container>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditDeskConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/dynamics365Accounts/create/dialog.html",'<md-dialog class="dynamics365Account-dialog" aria-label="New Dynamics365Account">\n    <form name="dynamics365AccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.dynamics365Account.name" ng-required="true" autofocus>\n\n                <div ng-messages="dynamics365AccountForm[\'name\'].$error" ng-show="dynamics365AccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.dynamics365Account.username" ng-required="true">\n\n                <div ng-messages="dynamics365AccountForm[\'username\'].$error" ng-show="dynamics365AccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.dynamics365Account.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                <div ng-messages="dynamics365AccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.URI">Uri</label>\n                <input type="url" name="remoteUri" ng-model="vm.dynamics365Account.remoteUri" ng-required="true">\n\n                <div ng-messages="dynamics365AccountForm[\'remoteUri\'].$error" ng-show="dynamics365AccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TENANTID">TenantId</label>\n                <input type="text" name="tenantId" ng-model="vm.dynamics365Account.tenantId" ng-required="true">\n\n                <div ng-messages="dynamics365AccountForm[\'tenantId\'].$error" ng-show="dynamics365AccountForm[\'tenantId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TENANTID_REQUIRED">TenantId field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CLIENTID">ClientId</label>\n                <input type="text" name="clientId" ng-model="vm.dynamics365Account.clientId" ng-required="true">\n\n                <div ng-messages="dynamics365AccountForm[\'clientId\'].$error" ng-show="dynamics365AccountForm[\'clientId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CLIENTID_REQUIRED">ClientId field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CLIENTSECRET">ClientSecret</label>\n                <input type="text" name="clientSecret" ng-model="vm.dynamics365Account.clientSecret" ng-required="true">\n\n                <div ng-messages="dynamics365AccountForm[\'clientSecret\'].$error" ng-show="dynamics365AccountForm[\'clientSecret\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CLIENTSECRET_REQUIRED">ClientSecret field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.dynamics365Account.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="dynamics365AccountForm[\'serverUrl\'].$error" ng-show="dynamics365AccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.dynamics365Account.description">\n\n                <div ng-messages="dynamics365AccountForm[\'description\'].$error" ng-show="dynamics365AccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newDynamics365Account" ng-click="vm.saveDynamics365Account()" class="send-button md-accent md-raised" ng-disabled="dynamics365AccountForm.$invalid || dynamics365AccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newDynamics365Account" ng-click="vm.addNewDynamics365Account()" class="send-button md-accent md-raised" ng-disabled="dynamics365AccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_DYNAMICS365ACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_DYNAMICS365ACCOUNT">\n                    ADD DYNAMICS365ACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newDynamics365Account" ng-click="vm.deleteDynamics365Account($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/dynamics365Accounts/dynamics365Accounts.html",'<div id="dynamics365Accounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.DYNAMICS365ACCOUNTS">Dynamics365Accounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedDynamics365Accounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedDynamics365Accounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-dynamics365Accounts-count">\n                    <span>{{vm.selectedDynamics365Accounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="DYNAMICS365ACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllDynamics365Accounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectDynamics365Accounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedDynamics365Accounts" csv-label="true" filename="dynamics365Accounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedDynamics365Accounts($event)" aria-label="delete selected" translate translate-attr-label="DYNAMICS365ACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- DYNAMICS365ACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedDynamics365Accounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getDynamics365Accounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.URI\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.dynamics365Accounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="dynamics365Account" md-select-id="id" ng-repeat="dynamics365Account in vm.dynamics365Accounts.rows">\n                                <td md-cell ng-if="dynamics365Account.userpic"><img class="avatar" alt="{{dynamics365Account.name}}" ng-src="api/users/{{dynamics365Account.id}}/avatar" /></td>\n                                <td md-cell ng-if="!dynamics365Account.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{dynamics365Account.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(dynamics365Account, ev) : vm.createOrEditDynamics365Account($event, dynamics365Account)" md-cell class="id ">{{dynamics365Account.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(dynamics365Account, ev) : vm.createOrEditDynamics365Account($event, dynamics365Account)" md-cell class="name ">{{dynamics365Account.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(dynamics365Account, ev) : vm.createOrEditDynamics365Account($event, dynamics365Account)" md-cell class="username ">{{dynamics365Account.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(dynamics365Account, ev) : vm.createOrEditDynamics365Account($event, dynamics365Account)" md-cell class="remoteUri ">{{dynamics365Account.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(dynamics365Account, $event    )" translate="INTEGRATIONS.EDIT_DYNAMICS365ACCOUNT">\n                                                    Edit Dynamics365Account\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(dynamics365Account, $event    )" translate="INTEGRATIONS.TEST_DYNAMICS365ACCOUNT">\n                                                    Test Dynamics365Account\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(dynamics365Account, $event    )" translate="INTEGRATIONS.DELETE_DYNAMICS365ACCOUNT">\n                                                    Delete Dynamics365Account\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.dynamics365Accounts.count}}" md-on-paginate="vm.getDynamics365Accounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / DYNAMICS365ACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD DYNAMICS365ACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-dynamics365Account-button" ng-click="vm.createOrEditDynamics365Account($event)" aria-label="add dynamics365Account" translate translate-attr-aria-label="INTEGRATIONS.ADD_DYNAMICS365ACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD DYNAMICS365ACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/dynamics365Accounts/edit/configurations/dialog.html",'<md-dialog class="dynamics365Configuration-dialog" aria-label="New Dynamics365Configuration">\n    <form name="dynamics365ConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.dynamics365Configuration.name" ng-required="true" autofocus>\n\n                <div ng-messages="dynamics365ConfigurationForm[\'name\'].$error" ng-show="dynamics365ConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.dynamics365Configuration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dynamics365ConfigurationForm[\'channel\'].$error" ng-show="dynamics365ConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.dynamics365Configuration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dynamics365ConfigurationForm[\'type\'].$error" ng-show="dynamics365ConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TICKETTYPE">TicketType</label>\n                <md-select name="ticketType" ng-model="vm.dynamics365Configuration.ticketType" required>\n\n                    <md-option ng-value="\'incident\'"> {{ \'INTEGRATIONS.CASE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'phonecall\'"> {{ \'INTEGRATIONS.PHONECALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dynamics365ConfigurationForm[\'ticketType\'].$error" ng-show="dynamics365ConfigurationForm[\'ticketType\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TICKETTYPE_REQUIRED">TicketType field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newDynamics365Configuration" ng-click="vm.saveDynamics365Configuration()" class="send-button md-accent md-raised" ng-disabled="dynamics365ConfigurationForm.$invalid || dynamics365ConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newDynamics365Configuration" ng-click="vm.addNewDynamics365Configuration()" class="send-button md-accent md-raised" ng-disabled="dynamics365ConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_DYNAMICS365CONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_DYNAMICS365CONFIGURATION">\n                    ADD DYNAMICS365CONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newDynamics365Configuration" ng-click="vm.deleteDynamics365Configuration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/dynamics365Accounts/edit/item/dialog.html",'<md-dialog class="dynamics365Account-item-dialog" aria-label="New Item">\n    <form name="dynamics365AccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="dynamics365AccountItemForm.type.$error" ng-show="dynamics365AccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="dynamics365AccountItemForm.content.$error" ng-show="dynamics365AccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="dynamics365AccountItemForm.key.$error" ng-show="dynamics365AccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="dynamics365AccountItemForm.keyType.$error" ng-show="dynamics365AccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="dynamics365AccountItemForm.keyContent.$error" ng-show="dynamics365AccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="dynamics365AccountItemForm.variableName.$error" ng-show="dynamics365AccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="dynamics365AccountItemForm.customField.$error" ng-show="dynamics365AccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="dynamics365AccountItemForm.$invalid || dynamics365AccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="dynamics365AccountItemForm.$invalid || dynamics365AccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="dynamics365AccountItemForm.type.$error" ng-show="dynamics365AccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="dynamics365AccountItemForm.option.$error"\n            ng-show="dynamics365AccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="dynamics365AccountItemForm.content.$error"\n            ng-show="dynamics365AccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="dynamics365AccountItemForm.variableName.$error"\n            ng-show="dynamics365AccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="dynamics365AccountItemForm.type.$error" ng-show="dynamics365AccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="dynamics365AccountItemForm.content.$error"\n          ng-show="dynamics365AccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="dynamics365AccountItemForm.variableName.$error"\n          ng-show="dynamics365AccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/dynamics365Accounts/edit/view.html",'<div id="integrations-dynamics365Account" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-dynamics365Accounts-button md-icon-button" aria-label="Go to dynamics365Accounts" ng-click="vm.gotoDynamics365Accounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_DYNAMICS365ACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="dynamics365Account-image" hide-xs>\n                    <img ng-src="assets/images/business/dynamics365Accounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.dynamics365Account.id}}\n                        <span ng-if="vm.dynamics365Account.name">{{vm.dynamics365Account.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.dynamics365Account.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveDynamics365Account()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="dynamics365Account-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.dynamics365Account.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.dynamics365Account.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.dynamics365Account.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.URI">Uri</label>\n                                <input type="url" name="remoteUri" ng-model="vm.dynamics365Account.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.TENANTID">TenantId</label>\n                                <input type="text" name="tenantId" ng-model="vm.dynamics365Account.tenantId" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'tenantId\'].$error" ng-show="generalForm[\'tenantId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.TENANTID_REQUIRED">TenantId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.CLIENTID">ClientId</label>\n                                <input type="text" name="clientId" ng-model="vm.dynamics365Account.clientId" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'clientId\'].$error" ng-show="generalForm[\'clientId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.CLIENTID_REQUIRED">ClientId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.CLIENTSECRET">ClientSecret</label>\n                                <input type="text" name="clientSecret" ng-model="vm.dynamics365Account.clientSecret" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'clientSecret\'].$error" ng-show="generalForm[\'clientSecret\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.CLIENTSECRET_REQUIRED">ClientSecret field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.dynamics365Account.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.dynamics365Account.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="dynamics365Account-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="Dynamics365AccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.dynamics365Account, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditDynamics365Configuration($event)" class="md-icon-button" aria-label="create dynamics365Configuration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="dynamics365Configuration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedDynamics365Configuration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getDynamics365Configuration($index)">\n                                        <span class="text-truncate" flex="80">{{ dynamics365Configuration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteDynamics365Configuration($event, dynamics365Configuration)" translate="INTEGRATIONS.DELETE_DYNAMICS365CONFIGURATION">\n                                                        Delete Dynamics365Configuration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditDynamics365Configuration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/freshdeskAccounts/create/dialog.html",'<md-dialog class="freshdeskAccount-dialog" aria-label="New FreshdeskAccount">\n    <form name="freshdeskAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.freshdeskAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="freshdeskAccountForm[\'name\'].$error" ng-show="freshdeskAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.freshdeskAccount.username" ng-required="true">\n\n                <div ng-messages="freshdeskAccountForm[\'username\'].$error" ng-show="freshdeskAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.URI">Uri</label>\n                <input type="url" name="remoteUri" ng-model="vm.freshdeskAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="freshdeskAccountForm[\'remoteUri\'].$error" ng-show="freshdeskAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.APIKEY">ApiKey</label>\n                <input type="text" name="apiKey" ng-model="vm.freshdeskAccount.apiKey" ng-required="true">\n\n                <div ng-messages="freshdeskAccountForm[\'apiKey\'].$error" ng-show="freshdeskAccountForm[\'apiKey\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.APIKEY_REQUIRED">ApiKey field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.freshdeskAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="freshdeskAccountForm[\'serverUrl\'].$error" ng-show="freshdeskAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.freshdeskAccount.description">\n\n                <div ng-messages="freshdeskAccountForm[\'description\'].$error" ng-show="freshdeskAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newFreshdeskAccount" ng-click="vm.saveFreshdeskAccount()" class="send-button md-accent md-raised" ng-disabled="freshdeskAccountForm.$invalid || freshdeskAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newFreshdeskAccount" ng-click="vm.addNewFreshdeskAccount()" class="send-button md-accent md-raised" ng-disabled="freshdeskAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_FRESHDESKACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_FRESHDESKACCOUNT">\n                    ADD FRESHDESKACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newFreshdeskAccount" ng-click="vm.deleteFreshdeskAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/freshdeskAccounts/edit/configurations/dialog.html",'<md-dialog class="freshdeskConfiguration-dialog" aria-label="New FreshdeskConfiguration">\n    <form name="freshdeskConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.freshdeskConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="freshdeskConfigurationForm[\'name\'].$error" ng-show="freshdeskConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.freshdeskConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="freshdeskConfigurationForm[\'channel\'].$error" ng-show="freshdeskConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.freshdeskConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="freshdeskConfigurationForm[\'type\'].$error" ng-show="freshdeskConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newFreshdeskConfiguration" ng-click="vm.saveFreshdeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="freshdeskConfigurationForm.$invalid || freshdeskConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newFreshdeskConfiguration" ng-click="vm.addNewFreshdeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="freshdeskConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_FRESHDESKCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_FRESHDESKCONFIGURATION">\n                    ADD FRESHDESKCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newFreshdeskConfiguration" ng-click="vm.deleteFreshdeskConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/freshdeskAccounts/edit/item/dialog.html",'<md-dialog class="freshdeskAccount-item-dialog" aria-label="New Item">\n    <form name="freshdeskAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="freshdeskAccountItemForm.type.$error" ng-show="freshdeskAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="freshdeskAccountItemForm.content.$error" ng-show="freshdeskAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="freshdeskAccountItemForm.key.$error" ng-show="freshdeskAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="freshdeskAccountItemForm.keyType.$error" ng-show="freshdeskAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="freshdeskAccountItemForm.keyContent.$error" ng-show="freshdeskAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="freshdeskAccountItemForm.variableName.$error" ng-show="freshdeskAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="freshdeskAccountItemForm.customField.$error" ng-show="freshdeskAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="freshdeskAccountItemForm.$invalid || freshdeskAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="freshdeskAccountItemForm.$invalid || freshdeskAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="freshdeskAccountItemForm.type.$error" ng-show="freshdeskAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="freshdeskAccountItemForm.option.$error"\n            ng-show="freshdeskAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="freshdeskAccountItemForm.content.$error"\n            ng-show="freshdeskAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="freshdeskAccountItemForm.variableName.$error"\n            ng-show="freshdeskAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="freshdeskAccountItemForm.type.$error" ng-show="freshdeskAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="freshdeskAccountItemForm.content.$error"\n          ng-show="freshdeskAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="freshdeskAccountItemForm.variableName.$error"\n          ng-show="freshdeskAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/freshdeskAccounts/edit/view.html",'<div id="integrations-freshdeskAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-freshdeskAccounts-button md-icon-button" aria-label="Go to freshdeskAccounts" ng-click="vm.gotoFreshdeskAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_FRESHDESKACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="freshdeskAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/freshdeskAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.freshdeskAccount.id}}\n                        <span ng-if="vm.freshdeskAccount.name">{{vm.freshdeskAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.freshdeskAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveFreshdeskAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="freshdeskAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.freshdeskAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.freshdeskAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.URI">Uri</label>\n                                <input type="url" name="remoteUri" ng-model="vm.freshdeskAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.APIKEY">ApiKey</label>\n                                <input type="text" name="apiKey" ng-model="vm.freshdeskAccount.apiKey" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'apiKey\'].$error" ng-show="generalForm[\'apiKey\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.APIKEY_REQUIRED">ApiKey field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.freshdeskAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.freshdeskAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="freshdeskAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="FreshdeskAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.freshdeskAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditFreshdeskConfiguration($event)" class="md-icon-button" aria-label="create freshdeskConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="freshdeskConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedFreshdeskConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getFreshdeskConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ freshdeskConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteFreshdeskConfiguration($event, freshdeskConfiguration)" translate="INTEGRATIONS.DELETE_FRESHDESKCONFIGURATION">\n                                                        Delete FreshdeskConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.TAGS">TAGS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-table-container class="md-whiteframe-1dp padding-20">\n                                                <md-input-container class="md-block">\n                                                    <label translate="INTEGRATIONS.TAGS">Tags</label>\n                                                    <md-select ng-model="vm_cc.selectedTags" ng-change="vm_cc.selectTagsChanged($event)" multiple>\n                                                        <md-option ng-value="tag.id" ng-repeat="tag in vm_cc.tags">{{ tag.name }}</md-option>\n                                                    </md-select>\n                                                </md-input-container>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditFreshdeskConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/freshdeskAccounts/freshdeskAccounts.html",'<div id="freshdeskAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.FRESHDESKACCOUNTS">FreshdeskAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedFreshdeskAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedFreshdeskAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-freshdeskAccounts-count">\n                    <span>{{vm.selectedFreshdeskAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="FRESHDESKACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllFreshdeskAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectFreshdeskAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedFreshdeskAccounts" csv-label="true" filename="freshdeskAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedFreshdeskAccounts($event)" aria-label="delete selected" translate translate-attr-label="FRESHDESKACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- FRESHDESKACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedFreshdeskAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getFreshdeskAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.URI\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.freshdeskAccounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="freshdeskAccount" md-select-id="id" ng-repeat="freshdeskAccount in vm.freshdeskAccounts.rows">\n                                <td md-cell ng-if="freshdeskAccount.userpic"><img class="avatar" alt="{{freshdeskAccount.name}}" ng-src="api/users/{{freshdeskAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!freshdeskAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{freshdeskAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(freshdeskAccount, ev) : vm.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="id ">{{freshdeskAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(freshdeskAccount, ev) : vm.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="name ">{{freshdeskAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(freshdeskAccount, ev) : vm.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="username ">{{freshdeskAccount.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(freshdeskAccount, ev) : vm.createOrEditFreshdeskAccount($event, freshdeskAccount)" md-cell class="remoteUri ">{{freshdeskAccount.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(freshdeskAccount, $event    )" translate="INTEGRATIONS.EDIT_FRESHDESKACCOUNT">\n                                                    Edit FreshdeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(freshdeskAccount, $event    )" translate="INTEGRATIONS.TEST_FRESHDESKACCOUNT">\n                                                    Test FreshdeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(freshdeskAccount, $event    )" translate="INTEGRATIONS.DELETE_FRESHDESKACCOUNT">\n                                                    Delete FreshdeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.freshdeskAccounts.count}}" md-on-paginate="vm.getFreshdeskAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / FRESHDESKACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD FRESHDESKACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-freshdeskAccount-button" ng-click="vm.createOrEditFreshdeskAccount($event)" aria-label="add freshdeskAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_FRESHDESKACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD FRESHDESKACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/salesforceAccounts/create/dialog.html",'<md-dialog class="salesforceAccount-dialog" aria-label="New SalesforceAccount">\n    <form name="salesforceAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.salesforceAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="salesforceAccountForm[\'name\'].$error" ng-show="salesforceAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.salesforceAccount.type" required>\n\n                    <md-option ng-value="\'integrationTab\'"> {{ \'INTEGRATIONS.INTEGRATION_TAB\' | translate }} </md-option>\n\n                    <md-option ng-value="\'newTab\'"> {{ \'INTEGRATIONS.NEW_TAB\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="salesforceAccountForm[\'type\'].$error" ng-show="salesforceAccountForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.salesforceAccount.username" ng-required="true">\n\n                <div ng-messages="salesforceAccountForm[\'username\'].$error" ng-show="salesforceAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.URI">Uri</label>\n                <input type="url" name="remoteUri" ng-model="vm.salesforceAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="salesforceAccountForm[\'remoteUri\'].$error" ng-show="salesforceAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.salesforceAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                <div ng-messages="salesforceAccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CLIENTID">ClientId</label>\n                <input type="text" name="clientId" ng-model="vm.salesforceAccount.clientId" ng-required="true">\n\n                <div ng-messages="salesforceAccountForm[\'clientId\'].$error" ng-show="salesforceAccountForm[\'clientId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CLIENTID_REQUIRED">ClientId field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CLIENTSECRET">ClientSecret</label>\n                <input type="text" name="clientSecret" ng-model="vm.salesforceAccount.clientSecret" ng-required="true">\n\n                <div ng-messages="salesforceAccountForm[\'clientSecret\'].$error" ng-show="salesforceAccountForm[\'clientSecret\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CLIENTSECRET_REQUIRED">ClientSecret field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.SECURITYTOKEN">SecurityToken</label>\n                <input type="text" name="securityToken" ng-model="vm.salesforceAccount.securityToken" ng-required="true">\n\n                <div ng-messages="salesforceAccountForm[\'securityToken\'].$error" ng-show="salesforceAccountForm[\'securityToken\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.SECURITYTOKEN_REQUIRED">SecurityToken field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.salesforceAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="salesforceAccountForm[\'serverUrl\'].$error" ng-show="salesforceAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.salesforceAccount.description">\n\n                <div ng-messages="salesforceAccountForm[\'description\'].$error" ng-show="salesforceAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSalesforceAccount" ng-click="vm.saveSalesforceAccount()" class="send-button md-accent md-raised" ng-disabled="salesforceAccountForm.$invalid || salesforceAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSalesforceAccount" ng-click="vm.addNewSalesforceAccount()" class="send-button md-accent md-raised" ng-disabled="salesforceAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SALESFORCEACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_SALESFORCEACCOUNT">\n                    ADD SALESFORCEACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSalesforceAccount" ng-click="vm.deleteSalesforceAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/salesforceAccounts/edit/configurations/dialog.html",'<md-dialog class="salesforceConfiguration-dialog" aria-label="New SalesforceConfiguration">\n    <form name="salesforceConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.salesforceConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="salesforceConfigurationForm[\'name\'].$error" ng-show="salesforceConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.salesforceConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="salesforceConfigurationForm[\'channel\'].$error" ng-show="salesforceConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.salesforceConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="salesforceConfigurationForm[\'type\'].$error" ng-show="salesforceConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TICKETTYPE">TicketType</label>\n                <md-select name="ticketType" ng-model="vm.salesforceConfiguration.ticketType" required>\n\n                    <md-option ng-value="\'Task\'"> {{ \'INTEGRATIONS.TASK\' | translate }} </md-option>\n\n                    <md-option ng-value="\'Case\'"> {{ \'INTEGRATIONS.CASE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="salesforceConfigurationForm[\'ticketType\'].$error" ng-show="salesforceConfigurationForm[\'ticketType\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TICKETTYPE_REQUIRED">TicketType field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSalesforceConfiguration" ng-click="vm.saveSalesforceConfiguration()" class="send-button md-accent md-raised" ng-disabled="salesforceConfigurationForm.$invalid || salesforceConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSalesforceConfiguration" ng-click="vm.addNewSalesforceConfiguration()" class="send-button md-accent md-raised" ng-disabled="salesforceConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SALESFORCECONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_SALESFORCECONFIGURATION">\n                    ADD SALESFORCECONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSalesforceConfiguration" ng-click="vm.deleteSalesforceConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/salesforceAccounts/edit/item/dialog.html",'<md-dialog class="salesforceAccount-item-dialog" aria-label="New Item">\n    <form name="salesforceAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="salesforceAccountItemForm.type.$error" ng-show="salesforceAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="salesforceAccountItemForm.content.$error" ng-show="salesforceAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="salesforceAccountItemForm.key.$error" ng-show="salesforceAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="salesforceAccountItemForm.keyType.$error" ng-show="salesforceAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="salesforceAccountItemForm.keyContent.$error" ng-show="salesforceAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="salesforceAccountItemForm.variableName.$error" ng-show="salesforceAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="salesforceAccountItemForm.customField.$error" ng-show="salesforceAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="salesforceAccountItemForm.$invalid || salesforceAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="salesforceAccountItemForm.$invalid || salesforceAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="salesforceAccountItemForm.type.$error" ng-show="salesforceAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="salesforceAccountItemForm.option.$error"\n            ng-show="salesforceAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="salesforceAccountItemForm.content.$error"\n            ng-show="salesforceAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="salesforceAccountItemForm.variableName.$error"\n            ng-show="salesforceAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="salesforceAccountItemForm.type.$error" ng-show="salesforceAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="salesforceAccountItemForm.content.$error"\n          ng-show="salesforceAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="salesforceAccountItemForm.variableName.$error"\n          ng-show="salesforceAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/salesforceAccounts/edit/view.html",'<div id="integrations-salesforceAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-salesforceAccounts-button md-icon-button" aria-label="Go to salesforceAccounts" ng-click="vm.gotoSalesforceAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_SALESFORCEACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="salesforceAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/salesforceAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.salesforceAccount.id}}\n                        <span ng-if="vm.salesforceAccount.name">{{vm.salesforceAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.salesforceAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveSalesforceAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="salesforceAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.salesforceAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.TYPE">Type</label>\n                                <md-select name="type" ng-model="vm.salesforceAccount.type" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'integrationTab\'"> {{ \'INTEGRATIONS.INTEGRATION_TAB\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'newTab\'"> {{ \'INTEGRATIONS.NEW_TAB\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.salesforceAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.URI">Uri</label>\n                                <input type="url" name="remoteUri" ng-model="vm.salesforceAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.salesforceAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.CLIENTID">ClientId</label>\n                                <input type="text" name="clientId" ng-model="vm.salesforceAccount.clientId" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'clientId\'].$error" ng-show="generalForm[\'clientId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.CLIENTID_REQUIRED">ClientId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.CLIENTSECRET">ClientSecret</label>\n                                <input type="text" name="clientSecret" ng-model="vm.salesforceAccount.clientSecret" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'clientSecret\'].$error" ng-show="generalForm[\'clientSecret\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.CLIENTSECRET_REQUIRED">ClientSecret field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.SECURITYTOKEN">SecurityToken</label>\n                                <input type="text" name="securityToken" ng-model="vm.salesforceAccount.securityToken" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'securityToken\'].$error" ng-show="generalForm[\'securityToken\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURITYTOKEN_REQUIRED">SecurityToken field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.salesforceAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.salesforceAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="salesforceAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="SalesforceAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.salesforceAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditSalesforceConfiguration($event)" class="md-icon-button" aria-label="create salesforceConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="salesforceConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedSalesforceConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getSalesforceConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ salesforceConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteSalesforceConfiguration($event, salesforceConfiguration)" translate="INTEGRATIONS.DELETE_SALESFORCECONFIGURATION">\n                                                        Delete SalesforceConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.ADVANCED">ADVANCED</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <div layout-margin>\n                                                <label translate="INTEGRATIONS.MODULE_SEARCH"></label>\n                                                <md-select ng-model="vm_cc.salesforceConfiguration.moduleSearch" ng-change="vm_cc.selectChangedAdvanced()" ng-disabled="!vm_cc.crudPermissions.canEdit">\n                                                    <md-option ng-value="option.key" ng-repeat="option in [{key: \'contact_lead\', value: \'Contact & Lead\'}, {key: \'contact\', value: \'Contact\'}, {key: \'lead\', value: \'Lead\'}]">{{ option.value }}</md-option>\n                                                </md-select>\n                                            </div>\n                                            <div layout-margin>\n                                                <label translate="INTEGRATIONS.MODULE_CREATE"></label>\n                                                <md-select ng-model="vm_cc.salesforceConfiguration.moduleCreate" ng-change="vm_cc.selectChangedAdvanced()" ng-disabled="!vm_cc.crudPermissions.canEdit">\n                                                    <md-option ng-value="option.key" ng-repeat="option in [{key: \'nothing\', value: \'Nothing\'}, {key: \'contact\', value: \'Contact\'}, {key: \'lead\', value: \'Lead\'}]">{{ option.value }}</md-option>\n                                                </md-select>\n                                            </div>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditSalesforceConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/salesforceAccounts/salesforceAccounts.html",'<div id="salesforceAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.SALESFORCEACCOUNTS">SalesforceAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedSalesforceAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedSalesforceAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-salesforceAccounts-count">\n                    <span>{{vm.selectedSalesforceAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SALESFORCEACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllSalesforceAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectSalesforceAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedSalesforceAccounts" csv-label="true" filename="salesforceAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedSalesforceAccounts($event)" aria-label="delete selected" translate translate-attr-label="SALESFORCEACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SALESFORCEACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedSalesforceAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSalesforceAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.URI\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.salesforceAccounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="salesforceAccount" md-select-id="id" ng-repeat="salesforceAccount in vm.salesforceAccounts.rows">\n                                <td md-cell ng-if="salesforceAccount.userpic"><img class="avatar" alt="{{salesforceAccount.name}}" ng-src="api/users/{{salesforceAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!salesforceAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{salesforceAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(salesforceAccount, ev) : vm.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="id ">{{salesforceAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(salesforceAccount, ev) : vm.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="name ">{{salesforceAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(salesforceAccount, ev) : vm.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="username ">{{salesforceAccount.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(salesforceAccount, ev) : vm.createOrEditSalesforceAccount($event, salesforceAccount)" md-cell class="remoteUri ">{{salesforceAccount.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(salesforceAccount, $event    )" translate="INTEGRATIONS.EDIT_SALESFORCEACCOUNT">\n                                                    Edit SalesforceAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(salesforceAccount, $event    )" translate="INTEGRATIONS.TEST_SALESFORCEACCOUNT">\n                                                    Test SalesforceAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(salesforceAccount, $event    )" translate="INTEGRATIONS.DELETE_SALESFORCEACCOUNT">\n                                                    Delete SalesforceAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.salesforceAccounts.count}}" md-on-paginate="vm.getSalesforceAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SALESFORCEACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD SALESFORCEACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-salesforceAccount-button" ng-click="vm.createOrEditSalesforceAccount($event)" aria-label="add salesforceAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_SALESFORCEACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD SALESFORCEACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/servicenowAccounts/create/dialog.html",'<md-dialog class="servicenowAccount-dialog" aria-label="New ServicenowAccount">\n    <form name="servicenowAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.servicenowAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="servicenowAccountForm[\'name\'].$error" ng-show="servicenowAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.servicenowAccount.username" ng-required="true">\n\n                <div ng-messages="servicenowAccountForm[\'username\'].$error" ng-show="servicenowAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.servicenowAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                <div ng-messages="servicenowAccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.servicenowAccount.email" ng-required="true">\n\n                <div ng-messages="servicenowAccountForm[\'email\'].$error" ng-show="servicenowAccountForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="INTEGRATIONS.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.HOST">Host</label>\n                <input type="url" name="remoteUri" ng-model="vm.servicenowAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="servicenowAccountForm[\'remoteUri\'].$error" ng-show="servicenowAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.HOST_REQUIRED">Host field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.HOST_MUST_VALID_URL">Host must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.servicenowAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="servicenowAccountForm[\'serverUrl\'].$error" ng-show="servicenowAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.servicenowAccount.description">\n\n                <div ng-messages="servicenowAccountForm[\'description\'].$error" ng-show="servicenowAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newServicenowAccount" ng-click="vm.saveServicenowAccount()" class="send-button md-accent md-raised" ng-disabled="servicenowAccountForm.$invalid || servicenowAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newServicenowAccount" ng-click="vm.addNewServicenowAccount()" class="send-button md-accent md-raised" ng-disabled="servicenowAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SERVICENOWACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_SERVICENOWACCOUNT">\n                    ADD SERVICENOWACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newServicenowAccount" ng-click="vm.deleteServicenowAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/servicenowAccounts/edit/configurations/dialog.html",'<md-dialog class="servicenowConfiguration-dialog" aria-label="New ServicenowConfiguration">\n    <form name="servicenowConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.servicenowConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="servicenowConfigurationForm[\'name\'].$error" ng-show="servicenowConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.servicenowConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="servicenowConfigurationForm[\'channel\'].$error" ng-show="servicenowConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.servicenowConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="servicenowConfigurationForm[\'type\'].$error" ng-show="servicenowConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newServicenowConfiguration" ng-click="vm.saveServicenowConfiguration()" class="send-button md-accent md-raised" ng-disabled="servicenowConfigurationForm.$invalid || servicenowConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newServicenowConfiguration" ng-click="vm.addNewServicenowConfiguration()" class="send-button md-accent md-raised" ng-disabled="servicenowConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SERVICENOWCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_SERVICENOWCONFIGURATION">\n                    ADD SERVICENOWCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newServicenowConfiguration" ng-click="vm.deleteServicenowConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/servicenowAccounts/edit/item/dialog.html",'<md-dialog class="servicenowAccount-item-dialog" aria-label="New Item">\n    <form name="servicenowAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="servicenowAccountItemForm.type.$error" ng-show="servicenowAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="servicenowAccountItemForm.content.$error" ng-show="servicenowAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="servicenowAccountItemForm.key.$error" ng-show="servicenowAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="servicenowAccountItemForm.keyType.$error" ng-show="servicenowAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="servicenowAccountItemForm.keyContent.$error" ng-show="servicenowAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="servicenowAccountItemForm.variableName.$error" ng-show="servicenowAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="servicenowAccountItemForm.customField.$error" ng-show="servicenowAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="servicenowAccountItemForm.$invalid || servicenowAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="servicenowAccountItemForm.$invalid || servicenowAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="servicenowAccountItemForm.type.$error" ng-show="servicenowAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="servicenowAccountItemForm.option.$error"\n            ng-show="servicenowAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="servicenowAccountItemForm.content.$error"\n            ng-show="servicenowAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="servicenowAccountItemForm.variableName.$error"\n            ng-show="servicenowAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="servicenowAccountItemForm.type.$error" ng-show="servicenowAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="servicenowAccountItemForm.content.$error"\n          ng-show="servicenowAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="servicenowAccountItemForm.variableName.$error"\n          ng-show="servicenowAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/servicenowAccounts/edit/view.html",'<div id="integrations-servicenowAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-servicenowAccounts-button md-icon-button" aria-label="Go to servicenowAccounts" ng-click="vm.gotoServicenowAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_SERVICENOWACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="servicenowAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/servicenowAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.servicenowAccount.id}}\n                        <span ng-if="vm.servicenowAccount.name">{{vm.servicenowAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.servicenowAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveServicenowAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="servicenowAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.servicenowAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.servicenowAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.servicenowAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.EMAIL">Email</label>\n                                <input type="email" name="email" ng-model="vm.servicenowAccount.email" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'email\'].$error" ng-show="generalForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="INTEGRATIONS.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.HOST">Host</label>\n                                <input type="url" name="remoteUri" ng-model="vm.servicenowAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.HOST_REQUIRED">Host field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.HOST_MUST_VALID_URL">Host must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.servicenowAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.servicenowAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="servicenowAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="ServicenowAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.servicenowAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditServicenowConfiguration($event)" class="md-icon-button" aria-label="create servicenowConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="servicenowConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedServicenowConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getServicenowConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ servicenowConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteServicenowConfiguration($event, servicenowConfiguration)" translate="INTEGRATIONS.DELETE_SERVICENOWCONFIGURATION">\n                                                        Delete ServicenowConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditServicenowConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/servicenowAccounts/servicenowAccounts.html",'<div id="servicenowAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.SERVICENOWACCOUNTS">ServicenowAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedServicenowAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedServicenowAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-servicenowAccounts-count">\n                    <span>{{vm.selectedServicenowAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SERVICENOWACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllServicenowAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectServicenowAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedServicenowAccounts" csv-label="true" filename="servicenowAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedServicenowAccounts($event)" aria-label="delete selected" translate translate-attr-label="SERVICENOWACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SERVICENOWACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedServicenowAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getServicenowAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="email">{{ \'INTEGRATIONS.EMAIL\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.HOST\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.servicenowAccounts.rows.length">\n                                <td md-cell colspan="6">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="servicenowAccount" md-select-id="id" ng-repeat="servicenowAccount in vm.servicenowAccounts.rows">\n                                <td md-cell ng-if="servicenowAccount.userpic"><img class="avatar" alt="{{servicenowAccount.name}}" ng-src="api/users/{{servicenowAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!servicenowAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{servicenowAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(servicenowAccount, ev) : vm.createOrEditServicenowAccount($event, servicenowAccount)" md-cell class="id ">{{servicenowAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(servicenowAccount, ev) : vm.createOrEditServicenowAccount($event, servicenowAccount)" md-cell class="name ">{{servicenowAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(servicenowAccount, ev) : vm.createOrEditServicenowAccount($event, servicenowAccount)" md-cell class="username ">{{servicenowAccount.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(servicenowAccount, ev) : vm.createOrEditServicenowAccount($event, servicenowAccount)" md-cell class="email ">{{servicenowAccount.email}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(servicenowAccount, ev) : vm.createOrEditServicenowAccount($event, servicenowAccount)" md-cell class="remoteUri ">{{servicenowAccount.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(servicenowAccount, $event    )" translate="INTEGRATIONS.EDIT_SERVICENOWACCOUNT">\n                                                    Edit ServicenowAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(servicenowAccount, $event    )" translate="INTEGRATIONS.TEST_SERVICENOWACCOUNT">\n                                                    Test ServicenowAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(servicenowAccount, $event    )" translate="INTEGRATIONS.DELETE_SERVICENOWACCOUNT">\n                                                    Delete ServicenowAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.servicenowAccounts.count}}" md-on-paginate="vm.getServicenowAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SERVICENOWACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD SERVICENOWACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-servicenowAccount-button" ng-click="vm.createOrEditServicenowAccount($event)" aria-label="add servicenowAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_SERVICENOWACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD SERVICENOWACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/sugarcrmAccounts/create/dialog.html",'<md-dialog class="sugarcrmAccount-dialog" aria-label="New SugarcrmAccount">\n    <form name="sugarcrmAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.sugarcrmAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="sugarcrmAccountForm[\'name\'].$error" ng-show="sugarcrmAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.sugarcrmAccount.username" ng-required="true">\n\n                <div ng-messages="sugarcrmAccountForm[\'username\'].$error" ng-show="sugarcrmAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.URI">Uri</label>\n                <input type="url" name="remoteUri" ng-model="vm.sugarcrmAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="sugarcrmAccountForm[\'remoteUri\'].$error" ng-show="sugarcrmAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.sugarcrmAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                <div ng-messages="sugarcrmAccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.sugarcrmAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="sugarcrmAccountForm[\'serverUrl\'].$error" ng-show="sugarcrmAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.sugarcrmAccount.description">\n\n                <div ng-messages="sugarcrmAccountForm[\'description\'].$error" ng-show="sugarcrmAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSugarcrmAccount" ng-click="vm.saveSugarcrmAccount()" class="send-button md-accent md-raised" ng-disabled="sugarcrmAccountForm.$invalid || sugarcrmAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSugarcrmAccount" ng-click="vm.addNewSugarcrmAccount()" class="send-button md-accent md-raised" ng-disabled="sugarcrmAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SUGARCRMACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_SUGARCRMACCOUNT">\n                    ADD SUGARCRMACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSugarcrmAccount" ng-click="vm.deleteSugarcrmAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/sugarcrmAccounts/edit/configurations/dialog.html",'<md-dialog class="sugarcrmConfiguration-dialog" aria-label="New SugarcrmConfiguration">\n    <form name="sugarcrmConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.sugarcrmConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="sugarcrmConfigurationForm[\'name\'].$error" ng-show="sugarcrmConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.sugarcrmConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="sugarcrmConfigurationForm[\'channel\'].$error" ng-show="sugarcrmConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.sugarcrmConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="sugarcrmConfigurationForm[\'type\'].$error" ng-show="sugarcrmConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSugarcrmConfiguration" ng-click="vm.saveSugarcrmConfiguration()" class="send-button md-accent md-raised" ng-disabled="sugarcrmConfigurationForm.$invalid || sugarcrmConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSugarcrmConfiguration" ng-click="vm.addNewSugarcrmConfiguration()" class="send-button md-accent md-raised" ng-disabled="sugarcrmConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_SUGARCRMCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_SUGARCRMCONFIGURATION">\n                    ADD SUGARCRMCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSugarcrmConfiguration" ng-click="vm.deleteSugarcrmConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/sugarcrmAccounts/edit/item/dialog.html",'<md-dialog class="sugarcrmAccount-item-dialog" aria-label="New Item">\n    <form name="sugarcrmAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="sugarcrmAccountItemForm.type.$error" ng-show="sugarcrmAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="sugarcrmAccountItemForm.content.$error" ng-show="sugarcrmAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="sugarcrmAccountItemForm.key.$error" ng-show="sugarcrmAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="sugarcrmAccountItemForm.keyType.$error" ng-show="sugarcrmAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="sugarcrmAccountItemForm.keyContent.$error" ng-show="sugarcrmAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="sugarcrmAccountItemForm.variableName.$error" ng-show="sugarcrmAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="sugarcrmAccountItemForm.customField.$error" ng-show="sugarcrmAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="sugarcrmAccountItemForm.$invalid || sugarcrmAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="sugarcrmAccountItemForm.$invalid || sugarcrmAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="sugarcrmAccountItemForm.type.$error" ng-show="sugarcrmAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="sugarcrmAccountItemForm.option.$error"\n            ng-show="sugarcrmAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="sugarcrmAccountItemForm.content.$error"\n            ng-show="sugarcrmAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="sugarcrmAccountItemForm.variableName.$error"\n            ng-show="sugarcrmAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="sugarcrmAccountItemForm.type.$error" ng-show="sugarcrmAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="sugarcrmAccountItemForm.content.$error"\n          ng-show="sugarcrmAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="sugarcrmAccountItemForm.variableName.$error"\n          ng-show="sugarcrmAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/sugarcrmAccounts/edit/view.html",'<div id="integrations-sugarcrmAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-sugarcrmAccounts-button md-icon-button" aria-label="Go to sugarcrmAccounts" ng-click="vm.gotoSugarcrmAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_SUGARCRMACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="sugarcrmAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/sugarcrmAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.sugarcrmAccount.id}}\n                        <span ng-if="vm.sugarcrmAccount.name">{{vm.sugarcrmAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.sugarcrmAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveSugarcrmAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="sugarcrmAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.sugarcrmAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.sugarcrmAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.URI">Uri</label>\n                                <input type="url" name="remoteUri" ng-model="vm.sugarcrmAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.sugarcrmAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.sugarcrmAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.sugarcrmAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="sugarcrmAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="SugarcrmAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.sugarcrmAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditSugarcrmConfiguration($event)" class="md-icon-button" aria-label="create sugarcrmConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="sugarcrmConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedSugarcrmConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getSugarcrmConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ sugarcrmConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteSugarcrmConfiguration($event, sugarcrmConfiguration)" translate="INTEGRATIONS.DELETE_SUGARCRMCONFIGURATION">\n                                                        Delete SugarcrmConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditSugarcrmConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/sugarcrmAccounts/sugarcrmAccounts.html",'<div id="sugarcrmAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.SUGARCRMACCOUNTS">SugarcrmAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedSugarcrmAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedSugarcrmAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-sugarcrmAccounts-count">\n                    <span>{{vm.selectedSugarcrmAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SUGARCRMACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllSugarcrmAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectSugarcrmAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedSugarcrmAccounts" csv-label="true" filename="sugarcrmAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedSugarcrmAccounts($event)" aria-label="delete selected" translate translate-attr-label="SUGARCRMACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SUGARCRMACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedSugarcrmAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSugarcrmAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.URI\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.sugarcrmAccounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="sugarcrmAccount" md-select-id="id" ng-repeat="sugarcrmAccount in vm.sugarcrmAccounts.rows">\n                                <td md-cell ng-if="sugarcrmAccount.userpic"><img class="avatar" alt="{{sugarcrmAccount.name}}" ng-src="api/users/{{sugarcrmAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!sugarcrmAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{sugarcrmAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(sugarcrmAccount, ev) : vm.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="id ">{{sugarcrmAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(sugarcrmAccount, ev) : vm.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="name ">{{sugarcrmAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(sugarcrmAccount, ev) : vm.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="username ">{{sugarcrmAccount.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(sugarcrmAccount, ev) : vm.createOrEditSugarcrmAccount($event, sugarcrmAccount)" md-cell class="remoteUri ">{{sugarcrmAccount.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(sugarcrmAccount, $event    )" translate="INTEGRATIONS.EDIT_SUGARCRMACCOUNT">\n                                                    Edit SugarcrmAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(sugarcrmAccount, $event    )" translate="INTEGRATIONS.TEST_SUGARCRMACCOUNT">\n                                                    Test SugarcrmAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(sugarcrmAccount, $event    )" translate="INTEGRATIONS.DELETE_SUGARCRMACCOUNT">\n                                                    Delete SugarcrmAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.sugarcrmAccounts.count}}" md-on-paginate="vm.getSugarcrmAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SUGARCRMACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD SUGARCRMACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-sugarcrmAccount-button" ng-click="vm.createOrEditSugarcrmAccount($event)" aria-label="add sugarcrmAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_SUGARCRMACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD SUGARCRMACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/vtigerAccounts/create/dialog.html",'<md-dialog class="vtigerAccount-dialog" aria-label="New VtigerAccount">\n    <form name="vtigerAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.vtigerAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="vtigerAccountForm[\'name\'].$error" ng-show="vtigerAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.vtigerAccount.description">\n\n                <div ng-messages="vtigerAccountForm[\'description\'].$error" ng-show="vtigerAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.VTIGER_USER_NAME">vTiger_User_Name</label>\n                <input type="text" name="username" ng-model="vm.vtigerAccount.username" ng-required="true">\n\n                <div ng-messages="vtigerAccountForm[\'username\'].$error" ng-show="vtigerAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.VTIGER_USER_NAME_REQUIRED">vTiger_User_Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.ACCESS_KEY">Access_Key</label>\n                <input type="text" name="accessKey" ng-model="vm.vtigerAccount.accessKey" ng-required="true">\n\n                <div ng-messages="vtigerAccountForm[\'accessKey\'].$error" ng-show="vtigerAccountForm[\'accessKey\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.ACCESS_KEY_REQUIRED">Access_Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.HOST">Host</label>\n                <input type="url" name="remoteUri" ng-model="vm.vtigerAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="vtigerAccountForm[\'remoteUri\'].$error" ng-show="vtigerAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.HOST_REQUIRED">Host field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.HOST_MUST_VALID_URL">Host must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.vtigerAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="vtigerAccountForm[\'serverUrl\'].$error" ng-show="vtigerAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVtigerAccount" ng-click="vm.saveVtigerAccount()" class="send-button md-accent md-raised" ng-disabled="vtigerAccountForm.$invalid || vtigerAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVtigerAccount" ng-click="vm.addNewVtigerAccount()" class="send-button md-accent md-raised" ng-disabled="vtigerAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_VTIGERACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_VTIGERACCOUNT">\n                    ADD VTIGERACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVtigerAccount" ng-click="vm.deleteVtigerAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/vtigerAccounts/edit/configurations/dialog.html",'<md-dialog class="vtigerConfiguration-dialog" aria-label="New VtigerConfiguration">\n    <form name="vtigerConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.vtigerConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="vtigerConfigurationForm[\'name\'].$error" ng-show="vtigerConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.vtigerConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="vtigerConfigurationForm[\'channel\'].$error" ng-show="vtigerConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.vtigerConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="vtigerConfigurationForm[\'type\'].$error" ng-show="vtigerConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVtigerConfiguration" ng-click="vm.saveVtigerConfiguration()" class="send-button md-accent md-raised" ng-disabled="vtigerConfigurationForm.$invalid || vtigerConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVtigerConfiguration" ng-click="vm.addNewVtigerConfiguration()" class="send-button md-accent md-raised" ng-disabled="vtigerConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_VTIGERCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_VTIGERCONFIGURATION">\n                    ADD VTIGERCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVtigerConfiguration" ng-click="vm.deleteVtigerConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/vtigerAccounts/edit/item/dialog.html",'<md-dialog class="vtigerAccount-item-dialog" aria-label="New Item">\n    <form name="vtigerAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="vtigerAccountItemForm.type.$error" ng-show="vtigerAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="vtigerAccountItemForm.content.$error" ng-show="vtigerAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="vtigerAccountItemForm.key.$error" ng-show="vtigerAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="vtigerAccountItemForm.keyType.$error" ng-show="vtigerAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="vtigerAccountItemForm.keyContent.$error" ng-show="vtigerAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="vtigerAccountItemForm.variableName.$error" ng-show="vtigerAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="vtigerAccountItemForm.customField.$error" ng-show="vtigerAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="vtigerAccountItemForm.$invalid || vtigerAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="vtigerAccountItemForm.$invalid || vtigerAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="vtigerAccountItemForm.type.$error" ng-show="vtigerAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="vtigerAccountItemForm.option.$error"\n            ng-show="vtigerAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="vtigerAccountItemForm.content.$error"\n            ng-show="vtigerAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="vtigerAccountItemForm.variableName.$error"\n            ng-show="vtigerAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="vtigerAccountItemForm.type.$error" ng-show="vtigerAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="vtigerAccountItemForm.content.$error"\n          ng-show="vtigerAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="vtigerAccountItemForm.variableName.$error"\n          ng-show="vtigerAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/vtigerAccounts/edit/view.html",'<div id="integrations-vtigerAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-vtigerAccounts-button md-icon-button" aria-label="Go to vtigerAccounts" ng-click="vm.gotoVtigerAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_VTIGERACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="vtigerAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/vtigerAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.vtigerAccount.id}}\n                        <span ng-if="vm.vtigerAccount.name">{{vm.vtigerAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.vtigerAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveVtigerAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="vtigerAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.vtigerAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.vtigerAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.VTIGER_USER_NAME">vTiger_User_Name</label>\n                                <input type="text" name="username" ng-model="vm.vtigerAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.VTIGER_USER_NAME_REQUIRED">vTiger_User_Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.ACCESS_KEY">Access_Key</label>\n                                <input type="text" name="accessKey" ng-model="vm.vtigerAccount.accessKey" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'accessKey\'].$error" ng-show="generalForm[\'accessKey\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.ACCESS_KEY_REQUIRED">Access_Key field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.HOST">Host</label>\n                                <input type="url" name="remoteUri" ng-model="vm.vtigerAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.HOST_REQUIRED">Host field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.HOST_MUST_VALID_URL">Host must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.vtigerAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="vtigerAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="VtigerAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.vtigerAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditVtigerConfiguration($event)" class="md-icon-button" aria-label="create vtigerConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="vtigerConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedVtigerConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getVtigerConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ vtigerConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteVtigerConfiguration($event, vtigerConfiguration)" translate="INTEGRATIONS.DELETE_VTIGERCONFIGURATION">\n                                                        Delete VtigerConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditVtigerConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/vtigerAccounts/vtigerAccounts.html",'<div id="vtigerAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.VTIGERACCOUNTS">VtigerAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedVtigerAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedVtigerAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-vtigerAccounts-count">\n                    <span>{{vm.selectedVtigerAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="VTIGERACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllVtigerAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectVtigerAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedVtigerAccounts" csv-label="true" filename="vtigerAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedVtigerAccounts($event)" aria-label="delete selected" translate translate-attr-label="VTIGERACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- VTIGERACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedVtigerAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVtigerAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.VTIGER_USER_NAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.HOST\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.vtigerAccounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="vtigerAccount" md-select-id="id" ng-repeat="vtigerAccount in vm.vtigerAccounts.rows">\n                                <td md-cell ng-if="vtigerAccount.userpic"><img class="avatar" alt="{{vtigerAccount.name}}" ng-src="api/users/{{vtigerAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!vtigerAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{vtigerAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(vtigerAccount, ev) : vm.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="id ">{{vtigerAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(vtigerAccount, ev) : vm.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="name ">{{vtigerAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(vtigerAccount, ev) : vm.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="username ">{{vtigerAccount.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(vtigerAccount, ev) : vm.createOrEditVtigerAccount($event, vtigerAccount)" md-cell class="remoteUri ">{{vtigerAccount.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(vtigerAccount, $event    )" translate="INTEGRATIONS.EDIT_VTIGERACCOUNT">\n                                                    Edit VtigerAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(vtigerAccount, $event    )" translate="INTEGRATIONS.TEST_VTIGERACCOUNT">\n                                                    Test VtigerAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(vtigerAccount, $event    )" translate="INTEGRATIONS.DELETE_VTIGERACCOUNT">\n                                                    Delete VtigerAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.vtigerAccounts.count}}" md-on-paginate="vm.getVtigerAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / VTIGERACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD VTIGERACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-vtigerAccount-button" ng-click="vm.createOrEditVtigerAccount($event)" aria-label="add vtigerAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_VTIGERACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD VTIGERACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/zendeskAccounts/create/dialog.html",'<md-dialog class="zendeskAccount-dialog" aria-label="New ZendeskAccount">\n    <form name="zendeskAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.zendeskAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="zendeskAccountForm[\'name\'].$error" ng-show="zendeskAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.zendeskAccount.type" required>\n\n                    <md-option ng-value="\'integrationTab\'"> {{ \'INTEGRATIONS.INTEGRATION_TAB\' | translate }} </md-option>\n\n                    <md-option ng-value="\'newTab\'"> {{ \'INTEGRATIONS.NEW_TAB\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="zendeskAccountForm[\'type\'].$error" ng-show="zendeskAccountForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.zendeskAccount.username" ng-required="true">\n\n                <div ng-messages="zendeskAccountForm[\'username\'].$error" ng-show="zendeskAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.URI">Uri</label>\n                <input type="url" name="remoteUri" ng-model="vm.zendeskAccount.remoteUri" ng-required="true">\n\n                <div ng-messages="zendeskAccountForm[\'remoteUri\'].$error" ng-show="zendeskAccountForm[\'remoteUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.AUTHTYPE">AuthType</label>\n                <md-select name="authType" ng-model="vm.zendeskAccount.authType" required>\n                    <md-option ng-value="\'password\'">Password</md-option>\n                    <md-option ng-value="\'token\'">Token</md-option>\n                </md-select>\n                <div ng-messages="zendeskAccountForm[\'authType\'].$error" ng-show="zendeskAccountForm[\'authType\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.AUTHTYPE_REQUIRED">AuthType field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.zendeskAccount.authType == \'password\'">\n                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.zendeskAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                <div ng-messages="zendeskAccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container ng-if="vm.zendeskAccount.authType == \'token\'" class="md-block">\n                <label translate="INTEGRATIONS.TOKEN">Token</label>\n                <input type="text" name="token" ng-model="vm.zendeskAccount.token" ng-required="true">\n\n                <div ng-messages="zendeskAccountForm[\'token\'].$error" ng-show="zendeskAccountForm[\'token\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TOKEN_REQUIRED">Token field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.zendeskAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="zendeskAccountForm[\'serverUrl\'].$error" ng-show="zendeskAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.zendeskAccount.description">\n\n                <div ng-messages="zendeskAccountForm[\'description\'].$error" ng-show="zendeskAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newZendeskAccount" ng-click="vm.saveZendeskAccount()" class="send-button md-accent md-raised" ng-disabled="zendeskAccountForm.$invalid || zendeskAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newZendeskAccount" ng-click="vm.addNewZendeskAccount()" class="send-button md-accent md-raised" ng-disabled="zendeskAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_ZENDESKACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_ZENDESKACCOUNT">\n                    ADD ZENDESKACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newZendeskAccount" ng-click="vm.deleteZendeskAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/zendeskAccounts/edit/item/dialog.html",'<md-dialog class="zendeskAccount-item-dialog" aria-label="New Item">\n    <form name="zendeskAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="zendeskAccountItemForm.type.$error" ng-show="zendeskAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="zendeskAccountItemForm.content.$error" ng-show="zendeskAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="zendeskAccountItemForm.key.$error" ng-show="zendeskAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="zendeskAccountItemForm.keyType.$error" ng-show="zendeskAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="zendeskAccountItemForm.keyContent.$error" ng-show="zendeskAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="zendeskAccountItemForm.variableName.$error" ng-show="zendeskAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="zendeskAccountItemForm.customField.$error" ng-show="zendeskAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="zendeskAccountItemForm.$invalid || zendeskAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="zendeskAccountItemForm.$invalid || zendeskAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="zendeskAccountItemForm.type.$error" ng-show="zendeskAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="zendeskAccountItemForm.option.$error"\n            ng-show="zendeskAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="zendeskAccountItemForm.content.$error"\n            ng-show="zendeskAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="zendeskAccountItemForm.variableName.$error"\n            ng-show="zendeskAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="zendeskAccountItemForm.type.$error" ng-show="zendeskAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="zendeskAccountItemForm.content.$error"\n          ng-show="zendeskAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="zendeskAccountItemForm.variableName.$error"\n          ng-show="zendeskAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/zendeskAccounts/edit/view.html",'<div id="integrations-zendeskAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-zendeskAccounts-button md-icon-button" aria-label="Go to zendeskAccounts" ng-click="vm.gotoZendeskAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_ZENDESKACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="zendeskAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/zendeskAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.zendeskAccount.id}}\n                        <span ng-if="vm.zendeskAccount.name">{{vm.zendeskAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.zendeskAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveZendeskAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (zendeskConfigurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="zendeskAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.zendeskAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.TYPE">Type</label>\n                                <md-select name="type" ng-model="vm.zendeskAccount.type" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'integrationTab\'"> {{ \'INTEGRATIONS.INTEGRATION_TAB\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'newTab\'"> {{ \'INTEGRATIONS.NEW_TAB\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.zendeskAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.URI">Uri</label>\n                                <input type="url" name="remoteUri" ng-model="vm.zendeskAccount.remoteUri" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'remoteUri\'].$error" ng-show="generalForm[\'remoteUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.AUTHTYPE">AuthType</label>\n                                <md-select name="authType" ng-model="vm.zendeskAccount.authType" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'password\'">Password</md-option>\n                                    <md-option ng-value="\'token\'">Token</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'authType\'].$error" ng-show="generalForm[\'authType\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.AUTHTYPE_REQUIRED">AuthType field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block" ng-if="vm.zendeskAccount.authType == \'password\'">\n                                <label translate="INTEGRATIONS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.zendeskAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="INTEGRATIONS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container ng-if="vm.zendeskAccount.authType == \'token\'" class="md-block">\n                                <label translate="INTEGRATIONS.TOKEN">Token</label>\n                                <input type="text" name="token" ng-model="vm.zendeskAccount.token" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'token\'].$error" ng-show="generalForm[\'token\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.TOKEN_REQUIRED">Token field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.zendeskAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.zendeskAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="zendeskAccount-detail-form-container zendeskconfigurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.ZENDESKCONFIGURATIONS">ZENDESKCONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="ZendeskAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.zendeskAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditZendeskConfiguration($event)" class="md-icon-button" aria-label="create zendeskConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="zendeskConfiguration in vm_cc.zendeskConfigurations" class="border-top" md-colors="{background: (vm_cc.selectedZendeskConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getZendeskConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ zendeskConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteZendeskConfiguration($event, zendeskConfiguration)" translate="INTEGRATIONS.DELETE_ZENDESKCONFIGURATION">\n                                                        Delete ZendeskConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.zendeskConfigurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.TAGS">TAGS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-table-container class="md-whiteframe-1dp padding-20">\n                                                <md-input-container class="md-block">\n                                                    <label translate="INTEGRATIONS.TAGS">Tags</label>\n                                                    <md-select ng-model="vm_cc.selectedTags" ng-change="vm_cc.selectTagsChanged($event)" multiple>\n                                                        <md-option ng-value="tag.id" ng-repeat="tag in vm_cc.tags">{{ tag.name }}</md-option>\n                                                    </md-select>\n                                                </md-input-container>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.zendeskConfigurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditZendeskConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/zendeskAccounts/edit/zendeskConfigurations/dialog.html",'<md-dialog class="zendeskConfiguration-dialog" aria-label="New ZendeskConfiguration">\n    <form name="zendeskConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.zendeskConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="zendeskConfigurationForm[\'name\'].$error" ng-show="zendeskConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.zendeskConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="zendeskConfigurationForm[\'channel\'].$error" ng-show="zendeskConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.zendeskConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="zendeskConfigurationForm[\'type\'].$error" ng-show="zendeskConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newZendeskConfiguration" ng-click="vm.saveZendeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="zendeskConfigurationForm.$invalid || zendeskConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newZendeskConfiguration" ng-click="vm.addNewZendeskConfiguration()" class="send-button md-accent md-raised" ng-disabled="zendeskConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_ZENDESKCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_ZENDESKCONFIGURATION">\n                    ADD ZENDESKCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newZendeskConfiguration" ng-click="vm.deleteZendeskConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/zendeskAccounts/zendeskAccounts.html",'<div id="zendeskAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.ZENDESKACCOUNTS">ZendeskAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedZendeskAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedZendeskAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-zendeskAccounts-count">\n                    <span>{{vm.selectedZendeskAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="ZENDESKACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllZendeskAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectZendeskAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedZendeskAccounts" csv-label="true" filename="zendeskAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedZendeskAccounts($event)" aria-label="delete selected" translate translate-attr-label="ZENDESKACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- ZENDESKACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedZendeskAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getZendeskAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="username">{{ \'INTEGRATIONS.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="remoteUri">{{ \'INTEGRATIONS.URI\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.zendeskAccounts.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="zendeskAccount" md-select-id="id" ng-repeat="zendeskAccount in vm.zendeskAccounts.rows">\n                                <td md-cell ng-if="zendeskAccount.userpic"><img class="avatar" alt="{{zendeskAccount.name}}" ng-src="api/users/{{zendeskAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!zendeskAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{zendeskAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zendeskAccount, ev) : vm.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="id ">{{zendeskAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zendeskAccount, ev) : vm.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="name ">{{zendeskAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zendeskAccount, ev) : vm.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="username ">{{zendeskAccount.username}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zendeskAccount, ev) : vm.createOrEditZendeskAccount($event, zendeskAccount)" md-cell class="remoteUri ">{{zendeskAccount.remoteUri}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(zendeskAccount, $event    )" translate="INTEGRATIONS.EDIT_ZENDESKACCOUNT">\n                                                    Edit ZendeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(zendeskAccount, $event    )" translate="INTEGRATIONS.TEST_ZENDESKACCOUNT">\n                                                    Test ZendeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(zendeskAccount, $event    )" translate="INTEGRATIONS.DELETE_ZENDESKACCOUNT">\n                                                    Delete ZendeskAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.zendeskAccounts.count}}" md-on-paginate="vm.getZendeskAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / ZENDESKACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD ZENDESKACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-zendeskAccount-button" ng-click="vm.createOrEditZendeskAccount($event)" aria-label="add zendeskAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_ZENDESKACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD ZENDESKACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/integrations/views/zohoAccounts/create/dialog.html",'<md-dialog class="zohoAccount-dialog" aria-label="New ZohoAccount">\n    <form name="zohoAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.zohoAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="zohoAccountForm[\'name\'].$error" ng-show="zohoAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.HOST">Host</label>\n                <md-select name="host" ng-model="vm.zohoAccount.host" required>\n                    <md-option ng-value="\'zoho.com\'">zoho.com</md-option>\n                    <md-option ng-value="\'zoho.eu\'">zoho.eu</md-option>\n                </md-select>\n                <div ng-messages="zohoAccountForm[\'host\'].$error" ng-show="zohoAccountForm[\'host\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.HOST_REQUIRED">Host field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.AUTHTOKEN">AuthToken</label>\n                <input type="text" name="authToken" ng-model="vm.zohoAccount.authToken" ng-required="true">\n\n                <div ng-messages="zohoAccountForm[\'authToken\'].$error" ng-show="zohoAccountForm[\'authToken\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.AUTHTOKEN_REQUIRED">AuthToken field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                <input type="url" name="serverUrl" ng-model="vm.zohoAccount.serverUrl">\n\n                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                <div ng-messages="zohoAccountForm[\'serverUrl\'].$error" ng-show="zohoAccountForm[\'serverUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.zohoAccount.description">\n\n                <div ng-messages="zohoAccountForm[\'description\'].$error" ng-show="zohoAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newZohoAccount" ng-click="vm.saveZohoAccount()" class="send-button md-accent md-raised" ng-disabled="zohoAccountForm.$invalid || zohoAccountForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newZohoAccount" ng-click="vm.addNewZohoAccount()" class="send-button md-accent md-raised" ng-disabled="zohoAccountForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_ZOHOACCOUNT" translate-attr-aria-label="INTEGRATIONS.ADD_ZOHOACCOUNT">\n                    ADD ZOHOACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newZohoAccount" ng-click="vm.deleteZohoAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/zohoAccounts/edit/configurations/dialog.html",'<md-dialog class="zohoConfiguration-dialog" aria-label="New ZohoConfiguration">\n    <form name="zohoConfigurationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.zohoConfiguration.name" ng-required="true" autofocus>\n\n                <div ng-messages="zohoConfigurationForm[\'name\'].$error" ng-show="zohoConfigurationForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.zohoConfiguration.channel" required>\n\n                    <md-option ng-value="\'voice\'"> {{ \'INTEGRATIONS.VOICE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="zohoConfigurationForm[\'channel\'].$error" ng-show="zohoConfigurationForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="INTEGRATIONS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.zohoConfiguration.type" required>\n\n                    <md-option ng-value="\'inbound\'"> {{ \'INTEGRATIONS.INBOUND_IN_QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'outbound\'"> {{ \'INTEGRATIONS.OUTBOUND_CALL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="zohoConfigurationForm[\'type\'].$error" ng-show="zohoConfigurationForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newZohoConfiguration" ng-click="vm.saveZohoConfiguration()" class="send-button md-accent md-raised" ng-disabled="zohoConfigurationForm.$invalid || zohoConfigurationForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newZohoConfiguration" ng-click="vm.addNewZohoConfiguration()" class="send-button md-accent md-raised" ng-disabled="zohoConfigurationForm.$invalid" aria-label="ADD" translate="INTEGRATIONS.ADD_ZOHOCONFIGURATION" translate-attr-aria-label="INTEGRATIONS.ADD_ZOHOCONFIGURATION">\n                    ADD ZOHOCONFIGURATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newZohoConfiguration" ng-click="vm.deleteZohoConfiguration($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/integrations/views/zohoAccounts/edit/item/dialog.html",'<md-dialog class="zohoAccount-item-dialog" aria-label="New Item">\n    <form name="zohoAccountItemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div ng-switch="vm.type">\n                <div ng-switch-when="subject">\n                    \x3c!-- SUBJECT SECTION --\x3e\n                    <div ng-include="\'/subject.html\'"></div>\n                    \x3c!-- / SUBJECT SECTION --\x3e\n                </div>\n                <div ng-switch-when="description">\n                    \x3c!-- DESCRIPTION SECTION --\x3e\n                    <md-input-container class="md-block">\n                        <label translate="INTEGRATIONS.TYPE">Type</label>\n                        <md-select name="type" ng-model="vm.item.type" required>\n                            <md-option value="string">String</md-option>\n                            <md-option value="keyValue">Key Value</md-option>\n                        </md-select>\n                        <div ng-messages="zohoAccountItemForm.type.$error" ng-show="zohoAccountItemForm.type.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                    required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n                        <label translate="INTEGRATIONS.CONTENT">Content</label>\n                        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n                        <div ng-messages="zohoAccountItemForm.content.$error" ng-show="zohoAccountItemForm.content.$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field\n                                    is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <div ng-if="vm.item.type == \'keyValue\'">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.KEY">Key</label>\n                            <input type="text" name="key" ng-model="vm.item.key" required md-autofocus>\n                            <div ng-messages="zohoAccountItemForm.key.$error" ng-show="zohoAccountItemForm.key.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.KEY_REQUIRED">Key field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.TYPE">Type</label>\n                            <md-select name="keyType" ng-model="vm.item.keyType" required>\n                                <md-option value="string">String</md-option>\n                                <md-option value="variable">Variable</md-option>\n                                <md-option value="customVariable">Custom Variable</md-option>\n                            </md-select>\n                            <div ng-messages="zohoAccountItemForm.keyType.$error" ng-show="zohoAccountItemForm.keyType.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'string\'">\n                            <label translate="INTEGRATIONS.CONTENT">Content</label>\n                            <input type="text" name="keyContent" ng-model="vm.item.keyContent" required md-autofocus>\n                            <div ng-messages="zohoAccountItemForm.keyContent.$error" ng-show="zohoAccountItemForm.keyContent.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content\n                                        field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'variable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()" required>\n                                <md-optgroup label="Voice: Queue">\n                                    <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                                    </md-option>\n                                </md-optgroup>\n                                <md-optgroup label="Voice: Outbound">\n                                    <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}</md-option>\n                                </md-optgroup>\n                            </md-select>\n                            <div ng-messages="zohoAccountItemForm.variableName.$error" ng-show="zohoAccountItemForm.variableName.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable\n                                        name field is required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        <md-input-container class="md-block" ng-if="vm.item.keyType == \'customVariable\'">\n                            <label translate="INTEGRATIONS.VALUE">Value</label>\n                            <md-select ng-model="vm.item.VariableId" required>\n                                <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}\n                                </md-option>\n                            </md-select>\n                        </md-input-container>\n                    </div>\n                    \x3c!-- / DESCRIPTION SECTION --\x3e\n                </div>\n                <div ng-switch-when="field">\n                    \x3c!-- FIELD SECTION --\x3e\n                    <div ng-if="vm.accountConnected">\n                        <md-input-container class="md-block">\n                            <label translate="INTEGRATIONS.FIELD">FIELD</label>\n                            \x3c!-- ITEM TYPE DEFAULT VALUE is STRING --\x3e\n                            <md-select name="customField" ng-model="vm.customField" required ng-change="vm.item.type = \'string\'">\n\n                                <md-optgroup label="Standard">\n                                    <md-option ng-value="standard" ng-repeat="standard in vm.fields | filter: {custom: false} ">{{standard.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                                <md-optgroup label="Custom">\n                                    <md-option ng-value="custom" ng-repeat="custom in vm.fields | filter: {custom: true} ">{{custom.name}}\n                                    </md-option>\n                                </md-optgroup>\n\n                            </md-select>\n                            <div ng-messages="zohoAccountItemForm.customField.$error" ng-show="zohoAccountItemForm.customField.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="INTEGRATIONS.ERRORS.FIELD_REQUIRED">Field is\n                                        required</span>\n                                </div>\n                            </div>\n                        </md-input-container>\n\n                        \x3c!-- FIELDS --\x3e\n                        <div ng-if="vm.customField" ng-include="\'/fields.html\'"></div>\n                        \x3c!-- FIELDS --\x3e\n\n                    </div>\n                    <div ng-if="!vm.accountConnected">\n                        <p>Account is not connected. Please check your configurations!</p>\n                    </div>\n                    \x3c!-- / FIELD SECTION --\x3e\n                </div>\n                <div ng-switch-default>\n                    <p>No Item</p>\n                </div>\n            </div>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newItem" ng-click="vm.saveItem()" class="send-button md-accent md-raised" ng-disabled="zohoAccountItemForm.$invalid || zohoAccountItemForm.$pristine" aria-label="SAVE" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newItem" ng-click="vm.addNewItem()" class="send-button md-accent md-raised" ng-disabled="zohoAccountItemForm.$invalid || zohoAccountItemForm.$pristine" aria-label="ADD" translate="INTEGRATIONS.ADD" translate-attr-aria-label="INTEGRATIONS.ADD">\n                    ADD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newItem" ng-click="vm.deleteItem($event)" aria-label="DELETE" translate translate-attr-aria-label="INTEGRATIONS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="INTEGRATIONS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>\n\n<script type="text/ng-template" id="/fields.html">\n\n    \x3c!-- type --\x3e\n    <md-input-container class="md-block" ng-if="!vm.customField.options.length">\n\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n        <md-select name="type" ng-model="vm.item.type" required>\n\n            <md-option value="string">String</md-option>\n            <md-option value="variable">Variable</md-option>\n            <md-option value="customVariable">Custom Variable</md-option>\n        </md-select>\n        <div ng-messages="zohoAccountItemForm.type.$error" ng-show="zohoAccountItemForm.type.$touched"\n            role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    \x3c!--/ type --\x3e\n\n    \x3c!-- value --\x3e\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && vm.customField.options.length">\n        \x3c!-- options --\x3e\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <md-select name="option" ng-model="vm.item.content" required>\n            <md-option ng-value="option.value" ng-repeat="option in vm.customField.options">{{option.name}}</md-option>\n        </md-select>\n\n        <div ng-messages="zohoAccountItemForm.option.$error"\n            ng-show="zohoAccountItemForm.option.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'string\' && !vm.customField.options.length">\n        <label translate="INTEGRATIONS.CONTENT">Content</label>\n\n        <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n\n        <div ng-messages="zohoAccountItemForm.content.$error"\n            ng-show="zohoAccountItemForm.content.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n            required>\n            <md-optgroup label="Voice: Queue">\n                <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n                </md-option>\n            </md-optgroup>\n            <md-optgroup label="Voice: Outbound">\n                <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n                </md-option>\n            </md-optgroup>\n        </md-select>\n        <div ng-messages="zohoAccountItemForm.variableName.$error"\n            ng-show="zohoAccountItemForm.variableName.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                    required</span>\n            </div>\n        </div>\n    </md-input-container>\n\n    <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n        <label translate="INTEGRATIONS.VALUE">Value</label>\n        <md-select ng-model="vm.item.VariableId" required>\n            <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n        </md-select>\n    </md-input-container>\n\n    \x3c!--/ value --\x3e\n\n<\/script>\n\n<script type="text/ng-template" id="/subject.html">\n    <md-input-container class="md-block">\n        <label translate="INTEGRATIONS.TYPE">Type</label>\n            <md-select name="type" ng-model="vm.item.type" required>\n                <md-option value="string">String</md-option>\n                <md-option value="variable">Variable</md-option>\n                <md-option value="customVariable">Custom Variable</md-option>\n            </md-select>\n        <div ng-messages="zohoAccountItemForm.type.$error" ng-show="zohoAccountItemForm.type.$touched" role="alert">\n            <div ng-message="required">\n                <span translate="INTEGRATIONS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n             </div>\n        </div>\n  </md-input-container>\n  \n  <md-input-container class="md-block" ng-if="vm.item.type == \'string\'">\n      <label translate="INTEGRATIONS.CONTENT">Content</label>\n      <input type="text" name="content" ng-model="vm.item.content" required md-autofocus>\n      <div ng-messages="zohoAccountItemForm.content.$error"\n          ng-show="zohoAccountItemForm.content.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.CONTENT_REQUIRED">Content field is required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'variable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select name="variableName" ng-model="vm.item.variableName" md-selected-text="vm.getSelectedVariable()"\n          required>\n          <md-optgroup label="Voice: Queue">\n              <md-option ng-value="agentColumn" ng-repeat="agentColumn in vm.voiceAgentReportColumns">{{agentColumn}}\n              </md-option>\n          </md-optgroup>\n          <md-optgroup label="Voice: Outbound">\n              <md-option ng-value="dialColumn" ng-repeat="dialColumn in vm.voiceDialReportColumns">{{dialColumn}}\n              </md-option>\n          </md-optgroup>\n      </md-select>\n      <div ng-messages="zohoAccountItemForm.variableName.$error"\n          ng-show="zohoAccountItemForm.variableName.$touched" role="alert">\n          <div ng-message="required">\n              <span translate="INTEGRATIONS.ERRORS.VARIABLENAME_REQUIRED">Variable name field is\n                  required</span>\n          </div>\n      </div>\n  </md-input-container>\n\n  <md-input-container class="md-block" ng-if="vm.item.type == \'customVariable\'">\n      <label translate="INTEGRATIONS.VALUE">Value</label>\n      <md-select ng-model="vm.item.VariableId" required>\n          <md-option ng-value="variable.id" ng-repeat="variable in vm.variables">{{variable.name}}</md-option>\n      </md-select>\n  </md-input-container>\n  <\/script>'),e.put("app/main/apps/integrations/views/zohoAccounts/edit/view.html",'<div id="integrations-zohoAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-zohoAccounts-button md-icon-button" aria-label="Go to zohoAccounts" ng-click="vm.gotoZohoAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_ZOHOACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="zohoAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/zohoAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.zohoAccount.id}}\n                        <span ng-if="vm.zohoAccount.name">{{vm.zohoAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.zohoAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveZohoAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="zohoAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.zohoAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.HOST">Host</label>\n                                <md-select name="host" ng-model="vm.zohoAccount.host" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'zoho.com\'">zoho.com</md-option>\n                                    <md-option ng-value="\'zoho.eu\'">zoho.eu</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'host\'].$error" ng-show="generalForm[\'host\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.HOST_REQUIRED">Host field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.AUTHTOKEN">AuthToken</label>\n                                <input type="text" name="authToken" ng-model="vm.zohoAccount.authToken" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'authToken\'].$error" ng-show="generalForm[\'authToken\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.AUTHTOKEN_REQUIRED">AuthToken field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>\n                                <input type="url" name="serverUrl" ng-model="vm.zohoAccount.serverUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>\n                                <div ng-messages="generalForm[\'serverUrl\'].$error" ng-show="generalForm[\'serverUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="INTEGRATIONS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.zohoAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="zohoAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>\n                        </div>\n                        <div ng-controller="ZohoAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.zohoAccount, vm.crudPermissions)" layout="row">\n                            <md-card class="md-whiteframe-1dp" flex="30">\n                                <div layout="row" layout-align="center center">\n                                    <md-subheader flex="75" class="md-no-sticky">{{ \'INTEGRATIONS.CONFIGURATIONS\' | translate }}</md-subheader>\n                                    <md-button flex="25" ng-if="vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditZohoConfiguration($event)" class="md-icon-button" aria-label="create zohoConfiguration">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                                <md-list>\n                                    <md-list-item layout="row" layout-align="center center" ng-repeat="zohoConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedZohoConfiguration == $index ? \'accent\' : \'grey-A100\')}" ng-click="vm_cc.getZohoConfiguration($index)">\n                                        <span class="text-truncate" flex="80">{{ zohoConfiguration.name }}</span>\n                                        <md-menu ng-if="vm_cc.crudPermissions.canDelete">\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_cc.deleteZohoConfiguration($event, zohoConfiguration)" translate="INTEGRATIONS.DELETE_ZOHOCONFIGURATION">\n                                                        Delete ZohoConfiguration\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </md-list-item>\n                                </md-list>\n                            </md-card>\n                            <div flex></div>\n                            <md-card class="md-whiteframe-1dp" flex="65">\n                                <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">\n                                                                <span ng-if="subject.FieldId">{{subject.nameField || subject.idField}}</span>\n                                                                <span ng-if="!subject.FieldId">{{subject.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>\n                                                                <span ng-switch-when="string">{{subject.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{subject.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{subject.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{subject.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">\n                                                                                Edit Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">\n                                                                                Delete Subject\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">\n                                                                <span ng-if="description.FieldId">{{description.nameField || description.idField}}</span>\n                                                                <span ng-if="!description.FieldId">{{description.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>\n                                                                <span ng-switch-when="string">{{description.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{description.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{description.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{description.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">\n                                                                                Edit Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">\n                                                                                Delete Description\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n                                    <md-tab>\n                                        <md-tab-label>\n                                            <span translate="INTEGRATIONS.FIELDS">FIELDS</span>\n                                        </md-tab-label>\n                                        <md-tab-body>\n                                            <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <div flex></div>\n                                                    <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">\n                                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">\n                                                <div class="md-toolbar-tools">\n                                                    <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                                    <div flex></div>\n                                                    <md-button ng-if="vm_cc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">\n                                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                                    </md-button>\n                                                </div>\n                                            </md-toolbar>\n                                            <md-table-container class="md-whiteframe-1dp padding-horizontal">\n                                                <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">\n                                                    <thead md-head>\n                                                        <tr md-row>\n                                                            <th md-column>{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.TYPE\' | translate }}</th>\n                                                            <th md-column>{{ \'INTEGRATIONS.CONTENT\' | translate }}</th>\n                                                            <th md-column width="10px"></th>\n                                                        </tr>\n                                                    </thead>\n                                                    <tbody md-body>\n                                                        <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>\n                                                            <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">\n                                                                <span ng-if="field.FieldId">{{field.nameField || field.idField}}</span>\n                                                                <span ng-if="!field.FieldId">{{field.type}}</span>\n                                                            </td>\n                                                            <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>\n                                                                <span ng-switch-when="string">{{field.content}}</span>\n                                                                <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                <span ng-switch-when="keyValue">\n                                                                    {{field.key}}\n                                                                    <span ng-switch="description.keyType">\n                                                                        <span ng-switch-when="string">{{field.keyContent}}</span>\n                                                                        <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>\n                                                                        <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>\n                                                                    </span>\n                                                                </span>\n                                                                <span ng-switch-default>{{field.content}}</span>\n                                                            </td>\n                                                            <td md-cell class="actions" ng-if="!vm_cc.crudPermissions.readOnly">\n                                                                <md-menu>\n                                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                                    </md-button>\n\n                                                                    <md-menu-content width="3">\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canEdit">\n                                                                            <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">\n                                                                                Edit Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                        <md-menu-item ng-if="vm_cc.crudPermissions.canDelete">\n                                                                            <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">\n                                                                                Delete Field\n                                                                            </md-button>\n                                                                        </md-menu-item>\n                                                                    </md-menu-content>\n                                                                </md-menu>\n                                                            </td>\n                                                        </tr>\n                                                    </tbody>\n                                                </table>\n                                            </md-table-container>\n                                        </md-tab-body>\n                                    </md-tab>\n\n\n                                </md-tabs>\n                                <div class="padding-20" ng-if="!vm_cc.configurations.length && vm_cc.crudPermissions.canEdit" ng-click="vm_cc.createOrEditZohoConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>\n                                    <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">\n                                        <md-button class="md-icon-button">\n                                            <md-icon md-font-icon="icon-plus"></md-icon>\n                                        </md-button>\n                                        <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>\n                                    </div>\n                                </div>\n                            </md-card>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/integrations/views/zohoAccounts/zohoAccounts.html",'<div id="zohoAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-heart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="INTEGRATIONS.ZOHOACCOUNTS">ZohoAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="INTEGRATIONS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedZohoAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedZohoAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="INTEGRATIONS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-zohoAccounts-count">\n                    <span>{{vm.selectedZohoAccounts.length}}</span>\n                    <span translate="INTEGRATIONS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="ZOHOACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllZohoAccounts()" translate="INTEGRATIONS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectZohoAccounts()" translate="INTEGRATIONS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedZohoAccounts" csv-label="true" filename="zohoAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedZohoAccounts($event)" aria-label="delete selected" translate translate-attr-label="ZOHOACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- ZOHOACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedZohoAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getZohoAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'INTEGRATIONS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'INTEGRATIONS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="host">{{ \'INTEGRATIONS.HOST\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.zohoAccounts.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="INTEGRATIONS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="zohoAccount" md-select-id="id" ng-repeat="zohoAccount in vm.zohoAccounts.rows">\n                                <td md-cell ng-if="zohoAccount.userpic"><img class="avatar" alt="{{zohoAccount.name}}" ng-src="api/users/{{zohoAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!zohoAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{zohoAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zohoAccount, ev) : vm.createOrEditZohoAccount($event, zohoAccount)" md-cell class="id ">{{zohoAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zohoAccount, ev) : vm.createOrEditZohoAccount($event, zohoAccount)" md-cell class="name ">{{zohoAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(zohoAccount, ev) : vm.createOrEditZohoAccount($event, zohoAccount)" md-cell class="host ">{{ vm.arrayhost[zohoAccount.host].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(zohoAccount, $event    )" translate="INTEGRATIONS.EDIT_ZOHOACCOUNT">\n                                                    Edit ZohoAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.testtestintegrationaccount(zohoAccount, $event    )" translate="INTEGRATIONS.TEST_ZOHOACCOUNT">\n                                                    Test ZohoAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(zohoAccount, $event    )" translate="INTEGRATIONS.DELETE_ZOHOACCOUNT">\n                                                    Delete ZohoAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'INTEGRATIONS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'INTEGRATIONS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'INTEGRATIONS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.zohoAccounts.count}}" md-on-paginate="vm.getZohoAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / ZOHOACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD ZOHOACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-zohoAccount-button" ng-click="vm.createOrEditZohoAccount($event)" aria-label="add zohoAccount" translate translate-attr-aria-label="INTEGRATIONS.ADD_ZOHOACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD ZOHOACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/jscripty/views/projects/create/dialog.html",'<md-dialog class="project-dialog" aria-label="New Project">\n    <form name="projectForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="JSCRIPTY.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.project.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newProject">\n\n                <div class="hint"><span translate="JSCRIPTY.HELP.NAME"></span></div>\n                <div ng-messages="projectForm[\'name\'].$error" ng-show="projectForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="JSCRIPTY.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="JSCRIPTY.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="JSCRIPTY.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.project.description">\n\n                <div ng-messages="projectForm[\'description\'].$error" ng-show="projectForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="JSCRIPTY.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newProject" ng-click="vm.saveProject()" class="send-button md-accent md-raised" ng-disabled="projectForm.$invalid || projectForm.$pristine" aria-label="SAVE" translate="JSCRIPTY.SAVE" translate-attr-aria-label="JSCRIPTY.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newProject" ng-click="vm.addNewProject()" class="send-button md-accent md-raised" ng-disabled="projectForm.$invalid" aria-label="ADD" translate="JSCRIPTY.ADD_PROJECT" translate-attr-aria-label="JSCRIPTY.ADD_PROJECT">\n                    ADD PROJECT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newProject" ng-click="vm.deleteProject($event)" aria-label="DELETE" translate translate-attr-aria-label="JSCRIPTY.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="JSCRIPTY.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/jscripty/views/projects/edit/clone/clone.html",'<md-dialog class="project-dialog" aria-label="Clone Project">\n    <form name="projectForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="JSCRIPTY.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.project.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newProject">\n\n                <div class="hint"><span translate="JSCRIPTY.HELP.NAME"></span></div>\n                <div ng-messages="projectForm[\'name\'].$error" ng-show="projectForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="JSCRIPTY.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="JSCRIPTY.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <md-button type="submit" ng-click="vm.cloneProject()" class="send-button md-accent md-raised" ng-disabled="projectForm.$invalid" aria-label="CLONE" translate="JSCRIPTY.CLONE_PROJECT" translate-attr-aria-label="JSCRIPTY.CLONE_PROJECT">\n                CLONE PROJECT\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/jscripty/views/projects/edit/sessions/dialog.html",'<md-dialog class="session-dialog" aria-label="New Session">\n    <form name="sessionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <md-list>\n                <md-subheader class="md-no-sticky">\n                    <div class="margin-bottom-5"><span translate="JSCRIPTY.ANSWERS">Answers</span></div>\n                    <div class="subtitle secondary-text">\n                        <span translate="JSCRIPTY.STARTTIME" class="ng-scope font-weight-700">Start Time</span>: <span class="ng-binding">{{vm.session.starttime | date:\'medium\'}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="JSCRIPTY.MEMBERNAME" class="ng-scope font-weight-700">Member Name</span>: <span class="ng-binding">{{vm.session.membername}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="JSCRIPTY.PROJECT" class="ng-scope font-weight-700">Project</span>: <span class="ng-binding">{{vm.project.name}}</span>\n                    </div>\n                </md-subheader>\n                <md-list-item ng-if="vm.questions.rows.length" class="md-2-line contact-item" ng-repeat="question in vm.questions.rows">\n                    <div class="md-list-item-text compact">\n                        <h3>{{$index+1}}. {{question.question}}</h3>\n                        <p>{{question.answer}}</p>\n                    </div>\n                    <md-divider ng-if="!$last"></md-divider>\n                </md-list-item>\n                <md-list-item ng-if="!vm.questions.rows.length" class="md-2-line contact-item">\n                    <div class="md-list-item-text compact">\n                        <h3><span class="text-boxed-ligth" translate="JSCRIPTY.NO_RESULTS_AVAILABLE">No results available</span></h3>\n                    </div>\n                </md-list-item>\n            </md-list>\n\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/main/apps/jscripty/views/projects/edit/view.html",'<div id="jscripty-project" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-projects-button md-icon-button" aria-label="Go to projects" ng-click="vm.gotoProjects()" translate translate-attr-aria-label="JSCRIPTY.GO_TO_PROJECTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="project-image" hide-xs>\n                    <img ng-src="assets/images/business/projects.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.project.id}}\n                        <span ng-if="vm.project.name">{{vm.project.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="JSCRIPTY.CREATED_AT"></span> <span>{{vm.project.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.clonedialog(vm.project, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="clone">\n                <md-tooltip><span translate="JSCRIPTY.CLONE_PROJECT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveProject()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (builderForm.$invalid) || (previewForm.$invalid) || (sessionsForm.$invalid) || (answersForm.$invalid)" translate="JSCRIPTY.SAVE" translate-attr-aria-label="JSCRIPTY.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="JSCRIPTY.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="project-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="JSCRIPTY.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="JSCRIPTY.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.project.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="JSCRIPTY.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="JSCRIPTY.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="JSCRIPTY.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.project.enableUncompleteSave" aria-label="EnableUncompleteSave" ng-disabled="!vm.crudPermissions.canEdit"><span translate="JSCRIPTY.ENABLEUNCOMPLETESAVE">EnableUncompleteSave</span></md-switch>\n\n                                <div class="hint"><span translate="JSCRIPTY.HELP.ENABLEUNCOMPLETESAVE"></span></div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="JSCRIPTY.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.project.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="JSCRIPTY.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="JSCRIPTY.BUILDER">BUILDER</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="project-detail-form-container builder md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ProjectBuilderController as vm_bc" ng-init="vm_bc.init(vm.project)">\n                            <mw-form-builder ng-if="vm_bc.project.formData" form-data="vm_bc.project.formData" options="vm_bc.optionsBuilder" read-only="false"></mw-form-builder>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="JSCRIPTY.PREVIEW">PREVIEW</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="project-detail-form-container preview md-background-bg md-whiteframe-1dp">\n                        <div layout="column" layout-align="center" ng-controller="ProjectViewerController as vm_vc" ng-init="vm_vc.init(vm.project)">\n                            <div layout="row" layout-align="center">\n                                <md-button class="md-raised md-accent" aria-label="Reset" ng-click="vm_vc.resetViewer()">\n                                    Reset\n                                </md-button>\n                            </div>\n                            <mw-form-viewer ng-if="vm_vc.project.formData" form-data="vm_vc.project.formData" response-data="vm_vc.responseData" on-submit="vm_vc.onSubmit($event)" api="vm_vc.formViewer"></mw-form-viewer>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="JSCRIPTY.SESSIONS">SESSIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="project-detail-form-container sessions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ProjectSessionsController as vm_dc" ng-init="vm_dc.init(vm.project, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedProjectSessions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="JSCRIPTY.SESSIONS">Sessions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedProjectSessions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedProjectSessions.length}} {{vm_dc.selectedProjectSessions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedProjectSessions" csv-label="true" filename="projects.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedProjectSessions($event)" aria-label="delete selected" translate translate-attr-label="PROJECTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedProjectSessions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getProjectSessions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'JSCRIPTY.ID\' | translate }}</th>\n                                            <th md-column md-order-by="starttime">{{ \'JSCRIPTY.STARTTIME\' | translate }}</th>\n                                            <th md-column md-order-by="endtime">{{ \'JSCRIPTY.ENDTIME\' | translate }}</th>\n                                            <th md-column md-order-by="membername">{{ \'JSCRIPTY.MEMBERNAME\' | translate }}</th>\n                                            <th md-column md-order-by="calleridnum">{{ \'JSCRIPTY.CALLERIDNUM\' | translate }}</th>\n                                            <th md-column md-order-by="completed">{{ \'JSCRIPTY.COMPLETE\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="session" md-select-id="id" ng-repeat="session in vm_dc.projectSessions.rows">\n                                            <td md-cell>{{session.id}}</td>\n                                            <td md-cell>{{session.starttime | date:\'medium\'}}</td>\n                                            <td md-cell>{{session.endtime | date:\'medium\'}}</td>\n                                            <td md-cell>{{session.membername}}</td>\n                                            <td md-cell>{{session.calleridnum}}</td>\n                                            <td md-cell class="completed ">\n                                                <md-icon md-colors="{color: {{session.completed ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{session.completed? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                            </td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="JSCRIPTY.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_dc.showQuestionsProjectSession($event, session)" translate="JSCRIPTY.SHOW_QUESTIONS_SESSION">\n                                                                Results Session\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(session, $event)" translate="JSCRIPTY.DELETE_SESSION">\n                                                                Delete Session\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.projectSessions.rows.length">\n                                            <td md-cell colspan="8">\n                                                <span class="text-boxed-ligth" translate="JSCRIPTY.NO_SESSION_AVAILABLE">No session available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'JSCRIPTY.PAGE\' | translate}}:\', rowsPerPage: \'{{\'JSCRIPTY.ROWSPERPAGE\' | translate}}:\', of: \'{{\'JSCRIPTY.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.projectSessions.count}}" md-on-paginate="vm_dc.getProjectSessions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="JSCRIPTY.ANSWERS">ANSWERS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="project-detail-form-container answers md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="ProjectAnswersController as vm_an" ng-init="vm_an.init(vm.project)">\n                            <div class="pb-16" layout="row" layout-align="space-between center">\n                                <div class="h2 secondary-text" translate="JSCRIPTY.ANSWERS">Answers</div>\n                                <md-date-range localization-map="vm_an.localizationMap" ng-model="vm_an.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm_an.getAnswers()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                                <md-button type="button" ng-disabled="!vm_an.answers" ng-click="vm_an.getSummary($event)" class="md-accent md-raised md-button ng-scope md-default-theme md-ink-ripple md-green-500-bg md-icon-button" title="{{\'JSCRIPTY.EXPORT_TO_CSV\' | translate}}">\n                                    <md-icon md-font-icon="icon-file-excel" class="md-default-theme md-font material-icons icon-file-excel"></md-icon>\n                                </md-button>\n                            </div>\n                            <div layout="row">\n                                <md-card class="md-whiteframe-1dp" ng-if="vm_an.answers && vm_an.hasIdAnswers" flex>\n                                    <md-list>\n                                        <md-list-item class="md-2-line contact-item" ng-repeat="(key, question) in vm_an.answers">\n                                            <div class="md-list-item-text compact" layout-padding>\n                                                <h3>{{question.question}}</h3>\n                                                <md-table-container>\n                                                    <table md-table>\n                                                        <thead md-head>\n                                                            <tr md-row>\n                                                                <th md-column></th>\n                                                                <th md-column>#</th>\n                                                                <th md-column>%</th>\n                                                            </tr>\n                                                        </thead>\n                                                        <tbody md-body>\n                                                            <tr md-row ng-repeat="(key, value) in question.answers">\n                                                                <td md-cell>{{key}}</td>\n                                                                <td md-cell width="20px">{{value}}</td>\n                                                                <td md-cell width="20px">{{value*100/question.sum | number:1}}</td>\n                                                            </tr>\n                                                            <tr md-row>\n                                                                <td md-cell><b>{{\'JSCRIPTY.TOTAL\' | translate}}</b></td>\n                                                                <td md-cell width="20px"><b>{{question.sum}}</b></td>\n                                                                <td md-cell width="20px"><b>100</b></td>\n                                                            </tr>\n                                                        </tbody>\n                                                    </table>\n                                                </md-table-container>\n                                            </div>\n                                            <md-divider ng-if="!$last"></md-divider>\n                                        </md-list-item>\n                                    </md-list>\n                                </md-card>\n                                <span ng-if="!vm_an.answers || !vm_an.hasIdAnswers" class="text-boxed-ligth" translate="JSCRIPTY.NO_ANSWERS_AVAILABLE">No answers available</span>\n                            </div>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/jscripty/views/projects/projects.html",'<div id="projects" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-script" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="JSCRIPTY.PROJECTS">Projects</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="JSCRIPTY.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedProjects.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedProjects =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="JSCRIPTY.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-projects-count">\n                    <span>{{vm.selectedProjects.length}}</span>\n                    <span translate="JSCRIPTY.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="PROJECTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllProjects()" translate="JSCRIPTY.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectProjects()" translate="JSCRIPTY.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedProjects" csv-label="true" filename="projects.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedProjects($event)" aria-label="delete selected" translate translate-attr-label="PROJECTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- PROJECT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedProjects" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getProjects">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'JSCRIPTY.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'JSCRIPTY.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'JSCRIPTY.DESCRIPTION\' | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ \'JSCRIPTY.CREATED_AT\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.projects.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="JSCRIPTY.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="project" md-select-id="id" ng-repeat="project in vm.projects.rows">\n                                <td md-cell ng-if="project.userpic"><img class="avatar" alt="{{project.name}}" ng-src="api/users/{{project.id}}/avatar" /></td>\n                                <td md-cell ng-if="!project.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{project.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="id ">{{project.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="name ">{{project.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="description ">{{project.description}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(project, ev) : vm.createOrEditProject($event, project)" md-cell class="createdAt ">{{project.createdAt | date:\'medium\' }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="JSCRIPTY.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(project, $event    )" translate="JSCRIPTY.EDIT_PROJECT">\n                                                    Edit Project\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.clonedialog(project, $event    )" translate="JSCRIPTY.CLONE_PROJECT">\n                                                    clone Project\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.sessionsgoto(project, $event    )" translate="JSCRIPTY.SESSIONS_PROJECT">\n                                                    Sessions Project\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(project, $event    )" translate="JSCRIPTY.DELETE_PROJECT">\n                                                    Delete Project\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'JSCRIPTY.PAGE\' | translate}}:\', rowsPerPage: \'{{\'JSCRIPTY.ROWSPERPAGE\' | translate}}:\', of: \'{{\'JSCRIPTY.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.projects.count}}" md-on-paginate="vm.getProjects" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / PROJECT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD PROJECT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-project-button" ng-click="vm.createOrEditProject($event)" aria-label="add project" translate translate-attr-aria-label="JSCRIPTY.ADD_PROJECT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD PROJECT BUTTON --\x3e\n</div>'),e.put("app/main/apps/mail/views/mailAccounts/create/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.mailAccount.name" ng-required="true" autofocus>\n\n                <div ng-messages="mailAccountForm[\'name\'].$error" ng-show="mailAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.KEY">key</label>\n                <input type="text" name="key" ng-model="vm.mailAccount.key" md-maxlength="5" ng-required="true">\n\n                <div ng-messages="mailAccountForm[\'key\'].$error" ng-show="mailAccountForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.KEY_REQUIRED">key field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="MAIL.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.EMAIL_ADDRESS">Email_Address</label>\n                <input type="email" name="email" ng-model="vm.mailAccount.email" ng-required="true">\n\n                <div ng-messages="mailAccountForm[\'email\'].$error" ng-show="mailAccountForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.EMAIL_ADDRESS_REQUIRED">Email_Address field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="MAIL.ERRORS.EMAIL_ADDRESS_MUST_VALID">Email_Address must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.LIST">List</label>\n                <md-select name="ListId" ng-model="vm.mailAccount.ListId" required>\n                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                </md-select>\n                <div ng-messages="mailAccountForm[\'ListId\'].$error" ng-show="mailAccountForm[\'ListId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.mailAccount.active" aria-label="Active"><span translate="MAIL.ACTIVE">Active</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.newMailAccount" class="md-block">\n                <label translate="MAIL.SERVICE">Service</label>\n                <md-select name="cservice" ng-model="vm.mailAccount.cservice" required>\n                    <md-option ng-value="null">Custom</md-option>\n                    <md-option ng-value="\'gmail\'">Gmail</md-option>\n                    <md-option ng-value="\'hotmail\'">Hotmail</md-option>\n                    <md-option ng-value="\'yahoo\'">Yahoo</md-option>\n                    <md-option ng-value="\'outlook365\'">Outlook365</md-option>\n                </md-select>\n                <div ng-messages="mailAccountForm[\'cservice\'].$error" ng-show="mailAccountForm[\'cservice\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.SERVICE_REQUIRED">Service field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Imap.service == null)" class="md-block">\n                <label translate="MAIL.IMAP_HOST">IMAP_Host</label>\n                <input type="text" name="Imap.host" ng-model="vm.mailAccount.Imap.host" ng-required="true">\n\n                <div ng-messages="mailAccountForm[\'Imap.host\'].$error" ng-show="mailAccountForm[\'Imap.host\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.IMAP_HOST_REQUIRED">IMAP_Host field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Imap.service == null)" class="md-block">\n                <label translate="MAIL.IMAP_PORT">IMAP_Port</label>\n                <input type="number" name="Imap.port" ng-model="vm.mailAccount.Imap.port" ng-required="true">\n\n                <div ng-messages="mailAccountForm[\'Imap.port\'].$error" ng-show="mailAccountForm[\'Imap.port\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.IMAP_PORT_REQUIRED">IMAP_Port field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Smtp.service == null)" class="md-block">\n                <label translate="MAIL.SMTP_HOST">SMTP_Host</label>\n                <input type="text" name="Smtp.host" ng-model="vm.mailAccount.Smtp.host" ng-required="true">\n\n                <div ng-messages="mailAccountForm[\'Smtp.host\'].$error" ng-show="mailAccountForm[\'Smtp.host\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.SMTP_HOST_REQUIRED">SMTP_Host field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Smtp.service == null)" class="md-block">\n                <label translate="MAIL.SMTP_PORT">SMTP_Port</label>\n                <input type="number" name="Smtp.port" ng-model="vm.mailAccount.Smtp.port" ng-required="true">\n\n                <div ng-messages="mailAccountForm[\'Smtp.port\'].$error" ng-show="mailAccountForm[\'Smtp.port\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.SMTP_PORT_REQUIRED">SMTP_Port field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.mailAccount.cservice !== undefined && vm.mailAccount.cservice == null && vm.newMailAccount" class="md-block">\n                <md-switch ng-model="vm.mailAccount.cauthentication" aria-label="Authentication"><span translate="MAIL.AUTHENTICATION">Authentication</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="(vm.mailAccount.cauthentication == true || vm.mailAccount.cservice != null) && vm.newMailAccount" class="md-block">\n                <label translate="MAIL.USERNAME">Username</label>\n                <input type="text" name="cuser" ng-model="vm.mailAccount.cuser" ng-required="true">\n\n                <div class="hint"><span translate="MAIL.HELP.USERNAME"></span></div>\n                <div ng-messages="mailAccountForm[\'cuser\'].$error" ng-show="mailAccountForm[\'cuser\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="(vm.mailAccount.cauthentication == true || vm.mailAccount.cservice != null) && vm.newMailAccount">\n                <label translate="MAIL.PASSWORD">Password</label>\n                <input type="password" name="cpassword" ng-model="vm.mailAccount.cpassword" placeholder="Password" translate translate-attr-placeholder="MAIL.PASSWORD" required>\n                <div class="hint"><span translate="MAIL.HELP.PASSWORD"></span></div>\n                <div ng-messages="mailAccountForm[\'cpassword\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="MAIL.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="MAIL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.mailAccount.description">\n\n                <div ng-messages="mailAccountForm[\'description\'].$error" ng-show="mailAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMailAccount" ng-click="vm.saveMailAccount()" class="send-button md-accent md-raised" ng-disabled="mailAccountForm.$invalid || mailAccountForm.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMailAccount" ng-click="vm.addNewMailAccount()" class="send-button md-accent md-raised" ng-disabled="mailAccountForm.$invalid" aria-label="ADD" translate="MAIL.ADD_MAILACCOUNT" translate-attr-aria-label="MAIL.ADD_MAILACCOUNT">\n                    ADD MAILACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMailAccount" ng-click="vm.deleteMailAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="MAIL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MAIL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/agentadd/agentadd.html",'<md-dialog class="mailAccount-dialog" aria-label="mailAccount" ng-init="vm.onInit()">\n    <form name="mailAccountForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MAIL.AGENTADD_MAILACCOUNT">Add Agent to mailAccount</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/agent/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.AGENT">Agent</label>\n                <md-select name="agent" ng-model="vm.agent.agent" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents" ng-disabled="agent.canSelect === false">{{ agent.name }}</md-option>\n                </md-select>\n                <div ng-messages="mailAccountFormApp[\'agent\'].$error" ng-show="mailAccountFormApp[\'agent\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.agent.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'timeout\'].$error" ng-show="mailAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MAIL.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MAIL.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/autoreply/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.TIMES">times</label>\n                <md-select name="times" ng-model="vm.autoreply.times" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="1">One Time</md-option>\n                    <md-option ng-value="0">Always</md-option>\n                </md-select>\n                <div ng-messages="mailAccountFormApp[\'times\'].$error" ng-show="mailAccountFormApp[\'times\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.TIMES_REQUIRED">times field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="md-block">\n                <label class="md-caption grey-fg" translate="MAIL.TEXT">Text</label>\n                <textarea aria-label="Text text" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.autoreply.text"></textarea>\n            </div>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/close/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.DISPOSITION">Disposition</label>\n                <input type="text" name="disposition" ng-model="vm.close.disposition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'disposition\'].$error" ng-show="mailAccountFormApp[\'disposition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.DISPOSITION_REQUIRED">Disposition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/gotoif/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.CONDITION">Condition</label>\n                <input type="text" name="condition" ng-model="vm.gotoif.condition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'condition\'].$error" ng-show="mailAccountFormApp[\'condition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.CONDITION_REQUIRED">Condition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.TRUEPRIORITY">truepriority</label>\n                <input type="number" name="truepriority" ng-model="vm.gotoif.truepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'truepriority\'].$error" ng-show="mailAccountFormApp[\'truepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.TRUEPRIORITY_REQUIRED">truepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MAIL.ERRORS.TRUEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">truepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.FALSEPRIORITY">falsepriority</label>\n                <input type="number" name="falsepriority" ng-model="vm.gotoif.falsepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'falsepriority\'].$error" ng-show="mailAccountFormApp[\'falsepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.FALSEPRIORITY_REQUIRED">falsepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MAIL.ERRORS.FALSEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">falsepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/gotop/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.PRIORITY">Priority</label>\n                <input type="number" name="priority" ng-model="vm.gotop.priority" min="0" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'priority\'].$error" ng-show="mailAccountFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MAIL.ERRORS.PRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Priority must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/noop/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.noop.value" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'value\'].$error" ng-show="mailAccountFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/queue/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="mailAccountFormApp[\'queue\'].$error" ng-show="mailAccountFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'timeout\'].$error" ng-show="mailAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MAIL.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MAIL.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/system/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.COMMAND">Command</label>\n                <input type="text" name="command" ng-model="vm.system.command" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="mailAccountFormApp[\'command\'].$error" ng-show="mailAccountFormApp[\'command\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.COMMAND_REQUIRED">Command field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.VARIABLE">Variable</label>\n                <md-select name="variable" ng-model="vm.system.variable" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables" ng-disabled="variable.canSelect === false">{{ variable.name }}</md-option>\n                </md-select>\n                <div ng-messages="mailAccountFormApp[\'variable\'].$error" ng-show="mailAccountFormApp[\'variable\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/apps/tag/dialog.html",'<md-dialog class="mailAccount-dialog" aria-label="New MailAccount">\n    <form name="mailAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.TAG">Tag</label>\n                <md-select name="tag" ng-model="vm.tag.tag" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags" ng-disabled="tag.canSelect === false">{{ tag.name }}</md-option>\n                </md-select>\n                <div ng-messages="mailAccountFormApp[\'tag\'].$error" ng-show="mailAccountFormApp[\'tag\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.TAG_REQUIRED">Tag field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveMailAccountApp()" class="send-button md-accent md-raised" ng-disabled="mailAccountFormApp.$invalid || mailAccountFormApp.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/mailCannedAnswers/dialog.html",'<md-dialog class="mailCannedAnswer-dialog" aria-label="New MailCannedAnswer">\n    <form name="mailCannedAnswerForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.KEY">Key</label>\n                <input type="" name="key" ng-model="vm.mailCannedAnswer.key" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="mailCannedAnswerForm[\'key\'].$error" ng-show="mailCannedAnswerForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="md-block">\n                <label class="md-caption grey-fg" translate="MAIL.VALUE">Value</label>\n                <textarea aria-label="Value value" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.mailCannedAnswer.value"></textarea>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.mailCannedAnswer.description">\n\n                <div ng-messages="mailCannedAnswerForm[\'description\'].$error" ng-show="mailCannedAnswerForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMailCannedAnswer" ng-click="vm.saveMailCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="mailCannedAnswerForm.$invalid || mailCannedAnswerForm.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMailCannedAnswer" ng-click="vm.addNewMailCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="mailCannedAnswerForm.$invalid" aria-label="ADD" translate="MAIL.ADD_MAILCANNEDANSWER" translate-attr-aria-label="MAIL.ADD_MAILCANNEDANSWER">\n                    ADD MAILCANNEDANSWER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMailCannedAnswer" ng-click="vm.deleteMailCannedAnswer($event)" aria-label="DELETE" translate translate-attr-aria-label="MAIL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MAIL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/mailDispositions/dialog.html",'<md-dialog class="mailDisposition-dialog" aria-label="New MailDisposition">\n    <form name="mailDispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.mailDisposition.name" ng-required="true" autofocus>\n\n                <div ng-messages="mailDispositionForm[\'name\'].$error" ng-show="mailDispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMailDisposition" ng-click="vm.saveMailDisposition()" class="send-button md-accent md-raised" ng-disabled="mailDispositionForm.$invalid || mailDispositionForm.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMailDisposition" ng-click="vm.addNewMailDisposition()" class="send-button md-accent md-raised" ng-disabled="mailDispositionForm.$invalid" aria-label="ADD" translate="MAIL.ADD_MAILDISPOSITION" translate-attr-aria-label="MAIL.ADD_MAILDISPOSITION">\n                    ADD MAILDISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMailDisposition" ng-click="vm.deleteMailDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="MAIL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MAIL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailAccounts/edit/view.html",'<div id="mail-mailAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-mailAccounts-button md-icon-button" aria-label="Go to mailAccounts" ng-click="vm.gotoMailAccounts()" translate translate-attr-aria-label="MAIL.GO_TO_MAILACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="mailAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/mailAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.mailAccount.id}}\n                        <span ng-if="vm.mailAccount.name">{{vm.mailAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="MAIL.CREATED_AT"></span> <span>{{vm.mailAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.mailAccount, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="MAIL.GOTO_MAILACCOUNT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-cast"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.mailAccount, $event)" class="md-fab md-warn md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="MAIL.AGENTADD_MAILACCOUNT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveMailAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (imapForm.$invalid) || (smtpForm.$invalid) || (dispositionForm.$invalid) || (mailDispositionsForm.$invalid) || (mailCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.mailAccount.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.KEY">key</label>\n                                <input type="text" name="key" ng-model="vm.mailAccount.key" md-maxlength="5" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'key\'].$error" ng-show="generalForm[\'key\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.KEY_REQUIRED">key field is required</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="MAIL.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.EMAIL_ADDRESS">Email_Address</label>\n                                <input type="email" name="email" ng-model="vm.mailAccount.email" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'email\'].$error" ng-show="generalForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.EMAIL_ADDRESS_REQUIRED">Email_Address field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="MAIL.ERRORS.EMAIL_ADDRESS_MUST_VALID">Email_Address must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.LIST">List</label>\n                                <md-select name="ListId" ng-model="vm.mailAccount.ListId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'ListId\'].$error" ng-show="generalForm[\'ListId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.LIST_REQUIRED">List field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.active" aria-label="Active" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.ACTIVE">Active</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.FONT_FAMILY">Font_Family</label>\n                                <ms-font-family name="fontFamily" ng-model="vm.mailAccount.fontFamily" required></ms-font-family>\n                                <div class="hint"><span translate="MAIL.HELP.FONT_FAMILY"></span></div>\n                                <div ng-messages="generalForm[\'fontFamily\'].$error" ng-show="generalForm[fontFamily].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.FONT_FAMILY_REQUIRED">Font_Family field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.FONT_SIZE">Font_Size</label>\n                                <input type="number" name="fontSize" ng-model="vm.mailAccount.fontSize" min="8" max="72" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MAIL.HELP.FONT_SIZE"></span></div>\n                                <div ng-messages="generalForm[\'fontSize\'].$error" ng-show="generalForm[\'fontSize\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.FONT_SIZE_REQUIRED">Font_Size field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.FONT_SIZE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Font_Size must be a valid greater or equal than</span> <span>8</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MAIL.ERRORS.FONT_SIZE_MUST_BE_LESS_THAN_OR_EQUAL_TO">Font_Size must be a valid greater or equal than</span> <span>72</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <div class="md-block">\n                                <label class="md-caption grey-fg" translate="MAIL.TEMPLATE">Template</label>\n                                <textarea aria-label="Template template" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.mailAccount.template"></textarea>\n                            </div>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.markAsUnread" aria-label="mark_as_unread" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.MARK_AS_UNREAD">mark_as_unread</span></md-switch>\n\n                                <div class="hint"><span translate="MAIL.HELP.MARK_AS_UNREAD"></span></div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.WAITFORTHEASSIGNEDAGENT">WaitForTheAssignedAgent</label>\n                                <input type="number" name="waitForTheAssignedAgent" ng-model="vm.mailAccount.waitForTheAssignedAgent" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'waitForTheAssignedAgent\'].$error" ng-show="generalForm[\'waitForTheAssignedAgent\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.WAITFORTHEASSIGNEDAGENT_REQUIRED">WaitForTheAssignedAgent field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MAIL.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_LESS_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.mailAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="mailAccount-detail-form-container notification md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.NOTIFICATION">NOTIFICATION</div>\n                        </div>\n                        <form name="notificationForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.notificationSound" aria-label="notificationSound" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.NOTIFICATIONSOUND">notificationSound</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.notificationShake" aria-label="notificationShake" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.NOTIFICATIONSHAKE">notificationShake</span></md-switch>\n\n                            </md-input-container>\n                            <div class="md-block">\n                                <label class="md-caption grey-fg" translate="MAIL.NOTIFICATIONTEMPLATE">notificationTemplate</label>\n                                <textarea aria-label="notificationTemplate notificationTemplate" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.mailAccount.notificationTemplate"></textarea>\n                            </div>\n\n                        </form>\n                    </div>\n                    <div class="mailAccount-detail-form-container transfer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.TRANSFER">TRANSFER</div>\n                        </div>\n                        <form name="transferForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.queueTransfer" aria-label="queueTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.QUEUETRANSFER">queueTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.queueTransfer == true" class="md-block">\n                                <label translate="MAIL.QUEUETRANSFERTIMEOUT">queueTransferTimeout</label>\n                                <input type="number" name="queueTransferTimeout" ng-model="vm.mailAccount.queueTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'queueTransferTimeout\'].$error" ng-show="transferForm[\'queueTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.QUEUETRANSFERTIMEOUT_REQUIRED">queueTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MAIL.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.agentTransfer" aria-label="agentTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.AGENTTRANSFER">agentTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.agentTransfer == true" class="md-block">\n                                <label translate="MAIL.AGENTTRANSFERTIMEOUT">agentTransferTimeout</label>\n                                <input type="number" name="agentTransferTimeout" ng-model="vm.mailAccount.agentTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'agentTransferTimeout\'].$error" ng-show="transferForm[\'agentTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.AGENTTRANSFERTIMEOUT_REQUIRED">agentTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MAIL.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.IMAP">IMAP</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container imap md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.IMAP">IMAP</div>\n                        </div>\n                        <form name="imapForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.SERVICE">Service</label>\n                                <md-select name="Imap.service" ng-model="vm.mailAccount.Imap.service" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Custom</md-option>\n                                    <md-option ng-value="\'gmail\'">Gmail</md-option>\n                                    <md-option ng-value="\'hotmail\'">Hotmail</md-option>\n                                    <md-option ng-value="\'yahoo\'">Yahoo</md-option>\n                                    <md-option ng-value="\'outlook365\'">Outlook365</md-option>\n                                </md-select>\n                                <div ng-messages="imapForm[\'Imap.service\'].$error" ng-show="imapForm[\'Imap.service\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.SERVICE_REQUIRED">Service field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Imap.service == null)" class="md-block">\n                                <label translate="MAIL.IMAP_HOST">IMAP_Host</label>\n                                <input type="text" name="Imap.host" ng-model="vm.mailAccount.Imap.host" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="imapForm[\'Imap.host\'].$error" ng-show="imapForm[\'Imap.host\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.IMAP_HOST_REQUIRED">IMAP_Host field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Imap.service == null)" class="md-block">\n                                <label translate="MAIL.IMAP_PORT">IMAP_Port</label>\n                                <input type="number" name="Imap.port" ng-model="vm.mailAccount.Imap.port" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="imapForm[\'Imap.port\'].$error" ng-show="imapForm[\'Imap.port\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.IMAP_PORT_REQUIRED">IMAP_Port field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.Imap.tls" aria-label="ssl" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.SSL">ssl</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.Imap.service == null" class="md-block">\n                                <md-switch ng-model="vm.mailAccount.Imap.authentication" aria-label="Authentication" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.AUTHENTICATION">Authentication</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.Imap.authentication == true || vm.mailAccount.Imap.service != null" class="md-block">\n                                <label translate="MAIL.USERNAME">Username</label>\n                                <input type="text" name="Imap.user" ng-model="vm.mailAccount.Imap.user" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MAIL.HELP.USERNAME"></span></div>\n                                <div ng-messages="imapForm[\'Imap.user\'].$error" ng-show="imapForm[\'Imap.user\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block" ng-if="vm.mailAccount.Imap.authentication == true || vm.mailAccount.Imap.service != null">\n                                <label translate="MAIL.PASSWORD">Password</label>\n                                <input type="password" name="Imap.password" ng-model="vm.mailAccount.Imap.password" placeholder="Password" translate translate-attr-placeholder="MAIL.PASSWORD" required>\n                                <div class="hint"><span translate="MAIL.HELP.PASSWORD"></span></div>\n                                <div ng-messages="imapForm[\'Imap.password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MAIL.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.MAILBOX">mailbox</label>\n                                <input type="text" name="Imap.mailbox" ng-model="vm.mailAccount.Imap.mailbox" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="imapForm[\'Imap.mailbox\'].$error" ng-show="imapForm[\'Imap.mailbox\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.MAILBOX_REQUIRED">mailbox field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.CONNTIMEOUT">connTimeout</label>\n                                <input type="number" name="Imap.connTimeout" ng-model="vm.mailAccount.Imap.connTimeout" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="imapForm[\'Imap.connTimeout\'].$error" ng-show="imapForm[\'Imap.connTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.CONNTIMEOUT_REQUIRED">connTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.CONNTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">connTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.AUTHTIMEOUT">authTimeout</label>\n                                <input type="number" name="Imap.authTimeout" ng-model="vm.mailAccount.Imap.authTimeout" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="imapForm[\'Imap.authTimeout\'].$error" ng-show="imapForm[\'Imap.authTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.AUTHTIMEOUT_REQUIRED">authTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.AUTHTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">authTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.SMTP">SMTP</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container smtp md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.SMTP">SMTP</div>\n                        </div>\n                        <form name="smtpForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.SERVICE">Service</label>\n                                <md-select name="Smtp.service" ng-model="vm.mailAccount.Smtp.service" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Custom</md-option>\n                                    <md-option ng-value="\'gmail\'">Gmail</md-option>\n                                    <md-option ng-value="\'hotmail\'">Hotmail</md-option>\n                                    <md-option ng-value="\'yahoo\'">Yahoo</md-option>\n                                    <md-option ng-value="\'outlook365\'">Outlook365</md-option>\n                                </md-select>\n                                <div ng-messages="smtpForm[\'Smtp.service\'].$error" ng-show="smtpForm[\'Smtp.service\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.SERVICE_REQUIRED">Service field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Smtp.service == null)" class="md-block">\n                                <label translate="MAIL.SMTP_HOST">SMTP_Host</label>\n                                <input type="text" name="Smtp.host" ng-model="vm.mailAccount.Smtp.host" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="smtpForm[\'Smtp.host\'].$error" ng-show="smtpForm[\'Smtp.host\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.SMTP_HOST_REQUIRED">SMTP_Host field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="(vm.newMailAccount && vm.mailAccount.cservice == null) || (vm.newMailAccount == undefined && vm.mailAccount.Smtp.service == null)" class="md-block">\n                                <label translate="MAIL.SMTP_PORT">SMTP_Port</label>\n                                <input type="number" name="Smtp.port" ng-model="vm.mailAccount.Smtp.port" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="smtpForm[\'Smtp.port\'].$error" ng-show="smtpForm[\'Smtp.port\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.SMTP_PORT_REQUIRED">SMTP_Port field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.Smtp.service == null" class="md-block">\n                                <md-switch ng-model="vm.mailAccount.Smtp.secure" aria-label="Secure" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.SECURE">Secure</span></md-switch>\n\n                                <div class="hint"><span translate="MAIL.HELP.SECURE"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.Smtp.service == null" class="md-block">\n                                <md-switch ng-model="vm.mailAccount.Smtp.authentication" aria-label="Authentication" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.AUTHENTICATION">Authentication</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.Smtp.authentication == true || vm.mailAccount.Smtp.service != null" class="md-block">\n                                <label translate="MAIL.USERNAME">Username</label>\n                                <input type="text" name="Smtp.user" ng-model="vm.mailAccount.Smtp.user" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MAIL.HELP.USERNAME"></span></div>\n                                <div ng-messages="smtpForm[\'Smtp.user\'].$error" ng-show="smtpForm[\'Smtp.user\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block" ng-if="vm.mailAccount.Smtp.authentication == true || vm.mailAccount.Smtp.service != null">\n                                <label translate="MAIL.PASSWORD">Password</label>\n                                <input type="password" name="Smtp.pass" ng-model="vm.mailAccount.Smtp.pass" placeholder="Password" translate translate-attr-placeholder="MAIL.PASSWORD" required>\n                                <div class="hint"><span translate="MAIL.HELP.PASSWORD"></span></div>\n                                <div ng-messages="smtpForm[\'Smtp.pass\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MAIL.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container disposition md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.DISPOSITION">DISPOSITION</div>\n                        </div>\n                        <form name="dispositionForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.mailAccount.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MAIL.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.mailAccount.mandatoryDisposition" class="md-block">\n                                <label translate="MAIL.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.mailAccount.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MAIL.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="dispositionForm[\'mandatoryDispositionPauseId\'].$error" ng-show="dispositionForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.DISPOSITIONS">DISPOSITIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container maildispositions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="MailAccountMailDispositionsController as vm_dc" ng-init="vm_dc.init(vm.mailAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedMailAccountMailDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="MAIL.MAILDISPOSITIONS">MailDispositions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditMailAccountMailDisposition($event)" aria-label="add mailDisposition" translate translate-attr-label="MAIL.ADD_MAILDISPOSITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedMailAccountMailDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedMailAccountMailDispositions.length}} {{vm_dc.selectedMailAccountMailDispositions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedMailAccountMailDispositions" csv-label="true" filename="mailAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedMailAccountMailDispositions($event)" aria-label="delete selected" translate translate-attr-label="MAILACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedMailAccountMailDispositions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getMailAccountMailDispositions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'MAIL.ID\' | translate }}</th>\n                                            <th md-column md-order-by="name">{{ \'MAIL.NAME\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'MAIL.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="mailDisposition" md-select-id="id" ng-repeat="mailDisposition in vm_dc.mailAccountMailDispositions.rows">\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailDisposition($event, mailDisposition)" md-cell>{{mailDisposition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailDisposition($event, mailDisposition)" md-cell>{{mailDisposition.name}}</td>\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailDisposition($event, mailDisposition)" md-cell>{{mailDisposition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditMailAccountMailDisposition($event, mailDisposition)" translate="MAIL.EDIT_MAILDISPOSITION">\n                                                                Edit MailDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(mailDisposition, $event)" translate="MAIL.DELETE_MAILDISPOSITION">\n                                                                Delete MailDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.mailAccountMailDispositions.rows.length">\n                                            <td md-cell colspan="5">\n                                                <span class="text-boxed-ligth" translate="MAIL.NO_MAILDISPOSITION_AVAILABLE">No maildisposition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.mailAccountMailDispositions.count}}" md-on-paginate="vm_dc.getMailAccountMailDispositions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.CANNEDANSWERS">CANNEDANSWERS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container mailcannedanswers md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="MailAccountMailCannedAnswersController as vm_dc" ng-init="vm_dc.init(vm.mailAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedMailAccountMailCannedAnswers.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="MAIL.MAILCANNEDANSWERS">MailCannedAnswers</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event)" aria-label="add mailCannedAnswer" translate translate-attr-label="MAIL.ADD_MAILCANNEDANSWER">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedMailAccountMailCannedAnswers.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedMailAccountMailCannedAnswers.length}} {{vm_dc.selectedMailAccountMailCannedAnswers.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedMailAccountMailCannedAnswers" csv-label="true" filename="mailAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedMailAccountMailCannedAnswers($event)" aria-label="delete selected" translate translate-attr-label="MAILACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedMailAccountMailCannedAnswers" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getMailAccountMailCannedAnswers">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'MAIL.ID\' | translate }}</th>\n                                            <th md-column md-order-by="key">{{ \'MAIL.KEY\' | translate }}</th>\n                                            <th md-column md-order-by="value">{{ \'MAIL.VALUE\' | translate }}</th>\n                                            <th md-column md-order-by="description">{{ \'MAIL.DESCRIPTION\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'MAIL.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="mailCannedAnswer" md-select-id="id" ng-repeat="mailCannedAnswer in vm_dc.mailAccountMailCannedAnswers.rows">\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event, mailCannedAnswer)" md-cell>{{mailCannedAnswer.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event, mailCannedAnswer)" md-cell>{{mailCannedAnswer.key}}</td>\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event, mailCannedAnswer)" md-cell>{{mailCannedAnswer.value | htmlToPlaintext }}</td>\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event, mailCannedAnswer)" md-cell>{{mailCannedAnswer.description}}</td>\n                                            <td ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event, mailCannedAnswer)" md-cell>{{mailCannedAnswer.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditMailAccountMailCannedAnswer($event, mailCannedAnswer)" translate="MAIL.EDIT_MAILCANNEDANSWER">\n                                                                Edit MailCannedAnswer\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(mailCannedAnswer, $event)" translate="MAIL.DELETE_MAILCANNEDANSWER">\n                                                                Delete MailCannedAnswer\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.mailAccountMailCannedAnswers.rows.length">\n                                            <td md-cell colspan="7">\n                                                <span class="text-boxed-ligth" translate="MAIL.NO_MAILCANNEDANSWER_AVAILABLE">No mailcannedanswer available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.mailAccountMailCannedAnswers.count}}" md-on-paginate="vm_dc.getMailAccountMailCannedAnswers" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="MailAccountActionsController as vm_ac" ng-init="vm_ac.init(vm.mailAccount, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="MAIL.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedMailAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedMailAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedMailAccountApps.length}} {{vm_ac.selectedMailAccountApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedMailAccountApps($event)" aria-label="delete selected" translate translate-attr-label="MAIL.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedMailAccountApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px">\n                                                    <span translate="VOICE.PRIORITY">Priority</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.mailAccountApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editMailAccountApp($event, $index)"><span>{{app.priority}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editMailAccountApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editMailAccountApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editMailAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.mailAccountApps.rows.length">\n                                                <td md-cell colspan="7">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.INTERACTIONS">INTERACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailAccount-detail-form-container interactions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="MailAccountInteractionsController as vm_dc" ng-init="vm_dc.init(vm.mailAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedMailAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="MAIL.INTERACTIONS">Interactions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm_dc.getMailAccountInteractions()" aria-label="refresh Interactions" translate translate-attr-label="MAIL.REFRESH_INTERACTIONS">\n                                        <md-icon md-font-icon="icon-refresh"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedMailAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedMailAccountInteractions.length}} {{vm_dc.selectedMailAccountInteractions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedMailAccountInteractions" csv-label="true" filename="mailAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedMailAccountInteractions($event)" aria-label="delete selected" translate translate-attr-label="MAILACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedMailAccountInteractions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getMailAccountInteractions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'MAIL.ID\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'MAIL.STARTEDAT\' | translate }}</th>\n                                            <th md-column>{{ \'MAIL.CONTACT\' | translate }}</th>\n                                            <th md-column>{{ \'MAIL.AGENT\' | translate }}</th>\n                                            <th md-column md-order-by="closedAt">{{ \'MAIL.CLOSEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="disposition">{{ \'MAIL.DISPOSITION\' | translate }}</th>\n                                            <th md-column md-order-by="note">{{ \'MAIL.NOTES\' | translate }}</th>\n                                            <th md-column md-order-by="tag">{{ \'MAIL.TAGS\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="interaction" md-select-id="id" ng-repeat="interaction in vm_dc.mailAccountInteractions.rows">\n                                            <td md-cell>{{interaction.id}}</td>\n                                            <td md-cell>{{interaction.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.Contact.firstName}}</td>\n                                            <td md-cell>{{interaction.Owner.name}}</td>\n                                            <td md-cell>{{interaction.closedAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.disposition}}</td>\n                                            <td md-cell>{{interaction.note}}</td>\n                                            <td md-cell>\n                                                <div ng-if="interaction.Tags.length">\n                                                    <md-tooltip md-direction="left" layout="row">\n                                                        <span ng-repeat="tag in interaction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                                    </md-tooltip>\n                                                    <md-icon md-font-icon="icon-tag"></md-icon>\n                                                </div>\n                                            </td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_dc.spymailInteraction($event, interaction)" translate="MAIL.SPYINTERACTION">\n                                                                Spy Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.mailInteractionDownload(interaction, $event, true)" translate="MAIL.DOWNLOAD_WITH_ATTACHMENTS">\n                                                                Download with attachments\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.mailInteractionDownload(interaction, $event)" translate="MAIL.DOWNLOAD_WITHOUT_ATTACHMENTS">\n                                                                Download without attachments\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(interaction, $event)" translate="MAIL.DELETE_INTERACTION">\n                                                                Delete Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.mailAccountInteractions.rows.length">\n                                            <td md-cell colspan="13">\n                                                <span class="text-boxed-ligth" translate="MAIL.NO_INTERACTION_AVAILABLE">No interaction available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.mailAccountInteractions.count}}" md-on-paginate="vm_dc.getMailAccountInteractions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/mail/views/mailAccounts/mailAccounts.html",'<div id="mailAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-email" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="MAIL.MAILACCOUNTS">MailAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="MAIL.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedMailAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedMailAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="MAIL.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-mailAccounts-count">\n                    <span>{{vm.selectedMailAccounts.length}}</span>\n                    <span translate="MAIL.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="MAILACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllMailAccounts()" translate="MAIL.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectMailAccounts()" translate="MAIL.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedMailAccounts" csv-label="true" filename="mailAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedMailAccounts($event)" aria-label="delete selected" translate translate-attr-label="MAILACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- MAILACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedMailAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMailAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'MAIL.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'MAIL.NAME\' | translate }}</th>\n                                <th md-column md-order-by="key">{{ \'MAIL.KEY\' | translate }}</th>\n                                <th md-column md-order-by="email">{{ \'MAIL.EMAIL_ADDRESS\' | translate }}</th>\n                                <th md-column md-order-by="active">{{ \'MAIL.ACTIVE\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'MAIL.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.mailAccounts.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="MAIL.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="mailAccount" md-select-id="id" ng-repeat="mailAccount in vm.mailAccounts.rows">\n                                <td md-cell ng-if="mailAccount.userpic"><img class="avatar" alt="{{mailAccount.name}}" ng-src="api/users/{{mailAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!mailAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{mailAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailAccount, ev) : vm.createOrEditMailAccount($event, mailAccount)" md-cell class="id ">{{mailAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailAccount, ev) : vm.createOrEditMailAccount($event, mailAccount)" md-cell class="name ">{{mailAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailAccount, ev) : vm.createOrEditMailAccount($event, mailAccount)" md-cell class="key ">{{mailAccount.key}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailAccount, ev) : vm.createOrEditMailAccount($event, mailAccount)" md-cell class="email ">{{mailAccount.email}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailAccount, ev) : vm.createOrEditMailAccount($event, mailAccount)" md-cell class="active ">\n                                    <md-icon md-colors="{color: {{mailAccount.active ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{mailAccount.active ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailAccount, ev) : vm.createOrEditMailAccount($event, mailAccount)" md-cell class="description ">{{mailAccount.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(mailAccount, $event    )" translate="MAIL.EDIT_MAILACCOUNT">\n                                                    Edit MailAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.verifysmtpverifysmtp(mailAccount, $event    )" translate="MAIL.VERIFYSMTP_MAILACCOUNT">\n                                                    verifysmtp MailAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.interactionsgoto(mailAccount, $event    )" translate="MAIL.INTERACTIONS_MAILACCOUNT">\n                                                    Interactions MailAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(mailAccount, $event    )" translate="MAIL.GOTOREALTIME_MAILACCOUNT">\n                                                    goToRealtime MailAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(mailAccount, $event    )" translate="MAIL.AGENTADD_MAILACCOUNT">\n                                                    AgentAdd MailAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(mailAccount, $event    )" translate="MAIL.DELETE_MAILACCOUNT">\n                                                    Delete MailAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.mailAccounts.count}}" md-on-paginate="vm.getMailAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / MAILACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD MAILACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-mailAccount-button" ng-click="vm.createOrEditMailAccount($event)" aria-label="add mailAccount" translate translate-attr-aria-label="MAIL.ADD_MAILACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD MAILACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/mail/views/mailQueues/create/dialog.html",'<md-dialog class="mailQueue-dialog" aria-label="New MailQueue">\n    <form name="mailQueueForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.mailQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newMailQueue">\n\n                <div class="hint"><span translate="MAIL.HELP.NAME"></span></div>\n                <div ng-messages="mailQueueForm[\'name\'].$error" ng-show="mailQueueForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="MAIL.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.STRATEGY">Strategy</label>\n                <md-select name="strategy" ng-model="vm.mailQueue.strategy" required>\n                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                </md-select>\n                <div ng-messages="mailQueueForm[\'strategy\'].$error" ng-show="mailQueueForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.AGENT_TIMEOUT">Agent_Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.mailQueue.timeout" min="1" max="2147483" ng-required="true">\n\n                <div ng-messages="mailQueueForm[\'timeout\'].$error" ng-show="mailQueueForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MAIL.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MAIL.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.mailQueue.description">\n\n                <div ng-messages="mailQueueForm[\'description\'].$error" ng-show="mailQueueForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMailQueue" ng-click="vm.saveMailQueue()" class="send-button md-accent md-raised" ng-disabled="mailQueueForm.$invalid || mailQueueForm.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMailQueue" ng-click="vm.addNewMailQueue()" class="send-button md-accent md-raised" ng-disabled="mailQueueForm.$invalid" aria-label="ADD" translate="MAIL.ADD_MAILQUEUE" translate-attr-aria-label="MAIL.ADD_MAILQUEUE">\n                    ADD MAILQUEUE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMailQueue" ng-click="vm.deleteMailQueue($event)" aria-label="DELETE" translate translate-attr-aria-label="MAIL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MAIL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailQueues/edit/agentadd/agentadd.html",'<md-dialog class="mailQueue-dialog" aria-label="mailQueue" ng-init="vm.onInit()">\n    <form name="mailQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MAIL.AGENTADD_MAILQUEUE">Add Agent to mailQueue</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailQueues/edit/teamadd/teamadd.html",'<md-dialog class="mailQueue-dialog" aria-label="mailQueue" ng-init="vm.onInit()">\n    <form name="mailQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MAIL.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailQueues/edit/view.html",'<div id="mail-mailQueue" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-mailQueues-button md-icon-button" aria-label="Go to mailQueues" ng-click="vm.gotoMailQueues()" translate translate-attr-aria-label="MAIL.GO_TO_MAILQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="mailQueue-image" hide-xs>\n                    <img ng-src="assets/images/business/mailQueues.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.mailQueue.id}}\n                        <span ng-if="vm.mailQueue.name">{{vm.mailQueue.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="MAIL.CREATED_AT"></span> <span>{{vm.mailQueue.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.mailQueue, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="MAIL.TEAMADD_MAILQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.mailQueue, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="MAIL.AGENTADD_MAILQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveMailQueue()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid)" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="mailQueue-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MAIL.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.mailQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="MAIL.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MAIL.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.mailQueue.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'strategy\'].$error" ng-show="generalForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.AGENT_TIMEOUT">Agent_Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.mailQueue.timeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MAIL.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MAIL.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MAIL.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.mailQueue.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MAIL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/mail/views/mailQueues/mailQueues.html",'<div id="mailQueues" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-email" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="MAIL.MAILQUEUES">MailQueues</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="MAIL.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedMailQueues.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedMailQueues =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="MAIL.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-mailQueues-count">\n                    <span>{{vm.selectedMailQueues.length}}</span>\n                    <span translate="MAIL.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="MAILQUEUES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllMailQueues()" translate="MAIL.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectMailQueues()" translate="MAIL.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedMailQueues" csv-label="true" filename="mailQueues.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedMailQueues($event)" aria-label="delete selected" translate translate-attr-label="MAILQUEUES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- MAILQUEUE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedMailQueues" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMailQueues">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'MAIL.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'MAIL.NAME\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'MAIL.STRATEGY\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.mailQueues.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="MAIL.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="mailQueue" md-select-id="id" ng-repeat="mailQueue in vm.mailQueues.rows">\n                                <td md-cell ng-if="mailQueue.userpic"><img class="avatar" alt="{{mailQueue.name}}" ng-src="api/users/{{mailQueue.id}}/avatar" /></td>\n                                <td md-cell ng-if="!mailQueue.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{mailQueue.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailQueue, ev) : vm.createOrEditMailQueue($event, mailQueue)" md-cell class="id ">{{mailQueue.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailQueue, ev) : vm.createOrEditMailQueue($event, mailQueue)" md-cell class="name ">{{mailQueue.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(mailQueue, ev) : vm.createOrEditMailQueue($event, mailQueue)" md-cell class="strategy ">{{ vm.arraystrategy[mailQueue.strategy].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(mailQueue, $event    )" translate="MAIL.EDIT_MAILQUEUE">\n                                                    Edit MailQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(mailQueue, $event    )" translate="MAIL.TEAMADD_MAILQUEUE">\n                                                    teamadd MailQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(mailQueue, $event    )" translate="MAIL.AGENTADD_MAILQUEUE">\n                                                    agentadd MailQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(mailQueue, $event    )" translate="MAIL.DELETE_MAILQUEUE">\n                                                    Delete MailQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(mailQueue, $event    )" translate="MAIL.GOTOREALTIME_MAILQUEUE">\n                                                    goToRealtime MailQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.mailQueues.count}}" md-on-paginate="vm.getMailQueues" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / MAILQUEUE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD MAILQUEUE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-mailQueue-button" ng-click="vm.createOrEditMailQueue($event)" aria-label="add mailQueue" translate translate-attr-aria-label="MAIL.ADD_MAILQUEUE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD MAILQUEUE BUTTON --\x3e\n</div>'),e.put("app/main/apps/mail/views/mailSubtatuses/create/dialog.html",'<md-dialog class="mailSubstatus-dialog" aria-label="New MailSubstatus">\n    <form name="mailSubstatusForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MAIL.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.mailSubstatus.name" ng-required="true" autofocus>\n\n                <div ng-messages="mailSubstatusForm[\'name\'].$error" ng-show="mailSubstatusForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MAIL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.mailSubstatus.description">\n\n                <div ng-messages="mailSubstatusForm[\'description\'].$error" ng-show="mailSubstatusForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MAIL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMailSubstatus" ng-click="vm.saveMailSubstatus()" class="send-button md-accent md-raised" ng-disabled="mailSubstatusForm.$invalid || mailSubstatusForm.$pristine" aria-label="SAVE" translate="MAIL.SAVE" translate-attr-aria-label="MAIL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMailSubstatus" ng-click="vm.addNewMailSubstatus()" class="send-button md-accent md-raised" ng-disabled="mailSubstatusForm.$invalid" aria-label="ADD" translate="MAIL.ADD_MAILSUBSTATUS" translate-attr-aria-label="MAIL.ADD_MAILSUBSTATUS">\n                    ADD MAILSUBSTATUS\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMailSubstatus" ng-click="vm.deleteMailSubstatus($event)" aria-label="DELETE" translate translate-attr-aria-label="MAIL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MAIL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/mail/views/mailSubtatuses/mailSubtatuses.html",'<div id="mailSubtatuses" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-email" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="MAIL.MAILSUBSTATUSES">MailSubstatuses</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="MAIL.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedMailSubstatuses.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedMailSubstatuses =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="MAIL.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-mailSubtatuses-count">\n                    <span>{{vm.selectedMailSubstatuses.length}}</span>\n                    <span translate="MAIL.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="MAILSUBSTATUSES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllMailSubstatuses()" translate="MAIL.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectMailSubstatuses()" translate="MAIL.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedMailSubstatuses" csv-label="true" filename="mailSubtatuses.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedMailSubstatuses($event)" aria-label="delete selected" translate translate-attr-label="MAILSUBSTATUSES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- MAILSUBSTATUS TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedMailSubstatuses" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMailSubstatuses">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'MAIL.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'MAIL.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'MAIL.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.mailSubtatuses.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="MAIL.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="mailSubstatus" md-select-id="id" ng-repeat="mailSubstatus in vm.mailSubtatuses.rows">\n                                <td md-cell ng-if="mailSubstatus.userpic"><img class="avatar" alt="{{mailSubstatus.name}}" ng-src="api/users/{{mailSubstatus.id}}/avatar" /></td>\n                                <td md-cell ng-if="!mailSubstatus.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{mailSubstatus.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditMailSubstatus($event, mailSubstatus)" md-cell class="id ">{{mailSubstatus.id}}</td>\n                                <td ng-click="vm.createOrEditMailSubstatus($event, mailSubstatus)" md-cell class="name ">{{mailSubstatus.name}}</td>\n                                <td ng-click="vm.createOrEditMailSubstatus($event, mailSubstatus)" md-cell class="description ">{{mailSubstatus.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(mailSubstatus, $event    )" translate="MAIL.EDIT_MAILSUBSTATUS">\n                                                    Edit MailSubstatus\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(mailSubstatus, $event    )" translate="MAIL.DELETE_MAILSUBSTATUS">\n                                                    Delete MailSubstatus\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.mailSubtatuses.count}}" md-on-paginate="vm.getMailSubstatuses" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / MAILSUBSTATUS TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD MAILSUBSTATUS BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-mailSubstatus-button" ng-click="vm.createOrEditMailSubstatus($event)" aria-label="add mailSubstatus" translate translate-attr-aria-label="MAIL.ADD_MAILSUBSTATUS">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD MAILSUBSTATUS BUTTON --\x3e\n</div>'),e.put("app/main/apps/mail/views/realtime/accounts/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MAIL.ACCOUNTS">Accounts</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMailAccounts">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'MAIL.NAME\' | translate }}</th>\n                <th md-column>{{ \'MAIL.KEY\' | translate }}</th>\n                <th md-column>{{ \'MAIL.TOTAL\' | translate }}</th>\n                <th md-column>{{ \'MAIL.IN\' | translate }}</th>\n                <th md-column>{{ \'MAIL.OUT\' | translate }}</th>\n                <th md-column>{{ \'MAIL.IMAP_STATUS\' | translate }}</th>\n                <th md-column>{{ \'MAIL.SMTP_STATUS\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.mailAccounts">\n                <td md-cell colspan="4">\n                    <div layout="row" layout-align="center center">\n                        <span translate="MAIL.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.mailAccounts[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.mailAccounts[value].name}}</td>\n                <td md-cell>{{vm.mailAccounts[value].key}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{(vm.mailAccounts[value].in || 0) + (vm.mailAccounts[value].out || 0)}}</span>\n                </td>\n                <td md-cell>\n                    <div layout="row">\n                        <span>\n                            <md-icon md-font-icon="icon-arrow-down-bold blue-fg"></md-icon>\n                        </span>\n                        <span class="md-capture blue-fg">{{vm.mailAccounts[value].in || 0}}</span>\n                        <span class="text-boxed" ng-if="mailAccount.in">{{vm.mailAccounts[value].lastIn ?  (vm.mailAccounts[value].lastIn | date: \'shortTime\') : \'\'}}</span>\n                    </div>\n                </td>\n                <td md-cell>\n                    <div layout="row">\n                        <span>\n                            <md-icon md-font-icon="icon-arrow-up-bold green-fg"></md-icon>\n                        </span>\n                        <span class="md-capture green-fg">{{vm.mailAccounts[value].out || 0}}</span>\n                        <span class="text-boxed" ng-if="mailAccount.out">{{vm.mailAccounts[value].lastOut ?  (vm.mailAccounts[value].lastOut | date: \'shortTime\') : \'\'}}</span>\n                    </div>\n                </td>\n                <td md-cell>\n                    <div layout="row" layout-align="start center">\n                        <div layout="column" layout-align="center center">\n                            <md-button class="md-icon-button" aria-label="Status">\n                                <md-tooltip>{{vm.mailAccounts[value].Imap.messageStatus}}</md-tooltip>\n                                <div ng-switch="vm.mailAccounts[value].Imap.status">\n                                    <md-icon ng-switch-when="error" md-font-icon="icon-alert yellow-fg"></md-icon>\n                                    <md-icon ng-switch-when="disabled" md-font-icon="icon-close grey-fg"></md-icon>\n                                    <md-icon ng-switch-default md-font-icon="icon-checkbox-marked-circle-outline green-fg"></md-icon>\n                                </div>\n                            </md-button>\n                            <span class="md-caption grey-fg">{{ (\'MAIL.\' + vm.mailAccounts[value].Imap.status.toUpperCase()) | translate}}</span>\n                        </div>\n                        <span class="text-boxed" ng-if="vm.mailAccounts[value].active">{{vm.mailAccounts[value].Imap.lastSync | date: \'shortTime\'}}</span>\n                    </div>\n                </td>\n                <td md-cell>\n                    <div layout="row" layout-align="start center" ng-if="vm.mailAccounts[value].Smtp.status">\n                        <div layout="column" layout-align="center center">\n                            <md-button class="md-icon-button" aria-label="Status">\n                                <md-tooltip>{{vm.mailAccounts[value].Smtp.messageStatus}}</md-tooltip>\n                                <md-icon md-font-icon="{{ vm.mailAccounts[value].Smtp.status == \'error\' ? \'icon-alert yellow-fg\' : \'icon-checkbox-marked-circle-outline green-fg\'}}"></md-icon>\n                            </md-button>\n                            <span class="md-caption grey-fg">{{ (\'MAIL.\' + vm.mailAccounts[value].Smtp.status.toUpperCase()) | translate}}</span>\n                        </div>\n                        <span class="text-boxed">{{vm.mailAccounts[value].Smtp.lastSync | date: \'shortTime\'}}</span>\n                    </div>\n                    <span class="md-caption grey-fg" ng-if="!vm.mailAccounts[value].Smtp.status">{{ \'MAIL.NEVER_VERIFIED\' | translate }}</span>\n                </td>\n                <td md-cell class="actions">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="4">\n                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                <md-button ng-click="vm.goToMailAccount($event, vm.mailAccounts[value])" translate="MAIL.EDIT_ACCOUNT">\n                                    Edit Account\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.verifySmtp($event, vm.mailAccounts[value])" translate="MAIL.VERIFY_SMTP">\n                                    Verify Smtp\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getmailAccounts" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/mail/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MAIL.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'MAIL.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'MAIL.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'MAIL.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'MAIL.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'MAIL.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'MAIL.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'MAIL.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'MAIL.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'MAIL.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'MAIL.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'MAIL.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'MAIL.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"MAIL.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"MAIL.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"MAIL.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"MAIL.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"MAIL.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"MAIL.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"MAIL.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"MAIL.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'MAIL.PAGE' | translate}}:', rowsPerPage: '{{'MAIL.ROWSPERPAGE' | translate}}:', of: '{{'MAIL.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/mail/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MAIL.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'MAIL.NAME\' | translate }}</th>\n                <th md-column>{{ \'MAIL.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'MAIL.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'MAIL.READY\' | translate }}</th>\n                <th md-column>{{ \'MAIL.WAITING\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="7">\n                    <div layout="row" layout-align="center center">\n                        <span translate="MAIL.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MAIL.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditMailQueue($event, vm.queues[value])" translate="MAIL.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="MAIL.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MAIL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MAIL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MAIL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/mail/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MAIL.ACCOUNTS">Accounts</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/marketplace/views/plugins/create/dialog.html",'<md-dialog class="plugin-dialog" aria-label="New Plugin">\n    <form name="pluginForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MARKETPLACE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.plugin.name" ng-required="true" autofocus>\n\n                <div ng-messages="pluginForm[\'name\'].$error" ng-show="pluginForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MARKETPLACE.TYPE">Type</label>\n                <input type="text" name="type" ng-model="vm.plugin.type" ng-disabled="!vm.newPlugin">\n\n                <div ng-messages="pluginForm[\'type\'].$error" ng-show="pluginForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.plugin.active" aria-label="Active" ng-disabled="!vm.newPlugin"><span translate="MARKETPLACE.ACTIVE">Active</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MARKETPLACE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.plugin.description">\n\n                <div ng-messages="pluginForm[\'description\'].$error" ng-show="pluginForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MARKETPLACE.ICON">Icon</label>\n                <input type="text" name="icon" ng-model="vm.plugin.icon" ng-required="true">\n\n                <div ng-messages="pluginForm[\'icon\'].$error" ng-show="pluginForm[\'icon\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.ICON_REQUIRED">Icon field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MARKETPLACE.SIDEBAR">Sidebar</label>\n                <md-select name="sidebar" ng-model="vm.plugin.sidebar" required>\n                    <md-option ng-value="\'always\'">Always</md-option>\n                    <md-option ng-value="\'adminOnly\'">Admin Only</md-option>\n                    <md-option ng-value="\'agentOnly\'">Agent Only</md-option>\n                    <md-option ng-value="\'never\'">Never</md-option>\n                </md-select>\n                <div ng-messages="pluginForm[\'sidebar\'].$error" ng-show="pluginForm[\'sidebar\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.SIDEBAR_REQUIRED">Sidebar field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.plugin.sidebar === \'always\' || vm.plugin.sidebar === \'adminOnly\'" class="md-block">\n                <label translate="MARKETPLACE.ADMINURL">AdminUrl</label>\n                <input type="text" name="adminUrl" ng-model="vm.plugin.adminUrl">\n\n                <div ng-messages="pluginForm[\'adminUrl\'].$error" ng-show="pluginForm[\'adminUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.ADMINURL_REQUIRED">AdminUrl field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.plugin.sidebar === \'always\' || vm.plugin.sidebar === \'agentOnly\'" class="md-block">\n                <label translate="MARKETPLACE.AGENTURL">AgentUrl</label>\n                <input type="text" name="agentUrl" ng-model="vm.plugin.agentUrl">\n\n                <div ng-messages="pluginForm[\'agentUrl\'].$error" ng-show="pluginForm[\'agentUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.AGENTURL_REQUIRED">AgentUrl field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.plugin.type === \'script\'" class="md-block">\n                <label translate="MARKETPLACE.SCRIPTNAME">ScriptName</label>\n                <input type="text" name="scriptName" ng-model="vm.plugin.scriptName" ng-disabled="!vm.newPlugin">\n\n                <div ng-messages="pluginForm[\'scriptName\'].$error" ng-show="pluginForm[\'scriptName\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.SCRIPTNAME_REQUIRED">ScriptName field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.plugin.type === \'script\'" class="md-block">\n                <label translate="MARKETPLACE.SCRIPTPATH">ScriptPath</label>\n                <input type="text" name="scriptPath" ng-model="vm.plugin.scriptPath" ng-required="true">\n\n                <div ng-messages="pluginForm[\'scriptPath\'].$error" ng-show="pluginForm[\'scriptPath\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.SCRIPTPATH_REQUIRED">ScriptPath field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MARKETPLACE.VERSION">Version</label>\n                <input type="text" name="version" ng-model="vm.plugin.version" ng-disabled="!vm.newPlugin">\n\n                <div ng-messages="pluginForm[\'version\'].$error" ng-show="pluginForm[\'version\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MARKETPLACE.ERRORS.VERSION_REQUIRED">Version field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newPlugin" ng-click="vm.savePlugin()" class="send-button md-accent md-raised" ng-disabled="pluginForm.$invalid || pluginForm.$pristine" aria-label="SAVE" translate="MARKETPLACE.SAVE" translate-attr-aria-label="MARKETPLACE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newPlugin" ng-click="vm.addNewPlugin()" class="send-button md-accent md-raised" ng-disabled="pluginForm.$invalid" aria-label="ADD" translate="MARKETPLACE.ADD_PLUGIN" translate-attr-aria-label="MARKETPLACE.ADD_PLUGIN">\n                    ADD PLUGIN\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newPlugin" ng-click="vm.deletePlugin($event)" aria-label="DELETE" translate translate-attr-aria-label="MARKETPLACE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MARKETPLACE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/marketplace/views/plugins/edit/view.html",'<div id="marketplace-plugin" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-plugins-button md-icon-button" aria-label="Go to plugins" ng-click="vm.gotoPlugins()" translate translate-attr-aria-label="MARKETPLACE.GO_TO_PLUGINS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="plugin-image" hide-xs>\n                    <img ng-src="assets/images/business/plugins.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.plugin.id}}\n                        <span ng-if="vm.plugin.name">{{vm.plugin.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="MARKETPLACE.CREATED_AT"></span> <span>{{vm.plugin.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.savePlugin()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid)" translate="MARKETPLACE.SAVE" translate-attr-aria-label="MARKETPLACE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MARKETPLACE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="plugin-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MARKETPLACE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MARKETPLACE.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.plugin.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MARKETPLACE.TYPE">Type</label>\n                                <input type="text" name="type" ng-model="vm.plugin.type" disabled>\n\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.plugin.active" aria-label="Active" ng-disabled="true"><span translate="MARKETPLACE.ACTIVE">Active</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MARKETPLACE.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.plugin.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MARKETPLACE.ICON">Icon</label>\n                                <input type="text" name="icon" ng-model="vm.plugin.icon" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'icon\'].$error" ng-show="generalForm[\'icon\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.ICON_REQUIRED">Icon field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MARKETPLACE.SIDEBAR">Sidebar</label>\n                                <md-select name="sidebar" ng-model="vm.plugin.sidebar" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'always\'">Always</md-option>\n                                    <md-option ng-value="\'adminOnly\'">Admin Only</md-option>\n                                    <md-option ng-value="\'agentOnly\'">Agent Only</md-option>\n                                    <md-option ng-value="\'never\'">Never</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'sidebar\'].$error" ng-show="generalForm[\'sidebar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.SIDEBAR_REQUIRED">Sidebar field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.plugin.sidebar === \'always\' || vm.plugin.sidebar === \'adminOnly\'" class="md-block">\n                                <label translate="MARKETPLACE.ADMINURL">AdminUrl</label>\n                                <input type="text" name="adminUrl" ng-model="vm.plugin.adminUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'adminUrl\'].$error" ng-show="generalForm[\'adminUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.ADMINURL_REQUIRED">AdminUrl field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.plugin.sidebar === \'always\' || vm.plugin.sidebar === \'agentOnly\'" class="md-block">\n                                <label translate="MARKETPLACE.AGENTURL">AgentUrl</label>\n                                <input type="text" name="agentUrl" ng-model="vm.plugin.agentUrl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'agentUrl\'].$error" ng-show="generalForm[\'agentUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.AGENTURL_REQUIRED">AgentUrl field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.plugin.type === \'script\'" class="md-block">\n                                <label translate="MARKETPLACE.SCRIPTNAME">ScriptName</label>\n                                <input type="text" name="scriptName" ng-model="vm.plugin.scriptName" disabled>\n\n                                <div ng-messages="generalForm[\'scriptName\'].$error" ng-show="generalForm[\'scriptName\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.SCRIPTNAME_REQUIRED">ScriptName field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.plugin.type === \'script\'" class="md-block">\n                                <label translate="MARKETPLACE.SCRIPTPATH">ScriptPath</label>\n                                <input type="text" name="scriptPath" ng-model="vm.plugin.scriptPath" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'scriptPath\'].$error" ng-show="generalForm[\'scriptPath\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.SCRIPTPATH_REQUIRED">ScriptPath field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MARKETPLACE.VERSION">Version</label>\n                                <input type="text" name="version" ng-model="vm.plugin.version" disabled>\n\n                                <div ng-messages="generalForm[\'version\'].$error" ng-show="generalForm[\'version\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MARKETPLACE.ERRORS.VERSION_REQUIRED">Version field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/marketplace/views/plugins/plugins.html",'<div id="plugins" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cart" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="MARKETPLACE.PLUGINS">Plugins</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="MARKETPLACE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedPlugins.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedPlugins =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="MARKETPLACE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-plugins-count">\n                    <span>{{vm.selectedPlugins.length}}</span>\n                    <span translate="MARKETPLACE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="PLUGINS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllPlugins()" translate="MARKETPLACE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectPlugins()" translate="MARKETPLACE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedPlugins" csv-label="true" filename="plugins.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedPlugins($event)" aria-label="delete selected" translate translate-attr-label="PLUGINS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n            <div ng-if="vm.installing">\n                <md-card class="md-whiteframe-1dp padding-20" flex>\n                    <div layout="column" layout-align="center center">\n                        <span class="md-title md-accent-fg padding-20 text-bold" translate="MARKETPLACE.INSTALLING">Installing</span>\n                        <md-progress-linear md-mode="indeterminate" class="md-accent padding-20"></md-progress-linear>\n                    </div>\n                </md-card>\n            </div>\n\n            \x3c!-- PLUGIN TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedPlugins" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getPlugins">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="name">{{ \'MARKETPLACE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="type">{{ \'MARKETPLACE.TYPE\' | translate }}</th>\n                                <th md-column md-order-by="active">{{ \'MARKETPLACE.ACTIVE\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'MARKETPLACE.DESCRIPTION\' | translate }}</th>\n                                <th md-column md-order-by="version">{{ \'MARKETPLACE.VERSION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.plugins.rows.length">\n                                <td md-cell colspan="6">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="MARKETPLACE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="plugin" md-select-id="id" ng-repeat="plugin in vm.plugins.rows">\n                                <td md-cell ng-if="plugin.userpic"><img class="avatar" alt="{{plugin.name}}" ng-src="api/users/{{plugin.id}}/avatar" /></td>\n                                <td md-cell ng-if="!plugin.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{plugin.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(plugin, ev) : vm.createOrEditPlugin($event, plugin)" md-cell class="name ">{{plugin.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(plugin, ev) : vm.createOrEditPlugin($event, plugin)" md-cell class="type ">{{plugin.type}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(plugin, ev) : vm.createOrEditPlugin($event, plugin)" md-cell class="active ">\n                                    <md-icon md-colors="{color: {{plugin.active ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{plugin.active ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(plugin, ev) : vm.createOrEditPlugin($event, plugin)" md-cell class="description ">{{plugin.description}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(plugin, ev) : vm.createOrEditPlugin($event, plugin)" md-cell class="version ">{{plugin.version}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MARKETPLACE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && !plugin.active">\n\n                                                <md-button ng-click="vm.installplugin(plugin, $event    )" translate="MARKETPLACE.INSTALL_PLUGIN">\n                                                    Install Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(plugin, $event    )" translate="MARKETPLACE.EDIT_PLUGIN">\n                                                    Edit Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && plugin.active && plugin.type == \'script\'">\n\n                                                <md-button ng-click="vm.stopplugin(plugin, $event    )" translate="MARKETPLACE.STOP_PLUGIN">\n                                                    Stop Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && plugin.active && plugin.type == \'script\'">\n\n                                                <md-button ng-click="vm.restartplugin(plugin, $event    )" translate="MARKETPLACE.RESTART_PLUGIN">\n                                                    Restart Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.downloadfile2(plugin, $event  , \'plugins\'   )" translate="MARKETPLACE.DOWNLOAD_PLUGIN">\n                                                    Download Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && plugin.active">\n\n                                                <md-button ng-click="vm.uninstallplugin(plugin, $event    )" translate="MARKETPLACE.UNINSTALL_PLUGIN">\n                                                    Uninstall Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(plugin, $event    )" translate="MARKETPLACE.DELETE_PLUGIN">\n                                                    Delete Plugin\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'MARKETPLACE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MARKETPLACE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MARKETPLACE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.plugins.count}}" md-on-paginate="vm.getPlugins" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / PLUGIN TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- UPLOAD PLUGIN BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="upload-plugin-button" ng-click="vm.uploadPlugin($event)" aria-label="upload plugin" translate translate-attr-aria-label="MARKETPLACE.UPLOAD_PLUGIN">\n        <md-icon md-font-icon="icon-upload"></md-icon>\n    </md-button>\n    \x3c!-- / UPLOAD PLUGIN BUTTON --\x3e\n</div>'),e.put("app/main/apps/marketplace/views/plugins/upload/dialog.html",'<md-dialog class="upload-dialog" aria-label="Upload ">\n    <form name="uploadForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div id="plugin-uploader" ng-hide="vm.uploadState == \'uploading\'" flow-init="vm.ngFlowOptions" flow-name="vm.ngFlow.flow" flow-files-submitted="vm.upload()" flow-file-added="vm.fileAdded($file)" flow-file-success="vm.fileSuccess($file, $message)" flow-error="vm.uploadError($file, $message)" flow-complete="vm.uploadComplete()" flow-drop flow-drag-enter="vm.dropping=true" flow-drag-leave="vm.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                <div class="drop-text hint-text" layout="row" layout-align="center center">\n                    <span translate="MARKETPLACE.DROP_TO_UPLOAD">Drop to upload</span>\n                </div>\n\n                <div class="upload-button" layout="column" layout-align="center center">\n                    <md-button class="md-accent md-raised" flow-btn>\n                        Upload\n                    </md-button>\n                    <span class="secondary-text mt-8" translate="MARKETPLACE.DROP_TO_UPLOAD_MESSAGE">You can also drop your file here to upload.</span>\n                </div>\n            </div>\n\n            <div layout="column" layout-align="space-between center" ng-show="vm.uploadState == \'uploading\'">\n                <div>\n                    <span translate="MARKETPLACE.UPLOADING">Uploading</span>\n                    <span>{{vm.plugin.file.name}}</span>\n                </div>\n                <md-progress-linear md-mode="indeterminate"></md-progress-linear>\n            </div>\n\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center"></div>\n            <div layout="row">\n                <md-button ng-click="vm.closeDialog()" ng-hide="vm.uploadState == \'uploading\'" class="md-accent md-raised" aria-label="FINISH" translate="MARKETPLACE.FINISH" translate-attr-aria-label="MARKETPLACE.FINISH">\n                    FINISH\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/create/dialog.html",'<md-dialog class="ivrCampaign-dialog" aria-label="New IvrCampaign">\n    <form name="ivrCampaignForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.ivrCampaign.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newIvrCampaign">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.NAME"></span></div>\n                <div ng-messages="ivrCampaignForm[\'name\'].$error" ng-show="ivrCampaignForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.ivrCampaign.active" aria-label="Active"><span translate="MOTIONDIALER.ACTIVE">Active</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.TRUNK">Trunk</label>\n                <md-select name="TrunkId" ng-model="vm.ivrCampaign.TrunkId" required>\n                    <md-option ng-value="TrunkId.id" ng-repeat="TrunkId in vm.trunks" ng-disabled="TrunkId.canSelect === false">{{ TrunkId.name }}</md-option>\n                </md-select>\n                <div ng-messages="ivrCampaignForm[\'TrunkId\'].$error" ng-show="ivrCampaignForm[\'TrunkId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.INTERVAL">Interval</label>\n                <md-select name="IntervalId" ng-model="vm.ivrCampaign.IntervalId" required>\n                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval" ng-disabled="IntervalId.canSelect === false">{{ IntervalId.name }}</md-option>\n                </md-select>\n                <div ng-messages="ivrCampaignForm[\'IntervalId\'].$error" ng-show="ivrCampaignForm[\'IntervalId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.INTERVAL_REQUIRED">Interval field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.CHECKDUPLICATE">CheckDuplicate</label>\n                <md-select name="dialCheckDuplicateType" ng-model="vm.ivrCampaign.dialCheckDuplicateType" required>\n\n                    <md-option ng-value="\'always\'"> {{ \'MOTIONDIALER.ALWAYS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'never\'"> {{ \'MOTIONDIALER.NEVER\' | translate }} </md-option>\n\n                    <md-option ng-value="\'onlyIfOpen\'"> {{ \'MOTIONDIALER.ONLY_IF_OPEN\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="ivrCampaignForm[\'dialCheckDuplicateType\'].$error" ng-show="ivrCampaignForm[\'dialCheckDuplicateType\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.CHECKDUPLICATE_REQUIRED">CheckDuplicate field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.CALLYSQUAREPROJECT">CallySquareProject</label>\n                <md-select name="SquareProjectId" ng-model="vm.ivrCampaign.SquareProjectId" required>\n                    <md-option ng-value="SquareProjectId.id" ng-repeat="SquareProjectId in vm.projects" ng-disabled="SquareProjectId.canSelect === false">{{ SquareProjectId.name }}</md-option>\n                </md-select>\n                <div ng-messages="ivrCampaignForm[\'SquareProjectId\'].$error" ng-show="ivrCampaignForm[\'SquareProjectId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.CALLYSQUAREPROJECT_REQUIRED">CallySquareProject field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.CONCURRENTCALLS">ConcurrentCalls</label>\n                <input type="number" name="limitCalls" ng-model="vm.ivrCampaign.limitCalls" min="1" max="200" ng-required="true">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.CONCURRENTCALLS"></span></div>\n                <div ng-messages="ivrCampaignForm[\'limitCalls\'].$error" ng-show="ivrCampaignForm[\'limitCalls\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.CONCURRENTCALLS_REQUIRED">ConcurrentCalls field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.CONCURRENTCALLS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">ConcurrentCalls must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MOTIONDIALER.ERRORS.CONCURRENTCALLS_MUST_BE_LESS_THAN_OR_EQUAL_TO">ConcurrentCalls must be a valid greater or equal than</span> <span>200</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.ivrCampaign.description">\n\n                <div ng-messages="ivrCampaignForm[\'description\'].$error" ng-show="ivrCampaignForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newIvrCampaign" ng-click="vm.saveIvrCampaign()" class="send-button md-accent md-raised" ng-disabled="ivrCampaignForm.$invalid || ivrCampaignForm.$pristine" aria-label="SAVE" translate="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newIvrCampaign" ng-click="vm.addNewIvrCampaign()" class="send-button md-accent md-raised" ng-disabled="ivrCampaignForm.$invalid" aria-label="ADD" translate="MOTIONDIALER.ADD_IVRCAMPAIGN" translate-attr-aria-label="MOTIONDIALER.ADD_IVRCAMPAIGN">\n                    ADD IVRCAMPAIGN\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newIvrCampaign" ng-click="vm.deleteIvrCampaign($event)" aria-label="DELETE" translate translate-attr-aria-label="MOTIONDIALER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MOTIONDIALER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/edit/blacklistadd/blacklistadd.html",'<md-dialog class="ivrCampaign-dialog" aria-label="ivrCampaign" ng-init="vm.onInit()">\n    <form name="ivrCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.BLACKLISTADD_IVRCAMPAIGN">Add List in IVRCAMPAIGN</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect ng-hide="vm.loading" options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n            <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n                <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveLists()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/edit/clone/clone.html",'<md-dialog class="ivrCampaign-dialog" aria-label="Clone IvrCampaign">\n    <form name="ivrCampaignForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.ivrCampaign.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newIvrCampaign">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.NAME"></span></div>\n                <div ng-messages="ivrCampaignForm[\'name\'].$error" ng-show="ivrCampaignForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <md-button type="submit" ng-click="vm.cloneIvrCampaign()" class="send-button md-accent md-raised" ng-disabled="ivrCampaignForm.$invalid" aria-label="CLONE" translate="MOTIONDIALER.CLONE_IVRCAMPAIGN" translate-attr-aria-label="MOTIONDIALER.CLONE_IVRCAMPAIGN">\n                CLONE IVRCAMPAIGN\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/edit/hoppers/dialog.html",'<md-dialog class="hopper-dialog" aria-label="New Hopper">\n    <form name="hopperForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div class="md-block">\n                <label translate="MOTIONDIALER.SCHEDULEDAT">ScheduledAt</label>\n                <md-content layout="row" class="md-padding">\n                    <div flex class="md-block">\n                        <mdp-date-picker mdp-open-on-click name="scheduledatDate" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" ng-model="vm.hopper.scheduledat" ng-init="vm.hopper.scheduledat = vm.getDateFromString(vm.hopper.scheduledat)">\n                            <div ng-messages="hopperForm.dateRangeFrom.$error" ng-show="hopperForm.dateRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="MOTIONDIALER.ERRORS.DATE_REQUIRED">Date is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="MOTIONDIALER.ERRORS.DATE_INVALID">Date is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-date-picker>\n                    </div>\n                    <div flex class="md-block">\n                        <mdp-time-picker mdp-open-on-click name="scheduledatTime" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.hopper.scheduledat" ng-init="vm.hopper.scheduledat = vm.getDateFromString(vm.hopper.scheduledat)">\n                            <div ng-messages="hopperForm.timeRangeFrom.$error" ng-show="hopperForm.timeRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="MOTIONDIALER.ERRORS.TIME_REQUIRED">Time is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="MOTIONDIALER.ERRORS.TIME_INVALID">Time is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-time-picker>\n                    </div>\n                </md-content>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.PRIORITY">Priority</label>\n                <md-select name="priority" ng-model="vm.hopper.priority">\n                    <md-option ng-value="\'4\'">Highest</md-option>\n                    <md-option ng-value="\'3\'">High</md-option>\n                    <md-option ng-value="\'2\'">Medium</md-option>\n                    <md-option ng-value="\'1\'">Low</md-option>\n                    <md-option ng-value="\'0\'">Lowest</md-option>\n                </md-select>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.PRIORITY"></span></div>\n                <div ng-messages="hopperForm[\'priority\'].$error" ng-show="hopperForm[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newHopper" ng-click="vm.saveHopper()" class="send-button md-accent md-raised" ng-disabled="hopperForm.$invalid || hopperForm.$pristine" aria-label="SAVE" translate="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newHopper" ng-click="vm.addNewHopper()" class="send-button md-accent md-raised" ng-disabled="hopperForm.$invalid" aria-label="ADD" translate="MOTIONDIALER.ADD_HOPPER" translate-attr-aria-label="MOTIONDIALER.ADD_HOPPER">\n                    ADD HOPPER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newHopper" ng-click="vm.deleteHopper($event)" aria-label="DELETE" translate translate-attr-aria-label="MOTIONDIALER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MOTIONDIALER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/edit/listadd/listadd.html",'<md-dialog class="ivrCampaign-dialog" aria-label="ivrCampaign" ng-init="vm.onInit()">\n    <form name="ivrCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.LISTADD_IVRCAMPAIGN">Add List in IVRCAMPAIGN</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect ng-hide="vm.loading" options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n            <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n                <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveLists()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/edit/resetlist/resetlist.html",'<md-dialog class="queueCampaign-dialog" aria-label="queueCampaign">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.RESETLIST ">Reset List</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-disabled="vm.loading" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ng-hide="vm.loading">\n            <div layout="row" layout-wrap flex>\n                <div flex-xs flex="50">\n                    <md-checkbox aria-label="Select All" ng-checked="vm.isChecked()" md-indeterminate="vm.isIndeterminate()" ng-click="vm.toggleAll()">\n                        <span ng-if="vm.isChecked()" translate="MOTIONDIALER.UNSELECTALL"></span>\n                        <span ng-if="!vm.isChecked()" translate="MOTIONDIALER.SELECTALL"></span>\n                    </md-checkbox>\n                </div>\n                <div flex-xs flex="50">\n                </div>\n                <div flex="{{vm.items.length > 10 ? 50 : 100 }}" ng-repeat="item in vm.items">\n                    <md-checkbox ng-checked="vm.exists(item, vm.selected)" ng-click="vm.toggle(item, vm.selected)">\n                        {{ item.name | limitTo:40 }}\n                    </md-checkbox>\n                </div>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions ng-hide="vm.loading" layout="row" layout-align="end center">\n            <div>\n            </div>\n            <md-button type="submit" ng-click="vm.listSelected()" class="send-button md-accent md-raised" ng-disabled="vm.loading" aria-label="RESET" translate="MOTIONDIALER.RESET" translate-attr-aria-label="MOTIONDIALER.RESET">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n        <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n            <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n        </div>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/edit/view.html",'<div id="motiondialer-ivrCampaign" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-ivrCampaigns-button md-icon-button" aria-label="Go to ivrCampaigns" ng-click="vm.gotoIvrCampaigns()" translate translate-attr-aria-label="MOTIONDIALER.GO_TO_IVRCAMPAIGNS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="ivrCampaign-image" hide-xs>\n                    <img ng-src="assets/images/business/ivrCampaigns.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.ivrCampaign.id}}\n                        <span ng-if="vm.ivrCampaign.name">{{vm.ivrCampaign.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="MOTIONDIALER.CREATED_AT"></span> <span>{{vm.ivrCampaign.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.clonedialog(vm.ivrCampaign, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="clone">\n                <md-tooltip><span translate="MOTIONDIALER.CLONE_IVRCAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.listadddialog(vm.ivrCampaign, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="listadd">\n                <md-tooltip><span translate="MOTIONDIALER.LISTADD_IVRCAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-format-list-numbers"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.blacklistadddialog(vm.ivrCampaign, $event)" class="md-fab md-warn md-icon-button" aria-label="blacklistadd">\n                <md-tooltip><span translate="MOTIONDIALER.BLACKLISTADD_IVRCAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-block-helper"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.resetlistdialog(vm.ivrCampaign, $event)" class="md-fab md-warn md-icon-button" aria-label="resetlist">\n                <md-tooltip><span translate="MOTIONDIALER.RESETLIST_IVRCAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-restore"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.ivrCampaign, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="MOTIONDIALER.GOTO_IVRCAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-cast"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveIvrCampaign()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (campaignForm.$invalid) || (originateForm.$invalid) || (globalForm.$invalid) || (congestionForm.$invalid) || (busyForm.$invalid) || (noanswerForm.$invalid) || (advancedForm.$invalid) || (globalintervalForm.$invalid) || (timezoneForm.$invalid) || (amdForm.$invalid) || (hopperStatisticsForm.$invalid) || (hoppersForm.$invalid) || (hopperHistoriesForm.$invalid) || (hopperFinalsForm.$invalid) || (hopperBlacksForm.$invalid)" translate="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="ivrCampaign-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.ivrCampaign.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MOTIONDIALER.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.ivrCampaign.active" aria-label="Active" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.ACTIVE">Active</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.TRUNK">Trunk</label>\n                                <md-select name="TrunkId" ng-model="vm.ivrCampaign.TrunkId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="TrunkId.id" ng-repeat="TrunkId in vm.trunks" ng-disabled="TrunkId.canSelect === false">{{ TrunkId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'TrunkId\'].$error" ng-show="generalForm[\'TrunkId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.BACKUPTRUNK">BackupTrunk</label>\n                                <md-select name="TrunkBackupId" ng-model="vm.ivrCampaign.TrunkBackupId" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="TrunkBackupId.id" ng-repeat="TrunkBackupId in vm.trunks" ng-disabled="TrunkBackupId.canSelect === false">{{ TrunkBackupId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'TrunkBackupId\'].$error" ng-show="generalForm[\'TrunkBackupId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.BACKUPTRUNK_REQUIRED">BackupTrunk field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.INTERVAL">Interval</label>\n                                <md-select name="IntervalId" ng-model="vm.ivrCampaign.IntervalId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval" ng-disabled="IntervalId.canSelect === false">{{ IntervalId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'IntervalId\'].$error" ng-show="generalForm[\'IntervalId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.INTERVAL_REQUIRED">Interval field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CHECKDUPLICATE">CheckDuplicate</label>\n                                <md-select name="dialCheckDuplicateType" ng-model="vm.ivrCampaign.dialCheckDuplicateType" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'always\'"> {{ \'MOTIONDIALER.ALWAYS\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'never\'"> {{ \'MOTIONDIALER.NEVER\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'onlyIfOpen\'"> {{ \'MOTIONDIALER.ONLY_IF_OPEN\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'dialCheckDuplicateType\'].$error" ng-show="generalForm[\'dialCheckDuplicateType\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CHECKDUPLICATE_REQUIRED">CheckDuplicate field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CUTDIGIT">CutDigit</label>\n                                <input type="number" name="dialCutDigit" ng-model="vm.ivrCampaign.dialCutDigit" min="0" max="15" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'dialCutDigit\'].$error" ng-show="generalForm[\'dialCutDigit\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CUTDIGIT_REQUIRED">CutDigit field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CUTDIGIT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CutDigit must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CUTDIGIT_MUST_BE_LESS_THAN_OR_EQUAL_TO">CutDigit must be a valid greater or equal than</span> <span>15</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.ivrCampaign.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.CAMPAIGN">CAMPAIGN</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="ivrCampaign-detail-form-container campaign md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.CAMPAIGN">CAMPAIGN</div>\n                        </div>\n                        <form name="campaignForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CALLYSQUAREPROJECT">CallySquareProject</label>\n                                <md-select name="SquareProjectId" ng-model="vm.ivrCampaign.SquareProjectId" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="SquareProjectId.id" ng-repeat="SquareProjectId in vm.projects" ng-disabled="SquareProjectId.canSelect === false">{{ SquareProjectId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="campaignForm[\'SquareProjectId\'].$error" ng-show="campaignForm[\'SquareProjectId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CALLYSQUAREPROJECT_REQUIRED">CallySquareProject field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CONCURRENTCALLS">ConcurrentCalls</label>\n                                <input type="number" name="limitCalls" ng-model="vm.ivrCampaign.limitCalls" min="1" max="200" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CONCURRENTCALLS"></span></div>\n                                <div ng-messages="campaignForm[\'limitCalls\'].$error" ng-show="campaignForm[\'limitCalls\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CONCURRENTCALLS_REQUIRED">ConcurrentCalls field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CONCURRENTCALLS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">ConcurrentCalls must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CONCURRENTCALLS_MUST_BE_LESS_THAN_OR_EQUAL_TO">ConcurrentCalls must be a valid greater or equal than</span> <span>200</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="ivrCampaign-detail-form-container originate md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.ORIGINATE">ORIGINATE</div>\n                        </div>\n                        <form name="originateForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.ORIGINATECALLERIDNAME">OriginateCallerIdName</label>\n                                <input type="text" name="dialOriginateCallerIdName" ng-model="vm.ivrCampaign.dialOriginateCallerIdName" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATECALLERIDNAME"></span></div>\n                                <div ng-messages="originateForm[\'dialOriginateCallerIdName\'].$error" ng-show="originateForm[\'dialOriginateCallerIdName\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATECALLERIDNAME_REQUIRED">OriginateCallerIdName field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.ORIGINATECALLERIDNUMBER">OriginateCallerIdNumber</label>\n                                <input type="text" name="dialOriginateCallerIdNumber" ng-model="vm.ivrCampaign.dialOriginateCallerIdNumber" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATECALLERIDNUMBER"></span></div>\n                                <div ng-messages="originateForm[\'dialOriginateCallerIdNumber\'].$error" ng-show="originateForm[\'dialOriginateCallerIdNumber\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATECALLERIDNUMBER_REQUIRED">OriginateCallerIdNumber field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.RANDOMLASTDIGITCALLERIDNUMBER">RandomLastDigitCallerIdNumber</label>\n                                <input type="number" name="dialRandomLastDigitCallerIdNumber" ng-model="vm.ivrCampaign.dialRandomLastDigitCallerIdNumber" min="0" max="15" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.RANDOMLASTDIGITCALLERIDNUMBER"></span></div>\n                                <div ng-messages="originateForm[\'dialRandomLastDigitCallerIdNumber\'].$error" ng-show="originateForm[\'dialRandomLastDigitCallerIdNumber\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.RANDOMLASTDIGITCALLERIDNUMBER_REQUIRED">RandomLastDigitCallerIdNumber field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.RANDOMLASTDIGITCALLERIDNUMBER_MUST_BE_GREATER_THAN_OR_EQUAL_TO">RandomLastDigitCallerIdNumber must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.RANDOMLASTDIGITCALLERIDNUMBER_MUST_BE_LESS_THAN_OR_EQUAL_TO">RandomLastDigitCallerIdNumber must be a valid greater or equal than</span> <span>15</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.ORIGINATETIMEOUT">OriginateTimeout</label>\n                                <input type="number" name="dialOriginateTimeout" ng-model="vm.ivrCampaign.dialOriginateTimeout" min="1" max="999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATETIMEOUT"></span></div>\n                                <div ng-messages="originateForm[\'dialOriginateTimeout\'].$error" ng-show="originateForm[\'dialOriginateTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATETIMEOUT_REQUIRED">OriginateTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATETIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">OriginateTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATETIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">OriginateTimeout must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.PREFIX">Prefix</label>\n                                <input type="text" name="dialPrefix" ng-model="vm.ivrCampaign.dialPrefix" ng-pattern="/^\\d+$/" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREFIX"></span></div>\n                                <div ng-messages="originateForm[\'dialPrefix\'].$error" ng-show="originateForm[\'dialPrefix\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.PREFIX_REQUIRED">Prefix field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MOTIONDIALER.ERRORS.PREFIX_MUST_VALID_PATTERN" translate-values="{ regex: \'/^\\d+$/\' }">Prefix must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.RETRYANDFREQUENCY">RETRYANDFREQUENCY</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="ivrCampaign-detail-form-container global md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.GLOBAL">GLOBAL</div>\n                        </div>\n                        <form name="globalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.GLOBALMAXRETRY">GlobalMaxRetry</label>\n                                <input type="number" name="dialGlobalMaxRetry" ng-model="vm.ivrCampaign.dialGlobalMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.GLOBALMAXRETRY"></span></div>\n                                <div ng-messages="globalForm[\'dialGlobalMaxRetry\'].$error" ng-show="globalForm[\'dialGlobalMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALMAXRETRY_REQUIRED">GlobalMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">GlobalMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">GlobalMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="ivrCampaign-detail-form-container congestion md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.CONGESTION">CONGESTION</div>\n                        </div>\n                        <form name="congestionForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CONGESTIONMAXRETRY">CongestionMaxRetry</label>\n                                <input type="number" name="dialCongestionMaxRetry" ng-model="vm.ivrCampaign.dialCongestionMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CONGESTIONMAXRETRY"></span></div>\n                                <div ng-messages="congestionForm[\'dialCongestionMaxRetry\'].$error" ng-show="congestionForm[\'dialCongestionMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONMAXRETRY_REQUIRED">CongestionMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CongestionMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">CongestionMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CONGESTIONRETRYTIME">CongestionRetryTime</label>\n                                <input type="number" name="dialCongestionRetryFrequency" ng-model="vm.ivrCampaign.dialCongestionRetryFrequency" min="1" max="99999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CONGESTIONRETRYTIME"></span></div>\n                                <div ng-messages="congestionForm[\'dialCongestionRetryFrequency\'].$error" ng-show="congestionForm[\'dialCongestionRetryFrequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONRETRYTIME_REQUIRED">CongestionRetryTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONRETRYTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CongestionRetryTime must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONRETRYTIME_MUST_BE_LESS_THAN_OR_EQUAL_TO">CongestionRetryTime must be a valid greater or equal than</span> <span>99999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="ivrCampaign-detail-form-container busy md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.BUSY">BUSY</div>\n                        </div>\n                        <form name="busyForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.BUSYMAXRETRY">BusyMaxRetry</label>\n                                <input type="number" name="dialBusyMaxRetry" ng-model="vm.ivrCampaign.dialBusyMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.BUSYMAXRETRY"></span></div>\n                                <div ng-messages="busyForm[\'dialBusyMaxRetry\'].$error" ng-show="busyForm[\'dialBusyMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYMAXRETRY_REQUIRED">BusyMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">BusyMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">BusyMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.BUSYRETRYTIME">BusyRetryTime</label>\n                                <input type="number" name="dialBusyRetryFrequency" ng-model="vm.ivrCampaign.dialBusyRetryFrequency" min="1" max="99999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.BUSYRETRYTIME"></span></div>\n                                <div ng-messages="busyForm[\'dialBusyRetryFrequency\'].$error" ng-show="busyForm[\'dialBusyRetryFrequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYRETRYTIME_REQUIRED">BusyRetryTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYRETRYTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">BusyRetryTime must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYRETRYTIME_MUST_BE_LESS_THAN_OR_EQUAL_TO">BusyRetryTime must be a valid greater or equal than</span> <span>99999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="ivrCampaign-detail-form-container noanswer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.NOANSWER">NOANSWER</div>\n                        </div>\n                        <form name="noanswerForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.NOANSWERMAXRETRY">NoAnswerMaxRetry</label>\n                                <input type="number" name="dialNoAnswerMaxRetry" ng-model="vm.ivrCampaign.dialNoAnswerMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.NOANSWERMAXRETRY"></span></div>\n                                <div ng-messages="noanswerForm[\'dialNoAnswerMaxRetry\'].$error" ng-show="noanswerForm[\'dialNoAnswerMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERMAXRETRY_REQUIRED">NoAnswerMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">NoAnswerMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">NoAnswerMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.NOANSWERRETRYTIME">NoAnswerRetryTime</label>\n                                <input type="number" name="dialNoAnswerRetryFrequency" ng-model="vm.ivrCampaign.dialNoAnswerRetryFrequency" min="1" max="99999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.NOANSWERRETRYTIME"></span></div>\n                                <div ng-messages="noanswerForm[\'dialNoAnswerRetryFrequency\'].$error" ng-show="noanswerForm[\'dialNoAnswerRetryFrequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERRETRYTIME_REQUIRED">NoAnswerRetryTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERRETRYTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">NoAnswerRetryTime must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERRETRYTIME_MUST_BE_LESS_THAN_OR_EQUAL_TO">NoAnswerRetryTime must be a valid greater or equal than</span> <span>99999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="ivrCampaign-detail-form-container advanced md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.ADVANCED">ADVANCED</div>\n                        </div>\n                        <form name="advancedForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.DIALORDERBYSCHEDULEDAT">DialOrderByScheduledAt</label>\n                                <md-select name="dialOrderByScheduledAt" ng-model="vm.ivrCampaign.dialOrderByScheduledAt" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'DESC\'"> {{ \'MOTIONDIALER.DESC\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'ASC\'"> {{ \'MOTIONDIALER.ASC\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.DIALORDERBYSCHEDULEDAT"></span></div>\n                                <div ng-messages="advancedForm[\'dialOrderByScheduledAt\'].$error" ng-show="advancedForm[\'dialOrderByScheduledAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.DIALORDERBYSCHEDULEDAT_REQUIRED">DialOrderByScheduledAt field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="ivrCampaign-detail-form-container globalinterval md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.GLOBALINTERVAL">GLOBALINTERVAL</div>\n                        </div>\n                        <form name="globalintervalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.GLOBALINTERVAL">GlobalInterval</label>\n                                <input type="text" name="dialGlobalInterval" ng-model="vm.ivrCampaign.dialGlobalInterval" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.GLOBALINTERVAL"></span></div>\n                                <div ng-messages="globalintervalForm[\'dialGlobalInterval\'].$error" ng-show="globalintervalForm[\'dialGlobalInterval\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALINTERVAL_REQUIRED">GlobalInterval field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="ivrCampaign-detail-form-container timezone md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.TIMEZONE">TIMEZONE</div>\n                        </div>\n                        <form name="timezoneForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.TIMEZONE">Timezone</label>\n                                <ms-timezone name="dialTimezone" ng-model="vm.ivrCampaign.dialTimezone" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n                                    < <div class="hint"><span translate="MOTIONDIALER.HELP.TIMEZONE"></span>\n                    </div>\n                    <div ng-messages="timezoneForm[\'dialTimezone\'].$error" ng-show="timezoneForm[dialTimezone].$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="MOTIONDIALER.ERRORS.TIMEZONE_REQUIRED">Timezone field is required</span>\n                        </div>\n                    </div>\n                    </md-input-container>\n\n                    </form>\n    </div>\n    <div class="ivrCampaign-detail-form-container amd md-background-bg md-whiteframe-1dp">\n        <div class="pb-16" layout="row" layout-align="start center">\n            <div class="h2 secondary-text" translate="MOTIONDIALER.AMD">AMD</div>\n        </div>\n        <form name="amdForm" novalidate>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.ivrCampaign.dialAMDActive" aria-label="AMDActive" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.AMDACTIVE">AMDActive</span></md-switch>\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDACTIVE"></span></div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDINITIALSILENCE">AMDInitialSilence</label>\n                <input type="number" name="dialAMDInitialSilence" ng-model="vm.ivrCampaign.dialAMDInitialSilence" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDINITIALSILENCE"></span></div>\n                <div ng-messages="amdForm[\'dialAMDInitialSilence\'].$error" ng-show="amdForm[\'dialAMDInitialSilence\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDINITIALSILENCE_REQUIRED">AMDInitialSilence field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDINITIALSILENCE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDInitialSilence must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDGREETING">AMDGreeting</label>\n                <input type="number" name="dialAMDGreeting" ng-model="vm.ivrCampaign.dialAMDGreeting" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDGREETING"></span></div>\n                <div ng-messages="amdForm[\'dialAMDGreeting\'].$error" ng-show="amdForm[\'dialAMDGreeting\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDGREETING_REQUIRED">AMDGreeting field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDGREETING_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDGreeting must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDAFTERGREETINGSILENCE">AMDAfterGreetingSilence</label>\n                <input type="number" name="dialAMDAfterGreetingSilence" ng-model="vm.ivrCampaign.dialAMDAfterGreetingSilence" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDAFTERGREETINGSILENCE"></span></div>\n                <div ng-messages="amdForm[\'dialAMDAfterGreetingSilence\'].$error" ng-show="amdForm[\'dialAMDAfterGreetingSilence\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDAFTERGREETINGSILENCE_REQUIRED">AMDAfterGreetingSilence field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDAFTERGREETINGSILENCE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDAfterGreetingSilence must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDTOTALANALYSISTIME">AMDTotalAnalysisTime</label>\n                <input type="number" name="dialAMDTotalAnalysisTime" ng-model="vm.ivrCampaign.dialAMDTotalAnalysisTime" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDTOTALANALYSISTIME"></span></div>\n                <div ng-messages="amdForm[\'dialAMDTotalAnalysisTime\'].$error" ng-show="amdForm[\'dialAMDTotalAnalysisTime\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDTOTALANALYSISTIME_REQUIRED">AMDTotalAnalysisTime field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDTOTALANALYSISTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDTotalAnalysisTime must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDMINWORDLENGTH">AMDMinWordLength</label>\n                <input type="number" name="dialAMDMinWordLength" ng-model="vm.ivrCampaign.dialAMDMinWordLength" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDMINWORDLENGTH"></span></div>\n                <div ng-messages="amdForm[\'dialAMDMinWordLength\'].$error" ng-show="amdForm[\'dialAMDMinWordLength\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMINWORDLENGTH_REQUIRED">AMDMinWordLength field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMINWORDLENGTH_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDMinWordLength must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDBETWEENWORDSSILENCE">AMDBetweenWordsSilence</label>\n                <input type="number" name="dialAMDBetweenWordsSilence" ng-model="vm.ivrCampaign.dialAMDBetweenWordsSilence" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDBETWEENWORDSSILENCE"></span></div>\n                <div ng-messages="amdForm[\'dialAMDBetweenWordsSilence\'].$error" ng-show="amdForm[\'dialAMDBetweenWordsSilence\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDBETWEENWORDSSILENCE_REQUIRED">AMDBetweenWordsSilence field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDBETWEENWORDSSILENCE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDBetweenWordsSilence must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDMAXIMUMNUMBEROFWORDS">AMDMaximumNumberOfWords</label>\n                <input type="number" name="dialAMDMaximumNumberOfWords" ng-model="vm.ivrCampaign.dialAMDMaximumNumberOfWords" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDMAXIMUMNUMBEROFWORDS"></span></div>\n                <div ng-messages="amdForm[\'dialAMDMaximumNumberOfWords\'].$error" ng-show="amdForm[\'dialAMDMaximumNumberOfWords\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMNUMBEROFWORDS_REQUIRED">AMDMaximumNumberOfWords field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMNUMBEROFWORDS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDMaximumNumberOfWords must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDSILENCETHRESHOLD">AMDSilenceThreshold</label>\n                <input type="number" name="dialAMDSilenceThreshold" ng-model="vm.ivrCampaign.dialAMDSilenceThreshold" min="0" max="32767" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDSILENCETHRESHOLD"></span></div>\n                <div ng-messages="amdForm[\'dialAMDSilenceThreshold\'].$error" ng-show="amdForm[\'dialAMDSilenceThreshold\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDSILENCETHRESHOLD_REQUIRED">AMDSilenceThreshold field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDSILENCETHRESHOLD_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDSilenceThreshold must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MOTIONDIALER.ERRORS.AMDSILENCETHRESHOLD_MUST_BE_LESS_THAN_OR_EQUAL_TO">AMDSilenceThreshold must be a valid greater or equal than</span> <span>32767</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.ivrCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDMAXIMUMWORDLENGTH">AMDMaximumWordLength</label>\n                <input type="number" name="dialAMDMaximumWordLength" ng-model="vm.ivrCampaign.dialAMDMaximumWordLength" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDMAXIMUMWORDLENGTH"></span></div>\n                <div ng-messages="amdForm[\'dialAMDMaximumWordLength\'].$error" ng-show="amdForm[\'dialAMDMaximumWordLength\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMWORDLENGTH_REQUIRED">AMDMaximumWordLength field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMWORDLENGTH_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDMaximumWordLength must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n        </form>\n    </div>\n    </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.HOPPERS">HOPPERS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="ivrCampaign-detail-form-container hopperstatistics md-background-bg md-whiteframe-1dp">\n                <div ng-controller="IvrCampaignHopperStatisticsController as vm_hs" ng-init="vm_hs.init(vm.ivrCampaign)">\n                    <md-toolbar class="md-table-toolbar md-default">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERWIDGET">Hoppers</span>\n                            <div flex></div>\n                            <md-button class="md-icon-button" ng-click="vm_hs.init(vm.ivrCampaign)" aria-label="refresh Hopper" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    \x3c!-- WIDGET GROUP --\x3e\n                    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n                        \x3c!-- WIDGET 1 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{(vm_hs.total || 0) + (vm_hs.closed || 0)}}</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.TOTAL\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 1 --\x3e\n\n                        \x3c!-- WIDGET 2 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{vm_hs.fresh || 0}} ({{vm_hs.total ? ((((vm_hs.fresh || 0) * 100)/((vm_hs.closed || 0) + (vm_hs.total || 0))) | number: 2) : 0}}%)</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.FRESH\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 2 --\x3e\n\n                        \x3c!-- WIDGET 3 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{vm_hs.total ? (vm_hs.total - (vm_hs.fresh || 0)) : 0}} ({{vm_hs.total ? ((((vm_hs.total - (vm_hs.fresh || 0)) * 100)/((vm_hs.closed || 0) + (vm_hs.total || 0))) | number: 2) : 0}}%)</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.OPEN\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 3 --\x3e\n\n                        \x3c!-- WIDGET 3 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{vm_hs.closed ? (vm_hs.closed || 0) : 0}} ({{vm_hs.closed ? ((((vm_hs.closed) * 100)/(vm_hs.closed + (vm_hs.total || 0))) | number: 2) : 0}}%)</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.CLOSED\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 3 --\x3e\n\n                    </div>\n                    \x3c!-- / WIDGET GROUP --\x3e\n                </div>\n\n            </div>\n            <div class="ivrCampaign-detail-form-container hoppers md-background-bg md-whiteframe-1dp">\n                <div ng-controller="IvrCampaignHoppersController as vm_dc" ng-init="vm_dc.init(vm.ivrCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIvrCampaignHoppers.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERS">Hoppers</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getIvrCampaignHoppers()" aria-label="refresh Hoppers" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIvrCampaignHoppers.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedIvrCampaignHoppers.length}} {{vm_dc.selectedIvrCampaignHoppers.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedIvrCampaignHoppers" csv-label="true" filename="ivrCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedIvrCampaignHoppers($event)" aria-label="delete selected" translate translate-attr-label="IVRCAMPAIGNS.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedIvrCampaignHoppers" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIvrCampaignHoppers">\n                                <tr md-row>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="phone">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column md-order-by="countcongestionretry">{{ \'MOTIONDIALER.CONGESTION\' | translate }}</th>\n                                    <th md-column md-order-by="countbusyretry">{{ \'MOTIONDIALER.BUSY\' | translate }}</th>\n                                    <th md-column md-order-by="countnoanswerretry">{{ \'MOTIONDIALER.NOANSWER\' | translate }}</th>\n                                    <th md-column md-order-by="scheduledat">{{ \'MOTIONDIALER.SCHEDULEDAT\' | translate }}</th>\n                                    <th md-column md-order-by="priority">{{ \'MOTIONDIALER.PRIORITY\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopper" md-select-id="id" ng-repeat="hopper in vm_dc.ivrCampaignHoppers.rows">\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.ContactId}}</td>\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.phone}}</td>\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.countcongestionretry}}</td>\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.countbusyretry}}</td>\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.countnoanswerretry}}</td>\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.scheduledat | date:\'medium\'}}</td>\n                                    <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{ vm_dc.arraypriority[hopper.priority].option }}</td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" translate="MOTIONDIALER.EDIT_HOPPER">\n                                                        Edit Hopper\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(hopper, $event)" translate="MOTIONDIALER.DELETE_HOPPER">\n                                                        Delete Hopper\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.ivrCampaignHoppers.rows.length">\n                                    <td md-cell colspan="10">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPER_AVAILABLE">No hopper available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.ivrCampaignHoppers.count}}" md-on-paginate="vm_dc.getIvrCampaignHoppers" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.HISTORY">HISTORY</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="ivrCampaign-detail-form-container hopperhistories md-background-bg md-whiteframe-1dp">\n                <div ng-controller="IvrCampaignHopperHistoriesController as vm_dc" ng-init="vm_dc.init(vm.ivrCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIvrCampaignHopperHistories.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERHISTORIES">HopperHistories</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getIvrCampaignHopperHistories()" aria-label="refresh HopperHistories" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERHISTORIES">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIvrCampaignHopperHistories.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedIvrCampaignHopperHistories.length}} {{vm_dc.selectedIvrCampaignHopperHistories.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedIvrCampaignHopperHistories" csv-label="true" filename="ivrCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedIvrCampaignHopperHistories" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIvrCampaignHopperHistories">\n                                <tr md-row>\n                                    <th md-column md-order-by="uniqueid">{{ \'MOTIONDIALER.UNIQUEID\' | translate }}</th>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="calleridnum">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column md-order-by="calleridname">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                                    <th md-column md-order-by="statedesc">{{ \'MOTIONDIALER.STATUS\' | translate }}</th>\n                                    <th md-column md-order-by="scheduledat">{{ \'MOTIONDIALER.SCHEDULEDAT\' | translate }}</th>\n                                    <th md-column md-order-by="starttime">{{ \'MOTIONDIALER.STARTTIME\' | translate }}</th>\n                                    <th md-column md-order-by="endtime">{{ \'MOTIONDIALER.ENDTIME\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopperHistory" md-select-id="id" ng-repeat="hopperHistory in vm_dc.ivrCampaignHopperHistories.rows">\n                                    <td md-cell>{{hopperHistory.uniqueid}}</td>\n                                    <td md-cell>{{hopperHistory.ContactId}}</td>\n                                    <td md-cell>{{hopperHistory.calleridnum}}</td>\n                                    <td md-cell>{{hopperHistory.calleridname}}</td>\n                                    <td md-cell>{{hopperHistory.statedesc}}</td>\n                                    <td md-cell>{{hopperHistory.scheduledat | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperHistory.starttime | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperHistory.endtime | date:\'medium\'}}</td>\n                                    <td md-cell class="actions">\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.ivrCampaignHopperHistories.rows.length">\n                                    <td md-cell colspan="11">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERHISTORY_AVAILABLE">No hopperhistory available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.ivrCampaignHopperHistories.count}}" md-on-paginate="vm_dc.getIvrCampaignHopperHistories" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.FINAL">FINAL</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="ivrCampaign-detail-form-container hopperfinals md-background-bg md-whiteframe-1dp">\n                <div ng-controller="IvrCampaignHopperFinalsController as vm_dc" ng-init="vm_dc.init(vm.ivrCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIvrCampaignHopperFinals.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERFINALS">HopperFinals</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getIvrCampaignHopperFinals()" aria-label="refresh HopperFinals" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERFINALS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                            <td md-cell class="actions">\n                                <md-menu>\n                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="vm_dc.countContactsIvrCampaignHopperFinal(vm_dc.query.id); $mdOpenMenu($event);">\n                                        <md-icon md-font-icon="icon-backup-restore"></md-icon>\n                                        <md-tooltip><span translate="MOTIONDIALER.RESTORECONTACTS"></span></md-tooltip>\n                                    </md-button>\n                                    <md-menu-content width="3">\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(3)">\n                                                <span translate="MOTIONDIALER.NOANSWER ">NoAnswer</span>\n                                                <span class="badge">({{vm_dc.contacts.noAnswerContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(5)">\n                                                <span translate="MOTIONDIALER.BUSY ">Busy</span>\n                                                <span class="badge">({{vm_dc.contacts.busyContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(8)">\n                                                <span translate="MOTIONDIALER.CONGESTION ">Congestion</span>\n                                                <span class="badge">({{vm_dc.contacts.congestionContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(10)">\n                                                <span translate="MOTIONDIALER.DROPPED ">Drop</span>\n                                                <span class="badge">({{vm_dc.contacts.dropContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(11)">\n                                                <span translate="MOTIONDIALER.ABANDONED ">Abandoned</span>\n                                                <span class="badge">({{vm_dc.contacts.abandonedContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(22)">\n                                                <span translate="MOTIONDIALER.RECALLFAILEDTIMEOUT">Recall</span>\n                                                <span class="badge">({{vm_dc.contacts.reCallContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(0)">\n                                                <span translate="MOTIONDIALER.NO_SUCH_NUMBER">NoSuchNumber</span>\n                                                <span class="badge">({{vm_dc.contacts.noSuchContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item>\n                                            <md-button ng-click="vm_dc.moveContactsIvrCampaignHopperFinal(19)">\n                                                <span translate="MOTIONDIALER.ANSWERING_MACHINE">AnsweringMachine</span>\n                                                <span class="badge">({{vm_dc.contacts.answeringMachine}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </td>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIvrCampaignHopperFinals.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedIvrCampaignHopperFinals.length}} {{vm_dc.selectedIvrCampaignHopperFinals.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedIvrCampaignHopperFinals" csv-label="true" filename="ivrCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.moveSelectedIvrCampaignHopperFinals($event)" aria-label="move selected" translate translate-attr-label="IVRCAMPAIGNS.MOVE_SELECTED">\n                                <md-icon md-font-icon="icon-restore"></md-icon>\n                                <md-tooltip><span translate="MOTIONDIALER.RESTORECONTACTS"></span></md-tooltip>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedIvrCampaignHopperFinals" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIvrCampaignHopperFinals">\n                                <tr md-row>\n                                    <th md-column md-order-by="uniqueid">{{ \'MOTIONDIALER.UNIQUEID\' | translate }}</th>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="calleridnum">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column md-order-by="calleridname">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                                    <th md-column md-order-by="statedesc">{{ \'MOTIONDIALER.STATUS\' | translate }}</th>\n                                    <th md-column md-order-by="countcongestionretry">{{ \'MOTIONDIALER.CONGESTION\' | translate }}</th>\n                                    <th md-column md-order-by="countbusyretry">{{ \'MOTIONDIALER.BUSY\' | translate }}</th>\n                                    <th md-column md-order-by="countnoanswerretry">{{ \'MOTIONDIALER.NOANSWER\' | translate }}</th>\n                                    <th md-column md-order-by="starttime">{{ \'MOTIONDIALER.STARTTIME\' | translate }}</th>\n                                    <th md-column md-order-by="endtime">{{ \'MOTIONDIALER.ENDTIME\' | translate }}</th>\n                                    <th md-column md-order-by="disposition">{{ \'MOTIONDIALER.DISPOSITION\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopperFinal" md-select-id="id" ng-repeat="hopperFinal in vm_dc.ivrCampaignHopperFinals.rows">\n                                    <td md-cell>{{hopperFinal.uniqueid}}</td>\n                                    <td md-cell>{{hopperFinal.ContactId}}</td>\n                                    <td md-cell>{{hopperFinal.calleridnum}}</td>\n                                    <td md-cell>{{hopperFinal.calleridname}}</td>\n                                    <td md-cell>{{hopperFinal.statedesc}}</td>\n                                    <td md-cell>{{hopperFinal.countcongestionretry}}</td>\n                                    <td md-cell>{{hopperFinal.countbusyretry}}</td>\n                                    <td md-cell>{{hopperFinal.countnoanswerretry}}</td>\n                                    <td md-cell>{{hopperFinal.starttime | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperFinal.endtime | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperFinal.disposition}}</td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.moveConfirm(hopperFinal, $event)" translate="MOTIONDIALER.MOVE_HOPPERFINAL">\n                                                        Move HopperFinal\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.ivrCampaignHopperFinals.rows.length">\n                                    <td md-cell colspan="23">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERFINAL_AVAILABLE">No hopperfinal available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.ivrCampaignHopperFinals.count}}" md-on-paginate="vm_dc.getIvrCampaignHopperFinals" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.BLACKLIST">BLACKLIST</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="ivrCampaign-detail-form-container hopperblacks md-background-bg md-whiteframe-1dp">\n                <div ng-controller="IvrCampaignHopperBlacksController as vm_dc" ng-init="vm_dc.init(vm.ivrCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIvrCampaignHopperBlacks.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERBLACKS">HopperBlacks</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIvrCampaignHopperBlacks.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedIvrCampaignHopperBlacks.length}} {{vm_dc.selectedIvrCampaignHopperBlacks.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedIvrCampaignHopperBlacks" csv-label="true" filename="ivrCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedIvrCampaignHopperBlacks" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIvrCampaignHopperBlacks">\n                                <tr md-row>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="phone">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopperBlack" md-select-id="id" ng-repeat="hopperBlack in vm_dc.ivrCampaignHopperBlacks.rows">\n                                    <td md-cell>{{hopperBlack.ContactId}}</td>\n                                    <td md-cell>{{hopperBlack.phone}}</td>\n                                    <td md-cell class="actions">\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.ivrCampaignHopperBlacks.rows.length">\n                                    <td md-cell colspan="4">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERBLACK_AVAILABLE">No hopperblack available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.ivrCampaignHopperBlacks.count}}" md-on-paginate="vm_dc.getIvrCampaignHopperBlacks" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    </md-tabs>\n\n</div>\n\x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/motiondialer/views/ivrCampaigns/ivrCampaigns.html",'<div id="ivrCampaigns" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-fire" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="MOTIONDIALER.IVRCAMPAIGNS">IvrCampaigns</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="MOTIONDIALER.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedIvrCampaigns.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedIvrCampaigns =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="MOTIONDIALER.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-ivrCampaigns-count">\n                    <span>{{vm.selectedIvrCampaigns.length}}</span>\n                    <span translate="MOTIONDIALER.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="IVRCAMPAIGNS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllIvrCampaigns()" translate="MOTIONDIALER.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectIvrCampaigns()" translate="MOTIONDIALER.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedIvrCampaigns" csv-label="true" filename="ivrCampaigns.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedIvrCampaigns($event)" aria-label="delete selected" translate translate-attr-label="IVRCAMPAIGNS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- IVRCAMPAIGN TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedIvrCampaigns" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getIvrCampaigns">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'MOTIONDIALER.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                                <th md-column md-order-by="active">{{ \'MOTIONDIALER.ACTIVE\' | translate }}</th>\n                                <th md-column md-order-by="TrunkId">{{ \'MOTIONDIALER.TRUNK\' | translate }}</th>\n                                <th md-column md-order-by="SquareProjectId">{{ \'MOTIONDIALER.CALLYSQUAREPROJECT\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.ivrCampaigns.rows.length">\n                                <td md-cell colspan="6">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="ivrCampaign" md-select-id="id" ng-repeat="ivrCampaign in vm.ivrCampaigns.rows">\n                                <td md-cell ng-if="ivrCampaign.userpic"><img class="avatar" alt="{{ivrCampaign.name}}" ng-src="api/users/{{ivrCampaign.id}}/avatar" /></td>\n                                <td md-cell ng-if="!ivrCampaign.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{ivrCampaign.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(ivrCampaign, ev) : vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="id ">{{ivrCampaign.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(ivrCampaign, ev) : vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="name ">{{ivrCampaign.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(ivrCampaign, ev) : vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="active ">\n                                    <md-icon md-colors="{color: {{ivrCampaign.active ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{ivrCampaign.active ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(ivrCampaign, ev) : vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="TrunkId ">{{ (vm.trunks | filter : {\'id\':ivrCampaign.TrunkId} : true)[0].name }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(ivrCampaign, ev) : vm.createOrEditIvrCampaign($event, ivrCampaign)" md-cell class="SquareProjectId ">{{ (vm.projects | filter : {\'id\':ivrCampaign.SquareProjectId} : true)[0].name }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(ivrCampaign, $event    )" translate="MOTIONDIALER.EDIT_IVRCAMPAIGN">\n                                                    Edit IvrCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.clonedialog(ivrCampaign, $event    )" translate="MOTIONDIALER.CLONE_IVRCAMPAIGN">\n                                                    clone IvrCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.listadddialog(ivrCampaign, $event    )" translate="MOTIONDIALER.LISTADD_IVRCAMPAIGN">\n                                                    listadd IvrCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.blacklistadddialog(ivrCampaign, $event    )" translate="MOTIONDIALER.BLACKLISTADD_IVRCAMPAIGN">\n                                                    blacklistadd IvrCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(ivrCampaign, $event    )" translate="MOTIONDIALER.DELETE_IVRCAMPAIGN">\n                                                    Delete IvrCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(ivrCampaign, $event    )" translate="MOTIONDIALER.GOTOREALTIME_IVRCAMPAIGN">\n                                                    goToRealtime IvrCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.ivrCampaigns.count}}" md-on-paginate="vm.getIvrCampaigns" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / IVRCAMPAIGN TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD IVRCAMPAIGN BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-ivrCampaign-button" ng-click="vm.createOrEditIvrCampaign($event)" aria-label="add ivrCampaign" translate translate-attr-aria-label="MOTIONDIALER.ADD_IVRCAMPAIGN">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD IVRCAMPAIGN BUTTON --\x3e\n</div>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/create/dialog.html",'<md-dialog class="queueCampaign-dialog" aria-label="New QueueCampaign">\n    <form name="queueCampaignForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.queueCampaign.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newQueueCampaign">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.NAME"></span></div>\n                <div ng-messages="queueCampaignForm[\'name\'].$error" ng-show="queueCampaignForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.queueCampaign.dialActive" aria-label="Active"><span translate="MOTIONDIALER.ACTIVE">Active</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.TRUNK">Trunk</label>\n                <md-select name="TrunkId" ng-model="vm.queueCampaign.TrunkId" required>\n                    <md-option ng-value="TrunkId.id" ng-repeat="TrunkId in vm.trunks" ng-disabled="TrunkId.canSelect === false">{{ TrunkId.name }}</md-option>\n                </md-select>\n                <div ng-messages="queueCampaignForm[\'TrunkId\'].$error" ng-show="queueCampaignForm[\'TrunkId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod != \'preview\'" class="md-block">\n                <label translate="MOTIONDIALER.INTERVAL">Interval</label>\n                <md-select name="IntervalId" ng-model="vm.queueCampaign.IntervalId" required>\n                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval" ng-disabled="IntervalId.canSelect === false">{{ IntervalId.name }}</md-option>\n                </md-select>\n                <div ng-messages="queueCampaignForm[\'IntervalId\'].$error" ng-show="queueCampaignForm[\'IntervalId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.INTERVAL_REQUIRED">Interval field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.CHECKDUPLICATE">CheckDuplicate</label>\n                <md-select name="dialCheckDuplicateType" ng-model="vm.queueCampaign.dialCheckDuplicateType" required>\n\n                    <md-option ng-value="\'always\'"> {{ \'MOTIONDIALER.ALWAYS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'never\'"> {{ \'MOTIONDIALER.NEVER\' | translate }} </md-option>\n\n                    <md-option ng-value="\'onlyIfOpen\'"> {{ \'MOTIONDIALER.ONLY_IF_OPEN\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="queueCampaignForm[\'dialCheckDuplicateType\'].$error" ng-show="queueCampaignForm[\'dialCheckDuplicateType\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.CHECKDUPLICATE_REQUIRED">CheckDuplicate field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.METHOD">Method</label>\n                <md-select name="dialMethod" ng-model="vm.queueCampaign.dialMethod" required>\n                    <md-option ng-value="\'progressive\'">Progressive</md-option>\n                    <md-option ng-value="\'power\'">PowerDialing</md-option>\n                    <md-option ng-value="\'predictive\'">Predictive</md-option>\n                    <md-option ng-value="\'preview\'">Preview</md-option>\n                    <md-option ng-value="\'booked\'">BookedProgressive</md-option>\n                </md-select>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.METHOD"></span></div>\n                <div ng-messages="queueCampaignForm[\'dialMethod\'].$error" ng-show="queueCampaignForm[\'dialMethod\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.METHOD_REQUIRED">Method field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'power\'" class="md-block">\n                <span translate="MOTIONDIALER.POWERLEVEL">PowerLevel</span>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.POWERLEVEL"></span></div>\n                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPowerLevel" min="1" max="10" step="0.1" class="md-accent">\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                <label translate="MOTIONDIALER.PREDICTIVEOPTIMIZATION">PredictiveOptimization</label>\n                <md-select name="dialPredictiveOptimization" ng-model="vm.queueCampaign.dialPredictiveOptimization">\n\n                    <md-option ng-value="\'agentBusyFactor\'"> {{ \'MOTIONDIALER.AGENTBUSYFACTOR\' | translate }} </md-option>\n\n                    <md-option ng-value="\'dropRate\'"> {{ \'MOTIONDIALER.DROPRATE\' | translate }} </md-option>\n                </md-select>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEOPTIMIZATION"></span></div>\n                <div ng-messages="queueCampaignForm[\'dialPredictiveOptimization\'].$error" ng-show="queueCampaignForm[\'dialPredictiveOptimization\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.PREDICTIVEOPTIMIZATION_REQUIRED">PredictiveOptimization field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                <span translate="MOTIONDIALER.PREDICTIVEOPTIMIZATIONPERCENTAGE">PredictiveOptimizationPercentage</span>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEOPTIMIZATIONPERCENTAGE"></span></div>\n                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPredictiveOptimizationPercentage" min="1" max="95" step="0.1" class="md-accent">\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                <span translate="MOTIONDIALER.PREDICTIVEINTERVAL">PredictiveInterval</span>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEINTERVAL"></span></div>\n                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPredictiveInterval" min="5" max="30" step="1" class="md-accent">\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod != \'preview\'" class="md-block">\n                <label translate="MOTIONDIALER.MAXCONCURRENTCALLS">MaxConcurrentCalls</label>\n                <input type="number" name="dialLimitQueue" ng-model="vm.queueCampaign.dialLimitQueue" min="0" max="9999" ng-required="true">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.MAXCONCURRENTCALLS"></span></div>\n                <div ng-messages="queueCampaignForm[\'dialLimitQueue\'].$error" ng-show="queueCampaignForm[\'dialLimitQueue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_REQUIRED">MaxConcurrentCalls field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MaxConcurrentCalls must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_MUST_BE_LESS_THAN_OR_EQUAL_TO">MaxConcurrentCalls must be a valid greater or equal than</span> <span>9999</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                <label translate="MOTIONDIALER.QUEUETIMEOUT">QueueTimeout</label>\n                <input type="number" name="dialQueueTimeout" ng-model="vm.queueCampaign.dialQueueTimeout" min="1" max="999" ng-required="true">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.QUEUETIMEOUT"></span></div>\n                <div ng-messages="queueCampaignForm[\'dialQueueTimeout\'].$error" ng-show="queueCampaignForm[\'dialQueueTimeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_REQUIRED">QueueTimeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">QueueTimeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">QueueTimeout must be a valid greater or equal than</span> <span>999</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.AGENTTIMEOUT">AgentTimeout</label>\n                <input type="number" name="timeout" ng-model="vm.queueCampaign.timeout" min="0" ng-required="true">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AGENTTIMEOUT"></span></div>\n                <div ng-messages="queueCampaignForm[\'timeout\'].$error" ng-show="queueCampaignForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AGENTTIMEOUT_REQUIRED">AgentTimeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AGENTTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AgentTimeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.queueCampaign.description">\n\n                <div ng-messages="queueCampaignForm[\'description\'].$error" ng-show="queueCampaignForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newQueueCampaign" ng-click="vm.saveQueueCampaign()" class="send-button md-accent md-raised" ng-disabled="queueCampaignForm.$invalid || queueCampaignForm.$pristine" aria-label="SAVE" translate="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newQueueCampaign" ng-click="vm.addNewQueueCampaign()" class="send-button md-accent md-raised" ng-disabled="queueCampaignForm.$invalid" aria-label="ADD" translate="MOTIONDIALER.ADD_QUEUECAMPAIGN" translate-attr-aria-label="MOTIONDIALER.ADD_QUEUECAMPAIGN">\n                    ADD QUEUECAMPAIGN\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newQueueCampaign" ng-click="vm.deleteQueueCampaign($event)" aria-label="DELETE" translate translate-attr-aria-label="MOTIONDIALER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MOTIONDIALER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/agentadd/agentadd.html",'<md-dialog class="queueCampaign-dialog" aria-label="queueCampaign" ng-init="vm.onInit()">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.AGENTADD_QUEUECAMPAIGN">Add Agent to queueCampaign</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <md-input-container flex class="no-margin">\n                <label translate="MOTIONDIALER.PENALTY">Penalty</label>\n                <input name="penalty" ng-model="vm.penalty" placeholder="0" required md-minlength="0" md-maxlength="3">\n                <div ng-messages="queueCampaignForm.penalty.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span>You must supply a penalty.</span>\n                    </div>\n                    <div ng-message="md-minlength">\n                        <span>Min Penalty 0 characters.</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span>Max Penalty 3 characters.</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/blacklistadd/blacklistadd.html",'<md-dialog class="queueCampaign-dialog" aria-label="queueCampaign" ng-init="vm.onInit()">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.BLACKLISTADD_QUEUECAMPAIGN">Add List in QUEUECAMPAIGN</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect ng-hide="vm.loading" options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n            <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n                <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveLists()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/clone/clone.html",'<md-dialog class="queueCampaign-dialog" aria-label="Clone QueueCampaign">\n    <form name="queueCampaignForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.queueCampaign.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newQueueCampaign">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.NAME"></span></div>\n                <div ng-messages="queueCampaignForm[\'name\'].$error" ng-show="queueCampaignForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="MOTIONDIALER.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.queueCampaign.dialActive" aria-label="Active"><span translate="MOTIONDIALER.ACTIVE">Active</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <md-button type="submit" ng-click="vm.cloneQueueCampaign()" class="send-button md-accent md-raised" ng-disabled="queueCampaignForm.$invalid" aria-label="CLONE" translate="MOTIONDIALER.CLONE_QUEUECAMPAIGN" translate-attr-aria-label="MOTIONDIALER.CLONE_QUEUECAMPAIGN">\n                CLONE QUEUECAMPAIGN\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/hoppers/dialog.html",'<md-dialog class="hopper-dialog" aria-label="New Hopper">\n    <form name="hopperForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div class="md-block">\n                <label translate="MOTIONDIALER.SCHEDULEDAT">ScheduledAt</label>\n                <md-content layout="row" class="md-padding">\n                    <div flex class="md-block">\n                        <mdp-date-picker mdp-open-on-click name="scheduledatDate" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" ng-model="vm.hopper.scheduledat" ng-init="vm.hopper.scheduledat = vm.getDateFromString(vm.hopper.scheduledat)">\n                            <div ng-messages="hopperForm.dateRangeFrom.$error" ng-show="hopperForm.dateRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="MOTIONDIALER.ERRORS.DATE_REQUIRED">Date is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="MOTIONDIALER.ERRORS.DATE_INVALID">Date is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-date-picker>\n                    </div>\n                    <div flex class="md-block">\n                        <mdp-time-picker mdp-open-on-click name="scheduledatTime" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.hopper.scheduledat" ng-init="vm.hopper.scheduledat = vm.getDateFromString(vm.hopper.scheduledat)">\n                            <div ng-messages="hopperForm.timeRangeFrom.$error" ng-show="hopperForm.timeRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="MOTIONDIALER.ERRORS.TIME_REQUIRED">Time is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="MOTIONDIALER.ERRORS.TIME_INVALID">Time is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-time-picker>\n                    </div>\n                </md-content>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="MOTIONDIALER.PRIORITY">Priority</label>\n                <md-select name="priority" ng-model="vm.hopper.priority">\n                    <md-option ng-value="\'4\'">Highest</md-option>\n                    <md-option ng-value="\'3\'">High</md-option>\n                    <md-option ng-value="\'2\'">Medium</md-option>\n                    <md-option ng-value="\'1\'">Low</md-option>\n                    <md-option ng-value="\'0\'">Lowest</md-option>\n                </md-select>\n                <div class="hint"><span translate="MOTIONDIALER.HELP.PRIORITY"></span></div>\n                <div ng-messages="hopperForm[\'priority\'].$error" ng-show="hopperForm[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.hopper.recallme" aria-label="RecallAgent"><span translate="MOTIONDIALER.RECALLAGENT">RecallAgent</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.hopper.recallme" class="md-block">\n                <label translate="MOTIONDIALER.AGENT">Agent</label>\n                <md-select name="UserId" ng-model="vm.hopper.UserId" required>\n                    <md-option ng-value="UserId.id" ng-repeat="UserId in vm.agents" ng-disabled="UserId.canSelect === false">{{ UserId.name }}</md-option>\n                </md-select>\n                <div ng-messages="hopperForm[\'UserId\'].$error" ng-show="hopperForm[\'UserId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newHopper" ng-click="vm.saveHopper()" class="send-button md-accent md-raised" ng-disabled="hopperForm.$invalid || hopperForm.$pristine" aria-label="SAVE" translate="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newHopper" ng-click="vm.addNewHopper()" class="send-button md-accent md-raised" ng-disabled="hopperForm.$invalid" aria-label="ADD" translate="MOTIONDIALER.ADD_HOPPER" translate-attr-aria-label="MOTIONDIALER.ADD_HOPPER">\n                    ADD HOPPER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newHopper" ng-click="vm.deleteHopper($event)" aria-label="DELETE" translate translate-attr-aria-label="MOTIONDIALER.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="MOTIONDIALER.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/listadd/listadd.html",'<md-dialog class="queueCampaign-dialog" aria-label="queueCampaign" ng-init="vm.onInit()">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.LISTADD_QUEUECAMPAIGN">Add List in QUEUECAMPAIGN</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect ng-hide="vm.loading" options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n            <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n                <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveLists()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/resetlist/resetlist.html",'<md-dialog class="queueCampaign-dialog" aria-label="queueCampaign">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.RESETLIST ">Reset List</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-disabled="vm.loading" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ng-hide="vm.loading">\n            <div layout="row" layout-wrap flex>\n                <div flex-xs flex="50">\n                    <md-checkbox aria-label="Select All" ng-checked="vm.isChecked()" md-indeterminate="vm.isIndeterminate()" ng-click="vm.toggleAll()">\n                        <span ng-if="vm.isChecked()" translate="MOTIONDIALER.UNSELECTALL"></span>\n                        <span ng-if="!vm.isChecked()" translate="MOTIONDIALER.SELECTALL"></span>\n                    </md-checkbox>\n                </div>\n                <div flex-xs flex="50">\n                </div>\n                <div flex="{{vm.items.length > 10 ? 50 : 100 }}" ng-repeat="item in vm.items">\n                    <md-checkbox ng-checked="vm.exists(item, vm.selected)" ng-click="vm.toggle(item, vm.selected)">\n                        {{ item.name | limitTo:40 }}\n                    </md-checkbox>\n                </div>\n            </div>\n        </md-dialog-content>\n        <md-dialog-actions ng-hide="vm.loading" layout="row" layout-align="end center">\n            <div>\n            </div>\n            <md-button type="submit" ng-click="vm.listSelected()" class="send-button md-accent md-raised" ng-disabled="vm.loading" aria-label="RESET" translate="MOTIONDIALER.RESET" translate-attr-aria-label="MOTIONDIALER.RESET">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n        <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n            <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n        </div>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/teamadd/teamadd.html",'<md-dialog class="queueCampaign-dialog" aria-label="queueCampaign" ng-init="vm.onInit()">\n    <form name="queueCampaignForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="MOTIONDIALER.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <md-input-container flex class="no-margin">\n                <label translate="MOTIONDIALER.PENALTY">Penalty</label>\n                <input name="penalty" ng-model="vm.penalty" placeholder="0" required md-minlength="0" md-maxlength="3">\n                <div ng-messages="queueCampaignForm.penalty.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span>You must supply a penalty.</span>\n                    </div>\n                    <div ng-message="md-minlength">\n                        <span>Min Penalty 0 characters.</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span>Max Penalty 3 characters.</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/edit/view.html",'<div id="motiondialer-queueCampaign" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-queueCampaigns-button md-icon-button" aria-label="Go to queueCampaigns" ng-click="vm.gotoQueueCampaigns()" translate translate-attr-aria-label="MOTIONDIALER.GO_TO_QUEUECAMPAIGNS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="queueCampaign-image" hide-xs>\n                    <img ng-src="assets/images/business/queueCampaigns.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.queueCampaign.id}}\n                        <span ng-if="vm.queueCampaign.name">{{vm.queueCampaign.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="MOTIONDIALER.CREATED_AT"></span> <span>{{vm.queueCampaign.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.clonedialog(vm.queueCampaign, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="clone">\n                <md-tooltip><span translate="MOTIONDIALER.CLONE_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.listadddialog(vm.queueCampaign, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="listadd">\n                <md-tooltip><span translate="MOTIONDIALER.LISTADD_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-format-list-numbers"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.blacklistadddialog(vm.queueCampaign, $event)" class="md-fab md-warn md-icon-button" aria-label="blacklistadd">\n                <md-tooltip><span translate="MOTIONDIALER.BLACKLISTADD_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-block-helper"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.queueCampaign, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="MOTIONDIALER.TEAMADD_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.queueCampaign, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="MOTIONDIALER.AGENTADD_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.resetlistdialog(vm.queueCampaign, $event)" class="md-fab md-warn md-icon-button" aria-label="resetlist">\n                <md-tooltip><span translate="MOTIONDIALER.RESETLIST_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-restore"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.queueCampaign, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="MOTIONDIALER.GOTO_QUEUECAMPAIGN"></span></md-tooltip>\n                <md-icon md-font-icon="icon-cast"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveQueueCampaign()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (campaignForm.$invalid) || (queueForm.$invalid) || (originateForm.$invalid) || (globalForm.$invalid) || (congestionForm.$invalid) || (busyForm.$invalid) || (noanswerForm.$invalid) || (advancedForm.$invalid) || (advancedpreviewForm.$invalid) || (thresholdsForm.$invalid) || (recallmeForm.$invalid) || (globalintervalForm.$invalid) || (timezoneForm.$invalid) || (amdForm.$invalid) || (hopperStatisticsForm.$invalid) || (hoppersForm.$invalid) || (hopperHistoriesForm.$invalid) || (hopperFinalsForm.$invalid) || (hopperBlacksForm.$invalid)" translate="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="queueCampaign-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.queueCampaign.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MOTIONDIALER.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.dialActive" aria-label="Active" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.ACTIVE">Active</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.TRUNK">Trunk</label>\n                                <md-select name="TrunkId" ng-model="vm.queueCampaign.TrunkId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="TrunkId.id" ng-repeat="TrunkId in vm.trunks" ng-disabled="TrunkId.canSelect === false">{{ TrunkId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'TrunkId\'].$error" ng-show="generalForm[\'TrunkId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.BACKUPTRUNK">BackupTrunk</label>\n                                <md-select name="TrunkBackupId" ng-model="vm.queueCampaign.TrunkBackupId" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="TrunkBackupId.id" ng-repeat="TrunkBackupId in vm.trunks" ng-disabled="TrunkBackupId.canSelect === false">{{ TrunkBackupId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'TrunkBackupId\'].$error" ng-show="generalForm[\'TrunkBackupId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.BACKUPTRUNK_REQUIRED">BackupTrunk field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod != \'preview\'" class="md-block">\n                                <label translate="MOTIONDIALER.INTERVAL">Interval</label>\n                                <md-select name="IntervalId" ng-model="vm.queueCampaign.IntervalId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval" ng-disabled="IntervalId.canSelect === false">{{ IntervalId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'IntervalId\'].$error" ng-show="generalForm[\'IntervalId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.INTERVAL_REQUIRED">Interval field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CHECKDUPLICATE">CheckDuplicate</label>\n                                <md-select name="dialCheckDuplicateType" ng-model="vm.queueCampaign.dialCheckDuplicateType" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'always\'"> {{ \'MOTIONDIALER.ALWAYS\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'never\'"> {{ \'MOTIONDIALER.NEVER\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'onlyIfOpen\'"> {{ \'MOTIONDIALER.ONLY_IF_OPEN\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'dialCheckDuplicateType\'].$error" ng-show="generalForm[\'dialCheckDuplicateType\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CHECKDUPLICATE_REQUIRED">CheckDuplicate field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CUTDIGIT">CutDigit</label>\n                                <input type="number" name="dialCutDigit" ng-model="vm.queueCampaign.dialCutDigit" min="0" max="15" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'dialCutDigit\'].$error" ng-show="generalForm[\'dialCutDigit\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CUTDIGIT_REQUIRED">CutDigit field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CUTDIGIT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CutDigit must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CUTDIGIT_MUST_BE_LESS_THAN_OR_EQUAL_TO">CutDigit must be a valid greater or equal than</span> <span>15</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.queueCampaign.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.CAMPAIGN">CAMPAIGN</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="queueCampaign-detail-form-container campaign md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.CAMPAIGN">CAMPAIGN</div>\n                        </div>\n                        <form name="campaignForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.METHOD">Method</label>\n                                <md-select name="dialMethod" ng-model="vm.queueCampaign.dialMethod" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'progressive\'">Progressive</md-option>\n                                    <md-option ng-value="\'power\'">PowerDialing</md-option>\n                                    <md-option ng-value="\'predictive\'">Predictive</md-option>\n                                    <md-option ng-value="\'preview\'">Preview</md-option>\n                                    <md-option ng-value="\'booked\'">BookedProgressive</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.METHOD"></span></div>\n                                <div ng-messages="campaignForm[\'dialMethod\'].$error" ng-show="campaignForm[\'dialMethod\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.METHOD_REQUIRED">Method field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'power\'" class="md-block">\n                                <span translate="MOTIONDIALER.POWERLEVEL">PowerLevel</span>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.POWERLEVEL"></span></div>\n                                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPowerLevel" min="1" max="10" step="0.1" class="md-accent">\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                                <label translate="MOTIONDIALER.PREDICTIVEOPTIMIZATION">PredictiveOptimization</label>\n                                <md-select name="dialPredictiveOptimization" ng-model="vm.queueCampaign.dialPredictiveOptimization" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'agentBusyFactor\'"> {{ \'MOTIONDIALER.AGENTBUSYFACTOR\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'dropRate\'"> {{ \'MOTIONDIALER.DROPRATE\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEOPTIMIZATION"></span></div>\n                                <div ng-messages="campaignForm[\'dialPredictiveOptimization\'].$error" ng-show="campaignForm[\'dialPredictiveOptimization\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.PREDICTIVEOPTIMIZATION_REQUIRED">PredictiveOptimization field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                                <span translate="MOTIONDIALER.PREDICTIVEOPTIMIZATIONPERCENTAGE">PredictiveOptimizationPercentage</span>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEOPTIMIZATIONPERCENTAGE"></span></div>\n                                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPredictiveOptimizationPercentage" min="1" max="95" step="0.1" class="md-accent">\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                                <span translate="MOTIONDIALER.PREDICTIVEINTERVAL">PredictiveInterval</span>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEINTERVAL"></span></div>\n                                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPredictiveInterval" min="5" max="30" step="1" class="md-accent">\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod != \'preview\'" class="md-block">\n                                <label translate="MOTIONDIALER.MAXCONCURRENTCALLS">MaxConcurrentCalls</label>\n                                <input type="number" name="dialLimitQueue" ng-model="vm.queueCampaign.dialLimitQueue" min="0" max="9999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MAXCONCURRENTCALLS"></span></div>\n                                <div ng-messages="campaignForm[\'dialLimitQueue\'].$error" ng-show="campaignForm[\'dialLimitQueue\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_REQUIRED">MaxConcurrentCalls field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MaxConcurrentCalls must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_MUST_BE_LESS_THAN_OR_EQUAL_TO">MaxConcurrentCalls must be a valid greater or equal than</span> <span>9999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.AGENTTIMEOUT">AgentTimeout</label>\n                                <input type="number" name="timeout" ng-model="vm.queueCampaign.timeout" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.AGENTTIMEOUT"></span></div>\n                                <div ng-messages="campaignForm[\'timeout\'].$error" ng-show="campaignForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.AGENTTIMEOUT_REQUIRED">AgentTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.AGENTTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AgentTimeout must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="queueCampaign-detail-form-container queue md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.QUEUE">QUEUE</div>\n                        </div>\n                        <form name="queueForm" novalidate>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.QUEUEOPTIONS">QueueOptions</label>\n                                <input type="text" name="dialQueueOptions" ng-model="vm.queueCampaign.dialQueueOptions" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="queueForm[\'dialQueueOptions\'].$error" ng-show="queueForm[\'dialQueueOptions\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.QUEUEOPTIONS_REQUIRED">QueueOptions field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.QUEUETIMEOUT">QueueTimeout</label>\n                                <input type="number" name="dialQueueTimeout" ng-model="vm.queueCampaign.dialQueueTimeout" min="1" max="999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.QUEUETIMEOUT"></span></div>\n                                <div ng-messages="queueForm[\'dialQueueTimeout\'].$error" ng-show="queueForm[\'dialQueueTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_REQUIRED">QueueTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">QueueTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">QueueTimeout must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'booked\' || vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.queueCampaign.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'rrmemory\'">Round Robin Memory</md-option>\n                                    <md-option ng-value="\'roundrobin\'" ng-if="vm.queueCampaign.dialMethod === \'booked\'">Round Robin</md-option>\n                                    <md-option ng-value="\'leastrecent\'" ng-if="vm.queueCampaign.dialMethod !== \'booked\'">Least Recent</md-option>\n                                    <md-option ng-value="\'fewestcalls\'" ng-if="vm.queueCampaign.dialMethod !== \'booked\'">Fewest Calls</md-option>\n                                    <md-option ng-value="\'random\'" ng-if="vm.queueCampaign.dialMethod !== \'booked\'">Random</md-option>\n                                    <md-option ng-value="\'linear\'" ng-if="vm.queueCampaign.dialMethod !== \'booked\'">Linear</md-option>\n                                    <md-option ng-value="\'wrandom\'" ng-if="vm.queueCampaign.dialMethod !== \'booked\'">Weight Random</md-option>\n                                </md-select>\n                                <div ng-messages="queueForm[\'strategy\'].$error" ng-show="queueForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.RETRY">Retry</label>\n                                <input type="number" name="retry" ng-model="vm.queueCampaign.retry" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.RETRY"></span></div>\n                                <div ng-messages="queueForm[\'retry\'].$error" ng-show="queueForm[\'retry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.RETRY_REQUIRED">Retry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.RETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Retry must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.WRAPUPTIME">WrapupTime</label>\n                                <input type="number" name="wrapuptime" ng-model="vm.queueCampaign.wrapuptime" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.WRAPUPTIME"></span></div>\n                                <div ng-messages="queueForm[\'wrapuptime\'].$error" ng-show="queueForm[\'wrapuptime\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.WRAPUPTIME_REQUIRED">WrapupTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.WRAPUPTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WrapupTime must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.WEIGHT">Weight</label>\n                                <input type="number" name="weight" ng-model="vm.queueCampaign.weight" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.WEIGHT"></span></div>\n                                <div ng-messages="queueForm[\'weight\'].$error" ng-show="queueForm[\'weight\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.WEIGHT_REQUIRED">Weight field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.WEIGHT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Weight must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.MUSICONHOLD">MusicOnHold</label>\n                                <md-select name="musiconhold" ng-model="vm.queueCampaign.musiconhold" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="musiconhold.name" ng-repeat="musiconhold in vm.musiconholds" ng-disabled="musiconhold.canSelect === false">{{ musiconhold.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MUSICONHOLD"></span></div>\n                                <div ng-messages="queueForm[\'musiconhold\'].$error" ng-show="queueForm[\'musiconhold\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MUSICONHOLD_REQUIRED">MusicOnHold field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.CALLYSQUAREPROJECT">CallySquareProject</label>\n                                <md-select name="dialQueueProject" ng-model="vm.queueCampaign.dialQueueProject" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject.name" ng-repeat="dialQueueProject in vm.projects" ng-disabled="dialQueueProject.canSelect === false">{{ dialQueueProject.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CALLYSQUAREPROJECT"></span></div>\n                                <div ng-messages="queueForm[\'dialQueueProject\'].$error" ng-show="queueForm[\'dialQueueProject\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CALLYSQUAREPROJECT_REQUIRED">CallySquareProject field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="md-block">\n                                <label translate="MOTIONDIALER.CALLYSQUAREPROJECT2">CallySquareProject2</label>\n                                <md-select name="dialQueueProject2" ng-model="vm.queueCampaign.dialQueueProject2" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject2.name" ng-repeat="dialQueueProject2 in vm.projects" ng-disabled="dialQueueProject2.canSelect === false">{{ dialQueueProject2.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CALLYSQUAREPROJECT2"></span></div>\n                                <div ng-messages="queueForm[\'dialQueueProject2\'].$error" ng-show="queueForm[\'dialQueueProject2\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CALLYSQUAREPROJECT2_REQUIRED">CallySquareProject2 field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'preview\' || vm.queueCampaign.dialMethod === \'booked\'" class="md-block">\n                                <label translate="MOTIONDIALER.CALLYSQUAREPROJECTPREVIEW">CallySquareProjectPreview</label>\n                                <md-select name="dialQueueProject" ng-model="vm.queueCampaign.dialQueueProject" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject.name" ng-repeat="dialQueueProject in vm.projects" ng-disabled="dialQueueProject.canSelect === false">{{ dialQueueProject.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CALLYSQUAREPROJECTPREVIEW"></span></div>\n                                <div ng-messages="queueForm[\'dialQueueProject\'].$error" ng-show="queueForm[\'dialQueueProject\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CALLYSQUAREPROJECTPREVIEW_REQUIRED">CallySquareProjectPreview field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod === \'preview\' || vm.queueCampaign.dialMethod === \'booked\'" class="md-block">\n                                <label translate="MOTIONDIALER.CALLYSQUAREPROJECTPREVIEW2">CallySquareProjectPreview2</label>\n                                <md-select name="dialQueueProject2" ng-model="vm.queueCampaign.dialQueueProject2" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">None</md-option>\n                                    <md-option ng-value="dialQueueProject2.name" ng-repeat="dialQueueProject2 in vm.projects" ng-disabled="dialQueueProject2.canSelect === false">{{ dialQueueProject2.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CALLYSQUAREPROJECTPREVIEW2"></span></div>\n                                <div ng-messages="queueForm[\'dialQueueProject2\'].$error" ng-show="queueForm[\'dialQueueProject2\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CALLYSQUAREPROJECTPREVIEW2_REQUIRED">CallySquareProjectPreview2 field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialQueueProject2 && (vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\')" class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.dialAgiAfterHangupAgent" aria-label="RunIfHangupAgent" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.RUNIFHANGUPAGENT">RunIfHangupAgent</span></md-switch>\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.RUNIFHANGUPAGENT"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="queueCampaign-detail-form-container originate md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.ORIGINATE">ORIGINATE</div>\n                        </div>\n                        <form name="originateForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.ORIGINATECALLERIDNAME">OriginateCallerIdName</label>\n                                <input type="text" name="dialOriginateCallerIdName" ng-model="vm.queueCampaign.dialOriginateCallerIdName" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATECALLERIDNAME"></span></div>\n                                <div ng-messages="originateForm[\'dialOriginateCallerIdName\'].$error" ng-show="originateForm[\'dialOriginateCallerIdName\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATECALLERIDNAME_REQUIRED">OriginateCallerIdName field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.ORIGINATECALLERIDNUMBER">OriginateCallerIdNumber</label>\n                                <input type="text" name="dialOriginateCallerIdNumber" ng-model="vm.queueCampaign.dialOriginateCallerIdNumber" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATECALLERIDNUMBER"></span></div>\n                                <div ng-messages="originateForm[\'dialOriginateCallerIdNumber\'].$error" ng-show="originateForm[\'dialOriginateCallerIdNumber\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATECALLERIDNUMBER_REQUIRED">OriginateCallerIdNumber field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.RANDOMLASTDIGITCALLERIDNUMBER">RandomLastDigitCallerIdNumber</label>\n                                <input type="number" name="dialRandomLastDigitCallerIdNumber" ng-model="vm.queueCampaign.dialRandomLastDigitCallerIdNumber" min="0" max="15" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.RANDOMLASTDIGITCALLERIDNUMBER"></span></div>\n                                <div ng-messages="originateForm[\'dialRandomLastDigitCallerIdNumber\'].$error" ng-show="originateForm[\'dialRandomLastDigitCallerIdNumber\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.RANDOMLASTDIGITCALLERIDNUMBER_REQUIRED">RandomLastDigitCallerIdNumber field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.RANDOMLASTDIGITCALLERIDNUMBER_MUST_BE_GREATER_THAN_OR_EQUAL_TO">RandomLastDigitCallerIdNumber must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.RANDOMLASTDIGITCALLERIDNUMBER_MUST_BE_LESS_THAN_OR_EQUAL_TO">RandomLastDigitCallerIdNumber must be a valid greater or equal than</span> <span>15</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.ORIGINATETIMEOUT">OriginateTimeout</label>\n                                <input type="number" name="dialOriginateTimeout" ng-model="vm.queueCampaign.dialOriginateTimeout" min="1" max="999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATETIMEOUT"></span></div>\n                                <div ng-messages="originateForm[\'dialOriginateTimeout\'].$error" ng-show="originateForm[\'dialOriginateTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATETIMEOUT_REQUIRED">OriginateTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATETIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">OriginateTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.ORIGINATETIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">OriginateTimeout must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.PREFIX">Prefix</label>\n                                <input type="text" name="dialPrefix" ng-model="vm.queueCampaign.dialPrefix" ng-pattern="/^\\d+$/" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREFIX"></span></div>\n                                <div ng-messages="originateForm[\'dialPrefix\'].$error" ng-show="originateForm[\'dialPrefix\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.PREFIX_REQUIRED">Prefix field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="MOTIONDIALER.ERRORS.PREFIX_MUST_VALID_PATTERN" translate-values="{ regex: \'/^\\d+$/\' }">Prefix must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.RETRYANDFREQUENCY">RETRYANDFREQUENCY</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="queueCampaign-detail-form-container global md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.GLOBAL">GLOBAL</div>\n                        </div>\n                        <form name="globalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.GLOBALMAXRETRY">GlobalMaxRetry</label>\n                                <input type="number" name="dialGlobalMaxRetry" ng-model="vm.queueCampaign.dialGlobalMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.GLOBALMAXRETRY"></span></div>\n                                <div ng-messages="globalForm[\'dialGlobalMaxRetry\'].$error" ng-show="globalForm[\'dialGlobalMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALMAXRETRY_REQUIRED">GlobalMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">GlobalMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">GlobalMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="queueCampaign-detail-form-container congestion md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.CONGESTION">CONGESTION</div>\n                        </div>\n                        <form name="congestionForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CONGESTIONMAXRETRY">CongestionMaxRetry</label>\n                                <input type="number" name="dialCongestionMaxRetry" ng-model="vm.queueCampaign.dialCongestionMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CONGESTIONMAXRETRY"></span></div>\n                                <div ng-messages="congestionForm[\'dialCongestionMaxRetry\'].$error" ng-show="congestionForm[\'dialCongestionMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONMAXRETRY_REQUIRED">CongestionMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CongestionMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">CongestionMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CONGESTIONRETRYTIME">CongestionRetryTime</label>\n                                <input type="number" name="dialCongestionRetryFrequency" ng-model="vm.queueCampaign.dialCongestionRetryFrequency" min="1" max="99999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CONGESTIONRETRYTIME"></span></div>\n                                <div ng-messages="congestionForm[\'dialCongestionRetryFrequency\'].$error" ng-show="congestionForm[\'dialCongestionRetryFrequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONRETRYTIME_REQUIRED">CongestionRetryTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONRETRYTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CongestionRetryTime must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.CONGESTIONRETRYTIME_MUST_BE_LESS_THAN_OR_EQUAL_TO">CongestionRetryTime must be a valid greater or equal than</span> <span>99999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="queueCampaign-detail-form-container busy md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.BUSY">BUSY</div>\n                        </div>\n                        <form name="busyForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.BUSYMAXRETRY">BusyMaxRetry</label>\n                                <input type="number" name="dialBusyMaxRetry" ng-model="vm.queueCampaign.dialBusyMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.BUSYMAXRETRY"></span></div>\n                                <div ng-messages="busyForm[\'dialBusyMaxRetry\'].$error" ng-show="busyForm[\'dialBusyMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYMAXRETRY_REQUIRED">BusyMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">BusyMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">BusyMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.BUSYRETRYTIME">BusyRetryTime</label>\n                                <input type="number" name="dialBusyRetryFrequency" ng-model="vm.queueCampaign.dialBusyRetryFrequency" min="1" max="99999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.BUSYRETRYTIME"></span></div>\n                                <div ng-messages="busyForm[\'dialBusyRetryFrequency\'].$error" ng-show="busyForm[\'dialBusyRetryFrequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYRETRYTIME_REQUIRED">BusyRetryTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYRETRYTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">BusyRetryTime must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.BUSYRETRYTIME_MUST_BE_LESS_THAN_OR_EQUAL_TO">BusyRetryTime must be a valid greater or equal than</span> <span>99999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="queueCampaign-detail-form-container noanswer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.NOANSWER">NOANSWER</div>\n                        </div>\n                        <form name="noanswerForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.NOANSWERMAXRETRY">NoAnswerMaxRetry</label>\n                                <input type="number" name="dialNoAnswerMaxRetry" ng-model="vm.queueCampaign.dialNoAnswerMaxRetry" min="1" max="999" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.NOANSWERMAXRETRY"></span></div>\n                                <div ng-messages="noanswerForm[\'dialNoAnswerMaxRetry\'].$error" ng-show="noanswerForm[\'dialNoAnswerMaxRetry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERMAXRETRY_REQUIRED">NoAnswerMaxRetry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERMAXRETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">NoAnswerMaxRetry must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERMAXRETRY_MUST_BE_LESS_THAN_OR_EQUAL_TO">NoAnswerMaxRetry must be a valid greater or equal than</span> <span>999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.NOANSWERRETRYTIME">NoAnswerRetryTime</label>\n                                <input type="number" name="dialNoAnswerRetryFrequency" ng-model="vm.queueCampaign.dialNoAnswerRetryFrequency" min="1" max="99999" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.NOANSWERRETRYTIME"></span></div>\n                                <div ng-messages="noanswerForm[\'dialNoAnswerRetryFrequency\'].$error" ng-show="noanswerForm[\'dialNoAnswerRetryFrequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERRETRYTIME_REQUIRED">NoAnswerRetryTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERRETRYTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">NoAnswerRetryTime must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="MOTIONDIALER.ERRORS.NOANSWERRETRYTIME_MUST_BE_LESS_THAN_OR_EQUAL_TO">NoAnswerRetryTime must be a valid greater or equal than</span> <span>99999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="queueCampaign-detail-form-container advanced md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.ADVANCED">ADVANCED</div>\n                        </div>\n                        <form name="advancedForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.acw" aria-label="AfterCallWork" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.AFTERCALLWORK">AfterCallWork</span></md-switch>\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.AFTERCALLWORK"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.acw" class="md-block">\n                                <label translate="MOTIONDIALER.AFTERCALLWORKDURATION">AfterCallWorkDuration</label>\n                                <input type="number" name="acwTimeout" ng-model="vm.queueCampaign.acwTimeout" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.AFTERCALLWORKDURATION"></span></div>\n                                <div ng-messages="advancedForm[\'acwTimeout\'].$error" ng-show="advancedForm[\'acwTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.AFTERCALLWORKDURATION_REQUIRED">AfterCallWorkDuration field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.AFTERCALLWORKDURATION_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AfterCallWorkDuration must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.AUTOPAUSE">AutoPause</label>\n                                <md-select name="autopause" ng-model="vm.queueCampaign.autopause" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'all\'"> {{ \'MOTIONDIALER.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'MOTIONDIALER.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.AUTOPAUSE"></span></div>\n                                <div ng-messages="advancedForm[\'autopause\'].$error" ng-show="advancedForm[\'autopause\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.AUTOPAUSE_REQUIRED">AutoPause field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.RINGINUSE">RingInUse</label>\n                                <md-select name="ringinuse" ng-model="vm.queueCampaign.ringinuse" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'MOTIONDIALER.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'MOTIONDIALER.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.RINGINUSE"></span></div>\n                                <div ng-messages="advancedForm[\'ringinuse\'].$error" ng-show="advancedForm[\'ringinuse\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.RINGINUSE_REQUIRED">RingInUse field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.MEMBERDELAY">MemberDelay</label>\n                                <input type="number" name="memberdelay" ng-model="vm.queueCampaign.memberdelay" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MEMBERDELAY"></span></div>\n                                <div ng-messages="advancedForm[\'memberdelay\'].$error" ng-show="advancedForm[\'memberdelay\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MEMBERDELAY_REQUIRED">MemberDelay field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.MEMBERDELAY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MemberDelay must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.TIMEOUTRESTART">TimeoutRestart</label>\n                                <md-select name="timeoutrestart" ng-model="vm.queueCampaign.timeoutrestart" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'MOTIONDIALER.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'MOTIONDIALER.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.TIMEOUTRESTART"></span></div>\n                                <div ng-messages="advancedForm[\'timeoutrestart\'].$error" ng-show="advancedForm[\'timeoutrestart\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.TIMEOUTRESTART_REQUIRED">TimeoutRestart field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.MONITORFORMAT">MonitorFormat</label>\n                                <md-select name="monitor_format" ng-model="vm.queueCampaign.monitor_format" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'\'">Inactive</md-option>\n                                    <md-option ng-value="\'wav\'">wav</md-option>\n                                    <md-option ng-value="\'wav49\'">wav49</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MONITORFORMAT"></span></div>\n                                <div ng-messages="advancedForm[\'monitor_format\'].$error" ng-show="advancedForm[\'monitor_format\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MONITORFORMAT_REQUIRED">MonitorFormat field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.CONTEXT">Context</label>\n                                <input type="text" name="context" ng-model="vm.queueCampaign.context" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.CONTEXT"></span></div>\n                                <div ng-messages="advancedForm[\'context\'].$error" ng-show="advancedForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.SETINTERFACEVARIABLES">SetInterfaceVariables</label>\n                                <md-select name="setinterfacevar" ng-model="vm.queueCampaign.setinterfacevar" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'MOTIONDIALER.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'MOTIONDIALER.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.SETINTERFACEVARIABLES"></span></div>\n                                <div ng-messages="advancedForm[\'setinterfacevar\'].$error" ng-show="advancedForm[\'setinterfacevar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.SETINTERFACEVARIABLES_REQUIRED">SetInterfaceVariables field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.SETQUEUEVARIABLES">SetQueueVariables</label>\n                                <md-select name="setqueuevar" ng-model="vm.queueCampaign.setqueuevar" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'MOTIONDIALER.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'MOTIONDIALER.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.SETQUEUEVARIABLES"></span></div>\n                                <div ng-messages="advancedForm[\'setqueuevar\'].$error" ng-show="advancedForm[\'setqueuevar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.SETQUEUEVARIABLES_REQUIRED">SetQueueVariables field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.SETQUEUEENTRYVARIABLES">SetQueueEntryVariables</label>\n                                <md-select name="setqueueentryvar" ng-model="vm.queueCampaign.setqueueentryvar" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'MOTIONDIALER.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'MOTIONDIALER.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.SETQUEUEENTRYVARIABLES"></span></div>\n                                <div ng-messages="advancedForm[\'setqueueentryvar\'].$error" ng-show="advancedForm[\'setqueueentryvar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.SETQUEUEENTRYVARIABLES_REQUIRED">SetQueueEntryVariables field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.DIALORDERBYSCHEDULEDAT">DialOrderByScheduledAt</label>\n                                <md-select name="dialOrderByScheduledAt" ng-model="vm.queueCampaign.dialOrderByScheduledAt" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'DESC\'"> {{ \'MOTIONDIALER.DESC\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'ASC\'"> {{ \'MOTIONDIALER.ASC\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.DIALORDERBYSCHEDULEDAT"></span></div>\n                                <div ng-messages="advancedForm[\'dialOrderByScheduledAt\'].$error" ng-show="advancedForm[\'dialOrderByScheduledAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.DIALORDERBYSCHEDULEDAT_REQUIRED">DialOrderByScheduledAt field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.mandatoryDisposition" class="md-block">\n                                <label translate="MOTIONDIALER.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.queueCampaign.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="advancedForm[\'mandatoryDispositionPauseId\'].$error" ng-show="advancedForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div ng-if="vm.queueCampaign.dialMethod === \'preview\' || vm.queueCampaign.dialMethod === \'booked\'" class="queueCampaign-detail-form-container advancedpreview md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.ADVANCEDPREVIEW">ADVANCEDPREVIEW</div>\n                        </div>\n                        <form name="advancedpreviewForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.acw" aria-label="AfterCallWork" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.AFTERCALLWORK">AfterCallWork</span></md-switch>\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.AFTERCALLWORK"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.acw" class="md-block">\n                                <label translate="MOTIONDIALER.AFTERCALLWORKDURATION">AfterCallWorkDuration</label>\n                                <input type="number" name="acwTimeout" ng-model="vm.queueCampaign.acwTimeout" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.AFTERCALLWORKDURATION"></span></div>\n                                <div ng-messages="advancedpreviewForm[\'acwTimeout\'].$error" ng-show="advancedpreviewForm[\'acwTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.AFTERCALLWORKDURATION_REQUIRED">AfterCallWorkDuration field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.AFTERCALLWORKDURATION_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AfterCallWorkDuration must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.MONITORFORMAT">MonitorFormat</label>\n                                <md-select name="monitor_format" ng-model="vm.queueCampaign.monitor_format" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'\'">Inactive</md-option>\n                                    <md-option ng-value="\'wav\'">wav</md-option>\n                                    <md-option ng-value="\'wav49\'">wav49</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MONITORFORMAT"></span></div>\n                                <div ng-messages="advancedpreviewForm[\'monitor_format\'].$error" ng-show="advancedpreviewForm[\'monitor_format\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MONITORFORMAT_REQUIRED">MonitorFormat field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.DIALORDERBYSCHEDULEDAT">DialOrderByScheduledAt</label>\n                                <md-select name="dialOrderByScheduledAt" ng-model="vm.queueCampaign.dialOrderByScheduledAt" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'DESC\'"> {{ \'MOTIONDIALER.DESC\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'ASC\'"> {{ \'MOTIONDIALER.ASC\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.DIALORDERBYSCHEDULEDAT"></span></div>\n                                <div ng-messages="advancedpreviewForm[\'dialOrderByScheduledAt\'].$error" ng-show="advancedpreviewForm[\'dialOrderByScheduledAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.DIALORDERBYSCHEDULEDAT_REQUIRED">DialOrderByScheduledAt field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.mandatoryDisposition" class="md-block">\n                                <label translate="MOTIONDIALER.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.queueCampaign.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="advancedpreviewForm[\'mandatoryDispositionPauseId\'].$error" ng-show="advancedpreviewForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div ng-if="vm.queueCampaign.dialMethod === \'predictive\'" class="queueCampaign-detail-form-container thresholds md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.THRESHOLDS">THRESHOLDS</div>\n                        </div>\n                        <form name="thresholdsForm" novalidate>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                                <span translate="MOTIONDIALER.PREDICTIVEMAXTHRESHOLD">PredictiveMaxThreshold</span>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEMAXTHRESHOLD"></span></div>\n                                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPredictiveIntervalMaxThreshold" min="1" max="100" step="1" class="md-accent">\n                            </md-input-container>\n                            <md-input-container ng-if="vm.queueCampaign.dialMethod == \'predictive\'" class="md-block">\n                                <span translate="MOTIONDIALER.PREDICTIVEMINTHRESHOLD">PredictiveMinThreshold</span>\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.PREDICTIVEMINTHRESHOLD"></span></div>\n                                <md-slider md-discrete flex ng-model="vm.queueCampaign.dialPredictiveIntervalMinThreshold" min="1" max="100" step="1" class="md-accent">\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="queueCampaign-detail-form-container recallme md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.RECALLME">RECALLME</div>\n                        </div>\n                        <form name="recallmeForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.DIALRECALLMETIMEOUT">DialRecallMeTimeout</label>\n                                <input type="number" name="dialRecallMeTimeout" ng-model="vm.queueCampaign.dialRecallMeTimeout" min="1" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.DIALRECALLMETIMEOUT"></span></div>\n                                <div ng-messages="recallmeForm[\'dialRecallMeTimeout\'].$error" ng-show="recallmeForm[\'dialRecallMeTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.DIALRECALLMETIMEOUT_REQUIRED">DialRecallMeTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="MOTIONDIALER.ERRORS.DIALRECALLMETIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">DialRecallMeTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.queueCampaign.dialRecallInQueue" aria-label="DialRecallInQueue" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.DIALRECALLINQUEUE">DialRecallInQueue</span></md-switch>\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.DIALRECALLINQUEUE"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div ng-if="vm.queueCampaign.dialMethod != \'preview\'" class="queueCampaign-detail-form-container globalinterval md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.GLOBALINTERVAL">GLOBALINTERVAL</div>\n                        </div>\n                        <form name="globalintervalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.GLOBALINTERVAL">GlobalInterval</label>\n                                <input type="text" name="dialGlobalInterval" ng-model="vm.queueCampaign.dialGlobalInterval" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="MOTIONDIALER.HELP.GLOBALINTERVAL"></span></div>\n                                <div ng-messages="globalintervalForm[\'dialGlobalInterval\'].$error" ng-show="globalintervalForm[\'dialGlobalInterval\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="MOTIONDIALER.ERRORS.GLOBALINTERVAL_REQUIRED">GlobalInterval field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div ng-if="vm.queueCampaign.dialMethod != \'preview\'" class="queueCampaign-detail-form-container timezone md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="MOTIONDIALER.TIMEZONE">TIMEZONE</div>\n                        </div>\n                        <form name="timezoneForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="MOTIONDIALER.TIMEZONE">Timezone</label>\n                                <ms-timezone name="dialTimezone" ng-model="vm.queueCampaign.dialTimezone" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n                                    < <div class="hint"><span translate="MOTIONDIALER.HELP.TIMEZONE"></span>\n                    </div>\n                    <div ng-messages="timezoneForm[\'dialTimezone\'].$error" ng-show="timezoneForm[dialTimezone].$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="MOTIONDIALER.ERRORS.TIMEZONE_REQUIRED">Timezone field is required</span>\n                        </div>\n                    </div>\n                    </md-input-container>\n\n                    </form>\n    </div>\n    <div ng-if="vm.queueCampaign.dialMethod === \'progressive\' || vm.queueCampaign.dialMethod === \'predictive\' || vm.queueCampaign.dialMethod === \'power\'" class="queueCampaign-detail-form-container amd md-background-bg md-whiteframe-1dp">\n        <div class="pb-16" layout="row" layout-align="start center">\n            <div class="h2 secondary-text" translate="MOTIONDIALER.AMD">AMD</div>\n        </div>\n        <form name="amdForm" novalidate>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.queueCampaign.dialAMDActive" aria-label="AMDActive" ng-disabled="!vm.crudPermissions.canEdit"><span translate="MOTIONDIALER.AMDACTIVE">AMDActive</span></md-switch>\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDACTIVE"></span></div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDINITIALSILENCE">AMDInitialSilence</label>\n                <input type="number" name="dialAMDInitialSilence" ng-model="vm.queueCampaign.dialAMDInitialSilence" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDINITIALSILENCE"></span></div>\n                <div ng-messages="amdForm[\'dialAMDInitialSilence\'].$error" ng-show="amdForm[\'dialAMDInitialSilence\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDINITIALSILENCE_REQUIRED">AMDInitialSilence field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDINITIALSILENCE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDInitialSilence must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDGREETING">AMDGreeting</label>\n                <input type="number" name="dialAMDGreeting" ng-model="vm.queueCampaign.dialAMDGreeting" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDGREETING"></span></div>\n                <div ng-messages="amdForm[\'dialAMDGreeting\'].$error" ng-show="amdForm[\'dialAMDGreeting\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDGREETING_REQUIRED">AMDGreeting field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDGREETING_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDGreeting must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDAFTERGREETINGSILENCE">AMDAfterGreetingSilence</label>\n                <input type="number" name="dialAMDAfterGreetingSilence" ng-model="vm.queueCampaign.dialAMDAfterGreetingSilence" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDAFTERGREETINGSILENCE"></span></div>\n                <div ng-messages="amdForm[\'dialAMDAfterGreetingSilence\'].$error" ng-show="amdForm[\'dialAMDAfterGreetingSilence\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDAFTERGREETINGSILENCE_REQUIRED">AMDAfterGreetingSilence field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDAFTERGREETINGSILENCE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDAfterGreetingSilence must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDTOTALANALYSISTIME">AMDTotalAnalysisTime</label>\n                <input type="number" name="dialAMDTotalAnalysisTime" ng-model="vm.queueCampaign.dialAMDTotalAnalysisTime" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDTOTALANALYSISTIME"></span></div>\n                <div ng-messages="amdForm[\'dialAMDTotalAnalysisTime\'].$error" ng-show="amdForm[\'dialAMDTotalAnalysisTime\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDTOTALANALYSISTIME_REQUIRED">AMDTotalAnalysisTime field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDTOTALANALYSISTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDTotalAnalysisTime must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDMINWORDLENGTH">AMDMinWordLength</label>\n                <input type="number" name="dialAMDMinWordLength" ng-model="vm.queueCampaign.dialAMDMinWordLength" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDMINWORDLENGTH"></span></div>\n                <div ng-messages="amdForm[\'dialAMDMinWordLength\'].$error" ng-show="amdForm[\'dialAMDMinWordLength\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMINWORDLENGTH_REQUIRED">AMDMinWordLength field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMINWORDLENGTH_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDMinWordLength must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDBETWEENWORDSSILENCE">AMDBetweenWordsSilence</label>\n                <input type="number" name="dialAMDBetweenWordsSilence" ng-model="vm.queueCampaign.dialAMDBetweenWordsSilence" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDBETWEENWORDSSILENCE"></span></div>\n                <div ng-messages="amdForm[\'dialAMDBetweenWordsSilence\'].$error" ng-show="amdForm[\'dialAMDBetweenWordsSilence\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDBETWEENWORDSSILENCE_REQUIRED">AMDBetweenWordsSilence field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDBETWEENWORDSSILENCE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDBetweenWordsSilence must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDMAXIMUMNUMBEROFWORDS">AMDMaximumNumberOfWords</label>\n                <input type="number" name="dialAMDMaximumNumberOfWords" ng-model="vm.queueCampaign.dialAMDMaximumNumberOfWords" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDMAXIMUMNUMBEROFWORDS"></span></div>\n                <div ng-messages="amdForm[\'dialAMDMaximumNumberOfWords\'].$error" ng-show="amdForm[\'dialAMDMaximumNumberOfWords\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMNUMBEROFWORDS_REQUIRED">AMDMaximumNumberOfWords field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMNUMBEROFWORDS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDMaximumNumberOfWords must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDSILENCETHRESHOLD">AMDSilenceThreshold</label>\n                <input type="number" name="dialAMDSilenceThreshold" ng-model="vm.queueCampaign.dialAMDSilenceThreshold" min="0" max="32767" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDSILENCETHRESHOLD"></span></div>\n                <div ng-messages="amdForm[\'dialAMDSilenceThreshold\'].$error" ng-show="amdForm[\'dialAMDSilenceThreshold\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDSILENCETHRESHOLD_REQUIRED">AMDSilenceThreshold field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDSILENCETHRESHOLD_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDSilenceThreshold must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="MOTIONDIALER.ERRORS.AMDSILENCETHRESHOLD_MUST_BE_LESS_THAN_OR_EQUAL_TO">AMDSilenceThreshold must be a valid greater or equal than</span> <span>32767</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.queueCampaign.dialAMDActive" class="md-block">\n                <label translate="MOTIONDIALER.AMDMAXIMUMWORDLENGTH">AMDMaximumWordLength</label>\n                <input type="number" name="dialAMDMaximumWordLength" ng-model="vm.queueCampaign.dialAMDMaximumWordLength" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="MOTIONDIALER.HELP.AMDMAXIMUMWORDLENGTH"></span></div>\n                <div ng-messages="amdForm[\'dialAMDMaximumWordLength\'].$error" ng-show="amdForm[\'dialAMDMaximumWordLength\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMWORDLENGTH_REQUIRED">AMDMaximumWordLength field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="MOTIONDIALER.ERRORS.AMDMAXIMUMWORDLENGTH_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AMDMaximumWordLength must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n        </form>\n    </div>\n    </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.HOPPERS">HOPPERS</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="queueCampaign-detail-form-container hopperstatistics md-background-bg md-whiteframe-1dp">\n                <div ng-controller="QueueCampaignHopperStatisticsController as vm_hs" ng-init="vm_hs.init(vm.queueCampaign)">\n                    <md-toolbar class="md-table-toolbar md-default">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERWIDGET">Hoppers</span>\n                            <div flex></div>\n                            <md-button class="md-icon-button" ng-click="vm_hs.init(vm.queueCampaign)" aria-label="refresh Hopper" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    \x3c!-- WIDGET GROUP --\x3e\n                    <div class="widget-group" layout="row" flex="100" layout-wrap>\n\n                        \x3c!-- WIDGET 1 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{(vm_hs.total || 0) + (vm_hs.closed || 0)}}</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.TOTAL\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 1 --\x3e\n\n                        \x3c!-- WIDGET 2 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{vm_hs.fresh || 0}} ({{vm_hs.total ? ((((vm_hs.fresh || 0) * 100)/((vm_hs.closed || 0) + (vm_hs.total || 0))) | number: 2) : 0}}%)</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.FRESH\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 2 --\x3e\n\n                        \x3c!-- WIDGET 3 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{vm_hs.total ? (vm_hs.total - (vm_hs.fresh || 0)) : 0}} ({{vm_hs.total ? ((((vm_hs.total - (vm_hs.fresh || 0)) * 100)/((vm_hs.closed || 0) + (vm_hs.total || 0))) | number: 2) : 0}}%)</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.OPEN\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 3 --\x3e\n\n                        \x3c!-- WIDGET 3 --\x3e\n                        <ms-widget class="h-140" layout="column" flex="100" flex-gt-xs="50" flex-gt-md="25">\n\n                            \x3c!-- Front --\x3e\n                            <ms-widget-front class="p-16 white-bg" layout="row" flex>\n                                <div class="pt-8 pb-8" layout="column" layout-align="center center" flex>\n                                    <div class="md-display-1 pb-8">{{vm_hs.closed ? (vm_hs.closed || 0) : 0}} ({{vm_hs.closed ? ((((vm_hs.closed) * 100)/(vm_hs.closed + (vm_hs.total || 0))) | number: 2) : 0}}%)</div>\n                                    <div class="font-weight-500 secondary-text">{{ \'MOTIONDIALER.CLOSED\' | translate }}</div>\n                                </div>\n                            </ms-widget-front>\n                            \x3c!-- / Front --\x3e\n\n                        </ms-widget>\n                        \x3c!-- / WIDGET 3 --\x3e\n\n                    </div>\n                    \x3c!-- / WIDGET GROUP --\x3e\n                </div>\n\n            </div>\n            <div class="queueCampaign-detail-form-container hoppers md-background-bg md-whiteframe-1dp">\n                <div ng-controller="QueueCampaignHoppersController as vm_dc" ng-init="vm_dc.init(vm.queueCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedQueueCampaignHoppers.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERS">Hoppers</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getQueueCampaignHoppers()" aria-label="refresh Hoppers" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedQueueCampaignHoppers.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedQueueCampaignHoppers.length}} {{vm_dc.selectedQueueCampaignHoppers.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedQueueCampaignHoppers" csv-label="true" filename="queueCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedQueueCampaignHoppers($event)" aria-label="delete selected" translate translate-attr-label="QUEUECAMPAIGNS.DELETE_SELECTED">\n                                <md-icon md-font-icon="icon-delete"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedQueueCampaignHoppers" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getQueueCampaignHoppers">\n                                <tr md-row>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="phone">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column md-order-by="countcongestionretry">{{ \'MOTIONDIALER.CONGESTION\' | translate }}</th>\n                                    <th md-column md-order-by="countbusyretry">{{ \'MOTIONDIALER.BUSY\' | translate }}</th>\n                                    <th md-column md-order-by="countnoanswerretry">{{ \'MOTIONDIALER.NOANSWER\' | translate }}</th>\n                                    <th md-column md-order-by="scheduledat">{{ \'MOTIONDIALER.SCHEDULEDAT\' | translate }}</th>\n                                    <th md-column md-order-by="priority">{{ \'MOTIONDIALER.PRIORITY\' | translate }}</th>\n                                    <th md-column md-order-by="recallme">{{ \'MOTIONDIALER.RECALLAGENT\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopper" md-select-id="id" ng-repeat="hopper in vm_dc.queueCampaignHoppers.rows">\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{hopper.ContactId}}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{hopper.phone}}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{hopper.countcongestionretry}}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{hopper.countbusyretry}}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{hopper.countnoanswerretry}}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{hopper.scheduledat | date:\'medium\'}}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell>{{ vm_dc.arraypriority[hopper.priority].option }}</td>\n                                    <td ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" md-cell class="recallme ">\n                                        <md-icon md-colors="{color: {{hopper.recallme ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{hopper.recallme? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                    </td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.createOrEditQueueCampaignHopper($event, hopper)" translate="MOTIONDIALER.EDIT_HOPPER">\n                                                        Edit Hopper\n                                                    </md-button>\n                                                </md-menu-item>\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                    <md-button ng-click="vm_dc.deleteConfirm(hopper, $event)" translate="MOTIONDIALER.DELETE_HOPPER">\n                                                        Delete Hopper\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.queueCampaignHoppers.rows.length">\n                                    <td md-cell colspan="12">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPER_AVAILABLE">No hopper available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.queueCampaignHoppers.count}}" md-on-paginate="vm_dc.getQueueCampaignHoppers" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.HISTORY">HISTORY</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="queueCampaign-detail-form-container hopperhistories md-background-bg md-whiteframe-1dp">\n                <div ng-controller="QueueCampaignHopperHistoriesController as vm_dc" ng-init="vm_dc.init(vm.queueCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedQueueCampaignHopperHistories.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERHISTORIES">HopperHistories</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getQueueCampaignHopperHistories()" aria-label="refresh HopperHistories" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERHISTORIES">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedQueueCampaignHopperHistories.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedQueueCampaignHopperHistories.length}} {{vm_dc.selectedQueueCampaignHopperHistories.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedQueueCampaignHopperHistories" csv-label="true" filename="queueCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedQueueCampaignHopperHistories" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getQueueCampaignHopperHistories">\n                                <tr md-row>\n                                    <th md-column md-order-by="uniqueid">{{ \'MOTIONDIALER.UNIQUEID\' | translate }}</th>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="calleridnum">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column md-order-by="calleridname">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                                    <th md-column md-order-by="statedesc">{{ \'MOTIONDIALER.STATUS\' | translate }}</th>\n                                    <th md-column md-order-by="scheduledat">{{ \'MOTIONDIALER.SCHEDULEDAT\' | translate }}</th>\n                                    <th md-column md-order-by="starttime">{{ \'MOTIONDIALER.STARTTIME\' | translate }}</th>\n                                    <th md-column md-order-by="endtime">{{ \'MOTIONDIALER.ENDTIME\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopperHistory" md-select-id="id" ng-repeat="hopperHistory in vm_dc.queueCampaignHopperHistories.rows">\n                                    <td md-cell>{{hopperHistory.uniqueid}}</td>\n                                    <td md-cell>{{hopperHistory.ContactId}}</td>\n                                    <td md-cell>{{hopperHistory.calleridnum}}</td>\n                                    <td md-cell>{{hopperHistory.calleridname}}</td>\n                                    <td md-cell>{{hopperHistory.statedesc}}</td>\n                                    <td md-cell>{{hopperHistory.scheduledat | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperHistory.starttime | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperHistory.endtime | date:\'medium\'}}</td>\n                                    <td md-cell class="actions">\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.queueCampaignHopperHistories.rows.length">\n                                    <td md-cell colspan="11">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERHISTORY_AVAILABLE">No hopperhistory available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.queueCampaignHopperHistories.count}}" md-on-paginate="vm_dc.getQueueCampaignHopperHistories" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.FINAL">FINAL</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="queueCampaign-detail-form-container hopperfinals md-background-bg md-whiteframe-1dp">\n                <div ng-controller="QueueCampaignHopperFinalsController as vm_dc" ng-init="vm_dc.init(vm.queueCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedQueueCampaignHopperFinals.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERFINALS">HopperFinals</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                            <md-button class="md-icon-button" ng-click="vm_dc.getQueueCampaignHopperFinals()" aria-label="refresh HopperFinals" translate translate-attr-label="MOTIONDIALER.REFRESH_HOPPERFINALS">\n                                <md-icon md-font-icon="icon-refresh"></md-icon>\n                            </md-button>\n                            <td md-cell class="actions">\n                                <md-menu>\n                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="vm_dc.countContactsQueueCampaignHopperFinal(vm_dc.query.id); $mdOpenMenu($event);">\n                                        <md-icon md-font-icon="icon-backup-restore"></md-icon>\n                                        <md-tooltip><span translate="MOTIONDIALER.RESTORECONTACTS"></span></md-tooltip>\n                                    </md-button>\n                                    <md-menu-content width="3">\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(3)">\n                                                <span translate="MOTIONDIALER.NOANSWER ">NoAnswer</span>\n                                                <span class="badge">({{vm_dc.contacts.noAnswerContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(5)">\n                                                <span translate="MOTIONDIALER.BUSY ">Busy</span>\n                                                <span class="badge">({{vm_dc.contacts.busyContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(8)">\n                                                <span translate="MOTIONDIALER.CONGESTION ">Congestion</span>\n                                                <span class="badge">({{vm_dc.contacts.congestionContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(10)">\n                                                <span translate="MOTIONDIALER.DROPPED ">Drop</span>\n                                                <span class="badge">({{vm_dc.contacts.dropContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(11)">\n                                                <span translate="MOTIONDIALER.ABANDONED ">Abandoned</span>\n                                                <span class="badge">({{vm_dc.contacts.abandonedContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(22)">\n                                                <span translate="MOTIONDIALER.RECALLFAILEDTIMEOUT">Recall</span>\n                                                <span class="badge">({{vm_dc.contacts.reCallContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(0)">\n                                                <span translate="MOTIONDIALER.NO_SUCH_NUMBER">NoSuchNumber</span>\n                                                <span class="badge">({{vm_dc.contacts.noSuchContacts}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                        <md-menu-item>\n                                            <md-button ng-click="vm_dc.moveContactsQueueCampaignHopperFinal(19)">\n                                                <span translate="MOTIONDIALER.ANSWERING_MACHINE">AnsweringMachine</span>\n                                                <span class="badge">({{vm_dc.contacts.answeringMachine}})</span>\n                                            </md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </td>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedQueueCampaignHopperFinals.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedQueueCampaignHopperFinals.length}} {{vm_dc.selectedQueueCampaignHopperFinals.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedQueueCampaignHopperFinals" csv-label="true" filename="queueCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                            <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.moveSelectedQueueCampaignHopperFinals($event)" aria-label="move selected" translate translate-attr-label="QUEUECAMPAIGNS.MOVE_SELECTED">\n                                <md-icon md-font-icon="icon-restore"></md-icon>\n                                <md-tooltip><span translate="MOTIONDIALER.RESTORECONTACTS"></span></md-tooltip>\n                            </md-button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedQueueCampaignHopperFinals" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getQueueCampaignHopperFinals">\n                                <tr md-row>\n                                    <th md-column md-order-by="uniqueid">{{ \'MOTIONDIALER.UNIQUEID\' | translate }}</th>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="calleridnum">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column md-order-by="calleridname">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                                    <th md-column md-order-by="statedesc">{{ \'MOTIONDIALER.STATUS\' | translate }}</th>\n                                    <th md-column md-order-by="countcongestionretry">{{ \'MOTIONDIALER.CONGESTION\' | translate }}</th>\n                                    <th md-column md-order-by="countbusyretry">{{ \'MOTIONDIALER.BUSY\' | translate }}</th>\n                                    <th md-column md-order-by="countnoanswerretry">{{ \'MOTIONDIALER.NOANSWER\' | translate }}</th>\n                                    <th md-column md-order-by="starttime">{{ \'MOTIONDIALER.STARTTIME\' | translate }}</th>\n                                    <th md-column md-order-by="endtime">{{ \'MOTIONDIALER.ENDTIME\' | translate }}</th>\n                                    <th md-column md-order-by="disposition">{{ \'MOTIONDIALER.DISPOSITION\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopperFinal" md-select-id="id" ng-repeat="hopperFinal in vm_dc.queueCampaignHopperFinals.rows">\n                                    <td md-cell>{{hopperFinal.uniqueid}}</td>\n                                    <td md-cell>{{hopperFinal.ContactId}}</td>\n                                    <td md-cell>{{hopperFinal.calleridnum}}</td>\n                                    <td md-cell>{{hopperFinal.calleridname}}</td>\n                                    <td md-cell>{{hopperFinal.statedesc}}</td>\n                                    <td md-cell>{{hopperFinal.countcongestionretry}}</td>\n                                    <td md-cell>{{hopperFinal.countbusyretry}}</td>\n                                    <td md-cell>{{hopperFinal.countnoanswerretry}}</td>\n                                    <td md-cell>{{hopperFinal.starttime | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperFinal.endtime | date:\'medium\'}}</td>\n                                    <td md-cell>{{hopperFinal.disposition}}</td>\n                                    <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                        <md-menu>\n                                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                            </md-button>\n\n                                            <md-menu-content width="3">\n                                                <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                    <md-button ng-click="vm_dc.moveConfirm(hopperFinal, $event)" translate="MOTIONDIALER.MOVE_HOPPERFINAL">\n                                                        Move HopperFinal\n                                                    </md-button>\n                                                </md-menu-item>\n                                            </md-menu-content>\n                                        </md-menu>\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.queueCampaignHopperFinals.rows.length">\n                                    <td md-cell colspan="23">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERFINAL_AVAILABLE">No hopperfinal available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.queueCampaignHopperFinals.count}}" md-on-paginate="vm_dc.getQueueCampaignHopperFinals" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    <md-tab>\n        <md-tab-label>\n            <span translate="MOTIONDIALER.BLACKLIST">BLACKLIST</span>\n        </md-tab-label>\n        <md-tab-body>\n            <div class="queueCampaign-detail-form-container hopperblacks md-background-bg md-whiteframe-1dp">\n                <div ng-controller="QueueCampaignHopperBlacksController as vm_dc" ng-init="vm_dc.init(vm.queueCampaign, vm.crudPermissions)">\n                    <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedQueueCampaignHopperBlacks.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead" translate="MOTIONDIALER.HOPPERBLACKS">HopperBlacks</span>\n                            <div flex></div>\n                            <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                        </div>\n                    </md-toolbar>\n                    <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedQueueCampaignHopperBlacks.length">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">{{vm_dc.selectedQueueCampaignHopperBlacks.length}} {{vm_dc.selectedQueueCampaignHopperBlacks.length > 1 ? \'items\' : \'item\'}} selected</span>\n                            <div flex></div>\n                            <button class="md-icon-button" ng-csv="vm_dc.exportSelectedQueueCampaignHopperBlacks" csv-label="true" filename="queueCampaigns.csv">\n                                <md-icon md-font-icon="icon-file-excel"></md-icon>\n                            </button>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table md-row-select multiple ng-model="vm_dc.selectedQueueCampaignHopperBlacks" md-progress="vm_dc.promise">\n                            <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getQueueCampaignHopperBlacks">\n                                <tr md-row>\n                                    <th md-column md-order-by="ContactId">{{ \'MOTIONDIALER.CONTACTID\' | translate }}</th>\n                                    <th md-column md-order-by="phone">{{ \'MOTIONDIALER.PHONE\' | translate }}</th>\n                                    <th md-column width="10px"></th>\n                                </tr>\n                            </thead>\n                            <tbody md-body>\n                                <tr md-row md-select="hopperBlack" md-select-id="id" ng-repeat="hopperBlack in vm_dc.queueCampaignHopperBlacks.rows">\n                                    <td md-cell>{{hopperBlack.ContactId}}</td>\n                                    <td md-cell>{{hopperBlack.phone}}</td>\n                                    <td md-cell class="actions">\n                                    </td>\n                                </tr>\n                                <tr md-row ng-if="!vm_dc.queueCampaignHopperBlacks.rows.length">\n                                    <td md-cell colspan="4">\n                                        <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERBLACK_AVAILABLE">No hopperblack available</span>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                    <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.queueCampaignHopperBlacks.count}}" md-on-paginate="vm_dc.getQueueCampaignHopperBlacks" md-page-select></md-table-pagination>\n                </div>\n\n            </div>\n        </md-tab-body>\n    </md-tab>\n    </md-tabs>\n\n</div>\n\x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/motiondialer/views/queueCampaigns/queueCampaigns.html",'<div id="queueCampaigns" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-fire" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="MOTIONDIALER.QUEUECAMPAIGNS">QueueCampaigns</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="MOTIONDIALER.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedQueueCampaigns.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedQueueCampaigns =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="MOTIONDIALER.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-queueCampaigns-count">\n                    <span>{{vm.selectedQueueCampaigns.length}}</span>\n                    <span translate="MOTIONDIALER.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="QUEUECAMPAIGNS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllQueueCampaigns()" translate="MOTIONDIALER.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectQueueCampaigns()" translate="MOTIONDIALER.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedQueueCampaigns" csv-label="true" filename="queueCampaigns.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedQueueCampaigns($event)" aria-label="delete selected" translate translate-attr-label="QUEUECAMPAIGNS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- QUEUECAMPAIGN TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedQueueCampaigns" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueueCampaigns">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'MOTIONDIALER.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                                <th md-column md-order-by="dialActive">{{ \'MOTIONDIALER.ACTIVE\' | translate }}</th>\n                                <th md-column md-order-by="TrunkId">{{ \'MOTIONDIALER.TRUNK\' | translate }}</th>\n                                <th md-column md-order-by="dialMethod">{{ \'MOTIONDIALER.METHOD\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'MOTIONDIALER.STRATEGY\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.queueCampaigns.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="queueCampaign" md-select-id="id" ng-repeat="queueCampaign in vm.queueCampaigns.rows">\n                                <td md-cell ng-if="queueCampaign.userpic"><img class="avatar" alt="{{queueCampaign.name}}" ng-src="api/users/{{queueCampaign.id}}/avatar" /></td>\n                                <td md-cell ng-if="!queueCampaign.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{queueCampaign.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(queueCampaign, ev) : vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="id ">{{queueCampaign.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(queueCampaign, ev) : vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="name ">{{queueCampaign.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(queueCampaign, ev) : vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="dialActive ">\n                                    <md-icon md-colors="{color: {{queueCampaign.dialActive ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{queueCampaign.dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(queueCampaign, ev) : vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="TrunkId ">{{ (vm.trunks | filter : {\'id\':queueCampaign.TrunkId} : true)[0].name }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(queueCampaign, ev) : vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="dialMethod ">{{ vm.arraydialMethod[queueCampaign.dialMethod].option }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(queueCampaign, ev) : vm.createOrEditQueueCampaign($event, queueCampaign)" md-cell class="strategy ">{{ vm.arraystrategy[queueCampaign.strategy].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(queueCampaign, $event    )" translate="MOTIONDIALER.EDIT_QUEUECAMPAIGN">\n                                                    Edit QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.clonedialog(queueCampaign, $event    )" translate="MOTIONDIALER.CLONE_QUEUECAMPAIGN">\n                                                    clone QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.listadddialog(queueCampaign, $event    )" translate="MOTIONDIALER.LISTADD_QUEUECAMPAIGN">\n                                                    listadd QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.blacklistadddialog(queueCampaign, $event    )" translate="MOTIONDIALER.BLACKLISTADD_QUEUECAMPAIGN">\n                                                    blacklistadd QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(queueCampaign, $event    )" translate="MOTIONDIALER.TEAMADD_QUEUECAMPAIGN">\n                                                    teamadd QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(queueCampaign, $event    )" translate="MOTIONDIALER.AGENTADD_QUEUECAMPAIGN">\n                                                    agentadd QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(queueCampaign, $event    )" translate="MOTIONDIALER.DELETE_QUEUECAMPAIGN">\n                                                    Delete QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(queueCampaign, $event    )" translate="MOTIONDIALER.GOTOREALTIME_QUEUECAMPAIGN">\n                                                    goToRealtime QueueCampaign\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.queueCampaigns.count}}" md-on-paginate="vm.getQueueCampaigns" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / QUEUECAMPAIGN TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD QUEUECAMPAIGN BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-queueCampaign-button" ng-click="vm.createOrEditQueueCampaign($event)" aria-label="add queueCampaign" translate translate-attr-aria-label="MOTIONDIALER.ADD_QUEUECAMPAIGN">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD QUEUECAMPAIGN BUTTON --\x3e\n</div>'),e.put("app/main/apps/motiondialer/views/realtime/abandonedcalls/view.html",'    <md-toolbar class="md-table-toolbar md-default table-header">\n        <div class="md-toolbar-tools" layout="row" layout-align="center center">\n            <span class="md-subhead" translate="DASHBOARDS.ABANDONEDQUEUECALLS">ABANDONED QUEUE CALLS</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.query.filter = undefined" debounce="300"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 black-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getContacts()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.lastAssignedTo" ng-change="vm.getContacts()">\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents.rows">{{agent.name}}</md-option>\n                </md-select>\n            </div>\n            <div ng-if="vm.queues.count" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_CAMPAIGN">Select a Campaign</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.queue" ng-change="vm.getContacts()">\n                    <md-option ng-value="undefined" ng-if="vm.queues.count > 1"><em translate="DASHBOARDS.ALL">All</em></md-option>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues.rows">{{queue.name}}</md-option>\n                </md-select>\n            </div>\n            <md-button class="md-icon-button" ng-click="vm.refresh && vm.refreshContacts($event)" aria-label="Reload" translate translate-attr-label="DASHBOARDS.RELOAD">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n                <md-tooltip ng-if="vm.showTooltip" md-visible="vm.showTooltip">{{\'DASHBOARDS.CLICKRELOAD\' | translate}}</md-tooltip>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getContacts">\n                <tr md-row>\n                    <th md-column md-order-by="id">ID</th>\n                    <th md-column md-order-by="calleridname">{{\'DASHBOARDS.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="calleridnum">{{\'DASHBOARDS.PHONE\' | translate}}</th>\n                    <th md-column md-order-by="queue">{{\'DASHBOARDS.QUEUE\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerabandonAt">{{\'DASHBOARDS.ABANDONAT\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerexitAt">{{\'DASHBOARDS.QUEUECALLEREXITAT\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerexitreason">{{\'DASHBOARDS.QUEUECALLEREXITREASON\' | translate}}</th>\n                    <th md-column md-order-by="lastAssignedTo">{{\'DASHBOARDS.LASTASSIGNEDTO\' | translate}}</th>\n                    <th md-column md-order-by="disposition">{{\'DASHBOARDS.DISPOSITION\' | translate}}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.contacts.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="contact in vm.contacts.rows">\n                    <td md-cell class="id">{{contact.id}}</td>\n                    <td md-cell class="firstName">{{contact.calleridname}}</td>\n                    <td md-cell class="list">{{contact.calleridnum}}</td>\n                    <td md-cell class="list">{{vm.queuesMap[contact.queue]}}</td>\n                    <td md-cell class="list">{{contact.queuecallerabandonAt ? (contact.queuecallerabandonAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{contact.queuecallerexitAt ? (contact.queuecallerexitAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{contact.queuecallerexitreason}}</td>\n                    <td md-cell class="list">{{contact.lastAssignedTo}}</td>\n                    <td md-cell class="list">{{contact.disposition}}</td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.ASSIGNTO">Assigned a</md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-if="contact.lastAssignedTo">\n                                                <md-button ng-click="vm.assignedA(contact)"><em translate="DASHBOARDS.NONE">Not Assigned</em></md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.agents.rows.length" ng-repeat="agent in vm.agents.rows">\n                                                <md-button ng-click="vm.assignedA(contact,agent)">{{agent.name}}</md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.DISPOSE">Dispose</md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-if="vm.dispositions.length > 0" ng-repeat="disposition in vm.dispositions">\n                                                <md-button ng-click="vm.disposed(contact, disposition.name)">{{disposition.name}}</md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.contacts.count}}" md-on-paginate="vm.getContacts" md-page-select></md-table-pagination>'),e.put("app/main/apps/motiondialer/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MOTIONDIALER.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'MOTIONDIALER.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'MOTIONDIALER.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'MOTIONDIALER.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'MOTIONDIALER.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'MOTIONDIALER.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'MOTIONDIALER.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'MOTIONDIALER.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'MOTIONDIALER.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'MOTIONDIALER.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'MOTIONDIALER.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'MOTIONDIALER.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'MOTIONDIALER.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"MOTIONDIALER.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"MOTIONDIALER.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"MOTIONDIALER.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"MOTIONDIALER.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"MOTIONDIALER.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"MOTIONDIALER.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"MOTIONDIALER.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"MOTIONDIALER.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'MOTIONDIALER.PAGE' | translate}}:', rowsPerPage: '{{'MOTIONDIALER.ROWSPERPAGE' | translate}}:', of: '{{'MOTIONDIALER.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/motiondialer/views/realtime/ivr_campaigns/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MOTIONDIALER.IVR_CAMPAIGNS">Ivr Campaigns</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getCampaigns">\n            <tr md-row>\n                <th md-column>{{\'MOTIONDIALER.NAME\' | translate}}</th>\n                <th md-column>{{\'MOTIONDIALER.TOTAL\' | translate}}</th>\n                <th md-column>{{\'MOTIONDIALER.TOTAL_MANAGED\' | translate}}</th>\n                <th md-column>{{\'MOTIONDIALER.LIMITED\' | translate}}</th>\n                <th md-column>{{\'MOTIONDIALER.ORIGINATED\' | translate}}</th>\n                <th md-column>{{\'MOTIONDIALER.MESSAGE\' | translate}}</th>\n                <th md-column>{{\'MOTIONDIALER.CALLYSQUAREPROJECT\' | translate}}</th>\n                <th md-column>{{ \'MOTIONDIALER.TRUNK\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.ACTIVE\' | translate }}</th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.campaigns">\n                <td md-cell colspan="8">\n                    <div layout="row" layout-align="center center">\n                        <span translate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(id, campaign) in vm.campaigns">\n                <td md-cell>\n                    <span>{{campaign.name}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{campaign.ivrTotalCallsDays || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{campaign.ivrAnswerCallsDay || 0}} ({{(campaign.ivrTotalCallsDays) ? (campaign.ivrAnswerCallsDay || 0) * 100/(campaign.ivrTotalCallsDays ) : 0 | number:1}}%)</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{campaign.limitCalls || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{campaign.originated || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{campaign.message ? (\'MOTIONDIALER.\'+campaign.message | translate) : \'--\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{campaign.dialQueueProject || \'--\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{campaign.Trunk ? campaign.Trunk.name : \'--\'}}</span>\n                </td>\n                <td md-cell>\n                    <md-icon md-colors="{color: {{campaign.active ? \'\\\'green\\\'\' : \'\\\'red\\\'\'}}}" md-font-icon="{{campaign.active ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditIvrCampaign($event, campaign)" translate="MOTIONDIALER.EDIT_CAMPAIGN">\n                                    Edit Campaign\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getCampaigns" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/motiondialer/views/realtime/queue_calls/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MOTIONDIALER.QUEUE_CALLS">Queue Calls</span>\n        \x3c!-- <div flex></div>\n    <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar> --\x3e\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUES TABLE --\x3e\n<md-table-container>\n    <table md-table>\n        <thead md-head>\n            <tr md-row>\n                <th md-column width="30px"></th>\n                <th md-column>{{ \'MOTIONDIALER.DID\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.QUEUE\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.CALLER\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.AGENT\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.DURATION\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.getSize(vm.rpcVoiceQueuesChannels)">\n                <td md-cell colspan="6">\n                    <div layout="row" layout-align="center center">\n                        <span translate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(key, channel) in vm.rpcVoiceQueuesChannels | limitObjectFromTo: vm.queryChannels.limit:(vm.queryChannels.page - 1) * vm.queryChannels.limit">\n                <td md-cell>\n                    <md-icon ng-if="channel.queuecallerleaveAt" md-font-icon="icon-phone-in-talk green-fg"></md-icon>\n                    <md-icon ng-if="!channel.queuecallerleaveAt" md-font-icon="icon-phone-incoming md-accent"></md-icon>\n                </td>\n                <td md-cell>{{channel.exten}}</td>\n                <td md-cell>{{channel.queue}}</td>\n                <td md-cell>{{channel.calleridnum}}</td>\n                <td md-cell>\n                    <span ng-if="channel.queuecallerleaveAt">\n                        {{channel.connectedlinename}}, {{channel.connectedlinenum}}\n                        <span class="text-boxed">\n                            <timer start-time="channel.queuecallerleaveAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </span>\n                    <span ng-if="!channel.queuecallerleaveAt" class="text-boxed">\n                        {{ \'MOTIONDIALER.WAITING_FOR_AGENT\' | translate }}\n                        <timer start-time="channel.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                    </span>\n                </td>\n                <td md-cell>\n                    <span class="text-boxed">\n                        <timer start-time="channel.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                    </span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="2">\n                            <md-menu-item>\n                                <md-button ng-click="vm.hangup(channel.uniqueid)" translate="MOTIONDIALER.HANGUP">\n                                    Hangup\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.redirectToNumber($event, channel.uniqueid)" translate="MOTIONDIALER.REDIRECT_TO_NUMBER">\n                                    Number\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click="$mdMenu.open()" translate="MOTIONDIALER.REDIRECT_TO_AGENT">Redirect to Agent</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-repeat="agent in vm.agents.rows">\n                                            <md-button ng-click="vm.redirectToAgent(channel.uniqueid, agent.name, agent.context)">{{agent.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.queryChannels.limit" md-page="vm.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm.getSize(vm.rpcVoiceQueuesChannels)}}" md-page-select></md-table-pagination>\n\x3c!-- / QUEUES TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/motiondialer/views/realtime/queue_params/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MOTIONDIALER.QUEUE_PARAMETERS">Params</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column>{{\'\n                                MOTIONDIALER.NAME\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.TOTAL\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.TOTAL_OFFERED\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.MANAGED\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.ABANDONED\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.DROPPED\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.AVG_HOLD_TIME\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.AVG_DURATION\' | translate}}</th>\n                <th md-column>{{\'\n                                MOTIONDIALER.AVG_BILLABLE\' | translate}}</th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="8">\n                    <div layout="row" layout-align="center center">\n                        <span translate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(id, queue) in vm.queues">\n                <td md-cell>\n                    <span>{{queue.name}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{(queue.answered + queue.outboundNoAnswerCallsDay + queue.outboundBusyCallsDay + queue.outboundCongestionCallsDay + queue.outboundNoSuchCallsDay + queue.outboundUnknownCallsDay + queue.outboundDropCallsDayTimeout + queue.outboundDropCallsDayCallersExit + queue.outboundBlacklistCallsDay + queue.outboundOriginateFailureCallsDay + queue.outboundAnswerAgiCallsDay + queue.outboundReCallsDay + queue.outboundRejectCallsDay )|| 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{queue.total || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.answered || 0}} ({{(queue.answered) ? (100 - (((queue.outboundDropCallsDayTimeout || 0) * 100/(queue.total)) | number:1 ) - (((queue.outboundDropCallsDayCallersExit || 0) * 100/(queue.total )) | number:1 )  ) : 0 | number:1}}%)</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.outboundDropCallsDayCallersExit || 0}} ({{(queue.outboundDropCallsDayCallersExit) ? (queue.outboundDropCallsDayCallersExit || 0) * 100/(queue.total ) : 0 | number:1}}%)</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.outboundDropCallsDayTimeout || 0}} ({{(queue.outboundDropCallsDayTimeout) ? (queue.outboundDropCallsDayTimeout || 0) * 100/(queue.total) : 0 | number:1}}%)</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.total ? (queue.sumHoldTime / queue.total) : 0 | number: 0 | secToTime | date:\'HH:mm:ss\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.total ? (queue.sumDuration / queue.total) : 0 | number: 0 | secToTime | date:\'HH:mm:ss\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.answered ? ((queue.sumBillable || 0) / queue.answered) : 0 | number: 0 | secToTime | date:\'HH:mm:ss\'}}</span>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/motiondialer/views/realtime/queues/predictive/dialog.html",'<md-dialog class="predictive-dialog" aria-label="New predictive">\n    <md-toolbar class="md-accent md-hue-2">\n        <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n            <span class="title">{{ vm.queueCampaign.name }} Info</span>\n            <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <md-dialog-content class="text-center" ms-scroll>\n        <ds-widget-clock data-show-digital></ds-widget-clock>\n        <div ng-if="!vm.queueCampaign.startProgressive && !vm.queueCampaign.startPredictive">\n            <div class="md-title"><span translate="MOTIONDIALER.PREDICTIVE_IS_NOT_RUNNING">Predictive is not running</span></div>\n        </div>\n\n        <div ng-if="vm.queueCampaign.startProgressive && !vm.queueCampaign.startPredictive" class="m-10">\n            <div layout="row">\n                <div flex="" class="column">\n                    <div class="md-headline"><span translate="MOTIONDIALER.DATA_COLLECTION_IN_PROGRESSIVE">Data collection in progressive</span></div>\n                    <div class="md-subhead">({{vm.queueCampaign.dialPredictiveInterval}} minutes)</div>\n                </div>\n            </div>\n\n            <div layout="row">\n                <div flex="" class="column">\n                    <div class="md-subhead"><span translate="MOTIONDIALER.STARTTIME">Start Time</span></div>\n                    <div class="md-headline">{{ vm.setFormatTime(vm.queueCampaign.startProgressive) }}</div>\n                </div>\n                <div flex="" class="column">\n                    <div class="md-subhead"><span translate="MOTIONDIALER.ENDTIME">End Time</span></div>\n                    <div class="md-headline">\n                        {{ vm.addMinutes(vm.queueCampaign.startProgressive, vm.queueCampaign.dialPredictiveInterval) }}\n                    </div>\n                </div>\n            </div>\n            <div>\n                <span class="text-boxed blue-bg white-fg">\n                    {{vm.queueCampaign.message ? (\'MOTIONDIALER.\' + vm.queueCampaign.message | translate) : \'--\'}}\n                </span>\n            </div>\n        </div>\n        <div ng-if="vm.queueCampaign.startPredictive" class="m-10">\n            <div layout="row">\n                <div flex="" class="column">\n                    <div class="md-headline"><span translate="MOTIONDIALER.PREDICTIVE_IS_RUNNING">Predictive is runnning</span></div>\n                    <div class="md-subhead">({{vm.queueCampaign.dialPredictiveInterval}} minutes)</div>\n                </div>\n            </div>\n\n            <div layout="row">\n                <div flex="" class="column">\n                    <div class="md-subhead"><span translate="MOTIONDIALER.STARTTIME">Start Time</span></div>\n                    <div class="md-headline">{{ vm.setFormatTime(vm.queueCampaign.startPredictive) }}</div>\n                </div>\n                <div flex="" class="column">\n                    <div class="md-subhead"><span translate="MOTIONDIALER.ENDTIME">End Time</span></div>\n                    <div class="md-headline">\n                        {{ vm.addMinutes(vm.queueCampaign.startPredictive, vm.queueCampaign.dialPredictiveInterval) }}\n                    </div>\n                </div>\n            </div>\n            <div>\n                <span class="text-boxed blue-bg white-fg">\n                    {{vm.queueCampaign.message ? (\'MOTIONDIALER.\' + vm.queueCampaign.message | translate) : \'--\'}}\n                </span>\n            </div>\n            <div class="row">\n                <md-card>\n                    <md-toolbar class="md-table-toolbar md-default">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">Predictive - {{ \'MOTIONDIALER.PREVIOUS_INTERVAL\' | translate }}</span>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table>\n                            <tbody md-body>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.TOTAL_CALLS">Total Calls</span></td>\n                                    <td md-cell>{{ vm.queueCampaign.predictiveIntervalTotalCalls }}</td>\n                                </tr>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.ANSWERED_CALLS">Total Calls</span></td>\n                                    <td md-cell>{{ vm.queueCampaign.predictiveIntervalAnsweredCalls }}</td>\n                                </tr>\n                                \x3c!-- Temporaneamente non mostrate perchè contengono anche i dati dell\'intervallo corrente --\x3e\n                                \x3c!-- <tr md-row>\n                                    <td md-cell>Dropped Calls Timeout</td>\n                                    <td md-cell>{{ vm.queueCampaign.predictiveIntervalDroppedCallsTimeout }}</td>\n                                </tr>\n                                <tr md-row>\n                                    <td md-cell>Dropped Calls Caller Exit</td>\n                                    <td md-cell>{{ vm.queueCampaign.predictiveIntervalDroppedCallsCallersExit }}\n                                    </td>\n                                </tr> --\x3e\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.AVG_HOLD_TIME">AVG Hold Time</span></td>\n                                    <td md-cell>~ {{ vm.queueCampaign.predictiveIntervalAvgHoldtime | number:0 }}s</td>\n                                </tr>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.AVG_TALK_TIME">AVG Talk Time</span></td>\n                                    <td md-cell>~ {{ vm.queueCampaign.predictiveIntervalAvgTalktime | number:0 }}s</td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                </md-card>\n                <md-card>\n                    <md-toolbar class="md-table-toolbar md-default">\n                        <div class="md-toolbar-tools">\n                            <span class="md-subhead">ErlangB - {{ \'MOTIONDIALER.CURRENT_INTERVAL\' | translate }}</span>\n                        </div>\n                    </md-toolbar>\n                    <md-table-container>\n                        <table md-table>\n                            <tbody md-body>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.SCHEDULED_CALLS">Scheduled Calls</span></td>\n                                    <td md-cell>{{ vm.queueCampaign.erlangCalls }}</td>\n                                </tr>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.ONE_CALL_EVERY">One call every</span></td>\n                                    <td md-cell>~ {{ vm.queueCampaign.erlangCallToSecond | number:0 }}s</td>\n                                </tr>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.DROPRATE">Drop Rate</span></td>\n                                    <td md-cell>{{ vm.queueCampaign.erlangAbandonmentRate * 100 | number:2 }}%</td>\n                                </tr>\n                                <tr md-row>\n                                    <td md-cell><span translate="MOTIONDIALER.AGENTBUSYFACTOR">Agent Busy Factor</span></td>\n                                    <td md-cell>{{ vm.queueCampaign.erlangBusyFactor * 100 | number:2 }}%</td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </md-table-container>\n                </md-card>\n            </div>\n        </div>\n\n\n    </md-dialog-content>\n</md-dialog>'),e.put("app/main/apps/motiondialer/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MOTIONDIALER.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'MOTIONDIALER.NAME\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.READY\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.WAITING\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.TALKING\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.ORIGINATED\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.MESSAGE\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.METHOD\' | translate }}</th>\n                <th md-column>{{ \'MOTIONDIALER.TRUNK\' | translate }}</th>\n                <th md-column md-order-by="dialActive">{{ \'MOTIONDIALER.ACTIVE\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="12">\n                    <div layout="row" layout-align="center center">\n                        <span translate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{(vm.queues[value].talking || 0)  +  (vm.queues[value].pTalking || 0)}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].originated || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].message ? (\'MOTIONDIALER.\'+vm.queues[value].message | translate) : \'--\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].dialMethod || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].Trunk ? vm.queues[value].Trunk.name : \'--\'}}</span>\n                </td>\n                <td md-cell>\n                    <md-icon md-colors="{color: {{vm.queues[value].dialActive ? \'\\\'green\\\'\' : \'\\\'red\\\'\'}}}" md-font-icon="{{vm.queues[value].dialActive ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditMotionDialerQueue($event, vm.queues[value])" translate="MOTIONDIALER.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item ng-if="vm.queues[value].dialMethod == \'predictive\'">\n                                <md-button ng-click="vm.showPredictiveQueueCampaignInfo($event, vm.queues[value])" translate="MOTIONDIALER.SHOW_PREDICTIVE_QUEUE_CAMPAIGN_INFO">\n                                    Show Predictive Info\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="MOTIONDIALER.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/motiondialer/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.QUEUE_CALLS">Queue Calls</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.ABANDONEDCALLS">Abandoned Queue Calls</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.QUEUE_PARAMS">Queue Parameters</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="MOTIONDIALER.IVR_CAMPAIGNS">Ivr Campaigns</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/create/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.openchannelAccount.name" ng-required="true" autofocus ng-disabled="!vm.newOpenchannelAccount">\n\n                <div ng-messages="openchannelAccountForm[\'name\'].$error" ng-show="openchannelAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.KEY">key</label>\n                <input type="text" name="key" ng-model="vm.openchannelAccount.key" md-maxlength="5" ng-required="true">\n\n                <div ng-messages="openchannelAccountForm[\'key\'].$error" ng-show="openchannelAccountForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.KEY_REQUIRED">key field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="OPENCHANNEL.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.REPLYURI">replyUri</label>\n                <input type="url" name="replyUri" ng-model="vm.openchannelAccount.replyUri">\n\n                <div class="hint"><span translate="OPENCHANNEL.HELP.REPLYURI"></span></div>\n                <div ng-messages="openchannelAccountForm[\'replyUri\'].$error" ng-show="openchannelAccountForm[\'replyUri\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.REPLYURI_REQUIRED">replyUri field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="OPENCHANNEL.ERRORS.REPLYURI_MUST_VALID_URL">replyUri must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.LIST">List</label>\n                <md-select name="ListId" ng-model="vm.openchannelAccount.ListId" required>\n                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                </md-select>\n                <div class="hint"><span translate="OPENCHANNEL.HELP.LIST"></span></div>\n                <div ng-messages="openchannelAccountForm[\'ListId\'].$error" ng-show="openchannelAccountForm[\'ListId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.openchannelAccount.description">\n\n                <div ng-messages="openchannelAccountForm[\'description\'].$error" ng-show="openchannelAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newOpenchannelAccount" ng-click="vm.saveOpenchannelAccount()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountForm.$invalid || openchannelAccountForm.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newOpenchannelAccount" ng-click="vm.addNewOpenchannelAccount()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountForm.$invalid" aria-label="ADD" translate="OPENCHANNEL.ADD_OPENCHANNELACCOUNT" translate-attr-aria-label="OPENCHANNEL.ADD_OPENCHANNELACCOUNT">\n                    ADD OPENCHANNELACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newOpenchannelAccount" ng-click="vm.deleteOpenchannelAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="OPENCHANNEL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="OPENCHANNEL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/agentadd/agentadd.html",'<md-dialog class="openchannelAccount-dialog" aria-label="openchannelAccount" ng-init="vm.onInit()">\n    <form name="openchannelAccountForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="OPENCHANNEL.AGENTADD_OPENCHANNELACCOUNT">Add Agent to openchannelAccount</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/agent/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.AGENT">Agent</label>\n                <md-select name="agent" ng-model="vm.agent.agent" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents" ng-disabled="agent.canSelect === false">{{ agent.name }}</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'agent\'].$error" ng-show="openchannelAccountFormApp[\'agent\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.agent.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'timeout\'].$error" ng-show="openchannelAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="OPENCHANNEL.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="OPENCHANNEL.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/amazonlex/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.ACCESSKEYID">accesskeyid</label>\n                <input type="text" name="accesskeyid" ng-model="vm.amazonlex.accesskeyid" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'accesskeyid\'].$error" ng-show="openchannelAccountFormApp[\'accesskeyid\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.ACCESSKEYID_REQUIRED">accesskeyid field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.SECRETACCESSKEY">secretaccesskey</label>\n                <input type="text" name="secretaccesskey" ng-model="vm.amazonlex.secretaccesskey" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'secretaccesskey\'].$error" ng-show="openchannelAccountFormApp[\'secretaccesskey\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.SECRETACCESSKEY_REQUIRED">secretaccesskey field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.LEXREGION">lexregion</label>\n                <md-select name="lexregion" ng-model="vm.amazonlex.lexregion" required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'us-east-1\'">US East (N. Virginia)</md-option>\n                    <md-option ng-value="\'us-west-2\'">US West (Oregon)</md-option>\n                    <md-option ng-value="\'eu-west-1\'">EU (Ireland)</md-option>\n                    <md-option ng-value="\'ap-southeast-2\'">Asia Pacific (Sydney)</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'lexregion\'].$error" ng-show="openchannelAccountFormApp[\'lexregion\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.LEXREGION_REQUIRED">lexregion field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.BOTNAME">botname</label>\n                <input type="text" name="botname" ng-model="vm.amazonlex.botname" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'botname\'].$error" ng-show="openchannelAccountFormApp[\'botname\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.BOTNAME_REQUIRED">botname field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.WELCOMEMESSAGE">welcomemessage</label>\n                <textarea name="welcomemessage" ng-model="vm.amazonlex.welcomemessage" md-maxlength="255"></textarea>\n                <div class="hint"><span translate="OPENCHANNEL.HELP.WELCOMEMESSAGE"></span></div>\n\n                <div ng-messages="openchannelAccountFormApp[\'welcomemessage\'].$error" ng-show="openchannelAccountFormApp[\'welcomemessage\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.WELCOMEMESSAGE_REQUIRED">welcomemessage field is required</span>\n                    </div>\n\n\n                    <div ng-message="md-maxlength">\n                        <span translate="OPENCHANNEL.ERRORS.WELCOMEMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>welcomemessage must have a maximum length equal to 255</span>\n                    </div>\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/autoreply/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.TIMES">times</label>\n                <md-select name="times" ng-model="vm.autoreply.times" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="1">One Time</md-option>\n                    <md-option ng-value="0">Always</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'times\'].$error" ng-show="openchannelAccountFormApp[\'times\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TIMES_REQUIRED">times field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.TEXT">Text</label>\n                <textarea name="text" ng-model="vm.autoreply.text" required></textarea>\n\n                <div ng-messages="openchannelAccountFormApp[\'text\'].$error" ng-show="openchannelAccountFormApp[\'text\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TEXT_REQUIRED">Text field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/close/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.DISPOSITION">Disposition</label>\n                <input type="text" name="disposition" ng-model="vm.close.disposition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'disposition\'].$error" ng-show="openchannelAccountFormApp[\'disposition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.DISPOSITION_REQUIRED">Disposition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/dialogflow/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.KEY">Key</label>\n                <input type="text" name="key" ng-model="vm.dialogflow.key" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'key\'].$error" ng-show="openchannelAccountFormApp[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.LANGUAGE">language</label>\n                <md-select name="language" ng-model="vm.dialogflow.language" required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'da\'">Danish</md-option>\n                    <md-option ng-value="\'en\'">English</md-option>\n                    <md-option ng-value="\'de\'">German</md-option>\n                    <md-option ng-value="\'it\'">Italian</md-option>\n                    <md-option ng-value="\'es\'">Spanish</md-option>\n                    <md-option ng-value="\'fr\'">French</md-option>\n                    <md-option ng-value="\'id\'">Indonesian</md-option>\n                    <md-option ng-value="\'ja\'">Japanese</md-option>\n                    <md-option ng-value="\'ko\'">Korean (South Korea)</md-option>\n                    <md-option ng-value="\'nl\'">Dutch</md-option>\n                    <md-option ng-value="\'no\'">Norwegian</md-option>\n                    <md-option ng-value="\'pt\'">Portuguese (European)</md-option>\n                    <md-option ng-value="\'pt-br\'">Portuguese (Nrazilian)</md-option>\n                    <md-option ng-value="\'ru\'">Russian</md-option>\n                    <md-option ng-value="\'sv\'">Swedish</md-option>\n                    <md-option ng-value="\'th\'">Thai</md-option>\n                    <md-option ng-value="\'uk\'">Ukrainian</md-option>\n                    <md-option ng-value="\'zh-CN\'">Chinese (Simplified)</md-option>\n                    <md-option ng-value="\'zh-HK\'">Chinese (Hong Kong)</md-option>\n                    <md-option ng-value="\'zh-TW\'">Chinese (Traditional)</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'language\'].$error" ng-show="openchannelAccountFormApp[\'language\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.LANGUAGE_REQUIRED">language field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.WELCOMEMESSAGE">welcomemessage</label>\n                <textarea name="welcomemessage" ng-model="vm.dialogflow.welcomemessage" md-maxlength="255"></textarea>\n                <div class="hint"><span translate="OPENCHANNEL.HELP.WELCOMEMESSAGE"></span></div>\n\n                <div ng-messages="openchannelAccountFormApp[\'welcomemessage\'].$error" ng-show="openchannelAccountFormApp[\'welcomemessage\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.WELCOMEMESSAGE_REQUIRED">welcomemessage field is required</span>\n                    </div>\n\n\n                    <div ng-message="md-maxlength">\n                        <span translate="OPENCHANNEL.ERRORS.WELCOMEMESSAGE_MAX_LENGTH" translate-values=\'{max: 255}\'>welcomemessage must have a maximum length equal to 255</span>\n                    </div>\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/gotoif/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.CONDITION">Condition</label>\n                <input type="text" name="condition" ng-model="vm.gotoif.condition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'condition\'].$error" ng-show="openchannelAccountFormApp[\'condition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.CONDITION_REQUIRED">Condition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.TRUEPRIORITY">truepriority</label>\n                <input type="number" name="truepriority" ng-model="vm.gotoif.truepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'truepriority\'].$error" ng-show="openchannelAccountFormApp[\'truepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TRUEPRIORITY_REQUIRED">truepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="OPENCHANNEL.ERRORS.TRUEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">truepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.FALSEPRIORITY">falsepriority</label>\n                <input type="number" name="falsepriority" ng-model="vm.gotoif.falsepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'falsepriority\'].$error" ng-show="openchannelAccountFormApp[\'falsepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.FALSEPRIORITY_REQUIRED">falsepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="OPENCHANNEL.ERRORS.FALSEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">falsepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/gotop/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.PRIORITY">Priority</label>\n                <input type="number" name="priority" ng-model="vm.gotop.priority" min="0" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'priority\'].$error" ng-show="openchannelAccountFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="OPENCHANNEL.ERRORS.PRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Priority must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/noop/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.noop.value" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'value\'].$error" ng-show="openchannelAccountFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/queue/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'queue\'].$error" ng-show="openchannelAccountFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'timeout\'].$error" ng-show="openchannelAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="OPENCHANNEL.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="OPENCHANNEL.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/system/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.COMMAND">Command</label>\n                <input type="text" name="command" ng-model="vm.system.command" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="openchannelAccountFormApp[\'command\'].$error" ng-show="openchannelAccountFormApp[\'command\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.COMMAND_REQUIRED">Command field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.VARIABLE">Variable</label>\n                <md-select name="variable" ng-model="vm.system.variable" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables" ng-disabled="variable.canSelect === false">{{ variable.name }}</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'variable\'].$error" ng-show="openchannelAccountFormApp[\'variable\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/apps/tag/dialog.html",'<md-dialog class="openchannelAccount-dialog" aria-label="New OpenchannelAccount">\n    <form name="openchannelAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.TAG">Tag</label>\n                <md-select name="tag" ng-model="vm.tag.tag" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags" ng-disabled="tag.canSelect === false">{{ tag.name }}</md-option>\n                </md-select>\n                <div ng-messages="openchannelAccountFormApp[\'tag\'].$error" ng-show="openchannelAccountFormApp[\'tag\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.TAG_REQUIRED">Tag field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOpenchannelAccountApp()" class="send-button md-accent md-raised" ng-disabled="openchannelAccountFormApp.$invalid || openchannelAccountFormApp.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/openchannelCannedAnswers/dialog.html",'<md-dialog class="openchannelCannedAnswer-dialog" aria-label="New OpenchannelCannedAnswer">\n    <form name="openchannelCannedAnswerForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.KEY">Key</label>\n                <input type="" name="key" ng-model="vm.openchannelCannedAnswer.key" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="openchannelCannedAnswerForm[\'key\'].$error" ng-show="openchannelCannedAnswerForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.VALUE">Value</label>\n                <textarea name="value" ng-model="vm.openchannelCannedAnswer.value" required></textarea>\n\n                <div ng-messages="openchannelCannedAnswerForm[\'value\'].$error" ng-show="openchannelCannedAnswerForm[\'value\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.openchannelCannedAnswer.description">\n\n                <div ng-messages="openchannelCannedAnswerForm[\'description\'].$error" ng-show="openchannelCannedAnswerForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newOpenchannelCannedAnswer" ng-click="vm.saveOpenchannelCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="openchannelCannedAnswerForm.$invalid || openchannelCannedAnswerForm.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newOpenchannelCannedAnswer" ng-click="vm.addNewOpenchannelCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="openchannelCannedAnswerForm.$invalid" aria-label="ADD" translate="OPENCHANNEL.ADD_OPENCHANNELCANNEDANSWER" translate-attr-aria-label="OPENCHANNEL.ADD_OPENCHANNELCANNEDANSWER">\n                    ADD OPENCHANNELCANNEDANSWER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newOpenchannelCannedAnswer" ng-click="vm.deleteOpenchannelCannedAnswer($event)" aria-label="DELETE" translate translate-attr-aria-label="OPENCHANNEL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="OPENCHANNEL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/openchannelDispositions/dialog.html",'<md-dialog class="openchannelDisposition-dialog" aria-label="New OpenchannelDisposition">\n    <form name="openchannelDispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.openchannelDisposition.name" ng-required="true" autofocus>\n\n                <div ng-messages="openchannelDispositionForm[\'name\'].$error" ng-show="openchannelDispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newOpenchannelDisposition" ng-click="vm.saveOpenchannelDisposition()" class="send-button md-accent md-raised" ng-disabled="openchannelDispositionForm.$invalid || openchannelDispositionForm.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newOpenchannelDisposition" ng-click="vm.addNewOpenchannelDisposition()" class="send-button md-accent md-raised" ng-disabled="openchannelDispositionForm.$invalid" aria-label="ADD" translate="OPENCHANNEL.ADD_OPENCHANNELDISPOSITION" translate-attr-aria-label="OPENCHANNEL.ADD_OPENCHANNELDISPOSITION">\n                    ADD OPENCHANNELDISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newOpenchannelDisposition" ng-click="vm.deleteOpenchannelDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="OPENCHANNEL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="OPENCHANNEL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/edit/view.html",'<div id="openchannel-openchannelAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-openchannelAccounts-button md-icon-button" aria-label="Go to openchannelAccounts" ng-click="vm.gotoOpenchannelAccounts()" translate translate-attr-aria-label="OPENCHANNEL.GO_TO_OPENCHANNELACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="openchannelAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/openchannelAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.openchannelAccount.id}}\n                        <span ng-if="vm.openchannelAccount.name">{{vm.openchannelAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="OPENCHANNEL.CREATED_AT"></span> <span>{{vm.openchannelAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.openchannelAccount, $event)" class="md-fab md-warn md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="OPENCHANNEL.AGENTADD_OPENCHANNELACCOUNT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveOpenchannelAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (proxyForm.$invalid) || (dispositionForm.$invalid) || (openchannelDispositionsForm.$invalid) || (openchannelCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="OPENCHANNEL.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.openchannelAccount.name" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.KEY">key</label>\n                                <input type="text" name="key" ng-model="vm.openchannelAccount.key" md-maxlength="5" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'key\'].$error" ng-show="generalForm[\'key\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.KEY_REQUIRED">key field is required</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="OPENCHANNEL.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.REPLYURI">replyUri</label>\n                                <input type="url" name="replyUri" ng-model="vm.openchannelAccount.replyUri" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="OPENCHANNEL.HELP.REPLYURI"></span></div>\n                                <div ng-messages="generalForm[\'replyUri\'].$error" ng-show="generalForm[\'replyUri\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.REPLYURI_REQUIRED">replyUri field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="OPENCHANNEL.ERRORS.REPLYURI_MUST_VALID_URL">replyUri must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.LIST">List</label>\n                                <md-select name="ListId" ng-model="vm.openchannelAccount.ListId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="OPENCHANNEL.HELP.LIST"></span></div>\n                                <div ng-messages="generalForm[\'ListId\'].$error" ng-show="generalForm[\'ListId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.LIST_REQUIRED">List field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.WAITFORTHEASSIGNEDAGENT">WaitForTheAssignedAgent</label>\n                                <input type="number" name="waitForTheAssignedAgent" ng-model="vm.openchannelAccount.waitForTheAssignedAgent" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'waitForTheAssignedAgent\'].$error" ng-show="generalForm[\'waitForTheAssignedAgent\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.WAITFORTHEASSIGNEDAGENT_REQUIRED">WaitForTheAssignedAgent field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="OPENCHANNEL.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="OPENCHANNEL.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_LESS_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.MAPKEY">MapKey</label>\n                                <md-select name="mapKey" ng-model="vm.openchannelAccount.mapKey" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'\'">None</md-option>\n                                    <md-optgroup label="standard">\n                                        <md-option ng-value="mapKey.columnName" ng-repeat="mapKey in vm.fields" ng-if="!mapKey.columnName.toString().startsWith(\'cf_\')" ng-disabled="mapKey.canSelect === false">{{ mapKey.displayName }}</md-option>\n                                    </md-optgroup>\n                                    <md-optgroup label="custom">\n                                        <md-option ng-value="mapKey.columnName" ng-repeat="mapKey in vm.fields" ng-if="mapKey.columnName.toString().startsWith(\'cf_\')" ng-disabled="mapKey.canSelect === false">{{ mapKey.displayName }}</md-option>\n                                    </md-optgroup>\n                                </md-select>\n                                <div ng-messages="generalForm[\'mapKey\'].$error" ng-show="generalForm[\'mapKey\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.MAPKEY_REQUIRED">MapKey field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.openchannelAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.RECEIVEURI">receiveUri</label>\n                                <div layout="row" layout-align="center center">\n                                    <button class="md-button md-fab md-mini md-primary" ngclipboard data-clipboard-target="#copytoclipboard-receiveUri" ngclipboard-success="vm.alert({title: \'copied to clipboard\', msg: e.text});" ngclipboard-error="vm.alert({title: \'error\', msg: \'copy to clipboard failed\'});">\n                                        <md-icon md-font-icon="icon-clipboard-text"></md-icon>\n                                    </button>\n                                    <input class="md-input" type="text" id="copytoclipboard-receiveUri" name="receiveUri" ng-value="vm.location + \'/api/openchannel/accounts/\' + vm.openchannelAccount.id + \'/notify\'" ng-readonly="true">\n                                </div>\n                                <div class="hint"><span translate="OPENCHANNEL.HELP.RECEIVEURI"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="openchannelAccount-detail-form-container notification md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="OPENCHANNEL.NOTIFICATION">NOTIFICATION</div>\n                        </div>\n                        <form name="notificationForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.openchannelAccount.notificationSound" aria-label="notificationSound" ng-disabled="!vm.crudPermissions.canEdit"><span translate="OPENCHANNEL.NOTIFICATIONSOUND">notificationSound</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.openchannelAccount.notificationShake" aria-label="notificationShake" ng-disabled="!vm.crudPermissions.canEdit"><span translate="OPENCHANNEL.NOTIFICATIONSHAKE">notificationShake</span></md-switch>\n\n                            </md-input-container>\n                            <div class="md-block">\n                                <label class="md-caption grey-fg" translate="OPENCHANNEL.NOTIFICATIONTEMPLATE">notificationTemplate</label>\n                                <textarea aria-label="notificationTemplate notificationTemplate" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.openchannelAccount.notificationTemplate"></textarea>\n                            </div>\n\n                        </form>\n                    </div>\n                    <div class="openchannelAccount-detail-form-container transfer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="OPENCHANNEL.TRANSFER">TRANSFER</div>\n                        </div>\n                        <form name="transferForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.openchannelAccount.queueTransfer" aria-label="queueTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="OPENCHANNEL.QUEUETRANSFER">queueTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.openchannelAccount.queueTransfer == true" class="md-block">\n                                <label translate="OPENCHANNEL.QUEUETRANSFERTIMEOUT">queueTransferTimeout</label>\n                                <input type="number" name="queueTransferTimeout" ng-model="vm.openchannelAccount.queueTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'queueTransferTimeout\'].$error" ng-show="transferForm[\'queueTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.QUEUETRANSFERTIMEOUT_REQUIRED">queueTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="OPENCHANNEL.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="OPENCHANNEL.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.openchannelAccount.agentTransfer" aria-label="agentTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="OPENCHANNEL.AGENTTRANSFER">agentTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.openchannelAccount.agentTransfer == true" class="md-block">\n                                <label translate="OPENCHANNEL.AGENTTRANSFERTIMEOUT">agentTransferTimeout</label>\n                                <input type="number" name="agentTransferTimeout" ng-model="vm.openchannelAccount.agentTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'agentTransferTimeout\'].$error" ng-show="transferForm[\'agentTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.AGENTTRANSFERTIMEOUT_REQUIRED">agentTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="OPENCHANNEL.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="OPENCHANNEL.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelAccount-detail-form-container proxy md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="OPENCHANNEL.PROXY">PROXY</div>\n                        </div>\n                        <form name="proxyForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.TOKEN">token</label>\n                                <input type="text" name="token" ng-model="vm.openchannelAccount.token" autofocus disabled>\n\n                                <div class="hint"><span translate="OPENCHANNEL.HELP.TOKEN"></span></div>\n                                <div ng-messages="proxyForm[\'token\'].$error" ng-show="proxyForm[\'token\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.TOKEN_REQUIRED">token field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="openchannelAccount-detail-form-container disposition md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="OPENCHANNEL.DISPOSITION">DISPOSITION</div>\n                        </div>\n                        <form name="dispositionForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.openchannelAccount.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="OPENCHANNEL.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.openchannelAccount.mandatoryDisposition" class="md-block">\n                                <label translate="OPENCHANNEL.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.openchannelAccount.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="OPENCHANNEL.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="dispositionForm[\'mandatoryDispositionPauseId\'].$error" ng-show="dispositionForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.DISPOSITIONS">DISPOSITIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelAccount-detail-form-container openchanneldispositions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="OpenchannelAccountOpenchannelDispositionsController as vm_dc" ng-init="vm_dc.init(vm.openchannelAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedOpenchannelAccountOpenchannelDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="OPENCHANNEL.OPENCHANNELDISPOSITIONS">OpenchannelDispositions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelDisposition($event)" aria-label="add openchannelDisposition" translate translate-attr-label="OPENCHANNEL.ADD_OPENCHANNELDISPOSITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedOpenchannelAccountOpenchannelDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedOpenchannelAccountOpenchannelDispositions.length}} {{vm_dc.selectedOpenchannelAccountOpenchannelDispositions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedOpenchannelAccountOpenchannelDispositions" csv-label="true" filename="openchannelAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedOpenchannelAccountOpenchannelDispositions($event)" aria-label="delete selected" translate translate-attr-label="OPENCHANNELACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedOpenchannelAccountOpenchannelDispositions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getOpenchannelAccountOpenchannelDispositions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'OPENCHANNEL.ID\' | translate }}</th>\n                                            <th md-column md-order-by="name">{{ \'OPENCHANNEL.NAME\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'OPENCHANNEL.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="openchannelDisposition" md-select-id="id" ng-repeat="openchannelDisposition in vm_dc.openchannelAccountOpenchannelDispositions.rows">\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelDisposition($event, openchannelDisposition)" md-cell>{{openchannelDisposition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelDisposition($event, openchannelDisposition)" md-cell>{{openchannelDisposition.name}}</td>\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelDisposition($event, openchannelDisposition)" md-cell>{{openchannelDisposition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="OPENCHANNEL.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelDisposition($event, openchannelDisposition)" translate="OPENCHANNEL.EDIT_OPENCHANNELDISPOSITION">\n                                                                Edit OpenchannelDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(openchannelDisposition, $event)" translate="OPENCHANNEL.DELETE_OPENCHANNELDISPOSITION">\n                                                                Delete OpenchannelDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.openchannelAccountOpenchannelDispositions.rows.length">\n                                            <td md-cell colspan="5">\n                                                <span class="text-boxed-ligth" translate="OPENCHANNEL.NO_OPENCHANNELDISPOSITION_AVAILABLE">No openchanneldisposition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'OPENCHANNEL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'OPENCHANNEL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'OPENCHANNEL.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.openchannelAccountOpenchannelDispositions.count}}" md-on-paginate="vm_dc.getOpenchannelAccountOpenchannelDispositions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.CANNEDANSWERS">CANNEDANSWERS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelAccount-detail-form-container openchannelcannedanswers md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="OpenchannelAccountOpenchannelCannedAnswersController as vm_dc" ng-init="vm_dc.init(vm.openchannelAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="OPENCHANNEL.OPENCHANNELCANNEDANSWERS">OpenchannelCannedAnswers</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event)" aria-label="add openchannelCannedAnswer" translate translate-attr-label="OPENCHANNEL.ADD_OPENCHANNELCANNEDANSWER">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers.length}} {{vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedOpenchannelAccountOpenchannelCannedAnswers" csv-label="true" filename="openchannelAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedOpenchannelAccountOpenchannelCannedAnswers($event)" aria-label="delete selected" translate translate-attr-label="OPENCHANNELACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getOpenchannelAccountOpenchannelCannedAnswers">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'OPENCHANNEL.ID\' | translate }}</th>\n                                            <th md-column md-order-by="key">{{ \'OPENCHANNEL.KEY\' | translate }}</th>\n                                            <th md-column md-order-by="value">{{ \'OPENCHANNEL.VALUE\' | translate }}</th>\n                                            <th md-column md-order-by="description">{{ \'OPENCHANNEL.DESCRIPTION\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'OPENCHANNEL.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="openchannelCannedAnswer" md-select-id="id" ng-repeat="openchannelCannedAnswer in vm_dc.openchannelAccountOpenchannelCannedAnswers.rows">\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)" md-cell>{{openchannelCannedAnswer.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)" md-cell>{{openchannelCannedAnswer.key}}</td>\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)" md-cell>{{openchannelCannedAnswer.value}}</td>\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)" md-cell>{{openchannelCannedAnswer.description}}</td>\n                                            <td ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)" md-cell>{{openchannelCannedAnswer.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="OPENCHANNEL.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)" translate="OPENCHANNEL.EDIT_OPENCHANNELCANNEDANSWER">\n                                                                Edit OpenchannelCannedAnswer\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(openchannelCannedAnswer, $event)" translate="OPENCHANNEL.DELETE_OPENCHANNELCANNEDANSWER">\n                                                                Delete OpenchannelCannedAnswer\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.openchannelAccountOpenchannelCannedAnswers.rows.length">\n                                            <td md-cell colspan="7">\n                                                <span class="text-boxed-ligth" translate="OPENCHANNEL.NO_OPENCHANNELCANNEDANSWER_AVAILABLE">No openchannelcannedanswer available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'OPENCHANNEL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'OPENCHANNEL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'OPENCHANNEL.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.openchannelAccountOpenchannelCannedAnswers.count}}" md-on-paginate="vm_dc.getOpenchannelAccountOpenchannelCannedAnswers" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelAccount-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="OpenchannelAccountActionsController as vm_ac" ng-init="vm_ac.init(vm.openchannelAccount, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="OPENCHANNEL.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedOpenchannelAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedOpenchannelAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedOpenchannelAccountApps.length}} {{vm_ac.selectedOpenchannelAccountApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedOpenchannelAccountApps($event)" aria-label="delete selected" translate translate-attr-label="OPENCHANNEL.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedOpenchannelAccountApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px">\n                                                    <span translate="VOICE.PRIORITY">Priority</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.openchannelAccountApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editOpenchannelAccountApp($event, $index)"><span>{{app.priority}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editOpenchannelAccountApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editOpenchannelAccountApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editOpenchannelAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.openchannelAccountApps.rows.length">\n                                                <td md-cell colspan="7">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.INTERACTIONS">INTERACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelAccount-detail-form-container interactions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="OpenchannelAccountInteractionsController as vm_dc" ng-init="vm_dc.init(vm.openchannelAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedOpenchannelAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="OPENCHANNEL.INTERACTIONS">Interactions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm_dc.getOpenchannelAccountInteractions()" aria-label="refresh Interactions" translate translate-attr-label="OPENCHANNEL.REFRESH_INTERACTIONS">\n                                        <md-icon md-font-icon="icon-refresh"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedOpenchannelAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedOpenchannelAccountInteractions.length}} {{vm_dc.selectedOpenchannelAccountInteractions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedOpenchannelAccountInteractions" csv-label="true" filename="openchannelAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedOpenchannelAccountInteractions($event)" aria-label="delete selected" translate translate-attr-label="OPENCHANNELACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedOpenchannelAccountInteractions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getOpenchannelAccountInteractions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'OPENCHANNEL.ID\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'OPENCHANNEL.STARTEDAT\' | translate }}</th>\n                                            <th md-column>{{ \'OPENCHANNEL.CONTACT\' | translate }}</th>\n                                            <th md-column>{{ \'OPENCHANNEL.AGENT\' | translate }}</th>\n                                            <th md-column md-order-by="closedAt">{{ \'OPENCHANNEL.CLOSEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="disposition">{{ \'OPENCHANNEL.DISPOSITION\' | translate }}</th>\n                                            <th md-column md-order-by="note">{{ \'OPENCHANNEL.NOTES\' | translate }}</th>\n                                            <th md-column md-order-by="tag">{{ \'OPENCHANNEL.TAGS\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="interaction" md-select-id="id" ng-repeat="interaction in vm_dc.openchannelAccountInteractions.rows">\n                                            <td md-cell>{{interaction.id}}</td>\n                                            <td md-cell>{{interaction.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.Contact.firstName}}</td>\n                                            <td md-cell>{{interaction.Owner.name}}</td>\n                                            <td md-cell>{{interaction.closedAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.disposition}}</td>\n                                            <td md-cell>{{interaction.note}}</td>\n                                            <td md-cell>\n                                                <div ng-if="interaction.Tags.length">\n                                                    <md-tooltip md-direction="left" layout="row">\n                                                        <span ng-repeat="tag in interaction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                                    </md-tooltip>\n                                                    <md-icon md-font-icon="icon-tag"></md-icon>\n                                                </div>\n                                            </td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="OPENCHANNEL.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_dc.spyopenchannelInteraction($event, interaction)" translate="OPENCHANNEL.SPYINTERACTION">\n                                                                Spy Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.openchannelInteractionDownload(interaction, $event)" translate="OPENCHANNEL.DOWNLOAD_INTERACTION">\n                                                                Download Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(interaction, $event)" translate="OPENCHANNEL.DELETE_INTERACTION">\n                                                                Delete Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.openchannelAccountInteractions.rows.length">\n                                            <td md-cell colspan="13">\n                                                <span class="text-boxed-ligth" translate="OPENCHANNEL.NO_INTERACTION_AVAILABLE">No interaction available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'OPENCHANNEL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'OPENCHANNEL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'OPENCHANNEL.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.openchannelAccountInteractions.count}}" md-on-paginate="vm_dc.getOpenchannelAccountInteractions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/openchannel/views/openchannelAccounts/openchannelAccounts.html",'<div id="openchannelAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-google-earth" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="OPENCHANNEL.OPENCHANNELACCOUNTS">OpenchannelAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="OPENCHANNEL.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedOpenchannelAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedOpenchannelAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="OPENCHANNEL.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-openchannelAccounts-count">\n                    <span>{{vm.selectedOpenchannelAccounts.length}}</span>\n                    <span translate="OPENCHANNEL.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="OPENCHANNELACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllOpenchannelAccounts()" translate="OPENCHANNEL.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectOpenchannelAccounts()" translate="OPENCHANNEL.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedOpenchannelAccounts" csv-label="true" filename="openchannelAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedOpenchannelAccounts($event)" aria-label="delete selected" translate translate-attr-label="OPENCHANNELACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- OPENCHANNELACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedOpenchannelAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getOpenchannelAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'OPENCHANNEL.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'OPENCHANNEL.NAME\' | translate }}</th>\n                                <th md-column md-order-by="key">{{ \'OPENCHANNEL.KEY\' | translate }}</th>\n                                <th md-column md-order-by="replyUri">{{ \'OPENCHANNEL.REPLYURI\' | translate }}</th>\n                                <th md-column md-order-by="ListId">{{ \'OPENCHANNEL.LIST\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'OPENCHANNEL.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.openchannelAccounts.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="OPENCHANNEL.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="openchannelAccount" md-select-id="id" ng-repeat="openchannelAccount in vm.openchannelAccounts.rows">\n                                <td md-cell ng-if="openchannelAccount.userpic"><img class="avatar" alt="{{openchannelAccount.name}}" ng-src="api/users/{{openchannelAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!openchannelAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{openchannelAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelAccount, ev) : vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="id ">{{openchannelAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelAccount, ev) : vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="name ">{{openchannelAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelAccount, ev) : vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="key ">{{openchannelAccount.key}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelAccount, ev) : vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="replyUri ">{{openchannelAccount.replyUri}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelAccount, ev) : vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="ListId ">{{ (vm.lists | filter : {\'id\':openchannelAccount.ListId} : true)[0].name }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelAccount, ev) : vm.createOrEditOpenchannelAccount($event, openchannelAccount)" md-cell class="description ">{{openchannelAccount.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="OPENCHANNEL.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(openchannelAccount, $event    )" translate="OPENCHANNEL.EDIT_OPENCHANNELACCOUNT">\n                                                    Edit OpenchannelAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.interactionsgoto(openchannelAccount, $event    )" translate="OPENCHANNEL.INTERACTIONS_OPENCHANNELACCOUNT">\n                                                    Interactions OpenchannelAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(openchannelAccount, $event    )" translate="OPENCHANNEL.AGENTADD_OPENCHANNELACCOUNT">\n                                                    AgentAdd OpenchannelAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(openchannelAccount, $event    )" translate="OPENCHANNEL.DELETE_OPENCHANNELACCOUNT">\n                                                    Delete OpenchannelAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'OPENCHANNEL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'OPENCHANNEL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'OPENCHANNEL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.openchannelAccounts.count}}" md-on-paginate="vm.getOpenchannelAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / OPENCHANNELACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD OPENCHANNELACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-openchannelAccount-button" ng-click="vm.createOrEditOpenchannelAccount($event)" aria-label="add openchannelAccount" translate translate-attr-aria-label="OPENCHANNEL.ADD_OPENCHANNELACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD OPENCHANNELACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/openchannel/views/openchannelQueues/create/dialog.html",'<md-dialog class="openchannelQueue-dialog" aria-label="New OpenchannelQueue">\n    <form name="openchannelQueueForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.openchannelQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newOpenchannelQueue">\n\n                <div class="hint"><span translate="OPENCHANNEL.HELP.NAME"></span></div>\n                <div ng-messages="openchannelQueueForm[\'name\'].$error" ng-show="openchannelQueueForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="OPENCHANNEL.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.STRATEGY">Strategy</label>\n                <md-select name="strategy" ng-model="vm.openchannelQueue.strategy" required>\n                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                </md-select>\n                <div ng-messages="openchannelQueueForm[\'strategy\'].$error" ng-show="openchannelQueueForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.AGENT_TIMEOUT">Agent_Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.openchannelQueue.timeout" min="1" max="2147483" ng-required="true">\n\n                <div ng-messages="openchannelQueueForm[\'timeout\'].$error" ng-show="openchannelQueueForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="OPENCHANNEL.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="OPENCHANNEL.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="OPENCHANNEL.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.openchannelQueue.description">\n\n                <div ng-messages="openchannelQueueForm[\'description\'].$error" ng-show="openchannelQueueForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="OPENCHANNEL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newOpenchannelQueue" ng-click="vm.saveOpenchannelQueue()" class="send-button md-accent md-raised" ng-disabled="openchannelQueueForm.$invalid || openchannelQueueForm.$pristine" aria-label="SAVE" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newOpenchannelQueue" ng-click="vm.addNewOpenchannelQueue()" class="send-button md-accent md-raised" ng-disabled="openchannelQueueForm.$invalid" aria-label="ADD" translate="OPENCHANNEL.ADD_OPENCHANNELQUEUE" translate-attr-aria-label="OPENCHANNEL.ADD_OPENCHANNELQUEUE">\n                    ADD OPENCHANNELQUEUE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newOpenchannelQueue" ng-click="vm.deleteOpenchannelQueue($event)" aria-label="DELETE" translate translate-attr-aria-label="OPENCHANNEL.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="OPENCHANNEL.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelQueues/edit/agentadd/agentadd.html",'<md-dialog class="openchannelQueue-dialog" aria-label="openchannelQueue" ng-init="vm.onInit()">\n    <form name="openchannelQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="OPENCHANNEL.AGENTADD_OPENCHANNELQUEUE">Add Agent to openchannelQueue</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelQueues/edit/teamadd/teamadd.html",'<md-dialog class="openchannelQueue-dialog" aria-label="openchannelQueue" ng-init="vm.onInit()">\n    <form name="openchannelQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="OPENCHANNEL.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/openchannel/views/openchannelQueues/edit/view.html",'<div id="openchannel-openchannelQueue" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-openchannelQueues-button md-icon-button" aria-label="Go to openchannelQueues" ng-click="vm.gotoOpenchannelQueues()" translate translate-attr-aria-label="OPENCHANNEL.GO_TO_OPENCHANNELQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="openchannelQueue-image" hide-xs>\n                    <img ng-src="assets/images/business/openchannelQueues.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.openchannelQueue.id}}\n                        <span ng-if="vm.openchannelQueue.name">{{vm.openchannelQueue.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="OPENCHANNEL.CREATED_AT"></span> <span>{{vm.openchannelQueue.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.openchannelQueue, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="OPENCHANNEL.TEAMADD_OPENCHANNELQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.openchannelQueue, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="OPENCHANNEL.AGENTADD_OPENCHANNELQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveOpenchannelQueue()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid)" translate="OPENCHANNEL.SAVE" translate-attr-aria-label="OPENCHANNEL.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="openchannelQueue-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="OPENCHANNEL.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.openchannelQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="OPENCHANNEL.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="OPENCHANNEL.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.openchannelQueue.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'strategy\'].$error" ng-show="generalForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.AGENT_TIMEOUT">Agent_Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.openchannelQueue.timeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="OPENCHANNEL.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="OPENCHANNEL.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="OPENCHANNEL.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.openchannelQueue.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="OPENCHANNEL.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/openchannel/views/openchannelQueues/openchannelQueues.html",'<div id="openchannelQueues" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-google-earth" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="OPENCHANNEL.OPENCHANNELQUEUES">OpenchannelQueues</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="OPENCHANNEL.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedOpenchannelQueues.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedOpenchannelQueues =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="OPENCHANNEL.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-openchannelQueues-count">\n                    <span>{{vm.selectedOpenchannelQueues.length}}</span>\n                    <span translate="OPENCHANNEL.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="OPENCHANNELQUEUES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllOpenchannelQueues()" translate="OPENCHANNEL.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectOpenchannelQueues()" translate="OPENCHANNEL.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedOpenchannelQueues" csv-label="true" filename="openchannelQueues.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedOpenchannelQueues($event)" aria-label="delete selected" translate translate-attr-label="OPENCHANNELQUEUES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- OPENCHANNELQUEUE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedOpenchannelQueues" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getOpenchannelQueues">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'OPENCHANNEL.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'OPENCHANNEL.NAME\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'OPENCHANNEL.STRATEGY\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.openchannelQueues.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="OPENCHANNEL.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="openchannelQueue" md-select-id="id" ng-repeat="openchannelQueue in vm.openchannelQueues.rows">\n                                <td md-cell ng-if="openchannelQueue.userpic"><img class="avatar" alt="{{openchannelQueue.name}}" ng-src="api/users/{{openchannelQueue.id}}/avatar" /></td>\n                                <td md-cell ng-if="!openchannelQueue.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{openchannelQueue.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelQueue, ev) : vm.createOrEditOpenchannelQueue($event, openchannelQueue)" md-cell class="id ">{{openchannelQueue.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelQueue, ev) : vm.createOrEditOpenchannelQueue($event, openchannelQueue)" md-cell class="name ">{{openchannelQueue.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(openchannelQueue, ev) : vm.createOrEditOpenchannelQueue($event, openchannelQueue)" md-cell class="strategy ">{{ vm.arraystrategy[openchannelQueue.strategy].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="OPENCHANNEL.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(openchannelQueue, $event    )" translate="OPENCHANNEL.EDIT_OPENCHANNELQUEUE">\n                                                    Edit OpenchannelQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(openchannelQueue, $event    )" translate="OPENCHANNEL.TEAMADD_OPENCHANNELQUEUE">\n                                                    teamadd OpenchannelQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(openchannelQueue, $event    )" translate="OPENCHANNEL.AGENTADD_OPENCHANNELQUEUE">\n                                                    agentadd OpenchannelQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(openchannelQueue, $event    )" translate="OPENCHANNEL.DELETE_OPENCHANNELQUEUE">\n                                                    Delete OpenchannelQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(openchannelQueue, $event    )" translate="OPENCHANNEL.GOTOREALTIME_OPENCHANNELQUEUE">\n                                                    goToRealtime OpenchannelQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'OPENCHANNEL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'OPENCHANNEL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'OPENCHANNEL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.openchannelQueues.count}}" md-on-paginate="vm.getOpenchannelQueues" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / OPENCHANNELQUEUE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD OPENCHANNELQUEUE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-openchannelQueue-button" ng-click="vm.createOrEditOpenchannelQueue($event)" aria-label="add openchannelQueue" translate translate-attr-aria-label="OPENCHANNEL.ADD_OPENCHANNELQUEUE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD OPENCHANNELQUEUE BUTTON --\x3e\n</div>'),e.put("app/main/apps/openchannel/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="OPENCHANNEL.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'OPENCHANNEL.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'OPENCHANNEL.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'OPENCHANNEL.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'OPENCHANNEL.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'OPENCHANNEL.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'OPENCHANNEL.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'OPENCHANNEL.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'OPENCHANNEL.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'OPENCHANNEL.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'OPENCHANNEL.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'OPENCHANNEL.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'OPENCHANNEL.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"OPENCHANNEL.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"OPENCHANNEL.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"OPENCHANNEL.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"OPENCHANNEL.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"OPENCHANNEL.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"OPENCHANNEL.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"OPENCHANNEL.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"OPENCHANNEL.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'OPENCHANNEL.PAGE' | translate}}:', rowsPerPage: '{{'OPENCHANNEL.ROWSPERPAGE' | translate}}:', of: '{{'OPENCHANNEL.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/openchannel/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="OPENCHANNEL.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'OPENCHANNEL.NAME\' | translate }}</th>\n                <th md-column>{{ \'OPENCHANNEL.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'OPENCHANNEL.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'OPENCHANNEL.READY\' | translate }}</th>\n                <th md-column>{{ \'OPENCHANNEL.WAITING\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="7">\n                    <div layout="row" layout-align="center center">\n                        <span translate="OPENCHANNEL.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="OPENCHANNEL.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditOpenchannelQueue($event, vm.queues[value])" translate="OPENCHANNEL.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="OPENCHANNEL.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'OPENCHANNEL.PAGE\' | translate}}:\', rowsPerPage: \'{{\'OPENCHANNEL.ROWSPERPAGE\' | translate}}:\', of: \'{{\'OPENCHANNEL.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/openchannel/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="OPENCHANNEL.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/plugins/views/plugin/plugin.html",'<div ng-if="!vm.plugin">\n    <p>Plugin not available...</p>\n</div>\n<div id="plugin" ng-if="vm.plugin" ng-cloak layout-fill>\n    <iframe ng-src="{{vm.getTrustedURL()}}" frameborder=0 style="border:0px; width:100%; height:100%;"></iframe>\n</div>'),e.put("app/main/apps/settings/views/customizations/create/dialog.html",'<md-dialog class="customization-dialog" aria-label="New Customization">\n    <form name="customizationForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.customization.defaultLogo" aria-label="Default_Logo"><span translate="SETTINGS.DEFAULT_LOGO">Default_Logo</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.customization.defaultLoginLogo" aria-label="Default_Login_Logo"><span translate="SETTINGS.DEFAULT_LOGIN_LOGO">Default_Login_Logo</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.customization.defaultHeaderWhiteLabel" aria-label="Default_Header_WhiteLabel"><span translate="SETTINGS.DEFAULT_HEADER_WHITELABEL">Default_Header_WhiteLabel</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="!vm.customization.defaultHeaderWhiteLabel" class="md-block">\n                <label translate="SETTINGS.HEADER_WHITELABEL">Header_WhiteLabel</label>\n                <input type="text" name="headerWhiteLabel" ng-model="vm.customization.headerWhiteLabel" ng-required="true">\n\n                <div ng-messages="customizationForm[\'headerWhiteLabel\'].$error" ng-show="customizationForm[\'headerWhiteLabel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.HEADER_WHITELABEL_REQUIRED">Header_WhiteLabel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.customization.defaultPageTitle" aria-label="Default_Page_Title"><span translate="SETTINGS.DEFAULT_PAGE_TITLE">Default_Page_Title</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="!vm.customization.defaultPageTitle" class="md-block">\n                <label translate="SETTINGS.PAGE_TITLE">Page_Title</label>\n                <input type="text" name="pageTitle" ng-model="vm.customization.pageTitle" ng-required="true">\n\n                <div ng-messages="customizationForm[\'pageTitle\'].$error" ng-show="customizationForm[\'pageTitle\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.PAGE_TITLE_REQUIRED">Page_Title field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.license.preferred" class="md-block">\n                <md-switch ng-model="vm.customization.defaultPreferred" aria-label="Default_Preferred"><span translate="SETTINGS.DEFAULT_PREFERRED">Default_Preferred</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newCustomization" ng-click="vm.saveCustomization()" class="send-button md-accent md-raised" ng-disabled="customizationForm.$invalid || customizationForm.$pristine" aria-label="SAVE" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newCustomization" ng-click="vm.addNewCustomization()" class="send-button md-accent md-raised" ng-disabled="customizationForm.$invalid" aria-label="ADD" translate="SETTINGS.ADD_CUSTOMIZATION" translate-attr-aria-label="SETTINGS.ADD_CUSTOMIZATION">\n                    ADD CUSTOMIZATION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newCustomization" ng-click="vm.deleteCustomization($event)" aria-label="DELETE" translate translate-attr-aria-label="SETTINGS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SETTINGS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/customizations/customizations.html",'<div id="customizations" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.CUSTOMIZATIONS">Customizations</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div>\n            <md-button type="submit" ng-click="vm.saveCustomization()" ng-disabled="(customizationsForm.$pristine && logoForm.$pristine && logologinForm.$pristine && preferredForm.$pristine) || (customizationsForm.$invalid || logoForm.$invalid || logologinForm.$invalid || preferredForm.$invalid)" class="send-button md-accent md-raised" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n            <div class="customization-detail-form-container customizations md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.CUSTOMIZATIONS">CUSTOMIZATIONS</div>\n                </div>\n                <form name="customizationsForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.customization.defaultLogo" aria-label="Default_Logo"><span translate="SETTINGS.DEFAULT_LOGO">Default_Logo</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.customization.defaultLoginLogo" aria-label="Default_Login_Logo"><span translate="SETTINGS.DEFAULT_LOGIN_LOGO">Default_Login_Logo</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.customization.defaultHeaderWhiteLabel" aria-label="Default_Header_WhiteLabel"><span translate="SETTINGS.DEFAULT_HEADER_WHITELABEL">Default_Header_WhiteLabel</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="!vm.customization.defaultHeaderWhiteLabel" class="md-block">\n                        <label translate="SETTINGS.HEADER_WHITELABEL">Header_WhiteLabel</label>\n                        <input type="text" name="headerWhiteLabel" ng-model="vm.customization.headerWhiteLabel" ng-required="true">\n\n                        <div ng-messages="customizationsForm[\'headerWhiteLabel\'].$error" ng-show="customizationsForm[\'headerWhiteLabel\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.HEADER_WHITELABEL_REQUIRED">Header_WhiteLabel field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.customization.defaultPageTitle" aria-label="Default_Page_Title"><span translate="SETTINGS.DEFAULT_PAGE_TITLE">Default_Page_Title</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="!vm.customization.defaultPageTitle" class="md-block">\n                        <label translate="SETTINGS.PAGE_TITLE">Page_Title</label>\n                        <input type="text" name="pageTitle" ng-model="vm.customization.pageTitle" ng-required="true">\n\n                        <div ng-messages="customizationsForm[\'pageTitle\'].$error" ng-show="customizationsForm[\'pageTitle\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.PAGE_TITLE_REQUIRED">Page_Title field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.license.preferred" class="md-block">\n                        <md-switch ng-model="vm.customization.defaultPreferred" aria-label="Default_Preferred"><span translate="SETTINGS.DEFAULT_PREFERRED">Default_Preferred</span></md-switch>\n\n                    </md-input-container>\n\n                </form>\n            </div>\n\n            <div ng-if="!vm.customization.defaultLogo" class="customization-detail-form-container logo md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.LOGO">LOGO</div>\n                </div>\n                <div ng-controller="CustomizationlogoController as vm_cl" ng-init="vm_cl.init(vm.customization)" class="customization-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="customization-image-uploader" flow-init="vm_cl.ngFlowOptions" flow-name="vm_cl.ngFlow.flow" flow-files-submitted="vm_cl.upload()" flow-file-added="vm_cl.fileAdded($file)" flow-file-success="vm_cl.fileSuccess($file, $message)" flow-complete="vm_cl.uploadComplete()" flow-drop flow-drag-enter="vm_cl.dropping=true" flow-drag-leave="vm_cl.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn>\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="logoimage in vm_cl.customization.images" ng-switch="logoimage.type">\n                                <div class="customization-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{logoimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="logoimage.file">\n                                </div>\n\n                                <div class="customization-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{logoimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n\n            <div ng-if="!vm.customization.defaultLoginLogo" class="customization-detail-form-container logologin md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.LOGOLOGIN">LOGOLOGIN</div>\n                </div>\n                <div ng-controller="CustomizationlogologinController as vm_cll" ng-init="vm_cll.init(vm.customization)" class="customization-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="customization-image-uploader" flow-init="vm_cll.ngFlowOptions" flow-name="vm_cll.ngFlow.flow" flow-files-submitted="vm_cll.upload()" flow-file-added="vm_cll.fileAdded($file)" flow-file-success="vm_cll.fileSuccess($file, $message)" flow-complete="vm_cll.uploadComplete()" flow-drop flow-drag-enter="vm_cll.dropping=true" flow-drag-leave="vm_cll.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn>\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="logologinimage in vm_cll.customization.images" ng-switch="logologinimage.type">\n                                <div class="customization-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{logologinimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="logologinimage.file">\n                                </div>\n\n                                <div class="customization-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{logologinimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n\n            <div ng-if="!vm.customization.defaultPreferred && vm.license.preferred" class="customization-detail-form-container preferred md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.PREFERRED">PREFERRED</div>\n                </div>\n                <div ng-controller="CustomizationpreferredController as vm_cp" ng-init="vm_cp.init(vm.customization)" class="customization-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                    <div id="customization-image-uploader" flow-init="vm_cp.ngFlowOptions" flow-name="vm_cp.ngFlow.flow" flow-files-submitted="vm_cp.upload()" flow-file-added="vm_cp.fileAdded($file)" flow-file-success="vm_cp.fileSuccess($file, $message)" flow-complete="vm_cp.uploadComplete()" flow-drop flow-drag-enter="vm_cp.dropping=true" flow-drag-leave="vm_cp.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                        <div class="drop-text hint-text" layout="row" layout-align="center center">\n                            <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                        </div>\n\n                        <div class="upload-button" layout="column" layout-align="center center">\n                            <md-button class="md-accent md-raised" flow-btn>\n                                Upload\n                            </md-button>\n                            <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                        </div>\n\n                        <div layout="row" layout-align="start start" layout-wrap>\n                            <div ng-repeat="preferredimage in vm_cp.customization.images" ng-switch="preferredimage.type">\n                                <div class="customization-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                    <div class="overlay" layout="column" layout-align="center center">\n                                        <md-progress-linear md-mode="determinate" value="{{preferredimage.file.progress() * 100}}">\n                                        </md-progress-linear>\n                                    </div>\n                                    <img class="media" flow-img="preferredimage.file">\n                                </div>\n\n                                <div class="customization-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                    <img class="media" ng-src="{{preferredimage.url}}">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/settings/views/generals/create/dialog.html",'<md-dialog class="general-dialog" aria-label="New General">\n    <form name="generalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newGeneral" ng-click="vm.saveGeneral()" class="send-button md-accent md-raised" ng-disabled="generalForm.$invalid || generalForm.$pristine" aria-label="SAVE" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newGeneral" ng-click="vm.addNewGeneral()" class="send-button md-accent md-raised" ng-disabled="generalForm.$invalid" aria-label="ADD" translate="SETTINGS.ADD_GENERAL" translate-attr-aria-label="SETTINGS.ADD_GENERAL">\n                    ADD GENERAL\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newGeneral" ng-click="vm.deleteGeneral($event)" aria-label="DELETE" translate translate-attr-aria-label="SETTINGS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SETTINGS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/generals/generals.html",'<div id="generals" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.GENERAL">General</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div>\n            <md-button type="submit" ng-click="vm.saveGeneral()" ng-disabled="(globalForm.$pristine && motionbarForm.$pristine && reportForm.$pristine && agentOmniDesktopInterfaceForm.$pristine && screenrecordingForm.$pristine && securityForm.$pristine) || (globalForm.$invalid || motionbarForm.$invalid || reportForm.$invalid || agentOmniDesktopInterfaceForm.$invalid || screenrecordingForm.$invalid || securityForm.$invalid)" class="send-button md-accent md-raised" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n            <div class="general-detail-form-container global md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.GLOBAL">GLOBAL</div>\n                </div>\n                <form name="globalForm" novalidate>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.MIN_INTERNAL">Min_Internal</label>\n                        <input type="number" name="min_internal" ng-model="vm.general.min_internal" min="0" ng-required="true" autofocus>\n\n                        <div ng-messages="globalForm[\'min_internal\'].$error" ng-show="globalForm[\'min_internal\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.MIN_INTERNAL_REQUIRED">Min_Internal field is required</span>\n                            </div>\n                            <div ng-message="min">\n                                <span translate="SETTINGS.ERRORS.MIN_INTERNAL_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Min_Internal must be a valid greater or equal than</span> <span>0</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.CHATTIMEOUT">chatTimeout</label>\n                        <input type="number" name="chatTimeout" ng-model="vm.general.chatTimeout" min="0" ng-required="true">\n\n                        <div ng-messages="globalForm[\'chatTimeout\'].$error" ng-show="globalForm[\'chatTimeout\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.CHATTIMEOUT_REQUIRED">chatTimeout field is required</span>\n                            </div>\n                            <div ng-message="min">\n                                <span translate="SETTINGS.ERRORS.CHATTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">chatTimeout must be a valid greater or equal than</span> <span>0</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.STUNADDR">Stunaddr</label>\n                        <input type="text" name="stunaddr" ng-model="vm.general.stunaddr">\n\n                        <div ng-messages="globalForm[\'stunaddr\'].$error" ng-show="globalForm[\'stunaddr\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.STUNADDR_REQUIRED">Stunaddr field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.TURNADDR">Turnaddr</label>\n                        <input type="text" name="turnaddr" ng-model="vm.general.turnaddr">\n\n                        <div ng-messages="globalForm[\'turnaddr\'].$error" ng-show="globalForm[\'turnaddr\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.TURNADDR_REQUIRED">Turnaddr field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.TURN_USERNAME">Turn_Username</label>\n                        <input type="text" name="turnusername" ng-model="vm.general.turnusername">\n\n                        <div ng-messages="globalForm[\'turnusername\'].$error" ng-show="globalForm[\'turnusername\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.TURN_USERNAME_REQUIRED">Turn_Username field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.TURN_PASSWORD">Turn_Password</label>\n                        <input type="text" name="turnpassword" ng-model="vm.general.turnpassword">\n\n                        <div ng-messages="globalForm[\'turnpassword\'].$error" ng-show="globalForm[\'turnpassword\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.TURN_PASSWORD_REQUIRED">Turn_Password field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.rtlSupport" aria-label="RtlSupport"><span translate="SETTINGS.RTLSUPPORT">RtlSupport</span></md-switch>\n\n                        <div class="hint"><span translate="SETTINGS.HELP.RTLSUPPORT"></span></div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n            <div class="general-detail-form-container motionbar md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.MOTIONBAR">MOTIONBAR</div>\n                </div>\n                <form name="motionbarForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.phoneBarAutoUpdater" aria-label="MotionbarAutoUpdater"><span translate="SETTINGS.MOTIONBARAUTOUPDATER">MotionbarAutoUpdater</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="vm.general.phoneBarAutoUpdater" class="md-block">\n                        <label translate="SETTINGS.MOTIONBARAUTOUPDATERURL">MotionbarAutoUpdaterUrl</label>\n                        <input type="url" name="phoneBarAutoUpdaterUrl" ng-model="vm.general.phoneBarAutoUpdaterUrl" ng-required="vm.general.phoneBarAutoUpdater">\n\n                        <div ng-messages="motionbarForm[\'phoneBarAutoUpdaterUrl\'].$error" ng-show="motionbarForm[\'phoneBarAutoUpdaterUrl\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.MOTIONBARAUTOUPDATERURL_REQUIRED">MotionbarAutoUpdaterUrl field is required</span>\n                            </div>\n                            <div ng-message="url">\n                                <span translate="SETTINGS.ERRORS.MOTIONBARAUTOUPDATERURL_MUST_VALID_URL">MotionbarAutoUpdaterUrl must be a valid url http://www.xcally.com</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.phoneBarRememberMeEnabled" aria-label="MotionbarRememberMe"><span translate="SETTINGS.MOTIONBARREMEMBERME">MotionbarRememberMe</span></md-switch>\n\n                        <div class="hint"><span translate="SETTINGS.HELP.MOTIONBARREMEMBERME"></span></div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n            <div class="general-detail-form-container report md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.REPORT">REPORT</div>\n                </div>\n                <form name="reportForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.split" aria-label="Split"><span translate="SETTINGS.SPLIT">Split</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="vm.general.split" class="md-block">\n                        <label translate="SETTINGS.SPLITSIZECSV">SplitSizeCsv</label>\n                        <input type="number" name="splitSizeCsv" ng-model="vm.general.splitSizeCsv">\n\n                        <div ng-messages="reportForm[\'splitSizeCsv\'].$error" ng-show="reportForm[\'splitSizeCsv\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SPLITSIZECSV_REQUIRED">SplitSizeCsv field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.general.split" class="md-block">\n                        <label translate="SETTINGS.SPLITSIZEPDF">SplitSizePdf</label>\n                        <input type="number" name="splitSizePdf" ng-model="vm.general.splitSizePdf">\n\n                        <div ng-messages="reportForm[\'splitSizePdf\'].$error" ng-show="reportForm[\'splitSizePdf\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SPLITSIZEPDF_REQUIRED">SplitSizePdf field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.general.split" class="md-block">\n                        <label translate="SETTINGS.SPLITSIZEXLSX">SplitSizeXlsx</label>\n                        <input type="number" name="splitSizeXlsx" ng-model="vm.general.splitSizeXlsx">\n\n                        <div ng-messages="reportForm[\'splitSizeXlsx\'].$error" ng-show="reportForm[\'splitSizeXlsx\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SPLITSIZEXLSX_REQUIRED">SplitSizeXlsx field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n            <div class="general-detail-form-container agentomnidesktopinterface md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.AGENTOMNIDESKTOPINTERFACE">AGENTOMNIDESKTOPINTERFACE</div>\n                </div>\n                <form name="agentOmniDesktopInterfaceForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.enableEmailPreview" aria-label="EnableEmailPreview"><span translate="SETTINGS.ENABLEEMAILPREVIEW">EnableEmailPreview</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.MESSAGESALIGNMENT">messagesAlignment</label>\n                        <md-select name="messagesAlignment" ng-model="vm.general.messagesAlignment">\n                            <md-option ng-value="\'alternate\'">Alternate</md-option>\n                            <md-option ng-value="\'left\'">Left</md-option>\n                            <md-option ng-value="\'right\'">Right</md-option>\n                        </md-select>\n                        <div ng-messages="agentOmniDesktopInterfaceForm[\'messagesAlignment\'].$error" ng-show="agentOmniDesktopInterfaceForm[\'messagesAlignment\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.MESSAGESALIGNMENT_REQUIRED">messagesAlignment field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n            <div ng-if="vm.license.screenrecording" class="general-detail-form-container screenrecording md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.SCREENRECORDING">SCREENRECORDING</div>\n                </div>\n                <form name="screenrecordingForm" novalidate>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.DEFAULTSCREENRECORDINGPATH">defaultScreenRecordingPath</label>\n                        <input type="text" name="defaultScreenRecordingPath" ng-model="vm.general.defaultScreenRecordingPath" autofocus>\n\n                        <div class="hint"><span translate="SETTINGS.HELP.DEFAULTSCREENRECORDINGPATH"></span></div>\n                        <div ng-messages="screenrecordingForm[\'defaultScreenRecordingPath\'].$error" ng-show="screenrecordingForm[\'defaultScreenRecordingPath\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.DEFAULTSCREENRECORDINGPATH_REQUIRED">defaultScreenRecordingPath field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n            <div class="general-detail-form-container security md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.SECURITY">SECURITY</div>\n                </div>\n                <form name="securityForm" novalidate>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.securePassword" aria-label="Security_Suite"><span translate="SETTINGS.SECURITY_SUITE">Security_Suite</span></md-switch>\n\n                        <div class="hint"><span translate="SETTINGS.HELP.SECURITY_SUITE"></span></div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <md-switch ng-model="vm.general.callRecordingEncryption" aria-label="Call_Recording_Encryption"><span translate="SETTINGS.CALL_RECORDING_ENCRYPTION">Call_Recording_Encryption</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.ALLOWEDLOGINATTEMPTS">allowedLoginAttempts</label>\n                        <input type="number" name="allowedLoginAttempts" ng-model="vm.general.allowedLoginAttempts" ng-required="true">\n\n                        <div ng-messages="securityForm[\'allowedLoginAttempts\'].$error" ng-show="securityForm[\'allowedLoginAttempts\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.ALLOWEDLOGINATTEMPTS_REQUIRED">allowedLoginAttempts field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.BLOCKDURATION">blockDuration</label>\n                        <input type="number" name="blockDuration" ng-model="vm.general.blockDuration" ng-required="true">\n\n                        <div ng-messages="securityForm[\'blockDuration\'].$error" ng-show="securityForm[\'blockDuration\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.BLOCKDURATION_REQUIRED">blockDuration field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/settings/views/license/license.html",'<div id="license" class="page-layout simple fullwidth doc-page">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.LICENSE">LICENSE</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n        \x3c!-- <div>\n                <md-button type="submit" ng-click="vm.requestLicense()" class="send-button md-raised" translate="SETTINGS.REQUEST_LICENSE" translate-attr-aria-label="SETTINGS.REQUEST_LICENSE">\n                    REQUEST LICENSE\n                </md-button>\n            </div> --\x3e\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n            \x3c!-- LICENSE CARD --\x3e\n            <div layout="row" flex>\n                <md-card class="md-whiteframe-1dp padding-20" flex>\n                    <div layout="row" layout-align="center">\n                        <div flex layout="row" layout-align="start center">\n                            <div ng-if="!vm.license.custom">\n                                <a href="https://www.xcally.com/plans.html" target="_blank" class="md-button md-fab green-A700-bg" aria-label="Eat cake">\n                                    <md-tooltip><span translate="SETTINGS.PRICES">Prices</span></md-tooltip>\n                                    <md-icon md-font-icon="icon-coin"></md-icon>\n                                </a>\n                            </div>\n                        </div>\n                        <div flex>\n                            <div ng-switch="vm.license.months" class="text-center">\n                                <span ng-switch-when="1" class="md-title md-accent-fg text-bold">{{ \'SETTINGS.PLAN\' | translate }}: <span translate="SETTINGS.MONTH_TO_MONTH">MONTH TO MONTH</span></span>\n                                <span ng-switch-when="12" class="md-title md-accent-fg text-bold">{{ \'SETTINGS.PLAN\' | translate }}: <span translate="SETTINGS.ANNUALLY">ANNUALLY</span></span>\n                                <span ng-switch-when="36" class="md-title md-accent-fg text-bold">{{ \'SETTINGS.PLAN\' | translate }}: <span translate="SETTINGS.PERPETUAL">PERPETUAL</span></span>\n                            </div>\n                        </div>\n                        <div flex layout="row" layout-align="end center">\n                            <div>\n                                <md-button type="submit" ng-click="vm.updateLicense()" class="md-button md-fab md-accent">\n                                    <md-tooltip><span translate="SETTINGS.UPDATE_LICENSE">License</span></md-tooltip>\n                                    <md-icon md-font-icon="icon-pencil"></md-icon>\n                                </md-button>\n                            </div>\n                        </div>\n                    </div>\n\n                    <span ng-if="!vm.license.demo && !vm.license.gray && vm.license.months != 36" class="md-subhead md-warn-fg text-center">{{ \'SETTINGS.EXPIRATION_DATE\' | translate }}: {{vm.license.expiration | date: \'longDate\'}}</span>\n                    <span class="text-center padding-bottom-10"> {{ vm.license.machineUuid !== vm.license.uuid ? \'SETTINGS.OLD_TOKEN\' : \'SETTINGS.TOKEN\' | translate }}: <span class="text-italic text-bold">{{vm.license.uuid}}</span></span>\n\n                    <div layout="column">\n                        <span ng-if="vm.license.grayReason == \'changed\'" class="blink md-subhead md-warn-fg text-center">{{ \'SETTINGS.NEW_TOKEN_DETECTED\' | translate }}</span>\n                        <span ng-if="vm.license.grayReason == \'changed\'" class="text-center padding-bottom-10"> {{\'SETTINGS.NEW_TOKEN\' | translate }}: <span class="text-italic text-bold">{{vm.license.machineUuid}}</span></span>\n                        <span ng-if="vm.license.gray" class="blink md-subhead md-warn-fg text-center">{{ \'SETTINGS.EXPIRATION_GRAY_PERIOD\' | translate }}: {{vm.license.deadline | date: \'longDate\'}}</span>\n                        <span ng-if="vm.license.gray" class="text-center padding-bottom-10 text-italic text-bold"> {{\'SETTINGS.EXPIRATION_REASON\' | translate }} </span>\n                        <span ng-if="vm.license.grayReason == \'disabled\'" class="text-center padding-bottom-10"> {{\'SETTINGS.EXPIRATION_REASON_MESSAGE_DISABLED\' | translate }}</span>\n                        <span ng-if="vm.license.grayReason == \'changed\'" class="text-center padding-bottom-10"> {{\'SETTINGS.EXPIRATION_REASON_MESSAGE_CHANGED\' | translate }}</span>\n                        <span ng-if="vm.license.grayReason == \'changed\'" class="text-center padding-bottom-10"> {{\'SETTINGS.EXPIRATION_CHANGED_ADVISE\' | translate }}</span>\n                        <span ng-if="vm.license.grayReason == \'changed\'" class="text-center padding-bottom-10">{{ \'SETTINGS.SEND_EMAIL_TO\' | translate }}: <a href="mailto:license@xcally.com?subject=New%20token%20detected&body=Hi xCALLY, New Token: {{vm.license.machineUuid}}, Old token: {{vm.license.uuid}}">license@xcally.com</a>.</span>\n                        <span ng-if="vm.license.grayReason == \'disabled\'" class="text-center padding-bottom-10">{{ \'SETTINGS.SEND_EMAIL_TO\' | translate }}: <a href="mailto:license@xcally.com?subject=License%20disabled&body=Hi xCALLY, My Token: {{vm.license.machineUuid}}">license@xcally.com</a>.</span>\n                    </div>\n\n                    <div ng-if="vm.license.demo" layout="column">\n                        <span class="md-subhead md-warn-fg text-center">{{ \'SETTINGS.TRIAL_VERSION\' | translate }}</span>\n                        <span class="md-subhead md-warn-fg text-center"><a href="https://www.xcally.com/en/index.html#pricing-table2-h" target="_blank">{{ \'SETTINGS.PRICES\' | translate}}</a></span>\n                    </div>\n\n                    <md-subheader class="md-no-sticky">{{ \'SETTINGS.STAFF\' | translate }}</md-subheader>\n                    <md-divider></md-divider>\n                    <md-list layout="row">\n                        <md-list-item class="md-2-line" flex="33">\n                            <md-icon md-font-icon="icon-account" class="md-avatar-icon"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3>{{ vm.license.users || 0 }} <span ng-class="{\'red-fg\': vm.license.users <= vm.users && vm.license.users > 0}">({{vm.license.users >= vm.users ? vm.users : vm.license.users}})</span></h3>\n                                <p translate="SETTINGS.USERS">Users</p>\n                            </div>\n                        </md-list-item>\n                        <md-list-item class="md-2-line" flex="33">\n                            <md-icon md-font-icon="icon-headphones" class="md-avatar-icon"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3>{{ vm.license.agents || 0 }} <span ng-class="{\'red-fg\': (vm.license.agents <= vm.agents && vm.license.agents > 0) }">({{vm.license.agents >= vm.agents ? vm.agents : vm.license.agents}})</span></h3>\n                                <p translate="SETTINGS.AGENTS">Agents</p>\n                            </div>\n                        </md-list-item>\n                        <md-list-item class="md-2-line" flex="33">\n                            <md-icon md-font-icon="icon-phone" class="md-avatar-icon"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3>{{ vm.license.telephones || 0 }} <span ng-class="{\'red-fg\': vm.license.telephones <= vm.telephones && vm.license.telephones > 0}">({{vm.license.telephones >= vm.telephones ? vm.telephones : vm.license.telephones}})</span></h3>\n                                <p translate="SETTINGS.TELEPHONES">Telephones</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n\n                    <md-subheader class="md-no-sticky">{{ \'SETTINGS.CHANNELS\' | translate }}</md-subheader>\n                    <md-divider></md-divider>\n                    <md-list layout="row">\n                        <md-list-item flex="33" class="md-2-line" ng-repeat="channel in vm.channels | limitTo:3">\n                            <md-icon md-font-icon="{{channel.icon}}" class="md-avatar-icon" ng-class="vm.license[channel.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{channel.name | uppercase}}"></h3>\n                                <p ng-class="vm.license[channel.name] ? \'green-A700-fg\' : \'red-A700-fg\'">{{ \'SETTINGS.\' + (vm.license[channel.name] ? \'ENABLED\' : \'DISABLED\') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n                    <md-list layout="row">\n                        <md-list-item flex="33" class="md-2-line" ng-repeat="channel in vm.channels | limitTo:3:3">\n                            <md-icon md-font-icon="{{channel.icon}}" class="md-avatar-icon" ng-class="vm.license[channel.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{channel.name | uppercase}}"></h3>\n                                <p ng-class="vm.license[channel.name] ? \'green-A700-fg\' : \'red-A700-fg\'">{{ \'SETTINGS.\' + (vm.license[channel.name] ? \'ENABLED\' : \'DISABLED\') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n\n                    <md-subheader class="md-no-sticky">{{ \'SETTINGS.MODULES\' | translate }}</md-subheader>\n                    <md-divider></md-divider>\n                    <md-list layout="row">\n                        <md-list-item class="md-2-line" ng-repeat="module in vm.modules" flex="33">\n                            <md-icon md-font-icon="{{module.icon}}" class="md-avatar-icon" ng-class="vm.license[module.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{module.name | uppercase}}"></h3>\n                                <p ng-class="vm.license[module.name] ? \'green-A700-fg\' : \'red-A700-fg\'">{{ \'SETTINGS.\' + (vm.license[module.name] ? \'ENABLED\' : \'DISABLED\') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n\n                    <md-subheader class="md-no-sticky">{{ \'SETTINGS.SESSIONS\' | translate }}</md-subheader>\n                    <md-divider></md-divider>\n                    <md-list layout="row">\n                        <div ng-repeat="session in vm.sessions" flex="33">\n                            <md-list-item class="md-2-line">\n                                <md-icon md-font-icon="{{session.icon}}" class="md-avatar-icon" ng-class="vm.license[session.enabled] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                                <div class="md-list-item-text">\n                                    <div layout="row" layout="start center">\n                                        <h3 translate="SETTINGS.{{session.name | uppercase}}"></h3>\n                                        <button ng-if="session.restart" ng-click="vm.gotoProcess($event)" class="md-mini" aria-label="restart">\n                                            <md-tooltip>Restart</md-tooltip>\n                                            <md-icon md-font-icon="icon-reload"></md-icon>\n                                        </button>\n                                    </div>\n                                    <p ng-if="vm.license[session.name] && vm.license[session.enabled]" class="green-A700-fg">{{vm.license[session.name]}} {{ \'SETTINGS.\' + session.label | uppercase | translate }}</p>\n                                    <p ng-if="!vm.license[session.name] && vm.license[session.enabled]" class="green-A700-fg">UNLIMITED {{ \'SETTINGS.\' + session.label | uppercase | translate }}</p>\n                                    <p ng-if="!vm.license[session.enabled]" class="red-A700-fg">{{ \'SETTINGS.DISABLED\' | translate }}</p>\n                                </div>\n                            </md-list-item>\n\n                        </div>\n                    </md-list>\n\n                    <md-subheader class="md-no-sticky">{{ \'SETTINGS.ADDONS\' | translate }}</md-subheader>\n                    <md-divider></md-divider>\n                    <md-list layout="row">\n                        <md-list-item class="md-2-line" ng-repeat="addon in vm.addons | limitTo:3" flex="33">\n                            <md-icon md-font-icon="{{addon.icon}}" class="md-avatar-icon" ng-class="vm.license[addon.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{addon.name | uppercase}}"></h3>\n                                <p ng-class="vm.license[addon.name] ? \'green-A700-fg\' : \'red-A700-fg\'">{{ \'SETTINGS.\' + (vm.license[addon.name] ? \'ENABLED\' : \'DISABLED\') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n                    <md-list layout="row">\n                        <md-list-item class="md-2-line" ng-repeat="addon in vm.addons | limitTo:3:3" flex="33">\n                            <md-icon md-font-icon="{{addon.icon}}" class="md-avatar-icon" ng-class="vm.license[addon.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{addon.name | uppercase}}"></h3>\n                                <p ng-class="vm.license[addon.name] ? \'green-A700-fg\' : \'red-A700-fg\'">{{ \'SETTINGS.\' + (vm.license[addon.name] ? \'ENABLED\' : \'DISABLED\') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n\n                    <md-subheader class="md-no-sticky">{{ \'SETTINGS.OTHERS\' | translate }}</md-subheader>\n                    <md-divider></md-divider>\n                    <md-list layout="row">\n                        <md-list-item class="md-2-line" ng-repeat="other in vm.others | limitTo:3" flex="33">\n                            <md-icon md-font-icon="{{other.icon}}" class="md-avatar-icon" ng-class="vm.license[other.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{other.name | uppercase}}"></h3>\n                                <p ng-class="vm.license[other.name] ? \'green-A700-fg\' : \'red-A700-fg\'">{{ \'SETTINGS.\' + (vm.license[other.name] ? \'ENABLED\' : \'DISABLED\') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n                    <md-list layout="row">\n                        <md-list-item class="md-2-line" ng-repeat="other in vm.others | limitTo:3:3" flex="33">\n                            <md-icon md-font-icon="{{other.icon}}" class="md-avatar-icon" ng-class="vm.license[other.name] ? \'green-A700-bg\' : \'red-A700-bg\'"></md-icon>\n                            <div class="md-list-item-text">\n                                <h3 translate="SETTINGS.{{other.name | uppercase}}"></h3>\n'+"                                <p ng-class=\"vm.license[other.name] ? 'green-A700-fg' : 'red-A700-fg'\">{{ 'SETTINGS.' + (vm.license[other.name] ? 'ENABLED' : 'DISABLED') | translate }}</p>\n                            </div>\n                        </md-list-item>\n                    </md-list>\n                </md-card>\n            </div>\n            \x3c!-- / LICENSE CARD --\x3e\n\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>"),e.put("app/main/apps/settings/views/license/request/dialog.html",'<md-dialog class="request-dialog" aria-label="Send Request">\n    <form name="requestForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="SETTINGS.REQUEST_LICENSE">Request License</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.license.name" required>\n                <div ng-messages="requestForm.name.$error" ng-show="requestForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.NAME_REQUIRED">Address field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.license.email" required>\n                <div ng-messages="requestForm.email.$error" ng-show="requestForm.email.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="SETTINGS.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.PLAN">Plan</label>\n                <md-select name="plan" ng-model="vm.license.months" required>\n                    <md-option ng-value="1"><span translate="SETTINGS.MONTH_TO_MONTH">MONTH TO MONTH</span></md-option>\n                    <md-option ng-value="12"><span translate="SETTINGS.ANNUALLY">ANNUALLY</span></md-option>\n                    <md-option ng-value="36"><span translate="SETTINGS.PERPETUAL">PERPETUAL</span></md-option>\n                </md-select>\n                <div ng-messages="requestForm.plan.$error" ng-show="requestForm.plan.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.PLAN_REQUIRED">Plan field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-subheader class="md-no-sticky">{{ \'SETTINGS.STAFF\' | translate }}</md-subheader>\n            <div layout="row" layout-align="space-between center">\n                <md-input-container class="md-block" flex>\n                    <label translate="SETTINGS.USERS">Users</label>\n                    <input type="number" name="users" ng-model="vm.license.users" required>\n                    <div ng-messages="requestForm.users.$error" ng-show="requestForm.users.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="SETTINGS.ERRORS.USERS_REQUIRED">Users field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n                <md-input-container class="md-block" flex>\n                    <label translate="SETTINGS.AGENTS">Agents</label>\n                    <input type="number" name="agents" ng-model="vm.license.agents" required>\n                    <div ng-messages="requestForm.agents.$error" ng-show="requestForm.agents.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="SETTINGS.ERRORS.AGENTS_REQUIRED">Agents field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n                <md-input-container class="md-block" flex>\n                    <label translate="SETTINGS.TELEPHONES">Telephones</label>\n                    <input type="number" name="telephones" ng-model="vm.license.telephones" required>\n                    <div ng-messages="requestForm.telephones.$error" ng-show="requestForm.telephones.$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="SETTINGS.ERRORS.TELEPHONES_REQUIRED">Telephones field is required</span>\n                        </div>\n                    </div>\n                </md-input-container>\n            </div>\n\n            <md-subheader class="md-no-sticky">{{ \'SETTINGS.CHANNELS\' | translate }}</md-subheader>\n            <div layout="row" layout-align="space-between center">\n                <md-switch ng-model="vm.license[channel.name]" aria-label="{{channel.name}}" ng-repeat="channel in vm.channels | limitTo:3"><span translate="SETTINGS.{{channel.name | uppercase}}"></span></md-switch>\n                <md-switch ng-model="vm.license[channel.name]" aria-label="{{channel.name}}" ng-repeat="channel in vm.channels | limitTo:3:3"><span translate="SETTINGS.{{channel.name | uppercase}}"></span></md-switch>\n            </div>\n\n            <md-subheader class="md-no-sticky">{{ \'SETTINGS.MODULES\' | translate }}</md-subheader>\n            <div layout="row" layout-align="space-between center">\n                <md-switch ng-model="vm.license[module.name]" aria-label="{{module.name}}" ng-repeat="module in vm.modules"><span translate="SETTINGS.{{module.name | uppercase}}"></span></md-switch>\n            </div>\n\n            <md-subheader class="md-no-sticky">{{ \'SETTINGS.SESSIONS\' | translate }}</md-subheader>\n            <div layout="row">\n                <md-input-container ng-repeat="session in vm.sessions" class="md-block" flex="50">\n                    <label>{{ \'SETTINGS.\' + session.name | uppercase | translate }} ({{ \'SETTINGS.\' + session.label | uppercase | translate }})</label>\n                    <input type="number" name="{{session.name}}" ng-model="vm.license[session.name]" required>\n                    <div class="hint"><span>0={{ \'SETTINGS.UNLIMITED_CHANNELS\' | translate }}</span></div>\n                    <div ng-messages="requestForm[session.name].$error" ng-show="requestForm[session.name].$touched" role="alert">\n                        <div ng-message="required">\n                            <span translate="SETTINGS.ERRORS.CHANNEL_REQUIRED">Mandatory field</span>\n                        </div>\n                    </div>\n                </md-input-container>\n            </div>\n\n            <md-subheader class="md-no-sticky">{{ \'SETTINGS.ADDONS\' | translate }}</md-subheader>\n            <div layout="row" layout-align="space-between center">\n                <md-switch ng-model="vm.license[addon.name]" aria-label="{{module.name}}" ng-repeat="addon in vm.addons"><span translate="SETTINGS.{{addon.name | uppercase}}"></span></md-switch>\n            </div>\n\n            <md-subheader class="md-no-sticky">{{ \'SETTINGS.OTHERS\' | translate }}</md-subheader>\n            <div layout="row" layout-align="space-between center">\n                <md-switch ng-model="vm.license[other.name]" aria-label="{{other.name}}" ng-repeat="other in vm.others"><span translate="SETTINGS.{{other.name | uppercase}}"></span></md-switch>\n            </div>\n\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.DESCRIPTION">Description</label>\n                <textarea name="description" ng-model="vm.license.description"></textarea>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.sendRequest()" class="send-button md-accent md-raised" ng-disabled="requestForm.$invalid || requestForm.$pristine" aria-label="SEND" translate="SETTINGS.SEND" translate-attr-aria-label="SETTINGS.SEND">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/license/update/dialog.html",'<md-dialog class="update-dialog" aria-label="Update License">\n    <form name="updateForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title" translate="SETTINGS.UPDATE_LICENSE">Update License</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-content layout="row">\n                <span class="md-title" translate="SETTINGS.UPDATE_LICENSE_MANUALLY">Do you want to update your license manually?</span>\n            </md-content>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.ENTER_LICENSE">Enter your license</label>\n                <textarea name="key" ng-model="vm.licenseKey" required></textarea>\n                <div ng-messages="updateForm.name.$error" ng-show="updateForm.key.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.LICENSE_REQUIRED">License key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.updateLicense()" class="send-button md-accent md-raised" ng-disabled="updateForm.$invalid || updateForm.$pristine" aria-label="UPDATE" translate="SETTINGS.UPDATE" translate-attr-aria-label="SETTINGS.UPDATE">\n                    UPDATE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/networks/create/dialog.html",'<md-dialog class="network-dialog" aria-label="New Network">\n    <form name="networkForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.network.type" autofocus required>\n                    <md-option ng-value="\'localnet\'">LocalNET</md-option>\n                    <md-option ng-value="\'externip\'">ExternIP</md-option>\n                </md-select>\n                <div ng-messages="networkForm[\'type\'].$error" ng-show="networkForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.network.type == \'localnet\'" class="md-block">\n                <label translate="SETTINGS.LOCALNETADDRESS">localNetAddress</label>\n                <input type="text" name="value" ng-model="vm.network.value" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/" ng-required="true">\n\n                <div class="hint"><span translate="SETTINGS.HELP.LOCALNETADDRESS"></span></div>\n                <div ng-messages="networkForm[\'value\'].$error" ng-show="networkForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.LOCALNETADDRESS_REQUIRED">localNetAddress field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="SETTINGS.ERRORS.LOCALNETADDRESS_MUST_VALID_PATTERN" translate-values="{ regex: \'/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/\' }">localNetAddress must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.network.type == \'externip\'" class="md-block">\n                <label translate="SETTINGS.ADDRESS">Address</label>\n                <input type="text" name="value" ng-model="vm.network.value" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/" ng-required="true">\n\n                <div class="hint"><span translate="SETTINGS.HELP.ADDRESS"></span></div>\n                <div ng-messages="networkForm[\'value\'].$error" ng-show="networkForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.ADDRESS_REQUIRED">Address field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="SETTINGS.ERRORS.ADDRESS_MUST_VALID_PATTERN" translate-values="{ regex: \'/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/\' }">Address must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newNetwork" ng-click="vm.saveNetwork()" class="send-button md-accent md-raised" ng-disabled="networkForm.$invalid || networkForm.$pristine" aria-label="SAVE" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newNetwork" ng-click="vm.addNewNetwork()" class="send-button md-accent md-raised" ng-disabled="networkForm.$invalid" aria-label="ADD" translate="SETTINGS.ADD_NETWORK" translate-attr-aria-label="SETTINGS.ADD_NETWORK">\n                    ADD NETWORK\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-click="vm.deleteNetwork($event)" aria-label="DELETE" translate translate-attr-aria-label="SETTINGS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SETTINGS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/networks/networks.html",'<div id="networks" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.NETWORKS">Networks</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="SETTINGS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedNetworks.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedNetworks =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="SETTINGS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-networks-count">\n                    <span>{{vm.selectedNetworks.length}}</span>\n                    <span translate="SETTINGS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="NETWORKS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllNetworks()" translate="SETTINGS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectNetworks()" translate="SETTINGS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedNetworks" csv-label="true" filename="networks.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-click="vm.deleteSelectedNetworks($event)" aria-label="delete selected" translate translate-attr-label="NETWORKS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- NETWORK TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedNetworks" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getNetworks">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'SETTINGS.ID\' | translate }}</th>\n                                <th md-column md-order-by="type">{{ \'SETTINGS.TYPE\' | translate }}</th>\n                                <th md-column md-order-by="value">{{ \'SETTINGS.ADDRESS\' | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ \'SETTINGS.CREATED_AT\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.networks.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="SETTINGS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="network" md-select-id="id" ng-repeat="network in vm.networks.rows">\n                                <td md-cell ng-if="network.userpic"><img class="avatar" alt="{{network.name}}" ng-src="api/users/{{network.id}}/avatar" /></td>\n                                <td md-cell ng-if="!network.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{network.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditNetwork($event, network)" md-cell class="id ">{{network.id}}</td>\n                                <td ng-click="vm.createOrEditNetwork($event, network)" md-cell class="type ">{{ vm.arraytype[network.type].option }}</td>\n                                <td ng-click="vm.createOrEditNetwork($event, network)" md-cell class="value ">{{network.value}}</td>\n                                <td ng-click="vm.createOrEditNetwork($event, network)" md-cell class="createdAt ">{{network.createdAt | date:\'medium\' }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SETTINGS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.editdialog(network, $event    )" translate="SETTINGS.EDIT_NETWORK">\n                                                    Edit Network\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(network, $event    )" translate="SETTINGS.DELETE_NETWORK">\n                                                    Delete Network\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'SETTINGS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SETTINGS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SETTINGS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.networks.count}}" md-on-paginate="vm.getNetworks" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / NETWORK TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD NETWORK BUTTON --\x3e\n    <md-button class="md-fab md-accent" id="add-network-button" ng-click="vm.createOrEditNetwork($event)" aria-label="add network" translate translate-attr-aria-label="SETTINGS.ADD_NETWORK">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD NETWORK BUTTON --\x3e\n</div>'),e.put("app/main/apps/settings/views/smtps/create/dialog.html",'<md-dialog class="smtp-dialog" aria-label="New Smtp">\n    <form name="smtpForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.ACCOUNTNAME">AccountName</label>\n                <input type="text" name="name" ng-model="vm.smtp.name" ng-required="true" autofocus>\n\n                <div ng-messages="smtpForm[\'name\'].$error" ng-show="smtpForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.ACCOUNTNAME_REQUIRED">AccountName field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.EMAILADDRESS">EmailAddress</label>\n                <input type="email" name="email" ng-model="vm.smtp.email" ng-required="true">\n\n                <div class="hint"><span translate="SETTINGS.HELP.EMAILADDRESS"></span></div>\n                <div ng-messages="smtpForm[\'email\'].$error" ng-show="smtpForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.EMAILADDRESS_REQUIRED">EmailAddress field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="SETTINGS.ERRORS.EMAILADDRESS_MUST_VALID">EmailAddress must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.SMTP_SERVICE">SMTP_Service</label>\n                <md-select name="Smtp.service" ng-model="vm.smtp.Smtp.service" required>\n                    <md-option ng-value="null">Custom</md-option>\n                    <md-option ng-value="\'gmail\'">Gmail</md-option>\n                    <md-option ng-value="\'hotmail\'">Hotmail</md-option>\n                    <md-option ng-value="\'yahoo\'">Yahoo</md-option>\n                    <md-option ng-value="\'outlook365\'">Outlook365</md-option>\n                </md-select>\n                <div ng-messages="smtpForm[\'Smtp.service\'].$error" ng-show="smtpForm[\'Smtp.service\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.SMTP_SERVICE_REQUIRED">SMTP_Service field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                <label translate="SETTINGS.SMTP_HOST">SMTP_Host</label>\n                <input type="text" name="Smtp.host" ng-model="vm.smtp.Smtp.host" ng-required="true">\n\n                <div ng-messages="smtpForm[\'Smtp.host\'].$error" ng-show="smtpForm[\'Smtp.host\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.SMTP_HOST_REQUIRED">SMTP_Host field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                <label translate="SETTINGS.SMTP_PORT">SMTP_Port</label>\n                <input type="number" name="Smtp.port" ng-model="vm.smtp.Smtp.port" ng-required="true">\n\n                <div ng-messages="smtpForm[\'Smtp.port\'].$error" ng-show="smtpForm[\'Smtp.port\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.SMTP_PORT_REQUIRED">SMTP_Port field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                <md-switch ng-model="vm.smtp.Smtp.secure" aria-label="SMTP_Secure"><span translate="SETTINGS.SMTP_SECURE">SMTP_Secure</span></md-switch>\n\n                <div class="hint"><span translate="SETTINGS.HELP.SMTP_SECURE"></span></div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                <md-switch ng-model="vm.smtp.Smtp.authentication" aria-label="SMTP_Authentication"><span translate="SETTINGS.SMTP_AUTHENTICATION">SMTP_Authentication</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.smtp.Smtp.authentication == true || vm.smtp.Smtp.service != null" class="md-block">\n                <label translate="SETTINGS.SMTP_USERNAME">SMTP_Username</label>\n                <input type="text" name="Smtp.user" ng-model="vm.smtp.Smtp.user" ng-required="true">\n\n                <div class="hint"><span translate="SETTINGS.HELP.SMTP_USERNAME"></span></div>\n                <div ng-messages="smtpForm[\'Smtp.user\'].$error" ng-show="smtpForm[\'Smtp.user\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.SMTP_USERNAME_REQUIRED">SMTP_Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.smtp.Smtp.authentication == true || vm.smtp.Smtp.service != null">\n                <label translate="SETTINGS.SMTP_PASSWORD">SMTP_Password</label>\n                <input type="password" name="Smtp.pass" ng-model="vm.smtp.Smtp.pass" placeholder="Password" translate translate-attr-placeholder="SETTINGS.PASSWORD" required>\n                <div class="hint"><span translate="SETTINGS.HELP.SMTP_PASSWORD"></span></div>\n                <div ng-messages="smtpForm[\'Smtp.pass\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="SETTINGS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="SETTINGS.DESCRIPTION">Description</label>\n                <input type="" name="description" ng-model="vm.smtp.description">\n\n                <div ng-messages="smtpForm[\'description\'].$error" ng-show="smtpForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SETTINGS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSmtp" ng-click="vm.saveSmtp()" class="send-button md-accent md-raised" ng-disabled="smtpForm.$invalid || smtpForm.$pristine" aria-label="SAVE" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSmtp" ng-click="vm.addNewSmtp()" class="send-button md-accent md-raised" ng-disabled="smtpForm.$invalid" aria-label="ADD" translate="SETTINGS.ADD_SMTP" translate-attr-aria-label="SETTINGS.ADD_SMTP">\n                    ADD SMTP\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSmtp" ng-click="vm.deleteSmtp($event)" aria-label="DELETE" translate translate-attr-aria-label="SETTINGS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SETTINGS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/smtps/smtps.html",'<div id="smtps" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.SMTP">Smtp</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div>\n            <md-button type="submit" ng-click="vm.verifySmtp()" ng-disabled="!vm.smtp.id" class="send-button md-accent md-raised" translate="SETTINGS.VERIFY" translate-attr-aria-label="SETTINGS.VERIFY">\n                VERIFY\n            </md-button>\n            <md-button type="submit" ng-click="vm.saveSmtp()" ng-disabled="(generalForm.$pristine) || (generalForm.$invalid)" class="send-button md-accent md-raised" translate="SETTINGS.SAVE" translate-attr-aria-label="SETTINGS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n            <div class="smtp-detail-form-container general md-background-bg md-whiteframe-1dp">\n                <div class="pb-16" layout="row" layout-align="start center">\n                    <div class="h2 secondary-text" translate="SETTINGS.GENERAL">GENERAL</div>\n                </div>\n                <form name="generalForm" novalidate>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.ACCOUNTNAME">AccountName</label>\n                        <input type="text" name="name" ng-model="vm.smtp.name" ng-required="true" autofocus>\n\n                        <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.ACCOUNTNAME_REQUIRED">AccountName field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.EMAILADDRESS">EmailAddress</label>\n                        <input type="email" name="email" ng-model="vm.smtp.email" ng-required="true">\n\n                        <div class="hint"><span translate="SETTINGS.HELP.EMAILADDRESS"></span></div>\n                        <div ng-messages="generalForm[\'email\'].$error" ng-show="generalForm[\'email\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.EMAILADDRESS_REQUIRED">EmailAddress field is required</span>\n                            </div>\n                            <div ng-message="email">\n                                <span translate="SETTINGS.ERRORS.EMAILADDRESS_MUST_VALID">EmailAddress must be a valid e-mail address</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.SMTP_SERVICE">SMTP_Service</label>\n                        <md-select name="Smtp.service" ng-model="vm.smtp.Smtp.service" required>\n                            <md-option ng-value="null">Custom</md-option>\n                            <md-option ng-value="\'gmail\'">Gmail</md-option>\n                            <md-option ng-value="\'hotmail\'">Hotmail</md-option>\n                            <md-option ng-value="\'yahoo\'">Yahoo</md-option>\n                            <md-option ng-value="\'outlook365\'">Outlook365</md-option>\n                        </md-select>\n                        <div ng-messages="generalForm[\'Smtp.service\'].$error" ng-show="generalForm[\'Smtp.service\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SMTP_SERVICE_REQUIRED">SMTP_Service field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                        <label translate="SETTINGS.SMTP_HOST">SMTP_Host</label>\n                        <input type="text" name="Smtp.host" ng-model="vm.smtp.Smtp.host" ng-required="true">\n\n                        <div ng-messages="generalForm[\'Smtp.host\'].$error" ng-show="generalForm[\'Smtp.host\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SMTP_HOST_REQUIRED">SMTP_Host field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                        <label translate="SETTINGS.SMTP_PORT">SMTP_Port</label>\n                        <input type="number" name="Smtp.port" ng-model="vm.smtp.Smtp.port" ng-required="true">\n\n                        <div ng-messages="generalForm[\'Smtp.port\'].$error" ng-show="generalForm[\'Smtp.port\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SMTP_PORT_REQUIRED">SMTP_Port field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                        <md-switch ng-model="vm.smtp.Smtp.secure" aria-label="SMTP_Secure"><span translate="SETTINGS.SMTP_SECURE">SMTP_Secure</span></md-switch>\n\n                        <div class="hint"><span translate="SETTINGS.HELP.SMTP_SECURE"></span></div>\n                    </md-input-container>\n                    <md-input-container ng-if="vm.smtp.Smtp.service == null" class="md-block">\n                        <md-switch ng-model="vm.smtp.Smtp.authentication" aria-label="SMTP_Authentication"><span translate="SETTINGS.SMTP_AUTHENTICATION">SMTP_Authentication</span></md-switch>\n\n                    </md-input-container>\n                    <md-input-container ng-if="vm.smtp.Smtp.authentication == true || vm.smtp.Smtp.service != null" class="md-block">\n                        <label translate="SETTINGS.SMTP_USERNAME">SMTP_Username</label>\n                        <input type="text" name="Smtp.user" ng-model="vm.smtp.Smtp.user" ng-required="true">\n\n                        <div class="hint"><span translate="SETTINGS.HELP.SMTP_USERNAME"></span></div>\n                        <div ng-messages="generalForm[\'Smtp.user\'].$error" ng-show="generalForm[\'Smtp.user\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.SMTP_USERNAME_REQUIRED">SMTP_Username field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n                    <md-input-container class="md-block" ng-if="vm.smtp.Smtp.authentication == true || vm.smtp.Smtp.service != null">\n                        <label translate="SETTINGS.SMTP_PASSWORD">SMTP_Password</label>\n                        <input type="password" name="Smtp.pass" ng-model="vm.smtp.Smtp.pass" placeholder="Password" translate translate-attr-placeholder="SETTINGS.PASSWORD" required>\n                        <div class="hint"><span translate="SETTINGS.HELP.SMTP_PASSWORD"></span></div>\n                        <div ng-messages="generalForm[\'Smtp.pass\'].$error" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                            </div>\n                            <div ng-message="pattern">\n                                <span translate="SETTINGS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                    <md-input-container class="md-block">\n                        <label translate="SETTINGS.DESCRIPTION">Description</label>\n                        <input type="" name="description" ng-model="vm.smtp.description">\n\n                        <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                            <div ng-message="required">\n                                <span translate="SETTINGS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                            </div>\n                        </div>\n                    </md-input-container>\n\n                </form>\n            </div>\n\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/settings/views/system/system.html",'<div id="system" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.SYSTEM">SYSTEM</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" md-border-bottom flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SETTINGS.GENERAL">GENERAL</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="system-detail-form-container personal_info md-background-bg md-whiteframe-1dp">\n                        <md-card class="md-whiteframe-1dp padding-20" layout="row" layout-xs="column" layout-wrap>\n                            <ms-widget flex="50" flex-xs="100">\n                                \x3c!-- Front --\x3e\n                                <ms-widget-front class="white-bg">\n                                    <div class="ph-16 pt-16 pb-8 md-accent-bg">\n                                        <div class="h3">OS</div>\n                                    </div>\n\n                                    <div layout="row" layout-align="start center" layout-wrap>\n                                        <div flex="100" flex-gt-md="100">\n                                            <div class="p-16 pb-32">\n                                                <div class="h4">{{vm.system.system.manufacturer}} {{vm.system.system.model}}</div>\n                                                <div class="h4">{{vm.system.cpu.manufacturer}} {{vm.system.cpu.brand}} - {{vm.system.cpu.speed}} GHz - {{vm.system.cpu.cores}} Cores</div>\n                                                <div class="h4">{{vm.system.os.distro}} - {{vm.system.os.release}} - Kernel: {{vm.system.os.kernel}}</div>\n                                                <div class="h4">Node.js: {{vm.system.node}}</div>\n                                                <div class="h4">Host: {{vm.system.os.hostname}} - Uptime: {{vm.system.time.uptime / 60 | number:0}} m</div>\n                                                <div class="h4">TimeZone: {{vm.system.time.timezone}} ({{vm.system.time.timezoneName}})</div>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </ms-widget-front>\n                                \x3c!-- / Front --\x3e\n                            </ms-widget>\n                            <ms-widget flex="25" flex-xs="100">\n                                \x3c!-- Front --\x3e\n                                <ms-widget-front class="white-bg">\n                                    <div class="ph-16 pt-16 pb-8 md-accent-bg md-hue-1">\n                                        <div class="h3">CPU</div>\n                                    </div>\n\n                                    <div layout="row" layout-align="start center" layout-wrap>\n                                        <div flex="100" flex-gt-md="100">\n                                            <div class="p-16 pb-32">\n                                                <div class="pb-8" layout="row" layout-align="space-between start">\n                                                    <span class="h3" translate="SETTINGS.AVG_LOAD">AVG Load</span>\n                                                    <span class="h3 secondary-text font-weight-500">{{vm.system.currentLoad.avgload * 100 | number:0}}%</span>\n                                                </div>\n                                                <md-progress-linear class="red" md-mode="determinate" value="{{vm.system.currentLoad.avgload * 100 | number:0}}"></md-progress-linear>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </ms-widget-front>\n                                \x3c!-- / Front --\x3e\n                            </ms-widget>\n                            <ms-widget flex="25" flex-xs="100">\n                                \x3c!-- Front --\x3e\n                                <ms-widget-front class="white-bg">\n                                    <div class="ph-16 pt-16 pb-8 md-accent-bg md-hue-3">\n                                        <div class="h3">MEM</div>\n                                    </div>\n\n                                    <div layout="row" layout-align="start center" layout-wrap>\n                                        <div flex="100" flex-gt-md="100">\n                                            <div class="p-16 pb-32">\n                                                <div class="h4">{{\'SETTINGS.TOTAL\' | translate}}: {{vm.system.mem.total / 1024 / 1024 / 1024 | number:0}} GB</div>\n                                                <div class="h4">{{\'SETTINGS.FREE\' | translate}}: {{vm.system.mem.available / 1024 / 1024 / 1024 | number:0}} GB</div>\n                                                <div class="h4">{{\'SETTINGS.USED\' | translate}}: {{vm.system.mem.active / 1024 / 1024 / 1024 | number:0}} GB</div>\n                                            </div>\n                                            <div class="p-16 pb-32">\n                                                <div class="pb-8" layout="row" layout-align="space-between start">\n                                                    <span class="h3" translate="SETTINGS.USED">Used</span>\n                                                    <span class="h3 secondary-text font-weight-500">{{(vm.system.mem.active / vm.system.mem.total) * 100 | number : 0}}%</span>\n                                                </div>\n                                                <md-progress-linear class="md-warn" md-mode="determinate" value="{{(vm.system.mem.active / vm.system.mem.total) * 100 | number : 0 }}"></md-progress-linear>\n\n                                            </div>\n                                        </div>\n                                    </div>\n                                </ms-widget-front>\n                                \x3c!-- / Front --\x3e\n                            </ms-widget>\n                        </md-card>\n\n                        <md-card class="md-whiteframe-1dp padding-20" layout="row" layout-xs="column" layout-wrap>\n                            <ms-widget ng-repeat="disk in vm.system.fsSize" flex="25" flex-xs="100">\n                                \x3c!-- Front --\x3e\n                                <ms-widget-front class="white-bg">\n                                    <div class="ph-16 pt-16 pb-8 md-accent-bg md-hue-3">\n                                        <div class="h3">DISK {{$index + 1}}</div>\n                                    </div>\n\n                                    <div layout="row" layout-align="start center" layout-wrap>\n                                        <div flex="100" flex-gt-md="100">\n                                            <div class="p-16 pb-32">\n                                                <div class="h4">{{\'SETTINGS.FILE_SYSTEM\' | translate}}: {{disk.fs}}</div>\n                                                <div class="h4">{{\'SETTINGS.MOUNT_POINT\' | translate}}: "{{disk.mount}}"</div>\n                                                <div class="h4">{{\'SETTINGS.TOTAL\' | translate}}: {{disk.size / 1024 / 1024 / 1024 | number:0}} GB</div>\n                                                <div class="h4">{{\'SETTINGS.USED\' | translate}}: {{disk.used / 1024 / 1024 / 1024 | number:0}} GB</div>\n                                            </div>\n                                            <div class="p-16 pb-32">\n                                                <div class="pb-8" layout="row" layout-align="space-between start">\n                                                    <span class="h3" translate="SETTINGS.USED">Used</span>\n                                                    <span class="h4 secondary-text font-weight-500">{{disk.use | number:0}}%</span>\n                                                </div>\n                                                <md-progress-linear class="red" md-mode="determinate" value="{{disk.use | number:0}}"></md-progress-linear>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </ms-widget-front>\n                                \x3c!-- / Front --\x3e\n                            </ms-widget>\n                        </md-card>\n\n                        <md-card class="md-whiteframe-1dp padding-20" layout="row" layout-xs="column" layout-wrap>\n                            <ms-widget ng-repeat="net in vm.system.net" flex="25" flex-xs="100">\n                                \x3c!-- Front --\x3e\n                                <ms-widget-front class="white-bg">\n                                    <div class="ph-16 pt-16 pb-8 md-accent-bg md-hue-3">\n                                        <div class="h3">NET {{$index + 1}}</div>\n                                    </div>\n\n                                    <div layout="row" layout-align="start center" layout-wrap>\n                                        <div flex="100" flex-gt-md="100">\n                                            <div class="p-16 pb-32">\n                                                <div class="h4">{{\'SETTINGS.INTERFACE\' | translate}}: {{net.iface}}</div>\n                                                <div class="h4">IPv4: {{net.ip4}}</div>\n                                                <div class="h4">IPv6: {{net.ip6}}</div>\n                                                <div class="h4">MAC: {{net.mac}}</div>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </ms-widget-front>\n                                \x3c!-- / Front --\x3e\n                            </ms-widget>\n                        </md-card>\n\n                        <md-card class="md-whiteframe-1dp padding-20" layout="row">\n                            <div flex>\n                                <md-toolbar class="md-table-toolbar md-default">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead" translate="SETTINGS.TOP_N_PROCESSES" translate-values="{value: vm.processLimit}"></span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm.searchTerm1 = query" on-collapse="vm.searchTerm1 = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-table-container>\n                                    <table md-table>\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column>pid</th>\n                                                <th md-column>{{\'SETTINGS.NAME\' | translate}}</th>\n                                                <th md-column>{{\'SETTINGS.STATE\' | translate}}</th>\n                                                <th md-column>pmem</th>\n                                                <th md-column>pcpu</th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body>\n                                            <tr md-row ng-repeat="process in vm.system.processes.list | limitTo: vm.processLimit | filter: vm.searchTerm1 | orderBy:\'-pcpu\'">\n                                                <td md-cell>{{process.pid}}</td>\n                                                <td md-cell>{{process.command}}</td>\n                                                <td md-cell>\n                                                    <span class="text-boxed white-fg" ng-class="{\n                          \'green-600-bg\': process.state == \'running\',\n                          \'yellow-600-bg\': process.state == \'sleeping\',\n                          \'red-600-bg\': process.state == \'blocked\'}">{{process.state | uppercase}}</span>\n                                                </td>\n                                                <td md-cell>{{process.pmem}}%</td>\n                                                <td md-cell>{{process.pcpu}}%</td>\n                                            </tr>\n                                        </tbody>\n                                    </table>\n                                </md-table-container>\n                            </div>\n                        </md-card>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SETTINGS.PROCESSES">PROCESSES</span>\n                </md-tab-label>\n\n                <md-tab-body>\n                    <div class="system-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <md-card class="md-whiteframe-1dp padding-20" flex>\n                            <md-toolbar class="md-table-toolbar md-default">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="SETTINGS.MOTION_PROCESS_MANAGEMENT"></span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm.searchTerm2 = query" on-collapse="vm.searchTerm2 = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-click="vm.getProcesses()" class="md-icon-button" aria-label="Reload">\n                                        <md-icon md-font-icon="icon-reload" class="s24"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table>\n                                    <thead md-head>\n                                        <tr md-row>\n                                            <th md-column>id</th>\n                                            <th md-column>pid</th>\n                                            <th md-column>{{\'SETTINGS.NAME\' | translate}}</th>\n                                            <th md-column>{{\'SETTINGS.STATE\' | translate}}</th>\n                                            <th md-column>MEM</th>\n                                            <th md-column>CPU</th>\n                                            <th md-column width="20px">Actions</th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row ng-repeat="process in vm.processes | filter: vm.searchTerm2 | orderBy:\'-monit.cpu\'">\n                                            <td md-cell>{{process.pm_id}}</td>\n                                            <td md-cell>{{process.pid}}</td>\n                                            <td md-cell>{{process.name == \'agi\' ? \'agi (Cally Square IVR)\' : process.name}}</td>\n                                            <td md-cell>\n                                                <span class="text-boxed white-fg" ng-class="{\'green-600-bg\': process.pm2_env.status == \'online\', \'red-600-bg\': process.pm2_env.status == \'stopped\'}">{{process.pm2_env.status | uppercase}}</span>\n                                            </td>\n                                            <td md-cell>{{process.monit.memory / 1024 / 1024 | number:0}} MB</td>\n                                            <td md-cell>{{process.monit.cpu}}%</td>\n                                            <td md-cell>\n                                                <md-button ng-if="process.pm2_env.status !== \'online\'" ng-click="vm.updateProcess($event, process.pm_id, \'online\')" class="md-icon-button" aria-label="Play">\n                                                    <md-icon md-font-icon="icon-play" class="s24"></md-icon>\n                                                </md-button>\n                                                <md-button ng-if="process.pm2_env.status === \'online\'" ng-click="vm.updateProcess($event, process.pm_id, \'stopped\')" class="md-icon-button" aria-label="Stop">\n                                                    <md-icon md-font-icon="icon-stop" class="s24"></md-icon>\n                                                </md-button>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                    <tfoot md-foot>\n                                        <tr md-row>\n                                            <td md-cell></td>\n                                            <td md-cell></td>\n                                            <td md-cell></td>\n                                            <td md-cell></td>\n                                            <td md-cell>{{ (vm.processes | map: \'monit.memory\' | sum) / 1024 / 1024 | number:0 }} MB</td>\n                                            <td md-cell></td>\n                                            <td md-cell></td>\n                                        </tr>\n                                    </tfoot>\n                                </table>\n                            </md-table-container>\n                        </md-card>\n                        <md-card class="md-whiteframe-1dp padding-20" flex>\n                            <md-toolbar class="md-table-toolbar md-default">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="SETTINGS.USEFUL_COMMANDS"></span>\n                                    <div flex></div>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table>\n                                    <thead md-head>\n                                        <tr md-row>\n                                            <th md-column width="30%">{{\'SETTINGS.COMMAND\' | translate}}</th>\n                                            <th md-column>{{\'SETTINGS.DESCRIPTION\' | translate}}</th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr>\n                                            <td md-cell class="no-border">pm2 list</td>\n                                            <td md-cell class="no-border">{{ \'SETTINGS.PM2_LIST\' | translate}}</td>\n                                        </tr>\n                                        <tr>\n                                            <td md-cell class="no-border">pm2 start &lt;id | name&gt;</td>\n                                            <td md-cell class="no-border">{{ \'SETTINGS.PM2_START\' | translate}}</td>\n                                        </tr>\n                                        <tr>\n                                            <td md-cell class="no-border">pm2 stop &lt;id | name | all&gt;</td>\n                                            <td md-cell class="no-border">{{ \'SETTINGS.PM2_STOP\' | translate}}</td>\n                                        </tr>\n                                        <tr>\n                                            <td md-cell class="no-border">pm2 restart &lt;id | name&gt;</td>\n                                            <td md-cell class="no-border">{{ \'SETTINGS.PM2_RESTART\' | translate}}</td>\n                                        </tr>\n                                        <tr>\n                                            <td md-cell class="no-border">pm2 logs [id | name]</td>\n                                            <td md-cell class="no-border">{{ \'SETTINGS.PM2_LOGS\' | translate}}</td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                        </md-card>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/settings/views/updates/update/dialog.html",'<md-dialog aria-label="Update">\n    <form name="updateForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n            </div>\n        </md-toolbar>\n\n        <div md-background-bg layout="row" layout-align="start start">\n            <md-progress-linear md-mode="determinate" value="{{vm.progress}}" class="md-warn"></md-progress-linear>\n        </div>\n\n        <md-dialog-content ms-scroll>\n            <div layout="row" layout-align="center center">\n                <div ng-if="vm.updating" layout="column" layout-align="center center">\n                    <span class="text-center md-title">Grab a quick coffee and</span>\n                    <span class="text-center md-title">get back here as soon as completed!</span>\n                    <span class="text-center md-title">{{vm.output}}</span>\n                </div>\n                <div ng-if="!vm.updating">\n                    <div ng-if="vm.success" layout="column" layout-align="center center">\n                        <span class="text-center md-title">Update Completed! Thank you for your time.</span>\n                        <span class="text-center md-title">In order to complete the update,</span>\n                        <span class="text-center md-title">please click on reload button</span>\n                    </div>\n                    <div ng-if="!vm.success" layout="column" layout-align="center center">\n                        <span class="text-center md-title">Update Error!</span>\n                        <span class="text-center md-title">Please contact your administrator!</span>\n                        <span class="text-center md-title">{{vm.output}}</span>\n                    </div>\n                </div>\n                <img src="assets/images/business/users.jpg" alt="" width="128" height="128" />\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions ng-if="!vm.updating" layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.reload()" class="send-button md-warm md-raised" aria-label="RELOAD" translate="SETTINGS.RELOAD" translate-attr-aria-label="SETTINGS.RELOAD">\n                    RELOAD\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/settings/views/updates/updates.html",'<div id="updates" class="page-layout simple fullwidth doc-page">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-cog" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SETTINGS.UPDATES">UPDATES</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n            \x3c!-- UPDATE CARD --\x3e\n            <div layout="row" ng-if="!vm.updating">\n                <md-card class="md-whiteframe-1dp padding-20" flex>\n                    <div layout="column" layout-align="center center">\n\n                        <span class="md-title md-accent-fg padding-20 text-bold" translate="SETTINGS.CURRENT_VERSION">CURRENT VERSION</span>\n\n                        <span class="md-display-3 padding-20">{{vm.version.current}}</span>\n\n                        <md-button href="https://wiki.xcallymotion.com/display/XMV/Motion+GUI#MotionGUI-Version{{vm.version.current}}" target="_blank" class="md-accent" title="CHANGELOG" aria-label="CHANGELOG" translate="SETTINGS.CHANGELOG" translate-attr-aria-label="SETTINGS.CHANGELOG">\n                            CHANGELOG\n                        </md-button>\n                    </div>\n                </md-card>\n                <md-card class="md-whiteframe-20dp padding-20" flex ng-if="vm.version.current != vm.version.latest">\n                    <div layout="column" layout-align="center center">\n\n                        <span class="md-title md-warn-fg padding-20 text-bold" translate="SETTINGS.NEW_VERSION">NEW VERSION</span>\n\n                        <span class="md-display-3 padding-20">{{vm.version.latest}}</span>\n\n                        <md-button href="https://wiki.xcallymotion.com/display/XMV/Motion+GUI#MotionGUI-Version{{vm.version.latest}}" target="_blank" class="md-accent" title="CHANGELOG" aria-label="CHANGELOG" translate="SETTINGS.CHANGELOG" translate-attr-aria-label="SETTINGS.CHANGELOG">\n                            CHANGELOG\n                        </md-button>\n                        <md-button ng-click="vm.updateConfirm($event)" class="md-raised md-warn" aria-label="CHANGELOG" translate="SETTINGS.UPDATE" translate-attr-aria-label="SETTINGS.UPDATE">UPDATE</md-button>\n                    </div>\n                </md-card>\n                <md-card class="md-whiteframe-1dp padding-20" flex ng-if="vm.version.current == vm.version.latest">\n                    <div layout="column" layout-align="center center">\n\n                        <span class="md-title md-warn-fg padding-20 text-bold" translate="SETTINGS.REMOTE_VERSION">REMOTE VERSION</span>\n\n                        <span class="md-subhead padding-20" translate="SETTINGS.NO_NEW_VERSION_AVAILABLE">NO NEW VERSION AVAILABLE</span>\n                    </div>\n                </md-card>\n            </div>\n            \x3c!-- / UPDATE CARD --\x3e\n\n            <div ng-if="vm.updating">\n                <md-card class="md-whiteframe-1dp padding-20" flex>\n                    <div layout="column" layout-align="center center">\n                        <span class="md-title md-accent-fg padding-20 text-bold" translate="SETTINGS.UPDATING">...</span>\n                        <md-progress-linear md-mode="determinate" class="md-accent padding-20" value="{{vm.progress}}"></md-progress-linear>\n                        <span class="md-display-1 padding-5 text-center">Grab a quick coffee and</span>\n                        <span class="md-display-1 padding-5 text-center">get back here as soon as completed</span>\n                        <img src="assets/images/business/users.jpg" alt="" width="40%" height="40%" />\n                    </div>\n                </md-card>\n            </div>\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>'),e.put("app/main/apps/sms/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="SMS.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'SMS.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'SMS.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'SMS.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'SMS.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'SMS.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'SMS.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'SMS.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'SMS.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'SMS.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'SMS.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'SMS.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'SMS.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'SMS.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"SMS.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"SMS.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"SMS.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"SMS.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"SMS.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"SMS.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"SMS.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"SMS.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'SMS.PAGE' | translate}}:', rowsPerPage: '{{'SMS.ROWSPERPAGE' | translate}}:', of: '{{'SMS.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/sms/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="SMS.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'SMS.NAME\' | translate }}</th>\n                <th md-column>{{ \'SMS.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'SMS.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'SMS.READY\' | translate }}</th>\n                <th md-column>{{ \'SMS.WAITING\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="7">\n                    <div layout="row" layout-align="center center">\n                        <span translate="SMS.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SMS.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditSmsQueue($event, vm.queues[value])" translate="SMS.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="SMS.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'SMS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SMS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SMS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/sms/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/sms/views/smsAccounts/create/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.smsAccount.name" ng-required="true" autofocus ng-disabled="!vm.newSmsAccount">\n\n                <div ng-messages="smsAccountForm[\'name\'].$error" ng-show="smsAccountForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.KEY">key</label>\n                <input type="text" name="key" ng-model="vm.smsAccount.key" md-maxlength="5" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'key\'].$error" ng-show="smsAccountForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.KEY_REQUIRED">key field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="SMS.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.MOTIONPROXY">MotionProxy</label>\n                <input type="url" name="remote" ng-model="vm.smsAccount.remote" md-maxlength="255" ng-required="true">\n\n                <div class="hint"><span translate="SMS.HELP.MOTIONPROXY"></span></div>\n                <div ng-messages="smsAccountForm[\'remote\'].$error" ng-show="smsAccountForm[\'remote\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.MOTIONPROXY_REQUIRED">MotionProxy field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="SMS.ERRORS.MOTIONPROXY_MUST_VALID_URL">MotionProxy must be a valid url http://www.xcally.com</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="SMS.ERRORS.MOTIONPROXY_MAX_LENGTH" translate-values=\'{max: 255}\'>MotionProxy must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.LIST">List</label>\n                <md-select name="ListId" ng-model="vm.smsAccount.ListId" required>\n                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                </md-select>\n                <div class="hint"><span translate="SMS.HELP.LIST"></span></div>\n                <div ng-messages="smsAccountForm[\'ListId\'].$error" ng-show="smsAccountForm[\'ListId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.smsAccount.type" required>\n                    <md-option ng-value="\'twilio\'">Twilio</md-option>\n                    <md-option ng-value="\'skebby\'">Skebby</md-option>\n                    <md-option ng-value="\'connectel\'">Connectel</md-option>\n                    <md-option ng-value="\'clicksend\'">ClickSend</md-option>\n                    <md-option ng-value="\'plivo\'">Plivo</md-option>\n                    <md-option ng-value="\'infobip\'">Infobip</md-option>\n                    <md-option ng-value="\'clickatell\'">Clickatell</md-option>\n                    <md-option ng-value="\'csc\'">CSCTelecom</md-option>\n                    <md-option ng-value="\'intelepeer\'">Intelepeer</md-option>\n                </md-select>\n                <div ng-messages="smsAccountForm[\'type\'].$error" ng-show="smsAccountForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.PHONE">Phone</label>\n                <input type="text" name="phone" ng-model="vm.smsAccount.phone" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'phone\'].$error" ng-show="smsAccountForm[\'phone\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smsAccount.type == \'twilio\'" class="md-block">\n                <label translate="SMS.ACCOUNTSID">AccountSID</label>\n                <input type="text" name="accountSid" ng-model="vm.smsAccount.accountSid" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'accountSid\'].$error" ng-show="smsAccountForm[\'accountSid\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.ACCOUNTSID_REQUIRED">AccountSID field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smsAccount.type == \'plivo\'" class="md-block">\n                <label translate="SMS.AUTHID">AuthID</label>\n                <input type="text" name="authId" ng-model="vm.smsAccount.authId" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'authId\'].$error" ng-show="smsAccountForm[\'authId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.AUTHID_REQUIRED">AuthID field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smsAccount.type == \'twilio\' || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'plivo\'" class="md-block">\n                <label translate="SMS.AUTHTOKEN">AuthToken</label>\n                <input type="text" name="authToken" ng-model="vm.smsAccount.authToken" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'authToken\'].$error" ng-show="smsAccountForm[\'authToken\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.AUTHTOKEN_REQUIRED">AuthToken field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smsAccount.type == \'skebby\'" class="md-block">\n                <label translate="SMS.METHOD">Method</label>\n                <md-select name="smsMethod" ng-model="vm.smsAccount.smsMethod" required>\n                    <md-option ng-value="\'SI\'">Basic</md-option>\n                    <md-option ng-value="\'TI\'">Classic</md-option>\n                    <md-option ng-value="\'GP\'">Classic+</md-option>\n                </md-select>\n                <div ng-messages="smsAccountForm[\'smsMethod\'].$error" ng-show="smsAccountForm[\'smsMethod\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.METHOD_REQUIRED">Method field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smsAccount.type == \'skebby\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'csc\' || vm.smsAccount.type == \'infobip\'" class="md-block">\n                <label translate="SMS.USERNAME">Username</label>\n                <input type="text" name="username" ng-model="vm.smsAccount.username" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'username\'].$error" ng-show="smsAccountForm[\'username\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.smsAccount.type == \'skebby\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'infobip\'">\n                <label translate="SMS.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.smsAccount.password" placeholder="Password" translate translate-attr-placeholder="SMS.PASSWORD" required>\n                <div ng-messages="smsAccountForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="SMS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container ng-if="vm.smsAccount.type == \'infobip\'" class="md-block">\n                <label translate="SMS.BASEURL">BaseURL</label>\n                <input type="text" name="baseUrl" ng-model="vm.smsAccount.baseUrl" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'baseUrl\'].$error" ng-show="smsAccountForm[\'baseUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.BASEURL_REQUIRED">BaseURL field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.smsAccount.type == \'csc\' || vm.smsAccount.type == \'clickatell\' || vm.smsAccount.type == \'intelepeer\'" class="md-block">\n                <label translate="SMS.APIKEY">ApiKey</label>\n                <input type="text" name="apiKey" ng-model="vm.smsAccount.apiKey" ng-required="true">\n\n                <div ng-messages="smsAccountForm[\'apiKey\'].$error" ng-show="smsAccountForm[\'apiKey\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.APIKEY_REQUIRED">ApiKey field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.smsAccount.description">\n\n                <div ng-messages="smsAccountForm[\'description\'].$error" ng-show="smsAccountForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSmsAccount" ng-click="vm.saveSmsAccount()" class="send-button md-accent md-raised" ng-disabled="smsAccountForm.$invalid || smsAccountForm.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSmsAccount" ng-click="vm.addNewSmsAccount()" class="send-button md-accent md-raised" ng-disabled="smsAccountForm.$invalid" aria-label="ADD" translate="SMS.ADD_SMSACCOUNT" translate-attr-aria-label="SMS.ADD_SMSACCOUNT">\n                    ADD SMSACCOUNT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSmsAccount" ng-click="vm.deleteSmsAccount($event)" aria-label="DELETE" translate translate-attr-aria-label="SMS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SMS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/agentadd/agentadd.html",'<md-dialog class="smsAccount-dialog" aria-label="smsAccount" ng-init="vm.onInit()">\n    <form name="smsAccountForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="SMS.AGENTADD_SMSACCOUNT">Add Agent to smsAccount</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/agent/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.AGENT">Agent</label>\n                <md-select name="agent" ng-model="vm.agent.agent" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents" ng-disabled="agent.canSelect === false">{{ agent.name }}</md-option>\n                </md-select>\n                <div ng-messages="smsAccountFormApp[\'agent\'].$error" ng-show="smsAccountFormApp[\'agent\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.agent.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'timeout\'].$error" ng-show="smsAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="SMS.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="SMS.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/autoreply/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.TIMES">times</label>\n                <md-select name="times" ng-model="vm.autoreply.times" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="1">One Time</md-option>\n                    <md-option ng-value="0">Always</md-option>\n                </md-select>\n                <div ng-messages="smsAccountFormApp[\'times\'].$error" ng-show="smsAccountFormApp[\'times\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TIMES_REQUIRED">times field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.TEXT">Text</label>\n                <textarea name="text" ng-model="vm.autoreply.text" required></textarea>\n\n                <div ng-messages="smsAccountFormApp[\'text\'].$error" ng-show="smsAccountFormApp[\'text\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TEXT_REQUIRED">Text field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/close/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.DISPOSITION">Disposition</label>\n                <input type="text" name="disposition" ng-model="vm.close.disposition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'disposition\'].$error" ng-show="smsAccountFormApp[\'disposition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.DISPOSITION_REQUIRED">Disposition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/gotoif/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.CONDITION">Condition</label>\n                <input type="text" name="condition" ng-model="vm.gotoif.condition" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'condition\'].$error" ng-show="smsAccountFormApp[\'condition\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.CONDITION_REQUIRED">Condition field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.TRUEPRIORITY">truepriority</label>\n                <input type="number" name="truepriority" ng-model="vm.gotoif.truepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'truepriority\'].$error" ng-show="smsAccountFormApp[\'truepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TRUEPRIORITY_REQUIRED">truepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="SMS.ERRORS.TRUEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">truepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.FALSEPRIORITY">falsepriority</label>\n                <input type="number" name="falsepriority" ng-model="vm.gotoif.falsepriority" min="1" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'falsepriority\'].$error" ng-show="smsAccountFormApp[\'falsepriority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.FALSEPRIORITY_REQUIRED">falsepriority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="SMS.ERRORS.FALSEPRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">falsepriority must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/gotop/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.PRIORITY">Priority</label>\n                <input type="number" name="priority" ng-model="vm.gotop.priority" min="0" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'priority\'].$error" ng-show="smsAccountFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="SMS.ERRORS.PRIORITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Priority must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/noop/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.noop.value" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'value\'].$error" ng-show="smsAccountFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/queue/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="smsAccountFormApp[\'queue\'].$error" ng-show="smsAccountFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'timeout\'].$error" ng-show="smsAccountFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="SMS.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="SMS.ERRORS.TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/system/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.COMMAND">Command</label>\n                <input type="text" name="command" ng-model="vm.system.command" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="smsAccountFormApp[\'command\'].$error" ng-show="smsAccountFormApp[\'command\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.COMMAND_REQUIRED">Command field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.VARIABLE">Variable</label>\n                <md-select name="variable" ng-model="vm.system.variable" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="variable.name" ng-repeat="variable in vm.variables" ng-disabled="variable.canSelect === false">{{ variable.name }}</md-option>\n                </md-select>\n                <div ng-messages="smsAccountFormApp[\'variable\'].$error" ng-show="smsAccountFormApp[\'variable\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/apps/tag/dialog.html",'<md-dialog class="smsAccount-dialog" aria-label="New SmsAccount">\n    <form name="smsAccountFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.TAG">Tag</label>\n                <md-select name="tag" ng-model="vm.tag.tag" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags" ng-disabled="tag.canSelect === false">{{ tag.name }}</md-option>\n                </md-select>\n                <div ng-messages="smsAccountFormApp[\'tag\'].$error" ng-show="smsAccountFormApp[\'tag\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.TAG_REQUIRED">Tag field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveSmsAccountApp()" class="send-button md-accent md-raised" ng-disabled="smsAccountFormApp.$invalid || smsAccountFormApp.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/smsCannedAnswers/dialog.html",'<md-dialog class="smsCannedAnswer-dialog" aria-label="New SmsCannedAnswer">\n    <form name="smsCannedAnswerForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.KEY">Key</label>\n                <input type="" name="key" ng-model="vm.smsCannedAnswer.key" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="smsCannedAnswerForm[\'key\'].$error" ng-show="smsCannedAnswerForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.VALUE">Value</label>\n                <textarea name="value" ng-model="vm.smsCannedAnswer.value" required></textarea>\n\n                <div ng-messages="smsCannedAnswerForm[\'value\'].$error" ng-show="smsCannedAnswerForm[\'value\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.smsCannedAnswer.description">\n\n                <div ng-messages="smsCannedAnswerForm[\'description\'].$error" ng-show="smsCannedAnswerForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSmsCannedAnswer" ng-click="vm.saveSmsCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="smsCannedAnswerForm.$invalid || smsCannedAnswerForm.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSmsCannedAnswer" ng-click="vm.addNewSmsCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="smsCannedAnswerForm.$invalid" aria-label="ADD" translate="SMS.ADD_SMSCANNEDANSWER" translate-attr-aria-label="SMS.ADD_SMSCANNEDANSWER">\n                    ADD SMSCANNEDANSWER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSmsCannedAnswer" ng-click="vm.deleteSmsCannedAnswer($event)" aria-label="DELETE" translate translate-attr-aria-label="SMS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SMS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/smsDispositions/dialog.html",'<md-dialog class="smsDisposition-dialog" aria-label="New SmsDisposition">\n    <form name="smsDispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.smsDisposition.name" ng-required="true" autofocus>\n\n                <div ng-messages="smsDispositionForm[\'name\'].$error" ng-show="smsDispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSmsDisposition" ng-click="vm.saveSmsDisposition()" class="send-button md-accent md-raised" ng-disabled="smsDispositionForm.$invalid || smsDispositionForm.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSmsDisposition" ng-click="vm.addNewSmsDisposition()" class="send-button md-accent md-raised" ng-disabled="smsDispositionForm.$invalid" aria-label="ADD" translate="SMS.ADD_SMSDISPOSITION" translate-attr-aria-label="SMS.ADD_SMSDISPOSITION">\n                    ADD SMSDISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSmsDisposition" ng-click="vm.deleteSmsDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="SMS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SMS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsAccounts/edit/view.html",'<div id="sms-smsAccount" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-smsAccounts-button md-icon-button" aria-label="Go to smsAccounts" ng-click="vm.gotoSmsAccounts()" translate translate-attr-aria-label="SMS.GO_TO_SMSACCOUNTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="smsAccount-image" hide-xs>\n                    <img ng-src="assets/images/business/smsAccounts.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.smsAccount.id}}\n                        <span ng-if="vm.smsAccount.name">{{vm.smsAccount.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="SMS.CREATED_AT"></span> <span>{{vm.smsAccount.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.smsAccount, $event)" class="md-fab md-warn md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="SMS.AGENTADD_SMSACCOUNT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveSmsAccount()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (proxyForm.$invalid) || (dispositionForm.$invalid) || (smsDispositionsForm.$invalid) || (smsCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsAccount-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="SMS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.smsAccount.name" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.KEY">key</label>\n                                <input type="text" name="key" ng-model="vm.smsAccount.key" md-maxlength="5" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'key\'].$error" ng-show="generalForm[\'key\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.KEY_REQUIRED">key field is required</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="SMS.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 5}\'>key must have a maximum length equal to 5</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.LIST">List</label>\n                                <md-select name="ListId" ng-model="vm.smsAccount.ListId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists" ng-disabled="ListId.canSelect === false">{{ ListId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="SMS.HELP.LIST"></span></div>\n                                <div ng-messages="generalForm[\'ListId\'].$error" ng-show="generalForm[\'ListId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.LIST_REQUIRED">List field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.TYPE">Type</label>\n                                <md-select name="type" ng-model="vm.smsAccount.type" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'twilio\'">Twilio</md-option>\n                                    <md-option ng-value="\'skebby\'">Skebby</md-option>\n                                    <md-option ng-value="\'connectel\'">Connectel</md-option>\n                                    <md-option ng-value="\'clicksend\'">ClickSend</md-option>\n                                    <md-option ng-value="\'plivo\'">Plivo</md-option>\n                                    <md-option ng-value="\'infobip\'">Infobip</md-option>\n                                    <md-option ng-value="\'clickatell\'">Clickatell</md-option>\n                                    <md-option ng-value="\'csc\'">CSCTelecom</md-option>\n                                    <md-option ng-value="\'intelepeer\'">Intelepeer</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.PHONE">Phone</label>\n                                <input type="text" name="phone" ng-model="vm.smsAccount.phone" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'phone\'].$error" ng-show="generalForm[\'phone\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'twilio\'" class="md-block">\n                                <label translate="SMS.ACCOUNTSID">AccountSID</label>\n                                <input type="text" name="accountSid" ng-model="vm.smsAccount.accountSid" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'accountSid\'].$error" ng-show="generalForm[\'accountSid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.ACCOUNTSID_REQUIRED">AccountSID field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'plivo\'" class="md-block">\n                                <label translate="SMS.AUTHID">AuthID</label>\n                                <input type="text" name="authId" ng-model="vm.smsAccount.authId" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'authId\'].$error" ng-show="generalForm[\'authId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.AUTHID_REQUIRED">AuthID field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'twilio\' || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'plivo\'" class="md-block">\n                                <label translate="SMS.AUTHTOKEN">AuthToken</label>\n                                <input type="text" name="authToken" ng-model="vm.smsAccount.authToken" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'authToken\'].$error" ng-show="generalForm[\'authToken\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.AUTHTOKEN_REQUIRED">AuthToken field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'skebby\'" class="md-block">\n                                <label translate="SMS.METHOD">Method</label>\n                                <md-select name="smsMethod" ng-model="vm.smsAccount.smsMethod" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'SI\'">Basic</md-option>\n                                    <md-option ng-value="\'TI\'">Classic</md-option>\n                                    <md-option ng-value="\'GP\'">Classic+</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'smsMethod\'].$error" ng-show="generalForm[\'smsMethod\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.METHOD_REQUIRED">Method field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'skebby\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'csc\' || vm.smsAccount.type == \'infobip\'" class="md-block">\n                                <label translate="SMS.USERNAME">Username</label>\n                                <input type="text" name="username" ng-model="vm.smsAccount.username" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'username\'].$error" ng-show="generalForm[\'username\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block" ng-if="vm.smsAccount.type == \'skebby\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'infobip\'">\n                                <label translate="SMS.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.smsAccount.password" placeholder="Password" translate translate-attr-placeholder="SMS.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="SMS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container ng-if="vm.smsAccount.type == \'infobip\'" class="md-block">\n                                <label translate="SMS.BASEURL">BaseURL</label>\n                                <input type="text" name="baseUrl" ng-model="vm.smsAccount.baseUrl" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'baseUrl\'].$error" ng-show="generalForm[\'baseUrl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.BASEURL_REQUIRED">BaseURL field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'csc\' || vm.smsAccount.type == \'clickatell\' || vm.smsAccount.type == \'intelepeer\'" class="md-block">\n                                <label translate="SMS.APIKEY">ApiKey</label>\n                                <input type="text" name="apiKey" ng-model="vm.smsAccount.apiKey" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'apiKey\'].$error" ng-show="generalForm[\'apiKey\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.APIKEY_REQUIRED">ApiKey field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'plivo\'|| vm.smsAccount.type == \'csc\'|| vm.smsAccount.type == \'infobip\' || vm.smsAccount.type == \'intelepeer\'" class="md-block">\n                                <label translate="SMS.SENDERSTRING">SenderString</label>\n                                <input type="text" name="senderString" ng-model="vm.smsAccount.senderString" md-maxlength="11" ng-pattern="/^[A-Za-z0-9\\.\\s]*$/i" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'senderString\'].$error" ng-show="generalForm[\'senderString\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.SENDERSTRING_REQUIRED">SenderString field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="SMS.ERRORS.SENDERSTRING_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\s]*$/i\' }">SenderString must be valid pattern </span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="SMS.ERRORS.SENDERSTRING_MAX_LENGTH" translate-values=\'{max: 11}\'>SenderString must have a maximum length equal to 11</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="(vm.smsAccount.type == \'skebby\' && vm.smsAccount.smsMethod == \'GP\') || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'csc\' || vm.smsAccount.type == \'clickatell\'" class="md-block">\n                                <md-switch ng-model="vm.smsAccount.deliveryReport" aria-label="deliveryReport" ng-disabled="!vm.crudPermissions.canEdit"><span translate="SMS.DELIVERYREPORT">deliveryReport</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.WAITFORTHEASSIGNEDAGENT">WaitForTheAssignedAgent</label>\n                                <input type="number" name="waitForTheAssignedAgent" ng-model="vm.smsAccount.waitForTheAssignedAgent" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'waitForTheAssignedAgent\'].$error" ng-show="generalForm[\'waitForTheAssignedAgent\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.WAITFORTHEASSIGNEDAGENT_REQUIRED">WaitForTheAssignedAgent field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="SMS.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="SMS.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_LESS_THAN_OR_EQUAL_TO">WaitForTheAssignedAgent must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.smsAccount.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.RECEIVEURL">receiveUrl</label>\n                                <div layout="row" layout-align="center center">\n                                    <button class="md-button md-fab md-mini md-primary" ngclipboard data-clipboard-target="#copytoclipboard-receiveUrl" ngclipboard-success="vm.alert({title: \'copied to clipboard\', msg: e.text});" ngclipboard-error="vm.alert({title: \'error\', msg: \'copy to clipboard failed\'});">\n                                        <md-icon md-font-icon="icon-clipboard-text"></md-icon>\n                                    </button>\n                                    <input class="md-input" type="text" id="copytoclipboard-receiveUrl" name="receiveUrl" ng-value="vm.smsAccount.remote + \'/api/sms/accounts/\' + vm.smsAccount.id + \'/notify?token=\' + vm.smsAccount.token" ng-readonly="true">\n                                </div>\n                                <div class="hint"><span translate="SMS.HELP.RECEIVEURL"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="( (vm.smsAccount.type == \'skebby\' && vm.smsAccount.smsMethod == \'GP\') || vm.smsAccount.type == \'connectel\' || vm.smsAccount.type == \'clicksend\' || vm.smsAccount.type == \'csc\' || vm.smsAccount.type == \'clickatell\') && vm.smsAccount.deliveryReport" class="md-block">\n                                <label translate="SMS.DELIVERYREPORTURL">deliveryReportUrl</label>\n                                <div layout="row" layout-align="center center">\n                                    <button class="md-button md-fab md-mini md-primary" ngclipboard data-clipboard-target="#copytoclipboard-deliveryReportUrl" ngclipboard-success="vm.alert({title: \'copied to clipboard\', msg: e.text});" ngclipboard-error="vm.alert({title: \'error\', msg: \'copy to clipboard failed\'});">\n                                        <md-icon md-font-icon="icon-clipboard-text"></md-icon>\n                                    </button>\n                                    <input class="md-input" type="text" id="copytoclipboard-deliveryReportUrl" name="deliveryReportUrl" ng-value="vm.smsAccount.remote + \'/api/sms/accounts/\' + vm.smsAccount.id + \'/status?token=\' + vm.smsAccount.token + (vm.smsAccount.type == \'csc\' ? \'&message-id={message-id}&state={state}\' : \'\')" ng-readonly="true">\n                                </div>\n                                <div class="hint"><span translate="SMS.HELP.DELIVERYREPORTURL"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="smsAccount-detail-form-container notification md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="SMS.NOTIFICATION">NOTIFICATION</div>\n                        </div>\n                        <form name="notificationForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.smsAccount.notificationSound" aria-label="notificationSound" ng-disabled="!vm.crudPermissions.canEdit"><span translate="SMS.NOTIFICATIONSOUND">notificationSound</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.smsAccount.notificationShake" aria-label="notificationShake" ng-disabled="!vm.crudPermissions.canEdit"><span translate="SMS.NOTIFICATIONSHAKE">notificationShake</span></md-switch>\n\n                            </md-input-container>\n                            <div class="md-block">\n                                <label class="md-caption grey-fg" translate="SMS.NOTIFICATIONTEMPLATE">notificationTemplate</label>\n                                <textarea aria-label="notificationTemplate notificationTemplate" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.smsAccount.notificationTemplate"></textarea>\n                            </div>\n\n                        </form>\n                    </div>\n                    <div class="smsAccount-detail-form-container transfer md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="SMS.TRANSFER">TRANSFER</div>\n                        </div>\n                        <form name="transferForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.smsAccount.queueTransfer" aria-label="queueTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="SMS.QUEUETRANSFER">queueTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.queueTransfer == true" class="md-block">\n                                <label translate="SMS.QUEUETRANSFERTIMEOUT">queueTransferTimeout</label>\n                                <input type="number" name="queueTransferTimeout" ng-model="vm.smsAccount.queueTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'queueTransferTimeout\'].$error" ng-show="transferForm[\'queueTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.QUEUETRANSFERTIMEOUT_REQUIRED">queueTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="SMS.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="SMS.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">queueTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.smsAccount.agentTransfer" aria-label="agentTransfer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="SMS.AGENTTRANSFER">agentTransfer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.agentTransfer == true" class="md-block">\n                                <label translate="SMS.AGENTTRANSFERTIMEOUT">agentTransferTimeout</label>\n                                <input type="number" name="agentTransferTimeout" ng-model="vm.smsAccount.agentTransferTimeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="transferForm[\'agentTransferTimeout\'].$error" ng-show="transferForm[\'agentTransferTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.AGENTTRANSFERTIMEOUT_REQUIRED">agentTransferTimeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="SMS.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="SMS.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">agentTransferTimeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsAccount-detail-form-container proxy md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="SMS.PROXY">PROXY</div>\n                        </div>\n                        <form name="proxyForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.TOKEN">token</label>\n                                <input type="text" name="token" ng-model="vm.smsAccount.token" autofocus disabled>\n\n                                <div ng-messages="proxyForm[\'token\'].$error" ng-show="proxyForm[\'token\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.TOKEN_REQUIRED">token field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.MOTIONPROXY">MotionProxy</label>\n                                <input type="url" name="remote" ng-model="vm.smsAccount.remote" md-maxlength="255" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="SMS.HELP.MOTIONPROXY"></span></div>\n                                <div ng-messages="proxyForm[\'remote\'].$error" ng-show="proxyForm[\'remote\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.MOTIONPROXY_REQUIRED">MotionProxy field is required</span>\n                                    </div>\n                                    <div ng-message="url">\n                                        <span translate="SMS.ERRORS.MOTIONPROXY_MUST_VALID_URL">MotionProxy must be a valid url http://www.xcally.com</span>\n                                    </div>\n                                    <div ng-message="md-maxlength">\n                                        <span translate="SMS.ERRORS.MOTIONPROXY_MAX_LENGTH" translate-values=\'{max: 255}\'>MotionProxy must have a maximum length equal to 255</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="smsAccount-detail-form-container disposition md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="SMS.DISPOSITION">DISPOSITION</div>\n                        </div>\n                        <form name="dispositionForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.smsAccount.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="SMS.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.smsAccount.mandatoryDisposition" class="md-block">\n                                <label translate="SMS.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.smsAccount.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="SMS.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="dispositionForm[\'mandatoryDispositionPauseId\'].$error" ng-show="dispositionForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.DISPOSITIONS">DISPOSITIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsAccount-detail-form-container smsdispositions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="SmsAccountSmsDispositionsController as vm_dc" ng-init="vm_dc.init(vm.smsAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedSmsAccountSmsDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="SMS.SMSDISPOSITIONS">SmsDispositions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event)" aria-label="add smsDisposition" translate translate-attr-label="SMS.ADD_SMSDISPOSITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedSmsAccountSmsDispositions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedSmsAccountSmsDispositions.length}} {{vm_dc.selectedSmsAccountSmsDispositions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedSmsAccountSmsDispositions" csv-label="true" filename="smsAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedSmsAccountSmsDispositions($event)" aria-label="delete selected" translate translate-attr-label="SMSACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedSmsAccountSmsDispositions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getSmsAccountSmsDispositions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'SMS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="name">{{ \'SMS.NAME\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'SMS.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="smsDisposition" md-select-id="id" ng-repeat="smsDisposition in vm_dc.smsAccountSmsDispositions.rows">\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event, smsDisposition)" md-cell>{{smsDisposition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event, smsDisposition)" md-cell>{{smsDisposition.name}}</td>\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event, smsDisposition)" md-cell>{{smsDisposition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SMS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event, smsDisposition)" translate="SMS.EDIT_SMSDISPOSITION">\n                                                                Edit SmsDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(smsDisposition, $event)" translate="SMS.DELETE_SMSDISPOSITION">\n                                                                Delete SmsDisposition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.smsAccountSmsDispositions.rows.length">\n                                            <td md-cell colspan="5">\n                                                <span class="text-boxed-ligth" translate="SMS.NO_SMSDISPOSITION_AVAILABLE">No smsdisposition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'SMS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SMS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SMS.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.smsAccountSmsDispositions.count}}" md-on-paginate="vm_dc.getSmsAccountSmsDispositions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.CANNEDANSWERS">CANNEDANSWERS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsAccount-detail-form-container smscannedanswers md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="SmsAccountSmsCannedAnswersController as vm_dc" ng-init="vm_dc.init(vm.smsAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedSmsAccountSmsCannedAnswers.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="SMS.SMSCANNEDANSWERS">SmsCannedAnswers</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event)" aria-label="add smsCannedAnswer" translate translate-attr-label="SMS.ADD_SMSCANNEDANSWER">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedSmsAccountSmsCannedAnswers.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedSmsAccountSmsCannedAnswers.length}} {{vm_dc.selectedSmsAccountSmsCannedAnswers.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedSmsAccountSmsCannedAnswers" csv-label="true" filename="smsAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedSmsAccountSmsCannedAnswers($event)" aria-label="delete selected" translate translate-attr-label="SMSACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedSmsAccountSmsCannedAnswers" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getSmsAccountSmsCannedAnswers">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'SMS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="key">{{ \'SMS.KEY\' | translate }}</th>\n                                            <th md-column md-order-by="value">{{ \'SMS.VALUE\' | translate }}</th>\n                                            <th md-column md-order-by="description">{{ \'SMS.DESCRIPTION\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'SMS.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="smsCannedAnswer" md-select-id="id" ng-repeat="smsCannedAnswer in vm_dc.smsAccountSmsCannedAnswers.rows">\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event, smsCannedAnswer)" md-cell>{{smsCannedAnswer.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event, smsCannedAnswer)" md-cell>{{smsCannedAnswer.key}}</td>\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event, smsCannedAnswer)" md-cell>{{smsCannedAnswer.value}}</td>\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event, smsCannedAnswer)" md-cell>{{smsCannedAnswer.description}}</td>\n                                            <td ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event, smsCannedAnswer)" md-cell>{{smsCannedAnswer.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SMS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditSmsAccountSmsCannedAnswer($event, smsCannedAnswer)" translate="SMS.EDIT_SMSCANNEDANSWER">\n                                                                Edit SmsCannedAnswer\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(smsCannedAnswer, $event)" translate="SMS.DELETE_SMSCANNEDANSWER">\n                                                                Delete SmsCannedAnswer\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.smsAccountSmsCannedAnswers.rows.length">\n                                            <td md-cell colspan="7">\n                                                <span class="text-boxed-ligth" translate="SMS.NO_SMSCANNEDANSWER_AVAILABLE">No smscannedanswer available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'SMS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SMS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SMS.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.smsAccountSmsCannedAnswers.count}}" md-on-paginate="vm_dc.getSmsAccountSmsCannedAnswers" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsAccount-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="SmsAccountActionsController as vm_ac" ng-init="vm_ac.init(vm.smsAccount, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="SMS.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedSmsAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedSmsAccountApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedSmsAccountApps.length}} {{vm_ac.selectedSmsAccountApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedSmsAccountApps($event)" aria-label="delete selected" translate translate-attr-label="SMS.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedSmsAccountApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px">\n                                                    <span translate="VOICE.PRIORITY">Priority</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.smsAccountApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editSmsAccountApp($event, $index)"><span>{{app.priority}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editSmsAccountApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editSmsAccountApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editSmsAccountApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.smsAccountApps.rows.length">\n                                                <td md-cell colspan="7">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.INTERACTIONS">INTERACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsAccount-detail-form-container interactions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="SmsAccountInteractionsController as vm_dc" ng-init="vm_dc.init(vm.smsAccount, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedSmsAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="SMS.INTERACTIONS">Interactions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button class="md-icon-button" ng-click="vm_dc.getSmsAccountInteractions()" aria-label="refresh Interactions" translate translate-attr-label="SMS.REFRESH_INTERACTIONS">\n                                        <md-icon md-font-icon="icon-refresh"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedSmsAccountInteractions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedSmsAccountInteractions.length}} {{vm_dc.selectedSmsAccountInteractions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedSmsAccountInteractions" csv-label="true" filename="smsAccounts.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedSmsAccountInteractions($event)" aria-label="delete selected" translate translate-attr-label="SMSACCOUNTS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedSmsAccountInteractions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getSmsAccountInteractions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'SMS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'SMS.STARTEDAT\' | translate }}</th>\n                                            <th md-column>{{ \'SMS.CONTACT\' | translate }}</th>\n                                            <th md-column>{{ \'SMS.AGENT\' | translate }}</th>\n                                            <th md-column md-order-by="closedAt">{{ \'SMS.CLOSEDAT\' | translate }}</th>\n                                            <th md-column md-order-by="disposition">{{ \'SMS.DISPOSITION\' | translate }}</th>\n                                            <th md-column md-order-by="note">{{ \'SMS.NOTES\' | translate }}</th>\n                                            <th md-column md-order-by="tag">{{ \'SMS.TAGS\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="interaction" md-select-id="id" ng-repeat="interaction in vm_dc.smsAccountInteractions.rows">\n                                            <td md-cell>{{interaction.id}}</td>\n                                            <td md-cell>{{interaction.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.Contact.firstName}}</td>\n                                            <td md-cell>{{interaction.Owner.name}}</td>\n                                            <td md-cell>{{interaction.closedAt | date:\'medium\'}}</td>\n                                            <td md-cell>{{interaction.disposition}}</td>\n                                            <td md-cell>{{interaction.note}}</td>\n                                            <td md-cell>\n                                                <div ng-if="interaction.Tags.length">\n                                                    <md-tooltip md-direction="left" layout="row">\n                                                        <span ng-repeat="tag in interaction.Tags">{{tag.name}}<span ng-if="!$last">, </span></span>\n                                                    </md-tooltip>\n                                                    <md-icon md-font-icon="icon-tag"></md-icon>\n                                                </div>\n                                            </td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SMS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button ng-click="vm_dc.spysmsInteraction($event, interaction)" translate="SMS.SPYINTERACTION">\n                                                                Spy Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.smsInteractionDownload(interaction, $event)" translate="SMS.DOWNLOAD_INTERACTION">\n                                                                Download Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(interaction, $event)" translate="SMS.DELETE_INTERACTION">\n                                                                Delete Interaction\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.smsAccountInteractions.rows.length">\n                                            <td md-cell colspan="13">\n                                                <span class="text-boxed-ligth" translate="SMS.NO_INTERACTION_AVAILABLE">No interaction available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'SMS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SMS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SMS.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.smsAccountInteractions.count}}" md-on-paginate="vm_dc.getSmsAccountInteractions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/sms/views/smsAccounts/smsAccounts.html",'<div id="smsAccounts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-message-text" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SMS.SMSACCOUNTS">SmsAccounts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="SMS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedSmsAccounts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedSmsAccounts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="SMS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-smsAccounts-count">\n                    <span>{{vm.selectedSmsAccounts.length}}</span>\n                    <span translate="SMS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SMSACCOUNTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllSmsAccounts()" translate="SMS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectSmsAccounts()" translate="SMS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedSmsAccounts" csv-label="true" filename="smsAccounts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedSmsAccounts($event)" aria-label="delete selected" translate translate-attr-label="SMSACCOUNTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SMSACCOUNT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedSmsAccounts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSmsAccounts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'SMS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'SMS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="key">{{ \'SMS.KEY\' | translate }}</th>\n                                <th md-column md-order-by="ListId">{{ \'SMS.LIST\' | translate }}</th>\n                                <th md-column md-order-by="type">{{ \'SMS.TYPE\' | translate }}</th>\n                                <th md-column md-order-by="phone">{{ \'SMS.PHONE\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'SMS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.smsAccounts.rows.length">\n                                <td md-cell colspan="8">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="SMS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="smsAccount" md-select-id="id" ng-repeat="smsAccount in vm.smsAccounts.rows">\n                                <td md-cell ng-if="smsAccount.userpic"><img class="avatar" alt="{{smsAccount.name}}" ng-src="api/users/{{smsAccount.id}}/avatar" /></td>\n                                <td md-cell ng-if="!smsAccount.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{smsAccount.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="id ">{{smsAccount.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="name ">{{smsAccount.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="key ">{{smsAccount.key}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="ListId ">{{ (vm.lists | filter : {\'id\':smsAccount.ListId} : true)[0].name }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="type ">{{ vm.arraytype[smsAccount.type].option }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="phone ">{{smsAccount.phone}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsAccount, ev) : vm.createOrEditSmsAccount($event, smsAccount)" md-cell class="description ">{{smsAccount.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SMS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(smsAccount, $event    )" translate="SMS.EDIT_SMSACCOUNT">\n                                                    Edit SmsAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.interactionsgoto(smsAccount, $event    )" translate="SMS.INTERACTIONS_SMSACCOUNT">\n                                                    Interactions SmsAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(smsAccount, $event    )" translate="SMS.AGENTADD_SMSACCOUNT">\n                                                    AgentAdd SmsAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(smsAccount, $event    )" translate="SMS.DELETE_SMSACCOUNT">\n                                                    Delete SmsAccount\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'SMS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SMS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SMS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.smsAccounts.count}}" md-on-paginate="vm.getSmsAccounts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SMSACCOUNT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD SMSACCOUNT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-smsAccount-button" ng-click="vm.createOrEditSmsAccount($event)" aria-label="add smsAccount" translate translate-attr-aria-label="SMS.ADD_SMSACCOUNT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD SMSACCOUNT BUTTON --\x3e\n</div>'),e.put("app/main/apps/sms/views/smsQueues/create/dialog.html",'<md-dialog class="smsQueue-dialog" aria-label="New SmsQueue">\n    <form name="smsQueueForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="SMS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.smsQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newSmsQueue">\n\n                <div class="hint"><span translate="SMS.HELP.NAME"></span></div>\n                <div ng-messages="smsQueueForm[\'name\'].$error" ng-show="smsQueueForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="SMS.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.STRATEGY">Strategy</label>\n                <md-select name="strategy" ng-model="vm.smsQueue.strategy" required>\n                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                </md-select>\n                <div ng-messages="smsQueueForm[\'strategy\'].$error" ng-show="smsQueueForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.AGENT_TIMEOUT">Agent_Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.smsQueue.timeout" min="1" max="2147483" ng-required="true">\n\n                <div ng-messages="smsQueueForm[\'timeout\'].$error" ng-show="smsQueueForm[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="SMS.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="SMS.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="SMS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.smsQueue.description">\n\n                <div ng-messages="smsQueueForm[\'description\'].$error" ng-show="smsQueueForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="SMS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSmsQueue" ng-click="vm.saveSmsQueue()" class="send-button md-accent md-raised" ng-disabled="smsQueueForm.$invalid || smsQueueForm.$pristine" aria-label="SAVE" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSmsQueue" ng-click="vm.addNewSmsQueue()" class="send-button md-accent md-raised" ng-disabled="smsQueueForm.$invalid" aria-label="ADD" translate="SMS.ADD_SMSQUEUE" translate-attr-aria-label="SMS.ADD_SMSQUEUE">\n                    ADD SMSQUEUE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSmsQueue" ng-click="vm.deleteSmsQueue($event)" aria-label="DELETE" translate translate-attr-aria-label="SMS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="SMS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsQueues/edit/agentadd/agentadd.html",'<md-dialog class="smsQueue-dialog" aria-label="smsQueue" ng-init="vm.onInit()">\n    <form name="smsQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="SMS.AGENTADD_SMSQUEUE">Add Agent to smsQueue</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsQueues/edit/teamadd/teamadd.html",'<md-dialog class="smsQueue-dialog" aria-label="smsQueue" ng-init="vm.onInit()">\n    <form name="smsQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="SMS.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/sms/views/smsQueues/edit/view.html",'<div id="sms-smsQueue" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-smsQueues-button md-icon-button" aria-label="Go to smsQueues" ng-click="vm.gotoSmsQueues()" translate translate-attr-aria-label="SMS.GO_TO_SMSQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="smsQueue-image" hide-xs>\n                    <img ng-src="assets/images/business/smsQueues.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.smsQueue.id}}\n                        <span ng-if="vm.smsQueue.name">{{vm.smsQueue.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="SMS.CREATED_AT"></span> <span>{{vm.smsQueue.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.smsQueue, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="SMS.TEAMADD_SMSQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.smsQueue, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="SMS.AGENTADD_SMSQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveSmsQueue()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid)" translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="SMS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="smsQueue-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="SMS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.smsQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="SMS.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="SMS.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.smsQueue.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'beepall\'">Beepall</md-option>\n                                    <md-option ng-value="\'rrmemory\'">RR Memory</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'strategy\'].$error" ng-show="generalForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.AGENT_TIMEOUT">Agent_Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.smsQueue.timeout" min="1" max="2147483" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.AGENT_TIMEOUT_REQUIRED">Agent_Timeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="SMS.ERRORS.AGENT_TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>1</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="SMS.ERRORS.AGENT_TIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO">Agent_Timeout must be a valid greater or equal than</span> <span>2147483</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="SMS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.smsQueue.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="SMS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/sms/views/smsQueues/smsQueues.html",'<div id="smsQueues" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-message-text" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="SMS.SMSQUEUES">SmsQueues</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="SMS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedSmsQueues.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedSmsQueues =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="SMS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-smsQueues-count">\n                    <span>{{vm.selectedSmsQueues.length}}</span>\n                    <span translate="SMS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SMSQUEUES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllSmsQueues()" translate="SMS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectSmsQueues()" translate="SMS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedSmsQueues" csv-label="true" filename="smsQueues.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedSmsQueues($event)" aria-label="delete selected" translate translate-attr-label="SMSQUEUES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SMSQUEUE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedSmsQueues" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSmsQueues">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'SMS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'SMS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'SMS.STRATEGY\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.smsQueues.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="SMS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="smsQueue" md-select-id="id" ng-repeat="smsQueue in vm.smsQueues.rows">\n                                <td md-cell ng-if="smsQueue.userpic"><img class="avatar" alt="{{smsQueue.name}}" ng-src="api/users/{{smsQueue.id}}/avatar" /></td>\n                                <td md-cell ng-if="!smsQueue.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{smsQueue.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsQueue, ev) : vm.createOrEditSmsQueue($event, smsQueue)" md-cell class="id ">{{smsQueue.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsQueue, ev) : vm.createOrEditSmsQueue($event, smsQueue)" md-cell class="name ">{{smsQueue.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(smsQueue, ev) : vm.createOrEditSmsQueue($event, smsQueue)" md-cell class="strategy ">{{ vm.arraystrategy[smsQueue.strategy].option }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SMS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(smsQueue, $event    )" translate="SMS.EDIT_SMSQUEUE">\n                                                    Edit SmsQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(smsQueue, $event    )" translate="SMS.TEAMADD_SMSQUEUE">\n                                                    teamadd SmsQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(smsQueue, $event    )" translate="SMS.AGENTADD_SMSQUEUE">\n                                                    agentadd SmsQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(smsQueue, $event    )" translate="SMS.DELETE_SMSQUEUE">\n                                                    Delete SmsQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(smsQueue, $event    )" translate="SMS.GOTOREALTIME_SMSQUEUE">\n                                                    goToRealtime SmsQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'SMS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'SMS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'SMS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.smsQueues.count}}" md-on-paginate="vm.getSmsQueues" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SMSQUEUE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD SMSQUEUE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-smsQueue-button" ng-click="vm.createOrEditSmsQueue($event)" aria-label="add smsQueue" translate translate-attr-aria-label="SMS.ADD_SMSQUEUE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD SMSQUEUE BUTTON --\x3e\n</div>'),e.put("app/main/apps/staff/views/agents/agents.html",'<div id="agents" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-multiple" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="STAFF.AGENTS">Agents</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="STAFF.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedAgents.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedAgents =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="STAFF.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-agents-count">\n                    <span>{{vm.selectedAgents.length}}</span>\n                    <span translate="STAFF.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="AGENTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllAgents()" translate="STAFF.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectAgents()" translate="STAFF.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedAgents" csv-label="true" filename="agents.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedAgents($event)" aria-label="delete selected" translate translate-attr-label="AGENTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- AGENT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedAgents" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getAgents">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="fullname">{{ \'STAFF.FULLNAME\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'STAFF.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="showWebBar">{{ \'STAFF.SHOWWEBCONTROL\' | translate }}</th>\n                                <th md-column md-order-by="email">{{ \'STAFF.EMAIL\' | translate }}</th>\n                                <th md-column md-order-by="phone">{{ \'STAFF.PHONE\' | translate }}</th>\n                                <th md-column md-order-by="mobile">{{ \'STAFF.MOBILE\' | translate }}</th>\n                                <th md-column md-order-by="internal">{{ \'STAFF.INTERNAL\' | translate }}</th>\n                                <th md-column md-order-by="disabled">{{ \'STAFF.DISABLED\' | translate }}</th>\n                                <th md-column md-order-by="blocked">{{ \'STAFF.BLOCKED\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.agents.rows.length">\n                                <td md-cell colspan="10">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="STAFF.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="agent" md-select-id="id" ng-repeat="agent in vm.agents.rows">\n                                <td md-cell ng-if="agent.userpic"><img class="avatar" alt="{{agent.name}}" ng-src="api/users/{{agent.id}}/avatar" /></td>\n                                <td md-cell ng-if="!agent.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{agent.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="fullname font-weight-600">{{agent.fullname}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="name ">{{agent.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="showWebBar ">{{ vm.arrayshowWebBar[agent.showWebBar].option }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="email ">{{agent.email}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="phone ">{{agent.phone}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="mobile ">{{agent.mobile}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="internal ">{{agent.internal}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="disabled ">\n                                    <md-icon md-colors="{color: {{agent.disabled ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{agent.disabled ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(agent, ev) : vm.createOrEditAgent($event, agent)" md-cell class="blocked ">\n                                    <md-icon md-colors="{color: {{agent.blocked ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{agent.blocked ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(agent, $event    )" translate="STAFF.EDIT_AGENT">\n                                                    Edit Agent\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(agent, $event    )" translate="STAFF.TEAMADD_AGENT">\n                                                    teamadd Agent\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(agent, $event    )" translate="STAFF.DELETE_AGENT">\n                                                    Delete Agent\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'STAFF.PAGE\' | translate}}:\', rowsPerPage: \'{{\'STAFF.ROWSPERPAGE\' | translate}}:\', of: \'{{\'STAFF.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.agents.count}}" md-on-paginate="vm.getAgents" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / AGENT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD AGENT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-agent-button" ng-click="vm.createOrEditAgent($event)" aria-label="add agent" translate translate-attr-aria-label="STAFF.ADD_AGENT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD AGENT BUTTON --\x3e\n</div>'),e.put("app/main/apps/staff/views/agents/create/dialog.html",'<md-dialog class="agent-dialog" aria-label="New Agent">\n    <form name="agentForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="STAFF.FULLNAME">Fullname</label>\n                <input type="text" name="fullname" ng-model="vm.agent.fullname" ng-required="true" autofocus>\n\n                <div ng-messages="agentForm[\'fullname\'].$error" ng-show="agentForm[\'fullname\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.FULLNAME_REQUIRED">Fullname field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.USERNAME">Username</label>\n                <input type="text" name="name" ng-model="vm.agent.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" ng-disabled="!vm.newAgent">\n\n                <div class="hint"><span translate="STAFF.HELP.USERNAME"></span></div>\n                <div ng-messages="agentForm[\'name\'].$error" ng-show="agentForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.USERNAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Username must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.ALIAS">Alias</label>\n                <input type="text" name="alias" ng-model="vm.agent.alias">\n\n                <div ng-messages="agentForm[\'alias\'].$error" ng-show="agentForm[\'alias\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.ALIAS_REQUIRED">Alias field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.SHOWWEBCONTROL">ShowWebControl</label>\n                <md-select name="showWebBar" ng-model="vm.agent.showWebBar">\n                    <md-option ng-value="0">Phonebar</md-option>\n                    <md-option ng-value="1">External</md-option>\n                    <md-option ng-value="2">WebRTC</md-option>\n                </md-select>\n                <div ng-messages="agentForm[\'showWebBar\'].$error" ng-show="agentForm[\'showWebBar\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.SHOWWEBCONTROL_REQUIRED">ShowWebControl field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.agent.email" ng-required="true">\n\n                <div ng-messages="agentForm[\'email\'].$error" ng-show="agentForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="STAFF.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.newAgent">\n                <label translate="STAFF.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.agent.password" placeholder="Password" ng-pattern="vm.passwordPattern" translate translate-attr-placeholder="STAFF.PASSWORD" required>\n                <div ng-messages="agentForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.newAgent  && (vm.newAgent)">\n                <label translate="STAFF.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword" required>\n                <div ng-messages="agentForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="STAFF.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container ng-if="vm.newAgent" class="md-block">\n                <md-switch ng-model="vm.agent.autointernal" aria-label="AutoInternal"><span translate="STAFF.AUTOINTERNAL">AutoInternal</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="!vm.agent.autointernal" class="md-block">\n                <label translate="STAFF.INTERNAL">Internal</label>\n                <input type="text" name="internal" ng-model="vm.agent.internal" ng-required="true" ng-disabled="!vm.newAgent">\n\n                <div ng-messages="agentForm[\'internal\'].$error" ng-show="agentForm[\'internal\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.INTERNAL_REQUIRED">Internal field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.agent.description">\n\n                <div ng-messages="agentForm[\'description\'].$error" ng-show="agentForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.newAgent" class="md-block">\n                <md-switch ng-model="vm.agent.voicemail" aria-label="Voicemail"><span translate="STAFF.VOICEMAIL">Voicemail</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.agent.showWebBar == 0" class="md-block">\n                <md-switch ng-model="vm.agent.phoneBarRemoteControl" aria-label="RemoteControl"><span translate="STAFF.REMOTECONTROL">RemoteControl</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.agent.phoneBarRemoteControl && vm.agent.showWebBar == 0" class="md-block">\n                <label translate="STAFF.REMOTECONTROLPORT">RemoteControlPort</label>\n                <input type="number" name="phoneBarRemoteControlPort" ng-model="vm.agent.phoneBarRemoteControlPort" ng-required="true">\n\n                <div ng-messages="agentForm[\'phoneBarRemoteControlPort\'].$error" ng-show="agentForm[\'phoneBarRemoteControlPort\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.REMOTECONTROLPORT_REQUIRED">RemoteControlPort field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.newUser" class="md-block">\n                <md-switch ng-model="vm.agent.voicemail" aria-label="Voicemail"><span translate="STAFF.VOICEMAIL">Voicemail</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newAgent" ng-click="vm.saveAgent()" class="send-button md-accent md-raised" ng-disabled="agentForm.$invalid || agentForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newAgent" ng-click="vm.addNewAgent()" class="send-button md-accent md-raised" ng-disabled="agentForm.$invalid" aria-label="ADD" translate="STAFF.ADD_AGENT" translate-attr-aria-label="STAFF.ADD_AGENT">\n                    ADD AGENT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newAgent" ng-click="vm.deleteAgent($event)" aria-label="DELETE" translate translate-attr-aria-label="STAFF.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="STAFF.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/agents/edit/changepassword/changepassword.html",'<md-dialog class="agent-dialog" aria-label="{{vm.name}}">\n    <form name="agentForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ \'\n                    STAFF.CHANGE_PASSWORD\' | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block" ng-if="vm.currentUser.id == vm.agent.id">\n                <label translate="STAFF.OLD_PASSWORD">Old Password</label>\n                <input type="password" name="oldPassword" ng-model="vm.oldPassword" placeholder="Password" translate translate-attr-placeholder="STAFF.OLD_PASSWORD" required>\n                <div ng-messages="agentForm.oldPassword.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.NEW_PASSWORD">New Password</label>\n                <input type="password" name="password" ng-model="vm.password" placeholder="Password" translate ng-pattern="vm.passwordPattern" translate-attr-placeholder="STAFF.NEW_PASSWORD" required>\n                <div ng-messages="agentForm.password.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is\n                            required</span>\n                    </div>\n\n\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.SECURE_PASSWORD_PATTERN">Must contain\n                            at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric\n                            character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                    <div ng-message="oldPasswordMatch">\n                        <span translate="STAFF.ERRORS.PASSWORD_OLDPASSWORD_MATCH">New password must be different from old one</span>\n                    </div>\n\n\n\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword">\n                <div ng-messages="agentForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CONFIRM_REQUIRED">Confirm field is\n                            required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="STAFF.ERRORS.CONFIRM_NOT_MATCH">Your password did\n                            not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.savePassword()" class="send-button md-accent md-raised" ng-disabled="agentForm.$invalid || agentForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/agents/edit/queueadd/queueadd.html",'<md-dialog class="agent-dialog" aria-label="agent" ng-init="vm.onInit()">\n    <form name="agentForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2>{{vm.title}}</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <md-input-container flex class="no-margin" ng-if="vm.agent.role === \'agent\' && vm.channel === \'voice\'">\n                <label translate="STAFF.PENALTY">Penalty</label>\n                <input name="penalty" ng-model="vm.penalty" placeholder="0" required md-minlength="0" md-maxlength="3">\n                <div ng-messages="agentForm.penalty.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span>You must supply a penalty.</span>\n                    </div>\n                    <div ng-message="md-minlength">\n                        <span>Min Penalty 0 characters.</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span>Max Penalty 3 characters.</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveQueues()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/agents/edit/teamadd/teamadd.html",'<md-dialog class="agent-dialog" aria-label="agent" ng-init="vm.onInit()">\n    <form name="agentForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="STAFF.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/agents/edit/view.html",'<div id="staff-agent" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-agents-button md-icon-button" aria-label="Go to agents" ng-click="vm.gotoAgents()" translate translate-attr-aria-label="STAFF.GO_TO_AGENTS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="agent-image" hide-xs>\n                    <img ng-src="assets/images/business/agents.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.agent.id}}\n                        <span ng-if="vm.agent.name">{{vm.agent.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="STAFF.CREATED_AT"></span> <span>{{vm.agent.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div ng-cloak>\n            <md-fab-speed-dial md-direction="left" class="md-scale md-fab">\n                <md-fab-trigger>\n                    <md-button aria-label="menu" class="md-fab md-primary md-icon-button">\n                        <md-tooltip md-direction="top" md-visible="false"><span translate="STAFF.CHANNELS">Channels</span></md-tooltip>\n                        <md-icon md-font-icon="icon-stackoverflow" aria-label="queueadd"></md-icon>\n                    </md-button>\n                </md-fab-trigger>\n                <md-fab-actions>\n                    <md-button aria-label="voice" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'voice\', $event, \'inbound\')">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="VOICE.VOICE">Voice</span></md-tooltip>\n                        <md-icon md-font-icon="icon-phone" aria-label="voice"></md-icon>\n                    </md-button>\n                    <md-button ng-if="vm.license.dialer" aria-label="motion bull" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'voice\', $event, \'outbound\')">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="MOTIONDIALER.MOTIONDIALER">Motion Bull</span></md-tooltip>\n                        <md-icon md-font-icon="icon-fire" aria-label="motion bull"></md-icon>\n                    </md-button>\n                    <md-button ng-if="vm.license.chat" aria-label="chat" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'chat\', $event)">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="CHAT.CHAT">Chat</span></md-tooltip>\n                        <md-icon md-font-icon="icon-hangouts" aria-label="chat"></md-icon>\n                    </md-button>\n                    <md-button ng-if="vm.license.mail" aria-label="mail" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'mail\', $event)">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="MAIL.MAIL">Email</span></md-tooltip>\n                        <md-icon md-font-icon="icon-email" aria-label="mail"></md-icon>\n                    </md-button>\n                    <md-button ng-if="vm.license.messaging" aria-label="sms" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'sms\', $event)">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="SMS.SMS">Sms</span></md-tooltip>\n                        <md-icon md-font-icon="icon-message-text" aria-label="sms"></md-icon>\n                    </md-button>\n                    <md-button ng-if="vm.license.openchannel" aria-label="openchannel" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'openchannel\', $event)">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="OPENCHANNEL.OPENCHANNEL">Openchannel</span></md-tooltip>\n                        <md-icon md-font-icon="icon-google-earth" aria-label="openchannel"></md-icon>\n                    </md-button>\n                    <md-button ng-if="vm.license.fax" aria-label="fax" class="md-fab md-raised md-icon-button md-mini" ng-click="vm.queueaddchannel(vm.agent, \'fax\', $event)">\n                        <md-tooltip md-direction="bottom" md-visible="false"><span translate="FAX.FAX">Fax</span></md-tooltip>\n                        <md-icon md-font-icon="icon-deskphone" aria-label="fax"></md-icon>\n                    </md-button>\n                </md-fab-actions>\n            </md-fab-speed-dial>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.agent, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="STAFF.TEAMADD_AGENT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.changepassworddialog(vm.agent, $event)" class="md-fab md-warn md-icon-button" aria-label="changepassword">\n                <md-tooltip><span translate="STAFF.CHANGEPASSWORD_AGENT"></span></md-tooltip>\n                <md-icon md-font-icon="icon-key-variant"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveAgent()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(personal_infoForm.$invalid) || (security_suiteForm.$invalid) || (change_avatarForm.$invalid) || (generalForm.$invalid) || (capacityForm.$invalid) || (settingsForm.$invalid) || (remote_controlForm.$invalid) || (sipForm.$invalid) || (callforwardingForm.$invalid) || (settings_webrtcForm.$invalid) || (sip_webrtcForm.$invalid) || (general_permissionsForm.$invalid) || (permissionsForm.$invalid)" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="agent-detail-form-container personal_info md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.PERSONAL_INFO">PERSONAL_INFO</div>\n                        </div>\n                        <form name="personal_infoForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.FULLNAME">Fullname</label>\n                                <input type="text" name="fullname" ng-model="vm.agent.fullname" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'fullname\'].$error" ng-show="personal_infoForm[\'fullname\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.FULLNAME_REQUIRED">Fullname field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.USERNAME">Username</label>\n                                <input type="text" name="name" ng-model="vm.agent.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" disabled>\n\n                                <div class="hint"><span translate="STAFF.HELP.USERNAME"></span></div>\n                                <div ng-messages="personal_infoForm[\'name\'].$error" ng-show="personal_infoForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="STAFF.ERRORS.USERNAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Username must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ALIAS">Alias</label>\n                                <input type="text" name="alias" ng-model="vm.agent.alias" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'alias\'].$error" ng-show="personal_infoForm[\'alias\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ALIAS_REQUIRED">Alias field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.SHOWWEBCONTROL">ShowWebControl</label>\n                                <md-select name="showWebBar" ng-model="vm.agent.showWebBar" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="0">Phonebar</md-option>\n                                    <md-option ng-value="1">External</md-option>\n                                    <md-option ng-value="2">WebRTC</md-option>\n                                </md-select>\n                                <div ng-messages="personal_infoForm[\'showWebBar\'].$error" ng-show="personal_infoForm[\'showWebBar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.SHOWWEBCONTROL_REQUIRED">ShowWebControl field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.EMAIL">Email</label>\n                                <input type="email" name="email" ng-model="vm.agent.email" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'email\'].$error" ng-show="personal_infoForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="STAFF.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.PHONE">Phone</label>\n                                <input type="text" name="phone" ng-model="vm.agent.phone" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'phone\'].$error" ng-show="personal_infoForm[\'phone\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.MOBILE">Mobile</label>\n                                <input type="text" name="mobile" ng-model="vm.agent.mobile" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'mobile\'].$error" ng-show="personal_infoForm[\'mobile\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.MOBILE_REQUIRED">Mobile field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.showWebBar == 1" class="md-block">\n                                <md-switch ng-model="vm.agent.hotdesk" aria-label="Hotdesk" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.HOTDESK">Hotdesk</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.loginInPause" aria-label="LoginInPause" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.LOGININPAUSE">LoginInPause</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.agent.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'description\'].$error" ng-show="personal_infoForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container security_suite md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.SECURITY_SUITE">SECURITY_SUITE</div>\n                        </div>\n                        <form name="security_suiteForm" novalidate>\n                            <md-input-container ng-if="vm.agent.passwordResetAt != null" class="md-block">\n                                <label translate="STAFF.LAST_PASSWORD_RESET_AT">Last_Password_Reset_At</label>\n                                <input type="text" name="passwordResetAt" ng-model="vm.agent.passwordResetAt" autofocus disabled>\n\n                                <div class="hint"><span translate="STAFF.HELP.LAST_PASSWORD_RESET_AT"></span></div>\n                                <div ng-messages="security_suiteForm[\'passwordResetAt\'].$error" ng-show="security_suiteForm[\'passwordResetAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.LAST_PASSWORD_RESET_AT_REQUIRED">Last_Password_Reset_At field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.passwordResetAt == null" class="md-block">\n                                <label translate="STAFF.NO_PASSWORD_CHANGE">No_Password_Change</label>\n                                <input type="text" name="passwordResetAt" ng-model="vm.agent.passwordResetAt" disabled>\n\n                                <div ng-messages="security_suiteForm[\'passwordResetAt\'].$error" ng-show="security_suiteForm[\'passwordResetAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.NO_PASSWORD_CHANGE_REQUIRED">No_Password_Change field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.disabled" aria-label="Disabled" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.DISABLED">Disabled</span></md-switch>\n\n                                <div class="hint"><span translate="STAFF.HELP.DISABLED"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.disabled == 0" class="md-block">\n                                <md-switch ng-model="vm.agent.blocked" aria-label="Blocked" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.BLOCKED">Blocked</span></md-switch>\n\n                                <div class="hint"><span translate="STAFF.HELP.BLOCKED"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container change_avatar md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.CHANGE_AVATAR">CHANGE_AVATAR</div>\n                        </div>\n                        <div ng-controller="Agentchange_avatarController as vm_ca" ng-init="vm_ca.init(vm.agent, vm.crudPermissions)" class="agent-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                            <div id="agent-image-uploader" flow-init="vm_ca.ngFlowOptions" flow-name="vm_ca.ngFlow.flow" flow-files-submitted="vm_ca.upload()" flow-file-added="vm_ca.fileAdded($file)" flow-file-success="vm_ca.fileSuccess($file, $message)" flow-complete="vm_ca.uploadComplete()" flow-drop flow-drag-enter="vm_ca.dropping=true" flow-drag-leave="vm_ca.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                                <div class="drop-text hint-text" layout="row" layout-align="center center">\n                                    <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                                </div>\n\n                                <div class="upload-button" layout="column" layout-align="center center">\n                                    <md-button class="md-accent md-raised" flow-btn ng-disabled="!vm_ca.crudPermissions.canEdit">\n                                        Upload\n                                    </md-button>\n                                    <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                                </div>\n\n                                <div layout="row" layout-align="start start" layout-wrap>\n                                    <div ng-repeat="change_avatarimage in vm_ca.agent.images" ng-switch="change_avatarimage.type">\n                                        <div class="agent-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                            <div class="overlay" layout="column" layout-align="center center">\n                                                <md-progress-linear md-mode="determinate" value="{{change_avatarimage.file.progress() * 100}}">\n                                                </md-progress-linear>\n                                            </div>\n                                            <img class="media" flow-img="change_avatarimage.file">\n                                        </div>\n\n                                        <div class="agent-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                            <img class="media" ng-src="{{change_avatarimage.url}}">\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.VOICE">VOICE</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="agent-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container ng-if="!vm.agent.autointernal" class="md-block">\n                                <label translate="STAFF.INTERNAL">Internal</label>\n                                <input type="text" name="internal" ng-model="vm.agent.internal" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'internal\'].$error" ng-show="generalForm[\'internal\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.INTERNAL_REQUIRED">Internal field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.showWebBar != 2" class="md-block">\n                                <label translate="STAFF.TRANSPORT">Transport</label>\n                                <md-select name="transport" ng-model="vm.agent.transport" multiple ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'udp\'">udp</md-option>\n                                    <md-option ng-value="\'tcp\'">tcp</md-option>\n                                    <md-option ng-value="\'ws\'" ng-if="vm.agent.showWebBar == 1">ws</md-option>\n                                    <md-option ng-value="\'wss\'" ng-if="vm.agent.showWebBar == 1">wss</md-option>\n                                    <md-option ng-value="\'tls\'" ng-if="vm.agent.showWebBar == 1">tls</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.TRANSPORT"></span></div>\n                                <div ng-messages="generalForm[\'transport\'].$error" ng-show="generalForm[\'transport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.TRANSPORT_REQUIRED">Transport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.HOST">Host</label>\n                                <input type="text" name="host" ng-model="vm.agent.host" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.HOST"></span></div>\n                                <div ng-messages="generalForm[\'host\'].$error" ng-show="generalForm[\'host\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.HOST_REQUIRED">Host field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.NAT">NAT</label>\n                                <md-select name="nat" ng-model="vm.agent.nat" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'force_rport\'">force_rport</md-option>\n                                    <md-option ng-value="\'comedia\'">comedia</md-option>\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'never\'">never</md-option>\n                                    <md-option ng-value="\'route\'">route</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.NAT"></span></div>\n                                <div ng-messages="generalForm[\'nat\'].$error" ng-show="generalForm[\'nat\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.NAT_REQUIRED">NAT field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.TYPE">Type</label>\n                                <md-select name="type" ng-model="vm.agent.type" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'friend\'">Friend</md-option>\n                                    <md-option ng-value="\'user\'">User</md-option>\n                                    <md-option ng-value="\'peer\'">Peer</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.TYPE"></span></div>\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ALLOWCODECS">AllowCodecs</label>\n                                <md-select name="allow" ng-model="vm.agent.allow" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'ulaw\'">ulaw</md-option>\n                                    <md-option ng-value="\'alaw\'">alaw</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                    <md-option ng-value="\'g722\'">g722</md-option>\n                                    <md-option ng-value="\'g729\'">g729</md-option>\n                                    <md-option ng-value="\'opus\'">opus</md-option>\n                                    <md-option ng-value="\'h264\'">h264</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.ALLOWCODECS"></span></div>\n                                <div ng-messages="generalForm[\'allow\'].$error" ng-show="generalForm[\'allow\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ALLOWCODECS_REQUIRED">AllowCodecs field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CALLERID">CallerId</label>\n                                <input type="text" name="callerid" ng-model="vm.agent.callerid" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'callerid\'].$error" ng-show="generalForm[\'callerid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CALLERID_REQUIRED">CallerId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CONTEXT">Context</label>\n                                <md-select name="context" ng-model="vm.agent.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CALLGROUP">Callgroup</label>\n                                <input type="text" name="callgroup" ng-model="vm.agent.callgroup" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.CALLGROUP"></span></div>\n                                <div ng-messages="generalForm[\'callgroup\'].$error" ng-show="generalForm[\'callgroup\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CALLGROUP_REQUIRED">Callgroup field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.PICKUPGROUP">Pickupgroup</label>\n                                <input type="text" name="pickupgroup" ng-model="vm.agent.pickupgroup" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.PICKUPGROUP"></span></div>\n                                <div ng-messages="generalForm[\'pickupgroup\'].$error" ng-show="generalForm[\'pickupgroup\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.PICKUPGROUP_REQUIRED">Pickupgroup field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.chanspy" aria-label="chanSpy" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.CHANSPY">chanSpy</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.VIDEOSUPPORT">Videosupport</label>\n                                <md-select name="videosupport" ng-model="vm.agent.videosupport" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">Yes</md-option>\n                                    <md-option ng-value="\'no\'">No</md-option>\n                                    <md-option ng-value="\'always\'">Always</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'videosupport\'].$error" ng-show="generalForm[\'videosupport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.VIDEOSUPPORT_REQUIRED">Videosupport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.MONITOREXTENSION">MonitorExtension</label>\n                                <md-select name="extensionMonitor" ng-model="vm.agent.extensionMonitor" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'\'">Inactive</md-option>\n                                    <md-option ng-value="\'wav\'">wav</md-option>\n                                    <md-option ng-value="\'WAV\'">wav49</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'extensionMonitor\'].$error" ng-show="generalForm[\'extensionMonitor\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.MONITOREXTENSION_REQUIRED">MonitorExtension field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.OTHER_CHANNELS">OTHER_CHANNELS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="agent-detail-form-container capacity md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.CAPACITY">CAPACITY</div>\n                        </div>\n                        <form name="capacityForm" novalidate>\n                            <md-input-container ng-if="vm.license.chat" class="md-block">\n                                <label translate="STAFF.CHATCAPACITY">ChatCapacity</label>\n                                <input type="number" name="chatCapacity" ng-model="vm.agent.chatCapacity" min="0" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.CHATCAPACITY"></span></div>\n                                <div ng-messages="capacityForm[\'chatCapacity\'].$error" ng-show="capacityForm[\'chatCapacity\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CHATCAPACITY_REQUIRED">ChatCapacity field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.CHATCAPACITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">ChatCapacity must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.license.mail" class="md-block">\n                                <label translate="STAFF.MAILCAPACITY">MailCapacity</label>\n                                <input type="number" name="mailCapacity" ng-model="vm.agent.mailCapacity" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.MAILCAPACITY"></span></div>\n                                <div ng-messages="capacityForm[\'mailCapacity\'].$error" ng-show="capacityForm[\'mailCapacity\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.MAILCAPACITY_REQUIRED">MailCapacity field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.MAILCAPACITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MailCapacity must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.license.fax" class="md-block">\n                                <label translate="STAFF.FAXCAPACITY">FaxCapacity</label>\n                                <input type="number" name="faxCapacity" ng-model="vm.agent.faxCapacity" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.FAXCAPACITY"></span></div>\n                                <div ng-messages="capacityForm[\'faxCapacity\'].$error" ng-show="capacityForm[\'faxCapacity\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.FAXCAPACITY_REQUIRED">FaxCapacity field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.FAXCAPACITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">FaxCapacity must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.license.messaging" class="md-block">\n                                <label translate="STAFF.SMSCAPACITY">SMSCapacity</label>\n                                <input type="number" name="smsCapacity" ng-model="vm.agent.smsCapacity" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.SMSCAPACITY"></span></div>\n                                <div ng-messages="capacityForm[\'smsCapacity\'].$error" ng-show="capacityForm[\'smsCapacity\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.SMSCAPACITY_REQUIRED">SMSCapacity field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.SMSCAPACITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">SMSCapacity must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.license.openchannel" class="md-block">\n                                <label translate="STAFF.OPENCHANNELCAPACITY">OpenchannelCapacity</label>\n                                <input type="number" name="openchannelCapacity" ng-model="vm.agent.openchannelCapacity" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.OPENCHANNELCAPACITY"></span></div>\n                                <div ng-messages="capacityForm[\'openchannelCapacity\'].$error" ng-show="capacityForm[\'openchannelCapacity\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.OPENCHANNELCAPACITY_REQUIRED">OpenchannelCapacity field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.OPENCHANNELCAPACITY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">OpenchannelCapacity must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab ng-if="vm.agent.showWebBar == 0">\n                <md-tab-label>\n                    <span translate="STAFF.MOTIONBAR">MOTIONBAR</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="agent-detail-form-container settings md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.SETTINGS">SETTINGS</div>\n                        </div>\n                        <form name="settingsForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableSettings" aria-label="EnableSettings" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLESETTINGS">EnableSettings</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarAutoAnswer" aria-label="AutoAnswer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.AUTOANSWER">AutoAnswer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.phoneBarAutoAnswer" class="md-block">\n                                <label translate="STAFF.AUTOANSWERDELAY">AutoAnswerDelay</label>\n                                <input type="number" name="phoneBarAutoAnswerDelay" ng-model="vm.agent.phoneBarAutoAnswerDelay" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="settingsForm[\'phoneBarAutoAnswerDelay\'].$error" ng-show="settingsForm[\'phoneBarAutoAnswerDelay\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.AUTOANSWERDELAY_REQUIRED">AutoAnswerDelay field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.AUTOANSWERDELAY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AutoAnswerDelay must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarRingInUse" aria-label="RingInUse" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.RINGINUSE">RingInUse</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableRecording" aria-label="EnableRecording" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLERECORDING">EnableRecording</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableDtmfTone" aria-label="EnableDtmfTone" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLEDTMFTONE">EnableDtmfTone</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarDnd" aria-label="Dnd" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.DND">Dnd</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarUnansweredCallBadge" aria-label="UnansweredCallBadge" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.UNANSWEREDCALLBADGE">UnansweredCallBadge</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.showWebBar == 0" class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableJaws" aria-label="EnableJawsIntegration" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLEJAWSINTEGRATION">EnableJawsIntegration</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.showWebBar == 0 && vm.license.screenrecording" class="md-block">\n                                <md-switch ng-change="vm.onEnableScreenRecordingByAgentSelection()" ng-model="vm.agent.phoneBarEnableScreenRecordingByAgent" aria-label="EnableScreenRecordingByAgent" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLESCREENRECORDINGBYAGENT">EnableScreenRecordingByAgent</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.showWebBar == 0 && vm.license.screenrecording" class="md-block">\n                                <md-switch ng-change="vm.onEnableAutomaticScreenRecordingSelection()" ng-model="vm.agent.phoneBarEnableAutomaticScreenRecording" aria-label="EnableAutomaticScreenRecording" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLEAUTOMATICSCREENRECORDING">EnableAutomaticScreenRecording</span></md-switch>\n\n                                <div class="hint"><span translate="STAFF.HELP.ENABLEAUTOMATICSCREENRECORDING"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container remote_control md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.REMOTE_CONTROL">REMOTE_CONTROL</div>\n                        </div>\n                        <form name="remote_controlForm" novalidate>\n                            <md-input-container ng-if="vm.agent.showWebBar == 0" class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarRemoteControl" aria-label="RemoteControl" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.REMOTECONTROL">RemoteControl</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.phoneBarRemoteControl && vm.agent.showWebBar == 0" class="md-block">\n                                <label translate="STAFF.REMOTECONTROLPORT">RemoteControlPort</label>\n                                <input type="number" name="phoneBarRemoteControlPort" ng-model="vm.agent.phoneBarRemoteControlPort" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="remote_controlForm[\'phoneBarRemoteControlPort\'].$error" ng-show="remote_controlForm[\'phoneBarRemoteControlPort\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.REMOTECONTROLPORT_REQUIRED">RemoteControlPort field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container sip md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.SIP">SIP</div>\n                        </div>\n                        <form name="sipForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.SIPEXPIRES">SipExpires</label>\n                                <input type="number" name="phoneBarExpires" ng-model="vm.agent.phoneBarExpires" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.SIPEXPIRES"></span></div>\n                                <div ng-messages="sipForm[\'phoneBarExpires\'].$error" ng-show="sipForm[\'phoneBarExpires\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.SIPEXPIRES_REQUIRED">SipExpires field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.SIPPORT">SipPort</label>\n                                <input type="number" name="phoneBarListenPort" ng-model="vm.agent.phoneBarListenPort" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.SIPPORT"></span></div>\n                                <div ng-messages="sipForm[\'phoneBarListenPort\'].$error" ng-show="sipForm[\'phoneBarListenPort\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.SIPPORT_REQUIRED">SipPort field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container callforwarding md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.CALLFORWARDING">CALLFORWARDING</div>\n                        </div>\n                        <form name="callforwardingForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarUnconditional" aria-label="Unconditional" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.UNCONDITIONAL">Unconditional</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.phoneBarUnconditional" class="md-block">\n                                <label translate="STAFF.UNCONDITIONALNUMBER">UnconditionalNumber</label>\n                                <input type="text" name="phoneBarUnconditionalNumber" ng-model="vm.agent.phoneBarUnconditionalNumber" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="callforwardingForm[\'phoneBarUnconditionalNumber\'].$error" ng-show="callforwardingForm[\'phoneBarUnconditionalNumber\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.UNCONDITIONALNUMBER_REQUIRED">UnconditionalNumber field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab ng-if="vm.agent.showWebBar == 2">\n                <md-tab-label>\n                    <span translate="STAFF.WEBRTC">WEBRTC</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="agent-detail-form-container settings_webrtc md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.SETTINGS_WEBRTC">SETTINGS_WEBRTC</div>\n                        </div>\n                        <form name="settings_webrtcForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.DTLSCERTFILE">dtlscertfile</label>\n                                <input type="text" name="dtlscertfile" ng-model="vm.agent.dtlscertfile" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.DTLSCERTFILE"></span></div>\n                                <div ng-messages="settings_webrtcForm[\'dtlscertfile\'].$error" ng-show="settings_webrtcForm[\'dtlscertfile\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.DTLSCERTFILE_REQUIRED">dtlscertfile field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.DTLSPRIVATEKEY">dtlsprivatekey</label>\n                                <input type="text" name="dtlsprivatekey" ng-model="vm.agent.dtlsprivatekey" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.DTLSPRIVATEKEY"></span></div>\n                                <div ng-messages="settings_webrtcForm[\'dtlsprivatekey\'].$error" ng-show="settings_webrtcForm[\'dtlsprivatekey\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.DTLSPRIVATEKEY_REQUIRED">dtlsprivatekey field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableSettings" aria-label="EnableSettings" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLESETTINGS">EnableSettings</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarAutoAnswer" aria-label="AutoAnswer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.AUTOANSWER">AutoAnswer</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.phoneBarAutoAnswer" class="md-block">\n                                <label translate="STAFF.AUTOANSWERDELAY">AutoAnswerDelay</label>\n                                <input type="number" name="phoneBarAutoAnswerDelay" ng-model="vm.agent.phoneBarAutoAnswerDelay" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="settings_webrtcForm[\'phoneBarAutoAnswerDelay\'].$error" ng-show="settings_webrtcForm[\'phoneBarAutoAnswerDelay\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.AUTOANSWERDELAY_REQUIRED">AutoAnswerDelay field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="STAFF.ERRORS.AUTOANSWERDELAY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AutoAnswerDelay must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableRecording" aria-label="EnableRecording" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLERECORDING">EnableRecording</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableDtmfTone" aria-label="EnableDtmfTone" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLEDTMFTONE">EnableDtmfTone</span></md-switch>\n\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container sip_webrtc md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.SIP_WEBRTC">SIP_WEBRTC</div>\n                        </div>\n                        <form name="sip_webrtcForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.SIPEXPIRES">SipExpires</label>\n                                <input type="number" name="phoneBarExpires" ng-model="vm.agent.phoneBarExpires" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.SIPEXPIRES"></span></div>\n                                <div ng-messages="sip_webrtcForm[\'phoneBarExpires\'].$error" ng-show="sip_webrtcForm[\'phoneBarExpires\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.SIPEXPIRES_REQUIRED">SipExpires field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.PERMISSIONS">PERMISSIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="agent-detail-form-container general_permissions md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.GENERAL_PERMISSIONS">GENERAL_PERMISSIONS</div>\n                        </div>\n                        <form name="general_permissionsForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.allowmessenger" aria-label="EnableMessenger" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLEMESSENGER">EnableMessenger</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarPrefixRequired" aria-label="PrefixRequired" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.PREFIXREQUIRED">PrefixRequired</span></md-switch>\n\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="agent-detail-form-container permissions md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.PERMISSIONS">PERMISSIONS</div>\n                        </div>\n                        <div ng-controller="AgentPermissionsController as vm_pc" ng-init="vm_pc.init(vm.agent, vm.crudPermissions)" class="agent-detail-form-container">\n                            <md-list ng-repeat="father in vm_pc.navigation[0].children" ng-include="\'permission-nested.html\'" ng-if="vm_pc.agent.role !== \'admin\' && !father.hidden()"></md-list>\n\n                            \x3c!-- Nested navigation template --\x3e\n                            <script type="text/ng-template" id="permission-nested.html">\n                                <md-list-item>\n        <md-icon md-font-icon="{{father.icon}}"></md-icon>\n        <p translate="{{father.translate}}">{{ father.title }}</p>\n        <md-switch class="md-secondary" ng-model="father.enabled" ng-change="vm_pc.onChange(father)" ng-init="father.enabled = vm_pc.agent.permissions.includes(father.id)" \n                  ng-disabled="!vm_pc.crudPermissions.canEdit"></md-switch>\n      </md-list-item>\n\n      <md-divider></md-divider>\n\n      <md-list>\n        <md-list-item ng-repeat="child in father.children" ng-if="child.id !== 201">\n          <md-icon ng-if="child.icon" md-font-icon="{{child.icon}}"></md-icon>\n          <p translate="{{child.translate}}">{{ child.title }}</p>\n          <md-switch ng-model="child.enabled" ng-change="vm_pc.onChange(father, child)" ng-init="child.enabled = vm_pc.agent.permissions.includes(child.id)"\n                    ng-disabled="!vm_pc.crudPermissions.canEdit"></md-switch>\n          </md-list-item>\n      </md-list>\n  <\/script>\n                            \x3c!-- / Nested navigation template --\x3e\n\n                            <span ng-if="vm_pc.agent.role === \'admin\'" class="md-headline" translate="STAFF.ALL_MODULES_AVAILABLE">All modules are already available.</span>\n\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/staff/views/teams/create/dialog.html",'<md-dialog class="team-dialog" aria-label="New Team">\n    <form name="teamForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="STAFF.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.team.name" ng-required="true" autofocus>\n\n                <div ng-messages="teamForm[\'name\'].$error" ng-show="teamForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.team.description">\n\n                <div ng-messages="teamForm[\'description\'].$error" ng-show="teamForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newTeam" ng-click="vm.saveTeam()" class="send-button md-accent md-raised" ng-disabled="teamForm.$invalid || teamForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newTeam" ng-click="vm.addNewTeam()" class="send-button md-accent md-raised" ng-disabled="teamForm.$invalid" aria-label="ADD" translate="STAFF.ADD_TEAM" translate-attr-aria-label="STAFF.ADD_TEAM">\n                    ADD TEAM\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newTeam" ng-click="vm.deleteTeam($event)" aria-label="DELETE" translate translate-attr-aria-label="STAFF.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="STAFF.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/teams/edit/agentadd/agentadd.html",'<md-dialog class="team-dialog" aria-label="team" ng-init="vm.onInit()">\n    <form name="teamForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="STAFF.AGENTADD_TEAM">Add Agent to team</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/teams/teams.html",'<div id="teams" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-multiple" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="STAFF.TEAMS">Teams</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="STAFF.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedTeams.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedTeams =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="STAFF.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-teams-count">\n                    <span>{{vm.selectedTeams.length}}</span>\n                    <span translate="STAFF.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="TEAMS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllTeams()" translate="STAFF.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectTeams()" translate="STAFF.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedTeams" csv-label="true" filename="teams.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedTeams($event)" aria-label="delete selected" translate translate-attr-label="TEAMS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- TEAM TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedTeams" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTeams">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'STAFF.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'STAFF.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'STAFF.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.teams.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="STAFF.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="team" md-select-id="id" ng-repeat="team in vm.teams.rows">\n                                <td md-cell ng-if="team.userpic"><img class="avatar" alt="{{team.name}}" ng-src="api/users/{{team.id}}/avatar" /></td>\n                                <td md-cell ng-if="!team.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{team.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditTeam($event, team)" md-cell class="id ">{{team.id}}</td>\n                                <td ng-click="vm.createOrEditTeam($event, team)" md-cell class="name ">{{team.name}}</td>\n                                <td ng-click="vm.createOrEditTeam($event, team)" md-cell class="description ">{{team.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(team, $event    )" translate="STAFF.EDIT_TEAM">\n                                                    Edit Team\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(team, $event    )" translate="STAFF.AGENTADD_TEAM">\n                                                    AgentAdd Team\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(team, $event    )" translate="STAFF.DELETE_TEAM">\n                                                    Delete Team\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'STAFF.PAGE\' | translate}}:\', rowsPerPage: \'{{\'STAFF.ROWSPERPAGE\' | translate}}:\', of: \'{{\'STAFF.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.teams.count}}" md-on-paginate="vm.getTeams" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / TEAM TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD TEAM BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-team-button" ng-click="vm.createOrEditTeam($event)" aria-label="add team" translate translate-attr-aria-label="STAFF.ADD_TEAM">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD TEAM BUTTON --\x3e\n</div>'),e.put("app/main/apps/staff/views/telephones/create/dialog.html",'<md-dialog class="telephone-dialog" aria-label="New Telephone">\n    <form name="telephoneForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="STAFF.ACCOUNTNAME">Accountname</label>\n                <input type="text" name="fullname" ng-model="vm.telephone.fullname" ng-required="true" autofocus>\n\n                <div ng-messages="telephoneForm[\'fullname\'].$error" ng-show="telephoneForm[\'fullname\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.ACCOUNTNAME_REQUIRED">Accountname field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.USERNAME">Username</label>\n                <input type="text" name="name" ng-model="vm.telephone.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" ng-disabled="!vm.newTelephone">\n\n                <div class="hint"><span translate="STAFF.HELP.USERNAME"></span></div>\n                <div ng-messages="telephoneForm[\'name\'].$error" ng-show="telephoneForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.USERNAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Username must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.telephone.email" ng-required="true">\n\n                <div ng-messages="telephoneForm[\'email\'].$error" ng-show="telephoneForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="STAFF.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.newTelephone">\n                <label translate="STAFF.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.telephone.password" placeholder="Password" ng-pattern="vm.passwordPattern" translate translate-attr-placeholder="STAFF.PASSWORD" required>\n                <div ng-messages="telephoneForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.newTelephone  && (vm.newTelephone)">\n                <label translate="STAFF.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword" required>\n                <div ng-messages="telephoneForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="STAFF.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="STAFF.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.telephone.description">\n\n                <div ng-messages="telephoneForm[\'description\'].$error" ng-show="telephoneForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.newTelephone" class="md-block">\n                <md-switch ng-model="vm.telephone.autointernal" aria-label="AutoInternal"><span translate="STAFF.AUTOINTERNAL">AutoInternal</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="!vm.telephone.autointernal" class="md-block">\n                <label translate="STAFF.INTERNAL">Internal</label>\n                <input type="text" name="internal" ng-model="vm.telephone.internal" ng-required="true" ng-disabled="!vm.newTelephone">\n\n                <div ng-messages="telephoneForm[\'internal\'].$error" ng-show="telephoneForm[\'internal\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.INTERNAL_REQUIRED">Internal field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.newTelephone" class="md-block">\n                <md-switch ng-model="vm.telephone.voicemail" aria-label="Voicemail"><span translate="STAFF.VOICEMAIL">Voicemail</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newTelephone" ng-click="vm.saveTelephone()" class="send-button md-accent md-raised" ng-disabled="telephoneForm.$invalid || telephoneForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newTelephone" ng-click="vm.addNewTelephone()" class="send-button md-accent md-raised" ng-disabled="telephoneForm.$invalid" aria-label="ADD" translate="STAFF.ADD_TELEPHONE" translate-attr-aria-label="STAFF.ADD_TELEPHONE">\n                    ADD TELEPHONE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newTelephone" ng-click="vm.deleteTelephone($event)" aria-label="DELETE" translate translate-attr-aria-label="STAFF.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="STAFF.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/telephones/edit/changepassword/changepassword.html",'<md-dialog class="telephone-dialog" aria-label="{{vm.name}}">\n    <form name="telephoneForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ \'\n                    STAFF.CHANGE_PASSWORD\' | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block" ng-if="vm.currentUser.id == vm.telephone.id">\n                <label translate="STAFF.OLD_PASSWORD">Old Password</label>\n                <input type="password" name="oldPassword" ng-model="vm.oldPassword" placeholder="Password" translate translate-attr-placeholder="STAFF.OLD_PASSWORD" required>\n                <div ng-messages="telephoneForm.oldPassword.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.NEW_PASSWORD">New Password</label>\n                <input type="password" name="password" ng-model="vm.password" placeholder="Password" translate ng-pattern="vm.passwordPattern" translate-attr-placeholder="STAFF.NEW_PASSWORD" required>\n                <div ng-messages="telephoneForm.password.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is\n                            required</span>\n                    </div>\n\n\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.SECURE_PASSWORD_PATTERN">Must contain\n                            at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric\n                            character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                    <div ng-message="oldPasswordMatch">\n                        <span translate="STAFF.ERRORS.PASSWORD_OLDPASSWORD_MATCH">New password must be different from old one</span>\n                    </div>\n\n\n\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword">\n                <div ng-messages="telephoneForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CONFIRM_REQUIRED">Confirm field is\n                            required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="STAFF.ERRORS.CONFIRM_NOT_MATCH">Your password did\n                            not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.savePassword()" class="send-button md-accent md-raised" ng-disabled="telephoneForm.$invalid || telephoneForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/telephones/edit/view.html",'<div id="staff-telephone" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-telephones-button md-icon-button" aria-label="Go to telephones" ng-click="vm.gotoTelephones()" translate translate-attr-aria-label="STAFF.GO_TO_TELEPHONES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="telephone-image" hide-xs>\n                    <img ng-src="assets/images/business/telephones.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.telephone.id}}\n                        <span ng-if="vm.telephone.name">{{vm.telephone.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="STAFF.CREATED_AT"></span> <span>{{vm.telephone.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.changepassworddialog(vm.telephone, $event)" class="md-fab md-warn md-icon-button" aria-label="changepassword">\n                <md-tooltip><span translate="STAFF.CHANGEPASSWORD_TELEPHONE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-key-variant"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveTelephone()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(accountForm.$invalid) || (generalForm.$invalid)" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="telephone-detail-form-container account md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.ACCOUNT">ACCOUNT</div>\n                        </div>\n                        <form name="accountForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ACCOUNTNAME">Accountname</label>\n                                <input type="text" name="fullname" ng-model="vm.telephone.fullname" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="accountForm[\'fullname\'].$error" ng-show="accountForm[\'fullname\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ACCOUNTNAME_REQUIRED">Accountname field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.USERNAME">Username</label>\n                                <input type="text" name="name" ng-model="vm.telephone.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" disabled>\n\n                                <div class="hint"><span translate="STAFF.HELP.USERNAME"></span></div>\n                                <div ng-messages="accountForm[\'name\'].$error" ng-show="accountForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="STAFF.ERRORS.USERNAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Username must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.EMAIL">Email</label>\n                                <input type="email" name="email" ng-model="vm.telephone.email" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="accountForm[\'email\'].$error" ng-show="accountForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="STAFF.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.telephone.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="accountForm[\'description\'].$error" ng-show="accountForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.PHONE">Phone</label>\n                                <input type="text" name="phone" ng-model="vm.telephone.phone" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="accountForm[\'phone\'].$error" ng-show="accountForm[\'phone\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.MOBILE">Mobile</label>\n                                <input type="text" name="mobile" ng-model="vm.telephone.mobile" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="accountForm[\'mobile\'].$error" ng-show="accountForm[\'mobile\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.MOBILE_REQUIRED">Mobile field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.VOICE">VOICE</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="telephone-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container ng-if="!vm.telephone.autointernal" class="md-block">\n                                <label translate="STAFF.INTERNAL">Internal</label>\n                                <input type="text" name="internal" ng-model="vm.telephone.internal" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'internal\'].$error" ng-show="generalForm[\'internal\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.INTERNAL_REQUIRED">Internal field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.TRANSPORT">Transport</label>\n                                <md-select name="transport" ng-model="vm.telephone.transport" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'udp\'">udp</md-option>\n                                    <md-option ng-value="\'tcp\'">tcp</md-option>\n                                    <md-option ng-value="\'ws\'">ws</md-option>\n                                    <md-option ng-value="\'wss\'">wss</md-option>\n                                    <md-option ng-value="\'tls\'">tls</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.TRANSPORT"></span></div>\n                                <div ng-messages="generalForm[\'transport\'].$error" ng-show="generalForm[\'transport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.TRANSPORT_REQUIRED">Transport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.NAT">NAT</label>\n                                <md-select name="nat" ng-model="vm.telephone.nat" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'force_rport\'">force_rport</md-option>\n                                    <md-option ng-value="\'comedia\'">comedia</md-option>\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'never\'">never</md-option>\n                                    <md-option ng-value="\'route\'">route</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.NAT"></span></div>\n                                <div ng-messages="generalForm[\'nat\'].$error" ng-show="generalForm[\'nat\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.NAT_REQUIRED">NAT field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ALLOWCODECS">AllowCodecs</label>\n                                <md-select name="allow" ng-model="vm.telephone.allow" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'ulaw\'">ulaw</md-option>\n                                    <md-option ng-value="\'alaw\'">alaw</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                    <md-option ng-value="\'g722\'">g722</md-option>\n                                    <md-option ng-value="\'g729\'">g729</md-option>\n                                    <md-option ng-value="\'opus\'">opus</md-option>\n                                    <md-option ng-value="\'h264\'">h264</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.ALLOWCODECS"></span></div>\n                                <div ng-messages="generalForm[\'allow\'].$error" ng-show="generalForm[\'allow\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ALLOWCODECS_REQUIRED">AllowCodecs field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CALLERID">CallerId</label>\n                                <input type="text" name="callerid" ng-model="vm.telephone.callerid" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'callerid\'].$error" ng-show="generalForm[\'callerid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CALLERID_REQUIRED">CallerId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CONTEXT">Context</label>\n                                <md-select name="context" ng-model="vm.telephone.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CALLGROUP">Callgroup</label>\n                                <input type="text" name="callgroup" ng-model="vm.telephone.callgroup" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.CALLGROUP"></span></div>\n                                <div ng-messages="generalForm[\'callgroup\'].$error" ng-show="generalForm[\'callgroup\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CALLGROUP_REQUIRED">Callgroup field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.PICKUPGROUP">Pickupgroup</label>\n                                <input type="text" name="pickupgroup" ng-model="vm.telephone.pickupgroup" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.PICKUPGROUP"></span></div>\n                                <div ng-messages="generalForm[\'pickupgroup\'].$error" ng-show="generalForm[\'pickupgroup\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.PICKUPGROUP_REQUIRED">Pickupgroup field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.VIDEOSUPPORT">Videosupport</label>\n                                <md-select name="videosupport" ng-model="vm.telephone.videosupport" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">Yes</md-option>\n                                    <md-option ng-value="\'no\'">No</md-option>\n                                    <md-option ng-value="\'always\'">Always</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'videosupport\'].$error" ng-show="generalForm[\'videosupport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.VIDEOSUPPORT_REQUIRED">Videosupport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ENCRYPTION">Encryption</label>\n                                <md-select name="encryption" ng-model="vm.telephone.encryption" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.ENCRYPTION"></span></div>\n                                <div ng-messages="generalForm[\'encryption\'].$error" ng-show="generalForm[\'encryption\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ENCRYPTION_REQUIRED">Encryption field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/staff/views/telephones/telephones.html",'<div id="telephones" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-multiple" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="STAFF.TELEPHONES">Telephones</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="STAFF.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedTelephones.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedTelephones =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="STAFF.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-telephones-count">\n                    <span>{{vm.selectedTelephones.length}}</span>\n                    <span translate="STAFF.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="TELEPHONES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllTelephones()" translate="STAFF.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectTelephones()" translate="STAFF.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedTelephones" csv-label="true" filename="telephones.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedTelephones($event)" aria-label="delete selected" translate translate-attr-label="TELEPHONES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- TELEPHONE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedTelephones" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTelephones">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="fullname">{{ \'STAFF.ACCOUNTNAME\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'STAFF.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="email">{{ \'STAFF.EMAIL\' | translate }}</th>\n                                <th md-column md-order-by="internal">{{ \'STAFF.INTERNAL\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.telephones.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="STAFF.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="telephone" md-select-id="id" ng-repeat="telephone in vm.telephones.rows">\n                                <td md-cell ng-if="telephone.userpic"><img class="avatar" alt="{{telephone.name}}" ng-src="api/users/{{telephone.id}}/avatar" /></td>\n                                <td md-cell ng-if="!telephone.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{telephone.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(telephone, ev) : vm.createOrEditTelephone($event, telephone)" md-cell class="fullname font-weight-600">{{telephone.fullname}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(telephone, ev) : vm.createOrEditTelephone($event, telephone)" md-cell class="name ">{{telephone.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(telephone, ev) : vm.createOrEditTelephone($event, telephone)" md-cell class="email ">{{telephone.email}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(telephone, ev) : vm.createOrEditTelephone($event, telephone)" md-cell class="internal ">{{telephone.internal}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(telephone, $event    )" translate="STAFF.EDIT_TELEPHONE">\n                                                    Edit Telephone\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(telephone, $event    )" translate="STAFF.DELETE_TELEPHONE">\n                                                    Delete Telephone\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'STAFF.PAGE\' | translate}}:\', rowsPerPage: \'{{\'STAFF.ROWSPERPAGE\' | translate}}:\', of: \'{{\'STAFF.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.telephones.count}}" md-on-paginate="vm.getTelephones" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / TELEPHONE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD TELEPHONE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-telephone-button" ng-click="vm.createOrEditTelephone($event)" aria-label="add telephone" translate translate-attr-aria-label="STAFF.ADD_TELEPHONE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD TELEPHONE BUTTON --\x3e\n</div>'),e.put("app/main/apps/staff/views/userProfiles/create/dialog.html",'<md-dialog class="userProfile-dialog" aria-label="New UserProfile">\n    <form name="userProfileForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="STAFF.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.userProfile.name" ng-required="true" autofocus ng-disabled="!vm.newUserProfile">\n\n                <div ng-messages="userProfileForm[\'name\'].$error" ng-show="userProfileForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.userProfile.description">\n\n                <div ng-messages="userProfileForm[\'description\'].$error" ng-show="userProfileForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.CRUDPERMISSIONS">CrudPermissions</label>\n                <md-select name="crudPermissions" ng-model="vm.userProfile.crudPermissions" multiple required>\n\n                    <md-option ng-value="\'r\'" disabled> {{ \'STAFF.READ_PERMISSION\' | translate }} </md-option>\n\n                    <md-option ng-value="\'e\'"> {{ \'STAFF.EDIT_PERMISSION\' | translate }} </md-option>\n\n                    <md-option ng-value="\'d\'"> {{ \'STAFF.DELETE_PERMISSION\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="userProfileForm[\'crudPermissions\'].$error" ng-show="userProfileForm[\'crudPermissions\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CRUDPERMISSIONS_REQUIRED">CrudPermissions field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newUserProfile" ng-click="vm.saveUserProfile()" class="send-button md-accent md-raised" ng-disabled="userProfileForm.$invalid || userProfileForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newUserProfile" ng-click="vm.addNewUserProfile()" class="send-button md-accent md-raised" ng-disabled="userProfileForm.$invalid" aria-label="ADD" translate="STAFF.ADD_USERPROFILE" translate-attr-aria-label="STAFF.ADD_USERPROFILE">\n                    ADD USERPROFILE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newUserProfile" ng-click="vm.deleteUserProfile($event)" aria-label="DELETE" translate translate-attr-aria-label="STAFF.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="STAFF.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/userProfiles/edit/clone/clone.html",'<md-dialog class="userProfile-dialog" aria-label="Clone UserProfile">\n    <form name="userProfileForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="STAFF.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.userProfile.name" ng-required="true" autofocus ng-disabled="!vm.newUserProfile">\n\n                <div ng-messages="userProfileForm[\'name\'].$error" ng-show="userProfileForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.userProfile.description">\n\n                <div ng-messages="userProfileForm[\'description\'].$error" ng-show="userProfileForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.CRUDPERMISSIONS">CrudPermissions</label>\n                <md-select name="crudPermissions" ng-model="vm.userProfile.crudPermissions" multiple required>\n\n                    <md-option ng-value="\'r\'" disabled> {{ \'STAFF.READ_PERMISSION\' | translate }} </md-option>\n\n                    <md-option ng-value="\'e\'"> {{ \'STAFF.EDIT_PERMISSION\' | translate }} </md-option>\n\n                    <md-option ng-value="\'d\'"> {{ \'STAFF.DELETE_PERMISSION\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="userProfileForm[\'crudPermissions\'].$error" ng-show="userProfileForm[\'crudPermissions\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CRUDPERMISSIONS_REQUIRED">CrudPermissions field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <md-button type="submit" ng-click="vm.cloneUserProfile()" class="send-button md-accent md-raised" ng-disabled="userProfileForm.$invalid" aria-label="CLONE" translate="STAFF.CLONE_USERPROFILE" translate-attr-aria-label="STAFF.CLONE_USERPROFILE">\n                CLONE USERPROFILE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/userProfiles/edit/permissionsmanage/permissionsmanage.html",'<md-dialog class="userProfile-dialog" aria-label="userProfile">\n    <form name="userProfileForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2>{{vm.title}}</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog($event)">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <div layout="column" class="padding-bottom-10">\n                <div layout="row" class="padding-bottom-10">\n                    <md-input-container flex class="no-margin">\n                        <label translate="STAFF.SECTIONS">Sections</label>\n                        <md-select name="sections" ng-model="vm.selectedSection" placeholder="{{\'STAFF.PERMISSIONS_SELECT_SECTION\' | translate}}" ng-change="vm.onChangeSection()" required>\n                            <md-option ng-value="subsection" ng-repeat="subsection in vm.subsections" ng-selected="{{vm.subsections.length === 1 ? \'true\' : \'false\'}}">{{subsection.translate | translate}}</md-option>\n                        </md-select>\n                    </md-input-container>\n                    <div layout="row" ng-show="vm.selectedSection" class="margin-left-10">\n                        <md-button ng-switch="vm.selectedSection.enabled" class="md-icon-button md-fab md-mini size-8 padding-10" ng-class="vm.selectedSection.enabled ? \'blue-500-bg\' : \'grey-A400-bg\'" ng-click="vm.onChangeVisibility()" aria-label="Visibility">\n                            <md-icon ng-switch-when="true" md-font-icon="icon-eye" aria-label="Visible section">\n                                <md-tooltip>{{\'STAFF.PERMISSIONS_SECTION_HIDE\' | translate}}</md-tooltip>\n                            </md-icon>\n                            <md-icon ng-switch-when="false" md-font-icon="icon-eye-off" aria-label="Hidden section">\n                                <md-tooltip>{{\'STAFF.PERMISSIONS_SECTION_SHOW\' | translate}}</md-tooltip>\n                            </md-icon>\n                        </md-button>\n                        <div>\n                            <md-button class="md-icon-button md-fab md-mini size-8 green-A700-bg no-margin" ng-disabled="true">\n                                <md-icon md-font-icon="icon-monitor" class="md-background-fg" aria-label="Read permission">\n                                    <md-tooltip>{{\'STAFF.READ_PERMISSION\' | translate}}</md-tooltip>\n                                </md-icon>\n                            </md-button>\n                            <md-button class="md-icon-button md-fab md-mini size-8 no-margin" ng-class="vm.selectedSection.allowEdit ? \'green-A700-bg\' : \'grey-A400-bg\'" ng-click="vm.setPermission(\'edit\')">\n                                <md-icon md-font-icon="icon-pencil" aria-label="Edit permission">\n                                    <md-tooltip>{{\'STAFF.EDIT_PERMISSION\' | translate}}</md-tooltip>\n                                </md-icon>\n                            </md-button>\n                            <md-button class="md-icon-button md-fab md-mini size-8 no-margin" ng-class="vm.selectedSection.allowDelete ? \'green-A700-bg\' : \'grey-A400-bg\'" ng-click="vm.setPermission(\'delete\')">\n                                <md-icon md-font-icon="icon-delete" aria-label="Delete permission">\n                                    <md-tooltip>{{\'STAFF.DELETE_PERMISSION\' | translate}}</md-tooltip>\n                                </md-icon>\n                            </md-button>\n                        </div>\n                    </div>\n                </div>\n                <div layout="row" ng-show="vm.selectedSection" class="margin-left-10" ng-if="!vm.selectedSection.permissions || vm.selectedSection.permissions.association">\n                    <md-switch ng-model="vm.selectedSection.autoAssociation" class="no-margin padding-right-10" aria-label="Auto association" ng-change="vm.onChangeAutoAssociation()">\n                    </md-switch>\n                    <p class="no-margin font-size-12 line-height-30">{{\'STAFF.PERMISSIONS_AUTO_ASSOCIATION_INFO\' | translate}}</p>\n                </div>\n                <div layout="row" ng-show="vm.selectedSection && vm.selectedSection.title === \'Reports\' && !vm.selectedSection.autoAssociation" class="margin-bottom-10 margin-top-30" ng-if="!vm.selectedSection.permissions || vm.selectedSection.permissions.association">\n                    <md-input-container flex class="no-margin">\n                        <label translate="STAFF.REPORT_TYPE">Report Type</label>\n                        <md-select name="type" ng-model="vm.selectedSection.reportType" placeholder="{{\'STAFF.PERMISSIONS_SELECT_REPORT_TYPE\' | translate}}" ng-change="vm.onChangeReportType()" required>\n                            <md-option ng-value="\'default\'">Default</md-option>\n                            <md-option ng-value="\'custom\'">Custom</md-option>\n                        </md-select>\n                    </md-input-container>\n                </div>\n                <div ng-show="vm.selectedSection && vm.selectedSection.title === \'Dashboards\'" class="user-profile-section-help margin-bottom-10 margin-top-20">\n                    <md-icon md-font-icon="icon-help" aria-label="Dashboards help"></md-icon>\n                    <span class="no-margin font-size-12 line-height-30" translate="STAFF.HELP.CUSTOM_DASHBOARDS_PERMISSIONS"></span>\n                </div>\n            </div>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions" ng-if="!vm.selectedSection.permissions || vm.selectedSection.permissions.association" ng-hide="vm.selectedSection.autoAssociation"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center">\n            <div>\n                <md-icon md-font-icon="icon-information-outline" aria-label="Delete permission"></md-icon>\n                <span class="no-margin font-size-12 line-height-30" translate="STAFF.HELP.SAVE_PERMISSIONS"></span>\n            </div>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveSection()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/userProfiles/edit/view.html",'<div id="staff-userProfile" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-userProfiles-button md-icon-button" aria-label="Go to userProfiles" ng-click="vm.gotoUserProfiles()" translate translate-attr-aria-label="STAFF.GO_TO_USERPROFILES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="userProfile-image" hide-xs>\n                    <img ng-src="assets/images/business/userProfiles.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.userProfile.id}}\n                        <span ng-if="vm.userProfile.name">{{vm.userProfile.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="STAFF.CREATED_AT"></span> <span>{{vm.userProfile.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.clonedialog(vm.userProfile, $event)" class="md-fab md-amber-500-bg md-icon-button" aria-label="clone">\n                <md-tooltip><span translate="STAFF.CLONE_USERPROFILE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveUserProfile()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (modulesForm.$invalid)" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="userProfile-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.userProfile.name" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.userProfile.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CRUDPERMISSIONS">CrudPermissions</label>\n                                <md-select name="crudPermissions" ng-model="vm.userProfile.crudPermissions" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'r\'" disabled> {{ \'STAFF.READ_PERMISSION\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'e\'"> {{ \'STAFF.EDIT_PERMISSION\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'d\'"> {{ \'STAFF.DELETE_PERMISSION\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'crudPermissions\'].$error" ng-show="generalForm[\'crudPermissions\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CRUDPERMISSIONS_REQUIRED">CrudPermissions field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.PERMISSIONS">PERMISSIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="userProfile-detail-form-container modules md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.MODULES">MODULES</div>\n                        </div>\n                        <div ng-controller="UserProfilePermissionsController as vm_pc" ng-init="vm_pc.init(vm.userProfile, vm.license)" class="userProfile-detail-form-container">\n                            <md-grid-list flex md-cols-gt-xs="2" md-cols-gt-sm="2" md-cols-gt-md="4" md-cols-gt-lg="6" md-row-height-gt-xs="2:1" md-row-height-gt-sm="2:1" md-row-height-gt-md="3:1" gt-xs-gutter="4px" gt-sm-gutter="8px" gt-md-gutter="8px" gt-lg-gutter="16px">\n                                <md-grid-tile ng-repeat="father in vm_pc.modules" ng-if="vm_pc.userProfile.role !== \'admin\' && !father.permissions.hidden" md-colspan="2">\n                                    <md-card flex-xs flex-gt-xs="90" layout="column" no-padding no-margin>\n                                        <md-card-header>\n                                            <md-card-avatar>\n                                                <md-icon class="md-avatar-icon auto-size" md-font-icon="{{father.icon}}" ng-class="{ true: father.status.color }[true]">\n                                                </md-icon>\n                                                <md-tooltip>{{ father.status.info }}</md-tooltip>\n                                                </md-icon>\n                                            </md-card-avatar>\n                                            <md-card-header-text layout-align="center start">\n                                                <span class="md-title" translate="{{father.translate}}">{{ father.title }}</span>\n                                            </md-card-header-text>\n                                            <md-card-actions class="no-margin" layout="row" ng-init="vm_pc.checkSectionResources(father)" ng-if="father.status.tag != \'unlicensed\'">\n                                                <md-switch class="auto-height no-margin" ng-model="father.allResourcesEnabled" ng-change="vm_pc.onChangeEnableAllResources(father)" aria-label="Enable all"></md-switch>\n                                                <md-button class="md-mini auto-width" aria-label="Manage" ng-click="vm_pc.manageResources(father)" ng-hide="father.permissions && !father.permissions.association">\n                                                    <md-tooltip>{{\'STAFF.PERMISSIONS_MANAGE\' | translate}}\n                                                    </md-tooltip>\n                                                    <md-icon md-font-icon="icon-cog"></md-icon>\n                                                </md-button>\n                                            </md-card-actions>\n                                            <md-card-header-text ng-if="father.status.tag === \'unlicensed\'" layout-align="center end">\n                                                <span class="md-subhead red-A700-fg">{{ father.status.name }}</span>\n                                            </md-card-header-text>\n                                        </md-card-header>\n                                    </md-card>\n                                </md-grid-tile>\n                            </md-grid-list>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/staff/views/userProfiles/userProfiles.html",'<div id="userProfiles" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-multiple" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="STAFF.USERPROFILES">UserProfiles</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="STAFF.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedUserProfiles.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedUserProfiles =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="STAFF.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-userProfiles-count">\n                    <span>{{vm.selectedUserProfiles.length}}</span>\n                    <span translate="STAFF.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="USERPROFILES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllUserProfiles()" translate="STAFF.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectUserProfiles()" translate="STAFF.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedUserProfiles" csv-label="true" filename="userProfiles.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedUserProfiles($event)" aria-label="delete selected" translate translate-attr-label="USERPROFILES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- USERPROFILE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedUserProfiles" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getUserProfiles">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'STAFF.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'STAFF.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'STAFF.DESCRIPTION\' | translate }}</th>\n                                <th md-column md-order-by="crudPermissions">{{ \'STAFF.CRUDPERMISSIONS\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.userProfiles.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="STAFF.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="userProfile" md-select-id="id" ng-repeat="userProfile in vm.userProfiles.rows">\n                                <td md-cell ng-if="userProfile.userpic"><img class="avatar" alt="{{userProfile.name}}" ng-src="api/users/{{userProfile.id}}/avatar" /></td>\n                                <td md-cell ng-if="!userProfile.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{userProfile.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(userProfile, ev) : vm.createOrEditUserProfile($event, userProfile)" md-cell class="id ">{{userProfile.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(userProfile, ev) : vm.createOrEditUserProfile($event, userProfile)" md-cell class="name ">{{userProfile.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(userProfile, ev) : vm.createOrEditUserProfile($event, userProfile)" md-cell class="description ">{{userProfile.description}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(userProfile, ev) : vm.createOrEditUserProfile($event, userProfile)" md-cell class="crudPermissions ">{{userProfile.selectedcrudPermissions}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(userProfile, $event    )" translate="STAFF.EDIT_USERPROFILE">\n                                                    Edit UserProfile\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.clonedialog(userProfile, $event    )" translate="STAFF.CLONE_USERPROFILE">\n                                                    clone UserProfile\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(userProfile, $event    )" translate="STAFF.DELETE_USERPROFILE">\n                                                    Delete UserProfile\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'STAFF.PAGE\' | translate}}:\', rowsPerPage: \'{{\'STAFF.ROWSPERPAGE\' | translate}}:\', of: \'{{\'STAFF.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.userProfiles.count}}" md-on-paginate="vm.getUserProfiles" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / USERPROFILE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD USERPROFILE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-userProfile-button" ng-click="vm.createOrEditUserProfile($event)" aria-label="add userProfile" translate translate-attr-aria-label="STAFF.ADD_USERPROFILE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD USERPROFILE BUTTON --\x3e\n</div>'),e.put("app/main/apps/staff/views/users/create/dialog.html",'<md-dialog class="user-dialog" aria-label="New User">\n    <form name="userForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="STAFF.ROLE">Role</label>\n                <md-select name="role" ng-model="vm.user.role" autofocus required ng-disabled="!vm.newUser">\n                    <md-option ng-value="\'admin\'">Admin</md-option>\n                    <md-option ng-value="\'user\'">User</md-option>\n                </md-select>\n                <div ng-messages="userForm[\'role\'].$error" ng-show="userForm[\'role\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.ROLE_REQUIRED">Role field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.user.role === \'user\'" class="md-block">\n                <label translate="STAFF.USERPROFILE">UserProfile</label>\n                <md-select name="userProfileId" ng-model="vm.user.userProfileId" required>\n                    <md-option ng-value="userProfileId.id" ng-repeat="userProfileId in vm.userProfiles" ng-disabled="userProfileId.canSelect === false">{{ userProfileId.name }}</md-option>\n                </md-select>\n                <div ng-messages="userForm[\'userProfileId\'].$error" ng-show="userForm[\'userProfileId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.USERPROFILE_REQUIRED">UserProfile field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.FULLNAME">Fullname</label>\n                <input type="text" name="fullname" ng-model="vm.user.fullname" ng-required="true">\n\n                <div ng-messages="userForm[\'fullname\'].$error" ng-show="userForm[\'fullname\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.FULLNAME_REQUIRED">Fullname field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.USERNAME">Username</label>\n                <input type="text" name="name" ng-model="vm.user.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" ng-disabled="!vm.newUser">\n\n                <div class="hint"><span translate="STAFF.HELP.USERNAME"></span></div>\n                <div ng-messages="userForm[\'name\'].$error" ng-show="userForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.USERNAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Username must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.user.email" ng-required="true">\n\n                <div ng-messages="userForm[\'email\'].$error" ng-show="userForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="STAFF.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.newUser">\n                <label translate="STAFF.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.user.password" placeholder="Password" ng-pattern="vm.passwordPattern" translate translate-attr-placeholder="STAFF.PASSWORD" required>\n                <div ng-messages="userForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.newUser  && (vm.newUser)">\n                <label translate="STAFF.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword" required>\n                <div ng-messages="userForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="STAFF.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="STAFF.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.user.description">\n\n                <div ng-messages="userForm[\'description\'].$error" ng-show="userForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.newUser" class="md-block">\n                <md-switch ng-model="vm.user.autointernal" aria-label="AutoInternal"><span translate="STAFF.AUTOINTERNAL">AutoInternal</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="!vm.user.autointernal" class="md-block">\n                <label translate="STAFF.INTERNAL">Internal</label>\n                <input type="text" name="internal" ng-model="vm.user.internal" ng-required="true" ng-disabled="!vm.newUser">\n\n                <div ng-messages="userForm[\'internal\'].$error" ng-show="userForm[\'internal\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.INTERNAL_REQUIRED">Internal field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newUser" ng-click="vm.saveUser()" class="send-button md-accent md-raised" ng-disabled="userForm.$invalid || userForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newUser" ng-click="vm.addNewUser()" class="send-button md-accent md-raised" ng-disabled="userForm.$invalid" aria-label="ADD" translate="STAFF.ADD_USER" translate-attr-aria-label="STAFF.ADD_USER">\n                    ADD USER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newUser" ng-click="vm.deleteUser($event)" aria-label="DELETE" translate translate-attr-aria-label="STAFF.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="STAFF.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/users/edit/apikeymanager/apikeymanager.html",'<md-dialog class="user-dialog" aria-label="{{vm.name}}">\n    <form name="userForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ \'\n                    STAFF.MANAGE_API_KEY\' | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.generateApiKey()" class="send-button md-accent md-raised" aria-label="Generate" translate="STAFF.GENERATE" translate-attr-aria-label="STAFF.GENERATE">\n                    Generate\n                </md-button>\n                <md-button type="submit" ng-click="vm.removeApiKey()" class="send-button md-accent md-raised" aria-label="Remove" translate="STAFF.REMOVE" translate-attr-aria-label="STAFF.DELETE">\n                    Delete\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/users/edit/changepassword/changepassword.html",'<md-dialog class="user-dialog" aria-label="{{vm.name}}">\n    <form name="userForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ \'\n                    STAFF.CHANGE_PASSWORD\' | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block" ng-if="vm.currentUser.id == vm.user.id">\n                <label translate="STAFF.OLD_PASSWORD">Old Password</label>\n                <input type="password" name="oldPassword" ng-model="vm.oldPassword" placeholder="Password" translate translate-attr-placeholder="STAFF.OLD_PASSWORD" required>\n                <div ng-messages="userForm.oldPassword.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.NEW_PASSWORD">New Password</label>\n                <input type="password" name="password" ng-model="vm.password" placeholder="Password" translate ng-pattern="vm.passwordPattern" translate-attr-placeholder="STAFF.NEW_PASSWORD" required>\n                <div ng-messages="userForm.password.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.PASSWORD_REQUIRED">Password field is\n                            required</span>\n                    </div>\n\n\n                    <div ng-message="pattern">\n                        <span translate="STAFF.ERRORS.SECURE_PASSWORD_PATTERN">Must contain\n                            at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric\n                            character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                    <div ng-message="oldPasswordMatch">\n                        <span translate="STAFF.ERRORS.PASSWORD_OLDPASSWORD_MATCH">New password must be different from old one</span>\n                    </div>\n\n\n\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="STAFF.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword">\n                <div ng-messages="userForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="STAFF.ERRORS.CONFIRM_REQUIRED">Confirm field is\n                            required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="STAFF.ERRORS.CONFIRM_NOT_MATCH">Your password did\n                            not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.savePassword()" class="send-button md-accent md-raised" ng-disabled="userForm.$invalid || userForm.$pristine" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/staff/views/users/edit/view.html",'<div id="staff-user" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-users-button md-icon-button" aria-label="Go to users" ng-click="vm.gotoUsers()" translate translate-attr-aria-label="STAFF.GO_TO_USERS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="user-image" hide-xs>\n                    <img ng-src="assets/images/business/users.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.user.id}}\n                        <span ng-if="vm.user.name">{{vm.user.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="STAFF.CREATED_AT"></span> <span>{{vm.user.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.apikeymanagerdialog(vm.user, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="apikeymanager">\n                <md-tooltip><span translate="STAFF.APIKEYMANAGER_USER"></span></md-tooltip>\n                <md-icon md-font-icon="fab fa-hubspot"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.changepassworddialog(vm.user, $event)" class="md-fab md-warn md-icon-button" aria-label="changepassword">\n                <md-tooltip><span translate="STAFF.CHANGEPASSWORD_USER"></span></md-tooltip>\n                <md-icon md-font-icon="icon-key-variant"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveUser()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(personal_infoForm.$invalid) || (security_suiteForm.$invalid) || (change_avatarForm.$invalid) || (generalForm.$invalid)" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.ACCOUNT">ACCOUNT</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="user-detail-form-container personal_info md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.PERSONAL_INFO">PERSONAL_INFO</div>\n                        </div>\n                        <form name="personal_infoForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ROLE">Role</label>\n                                <md-select name="role" ng-model="vm.user.role" autofocus required disabled>\n                                    <md-option ng-value="\'admin\'">Admin</md-option>\n                                    <md-option ng-value="\'user\'">User</md-option>\n                                </md-select>\n                                <div ng-messages="personal_infoForm[\'role\'].$error" ng-show="personal_infoForm[\'role\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ROLE_REQUIRED">Role field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.user.role === \'user\'" class="md-block">\n                                <label translate="STAFF.USERPROFILE">UserProfile</label>\n                                <md-select name="userProfileId" ng-model="vm.user.userProfileId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="userProfileId.id" ng-repeat="userProfileId in vm.userProfiles" ng-disabled="userProfileId.canSelect === false">{{ userProfileId.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="personal_infoForm[\'userProfileId\'].$error" ng-show="personal_infoForm[\'userProfileId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.USERPROFILE_REQUIRED">UserProfile field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.FULLNAME">Fullname</label>\n                                <input type="text" name="fullname" ng-model="vm.user.fullname" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'fullname\'].$error" ng-show="personal_infoForm[\'fullname\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.FULLNAME_REQUIRED">Fullname field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.USERNAME">Username</label>\n                                <input type="text" name="name" ng-model="vm.user.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" disabled>\n\n                                <div class="hint"><span translate="STAFF.HELP.USERNAME"></span></div>\n                                <div ng-messages="personal_infoForm[\'name\'].$error" ng-show="personal_infoForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.USERNAME_REQUIRED">Username field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="STAFF.ERRORS.USERNAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Username must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.EMAIL">Email</label>\n                                <input type="email" name="email" ng-model="vm.user.email" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'email\'].$error" ng-show="personal_infoForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="STAFF.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.PHONE">Phone</label>\n                                <input type="text" name="phone" ng-model="vm.user.phone" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'phone\'].$error" ng-show="personal_infoForm[\'phone\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.MOBILE">Mobile</label>\n                                <input type="text" name="mobile" ng-model="vm.user.mobile" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'mobile\'].$error" ng-show="personal_infoForm[\'mobile\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.MOBILE_REQUIRED">Mobile field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.user.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="personal_infoForm[\'description\'].$error" ng-show="personal_infoForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="user-detail-form-container security_suite md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.SECURITY_SUITE">SECURITY_SUITE</div>\n                        </div>\n                        <form name="security_suiteForm" novalidate>\n                            <md-input-container ng-if="vm.user.passwordResetAt != null" class="md-block">\n                                <label translate="STAFF.LAST_PASSWORD_RESET_AT">Last_Password_Reset_At</label>\n                                <input type="text" name="passwordResetAt" ng-model="vm.user.passwordResetAt" autofocus disabled>\n\n                                <div class="hint"><span translate="STAFF.HELP.LAST_PASSWORD_RESET_AT"></span></div>\n                                <div ng-messages="security_suiteForm[\'passwordResetAt\'].$error" ng-show="security_suiteForm[\'passwordResetAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.LAST_PASSWORD_RESET_AT_REQUIRED">Last_Password_Reset_At field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.user.passwordResetAt == null" class="md-block">\n                                <label translate="STAFF.NO_PASSWORD_CHANGE">No_Password_Change</label>\n                                <input type="text" name="passwordResetAt" ng-model="vm.user.passwordResetAt" disabled>\n\n                                <div ng-messages="security_suiteForm[\'passwordResetAt\'].$error" ng-show="security_suiteForm[\'passwordResetAt\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.NO_PASSWORD_CHANGE_REQUIRED">No_Password_Change field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.APIKEY">ApiKey</label>\n                                <div layout="row" layout-align="center center">\n                                    <button class="md-button md-fab md-mini md-primary" ngclipboard data-clipboard-target="#copytoclipboard-apiKey" ngclipboard-success="vm.alert({title: \'copied to clipboard\', msg: e.text});" ngclipboard-error="vm.alert({title: \'error\', msg: \'copy to clipboard failed\'});">\n                                        <md-icon md-font-icon="icon-clipboard-text"></md-icon>\n                                    </button>\n                                    <input class="md-input" type="text" id="copytoclipboard-apiKey" name="apiKey" ng-model="vm.user.apiKey" ng-readonly="true">\n                                </div>\n                                <div class="hint"><span translate="STAFF.HELP.APIKEY"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.user.id != vm.currentUser.id && vm.currentUser.role == \'admin\'" class="md-block">\n                                <md-switch ng-model="vm.user.disabled" aria-label="Disabled" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.DISABLED">Disabled</span></md-switch>\n\n                                <div class="hint"><span translate="STAFF.HELP.DISABLED"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.user.id != vm.currentUser.id && vm.currentUser.role == \'admin\' && vm.user.disabled == 0" class="md-block">\n                                <md-switch ng-model="vm.user.blocked" aria-label="Blocked" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.BLOCKED">Blocked</span></md-switch>\n\n                                <div class="hint"><span translate="STAFF.HELP.BLOCKED"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="user-detail-form-container change_avatar md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.CHANGE_AVATAR">CHANGE_AVATAR</div>\n                        </div>\n                        <div ng-controller="Userchange_avatarController as vm_ca" ng-init="vm_ca.init(vm.user, vm.crudPermissions)" class="user-detail-form-container md-background-bg md-whiteframe-1dp">\n\n                            <div id="user-image-uploader" flow-init="vm_ca.ngFlowOptions" flow-name="vm_ca.ngFlow.flow" flow-files-submitted="vm_ca.upload()" flow-file-added="vm_ca.fileAdded($file)" flow-file-success="vm_ca.fileSuccess($file, $message)" flow-complete="vm_ca.uploadComplete()" flow-drop flow-drag-enter="vm_ca.dropping=true" flow-drag-leave="vm_ca.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                                <div class="drop-text hint-text" layout="row" layout-align="center center">\n                                    <span translate="EC.DROP_TO_UPLOAD">Drop to upload</span>\n                                </div>\n\n                                <div class="upload-button" layout="column" layout-align="center center">\n                                    <md-button class="md-accent md-raised" flow-btn ng-disabled="!vm_ca.crudPermissions.canEdit">\n                                        Upload\n                                    </md-button>\n                                    <span class="secondary-text mt-8">You can also drop images here to upload. Only PNG, JPG - Max. 8MB</span>\n                                </div>\n\n                                <div layout="row" layout-align="start start" layout-wrap>\n                                    <div ng-repeat="change_avatarimage in vm_ca.user.images" ng-switch="change_avatarimage.type">\n                                        <div class="user-image uploading" ng-switch-when="uploading" layout="row" layout-align="center center">\n                                            <div class="overlay" layout="column" layout-align="center center">\n                                                <md-progress-linear md-mode="determinate" value="{{change_avatarimage.file.progress() * 100}}">\n                                                </md-progress-linear>\n                                            </div>\n                                            <img class="media" flow-img="change_avatarimage.file">\n                                        </div>\n\n                                        <div class="user-image" ng-switch-when="image" layout="row" layout-align="center center">\n                                            <img class="media" ng-src="{{change_avatarimage.url}}">\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="STAFF.VOICE">VOICE</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="user-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="STAFF.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container ng-if="!vm.user.autointernal" class="md-block">\n                                <label translate="STAFF.INTERNAL">Internal</label>\n                                <input type="text" name="internal" ng-model="vm.user.internal" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'internal\'].$error" ng-show="generalForm[\'internal\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.INTERNAL_REQUIRED">Internal field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.TRANSPORT">Transport</label>\n                                <md-select name="transport" ng-model="vm.user.transport" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'udp\'">udp</md-option>\n                                    <md-option ng-value="\'tcp\'">tcp</md-option>\n                                    <md-option ng-value="\'ws\'">ws</md-option>\n                                    <md-option ng-value="\'wss\'">wss</md-option>\n                                    <md-option ng-value="\'tls\'">tls</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'transport\'].$error" ng-show="generalForm[\'transport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.TRANSPORT_REQUIRED">Transport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.NAT">NAT</label>\n                                <md-select name="nat" ng-model="vm.user.nat" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'force_rport\'">force_rport</md-option>\n                                    <md-option ng-value="\'comedia\'">comedia</md-option>\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'never\'">never</md-option>\n                                    <md-option ng-value="\'route\'">route</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.NAT"></span></div>\n                                <div ng-messages="generalForm[\'nat\'].$error" ng-show="generalForm[\'nat\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.NAT_REQUIRED">NAT field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.ALLOWCODECS">AllowCodecs</label>\n                                <md-select name="allow" ng-model="vm.user.allow" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'ulaw\'">ulaw</md-option>\n                                    <md-option ng-value="\'alaw\'">alaw</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                    <md-option ng-value="\'g722\'">g722</md-option>\n                                    <md-option ng-value="\'g729\'">g729</md-option>\n                                    <md-option ng-value="\'opus\'">opus</md-option>\n                                    <md-option ng-value="\'h264\'">h264</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="STAFF.HELP.ALLOWCODECS"></span></div>\n                                <div ng-messages="generalForm[\'allow\'].$error" ng-show="generalForm[\'allow\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.ALLOWCODECS_REQUIRED">AllowCodecs field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CONTEXT">Context</label>\n                                <md-select name="context" ng-model="vm.user.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.CALLGROUP">Callgroup</label>\n                                <input type="text" name="callgroup" ng-model="vm.user.callgroup" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.CALLGROUP"></span></div>\n                                <div ng-messages="generalForm[\'callgroup\'].$error" ng-show="generalForm[\'callgroup\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.CALLGROUP_REQUIRED">Callgroup field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.PICKUPGROUP">Pickupgroup</label>\n                                <input type="text" name="pickupgroup" ng-model="vm.user.pickupgroup" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="STAFF.HELP.PICKUPGROUP"></span></div>\n                                <div ng-messages="generalForm[\'pickupgroup\'].$error" ng-show="generalForm[\'pickupgroup\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.PICKUPGROUP_REQUIRED">Pickupgroup field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.APIKEY">ApiKey</label>\n                                <div layout="row" layout-align="center center">\n                                    <button class="md-button md-fab md-mini md-primary" ngclipboard data-clipboard-target="#copytoclipboard-apiKey" ngclipboard-success="vm.alert({title: \'copied to clipboard\', msg: e.text});" ngclipboard-error="vm.alert({title: \'error\', msg: \'copy to clipboard failed\'});">\n                                        <md-icon md-font-icon="icon-clipboard-text"></md-icon>\n                                    </button>\n                                    <input class="md-input" type="text" id="copytoclipboard-apiKey" name="apiKey" ng-model="vm.user.apiKey" ng-readonly="true">\n                                </div>\n                                <div class="hint"><span translate="STAFF.HELP.APIKEY"></span></div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="STAFF.VIDEOSUPPORT">Videosupport</label>\n                                <md-select name="videosupport" ng-model="vm.user.videosupport" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">Yes</md-option>\n                                    <md-option ng-value="\'no\'">No</md-option>\n                                    <md-option ng-value="\'always\'">Always</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'videosupport\'].$error" ng-show="generalForm[\'videosupport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="STAFF.ERRORS.VIDEOSUPPORT_REQUIRED">Videosupport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/staff/views/users/users.html",'<div id="users" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-account-multiple" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="STAFF.USERS">Users</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="STAFF.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedUsers.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedUsers =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="STAFF.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-users-count">\n                    <span>{{vm.selectedUsers.length}}</span>\n                    <span translate="STAFF.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="USERS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllUsers()" translate="STAFF.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectUsers()" translate="STAFF.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedUsers" csv-label="true" filename="users.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- USER TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedUsers" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getUsers">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="role">{{ \'STAFF.ROLE\' | translate }}</th>\n                                <th md-column md-order-by="userProfileId">{{ \'STAFF.USERPROFILE\' | translate }}</th>\n                                <th md-column md-order-by="fullname">{{ \'STAFF.FULLNAME\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'STAFF.USERNAME\' | translate }}</th>\n                                <th md-column md-order-by="email">{{ \'STAFF.EMAIL\' | translate }}</th>\n                                <th md-column md-order-by="phone">{{ \'STAFF.PHONE\' | translate }}</th>\n                                <th md-column md-order-by="mobile">{{ \'STAFF.MOBILE\' | translate }}</th>\n                                <th md-column md-order-by="internal">{{ \'STAFF.INTERNAL\' | translate }}</th>\n                                <th md-column md-order-by="disabled">{{ \'STAFF.DISABLED\' | translate }}</th>\n                                <th md-column md-order-by="blocked">{{ \'STAFF.BLOCKED\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.users.rows.length">\n                                <td md-cell colspan="11">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="STAFF.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="user" md-select-id="id" ng-repeat="user in vm.users.rows">\n                                <td md-cell ng-if="user.userpic"><img class="avatar" alt="{{user.name}}" ng-src="api/users/{{user.id}}/avatar" /></td>\n                                <td md-cell ng-if="!user.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{user.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="role ">{{ vm.arrayrole[user.role].option }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="userProfileId font-weight-600">{{ (vm.userProfiles | filter : {\'id\':user.userProfileId} : true)[0].name }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="fullname font-weight-600">{{user.fullname}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="name ">{{user.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="email ">{{user.email}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="phone ">{{user.phone}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="mobile ">{{user.mobile}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="internal ">{{user.internal}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="disabled ">\n                                    <md-icon md-colors="{color: {{user.disabled ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{user.disabled ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(user, ev) : vm.createOrEditUser($event, user)" md-cell class="blocked ">\n                                    <md-icon md-colors="{color: {{user.blocked ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{user.blocked ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(user, $event    )" translate="STAFF.EDIT_USER">\n                                                    Edit User\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.deleteconfirm(user, $event    )" translate="STAFF.DELETE_USER">\n                                                    Delete User\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'STAFF.PAGE\' | translate}}:\', rowsPerPage: \'{{\'STAFF.ROWSPERPAGE\' | translate}}:\', of: \'{{\'STAFF.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.users.count}}" md-on-paginate="vm.getUsers" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / USER TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD USER BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-user-button" ng-click="vm.createOrEditUser($event)" aria-label="add user" translate translate-attr-aria-label="STAFF.ADD_USER">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD USER BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/cannedAnswers/cannedAnswers.html",'<div id="cannedAnswers" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.CANNEDANSWERS">CannedAnswers</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedCannedAnswers.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedCannedAnswers =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-cannedAnswers-count">\n                    <span>{{vm.selectedCannedAnswers.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CANNEDANSWERS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllCannedAnswers()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectCannedAnswers()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedCannedAnswers" csv-label="true" filename="cannedAnswers.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedCannedAnswers($event)" aria-label="delete selected" translate translate-attr-label="CANNEDANSWERS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- CANNEDANSWER TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedCannedAnswers" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getCannedAnswers">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="key">{{ \'TOOLS.KEY\' | translate }}</th>\n                                <th md-column md-order-by="value">{{ \'TOOLS.VALUE\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.cannedAnswers.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="cannedAnswer" md-select-id="id" ng-repeat="cannedAnswer in vm.cannedAnswers.rows">\n                                <td md-cell ng-if="cannedAnswer.userpic"><img class="avatar" alt="{{cannedAnswer.name}}" ng-src="api/users/{{cannedAnswer.id}}/avatar" /></td>\n                                <td md-cell ng-if="!cannedAnswer.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{cannedAnswer.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditCannedAnswer($event, cannedAnswer)" md-cell class="id ">{{cannedAnswer.id}}</td>\n                                <td ng-click="vm.createOrEditCannedAnswer($event, cannedAnswer)" md-cell class="key ">{{cannedAnswer.key}}</td>\n                                <td ng-click="vm.createOrEditCannedAnswer($event, cannedAnswer)" md-cell class="value ">{{cannedAnswer.value}}</td>\n                                <td ng-click="vm.createOrEditCannedAnswer($event, cannedAnswer)" md-cell class="description ">{{cannedAnswer.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(cannedAnswer, $event    )" translate="TOOLS.EDIT_CANNEDANSWER">\n                                                    Edit CannedAnswer\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(cannedAnswer, $event    )" translate="TOOLS.DELETE_CANNEDANSWER">\n                                                    Delete CannedAnswer\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.cannedAnswers.count}}" md-on-paginate="vm.getCannedAnswers" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / CANNEDANSWER TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD CANNEDANSWER BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-cannedAnswer-button" ng-click="vm.createOrEditCannedAnswer($event)" aria-label="add cannedAnswer" translate translate-attr-aria-label="TOOLS.ADD_CANNEDANSWER">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD CANNEDANSWER BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/cannedAnswers/create/dialog.html",'<md-dialog class="cannedAnswer-dialog" aria-label="New CannedAnswer">\n    <form name="cannedAnswerForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.KEY">Key</label>\n                <input type="text" name="key" ng-model="vm.cannedAnswer.key" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="cannedAnswerForm[\'key\'].$error" ng-show="cannedAnswerForm[\'key\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.KEY_REQUIRED">Key field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="TOOLS.ERRORS.KEY_MAX_LENGTH" translate-values=\'{max: 255}\'>Key must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <textarea name="value" ng-model="vm.cannedAnswer.value" required></textarea>\n\n                <div ng-messages="cannedAnswerForm[\'value\'].$error" ng-show="cannedAnswerForm[\'value\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.cannedAnswer.description">\n\n                <div ng-messages="cannedAnswerForm[\'description\'].$error" ng-show="cannedAnswerForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newCannedAnswer" ng-click="vm.saveCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="cannedAnswerForm.$invalid || cannedAnswerForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newCannedAnswer" ng-click="vm.addNewCannedAnswer()" class="send-button md-accent md-raised" ng-disabled="cannedAnswerForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_CANNEDANSWER" translate-attr-aria-label="TOOLS.ADD_CANNEDANSWER">\n                    ADD CANNEDANSWER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newCannedAnswer" ng-click="vm.deleteCannedAnswer($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/customDashboards/create/dialog.html",'<md-dialog class="customDashboard-dialog" aria-label="New CustomDashboard">\n    <form name="customDashboardForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.customDashboard.name" ng-required="true" autofocus>\n\n                <div ng-messages="customDashboardForm[\'name\'].$error" ng-show="customDashboardForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.customDashboard.description">\n\n                <div ng-messages="customDashboardForm[\'description\'].$error" ng-show="customDashboardForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newCustomDashboard" ng-click="vm.saveCustomDashboard()" class="send-button md-accent md-raised" ng-disabled="customDashboardForm.$invalid || customDashboardForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newCustomDashboard" ng-click="vm.addNewCustomDashboard()" class="send-button md-accent md-raised" ng-disabled="customDashboardForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_CUSTOMDASHBOARD" translate-attr-aria-label="TOOLS.ADD_CUSTOMDASHBOARD">\n                    ADD CUSTOMDASHBOARD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newCustomDashboard" ng-click="vm.deleteCustomDashboard($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/customDashboards/customDashboards.html",'<div id="customDashboards" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.CUSTOMDASHBOARDS">CustomDashboards</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedCustomDashboards.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedCustomDashboards =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-customDashboards-count">\n                    <span>{{vm.selectedCustomDashboards.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CUSTOMDASHBOARDS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllCustomDashboards()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectCustomDashboards()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedCustomDashboards" csv-label="true" filename="customDashboards.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedCustomDashboards($event)" aria-label="delete selected" translate translate-attr-label="CUSTOMDASHBOARDS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- CUSTOMDASHBOARD TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedCustomDashboards" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getCustomDashboards">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.customDashboards.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="customDashboard" md-select-id="id" ng-repeat="customDashboard in vm.customDashboards.rows">\n                                <td md-cell ng-if="customDashboard.userpic"><img class="avatar" alt="{{customDashboard.name}}" ng-src="api/users/{{customDashboard.id}}/avatar" /></td>\n                                <td md-cell ng-if="!customDashboard.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{customDashboard.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(customDashboard, ev) : vm.createOrEditCustomDashboard($event, customDashboard)" md-cell class="id ">{{customDashboard.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(customDashboard, ev) : vm.createOrEditCustomDashboard($event, customDashboard)" md-cell class="name ">{{customDashboard.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(customDashboard, ev) : vm.createOrEditCustomDashboard($event, customDashboard)" md-cell class="description ">{{customDashboard.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(customDashboard, $event    )" translate="TOOLS.EDIT_CUSTOMDASHBOARD">\n                                                    Edit CustomDashboard\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.clonedialog(customDashboard, $event    )" translate="TOOLS.CLONE_CUSTOMDASHBOARD">\n                                                    clone CustomDashboard\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotodashboardgoto(customDashboard, $event    )" translate="TOOLS.GOTODASHBOARD_CUSTOMDASHBOARD">\n                                                    goToDashboard CustomDashboard\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(customDashboard, $event    )" translate="TOOLS.DELETE_CUSTOMDASHBOARD">\n                                                    Delete CustomDashboard\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.customDashboards.count}}" md-on-paginate="vm.getCustomDashboards" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / CUSTOMDASHBOARD TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD CUSTOMDASHBOARD BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-customDashboard-button" ng-click="vm.createOrEditCustomDashboard($event)" aria-label="add customDashboard" translate translate-attr-aria-label="TOOLS.ADD_CUSTOMDASHBOARD">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD CUSTOMDASHBOARD BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/customDashboards/edit/clone/clone.html",'<md-dialog class="customDashboard-dialog" aria-label="Clone CustomDashboard">\n    <form name="customDashboardForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.customDashboard.name" ng-required="true" autofocus>\n\n                <div ng-messages="customDashboardForm[\'name\'].$error" ng-show="customDashboardForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <md-button type="submit" ng-click="vm.cloneCustomDashboard()" class="send-button md-accent md-raised" ng-disabled="customDashboardForm.$invalid" aria-label="CLONE" translate="TOOLS.CLONE_CUSTOMDASHBOARD" translate-attr-aria-label="TOOLS.CLONE_CUSTOMDASHBOARD">\n                CLONE CUSTOMDASHBOARD\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/customDashboards/edit/dashboard/dialog.html",'<md-dialog class="dashboarditem-dialog" aria-label="New DashboardItem">\n    <form name="dashboarditemForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select name="type" ng-model="vm.dashboarditem.type" autofocus ng-disabled="!vm.newDashboardItem">\n\n                    <md-option ng-value="\'counter\'"> {{ \'TOOLS.COUNTER\' | translate }} </md-option>\n\n                    <md-option ng-value="\'multibar-chart\'"> {{ \'TOOLS.MULTIBARCHART\' | translate }} </md-option>\n\n                    <md-option ng-value="\'pie-chart\'"> {{ \'TOOLS.PIECHART\' | translate }} </md-option>\n\n                    <md-option ng-value="\'web-report\'"> {{ \'TOOLS.WEBREPORT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'iframe\'"> {{ \'TOOLS.IFRAME\' | translate }} </md-option>\n\n                    <md-option ng-value="\'clock\'"> {{ \'TOOLS.CLOCK\' | translate }} </md-option>\n\n                    <md-option ng-value="\'custom\'"> {{ \'TOOLS.CUSTOMTYPE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'type\'].$error" ng-show="dashboarditemForm[\'type\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TITLE">Title</label>\n                <input type="text" name="title" ng-model="vm.dashboarditem.title" md-maxlength="255" ng-required="true">\n\n                <div ng-messages="dashboarditemForm[\'title\'].$error" ng-show="dashboarditemForm[\'title\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TITLE_REQUIRED">Title field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="TOOLS.ERRORS.TITLE_MAX_LENGTH" translate-values=\'{max: 255}\'>Title must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'iframe\'" class="md-block">\n                <label translate="TOOLS.URL">Url</label>\n                <input type="url" name="attrUrl" ng-model="vm.dashboarditem.attrUrl" ng-required="true">\n\n                <div ng-messages="dashboarditemForm[\'attrUrl\'].$error" ng-show="dashboarditemForm[\'attrUrl\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="TOOLS.ERRORS.URL_MUST_VALID_URL">Url must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'custom\'" class="md-block">\n                <label translate="TOOLS.PATH">Path</label>\n                <input type="text" name="attrPath" ng-model="vm.dashboarditem.attrPath" ng-required="true">\n\n                <div ng-messages="dashboarditemForm[\'attrPath\'].$error" ng-show="dashboarditemForm[\'attrPath\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.PATH_REQUIRED">Path field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'clock\'" class="md-block">\n                <label translate="TOOLS.FORMAT">Format</label>\n                <input type="text" name="attrHourFormat" ng-model="vm.dashboarditem.attrHourFormat" ng-required="true">\n\n                <div ng-messages="dashboarditemForm[\'attrHourFormat\'].$error" ng-show="dashboarditemForm[\'attrHourFormat\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.FORMAT_REQUIRED">Format field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'clock\'" class="md-block">\n                <label translate="TOOLS.TIMEZONE">Timezone</label>\n                <md-select name="attrTimezone" ng-model="vm.dashboarditem.attrTimezone" required>\n                    <md-option ng-value="\'-12.00\'">GMT-12.00</md-option>\n                    <md-option ng-value="\'-11.00\'">GMT-11.00</md-option>\n                    <md-option ng-value="\'-10.00\'">GMT-10.00</md-option>\n                    <md-option ng-value="\'-9.00\'">GMT-9.00</md-option>\n                    <md-option ng-value="\'-8.00\'">GMT-8.00</md-option>\n                    <md-option ng-value="\'-7.00\'">GMT-7.00</md-option>\n                    <md-option ng-value="\'-6.00\'">GMT-6.00</md-option>\n                    <md-option ng-value="\'-5.00\'">GMT-5.00</md-option>\n                    <md-option ng-value="\'-4.00\'">GMT-4.00</md-option>\n                    <md-option ng-value="\'-3.30\'">GMT-3.30</md-option>\n                    <md-option ng-value="\'-3.00\'">GMT-3.00</md-option>\n                    <md-option ng-value="\'-2.00\'">GMT-2.00</md-option>\n                    <md-option ng-value="\'-1.00\'">GMT-1.00</md-option>\n                    <md-option ng-value="\'0.00\'">GMT 0.00</md-option>\n                    <md-option ng-value="\'1.00\'">GMT+1.00</md-option>\n                    <md-option ng-value="\'2.00\'">GMT+2.00</md-option>\n                    <md-option ng-value="\'3.00\'">GMT+3.00</md-option>\n                    <md-option ng-value="\'3.30\'">GMT+3.30</md-option>\n                    <md-option ng-value="\'4.00\'">GMT+4.00</md-option>\n                    <md-option ng-value="\'4.30\'">GMT+4.30</md-option>\n                    <md-option ng-value="\'5.00\'">GMT+5.00</md-option>\n                    <md-option ng-value="\'5.30\'">GMT+5.30</md-option>\n                    <md-option ng-value="\'5.45\'">GMT+5.45</md-option>\n                    <md-option ng-value="\'6.00\'">GMT+6.00</md-option>\n                    <md-option ng-value="\'6.30\'">GMT+6.30</md-option>\n                    <md-option ng-value="\'7.00\'">GMT+7.00</md-option>\n                    <md-option ng-value="\'8.00\'">GMT+8.00</md-option>\n                    <md-option ng-value="\'9.00\'">GMT+9.00</md-option>\n                    <md-option ng-value="\'9.30\'">GMT+9.30</md-option>\n                    <md-option ng-value="\'10.00\'">GMT+10.00</md-option>\n                    <md-option ng-value="\'11.00\'">GMT+11.00</md-option>\n                    <md-option ng-value="\'12.00\'">GMT+12.00</md-option>\n                    <md-option ng-value="\'13.00\'">GMT+13.00</md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrTimezone\'].$error" ng-show="dashboarditemForm[\'attrTimezone\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TIMEZONE_REQUIRED">Timezone field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'counter\'" class="md-block">\n                <label translate="TOOLS.METRIC">Metric</label>\n                <md-select name="attrMetric" ng-model="vm.dashboarditem.attrMetric" required>\n\n                    <md-option ng-value="\'total\'"> {{ \'TOOLS.TOTAL\' | translate }} </md-option>\n\n                    <md-option ng-value="\'abandoned\'"> {{ \'TOOLS.ABANDONED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'waiting\'"> {{ \'TOOLS.WAITING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'talking\'"> {{ \'TOOLS.TALKING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'answered\'"> {{ \'TOOLS.ANSWERED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'unmanaged\'"> {{ \'TOOLS.UNMANAGED\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrMetric\'].$error" ng-show="dashboarditemForm[\'attrMetric\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.METRIC_REQUIRED">Metric field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="[\'multibar-chart\', \'pie-chart\'].includes(vm.dashboarditem.type)" class="md-block">\n                <label translate="TOOLS.SERIE1">Serie1</label>\n                <md-select name="attrSerie1" ng-model="vm.dashboarditem.attrSerie1" required>\n\n                    <md-option ng-value="\'total\'"> {{ \'TOOLS.TOTAL\' | translate }} </md-option>\n\n                    <md-option ng-value="\'abandoned\'"> {{ \'TOOLS.ABANDONED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'waiting\'"> {{ \'TOOLS.WAITING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'talking\'"> {{ \'TOOLS.TALKING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'answered\'"> {{ \'TOOLS.ANSWERED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'unmanaged\'"> {{ \'TOOLS.UNMANAGED\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrSerie1\'].$error" ng-show="dashboarditemForm[\'attrSerie1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.SERIE1_REQUIRED">Serie1 field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="[\'multibar-chart\', \'pie-chart\'].includes(vm.dashboarditem.type)" class="md-block">\n                <label translate="TOOLS.SERIE2">Serie2</label>\n                <md-select name="attrSerie2" ng-model="vm.dashboarditem.attrSerie2">\n\n                    <md-option ng-value="\'null\'"> {{ \'TOOLS.NONE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'total\'"> {{ \'TOOLS.TOTAL\' | translate }} </md-option>\n\n                    <md-option ng-value="\'abandoned\'"> {{ \'TOOLS.ABANDONED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'waiting\'"> {{ \'TOOLS.WAITING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'talking\'"> {{ \'TOOLS.TALKING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'answered\'"> {{ \'TOOLS.ANSWERED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'unmanaged\'"> {{ \'TOOLS.UNMANAGED\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrSerie2\'].$error" ng-show="dashboarditemForm[\'attrSerie2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.SERIE2_REQUIRED">Serie2 field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="[\'multibar-chart\', \'pie-chart\'].includes(vm.dashboarditem.type)" class="md-block">\n                <label translate="TOOLS.SERIE3">Serie3</label>\n                <md-select name="attrSerie3" ng-model="vm.dashboarditem.attrSerie3">\n\n                    <md-option ng-value="\'null\'"> {{ \'TOOLS.NONE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'total\'"> {{ \'TOOLS.TOTAL\' | translate }} </md-option>\n\n                    <md-option ng-value="\'abandoned\'"> {{ \'TOOLS.ABANDONED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'waiting\'"> {{ \'TOOLS.WAITING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'talking\'"> {{ \'TOOLS.TALKING\' | translate }} </md-option>\n\n                    <md-option ng-value="\'answered\'"> {{ \'TOOLS.ANSWERED\' | translate }} </md-option>\n\n                    <md-option ng-value="\'unmanaged\'"> {{ \'TOOLS.UNMANAGED\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrSerie3\'].$error" ng-show="dashboarditemForm[\'attrSerie3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.SERIE3_REQUIRED">Serie3 field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'web-report\'" class="md-block">\n                <label translate="TOOLS.REPORT">Report</label>\n                <input type="search" name="report" ng-model="vm.dashboarditem.report" ng-required="true" autocomplete="off" ng-click="vm.searchReport()">\n                <md-icon md-font-icon="icon-magnify" ng-click="vm.searchReport()" aria-label="Search Report"></md-icon>\n                <div ng-messages="dashboarditemForm[\'report\'].$error" ng-show="dashboarditemForm[\'report\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.REPORT_REQUIRED">Report field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.dashboarditem.type == \'web-report\'" class="md-block">\n                <label translate="TOOLS.REFRESH">Refresh</label>\n                <input type="number" name="attrRefresh" ng-model="vm.dashboarditem.attrRefresh" min="5" ng-required="true">\n\n                <div ng-messages="dashboarditemForm[\'attrRefresh\'].$error" ng-show="dashboarditemForm[\'attrRefresh\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.REFRESH_REQUIRED">Refresh field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="TOOLS.ERRORS.REFRESH_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Refresh must be a valid greater or equal than</span> <span>5</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="[\'multibar-chart\', \'pie-chart\', \'counter\'].includes(vm.dashboarditem.type)" class="md-block">\n                <label translate="TOOLS.FILTERVOICEQUEUES">FilterVoiceQueues</label>\n                <md-select name="attrVoiceQueues" ng-model="vm.dashboarditem.attrVoiceQueues" multiple>\n                    <md-option ng-value="attrVoiceQueues.id" ng-repeat="attrVoiceQueues in vm.voiceQueues" ng-disabled="attrVoiceQueues.canSelect === false">{{ attrVoiceQueues.name }}</md-option>\n                </md-select>\n                <div ng-messages="dashboarditemForm[\'attrVoiceQueues\'].$error" ng-show="dashboarditemForm[\'attrVoiceQueues\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.FILTERVOICEQUEUES_REQUIRED">FilterVoiceQueues field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="[\'counter\', \'clock\'].includes(vm.dashboarditem.type)" class="md-block">\n                <label translate="TOOLS.FONTSIZE">FontSize</label>\n                <input type="number" name="attrFontSize" ng-model="vm.dashboarditem.attrFontSize" min="12" max="40" ng-required="true">\n\n                <div ng-messages="dashboarditemForm[\'attrFontSize\'].$error" ng-show="dashboarditemForm[\'attrFontSize\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.FONTSIZE_REQUIRED">FontSize field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="TOOLS.ERRORS.FONTSIZE_MUST_BE_GREATER_THAN_OR_EQUAL_TO">FontSize must be a valid greater or equal than</span> <span>12</span>\n                    </div>\n                    <div ng-message="max">\n                        <span translate="TOOLS.ERRORS.FONTSIZE_MUST_BE_LESS_THAN_OR_EQUAL_TO">FontSize must be a valid greater or equal than</span> <span>40</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div flex md-color-picker ng-model="vm.dashboarditem.foreground" label="{{\'TOOLS.FOREGROUND\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n            <div flex md-color-picker ng-model="vm.dashboarditem.background" label="{{\'TOOLS.BACKGROUND\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.LINK">link</label>\n                <input type="url" name="link" ng-model="vm.dashboarditem.link">\n\n                <div ng-messages="dashboarditemForm[\'link\'].$error" ng-show="dashboarditemForm[\'link\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.LINK_REQUIRED">link field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="TOOLS.ERRORS.LINK_MUST_VALID_URL">link must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newDashboardItem" ng-click="vm.saveDashboardItem()" class="send-button md-accent md-raised" ng-disabled="dashboarditemForm.$invalid || dashboarditemForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newDashboardItem" ng-click="vm.addNewDashboardItem()" class="send-button md-accent md-raised" ng-disabled="dashboarditemForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_DASHBOARDITEM" translate-attr-aria-label="TOOLS.ADD_DASHBOARDITEM">\n                    ADD DASHBOARDITEM\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newDashboardItem" ng-click="vm.deleteDashboardItem($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/customDashboards/edit/view.html",'<div id="tools-customDashboard" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-customDashboards-button md-icon-button" aria-label="Go to customDashboards" ng-click="vm.gotoCustomDashboards()" translate translate-attr-aria-label="TOOLS.GO_TO_CUSTOMDASHBOARDS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="customDashboard-image" hide-xs>\n                    <img ng-src="assets/images/business/customDashboards.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.customDashboard.id}}\n                        <span ng-if="vm.customDashboard.name">{{vm.customDashboard.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="TOOLS.CREATED_AT"></span> <span>{{vm.customDashboard.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.clonedialog(vm.customDashboard, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="clone">\n                <md-tooltip><span translate="TOOLS.CLONE_CUSTOMDASHBOARD"></span></md-tooltip>\n                <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.customDashboard, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="TOOLS.GOTO_CUSTOMDASHBOARD"></span></md-tooltip>\n                <md-icon md-font-icon="icon-forward"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveCustomDashboard()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (dashboardForm.$invalid)" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="customDashboard-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="TOOLS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.customDashboard.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.customDashboard.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.DASHBOARD">DASHBOARD</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="customDashboard-detail-form-container dashboard md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="CustomDashboardItemsController as vm_cd" ng-init="vm_cd.init(vm.customDashboard, vm.crudPermissions)" class="customDashboard-detail-form-container no-padding no-margin" layout="column">\n                            <div ng-if="vm_cd.customDashboard.widgets.length">\n                                <md-button class="md-fab md-mini md-accent" ng-click="vm_cd.createOrEditWidget()" ng-if="vm_cd.crudPermissions.canEdit" aria-label="add item">\n                                    <md-tooltip>{{ \'TOOLS.ADD_WIDGET\' | translate }}</md-tooltip>\n                                    <md-icon md-font-icon="icon-plus"></md-icon>\n                                </md-button>\n                                <md-content flex>\n                                    <ms-widget-engine config="vm_cd.customDashboard" on-edit="vm_cd.createOrEditWidget(widget)" on-delete="vm_cd.deleteWidget(widget)"></ms-widget-engine>\n                                </md-content>\n                            </div>\n                            <div ng-if="!vm_cd.customDashboard.widgets.length" layout="row" layout-align="center center" flex>\n                                <md-button class="width-130 height-130 md-accent md-raised" ng-click="vm_cd.createOrEditWidget()" aria-label="add item" layout="column">\n                                    <md-icon md-font-icon="icon-plus-circle" class="s50"></md-icon>\n                                    <span layout-wrap translate="TOOLS.ADD_WIDGET"></span>\n                                </md-button>\n                            </div>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/tools/views/customDashboards/partialViews/reports/treeReports.html",'<md-dialog class="report-selection-dialog" aria-label="Report Selection" flex="60">\n    <md-toolbar>\n        <div class="md-toolbar-tools">\n            <h2>Select Report</h2>\n            <span flex></span>\n            <md-button class="md-icon-button" ng-click="vm.closeReportDialog()">\n                <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n\n    <md-dialog-content>\n        <div class="content" md-background-bg layout="row" layout-align="start start">\n            <div layout="column" flex="30">\n                <md-card class="padding-10 scrollable" ms-scroll>\n                    <div js-tree="vm.treeConfig" tree-events-obj="vm.treeDefaultEvents" ng-model="vm.treeDefaultData" tree="vm.treeDefaultInstance"></div>\n                </md-card>\n                <md-card class="padding-10 scrollable" ms-scroll>\n                    <div js-tree="vm.treeConfig" tree-events-obj="vm.treeCustomEvents" ng-model="vm.treeCustomData" tree="vm.treeCustomInstance"></div>\n                </md-card>\n            </div>\n            <md-card flex="70">\n                <md-toolbar class="md-table-toolbar md-default">\n                    <div class="md-toolbar-tools">\n                        <span class="h2 secondary-text">{{vm.currentNode.text}}</span>\n                        <p ng-if="vm.currentPath">\n                            <span class="text-boxed">{{vm.currentPath}}</span>\n                        </p>\n                    </div>\n                </md-toolbar>\n                <md-table-container>\n                    <table md-table md-row-select ng-model="vm.selectedReport" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getReports">\n                            <tr md-row>\n                                <th md-column md-order-by="id" width="10px">{{ "ANALYTICS.ID" | translate }}</th>\n                                <th md-column md-order-by="name">{{ "ANALYTICS.NAME" | translate }}</th>\n                                <th md-column md-order-by="description">{{ "ANALYTICS.DESCRIPTION" | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ "ANALYTICS.CREATED_AT" | translate }}</th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.reports.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="ANALYTICS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="report" md-select-id="id" ng-repeat="report in vm.reports.rows">\n                                <td md-cell class="id">{{ report.id }}</td>\n                                <td md-cell class="name">{{ report.name }}</td>\n                                <td md-cell class="description">{{ report.description }}</td>\n                                <td md-cell class="createdAt">{{ report.createdAt | date: "medium" }}</td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{ \'ANALYTICS.PAGE\' | translate }}:\', rowsPerPage: \'{{ \'ANALYTICS.ROWSPERPAGE\' | translate }}:\', of: \'{{ \'ANALYTICS.OF\' | translate }}\'}" md-limit="vm.query.limit" md-limit-options="[10]" md-page="vm.query.page" md-total="{{ vm.reports.count }}" md-on-paginate="vm.getReports" md-page-select></md-table-pagination>\n            </md-card>\n        </div>\n    </md-dialog-content>\n    <md-dialog-actions layout="row">\n        <span flex></span>\n        <md-button class="md-raised" ng-click="vm.closeReportDialog()">CANCEL</md-button>\n        <md-button class="md-accent md-raised" ng-click="vm.selectReport()">CONFIRM</md-button>\n    </md-dialog-actions>\n</md-dialog>'),e.put("app/main/apps/tools/views/dispositions/create/dialog.html",'<md-dialog class="disposition-dialog" aria-label="New Disposition">\n    <form name="dispositionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.disposition.name" md-maxlength="255" ng-required="true" autofocus>\n\n                <div ng-messages="dispositionForm[\'name\'].$error" ng-show="dispositionForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span translate="TOOLS.ERRORS.NAME_MAX_LENGTH" translate-values=\'{max: 255}\'>Name must have a maximum length equal to 255</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newDisposition" ng-click="vm.saveDisposition()" class="send-button md-accent md-raised" ng-disabled="dispositionForm.$invalid || dispositionForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newDisposition" ng-click="vm.addNewDisposition()" class="send-button md-accent md-raised" ng-disabled="dispositionForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_DISPOSITION" translate-attr-aria-label="TOOLS.ADD_DISPOSITION">\n                    ADD DISPOSITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newDisposition" ng-click="vm.deleteDisposition($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/dispositions/dispositions.html",'<div id="dispositions" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.DISPOSITIONS">Dispositions</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedDispositions.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedDispositions =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-dispositions-count">\n                    <span>{{vm.selectedDispositions.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="DISPOSITIONS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllDispositions()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectDispositions()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedDispositions" csv-label="true" filename="dispositions.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedDispositions($event)" aria-label="delete selected" translate translate-attr-label="DISPOSITIONS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- DISPOSITION TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedDispositions" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getDispositions">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.dispositions.rows.length">\n                                <td md-cell colspan="3">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="disposition" md-select-id="id" ng-repeat="disposition in vm.dispositions.rows">\n                                <td md-cell ng-if="disposition.userpic"><img class="avatar" alt="{{disposition.name}}" ng-src="api/users/{{disposition.id}}/avatar" /></td>\n                                <td md-cell ng-if="!disposition.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{disposition.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditDisposition($event, disposition)" md-cell class="id ">{{disposition.id}}</td>\n                                <td ng-click="vm.createOrEditDisposition($event, disposition)" md-cell class="name ">{{disposition.name}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(disposition, $event    )" translate="TOOLS.EDIT_DISPOSITION">\n                                                    Edit Disposition\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(disposition, $event    )" translate="TOOLS.DELETE_DISPOSITION">\n                                                    Delete Disposition\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.dispositions.count}}" md-on-paginate="vm.getDispositions" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / DISPOSITION TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD DISPOSITION BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-disposition-button" ng-click="vm.createOrEditDisposition($event)" aria-label="add disposition" translate translate-attr-aria-label="TOOLS.ADD_DISPOSITION">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD DISPOSITION BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/intervals/create/dialog.html",'<md-dialog class="interval-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.interval.name" ng-required="true" autofocus>\n\n                <div ng-messages="intervalForm[\'name\'].$error" ng-show="intervalForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.interval.description">\n\n                <div ng-messages="intervalForm[\'description\'].$error" ng-show="intervalForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newInterval" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newInterval" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newInterval" ng-click="vm.deleteInterval($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/intervals/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input ng-model="vm.interval.name" type="text" name="name" placeholder="{{\'TOOLS.NAME\' | translate}}" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" md-autofocus required>\n                <div ng-messages="intervalForm.name.$error" ng-show="intervalForm.name.$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/intervals/edit/intervals/dialog.html",'<md-dialog class="interval-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="" name="name" ng-model="vm.interval.name" ng-required="true" autofocus>\n\n                <div ng-messages="intervalForm[\'name\'].$error" ng-show="intervalForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newInterval" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newInterval" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newInterval" ng-click="vm.deleteInterval($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/intervals/edit/view.html",'<div id="tools-interval" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-intervals-button md-icon-button" aria-label="Go to intervals" ng-click="vm.gotoIntervals()" translate translate-attr-aria-label="TOOLS.GO_TO_INTERVALS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="interval-image" hide-xs>\n                    <img ng-src="assets/images/business/intervals.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.interval.id}}\n                        <span ng-if="vm.interval.name">{{vm.interval.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="TOOLS.CREATED_AT"></span> <span>{{vm.interval.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveInterval()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (intervalsForm.$invalid)" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="interval-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="TOOLS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.interval.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.interval.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.INTERVALS">INTERVALS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="interval-detail-form-container intervals md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="IntervalIntervalsController as vm_dc" ng-init="vm_dc.init(vm.interval, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIntervalIntervals.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="TOOLS.INTERVALS">Intervals</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditIntervalInterval($event)" aria-label="add interval" translate translate-attr-label="TOOLS.ADD_INTERVAL">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIntervalIntervals.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedIntervalIntervals.length}} {{vm_dc.selectedIntervalIntervals.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedIntervalIntervals" csv-label="true" filename="intervals.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedIntervalIntervals($event)" aria-label="delete selected" translate translate-attr-label="INTERVALS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedIntervalIntervals" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIntervalIntervals">\n                                        <tr md-row>\n                                            <th md-column width="10px"></th>\n                                            <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                            <th md-column md-order-by="interval">{{ \'TOOLS.INTERVAL\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'TOOLS.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body ng-sortable="vm_dc.sortableTable">\n                                        <tr md-row md-select="interval" md-select-id="id" ng-repeat="interval in vm_dc.intervalIntervals.rows">\n                                            <td md-cell>\n                                                <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                            </td>\n                                            <td ng-click="vm_dc.createOrEditIntervalInterval($event, interval)" md-cell>{{interval.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditIntervalInterval($event, interval)" md-cell>{{interval.name}}</td>\n                                            <td ng-click="vm_dc.createOrEditIntervalInterval($event, interval)" md-cell>{{interval.interval}}</td>\n                                            <td ng-click="vm_dc.createOrEditIntervalInterval($event, interval)" md-cell>{{interval.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditIntervalInterval($event, interval)" translate="TOOLS.EDIT_INTERVAL">\n                                                                Edit Interval\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(interval, $event)" translate="TOOLS.DELETE_INTERVAL">\n                                                                Delete Interval\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.intervalIntervals.rows.length">\n                                            <td md-cell colspan="7">\n                                                <span class="text-boxed-ligth" translate="TOOLS.NO_INTERVALS_AVAILABLE">No intervals available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/tools/views/intervals/intervals.html",'<div id="intervals" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.INTERVALS">Intervals</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedIntervals.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedIntervals =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-intervals-count">\n                    <span>{{vm.selectedIntervals.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="INTERVALS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllIntervals()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectIntervals()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedIntervals" csv-label="true" filename="intervals.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedIntervals($event)" aria-label="delete selected" translate translate-attr-label="INTERVALS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- INTERVAL TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedIntervals" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getIntervals">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.intervals.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="interval" md-select-id="id" ng-repeat="interval in vm.intervals.rows">\n                                <td md-cell ng-if="interval.userpic"><img class="avatar" alt="{{interval.name}}" ng-src="api/users/{{interval.id}}/avatar" /></td>\n                                <td md-cell ng-if="!interval.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{interval.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(interval, ev) : vm.createOrEditInterval($event, interval)" md-cell class="id ">{{interval.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(interval, ev) : vm.createOrEditInterval($event, interval)" md-cell class="name ">{{interval.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(interval, ev) : vm.createOrEditInterval($event, interval)" md-cell class="description ">{{interval.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(interval, $event    )" translate="TOOLS.EDIT_INTERVAL">\n                                                    Edit Interval\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(interval, $event    )" translate="TOOLS.DELETE_INTERVAL">\n                                                    Delete Interval\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.intervals.count}}" md-on-paginate="vm.getIntervals" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / INTERVAL TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD INTERVAL BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-interval-button" ng-click="vm.createOrEditInterval($event)" aria-label="add interval" translate translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD INTERVAL BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/pauses/create/dialog.html",'<md-dialog class="pause-dialog" aria-label="New Pause">\n    <form name="pauseForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.pause.name" ng-required="true" autofocus>\n\n                <div ng-messages="pauseForm[\'name\'].$error" ng-show="pauseForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.pause.description">\n\n                <div ng-messages="pauseForm[\'description\'].$error" ng-show="pauseForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newPause" ng-click="vm.savePause()" class="send-button md-accent md-raised" ng-disabled="pauseForm.$invalid || pauseForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newPause" ng-click="vm.addNewPause()" class="send-button md-accent md-raised" ng-disabled="pauseForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_PAUSE" translate-attr-aria-label="TOOLS.ADD_PAUSE">\n                    ADD PAUSE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newPause" ng-click="vm.deletePause($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/pauses/pauses.html",'<div id="pauses" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.PAUSES">Pauses</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedPauses.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedPauses =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-pauses-count">\n                    <span>{{vm.selectedPauses.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="PAUSES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllPauses()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectPauses()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedPauses" csv-label="true" filename="pauses.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedPauses($event)" aria-label="delete selected" translate translate-attr-label="PAUSES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- PAUSE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedPauses" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getPauses">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.pauses.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="pause" md-select-id="id" ng-repeat="pause in vm.pauses.rows">\n                                <td md-cell ng-if="pause.userpic"><img class="avatar" alt="{{pause.name}}" ng-src="api/users/{{pause.id}}/avatar" /></td>\n                                <td md-cell ng-if="!pause.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{pause.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditPause($event, pause)" md-cell class="id ">{{pause.id}}</td>\n                                <td ng-click="vm.createOrEditPause($event, pause)" md-cell class="name ">{{pause.name}}</td>\n                                <td ng-click="vm.createOrEditPause($event, pause)" md-cell class="description ">{{pause.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(pause, $event    )" translate="TOOLS.EDIT_PAUSE">\n                                                    Edit Pause\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(pause, $event    )" translate="TOOLS.DELETE_PAUSE">\n                                                    Delete Pause\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.pauses.count}}" md-on-paginate="vm.getPauses" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / PAUSE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD PAUSE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-pause-button" ng-click="vm.createOrEditPause($event)" aria-label="add pause" translate translate-attr-aria-label="TOOLS.ADD_PAUSE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD PAUSE BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/schedules/create/dialog.html",'<md-dialog class="schedule-dialog" aria-label="New Schedule">\n    <form name="scheduleForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.schedule.name" ng-required="true" autofocus>\n\n                <div ng-messages="scheduleForm[\'name\'].$error" ng-show="scheduleForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.REPORT">Report</label>\n                <input type="search" name="report" ng-model="vm.schedule.report" ng-required="true" autocomplete="off" ng-click="vm.searchReport()">\n                <md-icon md-font-icon="icon-magnify" ng-click="vm.searchReport()" aria-label="Search Report"></md-icon>\n                <div ng-messages="scheduleForm[\'report\'].$error" ng-show="scheduleForm[\'report\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.REPORT_REQUIRED">Report field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.OUTPUT">Output</label>\n                <md-select name="output" ng-model="vm.schedule.output" required>\n                    <md-option ng-value="\'csv\'">CSV</md-option>\n                    <md-option ng-value="\'pdf\'">PDF</md-option>\n                    <md-option ng-value="\'xlsx\'">Excel</md-option>\n                </md-select>\n                <div ng-messages="scheduleForm[\'output\'].$error" ng-show="scheduleForm[\'output\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.OUTPUT_REQUIRED">Output field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.schedule.active" aria-label="Active"><span translate="TOOLS.ACTIVE">Active</span></md-switch>\n\n            </md-input-container>\n            <div class="md-block">\n                <label translate="TOOLS.VALIDITYSTART">ValidityStart</label>\n                <md-content layout="row" class="md-padding">\n                    <div flex class="md-block">\n                        <mdp-date-picker mdp-open-on-click required name="startAtDate" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" ng-model="vm.schedule.startAt" ng-init="vm.schedule.startAt = vm.getDateFromString(vm.schedule.startAt)">\n                            <div ng-messages="scheduleForm.dateRangeFrom.$error" ng-show="scheduleForm.dateRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="TOOLS.ERRORS.DATE_REQUIRED">Date is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="TOOLS.ERRORS.DATE_INVALID">Date is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-date-picker>\n                    </div>\n                    <div flex class="md-block">\n                        <mdp-time-picker mdp-open-on-click required name="startAtTime" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.schedule.startAt" ng-init="vm.schedule.startAt = vm.getDateFromString(vm.schedule.startAt)">\n                            <div ng-messages="scheduleForm.timeRangeFrom.$error" ng-show="scheduleForm.timeRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="TOOLS.ERRORS.TIME_REQUIRED">Time is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="TOOLS.ERRORS.TIME_INVALID">Time is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-time-picker>\n                    </div>\n                </md-content>\n            </div>\n            <div class="md-block">\n                <label translate="TOOLS.VALIDITYEND">ValidityEnd</label>\n                <md-content layout="row" class="md-padding">\n                    <div flex class="md-block">\n                        <mdp-date-picker mdp-open-on-click required name="endAtDate" mdp-placeholder="Date" mdp-format="YYYY-MM-DD" ng-model="vm.schedule.endAt" ng-init="vm.schedule.endAt = vm.getDateFromString(vm.schedule.endAt)">\n                            <div ng-messages="scheduleForm.dateRangeFrom.$error" ng-show="scheduleForm.dateRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="TOOLS.ERRORS.DATE_REQUIRED">Date is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="TOOLS.ERRORS.DATE_INVALID">Date is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-date-picker>\n                    </div>\n                    <div flex class="md-block">\n                        <mdp-time-picker mdp-open-on-click required name="endAtTime" mdp-placeholder="Time" mdp-format="HH:mm:ss" mdp-auto-switch="true" ng-model="vm.schedule.endAt" ng-init="vm.schedule.endAt = vm.getDateFromString(vm.schedule.endAt)">\n                            <div ng-messages="scheduleForm.timeRangeFrom.$error" ng-show="scheduleForm.timeRangeFrom.$touched" role="alert">\n                                <div ng-message="required">\n                                    <span translate="TOOLS.ERRORS.TIME_REQUIRED">Time is required</span>\n                                </div>\n                                <div ng-message="format">\n                                    <span translate="TOOLS.ERRORS.TIME_INVALID">Time is invalid</span>\n                                </div>\n                            </div>\n                        </mdp-time-picker>\n                    </div>\n                </md-content>\n            </div>\n            <div flex class="md-block">\n                <label> {{ \'TOOLS.CRON\' | translate }} ({{vm.schedule.cron}})</label>\n                <cron-selection name="cron" ng-model="vm.schedule.cron" template="assets/angular-cron-jobs/template.html" required></cron-selection>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.LAST">Last</label>\n                <input type="number" name="subtractNumber" ng-model="vm.schedule.subtractNumber" ng-required="true">\n\n                <div ng-messages="scheduleForm[\'subtractNumber\'].$error" ng-show="scheduleForm[\'subtractNumber\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.LAST_REQUIRED">Last field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.LASTUNIT">LastUnit</label>\n                <md-select name="subtractUnit" ng-model="vm.schedule.subtractUnit" required>\n                    <md-option ng-value="\'minutes\'">Minutes</md-option>\n                    <md-option ng-value="\'hours\'">Hours</md-option>\n                    <md-option ng-value="\'days\'">Days</md-option>\n                    <md-option ng-value="\'weeks\'">Weeks</md-option>\n                    <md-option ng-value="\'months\'">Months</md-option>\n                    <md-option ng-value="\'quarters\'">Quarters</md-option>\n                    <md-option ng-value="\'years\'">Years</md-option>\n                </md-select>\n                <div ng-messages="scheduleForm[\'subtractUnit\'].$error" ng-show="scheduleForm[\'subtractUnit\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.LASTUNIT_REQUIRED">LastUnit field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.schedule.sendMail" aria-label="SendMail"><span translate="TOOLS.SENDMAIL">SendMail</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.schedule.sendMail" class="md-block">\n                <label translate="TOOLS.MAILACCOUNT">MailAccount</label>\n                <md-select name="MailAccountId" ng-model="vm.schedule.MailAccountId" required>\n                    <md-option ng-value="MailAccountId.id" ng-repeat="MailAccountId in vm.mailAccounts" ng-disabled="MailAccountId.canSelect === false">{{ MailAccountId.name }}</md-option>\n                </md-select>\n                <div ng-messages="scheduleForm[\'MailAccountId\'].$error" ng-show="scheduleForm[\'MailAccountId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.MAILACCOUNT_REQUIRED">MailAccount field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.schedule.sendMail" class="md-block">\n                <label translate="TOOLS.EMAILADDRESS">EmailAddress</label>\n                <input type="text" name="email" ng-model="vm.schedule.email" ng-required="true">\n\n                <div class="hint"><span translate="TOOLS.HELP.EMAILADDRESS"></span></div>\n                <div ng-messages="scheduleForm[\'email\'].$error" ng-show="scheduleForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.EMAILADDRESS_REQUIRED">EmailAddress field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.schedule.sendMail" class="md-block">\n                <label translate="TOOLS.EMAILCCADDRESS">EmailCcAddress</label>\n                <input type="text" name="cc" ng-model="vm.schedule.cc">\n\n                <div class="hint"><span translate="TOOLS.HELP.EMAILCCADDRESS"></span></div>\n                <div ng-messages="scheduleForm[\'cc\'].$error" ng-show="scheduleForm[\'cc\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.EMAILCCADDRESS_REQUIRED">EmailCcAddress field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.schedule.sendMail" class="md-block">\n                <label translate="TOOLS.EMAILBCCADDRESS">EmailBccAddress</label>\n                <input type="text" name="bcc" ng-model="vm.schedule.bcc">\n\n                <div class="hint"><span translate="TOOLS.HELP.EMAILBCCADDRESS"></span></div>\n                <div ng-messages="scheduleForm[\'bcc\'].$error" ng-show="scheduleForm[\'bcc\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.EMAILBCCADDRESS_REQUIRED">EmailBccAddress field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.schedule.sendMail" class="md-block">\n                <md-switch ng-model="vm.schedule.sendIfEmpty" aria-label="SendIfEmpty"><span translate="TOOLS.SENDIFEMPTY">SendIfEmpty</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="" name="description" ng-model="vm.schedule.description">\n\n                <div ng-messages="scheduleForm[\'description\'].$error" ng-show="scheduleForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSchedule" ng-click="vm.saveSchedule()" class="send-button md-accent md-raised" ng-disabled="scheduleForm.$invalid || scheduleForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSchedule" ng-click="vm.addNewSchedule()" class="send-button md-accent md-raised" ng-disabled="scheduleForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_SCHEDULE" translate-attr-aria-label="TOOLS.ADD_SCHEDULE">\n                    ADD SCHEDULE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSchedule" ng-click="vm.deleteSchedule($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/schedules/partialViews/reports/treeReports.html",'<md-dialog class="report-selection-dialog" aria-label="Report Selection" flex="60">\n    <md-toolbar>\n        <div class="md-toolbar-tools">\n            <h2>Select Report</h2>\n            <span flex></span>\n            <md-button class="md-icon-button" ng-click="vm.closeReportDialog()">\n                <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n            </md-button>\n        </div>\n    </md-toolbar>\n\n    <md-dialog-content>\n        <div class="content" md-background-bg layout="row" layout-align="start start">\n            <div layout="column" flex="30">\n                <md-card class="padding-10 scrollable" ms-scroll>\n                    <div js-tree="vm.treeConfig" tree-events-obj="vm.treeDefaultEvents" ng-model="vm.treeDefaultData" tree="vm.treeDefaultInstance"></div>\n                </md-card>\n                <md-card class="padding-10 scrollable" ms-scroll>\n                    <div js-tree="vm.treeConfig" tree-events-obj="vm.treeCustomEvents" ng-model="vm.treeCustomData" tree="vm.treeCustomInstance"></div>\n                </md-card>\n            </div>\n            <md-card flex="70">\n                <md-toolbar class="md-table-toolbar md-default">\n                    <div class="md-toolbar-tools">\n                        <span class="h2 secondary-text">{{vm.currentNode.text}}</span>\n                        <p ng-if="vm.currentPath">\n                            <span class="text-boxed">{{vm.currentPath}}</span>\n                        </p>\n                    </div>\n                </md-toolbar>\n                <md-table-container>\n                    <table md-table md-row-select ng-model="vm.selectedReport" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getReports">\n                            <tr md-row>\n                                <th md-column md-order-by="id" width="10px">{{ "ANALYTICS.ID" | translate }}</th>\n                                <th md-column md-order-by="name">{{ "ANALYTICS.NAME" | translate }}</th>\n                                <th md-column md-order-by="description">{{ "ANALYTICS.DESCRIPTION" | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ "ANALYTICS.CREATED_AT" | translate }}</th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.reports.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="ANALYTICS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="report" md-select-id="id" ng-repeat="report in vm.reports.rows">\n                                <td md-cell class="id">{{ report.id }}</td>\n                                <td md-cell class="name">{{ report.name }}</td>\n                                <td md-cell class="description">{{ report.description }}</td>\n                                <td md-cell class="createdAt">{{ report.createdAt | date: "medium" }}</td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{ \'ANALYTICS.PAGE\' | translate }}:\', rowsPerPage: \'{{ \'ANALYTICS.ROWSPERPAGE\' | translate }}:\', of: \'{{ \'ANALYTICS.OF\' | translate }}\'}" md-limit="vm.query.limit" md-limit-options="[10]" md-page="vm.query.page" md-total="{{ vm.reports.count }}" md-on-paginate="vm.getReports" md-page-select></md-table-pagination>\n            </md-card>\n        </div>\n    </md-dialog-content>\n    <md-dialog-actions layout="row">\n        <span flex></span>\n        <md-button class="md-raised" ng-click="vm.closeReportDialog()">CANCEL</md-button>\n        <md-button class="md-accent md-raised" ng-click="vm.selectReport()">CONFIRM</md-button>\n    </md-dialog-actions>\n</md-dialog>'),e.put("app/main/apps/tools/views/schedules/schedules.html",'<div id="schedules" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.SCHEDULER">Scheduler</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedScheduler.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedScheduler =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-schedules-count">\n                    <span>{{vm.selectedScheduler.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SCHEDULER.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllScheduler()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectScheduler()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedScheduler" csv-label="true" filename="schedules.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedScheduler($event)" aria-label="delete selected" translate translate-attr-label="SCHEDULER.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SCHEDULE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedScheduler" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getScheduler">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="active">{{ \'TOOLS.ACTIVE\' | translate }}</th>\n                                <th md-column md-order-by="startAt">{{ \'TOOLS.VALIDITYSTART\' | translate }}</th>\n                                <th md-column md-order-by="endAt">{{ \'TOOLS.VALIDITYEND\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.schedules.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="schedule" md-select-id="id" ng-repeat="schedule in vm.schedules.rows">\n                                <td md-cell ng-if="schedule.userpic"><img class="avatar" alt="{{schedule.name}}" ng-src="api/users/{{schedule.id}}/avatar" /></td>\n                                <td md-cell ng-if="!schedule.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{schedule.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditSchedule($event, schedule)" md-cell class="id ">{{schedule.id}}</td>\n                                <td ng-click="vm.createOrEditSchedule($event, schedule)" md-cell class="name ">{{schedule.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(schedule, ev) : vm.createOrEditSchedule($event, schedule)" md-cell class="active ">\n                                    <md-icon md-colors="{color: {{schedule.active ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{schedule.active ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.createOrEditSchedule($event, schedule)" md-cell class="startAt ">{{schedule.startAt | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditSchedule($event, schedule)" md-cell class="endAt ">{{schedule.endAt | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditSchedule($event, schedule)" md-cell class="description ">{{schedule.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(schedule, $event    )" translate="TOOLS.EDIT_SCHEDULE">\n                                                    Edit Schedule\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.runconfirm(schedule, $event    )" translate="TOOLS.RUN_SCHEDULE">\n                                                    Run Schedule\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(schedule, $event    )" translate="TOOLS.DELETE_SCHEDULE">\n                                                    Delete Schedule\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.schedules.count}}" md-on-paginate="vm.getScheduler" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SCHEDULE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD SCHEDULE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-schedule-button" ng-click="vm.createOrEditSchedule($event)" aria-label="add schedule" translate translate-attr-aria-label="TOOLS.ADD_SCHEDULE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD SCHEDULE BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/sounds/create/dialog.html",'<md-dialog class="sound-dialog" aria-label="New Sound">\n    <form name="soundForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.sound.name" ng-required="true" autofocus>\n\n                <div ng-messages="soundForm[\'name\'].$error" ng-show="soundForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.sound.description">\n\n                <div ng-messages="soundForm[\'description\'].$error" ng-show="soundForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newSound" ng-click="vm.saveSound()" class="send-button md-accent md-raised" ng-disabled="soundForm.$invalid || soundForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newSound" ng-click="vm.addNewSound()" class="send-button md-accent md-raised" ng-disabled="soundForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_SOUND" translate-attr-aria-label="TOOLS.ADD_SOUND">\n                    ADD SOUND\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newSound" ng-click="vm.deleteSound($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/sounds/sounds.html",'<div id="sounds" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.SOUNDS">Sounds</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedSounds.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedSounds =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-sounds-count">\n                    <span>{{vm.selectedSounds.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SOUNDS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllSounds()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectSounds()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedSounds" csv-label="true" filename="sounds.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedSounds($event)" aria-label="delete selected" translate translate-attr-label="SOUNDS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SOUND TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedSounds" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getSounds">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="audio">{{ \'TOOLS.AUDIO\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.sounds.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="sound" md-select-id="id" ng-repeat="sound in vm.sounds.rows">\n                                <td md-cell ng-if="sound.userpic"><img class="avatar" alt="{{sound.name}}" ng-src="api/users/{{sound.id}}/avatar" /></td>\n                                <td md-cell ng-if="!sound.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{sound.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditSound($event, sound)" md-cell class="id ">{{sound.id}}</td>\n                                <td ng-click="vm.createOrEditSound($event, sound)" md-cell class="name ">{{sound.name}}</td>\n\n                                <td md-cell class="audio ">\n                                    \x3c!-- audio recording directive --\x3e\n                                    <ms-recording id="sound.id" model="\'sound\'"></ms-recording>\n                                    \x3c!-- / audio recording directive --\x3e\n                                </td>\n                                <td ng-click="vm.createOrEditSound($event, sound)" md-cell class="description ">{{sound.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(sound, $event    )" translate="TOOLS.EDIT_SOUND">\n                                                    Edit Sound\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.downloadfile2(sound, $event  , \'sounds\'   )" translate="TOOLS.DOWNLOAD_SOUND">\n                                                    Download Sound\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(sound, $event    )" translate="TOOLS.DELETE_SOUND">\n                                                    Delete Sound\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.sounds.count}}" md-on-paginate="vm.getSounds" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SOUND TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- UPLOAD SOUND BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="upload-sound-button" ng-click="vm.uploadSound($event)" aria-label="upload sound" translate translate-attr-aria-label="TOOLS.UPLOAD_SOUND">\n        <md-icon md-font-icon="icon-upload"></md-icon>\n    </md-button>\n    \x3c!-- / UPLOAD SOUND BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/sounds/upload/dialog.html",'<md-dialog class="upload-dialog" aria-label="Upload ">\n    <form name="uploadForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <div id="sound-uploader" ng-hide="vm.uploadState == \'uploading\'" flow-init="vm.ngFlowOptions" flow-name="vm.ngFlow.flow" flow-files-submitted="vm.upload()" flow-file-added="vm.fileAdded($file)" flow-file-success="vm.fileSuccess($file, $message)" flow-error="vm.uploadError($file, $message)" flow-complete="vm.uploadComplete()" flow-drop flow-drag-enter="vm.dropping=true" flow-drag-leave="vm.dropping=false" ng-class="{\'dropping\':vm.dropping}">\n\n                <div class="drop-text hint-text" layout="row" layout-align="center center">\n                    <span translate="TOOLS.DROP_TO_UPLOAD">Drop to upload</span>\n                </div>\n\n                <div class="upload-button" layout="column" layout-align="center center">\n                    <md-button class="md-accent md-raised" flow-btn>\n                        Upload\n                    </md-button>\n                    <span class="secondary-text mt-8" translate="TOOLS.DROP_TO_UPLOAD_MESSAGE">You can also drop your file here to upload.</span>\n                </div>\n            </div>\n\n            <div layout="column" layout-align="space-between center" ng-show="vm.uploadState == \'uploading\'">\n                <div>\n                    <span translate="TOOLS.UPLOADING">Uploading</span>\n                    <span>{{vm.sound.file.name}}</span>\n                </div>\n                <md-progress-linear md-mode="indeterminate"></md-progress-linear>\n            </div>\n\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center"></div>\n            <div layout="row">\n                <md-button ng-click="vm.closeDialog()" ng-hide="vm.uploadState == \'uploading\'" class="md-accent md-raised" aria-label="FINISH" translate="TOOLS.FINISH" translate-attr-aria-label="TOOLS.FINISH">\n                    FINISH\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/tags/create/dialog.html",'<md-dialog class="tag-dialog" aria-label="New Tag">\n    <form name="tagForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.tag.name" ng-required="true" autofocus>\n\n                <div ng-messages="tagForm[\'name\'].$error" ng-show="tagForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.tag.description">\n\n                <div ng-messages="tagForm[\'description\'].$error" ng-show="tagForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div flex md-color-picker ng-model="vm.tag.color" label="{{\'TOOLS.COLOR\' | translate}}" md-color-hex="true" md-color-rgb="false" md-color-hsl="false" md-color-history="false" md-color-material-palette="false" md-color-alpha-channel="false" open-on-input="true"></div>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newTag" ng-click="vm.saveTag()" class="send-button md-accent md-raised" ng-disabled="tagForm.$invalid || tagForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newTag" ng-click="vm.addNewTag()" class="send-button md-accent md-raised" ng-disabled="tagForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_TAG" translate-attr-aria-label="TOOLS.ADD_TAG">\n                    ADD TAG\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newTag" ng-click="vm.deleteTag($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/tags/tags.html",'<div id="tags" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.TAGS">Tags</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedTags.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedTags =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-tags-count">\n                    <span>{{vm.selectedTags.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="TAGS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllTags()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectTags()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedTags" csv-label="true" filename="tags.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedTags($event)" aria-label="delete selected" translate translate-attr-label="TAGS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- TAG TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedTags" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTags">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column md-order-by="color">{{ \'TOOLS.COLOR\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.tags.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="tag" md-select-id="id" ng-repeat="tag in vm.tags.rows">\n                                <td md-cell ng-if="tag.userpic"><img class="avatar" alt="{{tag.name}}" ng-src="api/users/{{tag.id}}/avatar" /></td>\n                                <td md-cell ng-if="!tag.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{tag.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditTag($event, tag)" md-cell class="id ">{{tag.id}}</td>\n                                <td ng-click="vm.createOrEditTag($event, tag)" md-cell class="name ">{{tag.name}}</td>\n                                <td ng-click="vm.createOrEditTag($event, tag)" md-cell class="description ">{{tag.description}}</td>\n                                <td ng-click="vm.createOrEditTag($event, tag)" md-cell class="color ">{{tag.color}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(tag, $event    )" translate="TOOLS.EDIT_TAG">\n                                                    Edit Tag\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(tag, $event    )" translate="TOOLS.DELETE_TAG">\n                                                    Delete Tag\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.tags.count}}" md-on-paginate="vm.getTags" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / TAG TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD TAG BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-tag-button" ng-click="vm.createOrEditTag($event)" aria-label="add tag" translate translate-attr-aria-label="TOOLS.ADD_TAG">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD TAG BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/templates/create/dialog.html",'<md-dialog class="template-dialog" aria-label="New Template">\n    <form name="templateForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.template.name" ng-required="true" autofocus>\n\n                <div ng-messages="templateForm[\'name\'].$error" ng-show="templateForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="md-block">\n                <label class="md-caption grey-fg" translate="TOOLS.CONTENT">Content</label>\n                <textarea aria-label="Content html" ckeditor="{ skin: \'office2013\', language: \'en\', allowedContent: true, extraPlugins: \'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64\', toolbarGroups: [{ name: \'styles\', groups: [\'styles\'] }, { name: \'clipboard\', groups: [\'undo\'] }, { name: \'colors\', groups: [\'colors\'] }, { name: \'basicstyles\', groups: [\'basicstyles\'] }, { name: \'paragraph\', groups: [\'list\', \'indent\', \'align\'] }, { name: \'mode\' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: \'8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt\',  removePlugins: \'magicline\' }" ng-model="vm.template.html"></textarea>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.template.description">\n\n                <div ng-messages="templateForm[\'description\'].$error" ng-show="templateForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newTemplate" ng-click="vm.saveTemplate()" class="send-button md-accent md-raised" ng-disabled="templateForm.$invalid || templateForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newTemplate" ng-click="vm.addNewTemplate()" class="send-button md-accent md-raised" ng-disabled="templateForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_TEMPLATE" translate-attr-aria-label="TOOLS.ADD_TEMPLATE">\n                    ADD TEMPLATE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newTemplate" ng-click="vm.deleteTemplate($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/templates/templates.html",'<div id="templates" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.TEMPLATES">Templates</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedTemplates.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedTemplates =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-templates-count">\n                    <span>{{vm.selectedTemplates.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="TEMPLATES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllTemplates()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectTemplates()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedTemplates" csv-label="true" filename="templates.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedTemplates($event)" aria-label="delete selected" translate translate-attr-label="TEMPLATES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- TEMPLATE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedTemplates" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTemplates">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.templates.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="template" md-select-id="id" ng-repeat="template in vm.templates.rows">\n                                <td md-cell ng-if="template.userpic"><img class="avatar" alt="{{template.name}}" ng-src="api/users/{{template.id}}/avatar" /></td>\n                                <td md-cell ng-if="!template.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{template.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditTemplate($event, template)" md-cell class="id ">{{template.id}}</td>\n                                <td ng-click="vm.createOrEditTemplate($event, template)" md-cell class="name ">{{template.name}}</td>\n                                <td ng-click="vm.createOrEditTemplate($event, template)" md-cell class="description ">{{template.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(template, $event    )" translate="TOOLS.EDIT_TEMPLATE">\n                                                    Edit Template\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(template, $event    )" translate="TOOLS.DELETE_TEMPLATE">\n                                                    Delete Template\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.templates.count}}" md-on-paginate="vm.getTemplates" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / TEMPLATE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD TEMPLATE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-template-button" ng-click="vm.createOrEditTemplate($event)" aria-label="add template" translate translate-attr-aria-label="TOOLS.ADD_TEMPLATE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD TEMPLATE BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/triggers/create/dialog.html",'<md-dialog class="trigger-dialog" aria-label="New Trigger">\n    <form name="triggerForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.trigger.name" ng-required="true" autofocus>\n\n                <div ng-messages="triggerForm[\'name\'].$error" ng-show="triggerForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.CHANNEL">Channel</label>\n                <md-select name="channel" ng-model="vm.trigger.channel" required ng-disabled="!vm.newTrigger">\n\n                    <md-option ng-value="\'voice\'"> {{ \'TOOLS.VOICE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'openchannel\'" ng-if="vm.license.openchannel"> {{ \'TOOLS.OPENCHANNEL\' | translate }} </md-option>\n\n                    <md-option ng-value="\'chat\'" ng-if="vm.license.chat"> {{ \'TOOLS.CHAT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'mail\'" ng-if="vm.license.mail"> {{ \'TOOLS.MAIL\' | translate }} </md-option>\n\n                    <md-option ng-value="\'sms\'" ng-if="vm.license.messaging"> {{ \'TOOLS.SMS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'fax\'" ng-if="vm.license.fax"> {{ \'TOOLS.FAX\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="triggerForm[\'channel\'].$error" ng-show="triggerForm[\'channel\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.trigger.status" aria-label="Status"><span translate="TOOLS.STATUS">Status</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.trigger.description">\n\n                <div ng-messages="triggerForm[\'description\'].$error" ng-show="triggerForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newTrigger" ng-click="vm.saveTrigger()" class="send-button md-accent md-raised" ng-disabled="triggerForm.$invalid || triggerForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newTrigger" ng-click="vm.addNewTrigger()" class="send-button md-accent md-raised" ng-disabled="triggerForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_TRIGGER" translate-attr-aria-label="TOOLS.ADD_TRIGGER">\n                    ADD TRIGGER\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newTrigger" ng-click="vm.deleteTrigger($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/triggers/edit/actions/dialog.html",'<md-dialog class="action-dialog" aria-label="New Action">\n    <form name="actionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.ACTION">Action</label>\n                <md-select name="action" ng-model="vm.action.action" ng-init="vm.onActionInit()" autofocus required ng-disabled="!vm.newAction">\n\n                    <md-option ng-value="\'contactManager\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.CONTACT_MANAGER\' | translate }} </md-option>\n\n                    <md-option ng-value="\'integration\'" ng-if="vm.trigger.channel == \'voice\' && ((vm.newAction && vm.hasModulePermissions.Integrations) || !vm.newAction)"> {{ \'TOOLS.INTEGRATIONS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'motionbar\'"> {{ \'TOOLS.MOTION_BAR\' | translate }} </md-option>\n\n                    <md-option ng-value="\'jscripty\'"> {{ \'TOOLS.JSCRIPTY\' | translate }} </md-option>\n\n                    <md-option ng-value="\'urlForward\'"> {{ \'TOOLS.URL_FORWARD\' | translate }} </md-option>\n\n                    <md-option ng-value="\'browser\'"> {{ \'TOOLS.BROWSER\' | translate }} </md-option>\n\n                    <md-option ng-value="\'bot\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.BOT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'script\'"> {{ \'TOOLS.SCRIPT\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'action\'].$error" ng-show="actionForm[\'action\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACTION_REQUIRED">Action field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'jscripty\'" class="md-block">\n                <label translate="TOOLS.PROJECT">Project</label>\n                <md-select name="data1" ng-model="vm.action.data1" required>\n                    <md-option ng-value="\'\'+data1.id" ng-repeat="data1 in vm.projects" ng-disabled="data1.canSelect === false">{{ data1.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.PROJECT_REQUIRED">Project field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'browser\'" class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select name="data1" ng-model="vm.action.data1" required>\n                    <md-option ng-value="\'0\'">Popup</md-option>\n                    <md-option ng-value="\'1\'">CTI URL</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'contactManager\'" class="md-block">\n                <label translate="TOOLS.LIST">List</label>\n                <md-select name="data1" ng-model="vm.action.data1" required>\n                    <md-option ng-value="\'\'+data1.id" ng-repeat="data1 in vm.lists" ng-disabled="data1.canSelect === false">{{ data1.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.LIST_REQUIRED">List field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'contactManager\'" class="md-block">\n                <label translate="TOOLS.AUTOCREATECONTACT">AutoCreateContact</label>\n                <md-select name="data2" ng-model="vm.action.data2" required>\n\n                    <md-option ng-value="\'1\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                    <md-option ng-value="\'0\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.AUTOCREATECONTACT_REQUIRED">AutoCreateContact field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'urlForward\'" class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select name="data1" ng-model="vm.action.data1" required>\n                    <md-option ng-value="\'GET\'">GET</md-option>\n                    <md-option ng-value="\'POST\'">POST</md-option>\n                    <md-option ng-value="\'PUT\'">PUT</md-option>\n                    <md-option ng-value="\'DELETE\'">DELETE</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'urlForward\'" class="md-block">\n                <label translate="TOOLS.URL">Url</label>\n                <input type="url" name="data2" ng-model="vm.action.data2" ng-required="true">\n\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="TOOLS.ERRORS.URL_MUST_VALID_URL">Url must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'urlForward\'" class="md-block">\n                <label translate="TOOLS.HEADERS">Headers</label>\n                <textarea name="data6" ng-model="vm.action.data6"></textarea>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'urlForward\' && (vm.action.data1 == \'POST\' || vm.action.data1 == \'PUT\')" class="md-block">\n                <label translate="TOOLS.BODY">Body</label>\n                <textarea name="data7" ng-model="vm.action.data7"></textarea>\n                <div class="hint"><span translate="TOOLS.HELP.BODY"></span></div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'script\'" class="md-block">\n                <label translate="TOOLS.SCRIPT_TYPE">Script_Type</label>\n                <input type="input" name="data2" ng-model="vm.action.data2">\n\n                <div class="hint"><span translate="TOOLS.HELP.SCRIPT_TYPE"></span></div>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.SCRIPT_TYPE_REQUIRED">Script_Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'script\'" class="md-block">\n                <label translate="TOOLS.SCRIPT_INFO">Script_Info</label>\n                <input type="input" name="data1" ng-model="vm.action.data1">\n\n                <div class="hint"><span translate="TOOLS.HELP.SCRIPT_INFO"></span></div>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.SCRIPT_INFO_REQUIRED">Script_Info field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'script\'" class="md-block">\n                <label translate="TOOLS.SCRIPT">Script</label>\n                <textarea name="data3" ng-model="vm.action.data3" required></textarea>\n                <div class="hint"><span translate="TOOLS.HELP.SCRIPT"></span></div>\n\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.SCRIPT_REQUIRED">Script field is required</span>\n                    </div>\n\n\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\'" class="md-block">\n                <label translate="TOOLS.INTEGRATION">Integration</label>\n                <md-select name="data1" ng-model="vm.action.data1" ng-init="vm.onIntegrationInit()" required>\n                    <md-option ng-value="\'zendesk\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1301]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1301])">Zendesk</md-option>\n                    <md-option ng-value="\'salesforce\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1302]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1302])">Salesforce</md-option>\n                    <md-option ng-value="\'sugarcrm\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1305]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1305])">SugarCRM</md-option>\n                    <md-option ng-value="\'freshdesk\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1303]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1303])">Freshdesk</md-option>\n                    <md-option ng-value="\'desk\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1306]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1306])">Desk</md-option>\n                    <md-option ng-value="\'zoho\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1307]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1307])">Zoho</md-option>\n                    <md-option ng-value="\'vtiger\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1308]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1308])">vTiger</md-option>\n                    <md-option ng-value="\'dynamics365\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1309]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1309])">Dynamics365</md-option>\n                    <md-option ng-value="\'servicenow\'" ng-if="(vm.newAction && vm.hasSectionPermissions[1310]) || !vm.newAction" ng-disabled="(!vm.newAction && !vm.hasSectionPermissions[1310])">ServiceNow</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.INTEGRATION_REQUIRED">Integration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'zendesk\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1301])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.zendeskAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'desk\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1306])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.deskAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'zoho\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1307])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.zohoAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'salesforce\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1302])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.salesforceAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'sugarcrm\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1305])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.sugarcrmAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'freshdesk\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1303])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.freshdeskAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'vtiger\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1308])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.vtigerAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'dynamics365\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1309])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.dynamics365Accounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'servicenow\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="data2" ng-model="vm.action.data2" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1310])">\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.servicenowAccounts" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'zendesk\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1301])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.zendeskConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'desk\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1306])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.deskConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'zoho\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1307])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.zohoConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'salesforce\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1302])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.salesforceConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'sugarcrm\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1305])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.sugarcrmConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'freshdesk\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1303])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.freshdeskConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'vtiger\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1308])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.vtigerConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'dynamics365\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1309])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.dynamics365Configurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'integration\' && vm.action.data1 == \'servicenow\' && vm.action.data2" class="md-block">\n                <label translate="TOOLS.CONFIGURATION">Configuration</label>\n                <md-select name="data3" ng-model="vm.action.data3" required ng-disabled="!vm.newAction && (!vm.newAction && !vm.hasSectionPermissions[1310])">\n                    <md-option ng-value="\'\'+data3.id" ng-repeat="data3 in vm.servicenowConfigurations | filter:{AccountId:vm.action.data2}" ng-disabled="data3.canSelect === false">{{ data3.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.CONFIGURATION_REQUIRED">Configuration field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'motionbar\'" class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select name="data1" ng-model="vm.action.data1" required>\n                    <md-option ng-value="\'0\'">Popup</md-option>\n                    <md-option ng-value="\'1\'">CTI URL</md-option>\n                    <md-option ng-value="\'2\'">Windows App</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data1\'].$error" ng-show="actionForm[\'data1\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'motionbar\' && vm.action.data1 == \'1\'" class="md-block">\n                <label translate="TOOLS.URL">Url</label>\n                <input type="url" name="data2" ng-model="vm.action.data2" ng-required="true">\n\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="TOOLS.ERRORS.URL_MUST_VALID_URL">Url must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'motionbar\' && vm.action.data1 == \'2\'" class="md-block">\n                <label translate="TOOLS.APPLICATION">Application</label>\n                <input type="text" name="data2" ng-model="vm.action.data2" ng-required="true">\n\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.APPLICATION_REQUIRED">Application field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'motionbar\' && vm.action.data1 == \'2\'" class="md-block">\n                <label translate="TOOLS.ARGUMENTS">Arguments</label>\n                <input type="text" name="data3" ng-model="vm.action.data3">\n\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ARGUMENTS_REQUIRED">Arguments field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'motionbar\' && vm.action.data1 == \'0\'" class="md-block">\n                <label translate="TOOLS.TEMPLATE">Template</label>\n                <md-select name="data2" ng-model="vm.action.data2" required>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.templates" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TEMPLATE_REQUIRED">Template field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'browser\' && vm.action.data1 == \'0\'" class="md-block">\n                <label translate="TOOLS.TEMPLATE">Template</label>\n                <md-select name="data2" ng-model="vm.action.data2" required>\n                    <md-option ng-value="\'\'+data2.id" ng-repeat="data2 in vm.templates" ng-disabled="data2.canSelect === false">{{ data2.name }}</md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.TEMPLATE_REQUIRED">Template field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'browser\' && vm.action.data1 == \'1\'" class="md-block">\n                <label translate="TOOLS.URL">Url</label>\n                <input type="url" name="data2" ng-model="vm.action.data2" ng-required="true">\n\n                <div ng-messages="actionForm[\'data2\'].$error" ng-show="actionForm[\'data2\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                    <div ng-message="url">\n                        <span translate="TOOLS.ERRORS.URL_MUST_VALID_URL">Url must be a valid url http://www.xcally.com</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="(vm.action.action == \'motionbar\' || vm.action.action == \'browser\') && vm.action.data1 == \'1\'" class="md-block">\n                <label translate="TOOLS.EVENTVARIABLES">EventVariables</label>\n                <md-select name="data3" ng-model="vm.action.data3" required>\n\n                    <md-option ng-value="\'1\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                    <md-option ng-value="\'0\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                </md-select>\n                <div class="hint"><span translate="TOOLS.HELP.EVENTVARIABLES"></span></div>\n                <div ng-messages="actionForm[\'data3\'].$error" ng-show="actionForm[\'data3\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.EVENTVARIABLES_REQUIRED">EventVariables field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'browser\' && vm.action.data1 == \'1\'" class="md-block">\n                <label translate="TOOLS.LOCATION">Location</label>\n                <md-select name="data4" ng-model="vm.action.data4" required>\n\n                    <md-option ng-value="\'0\'"> {{ \'TOOLS.NEW_TAB\' | translate }} </md-option>\n\n                    <md-option ng-value="\'1\'"> {{ \'TOOLS.NEW_WINDOW\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="actionForm[\'data4\'].$error" ng-show="actionForm[\'data4\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.LOCATION_REQUIRED">Location field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'browser\' && vm.action.data4 == \'1\'" class="md-block">\n                <label translate="TOOLS.WINDOWWIDTH">WindowWidth</label>\n                <input type="text" name="data5" ng-model="vm.action.data5">\n\n                <div ng-messages="actionForm[\'data5\'].$error" ng-show="actionForm[\'data5\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.WINDOWWIDTH_REQUIRED">WindowWidth field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.action.action == \'browser\' && vm.action.data4 == \'1\'" class="md-block">\n                <label translate="TOOLS.WINDOWHEIGHT">WindowHeight</label>\n                <input type="text" name="data6" ng-model="vm.action.data6">\n\n                <div ng-messages="actionForm[\'data6\'].$error" ng-show="actionForm[\'data6\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.WINDOWHEIGHT_REQUIRED">WindowHeight field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newAction" ng-click="vm.saveAction()" class="send-button md-accent md-raised" ng-disabled="actionForm.$invalid || actionForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newAction" ng-click="vm.addNewAction()" class="send-button md-accent md-raised" ng-disabled="actionForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_ACTION" translate-attr-aria-label="TOOLS.ADD_ACTION">\n                    ADD ACTION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newAction" ng-click="vm.deleteAction($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/triggers/edit/allconditions/dialog.html",'<md-dialog class="allCondition-dialog" aria-label="New AllCondition">\n    <form name="allConditionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.FIELD">Field</label>\n                <md-select name="field" ng-model="vm.allCondition.field" autofocus required>\n\n                    <md-option ng-value="\'queue\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'lastevent\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.CALL_STATUS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'routeId\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.OUTBOUNDROUTE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'agent\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.AGENT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'account\'" ng-if="vm.trigger.channel != \'voice\'"> {{ \'TOOLS.ACCOUNT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'interaction\'" ng-if="vm.trigger.channel != \'voice\'"> {{ \'TOOLS.INTERACTION\' | translate }} </md-option>\n\n                    <md-option ng-value="\'message\'" ng-if="vm.trigger.channel != \'voice\'"> {{ \'TOOLS.MESSAGE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'field\'].$error" ng-show="allConditionForm[\'field\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.FIELD_REQUIRED">Field field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.OPERATOR">Operator</label>\n                <md-select name="operator" ng-model="vm.allCondition.operator" required>\n\n                    <md-option ng-value="\'equals\'"> {{ \'TOOLS.EQUALS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'not_equals\'"> {{ \'TOOLS.NOT_EQUALS\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'operator\'].$error" ng-show="allConditionForm[\'operator\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.OPERATOR_REQUIRED">Operator field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'account\' && vm.trigger.channel == \'chat\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.chatAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'account\' && vm.trigger.channel == \'mail\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.mailAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'account\' && vm.trigger.channel == \'sms\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.smsAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'account\' && vm.trigger.channel == \'fax\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.faxAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'account\' && vm.trigger.channel == \'openchannel\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.openchannelAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'queue\' && vm.trigger.channel == \'voice\'" class="md-block">\n                <label translate="TOOLS.QUEUE">Queue</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.name" ng-repeat="value in vm.queues" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'routeId\' && vm.trigger.channel == \'voice\'" class="md-block">\n                <label translate="TOOLS.OUTBOUNDROUTE">OutboundRoute</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.outboundRoutes" ng-disabled="value.canSelect === false">{{ value.exten }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.OUTBOUNDROUTE_REQUIRED">OutboundRoute field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'agent\' && vm.trigger.channel == \'voice\'" class="md-block">\n                <label translate="TOOLS.AGENT">Agent</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="value.name" ng-repeat="value in vm.agents" ng-disabled="value.canSelect === false">{{ value.fullname }}</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'lastevent\'" class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="\'abandoned\'">Abandon</md-option>\n                    <md-option ng-value="\'complete\'">Hangup</md-option>\n                    <md-option ng-value="\'rejected\'">Reject</md-option>\n                    <md-option ng-value="\'called\'">Ring</md-option>\n                    <md-option ng-value="\'connect\'">Answer</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'interaction\' && vm.trigger.channel != \'voice\'" class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="\'opened\'">Opened</md-option>\n                    <md-option ng-value="\'closed\'">Closed</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.allCondition.field == \'message\' && vm.trigger.channel != \'voice\'" class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <md-select name="value" ng-model="vm.allCondition.value" required>\n                    <md-option ng-value="\'in\'">Incoming</md-option>\n                    <md-option ng-value="\'out\'">Outgoing</md-option>\n                    <md-option ng-value="\'accept\'">Accepted</md-option>\n                    <md-option ng-value="\'reject\'">Rejected</md-option>\n                </md-select>\n                <div ng-messages="allConditionForm[\'value\'].$error" ng-show="allConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newAllCondition" ng-click="vm.saveAllCondition()" class="send-button md-accent md-raised" ng-disabled="allConditionForm.$invalid || allConditionForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newAllCondition" ng-click="vm.addNewAllCondition()" class="send-button md-accent md-raised" ng-disabled="allConditionForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_ALLCONDITION" translate-attr-aria-label="TOOLS.ADD_ALLCONDITION">\n                    ADD ALLCONDITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newAllCondition" ng-click="vm.deleteAllCondition($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/triggers/edit/anyconditions/dialog.html",'<md-dialog class="anyCondition-dialog" aria-label="New AnyCondition">\n    <form name="anyConditionForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.FIELD">Field</label>\n                <md-select name="field" ng-model="vm.anyCondition.field" autofocus required>\n\n                    <md-option ng-value="\'queue\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.QUEUE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'lastevent\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.CALL_STATUS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'routeId\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.OUTBOUNDROUTE\' | translate }} </md-option>\n\n                    <md-option ng-value="\'name\'" ng-if="vm.trigger.channel == \'voice\'"> {{ \'TOOLS.AGENT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'account\'" ng-if="vm.trigger.channel != \'voice\'"> {{ \'TOOLS.ACCOUNT\' | translate }} </md-option>\n\n                    <md-option ng-value="\'interaction\'" ng-if="vm.trigger.channel != \'voice\'"> {{ \'TOOLS.INTERACTION\' | translate }} </md-option>\n\n                    <md-option ng-value="\'message\'" ng-if="vm.trigger.channel != \'voice\'"> {{ \'TOOLS.MESSAGE\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'field\'].$error" ng-show="anyConditionForm[\'field\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.FIELD_REQUIRED">Field field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.OPERATOR">Operator</label>\n                <md-select name="operator" ng-model="vm.anyCondition.operator" required>\n\n                    <md-option ng-value="\'equals\'"> {{ \'TOOLS.EQUALS\' | translate }} </md-option>\n\n                    <md-option ng-value="\'not_equals\'"> {{ \'TOOLS.NOT_EQUALS\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'operator\'].$error" ng-show="anyConditionForm[\'operator\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.OPERATOR_REQUIRED">Operator field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'account\' && vm.trigger.channel == \'chat\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.chatAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'account\' && vm.trigger.channel == \'mail\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.mailAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'account\' && vm.trigger.channel == \'sms\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.smsAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'account\' && vm.trigger.channel == \'fax\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.faxAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'account\' && vm.trigger.channel == \'openchannel\'" class="md-block">\n                <label translate="TOOLS.ACCOUNT">Account</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.openchannelAccounts" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.ACCOUNT_REQUIRED">Account field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'queue\' && vm.trigger.channel == \'voice\'" class="md-block">\n                <label translate="TOOLS.QUEUE">Queue</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.name" ng-repeat="value in vm.queues" ng-disabled="value.canSelect === false">{{ value.name }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'routeId\' && vm.trigger.channel == \'voice\'" class="md-block">\n                <label translate="TOOLS.OUTBOUNDROUTE">OutboundRoute</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.id" ng-repeat="value in vm.outboundRoutes" ng-disabled="value.canSelect === false">{{ value.exten }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.OUTBOUNDROUTE_REQUIRED">OutboundRoute field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'agent\' && vm.trigger.channel == \'voice\'" class="md-block">\n                <label translate="TOOLS.AGENT">Agent</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="value.name" ng-repeat="value in vm.agents" ng-disabled="value.canSelect === false">{{ value.fullname }}</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.AGENT_REQUIRED">Agent field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'lastevent\'" class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="\'abandoned\'">Abandon</md-option>\n                    <md-option ng-value="\'complete\'">Hangup</md-option>\n                    <md-option ng-value="\'rejected\'">Reject</md-option>\n                    <md-option ng-value="\'called\'">Ring</md-option>\n                    <md-option ng-value="\'connect\'">Answer</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'interaction\' && vm.trigger.channel != \'voice\'" class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="\'opened\'">Opened</md-option>\n                    <md-option ng-value="\'closed\'">Closed</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.anyCondition.field == \'message\' && vm.trigger.channel != \'voice\'" class="md-block">\n                <label translate="TOOLS.VALUE">Value</label>\n                <md-select name="value" ng-model="vm.anyCondition.value" required>\n                    <md-option ng-value="\'in\'">Incoming</md-option>\n                    <md-option ng-value="\'out\'">Outgoing</md-option>\n                    <md-option ng-value="\'accept\'">Accepted</md-option>\n                    <md-option ng-value="\'reject\'">Rejected</md-option>\n                </md-select>\n                <div ng-messages="anyConditionForm[\'value\'].$error" ng-show="anyConditionForm[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newAnyCondition" ng-click="vm.saveAnyCondition()" class="send-button md-accent md-raised" ng-disabled="anyConditionForm.$invalid || anyConditionForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newAnyCondition" ng-click="vm.addNewAnyCondition()" class="send-button md-accent md-raised" ng-disabled="anyConditionForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_ANYCONDITION" translate-attr-aria-label="TOOLS.ADD_ANYCONDITION">\n                    ADD ANYCONDITION\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newAnyCondition" ng-click="vm.deleteAnyCondition($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/triggers/edit/view.html",'<div id="tools-trigger" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-triggers-button md-icon-button" aria-label="Go to triggers" ng-click="vm.gotoTriggers()" translate translate-attr-aria-label="TOOLS.GO_TO_TRIGGERS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="trigger-image" hide-xs>\n                    <img ng-src="assets/images/business/triggers.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.trigger.id}}\n                        <span ng-if="vm.trigger.name">{{vm.trigger.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="TOOLS.CREATED_AT"></span> <span>{{vm.trigger.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveTrigger()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (allconditionsForm.$invalid) || (anyconditionsForm.$invalid) || (actionsForm.$invalid)" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="trigger-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="TOOLS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.trigger.name" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.CHANNEL">Channel</label>\n                                <md-select name="channel" ng-model="vm.trigger.channel" required disabled>\n\n                                    <md-option ng-value="\'voice\'"> {{ \'TOOLS.VOICE\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'openchannel\'" ng-if="vm.license.openchannel"> {{ \'TOOLS.OPENCHANNEL\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'chat\'" ng-if="vm.license.chat"> {{ \'TOOLS.CHAT\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'mail\'" ng-if="vm.license.mail"> {{ \'TOOLS.MAIL\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'sms\'" ng-if="vm.license.messaging"> {{ \'TOOLS.SMS\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'fax\'" ng-if="vm.license.fax"> {{ \'TOOLS.FAX\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'channel\'].$error" ng-show="generalForm[\'channel\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.CHANNEL_REQUIRED">Channel field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.trigger.status" aria-label="Status" ng-disabled="!vm.crudPermissions.canEdit"><span translate="TOOLS.STATUS">Status</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.trigger.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.CONDITIONS&ACTIONS">CONDITIONS&ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="trigger-detail-form-container allconditions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="TriggerAllConditionsController as vm_dc" ng-init="vm_dc.init(vm.trigger, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedTriggerAllConditions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="TOOLS.ALLCONDITIONS">AllConditions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditTriggerAllCondition($event)" aria-label="add allCondition" translate translate-attr-label="TOOLS.ADD_ALLCONDITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedTriggerAllConditions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedTriggerAllConditions.length}} {{vm_dc.selectedTriggerAllConditions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedTriggerAllConditions" csv-label="true" filename="triggers.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedTriggerAllConditions($event)" aria-label="delete selected" translate translate-attr-label="TRIGGERS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedTriggerAllConditions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getTriggerAllConditions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="field">{{ \'TOOLS.FIELD\' | translate }}</th>\n                                            <th md-column md-order-by="operator">{{ \'TOOLS.OPERATOR\' | translate }}</th>\n                                            <th md-column md-order-by="value">{{ \'TOOLS.VALUE\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'TOOLS.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="allCondition" md-select-id="id" ng-repeat="allCondition in vm_dc.triggerAllConditions.rows">\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" md-cell>{{allCondition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" md-cell>{{ \'TOOLS.\' + vm_dc.arrayfield[allCondition.field].option | uppercase | translate }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" md-cell>{{ \'TOOLS.\' + vm_dc.arrayoperator[allCondition.operator].option | uppercase | translate }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="!allCondition.value" md-cell>{{allCondition.value}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'chat\' && allCondition.field == \'account\'" md-cell>{{ (vm_dc.chatAccounts | filter : {\'id\':allCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'mail\' && allCondition.field == \'account\'" md-cell>{{ (vm_dc.mailAccounts | filter : {\'id\':allCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'sms\' && allCondition.field == \'account\'" md-cell>{{ (vm_dc.smsAccounts | filter : {\'id\':allCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'fax\' && allCondition.field == \'account\'" md-cell>{{ (vm_dc.faxAccounts | filter : {\'id\':allCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'openchannel\' && allCondition.field == \'account\'" md-cell>{{ (vm_dc.openchannelAccounts | filter : {\'id\':allCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'voice\' && allCondition.field == \'queue\'" md-cell>{{ (vm_dc.queues | filter : {\'name\':allCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'voice\' && allCondition.field == \'routeId\'" md-cell>{{ (vm_dc.outboundRoutes | filter : {\'id\':allCondition.value})[0].exten }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'voice\' && allCondition.field == \'agent\'" md-cell>{{ (vm_dc.agents | filter : {\'name\':allCondition.value})[0].fullname }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel == \'voice\' && allCondition.field == \'lastevent\'" md-cell>{{ vm_dc.callStatusValues[allCondition.value].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel != \'voice\' && allCondition.field == \'interaction\'" md-cell>{{ vm_dc.interactionStatusValues[allCondition.value].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" ng-if="vm.trigger.channel != \'voice\' && allCondition.field == \'message\'" md-cell>{{ vm_dc.messageStatusValues[allCondition.value].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" md-cell>{{allCondition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditTriggerAllCondition($event, allCondition)" translate="TOOLS.EDIT_ALLCONDITION">\n                                                                Edit AllCondition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(allCondition, $event)" translate="TOOLS.DELETE_ALLCONDITION">\n                                                                Delete AllCondition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.triggerAllConditions.rows.length">\n                                            <td md-cell colspan="18">\n                                                <span class="text-boxed-ligth" translate="TOOLS.NO_ALLCONDITION_AVAILABLE">No allcondition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.triggerAllConditions.count}}" md-on-paginate="vm_dc.getTriggerAllConditions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                    <div class="trigger-detail-form-container anyconditions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="TriggerAnyConditionsController as vm_dc" ng-init="vm_dc.init(vm.trigger, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedTriggerAnyConditions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="TOOLS.ANYCONDITIONS">AnyConditions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditTriggerAnyCondition($event)" aria-label="add anyCondition" translate translate-attr-label="TOOLS.ADD_ANYCONDITION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedTriggerAnyConditions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedTriggerAnyConditions.length}} {{vm_dc.selectedTriggerAnyConditions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedTriggerAnyConditions" csv-label="true" filename="triggers.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedTriggerAnyConditions($event)" aria-label="delete selected" translate translate-attr-label="TRIGGERS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedTriggerAnyConditions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getTriggerAnyConditions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="field">{{ \'TOOLS.FIELD\' | translate }}</th>\n                                            <th md-column md-order-by="operator">{{ \'TOOLS.OPERATOR\' | translate }}</th>\n                                            <th md-column md-order-by="value">{{ \'TOOLS.VALUE\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'TOOLS.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="anyCondition" md-select-id="id" ng-repeat="anyCondition in vm_dc.triggerAnyConditions.rows">\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" md-cell>{{anyCondition.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" md-cell>{{ \'TOOLS.\' + vm_dc.arrayfield[anyCondition.field].option | uppercase | translate }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" md-cell>{{ \'TOOLS.\' + vm_dc.arrayoperator[anyCondition.operator].option | uppercase | translate }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="!anyCondition.value" md-cell>{{anyCondition.value}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'chat\' && anyCondition.field == \'account\'" md-cell>{{ (vm_dc.chatAccounts | filter : {\'id\':anyCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'mail\' && anyCondition.field == \'account\'" md-cell>{{ (vm_dc.mailAccounts | filter : {\'id\':anyCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'sms\' && anyCondition.field == \'account\'" md-cell>{{ (vm_dc.smsAccounts | filter : {\'id\':anyCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'fax\' && anyCondition.field == \'account\'" md-cell>{{ (vm_dc.faxAccounts | filter : {\'id\':anyCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'openchannel\' && anyCondition.field == \'account\'" md-cell>{{ (vm_dc.openchannelAccounts | filter : {\'id\':anyCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'voice\' && anyCondition.field == \'queue\'" md-cell>{{ (vm_dc.queues | filter : {\'name\':anyCondition.value})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'voice\' && anyCondition.field == \'routeId\'" md-cell>{{ (vm_dc.outboundRoutes | filter : {\'id\':anyCondition.value})[0].exten }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'voice\' && anyCondition.field == \'agent\'" md-cell>{{ (vm_dc.agents | filter : {\'name\':anyCondition.value})[0].fullname }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel == \'voice\' && anyCondition.field == \'lastevent\'" md-cell>{{ vm_dc.callStatusValues[anyCondition.value].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel != \'voice\' && anyCondition.field == \'interaction\'" md-cell>{{ vm_dc.interactionStatusValues[anyCondition.value].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" ng-if="vm.trigger.channel != \'voice\' && anyCondition.field == \'message\'" md-cell>{{ vm_dc.messageStatusValues[anyCondition.value].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" md-cell>{{anyCondition.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditTriggerAnyCondition($event, anyCondition)" translate="TOOLS.EDIT_ANYCONDITION">\n                                                                Edit AnyCondition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(anyCondition, $event)" translate="TOOLS.DELETE_ANYCONDITION">\n                                                                Delete AnyCondition\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.triggerAnyConditions.rows.length">\n                                            <td md-cell colspan="18">\n                                                <span class="text-boxed-ligth" translate="TOOLS.NO_ANYCONDITION_AVAILABLE">No anycondition available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.triggerAnyConditions.count}}" md-on-paginate="vm_dc.getTriggerAnyConditions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                    <div class="trigger-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="TriggerActionsController as vm_dc" ng-init="vm_dc.init(vm.trigger, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedTriggerActions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="TOOLS.ACTIONS">Actions</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditTriggerAction($event)" aria-label="add action" translate translate-attr-label="TOOLS.ADD_ACTION">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedTriggerActions.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedTriggerActions.length}} {{vm_dc.selectedTriggerActions.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedTriggerActions" csv-label="true" filename="triggers.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedTriggerActions($event)" aria-label="delete selected" translate translate-attr-label="TRIGGERS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedTriggerActions" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getTriggerActions">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                            <th md-column md-order-by="action">{{ \'TOOLS.ACTION\' | translate }}</th>\n                                            <th md-column md-order-by="data1">{{ \'TOOLS.TYPE\' | translate }}</th>\n                                            <th md-column md-order-by="data2">{{ \'TOOLS.INFO\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'TOOLS.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="action" md-select-id="id" ng-repeat="action in vm_dc.triggerActions.rows">\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" md-cell>{{action.id}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" md-cell>{{ \'TOOLS.\' + vm_dc.arrayaction[action.action].option | uppercase | translate }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'jscripty\'" md-cell>{{ (vm_dc.projects | filter : {\'id\':action.data1})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'browser\'" md-cell>{{ vm_dc.browserValues[action.data1].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'contactManager\'" md-cell>{{ (vm_dc.lists | filter : {\'id\':action.data1})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'contactManager\'" md-cell>{{ \'TOOLS.\' + vm_dc.autoCreateContact[action.data2].option | uppercase | translate }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'urlForward\'" md-cell>{{ vm_dc.urlForwardValues[action.data1].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="!action.data1" md-cell>{{action.data1}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="!action.data2" md-cell>{{action.data2}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'urlForward\'" md-cell>{{action.data2}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'script\'" md-cell>{{action.data2}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'script\'" md-cell>{{action.data1}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\'" md-cell>{{ vm_dc.integrationValues[action.data1].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'zendesk\'" md-cell>{{ (vm_dc.zendeskAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'desk\'" md-cell>{{ (vm_dc.deskAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'zoho\'" md-cell>{{ (vm_dc.zohoAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'salesforce\'" md-cell>{{ (vm_dc.salesforceAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'sugarcrm\'" md-cell>{{ (vm_dc.sugarcrmAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'freshdesk\'" md-cell>{{ (vm_dc.freshdeskAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'vtiger\'" md-cell>{{ (vm_dc.vtigerAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'dynamics365\'" md-cell>{{ (vm_dc.dynamics365Accounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'integration\' && action.data1 == \'servicenow\'" md-cell>{{ (vm_dc.servicenowAccounts | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'motionbar\'" md-cell>{{ vm_dc.motionbarValues[action.data1].option }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'motionbar\' && action.data1 == \'1\'" md-cell>{{action.data2}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'motionbar\' && action.data1 == \'2\'" md-cell>{{action.data2}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'motionbar\' && action.data1 == \'0\'" md-cell>{{ (vm_dc.templates | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'browser\' && action.data1 == \'0\'" md-cell>{{ (vm_dc.templates | filter : {\'id\':action.data2})[0].name }}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" ng-if="action.action == \'browser\' && action.data1 == \'1\'" md-cell>{{action.data2}}</td>\n                                            <td ng-click="vm_dc.createOrEditTriggerAction($event, action)" md-cell>{{action.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions" ng-if="!vm_dc.crudPermissions.readOnly">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">\n                                                            <md-button ng-click="vm_dc.createOrEditTriggerAction($event, action)" translate="TOOLS.EDIT_ACTION">\n                                                                Edit Action\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(action, $event)" translate="TOOLS.DELETE_ACTION">\n                                                                Delete Action\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.triggerActions.rows.length">\n                                            <td md-cell colspan="48">\n                                                <span class="text-boxed-ligth" translate="TOOLS.NO_ACTION_AVAILABLE">No action available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.triggerActions.count}}" md-on-paginate="vm_dc.getTriggerActions" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/tools/views/triggers/triggers.html",'<div id="triggers" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.TRIGGERS">Triggers</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedTriggers.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedTriggers =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-triggers-count">\n                    <span>{{vm.selectedTriggers.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="TRIGGERS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllTriggers()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectTriggers()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedTriggers" csv-label="true" filename="triggers.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedTriggers($event)" aria-label="delete selected" translate translate-attr-label="TRIGGERS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- TRIGGER TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedTriggers" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTriggers">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="channel">{{ \'TOOLS.CHANNEL\' | translate }}</th>\n                                <th md-column md-order-by="status">{{ \'TOOLS.STATUS\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.triggers.rows.length">\n                                <td md-cell colspan="6">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="trigger" md-select-id="id" ng-repeat="trigger in vm.triggers.rows">\n                                <td md-cell ng-if="trigger.userpic"><img class="avatar" alt="{{trigger.name}}" ng-src="api/users/{{trigger.id}}/avatar" /></td>\n                                <td md-cell ng-if="!trigger.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{trigger.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trigger, ev) : vm.createOrEditTrigger($event, trigger)" md-cell class="id ">{{trigger.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trigger, ev) : vm.createOrEditTrigger($event, trigger)" md-cell class="name ">{{trigger.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trigger, ev) : vm.createOrEditTrigger($event, trigger)" md-cell class="channel ">{{ \'TOOLS.\' + vm.arraychannel[trigger.channel].option | uppercase | translate }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trigger, ev) : vm.createOrEditTrigger($event, trigger)" md-cell class="status ">\n                                    <md-icon md-colors="{color: {{trigger.status ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{trigger.status ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trigger, ev) : vm.createOrEditTrigger($event, trigger)" md-cell class="description ">{{trigger.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(trigger, $event    )" translate="TOOLS.EDIT_TRIGGER">\n                                                    Edit Trigger\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(trigger, $event    )" translate="TOOLS.DELETE_TRIGGER">\n                                                    Delete Trigger\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.triggers.count}}" md-on-paginate="vm.getTriggers" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / TRIGGER TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD TRIGGER BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-trigger-button" ng-click="vm.createOrEditTrigger($event)" aria-label="add trigger" translate translate-attr-aria-label="TOOLS.ADD_TRIGGER">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD TRIGGER BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/trunks/create/dialog.html",'<md-dialog class="trunk-dialog" aria-label="New Trunk">\n    <form name="trunkForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.trunk.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newTrunk">\n\n                <div class="hint"><span translate="TOOLS.HELP.NAME"></span></div>\n                <div ng-messages="trunkForm[\'name\'].$error" ng-show="trunkForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="TOOLS.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.trunk.active" aria-label="active"><span translate="TOOLS.ACTIVE">active</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.HOST">host</label>\n                <input type="text" name="host" ng-model="vm.trunk.host" ng-required="true">\n\n                <div class="hint"><span translate="TOOLS.HELP.HOST"></span></div>\n                <div ng-messages="trunkForm[\'host\'].$error" ng-show="trunkForm[\'host\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.HOST_REQUIRED">host field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.SECRET">secret</label>\n                <input type="password" name="secret" ng-model="vm.trunk.secret" placeholder="Password" translate translate-attr-placeholder="TOOLS.PASSWORD">\n                <div class="hint"><span translate="TOOLS.HELP.SECRET"></span></div>\n                <div ng-messages="trunkForm[\'secret\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="TOOLS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DEFAULTUSER">defaultuser</label>\n                <input type="text" name="defaultuser" ng-model="vm.trunk.defaultuser">\n\n                <div class="hint"><span translate="TOOLS.HELP.DEFAULTUSER"></span></div>\n                <div ng-messages="trunkForm[\'defaultuser\'].$error" ng-show="trunkForm[\'defaultuser\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DEFAULTUSER_REQUIRED">defaultuser field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.REGISTRY">registry</label>\n                <input type="text" name="registry" ng-model="vm.trunk.registry">\n\n                <div class="hint"><span translate="TOOLS.HELP.REGISTRY"></span></div>\n                <div ng-messages="trunkForm[\'registry\'].$error" ng-show="trunkForm[\'registry\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.REGISTRY_REQUIRED">registry field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.trunk.description">\n\n                <div ng-messages="trunkForm[\'description\'].$error" ng-show="trunkForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newTrunk" ng-click="vm.saveTrunk()" class="send-button md-accent md-raised" ng-disabled="trunkForm.$invalid || trunkForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newTrunk" ng-click="vm.addNewTrunk()" class="send-button md-accent md-raised" ng-disabled="trunkForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_TRUNK" translate-attr-aria-label="TOOLS.ADD_TRUNK">\n                    ADD TRUNK\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newTrunk" ng-click="vm.deleteTrunk($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/trunks/edit/clone/clone.html",'<md-dialog class="trunk-dialog" aria-label="Clone Trunk">\n    <form name="trunkForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.trunk.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newTrunk">\n\n                <div class="hint"><span translate="TOOLS.HELP.NAME"></span></div>\n                <div ng-messages="trunkForm[\'name\'].$error" ng-show="trunkForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="TOOLS.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.trunk.active" aria-label="active"><span translate="TOOLS.ACTIVE">active</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <md-button type="submit" ng-click="vm.cloneTrunk()" class="send-button md-accent md-raised" ng-disabled="trunkForm.$invalid" aria-label="CLONE" translate="TOOLS.CLONE_TRUNK" translate-attr-aria-label="TOOLS.CLONE_TRUNK">\n                CLONE TRUNK\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/trunks/edit/view.html",'<div id="tools-trunk" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-trunks-button md-icon-button" aria-label="Go to trunks" ng-click="vm.gotoTrunks()" translate translate-attr-aria-label="TOOLS.GO_TO_TRUNKS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="trunk-image" hide-xs>\n                    <img ng-src="assets/images/business/trunks.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.trunk.id}}\n                        <span ng-if="vm.trunk.name">{{vm.trunk.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="TOOLS.CREATED_AT"></span> <span>{{vm.trunk.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.trunk, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="TOOLS.GOTO_TRUNK"></span></md-tooltip>\n                <md-icon md-font-icon="icon-cast"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak ng-if="vm.crudPermissions.canEdit">\n            <md-button ng-click="vm.clonedialog(vm.trunk, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="clone">\n                <md-tooltip><span translate="TOOLS.CLONE_TRUNK"></span></md-tooltip>\n                <md-icon md-font-icon="icon-content-duplicate"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveTrunk()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (advancedForm.$invalid) || (otherFieldsForm.$invalid)" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="trunk-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="TOOLS.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.trunk.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="TOOLS.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="TOOLS.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.trunk.active" aria-label="active" ng-disabled="!vm.crudPermissions.canEdit"><span translate="TOOLS.ACTIVE">active</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.HOST">host</label>\n                                <input type="text" name="host" ng-model="vm.trunk.host" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.HOST"></span></div>\n                                <div ng-messages="generalForm[\'host\'].$error" ng-show="generalForm[\'host\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.HOST_REQUIRED">host field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.SECRET">secret</label>\n                                <input type="password" name="secret" ng-model="vm.trunk.secret" placeholder="Password" translate translate-attr-placeholder="TOOLS.PASSWORD">\n                                <div class="hint"><span translate="TOOLS.HELP.SECRET"></span></div>\n                                <div ng-messages="generalForm[\'secret\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="TOOLS.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DEFAULTUSER">defaultuser</label>\n                                <input type="text" name="defaultuser" ng-model="vm.trunk.defaultuser" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.DEFAULTUSER"></span></div>\n                                <div ng-messages="generalForm[\'defaultuser\'].$error" ng-show="generalForm[\'defaultuser\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DEFAULTUSER_REQUIRED">defaultuser field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.CONTEXT">context</label>\n                                <md-select name="context" ng-model="vm.trunk.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.CONTEXT"></span></div>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.CONTEXT_REQUIRED">context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.CALLERID">callerid</label>\n                                <input type="text" name="callerid" ng-model="vm.trunk.callerid" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.CALLERID"></span></div>\n                                <div ng-messages="generalForm[\'callerid\'].$error" ng-show="generalForm[\'callerid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.CALLERID_REQUIRED">callerid field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.TYPE">Type</label>\n                                <md-select name="type" ng-model="vm.trunk.type" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'friend\'">Friend</md-option>\n                                    <md-option ng-value="\'user\'">User</md-option>\n                                    <md-option ng-value="\'peer\'">Peer</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.TYPE"></span></div>\n                                <div ng-messages="generalForm[\'type\'].$error" ng-show="generalForm[\'type\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.TYPE_REQUIRED">Type field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DTMFMODE">dtmfmode</label>\n                                <md-select name="dtmfmode" ng-model="vm.trunk.dtmfmode" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'rfc2833\'">rfc2833</md-option>\n                                    <md-option ng-value="\'info\'">info</md-option>\n                                    <md-option ng-value="\'shortinfo\'">shortinfo</md-option>\n                                    <md-option ng-value="\'inband\'">inband</md-option>\n                                    <md-option ng-value="\'auto\'">auto</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.DTMFMODE"></span></div>\n                                <div ng-messages="generalForm[\'dtmfmode\'].$error" ng-show="generalForm[\'dtmfmode\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DTMFMODE_REQUIRED">dtmfmode field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.NAT">nat</label>\n                                <md-select name="nat" ng-model="vm.trunk.nat" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'force_rport\'">force_rport</md-option>\n                                    <md-option ng-value="\'comedia\'">comedia</md-option>\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'never\'">never</md-option>\n                                    <md-option ng-value="\'route\'">route</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.NAT"></span></div>\n                                <div ng-messages="generalForm[\'nat\'].$error" ng-show="generalForm[\'nat\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.NAT_REQUIRED">nat field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.QUALIFY">qualify</label>\n                                <md-select name="qualify" ng-model="vm.trunk.qualify" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.QUALIFY"></span></div>\n                                <div ng-messages="generalForm[\'qualify\'].$error" ng-show="generalForm[\'qualify\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.QUALIFY_REQUIRED">qualify field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.ALLOWCODECS">AllowCodecs</label>\n                                <md-select name="allow" ng-model="vm.trunk.allow" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'ulaw\'">ulaw</md-option>\n                                    <md-option ng-value="\'alaw\'">alaw</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                    <md-option ng-value="\'g723\'">g723</md-option>\n                                    <md-option ng-value="\'g726\'">g726</md-option>\n                                    <md-option ng-value="\'g722\'">g722</md-option>\n                                    <md-option ng-value="\'g729\'">g729</md-option>\n                                    <md-option ng-value="\'ilbc\'">ilbc</md-option>\n                                    <md-option ng-value="\'opus\'">opus</md-option>\n                                    <md-option ng-value="\'h264\'">h264</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.ALLOWCODECS"></span></div>\n                                <div ng-messages="generalForm[\'allow\'].$error" ng-show="generalForm[\'allow\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.ALLOWCODECS_REQUIRED">AllowCodecs field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.INSECURE">insecure</label>\n                                <md-select name="insecure" ng-model="vm.trunk.insecure" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'port\'">port</md-option>\n                                    <md-option ng-value="\'invite\'">invite</md-option>\n                                    <md-option ng-value="\'very\'">very</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.INSECURE"></span></div>\n                                <div ng-messages="generalForm[\'insecure\'].$error" ng-show="generalForm[\'insecure\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.INSECURE_REQUIRED">insecure field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.CALL_LIMIT">call_limit</label>\n                                <input type="number" name="call_limit" ng-model="vm.trunk.call_limit" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.CALL_LIMIT"></span></div>\n                                <div ng-messages="generalForm[\'call_limit\'].$error" ng-show="generalForm[\'call_limit\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.CALL_LIMIT_REQUIRED">call_limit field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.trunk.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="trunk-detail-form-container advanced md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="TOOLS.ADVANCED">ADVANCED</div>\n                        </div>\n                        <form name="advancedForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.REGISTRY">registry</label>\n                                <input type="text" name="registry" ng-model="vm.trunk.registry" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.REGISTRY"></span></div>\n                                <div ng-messages="advancedForm[\'registry\'].$error" ng-show="advancedForm[\'registry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.REGISTRY_REQUIRED">registry field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.DIRECTMEDIA">directmedia</label>\n                                <md-select name="directmedia" ng-model="vm.trunk.directmedia" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'nonat\'">nonat</md-option>\n                                    <md-option ng-value="\'update\'">update</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.DIRECTMEDIA"></span></div>\n                                <div ng-messages="advancedForm[\'directmedia\'].$error" ng-show="advancedForm[\'directmedia\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.DIRECTMEDIA_REQUIRED">directmedia field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.CALLCOUNTER">callcounter</label>\n                                <md-select name="callcounter" ng-model="vm.trunk.callcounter" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.CALLCOUNTER"></span></div>\n                                <div ng-messages="advancedForm[\'callcounter\'].$error" ng-show="advancedForm[\'callcounter\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.CALLCOUNTER_REQUIRED">callcounter field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.FROMDOMAIN">fromdomain</label>\n                                <input type="text" name="fromdomain" ng-model="vm.trunk.fromdomain" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.FROMDOMAIN"></span></div>\n                                <div ng-messages="advancedForm[\'fromdomain\'].$error" ng-show="advancedForm[\'fromdomain\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.FROMDOMAIN_REQUIRED">fromdomain field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.FROMUSER">fromuser</label>\n                                <input type="text" name="fromuser" ng-model="vm.trunk.fromuser" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.FROMUSER"></span></div>\n                                <div ng-messages="advancedForm[\'fromuser\'].$error" ng-show="advancedForm[\'fromuser\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.FROMUSER_REQUIRED">fromuser field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.OUTBOUNDPROXY">outboundproxy</label>\n                                <input type="text" name="outboundproxy" ng-model="vm.trunk.outboundproxy" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.OUTBOUNDPROXY"></span></div>\n                                <div ng-messages="advancedForm[\'outboundproxy\'].$error" ng-show="advancedForm[\'outboundproxy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.OUTBOUNDPROXY_REQUIRED">outboundproxy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.ADD_PHONE_TO_URI">Add_phone_to_URI</label>\n                                <md-select name="usereqphone" ng-model="vm.trunk.usereqphone" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.ADD_PHONE_TO_URI"></span></div>\n                                <div ng-messages="advancedForm[\'usereqphone\'].$error" ng-show="advancedForm[\'usereqphone\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.ADD_PHONE_TO_URI_REQUIRED">Add_phone_to_URI field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.TRUST_REMOTE_PARTY_ID">Trust_Remote_Party_ID</label>\n                                <md-select name="trustrpid" ng-model="vm.trunk.trustrpid" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.TRUST_REMOTE_PARTY_ID"></span></div>\n                                <div ng-messages="advancedForm[\'trustrpid\'].$error" ng-show="advancedForm[\'trustrpid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.TRUST_REMOTE_PARTY_ID_REQUIRED">Trust_Remote_Party_ID field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.SEND_REMOTE_PARTY_ID_HEADER">Send_Remote_Party_ID_header</label>\n                                <md-select name="sendrpid" ng-model="vm.trunk.sendrpid" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'pai\'"> {{ \'TOOLS.PAI\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.SEND_REMOTE_PARTY_ID_HEADER"></span></div>\n                                <div ng-messages="advancedForm[\'sendrpid\'].$error" ng-show="advancedForm[\'sendrpid\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.SEND_REMOTE_PARTY_ID_HEADER_REQUIRED">Send_Remote_Party_ID_header field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.ENCRYPTION">encryption</label>\n                                <md-select name="encryption" ng-model="vm.trunk.encryption" required ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'TOOLS.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'TOOLS.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.ENCRYPTION"></span></div>\n                                <div ng-messages="advancedForm[\'encryption\'].$error" ng-show="advancedForm[\'encryption\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.ENCRYPTION_REQUIRED">encryption field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.PORT">port</label>\n                                <input type="number" name="port" ng-model="vm.trunk.port" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.PORT"></span></div>\n                                <div ng-messages="advancedForm[\'port\'].$error" ng-show="advancedForm[\'port\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.PORT_REQUIRED">port field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.TRANSPORT">Transport</label>\n                                <md-select name="transport" ng-model="vm.trunk.transport" multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'udp\'">udp</md-option>\n                                    <md-option ng-value="\'tcp\'">tcp</md-option>\n                                    <md-option ng-value="\'ws\'">ws</md-option>\n                                    <md-option ng-value="\'wss\'">wss</md-option>\n                                    <md-option ng-value="\'tls\'">tls</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="TOOLS.HELP.TRANSPORT"></span></div>\n                                <div ng-messages="advancedForm[\'transport\'].$error" ng-show="advancedForm[\'transport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.TRANSPORT_REQUIRED">Transport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.T38PT_UDPTL">t38pt_udptl</label>\n                                <input type="string" name="t38pt_udptl" ng-model="vm.trunk.t38pt_udptl" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="TOOLS.HELP.T38PT_UDPTL"></span></div>\n                                <div ng-messages="advancedForm[\'t38pt_udptl\'].$error" ng-show="advancedForm[\'t38pt_udptl\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.T38PT_UDPTL_REQUIRED">t38pt_udptl field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.VIDEOSUPPORT">Videosupport</label>\n                                <md-select name="videosupport" ng-model="vm.trunk.videosupport" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">Yes</md-option>\n                                    <md-option ng-value="\'no\'">No</md-option>\n                                    <md-option ng-value="\'always\'">Always</md-option>\n                                </md-select>\n                                <div ng-messages="advancedForm[\'videosupport\'].$error" ng-show="advancedForm[\'videosupport\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="TOOLS.ERRORS.VIDEOSUPPORT_REQUIRED">Videosupport field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="TOOLS.OTHERFIELDS">OTHERFIELDS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="trunk-detail-form-container otherfields md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="TOOLS.OTHERFIELDS">OTHERFIELDS</div>\n                        </div>\n                        <form name="otherFieldsForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="TOOLS.OTHERFIELDS">otherFields</label>\n                                <textarea name="otherFields" ng-model="vm.trunk.otherFields" autofocus></textarea>\n                                <div class="hint"><span translate="TOOLS.HELP.OTHERFIELDS"></span></div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/tools/views/trunks/trunks.html",'<div id="trunks" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.TRUNKS">Trunks</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedTrunks.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedTrunks =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-trunks-count">\n                    <span>{{vm.selectedTrunks.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="TRUNKS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllTrunks()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectTrunks()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedTrunks" csv-label="true" filename="trunks.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedTrunks($event)" aria-label="delete selected" translate translate-attr-label="TRUNKS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- TRUNK TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedTrunks" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTrunks">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="active">{{ \'TOOLS.ACTIVE\' | translate }}</th>\n                                <th md-column md-order-by="host">{{ \'TOOLS.HOST\' | translate }}</th>\n                                <th md-column md-order-by="registry">{{ \'TOOLS.REGISTRY\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.trunks.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="trunk" md-select-id="id" ng-repeat="trunk in vm.trunks.rows">\n                                <td md-cell ng-if="trunk.userpic"><img class="avatar" alt="{{trunk.name}}" ng-src="api/users/{{trunk.id}}/avatar" /></td>\n                                <td md-cell ng-if="!trunk.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{trunk.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trunk, ev) : vm.createOrEditTrunk($event, trunk)" md-cell class="id ">{{trunk.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trunk, ev) : vm.createOrEditTrunk($event, trunk)" md-cell class="name ">{{trunk.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trunk, ev) : vm.createOrEditTrunk($event, trunk)" md-cell class="active ">\n                                    <md-icon md-colors="{color: {{trunk.active ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{trunk.active ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trunk, ev) : vm.createOrEditTrunk($event, trunk)" md-cell class="host ">{{trunk.host}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trunk, ev) : vm.createOrEditTrunk($event, trunk)" md-cell class="registry ">{{trunk.registry}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(trunk, ev) : vm.createOrEditTrunk($event, trunk)" md-cell class="description ">{{trunk.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(trunk, $event    )" translate="TOOLS.EDIT_TRUNK">\n                                                    Edit Trunk\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.clonedialog(trunk, $event    )" translate="TOOLS.CLONE_TRUNK">\n                                                    clone Trunk\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(trunk, $event    )" translate="TOOLS.GOTOREALTIME_TRUNK">\n                                                    goToRealtime Trunk\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(trunk, $event    )" translate="TOOLS.DELETE_TRUNK">\n                                                    Delete Trunk\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.trunks.count}}" md-on-paginate="vm.getTrunks" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / TRUNK TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD TRUNK BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-trunk-button" ng-click="vm.createOrEditTrunk($event)" aria-label="add trunk" translate translate-attr-aria-label="TOOLS.ADD_TRUNK">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD TRUNK BUTTON --\x3e\n</div>'),e.put("app/main/apps/tools/views/variables/create/dialog.html",'<md-dialog class="variable-dialog" aria-label="New Variable">\n    <form name="variableForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.variable.name" ng-required="true" autofocus>\n\n                <div ng-messages="variableForm[\'name\'].$error" ng-show="variableForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLS.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.variable.description">\n\n                <div ng-messages="variableForm[\'description\'].$error" ng-show="variableForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVariable" ng-click="vm.saveVariable()" class="send-button md-accent md-raised" ng-disabled="variableForm.$invalid || variableForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVariable" ng-click="vm.addNewVariable()" class="send-button md-accent md-raised" ng-disabled="variableForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_VARIABLE" translate-attr-aria-label="TOOLS.ADD_VARIABLE">\n                    ADD VARIABLE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVariable" ng-click="vm.deleteVariable($event)" aria-label="DELETE" translate translate-attr-aria-label="TOOLS.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="TOOLS.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/tools/views/variables/variables.html",'<div id="variables" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-auto-fix" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="TOOLS.VARIABLES">Variables</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="TOOLS.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedVariables.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedVariables =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="TOOLS.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-variables-count">\n                    <span>{{vm.selectedVariables.length}}</span>\n                    <span translate="TOOLS.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="VARIABLES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllVariables()" translate="TOOLS.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectVariables()" translate="TOOLS.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedVariables" csv-label="true" filename="variables.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedVariables($event)" aria-label="delete selected" translate translate-attr-label="VARIABLES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- VARIABLE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedVariables" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVariables">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'TOOLS.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'TOOLS.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'TOOLS.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.variables.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="TOOLS.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="variable" md-select-id="id" ng-repeat="variable in vm.variables.rows">\n                                <td md-cell ng-if="variable.userpic"><img class="avatar" alt="{{variable.name}}" ng-src="api/users/{{variable.id}}/avatar" /></td>\n                                <td md-cell ng-if="!variable.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{variable.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditVariable($event, variable)" md-cell class="id ">{{variable.id}}</td>\n                                <td ng-click="vm.createOrEditVariable($event, variable)" md-cell class="name ">{{variable.name}}</td>\n                                <td ng-click="vm.createOrEditVariable($event, variable)" md-cell class="description ">{{variable.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="TOOLS.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(variable, $event    )" translate="TOOLS.EDIT_VARIABLE">\n                                                    Edit Variable\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(variable, $event    )" translate="TOOLS.DELETE_VARIABLE">\n                                                    Delete Variable\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'TOOLS.PAGE\' | translate}}:\', rowsPerPage: \'{{\'TOOLS.ROWSPERPAGE\' | translate}}:\', of: \'{{\'TOOLS.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.variables.count}}" md-on-paginate="vm.getVariables" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / VARIABLE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD VARIABLE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-variable-button" ng-click="vm.createOrEditVariable($event)" aria-label="add variable" translate translate-attr-aria-label="TOOLS.ADD_VARIABLE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD VARIABLE BUTTON --\x3e\n</div>'),e.put("app/main/apps/video/views/screenRecordings/create/dialog.html",'<md-dialog class="screenRecording-dialog" aria-label="New screenRecording">\n    <form name="screenRecordingForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VIDEO.RATING">Rating</label>\n                <md-select name="rating" ng-model="vm.screenRecording.rating" autofocus ng-disabled="!vm.newscreenRecording && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="null">{{\'VIDEO.NO_RATING\' | translate}}</md-option>\n                    <md-option value="1">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1]"></md-icon>\n                    </md-option>\n                    <md-option value="2">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2]"></md-icon>\n                    </md-option>\n                    <md-option value="3">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2,3]"></md-icon>\n                    </md-option>\n                    <md-option value="4">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2,3,4]"></md-icon>\n                    </md-option>\n                    <md-option value="5">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2,3,4,5]"></md-icon>\n                    </md-option>\n                </md-select>\n                <div ng-messages="screenRecordingForm[\'rating\'].$error" ng-show="screenRecordingForm[rating].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VIDEO.ERRORS.RATING_REQUIRED">Rating field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newscreenRecording" ng-click="vm.savescreenRecording()" class="send-button md-accent md-raised" ng-disabled="screenRecordingForm.$invalid || screenRecordingForm.$pristine" aria-label="SAVE" translate="VIDEO.SAVE" translate-attr-aria-label="VIDEO.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newscreenRecording" ng-click="vm.addNewscreenRecording()" class="send-button md-accent md-raised" ng-disabled="screenRecordingForm.$invalid" aria-label="ADD" translate="VIDEO.ADD_SCREENRECORDING" translate-attr-aria-label="VIDEO.ADD_SCREENRECORDING">\n                    ADD SCREENRECORDING\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newscreenRecording" ng-click="vm.deletescreenRecording($event)" aria-label="DELETE" translate translate-attr-aria-label="VIDEO.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VIDEO.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/video/views/screenRecordings/partialViews/play.html",'<md-dialog class="play-dialog" aria-label="play">\n    <form name="playForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="{{ vm.app.toUpperCase() }}.{{  vm.label.toUpperCase() }}">Play Recording</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-disabled="vm.loading" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ng-hide="vm.loading">\n            <div layout="row" layout-sm flex>\n                \x3c!-- VIRTUAL field --\x3e\n                <md-card>\n\n                    <md-card-title ng-if="vm.actionOptions.upperTitle">\n                        <md-card-title-text>\n                            <span class="md-headline">{{ vm.filename }}</span>\n                            <span class="md-subhead"><span translate="{{ vm.app.toUpperCase() }}.UPDATEDAT"></span>: {{ vm.recording.updatedAt}}</span>\n                            </span>\n                        </md-card-title-text>\n                    </md-card-title>\n\n                    \x3c!-- video recording directive --\x3e\n                    <ms-dialog-recording ng-if="vm.format" id="vm.recording.id" title="vm.filename" element="vm.element" model="vm.route" path="vm.path" class="md-card-image"></ms-dialog-recording>\n                    \x3c!-- / video recording directive --\x3e\n\n                    <span ng-if="!vm.format">\n                        <em ng-if="vm.found">{{ vm.app.toUpperCase() + \'.CANT_PLAY_THIS_FILE\' | translate }}</em>\n                        <em ng-if="!vm.found">{{ vm.app.toUpperCase() + \'.FILE_NOT_FOUND\' | translate }}</em>\n                    </span>\n\n                    <md-card-title ng-if="vm.actionOptions.lowerTitle">\n                        <md-card-title-text>\n                            <span class="md-headline">{{ vm.filename }}</span>\n                            <span class="md-subhead"><span translate="{{ vm.app.toUpperCase() }}.UPDATEDAT"></span>:\n                                {{ vm.recording.updatedAt}}</span></span>\n\n                            <span ng-if="vm.actionOptions.properties" class="md-subhead"><span translate="{{ vm.app.toUpperCase() }}.PROPERTIES"></span>:</span></span>\n                        </md-card-title-text>\n                    </md-card-title>\n\n                    <md-card-content ng-if="vm.actionOptions.properties">\n                        <md-list-item class="md-2-line" ng-repeat="(key,value) in vm.properties" ng-click="null" ng-if="key != \'value\' && key != \'updatedAt\' && key != \'queue\'">\n\n                            <md-icon ng-if="vm.icon" class="md-avatar-icon" md-font-icon="vm.actionOptions.propertiesIcon" class="s24"></md-icon>\n\n                            <div class="md-list-item-text" layout="column">\n                                <p><b><span translate="{{ vm.app.toUpperCase() }}.{{ key.toUpperCase() }}"></span></b></p>\n                                <p>{{ value }}\n                                    <p>\n                            </div>\n                        </md-list-item>\n                        </md-list>\n                    </md-card-content>\n\n\n                </md-card>\n            </div>\n        </md-dialog-content>\n        <div ng-hide="!vm.loading" layout-fill style="min-height: 397px;" layout="row" layout-sm="column" layout-align="center center">\n            <md-progress-circular class="md-primary md-hue-1" md-diameter="96"></md-progress-circular>\n        </div>\n    </form>\n</md-dialog>'),e.put("app/main/apps/video/views/screenRecordings/screenRecordings.html",'<div id="screenRecordings" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-video" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VIDEO.SCREENRECORDINGS">ScreenRecordings</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VIDEO.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n            \x3c!-- DATE FILTER --\x3e\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE_RANGE">Select Date Range</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearDateFilter()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.CLEAR\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getScreenRecordings()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            \x3c!-- /DATE FILTER --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedScreenRecordings.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedScreenRecordings =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VIDEO.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-screenRecordings-count">\n                    <span>{{vm.selectedScreenRecordings.length}}</span>\n                    <span translate="VIDEO.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="SCREENRECORDINGS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllScreenRecordings()" translate="VIDEO.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectScreenRecordings()" translate="VIDEO.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedScreenRecordings" csv-label="true" filename="screenRecordings.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedScreenRecordings($event)" aria-label="delete selected" translate translate-attr-label="SCREENRECORDINGS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- SCREENRECORDING TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedScreenRecordings" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getScreenRecordings">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VIDEO.ID\' | translate }}</th>\n                                <th md-column md-order-by="rating">{{ \'VIDEO.RATING\' | translate }}</th>\n                                <th md-column md-order-by="UserId">{{ \'VIDEO.AGENT\' | translate }}</th>\n                                <th md-column md-order-by="duration">{{ \'VIDEO.DURATION\' | translate }}</th>\n                                <th md-column md-order-by="startedAt">{{ \'VIDEO.RECORDSTARTTIME\' | translate }}</th>\n                                <th md-column md-order-by="closedAt">{{ \'VIDEO.RECORDENDTIME\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.screenRecordings.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VIDEO.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="screenRecording" md-select-id="id" ng-repeat="screenRecording in vm.screenRecordings.rows">\n                                <td md-cell ng-if="screenRecording.userpic"><img class="avatar" alt="{{screenRecording.name}}" ng-src="api/users/{{screenRecording.id}}/avatar" /></td>\n                                <td md-cell ng-if="!screenRecording.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{screenRecording.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditscreenRecording($event, screenRecording)" md-cell class="id ">{{screenRecording.id}}</td>\n                                <td ng-click="vm.createOrEditscreenRecording($event, screenRecording)" md-cell class="rating ">\n                                    <md-icon md-font-icon="icon-star" style="color:red" ng-show="screenRecording.rating" ng-repeat="rating in [1,2,3,4,5] | limitTo:screenRecording.rating"></md-icon><span ng-hide="screenRecording.rating" translate="VIDEO.NO_RATING">No rating</span>\n                                </td>\n                                <td ng-click="vm.createOrEditscreenRecording($event, screenRecording)" md-cell class="UserId ">{{ (vm.users | filter : {\'id\':screenRecording.UserId} : true)[0].fullname }}</td>\n\n                                <td md-cell><span ng-bind="vm.convertDuration(screenRecording.duration)"></span></td>\n\n\n                                <td ng-click="vm.createOrEditscreenRecording($event, screenRecording)" md-cell class="startedAt ">{{screenRecording.startedAt | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditscreenRecording($event, screenRecording)" md-cell class="closedAt ">{{screenRecording.closedAt | date:\'medium\' }}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VIDEO.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.playrecording(screenRecording, $event  , \'value\'  , \'play_screenrecording\'  , \'video\' )" translate="VIDEO.PLAY_SCREENRECORDING">\n                                                    play screenRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.downloadfile2(screenRecording, $event  , \'screen/recordings\'   )" translate="VIDEO.DOWNLOAD_SCREENRECORDING">\n                                                    Download screenRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(screenRecording, $event    )" translate="VIDEO.DELETE_SCREENRECORDING">\n                                                    Delete screenRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VIDEO.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VIDEO.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VIDEO.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.screenRecordings.count}}" md-on-paginate="vm.getScreenRecordings" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / SCREENRECORDING TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/chanSpies/chanSpies.html",'<div id="chanSpies" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.CHANSPIES">ChanSpies</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedChanSpies.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedChanSpies =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-chanSpies-count">\n                    <span>{{vm.selectedChanSpies.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CHANSPIES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllChanSpies()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectChanSpies()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedChanSpies" csv-label="true" filename="chanSpies.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedChanSpies($event)" aria-label="delete selected" translate translate-attr-label="CHANSPIES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- CHANSPY TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedChanSpies" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getChanSpies">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="prefix">{{ \'VOICE.PREFIX\' | translate }}</th>\n                                <th md-column md-order-by="auth">{{ \'VOICE.AUTH\' | translate }}</th>\n                                <th md-column md-order-by="record">{{ \'VOICE.RECORD\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.chanSpies.rows.length">\n                                <td md-cell colspan="7">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="chanSpy" md-select-id="id" ng-repeat="chanSpy in vm.chanSpies.rows">\n                                <td md-cell ng-if="chanSpy.userpic"><img class="avatar" alt="{{chanSpy.name}}" ng-src="api/users/{{chanSpy.id}}/avatar" /></td>\n                                <td md-cell ng-if="!chanSpy.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{chanSpy.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditchanSpy($event, chanSpy)" md-cell class="id ">{{chanSpy.id}}</td>\n                                <td ng-click="vm.createOrEditchanSpy($event, chanSpy)" md-cell class="name ">{{chanSpy.name}}</td>\n                                <td ng-click="vm.createOrEditchanSpy($event, chanSpy)" md-cell class="prefix ">{{chanSpy.prefix}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chanSpy, ev) : vm.createOrEditchanSpy($event, chanSpy)" md-cell class="auth ">\n                                    <md-icon md-colors="{color: {{chanSpy.auth ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{chanSpy.auth ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(chanSpy, ev) : vm.createOrEditchanSpy($event, chanSpy)" md-cell class="record ">\n                                    <md-icon md-colors="{color: {{chanSpy.record ? \'\\\'green\\\'\' : \'\\\'grey\\\'\'}}}" md-font-icon="{{chanSpy.record ? \'icon-check\' : \'icon-close\'}}"></md-icon>\n                                </td>\n                                <td ng-click="vm.createOrEditchanSpy($event, chanSpy)" md-cell class="description ">{{chanSpy.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(chanSpy, $event    )" translate="VOICE.EDIT_CHANSPY">\n                                                    Edit chanSpy\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(chanSpy, $event    )" translate="VOICE.DELETE_CHANSPY">\n                                                    Delete chanSpy\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.chanSpies.count}}" md-on-paginate="vm.getChanSpies" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / CHANSPY TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD CHANSPY BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-chanSpy-button" ng-click="vm.createOrEditchanSpy($event)" aria-label="add chanSpy" translate translate-attr-aria-label="VOICE.ADD_CHANSPY">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD CHANSPY BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/chanSpies/create/dialog.html",'<md-dialog class="chanSpy-dialog" aria-label="New chanSpy">\n    <form name="chanSpyForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.chanSpy.name" ng-required="true" autofocus>\n\n                <div ng-messages="chanSpyForm[\'name\'].$error" ng-show="chanSpyForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PREFIX">Prefix</label>\n                <input type="text" name="prefix" ng-model="vm.chanSpy.prefix" ng-required="true">\n\n                <div ng-messages="chanSpyForm[\'prefix\'].$error" ng-show="chanSpyForm[\'prefix\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PREFIX_REQUIRED">Prefix field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <md-select name="options" ng-model="vm.chanSpy.options" multiple required>\n                    <md-option ng-value="\'b\'">b: Only spy on channels involved in a bridged call.</md-option>\n                    <md-option ng-value="\'B\'">B: Instead of whispering on a single channel barge in on both channels involved in the call.</md-option>\n                    <md-option ng-value="\'E\'">E: Exit when the spied-on channel hangs up.</md-option>\n                    <md-option ng-value="\'o\'">o: Only listen to audio coming from this channel.</md-option>\n                    <md-option ng-value="\'q\'">q: Don\'t play a beep when beginning to spy on a channel, or speak the selected channel name.</md-option>\n                    <md-option ng-value="\'s\'">s: Skip the playback of the channel type (i.e. SIP, IAX, etc) when speaking the selected channel name.</md-option>\n                    <md-option ng-value="\'S\'">S: Stop when no more channels are left to spy on.</md-option>\n                    <md-option ng-value="\'w\'">w: Enable whisper mode, so the spying channel can talk to the spied-on channel.</md-option>\n                    <md-option ng-value="\'W\'">W: Enable private whisper mode, so the spying channel can talk to the spied-on channel but cannot listen to that channel.</md-option>\n                </md-select>\n                <div ng-messages="chanSpyForm[\'options\'].$error" ng-show="chanSpyForm[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.chanSpy.auth" aria-label="Auth"><span translate="VOICE.AUTH">Auth</span></md-switch>\n\n            </md-input-container>\n            <md-input-container class="md-block" ng-if="vm.chanSpy.auth">\n                <label translate="VOICE.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.chanSpy.password" placeholder="Password" translate translate-attr-placeholder="VOICE.PASSWORD" required>\n                <div ng-messages="chanSpyForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="VOICE.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.chanSpy.record" aria-label="Record"><span translate="VOICE.RECORD">Record</span></md-switch>\n\n            </md-input-container>\n            <md-input-container ng-if="vm.chanSpy.record" class="md-block">\n                <label translate="VOICE.RECORDINGFORMAT">recordingFormat</label>\n                <md-select name="recordingFormat" ng-model="vm.chanSpy.recordingFormat" required>\n                    <md-option ng-value="\'wav\'">wav</md-option>\n                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                    <md-option ng-value="\'WAV\'">wav49</md-option>\n                </md-select>\n                <div ng-messages="chanSpyForm[\'recordingFormat\'].$error" ng-show="chanSpyForm[\'recordingFormat\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.RECORDINGFORMAT_REQUIRED">recordingFormat field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.chanSpy.description">\n\n                <div ng-messages="chanSpyForm[\'description\'].$error" ng-show="chanSpyForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newchanSpy" ng-click="vm.savechanSpy()" class="send-button md-accent md-raised" ng-disabled="chanSpyForm.$invalid || chanSpyForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newchanSpy" ng-click="vm.addNewchanSpy()" class="send-button md-accent md-raised" ng-disabled="chanSpyForm.$invalid" aria-label="ADD" translate="VOICE.ADD_CHANSPY" translate-attr-aria-label="VOICE.ADD_CHANSPY">\n                    ADD CHANSPY\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newchanSpy" ng-click="vm.deletechanSpy($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/contexts/contexts.html",'<div id="contexts" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.CONTEXTS">Contexts</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedContexts.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedContexts =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-contexts-count">\n                    <span>{{vm.selectedContexts.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="CONTEXTS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllContexts()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectContexts()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedContexts" csv-label="true" filename="contexts.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedContexts($event)" aria-label="delete selected" translate translate-attr-label="CONTEXTS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- CONTEXT TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedContexts" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getContexts">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.contexts.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="context" md-select-id="id" ng-repeat="context in vm.contexts.rows">\n                                <td md-cell ng-if="context.userpic"><img class="avatar" alt="{{context.name}}" ng-src="api/users/{{context.id}}/avatar" /></td>\n                                <td md-cell ng-if="!context.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{context.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditContext($event, context)" md-cell class="id ">{{context.id}}</td>\n                                <td ng-click="vm.createOrEditContext($event, context)" md-cell class="name ">{{context.name}}</td>\n                                <td ng-click="vm.createOrEditContext($event, context)" md-cell class="description ">{{context.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(context, $event    )" translate="VOICE.EDIT_CONTEXT">\n                                                    Edit Context\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(context, $event    )" translate="VOICE.DELETE_CONTEXT">\n                                                    Delete Context\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.contexts.count}}" md-on-paginate="vm.getContexts" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / CONTEXT TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD CONTEXT BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-context-button" ng-click="vm.createOrEditContext($event)" aria-label="add context" translate translate-attr-aria-label="VOICE.ADD_CONTEXT">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD CONTEXT BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/contexts/create/dialog.html",'<md-dialog class="context-dialog" aria-label="New Context">\n    <form name="contextForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.context.name" ng-required="true" autofocus>\n\n                <div ng-messages="contextForm[\'name\'].$error" ng-show="contextForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.context.description">\n\n                <div ng-messages="contextForm[\'description\'].$error" ng-show="contextForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newContext" ng-click="vm.saveContext()" class="send-button md-accent md-raised" ng-disabled="contextForm.$invalid || contextForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newContext" ng-click="vm.addNewContext()" class="send-button md-accent md-raised" ng-disabled="contextForm.$invalid" aria-label="ADD" translate="VOICE.ADD_CONTEXT" translate-attr-aria-label="VOICE.ADD_CONTEXT">\n                    ADD CONTEXT\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newContext" ng-click="vm.deleteContext($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/create/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PHONENUMBER">PhoneNumber</label>\n                <input type="text" name="exten" ng-model="vm.inboundroute.exten" ng-required="true" autofocus>\n\n                <div ng-messages="inboundrouteForm[\'exten\'].$error" ng-show="inboundrouteForm[\'exten\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PHONENUMBER_REQUIRED">PhoneNumber field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CONTEXT">Context</label>\n                <md-select name="context" ng-model="vm.inboundroute.context" required>\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteForm[\'context\'].$error" ng-show="inboundrouteForm[\'context\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.inboundroute.description">\n\n                <div ng-messages="inboundrouteForm[\'description\'].$error" ng-show="inboundrouteForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newInboundRoute" ng-click="vm.saveInboundRoute()" class="send-button md-accent md-raised" ng-disabled="inboundrouteForm.$invalid || inboundrouteForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newInboundRoute" ng-click="vm.addNewInboundRoute()" class="send-button md-accent md-raised" ng-disabled="inboundrouteForm.$invalid" aria-label="ADD" translate="VOICE.ADD_INBOUNDROUTE" translate-attr-aria-label="VOICE.ADD_INBOUNDROUTE">\n                    ADD INBOUNDROUTE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newInboundRoute" ng-click="vm.deleteInboundRoute($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/agi/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PROJECT">Project</label>\n                <md-select name="project" ng-model="vm.agi.project" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'agi://127.0.0.1/square,{{project.name}}\'" ng-repeat="project in vm.projects" ng-disabled="project.canSelect === false">{{ project.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'project\'].$error" ng-show="inboundrouteFormApp[\'project\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PROJECT_REQUIRED">Project field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/custom/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.APPLICATION_NAME">Application_Name</label>\n                <input type="text" name="app" ng-model="vm.custom.app" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'app\'].$error" ng-show="inboundrouteFormApp[\'app\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.APPLICATION_NAME_REQUIRED">Application_Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.ARGUMENTS">Arguments</label>\n                <input type="text" name="appdata" ng-model="vm.custom.appdata" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'appdata\'].$error" ng-show="inboundrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.ARGUMENTS_REQUIRED">Arguments field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/dial/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TECHNOLOGY/RESOURCE">Technology/Resource</label>\n                <input type="text" name="tech" ng-model="vm.dial.tech" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'tech\'].$error" ng-show="inboundrouteFormApp[\'tech\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TECHNOLOGY/RESOURCE_REQUIRED">Technology/Resource field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.dial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'timeout\'].$error" ng-show="inboundrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.dial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.dial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'url\'].$error" ng-show="inboundrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/externaldial/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TRUNK">Trunk</label>\n                <md-select name="trunk" ng-model="vm.externaldial.trunk" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="trunk.name" ng-repeat="trunk in vm.trunks" ng-disabled="trunk.canSelect === false">{{ trunk.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'trunk\'].$error" ng-show="inboundrouteFormApp[\'trunk\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PHONE">Phone</label>\n                <input type="text" name="phone" ng-model="vm.externaldial.phone" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'phone\'].$error" ng-show="inboundrouteFormApp[\'phone\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.externaldial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'timeout\'].$error" ng-show="inboundrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.externaldial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.externaldial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'url\'].$error" ng-show="inboundrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/goto/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CONTEXT">Context</label>\n                <md-select name="context" ng-model="vm.goto.context" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'context\'].$error" ng-show="inboundrouteFormApp[\'context\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.EXTENSION">Extension</label>\n                <input type="text" name="extension" ng-model="vm.goto.extension" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'extension\'].$error" ng-show="inboundrouteFormApp[\'extension\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.EXTENSION_REQUIRED">Extension field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PRIORITY">Priority</label>\n                <input type="text" name="priority" ng-model="vm.goto.priority" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'priority\'].$error" ng-show="inboundrouteFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/hangup/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.HANGUP_CAUSE">Hangup_Cause</label>\n                <md-select name="appdata" ng-model="vm.hangup.appdata" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n\n                    <md-option ng-value="\'1\'"> {{ \'VOICE.HANGUPCAUSE_1\' | translate }} </md-option>\n\n                    <md-option ng-value="\'16\'"> {{ \'VOICE.HANGUPCAUSE_16\' | translate }} </md-option>\n\n                    <md-option ng-value="\'17\'"> {{ \'VOICE.HANGUPCAUSE_17\' | translate }} </md-option>\n\n                    <md-option ng-value="\'18\'"> {{ \'VOICE.HANGUPCAUSE_18\' | translate }} </md-option>\n\n                    <md-option ng-value="\'21\'"> {{ \'VOICE.HANGUPCAUSE_21\' | translate }} </md-option>\n\n                    <md-option ng-value="\'22\'"> {{ \'VOICE.HANGUPCAUSE_22\' | translate }} </md-option>\n\n                    <md-option ng-value="\'27\'"> {{ \'VOICE.HANGUPCAUSE_27\' | translate }} </md-option>\n\n                    <md-option ng-value="\'38\'"> {{ \'VOICE.HANGUPCAUSE_38\' | translate }} </md-option>\n\n                    <md-option ng-value="\'41\'"> {{ \'VOICE.HANGUPCAUSE_41\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'appdata\'].$error" ng-show="inboundrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.HANGUP_CAUSE_REQUIRED">Hangup_Cause field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/internaldial/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.USER">User</label>\n                <md-select name="user" ng-model="vm.internaldial.user" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'SIP/{{user.name}}\'" ng-repeat="user in vm.users" ng-disabled="user.canSelect === false">{{ user.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'user\'].$error" ng-show="inboundrouteFormApp[\'user\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.USER_REQUIRED">User field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.internaldial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'timeout\'].$error" ng-show="inboundrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.internaldial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.internaldial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'url\'].$error" ng-show="inboundrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/playback/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.AUDIO_FILES">Audio_Files</label>\n                <md-select name="appdata" ng-model="vm.playback.appdata" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/{{appdata.save_name}}\'" ng-repeat="appdata in vm.sounds" ng-disabled="appdata.canSelect === false">{{ appdata.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'appdata\'].$error" ng-show="inboundrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.AUDIO_FILES_REQUIRED">Audio_Files field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.playback.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.playback.answer" aria-label="Answer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="VOICE.ANSWER">Answer</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/queue/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'queue\'].$error" ng-show="inboundrouteFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.queue.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="URL" ng-model="vm.queue.URL" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'URL\'].$error" ng-show="inboundrouteFormApp[\'URL\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.ANNOUNCE_OVERRIDES">Announce_Overrides</label>\n                <md-select name="sound" ng-model="vm.queue.sound" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/{{sound.save_name}}\'" ng-repeat="sound in vm.sounds" ng-disabled="sound.canSelect === false">{{ sound.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'sound\'].$error" ng-show="inboundrouteFormApp[\'sound\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.ANNOUNCE_OVERRIDES_REQUIRED">Announce_Overrides field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'timeout\'].$error" ng-show="inboundrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.AGI">Agi</label>\n                <input type="text" name="agi" ng-model="vm.queue.agi" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'agi\'].$error" ng-show="inboundrouteFormApp[\'agi\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.AGI_REQUIRED">Agi field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.MACRO">Macro</label>\n                <input type="text" name="macro" ng-model="vm.queue.macro" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'macro\'].$error" ng-show="inboundrouteFormApp[\'macro\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.MACRO_REQUIRED">Macro field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.GOSUB">GoSub</label>\n                <input type="text" name="gosub" ng-model="vm.queue.gosub" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'gosub\'].$error" ng-show="inboundrouteFormApp[\'gosub\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.GOSUB_REQUIRED">GoSub field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.RULE">Rule</label>\n                <input type="text" name="rule" ng-model="vm.queue.rule" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'rule\'].$error" ng-show="inboundrouteFormApp[\'rule\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.RULE_REQUIRED">Rule field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.POSITION">Position</label>\n                <input type="number" name="position" ng-model="vm.queue.position" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'position\'].$error" ng-show="inboundrouteFormApp[\'position\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.POSITION_REQUIRED">Position field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.POSITION_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Position must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.queue.answer" aria-label="Answer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="VOICE.ANSWER">Answer</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/ringgroup/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.USER">User</label>\n                <md-select name="multipleUsers" ng-model="vm.ringgroup.multipleUsers" autofocus multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'SIP/{{multipleUsers.name}}\'" ng-repeat="multipleUsers in vm.users" ng-disabled="multipleUsers.canSelect === false">{{ multipleUsers.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'multipleUsers\'].$error" ng-show="inboundrouteFormApp[\'multipleUsers\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.USER_REQUIRED">User field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.ringgroup.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'timeout\'].$error" ng-show="inboundrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.ringgroup.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.ringgroup.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'url\'].$error" ng-show="inboundrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/set/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.VARIABLE">Variable</label>\n                <md-select name="name" ng-model="vm.set.name" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="name.name" ng-repeat="name in vm.variables" ng-disabled="name.canSelect === false">{{ name.name }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'name\'].$error" ng-show="inboundrouteFormApp[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.set.value" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'value\'].$error" ng-show="inboundrouteFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/apps/voicemail/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New InboundRoute">\n    <form name="inboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.MAILBOX@CONTEXT">Mailbox@Context</label>\n                <md-select name="voiceMail" ng-model="vm.voicemail.voiceMail" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'{{voiceMail.mailbox}}@from-voicemail\'" ng-repeat="voiceMail in vm.voiceMails" ng-disabled="voiceMail.canSelect === false">{{ voiceMail.mailbox }}</md-option>\n                </md-select>\n                <div ng-messages="inboundrouteFormApp[\'voiceMail\'].$error" ng-show="inboundrouteFormApp[\'voiceMail\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.MAILBOX@CONTEXT_REQUIRED">Mailbox@Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.voicemail.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="inboundrouteFormApp[\'options\'].$error" ng-show="inboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="inboundrouteFormApp.$invalid || inboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/inboundroutes/edit/view.html",'<div id="voice-inboundroute" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-inboundroutes-button md-icon-button" aria-label="Go to inboundroutes" ng-click="vm.gotoInboundRoutes()" translate translate-attr-aria-label="VOICE.GO_TO_INBOUNDROUTES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="inboundroute-image" hide-xs>\n                    <img ng-src="assets/images/business/inboundroutes.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.inboundroute.id}}\n                        <span ng-if="vm.inboundroute.name">{{vm.inboundroute.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="VOICE.CREATED_AT"></span> <span>{{vm.inboundroute.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveInboundRoute()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (actionsForm.$invalid)" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="inboundroute-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.PHONENUMBER">PhoneNumber</label>\n                                <input type="text" name="exten" ng-model="vm.inboundroute.exten" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'exten\'].$error" ng-show="generalForm[\'exten\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.PHONENUMBER_REQUIRED">PhoneNumber field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.CONTEXT">Context</label>\n                                <md-select name="context" ng-model="vm.inboundroute.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.inboundroute.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="inboundroute-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="InboundRouteActionsController as vm_ac" ng-init="vm_ac.init(vm.inboundroute, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="VOICE.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedInboundRouteApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedInboundRouteApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedInboundRouteApps.length}} {{vm_ac.selectedInboundRouteApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedInboundRouteApps($event)" aria-label="delete selected" translate translate-attr-label="VOICE.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedInboundRouteApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.inboundrouteApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editInboundRouteApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editInboundRouteApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInboundRouteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.inboundrouteApps.rows.length">\n                                                <td md-cell colspan="6">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                        <tfoot md-foot>\n                                            <tr md-row>\n                                                <td md-cell colspan="7">\n                                                    <span><em translate="VOICE.LEGEND.CUSTOM_APPLICATION">(*) - Custom application.</em></span>\n                                                </td>\n                                            </tr>\n                                        </tfoot>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/voice/views/inboundroutes/inboundroutes.html",'<div id="inboundroutes" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.INBOUNDROUTES">InboundRoutes</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedInboundRoutes.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedInboundRoutes =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-inboundroutes-count">\n                    <span>{{vm.selectedInboundRoutes.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="INBOUNDROUTES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllInboundRoutes()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectInboundRoutes()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedInboundRoutes" csv-label="true" filename="inboundroutes.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedInboundRoutes($event)" aria-label="delete selected" translate translate-attr-label="INBOUNDROUTES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- INBOUNDROUTE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedInboundRoutes" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getInboundRoutes">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="exten">{{ \'VOICE.PHONENUMBER\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.inboundroutes.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="inboundroute" md-select-id="id" ng-repeat="inboundroute in vm.inboundroutes.rows">\n                                <td md-cell ng-if="inboundroute.userpic"><img class="avatar" alt="{{inboundroute.name}}" ng-src="api/users/{{inboundroute.id}}/avatar" /></td>\n                                <td md-cell ng-if="!inboundroute.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{inboundroute.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(inboundroute, ev) : vm.createOrEditInboundRoute($event, inboundroute)" md-cell class="id ">{{inboundroute.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(inboundroute, ev) : vm.createOrEditInboundRoute($event, inboundroute)" md-cell class="exten ">{{inboundroute.exten}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(inboundroute, ev) : vm.createOrEditInboundRoute($event, inboundroute)" md-cell class="description ">{{inboundroute.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(inboundroute, $event    )" translate="VOICE.EDIT_INBOUNDROUTE">\n                                                    Edit InboundRoute\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(inboundroute, $event    )" translate="VOICE.DELETE_INBOUNDROUTE">\n                                                    Delete InboundRoute\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.inboundroutes.count}}" md-on-paginate="vm.getInboundRoutes" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / INBOUNDROUTE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD INBOUNDROUTE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-inboundroute-button" ng-click="vm.createOrEditInboundRoute($event)" aria-label="add inboundroute" translate translate-attr-aria-label="VOICE.ADD_INBOUNDROUTE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD INBOUNDROUTE BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/internalroutes/create/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PHONENUMBER">PhoneNumber</label>\n                <input type="text" name="exten" ng-model="vm.internalroute.exten" ng-required="true" autofocus>\n\n                <div ng-messages="internalrouteForm[\'exten\'].$error" ng-show="internalrouteForm[\'exten\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PHONENUMBER_REQUIRED">PhoneNumber field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CONTEXT">Context</label>\n                <md-select name="context" ng-model="vm.internalroute.context" required>\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteForm[\'context\'].$error" ng-show="internalrouteForm[\'context\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.internalroute.description">\n\n                <div ng-messages="internalrouteForm[\'description\'].$error" ng-show="internalrouteForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newInternalRoute" ng-click="vm.saveInternalRoute()" class="send-button md-accent md-raised" ng-disabled="internalrouteForm.$invalid || internalrouteForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newInternalRoute" ng-click="vm.addNewInternalRoute()" class="send-button md-accent md-raised" ng-disabled="internalrouteForm.$invalid" aria-label="ADD" translate="VOICE.ADD_INTERNALROUTE" translate-attr-aria-label="VOICE.ADD_INTERNALROUTE">\n                    ADD INTERNALROUTE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newInternalRoute" ng-click="vm.deleteInternalRoute($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/agi/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PROJECT">Project</label>\n                <md-select name="project" ng-model="vm.agi.project" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'agi://127.0.0.1/square,{{project.name}}\'" ng-repeat="project in vm.projects" ng-disabled="project.canSelect === false">{{ project.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'project\'].$error" ng-show="internalrouteFormApp[\'project\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PROJECT_REQUIRED">Project field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/custom/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.APPLICATION_NAME">Application_Name</label>\n                <input type="text" name="app" ng-model="vm.custom.app" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'app\'].$error" ng-show="internalrouteFormApp[\'app\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.APPLICATION_NAME_REQUIRED">Application_Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.ARGUMENTS">Arguments</label>\n                <input type="text" name="appdata" ng-model="vm.custom.appdata" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'appdata\'].$error" ng-show="internalrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.ARGUMENTS_REQUIRED">Arguments field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/dial/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TECHNOLOGY/RESOURCE">Technology/Resource</label>\n                <input type="text" name="tech" ng-model="vm.dial.tech" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'tech\'].$error" ng-show="internalrouteFormApp[\'tech\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TECHNOLOGY/RESOURCE_REQUIRED">Technology/Resource field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.dial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'timeout\'].$error" ng-show="internalrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.dial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.dial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'url\'].$error" ng-show="internalrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/externaldial/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TRUNK">Trunk</label>\n                <md-select name="trunk" ng-model="vm.externaldial.trunk" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="trunk.name" ng-repeat="trunk in vm.trunks" ng-disabled="trunk.canSelect === false">{{ trunk.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'trunk\'].$error" ng-show="internalrouteFormApp[\'trunk\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PHONE">Phone</label>\n                <input type="text" name="phone" ng-model="vm.externaldial.phone" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'phone\'].$error" ng-show="internalrouteFormApp[\'phone\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PHONE_REQUIRED">Phone field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.externaldial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'timeout\'].$error" ng-show="internalrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.externaldial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.externaldial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'url\'].$error" ng-show="internalrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/goto/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CONTEXT">Context</label>\n                <md-select name="context" ng-model="vm.goto.context" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'context\'].$error" ng-show="internalrouteFormApp[\'context\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.EXTENSION">Extension</label>\n                <input type="text" name="extension" ng-model="vm.goto.extension" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'extension\'].$error" ng-show="internalrouteFormApp[\'extension\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.EXTENSION_REQUIRED">Extension field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PRIORITY">Priority</label>\n                <input type="text" name="priority" ng-model="vm.goto.priority" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'priority\'].$error" ng-show="internalrouteFormApp[\'priority\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PRIORITY_REQUIRED">Priority field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/hangup/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.HANGUP_CAUSE">Hangup_Cause</label>\n                <md-select name="appdata" ng-model="vm.hangup.appdata" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n\n                    <md-option ng-value="\'1\'"> {{ \'VOICE.HANGUPCAUSE_1\' | translate }} </md-option>\n\n                    <md-option ng-value="\'16\'"> {{ \'VOICE.HANGUPCAUSE_16\' | translate }} </md-option>\n\n                    <md-option ng-value="\'17\'"> {{ \'VOICE.HANGUPCAUSE_17\' | translate }} </md-option>\n\n                    <md-option ng-value="\'18\'"> {{ \'VOICE.HANGUPCAUSE_18\' | translate }} </md-option>\n\n                    <md-option ng-value="\'21\'"> {{ \'VOICE.HANGUPCAUSE_21\' | translate }} </md-option>\n\n                    <md-option ng-value="\'22\'"> {{ \'VOICE.HANGUPCAUSE_22\' | translate }} </md-option>\n\n                    <md-option ng-value="\'27\'"> {{ \'VOICE.HANGUPCAUSE_27\' | translate }} </md-option>\n\n                    <md-option ng-value="\'38\'"> {{ \'VOICE.HANGUPCAUSE_38\' | translate }} </md-option>\n\n                    <md-option ng-value="\'41\'"> {{ \'VOICE.HANGUPCAUSE_41\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'appdata\'].$error" ng-show="internalrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.HANGUP_CAUSE_REQUIRED">Hangup_Cause field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/internaldial/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.USER">User</label>\n                <md-select name="user" ng-model="vm.internaldial.user" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'SIP/{{user.name}}\'" ng-repeat="user in vm.users" ng-disabled="user.canSelect === false">{{ user.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'user\'].$error" ng-show="internalrouteFormApp[\'user\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.USER_REQUIRED">User field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.internaldial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'timeout\'].$error" ng-show="internalrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.internaldial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.internaldial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'url\'].$error" ng-show="internalrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/playback/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.AUDIO_FILES">Audio_Files</label>\n                <md-select name="appdata" ng-model="vm.playback.appdata" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/{{appdata.save_name}}\'" ng-repeat="appdata in vm.sounds" ng-disabled="appdata.canSelect === false">{{ appdata.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'appdata\'].$error" ng-show="internalrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.AUDIO_FILES_REQUIRED">Audio_Files field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.playback.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.playback.answer" aria-label="Answer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="VOICE.ANSWER">Answer</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/queue/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.QUEUE">Queue</label>\n                <md-select name="queue" ng-model="vm.queue.queue" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues" ng-disabled="queue.canSelect === false">{{ queue.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'queue\'].$error" ng-show="internalrouteFormApp[\'queue\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.QUEUE_REQUIRED">Queue field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.queue.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="URL" ng-model="vm.queue.URL" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'URL\'].$error" ng-show="internalrouteFormApp[\'URL\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.ANNOUNCE_OVERRIDES">Announce_Overrides</label>\n                <md-select name="sound" ng-model="vm.queue.sound" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'\'">None</md-option>\n                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/{{sound.save_name}}\'" ng-repeat="sound in vm.sounds" ng-disabled="sound.canSelect === false">{{ sound.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'sound\'].$error" ng-show="internalrouteFormApp[\'sound\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.ANNOUNCE_OVERRIDES_REQUIRED">Announce_Overrides field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.queue.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'timeout\'].$error" ng-show="internalrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.AGI">Agi</label>\n                <input type="text" name="agi" ng-model="vm.queue.agi" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'agi\'].$error" ng-show="internalrouteFormApp[\'agi\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.AGI_REQUIRED">Agi field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.MACRO">Macro</label>\n                <input type="text" name="macro" ng-model="vm.queue.macro" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'macro\'].$error" ng-show="internalrouteFormApp[\'macro\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.MACRO_REQUIRED">Macro field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.GOSUB">GoSub</label>\n                <input type="text" name="gosub" ng-model="vm.queue.gosub" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'gosub\'].$error" ng-show="internalrouteFormApp[\'gosub\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.GOSUB_REQUIRED">GoSub field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.RULE">Rule</label>\n                <input type="text" name="rule" ng-model="vm.queue.rule" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'rule\'].$error" ng-show="internalrouteFormApp[\'rule\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.RULE_REQUIRED">Rule field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.POSITION">Position</label>\n                <input type="number" name="position" ng-model="vm.queue.position" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'position\'].$error" ng-show="internalrouteFormApp[\'position\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.POSITION_REQUIRED">Position field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.POSITION_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Position must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.queue.answer" aria-label="Answer" ng-disabled="!vm.crudPermissions.canEdit"><span translate="VOICE.ANSWER">Answer</span></md-switch>\n\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/ringgroup/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.USER">User</label>\n                <md-select name="multipleUsers" ng-model="vm.ringgroup.multipleUsers" autofocus multiple required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'SIP/{{multipleUsers.name}}\'" ng-repeat="multipleUsers in vm.users" ng-disabled="multipleUsers.canSelect === false">{{ multipleUsers.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'multipleUsers\'].$error" ng-show="internalrouteFormApp[\'multipleUsers\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.USER_REQUIRED">User field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.ringgroup.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'timeout\'].$error" ng-show="internalrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.ringgroup.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.ringgroup.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'url\'].$error" ng-show="internalrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/set/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.VARIABLE">Variable</label>\n                <md-select name="name" ng-model="vm.set.name" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="name.name" ng-repeat="name in vm.variables" ng-disabled="name.canSelect === false">{{ name.name }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'name\'].$error" ng-show="internalrouteFormApp[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.VARIABLE_REQUIRED">Variable field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.VALUE">Value</label>\n                <input type="text" name="value" ng-model="vm.set.value" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'value\'].$error" ng-show="internalrouteFormApp[\'value\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.VALUE_REQUIRED">Value field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/apps/voicemail/dialog.html",'<md-dialog class="internalroute-dialog" aria-label="New InternalRoute">\n    <form name="internalrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.MAILBOX@CONTEXT">Mailbox@Context</label>\n                <md-select name="voiceMail" ng-model="vm.voicemail.voiceMail" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'{{voiceMail.mailbox}}@from-voicemail\'" ng-repeat="voiceMail in vm.voiceMails" ng-disabled="voiceMail.canSelect === false">{{ voiceMail.mailbox }}</md-option>\n                </md-select>\n                <div ng-messages="internalrouteFormApp[\'voiceMail\'].$error" ng-show="internalrouteFormApp[\'voiceMail\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.MAILBOX@CONTEXT_REQUIRED">Mailbox@Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.voicemail.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="internalrouteFormApp[\'options\'].$error" ng-show="internalrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveInternalRouteApp()" class="send-button md-accent md-raised" ng-disabled="internalrouteFormApp.$invalid || internalrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/internalroutes/edit/view.html",'<div id="voice-internalroute" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-internalroutes-button md-icon-button" aria-label="Go to internalroutes" ng-click="vm.gotoInternalRoutes()" translate translate-attr-aria-label="VOICE.GO_TO_INTERNALROUTES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="internalroute-image" hide-xs>\n                    <img ng-src="assets/images/business/internalroutes.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.internalroute.id}}\n                        <span ng-if="vm.internalroute.name">{{vm.internalroute.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="VOICE.CREATED_AT"></span> <span>{{vm.internalroute.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveInternalRoute()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (actionsForm.$invalid)" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="internalroute-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.PHONENUMBER">PhoneNumber</label>\n                                <input type="text" name="exten" ng-model="vm.internalroute.exten" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'exten\'].$error" ng-show="generalForm[\'exten\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.PHONENUMBER_REQUIRED">PhoneNumber field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.CONTEXT">Context</label>\n                                <md-select name="context" ng-model="vm.internalroute.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.internalroute.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="internalroute-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="InternalRouteActionsController as vm_ac" ng-init="vm_ac.init(vm.internalroute, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="VOICE.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedInternalRouteApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedInternalRouteApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedInternalRouteApps.length}} {{vm_ac.selectedInternalRouteApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedInternalRouteApps($event)" aria-label="delete selected" translate translate-attr-label="VOICE.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedInternalRouteApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.internalrouteApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editInternalRouteApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editInternalRouteApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInternalRouteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.internalrouteApps.rows.length">\n                                                <td md-cell colspan="6">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                        <tfoot md-foot>\n                                            <tr md-row>\n                                                <td md-cell colspan="7">\n                                                    <span><em translate="VOICE.LEGEND.CUSTOM_APPLICATION">(*) - Custom application.</em></span>\n                                                </td>\n                                            </tr>\n                                        </tfoot>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/voice/views/internalroutes/internalroutes.html",'<div id="internalroutes" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.INTERNALROUTES">InternalRoutes</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedInternalRoutes.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedInternalRoutes =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-internalroutes-count">\n                    <span>{{vm.selectedInternalRoutes.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="INTERNALROUTES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllInternalRoutes()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectInternalRoutes()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedInternalRoutes" csv-label="true" filename="internalroutes.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedInternalRoutes($event)" aria-label="delete selected" translate translate-attr-label="INTERNALROUTES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- INTERNALROUTE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedInternalRoutes" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getInternalRoutes">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="exten">{{ \'VOICE.PHONENUMBER\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.internalroutes.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="internalroute" md-select-id="id" ng-repeat="internalroute in vm.internalroutes.rows">\n                                <td md-cell ng-if="internalroute.userpic"><img class="avatar" alt="{{internalroute.name}}" ng-src="api/users/{{internalroute.id}}/avatar" /></td>\n                                <td md-cell ng-if="!internalroute.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{internalroute.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(internalroute, ev) : vm.createOrEditInternalRoute($event, internalroute)" md-cell class="id ">{{internalroute.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(internalroute, ev) : vm.createOrEditInternalRoute($event, internalroute)" md-cell class="exten ">{{internalroute.exten}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(internalroute, ev) : vm.createOrEditInternalRoute($event, internalroute)" md-cell class="description ">{{internalroute.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(internalroute, $event    )" translate="VOICE.EDIT_INTERNALROUTE">\n                                                    Edit InternalRoute\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(internalroute, $event    )" translate="VOICE.DELETE_INTERNALROUTE">\n                                                    Delete InternalRoute\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.internalroutes.count}}" md-on-paginate="vm.getInternalRoutes" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / INTERNALROUTE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD INTERNALROUTE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-internalroute-button" ng-click="vm.createOrEditInternalRoute($event)" aria-label="add internalroute" translate translate-attr-aria-label="VOICE.ADD_INTERNALROUTE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD INTERNALROUTE BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/musiconholds/create/dialog.html",'<md-dialog class="musiconhold-dialog" aria-label="New MusicOnHold">\n    <form name="musiconholdForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.musiconhold.name" ng-required="true" autofocus ng-disabled="!vm.newMusicOnHold">\n\n                <div ng-messages="musiconholdForm[\'name\'].$error" ng-show="musiconholdForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.MODE">Mode</label>\n                <md-select name="mode" ng-model="vm.musiconhold.mode" required ng-disabled="!vm.newMusicOnHold">\n\n                    <md-option ng-value="\'files\'"> {{ \'VOICE.FILES\' | translate }} </md-option>\n\n                    <md-option ng-value="\'custom\'"> {{ \'VOICE.CUSTOM\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="musiconholdForm[\'mode\'].$error" ng-show="musiconholdForm[\'mode\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.MODE_REQUIRED">Mode field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.musiconhold.mode == \'custom\'" class="md-block">\n                <label translate="VOICE.DIRECTORY">Directory</label>\n                <input type="" name="directory" ng-model="vm.musiconhold.directory">\n\n                <div ng-messages="musiconholdForm[\'directory\'].$error" ng-show="musiconholdForm[\'directory\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DIRECTORY_REQUIRED">Directory field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.musiconhold.mode == \'custom\'" class="md-block">\n                <label translate="VOICE.APPLICATION">Application</label>\n                <input type="text" name="application" ng-model="vm.musiconhold.application" ng-required="true">\n\n                <div ng-messages="musiconholdForm[\'application\'].$error" ng-show="musiconholdForm[\'application\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.APPLICATION_REQUIRED">Application field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container ng-if="vm.musiconhold.mode == \'files\'" class="md-block">\n                <label translate="VOICE.SORT">Sort</label>\n                <md-select name="sort" ng-model="vm.musiconhold.sort">\n\n                    <md-option ng-value="\'random\'"> {{ \'VOICE.RANDOM\' | translate }} </md-option>\n\n                    <md-option ng-value="\'alpha\'"> {{ \'VOICE.ALPHABETICAL\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="musiconholdForm[\'sort\'].$error" ng-show="musiconholdForm[\'sort\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.SORT_REQUIRED">Sort field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMusicOnHold" ng-click="vm.saveMusicOnHold()" class="send-button md-accent md-raised" ng-disabled="musiconholdForm.$invalid || musiconholdForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMusicOnHold" ng-click="vm.addNewMusicOnHold()" class="send-button md-accent md-raised" ng-disabled="musiconholdForm.$invalid" aria-label="ADD" translate="VOICE.ADD_MUSICONHOLD" translate-attr-aria-label="VOICE.ADD_MUSICONHOLD">\n                    ADD MUSICONHOLD\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMusicOnHold" ng-click="vm.deleteMusicOnHold($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/musiconholds/edit/mohSounds/dialog.html",'<md-dialog class="mohSound-dialog" aria-label="New MohSound">\n    <form name="mohSoundForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.FILE">File</label>\n                <md-select name="id" ng-model="vm.mohSound.id" autofocus>\n                    <md-option ng-value="id.id" ng-repeat="id in vm.sounds" ng-disabled="id.canSelect === false">{{ id.name }}</md-option>\n                </md-select>\n                <div ng-messages="mohSoundForm[\'id\'].$error" ng-show="mohSoundForm[\'id\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.FILE_REQUIRED">File field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newMohSound" ng-click="vm.saveMohSound()" class="send-button md-accent md-raised" ng-disabled="mohSoundForm.$invalid || mohSoundForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newMohSound" ng-click="vm.addNewMohSound()" class="send-button md-accent md-raised" ng-disabled="mohSoundForm.$invalid" aria-label="ADD" translate="VOICE.ADD_MOHSOUND" translate-attr-aria-label="VOICE.ADD_MOHSOUND">\n                    ADD MOHSOUND\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newMohSound" ng-click="vm.deleteMohSound($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/musiconholds/edit/view.html",'<div id="voice-musiconhold" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-musiconholds-button md-icon-button" aria-label="Go to musiconholds" ng-click="vm.gotoMusicOnHolds()" translate translate-attr-aria-label="VOICE.GO_TO_MUSICONHOLDS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="musiconhold-image" hide-xs>\n                    <img ng-src="assets/images/business/musiconholds.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.musiconhold.id}}\n                        <span ng-if="vm.musiconhold.name">{{vm.musiconhold.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="VOICE.CREATED_AT"></span> <span>{{vm.musiconhold.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveMusicOnHold()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (mohSoundsForm.$invalid)" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="musiconhold-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.musiconhold.name" ng-required="true" autofocus disabled>\n\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MODE">Mode</label>\n                                <md-select name="mode" ng-model="vm.musiconhold.mode" required disabled>\n\n                                    <md-option ng-value="\'files\'"> {{ \'VOICE.FILES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'custom\'"> {{ \'VOICE.CUSTOM\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'mode\'].$error" ng-show="generalForm[\'mode\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MODE_REQUIRED">Mode field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.musiconhold.mode == \'custom\'" class="md-block">\n                                <label translate="VOICE.DIRECTORY">Directory</label>\n                                <input type="" name="directory" ng-model="vm.musiconhold.directory" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'directory\'].$error" ng-show="generalForm[\'directory\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.DIRECTORY_REQUIRED">Directory field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.musiconhold.mode == \'custom\'" class="md-block">\n                                <label translate="VOICE.APPLICATION">Application</label>\n                                <input type="text" name="application" ng-model="vm.musiconhold.application" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'application\'].$error" ng-show="generalForm[\'application\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.APPLICATION_REQUIRED">Application field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.musiconhold.mode == \'files\'" class="md-block">\n                                <label translate="VOICE.SORT">Sort</label>\n                                <md-select name="sort" ng-model="vm.musiconhold.sort" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'random\'"> {{ \'VOICE.RANDOM\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'alpha\'"> {{ \'VOICE.ALPHABETICAL\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'sort\'].$error" ng-show="generalForm[\'sort\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.SORT_REQUIRED">Sort field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.AUDIOFILES">AUDIOFILES</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="musiconhold-detail-form-container mohsounds md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="MusicOnHoldMohSoundsController as vm_dc" ng-init="vm_dc.init(vm.musiconhold, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedMusicOnHoldMohSounds.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="VOICE.MOHSOUNDS">MohSounds</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    <md-button ng-if="vm_dc.crudPermissions.canEdit" class="md-icon-button" ng-click="vm_dc.createOrEditMusicOnHoldMohSound($event)" aria-label="add mohSound" translate translate-attr-label="VOICE.ADD_MOHSOUND">\n                                        <md-icon md-font-icon="icon-plus"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedMusicOnHoldMohSounds.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedMusicOnHoldMohSounds.length}} {{vm_dc.selectedMusicOnHoldMohSounds.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedMusicOnHoldMohSounds" csv-label="true" filename="musiconholds.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedMusicOnHoldMohSounds($event)" aria-label="delete selected" translate translate-attr-label="MUSICONHOLDS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedMusicOnHoldMohSounds" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getMusicOnHoldMohSounds">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                            <th md-column md-order-by="audio">{{ \'VOICE.AUDIO\' | translate }}</th>\n                                            <th md-column md-order-by="createdAt">{{ \'VOICE.CREATED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="mohSound" md-select-id="id" ng-repeat="mohSound in vm_dc.musiconholdMohSounds.rows">\n                                            <td md-cell>{{mohSound.id}}</td>\n                                            <td md-cell>\n                                                \x3c!-- audio recording directive --\x3e\n                                                <ms-recording id="mohSound.id" model="\'sound\'"></ms-recording>\n                                                \x3c!-- / audio recording directive --\x3e\n                                            </td>\n                                            <td md-cell>{{mohSound.createdAt | date:\'medium\'}}</td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.voiceMusicOnHoldDownload(mohSound, $event)" translate="VOICE.DOWNLOAD_MOHSOUND">\n                                                                Download MohSound\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(mohSound, $event)" translate="VOICE.DELETE_MOHSOUND">\n                                                                Delete MohSound\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.musiconholdMohSounds.rows.length">\n                                            <td md-cell colspan="8">\n                                                <span class="text-boxed-ligth" translate="VOICE.NO_MOHSOUND_AVAILABLE">No mohsound available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.musiconholdMohSounds.count}}" md-on-paginate="vm_dc.getMusicOnHoldMohSounds" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/voice/views/musiconholds/musiconholds.html",'<div id="musiconholds" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.MUSICONHOLDS">MusicOnHolds</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedMusicOnHolds.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedMusicOnHolds =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-musiconholds-count">\n                    <span>{{vm.selectedMusicOnHolds.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="MUSICONHOLDS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllMusicOnHolds()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectMusicOnHolds()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedMusicOnHolds" csv-label="true" filename="musiconholds.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedMusicOnHolds($event)" aria-label="delete selected" translate translate-attr-label="MUSICONHOLDS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- MUSICONHOLD TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedMusicOnHolds" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getMusicOnHolds">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="mode">{{ \'VOICE.MODE\' | translate }}</th>\n                                <th md-column md-order-by="sort">{{ \'VOICE.SORT\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.musiconholds.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="musiconhold" md-select-id="id" ng-repeat="musiconhold in vm.musiconholds.rows">\n                                <td md-cell ng-if="musiconhold.userpic"><img class="avatar" alt="{{musiconhold.name}}" ng-src="api/users/{{musiconhold.id}}/avatar" /></td>\n                                <td md-cell ng-if="!musiconhold.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{musiconhold.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(musiconhold, ev) : vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="id ">{{musiconhold.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(musiconhold, ev) : vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="name ">{{musiconhold.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(musiconhold, ev) : vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="mode ">{{ \'VOICE.\' + vm.arraymode[musiconhold.mode].option | uppercase | translate }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(musiconhold, ev) : vm.createOrEditMusicOnHold($event, musiconhold)" md-cell class="sort ">{{ \'VOICE.\' + vm.arraysort[musiconhold.sort].option | uppercase | translate }}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(musiconhold, $event    )" translate="VOICE.EDIT_MUSICONHOLD">\n                                                    Edit MusicOnHold\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(musiconhold, $event    )" translate="VOICE.DELETE_MUSICONHOLD">\n                                                    Delete MusicOnHold\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.musiconholds.count}}" md-on-paginate="vm.getMusicOnHolds" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / MUSICONHOLD TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD MUSICONHOLD BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-musiconhold-button" ng-click="vm.createOrEditMusicOnHold($event)" aria-label="add musiconhold" translate translate-attr-aria-label="VOICE.ADD_MUSICONHOLD">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD MUSICONHOLD BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/outboundroutes/create/dialog.html",'<md-dialog class="outboundroute-dialog" aria-label="New OutboundRoute">\n    <form name="outboundrouteForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PHONENUMBER">PhoneNumber</label>\n                <input type="text" name="exten" ng-model="vm.outboundroute.exten" ng-required="true" autofocus>\n\n                <div ng-messages="outboundrouteForm[\'exten\'].$error" ng-show="outboundrouteForm[\'exten\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PHONENUMBER_REQUIRED">PhoneNumber field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CONTEXT">Context</label>\n                <md-select name="context" ng-model="vm.outboundroute.context" required>\n                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                </md-select>\n                <div ng-messages="outboundrouteForm[\'context\'].$error" ng-show="outboundrouteForm[\'context\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.RECORDING">Recording</label>\n                <md-select name="recordingFormat" ng-model="vm.outboundroute.recordingFormat" required>\n                    <md-option ng-value="\'none\'">none</md-option>\n                    <md-option ng-value="\'wav\'">wav</md-option>\n                    <md-option ng-value="\'WAV\'">wav49</md-option>\n                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                </md-select>\n                <div class="hint"><span translate="VOICE.HELP.RECORDING"></span></div>\n                <div ng-messages="outboundrouteForm[\'recordingFormat\'].$error" ng-show="outboundrouteForm[\'recordingFormat\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.RECORDING_REQUIRED">Recording field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CUTDIGITS">CutDigits</label>\n                <input type="number" name="cutdigits" ng-model="vm.outboundroute.cutdigits" min="0">\n\n                <div ng-messages="outboundrouteForm[\'cutdigits\'].$error" ng-show="outboundrouteForm[\'cutdigits\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CUTDIGITS_REQUIRED">CutDigits field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.CUTDIGITS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CutDigits must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.outboundroute.description">\n\n                <div ng-messages="outboundrouteForm[\'description\'].$error" ng-show="outboundrouteForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newOutboundRoute" ng-click="vm.saveOutboundRoute()" class="send-button md-accent md-raised" ng-disabled="outboundrouteForm.$invalid || outboundrouteForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newOutboundRoute" ng-click="vm.addNewOutboundRoute()" class="send-button md-accent md-raised" ng-disabled="outboundrouteForm.$invalid" aria-label="ADD" translate="VOICE.ADD_OUTBOUNDROUTE" translate-attr-aria-label="VOICE.ADD_OUTBOUNDROUTE">\n                    ADD OUTBOUNDROUTE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newOutboundRoute" ng-click="vm.deleteOutboundRoute($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/outboundroutes/edit/apps/custom/dialog.html",'<md-dialog class="outboundroute-dialog" aria-label="New OutboundRoute">\n    <form name="outboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.APPLICATION_NAME">Application_Name</label>\n                <input type="text" name="app" ng-model="vm.custom.app" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="outboundrouteFormApp[\'app\'].$error" ng-show="outboundrouteFormApp[\'app\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.APPLICATION_NAME_REQUIRED">Application_Name field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.ARGUMENTS">Arguments</label>\n                <input type="text" name="appdata" ng-model="vm.custom.appdata" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="outboundrouteFormApp[\'appdata\'].$error" ng-show="outboundrouteFormApp[\'appdata\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.ARGUMENTS_REQUIRED">Arguments field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOutboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="outboundrouteFormApp.$invalid || outboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/outboundroutes/edit/apps/interval/dialog.html",'<md-dialog class="inboundroute-dialog" aria-label="New Interval">\n    <form name="intervalForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n\n\n            <md-input-container class="md-block">\n                <label translate="TOOLS.TYPE">Type</label>\n                <md-select ng-model="vm.type" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="type" ng-repeat=\'type in vm.types\'>{{ type | ucfirst }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.type === \'list\'">\n                <label translate="TOOLS.INTERVALS">Intervals</label>\n                <md-select ng-model="vm.interval.IntervalId" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="interval.id" ng-repeat="interval in vm.intervals">{{ interval.name }}</md-option>\n                </md-select>\n            </md-input-container>\n\n            \x3c!-- TIMERANGE START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.TIME_RANGE">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <div class="md-block" flex>\n                    <mdp-time-picker name="timeRangeFrom" mdp-placeholder="FROM" ng-model="vm.timeRangeFrom" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <div ng-messages="intervalForm.timeRangeFrom.$error" ng-show="intervalForm.timeRangeFrom.$touched" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_FROM_INVALID">Time Range From field is invalid</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n                <div class="md-block" flex ng-if="vm.timeRangeFrom">\n                    <mdp-time-picker name="timeRangeTo" mdp-placeholder="TO*" ng-model="vm.timeRangeTo" mdp-format="HH:mm" mdp-auto-switch="true" mdp-disabled="!vm.newInterval && !vm.crudPermissions.canEdit" required>\n                        <div ng-messages="intervalForm.timeRangeTo.$error" ng-show="intervalForm.timeRangeTo.$invalid" role="alert">\n                            <div ng-message="format">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_INVALID">Time Range To field is invalid</span>\n                            </div>\n                            <div ng-message="required">\n                                <span translate="TOOLS.ERRORS.TIME_RANGE_TO_REQUIRED">Time Range To field is required</span>\n                            </div>\n                        </div>\n                    </mdp-time-picker>\n                </div>\n            </div>\n            \x3c!-- TIMERANGE END --\x3e\n\n            \x3c!-- DAYSOFWEEK START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.WEEK_DAYS">Week Days</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.dayOfWeekFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex class="md-block" ng-if="vm.dayOfWeekFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="dayOfWeekTo" ng-model="vm.dayOfWeekTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="day.value" ng-repeat="day in vm.daysOfWeek"><span translate="TOOLS.{{day.value | uppercase}}">{{ day.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.dayOfWeekTo.$error" ng-show="intervalForm.dayOfWeekTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- DAYSOFWEEK END --\x3e\n\n            \x3c!-- MONTHDAY START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTH_DAYS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthDayFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthDayFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthDayTo" ng-model="vm.monthDayTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month" ng-repeat="month in vm.daysOfMonth">{{ month }}</md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthDayTo.$error" ng-show="intervalForm.monthDayTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTHDAY END --\x3e\n\n            \x3c!-- MONTH START --\x3e\n            <label ng-if="vm.type === \'custom\'" translate="TOOLS.MONTHS">Time Range</label>\n            <div layout=row ng-if="vm.type === \'custom\'">\n                <md-input-container flex layout="column" class="md-block">\n                    <label translate="TOOLS.FROM">From</label>\n                    <md-select ng-model="vm.monthFrom" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="null"><span translate="TOOLS.ALWAYS">Always</span></md-option>\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n\n                </md-input-container>\n\n                <md-input-container flex layout="column" class="md-block" ng-if="vm.monthFrom">\n                    <label translate="TOOLS.TO">To</label>\n                    <md-select name="monthTo" ng-model="vm.monthTo" ng-disabled="!vm.newInterval && !vm.crudPermissions.canEdit">\n                        <md-option ng-value="month.value" ng-repeat="month in vm.monthName"><span translate="TOOLS.{{month.value | uppercase}}">{{ month.value | ucfirst }}</span></md-option>\n                    </md-select>\n                    <div ng-messages="intervalForm.monthTo.$error" ng-show="intervalForm.monthTo.$touched" role="alert">\n                    </div>\n                </md-input-container>\n            </div>\n            \x3c!-- MONTH END --\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="!vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.saveInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid || intervalForm.$pristine" aria-label="SAVE" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.newInterval && vm.crudPermissions.canEdit" ng-click="vm.addNewInterval()" class="send-button md-accent md-raised" ng-disabled="intervalForm.$invalid" aria-label="ADD" translate="TOOLS.ADD_INTERVAL" translate-attr-aria-label="TOOLS.ADD_INTERVAL">\n                    ADD INTERVAL\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/outboundroutes/edit/apps/outbounddial/dialog.html",'<md-dialog class="outboundroute-dialog" aria-label="New OutboundRoute">\n    <form name="outboundrouteFormApp" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TRUNK">Trunk</label>\n                <md-select name="trunk" ng-model="vm.outbounddial.trunk" autofocus required ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="trunk.name" ng-repeat="trunk in vm.trunks" ng-disabled="trunk.canSelect === false">{{ trunk.name }}</md-option>\n                </md-select>\n                <div ng-messages="outboundrouteFormApp[\'trunk\'].$error" ng-show="outboundrouteFormApp[\'trunk\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CALLER_ID">Caller_ID</label>\n                <input type="text" name="callerID" ng-model="vm.outbounddial.callerID" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div class="hint"><span translate="VOICE.HELP.CALLER_ID"></span></div>\n                <div ng-messages="outboundrouteFormApp[\'callerID\'].$error" ng-show="outboundrouteFormApp[\'callerID\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CALLER_ID_REQUIRED">Caller_ID field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PREFIX">Prefix</label>\n                <input type="text" name="prefix" ng-model="vm.outbounddial.prefix" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="outboundrouteFormApp[\'prefix\'].$error" ng-show="outboundrouteFormApp[\'prefix\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PREFIX_REQUIRED">Prefix field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TAGS">Tags</label>\n                <md-select name="tag" ng-model="vm.outbounddial.tag" ng-disabled="!vm.crudPermissions.canEdit">\n                    <md-option ng-value="\'--\'">None</md-option>\n                    <md-option ng-value="tag.name" ng-repeat="tag in vm.tags" ng-disabled="tag.canSelect === false">{{ tag.name }}</md-option>\n                </md-select>\n                <div ng-messages="outboundrouteFormApp[\'tag\'].$error" ng-show="outboundrouteFormApp[\'tag\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TAGS_REQUIRED">Tags field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.TIMEOUT">Timeout</label>\n                <input type="number" name="timeout" ng-model="vm.outbounddial.timeout" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="outboundrouteFormApp[\'timeout\'].$error" ng-show="outboundrouteFormApp[\'timeout\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                    </div>\n                    <div ng-message="min">\n                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OPTIONS">Options</label>\n                <input type="text" name="options" ng-model="vm.outbounddial.options" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="outboundrouteFormApp[\'options\'].$error" ng-show="outboundrouteFormApp[\'options\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OPTIONS_REQUIRED">Options field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.URL">Url</label>\n                <input type="text" name="url" ng-model="vm.outbounddial.url" ng-disabled="!vm.crudPermissions.canEdit">\n\n                <div ng-messages="outboundrouteFormApp[\'url\'].$error" ng-show="outboundrouteFormApp[\'url\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.URL_REQUIRED">Url field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center" ng-if="vm.crudPermissions.canEdit">\n                <md-button type="submit" ng-click="vm.saveOutboundRouteApp()" class="send-button md-accent md-raised" ng-disabled="outboundrouteFormApp.$invalid || outboundrouteFormApp.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/outboundroutes/edit/view.html",'<div id="voice-outboundroute" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-outboundroutes-button md-icon-button" aria-label="Go to outboundroutes" ng-click="vm.gotoOutboundRoutes()" translate translate-attr-aria-label="VOICE.GO_TO_OUTBOUNDROUTES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="outboundroute-image" hide-xs>\n                    <img ng-src="assets/images/business/outboundroutes.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.outboundroute.id}}\n                        <span ng-if="vm.outboundroute.name">{{vm.outboundroute.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="VOICE.CREATED_AT"></span> <span>{{vm.outboundroute.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveOutboundRoute()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (actionsForm.$invalid)" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="outboundroute-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.PHONENUMBER">PhoneNumber</label>\n                                <input type="text" name="exten" ng-model="vm.outboundroute.exten" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'exten\'].$error" ng-show="generalForm[\'exten\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.PHONENUMBER_REQUIRED">PhoneNumber field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.CONTEXT">Context</label>\n                                <md-select name="context" ng-model="vm.outboundroute.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.RECORDING">Recording</label>\n                                <md-select name="recordingFormat" ng-model="vm.outboundroute.recordingFormat" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'none\'">none</md-option>\n                                    <md-option ng-value="\'wav\'">wav</md-option>\n                                    <md-option ng-value="\'WAV\'">wav49</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.RECORDING"></span></div>\n                                <div ng-messages="generalForm[\'recordingFormat\'].$error" ng-show="generalForm[\'recordingFormat\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.RECORDING_REQUIRED">Recording field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.CUTDIGITS">CutDigits</label>\n                                <input type="number" name="cutdigits" ng-model="vm.outboundroute.cutdigits" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'cutdigits\'].$error" ng-show="generalForm[\'cutdigits\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.CUTDIGITS_REQUIRED">CutDigits field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.CUTDIGITS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">CutDigits must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.outboundroute.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ACTIONS">ACTIONS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="outboundroute-detail-form-container actions md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="OutboundRouteActionsController as vm_ac" ng-init="vm_ac.init(vm.outboundroute, vm.crudPermissions)" class="content" md-background-bg layout="row" layout-align="start start">\n                            \x3c!-- SIDENAV --\x3e\n                            <div class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="20" ng-if="vm_ac.crudPermissions.canEdit">\n                                \x3c!-- SIDENAV CONTENT --\x3e\n                                <md-list class="no-padding">\n                                    <md-subheader class="md-no-sticky">\n                                        <span translate="VOICE.APPLICATIONS_LIST">\n                                            Applications List\n                                        </span>\n                                    </md-subheader>\n                                </md-list>\n                                <md-divider></md-divider>\n                                <md-list ng-sortable="vm_ac.list">\n                                    <md-list-item class="handle" ng-repeat="a in vm_ac.apps">\n                                        <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>\n                                        <p class="text-truncate" translate="VOICE.{{(a.alias || a.appType) | uppercase}}">{{a.alias || a.appType}}</p>\n                                    </md-list-item>\n                                </md-list>\n                                \x3c!-- / SIDENAV CONTENT --\x3e\n                            </div>\n                            \x3c!-- / SIDENAV --\x3e\n                            <div flex></div>\n                            \x3c!-- MAIN --\x3e\n                            <div class="main scrollable md-background-bg md-whiteframe-1dp" ms-scroll layout="column" flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}">\n                                <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_ac.selectedOutboundRouteApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">Drag & Drop Routing</span>\n                                        <div flex></div>\n                                        <ms-search-bar on-search="vm_ac.query.filter = query" on-collapse="vm_ac.query.filter = undefined" debounce="300"></ms-search-bar>\n                                    </div>\n                                </md-toolbar>\n                                <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_ac.selectedOutboundRouteApps.length">\n                                    <div class="md-toolbar-tools">\n                                        <span class="md-subhead">{{vm_ac.selectedOutboundRouteApps.length}} {{vm_ac.selectedOutboundRouteApps.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                        <div flex></div>\n                                        <md-button ng-if="vm_ac.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_ac.deleteSelectedOutboundRouteApps($event)" aria-label="delete selected" translate translate-attr-label="VOICE.DELETE_SELECTED">\n                                            <md-icon md-font-icon="icon-delete"></md-icon>\n                                        </md-button>\n                                    </div>\n                                </md-toolbar>\n\n                                \x3c!-- QUEUES TABLE --\x3e\n                                <md-table-container>\n                                    <table md-table md-row-select multiple ng-model="vm_ac.selectedOutboundRouteApps">\n                                        <thead md-head>\n                                            <tr md-row>\n                                                <th md-column width="10px"></th>\n                                                <th md-column>\n                                                    <span>Type</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Appdata</span>\n                                                </th>\n                                                <th md-column>\n                                                    <span>Interval</span>\n                                                </th>\n                                                <th md-column width="10px"></th>\n                                                <th md-column width="10px"></th>\n                                            </tr>\n                                        </thead>\n                                        <tbody md-body ng-sortable="vm_ac.applications">\n                                            <tr md-row md-select="app" md-select-id="id" ng-repeat="app in vm_ac.outboundrouteApps.rows | filter: vm_ac.query.filter">\n                                                <td md-cell>\n                                                    <md-icon md-font-icon="icon-drag-vertical" class="s16 handle"></md-icon>\n                                                </td>\n                                                <td md-cell ng-click="vm_ac.editOutboundRouteApp($event, $index)">{{app.app.toLowerCase() === \'agi\' ? \'Cally-Square\' : app.app | ucfirst}}<span ng-if="app.appType.toLowerCase() === \'custom\'">*</span></td>\n                                                <td md-cell ng-click="vm_ac.editOutboundRouteApp($event, $index)"><span class="text-truncate" style="width:200px">{{app.appdata}}</span></td>\n                                                <td md-cell ng-click="vm_ac.editInterval($event, $index)">{{app.IntervalId ? \'From List\' : app.interval}}</td>\n                                                <td md-cell>\n                                                    <md-button ng-click="vm_ac.editInterval($event, $index)" class="md-icon-button" aria-label="Interval">\n                                                        <md-icon md-font-icon="icon-timer"></md-icon>\n                                                        <md-tooltip>\n                                                            {{app.IntervalId ? \'From List\' : (app.interval === \'*,*,*,*\' ? \'Always\' : \'Custom\')}}\n                                                        </md-tooltip>\n                                                    </md-button>\n                                                </td>\n                                                <td md-cell class="actions" ng-if="!vm_ac.crudPermissions.readOnly">\n                                                    <md-menu>\n                                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                        </md-button>\n\n                                                        <md-menu-content width="3">\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editOutboundRouteApp($event, $index)" translate="VOICE.EDIT_APP">\n                                                                    Edit App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canEdit">\n                                                                <md-button ng-click="vm_ac.editInterval($event, $index)" translate="VOICE.EDIT_INTERVAL">\n                                                                    Edit Interval\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                            <md-menu-item ng-if="vm_ac.crudPermissions.canDelete">\n                                                                <md-button ng-click="vm_ac.deleteConfirm(app, $index, $event)" translate="VOICE.DELETE_APP">\n                                                                    Delete App\n                                                                </md-button>\n                                                            </md-menu-item>\n                                                        </md-menu-content>\n                                                    </md-menu>\n                                                </td>\n                                            </tr>\n                                            <tr md-row ng-hide="vm_ac.outboundrouteApps.rows.length">\n                                                <td md-cell colspan="6">\n                                                    <span class="text-boxed-ligth" translate="VOICE.NO_APPS_AVAILABLE">No apps available</span>\n                                                </td>\n                                            </tr>\n                                        </tbody>\n                                        <tfoot md-foot>\n                                            <tr md-row>\n                                                <td md-cell colspan="7">\n                                                    <span><em translate="VOICE.LEGEND.CUSTOM_APPLICATION">(*) - Custom application.</em></span>\n                                                </td>\n                                            </tr>\n                                        </tfoot>\n                                    </table>\n                                </md-table-container>\n                                \x3c!-- / QUEUES TABLE --\x3e\n\n                                \x3c!-- NO RESULTS --\x3e\n\n                                \x3c!-- / NO RESULTS --\x3e\n                            </div>\n                            \x3c!-- / MAIN --\x3e\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/voice/views/outboundroutes/outboundroutes.html",'<div id="outboundroutes" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.OUTBOUNDROUTES">OutboundRoutes</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedOutboundRoutes.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedOutboundRoutes =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-outboundroutes-count">\n                    <span>{{vm.selectedOutboundRoutes.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="OUTBOUNDROUTES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllOutboundRoutes()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectOutboundRoutes()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedOutboundRoutes" csv-label="true" filename="outboundroutes.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedOutboundRoutes($event)" aria-label="delete selected" translate translate-attr-label="OUTBOUNDROUTES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- OUTBOUNDROUTE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedOutboundRoutes" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getOutboundRoutes">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="exten">{{ \'VOICE.PHONENUMBER\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.outboundroutes.rows.length">\n                                <td md-cell colspan="4">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="outboundroute" md-select-id="id" ng-repeat="outboundroute in vm.outboundroutes.rows">\n                                <td md-cell ng-if="outboundroute.userpic"><img class="avatar" alt="{{outboundroute.name}}" ng-src="api/users/{{outboundroute.id}}/avatar" /></td>\n                                <td md-cell ng-if="!outboundroute.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{outboundroute.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(outboundroute, ev) : vm.createOrEditOutboundRoute($event, outboundroute)" md-cell class="id ">{{outboundroute.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(outboundroute, ev) : vm.createOrEditOutboundRoute($event, outboundroute)" md-cell class="exten ">{{outboundroute.exten}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(outboundroute, ev) : vm.createOrEditOutboundRoute($event, outboundroute)" md-cell class="description ">{{outboundroute.description}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(outboundroute, $event    )" translate="VOICE.EDIT_OUTBOUNDROUTE">\n                                                    Edit OutboundRoute\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(outboundroute, $event    )" translate="VOICE.DELETE_OUTBOUNDROUTE">\n                                                    Delete OutboundRoute\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.outboundroutes.count}}" md-on-paginate="vm.getOutboundRoutes" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / OUTBOUNDROUTE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD OUTBOUNDROUTE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-outboundroute-button" ng-click="vm.createOrEditOutboundRoute($event)" aria-label="add outboundroute" translate translate-attr-aria-label="VOICE.ADD_OUTBOUNDROUTE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD OUTBOUNDROUTE BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/realtime/abandonedcalls/view.html",'    <md-toolbar class="md-table-toolbar md-default table-header">\n        <div class="md-toolbar-tools" layout="row" layout-align="center center">\n            <span class="md-subhead" translate="DASHBOARDS.ABANDONEDQUEUECALLS">ABANDONED QUEUE CALLS</span>\n            <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.query.filter = undefined" debounce="300"></ms-search-bar>\n            <div flex></div>\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE">Select a date</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearAll()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.DELETE\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 black-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getContacts()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            <div class="padding-horizontal-20" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.lastAssignedTo" ng-change="vm.getContacts()">\n                    <md-option ng-value="\'null\'" translate="DASHBOARDS.NOT_ASSIGNED"></md-option>\n                    <md-option ng-value="undefined" translate="DASHBOARDS.ALL"></md-option>\n                    <md-option ng-value="agent.name" ng-repeat="agent in vm.agents.rows">{{agent.name}}</md-option>\n                </md-select>\n            </div>\n            <div ng-if="vm.queues.count" layout="column">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_CAMPAIGN">Select a Campaign</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.queue" ng-change="vm.getContacts()">\n                    <md-option ng-value="undefined" ng-if="vm.queues.count > 1"><em translate="DASHBOARDS.ALL">All</em></md-option>\n                    <md-option ng-value="queue.name" ng-repeat="queue in vm.queues.rows">{{queue.name}}</md-option>\n                </md-select>\n            </div>\n            <md-button class="md-icon-button" ng-click="vm.refresh && vm.refreshContacts($event)" aria-label="Reload" translate translate-attr-label="DASHBOARDS.RELOAD">\n                <md-icon md-font-icon="icon-reload"></md-icon>\n                <md-tooltip ng-if="vm.showTooltip" md-visible="vm.showTooltip">{{\'DASHBOARDS.CLICKRELOAD\' | translate}}</md-tooltip>\n            </md-button>\n        </div>\n    </md-toolbar>\n    <md-table-container>\n        <table md-table md-progress="vm.promise">\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getContacts">\n                <tr md-row>\n                    <th md-column md-order-by="id">ID</th>\n                    <th md-column md-order-by="calleridname">{{\'DASHBOARDS.FULLNAME\' | translate}}</th>\n                    <th md-column md-order-by="calleridnum">{{\'DASHBOARDS.PHONE\' | translate}}</th>\n                    <th md-column md-order-by="queue">{{\'DASHBOARDS.QUEUE\' | translate}}</th>\n                    <th md-column md-order-by="queuecallerabandonAt">{{\'DASHBOARDS.ABANDONAT\' | translate}}</th>\n                    <th md-column md-order-by="lastAssignedTo">{{\'DASHBOARDS.LASTASSIGNEDTO\' | translate}}</th>\n                    <th md-column md-order-by="disposition">{{\'DASHBOARDS.DISPOSITION\' | translate}}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n            <tbody md-body>\n                <tr md-row ng-hide="vm.contacts.rows.length">\n                    <td md-cell colspan="10">\n                        <div layout="row" layout-align="center center">\n                            <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                        </div>\n                    </td>\n                </tr>\n                <tr md-row ng-repeat="contact in vm.contacts.rows">\n                    <td md-cell class="id">{{contact.id}}</td>\n                    <td md-cell class="firstName">{{contact.calleridname}}</td>\n                    <td md-cell class="list">{{contact.calleridnum}}</td>\n                    <td md-cell class="list">{{vm.queuesMap[contact.queue]}}</td>\n                    <td md-cell class="list">{{contact.queuecallerabandonAt ? (contact.queuecallerabandonAt | formatdate) : undefined }}</td>\n                    <td md-cell class="list">{{contact.lastAssignedTo}}</td>\n                    <td md-cell class="list">{{contact.disposition}}</td>\n                    <td md-cell class="actions">\n                        <md-menu>\n                            <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="DASHBOARDS.MORE" ng-click="$mdOpenMenu($event)">\n                                <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                            </md-button>\n                            <md-menu-content width="2">\n                                <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.ASSIGNTO">Assigned a</md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-if="contact.lastAssignedTo">\n                                                <md-button ng-click="vm.assignedA(contact)"><em translate="DASHBOARDS.NONE">Not Assigned</em></md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.agents.rows.length" ng-repeat="agent in vm.agents.rows">\n                                                <md-button ng-click="vm.assignedA(contact,agent)">{{agent.name}}</md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                                <md-menu-item>\n                                    <md-menu>\n                                        <md-button ng-click="$mdMenu.open()" class="text-capitalize" translate="DASHBOARDS.DISPOSE">Dispose</md-button>\n                                        <md-menu-content>\n                                            <md-menu-item ng-if="vm.dispositions.length > 0" ng-repeat="disposition in vm.dispositions">\n                                                <md-button ng-click="vm.disposed(contact, disposition.name)">{{disposition.name}}</md-button>\n                                            </md-menu-item>\n                                        </md-menu-content>\n                                    </md-menu>\n                                </md-menu-item>\n                            </md-menu-content>\n                        </md-menu>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </md-table-container>\n\n    <md-table-pagination md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.contacts.count}}" md-on-paginate="vm.getContacts" md-page-select></md-table-pagination>'),e.put("app/main/apps/voice/views/realtime/agents/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="VOICE.AGENTS">Agents</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query; vm.onInit()" on-collapse="vm.query.filter = undefined; vm.onInit()" debounce="300"></ms-search-bar>\n        <md-select ng-model="vm.query.globalStatusFilter" class="md-caption" ng-change="vm.query.pauseTypeFilter = \'\'; vm.onInit()">\n            <md-option ng-value="\'\'">{{ \'VOICE.ALL\' | translate }}</md-option>\n            <md-option value="pause">{{ \'VOICE.PAUSE\' | translate }}</md-option>\n            <md-option value="*pause">{{ \'VOICE.PARTIALPAUSE\' | translate }}</md-option>\n            <md-option value="busy">{{ \'VOICE.BUSY\' | translate }}</md-option>\n            <md-option value="idle">{{ \'VOICE.IDLE\' | translate }}</md-option>\n        </md-select>\n\n        <md-select ng-if="vm.isPause(vm.query.globalStatusFilter)" ng-model="vm.query.pauseTypeFilter" class="md-caption" ng-change="vm.onInit()">\n            <md-option ng-value="\'\'">All</md-option>\n            <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>\n            <md-option value="ACW">ACW</md-option>\n            <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>\n            <md-option value="Auto-Pause">AUTOPAUSE</md-option>\n            <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows">{{pause.name}}</md-option>\n        </md-select>\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">\n            <tr md-row border="1">\n                <th class="bv text-center" colspan="5">{{ \'VOICE.AGENT\' | translate }}</th>\n                <th class="bv bl text-center" colspan="2">{{ \'VOICE.VOICE\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">{{ \'CHAT.CHAT\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">{{ \'MAIL.MAIL\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">{{ \'SMS.SMS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="bv bl text-center" colspan="2">{{ \'OPENCHANNEL.OPENCHANNEL\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">{{ \'FAX.FAX\' | translate }}</th>\n                <th width="10px" class="bt bl" rowspan="2"></th>\n            </tr>\n            <tr md-row>\n                <th class="bl" colspan="2" md-column md-order-by="fullname">{{ \'VOICE.NAME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="globalStatus">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastLoginAt">{{ \'VOICE.LOGIN_TIME\' | translate }}</th>\n                <th class="bl custom-column" md-column md-order-by="lastPauseAt">{{ \'VOICE.PAUSE_TIME\' | translate }}</th>\n\n                <th class="bl custom-column">{{ \'VOICE.STATUS\' | translate }}</th>\n                <th class="bl custom-column">Info</th>\n\n                <th ng-if="vm.license.chat" class="bl text-center">{{ \'CHAT.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.chat" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'CHAT.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.mail" class="bl text-center">{{ \'MAIL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.mail" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'MAIL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.messaging" class="bl text-center">{{ \'SMS.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.messaging" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'SMS.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.openchannel" class="bl text-center">{{ \'OPENCHANNEL.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.openchannel" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'OPENCHANNEL.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n\n                <th ng-if="vm.license.fax" class="bl text-center">{{ \'FAX.STATUS\' | translate }}</th>\n                <th ng-if="vm.license.fax" class="text-center">\n                    <md-icon md-font-icon="icon-battery-standard">\n                        <md-tooltip>{{ \'FAX.CAPACITY\' | translate }}</md-tooltip>\n                    </md-icon>\n                </th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.order.length">\n                <td md-cell colspan="17">\n                    <div layout="row" layout-align="center center">\n                        <span>{{ \'VOICE.NO_AGENT_ONLINE\' | translate }}</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-select="vm.agents[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center">\n                        <img class="avatar" ng-src="{{vm.agents[value].userpic && \'api/users/\'+vm.agents[value].id+\'/avatar\' || \'assets/images/avatars/profile.png\'}}">\n                        <div layout="column">\n                            <span>{{vm.agents[value].fullname}}</span>\n                            <span>{{vm.agents[value].internal}}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class="bt padding-5">\n                    <div layout="row" layout-align="start center" ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)">\n                        <div class="column" ng-if="vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: green; font-size: 36px;" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'VOICE.TOOLTIP_SCREENRECORDING_ON\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                        <div class="column" ng-if="!vm.agents[value].screenrecording">\n                            <span>\n                                <md-icon md-font-icon="icon-camcorder-box" style="color: gray" aria-label="icon-camcorder-box26">\n                                    <md-tooltip>{{ \'VOICE.TOOLTIP_SCREENRECORDING_OFF\' | translate }}</md-tooltip>\n                                </md-icon>\n                            </span>\n                        </div>\n                    </div>\n                </td>\n\n\n\n                <td class="bt">\n'+"                    <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]\">{{ vm.isPause(vm.agents[value].globalStatus) ? '' : vm.agents[value].globalStatus | uppercase }} {{ vm.isPause(vm.agents[value].globalStatus) ? (vm.isPartialPause(vm.agents[value].globalStatus) ? '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE'  : vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer start-time=\"vm.agents[value].lastLoginAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt custom-column\">\n                    <timer ng-if=\"vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)\" start-time=\"vm.agents[value].lastPauseAt\" interval=\"1000\">{{ days > 0 ? days + 'd' : '' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"row\">\n                        <span ng-if=\"!vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].voiceStatus | uppercase }}</span>\n                        <span ng-if=\"vm.agents[value].onhold\" class=\"text-boxed md-background-bg bl bt padding-5 orange-400-bg\">ONHOLD</span>\n                    </div>\n                </td>\n                <td class=\"bt bl\">\n                    <div layout=\"column\">\n                        <span ng-if=\"vm.agents[value].queue\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].queue }}</span>\n                        <span ng-if=\"vm.agents[value].destconnectedlinenum\" class=\"padding-5\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{ vm.agents[value].destconnectedlinenum }}</span>\n                        <span class=\"padding-5\" ng-if=\"vm.agents[value].queue || vm.agents[value].destconnectedlinenum\">\n                            <timer start-time=\"vm.agents[value].voiceStatusTime\" interval=\"1000\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]\">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </div>\n                </td>\n                <td class=\"bt bl\" ng-if=\"vm.license.chat\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td md-number class=\"bt text-center font-size-20\" ng-if=\"vm.license.chat\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]\">{{ vm.agents[value].chatCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.mail\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.mail\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]\">{{ vm.agents[value].mailCurrentCapacity }}</td>\n                <td class=\"bl bt\" ng-if=\"vm.license.messaging\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.messaging\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]\">{{ vm.agents[value].smsCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.openchannel\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.openchannel\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]\">{{ vm.agents[value].openchannelCurrentCapacity }}</td>\n                <td class=\"bt bl\" ng-if=\"vm.license.fax\">\n                    <div layout=\"row\">\n                        <div layout=\"column\" layout-align=\"center center\">\n                            <span class=\"text-boxed md-background-bg bl bt padding-5\" ng-class=\"{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxStatus | uppercase }}</span>\n                        </div>\n                    </div>\n                </td>\n                <td class=\"bt padding-5 text-center font-size-20\" ng-if=\"vm.license.fax\" ng-class=\"{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]\">{{ vm.agents[value].faxCurrentCapacity }}</td>\n                <td class=\"bl bt padding-5 text-center\" ng-if=\"vm.crudPermissions.canEdit\">\n                    <md-menu>\n                        <md-button class=\"md-icon-button\" aria-label=\"More\" translate translate-attr-aria-label=\"STAFF.MORE\" ng-click=\"$mdOpenMenu($event)\">\n                            <md-icon md-font-icon=\"icon-dots-vertical\"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width=\"4\">\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.logout(vm.agents[value], $event)\" translate=\"VOICE.LOGOUT\">\n                                    Logout\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click=\"vm.queueAdd(vm.agents[value], $event)\" translate=\"VOICE.AGENTADD_QUEUE\">\n                                    Add Agent In Queue\n                                </md-button>\n                            </md-menu-item>\n\n                            <md-menu-item ng-if=\"vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent\">\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"VOICE.SCREENRECORDING\">Screen Recording</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-if=\"!vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], true)\"><em translate=\"VOICE.START_SCREENRECORDING\">Start Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.agents[value].screenrecording\">\n                                            <md-button ng-click=\"vm.screenRecording(vm.agents[value], false)\"><em translate=\"VOICE.STOP_SCREENRECORDING\">Stop Screen Recording</em></md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click=\"$mdMenu.open()\" class=\"text-capitalize\" translate=\"VOICE.PAUSE\">Pause</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item>\n                                            <md-button ng-disabled=\" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value])\"><em translate=\"VOICE.DEFAULT_PAUSE\">Default Pause</em></md-button>\n                                        </md-menu-item>\n                                        <md-menu-item ng-if=\"vm.pauses.rows.length\" ng-repeat=\"pause in vm.pauses.rows\">\n                                            <md-button ng-disabled=\"vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType\" ng-click=\"vm.pause(vm.agents[value], pause.name)\">{{pause.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                            <md-menu-item ng-if=\"vm.isPause(vm.agents[value].globalStatus)\">\n                                <md-button ng-click=\"vm.unPause(vm.agents[value])\" translate=\"VOICE.UNPAUSE\">\n                                    Unpause\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label=\"{page: '{{'VOICE.PAGE' | translate}}:', rowsPerPage: '{{'VOICE.ROWSPERPAGE' | translate}}:', of: '{{'VOICE.OF' | translate}}'}\" md-limit=\"vm.query.limit\" md-limit-options=\"[10, 15, 20, 50, 100, 250]\" md-page=\"vm.query.page\" md-total=\"{{vm.filteredAgents.length}}\" md-on-paginate=\"vm.onInit\" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e"),e.put("app/main/apps/voice/views/realtime/outbound_calls/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="VOICE.OUTBOUND_CALLS">Ooutbound Calls</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- OUTBOUNDS TABLE --\x3e\n<md-table-container>\n    <table md-table>\n        <thead md-head>\n            <tr md-row>\n                <th md-column width="30px"></th>\n                <th md-column>{{ \'VOICE.SOURCE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.DESTINATION\' | translate }}</th>\n                <th md-column>{{ \'VOICE.DURATION\' | translate }}</th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.calls.rows.length">\n                <td md-cell colspan="4">\n                    <div layout="row" layout-align="center center">\n                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="call in vm.calls.rows | filter: vm.query.filter | limitTo: vm.query.limit: (vm.query.page - 1) * vm.query.limit">\n                <td md-cell>\n                    <i ng-class="vm.channelStatus[call.channelstatedesc.toLowerCase()]"></i>\n                </td>\n                <td md-cell>\n                    {{call.calleridname}}, {{call.calleridnum}} <span class="text-boxed" ng-if="call.answered">\n                        <timer ng-if="call.answertime" start-time="call.answertime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                    </span>\n                </td>\n                <td md-cell>{{call.exten}}</td>\n                <td md-cell>\n                    <span class="text-boxed" ng-if="call.channelstatedesc.toLowerCase() !== \'hangup\'">\n                        <timer ng-if="call.starttime" start-time="call.starttime" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                    </span>\n                    <span class="text-boxed" ng-if="call.channelstatedesc.toLowerCase() === \'hangup\'" translate="VOICE.CLOSING">Closing</span>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.calls.count}}"></md-table-pagination>\n\x3c!-- / OUTBOUNDS TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/voice/views/realtime/queue_calls/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="VOICE.QUEUE_CALLS">Queue Calls</span>\n        \x3c!-- <div flex></div>\n    <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar> --\x3e\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUES TABLE --\x3e\n<md-table-container>\n    <table md-table>\n        <thead md-head>\n            <tr md-row>\n                <th md-column width="30px"></th>\n                <th md-column>{{ \'VOICE.DID\' | translate }}</th>\n                <th md-column>{{ \'VOICE.QUEUE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.CALLER\' | translate }}</th>\n                <th md-column>{{ \'VOICE.AGENT\' | translate }}</th>\n                <th md-column>{{ \'VOICE.DURATION\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.getSize(vm.rpcVoiceQueuesChannels)">\n                <td md-cell colspan="6">\n                    <div layout="row" layout-align="center center">\n                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(key, channel) in vm.rpcVoiceQueuesChannels | limitObjectFromTo: vm.queryChannels.limit:(vm.queryChannels.page - 1) * vm.queryChannels.limit">\n                <td md-cell>\n                    <md-icon ng-if="channel.queuecallerleaveAt" md-font-icon="icon-phone-in-talk green-fg"></md-icon>\n                    <md-icon ng-if="!channel.queuecallerleaveAt" md-font-icon="icon-phone-incoming md-accent"></md-icon>\n                </td>\n                <td md-cell>{{channel.exten}}</td>\n                <td md-cell>{{channel.queue}}</td>\n                <td md-cell>{{channel.calleridnum}}</td>\n                <td md-cell>\n                    <span ng-if="channel.queuecallerleaveAt">\n                        {{channel.connectedlinename}}, {{channel.connectedlinenum}}\n                        <span class="text-boxed">\n                            <timer start-time="channel.queuecallerleaveAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                        </span>\n                    </span>\n                    <span ng-if="!channel.queuecallerleaveAt" class="text-boxed">\n                        {{ \'VOICE.WAITING_FOR_AGENT\' | translate }}\n                        <timer start-time="channel.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                    </span>\n                </td>\n                <td md-cell>\n                    <span class="text-boxed">\n                        <timer start-time="channel.queuecallerjoinAt" interval="1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                    </span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="2">\n                            <md-menu-item>\n                                <md-button ng-click="vm.hangup(channel.uniqueid)" translate="VOICE.HANGUP">\n                                    Hangup\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.redirectToNumber($event, channel.uniqueid)" translate="VOICE.REDIRECT_TO_NUMBER">\n                                    Number\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-menu>\n                                    <md-button ng-click="$mdMenu.open()" translate="VOICE.REDIRECT_TO_AGENT">Redirect to Agent</md-button>\n                                    <md-menu-content>\n                                        <md-menu-item ng-repeat="agent in vm.agents.rows">\n                                            <md-button ng-click="vm.redirectToAgent(channel.uniqueid, agent.name, agent.context)">{{agent.name}}</md-button>\n                                        </md-menu-item>\n                                    </md-menu-content>\n                                </md-menu>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.queryChannels.limit" md-page="vm.queryChannels.page" md-limit-options="[10, 15, 20, 50, 100, 250]" md-total="{{vm.getSize(vm.rpcVoiceQueuesChannels)}}" md-page-select></md-table-pagination>\n\x3c!-- / QUEUES TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/voice/views/realtime/queue_params/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="MOTIONDIALER.QUEUE_PARAMETERS">Params</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column>{{\'\n                        VOICE.NAME\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.TOTAL_OFFERED\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.ANSWERED\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.ABANDONED\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.UNMANAGED\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.AVG_HOLD_TIME\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.AVG_DURATION\' | translate}}</th>\n                <th md-column>{{\'\n                        VOICE.AVG_BILLABLE\' | translate}}</th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="8">\n                    <div layout="row" layout-align="center center">\n                        <span translate="MOTIONDIALER.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(id, queue) in vm.queues">\n                <td md-cell>\n                    <span>{{queue.name}}</span>\n                </td>\n                <td md-cell>\n                    \x3c!-- <span class="font-size-20 grey-fg">{{queue.total || 0}}</span> --\x3e\n                    <span class="font-size-20 grey-fg">{{ (queue.answered || 0) + (queue.abandoned || 0) + (queue.unmanaged || 0) }}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.answered || 0}} ({{(queue.total) ? (queue.answered || 0) * 100/queue.total : 0 | number:1}}%)</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.abandoned || 0}} ({{(queue.total) ? (queue.abandoned || 0) * 100/queue.total : 0 | number:1}}%)</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.unmanaged || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.total ? ((queue.sumHoldTime || 0) / queue.total) : 0 | number: 0 | secToTime | date:\'HH:mm:ss\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{(queue.total ? ((queue.sumDuration || 0) / queue.total) : 0) | number: 0 | secToTime | date:\'HH:mm:ss\'}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{queue.answered ? ((queue.sumBillable || 0) / queue.answered) : 0 | number: 0 | secToTime | date:\'HH:mm:ss\'}}</span>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'MOTIONDIALER.PAGE\' | translate}}:\', rowsPerPage: \'{{\'MOTIONDIALER.ROWSPERPAGE\' | translate}}:\', of: \'{{\'MOTIONDIALER.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/voice/views/realtime/queues/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="VOICE.QUEUES">Queues</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n    </div>\n</md-toolbar>\n\n\x3c!-- QUEUE TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getQueues">\n            <tr md-row>\n                <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                <th md-column>{{ \'VOICE.LOGGED_IN\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PAUSED\' | translate }}</th>\n                <th md-column>{{ \'VOICE.READY\' | translate }}</th>\n                <th md-column>{{ \'VOICE.WAITING\' | translate }}</th>\n                <th md-column>{{ \'VOICE.TALKING\' | translate }}</th>\n                <th md-column width="10px"></th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.queues">\n                <td md-cell colspan="7">\n                    <div layout="row" layout-align="center center">\n                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="vm.queues[value]" md-select-id="id" ng-repeat="(id, value) in vm.order">\n                <td md-cell>{{vm.queues[value].name}}</td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].loggedInDb || 0}} ({{vm.queues[value].loggedIn || 0}})</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].paused || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{vm.queues[value].available || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-20 grey-fg">{{vm.queues[value].waiting || 0}}</span>\n                </td>\n                <td md-cell>\n                    <span class="font-size-16 grey-fg">{{(vm.queues[value].talking || 0) }}</span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="3">\n                            <md-menu-item>\n                                <md-button ng-click="vm.createOrEditVoiceQueue($event, vm.queues[value])" translate="VOICE.EDIT_QUEUE">\n                                    Edit Queue\n                                </md-button>\n                            </md-menu-item>\n                            <md-menu-item>\n                                <md-button ng-click="vm.agentAdd($event, vm.queues[value])" translate="VOICE.AGENTSADD_QUEUE">\n                                    Add Agents to queue\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getQueues" md-page-select></md-table-pagination>\n\x3c!-- / QUEUE TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/voice/views/realtime/realtime.html",'<div id="realtime" class="page-layout simple tabbed" layout="column" ng-cloak>\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.AGENTS">Agents</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.TELEPHONES">Telephones</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.TRUNKS">Trunks</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.QUEUES">Queues</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.QUEUE_CALLS">Queue Calls</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ABANDONEDCALLS">Abandoned Queue Calls</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.QUEUE_PARAMS">Queue Parameters</span>\n                </md-tab-label>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.OUTBOUND_CALLS">Outbound Calls</span>\n                </md-tab-label>\n            </md-tab>\n        </md-tabs>\n\n        <md-card ui-view></md-card>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n</div>'),e.put("app/main/apps/voice/views/realtime/telephones/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="VOICE.TELEPHONES">Telephones</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n        \x3c!-- <md-button class="md-icon-button" ng-click="vm.showInfo($event)">\n            <i class="icon-information-outline grey-600-fg">\n              <md-tooltip>{{\'VOICE.INFO\' | translate}}</md-tooltip>\n            </i>\n        </md-button> --\x3e\n    </div>\n</md-toolbar>\n\n\x3c!-- AGENT TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTelephones">\n            <tr md-row>\n                <th md-column md-order-by="fullname">{{ \'VOICE.ACCOUNTNAME\' | translate }}</th>\n                <th md-column md-order-by="internal">{{ \'VOICE.INTERNAL\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATE\' | translate }}</th>\n                <th md-column>{{ \'VOICE.PHONE_STATUS\' | translate }}</th>\n            </tr>\n        </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.telephones">\n                <td md-cell colspan="4">\n                    <div layout="row" layout-align="center center">\n                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row md-select="telephone" md-select-id="id" ng-repeat="(id, telephone) in vm.telephones">\n                <td md-cell>{{telephone.fullname}}</td>\n                <td md-cell>{{telephone.internal}}</td>\n                <td md-cell>\n                    <i ng-class="vm.stateClass[telephone.state]">\n                        <md-tooltip>{{\'VOICE.\' + telephone.state | uppercase | translate}}</md-tooltip>\n                    </i>\n                </td>\n                <td md-cell>\n                    <i ng-class="vm.statusClass[telephone.status]">\n                        <md-tooltip>{{\'VOICE.\' + telephone.status | uppercase | translate}}</md-tooltip>\n                    </i>\n                    <span ng-if="telephone.status === \'registered\'" class="text-boxed">{{telephone.address}}</span>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getTelephones" md-page-select></md-table-pagination>\n\x3c!-- / AGENT TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/voice/views/realtime/trunks/view.html",'\x3c!-- MAIN --\x3e\n<md-toolbar class="md-table-toolbar md-default">\n    <div class="md-toolbar-tools">\n        <span class="md-subhead" translate="VOICE.TRUNKS">Telephones</span>\n        <div flex></div>\n        <ms-search-bar on-search="vm.query.filter = query;" on-collapse="vm.query.filter = undefined;" debounce="300"></ms-search-bar>\n        \x3c!-- <md-button class="md-icon-button" ng-click="vm.showInfo($event)">\n      <i class="icon-information-outline grey-600-fg">\n        <md-tooltip>{{\'FAX.INFO\' | translate}}</md-tooltip>\n      </i>\n    </md-button> --\x3e\n    </div>\n</md-toolbar>\n\n\x3c!-- TRUNKS TABLE --\x3e\n<md-table-container>\n    <table md-table multiple md-progress="vm.promise">\n        <thead md-head>\n            <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getTrunks">\n                <tr md-row>\n                    <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                    <th md-column>{{ \'VOICE.TRUNK_STATUS\' | translate }}</th>\n                    <th md-column>{{ \'VOICE.REGISTRY\' | translate }}</th>\n                    <th md-column width="10px"></th>\n                </tr>\n            </thead>\n        <tbody md-body>\n            <tr md-row ng-hide="vm.trunks">\n                <td md-cell colspan="3">\n                    <div layout="row" layout-align="center center">\n                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                    </div>\n                </td>\n            </tr>\n            <tr md-row ng-repeat="(id, trunk) in vm.trunks">\n                <td md-cell>{{trunk.name}}</td>\n                <td md-cell>\n                    <i ng-class="vm.statusClass[trunk.status.toLowerCase()]">\n                        <md-tooltip>{{\'VOICE.\' + trunk.status | uppercase | translate}}</md-tooltip>\n                    </i>\n                    <span ng-if="trunk.status === \'registered\'" class="text-boxed">{{trunk.address}}</span>\n                </td>\n                <td md-cell>\n                    <i ng-if="trunk.registry" ng-class="(trunk.stateRegistry.toLowerCase() === \'registered\') ? \'green-300-fg icon-checkbox-marked-circle\' : \'red-300-fg icon-close-circle\'">\n                        <md-tooltip>{{\'VOICE.\' + trunk.stateRegistry | uppercase | translate}}</md-tooltip>\n                    </i>\n                    <span ng-if="trunk.registry && trunk.host && trunk.port" class="text-boxed">{{trunk.host}}:{{trunk.port}}</span>\n                    <span ng-if="!trunk.registry" translate="VOICE.NO_REGISTRY">\n                        No Registry\n                    </span>\n                </td>\n                <td md-cell class="actions" ng-if="vm.crudPermissions.canEdit">\n                    <md-menu>\n                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="STAFF.MORE" ng-click="$mdOpenMenu($event)">\n                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                        </md-button>\n\n                        <md-menu-content width="4">\n                            <md-menu-item>\n                                <md-button ng-click="vm.goToTrunk($event, trunk)" translate="VOICE.EDIT_TRUNK">\n                                    Edit Trunk\n                                </md-button>\n                            </md-menu-item>\n                        </md-menu-content>\n                    </md-menu>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</md-table-container>\n\n<md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.count}}" md-on-paginate="vm.getTrunks" md-page-select></md-table-pagination>\n\x3c!-- / TRUNKS TABLE --\x3e\n\x3c!-- / MAIN --\x3e'),e.put("app/main/apps/voice/views/voicemails/create/dialog.html",'<md-dialog class="voicemail-dialog" aria-label="New Voicemail">\n    <form name="voicemailForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.FULLNAME">FullName</label>\n                <input type="text" name="fullname" ng-model="vm.voicemail.fullname" ng-required="true" autofocus>\n\n                <div ng-messages="voicemailForm[\'fullname\'].$error" ng-show="voicemailForm[\'fullname\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.FULLNAME_REQUIRED">FullName field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.EMAIL">Email</label>\n                <input type="email" name="email" ng-model="vm.voicemail.email" ng-required="vm.voicemail.attach === \'yes\'">\n\n                <div ng-messages="voicemailForm[\'email\'].$error" ng-show="voicemailForm[\'email\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                    </div>\n                    <div ng-message="email">\n                        <span translate="VOICE.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.PASSWORD">Password</label>\n                <input type="password" name="password" ng-model="vm.voicemail.password" placeholder="Password" translate translate-attr-placeholder="VOICE.PASSWORD" required>\n                <div ng-messages="voicemailForm[\'password\'].$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="VOICE.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block" ng-if="vm.newVoicemail ">\n                <label translate="VOICE.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword" required>\n                <div ng-messages="voicemailForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="VOICE.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <md-input-container class="md-block">\n                <label translate="VOICE.MAILBOX">MailBox</label>\n                <input type="text" name="mailbox" ng-model="vm.voicemail.mailbox" ng-required="true" ng-disabled="!vm.newVoicemail">\n\n                <div ng-messages="voicemailForm[\'mailbox\'].$error" ng-show="voicemailForm[\'mailbox\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.MAILBOX_REQUIRED">MailBox field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.ATTACH">Attach</label>\n                <md-select name="attach" ng-model="vm.voicemail.attach">\n\n                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                </md-select>\n                <div ng-messages="voicemailForm[\'attach\'].$error" ng-show="voicemailForm[\'attach\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.ATTACH_REQUIRED">Attach field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVoicemail" ng-click="vm.saveVoicemail()" class="send-button md-accent md-raised" ng-disabled="voicemailForm.$invalid || voicemailForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVoicemail" ng-click="vm.addNewVoicemail()" class="send-button md-accent md-raised" ng-disabled="voicemailForm.$invalid" aria-label="ADD" translate="VOICE.ADD_VOICEMAIL" translate-attr-aria-label="VOICE.ADD_VOICEMAIL">\n                    ADD VOICEMAIL\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVoicemail" ng-click="vm.deleteVoicemail($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voicemails/edit/view.html",'<div id="voice-voicemail" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-voicemails-button md-icon-button" aria-label="Go to voicemails" ng-click="vm.gotoVoicemails()" translate translate-attr-aria-label="VOICE.GO_TO_VOICEMAILS">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="voicemail-image" hide-xs>\n                    <img ng-src="assets/images/business/voicemails.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.voicemail.id}}\n                        <span ng-if="vm.voicemail.name">{{vm.voicemail.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="VOICE.CREATED_AT"></span> <span>{{vm.voicemail.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveVoicemail()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (advancedForm.$invalid) || (messagesForm.$invalid)" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="voicemail-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.FULLNAME">FullName</label>\n                                <input type="text" name="fullname" ng-model="vm.voicemail.fullname" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'fullname\'].$error" ng-show="generalForm[\'fullname\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.FULLNAME_REQUIRED">FullName field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.EMAIL">Email</label>\n                                <input type="email" name="email" ng-model="vm.voicemail.email" ng-required="vm.voicemail.attach === \'yes\'" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'email\'].$error" ng-show="generalForm[\'email\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.EMAIL_REQUIRED">Email field is required</span>\n                                    </div>\n                                    <div ng-message="email">\n                                        <span translate="VOICE.ERRORS.EMAIL_MUST_VALID">Email must be a valid e-mail address</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.PASSWORD">Password</label>\n                                <input type="password" name="password" ng-model="vm.voicemail.password" placeholder="Password" translate translate-attr-placeholder="VOICE.PASSWORD" required>\n                                <div ng-messages="generalForm[\'password\'].$error" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="VOICE.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block" ng-if="vm.newVoicemail ">\n                                <label translate="VOICE.CONFIRM_PASSWORD">Confirm Password</label>\n                                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword" required>\n                                <div ng-messages="generalForm.confirmPassword.$error" role="alert" multiple>\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>\n                                    </div>\n                                    <div ng-message="passwordMatch">\n                                        <span translate="VOICE.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MAILBOX">MailBox</label>\n                                <input type="text" name="mailbox" ng-model="vm.voicemail.mailbox" ng-required="true" disabled>\n\n                                <div ng-messages="generalForm[\'mailbox\'].$error" ng-show="generalForm[\'mailbox\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MAILBOX_REQUIRED">MailBox field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.VOICEMAIL_CONTEXT">Voicemail_Context</label>\n                                <md-select name="context" ng-model="vm.voicemail.context" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="context.name" ng-repeat="context in vm.contexts" ng-disabled="context.canSelect === false">{{ context.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.VOICEMAIL_CONTEXT"></span></div>\n                                <div ng-messages="generalForm[\'context\'].$error" ng-show="generalForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.VOICEMAIL_CONTEXT_REQUIRED">Voicemail_Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="voicemail-detail-form-container advanced md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.ADVANCED">ADVANCED</div>\n                        </div>\n                        <form name="advancedForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.TIMEZONE">TimeZone</label>\n                                <input type="text" name="tz" ng-model="vm.voicemail.tz" ng-required="true" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="advancedForm[\'tz\'].$error" ng-show="advancedForm[\'tz\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.TIMEZONE_REQUIRED">TimeZone field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ATTACH">Attach</label>\n                                <md-select name="attach" ng-model="vm.voicemail.attach" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="advancedForm[\'attach\'].$error" ng-show="advancedForm[\'attach\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ATTACH_REQUIRED">Attach field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ENVELOPE">Envelope</label>\n                                <md-select name="envelope" ng-model="vm.voicemail.envelope" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="advancedForm[\'envelope\'].$error" ng-show="advancedForm[\'envelope\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ENVELOPE_REQUIRED">Envelope field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.DELETE">Delete</label>\n                                <md-select name="delete" ng-model="vm.voicemail.delete" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div ng-messages="advancedForm[\'delete\'].$error" ng-show="advancedForm[\'delete\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.DELETE_REQUIRED">Delete field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.EMAILBODY">EmailBody</label>\n                                <input type="text" name="emailbody" ng-model="vm.voicemail.emailbody" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="advancedForm[\'emailbody\'].$error" ng-show="advancedForm[\'emailbody\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.EMAILBODY_REQUIRED">EmailBody field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.EMAILSUBJECT">EmailSubject</label>\n                                <input type="text" name="emailsubject" ng-model="vm.voicemail.emailsubject" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="advancedForm[\'emailsubject\'].$error" ng-show="advancedForm[\'emailsubject\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.EMAILSUBJECT_REQUIRED">EmailSubject field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MAXSECONDS">MaxSeconds</label>\n                                <input type="number" name="maxsecs" ng-model="vm.voicemail.maxsecs" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="advancedForm[\'maxsecs\'].$error" ng-show="advancedForm[\'maxsecs\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MAXSECONDS_REQUIRED">MaxSeconds field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.MAXSECONDS_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MaxSeconds must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MAXMESSAGES">MaxMessages</label>\n                                <input type="number" name="maxmsg" ng-model="vm.voicemail.maxmsg" min="0" max="9999" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="advancedForm[\'maxmsg\'].$error" ng-show="advancedForm[\'maxmsg\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MAXMESSAGES_REQUIRED">MaxMessages field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.MAXMESSAGES_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MaxMessages must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                    <div ng-message="max">\n                                        <span translate="VOICE.ERRORS.MAXMESSAGES_MUST_BE_LESS_THAN_OR_EQUAL_TO">MaxMessages must be a valid greater or equal than</span> <span>9999</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.MESSAGES">MESSAGES</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="voicemail-detail-form-container messages md-background-bg md-whiteframe-1dp">\n                        <div ng-controller="VoicemailMessagesController as vm_dc" ng-init="vm_dc.init(vm.voicemail, vm.crudPermissions)">\n                            <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedVoicemailMessages.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead" translate="VOICE.MESSAGES">Messages</span>\n                                    <div flex></div>\n                                    <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>\n                                </div>\n                            </md-toolbar>\n                            <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedVoicemailMessages.length">\n                                <div class="md-toolbar-tools">\n                                    <span class="md-subhead">{{vm_dc.selectedVoicemailMessages.length}} {{vm_dc.selectedVoicemailMessages.length > 1 ? \'items\' : \'item\'}} selected</span>\n                                    <div flex></div>\n                                    <button class="md-icon-button" ng-csv="vm_dc.exportSelectedVoicemailMessages" csv-label="true" filename="voicemails.csv">\n                                        <md-icon md-font-icon="icon-file-excel"></md-icon>\n                                    </button>\n                                    <md-button ng-if="vm_dc.crudPermissions.canDelete" class="md-icon-button" ng-click="vm_dc.deleteSelectedVoicemailMessages($event)" aria-label="delete selected" translate translate-attr-label="VOICEMAILS.DELETE_SELECTED">\n                                        <md-icon md-font-icon="icon-delete"></md-icon>\n                                    </md-button>\n                                </div>\n                            </md-toolbar>\n                            <md-table-container>\n                                <table md-table md-row-select multiple ng-model="vm_dc.selectedVoicemailMessages" md-progress="vm_dc.promise">\n                                    <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getVoicemailMessages">\n                                        <tr md-row>\n                                            <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                            <th md-column md-order-by="callerid">{{ \'VOICE.CALLER_ID\' | translate }}</th>\n                                            <th md-column md-order-by="duration">{{ \'VOICE.DURATION\' | translate }}</th>\n                                            <th md-column md-order-by="audio">{{ \'VOICE.AUDIO\' | translate }}</th>\n                                            <th md-column md-order-by="stamp">{{ \'VOICE.RECEIVED_AT\' | translate }}</th>\n                                            <th md-column width="10px"></th>\n                                        </tr>\n                                    </thead>\n                                    <tbody md-body>\n                                        <tr md-row md-select="message" md-select-id="id" ng-repeat="message in vm_dc.voicemailMessages.rows">\n                                            <td md-cell>{{message.id}}</td>\n                                            <td md-cell>{{message.callerid}}</td>\n                                            <td md-cell>{{message.duration}}</td>\n                                            <td md-cell>\n                                                \x3c!-- audio recording directive --\x3e\n                                                <ms-recording id="message.id" model="\'voiceMailMessage\'"></ms-recording>\n                                                \x3c!-- / audio recording directive --\x3e\n                                            </td>\n                                            <td md-cell>{{message.stamp | date:\'medium\'}}</td>\n                                            <td md-cell class="actions">\n                                                <md-menu>\n                                                    <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                                        <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                                    </md-button>\n\n                                                    <md-menu-content width="3">\n                                                        <md-menu-item>\n                                                            <md-button class="md-primary" ng-click="vm_dc.voiceMailMessageDownload(message, $event)" translate="VOICE.DOWNLOAD_MESSAGE">\n                                                                Download Message\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                        <md-menu-item ng-if="vm_dc.crudPermissions.canDelete">\n                                                            <md-button ng-click="vm_dc.deleteConfirm(message, $event)" translate="VOICE.DELETE_MESSAGE">\n                                                                Delete Message\n                                                            </md-button>\n                                                        </md-menu-item>\n                                                    </md-menu-content>\n                                                </md-menu>\n                                            </td>\n                                        </tr>\n                                        <tr md-row ng-if="!vm_dc.voicemailMessages.rows.length">\n                                            <td md-cell colspan="8">\n                                                <span class="text-boxed-ligth" translate="VOICE.NO_MESSAGE_AVAILABLE">No message available</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </md-table-container>\n                            <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm_dc.query.page" md-total="{{vm_dc.voicemailMessages.count}}" md-on-paginate="vm_dc.getVoicemailMessages" md-page-select></md-table-pagination>\n                        </div>\n\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/voice/views/voicemails/voicemails.html",'<div id="voicemails" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.VOICEMAILS">Voicemails</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedVoicemails.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedVoicemails =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-voicemails-count">\n                    <span>{{vm.selectedVoicemails.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="VOICEMAILS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllVoicemails()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectVoicemails()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedVoicemails" csv-label="true" filename="voicemails.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedVoicemails($event)" aria-label="delete selected" translate translate-attr-label="VOICEMAILS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- VOICEMAIL TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedVoicemails" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVoicemails">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="fullname">{{ \'VOICE.FULLNAME\' | translate }}</th>\n                                <th md-column md-order-by="email">{{ \'VOICE.EMAIL\' | translate }}</th>\n                                <th md-column md-order-by="mailbox">{{ \'VOICE.MAILBOX\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.voicemails.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="voicemail" md-select-id="id" ng-repeat="voicemail in vm.voicemails.rows">\n                                <td md-cell ng-if="voicemail.userpic"><img class="avatar" alt="{{voicemail.name}}" ng-src="api/users/{{voicemail.id}}/avatar" /></td>\n                                <td md-cell ng-if="!voicemail.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{voicemail.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voicemail, ev) : vm.createOrEditVoicemail($event, voicemail)" md-cell class="id ">{{voicemail.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voicemail, ev) : vm.createOrEditVoicemail($event, voicemail)" md-cell class="fullname ">{{voicemail.fullname}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voicemail, ev) : vm.createOrEditVoicemail($event, voicemail)" md-cell class="email ">{{voicemail.email}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voicemail, ev) : vm.createOrEditVoicemail($event, voicemail)" md-cell class="mailbox ">{{voicemail.mailbox}}</td>\n\n\n                                <td md-cell class="actions" ng-if="!vm.crudPermissions.readOnly">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(voicemail, $event    )" translate="VOICE.EDIT_VOICEMAIL">\n                                                    Edit Voicemail\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(voicemail, $event    )" translate="VOICE.DELETE_VOICEMAIL">\n                                                    Delete Voicemail\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.voicemails.count}}" md-on-paginate="vm.getVoicemails" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / VOICEMAIL TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD VOICEMAIL BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-voicemail-button" ng-click="vm.createOrEditVoicemail($event)" aria-label="add voicemail" translate translate-attr-aria-label="VOICE.ADD_VOICEMAIL">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD VOICEMAIL BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/voicePrefixes/create/dialog.html",'<md-dialog class="voicePrefix-dialog" aria-label="New voicePrefix">\n    <form name="voicePrefixForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.voicePrefix.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus>\n\n                <div class="hint"><span translate="VOICE.HELP.NAME"></span></div>\n                <div ng-messages="voicePrefixForm[\'name\'].$error" ng-show="voicePrefixForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="VOICE.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.OUTBOUNDROUTE">OutboundRoute</label>\n                <md-select name="VoiceExtensionId" ng-model="vm.voicePrefix.VoiceExtensionId" required>\n                    <md-option ng-value="VoiceExtensionId.id" ng-repeat="VoiceExtensionId in vm.outboundRoutes" ng-disabled="VoiceExtensionId.canSelect === false">{{ VoiceExtensionId.exten }}</md-option>\n                </md-select>\n                <div ng-messages="voicePrefixForm[\'VoiceExtensionId\'].$error" ng-show="voicePrefixForm[\'VoiceExtensionId\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.OUTBOUNDROUTE_REQUIRED">OutboundRoute field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.CALLERIDALL">CallerIdAll</label>\n                <input type="text" name="callerIdAll" ng-model="vm.voicePrefix.callerIdAll" ng-pattern="/&quot;(.*)&quot;\\s&lt;(.*?)&gt;$/">\n\n                <div class="hint"><span translate="VOICE.HELP.CALLERIDALL"></span></div>\n                <div ng-messages="voicePrefixForm[\'callerIdAll\'].$error" ng-show="voicePrefixForm[\'callerIdAll\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.CALLERIDALL_REQUIRED">CallerIdAll field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="VOICE.ERRORS.CALLERIDALL_MUST_VALID_PATTERN" translate-values="{ regex: \'/&quot;(.*)&quot;\\s&lt;(.*?)&gt;$/\' }">CallerIdAll must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.voicePrefix.description">\n\n                <div ng-messages="voicePrefixForm[\'description\'].$error" ng-show="voicePrefixForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newvoicePrefix" ng-click="vm.savevoicePrefix()" class="send-button md-accent md-raised" ng-disabled="voicePrefixForm.$invalid || voicePrefixForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newvoicePrefix" ng-click="vm.addNewvoicePrefix()" class="send-button md-accent md-raised" ng-disabled="voicePrefixForm.$invalid" aria-label="ADD" translate="VOICE.ADD_VOICEPREFIX" translate-attr-aria-label="VOICE.ADD_VOICEPREFIX">\n                    ADD VOICEPREFIX\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newvoicePrefix" ng-click="vm.deletevoicePrefix($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voicePrefixes/edit/agentadd/agentadd.html",'<md-dialog class="voicePrefix-dialog" aria-label="voicePrefix" ng-init="vm.onInit()">\n    <form name="voicePrefixForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="VOICE.AGENTADD_VOICEPREFIX">Add Agent to voicePrefix</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voicePrefixes/voicePrefixes.html",'<div id="voicePrefixes" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.VOICEPREFIXES">VoicePrefixes</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedVoicePrefixes.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedVoicePrefixes =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-voicePrefixes-count">\n                    <span>{{vm.selectedVoicePrefixes.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="VOICEPREFIXES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllVoicePrefixes()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectVoicePrefixes()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedVoicePrefixes" csv-label="true" filename="voicePrefixes.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedVoicePrefixes($event)" aria-label="delete selected" translate translate-attr-label="VOICEPREFIXES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- VOICEPREFIX TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedVoicePrefixes" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVoicePrefixes">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="VoiceExtensionId">{{ \'VOICE.OUTBOUNDROUTE\' | translate }}</th>\n                                <th md-column md-order-by="callerIdAll">{{ \'VOICE.CALLERIDALL\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.voicePrefixes.rows.length">\n                                <td md-cell colspan="6">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="voicePrefix" md-select-id="id" ng-repeat="voicePrefix in vm.voicePrefixes.rows">\n                                <td md-cell ng-if="voicePrefix.userpic"><img class="avatar" alt="{{voicePrefix.name}}" ng-src="api/users/{{voicePrefix.id}}/avatar" /></td>\n                                <td md-cell ng-if="!voicePrefix.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{voicePrefix.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditvoicePrefix($event, voicePrefix)" md-cell class="id ">{{voicePrefix.id}}</td>\n                                <td ng-click="vm.createOrEditvoicePrefix($event, voicePrefix)" md-cell class="name ">{{voicePrefix.name}}</td>\n                                <td ng-click="vm.createOrEditvoicePrefix($event, voicePrefix)" md-cell class="VoiceExtensionId ">{{ (vm.outboundRoutes | filter : {\'id\':voicePrefix.VoiceExtensionId} : true)[0].exten }}</td>\n                                <td ng-click="vm.createOrEditvoicePrefix($event, voicePrefix)" md-cell class="callerIdAll ">{{voicePrefix.callerIdAll}}</td>\n                                <td ng-click="vm.createOrEditvoicePrefix($event, voicePrefix)" md-cell class="description ">{{voicePrefix.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editdialog(voicePrefix, $event    )" translate="VOICE.EDIT_VOICEPREFIX">\n                                                    Edit voicePrefix\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(voicePrefix, $event    )" translate="VOICE.AGENTADD_VOICEPREFIX">\n                                                    AgentAdd voicePrefix\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(voicePrefix, $event    )" translate="VOICE.DELETE_VOICEPREFIX">\n                                                    Delete voicePrefix\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.voicePrefixes.count}}" md-on-paginate="vm.getVoicePrefixes" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / VOICEPREFIX TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD VOICEPREFIX BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-voicePrefix-button" ng-click="vm.createOrEditvoicePrefix($event)" aria-label="add voicePrefix" translate translate-attr-aria-label="VOICE.ADD_VOICEPREFIX">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD VOICEPREFIX BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/voiceQueues/create/dialog.html",'<md-dialog class="voiceQueue-dialog" aria-label="New VoiceQueue">\n    <form name="voiceQueueForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.voiceQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus ng-disabled="!vm.newVoiceQueue">\n\n                <div class="hint"><span translate="VOICE.HELP.NAME"></span></div>\n                <div ng-messages="voiceQueueForm[\'name\'].$error" ng-show="voiceQueueForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="VOICE.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.STRATEGY">Strategy</label>\n                <md-select name="strategy" ng-model="vm.voiceQueue.strategy" required>\n                    <md-option ng-value="\'ringall\'">Ringall</md-option>\n                    <md-option ng-value="\'rrmemory\'">Round Robin Memory</md-option>\n                    <md-option ng-value="\'leastrecent\'">Least Recent</md-option>\n                    <md-option ng-value="\'fewestcalls\'">Fewest Calls</md-option>\n                    <md-option ng-value="\'random\'">Random</md-option>\n                    <md-option ng-value="\'linear\'">Linear</md-option>\n                    <md-option ng-value="\'wrandom\'">Weight Random</md-option>\n                </md-select>\n                <div ng-messages="voiceQueueForm[\'strategy\'].$error" ng-show="voiceQueueForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="VOICE.DESCRIPTION">Description</label>\n                <input type="text" name="description" ng-model="vm.voiceQueue.description">\n\n                <div ng-messages="voiceQueueForm[\'description\'].$error" ng-show="voiceQueueForm[\'description\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVoiceQueue" ng-click="vm.saveVoiceQueue()" class="send-button md-accent md-raised" ng-disabled="voiceQueueForm.$invalid || voiceQueueForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVoiceQueue" ng-click="vm.addNewVoiceQueue()" class="send-button md-accent md-raised" ng-disabled="voiceQueueForm.$invalid" aria-label="ADD" translate="VOICE.ADD_VOICEQUEUE" translate-attr-aria-label="VOICE.ADD_VOICEQUEUE">\n                    ADD VOICEQUEUE\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVoiceQueue" ng-click="vm.deleteVoiceQueue($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voiceQueues/edit/agentadd/agentadd.html",'<md-dialog class="voiceQueue-dialog" aria-label="voiceQueue" ng-init="vm.onInit()">\n    <form name="voiceQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="VOICE.AGENTADD_VOICEQUEUE">Add Agent to voiceQueue</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <md-input-container flex class="no-margin">\n                <label translate="VOICE.PENALTY">Penalty</label>\n                <input name="penalty" ng-model="vm.penalty" placeholder="0" required md-minlength="0" md-maxlength="3">\n                <div ng-messages="voiceQueueForm.penalty.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span>You must supply a penalty.</span>\n                    </div>\n                    <div ng-message="md-minlength">\n                        <span>Min Penalty 0 characters.</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span>Max Penalty 3 characters.</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveAgents()" class="send-button md-accent md-raised" ng-disabled="!vm.pendingChanges" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voiceQueues/edit/teamadd/teamadd.html",'<md-dialog class="voiceQueue-dialog" aria-label="voiceQueue" ng-init="vm.onInit()">\n    <form name="voiceQueueForm" ng-cloak>\n        <md-toolbar>\n            <div class="md-toolbar-tools">\n                <h2 translate="VOICE.TEAMS_ASSOCIATION">Teams Association</h2>\n                <span flex></span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content>\n            <md-input-container flex class="no-margin">\n                <label translate="VOICE.PENALTY">Penalty</label>\n                <input name="penalty" ng-model="vm.penalty" placeholder="0" required md-minlength="0" md-maxlength="3">\n                <div ng-messages="voiceQueueForm.penalty.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span>You must supply a penalty.</span>\n                    </div>\n                    <div ng-message="md-minlength">\n                        <span>Min Penalty 0 characters.</span>\n                    </div>\n                    <div ng-message="md-maxlength">\n                        <span>Max Penalty 3 characters.</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <ms-dual-multiselect options="vm.dualMultiselectOptions"></ms-dual-multiselect>\n        </md-dialog-content>\n        <md-dialog-actions layout="row" layout-align="end center" ng-if="vm.crudPermissions.canEdit">\n            <span></span>\n            <md-button layout-align="end center" type="submit" ng-click="vm.saveTeams()" ng-disabled="!vm.pendingChanges" class="send-button md-accent md-raised" aria-label="SAVE" translate="STAFF.SAVE" translate-attr-aria-label="STAFF.SAVE">\n                SAVE\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voiceQueues/edit/view.html",'<div id="voice-voiceQueue" class="page-layout simple tabbed" layout="column">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="start center">\n        <div class="white-fg" layout="row" layout-align="start center" flex>\n            <md-button class="goto-voiceQueues-button md-icon-button" aria-label="Go to voiceQueues" ng-click="vm.gotoVoiceQueues()" translate translate-attr-aria-label="VOICE.GO_TO_VOICEQUEUES">\n                <md-icon md-font-icon="icon-arrow-left"></md-icon>\n            </md-button>\n\n            <div layout="row" layout-align="start center">\n\n                <div class="voiceQueue-image" hide-xs>\n                    <img ng-src="assets/images/business/voiceQueues.jpg">\n                </div>\n\n                <div layout="column" layout-align="start start">\n                    <div class="h2">\n                        #{{vm.voiceQueue.id}}\n                        <span ng-if="vm.voiceQueue.name">{{vm.voiceQueue.name}}</span>\n                    </div>\n                    <div class="subtitle secondary-text">\n                        <span translate="VOICE.CREATED_AT"></span> <span>{{vm.voiceQueue.createdAt | date:\'medium\'}}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.teamadddialog(vm.voiceQueue, $event)" class="md-fab md-orange-500-bg md-icon-button" aria-label="teamadd">\n                <md-tooltip><span translate="VOICE.TEAMADD_VOICEQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.agentadddialog(vm.voiceQueue, $event)" class="md-fab md-purple-500-bg md-icon-button" aria-label="agentadd">\n                <md-tooltip><span translate="VOICE.AGENTADD_VOICEQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-account-plus"></md-icon>\n            </md-button>\n        </div>\n\n        <div ng-cloak>\n            <md-button ng-click="vm.gotogoto(vm.voiceQueue, $event)" class="md-fab md-warn md-icon-button" aria-label="goto">\n                <md-tooltip><span translate="VOICE.GOTO_VOICEQUEUE"></span></md-tooltip>\n                <md-icon md-font-icon="icon-cast"></md-icon>\n            </md-button>\n        </div>\n        <div>\n            <md-button type="submit" ng-click="vm.saveVoiceQueue()" ng-if="vm.crudPermissions.canEdit" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (settingsForm.$invalid) || (announcementsForm.$invalid) || (advancedForm.$invalid)" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                SAVE\n            </md-button>\n        </div>\n\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content">\n\n        <md-tabs md-selected="vm.selectedTab" md-stretch-tabs="always" flex layout-fill md-dynamic-height>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.SETTINGS">SETTINGS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="voiceQueue-detail-form-container general md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.GENERAL">GENERAL</div>\n                        </div>\n                        <form name="generalForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.NAME">Name</label>\n                                <input type="text" name="name" ng-model="vm.voiceQueue.name" ng-pattern="/^[A-Za-z0-9\\.\\_]+$/i" ng-required="true" autofocus disabled>\n\n                                <div class="hint"><span translate="VOICE.HELP.NAME"></span></div>\n                                <div ng-messages="generalForm[\'name\'].$error" ng-show="generalForm[\'name\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.NAME_REQUIRED">Name field is required</span>\n                                    </div>\n                                    <div ng-message="pattern">\n                                        <span translate="VOICE.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.STRATEGY">Strategy</label>\n                                <md-select name="strategy" ng-model="vm.voiceQueue.strategy" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'ringall\'">Ringall</md-option>\n                                    <md-option ng-value="\'rrmemory\'">Round Robin Memory</md-option>\n                                    <md-option ng-value="\'leastrecent\'">Least Recent</md-option>\n                                    <md-option ng-value="\'fewestcalls\'">Fewest Calls</md-option>\n                                    <md-option ng-value="\'random\'">Random</md-option>\n                                    <md-option ng-value="\'linear\'">Linear</md-option>\n                                    <md-option ng-value="\'wrandom\'">Weight Random</md-option>\n                                </md-select>\n                                <div ng-messages="generalForm[\'strategy\'].$error" ng-show="generalForm[\'strategy\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.STRATEGY_REQUIRED">Strategy field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.TIMEOUT">Timeout</label>\n                                <input type="number" name="timeout" ng-model="vm.voiceQueue.timeout" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.TIMEOUT"></span></div>\n                                <div ng-messages="generalForm[\'timeout\'].$error" ng-show="generalForm[\'timeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.TIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Timeout must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MAXLENGTH">MaxLength</label>\n                                <input type="number" name="maxlen" ng-model="vm.voiceQueue.maxlen" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.MAXLENGTH"></span></div>\n                                <div ng-messages="generalForm[\'maxlen\'].$error" ng-show="generalForm[\'maxlen\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MAXLENGTH_REQUIRED">MaxLength field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.MAXLENGTH_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MaxLength must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.RETRY">Retry</label>\n                                <input type="number" name="retry" ng-model="vm.voiceQueue.retry" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.RETRY"></span></div>\n                                <div ng-messages="generalForm[\'retry\'].$error" ng-show="generalForm[\'retry\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.RETRY_REQUIRED">Retry field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.RETRY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Retry must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.WRAPUPTIME">WrapupTime</label>\n                                <input type="number" name="wrapuptime" ng-model="vm.voiceQueue.wrapuptime" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.WRAPUPTIME"></span></div>\n                                <div ng-messages="generalForm[\'wrapuptime\'].$error" ng-show="generalForm[\'wrapuptime\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.WRAPUPTIME_REQUIRED">WrapupTime field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.WRAPUPTIME_MUST_BE_GREATER_THAN_OR_EQUAL_TO">WrapupTime must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.WEIGHT">Weight</label>\n                                <input type="number" name="weight" ng-model="vm.voiceQueue.weight" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.WEIGHT"></span></div>\n                                <div ng-messages="generalForm[\'weight\'].$error" ng-show="generalForm[\'weight\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.WEIGHT_REQUIRED">Weight field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.WEIGHT_MUST_BE_GREATER_THAN_OR_EQUAL_TO">Weight must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.JOINWHENEMPTY">JoinWhenEmpty</label>\n                                <md-select name="joinempty" ng-model="vm.voiceQueue.joinempty" multiple ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'strict\'">strict</md-option>\n                                    <md-option ng-value="\'loose\'">loose</md-option>\n                                    <md-option ng-value="\'paused\'">paused</md-option>\n                                    <md-option ng-value="\'penalty\'">penalty</md-option>\n                                    <md-option ng-value="\'inuse\'">inuse</md-option>\n                                    <md-option ng-value="\'ringing\'">ringing</md-option>\n                                    <md-option ng-value="\'unavailable\'">unavailable</md-option>\n                                    <md-option ng-value="\'invalid\'">invalid</md-option>\n                                    <md-option ng-value="\'unknown\'">unknown</md-option>\n                                    <md-option ng-value="\'wrapup\'">wrapup</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.JOINWHENEMPTY"></span></div>\n                                <div ng-messages="generalForm[\'joinempty\'].$error" ng-show="generalForm[\'joinempty\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.JOINWHENEMPTY_REQUIRED">JoinWhenEmpty field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.LEAVEWHENEMPTY">LeaveWhenEmpty</label>\n                                <md-select name="leavewhenempty" ng-model="vm.voiceQueue.leavewhenempty" multiple ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'no\'">no</md-option>\n                                    <md-option ng-value="\'yes\'">yes</md-option>\n                                    <md-option ng-value="\'strict\'">strict</md-option>\n                                    <md-option ng-value="\'loose\'">loose</md-option>\n                                    <md-option ng-value="\'paused\'">paused</md-option>\n                                    <md-option ng-value="\'penalty\'">penalty</md-option>\n                                    <md-option ng-value="\'inuse\'">inuse</md-option>\n                                    <md-option ng-value="\'ringing\'">ringing</md-option>\n                                    <md-option ng-value="\'unavailable\'">unavailable</md-option>\n                                    <md-option ng-value="\'invalid\'">invalid</md-option>\n                                    <md-option ng-value="\'unknown\'">unknown</md-option>\n                                    <md-option ng-value="\'wrapup\'">wrapup</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.LEAVEWHENEMPTY"></span></div>\n                                <div ng-messages="generalForm[\'leavewhenempty\'].$error" ng-show="generalForm[\'leavewhenempty\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.LEAVEWHENEMPTY_REQUIRED">LeaveWhenEmpty field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MUSICONHOLD">MusicOnHold</label>\n                                <md-select name="musiconhold" ng-model="vm.voiceQueue.musiconhold" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="musiconhold.name" ng-repeat="musiconhold in vm.musiconholds" ng-disabled="musiconhold.canSelect === false">{{ musiconhold.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.MUSICONHOLD"></span></div>\n                                <div ng-messages="generalForm[\'musiconhold\'].$error" ng-show="generalForm[\'musiconhold\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MUSICONHOLD_REQUIRED">MusicOnHold field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ANNOUNCETOAGENT">AnnounceToAgent</label>\n                                <md-select name="announce" ng-model="vm.voiceQueue.announce" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'FALSE\'">None</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + announce.save_name" ng-repeat="announce in vm.sounds" ng-disabled="announce.canSelect === false">{{ announce.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.ANNOUNCETOAGENT"></span></div>\n                                <div ng-messages="generalForm[\'announce\'].$error" ng-show="generalForm[\'announce\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ANNOUNCETOAGENT_REQUIRED">AnnounceToAgent field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.DESCRIPTION">Description</label>\n                                <input type="text" name="description" ng-model="vm.voiceQueue.description" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div ng-messages="generalForm[\'description\'].$error" ng-show="generalForm[\'description\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ANNOUNCEMENTS">ANNOUNCEMENTS</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="voiceQueue-detail-form-container settings md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.SETTINGS">SETTINGS</div>\n                        </div>\n                        <form name="settingsForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ANNOUNCEFREQUENCY">AnnounceFrequency</label>\n                                <input type="number" name="announce_frequency" ng-model="vm.voiceQueue.announce_frequency" min="0" autofocus ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.ANNOUNCEFREQUENCY"></span></div>\n                                <div ng-messages="settingsForm[\'announce_frequency\'].$error" ng-show="settingsForm[\'announce_frequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ANNOUNCEFREQUENCY_REQUIRED">AnnounceFrequency field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.ANNOUNCEFREQUENCY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AnnounceFrequency must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MINANNOUNCEFREQUENCY">MinAnnounceFrequency</label>\n                                <input type="number" name="min_announce_frequency" ng-model="vm.voiceQueue.min_announce_frequency" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.MINANNOUNCEFREQUENCY"></span></div>\n                                <div ng-messages="settingsForm[\'min_announce_frequency\'].$error" ng-show="settingsForm[\'min_announce_frequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MINANNOUNCEFREQUENCY_REQUIRED">MinAnnounceFrequency field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.MINANNOUNCEFREQUENCY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MinAnnounceFrequency must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.PERIODICANNOUNCEFREQUENCY">PeriodicAnnounceFrequency</label>\n                                <input type="number" name="periodic_announce_frequency" ng-model="vm.voiceQueue.periodic_announce_frequency" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.PERIODICANNOUNCEFREQUENCY"></span></div>\n                                <div ng-messages="settingsForm[\'periodic_announce_frequency\'].$error" ng-show="settingsForm[\'periodic_announce_frequency\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.PERIODICANNOUNCEFREQUENCY_REQUIRED">PeriodicAnnounceFrequency field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.PERIODICANNOUNCEFREQUENCY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">PeriodicAnnounceFrequency must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.RANDOMPERIODICANNOUNCE">RandomPeriodicAnnounce</label>\n                                <md-select name="random_periodic_announce" ng-model="vm.voiceQueue.random_periodic_announce" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.RANDOMPERIODICANNOUNCE"></span></div>\n                                <div ng-messages="settingsForm[\'random_periodic_announce\'].$error" ng-show="settingsForm[\'random_periodic_announce\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.RANDOMPERIODICANNOUNCE_REQUIRED">RandomPeriodicAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ANNOUNCEHOLDTIME">AnnounceHoldtime</label>\n                                <md-select name="announce_holdtime" ng-model="vm.voiceQueue.announce_holdtime" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">Yes</md-option>\n                                    <md-option ng-value="\'no\'">No</md-option>\n                                    <md-option ng-value="\'once\'">Once</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.ANNOUNCEHOLDTIME"></span></div>\n                                <div ng-messages="settingsForm[\'announce_holdtime\'].$error" ng-show="settingsForm[\'announce_holdtime\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ANNOUNCEHOLDTIME_REQUIRED">AnnounceHoldtime field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ANNOUNCECALLERPOSITION">AnnounceCallerPosition</label>\n                                <md-select name="announce_position" ng-model="vm.voiceQueue.announce_position" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'yes\'">Yes</md-option>\n                                    <md-option ng-value="\'no\'">No</md-option>\n                                    <md-option ng-value="\'limit\'">Limit</md-option>\n                                    <md-option ng-value="\'more\'">More</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.ANNOUNCECALLERPOSITION"></span></div>\n                                <div ng-messages="settingsForm[\'announce_position\'].$error" ng-show="settingsForm[\'announce_position\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ANNOUNCECALLERPOSITION_REQUIRED">AnnounceCallerPosition field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ANNOUNCEPOSITIONLIMIT">AnnouncePositionLimit</label>\n                                <input type="number" name="announce_position_limit" ng-model="vm.voiceQueue.announce_position_limit" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.ANNOUNCEPOSITIONLIMIT"></span></div>\n                                <div ng-messages="settingsForm[\'announce_position_limit\'].$error" ng-show="settingsForm[\'announce_position_limit\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ANNOUNCEPOSITIONLIMIT_REQUIRED">AnnouncePositionLimit field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.REPORTHOLDTIMEAGENT">ReportHoldtimeAgent</label>\n                                <md-select name="reportholdtime" ng-model="vm.voiceQueue.reportholdtime" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.REPORTHOLDTIMEAGENT"></span></div>\n                                <div ng-messages="settingsForm[\'reportholdtime\'].$error" ng-show="settingsForm[\'reportholdtime\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.REPORTHOLDTIMEAGENT_REQUIRED">ReportHoldtimeAgent field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                    <div class="voiceQueue-detail-form-container announcements md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.ANNOUNCEMENTS">ANNOUNCEMENTS</div>\n                        </div>\n                        <form name="announcementsForm" novalidate>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.PERIODICANNOUNCE">PeriodicAnnounce</label>\n                                <md-select name="periodic_announce" ng-model="vm.voiceQueue.periodic_announce" autofocus multiple ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'\'">Default</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + periodic_announce.save_name" ng-repeat="periodic_announce in vm.sounds" ng-disabled="periodic_announce.canSelect === false">{{ periodic_announce.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.PERIODICANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'periodic_announce\'].$error" ng-show="announcementsForm[\'periodic_announce\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.PERIODICANNOUNCE_REQUIRED">PeriodicAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.HOLDTIMEANNOUNCE">HoldTimeAnnounce</label>\n                                <md-select name="queue_reporthold" ng-model="vm.voiceQueue.queue_reporthold" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_reporthold.save_name" ng-repeat="queue_reporthold in vm.sounds" ng-disabled="queue_reporthold.canSelect === false">{{ queue_reporthold.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.HOLDTIMEANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_reporthold\'].$error" ng-show="announcementsForm[\'queue_reporthold\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.HOLDTIMEANNOUNCE_REQUIRED">HoldTimeAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.YOUARENEXTANNOUNCE">YouareNextAnnounce</label>\n                                <md-select name="queue_youarenext" ng-model="vm.voiceQueue.queue_youarenext" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_youarenext.save_name" ng-repeat="queue_youarenext in vm.sounds" ng-disabled="queue_youarenext.canSelect === false">{{ queue_youarenext.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.YOUARENEXTANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_youarenext\'].$error" ng-show="announcementsForm[\'queue_youarenext\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.YOUARENEXTANNOUNCE_REQUIRED">YouareNextAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.THEREAREANNOUNCE">ThereareAnnounce</label>\n                                <md-select name="queue_thereare" ng-model="vm.voiceQueue.queue_thereare" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_thereare.save_name" ng-repeat="queue_thereare in vm.sounds" ng-disabled="queue_thereare.canSelect === false">{{ queue_thereare.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.THEREAREANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_thereare\'].$error" ng-show="announcementsForm[\'queue_thereare\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.THEREAREANNOUNCE_REQUIRED">ThereareAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.WAITINGCALLSANNOUNCE">WaitingCallsAnnounce</label>\n                                <md-select name="queue_callswaiting" ng-model="vm.voiceQueue.queue_callswaiting" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_callswaiting.save_name" ng-repeat="queue_callswaiting in vm.sounds" ng-disabled="queue_callswaiting.canSelect === false">{{ queue_callswaiting.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.WAITINGCALLSANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_callswaiting\'].$error" ng-show="announcementsForm[\'queue_callswaiting\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.WAITINGCALLSANNOUNCE_REQUIRED">WaitingCallsAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.ESTIMATEDHOLDTIMEANNOUNCE">EstimatedHoldTimeAnnounce</label>\n                                <md-select name="queue_holdtime" ng-model="vm.voiceQueue.queue_holdtime" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_holdtime.save_name" ng-repeat="queue_holdtime in vm.sounds" ng-disabled="queue_holdtime.canSelect === false">{{ queue_holdtime.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.ESTIMATEDHOLDTIMEANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_holdtime\'].$error" ng-show="announcementsForm[\'queue_holdtime\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.ESTIMATEDHOLDTIMEANNOUNCE_REQUIRED">EstimatedHoldTimeAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MINUTESANNOUNCE">MinutesAnnounce</label>\n                                <md-select name="queue_minutes" ng-model="vm.voiceQueue.queue_minutes" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_minutes.save_name" ng-repeat="queue_minutes in vm.sounds" ng-disabled="queue_minutes.canSelect === false">{{ queue_minutes.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.MINUTESANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_minutes\'].$error" ng-show="announcementsForm[\'queue_minutes\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MINUTESANNOUNCE_REQUIRED">MinutesAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MINUTEANNOUNCE">MinuteAnnounce</label>\n                                <md-select name="queue_minute" ng-model="vm.voiceQueue.queue_minute" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_minute.save_name" ng-repeat="queue_minute in vm.sounds" ng-disabled="queue_minute.canSelect === false">{{ queue_minute.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.MINUTEANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_minute\'].$error" ng-show="announcementsForm[\'queue_minute\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MINUTEANNOUNCE_REQUIRED">MinuteAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.SECONDSANNOUNCE">SecondsAnnounce</label>\n                                <md-select name="queue_seconds" ng-model="vm.voiceQueue.queue_seconds" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_seconds.save_name" ng-repeat="queue_seconds in vm.sounds" ng-disabled="queue_seconds.canSelect === false">{{ queue_seconds.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.SECONDSANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_seconds\'].$error" ng-show="announcementsForm[\'queue_seconds\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.SECONDSANNOUNCE_REQUIRED">SecondsAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.THANKYOUANNOUNCE">ThankYouAnnounce</label>\n                                <md-select name="queue_thankyou" ng-model="vm.voiceQueue.queue_thankyou" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="null">Default</md-option>\n                                    <md-option ng-value="\'\'">Disabled</md-option>\n                                    <md-option ng-value="\'/var/opt/motion2/server/files/sounds/converted/\' + queue_thankyou.save_name" ng-repeat="queue_thankyou in vm.sounds" ng-disabled="queue_thankyou.canSelect === false">{{ queue_thankyou.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.THANKYOUANNOUNCE"></span></div>\n                                <div ng-messages="announcementsForm[\'queue_thankyou\'].$error" ng-show="announcementsForm[\'queue_thankyou\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.THANKYOUANNOUNCE_REQUIRED">ThankYouAnnounce field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n            <md-tab>\n                <md-tab-label>\n                    <span translate="VOICE.ADVANCED">ADVANCED</span>\n                </md-tab-label>\n                <md-tab-body>\n                    <div class="voiceQueue-detail-form-container advanced md-background-bg md-whiteframe-1dp">\n                        <div class="pb-16" layout="row" layout-align="start center">\n                            <div class="h2 secondary-text" translate="VOICE.ADVANCED">ADVANCED</div>\n                        </div>\n                        <form name="advancedForm" novalidate>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.voiceQueue.acw" aria-label="AfterCallWork" ng-disabled="!vm.crudPermissions.canEdit"><span translate="VOICE.AFTERCALLWORK">AfterCallWork</span></md-switch>\n\n                                <div class="hint"><span translate="VOICE.HELP.AFTERCALLWORK"></span></div>\n                            </md-input-container>\n                            <md-input-container ng-if="vm.voiceQueue.acw" class="md-block">\n                                <label translate="VOICE.AFTERCALLWORKDURATION">AfterCallWorkDuration</label>\n                                <input type="number" name="acwTimeout" ng-model="vm.voiceQueue.acwTimeout" min="0" ng-required="true" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.AFTERCALLWORKDURATION"></span></div>\n                                <div ng-messages="advancedForm[\'acwTimeout\'].$error" ng-show="advancedForm[\'acwTimeout\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.AFTERCALLWORKDURATION_REQUIRED">AfterCallWorkDuration field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.AFTERCALLWORKDURATION_MUST_BE_GREATER_THAN_OR_EQUAL_TO">AfterCallWorkDuration must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.AUTOPAUSE">AutoPause</label>\n                                <md-select name="autopause" ng-model="vm.voiceQueue.autopause" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'all\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.AUTOPAUSE"></span></div>\n                                <div ng-messages="advancedForm[\'autopause\'].$error" ng-show="advancedForm[\'autopause\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.AUTOPAUSE_REQUIRED">AutoPause field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.RINGINUSE">RingInUse</label>\n                                <md-select name="ringinuse" ng-model="vm.voiceQueue.ringinuse" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.RINGINUSE"></span></div>\n                                <div ng-messages="advancedForm[\'ringinuse\'].$error" ng-show="advancedForm[\'ringinuse\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.RINGINUSE_REQUIRED">RingInUse field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MEMBERDELAY">MemberDelay</label>\n                                <input type="number" name="memberdelay" ng-model="vm.voiceQueue.memberdelay" min="0" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.MEMBERDELAY"></span></div>\n                                <div ng-messages="advancedForm[\'memberdelay\'].$error" ng-show="advancedForm[\'memberdelay\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MEMBERDELAY_REQUIRED">MemberDelay field is required</span>\n                                    </div>\n                                    <div ng-message="min">\n                                        <span translate="VOICE.ERRORS.MEMBERDELAY_MUST_BE_GREATER_THAN_OR_EQUAL_TO">MemberDelay must be a valid greater or equal than</span> <span>0</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.TIMEOUTRESTART">TimeoutRestart</label>\n                                <md-select name="timeoutrestart" ng-model="vm.voiceQueue.timeoutrestart" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.TIMEOUTRESTART"></span></div>\n                                <div ng-messages="advancedForm[\'timeoutrestart\'].$error" ng-show="advancedForm[\'timeoutrestart\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.TIMEOUTRESTART_REQUIRED">TimeoutRestart field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.MONITORFORMAT">MonitorFormat</label>\n                                <md-select name="monitor_format" ng-model="vm.voiceQueue.monitor_format" ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="\'\'">Inactive</md-option>\n                                    <md-option ng-value="\'wav\'">wav</md-option>\n                                    <md-option ng-value="\'wav49\'">wav49</md-option>\n                                    <md-option ng-value="\'gsm\'">gsm</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.MONITORFORMAT"></span></div>\n                                <div ng-messages="advancedForm[\'monitor_format\'].$error" ng-show="advancedForm[\'monitor_format\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MONITORFORMAT_REQUIRED">MonitorFormat field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.CONTEXT">Context</label>\n                                <input type="text" name="context" ng-model="vm.voiceQueue.context" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                <div class="hint"><span translate="VOICE.HELP.CONTEXT"></span></div>\n                                <div ng-messages="advancedForm[\'context\'].$error" ng-show="advancedForm[\'context\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.CONTEXT_REQUIRED">Context field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.SETINTERFACEVARIABLES">SetInterfaceVariables</label>\n                                <md-select name="setinterfacevar" ng-model="vm.voiceQueue.setinterfacevar" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.SETINTERFACEVARIABLES"></span></div>\n                                <div ng-messages="advancedForm[\'setinterfacevar\'].$error" ng-show="advancedForm[\'setinterfacevar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.SETINTERFACEVARIABLES_REQUIRED">SetInterfaceVariables field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.SETQUEUEVARIABLES">SetQueueVariables</label>\n                                <md-select name="setqueuevar" ng-model="vm.voiceQueue.setqueuevar" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.SETQUEUEVARIABLES"></span></div>\n                                <div ng-messages="advancedForm[\'setqueuevar\'].$error" ng-show="advancedForm[\'setqueuevar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.SETQUEUEVARIABLES_REQUIRED">SetQueueVariables field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <label translate="VOICE.SETQUEUEENTRYVARIABLES">SetQueueEntryVariables</label>\n                                <md-select name="setqueueentryvar" ng-model="vm.voiceQueue.setqueueentryvar" ng-disabled="!vm.crudPermissions.canEdit">\n\n                                    <md-option ng-value="\'yes\'"> {{ \'VOICE.YES\' | translate }} </md-option>\n\n                                    <md-option ng-value="\'no\'"> {{ \'VOICE.NO\' | translate }} </md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.SETQUEUEENTRYVARIABLES"></span></div>\n                                <div ng-messages="advancedForm[\'setqueueentryvar\'].$error" ng-show="advancedForm[\'setqueueentryvar\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.SETQUEUEENTRYVARIABLES_REQUIRED">SetQueueEntryVariables field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n                            <md-input-container class="md-block">\n                                <md-switch ng-model="vm.voiceQueue.mandatoryDisposition" aria-label="MandatoryDisposition" ng-disabled="!vm.crudPermissions.canEdit"><span translate="VOICE.MANDATORYDISPOSITION">MandatoryDisposition</span></md-switch>\n\n                            </md-input-container>\n                            <md-input-container ng-if="vm.voiceQueue.mandatoryDisposition" class="md-block">\n                                <label translate="VOICE.MANDATORYDISPOSITIONPAUSEID">MandatoryDispositionPauseId</label>\n                                <md-select name="mandatoryDispositionPauseId" ng-model="vm.voiceQueue.mandatoryDispositionPauseId" required ng-disabled="!vm.crudPermissions.canEdit">\n                                    <md-option ng-value="mandatoryDispositionPauseId.id" ng-repeat="mandatoryDispositionPauseId in vm.pauses" ng-disabled="mandatoryDispositionPauseId.canSelect === false">{{ mandatoryDispositionPauseId.name }}</md-option>\n                                </md-select>\n                                <div class="hint"><span translate="VOICE.HELP.MANDATORYDISPOSITIONPAUSEID"></span></div>\n                                <div ng-messages="advancedForm[\'mandatoryDispositionPauseId\'].$error" ng-show="advancedForm[\'mandatoryDispositionPauseId\'].$touched" role="alert">\n                                    <div ng-message="required">\n                                        <span translate="VOICE.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED">MandatoryDispositionPauseId field is required</span>\n                                    </div>\n                                </div>\n                            </md-input-container>\n\n                        </form>\n                    </div>\n                </md-tab-body>\n            </md-tab>\n        </md-tabs>\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n</div>'),e.put("app/main/apps/voice/views/voiceQueues/voiceQueues.html",'<div id="voiceQueues" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.VOICEQUEUES">VoiceQueues</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedVoiceQueues.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedVoiceQueues =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-voiceQueues-count">\n                    <span>{{vm.selectedVoiceQueues.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="VOICEQUEUES.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllVoiceQueues()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectVoiceQueues()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedVoiceQueues" csv-label="true" filename="voiceQueues.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedVoiceQueues($event)" aria-label="delete selected" translate translate-attr-label="VOICEQUEUES.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- VOICEQUEUE TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedVoiceQueues" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVoiceQueues">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="id">{{ \'VOICE.ID\' | translate }}</th>\n                                <th md-column md-order-by="name">{{ \'VOICE.NAME\' | translate }}</th>\n                                <th md-column md-order-by="strategy">{{ \'VOICE.STRATEGY\' | translate }}</th>\n                                <th md-column md-order-by="description">{{ \'VOICE.DESCRIPTION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.voiceQueues.rows.length">\n                                <td md-cell colspan="5">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="voiceQueue" md-select-id="id" ng-repeat="voiceQueue in vm.voiceQueues.rows">\n                                <td md-cell ng-if="voiceQueue.userpic"><img class="avatar" alt="{{voiceQueue.name}}" ng-src="api/users/{{voiceQueue.id}}/avatar" /></td>\n                                <td md-cell ng-if="!voiceQueue.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{voiceQueue.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voiceQueue, ev) : vm.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="id ">{{voiceQueue.id}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voiceQueue, ev) : vm.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="name ">{{voiceQueue.name}}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voiceQueue, ev) : vm.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="strategy ">{{ vm.arraystrategy[voiceQueue.strategy].option }}</td>\n                                <td ng-click="vm.crudPermissions.readOnly || (vm.crudPermissions.canDelete && !vm.crudPermissions.canEdit) ? vm.editstate(voiceQueue, ev) : vm.createOrEditVoiceQueue($event, voiceQueue)" md-cell class="description ">{{voiceQueue.description}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n\n                                                <md-button ng-click="vm.editstate(voiceQueue, $event    )" translate="VOICE.EDIT_VOICEQUEUE">\n                                                    Edit VoiceQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.teamadddialog(voiceQueue, $event    )" translate="VOICE.TEAMADD_VOICEQUEUE">\n                                                    teamadd VoiceQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.agentadddialog(voiceQueue, $event    )" translate="VOICE.AGENTADD_VOICEQUEUE">\n                                                    agentadd VoiceQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(voiceQueue, $event    )" translate="VOICE.DELETE_VOICEQUEUE">\n                                                    Delete VoiceQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.gotorealtimegoto(voiceQueue, $event    )" translate="VOICE.GOTOREALTIME_VOICEQUEUE">\n                                                    goToRealtime VoiceQueue\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.voiceQueues.count}}" md-on-paginate="vm.getVoiceQueues" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / VOICEQUEUE TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- ADD VOICEQUEUE BUTTON --\x3e\n    <md-button ng-if="vm.crudPermissions.canEdit" class="md-fab md-accent" id="add-voiceQueue-button" ng-click="vm.createOrEditVoiceQueue($event)" aria-label="add voiceQueue" translate translate-attr-aria-label="VOICE.ADD_VOICEQUEUE">\n        <md-icon md-font-icon="icon-plus"></md-icon>\n    </md-button>\n    \x3c!-- / ADD VOICEQUEUE BUTTON --\x3e\n</div>'),e.put("app/main/apps/voice/views/voiceRecordings/create/dialog.html",'<md-dialog class="voiceRecording-dialog" aria-label="New VoiceRecording">\n    <form name="voiceRecordingForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="VOICE.RATING">Rating</label>\n                <md-select name="rating" ng-model="vm.voiceRecording.rating" autofocus ng-disabled="!vm.newVoiceRecording && !vm.crudPermissions.canEdit">\n                    <md-option ng-value="null">{{\'VOICE.NO_RATING\' | translate}}</md-option>\n                    <md-option value="1">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1]"></md-icon>\n                    </md-option>\n                    <md-option value="2">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2]"></md-icon>\n                    </md-option>\n                    <md-option value="3">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2,3]"></md-icon>\n                    </md-option>\n                    <md-option value="4">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2,3,4]"></md-icon>\n                    </md-option>\n                    <md-option value="5">\n                        <md-icon md-font-icon="icon-star" style="color:red" ng-repeat="icon in [1,2,3,4,5]"></md-icon>\n                    </md-option>\n                </md-select>\n                <div ng-messages="voiceRecordingForm[\'rating\'].$error" ng-show="voiceRecordingForm[rating].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="VOICE.ERRORS.RATING_REQUIRED">Rating field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" ng-if="!vm.crudPermissions.readOnly">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && !vm.newVoiceRecording" ng-click="vm.saveVoiceRecording()" class="send-button md-accent md-raised" ng-disabled="voiceRecordingForm.$invalid || voiceRecordingForm.$pristine" aria-label="SAVE" translate="VOICE.SAVE" translate-attr-aria-label="VOICE.SAVE">\n                    SAVE\n                </md-button>\n\n                <md-button type="submit" ng-if="vm.crudPermissions.canEdit && vm.newVoiceRecording" ng-click="vm.addNewVoiceRecording()" class="send-button md-accent md-raised" ng-disabled="voiceRecordingForm.$invalid" aria-label="ADD" translate="VOICE.ADD_VOICERECORDING" translate-attr-aria-label="VOICE.ADD_VOICERECORDING">\n                    ADD VOICERECORDING\n                </md-button>\n            </div>\n            <div layout="row">\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete && !vm.newVoiceRecording" ng-click="vm.deleteVoiceRecording($event)" aria-label="DELETE" translate translate-attr-aria-label="VOICE.DELETE">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                    <md-tooltip><span translate="VOICE.DELETE">DELETE</span></md-tooltip>\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/main/apps/voice/views/voiceRecordings/voiceRecordings.html",'<div id="voiceRecordings" class="page-layout simple left-sidenav inner-sidenav">\n\n    \x3c!-- HEADER --\x3e\n    <div class="header md-accent-bg" layout="row" layout-align="space-between center">\n\n        \x3c!-- APP TITLE --\x3e\n        <div layout="row" layout-align="start center">\n            <div class="logo" layout="row" layout-align="start center">\n                <span class="logo-icon">\n                    <md-icon md-font-icon="icon-phone" class="s24"></md-icon>\n                </span>\n                <span class="logo-text" translate="VOICE.VOICERECORDINGS">VoiceRecordings</span>\n            </div>\n        </div>\n        \x3c!-- / APP TITLE --\x3e\n\n        <div layout="row">\n            \x3c!-- SEARCH --\x3e\n            <div class="search-input-wrapper" layout="row" layout-align="start center">\n                <label for="search">\n                    <md-icon md-font-icon="icon-magnify"></md-icon>\n                </label>\n                <md-input-container md-no-float class="m-0">\n                    <input id="search" placeholder="Search for anyone" type="text" ng-model="vm.query.filter" ng-model-options="{ debounce: 1000 }" translate translate-attr-placeholder="VOICE.SEARCH_FOR_ANYONE">\n                </md-input-container>\n            </div>\n            \x3c!-- / SEARCH --\x3e\n            \x3c!-- DATE FILTER --\x3e\n            <div class="padding-horizontal-20" layout="column" layout-align="center center">\n                <span class="font-size-10" translate="DASHBOARDS.SELECT_DATE_RANGE">Select Date Range</span>\n                <div layout="row" layout-align="center center">\n                    <md-button ng-if="vm.pickerModel.dateStart" ng-click="vm.clearDateFilter()" class="md-icon-button no-padding width-20 height-20">\n                        <md-tooltip>{{ \'DASHBOARDS.CLEAR\' | translate }}</md-tooltip>\n                        <md-icon md-font-icon="icon-close" class="s16 white-fg"></md-icon>\n                    </md-button>\n                    <md-date-range localization-map="vm.localizationMap" ng-model="vm.pickerModel" auto-confirm="true" show-template="true" md-on-select="vm.getVoiceRecordings()" placeholder="{{ \'DASHBOARDS.ALL\' | translate }}"></md-date-range>\n                </div>\n            </div>\n            \x3c!-- /DATE FILTER --\x3e\n        </div>\n    </div>\n    \x3c!-- / HEADER --\x3e\n\n    \x3c!-- SELECTED BAR --\x3e\n    <div ng-show="vm.selectedVoiceRecordings.length > 0" class="selected-bar header animate-slide-down md-accent-bg" layout="row" layout-align="start center">\n\n        <div class="close-button-wrapper" ng-click="vm.selectedVoiceRecordings =[]">\n            <md-button layout="row" layout-align="start center">\n                <md-icon md-font-icon="icon-arrow-left" class="mr-8"></md-icon>\n                <span translate="VOICE.BACK">Back</span>\n            </md-button>\n        </div>\n\n        <div flex layout="row" layout-align="space-between center">\n\n            <div>\n                <span class="selected-voiceRecordings-count">\n                    <span>{{vm.selectedVoiceRecordings.length}}</span>\n                    <span translate="VOICE.SELECTED">selected</span>\n                </span>\n\n                <md-menu class="select-menu" ng-if="!vm.currentThread">\n                    <md-button class="md-icon-button" ng-click="$mdOpenMenu($event)" aria-label="multi select toggle" translate translate-attr-aria-label="VOICERECORDINGS.MULTI_SELECT_TOGGLE">\n                        <md-icon md-font-icon="icon-menu-down"></md-icon>\n                    </md-button>\n                    <md-menu-content width="3">\n                        <md-menu-item>\n                            <md-button ng-click="vm.selectAllVoiceRecordings()" translate="VOICE.SELECT_ALL">\n                                Select all\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item>\n                            <md-button ng-click="vm.deselectVoiceRecordings()" translate="VOICE.SELECT_NONE">\n                                Select none\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n\n            <div class="multi-select-actions">\n                <button class="md-icon-button" ng-csv="vm.exportSelectedVoiceRecordings" csv-label="true" filename="voiceRecordings.csv">\n                    <md-icon md-font-icon="icon-file-excel"></md-icon>\n                </button>\n                <md-button class="md-icon-button" ng-if="vm.crudPermissions.canDelete" ng-click="vm.deleteSelectedVoiceRecordings($event)" aria-label="delete selected" translate translate-attr-label="VOICERECORDINGS.DELETE_SELECTED">\n                    <md-icon md-font-icon="icon-delete"></md-icon>\n                </md-button>\n            </div>\n        </div>\n    </div>\n    \x3c!-- / SELECTED BAR --\x3e\n\n    \x3c!-- CONTENT --\x3e\n    <div class="content" md-background-bg layout="row" layout-align="start start">\n\n        \x3c!-- MAIN --\x3e\n        <div class="main scrollable" ms-scroll>\n\n\n            \x3c!-- VOICERECORDING TABLE --\x3e\n            <md-card>\n                <md-table-container>\n                    <table md-table md-row-select multiple ng-model="vm.selectedVoiceRecordings" md-progress="vm.promise">\n                        <thead md-head md-order="vm.query.sort" md-on-reorder="vm.getVoiceRecordings">\n                            <tr md-row>\n                                <th md-column ng-if="vm.table == \'users\' || vm.table == \'agents\'" width="20px"></th>\n                                <th md-column md-order-by="type">{{ \'VOICE.TYPE\' | translate }}</th>\n                                <th md-column md-order-by="uniqueid">{{ \'VOICE.UNIQUEID\' | translate }}</th>\n                                <th md-column md-order-by="calleridnum">{{ \'VOICE.CALLER\' | translate }}</th>\n                                <th md-column md-order-by="exten">{{ \'VOICE.CALLED\' | translate }}</th>\n                                <th md-column md-order-by="connectedlinenum">{{ \'VOICE.CONNECTED\' | translate }}</th>\n                                <th md-column md-order-by="queue">{{ \'VOICE.QUEUE\' | translate }}</th>\n                                <th md-column md-order-by="membername">{{ \'VOICE.AGENT\' | translate }}</th>\n                                <th md-column md-order-by="rating">{{ \'VOICE.RATING\' | translate }}</th>\n                                <th md-column md-order-by="audio">{{ \'VOICE.AUDIO\' | translate }}</th>\n                                <th md-column md-order-by="createdAt">{{ \'VOICE.DATE\' | translate }}</th>\n                                <th md-column md-order-by="userDisposition">{{ \'VOICE.DISPOSITION\' | translate }}</th>\n                                <th md-column width="10px"></th>\n                            </tr>\n                        </thead>\n                        <tbody md-body>\n                            <tr md-row ng-hide="vm.voiceRecordings.rows.length">\n                                <td md-cell colspan="12">\n                                    <div layout="row" layout-align="center center">\n                                        <span translate="VOICE.NO_AVAILABLE_INFO">No Available Info</span>\n                                    </div>\n                                </td>\n                            </tr>\n                            <tr md-row md-select="voiceRecording" md-select-id="id" ng-repeat="voiceRecording in vm.voiceRecordings.rows">\n                                <td md-cell ng-if="voiceRecording.userpic"><img class="avatar" alt="{{voiceRecording.name}}" ng-src="api/users/{{voiceRecording.id}}/avatar" /></td>\n                                <td md-cell ng-if="!voiceRecording.userpic && (vm.table == \'users\' || vm.table == \'agents\')"><img class="avatar" alt="{{voiceRecording.name}}" ng-src="assets/images/avatars/profile.png" /></td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="type ">{{voiceRecording.type}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="uniqueid ">{{voiceRecording.uniqueid}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="calleridnum ">{{voiceRecording.calleridnum}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="exten ">{{voiceRecording.exten}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="connectedlinenum ">{{voiceRecording.connectedlinenum}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="queue ">{{voiceRecording.queue}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="membername ">{{voiceRecording.membername}}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="rating ">\n                                    <md-icon md-font-icon="icon-star" style="color:red" ng-show="voiceRecording.rating" ng-repeat="rating in [1,2,3,4,5] | limitTo:voiceRecording.rating"></md-icon><span ng-hide="voiceRecording.rating" translate="VOICE.NO_RATING">No rating</span>\n                                </td>\n\n                                <td md-cell class="audio " ng-switch="voiceRecording.format">\n                                    \x3c!-- audio recording directive --\x3e\n                                    <ms-recording ng-switch-when=".wav" id="voiceRecording.id"></ms-recording>\n                                    \x3c!-- / audio recording directive --\x3e\n                                    <span ng-switch-when=".gsm|.WAV" ng-switch-when-separator="|">\n                                        <em>{{ \'VOICE.CANT_PLAY_GSM_AUDIO_FILES\' | translate }}</em>\n                                    </span>\n                                </td>\n\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="createdAt ">{{voiceRecording.createdAt | date:\'medium\' }}</td>\n                                <td ng-click="vm.createOrEditVoiceRecording($event, voiceRecording)" md-cell class="userDisposition ">{{voiceRecording.userDisposition}}</td>\n\n\n                                <td md-cell class="actions">\n\n                                    <md-menu>\n\n                                        <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="VOICE.MORE" ng-click="$mdOpenMenu($event)">\n                                            <md-icon md-font-icon="icon-dots-vertical"></md-icon>\n                                        </md-button>\n\n                                        <md-menu-content width="3">\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item>\n\n                                                <md-button ng-click="vm.downloadfile2(voiceRecording, $event  , \'voice/recordings\'   )" translate="VOICE.DOWNLOAD_VOICERECORDING">\n                                                    Download VoiceRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                            \x3c!-- SUBACTIONS --\x3e\n\n\n                                            \x3c!-- ACTIONS --\x3e\n\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n\n                                                <md-button ng-click="vm.deleteconfirm(voiceRecording, $event    )" translate="VOICE.DELETE_VOICERECORDING">\n                                                    Delete VoiceRecording\n                                                </md-button>\n\n                                            </md-menu-item>\n\n\n\n                                        </md-menu-content>\n\n                                    </md-menu>\n                                </td>\n\n\n                            </tr>\n                        </tbody>\n                    </table>\n                </md-table-container>\n\n                <md-table-pagination md-label="{page: \'{{\'VOICE.PAGE\' | translate}}:\', rowsPerPage: \'{{\'VOICE.ROWSPERPAGE\' | translate}}:\', of: \'{{\'VOICE.OF\' | translate}}\'}" md-limit="vm.query.limit" md-limit-options="[10, 15, 20, 50, 100, 250]" md-page="vm.query.page" md-total="{{vm.voiceRecordings.count}}" md-on-paginate="vm.getVoiceRecordings" md-page-select></md-table-pagination>\n            </md-card>\n            \x3c!-- / VOICERECORDING TABLE --\x3e\n            \x3c!-- NO RESULTS --\x3e\n\n            \x3c!-- / NO RESULTS --\x3e\n        </div>\n        \x3c!-- / MAIN --\x3e\n\n    </div>\n    \x3c!-- / CONTENT --\x3e\n\n    \x3c!-- NO ADD BUTTON BUTTON --\x3e\n</div>'),e.put("app/navigation/layouts/horizontal-navigation/navigation.html",'<div layout="row" layout-align="start center">\n    <ms-navigation-horizontal></ms-navigation-horizontal>\n</div>'),e.put("app/navigation/layouts/vertical-navigation-fullwidth-toolbar-2/navigation.html",'<ms-navigation class="scrollable" folded="vm.folded" ms-scroll="vm.msScrollOptions"></ms-navigation>'),e.put("app/navigation/layouts/vertical-navigation/navigation.html",'<md-toolbar class="navigation-header md-whiteframe-1dp" layout="row" layout-align="space-between center">\n    <div class="logo" layout="row" layout-align="start center">\n        <span class="logo-image"><img src="/api/settings/1/logo" alt="logo" /></span>\n        \x3c!-- <span class="logo-image"><img src="assets/images/logos/whisker_32x32.png" alt="motion_whisker_32x32" /></span> --\x3e\n        <span class="logo-text text-truncate">{{vm.getLogo() | uppercase}}</span>\n    </div>\n    <md-icon class="fold-toggle s18" md-font-icon="icon-backburger" hide show-gt-sm ng-click="vm.toggleMsNavigationFolded()"></md-icon>\n</md-toolbar>\n\n<ms-navigation class="scrollable" folded="vm.folded" ms-scroll="vm.msScrollOptions"></ms-navigation>'),e.put("app/quick-panel/quick-panel.html",'<md-content>\n    <md-tabs md-no-pagination md-swipe-content md-stretch-tabs="always">\n        <md-tab>\n            <md-tab-label>\n                <span translate="QUICKPANEL.TODAY">TODAY</span>\n            </md-tab-label>\n            <md-tab-body>\n                <md-content class="today-tab scrollable" ms-scroll ng-include="\'app/quick-panel/tabs/today/today-tab.html\'"></md-content>\n            </md-tab-body>\n        </md-tab>\n        <md-tab ng-if="vm.currentUser.allowmessenger || vm.currentUser.role !== \'agent\'" ng-include="\'app/quick-panel/tabs/chat/chat-tab.html\'" ng-controller="ChatInternalController as vm_ct" ng-init="vm_ct.init(vm.license)" md-on-deselect="vm_ct.user = undefined">\n            <md-tab-label>\n                <div ng-if="vm.unreadTotalMessages" class="md-accent-bg unread-message-count-chat">{{vm.unreadTotalMessages}}</div>\n                <span>MESSENGER</span>\n            </md-tab-label>\n            <md-tab-body>\n                <md-content class="chat-tab scrollable" ms-scroll ng-include="\'app/quick-panel/tabs/chat/chat-tab.html\'"></md-content>\n            </md-tab-body>\n        </md-tab>\n        <md-tab ng-if="vm.currentUser.allowmessenger || vm.currentUser.role !== \'agent\'" ng-include="\'app/quick-panel/tabs/groups/group-tab.html\'" ng-controller="ChatGroupController as vm_cg" ng-init="vm_cg.init(vm.license)" md-on-deselect="vm_cg.group = undefined">\n            <md-tab-label>\n                <div ng-if="vm.unreadTotalGroupMessages" class="md-accent-bg unread-message-count-chat">{{vm.unreadTotalGroupMessages}}</div>\n                <span translate="QUICKPANEL.GROUPS">GROUPS</span>\n            </md-tab-label>\n            <md-tab-body>\n                <md-content class="group-tab scrollable" ms-scroll ng-include="\'app/quick-panel/tabs/groups/group-tab.html\'"></md-content>\n            </md-tab-body>\n        </md-tab>\n    </md-tabs>\n</md-content>'),e.put("app/quick-panel/tabs/activity/activity-tab.html",'<md-list class="friends">\n    <md-subheader class="md-no-sticky">\n        <span translate="QUICKPANEL.FRIENDS">Friends</span>\n    </md-subheader>\n\n    <md-list-item class="friend md-3-line" ng-repeat="friend in vm.activities.friends">\n        <img ng-src="{{friend.avatar}}" class="md-avatar" alt="{{friend.name}}" />\n\n        <div class="status {{friend.status}}"></div>\n\n        <div ng-if="contact.unread" class="md-accent-bg unread-message-count">{{contact.unread}}</div>\n\n        <div class="md-list-item-text">\n            <h3 class="message">{{friend.message}}</h3>\n            <p class="time">{{friend.time}}</p>\n        </div>\n    </md-list-item>\n</md-list>\n\n<md-divider></md-divider>\n\n<md-list class="servers">\n    <md-subheader class="md-no-sticky">\n        <span translate="QUICKPANEL.APP_SERVERS">Application Servers</span>\n    </md-subheader>\n\n    <md-list-item class="server md-3-line" ng-repeat="server in vm.activities.servers">\n        <md-icon md-font-icon="icon-checkbox-blank-circle" class="s16 status" ng-class="server.status"></md-icon>\n\n        <div class="md-list-item-text">\n            <h3>{{server.location}}</h3>\n            <p>{{server.detail}}</p>\n        </div>\n    </md-list-item>\n</md-list>\n\n<md-divider></md-divider>\n\n<md-list class="stats">\n    <md-subheader class="md-no-sticky">\n        <span translate="QUICKPANEL.USER_STATS">User Stats</span>\n    </md-subheader>\n\n    <md-list-item class="stat md-2-line" ng-repeat="stat in vm.activities.stats">\n        <div class="md-list-item-text">\n            <span>{{stat.title}} ({{stat.current}} / {{stat.total}})</span>\n            <md-progress-linear ng-class="stat.status" md-mode="determinate" value="{{stat.percent}}"></md-progress-linear>\n        </div>\n    </md-list-item>\n</md-list>'),e.put("app/quick-panel/tabs/chat/chat-tab.html",'<div class="main animate-slide-left" ng-hide="vm_ct.user">\n    <md-subheader class="md-no-sticky">\n        <div class="search" layout="row" layout-align="space-between center">\n            <md-icon md-font-icon="icon-magnify" class="icon search-icon"></md-icon>\n            <input class="search-input" ng-model="vm_ct.search.$" type="text" placeholder="Search by fullname.." translate translate-attr-placeholder="QUICKPANEL.SEARCH" flex>\n            <md-select ng-model="vm_ct.search.online" class="height-50 no-padding no-margin" aria-label="Chat Tab Search" <md-option ng-value="undefined">All</md-option>\n                <md-option ng-value="true">\n                    <md-icon md-font-icon="icon-checkbox-blank-circle" class="s12 green-fg"></md-icon>Online\n                </md-option>\n                <md-option ng-value="false">\n                    <md-icon md-font-icon="icon-checkbox-blank-circle" class="s12 red-fg"></md-icon>Offline\n                </md-option>\n            </md-select>\n        </div>\n    </md-subheader>\n    \x3c!-- <select ng-model="vm_ct.filterOnline" class="height-50 no-padding no-margin">\n            <option ng-value="undefined">All</option>\n            <option ng-value="true"><md-icon md-font-icon="icon-checkbox-blank-circle" class="s12 green-fg"></md-icon>Online</option>\n            <option ng-value="false"><md-icon md-font-icon="icon-checkbox-blank-circle" class="s12 red-fg"></md-icon>Offline</option>\n        </select> --\x3e\n    <md-divider></md-divider>\n    <md-list class="recent">\n        <md-list-item class="contact md-3-line" ng-if="user.id != vm_ct.currentUser.id" ng-repeat="user in vm_ct.users.rows | orderBy: \'-lastMessageAt\' | filter:vm_ct.search" ng-click="vm_ct.toggleChat(user)">\n            <md-divider></md-divider>\n            <img ng-src="{{user.userpic ? \'api/users/\' + user.id + \'/avatar\' : \'assets/images/avatars/profile.png\'}}" class="md-avatar" alt="{{user.fullname}}" />\n            <div class="status" ng-class="{true: \'online\', false: \'offline\'}[user.online]"></div>\n            <div ng-if="vm_ct.unreadMessage[user.id]" class="md-accent-bg unread-message-count">\n                {{vm_ct.unreadMessage[user.id]}}</div>\n            <div class="md-list-item-text">\n                <div layout="row">\n                    <h3>{{user.fullname}}</h3>\n                    <md-icon ng-if="!user.allowmessenger && user.role === \'agent\'" class="s16 margin-left-5" ng-style="{\'color\': \'red\' }" md-font-icon="icon-block-helper"></md-icon>\n                </div>\n                <p>{{user.name}} &#60;{{user.internal}}&#62;</p>\n                <div layout="row" layout-align="start center">\n                    <md-icon ng-if="!user.lastMessage.read && user.lastMessage.FromId === vm_ct.currentUser.id" class="s16 no-margin" md-font-icon="icon-check"></md-icon>\n                    <md-icon ng-if="user.lastMessage.read && user.lastMessage.FromId === vm_ct.currentUser.id" class="s16 no-margin" md-font-icon="icon-check-all md-accent"></md-icon>\n                    <p>{{user.lastMessage.body | limitTo:20 }}{{user.lastMessage.body.length > 20 ? \'...\' : \'\' }}</p>\n                    <span flex></span>\n                    <p class="last-message" ng-if="user.lastMessageAt != vm_ct.standardDate">\n                        {{user.lastMessageAt | formatdate}}</p>\n                </div>\n            </div>\n        </md-list-item>\n    </md-list>\n</div>\n\n<div class="chat animate-slide-right" ng-show="vm_ct.user" layout="column">\n    <md-toolbar class="md-accent">\n        <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n\n            <div layout="row" layout-align="start center">\n                <md-button class="md-icon-button" ng-click="vm_ct.toggleChat()" aria-label="Back" translate translate-attr-aria-label="QUICKPANEL.BACK">\n                    <md-icon md-font-icon="icon-keyboard-backspace"></md-icon>\n                </md-button>\n                <h4>\n                    <span>{{vm_ct.user.fullname}}</span>\n                </h4>\n            </div>\n\n            <div layout="row" layout-align="end center">\n                <md-button ng-if="vm_ct.license.webrtc && vm_ct.currentUser.role === \'agent\' && vm_ct.currentUser.showWebBar === 2 && vm_ct.user.role === \'agent\'" class="md-icon-button" aria-label="Call" translate translate-attr-aria-label="QUICKPANEL.CALL" ng-click="vm_ct.webcall(vm_ct.user.name)">\n                    <md-icon md-font-icon="icon-phone"></md-icon>\n                </md-button>\n                <md-menu ng-if="vm_ct.currentUser.phoneBarRemoteControl && vm_ct.currentUser.role === \'agent\' && vm_ct.currentUser.showWebBar === 0 && vm_ct.user.role === \'agent\'">\n                    <md-button class="md-icon-button" aria-label="Call" translate translate-attr-aria-label="QUICKPANEL.CALL" ng-click="$mdOpenMenu($event)">\n                        <md-icon md-font-icon="icon-phone"></md-icon>\n                    </md-button>\n\n                    <md-menu-content width="3">\n                        <md-menu-item ng-disabled="!vm_ct.currentUser.phoneBarRemoteControl">\n                            <md-button ng-click="vm_ct.call(vm_ct.user.name)">\n                                {{\'DASHBOARDS.CALL_NUMBER\' | translate}} ({{vm_ct.user.name}})\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item ng-disabled="!vm_ct.currentUser.phoneBarRemoteControl">\n                            <md-button ng-click="vm_ct.transfer(vm_ct.user.name)">\n                                {{\'DASHBOARDS.TRANSFER_NUMBER\' | translate}} ({{vm_ct.user.name}})\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n        </div>\n\n    </md-toolbar>\n    <md-content flex layout-paddings ms-scroll id="chat-dialog">\n        <div layout="row" ng-repeat="message in vm_ct.user.messages.rows" class="md-padding message-row" ng-class="message.FromId === vm_ct.currentUser.id ? \'user\' : \'contact\'">\n            <img ng-if="message.FromId === vm_ct.user.id" ng-src="{{vm_ct.user.userpic ? \'api/users/\' + vm_ct.user.id + \'/avatar\' : \'assets/images/avatars/profile.png\'}}" class="avatar" alt="{{vm_ct.user.fullname}}" />\n            <img ng-if="message.FromId === vm_ct.currentUser.id" class="avatar" ng-src="{{vm_ct.currentUser.userpic ? \'api/users/\' + vm_ct.currentUser.id + \'/avatar\' : \'assets/images/avatars/profile.png\'}}">\n            <div class="bubble" flex>\n                <span class="message" ng-bind-html="message.body | embed:{linkTarget:\'_blank\',emoji:false,fontSmiley:false}"></span>\n                <div layout="row" layout-align="end center">\n                    <span class="time secondary-text">{{message.createdAt | formatdate }}</span>\n                    <md-icon ng-if="!message.read && message.FromId === vm_ct.currentUser.id" class="s16 margin-5" md-font-icon="icon-check"></md-icon>\n                    <md-icon ng-if="message.read && message.FromId === vm_ct.currentUser.id" class="s16 margin-5" md-font-icon="icon-check-all md-accent"></md-icon>\n                </div>\n            </div>\n        </div>\n    </md-content>\n\n    <form ng-submit="vm_ct.reply()" layout="row" class="reply" layout-align="start center">\n        <textarea ng-keyup="$event.keyCode == 13 && !vm_ct.disabled? vm_ct.reply() : null" flex ng-model="vm_ct.replyMessage" placeholder="Type and hit enter to send message" translate translate-attr-placeholder="QUICKPANEL.REPLY_PLACEHOLDER" autofocus></textarea>\n\n        <md-button ng-disable="vm_ct.disabled" class="md-fab md-mini" type="submit" aria-label="Send message" translate translate-attr-aria-label="QUICKPANEL.SEND_MESSAGE">\n            <md-icon md-font-icon="icon-send"></md-icon>\n        </md-button>\n    </form>\n</div>'),e.put("app/quick-panel/tabs/groups/create/dialog.html",'<md-dialog class="group-dialog" aria-label="New ChatGroup">\n    <form name="groupForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog(null)">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            \x3c!--START Error--\x3e\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            \x3c!--END Error--\x3e\n\n            \x3c!--START NAME--\x3e\n            <md-input-container class="md-block">\n                <label translate="QUICKPANEL.NAME">Name</label>\n                <input type="text" name="name" ng-model="vm.group.name" required autofocus>\n                <div ng-messages="groupForm[\'name\'].$error" ng-show="groupForm[\'name\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="QUICKPANEL.ERRORS.NAME_REQUIRED">Name field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="QUICKPANEL.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: \'/^[A-Za-z0-9\\.\\_]+$/i\' }">Name must be valid pattern </span>\n                    </div>\n                </div>\n            </md-input-container>\n            \x3c!--END NAME--\x3e\n\n            \x3c!--START Members--\x3e\n            <md-input-container class="md-block">\n                <label translate="QUICKPANEL.MEMBERS">Members</label>\n                <md-contact-chips ng-model="vm.group.members" md-contacts="vm.querySearch($query)" md-contact-name="name" md-contact-image="image" md-require-match="true" md-highlight-flags="i" placeholder="{{\'QUICKPANEL.MEMBERS\' | translate}}">\n                </md-contact-chips>\n                <div ng-messages="groupForm[\'strategy\'].$error" ng-show="groupForm[\'strategy\'].$touched" role="alert">\n                    <div ng-message="required">\n                        <span translate="QUICKPANEL.ERRORS.MEMBERS_REQUIRED">Members field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            \x3c!--END Members--\x3e\n\n            \x3c!--START Writing--\x3e\n            <md-input-container class="md-block">\n                <md-switch ng-model="vm.group.write" aria-label="Write">\n                    {{\'QUICKPANEL.ENABLE_WRITING\' | translate}}\n                </md-switch>\n            </md-input-container>\n            \x3c!--END Writing--\x3e\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-if="vm.newChatGroup" ng-click="vm.saveChatGroup()" class="send-button md-accent md-raised" ng-disabled="groupForm.$invalid || groupForm.$pristine || (vm.group.members.length < 1)" aria-label="SAVE" translate="QUICKPANEL.SAVE" translate-attr-aria-label="QUICKPANEL.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/quick-panel/tabs/groups/group-tab.html",'<div class="main animate-slide-left" ng-if="!vm_cg.group">\n    <md-subheader>\n        <div layout="row">\n            \x3c!-- START Search --\x3e\n            <div class="search" layout="row" layout-align="start center" flex>\n                <md-icon md-font-icon="icon-magnify" class="icon search-icon"></md-icon>\n                <input ng-model="vm_cg.search" type="text" translate translate-attr-placeholder="QUICKPANEL.SEARCH" flex>\n            </div>\n            \x3c!-- END Search --\x3e\n\n            \x3c!-- START New Group --\x3e\n            <md-button ng-if="vm_cg.currentUser.role !== \'agent\'" class="md-icon-button" aria-label="New" ng-click="vm_cg.addGroup(null, $event)">\n                <md-icon md-font-icon="icon-account-multiple-plus" class="icon"></md-icon>\n            </md-button>\n            \x3c!-- END New Group --\x3e\n        </div>\n    </md-subheader>\n\n    <md-divider></md-divider>\n\n    \x3c!-- START Groups --\x3e\n    <md-list class="recent no-padding">\n        \x3c!-- START Group --\x3e\n        <md-list-item class="contact" ng-repeat="group in vm_cg.groupsToArray() | filter:vm_cg.search" ng-click="vm_cg.toggleChat(group)">\n            <img src="assets/images/avatars/group.png" class="md-avatar" alt="{{group.name}}" />\n            <div ng-if="group.unreadGroupMessages" class="md-accent-bg unread-message-count">{{group.unreadGroupMessages}}</div>\n            <div class="md-list-item-text">\n                <div layout="row">\n                    <h3>{{group.name}}</h3>\n                </div>\n            </div>\n\n            <md-button ng-if="vm_cg.currentUser.role !== \'agent\'" class="md-secondary md-icon-button" aria-label="Remove" ng-click="vm_cg.deleteGroup(group, $event)">\n                <md-icon md-font-icon="icon-delete" class="icon s18"></md-icon>\n            </md-button>\n\n            <md-divider ng-if="!$last"></md-divider>\n        </md-list-item>\n        <md-list-item>\n            <div ng-if="!vm_cg.groupsToArray().length" layout="row" layout-align="center center" flex>\n                <span>{{\'QUICKPANEL.NO_AVAILABLE_GROUPS\' | translate}}</span>\n            </div>\n        </md-list-item>\n        \x3c!-- END Group --\x3e\n    </md-list>\n    \x3c!-- END Groups --\x3e\n</div>\n\n<div class="chat animate-slide-right" ng-if="vm_cg.group" layout="column">\n    <md-toolbar class="md-accent">\n        <div class="md-toolbar-tools " layout="row" layout-align="space-between center">\n            <md-button class="md-icon-button" ng-click="vm_cg.back()" aria-label="Back" translate translate-attr-aria-label="QUICKPANEL.BACK" flex="15">\n                <md-icon md-font-icon="icon-keyboard-backspace"></md-icon>\n            </md-button>\n            <h4 flex layout-align="start center" style="max-height: 100%; overflow-y:auto;">\n                <span translate="QUICKPANEL.YOU" translate-values=\'{participants: vm_cg.participants}\'></span>\n            </h4>\n\n            <div layout="row" layout-align="end center">\n                <md-button ng-if="vm_cg.license.webrtc && vm_cg.currentUser.role === \'agent\' && vm_cg.currentUser.showWebBar === 2 && vm_cg.user.role === \'agent\' && vm_cg.user.showWebBar === 2" class="md-icon-button" aria-label="Call" translate translate-attr-aria-label="QUICKPANEL.CALL" ng-click="vm_cg.webcall(vm_cg.user.name)">\n                    <md-icon md-font-icon="icon-phone"></md-icon>\n                </md-button>\n            </div>\n        </div>\n\n    </md-toolbar>\n    <md-content flex layout-paddings ms-scroll id="chat-group-dialog">\n        <div layout="row" ng-repeat="message in vm_cg.group.messages" class="message-row" ng-class="message.FromId === vm_cg.currentUser.id ? \'user\' : \'contact\'">\n            <img ng-if="message.FromId !== vm_cg.currentUser.id" ng-src="{{\'api/users/\' + message.FromId + \'/avatar\'}}" class="avatar" alt="{{vm_cg.user.fullname}}" />\n            <img ng-if="message.FromId === vm_cg.currentUser.id" class="avatar" ng-src="{{vm_cg.currentUser.userpic ? \'api/users/\' + vm_cg.currentUser.id + \'/avatar\' : \'assets/images/avatars/profile.png\'}}">\n            <div class="bubble" flex>\n                <div ng-if="message.FromId !== vm_cg.currentUser.id">\n                    <span style="font-size: 12px;">{{vm_cg.group.membersByKeys[message.FromId].fullname}}</span>\n                </div>\n                <span class="message" ng-bind-html="message.body | embed:{linkTarget:\'_blank\',emoji:false,fontSmiley:false}"></span>\n                <div layout="row" layout-align="end center">\n                    <span class="time secondary-text" style="margin-top: 0px;">{{message.createdAt | formatdate }}</span>\n                    <md-icon ng-if="message.FromId === vm_cg.currentUser.id" class="s16 margin-5" style="cursor: pointer;" md-font-icon="icon-information-outline" ng-click="vm_cg.showMessageInfo($event, message)"></md-icon>\n                </div>\n            </div>\n        </div>\n    </md-content>\n\n    <form ng-if="(vm_cg.currentUser.role !== \'agent\') || vm_cg.group.write" ng-submit="vm_cg.reply()" layout="row" class="reply" layout-align="start center">\n        <textarea ng-keyup="$event.keyCode == 13 ? vm_cg.reply() : null" flex ng-model="vm_cg.replyMessage" placeholder="Type and hit enter to send message" translate translate-attr-placeholder="QUICKPANEL.REPLY_PLACEHOLDER" autofocus></textarea>\n\n        <md-button class="md-fab md-mini" type="submit" aria-label="Send message" translate translate-attr-aria-label="QUICKPANEL.SEND_MESSAGE">\n            <md-icon md-font-icon="icon-send"></md-icon>\n        </md-button>\n    </form>\n</div>'),e.put("app/quick-panel/tabs/groups/info/dialog.html",'<md-dialog class="group-dialog" aria-label="New ChatGroup">\n    <form name="groupForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">{{ vm.title | translate }}</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog(null)">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div ng-if="vm.data.messages[$index].FromId !== vm.data.messages[$index].ToId" ng-repeat="user in vm.data.users" layout-margin>\n                <div layout="row">\n                    <div layout="row" layout-align="start center">\n                        <img ng-src="{{user.userpic ? \'api/users/\' + user.id + \'/avatar\' : \'assets/images/avatars/profile.png\'}}" class="avatar" alt="{{user.fullname}}" />\n                        <span>{{user.fullname}}</span>\n                    </div>\n                    <div layout="row" layout-align="end center" flex>\n                        <md-icon class="s16 margin-5" md-font-icon="{{vm.data.messages[$index].read ? \'icon-check-all md-accent\' : \'icon-check\'}}"></md-icon>\n                        <span class="time secondary-text">{{vm.data.messages[$index].updatedAt | formatdate }}</span>\n                    </div>\n                </div>\n                <div>\n                    <md-divider ng-if="!$last"></md-divider>\n                </div>\n            </div>\n        </md-dialog-content>\n    </form>\n</md-dialog>'),e.put("app/quick-panel/tabs/today/today-tab.html",'<md-list class="date">\n    <md-subheader class="md-no-sticky"><span translate="QUICKPANEL.TODAY">Today</span></md-subheader>\n    <md-list-item class="md-display-1 md-2-line">\n        <div class="secondary-text">\n            <div translate="QUICKPANEL.{{ (vm.date | date:\'EEEE\').toUpperCase() }}"></div>\n            <div layout="row" layout-align="start start">\n                <span> {{vm.date | date:\'d\'}}</span>\n                <span class="md-subhead">th</span>\n                <span translate="QUICKPANEL.{{ (vm.date | date:\'MMMM\').toUpperCase() }}"></span>\n            </div>\n        </div>\n    </md-list-item>\n</md-list>\n\n\x3c!-- <md-divider></md-divider>\n\n<md-list>\n    <md-subheader class="md-no-sticky"><span translate="QUICKPANEL.EVENTS">Events</span></md-subheader>\n\n    <md-list-item class="md-2-line" ng-repeat="event in vm.events" ng-click="dummyFunction()">\n        <div class="md-list-item-text">\n            <h3>{{event.title}}</h3>\n\n            <p>{{event.detail}}</p>\n        </div>\n    </md-list-item>\n</md-list>\n\n<md-divider></md-divider>\n\n<md-list>\n    <md-subheader class="md-no-sticky"><span translate="QUICKPANEL.NOTES">Notes</span></md-subheader>\n    <md-list-item class="md-2-line" ng-repeat="note in vm.notes" ng-click="dummyFunction()">\n        <div class="md-list-item-text">\n            <h3>{{note.title}}</h3>\n\n            <p>{{note.detail}}</p>\n        </div>\n    </md-list-item>\n</md-list>\n\n<md-divider></md-divider>\n\n<md-list>\n    <md-subheader class="md-no-sticky"><span translate="QUICKPANEL.QUICK_SETTINGS">Quick Settings</span></md-subheader>\n\n    <md-list-item>\n        <h3 translate="QUICKPANEL.NOTIFICATIONS">Notifications</h3>\n        <md-switch class="md-secondary" ng-model="vm.settings.notify" aria-label="Notifications" translate\n                   translate-attr-aria-label="QUICKPANEL.NOTIFICATIONS"></md-switch>\n    </md-list-item>\n\n    <md-list-item>\n        <h3 translate="QUICKPANEL.CLOUD_SYNC">Cloud Sync</h3>\n        <md-switch class="md-secondary" ng-model="vm.settings.cloud" aria-label="Cloud Sync" translate\n                   translate-attr-aria-label="QUICKPANEL.CLOUD_SYNC"></md-switch>\n    </md-list-item>\n\n    <md-list-item>\n        <h3 translate="QUICKPANEL.RETRO_THRUSTERS">Retro Thrusters</h3>\n        <md-switch class="md-secondary md-warn" ng-model="vm.settings.retro" aria-label="Retro Thrusters" translate\n                   translate-attr-aria-label="QUICKPANEL.RETRO_THRUSTERS"></md-switch>\n    </md-list-item>\n</md-list> --\x3e'),e.put("app/reset/reset.html",'<div id="reset-password" class="flex-scrollable" layout="column" ng-init="vm.onInit()" ms-scroll>\n    <div id="reset-password-form-wrapper" layout="column" layout-align="center center">\n        <div id="reset-password-form" class="md-whiteframe-8dp">\n\n            <img src="/api/settings/1/logo_login" alt="logo_login" class="logo_login" />\n\n            <div class="title" translate="RESETPASSWORD.TITLE">Reset your password</div>\n\n            <form name="resetPasswordForm" novalidate>\n\n                <md-input-container class="md-block" md-no-float>\n                    <input type="password" name="password" ng-model="vm.form.password" ng-pattern="vm.passwordPattern" placeholder="Password" translate translate-attr-placeholder="RESETPASSWORD.PASSWORD" required>\n                    <div ng-messages="resetPasswordForm.password.$error" role="alert">\n                        <div ng-message="required">\n                            <span translate="RESETPASSWORD.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                        </div>\n                        <div ng-message="pattern">\n                            <span translate="RESETPASSWORD.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                        </div>\n                    </div>\n                </md-input-container>\n\n                <md-input-container class="md-block" md-no-float>\n                    <input type="password" name="passwordConfirm" ng-model="vm.form.passwordConfirm" placeholder="Password (Confirm)" match-password="password" translate translate-attr-placeholder="RESETPASSWORD.PASSWORD_CONFIRM">\n                    <div ng-messages="resetPasswordForm.passwordConfirm.$error" role="alert">\n                        <div ng-message="passwordMatch">\n                            <span translate="TOOLBAR.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                        </div>\n                    </div>\n                </md-input-container>\n\n                <md-button type="button" ng-click="vm.resetPassword()" class="md-raised md-accent submit-button" aria-label="UPDATE MY PASSWORD" ng-disabled="resetPasswordForm.$invalid || resetPasswordForm.$pristine" translate="RESETPASSWORD.UPDATE_PASSWORD" translate-attr-aria-label="RESETPASSWORD.UPDATE_PASSWORD">\n                    RESET MY PASSWORD\n                </md-button>\n            </form>\n        </div>\n    </div>\n</div>'),e.put("app/toolbar/changepassword/changepassword.html",'<md-dialog class="user-dialog" aria-label="{{vm.name}}">\n    <form name="changePasswordForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-accent md-hue-2">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span ng-if="vm.reset" class="title" translate="TOOLBAR.RESETPASSWORD">Reset Password</span>\n                <span ng-if="!vm.reset" class="title" translate="TOOLBAR.CHANGEPASSWORD">Change Password</span>\n                <md-button ng-if="!vm.reset" class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n            <md-input-container class="md-block">\n                <label translate="TOOLBAR.OLD_PASSWORD">Old Password</label>\n                <input type="password" name="oldPassword" ng-model="vm.oldPassword" placeholder="Password" translate translate-attr-placeholder="TOOLBAR.OLD_PASSWORD" required>\n                <div ng-messages="changePasswordForm.oldPassword.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLBAR.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLBAR.NEW_PASSWORD">New Password</label>\n                <input type="password" name="password" ng-model="vm.password" placeholder="Password" ng-pattern="vm.passwordPattern" translate translate-attr-placeholder="TOOLBAR.NEW_PASSWORD" required>\n                <div ng-messages="changePasswordForm.password.$error" role="alert">\n                    <div ng-message="required">\n                        <span translate="TOOLBAR.ERRORS.PASSWORD_REQUIRED">Password field is required</span>\n                    </div>\n                    <div ng-message="pattern">\n                        <span translate="TOOLBAR.ERRORS.SECURE_PASSWORD_PATTERN">Must contain at least 8 characters, with a minimum of 1 lowercase letter, 1 uppercase letter, 1 numeric character and 1 special character ~!?*@#$%^&-_=+[{]}.</span>\n                    </div>\n                    <div ng-message="oldPasswordMatch">\n                        <span translate="TOOLBAR.ERRORS.PASSWORD_OLDPASSWORD_MATCH">New password must be different from old one</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <md-input-container class="md-block">\n                <label translate="TOOLBAR.CONFIRM_PASSWORD">Confirm Password</label>\n                <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword">\n                <div ng-messages="changePasswordForm.confirmPassword.$error" role="alert" multiple>\n                    <div ng-message="required">\n                        <span translate="TOOLBAR.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>\n                    </div>\n                    <div ng-message="passwordMatch">\n                        <span translate="TOOLBAR.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>\n                    </div>\n                </div>\n            </md-input-container>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center">\n            <div layout="row" layout-align="start center">\n                <md-button type="submit" ng-click="vm.savePassword()" class="send-button md-accent md-raised" ng-disabled="changePasswordForm.$invalid || changePasswordForm.$pristine" aria-label="SAVE" translate="TOOLBAR.SAVE" translate-attr-aria-label="TOOLBAR.SAVE">\n                    SAVE\n                </md-button>\n            </div>\n        </md-dialog-actions>\n    </form>\n</md-dialog>'),e.put("app/toolbar/layouts/vertical-navigation/toolbar.html",'<div layout="row" layout-align="start center">\n    <div layout="row" layout-align="start center" flex>\n        <md-button id="navigation-toggle" class="md-icon-button" ng-click="vm.toggleSidenav(\'navigation\')" hide-gt-sm aria-label="Toggle navigation" translate translate-attr-aria-label="TOOLBAR.TOGGLE_NAVIGATION">\n            <md-icon md-font-icon="icon-menu" class="icon"></md-icon>\n        </md-button>\n\n        <ms-shortcuts ng-if="!vm.isAgent()"></ms-shortcuts>\n\n        <div class="toolbar-separator"></div>\n\n        <div ng-if="vm.license.demo" class="blink md-padding">\n            <span class="md-warn-fg" translate="TOOLBAR.TRIAL_VERSION">Trial Version</span>\n        </div>\n\n        <div ng-if="vm.isAgent()" class="logo" layout-padding-left-8 layout="row" layout-align="start center">\n            <span class="logo-image"><img src="/api/settings/1/logo" alt="logo" /></span>\n            <span ng-show="vm.isAgent() && (vm.user.showWebBar != 2)" class="logo-text text-truncate">{{ vm.getLogo() | uppercase }}</span>\n        </div>\n\n        \x3c!-- phonebar directive WebRtc type--\x3e\n        <ms-phonebar class="ms-phonebar" ng-if="vm.isAgent() && (vm.user.showWebBar == 2)" conf="vm.conf" flex></ms-phonebar>\n        \x3c!-- phonebar directive --\x3e\n    </div>\n\n    <div layout="row" layout-align="start center">\n\n        <md-progress-circular id="toolbar-progress" ng-if="$root.loadingProgress" class="md-accent" md-diameter="32"></md-progress-circular>\n\n        \x3c!-- Pause Management --\x3e\n        <div ng-if="vm.isAgent() && (vm.user.showWebBar != 0)" layout="row" layout-align="end center">\n            <div class="toolbar-separator"></div>\n\n            <div class="border brad-5" layout="row" layout-align="center center" layout-margin>\n                <md-button ng-if="vm.user.voicePause" class="md-icon-button no-margin" ng-click="vm.unpause()">\n                    <md-icon md-font-icon="icon-play-circle-outline" class="icon s24"></md-icon>\n                    <md-tooltip md-direction="bottom">{{\'TOOLBAR.RESUME\' | translate}}</md-tooltip>\n                </md-button>\n\n                <md-button ng-disabled="vm.user.voicePause && \'DEFAULT PAUSE\' === vm.user.pauseType" class="md-icon-button no-margin" ng-click="vm.pause()">\n                    <md-icon md-font-icon="icon-pause-circle-outline" class="icon s24"></md-icon>\n                    <md-tooltip md-direction="bottom">{{\'TOOLBAR.PAUSE\' | translate}}</md-tooltip>\n                </md-button>\n\n                <md-menu>\n                    <md-button aria-label="Pauses" class="md-icon-button no-margin" ng-click="$mdOpenMenu($event)">\n                        <md-icon md-menu-origin md-font-icon="icon-dots-vertical"></md-icon>\n                    </md-button>\n                    <md-menu-content width="4">\n                        <md-menu-item ng-if="!vm.pauses.length">\n                            <md-button disabled="disabled">\n                                <md-icon md-font-icon="icon-pause-octagon" md-menu-align-target></md-icon>\n                                {{\'TOOLBAR.NO_PAUSES_AVAILABLE\' | translate}}\n                            </md-button>\n                        </md-menu-item>\n                        <md-menu-item ng-repeat="pause in vm.pauses">\n                            <md-button ng-disabled="vm.user.voicePause && pause.name === vm.user.pauseType" ng-click="vm.pause(pause.name)">\n                                <md-icon md-font-icon="icon-pause-circle" md-menu-align-target></md-icon>\n                                {{pause.name}}\n                            </md-button>\n                        </md-menu-item>\n                    </md-menu-content>\n                </md-menu>\n            </div>\n        </div>\n        \x3c!-- Pause Management --\x3e\n\n        <div class="h5 padding-10" ng-if="vm.isAgent() && (vm.user.showWebBar != 0)">\n            <div layout="row" layout-align="space-between center">\n                <timer ng-if="vm.user.lastLoginAt" start-time="vm.user.lastLoginAt">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                <md-tooltip>{{\'TOOLBAR.LOGIN_TIME\' | translate}}</md-tooltip>\n                <md-icon md-font-icon="icon-timelapse" class="icon s16"></md-icon>\n            </div>\n            <div layout="row" layout-align="center center" ng-if="vm.user.voicePause">\n                <timer start-time="vm.user.lastPauseAt">{{ days > 0 ? days + \'d\' : \'\' }} {{hhours}}:{{mminutes}}:{{sseconds}}</timer>\n                <md-tooltip>{{\'TOOLBAR.PAUSE_TIME\' | translate}}</md-tooltip>\n                <md-icon md-font-icon="icon-coffee" class="icon s16"></md-icon>\n            </div>\n            <div ng-if="vm.user.voicePause">\n                <span class="blink red-fg">{{vm.user.pauseType || \'default\' | uppercase}}</span>\n            </div>\n        </div>\n\n        <div class="toolbar-separator" ng-if="vm.isAgent() && (vm.user.showWebBar != 0)"></div>\n\n        <md-menu-bar id="user-menu">\n            <md-menu md-position-mode="left bottom">\n                <md-button class="user-button" ng-click="$mdOpenMenu()" aria-label="User settings" translate translate-attr-aria-label="TOOLBAR.USER_SETTINGS">\n                    <div layout="row" layout-align="space-between center">\n                        <div class="avatar-wrapper">\n                            <img md-menu-align-target class="avatar" src="assets/images/avatars/profile.png" ng-if="!vm.user.userpic">\n                            <img md-menu-align-target class="avatar" ng-src="api/users/{{vm.user.id}}/avatar" ng-if="vm.user.userpic">\n                            <md-icon md-font-icon ng-class="vm.userStatus.icon" ng-style="{\'color\': vm.userStatus.color }" class="icon status s16"></md-icon>\n                        </div>\n                        <div layout="column" layout-align="center center" class="padding-horizontal-5">\n                            <span class="font-size-14 md-subhead">{{vm.user.fullname}}</span>\n                            <span class="font-size-12 md-subhead">{{vm.user.name}} &#60;{{vm.user.internal}}&#62;</span>\n                        </div>\n\n                        <md-icon md-font-icon="icon-chevron-down" class="icon s16" hide-xs></md-icon>\n                    </div>\n                </md-button>\n\n                <md-menu-content width="3">\n                    <md-menu-item ng-if="vm.user.showWebBar == 2 && vm.user.phoneBarEnableSettings" class="md-indent">\n                        <md-icon md-font-icon="icon-cog" class="icon"></md-icon>\n                        <md-button ng-click="vm.openSettings($event)" ng-disabled="!vm.license.webrtc"><span translate="TOOLBAR.SETTINGS">SETTINGS</span></md-button>\n                    </md-menu-item>\n\n                    <md-menu-item class="md-indent">\n                        <md-icon md-font-icon="icon-key-variant" class="icon"></md-icon>\n                        <md-button ng-click="vm.changePassword($event)"><span translate="TOOLBAR.CHANGEPASSWORD">Change Password</span></md-button>\n                    </md-menu-item>\n\n                    <md-menu-divider></md-menu-divider>\n\n                    <md-menu-item class="md-indent">\n                        <md-icon md-font-icon="icon-logout" class="icon"></md-icon>\n                        <md-button ng-click="vm.logout()">Logout</md-button>\n                    </md-menu-item>\n                </md-menu-content>\n            </md-menu>\n        </md-menu-bar>\n\n        <div class="toolbar-separator"></div>\n\n        <md-button ng-if="vm.user.role === \'agent\' && vm.license.dialer" class="preview-button no-margin" ng-disabled="vm.disable" ng-click="vm.preview($event)" aria-label="Language" md-menu-origin md-menu-align-target>\n            <div ng-if="vm.contacts" class="md-accent-bg open-contact-count">{{vm.contacts > 99 ? \'99+\' : vm.contacts}}</div>\n            <md-icon md-font-icon="icon-fire" class="icon red-900-fg"></md-icon>\n            <md-tooltip><span translate="TOOLBAR.PREVIEW">Preview</span></md-tooltip>\n        </md-button>\n\n        <ms-search-bar ng-if="vm.user.role !== \'agent\'" on-search="vm.search(query)" on-result-click="vm.searchResultClick(item)" debounce="300" collapse-on-blur="true"></ms-search-bar>\n\n        <md-menu id="language-menu" md-offset="0 72" md-position-mode="target-right target" layout="column" layout-align="center center">\n            <md-button class="md-icon-button no-margin" ng-click="$mdOpenMenu()" aria-label="Language" md-menu-origin md-menu-align-target>\n                <div layout="row" layout-align="center center">\n                    <img class="flag" ng-src="assets/images/flags/{{vm.selectedLanguage.flag}}.png">\n                </div>\n            </md-button>\n\n            <md-menu-content width="3" id="language-menu-content">\n                <md-menu-item ng-repeat="(iso, lang) in vm.languages">\n                    <md-button ng-click="vm.changeLanguage(lang)" aria-label="{{lang.title}}" translate translate-attr-aria-label="{{lang.title}}">\n                        <span layout="row" layout-align="start center">\n                            <img class="flag flag-24" ng-src="assets/images/flags/{{lang.flag}}.png">\n                            <span translate="{{lang.translation}}">{{lang.title}}</span>\n                        </span>\n                    </md-button>\n                </md-menu-item>\n            </md-menu-content>\n        </md-menu>\n\n        <div class="toolbar-separator"></div>\n\n        <md-button ng-if="vm.license.gray && vm.user.role !== \'agent\'" class="md-icon-button" ui-sref="app.settings.license" aria-label="Toggle quick panel">\n            <md-icon md-font-icon="icon-alert" class="icon md-warn blink"></md-icon>\n        </md-button>\n        <md-button ng-if="vm.license.gray && vm.user.role === \'agent\'" class="md-icon-button" aria-label="Toggle quick panel">\n            <md-icon md-font-icon="icon-alert" class="icon md-warn blink"></md-icon>\n        </md-button>\n\n        <div ng-if="vm.license.gray" class="toolbar-separator"></div>\n\n        <md-button id="quick-panel-toggle" class="md-icon-button" ng-click="vm.toggleSidenav(\'quick-panel\')" aria-label="Toggle quick panel" translate translate-attr-aria-label="TOOLBAR.TOGGLE_QUICK_PANEL">\n            <div ng-if="(vm.unreadTotalMessages + vm.unreadTotalGroupMessages)" class="md-accent-bg unread-message-count">{{vm.unreadTotalMessages + vm.unreadTotalGroupMessages}}</div>\n            <md-icon md-font-icon="icon-format-list-bulleted" class="icon"></md-icon>\n        </md-button>\n    </div>\n</div>'),e.put("app/toolbar/preview/dialog.html",'<md-dialog class="preview-dialog" aria-label="preview">\n    <form name="previewForm" class="md-inline-form" novalidate>\n        <md-toolbar class="md-background-bg">\n            <div class="md-toolbar-tools" layout="row" layout-align="space-between center">\n                <span class="title">Preview</span>\n                <md-button class="md-icon-button" ng-click="vm.closeDialog()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div layout="row" ng-if="vm.preview">\n                <div class="md-padding md-margin" layout="column" flex="30">\n                    <md-input-container ng-if="vm.preview.Contact.id" class="md-block no-margin">\n                        <label translate="CONTACTMANAGER.ID">ID</label>\n                        <input type="text" ng-model="vm.preview.Contact.id" disabled="true">\n                    </md-input-container>\n                    <md-input-container ng-if="vm.preview.Queue.name" class="md-block no-margin">\n                        <label translate="VOICE.QUEUE">Queue</label>\n                        <input type="text" ng-model="vm.preview.Queue.name" disabled="true">\n                    </md-input-container>\n                    <md-input-container ng-if="vm.preview.List.name" class="md-block no-margin">\n                        <label translate="CONTACTMANAGER.LIST">List</label>\n                        <input type="text" ng-model="vm.preview.List.name" disabled="true">\n                    </md-input-container>\n                    <md-input-container ng-if="vm.preview.Contact.tags && vm.preview.Contact.tags.length" class="md-block no-margin">\n                        <label translate="CONTACTMANAGER.TAGS">Tags</label>\n                        <input type="text" ng-model="vm.preview.Contact.tags" disabled="true">\n                    </md-input-container>\n                    <md-input-container ng-if="vm.preview.Contact.Company && vm.preview.Contact.Company.name" class="md-block no-margin">\n                        <label translate="CONTACTMANAGER.COMPANY">Company</label>\n                        <input type="text" ng-model="vm.preview.Contact.Company.name" disabled="true">\n                    </md-input-container>\n                </div>\n                <md-divider></md-divider>\n                <div class="md-padding md-margin" layout="column" flex="35">\n                    <md-input-container ng-repeat="(key, value) in vm.preview.Contact" ng-if="!vm.isNil(value) && !vm.isCustomField(key) && !vm.isHiddenField(key)" class="md-block no-margin">\n                        <label>{{ \'CONTACTMANAGER.\' + key.toUpperCase() | translate}}</label>\n                        <input type="text" ng-model="value" disabled="true">\n                    </md-input-container>\n                </div>\n                <div class="md-padding md-margin" layout="column" flex="35">\n                    <md-input-container ng-repeat="(key, value) in vm.preview.Contact" ng-if="!vm.isNil(value) && vm.isCustomField(key) && !vm.isHiddenField(key)" class="md-block no-margin">\n                        <label>{{ vm.customFieldsMap[key] || key }}</label>\n                        <input type="text" ng-model="value" disabled="true">\n                    </md-input-container>\n                </div>\n            </div>\n            <div layout="row" ng-if="!vm.preview">\n                <span>no contacts available</span>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions class="md-dialog-action-center padding-rigth-15">\n            <md-button class="md-icon-button md-primary" ng-hide="vm.hopperIds.length <= 1" ng-disabled="vm.disableGetContact" ng-click="vm.previousContact()" aria-label="PREVIOUSCONTACT" translate-attr-aria-label="TOOLS.PREVIOUSCONTACT">\n                <md-icon md-font-icon="icon-chevron-left"></md-icon>\n            </md-button>\n            <md-button class="md-fab green-bg" aria-label="CALL" translate-attr-aria-label="TOOLS.CALL" ng-disabled="vm.disable" ng-click="vm.originatePreview($event)">\n                <md-icon md-font-icon="icon-phone"></md-icon>\n            </md-button>\n            <md-button class="md-icon-button md-primary" ng-disabled="vm.disableGetContact" ng-click="vm.nextContact()" aria-label="NEXTCONTACT" translate-attr-aria-label="TOOLS.NEXTCONTACT">\n                <md-icon md-font-icon="icon-chevron-right"></md-icon>\n            </md-button>\n        </md-dialog-actions>\n    </form>\n</md-dialog>')}]);
\ No newline at end of file
index efa32c9..c6b8601 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xedd9=['action','STRING','contactManager','integration','jscripty','urlForward','browser','bot','Allowed\x20values:\x20contactManager,\x20integration,\x20motionbar,\x20jscripty,\x20urlForward,\x20browser,\x20bot,\x20script','contactManager[ListId],\x20integration[intName(zendesk)],\x20motionbar[Popup(0),URL(1),WinApp(2)],\x20urlForward[GET,POST],\x20browser[TemplateId(0),URL(1)]','integration[AccountId],\x20motionbar[TemplateId,URL,WinAppPath],\x20urlForward[URL]','motionbar[NULL,NULL,WinAppArguments]','exports','VIRTUAL','getDataValue'];(function(_0x53a936,_0x510457){var _0x32e63f=function(_0x4b324a){while(--_0x4b324a){_0x53a936['push'](_0x53a936['shift']());}};_0x32e63f(++_0x510457);}(_0xedd9,0xfc));var _0x9edd=function(_0x5d6d7b,_0x5268bb){_0x5d6d7b=_0x5d6d7b-0x0;var _0x1691fe=_0xedd9[_0x5d6d7b];return _0x1691fe;};'use strict';var Sequelize=require('sequelize');module[_0x9edd('0x0')]={'name':{'type':Sequelize[_0x9edd('0x1')],'get':function(_0x2af857){return this[_0x9edd('0x2')](_0x9edd('0x3'));}},'action':{'type':Sequelize[_0x9edd('0x4')],'allowNull':![],'validate':{'isIn':{'args':[[_0x9edd('0x5'),_0x9edd('0x6'),'motionbar',_0x9edd('0x7'),_0x9edd('0x8'),_0x9edd('0x9'),_0x9edd('0xa'),'script']],'msg':_0x9edd('0xb')}},'comment':'Allowed\x20values:\x20contactManager,\x20integration,\x20motionbar,\x20jscripty,\x20urlForward,\x20browser,\x20bot,\x20script'},'data1':{'type':Sequelize[_0x9edd('0x4')](0x1000),'comment':_0x9edd('0xc')},'data2':{'type':Sequelize[_0x9edd('0x4')](0x1000),'comment':_0x9edd('0xd')},'data3':{'type':Sequelize['STRING'](0x1000),'comment':_0x9edd('0xe')},'data4':{'type':Sequelize['STRING'](0x1000)},'data5':{'type':Sequelize[_0x9edd('0x4')](0x1000)},'data6':{'type':Sequelize[_0x9edd('0x4')]},'data7':{'type':Sequelize['TEXT']}};
\ No newline at end of file
+var _0x34e8=['STRING','contactManager','integration','motionbar','jscripty','urlForward','bot','Allowed\x20values:\x20contactManager,\x20integration,\x20motionbar,\x20jscripty,\x20urlForward,\x20browser,\x20bot,\x20script','contactManager[ListId],\x20integration[intName(zendesk)],\x20motionbar[Popup(0),URL(1),WinApp(2)],\x20urlForward[GET,POST],\x20browser[TemplateId(0),URL(1)]','integration[AccountId],\x20motionbar[TemplateId,URL,WinAppPath],\x20urlForward[URL]','motionbar[NULL,NULL,WinAppArguments]','TEXT','sequelize','exports','VIRTUAL','action'];(function(_0x49dcdc,_0x14e64f){var _0x3077c0=function(_0x2a91a1){while(--_0x2a91a1){_0x49dcdc['push'](_0x49dcdc['shift']());}};_0x3077c0(++_0x14e64f);}(_0x34e8,0x12c));var _0x834e=function(_0x366b5f,_0x15360b){_0x366b5f=_0x366b5f-0x0;var _0x57937a=_0x34e8[_0x366b5f];return _0x57937a;};'use strict';var Sequelize=require(_0x834e('0x0'));module[_0x834e('0x1')]={'name':{'type':Sequelize[_0x834e('0x2')],'get':function(_0x35e6fb){return this['getDataValue'](_0x834e('0x3'));}},'action':{'type':Sequelize[_0x834e('0x4')],'allowNull':![],'validate':{'isIn':{'args':[[_0x834e('0x5'),_0x834e('0x6'),_0x834e('0x7'),_0x834e('0x8'),_0x834e('0x9'),'browser',_0x834e('0xa'),'script']],'msg':_0x834e('0xb')}},'comment':_0x834e('0xb')},'data1':{'type':Sequelize[_0x834e('0x4')](0x1000),'comment':_0x834e('0xc')},'data2':{'type':Sequelize[_0x834e('0x4')](0x1000),'comment':_0x834e('0xd')},'data3':{'type':Sequelize[_0x834e('0x4')](0x1000),'comment':_0x834e('0xe')},'data4':{'type':Sequelize[_0x834e('0x4')](0x1000)},'data5':{'type':Sequelize[_0x834e('0x4')](0x1000)},'data6':{'type':Sequelize[_0x834e('0x4')]},'data7':{'type':Sequelize[_0x834e('0xf')]}};
\ No newline at end of file
index b0df0b0..fbee80d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a13=['Action','find','params','body','catch','html-pdf','zip-dir','fast-json-patch','request-promise','mustache','util','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','apply','reject','save','then','destroy','end','error','stack','name','update'];(function(_0x3dde5a,_0x4c63bc){var _0x2d242f=function(_0x1e04a5){while(--_0x1e04a5){_0x3dde5a['push'](_0x3dde5a['shift']());}};_0x2d242f(++_0x4c63bc);}(_0x7a13,0x1f4));var _0x37a1=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x7a13[_0x14add3];return _0x4a174f;};'use strict';var pdf=require(_0x37a1('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x37a1('0x1'));var jsonpatch=require(_0x37a1('0x2'));var rp=require(_0x37a1('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x37a1('0x4'));var util=require(_0x37a1('0x5'));var path=require('path');var sox=require(_0x37a1('0x6'));var csv=require(_0x37a1('0x7'));var ejs=require(_0x37a1('0x8'));var fs=require('fs');var _=require(_0x37a1('0x9'));var squel=require('squel');var crypto=require(_0x37a1('0xa'));var jsforce=require(_0x37a1('0xb'));var deskjs=require(_0x37a1('0xc'));var toCsv=require(_0x37a1('0x7'));var querystring=require(_0x37a1('0xd'));var Papa=require(_0x37a1('0xe'));var Redis=require(_0x37a1('0xf'));var authService=require(_0x37a1('0x10'));var qs=require(_0x37a1('0x11'));var hardwareService=require(_0x37a1('0x12'));var logger=require(_0x37a1('0x13'))(_0x37a1('0x14'));var utils=require('../../config/utils');var config=require(_0x37a1('0x15'));var db=require(_0x37a1('0x16'))['db'];function respondWithStatusCode(_0x4dc2eb,_0x2b74f6){_0x2b74f6=_0x2b74f6||0xcc;return function(_0xd06f1b){if(_0xd06f1b){return _0x4dc2eb[_0x37a1('0x17')](_0x2b74f6);}return _0x4dc2eb[_0x37a1('0x18')](_0x2b74f6)['end']();};}function respondWithResult(_0x473c1a,_0x55255d){_0x55255d=_0x55255d||0xc8;return function(_0x541014){if(_0x541014){return _0x473c1a[_0x37a1('0x18')](_0x55255d)[_0x37a1('0x19')](_0x541014);}};}function respondWithFilteredResult(_0x1e0f51,_0x57021a){return function(_0x182390){if(_0x182390){var _0x48892a=_0x182390[_0x37a1('0x1a')],_0x2c0ff1=_0x57021a[_0x37a1('0x1b')],_0x48a489=_0x57021a['offset']+_0x57021a[_0x37a1('0x1c')],_0x51b9bb;if(_0x48a489>=_0x48892a){_0x48a489=_0x48892a;_0x51b9bb=0xc8;}else{_0x51b9bb=0xce;}_0x1e0f51[_0x37a1('0x18')](_0x51b9bb);return _0x1e0f51[_0x37a1('0x1d')]('Content-Range',_0x2c0ff1+'-'+_0x48a489+'/'+_0x48892a)[_0x37a1('0x19')](_0x182390);}return null;};}function patchUpdates(_0xffb529){return function(_0x53907a){try{jsonpatch[_0x37a1('0x1e')](_0x53907a,_0xffb529,!![]);}catch(_0x169a72){return BPromise[_0x37a1('0x1f')](_0x169a72);}return _0x53907a[_0x37a1('0x20')]();};}function saveUpdates(_0x45ef6a,_0x45281b){return function(_0x2e8689){if(_0x2e8689){return _0x2e8689['update'](_0x45ef6a)[_0x37a1('0x21')](function(_0x3cb0b5){return _0x3cb0b5;});}return null;};}function removeEntity(_0x179739,_0x2c1c8){return function(_0x41baa3){if(_0x41baa3){return _0x41baa3[_0x37a1('0x22')]()[_0x37a1('0x21')](function(){_0x179739[_0x37a1('0x18')](0xcc)[_0x37a1('0x23')]();});}};}function handleEntityNotFound(_0x5b6ca2,_0x2948bc){return function(_0x53ac0d){if(!_0x53ac0d){_0x5b6ca2['sendStatus'](0x194);}return _0x53ac0d;};}function handleError(_0x5c29f8,_0x3b9a02){_0x3b9a02=_0x3b9a02||0x1f4;return function(_0x4015f1){logger[_0x37a1('0x24')](_0x4015f1[_0x37a1('0x25')]);if(_0x4015f1[_0x37a1('0x26')]){delete _0x4015f1[_0x37a1('0x26')];}_0x5c29f8[_0x37a1('0x18')](_0x3b9a02)['send'](_0x4015f1);};}exports[_0x37a1('0x27')]=function(_0x17d7d4,_0xf7f814){if(_0x17d7d4['body']['id']){delete _0x17d7d4['body']['id'];}return db[_0x37a1('0x28')][_0x37a1('0x29')]({'where':{'id':_0x17d7d4[_0x37a1('0x2a')]['id']}})[_0x37a1('0x21')](handleEntityNotFound(_0xf7f814,null))['then'](saveUpdates(_0x17d7d4[_0x37a1('0x2b')],null))[_0x37a1('0x21')](respondWithResult(_0xf7f814,null))[_0x37a1('0x2c')](handleError(_0xf7f814,null));};exports[_0x37a1('0x22')]=function(_0x1c4a86,_0x44f2e3){return db['Action'][_0x37a1('0x29')]({'where':{'id':_0x1c4a86[_0x37a1('0x2a')]['id']}})[_0x37a1('0x21')](handleEntityNotFound(_0x44f2e3,null))[_0x37a1('0x21')](removeEntity(_0x44f2e3,null))[_0x37a1('0x2c')](handleError(_0x44f2e3,null));};
\ No newline at end of file
+var _0x374d=['sendStatus','end','json','count','status','Content-Range','apply','reject','update','then','error','name','Action','params','body','catch','destroy','find','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','sox','to-csv','ejs','lodash','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils'];(function(_0x42a3fb,_0x4ff7fa){var _0x431c93=function(_0x1de269){while(--_0x1de269){_0x42a3fb['push'](_0x42a3fb['shift']());}};_0x431c93(++_0x4ff7fa);}(_0x374d,0x15a));var _0xd374=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x374d[_0x14add3];return _0x4a174f;};'use strict';var pdf=require(_0xd374('0x0'));var emlformat=require(_0xd374('0x1'));var rimraf=require(_0xd374('0x2'));var zipdir=require(_0xd374('0x3'));var jsonpatch=require(_0xd374('0x4'));var rp=require('request-promise');var moment=require(_0xd374('0x5'));var BPromise=require(_0xd374('0x6'));var Mustache=require(_0xd374('0x7'));var util=require('util');var path=require('path');var sox=require(_0xd374('0x8'));var csv=require(_0xd374('0x9'));var ejs=require(_0xd374('0xa'));var fs=require('fs');var _=require(_0xd374('0xb'));var squel=require('squel');var crypto=require(_0xd374('0xc'));var jsforce=require(_0xd374('0xd'));var deskjs=require('desk.js');var toCsv=require(_0xd374('0x9'));var querystring=require(_0xd374('0xe'));var Papa=require(_0xd374('0xf'));var Redis=require(_0xd374('0x10'));var authService=require(_0xd374('0x11'));var qs=require(_0xd374('0x12'));var hardwareService=require(_0xd374('0x13'));var logger=require(_0xd374('0x14'))(_0xd374('0x15'));var utils=require(_0xd374('0x16'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1e5365,_0x309901){_0x309901=_0x309901||0xcc;return function(_0x4a0d63){if(_0x4a0d63){return _0x1e5365[_0xd374('0x17')](_0x309901);}return _0x1e5365['status'](_0x309901)[_0xd374('0x18')]();};}function respondWithResult(_0x180957,_0xd702d8){_0xd702d8=_0xd702d8||0xc8;return function(_0x3e7232){if(_0x3e7232){return _0x180957['status'](_0xd702d8)[_0xd374('0x19')](_0x3e7232);}};}function respondWithFilteredResult(_0x56203a,_0x4594ef){return function(_0x211df1){if(_0x211df1){var _0x125452=_0x211df1[_0xd374('0x1a')],_0x1c3c87=_0x4594ef['offset'],_0xa937c=_0x4594ef['offset']+_0x4594ef['limit'],_0x1ebd60;if(_0xa937c>=_0x125452){_0xa937c=_0x125452;_0x1ebd60=0xc8;}else{_0x1ebd60=0xce;}_0x56203a[_0xd374('0x1b')](_0x1ebd60);return _0x56203a['set'](_0xd374('0x1c'),_0x1c3c87+'-'+_0xa937c+'/'+_0x125452)[_0xd374('0x19')](_0x211df1);}return null;};}function patchUpdates(_0x253406){return function(_0x223a3d){try{jsonpatch[_0xd374('0x1d')](_0x223a3d,_0x253406,!![]);}catch(_0x1cfff5){return BPromise[_0xd374('0x1e')](_0x1cfff5);}return _0x223a3d['save']();};}function saveUpdates(_0x3312ed,_0x2a9845){return function(_0x2a2e49){if(_0x2a2e49){return _0x2a2e49[_0xd374('0x1f')](_0x3312ed)[_0xd374('0x20')](function(_0x2ed379){return _0x2ed379;});}return null;};}function removeEntity(_0x44b840,_0x31df3b){return function(_0x588cc4){if(_0x588cc4){return _0x588cc4['destroy']()['then'](function(){_0x44b840['status'](0xcc)[_0xd374('0x18')]();});}};}function handleEntityNotFound(_0x2078e3,_0x3c61bb){return function(_0x59deed){if(!_0x59deed){_0x2078e3[_0xd374('0x17')](0x194);}return _0x59deed;};}function handleError(_0x40cf0a,_0x584522){_0x584522=_0x584522||0x1f4;return function(_0x3dab48){logger[_0xd374('0x21')](_0x3dab48['stack']);if(_0x3dab48[_0xd374('0x22')]){delete _0x3dab48[_0xd374('0x22')];}_0x40cf0a['status'](_0x584522)['send'](_0x3dab48);};}exports[_0xd374('0x1f')]=function(_0xc8d43f,_0x412444){if(_0xc8d43f['body']['id']){delete _0xc8d43f['body']['id'];}return db[_0xd374('0x23')]['find']({'where':{'id':_0xc8d43f[_0xd374('0x24')]['id']}})[_0xd374('0x20')](handleEntityNotFound(_0x412444,null))[_0xd374('0x20')](saveUpdates(_0xc8d43f[_0xd374('0x25')],null))[_0xd374('0x20')](respondWithResult(_0x412444,null))[_0xd374('0x26')](handleError(_0x412444,null));};exports[_0xd374('0x27')]=function(_0x308cf3,_0x2b161e){return db[_0xd374('0x23')][_0xd374('0x28')]({'where':{'id':_0x308cf3[_0xd374('0x24')]['id']}})['then'](handleEntityNotFound(_0x2b161e,null))[_0xd374('0x20')](removeEntity(_0x2b161e,null))[_0xd374('0x26')](handleError(_0x2b161e,null));};
\ No newline at end of file
index 67c4b98..6e5014f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa554=['../../config/environment','exports','define','Action','tools_actions','lodash','../../config/logger','moment','bluebird','request-promise','rimraf'];(function(_0x3feee2,_0x1fdf65){var _0x127ee9=function(_0x22fe20){while(--_0x22fe20){_0x3feee2['push'](_0x3feee2['shift']());}};_0x127ee9(++_0x1fdf65);}(_0xa554,0x12e));var _0x4a55=function(_0x205edb,_0x31db06){_0x205edb=_0x205edb-0x0;var _0x487ee2=_0xa554[_0x205edb];return _0x487ee2;};'use strict';var _=require(_0x4a55('0x0'));var util=require('util');var logger=require(_0x4a55('0x1'))('api');var moment=require(_0x4a55('0x2'));var BPromise=require(_0x4a55('0x3'));var rp=require(_0x4a55('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x4a55('0x5'));var config=require(_0x4a55('0x6'));var attributes=require('./action.attributes');module[_0x4a55('0x7')]=function(_0x2097eb,_0x18c129){return _0x2097eb[_0x4a55('0x8')](_0x4a55('0x9'),attributes,{'tableName':_0x4a55('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6138=['rimraf','../../config/environment','exports','define','Action','lodash','util','../../config/logger','moment','request-promise'];(function(_0x50a0c2,_0x4befab){var _0x5ebadd=function(_0x3a3342){while(--_0x3a3342){_0x50a0c2['push'](_0x50a0c2['shift']());}};_0x5ebadd(++_0x4befab);}(_0x6138,0x113));var _0x8613=function(_0x4243a3,_0x447337){_0x4243a3=_0x4243a3-0x0;var _0x1b2a33=_0x6138[_0x4243a3];return _0x1b2a33;};'use strict';var _=require(_0x8613('0x0'));var util=require(_0x8613('0x1'));var logger=require(_0x8613('0x2'))('api');var moment=require(_0x8613('0x3'));var BPromise=require('bluebird');var rp=require(_0x8613('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x8613('0x5'));var config=require(_0x8613('0x6'));var attributes=require('./action.attributes');module[_0x8613('0x7')]=function(_0x11b9a3,_0x35b9b4){return _0x11b9a3[_0x8613('0x8')](_0x8613('0x9'),attributes,{'tableName':'tools_actions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 5c13577..3eeaef8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc978=['bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','Action,\x20%s,\x20%s','request\x20sent','debug','Action,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','lodash','util','moment'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0xc978,0xcd));var _0x8c97=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xc978[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x8c97('0x0'));var util=require(_0x8c97('0x1'));var moment=require(_0x8c97('0x2'));var BPromise=require(_0x8c97('0x3'));var rs=require(_0x8c97('0x4'));var fs=require('fs');var Redis=require(_0x8c97('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x8c97('0x6'));var logger=require(_0x8c97('0x7'))(_0x8c97('0x8'));var config=require(_0x8c97('0x9'));var jayson=require(_0x8c97('0xa'));var client=jayson[_0x8c97('0xb')][_0x8c97('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x524196,_0x41a511,_0x1b5864){return new BPromise(function(_0x332cd1,_0x26ff40){return client[_0x8c97('0xd')](_0x524196,_0x1b5864)[_0x8c97('0xe')](function(_0x17aef0){logger['info'](_0x8c97('0xf'),_0x41a511,_0x8c97('0x10'));logger[_0x8c97('0x11')](_0x8c97('0x12'),_0x41a511,_0x8c97('0x10'),JSON[_0x8c97('0x13')](_0x17aef0));if(_0x17aef0[_0x8c97('0x14')]){if(_0x17aef0[_0x8c97('0x14')][_0x8c97('0x15')]===0x1f4){logger['error'](_0x8c97('0xf'),_0x41a511,_0x17aef0[_0x8c97('0x14')]['message']);return _0x26ff40(_0x17aef0[_0x8c97('0x14')][_0x8c97('0x16')]);}logger['error'](_0x8c97('0xf'),_0x41a511,_0x17aef0['error']['message']);return _0x332cd1(_0x17aef0['error'][_0x8c97('0x16')]);}else{logger[_0x8c97('0x17')](_0x8c97('0xf'),_0x41a511,_0x8c97('0x10'));_0x332cd1(_0x17aef0[_0x8c97('0x18')][_0x8c97('0x16')]);}})[_0x8c97('0x19')](function(_0xe3be1){logger[_0x8c97('0x14')]('Action,\x20%s,\x20%s',_0x41a511,_0xe3be1);_0x26ff40(_0xe3be1);});});}
\ No newline at end of file
+var _0x8c25=['then','info','Action,\x20%s,\x20%s','request\x20sent','debug','Action,\x20%s,\x20%s,\x20%s','stringify','error','message','result','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','jayson/promise','http','request'];(function(_0x12c6d4,_0x58c6fd){var _0x495b0f=function(_0xf574e){while(--_0xf574e){_0x12c6d4['push'](_0x12c6d4['shift']());}};_0x495b0f(++_0x58c6fd);}(_0x8c25,0x15e));var _0x58c2=function(_0x48636a,_0x3f2842){_0x48636a=_0x48636a-0x0;var _0x4c995c=_0x8c25[_0x48636a];return _0x4c995c;};'use strict';var _=require(_0x58c2('0x0'));var util=require(_0x58c2('0x1'));var moment=require(_0x58c2('0x2'));var BPromise=require(_0x58c2('0x3'));var rs=require(_0x58c2('0x4'));var fs=require('fs');var Redis=require(_0x58c2('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x58c2('0x6'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0x58c2('0x7'));var client=jayson['client'][_0x58c2('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x4be512,_0x5f3536,_0x331863){return new BPromise(function(_0xddbb7e,_0x52cfa7){return client[_0x58c2('0x9')](_0x4be512,_0x331863)[_0x58c2('0xa')](function(_0xf9aef5){logger[_0x58c2('0xb')](_0x58c2('0xc'),_0x5f3536,_0x58c2('0xd'));logger[_0x58c2('0xe')](_0x58c2('0xf'),_0x5f3536,'request\x20sent',JSON[_0x58c2('0x10')](_0xf9aef5));if(_0xf9aef5[_0x58c2('0x11')]){if(_0xf9aef5[_0x58c2('0x11')]['code']===0x1f4){logger[_0x58c2('0x11')](_0x58c2('0xc'),_0x5f3536,_0xf9aef5[_0x58c2('0x11')][_0x58c2('0x12')]);return _0x52cfa7(_0xf9aef5[_0x58c2('0x11')][_0x58c2('0x12')]);}logger[_0x58c2('0x11')](_0x58c2('0xc'),_0x5f3536,_0xf9aef5[_0x58c2('0x11')][_0x58c2('0x12')]);return _0xddbb7e(_0xf9aef5['error']['message']);}else{logger[_0x58c2('0xb')](_0x58c2('0xc'),_0x5f3536,_0x58c2('0xd'));_0xddbb7e(_0xf9aef5[_0x58c2('0x13')][_0x58c2('0x12')]);}})['catch'](function(_0x3a6312){logger[_0x58c2('0x11')]('Action,\x20%s,\x20%s',_0x5f3536,_0x3a6312);_0x52cfa7(_0x3a6312);});});}
\ No newline at end of file
index d1c0d8d..6fb52c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e34=['update','delete','/:id','isAuthenticated','destroy','exports','path','connect-timeout','../../components/auth/service','../../config/environment','./action.controller','put'];(function(_0x1e2290,_0xd8fe03){var _0x1c17f3=function(_0x13d0f1){while(--_0x13d0f1){_0x1e2290['push'](_0x1e2290['shift']());}};_0x1c17f3(++_0xd8fe03);}(_0x4e34,0x19e));var _0x44e3=function(_0x27897e,_0x261d02){_0x27897e=_0x27897e-0x0;var _0x108d00=_0x4e34[_0x27897e];return _0x108d00;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x44e3('0x0'));var timeout=require(_0x44e3('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0x44e3('0x2'));var interaction=require('../../components/interaction/service');var config=require(_0x44e3('0x3'));var controller=require(_0x44e3('0x4'));router[_0x44e3('0x5')]('/:id',auth['isAuthenticated'](),controller[_0x44e3('0x6')]);router[_0x44e3('0x7')](_0x44e3('0x8'),auth[_0x44e3('0x9')](),controller[_0x44e3('0xa')]);module[_0x44e3('0xb')]=router;
\ No newline at end of file
+var _0x8f59=['multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./action.controller','put','isAuthenticated','update','delete','destroy','exports'];(function(_0x111fdf,_0x40c27a){var _0x1008c8=function(_0x6419ad){while(--_0x6419ad){_0x111fdf['push'](_0x111fdf['shift']());}};_0x1008c8(++_0x40c27a);}(_0x8f59,0x11d));var _0x98f5=function(_0x4fe5b5,_0x41efab){_0x4fe5b5=_0x4fe5b5-0x0;var _0x221fbe=_0x8f59[_0x4fe5b5];return _0x221fbe;};'use strict';var multer=require(_0x98f5('0x0'));var util=require(_0x98f5('0x1'));var path=require(_0x98f5('0x2'));var timeout=require(_0x98f5('0x3'));var express=require(_0x98f5('0x4'));var router=express[_0x98f5('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x98f5('0x6'));var config=require(_0x98f5('0x7'));var controller=require(_0x98f5('0x8'));router[_0x98f5('0x9')]('/:id',auth[_0x98f5('0xa')](),controller[_0x98f5('0xb')]);router[_0x98f5('0xc')]('/:id',auth['isAuthenticated'](),controller[_0x98f5('0xd')]);module[_0x98f5('0xe')]=router;
\ No newline at end of file
index 69a263d..adea181 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7169=['STRING','TEXT','exports'];(function(_0x2aa0e7,_0x4e5145){var _0x1472c0=function(_0x4deaeb){while(--_0x4deaeb){_0x2aa0e7['push'](_0x2aa0e7['shift']());}};_0x1472c0(++_0x4e5145);}(_0x7169,0x15b));var _0x9716=function(_0x53cf8e,_0x3d290f){_0x53cf8e=_0x53cf8e-0x0;var _0x459197=_0x7169[_0x53cf8e];return _0x459197;};'use strict';var Sequelize=require('sequelize');module[_0x9716('0x0')]={'name':{'type':Sequelize[_0x9716('0x1')],'allowNull':![]},'description':{'type':Sequelize[_0x9716('0x1')]},'parent':{'type':Sequelize[_0x9716('0x1')]},'table':{'type':Sequelize[_0x9716('0x1')]},'conditions':{'type':Sequelize[_0x9716('0x2')]},'joins':{'type':Sequelize[_0x9716('0x2')]}};
\ No newline at end of file
+var _0xeea3=['STRING','TEXT'];(function(_0x25b339,_0x1c9e2f){var _0x20d2d3=function(_0x27a209){while(--_0x27a209){_0x25b339['push'](_0x25b339['shift']());}};_0x20d2d3(++_0x1c9e2f);}(_0xeea3,0x196));var _0x3eea=function(_0x255a78,_0x34d332){_0x255a78=_0x255a78-0x0;var _0x58a35e=_0xeea3[_0x255a78];return _0x58a35e;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0x3eea('0x0')],'allowNull':![]},'description':{'type':Sequelize['STRING']},'parent':{'type':Sequelize['STRING']},'table':{'type':Sequelize[_0x3eea('0x0')]},'conditions':{'type':Sequelize[_0x3eea('0x1')]},'joins':{'type':Sequelize[_0x3eea('0x1')]}};
\ No newline at end of file
index 3913f9a..e2a85e2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x80d9=['name','send','AnalyticCustomReport','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','map','type','VIRTUAL','field','options','include','findAll','catch','show','params','merge','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','Reports','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','preview','join','left_join','cross_join','SUM(%s)','COUNT(%s)','COUNT(DISTINCT\x20%s)','MIN(%s)','AVG(%s)','GROUP_CONCAT(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)','SEC_TO_TIME(%s)','HOUR(%s)','UNIX_TIMESTAMP(%s)','includes','IS\x20NULL','IS\x20NOT\x20NULL','IS\x20EMPTY','rules','operator','group','condition','getFields','ValidationErrorItem','Please\x20insert\x20at\x20least\x20one\x20field','keyBy','select','from','table','MetricId','function','replace','format','groupBy','orderBy','alias','joins','parentKey','foreignTable','%s.%s\x20=\x20%s.%s','foreignKey','conditions','parse','clone','Limited\x20Query:','toString','sequelize','QueryTypes','SELECT','right_join','MAX(%s)','DATE(%s)','ROUND(%s)','value','Sequelize','AnalyticMetric','DESC','debug','No\x20available\x20data','output','web','%s-%s.%s','randomstring','generate','csv','AnalyticExtractedReport','cdr','startDate','.createdAt\x20BETWEEN\x20?\x20AND\x20?','endDate','info','Run\x20Query:','child_process','fork','../../components/export/','../../files/reports','savename','countTable','run','runReport','IS\x20NOT\x20EMPTY','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','reject','save','update','then','destroy','CustomReports','UserProfileResource','error','stack'];(function(_0x1c23bc,_0x38af29){var _0x5616d9=function(_0x1befec){while(--_0x1befec){_0x1c23bc['push'](_0x1c23bc['shift']());}};_0x5616d9(++_0x38af29);}(_0x80d9,0x122));var _0x980d=function(_0xd15b6f,_0x2209a3){_0xd15b6f=_0xd15b6f-0x0;var _0x4b1b97=_0x80d9[_0xd15b6f];return _0x4b1b97;};'use strict';var pdf=require(_0x980d('0x0'));var emlformat=require(_0x980d('0x1'));var rimraf=require(_0x980d('0x2'));var zipdir=require(_0x980d('0x3'));var jsonpatch=require(_0x980d('0x4'));var rp=require(_0x980d('0x5'));var moment=require(_0x980d('0x6'));var BPromise=require(_0x980d('0x7'));var Mustache=require(_0x980d('0x8'));var util=require(_0x980d('0x9'));var path=require(_0x980d('0xa'));var sox=require(_0x980d('0xb'));var csv=require('to-csv');var ejs=require(_0x980d('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0x980d('0xd'));var crypto=require(_0x980d('0xe'));var jsforce=require(_0x980d('0xf'));var deskjs=require(_0x980d('0x10'));var toCsv=require(_0x980d('0x11'));var querystring=require(_0x980d('0x12'));var Papa=require(_0x980d('0x13'));var Redis=require(_0x980d('0x14'));var authService=require('../../components/auth/service');var qs=require(_0x980d('0x15'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x980d('0x16'))(_0x980d('0x17'));var utils=require(_0x980d('0x18'));var config=require(_0x980d('0x19'));var db=require(_0x980d('0x1a'))['db'];function respondWithStatusCode(_0x43b49f,_0x24d272){_0x24d272=_0x24d272||0xcc;return function(_0xf176b6){if(_0xf176b6){return _0x43b49f[_0x980d('0x1b')](_0x24d272);}return _0x43b49f[_0x980d('0x1c')](_0x24d272)[_0x980d('0x1d')]();};}function respondWithResult(_0x36556b,_0x620444){_0x620444=_0x620444||0xc8;return function(_0x5a7592){if(_0x5a7592){return _0x36556b[_0x980d('0x1c')](_0x620444)['json'](_0x5a7592);}};}function respondWithFilteredResult(_0x750330,_0x25f768){return function(_0x265f04){if(_0x265f04){var _0x1885c5=_0x265f04[_0x980d('0x1e')],_0xf0d786=_0x25f768['offset'],_0x3b7137=_0x25f768[_0x980d('0x1f')]+_0x25f768[_0x980d('0x20')],_0x3e397d;if(_0x3b7137>=_0x1885c5){_0x3b7137=_0x1885c5;_0x3e397d=0xc8;}else{_0x3e397d=0xce;}_0x750330[_0x980d('0x1c')](_0x3e397d);return _0x750330[_0x980d('0x21')](_0x980d('0x22'),_0xf0d786+'-'+_0x3b7137+'/'+_0x1885c5)[_0x980d('0x23')](_0x265f04);}return null;};}function patchUpdates(_0xde2662){return function(_0x3e627c){try{jsonpatch[_0x980d('0x24')](_0x3e627c,_0xde2662,!![]);}catch(_0x3c7edf){return BPromise[_0x980d('0x25')](_0x3c7edf);}return _0x3e627c[_0x980d('0x26')]();};}function saveUpdates(_0x29fd4e,_0x2cf81a){return function(_0x37ecb2){if(_0x37ecb2){return _0x37ecb2[_0x980d('0x27')](_0x29fd4e)[_0x980d('0x28')](function(_0x138975){return _0x138975;});}return null;};}function removeEntity(_0x4b3153,_0x21c94e){return function(_0x2cb1e5){if(_0x2cb1e5){return _0x2cb1e5[_0x980d('0x29')]()[_0x980d('0x28')](function(){var _0x521eca=_0x2cb1e5['get']({'plain':!![]});var _0x139edc=_0x980d('0x2a');return db[_0x980d('0x2b')][_0x980d('0x29')]({'where':{'type':_0x139edc,'resourceId':_0x521eca['id']}})[_0x980d('0x28')](function(){return _0x2cb1e5;});})['then'](function(){_0x4b3153[_0x980d('0x1c')](0xcc)[_0x980d('0x1d')]();});}};}function handleEntityNotFound(_0x5973fc,_0x4edbf0){return function(_0x3b7962){if(!_0x3b7962){_0x5973fc['sendStatus'](0x194);}return _0x3b7962;};}function handleError(_0x561772,_0x4c13e4){_0x4c13e4=_0x4c13e4||0x1f4;return function(_0x20f914){logger[_0x980d('0x2c')](_0x20f914[_0x980d('0x2d')]);if(_0x20f914['name']){delete _0x20f914[_0x980d('0x2e')];}_0x561772[_0x980d('0x1c')](_0x4c13e4)[_0x980d('0x2f')](_0x20f914);};}exports['index']=function(_0x2fafe2,_0x2d1a26){var _0x478b08={},_0x358455={},_0x21c42c={'count':0x0,'rows':[]};var _0x2b162e=db[_0x980d('0x30')][_0x980d('0x31')];_0x358455[_0x980d('0x32')]=_[_0x980d('0x33')](_0x2b162e);_0x358455['query']=_[_0x980d('0x33')](_0x2fafe2[_0x980d('0x34')]);_0x358455[_0x980d('0x35')]=_[_0x980d('0x36')](_0x358455[_0x980d('0x32')],_0x358455[_0x980d('0x34')]);_0x478b08['attributes']=_[_0x980d('0x36')](_0x358455['model'],qs[_0x980d('0x37')](_0x2fafe2['query'][_0x980d('0x37')]));_0x478b08[_0x980d('0x38')]=_0x478b08[_0x980d('0x38')][_0x980d('0x39')]?_0x478b08['attributes']:_0x358455[_0x980d('0x32')];if(!_0x2fafe2[_0x980d('0x34')][_0x980d('0x3a')](_0x980d('0x3b'))){_0x478b08['limit']=qs[_0x980d('0x20')](_0x2fafe2[_0x980d('0x34')]['limit']);_0x478b08[_0x980d('0x1f')]=qs[_0x980d('0x1f')](_0x2fafe2[_0x980d('0x34')][_0x980d('0x1f')]);}_0x478b08[_0x980d('0x3c')]=qs['sort'](_0x2fafe2[_0x980d('0x34')][_0x980d('0x3d')]);_0x478b08[_0x980d('0x3e')]=qs[_0x980d('0x35')](_[_0x980d('0x3f')](_0x2fafe2['query'],_0x358455[_0x980d('0x35')]));if(_0x2fafe2['query'][_0x980d('0x40')]){_0x478b08['where']=_['merge'](_0x478b08[_0x980d('0x3e')],{'$or':_[_0x980d('0x41')](_0x2b162e,function(_0x85a22a){if(_0x85a22a[_0x980d('0x42')]['key']!==_0x980d('0x43')){var _0x458f4f={};_0x458f4f[_0x85a22a[_0x980d('0x44')]]={'$like':'%'+_0x2fafe2['query'][_0x980d('0x40')]+'%'};return _0x458f4f;}})});}_0x478b08=_['merge']({},_0x478b08,_0x2fafe2[_0x980d('0x45')]);var _0x49dad2={'where':_0x478b08[_0x980d('0x3e')]};return db['AnalyticCustomReport'][_0x980d('0x1e')](_0x49dad2)[_0x980d('0x28')](function(_0x31a0ef){_0x21c42c['count']=_0x31a0ef;if(_0x2fafe2['query']['includeAll']){_0x478b08[_0x980d('0x46')]=[{'all':!![]}];}return db[_0x980d('0x30')][_0x980d('0x47')](_0x478b08);})[_0x980d('0x28')](function(_0x53521a){_0x21c42c['rows']=_0x53521a;return _0x21c42c;})[_0x980d('0x28')](respondWithFilteredResult(_0x2d1a26,_0x478b08))[_0x980d('0x48')](handleError(_0x2d1a26,null));};exports[_0x980d('0x49')]=function(_0x3819db,_0x5d2e04){var _0x37b498={'raw':![],'where':{'id':_0x3819db[_0x980d('0x4a')]['id']}},_0x5aa4c5={};_0x5aa4c5[_0x980d('0x32')]=_[_0x980d('0x33')](db[_0x980d('0x30')]['rawAttributes']);_0x5aa4c5[_0x980d('0x34')]=_[_0x980d('0x33')](_0x3819db[_0x980d('0x34')]);_0x5aa4c5[_0x980d('0x35')]=_[_0x980d('0x36')](_0x5aa4c5[_0x980d('0x32')],_0x5aa4c5[_0x980d('0x34')]);_0x37b498['attributes']=_['intersection'](_0x5aa4c5[_0x980d('0x32')],qs[_0x980d('0x37')](_0x3819db[_0x980d('0x34')][_0x980d('0x37')]));_0x37b498['attributes']=_0x37b498[_0x980d('0x38')][_0x980d('0x39')]?_0x37b498[_0x980d('0x38')]:_0x5aa4c5['model'];if(_0x3819db[_0x980d('0x34')]['includeAll']){_0x37b498[_0x980d('0x46')]=[{'all':!![]}];}_0x37b498=_[_0x980d('0x4b')]({},_0x37b498,_0x3819db[_0x980d('0x45')]);return db[_0x980d('0x30')][_0x980d('0x4c')](_0x37b498)['then'](handleEntityNotFound(_0x5d2e04,null))['then'](respondWithResult(_0x5d2e04,null))[_0x980d('0x48')](handleError(_0x5d2e04,null));};exports[_0x980d('0x4d')]=function(_0x3bbd49,_0x1cb7bf){return db[_0x980d('0x30')][_0x980d('0x4d')](_0x3bbd49[_0x980d('0x4e')],{})[_0x980d('0x28')](function(_0x2a260b){var _0x35dc75=_0x3bbd49[_0x980d('0x4f')][_0x980d('0x50')]({'plain':!![]});if(!_0x35dc75)throw new Error(_0x980d('0x51'));if(_0x35dc75['role']===_0x980d('0x4f')){var _0x330d8f=_0x2a260b[_0x980d('0x50')]({'plain':!![]});var _0x5bda4d=_0x980d('0x52');return db['UserProfileSection'][_0x980d('0x4c')]({'where':{'name':_0x5bda4d,'userProfileId':_0x35dc75[_0x980d('0x53')]},'raw':!![]})[_0x980d('0x28')](function(_0x45eea9){if(_0x45eea9&&_0x45eea9[_0x980d('0x54')]===0x0){return db[_0x980d('0x2b')][_0x980d('0x4d')]({'name':_0x330d8f[_0x980d('0x2e')],'resourceId':_0x330d8f['id'],'type':_0x980d('0x2a'),'sectionId':_0x45eea9['id']},{})['then'](function(){return _0x2a260b;});}else{return _0x2a260b;}})['catch'](function(_0x3ff2ed){logger[_0x980d('0x2c')](_0x980d('0x55'),_0x3ff2ed);throw _0x3ff2ed;});}return _0x2a260b;})[_0x980d('0x28')](respondWithResult(_0x1cb7bf,0xc9))[_0x980d('0x48')](handleError(_0x1cb7bf,null));};exports[_0x980d('0x27')]=function(_0x325e67,_0x3206ca){if(_0x325e67[_0x980d('0x4e')]['id']){delete _0x325e67[_0x980d('0x4e')]['id'];}return db[_0x980d('0x30')]['find']({'where':{'id':_0x325e67[_0x980d('0x4a')]['id']}})[_0x980d('0x28')](handleEntityNotFound(_0x3206ca,null))[_0x980d('0x28')](saveUpdates(_0x325e67[_0x980d('0x4e')],null))['then'](respondWithResult(_0x3206ca,null))[_0x980d('0x48')](handleError(_0x3206ca,null));};exports[_0x980d('0x29')]=function(_0x12287d,_0x354d64){return db['AnalyticCustomReport'][_0x980d('0x4c')]({'where':{'id':_0x12287d['params']['id']}})[_0x980d('0x28')](handleEntityNotFound(_0x354d64,null))[_0x980d('0x28')](removeEntity(_0x354d64,null))['catch'](handleError(_0x354d64,null));};exports[_0x980d('0x56')]=function(_0x5eb29f,_0x4d274e){var _0x28e76e=0xa;var _0xdbdf32=[_0x980d('0x57'),_0x980d('0x58'),'right_join',_0x980d('0x59')];var _0x3f781e={'SUM':_0x980d('0x5a'),'COUNT':_0x980d('0x5b'),'COUNT DISTINCT':_0x980d('0x5c'),'MAX':'MAX(%s)','MIN':_0x980d('0x5d'),'AVG':_0x980d('0x5e'),'GROUP_CONCAT':_0x980d('0x5f'),'GROUP_CONCAT ASC':_0x980d('0x60'),'GROUP_CONCAT DESC':_0x980d('0x61')};var _0xc9d86a={'SEC_TO_TIME':_0x980d('0x62'),'DATE':'DATE(%s)','HOUR':_0x980d('0x63'),'ROUND':'ROUND(%s)','UNIX_TIMESTAMP':_0x980d('0x64')};var _0x15523f=function(_0x48d581){return!_[_0x980d('0x65')]([_0x980d('0x66'),_0x980d('0x67'),_0x980d('0x68'),'IS\x20NOT\x20EMPTY'],_0x48d581);};var _0x4bbaee=function(_0x27fba0){if(!_0x27fba0||!_0x27fba0[_0x980d('0x69')][_0x980d('0x39')]){return'';}for(var _0x266454='(',_0x3ff6f2=0x0;_0x3ff6f2<_0x27fba0[_0x980d('0x69')][_0x980d('0x39')];_0x3ff6f2+=0x1){_0x3ff6f2>0x0&&(_0x266454+='\x20'+_0x27fba0[_0x980d('0x6a')]+'\x20');_0x266454+=_0x27fba0[_0x980d('0x69')][_0x3ff6f2][_0x980d('0x6b')]?_0x4bbaee(_0x27fba0[_0x980d('0x69')][_0x3ff6f2][_0x980d('0x6b')]):_0x27fba0['rules'][_0x3ff6f2][_0x980d('0x44')]+'\x20'+_0x27fba0[_0x980d('0x69')][_0x3ff6f2][_0x980d('0x6c')]+(_0x15523f(_0x27fba0[_0x980d('0x69')][_0x3ff6f2][_0x980d('0x6c')])?'\x20'+_0x27fba0[_0x980d('0x69')][_0x3ff6f2]['value']:'');}return _0x266454+')';};var _0x224117={'where':{'id':_0x5eb29f['params']['id']}},_0x2f0e9a,_0x285338,_0x4ea133,_0x214107,_0x1e89cd;_0x224117=_[_0x980d('0x4b')]({},_0x224117,_0x5eb29f[_0x980d('0x45')]);return db[_0x980d('0x30')][_0x980d('0x4c')](_0x224117)['then'](function(_0x387bf1){if(_0x387bf1){_0x2f0e9a=_0x387bf1;return _0x387bf1[_0x980d('0x6d')]();}return null;})[_0x980d('0x28')](function(_0x216316){if(_0x216316){if(!_0x216316[_0x980d('0x39')]){throw new db['Sequelize'][(_0x980d('0x6e'))](_0x980d('0x6f'),0x193);}_0x285338=_0x216316;return db['AnalyticMetric'][_0x980d('0x47')]({'raw':!![]});}return null;})[_0x980d('0x28')](function(_0x32a5ed){if(_0x32a5ed){_0x4ea133=_[_0x980d('0x70')](_0x32a5ed,'id');var _0x2092b5;var _0x13eaf5=squel[_0x980d('0x71')]();_0x13eaf5[_0x980d('0x72')](_0x2f0e9a[_0x980d('0x73')]);for(var _0x303ccb=0x0;_0x303ccb<_0x285338[_0x980d('0x39')];_0x303ccb+=0x1){_0x2092b5=_0x285338[_0x303ccb]['MetricId']?_0x4ea133[_0x285338[_0x303ccb][_0x980d('0x74')]]['metric']:_0x285338[_0x303ccb][_0x980d('0x44')];_0x2092b5=_0x285338[_0x303ccb][_0x980d('0x75')]?_[_0x980d('0x76')](_0x3f781e[_0x285338[_0x303ccb][_0x980d('0x75')]],'%s',_0x2092b5):_0x2092b5;_0x2092b5=_0x285338[_0x303ccb]['format']?_[_0x980d('0x76')](_0xc9d86a[_0x285338[_0x303ccb][_0x980d('0x77')]],'%s',_0x2092b5):_0x2092b5;if(_0x285338[_0x303ccb][_0x980d('0x78')]){_0x13eaf5[_0x980d('0x6b')](_0x2092b5);}_0x285338[_0x303ccb][_0x980d('0x79')]&&_0x13eaf5[_0x980d('0x3c')](_0x2092b5,_0x285338[_0x303ccb][_0x980d('0x79')]==='DESC'?![]:!![]);_0x13eaf5[_0x980d('0x44')](_0x2092b5,_0x285338[_0x303ccb][_0x980d('0x7a')]||_0x2092b5);}if(_0x2f0e9a[_0x980d('0x7b')]){_0x2f0e9a['joins']=JSON['parse'](_0x2f0e9a[_0x980d('0x7b')]);for(var _0x4c1101=0x0;_0x4c1101<_0x2f0e9a[_0x980d('0x7b')][_0x980d('0x39')];_0x4c1101+=0x1){if(_0x2f0e9a['joins'][_0x4c1101]['type']&&_[_0x980d('0x65')](_0xdbdf32,_0x2f0e9a[_0x980d('0x7b')][_0x4c1101][_0x980d('0x42')])&&_0x2f0e9a[_0x980d('0x7b')][_0x4c1101][_0x980d('0x7c')]&&_0x2f0e9a[_0x980d('0x7b')][_0x4c1101][_0x980d('0x7d')]&&_0x2f0e9a[_0x980d('0x7b')][_0x4c1101]['foreignKey']){_0x13eaf5[_0x2f0e9a[_0x980d('0x7b')][_0x4c1101][_0x980d('0x42')]](_0x2f0e9a[_0x980d('0x7b')][_0x4c1101][_0x980d('0x7d')],null,util['format'](_0x980d('0x7e'),_0x2f0e9a[_0x980d('0x73')],_0x2f0e9a[_0x980d('0x7b')][_0x4c1101][_0x980d('0x7c')],_0x2f0e9a[_0x980d('0x7b')][_0x4c1101][_0x980d('0x7d')],_0x2f0e9a[_0x980d('0x7b')][_0x4c1101][_0x980d('0x7f')]));}}}if(_0x2f0e9a['conditions']){_0x2f0e9a[_0x980d('0x80')]=JSON[_0x980d('0x81')](_0x2f0e9a[_0x980d('0x80')]);_0x13eaf5[_0x980d('0x3e')](_0x4bbaee(_0x2f0e9a[_0x980d('0x80')][_0x980d('0x6b')]));}_0x1e89cd=_0x13eaf5[_0x980d('0x82')]();_0x13eaf5['limit'](_0x28e76e);_0x13eaf5[_0x980d('0x1f')](0x0);logger['debug'](_0x980d('0x83'),_0x13eaf5[_0x980d('0x84')]());return db[_0x980d('0x85')]['query'](_0x13eaf5[_0x980d('0x84')](),{'type':db['sequelize'][_0x980d('0x86')][_0x980d('0x87')]});}})[_0x980d('0x28')](respondWithResult(_0x4d274e,null))[_0x980d('0x48')](handleError(_0x4d274e,null));};function runReport(_0x4fdff9,_0x3b0461,_0xd5ebeb){var _0x5d3d0f=_0x3b0461[_0x980d('0x2e')];var _0x558d2d=0xa;var _0x312ee6=['join',_0x980d('0x58'),_0x980d('0x88'),'cross_join'];var _0x377dd2={'SUM':_0x980d('0x5a'),'COUNT':'COUNT(%s)','COUNT DISTINCT':_0x980d('0x5c'),'MAX':_0x980d('0x89'),'MIN':_0x980d('0x5d'),'AVG':_0x980d('0x5e'),'GROUP_CONCAT':_0x980d('0x5f'),'GROUP_CONCAT ASC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT DESC':_0x980d('0x61')};var _0x4ff985={'SEC_TO_TIME':_0x980d('0x62'),'DATE':_0x980d('0x8a'),'HOUR':_0x980d('0x63'),'ROUND':_0x980d('0x8b'),'UNIX_TIMESTAMP':_0x980d('0x64')};var _0x219ded=function(_0x13dfa5){return!_[_0x980d('0x65')]([_0x980d('0x66'),_0x980d('0x67'),_0x980d('0x68'),'IS\x20NOT\x20EMPTY'],_0x13dfa5);};var _0x50619c=function(_0x22dbfa){if(!_0x22dbfa||!_0x22dbfa[_0x980d('0x69')]['length']){return'';}for(var _0x487ba7='(',_0x498662=0x0;_0x498662<_0x22dbfa[_0x980d('0x69')][_0x980d('0x39')];_0x498662+=0x1){_0x498662>0x0&&(_0x487ba7+='\x20'+_0x22dbfa[_0x980d('0x6a')]+'\x20');_0x487ba7+=_0x22dbfa[_0x980d('0x69')][_0x498662]['group']?_0x50619c(_0x22dbfa[_0x980d('0x69')][_0x498662][_0x980d('0x6b')]):_0x22dbfa[_0x980d('0x69')][_0x498662]['field']+'\x20'+_0x22dbfa[_0x980d('0x69')][_0x498662][_0x980d('0x6c')]+(_0x219ded(_0x22dbfa[_0x980d('0x69')][_0x498662][_0x980d('0x6c')])?'\x20'+_0x22dbfa['rules'][_0x498662][_0x980d('0x8c')]:'');}return _0x487ba7+')';};var _0x464cdb={'where':{'id':_0x4fdff9['id']}},_0x478828,_0x454f09,_0xe57c5d,_0x2ef286,_0x4e3443;_0x464cdb=_[_0x980d('0x4b')]({},_0x464cdb,_0xd5ebeb);return db[_0x980d('0x30')][_0x980d('0x4c')](_0x464cdb)[_0x980d('0x28')](function(_0x53977b){if(_0x53977b){_0x478828=_0x53977b;return _0x53977b['getFields']();}return null;})[_0x980d('0x28')](function(_0x31e2b8){if(_0x31e2b8){if(!_0x31e2b8[_0x980d('0x39')]){throw new db[(_0x980d('0x8d'))]['ValidationErrorItem']('Please\x20insert\x20at\x20least\x20one\x20field',0x193);}_0x454f09=_0x31e2b8;return db[_0x980d('0x8e')][_0x980d('0x47')]({'raw':!![]});}return null;})[_0x980d('0x28')](function(_0x40e0b9){if(_0x40e0b9){_0xe57c5d=_[_0x980d('0x70')](_0x40e0b9,'id');var _0x30410f;var _0x12704e=squel[_0x980d('0x71')]();_0x12704e['from'](_0x478828['table']);for(var _0x2aae13=0x0;_0x2aae13<_0x454f09[_0x980d('0x39')];_0x2aae13+=0x1){_0x30410f=_0x454f09[_0x2aae13][_0x980d('0x74')]?_0xe57c5d[_0x454f09[_0x2aae13]['MetricId']]['metric']:_0x454f09[_0x2aae13][_0x980d('0x44')];_0x30410f=_0x454f09[_0x2aae13][_0x980d('0x75')]?_['replace'](_0x377dd2[_0x454f09[_0x2aae13][_0x980d('0x75')]],'%s',_0x30410f):_0x30410f;_0x30410f=_0x454f09[_0x2aae13][_0x980d('0x77')]?_[_0x980d('0x76')](_0x4ff985[_0x454f09[_0x2aae13]['format']],'%s',_0x30410f):_0x30410f;if(_0x454f09[_0x2aae13][_0x980d('0x78')]){_0x12704e[_0x980d('0x6b')](_0x30410f);}_0x454f09[_0x2aae13][_0x980d('0x79')]&&_0x12704e[_0x980d('0x3c')](_0x30410f,_0x454f09[_0x2aae13][_0x980d('0x79')]===_0x980d('0x8f')?![]:!![]);_0x12704e[_0x980d('0x44')](_0x30410f,_0x454f09[_0x2aae13][_0x980d('0x7a')]||_0x30410f);}if(_0x478828['joins']){_0x478828['joins']=JSON[_0x980d('0x81')](_0x478828[_0x980d('0x7b')]);for(var _0x20c3cf=0x0;_0x20c3cf<_0x478828[_0x980d('0x7b')][_0x980d('0x39')];_0x20c3cf+=0x1){if(_0x478828['joins'][_0x20c3cf][_0x980d('0x42')]&&_[_0x980d('0x65')](_0x312ee6,_0x478828[_0x980d('0x7b')][_0x20c3cf][_0x980d('0x42')])&&_0x478828[_0x980d('0x7b')][_0x20c3cf]['parentKey']&&_0x478828['joins'][_0x20c3cf][_0x980d('0x7d')]&&_0x478828[_0x980d('0x7b')][_0x20c3cf][_0x980d('0x7f')]){_0x12704e[_0x478828[_0x980d('0x7b')][_0x20c3cf][_0x980d('0x42')]](_0x478828['joins'][_0x20c3cf][_0x980d('0x7d')],null,util['format'](_0x980d('0x7e'),_0x478828[_0x980d('0x73')],_0x478828['joins'][_0x20c3cf]['parentKey'],_0x478828[_0x980d('0x7b')][_0x20c3cf][_0x980d('0x7d')],_0x478828[_0x980d('0x7b')][_0x20c3cf][_0x980d('0x7f')]));}}}if(_0x478828[_0x980d('0x80')]){_0x478828[_0x980d('0x80')]=JSON[_0x980d('0x81')](_0x478828['conditions']);_0x12704e[_0x980d('0x3e')](_0x50619c(_0x478828['conditions'][_0x980d('0x6b')]));}_0x4e3443=_0x12704e['clone']();_0x12704e[_0x980d('0x20')](_0x558d2d);_0x12704e['offset'](0x0);logger[_0x980d('0x90')](_0x980d('0x83'),_0x12704e[_0x980d('0x84')]());return db['sequelize'][_0x980d('0x34')](_0x12704e['toString'](),{'type':db['sequelize']['QueryTypes'][_0x980d('0x87')]});}})['then'](function(_0x395947){if(!_0x395947[_0x980d('0x39')]){throw new db['Sequelize']['ValidationErrorItem'](_0x980d('0x91'),0xcc);}if(_0x3b0461[_0x980d('0x92')]===_0x980d('0x93')){return null;}var _0x54ba5c=_['merge'](_0x3b0461,{'name':_0x3b0461['fullPath']||_0x3b0461[_0x980d('0x2e')]||_0x478828[_0x980d('0x2e')],'basename':_0x5d3d0f,'savename':util['format'](_0x980d('0x94'),_0x3b0461['name']||_0x478828[_0x980d('0x2e')],require(_0x980d('0x95'))[_0x980d('0x96')](0x4),_0x3b0461['output']||_0x980d('0x97')),'reportId':_0x478828['id'],'reportType':'custom'});return db[_0x980d('0x98')][_0x980d('0x4d')](_0x54ba5c,{'raw':!![]});})[_0x980d('0x28')](function(_0x2233ae){if(_0x478828[_0x980d('0x73')]===_0x980d('0x99')){_0x4e3443[_0x980d('0x3e')](_0x478828[_0x980d('0x73')]+'.calldate\x20BETWEEN\x20?\x20AND\x20?',_0x3b0461[_0x980d('0x9a')],_0x3b0461['endDate']);}else{_0x4e3443[_0x980d('0x3e')](_0x478828[_0x980d('0x73')]+_0x980d('0x9b'),_0x3b0461[_0x980d('0x9a')],_0x3b0461[_0x980d('0x9c')]);}if(_0x2233ae){logger[_0x980d('0x9d')](_0x980d('0x9e'),_0x4e3443['toString']());require(_0x980d('0x9f'))[_0x980d('0xa0')](path[_0x980d('0x57')](__dirname,_0x980d('0xa1'),_0x2233ae['output']),[_0x2233ae['id'],_0x4e3443[_0x980d('0x84')](),path[_0x980d('0x57')](__dirname,_0x980d('0xa2'),_0x2233ae[_0x980d('0xa3')]),_0x5d3d0f]);return _0x2233ae;}else{var _0x1da303=squel[_0x980d('0x71')]();_0x1da303[_0x980d('0x72')]('('+_0x4e3443['toString']()+')',_0x980d('0xa4'));_0x1da303[_0x980d('0x44')]('COUNT(*)',_0x980d('0x1e'));_0x4e3443['limit'](_0x3b0461[_0x980d('0x20')]||_0x558d2d);_0x4e3443[_0x980d('0x1f')](_0x3b0461[_0x980d('0x1f')]||0x0);return db['sequelize'][_0x980d('0x34')](_0x1da303[_0x980d('0x84')](),{'type':db['sequelize'][_0x980d('0x86')][_0x980d('0x87')]})['then'](function(_0x18f68b){if(!_0x18f68b[_0x980d('0x39')]){_0x2ef286=0x0;}else{_0x2ef286=_0x18f68b[0x0][_0x980d('0x1e')]||0x0;}return db[_0x980d('0x85')][_0x980d('0x34')](_0x4e3443[_0x980d('0x84')](),{'type':db[_0x980d('0x85')]['QueryTypes'][_0x980d('0x87')]});})[_0x980d('0x28')](function(_0x217661){return{'rows':_0x217661||[],'count':_0x2ef286};});}});}exports[_0x980d('0xa5')]=function(_0x236595,_0x313915){return runReport(_0x236595[_0x980d('0x4a')],_0x236595[_0x980d('0x34')],_0x236595['options'])[_0x980d('0x28')](respondWithResult(_0x313915,null))[_0x980d('0x48')](handleError(_0x313915,null));};exports[_0x980d('0xa6')]=runReport;exports[_0x980d('0x34')]=function(_0xa478e0,_0x12e489){var _0x2d6378=0xa;var _0x32b8e3=[_0x980d('0x57'),_0x980d('0x58'),_0x980d('0x88'),_0x980d('0x59')];var _0x5f0242={'SUM':_0x980d('0x5a'),'COUNT':'COUNT(%s)','COUNT DISTINCT':_0x980d('0x5c'),'MAX':_0x980d('0x89'),'MIN':_0x980d('0x5d'),'AVG':'AVG(%s)','GROUP_CONCAT':_0x980d('0x5f'),'GROUP_CONCAT ASC':_0x980d('0x60'),'GROUP_CONCAT DESC':_0x980d('0x61')};var _0xee985e={'SEC_TO_TIME':'SEC_TO_TIME(%s)','DATE':_0x980d('0x8a'),'HOUR':_0x980d('0x63'),'ROUND':'ROUND(%s)','UNIX_TIMESTAMP':'UNIX_TIMESTAMP(%s)'};var _0x605632=function(_0x1d32f3){return!_[_0x980d('0x65')]([_0x980d('0x66'),_0x980d('0x67'),_0x980d('0x68'),_0x980d('0xa7')],_0x1d32f3);};var _0x4282ae=function(_0x36f08a){if(!_0x36f08a||!_0x36f08a[_0x980d('0x69')][_0x980d('0x39')]){return'';}for(var _0x2bac93='(',_0x401222=0x0;_0x401222<_0x36f08a['rules']['length'];_0x401222+=0x1){_0x401222>0x0&&(_0x2bac93+='\x20'+_0x36f08a[_0x980d('0x6a')]+'\x20');_0x2bac93+=_0x36f08a[_0x980d('0x69')][_0x401222]['group']?_0x4282ae(_0x36f08a[_0x980d('0x69')][_0x401222][_0x980d('0x6b')]):_0x36f08a[_0x980d('0x69')][_0x401222]['field']+'\x20'+_0x36f08a[_0x980d('0x69')][_0x401222][_0x980d('0x6c')]+(_0x605632(_0x36f08a[_0x980d('0x69')][_0x401222][_0x980d('0x6c')])?'\x20'+_0x36f08a[_0x980d('0x69')][_0x401222][_0x980d('0x8c')]:'');}return _0x2bac93+')';};var _0x2054c3={'where':{'id':_0xa478e0[_0x980d('0x4a')]['id']}},_0x4795a4,_0x1805c5,_0x52a195,_0x55f6ee,_0x3be07f;_0x2054c3=_['merge']({},_0x2054c3,_0xa478e0[_0x980d('0x45')]);return db[_0x980d('0x30')][_0x980d('0x4c')](_0x2054c3)['then'](function(_0x5180b9){if(_0x5180b9){_0x4795a4=_0x5180b9;return _0x5180b9[_0x980d('0x6d')]();}return null;})['then'](function(_0x2c206a){if(_0x2c206a){if(!_0x2c206a[_0x980d('0x39')]){throw new db[(_0x980d('0x8d'))][(_0x980d('0x6e'))](_0x980d('0x6f'),0x193);}_0x1805c5=_0x2c206a;return db[_0x980d('0x8e')][_0x980d('0x47')]({'raw':!![]});}return null;})[_0x980d('0x28')](function(_0x551504){if(_0x551504){_0x52a195=_['keyBy'](_0x551504,'id');var _0x22b127;var _0x1c074c=squel[_0x980d('0x71')]();_0x1c074c[_0x980d('0x72')](_0x4795a4[_0x980d('0x73')]);for(var _0x1f7ace=0x0;_0x1f7ace<_0x1805c5['length'];_0x1f7ace+=0x1){_0x22b127=_0x1805c5[_0x1f7ace][_0x980d('0x74')]?_0x52a195[_0x1805c5[_0x1f7ace]['MetricId']]['metric']:_0x1805c5[_0x1f7ace]['field'];_0x22b127=_0x1805c5[_0x1f7ace][_0x980d('0x75')]?_[_0x980d('0x76')](_0x5f0242[_0x1805c5[_0x1f7ace][_0x980d('0x75')]],'%s',_0x22b127):_0x22b127;_0x22b127=_0x1805c5[_0x1f7ace][_0x980d('0x77')]?_[_0x980d('0x76')](_0xee985e[_0x1805c5[_0x1f7ace][_0x980d('0x77')]],'%s',_0x22b127):_0x22b127;if(_0x1805c5[_0x1f7ace][_0x980d('0x78')]){_0x1c074c['group'](_0x22b127);}_0x1805c5[_0x1f7ace][_0x980d('0x79')]&&_0x1c074c[_0x980d('0x3c')](_0x22b127,_0x1805c5[_0x1f7ace][_0x980d('0x79')]===_0x980d('0x8f')?![]:!![]);_0x1c074c[_0x980d('0x44')](_0x22b127,_0x1805c5[_0x1f7ace]['alias']||_0x22b127);}if(_0x4795a4[_0x980d('0x7b')]){_0x4795a4[_0x980d('0x7b')]=JSON[_0x980d('0x81')](_0x4795a4['joins']);for(var _0x10e3b6=0x0;_0x10e3b6<_0x4795a4[_0x980d('0x7b')][_0x980d('0x39')];_0x10e3b6+=0x1){if(_0x4795a4['joins'][_0x10e3b6][_0x980d('0x42')]&&_[_0x980d('0x65')](_0x32b8e3,_0x4795a4[_0x980d('0x7b')][_0x10e3b6][_0x980d('0x42')])&&_0x4795a4[_0x980d('0x7b')][_0x10e3b6][_0x980d('0x7c')]&&_0x4795a4['joins'][_0x10e3b6][_0x980d('0x7d')]&&_0x4795a4[_0x980d('0x7b')][_0x10e3b6][_0x980d('0x7f')]){_0x1c074c[_0x4795a4[_0x980d('0x7b')][_0x10e3b6][_0x980d('0x42')]](_0x4795a4[_0x980d('0x7b')][_0x10e3b6][_0x980d('0x7d')],null,util[_0x980d('0x77')]('%s.%s\x20=\x20%s.%s',_0x4795a4['table'],_0x4795a4[_0x980d('0x7b')][_0x10e3b6][_0x980d('0x7c')],_0x4795a4[_0x980d('0x7b')][_0x10e3b6][_0x980d('0x7d')],_0x4795a4[_0x980d('0x7b')][_0x10e3b6][_0x980d('0x7f')]));}}}if(_0x4795a4[_0x980d('0x80')]){_0x4795a4[_0x980d('0x80')]=JSON[_0x980d('0x81')](_0x4795a4['conditions']);_0x1c074c[_0x980d('0x3e')](_0x4282ae(_0x4795a4[_0x980d('0x80')][_0x980d('0x6b')]));}_0x3be07f=_0x1c074c[_0x980d('0x82')]();_0x1c074c[_0x980d('0x20')](_0x2d6378);_0x1c074c['offset'](0x0);logger[_0x980d('0x90')](_0x980d('0x83'),_0x1c074c[_0x980d('0x84')]());return db[_0x980d('0x85')][_0x980d('0x34')](_0x1c074c[_0x980d('0x84')](),{'type':db[_0x980d('0x85')][_0x980d('0x86')][_0x980d('0x87')]});}})[_0x980d('0x28')](function(){return{'sql':_0x3be07f[_0x980d('0x84')]()};})[_0x980d('0x28')](respondWithResult(_0x12e489,null))[_0x980d('0x48')](handleError(_0x12e489,null));};
\ No newline at end of file
+var _0x1a77=['condition','value','Sequelize','ValidationErrorItem','AnalyticMetric','select','from','table','MetricId','metric','function','replace','format','orderBy','alias','parse','joins','foreignTable','foreignKey','parentKey','conditions','debug','Limited\x20Query:','toString','sequelize','QueryTypes','SELECT','left_join','COUNT(DISTINCT\x20%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)','getFields','Please\x20insert\x20at\x20least\x20one\x20field','keyBy','groupBy','DESC','%s.%s\x20=\x20%s.%s','clone','No\x20available\x20data','output','web','fullPath','%s-%s.%s','randomstring','generate','csv','AnalyticExtractedReport','cdr','endDate','info','Run\x20Query:','child_process','fork','../../files/reports','savename','countTable','COUNT(*)','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','then','destroy','get','CustomReports','UserProfileResource','error','stack','name','send','index','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','AnalyticCustomReport','include','findAll','rows','catch','show','params','rawAttributes','includeAll','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','Reports','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','find','preview','join','right_join','cross_join','SUM(%s)','COUNT(%s)','MAX(%s)','MIN(%s)','AVG(%s)','GROUP_CONCAT(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','SEC_TO_TIME(%s)','DATE(%s)','HOUR(%s)','ROUND(%s)','UNIX_TIMESTAMP(%s)','includes','IS\x20NULL','IS\x20NOT\x20NULL','IS\x20EMPTY','IS\x20NOT\x20EMPTY','rules','operator','group'];(function(_0x592216,_0x35cdae){var _0x11a07d=function(_0x369dd6){while(--_0x369dd6){_0x592216['push'](_0x592216['shift']());}};_0x11a07d(++_0x35cdae);}(_0x1a77,0xe0));var _0x71a7=function(_0x3e0f41,_0x47e4b6){_0x3e0f41=_0x3e0f41-0x0;var _0x2b2286=_0x1a77[_0x3e0f41];return _0x2b2286;};'use strict';var pdf=require(_0x71a7('0x0'));var emlformat=require(_0x71a7('0x1'));var rimraf=require(_0x71a7('0x2'));var zipdir=require(_0x71a7('0x3'));var jsonpatch=require(_0x71a7('0x4'));var rp=require(_0x71a7('0x5'));var moment=require(_0x71a7('0x6'));var BPromise=require(_0x71a7('0x7'));var Mustache=require(_0x71a7('0x8'));var util=require(_0x71a7('0x9'));var path=require(_0x71a7('0xa'));var sox=require(_0x71a7('0xb'));var csv=require(_0x71a7('0xc'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x71a7('0xd'));var squel=require(_0x71a7('0xe'));var crypto=require(_0x71a7('0xf'));var jsforce=require(_0x71a7('0x10'));var deskjs=require(_0x71a7('0x11'));var toCsv=require(_0x71a7('0xc'));var querystring=require(_0x71a7('0x12'));var Papa=require('papaparse');var Redis=require(_0x71a7('0x13'));var authService=require(_0x71a7('0x14'));var qs=require(_0x71a7('0x15'));var hardwareService=require(_0x71a7('0x16'));var logger=require(_0x71a7('0x17'))('api');var utils=require(_0x71a7('0x18'));var config=require('../../config/environment');var db=require(_0x71a7('0x19'))['db'];function respondWithStatusCode(_0x10ff04,_0x257dc8){_0x257dc8=_0x257dc8||0xcc;return function(_0x9c0066){if(_0x9c0066){return _0x10ff04[_0x71a7('0x1a')](_0x257dc8);}return _0x10ff04[_0x71a7('0x1b')](_0x257dc8)[_0x71a7('0x1c')]();};}function respondWithResult(_0x122f11,_0xea0859){_0xea0859=_0xea0859||0xc8;return function(_0x5140a8){if(_0x5140a8){return _0x122f11[_0x71a7('0x1b')](_0xea0859)['json'](_0x5140a8);}};}function respondWithFilteredResult(_0x20022e,_0x4ae5c1){return function(_0x5f5df0){if(_0x5f5df0){var _0x17e829=_0x5f5df0[_0x71a7('0x1d')],_0x5d2ce0=_0x4ae5c1[_0x71a7('0x1e')],_0x592d9b=_0x4ae5c1[_0x71a7('0x1e')]+_0x4ae5c1[_0x71a7('0x1f')],_0x8ddb00;if(_0x592d9b>=_0x17e829){_0x592d9b=_0x17e829;_0x8ddb00=0xc8;}else{_0x8ddb00=0xce;}_0x20022e[_0x71a7('0x1b')](_0x8ddb00);return _0x20022e[_0x71a7('0x20')](_0x71a7('0x21'),_0x5d2ce0+'-'+_0x592d9b+'/'+_0x17e829)[_0x71a7('0x22')](_0x5f5df0);}return null;};}function patchUpdates(_0x39b064){return function(_0x3ed864){try{jsonpatch[_0x71a7('0x23')](_0x3ed864,_0x39b064,!![]);}catch(_0x1bc625){return BPromise['reject'](_0x1bc625);}return _0x3ed864['save']();};}function saveUpdates(_0x3c7867,_0x58ad46){return function(_0x361bd2){if(_0x361bd2){return _0x361bd2['update'](_0x3c7867)[_0x71a7('0x24')](function(_0x3e40b9){return _0x3e40b9;});}return null;};}function removeEntity(_0x258b1f,_0x549eb8){return function(_0x2436d2){if(_0x2436d2){return _0x2436d2[_0x71a7('0x25')]()[_0x71a7('0x24')](function(){var _0x292634=_0x2436d2[_0x71a7('0x26')]({'plain':!![]});var _0x484e7a=_0x71a7('0x27');return db[_0x71a7('0x28')][_0x71a7('0x25')]({'where':{'type':_0x484e7a,'resourceId':_0x292634['id']}})[_0x71a7('0x24')](function(){return _0x2436d2;});})[_0x71a7('0x24')](function(){_0x258b1f[_0x71a7('0x1b')](0xcc)[_0x71a7('0x1c')]();});}};}function handleEntityNotFound(_0x5a8582,_0x4b098e){return function(_0x1c73c2){if(!_0x1c73c2){_0x5a8582[_0x71a7('0x1a')](0x194);}return _0x1c73c2;};}function handleError(_0x4094aa,_0x4a4a6e){_0x4a4a6e=_0x4a4a6e||0x1f4;return function(_0x525428){logger[_0x71a7('0x29')](_0x525428[_0x71a7('0x2a')]);if(_0x525428[_0x71a7('0x2b')]){delete _0x525428[_0x71a7('0x2b')];}_0x4094aa['status'](_0x4a4a6e)[_0x71a7('0x2c')](_0x525428);};}exports[_0x71a7('0x2d')]=function(_0x1c7e70,_0x539adc){var _0x4fa745={},_0x1cd295={},_0x5253dd={'count':0x0,'rows':[]};var _0x546c24=db['AnalyticCustomReport']['rawAttributes'];_0x1cd295[_0x71a7('0x2e')]=_['keys'](_0x546c24);_0x1cd295['query']=_[_0x71a7('0x2f')](_0x1c7e70[_0x71a7('0x30')]);_0x1cd295[_0x71a7('0x31')]=_['intersection'](_0x1cd295[_0x71a7('0x2e')],_0x1cd295[_0x71a7('0x30')]);_0x4fa745[_0x71a7('0x32')]=_[_0x71a7('0x33')](_0x1cd295[_0x71a7('0x2e')],qs[_0x71a7('0x34')](_0x1c7e70['query']['fields']));_0x4fa745[_0x71a7('0x32')]=_0x4fa745['attributes'][_0x71a7('0x35')]?_0x4fa745[_0x71a7('0x32')]:_0x1cd295['model'];if(!_0x1c7e70['query'][_0x71a7('0x36')](_0x71a7('0x37'))){_0x4fa745['limit']=qs[_0x71a7('0x1f')](_0x1c7e70[_0x71a7('0x30')]['limit']);_0x4fa745[_0x71a7('0x1e')]=qs[_0x71a7('0x1e')](_0x1c7e70[_0x71a7('0x30')][_0x71a7('0x1e')]);}_0x4fa745[_0x71a7('0x38')]=qs[_0x71a7('0x39')](_0x1c7e70[_0x71a7('0x30')][_0x71a7('0x39')]);_0x4fa745[_0x71a7('0x3a')]=qs[_0x71a7('0x31')](_[_0x71a7('0x3b')](_0x1c7e70['query'],_0x1cd295[_0x71a7('0x31')]));if(_0x1c7e70[_0x71a7('0x30')][_0x71a7('0x3c')]){_0x4fa745[_0x71a7('0x3a')]=_[_0x71a7('0x3d')](_0x4fa745['where'],{'$or':_[_0x71a7('0x3e')](_0x546c24,function(_0x542c86){if(_0x542c86[_0x71a7('0x3f')][_0x71a7('0x40')]!==_0x71a7('0x41')){var _0x3f3b16={};_0x3f3b16[_0x542c86[_0x71a7('0x42')]]={'$like':'%'+_0x1c7e70[_0x71a7('0x30')][_0x71a7('0x3c')]+'%'};return _0x3f3b16;}})});}_0x4fa745=_[_0x71a7('0x3d')]({},_0x4fa745,_0x1c7e70[_0x71a7('0x43')]);var _0x26f8c1={'where':_0x4fa745[_0x71a7('0x3a')]};return db[_0x71a7('0x44')][_0x71a7('0x1d')](_0x26f8c1)['then'](function(_0x33de04){_0x5253dd[_0x71a7('0x1d')]=_0x33de04;if(_0x1c7e70[_0x71a7('0x30')]['includeAll']){_0x4fa745[_0x71a7('0x45')]=[{'all':!![]}];}return db[_0x71a7('0x44')][_0x71a7('0x46')](_0x4fa745);})[_0x71a7('0x24')](function(_0x45aace){_0x5253dd[_0x71a7('0x47')]=_0x45aace;return _0x5253dd;})[_0x71a7('0x24')](respondWithFilteredResult(_0x539adc,_0x4fa745))[_0x71a7('0x48')](handleError(_0x539adc,null));};exports[_0x71a7('0x49')]=function(_0x2d3313,_0x553b86){var _0x42c10f={'raw':![],'where':{'id':_0x2d3313[_0x71a7('0x4a')]['id']}},_0x255892={};_0x255892[_0x71a7('0x2e')]=_[_0x71a7('0x2f')](db[_0x71a7('0x44')][_0x71a7('0x4b')]);_0x255892[_0x71a7('0x30')]=_['keys'](_0x2d3313[_0x71a7('0x30')]);_0x255892[_0x71a7('0x31')]=_[_0x71a7('0x33')](_0x255892[_0x71a7('0x2e')],_0x255892['query']);_0x42c10f[_0x71a7('0x32')]=_[_0x71a7('0x33')](_0x255892[_0x71a7('0x2e')],qs['fields'](_0x2d3313[_0x71a7('0x30')]['fields']));_0x42c10f[_0x71a7('0x32')]=_0x42c10f['attributes']['length']?_0x42c10f[_0x71a7('0x32')]:_0x255892[_0x71a7('0x2e')];if(_0x2d3313[_0x71a7('0x30')][_0x71a7('0x4c')]){_0x42c10f[_0x71a7('0x45')]=[{'all':!![]}];}_0x42c10f=_[_0x71a7('0x3d')]({},_0x42c10f,_0x2d3313['options']);return db[_0x71a7('0x44')]['find'](_0x42c10f)[_0x71a7('0x24')](handleEntityNotFound(_0x553b86,null))['then'](respondWithResult(_0x553b86,null))[_0x71a7('0x48')](handleError(_0x553b86,null));};exports[_0x71a7('0x4d')]=function(_0x26adeb,_0x4c86a1){return db['AnalyticCustomReport'][_0x71a7('0x4d')](_0x26adeb[_0x71a7('0x4e')],{})[_0x71a7('0x24')](function(_0x13a278){var _0x2630df=_0x26adeb['user'][_0x71a7('0x26')]({'plain':!![]});if(!_0x2630df)throw new Error(_0x71a7('0x4f'));if(_0x2630df[_0x71a7('0x50')]===_0x71a7('0x51')){var _0xd29c05=_0x13a278[_0x71a7('0x26')]({'plain':!![]});var _0x1fad71=_0x71a7('0x52');return db[_0x71a7('0x53')]['find']({'where':{'name':_0x1fad71,'userProfileId':_0x2630df['userProfileId']},'raw':!![]})[_0x71a7('0x24')](function(_0xd140ac){if(_0xd140ac&&_0xd140ac[_0x71a7('0x54')]===0x0){return db['UserProfileResource'][_0x71a7('0x4d')]({'name':_0xd29c05[_0x71a7('0x2b')],'resourceId':_0xd29c05['id'],'type':_0x71a7('0x27'),'sectionId':_0xd140ac['id']},{})['then'](function(){return _0x13a278;});}else{return _0x13a278;}})[_0x71a7('0x48')](function(_0x1d0a45){logger[_0x71a7('0x29')](_0x71a7('0x55'),_0x1d0a45);throw _0x1d0a45;});}return _0x13a278;})[_0x71a7('0x24')](respondWithResult(_0x4c86a1,0xc9))[_0x71a7('0x48')](handleError(_0x4c86a1,null));};exports[_0x71a7('0x56')]=function(_0x1405c0,_0x2f9c17){if(_0x1405c0[_0x71a7('0x4e')]['id']){delete _0x1405c0[_0x71a7('0x4e')]['id'];}return db['AnalyticCustomReport'][_0x71a7('0x57')]({'where':{'id':_0x1405c0[_0x71a7('0x4a')]['id']}})[_0x71a7('0x24')](handleEntityNotFound(_0x2f9c17,null))[_0x71a7('0x24')](saveUpdates(_0x1405c0[_0x71a7('0x4e')],null))[_0x71a7('0x24')](respondWithResult(_0x2f9c17,null))[_0x71a7('0x48')](handleError(_0x2f9c17,null));};exports['destroy']=function(_0x4ff433,_0x46f60a){return db[_0x71a7('0x44')][_0x71a7('0x57')]({'where':{'id':_0x4ff433['params']['id']}})[_0x71a7('0x24')](handleEntityNotFound(_0x46f60a,null))[_0x71a7('0x24')](removeEntity(_0x46f60a,null))[_0x71a7('0x48')](handleError(_0x46f60a,null));};exports[_0x71a7('0x58')]=function(_0x53b78d,_0x327791){var _0x16019a=0xa;var _0x523e2d=[_0x71a7('0x59'),'left_join',_0x71a7('0x5a'),_0x71a7('0x5b')];var _0x5a74a0={'SUM':_0x71a7('0x5c'),'COUNT':_0x71a7('0x5d'),'COUNT DISTINCT':'COUNT(DISTINCT\x20%s)','MAX':_0x71a7('0x5e'),'MIN':_0x71a7('0x5f'),'AVG':_0x71a7('0x60'),'GROUP_CONCAT':_0x71a7('0x61'),'GROUP_CONCAT ASC':_0x71a7('0x62'),'GROUP_CONCAT DESC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)'};var _0xbabac6={'SEC_TO_TIME':_0x71a7('0x63'),'DATE':_0x71a7('0x64'),'HOUR':_0x71a7('0x65'),'ROUND':_0x71a7('0x66'),'UNIX_TIMESTAMP':_0x71a7('0x67')};var _0x32c546=function(_0x24d60c){return!_[_0x71a7('0x68')]([_0x71a7('0x69'),_0x71a7('0x6a'),_0x71a7('0x6b'),_0x71a7('0x6c')],_0x24d60c);};var _0x9266e5=function(_0x3c1f8d){if(!_0x3c1f8d||!_0x3c1f8d[_0x71a7('0x6d')][_0x71a7('0x35')]){return'';}for(var _0x595830='(',_0x3d04aa=0x0;_0x3d04aa<_0x3c1f8d[_0x71a7('0x6d')][_0x71a7('0x35')];_0x3d04aa+=0x1){_0x3d04aa>0x0&&(_0x595830+='\x20'+_0x3c1f8d[_0x71a7('0x6e')]+'\x20');_0x595830+=_0x3c1f8d[_0x71a7('0x6d')][_0x3d04aa][_0x71a7('0x6f')]?_0x9266e5(_0x3c1f8d['rules'][_0x3d04aa][_0x71a7('0x6f')]):_0x3c1f8d['rules'][_0x3d04aa][_0x71a7('0x42')]+'\x20'+_0x3c1f8d[_0x71a7('0x6d')][_0x3d04aa][_0x71a7('0x70')]+(_0x32c546(_0x3c1f8d[_0x71a7('0x6d')][_0x3d04aa]['condition'])?'\x20'+_0x3c1f8d[_0x71a7('0x6d')][_0x3d04aa][_0x71a7('0x71')]:'');}return _0x595830+')';};var _0x5b352a={'where':{'id':_0x53b78d[_0x71a7('0x4a')]['id']}},_0x4443fe,_0x27b423,_0x5a6232,_0xf3c37,_0x2611f6;_0x5b352a=_['merge']({},_0x5b352a,_0x53b78d['options']);return db['AnalyticCustomReport'][_0x71a7('0x57')](_0x5b352a)[_0x71a7('0x24')](function(_0x29d833){if(_0x29d833){_0x4443fe=_0x29d833;return _0x29d833['getFields']();}return null;})[_0x71a7('0x24')](function(_0xef079d){if(_0xef079d){if(!_0xef079d[_0x71a7('0x35')]){throw new db[(_0x71a7('0x72'))][(_0x71a7('0x73'))]('Please\x20insert\x20at\x20least\x20one\x20field',0x193);}_0x27b423=_0xef079d;return db[_0x71a7('0x74')][_0x71a7('0x46')]({'raw':!![]});}return null;})['then'](function(_0x558b7b){if(_0x558b7b){_0x5a6232=_['keyBy'](_0x558b7b,'id');var _0x21bac7;var _0x225c85=squel[_0x71a7('0x75')]();_0x225c85[_0x71a7('0x76')](_0x4443fe[_0x71a7('0x77')]);for(var _0x52744a=0x0;_0x52744a<_0x27b423[_0x71a7('0x35')];_0x52744a+=0x1){_0x21bac7=_0x27b423[_0x52744a][_0x71a7('0x78')]?_0x5a6232[_0x27b423[_0x52744a][_0x71a7('0x78')]][_0x71a7('0x79')]:_0x27b423[_0x52744a][_0x71a7('0x42')];_0x21bac7=_0x27b423[_0x52744a][_0x71a7('0x7a')]?_[_0x71a7('0x7b')](_0x5a74a0[_0x27b423[_0x52744a][_0x71a7('0x7a')]],'%s',_0x21bac7):_0x21bac7;_0x21bac7=_0x27b423[_0x52744a]['format']?_[_0x71a7('0x7b')](_0xbabac6[_0x27b423[_0x52744a][_0x71a7('0x7c')]],'%s',_0x21bac7):_0x21bac7;if(_0x27b423[_0x52744a]['groupBy']){_0x225c85[_0x71a7('0x6f')](_0x21bac7);}_0x27b423[_0x52744a]['orderBy']&&_0x225c85[_0x71a7('0x38')](_0x21bac7,_0x27b423[_0x52744a][_0x71a7('0x7d')]==='DESC'?![]:!![]);_0x225c85[_0x71a7('0x42')](_0x21bac7,_0x27b423[_0x52744a][_0x71a7('0x7e')]||_0x21bac7);}if(_0x4443fe['joins']){_0x4443fe['joins']=JSON[_0x71a7('0x7f')](_0x4443fe['joins']);for(var _0x42dbec=0x0;_0x42dbec<_0x4443fe['joins'][_0x71a7('0x35')];_0x42dbec+=0x1){if(_0x4443fe[_0x71a7('0x80')][_0x42dbec][_0x71a7('0x3f')]&&_[_0x71a7('0x68')](_0x523e2d,_0x4443fe[_0x71a7('0x80')][_0x42dbec][_0x71a7('0x3f')])&&_0x4443fe[_0x71a7('0x80')][_0x42dbec]['parentKey']&&_0x4443fe[_0x71a7('0x80')][_0x42dbec][_0x71a7('0x81')]&&_0x4443fe['joins'][_0x42dbec][_0x71a7('0x82')]){_0x225c85[_0x4443fe[_0x71a7('0x80')][_0x42dbec][_0x71a7('0x3f')]](_0x4443fe[_0x71a7('0x80')][_0x42dbec][_0x71a7('0x81')],null,util[_0x71a7('0x7c')]('%s.%s\x20=\x20%s.%s',_0x4443fe[_0x71a7('0x77')],_0x4443fe[_0x71a7('0x80')][_0x42dbec][_0x71a7('0x83')],_0x4443fe[_0x71a7('0x80')][_0x42dbec][_0x71a7('0x81')],_0x4443fe[_0x71a7('0x80')][_0x42dbec][_0x71a7('0x82')]));}}}if(_0x4443fe[_0x71a7('0x84')]){_0x4443fe[_0x71a7('0x84')]=JSON[_0x71a7('0x7f')](_0x4443fe['conditions']);_0x225c85['where'](_0x9266e5(_0x4443fe['conditions'][_0x71a7('0x6f')]));}_0x2611f6=_0x225c85['clone']();_0x225c85[_0x71a7('0x1f')](_0x16019a);_0x225c85[_0x71a7('0x1e')](0x0);logger[_0x71a7('0x85')](_0x71a7('0x86'),_0x225c85[_0x71a7('0x87')]());return db[_0x71a7('0x88')][_0x71a7('0x30')](_0x225c85[_0x71a7('0x87')](),{'type':db[_0x71a7('0x88')][_0x71a7('0x89')][_0x71a7('0x8a')]});}})[_0x71a7('0x24')](respondWithResult(_0x327791,null))[_0x71a7('0x48')](handleError(_0x327791,null));};function runReport(_0x15fc79,_0x12dae9,_0x5cc775){var _0x4ca37b=_0x12dae9[_0x71a7('0x2b')];var _0x45ff50=0xa;var _0x66e4c1=[_0x71a7('0x59'),_0x71a7('0x8b'),'right_join',_0x71a7('0x5b')];var _0x8c33bc={'SUM':'SUM(%s)','COUNT':_0x71a7('0x5d'),'COUNT DISTINCT':_0x71a7('0x8c'),'MAX':_0x71a7('0x5e'),'MIN':_0x71a7('0x5f'),'AVG':_0x71a7('0x60'),'GROUP_CONCAT':_0x71a7('0x61'),'GROUP_CONCAT ASC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT DESC':_0x71a7('0x8d')};var _0x2a3c1f={'SEC_TO_TIME':_0x71a7('0x63'),'DATE':_0x71a7('0x64'),'HOUR':_0x71a7('0x65'),'ROUND':_0x71a7('0x66'),'UNIX_TIMESTAMP':_0x71a7('0x67')};var _0x3c10e2=function(_0x275e60){return!_[_0x71a7('0x68')]([_0x71a7('0x69'),_0x71a7('0x6a'),_0x71a7('0x6b'),_0x71a7('0x6c')],_0x275e60);};var _0x2cac48=function(_0x3ee565){if(!_0x3ee565||!_0x3ee565[_0x71a7('0x6d')]['length']){return'';}for(var _0x1a0385='(',_0x1cf33b=0x0;_0x1cf33b<_0x3ee565['rules']['length'];_0x1cf33b+=0x1){_0x1cf33b>0x0&&(_0x1a0385+='\x20'+_0x3ee565[_0x71a7('0x6e')]+'\x20');_0x1a0385+=_0x3ee565['rules'][_0x1cf33b][_0x71a7('0x6f')]?_0x2cac48(_0x3ee565[_0x71a7('0x6d')][_0x1cf33b]['group']):_0x3ee565['rules'][_0x1cf33b][_0x71a7('0x42')]+'\x20'+_0x3ee565[_0x71a7('0x6d')][_0x1cf33b][_0x71a7('0x70')]+(_0x3c10e2(_0x3ee565[_0x71a7('0x6d')][_0x1cf33b]['condition'])?'\x20'+_0x3ee565[_0x71a7('0x6d')][_0x1cf33b]['value']:'');}return _0x1a0385+')';};var _0x22a25f={'where':{'id':_0x15fc79['id']}},_0x4f935d,_0x2232ff,_0x355c1f,_0x1fe407,_0x49a74b;_0x22a25f=_[_0x71a7('0x3d')]({},_0x22a25f,_0x5cc775);return db[_0x71a7('0x44')][_0x71a7('0x57')](_0x22a25f)['then'](function(_0xd497ab){if(_0xd497ab){_0x4f935d=_0xd497ab;return _0xd497ab[_0x71a7('0x8e')]();}return null;})[_0x71a7('0x24')](function(_0x1ea1c4){if(_0x1ea1c4){if(!_0x1ea1c4[_0x71a7('0x35')]){throw new db['Sequelize'][(_0x71a7('0x73'))](_0x71a7('0x8f'),0x193);}_0x2232ff=_0x1ea1c4;return db[_0x71a7('0x74')][_0x71a7('0x46')]({'raw':!![]});}return null;})[_0x71a7('0x24')](function(_0x2f212a){if(_0x2f212a){_0x355c1f=_[_0x71a7('0x90')](_0x2f212a,'id');var _0x422b7b;var _0x21d900=squel[_0x71a7('0x75')]();_0x21d900[_0x71a7('0x76')](_0x4f935d[_0x71a7('0x77')]);for(var _0x2f1563=0x0;_0x2f1563<_0x2232ff[_0x71a7('0x35')];_0x2f1563+=0x1){_0x422b7b=_0x2232ff[_0x2f1563][_0x71a7('0x78')]?_0x355c1f[_0x2232ff[_0x2f1563]['MetricId']][_0x71a7('0x79')]:_0x2232ff[_0x2f1563][_0x71a7('0x42')];_0x422b7b=_0x2232ff[_0x2f1563][_0x71a7('0x7a')]?_['replace'](_0x8c33bc[_0x2232ff[_0x2f1563]['function']],'%s',_0x422b7b):_0x422b7b;_0x422b7b=_0x2232ff[_0x2f1563][_0x71a7('0x7c')]?_[_0x71a7('0x7b')](_0x2a3c1f[_0x2232ff[_0x2f1563]['format']],'%s',_0x422b7b):_0x422b7b;if(_0x2232ff[_0x2f1563][_0x71a7('0x91')]){_0x21d900['group'](_0x422b7b);}_0x2232ff[_0x2f1563][_0x71a7('0x7d')]&&_0x21d900[_0x71a7('0x38')](_0x422b7b,_0x2232ff[_0x2f1563]['orderBy']===_0x71a7('0x92')?![]:!![]);_0x21d900['field'](_0x422b7b,_0x2232ff[_0x2f1563][_0x71a7('0x7e')]||_0x422b7b);}if(_0x4f935d[_0x71a7('0x80')]){_0x4f935d[_0x71a7('0x80')]=JSON[_0x71a7('0x7f')](_0x4f935d[_0x71a7('0x80')]);for(var _0x5ca3bb=0x0;_0x5ca3bb<_0x4f935d[_0x71a7('0x80')]['length'];_0x5ca3bb+=0x1){if(_0x4f935d[_0x71a7('0x80')][_0x5ca3bb][_0x71a7('0x3f')]&&_['includes'](_0x66e4c1,_0x4f935d['joins'][_0x5ca3bb][_0x71a7('0x3f')])&&_0x4f935d['joins'][_0x5ca3bb][_0x71a7('0x83')]&&_0x4f935d['joins'][_0x5ca3bb]['foreignTable']&&_0x4f935d[_0x71a7('0x80')][_0x5ca3bb][_0x71a7('0x82')]){_0x21d900[_0x4f935d[_0x71a7('0x80')][_0x5ca3bb]['type']](_0x4f935d[_0x71a7('0x80')][_0x5ca3bb][_0x71a7('0x81')],null,util[_0x71a7('0x7c')](_0x71a7('0x93'),_0x4f935d[_0x71a7('0x77')],_0x4f935d['joins'][_0x5ca3bb][_0x71a7('0x83')],_0x4f935d[_0x71a7('0x80')][_0x5ca3bb]['foreignTable'],_0x4f935d[_0x71a7('0x80')][_0x5ca3bb]['foreignKey']));}}}if(_0x4f935d[_0x71a7('0x84')]){_0x4f935d[_0x71a7('0x84')]=JSON[_0x71a7('0x7f')](_0x4f935d[_0x71a7('0x84')]);_0x21d900[_0x71a7('0x3a')](_0x2cac48(_0x4f935d[_0x71a7('0x84')][_0x71a7('0x6f')]));}_0x49a74b=_0x21d900[_0x71a7('0x94')]();_0x21d900['limit'](_0x45ff50);_0x21d900[_0x71a7('0x1e')](0x0);logger[_0x71a7('0x85')]('Limited\x20Query:',_0x21d900[_0x71a7('0x87')]());return db['sequelize'][_0x71a7('0x30')](_0x21d900['toString'](),{'type':db[_0x71a7('0x88')][_0x71a7('0x89')]['SELECT']});}})[_0x71a7('0x24')](function(_0x420609){if(!_0x420609[_0x71a7('0x35')]){throw new db[(_0x71a7('0x72'))][(_0x71a7('0x73'))](_0x71a7('0x95'),0xcc);}if(_0x12dae9[_0x71a7('0x96')]===_0x71a7('0x97')){return null;}var _0x520277=_['merge'](_0x12dae9,{'name':_0x12dae9[_0x71a7('0x98')]||_0x12dae9[_0x71a7('0x2b')]||_0x4f935d[_0x71a7('0x2b')],'basename':_0x4ca37b,'savename':util['format'](_0x71a7('0x99'),_0x12dae9[_0x71a7('0x2b')]||_0x4f935d[_0x71a7('0x2b')],require(_0x71a7('0x9a'))[_0x71a7('0x9b')](0x4),_0x12dae9[_0x71a7('0x96')]||_0x71a7('0x9c')),'reportId':_0x4f935d['id'],'reportType':'custom'});return db[_0x71a7('0x9d')]['create'](_0x520277,{'raw':!![]});})['then'](function(_0x2deaba){if(_0x4f935d[_0x71a7('0x77')]===_0x71a7('0x9e')){_0x49a74b['where'](_0x4f935d[_0x71a7('0x77')]+'.calldate\x20BETWEEN\x20?\x20AND\x20?',_0x12dae9['startDate'],_0x12dae9[_0x71a7('0x9f')]);}else{_0x49a74b[_0x71a7('0x3a')](_0x4f935d[_0x71a7('0x77')]+'.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x12dae9['startDate'],_0x12dae9[_0x71a7('0x9f')]);}if(_0x2deaba){logger[_0x71a7('0xa0')](_0x71a7('0xa1'),_0x49a74b['toString']());require(_0x71a7('0xa2'))[_0x71a7('0xa3')](path[_0x71a7('0x59')](__dirname,'../../components/export/',_0x2deaba[_0x71a7('0x96')]),[_0x2deaba['id'],_0x49a74b[_0x71a7('0x87')](),path[_0x71a7('0x59')](__dirname,_0x71a7('0xa4'),_0x2deaba[_0x71a7('0xa5')]),_0x4ca37b]);return _0x2deaba;}else{var _0x202a69=squel[_0x71a7('0x75')]();_0x202a69[_0x71a7('0x76')]('('+_0x49a74b[_0x71a7('0x87')]()+')',_0x71a7('0xa6'));_0x202a69[_0x71a7('0x42')](_0x71a7('0xa7'),'count');_0x49a74b[_0x71a7('0x1f')](_0x12dae9[_0x71a7('0x1f')]||_0x45ff50);_0x49a74b[_0x71a7('0x1e')](_0x12dae9[_0x71a7('0x1e')]||0x0);return db[_0x71a7('0x88')][_0x71a7('0x30')](_0x202a69[_0x71a7('0x87')](),{'type':db['sequelize'][_0x71a7('0x89')][_0x71a7('0x8a')]})[_0x71a7('0x24')](function(_0x20f89c){if(!_0x20f89c[_0x71a7('0x35')]){_0x1fe407=0x0;}else{_0x1fe407=_0x20f89c[0x0][_0x71a7('0x1d')]||0x0;}return db['sequelize'][_0x71a7('0x30')](_0x49a74b['toString'](),{'type':db[_0x71a7('0x88')][_0x71a7('0x89')]['SELECT']});})[_0x71a7('0x24')](function(_0x2a038c){return{'rows':_0x2a038c||[],'count':_0x1fe407};});}});}exports['run']=function(_0x518538,_0xcaecc1){return runReport(_0x518538[_0x71a7('0x4a')],_0x518538[_0x71a7('0x30')],_0x518538[_0x71a7('0x43')])[_0x71a7('0x24')](respondWithResult(_0xcaecc1,null))[_0x71a7('0x48')](handleError(_0xcaecc1,null));};exports['runReport']=runReport;exports[_0x71a7('0x30')]=function(_0x1a42e8,_0x47e075){var _0x35d855=0xa;var _0x4898e7=[_0x71a7('0x59'),_0x71a7('0x8b'),_0x71a7('0x5a'),_0x71a7('0x5b')];var _0x1ac170={'SUM':_0x71a7('0x5c'),'COUNT':'COUNT(%s)','COUNT DISTINCT':_0x71a7('0x8c'),'MAX':_0x71a7('0x5e'),'MIN':_0x71a7('0x5f'),'AVG':_0x71a7('0x60'),'GROUP_CONCAT':_0x71a7('0x61'),'GROUP_CONCAT ASC':_0x71a7('0x62'),'GROUP_CONCAT DESC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)'};var _0x104079={'SEC_TO_TIME':'SEC_TO_TIME(%s)','DATE':_0x71a7('0x64'),'HOUR':_0x71a7('0x65'),'ROUND':_0x71a7('0x66'),'UNIX_TIMESTAMP':_0x71a7('0x67')};var _0x1c5c5f=function(_0x132618){return!_[_0x71a7('0x68')]([_0x71a7('0x69'),_0x71a7('0x6a'),'IS\x20EMPTY','IS\x20NOT\x20EMPTY'],_0x132618);};var _0x2fdb91=function(_0x2348c4){if(!_0x2348c4||!_0x2348c4[_0x71a7('0x6d')][_0x71a7('0x35')]){return'';}for(var _0x1885e9='(',_0x1f624c=0x0;_0x1f624c<_0x2348c4['rules']['length'];_0x1f624c+=0x1){_0x1f624c>0x0&&(_0x1885e9+='\x20'+_0x2348c4[_0x71a7('0x6e')]+'\x20');_0x1885e9+=_0x2348c4[_0x71a7('0x6d')][_0x1f624c][_0x71a7('0x6f')]?_0x2fdb91(_0x2348c4['rules'][_0x1f624c][_0x71a7('0x6f')]):_0x2348c4['rules'][_0x1f624c][_0x71a7('0x42')]+'\x20'+_0x2348c4['rules'][_0x1f624c][_0x71a7('0x70')]+(_0x1c5c5f(_0x2348c4[_0x71a7('0x6d')][_0x1f624c][_0x71a7('0x70')])?'\x20'+_0x2348c4['rules'][_0x1f624c][_0x71a7('0x71')]:'');}return _0x1885e9+')';};var _0x2dad23={'where':{'id':_0x1a42e8[_0x71a7('0x4a')]['id']}},_0x27223b,_0x4a42f5,_0x5dcda5,_0xfe1c5f,_0x1ccc43;_0x2dad23=_['merge']({},_0x2dad23,_0x1a42e8[_0x71a7('0x43')]);return db[_0x71a7('0x44')][_0x71a7('0x57')](_0x2dad23)['then'](function(_0x10869c){if(_0x10869c){_0x27223b=_0x10869c;return _0x10869c[_0x71a7('0x8e')]();}return null;})[_0x71a7('0x24')](function(_0x22b857){if(_0x22b857){if(!_0x22b857[_0x71a7('0x35')]){throw new db[(_0x71a7('0x72'))][(_0x71a7('0x73'))](_0x71a7('0x8f'),0x193);}_0x4a42f5=_0x22b857;return db['AnalyticMetric'][_0x71a7('0x46')]({'raw':!![]});}return null;})[_0x71a7('0x24')](function(_0x50c076){if(_0x50c076){_0x5dcda5=_['keyBy'](_0x50c076,'id');var _0x399294;var _0x5c1885=squel[_0x71a7('0x75')]();_0x5c1885['from'](_0x27223b[_0x71a7('0x77')]);for(var _0x123b3a=0x0;_0x123b3a<_0x4a42f5[_0x71a7('0x35')];_0x123b3a+=0x1){_0x399294=_0x4a42f5[_0x123b3a]['MetricId']?_0x5dcda5[_0x4a42f5[_0x123b3a][_0x71a7('0x78')]][_0x71a7('0x79')]:_0x4a42f5[_0x123b3a][_0x71a7('0x42')];_0x399294=_0x4a42f5[_0x123b3a][_0x71a7('0x7a')]?_[_0x71a7('0x7b')](_0x1ac170[_0x4a42f5[_0x123b3a]['function']],'%s',_0x399294):_0x399294;_0x399294=_0x4a42f5[_0x123b3a][_0x71a7('0x7c')]?_[_0x71a7('0x7b')](_0x104079[_0x4a42f5[_0x123b3a][_0x71a7('0x7c')]],'%s',_0x399294):_0x399294;if(_0x4a42f5[_0x123b3a][_0x71a7('0x91')]){_0x5c1885['group'](_0x399294);}_0x4a42f5[_0x123b3a]['orderBy']&&_0x5c1885[_0x71a7('0x38')](_0x399294,_0x4a42f5[_0x123b3a][_0x71a7('0x7d')]===_0x71a7('0x92')?![]:!![]);_0x5c1885[_0x71a7('0x42')](_0x399294,_0x4a42f5[_0x123b3a][_0x71a7('0x7e')]||_0x399294);}if(_0x27223b[_0x71a7('0x80')]){_0x27223b[_0x71a7('0x80')]=JSON['parse'](_0x27223b['joins']);for(var _0x27e325=0x0;_0x27e325<_0x27223b[_0x71a7('0x80')][_0x71a7('0x35')];_0x27e325+=0x1){if(_0x27223b[_0x71a7('0x80')][_0x27e325]['type']&&_[_0x71a7('0x68')](_0x4898e7,_0x27223b[_0x71a7('0x80')][_0x27e325][_0x71a7('0x3f')])&&_0x27223b['joins'][_0x27e325][_0x71a7('0x83')]&&_0x27223b['joins'][_0x27e325][_0x71a7('0x81')]&&_0x27223b[_0x71a7('0x80')][_0x27e325]['foreignKey']){_0x5c1885[_0x27223b[_0x71a7('0x80')][_0x27e325][_0x71a7('0x3f')]](_0x27223b[_0x71a7('0x80')][_0x27e325][_0x71a7('0x81')],null,util['format'](_0x71a7('0x93'),_0x27223b[_0x71a7('0x77')],_0x27223b[_0x71a7('0x80')][_0x27e325][_0x71a7('0x83')],_0x27223b['joins'][_0x27e325][_0x71a7('0x81')],_0x27223b[_0x71a7('0x80')][_0x27e325][_0x71a7('0x82')]));}}}if(_0x27223b['conditions']){_0x27223b[_0x71a7('0x84')]=JSON['parse'](_0x27223b[_0x71a7('0x84')]);_0x5c1885[_0x71a7('0x3a')](_0x2fdb91(_0x27223b['conditions'][_0x71a7('0x6f')]));}_0x1ccc43=_0x5c1885['clone']();_0x5c1885[_0x71a7('0x1f')](_0x35d855);_0x5c1885['offset'](0x0);logger[_0x71a7('0x85')](_0x71a7('0x86'),_0x5c1885[_0x71a7('0x87')]());return db[_0x71a7('0x88')]['query'](_0x5c1885['toString'](),{'type':db[_0x71a7('0x88')]['QueryTypes'][_0x71a7('0x8a')]});}})['then'](function(){return{'sql':_0x1ccc43[_0x71a7('0x87')]()};})['then'](respondWithResult(_0x47e075,null))[_0x71a7('0x48')](handleError(_0x47e075,null));};
\ No newline at end of file
index 2195eba..b8b7666 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x56d6=['moment','bluebird','request-promise','path','rimraf','../../config/environment','./analyticCustomReport.attributes','define','AnalyticCustomReport','analytics_custom_reports','lodash','util','../../config/logger','api'];(function(_0x17c9c5,_0x4678bc){var _0x303151=function(_0x2dcbc4){while(--_0x2dcbc4){_0x17c9c5['push'](_0x17c9c5['shift']());}};_0x303151(++_0x4678bc);}(_0x56d6,0x1e6));var _0x656d=function(_0x5be476,_0x291955){_0x5be476=_0x5be476-0x0;var _0x49eb78=_0x56d6[_0x5be476];return _0x49eb78;};'use strict';var _=require(_0x656d('0x0'));var util=require(_0x656d('0x1'));var logger=require(_0x656d('0x2'))(_0x656d('0x3'));var moment=require(_0x656d('0x4'));var BPromise=require(_0x656d('0x5'));var rp=require(_0x656d('0x6'));var fs=require('fs');var path=require(_0x656d('0x7'));var rimraf=require(_0x656d('0x8'));var config=require(_0x656d('0x9'));var attributes=require(_0x656d('0xa'));module['exports']=function(_0x209487,_0x215918){return _0x209487[_0x656d('0xb')](_0x656d('0xc'),attributes,{'tableName':_0x656d('0xd'),'paranoid':!![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xacb7=['moment','path','./analyticCustomReport.attributes','exports','AnalyticCustomReport','analytics_custom_reports','lodash','util','../../config/logger','api'];(function(_0x44104e,_0x2d2d96){var _0x51e6a8=function(_0x11d488){while(--_0x11d488){_0x44104e['push'](_0x44104e['shift']());}};_0x51e6a8(++_0x2d2d96);}(_0xacb7,0xce));var _0x7acb=function(_0x402c27,_0x1ef5a8){_0x402c27=_0x402c27-0x0;var _0x3959a9=_0xacb7[_0x402c27];return _0x3959a9;};'use strict';var _=require(_0x7acb('0x0'));var util=require(_0x7acb('0x1'));var logger=require(_0x7acb('0x2'))(_0x7acb('0x3'));var moment=require(_0x7acb('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x7acb('0x5'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x7acb('0x6'));module[_0x7acb('0x7')]=function(_0x54780e,_0x34d5c4){return _0x54780e['define'](_0x7acb('0x8'),attributes,{'tableName':_0x7acb('0x9'),'paranoid':!![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 416da79..b88a89c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['http','info','AnalyticCustomReport,\x20%s,\x20%s','request\x20sent','debug','AnalyticCustomReport,\x20%s,\x20%s,\x20%s','code','error','message','result','catch','lodash','util','moment','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0x4f18ab,_0x26ce21){var _0x5d82ef=function(_0x429a59){while(--_0x429a59){_0x4f18ab['push'](_0x4f18ab['shift']());}};_0x5d82ef(++_0x26ce21);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0xa9e0[_0x2dafbe];return _0x58a45a;};'use strict';var _=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x0a9e('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x0a9e('0x4'));var logger=require(_0x0a9e('0x5'))(_0x0a9e('0x6'));var config=require(_0x0a9e('0x7'));var jayson=require(_0x0a9e('0x8'));var client=jayson['client'][_0x0a9e('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x441e3a,_0x2cc193,_0x5f41ea){return new BPromise(function(_0x503809,_0xe42b77){return client['request'](_0x441e3a,_0x5f41ea)['then'](function(_0x39753a){logger[_0x0a9e('0xa')](_0x0a9e('0xb'),_0x2cc193,_0x0a9e('0xc'));logger[_0x0a9e('0xd')](_0x0a9e('0xe'),_0x2cc193,'request\x20sent',JSON['stringify'](_0x39753a));if(_0x39753a['error']){if(_0x39753a['error'][_0x0a9e('0xf')]===0x1f4){logger[_0x0a9e('0x10')](_0x0a9e('0xb'),_0x2cc193,_0x39753a[_0x0a9e('0x10')][_0x0a9e('0x11')]);return _0xe42b77(_0x39753a[_0x0a9e('0x10')]['message']);}logger[_0x0a9e('0x10')](_0x0a9e('0xb'),_0x2cc193,_0x39753a[_0x0a9e('0x10')][_0x0a9e('0x11')]);return _0x503809(_0x39753a[_0x0a9e('0x10')][_0x0a9e('0x11')]);}else{logger['info'](_0x0a9e('0xb'),_0x2cc193,'request\x20sent');_0x503809(_0x39753a[_0x0a9e('0x12')]['message']);}})[_0x0a9e('0x13')](function(_0x12066b){logger['error'](_0x0a9e('0xb'),_0x2cc193,_0x12066b);_0xe42b77(_0x12066b);});});}
\ No newline at end of file
+var _0xa9e0=['http','info','AnalyticCustomReport,\x20%s,\x20%s','request\x20sent','debug','AnalyticCustomReport,\x20%s,\x20%s,\x20%s','code','error','message','result','catch','lodash','util','moment','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0x4deac0,_0x220f4e){var _0x94d711=function(_0x59827e){while(--_0x59827e){_0x4deac0['push'](_0x4deac0['shift']());}};_0x94d711(++_0x220f4e);}(_0xa9e0,0x123));var _0x0a9e=function(_0x4bfac3,_0x58324d){_0x4bfac3=_0x4bfac3-0x0;var _0x15f0f2=_0xa9e0[_0x4bfac3];return _0x15f0f2;};'use strict';var _=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x0a9e('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x0a9e('0x4'));var logger=require(_0x0a9e('0x5'))(_0x0a9e('0x6'));var config=require(_0x0a9e('0x7'));var jayson=require(_0x0a9e('0x8'));var client=jayson['client'][_0x0a9e('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x441e3a,_0x2cc193,_0x5f41ea){return new BPromise(function(_0x503809,_0xe42b77){return client['request'](_0x441e3a,_0x5f41ea)['then'](function(_0x39753a){logger[_0x0a9e('0xa')](_0x0a9e('0xb'),_0x2cc193,_0x0a9e('0xc'));logger[_0x0a9e('0xd')](_0x0a9e('0xe'),_0x2cc193,'request\x20sent',JSON['stringify'](_0x39753a));if(_0x39753a['error']){if(_0x39753a['error'][_0x0a9e('0xf')]===0x1f4){logger[_0x0a9e('0x10')](_0x0a9e('0xb'),_0x2cc193,_0x39753a[_0x0a9e('0x10')][_0x0a9e('0x11')]);return _0xe42b77(_0x39753a[_0x0a9e('0x10')]['message']);}logger[_0x0a9e('0x10')](_0x0a9e('0xb'),_0x2cc193,_0x39753a[_0x0a9e('0x10')][_0x0a9e('0x11')]);return _0x503809(_0x39753a[_0x0a9e('0x10')][_0x0a9e('0x11')]);}else{logger['info'](_0x0a9e('0xb'),_0x2cc193,'request\x20sent');_0x503809(_0x39753a[_0x0a9e('0x12')]['message']);}})[_0x0a9e('0x13')](function(_0x12066b){logger['error'](_0x0a9e('0xb'),_0x2cc193,_0x12066b);_0xe42b77(_0x12066b);});});}
\ No newline at end of file
index 93129fd..a94475c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe2cf=['create','put','exports','util','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','/:id','/:id/preview','preview','run','/:id/query','query','post'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xe2cf,0x1a1));var _0xfe2c=function(_0x26e780,_0x5465ba){_0x26e780=_0x26e780-0x0;var _0x2e9594=_0xe2cf[_0x26e780];return _0x2e9594;};'use strict';var multer=require('multer');var util=require(_0xfe2c('0x0'));var path=require('path');var timeout=require(_0xfe2c('0x1'));var express=require('express');var router=express[_0xfe2c('0x2')]();var auth=require(_0xfe2c('0x3'));var interaction=require(_0xfe2c('0x4'));var config=require(_0xfe2c('0x5'));var controller=require('./analyticCustomReport.controller');router[_0xfe2c('0x6')]('/',auth[_0xfe2c('0x7')](),controller['index']);router['get'](_0xfe2c('0x8'),auth[_0xfe2c('0x7')](),controller['show']);router['get'](_0xfe2c('0x9'),auth[_0xfe2c('0x7')](),controller[_0xfe2c('0xa')]);router['get']('/:id/run',auth[_0xfe2c('0x7')](),controller[_0xfe2c('0xb')]);router['get'](_0xfe2c('0xc'),auth[_0xfe2c('0x7')](),controller[_0xfe2c('0xd')]);router[_0xfe2c('0xe')]('/',auth[_0xfe2c('0x7')](),controller[_0xfe2c('0xf')]);router[_0xfe2c('0x10')]('/:id',auth['isAuthenticated'](),controller['update']);router['delete'](_0xfe2c('0x8'),auth['isAuthenticated'](),controller['destroy']);module[_0xfe2c('0x11')]=router;
\ No newline at end of file
+var _0xfb11=['preview','/:id/run','run','/:id/query','query','create','put','/:id','update','destroy','exports','multer','path','connect-timeout','Router','../../components/interaction/service','./analyticCustomReport.controller','get','index','isAuthenticated','show','/:id/preview'];(function(_0x30b6f6,_0x3beb68){var _0x31a30e=function(_0x1f291a){while(--_0x1f291a){_0x30b6f6['push'](_0x30b6f6['shift']());}};_0x31a30e(++_0x3beb68);}(_0xfb11,0x1ad));var _0x1fb1=function(_0x4e9628,_0x250573){_0x4e9628=_0x4e9628-0x0;var _0x27bc8c=_0xfb11[_0x4e9628];return _0x27bc8c;};'use strict';var multer=require(_0x1fb1('0x0'));var util=require('util');var path=require(_0x1fb1('0x1'));var timeout=require(_0x1fb1('0x2'));var express=require('express');var router=express[_0x1fb1('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x1fb1('0x4'));var config=require('../../config/environment');var controller=require(_0x1fb1('0x5'));router[_0x1fb1('0x6')]('/',auth['isAuthenticated'](),controller[_0x1fb1('0x7')]);router[_0x1fb1('0x6')]('/:id',auth[_0x1fb1('0x8')](),controller[_0x1fb1('0x9')]);router[_0x1fb1('0x6')](_0x1fb1('0xa'),auth[_0x1fb1('0x8')](),controller[_0x1fb1('0xb')]);router[_0x1fb1('0x6')](_0x1fb1('0xc'),auth[_0x1fb1('0x8')](),controller[_0x1fb1('0xd')]);router['get'](_0x1fb1('0xe'),auth['isAuthenticated'](),controller[_0x1fb1('0xf')]);router['post']('/',auth[_0x1fb1('0x8')](),controller[_0x1fb1('0x10')]);router[_0x1fb1('0x11')](_0x1fb1('0x12'),auth[_0x1fb1('0x8')](),controller[_0x1fb1('0x13')]);router['delete'](_0x1fb1('0x12'),auth[_0x1fb1('0x8')](),controller[_0x1fb1('0x14')]);module[_0x1fb1('0x15')]=router;
\ No newline at end of file
index ae68096..9251954 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x47bc=['exports','STRING','sequelize'];(function(_0x3c4f1f,_0x20d3ec){var _0x19cb69=function(_0x2e04bc){while(--_0x2e04bc){_0x3c4f1f['push'](_0x3c4f1f['shift']());}};_0x19cb69(++_0x20d3ec);}(_0x47bc,0xcb));var _0xc47b=function(_0x3e95c0,_0x5cc3f1){_0x3e95c0=_0x3e95c0-0x0;var _0x29cdcd=_0x47bc[_0x3e95c0];return _0x29cdcd;};'use strict';var Sequelize=require(_0xc47b('0x0'));module[_0xc47b('0x1')]={'name':{'type':Sequelize[_0xc47b('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0xc47b('0x2')]},'parent':{'type':Sequelize[_0xc47b('0x2')]},'table':{'type':Sequelize[_0xc47b('0x2')]},'conditions':{'type':Sequelize['TEXT']},'joins':{'type':Sequelize['TEXT']}};
\ No newline at end of file
+var _0x8d36=['exports','STRING','TEXT','sequelize'];(function(_0x14c07f,_0x583b95){var _0x2ac811=function(_0x44ce48){while(--_0x44ce48){_0x14c07f['push'](_0x14c07f['shift']());}};_0x2ac811(++_0x583b95);}(_0x8d36,0x11f));var _0x68d3=function(_0x2d23e5,_0x32495a){_0x2d23e5=_0x2d23e5-0x0;var _0x38823a=_0x8d36[_0x2d23e5];return _0x38823a;};'use strict';var Sequelize=require(_0x68d3('0x0'));module[_0x68d3('0x1')]={'name':{'type':Sequelize[_0x68d3('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x68d3('0x2')]},'parent':{'type':Sequelize[_0x68d3('0x2')]},'table':{'type':Sequelize[_0x68d3('0x2')]},'conditions':{'type':Sequelize[_0x68d3('0x3')]},'joins':{'type':Sequelize[_0x68d3('0x3')]}};
\ No newline at end of file
index d777e0c..01c4aa3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6176=['.createdAt\x20BETWEEN\x20?\x20AND\x20?','startDate','info','child_process','fork','../../components/export/','savename','countTable','COUNT(*)','QueryTypes','run','ValidationErrorItem','html-pdf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','sendStatus','json','count','offset','status','set','Content-Range','apply','reject','save','then','DefaultReports','UserProfileResource','destroy','error','stack','name','send','AnalyticDefaultReport','rawAttributes','model','keys','query','attributes','fields','length','hasOwnProperty','nolimit','limit','order','filters','merge','where','key','VIRTUAL','filter','options','includeAll','include','findAll','rows','catch','intersection','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','Reports','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','params','preview','join','left_join','right_join','cross_join','SUM(%s)','COUNT(%s)','COUNT(DISTINCT\x20%s)','MAX(%s)','MIN(%s)','AVG(%s)','GROUP_CONCAT(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','SEC_TO_TIME(%s)','DATE(%s)','HOUR(%s)','ROUND(%s)','IS\x20NULL','IS\x20EMPTY','IS\x20NOT\x20EMPTY','rules','operator','group','field','condition','value','getFields','Sequelize','Please\x20insert\x20at\x20least\x20one\x20field','AnalyticMetric','select','from','table','MetricId','metric','replace','format','groupBy','orderBy','DESC','alias','joins','parse','type','parentKey','foreignTable','foreignKey','%s.%s\x20=\x20%s.%s','conditions','clone','debug','Limited\x20Query:','toString','sequelize','SELECT','UNIX_TIMESTAMP(%s)','includes','IS\x20NOT\x20NULL','keyBy','function','No\x20available\x20data','output','web','%s-%s.%s','randomstring','csv','default','AnalyticExtractedReport','.calldate\x20BETWEEN\x20?\x20AND\x20?','endDate'];(function(_0x38228b,_0x552c93){var _0x4adee2=function(_0xa20635){while(--_0xa20635){_0x38228b['push'](_0x38228b['shift']());}};_0x4adee2(++_0x552c93);}(_0x6176,0xab));var _0x6617=function(_0x548980,_0x241244){_0x548980=_0x548980-0x0;var _0x474a2c=_0x6176[_0x548980];return _0x474a2c;};'use strict';var pdf=require(_0x6617('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x6617('0x1'));var jsonpatch=require(_0x6617('0x2'));var rp=require(_0x6617('0x3'));var moment=require(_0x6617('0x4'));var BPromise=require(_0x6617('0x5'));var Mustache=require(_0x6617('0x6'));var util=require(_0x6617('0x7'));var path=require(_0x6617('0x8'));var sox=require(_0x6617('0x9'));var csv=require(_0x6617('0xa'));var ejs=require(_0x6617('0xb'));var fs=require('fs');var _=require(_0x6617('0xc'));var squel=require(_0x6617('0xd'));var crypto=require('crypto');var jsforce=require(_0x6617('0xe'));var deskjs=require('desk.js');var toCsv=require(_0x6617('0xa'));var querystring=require(_0x6617('0xf'));var Papa=require(_0x6617('0x10'));var Redis=require(_0x6617('0x11'));var authService=require(_0x6617('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x6617('0x13'));var logger=require(_0x6617('0x14'))('api');var utils=require(_0x6617('0x15'));var config=require('../../config/environment');var db=require(_0x6617('0x16'))['db'];function respondWithStatusCode(_0xa8dc8b,_0x2f4826){_0x2f4826=_0x2f4826||0xcc;return function(_0x2cb760){if(_0x2cb760){return _0xa8dc8b[_0x6617('0x17')](_0x2f4826);}return _0xa8dc8b['status'](_0x2f4826)['end']();};}function respondWithResult(_0x1b668f,_0x4c8128){_0x4c8128=_0x4c8128||0xc8;return function(_0x4c41b1){if(_0x4c41b1){return _0x1b668f['status'](_0x4c8128)[_0x6617('0x18')](_0x4c41b1);}};}function respondWithFilteredResult(_0x337e4f,_0x435647){return function(_0x562b98){if(_0x562b98){var _0x264600=_0x562b98[_0x6617('0x19')],_0x515aeb=_0x435647[_0x6617('0x1a')],_0x390007=_0x435647['offset']+_0x435647['limit'],_0x3e57ed;if(_0x390007>=_0x264600){_0x390007=_0x264600;_0x3e57ed=0xc8;}else{_0x3e57ed=0xce;}_0x337e4f[_0x6617('0x1b')](_0x3e57ed);return _0x337e4f[_0x6617('0x1c')](_0x6617('0x1d'),_0x515aeb+'-'+_0x390007+'/'+_0x264600)[_0x6617('0x18')](_0x562b98);}return null;};}function patchUpdates(_0x15cb3b){return function(_0x48cbcf){try{jsonpatch[_0x6617('0x1e')](_0x48cbcf,_0x15cb3b,!![]);}catch(_0x10feb9){return BPromise[_0x6617('0x1f')](_0x10feb9);}return _0x48cbcf[_0x6617('0x20')]();};}function saveUpdates(_0x49f51a,_0x1eebee){return function(_0x55bdab){if(_0x55bdab){return _0x55bdab['update'](_0x49f51a)[_0x6617('0x21')](function(_0x5cdd21){return _0x5cdd21;});}return null;};}function removeEntity(_0x4f1a55,_0x353987){return function(_0x25fa40){if(_0x25fa40){return _0x25fa40['destroy']()[_0x6617('0x21')](function(){var _0x5c39a3=_0x25fa40['get']({'plain':!![]});var _0x181747=_0x6617('0x22');return db[_0x6617('0x23')][_0x6617('0x24')]({'where':{'type':_0x181747,'resourceId':_0x5c39a3['id']}})[_0x6617('0x21')](function(){return _0x25fa40;});})['then'](function(){_0x4f1a55[_0x6617('0x1b')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3f14f3,_0x3ad507){return function(_0x5d9701){if(!_0x5d9701){_0x3f14f3['sendStatus'](0x194);}return _0x5d9701;};}function handleError(_0x31d14a,_0x4826dd){_0x4826dd=_0x4826dd||0x1f4;return function(_0x3a8dd7){logger[_0x6617('0x25')](_0x3a8dd7[_0x6617('0x26')]);if(_0x3a8dd7[_0x6617('0x27')]){delete _0x3a8dd7[_0x6617('0x27')];}_0x31d14a[_0x6617('0x1b')](_0x4826dd)[_0x6617('0x28')](_0x3a8dd7);};}exports['index']=function(_0x322784,_0x161bd2){var _0x560fa9={},_0x5721e3={},_0x288736={'count':0x0,'rows':[]};var _0x12a2ff=db[_0x6617('0x29')][_0x6617('0x2a')];_0x5721e3[_0x6617('0x2b')]=_[_0x6617('0x2c')](_0x12a2ff);_0x5721e3[_0x6617('0x2d')]=_['keys'](_0x322784[_0x6617('0x2d')]);_0x5721e3['filters']=_['intersection'](_0x5721e3[_0x6617('0x2b')],_0x5721e3[_0x6617('0x2d')]);_0x560fa9[_0x6617('0x2e')]=_['intersection'](_0x5721e3[_0x6617('0x2b')],qs[_0x6617('0x2f')](_0x322784[_0x6617('0x2d')][_0x6617('0x2f')]));_0x560fa9[_0x6617('0x2e')]=_0x560fa9[_0x6617('0x2e')][_0x6617('0x30')]?_0x560fa9[_0x6617('0x2e')]:_0x5721e3[_0x6617('0x2b')];if(!_0x322784[_0x6617('0x2d')][_0x6617('0x31')](_0x6617('0x32'))){_0x560fa9[_0x6617('0x33')]=qs[_0x6617('0x33')](_0x322784['query'][_0x6617('0x33')]);_0x560fa9[_0x6617('0x1a')]=qs[_0x6617('0x1a')](_0x322784[_0x6617('0x2d')][_0x6617('0x1a')]);}_0x560fa9[_0x6617('0x34')]=qs['sort'](_0x322784['query']['sort']);_0x560fa9['where']=qs[_0x6617('0x35')](_['pick'](_0x322784[_0x6617('0x2d')],_0x5721e3[_0x6617('0x35')]));if(_0x322784['query']['filter']){_0x560fa9['where']=_[_0x6617('0x36')](_0x560fa9[_0x6617('0x37')],{'$or':_['map'](_0x12a2ff,function(_0x58cf37){if(_0x58cf37['type'][_0x6617('0x38')]!==_0x6617('0x39')){var _0x52bd32={};_0x52bd32[_0x58cf37['field']]={'$like':'%'+_0x322784[_0x6617('0x2d')][_0x6617('0x3a')]+'%'};return _0x52bd32;}})});}_0x560fa9=_[_0x6617('0x36')]({},_0x560fa9,_0x322784[_0x6617('0x3b')]);var _0x6474ca={'where':_0x560fa9[_0x6617('0x37')]};return db[_0x6617('0x29')][_0x6617('0x19')](_0x6474ca)[_0x6617('0x21')](function(_0x5026dc){_0x288736[_0x6617('0x19')]=_0x5026dc;if(_0x322784['query'][_0x6617('0x3c')]){_0x560fa9[_0x6617('0x3d')]=[{'all':!![]}];}return db[_0x6617('0x29')][_0x6617('0x3e')](_0x560fa9);})[_0x6617('0x21')](function(_0x2fb366){_0x288736[_0x6617('0x3f')]=_0x2fb366;return _0x288736;})[_0x6617('0x21')](respondWithFilteredResult(_0x161bd2,_0x560fa9))[_0x6617('0x40')](handleError(_0x161bd2,null));};exports['show']=function(_0x28dcb5,_0x1e8b1e){var _0x1b4b4d={'raw':!![],'where':{'id':_0x28dcb5['params']['id']}},_0x1e3925={};_0x1e3925[_0x6617('0x2b')]=_[_0x6617('0x2c')](db[_0x6617('0x29')][_0x6617('0x2a')]);_0x1e3925[_0x6617('0x2d')]=_[_0x6617('0x2c')](_0x28dcb5[_0x6617('0x2d')]);_0x1e3925['filters']=_['intersection'](_0x1e3925[_0x6617('0x2b')],_0x1e3925[_0x6617('0x2d')]);_0x1b4b4d['attributes']=_[_0x6617('0x41')](_0x1e3925[_0x6617('0x2b')],qs['fields'](_0x28dcb5[_0x6617('0x2d')]['fields']));_0x1b4b4d['attributes']=_0x1b4b4d['attributes'][_0x6617('0x30')]?_0x1b4b4d[_0x6617('0x2e')]:_0x1e3925['model'];if(_0x28dcb5[_0x6617('0x2d')][_0x6617('0x3c')]){_0x1b4b4d[_0x6617('0x3d')]=[{'all':!![]}];}_0x1b4b4d=_[_0x6617('0x36')]({},_0x1b4b4d,_0x28dcb5[_0x6617('0x3b')]);return db[_0x6617('0x29')][_0x6617('0x42')](_0x1b4b4d)[_0x6617('0x21')](handleEntityNotFound(_0x1e8b1e,null))[_0x6617('0x21')](respondWithResult(_0x1e8b1e,null))[_0x6617('0x40')](handleError(_0x1e8b1e,null));};exports['create']=function(_0x541415,_0x381e3f){return db[_0x6617('0x29')][_0x6617('0x43')](_0x541415[_0x6617('0x44')],{})[_0x6617('0x21')](function(_0x3d8e6f){var _0x3a15fb=_0x541415[_0x6617('0x45')][_0x6617('0x46')]({'plain':!![]});if(!_0x3a15fb)throw new Error(_0x6617('0x47'));if(_0x3a15fb['role']==='user'){var _0xed910c=_0x3d8e6f['get']({'plain':!![]});var _0x4d6959=_0x6617('0x48');return db['UserProfileSection'][_0x6617('0x42')]({'where':{'name':_0x4d6959,'userProfileId':_0x3a15fb[_0x6617('0x49')]},'raw':!![]})['then'](function(_0x395ffb){if(_0x395ffb&&_0x395ffb['autoAssociation']===0x0){return db[_0x6617('0x23')][_0x6617('0x43')]({'name':_0xed910c['name'],'resourceId':_0xed910c['id'],'type':_0x6617('0x22'),'sectionId':_0x395ffb['id']},{})[_0x6617('0x21')](function(){return _0x3d8e6f;});}else{return _0x3d8e6f;}})[_0x6617('0x40')](function(_0x2b71d0){logger['error'](_0x6617('0x4a'),_0x2b71d0);throw _0x2b71d0;});}return _0x3d8e6f;})[_0x6617('0x21')](respondWithResult(_0x381e3f,0xc9))['catch'](handleError(_0x381e3f,null));};exports[_0x6617('0x4b')]=function(_0x17cebe,_0xd79ed1){if(_0x17cebe[_0x6617('0x44')]['id']){delete _0x17cebe[_0x6617('0x44')]['id'];}return db['AnalyticDefaultReport'][_0x6617('0x42')]({'where':{'id':_0x17cebe['params']['id']}})['then'](handleEntityNotFound(_0xd79ed1,null))[_0x6617('0x21')](saveUpdates(_0x17cebe[_0x6617('0x44')],null))['then'](respondWithResult(_0xd79ed1,null))['catch'](handleError(_0xd79ed1,null));};exports['destroy']=function(_0xd6859f,_0x334104){return db[_0x6617('0x29')]['find']({'where':{'id':_0xd6859f[_0x6617('0x4c')]['id']}})[_0x6617('0x21')](handleEntityNotFound(_0x334104,null))[_0x6617('0x21')](removeEntity(_0x334104,null))['catch'](handleError(_0x334104,null));};exports[_0x6617('0x4d')]=function(_0x59442c,_0x274474){var _0x2d8c50=0xa;var _0xc1ab48=[_0x6617('0x4e'),_0x6617('0x4f'),_0x6617('0x50'),_0x6617('0x51')];var _0x30e4fd={'SUM':_0x6617('0x52'),'COUNT':_0x6617('0x53'),'COUNT DISTINCT':_0x6617('0x54'),'MAX':_0x6617('0x55'),'MIN':_0x6617('0x56'),'AVG':_0x6617('0x57'),'GROUP_CONCAT':_0x6617('0x58'),'GROUP_CONCAT ASC':_0x6617('0x59'),'GROUP_CONCAT DESC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)'};var _0x3ee3b9={'SEC_TO_TIME':_0x6617('0x5a'),'DATE':_0x6617('0x5b'),'HOUR':_0x6617('0x5c'),'ROUND':_0x6617('0x5d'),'UNIX_TIMESTAMP':'UNIX_TIMESTAMP(%s)'};var _0x899ea3=function(_0x18284e){return!_['includes']([_0x6617('0x5e'),'IS\x20NOT\x20NULL',_0x6617('0x5f'),_0x6617('0x60')],_0x18284e);};var _0x4cb5e4=function(_0x9b77d5){if(!_0x9b77d5||!_0x9b77d5[_0x6617('0x61')][_0x6617('0x30')]){return'';}for(var _0x239b1='(',_0x2bee9d=0x0;_0x2bee9d<_0x9b77d5['rules']['length'];_0x2bee9d+=0x1){_0x2bee9d>0x0&&(_0x239b1+='\x20'+_0x9b77d5[_0x6617('0x62')]+'\x20');_0x239b1+=_0x9b77d5['rules'][_0x2bee9d][_0x6617('0x63')]?_0x4cb5e4(_0x9b77d5['rules'][_0x2bee9d][_0x6617('0x63')]):_0x9b77d5[_0x6617('0x61')][_0x2bee9d][_0x6617('0x64')]+'\x20'+_0x9b77d5[_0x6617('0x61')][_0x2bee9d][_0x6617('0x65')]+(_0x899ea3(_0x9b77d5['rules'][_0x2bee9d][_0x6617('0x65')])?'\x20'+_0x9b77d5[_0x6617('0x61')][_0x2bee9d][_0x6617('0x66')]:'');}return _0x239b1+')';};var _0x5ad035={'where':{'id':_0x59442c[_0x6617('0x4c')]['id']}},_0x5d3bd3,_0x4b3e8f,_0x4f5e31,_0x7c6550,_0x5311f5;_0x5ad035=_[_0x6617('0x36')]({},_0x5ad035,_0x59442c[_0x6617('0x3b')]);return db[_0x6617('0x29')][_0x6617('0x42')](_0x5ad035)['then'](function(_0x340fdf){if(_0x340fdf){_0x5d3bd3=_0x340fdf;return _0x340fdf[_0x6617('0x67')]();}return null;})[_0x6617('0x21')](function(_0x852d2c){if(_0x852d2c){if(!_0x852d2c[_0x6617('0x30')]){throw new db[(_0x6617('0x68'))]['ValidationErrorItem'](_0x6617('0x69'),0x193);}_0x4b3e8f=_0x852d2c;return db[_0x6617('0x6a')][_0x6617('0x3e')]({'raw':!![]});}return null;})[_0x6617('0x21')](function(_0x184e5b){if(_0x184e5b){_0x4f5e31=_['keyBy'](_0x184e5b,'id');var _0xa85015;var _0x37bda8=squel[_0x6617('0x6b')]();_0x37bda8[_0x6617('0x6c')](_0x5d3bd3[_0x6617('0x6d')]);for(var _0x1c1438=0x0;_0x1c1438<_0x4b3e8f['length'];_0x1c1438+=0x1){_0xa85015=_0x4b3e8f[_0x1c1438][_0x6617('0x6e')]?_0x4f5e31[_0x4b3e8f[_0x1c1438][_0x6617('0x6e')]][_0x6617('0x6f')]:_0x4b3e8f[_0x1c1438][_0x6617('0x64')];_0xa85015=_0x4b3e8f[_0x1c1438]['function']?_[_0x6617('0x70')](_0x30e4fd[_0x4b3e8f[_0x1c1438]['function']],'%s',_0xa85015):_0xa85015;_0xa85015=_0x4b3e8f[_0x1c1438][_0x6617('0x71')]?_['replace'](_0x3ee3b9[_0x4b3e8f[_0x1c1438][_0x6617('0x71')]],'%s',_0xa85015):_0xa85015;if(_0x4b3e8f[_0x1c1438][_0x6617('0x72')]){_0x37bda8[_0x6617('0x63')](_0xa85015);}_0x4b3e8f[_0x1c1438][_0x6617('0x73')]&&_0x37bda8['order'](_0xa85015,_0x4b3e8f[_0x1c1438][_0x6617('0x73')]===_0x6617('0x74')?![]:!![]);_0x37bda8[_0x6617('0x64')](_0xa85015,_0x4b3e8f[_0x1c1438][_0x6617('0x75')]||_0xa85015);}if(_0x5d3bd3[_0x6617('0x76')]){_0x5d3bd3['joins']=JSON[_0x6617('0x77')](_0x5d3bd3[_0x6617('0x76')]);for(var _0x20704f=0x0;_0x20704f<_0x5d3bd3['joins'][_0x6617('0x30')];_0x20704f+=0x1){if(_0x5d3bd3[_0x6617('0x76')][_0x20704f][_0x6617('0x78')]&&_['includes'](_0xc1ab48,_0x5d3bd3[_0x6617('0x76')][_0x20704f][_0x6617('0x78')])&&_0x5d3bd3['joins'][_0x20704f][_0x6617('0x79')]&&_0x5d3bd3[_0x6617('0x76')][_0x20704f][_0x6617('0x7a')]&&_0x5d3bd3[_0x6617('0x76')][_0x20704f][_0x6617('0x7b')]){_0x37bda8[_0x5d3bd3['joins'][_0x20704f][_0x6617('0x78')]](_0x5d3bd3[_0x6617('0x76')][_0x20704f][_0x6617('0x7a')],null,util[_0x6617('0x71')](_0x6617('0x7c'),_0x5d3bd3[_0x6617('0x6d')],_0x5d3bd3[_0x6617('0x76')][_0x20704f][_0x6617('0x79')],_0x5d3bd3[_0x6617('0x76')][_0x20704f][_0x6617('0x7a')],_0x5d3bd3[_0x6617('0x76')][_0x20704f][_0x6617('0x7b')]));}}}if(_0x5d3bd3[_0x6617('0x7d')]){_0x5d3bd3[_0x6617('0x7d')]=JSON['parse'](_0x5d3bd3['conditions']);_0x37bda8[_0x6617('0x37')](_0x4cb5e4(_0x5d3bd3['conditions'][_0x6617('0x63')]));}_0x5311f5=_0x37bda8[_0x6617('0x7e')]();_0x37bda8[_0x6617('0x33')](_0x2d8c50);_0x37bda8[_0x6617('0x1a')](0x0);logger[_0x6617('0x7f')](_0x6617('0x80'),_0x37bda8[_0x6617('0x81')]());return db[_0x6617('0x82')]['query'](_0x37bda8[_0x6617('0x81')](),{'type':db[_0x6617('0x82')]['QueryTypes'][_0x6617('0x83')]});}})['then'](respondWithResult(_0x274474,null))[_0x6617('0x40')](handleError(_0x274474,null));};function runReport(_0x1b61bf,_0x560282,_0x223014){var _0x267da1=_0x560282[_0x6617('0x27')];var _0x4d5bdd=0xa;var _0x4ad960=[_0x6617('0x4e'),'left_join',_0x6617('0x50'),_0x6617('0x51')];var _0x226697={'SUM':'SUM(%s)','COUNT':_0x6617('0x53'),'COUNT DISTINCT':_0x6617('0x54'),'MAX':_0x6617('0x55'),'MIN':_0x6617('0x56'),'AVG':_0x6617('0x57'),'GROUP_CONCAT':_0x6617('0x58'),'GROUP_CONCAT ASC':_0x6617('0x59'),'GROUP_CONCAT DESC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)'};var _0x35835c={'SEC_TO_TIME':_0x6617('0x5a'),'DATE':'DATE(%s)','HOUR':_0x6617('0x5c'),'ROUND':_0x6617('0x5d'),'UNIX_TIMESTAMP':_0x6617('0x84')};var _0x2e080c=function(_0xd08eed){return!_[_0x6617('0x85')]([_0x6617('0x5e'),_0x6617('0x86'),_0x6617('0x5f'),_0x6617('0x60')],_0xd08eed);};var _0x5a2cee=function(_0x2bce46){if(!_0x2bce46||!_0x2bce46[_0x6617('0x61')][_0x6617('0x30')]){return'';}for(var _0xec0401='(',_0x30e3ba=0x0;_0x30e3ba<_0x2bce46[_0x6617('0x61')][_0x6617('0x30')];_0x30e3ba+=0x1){_0x30e3ba>0x0&&(_0xec0401+='\x20'+_0x2bce46[_0x6617('0x62')]+'\x20');_0xec0401+=_0x2bce46['rules'][_0x30e3ba][_0x6617('0x63')]?_0x5a2cee(_0x2bce46[_0x6617('0x61')][_0x30e3ba]['group']):_0x2bce46[_0x6617('0x61')][_0x30e3ba][_0x6617('0x64')]+'\x20'+_0x2bce46[_0x6617('0x61')][_0x30e3ba][_0x6617('0x65')]+(_0x2e080c(_0x2bce46['rules'][_0x30e3ba]['condition'])?'\x20'+_0x2bce46['rules'][_0x30e3ba]['value']:'');}return _0xec0401+')';};var _0x2d72e6={'where':{'id':_0x1b61bf['id']}},_0x59507c,_0x1a0ee8,_0x2c0011,_0x295d7d,_0x429aaf;_0x2d72e6=_[_0x6617('0x36')]({},_0x2d72e6,_0x223014);return db[_0x6617('0x29')][_0x6617('0x42')](_0x2d72e6)[_0x6617('0x21')](function(_0xdd7427){if(_0xdd7427){_0x59507c=_0xdd7427;return _0xdd7427['getFields']();}return null;})[_0x6617('0x21')](function(_0x52ed45){if(_0x52ed45){if(!_0x52ed45[_0x6617('0x30')]){throw new db[(_0x6617('0x68'))]['ValidationErrorItem']('Please\x20insert\x20at\x20least\x20one\x20field',0x193);}_0x1a0ee8=_0x52ed45;return db['AnalyticMetric']['findAll']({'raw':!![]});}return null;})[_0x6617('0x21')](function(_0xf573d5){if(_0xf573d5){_0x2c0011=_[_0x6617('0x87')](_0xf573d5,'id');var _0x178d77;var _0x35e266=squel[_0x6617('0x6b')]();_0x35e266['from'](_0x59507c['table']);for(var _0x531194=0x0;_0x531194<_0x1a0ee8['length'];_0x531194+=0x1){_0x178d77=_0x1a0ee8[_0x531194][_0x6617('0x6e')]?_0x2c0011[_0x1a0ee8[_0x531194]['MetricId']][_0x6617('0x6f')]:_0x1a0ee8[_0x531194]['field'];_0x178d77=_0x1a0ee8[_0x531194][_0x6617('0x88')]?_['replace'](_0x226697[_0x1a0ee8[_0x531194][_0x6617('0x88')]],'%s',_0x178d77):_0x178d77;_0x178d77=_0x1a0ee8[_0x531194]['format']?_['replace'](_0x35835c[_0x1a0ee8[_0x531194][_0x6617('0x71')]],'%s',_0x178d77):_0x178d77;if(_0x1a0ee8[_0x531194][_0x6617('0x72')]){_0x35e266[_0x6617('0x63')](_0x178d77);}_0x1a0ee8[_0x531194]['orderBy']&&_0x35e266[_0x6617('0x34')](_0x178d77,_0x1a0ee8[_0x531194][_0x6617('0x73')]==='DESC'?![]:!![]);_0x35e266['field'](_0x178d77,_0x1a0ee8[_0x531194]['alias']||_0x178d77);}if(_0x59507c[_0x6617('0x76')]){_0x59507c['joins']=JSON[_0x6617('0x77')](_0x59507c[_0x6617('0x76')]);for(var _0x51f4f5=0x0;_0x51f4f5<_0x59507c['joins'][_0x6617('0x30')];_0x51f4f5+=0x1){if(_0x59507c[_0x6617('0x76')][_0x51f4f5][_0x6617('0x78')]&&_[_0x6617('0x85')](_0x4ad960,_0x59507c[_0x6617('0x76')][_0x51f4f5]['type'])&&_0x59507c[_0x6617('0x76')][_0x51f4f5]['parentKey']&&_0x59507c[_0x6617('0x76')][_0x51f4f5]['foreignTable']&&_0x59507c[_0x6617('0x76')][_0x51f4f5]['foreignKey']){_0x35e266[_0x59507c[_0x6617('0x76')][_0x51f4f5]['type']](_0x59507c['joins'][_0x51f4f5][_0x6617('0x7a')],null,util['format'](_0x6617('0x7c'),_0x59507c[_0x6617('0x6d')],_0x59507c['joins'][_0x51f4f5][_0x6617('0x79')],_0x59507c[_0x6617('0x76')][_0x51f4f5][_0x6617('0x7a')],_0x59507c[_0x6617('0x76')][_0x51f4f5][_0x6617('0x7b')]));}}}if(_0x59507c[_0x6617('0x7d')]){_0x59507c[_0x6617('0x7d')]=JSON[_0x6617('0x77')](_0x59507c[_0x6617('0x7d')]);_0x35e266[_0x6617('0x37')](_0x5a2cee(_0x59507c[_0x6617('0x7d')][_0x6617('0x63')]));}_0x429aaf=_0x35e266[_0x6617('0x7e')]();_0x35e266[_0x6617('0x33')](_0x4d5bdd);_0x35e266[_0x6617('0x1a')](0x0);logger[_0x6617('0x7f')](_0x6617('0x80'),_0x35e266[_0x6617('0x81')]());return db[_0x6617('0x82')][_0x6617('0x2d')](_0x35e266['toString'](),{'type':db[_0x6617('0x82')]['QueryTypes']['SELECT']});}})['then'](function(_0xd5a1f1){if(!_0xd5a1f1[_0x6617('0x30')]){throw new db[(_0x6617('0x68'))]['ValidationErrorItem'](_0x6617('0x89'),0xcc);}if(_0x560282[_0x6617('0x8a')]===_0x6617('0x8b')){return null;}var _0x264b52=_[_0x6617('0x36')](_0x560282,{'name':_0x560282['fullPath']||_0x560282['name']||_0x59507c[_0x6617('0x27')],'basename':_0x267da1,'savename':util[_0x6617('0x71')](_0x6617('0x8c'),_0x560282[_0x6617('0x27')]||_0x59507c['name'],require(_0x6617('0x8d'))['generate'](0x4),_0x560282[_0x6617('0x8a')]||_0x6617('0x8e')),'reportId':_0x59507c['id'],'reportType':_0x6617('0x8f')});return db[_0x6617('0x90')][_0x6617('0x43')](_0x264b52,{'raw':!![]});})[_0x6617('0x21')](function(_0x60777a){if(_0x59507c[_0x6617('0x6d')]==='cdr'){_0x429aaf['where'](_0x59507c[_0x6617('0x6d')]+_0x6617('0x91'),_0x560282['startDate'],_0x560282[_0x6617('0x92')]);}else{_0x429aaf[_0x6617('0x37')](_0x59507c[_0x6617('0x6d')]+_0x6617('0x93'),_0x560282[_0x6617('0x94')],_0x560282['endDate']);}if(_0x60777a){logger[_0x6617('0x95')]('Run\x20Query:',_0x429aaf['toString']());require(_0x6617('0x96'))[_0x6617('0x97')](path['join'](__dirname,_0x6617('0x98'),_0x60777a[_0x6617('0x8a')]),[_0x60777a['id'],_0x429aaf[_0x6617('0x81')](),path[_0x6617('0x4e')](__dirname,'../../files/reports',_0x60777a[_0x6617('0x99')]),_0x267da1]);return _0x60777a;}else{var _0xd667a3=squel[_0x6617('0x6b')]();_0xd667a3[_0x6617('0x6c')]('('+_0x429aaf[_0x6617('0x81')]()+')',_0x6617('0x9a'));_0xd667a3['field'](_0x6617('0x9b'),'count');_0x429aaf[_0x6617('0x33')](_0x560282[_0x6617('0x33')]||_0x4d5bdd);_0x429aaf['offset'](_0x560282[_0x6617('0x1a')]||0x0);return db[_0x6617('0x82')][_0x6617('0x2d')](_0xd667a3[_0x6617('0x81')](),{'type':db[_0x6617('0x82')]['QueryTypes'][_0x6617('0x83')]})[_0x6617('0x21')](function(_0x4ce164){if(!_0x4ce164[_0x6617('0x30')]){_0x295d7d=0x0;}else{_0x295d7d=_0x4ce164[0x0][_0x6617('0x19')]||0x0;}return db[_0x6617('0x82')][_0x6617('0x2d')](_0x429aaf[_0x6617('0x81')](),{'type':db[_0x6617('0x82')][_0x6617('0x9c')]['SELECT']});})[_0x6617('0x21')](function(_0x38857d){return{'rows':_0x38857d||[],'count':_0x295d7d};});}});}exports[_0x6617('0x9d')]=function(_0x343e0b,_0x3ace0c){return runReport(_0x343e0b[_0x6617('0x4c')],_0x343e0b['query'],_0x343e0b['options'])[_0x6617('0x21')](respondWithResult(_0x3ace0c,null))[_0x6617('0x40')](handleError(_0x3ace0c,null));};exports['runReport']=runReport;exports[_0x6617('0x2d')]=function(_0x1b6d1d,_0x134a7f){var _0x577527=0xa;var _0x427c1=[_0x6617('0x4e'),_0x6617('0x4f'),'right_join','cross_join'];var _0x44c50c={'SUM':_0x6617('0x52'),'COUNT':'COUNT(%s)','COUNT DISTINCT':_0x6617('0x54'),'MAX':_0x6617('0x55'),'MIN':_0x6617('0x56'),'AVG':_0x6617('0x57'),'GROUP_CONCAT':_0x6617('0x58'),'GROUP_CONCAT ASC':_0x6617('0x59'),'GROUP_CONCAT DESC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)'};var _0x5ef979={'SEC_TO_TIME':_0x6617('0x5a'),'DATE':_0x6617('0x5b'),'HOUR':_0x6617('0x5c'),'ROUND':_0x6617('0x5d'),'UNIX_TIMESTAMP':_0x6617('0x84')};var _0x4bca87=function(_0x5e2316){return!_[_0x6617('0x85')]([_0x6617('0x5e'),'IS\x20NOT\x20NULL',_0x6617('0x5f'),_0x6617('0x60')],_0x5e2316);};var _0x12ef5b=function(_0x3f0c2e){if(!_0x3f0c2e||!_0x3f0c2e[_0x6617('0x61')][_0x6617('0x30')]){return'';}for(var _0x51070a='(',_0x31a739=0x0;_0x31a739<_0x3f0c2e[_0x6617('0x61')][_0x6617('0x30')];_0x31a739+=0x1){_0x31a739>0x0&&(_0x51070a+='\x20'+_0x3f0c2e['operator']+'\x20');_0x51070a+=_0x3f0c2e['rules'][_0x31a739][_0x6617('0x63')]?_0x12ef5b(_0x3f0c2e['rules'][_0x31a739][_0x6617('0x63')]):_0x3f0c2e[_0x6617('0x61')][_0x31a739]['field']+'\x20'+_0x3f0c2e[_0x6617('0x61')][_0x31a739][_0x6617('0x65')]+(_0x4bca87(_0x3f0c2e[_0x6617('0x61')][_0x31a739]['condition'])?'\x20'+_0x3f0c2e[_0x6617('0x61')][_0x31a739][_0x6617('0x66')]:'');}return _0x51070a+')';};var _0x3882a1={'where':{'id':_0x1b6d1d[_0x6617('0x4c')]['id']}},_0x109c6c,_0x228f46,_0x43a034,_0x3841aa,_0x3999f2;_0x3882a1=_[_0x6617('0x36')]({},_0x3882a1,_0x1b6d1d[_0x6617('0x3b')]);return db[_0x6617('0x29')][_0x6617('0x42')](_0x3882a1)[_0x6617('0x21')](function(_0x175136){if(_0x175136){_0x109c6c=_0x175136;return _0x175136[_0x6617('0x67')]();}return null;})[_0x6617('0x21')](function(_0x4b1f4f){if(_0x4b1f4f){if(!_0x4b1f4f['length']){throw new db[(_0x6617('0x68'))][(_0x6617('0x9e'))](_0x6617('0x69'),0x193);}_0x228f46=_0x4b1f4f;return db[_0x6617('0x6a')][_0x6617('0x3e')]({'raw':!![]});}return null;})['then'](function(_0x2a2eaf){if(_0x2a2eaf){_0x43a034=_[_0x6617('0x87')](_0x2a2eaf,'id');var _0x222d09;var _0x4bf720=squel[_0x6617('0x6b')]();_0x4bf720['from'](_0x109c6c[_0x6617('0x6d')]);for(var _0x2a45bf=0x0;_0x2a45bf<_0x228f46[_0x6617('0x30')];_0x2a45bf+=0x1){_0x222d09=_0x228f46[_0x2a45bf][_0x6617('0x6e')]?_0x43a034[_0x228f46[_0x2a45bf][_0x6617('0x6e')]][_0x6617('0x6f')]:_0x228f46[_0x2a45bf][_0x6617('0x64')];_0x222d09=_0x228f46[_0x2a45bf][_0x6617('0x88')]?_[_0x6617('0x70')](_0x44c50c[_0x228f46[_0x2a45bf][_0x6617('0x88')]],'%s',_0x222d09):_0x222d09;_0x222d09=_0x228f46[_0x2a45bf][_0x6617('0x71')]?_[_0x6617('0x70')](_0x5ef979[_0x228f46[_0x2a45bf][_0x6617('0x71')]],'%s',_0x222d09):_0x222d09;if(_0x228f46[_0x2a45bf][_0x6617('0x72')]){_0x4bf720[_0x6617('0x63')](_0x222d09);}_0x228f46[_0x2a45bf][_0x6617('0x73')]&&_0x4bf720[_0x6617('0x34')](_0x222d09,_0x228f46[_0x2a45bf]['orderBy']===_0x6617('0x74')?![]:!![]);_0x4bf720[_0x6617('0x64')](_0x222d09,_0x228f46[_0x2a45bf][_0x6617('0x75')]||_0x222d09);}if(_0x109c6c[_0x6617('0x76')]){_0x109c6c[_0x6617('0x76')]=JSON[_0x6617('0x77')](_0x109c6c[_0x6617('0x76')]);for(var _0x2e0fa0=0x0;_0x2e0fa0<_0x109c6c[_0x6617('0x76')][_0x6617('0x30')];_0x2e0fa0+=0x1){if(_0x109c6c[_0x6617('0x76')][_0x2e0fa0][_0x6617('0x78')]&&_[_0x6617('0x85')](_0x427c1,_0x109c6c[_0x6617('0x76')][_0x2e0fa0]['type'])&&_0x109c6c[_0x6617('0x76')][_0x2e0fa0][_0x6617('0x79')]&&_0x109c6c[_0x6617('0x76')][_0x2e0fa0]['foreignTable']&&_0x109c6c[_0x6617('0x76')][_0x2e0fa0]['foreignKey']){_0x4bf720[_0x109c6c['joins'][_0x2e0fa0][_0x6617('0x78')]](_0x109c6c[_0x6617('0x76')][_0x2e0fa0]['foreignTable'],null,util['format']('%s.%s\x20=\x20%s.%s',_0x109c6c[_0x6617('0x6d')],_0x109c6c['joins'][_0x2e0fa0][_0x6617('0x79')],_0x109c6c[_0x6617('0x76')][_0x2e0fa0][_0x6617('0x7a')],_0x109c6c[_0x6617('0x76')][_0x2e0fa0][_0x6617('0x7b')]));}}}if(_0x109c6c['conditions']){_0x109c6c[_0x6617('0x7d')]=JSON['parse'](_0x109c6c[_0x6617('0x7d')]);_0x4bf720[_0x6617('0x37')](_0x12ef5b(_0x109c6c[_0x6617('0x7d')][_0x6617('0x63')]));}_0x3999f2=_0x4bf720['clone']();_0x4bf720[_0x6617('0x33')](_0x577527);_0x4bf720[_0x6617('0x1a')](0x0);logger[_0x6617('0x7f')]('Limited\x20Query:',_0x4bf720['toString']());return db[_0x6617('0x82')][_0x6617('0x2d')](_0x4bf720[_0x6617('0x81')](),{'type':db['sequelize'][_0x6617('0x9c')][_0x6617('0x83')]});}})[_0x6617('0x21')](function(){return{'sql':_0x3999f2[_0x6617('0x81')]()};})[_0x6617('0x21')](respondWithResult(_0x134a7f,null))[_0x6617('0x40')](handleError(_0x134a7f,null));};
\ No newline at end of file
+var _0x326b=['bluebird','mustache','util','to-csv','lodash','squel','jsforce','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','offset','limit','set','Content-Range','apply','save','then','get','DefaultReports','UserProfileResource','destroy','end','error','send','index','AnalyticDefaultReport','rawAttributes','keys','query','filters','intersection','attributes','model','fields','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','map','key','field','options','count','includeAll','include','findAll','rows','catch','params','length','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','Reports','UserProfileSection','find','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','body','preview','join','left_join','right_join','cross_join','SUM(%s)','COUNT(%s)','COUNT(DISTINCT\x20%s)','MAX(%s)','MIN(%s)','AVG(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)','HOUR(%s)','ROUND(%s)','includes','IS\x20NULL','IS\x20NOT\x20NULL','IS\x20EMPTY','IS\x20NOT\x20EMPTY','rules','operator','group','condition','value','getFields','Please\x20insert\x20at\x20least\x20one\x20field','AnalyticMetric','keyBy','from','table','MetricId','function','replace','format','groupBy','orderBy','DESC','alias','joins','parse','type','parentKey','foreignKey','foreignTable','%s.%s\x20=\x20%s.%s','conditions','debug','Limited\x20Query:','toString','sequelize','QueryTypes','SELECT','GROUP_CONCAT(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','SEC_TO_TIME(%s)','DATE(%s)','UNIX_TIMESTAMP(%s)','Sequelize','select','metric','clone','No\x20available\x20data','output','web','fullPath','name','randomstring','csv','AnalyticExtractedReport','startDate','endDate','.createdAt\x20BETWEEN\x20?\x20AND\x20?','info','child_process','../../components/export/','../../files/reports','savename','run','runReport','ValidationErrorItem','eml-format','zip-dir','fast-json-patch','request-promise','moment'];(function(_0x4e7d25,_0x58285f){var _0x526fe6=function(_0x4f0aec){while(--_0x4f0aec){_0x4e7d25['push'](_0x4e7d25['shift']());}};_0x526fe6(++_0x58285f);}(_0x326b,0x1d8));var _0xb326=function(_0x80f51a,_0x32e95e){_0x80f51a=_0x80f51a-0x0;var _0x327148=_0x326b[_0x80f51a];return _0x327148;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xb326('0x0'));var rimraf=require('rimraf');var zipdir=require(_0xb326('0x1'));var jsonpatch=require(_0xb326('0x2'));var rp=require(_0xb326('0x3'));var moment=require(_0xb326('0x4'));var BPromise=require(_0xb326('0x5'));var Mustache=require(_0xb326('0x6'));var util=require(_0xb326('0x7'));var path=require('path');var sox=require('sox');var csv=require(_0xb326('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xb326('0x9'));var squel=require(_0xb326('0xa'));var crypto=require('crypto');var jsforce=require(_0xb326('0xb'));var deskjs=require('desk.js');var toCsv=require(_0xb326('0x8'));var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0xb326('0xc'));var authService=require(_0xb326('0xd'));var qs=require(_0xb326('0xe'));var hardwareService=require(_0xb326('0xf'));var logger=require(_0xb326('0x10'))('api');var utils=require(_0xb326('0x11'));var config=require(_0xb326('0x12'));var db=require(_0xb326('0x13'))['db'];function respondWithStatusCode(_0x2b183b,_0x5bd867){_0x5bd867=_0x5bd867||0xcc;return function(_0x4f61ed){if(_0x4f61ed){return _0x2b183b[_0xb326('0x14')](_0x5bd867);}return _0x2b183b['status'](_0x5bd867)['end']();};}function respondWithResult(_0x52ef6c,_0x278920){_0x278920=_0x278920||0xc8;return function(_0x452d2e){if(_0x452d2e){return _0x52ef6c[_0xb326('0x15')](_0x278920)[_0xb326('0x16')](_0x452d2e);}};}function respondWithFilteredResult(_0x151b9a,_0x1d0038){return function(_0x3b914a){if(_0x3b914a){var _0x5c8796=_0x3b914a['count'],_0x47408e=_0x1d0038[_0xb326('0x17')],_0x386429=_0x1d0038[_0xb326('0x17')]+_0x1d0038[_0xb326('0x18')],_0x4408fb;if(_0x386429>=_0x5c8796){_0x386429=_0x5c8796;_0x4408fb=0xc8;}else{_0x4408fb=0xce;}_0x151b9a[_0xb326('0x15')](_0x4408fb);return _0x151b9a[_0xb326('0x19')](_0xb326('0x1a'),_0x47408e+'-'+_0x386429+'/'+_0x5c8796)[_0xb326('0x16')](_0x3b914a);}return null;};}function patchUpdates(_0x384c79){return function(_0x3ffb93){try{jsonpatch[_0xb326('0x1b')](_0x3ffb93,_0x384c79,!![]);}catch(_0x150d0d){return BPromise['reject'](_0x150d0d);}return _0x3ffb93[_0xb326('0x1c')]();};}function saveUpdates(_0x3e0b51,_0x148648){return function(_0x2fe31e){if(_0x2fe31e){return _0x2fe31e['update'](_0x3e0b51)[_0xb326('0x1d')](function(_0x3c49a7){return _0x3c49a7;});}return null;};}function removeEntity(_0x235c18,_0x2974c0){return function(_0x9c25da){if(_0x9c25da){return _0x9c25da['destroy']()[_0xb326('0x1d')](function(){var _0x428d17=_0x9c25da[_0xb326('0x1e')]({'plain':!![]});var _0x5d1797=_0xb326('0x1f');return db[_0xb326('0x20')][_0xb326('0x21')]({'where':{'type':_0x5d1797,'resourceId':_0x428d17['id']}})['then'](function(){return _0x9c25da;});})[_0xb326('0x1d')](function(){_0x235c18[_0xb326('0x15')](0xcc)[_0xb326('0x22')]();});}};}function handleEntityNotFound(_0x2e8b11,_0x9b1d4){return function(_0x43f30a){if(!_0x43f30a){_0x2e8b11[_0xb326('0x14')](0x194);}return _0x43f30a;};}function handleError(_0x973e85,_0x5949fb){_0x5949fb=_0x5949fb||0x1f4;return function(_0x72a5c9){logger[_0xb326('0x23')](_0x72a5c9['stack']);if(_0x72a5c9['name']){delete _0x72a5c9['name'];}_0x973e85[_0xb326('0x15')](_0x5949fb)[_0xb326('0x24')](_0x72a5c9);};}exports[_0xb326('0x25')]=function(_0x4c8264,_0x2dc6a5){var _0x23d81f={},_0x286307={},_0x4d44a9={'count':0x0,'rows':[]};var _0xa6a5d9=db[_0xb326('0x26')][_0xb326('0x27')];_0x286307['model']=_[_0xb326('0x28')](_0xa6a5d9);_0x286307[_0xb326('0x29')]=_['keys'](_0x4c8264[_0xb326('0x29')]);_0x286307[_0xb326('0x2a')]=_[_0xb326('0x2b')](_0x286307['model'],_0x286307['query']);_0x23d81f[_0xb326('0x2c')]=_[_0xb326('0x2b')](_0x286307[_0xb326('0x2d')],qs[_0xb326('0x2e')](_0x4c8264[_0xb326('0x29')][_0xb326('0x2e')]));_0x23d81f[_0xb326('0x2c')]=_0x23d81f[_0xb326('0x2c')]['length']?_0x23d81f['attributes']:_0x286307[_0xb326('0x2d')];if(!_0x4c8264[_0xb326('0x29')][_0xb326('0x2f')](_0xb326('0x30'))){_0x23d81f[_0xb326('0x18')]=qs[_0xb326('0x18')](_0x4c8264['query'][_0xb326('0x18')]);_0x23d81f[_0xb326('0x17')]=qs[_0xb326('0x17')](_0x4c8264[_0xb326('0x29')][_0xb326('0x17')]);}_0x23d81f[_0xb326('0x31')]=qs['sort'](_0x4c8264[_0xb326('0x29')][_0xb326('0x32')]);_0x23d81f['where']=qs[_0xb326('0x2a')](_[_0xb326('0x33')](_0x4c8264[_0xb326('0x29')],_0x286307['filters']));if(_0x4c8264[_0xb326('0x29')][_0xb326('0x34')]){_0x23d81f[_0xb326('0x35')]=_[_0xb326('0x36')](_0x23d81f[_0xb326('0x35')],{'$or':_[_0xb326('0x37')](_0xa6a5d9,function(_0x330286){if(_0x330286['type'][_0xb326('0x38')]!=='VIRTUAL'){var _0x26a89d={};_0x26a89d[_0x330286[_0xb326('0x39')]]={'$like':'%'+_0x4c8264[_0xb326('0x29')]['filter']+'%'};return _0x26a89d;}})});}_0x23d81f=_[_0xb326('0x36')]({},_0x23d81f,_0x4c8264[_0xb326('0x3a')]);var _0x4efeb7={'where':_0x23d81f[_0xb326('0x35')]};return db[_0xb326('0x26')][_0xb326('0x3b')](_0x4efeb7)['then'](function(_0x4df23e){_0x4d44a9['count']=_0x4df23e;if(_0x4c8264[_0xb326('0x29')][_0xb326('0x3c')]){_0x23d81f[_0xb326('0x3d')]=[{'all':!![]}];}return db['AnalyticDefaultReport'][_0xb326('0x3e')](_0x23d81f);})[_0xb326('0x1d')](function(_0x59e0a2){_0x4d44a9[_0xb326('0x3f')]=_0x59e0a2;return _0x4d44a9;})[_0xb326('0x1d')](respondWithFilteredResult(_0x2dc6a5,_0x23d81f))[_0xb326('0x40')](handleError(_0x2dc6a5,null));};exports['show']=function(_0x34feae,_0x2befc7){var _0x57e860={'raw':!![],'where':{'id':_0x34feae[_0xb326('0x41')]['id']}},_0x5268b9={};_0x5268b9[_0xb326('0x2d')]=_['keys'](db[_0xb326('0x26')][_0xb326('0x27')]);_0x5268b9[_0xb326('0x29')]=_[_0xb326('0x28')](_0x34feae['query']);_0x5268b9['filters']=_['intersection'](_0x5268b9[_0xb326('0x2d')],_0x5268b9[_0xb326('0x29')]);_0x57e860[_0xb326('0x2c')]=_[_0xb326('0x2b')](_0x5268b9[_0xb326('0x2d')],qs[_0xb326('0x2e')](_0x34feae[_0xb326('0x29')][_0xb326('0x2e')]));_0x57e860[_0xb326('0x2c')]=_0x57e860[_0xb326('0x2c')][_0xb326('0x42')]?_0x57e860[_0xb326('0x2c')]:_0x5268b9[_0xb326('0x2d')];if(_0x34feae['query'][_0xb326('0x3c')]){_0x57e860[_0xb326('0x3d')]=[{'all':!![]}];}_0x57e860=_[_0xb326('0x36')]({},_0x57e860,_0x34feae[_0xb326('0x3a')]);return db['AnalyticDefaultReport']['find'](_0x57e860)['then'](handleEntityNotFound(_0x2befc7,null))[_0xb326('0x1d')](respondWithResult(_0x2befc7,null))['catch'](handleError(_0x2befc7,null));};exports['create']=function(_0x4e7626,_0x262d44){return db['AnalyticDefaultReport'][_0xb326('0x43')](_0x4e7626['body'],{})[_0xb326('0x1d')](function(_0x53a6fd){var _0x3ac21d=_0x4e7626[_0xb326('0x44')][_0xb326('0x1e')]({'plain':!![]});if(!_0x3ac21d)throw new Error(_0xb326('0x45'));if(_0x3ac21d[_0xb326('0x46')]===_0xb326('0x44')){var _0x141e01=_0x53a6fd['get']({'plain':!![]});var _0x3f0af9=_0xb326('0x47');return db[_0xb326('0x48')][_0xb326('0x49')]({'where':{'name':_0x3f0af9,'userProfileId':_0x3ac21d[_0xb326('0x4a')]},'raw':!![]})[_0xb326('0x1d')](function(_0x5c6f4b){if(_0x5c6f4b&&_0x5c6f4b[_0xb326('0x4b')]===0x0){return db['UserProfileResource'][_0xb326('0x43')]({'name':_0x141e01['name'],'resourceId':_0x141e01['id'],'type':_0xb326('0x1f'),'sectionId':_0x5c6f4b['id']},{})[_0xb326('0x1d')](function(){return _0x53a6fd;});}else{return _0x53a6fd;}})[_0xb326('0x40')](function(_0x5ec8b0){logger[_0xb326('0x23')](_0xb326('0x4c'),_0x5ec8b0);throw _0x5ec8b0;});}return _0x53a6fd;})[_0xb326('0x1d')](respondWithResult(_0x262d44,0xc9))[_0xb326('0x40')](handleError(_0x262d44,null));};exports[_0xb326('0x4d')]=function(_0x3e658c,_0xb685dd){if(_0x3e658c[_0xb326('0x4e')]['id']){delete _0x3e658c[_0xb326('0x4e')]['id'];}return db[_0xb326('0x26')][_0xb326('0x49')]({'where':{'id':_0x3e658c[_0xb326('0x41')]['id']}})[_0xb326('0x1d')](handleEntityNotFound(_0xb685dd,null))[_0xb326('0x1d')](saveUpdates(_0x3e658c[_0xb326('0x4e')],null))['then'](respondWithResult(_0xb685dd,null))[_0xb326('0x40')](handleError(_0xb685dd,null));};exports[_0xb326('0x21')]=function(_0x3f6f17,_0x3c8a1c){return db['AnalyticDefaultReport'][_0xb326('0x49')]({'where':{'id':_0x3f6f17['params']['id']}})['then'](handleEntityNotFound(_0x3c8a1c,null))['then'](removeEntity(_0x3c8a1c,null))[_0xb326('0x40')](handleError(_0x3c8a1c,null));};exports[_0xb326('0x4f')]=function(_0x47e8fe,_0x916b3){var _0x473a7d=0xa;var _0x1426cb=[_0xb326('0x50'),_0xb326('0x51'),_0xb326('0x52'),_0xb326('0x53')];var _0x25a996={'SUM':_0xb326('0x54'),'COUNT':_0xb326('0x55'),'COUNT DISTINCT':_0xb326('0x56'),'MAX':_0xb326('0x57'),'MIN':_0xb326('0x58'),'AVG':_0xb326('0x59'),'GROUP_CONCAT':'GROUP_CONCAT(%s)','GROUP_CONCAT ASC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT DESC':_0xb326('0x5a')};var _0x224b27={'SEC_TO_TIME':'SEC_TO_TIME(%s)','DATE':'DATE(%s)','HOUR':_0xb326('0x5b'),'ROUND':_0xb326('0x5c'),'UNIX_TIMESTAMP':'UNIX_TIMESTAMP(%s)'};var _0x3d44b8=function(_0x19b943){return!_[_0xb326('0x5d')]([_0xb326('0x5e'),_0xb326('0x5f'),_0xb326('0x60'),_0xb326('0x61')],_0x19b943);};var _0x63415a=function(_0x4b29fb){if(!_0x4b29fb||!_0x4b29fb['rules'][_0xb326('0x42')]){return'';}for(var _0xf1b80a='(',_0x274bf8=0x0;_0x274bf8<_0x4b29fb[_0xb326('0x62')][_0xb326('0x42')];_0x274bf8+=0x1){_0x274bf8>0x0&&(_0xf1b80a+='\x20'+_0x4b29fb[_0xb326('0x63')]+'\x20');_0xf1b80a+=_0x4b29fb[_0xb326('0x62')][_0x274bf8]['group']?_0x63415a(_0x4b29fb[_0xb326('0x62')][_0x274bf8][_0xb326('0x64')]):_0x4b29fb[_0xb326('0x62')][_0x274bf8]['field']+'\x20'+_0x4b29fb[_0xb326('0x62')][_0x274bf8][_0xb326('0x65')]+(_0x3d44b8(_0x4b29fb['rules'][_0x274bf8][_0xb326('0x65')])?'\x20'+_0x4b29fb[_0xb326('0x62')][_0x274bf8][_0xb326('0x66')]:'');}return _0xf1b80a+')';};var _0x5ab342={'where':{'id':_0x47e8fe[_0xb326('0x41')]['id']}},_0x36666f,_0x1e2148,_0x53d55c,_0x312c3d,_0x2f6083;_0x5ab342=_[_0xb326('0x36')]({},_0x5ab342,_0x47e8fe[_0xb326('0x3a')]);return db[_0xb326('0x26')][_0xb326('0x49')](_0x5ab342)[_0xb326('0x1d')](function(_0x2e4953){if(_0x2e4953){_0x36666f=_0x2e4953;return _0x2e4953[_0xb326('0x67')]();}return null;})[_0xb326('0x1d')](function(_0x48c7ee){if(_0x48c7ee){if(!_0x48c7ee['length']){throw new db['Sequelize']['ValidationErrorItem'](_0xb326('0x68'),0x193);}_0x1e2148=_0x48c7ee;return db[_0xb326('0x69')][_0xb326('0x3e')]({'raw':!![]});}return null;})[_0xb326('0x1d')](function(_0x5a8b8b){if(_0x5a8b8b){_0x53d55c=_[_0xb326('0x6a')](_0x5a8b8b,'id');var _0x301fd4;var _0x54cd21=squel['select']();_0x54cd21[_0xb326('0x6b')](_0x36666f[_0xb326('0x6c')]);for(var _0x315dab=0x0;_0x315dab<_0x1e2148[_0xb326('0x42')];_0x315dab+=0x1){_0x301fd4=_0x1e2148[_0x315dab][_0xb326('0x6d')]?_0x53d55c[_0x1e2148[_0x315dab][_0xb326('0x6d')]]['metric']:_0x1e2148[_0x315dab]['field'];_0x301fd4=_0x1e2148[_0x315dab][_0xb326('0x6e')]?_[_0xb326('0x6f')](_0x25a996[_0x1e2148[_0x315dab]['function']],'%s',_0x301fd4):_0x301fd4;_0x301fd4=_0x1e2148[_0x315dab][_0xb326('0x70')]?_['replace'](_0x224b27[_0x1e2148[_0x315dab][_0xb326('0x70')]],'%s',_0x301fd4):_0x301fd4;if(_0x1e2148[_0x315dab][_0xb326('0x71')]){_0x54cd21[_0xb326('0x64')](_0x301fd4);}_0x1e2148[_0x315dab][_0xb326('0x72')]&&_0x54cd21['order'](_0x301fd4,_0x1e2148[_0x315dab][_0xb326('0x72')]===_0xb326('0x73')?![]:!![]);_0x54cd21[_0xb326('0x39')](_0x301fd4,_0x1e2148[_0x315dab][_0xb326('0x74')]||_0x301fd4);}if(_0x36666f[_0xb326('0x75')]){_0x36666f[_0xb326('0x75')]=JSON[_0xb326('0x76')](_0x36666f[_0xb326('0x75')]);for(var _0x562eea=0x0;_0x562eea<_0x36666f['joins'][_0xb326('0x42')];_0x562eea+=0x1){if(_0x36666f[_0xb326('0x75')][_0x562eea][_0xb326('0x77')]&&_['includes'](_0x1426cb,_0x36666f[_0xb326('0x75')][_0x562eea][_0xb326('0x77')])&&_0x36666f[_0xb326('0x75')][_0x562eea][_0xb326('0x78')]&&_0x36666f['joins'][_0x562eea]['foreignTable']&&_0x36666f['joins'][_0x562eea][_0xb326('0x79')]){_0x54cd21[_0x36666f[_0xb326('0x75')][_0x562eea][_0xb326('0x77')]](_0x36666f['joins'][_0x562eea][_0xb326('0x7a')],null,util[_0xb326('0x70')](_0xb326('0x7b'),_0x36666f['table'],_0x36666f[_0xb326('0x75')][_0x562eea][_0xb326('0x78')],_0x36666f[_0xb326('0x75')][_0x562eea]['foreignTable'],_0x36666f[_0xb326('0x75')][_0x562eea][_0xb326('0x79')]));}}}if(_0x36666f['conditions']){_0x36666f[_0xb326('0x7c')]=JSON[_0xb326('0x76')](_0x36666f[_0xb326('0x7c')]);_0x54cd21['where'](_0x63415a(_0x36666f[_0xb326('0x7c')][_0xb326('0x64')]));}_0x2f6083=_0x54cd21['clone']();_0x54cd21[_0xb326('0x18')](_0x473a7d);_0x54cd21[_0xb326('0x17')](0x0);logger[_0xb326('0x7d')](_0xb326('0x7e'),_0x54cd21['toString']());return db['sequelize'][_0xb326('0x29')](_0x54cd21[_0xb326('0x7f')](),{'type':db[_0xb326('0x80')][_0xb326('0x81')][_0xb326('0x82')]});}})[_0xb326('0x1d')](respondWithResult(_0x916b3,null))[_0xb326('0x40')](handleError(_0x916b3,null));};function runReport(_0x45cd41,_0xa9076a,_0x2da451){var _0x298a15=_0xa9076a['name'];var _0x3a361a=0xa;var _0x5d745d=[_0xb326('0x50'),_0xb326('0x51'),_0xb326('0x52'),_0xb326('0x53')];var _0x506f24={'SUM':_0xb326('0x54'),'COUNT':_0xb326('0x55'),'COUNT DISTINCT':_0xb326('0x56'),'MAX':_0xb326('0x57'),'MIN':_0xb326('0x58'),'AVG':_0xb326('0x59'),'GROUP_CONCAT':_0xb326('0x83'),'GROUP_CONCAT ASC':_0xb326('0x84'),'GROUP_CONCAT DESC':_0xb326('0x5a')};var _0x442fca={'SEC_TO_TIME':_0xb326('0x85'),'DATE':_0xb326('0x86'),'HOUR':_0xb326('0x5b'),'ROUND':_0xb326('0x5c'),'UNIX_TIMESTAMP':_0xb326('0x87')};var _0x55ea1d=function(_0x54219e){return!_['includes']([_0xb326('0x5e'),_0xb326('0x5f'),'IS\x20EMPTY',_0xb326('0x61')],_0x54219e);};var _0x235530=function(_0x54eb56){if(!_0x54eb56||!_0x54eb56['rules'][_0xb326('0x42')]){return'';}for(var _0x590a02='(',_0x53854c=0x0;_0x53854c<_0x54eb56[_0xb326('0x62')][_0xb326('0x42')];_0x53854c+=0x1){_0x53854c>0x0&&(_0x590a02+='\x20'+_0x54eb56[_0xb326('0x63')]+'\x20');_0x590a02+=_0x54eb56[_0xb326('0x62')][_0x53854c]['group']?_0x235530(_0x54eb56[_0xb326('0x62')][_0x53854c][_0xb326('0x64')]):_0x54eb56[_0xb326('0x62')][_0x53854c][_0xb326('0x39')]+'\x20'+_0x54eb56[_0xb326('0x62')][_0x53854c][_0xb326('0x65')]+(_0x55ea1d(_0x54eb56[_0xb326('0x62')][_0x53854c][_0xb326('0x65')])?'\x20'+_0x54eb56[_0xb326('0x62')][_0x53854c][_0xb326('0x66')]:'');}return _0x590a02+')';};var _0x430e9a={'where':{'id':_0x45cd41['id']}},_0x5b3f24,_0x4cac36,_0x57d542,_0xd0f62a,_0x484f9f;_0x430e9a=_['merge']({},_0x430e9a,_0x2da451);return db[_0xb326('0x26')][_0xb326('0x49')](_0x430e9a)[_0xb326('0x1d')](function(_0x4b4561){if(_0x4b4561){_0x5b3f24=_0x4b4561;return _0x4b4561[_0xb326('0x67')]();}return null;})[_0xb326('0x1d')](function(_0x66ae7b){if(_0x66ae7b){if(!_0x66ae7b[_0xb326('0x42')]){throw new db[(_0xb326('0x88'))]['ValidationErrorItem']('Please\x20insert\x20at\x20least\x20one\x20field',0x193);}_0x4cac36=_0x66ae7b;return db[_0xb326('0x69')][_0xb326('0x3e')]({'raw':!![]});}return null;})[_0xb326('0x1d')](function(_0x181b26){if(_0x181b26){_0x57d542=_[_0xb326('0x6a')](_0x181b26,'id');var _0x3335ee;var _0x51e817=squel[_0xb326('0x89')]();_0x51e817[_0xb326('0x6b')](_0x5b3f24[_0xb326('0x6c')]);for(var _0x545149=0x0;_0x545149<_0x4cac36[_0xb326('0x42')];_0x545149+=0x1){_0x3335ee=_0x4cac36[_0x545149][_0xb326('0x6d')]?_0x57d542[_0x4cac36[_0x545149][_0xb326('0x6d')]][_0xb326('0x8a')]:_0x4cac36[_0x545149][_0xb326('0x39')];_0x3335ee=_0x4cac36[_0x545149][_0xb326('0x6e')]?_['replace'](_0x506f24[_0x4cac36[_0x545149][_0xb326('0x6e')]],'%s',_0x3335ee):_0x3335ee;_0x3335ee=_0x4cac36[_0x545149][_0xb326('0x70')]?_[_0xb326('0x6f')](_0x442fca[_0x4cac36[_0x545149][_0xb326('0x70')]],'%s',_0x3335ee):_0x3335ee;if(_0x4cac36[_0x545149]['groupBy']){_0x51e817[_0xb326('0x64')](_0x3335ee);}_0x4cac36[_0x545149][_0xb326('0x72')]&&_0x51e817[_0xb326('0x31')](_0x3335ee,_0x4cac36[_0x545149][_0xb326('0x72')]===_0xb326('0x73')?![]:!![]);_0x51e817[_0xb326('0x39')](_0x3335ee,_0x4cac36[_0x545149]['alias']||_0x3335ee);}if(_0x5b3f24[_0xb326('0x75')]){_0x5b3f24[_0xb326('0x75')]=JSON['parse'](_0x5b3f24['joins']);for(var _0x1bc5fa=0x0;_0x1bc5fa<_0x5b3f24[_0xb326('0x75')][_0xb326('0x42')];_0x1bc5fa+=0x1){if(_0x5b3f24[_0xb326('0x75')][_0x1bc5fa][_0xb326('0x77')]&&_[_0xb326('0x5d')](_0x5d745d,_0x5b3f24[_0xb326('0x75')][_0x1bc5fa][_0xb326('0x77')])&&_0x5b3f24[_0xb326('0x75')][_0x1bc5fa][_0xb326('0x78')]&&_0x5b3f24[_0xb326('0x75')][_0x1bc5fa][_0xb326('0x7a')]&&_0x5b3f24[_0xb326('0x75')][_0x1bc5fa][_0xb326('0x79')]){_0x51e817[_0x5b3f24[_0xb326('0x75')][_0x1bc5fa][_0xb326('0x77')]](_0x5b3f24[_0xb326('0x75')][_0x1bc5fa]['foreignTable'],null,util[_0xb326('0x70')](_0xb326('0x7b'),_0x5b3f24[_0xb326('0x6c')],_0x5b3f24[_0xb326('0x75')][_0x1bc5fa][_0xb326('0x78')],_0x5b3f24[_0xb326('0x75')][_0x1bc5fa][_0xb326('0x7a')],_0x5b3f24[_0xb326('0x75')][_0x1bc5fa]['foreignKey']));}}}if(_0x5b3f24[_0xb326('0x7c')]){_0x5b3f24[_0xb326('0x7c')]=JSON['parse'](_0x5b3f24['conditions']);_0x51e817[_0xb326('0x35')](_0x235530(_0x5b3f24[_0xb326('0x7c')][_0xb326('0x64')]));}_0x484f9f=_0x51e817[_0xb326('0x8b')]();_0x51e817[_0xb326('0x18')](_0x3a361a);_0x51e817[_0xb326('0x17')](0x0);logger['debug']('Limited\x20Query:',_0x51e817[_0xb326('0x7f')]());return db[_0xb326('0x80')][_0xb326('0x29')](_0x51e817['toString'](),{'type':db[_0xb326('0x80')][_0xb326('0x81')][_0xb326('0x82')]});}})[_0xb326('0x1d')](function(_0x5c3581){if(!_0x5c3581[_0xb326('0x42')]){throw new db[(_0xb326('0x88'))]['ValidationErrorItem'](_0xb326('0x8c'),0xcc);}if(_0xa9076a[_0xb326('0x8d')]===_0xb326('0x8e')){return null;}var _0x46906c=_[_0xb326('0x36')](_0xa9076a,{'name':_0xa9076a[_0xb326('0x8f')]||_0xa9076a['name']||_0x5b3f24[_0xb326('0x90')],'basename':_0x298a15,'savename':util[_0xb326('0x70')]('%s-%s.%s',_0xa9076a[_0xb326('0x90')]||_0x5b3f24[_0xb326('0x90')],require(_0xb326('0x91'))['generate'](0x4),_0xa9076a[_0xb326('0x8d')]||_0xb326('0x92')),'reportId':_0x5b3f24['id'],'reportType':'default'});return db[_0xb326('0x93')]['create'](_0x46906c,{'raw':!![]});})[_0xb326('0x1d')](function(_0x444512){if(_0x5b3f24[_0xb326('0x6c')]==='cdr'){_0x484f9f[_0xb326('0x35')](_0x5b3f24['table']+'.calldate\x20BETWEEN\x20?\x20AND\x20?',_0xa9076a[_0xb326('0x94')],_0xa9076a[_0xb326('0x95')]);}else{_0x484f9f[_0xb326('0x35')](_0x5b3f24[_0xb326('0x6c')]+_0xb326('0x96'),_0xa9076a['startDate'],_0xa9076a[_0xb326('0x95')]);}if(_0x444512){logger[_0xb326('0x97')]('Run\x20Query:',_0x484f9f[_0xb326('0x7f')]());require(_0xb326('0x98'))['fork'](path[_0xb326('0x50')](__dirname,_0xb326('0x99'),_0x444512[_0xb326('0x8d')]),[_0x444512['id'],_0x484f9f['toString'](),path['join'](__dirname,_0xb326('0x9a'),_0x444512[_0xb326('0x9b')]),_0x298a15]);return _0x444512;}else{var _0x360910=squel[_0xb326('0x89')]();_0x360910[_0xb326('0x6b')]('('+_0x484f9f[_0xb326('0x7f')]()+')','countTable');_0x360910[_0xb326('0x39')]('COUNT(*)',_0xb326('0x3b'));_0x484f9f['limit'](_0xa9076a['limit']||_0x3a361a);_0x484f9f[_0xb326('0x17')](_0xa9076a[_0xb326('0x17')]||0x0);return db[_0xb326('0x80')]['query'](_0x360910['toString'](),{'type':db['sequelize']['QueryTypes'][_0xb326('0x82')]})[_0xb326('0x1d')](function(_0xdc88d5){if(!_0xdc88d5[_0xb326('0x42')]){_0xd0f62a=0x0;}else{_0xd0f62a=_0xdc88d5[0x0][_0xb326('0x3b')]||0x0;}return db[_0xb326('0x80')][_0xb326('0x29')](_0x484f9f[_0xb326('0x7f')](),{'type':db[_0xb326('0x80')]['QueryTypes']['SELECT']});})[_0xb326('0x1d')](function(_0x58da19){return{'rows':_0x58da19||[],'count':_0xd0f62a};});}});}exports[_0xb326('0x9c')]=function(_0x26bd51,_0x40eb12){return runReport(_0x26bd51[_0xb326('0x41')],_0x26bd51[_0xb326('0x29')],_0x26bd51['options'])['then'](respondWithResult(_0x40eb12,null))[_0xb326('0x40')](handleError(_0x40eb12,null));};exports[_0xb326('0x9d')]=runReport;exports[_0xb326('0x29')]=function(_0x55be52,_0x3686e2){var _0x5d33b2=0xa;var _0x245859=[_0xb326('0x50'),_0xb326('0x51'),'right_join',_0xb326('0x53')];var _0x2f49aa={'SUM':_0xb326('0x54'),'COUNT':'COUNT(%s)','COUNT DISTINCT':_0xb326('0x56'),'MAX':'MAX(%s)','MIN':_0xb326('0x58'),'AVG':_0xb326('0x59'),'GROUP_CONCAT':'GROUP_CONCAT(%s)','GROUP_CONCAT ASC':_0xb326('0x84'),'GROUP_CONCAT DESC':_0xb326('0x5a')};var _0x279621={'SEC_TO_TIME':_0xb326('0x85'),'DATE':_0xb326('0x86'),'HOUR':'HOUR(%s)','ROUND':'ROUND(%s)','UNIX_TIMESTAMP':_0xb326('0x87')};var _0x36bcb9=function(_0x2fa14b){return!_['includes']([_0xb326('0x5e'),'IS\x20NOT\x20NULL',_0xb326('0x60'),_0xb326('0x61')],_0x2fa14b);};var _0xf7fe46=function(_0x49e2fc){if(!_0x49e2fc||!_0x49e2fc[_0xb326('0x62')][_0xb326('0x42')]){return'';}for(var _0x2460a3='(',_0x31ae41=0x0;_0x31ae41<_0x49e2fc[_0xb326('0x62')][_0xb326('0x42')];_0x31ae41+=0x1){_0x31ae41>0x0&&(_0x2460a3+='\x20'+_0x49e2fc[_0xb326('0x63')]+'\x20');_0x2460a3+=_0x49e2fc[_0xb326('0x62')][_0x31ae41][_0xb326('0x64')]?_0xf7fe46(_0x49e2fc[_0xb326('0x62')][_0x31ae41][_0xb326('0x64')]):_0x49e2fc[_0xb326('0x62')][_0x31ae41][_0xb326('0x39')]+'\x20'+_0x49e2fc[_0xb326('0x62')][_0x31ae41][_0xb326('0x65')]+(_0x36bcb9(_0x49e2fc[_0xb326('0x62')][_0x31ae41][_0xb326('0x65')])?'\x20'+_0x49e2fc['rules'][_0x31ae41]['value']:'');}return _0x2460a3+')';};var _0x251b41={'where':{'id':_0x55be52[_0xb326('0x41')]['id']}},_0x296131,_0x2200b8,_0x55e648,_0x2a31ab,_0x2c4b9b;_0x251b41=_[_0xb326('0x36')]({},_0x251b41,_0x55be52[_0xb326('0x3a')]);return db['AnalyticDefaultReport'][_0xb326('0x49')](_0x251b41)['then'](function(_0x24d114){if(_0x24d114){_0x296131=_0x24d114;return _0x24d114[_0xb326('0x67')]();}return null;})[_0xb326('0x1d')](function(_0x2c13ee){if(_0x2c13ee){if(!_0x2c13ee[_0xb326('0x42')]){throw new db[(_0xb326('0x88'))][(_0xb326('0x9e'))](_0xb326('0x68'),0x193);}_0x2200b8=_0x2c13ee;return db['AnalyticMetric'][_0xb326('0x3e')]({'raw':!![]});}return null;})[_0xb326('0x1d')](function(_0xc58bd9){if(_0xc58bd9){_0x55e648=_['keyBy'](_0xc58bd9,'id');var _0x3b2101;var _0xc03bf=squel[_0xb326('0x89')]();_0xc03bf[_0xb326('0x6b')](_0x296131[_0xb326('0x6c')]);for(var _0x2358d3=0x0;_0x2358d3<_0x2200b8[_0xb326('0x42')];_0x2358d3+=0x1){_0x3b2101=_0x2200b8[_0x2358d3][_0xb326('0x6d')]?_0x55e648[_0x2200b8[_0x2358d3]['MetricId']]['metric']:_0x2200b8[_0x2358d3][_0xb326('0x39')];_0x3b2101=_0x2200b8[_0x2358d3][_0xb326('0x6e')]?_[_0xb326('0x6f')](_0x2f49aa[_0x2200b8[_0x2358d3][_0xb326('0x6e')]],'%s',_0x3b2101):_0x3b2101;_0x3b2101=_0x2200b8[_0x2358d3]['format']?_[_0xb326('0x6f')](_0x279621[_0x2200b8[_0x2358d3][_0xb326('0x70')]],'%s',_0x3b2101):_0x3b2101;if(_0x2200b8[_0x2358d3][_0xb326('0x71')]){_0xc03bf[_0xb326('0x64')](_0x3b2101);}_0x2200b8[_0x2358d3][_0xb326('0x72')]&&_0xc03bf[_0xb326('0x31')](_0x3b2101,_0x2200b8[_0x2358d3][_0xb326('0x72')]==='DESC'?![]:!![]);_0xc03bf[_0xb326('0x39')](_0x3b2101,_0x2200b8[_0x2358d3][_0xb326('0x74')]||_0x3b2101);}if(_0x296131[_0xb326('0x75')]){_0x296131['joins']=JSON[_0xb326('0x76')](_0x296131['joins']);for(var _0x4d43ea=0x0;_0x4d43ea<_0x296131[_0xb326('0x75')][_0xb326('0x42')];_0x4d43ea+=0x1){if(_0x296131[_0xb326('0x75')][_0x4d43ea][_0xb326('0x77')]&&_[_0xb326('0x5d')](_0x245859,_0x296131[_0xb326('0x75')][_0x4d43ea][_0xb326('0x77')])&&_0x296131[_0xb326('0x75')][_0x4d43ea][_0xb326('0x78')]&&_0x296131[_0xb326('0x75')][_0x4d43ea][_0xb326('0x7a')]&&_0x296131[_0xb326('0x75')][_0x4d43ea]['foreignKey']){_0xc03bf[_0x296131[_0xb326('0x75')][_0x4d43ea][_0xb326('0x77')]](_0x296131[_0xb326('0x75')][_0x4d43ea]['foreignTable'],null,util[_0xb326('0x70')](_0xb326('0x7b'),_0x296131['table'],_0x296131[_0xb326('0x75')][_0x4d43ea]['parentKey'],_0x296131[_0xb326('0x75')][_0x4d43ea][_0xb326('0x7a')],_0x296131[_0xb326('0x75')][_0x4d43ea]['foreignKey']));}}}if(_0x296131[_0xb326('0x7c')]){_0x296131[_0xb326('0x7c')]=JSON['parse'](_0x296131[_0xb326('0x7c')]);_0xc03bf[_0xb326('0x35')](_0xf7fe46(_0x296131[_0xb326('0x7c')][_0xb326('0x64')]));}_0x2c4b9b=_0xc03bf[_0xb326('0x8b')]();_0xc03bf[_0xb326('0x18')](_0x5d33b2);_0xc03bf['offset'](0x0);logger[_0xb326('0x7d')](_0xb326('0x7e'),_0xc03bf['toString']());return db['sequelize'][_0xb326('0x29')](_0xc03bf[_0xb326('0x7f')](),{'type':db['sequelize'][_0xb326('0x81')][_0xb326('0x82')]});}})[_0xb326('0x1d')](function(){return{'sql':_0x2c4b9b[_0xb326('0x7f')]()};})[_0xb326('0x1d')](respondWithResult(_0x3686e2,null))[_0xb326('0x40')](handleError(_0x3686e2,null));};
\ No newline at end of file
index a2f513a..36520bc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xea22=['../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','define','AnalyticDefaultReport','analytics_default_reports','lodash','util'];(function(_0x2c82ef,_0x3c1f87){var _0x36784f=function(_0x41bd23){while(--_0x41bd23){_0x2c82ef['push'](_0x2c82ef['shift']());}};_0x36784f(++_0x3c1f87);}(_0xea22,0x80));var _0x2ea2=function(_0x357cb8,_0x23750a){_0x357cb8=_0x357cb8-0x0;var _0x5cdb5f=_0xea22[_0x357cb8];return _0x5cdb5f;};'use strict';var _=require(_0x2ea2('0x0'));var util=require(_0x2ea2('0x1'));var logger=require(_0x2ea2('0x2'))(_0x2ea2('0x3'));var moment=require(_0x2ea2('0x4'));var BPromise=require(_0x2ea2('0x5'));var rp=require(_0x2ea2('0x6'));var fs=require('fs');var path=require(_0x2ea2('0x7'));var rimraf=require(_0x2ea2('0x8'));var config=require(_0x2ea2('0x9'));var attributes=require('./analyticDefaultReport.attributes');module['exports']=function(_0xe8d4d8,_0x77bc5e){return _0xe8d4d8[_0x2ea2('0xa')](_0x2ea2('0xb'),attributes,{'tableName':_0x2ea2('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xde62=['analytics_default_reports','lodash','util','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./analyticDefaultReport.attributes','exports','define','AnalyticDefaultReport'];(function(_0x5037ab,_0x43209e){var _0x512adb=function(_0x261783){while(--_0x261783){_0x5037ab['push'](_0x5037ab['shift']());}};_0x512adb(++_0x43209e);}(_0xde62,0x143));var _0x2de6=function(_0x5847c1,_0x32d28b){_0x5847c1=_0x5847c1-0x0;var _0x5d77e5=_0xde62[_0x5847c1];return _0x5d77e5;};'use strict';var _=require(_0x2de6('0x0'));var util=require(_0x2de6('0x1'));var logger=require('../../config/logger')(_0x2de6('0x2'));var moment=require(_0x2de6('0x3'));var BPromise=require(_0x2de6('0x4'));var rp=require(_0x2de6('0x5'));var fs=require('fs');var path=require(_0x2de6('0x6'));var rimraf=require(_0x2de6('0x7'));var config=require(_0x2de6('0x8'));var attributes=require(_0x2de6('0x9'));module[_0x2de6('0xa')]=function(_0x469d52,_0x224918){return _0x469d52[_0x2de6('0xb')](_0x2de6('0xc'),attributes,{'tableName':_0x2de6('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6cb6d1a..164f9b6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x00bb=['stringify','error','message','catch','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','request','info','AnalyticDefaultReport,\x20%s,\x20%s','request\x20sent','debug','AnalyticDefaultReport,\x20%s,\x20%s,\x20%s'];(function(_0x51361c,_0x3ac7f6){var _0xafa94b=function(_0x2886ba){while(--_0x2886ba){_0x51361c['push'](_0x51361c['shift']());}};_0xafa94b(++_0x3ac7f6);}(_0x00bb,0x1d8));var _0xb00b=function(_0x1ac595,_0x5d2081){_0x1ac595=_0x1ac595-0x0;var _0x455fff=_0x00bb[_0x1ac595];return _0x455fff;};'use strict';var _=require(_0xb00b('0x0'));var util=require(_0xb00b('0x1'));var moment=require(_0xb00b('0x2'));var BPromise=require('bluebird');var rs=require(_0xb00b('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xb00b('0x4'))['db'];var utils=require(_0xb00b('0x5'));var logger=require('../../config/logger')(_0xb00b('0x6'));var config=require(_0xb00b('0x7'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x36e363,_0xf737d0,_0x41dfc9){return new BPromise(function(_0x37f07d,_0xfa4181){return client[_0xb00b('0x8')](_0x36e363,_0x41dfc9)['then'](function(_0x51d12b){logger[_0xb00b('0x9')](_0xb00b('0xa'),_0xf737d0,_0xb00b('0xb'));logger[_0xb00b('0xc')](_0xb00b('0xd'),_0xf737d0,'request\x20sent',JSON[_0xb00b('0xe')](_0x51d12b));if(_0x51d12b['error']){if(_0x51d12b['error']['code']===0x1f4){logger[_0xb00b('0xf')](_0xb00b('0xa'),_0xf737d0,_0x51d12b[_0xb00b('0xf')][_0xb00b('0x10')]);return _0xfa4181(_0x51d12b[_0xb00b('0xf')][_0xb00b('0x10')]);}logger['error'](_0xb00b('0xa'),_0xf737d0,_0x51d12b[_0xb00b('0xf')]['message']);return _0x37f07d(_0x51d12b[_0xb00b('0xf')][_0xb00b('0x10')]);}else{logger['info']('AnalyticDefaultReport,\x20%s,\x20%s',_0xf737d0,_0xb00b('0xb'));_0x37f07d(_0x51d12b['result']['message']);}})[_0xb00b('0x11')](function(_0x638443){logger[_0xb00b('0xf')](_0xb00b('0xa'),_0xf737d0,_0x638443);_0xfa4181(_0x638443);});});}
\ No newline at end of file
+var _0xaa88=['ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','http','then','info','request\x20sent','debug','AnalyticDefaultReport,\x20%s,\x20%s,\x20%s','error','AnalyticDefaultReport,\x20%s,\x20%s','message','result','catch','lodash','util','moment','bluebird'];(function(_0x3488e0,_0x32ad11){var _0x3e1168=function(_0x22df9e){while(--_0x22df9e){_0x3488e0['push'](_0x3488e0['shift']());}};_0x3e1168(++_0x32ad11);}(_0xaa88,0x137));var _0x8aa8=function(_0x1e4150,_0x55b02a){_0x1e4150=_0x1e4150-0x0;var _0x1ce3ee=_0xaa88[_0x1e4150];return _0x1ce3ee;};'use strict';var _=require(_0x8aa8('0x0'));var util=require(_0x8aa8('0x1'));var moment=require(_0x8aa8('0x2'));var BPromise=require(_0x8aa8('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x8aa8('0x4'));var db=require(_0x8aa8('0x5'))['db'];var utils=require(_0x8aa8('0x6'));var logger=require(_0x8aa8('0x7'))(_0x8aa8('0x8'));var config=require(_0x8aa8('0x9'));var jayson=require('jayson/promise');var client=jayson['client'][_0x8aa8('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x5264ff,_0x449d2d,_0x1ed84d){return new BPromise(function(_0x27c08d,_0x40826f){return client['request'](_0x5264ff,_0x1ed84d)[_0x8aa8('0xb')](function(_0x2d974c){logger[_0x8aa8('0xc')]('AnalyticDefaultReport,\x20%s,\x20%s',_0x449d2d,_0x8aa8('0xd'));logger[_0x8aa8('0xe')](_0x8aa8('0xf'),_0x449d2d,_0x8aa8('0xd'),JSON['stringify'](_0x2d974c));if(_0x2d974c[_0x8aa8('0x10')]){if(_0x2d974c[_0x8aa8('0x10')]['code']===0x1f4){logger[_0x8aa8('0x10')](_0x8aa8('0x11'),_0x449d2d,_0x2d974c[_0x8aa8('0x10')]['message']);return _0x40826f(_0x2d974c[_0x8aa8('0x10')][_0x8aa8('0x12')]);}logger[_0x8aa8('0x10')]('AnalyticDefaultReport,\x20%s,\x20%s',_0x449d2d,_0x2d974c[_0x8aa8('0x10')]['message']);return _0x27c08d(_0x2d974c['error'][_0x8aa8('0x12')]);}else{logger[_0x8aa8('0xc')](_0x8aa8('0x11'),_0x449d2d,_0x8aa8('0xd'));_0x27c08d(_0x2d974c[_0x8aa8('0x13')][_0x8aa8('0x12')]);}})[_0x8aa8('0x14')](function(_0xd59fb8){logger[_0x8aa8('0x10')]('AnalyticDefaultReport,\x20%s,\x20%s',_0x449d2d,_0xd59fb8);_0x40826f(_0xd59fb8);});});}
\ No newline at end of file
index e1c2a83..f130995 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0468=['query','create','update','delete','destroy','multer','util','path','express','../../components/interaction/service','../../config/environment','./analyticDefaultReport.controller','index','get','/:id','show','preview','/:id/run','isAuthenticated','run','/:id/query'];(function(_0x2c55bd,_0x28867e){var _0x17ac04=function(_0x991526){while(--_0x991526){_0x2c55bd['push'](_0x2c55bd['shift']());}};_0x17ac04(++_0x28867e);}(_0x0468,0x1be));var _0x8046=function(_0xe06a6e,_0x463b42){_0xe06a6e=_0xe06a6e-0x0;var _0x5a51df=_0x0468[_0xe06a6e];return _0x5a51df;};'use strict';var multer=require(_0x8046('0x0'));var util=require(_0x8046('0x1'));var path=require(_0x8046('0x2'));var timeout=require('connect-timeout');var express=require(_0x8046('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x8046('0x4'));var config=require(_0x8046('0x5'));var controller=require(_0x8046('0x6'));router['get']('/',auth['isAuthenticated'](),controller[_0x8046('0x7')]);router[_0x8046('0x8')](_0x8046('0x9'),auth['isAuthenticated'](),controller[_0x8046('0xa')]);router[_0x8046('0x8')]('/:id/preview',auth['isAuthenticated'](),controller[_0x8046('0xb')]);router['get'](_0x8046('0xc'),auth[_0x8046('0xd')](),controller[_0x8046('0xe')]);router['get'](_0x8046('0xf'),auth[_0x8046('0xd')](),controller[_0x8046('0x10')]);router['post']('/',auth[_0x8046('0xd')](),controller[_0x8046('0x11')]);router['put'](_0x8046('0x9'),auth[_0x8046('0xd')](),controller[_0x8046('0x12')]);router[_0x8046('0x13')]('/:id',auth[_0x8046('0xd')](),controller[_0x8046('0x14')]);module['exports']=router;
\ No newline at end of file
+var _0x5edf=['get','isAuthenticated','index','/:id','show','preview','/:id/run','run','/:id/query','query','post','create','put','update','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./analyticDefaultReport.controller'];(function(_0x1cf496,_0x44d84c){var _0x1eb347=function(_0x38a78c){while(--_0x38a78c){_0x1cf496['push'](_0x1cf496['shift']());}};_0x1eb347(++_0x44d84c);}(_0x5edf,0x187));var _0xf5ed=function(_0x35f67b,_0x540ca5){_0x35f67b=_0x35f67b-0x0;var _0x2efa5d=_0x5edf[_0x35f67b];return _0x2efa5d;};'use strict';var multer=require(_0xf5ed('0x0'));var util=require(_0xf5ed('0x1'));var path=require(_0xf5ed('0x2'));var timeout=require(_0xf5ed('0x3'));var express=require(_0xf5ed('0x4'));var router=express[_0xf5ed('0x5')]();var auth=require(_0xf5ed('0x6'));var interaction=require(_0xf5ed('0x7'));var config=require('../../config/environment');var controller=require(_0xf5ed('0x8'));router[_0xf5ed('0x9')]('/',auth[_0xf5ed('0xa')](),controller[_0xf5ed('0xb')]);router[_0xf5ed('0x9')](_0xf5ed('0xc'),auth[_0xf5ed('0xa')](),controller[_0xf5ed('0xd')]);router[_0xf5ed('0x9')]('/:id/preview',auth[_0xf5ed('0xa')](),controller[_0xf5ed('0xe')]);router[_0xf5ed('0x9')](_0xf5ed('0xf'),auth[_0xf5ed('0xa')](),controller[_0xf5ed('0x10')]);router[_0xf5ed('0x9')](_0xf5ed('0x11'),auth[_0xf5ed('0xa')](),controller[_0xf5ed('0x12')]);router[_0xf5ed('0x13')]('/',auth['isAuthenticated'](),controller[_0xf5ed('0x14')]);router[_0xf5ed('0x15')]('/:id',auth[_0xf5ed('0xa')](),controller[_0xf5ed('0x16')]);router['delete'](_0xf5ed('0xc'),auth[_0xf5ed('0xa')](),controller[_0xf5ed('0x17')]);module[_0xf5ed('0x18')]=router;
\ No newline at end of file
index b73e62d..8277351 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3044=['Loading','scheduled','INTEGER','STRING','ENUM','csv','xlsx','DATE'];(function(_0x558ef8,_0x20108d){var _0x16526e=function(_0xe6e89e){while(--_0xe6e89e){_0x558ef8['push'](_0x558ef8['shift']());}};_0x16526e(++_0x20108d);}(_0x3044,0xdb));var _0x4304=function(_0x2aecb2,_0x343312){_0x2aecb2=_0x2aecb2-0x0;var _0x3ebb80=_0x3044[_0x2aecb2];return _0x3ebb80;};'use strict';var Sequelize=require('sequelize');var moment=require('moment');module['exports']={'name':{'type':Sequelize[_0x4304('0x0')],'allowNull':![]},'basename':{'type':Sequelize[_0x4304('0x0')],'allowNull':![]},'output':{'type':Sequelize[_0x4304('0x1')](_0x4304('0x2'),'pdf',_0x4304('0x3')),'allowNull':![],'defaultValue':_0x4304('0x2')},'savename':{'type':Sequelize[_0x4304('0x0')],'allowNull':![]},'startDate':{'type':Sequelize[_0x4304('0x4')]},'endDate':{'type':Sequelize[_0x4304('0x4')]},'status':{'type':Sequelize[_0x4304('0x0')],'defaultValue':_0x4304('0x5')},'type':{'type':Sequelize[_0x4304('0x1')]('manual',_0x4304('0x6')),'allowNull':![],'defaultValue':'manual'},'reportId':{'type':Sequelize[_0x4304('0x7')](0xb)['UNSIGNED']},'reportType':{'type':Sequelize[_0x4304('0x0')]}};
\ No newline at end of file
+var _0xc6c4=['csv','DATE','manual','scheduled','INTEGER','exports','STRING','ENUM','pdf','xlsx'];(function(_0x3f375f,_0xb8b113){var _0x5e0a67=function(_0x3e19b7){while(--_0x3e19b7){_0x3f375f['push'](_0x3f375f['shift']());}};_0x5e0a67(++_0xb8b113);}(_0xc6c4,0x14f));var _0x4c6c=function(_0x4b33fe,_0x34bf3e){_0x4b33fe=_0x4b33fe-0x0;var _0x4dc7ea=_0xc6c4[_0x4b33fe];return _0x4dc7ea;};'use strict';var Sequelize=require('sequelize');var moment=require('moment');module[_0x4c6c('0x0')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'basename':{'type':Sequelize[_0x4c6c('0x1')],'allowNull':![]},'output':{'type':Sequelize[_0x4c6c('0x2')]('csv',_0x4c6c('0x3'),_0x4c6c('0x4')),'allowNull':![],'defaultValue':_0x4c6c('0x5')},'savename':{'type':Sequelize[_0x4c6c('0x1')],'allowNull':![]},'startDate':{'type':Sequelize[_0x4c6c('0x6')]},'endDate':{'type':Sequelize[_0x4c6c('0x6')]},'status':{'type':Sequelize[_0x4c6c('0x1')],'defaultValue':'Loading'},'type':{'type':Sequelize[_0x4c6c('0x2')](_0x4c6c('0x7'),_0x4c6c('0x8')),'allowNull':![],'defaultValue':_0x4c6c('0x7')},'reportId':{'type':Sequelize[_0x4c6c('0x9')](0xb)['UNSIGNED']},'reportType':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 0ed992f..aad93e8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7d06=['reject','destroy','then','get','ExtractedReports','UserProfileResource','stack','name','send','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','map','key','VIRTUAL','field','options','include','AnalyticExtractedReport','findAll','rows','show','params','rawAttributes','includeAll','find','catch','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','download','basename','savename','existsSync','join','root','Sequelize','ValidationError','Report\x20not\x20found\x20or\x20empty','server/files/reports','format','%s.%s','output','toLowerCase','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','path','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply'];(function(_0x4a1e76,_0x32a127){var _0x4d878f=function(_0x6ca78b){while(--_0x6ca78b){_0x4a1e76['push'](_0x4a1e76['shift']());}};_0x4d878f(++_0x32a127);}(_0x7d06,0x158));var _0x67d0=function(_0x3d13c4,_0x20c4af){_0x3d13c4=_0x3d13c4-0x0;var _0x1add88=_0x7d06[_0x3d13c4];return _0x1add88;};'use strict';var pdf=require(_0x67d0('0x0'));var emlformat=require(_0x67d0('0x1'));var rimraf=require(_0x67d0('0x2'));var zipdir=require(_0x67d0('0x3'));var jsonpatch=require(_0x67d0('0x4'));var rp=require('request-promise');var moment=require(_0x67d0('0x5'));var BPromise=require(_0x67d0('0x6'));var Mustache=require(_0x67d0('0x7'));var util=require('util');var path=require(_0x67d0('0x8'));var sox=require('sox');var csv=require(_0x67d0('0x9'));var ejs=require(_0x67d0('0xa'));var fs=require('fs');var _=require(_0x67d0('0xb'));var squel=require(_0x67d0('0xc'));var crypto=require(_0x67d0('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x67d0('0xe'));var toCsv=require('to-csv');var querystring=require(_0x67d0('0xf'));var Papa=require('papaparse');var Redis=require(_0x67d0('0x10'));var authService=require(_0x67d0('0x11'));var qs=require(_0x67d0('0x12'));var hardwareService=require(_0x67d0('0x13'));var logger=require('../../config/logger')(_0x67d0('0x14'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x67d0('0x15'))['db'];function respondWithStatusCode(_0x7e333,_0x53f029){_0x53f029=_0x53f029||0xcc;return function(_0x1d1532){if(_0x1d1532){return _0x7e333[_0x67d0('0x16')](_0x53f029);}return _0x7e333['status'](_0x53f029)[_0x67d0('0x17')]();};}function respondWithResult(_0x556202,_0xfae4a7){_0xfae4a7=_0xfae4a7||0xc8;return function(_0x1b4833){if(_0x1b4833){return _0x556202[_0x67d0('0x18')](_0xfae4a7)[_0x67d0('0x19')](_0x1b4833);}};}function respondWithFilteredResult(_0x2263a8,_0x2fc64c){return function(_0x254293){if(_0x254293){var _0x25dd91=_0x254293[_0x67d0('0x1a')],_0x311456=_0x2fc64c[_0x67d0('0x1b')],_0x1f8046=_0x2fc64c['offset']+_0x2fc64c[_0x67d0('0x1c')],_0x579b5e;if(_0x1f8046>=_0x25dd91){_0x1f8046=_0x25dd91;_0x579b5e=0xc8;}else{_0x579b5e=0xce;}_0x2263a8[_0x67d0('0x18')](_0x579b5e);return _0x2263a8[_0x67d0('0x1d')](_0x67d0('0x1e'),_0x311456+'-'+_0x1f8046+'/'+_0x25dd91)[_0x67d0('0x19')](_0x254293);}return null;};}function patchUpdates(_0x562ad6){return function(_0x3b440e){try{jsonpatch[_0x67d0('0x1f')](_0x3b440e,_0x562ad6,!![]);}catch(_0x4886cf){return BPromise[_0x67d0('0x20')](_0x4886cf);}return _0x3b440e['save']();};}function saveUpdates(_0x27cf1e,_0xe74220){return function(_0x248856){if(_0x248856){return _0x248856['update'](_0x27cf1e)['then'](function(_0x3e19ab){return _0x3e19ab;});}return null;};}function removeEntity(_0x14fc33,_0x9f2798){return function(_0x2e0f9a){if(_0x2e0f9a){return _0x2e0f9a[_0x67d0('0x21')]()[_0x67d0('0x22')](function(){var _0x2250e5=_0x2e0f9a[_0x67d0('0x23')]({'plain':!![]});var _0xbf5d9a=_0x67d0('0x24');return db[_0x67d0('0x25')][_0x67d0('0x21')]({'where':{'type':_0xbf5d9a,'resourceId':_0x2250e5['id']}})[_0x67d0('0x22')](function(){return _0x2e0f9a;});})[_0x67d0('0x22')](function(){_0x14fc33[_0x67d0('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0x27a9fe,_0x2eaa1b){return function(_0x197133){if(!_0x197133){_0x27a9fe[_0x67d0('0x16')](0x194);}return _0x197133;};}function handleError(_0x3a5ce1,_0x302278){_0x302278=_0x302278||0x1f4;return function(_0x3327be){logger['error'](_0x3327be[_0x67d0('0x26')]);if(_0x3327be['name']){delete _0x3327be[_0x67d0('0x27')];}_0x3a5ce1[_0x67d0('0x18')](_0x302278)[_0x67d0('0x28')](_0x3327be);};}exports['index']=function(_0x33b511,_0x108f41){var _0x3824a6={},_0x1256a8={},_0x4781f0={'count':0x0,'rows':[]};var _0x509d48=db['AnalyticExtractedReport']['rawAttributes'];_0x1256a8['model']=_[_0x67d0('0x29')](_0x509d48);_0x1256a8['query']=_[_0x67d0('0x29')](_0x33b511[_0x67d0('0x2a')]);_0x1256a8[_0x67d0('0x2b')]=_[_0x67d0('0x2c')](_0x1256a8[_0x67d0('0x2d')],_0x1256a8['query']);_0x3824a6[_0x67d0('0x2e')]=_['intersection'](_0x1256a8[_0x67d0('0x2d')],qs['fields'](_0x33b511['query'][_0x67d0('0x2f')]));_0x3824a6[_0x67d0('0x2e')]=_0x3824a6[_0x67d0('0x2e')][_0x67d0('0x30')]?_0x3824a6['attributes']:_0x1256a8[_0x67d0('0x2d')];if(!_0x33b511[_0x67d0('0x2a')][_0x67d0('0x31')](_0x67d0('0x32'))){_0x3824a6[_0x67d0('0x1c')]=qs[_0x67d0('0x1c')](_0x33b511['query']['limit']);_0x3824a6[_0x67d0('0x1b')]=qs[_0x67d0('0x1b')](_0x33b511[_0x67d0('0x2a')]['offset']);}_0x3824a6[_0x67d0('0x33')]=qs[_0x67d0('0x34')](_0x33b511[_0x67d0('0x2a')]['sort']);_0x3824a6['where']=qs['filters'](_[_0x67d0('0x35')](_0x33b511[_0x67d0('0x2a')],_0x1256a8[_0x67d0('0x2b')]));if(_0x33b511[_0x67d0('0x2a')][_0x67d0('0x36')]){_0x3824a6[_0x67d0('0x37')]=_[_0x67d0('0x38')](_0x3824a6[_0x67d0('0x37')],{'$or':_[_0x67d0('0x39')](_0x509d48,function(_0x52a620){if(_0x52a620['type'][_0x67d0('0x3a')]!==_0x67d0('0x3b')){var _0x424991={};_0x424991[_0x52a620[_0x67d0('0x3c')]]={'$like':'%'+_0x33b511[_0x67d0('0x2a')][_0x67d0('0x36')]+'%'};return _0x424991;}})});}_0x3824a6=_[_0x67d0('0x38')]({},_0x3824a6,_0x33b511[_0x67d0('0x3d')]);var _0x4c3a72={'where':_0x3824a6[_0x67d0('0x37')]};return db['AnalyticExtractedReport'][_0x67d0('0x1a')](_0x4c3a72)[_0x67d0('0x22')](function(_0x47a858){_0x4781f0[_0x67d0('0x1a')]=_0x47a858;if(_0x33b511[_0x67d0('0x2a')]['includeAll']){_0x3824a6[_0x67d0('0x3e')]=[{'all':!![]}];}return db[_0x67d0('0x3f')][_0x67d0('0x40')](_0x3824a6);})[_0x67d0('0x22')](function(_0x537e1a){_0x4781f0[_0x67d0('0x41')]=_0x537e1a;return _0x4781f0;})[_0x67d0('0x22')](respondWithFilteredResult(_0x108f41,_0x3824a6))['catch'](handleError(_0x108f41,null));};exports[_0x67d0('0x42')]=function(_0x1e0750,_0x1f7120){var _0x4e7984={'raw':!![],'where':{'id':_0x1e0750[_0x67d0('0x43')]['id']}},_0x2cb997={};_0x2cb997[_0x67d0('0x2d')]=_[_0x67d0('0x29')](db[_0x67d0('0x3f')][_0x67d0('0x44')]);_0x2cb997[_0x67d0('0x2a')]=_['keys'](_0x1e0750[_0x67d0('0x2a')]);_0x2cb997[_0x67d0('0x2b')]=_[_0x67d0('0x2c')](_0x2cb997[_0x67d0('0x2d')],_0x2cb997[_0x67d0('0x2a')]);_0x4e7984[_0x67d0('0x2e')]=_[_0x67d0('0x2c')](_0x2cb997['model'],qs[_0x67d0('0x2f')](_0x1e0750[_0x67d0('0x2a')][_0x67d0('0x2f')]));_0x4e7984['attributes']=_0x4e7984['attributes']['length']?_0x4e7984['attributes']:_0x2cb997[_0x67d0('0x2d')];if(_0x1e0750['query'][_0x67d0('0x45')]){_0x4e7984[_0x67d0('0x3e')]=[{'all':!![]}];}_0x4e7984=_[_0x67d0('0x38')]({},_0x4e7984,_0x1e0750[_0x67d0('0x3d')]);return db[_0x67d0('0x3f')][_0x67d0('0x46')](_0x4e7984)[_0x67d0('0x22')](handleEntityNotFound(_0x1f7120,null))[_0x67d0('0x22')](respondWithResult(_0x1f7120,null))[_0x67d0('0x47')](handleError(_0x1f7120,null));};exports[_0x67d0('0x48')]=function(_0x42a3d3,_0x522874){return db[_0x67d0('0x3f')][_0x67d0('0x48')](_0x42a3d3[_0x67d0('0x49')],{})[_0x67d0('0x22')](function(_0x18f73e){var _0x1aa968=_0x42a3d3[_0x67d0('0x4a')][_0x67d0('0x23')]({'plain':!![]});if(!_0x1aa968)throw new Error(_0x67d0('0x4b'));if(_0x1aa968[_0x67d0('0x4c')]==='user'){var _0x1c5cf5=_0x18f73e[_0x67d0('0x23')]({'plain':!![]});var _0x1a7cd3='ExtractedReports';return db['UserProfileSection'][_0x67d0('0x46')]({'where':{'name':_0x1a7cd3,'userProfileId':_0x1aa968['userProfileId']},'raw':!![]})[_0x67d0('0x22')](function(_0x2035b4){if(_0x2035b4&&_0x2035b4['autoAssociation']===0x0){return db['UserProfileResource'][_0x67d0('0x48')]({'name':_0x1c5cf5[_0x67d0('0x27')],'resourceId':_0x1c5cf5['id'],'type':_0x2035b4['name'],'sectionId':_0x2035b4['id']},{})[_0x67d0('0x22')](function(){return _0x18f73e;});}else{return _0x18f73e;}})[_0x67d0('0x47')](function(_0x39c7d8){logger[_0x67d0('0x4d')](_0x67d0('0x4e'),_0x39c7d8);throw _0x39c7d8;});}return _0x18f73e;})[_0x67d0('0x22')](respondWithResult(_0x522874,0xc9))['catch'](handleError(_0x522874,null));};exports[_0x67d0('0x4f')]=function(_0x1ec393,_0x46fafc){if(_0x1ec393[_0x67d0('0x49')]['id']){delete _0x1ec393[_0x67d0('0x49')]['id'];}return db['AnalyticExtractedReport'][_0x67d0('0x46')]({'where':{'id':_0x1ec393[_0x67d0('0x43')]['id']}})[_0x67d0('0x22')](handleEntityNotFound(_0x46fafc,null))['then'](saveUpdates(_0x1ec393[_0x67d0('0x49')],null))[_0x67d0('0x22')](respondWithResult(_0x46fafc,null))['catch'](handleError(_0x46fafc,null));};exports[_0x67d0('0x21')]=function(_0x5a2d4a,_0x47ad2b){return db[_0x67d0('0x3f')]['find']({'where':{'id':_0x5a2d4a[_0x67d0('0x43')]['id']}})[_0x67d0('0x22')](handleEntityNotFound(_0x47ad2b,null))[_0x67d0('0x22')](removeEntity(_0x47ad2b,null))[_0x67d0('0x47')](handleError(_0x47ad2b,null));};exports[_0x67d0('0x50')]=function(_0x3758a7,_0x2391f7,_0x27f660){return db[_0x67d0('0x3f')][_0x67d0('0x46')]({'where':{'id':_0x3758a7['params']['id']},'attributes':[_0x67d0('0x27'),_0x67d0('0x51'),_0x67d0('0x52'),'output'],'raw':!![]})['then'](handleEntityNotFound(_0x2391f7,null))['then'](function(_0x22da0e){if(_0x22da0e){if(!fs[_0x67d0('0x53')](path[_0x67d0('0x54')](config[_0x67d0('0x55')],'server/files/reports',_0x22da0e['savename']))){throw new db[(_0x67d0('0x56'))][(_0x67d0('0x57'))](_0x67d0('0x58'));}if(_0x3758a7[_0x67d0('0x2a')]['exists']){return _0x2391f7[_0x67d0('0x16')](0xc8);}return _0x2391f7[_0x67d0('0x50')](path['join'](config['root'],_0x67d0('0x59'),_0x22da0e[_0x67d0('0x52')]),util[_0x67d0('0x5a')](_0x67d0('0x5b'),_0x22da0e[_0x67d0('0x51')]||_0x22da0e[_0x67d0('0x27')],_0x22da0e[_0x67d0('0x5c')][_0x67d0('0x5d')]()));}})[_0x67d0('0x47')](handleError(_0x2391f7,null));};
\ No newline at end of file
+var _0x7d13=['rows','catch','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','update','params','basename','savename','output','existsSync','server/files/reports','Sequelize','ValidationError','download','join','root','format','toLowerCase','eml-format','zip-dir','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','Content-Range','apply','reject','save','then','get','ExtractedReports','UserProfileResource','destroy','end','error','name','index','AnalyticExtractedReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','merge','map','type','VIRTUAL','field','filter','includeAll','include'];(function(_0x25be62,_0x54822a){var _0x571ac0=function(_0x55cb3e){while(--_0x55cb3e){_0x25be62['push'](_0x25be62['shift']());}};_0x571ac0(++_0x54822a);}(_0x7d13,0x6c));var _0x37d1=function(_0x555132,_0x1b2e95){_0x555132=_0x555132-0x0;var _0x2c9499=_0x7d13[_0x555132];return _0x2c9499;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x37d1('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x37d1('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0x37d1('0x2'));var moment=require(_0x37d1('0x3'));var BPromise=require(_0x37d1('0x4'));var Mustache=require(_0x37d1('0x5'));var util=require(_0x37d1('0x6'));var path=require('path');var sox=require(_0x37d1('0x7'));var csv=require(_0x37d1('0x8'));var ejs=require(_0x37d1('0x9'));var fs=require('fs');var _=require(_0x37d1('0xa'));var squel=require('squel');var crypto=require(_0x37d1('0xb'));var jsforce=require(_0x37d1('0xc'));var deskjs=require(_0x37d1('0xd'));var toCsv=require(_0x37d1('0x8'));var querystring=require(_0x37d1('0xe'));var Papa=require(_0x37d1('0xf'));var Redis=require(_0x37d1('0x10'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0x37d1('0x11'));var logger=require(_0x37d1('0x12'))('api');var utils=require(_0x37d1('0x13'));var config=require(_0x37d1('0x14'));var db=require(_0x37d1('0x15'))['db'];function respondWithStatusCode(_0x1cfab7,_0x1ec9d3){_0x1ec9d3=_0x1ec9d3||0xcc;return function(_0x110122){if(_0x110122){return _0x1cfab7[_0x37d1('0x16')](_0x1ec9d3);}return _0x1cfab7[_0x37d1('0x17')](_0x1ec9d3)['end']();};}function respondWithResult(_0x3afdfc,_0x279505){_0x279505=_0x279505||0xc8;return function(_0x4be8fb){if(_0x4be8fb){return _0x3afdfc[_0x37d1('0x17')](_0x279505)[_0x37d1('0x18')](_0x4be8fb);}};}function respondWithFilteredResult(_0x56465e,_0x40907d){return function(_0x43e615){if(_0x43e615){var _0x4a371b=_0x43e615[_0x37d1('0x19')],_0x52c41c=_0x40907d['offset'],_0x42bdd5=_0x40907d[_0x37d1('0x1a')]+_0x40907d[_0x37d1('0x1b')],_0x198ebe;if(_0x42bdd5>=_0x4a371b){_0x42bdd5=_0x4a371b;_0x198ebe=0xc8;}else{_0x198ebe=0xce;}_0x56465e[_0x37d1('0x17')](_0x198ebe);return _0x56465e['set'](_0x37d1('0x1c'),_0x52c41c+'-'+_0x42bdd5+'/'+_0x4a371b)[_0x37d1('0x18')](_0x43e615);}return null;};}function patchUpdates(_0x50fed2){return function(_0xeb691a){try{jsonpatch[_0x37d1('0x1d')](_0xeb691a,_0x50fed2,!![]);}catch(_0x2e1094){return BPromise[_0x37d1('0x1e')](_0x2e1094);}return _0xeb691a[_0x37d1('0x1f')]();};}function saveUpdates(_0x1d522e,_0x1c0845){return function(_0x546826){if(_0x546826){return _0x546826['update'](_0x1d522e)[_0x37d1('0x20')](function(_0x3b8dd1){return _0x3b8dd1;});}return null;};}function removeEntity(_0x44c8b0,_0x13fd66){return function(_0x4ea3c5){if(_0x4ea3c5){return _0x4ea3c5['destroy']()[_0x37d1('0x20')](function(){var _0x19c4a9=_0x4ea3c5[_0x37d1('0x21')]({'plain':!![]});var _0x18c36b=_0x37d1('0x22');return db[_0x37d1('0x23')][_0x37d1('0x24')]({'where':{'type':_0x18c36b,'resourceId':_0x19c4a9['id']}})[_0x37d1('0x20')](function(){return _0x4ea3c5;});})[_0x37d1('0x20')](function(){_0x44c8b0[_0x37d1('0x17')](0xcc)[_0x37d1('0x25')]();});}};}function handleEntityNotFound(_0x4ec3d3,_0xa51780){return function(_0x3ca34c){if(!_0x3ca34c){_0x4ec3d3[_0x37d1('0x16')](0x194);}return _0x3ca34c;};}function handleError(_0x28bf0e,_0x16466f){_0x16466f=_0x16466f||0x1f4;return function(_0x54da9c){logger[_0x37d1('0x26')](_0x54da9c['stack']);if(_0x54da9c[_0x37d1('0x27')]){delete _0x54da9c[_0x37d1('0x27')];}_0x28bf0e[_0x37d1('0x17')](_0x16466f)['send'](_0x54da9c);};}exports[_0x37d1('0x28')]=function(_0x5a4e98,_0x34c128){var _0x4478ae={},_0x13d21f={},_0x5f5830={'count':0x0,'rows':[]};var _0xcf3373=db[_0x37d1('0x29')][_0x37d1('0x2a')];_0x13d21f[_0x37d1('0x2b')]=_[_0x37d1('0x2c')](_0xcf3373);_0x13d21f[_0x37d1('0x2d')]=_[_0x37d1('0x2c')](_0x5a4e98['query']);_0x13d21f[_0x37d1('0x2e')]=_[_0x37d1('0x2f')](_0x13d21f[_0x37d1('0x2b')],_0x13d21f[_0x37d1('0x2d')]);_0x4478ae[_0x37d1('0x30')]=_['intersection'](_0x13d21f[_0x37d1('0x2b')],qs[_0x37d1('0x31')](_0x5a4e98[_0x37d1('0x2d')][_0x37d1('0x31')]));_0x4478ae[_0x37d1('0x30')]=_0x4478ae['attributes'][_0x37d1('0x32')]?_0x4478ae[_0x37d1('0x30')]:_0x13d21f[_0x37d1('0x2b')];if(!_0x5a4e98[_0x37d1('0x2d')][_0x37d1('0x33')](_0x37d1('0x34'))){_0x4478ae[_0x37d1('0x1b')]=qs['limit'](_0x5a4e98['query'][_0x37d1('0x1b')]);_0x4478ae[_0x37d1('0x1a')]=qs[_0x37d1('0x1a')](_0x5a4e98[_0x37d1('0x2d')][_0x37d1('0x1a')]);}_0x4478ae[_0x37d1('0x35')]=qs['sort'](_0x5a4e98['query'][_0x37d1('0x36')]);_0x4478ae[_0x37d1('0x37')]=qs[_0x37d1('0x2e')](_['pick'](_0x5a4e98[_0x37d1('0x2d')],_0x13d21f[_0x37d1('0x2e')]));if(_0x5a4e98[_0x37d1('0x2d')]['filter']){_0x4478ae[_0x37d1('0x37')]=_[_0x37d1('0x38')](_0x4478ae[_0x37d1('0x37')],{'$or':_[_0x37d1('0x39')](_0xcf3373,function(_0x3e988b){if(_0x3e988b[_0x37d1('0x3a')]['key']!==_0x37d1('0x3b')){var _0x46bc3e={};_0x46bc3e[_0x3e988b[_0x37d1('0x3c')]]={'$like':'%'+_0x5a4e98['query'][_0x37d1('0x3d')]+'%'};return _0x46bc3e;}})});}_0x4478ae=_[_0x37d1('0x38')]({},_0x4478ae,_0x5a4e98['options']);var _0x273c5c={'where':_0x4478ae['where']};return db[_0x37d1('0x29')]['count'](_0x273c5c)['then'](function(_0x32397c){_0x5f5830[_0x37d1('0x19')]=_0x32397c;if(_0x5a4e98[_0x37d1('0x2d')][_0x37d1('0x3e')]){_0x4478ae[_0x37d1('0x3f')]=[{'all':!![]}];}return db[_0x37d1('0x29')]['findAll'](_0x4478ae);})['then'](function(_0x2a9b29){_0x5f5830[_0x37d1('0x40')]=_0x2a9b29;return _0x5f5830;})[_0x37d1('0x20')](respondWithFilteredResult(_0x34c128,_0x4478ae))[_0x37d1('0x41')](handleError(_0x34c128,null));};exports['show']=function(_0x43182c,_0x27e888){var _0x4cf17b={'raw':!![],'where':{'id':_0x43182c['params']['id']}},_0x5cb495={};_0x5cb495[_0x37d1('0x2b')]=_[_0x37d1('0x2c')](db[_0x37d1('0x29')][_0x37d1('0x2a')]);_0x5cb495[_0x37d1('0x2d')]=_[_0x37d1('0x2c')](_0x43182c['query']);_0x5cb495[_0x37d1('0x2e')]=_[_0x37d1('0x2f')](_0x5cb495[_0x37d1('0x2b')],_0x5cb495[_0x37d1('0x2d')]);_0x4cf17b[_0x37d1('0x30')]=_[_0x37d1('0x2f')](_0x5cb495[_0x37d1('0x2b')],qs[_0x37d1('0x31')](_0x43182c['query'][_0x37d1('0x31')]));_0x4cf17b[_0x37d1('0x30')]=_0x4cf17b[_0x37d1('0x30')][_0x37d1('0x32')]?_0x4cf17b['attributes']:_0x5cb495[_0x37d1('0x2b')];if(_0x43182c['query']['includeAll']){_0x4cf17b[_0x37d1('0x3f')]=[{'all':!![]}];}_0x4cf17b=_[_0x37d1('0x38')]({},_0x4cf17b,_0x43182c['options']);return db['AnalyticExtractedReport'][_0x37d1('0x42')](_0x4cf17b)[_0x37d1('0x20')](handleEntityNotFound(_0x27e888,null))['then'](respondWithResult(_0x27e888,null))[_0x37d1('0x41')](handleError(_0x27e888,null));};exports[_0x37d1('0x43')]=function(_0x305c52,_0x1b4ff0){return db[_0x37d1('0x29')][_0x37d1('0x43')](_0x305c52[_0x37d1('0x44')],{})[_0x37d1('0x20')](function(_0x3feaa5){var _0x401c4c=_0x305c52[_0x37d1('0x45')][_0x37d1('0x21')]({'plain':!![]});if(!_0x401c4c)throw new Error(_0x37d1('0x46'));if(_0x401c4c['role']==='user'){var _0xba0901=_0x3feaa5[_0x37d1('0x21')]({'plain':!![]});var _0x13033a=_0x37d1('0x22');return db[_0x37d1('0x47')]['find']({'where':{'name':_0x13033a,'userProfileId':_0x401c4c['userProfileId']},'raw':!![]})[_0x37d1('0x20')](function(_0x234db9){if(_0x234db9&&_0x234db9['autoAssociation']===0x0){return db[_0x37d1('0x23')][_0x37d1('0x43')]({'name':_0xba0901[_0x37d1('0x27')],'resourceId':_0xba0901['id'],'type':_0x234db9[_0x37d1('0x27')],'sectionId':_0x234db9['id']},{})[_0x37d1('0x20')](function(){return _0x3feaa5;});}else{return _0x3feaa5;}})['catch'](function(_0x2eacf0){logger[_0x37d1('0x26')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x2eacf0);throw _0x2eacf0;});}return _0x3feaa5;})['then'](respondWithResult(_0x1b4ff0,0xc9))['catch'](handleError(_0x1b4ff0,null));};exports[_0x37d1('0x48')]=function(_0x358e50,_0x1ac918){if(_0x358e50['body']['id']){delete _0x358e50[_0x37d1('0x44')]['id'];}return db[_0x37d1('0x29')]['find']({'where':{'id':_0x358e50['params']['id']}})['then'](handleEntityNotFound(_0x1ac918,null))[_0x37d1('0x20')](saveUpdates(_0x358e50[_0x37d1('0x44')],null))[_0x37d1('0x20')](respondWithResult(_0x1ac918,null))[_0x37d1('0x41')](handleError(_0x1ac918,null));};exports[_0x37d1('0x24')]=function(_0x51f006,_0x41ec84){return db[_0x37d1('0x29')][_0x37d1('0x42')]({'where':{'id':_0x51f006[_0x37d1('0x49')]['id']}})['then'](handleEntityNotFound(_0x41ec84,null))[_0x37d1('0x20')](removeEntity(_0x41ec84,null))[_0x37d1('0x41')](handleError(_0x41ec84,null));};exports['download']=function(_0x166178,_0xf180e1,_0x3917fd){return db[_0x37d1('0x29')][_0x37d1('0x42')]({'where':{'id':_0x166178[_0x37d1('0x49')]['id']},'attributes':[_0x37d1('0x27'),_0x37d1('0x4a'),_0x37d1('0x4b'),_0x37d1('0x4c')],'raw':!![]})[_0x37d1('0x20')](handleEntityNotFound(_0xf180e1,null))[_0x37d1('0x20')](function(_0x4dc209){if(_0x4dc209){if(!fs[_0x37d1('0x4d')](path['join'](config['root'],_0x37d1('0x4e'),_0x4dc209[_0x37d1('0x4b')]))){throw new db[(_0x37d1('0x4f'))][(_0x37d1('0x50'))]('Report\x20not\x20found\x20or\x20empty');}if(_0x166178[_0x37d1('0x2d')]['exists']){return _0xf180e1[_0x37d1('0x16')](0xc8);}return _0xf180e1[_0x37d1('0x51')](path[_0x37d1('0x52')](config[_0x37d1('0x53')],_0x37d1('0x4e'),_0x4dc209[_0x37d1('0x4b')]),util[_0x37d1('0x54')]('%s.%s',_0x4dc209[_0x37d1('0x4a')]||_0x4dc209[_0x37d1('0x27')],_0x4dc209['output'][_0x37d1('0x55')]()));}})[_0x37d1('0x41')](handleError(_0xf180e1,null));};
\ No newline at end of file
index ab90853..0d4a7df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6334=['rimraf','../../config/environment','./analyticExtractedReport.attributes','exports','AnalyticExtractedReport','lodash','util','../../config/logger','api','moment','bluebird','path'];(function(_0x327bca,_0x39987d){var _0x33a85b=function(_0x32cf55){while(--_0x32cf55){_0x327bca['push'](_0x327bca['shift']());}};_0x33a85b(++_0x39987d);}(_0x6334,0x119));var _0x4633=function(_0x398d85,_0x2465d7){_0x398d85=_0x398d85-0x0;var _0x33c2bb=_0x6334[_0x398d85];return _0x33c2bb;};'use strict';var _=require(_0x4633('0x0'));var util=require(_0x4633('0x1'));var logger=require(_0x4633('0x2'))(_0x4633('0x3'));var moment=require(_0x4633('0x4'));var BPromise=require(_0x4633('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x4633('0x6'));var rimraf=require(_0x4633('0x7'));var config=require(_0x4633('0x8'));var attributes=require(_0x4633('0x9'));module[_0x4633('0xa')]=function(_0x6493dc,_0x175e14){return _0x6493dc['define'](_0x4633('0xb'),attributes,{'tableName':'analytics_extracted_reports','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6f47=['../../config/logger','moment','request-promise','rimraf','../../config/environment','./analyticExtractedReport.attributes','exports','define','AnalyticExtractedReport','util'];(function(_0xd0ef4e,_0x40024b){var _0x561ce3=function(_0x501156){while(--_0x501156){_0xd0ef4e['push'](_0xd0ef4e['shift']());}};_0x561ce3(++_0x40024b);}(_0x6f47,0xc7));var _0x76f4=function(_0x487b0c,_0x14ff74){_0x487b0c=_0x487b0c-0x0;var _0x1adbdc=_0x6f47[_0x487b0c];return _0x1adbdc;};'use strict';var _=require('lodash');var util=require(_0x76f4('0x0'));var logger=require(_0x76f4('0x1'))('api');var moment=require(_0x76f4('0x2'));var BPromise=require('bluebird');var rp=require(_0x76f4('0x3'));var fs=require('fs');var path=require('path');var rimraf=require(_0x76f4('0x4'));var config=require(_0x76f4('0x5'));var attributes=require(_0x76f4('0x6'));module[_0x76f4('0x7')]=function(_0x5754ca,_0x35602f){return _0x5754ca[_0x76f4('0x8')](_0x76f4('0x9'),attributes,{'tableName':'analytics_extracted_reports','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 893c5a5..c4b7bad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2312=['../../config/logger','jayson/promise','client','http','info','request\x20sent','debug','AnalyticExtractedReport,\x20%s,\x20%s,\x20%s','error','code','AnalyticExtractedReport,\x20%s,\x20%s','message','result','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils'];(function(_0x45e98e,_0x169b60){var _0x374dba=function(_0x597612){while(--_0x597612){_0x45e98e['push'](_0x45e98e['shift']());}};_0x374dba(++_0x169b60);}(_0x2312,0xad));var _0x2231=function(_0x585747,_0x2600f7){_0x585747=_0x585747-0x0;var _0x18f5d7=_0x2312[_0x585747];return _0x18f5d7;};'use strict';var _=require(_0x2231('0x0'));var util=require(_0x2231('0x1'));var moment=require(_0x2231('0x2'));var BPromise=require(_0x2231('0x3'));var rs=require(_0x2231('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x2231('0x5'))['db'];var utils=require(_0x2231('0x6'));var logger=require(_0x2231('0x7'))('rpc');var config=require('../../config/environment');var jayson=require(_0x2231('0x8'));var client=jayson[_0x2231('0x9')][_0x2231('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4fa991,_0x2f9a06,_0x242a82){return new BPromise(function(_0x55a340,_0xa31f22){return client['request'](_0x4fa991,_0x242a82)['then'](function(_0x26431f){logger[_0x2231('0xb')]('AnalyticExtractedReport,\x20%s,\x20%s',_0x2f9a06,_0x2231('0xc'));logger[_0x2231('0xd')](_0x2231('0xe'),_0x2f9a06,_0x2231('0xc'),JSON['stringify'](_0x26431f));if(_0x26431f[_0x2231('0xf')]){if(_0x26431f['error'][_0x2231('0x10')]===0x1f4){logger[_0x2231('0xf')](_0x2231('0x11'),_0x2f9a06,_0x26431f[_0x2231('0xf')][_0x2231('0x12')]);return _0xa31f22(_0x26431f[_0x2231('0xf')][_0x2231('0x12')]);}logger[_0x2231('0xf')](_0x2231('0x11'),_0x2f9a06,_0x26431f[_0x2231('0xf')][_0x2231('0x12')]);return _0x55a340(_0x26431f[_0x2231('0xf')][_0x2231('0x12')]);}else{logger[_0x2231('0xb')](_0x2231('0x11'),_0x2f9a06,'request\x20sent');_0x55a340(_0x26431f[_0x2231('0x13')][_0x2231('0x12')]);}})['catch'](function(_0x1f1d2e){logger[_0x2231('0xf')](_0x2231('0x11'),_0x2f9a06,_0x1f1d2e);_0xa31f22(_0x1f1d2e);});});}
\ No newline at end of file
+var _0xbe05=['lodash','moment','bluebird','ioredis','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','http','request','info','AnalyticExtractedReport,\x20%s,\x20%s','request\x20sent','debug','AnalyticExtractedReport,\x20%s,\x20%s,\x20%s','error','code','message','result'];(function(_0x21cdf5,_0x3cfd4c){var _0x30150d=function(_0x1526c6){while(--_0x1526c6){_0x21cdf5['push'](_0x21cdf5['shift']());}};_0x30150d(++_0x3cfd4c);}(_0xbe05,0x130));var _0x5be0=function(_0x365f16,_0x4e1de3){_0x365f16=_0x365f16-0x0;var _0x441b5d=_0xbe05[_0x365f16];return _0x441b5d;};'use strict';var _=require(_0x5be0('0x0'));var util=require('util');var moment=require(_0x5be0('0x1'));var BPromise=require(_0x5be0('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x5be0('0x3'));var db=require(_0x5be0('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x5be0('0x5'))('rpc');var config=require(_0x5be0('0x6'));var jayson=require(_0x5be0('0x7'));var client=jayson['client'][_0x5be0('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x9f3403,_0x35e895,_0x423ea4){return new BPromise(function(_0x55f315,_0x3fca06){return client[_0x5be0('0x9')](_0x9f3403,_0x423ea4)['then'](function(_0x1f2c0f){logger[_0x5be0('0xa')](_0x5be0('0xb'),_0x35e895,_0x5be0('0xc'));logger[_0x5be0('0xd')](_0x5be0('0xe'),_0x35e895,'request\x20sent',JSON['stringify'](_0x1f2c0f));if(_0x1f2c0f[_0x5be0('0xf')]){if(_0x1f2c0f[_0x5be0('0xf')][_0x5be0('0x10')]===0x1f4){logger[_0x5be0('0xf')](_0x5be0('0xb'),_0x35e895,_0x1f2c0f[_0x5be0('0xf')][_0x5be0('0x11')]);return _0x3fca06(_0x1f2c0f[_0x5be0('0xf')]['message']);}logger['error'](_0x5be0('0xb'),_0x35e895,_0x1f2c0f[_0x5be0('0xf')][_0x5be0('0x11')]);return _0x55f315(_0x1f2c0f[_0x5be0('0xf')][_0x5be0('0x11')]);}else{logger[_0x5be0('0xa')](_0x5be0('0xb'),_0x35e895,_0x5be0('0xc'));_0x55f315(_0x1f2c0f[_0x5be0('0x12')]['message']);}})['catch'](function(_0x482755){logger[_0x5be0('0xf')]('AnalyticExtractedReport,\x20%s,\x20%s',_0x35e895,_0x482755);_0x3fca06(_0x482755);});});}
\ No newline at end of file
index 5eb641e..1599bda 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9bf1=['destroy','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./analyticExtractedReport.controller','get','index','isAuthenticated','show','/:id/download','download','post','create','put','/:id','update','delete'];(function(_0x1b2ec2,_0x4dcf78){var _0x8d2782=function(_0x154da4){while(--_0x154da4){_0x1b2ec2['push'](_0x1b2ec2['shift']());}};_0x8d2782(++_0x4dcf78);}(_0x9bf1,0xe8));var _0x19bf=function(_0x3de8a4,_0x289a5c){_0x3de8a4=_0x3de8a4-0x0;var _0x4635cf=_0x9bf1[_0x3de8a4];return _0x4635cf;};'use strict';var multer=require('multer');var util=require(_0x19bf('0x0'));var path=require(_0x19bf('0x1'));var timeout=require(_0x19bf('0x2'));var express=require('express');var router=express[_0x19bf('0x3')]();var auth=require(_0x19bf('0x4'));var interaction=require(_0x19bf('0x5'));var config=require(_0x19bf('0x6'));var controller=require(_0x19bf('0x7'));router[_0x19bf('0x8')]('/',auth['isAuthenticated'](),controller[_0x19bf('0x9')]);router['get']('/:id',auth[_0x19bf('0xa')](),controller[_0x19bf('0xb')]);router[_0x19bf('0x8')](_0x19bf('0xc'),auth['isAuthenticated'](),controller[_0x19bf('0xd')]);router[_0x19bf('0xe')]('/',auth[_0x19bf('0xa')](),controller[_0x19bf('0xf')]);router[_0x19bf('0x10')](_0x19bf('0x11'),auth[_0x19bf('0xa')](),controller[_0x19bf('0x12')]);router[_0x19bf('0x13')](_0x19bf('0x11'),auth[_0x19bf('0xa')](),controller[_0x19bf('0x14')]);module['exports']=router;
\ No newline at end of file
+var _0xb859=['download','post','create','put','update','delete','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./analyticExtractedReport.controller','get','index','/:id','/:id/download','isAuthenticated'];(function(_0x421263,_0x18187d){var _0x34e4b5=function(_0x4e7978){while(--_0x4e7978){_0x421263['push'](_0x421263['shift']());}};_0x34e4b5(++_0x18187d);}(_0xb859,0xae));var _0x9b85=function(_0xb5fc3e,_0x234703){_0xb5fc3e=_0xb5fc3e-0x0;var _0x2efc3c=_0xb859[_0xb5fc3e];return _0x2efc3c;};'use strict';var multer=require(_0x9b85('0x0'));var util=require(_0x9b85('0x1'));var path=require(_0x9b85('0x2'));var timeout=require(_0x9b85('0x3'));var express=require(_0x9b85('0x4'));var router=express[_0x9b85('0x5')]();var auth=require(_0x9b85('0x6'));var interaction=require(_0x9b85('0x7'));var config=require(_0x9b85('0x8'));var controller=require(_0x9b85('0x9'));router[_0x9b85('0xa')]('/',auth['isAuthenticated'](),controller[_0x9b85('0xb')]);router[_0x9b85('0xa')](_0x9b85('0xc'),auth['isAuthenticated'](),controller['show']);router[_0x9b85('0xa')](_0x9b85('0xd'),auth[_0x9b85('0xe')](),controller[_0x9b85('0xf')]);router[_0x9b85('0x10')]('/',auth[_0x9b85('0xe')](),controller[_0x9b85('0x11')]);router[_0x9b85('0x12')](_0x9b85('0xc'),auth[_0x9b85('0xe')](),controller[_0x9b85('0x13')]);router[_0x9b85('0x14')](_0x9b85('0xc'),auth[_0x9b85('0xe')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 1ffbf65..08692ee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7c2e=['BOOLEAN','STRING'];(function(_0x1ac595,_0x5d2081){var _0x455fff=function(_0x3043ee){while(--_0x3043ee){_0x1ac595['push'](_0x1ac595['shift']());}};_0x455fff(++_0x5d2081);}(_0x7c2e,0x1c5));var _0xe7c2=function(_0x4f09fa,_0x523280){_0x4f09fa=_0x4f09fa-0x0;var _0x292ae8=_0x7c2e[_0x4f09fa];return _0x292ae8;};'use strict';var Sequelize=require('sequelize');module['exports']={'field':{'type':Sequelize['TEXT']},'alias':{'type':Sequelize[_0xe7c2('0x0')]},'function':{'type':Sequelize['STRING']},'format':{'type':Sequelize[_0xe7c2('0x0')]},'groupBy':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'orderBy':{'type':Sequelize['STRING']},'custom':{'type':Sequelize[_0xe7c2('0x1')],'defaultValue':![]}};
\ No newline at end of file
+var _0xab0c=['TEXT','STRING','BOOLEAN','sequelize'];(function(_0x48494b,_0xa6ff68){var _0x2087e0=function(_0x518e6c){while(--_0x518e6c){_0x48494b['push'](_0x48494b['shift']());}};_0x2087e0(++_0xa6ff68);}(_0xab0c,0x12b));var _0xcab0=function(_0xa0686a,_0x2801fd){_0xa0686a=_0xa0686a-0x0;var _0x1d6c48=_0xab0c[_0xa0686a];return _0x1d6c48;};'use strict';var Sequelize=require(_0xcab0('0x0'));module['exports']={'field':{'type':Sequelize[_0xcab0('0x1')]},'alias':{'type':Sequelize['STRING']},'function':{'type':Sequelize[_0xcab0('0x2')]},'format':{'type':Sequelize['STRING']},'groupBy':{'type':Sequelize[_0xcab0('0x3')],'defaultValue':![]},'orderBy':{'type':Sequelize['STRING']},'custom':{'type':Sequelize[_0xcab0('0x3')],'defaultValue':![]}};
\ No newline at end of file
index 6f84eae..fae675f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe8eb=['apply','reject','save','update','then','sendStatus','error','name','send','index','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','merge','map','key','field','filter','options','AnalyticFieldReport','includeAll','include','findAll','rows','catch','show','params','find','body','bulkCreate','destroy','bulkDestroy','addFields','AnalyticCustomReport','sequelize','CustomReportId','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','lodash','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','Content-Range'];(function(_0xf2a565,_0x557037){var _0x1d7f89=function(_0x37a5f2){while(--_0x37a5f2){_0xf2a565['push'](_0xf2a565['shift']());}};_0x1d7f89(++_0x557037);}(_0xe8eb,0xce));var _0xbe8e=function(_0x197501,_0xb94a0e){_0x197501=_0x197501-0x0;var _0x2a19d6=_0xe8eb[_0x197501];return _0x2a19d6;};'use strict';var pdf=require(_0xbe8e('0x0'));var emlformat=require(_0xbe8e('0x1'));var rimraf=require(_0xbe8e('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xbe8e('0x3'));var rp=require(_0xbe8e('0x4'));var moment=require(_0xbe8e('0x5'));var BPromise=require(_0xbe8e('0x6'));var Mustache=require(_0xbe8e('0x7'));var util=require(_0xbe8e('0x8'));var path=require('path');var sox=require(_0xbe8e('0x9'));var csv=require(_0xbe8e('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xbe8e('0xb'));var squel=require(_0xbe8e('0xc'));var crypto=require(_0xbe8e('0xd'));var jsforce=require(_0xbe8e('0xe'));var deskjs=require('desk.js');var toCsv=require(_0xbe8e('0xa'));var querystring=require(_0xbe8e('0xf'));var Papa=require(_0xbe8e('0x10'));var Redis=require(_0xbe8e('0x11'));var authService=require(_0xbe8e('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xbe8e('0x13'));var logger=require(_0xbe8e('0x14'))('api');var utils=require(_0xbe8e('0x15'));var config=require(_0xbe8e('0x16'));var db=require(_0xbe8e('0x17'))['db'];function respondWithStatusCode(_0x42c6ce,_0x5134ef){_0x5134ef=_0x5134ef||0xcc;return function(_0x155b15){if(_0x155b15){return _0x42c6ce['sendStatus'](_0x5134ef);}return _0x42c6ce[_0xbe8e('0x18')](_0x5134ef)[_0xbe8e('0x19')]();};}function respondWithResult(_0x11fc72,_0x19f9b0){_0x19f9b0=_0x19f9b0||0xc8;return function(_0x24aee3){if(_0x24aee3){return _0x11fc72['status'](_0x19f9b0)[_0xbe8e('0x1a')](_0x24aee3);}};}function respondWithFilteredResult(_0x22a8b7,_0x532247){return function(_0x20e413){if(_0x20e413){var _0xe2b908=_0x20e413[_0xbe8e('0x1b')],_0x52b534=_0x532247[_0xbe8e('0x1c')],_0x58cd0a=_0x532247['offset']+_0x532247[_0xbe8e('0x1d')],_0x1f6097;if(_0x58cd0a>=_0xe2b908){_0x58cd0a=_0xe2b908;_0x1f6097=0xc8;}else{_0x1f6097=0xce;}_0x22a8b7[_0xbe8e('0x18')](_0x1f6097);return _0x22a8b7['set'](_0xbe8e('0x1e'),_0x52b534+'-'+_0x58cd0a+'/'+_0xe2b908)[_0xbe8e('0x1a')](_0x20e413);}return null;};}function patchUpdates(_0x3665c9){return function(_0x3f2216){try{jsonpatch[_0xbe8e('0x1f')](_0x3f2216,_0x3665c9,!![]);}catch(_0x568f4a){return BPromise[_0xbe8e('0x20')](_0x568f4a);}return _0x3f2216[_0xbe8e('0x21')]();};}function saveUpdates(_0xbe29d8,_0x2a23da){return function(_0x4a5b60){if(_0x4a5b60){return _0x4a5b60[_0xbe8e('0x22')](_0xbe29d8)[_0xbe8e('0x23')](function(_0x1a2c30){return _0x1a2c30;});}return null;};}function removeEntity(_0x106877,_0x30f74f){return function(_0x4692fc){if(_0x4692fc){return _0x4692fc['destroy']()[_0xbe8e('0x23')](function(){_0x106877[_0xbe8e('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0x57f336,_0x251432){return function(_0x338ebd){if(!_0x338ebd){_0x57f336[_0xbe8e('0x24')](0x194);}return _0x338ebd;};}function handleError(_0x46ac2a,_0x497eea){_0x497eea=_0x497eea||0x1f4;return function(_0x11c492){logger[_0xbe8e('0x25')](_0x11c492['stack']);if(_0x11c492['name']){delete _0x11c492[_0xbe8e('0x26')];}_0x46ac2a[_0xbe8e('0x18')](_0x497eea)[_0xbe8e('0x27')](_0x11c492);};}exports[_0xbe8e('0x28')]=function(_0x173c8a,_0x54af54){var _0x54b71d={},_0x4e07ea={},_0x4d0499={'count':0x0,'rows':[]};var _0x5698cb=db['AnalyticFieldReport'][_0xbe8e('0x29')];_0x4e07ea[_0xbe8e('0x2a')]=_[_0xbe8e('0x2b')](_0x5698cb);_0x4e07ea[_0xbe8e('0x2c')]=_[_0xbe8e('0x2b')](_0x173c8a[_0xbe8e('0x2c')]);_0x4e07ea[_0xbe8e('0x2d')]=_[_0xbe8e('0x2e')](_0x4e07ea[_0xbe8e('0x2a')],_0x4e07ea[_0xbe8e('0x2c')]);_0x54b71d['attributes']=_['intersection'](_0x4e07ea[_0xbe8e('0x2a')],qs[_0xbe8e('0x2f')](_0x173c8a[_0xbe8e('0x2c')][_0xbe8e('0x2f')]));_0x54b71d[_0xbe8e('0x30')]=_0x54b71d['attributes'][_0xbe8e('0x31')]?_0x54b71d['attributes']:_0x4e07ea[_0xbe8e('0x2a')];if(!_0x173c8a[_0xbe8e('0x2c')][_0xbe8e('0x32')](_0xbe8e('0x33'))){_0x54b71d[_0xbe8e('0x1d')]=qs[_0xbe8e('0x1d')](_0x173c8a['query']['limit']);_0x54b71d[_0xbe8e('0x1c')]=qs['offset'](_0x173c8a[_0xbe8e('0x2c')][_0xbe8e('0x1c')]);}_0x54b71d[_0xbe8e('0x34')]=qs[_0xbe8e('0x35')](_0x173c8a[_0xbe8e('0x2c')][_0xbe8e('0x35')]);_0x54b71d[_0xbe8e('0x36')]=qs['filters'](_[_0xbe8e('0x37')](_0x173c8a[_0xbe8e('0x2c')],_0x4e07ea['filters']));if(_0x173c8a[_0xbe8e('0x2c')]['filter']){_0x54b71d[_0xbe8e('0x36')]=_[_0xbe8e('0x38')](_0x54b71d[_0xbe8e('0x36')],{'$or':_[_0xbe8e('0x39')](_0x5698cb,function(_0x11de39){if(_0x11de39['type'][_0xbe8e('0x3a')]!=='VIRTUAL'){var _0x26dc27={};_0x26dc27[_0x11de39[_0xbe8e('0x3b')]]={'$like':'%'+_0x173c8a[_0xbe8e('0x2c')][_0xbe8e('0x3c')]+'%'};return _0x26dc27;}})});}_0x54b71d=_['merge']({},_0x54b71d,_0x173c8a[_0xbe8e('0x3d')]);var _0x4bd7c1={'where':_0x54b71d[_0xbe8e('0x36')]};return db[_0xbe8e('0x3e')]['count'](_0x4bd7c1)[_0xbe8e('0x23')](function(_0x413af1){_0x4d0499[_0xbe8e('0x1b')]=_0x413af1;if(_0x173c8a[_0xbe8e('0x2c')][_0xbe8e('0x3f')]){_0x54b71d[_0xbe8e('0x40')]=[{'all':!![]}];}return db[_0xbe8e('0x3e')][_0xbe8e('0x41')](_0x54b71d);})[_0xbe8e('0x23')](function(_0x4bfff4){_0x4d0499[_0xbe8e('0x42')]=_0x4bfff4;return _0x4d0499;})['then'](respondWithFilteredResult(_0x54af54,_0x54b71d))[_0xbe8e('0x43')](handleError(_0x54af54,null));};exports[_0xbe8e('0x44')]=function(_0x4b3e23,_0x3ff68b){var _0x850ad2={'raw':![],'where':{'id':_0x4b3e23[_0xbe8e('0x45')]['id']}},_0x522717={};_0x522717['model']=_['keys'](db[_0xbe8e('0x3e')][_0xbe8e('0x29')]);_0x522717[_0xbe8e('0x2c')]=_[_0xbe8e('0x2b')](_0x4b3e23['query']);_0x522717[_0xbe8e('0x2d')]=_['intersection'](_0x522717['model'],_0x522717['query']);_0x850ad2[_0xbe8e('0x30')]=_[_0xbe8e('0x2e')](_0x522717[_0xbe8e('0x2a')],qs[_0xbe8e('0x2f')](_0x4b3e23[_0xbe8e('0x2c')]['fields']));_0x850ad2['attributes']=_0x850ad2[_0xbe8e('0x30')]['length']?_0x850ad2[_0xbe8e('0x30')]:_0x522717['model'];if(_0x4b3e23[_0xbe8e('0x2c')][_0xbe8e('0x3f')]){_0x850ad2['include']=[{'all':!![]}];}_0x850ad2=_[_0xbe8e('0x38')]({},_0x850ad2,_0x4b3e23['options']);return db[_0xbe8e('0x3e')][_0xbe8e('0x46')](_0x850ad2)[_0xbe8e('0x23')](handleEntityNotFound(_0x3ff68b,null))[_0xbe8e('0x23')](respondWithResult(_0x3ff68b,null))[_0xbe8e('0x43')](handleError(_0x3ff68b,null));};exports['create']=function(_0x3fe37c,_0x71944){return db['AnalyticFieldReport']['create'](_0x3fe37c[_0xbe8e('0x47')],{})[_0xbe8e('0x23')](respondWithResult(_0x71944,0xc9))[_0xbe8e('0x43')](handleError(_0x71944,null));};exports[_0xbe8e('0x48')]=function(_0x4d4f7b,_0x370db1){return db['AnalyticFieldReport'][_0xbe8e('0x48')](_0x4d4f7b[_0xbe8e('0x47')],{'raw':![],'individualHooks':!![]})['then'](respondWithResult(_0x370db1,0xc9))[_0xbe8e('0x43')](handleError(_0x370db1,null));};exports[_0xbe8e('0x22')]=function(_0x37eb0c,_0x560d9e){if(_0x37eb0c['body']['id']){delete _0x37eb0c[_0xbe8e('0x47')]['id'];}return db['AnalyticFieldReport'][_0xbe8e('0x46')]({'where':{'id':_0x37eb0c[_0xbe8e('0x45')]['id']}})[_0xbe8e('0x23')](handleEntityNotFound(_0x560d9e,null))[_0xbe8e('0x23')](saveUpdates(_0x37eb0c[_0xbe8e('0x47')],null))[_0xbe8e('0x23')](respondWithResult(_0x560d9e,null))['catch'](handleError(_0x560d9e,null));};exports[_0xbe8e('0x49')]=function(_0x4e9793,_0x5b192e){return db[_0xbe8e('0x3e')]['find']({'where':{'id':_0x4e9793[_0xbe8e('0x45')]['id']}})[_0xbe8e('0x23')](handleEntityNotFound(_0x5b192e,null))[_0xbe8e('0x23')](removeEntity(_0x5b192e,null))[_0xbe8e('0x43')](handleError(_0x5b192e,null));};exports[_0xbe8e('0x4a')]=function(_0x599d48,_0x3dc73f){return db[_0xbe8e('0x3e')]['destroy']({'where':{'id':_0x599d48['query']['ids']||[]},'raw':![],'individualHooks':!![]})[_0xbe8e('0x23')](respondWithResult(_0x3dc73f,0xcc))[_0xbe8e('0x43')](handleError(_0x3dc73f,null));};exports[_0xbe8e('0x4b')]=function(_0x96d982,_0xaeac2b,_0x1fd689){return db[_0xbe8e('0x4c')]['findOne']({'where':{'id':_0x96d982[_0xbe8e('0x45')]['id']}})[_0xbe8e('0x23')](handleEntityNotFound(_0xaeac2b,null))[_0xbe8e('0x23')](function(_0x44bfa0){if(_0x44bfa0){return db[_0xbe8e('0x4d')]['transaction'](function(_0x479877){return db[_0xbe8e('0x3e')][_0xbe8e('0x49')]({'where':{'CustomReportId':_0x96d982[_0xbe8e('0x45')]['id']},'transaction':_0x479877})[_0xbe8e('0x23')](function(_0x5e9e32){var _0x14f32c=_[_0xbe8e('0x39')](_0x96d982[_0xbe8e('0x47')],function(_0x21b410){delete _0x21b410['id'];_0x21b410[_0xbe8e('0x4e')]=_0x96d982[_0xbe8e('0x45')]['id'];return _0x21b410;});return db[_0xbe8e('0x3e')][_0xbe8e('0x48')](_0x14f32c,{'transaction':_0x479877});});})[_0xbe8e('0x23')](function(){return db[_0xbe8e('0x3e')][_0xbe8e('0x41')]({'where':{'CustomReportId':_0x96d982[_0xbe8e('0x45')]['id']}});});}})[_0xbe8e('0x23')](respondWithResult(_0xaeac2b,null))[_0xbe8e('0x43')](handleError(_0xaeac2b,null));};
\ No newline at end of file
+var _0xb245=['findAll','rows','catch','show','params','options','create','body','bulkCreate','find','ids','addFields','AnalyticCustomReport','findOne','sequelize','transaction','map','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','mustache','util','path','to-csv','ejs','squel','desk.js','papaparse','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','limit','set','reject','update','then','destroy','end','error','stack','name','index','AnalyticFieldReport','rawAttributes','query','keys','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','offset','order','sort','where','pick','filter','merge','type','key','VIRTUAL','field','includeAll','include'];(function(_0x296923,_0x4adaed){var _0x29af70=function(_0x4eeedb){while(--_0x4eeedb){_0x296923['push'](_0x296923['shift']());}};_0x29af70(++_0x4adaed);}(_0xb245,0xf8));var _0x5b24=function(_0x2d690d,_0x4e5f6a){_0x2d690d=_0x2d690d-0x0;var _0x587f62=_0xb245[_0x2d690d];return _0x587f62;};'use strict';var pdf=require(_0x5b24('0x0'));var emlformat=require(_0x5b24('0x1'));var rimraf=require(_0x5b24('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x5b24('0x3'));var rp=require(_0x5b24('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x5b24('0x5'));var util=require(_0x5b24('0x6'));var path=require(_0x5b24('0x7'));var sox=require('sox');var csv=require(_0x5b24('0x8'));var ejs=require(_0x5b24('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x5b24('0xa'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x5b24('0xb'));var toCsv=require(_0x5b24('0x8'));var querystring=require('querystring');var Papa=require(_0x5b24('0xc'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x5b24('0xd'));var hardwareService=require(_0x5b24('0xe'));var logger=require(_0x5b24('0xf'))(_0x5b24('0x10'));var utils=require(_0x5b24('0x11'));var config=require(_0x5b24('0x12'));var db=require(_0x5b24('0x13'))['db'];function respondWithStatusCode(_0x176a4d,_0x55d468){_0x55d468=_0x55d468||0xcc;return function(_0x337154){if(_0x337154){return _0x176a4d[_0x5b24('0x14')](_0x55d468);}return _0x176a4d[_0x5b24('0x15')](_0x55d468)['end']();};}function respondWithResult(_0x28b02b,_0x2ee72b){_0x2ee72b=_0x2ee72b||0xc8;return function(_0x158d8f){if(_0x158d8f){return _0x28b02b[_0x5b24('0x15')](_0x2ee72b)[_0x5b24('0x16')](_0x158d8f);}};}function respondWithFilteredResult(_0x274fd0,_0xfdb986){return function(_0x123329){if(_0x123329){var _0x191602=_0x123329[_0x5b24('0x17')],_0x4eff69=_0xfdb986['offset'],_0xe98dec=_0xfdb986['offset']+_0xfdb986[_0x5b24('0x18')],_0x27a535;if(_0xe98dec>=_0x191602){_0xe98dec=_0x191602;_0x27a535=0xc8;}else{_0x27a535=0xce;}_0x274fd0[_0x5b24('0x15')](_0x27a535);return _0x274fd0[_0x5b24('0x19')]('Content-Range',_0x4eff69+'-'+_0xe98dec+'/'+_0x191602)[_0x5b24('0x16')](_0x123329);}return null;};}function patchUpdates(_0x38131c){return function(_0x481f50){try{jsonpatch['apply'](_0x481f50,_0x38131c,!![]);}catch(_0x4523ee){return BPromise[_0x5b24('0x1a')](_0x4523ee);}return _0x481f50['save']();};}function saveUpdates(_0x39edd8,_0x4f50e9){return function(_0x312b50){if(_0x312b50){return _0x312b50[_0x5b24('0x1b')](_0x39edd8)[_0x5b24('0x1c')](function(_0x332aa0){return _0x332aa0;});}return null;};}function removeEntity(_0x2f2d0b,_0x14804f){return function(_0x5b6ab1){if(_0x5b6ab1){return _0x5b6ab1[_0x5b24('0x1d')]()[_0x5b24('0x1c')](function(){_0x2f2d0b[_0x5b24('0x15')](0xcc)[_0x5b24('0x1e')]();});}};}function handleEntityNotFound(_0x572cfc,_0x4ba7b7){return function(_0x293240){if(!_0x293240){_0x572cfc[_0x5b24('0x14')](0x194);}return _0x293240;};}function handleError(_0x458e72,_0x343e92){_0x343e92=_0x343e92||0x1f4;return function(_0x2f9d7c){logger[_0x5b24('0x1f')](_0x2f9d7c[_0x5b24('0x20')]);if(_0x2f9d7c[_0x5b24('0x21')]){delete _0x2f9d7c[_0x5b24('0x21')];}_0x458e72[_0x5b24('0x15')](_0x343e92)['send'](_0x2f9d7c);};}exports[_0x5b24('0x22')]=function(_0xfb4bae,_0x4cccd7){var _0x1a269d={},_0x522b8a={},_0x5b6314={'count':0x0,'rows':[]};var _0x5bf7e7=db[_0x5b24('0x23')][_0x5b24('0x24')];_0x522b8a['model']=_['keys'](_0x5bf7e7);_0x522b8a[_0x5b24('0x25')]=_[_0x5b24('0x26')](_0xfb4bae[_0x5b24('0x25')]);_0x522b8a[_0x5b24('0x27')]=_[_0x5b24('0x28')](_0x522b8a[_0x5b24('0x29')],_0x522b8a[_0x5b24('0x25')]);_0x1a269d[_0x5b24('0x2a')]=_[_0x5b24('0x28')](_0x522b8a[_0x5b24('0x29')],qs[_0x5b24('0x2b')](_0xfb4bae[_0x5b24('0x25')][_0x5b24('0x2b')]));_0x1a269d[_0x5b24('0x2a')]=_0x1a269d[_0x5b24('0x2a')][_0x5b24('0x2c')]?_0x1a269d[_0x5b24('0x2a')]:_0x522b8a[_0x5b24('0x29')];if(!_0xfb4bae[_0x5b24('0x25')][_0x5b24('0x2d')](_0x5b24('0x2e'))){_0x1a269d['limit']=qs[_0x5b24('0x18')](_0xfb4bae[_0x5b24('0x25')][_0x5b24('0x18')]);_0x1a269d[_0x5b24('0x2f')]=qs['offset'](_0xfb4bae[_0x5b24('0x25')][_0x5b24('0x2f')]);}_0x1a269d[_0x5b24('0x30')]=qs[_0x5b24('0x31')](_0xfb4bae[_0x5b24('0x25')][_0x5b24('0x31')]);_0x1a269d[_0x5b24('0x32')]=qs['filters'](_[_0x5b24('0x33')](_0xfb4bae[_0x5b24('0x25')],_0x522b8a[_0x5b24('0x27')]));if(_0xfb4bae[_0x5b24('0x25')][_0x5b24('0x34')]){_0x1a269d['where']=_[_0x5b24('0x35')](_0x1a269d[_0x5b24('0x32')],{'$or':_['map'](_0x5bf7e7,function(_0x962dc6){if(_0x962dc6[_0x5b24('0x36')][_0x5b24('0x37')]!==_0x5b24('0x38')){var _0x2695b4={};_0x2695b4[_0x962dc6[_0x5b24('0x39')]]={'$like':'%'+_0xfb4bae['query'][_0x5b24('0x34')]+'%'};return _0x2695b4;}})});}_0x1a269d=_[_0x5b24('0x35')]({},_0x1a269d,_0xfb4bae['options']);var _0x46475d={'where':_0x1a269d['where']};return db[_0x5b24('0x23')][_0x5b24('0x17')](_0x46475d)['then'](function(_0xf4bba6){_0x5b6314[_0x5b24('0x17')]=_0xf4bba6;if(_0xfb4bae[_0x5b24('0x25')][_0x5b24('0x3a')]){_0x1a269d[_0x5b24('0x3b')]=[{'all':!![]}];}return db[_0x5b24('0x23')][_0x5b24('0x3c')](_0x1a269d);})[_0x5b24('0x1c')](function(_0x37faaa){_0x5b6314[_0x5b24('0x3d')]=_0x37faaa;return _0x5b6314;})['then'](respondWithFilteredResult(_0x4cccd7,_0x1a269d))[_0x5b24('0x3e')](handleError(_0x4cccd7,null));};exports[_0x5b24('0x3f')]=function(_0x31d18a,_0x5bc26e){var _0x1c44b4={'raw':![],'where':{'id':_0x31d18a[_0x5b24('0x40')]['id']}},_0x4594d2={};_0x4594d2[_0x5b24('0x29')]=_[_0x5b24('0x26')](db[_0x5b24('0x23')][_0x5b24('0x24')]);_0x4594d2[_0x5b24('0x25')]=_[_0x5b24('0x26')](_0x31d18a[_0x5b24('0x25')]);_0x4594d2[_0x5b24('0x27')]=_[_0x5b24('0x28')](_0x4594d2['model'],_0x4594d2['query']);_0x1c44b4[_0x5b24('0x2a')]=_[_0x5b24('0x28')](_0x4594d2[_0x5b24('0x29')],qs[_0x5b24('0x2b')](_0x31d18a[_0x5b24('0x25')][_0x5b24('0x2b')]));_0x1c44b4[_0x5b24('0x2a')]=_0x1c44b4[_0x5b24('0x2a')][_0x5b24('0x2c')]?_0x1c44b4[_0x5b24('0x2a')]:_0x4594d2[_0x5b24('0x29')];if(_0x31d18a[_0x5b24('0x25')]['includeAll']){_0x1c44b4[_0x5b24('0x3b')]=[{'all':!![]}];}_0x1c44b4=_[_0x5b24('0x35')]({},_0x1c44b4,_0x31d18a[_0x5b24('0x41')]);return db[_0x5b24('0x23')]['find'](_0x1c44b4)[_0x5b24('0x1c')](handleEntityNotFound(_0x5bc26e,null))[_0x5b24('0x1c')](respondWithResult(_0x5bc26e,null))['catch'](handleError(_0x5bc26e,null));};exports[_0x5b24('0x42')]=function(_0x49898e,_0x26e4c6){return db[_0x5b24('0x23')][_0x5b24('0x42')](_0x49898e[_0x5b24('0x43')],{})[_0x5b24('0x1c')](respondWithResult(_0x26e4c6,0xc9))['catch'](handleError(_0x26e4c6,null));};exports[_0x5b24('0x44')]=function(_0x122f35,_0x21d1d3){return db[_0x5b24('0x23')][_0x5b24('0x44')](_0x122f35[_0x5b24('0x43')],{'raw':![],'individualHooks':!![]})[_0x5b24('0x1c')](respondWithResult(_0x21d1d3,0xc9))[_0x5b24('0x3e')](handleError(_0x21d1d3,null));};exports['update']=function(_0x46935d,_0x208b61){if(_0x46935d[_0x5b24('0x43')]['id']){delete _0x46935d[_0x5b24('0x43')]['id'];}return db[_0x5b24('0x23')][_0x5b24('0x45')]({'where':{'id':_0x46935d[_0x5b24('0x40')]['id']}})[_0x5b24('0x1c')](handleEntityNotFound(_0x208b61,null))[_0x5b24('0x1c')](saveUpdates(_0x46935d[_0x5b24('0x43')],null))[_0x5b24('0x1c')](respondWithResult(_0x208b61,null))['catch'](handleError(_0x208b61,null));};exports['destroy']=function(_0x79097b,_0x45dd85){return db['AnalyticFieldReport'][_0x5b24('0x45')]({'where':{'id':_0x79097b['params']['id']}})['then'](handleEntityNotFound(_0x45dd85,null))[_0x5b24('0x1c')](removeEntity(_0x45dd85,null))[_0x5b24('0x3e')](handleError(_0x45dd85,null));};exports['bulkDestroy']=function(_0x26cdef,_0x548fbe){return db[_0x5b24('0x23')]['destroy']({'where':{'id':_0x26cdef['query'][_0x5b24('0x46')]||[]},'raw':![],'individualHooks':!![]})[_0x5b24('0x1c')](respondWithResult(_0x548fbe,0xcc))[_0x5b24('0x3e')](handleError(_0x548fbe,null));};exports[_0x5b24('0x47')]=function(_0x668d2,_0x18e1bf,_0x487b26){return db[_0x5b24('0x48')][_0x5b24('0x49')]({'where':{'id':_0x668d2[_0x5b24('0x40')]['id']}})[_0x5b24('0x1c')](handleEntityNotFound(_0x18e1bf,null))[_0x5b24('0x1c')](function(_0x1667f0){if(_0x1667f0){return db[_0x5b24('0x4a')][_0x5b24('0x4b')](function(_0x54e453){return db[_0x5b24('0x23')][_0x5b24('0x1d')]({'where':{'CustomReportId':_0x668d2['params']['id']},'transaction':_0x54e453})['then'](function(_0x5e4e5a){var _0x14f70b=_[_0x5b24('0x4c')](_0x668d2[_0x5b24('0x43')],function(_0x353999){delete _0x353999['id'];_0x353999['CustomReportId']=_0x668d2[_0x5b24('0x40')]['id'];return _0x353999;});return db[_0x5b24('0x23')][_0x5b24('0x44')](_0x14f70b,{'transaction':_0x54e453});});})[_0x5b24('0x1c')](function(){return db['AnalyticFieldReport'][_0x5b24('0x3c')]({'where':{'CustomReportId':_0x668d2['params']['id']}});});}})[_0x5b24('0x1c')](respondWithResult(_0x18e1bf,null))[_0x5b24('0x3e')](handleError(_0x18e1bf,null));};
\ No newline at end of file
index 52d3a5c..c3970e1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4720=['rimraf','exports','analytics_report_fields','util','../../config/logger','api','moment','path'];(function(_0x29d087,_0x35b874){var _0x4a50af=function(_0x5a5665){while(--_0x5a5665){_0x29d087['push'](_0x29d087['shift']());}};_0x4a50af(++_0x35b874);}(_0x4720,0xe3));var _0x0472=function(_0x3c43f6,_0x429058){_0x3c43f6=_0x3c43f6-0x0;var _0x5677a4=_0x4720[_0x3c43f6];return _0x5677a4;};'use strict';var _=require('lodash');var util=require(_0x0472('0x0'));var logger=require(_0x0472('0x1'))(_0x0472('0x2'));var moment=require(_0x0472('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x0472('0x4'));var rimraf=require(_0x0472('0x5'));var config=require('../../config/environment');var attributes=require('./analyticFieldReport.attributes');module[_0x0472('0x6')]=function(_0x5ca95d,_0x4d43bf){return _0x5ca95d['define']('AnalyticFieldReport',attributes,{'tableName':_0x0472('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x4ea7=['define','AnalyticFieldReport','analytics_report_fields','lodash','util','api','moment','bluebird','path','rimraf','../../config/environment','./analyticFieldReport.attributes','exports'];(function(_0x12a110,_0x2f5f52){var _0x1110c5=function(_0x18680c){while(--_0x18680c){_0x12a110['push'](_0x12a110['shift']());}};_0x1110c5(++_0x2f5f52);}(_0x4ea7,0xed));var _0x74ea=function(_0x5b0df1,_0x2e1e83){_0x5b0df1=_0x5b0df1-0x0;var _0x270e9b=_0x4ea7[_0x5b0df1];return _0x270e9b;};'use strict';var _=require(_0x74ea('0x0'));var util=require(_0x74ea('0x1'));var logger=require('../../config/logger')(_0x74ea('0x2'));var moment=require(_0x74ea('0x3'));var BPromise=require(_0x74ea('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x74ea('0x5'));var rimraf=require(_0x74ea('0x6'));var config=require(_0x74ea('0x7'));var attributes=require(_0x74ea('0x8'));module[_0x74ea('0x9')]=function(_0x1629e5,_0x3feb81){return _0x1629e5[_0x74ea('0xa')](_0x74ea('0xb'),attributes,{'tableName':_0x74ea('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 601ffb5..7f7adfb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x16cc=['result','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','request','info','AnalyticFieldReport,\x20%s,\x20%s','request\x20sent','AnalyticFieldReport,\x20%s,\x20%s,\x20%s','stringify','code','error','message'];(function(_0x142041,_0x3001eb){var _0x11a40b=function(_0x1ec10a){while(--_0x1ec10a){_0x142041['push'](_0x142041['shift']());}};_0x11a40b(++_0x3001eb);}(_0x16cc,0x120));var _0xc16c=function(_0xaecbb8,_0x57ef10){_0xaecbb8=_0xaecbb8-0x0;var _0x4e8c47=_0x16cc[_0xaecbb8];return _0x4e8c47;};'use strict';var _=require('lodash');var util=require(_0xc16c('0x0'));var moment=require(_0xc16c('0x1'));var BPromise=require(_0xc16c('0x2'));var rs=require(_0xc16c('0x3'));var fs=require('fs');var Redis=require(_0xc16c('0x4'));var db=require(_0xc16c('0x5'))['db'];var utils=require(_0xc16c('0x6'));var logger=require('../../config/logger')(_0xc16c('0x7'));var config=require(_0xc16c('0x8'));var jayson=require(_0xc16c('0x9'));var client=jayson[_0xc16c('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3492da,_0x561b61,_0x828798){return new BPromise(function(_0x14d607,_0x37b245){return client[_0xc16c('0xb')](_0x3492da,_0x828798)['then'](function(_0x27f3e6){logger[_0xc16c('0xc')](_0xc16c('0xd'),_0x561b61,_0xc16c('0xe'));logger['debug'](_0xc16c('0xf'),_0x561b61,_0xc16c('0xe'),JSON[_0xc16c('0x10')](_0x27f3e6));if(_0x27f3e6['error']){if(_0x27f3e6['error'][_0xc16c('0x11')]===0x1f4){logger[_0xc16c('0x12')](_0xc16c('0xd'),_0x561b61,_0x27f3e6['error']['message']);return _0x37b245(_0x27f3e6['error'][_0xc16c('0x13')]);}logger[_0xc16c('0x12')](_0xc16c('0xd'),_0x561b61,_0x27f3e6[_0xc16c('0x12')][_0xc16c('0x13')]);return _0x14d607(_0x27f3e6[_0xc16c('0x12')][_0xc16c('0x13')]);}else{logger[_0xc16c('0xc')](_0xc16c('0xd'),_0x561b61,_0xc16c('0xe'));_0x14d607(_0x27f3e6[_0xc16c('0x14')][_0xc16c('0x13')]);}})[_0xc16c('0x15')](function(_0x2bf102){logger[_0xc16c('0x12')]('AnalyticFieldReport,\x20%s,\x20%s',_0x561b61,_0x2bf102);_0x37b245(_0x2bf102);});});}
\ No newline at end of file
+var _0xf072=['catch','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','AnalyticFieldReport,\x20%s,\x20%s','request\x20sent','AnalyticFieldReport,\x20%s,\x20%s,\x20%s','stringify','error','message'];(function(_0x3c0dcc,_0x18c419){var _0x1a224c=function(_0x238ae7){while(--_0x238ae7){_0x3c0dcc['push'](_0x3c0dcc['shift']());}};_0x1a224c(++_0x18c419);}(_0xf072,0x1cf));var _0x2f07=function(_0x6187b,_0x8574e0){_0x6187b=_0x6187b-0x0;var _0x4383c5=_0xf072[_0x6187b];return _0x4383c5;};'use strict';var _=require(_0x2f07('0x0'));var util=require(_0x2f07('0x1'));var moment=require(_0x2f07('0x2'));var BPromise=require('bluebird');var rs=require(_0x2f07('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x2f07('0x4'))['db'];var utils=require(_0x2f07('0x5'));var logger=require(_0x2f07('0x6'))('rpc');var config=require(_0x2f07('0x7'));var jayson=require(_0x2f07('0x8'));var client=jayson[_0x2f07('0x9')][_0x2f07('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x235418,_0xf73d1a,_0x33b99c){return new BPromise(function(_0x379b2e,_0x4746c2){return client[_0x2f07('0xb')](_0x235418,_0x33b99c)[_0x2f07('0xc')](function(_0x2e372c){logger[_0x2f07('0xd')](_0x2f07('0xe'),_0xf73d1a,_0x2f07('0xf'));logger['debug'](_0x2f07('0x10'),_0xf73d1a,_0x2f07('0xf'),JSON[_0x2f07('0x11')](_0x2e372c));if(_0x2e372c[_0x2f07('0x12')]){if(_0x2e372c['error']['code']===0x1f4){logger[_0x2f07('0x12')](_0x2f07('0xe'),_0xf73d1a,_0x2e372c['error'][_0x2f07('0x13')]);return _0x4746c2(_0x2e372c[_0x2f07('0x12')][_0x2f07('0x13')]);}logger['error'](_0x2f07('0xe'),_0xf73d1a,_0x2e372c[_0x2f07('0x12')][_0x2f07('0x13')]);return _0x379b2e(_0x2e372c[_0x2f07('0x12')][_0x2f07('0x13')]);}else{logger[_0x2f07('0xd')]('AnalyticFieldReport,\x20%s,\x20%s',_0xf73d1a,_0x2f07('0xf'));_0x379b2e(_0x2e372c['result'][_0x2f07('0x13')]);}})[_0x2f07('0x14')](function(_0x1dace4){logger[_0x2f07('0x12')](_0x2f07('0xe'),_0xf73d1a,_0x1dace4);_0x4746c2(_0x1dace4);});});}
\ No newline at end of file
index db7ed7f..8dfa9d0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4522=['../../components/interaction/service','../../config/environment','./analyticFieldReport.controller','get','isAuthenticated','index','/:id','show','post','create','/create_many','addFields','put','update','delete','/destroy_many','exports','path','connect-timeout','express','../../components/auth/service'];(function(_0x2adc73,_0x5e23ac){var _0xa2c1dc=function(_0x51b6f6){while(--_0x51b6f6){_0x2adc73['push'](_0x2adc73['shift']());}};_0xa2c1dc(++_0x5e23ac);}(_0x4522,0x1a0));var _0x2452=function(_0x43fd34,_0x320451){_0x43fd34=_0x43fd34-0x0;var _0x4ff001=_0x4522[_0x43fd34];return _0x4ff001;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x2452('0x0'));var timeout=require(_0x2452('0x1'));var express=require(_0x2452('0x2'));var router=express['Router']();var auth=require(_0x2452('0x3'));var interaction=require(_0x2452('0x4'));var config=require(_0x2452('0x5'));var controller=require(_0x2452('0x6'));router[_0x2452('0x7')]('/',auth[_0x2452('0x8')](),controller[_0x2452('0x9')]);router[_0x2452('0x7')](_0x2452('0xa'),auth[_0x2452('0x8')](),controller[_0x2452('0xb')]);router[_0x2452('0xc')]('/',auth[_0x2452('0x8')](),controller[_0x2452('0xd')]);router[_0x2452('0xc')](_0x2452('0xe'),auth['isAuthenticated'](),controller['bulkCreate']);router[_0x2452('0xc')]('/:id/create_many',auth['isAuthenticated'](),controller[_0x2452('0xf')]);router[_0x2452('0x10')](_0x2452('0xa'),auth[_0x2452('0x8')](),controller[_0x2452('0x11')]);router[_0x2452('0x12')](_0x2452('0x13'),auth[_0x2452('0x8')](),controller['bulkDestroy']);router['delete']('/:id',auth[_0x2452('0x8')](),controller['destroy']);module[_0x2452('0x14')]=router;
\ No newline at end of file
+var _0x579c=['./analyticFieldReport.controller','get','isAuthenticated','index','/:id','show','post','create','/create_many','bulkCreate','/:id/create_many','addFields','put','update','delete','/destroy_many','bulkDestroy','destroy','multer','util','path','connect-timeout','express','../../components/auth/service','../../config/environment'];(function(_0x481dcf,_0x2126b5){var _0x4bc199=function(_0x404367){while(--_0x404367){_0x481dcf['push'](_0x481dcf['shift']());}};_0x4bc199(++_0x2126b5);}(_0x579c,0xda));var _0xc579=function(_0x1791a7,_0x528406){_0x1791a7=_0x1791a7-0x0;var _0x224858=_0x579c[_0x1791a7];return _0x224858;};'use strict';var multer=require(_0xc579('0x0'));var util=require(_0xc579('0x1'));var path=require(_0xc579('0x2'));var timeout=require(_0xc579('0x3'));var express=require(_0xc579('0x4'));var router=express['Router']();var auth=require(_0xc579('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xc579('0x6'));var controller=require(_0xc579('0x7'));router[_0xc579('0x8')]('/',auth[_0xc579('0x9')](),controller[_0xc579('0xa')]);router[_0xc579('0x8')](_0xc579('0xb'),auth['isAuthenticated'](),controller[_0xc579('0xc')]);router[_0xc579('0xd')]('/',auth[_0xc579('0x9')](),controller[_0xc579('0xe')]);router[_0xc579('0xd')](_0xc579('0xf'),auth[_0xc579('0x9')](),controller[_0xc579('0x10')]);router['post'](_0xc579('0x11'),auth[_0xc579('0x9')](),controller[_0xc579('0x12')]);router[_0xc579('0x13')](_0xc579('0xb'),auth[_0xc579('0x9')](),controller[_0xc579('0x14')]);router[_0xc579('0x15')](_0xc579('0x16'),auth[_0xc579('0x9')](),controller[_0xc579('0x17')]);router['delete'](_0xc579('0xb'),auth['isAuthenticated'](),controller[_0xc579('0x18')]);module['exports']=router;
\ No newline at end of file
index 373da6a..b913a62 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ef1=['STRING','TEXT','exports'];(function(_0xa12526,_0x9b5fe3){var _0x572645=function(_0xa2f7c4){while(--_0xa2f7c4){_0xa12526['push'](_0xa12526['shift']());}};_0x572645(++_0x9b5fe3);}(_0x8ef1,0x71));var _0x18ef=function(_0x3e5086,_0x48f4a2){_0x3e5086=_0x3e5086-0x0;var _0xfeb102=_0x8ef1[_0x3e5086];return _0xfeb102;};'use strict';var Sequelize=require('sequelize');module[_0x18ef('0x0')]={'name':{'type':Sequelize[_0x18ef('0x1')],'allowNull':![],'unique':'name'},'table':{'type':Sequelize[_0x18ef('0x1')]},'metric':{'type':Sequelize[_0x18ef('0x2')]},'description':{'type':Sequelize[_0x18ef('0x1')]}};
\ No newline at end of file
+var _0x4eb7=['sequelize','exports','STRING'];(function(_0x2f91a6,_0x4e44ff){var _0x324cb5=function(_0x452102){while(--_0x452102){_0x2f91a6['push'](_0x2f91a6['shift']());}};_0x324cb5(++_0x4e44ff);}(_0x4eb7,0x8d));var _0x74eb=function(_0x363ef8,_0x4ecb1a){_0x363ef8=_0x363ef8-0x0;var _0x148822=_0x4eb7[_0x363ef8];return _0x148822;};'use strict';var Sequelize=require(_0x74eb('0x0'));module[_0x74eb('0x1')]={'name':{'type':Sequelize[_0x74eb('0x2')],'allowNull':![],'unique':'name'},'table':{'type':Sequelize[_0x74eb('0x2')]},'metric':{'type':Sequelize['TEXT']},'description':{'type':Sequelize[_0x74eb('0x2')]}};
\ No newline at end of file
index 689cf0e..b52f3ba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7c0c=['../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','count','limit','json','apply','save','then','get','Metrics','UserProfileResource','destroy','error','name','send','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','offset','sort','where','pick','filter','type','key','field','merge','options','AnalyticMetric','includeAll','include','findAll','rows','show','rawAttributes','find','catch','create','body','user','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service'];(function(_0x26279c,_0x96f5b2){var _0x19bf71=function(_0x57c63d){while(--_0x57c63d){_0x26279c['push'](_0x26279c['shift']());}};_0x19bf71(++_0x96f5b2);}(_0x7c0c,0xd8));var _0xc7c0=function(_0x1ef911,_0x32a38b){_0x1ef911=_0x1ef911-0x0;var _0x5297f4=_0x7c0c[_0x1ef911];return _0x5297f4;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xc7c0('0x0'));var zipdir=require(_0xc7c0('0x1'));var jsonpatch=require(_0xc7c0('0x2'));var rp=require(_0xc7c0('0x3'));var moment=require('moment');var BPromise=require(_0xc7c0('0x4'));var Mustache=require(_0xc7c0('0x5'));var util=require(_0xc7c0('0x6'));var path=require(_0xc7c0('0x7'));var sox=require(_0xc7c0('0x8'));var csv=require(_0xc7c0('0x9'));var ejs=require(_0xc7c0('0xa'));var fs=require('fs');var _=require(_0xc7c0('0xb'));var squel=require(_0xc7c0('0xc'));var crypto=require('crypto');var jsforce=require(_0xc7c0('0xd'));var deskjs=require(_0xc7c0('0xe'));var toCsv=require('to-csv');var querystring=require(_0xc7c0('0xf'));var Papa=require(_0xc7c0('0x10'));var Redis=require('ioredis');var authService=require(_0xc7c0('0x11'));var qs=require(_0xc7c0('0x12'));var hardwareService=require(_0xc7c0('0x13'));var logger=require(_0xc7c0('0x14'))(_0xc7c0('0x15'));var utils=require(_0xc7c0('0x16'));var config=require(_0xc7c0('0x17'));var db=require(_0xc7c0('0x18'))['db'];function respondWithStatusCode(_0x509a29,_0x285e9c){_0x285e9c=_0x285e9c||0xcc;return function(_0xd71a6){if(_0xd71a6){return _0x509a29[_0xc7c0('0x19')](_0x285e9c);}return _0x509a29[_0xc7c0('0x1a')](_0x285e9c)['end']();};}function respondWithResult(_0x50de88,_0x470891){_0x470891=_0x470891||0xc8;return function(_0x3d7cab){if(_0x3d7cab){return _0x50de88[_0xc7c0('0x1a')](_0x470891)['json'](_0x3d7cab);}};}function respondWithFilteredResult(_0x1d1e93,_0x27aaaf){return function(_0x1ea359){if(_0x1ea359){var _0x5a11d7=_0x1ea359[_0xc7c0('0x1b')],_0x324f03=_0x27aaaf['offset'],_0x61bdf9=_0x27aaaf['offset']+_0x27aaaf[_0xc7c0('0x1c')],_0x1904c2;if(_0x61bdf9>=_0x5a11d7){_0x61bdf9=_0x5a11d7;_0x1904c2=0xc8;}else{_0x1904c2=0xce;}_0x1d1e93[_0xc7c0('0x1a')](_0x1904c2);return _0x1d1e93['set']('Content-Range',_0x324f03+'-'+_0x61bdf9+'/'+_0x5a11d7)[_0xc7c0('0x1d')](_0x1ea359);}return null;};}function patchUpdates(_0x2cec4c){return function(_0x3e1c2b){try{jsonpatch[_0xc7c0('0x1e')](_0x3e1c2b,_0x2cec4c,!![]);}catch(_0x2330b4){return BPromise['reject'](_0x2330b4);}return _0x3e1c2b[_0xc7c0('0x1f')]();};}function saveUpdates(_0x39d14b,_0x5a2e11){return function(_0xaaf6c4){if(_0xaaf6c4){return _0xaaf6c4['update'](_0x39d14b)[_0xc7c0('0x20')](function(_0x3c444c){return _0x3c444c;});}return null;};}function removeEntity(_0x4563e5,_0x3da568){return function(_0x28bab2){if(_0x28bab2){return _0x28bab2['destroy']()[_0xc7c0('0x20')](function(){var _0x1f5b4e=_0x28bab2[_0xc7c0('0x21')]({'plain':!![]});var _0x267cca=_0xc7c0('0x22');return db[_0xc7c0('0x23')][_0xc7c0('0x24')]({'where':{'type':_0x267cca,'resourceId':_0x1f5b4e['id']}})[_0xc7c0('0x20')](function(){return _0x28bab2;});})[_0xc7c0('0x20')](function(){_0x4563e5['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x3a48a9,_0x3eda37){return function(_0x4d2712){if(!_0x4d2712){_0x3a48a9['sendStatus'](0x194);}return _0x4d2712;};}function handleError(_0x56afb6,_0x57d900){_0x57d900=_0x57d900||0x1f4;return function(_0x57e0fe){logger[_0xc7c0('0x25')](_0x57e0fe['stack']);if(_0x57e0fe['name']){delete _0x57e0fe[_0xc7c0('0x26')];}_0x56afb6[_0xc7c0('0x1a')](_0x57d900)[_0xc7c0('0x27')](_0x57e0fe);};}exports['index']=function(_0x7e4a9f,_0x485f10){var _0x572332={},_0x3ed0d6={},_0x3d95dd={'count':0x0,'rows':[]};var _0x3786b4=db['AnalyticMetric']['rawAttributes'];_0x3ed0d6[_0xc7c0('0x28')]=_[_0xc7c0('0x29')](_0x3786b4);_0x3ed0d6[_0xc7c0('0x2a')]=_['keys'](_0x7e4a9f[_0xc7c0('0x2a')]);_0x3ed0d6[_0xc7c0('0x2b')]=_[_0xc7c0('0x2c')](_0x3ed0d6[_0xc7c0('0x28')],_0x3ed0d6[_0xc7c0('0x2a')]);_0x572332[_0xc7c0('0x2d')]=_[_0xc7c0('0x2c')](_0x3ed0d6[_0xc7c0('0x28')],qs[_0xc7c0('0x2e')](_0x7e4a9f[_0xc7c0('0x2a')][_0xc7c0('0x2e')]));_0x572332[_0xc7c0('0x2d')]=_0x572332['attributes'][_0xc7c0('0x2f')]?_0x572332[_0xc7c0('0x2d')]:_0x3ed0d6[_0xc7c0('0x28')];if(!_0x7e4a9f[_0xc7c0('0x2a')][_0xc7c0('0x30')](_0xc7c0('0x31'))){_0x572332[_0xc7c0('0x1c')]=qs[_0xc7c0('0x1c')](_0x7e4a9f['query'][_0xc7c0('0x1c')]);_0x572332[_0xc7c0('0x32')]=qs[_0xc7c0('0x32')](_0x7e4a9f[_0xc7c0('0x2a')][_0xc7c0('0x32')]);}_0x572332['order']=qs[_0xc7c0('0x33')](_0x7e4a9f[_0xc7c0('0x2a')]['sort']);_0x572332[_0xc7c0('0x34')]=qs[_0xc7c0('0x2b')](_[_0xc7c0('0x35')](_0x7e4a9f[_0xc7c0('0x2a')],_0x3ed0d6['filters']));if(_0x7e4a9f[_0xc7c0('0x2a')][_0xc7c0('0x36')]){_0x572332[_0xc7c0('0x34')]=_['merge'](_0x572332[_0xc7c0('0x34')],{'$or':_['map'](_0x3786b4,function(_0x232d85){if(_0x232d85[_0xc7c0('0x37')][_0xc7c0('0x38')]!=='VIRTUAL'){var _0x39b56a={};_0x39b56a[_0x232d85[_0xc7c0('0x39')]]={'$like':'%'+_0x7e4a9f[_0xc7c0('0x2a')]['filter']+'%'};return _0x39b56a;}})});}_0x572332=_[_0xc7c0('0x3a')]({},_0x572332,_0x7e4a9f[_0xc7c0('0x3b')]);var _0x2b761d={'where':_0x572332[_0xc7c0('0x34')]};return db[_0xc7c0('0x3c')][_0xc7c0('0x1b')](_0x2b761d)[_0xc7c0('0x20')](function(_0x4b955a){_0x3d95dd[_0xc7c0('0x1b')]=_0x4b955a;if(_0x7e4a9f[_0xc7c0('0x2a')][_0xc7c0('0x3d')]){_0x572332[_0xc7c0('0x3e')]=[{'all':!![]}];}return db[_0xc7c0('0x3c')][_0xc7c0('0x3f')](_0x572332);})[_0xc7c0('0x20')](function(_0x323ac7){_0x3d95dd[_0xc7c0('0x40')]=_0x323ac7;return _0x3d95dd;})[_0xc7c0('0x20')](respondWithFilteredResult(_0x485f10,_0x572332))['catch'](handleError(_0x485f10,null));};exports[_0xc7c0('0x41')]=function(_0x119de8,_0x99c3a5){var _0x487ffe={'raw':!![],'where':{'id':_0x119de8['params']['id']}},_0x485112={};_0x485112['model']=_[_0xc7c0('0x29')](db['AnalyticMetric'][_0xc7c0('0x42')]);_0x485112[_0xc7c0('0x2a')]=_[_0xc7c0('0x29')](_0x119de8[_0xc7c0('0x2a')]);_0x485112[_0xc7c0('0x2b')]=_[_0xc7c0('0x2c')](_0x485112[_0xc7c0('0x28')],_0x485112[_0xc7c0('0x2a')]);_0x487ffe['attributes']=_[_0xc7c0('0x2c')](_0x485112[_0xc7c0('0x28')],qs[_0xc7c0('0x2e')](_0x119de8[_0xc7c0('0x2a')][_0xc7c0('0x2e')]));_0x487ffe['attributes']=_0x487ffe[_0xc7c0('0x2d')][_0xc7c0('0x2f')]?_0x487ffe[_0xc7c0('0x2d')]:_0x485112[_0xc7c0('0x28')];if(_0x119de8[_0xc7c0('0x2a')][_0xc7c0('0x3d')]){_0x487ffe['include']=[{'all':!![]}];}_0x487ffe=_['merge']({},_0x487ffe,_0x119de8['options']);return db[_0xc7c0('0x3c')][_0xc7c0('0x43')](_0x487ffe)['then'](handleEntityNotFound(_0x99c3a5,null))[_0xc7c0('0x20')](respondWithResult(_0x99c3a5,null))[_0xc7c0('0x44')](handleError(_0x99c3a5,null));};exports['create']=function(_0x2a57c9,_0x24f98b){return db[_0xc7c0('0x3c')][_0xc7c0('0x45')](_0x2a57c9[_0xc7c0('0x46')],{})[_0xc7c0('0x20')](function(_0x46f1b2){var _0x27bb6d=_0x2a57c9[_0xc7c0('0x47')][_0xc7c0('0x21')]({'plain':!![]});if(!_0x27bb6d)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x27bb6d[_0xc7c0('0x48')]===_0xc7c0('0x47')){var _0xd2fba=_0x46f1b2['get']({'plain':!![]});var _0x2223ac='Metrics';return db[_0xc7c0('0x49')][_0xc7c0('0x43')]({'where':{'name':_0x2223ac,'userProfileId':_0x27bb6d[_0xc7c0('0x4a')]},'raw':!![]})[_0xc7c0('0x20')](function(_0x48624f){if(_0x48624f&&_0x48624f[_0xc7c0('0x4b')]===0x0){return db[_0xc7c0('0x23')][_0xc7c0('0x45')]({'name':_0xd2fba[_0xc7c0('0x26')],'resourceId':_0xd2fba['id'],'type':_0x48624f[_0xc7c0('0x26')],'sectionId':_0x48624f['id']},{})['then'](function(){return _0x46f1b2;});}else{return _0x46f1b2;}})['catch'](function(_0x2ca7d3){logger['error'](_0xc7c0('0x4c'),_0x2ca7d3);throw _0x2ca7d3;});}return _0x46f1b2;})[_0xc7c0('0x20')](respondWithResult(_0x24f98b,0xc9))[_0xc7c0('0x44')](handleError(_0x24f98b,null));};exports['update']=function(_0x357076,_0x501e45){if(_0x357076['body']['id']){delete _0x357076['body']['id'];}return db[_0xc7c0('0x3c')][_0xc7c0('0x43')]({'where':{'id':_0x357076[_0xc7c0('0x4d')]['id']}})[_0xc7c0('0x20')](handleEntityNotFound(_0x501e45,null))['then'](saveUpdates(_0x357076['body'],null))[_0xc7c0('0x20')](respondWithResult(_0x501e45,null))[_0xc7c0('0x44')](handleError(_0x501e45,null));};exports['destroy']=function(_0x4cdc53,_0x3fd0e0){return db[_0xc7c0('0x3c')][_0xc7c0('0x43')]({'where':{'id':_0x4cdc53['params']['id']}})['then'](handleEntityNotFound(_0x3fd0e0,null))[_0xc7c0('0x20')](removeEntity(_0x3fd0e0,null))[_0xc7c0('0x44')](handleError(_0x3fd0e0,null));};
\ No newline at end of file
+var _0x42dd=['lodash','crypto','jsforce','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../mysqldb','sendStatus','end','status','json','count','offset','Content-Range','apply','save','update','then','destroy','Metrics','UserProfileResource','error','stack','name','send','index','AnalyticMetric','rawAttributes','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','type','VIRTUAL','field','options','includeAll','findAll','rows','params','length','include','find','catch','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs'];(function(_0x1d1779,_0x284147){var _0x2377e9=function(_0x299f6f){while(--_0x299f6f){_0x1d1779['push'](_0x1d1779['shift']());}};_0x2377e9(++_0x284147);}(_0x42dd,0x142));var _0xd42d=function(_0x4a3898,_0x4c9853){_0x4a3898=_0x4a3898-0x0;var _0x25ceb0=_0x42dd[_0x4a3898];return _0x25ceb0;};'use strict';var pdf=require(_0xd42d('0x0'));var emlformat=require(_0xd42d('0x1'));var rimraf=require(_0xd42d('0x2'));var zipdir=require(_0xd42d('0x3'));var jsonpatch=require(_0xd42d('0x4'));var rp=require(_0xd42d('0x5'));var moment=require(_0xd42d('0x6'));var BPromise=require(_0xd42d('0x7'));var Mustache=require(_0xd42d('0x8'));var util=require(_0xd42d('0x9'));var path=require(_0xd42d('0xa'));var sox=require(_0xd42d('0xb'));var csv=require(_0xd42d('0xc'));var ejs=require(_0xd42d('0xd'));var fs=require('fs');var _=require(_0xd42d('0xe'));var squel=require('squel');var crypto=require(_0xd42d('0xf'));var jsforce=require(_0xd42d('0x10'));var deskjs=require('desk.js');var toCsv=require(_0xd42d('0xc'));var querystring=require(_0xd42d('0x11'));var Papa=require(_0xd42d('0x12'));var Redis=require(_0xd42d('0x13'));var authService=require('../../components/auth/service');var qs=require(_0xd42d('0x14'));var hardwareService=require(_0xd42d('0x15'));var logger=require(_0xd42d('0x16'))(_0xd42d('0x17'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xd42d('0x18'))['db'];function respondWithStatusCode(_0x272c89,_0x1658b1){_0x1658b1=_0x1658b1||0xcc;return function(_0x3c6b81){if(_0x3c6b81){return _0x272c89[_0xd42d('0x19')](_0x1658b1);}return _0x272c89['status'](_0x1658b1)[_0xd42d('0x1a')]();};}function respondWithResult(_0x11dbbf,_0x4c6c43){_0x4c6c43=_0x4c6c43||0xc8;return function(_0x11cbc4){if(_0x11cbc4){return _0x11dbbf[_0xd42d('0x1b')](_0x4c6c43)[_0xd42d('0x1c')](_0x11cbc4);}};}function respondWithFilteredResult(_0x56b9c5,_0x49936f){return function(_0x11d341){if(_0x11d341){var _0x59f53c=_0x11d341[_0xd42d('0x1d')],_0x2d9d27=_0x49936f[_0xd42d('0x1e')],_0x2425e9=_0x49936f[_0xd42d('0x1e')]+_0x49936f['limit'],_0x48dfd6;if(_0x2425e9>=_0x59f53c){_0x2425e9=_0x59f53c;_0x48dfd6=0xc8;}else{_0x48dfd6=0xce;}_0x56b9c5['status'](_0x48dfd6);return _0x56b9c5['set'](_0xd42d('0x1f'),_0x2d9d27+'-'+_0x2425e9+'/'+_0x59f53c)[_0xd42d('0x1c')](_0x11d341);}return null;};}function patchUpdates(_0x1fa1be){return function(_0x5d36f5){try{jsonpatch[_0xd42d('0x20')](_0x5d36f5,_0x1fa1be,!![]);}catch(_0x5146be){return BPromise['reject'](_0x5146be);}return _0x5d36f5[_0xd42d('0x21')]();};}function saveUpdates(_0xca44d5,_0x54f150){return function(_0x1fd319){if(_0x1fd319){return _0x1fd319[_0xd42d('0x22')](_0xca44d5)[_0xd42d('0x23')](function(_0x4cebef){return _0x4cebef;});}return null;};}function removeEntity(_0x48517f,_0x215ec3){return function(_0x365f49){if(_0x365f49){return _0x365f49[_0xd42d('0x24')]()[_0xd42d('0x23')](function(){var _0x3aabb6=_0x365f49['get']({'plain':!![]});var _0x2155b2=_0xd42d('0x25');return db[_0xd42d('0x26')]['destroy']({'where':{'type':_0x2155b2,'resourceId':_0x3aabb6['id']}})[_0xd42d('0x23')](function(){return _0x365f49;});})[_0xd42d('0x23')](function(){_0x48517f['status'](0xcc)[_0xd42d('0x1a')]();});}};}function handleEntityNotFound(_0x37b30,_0x16465b){return function(_0x71d990){if(!_0x71d990){_0x37b30['sendStatus'](0x194);}return _0x71d990;};}function handleError(_0xc04796,_0x1f1bba){_0x1f1bba=_0x1f1bba||0x1f4;return function(_0x3fb707){logger[_0xd42d('0x27')](_0x3fb707[_0xd42d('0x28')]);if(_0x3fb707['name']){delete _0x3fb707[_0xd42d('0x29')];}_0xc04796[_0xd42d('0x1b')](_0x1f1bba)[_0xd42d('0x2a')](_0x3fb707);};}exports[_0xd42d('0x2b')]=function(_0x35769b,_0x1fc4e0){var _0x40cb15={},_0x4b65b5={},_0x3242c0={'count':0x0,'rows':[]};var _0x4aca44=db[_0xd42d('0x2c')][_0xd42d('0x2d')];_0x4b65b5[_0xd42d('0x2e')]=_[_0xd42d('0x2f')](_0x4aca44);_0x4b65b5[_0xd42d('0x30')]=_[_0xd42d('0x2f')](_0x35769b[_0xd42d('0x30')]);_0x4b65b5[_0xd42d('0x31')]=_[_0xd42d('0x32')](_0x4b65b5[_0xd42d('0x2e')],_0x4b65b5['query']);_0x40cb15['attributes']=_[_0xd42d('0x32')](_0x4b65b5[_0xd42d('0x2e')],qs[_0xd42d('0x33')](_0x35769b[_0xd42d('0x30')][_0xd42d('0x33')]));_0x40cb15[_0xd42d('0x34')]=_0x40cb15[_0xd42d('0x34')]['length']?_0x40cb15['attributes']:_0x4b65b5['model'];if(!_0x35769b[_0xd42d('0x30')][_0xd42d('0x35')](_0xd42d('0x36'))){_0x40cb15[_0xd42d('0x37')]=qs[_0xd42d('0x37')](_0x35769b['query'][_0xd42d('0x37')]);_0x40cb15[_0xd42d('0x1e')]=qs[_0xd42d('0x1e')](_0x35769b[_0xd42d('0x30')][_0xd42d('0x1e')]);}_0x40cb15[_0xd42d('0x38')]=qs[_0xd42d('0x39')](_0x35769b[_0xd42d('0x30')][_0xd42d('0x39')]);_0x40cb15[_0xd42d('0x3a')]=qs[_0xd42d('0x31')](_[_0xd42d('0x3b')](_0x35769b['query'],_0x4b65b5[_0xd42d('0x31')]));if(_0x35769b[_0xd42d('0x30')][_0xd42d('0x3c')]){_0x40cb15[_0xd42d('0x3a')]=_[_0xd42d('0x3d')](_0x40cb15[_0xd42d('0x3a')],{'$or':_[_0xd42d('0x3e')](_0x4aca44,function(_0x16b041){if(_0x16b041[_0xd42d('0x3f')]['key']!==_0xd42d('0x40')){var _0x44d5f5={};_0x44d5f5[_0x16b041[_0xd42d('0x41')]]={'$like':'%'+_0x35769b[_0xd42d('0x30')]['filter']+'%'};return _0x44d5f5;}})});}_0x40cb15=_['merge']({},_0x40cb15,_0x35769b[_0xd42d('0x42')]);var _0x21452f={'where':_0x40cb15[_0xd42d('0x3a')]};return db[_0xd42d('0x2c')][_0xd42d('0x1d')](_0x21452f)['then'](function(_0xf89456){_0x3242c0['count']=_0xf89456;if(_0x35769b[_0xd42d('0x30')][_0xd42d('0x43')]){_0x40cb15['include']=[{'all':!![]}];}return db[_0xd42d('0x2c')][_0xd42d('0x44')](_0x40cb15);})[_0xd42d('0x23')](function(_0xb5ce4c){_0x3242c0[_0xd42d('0x45')]=_0xb5ce4c;return _0x3242c0;})[_0xd42d('0x23')](respondWithFilteredResult(_0x1fc4e0,_0x40cb15))['catch'](handleError(_0x1fc4e0,null));};exports['show']=function(_0x2f0438,_0x4c0948){var _0x235c2e={'raw':!![],'where':{'id':_0x2f0438[_0xd42d('0x46')]['id']}},_0x69f53={};_0x69f53[_0xd42d('0x2e')]=_[_0xd42d('0x2f')](db['AnalyticMetric'][_0xd42d('0x2d')]);_0x69f53[_0xd42d('0x30')]=_[_0xd42d('0x2f')](_0x2f0438[_0xd42d('0x30')]);_0x69f53[_0xd42d('0x31')]=_[_0xd42d('0x32')](_0x69f53[_0xd42d('0x2e')],_0x69f53[_0xd42d('0x30')]);_0x235c2e['attributes']=_[_0xd42d('0x32')](_0x69f53[_0xd42d('0x2e')],qs['fields'](_0x2f0438[_0xd42d('0x30')]['fields']));_0x235c2e[_0xd42d('0x34')]=_0x235c2e[_0xd42d('0x34')][_0xd42d('0x47')]?_0x235c2e['attributes']:_0x69f53['model'];if(_0x2f0438['query']['includeAll']){_0x235c2e[_0xd42d('0x48')]=[{'all':!![]}];}_0x235c2e=_[_0xd42d('0x3d')]({},_0x235c2e,_0x2f0438[_0xd42d('0x42')]);return db[_0xd42d('0x2c')][_0xd42d('0x49')](_0x235c2e)[_0xd42d('0x23')](handleEntityNotFound(_0x4c0948,null))[_0xd42d('0x23')](respondWithResult(_0x4c0948,null))[_0xd42d('0x4a')](handleError(_0x4c0948,null));};exports[_0xd42d('0x4b')]=function(_0x5d5a52,_0xe4d0e6){return db[_0xd42d('0x2c')][_0xd42d('0x4b')](_0x5d5a52[_0xd42d('0x4c')],{})[_0xd42d('0x23')](function(_0xb2c40c){var _0x9b8d3f=_0x5d5a52[_0xd42d('0x4d')][_0xd42d('0x4e')]({'plain':!![]});if(!_0x9b8d3f)throw new Error(_0xd42d('0x4f'));if(_0x9b8d3f[_0xd42d('0x50')]===_0xd42d('0x4d')){var _0x355278=_0xb2c40c[_0xd42d('0x4e')]({'plain':!![]});var _0x4670ec='Metrics';return db[_0xd42d('0x51')]['find']({'where':{'name':_0x4670ec,'userProfileId':_0x9b8d3f['userProfileId']},'raw':!![]})[_0xd42d('0x23')](function(_0x4640fe){if(_0x4640fe&&_0x4640fe[_0xd42d('0x52')]===0x0){return db[_0xd42d('0x26')][_0xd42d('0x4b')]({'name':_0x355278[_0xd42d('0x29')],'resourceId':_0x355278['id'],'type':_0x4640fe[_0xd42d('0x29')],'sectionId':_0x4640fe['id']},{})['then'](function(){return _0xb2c40c;});}else{return _0xb2c40c;}})['catch'](function(_0xda2dac){logger[_0xd42d('0x27')](_0xd42d('0x53'),_0xda2dac);throw _0xda2dac;});}return _0xb2c40c;})['then'](respondWithResult(_0xe4d0e6,0xc9))[_0xd42d('0x4a')](handleError(_0xe4d0e6,null));};exports[_0xd42d('0x22')]=function(_0x71517,_0x246671){if(_0x71517[_0xd42d('0x4c')]['id']){delete _0x71517[_0xd42d('0x4c')]['id'];}return db[_0xd42d('0x2c')][_0xd42d('0x49')]({'where':{'id':_0x71517[_0xd42d('0x46')]['id']}})[_0xd42d('0x23')](handleEntityNotFound(_0x246671,null))[_0xd42d('0x23')](saveUpdates(_0x71517[_0xd42d('0x4c')],null))[_0xd42d('0x23')](respondWithResult(_0x246671,null))[_0xd42d('0x4a')](handleError(_0x246671,null));};exports[_0xd42d('0x24')]=function(_0x2bdef5,_0xc48568){return db['AnalyticMetric'][_0xd42d('0x49')]({'where':{'id':_0x2bdef5['params']['id']}})[_0xd42d('0x23')](handleEntityNotFound(_0xc48568,null))[_0xd42d('0x23')](removeEntity(_0xc48568,null))[_0xd42d('0x4a')](handleError(_0xc48568,null));};
\ No newline at end of file
index f50e8bf..cd7fc0a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb561=['./analyticMetric.attributes','exports','define','AnalyticMetric','lodash','util','api','moment','request-promise','rimraf','../../config/environment'];(function(_0x421b78,_0x1ac6cf){var _0xad0c0a=function(_0x31be8b){while(--_0x31be8b){_0x421b78['push'](_0x421b78['shift']());}};_0xad0c0a(++_0x1ac6cf);}(_0xb561,0x1e8));var _0x1b56=function(_0x189ac2,_0x5544fb){_0x189ac2=_0x189ac2-0x0;var _0x35364c=_0xb561[_0x189ac2];return _0x35364c;};'use strict';var _=require(_0x1b56('0x0'));var util=require(_0x1b56('0x1'));var logger=require('../../config/logger')(_0x1b56('0x2'));var moment=require(_0x1b56('0x3'));var BPromise=require('bluebird');var rp=require(_0x1b56('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x1b56('0x5'));var config=require(_0x1b56('0x6'));var attributes=require(_0x1b56('0x7'));module[_0x1b56('0x8')]=function(_0x3644a8,_0x3804bd){return _0x3644a8[_0x1b56('0x9')](_0x1b56('0xa'),attributes,{'tableName':'analytics_metrics','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7f9e=['analytics_metrics','lodash','util','../../config/logger','api','bluebird','request-promise','path','rimraf','../../config/environment','./analyticMetric.attributes','exports','define'];(function(_0x199572,_0x33e667){var _0x13cfa3=function(_0x53c075){while(--_0x53c075){_0x199572['push'](_0x199572['shift']());}};_0x13cfa3(++_0x33e667);}(_0x7f9e,0x90));var _0xe7f9=function(_0x1c8c28,_0x3ee093){_0x1c8c28=_0x1c8c28-0x0;var _0x1f59b4=_0x7f9e[_0x1c8c28];return _0x1f59b4;};'use strict';var _=require(_0xe7f9('0x0'));var util=require(_0xe7f9('0x1'));var logger=require(_0xe7f9('0x2'))(_0xe7f9('0x3'));var moment=require('moment');var BPromise=require(_0xe7f9('0x4'));var rp=require(_0xe7f9('0x5'));var fs=require('fs');var path=require(_0xe7f9('0x6'));var rimraf=require(_0xe7f9('0x7'));var config=require(_0xe7f9('0x8'));var attributes=require(_0xe7f9('0x9'));module[_0xe7f9('0xa')]=function(_0xe8ff46,_0x4aa7db){return _0xe8ff46[_0xe7f9('0xb')]('AnalyticMetric',attributes,{'tableName':_0xe7f9('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 34c5fed..1f5a3b7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ef1=['../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','AnalyticMetric,\x20%s,\x20%s','debug','AnalyticMetric,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','code','error','message','info','catch','lodash','util','bluebird','randomstring','ioredis'];(function(_0x277280,_0x2b812a){var _0x4009a6=function(_0x1655eb){while(--_0x1655eb){_0x277280['push'](_0x277280['shift']());}};_0x4009a6(++_0x2b812a);}(_0x4ef1,0xeb));var _0x14ef=function(_0x1658ad,_0x487c1f){_0x1658ad=_0x1658ad-0x0;var _0x3b1927=_0x4ef1[_0x1658ad];return _0x3b1927;};'use strict';var _=require(_0x14ef('0x0'));var util=require(_0x14ef('0x1'));var moment=require('moment');var BPromise=require(_0x14ef('0x2'));var rs=require(_0x14ef('0x3'));var fs=require('fs');var Redis=require(_0x14ef('0x4'));var db=require(_0x14ef('0x5'))['db'];var utils=require(_0x14ef('0x6'));var logger=require(_0x14ef('0x7'))(_0x14ef('0x8'));var config=require(_0x14ef('0x9'));var jayson=require(_0x14ef('0xa'));var client=jayson[_0x14ef('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x261fa2,_0x2dc335,_0x5b75ad){return new BPromise(function(_0x4175e7,_0x2ab217){return client[_0x14ef('0xc')](_0x261fa2,_0x5b75ad)[_0x14ef('0xd')](function(_0x17acc1){logger['info'](_0x14ef('0xe'),_0x2dc335,'request\x20sent');logger[_0x14ef('0xf')](_0x14ef('0x10'),_0x2dc335,_0x14ef('0x11'),JSON[_0x14ef('0x12')](_0x17acc1));if(_0x17acc1['error']){if(_0x17acc1['error'][_0x14ef('0x13')]===0x1f4){logger[_0x14ef('0x14')]('AnalyticMetric,\x20%s,\x20%s',_0x2dc335,_0x17acc1[_0x14ef('0x14')][_0x14ef('0x15')]);return _0x2ab217(_0x17acc1[_0x14ef('0x14')]['message']);}logger[_0x14ef('0x14')](_0x14ef('0xe'),_0x2dc335,_0x17acc1[_0x14ef('0x14')][_0x14ef('0x15')]);return _0x4175e7(_0x17acc1['error'][_0x14ef('0x15')]);}else{logger[_0x14ef('0x16')](_0x14ef('0xe'),_0x2dc335,_0x14ef('0x11'));_0x4175e7(_0x17acc1['result'][_0x14ef('0x15')]);}})[_0x14ef('0x17')](function(_0x24556b){logger[_0x14ef('0x14')](_0x14ef('0xe'),_0x2dc335,_0x24556b);_0x2ab217(_0x24556b);});});}
\ No newline at end of file
+var _0x3036=['moment','bluebird','randomstring','../../mysqldb','../../config/environment','client','http','request','then','info','AnalyticMetric,\x20%s,\x20%s','request\x20sent','AnalyticMetric,\x20%s,\x20%s,\x20%s','stringify','error','message','result'];(function(_0x12f35c,_0x23fe06){var _0xe7442a=function(_0xd14aa9){while(--_0xd14aa9){_0x12f35c['push'](_0x12f35c['shift']());}};_0xe7442a(++_0x23fe06);}(_0x3036,0x1a9));var _0x6303=function(_0x2edd7e,_0x129fb7){_0x2edd7e=_0x2edd7e-0x0;var _0x2fe318=_0x3036[_0x2edd7e];return _0x2fe318;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x6303('0x0'));var BPromise=require(_0x6303('0x1'));var rs=require(_0x6303('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x6303('0x3'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require(_0x6303('0x4'));var jayson=require('jayson/promise');var client=jayson[_0x6303('0x5')][_0x6303('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x25a0ce,_0x48c936,_0x8a0038){return new BPromise(function(_0x420da8,_0x2e2be8){return client[_0x6303('0x7')](_0x25a0ce,_0x8a0038)[_0x6303('0x8')](function(_0x2684ac){logger[_0x6303('0x9')](_0x6303('0xa'),_0x48c936,_0x6303('0xb'));logger['debug'](_0x6303('0xc'),_0x48c936,_0x6303('0xb'),JSON[_0x6303('0xd')](_0x2684ac));if(_0x2684ac[_0x6303('0xe')]){if(_0x2684ac[_0x6303('0xe')]['code']===0x1f4){logger[_0x6303('0xe')](_0x6303('0xa'),_0x48c936,_0x2684ac[_0x6303('0xe')][_0x6303('0xf')]);return _0x2e2be8(_0x2684ac[_0x6303('0xe')]['message']);}logger['error']('AnalyticMetric,\x20%s,\x20%s',_0x48c936,_0x2684ac[_0x6303('0xe')][_0x6303('0xf')]);return _0x420da8(_0x2684ac[_0x6303('0xe')][_0x6303('0xf')]);}else{logger[_0x6303('0x9')](_0x6303('0xa'),_0x48c936,_0x6303('0xb'));_0x420da8(_0x2684ac[_0x6303('0x10')][_0x6303('0xf')]);}})['catch'](function(_0x50a19c){logger[_0x6303('0xe')](_0x6303('0xa'),_0x48c936,_0x50a19c);_0x2e2be8(_0x50a19c);});});}
\ No newline at end of file
index af6bcbd..89b9250 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x955f=['path','connect-timeout','express','../../components/auth/service','./analyticMetric.controller','isAuthenticated','index','get','show','create','put','/:id','update','delete','exports','multer','util'];(function(_0x9cd4c3,_0x1c9b2c){var _0x4c9025=function(_0x25b3c6){while(--_0x25b3c6){_0x9cd4c3['push'](_0x9cd4c3['shift']());}};_0x4c9025(++_0x1c9b2c);}(_0x955f,0x1eb));var _0xf955=function(_0x5c34c1,_0x14244c){_0x5c34c1=_0x5c34c1-0x0;var _0x2b01d0=_0x955f[_0x5c34c1];return _0x2b01d0;};'use strict';var multer=require(_0xf955('0x0'));var util=require(_0xf955('0x1'));var path=require(_0xf955('0x2'));var timeout=require(_0xf955('0x3'));var express=require(_0xf955('0x4'));var router=express['Router']();var auth=require(_0xf955('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xf955('0x6'));router['get']('/',auth[_0xf955('0x7')](),controller[_0xf955('0x8')]);router[_0xf955('0x9')]('/:id',auth[_0xf955('0x7')](),controller[_0xf955('0xa')]);router['post']('/',auth[_0xf955('0x7')](),controller[_0xf955('0xb')]);router[_0xf955('0xc')](_0xf955('0xd'),auth[_0xf955('0x7')](),controller[_0xf955('0xe')]);router[_0xf955('0xf')]('/:id',auth[_0xf955('0x7')](),controller['destroy']);module[_0xf955('0x10')]=router;
\ No newline at end of file
+var _0x5d0a=['../../components/interaction/service','./analyticMetric.controller','get','isAuthenticated','index','/:id','show','post','create','update','delete','destroy','exports','multer','path','express','Router','../../components/auth/service'];(function(_0x3224a0,_0x1c4109){var _0x169736=function(_0x266cb4){while(--_0x266cb4){_0x3224a0['push'](_0x3224a0['shift']());}};_0x169736(++_0x1c4109);}(_0x5d0a,0x175));var _0xa5d0=function(_0x46647c,_0x463b73){_0x46647c=_0x46647c-0x0;var _0x2a6ffa=_0x5d0a[_0x46647c];return _0x2a6ffa;};'use strict';var multer=require(_0xa5d0('0x0'));var util=require('util');var path=require(_0xa5d0('0x1'));var timeout=require('connect-timeout');var express=require(_0xa5d0('0x2'));var router=express[_0xa5d0('0x3')]();var auth=require(_0xa5d0('0x4'));var interaction=require(_0xa5d0('0x5'));var config=require('../../config/environment');var controller=require(_0xa5d0('0x6'));router[_0xa5d0('0x7')]('/',auth[_0xa5d0('0x8')](),controller[_0xa5d0('0x9')]);router[_0xa5d0('0x7')](_0xa5d0('0xa'),auth[_0xa5d0('0x8')](),controller[_0xa5d0('0xb')]);router[_0xa5d0('0xc')]('/',auth[_0xa5d0('0x8')](),controller[_0xa5d0('0xd')]);router['put'](_0xa5d0('0xa'),auth[_0xa5d0('0x8')](),controller[_0xa5d0('0xe')]);router[_0xa5d0('0xf')](_0xa5d0('0xa'),auth[_0xa5d0('0x8')](),controller[_0xa5d0('0x10')]);module[_0xa5d0('0x11')]=router;
\ No newline at end of file
index 9387fc5..5a37b89 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xce50=['sequelize'];(function(_0x2cba68,_0x18e5bd){var _0x6117fb=function(_0x58996c){while(--_0x58996c){_0x2cba68['push'](_0x2cba68['shift']());}};_0x6117fb(++_0x18e5bd);}(_0xce50,0x124));var _0x0ce5=function(_0x138adb,_0x193fee){_0x138adb=_0x138adb-0x0;var _0x1b27f2=_0xce50[_0x138adb];return _0x1b27f2;};'use strict';var Sequelize=require(_0x0ce5('0x0'));module['exports']={'tree':{'type':Sequelize['TEXT'],'allowNull':![]}};
\ No newline at end of file
+var _0x464e=['exports','TEXT','sequelize'];(function(_0x570c16,_0x1f0794){var _0x218289=function(_0x15063d){while(--_0x15063d){_0x570c16['push'](_0x570c16['shift']());}};_0x218289(++_0x1f0794);}(_0x464e,0x77));var _0xe464=function(_0x401fb4,_0x5f1d19){_0x401fb4=_0x401fb4-0x0;var _0x54165c=_0x464e[_0x401fb4];return _0x54165c;};'use strict';var Sequelize=require(_0xe464('0x0'));module[_0xe464('0x1')]={'tree':{'type':Sequelize[_0xe464('0x2')],'allowNull':![]}};
\ No newline at end of file
index 4dd3cbf..a80b930 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3a8b=['include','findAll','show','params','find','catch','create','update','body','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','Content-Range','apply','reject','save','then','destroy','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','pick','filter','merge','map','type','VIRTUAL','options','AnalyticTreeReport','includeAll'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x3a8b,0x1b3));var _0xb3a8=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0x3a8b[_0x122ef9];return _0x42fba0;};'use strict';var pdf=require(_0xb3a8('0x0'));var emlformat=require(_0xb3a8('0x1'));var rimraf=require(_0xb3a8('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xb3a8('0x3'));var rp=require(_0xb3a8('0x4'));var moment=require(_0xb3a8('0x5'));var BPromise=require(_0xb3a8('0x6'));var Mustache=require(_0xb3a8('0x7'));var util=require(_0xb3a8('0x8'));var path=require(_0xb3a8('0x9'));var sox=require(_0xb3a8('0xa'));var csv=require('to-csv');var ejs=require(_0xb3a8('0xb'));var fs=require('fs');var _=require(_0xb3a8('0xc'));var squel=require(_0xb3a8('0xd'));var crypto=require(_0xb3a8('0xe'));var jsforce=require(_0xb3a8('0xf'));var deskjs=require(_0xb3a8('0x10'));var toCsv=require('to-csv');var querystring=require(_0xb3a8('0x11'));var Papa=require('papaparse');var Redis=require(_0xb3a8('0x12'));var authService=require(_0xb3a8('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xb3a8('0x14'));var logger=require('../../config/logger')(_0xb3a8('0x15'));var utils=require(_0xb3a8('0x16'));var config=require(_0xb3a8('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x45c94e,_0x3c1bb1){_0x3c1bb1=_0x3c1bb1||0xcc;return function(_0x1d3594){if(_0x1d3594){return _0x45c94e[_0xb3a8('0x18')](_0x3c1bb1);}return _0x45c94e['status'](_0x3c1bb1)[_0xb3a8('0x19')]();};}function respondWithResult(_0x1fbdc1,_0x11642d){_0x11642d=_0x11642d||0xc8;return function(_0xd3002){if(_0xd3002){return _0x1fbdc1[_0xb3a8('0x1a')](_0x11642d)[_0xb3a8('0x1b')](_0xd3002);}};}function respondWithFilteredResult(_0x207060,_0x5c06f0){return function(_0x4ccd01){if(_0x4ccd01){var _0x49db46=_0x4ccd01[_0xb3a8('0x1c')],_0x2a2ee5=_0x5c06f0[_0xb3a8('0x1d')],_0x3d4774=_0x5c06f0[_0xb3a8('0x1d')]+_0x5c06f0['limit'],_0x254877;if(_0x3d4774>=_0x49db46){_0x3d4774=_0x49db46;_0x254877=0xc8;}else{_0x254877=0xce;}_0x207060[_0xb3a8('0x1a')](_0x254877);return _0x207060['set'](_0xb3a8('0x1e'),_0x2a2ee5+'-'+_0x3d4774+'/'+_0x49db46)[_0xb3a8('0x1b')](_0x4ccd01);}return null;};}function patchUpdates(_0x459a66){return function(_0x47af76){try{jsonpatch[_0xb3a8('0x1f')](_0x47af76,_0x459a66,!![]);}catch(_0x39aac5){return BPromise[_0xb3a8('0x20')](_0x39aac5);}return _0x47af76[_0xb3a8('0x21')]();};}function saveUpdates(_0x1299be,_0x45154f){return function(_0x36c2f1){if(_0x36c2f1){return _0x36c2f1['update'](_0x1299be)[_0xb3a8('0x22')](function(_0x4b6c69){return _0x4b6c69;});}return null;};}function removeEntity(_0x3431aa,_0x1ee5a5){return function(_0x7a746b){if(_0x7a746b){return _0x7a746b[_0xb3a8('0x23')]()['then'](function(){_0x3431aa['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x2b00dd,_0x31f631){return function(_0x2747d8){if(!_0x2747d8){_0x2b00dd[_0xb3a8('0x18')](0x194);}return _0x2747d8;};}function handleError(_0x7caec9,_0x1cb322){_0x1cb322=_0x1cb322||0x1f4;return function(_0x3dce30){logger['error'](_0x3dce30['stack']);if(_0x3dce30[_0xb3a8('0x24')]){delete _0x3dce30['name'];}_0x7caec9[_0xb3a8('0x1a')](_0x1cb322)[_0xb3a8('0x25')](_0x3dce30);};}exports[_0xb3a8('0x26')]=function(_0x414f08,_0xaaf82c){var _0x1a6789={},_0x391ca8={},_0x3b7a4e={'count':0x0,'rows':[]};var _0x115bd6=db['AnalyticTreeReport'][_0xb3a8('0x27')];_0x391ca8[_0xb3a8('0x28')]=_[_0xb3a8('0x29')](_0x115bd6);_0x391ca8[_0xb3a8('0x2a')]=_['keys'](_0x414f08[_0xb3a8('0x2a')]);_0x391ca8[_0xb3a8('0x2b')]=_[_0xb3a8('0x2c')](_0x391ca8[_0xb3a8('0x28')],_0x391ca8[_0xb3a8('0x2a')]);_0x1a6789[_0xb3a8('0x2d')]=_[_0xb3a8('0x2c')](_0x391ca8['model'],qs[_0xb3a8('0x2e')](_0x414f08[_0xb3a8('0x2a')]['fields']));_0x1a6789[_0xb3a8('0x2d')]=_0x1a6789['attributes'][_0xb3a8('0x2f')]?_0x1a6789[_0xb3a8('0x2d')]:_0x391ca8[_0xb3a8('0x28')];if(!_0x414f08[_0xb3a8('0x2a')][_0xb3a8('0x30')](_0xb3a8('0x31'))){_0x1a6789[_0xb3a8('0x32')]=qs[_0xb3a8('0x32')](_0x414f08['query'][_0xb3a8('0x32')]);_0x1a6789[_0xb3a8('0x1d')]=qs[_0xb3a8('0x1d')](_0x414f08[_0xb3a8('0x2a')][_0xb3a8('0x1d')]);}_0x1a6789['order']=qs[_0xb3a8('0x33')](_0x414f08[_0xb3a8('0x2a')][_0xb3a8('0x33')]);_0x1a6789[_0xb3a8('0x34')]=qs[_0xb3a8('0x2b')](_[_0xb3a8('0x35')](_0x414f08[_0xb3a8('0x2a')],_0x391ca8['filters']));if(_0x414f08[_0xb3a8('0x2a')][_0xb3a8('0x36')]){_0x1a6789[_0xb3a8('0x34')]=_[_0xb3a8('0x37')](_0x1a6789[_0xb3a8('0x34')],{'$or':_[_0xb3a8('0x38')](_0x115bd6,function(_0x53fa49){if(_0x53fa49[_0xb3a8('0x39')]['key']!==_0xb3a8('0x3a')){var _0x53f184={};_0x53f184[_0x53fa49['field']]={'$like':'%'+_0x414f08[_0xb3a8('0x2a')][_0xb3a8('0x36')]+'%'};return _0x53f184;}})});}_0x1a6789=_[_0xb3a8('0x37')]({},_0x1a6789,_0x414f08[_0xb3a8('0x3b')]);var _0x1b62e7={'where':_0x1a6789['where']};return db[_0xb3a8('0x3c')][_0xb3a8('0x1c')](_0x1b62e7)[_0xb3a8('0x22')](function(_0xebd3d4){_0x3b7a4e['count']=_0xebd3d4;if(_0x414f08['query'][_0xb3a8('0x3d')]){_0x1a6789[_0xb3a8('0x3e')]=[{'all':!![]}];}return db[_0xb3a8('0x3c')][_0xb3a8('0x3f')](_0x1a6789);})['then'](function(_0x553225){_0x3b7a4e['rows']=_0x553225;return _0x3b7a4e;})[_0xb3a8('0x22')](respondWithFilteredResult(_0xaaf82c,_0x1a6789))['catch'](handleError(_0xaaf82c,null));};exports[_0xb3a8('0x40')]=function(_0x486f9b,_0x1770f5){var _0x17fe2b={'raw':!![],'where':{'id':_0x486f9b[_0xb3a8('0x41')]['id']}},_0x1d6e20={};_0x1d6e20['model']=_[_0xb3a8('0x29')](db['AnalyticTreeReport'][_0xb3a8('0x27')]);_0x1d6e20['query']=_[_0xb3a8('0x29')](_0x486f9b[_0xb3a8('0x2a')]);_0x1d6e20[_0xb3a8('0x2b')]=_[_0xb3a8('0x2c')](_0x1d6e20['model'],_0x1d6e20[_0xb3a8('0x2a')]);_0x17fe2b['attributes']=_['intersection'](_0x1d6e20['model'],qs[_0xb3a8('0x2e')](_0x486f9b[_0xb3a8('0x2a')][_0xb3a8('0x2e')]));_0x17fe2b['attributes']=_0x17fe2b[_0xb3a8('0x2d')][_0xb3a8('0x2f')]?_0x17fe2b['attributes']:_0x1d6e20['model'];if(_0x486f9b[_0xb3a8('0x2a')][_0xb3a8('0x3d')]){_0x17fe2b[_0xb3a8('0x3e')]=[{'all':!![]}];}_0x17fe2b=_[_0xb3a8('0x37')]({},_0x17fe2b,_0x486f9b[_0xb3a8('0x3b')]);return db[_0xb3a8('0x3c')][_0xb3a8('0x42')](_0x17fe2b)[_0xb3a8('0x22')](handleEntityNotFound(_0x1770f5,null))[_0xb3a8('0x22')](respondWithResult(_0x1770f5,null))[_0xb3a8('0x43')](handleError(_0x1770f5,null));};exports[_0xb3a8('0x44')]=function(_0x5ca02a,_0x4b14a6){return db['AnalyticTreeReport'][_0xb3a8('0x44')](_0x5ca02a['body'],{})[_0xb3a8('0x22')](respondWithResult(_0x4b14a6,0xc9))['catch'](handleError(_0x4b14a6,null));};exports[_0xb3a8('0x45')]=function(_0x43b4d1,_0x39c369){if(_0x43b4d1[_0xb3a8('0x46')]['id']){delete _0x43b4d1[_0xb3a8('0x46')]['id'];}return db[_0xb3a8('0x3c')][_0xb3a8('0x42')]({'where':{'id':_0x43b4d1[_0xb3a8('0x41')]['id']}})[_0xb3a8('0x22')](handleEntityNotFound(_0x39c369,null))[_0xb3a8('0x22')](saveUpdates(_0x43b4d1[_0xb3a8('0x46')],null))['then'](respondWithResult(_0x39c369,null))['catch'](handleError(_0x39c369,null));};exports[_0xb3a8('0x23')]=function(_0x359b28,_0x2b7607){return db['AnalyticTreeReport']['find']({'where':{'id':_0x359b28[_0xb3a8('0x41')]['id']}})[_0xb3a8('0x22')](handleEntityNotFound(_0x2b7607,null))[_0xb3a8('0x22')](removeEntity(_0x2b7607,null))[_0xb3a8('0x43')](handleError(_0x2b7607,null));};
\ No newline at end of file
+var _0x5933=['crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','set','Content-Range','apply','reject','save','update','then','destroy','sendStatus','error','name','send','index','AnalyticTreeReport','rawAttributes','keys','query','filters','intersection','fields','attributes','model','nolimit','limit','offset','sort','where','pick','filter','merge','map','type','key','includeAll','catch','show','params','length','include','options','create','body','find','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','util','path','sox','to-csv','ejs','lodash','squel'];(function(_0x13044d,_0x2220e9){var _0x511c9a=function(_0x2384ad){while(--_0x2384ad){_0x13044d['push'](_0x13044d['shift']());}};_0x511c9a(++_0x2220e9);}(_0x5933,0x113));var _0x3593=function(_0x967518,_0x3330a5){_0x967518=_0x967518-0x0;var _0x481f36=_0x5933[_0x967518];return _0x481f36;};'use strict';var pdf=require(_0x3593('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x3593('0x1'));var zipdir=require(_0x3593('0x2'));var jsonpatch=require(_0x3593('0x3'));var rp=require(_0x3593('0x4'));var moment=require(_0x3593('0x5'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x3593('0x6'));var path=require(_0x3593('0x7'));var sox=require(_0x3593('0x8'));var csv=require(_0x3593('0x9'));var ejs=require(_0x3593('0xa'));var fs=require('fs');var _=require(_0x3593('0xb'));var squel=require(_0x3593('0xc'));var crypto=require(_0x3593('0xd'));var jsforce=require(_0x3593('0xe'));var deskjs=require(_0x3593('0xf'));var toCsv=require(_0x3593('0x9'));var querystring=require('querystring');var Papa=require(_0x3593('0x10'));var Redis=require('ioredis');var authService=require(_0x3593('0x11'));var qs=require(_0x3593('0x12'));var hardwareService=require(_0x3593('0x13'));var logger=require(_0x3593('0x14'))(_0x3593('0x15'));var utils=require(_0x3593('0x16'));var config=require(_0x3593('0x17'));var db=require(_0x3593('0x18'))['db'];function respondWithStatusCode(_0x303ff1,_0x25e598){_0x25e598=_0x25e598||0xcc;return function(_0x4f620f){if(_0x4f620f){return _0x303ff1['sendStatus'](_0x25e598);}return _0x303ff1[_0x3593('0x19')](_0x25e598)[_0x3593('0x1a')]();};}function respondWithResult(_0x17f3ad,_0x2a9d8c){_0x2a9d8c=_0x2a9d8c||0xc8;return function(_0x41bcbf){if(_0x41bcbf){return _0x17f3ad[_0x3593('0x19')](_0x2a9d8c)[_0x3593('0x1b')](_0x41bcbf);}};}function respondWithFilteredResult(_0xff96a5,_0x2fd94){return function(_0x560023){if(_0x560023){var _0x4ee3f9=_0x560023[_0x3593('0x1c')],_0x21b305=_0x2fd94['offset'],_0x500512=_0x2fd94['offset']+_0x2fd94['limit'],_0x10ea7f;if(_0x500512>=_0x4ee3f9){_0x500512=_0x4ee3f9;_0x10ea7f=0xc8;}else{_0x10ea7f=0xce;}_0xff96a5[_0x3593('0x19')](_0x10ea7f);return _0xff96a5[_0x3593('0x1d')](_0x3593('0x1e'),_0x21b305+'-'+_0x500512+'/'+_0x4ee3f9)[_0x3593('0x1b')](_0x560023);}return null;};}function patchUpdates(_0x3b3141){return function(_0x2e3d8f){try{jsonpatch[_0x3593('0x1f')](_0x2e3d8f,_0x3b3141,!![]);}catch(_0x3277dd){return BPromise[_0x3593('0x20')](_0x3277dd);}return _0x2e3d8f[_0x3593('0x21')]();};}function saveUpdates(_0x2d1b49,_0x10431e){return function(_0x4b5ddd){if(_0x4b5ddd){return _0x4b5ddd[_0x3593('0x22')](_0x2d1b49)[_0x3593('0x23')](function(_0x5b0b05){return _0x5b0b05;});}return null;};}function removeEntity(_0x33a68d,_0x234a35){return function(_0x18e04e){if(_0x18e04e){return _0x18e04e[_0x3593('0x24')]()[_0x3593('0x23')](function(){_0x33a68d[_0x3593('0x19')](0xcc)[_0x3593('0x1a')]();});}};}function handleEntityNotFound(_0x462226,_0x166615){return function(_0x4a980d){if(!_0x4a980d){_0x462226[_0x3593('0x25')](0x194);}return _0x4a980d;};}function handleError(_0x255a99,_0x2d0a44){_0x2d0a44=_0x2d0a44||0x1f4;return function(_0x17d7c4){logger[_0x3593('0x26')](_0x17d7c4['stack']);if(_0x17d7c4[_0x3593('0x27')]){delete _0x17d7c4[_0x3593('0x27')];}_0x255a99[_0x3593('0x19')](_0x2d0a44)[_0x3593('0x28')](_0x17d7c4);};}exports[_0x3593('0x29')]=function(_0x53e82b,_0x327228){var _0x28c44b={},_0x14dada={},_0x188218={'count':0x0,'rows':[]};var _0x1848a7=db[_0x3593('0x2a')][_0x3593('0x2b')];_0x14dada['model']=_[_0x3593('0x2c')](_0x1848a7);_0x14dada['query']=_[_0x3593('0x2c')](_0x53e82b[_0x3593('0x2d')]);_0x14dada[_0x3593('0x2e')]=_[_0x3593('0x2f')](_0x14dada['model'],_0x14dada[_0x3593('0x2d')]);_0x28c44b['attributes']=_[_0x3593('0x2f')](_0x14dada['model'],qs[_0x3593('0x30')](_0x53e82b['query']['fields']));_0x28c44b[_0x3593('0x31')]=_0x28c44b[_0x3593('0x31')]['length']?_0x28c44b[_0x3593('0x31')]:_0x14dada[_0x3593('0x32')];if(!_0x53e82b['query']['hasOwnProperty'](_0x3593('0x33'))){_0x28c44b[_0x3593('0x34')]=qs[_0x3593('0x34')](_0x53e82b[_0x3593('0x2d')][_0x3593('0x34')]);_0x28c44b['offset']=qs['offset'](_0x53e82b['query'][_0x3593('0x35')]);}_0x28c44b['order']=qs[_0x3593('0x36')](_0x53e82b['query'][_0x3593('0x36')]);_0x28c44b[_0x3593('0x37')]=qs['filters'](_[_0x3593('0x38')](_0x53e82b[_0x3593('0x2d')],_0x14dada[_0x3593('0x2e')]));if(_0x53e82b['query'][_0x3593('0x39')]){_0x28c44b[_0x3593('0x37')]=_[_0x3593('0x3a')](_0x28c44b[_0x3593('0x37')],{'$or':_[_0x3593('0x3b')](_0x1848a7,function(_0x581352){if(_0x581352[_0x3593('0x3c')][_0x3593('0x3d')]!=='VIRTUAL'){var _0x2f64fe={};_0x2f64fe[_0x581352['field']]={'$like':'%'+_0x53e82b[_0x3593('0x2d')][_0x3593('0x39')]+'%'};return _0x2f64fe;}})});}_0x28c44b=_[_0x3593('0x3a')]({},_0x28c44b,_0x53e82b['options']);var _0x28efcb={'where':_0x28c44b['where']};return db[_0x3593('0x2a')][_0x3593('0x1c')](_0x28efcb)[_0x3593('0x23')](function(_0x4af8dd){_0x188218[_0x3593('0x1c')]=_0x4af8dd;if(_0x53e82b['query'][_0x3593('0x3e')]){_0x28c44b['include']=[{'all':!![]}];}return db[_0x3593('0x2a')]['findAll'](_0x28c44b);})[_0x3593('0x23')](function(_0x29fec8){_0x188218['rows']=_0x29fec8;return _0x188218;})[_0x3593('0x23')](respondWithFilteredResult(_0x327228,_0x28c44b))[_0x3593('0x3f')](handleError(_0x327228,null));};exports[_0x3593('0x40')]=function(_0x46d169,_0x513fde){var _0x3b36ae={'raw':!![],'where':{'id':_0x46d169[_0x3593('0x41')]['id']}},_0x2a250b={};_0x2a250b[_0x3593('0x32')]=_[_0x3593('0x2c')](db['AnalyticTreeReport'][_0x3593('0x2b')]);_0x2a250b[_0x3593('0x2d')]=_[_0x3593('0x2c')](_0x46d169[_0x3593('0x2d')]);_0x2a250b[_0x3593('0x2e')]=_[_0x3593('0x2f')](_0x2a250b['model'],_0x2a250b[_0x3593('0x2d')]);_0x3b36ae[_0x3593('0x31')]=_[_0x3593('0x2f')](_0x2a250b[_0x3593('0x32')],qs[_0x3593('0x30')](_0x46d169['query'][_0x3593('0x30')]));_0x3b36ae[_0x3593('0x31')]=_0x3b36ae[_0x3593('0x31')][_0x3593('0x42')]?_0x3b36ae[_0x3593('0x31')]:_0x2a250b[_0x3593('0x32')];if(_0x46d169['query'][_0x3593('0x3e')]){_0x3b36ae[_0x3593('0x43')]=[{'all':!![]}];}_0x3b36ae=_[_0x3593('0x3a')]({},_0x3b36ae,_0x46d169[_0x3593('0x44')]);return db['AnalyticTreeReport']['find'](_0x3b36ae)[_0x3593('0x23')](handleEntityNotFound(_0x513fde,null))[_0x3593('0x23')](respondWithResult(_0x513fde,null))[_0x3593('0x3f')](handleError(_0x513fde,null));};exports[_0x3593('0x45')]=function(_0x5151f2,_0x51d5be){return db['AnalyticTreeReport'][_0x3593('0x45')](_0x5151f2[_0x3593('0x46')],{})['then'](respondWithResult(_0x51d5be,0xc9))[_0x3593('0x3f')](handleError(_0x51d5be,null));};exports[_0x3593('0x22')]=function(_0x4b2de3,_0x270197){if(_0x4b2de3['body']['id']){delete _0x4b2de3['body']['id'];}return db[_0x3593('0x2a')][_0x3593('0x47')]({'where':{'id':_0x4b2de3['params']['id']}})['then'](handleEntityNotFound(_0x270197,null))['then'](saveUpdates(_0x4b2de3[_0x3593('0x46')],null))[_0x3593('0x23')](respondWithResult(_0x270197,null))[_0x3593('0x3f')](handleError(_0x270197,null));};exports[_0x3593('0x24')]=function(_0x5841ce,_0x456915){return db[_0x3593('0x2a')]['find']({'where':{'id':_0x5841ce[_0x3593('0x41')]['id']}})[_0x3593('0x23')](handleEntityNotFound(_0x456915,null))[_0x3593('0x23')](removeEntity(_0x456915,null))[_0x3593('0x3f')](handleError(_0x456915,null));};
\ No newline at end of file
index 1853907..8d76cd4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf398=['lodash','util','api','moment','bluebird','request-promise','rimraf','../../config/environment','./analyticTreeReport.attributes','exports','define'];(function(_0x1828d4,_0x538df4){var _0x3665c8=function(_0x5f03fe){while(--_0x5f03fe){_0x1828d4['push'](_0x1828d4['shift']());}};_0x3665c8(++_0x538df4);}(_0xf398,0x181));var _0x8f39=function(_0x339a5f,_0x29fdad){_0x339a5f=_0x339a5f-0x0;var _0x234fb0=_0xf398[_0x339a5f];return _0x234fb0;};'use strict';var _=require(_0x8f39('0x0'));var util=require(_0x8f39('0x1'));var logger=require('../../config/logger')(_0x8f39('0x2'));var moment=require(_0x8f39('0x3'));var BPromise=require(_0x8f39('0x4'));var rp=require(_0x8f39('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x8f39('0x6'));var config=require(_0x8f39('0x7'));var attributes=require(_0x8f39('0x8'));module[_0x8f39('0x9')]=function(_0x1ffbf2,_0x4fc5b3){return _0x1ffbf2[_0x8f39('0xa')]('AnalyticTreeReport',attributes,{'tableName':'analytics_report_trees','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xce68=['moment','bluebird','request-promise','path','rimraf','exports','define','lodash','util','../../config/logger'];(function(_0x1e1f6e,_0x5d48a4){var _0x5eebc4=function(_0x184444){while(--_0x184444){_0x1e1f6e['push'](_0x1e1f6e['shift']());}};_0x5eebc4(++_0x5d48a4);}(_0xce68,0x179));var _0x8ce6=function(_0x4c104e,_0x2d8398){_0x4c104e=_0x4c104e-0x0;var _0x31531f=_0xce68[_0x4c104e];return _0x31531f;};'use strict';var _=require(_0x8ce6('0x0'));var util=require(_0x8ce6('0x1'));var logger=require(_0x8ce6('0x2'))('api');var moment=require(_0x8ce6('0x3'));var BPromise=require(_0x8ce6('0x4'));var rp=require(_0x8ce6('0x5'));var fs=require('fs');var path=require(_0x8ce6('0x6'));var rimraf=require(_0x8ce6('0x7'));var config=require('../../config/environment');var attributes=require('./analyticTreeReport.attributes');module[_0x8ce6('0x8')]=function(_0x5d459d,_0x4b1e83){return _0x5d459d[_0x8ce6('0x9')]('AnalyticTreeReport',attributes,{'tableName':'analytics_report_trees','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 35f09eb..28148c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x770c=['../../config/logger','rpc','jayson/promise','client','http','AnalyticTreeReport,\x20%s,\x20%s','request\x20sent','AnalyticTreeReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils'];(function(_0x15c375,_0x449bcf){var _0xe3d53=function(_0x165294){while(--_0x165294){_0x15c375['push'](_0x15c375['shift']());}};_0xe3d53(++_0x449bcf);}(_0x770c,0x159));var _0xc770=function(_0x2b2c53,_0x4bcf9b){_0x2b2c53=_0x2b2c53-0x0;var _0x311ec2=_0x770c[_0x2b2c53];return _0x311ec2;};'use strict';var _=require(_0xc770('0x0'));var util=require(_0xc770('0x1'));var moment=require('moment');var BPromise=require(_0xc770('0x2'));var rs=require(_0xc770('0x3'));var fs=require('fs');var Redis=require(_0xc770('0x4'));var db=require(_0xc770('0x5'))['db'];var utils=require(_0xc770('0x6'));var logger=require(_0xc770('0x7'))(_0xc770('0x8'));var config=require('../../config/environment');var jayson=require(_0xc770('0x9'));var client=jayson[_0xc770('0xa')][_0xc770('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x5ba210,_0x2648f4,_0x466431){return new BPromise(function(_0x490aa5,_0x3c0252){return client['request'](_0x5ba210,_0x466431)['then'](function(_0x486204){logger['info'](_0xc770('0xc'),_0x2648f4,_0xc770('0xd'));logger['debug'](_0xc770('0xe'),_0x2648f4,_0xc770('0xd'),JSON[_0xc770('0xf')](_0x486204));if(_0x486204[_0xc770('0x10')]){if(_0x486204[_0xc770('0x10')][_0xc770('0x11')]===0x1f4){logger[_0xc770('0x10')](_0xc770('0xc'),_0x2648f4,_0x486204[_0xc770('0x10')]['message']);return _0x3c0252(_0x486204['error']['message']);}logger[_0xc770('0x10')](_0xc770('0xc'),_0x2648f4,_0x486204[_0xc770('0x10')]['message']);return _0x490aa5(_0x486204['error'][_0xc770('0x12')]);}else{logger[_0xc770('0x13')]('AnalyticTreeReport,\x20%s,\x20%s',_0x2648f4,_0xc770('0xd'));_0x490aa5(_0x486204[_0xc770('0x14')][_0xc770('0x12')]);}})[_0xc770('0x15')](function(_0x32a41b){logger[_0xc770('0x10')](_0xc770('0xc'),_0x2648f4,_0x32a41b);_0x3c0252(_0x32a41b);});});}
\ No newline at end of file
+var _0x7c98=['http','request','info','request\x20sent','AnalyticTreeReport,\x20%s,\x20%s,\x20%s','stringify','error','code','AnalyticTreeReport,\x20%s,\x20%s','message','result','catch','lodash','util','moment','randomstring','../../mysqldb','rpc','jayson/promise','client'];(function(_0x5cb97e,_0x132a39){var _0x1714b4=function(_0x384210){while(--_0x384210){_0x5cb97e['push'](_0x5cb97e['shift']());}};_0x1714b4(++_0x132a39);}(_0x7c98,0x98));var _0x87c9=function(_0x107f10,_0x5529f2){_0x107f10=_0x107f10-0x0;var _0x811cab=_0x7c98[_0x107f10];return _0x811cab;};'use strict';var _=require(_0x87c9('0x0'));var util=require(_0x87c9('0x1'));var moment=require(_0x87c9('0x2'));var BPromise=require('bluebird');var rs=require(_0x87c9('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x87c9('0x4'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x87c9('0x5'));var config=require('../../config/environment');var jayson=require(_0x87c9('0x6'));var client=jayson[_0x87c9('0x7')][_0x87c9('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x2d5f1a,_0x54a150,_0x1e66ed){return new BPromise(function(_0x1c0103,_0x4ad01a){return client[_0x87c9('0x9')](_0x2d5f1a,_0x1e66ed)['then'](function(_0x54a2ca){logger[_0x87c9('0xa')]('AnalyticTreeReport,\x20%s,\x20%s',_0x54a150,_0x87c9('0xb'));logger['debug'](_0x87c9('0xc'),_0x54a150,_0x87c9('0xb'),JSON[_0x87c9('0xd')](_0x54a2ca));if(_0x54a2ca['error']){if(_0x54a2ca[_0x87c9('0xe')][_0x87c9('0xf')]===0x1f4){logger[_0x87c9('0xe')](_0x87c9('0x10'),_0x54a150,_0x54a2ca['error'][_0x87c9('0x11')]);return _0x4ad01a(_0x54a2ca['error'][_0x87c9('0x11')]);}logger[_0x87c9('0xe')](_0x87c9('0x10'),_0x54a150,_0x54a2ca[_0x87c9('0xe')][_0x87c9('0x11')]);return _0x1c0103(_0x54a2ca['error'][_0x87c9('0x11')]);}else{logger[_0x87c9('0xa')](_0x87c9('0x10'),_0x54a150,_0x87c9('0xb'));_0x1c0103(_0x54a2ca[_0x87c9('0x12')]['message']);}})[_0x87c9('0x13')](function(_0x2073ab){logger[_0x87c9('0xe')](_0x87c9('0x10'),_0x54a150,_0x2073ab);_0x4ad01a(_0x2073ab);});});}
\ No newline at end of file
index 2c32086..7924863 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaca1=['exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','/:id','isAuthenticated','show','post','create','put','update','delete','destroy'];(function(_0x5d240d,_0x22e0e0){var _0x59701e=function(_0x47df1d){while(--_0x47df1d){_0x5d240d['push'](_0x5d240d['shift']());}};_0x59701e(++_0x22e0e0);}(_0xaca1,0xa1));var _0x1aca=function(_0x400b1b,_0x2608f2){_0x400b1b=_0x400b1b-0x0;var _0x231733=_0xaca1[_0x400b1b];return _0x231733;};'use strict';var multer=require(_0x1aca('0x0'));var util=require(_0x1aca('0x1'));var path=require(_0x1aca('0x2'));var timeout=require('connect-timeout');var express=require(_0x1aca('0x3'));var router=express[_0x1aca('0x4')]();var auth=require(_0x1aca('0x5'));var interaction=require(_0x1aca('0x6'));var config=require(_0x1aca('0x7'));var controller=require('./analyticTreeReport.controller');router[_0x1aca('0x8')]('/',auth['isAuthenticated'](),controller[_0x1aca('0x9')]);router[_0x1aca('0x8')](_0x1aca('0xa'),auth[_0x1aca('0xb')](),controller[_0x1aca('0xc')]);router[_0x1aca('0xd')]('/',auth[_0x1aca('0xb')](),controller[_0x1aca('0xe')]);router[_0x1aca('0xf')](_0x1aca('0xa'),auth['isAuthenticated'](),controller[_0x1aca('0x10')]);router[_0x1aca('0x11')]('/:id',auth['isAuthenticated'](),controller[_0x1aca('0x12')]);module[_0x1aca('0x13')]=router;
\ No newline at end of file
+var _0x0909=['../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','show','post','create','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service'];(function(_0x374785,_0x4f71b8){var _0x572c40=function(_0x1cf7b0){while(--_0x1cf7b0){_0x374785['push'](_0x374785['shift']());}};_0x572c40(++_0x4f71b8);}(_0x0909,0x139));var _0x9090=function(_0x3b9398,_0x5c54c7){_0x3b9398=_0x3b9398-0x0;var _0x44932a=_0x0909[_0x3b9398];return _0x44932a;};'use strict';var multer=require(_0x9090('0x0'));var util=require(_0x9090('0x1'));var path=require(_0x9090('0x2'));var timeout=require(_0x9090('0x3'));var express=require(_0x9090('0x4'));var router=express[_0x9090('0x5')]();var auth=require(_0x9090('0x6'));var interaction=require(_0x9090('0x7'));var config=require(_0x9090('0x8'));var controller=require('./analyticTreeReport.controller');router[_0x9090('0x9')]('/',auth[_0x9090('0xa')](),controller[_0x9090('0xb')]);router[_0x9090('0x9')](_0x9090('0xc'),auth[_0x9090('0xa')](),controller[_0x9090('0xd')]);router[_0x9090('0xe')]('/',auth[_0x9090('0xa')](),controller[_0x9090('0xf')]);router['put'](_0x9090('0xc'),auth[_0x9090('0xa')](),controller[_0x9090('0x10')]);router[_0x9090('0x11')](_0x9090('0xc'),auth[_0x9090('0xa')](),controller[_0x9090('0x12')]);module[_0x9090('0x13')]=router;
\ No newline at end of file
index 3c92616..5b520e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5397=['STRING','sequelize','exports'];(function(_0x3797b1,_0x110134){var _0x5092d4=function(_0x1805fd){while(--_0x1805fd){_0x3797b1['push'](_0x3797b1['shift']());}};_0x5092d4(++_0x110134);}(_0x5397,0xe2));var _0x7539=function(_0x39642a,_0xf1650e){_0x39642a=_0x39642a-0x0;var _0x2ac68b=_0x5397[_0x39642a];return _0x2ac68b;};'use strict';var Sequelize=require(_0x7539('0x0'));module[_0x7539('0x1')]={'name':{'type':Sequelize['STRING']},'basename':{'type':Sequelize[_0x7539('0x2')]},'type':{'type':Sequelize[_0x7539('0x2')]}};
\ No newline at end of file
+var _0xb325=['exports','STRING'];(function(_0xee1228,_0x2df586){var _0x210f17=function(_0x5b4d31){while(--_0x5b4d31){_0xee1228['push'](_0xee1228['shift']());}};_0x210f17(++_0x2df586);}(_0xb325,0x19c));var _0x5b32=function(_0x565367,_0x34a99d){_0x565367=_0x565367-0x0;var _0x19bf43=_0xb325[_0x565367];return _0x19bf43;};'use strict';var Sequelize=require('sequelize');module[_0x5b32('0x0')]={'name':{'type':Sequelize[_0x5b32('0x1')]},'basename':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0x5b32('0x1')]}};
\ No newline at end of file
index 3bc6992..e920e1b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2455=['stack','name','send','index','Attachment','model','keys','query','intersection','fields','attributes','length','hasOwnProperty','order','sort','filter','merge','where','map','type','key','VIRTUAL','field','options','rows','catch','show','params','rawAttributes','filters','includeAll','include','find','update','body','create','file','originalname','filename','download','findOne','server/files/attachments/','html-pdf','eml-format','rimraf','zip-dir','moment','bluebird','util','path','sox','to-csv','squel','crypto','jsforce','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','Content-Range','apply','save','then','destroy'];(function(_0x47e7cb,_0x4c1b8d){var _0x2a8874=function(_0x36498f){while(--_0x36498f){_0x47e7cb['push'](_0x47e7cb['shift']());}};_0x2a8874(++_0x4c1b8d);}(_0x2455,0x19c));var _0x5245=function(_0x51ad4f,_0x45d87d){_0x51ad4f=_0x51ad4f-0x0;var _0x592932=_0x2455[_0x51ad4f];return _0x592932;};'use strict';var pdf=require(_0x5245('0x0'));var emlformat=require(_0x5245('0x1'));var rimraf=require(_0x5245('0x2'));var zipdir=require(_0x5245('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x5245('0x4'));var BPromise=require(_0x5245('0x5'));var Mustache=require('mustache');var util=require(_0x5245('0x6'));var path=require(_0x5245('0x7'));var sox=require(_0x5245('0x8'));var csv=require(_0x5245('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x5245('0xa'));var crypto=require(_0x5245('0xb'));var jsforce=require(_0x5245('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x5245('0x9'));var querystring=require('querystring');var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x5245('0xd'));var qs=require(_0x5245('0xe'));var hardwareService=require(_0x5245('0xf'));var logger=require(_0x5245('0x10'))(_0x5245('0x11'));var utils=require(_0x5245('0x12'));var config=require(_0x5245('0x13'));var db=require(_0x5245('0x14'))['db'];function respondWithStatusCode(_0x28967b,_0x37b117){_0x37b117=_0x37b117||0xcc;return function(_0x2c2df3){if(_0x2c2df3){return _0x28967b[_0x5245('0x15')](_0x37b117);}return _0x28967b[_0x5245('0x16')](_0x37b117)[_0x5245('0x17')]();};}function respondWithResult(_0x2909a6,_0x5abe11){_0x5abe11=_0x5abe11||0xc8;return function(_0x349bb4){if(_0x349bb4){return _0x2909a6[_0x5245('0x16')](_0x5abe11)['json'](_0x349bb4);}};}function respondWithFilteredResult(_0x335591,_0x464bc3){return function(_0x114619){if(_0x114619){var _0x4eeaa4=_0x114619[_0x5245('0x18')],_0x3fb677=_0x464bc3[_0x5245('0x19')],_0x4758f2=_0x464bc3[_0x5245('0x19')]+_0x464bc3[_0x5245('0x1a')],_0xb50465;if(_0x4758f2>=_0x4eeaa4){_0x4758f2=_0x4eeaa4;_0xb50465=0xc8;}else{_0xb50465=0xce;}_0x335591[_0x5245('0x16')](_0xb50465);return _0x335591['set'](_0x5245('0x1b'),_0x3fb677+'-'+_0x4758f2+'/'+_0x4eeaa4)['json'](_0x114619);}return null;};}function patchUpdates(_0x318601){return function(_0x573d25){try{jsonpatch[_0x5245('0x1c')](_0x573d25,_0x318601,!![]);}catch(_0x3e3c4f){return BPromise['reject'](_0x3e3c4f);}return _0x573d25[_0x5245('0x1d')]();};}function saveUpdates(_0x15c45d,_0x287f2c){return function(_0x27ab43){if(_0x27ab43){return _0x27ab43['update'](_0x15c45d)[_0x5245('0x1e')](function(_0x4c3b5b){return _0x4c3b5b;});}return null;};}function removeEntity(_0x48d8c7,_0x36ca2d){return function(_0x3d2fdc){if(_0x3d2fdc){return _0x3d2fdc[_0x5245('0x1f')]()['then'](function(){_0x48d8c7[_0x5245('0x16')](0xcc)[_0x5245('0x17')]();});}};}function handleEntityNotFound(_0x54954a,_0x21eab5){return function(_0x624d5e){if(!_0x624d5e){_0x54954a[_0x5245('0x15')](0x194);}return _0x624d5e;};}function handleError(_0x46111d,_0x521f93){_0x521f93=_0x521f93||0x1f4;return function(_0x34e673){logger['error'](_0x34e673[_0x5245('0x20')]);if(_0x34e673[_0x5245('0x21')]){delete _0x34e673['name'];}_0x46111d[_0x5245('0x16')](_0x521f93)[_0x5245('0x22')](_0x34e673);};}exports[_0x5245('0x23')]=function(_0x12d51e,_0x3bb57d){var _0x3c1525={},_0x1ec74e={},_0x51253e={'count':0x0,'rows':[]};var _0x1ffef1=db[_0x5245('0x24')]['rawAttributes'];_0x1ec74e[_0x5245('0x25')]=_[_0x5245('0x26')](_0x1ffef1);_0x1ec74e['query']=_['keys'](_0x12d51e[_0x5245('0x27')]);_0x1ec74e['filters']=_[_0x5245('0x28')](_0x1ec74e[_0x5245('0x25')],_0x1ec74e[_0x5245('0x27')]);_0x3c1525['attributes']=_['intersection'](_0x1ec74e[_0x5245('0x25')],qs[_0x5245('0x29')](_0x12d51e[_0x5245('0x27')]['fields']));_0x3c1525['attributes']=_0x3c1525[_0x5245('0x2a')][_0x5245('0x2b')]?_0x3c1525[_0x5245('0x2a')]:_0x1ec74e[_0x5245('0x25')];if(!_0x12d51e[_0x5245('0x27')][_0x5245('0x2c')]('nolimit')){_0x3c1525[_0x5245('0x1a')]=qs['limit'](_0x12d51e[_0x5245('0x27')][_0x5245('0x1a')]);_0x3c1525[_0x5245('0x19')]=qs[_0x5245('0x19')](_0x12d51e[_0x5245('0x27')][_0x5245('0x19')]);}_0x3c1525[_0x5245('0x2d')]=qs['sort'](_0x12d51e[_0x5245('0x27')][_0x5245('0x2e')]);_0x3c1525['where']=qs['filters'](_['pick'](_0x12d51e['query'],_0x1ec74e['filters']));if(_0x12d51e[_0x5245('0x27')][_0x5245('0x2f')]){_0x3c1525['where']=_[_0x5245('0x30')](_0x3c1525[_0x5245('0x31')],{'$or':_[_0x5245('0x32')](_0x1ffef1,function(_0x546c3c){if(_0x546c3c[_0x5245('0x33')][_0x5245('0x34')]!==_0x5245('0x35')){var _0x3aac6a={};_0x3aac6a[_0x546c3c[_0x5245('0x36')]]={'$like':'%'+_0x12d51e[_0x5245('0x27')][_0x5245('0x2f')]+'%'};return _0x3aac6a;}})});}_0x3c1525=_[_0x5245('0x30')]({},_0x3c1525,_0x12d51e[_0x5245('0x37')]);var _0x1d9b62={'where':_0x3c1525['where']};return db[_0x5245('0x24')][_0x5245('0x18')](_0x1d9b62)['then'](function(_0x223399){_0x51253e[_0x5245('0x18')]=_0x223399;if(_0x12d51e[_0x5245('0x27')]['includeAll']){_0x3c1525['include']=[{'all':!![]}];}return db[_0x5245('0x24')]['findAll'](_0x3c1525);})[_0x5245('0x1e')](function(_0x309cdd){_0x51253e[_0x5245('0x38')]=_0x309cdd;return _0x51253e;})[_0x5245('0x1e')](respondWithFilteredResult(_0x3bb57d,_0x3c1525))[_0x5245('0x39')](handleError(_0x3bb57d,null));};exports[_0x5245('0x3a')]=function(_0x158de7,_0xca9c73){var _0x5e56a9={'raw':!![],'where':{'id':_0x158de7[_0x5245('0x3b')]['id']}},_0x288808={};_0x288808['model']=_[_0x5245('0x26')](db['Attachment'][_0x5245('0x3c')]);_0x288808[_0x5245('0x27')]=_['keys'](_0x158de7[_0x5245('0x27')]);_0x288808[_0x5245('0x3d')]=_['intersection'](_0x288808[_0x5245('0x25')],_0x288808[_0x5245('0x27')]);_0x5e56a9[_0x5245('0x2a')]=_[_0x5245('0x28')](_0x288808['model'],qs['fields'](_0x158de7[_0x5245('0x27')][_0x5245('0x29')]));_0x5e56a9[_0x5245('0x2a')]=_0x5e56a9[_0x5245('0x2a')][_0x5245('0x2b')]?_0x5e56a9[_0x5245('0x2a')]:_0x288808[_0x5245('0x25')];if(_0x158de7[_0x5245('0x27')][_0x5245('0x3e')]){_0x5e56a9[_0x5245('0x3f')]=[{'all':!![]}];}_0x5e56a9=_[_0x5245('0x30')]({},_0x5e56a9,_0x158de7[_0x5245('0x37')]);return db[_0x5245('0x24')][_0x5245('0x40')](_0x5e56a9)[_0x5245('0x1e')](handleEntityNotFound(_0xca9c73,null))[_0x5245('0x1e')](respondWithResult(_0xca9c73,null))[_0x5245('0x39')](handleError(_0xca9c73,null));};exports[_0x5245('0x41')]=function(_0x2ad050,_0x10ba9c){if(_0x2ad050[_0x5245('0x42')]['id']){delete _0x2ad050[_0x5245('0x42')]['id'];}return db[_0x5245('0x24')][_0x5245('0x40')]({'where':{'id':_0x2ad050['params']['id']}})[_0x5245('0x1e')](handleEntityNotFound(_0x10ba9c,null))['then'](saveUpdates(_0x2ad050[_0x5245('0x42')],null))[_0x5245('0x1e')](respondWithResult(_0x10ba9c,null))[_0x5245('0x39')](handleError(_0x10ba9c,null));};exports[_0x5245('0x1f')]=function(_0x2f14c7,_0x53d0aa){return db[_0x5245('0x24')]['find']({'where':{'id':_0x2f14c7[_0x5245('0x3b')]['id']}})[_0x5245('0x1e')](handleEntityNotFound(_0x53d0aa,null))['then'](removeEntity(_0x53d0aa,null))[_0x5245('0x39')](handleError(_0x53d0aa,null));};exports[_0x5245('0x43')]=function(_0x180a1f,_0x4892ec,_0x42b51e){_0x180a1f[_0x5245('0x42')][_0x5245('0x21')]=_0x180a1f[_0x5245('0x44')][_0x5245('0x45')];_0x180a1f['body']['basename']=_0x180a1f[_0x5245('0x44')][_0x5245('0x46')];_0x180a1f[_0x5245('0x42')]['type']=_0x180a1f[_0x5245('0x44')]['mimetype'];return db[_0x5245('0x24')][_0x5245('0x43')](_0x180a1f[_0x5245('0x42')])[_0x5245('0x1e')](respondWithResult(_0x4892ec,0xc9))[_0x5245('0x39')](handleError(_0x4892ec,null));};exports[_0x5245('0x47')]=function(_0x2e6ecd,_0x389f56,_0x3daee1){return db[_0x5245('0x24')][_0x5245('0x48')]({'where':{'id':_0x2e6ecd[_0x5245('0x3b')]['id']},'raw':!![]})[_0x5245('0x1e')](handleEntityNotFound(_0x389f56,null))['then'](function(_0xd6a532){if(_0xd6a532){return _0x389f56['download'](path['join'](config['root'],_0x5245('0x49'),_0xd6a532['basename']));}})[_0x5245('0x39')](handleError(_0x389f56,null));};
\ No newline at end of file
+var _0x6743=['type','VIRTUAL','field','options','count','includeAll','findAll','catch','params','include','find','body','create','file','basename','filename','findOne','download','join','root','server/files/attachments/','rimraf','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','end','error','stack','name','send','index','Attachment','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','filter','merge','where'];(function(_0xb35d42,_0x136b8a){var _0x14daff=function(_0x3e4f38){while(--_0x3e4f38){_0xb35d42['push'](_0xb35d42['shift']());}};_0x14daff(++_0x136b8a);}(_0x6743,0x155));var _0x3674=function(_0x2059df,_0x367401){_0x2059df=_0x2059df-0x0;var _0xdd848b=_0x6743[_0x2059df];return _0xdd848b;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x3674('0x0'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x3674('0x1'));var moment=require(_0x3674('0x2'));var BPromise=require(_0x3674('0x3'));var Mustache=require(_0x3674('0x4'));var util=require(_0x3674('0x5'));var path=require(_0x3674('0x6'));var sox=require(_0x3674('0x7'));var csv=require(_0x3674('0x8'));var ejs=require(_0x3674('0x9'));var fs=require('fs');var _=require(_0x3674('0xa'));var squel=require(_0x3674('0xb'));var crypto=require('crypto');var jsforce=require(_0x3674('0xc'));var deskjs=require(_0x3674('0xd'));var toCsv=require(_0x3674('0x8'));var querystring=require(_0x3674('0xe'));var Papa=require('papaparse');var Redis=require(_0x3674('0xf'));var authService=require(_0x3674('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0x3674('0x11'))(_0x3674('0x12'));var utils=require(_0x3674('0x13'));var config=require(_0x3674('0x14'));var db=require(_0x3674('0x15'))['db'];function respondWithStatusCode(_0x5b8eae,_0x2f253b){_0x2f253b=_0x2f253b||0xcc;return function(_0x13f94c){if(_0x13f94c){return _0x5b8eae[_0x3674('0x16')](_0x2f253b);}return _0x5b8eae[_0x3674('0x17')](_0x2f253b)['end']();};}function respondWithResult(_0x40e281,_0x4e42f0){_0x4e42f0=_0x4e42f0||0xc8;return function(_0x46581d){if(_0x46581d){return _0x40e281[_0x3674('0x17')](_0x4e42f0)[_0x3674('0x18')](_0x46581d);}};}function respondWithFilteredResult(_0x470eb0,_0x33c636){return function(_0x5de61f){if(_0x5de61f){var _0x21204f=_0x5de61f['count'],_0xc3dc31=_0x33c636[_0x3674('0x19')],_0x34dc6f=_0x33c636['offset']+_0x33c636[_0x3674('0x1a')],_0x3f6d52;if(_0x34dc6f>=_0x21204f){_0x34dc6f=_0x21204f;_0x3f6d52=0xc8;}else{_0x3f6d52=0xce;}_0x470eb0[_0x3674('0x17')](_0x3f6d52);return _0x470eb0[_0x3674('0x1b')](_0x3674('0x1c'),_0xc3dc31+'-'+_0x34dc6f+'/'+_0x21204f)['json'](_0x5de61f);}return null;};}function patchUpdates(_0x12e66b){return function(_0xed030f){try{jsonpatch[_0x3674('0x1d')](_0xed030f,_0x12e66b,!![]);}catch(_0x467b1f){return BPromise[_0x3674('0x1e')](_0x467b1f);}return _0xed030f[_0x3674('0x1f')]();};}function saveUpdates(_0x1a8f7d,_0x54ec3b){return function(_0xf440d4){if(_0xf440d4){return _0xf440d4[_0x3674('0x20')](_0x1a8f7d)[_0x3674('0x21')](function(_0x3a3849){return _0x3a3849;});}return null;};}function removeEntity(_0x21521a,_0x458dce){return function(_0x50a21d){if(_0x50a21d){return _0x50a21d[_0x3674('0x22')]()[_0x3674('0x21')](function(){_0x21521a[_0x3674('0x17')](0xcc)[_0x3674('0x23')]();});}};}function handleEntityNotFound(_0x15f5e3,_0x59956f){return function(_0x5ccf35){if(!_0x5ccf35){_0x15f5e3[_0x3674('0x16')](0x194);}return _0x5ccf35;};}function handleError(_0xd4b55a,_0x460deb){_0x460deb=_0x460deb||0x1f4;return function(_0x3bdab2){logger[_0x3674('0x24')](_0x3bdab2[_0x3674('0x25')]);if(_0x3bdab2['name']){delete _0x3bdab2[_0x3674('0x26')];}_0xd4b55a[_0x3674('0x17')](_0x460deb)[_0x3674('0x27')](_0x3bdab2);};}exports[_0x3674('0x28')]=function(_0x449d25,_0xae6eec){var _0x45659d={},_0x696cd0={},_0x23a6f8={'count':0x0,'rows':[]};var _0x31d205=db[_0x3674('0x29')][_0x3674('0x2a')];_0x696cd0[_0x3674('0x2b')]=_[_0x3674('0x2c')](_0x31d205);_0x696cd0[_0x3674('0x2d')]=_['keys'](_0x449d25['query']);_0x696cd0[_0x3674('0x2e')]=_[_0x3674('0x2f')](_0x696cd0[_0x3674('0x2b')],_0x696cd0[_0x3674('0x2d')]);_0x45659d[_0x3674('0x30')]=_[_0x3674('0x2f')](_0x696cd0[_0x3674('0x2b')],qs[_0x3674('0x31')](_0x449d25['query'][_0x3674('0x31')]));_0x45659d['attributes']=_0x45659d[_0x3674('0x30')][_0x3674('0x32')]?_0x45659d[_0x3674('0x30')]:_0x696cd0[_0x3674('0x2b')];if(!_0x449d25[_0x3674('0x2d')][_0x3674('0x33')](_0x3674('0x34'))){_0x45659d['limit']=qs[_0x3674('0x1a')](_0x449d25[_0x3674('0x2d')][_0x3674('0x1a')]);_0x45659d[_0x3674('0x19')]=qs[_0x3674('0x19')](_0x449d25[_0x3674('0x2d')][_0x3674('0x19')]);}_0x45659d[_0x3674('0x35')]=qs['sort'](_0x449d25['query'][_0x3674('0x36')]);_0x45659d['where']=qs[_0x3674('0x2e')](_[_0x3674('0x37')](_0x449d25[_0x3674('0x2d')],_0x696cd0[_0x3674('0x2e')]));if(_0x449d25[_0x3674('0x2d')][_0x3674('0x38')]){_0x45659d['where']=_[_0x3674('0x39')](_0x45659d[_0x3674('0x3a')],{'$or':_['map'](_0x31d205,function(_0x551dcc){if(_0x551dcc[_0x3674('0x3b')]['key']!==_0x3674('0x3c')){var _0x231fd1={};_0x231fd1[_0x551dcc[_0x3674('0x3d')]]={'$like':'%'+_0x449d25[_0x3674('0x2d')][_0x3674('0x38')]+'%'};return _0x231fd1;}})});}_0x45659d=_[_0x3674('0x39')]({},_0x45659d,_0x449d25[_0x3674('0x3e')]);var _0x42d122={'where':_0x45659d[_0x3674('0x3a')]};return db[_0x3674('0x29')]['count'](_0x42d122)['then'](function(_0x4c8d7c){_0x23a6f8[_0x3674('0x3f')]=_0x4c8d7c;if(_0x449d25[_0x3674('0x2d')][_0x3674('0x40')]){_0x45659d['include']=[{'all':!![]}];}return db[_0x3674('0x29')][_0x3674('0x41')](_0x45659d);})[_0x3674('0x21')](function(_0x38af4d){_0x23a6f8['rows']=_0x38af4d;return _0x23a6f8;})[_0x3674('0x21')](respondWithFilteredResult(_0xae6eec,_0x45659d))[_0x3674('0x42')](handleError(_0xae6eec,null));};exports['show']=function(_0x5a5712,_0x4cc28e){var _0x442dee={'raw':!![],'where':{'id':_0x5a5712[_0x3674('0x43')]['id']}},_0x433ca8={};_0x433ca8[_0x3674('0x2b')]=_[_0x3674('0x2c')](db[_0x3674('0x29')][_0x3674('0x2a')]);_0x433ca8['query']=_[_0x3674('0x2c')](_0x5a5712[_0x3674('0x2d')]);_0x433ca8[_0x3674('0x2e')]=_[_0x3674('0x2f')](_0x433ca8[_0x3674('0x2b')],_0x433ca8['query']);_0x442dee['attributes']=_['intersection'](_0x433ca8[_0x3674('0x2b')],qs[_0x3674('0x31')](_0x5a5712[_0x3674('0x2d')][_0x3674('0x31')]));_0x442dee[_0x3674('0x30')]=_0x442dee[_0x3674('0x30')][_0x3674('0x32')]?_0x442dee[_0x3674('0x30')]:_0x433ca8[_0x3674('0x2b')];if(_0x5a5712[_0x3674('0x2d')][_0x3674('0x40')]){_0x442dee[_0x3674('0x44')]=[{'all':!![]}];}_0x442dee=_[_0x3674('0x39')]({},_0x442dee,_0x5a5712[_0x3674('0x3e')]);return db[_0x3674('0x29')][_0x3674('0x45')](_0x442dee)['then'](handleEntityNotFound(_0x4cc28e,null))[_0x3674('0x21')](respondWithResult(_0x4cc28e,null))['catch'](handleError(_0x4cc28e,null));};exports[_0x3674('0x20')]=function(_0x453f76,_0x44da56){if(_0x453f76['body']['id']){delete _0x453f76[_0x3674('0x46')]['id'];}return db['Attachment'][_0x3674('0x45')]({'where':{'id':_0x453f76['params']['id']}})[_0x3674('0x21')](handleEntityNotFound(_0x44da56,null))[_0x3674('0x21')](saveUpdates(_0x453f76[_0x3674('0x46')],null))['then'](respondWithResult(_0x44da56,null))[_0x3674('0x42')](handleError(_0x44da56,null));};exports[_0x3674('0x22')]=function(_0x5743fc,_0x518323){return db[_0x3674('0x29')][_0x3674('0x45')]({'where':{'id':_0x5743fc[_0x3674('0x43')]['id']}})[_0x3674('0x21')](handleEntityNotFound(_0x518323,null))[_0x3674('0x21')](removeEntity(_0x518323,null))[_0x3674('0x42')](handleError(_0x518323,null));};exports[_0x3674('0x47')]=function(_0x5639b0,_0x103a5f,_0x545cdf){_0x5639b0[_0x3674('0x46')]['name']=_0x5639b0[_0x3674('0x48')]['originalname'];_0x5639b0[_0x3674('0x46')][_0x3674('0x49')]=_0x5639b0[_0x3674('0x48')][_0x3674('0x4a')];_0x5639b0[_0x3674('0x46')]['type']=_0x5639b0[_0x3674('0x48')]['mimetype'];return db[_0x3674('0x29')][_0x3674('0x47')](_0x5639b0['body'])['then'](respondWithResult(_0x103a5f,0xc9))[_0x3674('0x42')](handleError(_0x103a5f,null));};exports['download']=function(_0x23dd3a,_0xd2b7d7,_0x9f0685){return db['Attachment'][_0x3674('0x4b')]({'where':{'id':_0x23dd3a[_0x3674('0x43')]['id']},'raw':!![]})[_0x3674('0x21')](handleEntityNotFound(_0xd2b7d7,null))[_0x3674('0x21')](function(_0x1ce6db){if(_0x1ce6db){return _0xd2b7d7[_0x3674('0x4c')](path[_0x3674('0x4d')](config[_0x3674('0x4e')],_0x3674('0x4f'),_0x1ce6db['basename']));}})[_0x3674('0x42')](handleError(_0xd2b7d7,null));};
\ No newline at end of file
index 5c30bd7..9333c42 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x861c=['request-promise','path','rimraf','../../config/environment','./attachment.attributes','exports','define','Attachment','attachments','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0x39855f,_0x10fb4a){var _0x53fcd0=function(_0x2369b3){while(--_0x2369b3){_0x39855f['push'](_0x39855f['shift']());}};_0x53fcd0(++_0x10fb4a);}(_0x861c,0xdb));var _0xc861=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0x861c[_0xa464c9];return _0x3d73c4;};'use strict';var _=require(_0xc861('0x0'));var util=require(_0xc861('0x1'));var logger=require(_0xc861('0x2'))(_0xc861('0x3'));var moment=require(_0xc861('0x4'));var BPromise=require(_0xc861('0x5'));var rp=require(_0xc861('0x6'));var fs=require('fs');var path=require(_0xc861('0x7'));var rimraf=require(_0xc861('0x8'));var config=require(_0xc861('0x9'));var attributes=require(_0xc861('0xa'));module[_0xc861('0xb')]=function(_0x562f12,_0xc3b5fd){return _0x562f12[_0xc861('0xc')](_0xc861('0xd'),attributes,{'tableName':_0xc861('0xe'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x847d=['util','../../config/logger','api','bluebird','path','rimraf','./attachment.attributes','exports','Attachment','attachments'];(function(_0x3a55d0,_0x4bc35c){var _0xb8c328=function(_0x7b348f){while(--_0x7b348f){_0x3a55d0['push'](_0x3a55d0['shift']());}};_0xb8c328(++_0x4bc35c);}(_0x847d,0x14a));var _0xd847=function(_0x124f88,_0x3ad501){_0x124f88=_0x124f88-0x0;var _0xed0e3b=_0x847d[_0x124f88];return _0xed0e3b;};'use strict';var _=require('lodash');var util=require(_0xd847('0x0'));var logger=require(_0xd847('0x1'))(_0xd847('0x2'));var moment=require('moment');var BPromise=require(_0xd847('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xd847('0x4'));var rimraf=require(_0xd847('0x5'));var config=require('../../config/environment');var attributes=require(_0xd847('0x6'));module[_0xd847('0x7')]=function(_0x375a88,_0x13d8d4){return _0x375a88['define'](_0xd847('0x8'),attributes,{'tableName':_0xd847('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index c7d77fb..aa648ec 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe5ff=['rpc','jayson/promise','client','http','info','Attachment,\x20%s,\x20%s','request\x20sent','stringify','error','message','Attachment','create','body','options','CreateAttachment','debug','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x11a343,_0x3d6373){var _0x358c8b=function(_0x2c317b){while(--_0x2c317b){_0x11a343['push'](_0x11a343['shift']());}};_0x358c8b(++_0x3d6373);}(_0xe5ff,0x197));var _0xfe5f=function(_0x51f67a,_0x444ad0){_0x51f67a=_0x51f67a-0x0;var _0x5d6086=_0xe5ff[_0x51f67a];return _0x5d6086;};'use strict';var _=require(_0xfe5f('0x0'));var util=require(_0xfe5f('0x1'));var moment=require(_0xfe5f('0x2'));var BPromise=require(_0xfe5f('0x3'));var rs=require(_0xfe5f('0x4'));var fs=require('fs');var Redis=require(_0xfe5f('0x5'));var db=require(_0xfe5f('0x6'))['db'];var utils=require(_0xfe5f('0x7'));var logger=require(_0xfe5f('0x8'))(_0xfe5f('0x9'));var config=require('../../config/environment');var jayson=require(_0xfe5f('0xa'));var client=jayson[_0xfe5f('0xb')][_0xfe5f('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x5db4ea,_0x25ea40,_0x5bef39){return new BPromise(function(_0x196127,_0x4d3094){return client['request'](_0x5db4ea,_0x5bef39)['then'](function(_0x570d93){logger[_0xfe5f('0xd')](_0xfe5f('0xe'),_0x25ea40,_0xfe5f('0xf'));logger['debug']('Attachment,\x20%s,\x20%s,\x20%s',_0x25ea40,'request\x20sent',JSON[_0xfe5f('0x10')](_0x570d93));if(_0x570d93[_0xfe5f('0x11')]){if(_0x570d93[_0xfe5f('0x11')]['code']===0x1f4){logger['error'](_0xfe5f('0xe'),_0x25ea40,_0x570d93[_0xfe5f('0x11')]['message']);return _0x4d3094(_0x570d93[_0xfe5f('0x11')]['message']);}logger['error'](_0xfe5f('0xe'),_0x25ea40,_0x570d93['error'][_0xfe5f('0x12')]);return _0x196127(_0x570d93['error'][_0xfe5f('0x12')]);}else{logger[_0xfe5f('0xd')]('Attachment,\x20%s,\x20%s',_0x25ea40,_0xfe5f('0xf'));_0x196127(_0x570d93['result']['message']);}})['catch'](function(_0x5a8004){logger[_0xfe5f('0x11')]('Attachment,\x20%s,\x20%s',_0x25ea40,_0x5a8004);_0x4d3094(_0x5a8004);});});}exports['CreateAttachment']=function(_0x4918cb){var _0x2e4176=this;return new Promise(function(_0x58f5a1,_0x1d0035){return db[_0xfe5f('0x13')][_0xfe5f('0x14')](_0x4918cb[_0xfe5f('0x15')],{'raw':_0x4918cb[_0xfe5f('0x16')]?_0x4918cb[_0xfe5f('0x16')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x19a5ce){logger[_0xfe5f('0xd')](_0xfe5f('0x17'),_0x4918cb);logger[_0xfe5f('0x18')](_0xfe5f('0x17'),_0x4918cb,JSON[_0xfe5f('0x10')](_0x19a5ce));_0x58f5a1(_0x19a5ce);})[_0xfe5f('0x19')](function(_0x283abb){logger[_0xfe5f('0x11')](_0xfe5f('0x17'),_0x283abb[_0xfe5f('0x12')],_0x4918cb);_0x1d0035(_0x2e4176[_0xfe5f('0x11')](0x1f4,_0x283abb['message']));});});};
\ No newline at end of file
+var _0xebd3=['info','Attachment,\x20%s,\x20%s','request\x20sent','Attachment,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','CreateAttachment','Attachment','body','lodash','moment','randomstring','ioredis','rpc','../../config/environment','jayson/promise','client','http','then'];(function(_0x3b1c9a,_0x50c419){var _0x5ee955=function(_0x3e1eae){while(--_0x3e1eae){_0x3b1c9a['push'](_0x3b1c9a['shift']());}};_0x5ee955(++_0x50c419);}(_0xebd3,0x194));var _0x3ebd=function(_0x3d27ba,_0x2671a3){_0x3d27ba=_0x3d27ba-0x0;var _0xf01885=_0xebd3[_0x3d27ba];return _0xf01885;};'use strict';var _=require(_0x3ebd('0x0'));var util=require('util');var moment=require(_0x3ebd('0x1'));var BPromise=require('bluebird');var rs=require(_0x3ebd('0x2'));var fs=require('fs');var Redis=require(_0x3ebd('0x3'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x3ebd('0x4'));var config=require(_0x3ebd('0x5'));var jayson=require(_0x3ebd('0x6'));var client=jayson[_0x3ebd('0x7')][_0x3ebd('0x8')]({'port':0x232a});function respondWithRpcPromise(_0xaf0f66,_0x3c1c3f,_0x163009){return new BPromise(function(_0x3981ab,_0x11034e){return client['request'](_0xaf0f66,_0x163009)[_0x3ebd('0x9')](function(_0x527525){logger[_0x3ebd('0xa')](_0x3ebd('0xb'),_0x3c1c3f,_0x3ebd('0xc'));logger['debug'](_0x3ebd('0xd'),_0x3c1c3f,'request\x20sent',JSON[_0x3ebd('0xe')](_0x527525));if(_0x527525['error']){if(_0x527525[_0x3ebd('0xf')][_0x3ebd('0x10')]===0x1f4){logger[_0x3ebd('0xf')](_0x3ebd('0xb'),_0x3c1c3f,_0x527525[_0x3ebd('0xf')]['message']);return _0x11034e(_0x527525[_0x3ebd('0xf')][_0x3ebd('0x11')]);}logger['error'](_0x3ebd('0xb'),_0x3c1c3f,_0x527525[_0x3ebd('0xf')][_0x3ebd('0x11')]);return _0x3981ab(_0x527525['error']['message']);}else{logger[_0x3ebd('0xa')]('Attachment,\x20%s,\x20%s',_0x3c1c3f,_0x3ebd('0xc'));_0x3981ab(_0x527525[_0x3ebd('0x12')][_0x3ebd('0x11')]);}})[_0x3ebd('0x13')](function(_0x3f6278){logger[_0x3ebd('0xf')](_0x3ebd('0xb'),_0x3c1c3f,_0x3f6278);_0x11034e(_0x3f6278);});});}exports[_0x3ebd('0x14')]=function(_0x115dd3){var _0x59b1b3=this;return new Promise(function(_0x4bdb2e,_0x57b40e){return db[_0x3ebd('0x15')]['create'](_0x115dd3[_0x3ebd('0x16')],{'raw':_0x115dd3['options']?_0x115dd3['options']['raw']===undefined?!![]:![]:!![]})['then'](function(_0xce49bf){logger[_0x3ebd('0xa')]('CreateAttachment',_0x115dd3);logger['debug'](_0x3ebd('0x14'),_0x115dd3,JSON[_0x3ebd('0xe')](_0xce49bf));_0x4bdb2e(_0xce49bf);})[_0x3ebd('0x13')](function(_0x53f61f){logger[_0x3ebd('0xf')](_0x3ebd('0x14'),_0x53f61f[_0x3ebd('0x11')],_0x115dd3);_0x57b40e(_0x59b1b3[_0x3ebd('0xf')](0x1f4,_0x53f61f['message']));});});};
\ No newline at end of file
index 799c3a1..d32e5f8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3ef0=['isAuthenticated','index','get','show','/:id/download','diskStorage','join','root','%s-%s','now','originalname','replace','post','single','file','create','put','/:id','destroy','exports','multer','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x4e9d3c,_0x1f4b98){var _0x2d0825=function(_0x384676){while(--_0x384676){_0x4e9d3c['push'](_0x4e9d3c['shift']());}};_0x2d0825(++_0x1f4b98);}(_0x3ef0,0x19a));var _0x03ef=function(_0x57ae72,_0xc093a2){_0x57ae72=_0x57ae72-0x0;var _0x8dcc0=_0x3ef0[_0x57ae72];return _0x8dcc0;};'use strict';var multer=require(_0x03ef('0x0'));var util=require('util');var path=require(_0x03ef('0x1'));var timeout=require('connect-timeout');var express=require(_0x03ef('0x2'));var router=express['Router']();var auth=require(_0x03ef('0x3'));var interaction=require(_0x03ef('0x4'));var config=require(_0x03ef('0x5'));var controller=require('./attachment.controller');router['get']('/',auth[_0x03ef('0x6')](),controller[_0x03ef('0x7')]);router[_0x03ef('0x8')]('/:id',auth[_0x03ef('0x6')](),controller[_0x03ef('0x9')]);router[_0x03ef('0x8')](_0x03ef('0xa'),auth['isAuthenticated'](),controller['download']);var upload=multer({'storage':multer[_0x03ef('0xb')]({'destination':function(_0x6a6cd4,_0x2d3cc9,_0x52bd94){_0x52bd94(null,path[_0x03ef('0xc')](config[_0x03ef('0xd')],'server/files/attachments/'));},'filename':function(_0x269454,_0x278ff9,_0x2c7883){_0x2c7883(null,util['format'](_0x03ef('0xe'),Date[_0x03ef('0xf')](),_0x278ff9[_0x03ef('0x10')][_0x03ef('0x11')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0x03ef('0x12')]('/',upload[_0x03ef('0x13')](_0x03ef('0x14')),controller[_0x03ef('0x15')]);router[_0x03ef('0x16')](_0x03ef('0x17'),auth[_0x03ef('0x6')](),controller['update']);router['delete'](_0x03ef('0x17'),auth[_0x03ef('0x6')](),controller[_0x03ef('0x18')]);module[_0x03ef('0x19')]=router;
\ No newline at end of file
+var _0x8a55=['util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./attachment.controller','get','isAuthenticated','index','/:id','show','download','diskStorage','join','root','server/files/attachments/','format','%s-%s','originalname','replace','post','single','file','update','delete','destroy','exports','multer'];(function(_0x58e652,_0x229f5f){var _0x954284=function(_0x462188){while(--_0x462188){_0x58e652['push'](_0x58e652['shift']());}};_0x954284(++_0x229f5f);}(_0x8a55,0x185));var _0x58a5=function(_0x25758a,_0x41191f){_0x25758a=_0x25758a-0x0;var _0x5dcb12=_0x8a55[_0x25758a];return _0x5dcb12;};'use strict';var multer=require(_0x58a5('0x0'));var util=require(_0x58a5('0x1'));var path=require(_0x58a5('0x2'));var timeout=require(_0x58a5('0x3'));var express=require(_0x58a5('0x4'));var router=express[_0x58a5('0x5')]();var auth=require(_0x58a5('0x6'));var interaction=require(_0x58a5('0x7'));var config=require('../../config/environment');var controller=require(_0x58a5('0x8'));router[_0x58a5('0x9')]('/',auth[_0x58a5('0xa')](),controller[_0x58a5('0xb')]);router[_0x58a5('0x9')](_0x58a5('0xc'),auth[_0x58a5('0xa')](),controller[_0x58a5('0xd')]);router[_0x58a5('0x9')]('/:id/download',auth[_0x58a5('0xa')](),controller[_0x58a5('0xe')]);var upload=multer({'storage':multer[_0x58a5('0xf')]({'destination':function(_0x2eec28,_0x3b13fe,_0x22e655){_0x22e655(null,path[_0x58a5('0x10')](config[_0x58a5('0x11')],_0x58a5('0x12')));},'filename':function(_0x2f6bd9,_0x2b1785,_0x328ae0){_0x328ae0(null,util[_0x58a5('0x13')](_0x58a5('0x14'),Date['now'](),_0x2b1785[_0x58a5('0x15')][_0x58a5('0x16')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0x58a5('0x17')]('/',upload[_0x58a5('0x18')](_0x58a5('0x19')),controller['create']);router['put'](_0x58a5('0xc'),auth[_0x58a5('0xa')](),controller[_0x58a5('0x1a')]);router[_0x58a5('0x1b')](_0x58a5('0xc'),auth['isAuthenticated'](),controller[_0x58a5('0x1c')]);module[_0x58a5('0x1d')]=router;
\ No newline at end of file
index 797f822..a45c8c3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x975f=['secret','Setting','findOne','allowedLoginAttempts','blockDuration','then','find','map','emails','value','admin','user','agent','disabled','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','blocked','add','minutes','clearBlockUser','getLicense','catch','lodash','passport-google-oauth20','Strategy','moment','../../mysqldb','../../config/environment','../../components/auth/service','../../config/utils','login','google','/login','profile','email','callback','authenticate','clientID','clientSecret'];(function(_0xae9024,_0x17f58e){var _0x23e7d3=function(_0x5911fb){while(--_0x5911fb){_0xae9024['push'](_0xae9024['shift']());}};_0x23e7d3(++_0x17f58e);}(_0x975f,0x191));var _0xf975=function(_0x14363e,_0x4f0e0d){_0x14363e=_0x14363e-0x0;var _0x17c56d=_0x975f[_0x14363e];return _0x17c56d;};'use strict';var _=require(_0xf975('0x0'));var passport=require('passport');var GoogleStrategy=require(_0xf975('0x1'))[_0xf975('0x2')];var moment=require(_0xf975('0x3'));var db=require(_0xf975('0x4'))['db'];var config=require(_0xf975('0x5'));var signToken=require(_0xf975('0x6'))['signToken'];var utils=require(_0xf975('0x7'));exports[_0xf975('0x8')]=passport['authenticate'](_0xf975('0x9'),{'failureRedirect':_0xf975('0xa'),'scope':[_0xf975('0xb'),_0xf975('0xc')],'session':![]});exports[_0xf975('0xd')]=passport[_0xf975('0xe')]('google',{'failureRedirect':_0xf975('0xa'),'session':![]});passport['use'](new GoogleStrategy({'clientID':config[_0xf975('0x9')]?config['google'][_0xf975('0xf')]:'id','clientSecret':config[_0xf975('0x9')]?config['google'][_0xf975('0x10')]:_0xf975('0x11'),'callbackURL':config[_0xf975('0x9')]?config['google']['callbackURL']:''},function(_0x1c93d0,_0x1659ef,_0x549b46,_0x48177f){var _0x273011,_0x315222;return db[_0xf975('0x12')][_0xf975('0x13')]({'where':{'id':0x1},'attributes':[_0xf975('0x14'),_0xf975('0x15')],'raw':!![]})[_0xf975('0x16')](function(_0x31049d){_0x273011=_0x31049d;return db['User'][_0xf975('0x17')]({'where':{'email':_[_0xf975('0x18')](_0x549b46[_0xf975('0x19')],_0xf975('0x1a')),'role':{'$or':[_0xf975('0x1b'),_0xf975('0x1c'),_0xf975('0x1d')]}}});})[_0xf975('0x16')](function(_0x298207){_0x315222=_0x298207;if(_0x315222){if(_0x315222[_0xf975('0x1e')]){return _0x48177f(_0xf975('0x1f'));}else if(_0x273011[_0xf975('0x15')]>0x0){if(_0x315222[_0xf975('0x20')]){if(moment(_0x315222['blockedAt'])[_0xf975('0x21')](_0x273011[_0xf975('0x15')],_0xf975('0x22'))>moment()){return _0x48177f('Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.');}else{return utils[_0xf975('0x23')](_0x315222,0x0,![],null)['then'](function(){return utils['getLicense'](_0x315222);})[_0xf975('0x16')](function(){return _0x48177f(null,_0x315222);});}}else{return utils[_0xf975('0x24')](_0x315222)[_0xf975('0x16')](function(){return _0x48177f(null,_0x315222);});}}else{return utils[_0xf975('0x24')](_0x315222)[_0xf975('0x16')](function(){return _0x48177f(null,_0x315222);});}}return _0x48177f(_0xf975('0x1f'));})[_0xf975('0x25')](function(_0x432c98){_0x48177f(_0x432c98);});}));
\ No newline at end of file
+var _0xfd7b=['passport-google-oauth20','Strategy','moment','../../mysqldb','../../config/environment','../../components/auth/service','signToken','../../config/utils','login','authenticate','google','/login','email','use','callbackURL','allowedLoginAttempts','blockDuration','then','emails','value','admin','user','agent','disabled','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','blockedAt','add','getLicense','catch','passport'];(function(_0x1be03a,_0x3bd43f){var _0x162495=function(_0x1bc785){while(--_0x1bc785){_0x1be03a['push'](_0x1be03a['shift']());}};_0x162495(++_0x3bd43f);}(_0xfd7b,0x1df));var _0xbfd7=function(_0x1f9f37,_0x18776e){_0x1f9f37=_0x1f9f37-0x0;var _0x21c080=_0xfd7b[_0x1f9f37];return _0x21c080;};'use strict';var _=require('lodash');var passport=require(_0xbfd7('0x0'));var GoogleStrategy=require(_0xbfd7('0x1'))[_0xbfd7('0x2')];var moment=require(_0xbfd7('0x3'));var db=require(_0xbfd7('0x4'))['db'];var config=require(_0xbfd7('0x5'));var signToken=require(_0xbfd7('0x6'))[_0xbfd7('0x7')];var utils=require(_0xbfd7('0x8'));exports[_0xbfd7('0x9')]=passport[_0xbfd7('0xa')](_0xbfd7('0xb'),{'failureRedirect':_0xbfd7('0xc'),'scope':['profile',_0xbfd7('0xd')],'session':![]});exports['callback']=passport[_0xbfd7('0xa')]('google',{'failureRedirect':_0xbfd7('0xc'),'session':![]});passport[_0xbfd7('0xe')](new GoogleStrategy({'clientID':config[_0xbfd7('0xb')]?config[_0xbfd7('0xb')]['clientID']:'id','clientSecret':config[_0xbfd7('0xb')]?config[_0xbfd7('0xb')]['clientSecret']:'secret','callbackURL':config[_0xbfd7('0xb')]?config[_0xbfd7('0xb')][_0xbfd7('0xf')]:''},function(_0x116de2,_0x3784a5,_0x559eca,_0x46feae){var _0x534d66,_0x28566c;return db['Setting']['findOne']({'where':{'id':0x1},'attributes':[_0xbfd7('0x10'),_0xbfd7('0x11')],'raw':!![]})[_0xbfd7('0x12')](function(_0x371592){_0x534d66=_0x371592;return db['User']['find']({'where':{'email':_['map'](_0x559eca[_0xbfd7('0x13')],_0xbfd7('0x14')),'role':{'$or':[_0xbfd7('0x15'),_0xbfd7('0x16'),_0xbfd7('0x17')]}}});})[_0xbfd7('0x12')](function(_0x137d50){_0x28566c=_0x137d50;if(_0x28566c){if(_0x28566c[_0xbfd7('0x18')]){return _0x46feae(_0xbfd7('0x19'));}else if(_0x534d66['blockDuration']>0x0){if(_0x28566c['blocked']){if(moment(_0x28566c[_0xbfd7('0x1a')])[_0xbfd7('0x1b')](_0x534d66['blockDuration'],'minutes')>moment()){return _0x46feae(_0xbfd7('0x19'));}else{return utils['clearBlockUser'](_0x28566c,0x0,![],null)['then'](function(){return utils[_0xbfd7('0x1c')](_0x28566c);})['then'](function(){return _0x46feae(null,_0x28566c);});}}else{return utils[_0xbfd7('0x1c')](_0x28566c)[_0xbfd7('0x12')](function(){return _0x46feae(null,_0x28566c);});}}else{return utils[_0xbfd7('0x1c')](_0x28566c)[_0xbfd7('0x12')](function(){return _0x46feae(null,_0x28566c);});}}return _0x46feae('Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.');})[_0xbfd7('0x1d')](function(_0x32a489){_0x46feae(_0x32a489);});}));
\ No newline at end of file
index ed1f9f9..6fc87ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf211=['express','passport','Router','../user/user.controller.js','login','get','/callback','callback','isMiddleware','exports'];(function(_0x42cae2,_0x284ef8){var _0x5f256f=function(_0x41abc8){while(--_0x41abc8){_0x42cae2['push'](_0x42cae2['shift']());}};_0x5f256f(++_0x284ef8);}(_0xf211,0x6e));var _0x1f21=function(_0x50e001,_0x45aa55){_0x50e001=_0x50e001-0x0;var _0x3fe4a2=_0xf211[_0x50e001];return _0x3fe4a2;};'use strict';var express=require(_0x1f21('0x0'));var passport=require(_0x1f21('0x1'));var router=express[_0x1f21('0x2')]();var controller=require('./authGoogle.controller');var userController=require(_0x1f21('0x3'));var authService=require('../../components/auth/service');router['get']('/',controller[_0x1f21('0x4')]);router[_0x1f21('0x5')](_0x1f21('0x6'),controller[_0x1f21('0x7')],authService[_0x1f21('0x8')],userController[_0x1f21('0x4')],authService['setTokenCookie']);module[_0x1f21('0x9')]=router;
\ No newline at end of file
+var _0x1523=['setTokenCookie','exports','passport','Router','./authGoogle.controller','get','login','callback','isMiddleware'];(function(_0x573a27,_0x26d295){var _0x49f7c0=function(_0x1a88ff){while(--_0x1a88ff){_0x573a27['push'](_0x573a27['shift']());}};_0x49f7c0(++_0x26d295);}(_0x1523,0x17c));var _0x3152=function(_0x4b1bb0,_0x7dc32b){_0x4b1bb0=_0x4b1bb0-0x0;var _0x549407=_0x1523[_0x4b1bb0];return _0x549407;};'use strict';var express=require('express');var passport=require(_0x3152('0x0'));var router=express[_0x3152('0x1')]();var controller=require(_0x3152('0x2'));var userController=require('../user/user.controller.js');var authService=require('../../components/auth/service');router[_0x3152('0x3')]('/',controller[_0x3152('0x4')]);router[_0x3152('0x3')]('/callback',controller[_0x3152('0x5')],authService[_0x3152('0x6')],userController['login'],authService[_0x3152('0x7')]);module[_0x3152('0x8')]=router;
\ No newline at end of file
index ff7ea04..50c055b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcc0e=['The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','login','local','json','online','forgot','Email\x20parameter\x20is\x20missing','body','trim','toLowerCase','User','This\x20email\x20is\x20not\x20registered.','The\x20user\x20is\x20disabled.\x20Please\x20contact\x20the\x20administrator.','The\x20user\x20is\x20blocked.\x20Please\x20contact\x20the\x20administrator.','resetPasswordExpires','now','save','xCally\x20Motion\x20Password\x20Reset','Please\x20click\x20on\x20the\x20following\x20link,\x20or\x20paste\x20this\x20into\x20your\x20browser\x20to\x20complete\x20the\x20process:\x0a\x0a','http://','headers','/reset/','find','params','token','Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.','securePassword','resetPasswordToken','Password\x20reset!','util','passport','passport-local','randomstring','moment','client','http','Setting','findOne','allowedLoginAttempts','blockDuration','then','name','password','role','disabled','blocked','blockedAt','loginAttempts','admin','user','agent','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','authenticate','add','minutes','clearBlockUser','getLicense','catch','MailAccount','email','MailServerOut','Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!','Smtp','service','host','port','secure','authentication','pass','merge','\x22%s\x22\x20<%s>','request','SendMail','error','format','SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!','message','status','send'];(function(_0x410612,_0x551c48){var _0xbfa860=function(_0x4fb412){while(--_0x4fb412){_0x410612['push'](_0x410612['shift']());}};_0xbfa860(++_0x551c48);}(_0xcc0e,0x10a));var _0xecc0=function(_0x32136d,_0x54433d){_0x32136d=_0x32136d-0x0;var _0x2baa85=_0xcc0e[_0x32136d];return _0x2baa85;};'use strict';var util=require(_0xecc0('0x0'));var passport=require(_0xecc0('0x1'));var LocalStrategy=require(_0xecc0('0x2'))['Strategy'];var jayson=require('jayson/promise');var _=require('lodash');var rs=require(_0xecc0('0x3'));var moment=require(_0xecc0('0x4'));var db=require('../../mysqldb')['db'];var signToken=require('../../components/auth/service')['signToken'];var utils=require('../../config/utils');var client=jayson[_0xecc0('0x5')][_0xecc0('0x6')]({'port':0x232b});function localAuthenticate(_0x8df83d,_0x4f9c44,_0x4bf038,_0x23338c){var _0x45c43e,_0x520eae;return db[_0xecc0('0x7')][_0xecc0('0x8')]({'where':{'id':0x1},'attributes':[_0xecc0('0x9'),_0xecc0('0xa')],'raw':!![]})[_0xecc0('0xb')](function(_0x2997c0){_0x45c43e=_0x2997c0;return _0x8df83d[_0xecc0('0x8')]({'attributes':['id',_0xecc0('0xc'),_0xecc0('0xd'),'salt',_0xecc0('0xe'),_0xecc0('0xf'),_0xecc0('0x10'),_0xecc0('0x11'),_0xecc0('0x12')],'where':{'name':_0x4f9c44,'role':{'$or':[_0xecc0('0x13'),_0xecc0('0x14'),_0xecc0('0x15')]}}});})['then'](function(_0x33395b){if(!_0x33395b||_0x33395b&&_0x33395b[_0xecc0('0xc')]!==_0x4f9c44){throw new Error(_0xecc0('0x16'));}else{_0x520eae=_0x33395b;return _0x520eae;}})['then'](function(){_0x520eae[_0xecc0('0x17')](_0x4bf038,function(_0x344d05,_0x4f33f0){var _0x4d2764=_0x520eae[_0xecc0('0x12')]+0x1;if(_0x344d05){return _0x23338c(_0x344d05);}else if(!_0x4f33f0){if(_0x520eae[_0xecc0('0xf')]){return _0x23338c(null,![],{'message':_0xecc0('0x16')});}else if(_0x45c43e[_0xecc0('0x9')]>0x0){if(_0x520eae[_0xecc0('0x10')]){if(_0x45c43e[_0xecc0('0xa')]>0x0){if(moment(_0x520eae['blockedAt'])[_0xecc0('0x18')](_0x45c43e[_0xecc0('0xa')],_0xecc0('0x19'))>moment()){return _0x23338c(null,![],{'message':_0xecc0('0x16')});}else{return utils[_0xecc0('0x1a')](_0x520eae,_0x4d2764,![],null)['then'](function(){return _0x23338c(null,![],{'message':_0xecc0('0x16')});});}}else{return _0x23338c(null,![],{'message':_0xecc0('0x16')});}}else{if(_0x4d2764>=_0x45c43e[_0xecc0('0x9')]){return utils[_0xecc0('0x1a')](_0x520eae,0x0,!![],moment())[_0xecc0('0xb')](function(){return _0x23338c(null,![],{'message':_0xecc0('0x16')});});}else{return utils[_0xecc0('0x1a')](_0x520eae,_0x4d2764,![],null)[_0xecc0('0xb')](function(){return _0x23338c(null,![],{'message':_0xecc0('0x16')});});}}}else{return _0x23338c(null,![],{'message':_0xecc0('0x16')});}}else{if(_0x520eae[_0xecc0('0xf')]){return _0x23338c(null,![],{'message':_0xecc0('0x16')});}else if(_0x45c43e[_0xecc0('0x9')]>0x0){if(_0x520eae[_0xecc0('0x10')]){if(_0x45c43e['blockDuration']>0x0){if(moment(_0x520eae[_0xecc0('0x11')])[_0xecc0('0x18')](_0x45c43e[_0xecc0('0xa')],_0xecc0('0x19'))>moment()){return _0x23338c(null,![],{'message':_0xecc0('0x16')});}else{return utils['clearBlockUser'](_0x520eae,0x0,![],null)['then'](function(){return utils[_0xecc0('0x1b')](_0x520eae);})[_0xecc0('0xb')](function(){return _0x23338c(null,_0x520eae);});}}else{return _0x23338c(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}}else{return utils[_0xecc0('0x1a')](_0x520eae,0x0,![],null)[_0xecc0('0xb')](function(){return utils[_0xecc0('0x1b')](_0x520eae);})['then'](function(){return _0x23338c(null,_0x520eae);})[_0xecc0('0x1c')](function(_0x170b91){return _0x23338c(null,![],_0x170b91);});}}else{if(_0x520eae['blocked']){return _0x23338c(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}else{return utils[_0xecc0('0x1b')](_0x520eae)[_0xecc0('0xb')](function(){return _0x23338c(null,_0x520eae);});}}}});})[_0xecc0('0x1c')](function(_0x597872){return _0x23338c(null,![],_0x597872);});}function sendServiceMail(_0xc49d56){return db[_0xecc0('0x1d')]['find']({'where':{'service':!![]},'attributes':['id','name',_0xecc0('0x1e')],'include':[{'model':db[_0xecc0('0x1f')],'as':'Smtp'}]})['then'](function(_0x13e118){if(!_0x13e118){throw new Error(_0xecc0('0x20'));}var _0x1d42e4={'tls':{'rejectUnauthorized':![]}};if(_0x13e118[_0xecc0('0x21')][_0xecc0('0x22')]){_0x1d42e4[_0xecc0('0x22')]=_0x13e118[_0xecc0('0x21')][_0xecc0('0x22')];}else{_0x1d42e4['host']=_0x13e118[_0xecc0('0x21')][_0xecc0('0x23')];_0x1d42e4[_0xecc0('0x24')]=_0x13e118[_0xecc0('0x21')]['port'];_0x1d42e4['secure']=_0x13e118[_0xecc0('0x21')][_0xecc0('0x25')];}if(_0x13e118['Smtp'][_0xecc0('0x26')]){_0x1d42e4['auth']={'user':_0x13e118[_0xecc0('0x21')][_0xecc0('0x14')],'pass':_0x13e118[_0xecc0('0x21')][_0xecc0('0x27')]};}var _0x1d9b86={'account':_0x1d42e4,'message':_[_0xecc0('0x28')]({'from':util['format'](_0xecc0('0x29'),_0x13e118[_0xecc0('0xc')],_0x13e118['email']||_0x13e118['Smtp']['user'])},_0xc49d56)};return client[_0xecc0('0x2a')](_0xecc0('0x2b'),_0x1d9b86);})[_0xecc0('0xb')](function(_0x331d2a){if(_0x331d2a[_0xecc0('0x2c')]){throw new Error(util[_0xecc0('0x2d')](_0xecc0('0x2e'),_0x331d2a['error'][_0xecc0('0x2f')]||JSON['stringify'](_0x331d2a[_0xecc0('0x2c')])));}return!![];});}function handleError(_0x3b8a77,_0x49729d,_0x2d6752){return _0x3b8a77[_0xecc0('0x30')](_0x49729d||0x1f4)[_0xecc0('0x31')]({'message':_0x2d6752?_0x2d6752[_0xecc0('0x2f')]||_0x2d6752:''});}function checkPasswordPattern(_0x3e9703,_0xf51995,_0x1d252a){if(_0x1d252a){var _0x4ad8ac=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x4ad8ac['test'](_0xf51995)){return _0x3e9703;}else{throw new Error(_0xecc0('0x32'));}}else{return _0x3e9703;}}exports[_0xecc0('0x33')]=function(_0x1d41d1,_0x79cb94,_0x3c1450){passport[_0xecc0('0x17')](_0xecc0('0x34'),function(_0x23d002,_0x4b8874,_0x8f8773){var _0x52b589=_0x23d002||_0x8f8773;if(_0x52b589){return handleError(_0x79cb94,0x191,_0x52b589);}if(!_0x4b8874){return handleError(_0x79cb94,0x194,{'message':'Something\x20went\x20wrong,\x20please\x20try\x20again.'});}else{var _0x13e37d=signToken(_0x4b8874['id'],_0x4b8874[_0xecc0('0xe')]);_0x79cb94[_0xecc0('0x35')]({'id':_0x4b8874['id'],'token':_0x13e37d,'statusCall':'','isAlreadyLogged':_0x4b8874[_0xecc0('0x36')]});}})(_0x1d41d1,_0x79cb94,_0x3c1450);};exports[_0xecc0('0x37')]=function(_0x39c805,_0x409296,_0x37edbc){if(!_0x39c805['body']['email']){return handleError(_0x409296,0x1f4,{'message':_0xecc0('0x38')});}var _0x297394=rs['generate']();_0x39c805[_0xecc0('0x39')][_0xecc0('0x1e')]=_0x39c805[_0xecc0('0x39')][_0xecc0('0x1e')][_0xecc0('0x3a')]()[_0xecc0('0x3b')]();var _0x15b095;return db[_0xecc0('0x7')][_0xecc0('0x8')]({'where':{'id':0x1},'attributes':[_0xecc0('0x9'),_0xecc0('0xa')],'raw':!![]})[_0xecc0('0xb')](function(_0x301c3e){_0x15b095=_0x301c3e;return db[_0xecc0('0x3c')]['find']({'where':{'email':_0x39c805[_0xecc0('0x39')][_0xecc0('0x1e')]}});})['then'](function(_0x5be5d8){if(!_0x5be5d8){throw new Error(_0xecc0('0x3d'));}if(_0x5be5d8[_0xecc0('0xf')]){throw new Error(_0xecc0('0x3e'));}if(_0x5be5d8[_0xecc0('0x10')]){if(moment(_0x5be5d8[_0xecc0('0x11')])['add'](_0x15b095[_0xecc0('0xa')],_0xecc0('0x19'))>moment()){throw new Error(_0xecc0('0x3f'));}else{_0x5be5d8[_0xecc0('0x10')]=![];_0x5be5d8[_0xecc0('0x11')]=null;}}_0x5be5d8['resetPasswordToken']=_0x297394;_0x5be5d8[_0xecc0('0x40')]=Date[_0xecc0('0x41')]()+0x36ee80;return _0x5be5d8[_0xecc0('0x42')]();})['then'](function(){return sendServiceMail({'to':_0x39c805[_0xecc0('0x39')]['email'],'subject':_0xecc0('0x43'),'text':'You\x20are\x20receiving\x20this\x20because\x20you\x20(or\x20someone\x20else)\x20have\x20requested\x20the\x20reset\x20of\x20the\x20password\x20for\x20your\x20account.\x0a\x0a'+_0xecc0('0x44')+_0xecc0('0x45')+_0x39c805[_0xecc0('0x46')][_0xecc0('0x23')]+_0xecc0('0x47')+_0x297394+'\x0a\x0a'+'If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a'});})['then'](function(){_0x409296[_0xecc0('0x30')](0xc8)['send']({'message':'Reset\x20Email\x20sent!'});})['catch'](function(_0x485ded){return handleError(_0x409296,0x1f4,_0x485ded);});};exports['reset']=function(_0x3877e8,_0x18cd89,_0x2fe751){var _0x33b379;return db[_0xecc0('0x3c')][_0xecc0('0x48')]({'where':{'resetPasswordToken':_0x3877e8[_0xecc0('0x49')][_0xecc0('0x4a')],'resetPasswordExpires':{'$gt':Date['now']()}}})[_0xecc0('0xb')](function(_0x254d10){_0x33b379=_0x254d10;if(!_0x33b379){throw new Error(_0xecc0('0x4b'));}return db[_0xecc0('0x7')]['findOne']({'attributes':['id',_0xecc0('0x4c')]});})[_0xecc0('0xb')](function(_0x17a04d){return checkPasswordPattern(_0x17a04d,_0x3877e8[_0xecc0('0x39')][_0xecc0('0xd')],_0x17a04d[_0xecc0('0x4c')]);})[_0xecc0('0xb')](function(){_0x33b379['password']=_0x3877e8[_0xecc0('0x39')][_0xecc0('0xd')];_0x33b379[_0xecc0('0x4d')]=null;_0x33b379[_0xecc0('0x40')]=null;return _0x33b379[_0xecc0('0x42')]();})[_0xecc0('0xb')](function(){_0x18cd89['status'](0xc8)[_0xecc0('0x31')]({'message':_0xecc0('0x4e')});})['catch'](function(_0x245412){return handleError(_0x18cd89,0x1f4,_0x245412);});};passport['use'](new LocalStrategy({'usernameField':'name','passwordField':_0xecc0('0xd')},function(_0x5d9dfc,_0x5d1434,_0x327082){return localAuthenticate(db[_0xecc0('0x3c')],_0x5d9dfc,_0x5d1434,_0x327082);}));
\ No newline at end of file
+var _0xae61=['request','SendMail','error','format','SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!','message','stringify','status','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','login','local','Something\x20went\x20wrong,\x20please\x20try\x20again.','json','online','forgot','body','Email\x20parameter\x20is\x20missing','generate','trim','Setting','User','This\x20email\x20is\x20not\x20registered.','The\x20user\x20is\x20disabled.\x20Please\x20contact\x20the\x20administrator.','The\x20user\x20is\x20blocked.\x20Please\x20contact\x20the\x20administrator.','resetPasswordToken','now','save','You\x20are\x20receiving\x20this\x20because\x20you\x20(or\x20someone\x20else)\x20have\x20requested\x20the\x20reset\x20of\x20the\x20password\x20for\x20your\x20account.\x0a\x0a','Please\x20click\x20on\x20the\x20following\x20link,\x20or\x20paste\x20this\x20into\x20your\x20browser\x20to\x20complete\x20the\x20process:\x0a\x0a','http://','headers','send','Reset\x20Email\x20sent!','reset','token','Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.','securePassword','password','resetPasswordExpires','Password\x20reset!','use','util','passport','passport-local','Strategy','jayson/promise','lodash','randomstring','moment','../../mysqldb','../../components/auth/service','signToken','client','http','findOne','blockDuration','then','name','salt','role','disabled','blocked','loginAttempts','admin','user','agent','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','allowedLoginAttempts','blockedAt','minutes','clearBlockUser','add','getLicense','catch','find','Smtp','Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!','service','host','port','secure','authentication','auth','pass','merge','email'];(function(_0xabb8c0,_0x2bb6f2){var _0x244e48=function(_0x4a4439){while(--_0x4a4439){_0xabb8c0['push'](_0xabb8c0['shift']());}};_0x244e48(++_0x2bb6f2);}(_0xae61,0x12f));var _0x1ae6=function(_0x1b76d3,_0x4146b4){_0x1b76d3=_0x1b76d3-0x0;var _0x7cf2a8=_0xae61[_0x1b76d3];return _0x7cf2a8;};'use strict';var util=require(_0x1ae6('0x0'));var passport=require(_0x1ae6('0x1'));var LocalStrategy=require(_0x1ae6('0x2'))[_0x1ae6('0x3')];var jayson=require(_0x1ae6('0x4'));var _=require(_0x1ae6('0x5'));var rs=require(_0x1ae6('0x6'));var moment=require(_0x1ae6('0x7'));var db=require(_0x1ae6('0x8'))['db'];var signToken=require(_0x1ae6('0x9'))[_0x1ae6('0xa')];var utils=require('../../config/utils');var client=jayson[_0x1ae6('0xb')][_0x1ae6('0xc')]({'port':0x232b});function localAuthenticate(_0x400edb,_0x3bd29e,_0x22dac0,_0x21684a){var _0x1a6f6f,_0x23299d;return db['Setting'][_0x1ae6('0xd')]({'where':{'id':0x1},'attributes':['allowedLoginAttempts',_0x1ae6('0xe')],'raw':!![]})[_0x1ae6('0xf')](function(_0x21aea9){_0x1a6f6f=_0x21aea9;return _0x400edb[_0x1ae6('0xd')]({'attributes':['id',_0x1ae6('0x10'),'password',_0x1ae6('0x11'),_0x1ae6('0x12'),_0x1ae6('0x13'),_0x1ae6('0x14'),'blockedAt',_0x1ae6('0x15')],'where':{'name':_0x3bd29e,'role':{'$or':[_0x1ae6('0x16'),_0x1ae6('0x17'),_0x1ae6('0x18')]}}});})[_0x1ae6('0xf')](function(_0x2992dd){if(!_0x2992dd||_0x2992dd&&_0x2992dd[_0x1ae6('0x10')]!==_0x3bd29e){throw new Error(_0x1ae6('0x19'));}else{_0x23299d=_0x2992dd;return _0x23299d;}})[_0x1ae6('0xf')](function(){_0x23299d['authenticate'](_0x22dac0,function(_0x40d718,_0xa6e0b2){var _0x2aabe0=_0x23299d[_0x1ae6('0x15')]+0x1;if(_0x40d718){return _0x21684a(_0x40d718);}else if(!_0xa6e0b2){if(_0x23299d[_0x1ae6('0x13')]){return _0x21684a(null,![],{'message':_0x1ae6('0x19')});}else if(_0x1a6f6f[_0x1ae6('0x1a')]>0x0){if(_0x23299d['blocked']){if(_0x1a6f6f[_0x1ae6('0xe')]>0x0){if(moment(_0x23299d[_0x1ae6('0x1b')])['add'](_0x1a6f6f['blockDuration'],_0x1ae6('0x1c'))>moment()){return _0x21684a(null,![],{'message':_0x1ae6('0x19')});}else{return utils[_0x1ae6('0x1d')](_0x23299d,_0x2aabe0,![],null)[_0x1ae6('0xf')](function(){return _0x21684a(null,![],{'message':_0x1ae6('0x19')});});}}else{return _0x21684a(null,![],{'message':_0x1ae6('0x19')});}}else{if(_0x2aabe0>=_0x1a6f6f[_0x1ae6('0x1a')]){return utils[_0x1ae6('0x1d')](_0x23299d,0x0,!![],moment())['then'](function(){return _0x21684a(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});});}else{return utils['clearBlockUser'](_0x23299d,_0x2aabe0,![],null)['then'](function(){return _0x21684a(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});});}}}else{return _0x21684a(null,![],{'message':_0x1ae6('0x19')});}}else{if(_0x23299d[_0x1ae6('0x13')]){return _0x21684a(null,![],{'message':_0x1ae6('0x19')});}else if(_0x1a6f6f['allowedLoginAttempts']>0x0){if(_0x23299d[_0x1ae6('0x14')]){if(_0x1a6f6f[_0x1ae6('0xe')]>0x0){if(moment(_0x23299d['blockedAt'])[_0x1ae6('0x1e')](_0x1a6f6f[_0x1ae6('0xe')],_0x1ae6('0x1c'))>moment()){return _0x21684a(null,![],{'message':_0x1ae6('0x19')});}else{return utils[_0x1ae6('0x1d')](_0x23299d,0x0,![],null)[_0x1ae6('0xf')](function(){return utils['getLicense'](_0x23299d);})[_0x1ae6('0xf')](function(){return _0x21684a(null,_0x23299d);});}}else{return _0x21684a(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}}else{return utils[_0x1ae6('0x1d')](_0x23299d,0x0,![],null)['then'](function(){return utils[_0x1ae6('0x1f')](_0x23299d);})['then'](function(){return _0x21684a(null,_0x23299d);})['catch'](function(_0x594964){return _0x21684a(null,![],_0x594964);});}}else{if(_0x23299d['blocked']){return _0x21684a(null,![],{'message':_0x1ae6('0x19')});}else{return utils[_0x1ae6('0x1f')](_0x23299d)['then'](function(){return _0x21684a(null,_0x23299d);});}}}});})[_0x1ae6('0x20')](function(_0x496aaf){return _0x21684a(null,![],_0x496aaf);});}function sendServiceMail(_0x50b861){return db['MailAccount'][_0x1ae6('0x21')]({'where':{'service':!![]},'attributes':['id',_0x1ae6('0x10'),'email'],'include':[{'model':db['MailServerOut'],'as':_0x1ae6('0x22')}]})[_0x1ae6('0xf')](function(_0x55a2b4){if(!_0x55a2b4){throw new Error(_0x1ae6('0x23'));}var _0x361f30={'tls':{'rejectUnauthorized':![]}};if(_0x55a2b4[_0x1ae6('0x22')][_0x1ae6('0x24')]){_0x361f30[_0x1ae6('0x24')]=_0x55a2b4[_0x1ae6('0x22')][_0x1ae6('0x24')];}else{_0x361f30[_0x1ae6('0x25')]=_0x55a2b4[_0x1ae6('0x22')]['host'];_0x361f30[_0x1ae6('0x26')]=_0x55a2b4[_0x1ae6('0x22')]['port'];_0x361f30['secure']=_0x55a2b4[_0x1ae6('0x22')][_0x1ae6('0x27')];}if(_0x55a2b4['Smtp'][_0x1ae6('0x28')]){_0x361f30[_0x1ae6('0x29')]={'user':_0x55a2b4['Smtp']['user'],'pass':_0x55a2b4[_0x1ae6('0x22')][_0x1ae6('0x2a')]};}var _0x1811a3={'account':_0x361f30,'message':_[_0x1ae6('0x2b')]({'from':util['format']('\x22%s\x22\x20<%s>',_0x55a2b4[_0x1ae6('0x10')],_0x55a2b4[_0x1ae6('0x2c')]||_0x55a2b4[_0x1ae6('0x22')][_0x1ae6('0x17')])},_0x50b861)};return client[_0x1ae6('0x2d')](_0x1ae6('0x2e'),_0x1811a3);})[_0x1ae6('0xf')](function(_0x59b04a){if(_0x59b04a[_0x1ae6('0x2f')]){throw new Error(util[_0x1ae6('0x30')](_0x1ae6('0x31'),_0x59b04a[_0x1ae6('0x2f')][_0x1ae6('0x32')]||JSON[_0x1ae6('0x33')](_0x59b04a['error'])));}return!![];});}function handleError(_0x397266,_0x4ecb4a,_0x207c9b){return _0x397266[_0x1ae6('0x34')](_0x4ecb4a||0x1f4)['send']({'message':_0x207c9b?_0x207c9b['message']||_0x207c9b:''});}function checkPasswordPattern(_0x320742,_0x2426bc,_0x248b67){if(_0x248b67){var _0x3e8574=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3e8574[_0x1ae6('0x35')](_0x2426bc)){return _0x320742;}else{throw new Error(_0x1ae6('0x36'));}}else{return _0x320742;}}exports[_0x1ae6('0x37')]=function(_0x20572d,_0x4bb317,_0xba9164){passport['authenticate'](_0x1ae6('0x38'),function(_0x246b84,_0x73582e,_0x340770){var _0x4a2219=_0x246b84||_0x340770;if(_0x4a2219){return handleError(_0x4bb317,0x191,_0x4a2219);}if(!_0x73582e){return handleError(_0x4bb317,0x194,{'message':_0x1ae6('0x39')});}else{var _0x3eb3e0=signToken(_0x73582e['id'],_0x73582e[_0x1ae6('0x12')]);_0x4bb317[_0x1ae6('0x3a')]({'id':_0x73582e['id'],'token':_0x3eb3e0,'statusCall':'','isAlreadyLogged':_0x73582e[_0x1ae6('0x3b')]});}})(_0x20572d,_0x4bb317,_0xba9164);};exports[_0x1ae6('0x3c')]=function(_0x41f13e,_0x3f1fee,_0xff0a53){if(!_0x41f13e[_0x1ae6('0x3d')][_0x1ae6('0x2c')]){return handleError(_0x3f1fee,0x1f4,{'message':_0x1ae6('0x3e')});}var _0x482427=rs[_0x1ae6('0x3f')]();_0x41f13e[_0x1ae6('0x3d')][_0x1ae6('0x2c')]=_0x41f13e[_0x1ae6('0x3d')][_0x1ae6('0x2c')][_0x1ae6('0x40')]()['toLowerCase']();var _0x349fd4;return db[_0x1ae6('0x41')][_0x1ae6('0xd')]({'where':{'id':0x1},'attributes':['allowedLoginAttempts',_0x1ae6('0xe')],'raw':!![]})[_0x1ae6('0xf')](function(_0x4f668c){_0x349fd4=_0x4f668c;return db[_0x1ae6('0x42')][_0x1ae6('0x21')]({'where':{'email':_0x41f13e[_0x1ae6('0x3d')][_0x1ae6('0x2c')]}});})[_0x1ae6('0xf')](function(_0x247d8c){if(!_0x247d8c){throw new Error(_0x1ae6('0x43'));}if(_0x247d8c[_0x1ae6('0x13')]){throw new Error(_0x1ae6('0x44'));}if(_0x247d8c[_0x1ae6('0x14')]){if(moment(_0x247d8c[_0x1ae6('0x1b')])[_0x1ae6('0x1e')](_0x349fd4[_0x1ae6('0xe')],_0x1ae6('0x1c'))>moment()){throw new Error(_0x1ae6('0x45'));}else{_0x247d8c[_0x1ae6('0x14')]=![];_0x247d8c[_0x1ae6('0x1b')]=null;}}_0x247d8c[_0x1ae6('0x46')]=_0x482427;_0x247d8c['resetPasswordExpires']=Date[_0x1ae6('0x47')]()+0x36ee80;return _0x247d8c[_0x1ae6('0x48')]();})[_0x1ae6('0xf')](function(){return sendServiceMail({'to':_0x41f13e[_0x1ae6('0x3d')][_0x1ae6('0x2c')],'subject':'xCally\x20Motion\x20Password\x20Reset','text':_0x1ae6('0x49')+_0x1ae6('0x4a')+_0x1ae6('0x4b')+_0x41f13e[_0x1ae6('0x4c')][_0x1ae6('0x25')]+'/reset/'+_0x482427+'\x0a\x0a'+'If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a'});})[_0x1ae6('0xf')](function(){_0x3f1fee['status'](0xc8)[_0x1ae6('0x4d')]({'message':_0x1ae6('0x4e')});})['catch'](function(_0x5e530a){return handleError(_0x3f1fee,0x1f4,_0x5e530a);});};exports[_0x1ae6('0x4f')]=function(_0xda44ef,_0x3f35e4,_0x123561){var _0x51e8b4;return db[_0x1ae6('0x42')]['find']({'where':{'resetPasswordToken':_0xda44ef['params'][_0x1ae6('0x50')],'resetPasswordExpires':{'$gt':Date['now']()}}})[_0x1ae6('0xf')](function(_0x58b71a){_0x51e8b4=_0x58b71a;if(!_0x51e8b4){throw new Error(_0x1ae6('0x51'));}return db['Setting']['findOne']({'attributes':['id',_0x1ae6('0x52')]});})[_0x1ae6('0xf')](function(_0x5106a6){return checkPasswordPattern(_0x5106a6,_0xda44ef[_0x1ae6('0x3d')][_0x1ae6('0x53')],_0x5106a6[_0x1ae6('0x52')]);})['then'](function(){_0x51e8b4[_0x1ae6('0x53')]=_0xda44ef[_0x1ae6('0x3d')][_0x1ae6('0x53')];_0x51e8b4['resetPasswordToken']=null;_0x51e8b4[_0x1ae6('0x54')]=null;return _0x51e8b4[_0x1ae6('0x48')]();})[_0x1ae6('0xf')](function(){_0x3f35e4[_0x1ae6('0x34')](0xc8)['send']({'message':_0x1ae6('0x55')});})['catch'](function(_0x42dc78){return handleError(_0x3f35e4,0x1f4,_0x42dc78);});};passport[_0x1ae6('0x56')](new LocalStrategy({'usernameField':_0x1ae6('0x10'),'passwordField':_0x1ae6('0x53')},function(_0x4c2708,_0x196ab4,_0x3752c4){return localAuthenticate(db['User'],_0x4c2708,_0x196ab4,_0x3752c4);}));
\ No newline at end of file
index 59a7b98..6e9bd0a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe8a6=['Router','post','login','/forgot','/reset/:token','reset','exports'];(function(_0x2aa0e7,_0x4e5145){var _0x1472c0=function(_0x4deaeb){while(--_0x4deaeb){_0x2aa0e7['push'](_0x2aa0e7['shift']());}};_0x1472c0(++_0x4e5145);}(_0xe8a6,0x1dc));var _0x6e8a=function(_0x5e6943,_0x3cc8c2){_0x5e6943=_0x5e6943-0x0;var _0x935eb1=_0xe8a6[_0x5e6943];return _0x935eb1;};'use strict';var express=require('express');var router=express[_0x6e8a('0x0')]();var controller=require('./authLocal.controller');router[_0x6e8a('0x1')]('/',controller[_0x6e8a('0x2')]);router[_0x6e8a('0x1')](_0x6e8a('0x3'),controller['forgot']);router[_0x6e8a('0x1')](_0x6e8a('0x4'),controller[_0x6e8a('0x5')]);module[_0x6e8a('0x6')]=router;
\ No newline at end of file
+var _0x14cd=['reset','express','Router','./authLocal.controller','post','login','/forgot','/reset/:token'];(function(_0x2765ef,_0x45e7d3){var _0x2aae1a=function(_0x32a331){while(--_0x32a331){_0x2765ef['push'](_0x2765ef['shift']());}};_0x2aae1a(++_0x45e7d3);}(_0x14cd,0x89));var _0xd14c=function(_0x45e13b,_0x4b17c8){_0x45e13b=_0x45e13b-0x0;var _0x358ba1=_0x14cd[_0x45e13b];return _0x358ba1;};'use strict';var express=require(_0xd14c('0x0'));var router=express[_0xd14c('0x1')]();var controller=require(_0xd14c('0x2'));router[_0xd14c('0x3')]('/',controller[_0xd14c('0x4')]);router[_0xd14c('0x3')](_0xd14c('0x5'),controller['forgot']);router[_0xd14c('0x3')](_0xd14c('0x6'),controller[_0xd14c('0x7')]);module['exports']=router;
\ No newline at end of file
index 0f12b97..3da1263 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd6ab=['BOOLEAN','INTEGER','sequelize','exports','STRING'];(function(_0x5b78e8,_0x55096b){var _0xf2c321=function(_0x4e0cff){while(--_0x4e0cff){_0x5b78e8['push'](_0x5b78e8['shift']());}};_0xf2c321(++_0x55096b);}(_0xd6ab,0x124));var _0xbd6a=function(_0x5195c3,_0x591d50){_0x5195c3=_0x5195c3-0x0;var _0x541d40=_0xd6ab[_0x5195c3];return _0x541d40;};'use strict';var Sequelize=require(_0xbd6a('0x0'));module[_0xbd6a('0x1')]={'name':{'type':Sequelize[_0xbd6a('0x2')],'allowNull':![]},'channel':{'type':Sequelize[_0xbd6a('0x2')]},'description':{'type':Sequelize[_0xbd6a('0x2')]},'status':{'type':Sequelize[_0xbd6a('0x3')],'defaultValue':![]},'timeout':{'type':Sequelize[_0xbd6a('0x4')],'defaultValue':0xa}};
\ No newline at end of file
+var _0x88f8=['STRING','INTEGER','exports'];(function(_0x292d66,_0x32c823){var _0x4fd314=function(_0x454727){while(--_0x454727){_0x292d66['push'](_0x292d66['shift']());}};_0x4fd314(++_0x32c823);}(_0x88f8,0xd4));var _0x888f=function(_0x258702,_0x3b72fe){_0x258702=_0x258702-0x0;var _0x1f080e=_0x88f8[_0x258702];return _0x1f080e;};'use strict';var Sequelize=require('sequelize');module[_0x888f('0x0')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'channel':{'type':Sequelize[_0x888f('0x1')]},'description':{'type':Sequelize[_0x888f('0x1')]},'status':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'timeout':{'type':Sequelize[_0x888f('0x2')],'defaultValue':0xa}};
\ No newline at end of file
index 7c2b172..665b258 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x00c2=['includeAll','findAll','rows','catch','params','length','include','options','create','body','update','find','addConditions','ids','omit','getConditions','findOne','Condition','pick','addActions','Action','getActions','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','set','apply','reject','destroy','sendStatus','stack','name','index','Automation','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','filter','map','type','VIRTUAL','merge','then'];(function(_0x5f3f88,_0x562baf){var _0xd08119=function(_0x42dbf7){while(--_0x42dbf7){_0x5f3f88['push'](_0x5f3f88['shift']());}};_0xd08119(++_0x562baf);}(_0x00c2,0x16e));var _0x200c=function(_0x1facfa,_0x1acf7d){_0x1facfa=_0x1facfa-0x0;var _0x9ec701=_0x00c2[_0x1facfa];return _0x9ec701;};'use strict';var pdf=require(_0x200c('0x0'));var emlformat=require(_0x200c('0x1'));var rimraf=require(_0x200c('0x2'));var zipdir=require(_0x200c('0x3'));var jsonpatch=require(_0x200c('0x4'));var rp=require(_0x200c('0x5'));var moment=require(_0x200c('0x6'));var BPromise=require(_0x200c('0x7'));var Mustache=require(_0x200c('0x8'));var util=require(_0x200c('0x9'));var path=require(_0x200c('0xa'));var sox=require(_0x200c('0xb'));var csv=require(_0x200c('0xc'));var ejs=require(_0x200c('0xd'));var fs=require('fs');var _=require(_0x200c('0xe'));var squel=require(_0x200c('0xf'));var crypto=require(_0x200c('0x10'));var jsforce=require(_0x200c('0x11'));var deskjs=require(_0x200c('0x12'));var toCsv=require(_0x200c('0xc'));var querystring=require(_0x200c('0x13'));var Papa=require(_0x200c('0x14'));var Redis=require(_0x200c('0x15'));var authService=require(_0x200c('0x16'));var qs=require(_0x200c('0x17'));var hardwareService=require(_0x200c('0x18'));var logger=require(_0x200c('0x19'))(_0x200c('0x1a'));var utils=require(_0x200c('0x1b'));var config=require(_0x200c('0x1c'));var db=require(_0x200c('0x1d'))['db'];function respondWithStatusCode(_0x1a05e1,_0x817592){_0x817592=_0x817592||0xcc;return function(_0x5143db){if(_0x5143db){return _0x1a05e1['sendStatus'](_0x817592);}return _0x1a05e1[_0x200c('0x1e')](_0x817592)[_0x200c('0x1f')]();};}function respondWithResult(_0x89deba,_0x49697b){_0x49697b=_0x49697b||0xc8;return function(_0x4fa735){if(_0x4fa735){return _0x89deba[_0x200c('0x1e')](_0x49697b)[_0x200c('0x20')](_0x4fa735);}};}function respondWithFilteredResult(_0x3e5a55,_0x236892){return function(_0x465f55){if(_0x465f55){var _0x18e3fb=_0x465f55[_0x200c('0x21')],_0x290fcd=_0x236892['offset'],_0x17bc61=_0x236892[_0x200c('0x22')]+_0x236892[_0x200c('0x23')],_0x19fd45;if(_0x17bc61>=_0x18e3fb){_0x17bc61=_0x18e3fb;_0x19fd45=0xc8;}else{_0x19fd45=0xce;}_0x3e5a55['status'](_0x19fd45);return _0x3e5a55[_0x200c('0x24')]('Content-Range',_0x290fcd+'-'+_0x17bc61+'/'+_0x18e3fb)[_0x200c('0x20')](_0x465f55);}return null;};}function patchUpdates(_0x8d08af){return function(_0x1dab30){try{jsonpatch[_0x200c('0x25')](_0x1dab30,_0x8d08af,!![]);}catch(_0x2d2592){return BPromise[_0x200c('0x26')](_0x2d2592);}return _0x1dab30['save']();};}function saveUpdates(_0x3c24cd,_0x11524a){return function(_0x13120d){if(_0x13120d){return _0x13120d['update'](_0x3c24cd)['then'](function(_0x203392){return _0x203392;});}return null;};}function removeEntity(_0x109f92,_0x3f3ab4){return function(_0x4749f4){if(_0x4749f4){return _0x4749f4[_0x200c('0x27')]()['then'](function(){_0x109f92[_0x200c('0x1e')](0xcc)[_0x200c('0x1f')]();});}};}function handleEntityNotFound(_0x5423ef,_0x5a93c4){return function(_0x1b9b25){if(!_0x1b9b25){_0x5423ef[_0x200c('0x28')](0x194);}return _0x1b9b25;};}function handleError(_0x4c8443,_0x66541f){_0x66541f=_0x66541f||0x1f4;return function(_0x156ff9){logger['error'](_0x156ff9[_0x200c('0x29')]);if(_0x156ff9[_0x200c('0x2a')]){delete _0x156ff9[_0x200c('0x2a')];}_0x4c8443['status'](_0x66541f)['send'](_0x156ff9);};}exports[_0x200c('0x2b')]=function(_0x5ade71,_0xb5367c){var _0x1ba695={},_0x594641={},_0xb5d171={'count':0x0,'rows':[]};var _0x499fbe=db[_0x200c('0x2c')][_0x200c('0x2d')];_0x594641[_0x200c('0x2e')]=_[_0x200c('0x2f')](_0x499fbe);_0x594641[_0x200c('0x30')]=_['keys'](_0x5ade71['query']);_0x594641[_0x200c('0x31')]=_[_0x200c('0x32')](_0x594641['model'],_0x594641[_0x200c('0x30')]);_0x1ba695[_0x200c('0x33')]=_['intersection'](_0x594641[_0x200c('0x2e')],qs[_0x200c('0x34')](_0x5ade71[_0x200c('0x30')][_0x200c('0x34')]));_0x1ba695['attributes']=_0x1ba695[_0x200c('0x33')]['length']?_0x1ba695[_0x200c('0x33')]:_0x594641['model'];if(!_0x5ade71['query'][_0x200c('0x35')](_0x200c('0x36'))){_0x1ba695[_0x200c('0x23')]=qs[_0x200c('0x23')](_0x5ade71[_0x200c('0x30')][_0x200c('0x23')]);_0x1ba695[_0x200c('0x22')]=qs['offset'](_0x5ade71[_0x200c('0x30')][_0x200c('0x22')]);}_0x1ba695[_0x200c('0x37')]=qs['sort'](_0x5ade71[_0x200c('0x30')][_0x200c('0x38')]);_0x1ba695[_0x200c('0x39')]=qs[_0x200c('0x31')](_['pick'](_0x5ade71[_0x200c('0x30')],_0x594641[_0x200c('0x31')]));if(_0x5ade71['query'][_0x200c('0x3a')]){_0x1ba695['where']=_['merge'](_0x1ba695[_0x200c('0x39')],{'$or':_[_0x200c('0x3b')](_0x499fbe,function(_0x3976ff){if(_0x3976ff[_0x200c('0x3c')]['key']!==_0x200c('0x3d')){var _0x289afc={};_0x289afc[_0x3976ff['field']]={'$like':'%'+_0x5ade71[_0x200c('0x30')][_0x200c('0x3a')]+'%'};return _0x289afc;}})});}_0x1ba695=_[_0x200c('0x3e')]({},_0x1ba695,_0x5ade71['options']);var _0x4e35ff={'where':_0x1ba695[_0x200c('0x39')]};return db[_0x200c('0x2c')][_0x200c('0x21')](_0x4e35ff)[_0x200c('0x3f')](function(_0x9b0613){_0xb5d171[_0x200c('0x21')]=_0x9b0613;if(_0x5ade71[_0x200c('0x30')][_0x200c('0x40')]){_0x1ba695['include']=[{'all':!![]}];}return db[_0x200c('0x2c')][_0x200c('0x41')](_0x1ba695);})['then'](function(_0x469921){_0xb5d171[_0x200c('0x42')]=_0x469921;return _0xb5d171;})['then'](respondWithFilteredResult(_0xb5367c,_0x1ba695))[_0x200c('0x43')](handleError(_0xb5367c,null));};exports['show']=function(_0x3da7d6,_0x359693){var _0x462414={'raw':![],'where':{'id':_0x3da7d6[_0x200c('0x44')]['id']}},_0x205adf={};_0x205adf['model']=_[_0x200c('0x2f')](db[_0x200c('0x2c')][_0x200c('0x2d')]);_0x205adf[_0x200c('0x30')]=_['keys'](_0x3da7d6['query']);_0x205adf[_0x200c('0x31')]=_[_0x200c('0x32')](_0x205adf[_0x200c('0x2e')],_0x205adf['query']);_0x462414[_0x200c('0x33')]=_[_0x200c('0x32')](_0x205adf[_0x200c('0x2e')],qs[_0x200c('0x34')](_0x3da7d6[_0x200c('0x30')]['fields']));_0x462414[_0x200c('0x33')]=_0x462414[_0x200c('0x33')][_0x200c('0x45')]?_0x462414[_0x200c('0x33')]:_0x205adf[_0x200c('0x2e')];if(_0x3da7d6[_0x200c('0x30')][_0x200c('0x40')]){_0x462414[_0x200c('0x46')]=[{'all':!![]}];}_0x462414=_[_0x200c('0x3e')]({},_0x462414,_0x3da7d6[_0x200c('0x47')]);return db[_0x200c('0x2c')]['find'](_0x462414)[_0x200c('0x3f')](handleEntityNotFound(_0x359693,null))[_0x200c('0x3f')](respondWithResult(_0x359693,null))[_0x200c('0x43')](handleError(_0x359693,null));};exports[_0x200c('0x48')]=function(_0x1e9a46,_0x71c0be){return db[_0x200c('0x2c')][_0x200c('0x48')](_0x1e9a46[_0x200c('0x49')],{})[_0x200c('0x3f')](respondWithResult(_0x71c0be,0xc9))[_0x200c('0x43')](handleError(_0x71c0be,null));};exports[_0x200c('0x4a')]=function(_0x1a60e9,_0x24b2b5){if(_0x1a60e9['body']['id']){delete _0x1a60e9[_0x200c('0x49')]['id'];}return db[_0x200c('0x2c')][_0x200c('0x4b')]({'where':{'id':_0x1a60e9[_0x200c('0x44')]['id']}})['then'](handleEntityNotFound(_0x24b2b5,null))[_0x200c('0x3f')](saveUpdates(_0x1a60e9['body'],null))[_0x200c('0x3f')](respondWithResult(_0x24b2b5,null))['catch'](handleError(_0x24b2b5,null));};exports[_0x200c('0x27')]=function(_0x36bc2d,_0x13f4fd){return db[_0x200c('0x2c')][_0x200c('0x4b')]({'where':{'id':_0x36bc2d[_0x200c('0x44')]['id']}})[_0x200c('0x3f')](handleEntityNotFound(_0x13f4fd,null))[_0x200c('0x3f')](removeEntity(_0x13f4fd,null))[_0x200c('0x43')](handleError(_0x13f4fd,null));};exports[_0x200c('0x4c')]=function(_0x133b22,_0x50981a,_0xb8b899){return db['Condition'][_0x200c('0x4b')]({'where':{'id':_0x133b22[_0x200c('0x44')]['id']}})[_0x200c('0x3f')](handleEntityNotFound(_0x50981a,null))[_0x200c('0x3f')](function(_0x573675){if(_0x573675){return _0x573675['addConditions'](_0x133b22[_0x200c('0x49')][_0x200c('0x4d')],_[_0x200c('0x4e')](_0x133b22['body'],[_0x200c('0x4d'),'id'])||{});}})[_0x200c('0x3f')](respondWithResult(_0x50981a,null))[_0x200c('0x43')](handleError(_0x50981a,null));};exports[_0x200c('0x4f')]=function(_0x2eaeaf,_0x54df59,_0x2fca46){var _0x23df4d={};var _0x1cd73a={};var _0xd4b396;var _0x25ef59;return db['Automation'][_0x200c('0x50')]({'where':{'id':_0x2eaeaf[_0x200c('0x44')]['id']}})['then'](handleEntityNotFound(_0x54df59,null))[_0x200c('0x3f')](function(_0x4d96b9){if(_0x4d96b9){_0xd4b396=_0x4d96b9;_0x1cd73a[_0x200c('0x2e')]=_['keys'](db[_0x200c('0x51')]['rawAttributes']);_0x1cd73a[_0x200c('0x30')]=_[_0x200c('0x2f')](_0x2eaeaf[_0x200c('0x30')]);_0x1cd73a[_0x200c('0x31')]=_[_0x200c('0x32')](_0x1cd73a[_0x200c('0x2e')],_0x1cd73a['query']);_0x23df4d[_0x200c('0x33')]=_['intersection'](_0x1cd73a[_0x200c('0x2e')],qs[_0x200c('0x34')](_0x2eaeaf[_0x200c('0x30')]['fields']));_0x23df4d[_0x200c('0x33')]=_0x23df4d[_0x200c('0x33')]['length']?_0x23df4d[_0x200c('0x33')]:_0x1cd73a[_0x200c('0x2e')];_0x23df4d['order']=qs['sort'](_0x2eaeaf['query']['sort']);_0x23df4d[_0x200c('0x39')]=qs['filters'](_[_0x200c('0x52')](_0x2eaeaf[_0x200c('0x30')],_0x1cd73a['filters']));if(_0x2eaeaf[_0x200c('0x30')][_0x200c('0x3a')]){_0x23df4d[_0x200c('0x39')]=_[_0x200c('0x3e')](_0x23df4d[_0x200c('0x39')],{'$or':_[_0x200c('0x3b')](_0x23df4d[_0x200c('0x33')],function(_0x1b0aa6){var _0x786dbe={};_0x786dbe[_0x1b0aa6]={'$like':'%'+_0x2eaeaf['query'][_0x200c('0x3a')]+'%'};return _0x786dbe;})});}_0x23df4d=_[_0x200c('0x3e')]({},_0x23df4d,_0x2eaeaf[_0x200c('0x47')]);return _0xd4b396[_0x200c('0x4f')](_0x23df4d);}})[_0x200c('0x3f')](function(_0x281a42){if(_0x281a42){_0x25ef59=_0x281a42[_0x200c('0x45')];if(!_0x2eaeaf[_0x200c('0x30')][_0x200c('0x35')](_0x200c('0x36'))){_0x23df4d[_0x200c('0x23')]=qs[_0x200c('0x23')](_0x2eaeaf[_0x200c('0x30')][_0x200c('0x23')]);_0x23df4d[_0x200c('0x22')]=qs[_0x200c('0x22')](_0x2eaeaf[_0x200c('0x30')]['offset']);}return _0xd4b396['getConditions'](_0x23df4d);}})[_0x200c('0x3f')](function(_0xd8c238){if(_0xd8c238){return _0xd8c238?{'count':_0x25ef59,'rows':_0xd8c238}:null;}})[_0x200c('0x3f')](respondWithResult(_0x54df59,null))['catch'](handleError(_0x54df59,null));};exports[_0x200c('0x53')]=function(_0x2705d4,_0x29ac0b,_0x49a292){return db[_0x200c('0x54')][_0x200c('0x4b')]({'where':{'id':_0x2705d4[_0x200c('0x44')]['id']}})[_0x200c('0x3f')](handleEntityNotFound(_0x29ac0b,null))['then'](function(_0x108d21){if(_0x108d21){return _0x108d21[_0x200c('0x53')](_0x2705d4['body'][_0x200c('0x4d')],_[_0x200c('0x4e')](_0x2705d4[_0x200c('0x49')],[_0x200c('0x4d'),'id'])||{});}})['then'](respondWithResult(_0x29ac0b,null))[_0x200c('0x43')](handleError(_0x29ac0b,null));};exports[_0x200c('0x55')]=function(_0x495dcd,_0x401652,_0x387198){var _0x4d81cc={};var _0x5541ec={};var _0x403ec3;var _0x2ae5eb;return db[_0x200c('0x2c')][_0x200c('0x50')]({'where':{'id':_0x495dcd[_0x200c('0x44')]['id']}})['then'](handleEntityNotFound(_0x401652,null))[_0x200c('0x3f')](function(_0x4e2130){if(_0x4e2130){_0x403ec3=_0x4e2130;_0x5541ec[_0x200c('0x2e')]=_[_0x200c('0x2f')](db[_0x200c('0x54')][_0x200c('0x2d')]);_0x5541ec['query']=_[_0x200c('0x2f')](_0x495dcd[_0x200c('0x30')]);_0x5541ec[_0x200c('0x31')]=_[_0x200c('0x32')](_0x5541ec[_0x200c('0x2e')],_0x5541ec[_0x200c('0x30')]);_0x4d81cc['attributes']=_[_0x200c('0x32')](_0x5541ec[_0x200c('0x2e')],qs[_0x200c('0x34')](_0x495dcd[_0x200c('0x30')][_0x200c('0x34')]));_0x4d81cc[_0x200c('0x33')]=_0x4d81cc[_0x200c('0x33')][_0x200c('0x45')]?_0x4d81cc[_0x200c('0x33')]:_0x5541ec['model'];_0x4d81cc[_0x200c('0x37')]=qs[_0x200c('0x38')](_0x495dcd[_0x200c('0x30')][_0x200c('0x38')]);_0x4d81cc[_0x200c('0x39')]=qs[_0x200c('0x31')](_[_0x200c('0x52')](_0x495dcd[_0x200c('0x30')],_0x5541ec[_0x200c('0x31')]));if(_0x495dcd[_0x200c('0x30')]['filter']){_0x4d81cc[_0x200c('0x39')]=_['merge'](_0x4d81cc['where'],{'$or':_[_0x200c('0x3b')](_0x4d81cc['attributes'],function(_0x355daa){var _0xb847a5={};_0xb847a5[_0x355daa]={'$like':'%'+_0x495dcd[_0x200c('0x30')][_0x200c('0x3a')]+'%'};return _0xb847a5;})});}_0x4d81cc=_[_0x200c('0x3e')]({},_0x4d81cc,_0x495dcd[_0x200c('0x47')]);return _0x403ec3['getActions'](_0x4d81cc);}})['then'](function(_0xd4d696){if(_0xd4d696){_0x2ae5eb=_0xd4d696[_0x200c('0x45')];if(!_0x495dcd['query'][_0x200c('0x35')]('nolimit')){_0x4d81cc[_0x200c('0x23')]=qs[_0x200c('0x23')](_0x495dcd['query'][_0x200c('0x23')]);_0x4d81cc[_0x200c('0x22')]=qs[_0x200c('0x22')](_0x495dcd[_0x200c('0x30')][_0x200c('0x22')]);}return _0x403ec3[_0x200c('0x55')](_0x4d81cc);}})[_0x200c('0x3f')](function(_0x5a78b2){if(_0x5a78b2){return _0x5a78b2?{'count':_0x2ae5eb,'rows':_0x5a78b2}:null;}})[_0x200c('0x3f')](respondWithResult(_0x401652,null))[_0x200c('0x43')](handleError(_0x401652,null));};
\ No newline at end of file
+var _0xdd2a=['filters','intersection','model','length','attributes','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','map','type','key','VIRTUAL','field','options','count','includeAll','include','findAll','rows','catch','show','fields','find','create','body','params','addConditions','Condition','ids','omit','getConditions','findOne','rawAttributes','addActions','Action','getActions','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','offset','limit','set','Content-Range','apply','save','update','then','destroy','error','name','Automation','keys','query'];(function(_0x56bb63,_0x3e165b){var _0x56a7ec=function(_0x5a1103){while(--_0x5a1103){_0x56bb63['push'](_0x56bb63['shift']());}};_0x56a7ec(++_0x3e165b);}(_0xdd2a,0x7a));var _0xadd2=function(_0x23666d,_0x2c79a6){_0x23666d=_0x23666d-0x0;var _0x115e21=_0xdd2a[_0x23666d];return _0x115e21;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xadd2('0x0'));var zipdir=require(_0xadd2('0x1'));var jsonpatch=require(_0xadd2('0x2'));var rp=require(_0xadd2('0x3'));var moment=require(_0xadd2('0x4'));var BPromise=require(_0xadd2('0x5'));var Mustache=require('mustache');var util=require(_0xadd2('0x6'));var path=require(_0xadd2('0x7'));var sox=require('sox');var csv=require(_0xadd2('0x8'));var ejs=require(_0xadd2('0x9'));var fs=require('fs');var _=require(_0xadd2('0xa'));var squel=require(_0xadd2('0xb'));var crypto=require('crypto');var jsforce=require(_0xadd2('0xc'));var deskjs=require(_0xadd2('0xd'));var toCsv=require(_0xadd2('0x8'));var querystring=require(_0xadd2('0xe'));var Papa=require(_0xadd2('0xf'));var Redis=require(_0xadd2('0x10'));var authService=require(_0xadd2('0x11'));var qs=require(_0xadd2('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xadd2('0x13'))(_0xadd2('0x14'));var utils=require(_0xadd2('0x15'));var config=require('../../config/environment');var db=require(_0xadd2('0x16'))['db'];function respondWithStatusCode(_0x2e5460,_0xfde5c2){_0xfde5c2=_0xfde5c2||0xcc;return function(_0x5d304a){if(_0x5d304a){return _0x2e5460[_0xadd2('0x17')](_0xfde5c2);}return _0x2e5460[_0xadd2('0x18')](_0xfde5c2)[_0xadd2('0x19')]();};}function respondWithResult(_0x2e9052,_0x40cbd3){_0x40cbd3=_0x40cbd3||0xc8;return function(_0x4ad08a){if(_0x4ad08a){return _0x2e9052[_0xadd2('0x18')](_0x40cbd3)['json'](_0x4ad08a);}};}function respondWithFilteredResult(_0x15facd,_0x2a6154){return function(_0x3d4452){if(_0x3d4452){var _0x2e25f7=_0x3d4452['count'],_0x522d68=_0x2a6154[_0xadd2('0x1a')],_0x4c78de=_0x2a6154[_0xadd2('0x1a')]+_0x2a6154[_0xadd2('0x1b')],_0x2aae5e;if(_0x4c78de>=_0x2e25f7){_0x4c78de=_0x2e25f7;_0x2aae5e=0xc8;}else{_0x2aae5e=0xce;}_0x15facd[_0xadd2('0x18')](_0x2aae5e);return _0x15facd[_0xadd2('0x1c')](_0xadd2('0x1d'),_0x522d68+'-'+_0x4c78de+'/'+_0x2e25f7)['json'](_0x3d4452);}return null;};}function patchUpdates(_0x4696df){return function(_0x1a973d){try{jsonpatch[_0xadd2('0x1e')](_0x1a973d,_0x4696df,!![]);}catch(_0x3f771a){return BPromise['reject'](_0x3f771a);}return _0x1a973d[_0xadd2('0x1f')]();};}function saveUpdates(_0x450ccb,_0x3930fe){return function(_0x33ec52){if(_0x33ec52){return _0x33ec52[_0xadd2('0x20')](_0x450ccb)[_0xadd2('0x21')](function(_0x26b340){return _0x26b340;});}return null;};}function removeEntity(_0x48de37,_0x4293f2){return function(_0xf3598f){if(_0xf3598f){return _0xf3598f[_0xadd2('0x22')]()[_0xadd2('0x21')](function(){_0x48de37[_0xadd2('0x18')](0xcc)[_0xadd2('0x19')]();});}};}function handleEntityNotFound(_0x267def,_0x481a25){return function(_0x524430){if(!_0x524430){_0x267def['sendStatus'](0x194);}return _0x524430;};}function handleError(_0x28fa16,_0x3f28c6){_0x3f28c6=_0x3f28c6||0x1f4;return function(_0xf0f205){logger[_0xadd2('0x23')](_0xf0f205['stack']);if(_0xf0f205[_0xadd2('0x24')]){delete _0xf0f205[_0xadd2('0x24')];}_0x28fa16[_0xadd2('0x18')](_0x3f28c6)['send'](_0xf0f205);};}exports['index']=function(_0x3d5e0e,_0x471f7a){var _0xe294f4={},_0x422c7c={},_0x3053ba={'count':0x0,'rows':[]};var _0x551dc3=db[_0xadd2('0x25')]['rawAttributes'];_0x422c7c['model']=_[_0xadd2('0x26')](_0x551dc3);_0x422c7c[_0xadd2('0x27')]=_[_0xadd2('0x26')](_0x3d5e0e[_0xadd2('0x27')]);_0x422c7c[_0xadd2('0x28')]=_[_0xadd2('0x29')](_0x422c7c[_0xadd2('0x2a')],_0x422c7c['query']);_0xe294f4['attributes']=_[_0xadd2('0x29')](_0x422c7c[_0xadd2('0x2a')],qs['fields'](_0x3d5e0e['query']['fields']));_0xe294f4['attributes']=_0xe294f4['attributes'][_0xadd2('0x2b')]?_0xe294f4[_0xadd2('0x2c')]:_0x422c7c[_0xadd2('0x2a')];if(!_0x3d5e0e[_0xadd2('0x27')][_0xadd2('0x2d')](_0xadd2('0x2e'))){_0xe294f4['limit']=qs['limit'](_0x3d5e0e[_0xadd2('0x27')]['limit']);_0xe294f4['offset']=qs['offset'](_0x3d5e0e[_0xadd2('0x27')][_0xadd2('0x1a')]);}_0xe294f4[_0xadd2('0x2f')]=qs[_0xadd2('0x30')](_0x3d5e0e[_0xadd2('0x27')][_0xadd2('0x30')]);_0xe294f4['where']=qs[_0xadd2('0x28')](_[_0xadd2('0x31')](_0x3d5e0e[_0xadd2('0x27')],_0x422c7c['filters']));if(_0x3d5e0e['query'][_0xadd2('0x32')]){_0xe294f4[_0xadd2('0x33')]=_[_0xadd2('0x34')](_0xe294f4[_0xadd2('0x33')],{'$or':_[_0xadd2('0x35')](_0x551dc3,function(_0x498818){if(_0x498818[_0xadd2('0x36')][_0xadd2('0x37')]!==_0xadd2('0x38')){var _0x119609={};_0x119609[_0x498818[_0xadd2('0x39')]]={'$like':'%'+_0x3d5e0e[_0xadd2('0x27')][_0xadd2('0x32')]+'%'};return _0x119609;}})});}_0xe294f4=_[_0xadd2('0x34')]({},_0xe294f4,_0x3d5e0e[_0xadd2('0x3a')]);var _0x4a1656={'where':_0xe294f4['where']};return db[_0xadd2('0x25')][_0xadd2('0x3b')](_0x4a1656)[_0xadd2('0x21')](function(_0x33ba51){_0x3053ba[_0xadd2('0x3b')]=_0x33ba51;if(_0x3d5e0e[_0xadd2('0x27')][_0xadd2('0x3c')]){_0xe294f4[_0xadd2('0x3d')]=[{'all':!![]}];}return db['Automation'][_0xadd2('0x3e')](_0xe294f4);})[_0xadd2('0x21')](function(_0x4c09d1){_0x3053ba[_0xadd2('0x3f')]=_0x4c09d1;return _0x3053ba;})[_0xadd2('0x21')](respondWithFilteredResult(_0x471f7a,_0xe294f4))[_0xadd2('0x40')](handleError(_0x471f7a,null));};exports[_0xadd2('0x41')]=function(_0x3f2423,_0x19c936){var _0x5a8aab={'raw':![],'where':{'id':_0x3f2423['params']['id']}},_0x801a37={};_0x801a37[_0xadd2('0x2a')]=_['keys'](db['Automation']['rawAttributes']);_0x801a37[_0xadd2('0x27')]=_[_0xadd2('0x26')](_0x3f2423['query']);_0x801a37[_0xadd2('0x28')]=_[_0xadd2('0x29')](_0x801a37[_0xadd2('0x2a')],_0x801a37[_0xadd2('0x27')]);_0x5a8aab[_0xadd2('0x2c')]=_[_0xadd2('0x29')](_0x801a37['model'],qs['fields'](_0x3f2423['query'][_0xadd2('0x42')]));_0x5a8aab['attributes']=_0x5a8aab[_0xadd2('0x2c')]['length']?_0x5a8aab[_0xadd2('0x2c')]:_0x801a37[_0xadd2('0x2a')];if(_0x3f2423[_0xadd2('0x27')][_0xadd2('0x3c')]){_0x5a8aab[_0xadd2('0x3d')]=[{'all':!![]}];}_0x5a8aab=_['merge']({},_0x5a8aab,_0x3f2423[_0xadd2('0x3a')]);return db[_0xadd2('0x25')][_0xadd2('0x43')](_0x5a8aab)[_0xadd2('0x21')](handleEntityNotFound(_0x19c936,null))['then'](respondWithResult(_0x19c936,null))[_0xadd2('0x40')](handleError(_0x19c936,null));};exports[_0xadd2('0x44')]=function(_0x2bfae6,_0x11ffb7){return db['Automation'][_0xadd2('0x44')](_0x2bfae6[_0xadd2('0x45')],{})[_0xadd2('0x21')](respondWithResult(_0x11ffb7,0xc9))['catch'](handleError(_0x11ffb7,null));};exports[_0xadd2('0x20')]=function(_0x563488,_0x177be5){if(_0x563488[_0xadd2('0x45')]['id']){delete _0x563488['body']['id'];}return db['Automation'][_0xadd2('0x43')]({'where':{'id':_0x563488[_0xadd2('0x46')]['id']}})[_0xadd2('0x21')](handleEntityNotFound(_0x177be5,null))[_0xadd2('0x21')](saveUpdates(_0x563488[_0xadd2('0x45')],null))[_0xadd2('0x21')](respondWithResult(_0x177be5,null))[_0xadd2('0x40')](handleError(_0x177be5,null));};exports[_0xadd2('0x22')]=function(_0x400498,_0x2b11d5){return db[_0xadd2('0x25')][_0xadd2('0x43')]({'where':{'id':_0x400498[_0xadd2('0x46')]['id']}})[_0xadd2('0x21')](handleEntityNotFound(_0x2b11d5,null))[_0xadd2('0x21')](removeEntity(_0x2b11d5,null))[_0xadd2('0x40')](handleError(_0x2b11d5,null));};exports[_0xadd2('0x47')]=function(_0x27dc2b,_0x45c7de,_0x4f833){return db[_0xadd2('0x48')][_0xadd2('0x43')]({'where':{'id':_0x27dc2b[_0xadd2('0x46')]['id']}})[_0xadd2('0x21')](handleEntityNotFound(_0x45c7de,null))[_0xadd2('0x21')](function(_0x289556){if(_0x289556){return _0x289556['addConditions'](_0x27dc2b[_0xadd2('0x45')][_0xadd2('0x49')],_[_0xadd2('0x4a')](_0x27dc2b[_0xadd2('0x45')],[_0xadd2('0x49'),'id'])||{});}})[_0xadd2('0x21')](respondWithResult(_0x45c7de,null))[_0xadd2('0x40')](handleError(_0x45c7de,null));};exports[_0xadd2('0x4b')]=function(_0x465cfa,_0x24ee91,_0x53558d){var _0x5ebebb={};var _0x25f212={};var _0x2ae5af;var _0x3aa583;return db[_0xadd2('0x25')][_0xadd2('0x4c')]({'where':{'id':_0x465cfa[_0xadd2('0x46')]['id']}})['then'](handleEntityNotFound(_0x24ee91,null))[_0xadd2('0x21')](function(_0x366267){if(_0x366267){_0x2ae5af=_0x366267;_0x25f212['model']=_[_0xadd2('0x26')](db[_0xadd2('0x48')][_0xadd2('0x4d')]);_0x25f212['query']=_[_0xadd2('0x26')](_0x465cfa[_0xadd2('0x27')]);_0x25f212['filters']=_[_0xadd2('0x29')](_0x25f212[_0xadd2('0x2a')],_0x25f212['query']);_0x5ebebb[_0xadd2('0x2c')]=_['intersection'](_0x25f212[_0xadd2('0x2a')],qs[_0xadd2('0x42')](_0x465cfa[_0xadd2('0x27')]['fields']));_0x5ebebb[_0xadd2('0x2c')]=_0x5ebebb['attributes']['length']?_0x5ebebb[_0xadd2('0x2c')]:_0x25f212[_0xadd2('0x2a')];_0x5ebebb[_0xadd2('0x2f')]=qs['sort'](_0x465cfa['query'][_0xadd2('0x30')]);_0x5ebebb['where']=qs[_0xadd2('0x28')](_[_0xadd2('0x31')](_0x465cfa[_0xadd2('0x27')],_0x25f212['filters']));if(_0x465cfa['query']['filter']){_0x5ebebb['where']=_[_0xadd2('0x34')](_0x5ebebb['where'],{'$or':_[_0xadd2('0x35')](_0x5ebebb['attributes'],function(_0x178fa6){var _0x1738c8={};_0x1738c8[_0x178fa6]={'$like':'%'+_0x465cfa[_0xadd2('0x27')][_0xadd2('0x32')]+'%'};return _0x1738c8;})});}_0x5ebebb=_[_0xadd2('0x34')]({},_0x5ebebb,_0x465cfa[_0xadd2('0x3a')]);return _0x2ae5af[_0xadd2('0x4b')](_0x5ebebb);}})[_0xadd2('0x21')](function(_0x55d4ca){if(_0x55d4ca){_0x3aa583=_0x55d4ca[_0xadd2('0x2b')];if(!_0x465cfa['query'][_0xadd2('0x2d')]('nolimit')){_0x5ebebb[_0xadd2('0x1b')]=qs[_0xadd2('0x1b')](_0x465cfa['query'][_0xadd2('0x1b')]);_0x5ebebb[_0xadd2('0x1a')]=qs[_0xadd2('0x1a')](_0x465cfa[_0xadd2('0x27')][_0xadd2('0x1a')]);}return _0x2ae5af['getConditions'](_0x5ebebb);}})[_0xadd2('0x21')](function(_0x4fa8f6){if(_0x4fa8f6){return _0x4fa8f6?{'count':_0x3aa583,'rows':_0x4fa8f6}:null;}})[_0xadd2('0x21')](respondWithResult(_0x24ee91,null))['catch'](handleError(_0x24ee91,null));};exports[_0xadd2('0x4e')]=function(_0x6cc858,_0x380ee3,_0x501c03){return db[_0xadd2('0x4f')][_0xadd2('0x43')]({'where':{'id':_0x6cc858[_0xadd2('0x46')]['id']}})[_0xadd2('0x21')](handleEntityNotFound(_0x380ee3,null))[_0xadd2('0x21')](function(_0x107aee){if(_0x107aee){return _0x107aee[_0xadd2('0x4e')](_0x6cc858[_0xadd2('0x45')][_0xadd2('0x49')],_[_0xadd2('0x4a')](_0x6cc858[_0xadd2('0x45')],[_0xadd2('0x49'),'id'])||{});}})[_0xadd2('0x21')](respondWithResult(_0x380ee3,null))[_0xadd2('0x40')](handleError(_0x380ee3,null));};exports[_0xadd2('0x50')]=function(_0x5f32b1,_0x3e1b60,_0x37af6c){var _0x42dec3={};var _0xc5c8f6={};var _0x54d377;var _0x1e2d36;return db[_0xadd2('0x25')][_0xadd2('0x4c')]({'where':{'id':_0x5f32b1[_0xadd2('0x46')]['id']}})[_0xadd2('0x21')](handleEntityNotFound(_0x3e1b60,null))[_0xadd2('0x21')](function(_0x3606cc){if(_0x3606cc){_0x54d377=_0x3606cc;_0xc5c8f6[_0xadd2('0x2a')]=_[_0xadd2('0x26')](db[_0xadd2('0x4f')]['rawAttributes']);_0xc5c8f6[_0xadd2('0x27')]=_['keys'](_0x5f32b1[_0xadd2('0x27')]);_0xc5c8f6[_0xadd2('0x28')]=_[_0xadd2('0x29')](_0xc5c8f6['model'],_0xc5c8f6[_0xadd2('0x27')]);_0x42dec3[_0xadd2('0x2c')]=_[_0xadd2('0x29')](_0xc5c8f6[_0xadd2('0x2a')],qs['fields'](_0x5f32b1[_0xadd2('0x27')]['fields']));_0x42dec3[_0xadd2('0x2c')]=_0x42dec3[_0xadd2('0x2c')][_0xadd2('0x2b')]?_0x42dec3[_0xadd2('0x2c')]:_0xc5c8f6[_0xadd2('0x2a')];_0x42dec3['order']=qs['sort'](_0x5f32b1['query'][_0xadd2('0x30')]);_0x42dec3['where']=qs[_0xadd2('0x28')](_['pick'](_0x5f32b1[_0xadd2('0x27')],_0xc5c8f6['filters']));if(_0x5f32b1[_0xadd2('0x27')][_0xadd2('0x32')]){_0x42dec3[_0xadd2('0x33')]=_[_0xadd2('0x34')](_0x42dec3[_0xadd2('0x33')],{'$or':_[_0xadd2('0x35')](_0x42dec3['attributes'],function(_0x14a633){var _0x2e1b62={};_0x2e1b62[_0x14a633]={'$like':'%'+_0x5f32b1['query'][_0xadd2('0x32')]+'%'};return _0x2e1b62;})});}_0x42dec3=_['merge']({},_0x42dec3,_0x5f32b1[_0xadd2('0x3a')]);return _0x54d377[_0xadd2('0x50')](_0x42dec3);}})['then'](function(_0x5ce89e){if(_0x5ce89e){_0x1e2d36=_0x5ce89e['length'];if(!_0x5f32b1[_0xadd2('0x27')][_0xadd2('0x2d')](_0xadd2('0x2e'))){_0x42dec3[_0xadd2('0x1b')]=qs[_0xadd2('0x1b')](_0x5f32b1['query'][_0xadd2('0x1b')]);_0x42dec3[_0xadd2('0x1a')]=qs[_0xadd2('0x1a')](_0x5f32b1[_0xadd2('0x27')][_0xadd2('0x1a')]);}return _0x54d377[_0xadd2('0x50')](_0x42dec3);}})[_0xadd2('0x21')](function(_0x28da86){if(_0x28da86){return _0x28da86?{'count':_0x1e2d36,'rows':_0x28da86}:null;}})['then'](respondWithResult(_0x3e1b60,null))[_0xadd2('0x40')](handleError(_0x3e1b60,null));};
\ No newline at end of file
index cd18e10..7e2cdc0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0058=['./automation.attributes','define','Automation','tools_automations','util','../../config/logger','api','moment','bluebird','request-promise','path'];(function(_0x456fb1,_0x859a1d){var _0x4083d6=function(_0xe1d0f2){while(--_0xe1d0f2){_0x456fb1['push'](_0x456fb1['shift']());}};_0x4083d6(++_0x859a1d);}(_0x0058,0x138));var _0x8005=function(_0x1c998f,_0x2ba9bb){_0x1c998f=_0x1c998f-0x0;var _0x992c1c=_0x0058[_0x1c998f];return _0x992c1c;};'use strict';var _=require('lodash');var util=require(_0x8005('0x0'));var logger=require(_0x8005('0x1'))(_0x8005('0x2'));var moment=require(_0x8005('0x3'));var BPromise=require(_0x8005('0x4'));var rp=require(_0x8005('0x5'));var fs=require('fs');var path=require(_0x8005('0x6'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x8005('0x7'));module['exports']=function(_0x1ab4de,_0x240e5a){return _0x1ab4de[_0x8005('0x8')](_0x8005('0x9'),attributes,{'tableName':_0x8005('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xbf0a=['tools_automations','lodash','../../config/logger','api','moment','bluebird','request-promise','path','../../config/environment','./automation.attributes','exports','Automation'];(function(_0x5e8bbf,_0x27f32a){var _0x5f4441=function(_0xea19dd){while(--_0xea19dd){_0x5e8bbf['push'](_0x5e8bbf['shift']());}};_0x5f4441(++_0x27f32a);}(_0xbf0a,0xfd));var _0xabf0=function(_0x15c56d,_0x5cfdbc){_0x15c56d=_0x15c56d-0x0;var _0x21b156=_0xbf0a[_0x15c56d];return _0x21b156;};'use strict';var _=require(_0xabf0('0x0'));var util=require('util');var logger=require(_0xabf0('0x1'))(_0xabf0('0x2'));var moment=require(_0xabf0('0x3'));var BPromise=require(_0xabf0('0x4'));var rp=require(_0xabf0('0x5'));var fs=require('fs');var path=require(_0xabf0('0x6'));var rimraf=require('rimraf');var config=require(_0xabf0('0x7'));var attributes=require(_0xabf0('0x8'));module[_0xabf0('0x9')]=function(_0x37697d,_0x37e4f5){return _0x37697d['define'](_0xabf0('0xa'),attributes,{'tableName':_0xabf0('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a3150f2..6485c4d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x00f0=['info','Automation,\x20%s,\x20%s','Automation,\x20%s,\x20%s,\x20%s','request\x20sent','error','message','result','catch','lodash','util','moment','bluebird','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','http','request','then'];(function(_0x32de0f,_0x54867d){var _0x3d52bc=function(_0x5bc2df){while(--_0x5bc2df){_0x32de0f['push'](_0x32de0f['shift']());}};_0x3d52bc(++_0x54867d);}(_0x00f0,0xec));var _0x000f=function(_0x4870a2,_0x4d3eea){_0x4870a2=_0x4870a2-0x0;var _0x139bb0=_0x00f0[_0x4870a2];return _0x139bb0;};'use strict';var _=require(_0x000f('0x0'));var util=require(_0x000f('0x1'));var moment=require(_0x000f('0x2'));var BPromise=require(_0x000f('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x000f('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x000f('0x5'))('rpc');var config=require(_0x000f('0x6'));var jayson=require(_0x000f('0x7'));var client=jayson['client'][_0x000f('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x3c54d0,_0xe9145e,_0x621ab6){return new BPromise(function(_0x330e11,_0x468e73){return client[_0x000f('0x9')](_0x3c54d0,_0x621ab6)[_0x000f('0xa')](function(_0xaf4c12){logger[_0x000f('0xb')](_0x000f('0xc'),_0xe9145e,'request\x20sent');logger['debug'](_0x000f('0xd'),_0xe9145e,_0x000f('0xe'),JSON['stringify'](_0xaf4c12));if(_0xaf4c12[_0x000f('0xf')]){if(_0xaf4c12[_0x000f('0xf')]['code']===0x1f4){logger['error'](_0x000f('0xc'),_0xe9145e,_0xaf4c12[_0x000f('0xf')]['message']);return _0x468e73(_0xaf4c12['error'][_0x000f('0x10')]);}logger[_0x000f('0xf')](_0x000f('0xc'),_0xe9145e,_0xaf4c12[_0x000f('0xf')]['message']);return _0x330e11(_0xaf4c12[_0x000f('0xf')]['message']);}else{logger['info'](_0x000f('0xc'),_0xe9145e,'request\x20sent');_0x330e11(_0xaf4c12[_0x000f('0x11')][_0x000f('0x10')]);}})[_0x000f('0x12')](function(_0x465563){logger[_0x000f('0xf')](_0x000f('0xc'),_0xe9145e,_0x465563);_0x468e73(_0x465563);});});}
\ No newline at end of file
+var _0x3079=['moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','client','http','request','then','info','Automation,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','util'];(function(_0x149dce,_0x4bcecb){var _0x28d9a1=function(_0x5a42d1){while(--_0x5a42d1){_0x149dce['push'](_0x149dce['shift']());}};_0x28d9a1(++_0x4bcecb);}(_0x3079,0x110));var _0x9307=function(_0xbc7d69,_0x2566a0){_0xbc7d69=_0xbc7d69-0x0;var _0x38e946=_0x3079[_0xbc7d69];return _0x38e946;};'use strict';var _=require('lodash');var util=require(_0x9307('0x0'));var moment=require(_0x9307('0x1'));var BPromise=require(_0x9307('0x2'));var rs=require(_0x9307('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x9307('0x4'))['db'];var utils=require(_0x9307('0x5'));var logger=require('../../config/logger')('rpc');var config=require(_0x9307('0x6'));var jayson=require(_0x9307('0x7'));var client=jayson[_0x9307('0x8')][_0x9307('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x215470,_0x4e6f60,_0x4dc532){return new BPromise(function(_0x3120da,_0x4ca523){return client[_0x9307('0xa')](_0x215470,_0x4dc532)[_0x9307('0xb')](function(_0x5e2560){logger[_0x9307('0xc')](_0x9307('0xd'),_0x4e6f60,_0x9307('0xe'));logger['debug']('Automation,\x20%s,\x20%s,\x20%s',_0x4e6f60,_0x9307('0xe'),JSON[_0x9307('0xf')](_0x5e2560));if(_0x5e2560[_0x9307('0x10')]){if(_0x5e2560[_0x9307('0x10')][_0x9307('0x11')]===0x1f4){logger[_0x9307('0x10')]('Automation,\x20%s,\x20%s',_0x4e6f60,_0x5e2560[_0x9307('0x10')][_0x9307('0x12')]);return _0x4ca523(_0x5e2560['error']['message']);}logger[_0x9307('0x10')](_0x9307('0xd'),_0x4e6f60,_0x5e2560['error'][_0x9307('0x12')]);return _0x3120da(_0x5e2560[_0x9307('0x10')]['message']);}else{logger[_0x9307('0xc')](_0x9307('0xd'),_0x4e6f60,'request\x20sent');_0x3120da(_0x5e2560[_0x9307('0x13')][_0x9307('0x12')]);}})[_0x9307('0x14')](function(_0x5b6ac6){logger[_0x9307('0x10')](_0x9307('0xd'),_0x4e6f60,_0x5b6ac6);_0x4ca523(_0x5b6ac6);});});}
\ No newline at end of file
index 9c52404..2ece059 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2411=['post','create','addConditions','addActions','put','update','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','index','/:id','show','/:id/conditions','getConditions','/:id/actions','getActions'];(function(_0x56d02a,_0x72cbc0){var _0x17d6e7=function(_0x15dc89){while(--_0x15dc89){_0x56d02a['push'](_0x56d02a['shift']());}};_0x17d6e7(++_0x72cbc0);}(_0x2411,0x104));var _0x1241=function(_0x2aec52,_0x59d962){_0x2aec52=_0x2aec52-0x0;var _0x3b8835=_0x2411[_0x2aec52];return _0x3b8835;};'use strict';var multer=require(_0x1241('0x0'));var util=require(_0x1241('0x1'));var path=require(_0x1241('0x2'));var timeout=require('connect-timeout');var express=require(_0x1241('0x3'));var router=express[_0x1241('0x4')]();var auth=require(_0x1241('0x5'));var interaction=require(_0x1241('0x6'));var config=require('../../config/environment');var controller=require('./automation.controller');router[_0x1241('0x7')]('/',auth[_0x1241('0x8')](),controller[_0x1241('0x9')]);router[_0x1241('0x7')](_0x1241('0xa'),auth['isAuthenticated'](),controller[_0x1241('0xb')]);router[_0x1241('0x7')](_0x1241('0xc'),auth[_0x1241('0x8')](),controller[_0x1241('0xd')]);router[_0x1241('0x7')](_0x1241('0xe'),auth[_0x1241('0x8')](),controller[_0x1241('0xf')]);router[_0x1241('0x10')]('/',auth[_0x1241('0x8')](),controller[_0x1241('0x11')]);router['post']('/:id/conditions',auth[_0x1241('0x8')](),controller[_0x1241('0x12')]);router[_0x1241('0x10')](_0x1241('0xe'),auth['isAuthenticated'](),controller[_0x1241('0x13')]);router[_0x1241('0x14')](_0x1241('0xa'),auth[_0x1241('0x8')](),controller[_0x1241('0x15')]);router['delete'](_0x1241('0xa'),auth[_0x1241('0x8')](),controller['destroy']);module[_0x1241('0x16')]=router;
\ No newline at end of file
+var _0x3376=['create','post','addConditions','put','update','destroy','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./automation.controller','get','isAuthenticated','index','/:id','show','/:id/conditions','getConditions','/:id/actions','getActions'];(function(_0x4552ac,_0x2e526a){var _0x2207c=function(_0x33ad73){while(--_0x33ad73){_0x4552ac['push'](_0x4552ac['shift']());}};_0x2207c(++_0x2e526a);}(_0x3376,0x19f));var _0x6337=function(_0x520e98,_0x27e5f5){_0x520e98=_0x520e98-0x0;var _0x242690=_0x3376[_0x520e98];return _0x242690;};'use strict';var multer=require(_0x6337('0x0'));var util=require('util');var path=require(_0x6337('0x1'));var timeout=require(_0x6337('0x2'));var express=require(_0x6337('0x3'));var router=express[_0x6337('0x4')]();var auth=require(_0x6337('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x6337('0x6'));var controller=require(_0x6337('0x7'));router[_0x6337('0x8')]('/',auth[_0x6337('0x9')](),controller[_0x6337('0xa')]);router[_0x6337('0x8')](_0x6337('0xb'),auth['isAuthenticated'](),controller[_0x6337('0xc')]);router[_0x6337('0x8')](_0x6337('0xd'),auth[_0x6337('0x9')](),controller[_0x6337('0xe')]);router[_0x6337('0x8')](_0x6337('0xf'),auth['isAuthenticated'](),controller[_0x6337('0x10')]);router['post']('/',auth['isAuthenticated'](),controller[_0x6337('0x11')]);router[_0x6337('0x12')](_0x6337('0xd'),auth['isAuthenticated'](),controller[_0x6337('0x13')]);router['post'](_0x6337('0xf'),auth[_0x6337('0x9')](),controller['addActions']);router[_0x6337('0x14')](_0x6337('0xb'),auth[_0x6337('0x9')](),controller[_0x6337('0x15')]);router['delete'](_0x6337('0xb'),auth['isAuthenticated'](),controller[_0x6337('0x16')]);module[_0x6337('0x17')]=router;
\ No newline at end of file
index 2fc72b2..6d27949 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7403=['Active/Disactive\x20AMD','#AMD\x20Initial\x20Silence','#AMD\x20Greeting','#AMD\x20After\x20Greeting\x20Silence','#AMD\x20Total\x20Analysis\x20Time','#AMD\x20Min\x20Word\x20Length','#AMD\x20Between\x20Words\x20Silence','#AMD\x20Maximum\x20Number\x20Of\x20Words','#AMD\x20Silence\x20Threshold\x20(min:0,\x20max:32767)','#AMD\x20Maximum\x20Word\x20Length','DESC','sequelize','STRING','name','ENUM','ivr','Active/Disactive\x20Campaign','INTEGER','UNSIGNED','Originate\x20Timeout\x20Seconds\x20(min:1,\x20max:999)','#Congestion\x20Retry\x20(min:1,\x20max:999)','Congestion\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#Busy\x20Retry\x20(min:1,\x20max:999)','Busy\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#NoAnswer\x20Retry\x20(min:1,\x20max:999)','NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#Global\x20Max\x20Retry\x20(min:1,\x20max:999)','07:00-22:00,*,*,*','always','never','onlyIfOpen'];(function(_0x644ecd,_0x397f36){var _0x1c66ce=function(_0x4cf42b){while(--_0x4cf42b){_0x644ecd['push'](_0x644ecd['shift']());}};_0x1c66ce(++_0x397f36);}(_0x7403,0x68));var _0x3740=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7403[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0x3740('0x0'));module['exports']={'name':{'type':Sequelize[_0x3740('0x1')],'unique':_0x3740('0x2'),'allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'type':{'type':Sequelize[_0x3740('0x3')](_0x3740('0x4')),'allowNull':![],'defaultValue':_0x3740('0x4')},'description':{'type':Sequelize['STRING']},'active':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':_0x3740('0x5')},'limitCalls':{'type':Sequelize[_0x3740('0x6')](0x4)[_0x3740('0x7')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0xc8},'comment':'Max\x20200\x20calls.'},'dialOriginateCallerIdName':{'type':Sequelize[_0x3740('0x1')]},'dialOriginateCallerIdNumber':{'type':Sequelize[_0x3740('0x1')]},'dialOriginateTimeout':{'type':Sequelize['INTEGER'](0x3)[_0x3740('0x7')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':_0x3740('0x8')},'dialCongestionMaxRetry':{'type':Sequelize[_0x3740('0x6')](0x3)[_0x3740('0x7')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x3740('0x9')},'dialCongestionRetryFrequency':{'type':Sequelize[_0x3740('0x6')](0x5)[_0x3740('0x7')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x3740('0xa')},'dialBusyMaxRetry':{'type':Sequelize[_0x3740('0x6')](0x3)[_0x3740('0x7')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x3740('0xb')},'dialBusyRetryFrequency':{'type':Sequelize[_0x3740('0x6')](0x5)[_0x3740('0x7')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x3740('0xc')},'dialNoAnswerMaxRetry':{'type':Sequelize[_0x3740('0x6')](0x3)[_0x3740('0x7')],'defaultValue':0x3,'comment':_0x3740('0xd')},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0x3740('0x6')](0x5)[_0x3740('0x7')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x3740('0xe')},'dialGlobalMaxRetry':{'type':Sequelize[_0x3740('0x6')](0x3)[_0x3740('0x7')],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':_0x3740('0xf')},'dialTimezone':{'type':Sequelize[_0x3740('0x1')],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize[_0x3740('0x1')],'defaultValue':_0x3740('0x10')},'dialCheckDuplicateType':{'type':Sequelize[_0x3740('0x3')](_0x3740('0x11'),_0x3740('0x12'),_0x3740('0x13')),'defaultValue':'always'},'dialAMDActive':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':_0x3740('0x14')},'dialAMDInitialSilence':{'type':Sequelize[_0x3740('0x6')](0x9)['UNSIGNED'],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0x3740('0x15')},'dialAMDGreeting':{'type':Sequelize['INTEGER'](0x9)[_0x3740('0x7')],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0x3740('0x16')},'dialAMDAfterGreetingSilence':{'type':Sequelize['INTEGER'](0x9)[_0x3740('0x7')],'defaultValue':0x320,'validate':{'min':0x0},'comment':_0x3740('0x17')},'dialAMDTotalAnalysisTime':{'type':Sequelize[_0x3740('0x6')](0x9)['UNSIGNED'],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x3740('0x18')},'dialAMDMinWordLength':{'type':Sequelize[_0x3740('0x6')](0x9)[_0x3740('0x7')],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0x3740('0x19')},'dialAMDBetweenWordsSilence':{'type':Sequelize[_0x3740('0x6')](0x9)[_0x3740('0x7')],'defaultValue':0x32,'validate':{'min':0x0},'comment':_0x3740('0x1a')},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0x3740('0x6')](0x9)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0x3740('0x1b')},'dialAMDSilenceThreshold':{'type':Sequelize['INTEGER'](0x5)[_0x3740('0x7')],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':_0x3740('0x1c')},'dialAMDMaximumWordLength':{'type':Sequelize['INTEGER'](0x9)[_0x3740('0x7')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x3740('0x1d')},'dialOrderByScheduledAt':{'type':Sequelize[_0x3740('0x3')](_0x3740('0x1e'),'ASC'),'defaultValue':_0x3740('0x1e')},'dialPrefix':{'type':Sequelize[_0x3740('0x1')],'defaultValue':null},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0x3740('0x6')](0x3)[_0x3740('0x7')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':'Random\x20Last\x20Digit\x20(min:1,\x20max:15)'},'dialCutDigit':{'type':Sequelize[_0x3740('0x6')](0x3)[_0x3740('0x7')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':'Cut\x20Digit\x20(min:1,\x20max:15)'}};
\ No newline at end of file
+var _0xb0ea=['ivr','STRING','BOOLEAN','Active/Disactive\x20Campaign','INTEGER','UNSIGNED','Max\x20200\x20calls.','#NoAnswer\x20Retry\x20(min:1,\x20max:999)','NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','07:00-22:00,*,*,*','ENUM','never','always','Active/Disactive\x20AMD','#AMD\x20Initial\x20Silence','#AMD\x20Greeting','#AMD\x20Total\x20Analysis\x20Time','#AMD\x20Maximum\x20Number\x20Of\x20Words','#AMD\x20Silence\x20Threshold\x20(min:0,\x20max:32767)','#AMD\x20Maximum\x20Word\x20Length','DESC','ASC','Random\x20Last\x20Digit\x20(min:1,\x20max:15)','Cut\x20Digit\x20(min:1,\x20max:15)','sequelize','exports'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0xb0ea,0x80));var _0xab0e=function(_0x5087b7,_0x117485){_0x5087b7=_0x5087b7-0x0;var _0x3b4c2b=_0xb0ea[_0x5087b7];return _0x3b4c2b;};'use strict';var Sequelize=require(_0xab0e('0x0'));module[_0xab0e('0x1')]={'name':{'type':Sequelize['STRING'],'unique':'name','allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'type':{'type':Sequelize['ENUM'](_0xab0e('0x2')),'allowNull':![],'defaultValue':_0xab0e('0x2')},'description':{'type':Sequelize[_0xab0e('0x3')]},'active':{'type':Sequelize[_0xab0e('0x4')],'defaultValue':0x0,'comment':_0xab0e('0x5')},'limitCalls':{'type':Sequelize[_0xab0e('0x6')](0x4)[_0xab0e('0x7')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0xc8},'comment':_0xab0e('0x8')},'dialOriginateCallerIdName':{'type':Sequelize[_0xab0e('0x3')]},'dialOriginateCallerIdNumber':{'type':Sequelize['STRING']},'dialOriginateTimeout':{'type':Sequelize['INTEGER'](0x3)['UNSIGNED'],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':'Originate\x20Timeout\x20Seconds\x20(min:1,\x20max:999)'},'dialCongestionMaxRetry':{'type':Sequelize['INTEGER'](0x3)[_0xab0e('0x7')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':'#Congestion\x20Retry\x20(min:1,\x20max:999)'},'dialCongestionRetryFrequency':{'type':Sequelize['INTEGER'](0x5)['UNSIGNED'],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':'Congestion\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)'},'dialBusyMaxRetry':{'type':Sequelize['INTEGER'](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':'#Busy\x20Retry\x20(min:1,\x20max:999)'},'dialBusyRetryFrequency':{'type':Sequelize[_0xab0e('0x6')](0x5)['UNSIGNED'],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':'Busy\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)'},'dialNoAnswerMaxRetry':{'type':Sequelize['INTEGER'](0x3)['UNSIGNED'],'defaultValue':0x3,'comment':_0xab0e('0x9')},'dialNoAnswerRetryFrequency':{'type':Sequelize['INTEGER'](0x5)['UNSIGNED'],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xab0e('0xa')},'dialGlobalMaxRetry':{'type':Sequelize['INTEGER'](0x3)['UNSIGNED'],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':'#Global\x20Max\x20Retry\x20(min:1,\x20max:999)'},'dialTimezone':{'type':Sequelize[_0xab0e('0x3')],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize[_0xab0e('0x3')],'defaultValue':_0xab0e('0xb')},'dialCheckDuplicateType':{'type':Sequelize[_0xab0e('0xc')]('always',_0xab0e('0xd'),'onlyIfOpen'),'defaultValue':_0xab0e('0xe')},'dialAMDActive':{'type':Sequelize[_0xab0e('0x4')],'defaultValue':0x0,'comment':_0xab0e('0xf')},'dialAMDInitialSilence':{'type':Sequelize['INTEGER'](0x9)[_0xab0e('0x7')],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0xab0e('0x10')},'dialAMDGreeting':{'type':Sequelize[_0xab0e('0x6')](0x9)[_0xab0e('0x7')],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0xab0e('0x11')},'dialAMDAfterGreetingSilence':{'type':Sequelize[_0xab0e('0x6')](0x9)[_0xab0e('0x7')],'defaultValue':0x320,'validate':{'min':0x0},'comment':'#AMD\x20After\x20Greeting\x20Silence'},'dialAMDTotalAnalysisTime':{'type':Sequelize['INTEGER'](0x9)[_0xab0e('0x7')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0xab0e('0x12')},'dialAMDMinWordLength':{'type':Sequelize['INTEGER'](0x9)[_0xab0e('0x7')],'defaultValue':0x64,'validate':{'min':0x0},'comment':'#AMD\x20Min\x20Word\x20Length'},'dialAMDBetweenWordsSilence':{'type':Sequelize[_0xab0e('0x6')](0x9)[_0xab0e('0x7')],'defaultValue':0x32,'validate':{'min':0x0},'comment':'#AMD\x20Between\x20Words\x20Silence'},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0xab0e('0x6')](0x9)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0xab0e('0x13')},'dialAMDSilenceThreshold':{'type':Sequelize[_0xab0e('0x6')](0x5)['UNSIGNED'],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':_0xab0e('0x14')},'dialAMDMaximumWordLength':{'type':Sequelize[_0xab0e('0x6')](0x9)[_0xab0e('0x7')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0xab0e('0x15')},'dialOrderByScheduledAt':{'type':Sequelize[_0xab0e('0xc')](_0xab0e('0x16'),_0xab0e('0x17')),'defaultValue':'DESC'},'dialPrefix':{'type':Sequelize[_0xab0e('0x3')],'defaultValue':null},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0xab0e('0x6')](0x3)['UNSIGNED'],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0xab0e('0x18')},'dialCutDigit':{'type':Sequelize['INTEGER'](0x3)[_0xab0e('0x7')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0xab0e('0x19')}};
\ No newline at end of file
index a524753..fe41e59 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0dc2=['squel','crypto','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../mysqldb','status','end','json','count','offset','limit','apply','reject','save','update','then','IvrCampaigns','UserProfileResource','destroy','sendStatus','error','name','send','index','Campaign','rawAttributes','model','keys','query','filters','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','map','key','VIRTUAL','filter','merge','options','includeAll','include','findAll','catch','show','intersection','find','create','user','get','UserProfileSection','userProfileId','autoAssociation','clone','updatedAt','body','createdAt','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','findOne','CmHopper','CampaignId','rows','getHopperHistories','CmHopperHistory','CmHopperFinal','getHopperBlacks','CmHopperBlack','getLists','addLists','ids','omit','spread','dialCheckDuplicateType','always','into','cm_hopper','fromQuery','phone','select','NOW()','scheduledAt','field','CmListId','toString','from','cm_contacts','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','phone\x20IS\x20NOT\x20NULL','COALESCE(calleridnum,\x27\x27)','phone\x20NOT\x20IN\x20(?)','CampaignId\x20=\x20?','insert','ContactId','ListId','push','all','removeLists','getBlackLists','CmList','addBlackLists','cm_hopper_black','removeBlackLists','html-pdf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','sox','to-csv','ejs','lodash'];(function(_0x4d1bcf,_0x1971b9){var _0x23b600=function(_0x4b3561){while(--_0x4b3561){_0x4d1bcf['push'](_0x4d1bcf['shift']());}};_0x23b600(++_0x1971b9);}(_0x0dc2,0x1ed));var _0x20dc=function(_0x438940,_0x445e27){_0x438940=_0x438940-0x0;var _0x38d3b7=_0x0dc2[_0x438940];return _0x38d3b7;};'use strict';var pdf=require(_0x20dc('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x20dc('0x1'));var jsonpatch=require(_0x20dc('0x2'));var rp=require(_0x20dc('0x3'));var moment=require(_0x20dc('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x20dc('0x5'));var util=require(_0x20dc('0x6'));var path=require('path');var sox=require(_0x20dc('0x7'));var csv=require(_0x20dc('0x8'));var ejs=require(_0x20dc('0x9'));var fs=require('fs');var _=require(_0x20dc('0xa'));var squel=require(_0x20dc('0xb'));var crypto=require(_0x20dc('0xc'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x20dc('0x8'));var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0x20dc('0xd'));var authService=require(_0x20dc('0xe'));var qs=require(_0x20dc('0xf'));var hardwareService=require(_0x20dc('0x10'));var logger=require('../../config/logger')(_0x20dc('0x11'));var utils=require(_0x20dc('0x12'));var config=require('../../config/environment');var db=require(_0x20dc('0x13'))['db'];function respondWithStatusCode(_0x4c67d4,_0x193978){_0x193978=_0x193978||0xcc;return function(_0x279890){if(_0x279890){return _0x4c67d4['sendStatus'](_0x193978);}return _0x4c67d4[_0x20dc('0x14')](_0x193978)[_0x20dc('0x15')]();};}function respondWithResult(_0x2b6766,_0xab200b){_0xab200b=_0xab200b||0xc8;return function(_0x498ce6){if(_0x498ce6){return _0x2b6766[_0x20dc('0x14')](_0xab200b)[_0x20dc('0x16')](_0x498ce6);}};}function respondWithFilteredResult(_0x2f93cd,_0x3775cf){return function(_0x57102f){if(_0x57102f){var _0x5734ba=_0x57102f[_0x20dc('0x17')],_0xd9fcb9=_0x3775cf[_0x20dc('0x18')],_0x3c4987=_0x3775cf['offset']+_0x3775cf[_0x20dc('0x19')],_0x191180;if(_0x3c4987>=_0x5734ba){_0x3c4987=_0x5734ba;_0x191180=0xc8;}else{_0x191180=0xce;}_0x2f93cd['status'](_0x191180);return _0x2f93cd['set']('Content-Range',_0xd9fcb9+'-'+_0x3c4987+'/'+_0x5734ba)[_0x20dc('0x16')](_0x57102f);}return null;};}function patchUpdates(_0x267473){return function(_0x7bcdce){try{jsonpatch[_0x20dc('0x1a')](_0x7bcdce,_0x267473,!![]);}catch(_0x1ee7d){return BPromise[_0x20dc('0x1b')](_0x1ee7d);}return _0x7bcdce[_0x20dc('0x1c')]();};}function saveUpdates(_0x39a4a0,_0x3ee395){return function(_0x1b0438){if(_0x1b0438){return _0x1b0438[_0x20dc('0x1d')](_0x39a4a0)[_0x20dc('0x1e')](function(_0x3dc14c){return _0x3dc14c;});}return null;};}function removeEntity(_0x4eb3fe,_0x2f18e9){return function(_0xff6c3){if(_0xff6c3){return _0xff6c3['destroy']()['then'](function(){var _0x183f6d=_0xff6c3['get']({'plain':!![]});var _0x43f68b=_0x20dc('0x1f');return db[_0x20dc('0x20')][_0x20dc('0x21')]({'where':{'type':_0x43f68b,'resourceId':_0x183f6d['id']}})[_0x20dc('0x1e')](function(){return _0xff6c3;});})[_0x20dc('0x1e')](function(){_0x4eb3fe[_0x20dc('0x14')](0xcc)[_0x20dc('0x15')]();});}};}function handleEntityNotFound(_0x833b2a,_0x2b9262){return function(_0x4301bc){if(!_0x4301bc){_0x833b2a[_0x20dc('0x22')](0x194);}return _0x4301bc;};}function handleError(_0x34f216,_0x4e923b){_0x4e923b=_0x4e923b||0x1f4;return function(_0x31702d){logger[_0x20dc('0x23')](_0x31702d['stack']);if(_0x31702d['name']){delete _0x31702d[_0x20dc('0x24')];}_0x34f216[_0x20dc('0x14')](_0x4e923b)[_0x20dc('0x25')](_0x31702d);};}exports[_0x20dc('0x26')]=function(_0x38febc,_0x41b2a1){var _0x360bb0={},_0x2c6594={},_0x5b11ee={'count':0x0,'rows':[]};var _0x165fe2=db[_0x20dc('0x27')][_0x20dc('0x28')];_0x2c6594[_0x20dc('0x29')]=_[_0x20dc('0x2a')](_0x165fe2);_0x2c6594[_0x20dc('0x2b')]=_['keys'](_0x38febc[_0x20dc('0x2b')]);_0x2c6594[_0x20dc('0x2c')]=_['intersection'](_0x2c6594['model'],_0x2c6594[_0x20dc('0x2b')]);_0x360bb0['attributes']=_['intersection'](_0x2c6594['model'],qs[_0x20dc('0x2d')](_0x38febc[_0x20dc('0x2b')]['fields']));_0x360bb0[_0x20dc('0x2e')]=_0x360bb0['attributes'][_0x20dc('0x2f')]?_0x360bb0[_0x20dc('0x2e')]:_0x2c6594[_0x20dc('0x29')];if(!_0x38febc[_0x20dc('0x2b')][_0x20dc('0x30')](_0x20dc('0x31'))){_0x360bb0[_0x20dc('0x19')]=qs[_0x20dc('0x19')](_0x38febc[_0x20dc('0x2b')][_0x20dc('0x19')]);_0x360bb0[_0x20dc('0x18')]=qs['offset'](_0x38febc[_0x20dc('0x2b')]['offset']);}_0x360bb0[_0x20dc('0x32')]=qs[_0x20dc('0x33')](_0x38febc[_0x20dc('0x2b')][_0x20dc('0x33')]);_0x360bb0[_0x20dc('0x34')]=qs['filters'](_[_0x20dc('0x35')](_0x38febc['query'],_0x2c6594[_0x20dc('0x2c')]));if(_0x38febc['query']['filter']){_0x360bb0[_0x20dc('0x34')]=_['merge'](_0x360bb0[_0x20dc('0x34')],{'$or':_[_0x20dc('0x36')](_0x165fe2,function(_0x3307be){if(_0x3307be['type'][_0x20dc('0x37')]!==_0x20dc('0x38')){var _0x3b8df4={};_0x3b8df4[_0x3307be['field']]={'$like':'%'+_0x38febc[_0x20dc('0x2b')][_0x20dc('0x39')]+'%'};return _0x3b8df4;}})});}_0x360bb0=_[_0x20dc('0x3a')]({},_0x360bb0,_0x38febc[_0x20dc('0x3b')]);var _0x1a6a5e={'where':_0x360bb0[_0x20dc('0x34')]};return db[_0x20dc('0x27')][_0x20dc('0x17')](_0x1a6a5e)[_0x20dc('0x1e')](function(_0x41c760){_0x5b11ee[_0x20dc('0x17')]=_0x41c760;if(_0x38febc['query'][_0x20dc('0x3c')]){_0x360bb0[_0x20dc('0x3d')]=[{'all':!![]}];}return db['Campaign'][_0x20dc('0x3e')](_0x360bb0);})[_0x20dc('0x1e')](function(_0x1a9eee){_0x5b11ee['rows']=_0x1a9eee;return _0x5b11ee;})['then'](respondWithFilteredResult(_0x41b2a1,_0x360bb0))[_0x20dc('0x3f')](handleError(_0x41b2a1,null));};exports[_0x20dc('0x40')]=function(_0x3e187c,_0x2ca7d0){var _0x40b939={'raw':![],'where':{'id':_0x3e187c['params']['id']}},_0xfa8d0e={};_0xfa8d0e[_0x20dc('0x29')]=_['keys'](db[_0x20dc('0x27')][_0x20dc('0x28')]);_0xfa8d0e['query']=_['keys'](_0x3e187c['query']);_0xfa8d0e[_0x20dc('0x2c')]=_[_0x20dc('0x41')](_0xfa8d0e['model'],_0xfa8d0e[_0x20dc('0x2b')]);_0x40b939[_0x20dc('0x2e')]=_[_0x20dc('0x41')](_0xfa8d0e[_0x20dc('0x29')],qs[_0x20dc('0x2d')](_0x3e187c['query'][_0x20dc('0x2d')]));_0x40b939[_0x20dc('0x2e')]=_0x40b939['attributes']['length']?_0x40b939[_0x20dc('0x2e')]:_0xfa8d0e[_0x20dc('0x29')];if(_0x3e187c[_0x20dc('0x2b')]['includeAll']){_0x40b939[_0x20dc('0x3d')]=[{'all':!![]}];}_0x40b939=_[_0x20dc('0x3a')]({},_0x40b939,_0x3e187c[_0x20dc('0x3b')]);return db['Campaign'][_0x20dc('0x42')](_0x40b939)[_0x20dc('0x1e')](handleEntityNotFound(_0x2ca7d0,null))[_0x20dc('0x1e')](respondWithResult(_0x2ca7d0,null))['catch'](handleError(_0x2ca7d0,null));};exports['create']=function(_0x2fd036,_0x4f9fae){return db[_0x20dc('0x27')][_0x20dc('0x43')](_0x2fd036['body'],{})[_0x20dc('0x1e')](function(_0x57810d){var _0x11daa4=_0x2fd036[_0x20dc('0x44')][_0x20dc('0x45')]({'plain':!![]});if(!_0x11daa4)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x11daa4['role']==='user'){var _0x5505ba=_0x57810d[_0x20dc('0x45')]({'plain':!![]});var _0x5548e7='IvrCampaigns';return db[_0x20dc('0x46')][_0x20dc('0x42')]({'where':{'name':_0x5548e7,'userProfileId':_0x11daa4[_0x20dc('0x47')]},'raw':!![]})['then'](function(_0x54de12){if(_0x54de12&&_0x54de12[_0x20dc('0x48')]===0x0){return db[_0x20dc('0x20')][_0x20dc('0x43')]({'name':_0x5505ba[_0x20dc('0x24')],'resourceId':_0x5505ba['id'],'type':_0x54de12[_0x20dc('0x24')],'sectionId':_0x54de12['id']},{})[_0x20dc('0x1e')](function(){return _0x57810d;});}else{return _0x57810d;}})[_0x20dc('0x3f')](function(_0x4654ce){logger[_0x20dc('0x23')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x4654ce);throw _0x4654ce;});}return _0x57810d;})['then'](respondWithResult(_0x4f9fae,0xc9))['catch'](handleError(_0x4f9fae,null));};exports[_0x20dc('0x49')]=function(_0x58c415,_0x42b872){var _0x439f90={'raw':![],'where':{'id':_0x58c415['params']['id']}},_0xf981b6={};_0xf981b6[_0x20dc('0x29')]=_['keys'](db[_0x20dc('0x27')]['rawAttributes']);_0x439f90[_0x20dc('0x2e')]=_[_0x20dc('0x41')](_0xf981b6[_0x20dc('0x29')],qs[_0x20dc('0x2d')](_0x58c415['query'][_0x20dc('0x2d')]));_0x439f90[_0x20dc('0x2e')]=_0x439f90[_0x20dc('0x2e')]['length']?_0x439f90[_0x20dc('0x2e')]:_0xf981b6[_0x20dc('0x29')];if(_0x58c415['query'][_0x20dc('0x3c')]){_0x439f90[_0x20dc('0x3d')]=[{'all':!![]}];}_0x439f90=_[_0x20dc('0x3a')]({},_0x439f90,_0x58c415[_0x20dc('0x3b')]);return db[_0x20dc('0x27')][_0x20dc('0x42')](_0x439f90)[_0x20dc('0x1e')](handleEntityNotFound(_0x42b872,null))['then'](function(_0x3af72f){if(_0x3af72f){var _0x443e76=_0x3af72f['get']({'plain':!![]});_0x443e76=qs['omit'](_0x443e76,['id','createdAt',_0x20dc('0x4a')]);_0x58c415[_0x20dc('0x4b')]=_['omit'](_0x58c415[_0x20dc('0x4b')],['id',_0x20dc('0x4c'),'updatedAt']);return db[_0x20dc('0x27')]['create'](_['merge'](_0x443e76,_0x58c415[_0x20dc('0x4b')]),{'include':_0x58c415[_0x20dc('0x2b')][_0x20dc('0x3c')]?[{'all':!![]}]:undefined})[_0x20dc('0x1e')](function(_0x2709ed){var _0x4141f1=_0x58c415[_0x20dc('0x44')][_0x20dc('0x45')]({'plain':!![]});if(!_0x4141f1)throw new Error(_0x20dc('0x4d'));if(_0x4141f1[_0x20dc('0x4e')]===_0x20dc('0x44')){var _0x311594=_0x2709ed['get']({'plain':!![]});var _0x17d19c='IvrCampaigns';return db['UserProfileSection'][_0x20dc('0x42')]({'where':{'name':_0x17d19c,'userProfileId':_0x4141f1[_0x20dc('0x47')]},'raw':!![]})[_0x20dc('0x1e')](function(_0x1b10af){if(_0x1b10af&&_0x1b10af[_0x20dc('0x48')]===0x0){return db[_0x20dc('0x20')][_0x20dc('0x43')]({'name':_0x311594[_0x20dc('0x24')],'resourceId':_0x311594['id'],'type':_0x1b10af[_0x20dc('0x24')],'sectionId':_0x1b10af['id']},{})[_0x20dc('0x1e')](function(){return _0x2709ed;});}else{return _0x2709ed;}})[_0x20dc('0x3f')](function(_0xba2689){logger[_0x20dc('0x23')](_0x20dc('0x4f'),_0xba2689);throw _0xba2689;});}return _0x2709ed;});}})[_0x20dc('0x1e')](respondWithResult(_0x42b872,0xc9))[_0x20dc('0x3f')](handleError(_0x42b872,null));};exports['update']=function(_0x40cd80,_0x1ad238){if(_0x40cd80[_0x20dc('0x4b')]['id']){delete _0x40cd80[_0x20dc('0x4b')]['id'];}return db[_0x20dc('0x27')][_0x20dc('0x42')]({'where':{'id':_0x40cd80[_0x20dc('0x50')]['id']}})[_0x20dc('0x1e')](handleEntityNotFound(_0x1ad238,null))[_0x20dc('0x1e')](saveUpdates(_0x40cd80[_0x20dc('0x4b')],null))[_0x20dc('0x1e')](respondWithResult(_0x1ad238,null))[_0x20dc('0x3f')](handleError(_0x1ad238,null));};exports[_0x20dc('0x21')]=function(_0x1c65af,_0x4dd8f6){return db[_0x20dc('0x27')][_0x20dc('0x42')]({'where':{'id':_0x1c65af[_0x20dc('0x50')]['id']}})[_0x20dc('0x1e')](handleEntityNotFound(_0x4dd8f6,null))[_0x20dc('0x1e')](removeEntity(_0x4dd8f6,null))[_0x20dc('0x3f')](handleError(_0x4dd8f6,null));};exports['getHoppers']=function(_0x1c103e,_0x4cceb4,_0x2df64d){var _0x363ca3={'raw':!![],'where':{}};var _0x468230={};var _0x35b6f1={'count':0x0,'rows':[]};return db['Campaign'][_0x20dc('0x51')]({'where':{'id':_0x1c103e[_0x20dc('0x50')]['id']}})[_0x20dc('0x1e')](handleEntityNotFound(_0x4cceb4,null))[_0x20dc('0x1e')](function(_0x159825){if(_0x159825){_0x468230[_0x20dc('0x29')]=_[_0x20dc('0x2a')](db[_0x20dc('0x52')]['rawAttributes']);_0x468230[_0x20dc('0x2b')]=_[_0x20dc('0x2a')](_0x1c103e['query']);_0x468230[_0x20dc('0x2c')]=_[_0x20dc('0x41')](_0x468230[_0x20dc('0x29')],_0x468230[_0x20dc('0x2b')]);_0x363ca3[_0x20dc('0x2e')]=_[_0x20dc('0x41')](_0x468230[_0x20dc('0x29')],qs[_0x20dc('0x2d')](_0x1c103e[_0x20dc('0x2b')][_0x20dc('0x2d')]));_0x363ca3['attributes']=_0x363ca3[_0x20dc('0x2e')][_0x20dc('0x2f')]?_0x363ca3[_0x20dc('0x2e')]:_0x468230[_0x20dc('0x29')];if(!_0x1c103e[_0x20dc('0x2b')][_0x20dc('0x30')](_0x20dc('0x31'))){_0x363ca3[_0x20dc('0x19')]=qs[_0x20dc('0x19')](_0x1c103e['query'][_0x20dc('0x19')]);_0x363ca3[_0x20dc('0x18')]=qs[_0x20dc('0x18')](_0x1c103e['query'][_0x20dc('0x18')]);}_0x363ca3[_0x20dc('0x32')]=qs[_0x20dc('0x33')](_0x1c103e[_0x20dc('0x2b')][_0x20dc('0x33')]);_0x363ca3[_0x20dc('0x34')]=qs[_0x20dc('0x2c')](_[_0x20dc('0x35')](_0x1c103e['query'],_0x468230[_0x20dc('0x2c')]));_0x363ca3[_0x20dc('0x34')][_0x20dc('0x53')]=_0x159825['id'];if(_0x1c103e[_0x20dc('0x2b')][_0x20dc('0x39')]){_0x363ca3['where']=_[_0x20dc('0x3a')](_0x363ca3[_0x20dc('0x34')],{'$or':_['map'](_0x363ca3[_0x20dc('0x2e')],function(_0x2f591a){var _0x5972df={};_0x5972df[_0x2f591a]={'$like':'%'+_0x1c103e[_0x20dc('0x2b')][_0x20dc('0x39')]+'%'};return _0x5972df;})});}_0x363ca3=_['merge']({},_0x363ca3,_0x1c103e[_0x20dc('0x3b')]);return db[_0x20dc('0x52')][_0x20dc('0x17')]({'where':_0x363ca3[_0x20dc('0x34')]})[_0x20dc('0x1e')](function(_0x15e5c8){_0x35b6f1[_0x20dc('0x17')]=_0x15e5c8;if(_0x1c103e[_0x20dc('0x2b')][_0x20dc('0x3c')]){_0x363ca3[_0x20dc('0x3d')]=[{'all':!![]}];}return db[_0x20dc('0x52')][_0x20dc('0x3e')](_0x363ca3);})[_0x20dc('0x1e')](function(_0x3403e0){_0x35b6f1[_0x20dc('0x54')]=_0x3403e0;return _0x35b6f1;});}})[_0x20dc('0x1e')](respondWithFilteredResult(_0x4cceb4,_0x363ca3))['catch'](handleError(_0x4cceb4,null));};exports[_0x20dc('0x55')]=function(_0x21df5c,_0x12ce7c,_0x5f5242){var _0x14425c={'raw':!![],'where':{}};var _0x4d2d2e={};var _0x2fc46e={'count':0x0,'rows':[]};return db[_0x20dc('0x27')][_0x20dc('0x51')]({'where':{'id':_0x21df5c[_0x20dc('0x50')]['id']}})['then'](handleEntityNotFound(_0x12ce7c,null))[_0x20dc('0x1e')](function(_0x2aa184){if(_0x2aa184){_0x4d2d2e[_0x20dc('0x29')]=_[_0x20dc('0x2a')](db['CmHopperHistory'][_0x20dc('0x28')]);_0x4d2d2e[_0x20dc('0x2b')]=_['keys'](_0x21df5c['query']);_0x4d2d2e['filters']=_[_0x20dc('0x41')](_0x4d2d2e[_0x20dc('0x29')],_0x4d2d2e[_0x20dc('0x2b')]);_0x14425c['attributes']=_[_0x20dc('0x41')](_0x4d2d2e[_0x20dc('0x29')],qs[_0x20dc('0x2d')](_0x21df5c[_0x20dc('0x2b')][_0x20dc('0x2d')]));_0x14425c[_0x20dc('0x2e')]=_0x14425c[_0x20dc('0x2e')][_0x20dc('0x2f')]?_0x14425c[_0x20dc('0x2e')]:_0x4d2d2e[_0x20dc('0x29')];if(!_0x21df5c['query'][_0x20dc('0x30')](_0x20dc('0x31'))){_0x14425c[_0x20dc('0x19')]=qs['limit'](_0x21df5c[_0x20dc('0x2b')]['limit']);_0x14425c[_0x20dc('0x18')]=qs['offset'](_0x21df5c['query'][_0x20dc('0x18')]);}_0x14425c[_0x20dc('0x32')]=qs['sort'](_0x21df5c[_0x20dc('0x2b')]['sort']);_0x14425c[_0x20dc('0x34')]=qs['filters'](_[_0x20dc('0x35')](_0x21df5c['query'],_0x4d2d2e['filters']));_0x14425c[_0x20dc('0x34')][_0x20dc('0x53')]=_0x2aa184['id'];if(_0x21df5c[_0x20dc('0x2b')][_0x20dc('0x39')]){_0x14425c['where']=_[_0x20dc('0x3a')](_0x14425c[_0x20dc('0x34')],{'$or':_['map'](_0x14425c['attributes'],function(_0x56b6da){var _0xb71b17={};_0xb71b17[_0x56b6da]={'$like':'%'+_0x21df5c['query'][_0x20dc('0x39')]+'%'};return _0xb71b17;})});}_0x14425c=_['merge']({},_0x14425c,_0x21df5c[_0x20dc('0x3b')]);return db[_0x20dc('0x56')][_0x20dc('0x17')]({'where':_0x14425c[_0x20dc('0x34')]})[_0x20dc('0x1e')](function(_0x7373a4){_0x2fc46e[_0x20dc('0x17')]=_0x7373a4;if(_0x21df5c[_0x20dc('0x2b')]['includeAll']){_0x14425c['include']=[{'all':!![]}];}return db[_0x20dc('0x56')]['findAll'](_0x14425c);})[_0x20dc('0x1e')](function(_0x19af3c){_0x2fc46e['rows']=_0x19af3c;return _0x2fc46e;});}})[_0x20dc('0x1e')](respondWithFilteredResult(_0x12ce7c,_0x14425c))[_0x20dc('0x3f')](handleError(_0x12ce7c,null));};exports['getHopperFinals']=function(_0x512ded,_0x7acedb,_0x1989db){var _0x3c7e9f={'raw':!![],'where':{}};var _0x58953d={};var _0x1bb6db={'count':0x0,'rows':[]};return db[_0x20dc('0x27')]['findOne']({'where':{'id':_0x512ded[_0x20dc('0x50')]['id']}})['then'](handleEntityNotFound(_0x7acedb,null))['then'](function(_0x1ef2f2){if(_0x1ef2f2){_0x58953d[_0x20dc('0x29')]=_['keys'](db[_0x20dc('0x57')]['rawAttributes']);_0x58953d['query']=_[_0x20dc('0x2a')](_0x512ded[_0x20dc('0x2b')]);_0x58953d[_0x20dc('0x2c')]=_['intersection'](_0x58953d[_0x20dc('0x29')],_0x58953d[_0x20dc('0x2b')]);_0x3c7e9f[_0x20dc('0x2e')]=_[_0x20dc('0x41')](_0x58953d['model'],qs['fields'](_0x512ded[_0x20dc('0x2b')]['fields']));_0x3c7e9f[_0x20dc('0x2e')]=_0x3c7e9f['attributes'][_0x20dc('0x2f')]?_0x3c7e9f[_0x20dc('0x2e')]:_0x58953d[_0x20dc('0x29')];if(!_0x512ded[_0x20dc('0x2b')][_0x20dc('0x30')](_0x20dc('0x31'))){_0x3c7e9f[_0x20dc('0x19')]=qs[_0x20dc('0x19')](_0x512ded['query'][_0x20dc('0x19')]);_0x3c7e9f[_0x20dc('0x18')]=qs['offset'](_0x512ded[_0x20dc('0x2b')]['offset']);}_0x3c7e9f['order']=qs[_0x20dc('0x33')](_0x512ded[_0x20dc('0x2b')][_0x20dc('0x33')]);_0x3c7e9f[_0x20dc('0x34')]=qs[_0x20dc('0x2c')](_[_0x20dc('0x35')](_0x512ded[_0x20dc('0x2b')],_0x58953d['filters']));_0x3c7e9f['where'][_0x20dc('0x53')]=_0x1ef2f2['id'];if(_0x512ded[_0x20dc('0x2b')]['filter']){_0x3c7e9f['where']=_[_0x20dc('0x3a')](_0x3c7e9f[_0x20dc('0x34')],{'$or':_[_0x20dc('0x36')](_0x3c7e9f[_0x20dc('0x2e')],function(_0x11a356){var _0x36a05b={};_0x36a05b[_0x11a356]={'$like':'%'+_0x512ded['query'][_0x20dc('0x39')]+'%'};return _0x36a05b;})});}_0x3c7e9f=_[_0x20dc('0x3a')]({},_0x3c7e9f,_0x512ded[_0x20dc('0x3b')]);return db[_0x20dc('0x57')][_0x20dc('0x17')]({'where':_0x3c7e9f[_0x20dc('0x34')]})[_0x20dc('0x1e')](function(_0x103557){_0x1bb6db[_0x20dc('0x17')]=_0x103557;if(_0x512ded[_0x20dc('0x2b')][_0x20dc('0x3c')]){_0x3c7e9f['include']=[{'all':!![]}];}return db[_0x20dc('0x57')][_0x20dc('0x3e')](_0x3c7e9f);})['then'](function(_0x36f342){_0x1bb6db['rows']=_0x36f342;return _0x1bb6db;});}})['then'](respondWithFilteredResult(_0x7acedb,_0x3c7e9f))[_0x20dc('0x3f')](handleError(_0x7acedb,null));};exports[_0x20dc('0x58')]=function(_0x590d2f,_0x2b3aeb,_0x54dec5){var _0x3ee336={'raw':!![],'where':{}};var _0x4b9f8a={};var _0x11670c={'count':0x0,'rows':[]};return db['Campaign'][_0x20dc('0x51')]({'where':{'id':_0x590d2f[_0x20dc('0x50')]['id']}})['then'](handleEntityNotFound(_0x2b3aeb,null))[_0x20dc('0x1e')](function(_0x396c7b){if(_0x396c7b){_0x4b9f8a[_0x20dc('0x29')]=_[_0x20dc('0x2a')](db[_0x20dc('0x59')][_0x20dc('0x28')]);_0x4b9f8a[_0x20dc('0x2b')]=_['keys'](_0x590d2f['query']);_0x4b9f8a[_0x20dc('0x2c')]=_[_0x20dc('0x41')](_0x4b9f8a[_0x20dc('0x29')],_0x4b9f8a[_0x20dc('0x2b')]);_0x3ee336[_0x20dc('0x2e')]=_['intersection'](_0x4b9f8a[_0x20dc('0x29')],qs[_0x20dc('0x2d')](_0x590d2f['query'][_0x20dc('0x2d')]));_0x3ee336[_0x20dc('0x2e')]=_0x3ee336[_0x20dc('0x2e')][_0x20dc('0x2f')]?_0x3ee336[_0x20dc('0x2e')]:_0x4b9f8a['model'];if(!_0x590d2f['query'][_0x20dc('0x30')](_0x20dc('0x31'))){_0x3ee336[_0x20dc('0x19')]=qs[_0x20dc('0x19')](_0x590d2f[_0x20dc('0x2b')][_0x20dc('0x19')]);_0x3ee336[_0x20dc('0x18')]=qs['offset'](_0x590d2f['query']['offset']);}_0x3ee336[_0x20dc('0x32')]=qs[_0x20dc('0x33')](_0x590d2f['query']['sort']);_0x3ee336[_0x20dc('0x34')]=qs['filters'](_[_0x20dc('0x35')](_0x590d2f['query'],_0x4b9f8a[_0x20dc('0x2c')]));_0x3ee336[_0x20dc('0x34')][_0x20dc('0x53')]=_0x396c7b['id'];if(_0x590d2f['query'][_0x20dc('0x39')]){_0x3ee336['where']=_[_0x20dc('0x3a')](_0x3ee336[_0x20dc('0x34')],{'$or':_[_0x20dc('0x36')](_0x3ee336[_0x20dc('0x2e')],function(_0x357c7a){var _0x416532={};_0x416532[_0x357c7a]={'$like':'%'+_0x590d2f[_0x20dc('0x2b')]['filter']+'%'};return _0x416532;})});}_0x3ee336=_[_0x20dc('0x3a')]({},_0x3ee336,_0x590d2f[_0x20dc('0x3b')]);return db[_0x20dc('0x59')][_0x20dc('0x17')]({'where':_0x3ee336[_0x20dc('0x34')]})[_0x20dc('0x1e')](function(_0x2b5a7d){_0x11670c[_0x20dc('0x17')]=_0x2b5a7d;if(_0x590d2f['query'][_0x20dc('0x3c')]){_0x3ee336[_0x20dc('0x3d')]=[{'all':!![]}];}return db['CmHopperBlack'][_0x20dc('0x3e')](_0x3ee336);})[_0x20dc('0x1e')](function(_0x3d4507){_0x11670c[_0x20dc('0x54')]=_0x3d4507;return _0x11670c;});}})[_0x20dc('0x1e')](respondWithFilteredResult(_0x2b3aeb,_0x3ee336))[_0x20dc('0x3f')](handleError(_0x2b3aeb,null));};exports[_0x20dc('0x5a')]=function(_0x31f206,_0x4ee698,_0x2adee0){var _0x112ac2={};var _0x4abc40={};var _0x5b337e;var _0x2cb059;return db[_0x20dc('0x27')][_0x20dc('0x51')]({'where':{'id':_0x31f206['params']['id']}})[_0x20dc('0x1e')](handleEntityNotFound(_0x4ee698,null))[_0x20dc('0x1e')](function(_0xdf243a){if(_0xdf243a){_0x5b337e=_0xdf243a;_0x4abc40[_0x20dc('0x29')]=_[_0x20dc('0x2a')](db['CmList'][_0x20dc('0x28')]);_0x4abc40[_0x20dc('0x2b')]=_[_0x20dc('0x2a')](_0x31f206[_0x20dc('0x2b')]);_0x4abc40[_0x20dc('0x2c')]=_[_0x20dc('0x41')](_0x4abc40[_0x20dc('0x29')],_0x4abc40[_0x20dc('0x2b')]);_0x112ac2[_0x20dc('0x2e')]=_[_0x20dc('0x41')](_0x4abc40[_0x20dc('0x29')],qs[_0x20dc('0x2d')](_0x31f206['query'][_0x20dc('0x2d')]));_0x112ac2['attributes']=_0x112ac2['attributes'][_0x20dc('0x2f')]?_0x112ac2[_0x20dc('0x2e')]:_0x4abc40['model'];_0x112ac2['order']=qs[_0x20dc('0x33')](_0x31f206['query'][_0x20dc('0x33')]);_0x112ac2[_0x20dc('0x34')]=qs[_0x20dc('0x2c')](_[_0x20dc('0x35')](_0x31f206['query'],_0x4abc40['filters']));if(_0x31f206[_0x20dc('0x2b')][_0x20dc('0x39')]){_0x112ac2[_0x20dc('0x34')]=_[_0x20dc('0x3a')](_0x112ac2[_0x20dc('0x34')],{'$or':_['map'](_0x112ac2[_0x20dc('0x2e')],function(_0x316229){var _0x36095d={};_0x36095d[_0x316229]={'$like':'%'+_0x31f206[_0x20dc('0x2b')][_0x20dc('0x39')]+'%'};return _0x36095d;})});}_0x112ac2=_[_0x20dc('0x3a')]({},_0x112ac2,_0x31f206[_0x20dc('0x3b')]);return _0x5b337e[_0x20dc('0x5a')](_0x112ac2);}})[_0x20dc('0x1e')](function(_0x5e3422){if(_0x5e3422){_0x2cb059=_0x5e3422['length'];if(!_0x31f206[_0x20dc('0x2b')]['hasOwnProperty']('nolimit')){_0x112ac2['limit']=qs['limit'](_0x31f206[_0x20dc('0x2b')][_0x20dc('0x19')]);_0x112ac2[_0x20dc('0x18')]=qs[_0x20dc('0x18')](_0x31f206['query']['offset']);}return _0x5b337e[_0x20dc('0x5a')](_0x112ac2);}})[_0x20dc('0x1e')](function(_0x1370f1){if(_0x1370f1){return _0x1370f1?{'count':_0x2cb059,'rows':_0x1370f1}:null;}})[_0x20dc('0x1e')](respondWithResult(_0x4ee698,null))[_0x20dc('0x3f')](handleError(_0x4ee698,null));};exports[_0x20dc('0x5b')]=function(_0x42f894,_0x15aebd,_0x3f10f9){var _0x53a43b,_0x289d59;return db['Campaign'][_0x20dc('0x42')]({'where':{'id':_0x42f894['params']['id']}})['then'](handleEntityNotFound(_0x15aebd,null))[_0x20dc('0x1e')](function(_0x6801c3){if(_0x6801c3){_0x289d59=_0x6801c3;return _0x6801c3['addLists'](_0x42f894[_0x20dc('0x4b')][_0x20dc('0x5c')],_[_0x20dc('0x5d')](_0x42f894[_0x20dc('0x4b')],[_0x20dc('0x5c'),'id'])||{});}return null;})[_0x20dc('0x5e')](function(_0x3194a6){var _0x5e292b;_0x53a43b=_0x3194a6||[];var _0x25f390=[];if(_0x3194a6){for(var _0x1dbe83=0x0;_0x1dbe83<_0x3194a6[_0x20dc('0x2f')];_0x1dbe83+=0x1){var _0x213c1e=_0x3194a6[_0x1dbe83][_0x20dc('0x45')]({'plain':!![]});_0x289d59[_0x20dc('0x5f')]=_0x42f894['body'][_0x20dc('0x5f')]?_0x42f894[_0x20dc('0x4b')]['dialCheckDuplicateType']:_0x289d59[_0x20dc('0x5f')];switch(_0x289d59[_0x20dc('0x5f')]){case _0x20dc('0x60'):_0x5e292b=squel['insert']()[_0x20dc('0x61')](_0x20dc('0x62'))[_0x20dc('0x63')]([_0x20dc('0x64'),'scheduledAt','ContactId','ListId','CampaignId',_0x20dc('0x4c'),'updatedAt'],squel[_0x20dc('0x65')]()['field'](_0x20dc('0x64'),'phone')['field'](_0x20dc('0x66'),_0x20dc('0x67'))[_0x20dc('0x68')]('id','ContactId')['field'](_0x213c1e[_0x20dc('0x69')][_0x20dc('0x6a')](),'ListId')[_0x20dc('0x68')](_0x42f894[_0x20dc('0x50')]['id'][_0x20dc('0x6a')](),_0x20dc('0x53'))[_0x20dc('0x68')](_0x20dc('0x66'),_0x20dc('0x4c'))[_0x20dc('0x68')](_0x20dc('0x66'),'updatedAt')[_0x20dc('0x6b')](_0x20dc('0x6c'))[_0x20dc('0x34')](_0x20dc('0x6d'))[_0x20dc('0x34')](_0x20dc('0x6e'),_0x213c1e[_0x20dc('0x69')]['toString']())['where'](_0x20dc('0x6f'))[_0x20dc('0x34')]('phone\x20NOT\x20IN\x20(?)',squel['select']()[_0x20dc('0x68')](_0x20dc('0x70'))[_0x20dc('0x6b')]('cm_hopper_final')['where']('CampaignId\x20=\x20?',_0x42f894[_0x20dc('0x50')]['id'][_0x20dc('0x6a')]()))['where'](_0x20dc('0x71'),squel[_0x20dc('0x65')]()[_0x20dc('0x68')]('COALESCE(phone,\x27\x27)')[_0x20dc('0x6b')]('cm_hopper')[_0x20dc('0x34')](_0x20dc('0x72'),_0x42f894['params']['id'][_0x20dc('0x6a')]())))[_0x20dc('0x6a')]();break;case'onlyIfOpen':_0x5e292b=squel[_0x20dc('0x73')]()[_0x20dc('0x61')]('cm_hopper')['fromQuery']([_0x20dc('0x64'),_0x20dc('0x67'),_0x20dc('0x74'),_0x20dc('0x75'),_0x20dc('0x53'),'createdAt','updatedAt'],squel[_0x20dc('0x65')]()[_0x20dc('0x68')](_0x20dc('0x64'),_0x20dc('0x64'))[_0x20dc('0x68')](_0x20dc('0x66'),_0x20dc('0x67'))['field']('id',_0x20dc('0x74'))[_0x20dc('0x68')](_0x213c1e['CmListId'][_0x20dc('0x6a')](),_0x20dc('0x75'))[_0x20dc('0x68')](_0x42f894[_0x20dc('0x50')]['id'][_0x20dc('0x6a')](),_0x20dc('0x53'))['field'](_0x20dc('0x66'),_0x20dc('0x4c'))[_0x20dc('0x68')](_0x20dc('0x66'),_0x20dc('0x4a'))['from']('cm_contacts')[_0x20dc('0x34')](_0x20dc('0x6d'))[_0x20dc('0x34')](_0x20dc('0x6e'),_0x213c1e[_0x20dc('0x69')][_0x20dc('0x6a')]())[_0x20dc('0x34')](_0x20dc('0x6f'))[_0x20dc('0x34')](_0x20dc('0x71'),squel[_0x20dc('0x65')]()[_0x20dc('0x68')]('COALESCE(phone,\x27\x27)')[_0x20dc('0x6b')](_0x20dc('0x62'))[_0x20dc('0x34')](_0x20dc('0x72'),_0x42f894[_0x20dc('0x50')]['id'][_0x20dc('0x6a')]())))[_0x20dc('0x6a')]();break;default:_0x5e292b=squel[_0x20dc('0x73')]()['into'](_0x20dc('0x62'))[_0x20dc('0x63')]([_0x20dc('0x64'),'scheduledAt',_0x20dc('0x74'),_0x20dc('0x75'),_0x20dc('0x53'),_0x20dc('0x4c'),_0x20dc('0x4a')],squel[_0x20dc('0x65')]()[_0x20dc('0x68')](_0x20dc('0x64'),'phone')[_0x20dc('0x68')](_0x20dc('0x66'),_0x20dc('0x67'))[_0x20dc('0x68')]('id','ContactId')[_0x20dc('0x68')](_0x213c1e[_0x20dc('0x69')][_0x20dc('0x6a')](),'ListId')[_0x20dc('0x68')](_0x42f894[_0x20dc('0x50')]['id'][_0x20dc('0x6a')](),_0x20dc('0x53'))[_0x20dc('0x68')](_0x20dc('0x66'),_0x20dc('0x4c'))['field'](_0x20dc('0x66'),'updatedAt')['from'](_0x20dc('0x6c'))[_0x20dc('0x34')](_0x20dc('0x6d'))['where']('ListId\x20=\x20?',_0x213c1e['CmListId'][_0x20dc('0x6a')]())[_0x20dc('0x34')]('phone\x20IS\x20NOT\x20NULL'))[_0x20dc('0x6a')]();}_0x25f390[_0x20dc('0x76')](db['sequelize'][_0x20dc('0x2b')](_0x5e292b));}return BPromise[_0x20dc('0x77')](_0x25f390);}})['then'](function(){return _0x53a43b;})[_0x20dc('0x1e')](respondWithResult(_0x15aebd,null))[_0x20dc('0x3f')](handleError(_0x15aebd,null));};exports[_0x20dc('0x78')]=function(_0x1fc6a9,_0x1ab05e,_0x4b5a4c){return db['Campaign'][_0x20dc('0x42')]({'where':{'id':_0x1fc6a9[_0x20dc('0x50')]['id']}})[_0x20dc('0x1e')](handleEntityNotFound(_0x1ab05e,null))[_0x20dc('0x1e')](function(_0xb21e22){if(_0xb21e22){return _0xb21e22[_0x20dc('0x78')](_0x1fc6a9[_0x20dc('0x2b')][_0x20dc('0x5c')]);}})[_0x20dc('0x1e')](function(_0x1156e8){if(_0x1156e8){return db[_0x20dc('0x52')]['destroy']({'where':{'ListId':_0x1fc6a9[_0x20dc('0x2b')]['ids'],'CampaignId':_0x1fc6a9[_0x20dc('0x50')]['id']}})[_0x20dc('0x1e')](function(){return _0x1156e8;});}})[_0x20dc('0x1e')](respondWithStatusCode(_0x1ab05e,null))[_0x20dc('0x3f')](handleError(_0x1ab05e,null));};exports[_0x20dc('0x79')]=function(_0x1d4592,_0x2d47af,_0x434a49){var _0x424f8f={'raw':!![],'where':{}};var _0x5971c9={};var _0x531066={'count':0x0,'rows':[]};return db[_0x20dc('0x27')][_0x20dc('0x51')]({'where':{'id':_0x1d4592[_0x20dc('0x50')]['id']}})['then'](handleEntityNotFound(_0x2d47af,null))[_0x20dc('0x1e')](function(_0x5a7b6c){if(_0x5a7b6c){_0x5971c9[_0x20dc('0x29')]=_[_0x20dc('0x2a')](db[_0x20dc('0x7a')][_0x20dc('0x28')]);_0x5971c9[_0x20dc('0x2b')]=_[_0x20dc('0x2a')](_0x1d4592['query']);_0x5971c9[_0x20dc('0x2c')]=_[_0x20dc('0x41')](_0x5971c9[_0x20dc('0x29')],_0x5971c9[_0x20dc('0x2b')]);_0x424f8f[_0x20dc('0x2e')]=_[_0x20dc('0x41')](_0x5971c9['model'],qs[_0x20dc('0x2d')](_0x1d4592[_0x20dc('0x2b')][_0x20dc('0x2d')]));_0x424f8f['attributes']=_0x424f8f[_0x20dc('0x2e')][_0x20dc('0x2f')]?_0x424f8f[_0x20dc('0x2e')]:_0x5971c9[_0x20dc('0x29')];if(!_0x1d4592[_0x20dc('0x2b')][_0x20dc('0x30')](_0x20dc('0x31'))){_0x424f8f['limit']=qs['limit'](_0x1d4592['query'][_0x20dc('0x19')]);_0x424f8f[_0x20dc('0x18')]=qs['offset'](_0x1d4592[_0x20dc('0x2b')][_0x20dc('0x18')]);}_0x424f8f[_0x20dc('0x32')]=qs[_0x20dc('0x33')](_0x1d4592['query'][_0x20dc('0x33')]);_0x424f8f[_0x20dc('0x34')]=qs[_0x20dc('0x2c')](_[_0x20dc('0x35')](_0x1d4592['query'],_0x5971c9[_0x20dc('0x2c')]));_0x424f8f[_0x20dc('0x34')][_0x20dc('0x53')]=_0x5a7b6c['id'];if(_0x1d4592[_0x20dc('0x2b')][_0x20dc('0x39')]){_0x424f8f[_0x20dc('0x34')]=_[_0x20dc('0x3a')](_0x424f8f['where'],{'$or':_[_0x20dc('0x36')](_0x424f8f[_0x20dc('0x2e')],function(_0x4a1812){var _0x1c25f1={};_0x1c25f1[_0x4a1812]={'$like':'%'+_0x1d4592['query'][_0x20dc('0x39')]+'%'};return _0x1c25f1;})});}_0x424f8f=_[_0x20dc('0x3a')]({},_0x424f8f,_0x1d4592[_0x20dc('0x3b')]);return db['CmList'][_0x20dc('0x17')]({'where':_0x424f8f[_0x20dc('0x34')]})['then'](function(_0x5d6738){_0x531066['count']=_0x5d6738;if(_0x1d4592['query'][_0x20dc('0x3c')]){_0x424f8f[_0x20dc('0x3d')]=[{'all':!![]}];}return db[_0x20dc('0x7a')][_0x20dc('0x3e')](_0x424f8f);})[_0x20dc('0x1e')](function(_0x4d5d61){_0x531066[_0x20dc('0x54')]=_0x4d5d61;return _0x531066;});}})['then'](respondWithFilteredResult(_0x2d47af,_0x424f8f))[_0x20dc('0x3f')](handleError(_0x2d47af,null));};exports['addBlackLists']=function(_0x3aa850,_0x40277f,_0x4d7e1c){var _0x311aef,_0x2e3365;return db[_0x20dc('0x27')][_0x20dc('0x42')]({'where':{'id':_0x3aa850[_0x20dc('0x50')]['id']}})[_0x20dc('0x1e')](handleEntityNotFound(_0x40277f,null))[_0x20dc('0x1e')](function(_0x183a44){if(_0x183a44){_0x2e3365=_0x183a44;return _0x183a44[_0x20dc('0x7b')](_0x3aa850['body'][_0x20dc('0x5c')],_['omit'](_0x3aa850[_0x20dc('0x4b')],[_0x20dc('0x5c'),'id'])||{});}return null;})[_0x20dc('0x5e')](function(_0x5ce266){var _0x406a52;_0x311aef=_0x5ce266||[];var _0x574122=[];if(_0x5ce266){for(var _0x51ad2e=0x0;_0x51ad2e<_0x5ce266[_0x20dc('0x2f')];_0x51ad2e+=0x1){var _0x2469ed=_0x5ce266[_0x51ad2e][_0x20dc('0x45')]({'plain':!![]});_0x406a52=squel[_0x20dc('0x73')]()[_0x20dc('0x61')](_0x20dc('0x7c'))[_0x20dc('0x63')](['phone',_0x20dc('0x74'),_0x20dc('0x75'),_0x20dc('0x53'),'createdAt','updatedAt'],squel[_0x20dc('0x65')]()[_0x20dc('0x68')](_0x20dc('0x64'),'phone')[_0x20dc('0x68')]('id',_0x20dc('0x74'))[_0x20dc('0x68')](_0x2469ed[_0x20dc('0x69')]['toString'](),'ListId')[_0x20dc('0x68')](_0x3aa850['params']['id']['toString'](),_0x20dc('0x53'))[_0x20dc('0x68')](_0x20dc('0x66'),_0x20dc('0x4c'))[_0x20dc('0x68')](_0x20dc('0x66'),'updatedAt')[_0x20dc('0x6b')](_0x20dc('0x6c'))[_0x20dc('0x34')](_0x20dc('0x6d'))[_0x20dc('0x34')](_0x20dc('0x6e'),_0x2469ed[_0x20dc('0x69')]['toString']())[_0x20dc('0x34')](_0x20dc('0x6f')))['toString']();_0x574122['push'](db['sequelize'][_0x20dc('0x2b')](_0x406a52));}return BPromise[_0x20dc('0x77')](_0x574122);}})['then'](function(){return _0x311aef;})[_0x20dc('0x1e')](respondWithResult(_0x40277f,null))['catch'](handleError(_0x40277f,null));};exports[_0x20dc('0x7d')]=function(_0x552875,_0x2637e7,_0x25cdb0){return db[_0x20dc('0x27')][_0x20dc('0x42')]({'where':{'id':_0x552875[_0x20dc('0x50')]['id']}})[_0x20dc('0x1e')](handleEntityNotFound(_0x2637e7,null))[_0x20dc('0x1e')](function(_0x21b63d){if(_0x21b63d){return _0x21b63d[_0x20dc('0x7d')](_0x552875[_0x20dc('0x2b')][_0x20dc('0x5c')]);}})[_0x20dc('0x1e')](function(_0x290572){if(_0x290572){return db[_0x20dc('0x59')][_0x20dc('0x21')]({'where':{'ListId':_0x552875['query'][_0x20dc('0x5c')],'CampaignId':_0x552875['params']['id']}})[_0x20dc('0x1e')](function(){return _0x290572;});}})['then'](respondWithStatusCode(_0x2637e7,null))[_0x20dc('0x3f')](handleError(_0x2637e7,null));};
\ No newline at end of file
+var _0x8a42=['error','stack','name','send','index','Campaign','model','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','map','key','VIRTUAL','field','merge','options','count','includeAll','include','findAll','rows','params','keys','find','catch','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','IvrCampaigns','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','rawAttributes','omit','createdAt','updatedAt','UserProfileSection','destroy','CmHopper','pick','CampaignId','getHopperHistories','findOne','CmHopperHistory','getHopperFinals','CmHopperFinal','CmHopperBlack','getLists','CmList','addLists','ids','spread','dialCheckDuplicateType','always','cm_hopper','fromQuery','phone','scheduledAt','ContactId','ListId','NOW()','CmListId','toString','from','cm_contacts','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','phone\x20IS\x20NOT\x20NULL','phone\x20NOT\x20IN\x20(?)','select','cm_hopper_final','COALESCE(phone,\x27\x27)','CampaignId\x20=\x20?','into','push','all','addBlackLists','removeBlackLists','html-pdf','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','ioredis','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','limit','set','apply','save','update','then','get','UserProfileResource'];(function(_0x4975e5,_0x398413){var _0xab8cc5=function(_0x299873){while(--_0x299873){_0x4975e5['push'](_0x4975e5['shift']());}};_0xab8cc5(++_0x398413);}(_0x8a42,0x14d));var _0x28a4=function(_0x602d6b,_0x4c7983){_0x602d6b=_0x602d6b-0x0;var _0x2e508d=_0x8a42[_0x602d6b];return _0x2e508d;};'use strict';var pdf=require(_0x28a4('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x28a4('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x28a4('0x2'));var rp=require(_0x28a4('0x3'));var moment=require('moment');var BPromise=require(_0x28a4('0x4'));var Mustache=require(_0x28a4('0x5'));var util=require(_0x28a4('0x6'));var path=require('path');var sox=require(_0x28a4('0x7'));var csv=require(_0x28a4('0x8'));var ejs=require(_0x28a4('0x9'));var fs=require('fs');var _=require(_0x28a4('0xa'));var squel=require(_0x28a4('0xb'));var crypto=require('crypto');var jsforce=require(_0x28a4('0xc'));var deskjs=require(_0x28a4('0xd'));var toCsv=require('to-csv');var querystring=require(_0x28a4('0xe'));var Papa=require('papaparse');var Redis=require(_0x28a4('0xf'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0x28a4('0x10'))(_0x28a4('0x11'));var utils=require('../../config/utils');var config=require(_0x28a4('0x12'));var db=require(_0x28a4('0x13'))['db'];function respondWithStatusCode(_0x2b4964,_0x268adc){_0x268adc=_0x268adc||0xcc;return function(_0x2999d1){if(_0x2999d1){return _0x2b4964[_0x28a4('0x14')](_0x268adc);}return _0x2b4964[_0x28a4('0x15')](_0x268adc)[_0x28a4('0x16')]();};}function respondWithResult(_0x800284,_0x5aec5b){_0x5aec5b=_0x5aec5b||0xc8;return function(_0x5ed079){if(_0x5ed079){return _0x800284[_0x28a4('0x15')](_0x5aec5b)[_0x28a4('0x17')](_0x5ed079);}};}function respondWithFilteredResult(_0x57f95e,_0x8691b9){return function(_0x4068ce){if(_0x4068ce){var _0x9e6585=_0x4068ce['count'],_0x5de51f=_0x8691b9[_0x28a4('0x18')],_0x739934=_0x8691b9[_0x28a4('0x18')]+_0x8691b9[_0x28a4('0x19')],_0x421172;if(_0x739934>=_0x9e6585){_0x739934=_0x9e6585;_0x421172=0xc8;}else{_0x421172=0xce;}_0x57f95e[_0x28a4('0x15')](_0x421172);return _0x57f95e[_0x28a4('0x1a')]('Content-Range',_0x5de51f+'-'+_0x739934+'/'+_0x9e6585)[_0x28a4('0x17')](_0x4068ce);}return null;};}function patchUpdates(_0x126584){return function(_0x1fa230){try{jsonpatch[_0x28a4('0x1b')](_0x1fa230,_0x126584,!![]);}catch(_0x59cf17){return BPromise['reject'](_0x59cf17);}return _0x1fa230[_0x28a4('0x1c')]();};}function saveUpdates(_0x697dc4,_0x1e3013){return function(_0x3f0706){if(_0x3f0706){return _0x3f0706[_0x28a4('0x1d')](_0x697dc4)[_0x28a4('0x1e')](function(_0x511240){return _0x511240;});}return null;};}function removeEntity(_0x1739f3,_0x468790){return function(_0x28e894){if(_0x28e894){return _0x28e894['destroy']()['then'](function(){var _0x2dd9c1=_0x28e894[_0x28a4('0x1f')]({'plain':!![]});var _0x5a1a52='IvrCampaigns';return db[_0x28a4('0x20')]['destroy']({'where':{'type':_0x5a1a52,'resourceId':_0x2dd9c1['id']}})[_0x28a4('0x1e')](function(){return _0x28e894;});})[_0x28a4('0x1e')](function(){_0x1739f3[_0x28a4('0x15')](0xcc)[_0x28a4('0x16')]();});}};}function handleEntityNotFound(_0x461103,_0x189574){return function(_0x9b509a){if(!_0x9b509a){_0x461103['sendStatus'](0x194);}return _0x9b509a;};}function handleError(_0x10769f,_0x397680){_0x397680=_0x397680||0x1f4;return function(_0x40550e){logger[_0x28a4('0x21')](_0x40550e[_0x28a4('0x22')]);if(_0x40550e['name']){delete _0x40550e[_0x28a4('0x23')];}_0x10769f[_0x28a4('0x15')](_0x397680)[_0x28a4('0x24')](_0x40550e);};}exports[_0x28a4('0x25')]=function(_0xc77828,_0x4b556f){var _0x2c70e4={},_0x57a61f={},_0x11a3fd={'count':0x0,'rows':[]};var _0xfd899c=db[_0x28a4('0x26')]['rawAttributes'];_0x57a61f[_0x28a4('0x27')]=_['keys'](_0xfd899c);_0x57a61f[_0x28a4('0x28')]=_['keys'](_0xc77828[_0x28a4('0x28')]);_0x57a61f[_0x28a4('0x29')]=_['intersection'](_0x57a61f['model'],_0x57a61f[_0x28a4('0x28')]);_0x2c70e4[_0x28a4('0x2a')]=_[_0x28a4('0x2b')](_0x57a61f[_0x28a4('0x27')],qs[_0x28a4('0x2c')](_0xc77828[_0x28a4('0x28')][_0x28a4('0x2c')]));_0x2c70e4[_0x28a4('0x2a')]=_0x2c70e4[_0x28a4('0x2a')][_0x28a4('0x2d')]?_0x2c70e4[_0x28a4('0x2a')]:_0x57a61f[_0x28a4('0x27')];if(!_0xc77828['query'][_0x28a4('0x2e')](_0x28a4('0x2f'))){_0x2c70e4['limit']=qs[_0x28a4('0x19')](_0xc77828[_0x28a4('0x28')][_0x28a4('0x19')]);_0x2c70e4[_0x28a4('0x18')]=qs[_0x28a4('0x18')](_0xc77828[_0x28a4('0x28')][_0x28a4('0x18')]);}_0x2c70e4[_0x28a4('0x30')]=qs[_0x28a4('0x31')](_0xc77828['query'][_0x28a4('0x31')]);_0x2c70e4[_0x28a4('0x32')]=qs[_0x28a4('0x29')](_['pick'](_0xc77828['query'],_0x57a61f[_0x28a4('0x29')]));if(_0xc77828[_0x28a4('0x28')][_0x28a4('0x33')]){_0x2c70e4[_0x28a4('0x32')]=_['merge'](_0x2c70e4['where'],{'$or':_[_0x28a4('0x34')](_0xfd899c,function(_0x58e09a){if(_0x58e09a['type'][_0x28a4('0x35')]!==_0x28a4('0x36')){var _0x37700a={};_0x37700a[_0x58e09a[_0x28a4('0x37')]]={'$like':'%'+_0xc77828[_0x28a4('0x28')][_0x28a4('0x33')]+'%'};return _0x37700a;}})});}_0x2c70e4=_[_0x28a4('0x38')]({},_0x2c70e4,_0xc77828[_0x28a4('0x39')]);var _0x412b86={'where':_0x2c70e4[_0x28a4('0x32')]};return db[_0x28a4('0x26')][_0x28a4('0x3a')](_0x412b86)[_0x28a4('0x1e')](function(_0x80398a){_0x11a3fd[_0x28a4('0x3a')]=_0x80398a;if(_0xc77828[_0x28a4('0x28')][_0x28a4('0x3b')]){_0x2c70e4[_0x28a4('0x3c')]=[{'all':!![]}];}return db['Campaign'][_0x28a4('0x3d')](_0x2c70e4);})[_0x28a4('0x1e')](function(_0xd3ec82){_0x11a3fd[_0x28a4('0x3e')]=_0xd3ec82;return _0x11a3fd;})[_0x28a4('0x1e')](respondWithFilteredResult(_0x4b556f,_0x2c70e4))['catch'](handleError(_0x4b556f,null));};exports['show']=function(_0x35d4de,_0x2d01cc){var _0xf6caab={'raw':![],'where':{'id':_0x35d4de[_0x28a4('0x3f')]['id']}},_0x54dec9={};_0x54dec9['model']=_['keys'](db[_0x28a4('0x26')]['rawAttributes']);_0x54dec9[_0x28a4('0x28')]=_[_0x28a4('0x40')](_0x35d4de['query']);_0x54dec9[_0x28a4('0x29')]=_['intersection'](_0x54dec9[_0x28a4('0x27')],_0x54dec9[_0x28a4('0x28')]);_0xf6caab[_0x28a4('0x2a')]=_['intersection'](_0x54dec9[_0x28a4('0x27')],qs[_0x28a4('0x2c')](_0x35d4de[_0x28a4('0x28')][_0x28a4('0x2c')]));_0xf6caab[_0x28a4('0x2a')]=_0xf6caab[_0x28a4('0x2a')][_0x28a4('0x2d')]?_0xf6caab[_0x28a4('0x2a')]:_0x54dec9['model'];if(_0x35d4de[_0x28a4('0x28')][_0x28a4('0x3b')]){_0xf6caab[_0x28a4('0x3c')]=[{'all':!![]}];}_0xf6caab=_[_0x28a4('0x38')]({},_0xf6caab,_0x35d4de[_0x28a4('0x39')]);return db[_0x28a4('0x26')][_0x28a4('0x41')](_0xf6caab)[_0x28a4('0x1e')](handleEntityNotFound(_0x2d01cc,null))[_0x28a4('0x1e')](respondWithResult(_0x2d01cc,null))[_0x28a4('0x42')](handleError(_0x2d01cc,null));};exports['create']=function(_0x5d4f8a,_0x19cad3){return db[_0x28a4('0x26')][_0x28a4('0x43')](_0x5d4f8a[_0x28a4('0x44')],{})[_0x28a4('0x1e')](function(_0x1639d4){var _0x47fca1=_0x5d4f8a[_0x28a4('0x45')]['get']({'plain':!![]});if(!_0x47fca1)throw new Error(_0x28a4('0x46'));if(_0x47fca1[_0x28a4('0x47')]===_0x28a4('0x45')){var _0x299d75=_0x1639d4[_0x28a4('0x1f')]({'plain':!![]});var _0xfb389d=_0x28a4('0x48');return db['UserProfileSection'][_0x28a4('0x41')]({'where':{'name':_0xfb389d,'userProfileId':_0x47fca1[_0x28a4('0x49')]},'raw':!![]})[_0x28a4('0x1e')](function(_0xebc576){if(_0xebc576&&_0xebc576[_0x28a4('0x4a')]===0x0){return db['UserProfileResource'][_0x28a4('0x43')]({'name':_0x299d75[_0x28a4('0x23')],'resourceId':_0x299d75['id'],'type':_0xebc576['name'],'sectionId':_0xebc576['id']},{})[_0x28a4('0x1e')](function(){return _0x1639d4;});}else{return _0x1639d4;}})[_0x28a4('0x42')](function(_0x370ef9){logger[_0x28a4('0x21')](_0x28a4('0x4b'),_0x370ef9);throw _0x370ef9;});}return _0x1639d4;})['then'](respondWithResult(_0x19cad3,0xc9))['catch'](handleError(_0x19cad3,null));};exports['clone']=function(_0x17ee27,_0x992ffd){var _0x30f3a6={'raw':![],'where':{'id':_0x17ee27[_0x28a4('0x3f')]['id']}},_0x3c5d2f={};_0x3c5d2f['model']=_[_0x28a4('0x40')](db[_0x28a4('0x26')][_0x28a4('0x4c')]);_0x30f3a6[_0x28a4('0x2a')]=_[_0x28a4('0x2b')](_0x3c5d2f[_0x28a4('0x27')],qs[_0x28a4('0x2c')](_0x17ee27[_0x28a4('0x28')][_0x28a4('0x2c')]));_0x30f3a6[_0x28a4('0x2a')]=_0x30f3a6['attributes'][_0x28a4('0x2d')]?_0x30f3a6[_0x28a4('0x2a')]:_0x3c5d2f[_0x28a4('0x27')];if(_0x17ee27[_0x28a4('0x28')][_0x28a4('0x3b')]){_0x30f3a6[_0x28a4('0x3c')]=[{'all':!![]}];}_0x30f3a6=_[_0x28a4('0x38')]({},_0x30f3a6,_0x17ee27['options']);return db['Campaign'][_0x28a4('0x41')](_0x30f3a6)[_0x28a4('0x1e')](handleEntityNotFound(_0x992ffd,null))['then'](function(_0x5b3cb4){if(_0x5b3cb4){var _0x337f28=_0x5b3cb4[_0x28a4('0x1f')]({'plain':!![]});_0x337f28=qs[_0x28a4('0x4d')](_0x337f28,['id',_0x28a4('0x4e'),_0x28a4('0x4f')]);_0x17ee27[_0x28a4('0x44')]=_[_0x28a4('0x4d')](_0x17ee27[_0x28a4('0x44')],['id','createdAt',_0x28a4('0x4f')]);return db['Campaign']['create'](_[_0x28a4('0x38')](_0x337f28,_0x17ee27[_0x28a4('0x44')]),{'include':_0x17ee27[_0x28a4('0x28')][_0x28a4('0x3b')]?[{'all':!![]}]:undefined})[_0x28a4('0x1e')](function(_0x185ef5){var _0xbfae92=_0x17ee27[_0x28a4('0x45')][_0x28a4('0x1f')]({'plain':!![]});if(!_0xbfae92)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0xbfae92['role']===_0x28a4('0x45')){var _0x5ed169=_0x185ef5[_0x28a4('0x1f')]({'plain':!![]});var _0x36b02f='IvrCampaigns';return db[_0x28a4('0x50')][_0x28a4('0x41')]({'where':{'name':_0x36b02f,'userProfileId':_0xbfae92['userProfileId']},'raw':!![]})['then'](function(_0x1e6e59){if(_0x1e6e59&&_0x1e6e59[_0x28a4('0x4a')]===0x0){return db[_0x28a4('0x20')]['create']({'name':_0x5ed169[_0x28a4('0x23')],'resourceId':_0x5ed169['id'],'type':_0x1e6e59[_0x28a4('0x23')],'sectionId':_0x1e6e59['id']},{})['then'](function(){return _0x185ef5;});}else{return _0x185ef5;}})[_0x28a4('0x42')](function(_0x214809){logger[_0x28a4('0x21')](_0x28a4('0x4b'),_0x214809);throw _0x214809;});}return _0x185ef5;});}})[_0x28a4('0x1e')](respondWithResult(_0x992ffd,0xc9))[_0x28a4('0x42')](handleError(_0x992ffd,null));};exports[_0x28a4('0x1d')]=function(_0xd921c8,_0x511c51){if(_0xd921c8[_0x28a4('0x44')]['id']){delete _0xd921c8[_0x28a4('0x44')]['id'];}return db[_0x28a4('0x26')][_0x28a4('0x41')]({'where':{'id':_0xd921c8['params']['id']}})['then'](handleEntityNotFound(_0x511c51,null))[_0x28a4('0x1e')](saveUpdates(_0xd921c8[_0x28a4('0x44')],null))[_0x28a4('0x1e')](respondWithResult(_0x511c51,null))[_0x28a4('0x42')](handleError(_0x511c51,null));};exports[_0x28a4('0x51')]=function(_0x15034d,_0x3ca6e4){return db[_0x28a4('0x26')]['find']({'where':{'id':_0x15034d[_0x28a4('0x3f')]['id']}})[_0x28a4('0x1e')](handleEntityNotFound(_0x3ca6e4,null))[_0x28a4('0x1e')](removeEntity(_0x3ca6e4,null))[_0x28a4('0x42')](handleError(_0x3ca6e4,null));};exports['getHoppers']=function(_0x351acb,_0x1afd75,_0x3c5e21){var _0x2eb9b3={'raw':!![],'where':{}};var _0x1feadf={};var _0x381941={'count':0x0,'rows':[]};return db[_0x28a4('0x26')]['findOne']({'where':{'id':_0x351acb[_0x28a4('0x3f')]['id']}})[_0x28a4('0x1e')](handleEntityNotFound(_0x1afd75,null))[_0x28a4('0x1e')](function(_0x350db9){if(_0x350db9){_0x1feadf[_0x28a4('0x27')]=_[_0x28a4('0x40')](db[_0x28a4('0x52')][_0x28a4('0x4c')]);_0x1feadf[_0x28a4('0x28')]=_[_0x28a4('0x40')](_0x351acb['query']);_0x1feadf[_0x28a4('0x29')]=_[_0x28a4('0x2b')](_0x1feadf[_0x28a4('0x27')],_0x1feadf[_0x28a4('0x28')]);_0x2eb9b3[_0x28a4('0x2a')]=_['intersection'](_0x1feadf['model'],qs[_0x28a4('0x2c')](_0x351acb[_0x28a4('0x28')][_0x28a4('0x2c')]));_0x2eb9b3[_0x28a4('0x2a')]=_0x2eb9b3['attributes'][_0x28a4('0x2d')]?_0x2eb9b3[_0x28a4('0x2a')]:_0x1feadf[_0x28a4('0x27')];if(!_0x351acb['query'][_0x28a4('0x2e')](_0x28a4('0x2f'))){_0x2eb9b3['limit']=qs[_0x28a4('0x19')](_0x351acb[_0x28a4('0x28')][_0x28a4('0x19')]);_0x2eb9b3['offset']=qs['offset'](_0x351acb[_0x28a4('0x28')]['offset']);}_0x2eb9b3['order']=qs['sort'](_0x351acb[_0x28a4('0x28')][_0x28a4('0x31')]);_0x2eb9b3[_0x28a4('0x32')]=qs[_0x28a4('0x29')](_[_0x28a4('0x53')](_0x351acb[_0x28a4('0x28')],_0x1feadf[_0x28a4('0x29')]));_0x2eb9b3[_0x28a4('0x32')][_0x28a4('0x54')]=_0x350db9['id'];if(_0x351acb[_0x28a4('0x28')][_0x28a4('0x33')]){_0x2eb9b3['where']=_['merge'](_0x2eb9b3[_0x28a4('0x32')],{'$or':_[_0x28a4('0x34')](_0x2eb9b3['attributes'],function(_0x57bf61){var _0xdceae5={};_0xdceae5[_0x57bf61]={'$like':'%'+_0x351acb[_0x28a4('0x28')]['filter']+'%'};return _0xdceae5;})});}_0x2eb9b3=_[_0x28a4('0x38')]({},_0x2eb9b3,_0x351acb[_0x28a4('0x39')]);return db['CmHopper'][_0x28a4('0x3a')]({'where':_0x2eb9b3[_0x28a4('0x32')]})['then'](function(_0x270689){_0x381941[_0x28a4('0x3a')]=_0x270689;if(_0x351acb[_0x28a4('0x28')]['includeAll']){_0x2eb9b3[_0x28a4('0x3c')]=[{'all':!![]}];}return db[_0x28a4('0x52')][_0x28a4('0x3d')](_0x2eb9b3);})[_0x28a4('0x1e')](function(_0x1cc87c){_0x381941[_0x28a4('0x3e')]=_0x1cc87c;return _0x381941;});}})[_0x28a4('0x1e')](respondWithFilteredResult(_0x1afd75,_0x2eb9b3))[_0x28a4('0x42')](handleError(_0x1afd75,null));};exports[_0x28a4('0x55')]=function(_0x34db10,_0x3c3494,_0x5dfd59){var _0x395c09={'raw':!![],'where':{}};var _0x199087={};var _0x1f5968={'count':0x0,'rows':[]};return db[_0x28a4('0x26')][_0x28a4('0x56')]({'where':{'id':_0x34db10['params']['id']}})[_0x28a4('0x1e')](handleEntityNotFound(_0x3c3494,null))[_0x28a4('0x1e')](function(_0x43dc92){if(_0x43dc92){_0x199087[_0x28a4('0x27')]=_[_0x28a4('0x40')](db[_0x28a4('0x57')]['rawAttributes']);_0x199087[_0x28a4('0x28')]=_[_0x28a4('0x40')](_0x34db10[_0x28a4('0x28')]);_0x199087['filters']=_[_0x28a4('0x2b')](_0x199087['model'],_0x199087[_0x28a4('0x28')]);_0x395c09[_0x28a4('0x2a')]=_[_0x28a4('0x2b')](_0x199087[_0x28a4('0x27')],qs[_0x28a4('0x2c')](_0x34db10[_0x28a4('0x28')][_0x28a4('0x2c')]));_0x395c09[_0x28a4('0x2a')]=_0x395c09['attributes'][_0x28a4('0x2d')]?_0x395c09[_0x28a4('0x2a')]:_0x199087[_0x28a4('0x27')];if(!_0x34db10[_0x28a4('0x28')][_0x28a4('0x2e')](_0x28a4('0x2f'))){_0x395c09[_0x28a4('0x19')]=qs[_0x28a4('0x19')](_0x34db10[_0x28a4('0x28')]['limit']);_0x395c09[_0x28a4('0x18')]=qs[_0x28a4('0x18')](_0x34db10[_0x28a4('0x28')][_0x28a4('0x18')]);}_0x395c09[_0x28a4('0x30')]=qs['sort'](_0x34db10['query'][_0x28a4('0x31')]);_0x395c09[_0x28a4('0x32')]=qs[_0x28a4('0x29')](_[_0x28a4('0x53')](_0x34db10[_0x28a4('0x28')],_0x199087[_0x28a4('0x29')]));_0x395c09[_0x28a4('0x32')][_0x28a4('0x54')]=_0x43dc92['id'];if(_0x34db10['query'][_0x28a4('0x33')]){_0x395c09[_0x28a4('0x32')]=_['merge'](_0x395c09[_0x28a4('0x32')],{'$or':_[_0x28a4('0x34')](_0x395c09['attributes'],function(_0x42974f){var _0x6b5354={};_0x6b5354[_0x42974f]={'$like':'%'+_0x34db10['query'][_0x28a4('0x33')]+'%'};return _0x6b5354;})});}_0x395c09=_[_0x28a4('0x38')]({},_0x395c09,_0x34db10[_0x28a4('0x39')]);return db[_0x28a4('0x57')][_0x28a4('0x3a')]({'where':_0x395c09['where']})[_0x28a4('0x1e')](function(_0x29a0b5){_0x1f5968['count']=_0x29a0b5;if(_0x34db10[_0x28a4('0x28')]['includeAll']){_0x395c09[_0x28a4('0x3c')]=[{'all':!![]}];}return db[_0x28a4('0x57')][_0x28a4('0x3d')](_0x395c09);})[_0x28a4('0x1e')](function(_0x4f23f3){_0x1f5968[_0x28a4('0x3e')]=_0x4f23f3;return _0x1f5968;});}})[_0x28a4('0x1e')](respondWithFilteredResult(_0x3c3494,_0x395c09))[_0x28a4('0x42')](handleError(_0x3c3494,null));};exports[_0x28a4('0x58')]=function(_0x2ba824,_0x1157c4,_0x168d48){var _0x273747={'raw':!![],'where':{}};var _0x32a243={};var _0x26fe28={'count':0x0,'rows':[]};return db[_0x28a4('0x26')][_0x28a4('0x56')]({'where':{'id':_0x2ba824[_0x28a4('0x3f')]['id']}})[_0x28a4('0x1e')](handleEntityNotFound(_0x1157c4,null))['then'](function(_0x340aa8){if(_0x340aa8){_0x32a243[_0x28a4('0x27')]=_[_0x28a4('0x40')](db[_0x28a4('0x59')][_0x28a4('0x4c')]);_0x32a243['query']=_[_0x28a4('0x40')](_0x2ba824[_0x28a4('0x28')]);_0x32a243[_0x28a4('0x29')]=_['intersection'](_0x32a243[_0x28a4('0x27')],_0x32a243[_0x28a4('0x28')]);_0x273747[_0x28a4('0x2a')]=_[_0x28a4('0x2b')](_0x32a243[_0x28a4('0x27')],qs['fields'](_0x2ba824[_0x28a4('0x28')]['fields']));_0x273747[_0x28a4('0x2a')]=_0x273747[_0x28a4('0x2a')][_0x28a4('0x2d')]?_0x273747[_0x28a4('0x2a')]:_0x32a243[_0x28a4('0x27')];if(!_0x2ba824['query'][_0x28a4('0x2e')](_0x28a4('0x2f'))){_0x273747['limit']=qs['limit'](_0x2ba824[_0x28a4('0x28')][_0x28a4('0x19')]);_0x273747['offset']=qs[_0x28a4('0x18')](_0x2ba824[_0x28a4('0x28')][_0x28a4('0x18')]);}_0x273747[_0x28a4('0x30')]=qs[_0x28a4('0x31')](_0x2ba824[_0x28a4('0x28')][_0x28a4('0x31')]);_0x273747[_0x28a4('0x32')]=qs[_0x28a4('0x29')](_[_0x28a4('0x53')](_0x2ba824[_0x28a4('0x28')],_0x32a243['filters']));_0x273747['where']['CampaignId']=_0x340aa8['id'];if(_0x2ba824[_0x28a4('0x28')][_0x28a4('0x33')]){_0x273747[_0x28a4('0x32')]=_['merge'](_0x273747[_0x28a4('0x32')],{'$or':_['map'](_0x273747[_0x28a4('0x2a')],function(_0x3d90cf){var _0x553857={};_0x553857[_0x3d90cf]={'$like':'%'+_0x2ba824[_0x28a4('0x28')][_0x28a4('0x33')]+'%'};return _0x553857;})});}_0x273747=_[_0x28a4('0x38')]({},_0x273747,_0x2ba824[_0x28a4('0x39')]);return db[_0x28a4('0x59')][_0x28a4('0x3a')]({'where':_0x273747[_0x28a4('0x32')]})[_0x28a4('0x1e')](function(_0x438d8e){_0x26fe28[_0x28a4('0x3a')]=_0x438d8e;if(_0x2ba824[_0x28a4('0x28')][_0x28a4('0x3b')]){_0x273747[_0x28a4('0x3c')]=[{'all':!![]}];}return db[_0x28a4('0x59')][_0x28a4('0x3d')](_0x273747);})[_0x28a4('0x1e')](function(_0x2bbe00){_0x26fe28[_0x28a4('0x3e')]=_0x2bbe00;return _0x26fe28;});}})[_0x28a4('0x1e')](respondWithFilteredResult(_0x1157c4,_0x273747))[_0x28a4('0x42')](handleError(_0x1157c4,null));};exports['getHopperBlacks']=function(_0x4ea828,_0x2293f6,_0x2ae9ed){var _0x4dc4bb={'raw':!![],'where':{}};var _0x3873fe={};var _0x213a56={'count':0x0,'rows':[]};return db[_0x28a4('0x26')][_0x28a4('0x56')]({'where':{'id':_0x4ea828[_0x28a4('0x3f')]['id']}})['then'](handleEntityNotFound(_0x2293f6,null))[_0x28a4('0x1e')](function(_0x39178e){if(_0x39178e){_0x3873fe[_0x28a4('0x27')]=_[_0x28a4('0x40')](db[_0x28a4('0x5a')]['rawAttributes']);_0x3873fe[_0x28a4('0x28')]=_[_0x28a4('0x40')](_0x4ea828[_0x28a4('0x28')]);_0x3873fe[_0x28a4('0x29')]=_[_0x28a4('0x2b')](_0x3873fe[_0x28a4('0x27')],_0x3873fe[_0x28a4('0x28')]);_0x4dc4bb['attributes']=_[_0x28a4('0x2b')](_0x3873fe[_0x28a4('0x27')],qs[_0x28a4('0x2c')](_0x4ea828[_0x28a4('0x28')][_0x28a4('0x2c')]));_0x4dc4bb[_0x28a4('0x2a')]=_0x4dc4bb[_0x28a4('0x2a')][_0x28a4('0x2d')]?_0x4dc4bb[_0x28a4('0x2a')]:_0x3873fe[_0x28a4('0x27')];if(!_0x4ea828[_0x28a4('0x28')][_0x28a4('0x2e')](_0x28a4('0x2f'))){_0x4dc4bb['limit']=qs[_0x28a4('0x19')](_0x4ea828['query']['limit']);_0x4dc4bb[_0x28a4('0x18')]=qs[_0x28a4('0x18')](_0x4ea828[_0x28a4('0x28')][_0x28a4('0x18')]);}_0x4dc4bb[_0x28a4('0x30')]=qs[_0x28a4('0x31')](_0x4ea828[_0x28a4('0x28')]['sort']);_0x4dc4bb[_0x28a4('0x32')]=qs['filters'](_['pick'](_0x4ea828[_0x28a4('0x28')],_0x3873fe[_0x28a4('0x29')]));_0x4dc4bb['where'][_0x28a4('0x54')]=_0x39178e['id'];if(_0x4ea828['query'][_0x28a4('0x33')]){_0x4dc4bb[_0x28a4('0x32')]=_[_0x28a4('0x38')](_0x4dc4bb[_0x28a4('0x32')],{'$or':_[_0x28a4('0x34')](_0x4dc4bb['attributes'],function(_0x12bfdf){var _0x1acfc5={};_0x1acfc5[_0x12bfdf]={'$like':'%'+_0x4ea828[_0x28a4('0x28')][_0x28a4('0x33')]+'%'};return _0x1acfc5;})});}_0x4dc4bb=_[_0x28a4('0x38')]({},_0x4dc4bb,_0x4ea828[_0x28a4('0x39')]);return db['CmHopperBlack'][_0x28a4('0x3a')]({'where':_0x4dc4bb[_0x28a4('0x32')]})[_0x28a4('0x1e')](function(_0x3b1c90){_0x213a56['count']=_0x3b1c90;if(_0x4ea828[_0x28a4('0x28')]['includeAll']){_0x4dc4bb[_0x28a4('0x3c')]=[{'all':!![]}];}return db[_0x28a4('0x5a')][_0x28a4('0x3d')](_0x4dc4bb);})[_0x28a4('0x1e')](function(_0x287552){_0x213a56[_0x28a4('0x3e')]=_0x287552;return _0x213a56;});}})[_0x28a4('0x1e')](respondWithFilteredResult(_0x2293f6,_0x4dc4bb))[_0x28a4('0x42')](handleError(_0x2293f6,null));};exports[_0x28a4('0x5b')]=function(_0x13f56,_0x3df01d,_0x5045bd){var _0x3a28cd={};var _0x116fe5={};var _0x374432;var _0x2f6fb1;return db[_0x28a4('0x26')][_0x28a4('0x56')]({'where':{'id':_0x13f56[_0x28a4('0x3f')]['id']}})[_0x28a4('0x1e')](handleEntityNotFound(_0x3df01d,null))['then'](function(_0x52587a){if(_0x52587a){_0x374432=_0x52587a;_0x116fe5[_0x28a4('0x27')]=_[_0x28a4('0x40')](db[_0x28a4('0x5c')][_0x28a4('0x4c')]);_0x116fe5['query']=_[_0x28a4('0x40')](_0x13f56['query']);_0x116fe5[_0x28a4('0x29')]=_[_0x28a4('0x2b')](_0x116fe5[_0x28a4('0x27')],_0x116fe5[_0x28a4('0x28')]);_0x3a28cd[_0x28a4('0x2a')]=_['intersection'](_0x116fe5[_0x28a4('0x27')],qs[_0x28a4('0x2c')](_0x13f56[_0x28a4('0x28')][_0x28a4('0x2c')]));_0x3a28cd[_0x28a4('0x2a')]=_0x3a28cd[_0x28a4('0x2a')][_0x28a4('0x2d')]?_0x3a28cd[_0x28a4('0x2a')]:_0x116fe5[_0x28a4('0x27')];_0x3a28cd[_0x28a4('0x30')]=qs['sort'](_0x13f56[_0x28a4('0x28')][_0x28a4('0x31')]);_0x3a28cd['where']=qs['filters'](_[_0x28a4('0x53')](_0x13f56['query'],_0x116fe5['filters']));if(_0x13f56['query'][_0x28a4('0x33')]){_0x3a28cd[_0x28a4('0x32')]=_[_0x28a4('0x38')](_0x3a28cd['where'],{'$or':_[_0x28a4('0x34')](_0x3a28cd[_0x28a4('0x2a')],function(_0x2a9773){var _0xcf1dcc={};_0xcf1dcc[_0x2a9773]={'$like':'%'+_0x13f56['query']['filter']+'%'};return _0xcf1dcc;})});}_0x3a28cd=_[_0x28a4('0x38')]({},_0x3a28cd,_0x13f56['options']);return _0x374432[_0x28a4('0x5b')](_0x3a28cd);}})[_0x28a4('0x1e')](function(_0x270c50){if(_0x270c50){_0x2f6fb1=_0x270c50[_0x28a4('0x2d')];if(!_0x13f56[_0x28a4('0x28')][_0x28a4('0x2e')](_0x28a4('0x2f'))){_0x3a28cd['limit']=qs[_0x28a4('0x19')](_0x13f56['query'][_0x28a4('0x19')]);_0x3a28cd['offset']=qs[_0x28a4('0x18')](_0x13f56[_0x28a4('0x28')][_0x28a4('0x18')]);}return _0x374432['getLists'](_0x3a28cd);}})[_0x28a4('0x1e')](function(_0x140f67){if(_0x140f67){return _0x140f67?{'count':_0x2f6fb1,'rows':_0x140f67}:null;}})[_0x28a4('0x1e')](respondWithResult(_0x3df01d,null))['catch'](handleError(_0x3df01d,null));};exports[_0x28a4('0x5d')]=function(_0x2cdfeb,_0x122e5d,_0x14800d){var _0x591eb8,_0x3df109;return db['Campaign']['find']({'where':{'id':_0x2cdfeb[_0x28a4('0x3f')]['id']}})[_0x28a4('0x1e')](handleEntityNotFound(_0x122e5d,null))[_0x28a4('0x1e')](function(_0x3a0ed2){if(_0x3a0ed2){_0x3df109=_0x3a0ed2;return _0x3a0ed2[_0x28a4('0x5d')](_0x2cdfeb[_0x28a4('0x44')][_0x28a4('0x5e')],_[_0x28a4('0x4d')](_0x2cdfeb['body'],[_0x28a4('0x5e'),'id'])||{});}return null;})[_0x28a4('0x5f')](function(_0x539493){var _0x515620;_0x591eb8=_0x539493||[];var _0x5a9fab=[];if(_0x539493){for(var _0x15efd1=0x0;_0x15efd1<_0x539493[_0x28a4('0x2d')];_0x15efd1+=0x1){var _0x3ba68f=_0x539493[_0x15efd1][_0x28a4('0x1f')]({'plain':!![]});_0x3df109[_0x28a4('0x60')]=_0x2cdfeb[_0x28a4('0x44')][_0x28a4('0x60')]?_0x2cdfeb['body'][_0x28a4('0x60')]:_0x3df109[_0x28a4('0x60')];switch(_0x3df109['dialCheckDuplicateType']){case _0x28a4('0x61'):_0x515620=squel['insert']()['into'](_0x28a4('0x62'))[_0x28a4('0x63')]([_0x28a4('0x64'),_0x28a4('0x65'),_0x28a4('0x66'),_0x28a4('0x67'),_0x28a4('0x54'),'createdAt','updatedAt'],squel['select']()['field'](_0x28a4('0x64'),_0x28a4('0x64'))[_0x28a4('0x37')](_0x28a4('0x68'),_0x28a4('0x65'))[_0x28a4('0x37')]('id','ContactId')[_0x28a4('0x37')](_0x3ba68f[_0x28a4('0x69')][_0x28a4('0x6a')](),'ListId')[_0x28a4('0x37')](_0x2cdfeb[_0x28a4('0x3f')]['id'][_0x28a4('0x6a')](),_0x28a4('0x54'))[_0x28a4('0x37')](_0x28a4('0x68'),_0x28a4('0x4e'))['field'](_0x28a4('0x68'),_0x28a4('0x4f'))[_0x28a4('0x6b')](_0x28a4('0x6c'))[_0x28a4('0x32')](_0x28a4('0x6d'))[_0x28a4('0x32')](_0x28a4('0x6e'),_0x3ba68f[_0x28a4('0x69')][_0x28a4('0x6a')]())[_0x28a4('0x32')](_0x28a4('0x6f'))[_0x28a4('0x32')](_0x28a4('0x70'),squel[_0x28a4('0x71')]()['field']('COALESCE(calleridnum,\x27\x27)')['from'](_0x28a4('0x72'))[_0x28a4('0x32')]('CampaignId\x20=\x20?',_0x2cdfeb[_0x28a4('0x3f')]['id']['toString']()))[_0x28a4('0x32')]('phone\x20NOT\x20IN\x20(?)',squel['select']()[_0x28a4('0x37')](_0x28a4('0x73'))[_0x28a4('0x6b')](_0x28a4('0x62'))['where'](_0x28a4('0x74'),_0x2cdfeb['params']['id']['toString']())))[_0x28a4('0x6a')]();break;case'onlyIfOpen':_0x515620=squel['insert']()[_0x28a4('0x75')](_0x28a4('0x62'))['fromQuery'](['phone','scheduledAt',_0x28a4('0x66'),_0x28a4('0x67'),_0x28a4('0x54'),_0x28a4('0x4e'),_0x28a4('0x4f')],squel[_0x28a4('0x71')]()[_0x28a4('0x37')]('phone',_0x28a4('0x64'))[_0x28a4('0x37')]('NOW()',_0x28a4('0x65'))[_0x28a4('0x37')]('id',_0x28a4('0x66'))['field'](_0x3ba68f[_0x28a4('0x69')]['toString'](),_0x28a4('0x67'))[_0x28a4('0x37')](_0x2cdfeb[_0x28a4('0x3f')]['id'][_0x28a4('0x6a')](),_0x28a4('0x54'))['field']('NOW()',_0x28a4('0x4e'))[_0x28a4('0x37')](_0x28a4('0x68'),_0x28a4('0x4f'))[_0x28a4('0x6b')](_0x28a4('0x6c'))[_0x28a4('0x32')]('deletedAt\x20IS\x20NULL')[_0x28a4('0x32')](_0x28a4('0x6e'),_0x3ba68f[_0x28a4('0x69')][_0x28a4('0x6a')]())['where'](_0x28a4('0x6f'))[_0x28a4('0x32')](_0x28a4('0x70'),squel[_0x28a4('0x71')]()[_0x28a4('0x37')](_0x28a4('0x73'))[_0x28a4('0x6b')]('cm_hopper')[_0x28a4('0x32')](_0x28a4('0x74'),_0x2cdfeb[_0x28a4('0x3f')]['id']['toString']())))[_0x28a4('0x6a')]();break;default:_0x515620=squel['insert']()[_0x28a4('0x75')](_0x28a4('0x62'))[_0x28a4('0x63')]([_0x28a4('0x64'),_0x28a4('0x65'),_0x28a4('0x66'),_0x28a4('0x67'),_0x28a4('0x54'),_0x28a4('0x4e'),_0x28a4('0x4f')],squel[_0x28a4('0x71')]()[_0x28a4('0x37')](_0x28a4('0x64'),_0x28a4('0x64'))[_0x28a4('0x37')]('NOW()',_0x28a4('0x65'))[_0x28a4('0x37')]('id',_0x28a4('0x66'))[_0x28a4('0x37')](_0x3ba68f[_0x28a4('0x69')][_0x28a4('0x6a')](),_0x28a4('0x67'))['field'](_0x2cdfeb[_0x28a4('0x3f')]['id'][_0x28a4('0x6a')](),_0x28a4('0x54'))[_0x28a4('0x37')](_0x28a4('0x68'),_0x28a4('0x4e'))[_0x28a4('0x37')](_0x28a4('0x68'),_0x28a4('0x4f'))['from']('cm_contacts')[_0x28a4('0x32')](_0x28a4('0x6d'))[_0x28a4('0x32')](_0x28a4('0x6e'),_0x3ba68f['CmListId'][_0x28a4('0x6a')]())[_0x28a4('0x32')](_0x28a4('0x6f')))[_0x28a4('0x6a')]();}_0x5a9fab[_0x28a4('0x76')](db['sequelize']['query'](_0x515620));}return BPromise[_0x28a4('0x77')](_0x5a9fab);}})['then'](function(){return _0x591eb8;})[_0x28a4('0x1e')](respondWithResult(_0x122e5d,null))[_0x28a4('0x42')](handleError(_0x122e5d,null));};exports['removeLists']=function(_0x460449,_0x533011,_0x381ecd){return db[_0x28a4('0x26')][_0x28a4('0x41')]({'where':{'id':_0x460449[_0x28a4('0x3f')]['id']}})[_0x28a4('0x1e')](handleEntityNotFound(_0x533011,null))[_0x28a4('0x1e')](function(_0x1c2c57){if(_0x1c2c57){return _0x1c2c57['removeLists'](_0x460449[_0x28a4('0x28')][_0x28a4('0x5e')]);}})[_0x28a4('0x1e')](function(_0x22c9fb){if(_0x22c9fb){return db[_0x28a4('0x52')][_0x28a4('0x51')]({'where':{'ListId':_0x460449[_0x28a4('0x28')][_0x28a4('0x5e')],'CampaignId':_0x460449[_0x28a4('0x3f')]['id']}})[_0x28a4('0x1e')](function(){return _0x22c9fb;});}})[_0x28a4('0x1e')](respondWithStatusCode(_0x533011,null))[_0x28a4('0x42')](handleError(_0x533011,null));};exports['getBlackLists']=function(_0x11abb2,_0x20395a,_0x51b899){var _0x47d73a={'raw':!![],'where':{}};var _0x131ab8={};var _0x1bd28a={'count':0x0,'rows':[]};return db[_0x28a4('0x26')][_0x28a4('0x56')]({'where':{'id':_0x11abb2[_0x28a4('0x3f')]['id']}})[_0x28a4('0x1e')](handleEntityNotFound(_0x20395a,null))[_0x28a4('0x1e')](function(_0x37b06c){if(_0x37b06c){_0x131ab8[_0x28a4('0x27')]=_[_0x28a4('0x40')](db['CmList'][_0x28a4('0x4c')]);_0x131ab8[_0x28a4('0x28')]=_[_0x28a4('0x40')](_0x11abb2[_0x28a4('0x28')]);_0x131ab8['filters']=_[_0x28a4('0x2b')](_0x131ab8[_0x28a4('0x27')],_0x131ab8[_0x28a4('0x28')]);_0x47d73a[_0x28a4('0x2a')]=_[_0x28a4('0x2b')](_0x131ab8[_0x28a4('0x27')],qs[_0x28a4('0x2c')](_0x11abb2['query'][_0x28a4('0x2c')]));_0x47d73a[_0x28a4('0x2a')]=_0x47d73a[_0x28a4('0x2a')][_0x28a4('0x2d')]?_0x47d73a[_0x28a4('0x2a')]:_0x131ab8['model'];if(!_0x11abb2[_0x28a4('0x28')][_0x28a4('0x2e')](_0x28a4('0x2f'))){_0x47d73a[_0x28a4('0x19')]=qs[_0x28a4('0x19')](_0x11abb2[_0x28a4('0x28')][_0x28a4('0x19')]);_0x47d73a['offset']=qs[_0x28a4('0x18')](_0x11abb2['query'][_0x28a4('0x18')]);}_0x47d73a[_0x28a4('0x30')]=qs[_0x28a4('0x31')](_0x11abb2[_0x28a4('0x28')][_0x28a4('0x31')]);_0x47d73a[_0x28a4('0x32')]=qs[_0x28a4('0x29')](_[_0x28a4('0x53')](_0x11abb2['query'],_0x131ab8[_0x28a4('0x29')]));_0x47d73a['where']['CampaignId']=_0x37b06c['id'];if(_0x11abb2[_0x28a4('0x28')][_0x28a4('0x33')]){_0x47d73a[_0x28a4('0x32')]=_[_0x28a4('0x38')](_0x47d73a[_0x28a4('0x32')],{'$or':_['map'](_0x47d73a['attributes'],function(_0x2b0b2e){var _0xa4ef0={};_0xa4ef0[_0x2b0b2e]={'$like':'%'+_0x11abb2[_0x28a4('0x28')][_0x28a4('0x33')]+'%'};return _0xa4ef0;})});}_0x47d73a=_[_0x28a4('0x38')]({},_0x47d73a,_0x11abb2['options']);return db[_0x28a4('0x5c')][_0x28a4('0x3a')]({'where':_0x47d73a[_0x28a4('0x32')]})[_0x28a4('0x1e')](function(_0x3fa540){_0x1bd28a[_0x28a4('0x3a')]=_0x3fa540;if(_0x11abb2[_0x28a4('0x28')]['includeAll']){_0x47d73a[_0x28a4('0x3c')]=[{'all':!![]}];}return db['CmList'][_0x28a4('0x3d')](_0x47d73a);})[_0x28a4('0x1e')](function(_0x9ddb6c){_0x1bd28a[_0x28a4('0x3e')]=_0x9ddb6c;return _0x1bd28a;});}})[_0x28a4('0x1e')](respondWithFilteredResult(_0x20395a,_0x47d73a))[_0x28a4('0x42')](handleError(_0x20395a,null));};exports[_0x28a4('0x78')]=function(_0x169130,_0x4b16a1,_0x56c016){var _0x2dc4fd,_0x2cc109;return db[_0x28a4('0x26')]['find']({'where':{'id':_0x169130['params']['id']}})[_0x28a4('0x1e')](handleEntityNotFound(_0x4b16a1,null))[_0x28a4('0x1e')](function(_0x4706ea){if(_0x4706ea){_0x2cc109=_0x4706ea;return _0x4706ea['addBlackLists'](_0x169130['body']['ids'],_[_0x28a4('0x4d')](_0x169130[_0x28a4('0x44')],['ids','id'])||{});}return null;})[_0x28a4('0x5f')](function(_0x3d49e2){var _0x2615fb;_0x2dc4fd=_0x3d49e2||[];var _0x1ae170=[];if(_0x3d49e2){for(var _0x2c382a=0x0;_0x2c382a<_0x3d49e2[_0x28a4('0x2d')];_0x2c382a+=0x1){var _0x5b8710=_0x3d49e2[_0x2c382a]['get']({'plain':!![]});_0x2615fb=squel['insert']()['into']('cm_hopper_black')[_0x28a4('0x63')](['phone','ContactId','ListId',_0x28a4('0x54'),_0x28a4('0x4e'),'updatedAt'],squel[_0x28a4('0x71')]()[_0x28a4('0x37')]('phone',_0x28a4('0x64'))['field']('id',_0x28a4('0x66'))[_0x28a4('0x37')](_0x5b8710[_0x28a4('0x69')][_0x28a4('0x6a')](),'ListId')[_0x28a4('0x37')](_0x169130[_0x28a4('0x3f')]['id'][_0x28a4('0x6a')](),_0x28a4('0x54'))[_0x28a4('0x37')](_0x28a4('0x68'),_0x28a4('0x4e'))[_0x28a4('0x37')](_0x28a4('0x68'),'updatedAt')[_0x28a4('0x6b')](_0x28a4('0x6c'))[_0x28a4('0x32')](_0x28a4('0x6d'))[_0x28a4('0x32')](_0x28a4('0x6e'),_0x5b8710[_0x28a4('0x69')][_0x28a4('0x6a')]())[_0x28a4('0x32')](_0x28a4('0x6f')))[_0x28a4('0x6a')]();_0x1ae170['push'](db['sequelize'][_0x28a4('0x28')](_0x2615fb));}return BPromise['all'](_0x1ae170);}})[_0x28a4('0x1e')](function(){return _0x2dc4fd;})['then'](respondWithResult(_0x4b16a1,null))[_0x28a4('0x42')](handleError(_0x4b16a1,null));};exports['removeBlackLists']=function(_0x3581d7,_0x31897f,_0x5aca25){return db['Campaign'][_0x28a4('0x41')]({'where':{'id':_0x3581d7[_0x28a4('0x3f')]['id']}})[_0x28a4('0x1e')](handleEntityNotFound(_0x31897f,null))[_0x28a4('0x1e')](function(_0x2efff1){if(_0x2efff1){return _0x2efff1[_0x28a4('0x79')](_0x3581d7[_0x28a4('0x28')][_0x28a4('0x5e')]);}})[_0x28a4('0x1e')](function(_0x4bdb47){if(_0x4bdb47){return db['CmHopperBlack']['destroy']({'where':{'ListId':_0x3581d7['query'][_0x28a4('0x5e')],'CampaignId':_0x3581d7['params']['id']}})[_0x28a4('0x1e')](function(){return _0x4bdb47;});}})['then'](respondWithStatusCode(_0x31897f,null))[_0x28a4('0x42')](handleError(_0x31897f,null));};
\ No newline at end of file
index bd1454f..0c390a7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5345=['rimraf','../../config/environment','exports','define','Campaign','campaigns','lodash','util','../../config/logger','api','moment','request-promise','path'];(function(_0x246c10,_0x154395){var _0x5dab91=function(_0x57ef0d){while(--_0x57ef0d){_0x246c10['push'](_0x246c10['shift']());}};_0x5dab91(++_0x154395);}(_0x5345,0x18c));var _0x5534=function(_0x187e57,_0x42d25c){_0x187e57=_0x187e57-0x0;var _0x23c01d=_0x5345[_0x187e57];return _0x23c01d;};'use strict';var _=require(_0x5534('0x0'));var util=require(_0x5534('0x1'));var logger=require(_0x5534('0x2'))(_0x5534('0x3'));var moment=require(_0x5534('0x4'));var BPromise=require('bluebird');var rp=require(_0x5534('0x5'));var fs=require('fs');var path=require(_0x5534('0x6'));var rimraf=require(_0x5534('0x7'));var config=require(_0x5534('0x8'));var attributes=require('./campaign.attributes');module[_0x5534('0x9')]=function(_0x585b17,_0x28a59a){return _0x585b17[_0x5534('0xa')](_0x5534('0xb'),attributes,{'tableName':_0x5534('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2b15=['../../config/environment','exports','campaigns','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf'];(function(_0x5734e5,_0x3bacfe){var _0x20a886=function(_0x6a5246){while(--_0x6a5246){_0x5734e5['push'](_0x5734e5['shift']());}};_0x20a886(++_0x3bacfe);}(_0x2b15,0xe7));var _0x52b1=function(_0x1f6d0f,_0x3882f6){_0x1f6d0f=_0x1f6d0f-0x0;var _0x13ed30=_0x2b15[_0x1f6d0f];return _0x13ed30;};'use strict';var _=require(_0x52b1('0x0'));var util=require(_0x52b1('0x1'));var logger=require(_0x52b1('0x2'))(_0x52b1('0x3'));var moment=require(_0x52b1('0x4'));var BPromise=require(_0x52b1('0x5'));var rp=require(_0x52b1('0x6'));var fs=require('fs');var path=require(_0x52b1('0x7'));var rimraf=require(_0x52b1('0x8'));var config=require(_0x52b1('0x9'));var attributes=require('./campaign.attributes');module[_0x52b1('0xa')]=function(_0x4597a6,_0x220a04){return _0x4597a6['define']('Campaign',attributes,{'tableName':_0x52b1('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 3f9f6c8..3a84f76 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9131=['map','then','debug','lodash','util','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','Campaign,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','result','catch','GetCampaign','findAll','options','raw','where','attributes','limit','include','model'];(function(_0x50488c,_0x1615e2){var _0x3359e7=function(_0x2f355a){while(--_0x2f355a){_0x50488c['push'](_0x50488c['shift']());}};_0x3359e7(++_0x1615e2);}(_0x9131,0x183));var _0x1913=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x9131[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x1913('0x0'));var util=require(_0x1913('0x1'));var moment=require('moment');var BPromise=require(_0x1913('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x1913('0x3'))['db'];var utils=require(_0x1913('0x4'));var logger=require(_0x1913('0x5'))(_0x1913('0x6'));var config=require(_0x1913('0x7'));var jayson=require(_0x1913('0x8'));var client=jayson['client'][_0x1913('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3f0c22,_0xcc2dce,_0x7f934f){return new BPromise(function(_0xcec204,_0x161ae6){return client[_0x1913('0xa')](_0x3f0c22,_0x7f934f)['then'](function(_0x1c9bc6){logger['info'](_0x1913('0xb'),_0xcc2dce,_0x1913('0xc'));logger['debug']('Campaign,\x20%s,\x20%s,\x20%s',_0xcc2dce,'request\x20sent',JSON[_0x1913('0xd')](_0x1c9bc6));if(_0x1c9bc6[_0x1913('0xe')]){if(_0x1c9bc6[_0x1913('0xe')][_0x1913('0xf')]===0x1f4){logger[_0x1913('0xe')](_0x1913('0xb'),_0xcc2dce,_0x1c9bc6['error'][_0x1913('0x10')]);return _0x161ae6(_0x1c9bc6[_0x1913('0xe')]['message']);}logger[_0x1913('0xe')](_0x1913('0xb'),_0xcc2dce,_0x1c9bc6[_0x1913('0xe')][_0x1913('0x10')]);return _0xcec204(_0x1c9bc6[_0x1913('0xe')][_0x1913('0x10')]);}else{logger[_0x1913('0x11')](_0x1913('0xb'),_0xcc2dce,'request\x20sent');_0xcec204(_0x1c9bc6[_0x1913('0x12')][_0x1913('0x10')]);}})[_0x1913('0x13')](function(_0x45d997){logger['error']('Campaign,\x20%s,\x20%s',_0xcc2dce,_0x45d997);_0x161ae6(_0x45d997);});});}exports[_0x1913('0x14')]=function(_0x59f584){var _0x179a4b=this;return new Promise(function(_0x5744e6,_0x709c38){return db['Campaign'][_0x1913('0x15')]({'raw':_0x59f584[_0x1913('0x16')]?_0x59f584['options'][_0x1913('0x17')]===undefined?!![]:![]:!![],'where':_0x59f584[_0x1913('0x16')]?_0x59f584[_0x1913('0x16')][_0x1913('0x18')]||null:null,'attributes':_0x59f584[_0x1913('0x16')]?_0x59f584[_0x1913('0x16')][_0x1913('0x19')]||null:null,'limit':_0x59f584[_0x1913('0x16')]?_0x59f584[_0x1913('0x16')][_0x1913('0x1a')]||null:null,'include':_0x59f584[_0x1913('0x16')]?_0x59f584['options'][_0x1913('0x1b')]?_['map'](_0x59f584[_0x1913('0x16')]['include'],function(_0xbf7541){return{'model':db[_0xbf7541[_0x1913('0x1c')]],'as':_0xbf7541['as'],'attributes':_0xbf7541[_0x1913('0x19')],'include':_0xbf7541[_0x1913('0x1b')]?_[_0x1913('0x1d')](_0xbf7541[_0x1913('0x1b')],function(_0x263ae0){return{'model':db[_0x263ae0[_0x1913('0x1c')]],'as':_0x263ae0['as'],'attributes':_0x263ae0[_0x1913('0x19')],'include':_0x263ae0[_0x1913('0x1b')]?_['map'](_0x263ae0[_0x1913('0x1b')],function(_0x44f6a3){return{'model':db[_0x44f6a3['model']],'as':_0x44f6a3['as'],'attributes':_0x44f6a3[_0x1913('0x19')]};}):[]};}):[]};}):[]:[]})[_0x1913('0x1e')](function(_0x4190d8){logger[_0x1913('0x11')]('GetCampaign',_0x59f584);logger[_0x1913('0x1f')]('GetCampaign',_0x59f584,JSON['stringify'](_0x4190d8));_0x5744e6(_0x4190d8);})['catch'](function(_0x228787){logger[_0x1913('0xe')](_0x1913('0x14'),_0x228787['message'],_0x59f584);_0x709c38(_0x179a4b[_0x1913('0xe')](0x1f4,_0x228787[_0x1913('0x10')]));});});};
\ No newline at end of file
+var _0x9ba4=['rpc','../../config/environment','jayson/promise','client','request','info','Campaign,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','result','GetCampaign','findAll','options','raw','where','attributes','limit','include','map','then','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x5d6145,_0x4ff721){var _0x25d2f7=function(_0x7c81f5){while(--_0x7c81f5){_0x5d6145['push'](_0x5d6145['shift']());}};_0x25d2f7(++_0x4ff721);}(_0x9ba4,0xd8));var _0x49ba=function(_0x2dbb17,_0x446d04){_0x2dbb17=_0x2dbb17-0x0;var _0x2a96c0=_0x9ba4[_0x2dbb17];return _0x2a96c0;};'use strict';var _=require('lodash');var util=require(_0x49ba('0x0'));var moment=require(_0x49ba('0x1'));var BPromise=require(_0x49ba('0x2'));var rs=require(_0x49ba('0x3'));var fs=require('fs');var Redis=require(_0x49ba('0x4'));var db=require(_0x49ba('0x5'))['db'];var utils=require(_0x49ba('0x6'));var logger=require(_0x49ba('0x7'))(_0x49ba('0x8'));var config=require(_0x49ba('0x9'));var jayson=require(_0x49ba('0xa'));var client=jayson[_0x49ba('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3b152f,_0x36e340,_0x564816){return new BPromise(function(_0x4da389,_0x269c87){return client[_0x49ba('0xc')](_0x3b152f,_0x564816)['then'](function(_0x98a0bd){logger[_0x49ba('0xd')](_0x49ba('0xe'),_0x36e340,_0x49ba('0xf'));logger[_0x49ba('0x10')]('Campaign,\x20%s,\x20%s,\x20%s',_0x36e340,_0x49ba('0xf'),JSON[_0x49ba('0x11')](_0x98a0bd));if(_0x98a0bd['error']){if(_0x98a0bd[_0x49ba('0x12')]['code']===0x1f4){logger[_0x49ba('0x12')](_0x49ba('0xe'),_0x36e340,_0x98a0bd[_0x49ba('0x12')]['message']);return _0x269c87(_0x98a0bd['error']['message']);}logger['error']('Campaign,\x20%s,\x20%s',_0x36e340,_0x98a0bd['error'][_0x49ba('0x13')]);return _0x4da389(_0x98a0bd[_0x49ba('0x12')][_0x49ba('0x13')]);}else{logger[_0x49ba('0xd')](_0x49ba('0xe'),_0x36e340,_0x49ba('0xf'));_0x4da389(_0x98a0bd[_0x49ba('0x14')]['message']);}})['catch'](function(_0x22f097){logger[_0x49ba('0x12')]('Campaign,\x20%s,\x20%s',_0x36e340,_0x22f097);_0x269c87(_0x22f097);});});}exports[_0x49ba('0x15')]=function(_0x2ccf23){var _0x44ca6b=this;return new Promise(function(_0x535ab4,_0x3a8c82){return db['Campaign'][_0x49ba('0x16')]({'raw':_0x2ccf23['options']?_0x2ccf23[_0x49ba('0x17')][_0x49ba('0x18')]===undefined?!![]:![]:!![],'where':_0x2ccf23[_0x49ba('0x17')]?_0x2ccf23['options'][_0x49ba('0x19')]||null:null,'attributes':_0x2ccf23[_0x49ba('0x17')]?_0x2ccf23[_0x49ba('0x17')][_0x49ba('0x1a')]||null:null,'limit':_0x2ccf23['options']?_0x2ccf23['options'][_0x49ba('0x1b')]||null:null,'include':_0x2ccf23[_0x49ba('0x17')]?_0x2ccf23[_0x49ba('0x17')][_0x49ba('0x1c')]?_[_0x49ba('0x1d')](_0x2ccf23[_0x49ba('0x17')][_0x49ba('0x1c')],function(_0x3c4a05){return{'model':db[_0x3c4a05['model']],'as':_0x3c4a05['as'],'attributes':_0x3c4a05[_0x49ba('0x1a')],'include':_0x3c4a05['include']?_[_0x49ba('0x1d')](_0x3c4a05[_0x49ba('0x1c')],function(_0x131862){return{'model':db[_0x131862['model']],'as':_0x131862['as'],'attributes':_0x131862[_0x49ba('0x1a')],'include':_0x131862[_0x49ba('0x1c')]?_[_0x49ba('0x1d')](_0x131862[_0x49ba('0x1c')],function(_0x5b2c0e){return{'model':db[_0x5b2c0e['model']],'as':_0x5b2c0e['as'],'attributes':_0x5b2c0e[_0x49ba('0x1a')]};}):[]};}):[]};}):[]:[]})[_0x49ba('0x1e')](function(_0x12147a){logger[_0x49ba('0xd')](_0x49ba('0x15'),_0x2ccf23);logger[_0x49ba('0x10')](_0x49ba('0x15'),_0x2ccf23,JSON['stringify'](_0x12147a));_0x535ab4(_0x12147a);})[_0x49ba('0x1f')](function(_0x15eb36){logger[_0x49ba('0x12')](_0x49ba('0x15'),_0x15eb36[_0x49ba('0x13')],_0x2ccf23);_0x3a8c82(_0x44ca6b[_0x49ba('0x12')](0x1f4,_0x15eb36[_0x49ba('0x13')]));});});};
\ No newline at end of file
index 5b7fdb8..d74e137 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x80eb=['put','update','delete','removeBlackLists','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','index','/:id','/:id/hoppers','getHoppers','/:id/hopper_histories','/:id/hopper_finals','getHopperFinals','/:id/hopper_black','getHopperBlacks','/:id/lists','getLists','/:id/blacklists','getBlackLists','post','create','/:id/clone','addLists'];(function(_0x5bd426,_0x4878e5){var _0x23a7eb=function(_0x594b42){while(--_0x594b42){_0x5bd426['push'](_0x5bd426['shift']());}};_0x23a7eb(++_0x4878e5);}(_0x80eb,0x112));var _0xb80e=function(_0x169272,_0x11e58f){_0x169272=_0x169272-0x0;var _0x45d02b=_0x80eb[_0x169272];return _0x45d02b;};'use strict';var multer=require(_0xb80e('0x0'));var util=require(_0xb80e('0x1'));var path=require(_0xb80e('0x2'));var timeout=require(_0xb80e('0x3'));var express=require(_0xb80e('0x4'));var router=express['Router']();var auth=require(_0xb80e('0x5'));var interaction=require(_0xb80e('0x6'));var config=require('../../config/environment');var controller=require('./campaign.controller');router[_0xb80e('0x7')]('/',auth[_0xb80e('0x8')](),controller[_0xb80e('0x9')]);router[_0xb80e('0x7')](_0xb80e('0xa'),auth[_0xb80e('0x8')](),controller['show']);router['get'](_0xb80e('0xb'),auth[_0xb80e('0x8')](),controller[_0xb80e('0xc')]);router['get'](_0xb80e('0xd'),auth['isAuthenticated'](),controller['getHopperHistories']);router[_0xb80e('0x7')](_0xb80e('0xe'),auth['isAuthenticated'](),controller[_0xb80e('0xf')]);router[_0xb80e('0x7')](_0xb80e('0x10'),auth[_0xb80e('0x8')](),controller[_0xb80e('0x11')]);router['get'](_0xb80e('0x12'),auth[_0xb80e('0x8')](),controller[_0xb80e('0x13')]);router[_0xb80e('0x7')](_0xb80e('0x14'),auth[_0xb80e('0x8')](),controller[_0xb80e('0x15')]);router[_0xb80e('0x16')]('/',auth[_0xb80e('0x8')](),controller[_0xb80e('0x17')]);router[_0xb80e('0x16')](_0xb80e('0x18'),auth[_0xb80e('0x8')](),controller['clone']);router[_0xb80e('0x16')](_0xb80e('0x12'),auth[_0xb80e('0x8')](),controller[_0xb80e('0x19')]);router['post'](_0xb80e('0x14'),auth[_0xb80e('0x8')](),controller['addBlackLists']);router[_0xb80e('0x1a')](_0xb80e('0xa'),auth[_0xb80e('0x8')](),controller[_0xb80e('0x1b')]);router[_0xb80e('0x1c')](_0xb80e('0xa'),auth[_0xb80e('0x8')](),controller['destroy']);router['delete']('/:id/lists',auth['isAuthenticated'](),controller['removeLists']);router[_0xb80e('0x1c')](_0xb80e('0x14'),auth[_0xb80e('0x8')](),controller[_0xb80e('0x1d')]);module['exports']=router;
\ No newline at end of file
+var _0x4d94=['./campaign.controller','isAuthenticated','index','/:id','show','get','/:id/hoppers','getHoppers','/:id/hopper_histories','getHopperHistories','/:id/hopper_finals','/:id/hopper_black','getLists','getBlackLists','post','create','/:id/clone','clone','/:id/lists','/:id/blacklists','addBlackLists','put','update','delete','destroy','removeLists','exports','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x40acf9,_0x4674f5){var _0x4eea7e=function(_0xe11f09){while(--_0xe11f09){_0x40acf9['push'](_0x40acf9['shift']());}};_0x4eea7e(++_0x4674f5);}(_0x4d94,0x7e));var _0x44d9=function(_0x3ab065,_0x327461){_0x3ab065=_0x3ab065-0x0;var _0x3cbf8d=_0x4d94[_0x3ab065];return _0x3cbf8d;};'use strict';var multer=require('multer');var util=require(_0x44d9('0x0'));var path=require(_0x44d9('0x1'));var timeout=require('connect-timeout');var express=require(_0x44d9('0x2'));var router=express['Router']();var auth=require(_0x44d9('0x3'));var interaction=require(_0x44d9('0x4'));var config=require(_0x44d9('0x5'));var controller=require(_0x44d9('0x6'));router['get']('/',auth[_0x44d9('0x7')](),controller[_0x44d9('0x8')]);router['get'](_0x44d9('0x9'),auth[_0x44d9('0x7')](),controller[_0x44d9('0xa')]);router[_0x44d9('0xb')](_0x44d9('0xc'),auth[_0x44d9('0x7')](),controller[_0x44d9('0xd')]);router[_0x44d9('0xb')](_0x44d9('0xe'),auth['isAuthenticated'](),controller[_0x44d9('0xf')]);router[_0x44d9('0xb')](_0x44d9('0x10'),auth[_0x44d9('0x7')](),controller['getHopperFinals']);router['get'](_0x44d9('0x11'),auth[_0x44d9('0x7')](),controller['getHopperBlacks']);router[_0x44d9('0xb')]('/:id/lists',auth[_0x44d9('0x7')](),controller[_0x44d9('0x12')]);router['get']('/:id/blacklists',auth[_0x44d9('0x7')](),controller[_0x44d9('0x13')]);router[_0x44d9('0x14')]('/',auth[_0x44d9('0x7')](),controller[_0x44d9('0x15')]);router['post'](_0x44d9('0x16'),auth[_0x44d9('0x7')](),controller[_0x44d9('0x17')]);router['post'](_0x44d9('0x18'),auth[_0x44d9('0x7')](),controller['addLists']);router[_0x44d9('0x14')](_0x44d9('0x19'),auth[_0x44d9('0x7')](),controller[_0x44d9('0x1a')]);router[_0x44d9('0x1b')](_0x44d9('0x9'),auth[_0x44d9('0x7')](),controller[_0x44d9('0x1c')]);router[_0x44d9('0x1d')]('/:id',auth[_0x44d9('0x7')](),controller[_0x44d9('0x1e')]);router[_0x44d9('0x1d')](_0x44d9('0x18'),auth['isAuthenticated'](),controller[_0x44d9('0x1f')]);router[_0x44d9('0x1d')](_0x44d9('0x19'),auth['isAuthenticated'](),controller['removeBlackLists']);module[_0x44d9('0x20')]=router;
\ No newline at end of file
index 9b8834c..49b315b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6831=['getDataValue','key','sequelize','exports','TEXT','STRING'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x6831,0xaa));var _0x1683=function(_0x19950b,_0x53d0d7){_0x19950b=_0x19950b-0x0;var _0x3c6b41=_0x6831[_0x19950b];return _0x3c6b41;};'use strict';var Sequelize=require(_0x1683('0x0'));module[_0x1683('0x1')]={'key':{'type':Sequelize['STRING'],'allowNull':![]},'value':{'type':Sequelize[_0x1683('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x1683('0x3')]},'name':{'type':Sequelize['VIRTUAL'],'get':function(){return this[_0x1683('0x4')](_0x1683('0x5'));}}};
\ No newline at end of file
+var _0x4cc4=['STRING','TEXT','key','sequelize','exports'];(function(_0xe6705,_0x3fdc9a){var _0x5dd008=function(_0x4d1049){while(--_0x4d1049){_0xe6705['push'](_0xe6705['shift']());}};_0x5dd008(++_0x3fdc9a);}(_0x4cc4,0x152));var _0x44cc=function(_0x578c72,_0x3f3abf){_0x578c72=_0x578c72-0x0;var _0x46affe=_0x4cc4[_0x578c72];return _0x46affe;};'use strict';var Sequelize=require(_0x44cc('0x0'));module[_0x44cc('0x1')]={'key':{'type':Sequelize[_0x44cc('0x2')],'allowNull':![]},'value':{'type':Sequelize[_0x44cc('0x3')],'allowNull':![]},'description':{'type':Sequelize[_0x44cc('0x2')]},'name':{'type':Sequelize['VIRTUAL'],'get':function(){return this['getDataValue'](_0x44cc('0x4'));}}};
\ No newline at end of file
index 9ed63ca..fea6939 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaf48=['sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','offset','limit','set','Content-Range','json','apply','reject','save','update','then','CannedAnswers','UserProfileResource','destroy','end','error','stack','name','send','index','CannedAnswer','rawAttributes','model','query','keys','filters','attributes','intersection','fields','length','nolimit','order','sort','where','pick','filter','map','type','VIRTUAL','field','options','count','include','findAll','rows','catch','params','includeAll','merge','body','find','create','key','MailAccountId','SmsAccountId','ChatWebsiteId','Sequelize','ValidationError','The\x20inserted\x20key\x20already\x20exists.','user','get','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','html-pdf','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path'];(function(_0x3e13dc,_0x23489a){var _0x5e8b83=function(_0x5dbf01){while(--_0x5dbf01){_0x3e13dc['push'](_0x3e13dc['shift']());}};_0x5e8b83(++_0x23489a);}(_0xaf48,0x1be));var _0x8af4=function(_0x1969a7,_0x5a133a){_0x1969a7=_0x1969a7-0x0;var _0x3d665f=_0xaf48[_0x1969a7];return _0x3d665f;};'use strict';var pdf=require(_0x8af4('0x0'));var emlformat=require(_0x8af4('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x8af4('0x2'));var jsonpatch=require(_0x8af4('0x3'));var rp=require('request-promise');var moment=require(_0x8af4('0x4'));var BPromise=require(_0x8af4('0x5'));var Mustache=require(_0x8af4('0x6'));var util=require(_0x8af4('0x7'));var path=require(_0x8af4('0x8'));var sox=require(_0x8af4('0x9'));var csv=require(_0x8af4('0xa'));var ejs=require(_0x8af4('0xb'));var fs=require('fs');var _=require(_0x8af4('0xc'));var squel=require('squel');var crypto=require(_0x8af4('0xd'));var jsforce=require(_0x8af4('0xe'));var deskjs=require(_0x8af4('0xf'));var toCsv=require(_0x8af4('0xa'));var querystring=require(_0x8af4('0x10'));var Papa=require(_0x8af4('0x11'));var Redis=require(_0x8af4('0x12'));var authService=require(_0x8af4('0x13'));var qs=require(_0x8af4('0x14'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x8af4('0x15'))(_0x8af4('0x16'));var utils=require(_0x8af4('0x17'));var config=require(_0x8af4('0x18'));var db=require(_0x8af4('0x19'))['db'];function respondWithStatusCode(_0x432168,_0x1a758f){_0x1a758f=_0x1a758f||0xcc;return function(_0x583dff){if(_0x583dff){return _0x432168[_0x8af4('0x1a')](_0x1a758f);}return _0x432168['status'](_0x1a758f)['end']();};}function respondWithResult(_0x1e8fd5,_0x318692){_0x318692=_0x318692||0xc8;return function(_0x3e4741){if(_0x3e4741){return _0x1e8fd5[_0x8af4('0x1b')](_0x318692)['json'](_0x3e4741);}};}function respondWithFilteredResult(_0x4635a8,_0x296c86){return function(_0xe7c98d){if(_0xe7c98d){var _0x389378=_0xe7c98d['count'],_0x2ddf8c=_0x296c86[_0x8af4('0x1c')],_0x4dc8ed=_0x296c86[_0x8af4('0x1c')]+_0x296c86[_0x8af4('0x1d')],_0x656ea3;if(_0x4dc8ed>=_0x389378){_0x4dc8ed=_0x389378;_0x656ea3=0xc8;}else{_0x656ea3=0xce;}_0x4635a8[_0x8af4('0x1b')](_0x656ea3);return _0x4635a8[_0x8af4('0x1e')](_0x8af4('0x1f'),_0x2ddf8c+'-'+_0x4dc8ed+'/'+_0x389378)[_0x8af4('0x20')](_0xe7c98d);}return null;};}function patchUpdates(_0x34f781){return function(_0x2bd9e3){try{jsonpatch[_0x8af4('0x21')](_0x2bd9e3,_0x34f781,!![]);}catch(_0x198943){return BPromise[_0x8af4('0x22')](_0x198943);}return _0x2bd9e3[_0x8af4('0x23')]();};}function saveUpdates(_0x3230fe,_0x497681){return function(_0x692443){if(_0x692443){return _0x692443[_0x8af4('0x24')](_0x3230fe)[_0x8af4('0x25')](function(_0x208936){return _0x208936;});}return null;};}function removeEntity(_0x4b0141,_0xaad243){return function(_0x2049b5){if(_0x2049b5){return _0x2049b5['destroy']()[_0x8af4('0x25')](function(){var _0x26d90e=_0x2049b5['get']({'plain':!![]});var _0x15535d=_0x8af4('0x26');return db[_0x8af4('0x27')][_0x8af4('0x28')]({'where':{'type':_0x15535d,'resourceId':_0x26d90e['id']}})['then'](function(){return _0x2049b5;});})[_0x8af4('0x25')](function(){_0x4b0141[_0x8af4('0x1b')](0xcc)[_0x8af4('0x29')]();});}};}function handleEntityNotFound(_0x45425e,_0x49a9ef){return function(_0x5653ac){if(!_0x5653ac){_0x45425e[_0x8af4('0x1a')](0x194);}return _0x5653ac;};}function handleError(_0x48a777,_0x99b9aa){_0x99b9aa=_0x99b9aa||0x1f4;return function(_0x188f47){logger[_0x8af4('0x2a')](_0x188f47[_0x8af4('0x2b')]);if(_0x188f47[_0x8af4('0x2c')]){delete _0x188f47[_0x8af4('0x2c')];}_0x48a777['status'](_0x99b9aa)[_0x8af4('0x2d')](_0x188f47);};}exports[_0x8af4('0x2e')]=function(_0x406f4d,_0x20dded){var _0x5e83bf={},_0x3c0365={},_0x928438={'count':0x0,'rows':[]};var _0x140df2=db[_0x8af4('0x2f')][_0x8af4('0x30')];_0x3c0365[_0x8af4('0x31')]=_['keys'](_0x140df2);_0x3c0365[_0x8af4('0x32')]=_[_0x8af4('0x33')](_0x406f4d[_0x8af4('0x32')]);_0x3c0365[_0x8af4('0x34')]=_['intersection'](_0x3c0365[_0x8af4('0x31')],_0x3c0365['query']);_0x5e83bf[_0x8af4('0x35')]=_[_0x8af4('0x36')](_0x3c0365[_0x8af4('0x31')],qs['fields'](_0x406f4d[_0x8af4('0x32')][_0x8af4('0x37')]));_0x5e83bf['attributes']=_0x5e83bf['attributes'][_0x8af4('0x38')]?_0x5e83bf[_0x8af4('0x35')]:_0x3c0365[_0x8af4('0x31')];if(!_0x406f4d['query']['hasOwnProperty'](_0x8af4('0x39'))){_0x5e83bf['limit']=qs['limit'](_0x406f4d[_0x8af4('0x32')][_0x8af4('0x1d')]);_0x5e83bf[_0x8af4('0x1c')]=qs['offset'](_0x406f4d['query'][_0x8af4('0x1c')]);}_0x5e83bf[_0x8af4('0x3a')]=qs['sort'](_0x406f4d['query'][_0x8af4('0x3b')]);_0x5e83bf[_0x8af4('0x3c')]=qs[_0x8af4('0x34')](_[_0x8af4('0x3d')](_0x406f4d['query'],_0x3c0365[_0x8af4('0x34')]));if(_0x406f4d[_0x8af4('0x32')][_0x8af4('0x3e')]){_0x5e83bf[_0x8af4('0x3c')]=_['merge'](_0x5e83bf['where'],{'$or':_[_0x8af4('0x3f')](_0x140df2,function(_0x5aac26){if(_0x5aac26[_0x8af4('0x40')]['key']!==_0x8af4('0x41')){var _0x53d813={};_0x53d813[_0x5aac26[_0x8af4('0x42')]]={'$like':'%'+_0x406f4d['query'][_0x8af4('0x3e')]+'%'};return _0x53d813;}})});}_0x5e83bf=_['merge']({},_0x5e83bf,_0x406f4d[_0x8af4('0x43')]);var _0x15462d={'where':_0x5e83bf[_0x8af4('0x3c')]};return db['CannedAnswer'][_0x8af4('0x44')](_0x15462d)[_0x8af4('0x25')](function(_0x350a83){_0x928438[_0x8af4('0x44')]=_0x350a83;if(_0x406f4d[_0x8af4('0x32')]['includeAll']){_0x5e83bf[_0x8af4('0x45')]=[{'all':!![]}];}return db[_0x8af4('0x2f')][_0x8af4('0x46')](_0x5e83bf);})[_0x8af4('0x25')](function(_0x246b96){_0x928438[_0x8af4('0x47')]=_0x246b96;return _0x928438;})[_0x8af4('0x25')](respondWithFilteredResult(_0x20dded,_0x5e83bf))[_0x8af4('0x48')](handleError(_0x20dded,null));};exports['show']=function(_0x36a788,_0x45c469){var _0x4be463={'raw':!![],'where':{'id':_0x36a788[_0x8af4('0x49')]['id']}},_0x506409={};_0x506409[_0x8af4('0x31')]=_[_0x8af4('0x33')](db[_0x8af4('0x2f')][_0x8af4('0x30')]);_0x506409[_0x8af4('0x32')]=_[_0x8af4('0x33')](_0x36a788[_0x8af4('0x32')]);_0x506409[_0x8af4('0x34')]=_['intersection'](_0x506409[_0x8af4('0x31')],_0x506409[_0x8af4('0x32')]);_0x4be463[_0x8af4('0x35')]=_[_0x8af4('0x36')](_0x506409['model'],qs[_0x8af4('0x37')](_0x36a788[_0x8af4('0x32')][_0x8af4('0x37')]));_0x4be463[_0x8af4('0x35')]=_0x4be463[_0x8af4('0x35')][_0x8af4('0x38')]?_0x4be463['attributes']:_0x506409[_0x8af4('0x31')];if(_0x36a788[_0x8af4('0x32')][_0x8af4('0x4a')]){_0x4be463[_0x8af4('0x45')]=[{'all':!![]}];}_0x4be463=_[_0x8af4('0x4b')]({},_0x4be463,_0x36a788['options']);return db['CannedAnswer']['find'](_0x4be463)['then'](handleEntityNotFound(_0x45c469,null))[_0x8af4('0x25')](respondWithResult(_0x45c469,null))[_0x8af4('0x48')](handleError(_0x45c469,null));};exports['update']=function(_0x5442e3,_0x44ad3f){if(_0x5442e3[_0x8af4('0x4c')]['id']){delete _0x5442e3['body']['id'];}return db[_0x8af4('0x2f')][_0x8af4('0x4d')]({'where':{'id':_0x5442e3[_0x8af4('0x49')]['id']}})[_0x8af4('0x25')](handleEntityNotFound(_0x44ad3f,null))['then'](saveUpdates(_0x5442e3[_0x8af4('0x4c')],null))['then'](respondWithResult(_0x44ad3f,null))[_0x8af4('0x48')](handleError(_0x44ad3f,null));};exports['destroy']=function(_0x335b5b,_0x30248e){return db[_0x8af4('0x2f')][_0x8af4('0x4d')]({'where':{'id':_0x335b5b['params']['id']}})[_0x8af4('0x25')](handleEntityNotFound(_0x30248e,null))[_0x8af4('0x25')](removeEntity(_0x30248e,null))['catch'](handleError(_0x30248e,null));};exports[_0x8af4('0x4e')]=function(_0x3aba32,_0x5561e9){var _0x5c0955={'key':_0x3aba32[_0x8af4('0x4c')][_0x8af4('0x4f')]};if(_0x3aba32['body'][_0x8af4('0x50')]){_0x5c0955[_0x8af4('0x50')]=_0x3aba32[_0x8af4('0x4c')][_0x8af4('0x50')];}else if(_0x3aba32[_0x8af4('0x4c')]['SmsAccountId']){_0x5c0955['SmsAccountId']=_0x3aba32[_0x8af4('0x4c')][_0x8af4('0x51')];}else if(_0x3aba32[_0x8af4('0x4c')]['OpenchannelAccountId']){_0x5c0955['OpenchannelAccountId']=_0x3aba32[_0x8af4('0x4c')]['OpenchannelAccountId'];}else if(_0x3aba32[_0x8af4('0x4c')][_0x8af4('0x52')]){_0x5c0955[_0x8af4('0x52')]=_0x3aba32['body']['ChatWebsiteId'];}return db[_0x8af4('0x2f')][_0x8af4('0x4d')]({'where':_0x5c0955})['then'](function(_0x54f84e){if(_0x54f84e){throw new db[(_0x8af4('0x53'))][(_0x8af4('0x54'))](_0x8af4('0x55'));}return db[_0x8af4('0x2f')][_0x8af4('0x4e')](_0x3aba32[_0x8af4('0x4c')]);})['then'](function(_0x16ce38){var _0x130bb1=_0x3aba32[_0x8af4('0x56')][_0x8af4('0x57')]({'plain':!![]});if(!_0x130bb1)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x130bb1['role']===_0x8af4('0x56')){var _0x13d512=_0x16ce38[_0x8af4('0x57')]({'plain':!![]});return db[_0x8af4('0x58')][_0x8af4('0x4d')]({'where':{'name':'CannedAnswers','userProfileId':_0x130bb1['userProfileId']},'raw':!![]})[_0x8af4('0x25')](function(_0x134249){if(_0x134249&&_0x134249[_0x8af4('0x59')]===0x0){return db['UserProfileResource']['create']({'name':_0x13d512[_0x8af4('0x2c')],'resourceId':_0x13d512['id'],'type':_0x134249[_0x8af4('0x2c')],'sectionId':_0x134249['id']},{})[_0x8af4('0x25')](function(){return _0x16ce38;});}else{return _0x16ce38;}})[_0x8af4('0x48')](function(_0x571154){logger[_0x8af4('0x2a')](_0x8af4('0x5a'),_0x571154);throw _0x571154;});}return _0x16ce38;})[_0x8af4('0x25')](respondWithResult(_0x5561e9,0xc9))[_0x8af4('0x48')](handleError(_0x5561e9,null));};
\ No newline at end of file
+var _0xd5b1=['crypto','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','set','Content-Range','apply','reject','save','update','then','UserProfileResource','destroy','error','stack','name','send','index','CannedAnswer','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','pick','filter','merge','map','key','VIRTUAL','field','includeAll','rows','show','params','rawAttributes','include','find','body','catch','MailAccountId','SmsAccountId','OpenchannelAccountId','ChatWebsiteId','Sequelize','ValidationError','The\x20inserted\x20key\x20already\x20exists.','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','get','UserProfileSection','CannedAnswers','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','eml-format','rimraf','zip-dir','moment','sox','to-csv','ejs','lodash','squel'];(function(_0xc5a279,_0x155360){var _0xc755d3=function(_0x15051c){while(--_0x15051c){_0xc5a279['push'](_0xc5a279['shift']());}};_0xc755d3(++_0x155360);}(_0xd5b1,0xf3));var _0x1d5b=function(_0x338b15,_0x3202d8){_0x338b15=_0x338b15-0x0;var _0x466e43=_0xd5b1[_0x338b15];return _0x466e43;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x1d5b('0x0'));var rimraf=require(_0x1d5b('0x1'));var zipdir=require(_0x1d5b('0x2'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x1d5b('0x3'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require(_0x1d5b('0x4'));var csv=require(_0x1d5b('0x5'));var ejs=require(_0x1d5b('0x6'));var fs=require('fs');var _=require(_0x1d5b('0x7'));var squel=require(_0x1d5b('0x8'));var crypto=require(_0x1d5b('0x9'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x1d5b('0xa'));var Papa=require(_0x1d5b('0xb'));var Redis=require(_0x1d5b('0xc'));var authService=require('../../components/auth/service');var qs=require(_0x1d5b('0xd'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x1d5b('0xe'))(_0x1d5b('0xf'));var utils=require(_0x1d5b('0x10'));var config=require(_0x1d5b('0x11'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x93abf8,_0x1ef789){_0x1ef789=_0x1ef789||0xcc;return function(_0x8d02f1){if(_0x8d02f1){return _0x93abf8[_0x1d5b('0x12')](_0x1ef789);}return _0x93abf8['status'](_0x1ef789)[_0x1d5b('0x13')]();};}function respondWithResult(_0xdaf313,_0x117440){_0x117440=_0x117440||0xc8;return function(_0x50cf29){if(_0x50cf29){return _0xdaf313[_0x1d5b('0x14')](_0x117440)[_0x1d5b('0x15')](_0x50cf29);}};}function respondWithFilteredResult(_0xb952b9,_0x518ff3){return function(_0x4cb39f){if(_0x4cb39f){var _0x3f9a33=_0x4cb39f[_0x1d5b('0x16')],_0x365b96=_0x518ff3[_0x1d5b('0x17')],_0x4003f0=_0x518ff3['offset']+_0x518ff3['limit'],_0x4cdcdb;if(_0x4003f0>=_0x3f9a33){_0x4003f0=_0x3f9a33;_0x4cdcdb=0xc8;}else{_0x4cdcdb=0xce;}_0xb952b9['status'](_0x4cdcdb);return _0xb952b9[_0x1d5b('0x18')](_0x1d5b('0x19'),_0x365b96+'-'+_0x4003f0+'/'+_0x3f9a33)[_0x1d5b('0x15')](_0x4cb39f);}return null;};}function patchUpdates(_0x7401fc){return function(_0x58fed9){try{jsonpatch[_0x1d5b('0x1a')](_0x58fed9,_0x7401fc,!![]);}catch(_0x4a9014){return BPromise[_0x1d5b('0x1b')](_0x4a9014);}return _0x58fed9[_0x1d5b('0x1c')]();};}function saveUpdates(_0x2ce02f,_0x40942f){return function(_0x402983){if(_0x402983){return _0x402983[_0x1d5b('0x1d')](_0x2ce02f)[_0x1d5b('0x1e')](function(_0x6ee9f4){return _0x6ee9f4;});}return null;};}function removeEntity(_0x52ddd5,_0x58413b){return function(_0x182dda){if(_0x182dda){return _0x182dda['destroy']()[_0x1d5b('0x1e')](function(){var _0x2e877f=_0x182dda['get']({'plain':!![]});var _0x4ba8f3='CannedAnswers';return db[_0x1d5b('0x1f')][_0x1d5b('0x20')]({'where':{'type':_0x4ba8f3,'resourceId':_0x2e877f['id']}})[_0x1d5b('0x1e')](function(){return _0x182dda;});})[_0x1d5b('0x1e')](function(){_0x52ddd5[_0x1d5b('0x14')](0xcc)[_0x1d5b('0x13')]();});}};}function handleEntityNotFound(_0xc45638,_0x68a906){return function(_0x322102){if(!_0x322102){_0xc45638[_0x1d5b('0x12')](0x194);}return _0x322102;};}function handleError(_0x1b45a1,_0x5a9540){_0x5a9540=_0x5a9540||0x1f4;return function(_0x5172e1){logger[_0x1d5b('0x21')](_0x5172e1[_0x1d5b('0x22')]);if(_0x5172e1[_0x1d5b('0x23')]){delete _0x5172e1['name'];}_0x1b45a1[_0x1d5b('0x14')](_0x5a9540)[_0x1d5b('0x24')](_0x5172e1);};}exports[_0x1d5b('0x25')]=function(_0x17dd45,_0x1e1249){var _0x2ccbb8={},_0x558648={},_0x49102f={'count':0x0,'rows':[]};var _0x8350bd=db[_0x1d5b('0x26')]['rawAttributes'];_0x558648[_0x1d5b('0x27')]=_[_0x1d5b('0x28')](_0x8350bd);_0x558648[_0x1d5b('0x29')]=_[_0x1d5b('0x28')](_0x17dd45[_0x1d5b('0x29')]);_0x558648[_0x1d5b('0x2a')]=_[_0x1d5b('0x2b')](_0x558648[_0x1d5b('0x27')],_0x558648['query']);_0x2ccbb8[_0x1d5b('0x2c')]=_[_0x1d5b('0x2b')](_0x558648[_0x1d5b('0x27')],qs['fields'](_0x17dd45['query'][_0x1d5b('0x2d')]));_0x2ccbb8[_0x1d5b('0x2c')]=_0x2ccbb8[_0x1d5b('0x2c')][_0x1d5b('0x2e')]?_0x2ccbb8[_0x1d5b('0x2c')]:_0x558648[_0x1d5b('0x27')];if(!_0x17dd45['query'][_0x1d5b('0x2f')](_0x1d5b('0x30'))){_0x2ccbb8['limit']=qs[_0x1d5b('0x31')](_0x17dd45[_0x1d5b('0x29')][_0x1d5b('0x31')]);_0x2ccbb8['offset']=qs[_0x1d5b('0x17')](_0x17dd45[_0x1d5b('0x29')][_0x1d5b('0x17')]);}_0x2ccbb8['order']=qs[_0x1d5b('0x32')](_0x17dd45['query'][_0x1d5b('0x32')]);_0x2ccbb8[_0x1d5b('0x33')]=qs[_0x1d5b('0x2a')](_[_0x1d5b('0x34')](_0x17dd45[_0x1d5b('0x29')],_0x558648[_0x1d5b('0x2a')]));if(_0x17dd45[_0x1d5b('0x29')][_0x1d5b('0x35')]){_0x2ccbb8['where']=_[_0x1d5b('0x36')](_0x2ccbb8[_0x1d5b('0x33')],{'$or':_[_0x1d5b('0x37')](_0x8350bd,function(_0x54c138){if(_0x54c138['type'][_0x1d5b('0x38')]!==_0x1d5b('0x39')){var _0x348452={};_0x348452[_0x54c138[_0x1d5b('0x3a')]]={'$like':'%'+_0x17dd45['query']['filter']+'%'};return _0x348452;}})});}_0x2ccbb8=_['merge']({},_0x2ccbb8,_0x17dd45['options']);var _0x2f8ba8={'where':_0x2ccbb8[_0x1d5b('0x33')]};return db[_0x1d5b('0x26')][_0x1d5b('0x16')](_0x2f8ba8)[_0x1d5b('0x1e')](function(_0x43e6a9){_0x49102f['count']=_0x43e6a9;if(_0x17dd45[_0x1d5b('0x29')][_0x1d5b('0x3b')]){_0x2ccbb8['include']=[{'all':!![]}];}return db[_0x1d5b('0x26')]['findAll'](_0x2ccbb8);})[_0x1d5b('0x1e')](function(_0x58f975){_0x49102f[_0x1d5b('0x3c')]=_0x58f975;return _0x49102f;})['then'](respondWithFilteredResult(_0x1e1249,_0x2ccbb8))['catch'](handleError(_0x1e1249,null));};exports[_0x1d5b('0x3d')]=function(_0x3a0130,_0x3e8e89){var _0x2a85b8={'raw':!![],'where':{'id':_0x3a0130[_0x1d5b('0x3e')]['id']}},_0xcccb78={};_0xcccb78[_0x1d5b('0x27')]=_[_0x1d5b('0x28')](db[_0x1d5b('0x26')][_0x1d5b('0x3f')]);_0xcccb78[_0x1d5b('0x29')]=_['keys'](_0x3a0130[_0x1d5b('0x29')]);_0xcccb78[_0x1d5b('0x2a')]=_['intersection'](_0xcccb78['model'],_0xcccb78[_0x1d5b('0x29')]);_0x2a85b8[_0x1d5b('0x2c')]=_[_0x1d5b('0x2b')](_0xcccb78[_0x1d5b('0x27')],qs['fields'](_0x3a0130[_0x1d5b('0x29')][_0x1d5b('0x2d')]));_0x2a85b8[_0x1d5b('0x2c')]=_0x2a85b8['attributes'][_0x1d5b('0x2e')]?_0x2a85b8[_0x1d5b('0x2c')]:_0xcccb78[_0x1d5b('0x27')];if(_0x3a0130[_0x1d5b('0x29')][_0x1d5b('0x3b')]){_0x2a85b8[_0x1d5b('0x40')]=[{'all':!![]}];}_0x2a85b8=_[_0x1d5b('0x36')]({},_0x2a85b8,_0x3a0130['options']);return db[_0x1d5b('0x26')][_0x1d5b('0x41')](_0x2a85b8)[_0x1d5b('0x1e')](handleEntityNotFound(_0x3e8e89,null))['then'](respondWithResult(_0x3e8e89,null))['catch'](handleError(_0x3e8e89,null));};exports[_0x1d5b('0x1d')]=function(_0x3a5ee1,_0x1934fd){if(_0x3a5ee1[_0x1d5b('0x42')]['id']){delete _0x3a5ee1[_0x1d5b('0x42')]['id'];}return db[_0x1d5b('0x26')]['find']({'where':{'id':_0x3a5ee1[_0x1d5b('0x3e')]['id']}})['then'](handleEntityNotFound(_0x1934fd,null))[_0x1d5b('0x1e')](saveUpdates(_0x3a5ee1[_0x1d5b('0x42')],null))[_0x1d5b('0x1e')](respondWithResult(_0x1934fd,null))[_0x1d5b('0x43')](handleError(_0x1934fd,null));};exports['destroy']=function(_0x26952b,_0xe2d1d1){return db[_0x1d5b('0x26')]['find']({'where':{'id':_0x26952b[_0x1d5b('0x3e')]['id']}})[_0x1d5b('0x1e')](handleEntityNotFound(_0xe2d1d1,null))['then'](removeEntity(_0xe2d1d1,null))['catch'](handleError(_0xe2d1d1,null));};exports['create']=function(_0x19fdfb,_0x2a81c3){var _0x1bfe71={'key':_0x19fdfb[_0x1d5b('0x42')][_0x1d5b('0x38')]};if(_0x19fdfb['body'][_0x1d5b('0x44')]){_0x1bfe71[_0x1d5b('0x44')]=_0x19fdfb[_0x1d5b('0x42')][_0x1d5b('0x44')];}else if(_0x19fdfb[_0x1d5b('0x42')]['SmsAccountId']){_0x1bfe71['SmsAccountId']=_0x19fdfb[_0x1d5b('0x42')][_0x1d5b('0x45')];}else if(_0x19fdfb[_0x1d5b('0x42')][_0x1d5b('0x46')]){_0x1bfe71[_0x1d5b('0x46')]=_0x19fdfb[_0x1d5b('0x42')][_0x1d5b('0x46')];}else if(_0x19fdfb[_0x1d5b('0x42')][_0x1d5b('0x47')]){_0x1bfe71[_0x1d5b('0x47')]=_0x19fdfb['body'][_0x1d5b('0x47')];}return db[_0x1d5b('0x26')]['find']({'where':_0x1bfe71})[_0x1d5b('0x1e')](function(_0x313ffc){if(_0x313ffc){throw new db[(_0x1d5b('0x48'))][(_0x1d5b('0x49'))](_0x1d5b('0x4a'));}return db[_0x1d5b('0x26')][_0x1d5b('0x4b')](_0x19fdfb[_0x1d5b('0x42')]);})[_0x1d5b('0x1e')](function(_0x3e8e22){var _0x12db6b=_0x19fdfb[_0x1d5b('0x4c')]['get']({'plain':!![]});if(!_0x12db6b)throw new Error(_0x1d5b('0x4d'));if(_0x12db6b[_0x1d5b('0x4e')]===_0x1d5b('0x4c')){var _0x402bac=_0x3e8e22[_0x1d5b('0x4f')]({'plain':!![]});return db[_0x1d5b('0x50')][_0x1d5b('0x41')]({'where':{'name':_0x1d5b('0x51'),'userProfileId':_0x12db6b['userProfileId']},'raw':!![]})[_0x1d5b('0x1e')](function(_0x17256b){if(_0x17256b&&_0x17256b[_0x1d5b('0x52')]===0x0){return db[_0x1d5b('0x1f')][_0x1d5b('0x4b')]({'name':_0x402bac[_0x1d5b('0x23')],'resourceId':_0x402bac['id'],'type':_0x17256b['name'],'sectionId':_0x17256b['id']},{})[_0x1d5b('0x1e')](function(){return _0x3e8e22;});}else{return _0x3e8e22;}})[_0x1d5b('0x43')](function(_0x4b8327){logger[_0x1d5b('0x21')](_0x1d5b('0x53'),_0x4b8327);throw _0x4b8327;});}return _0x3e8e22;})[_0x1d5b('0x1e')](respondWithResult(_0x2a81c3,0xc9))['catch'](handleError(_0x2a81c3,null));};
\ No newline at end of file
index 4ff559c..e54ca32 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8193=['exports','define','CannedAnswer','utf8mb4','utf8mb4_unicode_ci','lodash','util','api','moment','bluebird','request-promise','rimraf','../../config/environment'];(function(_0x122d9f,_0x2c9e5b){var _0x41a09e=function(_0x3d9564){while(--_0x3d9564){_0x122d9f['push'](_0x122d9f['shift']());}};_0x41a09e(++_0x2c9e5b);}(_0x8193,0x123));var _0x3819=function(_0x3e1b86,_0x3f6a43){_0x3e1b86=_0x3e1b86-0x0;var _0x15727c=_0x8193[_0x3e1b86];return _0x15727c;};'use strict';var _=require(_0x3819('0x0'));var util=require(_0x3819('0x1'));var logger=require('../../config/logger')(_0x3819('0x2'));var moment=require(_0x3819('0x3'));var BPromise=require(_0x3819('0x4'));var rp=require(_0x3819('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x3819('0x6'));var config=require(_0x3819('0x7'));var attributes=require('./cannedAnswer.attributes');module[_0x3819('0x8')]=function(_0x14181f,_0x27908d){return _0x14181f[_0x3819('0x9')](_0x3819('0xa'),attributes,{'tableName':'tools_canned_answers','paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x3819('0xb'),'collate':_0x3819('0xc')});};
\ No newline at end of file
+var _0x6bbe=['rimraf','../../config/environment','./cannedAnswer.attributes','exports','define','CannedAnswer','utf8mb4','utf8mb4_unicode_ci','lodash','api','moment','bluebird','request-promise','path'];(function(_0x1ef127,_0x16e545){var _0xdeda18=function(_0x46c7fa){while(--_0x46c7fa){_0x1ef127['push'](_0x1ef127['shift']());}};_0xdeda18(++_0x16e545);}(_0x6bbe,0xa2));var _0xe6bb=function(_0x258da2,_0x4f9d31){_0x258da2=_0x258da2-0x0;var _0x1f5ae7=_0x6bbe[_0x258da2];return _0x1f5ae7;};'use strict';var _=require(_0xe6bb('0x0'));var util=require('util');var logger=require('../../config/logger')(_0xe6bb('0x1'));var moment=require(_0xe6bb('0x2'));var BPromise=require(_0xe6bb('0x3'));var rp=require(_0xe6bb('0x4'));var fs=require('fs');var path=require(_0xe6bb('0x5'));var rimraf=require(_0xe6bb('0x6'));var config=require(_0xe6bb('0x7'));var attributes=require(_0xe6bb('0x8'));module[_0xe6bb('0x9')]=function(_0x35a73e,_0x397aee){return _0x35a73e[_0xe6bb('0xa')](_0xe6bb('0xb'),attributes,{'tableName':'tools_canned_answers','paranoid':![],'indexes':[],'timestamps':!![],'charset':_0xe6bb('0xc'),'collate':_0xe6bb('0xd')});};
\ No newline at end of file
index 3cb8378..e8e7c0e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa298=['result','catch','util','bluebird','randomstring','ioredis','../../config/logger','rpc','../../config/environment','client','request','then','info','request\x20sent','debug','stringify','error','CannedAnswer,\x20%s,\x20%s','message'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xa298,0xd3));var _0x8a29=function(_0x5bbcaa,_0x4a6f78){_0x5bbcaa=_0x5bbcaa-0x0;var _0x20dd4e=_0xa298[_0x5bbcaa];return _0x20dd4e;};'use strict';var _=require('lodash');var util=require(_0x8a29('0x0'));var moment=require('moment');var BPromise=require(_0x8a29('0x1'));var rs=require(_0x8a29('0x2'));var fs=require('fs');var Redis=require(_0x8a29('0x3'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x8a29('0x4'))(_0x8a29('0x5'));var config=require(_0x8a29('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x8a29('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x222c7f,_0x1ad176,_0x9820f7){return new BPromise(function(_0x189d3b,_0x4865d0){return client[_0x8a29('0x8')](_0x222c7f,_0x9820f7)[_0x8a29('0x9')](function(_0x34d9be){logger[_0x8a29('0xa')]('CannedAnswer,\x20%s,\x20%s',_0x1ad176,_0x8a29('0xb'));logger[_0x8a29('0xc')]('CannedAnswer,\x20%s,\x20%s,\x20%s',_0x1ad176,_0x8a29('0xb'),JSON[_0x8a29('0xd')](_0x34d9be));if(_0x34d9be[_0x8a29('0xe')]){if(_0x34d9be[_0x8a29('0xe')]['code']===0x1f4){logger[_0x8a29('0xe')](_0x8a29('0xf'),_0x1ad176,_0x34d9be[_0x8a29('0xe')][_0x8a29('0x10')]);return _0x4865d0(_0x34d9be[_0x8a29('0xe')][_0x8a29('0x10')]);}logger[_0x8a29('0xe')]('CannedAnswer,\x20%s,\x20%s',_0x1ad176,_0x34d9be['error'][_0x8a29('0x10')]);return _0x189d3b(_0x34d9be[_0x8a29('0xe')]['message']);}else{logger['info']('CannedAnswer,\x20%s,\x20%s',_0x1ad176,_0x8a29('0xb'));_0x189d3b(_0x34d9be[_0x8a29('0x11')][_0x8a29('0x10')]);}})[_0x8a29('0x12')](function(_0x3534a4){logger[_0x8a29('0xe')](_0x8a29('0xf'),_0x1ad176,_0x3534a4);_0x4865d0(_0x3534a4);});});}
\ No newline at end of file
+var _0x1471=['../../config/logger','../../config/environment','jayson/promise','request','CannedAnswer,\x20%s,\x20%s','request\x20sent','debug','CannedAnswer,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','catch','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils'];(function(_0x26f1b2,_0x33d843){var _0x1624a4=function(_0x58dfb7){while(--_0x58dfb7){_0x26f1b2['push'](_0x26f1b2['shift']());}};_0x1624a4(++_0x33d843);}(_0x1471,0x13a));var _0x1147=function(_0x1df241,_0xa6ce48){_0x1df241=_0x1df241-0x0;var _0x23f596=_0x1471[_0x1df241];return _0x23f596;};'use strict';var _=require(_0x1147('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x1147('0x1'));var rs=require(_0x1147('0x2'));var fs=require('fs');var Redis=require(_0x1147('0x3'));var db=require(_0x1147('0x4'))['db'];var utils=require(_0x1147('0x5'));var logger=require(_0x1147('0x6'))('rpc');var config=require(_0x1147('0x7'));var jayson=require(_0x1147('0x8'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x25ab23,_0x34334f,_0x3a6c7d){return new BPromise(function(_0x18b763,_0x328d33){return client[_0x1147('0x9')](_0x25ab23,_0x3a6c7d)['then'](function(_0x5a0672){logger['info'](_0x1147('0xa'),_0x34334f,_0x1147('0xb'));logger[_0x1147('0xc')](_0x1147('0xd'),_0x34334f,_0x1147('0xb'),JSON[_0x1147('0xe')](_0x5a0672));if(_0x5a0672[_0x1147('0xf')]){if(_0x5a0672['error']['code']===0x1f4){logger[_0x1147('0xf')](_0x1147('0xa'),_0x34334f,_0x5a0672[_0x1147('0xf')][_0x1147('0x10')]);return _0x328d33(_0x5a0672[_0x1147('0xf')][_0x1147('0x10')]);}logger[_0x1147('0xf')](_0x1147('0xa'),_0x34334f,_0x5a0672[_0x1147('0xf')][_0x1147('0x10')]);return _0x18b763(_0x5a0672[_0x1147('0xf')][_0x1147('0x10')]);}else{logger[_0x1147('0x11')](_0x1147('0xa'),_0x34334f,'request\x20sent');_0x18b763(_0x5a0672[_0x1147('0x12')][_0x1147('0x10')]);}})[_0x1147('0x13')](function(_0x1f030e){logger[_0x1147('0xf')]('CannedAnswer,\x20%s,\x20%s',_0x34334f,_0x1f030e);_0x328d33(_0x1f030e);});});}
\ No newline at end of file
index 35d59b0..61cf0d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x417c=['isAuthenticated','index','/:id','create','put','update','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./cannedAnswer.controller','get'];(function(_0x2f3508,_0x2b1faf){var _0x14672f=function(_0x3386cc){while(--_0x3386cc){_0x2f3508['push'](_0x2f3508['shift']());}};_0x14672f(++_0x2b1faf);}(_0x417c,0xce));var _0xc417=function(_0x135630,_0x12db8f){_0x135630=_0x135630-0x0;var _0x34543a=_0x417c[_0x135630];return _0x34543a;};'use strict';var multer=require(_0xc417('0x0'));var util=require(_0xc417('0x1'));var path=require(_0xc417('0x2'));var timeout=require(_0xc417('0x3'));var express=require(_0xc417('0x4'));var router=express[_0xc417('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0xc417('0x6'));var config=require(_0xc417('0x7'));var controller=require(_0xc417('0x8'));router[_0xc417('0x9')]('/',auth[_0xc417('0xa')](),controller[_0xc417('0xb')]);router[_0xc417('0x9')](_0xc417('0xc'),auth[_0xc417('0xa')](),controller['show']);router['post']('/',auth[_0xc417('0xa')](),controller[_0xc417('0xd')]);router[_0xc417('0xe')](_0xc417('0xc'),auth['isAuthenticated'](),controller[_0xc417('0xf')]);router['delete']('/:id',auth[_0xc417('0xa')](),controller[_0xc417('0x10')]);module[_0xc417('0x11')]=router;
\ No newline at end of file
+var _0x2d83=['post','create','put','update','delete','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','/:id','show'];(function(_0x1cc8fe,_0x105328){var _0x230054=function(_0x1a1b56){while(--_0x1a1b56){_0x1cc8fe['push'](_0x1cc8fe['shift']());}};_0x230054(++_0x105328);}(_0x2d83,0x1ec));var _0x32d8=function(_0xf14981,_0x353c28){_0xf14981=_0xf14981-0x0;var _0x5822e7=_0x2d83[_0xf14981];return _0x5822e7;};'use strict';var multer=require(_0x32d8('0x0'));var util=require('util');var path=require(_0x32d8('0x1'));var timeout=require(_0x32d8('0x2'));var express=require(_0x32d8('0x3'));var router=express[_0x32d8('0x4')]();var auth=require(_0x32d8('0x5'));var interaction=require(_0x32d8('0x6'));var config=require(_0x32d8('0x7'));var controller=require('./cannedAnswer.controller');router[_0x32d8('0x8')]('/',auth[_0x32d8('0x9')](),controller['index']);router[_0x32d8('0x8')](_0x32d8('0xa'),auth['isAuthenticated'](),controller[_0x32d8('0xb')]);router[_0x32d8('0xc')]('/',auth[_0x32d8('0x9')](),controller[_0x32d8('0xd')]);router[_0x32d8('0xe')](_0x32d8('0xa'),auth[_0x32d8('0x9')](),controller[_0x32d8('0xf')]);router[_0x32d8('0x10')](_0x32d8('0xa'),auth[_0x32d8('0x9')](),controller['destroy']);module[_0x32d8('0x11')]=router;
\ No newline at end of file
index e4ba492..e0f6ecd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb29c=['INTEGER','sequelize','exports','1970-01-01\x2000:00:01','STRING'];(function(_0x5389d0,_0x1338bf){var _0x56a7b9=function(_0x3c5e30){while(--_0x3c5e30){_0x5389d0['push'](_0x5389d0['shift']());}};_0x56a7b9(++_0x1338bf);}(_0xb29c,0x88));var _0xcb29=function(_0x1e1962,_0x5a2061){_0x1e1962=_0x1e1962-0x0;var _0x3c06be=_0xb29c[_0x1e1962];return _0x3c06be;};'use strict';var Sequelize=require(_0xcb29('0x0'));module[_0xcb29('0x1')]={'calldate':{'type':Sequelize['DATE'],'allowNull':![],'defaultValue':_0xcb29('0x2')},'clid':{'type':Sequelize[_0xcb29('0x3')]},'src':{'type':Sequelize[_0xcb29('0x3')]},'dst':{'type':Sequelize[_0xcb29('0x3')]},'dcontext':{'type':Sequelize[_0xcb29('0x3')]},'channel':{'type':Sequelize['STRING']},'dstchannel':{'type':Sequelize['STRING']},'lastapp':{'type':Sequelize[_0xcb29('0x3')]},'lastdata':{'type':Sequelize[_0xcb29('0x3')]},'duration':{'type':Sequelize[_0xcb29('0x4')],'allowNull':![],'defaultValue':0x0},'billsec':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x0},'disposition':{'type':Sequelize['STRING']},'amaflags':{'type':Sequelize[_0xcb29('0x4')],'allowNull':![],'defaultValue':0x0},'accountcode':{'type':Sequelize[_0xcb29('0x3')]},'userfield':{'type':Sequelize[_0xcb29('0x3')]},'uniqueid':{'type':Sequelize['STRING']},'linkedid':{'type':Sequelize['STRING']},'sequence':{'type':Sequelize[_0xcb29('0x3')]},'peeraccount':{'type':Sequelize[_0xcb29('0x3')]},'type':{'type':Sequelize[_0xcb29('0x3')]},'tag':{'type':Sequelize[_0xcb29('0x3')]}};
\ No newline at end of file
+var _0x7bfd=['exports','DATE','STRING','INTEGER','sequelize'];(function(_0xcf4569,_0x1ce755){var _0x7fef=function(_0x374ab8){while(--_0x374ab8){_0xcf4569['push'](_0xcf4569['shift']());}};_0x7fef(++_0x1ce755);}(_0x7bfd,0x8b));var _0xd7bf=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0x7bfd[_0x122ef9];return _0x42fba0;};'use strict';var Sequelize=require(_0xd7bf('0x0'));module[_0xd7bf('0x1')]={'calldate':{'type':Sequelize[_0xd7bf('0x2')],'allowNull':![],'defaultValue':'1970-01-01\x2000:00:01'},'clid':{'type':Sequelize['STRING']},'src':{'type':Sequelize[_0xd7bf('0x3')]},'dst':{'type':Sequelize[_0xd7bf('0x3')]},'dcontext':{'type':Sequelize[_0xd7bf('0x3')]},'channel':{'type':Sequelize[_0xd7bf('0x3')]},'dstchannel':{'type':Sequelize[_0xd7bf('0x3')]},'lastapp':{'type':Sequelize[_0xd7bf('0x3')]},'lastdata':{'type':Sequelize[_0xd7bf('0x3')]},'duration':{'type':Sequelize[_0xd7bf('0x4')],'allowNull':![],'defaultValue':0x0},'billsec':{'type':Sequelize[_0xd7bf('0x4')],'allowNull':![],'defaultValue':0x0},'disposition':{'type':Sequelize[_0xd7bf('0x3')]},'amaflags':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x0},'accountcode':{'type':Sequelize[_0xd7bf('0x3')]},'userfield':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0xd7bf('0x3')]},'linkedid':{'type':Sequelize[_0xd7bf('0x3')]},'sequence':{'type':Sequelize['STRING']},'peeraccount':{'type':Sequelize[_0xd7bf('0x3')]},'type':{'type':Sequelize['STRING']},'tag':{'type':Sequelize[_0xd7bf('0x3')]}};
\ No newline at end of file
index c661671..3ad85db 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd06d=['json','apply','save','update','then','destroy','sendStatus','name','send','Cdr','rawAttributes','model','query','keys','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','count','includeAll','include','findAll','rows','catch','params','length','find','create','body','describe','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/logger','../../config/utils','../../mysqldb','status','end','offset','limit','set','Content-Range'];(function(_0x1d9aa0,_0x272488){var _0x226868=function(_0x17127c){while(--_0x17127c){_0x1d9aa0['push'](_0x1d9aa0['shift']());}};_0x226868(++_0x272488);}(_0xd06d,0x100));var _0xdd06=function(_0x36625f,_0x727bd6){_0x36625f=_0x36625f-0x0;var _0x135981=_0xd06d[_0x36625f];return _0x135981;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xdd06('0x0'));var rimraf=require(_0xdd06('0x1'));var zipdir=require(_0xdd06('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xdd06('0x3'));var moment=require(_0xdd06('0x4'));var BPromise=require(_0xdd06('0x5'));var Mustache=require(_0xdd06('0x6'));var util=require('util');var path=require(_0xdd06('0x7'));var sox=require(_0xdd06('0x8'));var csv=require(_0xdd06('0x9'));var ejs=require(_0xdd06('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0xdd06('0xb'));var crypto=require(_0xdd06('0xc'));var jsforce=require(_0xdd06('0xd'));var deskjs=require(_0xdd06('0xe'));var toCsv=require(_0xdd06('0x9'));var querystring=require(_0xdd06('0xf'));var Papa=require(_0xdd06('0x10'));var Redis=require(_0xdd06('0x11'));var authService=require(_0xdd06('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xdd06('0x13'))('api');var utils=require(_0xdd06('0x14'));var config=require('../../config/environment');var db=require(_0xdd06('0x15'))['db'];function respondWithStatusCode(_0x39d4cc,_0x273a08){_0x273a08=_0x273a08||0xcc;return function(_0x4fabc5){if(_0x4fabc5){return _0x39d4cc['sendStatus'](_0x273a08);}return _0x39d4cc[_0xdd06('0x16')](_0x273a08)[_0xdd06('0x17')]();};}function respondWithResult(_0x432716,_0x4dffa3){_0x4dffa3=_0x4dffa3||0xc8;return function(_0x1738ce){if(_0x1738ce){return _0x432716['status'](_0x4dffa3)['json'](_0x1738ce);}};}function respondWithFilteredResult(_0x1b3ec5,_0x4563d3){return function(_0x4804c6){if(_0x4804c6){var _0x287bf0=_0x4804c6['count'],_0x49c3d5=_0x4563d3[_0xdd06('0x18')],_0x149ceb=_0x4563d3[_0xdd06('0x18')]+_0x4563d3[_0xdd06('0x19')],_0x2a7686;if(_0x149ceb>=_0x287bf0){_0x149ceb=_0x287bf0;_0x2a7686=0xc8;}else{_0x2a7686=0xce;}_0x1b3ec5[_0xdd06('0x16')](_0x2a7686);return _0x1b3ec5[_0xdd06('0x1a')](_0xdd06('0x1b'),_0x49c3d5+'-'+_0x149ceb+'/'+_0x287bf0)[_0xdd06('0x1c')](_0x4804c6);}return null;};}function patchUpdates(_0xea4880){return function(_0x51e777){try{jsonpatch[_0xdd06('0x1d')](_0x51e777,_0xea4880,!![]);}catch(_0x146b4f){return BPromise['reject'](_0x146b4f);}return _0x51e777[_0xdd06('0x1e')]();};}function saveUpdates(_0x25e49e,_0x3277a8){return function(_0x1c13b7){if(_0x1c13b7){return _0x1c13b7[_0xdd06('0x1f')](_0x25e49e)[_0xdd06('0x20')](function(_0x52f9d6){return _0x52f9d6;});}return null;};}function removeEntity(_0x57f710,_0x9d3f13){return function(_0x1deb5d){if(_0x1deb5d){return _0x1deb5d[_0xdd06('0x21')]()[_0xdd06('0x20')](function(){_0x57f710[_0xdd06('0x16')](0xcc)[_0xdd06('0x17')]();});}};}function handleEntityNotFound(_0x3e5a66,_0x25bba6){return function(_0x2688f0){if(!_0x2688f0){_0x3e5a66[_0xdd06('0x22')](0x194);}return _0x2688f0;};}function handleError(_0x34abe9,_0x298d79){_0x298d79=_0x298d79||0x1f4;return function(_0x166268){logger['error'](_0x166268['stack']);if(_0x166268[_0xdd06('0x23')]){delete _0x166268[_0xdd06('0x23')];}_0x34abe9['status'](_0x298d79)[_0xdd06('0x24')](_0x166268);};}exports['index']=function(_0x38b517,_0x35c44c){var _0x477e5c={},_0x1a337a={},_0x568e51={'count':0x0,'rows':[]};var _0x202920=db[_0xdd06('0x25')][_0xdd06('0x26')];_0x1a337a[_0xdd06('0x27')]=_['keys'](_0x202920);_0x1a337a[_0xdd06('0x28')]=_[_0xdd06('0x29')](_0x38b517['query']);_0x1a337a[_0xdd06('0x2a')]=_[_0xdd06('0x2b')](_0x1a337a[_0xdd06('0x27')],_0x1a337a['query']);_0x477e5c[_0xdd06('0x2c')]=_['intersection'](_0x1a337a[_0xdd06('0x27')],qs['fields'](_0x38b517['query'][_0xdd06('0x2d')]));_0x477e5c[_0xdd06('0x2c')]=_0x477e5c['attributes']['length']?_0x477e5c[_0xdd06('0x2c')]:_0x1a337a[_0xdd06('0x27')];if(!_0x38b517[_0xdd06('0x28')][_0xdd06('0x2e')](_0xdd06('0x2f'))){_0x477e5c[_0xdd06('0x19')]=qs[_0xdd06('0x19')](_0x38b517[_0xdd06('0x28')]['limit']);_0x477e5c[_0xdd06('0x18')]=qs[_0xdd06('0x18')](_0x38b517['query'][_0xdd06('0x18')]);}_0x477e5c[_0xdd06('0x30')]=qs['sort'](_0x38b517[_0xdd06('0x28')][_0xdd06('0x31')]);_0x477e5c[_0xdd06('0x32')]=qs[_0xdd06('0x2a')](_['pick'](_0x38b517[_0xdd06('0x28')],_0x1a337a[_0xdd06('0x2a')]));if(_0x38b517['query'][_0xdd06('0x33')]){_0x477e5c[_0xdd06('0x32')]=_[_0xdd06('0x34')](_0x477e5c['where'],{'$or':_[_0xdd06('0x35')](_0x202920,function(_0x44b89e){if(_0x44b89e[_0xdd06('0x36')][_0xdd06('0x37')]!==_0xdd06('0x38')){var _0x1df9ac={};_0x1df9ac[_0x44b89e[_0xdd06('0x39')]]={'$like':'%'+_0x38b517['query'][_0xdd06('0x33')]+'%'};return _0x1df9ac;}})});}_0x477e5c=_[_0xdd06('0x34')]({},_0x477e5c,_0x38b517[_0xdd06('0x3a')]);var _0x49a831={'where':_0x477e5c[_0xdd06('0x32')]};return db[_0xdd06('0x25')][_0xdd06('0x3b')](_0x49a831)['then'](function(_0x3cd6b8){_0x568e51['count']=_0x3cd6b8;if(_0x38b517[_0xdd06('0x28')][_0xdd06('0x3c')]){_0x477e5c[_0xdd06('0x3d')]=[{'all':!![]}];}return db[_0xdd06('0x25')][_0xdd06('0x3e')](_0x477e5c);})[_0xdd06('0x20')](function(_0x1a1c38){_0x568e51[_0xdd06('0x3f')]=_0x1a1c38;return _0x568e51;})[_0xdd06('0x20')](respondWithFilteredResult(_0x35c44c,_0x477e5c))[_0xdd06('0x40')](handleError(_0x35c44c,null));};exports['show']=function(_0x6734cb,_0xc92ec9){var _0x3e43c3={'raw':!![],'where':{'id':_0x6734cb[_0xdd06('0x41')]['id']}},_0x3ba85f={};_0x3ba85f[_0xdd06('0x27')]=_[_0xdd06('0x29')](db[_0xdd06('0x25')][_0xdd06('0x26')]);_0x3ba85f[_0xdd06('0x28')]=_[_0xdd06('0x29')](_0x6734cb['query']);_0x3ba85f[_0xdd06('0x2a')]=_[_0xdd06('0x2b')](_0x3ba85f[_0xdd06('0x27')],_0x3ba85f['query']);_0x3e43c3[_0xdd06('0x2c')]=_[_0xdd06('0x2b')](_0x3ba85f['model'],qs['fields'](_0x6734cb[_0xdd06('0x28')][_0xdd06('0x2d')]));_0x3e43c3[_0xdd06('0x2c')]=_0x3e43c3[_0xdd06('0x2c')][_0xdd06('0x42')]?_0x3e43c3[_0xdd06('0x2c')]:_0x3ba85f[_0xdd06('0x27')];if(_0x6734cb[_0xdd06('0x28')][_0xdd06('0x3c')]){_0x3e43c3['include']=[{'all':!![]}];}_0x3e43c3=_[_0xdd06('0x34')]({},_0x3e43c3,_0x6734cb[_0xdd06('0x3a')]);return db[_0xdd06('0x25')][_0xdd06('0x43')](_0x3e43c3)['then'](handleEntityNotFound(_0xc92ec9,null))['then'](respondWithResult(_0xc92ec9,null))[_0xdd06('0x40')](handleError(_0xc92ec9,null));};exports[_0xdd06('0x44')]=function(_0x5d1acb,_0x477022){return db[_0xdd06('0x25')]['create'](_0x5d1acb[_0xdd06('0x45')],{})['then'](respondWithResult(_0x477022,0xc9))[_0xdd06('0x40')](handleError(_0x477022,null));};exports['update']=function(_0x105984,_0x48e7d8){if(_0x105984[_0xdd06('0x45')]['id']){delete _0x105984[_0xdd06('0x45')]['id'];}return db[_0xdd06('0x25')]['find']({'where':{'id':_0x105984[_0xdd06('0x41')]['id']}})[_0xdd06('0x20')](handleEntityNotFound(_0x48e7d8,null))['then'](saveUpdates(_0x105984[_0xdd06('0x45')],null))['then'](respondWithResult(_0x48e7d8,null))[_0xdd06('0x40')](handleError(_0x48e7d8,null));};exports['destroy']=function(_0x461a7d,_0x209401){return db[_0xdd06('0x25')][_0xdd06('0x43')]({'where':{'id':_0x461a7d['params']['id']}})[_0xdd06('0x20')](handleEntityNotFound(_0x209401,null))['then'](removeEntity(_0x209401,null))['catch'](handleError(_0x209401,null));};exports[_0xdd06('0x46')]=function(_0x3afcf5,_0x530c90){return db['Cdr'][_0xdd06('0x46')]()[_0xdd06('0x20')](respondWithResult(_0x530c90,null))[_0xdd06('0x40')](handleError(_0x530c90,null));};
\ No newline at end of file
+var _0xfbd7=['ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','Content-Range','apply','reject','update','destroy','end','sendStatus','error','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','Cdr','then','includeAll','findAll','rows','show','params','include','find','catch','create','body','describe','eml-format','request-promise','moment','mustache','util','sox','to-csv','ejs','squel','jsforce','desk.js','querystring','papaparse'];(function(_0x435071,_0x38a694){var _0x50d869=function(_0x14e6fa){while(--_0x14e6fa){_0x435071['push'](_0x435071['shift']());}};_0x50d869(++_0x38a694);}(_0xfbd7,0xcb));var _0x7fbd=function(_0x16eb13,_0x3d592f){_0x16eb13=_0x16eb13-0x0;var _0x2b6230=_0xfbd7[_0x16eb13];return _0x2b6230;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x7fbd('0x0'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x7fbd('0x1'));var moment=require(_0x7fbd('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x7fbd('0x3'));var util=require(_0x7fbd('0x4'));var path=require('path');var sox=require(_0x7fbd('0x5'));var csv=require(_0x7fbd('0x6'));var ejs=require(_0x7fbd('0x7'));var fs=require('fs');var _=require('lodash');var squel=require(_0x7fbd('0x8'));var crypto=require('crypto');var jsforce=require(_0x7fbd('0x9'));var deskjs=require(_0x7fbd('0xa'));var toCsv=require(_0x7fbd('0x6'));var querystring=require(_0x7fbd('0xb'));var Papa=require(_0x7fbd('0xc'));var Redis=require(_0x7fbd('0xd'));var authService=require(_0x7fbd('0xe'));var qs=require(_0x7fbd('0xf'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0x7fbd('0x10'));var utils=require(_0x7fbd('0x11'));var config=require(_0x7fbd('0x12'));var db=require(_0x7fbd('0x13'))['db'];function respondWithStatusCode(_0x26ce17,_0xb012b2){_0xb012b2=_0xb012b2||0xcc;return function(_0x3570ad){if(_0x3570ad){return _0x26ce17['sendStatus'](_0xb012b2);}return _0x26ce17[_0x7fbd('0x14')](_0xb012b2)['end']();};}function respondWithResult(_0x2eacd8,_0x4b9011){_0x4b9011=_0x4b9011||0xc8;return function(_0x5b4cff){if(_0x5b4cff){return _0x2eacd8[_0x7fbd('0x14')](_0x4b9011)[_0x7fbd('0x15')](_0x5b4cff);}};}function respondWithFilteredResult(_0x41e9d6,_0x48bea8){return function(_0x1679e0){if(_0x1679e0){var _0x389fe1=_0x1679e0[_0x7fbd('0x16')],_0x43480b=_0x48bea8[_0x7fbd('0x17')],_0x154c4d=_0x48bea8[_0x7fbd('0x17')]+_0x48bea8[_0x7fbd('0x18')],_0x327891;if(_0x154c4d>=_0x389fe1){_0x154c4d=_0x389fe1;_0x327891=0xc8;}else{_0x327891=0xce;}_0x41e9d6[_0x7fbd('0x14')](_0x327891);return _0x41e9d6[_0x7fbd('0x19')](_0x7fbd('0x1a'),_0x43480b+'-'+_0x154c4d+'/'+_0x389fe1)['json'](_0x1679e0);}return null;};}function patchUpdates(_0x210928){return function(_0x3188eb){try{jsonpatch[_0x7fbd('0x1b')](_0x3188eb,_0x210928,!![]);}catch(_0xe1a0af){return BPromise[_0x7fbd('0x1c')](_0xe1a0af);}return _0x3188eb['save']();};}function saveUpdates(_0x3c0e25,_0x14afd4){return function(_0x680d7){if(_0x680d7){return _0x680d7[_0x7fbd('0x1d')](_0x3c0e25)['then'](function(_0x297a24){return _0x297a24;});}return null;};}function removeEntity(_0x43861f,_0x651e16){return function(_0x3ba2b8){if(_0x3ba2b8){return _0x3ba2b8[_0x7fbd('0x1e')]()['then'](function(){_0x43861f[_0x7fbd('0x14')](0xcc)[_0x7fbd('0x1f')]();});}};}function handleEntityNotFound(_0x44a912,_0x247d02){return function(_0x480326){if(!_0x480326){_0x44a912[_0x7fbd('0x20')](0x194);}return _0x480326;};}function handleError(_0x5ba7e5,_0x5632af){_0x5632af=_0x5632af||0x1f4;return function(_0x3d31a0){logger[_0x7fbd('0x21')](_0x3d31a0[_0x7fbd('0x22')]);if(_0x3d31a0[_0x7fbd('0x23')]){delete _0x3d31a0[_0x7fbd('0x23')];}_0x5ba7e5[_0x7fbd('0x14')](_0x5632af)[_0x7fbd('0x24')](_0x3d31a0);};}exports[_0x7fbd('0x25')]=function(_0x4b4f10,_0x2e702f){var _0x4e21fe={},_0x187769={},_0x438527={'count':0x0,'rows':[]};var _0x588299=db['Cdr'][_0x7fbd('0x26')];_0x187769[_0x7fbd('0x27')]=_[_0x7fbd('0x28')](_0x588299);_0x187769[_0x7fbd('0x29')]=_['keys'](_0x4b4f10['query']);_0x187769[_0x7fbd('0x2a')]=_[_0x7fbd('0x2b')](_0x187769['model'],_0x187769[_0x7fbd('0x29')]);_0x4e21fe[_0x7fbd('0x2c')]=_[_0x7fbd('0x2b')](_0x187769[_0x7fbd('0x27')],qs[_0x7fbd('0x2d')](_0x4b4f10[_0x7fbd('0x29')]['fields']));_0x4e21fe[_0x7fbd('0x2c')]=_0x4e21fe[_0x7fbd('0x2c')][_0x7fbd('0x2e')]?_0x4e21fe[_0x7fbd('0x2c')]:_0x187769[_0x7fbd('0x27')];if(!_0x4b4f10[_0x7fbd('0x29')][_0x7fbd('0x2f')](_0x7fbd('0x30'))){_0x4e21fe['limit']=qs['limit'](_0x4b4f10[_0x7fbd('0x29')][_0x7fbd('0x18')]);_0x4e21fe[_0x7fbd('0x17')]=qs['offset'](_0x4b4f10['query'][_0x7fbd('0x17')]);}_0x4e21fe['order']=qs[_0x7fbd('0x31')](_0x4b4f10[_0x7fbd('0x29')][_0x7fbd('0x31')]);_0x4e21fe[_0x7fbd('0x32')]=qs[_0x7fbd('0x2a')](_['pick'](_0x4b4f10[_0x7fbd('0x29')],_0x187769[_0x7fbd('0x2a')]));if(_0x4b4f10[_0x7fbd('0x29')][_0x7fbd('0x33')]){_0x4e21fe[_0x7fbd('0x32')]=_[_0x7fbd('0x34')](_0x4e21fe['where'],{'$or':_[_0x7fbd('0x35')](_0x588299,function(_0x14b7ef){if(_0x14b7ef[_0x7fbd('0x36')][_0x7fbd('0x37')]!==_0x7fbd('0x38')){var _0x4a5839={};_0x4a5839[_0x14b7ef[_0x7fbd('0x39')]]={'$like':'%'+_0x4b4f10['query']['filter']+'%'};return _0x4a5839;}})});}_0x4e21fe=_[_0x7fbd('0x34')]({},_0x4e21fe,_0x4b4f10[_0x7fbd('0x3a')]);var _0x2dbbd5={'where':_0x4e21fe[_0x7fbd('0x32')]};return db[_0x7fbd('0x3b')][_0x7fbd('0x16')](_0x2dbbd5)[_0x7fbd('0x3c')](function(_0x3c0607){_0x438527['count']=_0x3c0607;if(_0x4b4f10[_0x7fbd('0x29')][_0x7fbd('0x3d')]){_0x4e21fe['include']=[{'all':!![]}];}return db[_0x7fbd('0x3b')][_0x7fbd('0x3e')](_0x4e21fe);})[_0x7fbd('0x3c')](function(_0x5f081a){_0x438527[_0x7fbd('0x3f')]=_0x5f081a;return _0x438527;})[_0x7fbd('0x3c')](respondWithFilteredResult(_0x2e702f,_0x4e21fe))['catch'](handleError(_0x2e702f,null));};exports[_0x7fbd('0x40')]=function(_0x4fb60c,_0x353bdb){var _0xf3050={'raw':!![],'where':{'id':_0x4fb60c[_0x7fbd('0x41')]['id']}},_0x5a192b={};_0x5a192b[_0x7fbd('0x27')]=_[_0x7fbd('0x28')](db[_0x7fbd('0x3b')]['rawAttributes']);_0x5a192b['query']=_['keys'](_0x4fb60c['query']);_0x5a192b[_0x7fbd('0x2a')]=_[_0x7fbd('0x2b')](_0x5a192b[_0x7fbd('0x27')],_0x5a192b['query']);_0xf3050[_0x7fbd('0x2c')]=_[_0x7fbd('0x2b')](_0x5a192b[_0x7fbd('0x27')],qs[_0x7fbd('0x2d')](_0x4fb60c[_0x7fbd('0x29')]['fields']));_0xf3050['attributes']=_0xf3050['attributes'][_0x7fbd('0x2e')]?_0xf3050[_0x7fbd('0x2c')]:_0x5a192b[_0x7fbd('0x27')];if(_0x4fb60c[_0x7fbd('0x29')][_0x7fbd('0x3d')]){_0xf3050[_0x7fbd('0x42')]=[{'all':!![]}];}_0xf3050=_[_0x7fbd('0x34')]({},_0xf3050,_0x4fb60c[_0x7fbd('0x3a')]);return db[_0x7fbd('0x3b')][_0x7fbd('0x43')](_0xf3050)[_0x7fbd('0x3c')](handleEntityNotFound(_0x353bdb,null))[_0x7fbd('0x3c')](respondWithResult(_0x353bdb,null))[_0x7fbd('0x44')](handleError(_0x353bdb,null));};exports[_0x7fbd('0x45')]=function(_0x479fbb,_0x1d15de){return db[_0x7fbd('0x3b')][_0x7fbd('0x45')](_0x479fbb[_0x7fbd('0x46')],{})[_0x7fbd('0x3c')](respondWithResult(_0x1d15de,0xc9))['catch'](handleError(_0x1d15de,null));};exports[_0x7fbd('0x1d')]=function(_0x15e991,_0x1d3cdb){if(_0x15e991['body']['id']){delete _0x15e991[_0x7fbd('0x46')]['id'];}return db[_0x7fbd('0x3b')][_0x7fbd('0x43')]({'where':{'id':_0x15e991[_0x7fbd('0x41')]['id']}})[_0x7fbd('0x3c')](handleEntityNotFound(_0x1d3cdb,null))['then'](saveUpdates(_0x15e991[_0x7fbd('0x46')],null))[_0x7fbd('0x3c')](respondWithResult(_0x1d3cdb,null))[_0x7fbd('0x44')](handleError(_0x1d3cdb,null));};exports[_0x7fbd('0x1e')]=function(_0x1a2487,_0x44336c){return db['Cdr']['find']({'where':{'id':_0x1a2487['params']['id']}})[_0x7fbd('0x3c')](handleEntityNotFound(_0x44336c,null))[_0x7fbd('0x3c')](removeEntity(_0x44336c,null))['catch'](handleError(_0x44336c,null));};exports[_0x7fbd('0x47')]=function(_0x1cf8c6,_0x31be86){return db[_0x7fbd('0x3b')][_0x7fbd('0x47')]()[_0x7fbd('0x3c')](respondWithResult(_0x31be86,null))[_0x7fbd('0x44')](handleError(_0x31be86,null));};
\ No newline at end of file
index 1022df9..59263c4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf46b=['Cdr','cdr','accountcode','calldate','disposition','dst','src','uniqueid','lodash','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','./cdr.attributes','exports','define'];(function(_0x22386f,_0x3da6d7){var _0x2e6d18=function(_0xc1c0a9){while(--_0xc1c0a9){_0x22386f['push'](_0x22386f['shift']());}};_0x2e6d18(++_0x3da6d7);}(_0xf46b,0xff));var _0xbf46=function(_0x39096d,_0x51f8a0){_0x39096d=_0x39096d-0x0;var _0x13da4f=_0xf46b[_0x39096d];return _0x13da4f;};'use strict';var _=require(_0xbf46('0x0'));var util=require('util');var logger=require(_0xbf46('0x1'))(_0xbf46('0x2'));var moment=require(_0xbf46('0x3'));var BPromise=require(_0xbf46('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xbf46('0x5'));var rimraf=require(_0xbf46('0x6'));var config=require(_0xbf46('0x7'));var attributes=require(_0xbf46('0x8'));module[_0xbf46('0x9')]=function(_0x1ee0fc,_0x29c564){return _0x1ee0fc[_0xbf46('0xa')](_0xbf46('0xb'),attributes,{'tableName':_0xbf46('0xc'),'paranoid':![],'indexes':[{'name':_0xbf46('0xd'),'fields':[_0xbf46('0xd')]},{'name':_0xbf46('0xe'),'fields':[_0xbf46('0xe')]},{'name':_0xbf46('0xf'),'fields':['disposition']},{'name':_0xbf46('0x10'),'fields':[_0xbf46('0x10')]},{'name':_0xbf46('0x11'),'fields':[_0xbf46('0x11')]},{'name':_0xbf46('0x12'),'fields':[_0xbf46('0x12')]}],'timestamps':![]});};
\ No newline at end of file
+var _0x8d1d=['rimraf','../../config/environment','./cdr.attributes','exports','define','Cdr','accountcode','calldate','disposition','dst','src','lodash','../../config/logger','api','moment','bluebird','path'];(function(_0x60749d,_0x255910){var _0xbb0238=function(_0x2cd8f4){while(--_0x2cd8f4){_0x60749d['push'](_0x60749d['shift']());}};_0xbb0238(++_0x255910);}(_0x8d1d,0x82));var _0xd8d1=function(_0x490b55,_0x4b5173){_0x490b55=_0x490b55-0x0;var _0x749559=_0x8d1d[_0x490b55];return _0x749559;};'use strict';var _=require(_0xd8d1('0x0'));var util=require('util');var logger=require(_0xd8d1('0x1'))(_0xd8d1('0x2'));var moment=require(_0xd8d1('0x3'));var BPromise=require(_0xd8d1('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xd8d1('0x5'));var rimraf=require(_0xd8d1('0x6'));var config=require(_0xd8d1('0x7'));var attributes=require(_0xd8d1('0x8'));module[_0xd8d1('0x9')]=function(_0x141db8,_0x331ea9){return _0x141db8[_0xd8d1('0xa')](_0xd8d1('0xb'),attributes,{'tableName':'cdr','paranoid':![],'indexes':[{'name':_0xd8d1('0xc'),'fields':[_0xd8d1('0xc')]},{'name':_0xd8d1('0xd'),'fields':[_0xd8d1('0xd')]},{'name':'disposition','fields':[_0xd8d1('0xe')]},{'name':'dst','fields':[_0xd8d1('0xf')]},{'name':_0xd8d1('0x10'),'fields':['src']},{'name':'uniqueid','fields':['uniqueid']}],'timestamps':![]});};
\ No newline at end of file
index 91e60ff..daebc2f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe436=['message','result','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','Cdr,\x20%s,\x20%s','Cdr,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code'];(function(_0x403c8d,_0x5e3825){var _0x4ca60d=function(_0x9326c1){while(--_0x9326c1){_0x403c8d['push'](_0x403c8d['shift']());}};_0x4ca60d(++_0x5e3825);}(_0xe436,0x19a));var _0x6e43=function(_0x43e8d2,_0x3c46d1){_0x43e8d2=_0x43e8d2-0x0;var _0x36b528=_0xe436[_0x43e8d2];return _0x36b528;};'use strict';var _=require(_0x6e43('0x0'));var util=require(_0x6e43('0x1'));var moment=require(_0x6e43('0x2'));var BPromise=require(_0x6e43('0x3'));var rs=require(_0x6e43('0x4'));var fs=require('fs');var Redis=require(_0x6e43('0x5'));var db=require(_0x6e43('0x6'))['db'];var utils=require(_0x6e43('0x7'));var logger=require(_0x6e43('0x8'))('rpc');var config=require(_0x6e43('0x9'));var jayson=require(_0x6e43('0xa'));var client=jayson[_0x6e43('0xb')][_0x6e43('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x49fa1b,_0x3bb4cf,_0x4ea4e4){return new BPromise(function(_0x5c33b1,_0x891deb){return client[_0x6e43('0xd')](_0x49fa1b,_0x4ea4e4)[_0x6e43('0xe')](function(_0x2a47e9){logger[_0x6e43('0xf')](_0x6e43('0x10'),_0x3bb4cf,'request\x20sent');logger['debug'](_0x6e43('0x11'),_0x3bb4cf,_0x6e43('0x12'),JSON[_0x6e43('0x13')](_0x2a47e9));if(_0x2a47e9[_0x6e43('0x14')]){if(_0x2a47e9['error'][_0x6e43('0x15')]===0x1f4){logger[_0x6e43('0x14')](_0x6e43('0x10'),_0x3bb4cf,_0x2a47e9['error'][_0x6e43('0x16')]);return _0x891deb(_0x2a47e9[_0x6e43('0x14')]['message']);}logger[_0x6e43('0x14')](_0x6e43('0x10'),_0x3bb4cf,_0x2a47e9['error'][_0x6e43('0x16')]);return _0x5c33b1(_0x2a47e9['error']['message']);}else{logger[_0x6e43('0xf')]('Cdr,\x20%s,\x20%s',_0x3bb4cf,_0x6e43('0x12'));_0x5c33b1(_0x2a47e9[_0x6e43('0x17')][_0x6e43('0x16')]);}})['catch'](function(_0x20216f){logger[_0x6e43('0x14')]('Cdr,\x20%s,\x20%s',_0x3bb4cf,_0x20216f);_0x891deb(_0x20216f);});});}
\ No newline at end of file
+var _0x3b2d=['code','message','info','catch','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','Cdr,\x20%s,\x20%s','request\x20sent','debug','Cdr,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x4291a2,_0x2ee2e5){var _0x235817=function(_0x23b06d){while(--_0x23b06d){_0x4291a2['push'](_0x4291a2['shift']());}};_0x235817(++_0x2ee2e5);}(_0x3b2d,0xac));var _0xd3b2=function(_0x5976a1,_0x537bac){_0x5976a1=_0x5976a1-0x0;var _0x48f162=_0x3b2d[_0x5976a1];return _0x48f162;};'use strict';var _=require(_0xd3b2('0x0'));var util=require(_0xd3b2('0x1'));var moment=require(_0xd3b2('0x2'));var BPromise=require('bluebird');var rs=require(_0xd3b2('0x3'));var fs=require('fs');var Redis=require(_0xd3b2('0x4'));var db=require(_0xd3b2('0x5'))['db'];var utils=require(_0xd3b2('0x6'));var logger=require(_0xd3b2('0x7'))(_0xd3b2('0x8'));var config=require('../../config/environment');var jayson=require(_0xd3b2('0x9'));var client=jayson[_0xd3b2('0xa')][_0xd3b2('0xb')]({'port':0x232a});function respondWithRpcPromise(_0xb7799d,_0x54f017,_0x907621){return new BPromise(function(_0x164f5b,_0x5a374c){return client[_0xd3b2('0xc')](_0xb7799d,_0x907621)[_0xd3b2('0xd')](function(_0xc83bd4){logger['info'](_0xd3b2('0xe'),_0x54f017,_0xd3b2('0xf'));logger[_0xd3b2('0x10')](_0xd3b2('0x11'),_0x54f017,_0xd3b2('0xf'),JSON[_0xd3b2('0x12')](_0xc83bd4));if(_0xc83bd4[_0xd3b2('0x13')]){if(_0xc83bd4['error'][_0xd3b2('0x14')]===0x1f4){logger[_0xd3b2('0x13')]('Cdr,\x20%s,\x20%s',_0x54f017,_0xc83bd4[_0xd3b2('0x13')][_0xd3b2('0x15')]);return _0x5a374c(_0xc83bd4[_0xd3b2('0x13')][_0xd3b2('0x15')]);}logger[_0xd3b2('0x13')]('Cdr,\x20%s,\x20%s',_0x54f017,_0xc83bd4[_0xd3b2('0x13')][_0xd3b2('0x15')]);return _0x164f5b(_0xc83bd4['error']['message']);}else{logger[_0xd3b2('0x16')]('Cdr,\x20%s,\x20%s',_0x54f017,'request\x20sent');_0x164f5b(_0xc83bd4['result'][_0xd3b2('0x15')]);}})[_0xd3b2('0x17')](function(_0x167f4c){logger[_0xd3b2('0x13')](_0xd3b2('0xe'),_0x54f017,_0x167f4c);_0x5a374c(_0x167f4c);});});}
\ No newline at end of file
index 2772074..48cb441 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcf6d=['get','isAuthenticated','describe','/:id','show','create','put','update','destroy','exports','multer','path','connect-timeout','Router','../../components/interaction/service','./cdr.controller'];(function(_0x3d467b,_0x4e5e63){var _0xcfa39c=function(_0x15118a){while(--_0x15118a){_0x3d467b['push'](_0x3d467b['shift']());}};_0xcfa39c(++_0x4e5e63);}(_0xcf6d,0x16a));var _0xdcf6=function(_0x3e8a31,_0x58a50f){_0x3e8a31=_0x3e8a31-0x0;var _0x4718d8=_0xcf6d[_0x3e8a31];return _0x4718d8;};'use strict';var multer=require(_0xdcf6('0x0'));var util=require('util');var path=require(_0xdcf6('0x1'));var timeout=require(_0xdcf6('0x2'));var express=require('express');var router=express[_0xdcf6('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xdcf6('0x4'));var config=require('../../config/environment');var controller=require(_0xdcf6('0x5'));router[_0xdcf6('0x6')]('/',auth[_0xdcf6('0x7')](),controller['index']);router[_0xdcf6('0x6')]('/describe',auth[_0xdcf6('0x7')](),controller[_0xdcf6('0x8')]);router['get'](_0xdcf6('0x9'),auth[_0xdcf6('0x7')](),controller[_0xdcf6('0xa')]);router['post']('/',auth[_0xdcf6('0x7')](),controller[_0xdcf6('0xb')]);router[_0xdcf6('0xc')]('/:id',auth[_0xdcf6('0x7')](),controller[_0xdcf6('0xd')]);router['delete']('/:id',auth[_0xdcf6('0x7')](),controller[_0xdcf6('0xe')]);module[_0xdcf6('0xf')]=router;
\ No newline at end of file
+var _0x5137=['show','put','delete','destroy','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','./cdr.controller','get','isAuthenticated','describe','/:id'];(function(_0x279d37,_0x14de3f){var _0x530173=function(_0x37fc79){while(--_0x37fc79){_0x279d37['push'](_0x279d37['shift']());}};_0x530173(++_0x14de3f);}(_0x5137,0x1e5));var _0x7513=function(_0x2fcd0c,_0xe4db7d){_0x2fcd0c=_0x2fcd0c-0x0;var _0x18230c=_0x5137[_0x2fcd0c];return _0x18230c;};'use strict';var multer=require(_0x7513('0x0'));var util=require(_0x7513('0x1'));var path=require(_0x7513('0x2'));var timeout=require('connect-timeout');var express=require(_0x7513('0x3'));var router=express['Router']();var auth=require(_0x7513('0x4'));var interaction=require(_0x7513('0x5'));var config=require('../../config/environment');var controller=require(_0x7513('0x6'));router[_0x7513('0x7')]('/',auth['isAuthenticated'](),controller['index']);router[_0x7513('0x7')]('/describe',auth[_0x7513('0x8')](),controller[_0x7513('0x9')]);router[_0x7513('0x7')](_0x7513('0xa'),auth['isAuthenticated'](),controller[_0x7513('0xb')]);router['post']('/',auth['isAuthenticated'](),controller['create']);router[_0x7513('0xc')](_0x7513('0xa'),auth[_0x7513('0x8')](),controller['update']);router[_0x7513('0xd')](_0x7513('0xa'),auth['isAuthenticated'](),controller[_0x7513('0xe')]);module[_0x7513('0xf')]=router;
\ No newline at end of file
index 1333f6e..e8ce467 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x326b=['noop','TEXT','sequelize','exports','INTEGER','STRING'];(function(_0x502c7d,_0x2f1285){var _0x30b7ed=function(_0x2d92f3){while(--_0x2d92f3){_0x502c7d['push'](_0x502c7d['shift']());}};_0x30b7ed(++_0x2f1285);}(_0x326b,0x1dc));var _0xb326=function(_0x4f431d,_0xd51a3b){_0x4f431d=_0x4f431d-0x0;var _0x4f31e1=_0x326b[_0x4f431d];return _0x4f31e1;};'use strict';var Sequelize=require(_0xb326('0x0'));module[_0xb326('0x1')]={'priority':{'type':Sequelize[_0xb326('0x2')],'allowNull':![]},'app':{'type':Sequelize[_0xb326('0x3')],'allowNull':![],'defaultValue':_0xb326('0x4')},'appdata':{'type':Sequelize[_0xb326('0x5')]()},'description':{'type':Sequelize['STRING']},'interval':{'type':Sequelize[_0xb326('0x3')],'defaultValue':'*,*,*,*'}};
\ No newline at end of file
+var _0x80e0=['*,*,*,*','INTEGER','STRING','noop'];(function(_0x136a04,_0x370ad0){var _0x2b6528=function(_0x4a3198){while(--_0x4a3198){_0x136a04['push'](_0x136a04['shift']());}};_0x2b6528(++_0x370ad0);}(_0x80e0,0x9d));var _0x080e=function(_0x448e3c,_0x1cb522){_0x448e3c=_0x448e3c-0x0;var _0x134c91=_0x80e0[_0x448e3c];return _0x134c91;};'use strict';var Sequelize=require('sequelize');module['exports']={'priority':{'type':Sequelize[_0x080e('0x0')],'allowNull':![]},'app':{'type':Sequelize[_0x080e('0x1')],'allowNull':![],'defaultValue':_0x080e('0x2')},'appdata':{'type':Sequelize['TEXT']()},'description':{'type':Sequelize[_0x080e('0x1')]},'interval':{'type':Sequelize[_0x080e('0x1')],'defaultValue':_0x080e('0x3')}};
\ No newline at end of file
index b377c15..6ea5978 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5508=['keys','ChatApplication','rawAttributes','query','intersection','attributes','fields','length','includeAll','include','merge','options','find','body','catch','destroy','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','save','then','end','error','stack','name','send','show','params','model'];(function(_0x136e11,_0x29bd0b){var _0x36d346=function(_0x44cd38){while(--_0x44cd38){_0x136e11['push'](_0x136e11['shift']());}};_0x36d346(++_0x29bd0b);}(_0x5508,0xc1));var _0x8550=function(_0x3d940c,_0x212276){_0x3d940c=_0x3d940c-0x0;var _0x9028c3=_0x5508[_0x3d940c];return _0x9028c3;};'use strict';var pdf=require(_0x8550('0x0'));var emlformat=require(_0x8550('0x1'));var rimraf=require(_0x8550('0x2'));var zipdir=require(_0x8550('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x8550('0x4'));var moment=require(_0x8550('0x5'));var BPromise=require(_0x8550('0x6'));var Mustache=require(_0x8550('0x7'));var util=require(_0x8550('0x8'));var path=require(_0x8550('0x9'));var sox=require('sox');var csv=require(_0x8550('0xa'));var ejs=require(_0x8550('0xb'));var fs=require('fs');var _=require(_0x8550('0xc'));var squel=require(_0x8550('0xd'));var crypto=require(_0x8550('0xe'));var jsforce=require('jsforce');var deskjs=require(_0x8550('0xf'));var toCsv=require(_0x8550('0xa'));var querystring=require('querystring');var Papa=require(_0x8550('0x10'));var Redis=require(_0x8550('0x11'));var authService=require(_0x8550('0x12'));var qs=require(_0x8550('0x13'));var hardwareService=require(_0x8550('0x14'));var logger=require(_0x8550('0x15'))(_0x8550('0x16'));var utils=require('../../config/utils');var config=require(_0x8550('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3536a2,_0x28780e){_0x28780e=_0x28780e||0xcc;return function(_0x532a55){if(_0x532a55){return _0x3536a2[_0x8550('0x18')](_0x28780e);}return _0x3536a2[_0x8550('0x19')](_0x28780e)['end']();};}function respondWithResult(_0x1ac397,_0x271a73){_0x271a73=_0x271a73||0xc8;return function(_0x47cf89){if(_0x47cf89){return _0x1ac397[_0x8550('0x19')](_0x271a73)[_0x8550('0x1a')](_0x47cf89);}};}function respondWithFilteredResult(_0x5541bd,_0x433fe7){return function(_0x4f8390){if(_0x4f8390){var _0x6744c9=_0x4f8390[_0x8550('0x1b')],_0x36e4b7=_0x433fe7[_0x8550('0x1c')],_0x4c796d=_0x433fe7[_0x8550('0x1c')]+_0x433fe7[_0x8550('0x1d')],_0x11c37c;if(_0x4c796d>=_0x6744c9){_0x4c796d=_0x6744c9;_0x11c37c=0xc8;}else{_0x11c37c=0xce;}_0x5541bd[_0x8550('0x19')](_0x11c37c);return _0x5541bd[_0x8550('0x1e')](_0x8550('0x1f'),_0x36e4b7+'-'+_0x4c796d+'/'+_0x6744c9)[_0x8550('0x1a')](_0x4f8390);}return null;};}function patchUpdates(_0xaef8fb){return function(_0x24f30d){try{jsonpatch[_0x8550('0x20')](_0x24f30d,_0xaef8fb,!![]);}catch(_0x2e415b){return BPromise['reject'](_0x2e415b);}return _0x24f30d[_0x8550('0x21')]();};}function saveUpdates(_0x2cec20,_0x306378){return function(_0xcb36fb){if(_0xcb36fb){return _0xcb36fb['update'](_0x2cec20)[_0x8550('0x22')](function(_0x1c0208){return _0x1c0208;});}return null;};}function removeEntity(_0x5cdb47,_0x5c3621){return function(_0x51f462){if(_0x51f462){return _0x51f462['destroy']()[_0x8550('0x22')](function(){_0x5cdb47[_0x8550('0x19')](0xcc)[_0x8550('0x23')]();});}};}function handleEntityNotFound(_0x4d244c,_0x5f0dec){return function(_0x321291){if(!_0x321291){_0x4d244c[_0x8550('0x18')](0x194);}return _0x321291;};}function handleError(_0x567329,_0x568aae){_0x568aae=_0x568aae||0x1f4;return function(_0x2a9a3e){logger[_0x8550('0x24')](_0x2a9a3e[_0x8550('0x25')]);if(_0x2a9a3e[_0x8550('0x26')]){delete _0x2a9a3e['name'];}_0x567329[_0x8550('0x19')](_0x568aae)[_0x8550('0x27')](_0x2a9a3e);};}exports[_0x8550('0x28')]=function(_0x2342b5,_0x5c347a){var _0x50fb69={'raw':!![],'where':{'id':_0x2342b5[_0x8550('0x29')]['id']}},_0x22d648={};_0x22d648[_0x8550('0x2a')]=_[_0x8550('0x2b')](db[_0x8550('0x2c')][_0x8550('0x2d')]);_0x22d648['query']=_['keys'](_0x2342b5[_0x8550('0x2e')]);_0x22d648['filters']=_[_0x8550('0x2f')](_0x22d648[_0x8550('0x2a')],_0x22d648[_0x8550('0x2e')]);_0x50fb69[_0x8550('0x30')]=_[_0x8550('0x2f')](_0x22d648[_0x8550('0x2a')],qs[_0x8550('0x31')](_0x2342b5[_0x8550('0x2e')][_0x8550('0x31')]));_0x50fb69[_0x8550('0x30')]=_0x50fb69[_0x8550('0x30')][_0x8550('0x32')]?_0x50fb69['attributes']:_0x22d648[_0x8550('0x2a')];if(_0x2342b5[_0x8550('0x2e')][_0x8550('0x33')]){_0x50fb69[_0x8550('0x34')]=[{'all':!![]}];}_0x50fb69=_[_0x8550('0x35')]({},_0x50fb69,_0x2342b5[_0x8550('0x36')]);return db[_0x8550('0x2c')][_0x8550('0x37')](_0x50fb69)[_0x8550('0x22')](handleEntityNotFound(_0x5c347a,null))[_0x8550('0x22')](respondWithResult(_0x5c347a,null))['catch'](handleError(_0x5c347a,null));};exports['update']=function(_0x2bbcd2,_0x53f5cb){if(_0x2bbcd2[_0x8550('0x38')]['id']){delete _0x2bbcd2['body']['id'];}return db[_0x8550('0x2c')][_0x8550('0x37')]({'where':{'id':_0x2bbcd2[_0x8550('0x29')]['id']}})[_0x8550('0x22')](handleEntityNotFound(_0x53f5cb,null))['then'](saveUpdates(_0x2bbcd2['body'],null))[_0x8550('0x22')](respondWithResult(_0x53f5cb,null))[_0x8550('0x39')](handleError(_0x53f5cb,null));};exports[_0x8550('0x3a')]=function(_0x18a801,_0x246aca){return db[_0x8550('0x2c')][_0x8550('0x37')]({'where':{'id':_0x18a801['params']['id']}})['then'](handleEntityNotFound(_0x246aca,null))[_0x8550('0x22')](removeEntity(_0x246aca,null))['catch'](handleError(_0x246aca,null));};
\ No newline at end of file
+var _0x9081=['limit','set','Content-Range','apply','reject','then','stack','name','show','params','model','keys','ChatApplication','rawAttributes','query','filters','intersection','fields','attributes','length','includeAll','include','options','find','catch','update','body','destroy','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','to-csv','lodash','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset'];(function(_0x2a6992,_0x2958af){var _0x1db8fb=function(_0x3a5164){while(--_0x3a5164){_0x2a6992['push'](_0x2a6992['shift']());}};_0x1db8fb(++_0x2958af);}(_0x9081,0xfc));var _0x1908=function(_0x58b1ca,_0x4475ee){_0x58b1ca=_0x58b1ca-0x0;var _0x38ae29=_0x9081[_0x58b1ca];return _0x38ae29;};'use strict';var pdf=require(_0x1908('0x0'));var emlformat=require(_0x1908('0x1'));var rimraf=require(_0x1908('0x2'));var zipdir=require(_0x1908('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x1908('0x4'));var moment=require(_0x1908('0x5'));var BPromise=require(_0x1908('0x6'));var Mustache=require(_0x1908('0x7'));var util=require(_0x1908('0x8'));var path=require('path');var sox=require('sox');var csv=require(_0x1908('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x1908('0xa'));var squel=require('squel');var crypto=require(_0x1908('0xb'));var jsforce=require(_0x1908('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x1908('0x9'));var querystring=require(_0x1908('0xd'));var Papa=require(_0x1908('0xe'));var Redis=require(_0x1908('0xf'));var authService=require(_0x1908('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x1908('0x11'));var logger=require(_0x1908('0x12'))(_0x1908('0x13'));var utils=require(_0x1908('0x14'));var config=require(_0x1908('0x15'));var db=require(_0x1908('0x16'))['db'];function respondWithStatusCode(_0x1914a9,_0x4472ac){_0x4472ac=_0x4472ac||0xcc;return function(_0x20f2c6){if(_0x20f2c6){return _0x1914a9[_0x1908('0x17')](_0x4472ac);}return _0x1914a9[_0x1908('0x18')](_0x4472ac)[_0x1908('0x19')]();};}function respondWithResult(_0x55f041,_0x213bde){_0x213bde=_0x213bde||0xc8;return function(_0x2d2d19){if(_0x2d2d19){return _0x55f041[_0x1908('0x18')](_0x213bde)[_0x1908('0x1a')](_0x2d2d19);}};}function respondWithFilteredResult(_0x3087c4,_0x2e8804){return function(_0x1003ee){if(_0x1003ee){var _0x1b33e9=_0x1003ee['count'],_0x455656=_0x2e8804[_0x1908('0x1b')],_0x4ace7c=_0x2e8804[_0x1908('0x1b')]+_0x2e8804[_0x1908('0x1c')],_0x2000cf;if(_0x4ace7c>=_0x1b33e9){_0x4ace7c=_0x1b33e9;_0x2000cf=0xc8;}else{_0x2000cf=0xce;}_0x3087c4['status'](_0x2000cf);return _0x3087c4[_0x1908('0x1d')](_0x1908('0x1e'),_0x455656+'-'+_0x4ace7c+'/'+_0x1b33e9)[_0x1908('0x1a')](_0x1003ee);}return null;};}function patchUpdates(_0x23cacb){return function(_0x4fda94){try{jsonpatch[_0x1908('0x1f')](_0x4fda94,_0x23cacb,!![]);}catch(_0x108fd0){return BPromise[_0x1908('0x20')](_0x108fd0);}return _0x4fda94['save']();};}function saveUpdates(_0x1d18cb,_0x42d8fe){return function(_0x3c9552){if(_0x3c9552){return _0x3c9552['update'](_0x1d18cb)[_0x1908('0x21')](function(_0x1864da){return _0x1864da;});}return null;};}function removeEntity(_0x565f6a,_0x1ca58f){return function(_0x3b6c09){if(_0x3b6c09){return _0x3b6c09['destroy']()[_0x1908('0x21')](function(){_0x565f6a[_0x1908('0x18')](0xcc)[_0x1908('0x19')]();});}};}function handleEntityNotFound(_0x27d664,_0x25e866){return function(_0x14d74c){if(!_0x14d74c){_0x27d664[_0x1908('0x17')](0x194);}return _0x14d74c;};}function handleError(_0x43ba04,_0x4dc745){_0x4dc745=_0x4dc745||0x1f4;return function(_0x38a1d2){logger['error'](_0x38a1d2[_0x1908('0x22')]);if(_0x38a1d2[_0x1908('0x23')]){delete _0x38a1d2[_0x1908('0x23')];}_0x43ba04['status'](_0x4dc745)['send'](_0x38a1d2);};}exports[_0x1908('0x24')]=function(_0x2b1b70,_0x1f667a){var _0x1e202f={'raw':!![],'where':{'id':_0x2b1b70[_0x1908('0x25')]['id']}},_0x1250cc={};_0x1250cc[_0x1908('0x26')]=_[_0x1908('0x27')](db[_0x1908('0x28')][_0x1908('0x29')]);_0x1250cc['query']=_[_0x1908('0x27')](_0x2b1b70[_0x1908('0x2a')]);_0x1250cc[_0x1908('0x2b')]=_[_0x1908('0x2c')](_0x1250cc[_0x1908('0x26')],_0x1250cc['query']);_0x1e202f['attributes']=_[_0x1908('0x2c')](_0x1250cc[_0x1908('0x26')],qs[_0x1908('0x2d')](_0x2b1b70[_0x1908('0x2a')][_0x1908('0x2d')]));_0x1e202f[_0x1908('0x2e')]=_0x1e202f['attributes'][_0x1908('0x2f')]?_0x1e202f[_0x1908('0x2e')]:_0x1250cc['model'];if(_0x2b1b70[_0x1908('0x2a')][_0x1908('0x30')]){_0x1e202f[_0x1908('0x31')]=[{'all':!![]}];}_0x1e202f=_['merge']({},_0x1e202f,_0x2b1b70[_0x1908('0x32')]);return db['ChatApplication'][_0x1908('0x33')](_0x1e202f)[_0x1908('0x21')](handleEntityNotFound(_0x1f667a,null))['then'](respondWithResult(_0x1f667a,null))[_0x1908('0x34')](handleError(_0x1f667a,null));};exports[_0x1908('0x35')]=function(_0x169e16,_0x2643e8){if(_0x169e16[_0x1908('0x36')]['id']){delete _0x169e16[_0x1908('0x36')]['id'];}return db[_0x1908('0x28')][_0x1908('0x33')]({'where':{'id':_0x169e16[_0x1908('0x25')]['id']}})['then'](handleEntityNotFound(_0x2643e8,null))[_0x1908('0x21')](saveUpdates(_0x169e16[_0x1908('0x36')],null))[_0x1908('0x21')](respondWithResult(_0x2643e8,null))[_0x1908('0x34')](handleError(_0x2643e8,null));};exports[_0x1908('0x37')]=function(_0x58a535,_0x5cb0d7){return db[_0x1908('0x28')]['find']({'where':{'id':_0x58a535['params']['id']}})[_0x1908('0x21')](handleEntityNotFound(_0x5cb0d7,null))[_0x1908('0x21')](removeEntity(_0x5cb0d7,null))[_0x1908('0x34')](handleError(_0x5cb0d7,null));};
\ No newline at end of file
index c56deff..3d0f918 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x13c7=['api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./chatApplication.attributes','exports','define','ChatApplication','utf8mb4','utf8mb4_unicode_ci','util'];(function(_0x60b2c7,_0x3e87e4){var _0x7af44a=function(_0x140d1c){while(--_0x140d1c){_0x60b2c7['push'](_0x60b2c7['shift']());}};_0x7af44a(++_0x3e87e4);}(_0x13c7,0x133));var _0x713c=function(_0x4ea4de,_0x59dfb6){_0x4ea4de=_0x4ea4de-0x0;var _0x43e4d3=_0x13c7[_0x4ea4de];return _0x43e4d3;};'use strict';var _=require('lodash');var util=require(_0x713c('0x0'));var logger=require('../../config/logger')(_0x713c('0x1'));var moment=require(_0x713c('0x2'));var BPromise=require(_0x713c('0x3'));var rp=require(_0x713c('0x4'));var fs=require('fs');var path=require(_0x713c('0x5'));var rimraf=require(_0x713c('0x6'));var config=require(_0x713c('0x7'));var attributes=require(_0x713c('0x8'));module[_0x713c('0x9')]=function(_0xf2b637,_0x36631b){return _0xf2b637[_0x713c('0xa')](_0x713c('0xb'),attributes,{'tableName':'chat_applications','paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x713c('0xc'),'collate':_0x713c('0xd')});};
\ No newline at end of file
+var _0x842a=['ChatApplication','chat_applications','utf8mb4','utf8mb4_unicode_ci','../../config/logger','moment','bluebird','request-promise','path','rimraf','../../config/environment','./chatApplication.attributes','exports','define'];(function(_0x307a58,_0x1a6ba6){var _0x2ac2c4=function(_0x52b782){while(--_0x52b782){_0x307a58['push'](_0x307a58['shift']());}};_0x2ac2c4(++_0x1a6ba6);}(_0x842a,0x10e));var _0xa842=function(_0x65c0bb,_0x82e7b8){_0x65c0bb=_0x65c0bb-0x0;var _0x320bd5=_0x842a[_0x65c0bb];return _0x320bd5;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xa842('0x0'))('api');var moment=require(_0xa842('0x1'));var BPromise=require(_0xa842('0x2'));var rp=require(_0xa842('0x3'));var fs=require('fs');var path=require(_0xa842('0x4'));var rimraf=require(_0xa842('0x5'));var config=require(_0xa842('0x6'));var attributes=require(_0xa842('0x7'));module[_0xa842('0x8')]=function(_0x4e7af6,_0x521a21){return _0x4e7af6[_0xa842('0x9')](_0xa842('0xa'),attributes,{'tableName':_0xa842('0xb'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0xa842('0xc'),'collate':_0xa842('0xd')});};
\ No newline at end of file
index 9213355..9f27021 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x24d1=['../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','request\x20sent','debug','ChatApplication,\x20%s,\x20%s,\x20%s','stringify','error','ChatApplication,\x20%s,\x20%s','message','result','catch','lodash','util','moment','randomstring'];(function(_0xdf04c1,_0x272bfc){var _0x58efd9=function(_0x13b128){while(--_0x13b128){_0xdf04c1['push'](_0xdf04c1['shift']());}};_0x58efd9(++_0x272bfc);}(_0x24d1,0x13e));var _0x124d=function(_0x3205a9,_0x112ed7){_0x3205a9=_0x3205a9-0x0;var _0x28eeef=_0x24d1[_0x3205a9];return _0x28eeef;};'use strict';var _=require(_0x124d('0x0'));var util=require(_0x124d('0x1'));var moment=require(_0x124d('0x2'));var BPromise=require('bluebird');var rs=require(_0x124d('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x124d('0x4'))['db'];var utils=require(_0x124d('0x5'));var logger=require(_0x124d('0x6'))(_0x124d('0x7'));var config=require(_0x124d('0x8'));var jayson=require(_0x124d('0x9'));var client=jayson[_0x124d('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0xb60c6b,_0x5b6322,_0x5e0e01){return new BPromise(function(_0x5d1600,_0x10426c){return client[_0x124d('0xb')](_0xb60c6b,_0x5e0e01)[_0x124d('0xc')](function(_0x124f9f){logger[_0x124d('0xd')]('ChatApplication,\x20%s,\x20%s',_0x5b6322,_0x124d('0xe'));logger[_0x124d('0xf')](_0x124d('0x10'),_0x5b6322,_0x124d('0xe'),JSON[_0x124d('0x11')](_0x124f9f));if(_0x124f9f[_0x124d('0x12')]){if(_0x124f9f[_0x124d('0x12')]['code']===0x1f4){logger[_0x124d('0x12')](_0x124d('0x13'),_0x5b6322,_0x124f9f[_0x124d('0x12')][_0x124d('0x14')]);return _0x10426c(_0x124f9f[_0x124d('0x12')][_0x124d('0x14')]);}logger[_0x124d('0x12')](_0x124d('0x13'),_0x5b6322,_0x124f9f['error'][_0x124d('0x14')]);return _0x5d1600(_0x124f9f[_0x124d('0x12')]['message']);}else{logger['info']('ChatApplication,\x20%s,\x20%s',_0x5b6322,'request\x20sent');_0x5d1600(_0x124f9f[_0x124d('0x15')][_0x124d('0x14')]);}})[_0x124d('0x16')](function(_0x4800b8){logger[_0x124d('0x12')](_0x124d('0x13'),_0x5b6322,_0x4800b8);_0x10426c(_0x4800b8);});});}
\ No newline at end of file
+var _0xcbd7=['info','ChatApplication,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','catch','lodash','util','bluebird','randomstring','ioredis','../../config/utils','rpc','../../config/environment','client','request'];(function(_0x59f0ca,_0x237457){var _0x1dccb0=function(_0x3d4ac9){while(--_0x3d4ac9){_0x59f0ca['push'](_0x59f0ca['shift']());}};_0x1dccb0(++_0x237457);}(_0xcbd7,0xaa));var _0x7cbd=function(_0x54c2a8,_0x5cad99){_0x54c2a8=_0x54c2a8-0x0;var _0x28e460=_0xcbd7[_0x54c2a8];return _0x28e460;};'use strict';var _=require(_0x7cbd('0x0'));var util=require(_0x7cbd('0x1'));var moment=require('moment');var BPromise=require(_0x7cbd('0x2'));var rs=require(_0x7cbd('0x3'));var fs=require('fs');var Redis=require(_0x7cbd('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x7cbd('0x5'));var logger=require('../../config/logger')(_0x7cbd('0x6'));var config=require(_0x7cbd('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x7cbd('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x16a56f,_0x84cc55,_0x2e8647){return new BPromise(function(_0x2dbf41,_0x7f8d6c){return client[_0x7cbd('0x9')](_0x16a56f,_0x2e8647)['then'](function(_0x30a8ec){logger[_0x7cbd('0xa')](_0x7cbd('0xb'),_0x84cc55,_0x7cbd('0xc'));logger[_0x7cbd('0xd')]('ChatApplication,\x20%s,\x20%s,\x20%s',_0x84cc55,_0x7cbd('0xc'),JSON[_0x7cbd('0xe')](_0x30a8ec));if(_0x30a8ec['error']){if(_0x30a8ec[_0x7cbd('0xf')]['code']===0x1f4){logger[_0x7cbd('0xf')](_0x7cbd('0xb'),_0x84cc55,_0x30a8ec['error'][_0x7cbd('0x10')]);return _0x7f8d6c(_0x30a8ec[_0x7cbd('0xf')][_0x7cbd('0x10')]);}logger[_0x7cbd('0xf')](_0x7cbd('0xb'),_0x84cc55,_0x30a8ec['error'][_0x7cbd('0x10')]);return _0x2dbf41(_0x30a8ec[_0x7cbd('0xf')]['message']);}else{logger[_0x7cbd('0xa')]('ChatApplication,\x20%s,\x20%s',_0x84cc55,_0x7cbd('0xc'));_0x2dbf41(_0x30a8ec['result'][_0x7cbd('0x10')]);}})[_0x7cbd('0x11')](function(_0x1113c4){logger['error'](_0x7cbd('0xb'),_0x84cc55,_0x1113c4);_0x7f8d6c(_0x1113c4);});});}
\ No newline at end of file
index 7a5b460..c9dfd48 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa6ea=['./chatApplication.controller','get','/:id','isAuthenticated','show','update','delete','destroy','multer','util','path','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x26ed7e,_0x1dc49e){var _0x283907=function(_0xf85e81){while(--_0xf85e81){_0x26ed7e['push'](_0x26ed7e['shift']());}};_0x283907(++_0x1dc49e);}(_0xa6ea,0x1ba));var _0xaa6e=function(_0x267468,_0x598eab){_0x267468=_0x267468-0x0;var _0x32d61f=_0xa6ea[_0x267468];return _0x32d61f;};'use strict';var multer=require(_0xaa6e('0x0'));var util=require(_0xaa6e('0x1'));var path=require(_0xaa6e('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0xaa6e('0x3')]();var auth=require(_0xaa6e('0x4'));var interaction=require(_0xaa6e('0x5'));var config=require('../../config/environment');var controller=require(_0xaa6e('0x6'));router[_0xaa6e('0x7')](_0xaa6e('0x8'),auth[_0xaa6e('0x9')](),controller[_0xaa6e('0xa')]);router['put'](_0xaa6e('0x8'),auth[_0xaa6e('0x9')](),controller[_0xaa6e('0xb')]);router[_0xaa6e('0xc')](_0xaa6e('0x8'),auth['isAuthenticated'](),controller[_0xaa6e('0xd')]);module['exports']=router;
\ No newline at end of file
+var _0x252d=['update','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatApplication.controller','/:id','isAuthenticated','put'];(function(_0x294f21,_0x1db07e){var _0x26decc=function(_0x10abb6){while(--_0x10abb6){_0x294f21['push'](_0x294f21['shift']());}};_0x26decc(++_0x1db07e);}(_0x252d,0x89));var _0xd252=function(_0xe84805,_0x2702d9){_0xe84805=_0xe84805-0x0;var _0x398efd=_0x252d[_0xe84805];return _0x398efd;};'use strict';var multer=require(_0xd252('0x0'));var util=require(_0xd252('0x1'));var path=require(_0xd252('0x2'));var timeout=require(_0xd252('0x3'));var express=require(_0xd252('0x4'));var router=express[_0xd252('0x5')]();var auth=require(_0xd252('0x6'));var interaction=require(_0xd252('0x7'));var config=require(_0xd252('0x8'));var controller=require(_0xd252('0x9'));router['get'](_0xd252('0xa'),auth[_0xd252('0xb')](),controller['show']);router[_0xd252('0xc')](_0xd252('0xa'),auth['isAuthenticated'](),controller[_0xd252('0xd')]);router['delete'](_0xd252('0xa'),auth['isAuthenticated'](),controller['destroy']);module[_0xd252('0xe')]=router;
\ No newline at end of file
index d89aa06..d150947 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5c11=['sequelize','exports','STRING','BOOLEAN'];(function(_0x168654,_0x314d68){var _0x4afda8=function(_0x37c94c){while(--_0x37c94c){_0x168654['push'](_0x168654['shift']());}};_0x4afda8(++_0x314d68);}(_0x5c11,0x1b8));var _0x15c1=function(_0x4fb789,_0x6b8092){_0x4fb789=_0x4fb789-0x0;var _0x49b5e4=_0x5c11[_0x4fb789];return _0x49b5e4;};'use strict';var Sequelize=require(_0x15c1('0x0'));module[_0x15c1('0x1')]={'name':{'type':Sequelize[_0x15c1('0x2')],'allowNull':![]},'description':{'type':Sequelize['STRING']},'write':{'type':Sequelize[_0x15c1('0x3')],'defaultValue':!![]}};
\ No newline at end of file
+var _0xed89=['exports','STRING','BOOLEAN','sequelize'];(function(_0x4fb12a,_0x19caab){var _0x2f49c8=function(_0x1216da){while(--_0x1216da){_0x4fb12a['push'](_0x4fb12a['shift']());}};_0x2f49c8(++_0x19caab);}(_0xed89,0x17b));var _0x9ed8=function(_0x430241,_0x46f153){_0x430241=_0x430241-0x0;var _0x5db5b3=_0xed89[_0x430241];return _0x5db5b3;};'use strict';var Sequelize=require(_0x9ed8('0x0'));module[_0x9ed8('0x1')]={'name':{'type':Sequelize[_0x9ed8('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x9ed8('0x2')]},'write':{'type':Sequelize[_0x9ed8('0x3')],'defaultValue':!![]}};
\ No newline at end of file
index a32d3e9..98709f9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x25fb=['sox','to-csv','lodash','squel','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','jayson/promise','client','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','ChatGroup,\x20%s,\x20%s','request\x20sent','ChatGroup,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','end','json','count','offset','status','set','Content-Range','reject','save','update','destroy','stack','name','send','index','ChatGroup','rawAttributes','model','query','keys','filters','intersection','attributes','fields','limit','order','sort','where','merge','map','type','key','VIRTUAL','field','filter','options','include','findAll','show','params','length','includeAll','find','create','body','describe','getUnread','ChatInternalMessage','toInteger','addMembers','ids','omit','getMembers','User','hasOwnProperty','nolimit','removeMembers','addMessage','ChatGroupId','getMessages','findOne','pick','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x25fb,0x1b2));var _0xb25f=function(_0x2e492e,_0x16fd2b){_0x2e492e=_0x2e492e-0x0;var _0x287bed=_0x25fb[_0x2e492e];return _0x287bed;};'use strict';var pdf=require(_0xb25f('0x0'));var emlformat=require(_0xb25f('0x1'));var rimraf=require(_0xb25f('0x2'));var zipdir=require(_0xb25f('0x3'));var jsonpatch=require(_0xb25f('0x4'));var rp=require(_0xb25f('0x5'));var moment=require(_0xb25f('0x6'));var BPromise=require('bluebird');var Mustache=require(_0xb25f('0x7'));var util=require(_0xb25f('0x8'));var path=require(_0xb25f('0x9'));var sox=require(_0xb25f('0xa'));var csv=require(_0xb25f('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xb25f('0xc'));var squel=require(_0xb25f('0xd'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0xb25f('0xe'));var toCsv=require(_0xb25f('0xb'));var querystring=require(_0xb25f('0xf'));var Papa=require(_0xb25f('0x10'));var Redis=require(_0xb25f('0x11'));var authService=require(_0xb25f('0x12'));var qs=require(_0xb25f('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xb25f('0x14'));var utils=require(_0xb25f('0x15'));var config=require(_0xb25f('0x16'));var db=require(_0xb25f('0x17'))['db'];config[_0xb25f('0x18')]=_[_0xb25f('0x19')](config[_0xb25f('0x18')],{'host':_0xb25f('0x1a'),'port':0x18eb});var socket=require(_0xb25f('0x1b'))(new Redis(config[_0xb25f('0x18')]));require('./chatGroup.socket')['register'](socket);var jayson=require(_0xb25f('0x1c'));var client=jayson[_0xb25f('0x1d')]['http']({'port':0x232a});function checkPasswordPattern(_0x593a35,_0x4186cc,_0x73adbb){if(_0x73adbb){var _0x42b57f=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x42b57f[_0xb25f('0x1e')](_0x4186cc)){return _0x593a35;}else{throw new Error(_0xb25f('0x1f'));}}else{return _0x593a35;}}function respondWithRpcPromise(_0x1a940f,_0x424f60,_0x584bb,_0x51b801){return new BPromise(function(_0x1be353,_0x5c1720){var _0x550139=_0x51b801||client;return _0x550139[_0xb25f('0x20')](_0x1a940f,_0x584bb)[_0xb25f('0x21')](function(_0x2028e9){logger[_0xb25f('0x22')](_0xb25f('0x23'),_0x424f60,_0xb25f('0x24'));logger['debug'](_0xb25f('0x25'),_0x424f60,_0xb25f('0x24'),JSON[_0xb25f('0x26')](_0x2028e9));if(_0x2028e9[_0xb25f('0x27')]){if(_0x2028e9[_0xb25f('0x27')][_0xb25f('0x28')]===0x1f4){logger[_0xb25f('0x27')](_0xb25f('0x23'),_0x424f60,_0x2028e9[_0xb25f('0x27')]['message']);return _0x5c1720(_0x2028e9[_0xb25f('0x27')][_0xb25f('0x29')]);}logger[_0xb25f('0x27')](_0xb25f('0x23'),_0x424f60,_0x2028e9[_0xb25f('0x27')][_0xb25f('0x29')]);return _0x1be353(_0x2028e9[_0xb25f('0x27')][_0xb25f('0x29')]);}else{logger[_0xb25f('0x22')](_0xb25f('0x23'),_0x424f60,_0xb25f('0x24'));_0x1be353(_0x2028e9[_0xb25f('0x2a')][_0xb25f('0x29')]);}})[_0xb25f('0x2b')](function(_0x4609ca){logger[_0xb25f('0x27')](_0xb25f('0x23'),_0x424f60,_0x4609ca);_0x5c1720(_0x4609ca);});});}function respondWithStatusCode(_0x5570d9,_0x2a4185){_0x2a4185=_0x2a4185||0xcc;return function(_0x1fd8e0){if(_0x1fd8e0){return _0x5570d9[_0xb25f('0x2c')](_0x2a4185);}return _0x5570d9['status'](_0x2a4185)[_0xb25f('0x2d')]();};}function respondWithResult(_0x1cd43b,_0x4720fc){_0x4720fc=_0x4720fc||0xc8;return function(_0x193f35){if(_0x193f35){return _0x1cd43b['status'](_0x4720fc)[_0xb25f('0x2e')](_0x193f35);}};}function respondWithFilteredResult(_0x378aca,_0x1df541){return function(_0x5cc93e){if(_0x5cc93e){var _0x261c9c=_0x5cc93e[_0xb25f('0x2f')],_0x7035d8=_0x1df541[_0xb25f('0x30')],_0x3171e1=_0x1df541[_0xb25f('0x30')]+_0x1df541['limit'],_0x1c3283;if(_0x3171e1>=_0x261c9c){_0x3171e1=_0x261c9c;_0x1c3283=0xc8;}else{_0x1c3283=0xce;}_0x378aca[_0xb25f('0x31')](_0x1c3283);return _0x378aca[_0xb25f('0x32')](_0xb25f('0x33'),_0x7035d8+'-'+_0x3171e1+'/'+_0x261c9c)[_0xb25f('0x2e')](_0x5cc93e);}return null;};}function patchUpdates(_0x5e0551){return function(_0x5299e4){try{jsonpatch['apply'](_0x5299e4,_0x5e0551,!![]);}catch(_0x32c441){return BPromise[_0xb25f('0x34')](_0x32c441);}return _0x5299e4[_0xb25f('0x35')]();};}function saveUpdates(_0x44d5ef,_0x5e8c08){return function(_0x2d3eab){if(_0x2d3eab){return _0x2d3eab[_0xb25f('0x36')](_0x44d5ef)[_0xb25f('0x21')](function(_0x41edf5){return _0x41edf5;});}return null;};}function removeEntity(_0x2c9fd2,_0x4fc871){return function(_0xd11f68){if(_0xd11f68){return _0xd11f68[_0xb25f('0x37')]()[_0xb25f('0x21')](function(){_0x2c9fd2[_0xb25f('0x31')](0xcc)[_0xb25f('0x2d')]();});}};}function handleEntityNotFound(_0x5bf4b9,_0x4953a3){return function(_0x1f755f){if(!_0x1f755f){_0x5bf4b9[_0xb25f('0x2c')](0x194);}return _0x1f755f;};}function handleError(_0x3a0d04,_0x3f1bac){_0x3f1bac=_0x3f1bac||0x1f4;return function(_0x4ab1c3){logger[_0xb25f('0x27')](_0x4ab1c3[_0xb25f('0x38')]);if(_0x4ab1c3[_0xb25f('0x39')]){delete _0x4ab1c3[_0xb25f('0x39')];}_0x3a0d04[_0xb25f('0x31')](_0x3f1bac)[_0xb25f('0x3a')](_0x4ab1c3);};}exports[_0xb25f('0x3b')]=function(_0x496895,_0x14ad3b){var _0x1baad6={},_0x27f462={},_0x1b4a05={'count':0x0,'rows':[]};var _0x268f64=db[_0xb25f('0x3c')][_0xb25f('0x3d')];_0x27f462[_0xb25f('0x3e')]=_['keys'](_0x268f64);_0x27f462[_0xb25f('0x3f')]=_[_0xb25f('0x40')](_0x496895['query']);_0x27f462[_0xb25f('0x41')]=_[_0xb25f('0x42')](_0x27f462[_0xb25f('0x3e')],_0x27f462[_0xb25f('0x3f')]);_0x1baad6[_0xb25f('0x43')]=_['intersection'](_0x27f462[_0xb25f('0x3e')],qs['fields'](_0x496895['query'][_0xb25f('0x44')]));_0x1baad6[_0xb25f('0x43')]=_0x1baad6[_0xb25f('0x43')]['length']?_0x1baad6[_0xb25f('0x43')]:_0x27f462[_0xb25f('0x3e')];if(!_0x496895[_0xb25f('0x3f')]['hasOwnProperty']('nolimit')){_0x1baad6[_0xb25f('0x45')]=qs[_0xb25f('0x45')](_0x496895['query'][_0xb25f('0x45')]);_0x1baad6['offset']=qs[_0xb25f('0x30')](_0x496895[_0xb25f('0x3f')][_0xb25f('0x30')]);}_0x1baad6[_0xb25f('0x46')]=qs[_0xb25f('0x47')](_0x496895[_0xb25f('0x3f')][_0xb25f('0x47')]);_0x1baad6[_0xb25f('0x48')]=qs[_0xb25f('0x41')](_['pick'](_0x496895[_0xb25f('0x3f')],_0x27f462[_0xb25f('0x41')]));if(_0x496895[_0xb25f('0x3f')]['filter']){_0x1baad6['where']=_[_0xb25f('0x49')](_0x1baad6[_0xb25f('0x48')],{'$or':_[_0xb25f('0x4a')](_0x268f64,function(_0x547b75){if(_0x547b75[_0xb25f('0x4b')][_0xb25f('0x4c')]!==_0xb25f('0x4d')){var _0x4464c7={};_0x4464c7[_0x547b75[_0xb25f('0x4e')]]={'$like':'%'+_0x496895[_0xb25f('0x3f')][_0xb25f('0x4f')]+'%'};return _0x4464c7;}})});}_0x1baad6=_[_0xb25f('0x49')]({},_0x1baad6,_0x496895[_0xb25f('0x50')]);var _0x2c1f9e={'where':_0x1baad6[_0xb25f('0x48')]};return db[_0xb25f('0x3c')][_0xb25f('0x2f')](_0x2c1f9e)[_0xb25f('0x21')](function(_0x3cb22d){_0x1b4a05[_0xb25f('0x2f')]=_0x3cb22d;if(_0x496895[_0xb25f('0x3f')]['includeAll']){_0x1baad6[_0xb25f('0x51')]=[{'all':!![]}];}return db['ChatGroup'][_0xb25f('0x52')](_0x1baad6);})[_0xb25f('0x21')](function(_0x4b2020){_0x1b4a05['rows']=_0x4b2020;return _0x1b4a05;})[_0xb25f('0x21')](respondWithFilteredResult(_0x14ad3b,_0x1baad6))[_0xb25f('0x2b')](handleError(_0x14ad3b,null));};exports[_0xb25f('0x53')]=function(_0x51ebee,_0x213d74){var _0x2e8101={'raw':!![],'where':{'id':_0x51ebee[_0xb25f('0x54')]['id']}},_0x454541={};_0x454541[_0xb25f('0x3e')]=_[_0xb25f('0x40')](db[_0xb25f('0x3c')][_0xb25f('0x3d')]);_0x454541[_0xb25f('0x3f')]=_['keys'](_0x51ebee[_0xb25f('0x3f')]);_0x454541[_0xb25f('0x41')]=_['intersection'](_0x454541['model'],_0x454541[_0xb25f('0x3f')]);_0x2e8101['attributes']=_[_0xb25f('0x42')](_0x454541[_0xb25f('0x3e')],qs['fields'](_0x51ebee[_0xb25f('0x3f')][_0xb25f('0x44')]));_0x2e8101[_0xb25f('0x43')]=_0x2e8101['attributes'][_0xb25f('0x55')]?_0x2e8101['attributes']:_0x454541[_0xb25f('0x3e')];if(_0x51ebee['query'][_0xb25f('0x56')]){_0x2e8101[_0xb25f('0x51')]=[{'all':!![]}];}_0x2e8101=_['merge']({},_0x2e8101,_0x51ebee['options']);return db[_0xb25f('0x3c')][_0xb25f('0x57')](_0x2e8101)[_0xb25f('0x21')](handleEntityNotFound(_0x213d74,null))['then'](respondWithResult(_0x213d74,null))['catch'](handleError(_0x213d74,null));};exports[_0xb25f('0x58')]=function(_0x4f3d2e,_0x777b2e){return db['ChatGroup'][_0xb25f('0x58')](_0x4f3d2e[_0xb25f('0x59')],{})[_0xb25f('0x21')](respondWithResult(_0x777b2e,0xc9))[_0xb25f('0x2b')](handleError(_0x777b2e,null));};exports[_0xb25f('0x36')]=function(_0xd2095f,_0x2d51ea){if(_0xd2095f['body']['id']){delete _0xd2095f[_0xb25f('0x59')]['id'];}return db[_0xb25f('0x3c')][_0xb25f('0x57')]({'where':{'id':_0xd2095f['params']['id']}})[_0xb25f('0x21')](handleEntityNotFound(_0x2d51ea,null))[_0xb25f('0x21')](saveUpdates(_0xd2095f[_0xb25f('0x59')],null))[_0xb25f('0x21')](respondWithResult(_0x2d51ea,null))[_0xb25f('0x2b')](handleError(_0x2d51ea,null));};exports[_0xb25f('0x37')]=function(_0x3ca601,_0x2fa999){return db['ChatGroup'][_0xb25f('0x57')]({'where':{'id':_0x3ca601[_0xb25f('0x54')]['id']}})['then'](handleEntityNotFound(_0x2fa999,null))[_0xb25f('0x21')](removeEntity(_0x2fa999,null))['catch'](handleError(_0x2fa999,null));};exports[_0xb25f('0x5a')]=function(_0x589225,_0x2974e7){return db['ChatGroup'][_0xb25f('0x5a')]()[_0xb25f('0x21')](respondWithResult(_0x2974e7,null))[_0xb25f('0x2b')](handleError(_0x2974e7,null));};exports[_0xb25f('0x5b')]=function(_0x4570b1,_0x2114fc,_0x302c91){return db[_0xb25f('0x5c')][_0xb25f('0x2f')]({'where':{'ChatGroupId':_0x4570b1[_0xb25f('0x54')]['id'],'ToId':_0x4570b1['user']['id'],'read':![]}})['then'](function(_0x28348b){return{'id':_[_0xb25f('0x5d')](_0x4570b1[_0xb25f('0x54')]['id']),'count':_0x28348b};})[_0xb25f('0x21')](respondWithResult(_0x2114fc,null))[_0xb25f('0x2b')](handleError(_0x2114fc,null));};exports[_0xb25f('0x5e')]=function(_0x204cfe,_0x559b65,_0x3d40c9){return db['ChatGroup'][_0xb25f('0x57')]({'where':{'id':_0x204cfe['params']['id']}})['then'](handleEntityNotFound(_0x559b65,null))[_0xb25f('0x21')](function(_0x5c8664){if(_0x5c8664){return _0x5c8664['addMembers'](_0x204cfe['body'][_0xb25f('0x5f')],_[_0xb25f('0x60')](_0x204cfe[_0xb25f('0x59')],[_0xb25f('0x5f'),'id'])||{});}})[_0xb25f('0x21')](respondWithResult(_0x559b65,null))[_0xb25f('0x2b')](handleError(_0x559b65,null));};exports[_0xb25f('0x61')]=function(_0x4209c9,_0x44ed18,_0x3dc191){var _0x210bbc={};var _0x1a3fe4={};var _0x2ec426;var _0x4fe5f5;return db[_0xb25f('0x3c')]['findOne']({'where':{'id':_0x4209c9['params']['id']}})[_0xb25f('0x21')](handleEntityNotFound(_0x44ed18,null))[_0xb25f('0x21')](function(_0x579f44){if(_0x579f44){_0x2ec426=_0x579f44;_0x1a3fe4[_0xb25f('0x3e')]=_[_0xb25f('0x40')](db[_0xb25f('0x62')][_0xb25f('0x3d')]);_0x1a3fe4['query']=_['keys'](_0x4209c9[_0xb25f('0x3f')]);_0x1a3fe4[_0xb25f('0x41')]=_[_0xb25f('0x42')](_0x1a3fe4[_0xb25f('0x3e')],_0x1a3fe4['query']);_0x210bbc['attributes']=_['intersection'](_0x1a3fe4[_0xb25f('0x3e')],qs['fields'](_0x4209c9[_0xb25f('0x3f')][_0xb25f('0x44')]));_0x210bbc[_0xb25f('0x43')]=_0x210bbc[_0xb25f('0x43')][_0xb25f('0x55')]?_0x210bbc[_0xb25f('0x43')]:_0x1a3fe4[_0xb25f('0x3e')];_0x210bbc[_0xb25f('0x46')]=qs[_0xb25f('0x47')](_0x4209c9[_0xb25f('0x3f')][_0xb25f('0x47')]);_0x210bbc[_0xb25f('0x48')]=qs[_0xb25f('0x41')](_['pick'](_0x4209c9[_0xb25f('0x3f')],_0x1a3fe4[_0xb25f('0x41')]));if(_0x4209c9['query'][_0xb25f('0x4f')]){_0x210bbc[_0xb25f('0x48')]=_[_0xb25f('0x49')](_0x210bbc[_0xb25f('0x48')],{'$or':_[_0xb25f('0x4a')](_0x210bbc[_0xb25f('0x43')],function(_0x1144fb){var _0x41ff2e={};_0x41ff2e[_0x1144fb]={'$like':'%'+_0x4209c9[_0xb25f('0x3f')][_0xb25f('0x4f')]+'%'};return _0x41ff2e;})});}_0x210bbc=_[_0xb25f('0x49')]({},_0x210bbc,_0x4209c9[_0xb25f('0x50')]);return _0x2ec426[_0xb25f('0x61')](_0x210bbc);}})['then'](function(_0x28149f){if(_0x28149f){_0x4fe5f5=_0x28149f['length'];if(!_0x4209c9['query'][_0xb25f('0x63')](_0xb25f('0x64'))){_0x210bbc['limit']=qs[_0xb25f('0x45')](_0x4209c9['query']['limit']);_0x210bbc[_0xb25f('0x30')]=qs[_0xb25f('0x30')](_0x4209c9[_0xb25f('0x3f')][_0xb25f('0x30')]);}return _0x2ec426['getMembers'](_0x210bbc);}})[_0xb25f('0x21')](function(_0x334b6c){if(_0x334b6c){return _0x334b6c?{'count':_0x4fe5f5,'rows':_0x334b6c}:null;}})[_0xb25f('0x21')](respondWithResult(_0x44ed18,null))[_0xb25f('0x2b')](handleError(_0x44ed18,null));};exports[_0xb25f('0x65')]=function(_0x36fc5a,_0x364e37,_0x802827){return db['ChatGroup'][_0xb25f('0x57')]({'where':{'id':_0x36fc5a[_0xb25f('0x54')]['id']}})[_0xb25f('0x21')](handleEntityNotFound(_0x364e37,null))[_0xb25f('0x21')](function(_0xf58c7d){if(_0xf58c7d){return _0xf58c7d[_0xb25f('0x65')](_0x36fc5a[_0xb25f('0x3f')][_0xb25f('0x5f')]);}})[_0xb25f('0x21')](respondWithStatusCode(_0x364e37,null))[_0xb25f('0x2b')](handleError(_0x364e37,null));};exports[_0xb25f('0x66')]=function(_0x295506,_0x1a52d2,_0x29decf){if(_0x295506[_0xb25f('0x59')]['id']){delete _0x295506[_0xb25f('0x59')]['id'];}return db[_0xb25f('0x3c')]['find']({'where':{'id':_0x295506[_0xb25f('0x54')]['id']}})['then'](handleEntityNotFound(_0x1a52d2,null))['then'](function(_0x248c38){if(_0x248c38){_0x295506[_0xb25f('0x59')][_0xb25f('0x67')]=_0x248c38['id'];return db[_0xb25f('0x5c')]['create'](_0x295506[_0xb25f('0x59')]);}})[_0xb25f('0x21')](respondWithResult(_0x1a52d2,null))[_0xb25f('0x2b')](handleError(_0x1a52d2,null));};exports[_0xb25f('0x68')]=function(_0x3b18b0,_0x140e5d,_0x592679){var _0x2a2b15={};var _0x267e07={};var _0x735567;var _0x2eb355;return db['ChatGroup'][_0xb25f('0x69')]({'where':{'id':_0x3b18b0[_0xb25f('0x54')]['id']}})[_0xb25f('0x21')](handleEntityNotFound(_0x140e5d,null))[_0xb25f('0x21')](function(_0x317de8){if(_0x317de8){_0x735567=_0x317de8;_0x267e07['model']=_[_0xb25f('0x40')](db['ChatInternalMessage'][_0xb25f('0x3d')]);_0x267e07[_0xb25f('0x3f')]=_[_0xb25f('0x40')](_0x3b18b0['query']);_0x267e07[_0xb25f('0x41')]=_[_0xb25f('0x42')](_0x267e07[_0xb25f('0x3e')],_0x267e07['query']);_0x2a2b15[_0xb25f('0x43')]=_['intersection'](_0x267e07['model'],qs[_0xb25f('0x44')](_0x3b18b0[_0xb25f('0x3f')]['fields']));_0x2a2b15['attributes']=_0x2a2b15[_0xb25f('0x43')][_0xb25f('0x55')]?_0x2a2b15[_0xb25f('0x43')]:_0x267e07['model'];_0x2a2b15['order']=qs['sort'](_0x3b18b0['query'][_0xb25f('0x47')]);_0x2a2b15[_0xb25f('0x48')]=qs[_0xb25f('0x41')](_[_0xb25f('0x6a')](_0x3b18b0['query'],_0x267e07['filters']));if(_0x3b18b0[_0xb25f('0x3f')]['filter']){_0x2a2b15[_0xb25f('0x48')]=_[_0xb25f('0x49')](_0x2a2b15[_0xb25f('0x48')],{'$or':_[_0xb25f('0x4a')](_0x2a2b15[_0xb25f('0x43')],function(_0x588651){var _0x1bb89d={};_0x1bb89d[_0x588651]={'$like':'%'+_0x3b18b0[_0xb25f('0x3f')][_0xb25f('0x4f')]+'%'};return _0x1bb89d;})});}if(_0x3b18b0['query'][_0xb25f('0x6b')]){var _0x107232=_0x3b18b0[_0xb25f('0x3f')][_0xb25f('0x6b')][_0xb25f('0x6c')](',');var _0x26d3ff={};_0x26d3ff[_0x107232[0x0]]={'$gte':moment(_0x107232[0x1])[_0xb25f('0x6d')](_0xb25f('0x6e'))};_0x2a2b15['where']=_[_0xb25f('0x49')](_0x2a2b15['where'],_0x26d3ff);}_0x2a2b15=_[_0xb25f('0x49')]({},_0x2a2b15,_0x3b18b0[_0xb25f('0x50')]);return _0x735567[_0xb25f('0x68')](_0x2a2b15);}})[_0xb25f('0x21')](function(_0x5b9235){if(_0x5b9235){_0x2eb355=_0x5b9235[_0xb25f('0x55')];if(!_0x3b18b0[_0xb25f('0x3f')]['hasOwnProperty'](_0xb25f('0x64'))){_0x2a2b15[_0xb25f('0x45')]=qs[_0xb25f('0x45')](_0x3b18b0['query'][_0xb25f('0x45')]);_0x2a2b15['offset']=qs[_0xb25f('0x30')](_0x3b18b0[_0xb25f('0x3f')][_0xb25f('0x30')]);}return _0x735567[_0xb25f('0x68')](_0x2a2b15);}})[_0xb25f('0x21')](function(_0x3e68f8){if(_0x3e68f8){return _0x3e68f8?{'count':_0x2eb355,'rows':_0x3e68f8}:null;}})[_0xb25f('0x21')](respondWithResult(_0x140e5d,null))[_0xb25f('0x2b')](handleError(_0x140e5d,null));};
\ No newline at end of file
+var _0x383d=['show','params','includeAll','create','body','find','describe','getUnread','ChatInternalMessage','user','addMembers','ids','omit','findOne','map','nolimit','getMembers','removeMembers','addMessage','ChatGroupId','getMessages','$gte','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','path','ejs','lodash','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','defaults','redis','localhost','socket.io-emitter','./chatGroup.socket','register','jayson/promise','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','ChatGroup,\x20%s,\x20%s','debug','ChatGroup,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','result','catch','sendStatus','status','end','json','count','offset','limit','set','apply','save','update','destroy','stack','name','send','ChatGroup','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','pick','filters','filter','merge','type','key','field','options','include','findAll','rows'];(function(_0x1aa9e7,_0x37f064){var _0x45039d=function(_0x5873d5){while(--_0x5873d5){_0x1aa9e7['push'](_0x1aa9e7['shift']());}};_0x45039d(++_0x37f064);}(_0x383d,0xe4));var _0xd383=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x383d[_0x14add3];return _0x4a174f;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xd383('0x0'));var rimraf=require(_0xd383('0x1'));var zipdir=require(_0xd383('0x2'));var jsonpatch=require(_0xd383('0x3'));var rp=require(_0xd383('0x4'));var moment=require(_0xd383('0x5'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0xd383('0x6'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xd383('0x7'));var fs=require('fs');var _=require(_0xd383('0x8'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xd383('0x9'));var querystring=require(_0xd383('0xa'));var Papa=require(_0xd383('0xb'));var Redis=require(_0xd383('0xc'));var authService=require(_0xd383('0xd'));var qs=require(_0xd383('0xe'));var hardwareService=require(_0xd383('0xf'));var logger=require(_0xd383('0x10'))('api');var utils=require(_0xd383('0x11'));var config=require('../../config/environment');var db=require(_0xd383('0x12'))['db'];config['redis']=_[_0xd383('0x13')](config[_0xd383('0x14')],{'host':_0xd383('0x15'),'port':0x18eb});var socket=require(_0xd383('0x16'))(new Redis(config[_0xd383('0x14')]));require(_0xd383('0x17'))[_0xd383('0x18')](socket);var jayson=require(_0xd383('0x19'));var client=jayson['client'][_0xd383('0x1a')]({'port':0x232a});function checkPasswordPattern(_0x575be0,_0x172e1d,_0x1a47bc){if(_0x1a47bc){var _0xbfbd10=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0xbfbd10[_0xd383('0x1b')](_0x172e1d)){return _0x575be0;}else{throw new Error(_0xd383('0x1c'));}}else{return _0x575be0;}}function respondWithRpcPromise(_0x4d8e86,_0x163533,_0x5376c0,_0x5656b4){return new BPromise(function(_0x1a19b8,_0x1b1b11){var _0x323402=_0x5656b4||client;return _0x323402[_0xd383('0x1d')](_0x4d8e86,_0x5376c0)[_0xd383('0x1e')](function(_0x227706){logger['info'](_0xd383('0x1f'),_0x163533,'request\x20sent');logger[_0xd383('0x20')](_0xd383('0x21'),_0x163533,_0xd383('0x22'),JSON[_0xd383('0x23')](_0x227706));if(_0x227706[_0xd383('0x24')]){if(_0x227706[_0xd383('0x24')][_0xd383('0x25')]===0x1f4){logger[_0xd383('0x24')](_0xd383('0x1f'),_0x163533,_0x227706[_0xd383('0x24')]['message']);return _0x1b1b11(_0x227706[_0xd383('0x24')][_0xd383('0x26')]);}logger[_0xd383('0x24')](_0xd383('0x1f'),_0x163533,_0x227706[_0xd383('0x24')][_0xd383('0x26')]);return _0x1a19b8(_0x227706[_0xd383('0x24')][_0xd383('0x26')]);}else{logger[_0xd383('0x27')](_0xd383('0x1f'),_0x163533,_0xd383('0x22'));_0x1a19b8(_0x227706[_0xd383('0x28')][_0xd383('0x26')]);}})[_0xd383('0x29')](function(_0x37a494){logger['error']('ChatGroup,\x20%s,\x20%s',_0x163533,_0x37a494);_0x1b1b11(_0x37a494);});});}function respondWithStatusCode(_0x142f4a,_0x1b20cc){_0x1b20cc=_0x1b20cc||0xcc;return function(_0x5f1571){if(_0x5f1571){return _0x142f4a[_0xd383('0x2a')](_0x1b20cc);}return _0x142f4a[_0xd383('0x2b')](_0x1b20cc)[_0xd383('0x2c')]();};}function respondWithResult(_0x47071d,_0xf1fdd9){_0xf1fdd9=_0xf1fdd9||0xc8;return function(_0x500028){if(_0x500028){return _0x47071d[_0xd383('0x2b')](_0xf1fdd9)[_0xd383('0x2d')](_0x500028);}};}function respondWithFilteredResult(_0x1e5a66,_0x344831){return function(_0x31c739){if(_0x31c739){var _0x3421bd=_0x31c739[_0xd383('0x2e')],_0x479163=_0x344831[_0xd383('0x2f')],_0x11c5ec=_0x344831[_0xd383('0x2f')]+_0x344831[_0xd383('0x30')],_0x208a8c;if(_0x11c5ec>=_0x3421bd){_0x11c5ec=_0x3421bd;_0x208a8c=0xc8;}else{_0x208a8c=0xce;}_0x1e5a66[_0xd383('0x2b')](_0x208a8c);return _0x1e5a66[_0xd383('0x31')]('Content-Range',_0x479163+'-'+_0x11c5ec+'/'+_0x3421bd)[_0xd383('0x2d')](_0x31c739);}return null;};}function patchUpdates(_0x3cd6a1){return function(_0x4de576){try{jsonpatch[_0xd383('0x32')](_0x4de576,_0x3cd6a1,!![]);}catch(_0x293c7f){return BPromise['reject'](_0x293c7f);}return _0x4de576[_0xd383('0x33')]();};}function saveUpdates(_0x4c22e4,_0x2acee1){return function(_0x458847){if(_0x458847){return _0x458847[_0xd383('0x34')](_0x4c22e4)[_0xd383('0x1e')](function(_0x1b9568){return _0x1b9568;});}return null;};}function removeEntity(_0x4051a7,_0x554343){return function(_0x402edb){if(_0x402edb){return _0x402edb[_0xd383('0x35')]()['then'](function(){_0x4051a7[_0xd383('0x2b')](0xcc)[_0xd383('0x2c')]();});}};}function handleEntityNotFound(_0x380c86,_0x25ab5f){return function(_0x5e0ff3){if(!_0x5e0ff3){_0x380c86['sendStatus'](0x194);}return _0x5e0ff3;};}function handleError(_0x96a232,_0x5a7812){_0x5a7812=_0x5a7812||0x1f4;return function(_0x41a100){logger[_0xd383('0x24')](_0x41a100[_0xd383('0x36')]);if(_0x41a100[_0xd383('0x37')]){delete _0x41a100[_0xd383('0x37')];}_0x96a232[_0xd383('0x2b')](_0x5a7812)[_0xd383('0x38')](_0x41a100);};}exports['index']=function(_0x416c50,_0x180c02){var _0x27d3c6={},_0x509fa3={},_0x2c513c={'count':0x0,'rows':[]};var _0x3a1c41=db[_0xd383('0x39')][_0xd383('0x3a')];_0x509fa3[_0xd383('0x3b')]=_[_0xd383('0x3c')](_0x3a1c41);_0x509fa3[_0xd383('0x3d')]=_['keys'](_0x416c50[_0xd383('0x3d')]);_0x509fa3['filters']=_[_0xd383('0x3e')](_0x509fa3[_0xd383('0x3b')],_0x509fa3[_0xd383('0x3d')]);_0x27d3c6[_0xd383('0x3f')]=_['intersection'](_0x509fa3[_0xd383('0x3b')],qs[_0xd383('0x40')](_0x416c50[_0xd383('0x3d')][_0xd383('0x40')]));_0x27d3c6[_0xd383('0x3f')]=_0x27d3c6[_0xd383('0x3f')][_0xd383('0x41')]?_0x27d3c6[_0xd383('0x3f')]:_0x509fa3[_0xd383('0x3b')];if(!_0x416c50['query'][_0xd383('0x42')]('nolimit')){_0x27d3c6['limit']=qs[_0xd383('0x30')](_0x416c50['query'][_0xd383('0x30')]);_0x27d3c6['offset']=qs[_0xd383('0x2f')](_0x416c50['query'][_0xd383('0x2f')]);}_0x27d3c6[_0xd383('0x43')]=qs[_0xd383('0x44')](_0x416c50[_0xd383('0x3d')][_0xd383('0x44')]);_0x27d3c6[_0xd383('0x45')]=qs['filters'](_[_0xd383('0x46')](_0x416c50[_0xd383('0x3d')],_0x509fa3[_0xd383('0x47')]));if(_0x416c50['query'][_0xd383('0x48')]){_0x27d3c6['where']=_[_0xd383('0x49')](_0x27d3c6[_0xd383('0x45')],{'$or':_['map'](_0x3a1c41,function(_0x3c6f29){if(_0x3c6f29[_0xd383('0x4a')][_0xd383('0x4b')]!=='VIRTUAL'){var _0x420aa8={};_0x420aa8[_0x3c6f29[_0xd383('0x4c')]]={'$like':'%'+_0x416c50['query'][_0xd383('0x48')]+'%'};return _0x420aa8;}})});}_0x27d3c6=_[_0xd383('0x49')]({},_0x27d3c6,_0x416c50[_0xd383('0x4d')]);var _0x2d4949={'where':_0x27d3c6[_0xd383('0x45')]};return db['ChatGroup']['count'](_0x2d4949)[_0xd383('0x1e')](function(_0x5503d4){_0x2c513c[_0xd383('0x2e')]=_0x5503d4;if(_0x416c50[_0xd383('0x3d')]['includeAll']){_0x27d3c6[_0xd383('0x4e')]=[{'all':!![]}];}return db[_0xd383('0x39')][_0xd383('0x4f')](_0x27d3c6);})[_0xd383('0x1e')](function(_0x56081b){_0x2c513c[_0xd383('0x50')]=_0x56081b;return _0x2c513c;})[_0xd383('0x1e')](respondWithFilteredResult(_0x180c02,_0x27d3c6))[_0xd383('0x29')](handleError(_0x180c02,null));};exports[_0xd383('0x51')]=function(_0xca9776,_0x4398d8){var _0x4d1292={'raw':!![],'where':{'id':_0xca9776[_0xd383('0x52')]['id']}},_0x282848={};_0x282848['model']=_[_0xd383('0x3c')](db[_0xd383('0x39')]['rawAttributes']);_0x282848[_0xd383('0x3d')]=_['keys'](_0xca9776[_0xd383('0x3d')]);_0x282848[_0xd383('0x47')]=_[_0xd383('0x3e')](_0x282848[_0xd383('0x3b')],_0x282848[_0xd383('0x3d')]);_0x4d1292['attributes']=_['intersection'](_0x282848['model'],qs[_0xd383('0x40')](_0xca9776['query']['fields']));_0x4d1292['attributes']=_0x4d1292['attributes'][_0xd383('0x41')]?_0x4d1292[_0xd383('0x3f')]:_0x282848['model'];if(_0xca9776[_0xd383('0x3d')][_0xd383('0x53')]){_0x4d1292[_0xd383('0x4e')]=[{'all':!![]}];}_0x4d1292=_[_0xd383('0x49')]({},_0x4d1292,_0xca9776[_0xd383('0x4d')]);return db['ChatGroup']['find'](_0x4d1292)[_0xd383('0x1e')](handleEntityNotFound(_0x4398d8,null))[_0xd383('0x1e')](respondWithResult(_0x4398d8,null))[_0xd383('0x29')](handleError(_0x4398d8,null));};exports[_0xd383('0x54')]=function(_0xe8eb11,_0x3ddeff){return db[_0xd383('0x39')][_0xd383('0x54')](_0xe8eb11['body'],{})['then'](respondWithResult(_0x3ddeff,0xc9))[_0xd383('0x29')](handleError(_0x3ddeff,null));};exports['update']=function(_0x4e9467,_0x2127d6){if(_0x4e9467[_0xd383('0x55')]['id']){delete _0x4e9467[_0xd383('0x55')]['id'];}return db[_0xd383('0x39')]['find']({'where':{'id':_0x4e9467[_0xd383('0x52')]['id']}})[_0xd383('0x1e')](handleEntityNotFound(_0x2127d6,null))[_0xd383('0x1e')](saveUpdates(_0x4e9467[_0xd383('0x55')],null))[_0xd383('0x1e')](respondWithResult(_0x2127d6,null))['catch'](handleError(_0x2127d6,null));};exports[_0xd383('0x35')]=function(_0xe6683d,_0xa8ab00){return db['ChatGroup'][_0xd383('0x56')]({'where':{'id':_0xe6683d[_0xd383('0x52')]['id']}})[_0xd383('0x1e')](handleEntityNotFound(_0xa8ab00,null))['then'](removeEntity(_0xa8ab00,null))[_0xd383('0x29')](handleError(_0xa8ab00,null));};exports[_0xd383('0x57')]=function(_0x18a8a2,_0x3c7834){return db['ChatGroup']['describe']()[_0xd383('0x1e')](respondWithResult(_0x3c7834,null))[_0xd383('0x29')](handleError(_0x3c7834,null));};exports[_0xd383('0x58')]=function(_0x384fee,_0x120070,_0x1db0b6){return db[_0xd383('0x59')][_0xd383('0x2e')]({'where':{'ChatGroupId':_0x384fee[_0xd383('0x52')]['id'],'ToId':_0x384fee[_0xd383('0x5a')]['id'],'read':![]}})[_0xd383('0x1e')](function(_0xd77eb1){return{'id':_['toInteger'](_0x384fee[_0xd383('0x52')]['id']),'count':_0xd77eb1};})['then'](respondWithResult(_0x120070,null))[_0xd383('0x29')](handleError(_0x120070,null));};exports[_0xd383('0x5b')]=function(_0x31c7a0,_0xfef609,_0x279200){return db[_0xd383('0x39')]['find']({'where':{'id':_0x31c7a0[_0xd383('0x52')]['id']}})['then'](handleEntityNotFound(_0xfef609,null))['then'](function(_0x459844){if(_0x459844){return _0x459844[_0xd383('0x5b')](_0x31c7a0['body'][_0xd383('0x5c')],_[_0xd383('0x5d')](_0x31c7a0['body'],['ids','id'])||{});}})[_0xd383('0x1e')](respondWithResult(_0xfef609,null))[_0xd383('0x29')](handleError(_0xfef609,null));};exports['getMembers']=function(_0x156a4a,_0x52eb44,_0x1f202b){var _0x358777={};var _0x7a5c61={};var _0x173b41;var _0x26d120;return db[_0xd383('0x39')][_0xd383('0x5e')]({'where':{'id':_0x156a4a[_0xd383('0x52')]['id']}})[_0xd383('0x1e')](handleEntityNotFound(_0x52eb44,null))[_0xd383('0x1e')](function(_0x190825){if(_0x190825){_0x173b41=_0x190825;_0x7a5c61[_0xd383('0x3b')]=_[_0xd383('0x3c')](db['User'][_0xd383('0x3a')]);_0x7a5c61['query']=_['keys'](_0x156a4a[_0xd383('0x3d')]);_0x7a5c61[_0xd383('0x47')]=_['intersection'](_0x7a5c61[_0xd383('0x3b')],_0x7a5c61[_0xd383('0x3d')]);_0x358777[_0xd383('0x3f')]=_[_0xd383('0x3e')](_0x7a5c61['model'],qs[_0xd383('0x40')](_0x156a4a[_0xd383('0x3d')][_0xd383('0x40')]));_0x358777['attributes']=_0x358777[_0xd383('0x3f')][_0xd383('0x41')]?_0x358777[_0xd383('0x3f')]:_0x7a5c61[_0xd383('0x3b')];_0x358777['order']=qs[_0xd383('0x44')](_0x156a4a[_0xd383('0x3d')][_0xd383('0x44')]);_0x358777['where']=qs[_0xd383('0x47')](_[_0xd383('0x46')](_0x156a4a[_0xd383('0x3d')],_0x7a5c61[_0xd383('0x47')]));if(_0x156a4a[_0xd383('0x3d')]['filter']){_0x358777[_0xd383('0x45')]=_[_0xd383('0x49')](_0x358777[_0xd383('0x45')],{'$or':_[_0xd383('0x5f')](_0x358777[_0xd383('0x3f')],function(_0x42ccb1){var _0x59b65b={};_0x59b65b[_0x42ccb1]={'$like':'%'+_0x156a4a['query'][_0xd383('0x48')]+'%'};return _0x59b65b;})});}_0x358777=_['merge']({},_0x358777,_0x156a4a[_0xd383('0x4d')]);return _0x173b41['getMembers'](_0x358777);}})[_0xd383('0x1e')](function(_0x16592b){if(_0x16592b){_0x26d120=_0x16592b[_0xd383('0x41')];if(!_0x156a4a[_0xd383('0x3d')][_0xd383('0x42')](_0xd383('0x60'))){_0x358777['limit']=qs['limit'](_0x156a4a[_0xd383('0x3d')][_0xd383('0x30')]);_0x358777['offset']=qs[_0xd383('0x2f')](_0x156a4a[_0xd383('0x3d')]['offset']);}return _0x173b41[_0xd383('0x61')](_0x358777);}})[_0xd383('0x1e')](function(_0x48f65a){if(_0x48f65a){return _0x48f65a?{'count':_0x26d120,'rows':_0x48f65a}:null;}})[_0xd383('0x1e')](respondWithResult(_0x52eb44,null))[_0xd383('0x29')](handleError(_0x52eb44,null));};exports['removeMembers']=function(_0x1df503,_0xcab086,_0x27519c){return db[_0xd383('0x39')][_0xd383('0x56')]({'where':{'id':_0x1df503[_0xd383('0x52')]['id']}})[_0xd383('0x1e')](handleEntityNotFound(_0xcab086,null))[_0xd383('0x1e')](function(_0x4aa95f){if(_0x4aa95f){return _0x4aa95f[_0xd383('0x62')](_0x1df503[_0xd383('0x3d')]['ids']);}})['then'](respondWithStatusCode(_0xcab086,null))[_0xd383('0x29')](handleError(_0xcab086,null));};exports[_0xd383('0x63')]=function(_0x23c8d1,_0x244635,_0x58ead4){if(_0x23c8d1[_0xd383('0x55')]['id']){delete _0x23c8d1[_0xd383('0x55')]['id'];}return db[_0xd383('0x39')][_0xd383('0x56')]({'where':{'id':_0x23c8d1[_0xd383('0x52')]['id']}})[_0xd383('0x1e')](handleEntityNotFound(_0x244635,null))[_0xd383('0x1e')](function(_0x4eb6b4){if(_0x4eb6b4){_0x23c8d1['body'][_0xd383('0x64')]=_0x4eb6b4['id'];return db['ChatInternalMessage']['create'](_0x23c8d1[_0xd383('0x55')]);}})[_0xd383('0x1e')](respondWithResult(_0x244635,null))[_0xd383('0x29')](handleError(_0x244635,null));};exports[_0xd383('0x65')]=function(_0x114227,_0x5df3ce,_0x1afae0){var _0x1cde55={};var _0x1be45c={};var _0x382d3e;var _0x2882c4;return db[_0xd383('0x39')]['findOne']({'where':{'id':_0x114227[_0xd383('0x52')]['id']}})[_0xd383('0x1e')](handleEntityNotFound(_0x5df3ce,null))[_0xd383('0x1e')](function(_0x1e2e8f){if(_0x1e2e8f){_0x382d3e=_0x1e2e8f;_0x1be45c[_0xd383('0x3b')]=_[_0xd383('0x3c')](db[_0xd383('0x59')]['rawAttributes']);_0x1be45c['query']=_[_0xd383('0x3c')](_0x114227[_0xd383('0x3d')]);_0x1be45c['filters']=_['intersection'](_0x1be45c['model'],_0x1be45c[_0xd383('0x3d')]);_0x1cde55['attributes']=_[_0xd383('0x3e')](_0x1be45c[_0xd383('0x3b')],qs['fields'](_0x114227[_0xd383('0x3d')][_0xd383('0x40')]));_0x1cde55['attributes']=_0x1cde55[_0xd383('0x3f')][_0xd383('0x41')]?_0x1cde55[_0xd383('0x3f')]:_0x1be45c['model'];_0x1cde55[_0xd383('0x43')]=qs[_0xd383('0x44')](_0x114227['query']['sort']);_0x1cde55[_0xd383('0x45')]=qs['filters'](_[_0xd383('0x46')](_0x114227[_0xd383('0x3d')],_0x1be45c[_0xd383('0x47')]));if(_0x114227[_0xd383('0x3d')]['filter']){_0x1cde55['where']=_[_0xd383('0x49')](_0x1cde55[_0xd383('0x45')],{'$or':_[_0xd383('0x5f')](_0x1cde55[_0xd383('0x3f')],function(_0x1c329b){var _0x35943f={};_0x35943f[_0x1c329b]={'$like':'%'+_0x114227[_0xd383('0x3d')]['filter']+'%'};return _0x35943f;})});}if(_0x114227[_0xd383('0x3d')][_0xd383('0x66')]){var _0x7ae517=_0x114227[_0xd383('0x3d')][_0xd383('0x66')]['split'](',');var _0x49f6c2={};_0x49f6c2[_0x7ae517[0x0]]={'$gte':moment(_0x7ae517[0x1])['format']('YYYY-MM-DD\x20HH:mm:ss')};_0x1cde55[_0xd383('0x45')]=_[_0xd383('0x49')](_0x1cde55[_0xd383('0x45')],_0x49f6c2);}_0x1cde55=_[_0xd383('0x49')]({},_0x1cde55,_0x114227[_0xd383('0x4d')]);return _0x382d3e['getMessages'](_0x1cde55);}})[_0xd383('0x1e')](function(_0x459705){if(_0x459705){_0x2882c4=_0x459705['length'];if(!_0x114227[_0xd383('0x3d')]['hasOwnProperty'](_0xd383('0x60'))){_0x1cde55[_0xd383('0x30')]=qs[_0xd383('0x30')](_0x114227[_0xd383('0x3d')][_0xd383('0x30')]);_0x1cde55[_0xd383('0x2f')]=qs['offset'](_0x114227['query'][_0xd383('0x2f')]);}return _0x382d3e[_0xd383('0x65')](_0x1cde55);}})[_0xd383('0x1e')](function(_0xc73b60){if(_0xc73b60){return _0xc73b60?{'count':_0x2882c4,'rows':_0xc73b60}:null;}})[_0xd383('0x1e')](respondWithResult(_0x5df3ce,null))[_0xd383('0x29')](handleError(_0x5df3ce,null));};
\ No newline at end of file
index 2961eba..ef8a5c4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5b2c=['save','update','remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','ChatGroup'];(function(_0x232312,_0x49271a){var _0x265db1=function(_0xd9e41f){while(--_0xd9e41f){_0x232312['push'](_0x232312['shift']());}};_0x265db1(++_0x49271a);}(_0x5b2c,0xa7));var _0xc5b2=function(_0x43b1d5,_0xc75c8){_0x43b1d5=_0x43b1d5-0x0;var _0x574474=_0x5b2c[_0x43b1d5];return _0x574474;};'use strict';var EventEmitter=require(_0xc5b2('0x0'));var ChatGroup=require(_0xc5b2('0x1'))['db'][_0xc5b2('0x2')];var ChatGroupEvents=new EventEmitter();ChatGroupEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xc5b2('0x3'),'afterUpdate':_0xc5b2('0x4'),'afterDestroy':_0xc5b2('0x5')};function emitEvent(_0x412517){return function(_0x1c7e3c,_0x101c95,_0x1d75ea){ChatGroupEvents['emit'](_0x412517+':'+_0x1c7e3c['id'],_0x1c7e3c);ChatGroupEvents[_0xc5b2('0x6')](_0x412517,_0x1c7e3c);_0x1d75ea(null);};}for(var e in events){if(events[_0xc5b2('0x7')](e)){var event=events[e];ChatGroup[_0xc5b2('0x8')](e,emitEvent(event));}}module[_0xc5b2('0x9')]=ChatGroupEvents;
\ No newline at end of file
+var _0x7c56=['exports','events','../../mysqldb','ChatGroup','setMaxListeners','update','remove','emit'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x7c56,0x1c1));var _0x67c5=function(_0x516624,_0xa45106){_0x516624=_0x516624-0x0;var _0x47f2b4=_0x7c56[_0x516624];return _0x47f2b4;};'use strict';var EventEmitter=require(_0x67c5('0x0'));var ChatGroup=require(_0x67c5('0x1'))['db'][_0x67c5('0x2')];var ChatGroupEvents=new EventEmitter();ChatGroupEvents[_0x67c5('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x67c5('0x4'),'afterDestroy':_0x67c5('0x5')};function emitEvent(_0x1cd457){return function(_0x2680f8,_0x56ab99,_0x4e6bd3){ChatGroupEvents[_0x67c5('0x6')](_0x1cd457+':'+_0x2680f8['id'],_0x2680f8);ChatGroupEvents[_0x67c5('0x6')](_0x1cd457,_0x2680f8);_0x4e6bd3(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];ChatGroup['hook'](e,emitEvent(event));}}module[_0x67c5('0x7')]=ChatGroupEvents;
\ No newline at end of file
index edebda2..8fafc5a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd061=['path','./chatGroup.attributes','exports','define','ChatGroup','chat_groups','lodash','util','../../config/logger','moment','bluebird','request-promise'];(function(_0x4f1b8e,_0x2bd8e4){var _0x411ca6=function(_0x2d1769){while(--_0x2d1769){_0x4f1b8e['push'](_0x4f1b8e['shift']());}};_0x411ca6(++_0x2bd8e4);}(_0xd061,0x17a));var _0x1d06=function(_0x1d9cb2,_0x1dc3b3){_0x1d9cb2=_0x1d9cb2-0x0;var _0x1217c7=_0xd061[_0x1d9cb2];return _0x1217c7;};'use strict';var _=require(_0x1d06('0x0'));var util=require(_0x1d06('0x1'));var logger=require(_0x1d06('0x2'))('api');var moment=require(_0x1d06('0x3'));var BPromise=require(_0x1d06('0x4'));var rp=require(_0x1d06('0x5'));var fs=require('fs');var path=require(_0x1d06('0x6'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x1d06('0x7'));module[_0x1d06('0x8')]=function(_0x160645,_0x5b5c9a){return _0x160645[_0x1d06('0x9')](_0x1d06('0xa'),attributes,{'tableName':_0x1d06('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x9b08=['api','bluebird','request-promise','path','rimraf','../../config/environment','./chatGroup.attributes','exports','define','chat_groups','lodash','util','../../config/logger'];(function(_0x14017d,_0x346fdf){var _0x37d4aa=function(_0x3112a8){while(--_0x3112a8){_0x14017d['push'](_0x14017d['shift']());}};_0x37d4aa(++_0x346fdf);}(_0x9b08,0x176));var _0x89b0=function(_0x172133,_0x10246b){_0x172133=_0x172133-0x0;var _0x2460e5=_0x9b08[_0x172133];return _0x2460e5;};'use strict';var _=require(_0x89b0('0x0'));var util=require(_0x89b0('0x1'));var logger=require(_0x89b0('0x2'))(_0x89b0('0x3'));var moment=require('moment');var BPromise=require(_0x89b0('0x4'));var rp=require(_0x89b0('0x5'));var fs=require('fs');var path=require(_0x89b0('0x6'));var rimraf=require(_0x89b0('0x7'));var config=require(_0x89b0('0x8'));var attributes=require(_0x89b0('0x9'));module[_0x89b0('0xa')]=function(_0x42ad7e,_0x310696){return _0x42ad7e[_0x89b0('0xb')]('ChatGroup',attributes,{'tableName':_0x89b0('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a47e928..e41b5cb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeec6=['localhost','socket.io-emitter','./chatGroup.socket','register','request','info','request\x20sent','debug','ChatGroup,\x20%s,\x20%s,\x20%s','stringify','error','code','ChatGroup,\x20%s,\x20%s','message','result','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','defaults','redis'];(function(_0x462e91,_0x2f0aba){var _0x1abd29=function(_0x2da607){while(--_0x2da607){_0x462e91['push'](_0x462e91['shift']());}};_0x1abd29(++_0x2f0aba);}(_0xeec6,0x1c2));var _0x6eec=function(_0x31cb5f,_0x2df766){_0x31cb5f=_0x31cb5f-0x0;var _0x586042=_0xeec6[_0x31cb5f];return _0x586042;};'use strict';var _=require(_0x6eec('0x0'));var util=require(_0x6eec('0x1'));var moment=require(_0x6eec('0x2'));var BPromise=require(_0x6eec('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x6eec('0x4'));var db=require(_0x6eec('0x5'))['db'];var utils=require(_0x6eec('0x6'));var logger=require(_0x6eec('0x7'))(_0x6eec('0x8'));var config=require(_0x6eec('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x6eec('0xa')][_0x6eec('0xb')]({'port':0x232a});config['redis']=_[_0x6eec('0xc')](config[_0x6eec('0xd')],{'host':_0x6eec('0xe'),'port':0x18eb});var socket=require(_0x6eec('0xf'))(new Redis(config['redis']));require(_0x6eec('0x10'))[_0x6eec('0x11')](socket);function respondWithRpcPromise(_0x1c774d,_0x49ad4c,_0x595dd4){return new BPromise(function(_0x5e8aba,_0x295cae){return client[_0x6eec('0x12')](_0x1c774d,_0x595dd4)['then'](function(_0x4b8de1){logger[_0x6eec('0x13')]('ChatGroup,\x20%s,\x20%s',_0x49ad4c,_0x6eec('0x14'));logger[_0x6eec('0x15')](_0x6eec('0x16'),_0x49ad4c,_0x6eec('0x14'),JSON[_0x6eec('0x17')](_0x4b8de1));if(_0x4b8de1['error']){if(_0x4b8de1[_0x6eec('0x18')][_0x6eec('0x19')]===0x1f4){logger[_0x6eec('0x18')](_0x6eec('0x1a'),_0x49ad4c,_0x4b8de1[_0x6eec('0x18')][_0x6eec('0x1b')]);return _0x295cae(_0x4b8de1[_0x6eec('0x18')][_0x6eec('0x1b')]);}logger[_0x6eec('0x18')](_0x6eec('0x1a'),_0x49ad4c,_0x4b8de1['error'][_0x6eec('0x1b')]);return _0x5e8aba(_0x4b8de1['error'][_0x6eec('0x1b')]);}else{logger[_0x6eec('0x13')]('ChatGroup,\x20%s,\x20%s',_0x49ad4c,_0x6eec('0x14'));_0x5e8aba(_0x4b8de1[_0x6eec('0x1c')][_0x6eec('0x1b')]);}})['catch'](function(_0x87f3be){logger[_0x6eec('0x18')](_0x6eec('0x1a'),_0x49ad4c,_0x87f3be);_0x295cae(_0x87f3be);});});}
\ No newline at end of file
+var _0x524a=['jayson/promise','client','redis','localhost','./chatGroup.socket','register','info','ChatGroup,\x20%s,\x20%s','ChatGroup,\x20%s,\x20%s,\x20%s','stringify','error','message','request\x20sent','result','catch','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/environment'];(function(_0x2b5a53,_0xf9ae50){var _0x3dd5ad=function(_0x348731){while(--_0x348731){_0x2b5a53['push'](_0x2b5a53['shift']());}};_0x3dd5ad(++_0xf9ae50);}(_0x524a,0xf5));var _0xa524=function(_0x2970d1,_0x3a1f17){_0x2970d1=_0x2970d1-0x0;var _0x56783e=_0x524a[_0x2970d1];return _0x56783e;};'use strict';var _=require(_0xa524('0x0'));var util=require(_0xa524('0x1'));var moment=require(_0xa524('0x2'));var BPromise=require(_0xa524('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xa524('0x4'));var db=require(_0xa524('0x5'))['db'];var utils=require(_0xa524('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0xa524('0x7'));var jayson=require(_0xa524('0x8'));var client=jayson[_0xa524('0x9')]['http']({'port':0x232a});config[_0xa524('0xa')]=_['defaults'](config[_0xa524('0xa')],{'host':_0xa524('0xb'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xa524('0xa')]));require(_0xa524('0xc'))[_0xa524('0xd')](socket);function respondWithRpcPromise(_0x13076e,_0x3b484b,_0x4c467d){return new BPromise(function(_0x547433,_0x2ebea2){return client['request'](_0x13076e,_0x4c467d)['then'](function(_0x2fc0f9){logger[_0xa524('0xe')](_0xa524('0xf'),_0x3b484b,'request\x20sent');logger['debug'](_0xa524('0x10'),_0x3b484b,'request\x20sent',JSON[_0xa524('0x11')](_0x2fc0f9));if(_0x2fc0f9['error']){if(_0x2fc0f9[_0xa524('0x12')]['code']===0x1f4){logger[_0xa524('0x12')](_0xa524('0xf'),_0x3b484b,_0x2fc0f9['error'][_0xa524('0x13')]);return _0x2ebea2(_0x2fc0f9[_0xa524('0x12')][_0xa524('0x13')]);}logger[_0xa524('0x12')](_0xa524('0xf'),_0x3b484b,_0x2fc0f9[_0xa524('0x12')][_0xa524('0x13')]);return _0x547433(_0x2fc0f9['error'][_0xa524('0x13')]);}else{logger[_0xa524('0xe')](_0xa524('0xf'),_0x3b484b,_0xa524('0x14'));_0x547433(_0x2fc0f9[_0xa524('0x15')][_0xa524('0x13')]);}})[_0xa524('0x16')](function(_0x43b228){logger['error'](_0xa524('0xf'),_0x3b484b,_0x43b228);_0x2ebea2(_0x43b228);});});}
\ No newline at end of file
index d7b17f1..ea2ce66 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3b75=['removeListener','register','chatGroup:','./chatGroup.events','save','remove','update'];(function(_0x522951,_0x2b6511){var _0x390bbb=function(_0x9a768c){while(--_0x9a768c){_0x522951['push'](_0x522951['shift']());}};_0x390bbb(++_0x2b6511);}(_0x3b75,0xdc));var _0x53b7=function(_0x500c0,_0xdb6a03){_0x500c0=_0x500c0-0x0;var _0xdd146f=_0x3b75[_0x500c0];return _0xdd146f;};'use strict';var ChatGroupEvents=require(_0x53b7('0x0'));var events=[_0x53b7('0x1'),_0x53b7('0x2'),_0x53b7('0x3')];function createListener(_0x2eaf0c,_0x5dc9c7){return function(_0x2702db){_0x5dc9c7['emit'](_0x2eaf0c,_0x2702db);};}function removeListener(_0xa7b997,_0x4c9b8f){return function(){ChatGroupEvents[_0x53b7('0x4')](_0xa7b997,_0x4c9b8f);};}exports[_0x53b7('0x5')]=function(_0x331d88){for(var _0x287704=0x0,_0x7e5139=events['length'];_0x287704<_0x7e5139;_0x287704++){var _0x1f89b7=events[_0x287704];var _0x233482=createListener(_0x53b7('0x6')+_0x1f89b7,_0x331d88);ChatGroupEvents['on'](_0x1f89b7,_0x233482);}};
\ No newline at end of file
+var _0x636f=['length','chatGroup:','remove','update','removeListener','register'];(function(_0x37ba4d,_0xe9c438){var _0x533e57=function(_0x30efe0){while(--_0x30efe0){_0x37ba4d['push'](_0x37ba4d['shift']());}};_0x533e57(++_0xe9c438);}(_0x636f,0x188));var _0xf636=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0x636f[_0x501510];return _0x1e6ee5;};'use strict';var ChatGroupEvents=require('./chatGroup.events');var events=['save',_0xf636('0x0'),_0xf636('0x1')];function createListener(_0x17e637,_0x42cf1c){return function(_0x20d16a){_0x42cf1c['emit'](_0x17e637,_0x20d16a);};}function removeListener(_0x29ac70,_0x1479ae){return function(){ChatGroupEvents[_0xf636('0x2')](_0x29ac70,_0x1479ae);};}exports[_0xf636('0x3')]=function(_0x39c5f1){for(var _0x526990=0x0,_0xdae985=events[_0xf636('0x4')];_0x526990<_0xdae985;_0x526990++){var _0x2da859=events[_0x526990];var _0x3f6dfb=createListener(_0xf636('0x5')+_0x2da859,_0x39c5f1);ChatGroupEvents['on'](_0x2da859,_0x3f6dfb);}};
\ No newline at end of file
index a8b09ec..19536eb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa4ca=['getUnread','/:id/members','getMembers','/:id/messages','post','create','addMembers','addMessage','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','get','isAuthenticated','/describe','describe','/:id','/:id/unread'];(function(_0x5aadc2,_0x3ff7c1){var _0x1c2d03=function(_0x55ffab){while(--_0x55ffab){_0x5aadc2['push'](_0x5aadc2['shift']());}};_0x1c2d03(++_0x3ff7c1);}(_0xa4ca,0x1bd));var _0xaa4c=function(_0x56caa0,_0x31841f){_0x56caa0=_0x56caa0-0x0;var _0x4e1ccf=_0xa4ca[_0x56caa0];return _0x4e1ccf;};'use strict';var multer=require(_0xaa4c('0x0'));var util=require(_0xaa4c('0x1'));var path=require(_0xaa4c('0x2'));var timeout=require(_0xaa4c('0x3'));var express=require(_0xaa4c('0x4'));var router=express[_0xaa4c('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0xaa4c('0x6'));var config=require(_0xaa4c('0x7'));var controller=require('./chatGroup.controller');router[_0xaa4c('0x8')]('/',auth[_0xaa4c('0x9')](),controller['index']);router[_0xaa4c('0x8')](_0xaa4c('0xa'),auth[_0xaa4c('0x9')](),controller[_0xaa4c('0xb')]);router[_0xaa4c('0x8')](_0xaa4c('0xc'),auth['isAuthenticated'](),controller['show']);router[_0xaa4c('0x8')](_0xaa4c('0xd'),auth[_0xaa4c('0x9')](),controller[_0xaa4c('0xe')]);router[_0xaa4c('0x8')](_0xaa4c('0xf'),auth[_0xaa4c('0x9')](),controller[_0xaa4c('0x10')]);router[_0xaa4c('0x8')](_0xaa4c('0x11'),auth[_0xaa4c('0x9')](),controller['getMessages']);router[_0xaa4c('0x12')]('/',auth[_0xaa4c('0x9')](),controller[_0xaa4c('0x13')]);router[_0xaa4c('0x12')]('/:id/members',auth[_0xaa4c('0x9')](),controller[_0xaa4c('0x14')]);router[_0xaa4c('0x12')]('/:id/messages',auth[_0xaa4c('0x9')](),controller[_0xaa4c('0x15')]);router[_0xaa4c('0x16')]('/:id',auth[_0xaa4c('0x9')](),controller[_0xaa4c('0x17')]);router[_0xaa4c('0x18')](_0xaa4c('0xc'),auth[_0xaa4c('0x9')](),controller[_0xaa4c('0x19')]);router[_0xaa4c('0x18')](_0xaa4c('0xf'),auth[_0xaa4c('0x9')](),controller['removeMembers']);module[_0xaa4c('0x1a')]=router;
\ No newline at end of file
+var _0x75a3=['delete','destroy','removeMembers','exports','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatGroup.controller','isAuthenticated','index','get','/describe','describe','/:id','/:id/unread','getUnread','/:id/members','getMembers','/:id/messages','getMessages','post','create','addMembers','addMessage','put','update'];(function(_0x51beba,_0x202d19){var _0x167ee0=function(_0x2d5b21){while(--_0x2d5b21){_0x51beba['push'](_0x51beba['shift']());}};_0x167ee0(++_0x202d19);}(_0x75a3,0x1c6));var _0x375a=function(_0x40d675,_0xe3bf8c){_0x40d675=_0x40d675-0x0;var _0x249a99=_0x75a3[_0x40d675];return _0x249a99;};'use strict';var multer=require('multer');var util=require(_0x375a('0x0'));var path=require(_0x375a('0x1'));var timeout=require(_0x375a('0x2'));var express=require(_0x375a('0x3'));var router=express['Router']();var auth=require(_0x375a('0x4'));var interaction=require(_0x375a('0x5'));var config=require(_0x375a('0x6'));var controller=require(_0x375a('0x7'));router['get']('/',auth[_0x375a('0x8')](),controller[_0x375a('0x9')]);router[_0x375a('0xa')](_0x375a('0xb'),auth[_0x375a('0x8')](),controller[_0x375a('0xc')]);router[_0x375a('0xa')](_0x375a('0xd'),auth['isAuthenticated'](),controller['show']);router[_0x375a('0xa')](_0x375a('0xe'),auth[_0x375a('0x8')](),controller[_0x375a('0xf')]);router[_0x375a('0xa')](_0x375a('0x10'),auth[_0x375a('0x8')](),controller[_0x375a('0x11')]);router['get'](_0x375a('0x12'),auth[_0x375a('0x8')](),controller[_0x375a('0x13')]);router[_0x375a('0x14')]('/',auth[_0x375a('0x8')](),controller[_0x375a('0x15')]);router[_0x375a('0x14')](_0x375a('0x10'),auth[_0x375a('0x8')](),controller[_0x375a('0x16')]);router[_0x375a('0x14')](_0x375a('0x12'),auth[_0x375a('0x8')](),controller[_0x375a('0x17')]);router[_0x375a('0x18')](_0x375a('0xd'),auth['isAuthenticated'](),controller[_0x375a('0x19')]);router[_0x375a('0x1a')](_0x375a('0xd'),auth[_0x375a('0x8')](),controller[_0x375a('0x1b')]);router['delete'](_0x375a('0x10'),auth[_0x375a('0x8')](),controller[_0x375a('0x1c')]);module[_0x375a('0x1d')]=router;
\ No newline at end of file
index 6499597..babc85d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5eb8=['thumb','TEXT','STRING','DATE','long','BOOLEAN','INTEGER','ENUM','star'];(function(_0x4113e2,_0x52dfb9){var _0xaca944=function(_0x737936){while(--_0x737936){_0x4113e2['push'](_0x4113e2['shift']());}};_0xaca944(++_0x52dfb9);}(_0x5eb8,0xb0));var _0x85eb=function(_0xc1a4cf,_0x17141b){_0xc1a4cf=_0xc1a4cf-0x0;var _0x2930d1=_0x5eb8[_0xc1a4cf];return _0x2930d1;};'use strict';var Sequelize=require('sequelize');module['exports']={'closed':{'type':Sequelize[_0x85eb('0x0')],'defaultValue':![]},'ratingValue':{'type':Sequelize[_0x85eb('0x1')]},'ratingType':{'type':Sequelize[_0x85eb('0x2')](_0x85eb('0x3'),_0x85eb('0x4')),'defaultValue':_0x85eb('0x3')},'ratingMessage':{'type':Sequelize[_0x85eb('0x5')]},'pathTranscript':{'type':Sequelize[_0x85eb('0x5')]},'mailTranscript':{'type':Sequelize[_0x85eb('0x6')],'validate':{'isEmail':!![]}},'closedAt':{'type':Sequelize[_0x85eb('0x7')]},'disposition':{'type':Sequelize[_0x85eb('0x6')]},'note':{'type':Sequelize[_0x85eb('0x6')]},'browserName':{'type':Sequelize['STRING']},'browserVersion':{'type':Sequelize[_0x85eb('0x6')]},'osName':{'type':Sequelize[_0x85eb('0x6')]},'osVersion':{'type':Sequelize[_0x85eb('0x6')]},'deviceModel':{'type':Sequelize['STRING']},'deviceVendor':{'type':Sequelize[_0x85eb('0x6')]},'deviceType':{'type':Sequelize['STRING']},'referer':{'type':Sequelize[_0x85eb('0x6')]},'customerIp':{'type':Sequelize[_0x85eb('0x6')]},'formData':{'type':Sequelize[_0x85eb('0x5')](_0x85eb('0x8'))},'read1stAt':{'type':Sequelize[_0x85eb('0x7')]},'lastMsgAt':{'type':Sequelize[_0x85eb('0x7')]},'lastMsgDirection':{'type':Sequelize[_0x85eb('0x2')]('in','out'),'defaultValue':'in','allowNull':![]},'closeReason':{'type':Sequelize[_0x85eb('0x6')]}};
\ No newline at end of file
+var _0xe511=['star','thumb','TEXT','STRING','DATE','long','out','sequelize','exports','INTEGER'];(function(_0x516346,_0x3e799c){var _0x23fc9e=function(_0x180514){while(--_0x180514){_0x516346['push'](_0x516346['shift']());}};_0x23fc9e(++_0x3e799c);}(_0xe511,0x16f));var _0x1e51=function(_0x47c958,_0x3cfe09){_0x47c958=_0x47c958-0x0;var _0x573eab=_0xe511[_0x47c958];return _0x573eab;};'use strict';var Sequelize=require(_0x1e51('0x0'));module[_0x1e51('0x1')]={'closed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'ratingValue':{'type':Sequelize[_0x1e51('0x2')]},'ratingType':{'type':Sequelize['ENUM'](_0x1e51('0x3'),_0x1e51('0x4')),'defaultValue':'star'},'ratingMessage':{'type':Sequelize[_0x1e51('0x5')]},'pathTranscript':{'type':Sequelize[_0x1e51('0x5')]},'mailTranscript':{'type':Sequelize[_0x1e51('0x6')],'validate':{'isEmail':!![]}},'closedAt':{'type':Sequelize[_0x1e51('0x7')]},'disposition':{'type':Sequelize['STRING']},'note':{'type':Sequelize[_0x1e51('0x6')]},'browserName':{'type':Sequelize[_0x1e51('0x6')]},'browserVersion':{'type':Sequelize['STRING']},'osName':{'type':Sequelize['STRING']},'osVersion':{'type':Sequelize[_0x1e51('0x6')]},'deviceModel':{'type':Sequelize[_0x1e51('0x6')]},'deviceVendor':{'type':Sequelize['STRING']},'deviceType':{'type':Sequelize['STRING']},'referer':{'type':Sequelize[_0x1e51('0x6')]},'customerIp':{'type':Sequelize[_0x1e51('0x6')]},'formData':{'type':Sequelize[_0x1e51('0x5')](_0x1e51('0x8'))},'read1stAt':{'type':Sequelize[_0x1e51('0x7')]},'lastMsgAt':{'type':Sequelize[_0x1e51('0x7')]},'lastMsgDirection':{'type':Sequelize['ENUM']('in',_0x1e51('0x9')),'defaultValue':'in','allowNull':![]},'closeReason':{'type':Sequelize[_0x1e51('0x6')]}};
\ No newline at end of file
index 736169b..ff300e1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd587=['out','Contact','renderFile','views','toFile','transcript-','.pdf','log','err','eml-format','rimraf','request-promise','moment','bluebird','mustache','util','sox','to-csv','lodash','crypto','jsforce','papaparse','ioredis','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','redis','defaults','./chatInteraction.socket','register','jayson/promise','client','http','request','then','ChatInteraction,\x20%s,\x20%s','request\x20sent','debug','ChatInteraction,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','sendStatus','status','end','json','count','offset','limit','set','apply','reject','update','destroy','stack','name','send','closed','unreadMessages','ChatMessage','Users','map','Tags','TagIds','split','forEach','index','ChatInteraction','rawAttributes','model','keys','query','filters','intersection','fields','length','hasOwnProperty','sort','where','pick','field','color','tools_tags','COUNT(*)','from','me.ChatInteractionId\x20=\x20i.id','me.direction\x20=\x20\x27in\x27','select','u.id','ui.ChatInteractionId','user_has_chat_interactions','users','u.id\x20=\x20ui.UserId','chat_interactions','left_join','o.id\x20=\x20i.UserId','chat_websites','a.id\x20=\x20i.ChatWebsiteId','chat_messages','expr','advancedFilter','parse','createdAt','value','startOf','day','endOf','format','and','isArray','condition','Messages.count','tableAlias','\x20IN\x20?','\x20=\x20?','LIKE','c.firstName','\x20LIKE\x20?','c.lastName','c.email','\x20>\x20?','\x20<\x20?','TagId','ContactId','filter','isNil','i.ChatWebsiteId\x20IN\x20?','concat','$gte','$lte','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','null','replace','\x27\x27\x27\x27','isNumeric','i.id\x20LIKE\x20?','push','toString','join','MATCH\x20(me.body)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?','DESC','group','Sequelize','QueryTypes','SELECT','read','%s\x20=\x200','having','`Messages.count`\x20=\x200','%s\x20>\x200','tag','chat_interaction_has_tags','t.id\x20=\x20it.TagId','t.id\x20IN\x20?','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','it.MailInteractionId\x20=\x20i.id','`Messages.count`\x20>\x200','sequelize','keyBy','merge','a.key','Contact.lastName','Contact.email','c.phone','Contact.mobile','c.fax','Contact.fax','GROUP_CONCAT(DISTINCT\x20t.id)','ui.ChatInteractionId\x20IN\x20?','groupBy','rows','show','params','attributes','include','options','find','create','body','describe','abandon','abandonInteraction,\x20%s,\x20%s,\x20%s','entity\x20not\x20found','UserId','ValidationError','Interaction\x20already\x20assigned','file','originalname','basename','filename','type','findOne','Unauthorized','attachId','download','root','server/files/attachments/','close','server/files/chat/upload/','transcript-%s.txt','now','pathTranscript','User','ChatWebsiteId','CmContact','Messages','%s%d','customer','Visitor','agentIdentifier','agentAlias','alias','fullname','agent_fullname','System','MM/DD/YYYY\x20HH:mm:ss','direction','secret','appendFileSync','MailServerOut','Smtp','service','host','port','secure','user','\x22%s\x22\x20<%s>','email','mailTranscript','Mail\x20Transcript','addMessage','ids','omit','getMessages','nolimit','ChatInteractionId','YYYY-MM-DD\x20HH:mm:ss','findAll','getMyMessages','order','includeAgent','addTags','setTags','Tag','emit','chatInteractionTags:save','removeTags','unix','server','files','tmp','attachments','firstName','lastName','Attachment','ChatWebsite','Account','<hr\x20class=\x22separator\x22/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22footer\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22left\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>%s</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>{{page}}/{{pages}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22right\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>%s</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>','%s\x20#%d','Chat','mkdirSync','Owner','N.A.','disposition','browserName','osName','referer','customerIp','existsSync','createReadStream','pipe','createWriteStream'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xd587,0x11e));var _0x7d58=function(_0x27c5e4,_0x27dbf7){_0x27c5e4=_0x27c5e4-0x0;var _0x507f6a=_0xd587[_0x27c5e4];return _0x507f6a;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x7d58('0x0'));var rimraf=require(_0x7d58('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x7d58('0x2'));var moment=require(_0x7d58('0x3'));var BPromise=require(_0x7d58('0x4'));var Mustache=require(_0x7d58('0x5'));var util=require(_0x7d58('0x6'));var path=require('path');var sox=require(_0x7d58('0x7'));var csv=require(_0x7d58('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x7d58('0x9'));var squel=require('squel');var crypto=require(_0x7d58('0xa'));var jsforce=require(_0x7d58('0xb'));var deskjs=require('desk.js');var toCsv=require(_0x7d58('0x8'));var querystring=require('querystring');var Papa=require(_0x7d58('0xc'));var Redis=require(_0x7d58('0xd'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0x7d58('0xe'));var logger=require(_0x7d58('0xf'))(_0x7d58('0x10'));var utils=require(_0x7d58('0x11'));var config=require('../../config/environment');var db=require(_0x7d58('0x12'))['db'];config[_0x7d58('0x13')]=_[_0x7d58('0x14')](config[_0x7d58('0x13')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x7d58('0x15'))[_0x7d58('0x16')](socket);var jayson=require(_0x7d58('0x17'));var client=jayson[_0x7d58('0x18')][_0x7d58('0x19')]({'port':0x232b});var client9004=jayson['client']['http']({'port':0x232c});function checkPasswordPattern(_0x32e64b,_0x336757,_0x6129e3){if(_0x6129e3){var _0x30cc43=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x30cc43['test'](_0x336757)){return _0x32e64b;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x32e64b;}}function respondWithRpcPromise(_0x26ac4c,_0x3f463c,_0x5587ea,_0x533b3e){return new BPromise(function(_0x394816,_0x52d8f9){var _0x32230=_0x533b3e||client;return _0x32230[_0x7d58('0x1a')](_0x26ac4c,_0x5587ea)[_0x7d58('0x1b')](function(_0x27863e){logger['info'](_0x7d58('0x1c'),_0x3f463c,_0x7d58('0x1d'));logger[_0x7d58('0x1e')](_0x7d58('0x1f'),_0x3f463c,'request\x20sent',JSON['stringify'](_0x27863e));if(_0x27863e[_0x7d58('0x20')]){if(_0x27863e[_0x7d58('0x20')][_0x7d58('0x21')]===0x1f4){logger[_0x7d58('0x20')]('ChatInteraction,\x20%s,\x20%s',_0x3f463c,_0x27863e[_0x7d58('0x20')][_0x7d58('0x22')]);return _0x52d8f9(_0x27863e[_0x7d58('0x20')]['message']);}logger[_0x7d58('0x20')](_0x7d58('0x1c'),_0x3f463c,_0x27863e[_0x7d58('0x20')]['message']);return _0x394816(_0x27863e[_0x7d58('0x20')][_0x7d58('0x22')]);}else{logger['info'](_0x7d58('0x1c'),_0x3f463c,'request\x20sent');_0x394816(_0x27863e[_0x7d58('0x23')][_0x7d58('0x22')]);}})[_0x7d58('0x24')](function(_0x322611){logger[_0x7d58('0x20')](_0x7d58('0x1c'),_0x3f463c,_0x322611);_0x52d8f9(_0x322611);});});}function respondWithStatusCode(_0x351c28,_0x154f1a){_0x154f1a=_0x154f1a||0xcc;return function(_0x4d3cce){if(_0x4d3cce){return _0x351c28[_0x7d58('0x25')](_0x154f1a);}return _0x351c28[_0x7d58('0x26')](_0x154f1a)[_0x7d58('0x27')]();};}function respondWithResult(_0x1c2a5b,_0x5d3b92){_0x5d3b92=_0x5d3b92||0xc8;return function(_0x316a23){if(_0x316a23){return _0x1c2a5b[_0x7d58('0x26')](_0x5d3b92)[_0x7d58('0x28')](_0x316a23);}};}function respondWithFilteredResult(_0x11ec70,_0xa1efdd){return function(_0x1dde5c){if(_0x1dde5c){var _0x44ef90=_0x1dde5c[_0x7d58('0x29')],_0x494fa1=_0xa1efdd[_0x7d58('0x2a')],_0x23bf29=_0xa1efdd[_0x7d58('0x2a')]+_0xa1efdd[_0x7d58('0x2b')],_0x1f134d;if(_0x23bf29>=_0x44ef90){_0x23bf29=_0x44ef90;_0x1f134d=0xc8;}else{_0x1f134d=0xce;}_0x11ec70['status'](_0x1f134d);return _0x11ec70[_0x7d58('0x2c')]('Content-Range',_0x494fa1+'-'+_0x23bf29+'/'+_0x44ef90)[_0x7d58('0x28')](_0x1dde5c);}return null;};}function patchUpdates(_0x5eb18b){return function(_0x4b23d1){try{jsonpatch[_0x7d58('0x2d')](_0x4b23d1,_0x5eb18b,!![]);}catch(_0x29fc51){return BPromise[_0x7d58('0x2e')](_0x29fc51);}return _0x4b23d1['save']();};}function saveUpdates(_0x449a6e,_0x5bd51b){return function(_0x1f19d5){if(_0x1f19d5){return _0x1f19d5[_0x7d58('0x2f')](_0x449a6e)[_0x7d58('0x1b')](function(_0x58d9a9){return _0x58d9a9;});}return null;};}function removeEntity(_0x169cae,_0x51979a){return function(_0x1c763d){if(_0x1c763d){return _0x1c763d[_0x7d58('0x30')]()[_0x7d58('0x1b')](function(){_0x169cae[_0x7d58('0x26')](0xcc)[_0x7d58('0x27')]();});}};}function handleEntityNotFound(_0x5e5cb9,_0x445a42){return function(_0x127f99){if(!_0x127f99){_0x5e5cb9[_0x7d58('0x25')](0x194);}return _0x127f99;};}function handleError(_0x41c211,_0x2a4e6a){_0x2a4e6a=_0x2a4e6a||0x1f4;return function(_0x490d2b){logger[_0x7d58('0x20')](_0x490d2b[_0x7d58('0x31')]);if(_0x490d2b['name']){delete _0x490d2b[_0x7d58('0x32')];}_0x41c211['status'](_0x2a4e6a)[_0x7d58('0x33')](_0x490d2b);};}function getInteractionUnreadMessages(_0x1006d6){return new BPromise(function(_0x599dc5,_0x5857d9){try{if(_0x1006d6[_0x7d58('0x34')]){_0x1006d6[_0x7d58('0x35')]=0x0;_0x599dc5(_0x1006d6);}else{return db[_0x7d58('0x36')][_0x7d58('0x29')]({'where':{'ChatInteractionId':_0x1006d6['id'],'direction':'in','read':![]}})[_0x7d58('0x1b')](function(_0x46cc79){_0x1006d6[_0x7d58('0x35')]=_0x46cc79;_0x599dc5(_0x1006d6);});}}catch(_0x4c85a0){_0x5857d9(_0x4c85a0);}});}function getInteractionUsers(_0x1acb87,_0x2ac3d9){return new BPromise(function(_0x4abfe4,_0xc84576){try{if(_0x2ac3d9[_0x1acb87['id']]){_0x1acb87[_0x7d58('0x37')]=_[_0x7d58('0x38')](_0x2ac3d9[_0x1acb87['id']],function(_0x119201){return{'id':_0x119201['id']};});}}catch(_0x350676){_0xc84576(_0x350676);}_0x4abfe4(_0x1acb87);});}function getInteractionTags(_0x35f435,_0x56d33a){return new BPromise(function(_0x40b930,_0x18ecff){try{if(_0x35f435['TagIds']){_0x35f435[_0x7d58('0x39')]=[];_0x35f435[_0x7d58('0x3a')][_0x7d58('0x3b')](',')[_0x7d58('0x3c')](function(_0x6350b0){_0x35f435[_0x7d58('0x39')]['push'](_0x56d33a[_0x6350b0]);});}delete _0x35f435['TagIds'];}catch(_0x1f5837){_0x18ecff(_0x1f5837);}_0x40b930(_0x35f435);});}function updateChatInteraction(_0x290624,_0x241740,_0x4eaacd){return new BPromise(function(_0x37303e,_0x45771f){return getInteractionUnreadMessages(_0x290624)[_0x7d58('0x1b')](function(_0x6a3642){return getInteractionUsers(_0x6a3642,_0x4eaacd);})[_0x7d58('0x1b')](function(_0x5b2f58){return getInteractionTags(_0x5b2f58,_0x241740);})[_0x7d58('0x1b')](function(_0x3f87b3){_0x37303e(_0x3f87b3);})[_0x7d58('0x24')](function(_0xc4010a){_0x45771f(_0xc4010a);});});}exports[_0x7d58('0x3d')]=function(_0x55eec9,_0x56a05c){var _0x1fe51f={},_0x3b2fef={},_0x36e7c9={'count':0x0,'rows':[]};var _0x3384a2=db[_0x7d58('0x3e')][_0x7d58('0x3f')];_0x3b2fef[_0x7d58('0x40')]=_[_0x7d58('0x41')](_0x3384a2);_0x3b2fef['query']=_[_0x7d58('0x41')](_0x55eec9[_0x7d58('0x42')]);_0x3b2fef[_0x7d58('0x43')]=_[_0x7d58('0x44')](_0x3b2fef[_0x7d58('0x40')],_0x3b2fef[_0x7d58('0x42')]);_0x1fe51f['attributes']=_[_0x7d58('0x44')](_0x3b2fef[_0x7d58('0x40')],qs['fields'](_0x55eec9[_0x7d58('0x42')][_0x7d58('0x45')]));_0x1fe51f['attributes']=_0x1fe51f['attributes'][_0x7d58('0x46')]?_0x1fe51f['attributes']:_0x3b2fef[_0x7d58('0x40')];if(!_0x55eec9[_0x7d58('0x42')][_0x7d58('0x47')]('nolimit')){_0x1fe51f[_0x7d58('0x2b')]=qs[_0x7d58('0x2b')](_0x55eec9['query']['limit']);_0x1fe51f[_0x7d58('0x2a')]=qs[_0x7d58('0x2a')](_0x55eec9[_0x7d58('0x42')][_0x7d58('0x2a')]);}_0x1fe51f['order']=qs['sort'](_0x55eec9[_0x7d58('0x42')][_0x7d58('0x48')]);_0x1fe51f[_0x7d58('0x49')]=qs[_0x7d58('0x43')](_[_0x7d58('0x4a')](_0x55eec9[_0x7d58('0x42')],_0x3b2fef[_0x7d58('0x43')]));var _0x284f8b=[];var _0x355c52=squel['select']()[_0x7d58('0x4b')]('id')['field']('name')['field'](_0x7d58('0x4c'))['from'](_0x7d58('0x4d'));var _0x2d0572=squel['select']()[_0x7d58('0x4b')](_0x7d58('0x4e'))[_0x7d58('0x4f')]('chat_messages','me')[_0x7d58('0x49')](_0x7d58('0x50'))['where'](_0x7d58('0x51'))[_0x7d58('0x49')]('me.read\x20=\x20false');var _0x5ae27b=squel[_0x7d58('0x52')]()[_0x7d58('0x4b')](_0x7d58('0x53'))[_0x7d58('0x4b')](_0x7d58('0x54'))[_0x7d58('0x4f')](_0x7d58('0x55'),'ui')['left_join'](_0x7d58('0x56'),'u',_0x7d58('0x57'));var _0x14a98f=squel['select']()[_0x7d58('0x4f')](_0x7d58('0x58'),'i')[_0x7d58('0x59')]('cm_contacts','c','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL')[_0x7d58('0x59')](_0x7d58('0x56'),'o',_0x7d58('0x5a'))['left_join'](_0x7d58('0x5b'),'a',_0x7d58('0x5c'))[_0x7d58('0x59')](_0x7d58('0x5d'),'me',_0x7d58('0x50'));var _0x2aa102=squel[_0x7d58('0x5e')]();if(_0x55eec9['query'][_0x7d58('0x5f')]){var _0x47587b=JSON[_0x7d58('0x60')](_0x55eec9['query'][_0x7d58('0x5f')]);_[_0x7d58('0x41')](_0x47587b)[_0x7d58('0x3c')](function(_0x1d0cac){var _0x471ce7=_0x47587b[_0x1d0cac];if(_0x1d0cac===_0x7d58('0x61')){var _0x555c11=moment(_0x471ce7[_0x7d58('0x62')]['dateStart'])[_0x7d58('0x63')](_0x7d58('0x64'))['utc']()['format']();var _0x439d1e=moment(_0x439d1e)['utc']()[_0x7d58('0x65')](_0x7d58('0x64'))[_0x7d58('0x66')]();_0x2aa102[_0x7d58('0x67')]('i.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x555c11,_0x439d1e);}else{if(_[_0x7d58('0x68')](_0x471ce7['condition'])){_0x471ce7[_0x7d58('0x69')][_0x7d58('0x3c')](function(_0x2258c7){switch(_0x471ce7[_0x7d58('0x69')]['value']){case'IS':if(_0x1d0cac!=='TagId'&&_0x1d0cac!==_0x7d58('0x6a')){if(_[_0x7d58('0x68')](_0x471ce7[_0x7d58('0x62')])&&_0x471ce7[_0x7d58('0x62')]['length']>0x1){_0x2aa102[_0x7d58('0x67')](_0x471ce7[_0x7d58('0x6b')]+'.'+_0x1d0cac+_0x7d58('0x6c'),_0x471ce7[_0x7d58('0x62')]);}else{_0x2aa102['and'](_0x471ce7[_0x7d58('0x6b')]+'.'+_0x1d0cac+_0x7d58('0x6d'),_0x471ce7[_0x7d58('0x62')][0x0]);}}break;case'=':_0x2aa102[_0x7d58('0x67')](_0x471ce7[_0x7d58('0x6b')]+'.'+_0x1d0cac+_0x7d58('0x6d'),_0x471ce7[_0x7d58('0x62')]);break;case _0x7d58('0x6e'):if(_0x1d0cac==='ContactId'){_0x2aa102[_0x7d58('0x67')](_0x7d58('0x6f')+_0x7d58('0x70'),'%'+_0x471ce7[_0x7d58('0x62')]+'%');_0x2aa102['or'](_0x7d58('0x71')+_0x7d58('0x70'),'%'+_0x471ce7[_0x7d58('0x62')]+'%');_0x2aa102['or'](_0x7d58('0x72')+_0x7d58('0x70'),'%'+_0x471ce7[_0x7d58('0x62')]+'%');}else{_0x2aa102[_0x7d58('0x67')](_0x471ce7[_0x7d58('0x6b')]+'.'+_0x1d0cac+_0x7d58('0x70'),'%'+_0x471ce7['value']+'%');}break;case'>':_0x2aa102[_0x7d58('0x67')](_0x471ce7[_0x7d58('0x6b')]+'.'+_0x1d0cac+_0x7d58('0x73'),_0x471ce7[_0x7d58('0x62')]);break;case'<':_0x2aa102[_0x7d58('0x67')](_0x471ce7[_0x7d58('0x6b')]+'.'+_0x1d0cac+_0x7d58('0x74'),_0x471ce7[_0x7d58('0x62')]);break;}});}else{switch(_0x471ce7[_0x7d58('0x69')][_0x7d58('0x62')]){case'IS':if(_0x1d0cac!==_0x7d58('0x75')&&_0x1d0cac!==_0x7d58('0x6a')){if(_[_0x7d58('0x68')](_0x471ce7['value'])&&_0x471ce7[_0x7d58('0x62')][_0x7d58('0x46')]>0x1){_0x2aa102[_0x7d58('0x67')](_0x471ce7[_0x7d58('0x6b')]+'.'+_0x1d0cac+_0x7d58('0x6c'),_0x471ce7[_0x7d58('0x62')]);}else{_0x2aa102[_0x7d58('0x67')](_0x471ce7['tableAlias']+'.'+_0x1d0cac+_0x7d58('0x6d'),_0x471ce7[_0x7d58('0x62')][0x0]);}}break;case'=':_0x2aa102['and'](_0x471ce7[_0x7d58('0x6b')]+'.'+_0x1d0cac+'\x20=\x20?',_0x471ce7[_0x7d58('0x62')]);break;case _0x7d58('0x6e'):if(_0x1d0cac===_0x7d58('0x76')){_0x2aa102[_0x7d58('0x67')](_0x7d58('0x6f')+_0x7d58('0x70'),'%'+_0x471ce7[_0x7d58('0x62')]+'%');_0x2aa102['or'](_0x7d58('0x71')+_0x7d58('0x70'),'%'+_0x471ce7['value']+'%');_0x2aa102['or'](_0x7d58('0x72')+_0x7d58('0x70'),'%'+_0x471ce7['value']+'%');}else{_0x2aa102['and'](_0x471ce7[_0x7d58('0x6b')]+'.'+_0x1d0cac+_0x7d58('0x70'),'%'+_0x471ce7[_0x7d58('0x62')]+'%');}break;case'>':_0x2aa102['and'](_0x471ce7[_0x7d58('0x6b')]+'.'+_0x1d0cac+'\x20>\x20?',_0x471ce7[_0x7d58('0x62')]);break;case'<':_0x2aa102[_0x7d58('0x67')](_0x471ce7[_0x7d58('0x6b')]+'.'+_0x1d0cac+_0x7d58('0x74'),_0x471ce7['value']);break;}}}});}else{var _0xc5ef45=_(Object[_0x7d58('0x41')](_0x55eec9[_0x7d58('0x42')]))['map'](function(_0x15418a){return _0x3384a2['hasOwnProperty'](_0x15418a)?_0x15418a:undefined;})[_0x7d58('0x77')](function(_0x409f1c){return!_[_0x7d58('0x78')](_0x409f1c);})[_0x7d58('0x62')]();if(!_['isEmpty'](_0xc5ef45)){_0xc5ef45[_0x7d58('0x3c')](function(_0xab2f9b){if(_0xab2f9b==='ChatWebsiteId'){_0x14a98f[_0x7d58('0x49')](_0x7d58('0x79'),[][_0x7d58('0x7a')](_0x55eec9[_0x7d58('0x42')][_0xab2f9b]));}else if(_0xab2f9b==='createdAt'){var _0x129ce2=JSON['parse'](_0x55eec9[_0x7d58('0x42')][_0xab2f9b])[_0x7d58('0x7b')];var _0x10edc0=JSON['parse'](_0x55eec9['query'][_0xab2f9b])[_0x7d58('0x7c')];_0x14a98f[_0x7d58('0x49')](_0x7d58('0x7d'),_0x129ce2,_0x10edc0);}else{if(_0x55eec9['query'][_0xab2f9b]===_0x7d58('0x7e')){_0x14a98f[_0x7d58('0x49')]('i.'+_0xab2f9b+'\x20IS\x20NULL');}else{_0x14a98f[_0x7d58('0x49')]('i.'+_0xab2f9b+_0x7d58('0x6d'),_0x55eec9[_0x7d58('0x42')][_0xab2f9b]);}}});}if(_0x55eec9[_0x7d58('0x42')]['filter']){var _0x5a864a=_0x55eec9[_0x7d58('0x42')]['filter'][_0x7d58('0x7f')]('\x5c','\x5c\x5c')[_0x7d58('0x7f')]('\x27\x27',_0x7d58('0x80'));if(qs[_0x7d58('0x81')](_0x5a864a)){_0x2aa102['or'](_0x7d58('0x82'),_0x5a864a+'%');}else{var _0x207247=[];_0x5a864a[_0x7d58('0x3b')]('\x20')[_0x7d58('0x3c')](function(_0xa624eb){_0x207247[_0x7d58('0x83')]('+'+_0xa624eb[_0x7d58('0x84')]());});var _0x33e91b=_0x207247[_0x7d58('0x85')]('\x20');_0x2aa102['or'](_0x7d58('0x86'),_0x33e91b)['or'](_0x7d58('0x87'),_0x5a864a+'%');}}}_0x14a98f[_0x7d58('0x49')](_0x2aa102);if(_0x1fe51f['order']){_0x1fe51f['order'][_0x7d58('0x3c')](function(_0x5336fc){_0x14a98f['order']('i.'+_0x5336fc[0x0],_0x5336fc[0x1]===_0x7d58('0x88')?![]:!![]);});}_0x14a98f[_0x7d58('0x89')]('i.id');var _0x42f44a={'type':db[_0x7d58('0x8a')][_0x7d58('0x8b')][_0x7d58('0x8c')],'raw':!![]};var _0x1e5bfa=_0x14a98f['clone']()[_0x7d58('0x4b')]('COUNT(*)');if(!_0x55eec9[_0x7d58('0x42')][_0x7d58('0x5f')]){if(_0x55eec9['query'][_0x7d58('0x8d')]){if(_0x55eec9[_0x7d58('0x42')][_0x7d58('0x8d')]==0x1){_0x1e5bfa[_0x7d58('0x49')](util[_0x7d58('0x66')](_0x7d58('0x8e'),_0x2d0572['toString']()));_0x14a98f[_0x7d58('0x8f')](_0x7d58('0x90'));}else{_0x1e5bfa[_0x7d58('0x49')](util[_0x7d58('0x66')](_0x7d58('0x91'),_0x2d0572['toString']()));_0x14a98f[_0x7d58('0x8f')]('`Messages.count`\x20>\x200');}}if(_0x55eec9['query'][_0x7d58('0x92')]){var _0x34650d=_[_0x7d58('0x68')](_0x55eec9[_0x7d58('0x42')][_0x7d58('0x92')])?_0x55eec9[_0x7d58('0x42')]['tag']:new Array(_0x55eec9[_0x7d58('0x42')][_0x7d58('0x92')]);var _0x2671ba=squel['expr']();_0x34650d[_0x7d58('0x3c')](function(_0x5052fe){_0x2671ba['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x5052fe+',%');});_0x14a98f[_0x7d58('0x8f')](_0x2671ba);_0x1e5bfa[_0x7d58('0x59')](_0x7d58('0x93'),'it','it.ChatInteractionId\x20=\x20i.id');_0x1e5bfa[_0x7d58('0x59')](_0x7d58('0x4d'),'t',_0x7d58('0x94'));_0x1e5bfa[_0x7d58('0x49')](_0x7d58('0x95'),_0x34650d);}}else{var _0x47587b=JSON[_0x7d58('0x60')](_0x55eec9[_0x7d58('0x42')][_0x7d58('0x5f')]);_['keys'](_0x47587b)['forEach'](function(_0x3ff02b){var _0x13157b=_0x47587b[_0x3ff02b];if(_0x3ff02b===_0x7d58('0x75')){var _0x4737d7=_0x13157b[_0x7d58('0x62')];var _0x282aa8=squel[_0x7d58('0x5e')]();_0x4737d7[_0x7d58('0x3c')](function(_0x5832c7){_0x282aa8['or'](_0x7d58('0x96'),'%,'+_0x5832c7+',%');});_0x14a98f['having'](_0x282aa8);_0x1e5bfa[_0x7d58('0x59')]('mail_interaction_has_tags','it',_0x7d58('0x97'));_0x1e5bfa[_0x7d58('0x59')](_0x7d58('0x4d'),'t','t.id\x20=\x20it.TagId');_0x1e5bfa[_0x7d58('0x49')](_0x7d58('0x95'),_0x4737d7);}else if(_0x3ff02b===_0x7d58('0x6a')){if(_0x13157b[_0x7d58('0x62')]['length']===0x1){if(_0x13157b[_0x7d58('0x62')][0x0]===0x1){_0x1e5bfa[_0x7d58('0x49')](util[_0x7d58('0x66')](_0x7d58('0x8e'),_0x2d0572['toString']()));_0x14a98f[_0x7d58('0x8f')]('`Messages.count`\x20=\x200');}else{_0x1e5bfa[_0x7d58('0x49')](util[_0x7d58('0x66')](_0x7d58('0x91'),_0x2d0572[_0x7d58('0x84')]()));_0x14a98f[_0x7d58('0x8f')](_0x7d58('0x98'));}}}});}db[_0x7d58('0x99')]['query'](_0x1e5bfa[_0x7d58('0x84')](),_0x42f44a)[_0x7d58('0x1b')](function(_0x42c831){_0x36e7c9[_0x7d58('0x29')]=_0x42c831[_0x7d58('0x46')];if(_0x36e7c9[_0x7d58('0x29')]===0x0)return[];return db[_0x7d58('0x99')][_0x7d58('0x42')](_0x355c52[_0x7d58('0x84')](),_0x42f44a)[_0x7d58('0x1b')](function(_0x45d741){_0x284f8b=_[_0x7d58('0x9a')](_0x45d741,'id');_0x42f44a=_[_0x7d58('0x9b')](_0x42f44a,{'model':db['ChatInteraction'],'mapToModel':!![],'raw':!![],'nest':!![]});_0x14a98f[_0x7d58('0x4b')](_0x7d58('0x9c'),'Account.key');_0x14a98f[_0x7d58('0x4b')]('i.*');_0x14a98f['field']('c.firstName','Contact.firstName');_0x14a98f[_0x7d58('0x4b')]('c.lastName',_0x7d58('0x9d'));_0x14a98f[_0x7d58('0x4b')](_0x7d58('0x72'),_0x7d58('0x9e'));_0x14a98f[_0x7d58('0x4b')](_0x7d58('0x9f'),'Contact.phone');_0x14a98f[_0x7d58('0x4b')]('c.mobile',_0x7d58('0xa0'));_0x14a98f[_0x7d58('0x4b')](_0x7d58('0xa1'),_0x7d58('0xa2'));_0x14a98f[_0x7d58('0x4b')](_0x7d58('0xa3'),_0x7d58('0x3a'));_0x14a98f[_0x7d58('0x59')](_0x7d58('0x93'),'it','it.ChatInteractionId\x20=\x20i.id');_0x14a98f[_0x7d58('0x59')](_0x7d58('0x4d'),'t',_0x7d58('0x94'));_0x14a98f[_0x7d58('0x2b')](_0x1fe51f['limit']);_0x14a98f[_0x7d58('0x2a')](_0x1fe51f[_0x7d58('0x2a')]);return db[_0x7d58('0x99')][_0x7d58('0x42')](_0x14a98f[_0x7d58('0x84')](),_0x42f44a);})['then'](function(_0x41cb1b){_0x5ae27b[_0x7d58('0x49')](_0x7d58('0xa4'),_['map'](_0x41cb1b,'id'));return db[_0x7d58('0x99')][_0x7d58('0x42')](_0x5ae27b[_0x7d58('0x84')](),_0x42f44a)[_0x7d58('0x1b')](function(_0x469486){var _0x53010f=_[_0x7d58('0xa5')](_0x469486,'ChatInteractionId');var _0x22b8cf=[];_0x41cb1b['forEach'](function(_0x2d8258){_0x22b8cf[_0x7d58('0x83')](updateChatInteraction(_0x2d8258,_0x284f8b,_0x53010f));});return BPromise['all'](_0x22b8cf);});});})[_0x7d58('0x1b')](function(_0x4a25dc){_0x36e7c9[_0x7d58('0xa6')]=_0x4a25dc;return _0x36e7c9;})[_0x7d58('0x1b')](respondWithFilteredResult(_0x56a05c,_0x1fe51f))['catch'](handleError(_0x56a05c,null));};exports[_0x7d58('0xa7')]=function(_0x2a860e,_0x1739a6){var _0x3e12a7={'raw':![],'where':{'id':_0x2a860e[_0x7d58('0xa8')]['id']}},_0x468076={};_0x468076[_0x7d58('0x40')]=_[_0x7d58('0x41')](db[_0x7d58('0x3e')][_0x7d58('0x3f')]);_0x468076[_0x7d58('0x42')]=_[_0x7d58('0x41')](_0x2a860e['query']);_0x468076[_0x7d58('0x43')]=_[_0x7d58('0x44')](_0x468076[_0x7d58('0x40')],_0x468076[_0x7d58('0x42')]);_0x3e12a7[_0x7d58('0xa9')]=_['intersection'](_0x468076[_0x7d58('0x40')],qs[_0x7d58('0x45')](_0x2a860e[_0x7d58('0x42')][_0x7d58('0x45')]));_0x3e12a7[_0x7d58('0xa9')]=_0x3e12a7[_0x7d58('0xa9')][_0x7d58('0x46')]?_0x3e12a7[_0x7d58('0xa9')]:_0x468076[_0x7d58('0x40')];if(_0x2a860e[_0x7d58('0x42')]['includeAll']){_0x3e12a7[_0x7d58('0xaa')]=[{'all':!![]}];}_0x3e12a7=_[_0x7d58('0x9b')]({},_0x3e12a7,_0x2a860e[_0x7d58('0xab')]);return db[_0x7d58('0x3e')][_0x7d58('0xac')](_0x3e12a7)[_0x7d58('0x1b')](handleEntityNotFound(_0x1739a6,null))[_0x7d58('0x1b')](respondWithResult(_0x1739a6,null))[_0x7d58('0x24')](handleError(_0x1739a6,null));};exports[_0x7d58('0xad')]=function(_0x149e05,_0x7e548a){return db[_0x7d58('0x3e')]['create'](_0x149e05['body'],{})['then'](respondWithResult(_0x7e548a,0xc9))['catch'](handleError(_0x7e548a,null));};exports[_0x7d58('0x2f')]=function(_0x1df75a,_0x271f80){if(_0x1df75a[_0x7d58('0xae')]['id']){delete _0x1df75a['body']['id'];}return db[_0x7d58('0x3e')][_0x7d58('0xac')]({'where':{'id':_0x1df75a[_0x7d58('0xa8')]['id']}})['then'](handleEntityNotFound(_0x271f80,null))['then'](saveUpdates(_0x1df75a[_0x7d58('0xae')],null))[_0x7d58('0x1b')](respondWithResult(_0x271f80,null))[_0x7d58('0x24')](handleError(_0x271f80,null));};exports['destroy']=function(_0x3c3de3,_0x2137af){return db['ChatInteraction'][_0x7d58('0xac')]({'where':{'id':_0x3c3de3[_0x7d58('0xa8')]['id']}})[_0x7d58('0x1b')](handleEntityNotFound(_0x2137af,null))['then'](removeEntity(_0x2137af,null))[_0x7d58('0x24')](handleError(_0x2137af,null));};exports[_0x7d58('0xaf')]=function(_0x43c50f,_0x5a802f){return db['ChatInteraction'][_0x7d58('0xaf')]()[_0x7d58('0x1b')](respondWithResult(_0x5a802f,null))[_0x7d58('0x24')](handleError(_0x5a802f,null));};exports['customUpdate']=function(_0xcbfde,_0x13d9c5){if(_0xcbfde[_0x7d58('0xae')]['id']){delete _0xcbfde[_0x7d58('0xae')]['id'];}return db[_0x7d58('0x3e')][_0x7d58('0xac')]({'where':{'id':_0xcbfde[_0x7d58('0xa8')]['id']}})[_0x7d58('0x1b')](handleEntityNotFound(_0x13d9c5,null))[_0x7d58('0x1b')](saveUpdates(_0xcbfde[_0x7d58('0xae')],null))[_0x7d58('0x1b')](respondWithResult(_0x13d9c5,null))['catch'](handleError(_0x13d9c5,null));};exports[_0x7d58('0xb0')]=function(_0x2c373b,_0x1a674a,_0x10f3c5){if(_0x2c373b['body']['id']){delete _0x2c373b['body']['id'];}return db[_0x7d58('0x3e')][_0x7d58('0xac')]({'where':{'id':_0x2c373b[_0x7d58('0xa8')]['id']}})['then'](function(_0x424e09){if(!_0x424e09){logger[_0x7d58('0x20')](_0x7d58('0xb1'),_0x7d58('0xb0'),0x194,_0x7d58('0xb2'));_0x1a674a[_0x7d58('0x25')](0x194);}else{if(_0x424e09[_0x7d58('0xb3')]){throw new db[(_0x7d58('0x8a'))][(_0x7d58('0xb4'))](_0x7d58('0xb5'));}}return _0x424e09;})['then'](function(_0x4d4c0){if(_0x4d4c0){return _0x4d4c0['update']({'closed':_0x2c373b[_0x7d58('0xae')]['closed'],'disposition':_0x2c373b[_0x7d58('0xae')]['disposition']})[_0x7d58('0x1b')](function(_0x48a1b4){return _0x48a1b4;});}})[_0x7d58('0x1b')](function(_0x4316be){return respondWithRpcPromise('AbandonInteraction',_0x7d58('0xb0'),_0x2c373b[_0x7d58('0xae')],client9004);})['then'](respondWithResult(_0x1a674a,null))[_0x7d58('0x24')](handleError(_0x1a674a,null));};exports['attachmentUpload']=function(_0x3f1693,_0x2e1d8b,_0x1784f6){_0x3f1693[_0x7d58('0xae')]['name']=_0x3f1693[_0x7d58('0xb6')][_0x7d58('0xb7')];_0x3f1693[_0x7d58('0xae')][_0x7d58('0xb8')]=_0x3f1693[_0x7d58('0xb6')][_0x7d58('0xb9')];_0x3f1693['body'][_0x7d58('0xba')]=_0x3f1693[_0x7d58('0xb6')]['mimetype'];return db['Attachment']['create'](_0x3f1693[_0x7d58('0xae')])[_0x7d58('0x1b')](respondWithResult(_0x2e1d8b,0xc9))[_0x7d58('0x24')](handleError(_0x2e1d8b,null));};exports['attachmentDownload']=function(_0x1b53b8,_0x27c580,_0x269e39){return db['ChatInteraction'][_0x7d58('0xbb')]({'where':{'id':_0x1b53b8['params']['id']},'raw':!![]})[_0x7d58('0x1b')](handleEntityNotFound(_0x27c580,null))[_0x7d58('0x1b')](function(_0xfb16e7){if(_0xfb16e7){if(_0xfb16e7[_0x7d58('0x34')]){return _0x27c580[_0x7d58('0x26')](0x193)[_0x7d58('0x28')]({'status':0x193,'message':_0x7d58('0xbc')});}return db['Attachment'][_0x7d58('0xbb')]({'where':{'id':_0x1b53b8[_0x7d58('0x42')][_0x7d58('0xbd')]},'raw':!![]})['then'](handleEntityNotFound(_0x27c580,null));}})[_0x7d58('0x1b')](function(_0x377b21){if(_0x377b21){return _0x27c580[_0x7d58('0xbe')](path[_0x7d58('0x85')](config[_0x7d58('0xbf')],_0x7d58('0xc0'),_0x377b21[_0x7d58('0xb8')]));}})[_0x7d58('0x24')](handleError(_0x27c580,null));};exports[_0x7d58('0xc1')]=function(_0x20fa6c,_0x353a16){var _0x1d36f2=null;var _0x460cf3=null;var _0x12f0ae=null;var _0x5e8351=null;if(_0x20fa6c[_0x7d58('0xae')]['id']){delete _0x20fa6c[_0x7d58('0xae')]['id'];}if(_0x20fa6c[_0x7d58('0xae')]['mailTranscript']){_0x5e8351=path['join'](config[_0x7d58('0xbf')],_0x7d58('0xc2'),util[_0x7d58('0x66')](_0x7d58('0xc3'),Date[_0x7d58('0xc4')]()));_0x20fa6c[_0x7d58('0xae')][_0x7d58('0xc5')]=_0x5e8351;}return db[_0x7d58('0x3e')][_0x7d58('0xac')]({'where':{'id':_0x20fa6c[_0x7d58('0xa8')]['id']},'include':[{'model':db[_0x7d58('0x36')],'as':'Messages','include':[{'model':db['User'],'as':_0x7d58('0xc6')}]}]})[_0x7d58('0x1b')](handleEntityNotFound(_0x353a16,null))[_0x7d58('0x1b')](saveUpdates(_0x20fa6c[_0x7d58('0xae')],null))['then'](function(_0x23f8e2){if(_0x23f8e2){_0x1d36f2=_0x23f8e2;return db['ChatWebsite'][_0x7d58('0xac')]({'where':{'id':_0x1d36f2[_0x7d58('0xc7')]}});}})[_0x7d58('0x1b')](function(_0x2be6cb){if(_0x2be6cb){_0x12f0ae=_0x2be6cb;return db[_0x7d58('0xc8')][_0x7d58('0xac')]({'where':{'id':_0x1d36f2[_0x7d58('0x76')]}});}})[_0x7d58('0x1b')](function(_0x1b1187){if(_0x1b1187){_0x460cf3=_0x1b1187;if(_0x5e8351){var _0x49d0bd=null;for(var _0x412e75=0x1;_0x412e75<_0x1d36f2[_0x7d58('0xc9')]['length'];++_0x412e75){_0x49d0bd=_0x1d36f2[_0x7d58('0xc9')][_0x412e75];var _0x50607b=_0x49d0bd[_0x7d58('0xb3')]?util['format'](_0x7d58('0xca'),_0x12f0ae['agentAlias'],_0x49d0bd['UserId']):'System';var _0x11b391=_0x20fa6c['body'][_0x7d58('0xcb')]||util[_0x7d58('0x66')](_0x7d58('0xca'),_0x7d58('0xcc'),_0x49d0bd[_0x7d58('0x76')]);switch(_0x12f0ae[_0x7d58('0xcd')]){case'website_alias':_0x50607b=_0x49d0bd['UserId']?util[_0x7d58('0x66')]('%s%d',_0x12f0ae[_0x7d58('0xce')],_0x49d0bd[_0x7d58('0xb3')]):'System';break;case'agent_alias':_0x50607b=_0x49d0bd[_0x7d58('0xb3')]?_0x49d0bd[_0x7d58('0xc6')][_0x7d58('0xcf')]||_0x49d0bd[_0x7d58('0xc6')][_0x7d58('0xd0')]:'System';break;case _0x7d58('0xd1'):_0x50607b=_0x49d0bd[_0x7d58('0xb3')]?_0x49d0bd[_0x7d58('0xc6')][_0x7d58('0xd0')]:_0x7d58('0xd2');break;default:_0x50607b=_0x49d0bd[_0x7d58('0xb3')]?util[_0x7d58('0x66')](_0x7d58('0xca'),_0x12f0ae['agentAlias'],_0x49d0bd[_0x7d58('0xb3')]):_0x7d58('0xd2');}var _0x77f62f=util['format']('[%s]\x20%s:\x20%s\x0a',moment(_0x49d0bd[_0x7d58('0x61')])['format'](_0x7d58('0xd3')),_0x49d0bd[_0x7d58('0xd4')]==='in'?_0x11b391:_0x50607b,_0x49d0bd['body']);if(!_0x49d0bd[_0x7d58('0xd5')]){fs[_0x7d58('0xd6')](_0x5e8351,_0x77f62f);}}return db['MailAccount'][_0x7d58('0xbb')]({'where':{'service':!![]},'include':[{'model':db[_0x7d58('0xd7')],'as':_0x7d58('0xd8'),'raw':!![]}]});}}})[_0x7d58('0x1b')](function(_0x11d726){if(_0x11d726&&_0x11d726[_0x7d58('0xd8')]&&_0x20fa6c[_0x7d58('0xae')]){var _0x36e985={'tls':{'rejectUnauthorized':![]}};if(_0x11d726[_0x7d58('0xd8')][_0x7d58('0xd9')]){_0x36e985[_0x7d58('0xd9')]=_0x11d726[_0x7d58('0xd8')]['service'];}else{_0x36e985[_0x7d58('0xda')]=_0x11d726[_0x7d58('0xd8')][_0x7d58('0xda')];_0x36e985[_0x7d58('0xdb')]=_0x11d726[_0x7d58('0xd8')][_0x7d58('0xdb')];_0x36e985['secure']=_0x11d726['Smtp'][_0x7d58('0xdc')];}if(_0x11d726[_0x7d58('0xd8')]['authentication']){_0x36e985['auth']={'user':_0x11d726['Smtp'][_0x7d58('0xdd')],'pass':_0x11d726[_0x7d58('0xd8')]['pass']};}return respondWithRpcPromise('SendMail','sendMail',{'account':_0x36e985,'message':{'from':util[_0x7d58('0x66')](_0x7d58('0xde'),_0x11d726[_0x7d58('0x32')],_0x11d726[_0x7d58('0xdf')]||_0x11d726[_0x7d58('0xd8')]['user']),'to':_0x20fa6c['body'][_0x7d58('0xe0')],'subject':_0x7d58('0xe1'),'text':util[_0x7d58('0x66')]('Hi\x20%s,\x20attached\x20you\x20can\x20find\x20your\x20transcript\x20file.\x20\x0a\x0aRegards.\x20\x0a\x0a',_0x20fa6c[_0x7d58('0xae')][_0x7d58('0xe0')]),'attachments':[{'path':_0x5e8351}]}})[_0x7d58('0x1b')](function(){return _0x1d36f2;})['catch'](function(_0x164d57){console[_0x7d58('0x20')](_0x164d57);});}else{return _0x1d36f2;}})[_0x7d58('0x1b')](respondWithStatusCode(_0x353a16,0xc8))[_0x7d58('0x24')](handleError(_0x353a16,null));};exports[_0x7d58('0xe2')]=function(_0x4bae96,_0x53b288,_0x4574e2){return db[_0x7d58('0x36')][_0x7d58('0xac')]({'where':{'id':_0x4bae96[_0x7d58('0xa8')]['id']}})[_0x7d58('0x1b')](handleEntityNotFound(_0x53b288,null))['then'](function(_0x54933f){if(_0x54933f){return _0x54933f[_0x7d58('0xe2')](_0x4bae96[_0x7d58('0xae')][_0x7d58('0xe3')],_[_0x7d58('0xe4')](_0x4bae96['body'],['ids','id'])||{});}})['then'](respondWithResult(_0x53b288,null))[_0x7d58('0x24')](handleError(_0x53b288,null));};exports[_0x7d58('0xe5')]=function(_0x456ab4,_0x2bebf9,_0x91412d){var _0x4d9421={'raw':![],'where':{}};var _0x5839c3={};var _0x34fec0={'count':0x0,'rows':[]};return db[_0x7d58('0x3e')][_0x7d58('0xbb')]({'where':{'id':_0x456ab4[_0x7d58('0xa8')]['id']}})[_0x7d58('0x1b')](handleEntityNotFound(_0x2bebf9,null))['then'](function(_0x54bf12){if(_0x54bf12){_0x5839c3['model']=_['keys'](db[_0x7d58('0x36')][_0x7d58('0x3f')]);_0x5839c3[_0x7d58('0x42')]=_[_0x7d58('0x41')](_0x456ab4['query']);_0x5839c3['filters']=_[_0x7d58('0x44')](_0x5839c3[_0x7d58('0x40')],_0x5839c3[_0x7d58('0x42')]);_0x4d9421[_0x7d58('0xa9')]=_[_0x7d58('0x44')](_0x5839c3['model'],qs[_0x7d58('0x45')](_0x456ab4['query'][_0x7d58('0x45')]));_0x4d9421[_0x7d58('0xa9')]=_0x4d9421[_0x7d58('0xa9')][_0x7d58('0x46')]?_0x4d9421[_0x7d58('0xa9')]:_0x5839c3['model'];if(!_0x456ab4[_0x7d58('0x42')][_0x7d58('0x47')](_0x7d58('0xe6'))){_0x4d9421[_0x7d58('0x2b')]=qs[_0x7d58('0x2b')](_0x456ab4[_0x7d58('0x42')][_0x7d58('0x2b')]);_0x4d9421[_0x7d58('0x2a')]=qs['offset'](_0x456ab4['query'][_0x7d58('0x2a')]);}_0x4d9421['order']=qs[_0x7d58('0x48')](_0x456ab4['query'][_0x7d58('0x48')]);_0x4d9421[_0x7d58('0x49')]=qs[_0x7d58('0x43')](_[_0x7d58('0x4a')](_0x456ab4[_0x7d58('0x42')],_0x5839c3[_0x7d58('0x43')]));_0x4d9421[_0x7d58('0x49')][_0x7d58('0xe7')]=_0x54bf12['id'];if(_0x456ab4[_0x7d58('0x42')][_0x7d58('0x77')]){_0x4d9421['where']=_[_0x7d58('0x9b')](_0x4d9421[_0x7d58('0x49')],{'$or':_[_0x7d58('0x38')](_0x4d9421['attributes'],function(_0x546af9){var _0x3b8a70={};_0x3b8a70[_0x546af9]={'$like':'%'+_0x456ab4['query'][_0x7d58('0x77')]+'%'};return _0x3b8a70;})});}if(_0x456ab4[_0x7d58('0x42')][_0x7d58('0x7b')]){var _0x3a2640=_0x456ab4['query'][_0x7d58('0x7b')][_0x7d58('0x3b')](',');var _0x20bbb8={};_0x20bbb8[_0x3a2640[0x0]]={'$gte':moment(_0x3a2640[0x1])[_0x7d58('0x66')](_0x7d58('0xe8'))};_0x4d9421[_0x7d58('0x49')]=_[_0x7d58('0x9b')](_0x4d9421['where'],_0x20bbb8);}_0x4d9421=_[_0x7d58('0x9b')]({},_0x4d9421,_0x456ab4['options']);return db['ChatMessage']['count']({'where':_0x4d9421[_0x7d58('0x49')]})[_0x7d58('0x1b')](function(_0x4795e6){_0x34fec0['count']=_0x4795e6;if(_0x456ab4[_0x7d58('0x42')]['includeAll']){_0x4d9421[_0x7d58('0xaa')]=[{'all':!![]}];}return db[_0x7d58('0x36')][_0x7d58('0xe9')](_0x4d9421);})['then'](function(_0xa62c27){_0x34fec0['rows']=_0xa62c27;return _0x34fec0;});}})['then'](respondWithFilteredResult(_0x2bebf9,_0x4d9421))[_0x7d58('0x24')](handleError(_0x2bebf9,null));};exports[_0x7d58('0xea')]=function(_0x2eb60f,_0x2bc4e5,_0x19653f){var _0xda2a74={'where':{}},_0x187b43={},_0x4201cf={'count':0x0,'rows':[]};return db[_0x7d58('0x3e')][_0x7d58('0xbb')]({'where':{'id':_0x2eb60f[_0x7d58('0xa8')]['id']}})[_0x7d58('0x1b')](handleEntityNotFound(_0x2bc4e5,null))['then'](function(_0x5965cc){if(_0x5965cc){_0x187b43[_0x7d58('0x40')]=_['keys'](db['ChatMessage'][_0x7d58('0x3f')]);_0x187b43[_0x7d58('0x42')]=_[_0x7d58('0x41')](_0x2eb60f[_0x7d58('0x42')]);_0x187b43['filters']=_['intersection'](_0x187b43[_0x7d58('0x40')],_0x187b43['query']);_0xda2a74[_0x7d58('0xa9')]=_[_0x7d58('0x44')](_0x187b43['model'],qs[_0x7d58('0x45')](_0x2eb60f[_0x7d58('0x42')][_0x7d58('0x45')]));_0xda2a74['attributes']=_0xda2a74[_0x7d58('0xa9')][_0x7d58('0x46')]?_0xda2a74[_0x7d58('0xa9')]:_0x187b43[_0x7d58('0x40')];if(!_0x2eb60f[_0x7d58('0x42')][_0x7d58('0x47')](_0x7d58('0xe6'))){_0xda2a74[_0x7d58('0x2b')]=qs['limit'](_0x2eb60f[_0x7d58('0x42')][_0x7d58('0x2b')]);_0xda2a74['offset']=qs['offset'](_0x2eb60f[_0x7d58('0x42')][_0x7d58('0x2a')]);}_0xda2a74[_0x7d58('0xeb')]=qs[_0x7d58('0x48')](_0x2eb60f[_0x7d58('0x42')][_0x7d58('0x48')]);_0xda2a74[_0x7d58('0x49')]=qs[_0x7d58('0x43')](_[_0x7d58('0x4a')](_0x2eb60f[_0x7d58('0x42')],_0x187b43[_0x7d58('0x43')]));_0xda2a74[_0x7d58('0x49')][_0x7d58('0xe7')]=_0x5965cc['id'];if(_0x2eb60f[_0x7d58('0x42')][_0x7d58('0x77')]){_0xda2a74[_0x7d58('0x49')]=_[_0x7d58('0x9b')](_0xda2a74[_0x7d58('0x49')],{'$or':_['map'](_0xda2a74[_0x7d58('0xa9')],function(_0x3784a5){var _0xc70fca={};_0xc70fca[_0x3784a5]={'$like':'%'+_0x2eb60f[_0x7d58('0x42')]['filter']+'%'};return _0xc70fca;})});}_0xda2a74[_0x7d58('0x49')][_0x7d58('0xd5')]=![];if(_0x2eb60f['query']['id']){_0xda2a74[_0x7d58('0x49')]['id']={'$gt':_0x2eb60f[_0x7d58('0x42')]['id']};}_0xda2a74=_[_0x7d58('0x9b')]({},_0xda2a74,_0x2eb60f[_0x7d58('0xab')]);return db[_0x7d58('0x36')][_0x7d58('0x29')]({'where':_0xda2a74[_0x7d58('0x49')]})[_0x7d58('0x1b')](function(_0x5715f1){_0x4201cf['count']=_0x5715f1;_0xda2a74['include']=[];if(_0x2eb60f['query'][_0x7d58('0xec')]){_0xda2a74[_0x7d58('0xaa')][_0x7d58('0x83')]({'model':db['User'],'as':_0x7d58('0xc6'),'attributes':['id',_0x7d58('0xd0'),_0x7d58('0xcf')]});}if(_0x2eb60f['query']['includeAll']){_0xda2a74[_0x7d58('0xaa')]=[{'all':!![]}];}return db[_0x7d58('0x36')][_0x7d58('0xe9')](_0xda2a74);})['then'](function(_0x3c93c9){_0x4201cf[_0x7d58('0xa6')]=_0x3c93c9;return _0x4201cf;});}})[_0x7d58('0x1b')](respondWithFilteredResult(_0x2bc4e5,_0xda2a74))[_0x7d58('0x24')](handleError(_0x2bc4e5,null));};exports[_0x7d58('0xed')]=function(_0x19cdaa,_0xf333b5,_0x53a5b2){return db[_0x7d58('0x3e')][_0x7d58('0xac')]({'where':{'id':_0x19cdaa[_0x7d58('0xa8')]['id']}})[_0x7d58('0x1b')](handleEntityNotFound(_0xf333b5,null))[_0x7d58('0x1b')](function(_0x33665d){if(_0x33665d){return _0x33665d[_0x7d58('0xee')](_0x19cdaa[_0x7d58('0xae')][_0x7d58('0xe3')],_[_0x7d58('0xe4')](_0x19cdaa[_0x7d58('0xae')],[_0x7d58('0xe3'),'id'])||{})['spread'](function(){return db[_0x7d58('0xef')][_0x7d58('0xe9')]({'attributes':['id',_0x7d58('0x32'),_0x7d58('0x4c')],'where':{'id':_0x19cdaa['body'][_0x7d58('0xe3')]}});})[_0x7d58('0x1b')](function(_0x5a719e){socket[_0x7d58('0xf0')](_0x7d58('0xf1'),{'id':Number(_0x19cdaa[_0x7d58('0xa8')]['id']),'tags':_0x5a719e||[]});return{'id':Number(_0x19cdaa[_0x7d58('0xa8')]['id']),'tags':_0x5a719e||[]};});}})[_0x7d58('0x1b')](respondWithResult(_0xf333b5,null))['catch'](handleError(_0xf333b5,null));};exports['removeTags']=function(_0xb45f78,_0x56e9c6,_0x592c9b){return db[_0x7d58('0x3e')]['find']({'where':{'id':_0xb45f78[_0x7d58('0xa8')]['id']}})['then'](handleEntityNotFound(_0x56e9c6,null))[_0x7d58('0x1b')](function(_0x811c99){if(_0x811c99){return _0x811c99[_0x7d58('0xf2')](_0xb45f78[_0x7d58('0x42')][_0x7d58('0xe3')]);}})[_0x7d58('0x1b')](respondWithStatusCode(_0x56e9c6,null))[_0x7d58('0x24')](handleError(_0x56e9c6,null));};exports[_0x7d58('0xbe')]=function(_0x3c8cec,_0x35be81){var _0x28c8ca=moment()[_0x7d58('0xf3')]()['toString']();var _0x41c0f0=path['join'](config[_0x7d58('0xbf')],_0x7d58('0xf4'),_0x7d58('0xf5'),_0x7d58('0xf6'));var _0x2596eb=path[_0x7d58('0x85')](config['root'],_0x7d58('0xf4'),_0x7d58('0xf5'),_0x7d58('0xf7'));var _0x3d5722=path[_0x7d58('0x85')](_0x41c0f0,_0x28c8ca);var _0x339ee5=util['format']('transcript-%d-%s.zip',_0x3c8cec[_0x7d58('0xa8')]['id'],_0x28c8ca);var _0x229ac5=path['join'](_0x41c0f0,_0x339ee5);var _0x1497c1=![];return db[_0x7d58('0x3e')]['find']({'where':{'id':_0x3c8cec[_0x7d58('0xa8')]['id']},'include':[{'model':db[_0x7d58('0x36')],'as':_0x7d58('0xc9'),'attributes':['id',_0x7d58('0xae'),_0x7d58('0x61'),_0x7d58('0xd4'),_0x7d58('0xd5')],'include':[{'model':db[_0x7d58('0xc6')],'as':_0x7d58('0xc6'),'attributes':['id',_0x7d58('0xd0')],'raw':!![]},{'model':db[_0x7d58('0xc8')],'as':'Contact','attributes':['id',_0x7d58('0xf8'),_0x7d58('0xf9')],'raw':!![]},{'model':db[_0x7d58('0xfa')],'as':_0x7d58('0xfa'),'raw':!![]}]},{'model':db[_0x7d58('0xfb')],'as':_0x7d58('0xfc'),'attributes':['id','name']},{'model':db['User'],'as':'Owner','attributes':['id',_0x7d58('0xd0')]}]})[_0x7d58('0x1b')](handleEntityNotFound(_0x35be81,null))[_0x7d58('0x1b')](function(_0x24ed49){if(_0x24ed49){var _0x569de5=_0x24ed49['get']({'plain':!![]});_0x1497c1=!![];var _0xa01b4a={'format':'A4','border':'10px','header':{'height':'40px','contents':{'first':'<div\x20class=\x22header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h5>Interaction\x20Transcript</h5>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>'}},'footer':{'height':'30px','contents':{'default':util[_0x7d58('0x66')](_0x7d58('0xfd'),util['format'](_0x7d58('0xfe'),_0x7d58('0xff'),_0x569de5['id']),moment()[_0x7d58('0x66')]('YYYY-MM-DD')[_0x7d58('0x84')]())}}};fs[_0x7d58('0x100')](_0x3d5722);var _0x1c8031={'channel':_0x7d58('0xff'),'account':_0x569de5['Account'][_0x7d58('0x32')],'agent':_0x569de5[_0x7d58('0x101')]?_0x569de5['Owner']['fullname']:_0x7d58('0x102'),'createdAt':moment(_0x569de5[_0x7d58('0x61')])['format'](_0x7d58('0xe8'))[_0x7d58('0x84')](),'closedAt':_0x569de5[_0x7d58('0x34')]?moment(_0x569de5['closedAt'])[_0x7d58('0x66')](_0x7d58('0xe8'))[_0x7d58('0x84')]():'','disposition':_0x569de5[_0x7d58('0x103')],'chatInfo':{'browser':_0x569de5[_0x7d58('0x104')],'os':_0x569de5[_0x7d58('0x105')],'referer':_0x569de5[_0x7d58('0x106')],'customerIp':_0x569de5[_0x7d58('0x107')]},'messages':_(_0x569de5[_0x7d58('0xc9')])['tail']()['filter']({'secret':![]})[_0x7d58('0x38')](function(_0x450304){if(_0x450304[_0x7d58('0xfa')]){var _0x21e635=path['join'](_0x2596eb,_0x450304[_0x7d58('0xfa')][_0x7d58('0xb8')]);if(fs[_0x7d58('0x108')](_0x21e635)){fs[_0x7d58('0x109')](_0x21e635)[_0x7d58('0x10a')](fs[_0x7d58('0x10b')](path[_0x7d58('0x85')](_0x3d5722,_0x450304[_0x7d58('0xfa')][_0x7d58('0xb8')])));}}return{'date':moment(_0x450304[_0x7d58('0x61')])[_0x7d58('0x66')](_0x7d58('0xe8'))[_0x7d58('0x84')](),'sender':_0x450304[_0x7d58('0xd4')]===_0x7d58('0x10c')?_0x450304[_0x7d58('0xc6')]?_0x450304[_0x7d58('0xc6')]['fullname']:'System':_0x450304['Contact'][_0x7d58('0xf8')]+(_0x450304['Contact']['lastName']?'\x20'+_0x450304[_0x7d58('0x10d')][_0x7d58('0xf9')]:''),'body':_0x450304[_0x7d58('0xfa')]?_0x450304[_0x7d58('0xfa')][_0x7d58('0xb8')]:_0x450304[_0x7d58('0xae')],'direction':_0x450304[_0x7d58('0xd4')]===_0x7d58('0x10c')?'A':'C','secret':_0x450304[_0x7d58('0xd5')],'attachment':_0x450304[_0x7d58('0xfa')]};})[_0x7d58('0x62')]()};return ejs[_0x7d58('0x10e')](path['join'](config[_0x7d58('0xbf')],_0x7d58('0xf4'),_0x7d58('0x10f'),'downloadInteraction.html'),{'interaction':_0x1c8031})[_0x7d58('0x1b')](function(_0x427dc7){return new BPromise(function(_0x4b61a9,_0x21c839){pdf['create'](_0x427dc7,_0xa01b4a)[_0x7d58('0x110')](path[_0x7d58('0x85')](_0x3d5722,_0x7d58('0x111')+_0x569de5['id']+'-'+_0x28c8ca+_0x7d58('0x112')),function(_0xe74e4,_0x5a9cc3){if(_0xe74e4)return _0x21c839(_0xe74e4);_0x4b61a9(_0x5a9cc3);});});});}})[_0x7d58('0x1b')](function(){if(_0x1497c1){return new BPromise(function(_0x28b7df,_0x5d96e7){zipdir(_0x3d5722,{'saveTo':_0x229ac5},function(_0xe76d2,_0x3897e0){if(_0xe76d2)return _0x5d96e7(_0xe76d2);return _0x28b7df(_0x3897e0);});})[_0x7d58('0x1b')](function(){return new BPromise(function(_0x87a9d4,_0x5ba61d){rimraf(_0x3d5722,function(_0x449246){if(_0x449246)_0x5ba61d(_0x449246);return _0x87a9d4();});});})['then'](function(){return _0x35be81['download'](_0x229ac5,_0x339ee5,function(_0x295d6a){if(_0x295d6a){console[_0x7d58('0x113')](_0x7d58('0x114'),_0x295d6a);}else{fs['unlinkSync'](_0x229ac5);}});});}else{return _0x35be81[_0x7d58('0x25')](0xc8);}})[_0x7d58('0x24')](handleError(_0x35be81,null));};
\ No newline at end of file
+var _0xb10b=['firstName','renderFile','views','downloadInteraction.html','transcript-','log','html-pdf','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../config/logger','api','../../config/utils','../../mysqldb','defaults','redis','localhost','socket.io-emitter','./chatInteraction.socket','jayson/promise','client','http','test','request','then','ChatInteraction,\x20%s,\x20%s','request\x20sent','debug','ChatInteraction,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','catch','sendStatus','status','end','json','offset','limit','Content-Range','apply','reject','save','update','destroy','stack','name','send','TagIds','Tags','split','forEach','index','ChatInteraction','rawAttributes','query','filters','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','select','field','color','from','tools_tags','COUNT(*)','chat_messages','where','me.ChatInteractionId\x20=\x20i.id','me.direction\x20=\x20\x27in\x27','me.read\x20=\x20false','u.id','ui.ChatInteractionId','user_has_chat_interactions','users','u.id\x20=\x20ui.UserId','chat_interactions','left_join','cm_contacts','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL','o.id\x20=\x20i.UserId','chat_websites','a.id\x20=\x20i.ChatWebsiteId','me.ChatInteractionId\x20=\x20i.id\x20AND\x20me.direction\x20=\x20\x27in\x27\x20AND\x20me.read\x20=\x20false','expr','advancedFilter','parse','keys','createdAt','value','dateStart','startOf','day','utc','endOf','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','isArray','condition','TagId','unreadMessages','and','tableAlias','\x20=\x20?','ContactId','c.firstName','\x20LIKE\x20?','c.lastName','\x20<\x20?','\x20IN\x20?','LIKE','filter','isNil','ChatWebsiteId','i.ChatWebsiteId\x20IN\x20?','concat','$gte','$lte','null','replace','\x27\x27\x27\x27','isNumeric','i.id\x20LIKE\x20?','push','join','MATCH\x20(me.body)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?','DESC','Sequelize','QueryTypes','clone','COUNT(me.id)','read','having','`unreadMessages`\x20=\x200','`unreadMessages`\x20>\x200','tag','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','chat_interaction_has_tags','it.ChatInteractionId\x20=\x20i.id','t.id\x20=\x20it.TagId','mail_interaction_has_tags','it.MailInteractionId\x20=\x20i.id','t.id\x20IN\x20?','sequelize','toString','count','keyBy','merge','Account.key','i.*','Contact.firstName','Contact.lastName','c.email','c.phone','c.mobile','c.fax','Contact.fax','GROUP_CONCAT(DISTINCT\x20t.id)','ui.ChatInteractionId\x20IN\x20?','map','groupBy','ChatInteractionId','all','rows','show','intersection','include','options','find','create','body','params','describe','abandon','abandonInteraction,\x20%s,\x20%s,\x20%s','entity\x20not\x20found','UserId','disposition','attachmentUpload','file','originalname','mimetype','Attachment','attachmentDownload','findOne','Unauthorized','attachId','root','server/files/attachments/','close','mailTranscript','server/files/chat/upload/','format','transcript-%s.txt','now','ChatMessage','User','ChatWebsite','Messages','%s%d','agentAlias','System','Visitor','website_alias','agent_alias','alias','fullname','[%s]\x20%s:\x20%s\x0a','MM/DD/YYYY\x20HH:mm:ss','direction','secret','MailAccount','Smtp','service','host','port','secure','authentication','auth','pass','SendMail','sendMail','\x22%s\x22\x20<%s>','email','user','Mail\x20Transcript','addMessage','ids','getMessages','YYYY-MM-DD\x20HH:mm:ss','includeAll','getMyMessages','findAll','setTags','omit','Tag','emit','chatInteractionTags:save','removeTags','download','unix','server','tmp','attachments','Contact','lastName','Account','Owner','get','10px','<div\x20class=\x22header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h5>Interaction\x20Transcript</h5>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>','30px','<hr\x20class=\x22separator\x22/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22footer\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22left\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>%s</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>{{page}}/{{pages}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22right\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>%s</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>','%s\x20#%d','Chat','YYYY-MM-DD','N.A.','closed','closedAt','browserName','referer','customerIp','basename','existsSync','createReadStream','pipe','createWriteStream','out'];(function(_0x5037ab,_0x43209e){var _0x512adb=function(_0x261783){while(--_0x261783){_0x5037ab['push'](_0x5037ab['shift']());}};_0x512adb(++_0x43209e);}(_0xb10b,0x12a));var _0xbb10=function(_0x3e6b83,_0x224b71){_0x3e6b83=_0x3e6b83-0x0;var _0x599977=_0xb10b[_0x3e6b83];return _0x599977;};'use strict';var pdf=require(_0xbb10('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xbb10('0x1'));var zipdir=require(_0xbb10('0x2'));var jsonpatch=require(_0xbb10('0x3'));var rp=require('request-promise');var moment=require(_0xbb10('0x4'));var BPromise=require(_0xbb10('0x5'));var Mustache=require(_0xbb10('0x6'));var util=require(_0xbb10('0x7'));var path=require(_0xbb10('0x8'));var sox=require(_0xbb10('0x9'));var csv=require('to-csv');var ejs=require(_0xbb10('0xa'));var fs=require('fs');var _=require(_0xbb10('0xb'));var squel=require('squel');var crypto=require(_0xbb10('0xc'));var jsforce=require(_0xbb10('0xd'));var deskjs=require(_0xbb10('0xe'));var toCsv=require(_0xbb10('0xf'));var querystring=require(_0xbb10('0x10'));var Papa=require(_0xbb10('0x11'));var Redis=require(_0xbb10('0x12'));var authService=require(_0xbb10('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xbb10('0x14'))(_0xbb10('0x15'));var utils=require(_0xbb10('0x16'));var config=require('../../config/environment');var db=require(_0xbb10('0x17'))['db'];config['redis']=_[_0xbb10('0x18')](config[_0xbb10('0x19')],{'host':_0xbb10('0x1a'),'port':0x18eb});var socket=require(_0xbb10('0x1b'))(new Redis(config[_0xbb10('0x19')]));require(_0xbb10('0x1c'))['register'](socket);var jayson=require(_0xbb10('0x1d'));var client=jayson[_0xbb10('0x1e')][_0xbb10('0x1f')]({'port':0x232b});var client9004=jayson[_0xbb10('0x1e')][_0xbb10('0x1f')]({'port':0x232c});function checkPasswordPattern(_0x2f2ebf,_0x24a57b,_0x36b5e8){if(_0x36b5e8){var _0x3e26f4=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3e26f4[_0xbb10('0x20')](_0x24a57b)){return _0x2f2ebf;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x2f2ebf;}}function respondWithRpcPromise(_0x2eca0f,_0x1145f1,_0x133ac2,_0x42db98){return new BPromise(function(_0x378da8,_0x1682a4){var _0x575cca=_0x42db98||client;return _0x575cca[_0xbb10('0x21')](_0x2eca0f,_0x133ac2)[_0xbb10('0x22')](function(_0xe1c665){logger['info'](_0xbb10('0x23'),_0x1145f1,_0xbb10('0x24'));logger[_0xbb10('0x25')](_0xbb10('0x26'),_0x1145f1,_0xbb10('0x24'),JSON[_0xbb10('0x27')](_0xe1c665));if(_0xe1c665['error']){if(_0xe1c665[_0xbb10('0x28')][_0xbb10('0x29')]===0x1f4){logger['error']('ChatInteraction,\x20%s,\x20%s',_0x1145f1,_0xe1c665[_0xbb10('0x28')][_0xbb10('0x2a')]);return _0x1682a4(_0xe1c665[_0xbb10('0x28')][_0xbb10('0x2a')]);}logger[_0xbb10('0x28')](_0xbb10('0x23'),_0x1145f1,_0xe1c665[_0xbb10('0x28')][_0xbb10('0x2a')]);return _0x378da8(_0xe1c665[_0xbb10('0x28')][_0xbb10('0x2a')]);}else{logger[_0xbb10('0x2b')](_0xbb10('0x23'),_0x1145f1,'request\x20sent');_0x378da8(_0xe1c665['result']['message']);}})[_0xbb10('0x2c')](function(_0x3c5ae7){logger[_0xbb10('0x28')]('ChatInteraction,\x20%s,\x20%s',_0x1145f1,_0x3c5ae7);_0x1682a4(_0x3c5ae7);});});}function respondWithStatusCode(_0x2fdde9,_0x24d586){_0x24d586=_0x24d586||0xcc;return function(_0x6ed43b){if(_0x6ed43b){return _0x2fdde9[_0xbb10('0x2d')](_0x24d586);}return _0x2fdde9[_0xbb10('0x2e')](_0x24d586)[_0xbb10('0x2f')]();};}function respondWithResult(_0x2a0e8b,_0x4aabb9){_0x4aabb9=_0x4aabb9||0xc8;return function(_0x3796c7){if(_0x3796c7){return _0x2a0e8b[_0xbb10('0x2e')](_0x4aabb9)[_0xbb10('0x30')](_0x3796c7);}};}function respondWithFilteredResult(_0x2e0249,_0x1d30aa){return function(_0x2ff4c1){if(_0x2ff4c1){var _0x5d5c80=_0x2ff4c1['count'],_0x221624=_0x1d30aa[_0xbb10('0x31')],_0x4ee02e=_0x1d30aa[_0xbb10('0x31')]+_0x1d30aa[_0xbb10('0x32')],_0x448d5c;if(_0x4ee02e>=_0x5d5c80){_0x4ee02e=_0x5d5c80;_0x448d5c=0xc8;}else{_0x448d5c=0xce;}_0x2e0249['status'](_0x448d5c);return _0x2e0249['set'](_0xbb10('0x33'),_0x221624+'-'+_0x4ee02e+'/'+_0x5d5c80)[_0xbb10('0x30')](_0x2ff4c1);}return null;};}function patchUpdates(_0x4f590d){return function(_0x359ad4){try{jsonpatch[_0xbb10('0x34')](_0x359ad4,_0x4f590d,!![]);}catch(_0x2f653f){return BPromise[_0xbb10('0x35')](_0x2f653f);}return _0x359ad4[_0xbb10('0x36')]();};}function saveUpdates(_0x138bc6,_0xf85197){return function(_0x4975f5){if(_0x4975f5){return _0x4975f5[_0xbb10('0x37')](_0x138bc6)[_0xbb10('0x22')](function(_0x441d15){return _0x441d15;});}return null;};}function removeEntity(_0x8c1ce6,_0xfb2c5e){return function(_0x9de708){if(_0x9de708){return _0x9de708[_0xbb10('0x38')]()[_0xbb10('0x22')](function(){_0x8c1ce6[_0xbb10('0x2e')](0xcc)['end']();});}};}function handleEntityNotFound(_0x2b5352,_0x150107){return function(_0x1ddd9e){if(!_0x1ddd9e){_0x2b5352[_0xbb10('0x2d')](0x194);}return _0x1ddd9e;};}function handleError(_0x570f5a,_0x111762){_0x111762=_0x111762||0x1f4;return function(_0x5de37b){logger['error'](_0x5de37b[_0xbb10('0x39')]);if(_0x5de37b[_0xbb10('0x3a')]){delete _0x5de37b[_0xbb10('0x3a')];}_0x570f5a[_0xbb10('0x2e')](_0x111762)[_0xbb10('0x3b')](_0x5de37b);};}function getInteractionUsers(_0x29d11a,_0x547062){return new BPromise(function(_0x1e5bbd,_0x25d72f){try{if(_0x547062[_0x29d11a['id']]){_0x29d11a['Users']=_['map'](_0x547062[_0x29d11a['id']],function(_0x5cd55f){return{'id':_0x5cd55f['id']};});}}catch(_0x31bee3){_0x25d72f(_0x31bee3);}_0x1e5bbd(_0x29d11a);});}function getInteractionTags(_0x2b0b45,_0x2b658a){return new BPromise(function(_0x4d5a9b,_0x3c0cd7){try{if(_0x2b0b45[_0xbb10('0x3c')]){_0x2b0b45[_0xbb10('0x3d')]=[];_0x2b0b45['TagIds'][_0xbb10('0x3e')](',')[_0xbb10('0x3f')](function(_0x1dcd38){_0x2b0b45[_0xbb10('0x3d')]['push'](_0x2b658a[_0x1dcd38]);});}delete _0x2b0b45[_0xbb10('0x3c')];}catch(_0x110eb5){_0x3c0cd7(_0x110eb5);}_0x4d5a9b(_0x2b0b45);});}function updateChatInteraction(_0x5835fd,_0xe2040f,_0x2e3214){return new BPromise(function(_0x44d6ae,_0x3a9934){return getInteractionUsers(_0x5835fd,_0x2e3214)[_0xbb10('0x22')](function(_0x185a52){return getInteractionTags(_0x185a52,_0xe2040f);})['then'](function(_0x1e8f79){_0x44d6ae(_0x1e8f79);})[_0xbb10('0x2c')](function(_0x3e7b4c){_0x3a9934(_0x3e7b4c);});});}exports[_0xbb10('0x40')]=function(_0x4943d9,_0x3fff6c){var _0x331751={},_0x23dc18={},_0x403beb={'count':0x0,'rows':[]};var _0x5e2cfa=db[_0xbb10('0x41')][_0xbb10('0x42')];_0x23dc18['model']=_['keys'](_0x5e2cfa);_0x23dc18[_0xbb10('0x43')]=_['keys'](_0x4943d9[_0xbb10('0x43')]);_0x23dc18[_0xbb10('0x44')]=_['intersection'](_0x23dc18[_0xbb10('0x45')],_0x23dc18[_0xbb10('0x43')]);_0x331751[_0xbb10('0x46')]=_['intersection'](_0x23dc18[_0xbb10('0x45')],qs[_0xbb10('0x47')](_0x4943d9[_0xbb10('0x43')][_0xbb10('0x47')]));_0x331751[_0xbb10('0x46')]=_0x331751[_0xbb10('0x46')][_0xbb10('0x48')]?_0x331751[_0xbb10('0x46')]:_0x23dc18[_0xbb10('0x45')];if(!_0x4943d9[_0xbb10('0x43')][_0xbb10('0x49')](_0xbb10('0x4a'))){_0x331751['limit']=qs[_0xbb10('0x32')](_0x4943d9[_0xbb10('0x43')]['limit']);_0x331751[_0xbb10('0x31')]=qs[_0xbb10('0x31')](_0x4943d9[_0xbb10('0x43')][_0xbb10('0x31')]);}_0x331751[_0xbb10('0x4b')]=qs[_0xbb10('0x4c')](_0x4943d9[_0xbb10('0x43')]['sort']);_0x331751['where']=qs[_0xbb10('0x44')](_[_0xbb10('0x4d')](_0x4943d9[_0xbb10('0x43')],_0x23dc18['filters']));var _0x5f0c12=[];var _0x3cd6f3=squel[_0xbb10('0x4e')]()[_0xbb10('0x4f')]('id')[_0xbb10('0x4f')](_0xbb10('0x3a'))[_0xbb10('0x4f')](_0xbb10('0x50'))[_0xbb10('0x51')](_0xbb10('0x52'));var _0x3d7e7e=squel['select']()['field'](_0xbb10('0x53'))[_0xbb10('0x51')](_0xbb10('0x54'),'me')[_0xbb10('0x55')](_0xbb10('0x56'))[_0xbb10('0x55')](_0xbb10('0x57'))[_0xbb10('0x55')](_0xbb10('0x58'));var _0x1214f7=squel[_0xbb10('0x4e')]()[_0xbb10('0x4f')](_0xbb10('0x59'))[_0xbb10('0x4f')](_0xbb10('0x5a'))['from'](_0xbb10('0x5b'),'ui')['left_join'](_0xbb10('0x5c'),'u',_0xbb10('0x5d'));var _0x1ffe20=squel[_0xbb10('0x4e')]()[_0xbb10('0x51')](_0xbb10('0x5e'),'i')[_0xbb10('0x5f')](_0xbb10('0x60'),'c',_0xbb10('0x61'))[_0xbb10('0x5f')](_0xbb10('0x5c'),'o',_0xbb10('0x62'))[_0xbb10('0x5f')](_0xbb10('0x63'),'a',_0xbb10('0x64'))['left_join'](_0xbb10('0x54'),'me',_0xbb10('0x65'));var _0x1b83a9=squel[_0xbb10('0x66')]();if(_0x4943d9[_0xbb10('0x43')][_0xbb10('0x67')]){var _0xb25e71=JSON[_0xbb10('0x68')](_0x4943d9[_0xbb10('0x43')][_0xbb10('0x67')]);_[_0xbb10('0x69')](_0xb25e71)[_0xbb10('0x3f')](function(_0x22de7f){var _0x175872=_0xb25e71[_0x22de7f];if(_0x22de7f===_0xbb10('0x6a')){var _0x205e01=moment(_0x175872[_0xbb10('0x6b')][_0xbb10('0x6c')])[_0xbb10('0x6d')](_0xbb10('0x6e'))['utc']()['format']();var _0x16272d=moment(_0x16272d)[_0xbb10('0x6f')]()[_0xbb10('0x70')](_0xbb10('0x6e'))['format']();_0x1b83a9['and'](_0xbb10('0x71'),_0x205e01,_0x16272d);}else{if(_[_0xbb10('0x72')](_0x175872[_0xbb10('0x73')])){_0x175872[_0xbb10('0x73')][_0xbb10('0x3f')](function(_0x3e9753){switch(_0x175872[_0xbb10('0x73')]['value']){case'IS':if(_0x22de7f!==_0xbb10('0x74')&&_0x22de7f!==_0xbb10('0x75')){if(_['isArray'](_0x175872['value'])&&_0x175872['value'][_0xbb10('0x48')]>0x1){_0x1b83a9[_0xbb10('0x76')](_0x175872[_0xbb10('0x77')]+'.'+_0x22de7f+'\x20IN\x20?',_0x175872['value']);}else{_0x1b83a9['and'](_0x175872[_0xbb10('0x77')]+'.'+_0x22de7f+_0xbb10('0x78'),_0x175872[_0xbb10('0x6b')][0x0]);}}break;case'=':_0x1b83a9['and'](_0x175872[_0xbb10('0x77')]+'.'+_0x22de7f+_0xbb10('0x78'),_0x175872['value']);break;case'LIKE':if(_0x22de7f===_0xbb10('0x79')){_0x1b83a9[_0xbb10('0x76')](_0xbb10('0x7a')+_0xbb10('0x7b'),'%'+_0x175872['value']+'%');_0x1b83a9['or'](_0xbb10('0x7c')+_0xbb10('0x7b'),'%'+_0x175872[_0xbb10('0x6b')]+'%');_0x1b83a9['or']('c.email'+_0xbb10('0x7b'),'%'+_0x175872[_0xbb10('0x6b')]+'%');}else{_0x1b83a9[_0xbb10('0x76')](_0x175872['tableAlias']+'.'+_0x22de7f+_0xbb10('0x7b'),'%'+_0x175872[_0xbb10('0x6b')]+'%');}break;case'>':_0x1b83a9[_0xbb10('0x76')](_0x175872[_0xbb10('0x77')]+'.'+_0x22de7f+'\x20>\x20?',_0x175872[_0xbb10('0x6b')]);break;case'<':_0x1b83a9[_0xbb10('0x76')](_0x175872[_0xbb10('0x77')]+'.'+_0x22de7f+_0xbb10('0x7d'),_0x175872['value']);break;}});}else{switch(_0x175872[_0xbb10('0x73')][_0xbb10('0x6b')]){case'IS':if(_0x22de7f!==_0xbb10('0x74')&&_0x22de7f!==_0xbb10('0x75')){if(_[_0xbb10('0x72')](_0x175872[_0xbb10('0x6b')])&&_0x175872[_0xbb10('0x6b')]['length']>0x1){_0x1b83a9['and'](_0x175872['tableAlias']+'.'+_0x22de7f+_0xbb10('0x7e'),_0x175872[_0xbb10('0x6b')]);}else{_0x1b83a9[_0xbb10('0x76')](_0x175872['tableAlias']+'.'+_0x22de7f+'\x20=\x20?',_0x175872[_0xbb10('0x6b')][0x0]);}}break;case'=':_0x1b83a9[_0xbb10('0x76')](_0x175872[_0xbb10('0x77')]+'.'+_0x22de7f+_0xbb10('0x78'),_0x175872[_0xbb10('0x6b')]);break;case _0xbb10('0x7f'):if(_0x22de7f==='ContactId'){_0x1b83a9[_0xbb10('0x76')](_0xbb10('0x7a')+_0xbb10('0x7b'),'%'+_0x175872[_0xbb10('0x6b')]+'%');_0x1b83a9['or'](_0xbb10('0x7c')+'\x20LIKE\x20?','%'+_0x175872['value']+'%');_0x1b83a9['or']('c.email'+_0xbb10('0x7b'),'%'+_0x175872[_0xbb10('0x6b')]+'%');}else{_0x1b83a9[_0xbb10('0x76')](_0x175872[_0xbb10('0x77')]+'.'+_0x22de7f+_0xbb10('0x7b'),'%'+_0x175872[_0xbb10('0x6b')]+'%');}break;case'>':_0x1b83a9['and'](_0x175872[_0xbb10('0x77')]+'.'+_0x22de7f+'\x20>\x20?',_0x175872['value']);break;case'<':_0x1b83a9['and'](_0x175872[_0xbb10('0x77')]+'.'+_0x22de7f+_0xbb10('0x7d'),_0x175872[_0xbb10('0x6b')]);break;}}}});}else{var _0x108f99=_(Object['keys'](_0x4943d9[_0xbb10('0x43')]))['map'](function(_0x576179){return _0x5e2cfa[_0xbb10('0x49')](_0x576179)?_0x576179:undefined;})[_0xbb10('0x80')](function(_0x29529c){return!_[_0xbb10('0x81')](_0x29529c);})[_0xbb10('0x6b')]();if(!_['isEmpty'](_0x108f99)){_0x108f99[_0xbb10('0x3f')](function(_0x19fcec){if(_0x19fcec===_0xbb10('0x82')){_0x1ffe20[_0xbb10('0x55')](_0xbb10('0x83'),[][_0xbb10('0x84')](_0x4943d9[_0xbb10('0x43')][_0x19fcec]));}else if(_0x19fcec==='createdAt'){var _0x387b10=JSON[_0xbb10('0x68')](_0x4943d9[_0xbb10('0x43')][_0x19fcec])[_0xbb10('0x85')];var _0x37b20e=JSON[_0xbb10('0x68')](_0x4943d9[_0xbb10('0x43')][_0x19fcec])[_0xbb10('0x86')];_0x1ffe20['where'](_0xbb10('0x71'),_0x387b10,_0x37b20e);}else{if(_0x4943d9[_0xbb10('0x43')][_0x19fcec]===_0xbb10('0x87')){_0x1ffe20['where']('i.'+_0x19fcec+'\x20IS\x20NULL');}else{_0x1ffe20['where']('i.'+_0x19fcec+_0xbb10('0x78'),_0x4943d9['query'][_0x19fcec]);}}});}if(_0x4943d9['query'][_0xbb10('0x80')]){var _0x3ee56b=_0x4943d9[_0xbb10('0x43')][_0xbb10('0x80')][_0xbb10('0x88')]('\x5c','\x5c\x5c')[_0xbb10('0x88')]('\x27\x27',_0xbb10('0x89'));if(qs[_0xbb10('0x8a')](_0x3ee56b)){_0x1b83a9['or'](_0xbb10('0x8b'),_0x3ee56b+'%');}else{var _0x5206e1=[];_0x3ee56b[_0xbb10('0x3e')]('\x20')[_0xbb10('0x3f')](function(_0x46b6d2){_0x5206e1[_0xbb10('0x8c')]('+'+_0x46b6d2['toString']());});var _0x4c0795=_0x5206e1[_0xbb10('0x8d')]('\x20');_0x1b83a9['or'](_0xbb10('0x8e'),_0x4c0795)['or'](_0xbb10('0x8f'),_0x3ee56b+'%');}}}_0x1ffe20[_0xbb10('0x55')](_0x1b83a9);if(_0x331751['order']){_0x331751[_0xbb10('0x4b')][_0xbb10('0x3f')](function(_0x3f0d74){_0x1ffe20[_0xbb10('0x4b')]('i.'+_0x3f0d74[0x0],_0x3f0d74[0x1]===_0xbb10('0x90')?![]:!![]);});}_0x1ffe20['group']('i.id');var _0x372636={'type':db[_0xbb10('0x91')][_0xbb10('0x92')]['SELECT'],'raw':!![]};var _0x256b35=_0x1ffe20[_0xbb10('0x93')]()['field']('COUNT(*)')[_0xbb10('0x4f')](_0xbb10('0x94'),_0xbb10('0x75'));if(!_0x4943d9['query'][_0xbb10('0x67')]){if(_0x4943d9[_0xbb10('0x43')][_0xbb10('0x95')]){if(_0x4943d9[_0xbb10('0x43')][_0xbb10('0x95')]==0x1){_0x256b35[_0xbb10('0x96')](_0xbb10('0x97'));_0x1ffe20[_0xbb10('0x96')](_0xbb10('0x97'));}else{_0x256b35['having'](_0xbb10('0x98'));_0x1ffe20[_0xbb10('0x96')](_0xbb10('0x98'));}}if(_0x4943d9[_0xbb10('0x43')][_0xbb10('0x99')]){var _0x39f64b=_[_0xbb10('0x72')](_0x4943d9[_0xbb10('0x43')][_0xbb10('0x99')])?_0x4943d9[_0xbb10('0x43')][_0xbb10('0x99')]:new Array(_0x4943d9[_0xbb10('0x43')]['tag']);var _0x51f106=squel[_0xbb10('0x66')]();_0x39f64b[_0xbb10('0x3f')](function(_0x458615){_0x51f106['or'](_0xbb10('0x9a'),'%,'+_0x458615+',%');});_0x1ffe20[_0xbb10('0x96')](_0x51f106);_0x256b35['left_join'](_0xbb10('0x9b'),'it',_0xbb10('0x9c'));_0x256b35[_0xbb10('0x5f')](_0xbb10('0x52'),'t',_0xbb10('0x9d'));_0x256b35[_0xbb10('0x55')]('t.id\x20IN\x20?',_0x39f64b);}}else{var _0xb25e71=JSON[_0xbb10('0x68')](_0x4943d9['query'][_0xbb10('0x67')]);_['keys'](_0xb25e71)[_0xbb10('0x3f')](function(_0x28bd76){var _0x2b473c=_0xb25e71[_0x28bd76];if(_0x28bd76===_0xbb10('0x74')){var _0x3a4a6e=_0x2b473c['value'];var _0x10d91d=squel['expr']();_0x3a4a6e[_0xbb10('0x3f')](function(_0x37ec93){_0x10d91d['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x37ec93+',%');});_0x1ffe20['having'](_0x10d91d);_0x256b35[_0xbb10('0x5f')](_0xbb10('0x9e'),'it',_0xbb10('0x9f'));_0x256b35[_0xbb10('0x5f')](_0xbb10('0x52'),'t',_0xbb10('0x9d'));_0x256b35[_0xbb10('0x55')](_0xbb10('0xa0'),_0x3a4a6e);}else if(_0x28bd76===_0xbb10('0x75')){if(_0x2b473c[_0xbb10('0x6b')][_0xbb10('0x48')]===0x1){if(_0x2b473c['value'][0x0]===0x1){_0x256b35[_0xbb10('0x96')](_0xbb10('0x97'));_0x1ffe20[_0xbb10('0x96')](_0xbb10('0x97'));}else{_0x256b35[_0xbb10('0x96')](_0xbb10('0x98'));_0x1ffe20[_0xbb10('0x96')](_0xbb10('0x98'));}}}});}db[_0xbb10('0xa1')][_0xbb10('0x43')](_0x256b35[_0xbb10('0xa2')](),_0x372636)[_0xbb10('0x22')](function(_0x499b9d){_0x403beb[_0xbb10('0xa3')]=_0x499b9d['length'];if(_0x403beb[_0xbb10('0xa3')]===0x0)return[];return db[_0xbb10('0xa1')][_0xbb10('0x43')](_0x3cd6f3[_0xbb10('0xa2')](),_0x372636)[_0xbb10('0x22')](function(_0x5371d4){_0x5f0c12=_[_0xbb10('0xa4')](_0x5371d4,'id');_0x372636=_[_0xbb10('0xa5')](_0x372636,{'model':db[_0xbb10('0x41')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x1ffe20[_0xbb10('0x4f')](_0xbb10('0x94'),_0xbb10('0x75'));_0x1ffe20['field']('a.key',_0xbb10('0xa6'));_0x1ffe20[_0xbb10('0x4f')](_0xbb10('0xa7'));_0x1ffe20['field'](_0xbb10('0x7a'),_0xbb10('0xa8'));_0x1ffe20['field'](_0xbb10('0x7c'),_0xbb10('0xa9'));_0x1ffe20['field'](_0xbb10('0xaa'),'Contact.email');_0x1ffe20[_0xbb10('0x4f')](_0xbb10('0xab'),'Contact.phone');_0x1ffe20[_0xbb10('0x4f')](_0xbb10('0xac'),'Contact.mobile');_0x1ffe20['field'](_0xbb10('0xad'),_0xbb10('0xae'));_0x1ffe20[_0xbb10('0x4f')](_0xbb10('0xaf'),_0xbb10('0x3c'));_0x1ffe20['left_join'](_0xbb10('0x9b'),'it',_0xbb10('0x9c'));_0x1ffe20[_0xbb10('0x5f')]('tools_tags','t',_0xbb10('0x9d'));_0x1ffe20[_0xbb10('0x32')](_0x331751[_0xbb10('0x32')]);_0x1ffe20[_0xbb10('0x31')](_0x331751[_0xbb10('0x31')]);return db[_0xbb10('0xa1')][_0xbb10('0x43')](_0x1ffe20[_0xbb10('0xa2')](),_0x372636);})[_0xbb10('0x22')](function(_0x5f1fcd){_0x1214f7['where'](_0xbb10('0xb0'),_[_0xbb10('0xb1')](_0x5f1fcd,'id'));return db[_0xbb10('0xa1')][_0xbb10('0x43')](_0x1214f7[_0xbb10('0xa2')](),_0x372636)[_0xbb10('0x22')](function(_0x1cccec){var _0x1674f7=_[_0xbb10('0xb2')](_0x1cccec,_0xbb10('0xb3'));var _0xcbaf69=[];_0x5f1fcd[_0xbb10('0x3f')](function(_0x2c6d2c){_0xcbaf69['push'](updateChatInteraction(_0x2c6d2c,_0x5f0c12,_0x1674f7));});return BPromise[_0xbb10('0xb4')](_0xcbaf69);});});})[_0xbb10('0x22')](function(_0x24076a){_0x403beb[_0xbb10('0xb5')]=_0x24076a;return _0x403beb;})[_0xbb10('0x22')](respondWithFilteredResult(_0x3fff6c,_0x331751))[_0xbb10('0x2c')](handleError(_0x3fff6c,null));};exports[_0xbb10('0xb6')]=function(_0x1421e2,_0x3c6c45){var _0x3c92f4={'raw':![],'where':{'id':_0x1421e2['params']['id']}},_0x2a1c53={};_0x2a1c53[_0xbb10('0x45')]=_['keys'](db[_0xbb10('0x41')][_0xbb10('0x42')]);_0x2a1c53[_0xbb10('0x43')]=_[_0xbb10('0x69')](_0x1421e2[_0xbb10('0x43')]);_0x2a1c53[_0xbb10('0x44')]=_['intersection'](_0x2a1c53[_0xbb10('0x45')],_0x2a1c53['query']);_0x3c92f4[_0xbb10('0x46')]=_[_0xbb10('0xb7')](_0x2a1c53[_0xbb10('0x45')],qs[_0xbb10('0x47')](_0x1421e2[_0xbb10('0x43')][_0xbb10('0x47')]));_0x3c92f4[_0xbb10('0x46')]=_0x3c92f4[_0xbb10('0x46')][_0xbb10('0x48')]?_0x3c92f4[_0xbb10('0x46')]:_0x2a1c53[_0xbb10('0x45')];if(_0x1421e2[_0xbb10('0x43')]['includeAll']){_0x3c92f4[_0xbb10('0xb8')]=[{'all':!![]}];}_0x3c92f4=_['merge']({},_0x3c92f4,_0x1421e2[_0xbb10('0xb9')]);return db[_0xbb10('0x41')][_0xbb10('0xba')](_0x3c92f4)[_0xbb10('0x22')](handleEntityNotFound(_0x3c6c45,null))[_0xbb10('0x22')](respondWithResult(_0x3c6c45,null))[_0xbb10('0x2c')](handleError(_0x3c6c45,null));};exports[_0xbb10('0xbb')]=function(_0x5e9888,_0x350657){return db['ChatInteraction']['create'](_0x5e9888[_0xbb10('0xbc')],{})[_0xbb10('0x22')](respondWithResult(_0x350657,0xc9))[_0xbb10('0x2c')](handleError(_0x350657,null));};exports[_0xbb10('0x37')]=function(_0x1fc4ec,_0x16b8c1){if(_0x1fc4ec['body']['id']){delete _0x1fc4ec[_0xbb10('0xbc')]['id'];}return db[_0xbb10('0x41')][_0xbb10('0xba')]({'where':{'id':_0x1fc4ec[_0xbb10('0xbd')]['id']}})[_0xbb10('0x22')](handleEntityNotFound(_0x16b8c1,null))[_0xbb10('0x22')](saveUpdates(_0x1fc4ec['body'],null))[_0xbb10('0x22')](respondWithResult(_0x16b8c1,null))[_0xbb10('0x2c')](handleError(_0x16b8c1,null));};exports[_0xbb10('0x38')]=function(_0xa8b7c3,_0x31718f){return db[_0xbb10('0x41')][_0xbb10('0xba')]({'where':{'id':_0xa8b7c3['params']['id']}})[_0xbb10('0x22')](handleEntityNotFound(_0x31718f,null))['then'](removeEntity(_0x31718f,null))[_0xbb10('0x2c')](handleError(_0x31718f,null));};exports['describe']=function(_0x4c8b68,_0x32183f){return db[_0xbb10('0x41')][_0xbb10('0xbe')]()[_0xbb10('0x22')](respondWithResult(_0x32183f,null))[_0xbb10('0x2c')](handleError(_0x32183f,null));};exports['customUpdate']=function(_0xa42b80,_0x565ddf){if(_0xa42b80['body']['id']){delete _0xa42b80['body']['id'];}return db[_0xbb10('0x41')][_0xbb10('0xba')]({'where':{'id':_0xa42b80[_0xbb10('0xbd')]['id']}})[_0xbb10('0x22')](handleEntityNotFound(_0x565ddf,null))[_0xbb10('0x22')](saveUpdates(_0xa42b80['body'],null))[_0xbb10('0x22')](respondWithResult(_0x565ddf,null))[_0xbb10('0x2c')](handleError(_0x565ddf,null));};exports[_0xbb10('0xbf')]=function(_0x1bd1c1,_0x4b3b21,_0x37ff15){if(_0x1bd1c1[_0xbb10('0xbc')]['id']){delete _0x1bd1c1['body']['id'];}return db['ChatInteraction']['find']({'where':{'id':_0x1bd1c1[_0xbb10('0xbd')]['id']}})[_0xbb10('0x22')](function(_0x2ae3c6){if(!_0x2ae3c6){logger[_0xbb10('0x28')](_0xbb10('0xc0'),_0xbb10('0xbf'),0x194,_0xbb10('0xc1'));_0x4b3b21[_0xbb10('0x2d')](0x194);}else{if(_0x2ae3c6[_0xbb10('0xc2')]){throw new db[(_0xbb10('0x91'))]['ValidationError']('Interaction\x20already\x20assigned');}}return _0x2ae3c6;})['then'](function(_0x3d4b89){if(_0x3d4b89){return _0x3d4b89[_0xbb10('0x37')]({'closed':_0x1bd1c1[_0xbb10('0xbc')]['closed'],'disposition':_0x1bd1c1[_0xbb10('0xbc')][_0xbb10('0xc3')]})[_0xbb10('0x22')](function(_0x290280){return _0x290280;});}})[_0xbb10('0x22')](function(_0x11279d){return respondWithRpcPromise('AbandonInteraction','abandon',_0x1bd1c1[_0xbb10('0xbc')],client9004);})['then'](respondWithResult(_0x4b3b21,null))[_0xbb10('0x2c')](handleError(_0x4b3b21,null));};exports[_0xbb10('0xc4')]=function(_0x152ca9,_0x15dcde,_0x25ab18){_0x152ca9[_0xbb10('0xbc')][_0xbb10('0x3a')]=_0x152ca9[_0xbb10('0xc5')][_0xbb10('0xc6')];_0x152ca9[_0xbb10('0xbc')]['basename']=_0x152ca9[_0xbb10('0xc5')]['filename'];_0x152ca9[_0xbb10('0xbc')]['type']=_0x152ca9[_0xbb10('0xc5')][_0xbb10('0xc7')];return db[_0xbb10('0xc8')][_0xbb10('0xbb')](_0x152ca9['body'])[_0xbb10('0x22')](respondWithResult(_0x15dcde,0xc9))['catch'](handleError(_0x15dcde,null));};exports[_0xbb10('0xc9')]=function(_0x1b6b9f,_0xcdaf04,_0x5388dc){return db[_0xbb10('0x41')][_0xbb10('0xca')]({'where':{'id':_0x1b6b9f[_0xbb10('0xbd')]['id']},'raw':!![]})[_0xbb10('0x22')](handleEntityNotFound(_0xcdaf04,null))[_0xbb10('0x22')](function(_0x309ec1){if(_0x309ec1){if(_0x309ec1['closed']){return _0xcdaf04['status'](0x193)['json']({'status':0x193,'message':_0xbb10('0xcb')});}return db['Attachment'][_0xbb10('0xca')]({'where':{'id':_0x1b6b9f['query'][_0xbb10('0xcc')]},'raw':!![]})[_0xbb10('0x22')](handleEntityNotFound(_0xcdaf04,null));}})[_0xbb10('0x22')](function(_0x5d5288){if(_0x5d5288){return _0xcdaf04['download'](path[_0xbb10('0x8d')](config[_0xbb10('0xcd')],_0xbb10('0xce'),_0x5d5288['basename']));}})[_0xbb10('0x2c')](handleError(_0xcdaf04,null));};exports[_0xbb10('0xcf')]=function(_0x45cfe9,_0x4848b9){var _0x47d144=null;var _0x5a685d=null;var _0x2980b7=null;var _0x55aa03=null;if(_0x45cfe9[_0xbb10('0xbc')]['id']){delete _0x45cfe9[_0xbb10('0xbc')]['id'];}if(_0x45cfe9[_0xbb10('0xbc')][_0xbb10('0xd0')]){_0x55aa03=path[_0xbb10('0x8d')](config[_0xbb10('0xcd')],_0xbb10('0xd1'),util[_0xbb10('0xd2')](_0xbb10('0xd3'),Date[_0xbb10('0xd4')]()));_0x45cfe9[_0xbb10('0xbc')]['pathTranscript']=_0x55aa03;}return db[_0xbb10('0x41')][_0xbb10('0xba')]({'where':{'id':_0x45cfe9['params']['id']},'include':[{'model':db[_0xbb10('0xd5')],'as':'Messages','include':[{'model':db['User'],'as':_0xbb10('0xd6')}]}]})[_0xbb10('0x22')](handleEntityNotFound(_0x4848b9,null))[_0xbb10('0x22')](saveUpdates(_0x45cfe9[_0xbb10('0xbc')],null))[_0xbb10('0x22')](function(_0x4ca4ce){if(_0x4ca4ce){_0x47d144=_0x4ca4ce;return db[_0xbb10('0xd7')][_0xbb10('0xba')]({'where':{'id':_0x47d144['ChatWebsiteId']}});}})[_0xbb10('0x22')](function(_0x2850d3){if(_0x2850d3){_0x2980b7=_0x2850d3;return db['CmContact'][_0xbb10('0xba')]({'where':{'id':_0x47d144['ContactId']}});}})[_0xbb10('0x22')](function(_0x8e8049){if(_0x8e8049){_0x5a685d=_0x8e8049;if(_0x55aa03){var _0x175dc4=null;for(var _0xcda15c=0x1;_0xcda15c<_0x47d144[_0xbb10('0xd8')][_0xbb10('0x48')];++_0xcda15c){_0x175dc4=_0x47d144[_0xbb10('0xd8')][_0xcda15c];var _0x56f902=_0x175dc4[_0xbb10('0xc2')]?util[_0xbb10('0xd2')](_0xbb10('0xd9'),_0x2980b7[_0xbb10('0xda')],_0x175dc4[_0xbb10('0xc2')]):_0xbb10('0xdb');var _0x518990=_0x45cfe9['body']['customer']||util[_0xbb10('0xd2')](_0xbb10('0xd9'),_0xbb10('0xdc'),_0x175dc4[_0xbb10('0x79')]);switch(_0x2980b7['agentIdentifier']){case _0xbb10('0xdd'):_0x56f902=_0x175dc4[_0xbb10('0xc2')]?util[_0xbb10('0xd2')]('%s%d',_0x2980b7['agentAlias'],_0x175dc4[_0xbb10('0xc2')]):'System';break;case _0xbb10('0xde'):_0x56f902=_0x175dc4[_0xbb10('0xc2')]?_0x175dc4[_0xbb10('0xd6')][_0xbb10('0xdf')]||_0x175dc4[_0xbb10('0xd6')][_0xbb10('0xe0')]:_0xbb10('0xdb');break;case'agent_fullname':_0x56f902=_0x175dc4[_0xbb10('0xc2')]?_0x175dc4[_0xbb10('0xd6')]['fullname']:_0xbb10('0xdb');break;default:_0x56f902=_0x175dc4[_0xbb10('0xc2')]?util[_0xbb10('0xd2')]('%s%d',_0x2980b7['agentAlias'],_0x175dc4['UserId']):_0xbb10('0xdb');}var _0x123bab=util['format'](_0xbb10('0xe1'),moment(_0x175dc4[_0xbb10('0x6a')])[_0xbb10('0xd2')](_0xbb10('0xe2')),_0x175dc4[_0xbb10('0xe3')]==='in'?_0x518990:_0x56f902,_0x175dc4[_0xbb10('0xbc')]);if(!_0x175dc4[_0xbb10('0xe4')]){fs['appendFileSync'](_0x55aa03,_0x123bab);}}return db[_0xbb10('0xe5')]['findOne']({'where':{'service':!![]},'include':[{'model':db['MailServerOut'],'as':'Smtp','raw':!![]}]});}}})[_0xbb10('0x22')](function(_0x572d73){if(_0x572d73&&_0x572d73['Smtp']&&_0x45cfe9[_0xbb10('0xbc')]){var _0x49f324={'tls':{'rejectUnauthorized':![]}};if(_0x572d73[_0xbb10('0xe6')][_0xbb10('0xe7')]){_0x49f324[_0xbb10('0xe7')]=_0x572d73['Smtp']['service'];}else{_0x49f324[_0xbb10('0xe8')]=_0x572d73['Smtp'][_0xbb10('0xe8')];_0x49f324[_0xbb10('0xe9')]=_0x572d73['Smtp']['port'];_0x49f324[_0xbb10('0xea')]=_0x572d73[_0xbb10('0xe6')][_0xbb10('0xea')];}if(_0x572d73['Smtp'][_0xbb10('0xeb')]){_0x49f324[_0xbb10('0xec')]={'user':_0x572d73[_0xbb10('0xe6')]['user'],'pass':_0x572d73[_0xbb10('0xe6')][_0xbb10('0xed')]};}return respondWithRpcPromise(_0xbb10('0xee'),_0xbb10('0xef'),{'account':_0x49f324,'message':{'from':util[_0xbb10('0xd2')](_0xbb10('0xf0'),_0x572d73[_0xbb10('0x3a')],_0x572d73[_0xbb10('0xf1')]||_0x572d73[_0xbb10('0xe6')][_0xbb10('0xf2')]),'to':_0x45cfe9[_0xbb10('0xbc')][_0xbb10('0xd0')],'subject':_0xbb10('0xf3'),'text':util['format']('Hi\x20%s,\x20attached\x20you\x20can\x20find\x20your\x20transcript\x20file.\x20\x0a\x0aRegards.\x20\x0a\x0a',_0x45cfe9[_0xbb10('0xbc')]['mailTranscript']),'attachments':[{'path':_0x55aa03}]}})[_0xbb10('0x22')](function(){return _0x47d144;})[_0xbb10('0x2c')](function(_0x37b7ae){console['error'](_0x37b7ae);});}else{return _0x47d144;}})[_0xbb10('0x22')](respondWithStatusCode(_0x4848b9,0xc8))[_0xbb10('0x2c')](handleError(_0x4848b9,null));};exports[_0xbb10('0xf4')]=function(_0xe5f8e2,_0x3e3c24,_0x49283d){return db[_0xbb10('0xd5')][_0xbb10('0xba')]({'where':{'id':_0xe5f8e2[_0xbb10('0xbd')]['id']}})[_0xbb10('0x22')](handleEntityNotFound(_0x3e3c24,null))[_0xbb10('0x22')](function(_0x3bd02a){if(_0x3bd02a){return _0x3bd02a['addMessage'](_0xe5f8e2[_0xbb10('0xbc')][_0xbb10('0xf5')],_['omit'](_0xe5f8e2[_0xbb10('0xbc')],[_0xbb10('0xf5'),'id'])||{});}})[_0xbb10('0x22')](respondWithResult(_0x3e3c24,null))[_0xbb10('0x2c')](handleError(_0x3e3c24,null));};exports[_0xbb10('0xf6')]=function(_0x43df3c,_0x45593c,_0xb5c62c){var _0x1d45c5={'raw':![],'where':{}};var _0x33d1b7={};var _0x13514b={'count':0x0,'rows':[]};return db[_0xbb10('0x41')][_0xbb10('0xca')]({'where':{'id':_0x43df3c[_0xbb10('0xbd')]['id']}})[_0xbb10('0x22')](handleEntityNotFound(_0x45593c,null))['then'](function(_0x12e6cb){if(_0x12e6cb){_0x33d1b7[_0xbb10('0x45')]=_['keys'](db['ChatMessage'][_0xbb10('0x42')]);_0x33d1b7[_0xbb10('0x43')]=_[_0xbb10('0x69')](_0x43df3c[_0xbb10('0x43')]);_0x33d1b7[_0xbb10('0x44')]=_[_0xbb10('0xb7')](_0x33d1b7[_0xbb10('0x45')],_0x33d1b7[_0xbb10('0x43')]);_0x1d45c5[_0xbb10('0x46')]=_['intersection'](_0x33d1b7['model'],qs['fields'](_0x43df3c['query']['fields']));_0x1d45c5['attributes']=_0x1d45c5[_0xbb10('0x46')][_0xbb10('0x48')]?_0x1d45c5[_0xbb10('0x46')]:_0x33d1b7[_0xbb10('0x45')];if(!_0x43df3c['query'][_0xbb10('0x49')](_0xbb10('0x4a'))){_0x1d45c5[_0xbb10('0x32')]=qs[_0xbb10('0x32')](_0x43df3c['query']['limit']);_0x1d45c5[_0xbb10('0x31')]=qs[_0xbb10('0x31')](_0x43df3c['query']['offset']);}_0x1d45c5[_0xbb10('0x4b')]=qs[_0xbb10('0x4c')](_0x43df3c[_0xbb10('0x43')][_0xbb10('0x4c')]);_0x1d45c5[_0xbb10('0x55')]=qs['filters'](_[_0xbb10('0x4d')](_0x43df3c['query'],_0x33d1b7['filters']));_0x1d45c5[_0xbb10('0x55')][_0xbb10('0xb3')]=_0x12e6cb['id'];if(_0x43df3c[_0xbb10('0x43')][_0xbb10('0x80')]){_0x1d45c5[_0xbb10('0x55')]=_[_0xbb10('0xa5')](_0x1d45c5['where'],{'$or':_[_0xbb10('0xb1')](_0x1d45c5[_0xbb10('0x46')],function(_0x132fce){var _0x175196={};_0x175196[_0x132fce]={'$like':'%'+_0x43df3c[_0xbb10('0x43')][_0xbb10('0x80')]+'%'};return _0x175196;})});}if(_0x43df3c[_0xbb10('0x43')][_0xbb10('0x85')]){var _0x233d5e=_0x43df3c[_0xbb10('0x43')][_0xbb10('0x85')][_0xbb10('0x3e')](',');var _0x1dbf7b={};_0x1dbf7b[_0x233d5e[0x0]]={'$gte':moment(_0x233d5e[0x1])[_0xbb10('0xd2')](_0xbb10('0xf7'))};_0x1d45c5[_0xbb10('0x55')]=_[_0xbb10('0xa5')](_0x1d45c5[_0xbb10('0x55')],_0x1dbf7b);}_0x1d45c5=_[_0xbb10('0xa5')]({},_0x1d45c5,_0x43df3c[_0xbb10('0xb9')]);return db[_0xbb10('0xd5')][_0xbb10('0xa3')]({'where':_0x1d45c5['where']})[_0xbb10('0x22')](function(_0x47883f){_0x13514b[_0xbb10('0xa3')]=_0x47883f;if(_0x43df3c[_0xbb10('0x43')][_0xbb10('0xf8')]){_0x1d45c5[_0xbb10('0xb8')]=[{'all':!![]}];}return db[_0xbb10('0xd5')]['findAll'](_0x1d45c5);})['then'](function(_0x572b4d){_0x13514b[_0xbb10('0xb5')]=_0x572b4d;return _0x13514b;});}})[_0xbb10('0x22')](respondWithFilteredResult(_0x45593c,_0x1d45c5))['catch'](handleError(_0x45593c,null));};exports[_0xbb10('0xf9')]=function(_0x1d655b,_0x1f090d,_0x4c7c62){var _0xae8e0a={'where':{}},_0x6463ed={},_0x289788={'count':0x0,'rows':[]};return db['ChatInteraction'][_0xbb10('0xca')]({'where':{'id':_0x1d655b['params']['id']}})[_0xbb10('0x22')](handleEntityNotFound(_0x1f090d,null))['then'](function(_0x55b881){if(_0x55b881){_0x6463ed['model']=_['keys'](db['ChatMessage']['rawAttributes']);_0x6463ed[_0xbb10('0x43')]=_[_0xbb10('0x69')](_0x1d655b[_0xbb10('0x43')]);_0x6463ed[_0xbb10('0x44')]=_['intersection'](_0x6463ed[_0xbb10('0x45')],_0x6463ed[_0xbb10('0x43')]);_0xae8e0a[_0xbb10('0x46')]=_[_0xbb10('0xb7')](_0x6463ed[_0xbb10('0x45')],qs[_0xbb10('0x47')](_0x1d655b[_0xbb10('0x43')][_0xbb10('0x47')]));_0xae8e0a[_0xbb10('0x46')]=_0xae8e0a[_0xbb10('0x46')]['length']?_0xae8e0a[_0xbb10('0x46')]:_0x6463ed[_0xbb10('0x45')];if(!_0x1d655b[_0xbb10('0x43')]['hasOwnProperty'](_0xbb10('0x4a'))){_0xae8e0a[_0xbb10('0x32')]=qs[_0xbb10('0x32')](_0x1d655b[_0xbb10('0x43')]['limit']);_0xae8e0a[_0xbb10('0x31')]=qs[_0xbb10('0x31')](_0x1d655b[_0xbb10('0x43')][_0xbb10('0x31')]);}_0xae8e0a[_0xbb10('0x4b')]=qs[_0xbb10('0x4c')](_0x1d655b[_0xbb10('0x43')][_0xbb10('0x4c')]);_0xae8e0a[_0xbb10('0x55')]=qs[_0xbb10('0x44')](_[_0xbb10('0x4d')](_0x1d655b['query'],_0x6463ed[_0xbb10('0x44')]));_0xae8e0a[_0xbb10('0x55')]['ChatInteractionId']=_0x55b881['id'];if(_0x1d655b['query'][_0xbb10('0x80')]){_0xae8e0a[_0xbb10('0x55')]=_['merge'](_0xae8e0a[_0xbb10('0x55')],{'$or':_[_0xbb10('0xb1')](_0xae8e0a['attributes'],function(_0x306f73){var _0x42441e={};_0x42441e[_0x306f73]={'$like':'%'+_0x1d655b[_0xbb10('0x43')][_0xbb10('0x80')]+'%'};return _0x42441e;})});}_0xae8e0a[_0xbb10('0x55')]['secret']=![];if(_0x1d655b['query']['id']){_0xae8e0a['where']['id']={'$gt':_0x1d655b[_0xbb10('0x43')]['id']};}_0xae8e0a=_['merge']({},_0xae8e0a,_0x1d655b[_0xbb10('0xb9')]);return db['ChatMessage']['count']({'where':_0xae8e0a[_0xbb10('0x55')]})[_0xbb10('0x22')](function(_0x2cb52d){_0x289788[_0xbb10('0xa3')]=_0x2cb52d;_0xae8e0a[_0xbb10('0xb8')]=[];if(_0x1d655b[_0xbb10('0x43')]['includeAgent']){_0xae8e0a['include']['push']({'model':db[_0xbb10('0xd6')],'as':_0xbb10('0xd6'),'attributes':['id',_0xbb10('0xe0'),_0xbb10('0xdf')]});}if(_0x1d655b[_0xbb10('0x43')][_0xbb10('0xf8')]){_0xae8e0a[_0xbb10('0xb8')]=[{'all':!![]}];}return db['ChatMessage'][_0xbb10('0xfa')](_0xae8e0a);})[_0xbb10('0x22')](function(_0x35586a){_0x289788[_0xbb10('0xb5')]=_0x35586a;return _0x289788;});}})['then'](respondWithFilteredResult(_0x1f090d,_0xae8e0a))[_0xbb10('0x2c')](handleError(_0x1f090d,null));};exports['addTags']=function(_0x4fc743,_0x25b5a7,_0x7dbd23){return db[_0xbb10('0x41')][_0xbb10('0xba')]({'where':{'id':_0x4fc743[_0xbb10('0xbd')]['id']}})[_0xbb10('0x22')](handleEntityNotFound(_0x25b5a7,null))['then'](function(_0x39fdd3){if(_0x39fdd3){return _0x39fdd3[_0xbb10('0xfb')](_0x4fc743[_0xbb10('0xbc')][_0xbb10('0xf5')],_[_0xbb10('0xfc')](_0x4fc743[_0xbb10('0xbc')],[_0xbb10('0xf5'),'id'])||{})['spread'](function(){return db[_0xbb10('0xfd')][_0xbb10('0xfa')]({'attributes':['id',_0xbb10('0x3a'),'color'],'where':{'id':_0x4fc743['body'][_0xbb10('0xf5')]}});})[_0xbb10('0x22')](function(_0x3b007e){socket[_0xbb10('0xfe')](_0xbb10('0xff'),{'id':Number(_0x4fc743[_0xbb10('0xbd')]['id']),'tags':_0x3b007e||[]});return{'id':Number(_0x4fc743[_0xbb10('0xbd')]['id']),'tags':_0x3b007e||[]};});}})['then'](respondWithResult(_0x25b5a7,null))[_0xbb10('0x2c')](handleError(_0x25b5a7,null));};exports[_0xbb10('0x100')]=function(_0x15bd9e,_0x55ba78,_0x5e195a){return db['ChatInteraction']['find']({'where':{'id':_0x15bd9e[_0xbb10('0xbd')]['id']}})[_0xbb10('0x22')](handleEntityNotFound(_0x55ba78,null))[_0xbb10('0x22')](function(_0x1b9a6b){if(_0x1b9a6b){return _0x1b9a6b['removeTags'](_0x15bd9e[_0xbb10('0x43')]['ids']);}})[_0xbb10('0x22')](respondWithStatusCode(_0x55ba78,null))[_0xbb10('0x2c')](handleError(_0x55ba78,null));};exports[_0xbb10('0x101')]=function(_0xc3c1e5,_0xa16287){var _0x163fdd=moment()[_0xbb10('0x102')]()[_0xbb10('0xa2')]();var _0x243dc2=path[_0xbb10('0x8d')](config[_0xbb10('0xcd')],_0xbb10('0x103'),'files',_0xbb10('0x104'));var _0x1c000b=path[_0xbb10('0x8d')](config['root'],_0xbb10('0x103'),'files',_0xbb10('0x105'));var _0x446bcf=path[_0xbb10('0x8d')](_0x243dc2,_0x163fdd);var _0x252833=util[_0xbb10('0xd2')]('transcript-%d-%s.zip',_0xc3c1e5['params']['id'],_0x163fdd);var _0x842d94=path['join'](_0x243dc2,_0x252833);var _0x553bb8=![];return db[_0xbb10('0x41')]['find']({'where':{'id':_0xc3c1e5[_0xbb10('0xbd')]['id']},'include':[{'model':db[_0xbb10('0xd5')],'as':_0xbb10('0xd8'),'attributes':['id',_0xbb10('0xbc'),_0xbb10('0x6a'),_0xbb10('0xe3'),_0xbb10('0xe4')],'include':[{'model':db[_0xbb10('0xd6')],'as':'User','attributes':['id',_0xbb10('0xe0')],'raw':!![]},{'model':db['CmContact'],'as':_0xbb10('0x106'),'attributes':['id','firstName',_0xbb10('0x107')],'raw':!![]},{'model':db[_0xbb10('0xc8')],'as':'Attachment','raw':!![]}]},{'model':db[_0xbb10('0xd7')],'as':_0xbb10('0x108'),'attributes':['id',_0xbb10('0x3a')]},{'model':db['User'],'as':_0xbb10('0x109'),'attributes':['id',_0xbb10('0xe0')]}]})[_0xbb10('0x22')](handleEntityNotFound(_0xa16287,null))['then'](function(_0x100e82){if(_0x100e82){var _0x1129f5=_0x100e82[_0xbb10('0x10a')]({'plain':!![]});_0x553bb8=!![];var _0x4b781e={'format':'A4','border':_0xbb10('0x10b'),'header':{'height':'40px','contents':{'first':_0xbb10('0x10c')}},'footer':{'height':_0xbb10('0x10d'),'contents':{'default':util[_0xbb10('0xd2')](_0xbb10('0x10e'),util[_0xbb10('0xd2')](_0xbb10('0x10f'),_0xbb10('0x110'),_0x1129f5['id']),moment()[_0xbb10('0xd2')](_0xbb10('0x111'))[_0xbb10('0xa2')]())}}};fs['mkdirSync'](_0x446bcf);var _0x4b10ed={'channel':_0xbb10('0x110'),'account':_0x1129f5[_0xbb10('0x108')][_0xbb10('0x3a')],'agent':_0x1129f5['Owner']?_0x1129f5[_0xbb10('0x109')][_0xbb10('0xe0')]:_0xbb10('0x112'),'createdAt':moment(_0x1129f5[_0xbb10('0x6a')])[_0xbb10('0xd2')](_0xbb10('0xf7'))[_0xbb10('0xa2')](),'closedAt':_0x1129f5[_0xbb10('0x113')]?moment(_0x1129f5[_0xbb10('0x114')])['format'](_0xbb10('0xf7'))[_0xbb10('0xa2')]():'','disposition':_0x1129f5[_0xbb10('0xc3')],'chatInfo':{'browser':_0x1129f5[_0xbb10('0x115')],'os':_0x1129f5['osName'],'referer':_0x1129f5[_0xbb10('0x116')],'customerIp':_0x1129f5[_0xbb10('0x117')]},'messages':_(_0x1129f5[_0xbb10('0xd8')])['tail']()['filter']({'secret':![]})[_0xbb10('0xb1')](function(_0x4f4157){if(_0x4f4157[_0xbb10('0xc8')]){var _0x4874be=path[_0xbb10('0x8d')](_0x1c000b,_0x4f4157[_0xbb10('0xc8')][_0xbb10('0x118')]);if(fs[_0xbb10('0x119')](_0x4874be)){fs[_0xbb10('0x11a')](_0x4874be)[_0xbb10('0x11b')](fs[_0xbb10('0x11c')](path['join'](_0x446bcf,_0x4f4157[_0xbb10('0xc8')][_0xbb10('0x118')])));}}return{'date':moment(_0x4f4157[_0xbb10('0x6a')])[_0xbb10('0xd2')](_0xbb10('0xf7'))[_0xbb10('0xa2')](),'sender':_0x4f4157['direction']===_0xbb10('0x11d')?_0x4f4157[_0xbb10('0xd6')]?_0x4f4157[_0xbb10('0xd6')][_0xbb10('0xe0')]:_0xbb10('0xdb'):_0x4f4157[_0xbb10('0x106')][_0xbb10('0x11e')]+(_0x4f4157['Contact'][_0xbb10('0x107')]?'\x20'+_0x4f4157[_0xbb10('0x106')][_0xbb10('0x107')]:''),'body':_0x4f4157['Attachment']?_0x4f4157[_0xbb10('0xc8')]['basename']:_0x4f4157[_0xbb10('0xbc')],'direction':_0x4f4157[_0xbb10('0xe3')]===_0xbb10('0x11d')?'A':'C','secret':_0x4f4157['secret'],'attachment':_0x4f4157['Attachment']};})[_0xbb10('0x6b')]()};return ejs[_0xbb10('0x11f')](path[_0xbb10('0x8d')](config[_0xbb10('0xcd')],_0xbb10('0x103'),_0xbb10('0x120'),_0xbb10('0x121')),{'interaction':_0x4b10ed})[_0xbb10('0x22')](function(_0x2ba569){return new BPromise(function(_0x8700e6,_0x1e6509){pdf['create'](_0x2ba569,_0x4b781e)['toFile'](path[_0xbb10('0x8d')](_0x446bcf,_0xbb10('0x122')+_0x1129f5['id']+'-'+_0x163fdd+'.pdf'),function(_0x576df0,_0x2ae12a){if(_0x576df0)return _0x1e6509(_0x576df0);_0x8700e6(_0x2ae12a);});});});}})[_0xbb10('0x22')](function(){if(_0x553bb8){return new BPromise(function(_0x30bc43,_0x5ea832){zipdir(_0x446bcf,{'saveTo':_0x842d94},function(_0x565874,_0x35c8a7){if(_0x565874)return _0x5ea832(_0x565874);return _0x30bc43(_0x35c8a7);});})['then'](function(){return new BPromise(function(_0x4375ac,_0x97224a){rimraf(_0x446bcf,function(_0x544c9c){if(_0x544c9c)_0x97224a(_0x544c9c);return _0x4375ac();});});})['then'](function(){return _0xa16287[_0xbb10('0x101')](_0x842d94,_0x252833,function(_0x26ec8e){if(_0x26ec8e){console[_0xbb10('0x123')]('err',_0x26ec8e);}else{fs['unlinkSync'](_0x842d94);}});});}else{return _0xa16287[_0xbb10('0x2d')](0xc8);}})[_0xbb10('0x2c')](handleError(_0xa16287,null));};
\ No newline at end of file
index 373940f..dd0287e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9782=['length','emit','catch','hasOwnProperty','hook','exports','events','../../mysqldb','save','update','remove','then','setDataValue','Users','map','findAll'];(function(_0x3f7a0d,_0x29e65b){var _0x2f9129=function(_0x291172){while(--_0x291172){_0x3f7a0d['push'](_0x3f7a0d['shift']());}};_0x2f9129(++_0x29e65b);}(_0x9782,0xf6));var _0x2978=function(_0x347d95,_0x2d161b){_0x347d95=_0x347d95-0x0;var _0x1a5e53=_0x9782[_0x347d95];return _0x1a5e53;};'use strict';var EventEmitter=require(_0x2978('0x0'));var ChatInteraction=require(_0x2978('0x1'))['db']['ChatInteraction'];var ChatMessage=require(_0x2978('0x1'))['db']['ChatMessage'];var ChatInteractionEvents=new EventEmitter();ChatInteractionEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x2978('0x2'),'afterUpdate':_0x2978('0x3'),'afterDestroy':_0x2978('0x4')};function emitEvent(_0x452f52){return function(_0x1f1502,_0x35cce1,_0x3626db){_0x1f1502['getUsers']({'attributes':['id'],'raw':!![]})[_0x2978('0x5')](function(_0x48e2d3){_0x1f1502[_0x2978('0x6')](_0x2978('0x7'),_0x48e2d3[_0x2978('0x8')](function(_0x1b5585){return{'id':_0x1b5585['id']};}));return ChatMessage[_0x2978('0x9')]({'where':{'ChatInteractionId':_0x1f1502['id'],'direction':'in','read':![]},'raw':!![]});})[_0x2978('0x5')](function(_0x228df3){_0x1f1502[_0x2978('0x6')]('unreadMessages',_0x228df3[_0x2978('0xa')]);ChatInteractionEvents[_0x2978('0xb')](_0x452f52+':'+_0x1f1502['id'],_0x1f1502);ChatInteractionEvents[_0x2978('0xb')](_0x452f52,_0x1f1502);_0x3626db(null);})[_0x2978('0xc')](_0x3626db(null));};}for(var e in events){if(events[_0x2978('0xd')](e)){var event=events[e];ChatInteraction[_0x2978('0xe')](e,emitEvent(event));}}module[_0x2978('0xf')]=ChatInteractionEvents;
\ No newline at end of file
+var _0x15d8=['ChatMessage','setMaxListeners','update','then','setDataValue','map','unreadMessages','length','emit','catch','hasOwnProperty','../../mysqldb','ChatInteraction'];(function(_0x36b5a3,_0x534652){var _0x20bd4c=function(_0x242c5b){while(--_0x242c5b){_0x36b5a3['push'](_0x36b5a3['shift']());}};_0x20bd4c(++_0x534652);}(_0x15d8,0x177));var _0x815d=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x15d8[_0x3dd15e];return _0x231fd0;};'use strict';var EventEmitter=require('events');var ChatInteraction=require(_0x815d('0x0'))['db'][_0x815d('0x1')];var ChatMessage=require(_0x815d('0x0'))['db'][_0x815d('0x2')];var ChatInteractionEvents=new EventEmitter();ChatInteractionEvents[_0x815d('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x815d('0x4'),'afterDestroy':'remove'};function emitEvent(_0x370350){return function(_0x5a258f,_0x133bea,_0x218367){_0x5a258f['getUsers']({'attributes':['id'],'raw':!![]})[_0x815d('0x5')](function(_0x3f8101){_0x5a258f[_0x815d('0x6')]('Users',_0x3f8101[_0x815d('0x7')](function(_0x89791c){return{'id':_0x89791c['id']};}));return ChatMessage['findAll']({'where':{'ChatInteractionId':_0x5a258f['id'],'direction':'in','read':![]},'raw':!![]});})['then'](function(_0x4eeb4b){_0x5a258f[_0x815d('0x6')](_0x815d('0x8'),_0x4eeb4b[_0x815d('0x9')]);ChatInteractionEvents['emit'](_0x370350+':'+_0x5a258f['id'],_0x5a258f);ChatInteractionEvents[_0x815d('0xa')](_0x370350,_0x5a258f);_0x218367(null);})[_0x815d('0xb')](_0x218367(null));};}for(var e in events){if(events[_0x815d('0xc')](e)){var event=events[e];ChatInteraction['hook'](e,emitEvent(event));}}module['exports']=ChatInteractionEvents;
\ No newline at end of file
index 245310f..fcb6a0a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xac4a=['changed','closedAt','utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','moment','bluebird','rimraf','../../config/environment','./chatInteraction.attributes','define','chat_interactions'];(function(_0x45b7bd,_0x3b488d){var _0x26bff5=function(_0x4cd815){while(--_0x4cd815){_0x45b7bd['push'](_0x45b7bd['shift']());}};_0x26bff5(++_0x3b488d);}(_0xac4a,0x13f));var _0xaac4=function(_0x1a6082,_0x3d52da){_0x1a6082=_0x1a6082-0x0;var _0x7cd434=_0xac4a[_0x1a6082];return _0x7cd434;};'use strict';var _=require(_0xaac4('0x0'));var util=require(_0xaac4('0x1'));var logger=require(_0xaac4('0x2'))(_0xaac4('0x3'));var moment=require(_0xaac4('0x4'));var BPromise=require(_0xaac4('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0xaac4('0x6'));var config=require(_0xaac4('0x7'));var attributes=require(_0xaac4('0x8'));module['exports']=function(_0x1283a5,_0x53d03a){return _0x1283a5[_0xaac4('0x9')]('ChatInteraction',attributes,{'tableName':_0xaac4('0xa'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x27354c,_0x567295,_0x5cfc1b){if(_0x27354c[_0xaac4('0xb')]('closed')){_0x27354c[_0xaac4('0xc')]=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');}_0x5cfc1b(null,_0x27354c);}},'charset':_0xaac4('0xd'),'collate':_0xaac4('0xe')});};
\ No newline at end of file
+var _0x757a=['request-promise','path','rimraf','../../config/environment','./chatInteraction.attributes','exports','define','chat_interactions','changed','closedAt','format','YYYY-MM-DD\x20HH:mm:ss','utf8mb4','utf8mb4_unicode_ci','util','../../config/logger'];(function(_0x8dbef6,_0x16e69a){var _0x493240=function(_0x215217){while(--_0x215217){_0x8dbef6['push'](_0x8dbef6['shift']());}};_0x493240(++_0x16e69a);}(_0x757a,0xde));var _0xa757=function(_0x1e7a92,_0x4343d){_0x1e7a92=_0x1e7a92-0x0;var _0x175246=_0x757a[_0x1e7a92];return _0x175246;};'use strict';var _=require('lodash');var util=require(_0xa757('0x0'));var logger=require(_0xa757('0x1'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xa757('0x2'));var fs=require('fs');var path=require(_0xa757('0x3'));var rimraf=require(_0xa757('0x4'));var config=require(_0xa757('0x5'));var attributes=require(_0xa757('0x6'));module[_0xa757('0x7')]=function(_0x5edca8,_0xae0e7c){return _0x5edca8[_0xa757('0x8')]('ChatInteraction',attributes,{'tableName':_0xa757('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x2f7793,_0x447344,_0x1a95ee){if(_0x2f7793[_0xa757('0xa')]('closed')){_0x2f7793[_0xa757('0xb')]=moment()[_0xa757('0xc')](_0xa757('0xd'));}_0x1a95ee(null,_0x2f7793);}},'charset':_0xa757('0xe'),'collate':_0xa757('0xf')});};
\ No newline at end of file
index 2cd3717..f130dd0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2018=['bluebird','randomstring','../../config/utils','rpc','jayson/promise','http','redis','defaults','localhost','register','then','info','ChatInteraction,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','result','UpdateChatInteraction','update','body','options','raw','attributes','limit','catch','ChatInteraction','find','where','addTags','ids','spread','AddTags','lodash','moment'];(function(_0x5434e0,_0x4320cc){var _0x24996e=function(_0x5ca4fc){while(--_0x5ca4fc){_0x5434e0['push'](_0x5434e0['shift']());}};_0x24996e(++_0x4320cc);}(_0x2018,0x195));var _0x8201=function(_0x7c2035,_0x13334){_0x7c2035=_0x7c2035-0x0;var _0x50f5c1=_0x2018[_0x7c2035];return _0x50f5c1;};'use strict';var _=require(_0x8201('0x0'));var util=require('util');var moment=require(_0x8201('0x1'));var BPromise=require(_0x8201('0x2'));var rs=require(_0x8201('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x8201('0x4'));var logger=require('../../config/logger')(_0x8201('0x5'));var config=require('../../config/environment');var jayson=require(_0x8201('0x6'));var client=jayson['client'][_0x8201('0x7')]({'port':0x232a});config[_0x8201('0x8')]=_[_0x8201('0x9')](config[_0x8201('0x8')],{'host':_0x8201('0xa'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require('./chatInteraction.socket')[_0x8201('0xb')](socket);function respondWithRpcPromise(_0x5af373,_0x3df85c,_0x2c6897){return new BPromise(function(_0x4b880f,_0x5e1dac){return client['request'](_0x5af373,_0x2c6897)[_0x8201('0xc')](function(_0x599893){logger[_0x8201('0xd')](_0x8201('0xe'),_0x3df85c,'request\x20sent');logger[_0x8201('0xf')]('ChatInteraction,\x20%s,\x20%s,\x20%s',_0x3df85c,_0x8201('0x10'),JSON[_0x8201('0x11')](_0x599893));if(_0x599893[_0x8201('0x12')]){if(_0x599893['error'][_0x8201('0x13')]===0x1f4){logger[_0x8201('0x12')](_0x8201('0xe'),_0x3df85c,_0x599893[_0x8201('0x12')]['message']);return _0x5e1dac(_0x599893[_0x8201('0x12')][_0x8201('0x14')]);}logger[_0x8201('0x12')](_0x8201('0xe'),_0x3df85c,_0x599893[_0x8201('0x12')][_0x8201('0x14')]);return _0x4b880f(_0x599893[_0x8201('0x12')][_0x8201('0x14')]);}else{logger[_0x8201('0xd')]('ChatInteraction,\x20%s,\x20%s',_0x3df85c,_0x8201('0x10'));_0x4b880f(_0x599893[_0x8201('0x15')][_0x8201('0x14')]);}})['catch'](function(_0x9457d1){logger['error'](_0x8201('0xe'),_0x3df85c,_0x9457d1);_0x5e1dac(_0x9457d1);});});}exports[_0x8201('0x16')]=function(_0x517b8a){var _0x2f3546=this;return new Promise(function(_0x2d18ca,_0x133fa7){return db['ChatInteraction'][_0x8201('0x17')](_0x517b8a[_0x8201('0x18')],{'raw':_0x517b8a[_0x8201('0x19')]?_0x517b8a[_0x8201('0x19')][_0x8201('0x1a')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x517b8a['options']?_0x517b8a['options']['where']||null:null,'attributes':_0x517b8a[_0x8201('0x19')]?_0x517b8a[_0x8201('0x19')][_0x8201('0x1b')]||null:null,'limit':_0x517b8a[_0x8201('0x19')]?_0x517b8a[_0x8201('0x19')][_0x8201('0x1c')]||null:null})[_0x8201('0xc')](function(_0x9b3636){logger[_0x8201('0xd')](_0x8201('0x16'),_0x517b8a);logger[_0x8201('0xf')]('UpdateChatInteraction',_0x517b8a,JSON[_0x8201('0x11')](_0x9b3636));_0x2d18ca(_0x9b3636);})[_0x8201('0x1d')](function(_0x1a6c99){logger[_0x8201('0x12')]('UpdateChatInteraction',_0x1a6c99['message'],_0x517b8a);_0x133fa7(_0x2f3546[_0x8201('0x12')](0x1f4,_0x1a6c99[_0x8201('0x14')]));});});};exports['AddTagsToChatInteraction']=function(_0x3c8b65){return new Promise(function(_0x1cba62,_0x4e2992){return db[_0x8201('0x1e')][_0x8201('0x1f')]({'where':_0x3c8b65['options']?_0x3c8b65[_0x8201('0x19')][_0x8201('0x20')]||null:null})['then'](function(_0x2c3060){if(_0x2c3060){return _0x2c3060[_0x8201('0x21')](_0x3c8b65[_0x8201('0x18')][_0x8201('0x22')],_['omit'](_0x3c8b65[_0x8201('0x18')],[_0x8201('0x22'),'id'])||{});}})[_0x8201('0x23')](function(_0x237e66){logger[_0x8201('0xd')](_0x8201('0x24'),_0x3c8b65);logger[_0x8201('0xf')](_0x8201('0x24'),_0x3c8b65,JSON[_0x8201('0x11')](_0x237e66));_0x1cba62(_0x237e66);})[_0x8201('0x1d')](function(_0x3d3e78){logger['error'](_0x8201('0x24'),_0x3d3e78[_0x8201('0x14')],_0x3c8b65);_0x4e2992(_this[_0x8201('0x12')](0x1f4,_0x3d3e78['message']));});});};
\ No newline at end of file
+var _0xa7b0=['message','catch','ChatInteraction','update','body','options','where','attributes','limit','UpdateChatInteraction','AddTagsToChatInteraction','addTags','ids','omit','spread','AddTags','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','jayson/promise','client','redis','defaults','localhost','socket.io-emitter','./chatInteraction.socket','register','request','then','info','ChatInteraction,\x20%s,\x20%s','request\x20sent','debug','ChatInteraction,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x21ae69,_0x502734){var _0x113688=function(_0x4e56fa){while(--_0x4e56fa){_0x21ae69['push'](_0x21ae69['shift']());}};_0x113688(++_0x502734);}(_0xa7b0,0x8e));var _0x0a7b=function(_0x29d87d,_0x23dc31){_0x29d87d=_0x29d87d-0x0;var _0x1fd84b=_0xa7b0[_0x29d87d];return _0x1fd84b;};'use strict';var _=require(_0x0a7b('0x0'));var util=require(_0x0a7b('0x1'));var moment=require('moment');var BPromise=require(_0x0a7b('0x2'));var rs=require(_0x0a7b('0x3'));var fs=require('fs');var Redis=require(_0x0a7b('0x4'));var db=require(_0x0a7b('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x0a7b('0x6'))(_0x0a7b('0x7'));var config=require('../../config/environment');var jayson=require(_0x0a7b('0x8'));var client=jayson[_0x0a7b('0x9')]['http']({'port':0x232a});config[_0x0a7b('0xa')]=_[_0x0a7b('0xb')](config[_0x0a7b('0xa')],{'host':_0x0a7b('0xc'),'port':0x18eb});var socket=require(_0x0a7b('0xd'))(new Redis(config[_0x0a7b('0xa')]));require(_0x0a7b('0xe'))[_0x0a7b('0xf')](socket);function respondWithRpcPromise(_0x34fa05,_0x58b7da,_0x4d357b){return new BPromise(function(_0x4483df,_0x42c9e8){return client[_0x0a7b('0x10')](_0x34fa05,_0x4d357b)[_0x0a7b('0x11')](function(_0x40858a){logger[_0x0a7b('0x12')](_0x0a7b('0x13'),_0x58b7da,_0x0a7b('0x14'));logger[_0x0a7b('0x15')](_0x0a7b('0x16'),_0x58b7da,_0x0a7b('0x14'),JSON[_0x0a7b('0x17')](_0x40858a));if(_0x40858a[_0x0a7b('0x18')]){if(_0x40858a[_0x0a7b('0x18')][_0x0a7b('0x19')]===0x1f4){logger[_0x0a7b('0x18')]('ChatInteraction,\x20%s,\x20%s',_0x58b7da,_0x40858a[_0x0a7b('0x18')][_0x0a7b('0x1a')]);return _0x42c9e8(_0x40858a[_0x0a7b('0x18')]['message']);}logger[_0x0a7b('0x18')](_0x0a7b('0x13'),_0x58b7da,_0x40858a[_0x0a7b('0x18')][_0x0a7b('0x1a')]);return _0x4483df(_0x40858a[_0x0a7b('0x18')][_0x0a7b('0x1a')]);}else{logger[_0x0a7b('0x12')](_0x0a7b('0x13'),_0x58b7da,_0x0a7b('0x14'));_0x4483df(_0x40858a['result'][_0x0a7b('0x1a')]);}})[_0x0a7b('0x1b')](function(_0x152e7f){logger[_0x0a7b('0x18')](_0x0a7b('0x13'),_0x58b7da,_0x152e7f);_0x42c9e8(_0x152e7f);});});}exports['UpdateChatInteraction']=function(_0x377c37){var _0x20ac3a=this;return new Promise(function(_0x3bff24,_0x2dac05){return db[_0x0a7b('0x1c')][_0x0a7b('0x1d')](_0x377c37[_0x0a7b('0x1e')],{'raw':_0x377c37['options']?_0x377c37['options']['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x377c37[_0x0a7b('0x1f')]?_0x377c37['options'][_0x0a7b('0x20')]||null:null,'attributes':_0x377c37['options']?_0x377c37['options'][_0x0a7b('0x21')]||null:null,'limit':_0x377c37[_0x0a7b('0x1f')]?_0x377c37[_0x0a7b('0x1f')][_0x0a7b('0x22')]||null:null})['then'](function(_0x121ed9){logger[_0x0a7b('0x12')](_0x0a7b('0x23'),_0x377c37);logger[_0x0a7b('0x15')](_0x0a7b('0x23'),_0x377c37,JSON[_0x0a7b('0x17')](_0x121ed9));_0x3bff24(_0x121ed9);})['catch'](function(_0x486b4c){logger[_0x0a7b('0x18')]('UpdateChatInteraction',_0x486b4c['message'],_0x377c37);_0x2dac05(_0x20ac3a[_0x0a7b('0x18')](0x1f4,_0x486b4c[_0x0a7b('0x1a')]));});});};exports[_0x0a7b('0x24')]=function(_0x31d76d){return new Promise(function(_0x2ff5f4,_0x2f695c){return db[_0x0a7b('0x1c')]['find']({'where':_0x31d76d[_0x0a7b('0x1f')]?_0x31d76d[_0x0a7b('0x1f')][_0x0a7b('0x20')]||null:null})['then'](function(_0x25ee11){if(_0x25ee11){return _0x25ee11[_0x0a7b('0x25')](_0x31d76d[_0x0a7b('0x1e')][_0x0a7b('0x26')],_[_0x0a7b('0x27')](_0x31d76d[_0x0a7b('0x1e')],[_0x0a7b('0x26'),'id'])||{});}})[_0x0a7b('0x28')](function(_0x48a5c7){logger[_0x0a7b('0x12')](_0x0a7b('0x29'),_0x31d76d);logger['debug'](_0x0a7b('0x29'),_0x31d76d,JSON[_0x0a7b('0x17')](_0x48a5c7));_0x2ff5f4(_0x48a5c7);})[_0x0a7b('0x1b')](function(_0xff0237){logger[_0x0a7b('0x18')](_0x0a7b('0x29'),_0xff0237[_0x0a7b('0x1a')],_0x31d76d);_0x2f695c(_this[_0x0a7b('0x18')](0x1f4,_0xff0237[_0x0a7b('0x1a')]));});});};
\ No newline at end of file
index 8a2bddd..db52964 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7d71=['./chatInteraction.events','remove','removeListener','register','chatInteraction:'];(function(_0x3e6f74,_0xd6cbbd){var _0x1e255a=function(_0x2851ce){while(--_0x2851ce){_0x3e6f74['push'](_0x3e6f74['shift']());}};_0x1e255a(++_0xd6cbbd);}(_0x7d71,0x73));var _0x17d7=function(_0x273c39,_0x1052e6){_0x273c39=_0x273c39-0x0;var _0x46d6b5=_0x7d71[_0x273c39];return _0x46d6b5;};'use strict';var ChatInteractionEvents=require(_0x17d7('0x0'));var events=['save',_0x17d7('0x1'),'update'];function createListener(_0x51d4b5,_0x1416f9){return function(_0x3705e9){_0x1416f9['emit'](_0x51d4b5,_0x3705e9);};}function removeListener(_0x5642fd,_0x9e1985){return function(){ChatInteractionEvents[_0x17d7('0x2')](_0x5642fd,_0x9e1985);};}exports[_0x17d7('0x3')]=function(_0x110ab0){for(var _0x5eccd8=0x0,_0x1314e7=events['length'];_0x5eccd8<_0x1314e7;_0x5eccd8++){var _0x207d21=events[_0x5eccd8];var _0x3b06d9=createListener(_0x17d7('0x4')+_0x207d21,_0x110ab0);ChatInteractionEvents['on'](_0x207d21,_0x3b06d9);}};
\ No newline at end of file
+var _0x3488=['removeListener','register','./chatInteraction.events','save','remove','emit'];(function(_0x255654,_0x4b8356){var _0x57a56a=function(_0x16e631){while(--_0x16e631){_0x255654['push'](_0x255654['shift']());}};_0x57a56a(++_0x4b8356);}(_0x3488,0x19a));var _0x8348=function(_0x266210,_0x206e6e){_0x266210=_0x266210-0x0;var _0x30647c=_0x3488[_0x266210];return _0x30647c;};'use strict';var ChatInteractionEvents=require(_0x8348('0x0'));var events=[_0x8348('0x1'),_0x8348('0x2'),'update'];function createListener(_0x49f3c7,_0x261291){return function(_0x3c6863){_0x261291[_0x8348('0x3')](_0x49f3c7,_0x3c6863);};}function removeListener(_0x501d81,_0x8bf092){return function(){ChatInteractionEvents[_0x8348('0x4')](_0x501d81,_0x8bf092);};}exports[_0x8348('0x5')]=function(_0x1cceae){for(var _0x12dbd9=0x0,_0x2c0f30=events['length'];_0x12dbd9<_0x2c0f30;_0x12dbd9++){var _0x1de18d=events[_0x12dbd9];var _0x3370f7=createListener('chatInteraction:'+_0x1de18d,_0x1cceae);ChatInteractionEvents['on'](_0x1de18d,_0x3370f7);}};
\ No newline at end of file
index 21bf99e..a7383a0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7072=['addTags','put','chatinteraction:update','update','/:id/custom_update','customUpdate','abandon','/:id/close','close','chatinteraction:destroy','delete','exports','util','path','connect-timeout','express','Router','../../config/environment','get','isAuthenticated','index','/describe','describe','/:id','isChatInteractionAuthorized','/:id/attachment_download','attachmentDownload','/:id/messages','getMessages','/:id/my_messages','getMyMessages','/:id/download','download','create','diskStorage','join','root','server/files/attachments/','format','%s-%s','now','originalname','post','/:id/attachment_upload','single','addMessage','/:id/tags','tracked','chat','chatinteraction:addtags'];(function(_0x5223c8,_0x42e91a){var _0x4c3be1=function(_0x4bb42b){while(--_0x4bb42b){_0x5223c8['push'](_0x5223c8['shift']());}};_0x4c3be1(++_0x42e91a);}(_0x7072,0x138));var _0x2707=function(_0x2283dc,_0x2fcfc5){_0x2283dc=_0x2283dc-0x0;var _0x16db90=_0x7072[_0x2283dc];return _0x16db90;};'use strict';var multer=require('multer');var util=require(_0x2707('0x0'));var path=require(_0x2707('0x1'));var timeout=require(_0x2707('0x2'));var express=require(_0x2707('0x3'));var router=express[_0x2707('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x2707('0x5'));var controller=require('./chatInteraction.controller');router[_0x2707('0x6')]('/',auth[_0x2707('0x7')](),controller[_0x2707('0x8')]);router[_0x2707('0x6')](_0x2707('0x9'),auth[_0x2707('0x7')](),controller[_0x2707('0xa')]);router[_0x2707('0x6')](_0x2707('0xb'),auth[_0x2707('0xc')](),controller['show']);router['get'](_0x2707('0xd'),auth[_0x2707('0xc')](),controller[_0x2707('0xe')]);router[_0x2707('0x6')](_0x2707('0xf'),auth[_0x2707('0x7')](),controller[_0x2707('0x10')]);router[_0x2707('0x6')](_0x2707('0x11'),auth[_0x2707('0xc')](),controller[_0x2707('0x12')]);router[_0x2707('0x6')](_0x2707('0x13'),auth['isAuthenticated'](),controller[_0x2707('0x14')]);router['post']('/',auth[_0x2707('0x7')](),controller[_0x2707('0x15')]);var upload=multer({'storage':multer[_0x2707('0x16')]({'destination':function(_0x3a67f2,_0x13d9ac,_0x4e52a3){_0x4e52a3(null,path[_0x2707('0x17')](config[_0x2707('0x18')],_0x2707('0x19')));},'filename':function(_0x5d523f,_0x1153d7,_0x42f374){_0x42f374(null,util[_0x2707('0x1a')](_0x2707('0x1b'),Date[_0x2707('0x1c')](),_0x1153d7[_0x2707('0x1d')]['replace'](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0x2707('0x1e')](_0x2707('0x1f'),upload[_0x2707('0x20')]('file'),controller['attachmentUpload']);router['post'](_0x2707('0xf'),auth[_0x2707('0xc')](),controller[_0x2707('0x21')]);router[_0x2707('0x1e')](_0x2707('0x22'),auth[_0x2707('0x7')](),interaction[_0x2707('0x23')](_0x2707('0x24'),_0x2707('0x25')),controller[_0x2707('0x26')]);router[_0x2707('0x27')](_0x2707('0xb'),auth[_0x2707('0x7')](),interaction[_0x2707('0x23')]('chat',_0x2707('0x28')),controller[_0x2707('0x29')]);router[_0x2707('0x27')](_0x2707('0x2a'),controller[_0x2707('0x2b')]);router[_0x2707('0x27')]('/:id/abandon',auth[_0x2707('0xc')](),controller[_0x2707('0x2c')]);router[_0x2707('0x27')](_0x2707('0x2d'),controller[_0x2707('0x2e')]);router['delete'](_0x2707('0xb'),auth['isAuthenticated'](),interaction[_0x2707('0x23')](_0x2707('0x24'),_0x2707('0x2f')),controller['destroy']);router[_0x2707('0x30')](_0x2707('0x22'),auth[_0x2707('0x7')](),controller['removeTags']);module[_0x2707('0x31')]=router;
\ No newline at end of file
+var _0x34b7=['/:id/download','download','post','create','diskStorage','join','root','server/files/attachments/','%s-%s','now','originalname','replace','single','file','attachmentUpload','addMessage','/:id/tags','tracked','chat','chatinteraction:addtags','addTags','chatinteraction:update','update','put','/:id/custom_update','customUpdate','/:id/abandon','abandon','/:id/close','close','chatinteraction:destroy','destroy','delete','removeTags','exports','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','index','/describe','/:id','/:id/attachment_download','attachmentDownload','/:id/messages','getMessages','/:id/my_messages','isChatInteractionAuthorized','getMyMessages'];(function(_0x5ddb1c,_0x5ea4df){var _0x354adc=function(_0x2dfb1f){while(--_0x2dfb1f){_0x5ddb1c['push'](_0x5ddb1c['shift']());}};_0x354adc(++_0x5ea4df);}(_0x34b7,0x196));var _0x734b=function(_0x4ed786,_0x74f270){_0x4ed786=_0x4ed786-0x0;var _0x2f0243=_0x34b7[_0x4ed786];return _0x2f0243;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x734b('0x0'));var timeout=require(_0x734b('0x1'));var express=require(_0x734b('0x2'));var router=express[_0x734b('0x3')]();var auth=require(_0x734b('0x4'));var interaction=require(_0x734b('0x5'));var config=require('../../config/environment');var controller=require('./chatInteraction.controller');router[_0x734b('0x6')]('/',auth[_0x734b('0x7')](),controller[_0x734b('0x8')]);router[_0x734b('0x6')](_0x734b('0x9'),auth[_0x734b('0x7')](),controller['describe']);router[_0x734b('0x6')](_0x734b('0xa'),auth['isChatInteractionAuthorized'](),controller['show']);router['get'](_0x734b('0xb'),auth['isChatInteractionAuthorized'](),controller[_0x734b('0xc')]);router[_0x734b('0x6')](_0x734b('0xd'),auth[_0x734b('0x7')](),controller[_0x734b('0xe')]);router[_0x734b('0x6')](_0x734b('0xf'),auth[_0x734b('0x10')](),controller[_0x734b('0x11')]);router[_0x734b('0x6')](_0x734b('0x12'),auth[_0x734b('0x7')](),controller[_0x734b('0x13')]);router[_0x734b('0x14')]('/',auth['isAuthenticated'](),controller[_0x734b('0x15')]);var upload=multer({'storage':multer[_0x734b('0x16')]({'destination':function(_0x47791c,_0xd1ab2a,_0x19f427){_0x19f427(null,path[_0x734b('0x17')](config[_0x734b('0x18')],_0x734b('0x19')));},'filename':function(_0xa6d111,_0x4b8c63,_0x42407a){_0x42407a(null,util['format'](_0x734b('0x1a'),Date[_0x734b('0x1b')](),_0x4b8c63[_0x734b('0x1c')][_0x734b('0x1d')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router['post']('/:id/attachment_upload',upload[_0x734b('0x1e')](_0x734b('0x1f')),controller[_0x734b('0x20')]);router[_0x734b('0x14')](_0x734b('0xd'),auth[_0x734b('0x10')](),controller[_0x734b('0x21')]);router[_0x734b('0x14')](_0x734b('0x22'),auth[_0x734b('0x7')](),interaction[_0x734b('0x23')](_0x734b('0x24'),_0x734b('0x25')),controller[_0x734b('0x26')]);router['put'](_0x734b('0xa'),auth[_0x734b('0x7')](),interaction['tracked'](_0x734b('0x24'),_0x734b('0x27')),controller[_0x734b('0x28')]);router[_0x734b('0x29')](_0x734b('0x2a'),controller[_0x734b('0x2b')]);router[_0x734b('0x29')](_0x734b('0x2c'),auth[_0x734b('0x10')](),controller[_0x734b('0x2d')]);router[_0x734b('0x29')](_0x734b('0x2e'),controller[_0x734b('0x2f')]);router['delete']('/:id',auth[_0x734b('0x7')](),interaction[_0x734b('0x23')]('chat',_0x734b('0x30')),controller[_0x734b('0x31')]);router[_0x734b('0x32')](_0x734b('0x22'),auth[_0x734b('0x7')](),controller[_0x734b('0x33')]);module[_0x734b('0x34')]=router;
\ No newline at end of file
index 6acf1b9..75f2ee6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x33af=['exports','medium','BOOLEAN','INTEGER'];(function(_0x5f19ed,_0x30bc6f){var _0x11dd67=function(_0x392007){while(--_0x392007){_0x5f19ed['push'](_0x5f19ed['shift']());}};_0x11dd67(++_0x30bc6f);}(_0x33af,0xec));var _0xf33a=function(_0x5e34a4,_0x2e63ed){_0x5e34a4=_0x5e34a4-0x0;var _0x8d41d7=_0x33af[_0x5e34a4];return _0x8d41d7;};'use strict';var Sequelize=require('sequelize');module[_0xf33a('0x0')]={'body':{'type':Sequelize['TEXT'](_0xf33a('0x1')),'allowNull':![]},'read':{'type':Sequelize[_0xf33a('0x2')],'defaultValue':![]},'ChatInternalMessageId':{'type':Sequelize[_0xf33a('0x3')]}};
\ No newline at end of file
+var _0x3a6d=['medium','BOOLEAN','INTEGER','sequelize','exports'];(function(_0x563a6f,_0x2fce42){var _0x174722=function(_0x2fa8b4){while(--_0x2fa8b4){_0x563a6f['push'](_0x563a6f['shift']());}};_0x174722(++_0x2fce42);}(_0x3a6d,0x143));var _0xd3a6=function(_0x1928c9,_0x13a6d1){_0x1928c9=_0x1928c9-0x0;var _0x51b5fb=_0x3a6d[_0x1928c9];return _0x51b5fb;};'use strict';var Sequelize=require(_0xd3a6('0x0'));module[_0xd3a6('0x1')]={'body':{'type':Sequelize['TEXT'](_0xd3a6('0x2')),'allowNull':![]},'read':{'type':Sequelize[_0xd3a6('0x3')],'defaultValue':![]},'ChatInternalMessageId':{'type':Sequelize[_0xd3a6('0x4')]}};
\ No newline at end of file
index 97e4643..0083d88 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2d74=['-createdAt','all','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/utils','../../config/environment','../../mysqldb','defaults','localhost','redis','./chatInternalMessage.socket','register','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','sendStatus','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','order','sort','where','pick','filter','map','type','key','VIRTUAL','merge','options','ChatInternalMessage','includeAll','include','findAll','params','length','find','catch','create','body','describe','get','messages','lastMessageAt','lastMessage','format','YYYY-MM-DD\x20HH:mm:ss','getUsers','agent','admin','user','fullname','role','internal','lastLoginAt','-online','VoiceQueue','VoiceQueues','autoAssociation','UserProfileResource','isEmpty','push','createdAt','FromId','ToId','read'];(function(_0x278f9f,_0x197e5b){var _0x37ad23=function(_0x3b73d9){while(--_0x3b73d9){_0x278f9f['push'](_0x278f9f['shift']());}};_0x37ad23(++_0x197e5b);}(_0x2d74,0x143));var _0x42d7=function(_0x3cba85,_0x2cd06b){_0x3cba85=_0x3cba85-0x0;var _0x4773df=_0x2d74[_0x3cba85];return _0x4773df;};'use strict';var pdf=require(_0x42d7('0x0'));var emlformat=require(_0x42d7('0x1'));var rimraf=require(_0x42d7('0x2'));var zipdir=require(_0x42d7('0x3'));var jsonpatch=require(_0x42d7('0x4'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x42d7('0x5'));var Mustache=require(_0x42d7('0x6'));var util=require(_0x42d7('0x7'));var path=require(_0x42d7('0x8'));var sox=require('sox');var csv=require(_0x42d7('0x9'));var ejs=require(_0x42d7('0xa'));var fs=require('fs');var _=require(_0x42d7('0xb'));var squel=require(_0x42d7('0xc'));var crypto=require(_0x42d7('0xd'));var jsforce=require(_0x42d7('0xe'));var deskjs=require(_0x42d7('0xf'));var toCsv=require(_0x42d7('0x9'));var querystring=require(_0x42d7('0x10'));var Papa=require(_0x42d7('0x11'));var Redis=require(_0x42d7('0x12'));var authService=require(_0x42d7('0x13'));var qs=require(_0x42d7('0x14'));var hardwareService=require(_0x42d7('0x15'));var logger=require('../../config/logger')('api');var utils=require(_0x42d7('0x16'));var config=require(_0x42d7('0x17'));var db=require(_0x42d7('0x18'))['db'];config['redis']=_[_0x42d7('0x19')](config['redis'],{'host':_0x42d7('0x1a'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x42d7('0x1b')]));require(_0x42d7('0x1c'))[_0x42d7('0x1d')](socket);function respondWithStatusCode(_0x4c8c37,_0x3e9925){_0x3e9925=_0x3e9925||0xcc;return function(_0x18746c){if(_0x18746c){return _0x4c8c37['sendStatus'](_0x3e9925);}return _0x4c8c37[_0x42d7('0x1e')](_0x3e9925)[_0x42d7('0x1f')]();};}function respondWithResult(_0xd40ff7,_0x251647){_0x251647=_0x251647||0xc8;return function(_0x4d418e){if(_0x4d418e){return _0xd40ff7['status'](_0x251647)[_0x42d7('0x20')](_0x4d418e);}};}function respondWithFilteredResult(_0x39b8c7,_0x51ff58){return function(_0x4a6982){if(_0x4a6982){var _0x55c6c0=_0x4a6982[_0x42d7('0x21')],_0xe4c20f=_0x51ff58[_0x42d7('0x22')],_0x20d085=_0x51ff58[_0x42d7('0x22')]+_0x51ff58[_0x42d7('0x23')],_0x4035ee;if(_0x20d085>=_0x55c6c0){_0x20d085=_0x55c6c0;_0x4035ee=0xc8;}else{_0x4035ee=0xce;}_0x39b8c7[_0x42d7('0x1e')](_0x4035ee);return _0x39b8c7[_0x42d7('0x24')](_0x42d7('0x25'),_0xe4c20f+'-'+_0x20d085+'/'+_0x55c6c0)['json'](_0x4a6982);}return null;};}function patchUpdates(_0x1fffe8){return function(_0x10e810){try{jsonpatch[_0x42d7('0x26')](_0x10e810,_0x1fffe8,!![]);}catch(_0x3371cc){return BPromise[_0x42d7('0x27')](_0x3371cc);}return _0x10e810[_0x42d7('0x28')]();};}function saveUpdates(_0x5c5c8a,_0x392b3){return function(_0x1f60f0){if(_0x1f60f0){return _0x1f60f0[_0x42d7('0x29')](_0x5c5c8a)['then'](function(_0xb1b801){return _0xb1b801;});}return null;};}function removeEntity(_0x1dc271,_0x69dcd4){return function(_0x2c8b20){if(_0x2c8b20){return _0x2c8b20[_0x42d7('0x2a')]()[_0x42d7('0x2b')](function(){_0x1dc271[_0x42d7('0x1e')](0xcc)[_0x42d7('0x1f')]();});}};}function handleEntityNotFound(_0x3d0dd4,_0x1c82ce){return function(_0x1e835d){if(!_0x1e835d){_0x3d0dd4[_0x42d7('0x2c')](0x194);}return _0x1e835d;};}function handleError(_0x33c1b9,_0x41c137){_0x41c137=_0x41c137||0x1f4;return function(_0x4c664e){logger['error'](_0x4c664e[_0x42d7('0x2d')]);if(_0x4c664e[_0x42d7('0x2e')]){delete _0x4c664e[_0x42d7('0x2e')];}_0x33c1b9['status'](_0x41c137)[_0x42d7('0x2f')](_0x4c664e);};}exports[_0x42d7('0x30')]=function(_0x511203,_0x43e8aa){var _0x24ff44={},_0x45e084={},_0x55dc86={'count':0x0,'rows':[]};var _0xc59335=db['ChatInternalMessage'][_0x42d7('0x31')];_0x45e084[_0x42d7('0x32')]=_[_0x42d7('0x33')](_0xc59335);_0x45e084[_0x42d7('0x34')]=_[_0x42d7('0x33')](_0x511203[_0x42d7('0x34')]);_0x45e084[_0x42d7('0x35')]=_[_0x42d7('0x36')](_0x45e084[_0x42d7('0x32')],_0x45e084[_0x42d7('0x34')]);_0x24ff44[_0x42d7('0x37')]=_[_0x42d7('0x36')](_0x45e084[_0x42d7('0x32')],qs[_0x42d7('0x38')](_0x511203['query'][_0x42d7('0x38')]));_0x24ff44[_0x42d7('0x37')]=_0x24ff44['attributes']['length']?_0x24ff44[_0x42d7('0x37')]:_0x45e084[_0x42d7('0x32')];if(!_0x511203[_0x42d7('0x34')][_0x42d7('0x39')]('nolimit')){_0x24ff44['limit']=qs[_0x42d7('0x23')](_0x511203[_0x42d7('0x34')][_0x42d7('0x23')]);_0x24ff44[_0x42d7('0x22')]=qs[_0x42d7('0x22')](_0x511203[_0x42d7('0x34')][_0x42d7('0x22')]);}_0x24ff44[_0x42d7('0x3a')]=qs['sort'](_0x511203['query'][_0x42d7('0x3b')]);_0x24ff44[_0x42d7('0x3c')]=qs['filters'](_[_0x42d7('0x3d')](_0x511203[_0x42d7('0x34')],_0x45e084[_0x42d7('0x35')]));if(_0x511203[_0x42d7('0x34')][_0x42d7('0x3e')]){_0x24ff44[_0x42d7('0x3c')]=_['merge'](_0x24ff44[_0x42d7('0x3c')],{'$or':_[_0x42d7('0x3f')](_0xc59335,function(_0x5ec736){if(_0x5ec736[_0x42d7('0x40')][_0x42d7('0x41')]!==_0x42d7('0x42')){var _0x27ba97={};_0x27ba97[_0x5ec736['field']]={'$like':'%'+_0x511203[_0x42d7('0x34')][_0x42d7('0x3e')]+'%'};return _0x27ba97;}})});}_0x24ff44=_[_0x42d7('0x43')]({},_0x24ff44,_0x511203[_0x42d7('0x44')]);var _0x80658c={'where':_0x24ff44[_0x42d7('0x3c')]};return db[_0x42d7('0x45')][_0x42d7('0x21')](_0x80658c)[_0x42d7('0x2b')](function(_0x3ca8a8){_0x55dc86['count']=_0x3ca8a8;if(_0x511203[_0x42d7('0x34')][_0x42d7('0x46')]){_0x24ff44[_0x42d7('0x47')]=[{'all':!![]}];}return db[_0x42d7('0x45')][_0x42d7('0x48')](_0x24ff44);})[_0x42d7('0x2b')](function(_0x1d9ffb){_0x55dc86['rows']=_0x1d9ffb;return _0x55dc86;})[_0x42d7('0x2b')](respondWithFilteredResult(_0x43e8aa,_0x24ff44))['catch'](handleError(_0x43e8aa,null));};exports['show']=function(_0x12a53c,_0x204e4e){var _0x5aee2b={'raw':!![],'where':{'id':_0x12a53c[_0x42d7('0x49')]['id']}},_0x2a7f69={};_0x2a7f69[_0x42d7('0x32')]=_['keys'](db[_0x42d7('0x45')][_0x42d7('0x31')]);_0x2a7f69['query']=_[_0x42d7('0x33')](_0x12a53c[_0x42d7('0x34')]);_0x2a7f69[_0x42d7('0x35')]=_[_0x42d7('0x36')](_0x2a7f69[_0x42d7('0x32')],_0x2a7f69[_0x42d7('0x34')]);_0x5aee2b[_0x42d7('0x37')]=_[_0x42d7('0x36')](_0x2a7f69[_0x42d7('0x32')],qs[_0x42d7('0x38')](_0x12a53c[_0x42d7('0x34')][_0x42d7('0x38')]));_0x5aee2b[_0x42d7('0x37')]=_0x5aee2b['attributes'][_0x42d7('0x4a')]?_0x5aee2b[_0x42d7('0x37')]:_0x2a7f69[_0x42d7('0x32')];if(_0x12a53c[_0x42d7('0x34')][_0x42d7('0x46')]){_0x5aee2b[_0x42d7('0x47')]=[{'all':!![]}];}_0x5aee2b=_[_0x42d7('0x43')]({},_0x5aee2b,_0x12a53c[_0x42d7('0x44')]);return db[_0x42d7('0x45')][_0x42d7('0x4b')](_0x5aee2b)[_0x42d7('0x2b')](handleEntityNotFound(_0x204e4e,null))[_0x42d7('0x2b')](respondWithResult(_0x204e4e,null))[_0x42d7('0x4c')](handleError(_0x204e4e,null));};exports[_0x42d7('0x4d')]=function(_0x3c4ece,_0x4e8f1a){return db[_0x42d7('0x45')][_0x42d7('0x4d')](_0x3c4ece[_0x42d7('0x4e')],{})[_0x42d7('0x2b')](respondWithResult(_0x4e8f1a,0xc9))['catch'](handleError(_0x4e8f1a,null));};exports[_0x42d7('0x29')]=function(_0x1a68d0,_0x2b500b){if(_0x1a68d0[_0x42d7('0x4e')]['id']){delete _0x1a68d0['body']['id'];}return db[_0x42d7('0x45')][_0x42d7('0x4b')]({'where':{'id':_0x1a68d0[_0x42d7('0x49')]['id']}})['then'](handleEntityNotFound(_0x2b500b,null))['then'](saveUpdates(_0x1a68d0['body'],null))[_0x42d7('0x2b')](respondWithResult(_0x2b500b,null))[_0x42d7('0x4c')](handleError(_0x2b500b,null));};exports[_0x42d7('0x2a')]=function(_0x56eb2d,_0x1113ab){return db[_0x42d7('0x45')][_0x42d7('0x4b')]({'where':{'id':_0x56eb2d[_0x42d7('0x49')]['id']}})['then'](handleEntityNotFound(_0x1113ab,null))['then'](removeEntity(_0x1113ab,null))['catch'](handleError(_0x1113ab,null));};exports[_0x42d7('0x4f')]=function(_0x129797,_0x42e96d){return db['ChatInternalMessage'][_0x42d7('0x4f')]()[_0x42d7('0x2b')](respondWithResult(_0x42e96d,null))[_0x42d7('0x4c')](handleError(_0x42e96d,null));};function wrapUser(_0x37a7e1){return function(_0x11d46c){var _0x4e0e6f=_0x37a7e1[_0x42d7('0x50')]({'plain':!![]});_0x4e0e6f[_0x42d7('0x51')]=[];if(_0x11d46c){_0x4e0e6f[_0x42d7('0x52')]=_0x11d46c['createdAt'];_0x4e0e6f[_0x42d7('0x53')]=_0x11d46c;}else{_0x4e0e6f[_0x42d7('0x52')]=moment(0x0)[_0x42d7('0x54')](_0x42d7('0x55'));_0x4e0e6f[_0x42d7('0x53')]={};}return _0x4e0e6f;};}exports[_0x42d7('0x56')]=function(_0x21527b,_0x4221ba,_0x14e22a){var _0xba9923=[];return db['User'][_0x42d7('0x48')]({'where':{'role':[_0x42d7('0x57'),_0x42d7('0x58'),_0x42d7('0x59')]},'attributes':['id',_0x42d7('0x5a'),'name',_0x42d7('0x5b'),'userpic',_0x42d7('0x5c'),'online',_0x42d7('0x5d'),'allowmessenger','showWebBar'],'order':qs['sort'](_0x42d7('0x5e')),'include':[{'model':db[_0x42d7('0x5f')],'as':_0x42d7('0x60'),'attributes':['id',_0x42d7('0x2e'),_0x42d7('0x40')],'through':{'attributes':[]}}]})[_0x42d7('0x2b')](function(_0x70a7a8){if(_0x70a7a8){var _0x26a529=_0x21527b[_0x42d7('0x59')][_0x42d7('0x50')]({'plain':!![]});if(!_0x26a529)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x26a529[_0x42d7('0x5b')]===_0x42d7('0x59')){return db['UserProfileSection']['find']({'where':{'name':'Agents','userProfileId':_0x26a529['userProfileId']},'raw':!![]})[_0x42d7('0x2b')](function(_0x107f83){if(_0x107f83){if(_0x107f83[_0x42d7('0x61')]===0x0){return db[_0x42d7('0x62')]['findAll']({'where':{'sectionId':_0x107f83['id']},'raw':!![]})['then'](function(_0x584115){var _0x52d8a9=[];if(_[_0x42d7('0x63')](_0x584115)){_0x52d8a9=_[_0x42d7('0x3e')](_0x70a7a8,function(_0x12f56e){if(_0x12f56e[_0x42d7('0x5b')]!==_0x42d7('0x57')){return _0x12f56e;}});return _0x52d8a9;}else{for(var _0x1874f9=0x0;_0x1874f9<_0x70a7a8[_0x42d7('0x4a')];_0x1874f9++){var _0x311d87=_0x70a7a8[_0x1874f9];if(_0x311d87['role']===_0x42d7('0x57')){var _0x6c6ddd=_[_0x42d7('0x4b')](_0x584115,function(_0x13f29c){return _0x13f29c['resourceId']===_0x311d87['id'];});if(_0x6c6ddd)_0x52d8a9[_0x42d7('0x64')](_0x311d87);}else{_0x52d8a9[_0x42d7('0x64')](_0x311d87);}}return _0x52d8a9;}});}else{return _0x70a7a8;}}else{var _0x3a5c5f=_[_0x42d7('0x3e')](_0x70a7a8,function(_0x5ed18b){if(_0x5ed18b['role']!==_0x42d7('0x57')){return _0x5ed18b;}});return _0x3a5c5f;}});}else{return _0x70a7a8;}}})[_0x42d7('0x2b')](function(_0x283f89){var _0xaeabd2=[];if(_0x283f89){_0xba9923=_0x283f89;for(var _0x15e797=0x0;_0x15e797<_0x283f89[_0x42d7('0x4a')];_0x15e797+=0x1){_0xba9923[_0x15e797]['messages']=[];_0xaeabd2[_0x42d7('0x64')](db['ChatInternalMessage'][_0x42d7('0x4b')]({'where':{'FromId':[_0x21527b[_0x42d7('0x59')]['id'],_0x283f89[_0x15e797]['id']],'ToId':[_0x21527b[_0x42d7('0x59')]['id'],_0x283f89[_0x15e797]['id']],'ChatGroupId':null},'attributes':['id',_0x42d7('0x65'),_0x42d7('0x66'),_0x42d7('0x67'),_0x42d7('0x68'),'body'],'order':qs[_0x42d7('0x3b')](_0x42d7('0x69')),'limit':0x1,'offset':0x0,'raw':!![]})[_0x42d7('0x2b')](wrapUser(_0x283f89[_0x15e797])));}return BPromise[_0x42d7('0x6a')](_0xaeabd2);}return[];})[_0x42d7('0x2b')](function(_0x52d4a9){return{'rows':_0x52d4a9,'count':_0x52d4a9[_0x42d7('0x4a')]};})[_0x42d7('0x2b')](respondWithResult(_0x4221ba,null))[_0x42d7('0x4c')](handleError(_0x4221ba,null));};
\ No newline at end of file
+var _0xb9c7=['rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','key','VIRTUAL','field','options','ChatInternalMessage','includeAll','include','findAll','rows','catch','params','create','body','find','get','messages','lastMessageAt','createdAt','lastMessage','format','getUsers','User','agent','admin','user','userpic','internal','online','allowmessenger','showWebBar','-online','VoiceQueue','VoiceQueues','type','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','autoAssociation','UserProfileResource','isEmpty','resourceId','push','FromId','ToId','read','-createdAt','all','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','sendStatus','status','json','count','offset','apply','reject','then','destroy','end','stack','name','index'];(function(_0x3efd55,_0x185a43){var _0x302eef=function(_0x42adf7){while(--_0x42adf7){_0x3efd55['push'](_0x3efd55['shift']());}};_0x302eef(++_0x185a43);}(_0xb9c7,0x182));var _0x7b9c=function(_0x38f044,_0x4597b1){_0x38f044=_0x38f044-0x0;var _0x544f07=_0xb9c7[_0x38f044];return _0x544f07;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x7b9c('0x0'));var rimraf=require(_0x7b9c('0x1'));var zipdir=require(_0x7b9c('0x2'));var jsonpatch=require(_0x7b9c('0x3'));var rp=require(_0x7b9c('0x4'));var moment=require(_0x7b9c('0x5'));var BPromise=require(_0x7b9c('0x6'));var Mustache=require(_0x7b9c('0x7'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0x7b9c('0x8'));var ejs=require(_0x7b9c('0x9'));var fs=require('fs');var _=require(_0x7b9c('0xa'));var squel=require(_0x7b9c('0xb'));var crypto=require(_0x7b9c('0xc'));var jsforce=require(_0x7b9c('0xd'));var deskjs=require(_0x7b9c('0xe'));var toCsv=require(_0x7b9c('0x8'));var querystring=require(_0x7b9c('0xf'));var Papa=require(_0x7b9c('0x10'));var Redis=require(_0x7b9c('0x11'));var authService=require(_0x7b9c('0x12'));var qs=require(_0x7b9c('0x13'));var hardwareService=require(_0x7b9c('0x14'));var logger=require('../../config/logger')(_0x7b9c('0x15'));var utils=require(_0x7b9c('0x16'));var config=require(_0x7b9c('0x17'));var db=require(_0x7b9c('0x18'))['db'];config[_0x7b9c('0x19')]=_[_0x7b9c('0x1a')](config[_0x7b9c('0x19')],{'host':_0x7b9c('0x1b'),'port':0x18eb});var socket=require(_0x7b9c('0x1c'))(new Redis(config[_0x7b9c('0x19')]));require('./chatInternalMessage.socket')['register'](socket);function respondWithStatusCode(_0x402a3f,_0x48143c){_0x48143c=_0x48143c||0xcc;return function(_0x569672){if(_0x569672){return _0x402a3f[_0x7b9c('0x1d')](_0x48143c);}return _0x402a3f['status'](_0x48143c)['end']();};}function respondWithResult(_0x1f41bd,_0x2550a2){_0x2550a2=_0x2550a2||0xc8;return function(_0x2d25cf){if(_0x2d25cf){return _0x1f41bd[_0x7b9c('0x1e')](_0x2550a2)[_0x7b9c('0x1f')](_0x2d25cf);}};}function respondWithFilteredResult(_0x945d90,_0x3baab2){return function(_0x225933){if(_0x225933){var _0x1276ca=_0x225933[_0x7b9c('0x20')],_0x2e7788=_0x3baab2[_0x7b9c('0x21')],_0x3e8aae=_0x3baab2[_0x7b9c('0x21')]+_0x3baab2['limit'],_0x22bdb3;if(_0x3e8aae>=_0x1276ca){_0x3e8aae=_0x1276ca;_0x22bdb3=0xc8;}else{_0x22bdb3=0xce;}_0x945d90[_0x7b9c('0x1e')](_0x22bdb3);return _0x945d90['set']('Content-Range',_0x2e7788+'-'+_0x3e8aae+'/'+_0x1276ca)[_0x7b9c('0x1f')](_0x225933);}return null;};}function patchUpdates(_0x5b164c){return function(_0x1d169e){try{jsonpatch[_0x7b9c('0x22')](_0x1d169e,_0x5b164c,!![]);}catch(_0x33e0db){return BPromise[_0x7b9c('0x23')](_0x33e0db);}return _0x1d169e['save']();};}function saveUpdates(_0x5b4560,_0x1372d1){return function(_0x34a8a7){if(_0x34a8a7){return _0x34a8a7['update'](_0x5b4560)[_0x7b9c('0x24')](function(_0x422cec){return _0x422cec;});}return null;};}function removeEntity(_0x193d10,_0x5b3fb1){return function(_0x32001d){if(_0x32001d){return _0x32001d[_0x7b9c('0x25')]()[_0x7b9c('0x24')](function(){_0x193d10[_0x7b9c('0x1e')](0xcc)[_0x7b9c('0x26')]();});}};}function handleEntityNotFound(_0x2f868a,_0xf1a91e){return function(_0x1ca28d){if(!_0x1ca28d){_0x2f868a[_0x7b9c('0x1d')](0x194);}return _0x1ca28d;};}function handleError(_0x3bd4b9,_0x277e55){_0x277e55=_0x277e55||0x1f4;return function(_0x335499){logger['error'](_0x335499[_0x7b9c('0x27')]);if(_0x335499['name']){delete _0x335499[_0x7b9c('0x28')];}_0x3bd4b9['status'](_0x277e55)['send'](_0x335499);};}exports[_0x7b9c('0x29')]=function(_0x1dda00,_0x12e30a){var _0x4e00dc={},_0x3bdca1={},_0x40fb8f={'count':0x0,'rows':[]};var _0x110fba=db['ChatInternalMessage'][_0x7b9c('0x2a')];_0x3bdca1[_0x7b9c('0x2b')]=_[_0x7b9c('0x2c')](_0x110fba);_0x3bdca1[_0x7b9c('0x2d')]=_[_0x7b9c('0x2c')](_0x1dda00[_0x7b9c('0x2d')]);_0x3bdca1[_0x7b9c('0x2e')]=_[_0x7b9c('0x2f')](_0x3bdca1['model'],_0x3bdca1[_0x7b9c('0x2d')]);_0x4e00dc[_0x7b9c('0x30')]=_[_0x7b9c('0x2f')](_0x3bdca1[_0x7b9c('0x2b')],qs['fields'](_0x1dda00['query'][_0x7b9c('0x31')]));_0x4e00dc[_0x7b9c('0x30')]=_0x4e00dc['attributes'][_0x7b9c('0x32')]?_0x4e00dc[_0x7b9c('0x30')]:_0x3bdca1[_0x7b9c('0x2b')];if(!_0x1dda00[_0x7b9c('0x2d')][_0x7b9c('0x33')](_0x7b9c('0x34'))){_0x4e00dc[_0x7b9c('0x35')]=qs['limit'](_0x1dda00[_0x7b9c('0x2d')][_0x7b9c('0x35')]);_0x4e00dc[_0x7b9c('0x21')]=qs[_0x7b9c('0x21')](_0x1dda00['query'][_0x7b9c('0x21')]);}_0x4e00dc[_0x7b9c('0x36')]=qs[_0x7b9c('0x37')](_0x1dda00[_0x7b9c('0x2d')][_0x7b9c('0x37')]);_0x4e00dc[_0x7b9c('0x38')]=qs[_0x7b9c('0x2e')](_[_0x7b9c('0x39')](_0x1dda00[_0x7b9c('0x2d')],_0x3bdca1['filters']));if(_0x1dda00[_0x7b9c('0x2d')][_0x7b9c('0x3a')]){_0x4e00dc[_0x7b9c('0x38')]=_[_0x7b9c('0x3b')](_0x4e00dc[_0x7b9c('0x38')],{'$or':_['map'](_0x110fba,function(_0x39a031){if(_0x39a031['type'][_0x7b9c('0x3c')]!==_0x7b9c('0x3d')){var _0x55fad2={};_0x55fad2[_0x39a031[_0x7b9c('0x3e')]]={'$like':'%'+_0x1dda00['query'][_0x7b9c('0x3a')]+'%'};return _0x55fad2;}})});}_0x4e00dc=_[_0x7b9c('0x3b')]({},_0x4e00dc,_0x1dda00[_0x7b9c('0x3f')]);var _0x38c90e={'where':_0x4e00dc[_0x7b9c('0x38')]};return db[_0x7b9c('0x40')][_0x7b9c('0x20')](_0x38c90e)[_0x7b9c('0x24')](function(_0x2bf8e7){_0x40fb8f['count']=_0x2bf8e7;if(_0x1dda00[_0x7b9c('0x2d')][_0x7b9c('0x41')]){_0x4e00dc[_0x7b9c('0x42')]=[{'all':!![]}];}return db['ChatInternalMessage'][_0x7b9c('0x43')](_0x4e00dc);})['then'](function(_0x34c9d6){_0x40fb8f[_0x7b9c('0x44')]=_0x34c9d6;return _0x40fb8f;})[_0x7b9c('0x24')](respondWithFilteredResult(_0x12e30a,_0x4e00dc))[_0x7b9c('0x45')](handleError(_0x12e30a,null));};exports['show']=function(_0x1b5b84,_0x3ba4e6){var _0x53f76a={'raw':!![],'where':{'id':_0x1b5b84[_0x7b9c('0x46')]['id']}},_0x1c1379={};_0x1c1379['model']=_[_0x7b9c('0x2c')](db[_0x7b9c('0x40')][_0x7b9c('0x2a')]);_0x1c1379[_0x7b9c('0x2d')]=_[_0x7b9c('0x2c')](_0x1b5b84['query']);_0x1c1379[_0x7b9c('0x2e')]=_[_0x7b9c('0x2f')](_0x1c1379[_0x7b9c('0x2b')],_0x1c1379[_0x7b9c('0x2d')]);_0x53f76a[_0x7b9c('0x30')]=_[_0x7b9c('0x2f')](_0x1c1379[_0x7b9c('0x2b')],qs[_0x7b9c('0x31')](_0x1b5b84[_0x7b9c('0x2d')][_0x7b9c('0x31')]));_0x53f76a[_0x7b9c('0x30')]=_0x53f76a['attributes'][_0x7b9c('0x32')]?_0x53f76a['attributes']:_0x1c1379['model'];if(_0x1b5b84['query']['includeAll']){_0x53f76a[_0x7b9c('0x42')]=[{'all':!![]}];}_0x53f76a=_['merge']({},_0x53f76a,_0x1b5b84[_0x7b9c('0x3f')]);return db[_0x7b9c('0x40')]['find'](_0x53f76a)[_0x7b9c('0x24')](handleEntityNotFound(_0x3ba4e6,null))[_0x7b9c('0x24')](respondWithResult(_0x3ba4e6,null))[_0x7b9c('0x45')](handleError(_0x3ba4e6,null));};exports[_0x7b9c('0x47')]=function(_0x534e62,_0xd50804){return db['ChatInternalMessage'][_0x7b9c('0x47')](_0x534e62[_0x7b9c('0x48')],{})['then'](respondWithResult(_0xd50804,0xc9))[_0x7b9c('0x45')](handleError(_0xd50804,null));};exports['update']=function(_0x543c39,_0x14094b){if(_0x543c39[_0x7b9c('0x48')]['id']){delete _0x543c39[_0x7b9c('0x48')]['id'];}return db[_0x7b9c('0x40')][_0x7b9c('0x49')]({'where':{'id':_0x543c39[_0x7b9c('0x46')]['id']}})['then'](handleEntityNotFound(_0x14094b,null))['then'](saveUpdates(_0x543c39[_0x7b9c('0x48')],null))[_0x7b9c('0x24')](respondWithResult(_0x14094b,null))['catch'](handleError(_0x14094b,null));};exports[_0x7b9c('0x25')]=function(_0x3aacf1,_0xbc6f04){return db[_0x7b9c('0x40')]['find']({'where':{'id':_0x3aacf1['params']['id']}})[_0x7b9c('0x24')](handleEntityNotFound(_0xbc6f04,null))[_0x7b9c('0x24')](removeEntity(_0xbc6f04,null))[_0x7b9c('0x45')](handleError(_0xbc6f04,null));};exports['describe']=function(_0x220854,_0x3f6049){return db[_0x7b9c('0x40')]['describe']()[_0x7b9c('0x24')](respondWithResult(_0x3f6049,null))[_0x7b9c('0x45')](handleError(_0x3f6049,null));};function wrapUser(_0x15b14a){return function(_0x1a1038){var _0x2742b7=_0x15b14a[_0x7b9c('0x4a')]({'plain':!![]});_0x2742b7[_0x7b9c('0x4b')]=[];if(_0x1a1038){_0x2742b7[_0x7b9c('0x4c')]=_0x1a1038[_0x7b9c('0x4d')];_0x2742b7[_0x7b9c('0x4e')]=_0x1a1038;}else{_0x2742b7[_0x7b9c('0x4c')]=moment(0x0)[_0x7b9c('0x4f')]('YYYY-MM-DD\x20HH:mm:ss');_0x2742b7[_0x7b9c('0x4e')]={};}return _0x2742b7;};}exports[_0x7b9c('0x50')]=function(_0x5bdeb5,_0x2eb6eb,_0x1175e5){var _0x505b00=[];return db[_0x7b9c('0x51')]['findAll']({'where':{'role':[_0x7b9c('0x52'),_0x7b9c('0x53'),_0x7b9c('0x54')]},'attributes':['id','fullname',_0x7b9c('0x28'),'role',_0x7b9c('0x55'),_0x7b9c('0x56'),_0x7b9c('0x57'),'lastLoginAt',_0x7b9c('0x58'),_0x7b9c('0x59')],'order':qs[_0x7b9c('0x37')](_0x7b9c('0x5a')),'include':[{'model':db[_0x7b9c('0x5b')],'as':_0x7b9c('0x5c'),'attributes':['id',_0x7b9c('0x28'),_0x7b9c('0x5d')],'through':{'attributes':[]}}]})['then'](function(_0x39796e){if(_0x39796e){var _0x18e7a2=_0x5bdeb5[_0x7b9c('0x54')][_0x7b9c('0x4a')]({'plain':!![]});if(!_0x18e7a2)throw new Error(_0x7b9c('0x5e'));if(_0x18e7a2[_0x7b9c('0x5f')]===_0x7b9c('0x54')){return db['UserProfileSection']['find']({'where':{'name':'Agents','userProfileId':_0x18e7a2[_0x7b9c('0x60')]},'raw':!![]})[_0x7b9c('0x24')](function(_0x4136e6){if(_0x4136e6){if(_0x4136e6[_0x7b9c('0x61')]===0x0){return db[_0x7b9c('0x62')]['findAll']({'where':{'sectionId':_0x4136e6['id']},'raw':!![]})[_0x7b9c('0x24')](function(_0x263d61){var _0x53d523=[];if(_[_0x7b9c('0x63')](_0x263d61)){_0x53d523=_[_0x7b9c('0x3a')](_0x39796e,function(_0x230fc8){if(_0x230fc8[_0x7b9c('0x5f')]!==_0x7b9c('0x52')){return _0x230fc8;}});return _0x53d523;}else{for(var _0xf82ef=0x0;_0xf82ef<_0x39796e[_0x7b9c('0x32')];_0xf82ef++){var _0x4aa63a=_0x39796e[_0xf82ef];if(_0x4aa63a['role']===_0x7b9c('0x52')){var _0x27c61f=_[_0x7b9c('0x49')](_0x263d61,function(_0x1d1dc9){return _0x1d1dc9[_0x7b9c('0x64')]===_0x4aa63a['id'];});if(_0x27c61f)_0x53d523[_0x7b9c('0x65')](_0x4aa63a);}else{_0x53d523[_0x7b9c('0x65')](_0x4aa63a);}}return _0x53d523;}});}else{return _0x39796e;}}else{var _0x1f9a90=_[_0x7b9c('0x3a')](_0x39796e,function(_0x41be44){if(_0x41be44[_0x7b9c('0x5f')]!=='agent'){return _0x41be44;}});return _0x1f9a90;}});}else{return _0x39796e;}}})[_0x7b9c('0x24')](function(_0x293976){var _0x498b12=[];if(_0x293976){_0x505b00=_0x293976;for(var _0x1a98c0=0x0;_0x1a98c0<_0x293976[_0x7b9c('0x32')];_0x1a98c0+=0x1){_0x505b00[_0x1a98c0][_0x7b9c('0x4b')]=[];_0x498b12['push'](db[_0x7b9c('0x40')][_0x7b9c('0x49')]({'where':{'FromId':[_0x5bdeb5[_0x7b9c('0x54')]['id'],_0x293976[_0x1a98c0]['id']],'ToId':[_0x5bdeb5['user']['id'],_0x293976[_0x1a98c0]['id']],'ChatGroupId':null},'attributes':['id',_0x7b9c('0x4d'),_0x7b9c('0x66'),_0x7b9c('0x67'),_0x7b9c('0x68'),_0x7b9c('0x48')],'order':qs[_0x7b9c('0x37')](_0x7b9c('0x69')),'limit':0x1,'offset':0x0,'raw':!![]})[_0x7b9c('0x24')](wrapUser(_0x293976[_0x1a98c0])));}return BPromise[_0x7b9c('0x6a')](_0x498b12);}return[];})[_0x7b9c('0x24')](function(_0x4150be){return{'rows':_0x4150be,'count':_0x4150be['length']};})['then'](respondWithResult(_0x2eb6eb,null))[_0x7b9c('0x45')](handleError(_0x2eb6eb,null));};
\ No newline at end of file
index e99f583..d9258a3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7fce=['remove','emit','hook','exports','events','../../mysqldb','ChatInternalMessage','save'];(function(_0xaddd81,_0x2f1683){var _0x4d5c43=function(_0x13fc1c){while(--_0x13fc1c){_0xaddd81['push'](_0xaddd81['shift']());}};_0x4d5c43(++_0x2f1683);}(_0x7fce,0xdc));var _0xe7fc=function(_0x255be4,_0x3053c5){_0x255be4=_0x255be4-0x0;var _0x255c63=_0x7fce[_0x255be4];return _0x255c63;};'use strict';var EventEmitter=require(_0xe7fc('0x0'));var ChatInternalMessage=require(_0xe7fc('0x1'))['db'][_0xe7fc('0x2')];var ChatInternalMessageEvents=new EventEmitter();ChatInternalMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xe7fc('0x3'),'afterUpdate':'update','afterDestroy':_0xe7fc('0x4')};function emitEvent(_0x51b19d){return function(_0x11cdec,_0x337972,_0x5810de){ChatInternalMessageEvents['emit'](_0x51b19d+':'+_0x11cdec['id'],_0x11cdec);ChatInternalMessageEvents[_0xe7fc('0x5')](_0x51b19d,_0x11cdec);_0x5810de(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];ChatInternalMessage[_0xe7fc('0x6')](e,emitEvent(event));}}module[_0xe7fc('0x7')]=ChatInternalMessageEvents;
\ No newline at end of file
+var _0xa0bc=['update','remove','emit','hasOwnProperty','hook','exports','../../mysqldb','ChatInternalMessage','save'];(function(_0x46306d,_0x5ddc3b){var _0x12e979=function(_0x154e55){while(--_0x154e55){_0x46306d['push'](_0x46306d['shift']());}};_0x12e979(++_0x5ddc3b);}(_0xa0bc,0x1b6));var _0xca0b=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xa0bc[_0x3dd15e];return _0x231fd0;};'use strict';var EventEmitter=require('events');var ChatInternalMessage=require(_0xca0b('0x0'))['db'][_0xca0b('0x1')];var ChatInternalMessageEvents=new EventEmitter();ChatInternalMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xca0b('0x2'),'afterUpdate':_0xca0b('0x3'),'afterDestroy':_0xca0b('0x4')};function emitEvent(_0x68ff4){return function(_0x2f7b56,_0x3a53b4,_0xf39a90){ChatInternalMessageEvents[_0xca0b('0x5')](_0x68ff4+':'+_0x2f7b56['id'],_0x2f7b56);ChatInternalMessageEvents[_0xca0b('0x5')](_0x68ff4,_0x2f7b56);_0xf39a90(null);};}for(var e in events){if(events[_0xca0b('0x6')](e)){var event=events[e];ChatInternalMessage[_0xca0b('0x7')](e,emitEvent(event));}}module[_0xca0b('0x8')]=ChatInternalMessageEvents;
\ No newline at end of file
index 58339b9..27c3ef4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6373=['utf8mb4_unicode_ci','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','exports','define','utf8mb4'];(function(_0x318a79,_0x3ae74e){var _0x1ba6a9=function(_0x5e7c32){while(--_0x5e7c32){_0x318a79['push'](_0x318a79['shift']());}};_0x1ba6a9(++_0x3ae74e);}(_0x6373,0xb7));var _0x3637=function(_0x21b39a,_0xdd4441){_0x21b39a=_0x21b39a-0x0;var _0x117375=_0x6373[_0x21b39a];return _0x117375;};'use strict';var _=require(_0x3637('0x0'));var util=require(_0x3637('0x1'));var logger=require(_0x3637('0x2'))(_0x3637('0x3'));var moment=require(_0x3637('0x4'));var BPromise=require(_0x3637('0x5'));var rp=require(_0x3637('0x6'));var fs=require('fs');var path=require(_0x3637('0x7'));var rimraf=require(_0x3637('0x8'));var config=require('../../config/environment');var attributes=require('./chatInternalMessage.attributes');module[_0x3637('0x9')]=function(_0x151fc8,_0x2b7783){return _0x151fc8[_0x3637('0xa')]('ChatInternalMessage',attributes,{'tableName':'chat_internal_messages','paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x3637('0xb'),'collate':_0x3637('0xc')});};
\ No newline at end of file
+var _0xa36b=['./chatInternalMessage.attributes','ChatInternalMessage','chat_internal_messages','utf8mb4_unicode_ci','util','../../config/logger','api','bluebird','request-promise','rimraf','../../config/environment'];(function(_0x2eb5bc,_0x4634c6){var _0x51c7b1=function(_0x1af430){while(--_0x1af430){_0x2eb5bc['push'](_0x2eb5bc['shift']());}};_0x51c7b1(++_0x4634c6);}(_0xa36b,0x1b1));var _0xba36=function(_0x460d4e,_0x2f39e1){_0x460d4e=_0x460d4e-0x0;var _0x59569b=_0xa36b[_0x460d4e];return _0x59569b;};'use strict';var _=require('lodash');var util=require(_0xba36('0x0'));var logger=require(_0xba36('0x1'))(_0xba36('0x2'));var moment=require('moment');var BPromise=require(_0xba36('0x3'));var rp=require(_0xba36('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0xba36('0x5'));var config=require(_0xba36('0x6'));var attributes=require(_0xba36('0x7'));module['exports']=function(_0x38f29e,_0x5210f7){return _0x38f29e['define'](_0xba36('0x8'),attributes,{'tableName':_0xba36('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':'utf8mb4','collate':_0xba36('0xa')});};
\ No newline at end of file
index f4a2b19..de0a80d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x714b=['randomstring','ioredis','../../config/utils','../../config/environment','client','redis','defaults','socket.io-emitter','./chatInternalMessage.socket','register','then','info','ChatInternalMessage,\x20%s,\x20%s','request\x20sent','debug','ChatInternalMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','util','moment','bluebird'];(function(_0x3de59a,_0x3e28b3){var _0x36dd0a=function(_0x149543){while(--_0x149543){_0x3de59a['push'](_0x3de59a['shift']());}};_0x36dd0a(++_0x3e28b3);}(_0x714b,0xed));var _0xb714=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x714b[_0x2dafbe];return _0x58a45a;};'use strict';var _=require('lodash');var util=require(_0xb714('0x0'));var moment=require(_0xb714('0x1'));var BPromise=require(_0xb714('0x2'));var rs=require(_0xb714('0x3'));var fs=require('fs');var Redis=require(_0xb714('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0xb714('0x5'));var logger=require('../../config/logger')('rpc');var config=require(_0xb714('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xb714('0x7')]['http']({'port':0x232a});config[_0xb714('0x8')]=_[_0xb714('0x9')](config[_0xb714('0x8')],{'host':'localhost','port':0x18eb});var socket=require(_0xb714('0xa'))(new Redis(config['redis']));require(_0xb714('0xb'))[_0xb714('0xc')](socket);function respondWithRpcPromise(_0x561f5c,_0xfb45a9,_0x3201d3){return new BPromise(function(_0x2487af,_0x2cc7e9){return client['request'](_0x561f5c,_0x3201d3)[_0xb714('0xd')](function(_0x918243){logger[_0xb714('0xe')](_0xb714('0xf'),_0xfb45a9,_0xb714('0x10'));logger[_0xb714('0x11')](_0xb714('0x12'),_0xfb45a9,_0xb714('0x10'),JSON[_0xb714('0x13')](_0x918243));if(_0x918243[_0xb714('0x14')]){if(_0x918243[_0xb714('0x14')][_0xb714('0x15')]===0x1f4){logger[_0xb714('0x14')](_0xb714('0xf'),_0xfb45a9,_0x918243['error']['message']);return _0x2cc7e9(_0x918243['error']['message']);}logger[_0xb714('0x14')]('ChatInternalMessage,\x20%s,\x20%s',_0xfb45a9,_0x918243[_0xb714('0x14')][_0xb714('0x16')]);return _0x2487af(_0x918243[_0xb714('0x14')]['message']);}else{logger[_0xb714('0xe')]('ChatInternalMessage,\x20%s,\x20%s',_0xfb45a9,_0xb714('0x10'));_0x2487af(_0x918243['result'][_0xb714('0x16')]);}})[_0xb714('0x17')](function(_0x3c2fba){logger[_0xb714('0x14')]('ChatInternalMessage,\x20%s,\x20%s',_0xfb45a9,_0x3c2fba);_0x2cc7e9(_0x3c2fba);});});}
\ No newline at end of file
+var _0x2aa0=['lodash','util','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','./chatInternalMessage.socket','register','then','info','ChatInternalMessage,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch'];(function(_0x2aa2ad,_0x3ac577){var _0x3e32ab=function(_0x48ceb8){while(--_0x48ceb8){_0x2aa2ad['push'](_0x2aa2ad['shift']());}};_0x3e32ab(++_0x3ac577);}(_0x2aa0,0x6c));var _0x02aa=function(_0x4b369d,_0x265eb8){_0x4b369d=_0x4b369d-0x0;var _0x571a98=_0x2aa0[_0x4b369d];return _0x571a98;};'use strict';var _=require(_0x02aa('0x0'));var util=require(_0x02aa('0x1'));var moment=require('moment');var BPromise=require(_0x02aa('0x2'));var rs=require(_0x02aa('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x02aa('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x02aa('0x5'))(_0x02aa('0x6'));var config=require(_0x02aa('0x7'));var jayson=require(_0x02aa('0x8'));var client=jayson[_0x02aa('0x9')][_0x02aa('0xa')]({'port':0x232a});config[_0x02aa('0xb')]=_[_0x02aa('0xc')](config[_0x02aa('0xb')],{'host':_0x02aa('0xd'),'port':0x18eb});var socket=require(_0x02aa('0xe'))(new Redis(config['redis']));require(_0x02aa('0xf'))[_0x02aa('0x10')](socket);function respondWithRpcPromise(_0x5af1ec,_0x6b4d7f,_0x1590b1){return new BPromise(function(_0x410540,_0x4a9912){return client['request'](_0x5af1ec,_0x1590b1)[_0x02aa('0x11')](function(_0x16aeb3){logger[_0x02aa('0x12')](_0x02aa('0x13'),_0x6b4d7f,_0x02aa('0x14'));logger['debug']('ChatInternalMessage,\x20%s,\x20%s,\x20%s',_0x6b4d7f,'request\x20sent',JSON[_0x02aa('0x15')](_0x16aeb3));if(_0x16aeb3[_0x02aa('0x16')]){if(_0x16aeb3[_0x02aa('0x16')][_0x02aa('0x17')]===0x1f4){logger[_0x02aa('0x16')](_0x02aa('0x13'),_0x6b4d7f,_0x16aeb3[_0x02aa('0x16')][_0x02aa('0x18')]);return _0x4a9912(_0x16aeb3[_0x02aa('0x16')][_0x02aa('0x18')]);}logger[_0x02aa('0x16')](_0x02aa('0x13'),_0x6b4d7f,_0x16aeb3[_0x02aa('0x16')][_0x02aa('0x18')]);return _0x410540(_0x16aeb3[_0x02aa('0x16')][_0x02aa('0x18')]);}else{logger[_0x02aa('0x12')](_0x02aa('0x13'),_0x6b4d7f,_0x02aa('0x14'));_0x410540(_0x16aeb3[_0x02aa('0x19')]['message']);}})[_0x02aa('0x1a')](function(_0x217e03){logger['error'](_0x02aa('0x13'),_0x6b4d7f,_0x217e03);_0x4a9912(_0x217e03);});});}
\ No newline at end of file
index ecb529a..d9108c0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x86ec=['./chatInternalMessage.events','save','remove','update','emit','register','length','chatInternalMessage:'];(function(_0x3f29b4,_0x2b5b02){var _0x4d8893=function(_0x464c1c){while(--_0x464c1c){_0x3f29b4['push'](_0x3f29b4['shift']());}};_0x4d8893(++_0x2b5b02);}(_0x86ec,0xb8));var _0xc86e=function(_0xade3e6,_0x55f613){_0xade3e6=_0xade3e6-0x0;var _0x25aa96=_0x86ec[_0xade3e6];return _0x25aa96;};'use strict';var ChatInternalMessageEvents=require(_0xc86e('0x0'));var events=[_0xc86e('0x1'),_0xc86e('0x2'),_0xc86e('0x3')];function createListener(_0x46f116,_0x1ce798){return function(_0x457136){_0x1ce798[_0xc86e('0x4')](_0x46f116,_0x457136);};}function removeListener(_0x516b85,_0x1afa1c){return function(){ChatInternalMessageEvents['removeListener'](_0x516b85,_0x1afa1c);};}exports[_0xc86e('0x5')]=function(_0x405f42){for(var _0x4919a1=0x0,_0x121709=events[_0xc86e('0x6')];_0x4919a1<_0x121709;_0x4919a1++){var _0x31875a=events[_0x4919a1];var _0x93f96=createListener(_0xc86e('0x7')+_0x31875a,_0x405f42);ChatInternalMessageEvents['on'](_0x31875a,_0x93f96);}};
\ No newline at end of file
+var _0xf4c0=['./chatInternalMessage.events','save','remove','update','emit','chatInternalMessage:'];(function(_0x538233,_0x622535){var _0x4c67e0=function(_0x24bdbd){while(--_0x24bdbd){_0x538233['push'](_0x538233['shift']());}};_0x4c67e0(++_0x622535);}(_0xf4c0,0x198));var _0x0f4c=function(_0x5c5d83,_0x391f13){_0x5c5d83=_0x5c5d83-0x0;var _0x3e94c5=_0xf4c0[_0x5c5d83];return _0x3e94c5;};'use strict';var ChatInternalMessageEvents=require(_0x0f4c('0x0'));var events=[_0x0f4c('0x1'),_0x0f4c('0x2'),_0x0f4c('0x3')];function createListener(_0x1f8da4,_0x4db235){return function(_0x1c3b42){_0x4db235[_0x0f4c('0x4')](_0x1f8da4,_0x1c3b42);};}function removeListener(_0x3171d3,_0x1a6ef1){return function(){ChatInternalMessageEvents['removeListener'](_0x3171d3,_0x1a6ef1);};}exports['register']=function(_0x57718d){for(var _0x1f35bb=0x0,_0x858d11=events['length'];_0x1f35bb<_0x858d11;_0x1f35bb++){var _0x502088=events[_0x1f35bb];var _0x4540a0=createListener(_0x0f4c('0x5')+_0x502088,_0x57718d);ChatInternalMessageEvents['on'](_0x502088,_0x4540a0);}};
\ No newline at end of file
index 691f117..9be7911 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd9fb=['../../config/environment','./chatInternalMessage.controller','isAuthenticated','get','/describe','describe','/users','/:id','show','post','create','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service'];(function(_0x232fb6,_0x3573e1){var _0x4443c5=function(_0x4b666d){while(--_0x4b666d){_0x232fb6['push'](_0x232fb6['shift']());}};_0x4443c5(++_0x3573e1);}(_0xd9fb,0x189));var _0xbd9f=function(_0xe66cf2,_0x32ba5f){_0xe66cf2=_0xe66cf2-0x0;var _0x2d84e7=_0xd9fb[_0xe66cf2];return _0x2d84e7;};'use strict';var multer=require(_0xbd9f('0x0'));var util=require(_0xbd9f('0x1'));var path=require(_0xbd9f('0x2'));var timeout=require(_0xbd9f('0x3'));var express=require(_0xbd9f('0x4'));var router=express[_0xbd9f('0x5')]();var auth=require(_0xbd9f('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0xbd9f('0x7'));var controller=require(_0xbd9f('0x8'));router['get']('/',auth[_0xbd9f('0x9')](),controller['index']);router[_0xbd9f('0xa')](_0xbd9f('0xb'),auth['isAuthenticated'](),controller[_0xbd9f('0xc')]);router[_0xbd9f('0xa')](_0xbd9f('0xd'),auth[_0xbd9f('0x9')](),controller['getUsers']);router[_0xbd9f('0xa')](_0xbd9f('0xe'),auth[_0xbd9f('0x9')](),controller[_0xbd9f('0xf')]);router[_0xbd9f('0x10')]('/',auth[_0xbd9f('0x9')](),controller[_0xbd9f('0x11')]);router['put']('/:id',controller['update']);router['delete'](_0xbd9f('0xe'),auth['isAuthenticated'](),controller[_0xbd9f('0x12')]);module[_0xbd9f('0x13')]=router;
\ No newline at end of file
+var _0x341c=['../../config/environment','./chatInternalMessage.controller','get','isAuthenticated','/describe','describe','getUsers','/:id','show','create','put','update','delete','destroy','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0xe60d38,_0x3fa82a){var _0x480b92=function(_0x2b1132){while(--_0x2b1132){_0xe60d38['push'](_0xe60d38['shift']());}};_0x480b92(++_0x3fa82a);}(_0x341c,0xcc));var _0xc341=function(_0x2697d9,_0x26806a){_0x2697d9=_0x2697d9-0x0;var _0x25e6ae=_0x341c[_0x2697d9];return _0x25e6ae;};'use strict';var multer=require(_0xc341('0x0'));var util=require('util');var path=require(_0xc341('0x1'));var timeout=require('connect-timeout');var express=require(_0xc341('0x2'));var router=express[_0xc341('0x3')]();var auth=require(_0xc341('0x4'));var interaction=require(_0xc341('0x5'));var config=require(_0xc341('0x6'));var controller=require(_0xc341('0x7'));router[_0xc341('0x8')]('/',auth[_0xc341('0x9')](),controller['index']);router[_0xc341('0x8')](_0xc341('0xa'),auth[_0xc341('0x9')](),controller[_0xc341('0xb')]);router[_0xc341('0x8')]('/users',auth[_0xc341('0x9')](),controller[_0xc341('0xc')]);router[_0xc341('0x8')](_0xc341('0xd'),auth[_0xc341('0x9')](),controller[_0xc341('0xe')]);router['post']('/',auth[_0xc341('0x9')](),controller[_0xc341('0xf')]);router[_0xc341('0x10')](_0xc341('0xd'),controller[_0xc341('0x11')]);router[_0xc341('0x12')]('/:id',auth['isAuthenticated'](),controller[_0xc341('0x13')]);module[_0xc341('0x14')]=router;
\ No newline at end of file
index 52a7526..da0015e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd9c0=['sequelize','BOOLEAN','ENUM','out'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0xd9c0,0xb0));var _0x0d9c=function(_0xc82192,_0x2207cb){_0xc82192=_0xc82192-0x0;var _0x259206=_0xd9c0[_0xc82192];return _0x259206;};'use strict';var Sequelize=require(_0x0d9c('0x0'));module['exports']={'body':{'type':Sequelize['TEXT']('medium'),'allowNull':![]},'read':{'type':Sequelize[_0x0d9c('0x1')],'defaultValue':![]},'secret':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'direction':{'type':Sequelize[_0x0d9c('0x2')]('in',_0x0d9c('0x3')),'defaultValue':'out','allowNull':![]},'readAt':{'type':Sequelize['DATE']}};
\ No newline at end of file
+var _0xffb4=['ENUM','out','DATE','sequelize','exports','medium','BOOLEAN'];(function(_0x34021d,_0x753aa6){var _0x16597b=function(_0x2d040a){while(--_0x2d040a){_0x34021d['push'](_0x34021d['shift']());}};_0x16597b(++_0x753aa6);}(_0xffb4,0x1a0));var _0x4ffb=function(_0x4ae6ef,_0xc2af80){_0x4ae6ef=_0x4ae6ef-0x0;var _0x3cbb4e=_0xffb4[_0x4ae6ef];return _0x3cbb4e;};'use strict';var Sequelize=require(_0x4ffb('0x0'));module[_0x4ffb('0x1')]={'body':{'type':Sequelize['TEXT'](_0x4ffb('0x2')),'allowNull':![]},'read':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'secret':{'type':Sequelize[_0x4ffb('0x3')],'defaultValue':![]},'direction':{'type':Sequelize[_0x4ffb('0x4')]('in',_0x4ffb('0x5')),'defaultValue':'out','allowNull':![]},'readAt':{'type':Sequelize[_0x4ffb('0x6')]}};
\ No newline at end of file
index 0156803..3b8324a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3d6d=['json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','name','index','ChatMessage','model','query','keys','attributes','intersection','fields','hasOwnProperty','nolimit','sort','where','filters','pick','filter','map','key','VIRTUAL','field','merge','options','includeAll','include','rows','show','rawAttributes','length','find','create','body','params','describe','../../config/logger','chat-interactions','chat','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','CmContact','Contact','get','ChatInteraction','ChatInteractionId','isNil','read1stAt','interaction','[CHATMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','stringify','null','AcceptMessage','acceptMessage','interface','SIP/%s','channel','event','accept','EventManager','acceptmessage','agent','[CHATMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','rejectMessage','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/environment','../../mysqldb','defaults','redis','localhost','socket.io-emitter','./chatMessage.socket','register','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','info','ChatMessage,\x20%s,\x20%s','request\x20sent','ChatMessage,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','sendStatus','status','end'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0x3d6d,0x1c6));var _0xd3d6=function(_0x872b02,_0x4f4458){_0x872b02=_0x872b02-0x0;var _0x1a6b24=_0x3d6d[_0x872b02];return _0x1a6b24;};'use strict';var pdf=require(_0xd3d6('0x0'));var emlformat=require(_0xd3d6('0x1'));var rimraf=require(_0xd3d6('0x2'));var zipdir=require(_0xd3d6('0x3'));var jsonpatch=require(_0xd3d6('0x4'));var rp=require(_0xd3d6('0x5'));var moment=require(_0xd3d6('0x6'));var BPromise=require(_0xd3d6('0x7'));var Mustache=require('mustache');var util=require(_0xd3d6('0x8'));var path=require('path');var sox=require(_0xd3d6('0x9'));var csv=require(_0xd3d6('0xa'));var ejs=require(_0xd3d6('0xb'));var fs=require('fs');var _=require(_0xd3d6('0xc'));var squel=require(_0xd3d6('0xd'));var crypto=require(_0xd3d6('0xe'));var jsforce=require(_0xd3d6('0xf'));var deskjs=require('desk.js');var toCsv=require(_0xd3d6('0xa'));var querystring=require(_0xd3d6('0x10'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xd3d6('0x11'));var qs=require(_0xd3d6('0x12'));var hardwareService=require(_0xd3d6('0x13'));var logger=require('../../config/logger')(_0xd3d6('0x14'));var utils=require('../../config/utils');var config=require(_0xd3d6('0x15'));var db=require(_0xd3d6('0x16'))['db'];config['redis']=_[_0xd3d6('0x17')](config[_0xd3d6('0x18')],{'host':_0xd3d6('0x19'),'port':0x18eb});var socket=require(_0xd3d6('0x1a'))(new Redis(config['redis']));require(_0xd3d6('0x1b'))[_0xd3d6('0x1c')](socket);var jayson=require(_0xd3d6('0x1d'));var client=jayson[_0xd3d6('0x1e')][_0xd3d6('0x1f')]({'port':0x232c});var client9002=jayson['client'][_0xd3d6('0x1f')]({'port':0x232a});function checkPasswordPattern(_0x52580a,_0x1662bb,_0x7c1a9d){if(_0x7c1a9d){var _0x83c20b=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x83c20b[_0xd3d6('0x20')](_0x1662bb)){return _0x52580a;}else{throw new Error(_0xd3d6('0x21'));}}else{return _0x52580a;}}function respondWithRpcPromise(_0x18ecdb,_0x5ee386,_0x584519,_0x26f5a3){return new BPromise(function(_0x4f8f4c,_0x496bef){var _0x19ac36=_0x26f5a3||client;return _0x19ac36['request'](_0x18ecdb,_0x584519)['then'](function(_0x179742){logger[_0xd3d6('0x22')](_0xd3d6('0x23'),_0x5ee386,_0xd3d6('0x24'));logger['debug'](_0xd3d6('0x25'),_0x5ee386,_0xd3d6('0x24'),JSON['stringify'](_0x179742));if(_0x179742[_0xd3d6('0x26')]){if(_0x179742['error'][_0xd3d6('0x27')]===0x1f4){logger['error'](_0xd3d6('0x23'),_0x5ee386,_0x179742[_0xd3d6('0x26')][_0xd3d6('0x28')]);return _0x496bef(_0x179742[_0xd3d6('0x26')][_0xd3d6('0x28')]);}logger[_0xd3d6('0x26')]('ChatMessage,\x20%s,\x20%s',_0x5ee386,_0x179742[_0xd3d6('0x26')][_0xd3d6('0x28')]);return _0x4f8f4c(_0x179742[_0xd3d6('0x26')][_0xd3d6('0x28')]);}else{logger[_0xd3d6('0x22')](_0xd3d6('0x23'),_0x5ee386,'request\x20sent');_0x4f8f4c(_0x179742[_0xd3d6('0x29')]['message']);}})[_0xd3d6('0x2a')](function(_0x5b577b){logger[_0xd3d6('0x26')](_0xd3d6('0x23'),_0x5ee386,_0x5b577b);_0x496bef(_0x5b577b);});});}function respondWithStatusCode(_0x3809c5,_0x5eab15){_0x5eab15=_0x5eab15||0xcc;return function(_0x32d5be){if(_0x32d5be){return _0x3809c5[_0xd3d6('0x2b')](_0x5eab15);}return _0x3809c5[_0xd3d6('0x2c')](_0x5eab15)[_0xd3d6('0x2d')]();};}function respondWithResult(_0x23d3b9,_0x56c08e){_0x56c08e=_0x56c08e||0xc8;return function(_0x3ed912){if(_0x3ed912){return _0x23d3b9['status'](_0x56c08e)[_0xd3d6('0x2e')](_0x3ed912);}};}function respondWithFilteredResult(_0xe8f1c0,_0x19a6e9){return function(_0x447749){if(_0x447749){var _0x6d289a=_0x447749[_0xd3d6('0x2f')],_0x4157c4=_0x19a6e9[_0xd3d6('0x30')],_0xb2177=_0x19a6e9[_0xd3d6('0x30')]+_0x19a6e9[_0xd3d6('0x31')],_0x5a8aff;if(_0xb2177>=_0x6d289a){_0xb2177=_0x6d289a;_0x5a8aff=0xc8;}else{_0x5a8aff=0xce;}_0xe8f1c0[_0xd3d6('0x2c')](_0x5a8aff);return _0xe8f1c0[_0xd3d6('0x32')](_0xd3d6('0x33'),_0x4157c4+'-'+_0xb2177+'/'+_0x6d289a)[_0xd3d6('0x2e')](_0x447749);}return null;};}function patchUpdates(_0x73c4bf){return function(_0x198f20){try{jsonpatch[_0xd3d6('0x34')](_0x198f20,_0x73c4bf,!![]);}catch(_0x21c1e8){return BPromise[_0xd3d6('0x35')](_0x21c1e8);}return _0x198f20[_0xd3d6('0x36')]();};}function saveUpdates(_0x3f932d,_0x2dea1e){return function(_0x2f79ff){if(_0x2f79ff){return _0x2f79ff[_0xd3d6('0x37')](_0x3f932d)['then'](function(_0x39f2ad){return _0x39f2ad;});}return null;};}function removeEntity(_0x500d62,_0x1d34d5){return function(_0x251989){if(_0x251989){return _0x251989[_0xd3d6('0x38')]()[_0xd3d6('0x39')](function(){_0x500d62[_0xd3d6('0x2c')](0xcc)[_0xd3d6('0x2d')]();});}};}function handleEntityNotFound(_0x113982,_0x3ac25b){return function(_0x33247a){if(!_0x33247a){_0x113982[_0xd3d6('0x2b')](0x194);}return _0x33247a;};}function handleError(_0x225726,_0x51d411){_0x51d411=_0x51d411||0x1f4;return function(_0xe31475){logger[_0xd3d6('0x26')](_0xe31475['stack']);if(_0xe31475[_0xd3d6('0x3a')]){delete _0xe31475['name'];}_0x225726[_0xd3d6('0x2c')](_0x51d411)['send'](_0xe31475);};}exports[_0xd3d6('0x3b')]=function(_0x12aa0d,_0x480e89){var _0x48f879={},_0x1d420a={},_0x2f9df5={'count':0x0,'rows':[]};var _0x33b37c=db[_0xd3d6('0x3c')]['rawAttributes'];_0x1d420a[_0xd3d6('0x3d')]=_['keys'](_0x33b37c);_0x1d420a[_0xd3d6('0x3e')]=_[_0xd3d6('0x3f')](_0x12aa0d[_0xd3d6('0x3e')]);_0x1d420a['filters']=_['intersection'](_0x1d420a[_0xd3d6('0x3d')],_0x1d420a[_0xd3d6('0x3e')]);_0x48f879[_0xd3d6('0x40')]=_[_0xd3d6('0x41')](_0x1d420a[_0xd3d6('0x3d')],qs[_0xd3d6('0x42')](_0x12aa0d[_0xd3d6('0x3e')]['fields']));_0x48f879[_0xd3d6('0x40')]=_0x48f879[_0xd3d6('0x40')]['length']?_0x48f879['attributes']:_0x1d420a['model'];if(!_0x12aa0d[_0xd3d6('0x3e')][_0xd3d6('0x43')](_0xd3d6('0x44'))){_0x48f879[_0xd3d6('0x31')]=qs[_0xd3d6('0x31')](_0x12aa0d['query'][_0xd3d6('0x31')]);_0x48f879[_0xd3d6('0x30')]=qs['offset'](_0x12aa0d[_0xd3d6('0x3e')]['offset']);}_0x48f879['order']=qs['sort'](_0x12aa0d[_0xd3d6('0x3e')][_0xd3d6('0x45')]);_0x48f879[_0xd3d6('0x46')]=qs[_0xd3d6('0x47')](_[_0xd3d6('0x48')](_0x12aa0d['query'],_0x1d420a[_0xd3d6('0x47')]));if(_0x12aa0d['query'][_0xd3d6('0x49')]){_0x48f879[_0xd3d6('0x46')]=_['merge'](_0x48f879[_0xd3d6('0x46')],{'$or':_[_0xd3d6('0x4a')](_0x33b37c,function(_0x248fb6){if(_0x248fb6['type'][_0xd3d6('0x4b')]!==_0xd3d6('0x4c')){var _0x511244={};_0x511244[_0x248fb6[_0xd3d6('0x4d')]]={'$like':'%'+_0x12aa0d[_0xd3d6('0x3e')][_0xd3d6('0x49')]+'%'};return _0x511244;}})});}_0x48f879=_[_0xd3d6('0x4e')]({},_0x48f879,_0x12aa0d[_0xd3d6('0x4f')]);var _0x2e1d4c={'where':_0x48f879[_0xd3d6('0x46')]};return db[_0xd3d6('0x3c')]['count'](_0x2e1d4c)[_0xd3d6('0x39')](function(_0x17109c){_0x2f9df5[_0xd3d6('0x2f')]=_0x17109c;if(_0x12aa0d[_0xd3d6('0x3e')][_0xd3d6('0x50')]){_0x48f879[_0xd3d6('0x51')]=[{'all':!![]}];}return db[_0xd3d6('0x3c')]['findAll'](_0x48f879);})[_0xd3d6('0x39')](function(_0x31a832){_0x2f9df5[_0xd3d6('0x52')]=_0x31a832;return _0x2f9df5;})[_0xd3d6('0x39')](respondWithFilteredResult(_0x480e89,_0x48f879))[_0xd3d6('0x2a')](handleError(_0x480e89,null));};exports[_0xd3d6('0x53')]=function(_0x2c76fb,_0x45765c){var _0x418a31={'raw':!![],'where':{'id':_0x2c76fb['params']['id']}},_0x2416f6={};_0x2416f6['model']=_[_0xd3d6('0x3f')](db['ChatMessage'][_0xd3d6('0x54')]);_0x2416f6[_0xd3d6('0x3e')]=_[_0xd3d6('0x3f')](_0x2c76fb[_0xd3d6('0x3e')]);_0x2416f6[_0xd3d6('0x47')]=_[_0xd3d6('0x41')](_0x2416f6[_0xd3d6('0x3d')],_0x2416f6[_0xd3d6('0x3e')]);_0x418a31[_0xd3d6('0x40')]=_[_0xd3d6('0x41')](_0x2416f6['model'],qs[_0xd3d6('0x42')](_0x2c76fb['query'][_0xd3d6('0x42')]));_0x418a31[_0xd3d6('0x40')]=_0x418a31['attributes'][_0xd3d6('0x55')]?_0x418a31['attributes']:_0x2416f6[_0xd3d6('0x3d')];if(_0x2c76fb[_0xd3d6('0x3e')][_0xd3d6('0x50')]){_0x418a31[_0xd3d6('0x51')]=[{'all':!![]}];}_0x418a31=_[_0xd3d6('0x4e')]({},_0x418a31,_0x2c76fb[_0xd3d6('0x4f')]);return db['ChatMessage'][_0xd3d6('0x56')](_0x418a31)['then'](handleEntityNotFound(_0x45765c,null))[_0xd3d6('0x39')](respondWithResult(_0x45765c,null))[_0xd3d6('0x2a')](handleError(_0x45765c,null));};exports[_0xd3d6('0x57')]=function(_0x51a1bb,_0x18be65){return db['ChatMessage'][_0xd3d6('0x57')](_0x51a1bb['body'],{})[_0xd3d6('0x39')](respondWithResult(_0x18be65,0xc9))[_0xd3d6('0x2a')](handleError(_0x18be65,null));};exports[_0xd3d6('0x37')]=function(_0x4b5030,_0x4925ad){if(_0x4b5030[_0xd3d6('0x58')]['id']){delete _0x4b5030[_0xd3d6('0x58')]['id'];}return db[_0xd3d6('0x3c')][_0xd3d6('0x56')]({'where':{'id':_0x4b5030[_0xd3d6('0x59')]['id']}})[_0xd3d6('0x39')](handleEntityNotFound(_0x4925ad,null))[_0xd3d6('0x39')](saveUpdates(_0x4b5030[_0xd3d6('0x58')],null))[_0xd3d6('0x39')](respondWithResult(_0x4925ad,null))[_0xd3d6('0x2a')](handleError(_0x4925ad,null));};exports[_0xd3d6('0x38')]=function(_0x3c3971,_0x53b0a1){return db[_0xd3d6('0x3c')][_0xd3d6('0x56')]({'where':{'id':_0x3c3971[_0xd3d6('0x59')]['id']}})[_0xd3d6('0x39')](handleEntityNotFound(_0x53b0a1,null))[_0xd3d6('0x39')](removeEntity(_0x53b0a1,null))['catch'](handleError(_0x53b0a1,null));};exports[_0xd3d6('0x5a')]=function(_0x382484,_0x14b824){return db[_0xd3d6('0x3c')][_0xd3d6('0x5a')]()[_0xd3d6('0x39')](respondWithResult(_0x14b824,null))[_0xd3d6('0x2a')](handleError(_0x14b824,null));};var interaction_log=require(_0xd3d6('0x5b'))(_0xd3d6('0x5c'));exports['accept']=function(_0x3d4ba4,_0x5581e5,_0x35e697){var _0x23abdf={'channel':_0xd3d6('0x5d')};if(_0x3d4ba4[_0xd3d6('0x58')]['id']){delete _0x3d4ba4[_0xd3d6('0x58')]['id'];}_0x3d4ba4[_0xd3d6('0x58')][_0xd3d6('0x5e')]=!![];_0x3d4ba4[_0xd3d6('0x58')][_0xd3d6('0x5f')]=moment()[_0xd3d6('0x60')](_0xd3d6('0x61'));_0x3d4ba4['body'][_0xd3d6('0x62')]=_0x3d4ba4['body'][_0xd3d6('0x62')]||_0x3d4ba4[_0xd3d6('0x63')]['id'];return db[_0xd3d6('0x3c')]['find']({'where':{'id':_0x3d4ba4[_0xd3d6('0x59')]['id'],'UserId':null},'include':[{'model':db[_0xd3d6('0x64')],'as':_0xd3d6('0x65')}]})[_0xd3d6('0x39')](handleEntityNotFound(_0x5581e5,null))['then'](saveUpdates(_0x3d4ba4[_0xd3d6('0x58')],null))['then'](function(_0x47712c){if(_0x47712c){_0x23abdf['message']=_0x47712c[_0xd3d6('0x66')]({'plain':!![]});return db[_0xd3d6('0x67')][_0xd3d6('0x56')]({'where':{'id':_0x47712c[_0xd3d6('0x68')]}});}return null;})[_0xd3d6('0x39')](handleEntityNotFound(_0x5581e5,null))[_0xd3d6('0x39')](function(_0x3797af){if(_0x3797af){return _0x3797af['update']({'UserId':_0x3d4ba4[_0xd3d6('0x58')]['UserId'],'read1stAt':_[_0xd3d6('0x69')](_0x3797af[_0xd3d6('0x6a')])?moment()['format'](_0xd3d6('0x61')):undefined});}return null;})[_0xd3d6('0x39')](function(_0x4e5557){if(_0x4e5557){_0x23abdf[_0xd3d6('0x6b')]=_0x4e5557[_0xd3d6('0x66')]({'plain':!![]});interaction_log[_0xd3d6('0x22')](_0xd3d6('0x6c'),_0x3d4ba4[_0xd3d6('0x63')]['id'],_0x3d4ba4['user'][_0xd3d6('0x3a')],_0x3d4ba4[_0xd3d6('0x63')][_0xd3d6('0x6d')],_0x23abdf[_0xd3d6('0x6b')]['id'],_0x3d4ba4['body']?JSON[_0xd3d6('0x6e')](_0x3d4ba4['body']):_0xd3d6('0x6f'));return respondWithRpcPromise(_0xd3d6('0x70'),_0xd3d6('0x71'),_0x23abdf);}return null;})['then'](function(_0x3b5a22){if(_0x3b5a22){if(_0x3d4ba4[_0xd3d6('0x58')]['manual']){_0x23abdf['message'][_0xd3d6('0x72')]=util[_0xd3d6('0x60')](_0xd3d6('0x73'),_0x3d4ba4[_0xd3d6('0x63')]['name']);_0x23abdf['message'][_0xd3d6('0x74')]=_0x23abdf[_0xd3d6('0x74')];_0x23abdf[_0xd3d6('0x28')][_0xd3d6('0x75')]=_0xd3d6('0x76');return respondWithRpcPromise('EventManager',_0xd3d6('0x77'),{'event':_0xd3d6('0x78'),'message':_['merge'](_0x23abdf[_0xd3d6('0x28')],JSON['parse'](_0x23abdf['interaction']['formData']))},client9002)[_0xd3d6('0x39')](function(){return _0x23abdf;});}return _0x23abdf;}return null;})[_0xd3d6('0x39')](respondWithResult(_0x5581e5,null))['catch'](handleError(_0x5581e5,null));};var interaction_log=require(_0xd3d6('0x5b'))(_0xd3d6('0x5c'));exports[_0xd3d6('0x35')]=function(_0x445c0f,_0x42b421,_0x7a5e0e){var _0x525223={'agent':{},'channel':_0xd3d6('0x5d')};if(_0x445c0f[_0xd3d6('0x58')]['id']){delete _0x445c0f['body']['id'];}_0x445c0f[_0xd3d6('0x58')]['UserId']=_0x445c0f[_0xd3d6('0x58')][_0xd3d6('0x62')]||_0x445c0f[_0xd3d6('0x63')]['id'];_0x525223[_0xd3d6('0x79')]['id']=_0x445c0f[_0xd3d6('0x58')][_0xd3d6('0x62')];return db[_0xd3d6('0x3c')][_0xd3d6('0x56')]({'where':{'id':_0x445c0f[_0xd3d6('0x59')]['id'],'UserId':null}})['then'](handleEntityNotFound(_0x42b421,null))[_0xd3d6('0x39')](function(_0x411978){if(_0x411978){_0x525223['message']=_0x411978[_0xd3d6('0x66')]({'plain':!![]});return db[_0xd3d6('0x67')]['find']({'where':{'id':_0x411978['ChatInteractionId']}});}return null;})[_0xd3d6('0x39')](handleEntityNotFound(_0x42b421,null))[_0xd3d6('0x39')](function(_0x2036e1){if(_0x2036e1){_0x525223['interaction']=_0x2036e1[_0xd3d6('0x66')]({'plain':!![]});interaction_log[_0xd3d6('0x22')](_0xd3d6('0x7a'),_0x445c0f[_0xd3d6('0x63')]['id'],_0x445c0f[_0xd3d6('0x63')][_0xd3d6('0x3a')],_0x445c0f['user'][_0xd3d6('0x6d')],_0x525223[_0xd3d6('0x6b')]['id'],_0x445c0f[_0xd3d6('0x58')]?JSON[_0xd3d6('0x6e')](_0x445c0f[_0xd3d6('0x58')]):'null');return respondWithRpcPromise(_0xd3d6('0x7b'),_0xd3d6('0x7c'),_0x525223);}return null;})[_0xd3d6('0x39')](function(_0x5011ff){if(_0x5011ff){_0x5011ff[_0xd3d6('0x28')][_0xd3d6('0x72')]=util[_0xd3d6('0x60')]('SIP/%s',_0x445c0f[_0xd3d6('0x63')]['name']);_0x5011ff['message']['channel']=_0x525223[_0xd3d6('0x74')];_0x5011ff[_0xd3d6('0x28')][_0xd3d6('0x75')]='reject';respondWithRpcPromise(_0xd3d6('0x77'),_0xd3d6('0x77'),{'event':'rejectmessage','message':_0x5011ff[_0xd3d6('0x28')]},client9002);return _0x525223;}return null;})['then'](respondWithResult(_0x42b421,null))['catch'](handleError(_0x42b421,null));};
\ No newline at end of file
+var _0x3bac=['mustache','util','path','to-csv','ejs','lodash','jsforce','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../mysqldb','redis','defaults','localhost','./chatMessage.socket','register','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','info','ChatMessage,\x20%s,\x20%s','ChatMessage,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','result','catch','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','stack','name','send','ChatMessage','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','map','key','VIRTUAL','field','options','includeAll','include','findAll','rows','find','create','body','params','describe','chat-interactions','accept','chat','read','readAt','YYYY-MM-DD\x20HH:mm:ss','UserId','user','CmContact','Contact','get','ChatInteractionId','isNil','read1stAt','format','role','interaction','AcceptMessage','acceptMessage','manual','interface','SIP/%s','channel','EventManager','merge','parse','formData','null','RejectMessage','rejectMessage','event','rejectmessage','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird'];(function(_0x532944,_0x5bb2ec){var _0x28004c=function(_0x361bc7){while(--_0x361bc7){_0x532944['push'](_0x532944['shift']());}};_0x28004c(++_0x5bb2ec);}(_0x3bac,0x1da));var _0xc3ba=function(_0x28fbbf,_0x11f896){_0x28fbbf=_0x28fbbf-0x0;var _0x543af6=_0x3bac[_0x28fbbf];return _0x543af6;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xc3ba('0x0'));var rimraf=require(_0xc3ba('0x1'));var zipdir=require(_0xc3ba('0x2'));var jsonpatch=require(_0xc3ba('0x3'));var rp=require('request-promise');var moment=require(_0xc3ba('0x4'));var BPromise=require(_0xc3ba('0x5'));var Mustache=require(_0xc3ba('0x6'));var util=require(_0xc3ba('0x7'));var path=require(_0xc3ba('0x8'));var sox=require('sox');var csv=require(_0xc3ba('0x9'));var ejs=require(_0xc3ba('0xa'));var fs=require('fs');var _=require(_0xc3ba('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xc3ba('0xc'));var deskjs=require('desk.js');var toCsv=require(_0xc3ba('0x9'));var querystring=require('querystring');var Papa=require(_0xc3ba('0xd'));var Redis=require('ioredis');var authService=require(_0xc3ba('0xe'));var qs=require(_0xc3ba('0xf'));var hardwareService=require(_0xc3ba('0x10'));var logger=require(_0xc3ba('0x11'))(_0xc3ba('0x12'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xc3ba('0x13'))['db'];config[_0xc3ba('0x14')]=_[_0xc3ba('0x15')](config[_0xc3ba('0x14')],{'host':_0xc3ba('0x16'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xc3ba('0x14')]));require(_0xc3ba('0x17'))[_0xc3ba('0x18')](socket);var jayson=require(_0xc3ba('0x19'));var client=jayson[_0xc3ba('0x1a')][_0xc3ba('0x1b')]({'port':0x232c});var client9002=jayson[_0xc3ba('0x1a')]['http']({'port':0x232a});function checkPasswordPattern(_0xd4ceb4,_0x14d29b,_0x24cfec){if(_0x24cfec){var _0x465eba=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x465eba[_0xc3ba('0x1c')](_0x14d29b)){return _0xd4ceb4;}else{throw new Error(_0xc3ba('0x1d'));}}else{return _0xd4ceb4;}}function respondWithRpcPromise(_0x46f0ae,_0x529b1c,_0xf8a29a,_0x519e54){return new BPromise(function(_0x47b3cc,_0x39a197){var _0x5403d2=_0x519e54||client;return _0x5403d2[_0xc3ba('0x1e')](_0x46f0ae,_0xf8a29a)['then'](function(_0x27a01a){logger[_0xc3ba('0x1f')](_0xc3ba('0x20'),_0x529b1c,'request\x20sent');logger['debug'](_0xc3ba('0x21'),_0x529b1c,_0xc3ba('0x22'),JSON[_0xc3ba('0x23')](_0x27a01a));if(_0x27a01a['error']){if(_0x27a01a[_0xc3ba('0x24')]['code']===0x1f4){logger[_0xc3ba('0x24')](_0xc3ba('0x20'),_0x529b1c,_0x27a01a['error']['message']);return _0x39a197(_0x27a01a[_0xc3ba('0x24')][_0xc3ba('0x25')]);}logger[_0xc3ba('0x24')]('ChatMessage,\x20%s,\x20%s',_0x529b1c,_0x27a01a['error'][_0xc3ba('0x25')]);return _0x47b3cc(_0x27a01a[_0xc3ba('0x24')][_0xc3ba('0x25')]);}else{logger['info'](_0xc3ba('0x20'),_0x529b1c,_0xc3ba('0x22'));_0x47b3cc(_0x27a01a[_0xc3ba('0x26')]['message']);}})[_0xc3ba('0x27')](function(_0x28dcc1){logger[_0xc3ba('0x24')](_0xc3ba('0x20'),_0x529b1c,_0x28dcc1);_0x39a197(_0x28dcc1);});});}function respondWithStatusCode(_0x315e9f,_0xa327df){_0xa327df=_0xa327df||0xcc;return function(_0xb73b33){if(_0xb73b33){return _0x315e9f[_0xc3ba('0x28')](_0xa327df);}return _0x315e9f['status'](_0xa327df)[_0xc3ba('0x29')]();};}function respondWithResult(_0x428ea5,_0x4504f9){_0x4504f9=_0x4504f9||0xc8;return function(_0x27404d){if(_0x27404d){return _0x428ea5[_0xc3ba('0x2a')](_0x4504f9)[_0xc3ba('0x2b')](_0x27404d);}};}function respondWithFilteredResult(_0x9d6ee0,_0x168da2){return function(_0x5c6a78){if(_0x5c6a78){var _0x59bbc3=_0x5c6a78[_0xc3ba('0x2c')],_0x11ce1f=_0x168da2[_0xc3ba('0x2d')],_0x2ef30a=_0x168da2[_0xc3ba('0x2d')]+_0x168da2[_0xc3ba('0x2e')],_0x5ae3ef;if(_0x2ef30a>=_0x59bbc3){_0x2ef30a=_0x59bbc3;_0x5ae3ef=0xc8;}else{_0x5ae3ef=0xce;}_0x9d6ee0[_0xc3ba('0x2a')](_0x5ae3ef);return _0x9d6ee0[_0xc3ba('0x2f')](_0xc3ba('0x30'),_0x11ce1f+'-'+_0x2ef30a+'/'+_0x59bbc3)[_0xc3ba('0x2b')](_0x5c6a78);}return null;};}function patchUpdates(_0x14971d){return function(_0x887ac7){try{jsonpatch[_0xc3ba('0x31')](_0x887ac7,_0x14971d,!![]);}catch(_0x180db0){return BPromise[_0xc3ba('0x32')](_0x180db0);}return _0x887ac7[_0xc3ba('0x33')]();};}function saveUpdates(_0x2cd83f,_0x39313c){return function(_0x2ac669){if(_0x2ac669){return _0x2ac669[_0xc3ba('0x34')](_0x2cd83f)[_0xc3ba('0x35')](function(_0x25a1de){return _0x25a1de;});}return null;};}function removeEntity(_0x28fec3,_0x31985c){return function(_0x300c22){if(_0x300c22){return _0x300c22[_0xc3ba('0x36')]()[_0xc3ba('0x35')](function(){_0x28fec3['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x65802d,_0x102f59){return function(_0x62da5b){if(!_0x62da5b){_0x65802d[_0xc3ba('0x28')](0x194);}return _0x62da5b;};}function handleError(_0x3844e4,_0x1a9318){_0x1a9318=_0x1a9318||0x1f4;return function(_0x2207f3){logger[_0xc3ba('0x24')](_0x2207f3[_0xc3ba('0x37')]);if(_0x2207f3['name']){delete _0x2207f3[_0xc3ba('0x38')];}_0x3844e4[_0xc3ba('0x2a')](_0x1a9318)[_0xc3ba('0x39')](_0x2207f3);};}exports['index']=function(_0x6e6378,_0x1eb8b8){var _0x408f64={},_0x30a797={},_0x345111={'count':0x0,'rows':[]};var _0xfa240d=db[_0xc3ba('0x3a')][_0xc3ba('0x3b')];_0x30a797[_0xc3ba('0x3c')]=_[_0xc3ba('0x3d')](_0xfa240d);_0x30a797[_0xc3ba('0x3e')]=_[_0xc3ba('0x3d')](_0x6e6378[_0xc3ba('0x3e')]);_0x30a797[_0xc3ba('0x3f')]=_['intersection'](_0x30a797[_0xc3ba('0x3c')],_0x30a797['query']);_0x408f64[_0xc3ba('0x40')]=_[_0xc3ba('0x41')](_0x30a797[_0xc3ba('0x3c')],qs[_0xc3ba('0x42')](_0x6e6378['query'][_0xc3ba('0x42')]));_0x408f64['attributes']=_0x408f64['attributes'][_0xc3ba('0x43')]?_0x408f64[_0xc3ba('0x40')]:_0x30a797['model'];if(!_0x6e6378[_0xc3ba('0x3e')][_0xc3ba('0x44')](_0xc3ba('0x45'))){_0x408f64[_0xc3ba('0x2e')]=qs[_0xc3ba('0x2e')](_0x6e6378[_0xc3ba('0x3e')][_0xc3ba('0x2e')]);_0x408f64[_0xc3ba('0x2d')]=qs[_0xc3ba('0x2d')](_0x6e6378['query'][_0xc3ba('0x2d')]);}_0x408f64[_0xc3ba('0x46')]=qs[_0xc3ba('0x47')](_0x6e6378[_0xc3ba('0x3e')][_0xc3ba('0x47')]);_0x408f64[_0xc3ba('0x48')]=qs[_0xc3ba('0x3f')](_['pick'](_0x6e6378[_0xc3ba('0x3e')],_0x30a797[_0xc3ba('0x3f')]));if(_0x6e6378[_0xc3ba('0x3e')][_0xc3ba('0x49')]){_0x408f64[_0xc3ba('0x48')]=_['merge'](_0x408f64[_0xc3ba('0x48')],{'$or':_[_0xc3ba('0x4a')](_0xfa240d,function(_0x593519){if(_0x593519['type'][_0xc3ba('0x4b')]!==_0xc3ba('0x4c')){var _0x41b08a={};_0x41b08a[_0x593519[_0xc3ba('0x4d')]]={'$like':'%'+_0x6e6378['query'][_0xc3ba('0x49')]+'%'};return _0x41b08a;}})});}_0x408f64=_['merge']({},_0x408f64,_0x6e6378[_0xc3ba('0x4e')]);var _0xf834e0={'where':_0x408f64['where']};return db[_0xc3ba('0x3a')][_0xc3ba('0x2c')](_0xf834e0)[_0xc3ba('0x35')](function(_0x35b9de){_0x345111['count']=_0x35b9de;if(_0x6e6378[_0xc3ba('0x3e')][_0xc3ba('0x4f')]){_0x408f64[_0xc3ba('0x50')]=[{'all':!![]}];}return db[_0xc3ba('0x3a')][_0xc3ba('0x51')](_0x408f64);})[_0xc3ba('0x35')](function(_0x3027dc){_0x345111[_0xc3ba('0x52')]=_0x3027dc;return _0x345111;})[_0xc3ba('0x35')](respondWithFilteredResult(_0x1eb8b8,_0x408f64))[_0xc3ba('0x27')](handleError(_0x1eb8b8,null));};exports['show']=function(_0x49f839,_0x5b8bbe){var _0x6d304f={'raw':!![],'where':{'id':_0x49f839['params']['id']}},_0x4d2ba0={};_0x4d2ba0['model']=_['keys'](db[_0xc3ba('0x3a')][_0xc3ba('0x3b')]);_0x4d2ba0[_0xc3ba('0x3e')]=_[_0xc3ba('0x3d')](_0x49f839['query']);_0x4d2ba0[_0xc3ba('0x3f')]=_['intersection'](_0x4d2ba0[_0xc3ba('0x3c')],_0x4d2ba0[_0xc3ba('0x3e')]);_0x6d304f[_0xc3ba('0x40')]=_[_0xc3ba('0x41')](_0x4d2ba0[_0xc3ba('0x3c')],qs['fields'](_0x49f839[_0xc3ba('0x3e')][_0xc3ba('0x42')]));_0x6d304f[_0xc3ba('0x40')]=_0x6d304f[_0xc3ba('0x40')][_0xc3ba('0x43')]?_0x6d304f['attributes']:_0x4d2ba0['model'];if(_0x49f839['query'][_0xc3ba('0x4f')]){_0x6d304f['include']=[{'all':!![]}];}_0x6d304f=_['merge']({},_0x6d304f,_0x49f839[_0xc3ba('0x4e')]);return db[_0xc3ba('0x3a')][_0xc3ba('0x53')](_0x6d304f)[_0xc3ba('0x35')](handleEntityNotFound(_0x5b8bbe,null))[_0xc3ba('0x35')](respondWithResult(_0x5b8bbe,null))[_0xc3ba('0x27')](handleError(_0x5b8bbe,null));};exports[_0xc3ba('0x54')]=function(_0x13a600,_0x594253){return db[_0xc3ba('0x3a')]['create'](_0x13a600[_0xc3ba('0x55')],{})[_0xc3ba('0x35')](respondWithResult(_0x594253,0xc9))[_0xc3ba('0x27')](handleError(_0x594253,null));};exports[_0xc3ba('0x34')]=function(_0x71020d,_0x1a555d){if(_0x71020d[_0xc3ba('0x55')]['id']){delete _0x71020d['body']['id'];}return db[_0xc3ba('0x3a')]['find']({'where':{'id':_0x71020d[_0xc3ba('0x56')]['id']}})[_0xc3ba('0x35')](handleEntityNotFound(_0x1a555d,null))['then'](saveUpdates(_0x71020d['body'],null))[_0xc3ba('0x35')](respondWithResult(_0x1a555d,null))[_0xc3ba('0x27')](handleError(_0x1a555d,null));};exports[_0xc3ba('0x36')]=function(_0x1f60dd,_0xf09b11){return db['ChatMessage'][_0xc3ba('0x53')]({'where':{'id':_0x1f60dd[_0xc3ba('0x56')]['id']}})[_0xc3ba('0x35')](handleEntityNotFound(_0xf09b11,null))[_0xc3ba('0x35')](removeEntity(_0xf09b11,null))[_0xc3ba('0x27')](handleError(_0xf09b11,null));};exports[_0xc3ba('0x57')]=function(_0x17a8aa,_0xa9d970){return db[_0xc3ba('0x3a')]['describe']()[_0xc3ba('0x35')](respondWithResult(_0xa9d970,null))[_0xc3ba('0x27')](handleError(_0xa9d970,null));};var interaction_log=require('../../config/logger')(_0xc3ba('0x58'));exports[_0xc3ba('0x59')]=function(_0x25710f,_0x3ef77b,_0xb2c75c){var _0x32cf17={'channel':_0xc3ba('0x5a')};if(_0x25710f[_0xc3ba('0x55')]['id']){delete _0x25710f['body']['id'];}_0x25710f['body'][_0xc3ba('0x5b')]=!![];_0x25710f[_0xc3ba('0x55')][_0xc3ba('0x5c')]=moment()['format'](_0xc3ba('0x5d'));_0x25710f[_0xc3ba('0x55')][_0xc3ba('0x5e')]=_0x25710f['body'][_0xc3ba('0x5e')]||_0x25710f[_0xc3ba('0x5f')]['id'];return db[_0xc3ba('0x3a')][_0xc3ba('0x53')]({'where':{'id':_0x25710f['params']['id'],'UserId':null},'include':[{'model':db[_0xc3ba('0x60')],'as':_0xc3ba('0x61')}]})[_0xc3ba('0x35')](handleEntityNotFound(_0x3ef77b,null))[_0xc3ba('0x35')](saveUpdates(_0x25710f['body'],null))['then'](function(_0x40049a){if(_0x40049a){_0x32cf17[_0xc3ba('0x25')]=_0x40049a[_0xc3ba('0x62')]({'plain':!![]});return db['ChatInteraction'][_0xc3ba('0x53')]({'where':{'id':_0x40049a[_0xc3ba('0x63')]}});}return null;})[_0xc3ba('0x35')](handleEntityNotFound(_0x3ef77b,null))['then'](function(_0x95f238){if(_0x95f238){return _0x95f238[_0xc3ba('0x34')]({'UserId':_0x25710f[_0xc3ba('0x55')][_0xc3ba('0x5e')],'read1stAt':_[_0xc3ba('0x64')](_0x95f238[_0xc3ba('0x65')])?moment()[_0xc3ba('0x66')](_0xc3ba('0x5d')):undefined});}return null;})[_0xc3ba('0x35')](function(_0x1144db){if(_0x1144db){_0x32cf17['interaction']=_0x1144db['get']({'plain':!![]});interaction_log[_0xc3ba('0x1f')]('[CHATMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x25710f['user']['id'],_0x25710f[_0xc3ba('0x5f')][_0xc3ba('0x38')],_0x25710f['user'][_0xc3ba('0x67')],_0x32cf17[_0xc3ba('0x68')]['id'],_0x25710f[_0xc3ba('0x55')]?JSON[_0xc3ba('0x23')](_0x25710f[_0xc3ba('0x55')]):'null');return respondWithRpcPromise(_0xc3ba('0x69'),_0xc3ba('0x6a'),_0x32cf17);}return null;})[_0xc3ba('0x35')](function(_0x45d422){if(_0x45d422){if(_0x25710f[_0xc3ba('0x55')][_0xc3ba('0x6b')]){_0x32cf17[_0xc3ba('0x25')][_0xc3ba('0x6c')]=util['format'](_0xc3ba('0x6d'),_0x25710f[_0xc3ba('0x5f')][_0xc3ba('0x38')]);_0x32cf17[_0xc3ba('0x25')][_0xc3ba('0x6e')]=_0x32cf17['channel'];_0x32cf17['message']['event']=_0xc3ba('0x59');return respondWithRpcPromise('EventManager',_0xc3ba('0x6f'),{'event':'acceptmessage','message':_[_0xc3ba('0x70')](_0x32cf17['message'],JSON[_0xc3ba('0x71')](_0x32cf17['interaction'][_0xc3ba('0x72')]))},client9002)[_0xc3ba('0x35')](function(){return _0x32cf17;});}return _0x32cf17;}return null;})['then'](respondWithResult(_0x3ef77b,null))[_0xc3ba('0x27')](handleError(_0x3ef77b,null));};var interaction_log=require('../../config/logger')(_0xc3ba('0x58'));exports['reject']=function(_0x310a82,_0x25325e,_0x39d624){var _0x1a0776={'agent':{},'channel':_0xc3ba('0x5a')};if(_0x310a82[_0xc3ba('0x55')]['id']){delete _0x310a82['body']['id'];}_0x310a82[_0xc3ba('0x55')]['UserId']=_0x310a82[_0xc3ba('0x55')][_0xc3ba('0x5e')]||_0x310a82[_0xc3ba('0x5f')]['id'];_0x1a0776['agent']['id']=_0x310a82['body']['UserId'];return db[_0xc3ba('0x3a')][_0xc3ba('0x53')]({'where':{'id':_0x310a82[_0xc3ba('0x56')]['id'],'UserId':null}})[_0xc3ba('0x35')](handleEntityNotFound(_0x25325e,null))['then'](function(_0x452576){if(_0x452576){_0x1a0776[_0xc3ba('0x25')]=_0x452576[_0xc3ba('0x62')]({'plain':!![]});return db['ChatInteraction']['find']({'where':{'id':_0x452576['ChatInteractionId']}});}return null;})[_0xc3ba('0x35')](handleEntityNotFound(_0x25325e,null))[_0xc3ba('0x35')](function(_0xd8fb42){if(_0xd8fb42){_0x1a0776[_0xc3ba('0x68')]=_0xd8fb42[_0xc3ba('0x62')]({'plain':!![]});interaction_log[_0xc3ba('0x1f')]('[CHATMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x310a82[_0xc3ba('0x5f')]['id'],_0x310a82[_0xc3ba('0x5f')][_0xc3ba('0x38')],_0x310a82[_0xc3ba('0x5f')][_0xc3ba('0x67')],_0x1a0776[_0xc3ba('0x68')]['id'],_0x310a82[_0xc3ba('0x55')]?JSON[_0xc3ba('0x23')](_0x310a82[_0xc3ba('0x55')]):_0xc3ba('0x73'));return respondWithRpcPromise(_0xc3ba('0x74'),_0xc3ba('0x75'),_0x1a0776);}return null;})[_0xc3ba('0x35')](function(_0x538dd5){if(_0x538dd5){_0x538dd5[_0xc3ba('0x25')][_0xc3ba('0x6c')]=util[_0xc3ba('0x66')](_0xc3ba('0x6d'),_0x310a82[_0xc3ba('0x5f')][_0xc3ba('0x38')]);_0x538dd5[_0xc3ba('0x25')]['channel']=_0x1a0776[_0xc3ba('0x6e')];_0x538dd5[_0xc3ba('0x25')][_0xc3ba('0x76')]=_0xc3ba('0x32');respondWithRpcPromise(_0xc3ba('0x6f'),'EventManager',{'event':_0xc3ba('0x77'),'message':_0x538dd5[_0xc3ba('0x25')]},client9002);return _0x1a0776;}return null;})['then'](respondWithResult(_0x25325e,null))[_0xc3ba('0x27')](handleError(_0x25325e,null));};
\ No newline at end of file
index 54997ce..8ae0fbb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9861=['remove','emit','hasOwnProperty','hook','exports','events','setMaxListeners','save','update'];(function(_0x342383,_0x159436){var _0x16a64e=function(_0x5a5311){while(--_0x5a5311){_0x342383['push'](_0x342383['shift']());}};_0x16a64e(++_0x159436);}(_0x9861,0x176));var _0x1986=function(_0x18547b,_0xf0af70){_0x18547b=_0x18547b-0x0;var _0x36bf54=_0x9861[_0x18547b];return _0x36bf54;};'use strict';var EventEmitter=require(_0x1986('0x0'));var ChatMessage=require('../../mysqldb')['db']['ChatMessage'];var ChatMessageEvents=new EventEmitter();ChatMessageEvents[_0x1986('0x1')](0x0);var events={'afterCreate':_0x1986('0x2'),'afterUpdate':_0x1986('0x3'),'afterDestroy':_0x1986('0x4')};function emitEvent(_0x2c59a4){return function(_0x44e5c9,_0x5462a7,_0xe033ef){ChatMessageEvents[_0x1986('0x5')](_0x2c59a4+':'+_0x44e5c9['id'],_0x44e5c9);ChatMessageEvents[_0x1986('0x5')](_0x2c59a4,_0x44e5c9);_0xe033ef(null);};}for(var e in events){if(events[_0x1986('0x6')](e)){var event=events[e];ChatMessage[_0x1986('0x7')](e,emitEvent(event));}}module[_0x1986('0x8')]=ChatMessageEvents;
\ No newline at end of file
+var _0x4959=['hasOwnProperty','hook','exports','ChatMessage','setMaxListeners','save','remove','emit'];(function(_0x4d19e0,_0x38f56f){var _0x22bc14=function(_0xc070df){while(--_0xc070df){_0x4d19e0['push'](_0x4d19e0['shift']());}};_0x22bc14(++_0x38f56f);}(_0x4959,0x9b));var _0x9495=function(_0x4761f5,_0x2bfb6e){_0x4761f5=_0x4761f5-0x0;var _0x14f637=_0x4959[_0x4761f5];return _0x14f637;};'use strict';var EventEmitter=require('events');var ChatMessage=require('../../mysqldb')['db'][_0x9495('0x0')];var ChatMessageEvents=new EventEmitter();ChatMessageEvents[_0x9495('0x1')](0x0);var events={'afterCreate':_0x9495('0x2'),'afterUpdate':'update','afterDestroy':_0x9495('0x3')};function emitEvent(_0x3144b5){return function(_0xc4582d,_0x180fb5,_0x53009d){ChatMessageEvents[_0x9495('0x4')](_0x3144b5+':'+_0xc4582d['id'],_0xc4582d);ChatMessageEvents[_0x9495('0x4')](_0x3144b5,_0xc4582d);_0x53009d(null);};}for(var e in events){if(events[_0x9495('0x5')](e)){var event=events[e];ChatMessage[_0x9495('0x6')](e,emitEvent(event));}}module[_0x9495('0x7')]=ChatMessageEvents;
\ No newline at end of file
index 5ccfa99..22af6da 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xab90=['body','FULLTEXT','models','get','toLowerCase','direction','secret','isNil','UserId','ChatInteraction','ChatInteractionId','then','update','createdAt','catch','error','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','moment','request-promise','path','rimraf','../../config/environment','./chatMessage.attributes','exports','define','fti_chat_messages'];(function(_0x3fe31e,_0x157ee3){var _0x1d0b1b=function(_0x2ca8bc){while(--_0x2ca8bc){_0x3fe31e['push'](_0x3fe31e['shift']());}};_0x1d0b1b(++_0x157ee3);}(_0xab90,0x1b5));var _0x0ab9=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0xab90[_0x57b54c];return _0x59cc19;};'use strict';var _=require(_0x0ab9('0x0'));var util=require(_0x0ab9('0x1'));var logger=require(_0x0ab9('0x2'))(_0x0ab9('0x3'));var moment=require(_0x0ab9('0x4'));var BPromise=require('bluebird');var rp=require(_0x0ab9('0x5'));var fs=require('fs');var path=require(_0x0ab9('0x6'));var rimraf=require(_0x0ab9('0x7'));var config=require(_0x0ab9('0x8'));var attributes=require(_0x0ab9('0x9'));module[_0x0ab9('0xa')]=function(_0x5aeca4,_0x15dcc0){return _0x5aeca4[_0x0ab9('0xb')]('ChatMessage',attributes,{'tableName':'chat_messages','paranoid':![],'indexes':[{'name':_0x0ab9('0xc'),'fields':[_0x0ab9('0xd')],'type':_0x0ab9('0xe')}],'timestamps':!![],'hooks':{'afterCreate':function(_0x4afc47,_0x32bfaf,_0x449620){var _0x5bebec=_0x5aeca4[_0x0ab9('0xf')];var _0x24e0bb=_0x4afc47[_0x0ab9('0x10')]({'plain':!![]});if(_0x24e0bb['direction'][_0x0ab9('0x11')]()==='in'||_0x24e0bb[_0x0ab9('0x12')][_0x0ab9('0x11')]()==='out'&&!_0x24e0bb[_0x0ab9('0x13')]&&!_[_0x0ab9('0x14')](_0x24e0bb[_0x0ab9('0x15')])){_0x5bebec[_0x0ab9('0x16')]['findOne']({'where':{'id':_0x24e0bb[_0x0ab9('0x17')]}})[_0x0ab9('0x18')](function(_0x8a3a1c){if(_0x8a3a1c){_0x8a3a1c[_0x0ab9('0x19')]({'lastMsgAt':_0x24e0bb[_0x0ab9('0x1a')],'lastMsgDirection':_0x24e0bb[_0x0ab9('0x12')][_0x0ab9('0x11')]()});}})[_0x0ab9('0x1b')](function(_0x2832f9){console[_0x0ab9('0x1c')](_0x2832f9);});}_0x449620();}},'charset':'utf8mb4','collate':_0x0ab9('0x1d')});};
\ No newline at end of file
+var _0x3895=['get','direction','toLowerCase','out','secret','isNil','ChatInteraction','findOne','ChatInteractionId','update','createdAt','error','utf8mb4_unicode_ci','../../config/logger','api','moment','request-promise','path','rimraf','../../config/environment','./chatMessage.attributes','exports','ChatMessage','chat_messages','body','FULLTEXT','models'];(function(_0x652cfa,_0x122079){var _0x1db690=function(_0x30910d){while(--_0x30910d){_0x652cfa['push'](_0x652cfa['shift']());}};_0x1db690(++_0x122079);}(_0x3895,0x1f3));var _0x5389=function(_0x36ffd5,_0x130ede){_0x36ffd5=_0x36ffd5-0x0;var _0x22bd77=_0x3895[_0x36ffd5];return _0x22bd77;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x5389('0x0'))(_0x5389('0x1'));var moment=require(_0x5389('0x2'));var BPromise=require('bluebird');var rp=require(_0x5389('0x3'));var fs=require('fs');var path=require(_0x5389('0x4'));var rimraf=require(_0x5389('0x5'));var config=require(_0x5389('0x6'));var attributes=require(_0x5389('0x7'));module[_0x5389('0x8')]=function(_0x2872db,_0x4f21bf){return _0x2872db['define'](_0x5389('0x9'),attributes,{'tableName':_0x5389('0xa'),'paranoid':![],'indexes':[{'name':'fti_chat_messages','fields':[_0x5389('0xb')],'type':_0x5389('0xc')}],'timestamps':!![],'hooks':{'afterCreate':function(_0x40abf8,_0x4c12e9,_0x3251e){var _0x22b841=_0x2872db[_0x5389('0xd')];var _0x3ea65e=_0x40abf8[_0x5389('0xe')]({'plain':!![]});if(_0x3ea65e[_0x5389('0xf')]['toLowerCase']()==='in'||_0x3ea65e[_0x5389('0xf')][_0x5389('0x10')]()===_0x5389('0x11')&&!_0x3ea65e[_0x5389('0x12')]&&!_[_0x5389('0x13')](_0x3ea65e['UserId'])){_0x22b841[_0x5389('0x14')][_0x5389('0x15')]({'where':{'id':_0x3ea65e[_0x5389('0x16')]}})['then'](function(_0x3f2f9d){if(_0x3f2f9d){_0x3f2f9d[_0x5389('0x17')]({'lastMsgAt':_0x3ea65e[_0x5389('0x18')],'lastMsgDirection':_0x3ea65e[_0x5389('0xf')][_0x5389('0x10')]()});}})['catch'](function(_0x4e3e39){console[_0x5389('0x19')](_0x4e3e39);});}_0x3251e();}},'charset':'utf8mb4','collate':_0x5389('0x1a')});};
\ No newline at end of file
index 62f03cf..7289c09 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbfa6=['redis','defaults','localhost','socket.io-emitter','./chatMessage.socket','register','request','then','info','ChatMessage,\x20%s,\x20%s','request\x20sent','ChatMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','create','body','options','raw','CreateChatMessage','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client'];(function(_0x35ca01,_0x2339d8){var _0x279bf5=function(_0x3409d1){while(--_0x3409d1){_0x35ca01['push'](_0x35ca01['shift']());}};_0x279bf5(++_0x2339d8);}(_0xbfa6,0xe3));var _0x6bfa=function(_0x24310a,_0x22f59f){_0x24310a=_0x24310a-0x0;var _0x34fe89=_0xbfa6[_0x24310a];return _0x34fe89;};'use strict';var _=require(_0x6bfa('0x0'));var util=require(_0x6bfa('0x1'));var moment=require(_0x6bfa('0x2'));var BPromise=require('bluebird');var rs=require(_0x6bfa('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x6bfa('0x4'))['db'];var utils=require(_0x6bfa('0x5'));var logger=require(_0x6bfa('0x6'))(_0x6bfa('0x7'));var config=require(_0x6bfa('0x8'));var jayson=require(_0x6bfa('0x9'));var client=jayson[_0x6bfa('0xa')]['http']({'port':0x232a});config[_0x6bfa('0xb')]=_[_0x6bfa('0xc')](config['redis'],{'host':_0x6bfa('0xd'),'port':0x18eb});var socket=require(_0x6bfa('0xe'))(new Redis(config[_0x6bfa('0xb')]));require(_0x6bfa('0xf'))[_0x6bfa('0x10')](socket);function respondWithRpcPromise(_0x5e74e8,_0x24afed,_0x5ae6d8){return new BPromise(function(_0x9d7fcf,_0x5bbf09){return client[_0x6bfa('0x11')](_0x5e74e8,_0x5ae6d8)[_0x6bfa('0x12')](function(_0x15b17d){logger[_0x6bfa('0x13')](_0x6bfa('0x14'),_0x24afed,_0x6bfa('0x15'));logger['debug'](_0x6bfa('0x16'),_0x24afed,'request\x20sent',JSON[_0x6bfa('0x17')](_0x15b17d));if(_0x15b17d[_0x6bfa('0x18')]){if(_0x15b17d[_0x6bfa('0x18')][_0x6bfa('0x19')]===0x1f4){logger[_0x6bfa('0x18')](_0x6bfa('0x14'),_0x24afed,_0x15b17d[_0x6bfa('0x18')][_0x6bfa('0x1a')]);return _0x5bbf09(_0x15b17d[_0x6bfa('0x18')]['message']);}logger[_0x6bfa('0x18')](_0x6bfa('0x14'),_0x24afed,_0x15b17d[_0x6bfa('0x18')][_0x6bfa('0x1a')]);return _0x9d7fcf(_0x15b17d[_0x6bfa('0x18')][_0x6bfa('0x1a')]);}else{logger[_0x6bfa('0x13')]('ChatMessage,\x20%s,\x20%s',_0x24afed,_0x6bfa('0x15'));_0x9d7fcf(_0x15b17d[_0x6bfa('0x1b')][_0x6bfa('0x1a')]);}})[_0x6bfa('0x1c')](function(_0x5d55ea){logger[_0x6bfa('0x18')](_0x6bfa('0x14'),_0x24afed,_0x5d55ea);_0x5bbf09(_0x5d55ea);});});}exports['CreateChatMessage']=function(_0x16f71b){var _0x2598f1=this;return new Promise(function(_0xdd757a,_0x3a5a87){return db['ChatMessage'][_0x6bfa('0x1d')](_0x16f71b[_0x6bfa('0x1e')],{'raw':_0x16f71b['options']?_0x16f71b[_0x6bfa('0x1f')][_0x6bfa('0x20')]===undefined?!![]:![]:!![]})[_0x6bfa('0x12')](function(_0x3ae96e){logger[_0x6bfa('0x13')](_0x6bfa('0x21'),_0x16f71b);logger['debug'](_0x6bfa('0x21'),_0x16f71b,JSON[_0x6bfa('0x17')](_0x3ae96e));_0xdd757a(_0x3ae96e);})[_0x6bfa('0x1c')](function(_0x46ff49){logger['error'](_0x6bfa('0x21'),_0x46ff49[_0x6bfa('0x1a')],_0x16f71b);_0x3a5a87(_0x2598f1[_0x6bfa('0x18')](0x1f4,_0x46ff49[_0x6bfa('0x1a')]));});});};
\ No newline at end of file
+var _0x91ba=['code','message','result','catch','CreateChatMessage','ChatMessage','create','options','raw','stringify','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','./chatMessage.socket','register','request','then','info','ChatMessage,\x20%s,\x20%s','request\x20sent','debug','error'];(function(_0x277ac8,_0x1ced1c){var _0x5d373a=function(_0x39b88b){while(--_0x39b88b){_0x277ac8['push'](_0x277ac8['shift']());}};_0x5d373a(++_0x1ced1c);}(_0x91ba,0x145));var _0xa91b=function(_0x4421db,_0x23cb15){_0x4421db=_0x4421db-0x0;var _0xecb851=_0x91ba[_0x4421db];return _0xecb851;};'use strict';var _=require(_0xa91b('0x0'));var util=require(_0xa91b('0x1'));var moment=require('moment');var BPromise=require(_0xa91b('0x2'));var rs=require(_0xa91b('0x3'));var fs=require('fs');var Redis=require(_0xa91b('0x4'));var db=require(_0xa91b('0x5'))['db'];var utils=require(_0xa91b('0x6'));var logger=require('../../config/logger')(_0xa91b('0x7'));var config=require(_0xa91b('0x8'));var jayson=require(_0xa91b('0x9'));var client=jayson[_0xa91b('0xa')][_0xa91b('0xb')]({'port':0x232a});config[_0xa91b('0xc')]=_[_0xa91b('0xd')](config[_0xa91b('0xc')],{'host':_0xa91b('0xe'),'port':0x18eb});var socket=require(_0xa91b('0xf'))(new Redis(config[_0xa91b('0xc')]));require(_0xa91b('0x10'))[_0xa91b('0x11')](socket);function respondWithRpcPromise(_0x53a1bf,_0x72dcbb,_0x4c68a6){return new BPromise(function(_0x456c79,_0x50ee39){return client[_0xa91b('0x12')](_0x53a1bf,_0x4c68a6)[_0xa91b('0x13')](function(_0x440ea0){logger[_0xa91b('0x14')](_0xa91b('0x15'),_0x72dcbb,_0xa91b('0x16'));logger[_0xa91b('0x17')]('ChatMessage,\x20%s,\x20%s,\x20%s',_0x72dcbb,_0xa91b('0x16'),JSON['stringify'](_0x440ea0));if(_0x440ea0['error']){if(_0x440ea0[_0xa91b('0x18')][_0xa91b('0x19')]===0x1f4){logger['error'](_0xa91b('0x15'),_0x72dcbb,_0x440ea0[_0xa91b('0x18')][_0xa91b('0x1a')]);return _0x50ee39(_0x440ea0[_0xa91b('0x18')]['message']);}logger[_0xa91b('0x18')]('ChatMessage,\x20%s,\x20%s',_0x72dcbb,_0x440ea0[_0xa91b('0x18')][_0xa91b('0x1a')]);return _0x456c79(_0x440ea0[_0xa91b('0x18')][_0xa91b('0x1a')]);}else{logger[_0xa91b('0x14')](_0xa91b('0x15'),_0x72dcbb,_0xa91b('0x16'));_0x456c79(_0x440ea0[_0xa91b('0x1b')][_0xa91b('0x1a')]);}})[_0xa91b('0x1c')](function(_0x447f46){logger['error']('ChatMessage,\x20%s,\x20%s',_0x72dcbb,_0x447f46);_0x50ee39(_0x447f46);});});}exports[_0xa91b('0x1d')]=function(_0x4824ef){var _0x3d645c=this;return new Promise(function(_0x573087,_0x14a077){return db[_0xa91b('0x1e')][_0xa91b('0x1f')](_0x4824ef['body'],{'raw':_0x4824ef[_0xa91b('0x20')]?_0x4824ef[_0xa91b('0x20')][_0xa91b('0x21')]===undefined?!![]:![]:!![]})[_0xa91b('0x13')](function(_0x1a4844){logger[_0xa91b('0x14')](_0xa91b('0x1d'),_0x4824ef);logger[_0xa91b('0x17')](_0xa91b('0x1d'),_0x4824ef,JSON[_0xa91b('0x22')](_0x1a4844));_0x573087(_0x1a4844);})[_0xa91b('0x1c')](function(_0x42235d){logger[_0xa91b('0x18')]('CreateChatMessage',_0x42235d[_0xa91b('0x1a')],_0x4824ef);_0x14a077(_0x3d645c[_0xa91b('0x18')](0x1f4,_0x42235d[_0xa91b('0x1a')]));});});};
\ No newline at end of file
index 64788b0..7d231ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x55ca=['removeListener','register','./chatMessage.events','save'];(function(_0x2bf141,_0x31eac7){var _0x48277b=function(_0x9fe560){while(--_0x9fe560){_0x2bf141['push'](_0x2bf141['shift']());}};_0x48277b(++_0x31eac7);}(_0x55ca,0x126));var _0xa55c=function(_0x26abc4,_0x52fbef){_0x26abc4=_0x26abc4-0x0;var _0xbfcce3=_0x55ca[_0x26abc4];return _0xbfcce3;};'use strict';var ChatMessageEvents=require(_0xa55c('0x0'));var events=[_0xa55c('0x1'),'remove','update'];function createListener(_0x49875a,_0x1c6ec3){return function(_0x267ea0){_0x1c6ec3['emit'](_0x49875a,_0x267ea0);};}function removeListener(_0x3b478a,_0x2db02a){return function(){ChatMessageEvents[_0xa55c('0x2')](_0x3b478a,_0x2db02a);};}exports[_0xa55c('0x3')]=function(_0x3c97c8){for(var _0x279caa=0x0,_0x36b623=events['length'];_0x279caa<_0x36b623;_0x279caa++){var _0x2121fd=events[_0x279caa];var _0x2537f0=createListener('chatMessage:'+_0x2121fd,_0x3c97c8);ChatMessageEvents['on'](_0x2121fd,_0x2537f0);}};
\ No newline at end of file
+var _0x9c44=['emit','removeListener','length','chatMessage:','remove','update'];(function(_0x46e0f9,_0x33b941){var _0x2a4a21=function(_0x186111){while(--_0x186111){_0x46e0f9['push'](_0x46e0f9['shift']());}};_0x2a4a21(++_0x33b941);}(_0x9c44,0x178));var _0x49c4=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x9c44[_0x3dd15e];return _0x231fd0;};'use strict';var ChatMessageEvents=require('./chatMessage.events');var events=['save',_0x49c4('0x0'),_0x49c4('0x1')];function createListener(_0x26844b,_0x1ba0bb){return function(_0x455700){_0x1ba0bb[_0x49c4('0x2')](_0x26844b,_0x455700);};}function removeListener(_0x4e0313,_0x4941f1){return function(){ChatMessageEvents[_0x49c4('0x3')](_0x4e0313,_0x4941f1);};}exports['register']=function(_0xc1278f){for(var _0x6030ae=0x0,_0x69bc41=events[_0x49c4('0x4')];_0x6030ae<_0x69bc41;_0x6030ae++){var _0x436234=events[_0x6030ae];var _0x511d53=createListener(_0x49c4('0x5')+_0x436234,_0xc1278f);ChatMessageEvents['on'](_0x436234,_0x511d53);}};
\ No newline at end of file
index 46673e2..1f0279c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x47f1=['path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','/:id','show','post','tracked','create','put','update','/:id/accept','accept','reject','delete','destroy','exports','multer','util'];(function(_0x12a538,_0x121edb){var _0x11464d=function(_0x14287d){while(--_0x14287d){_0x12a538['push'](_0x12a538['shift']());}};_0x11464d(++_0x121edb);}(_0x47f1,0xa6));var _0x147f=function(_0x4d9a83,_0x8f1d0b){_0x4d9a83=_0x4d9a83-0x0;var _0x167e7f=_0x47f1[_0x4d9a83];return _0x167e7f;};'use strict';var multer=require(_0x147f('0x0'));var util=require(_0x147f('0x1'));var path=require(_0x147f('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x147f('0x3')]();var auth=require(_0x147f('0x4'));var interaction=require(_0x147f('0x5'));var config=require(_0x147f('0x6'));var controller=require('./chatMessage.controller');router[_0x147f('0x7')]('/',auth[_0x147f('0x8')](),controller[_0x147f('0x9')]);router[_0x147f('0x7')](_0x147f('0xa'),auth[_0x147f('0x8')](),controller['describe']);router[_0x147f('0x7')](_0x147f('0xb'),auth['isAuthenticated'](),controller[_0x147f('0xc')]);router[_0x147f('0xd')]('/',auth[_0x147f('0x8')](),interaction[_0x147f('0xe')]('chat','chatmessage:create'),controller[_0x147f('0xf')]);router[_0x147f('0x10')](_0x147f('0xb'),controller[_0x147f('0x11')]);router['put'](_0x147f('0x12'),auth[_0x147f('0x8')](),controller[_0x147f('0x13')]);router[_0x147f('0x10')]('/:id/reject',auth[_0x147f('0x8')](),controller[_0x147f('0x14')]);router[_0x147f('0x15')](_0x147f('0xb'),auth[_0x147f('0x8')](),controller[_0x147f('0x16')]);module[_0x147f('0x17')]=router;
\ No newline at end of file
+var _0xba89=['post','tracked','chat','create','put','update','/:id/accept','accept','/:id/reject','reject','delete','exports','multer','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatMessage.controller','index','get','/describe','isAuthenticated','describe','/:id'];(function(_0xa6cc5c,_0x239c99){var _0x44803d=function(_0x515b6e){while(--_0x515b6e){_0xa6cc5c['push'](_0xa6cc5c['shift']());}};_0x44803d(++_0x239c99);}(_0xba89,0x89));var _0x9ba8=function(_0x5b6610,_0x2cc819){_0x5b6610=_0x5b6610-0x0;var _0x3aa2f8=_0xba89[_0x5b6610];return _0x3aa2f8;};'use strict';var multer=require(_0x9ba8('0x0'));var util=require('util');var path=require('path');var timeout=require('connect-timeout');var express=require(_0x9ba8('0x1'));var router=express[_0x9ba8('0x2')]();var auth=require(_0x9ba8('0x3'));var interaction=require(_0x9ba8('0x4'));var config=require(_0x9ba8('0x5'));var controller=require(_0x9ba8('0x6'));router['get']('/',auth['isAuthenticated'](),controller[_0x9ba8('0x7')]);router[_0x9ba8('0x8')](_0x9ba8('0x9'),auth[_0x9ba8('0xa')](),controller[_0x9ba8('0xb')]);router[_0x9ba8('0x8')](_0x9ba8('0xc'),auth[_0x9ba8('0xa')](),controller['show']);router[_0x9ba8('0xd')]('/',auth[_0x9ba8('0xa')](),interaction[_0x9ba8('0xe')](_0x9ba8('0xf'),'chatmessage:create'),controller[_0x9ba8('0x10')]);router[_0x9ba8('0x11')](_0x9ba8('0xc'),controller[_0x9ba8('0x12')]);router[_0x9ba8('0x11')](_0x9ba8('0x13'),auth['isAuthenticated'](),controller[_0x9ba8('0x14')]);router[_0x9ba8('0x11')](_0x9ba8('0x15'),auth[_0x9ba8('0xa')](),controller[_0x9ba8('0x16')]);router[_0x9ba8('0x17')]('/:id',auth[_0x9ba8('0xa')](),controller['destroy']);module[_0x9ba8('0x18')]=router;
\ No newline at end of file
index cb7bda8..e94df05 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe10b=['TEXT','medium'];(function(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0xe10b,0x98));var _0xbe10=function(_0x2432fc,_0xb7f1fe){_0x2432fc=_0x2432fc-0x0;var _0x994c53=_0xe10b[_0x2432fc];return _0x994c53;};'use strict';var Sequelize=require('sequelize');module['exports']={'body':{'type':Sequelize[_0xbe10('0x0')](_0xbe10('0x1')),'allowNull':![]}};
\ No newline at end of file
+var _0xcc62=['TEXT','sequelize'];(function(_0x3b150c,_0x2f93f8){var _0x5cd414=function(_0x26305e){while(--_0x26305e){_0x3b150c['push'](_0x3b150c['shift']());}};_0x5cd414(++_0x2f93f8);}(_0xcc62,0x10b));var _0x2cc6=function(_0xff80,_0x35522f){_0xff80=_0xff80-0x0;var _0x485b2e=_0xcc62[_0xff80];return _0x485b2e;};'use strict';var Sequelize=require(_0x2cc6('0x0'));module['exports']={'body':{'type':Sequelize[_0x2cc6('0x1')]('medium'),'allowNull':![]}};
\ No newline at end of file
index 95291a7..eafc4a0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe3d4=['desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','apply','reject','save','update','destroy','then','error','stack','name','index','rawAttributes','model','keys','query','attributes','fields','hasOwnProperty','limit','order','sort','where','filters','pick','filter','merge','map','type','key','VIRTUAL','options','ChatOfflineMessage','includeAll','include','rows','catch','show','params','intersection','find','create','body','describe','eml-format','rimraf','zip-dir','request-promise','moment','mustache','path','sox','ejs','lodash','crypto','jsforce'];(function(_0x573010,_0x2923c4){var _0x84c43d=function(_0x22c44d){while(--_0x22c44d){_0x573010['push'](_0x573010['shift']());}};_0x84c43d(++_0x2923c4);}(_0xe3d4,0xc6));var _0x4e3d=function(_0x2a3c4d,_0x9c6b37){_0x2a3c4d=_0x2a3c4d-0x0;var _0x55c390=_0xe3d4[_0x2a3c4d];return _0x55c390;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x4e3d('0x0'));var rimraf=require(_0x4e3d('0x1'));var zipdir=require(_0x4e3d('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x4e3d('0x3'));var moment=require(_0x4e3d('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x4e3d('0x5'));var util=require('util');var path=require(_0x4e3d('0x6'));var sox=require(_0x4e3d('0x7'));var csv=require('to-csv');var ejs=require(_0x4e3d('0x8'));var fs=require('fs');var _=require(_0x4e3d('0x9'));var squel=require('squel');var crypto=require(_0x4e3d('0xa'));var jsforce=require(_0x4e3d('0xb'));var deskjs=require(_0x4e3d('0xc'));var toCsv=require(_0x4e3d('0xd'));var querystring=require(_0x4e3d('0xe'));var Papa=require(_0x4e3d('0xf'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x4e3d('0x10'));var hardwareService=require(_0x4e3d('0x11'));var logger=require(_0x4e3d('0x12'))(_0x4e3d('0x13'));var utils=require(_0x4e3d('0x14'));var config=require(_0x4e3d('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x8841bb,_0x46d51d){_0x46d51d=_0x46d51d||0xcc;return function(_0x2fc5f6){if(_0x2fc5f6){return _0x8841bb[_0x4e3d('0x16')](_0x46d51d);}return _0x8841bb[_0x4e3d('0x17')](_0x46d51d)[_0x4e3d('0x18')]();};}function respondWithResult(_0x220884,_0x37ac10){_0x37ac10=_0x37ac10||0xc8;return function(_0x54debc){if(_0x54debc){return _0x220884[_0x4e3d('0x17')](_0x37ac10)[_0x4e3d('0x19')](_0x54debc);}};}function respondWithFilteredResult(_0x3b7b45,_0x5e0d2c){return function(_0x3708be){if(_0x3708be){var _0x438973=_0x3708be[_0x4e3d('0x1a')],_0x46bf2b=_0x5e0d2c[_0x4e3d('0x1b')],_0xc20768=_0x5e0d2c[_0x4e3d('0x1b')]+_0x5e0d2c['limit'],_0x1b829e;if(_0xc20768>=_0x438973){_0xc20768=_0x438973;_0x1b829e=0xc8;}else{_0x1b829e=0xce;}_0x3b7b45[_0x4e3d('0x17')](_0x1b829e);return _0x3b7b45['set']('Content-Range',_0x46bf2b+'-'+_0xc20768+'/'+_0x438973)[_0x4e3d('0x19')](_0x3708be);}return null;};}function patchUpdates(_0x493949){return function(_0x5a2389){try{jsonpatch[_0x4e3d('0x1c')](_0x5a2389,_0x493949,!![]);}catch(_0x2e37ad){return BPromise[_0x4e3d('0x1d')](_0x2e37ad);}return _0x5a2389[_0x4e3d('0x1e')]();};}function saveUpdates(_0x4c4d76,_0x35d75c){return function(_0x552ca7){if(_0x552ca7){return _0x552ca7[_0x4e3d('0x1f')](_0x4c4d76)['then'](function(_0x170f88){return _0x170f88;});}return null;};}function removeEntity(_0x39a112,_0x3c385c){return function(_0x534185){if(_0x534185){return _0x534185[_0x4e3d('0x20')]()[_0x4e3d('0x21')](function(){_0x39a112['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x18271a,_0x7a0b3c){return function(_0x35a31b){if(!_0x35a31b){_0x18271a[_0x4e3d('0x16')](0x194);}return _0x35a31b;};}function handleError(_0x3e6b53,_0x58a9cb){_0x58a9cb=_0x58a9cb||0x1f4;return function(_0xcec7a6){logger[_0x4e3d('0x22')](_0xcec7a6[_0x4e3d('0x23')]);if(_0xcec7a6['name']){delete _0xcec7a6[_0x4e3d('0x24')];}_0x3e6b53[_0x4e3d('0x17')](_0x58a9cb)['send'](_0xcec7a6);};}exports[_0x4e3d('0x25')]=function(_0x21d7e4,_0x3dbe0c){var _0x4a7820={},_0x727783={},_0x56395b={'count':0x0,'rows':[]};var _0x13fa95=db['ChatOfflineMessage'][_0x4e3d('0x26')];_0x727783[_0x4e3d('0x27')]=_[_0x4e3d('0x28')](_0x13fa95);_0x727783['query']=_[_0x4e3d('0x28')](_0x21d7e4[_0x4e3d('0x29')]);_0x727783['filters']=_['intersection'](_0x727783[_0x4e3d('0x27')],_0x727783[_0x4e3d('0x29')]);_0x4a7820[_0x4e3d('0x2a')]=_['intersection'](_0x727783[_0x4e3d('0x27')],qs[_0x4e3d('0x2b')](_0x21d7e4['query']['fields']));_0x4a7820[_0x4e3d('0x2a')]=_0x4a7820[_0x4e3d('0x2a')]['length']?_0x4a7820[_0x4e3d('0x2a')]:_0x727783['model'];if(!_0x21d7e4[_0x4e3d('0x29')][_0x4e3d('0x2c')]('nolimit')){_0x4a7820[_0x4e3d('0x2d')]=qs[_0x4e3d('0x2d')](_0x21d7e4[_0x4e3d('0x29')]['limit']);_0x4a7820[_0x4e3d('0x1b')]=qs[_0x4e3d('0x1b')](_0x21d7e4['query'][_0x4e3d('0x1b')]);}_0x4a7820[_0x4e3d('0x2e')]=qs['sort'](_0x21d7e4[_0x4e3d('0x29')][_0x4e3d('0x2f')]);_0x4a7820[_0x4e3d('0x30')]=qs[_0x4e3d('0x31')](_[_0x4e3d('0x32')](_0x21d7e4[_0x4e3d('0x29')],_0x727783[_0x4e3d('0x31')]));if(_0x21d7e4[_0x4e3d('0x29')][_0x4e3d('0x33')]){_0x4a7820[_0x4e3d('0x30')]=_[_0x4e3d('0x34')](_0x4a7820['where'],{'$or':_[_0x4e3d('0x35')](_0x13fa95,function(_0x3c16a2){if(_0x3c16a2[_0x4e3d('0x36')][_0x4e3d('0x37')]!==_0x4e3d('0x38')){var _0xcd3499={};_0xcd3499[_0x3c16a2['field']]={'$like':'%'+_0x21d7e4[_0x4e3d('0x29')][_0x4e3d('0x33')]+'%'};return _0xcd3499;}})});}_0x4a7820=_[_0x4e3d('0x34')]({},_0x4a7820,_0x21d7e4[_0x4e3d('0x39')]);var _0x36f4eb={'where':_0x4a7820[_0x4e3d('0x30')]};return db[_0x4e3d('0x3a')][_0x4e3d('0x1a')](_0x36f4eb)[_0x4e3d('0x21')](function(_0x32d986){_0x56395b[_0x4e3d('0x1a')]=_0x32d986;if(_0x21d7e4[_0x4e3d('0x29')][_0x4e3d('0x3b')]){_0x4a7820[_0x4e3d('0x3c')]=[{'all':!![]}];}return db[_0x4e3d('0x3a')]['findAll'](_0x4a7820);})[_0x4e3d('0x21')](function(_0x4e8745){_0x56395b[_0x4e3d('0x3d')]=_0x4e8745;return _0x56395b;})[_0x4e3d('0x21')](respondWithFilteredResult(_0x3dbe0c,_0x4a7820))[_0x4e3d('0x3e')](handleError(_0x3dbe0c,null));};exports[_0x4e3d('0x3f')]=function(_0x279e69,_0x8bbc10){var _0x501d59={'raw':!![],'where':{'id':_0x279e69[_0x4e3d('0x40')]['id']}},_0x2c9f5b={};_0x2c9f5b[_0x4e3d('0x27')]=_[_0x4e3d('0x28')](db[_0x4e3d('0x3a')]['rawAttributes']);_0x2c9f5b['query']=_[_0x4e3d('0x28')](_0x279e69[_0x4e3d('0x29')]);_0x2c9f5b[_0x4e3d('0x31')]=_['intersection'](_0x2c9f5b[_0x4e3d('0x27')],_0x2c9f5b[_0x4e3d('0x29')]);_0x501d59['attributes']=_[_0x4e3d('0x41')](_0x2c9f5b['model'],qs[_0x4e3d('0x2b')](_0x279e69[_0x4e3d('0x29')][_0x4e3d('0x2b')]));_0x501d59['attributes']=_0x501d59[_0x4e3d('0x2a')]['length']?_0x501d59[_0x4e3d('0x2a')]:_0x2c9f5b[_0x4e3d('0x27')];if(_0x279e69[_0x4e3d('0x29')]['includeAll']){_0x501d59[_0x4e3d('0x3c')]=[{'all':!![]}];}_0x501d59=_[_0x4e3d('0x34')]({},_0x501d59,_0x279e69[_0x4e3d('0x39')]);return db[_0x4e3d('0x3a')][_0x4e3d('0x42')](_0x501d59)[_0x4e3d('0x21')](handleEntityNotFound(_0x8bbc10,null))[_0x4e3d('0x21')](respondWithResult(_0x8bbc10,null))[_0x4e3d('0x3e')](handleError(_0x8bbc10,null));};exports[_0x4e3d('0x43')]=function(_0x454a6f,_0x5430e5){return db[_0x4e3d('0x3a')][_0x4e3d('0x43')](_0x454a6f[_0x4e3d('0x44')],{})[_0x4e3d('0x21')](respondWithResult(_0x5430e5,0xc9))[_0x4e3d('0x3e')](handleError(_0x5430e5,null));};exports[_0x4e3d('0x1f')]=function(_0x1cb9c,_0x2ed596){if(_0x1cb9c[_0x4e3d('0x44')]['id']){delete _0x1cb9c[_0x4e3d('0x44')]['id'];}return db[_0x4e3d('0x3a')][_0x4e3d('0x42')]({'where':{'id':_0x1cb9c['params']['id']}})['then'](handleEntityNotFound(_0x2ed596,null))[_0x4e3d('0x21')](saveUpdates(_0x1cb9c['body'],null))[_0x4e3d('0x21')](respondWithResult(_0x2ed596,null))[_0x4e3d('0x3e')](handleError(_0x2ed596,null));};exports[_0x4e3d('0x20')]=function(_0x229b3f,_0x403fa7){return db['ChatOfflineMessage'][_0x4e3d('0x42')]({'where':{'id':_0x229b3f[_0x4e3d('0x40')]['id']}})['then'](handleEntityNotFound(_0x403fa7,null))['then'](removeEntity(_0x403fa7,null))['catch'](handleError(_0x403fa7,null));};exports['describe']=function(_0x393854,_0xba207d){return db[_0x4e3d('0x3a')][_0x4e3d('0x45')]()[_0x4e3d('0x21')](respondWithResult(_0xba207d,null))[_0x4e3d('0x3e')](handleError(_0xba207d,null));};
\ No newline at end of file
+var _0xefda=['create','body','destroy','describe','html-pdf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','desk.js','to-csv','querystring','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','stack','name','send','ChatOfflineMessage','model','keys','query','intersection','attributes','fields','hasOwnProperty','order','sort','where','filters','pick','filter','type','key','VIRTUAL','field','merge','options','includeAll','include','findAll','rows','catch','params','rawAttributes','length','find'];(function(_0x5a1b05,_0x53582a){var _0x154fa7=function(_0x2dcbda){while(--_0x2dcbda){_0x5a1b05['push'](_0x5a1b05['shift']());}};_0x154fa7(++_0x53582a);}(_0xefda,0x96));var _0xaefd=function(_0x1e52b5,_0x33b9c0){_0x1e52b5=_0x1e52b5-0x0;var _0x2be842=_0xefda[_0x1e52b5];return _0x2be842;};'use strict';var pdf=require(_0xaefd('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xaefd('0x1'));var jsonpatch=require(_0xaefd('0x2'));var rp=require('request-promise');var moment=require(_0xaefd('0x3'));var BPromise=require(_0xaefd('0x4'));var Mustache=require(_0xaefd('0x5'));var util=require(_0xaefd('0x6'));var path=require(_0xaefd('0x7'));var sox=require(_0xaefd('0x8'));var csv=require('to-csv');var ejs=require(_0xaefd('0x9'));var fs=require('fs');var _=require(_0xaefd('0xa'));var squel=require(_0xaefd('0xb'));var crypto=require(_0xaefd('0xc'));var jsforce=require('jsforce');var deskjs=require(_0xaefd('0xd'));var toCsv=require(_0xaefd('0xe'));var querystring=require(_0xaefd('0xf'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0xaefd('0x10'));var hardwareService=require(_0xaefd('0x11'));var logger=require(_0xaefd('0x12'))(_0xaefd('0x13'));var utils=require(_0xaefd('0x14'));var config=require(_0xaefd('0x15'));var db=require(_0xaefd('0x16'))['db'];function respondWithStatusCode(_0x3dfddf,_0x27be0f){_0x27be0f=_0x27be0f||0xcc;return function(_0x382983){if(_0x382983){return _0x3dfddf[_0xaefd('0x17')](_0x27be0f);}return _0x3dfddf['status'](_0x27be0f)[_0xaefd('0x18')]();};}function respondWithResult(_0x4ac467,_0xd88c7c){_0xd88c7c=_0xd88c7c||0xc8;return function(_0x1725af){if(_0x1725af){return _0x4ac467[_0xaefd('0x19')](_0xd88c7c)[_0xaefd('0x1a')](_0x1725af);}};}function respondWithFilteredResult(_0x4ec92a,_0x16e4f4){return function(_0x13492c){if(_0x13492c){var _0x41f345=_0x13492c[_0xaefd('0x1b')],_0x411701=_0x16e4f4[_0xaefd('0x1c')],_0x10ee28=_0x16e4f4['offset']+_0x16e4f4[_0xaefd('0x1d')],_0x32f75e;if(_0x10ee28>=_0x41f345){_0x10ee28=_0x41f345;_0x32f75e=0xc8;}else{_0x32f75e=0xce;}_0x4ec92a[_0xaefd('0x19')](_0x32f75e);return _0x4ec92a[_0xaefd('0x1e')](_0xaefd('0x1f'),_0x411701+'-'+_0x10ee28+'/'+_0x41f345)[_0xaefd('0x1a')](_0x13492c);}return null;};}function patchUpdates(_0x244956){return function(_0x516e84){try{jsonpatch[_0xaefd('0x20')](_0x516e84,_0x244956,!![]);}catch(_0x182f9a){return BPromise[_0xaefd('0x21')](_0x182f9a);}return _0x516e84[_0xaefd('0x22')]();};}function saveUpdates(_0x45ebf2,_0x1f302c){return function(_0x5282ed){if(_0x5282ed){return _0x5282ed[_0xaefd('0x23')](_0x45ebf2)[_0xaefd('0x24')](function(_0x2dcdd8){return _0x2dcdd8;});}return null;};}function removeEntity(_0x3d9823,_0x2d490b){return function(_0x577fb7){if(_0x577fb7){return _0x577fb7['destroy']()['then'](function(){_0x3d9823[_0xaefd('0x19')](0xcc)[_0xaefd('0x18')]();});}};}function handleEntityNotFound(_0x313a6f,_0x5a44ed){return function(_0x23060f){if(!_0x23060f){_0x313a6f['sendStatus'](0x194);}return _0x23060f;};}function handleError(_0x3deec8,_0x3caa99){_0x3caa99=_0x3caa99||0x1f4;return function(_0x1a05eb){logger['error'](_0x1a05eb[_0xaefd('0x25')]);if(_0x1a05eb[_0xaefd('0x26')]){delete _0x1a05eb[_0xaefd('0x26')];}_0x3deec8[_0xaefd('0x19')](_0x3caa99)[_0xaefd('0x27')](_0x1a05eb);};}exports['index']=function(_0x2fe27e,_0x58c008){var _0x810bf={},_0x16f10f={},_0x5470bd={'count':0x0,'rows':[]};var _0x2b3d3d=db[_0xaefd('0x28')]['rawAttributes'];_0x16f10f[_0xaefd('0x29')]=_[_0xaefd('0x2a')](_0x2b3d3d);_0x16f10f[_0xaefd('0x2b')]=_['keys'](_0x2fe27e[_0xaefd('0x2b')]);_0x16f10f['filters']=_[_0xaefd('0x2c')](_0x16f10f['model'],_0x16f10f['query']);_0x810bf[_0xaefd('0x2d')]=_[_0xaefd('0x2c')](_0x16f10f['model'],qs['fields'](_0x2fe27e['query'][_0xaefd('0x2e')]));_0x810bf[_0xaefd('0x2d')]=_0x810bf['attributes']['length']?_0x810bf[_0xaefd('0x2d')]:_0x16f10f[_0xaefd('0x29')];if(!_0x2fe27e[_0xaefd('0x2b')][_0xaefd('0x2f')]('nolimit')){_0x810bf[_0xaefd('0x1d')]=qs[_0xaefd('0x1d')](_0x2fe27e[_0xaefd('0x2b')][_0xaefd('0x1d')]);_0x810bf[_0xaefd('0x1c')]=qs[_0xaefd('0x1c')](_0x2fe27e[_0xaefd('0x2b')][_0xaefd('0x1c')]);}_0x810bf[_0xaefd('0x30')]=qs[_0xaefd('0x31')](_0x2fe27e[_0xaefd('0x2b')][_0xaefd('0x31')]);_0x810bf[_0xaefd('0x32')]=qs[_0xaefd('0x33')](_[_0xaefd('0x34')](_0x2fe27e[_0xaefd('0x2b')],_0x16f10f['filters']));if(_0x2fe27e[_0xaefd('0x2b')][_0xaefd('0x35')]){_0x810bf[_0xaefd('0x32')]=_['merge'](_0x810bf[_0xaefd('0x32')],{'$or':_['map'](_0x2b3d3d,function(_0x187e76){if(_0x187e76[_0xaefd('0x36')][_0xaefd('0x37')]!==_0xaefd('0x38')){var _0x2c0d72={};_0x2c0d72[_0x187e76[_0xaefd('0x39')]]={'$like':'%'+_0x2fe27e[_0xaefd('0x2b')][_0xaefd('0x35')]+'%'};return _0x2c0d72;}})});}_0x810bf=_[_0xaefd('0x3a')]({},_0x810bf,_0x2fe27e[_0xaefd('0x3b')]);var _0x27e3d0={'where':_0x810bf[_0xaefd('0x32')]};return db[_0xaefd('0x28')][_0xaefd('0x1b')](_0x27e3d0)['then'](function(_0x1cfd6d){_0x5470bd['count']=_0x1cfd6d;if(_0x2fe27e[_0xaefd('0x2b')][_0xaefd('0x3c')]){_0x810bf[_0xaefd('0x3d')]=[{'all':!![]}];}return db[_0xaefd('0x28')][_0xaefd('0x3e')](_0x810bf);})[_0xaefd('0x24')](function(_0xa98181){_0x5470bd[_0xaefd('0x3f')]=_0xa98181;return _0x5470bd;})[_0xaefd('0x24')](respondWithFilteredResult(_0x58c008,_0x810bf))[_0xaefd('0x40')](handleError(_0x58c008,null));};exports['show']=function(_0x696af5,_0x3296ac){var _0x4dfea1={'raw':!![],'where':{'id':_0x696af5[_0xaefd('0x41')]['id']}},_0x427f00={};_0x427f00[_0xaefd('0x29')]=_['keys'](db['ChatOfflineMessage'][_0xaefd('0x42')]);_0x427f00[_0xaefd('0x2b')]=_[_0xaefd('0x2a')](_0x696af5[_0xaefd('0x2b')]);_0x427f00[_0xaefd('0x33')]=_[_0xaefd('0x2c')](_0x427f00[_0xaefd('0x29')],_0x427f00[_0xaefd('0x2b')]);_0x4dfea1['attributes']=_[_0xaefd('0x2c')](_0x427f00[_0xaefd('0x29')],qs[_0xaefd('0x2e')](_0x696af5[_0xaefd('0x2b')][_0xaefd('0x2e')]));_0x4dfea1[_0xaefd('0x2d')]=_0x4dfea1[_0xaefd('0x2d')][_0xaefd('0x43')]?_0x4dfea1['attributes']:_0x427f00['model'];if(_0x696af5[_0xaefd('0x2b')][_0xaefd('0x3c')]){_0x4dfea1['include']=[{'all':!![]}];}_0x4dfea1=_['merge']({},_0x4dfea1,_0x696af5[_0xaefd('0x3b')]);return db[_0xaefd('0x28')][_0xaefd('0x44')](_0x4dfea1)[_0xaefd('0x24')](handleEntityNotFound(_0x3296ac,null))[_0xaefd('0x24')](respondWithResult(_0x3296ac,null))[_0xaefd('0x40')](handleError(_0x3296ac,null));};exports[_0xaefd('0x45')]=function(_0x1c42fc,_0x332ebb){return db['ChatOfflineMessage'][_0xaefd('0x45')](_0x1c42fc[_0xaefd('0x46')],{})[_0xaefd('0x24')](respondWithResult(_0x332ebb,0xc9))[_0xaefd('0x40')](handleError(_0x332ebb,null));};exports[_0xaefd('0x23')]=function(_0x2cb72f,_0xf54e83){if(_0x2cb72f['body']['id']){delete _0x2cb72f[_0xaefd('0x46')]['id'];}return db['ChatOfflineMessage'][_0xaefd('0x44')]({'where':{'id':_0x2cb72f[_0xaefd('0x41')]['id']}})[_0xaefd('0x24')](handleEntityNotFound(_0xf54e83,null))[_0xaefd('0x24')](saveUpdates(_0x2cb72f['body'],null))['then'](respondWithResult(_0xf54e83,null))[_0xaefd('0x40')](handleError(_0xf54e83,null));};exports[_0xaefd('0x47')]=function(_0x179b8b,_0x4eeb56){return db[_0xaefd('0x28')][_0xaefd('0x44')]({'where':{'id':_0x179b8b['params']['id']}})[_0xaefd('0x24')](handleEntityNotFound(_0x4eeb56,null))[_0xaefd('0x24')](removeEntity(_0x4eeb56,null))[_0xaefd('0x40')](handleError(_0x4eeb56,null));};exports[_0xaefd('0x48')]=function(_0x398aee,_0xcdb133){return db[_0xaefd('0x28')][_0xaefd('0x48')]()['then'](respondWithResult(_0xcdb133,null))['catch'](handleError(_0xcdb133,null));};
\ No newline at end of file
index 4968ea4..c0b6e1f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe1a9=['api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./chatOfflineMessage.attributes','exports','define','ChatOfflineMessage','chat_offline_messages','utf8mb4','utf8mb4_unicode_ci','lodash','util'];(function(_0x6bbc35,_0x336ae7){var _0x5959ef=function(_0x37d8de){while(--_0x37d8de){_0x6bbc35['push'](_0x6bbc35['shift']());}};_0x5959ef(++_0x336ae7);}(_0xe1a9,0x1ee));var _0x9e1a=function(_0x55123c,_0x548b66){_0x55123c=_0x55123c-0x0;var _0x18aec8=_0xe1a9[_0x55123c];return _0x18aec8;};'use strict';var _=require(_0x9e1a('0x0'));var util=require(_0x9e1a('0x1'));var logger=require('../../config/logger')(_0x9e1a('0x2'));var moment=require(_0x9e1a('0x3'));var BPromise=require(_0x9e1a('0x4'));var rp=require(_0x9e1a('0x5'));var fs=require('fs');var path=require(_0x9e1a('0x6'));var rimraf=require(_0x9e1a('0x7'));var config=require(_0x9e1a('0x8'));var attributes=require(_0x9e1a('0x9'));module[_0x9e1a('0xa')]=function(_0x501044,_0x1939ed){return _0x501044[_0x9e1a('0xb')](_0x9e1a('0xc'),attributes,{'tableName':_0x9e1a('0xd'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x9e1a('0xe'),'collate':_0x9e1a('0xf')});};
\ No newline at end of file
+var _0xc549=['define','ChatOfflineMessage','chat_offline_messages','utf8mb4','lodash','util','../../config/logger','moment','bluebird','request-promise','../../config/environment'];(function(_0x34152b,_0x47e9de){var _0x26d2dd=function(_0x154dd6){while(--_0x154dd6){_0x34152b['push'](_0x34152b['shift']());}};_0x26d2dd(++_0x47e9de);}(_0xc549,0x122));var _0x9c54=function(_0x4c489c,_0x2341ec){_0x4c489c=_0x4c489c-0x0;var _0xd0493f=_0xc549[_0x4c489c];return _0xd0493f;};'use strict';var _=require(_0x9c54('0x0'));var util=require(_0x9c54('0x1'));var logger=require(_0x9c54('0x2'))('api');var moment=require(_0x9c54('0x3'));var BPromise=require(_0x9c54('0x4'));var rp=require(_0x9c54('0x5'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x9c54('0x6'));var attributes=require('./chatOfflineMessage.attributes');module['exports']=function(_0x57e890,_0x288264){return _0x57e890[_0x9c54('0x7')](_0x9c54('0x8'),attributes,{'tableName':_0x9c54('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x9c54('0xa'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index 30035ee..18342cb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x868f=['request\x20sent','error','message','result','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','client','request','then','info','ChatOfflineMessage,\x20%s,\x20%s','debug','ChatOfflineMessage,\x20%s,\x20%s,\x20%s'];(function(_0x433194,_0x44240a){var _0xc2fac4=function(_0x744f93){while(--_0x744f93){_0x433194['push'](_0x433194['shift']());}};_0xc2fac4(++_0x44240a);}(_0x868f,0x144));var _0xf868=function(_0x5c1423,_0x12aa23){_0x5c1423=_0x5c1423-0x0;var _0x2e95d2=_0x868f[_0x5c1423];return _0x2e95d2;};'use strict';var _=require(_0xf868('0x0'));var util=require('util');var moment=require(_0xf868('0x1'));var BPromise=require(_0xf868('0x2'));var rs=require(_0xf868('0x3'));var fs=require('fs');var Redis=require(_0xf868('0x4'));var db=require(_0xf868('0x5'))['db'];var utils=require(_0xf868('0x6'));var logger=require('../../config/logger')(_0xf868('0x7'));var config=require(_0xf868('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xf868('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0xd78516,_0x137fc0,_0x5ba1db){return new BPromise(function(_0x43a37f,_0xe0e3c3){return client[_0xf868('0xa')](_0xd78516,_0x5ba1db)[_0xf868('0xb')](function(_0x544285){logger[_0xf868('0xc')](_0xf868('0xd'),_0x137fc0,'request\x20sent');logger[_0xf868('0xe')](_0xf868('0xf'),_0x137fc0,_0xf868('0x10'),JSON['stringify'](_0x544285));if(_0x544285[_0xf868('0x11')]){if(_0x544285[_0xf868('0x11')]['code']===0x1f4){logger[_0xf868('0x11')]('ChatOfflineMessage,\x20%s,\x20%s',_0x137fc0,_0x544285[_0xf868('0x11')][_0xf868('0x12')]);return _0xe0e3c3(_0x544285[_0xf868('0x11')][_0xf868('0x12')]);}logger[_0xf868('0x11')](_0xf868('0xd'),_0x137fc0,_0x544285[_0xf868('0x11')][_0xf868('0x12')]);return _0x43a37f(_0x544285[_0xf868('0x11')][_0xf868('0x12')]);}else{logger['info']('ChatOfflineMessage,\x20%s,\x20%s',_0x137fc0,_0xf868('0x10'));_0x43a37f(_0x544285[_0xf868('0x13')][_0xf868('0x12')]);}})['catch'](function(_0x40e5df){logger[_0xf868('0x11')](_0xf868('0xd'),_0x137fc0,_0x40e5df);_0xe0e3c3(_0x40e5df);});});}
\ No newline at end of file
+var _0x1e5d=['randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','ChatOfflineMessage,\x20%s,\x20%s,\x20%s','stringify','error','message','ChatOfflineMessage,\x20%s,\x20%s','result','catch','lodash','util'];(function(_0x5cd1e0,_0x384e3f){var _0x4003b2=function(_0x320984){while(--_0x320984){_0x5cd1e0['push'](_0x5cd1e0['shift']());}};_0x4003b2(++_0x384e3f);}(_0x1e5d,0x136));var _0xd1e5=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x1e5d[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0xd1e5('0x0'));var util=require(_0xd1e5('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xd1e5('0x2'));var fs=require('fs');var Redis=require(_0xd1e5('0x3'));var db=require(_0xd1e5('0x4'))['db'];var utils=require(_0xd1e5('0x5'));var logger=require(_0xd1e5('0x6'))(_0xd1e5('0x7'));var config=require(_0xd1e5('0x8'));var jayson=require(_0xd1e5('0x9'));var client=jayson[_0xd1e5('0xa')][_0xd1e5('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x523409,_0x227da8,_0x3d0f66){return new BPromise(function(_0x4077ee,_0x43d7cc){return client[_0xd1e5('0xc')](_0x523409,_0x3d0f66)[_0xd1e5('0xd')](function(_0x1339e6){logger[_0xd1e5('0xe')]('ChatOfflineMessage,\x20%s,\x20%s',_0x227da8,_0xd1e5('0xf'));logger[_0xd1e5('0x10')](_0xd1e5('0x11'),_0x227da8,'request\x20sent',JSON[_0xd1e5('0x12')](_0x1339e6));if(_0x1339e6['error']){if(_0x1339e6[_0xd1e5('0x13')]['code']===0x1f4){logger[_0xd1e5('0x13')]('ChatOfflineMessage,\x20%s,\x20%s',_0x227da8,_0x1339e6[_0xd1e5('0x13')][_0xd1e5('0x14')]);return _0x43d7cc(_0x1339e6[_0xd1e5('0x13')][_0xd1e5('0x14')]);}logger[_0xd1e5('0x13')](_0xd1e5('0x15'),_0x227da8,_0x1339e6[_0xd1e5('0x13')]['message']);return _0x4077ee(_0x1339e6[_0xd1e5('0x13')][_0xd1e5('0x14')]);}else{logger[_0xd1e5('0xe')]('ChatOfflineMessage,\x20%s,\x20%s',_0x227da8,_0xd1e5('0xf'));_0x4077ee(_0x1339e6[_0xd1e5('0x16')][_0xd1e5('0x14')]);}})[_0xd1e5('0x17')](function(_0x3db0d1){logger[_0xd1e5('0x13')](_0xd1e5('0x15'),_0x227da8,_0x3db0d1);_0x43d7cc(_0x3db0d1);});});}
\ No newline at end of file
index 4dd1674..0138237 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbf1a=['path','connect-timeout','express','../../components/auth/service','../../config/environment','./chatOfflineMessage.controller','get','isAuthenticated','describe','/:id','show','create','put','update','destroy','exports','multer','util'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xbf1a,0x7c));var _0xabf1=function(_0x37d8af,_0x36d381){_0x37d8af=_0x37d8af-0x0;var _0x3f36f9=_0xbf1a[_0x37d8af];return _0x3f36f9;};'use strict';var multer=require(_0xabf1('0x0'));var util=require(_0xabf1('0x1'));var path=require(_0xabf1('0x2'));var timeout=require(_0xabf1('0x3'));var express=require(_0xabf1('0x4'));var router=express['Router']();var auth=require(_0xabf1('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xabf1('0x6'));var controller=require(_0xabf1('0x7'));router[_0xabf1('0x8')]('/',auth['isAuthenticated'](),controller['index']);router[_0xabf1('0x8')]('/describe',auth[_0xabf1('0x9')](),controller[_0xabf1('0xa')]);router[_0xabf1('0x8')](_0xabf1('0xb'),auth[_0xabf1('0x9')](),controller[_0xabf1('0xc')]);router['post']('/',auth[_0xabf1('0x9')](),controller[_0xabf1('0xd')]);router[_0xabf1('0xe')](_0xabf1('0xb'),auth[_0xabf1('0x9')](),controller[_0xabf1('0xf')]);router['delete'](_0xabf1('0xb'),auth[_0xabf1('0x9')](),controller[_0xabf1('0x10')]);module[_0xabf1('0x11')]=router;
\ No newline at end of file
+var _0xf3cd=['../../components/interaction/service','../../config/environment','./chatOfflineMessage.controller','isAuthenticated','index','get','/describe','describe','/:id','post','put','update','delete','destroy','multer','util','path','connect-timeout','express','Router'];(function(_0x4a8e86,_0x57c091){var _0x353685=function(_0x1d9d5d){while(--_0x1d9d5d){_0x4a8e86['push'](_0x4a8e86['shift']());}};_0x353685(++_0x57c091);}(_0xf3cd,0xfe));var _0xdf3c=function(_0x1301aa,_0x4da5c4){_0x1301aa=_0x1301aa-0x0;var _0x5146a1=_0xf3cd[_0x1301aa];return _0x5146a1;};'use strict';var multer=require(_0xdf3c('0x0'));var util=require(_0xdf3c('0x1'));var path=require(_0xdf3c('0x2'));var timeout=require(_0xdf3c('0x3'));var express=require(_0xdf3c('0x4'));var router=express[_0xdf3c('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0xdf3c('0x6'));var config=require(_0xdf3c('0x7'));var controller=require(_0xdf3c('0x8'));router['get']('/',auth[_0xdf3c('0x9')](),controller[_0xdf3c('0xa')]);router[_0xdf3c('0xb')](_0xdf3c('0xc'),auth[_0xdf3c('0x9')](),controller[_0xdf3c('0xd')]);router['get'](_0xdf3c('0xe'),auth['isAuthenticated'](),controller['show']);router[_0xdf3c('0xf')]('/',auth[_0xdf3c('0x9')](),controller['create']);router[_0xdf3c('0x10')](_0xdf3c('0xe'),auth[_0xdf3c('0x9')](),controller[_0xdf3c('0x11')]);router[_0xdf3c('0x12')](_0xdf3c('0xe'),auth[_0xdf3c('0x9')](),controller[_0xdf3c('0x13')]);module['exports']=router;
\ No newline at end of file
index 2db0d08..015a416 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9ccf=['INTEGER','sequelize','STRING','ENUM','mouseOver'];(function(_0x432682,_0x253044){var _0x463d05=function(_0xa73403){while(--_0xa73403){_0x432682['push'](_0x432682['shift']());}};_0x463d05(++_0x253044);}(_0x9ccf,0x10f));var _0xf9cc=function(_0x380e75,_0x486360){_0x380e75=_0x380e75-0x0;var _0x444d96=_0x9ccf[_0x380e75];return _0x444d96;};'use strict';var Sequelize=require(_0xf9cc('0x0'));module['exports']={'name':{'type':Sequelize[_0xf9cc('0x1')],'allowNull':![]},'type':{'type':Sequelize[_0xf9cc('0x2')](_0xf9cc('0x3'),'timeout'),'defaultValue':_0xf9cc('0x3')},'selector':{'type':Sequelize[_0xf9cc('0x1')]},'timeout':{'type':Sequelize[_0xf9cc('0x4')]}};
\ No newline at end of file
+var _0x707b=['STRING','mouseOver','INTEGER','sequelize','exports'];(function(_0x532fd9,_0x1ffee7){var _0x292a5c=function(_0x49e044){while(--_0x49e044){_0x532fd9['push'](_0x532fd9['shift']());}};_0x292a5c(++_0x1ffee7);}(_0x707b,0xdf));var _0xb707=function(_0x21024f,_0x35e650){_0x21024f=_0x21024f-0x0;var _0x26e8f8=_0x707b[_0x21024f];return _0x26e8f8;};'use strict';var Sequelize=require(_0xb707('0x0'));module[_0xb707('0x1')]={'name':{'type':Sequelize[_0xb707('0x2')],'allowNull':![]},'type':{'type':Sequelize['ENUM'](_0xb707('0x3'),'timeout'),'defaultValue':'mouseOver'},'selector':{'type':Sequelize[_0xb707('0x2')]},'timeout':{'type':Sequelize[_0xb707('0x4')]}};
\ No newline at end of file
index d7b5180..186aa19 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x35e8=['status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','sendStatus','error','stack','name','send','show','params','model','keys','ChatProactiveAction','rawAttributes','query','filters','intersection','attributes','fields','length','includeAll','include','merge','find','create','catch','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb'];(function(_0xa148b7,_0x2f3eb2){var _0x51efd3=function(_0x34bcec){while(--_0x34bcec){_0xa148b7['push'](_0xa148b7['shift']());}};_0x51efd3(++_0x2f3eb2);}(_0x35e8,0x160));var _0x835e=function(_0x321de9,_0x189829){_0x321de9=_0x321de9-0x0;var _0x50edf8=_0x35e8[_0x321de9];return _0x50edf8;};'use strict';var pdf=require(_0x835e('0x0'));var emlformat=require(_0x835e('0x1'));var rimraf=require(_0x835e('0x2'));var zipdir=require(_0x835e('0x3'));var jsonpatch=require(_0x835e('0x4'));var rp=require(_0x835e('0x5'));var moment=require(_0x835e('0x6'));var BPromise=require(_0x835e('0x7'));var Mustache=require(_0x835e('0x8'));var util=require(_0x835e('0x9'));var path=require('path');var sox=require(_0x835e('0xa'));var csv=require(_0x835e('0xb'));var ejs=require(_0x835e('0xc'));var fs=require('fs');var _=require(_0x835e('0xd'));var squel=require(_0x835e('0xe'));var crypto=require(_0x835e('0xf'));var jsforce=require(_0x835e('0x10'));var deskjs=require(_0x835e('0x11'));var toCsv=require('to-csv');var querystring=require(_0x835e('0x12'));var Papa=require('papaparse');var Redis=require(_0x835e('0x13'));var authService=require('../../components/auth/service');var qs=require(_0x835e('0x14'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x835e('0x15'))(_0x835e('0x16'));var utils=require(_0x835e('0x17'));var config=require(_0x835e('0x18'));var db=require(_0x835e('0x19'))['db'];function respondWithStatusCode(_0x11963a,_0x11ce28){_0x11ce28=_0x11ce28||0xcc;return function(_0x2987ec){if(_0x2987ec){return _0x11963a['sendStatus'](_0x11ce28);}return _0x11963a[_0x835e('0x1a')](_0x11ce28)[_0x835e('0x1b')]();};}function respondWithResult(_0x3560a3,_0x21ad6c){_0x21ad6c=_0x21ad6c||0xc8;return function(_0x4d70ab){if(_0x4d70ab){return _0x3560a3[_0x835e('0x1a')](_0x21ad6c)[_0x835e('0x1c')](_0x4d70ab);}};}function respondWithFilteredResult(_0x60dd1d,_0x300e75){return function(_0x430fb5){if(_0x430fb5){var _0x3da307=_0x430fb5['count'],_0x42e83a=_0x300e75[_0x835e('0x1d')],_0x1960bc=_0x300e75['offset']+_0x300e75[_0x835e('0x1e')],_0x3ec63b;if(_0x1960bc>=_0x3da307){_0x1960bc=_0x3da307;_0x3ec63b=0xc8;}else{_0x3ec63b=0xce;}_0x60dd1d[_0x835e('0x1a')](_0x3ec63b);return _0x60dd1d[_0x835e('0x1f')](_0x835e('0x20'),_0x42e83a+'-'+_0x1960bc+'/'+_0x3da307)[_0x835e('0x1c')](_0x430fb5);}return null;};}function patchUpdates(_0x5bbfe6){return function(_0x1a09f4){try{jsonpatch[_0x835e('0x21')](_0x1a09f4,_0x5bbfe6,!![]);}catch(_0x679be4){return BPromise[_0x835e('0x22')](_0x679be4);}return _0x1a09f4[_0x835e('0x23')]();};}function saveUpdates(_0x38bfc5,_0x1a612b){return function(_0x5e486c){if(_0x5e486c){return _0x5e486c[_0x835e('0x24')](_0x38bfc5)[_0x835e('0x25')](function(_0x5bae0f){return _0x5bae0f;});}return null;};}function removeEntity(_0x3878e7,_0x31e5b6){return function(_0x4775fe){if(_0x4775fe){return _0x4775fe[_0x835e('0x26')]()[_0x835e('0x25')](function(){_0x3878e7[_0x835e('0x1a')](0xcc)[_0x835e('0x1b')]();});}};}function handleEntityNotFound(_0xd2bd09,_0x4586bb){return function(_0x163895){if(!_0x163895){_0xd2bd09[_0x835e('0x27')](0x194);}return _0x163895;};}function handleError(_0x48e79b,_0x3c4aeb){_0x3c4aeb=_0x3c4aeb||0x1f4;return function(_0x21c048){logger[_0x835e('0x28')](_0x21c048[_0x835e('0x29')]);if(_0x21c048[_0x835e('0x2a')]){delete _0x21c048[_0x835e('0x2a')];}_0x48e79b['status'](_0x3c4aeb)[_0x835e('0x2b')](_0x21c048);};}exports[_0x835e('0x2c')]=function(_0x44b071,_0x3cb770){var _0x2d5d5f={'raw':!![],'where':{'id':_0x44b071[_0x835e('0x2d')]['id']}},_0x4b865d={};_0x4b865d[_0x835e('0x2e')]=_[_0x835e('0x2f')](db[_0x835e('0x30')][_0x835e('0x31')]);_0x4b865d['query']=_[_0x835e('0x2f')](_0x44b071[_0x835e('0x32')]);_0x4b865d[_0x835e('0x33')]=_[_0x835e('0x34')](_0x4b865d[_0x835e('0x2e')],_0x4b865d[_0x835e('0x32')]);_0x2d5d5f[_0x835e('0x35')]=_[_0x835e('0x34')](_0x4b865d[_0x835e('0x2e')],qs[_0x835e('0x36')](_0x44b071[_0x835e('0x32')][_0x835e('0x36')]));_0x2d5d5f[_0x835e('0x35')]=_0x2d5d5f[_0x835e('0x35')][_0x835e('0x37')]?_0x2d5d5f['attributes']:_0x4b865d[_0x835e('0x2e')];if(_0x44b071[_0x835e('0x32')][_0x835e('0x38')]){_0x2d5d5f[_0x835e('0x39')]=[{'all':!![]}];}_0x2d5d5f=_[_0x835e('0x3a')]({},_0x2d5d5f,_0x44b071['options']);return db[_0x835e('0x30')][_0x835e('0x3b')](_0x2d5d5f)[_0x835e('0x25')](handleEntityNotFound(_0x3cb770,null))['then'](respondWithResult(_0x3cb770,null))['catch'](handleError(_0x3cb770,null));};exports['create']=function(_0x447766,_0x4010fe){return db[_0x835e('0x30')][_0x835e('0x3c')](_0x447766['body'],{})[_0x835e('0x25')](respondWithResult(_0x4010fe,0xc9))[_0x835e('0x3d')](handleError(_0x4010fe,null));};exports[_0x835e('0x24')]=function(_0x1d8a17,_0x34d1a8){if(_0x1d8a17[_0x835e('0x3e')]['id']){delete _0x1d8a17[_0x835e('0x3e')]['id'];}return db[_0x835e('0x30')]['find']({'where':{'id':_0x1d8a17[_0x835e('0x2d')]['id']}})[_0x835e('0x25')](handleEntityNotFound(_0x34d1a8,null))['then'](saveUpdates(_0x1d8a17[_0x835e('0x3e')],null))[_0x835e('0x25')](respondWithResult(_0x34d1a8,null))[_0x835e('0x3d')](handleError(_0x34d1a8,null));};exports['destroy']=function(_0x4ee3fb,_0x5eee5f){return db[_0x835e('0x30')]['find']({'where':{'id':_0x4ee3fb[_0x835e('0x2d')]['id']}})[_0x835e('0x25')](handleEntityNotFound(_0x5eee5f,null))[_0x835e('0x25')](removeEntity(_0x5eee5f,null))[_0x835e('0x3d')](handleError(_0x5eee5f,null));};
\ No newline at end of file
+var _0xaaaa=['params','keys','ChatProactiveAction','rawAttributes','query','intersection','model','fields','length','includeAll','find','catch','create','body','update','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','to-csv','lodash','squel','querystring','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/environment','../../mysqldb','sendStatus','json','offset','limit','status','set','Content-Range','apply','reject','save','destroy','then','end','error','stack','name','send','show'];(function(_0x82129b,_0x484ae9){var _0x2ae5dc=function(_0x299e34){while(--_0x299e34){_0x82129b['push'](_0x82129b['shift']());}};_0x2ae5dc(++_0x484ae9);}(_0xaaaa,0xa8));var _0xaaaa=function(_0x35eedb,_0x226686){_0x35eedb=_0x35eedb-0x0;var _0x57f20e=_0xaaaa[_0x35eedb];return _0x57f20e;};'use strict';var pdf=require(_0xaaaa('0x0'));var emlformat=require(_0xaaaa('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xaaaa('0x2'));var jsonpatch=require(_0xaaaa('0x3'));var rp=require(_0xaaaa('0x4'));var moment=require(_0xaaaa('0x5'));var BPromise=require('bluebird');var Mustache=require(_0xaaaa('0x6'));var util=require(_0xaaaa('0x7'));var path=require(_0xaaaa('0x8'));var sox=require('sox');var csv=require(_0xaaaa('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xaaaa('0xa'));var squel=require(_0xaaaa('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xaaaa('0x9'));var querystring=require(_0xaaaa('0xc'));var Papa=require('papaparse');var Redis=require(_0xaaaa('0xd'));var authService=require('../../components/auth/service');var qs=require(_0xaaaa('0xe'));var hardwareService=require(_0xaaaa('0xf'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0xaaaa('0x10'));var db=require(_0xaaaa('0x11'))['db'];function respondWithStatusCode(_0x31070a,_0x4c7459){_0x4c7459=_0x4c7459||0xcc;return function(_0x5bdd6b){if(_0x5bdd6b){return _0x31070a[_0xaaaa('0x12')](_0x4c7459);}return _0x31070a['status'](_0x4c7459)['end']();};}function respondWithResult(_0x5ec294,_0x5d1ef1){_0x5d1ef1=_0x5d1ef1||0xc8;return function(_0x21e2c2){if(_0x21e2c2){return _0x5ec294['status'](_0x5d1ef1)[_0xaaaa('0x13')](_0x21e2c2);}};}function respondWithFilteredResult(_0x4695eb,_0x5f18eb){return function(_0x11e7bc){if(_0x11e7bc){var _0x4274d3=_0x11e7bc['count'],_0x3c343c=_0x5f18eb['offset'],_0x3ae5b8=_0x5f18eb[_0xaaaa('0x14')]+_0x5f18eb[_0xaaaa('0x15')],_0x1dcede;if(_0x3ae5b8>=_0x4274d3){_0x3ae5b8=_0x4274d3;_0x1dcede=0xc8;}else{_0x1dcede=0xce;}_0x4695eb[_0xaaaa('0x16')](_0x1dcede);return _0x4695eb[_0xaaaa('0x17')](_0xaaaa('0x18'),_0x3c343c+'-'+_0x3ae5b8+'/'+_0x4274d3)[_0xaaaa('0x13')](_0x11e7bc);}return null;};}function patchUpdates(_0x4fac46){return function(_0x316d50){try{jsonpatch[_0xaaaa('0x19')](_0x316d50,_0x4fac46,!![]);}catch(_0x5dac1e){return BPromise[_0xaaaa('0x1a')](_0x5dac1e);}return _0x316d50[_0xaaaa('0x1b')]();};}function saveUpdates(_0x51fcfe,_0x2de451){return function(_0x5a21cd){if(_0x5a21cd){return _0x5a21cd['update'](_0x51fcfe)['then'](function(_0x4d975e){return _0x4d975e;});}return null;};}function removeEntity(_0x552b88,_0x1fc065){return function(_0x3bba70){if(_0x3bba70){return _0x3bba70[_0xaaaa('0x1c')]()[_0xaaaa('0x1d')](function(){_0x552b88[_0xaaaa('0x16')](0xcc)[_0xaaaa('0x1e')]();});}};}function handleEntityNotFound(_0x435b8d,_0x301124){return function(_0x280d29){if(!_0x280d29){_0x435b8d[_0xaaaa('0x12')](0x194);}return _0x280d29;};}function handleError(_0x1255f6,_0x23dc78){_0x23dc78=_0x23dc78||0x1f4;return function(_0x19ccbd){logger[_0xaaaa('0x1f')](_0x19ccbd[_0xaaaa('0x20')]);if(_0x19ccbd[_0xaaaa('0x21')]){delete _0x19ccbd[_0xaaaa('0x21')];}_0x1255f6[_0xaaaa('0x16')](_0x23dc78)[_0xaaaa('0x22')](_0x19ccbd);};}exports[_0xaaaa('0x23')]=function(_0x11d039,_0x58c3aa){var _0x56eda8={'raw':!![],'where':{'id':_0x11d039[_0xaaaa('0x24')]['id']}},_0xbbc196={};_0xbbc196['model']=_[_0xaaaa('0x25')](db[_0xaaaa('0x26')][_0xaaaa('0x27')]);_0xbbc196[_0xaaaa('0x28')]=_[_0xaaaa('0x25')](_0x11d039[_0xaaaa('0x28')]);_0xbbc196['filters']=_[_0xaaaa('0x29')](_0xbbc196[_0xaaaa('0x2a')],_0xbbc196[_0xaaaa('0x28')]);_0x56eda8['attributes']=_['intersection'](_0xbbc196[_0xaaaa('0x2a')],qs[_0xaaaa('0x2b')](_0x11d039['query'][_0xaaaa('0x2b')]));_0x56eda8['attributes']=_0x56eda8['attributes'][_0xaaaa('0x2c')]?_0x56eda8['attributes']:_0xbbc196[_0xaaaa('0x2a')];if(_0x11d039[_0xaaaa('0x28')][_0xaaaa('0x2d')]){_0x56eda8['include']=[{'all':!![]}];}_0x56eda8=_['merge']({},_0x56eda8,_0x11d039['options']);return db['ChatProactiveAction'][_0xaaaa('0x2e')](_0x56eda8)[_0xaaaa('0x1d')](handleEntityNotFound(_0x58c3aa,null))[_0xaaaa('0x1d')](respondWithResult(_0x58c3aa,null))[_0xaaaa('0x2f')](handleError(_0x58c3aa,null));};exports[_0xaaaa('0x30')]=function(_0x40faa7,_0x48b64e){return db[_0xaaaa('0x26')][_0xaaaa('0x30')](_0x40faa7[_0xaaaa('0x31')],{})[_0xaaaa('0x1d')](respondWithResult(_0x48b64e,0xc9))[_0xaaaa('0x2f')](handleError(_0x48b64e,null));};exports[_0xaaaa('0x32')]=function(_0x3f1adb,_0x5e03f1){if(_0x3f1adb[_0xaaaa('0x31')]['id']){delete _0x3f1adb['body']['id'];}return db[_0xaaaa('0x26')][_0xaaaa('0x2e')]({'where':{'id':_0x3f1adb[_0xaaaa('0x24')]['id']}})[_0xaaaa('0x1d')](handleEntityNotFound(_0x5e03f1,null))[_0xaaaa('0x1d')](saveUpdates(_0x3f1adb[_0xaaaa('0x31')],null))[_0xaaaa('0x1d')](respondWithResult(_0x5e03f1,null))[_0xaaaa('0x2f')](handleError(_0x5e03f1,null));};exports[_0xaaaa('0x1c')]=function(_0x393091,_0xb1001e){return db[_0xaaaa('0x26')][_0xaaaa('0x2e')]({'where':{'id':_0x393091[_0xaaaa('0x24')]['id']}})[_0xaaaa('0x1d')](handleEntityNotFound(_0xb1001e,null))[_0xaaaa('0x1d')](removeEntity(_0xb1001e,null))[_0xaaaa('0x2f')](handleError(_0xb1001e,null));};
\ No newline at end of file
index 96d6859..ccaea33 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xde23=['util','moment','request-promise','path','rimraf','../../config/environment','./chatProactiveAction.attributes','exports','define','chat_proactive_actions','lodash'];(function(_0x5540e9,_0x538cf1){var _0x23ebd5=function(_0x28698e){while(--_0x28698e){_0x5540e9['push'](_0x5540e9['shift']());}};_0x23ebd5(++_0x538cf1);}(_0xde23,0x133));var _0x3de2=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xde23[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0x3de2('0x0'));var util=require(_0x3de2('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x3de2('0x2'));var BPromise=require('bluebird');var rp=require(_0x3de2('0x3'));var fs=require('fs');var path=require(_0x3de2('0x4'));var rimraf=require(_0x3de2('0x5'));var config=require(_0x3de2('0x6'));var attributes=require(_0x3de2('0x7'));module[_0x3de2('0x8')]=function(_0x5b354a,_0xbba0dd){return _0x5b354a[_0x3de2('0x9')]('ChatProactiveAction',attributes,{'tableName':_0x3de2('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6346=['exports','define','ChatProactiveAction','lodash','api','bluebird','rimraf','../../config/environment','./chatProactiveAction.attributes'];(function(_0x260085,_0x708e6){var _0x415dc8=function(_0x53ce72){while(--_0x53ce72){_0x260085['push'](_0x260085['shift']());}};_0x415dc8(++_0x708e6);}(_0x6346,0x13e));var _0x6634=function(_0x2064e5,_0x4f6fa2){_0x2064e5=_0x2064e5-0x0;var _0x21a233=_0x6346[_0x2064e5];return _0x21a233;};'use strict';var _=require(_0x6634('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x6634('0x1'));var moment=require('moment');var BPromise=require(_0x6634('0x2'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x6634('0x3'));var config=require(_0x6634('0x4'));var attributes=require(_0x6634('0x5'));module[_0x6634('0x6')]=function(_0x8387,_0x45f653){return _0x8387[_0x6634('0x7')](_0x6634('0x8'),attributes,{'tableName':'chat_proactive_actions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 59bca5b..b08fc39 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['http','info','ChatProactiveAction,\x20%s,\x20%s','request\x20sent','debug','ChatProactiveAction,\x20%s,\x20%s,\x20%s','code','error','message','result','catch','lodash','util','moment','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0x395446,_0x38580a){var _0x28d342=function(_0x5d7233){while(--_0x5d7233){_0x395446['push'](_0x395446['shift']());}};_0x28d342(++_0x38580a);}(_0xa9e0,0x123));var _0x0a9e=function(_0xf50820,_0x56f041){_0xf50820=_0xf50820-0x0;var _0x2a9b10=_0xa9e0[_0xf50820];return _0x2a9b10;};'use strict';var _=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x0a9e('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x0a9e('0x4'));var logger=require(_0x0a9e('0x5'))(_0x0a9e('0x6'));var config=require(_0x0a9e('0x7'));var jayson=require(_0x0a9e('0x8'));var client=jayson['client'][_0x0a9e('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x441e3a,_0x2cc193,_0x5f41ea){return new BPromise(function(_0x503809,_0xe42b77){return client['request'](_0x441e3a,_0x5f41ea)['then'](function(_0x39753a){logger[_0x0a9e('0xa')](_0x0a9e('0xb'),_0x2cc193,_0x0a9e('0xc'));logger[_0x0a9e('0xd')](_0x0a9e('0xe'),_0x2cc193,'request\x20sent',JSON['stringify'](_0x39753a));if(_0x39753a['error']){if(_0x39753a['error'][_0x0a9e('0xf')]===0x1f4){logger[_0x0a9e('0x10')](_0x0a9e('0xb'),_0x2cc193,_0x39753a[_0x0a9e('0x10')][_0x0a9e('0x11')]);return _0xe42b77(_0x39753a[_0x0a9e('0x10')]['message']);}logger[_0x0a9e('0x10')](_0x0a9e('0xb'),_0x2cc193,_0x39753a[_0x0a9e('0x10')][_0x0a9e('0x11')]);return _0x503809(_0x39753a[_0x0a9e('0x10')][_0x0a9e('0x11')]);}else{logger['info'](_0x0a9e('0xb'),_0x2cc193,'request\x20sent');_0x503809(_0x39753a[_0x0a9e('0x12')]['message']);}})[_0x0a9e('0x13')](function(_0x12066b){logger['error'](_0x0a9e('0xb'),_0x2cc193,_0x12066b);_0xe42b77(_0x12066b);});});}
\ No newline at end of file
+var _0x9957=['message','result','catch','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','then','info','ChatProactiveAction,\x20%s,\x20%s','request\x20sent','debug','ChatProactiveAction,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x159425,_0x26eee5){var _0x245e90=function(_0x10ec5a){while(--_0x10ec5a){_0x159425['push'](_0x159425['shift']());}};_0x245e90(++_0x26eee5);}(_0x9957,0x93));var _0x7995=function(_0xbca1b1,_0x33f0ce){_0xbca1b1=_0xbca1b1-0x0;var _0x4e1686=_0x9957[_0xbca1b1];return _0x4e1686;};'use strict';var _=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));var BPromise=require(_0x7995('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7995('0x4'));var db=require(_0x7995('0x5'))['db'];var utils=require(_0x7995('0x6'));var logger=require(_0x7995('0x7'))('rpc');var config=require(_0x7995('0x8'));var jayson=require(_0x7995('0x9'));var client=jayson[_0x7995('0xa')][_0x7995('0xb')]({'port':0x232a});function respondWithRpcPromise(_0xbda126,_0x326741,_0x4996ca){return new BPromise(function(_0x465276,_0x1cad37){return client['request'](_0xbda126,_0x4996ca)[_0x7995('0xc')](function(_0x3116fb){logger[_0x7995('0xd')](_0x7995('0xe'),_0x326741,_0x7995('0xf'));logger[_0x7995('0x10')](_0x7995('0x11'),_0x326741,'request\x20sent',JSON[_0x7995('0x12')](_0x3116fb));if(_0x3116fb[_0x7995('0x13')]){if(_0x3116fb['error'][_0x7995('0x14')]===0x1f4){logger[_0x7995('0x13')](_0x7995('0xe'),_0x326741,_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);return _0x1cad37(_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);}logger['error']('ChatProactiveAction,\x20%s,\x20%s',_0x326741,_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);return _0x465276(_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);}else{logger[_0x7995('0xd')](_0x7995('0xe'),_0x326741,_0x7995('0xf'));_0x465276(_0x3116fb[_0x7995('0x16')]['message']);}})[_0x7995('0x17')](function(_0x565d97){logger[_0x7995('0x13')](_0x7995('0xe'),_0x326741,_0x565d97);_0x1cad37(_0x565d97);});});}
\ No newline at end of file
index f75404c..06b8037 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb6fa=['multer','connect-timeout','../../components/auth/service','../../components/interaction/service','./chatProactiveAction.controller','get','/:id','isAuthenticated','show','post','create','put','update','delete','destroy'];(function(_0x2de165,_0x4017d4){var _0xa0e22c=function(_0x3f53be){while(--_0x3f53be){_0x2de165['push'](_0x2de165['shift']());}};_0xa0e22c(++_0x4017d4);}(_0xb6fa,0x1c2));var _0xab6f=function(_0x4b4f24,_0x5654a8){_0x4b4f24=_0x4b4f24-0x0;var _0x1c13d4=_0xb6fa[_0x4b4f24];return _0x1c13d4;};'use strict';var multer=require(_0xab6f('0x0'));var util=require('util');var path=require('path');var timeout=require(_0xab6f('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0xab6f('0x2'));var interaction=require(_0xab6f('0x3'));var config=require('../../config/environment');var controller=require(_0xab6f('0x4'));router[_0xab6f('0x5')](_0xab6f('0x6'),auth[_0xab6f('0x7')](),controller[_0xab6f('0x8')]);router[_0xab6f('0x9')]('/',auth[_0xab6f('0x7')](),controller[_0xab6f('0xa')]);router[_0xab6f('0xb')](_0xab6f('0x6'),auth[_0xab6f('0x7')](),controller[_0xab6f('0xc')]);router[_0xab6f('0xd')](_0xab6f('0x6'),auth[_0xab6f('0x7')](),controller[_0xab6f('0xe')]);module['exports']=router;
\ No newline at end of file
+var _0x61d0=['path','connect-timeout','Router','../../components/interaction/service','../../config/environment','get','/:id','isAuthenticated','show','post','create','update','exports','multer'];(function(_0xade98e,_0x18f842){var _0x273067=function(_0x49807c){while(--_0x49807c){_0xade98e['push'](_0xade98e['shift']());}};_0x273067(++_0x18f842);}(_0x61d0,0x187));var _0x061d=function(_0x1b2255,_0x3de34f){_0x1b2255=_0x1b2255-0x0;var _0x33e57d=_0x61d0[_0x1b2255];return _0x33e57d;};'use strict';var multer=require(_0x061d('0x0'));var util=require('util');var path=require(_0x061d('0x1'));var timeout=require(_0x061d('0x2'));var express=require('express');var router=express[_0x061d('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x061d('0x4'));var config=require(_0x061d('0x5'));var controller=require('./chatProactiveAction.controller');router[_0x061d('0x6')](_0x061d('0x7'),auth[_0x061d('0x8')](),controller[_0x061d('0x9')]);router[_0x061d('0xa')]('/',auth[_0x061d('0x8')](),controller[_0x061d('0xb')]);router['put']('/:id',auth['isAuthenticated'](),controller[_0x061d('0xc')]);router['delete'](_0x061d('0x7'),auth[_0x061d('0x8')](),controller['destroy']);module[_0x061d('0xd')]=router;
\ No newline at end of file
index 9bcd820..1535a6f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5220=['INTEGER','rrmemory','exports','STRING'];(function(_0x4c321c,_0x3e9da0){var _0x25accb=function(_0x21bf7a){while(--_0x21bf7a){_0x4c321c['push'](_0x4c321c['shift']());}};_0x25accb(++_0x3e9da0);}(_0x5220,0xee));var _0x0522=function(_0x152ca2,_0x5abd1b){_0x152ca2=_0x152ca2-0x0;var _0x58fbd2=_0x5220[_0x152ca2];return _0x58fbd2;};'use strict';var Sequelize=require('sequelize');module[_0x0522('0x0')]={'name':{'type':Sequelize[_0x0522('0x1')],'unique':'name','allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize[_0x0522('0x2')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM'](_0x0522('0x3'),'beepall','roundrobin')}};
\ No newline at end of file
+var _0x4898=['rrmemory','beepall','roundrobin','sequelize','exports','STRING','INTEGER','ENUM'];(function(_0x1f64c5,_0x455b0c){var _0x231503=function(_0x1e71c8){while(--_0x1e71c8){_0x1f64c5['push'](_0x1f64c5['shift']());}};_0x231503(++_0x455b0c);}(_0x4898,0x17b));var _0x8489=function(_0x1e0387,_0x5eae14){_0x1e0387=_0x1e0387-0x0;var _0x3122f6=_0x4898[_0x1e0387];return _0x3122f6;};'use strict';var Sequelize=require(_0x8489('0x0'));module[_0x8489('0x1')]={'name':{'type':Sequelize[_0x8489('0x2')],'unique':'name','allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize[_0x8489('0x3')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x8489('0x4')](_0x8489('0x5'),_0x8489('0x6'),_0x8489('0x7'))}};
\ No newline at end of file
index ca44f44..89be92b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed40=['clone','ut.UserId\x20=\x20?','includes','all','union','compact','value','isEmpty','removeAgents','addAgents','omit','spread','isArray','userChatQueue:remove','getAgents','html-pdf','eml-format','zip-dir','fast-json-patch','moment','mustache','util','path','sox','to-csv','lodash','squel','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../mysqldb','redis','defaults','localhost','register','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','ChatQueue,\x20%s,\x20%s','request\x20sent','debug','ChatQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','end','status','count','offset','set','json','apply','update','get','ChatQueues','UserProfileResource','destroy','stack','name','send','index','ChatQueue','rawAttributes','query','filters','intersection','model','attributes','fields','length','nolimit','limit','order','sort','where','merge','map','type','VIRTUAL','field','filter','options','includeAll','include','findAll','rows','show','params','keys','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','find','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','describe','findOne','UserChatQueue','hasOwnProperty','User','findAndCountAll','UserId','agent','updatedAt','createdAt','format','chatPause','getTeams','Team','pick','addTeams','Agents','online','voicePause','interface','flatMap','sequelize','transaction','findOrCreate','forEach','emit','userChatQueue:save','removeTeams','ids','select','tq.TeamId','from','team_has_chat_queues','join','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','ChatQueueId\x20=\x20?'];(function(_0xc47835,_0x461042){var _0x2cacd3=function(_0x4d51b9){while(--_0x4d51b9){_0xc47835['push'](_0xc47835['shift']());}};_0x2cacd3(++_0x461042);}(_0xed40,0x131));var _0x0ed4=function(_0xa031c7,_0x205aaf){_0xa031c7=_0xa031c7-0x0;var _0x58644e=_0xed40[_0xa031c7];return _0x58644e;};'use strict';var pdf=require(_0x0ed4('0x0'));var emlformat=require(_0x0ed4('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x0ed4('0x2'));var jsonpatch=require(_0x0ed4('0x3'));var rp=require('request-promise');var moment=require(_0x0ed4('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x0ed4('0x5'));var util=require(_0x0ed4('0x6'));var path=require(_0x0ed4('0x7'));var sox=require(_0x0ed4('0x8'));var csv=require(_0x0ed4('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x0ed4('0xa'));var squel=require(_0x0ed4('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x0ed4('0xc'));var toCsv=require(_0x0ed4('0x9'));var querystring=require(_0x0ed4('0xd'));var Papa=require('papaparse');var Redis=require(_0x0ed4('0xe'));var authService=require(_0x0ed4('0xf'));var qs=require(_0x0ed4('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0x0ed4('0x11'));var utils=require(_0x0ed4('0x12'));var config=require('../../config/environment');var db=require(_0x0ed4('0x13'))['db'];config[_0x0ed4('0x14')]=_[_0x0ed4('0x15')](config[_0x0ed4('0x14')],{'host':_0x0ed4('0x16'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require('./chatQueue.socket')[_0x0ed4('0x17')](socket);var jayson=require('jayson/promise');var client=jayson['client'][_0x0ed4('0x18')]({'port':0x232a});function checkPasswordPattern(_0x15038b,_0x1c40a7,_0x5858fa){if(_0x5858fa){var _0x48e9df=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x48e9df[_0x0ed4('0x19')](_0x1c40a7)){return _0x15038b;}else{throw new Error(_0x0ed4('0x1a'));}}else{return _0x15038b;}}function respondWithRpcPromise(_0x168d0e,_0x3477cb,_0x3f0f18,_0x53fd0f){return new BPromise(function(_0x3a50d4,_0x56faa4){var _0x128461=_0x53fd0f||client;return _0x128461[_0x0ed4('0x1b')](_0x168d0e,_0x3f0f18)[_0x0ed4('0x1c')](function(_0x498e55){logger[_0x0ed4('0x1d')](_0x0ed4('0x1e'),_0x3477cb,_0x0ed4('0x1f'));logger[_0x0ed4('0x20')](_0x0ed4('0x21'),_0x3477cb,_0x0ed4('0x1f'),JSON[_0x0ed4('0x22')](_0x498e55));if(_0x498e55[_0x0ed4('0x23')]){if(_0x498e55[_0x0ed4('0x23')][_0x0ed4('0x24')]===0x1f4){logger[_0x0ed4('0x23')](_0x0ed4('0x1e'),_0x3477cb,_0x498e55[_0x0ed4('0x23')][_0x0ed4('0x25')]);return _0x56faa4(_0x498e55[_0x0ed4('0x23')][_0x0ed4('0x25')]);}logger[_0x0ed4('0x23')](_0x0ed4('0x1e'),_0x3477cb,_0x498e55[_0x0ed4('0x23')][_0x0ed4('0x25')]);return _0x3a50d4(_0x498e55[_0x0ed4('0x23')]['message']);}else{logger[_0x0ed4('0x1d')](_0x0ed4('0x1e'),_0x3477cb,_0x0ed4('0x1f'));_0x3a50d4(_0x498e55[_0x0ed4('0x26')][_0x0ed4('0x25')]);}})[_0x0ed4('0x27')](function(_0x4d6bff){logger[_0x0ed4('0x23')](_0x0ed4('0x1e'),_0x3477cb,_0x4d6bff);_0x56faa4(_0x4d6bff);});});}function respondWithStatusCode(_0x4dbce3,_0x2d2491){_0x2d2491=_0x2d2491||0xcc;return function(_0x167452){if(_0x167452){return _0x4dbce3[_0x0ed4('0x28')](_0x2d2491);}return _0x4dbce3['status'](_0x2d2491)[_0x0ed4('0x29')]();};}function respondWithResult(_0x3166bf,_0x1f9b75){_0x1f9b75=_0x1f9b75||0xc8;return function(_0x11bca3){if(_0x11bca3){return _0x3166bf[_0x0ed4('0x2a')](_0x1f9b75)['json'](_0x11bca3);}};}function respondWithFilteredResult(_0x2f6140,_0x3d71dd){return function(_0x3f9381){if(_0x3f9381){var _0x102f8f=_0x3f9381[_0x0ed4('0x2b')],_0x4cd1e3=_0x3d71dd['offset'],_0x4d42d7=_0x3d71dd[_0x0ed4('0x2c')]+_0x3d71dd['limit'],_0x2aad94;if(_0x4d42d7>=_0x102f8f){_0x4d42d7=_0x102f8f;_0x2aad94=0xc8;}else{_0x2aad94=0xce;}_0x2f6140[_0x0ed4('0x2a')](_0x2aad94);return _0x2f6140[_0x0ed4('0x2d')]('Content-Range',_0x4cd1e3+'-'+_0x4d42d7+'/'+_0x102f8f)[_0x0ed4('0x2e')](_0x3f9381);}return null;};}function patchUpdates(_0x31608e){return function(_0x2a9e04){try{jsonpatch[_0x0ed4('0x2f')](_0x2a9e04,_0x31608e,!![]);}catch(_0x51ba00){return BPromise['reject'](_0x51ba00);}return _0x2a9e04['save']();};}function saveUpdates(_0x162cff,_0x5a2a90){return function(_0x21c8f0){if(_0x21c8f0){return _0x21c8f0[_0x0ed4('0x30')](_0x162cff)[_0x0ed4('0x1c')](function(_0x5e5a31){return _0x5e5a31;});}return null;};}function removeEntity(_0x299137,_0x562a88){return function(_0x476623){if(_0x476623){return _0x476623['destroy']()[_0x0ed4('0x1c')](function(){var _0x318702=_0x476623[_0x0ed4('0x31')]({'plain':!![]});var _0x533c86=_0x0ed4('0x32');return db[_0x0ed4('0x33')][_0x0ed4('0x34')]({'where':{'type':_0x533c86,'resourceId':_0x318702['id']}})[_0x0ed4('0x1c')](function(){return _0x476623;});})['then'](function(){_0x299137[_0x0ed4('0x2a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x38ea2c,_0x15fb60){return function(_0x21a07e){if(!_0x21a07e){_0x38ea2c[_0x0ed4('0x28')](0x194);}return _0x21a07e;};}function handleError(_0x594db3,_0x454570){_0x454570=_0x454570||0x1f4;return function(_0x5e3a7b){logger[_0x0ed4('0x23')](_0x5e3a7b[_0x0ed4('0x35')]);if(_0x5e3a7b[_0x0ed4('0x36')]){delete _0x5e3a7b[_0x0ed4('0x36')];}_0x594db3['status'](_0x454570)[_0x0ed4('0x37')](_0x5e3a7b);};}exports[_0x0ed4('0x38')]=function(_0x4c4526,_0x28dd7f){var _0x51ae1d={},_0x4c7437={},_0x1b4d55={'count':0x0,'rows':[]};var _0x45002d=db[_0x0ed4('0x39')][_0x0ed4('0x3a')];_0x4c7437['model']=_['keys'](_0x45002d);_0x4c7437[_0x0ed4('0x3b')]=_['keys'](_0x4c4526[_0x0ed4('0x3b')]);_0x4c7437[_0x0ed4('0x3c')]=_[_0x0ed4('0x3d')](_0x4c7437[_0x0ed4('0x3e')],_0x4c7437[_0x0ed4('0x3b')]);_0x51ae1d[_0x0ed4('0x3f')]=_[_0x0ed4('0x3d')](_0x4c7437[_0x0ed4('0x3e')],qs[_0x0ed4('0x40')](_0x4c4526[_0x0ed4('0x3b')][_0x0ed4('0x40')]));_0x51ae1d['attributes']=_0x51ae1d['attributes'][_0x0ed4('0x41')]?_0x51ae1d['attributes']:_0x4c7437[_0x0ed4('0x3e')];if(!_0x4c4526[_0x0ed4('0x3b')]['hasOwnProperty'](_0x0ed4('0x42'))){_0x51ae1d[_0x0ed4('0x43')]=qs[_0x0ed4('0x43')](_0x4c4526['query']['limit']);_0x51ae1d[_0x0ed4('0x2c')]=qs['offset'](_0x4c4526[_0x0ed4('0x3b')][_0x0ed4('0x2c')]);}_0x51ae1d[_0x0ed4('0x44')]=qs[_0x0ed4('0x45')](_0x4c4526['query']['sort']);_0x51ae1d[_0x0ed4('0x46')]=qs['filters'](_['pick'](_0x4c4526[_0x0ed4('0x3b')],_0x4c7437[_0x0ed4('0x3c')]));if(_0x4c4526[_0x0ed4('0x3b')]['filter']){_0x51ae1d[_0x0ed4('0x46')]=_[_0x0ed4('0x47')](_0x51ae1d[_0x0ed4('0x46')],{'$or':_[_0x0ed4('0x48')](_0x45002d,function(_0x481ee2){if(_0x481ee2[_0x0ed4('0x49')]['key']!==_0x0ed4('0x4a')){var _0xc482e0={};_0xc482e0[_0x481ee2[_0x0ed4('0x4b')]]={'$like':'%'+_0x4c4526[_0x0ed4('0x3b')][_0x0ed4('0x4c')]+'%'};return _0xc482e0;}})});}_0x51ae1d=_[_0x0ed4('0x47')]({},_0x51ae1d,_0x4c4526[_0x0ed4('0x4d')]);var _0x4b5cb7={'where':_0x51ae1d['where']};return db[_0x0ed4('0x39')]['count'](_0x4b5cb7)[_0x0ed4('0x1c')](function(_0x40cc3e){_0x1b4d55[_0x0ed4('0x2b')]=_0x40cc3e;if(_0x4c4526[_0x0ed4('0x3b')][_0x0ed4('0x4e')]){_0x51ae1d[_0x0ed4('0x4f')]=[{'all':!![]}];}return db['ChatQueue'][_0x0ed4('0x50')](_0x51ae1d);})['then'](function(_0x1dafa3){_0x1b4d55[_0x0ed4('0x51')]=_0x1dafa3;return _0x1b4d55;})['then'](respondWithFilteredResult(_0x28dd7f,_0x51ae1d))[_0x0ed4('0x27')](handleError(_0x28dd7f,null));};exports[_0x0ed4('0x52')]=function(_0xdf809c,_0x24d87b){var _0x562edc={'raw':!![],'where':{'id':_0xdf809c[_0x0ed4('0x53')]['id']}},_0x1d28a0={};_0x1d28a0['model']=_[_0x0ed4('0x54')](db[_0x0ed4('0x39')][_0x0ed4('0x3a')]);_0x1d28a0[_0x0ed4('0x3b')]=_[_0x0ed4('0x54')](_0xdf809c[_0x0ed4('0x3b')]);_0x1d28a0[_0x0ed4('0x3c')]=_[_0x0ed4('0x3d')](_0x1d28a0[_0x0ed4('0x3e')],_0x1d28a0[_0x0ed4('0x3b')]);_0x562edc[_0x0ed4('0x3f')]=_[_0x0ed4('0x3d')](_0x1d28a0[_0x0ed4('0x3e')],qs[_0x0ed4('0x40')](_0xdf809c[_0x0ed4('0x3b')][_0x0ed4('0x40')]));_0x562edc[_0x0ed4('0x3f')]=_0x562edc[_0x0ed4('0x3f')][_0x0ed4('0x41')]?_0x562edc[_0x0ed4('0x3f')]:_0x1d28a0[_0x0ed4('0x3e')];if(_0xdf809c['query'][_0x0ed4('0x4e')]){_0x562edc[_0x0ed4('0x4f')]=[{'all':!![]}];}_0x562edc=_[_0x0ed4('0x47')]({},_0x562edc,_0xdf809c[_0x0ed4('0x4d')]);return db[_0x0ed4('0x39')]['find'](_0x562edc)[_0x0ed4('0x1c')](handleEntityNotFound(_0x24d87b,null))[_0x0ed4('0x1c')](respondWithResult(_0x24d87b,null))[_0x0ed4('0x27')](handleError(_0x24d87b,null));};exports[_0x0ed4('0x55')]=function(_0x1b0553,_0x320bbc){return db[_0x0ed4('0x39')][_0x0ed4('0x55')](_0x1b0553['body'],{})['then'](function(_0x4309cd){var _0x194a6e=_0x1b0553[_0x0ed4('0x56')][_0x0ed4('0x31')]({'plain':!![]});if(!_0x194a6e)throw new Error(_0x0ed4('0x57'));if(_0x194a6e[_0x0ed4('0x58')]==='user'){var _0x3cb3ba=_0x4309cd['get']({'plain':!![]});var _0x5d9c0d='ChatQueues';return db[_0x0ed4('0x59')][_0x0ed4('0x5a')]({'where':{'name':_0x5d9c0d,'userProfileId':_0x194a6e['userProfileId']},'raw':!![]})['then'](function(_0x4593f5){if(_0x4593f5&&_0x4593f5['autoAssociation']===0x0){return db['UserProfileResource']['create']({'name':_0x3cb3ba[_0x0ed4('0x36')],'resourceId':_0x3cb3ba['id'],'type':_0x4593f5[_0x0ed4('0x36')],'sectionId':_0x4593f5['id']},{})[_0x0ed4('0x1c')](function(){return _0x4309cd;});}else{return _0x4309cd;}})[_0x0ed4('0x27')](function(_0x198f88){logger[_0x0ed4('0x23')](_0x0ed4('0x5b'),_0x198f88);throw _0x198f88;});}return _0x4309cd;})[_0x0ed4('0x1c')](respondWithResult(_0x320bbc,0xc9))[_0x0ed4('0x27')](handleError(_0x320bbc,null));};exports['update']=function(_0x5a60f7,_0x411562){if(_0x5a60f7[_0x0ed4('0x5c')]['id']){delete _0x5a60f7[_0x0ed4('0x5c')]['id'];}return db[_0x0ed4('0x39')][_0x0ed4('0x5a')]({'where':{'id':_0x5a60f7[_0x0ed4('0x53')]['id']}})[_0x0ed4('0x1c')](handleEntityNotFound(_0x411562,null))[_0x0ed4('0x1c')](saveUpdates(_0x5a60f7[_0x0ed4('0x5c')],null))[_0x0ed4('0x1c')](respondWithResult(_0x411562,null))[_0x0ed4('0x27')](handleError(_0x411562,null));};exports[_0x0ed4('0x34')]=function(_0x3c4b65,_0x12f475){return db[_0x0ed4('0x39')][_0x0ed4('0x5a')]({'where':{'id':_0x3c4b65['params']['id']}})[_0x0ed4('0x1c')](handleEntityNotFound(_0x12f475,null))[_0x0ed4('0x1c')](removeEntity(_0x12f475,null))[_0x0ed4('0x27')](handleError(_0x12f475,null));};exports['describe']=function(_0x5cda1f,_0x1fe30b){return db[_0x0ed4('0x39')][_0x0ed4('0x5d')]()[_0x0ed4('0x1c')](respondWithResult(_0x1fe30b,null))[_0x0ed4('0x27')](handleError(_0x1fe30b,null));};exports['getMembers']=function(_0x553a8c,_0x562fb2,_0x347d89){var _0x44888b={'raw':!![],'where':{}},_0x50abd3={},_0x281631;return db[_0x0ed4('0x39')][_0x0ed4('0x5e')]({'where':{'id':_0x553a8c[_0x0ed4('0x53')]['id']}})[_0x0ed4('0x1c')](handleEntityNotFound(_0x562fb2,null))['then'](function(_0x485477){if(_0x485477){_0x281631=_0x485477['get']({'plain':!![]});_0x50abd3[_0x0ed4('0x3e')]=_[_0x0ed4('0x54')](db[_0x0ed4('0x5f')]['rawAttributes']);_0x50abd3[_0x0ed4('0x3b')]=_[_0x0ed4('0x54')](_0x553a8c['query']);_0x50abd3[_0x0ed4('0x3c')]=_[_0x0ed4('0x3d')](_0x50abd3[_0x0ed4('0x3e')],_0x50abd3['query']);_0x44888b[_0x0ed4('0x3f')]=_[_0x0ed4('0x3d')](_0x50abd3[_0x0ed4('0x3e')],qs['fields'](_0x553a8c[_0x0ed4('0x3b')][_0x0ed4('0x40')]));_0x44888b[_0x0ed4('0x3f')]=_0x44888b['attributes']['length']?_0x44888b['attributes']:_0x50abd3[_0x0ed4('0x3e')];if(!_0x553a8c['query'][_0x0ed4('0x60')](_0x0ed4('0x42'))){_0x44888b[_0x0ed4('0x43')]=qs['limit'](_0x553a8c[_0x0ed4('0x3b')]['limit']);_0x44888b[_0x0ed4('0x2c')]=qs[_0x0ed4('0x2c')](_0x553a8c[_0x0ed4('0x3b')]['offset']);}_0x44888b[_0x0ed4('0x44')]=qs[_0x0ed4('0x45')](_0x553a8c[_0x0ed4('0x3b')][_0x0ed4('0x45')]);_0x44888b[_0x0ed4('0x46')]=qs[_0x0ed4('0x3c')](_['pick'](_0x553a8c[_0x0ed4('0x3b')],_0x50abd3[_0x0ed4('0x3c')]));_0x44888b['where']['ChatQueueId']=_0x485477['id'];if(_0x553a8c[_0x0ed4('0x3b')][_0x0ed4('0x4c')]){_0x44888b[_0x0ed4('0x46')]=_[_0x0ed4('0x47')](_0x44888b['where'],{'$or':_[_0x0ed4('0x48')](_0x44888b[_0x0ed4('0x3f')],function(_0x2734df){var _0x11296f={};_0x11296f[_0x2734df]={'$like':'%'+_0x553a8c['query']['filter']+'%'};return _0x11296f;})});}_0x44888b=_['merge']({},_0x44888b,_0x553a8c[_0x0ed4('0x4d')]);return db[_0x0ed4('0x5f')]['findAll'](_0x44888b);}})[_0x0ed4('0x1c')](function(_0x91311){if(_0x91311){return db[_0x0ed4('0x61')][_0x0ed4('0x62')]({'where':{'id':_[_0x0ed4('0x48')](_0x91311,_0x0ed4('0x63')),'role':_0x0ed4('0x64')},'attributes':['id',_0x0ed4('0x36'),'chatPause',_0x0ed4('0x65'),_0x0ed4('0x66')]});}})['then'](function(_0x390cac){if(_0x390cac){return{'count':_0x390cac['count'],'rows':_[_0x0ed4('0x48')](_0x390cac['rows'],function(_0x17248b){return{'membername':_0x17248b['name'],'UserId':_0x17248b['id'],'queue_name':_0x281631[_0x0ed4('0x36')],'ChatQueueId':_0x281631['id'],'interface':util[_0x0ed4('0x67')]('%s/%s','SIP',_0x17248b['name']),'penalty':0x0,'paused':_0x17248b[_0x0ed4('0x68')],'createdAt':_0x17248b[_0x0ed4('0x66')],'updatedAt':_0x17248b[_0x0ed4('0x65')]};})};}else{return{'count':0x0,'rows':[]};}})[_0x0ed4('0x1c')](respondWithFilteredResult(_0x562fb2,_0x44888b))['catch'](handleError(_0x562fb2,null));};exports[_0x0ed4('0x69')]=function(_0x3e2a60,_0x40a489,_0x5bf99c){var _0x234734={};var _0x3a1875={};var _0x2b54a9;var _0x28484a;return db[_0x0ed4('0x39')]['findOne']({'where':{'id':_0x3e2a60[_0x0ed4('0x53')]['id']}})[_0x0ed4('0x1c')](handleEntityNotFound(_0x40a489,null))[_0x0ed4('0x1c')](function(_0x25d99d){if(_0x25d99d){_0x2b54a9=_0x25d99d;_0x3a1875[_0x0ed4('0x3e')]=_[_0x0ed4('0x54')](db[_0x0ed4('0x6a')][_0x0ed4('0x3a')]);_0x3a1875[_0x0ed4('0x3b')]=_['keys'](_0x3e2a60[_0x0ed4('0x3b')]);_0x3a1875['filters']=_[_0x0ed4('0x3d')](_0x3a1875[_0x0ed4('0x3e')],_0x3a1875[_0x0ed4('0x3b')]);_0x234734[_0x0ed4('0x3f')]=_[_0x0ed4('0x3d')](_0x3a1875[_0x0ed4('0x3e')],qs['fields'](_0x3e2a60[_0x0ed4('0x3b')][_0x0ed4('0x40')]));_0x234734['attributes']=_0x234734[_0x0ed4('0x3f')][_0x0ed4('0x41')]?_0x234734[_0x0ed4('0x3f')]:_0x3a1875[_0x0ed4('0x3e')];_0x234734[_0x0ed4('0x44')]=qs[_0x0ed4('0x45')](_0x3e2a60['query'][_0x0ed4('0x45')]);_0x234734[_0x0ed4('0x46')]=qs[_0x0ed4('0x3c')](_[_0x0ed4('0x6b')](_0x3e2a60['query'],_0x3a1875[_0x0ed4('0x3c')]));if(_0x3e2a60[_0x0ed4('0x3b')]['filter']){_0x234734[_0x0ed4('0x46')]=_[_0x0ed4('0x47')](_0x234734[_0x0ed4('0x46')],{'$or':_[_0x0ed4('0x48')](_0x234734[_0x0ed4('0x3f')],function(_0x47daa1){var _0x5802be={};_0x5802be[_0x47daa1]={'$like':'%'+_0x3e2a60['query'][_0x0ed4('0x4c')]+'%'};return _0x5802be;})});}_0x234734=_[_0x0ed4('0x47')]({},_0x234734,_0x3e2a60[_0x0ed4('0x4d')]);return _0x2b54a9[_0x0ed4('0x69')](_0x234734);}})[_0x0ed4('0x1c')](function(_0xa42a12){if(_0xa42a12){_0x28484a=_0xa42a12['length'];if(!_0x3e2a60[_0x0ed4('0x3b')][_0x0ed4('0x60')](_0x0ed4('0x42'))){_0x234734[_0x0ed4('0x43')]=qs[_0x0ed4('0x43')](_0x3e2a60['query']['limit']);_0x234734[_0x0ed4('0x2c')]=qs[_0x0ed4('0x2c')](_0x3e2a60['query']['offset']);}return _0x2b54a9['getTeams'](_0x234734);}})[_0x0ed4('0x1c')](function(_0x43605d){if(_0x43605d){return _0x43605d?{'count':_0x28484a,'rows':_0x43605d}:null;}})[_0x0ed4('0x1c')](respondWithResult(_0x40a489,null))[_0x0ed4('0x27')](handleError(_0x40a489,null));};exports[_0x0ed4('0x6c')]=function(_0x419661,_0x577163,_0xaaed31){var _0x53c9a2=_0x419661[_0x0ed4('0x5c')]['teams'];return db['Team']['findAll']({'where':{'id':_['map'](_0x53c9a2,'id')},'attributes':['id'],'include':[{'model':db[_0x0ed4('0x61')],'as':_0x0ed4('0x6d'),'attributes':['id','name',_0x0ed4('0x6e'),_0x0ed4('0x6f'),_0x0ed4('0x70')],'raw':!![]}]})[_0x0ed4('0x1c')](function(_0x333bde){if(_0x333bde){var _0x2fb335=_[_0x0ed4('0x71')](_0x333bde,function(_0x3d30d8){var _0x14d596=_0x3d30d8['get']({'plain':!![]});return _0x14d596['Agents'];});return db[_0x0ed4('0x39')]['find']({'where':{'id':_0x419661['params']['id']}})[_0x0ed4('0x1c')](function(_0x23b179){return db[_0x0ed4('0x72')][_0x0ed4('0x73')](function(_0x160349){return _0x23b179[_0x0ed4('0x6c')](_['map'](_0x53c9a2,'id'),{'transaction':_0x160349})[_0x0ed4('0x1c')](function(){return BPromise['each'](_0x2fb335,function(_0x3bd559){return db[_0x0ed4('0x5f')][_0x0ed4('0x74')]({'where':{'UserId':_0x3bd559['id'],'ChatQueueId':_0x419661[_0x0ed4('0x53')]['id']},'transaction':_0x160349});});})[_0x0ed4('0x1c')](function(){_0x2fb335[_0x0ed4('0x75')](function(_0x3a3d4f){socket[_0x0ed4('0x76')](_0x0ed4('0x77'),{'UserId':_0x3a3d4f['id'],'ChatQueueId':_0x23b179['id']});});});});});}})[_0x0ed4('0x1c')](respondWithStatusCode(_0x577163,null))['catch'](handleError(_0x577163,null));};exports[_0x0ed4('0x78')]=function(_0x3285d8,_0x3ef674,_0x1e3d69){return db['Team']['findAll']({'where':{'id':_0x3285d8['query'][_0x0ed4('0x79')]},'attributes':['id'],'include':[{'model':db[_0x0ed4('0x61')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0x0ed4('0x1c')](handleEntityNotFound(_0x3ef674,null))['then'](function(_0x4deea2){var _0x4527a8=_[_0x0ed4('0x48')](_0x4deea2,'id');var _0x13da58=[];var _0xa8d51f=[];var _0x3fd4b6=squel[_0x0ed4('0x7a')]();_0x3fd4b6['field'](_0x0ed4('0x7b'))[_0x0ed4('0x7c')](_0x0ed4('0x7d'),'tq')[_0x0ed4('0x7e')](_0x0ed4('0x7f'),'ut',_0x0ed4('0x80'))[_0x0ed4('0x46')](_0x0ed4('0x81'),_0x3285d8[_0x0ed4('0x53')]['id']);for(var _0x396c26=0x0;_0x396c26<_0x4deea2[_0x0ed4('0x41')];_0x396c26+=0x1){let _0x1ade14=_0x4deea2[_0x396c26];for(var _0x320d86=0x0;_0x320d86<_0x1ade14['Agents'][_0x0ed4('0x41')];_0x320d86+=0x1){let _0x319186=_0x1ade14[_0x0ed4('0x6d')][_0x320d86];var _0x14ab2b=_0x3fd4b6[_0x0ed4('0x82')]();_0x14ab2b[_0x0ed4('0x46')](_0x0ed4('0x83'),_0x319186['id']);_0xa8d51f['push'](db[_0x0ed4('0x72')][_0x0ed4('0x3b')](_0x14ab2b['toString'](),{'type':db[_0x0ed4('0x72')]['QueryTypes']['SELECT']})[_0x0ed4('0x1c')](function(_0x46e071){if(_0x46e071[_0x0ed4('0x41')]===0x1){return _0x319186['id'];}else{var _0x105103=_['every'](_[_0x0ed4('0x48')](_0x46e071,'TeamId'),function(_0x18f398){return _[_0x0ed4('0x84')](_0x4527a8,_0x18f398);});if(_0x105103){return _0x319186['id'];}}}));}}return BPromise[_0x0ed4('0x85')](_0xa8d51f)[_0x0ed4('0x1c')](function(_0x5ae2e3){_0x13da58=_(_0x13da58)[_0x0ed4('0x86')](_0x5ae2e3)[_0x0ed4('0x87')]()[_0x0ed4('0x88')]();return db['ChatQueue'][_0x0ed4('0x5a')]({'where':{'id':_0x3285d8[_0x0ed4('0x53')]['id']}})[_0x0ed4('0x1c')](function(_0x365a30){return db[_0x0ed4('0x72')]['transaction'](function(_0x212b13){return _0x365a30[_0x0ed4('0x78')](_0x3285d8[_0x0ed4('0x3b')]['ids'],{'transaction':_0x212b13})[_0x0ed4('0x1c')](function(){if(!_[_0x0ed4('0x89')](_0x13da58)){return _0x365a30[_0x0ed4('0x8a')](_0x13da58,{'transaction':_0x212b13});}})['then'](function(){_0x13da58['forEach'](function(_0x5887b5){socket[_0x0ed4('0x76')]('userChatQueue:remove',{'UserId':_0x5887b5,'ChatQueueId':_0x365a30['id']});});});});});});})[_0x0ed4('0x1c')](respondWithStatusCode(_0x3ef674,null))[_0x0ed4('0x27')](handleError(_0x3ef674,null));};exports[_0x0ed4('0x8b')]=function(_0x5636d7,_0x3270de,_0x1c540e){return db['ChatQueue']['find']({'where':{'id':_0x5636d7['params']['id']}})[_0x0ed4('0x1c')](handleEntityNotFound(_0x3270de,null))[_0x0ed4('0x1c')](function(_0x55b53a){if(_0x55b53a){return _0x55b53a[_0x0ed4('0x8b')](_0x5636d7[_0x0ed4('0x5c')][_0x0ed4('0x79')],_[_0x0ed4('0x8c')](_0x5636d7[_0x0ed4('0x5c')],['ids','id'])||{})[_0x0ed4('0x8d')](function(_0x1254d1){for(var _0x170d0f=0x0;_0x170d0f<_0x5636d7['body'][_0x0ed4('0x79')][_0x0ed4('0x41')];_0x170d0f+=0x1){socket[_0x0ed4('0x76')](_0x0ed4('0x77'),{'UserId':_0x5636d7['body'][_0x0ed4('0x79')][_0x170d0f],'ChatQueueId':_0x5636d7[_0x0ed4('0x53')]['id']});}return _0x1254d1;});}})['then'](respondWithResult(_0x3270de,null))[_0x0ed4('0x27')](handleError(_0x3270de,null));};exports[_0x0ed4('0x8a')]=function(_0x3b8502,_0x3c7b8d,_0x5e0f78){return db[_0x0ed4('0x39')]['find']({'where':{'id':_0x3b8502[_0x0ed4('0x53')]['id']}})[_0x0ed4('0x1c')](handleEntityNotFound(_0x3c7b8d,null))[_0x0ed4('0x1c')](function(_0x4c1a0c){if(_0x4c1a0c){return _0x4c1a0c[_0x0ed4('0x8a')](_0x3b8502[_0x0ed4('0x3b')][_0x0ed4('0x79')])[_0x0ed4('0x1c')](function(){if(_[_0x0ed4('0x8e')](_0x3b8502[_0x0ed4('0x3b')][_0x0ed4('0x79')])){for(var _0x3f9653=0x0;_0x3f9653<_0x3b8502['query'][_0x0ed4('0x79')][_0x0ed4('0x41')];_0x3f9653+=0x1){socket[_0x0ed4('0x76')](_0x0ed4('0x8f'),{'UserId':Number(_0x3b8502[_0x0ed4('0x3b')]['ids'][_0x3f9653]),'ChatQueueId':Number(_0x3b8502[_0x0ed4('0x53')]['id'])});}}else{socket[_0x0ed4('0x76')](_0x0ed4('0x8f'),{'UserId':Number(_0x3b8502[_0x0ed4('0x3b')][_0x0ed4('0x79')]),'ChatQueueId':Number(_0x3b8502[_0x0ed4('0x53')]['id'])});}});}})[_0x0ed4('0x1c')](respondWithStatusCode(_0x3c7b8d,null))[_0x0ed4('0x27')](handleError(_0x3c7b8d,null));};exports[_0x0ed4('0x90')]=function(_0x13c5b2,_0x1b1ab5,_0x1edc74){var _0xf8653e={};var _0x11d2d5={};var _0x16012f;var _0x389dff;return db[_0x0ed4('0x39')][_0x0ed4('0x5e')]({'where':{'id':_0x13c5b2['params']['id']}})[_0x0ed4('0x1c')](handleEntityNotFound(_0x1b1ab5,null))[_0x0ed4('0x1c')](function(_0x491f76){if(_0x491f76){_0x16012f=_0x491f76;_0x11d2d5[_0x0ed4('0x3e')]=_[_0x0ed4('0x54')](db[_0x0ed4('0x61')][_0x0ed4('0x3a')]);_0x11d2d5[_0x0ed4('0x3b')]=_[_0x0ed4('0x54')](_0x13c5b2[_0x0ed4('0x3b')]);_0x11d2d5['filters']=_[_0x0ed4('0x3d')](_0x11d2d5[_0x0ed4('0x3e')],_0x11d2d5[_0x0ed4('0x3b')]);_0xf8653e['attributes']=_[_0x0ed4('0x3d')](_0x11d2d5[_0x0ed4('0x3e')],qs['fields'](_0x13c5b2['query'][_0x0ed4('0x40')]));_0xf8653e['attributes']=_0xf8653e[_0x0ed4('0x3f')][_0x0ed4('0x41')]?_0xf8653e['attributes']:_0x11d2d5[_0x0ed4('0x3e')];_0xf8653e[_0x0ed4('0x44')]=qs[_0x0ed4('0x45')](_0x13c5b2[_0x0ed4('0x3b')]['sort']);_0xf8653e[_0x0ed4('0x46')]=qs[_0x0ed4('0x3c')](_[_0x0ed4('0x6b')](_0x13c5b2[_0x0ed4('0x3b')],_0x11d2d5[_0x0ed4('0x3c')]));if(_0x13c5b2['query']['filter']){_0xf8653e[_0x0ed4('0x46')]=_[_0x0ed4('0x47')](_0xf8653e['where'],{'$or':_[_0x0ed4('0x48')](_0xf8653e['attributes'],function(_0x17cec2){var _0x1d5e1d={};_0x1d5e1d[_0x17cec2]={'$like':'%'+_0x13c5b2[_0x0ed4('0x3b')]['filter']+'%'};return _0x1d5e1d;})});}_0xf8653e=_['merge']({},_0xf8653e,_0x13c5b2[_0x0ed4('0x4d')]);return _0x16012f[_0x0ed4('0x90')](_0xf8653e);}})[_0x0ed4('0x1c')](function(_0x4c8d63){if(_0x4c8d63){_0x389dff=_0x4c8d63[_0x0ed4('0x41')];if(!_0x13c5b2[_0x0ed4('0x3b')]['hasOwnProperty']('nolimit')){_0xf8653e[_0x0ed4('0x43')]=qs[_0x0ed4('0x43')](_0x13c5b2[_0x0ed4('0x3b')][_0x0ed4('0x43')]);_0xf8653e[_0x0ed4('0x2c')]=qs[_0x0ed4('0x2c')](_0x13c5b2[_0x0ed4('0x3b')][_0x0ed4('0x2c')]);}return _0x16012f[_0x0ed4('0x90')](_0xf8653e);}})[_0x0ed4('0x1c')](function(_0x59df3f){if(_0x59df3f){return _0x59df3f?{'count':_0x389dff,'rows':_0x59df3f}:null;}})[_0x0ed4('0x1c')](respondWithResult(_0x1b1ab5,null))[_0x0ed4('0x27')](handleError(_0x1b1ab5,null));};
\ No newline at end of file
+var _0x5b03=['addAgents','omit','spread','userChatQueue:save','getAgents','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./chatQueue.socket','jayson/promise','client','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','info','ChatQueue,\x20%s,\x20%s','debug','ChatQueue,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','sendStatus','status','end','json','offset','set','Content-Range','apply','save','then','destroy','get','stack','name','send','index','ChatQueue','rawAttributes','model','keys','query','intersection','fields','attributes','length','hasOwnProperty','limit','order','sort','where','filters','pick','map','type','key','VIRTUAL','filter','merge','options','count','includeAll','include','findAll','show','find','create','user','role','UserProfileSection','userProfileId','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','params','describe','getMembers','findOne','UserChatQueue','nolimit','ChatQueueId','User','findAndCountAll','agent','updatedAt','rows','%s/%s','SIP','chatPause','createdAt','getTeams','Team','addTeams','Agents','online','voicePause','flatMap','sequelize','each','findOrCreate','forEach','emit','ids','select','join','ut.TeamId\x20=\x20tq.TeamId','ChatQueueId\x20=\x20?','clone','ut.UserId\x20=\x20?','push','toString','QueryTypes','TeamId','includes','all','compact','transaction','isEmpty','removeAgents','userChatQueue:remove'];(function(_0x1694f5,_0x49b7c3){var _0x5b4321=function(_0x58c183){while(--_0x58c183){_0x1694f5['push'](_0x1694f5['shift']());}};_0x5b4321(++_0x49b7c3);}(_0x5b03,0x1c7));var _0x35b0=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x5b03[_0x321bb2];return _0x9c12ed;};'use strict';var pdf=require(_0x35b0('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x35b0('0x1'));var zipdir=require(_0x35b0('0x2'));var jsonpatch=require(_0x35b0('0x3'));var rp=require(_0x35b0('0x4'));var moment=require('moment');var BPromise=require(_0x35b0('0x5'));var Mustache=require(_0x35b0('0x6'));var util=require(_0x35b0('0x7'));var path=require(_0x35b0('0x8'));var sox=require(_0x35b0('0x9'));var csv=require(_0x35b0('0xa'));var ejs=require(_0x35b0('0xb'));var fs=require('fs');var _=require(_0x35b0('0xc'));var squel=require(_0x35b0('0xd'));var crypto=require('crypto');var jsforce=require(_0x35b0('0xe'));var deskjs=require(_0x35b0('0xf'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x35b0('0x10'));var Redis=require(_0x35b0('0x11'));var authService=require(_0x35b0('0x12'));var qs=require(_0x35b0('0x13'));var hardwareService=require(_0x35b0('0x14'));var logger=require(_0x35b0('0x15'))(_0x35b0('0x16'));var utils=require(_0x35b0('0x17'));var config=require(_0x35b0('0x18'));var db=require(_0x35b0('0x19'))['db'];config[_0x35b0('0x1a')]=_[_0x35b0('0x1b')](config[_0x35b0('0x1a')],{'host':_0x35b0('0x1c'),'port':0x18eb});var socket=require(_0x35b0('0x1d'))(new Redis(config[_0x35b0('0x1a')]));require(_0x35b0('0x1e'))['register'](socket);var jayson=require(_0x35b0('0x1f'));var client=jayson[_0x35b0('0x20')]['http']({'port':0x232a});function checkPasswordPattern(_0x343a92,_0x42f23f,_0x1941b3){if(_0x1941b3){var _0xf97ea0=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0xf97ea0['test'](_0x42f23f)){return _0x343a92;}else{throw new Error(_0x35b0('0x21'));}}else{return _0x343a92;}}function respondWithRpcPromise(_0x2c48cc,_0x1587ec,_0x50eff5,_0x177c93){return new BPromise(function(_0x7cd333,_0xb74eea){var _0x1e4e41=_0x177c93||client;return _0x1e4e41[_0x35b0('0x22')](_0x2c48cc,_0x50eff5)['then'](function(_0x4a4227){logger[_0x35b0('0x23')](_0x35b0('0x24'),_0x1587ec,'request\x20sent');logger[_0x35b0('0x25')](_0x35b0('0x26'),_0x1587ec,_0x35b0('0x27'),JSON[_0x35b0('0x28')](_0x4a4227));if(_0x4a4227[_0x35b0('0x29')]){if(_0x4a4227[_0x35b0('0x29')][_0x35b0('0x2a')]===0x1f4){logger[_0x35b0('0x29')]('ChatQueue,\x20%s,\x20%s',_0x1587ec,_0x4a4227[_0x35b0('0x29')][_0x35b0('0x2b')]);return _0xb74eea(_0x4a4227[_0x35b0('0x29')][_0x35b0('0x2b')]);}logger[_0x35b0('0x29')](_0x35b0('0x24'),_0x1587ec,_0x4a4227['error']['message']);return _0x7cd333(_0x4a4227[_0x35b0('0x29')][_0x35b0('0x2b')]);}else{logger[_0x35b0('0x23')](_0x35b0('0x24'),_0x1587ec,_0x35b0('0x27'));_0x7cd333(_0x4a4227[_0x35b0('0x2c')][_0x35b0('0x2b')]);}})[_0x35b0('0x2d')](function(_0x32c6d6){logger[_0x35b0('0x29')]('ChatQueue,\x20%s,\x20%s',_0x1587ec,_0x32c6d6);_0xb74eea(_0x32c6d6);});});}function respondWithStatusCode(_0x35953f,_0x42645b){_0x42645b=_0x42645b||0xcc;return function(_0x2a184c){if(_0x2a184c){return _0x35953f[_0x35b0('0x2e')](_0x42645b);}return _0x35953f[_0x35b0('0x2f')](_0x42645b)[_0x35b0('0x30')]();};}function respondWithResult(_0x10b2a2,_0x5456e2){_0x5456e2=_0x5456e2||0xc8;return function(_0x304776){if(_0x304776){return _0x10b2a2[_0x35b0('0x2f')](_0x5456e2)[_0x35b0('0x31')](_0x304776);}};}function respondWithFilteredResult(_0x56c225,_0x253492){return function(_0x466a85){if(_0x466a85){var _0x3863e7=_0x466a85['count'],_0x7e14d8=_0x253492[_0x35b0('0x32')],_0x474178=_0x253492[_0x35b0('0x32')]+_0x253492['limit'],_0x263b43;if(_0x474178>=_0x3863e7){_0x474178=_0x3863e7;_0x263b43=0xc8;}else{_0x263b43=0xce;}_0x56c225[_0x35b0('0x2f')](_0x263b43);return _0x56c225[_0x35b0('0x33')](_0x35b0('0x34'),_0x7e14d8+'-'+_0x474178+'/'+_0x3863e7)['json'](_0x466a85);}return null;};}function patchUpdates(_0x3d402e){return function(_0x1d1a26){try{jsonpatch[_0x35b0('0x35')](_0x1d1a26,_0x3d402e,!![]);}catch(_0x2f76f3){return BPromise['reject'](_0x2f76f3);}return _0x1d1a26[_0x35b0('0x36')]();};}function saveUpdates(_0x42604d,_0x222e3e){return function(_0x399a77){if(_0x399a77){return _0x399a77['update'](_0x42604d)[_0x35b0('0x37')](function(_0xc92595){return _0xc92595;});}return null;};}function removeEntity(_0x488296,_0x400cc0){return function(_0x2fc44b){if(_0x2fc44b){return _0x2fc44b[_0x35b0('0x38')]()[_0x35b0('0x37')](function(){var _0x49c4e3=_0x2fc44b[_0x35b0('0x39')]({'plain':!![]});var _0x396109='ChatQueues';return db['UserProfileResource'][_0x35b0('0x38')]({'where':{'type':_0x396109,'resourceId':_0x49c4e3['id']}})['then'](function(){return _0x2fc44b;});})[_0x35b0('0x37')](function(){_0x488296[_0x35b0('0x2f')](0xcc)['end']();});}};}function handleEntityNotFound(_0x14423c,_0x3ec20c){return function(_0x3ce455){if(!_0x3ce455){_0x14423c[_0x35b0('0x2e')](0x194);}return _0x3ce455;};}function handleError(_0x488992,_0x5324e0){_0x5324e0=_0x5324e0||0x1f4;return function(_0x5aa5fe){logger[_0x35b0('0x29')](_0x5aa5fe[_0x35b0('0x3a')]);if(_0x5aa5fe[_0x35b0('0x3b')]){delete _0x5aa5fe[_0x35b0('0x3b')];}_0x488992[_0x35b0('0x2f')](_0x5324e0)[_0x35b0('0x3c')](_0x5aa5fe);};}exports[_0x35b0('0x3d')]=function(_0x1b1edb,_0x5d1265){var _0x2a0b39={},_0x121057={},_0x123098={'count':0x0,'rows':[]};var _0x5c43e1=db[_0x35b0('0x3e')][_0x35b0('0x3f')];_0x121057[_0x35b0('0x40')]=_[_0x35b0('0x41')](_0x5c43e1);_0x121057[_0x35b0('0x42')]=_[_0x35b0('0x41')](_0x1b1edb[_0x35b0('0x42')]);_0x121057['filters']=_[_0x35b0('0x43')](_0x121057[_0x35b0('0x40')],_0x121057['query']);_0x2a0b39['attributes']=_[_0x35b0('0x43')](_0x121057[_0x35b0('0x40')],qs[_0x35b0('0x44')](_0x1b1edb[_0x35b0('0x42')]['fields']));_0x2a0b39['attributes']=_0x2a0b39[_0x35b0('0x45')][_0x35b0('0x46')]?_0x2a0b39[_0x35b0('0x45')]:_0x121057[_0x35b0('0x40')];if(!_0x1b1edb[_0x35b0('0x42')][_0x35b0('0x47')]('nolimit')){_0x2a0b39[_0x35b0('0x48')]=qs['limit'](_0x1b1edb[_0x35b0('0x42')][_0x35b0('0x48')]);_0x2a0b39['offset']=qs[_0x35b0('0x32')](_0x1b1edb[_0x35b0('0x42')]['offset']);}_0x2a0b39[_0x35b0('0x49')]=qs['sort'](_0x1b1edb[_0x35b0('0x42')][_0x35b0('0x4a')]);_0x2a0b39[_0x35b0('0x4b')]=qs[_0x35b0('0x4c')](_[_0x35b0('0x4d')](_0x1b1edb[_0x35b0('0x42')],_0x121057[_0x35b0('0x4c')]));if(_0x1b1edb['query']['filter']){_0x2a0b39[_0x35b0('0x4b')]=_['merge'](_0x2a0b39[_0x35b0('0x4b')],{'$or':_[_0x35b0('0x4e')](_0x5c43e1,function(_0x175d14){if(_0x175d14[_0x35b0('0x4f')][_0x35b0('0x50')]!==_0x35b0('0x51')){var _0x44b5e5={};_0x44b5e5[_0x175d14['field']]={'$like':'%'+_0x1b1edb[_0x35b0('0x42')][_0x35b0('0x52')]+'%'};return _0x44b5e5;}})});}_0x2a0b39=_[_0x35b0('0x53')]({},_0x2a0b39,_0x1b1edb[_0x35b0('0x54')]);var _0x589cd4={'where':_0x2a0b39['where']};return db['ChatQueue'][_0x35b0('0x55')](_0x589cd4)[_0x35b0('0x37')](function(_0x4214a8){_0x123098[_0x35b0('0x55')]=_0x4214a8;if(_0x1b1edb[_0x35b0('0x42')][_0x35b0('0x56')]){_0x2a0b39[_0x35b0('0x57')]=[{'all':!![]}];}return db[_0x35b0('0x3e')][_0x35b0('0x58')](_0x2a0b39);})[_0x35b0('0x37')](function(_0x16018d){_0x123098['rows']=_0x16018d;return _0x123098;})[_0x35b0('0x37')](respondWithFilteredResult(_0x5d1265,_0x2a0b39))['catch'](handleError(_0x5d1265,null));};exports[_0x35b0('0x59')]=function(_0x1f949f,_0x2408fe){var _0x477b8d={'raw':!![],'where':{'id':_0x1f949f['params']['id']}},_0x1dfe15={};_0x1dfe15[_0x35b0('0x40')]=_[_0x35b0('0x41')](db[_0x35b0('0x3e')][_0x35b0('0x3f')]);_0x1dfe15[_0x35b0('0x42')]=_[_0x35b0('0x41')](_0x1f949f[_0x35b0('0x42')]);_0x1dfe15[_0x35b0('0x4c')]=_['intersection'](_0x1dfe15[_0x35b0('0x40')],_0x1dfe15[_0x35b0('0x42')]);_0x477b8d[_0x35b0('0x45')]=_[_0x35b0('0x43')](_0x1dfe15[_0x35b0('0x40')],qs[_0x35b0('0x44')](_0x1f949f[_0x35b0('0x42')]['fields']));_0x477b8d['attributes']=_0x477b8d['attributes'][_0x35b0('0x46')]?_0x477b8d[_0x35b0('0x45')]:_0x1dfe15[_0x35b0('0x40')];if(_0x1f949f['query']['includeAll']){_0x477b8d['include']=[{'all':!![]}];}_0x477b8d=_[_0x35b0('0x53')]({},_0x477b8d,_0x1f949f[_0x35b0('0x54')]);return db[_0x35b0('0x3e')][_0x35b0('0x5a')](_0x477b8d)[_0x35b0('0x37')](handleEntityNotFound(_0x2408fe,null))[_0x35b0('0x37')](respondWithResult(_0x2408fe,null))['catch'](handleError(_0x2408fe,null));};exports['create']=function(_0x45b614,_0x169003){return db['ChatQueue'][_0x35b0('0x5b')](_0x45b614['body'],{})[_0x35b0('0x37')](function(_0x57c2f6){var _0x5d29ba=_0x45b614[_0x35b0('0x5c')]['get']({'plain':!![]});if(!_0x5d29ba)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x5d29ba[_0x35b0('0x5d')]===_0x35b0('0x5c')){var _0x5ef215=_0x57c2f6[_0x35b0('0x39')]({'plain':!![]});var _0x415a3c='ChatQueues';return db[_0x35b0('0x5e')][_0x35b0('0x5a')]({'where':{'name':_0x415a3c,'userProfileId':_0x5d29ba[_0x35b0('0x5f')]},'raw':!![]})[_0x35b0('0x37')](function(_0x123fd7){if(_0x123fd7&&_0x123fd7['autoAssociation']===0x0){return db[_0x35b0('0x60')][_0x35b0('0x5b')]({'name':_0x5ef215[_0x35b0('0x3b')],'resourceId':_0x5ef215['id'],'type':_0x123fd7[_0x35b0('0x3b')],'sectionId':_0x123fd7['id']},{})[_0x35b0('0x37')](function(){return _0x57c2f6;});}else{return _0x57c2f6;}})['catch'](function(_0x109338){logger[_0x35b0('0x29')](_0x35b0('0x61'),_0x109338);throw _0x109338;});}return _0x57c2f6;})[_0x35b0('0x37')](respondWithResult(_0x169003,0xc9))[_0x35b0('0x2d')](handleError(_0x169003,null));};exports['update']=function(_0x5e8c35,_0x1c12c9){if(_0x5e8c35[_0x35b0('0x62')]['id']){delete _0x5e8c35[_0x35b0('0x62')]['id'];}return db[_0x35b0('0x3e')]['find']({'where':{'id':_0x5e8c35[_0x35b0('0x63')]['id']}})['then'](handleEntityNotFound(_0x1c12c9,null))[_0x35b0('0x37')](saveUpdates(_0x5e8c35[_0x35b0('0x62')],null))[_0x35b0('0x37')](respondWithResult(_0x1c12c9,null))[_0x35b0('0x2d')](handleError(_0x1c12c9,null));};exports[_0x35b0('0x38')]=function(_0x48c1aa,_0x39b482){return db[_0x35b0('0x3e')][_0x35b0('0x5a')]({'where':{'id':_0x48c1aa['params']['id']}})[_0x35b0('0x37')](handleEntityNotFound(_0x39b482,null))[_0x35b0('0x37')](removeEntity(_0x39b482,null))[_0x35b0('0x2d')](handleError(_0x39b482,null));};exports['describe']=function(_0x2309bc,_0x20c85a){return db[_0x35b0('0x3e')][_0x35b0('0x64')]()['then'](respondWithResult(_0x20c85a,null))['catch'](handleError(_0x20c85a,null));};exports[_0x35b0('0x65')]=function(_0x18c117,_0x2e0ec4,_0x11d812){var _0x37bb6e={'raw':!![],'where':{}},_0x256810={},_0x574811;return db[_0x35b0('0x3e')][_0x35b0('0x66')]({'where':{'id':_0x18c117[_0x35b0('0x63')]['id']}})[_0x35b0('0x37')](handleEntityNotFound(_0x2e0ec4,null))['then'](function(_0x17aa43){if(_0x17aa43){_0x574811=_0x17aa43['get']({'plain':!![]});_0x256810[_0x35b0('0x40')]=_[_0x35b0('0x41')](db[_0x35b0('0x67')]['rawAttributes']);_0x256810[_0x35b0('0x42')]=_[_0x35b0('0x41')](_0x18c117[_0x35b0('0x42')]);_0x256810[_0x35b0('0x4c')]=_[_0x35b0('0x43')](_0x256810[_0x35b0('0x40')],_0x256810[_0x35b0('0x42')]);_0x37bb6e[_0x35b0('0x45')]=_[_0x35b0('0x43')](_0x256810[_0x35b0('0x40')],qs[_0x35b0('0x44')](_0x18c117[_0x35b0('0x42')][_0x35b0('0x44')]));_0x37bb6e[_0x35b0('0x45')]=_0x37bb6e['attributes'][_0x35b0('0x46')]?_0x37bb6e[_0x35b0('0x45')]:_0x256810['model'];if(!_0x18c117[_0x35b0('0x42')]['hasOwnProperty'](_0x35b0('0x68'))){_0x37bb6e[_0x35b0('0x48')]=qs[_0x35b0('0x48')](_0x18c117[_0x35b0('0x42')][_0x35b0('0x48')]);_0x37bb6e[_0x35b0('0x32')]=qs[_0x35b0('0x32')](_0x18c117[_0x35b0('0x42')]['offset']);}_0x37bb6e[_0x35b0('0x49')]=qs['sort'](_0x18c117['query'][_0x35b0('0x4a')]);_0x37bb6e[_0x35b0('0x4b')]=qs['filters'](_[_0x35b0('0x4d')](_0x18c117[_0x35b0('0x42')],_0x256810[_0x35b0('0x4c')]));_0x37bb6e['where'][_0x35b0('0x69')]=_0x17aa43['id'];if(_0x18c117['query'][_0x35b0('0x52')]){_0x37bb6e[_0x35b0('0x4b')]=_[_0x35b0('0x53')](_0x37bb6e[_0x35b0('0x4b')],{'$or':_['map'](_0x37bb6e[_0x35b0('0x45')],function(_0x2de878){var _0x48f3af={};_0x48f3af[_0x2de878]={'$like':'%'+_0x18c117[_0x35b0('0x42')][_0x35b0('0x52')]+'%'};return _0x48f3af;})});}_0x37bb6e=_['merge']({},_0x37bb6e,_0x18c117[_0x35b0('0x54')]);return db['UserChatQueue'][_0x35b0('0x58')](_0x37bb6e);}})[_0x35b0('0x37')](function(_0x101a2f){if(_0x101a2f){return db[_0x35b0('0x6a')][_0x35b0('0x6b')]({'where':{'id':_[_0x35b0('0x4e')](_0x101a2f,'UserId'),'role':_0x35b0('0x6c')},'attributes':['id',_0x35b0('0x3b'),'chatPause',_0x35b0('0x6d'),'createdAt']});}})[_0x35b0('0x37')](function(_0x33339f){if(_0x33339f){return{'count':_0x33339f['count'],'rows':_['map'](_0x33339f[_0x35b0('0x6e')],function(_0xd9dd13){return{'membername':_0xd9dd13[_0x35b0('0x3b')],'UserId':_0xd9dd13['id'],'queue_name':_0x574811[_0x35b0('0x3b')],'ChatQueueId':_0x574811['id'],'interface':util['format'](_0x35b0('0x6f'),_0x35b0('0x70'),_0xd9dd13['name']),'penalty':0x0,'paused':_0xd9dd13[_0x35b0('0x71')],'createdAt':_0xd9dd13[_0x35b0('0x72')],'updatedAt':_0xd9dd13['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0x2e0ec4,_0x37bb6e))[_0x35b0('0x2d')](handleError(_0x2e0ec4,null));};exports[_0x35b0('0x73')]=function(_0x718ca7,_0x4f2489,_0x5193a0){var _0x180301={};var _0xce02d0={};var _0x2bb32e;var _0x5895fb;return db['ChatQueue'][_0x35b0('0x66')]({'where':{'id':_0x718ca7[_0x35b0('0x63')]['id']}})[_0x35b0('0x37')](handleEntityNotFound(_0x4f2489,null))[_0x35b0('0x37')](function(_0x5c83db){if(_0x5c83db){_0x2bb32e=_0x5c83db;_0xce02d0[_0x35b0('0x40')]=_[_0x35b0('0x41')](db[_0x35b0('0x74')][_0x35b0('0x3f')]);_0xce02d0['query']=_[_0x35b0('0x41')](_0x718ca7[_0x35b0('0x42')]);_0xce02d0[_0x35b0('0x4c')]=_[_0x35b0('0x43')](_0xce02d0[_0x35b0('0x40')],_0xce02d0[_0x35b0('0x42')]);_0x180301[_0x35b0('0x45')]=_['intersection'](_0xce02d0['model'],qs[_0x35b0('0x44')](_0x718ca7['query'][_0x35b0('0x44')]));_0x180301[_0x35b0('0x45')]=_0x180301['attributes']['length']?_0x180301['attributes']:_0xce02d0[_0x35b0('0x40')];_0x180301[_0x35b0('0x49')]=qs[_0x35b0('0x4a')](_0x718ca7[_0x35b0('0x42')][_0x35b0('0x4a')]);_0x180301['where']=qs[_0x35b0('0x4c')](_[_0x35b0('0x4d')](_0x718ca7[_0x35b0('0x42')],_0xce02d0[_0x35b0('0x4c')]));if(_0x718ca7[_0x35b0('0x42')][_0x35b0('0x52')]){_0x180301[_0x35b0('0x4b')]=_[_0x35b0('0x53')](_0x180301[_0x35b0('0x4b')],{'$or':_['map'](_0x180301[_0x35b0('0x45')],function(_0x4495c1){var _0x1115c3={};_0x1115c3[_0x4495c1]={'$like':'%'+_0x718ca7[_0x35b0('0x42')][_0x35b0('0x52')]+'%'};return _0x1115c3;})});}_0x180301=_[_0x35b0('0x53')]({},_0x180301,_0x718ca7[_0x35b0('0x54')]);return _0x2bb32e[_0x35b0('0x73')](_0x180301);}})[_0x35b0('0x37')](function(_0x111b30){if(_0x111b30){_0x5895fb=_0x111b30[_0x35b0('0x46')];if(!_0x718ca7[_0x35b0('0x42')][_0x35b0('0x47')]('nolimit')){_0x180301[_0x35b0('0x48')]=qs[_0x35b0('0x48')](_0x718ca7[_0x35b0('0x42')]['limit']);_0x180301[_0x35b0('0x32')]=qs[_0x35b0('0x32')](_0x718ca7[_0x35b0('0x42')][_0x35b0('0x32')]);}return _0x2bb32e[_0x35b0('0x73')](_0x180301);}})[_0x35b0('0x37')](function(_0x1200c1){if(_0x1200c1){return _0x1200c1?{'count':_0x5895fb,'rows':_0x1200c1}:null;}})[_0x35b0('0x37')](respondWithResult(_0x4f2489,null))[_0x35b0('0x2d')](handleError(_0x4f2489,null));};exports[_0x35b0('0x75')]=function(_0x5b06a9,_0x48c5f8,_0x4a6003){var _0xa9b7f3=_0x5b06a9[_0x35b0('0x62')]['teams'];return db[_0x35b0('0x74')]['findAll']({'where':{'id':_[_0x35b0('0x4e')](_0xa9b7f3,'id')},'attributes':['id'],'include':[{'model':db['User'],'as':_0x35b0('0x76'),'attributes':['id',_0x35b0('0x3b'),_0x35b0('0x77'),_0x35b0('0x78'),'interface'],'raw':!![]}]})[_0x35b0('0x37')](function(_0x418daf){if(_0x418daf){var _0x478b94=_[_0x35b0('0x79')](_0x418daf,function(_0x2f277b){var _0x4ed4d6=_0x2f277b[_0x35b0('0x39')]({'plain':!![]});return _0x4ed4d6[_0x35b0('0x76')];});return db[_0x35b0('0x3e')][_0x35b0('0x5a')]({'where':{'id':_0x5b06a9[_0x35b0('0x63')]['id']}})['then'](function(_0x2aec3c){return db[_0x35b0('0x7a')]['transaction'](function(_0x1dd934){return _0x2aec3c[_0x35b0('0x75')](_[_0x35b0('0x4e')](_0xa9b7f3,'id'),{'transaction':_0x1dd934})[_0x35b0('0x37')](function(){return BPromise[_0x35b0('0x7b')](_0x478b94,function(_0x585eed){return db[_0x35b0('0x67')][_0x35b0('0x7c')]({'where':{'UserId':_0x585eed['id'],'ChatQueueId':_0x5b06a9[_0x35b0('0x63')]['id']},'transaction':_0x1dd934});});})[_0x35b0('0x37')](function(){_0x478b94[_0x35b0('0x7d')](function(_0x2c63c7){socket[_0x35b0('0x7e')]('userChatQueue:save',{'UserId':_0x2c63c7['id'],'ChatQueueId':_0x2aec3c['id']});});});});});}})[_0x35b0('0x37')](respondWithStatusCode(_0x48c5f8,null))[_0x35b0('0x2d')](handleError(_0x48c5f8,null));};exports['removeTeams']=function(_0x31f6e7,_0x2debb3,_0x31be66){return db[_0x35b0('0x74')][_0x35b0('0x58')]({'where':{'id':_0x31f6e7[_0x35b0('0x42')][_0x35b0('0x7f')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0x35b0('0x76'),'attributes':['id'],'raw':!![]}]})['then'](handleEntityNotFound(_0x2debb3,null))['then'](function(_0x31f84e){var _0x352fb4=_[_0x35b0('0x4e')](_0x31f84e,'id');var _0xca23e3=[];var _0x22ade2=[];var _0x36f33b=squel[_0x35b0('0x80')]();_0x36f33b['field']('tq.TeamId')['from']('team_has_chat_queues','tq')[_0x35b0('0x81')]('user_has_teams','ut',_0x35b0('0x82'))[_0x35b0('0x4b')](_0x35b0('0x83'),_0x31f6e7[_0x35b0('0x63')]['id']);for(var _0x2dd6d9=0x0;_0x2dd6d9<_0x31f84e[_0x35b0('0x46')];_0x2dd6d9+=0x1){let _0x29def6=_0x31f84e[_0x2dd6d9];for(var _0x360a37=0x0;_0x360a37<_0x29def6[_0x35b0('0x76')]['length'];_0x360a37+=0x1){let _0x304052=_0x29def6['Agents'][_0x360a37];var _0xf8e04c=_0x36f33b[_0x35b0('0x84')]();_0xf8e04c[_0x35b0('0x4b')](_0x35b0('0x85'),_0x304052['id']);_0x22ade2[_0x35b0('0x86')](db[_0x35b0('0x7a')][_0x35b0('0x42')](_0xf8e04c[_0x35b0('0x87')](),{'type':db[_0x35b0('0x7a')][_0x35b0('0x88')]['SELECT']})[_0x35b0('0x37')](function(_0x3681ca){if(_0x3681ca[_0x35b0('0x46')]===0x1){return _0x304052['id'];}else{var _0xa4596a=_['every'](_[_0x35b0('0x4e')](_0x3681ca,_0x35b0('0x89')),function(_0x497f73){return _[_0x35b0('0x8a')](_0x352fb4,_0x497f73);});if(_0xa4596a){return _0x304052['id'];}}}));}}return BPromise[_0x35b0('0x8b')](_0x22ade2)[_0x35b0('0x37')](function(_0x9feb87){_0xca23e3=_(_0xca23e3)['union'](_0x9feb87)[_0x35b0('0x8c')]()['value']();return db[_0x35b0('0x3e')]['find']({'where':{'id':_0x31f6e7[_0x35b0('0x63')]['id']}})[_0x35b0('0x37')](function(_0x48c181){return db[_0x35b0('0x7a')][_0x35b0('0x8d')](function(_0x5440b5){return _0x48c181['removeTeams'](_0x31f6e7['query']['ids'],{'transaction':_0x5440b5})[_0x35b0('0x37')](function(){if(!_[_0x35b0('0x8e')](_0xca23e3)){return _0x48c181[_0x35b0('0x8f')](_0xca23e3,{'transaction':_0x5440b5});}})[_0x35b0('0x37')](function(){_0xca23e3['forEach'](function(_0x122c52){socket['emit'](_0x35b0('0x90'),{'UserId':_0x122c52,'ChatQueueId':_0x48c181['id']});});});});});});})[_0x35b0('0x37')](respondWithStatusCode(_0x2debb3,null))[_0x35b0('0x2d')](handleError(_0x2debb3,null));};exports[_0x35b0('0x91')]=function(_0x3bcaa9,_0x5a5885,_0x38671a){return db[_0x35b0('0x3e')]['find']({'where':{'id':_0x3bcaa9[_0x35b0('0x63')]['id']}})[_0x35b0('0x37')](handleEntityNotFound(_0x5a5885,null))['then'](function(_0x59770c){if(_0x59770c){return _0x59770c[_0x35b0('0x91')](_0x3bcaa9['body'][_0x35b0('0x7f')],_[_0x35b0('0x92')](_0x3bcaa9['body'],[_0x35b0('0x7f'),'id'])||{})[_0x35b0('0x93')](function(_0x333ad9){for(var _0x48fb34=0x0;_0x48fb34<_0x3bcaa9['body'][_0x35b0('0x7f')][_0x35b0('0x46')];_0x48fb34+=0x1){socket[_0x35b0('0x7e')](_0x35b0('0x94'),{'UserId':_0x3bcaa9[_0x35b0('0x62')][_0x35b0('0x7f')][_0x48fb34],'ChatQueueId':_0x3bcaa9[_0x35b0('0x63')]['id']});}return _0x333ad9;});}})['then'](respondWithResult(_0x5a5885,null))[_0x35b0('0x2d')](handleError(_0x5a5885,null));};exports['removeAgents']=function(_0x13db4c,_0x6b3d39,_0x5cddb9){return db[_0x35b0('0x3e')][_0x35b0('0x5a')]({'where':{'id':_0x13db4c[_0x35b0('0x63')]['id']}})[_0x35b0('0x37')](handleEntityNotFound(_0x6b3d39,null))[_0x35b0('0x37')](function(_0x1b72e8){if(_0x1b72e8){return _0x1b72e8[_0x35b0('0x8f')](_0x13db4c[_0x35b0('0x42')][_0x35b0('0x7f')])[_0x35b0('0x37')](function(){if(_['isArray'](_0x13db4c['query'][_0x35b0('0x7f')])){for(var _0x5125e1=0x0;_0x5125e1<_0x13db4c['query'][_0x35b0('0x7f')][_0x35b0('0x46')];_0x5125e1+=0x1){socket['emit'](_0x35b0('0x90'),{'UserId':Number(_0x13db4c[_0x35b0('0x42')][_0x35b0('0x7f')][_0x5125e1]),'ChatQueueId':Number(_0x13db4c[_0x35b0('0x63')]['id'])});}}else{socket[_0x35b0('0x7e')](_0x35b0('0x90'),{'UserId':Number(_0x13db4c['query'][_0x35b0('0x7f')]),'ChatQueueId':Number(_0x13db4c[_0x35b0('0x63')]['id'])});}});}})[_0x35b0('0x37')](respondWithStatusCode(_0x6b3d39,null))[_0x35b0('0x2d')](handleError(_0x6b3d39,null));};exports[_0x35b0('0x95')]=function(_0x3d1c1c,_0x4107f5,_0x3699cc){var _0x36599a={};var _0x48df83={};var _0x4f7f61;var _0x156c46;return db['ChatQueue'][_0x35b0('0x66')]({'where':{'id':_0x3d1c1c['params']['id']}})[_0x35b0('0x37')](handleEntityNotFound(_0x4107f5,null))[_0x35b0('0x37')](function(_0x4036f3){if(_0x4036f3){_0x4f7f61=_0x4036f3;_0x48df83[_0x35b0('0x40')]=_[_0x35b0('0x41')](db[_0x35b0('0x6a')][_0x35b0('0x3f')]);_0x48df83[_0x35b0('0x42')]=_[_0x35b0('0x41')](_0x3d1c1c[_0x35b0('0x42')]);_0x48df83[_0x35b0('0x4c')]=_[_0x35b0('0x43')](_0x48df83[_0x35b0('0x40')],_0x48df83[_0x35b0('0x42')]);_0x36599a[_0x35b0('0x45')]=_[_0x35b0('0x43')](_0x48df83[_0x35b0('0x40')],qs[_0x35b0('0x44')](_0x3d1c1c['query']['fields']));_0x36599a[_0x35b0('0x45')]=_0x36599a[_0x35b0('0x45')]['length']?_0x36599a[_0x35b0('0x45')]:_0x48df83[_0x35b0('0x40')];_0x36599a[_0x35b0('0x49')]=qs[_0x35b0('0x4a')](_0x3d1c1c[_0x35b0('0x42')][_0x35b0('0x4a')]);_0x36599a[_0x35b0('0x4b')]=qs[_0x35b0('0x4c')](_[_0x35b0('0x4d')](_0x3d1c1c[_0x35b0('0x42')],_0x48df83[_0x35b0('0x4c')]));if(_0x3d1c1c['query']['filter']){_0x36599a[_0x35b0('0x4b')]=_[_0x35b0('0x53')](_0x36599a[_0x35b0('0x4b')],{'$or':_[_0x35b0('0x4e')](_0x36599a[_0x35b0('0x45')],function(_0x48b96e){var _0xd51dea={};_0xd51dea[_0x48b96e]={'$like':'%'+_0x3d1c1c[_0x35b0('0x42')][_0x35b0('0x52')]+'%'};return _0xd51dea;})});}_0x36599a=_[_0x35b0('0x53')]({},_0x36599a,_0x3d1c1c[_0x35b0('0x54')]);return _0x4f7f61[_0x35b0('0x95')](_0x36599a);}})['then'](function(_0x21dbba){if(_0x21dbba){_0x156c46=_0x21dbba[_0x35b0('0x46')];if(!_0x3d1c1c[_0x35b0('0x42')][_0x35b0('0x47')](_0x35b0('0x68'))){_0x36599a[_0x35b0('0x48')]=qs[_0x35b0('0x48')](_0x3d1c1c[_0x35b0('0x42')][_0x35b0('0x48')]);_0x36599a['offset']=qs[_0x35b0('0x32')](_0x3d1c1c[_0x35b0('0x42')][_0x35b0('0x32')]);}return _0x4f7f61[_0x35b0('0x95')](_0x36599a);}})[_0x35b0('0x37')](function(_0x2a67f5){if(_0x2a67f5){return _0x2a67f5?{'count':_0x156c46,'rows':_0x2a67f5}:null;}})[_0x35b0('0x37')](respondWithResult(_0x4107f5,null))['catch'](handleError(_0x4107f5,null));};
\ No newline at end of file
index a7b8bdc..7aebca4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdd6e=['emit','hasOwnProperty','exports','events','../../mysqldb','ChatQueue','setMaxListeners','update','remove'];(function(_0x501d24,_0x33face){var _0x43624d=function(_0x2ac76e){while(--_0x2ac76e){_0x501d24['push'](_0x501d24['shift']());}};_0x43624d(++_0x33face);}(_0xdd6e,0xa5));var _0xedd6=function(_0x4a3a58,_0x53484e){_0x4a3a58=_0x4a3a58-0x0;var _0x4062e3=_0xdd6e[_0x4a3a58];return _0x4062e3;};'use strict';var EventEmitter=require(_0xedd6('0x0'));var ChatQueue=require(_0xedd6('0x1'))['db'][_0xedd6('0x2')];var ChatQueueEvents=new EventEmitter();ChatQueueEvents[_0xedd6('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0xedd6('0x4'),'afterDestroy':_0xedd6('0x5')};function emitEvent(_0x2243ce){return function(_0x2620a1,_0x5aefb8,_0x4fcb28){ChatQueueEvents['emit'](_0x2243ce+':'+_0x2620a1['id'],_0x2620a1);ChatQueueEvents[_0xedd6('0x6')](_0x2243ce,_0x2620a1);_0x4fcb28(null);};}for(var e in events){if(events[_0xedd6('0x7')](e)){var event=events[e];ChatQueue['hook'](e,emitEvent(event));}}module[_0xedd6('0x8')]=ChatQueueEvents;
\ No newline at end of file
+var _0x13f6=['save','update','remove','emit','hasOwnProperty','events','../../mysqldb'];(function(_0x2beb8c,_0x506e35){var _0x5bfac1=function(_0x18a047){while(--_0x18a047){_0x2beb8c['push'](_0x2beb8c['shift']());}};_0x5bfac1(++_0x506e35);}(_0x13f6,0x124));var _0x613f=function(_0x450958,_0x2c6887){_0x450958=_0x450958-0x0;var _0x1a974f=_0x13f6[_0x450958];return _0x1a974f;};'use strict';var EventEmitter=require(_0x613f('0x0'));var ChatQueue=require(_0x613f('0x1'))['db']['ChatQueue'];var ChatQueueEvents=new EventEmitter();ChatQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x613f('0x2'),'afterUpdate':_0x613f('0x3'),'afterDestroy':_0x613f('0x4')};function emitEvent(_0x5414ff){return function(_0x179f6e,_0x1e01e3,_0x20af2f){ChatQueueEvents['emit'](_0x5414ff+':'+_0x179f6e['id'],_0x179f6e);ChatQueueEvents[_0x613f('0x5')](_0x5414ff,_0x179f6e);_0x20af2f(null);};}for(var e in events){if(events[_0x613f('0x6')](e)){var event=events[e];ChatQueue['hook'](e,emitEvent(event));}}module['exports']=ChatQueueEvents;
\ No newline at end of file
index 3593454..b4b347c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2d93=['../../config/environment','./chatQueue.attributes','exports','ChatQueue','chat_queues','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf'];(function(_0x29baa5,_0x26e470){var _0x3fc908=function(_0x283369){while(--_0x283369){_0x29baa5['push'](_0x29baa5['shift']());}};_0x3fc908(++_0x26e470);}(_0x2d93,0xf3));var _0x32d9=function(_0x577519,_0x346daf){_0x577519=_0x577519-0x0;var _0x5b12f7=_0x2d93[_0x577519];return _0x5b12f7;};'use strict';var _=require(_0x32d9('0x0'));var util=require(_0x32d9('0x1'));var logger=require(_0x32d9('0x2'))(_0x32d9('0x3'));var moment=require(_0x32d9('0x4'));var BPromise=require(_0x32d9('0x5'));var rp=require(_0x32d9('0x6'));var fs=require('fs');var path=require(_0x32d9('0x7'));var rimraf=require(_0x32d9('0x8'));var config=require(_0x32d9('0x9'));var attributes=require(_0x32d9('0xa'));module[_0x32d9('0xb')]=function(_0x9b4979,_0x3529db){return _0x9b4979['define'](_0x32d9('0xc'),attributes,{'tableName':_0x32d9('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x9354=['../../config/environment','./chatQueue.attributes','exports','define','ChatQueue','chat_queues','util','../../config/logger','moment','bluebird','request-promise','path'];(function(_0x8a30cf,_0x40f19b){var _0x20f439=function(_0x157a5d){while(--_0x157a5d){_0x8a30cf['push'](_0x8a30cf['shift']());}};_0x20f439(++_0x40f19b);}(_0x9354,0x96));var _0x4935=function(_0x365e54,_0x44be74){_0x365e54=_0x365e54-0x0;var _0x13317a=_0x9354[_0x365e54];return _0x13317a;};'use strict';var _=require('lodash');var util=require(_0x4935('0x0'));var logger=require(_0x4935('0x1'))('api');var moment=require(_0x4935('0x2'));var BPromise=require(_0x4935('0x3'));var rp=require(_0x4935('0x4'));var fs=require('fs');var path=require(_0x4935('0x5'));var rimraf=require('rimraf');var config=require(_0x4935('0x6'));var attributes=require(_0x4935('0x7'));module[_0x4935('0x8')]=function(_0x2d518a,_0x263864){return _0x2d518a[_0x4935('0x9')](_0x4935('0xa'),attributes,{'tableName':_0x4935('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a18faae..7c306ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf5a3=['catch','GetChatQueue','options','raw','attributes','limit','map','include','model','ShowChatQueue','ChatQueue','find','where','lodash','util','moment','bluebird','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','client','http','defaults','redis','socket.io-emitter','./chatQueue.socket','register','request','then','ChatQueue,\x20%s,\x20%s','request\x20sent','debug','ChatQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info'];(function(_0x4c2e29,_0x4177be){var _0x11ab0f=function(_0x52dd8a){while(--_0x52dd8a){_0x4c2e29['push'](_0x4c2e29['shift']());}};_0x11ab0f(++_0x4177be);}(_0xf5a3,0x16c));var _0x3f5a=function(_0x49b207,_0x408ade){_0x49b207=_0x49b207-0x0;var _0x2dc8fa=_0xf5a3[_0x49b207];return _0x2dc8fa;};'use strict';var _=require(_0x3f5a('0x0'));var util=require(_0x3f5a('0x1'));var moment=require(_0x3f5a('0x2'));var BPromise=require(_0x3f5a('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x3f5a('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x3f5a('0x5'))('rpc');var config=require(_0x3f5a('0x6'));var jayson=require(_0x3f5a('0x7'));var client=jayson[_0x3f5a('0x8')][_0x3f5a('0x9')]({'port':0x232a});config['redis']=_[_0x3f5a('0xa')](config[_0x3f5a('0xb')],{'host':'localhost','port':0x18eb});var socket=require(_0x3f5a('0xc'))(new Redis(config[_0x3f5a('0xb')]));require(_0x3f5a('0xd'))[_0x3f5a('0xe')](socket);function respondWithRpcPromise(_0x457639,_0x2fc555,_0x593e71){return new BPromise(function(_0x3a8ab4,_0x50979d){return client[_0x3f5a('0xf')](_0x457639,_0x593e71)[_0x3f5a('0x10')](function(_0x256659){logger['info'](_0x3f5a('0x11'),_0x2fc555,_0x3f5a('0x12'));logger[_0x3f5a('0x13')](_0x3f5a('0x14'),_0x2fc555,'request\x20sent',JSON[_0x3f5a('0x15')](_0x256659));if(_0x256659[_0x3f5a('0x16')]){if(_0x256659[_0x3f5a('0x16')][_0x3f5a('0x17')]===0x1f4){logger[_0x3f5a('0x16')]('ChatQueue,\x20%s,\x20%s',_0x2fc555,_0x256659[_0x3f5a('0x16')][_0x3f5a('0x18')]);return _0x50979d(_0x256659[_0x3f5a('0x16')][_0x3f5a('0x18')]);}logger[_0x3f5a('0x16')](_0x3f5a('0x11'),_0x2fc555,_0x256659[_0x3f5a('0x16')][_0x3f5a('0x18')]);return _0x3a8ab4(_0x256659['error']['message']);}else{logger[_0x3f5a('0x19')](_0x3f5a('0x11'),_0x2fc555,_0x3f5a('0x12'));_0x3a8ab4(_0x256659['result']['message']);}})[_0x3f5a('0x1a')](function(_0xcb2aa9){logger[_0x3f5a('0x16')]('ChatQueue,\x20%s,\x20%s',_0x2fc555,_0xcb2aa9);_0x50979d(_0xcb2aa9);});});}exports[_0x3f5a('0x1b')]=function(_0x3d799b){var _0x51cf55=this;return new Promise(function(_0x3ad3a8,_0x3cc3a8){return db['ChatQueue']['findAll']({'raw':_0x3d799b[_0x3f5a('0x1c')]?_0x3d799b[_0x3f5a('0x1c')][_0x3f5a('0x1d')]===undefined?!![]:![]:!![],'where':_0x3d799b[_0x3f5a('0x1c')]?_0x3d799b[_0x3f5a('0x1c')]['where']||null:null,'attributes':_0x3d799b[_0x3f5a('0x1c')]?_0x3d799b[_0x3f5a('0x1c')][_0x3f5a('0x1e')]||null:null,'limit':_0x3d799b['options']?_0x3d799b[_0x3f5a('0x1c')][_0x3f5a('0x1f')]||null:null,'include':_0x3d799b[_0x3f5a('0x1c')]?_0x3d799b[_0x3f5a('0x1c')]['include']?_[_0x3f5a('0x20')](_0x3d799b[_0x3f5a('0x1c')]['include'],function(_0x2f2d8f){return{'model':db[_0x2f2d8f['model']],'as':_0x2f2d8f['as'],'attributes':_0x2f2d8f[_0x3f5a('0x1e')],'include':_0x2f2d8f['include']?_['map'](_0x2f2d8f[_0x3f5a('0x21')],function(_0x1c3f4f){return{'model':db[_0x1c3f4f['model']],'as':_0x1c3f4f['as'],'attributes':_0x1c3f4f[_0x3f5a('0x1e')],'include':_0x1c3f4f[_0x3f5a('0x21')]?_['map'](_0x1c3f4f['include'],function(_0x49b2bf){return{'model':db[_0x49b2bf[_0x3f5a('0x22')]],'as':_0x49b2bf['as'],'attributes':_0x49b2bf[_0x3f5a('0x1e')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x348757){logger['info'](_0x3f5a('0x1b'),_0x3d799b);logger[_0x3f5a('0x13')](_0x3f5a('0x1b'),_0x3d799b,JSON[_0x3f5a('0x15')](_0x348757));_0x3ad3a8(_0x348757);})[_0x3f5a('0x1a')](function(_0x1b5c64){logger['error']('GetChatQueue',_0x1b5c64[_0x3f5a('0x18')],_0x3d799b);_0x3cc3a8(_0x51cf55['error'](0x1f4,_0x1b5c64[_0x3f5a('0x18')]));});});};exports[_0x3f5a('0x23')]=function(_0x58ba67){var _0x18b31e=this;return new Promise(function(_0x4f3389,_0x46111f){return db[_0x3f5a('0x24')][_0x3f5a('0x25')]({'raw':_0x58ba67[_0x3f5a('0x1c')]?_0x58ba67[_0x3f5a('0x1c')][_0x3f5a('0x1d')]===undefined?!![]:![]:!![],'where':_0x58ba67[_0x3f5a('0x1c')]?_0x58ba67[_0x3f5a('0x1c')][_0x3f5a('0x26')]||null:null,'attributes':_0x58ba67[_0x3f5a('0x1c')]?_0x58ba67['options']['attributes']||null:null,'include':_0x58ba67[_0x3f5a('0x1c')]?_0x58ba67[_0x3f5a('0x1c')][_0x3f5a('0x21')]?_['map'](_0x58ba67['options'][_0x3f5a('0x21')],function(_0x27fd1c){return{'model':db[_0x27fd1c['model']],'as':_0x27fd1c['as'],'attributes':_0x27fd1c[_0x3f5a('0x1e')],'include':_0x27fd1c['include']?_[_0x3f5a('0x20')](_0x27fd1c[_0x3f5a('0x21')],function(_0x82027b){return{'model':db[_0x82027b[_0x3f5a('0x22')]],'as':_0x82027b['as'],'attributes':_0x82027b[_0x3f5a('0x1e')],'include':_0x82027b[_0x3f5a('0x21')]?_[_0x3f5a('0x20')](_0x82027b['include'],function(_0x23cd7e){return{'model':db[_0x23cd7e[_0x3f5a('0x22')]],'as':_0x23cd7e['as'],'attributes':_0x23cd7e['attributes']};}):[]};}):[]};}):[]:[]})[_0x3f5a('0x10')](function(_0x9160){logger['info'](_0x3f5a('0x23'),_0x58ba67);logger[_0x3f5a('0x13')](_0x3f5a('0x23'),_0x58ba67,JSON['stringify'](_0x9160));_0x4f3389(_0x9160);})[_0x3f5a('0x1a')](function(_0x47dd81){logger['error'](_0x3f5a('0x23'),_0x47dd81[_0x3f5a('0x18')],_0x58ba67);_0x46111f(_0x18b31e[_0x3f5a('0x16')](0x1f4,_0x47dd81[_0x3f5a('0x18')]));});});};
\ No newline at end of file
+var _0x15d6=['error','code','message','result','catch','GetChatQueue','options','where','attributes','include','map','model','then','ShowChatQueue','ChatQueue','find','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','redis','defaults','./chatQueue.socket','register','info','ChatQueue,\x20%s,\x20%s','request\x20sent','debug','ChatQueue,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x2460a2,_0x42ab98){var _0x325b59=function(_0x32b336){while(--_0x32b336){_0x2460a2['push'](_0x2460a2['shift']());}};_0x325b59(++_0x42ab98);}(_0x15d6,0xf4));var _0x615d=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x15d6[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x615d('0x0'));var util=require(_0x615d('0x1'));var moment=require('moment');var BPromise=require(_0x615d('0x2'));var rs=require(_0x615d('0x3'));var fs=require('fs');var Redis=require(_0x615d('0x4'));var db=require(_0x615d('0x5'))['db'];var utils=require(_0x615d('0x6'));var logger=require(_0x615d('0x7'))(_0x615d('0x8'));var config=require(_0x615d('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x615d('0xa')][_0x615d('0xb')]({'port':0x232a});config[_0x615d('0xc')]=_[_0x615d('0xd')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x615d('0xc')]));require(_0x615d('0xe'))[_0x615d('0xf')](socket);function respondWithRpcPromise(_0x4ea442,_0x52434e,_0x137c20){return new BPromise(function(_0x3bb866,_0x2926ef){return client['request'](_0x4ea442,_0x137c20)['then'](function(_0x4bdcf2){logger[_0x615d('0x10')](_0x615d('0x11'),_0x52434e,_0x615d('0x12'));logger[_0x615d('0x13')](_0x615d('0x14'),_0x52434e,_0x615d('0x12'),JSON[_0x615d('0x15')](_0x4bdcf2));if(_0x4bdcf2[_0x615d('0x16')]){if(_0x4bdcf2[_0x615d('0x16')][_0x615d('0x17')]===0x1f4){logger['error']('ChatQueue,\x20%s,\x20%s',_0x52434e,_0x4bdcf2[_0x615d('0x16')][_0x615d('0x18')]);return _0x2926ef(_0x4bdcf2[_0x615d('0x16')][_0x615d('0x18')]);}logger[_0x615d('0x16')]('ChatQueue,\x20%s,\x20%s',_0x52434e,_0x4bdcf2[_0x615d('0x16')][_0x615d('0x18')]);return _0x3bb866(_0x4bdcf2[_0x615d('0x16')][_0x615d('0x18')]);}else{logger[_0x615d('0x10')](_0x615d('0x11'),_0x52434e,'request\x20sent');_0x3bb866(_0x4bdcf2[_0x615d('0x19')][_0x615d('0x18')]);}})[_0x615d('0x1a')](function(_0x138d91){logger[_0x615d('0x16')]('ChatQueue,\x20%s,\x20%s',_0x52434e,_0x138d91);_0x2926ef(_0x138d91);});});}exports[_0x615d('0x1b')]=function(_0x5bb828){var _0x37da94=this;return new Promise(function(_0x19416c,_0x3649c3){return db['ChatQueue']['findAll']({'raw':_0x5bb828['options']?_0x5bb828[_0x615d('0x1c')]['raw']===undefined?!![]:![]:!![],'where':_0x5bb828['options']?_0x5bb828['options'][_0x615d('0x1d')]||null:null,'attributes':_0x5bb828[_0x615d('0x1c')]?_0x5bb828['options'][_0x615d('0x1e')]||null:null,'limit':_0x5bb828[_0x615d('0x1c')]?_0x5bb828[_0x615d('0x1c')]['limit']||null:null,'include':_0x5bb828['options']?_0x5bb828[_0x615d('0x1c')][_0x615d('0x1f')]?_[_0x615d('0x20')](_0x5bb828[_0x615d('0x1c')][_0x615d('0x1f')],function(_0x1bf20c){return{'model':db[_0x1bf20c['model']],'as':_0x1bf20c['as'],'attributes':_0x1bf20c[_0x615d('0x1e')],'include':_0x1bf20c[_0x615d('0x1f')]?_['map'](_0x1bf20c[_0x615d('0x1f')],function(_0x26e5fb){return{'model':db[_0x26e5fb['model']],'as':_0x26e5fb['as'],'attributes':_0x26e5fb[_0x615d('0x1e')],'include':_0x26e5fb['include']?_[_0x615d('0x20')](_0x26e5fb[_0x615d('0x1f')],function(_0x46bf41){return{'model':db[_0x46bf41[_0x615d('0x21')]],'as':_0x46bf41['as'],'attributes':_0x46bf41[_0x615d('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x615d('0x22')](function(_0x318607){logger[_0x615d('0x10')](_0x615d('0x1b'),_0x5bb828);logger[_0x615d('0x13')](_0x615d('0x1b'),_0x5bb828,JSON[_0x615d('0x15')](_0x318607));_0x19416c(_0x318607);})[_0x615d('0x1a')](function(_0x34ee40){logger[_0x615d('0x16')]('GetChatQueue',_0x34ee40[_0x615d('0x18')],_0x5bb828);_0x3649c3(_0x37da94[_0x615d('0x16')](0x1f4,_0x34ee40[_0x615d('0x18')]));});});};exports[_0x615d('0x23')]=function(_0x1565c7){var _0x274692=this;return new Promise(function(_0x2e8a2f,_0x57844c){return db[_0x615d('0x24')][_0x615d('0x25')]({'raw':_0x1565c7['options']?_0x1565c7[_0x615d('0x1c')]['raw']===undefined?!![]:![]:!![],'where':_0x1565c7[_0x615d('0x1c')]?_0x1565c7['options'][_0x615d('0x1d')]||null:null,'attributes':_0x1565c7[_0x615d('0x1c')]?_0x1565c7[_0x615d('0x1c')][_0x615d('0x1e')]||null:null,'include':_0x1565c7[_0x615d('0x1c')]?_0x1565c7['options'][_0x615d('0x1f')]?_['map'](_0x1565c7[_0x615d('0x1c')][_0x615d('0x1f')],function(_0x478ed4){return{'model':db[_0x478ed4['model']],'as':_0x478ed4['as'],'attributes':_0x478ed4[_0x615d('0x1e')],'include':_0x478ed4['include']?_[_0x615d('0x20')](_0x478ed4['include'],function(_0x542516){return{'model':db[_0x542516['model']],'as':_0x542516['as'],'attributes':_0x542516[_0x615d('0x1e')],'include':_0x542516[_0x615d('0x1f')]?_[_0x615d('0x20')](_0x542516['include'],function(_0x2d14a3){return{'model':db[_0x2d14a3[_0x615d('0x21')]],'as':_0x2d14a3['as'],'attributes':_0x2d14a3[_0x615d('0x1e')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x2bb4dd){logger['info'](_0x615d('0x23'),_0x1565c7);logger[_0x615d('0x13')](_0x615d('0x23'),_0x1565c7,JSON[_0x615d('0x15')](_0x2bb4dd));_0x2e8a2f(_0x2bb4dd);})[_0x615d('0x1a')](function(_0x176dd8){logger[_0x615d('0x16')](_0x615d('0x23'),_0x176dd8[_0x615d('0x18')],_0x1565c7);_0x57844c(_0x274692[_0x615d('0x16')](0x1f4,_0x176dd8[_0x615d('0x18')]));});});};
\ No newline at end of file
index f4c3045..68d0dd5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['register','length','chatQueue:','./chatQueue.events','save','remove','emit','removeListener'];(function(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0xa9e0,0x123));var _0x0a9e=function(_0xae7c2f,_0xf31e04){_0xae7c2f=_0xae7c2f-0x0;var _0x5d7001=_0xa9e0[_0xae7c2f];return _0x5d7001;};'use strict';var ChatQueueEvents=require(_0x0a9e('0x0'));var events=[_0x0a9e('0x1'),_0x0a9e('0x2'),'update'];function createListener(_0x550fbc,_0x18d5c9){return function(_0x4ce2f1){_0x18d5c9[_0x0a9e('0x3')](_0x550fbc,_0x4ce2f1);};}function removeListener(_0x432180,_0x2ab90b){return function(){ChatQueueEvents[_0x0a9e('0x4')](_0x432180,_0x2ab90b);};}exports[_0x0a9e('0x5')]=function(_0x57b080){for(var _0x219af0=0x0,_0x441e3a=events[_0x0a9e('0x6')];_0x219af0<_0x441e3a;_0x219af0++){var _0x5f41ea=events[_0x219af0];var _0x503809=createListener(_0x0a9e('0x7')+_0x5f41ea,_0x57b080);ChatQueueEvents['on'](_0x5f41ea,_0x503809);}};
\ No newline at end of file
+var _0xa9e0=['register','length','chatQueue:','./chatQueue.events','save','remove','emit','removeListener'];(function(_0x40a045,_0x516f0e){var _0x1a687c=function(_0x48c9fe){while(--_0x48c9fe){_0x40a045['push'](_0x40a045['shift']());}};_0x1a687c(++_0x516f0e);}(_0xa9e0,0x123));var _0x0a9e=function(_0x1ac595,_0x5d2081){_0x1ac595=_0x1ac595-0x0;var _0x455fff=_0xa9e0[_0x1ac595];return _0x455fff;};'use strict';var ChatQueueEvents=require(_0x0a9e('0x0'));var events=[_0x0a9e('0x1'),_0x0a9e('0x2'),'update'];function createListener(_0x550fbc,_0x18d5c9){return function(_0x4ce2f1){_0x18d5c9[_0x0a9e('0x3')](_0x550fbc,_0x4ce2f1);};}function removeListener(_0x432180,_0x2ab90b){return function(){ChatQueueEvents[_0x0a9e('0x4')](_0x432180,_0x2ab90b);};}exports[_0x0a9e('0x5')]=function(_0x57b080){for(var _0x219af0=0x0,_0x441e3a=events[_0x0a9e('0x6')];_0x219af0<_0x441e3a;_0x219af0++){var _0x5f41ea=events[_0x219af0];var _0x503809=createListener(_0x0a9e('0x7')+_0x5f41ea,_0x57b080);ChatQueueEvents['on'](_0x5f41ea,_0x503809);}};
\ No newline at end of file
index f3569ec..aad775b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6f57=['describe','/:id','show','/:id/members','getMembers','/:id/teams','getTeams','/:id/users','getAgents','post','create','addTeams','addAgents','update','delete','destroy','removeTeams','exports','multer','util','connect-timeout','express','../../components/interaction/service','../../config/environment','./chatQueue.controller','get','index','/describe','isAuthenticated'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x6f57,0xfa));var _0x76f5=function(_0x57b3df,_0x445081){_0x57b3df=_0x57b3df-0x0;var _0x206656=_0x6f57[_0x57b3df];return _0x206656;};'use strict';var multer=require(_0x76f5('0x0'));var util=require(_0x76f5('0x1'));var path=require('path');var timeout=require(_0x76f5('0x2'));var express=require(_0x76f5('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x76f5('0x4'));var config=require(_0x76f5('0x5'));var controller=require(_0x76f5('0x6'));router[_0x76f5('0x7')]('/',auth['isAuthenticated'](),controller[_0x76f5('0x8')]);router[_0x76f5('0x7')](_0x76f5('0x9'),auth[_0x76f5('0xa')](),controller[_0x76f5('0xb')]);router[_0x76f5('0x7')](_0x76f5('0xc'),auth[_0x76f5('0xa')](),controller[_0x76f5('0xd')]);router[_0x76f5('0x7')](_0x76f5('0xe'),auth[_0x76f5('0xa')](),controller[_0x76f5('0xf')]);router[_0x76f5('0x7')](_0x76f5('0x10'),auth[_0x76f5('0xa')](),controller[_0x76f5('0x11')]);router[_0x76f5('0x7')](_0x76f5('0x12'),auth[_0x76f5('0xa')](),controller[_0x76f5('0x13')]);router[_0x76f5('0x14')]('/',auth[_0x76f5('0xa')](),controller[_0x76f5('0x15')]);router['post'](_0x76f5('0x10'),auth[_0x76f5('0xa')](),controller[_0x76f5('0x16')]);router['post']('/:id/users',auth[_0x76f5('0xa')](),controller[_0x76f5('0x17')]);router['put'](_0x76f5('0xc'),auth[_0x76f5('0xa')](),controller[_0x76f5('0x18')]);router[_0x76f5('0x19')]('/:id',auth[_0x76f5('0xa')](),controller[_0x76f5('0x1a')]);router['delete'](_0x76f5('0x10'),auth['isAuthenticated'](),controller[_0x76f5('0x1b')]);router[_0x76f5('0x19')](_0x76f5('0x12'),auth['isAuthenticated'](),controller['removeAgents']);module[_0x76f5('0x1c')]=router;
\ No newline at end of file
+var _0x90fb=['Router','../../components/interaction/service','../../config/environment','./chatQueue.controller','get','isAuthenticated','index','describe','/:id','/:id/members','getMembers','/:id/teams','/:id/users','post','addTeams','delete','destroy','removeTeams','removeAgents','exports','multer','util','connect-timeout','express'];(function(_0x3f9631,_0x51ffcb){var _0x242d84=function(_0xfcd4f7){while(--_0xfcd4f7){_0x3f9631['push'](_0x3f9631['shift']());}};_0x242d84(++_0x51ffcb);}(_0x90fb,0x17c));var _0xb90f=function(_0x185133,_0x29a472){_0x185133=_0x185133-0x0;var _0x862f7f=_0x90fb[_0x185133];return _0x862f7f;};'use strict';var multer=require(_0xb90f('0x0'));var util=require(_0xb90f('0x1'));var path=require('path');var timeout=require(_0xb90f('0x2'));var express=require(_0xb90f('0x3'));var router=express[_0xb90f('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xb90f('0x5'));var config=require(_0xb90f('0x6'));var controller=require(_0xb90f('0x7'));router[_0xb90f('0x8')]('/',auth[_0xb90f('0x9')](),controller[_0xb90f('0xa')]);router[_0xb90f('0x8')]('/describe',auth[_0xb90f('0x9')](),controller[_0xb90f('0xb')]);router[_0xb90f('0x8')](_0xb90f('0xc'),auth[_0xb90f('0x9')](),controller['show']);router[_0xb90f('0x8')](_0xb90f('0xd'),auth[_0xb90f('0x9')](),controller[_0xb90f('0xe')]);router[_0xb90f('0x8')](_0xb90f('0xf'),auth['isAuthenticated'](),controller['getTeams']);router['get'](_0xb90f('0x10'),auth[_0xb90f('0x9')](),controller['getAgents']);router[_0xb90f('0x11')]('/',auth[_0xb90f('0x9')](),controller['create']);router[_0xb90f('0x11')]('/:id/teams',auth['isAuthenticated'](),controller[_0xb90f('0x12')]);router[_0xb90f('0x11')](_0xb90f('0x10'),auth[_0xb90f('0x9')](),controller['addAgents']);router['put'](_0xb90f('0xc'),auth[_0xb90f('0x9')](),controller['update']);router[_0xb90f('0x13')](_0xb90f('0xc'),auth[_0xb90f('0x9')](),controller[_0xb90f('0x14')]);router[_0xb90f('0x13')](_0xb90f('0xf'),auth[_0xb90f('0x9')](),controller[_0xb90f('0x15')]);router[_0xb90f('0x13')](_0xb90f('0x10'),auth[_0xb90f('0x9')](),controller[_0xb90f('0x16')]);module[_0xb90f('0x17')]=router;
\ No newline at end of file
index cb2a28f..af39560 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb9d3=['sequelize','STRING','DATE','moment'];(function(_0x32c3ca,_0x1f9ecd){var _0x42ec9a=function(_0x57aaac){while(--_0x57aaac){_0x32c3ca['push'](_0x32c3ca['shift']());}};_0x42ec9a(++_0x1f9ecd);}(_0xb9d3,0x117));var _0x3b9d=function(_0x5f0089,_0x227e2c){_0x5f0089=_0x5f0089-0x0;var _0x193892=_0xb9d3[_0x5f0089];return _0x193892;};'use strict';var moment=require(_0x3b9d('0x0'));var Sequelize=require(_0x3b9d('0x1'));module['exports']={'uniqueid':{'type':Sequelize[_0x3b9d('0x2')],'allowNull':![]},'from':{'type':Sequelize[_0x3b9d('0x2')]},'joinAt':{'type':Sequelize['DATE']},'leaveAt':{'type':Sequelize[_0x3b9d('0x3')]},'acceptAt':{'type':Sequelize[_0x3b9d('0x3')]},'exitAt':{'type':Sequelize[_0x3b9d('0x3')]},'reason':{'type':Sequelize[_0x3b9d('0x2')]}};
\ No newline at end of file
+var _0xbc5a=['DATE','exports','STRING'];(function(_0x4ebd76,_0x2ff5e8){var _0x42c3ab=function(_0x2a619b){while(--_0x2a619b){_0x4ebd76['push'](_0x4ebd76['shift']());}};_0x42c3ab(++_0x2ff5e8);}(_0xbc5a,0x199));var _0xabc5=function(_0x145b54,_0x267c42){_0x145b54=_0x145b54-0x0;var _0x52007e=_0xbc5a[_0x145b54];return _0x52007e;};'use strict';var moment=require('moment');var Sequelize=require('sequelize');module[_0xabc5('0x0')]={'uniqueid':{'type':Sequelize[_0xabc5('0x1')],'allowNull':![]},'from':{'type':Sequelize[_0xabc5('0x1')]},'joinAt':{'type':Sequelize['DATE']},'leaveAt':{'type':Sequelize[_0xabc5('0x2')]},'acceptAt':{'type':Sequelize[_0xabc5('0x2')]},'exitAt':{'type':Sequelize[_0xabc5('0x2')]},'reason':{'type':Sequelize[_0xabc5('0x1')]}};
\ No newline at end of file
index 0c1a2f6..e2d9005 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x434f=['html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','update','then','destroy','error','name','send','index','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','pick','filter','merge','map','type','key','VIRTUAL','options','ChatQueueReport','includeAll','include','findAll','rows','catch','params','rawAttributes','create','body','find','describe'];(function(_0x2dc9d7,_0x47cce2){var _0x2dd5c8=function(_0x4bddb3){while(--_0x4bddb3){_0x2dc9d7['push'](_0x2dc9d7['shift']());}};_0x2dd5c8(++_0x47cce2);}(_0x434f,0x120));var _0xf434=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x434f[_0x321bb2];return _0x9c12ed;};'use strict';var pdf=require(_0xf434('0x0'));var emlformat=require(_0xf434('0x1'));var rimraf=require(_0xf434('0x2'));var zipdir=require(_0xf434('0x3'));var jsonpatch=require(_0xf434('0x4'));var rp=require(_0xf434('0x5'));var moment=require(_0xf434('0x6'));var BPromise=require(_0xf434('0x7'));var Mustache=require(_0xf434('0x8'));var util=require(_0xf434('0x9'));var path=require('path');var sox=require(_0xf434('0xa'));var csv=require(_0xf434('0xb'));var ejs=require(_0xf434('0xc'));var fs=require('fs');var _=require(_0xf434('0xd'));var squel=require(_0xf434('0xe'));var crypto=require('crypto');var jsforce=require(_0xf434('0xf'));var deskjs=require(_0xf434('0x10'));var toCsv=require('to-csv');var querystring=require(_0xf434('0x11'));var Papa=require(_0xf434('0x12'));var Redis=require(_0xf434('0x13'));var authService=require(_0xf434('0x14'));var qs=require(_0xf434('0x15'));var hardwareService=require(_0xf434('0x16'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0xf434('0x17'));var db=require(_0xf434('0x18'))['db'];function respondWithStatusCode(_0x4de105,_0x212643){_0x212643=_0x212643||0xcc;return function(_0x44784a){if(_0x44784a){return _0x4de105[_0xf434('0x19')](_0x212643);}return _0x4de105[_0xf434('0x1a')](_0x212643)[_0xf434('0x1b')]();};}function respondWithResult(_0x1ad100,_0x3a766e){_0x3a766e=_0x3a766e||0xc8;return function(_0x43c359){if(_0x43c359){return _0x1ad100['status'](_0x3a766e)[_0xf434('0x1c')](_0x43c359);}};}function respondWithFilteredResult(_0x1bc197,_0x3115dc){return function(_0x38b594){if(_0x38b594){var _0x156bfe=_0x38b594[_0xf434('0x1d')],_0x1e0f3d=_0x3115dc[_0xf434('0x1e')],_0x30f6fe=_0x3115dc[_0xf434('0x1e')]+_0x3115dc['limit'],_0x428986;if(_0x30f6fe>=_0x156bfe){_0x30f6fe=_0x156bfe;_0x428986=0xc8;}else{_0x428986=0xce;}_0x1bc197[_0xf434('0x1a')](_0x428986);return _0x1bc197[_0xf434('0x1f')]('Content-Range',_0x1e0f3d+'-'+_0x30f6fe+'/'+_0x156bfe)['json'](_0x38b594);}return null;};}function patchUpdates(_0x5df918){return function(_0x1779c0){try{jsonpatch['apply'](_0x1779c0,_0x5df918,!![]);}catch(_0x4d9255){return BPromise['reject'](_0x4d9255);}return _0x1779c0['save']();};}function saveUpdates(_0x3193d8,_0x388f3f){return function(_0x4dd115){if(_0x4dd115){return _0x4dd115[_0xf434('0x20')](_0x3193d8)[_0xf434('0x21')](function(_0x1d74ae){return _0x1d74ae;});}return null;};}function removeEntity(_0x5ee879,_0x2a5483){return function(_0x41aa61){if(_0x41aa61){return _0x41aa61[_0xf434('0x22')]()[_0xf434('0x21')](function(){_0x5ee879[_0xf434('0x1a')](0xcc)[_0xf434('0x1b')]();});}};}function handleEntityNotFound(_0x3057a3,_0x105d92){return function(_0x5d26f3){if(!_0x5d26f3){_0x3057a3[_0xf434('0x19')](0x194);}return _0x5d26f3;};}function handleError(_0x5a1b1b,_0x4b8e7e){_0x4b8e7e=_0x4b8e7e||0x1f4;return function(_0x47bf8f){logger[_0xf434('0x23')](_0x47bf8f['stack']);if(_0x47bf8f[_0xf434('0x24')]){delete _0x47bf8f['name'];}_0x5a1b1b['status'](_0x4b8e7e)[_0xf434('0x25')](_0x47bf8f);};}exports[_0xf434('0x26')]=function(_0x4ebafa,_0x255701){var _0x45b640={},_0x2a0a9e={},_0x26cc9e={'count':0x0,'rows':[]};var _0x34b03b=db['ChatQueueReport']['rawAttributes'];_0x2a0a9e[_0xf434('0x27')]=_[_0xf434('0x28')](_0x34b03b);_0x2a0a9e['query']=_['keys'](_0x4ebafa[_0xf434('0x29')]);_0x2a0a9e[_0xf434('0x2a')]=_[_0xf434('0x2b')](_0x2a0a9e['model'],_0x2a0a9e[_0xf434('0x29')]);_0x45b640[_0xf434('0x2c')]=_[_0xf434('0x2b')](_0x2a0a9e[_0xf434('0x27')],qs[_0xf434('0x2d')](_0x4ebafa[_0xf434('0x29')][_0xf434('0x2d')]));_0x45b640[_0xf434('0x2c')]=_0x45b640[_0xf434('0x2c')][_0xf434('0x2e')]?_0x45b640[_0xf434('0x2c')]:_0x2a0a9e[_0xf434('0x27')];if(!_0x4ebafa[_0xf434('0x29')][_0xf434('0x2f')](_0xf434('0x30'))){_0x45b640[_0xf434('0x31')]=qs[_0xf434('0x31')](_0x4ebafa[_0xf434('0x29')]['limit']);_0x45b640[_0xf434('0x1e')]=qs[_0xf434('0x1e')](_0x4ebafa[_0xf434('0x29')][_0xf434('0x1e')]);}_0x45b640['order']=qs['sort'](_0x4ebafa[_0xf434('0x29')][_0xf434('0x32')]);_0x45b640[_0xf434('0x33')]=qs[_0xf434('0x2a')](_[_0xf434('0x34')](_0x4ebafa['query'],_0x2a0a9e[_0xf434('0x2a')]));if(_0x4ebafa[_0xf434('0x29')][_0xf434('0x35')]){_0x45b640[_0xf434('0x33')]=_[_0xf434('0x36')](_0x45b640[_0xf434('0x33')],{'$or':_[_0xf434('0x37')](_0x34b03b,function(_0xb29b03){if(_0xb29b03[_0xf434('0x38')][_0xf434('0x39')]!==_0xf434('0x3a')){var _0x58aef5={};_0x58aef5[_0xb29b03['field']]={'$like':'%'+_0x4ebafa[_0xf434('0x29')]['filter']+'%'};return _0x58aef5;}})});}_0x45b640=_[_0xf434('0x36')]({},_0x45b640,_0x4ebafa[_0xf434('0x3b')]);var _0x3e6945={'where':_0x45b640[_0xf434('0x33')]};return db[_0xf434('0x3c')][_0xf434('0x1d')](_0x3e6945)[_0xf434('0x21')](function(_0x4a51f7){_0x26cc9e[_0xf434('0x1d')]=_0x4a51f7;if(_0x4ebafa[_0xf434('0x29')][_0xf434('0x3d')]){_0x45b640[_0xf434('0x3e')]=[{'all':!![]}];}return db['ChatQueueReport'][_0xf434('0x3f')](_0x45b640);})[_0xf434('0x21')](function(_0x1be04e){_0x26cc9e[_0xf434('0x40')]=_0x1be04e;return _0x26cc9e;})[_0xf434('0x21')](respondWithFilteredResult(_0x255701,_0x45b640))[_0xf434('0x41')](handleError(_0x255701,null));};exports['show']=function(_0x3022a9,_0x2ca433){var _0x42bbc8={'raw':!![],'where':{'id':_0x3022a9[_0xf434('0x42')]['id']}},_0x3f6c57={};_0x3f6c57[_0xf434('0x27')]=_['keys'](db[_0xf434('0x3c')][_0xf434('0x43')]);_0x3f6c57['query']=_[_0xf434('0x28')](_0x3022a9[_0xf434('0x29')]);_0x3f6c57[_0xf434('0x2a')]=_[_0xf434('0x2b')](_0x3f6c57[_0xf434('0x27')],_0x3f6c57[_0xf434('0x29')]);_0x42bbc8[_0xf434('0x2c')]=_[_0xf434('0x2b')](_0x3f6c57[_0xf434('0x27')],qs[_0xf434('0x2d')](_0x3022a9[_0xf434('0x29')][_0xf434('0x2d')]));_0x42bbc8[_0xf434('0x2c')]=_0x42bbc8[_0xf434('0x2c')][_0xf434('0x2e')]?_0x42bbc8[_0xf434('0x2c')]:_0x3f6c57[_0xf434('0x27')];if(_0x3022a9[_0xf434('0x29')][_0xf434('0x3d')]){_0x42bbc8['include']=[{'all':!![]}];}_0x42bbc8=_[_0xf434('0x36')]({},_0x42bbc8,_0x3022a9[_0xf434('0x3b')]);return db[_0xf434('0x3c')]['find'](_0x42bbc8)[_0xf434('0x21')](handleEntityNotFound(_0x2ca433,null))[_0xf434('0x21')](respondWithResult(_0x2ca433,null))[_0xf434('0x41')](handleError(_0x2ca433,null));};exports[_0xf434('0x44')]=function(_0x272442,_0x4b2936){return db[_0xf434('0x3c')][_0xf434('0x44')](_0x272442['body'],{})[_0xf434('0x21')](respondWithResult(_0x4b2936,0xc9))[_0xf434('0x41')](handleError(_0x4b2936,null));};exports['update']=function(_0x58806f,_0x1de99e){if(_0x58806f[_0xf434('0x45')]['id']){delete _0x58806f[_0xf434('0x45')]['id'];}return db[_0xf434('0x3c')][_0xf434('0x46')]({'where':{'id':_0x58806f[_0xf434('0x42')]['id']}})['then'](handleEntityNotFound(_0x1de99e,null))[_0xf434('0x21')](saveUpdates(_0x58806f['body'],null))[_0xf434('0x21')](respondWithResult(_0x1de99e,null))[_0xf434('0x41')](handleError(_0x1de99e,null));};exports[_0xf434('0x22')]=function(_0x1ffcd2,_0x26bbbc){return db[_0xf434('0x3c')][_0xf434('0x46')]({'where':{'id':_0x1ffcd2[_0xf434('0x42')]['id']}})[_0xf434('0x21')](handleEntityNotFound(_0x26bbbc,null))[_0xf434('0x21')](removeEntity(_0x26bbbc,null))[_0xf434('0x41')](handleError(_0x26bbbc,null));};exports[_0xf434('0x47')]=function(_0x1f75d8,_0x3065b9){return db['ChatQueueReport'][_0xf434('0x47')]()['then'](respondWithResult(_0x3065b9,null))['catch'](handleError(_0x3065b9,null));};
\ No newline at end of file
+var _0xbc71=['sox','ejs','lodash','squel','crypto','desk.js','querystring','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','offset','limit','set','Content-Range','json','apply','reject','save','update','then','destroy','error','stack','name','send','ChatQueueReport','rawAttributes','keys','query','filters','intersection','attributes','model','fields','length','hasOwnProperty','nolimit','order','where','filter','merge','map','type','key','field','options','count','includeAll','include','findAll','rows','catch','show','params','create','body','find','html-pdf','rimraf','fast-json-patch','moment','util','path'];(function(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0xbc71,0x86));var _0x1bc7=function(_0x56482c,_0x16118d){_0x56482c=_0x56482c-0x0;var _0x5aae7a=_0xbc71[_0x56482c];return _0x5aae7a;};'use strict';var pdf=require(_0x1bc7('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x1bc7('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x1bc7('0x2'));var rp=require('request-promise');var moment=require(_0x1bc7('0x3'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x1bc7('0x4'));var path=require(_0x1bc7('0x5'));var sox=require(_0x1bc7('0x6'));var csv=require('to-csv');var ejs=require(_0x1bc7('0x7'));var fs=require('fs');var _=require(_0x1bc7('0x8'));var squel=require(_0x1bc7('0x9'));var crypto=require(_0x1bc7('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x1bc7('0xb'));var toCsv=require('to-csv');var querystring=require(_0x1bc7('0xc'));var Papa=require('papaparse');var Redis=require(_0x1bc7('0xd'));var authService=require(_0x1bc7('0xe'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x1bc7('0xf'));var logger=require(_0x1bc7('0x10'))(_0x1bc7('0x11'));var utils=require(_0x1bc7('0x12'));var config=require('../../config/environment');var db=require(_0x1bc7('0x13'))['db'];function respondWithStatusCode(_0x31429d,_0x578584){_0x578584=_0x578584||0xcc;return function(_0x25d68c){if(_0x25d68c){return _0x31429d[_0x1bc7('0x14')](_0x578584);}return _0x31429d[_0x1bc7('0x15')](_0x578584)[_0x1bc7('0x16')]();};}function respondWithResult(_0x2b563a,_0x50731c){_0x50731c=_0x50731c||0xc8;return function(_0x10bcb5){if(_0x10bcb5){return _0x2b563a['status'](_0x50731c)['json'](_0x10bcb5);}};}function respondWithFilteredResult(_0x5ce0ac,_0x2d94d3){return function(_0x2441d3){if(_0x2441d3){var _0x4802fa=_0x2441d3['count'],_0x1ee9d4=_0x2d94d3['offset'],_0x5d3e1f=_0x2d94d3[_0x1bc7('0x17')]+_0x2d94d3[_0x1bc7('0x18')],_0x2d5807;if(_0x5d3e1f>=_0x4802fa){_0x5d3e1f=_0x4802fa;_0x2d5807=0xc8;}else{_0x2d5807=0xce;}_0x5ce0ac[_0x1bc7('0x15')](_0x2d5807);return _0x5ce0ac[_0x1bc7('0x19')](_0x1bc7('0x1a'),_0x1ee9d4+'-'+_0x5d3e1f+'/'+_0x4802fa)[_0x1bc7('0x1b')](_0x2441d3);}return null;};}function patchUpdates(_0x2e309e){return function(_0x185975){try{jsonpatch[_0x1bc7('0x1c')](_0x185975,_0x2e309e,!![]);}catch(_0x514dba){return BPromise[_0x1bc7('0x1d')](_0x514dba);}return _0x185975[_0x1bc7('0x1e')]();};}function saveUpdates(_0x588733,_0x36e117){return function(_0x1cb44c){if(_0x1cb44c){return _0x1cb44c[_0x1bc7('0x1f')](_0x588733)[_0x1bc7('0x20')](function(_0x3c0640){return _0x3c0640;});}return null;};}function removeEntity(_0x3dd8f3,_0x3bb6e1){return function(_0x29871a){if(_0x29871a){return _0x29871a[_0x1bc7('0x21')]()[_0x1bc7('0x20')](function(){_0x3dd8f3[_0x1bc7('0x15')](0xcc)[_0x1bc7('0x16')]();});}};}function handleEntityNotFound(_0x41fb4c,_0x23e543){return function(_0x3ce3d8){if(!_0x3ce3d8){_0x41fb4c['sendStatus'](0x194);}return _0x3ce3d8;};}function handleError(_0x5c3a58,_0x8514bb){_0x8514bb=_0x8514bb||0x1f4;return function(_0x9230c1){logger[_0x1bc7('0x22')](_0x9230c1[_0x1bc7('0x23')]);if(_0x9230c1[_0x1bc7('0x24')]){delete _0x9230c1[_0x1bc7('0x24')];}_0x5c3a58[_0x1bc7('0x15')](_0x8514bb)[_0x1bc7('0x25')](_0x9230c1);};}exports['index']=function(_0x552a84,_0x42a760){var _0x28d768={},_0x32e382={},_0x584a2c={'count':0x0,'rows':[]};var _0x3027d4=db[_0x1bc7('0x26')][_0x1bc7('0x27')];_0x32e382['model']=_[_0x1bc7('0x28')](_0x3027d4);_0x32e382[_0x1bc7('0x29')]=_[_0x1bc7('0x28')](_0x552a84[_0x1bc7('0x29')]);_0x32e382[_0x1bc7('0x2a')]=_[_0x1bc7('0x2b')](_0x32e382['model'],_0x32e382[_0x1bc7('0x29')]);_0x28d768[_0x1bc7('0x2c')]=_[_0x1bc7('0x2b')](_0x32e382[_0x1bc7('0x2d')],qs['fields'](_0x552a84[_0x1bc7('0x29')][_0x1bc7('0x2e')]));_0x28d768[_0x1bc7('0x2c')]=_0x28d768[_0x1bc7('0x2c')][_0x1bc7('0x2f')]?_0x28d768[_0x1bc7('0x2c')]:_0x32e382[_0x1bc7('0x2d')];if(!_0x552a84['query'][_0x1bc7('0x30')](_0x1bc7('0x31'))){_0x28d768[_0x1bc7('0x18')]=qs[_0x1bc7('0x18')](_0x552a84[_0x1bc7('0x29')][_0x1bc7('0x18')]);_0x28d768[_0x1bc7('0x17')]=qs[_0x1bc7('0x17')](_0x552a84['query'][_0x1bc7('0x17')]);}_0x28d768[_0x1bc7('0x32')]=qs['sort'](_0x552a84[_0x1bc7('0x29')]['sort']);_0x28d768[_0x1bc7('0x33')]=qs[_0x1bc7('0x2a')](_['pick'](_0x552a84[_0x1bc7('0x29')],_0x32e382[_0x1bc7('0x2a')]));if(_0x552a84[_0x1bc7('0x29')][_0x1bc7('0x34')]){_0x28d768[_0x1bc7('0x33')]=_[_0x1bc7('0x35')](_0x28d768['where'],{'$or':_[_0x1bc7('0x36')](_0x3027d4,function(_0x46fd07){if(_0x46fd07[_0x1bc7('0x37')][_0x1bc7('0x38')]!=='VIRTUAL'){var _0x3e2662={};_0x3e2662[_0x46fd07[_0x1bc7('0x39')]]={'$like':'%'+_0x552a84[_0x1bc7('0x29')]['filter']+'%'};return _0x3e2662;}})});}_0x28d768=_[_0x1bc7('0x35')]({},_0x28d768,_0x552a84[_0x1bc7('0x3a')]);var _0xffc61d={'where':_0x28d768[_0x1bc7('0x33')]};return db[_0x1bc7('0x26')][_0x1bc7('0x3b')](_0xffc61d)[_0x1bc7('0x20')](function(_0x2aefe2){_0x584a2c['count']=_0x2aefe2;if(_0x552a84[_0x1bc7('0x29')][_0x1bc7('0x3c')]){_0x28d768[_0x1bc7('0x3d')]=[{'all':!![]}];}return db[_0x1bc7('0x26')][_0x1bc7('0x3e')](_0x28d768);})['then'](function(_0xa2b6f5){_0x584a2c[_0x1bc7('0x3f')]=_0xa2b6f5;return _0x584a2c;})['then'](respondWithFilteredResult(_0x42a760,_0x28d768))[_0x1bc7('0x40')](handleError(_0x42a760,null));};exports[_0x1bc7('0x41')]=function(_0x4088aa,_0x2af5a9){var _0x231302={'raw':!![],'where':{'id':_0x4088aa[_0x1bc7('0x42')]['id']}},_0x159b37={};_0x159b37[_0x1bc7('0x2d')]=_[_0x1bc7('0x28')](db[_0x1bc7('0x26')][_0x1bc7('0x27')]);_0x159b37[_0x1bc7('0x29')]=_['keys'](_0x4088aa['query']);_0x159b37['filters']=_[_0x1bc7('0x2b')](_0x159b37[_0x1bc7('0x2d')],_0x159b37[_0x1bc7('0x29')]);_0x231302[_0x1bc7('0x2c')]=_[_0x1bc7('0x2b')](_0x159b37[_0x1bc7('0x2d')],qs[_0x1bc7('0x2e')](_0x4088aa[_0x1bc7('0x29')][_0x1bc7('0x2e')]));_0x231302[_0x1bc7('0x2c')]=_0x231302[_0x1bc7('0x2c')][_0x1bc7('0x2f')]?_0x231302[_0x1bc7('0x2c')]:_0x159b37[_0x1bc7('0x2d')];if(_0x4088aa['query'][_0x1bc7('0x3c')]){_0x231302[_0x1bc7('0x3d')]=[{'all':!![]}];}_0x231302=_[_0x1bc7('0x35')]({},_0x231302,_0x4088aa[_0x1bc7('0x3a')]);return db[_0x1bc7('0x26')]['find'](_0x231302)['then'](handleEntityNotFound(_0x2af5a9,null))[_0x1bc7('0x20')](respondWithResult(_0x2af5a9,null))[_0x1bc7('0x40')](handleError(_0x2af5a9,null));};exports[_0x1bc7('0x43')]=function(_0x1434f9,_0x19e81d){return db[_0x1bc7('0x26')][_0x1bc7('0x43')](_0x1434f9[_0x1bc7('0x44')],{})[_0x1bc7('0x20')](respondWithResult(_0x19e81d,0xc9))[_0x1bc7('0x40')](handleError(_0x19e81d,null));};exports[_0x1bc7('0x1f')]=function(_0x36182e,_0x3306fb){if(_0x36182e[_0x1bc7('0x44')]['id']){delete _0x36182e['body']['id'];}return db[_0x1bc7('0x26')][_0x1bc7('0x45')]({'where':{'id':_0x36182e[_0x1bc7('0x42')]['id']}})[_0x1bc7('0x20')](handleEntityNotFound(_0x3306fb,null))['then'](saveUpdates(_0x36182e['body'],null))[_0x1bc7('0x20')](respondWithResult(_0x3306fb,null))[_0x1bc7('0x40')](handleError(_0x3306fb,null));};exports[_0x1bc7('0x21')]=function(_0x352be3,_0x34a144){return db[_0x1bc7('0x26')][_0x1bc7('0x45')]({'where':{'id':_0x352be3[_0x1bc7('0x42')]['id']}})[_0x1bc7('0x20')](handleEntityNotFound(_0x34a144,null))['then'](removeEntity(_0x34a144,null))['catch'](handleError(_0x34a144,null));};exports['describe']=function(_0x1f74dd,_0x132609){return db[_0x1bc7('0x26')]['describe']()[_0x1bc7('0x20')](respondWithResult(_0x132609,null))[_0x1bc7('0x40')](handleError(_0x132609,null));};
\ No newline at end of file
index 289e740..2cb1999 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa5ef=['bluebird','request-promise','path','rimraf','../../config/environment','./chatQueueReport.attributes','exports','define','ChatQueueReport','report_chat_queue','uniqueid','lodash','util','../../config/logger','api'];(function(_0x130ef8,_0x5b554d){var _0x573436=function(_0x1f5c34){while(--_0x1f5c34){_0x130ef8['push'](_0x130ef8['shift']());}};_0x573436(++_0x5b554d);}(_0xa5ef,0x83));var _0xfa5e=function(_0x31e961,_0x4b5ec9){_0x31e961=_0x31e961-0x0;var _0x24801e=_0xa5ef[_0x31e961];return _0x24801e;};'use strict';var _=require(_0xfa5e('0x0'));var util=require(_0xfa5e('0x1'));var logger=require(_0xfa5e('0x2'))(_0xfa5e('0x3'));var moment=require('moment');var BPromise=require(_0xfa5e('0x4'));var rp=require(_0xfa5e('0x5'));var fs=require('fs');var path=require(_0xfa5e('0x6'));var rimraf=require(_0xfa5e('0x7'));var config=require(_0xfa5e('0x8'));var attributes=require(_0xfa5e('0x9'));module[_0xfa5e('0xa')]=function(_0x4a1f29,_0x1b8588){return _0x4a1f29[_0xfa5e('0xb')](_0xfa5e('0xc'),attributes,{'tableName':_0xfa5e('0xd'),'paranoid':![],'indexes':[{'name':_0xfa5e('0xe'),'fields':[_0xfa5e('0xe')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x898c=['exports','ChatQueueReport','report_chat_queue','uniqueid','lodash','util','../../config/logger','api','rimraf','../../config/environment','./chatQueueReport.attributes'];(function(_0x5cfeed,_0x57586e){var _0x16f48c=function(_0x24070a){while(--_0x24070a){_0x5cfeed['push'](_0x5cfeed['shift']());}};_0x16f48c(++_0x57586e);}(_0x898c,0x190));var _0xc898=function(_0x3cdba4,_0x38853d){_0x3cdba4=_0x3cdba4-0x0;var _0x5b35bc=_0x898c[_0x3cdba4];return _0x5b35bc;};'use strict';var _=require(_0xc898('0x0'));var util=require(_0xc898('0x1'));var logger=require(_0xc898('0x2'))(_0xc898('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0xc898('0x4'));var config=require(_0xc898('0x5'));var attributes=require(_0xc898('0x6'));module[_0xc898('0x7')]=function(_0x56781e,_0x444fde){return _0x56781e['define'](_0xc898('0x8'),attributes,{'tableName':_0xc898('0x9'),'paranoid':![],'indexes':[{'name':_0xc898('0xa'),'fields':[_0xc898('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
index 7f8dc35..c3bd813 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xadc7=['ChatQueueReport,\x20%s,\x20%s','request\x20sent','debug','ChatQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','CreateChatQueueReport','ChatQueueReport','create','body','options','raw','update','where','attributes','limit','UpdateChatQueueReport','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info'];(function(_0x3e2ba9,_0x55a716){var _0x36d031=function(_0x212617){while(--_0x212617){_0x3e2ba9['push'](_0x3e2ba9['shift']());}};_0x36d031(++_0x55a716);}(_0xadc7,0x109));var _0x7adc=function(_0x3f4568,_0x9eb0ee){_0x3f4568=_0x3f4568-0x0;var _0xee2340=_0xadc7[_0x3f4568];return _0xee2340;};'use strict';var _=require(_0x7adc('0x0'));var util=require(_0x7adc('0x1'));var moment=require(_0x7adc('0x2'));var BPromise=require(_0x7adc('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7adc('0x4'));var db=require(_0x7adc('0x5'))['db'];var utils=require(_0x7adc('0x6'));var logger=require(_0x7adc('0x7'))(_0x7adc('0x8'));var config=require(_0x7adc('0x9'));var jayson=require(_0x7adc('0xa'));var client=jayson[_0x7adc('0xb')][_0x7adc('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x5b9789,_0x19631b,_0x46f9a0){return new BPromise(function(_0xa911b8,_0x555fee){return client['request'](_0x5b9789,_0x46f9a0)[_0x7adc('0xd')](function(_0x328f2e){logger[_0x7adc('0xe')](_0x7adc('0xf'),_0x19631b,_0x7adc('0x10'));logger[_0x7adc('0x11')](_0x7adc('0x12'),_0x19631b,_0x7adc('0x10'),JSON[_0x7adc('0x13')](_0x328f2e));if(_0x328f2e[_0x7adc('0x14')]){if(_0x328f2e[_0x7adc('0x14')][_0x7adc('0x15')]===0x1f4){logger[_0x7adc('0x14')]('ChatQueueReport,\x20%s,\x20%s',_0x19631b,_0x328f2e[_0x7adc('0x14')][_0x7adc('0x16')]);return _0x555fee(_0x328f2e[_0x7adc('0x14')][_0x7adc('0x16')]);}logger['error'](_0x7adc('0xf'),_0x19631b,_0x328f2e[_0x7adc('0x14')]['message']);return _0xa911b8(_0x328f2e[_0x7adc('0x14')][_0x7adc('0x16')]);}else{logger['info'](_0x7adc('0xf'),_0x19631b,_0x7adc('0x10'));_0xa911b8(_0x328f2e['result'][_0x7adc('0x16')]);}})[_0x7adc('0x17')](function(_0x5dcc4e){logger[_0x7adc('0x14')](_0x7adc('0xf'),_0x19631b,_0x5dcc4e);_0x555fee(_0x5dcc4e);});});}exports[_0x7adc('0x18')]=function(_0x2fb59a){var _0x3a1ffb=this;return new Promise(function(_0x4b094c,_0x26470c){return db[_0x7adc('0x19')][_0x7adc('0x1a')](_0x2fb59a[_0x7adc('0x1b')],{'raw':_0x2fb59a[_0x7adc('0x1c')]?_0x2fb59a[_0x7adc('0x1c')][_0x7adc('0x1d')]===undefined?!![]:![]:!![]})[_0x7adc('0xd')](function(_0x45538d){logger[_0x7adc('0xe')](_0x7adc('0x18'),_0x2fb59a);logger[_0x7adc('0x11')](_0x7adc('0x18'),_0x2fb59a,JSON[_0x7adc('0x13')](_0x45538d));_0x4b094c(_0x45538d);})['catch'](function(_0x25623b){logger[_0x7adc('0x14')](_0x7adc('0x18'),_0x25623b[_0x7adc('0x16')],_0x2fb59a);_0x26470c(_0x3a1ffb[_0x7adc('0x14')](0x1f4,_0x25623b[_0x7adc('0x16')]));});});};exports['UpdateChatQueueReport']=function(_0x52d34f){var _0xa9f0f0=this;return new Promise(function(_0x545008,_0x2089b5){return db['ChatQueueReport'][_0x7adc('0x1e')](_0x52d34f['body'],{'raw':_0x52d34f['options']?_0x52d34f['options'][_0x7adc('0x1d')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x52d34f[_0x7adc('0x1c')]?_0x52d34f[_0x7adc('0x1c')][_0x7adc('0x1f')]||null:null,'attributes':_0x52d34f[_0x7adc('0x1c')]?_0x52d34f[_0x7adc('0x1c')][_0x7adc('0x20')]||null:null,'limit':_0x52d34f[_0x7adc('0x1c')]?_0x52d34f[_0x7adc('0x1c')][_0x7adc('0x21')]||null:null})[_0x7adc('0xd')](function(_0xa4dc36){logger['info'](_0x7adc('0x22'),_0x52d34f);logger[_0x7adc('0x11')](_0x7adc('0x22'),_0x52d34f,JSON[_0x7adc('0x13')](_0xa4dc36));_0x545008(_0xa4dc36);})[_0x7adc('0x17')](function(_0x1ebe8c){logger[_0x7adc('0x14')](_0x7adc('0x22'),_0x1ebe8c[_0x7adc('0x16')],_0x52d34f);_0x2089b5(_0xa9f0f0[_0x7adc('0x14')](0x1f4,_0x1ebe8c['message']));});});};
\ No newline at end of file
+var _0x2960=['http','request','then','info','ChatQueueReport,\x20%s,\x20%s','debug','ChatQueueReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','CreateChatQueueReport','create','body','raw','UpdateChatQueueReport','options','where','attributes','limit','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x2960,0x10c));var _0x0296=function(_0x5cb71a,_0x263bdf){_0x5cb71a=_0x5cb71a-0x0;var _0x3f380f=_0x2960[_0x5cb71a];return _0x3f380f;};'use strict';var _=require(_0x0296('0x0'));var util=require(_0x0296('0x1'));var moment=require(_0x0296('0x2'));var BPromise=require(_0x0296('0x3'));var rs=require(_0x0296('0x4'));var fs=require('fs');var Redis=require(_0x0296('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x0296('0x6'));var logger=require(_0x0296('0x7'))(_0x0296('0x8'));var config=require(_0x0296('0x9'));var jayson=require(_0x0296('0xa'));var client=jayson[_0x0296('0xb')][_0x0296('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x473f90,_0x4f0b16,_0x5e636c){return new BPromise(function(_0x85d1c4,_0x4e1a52){return client[_0x0296('0xd')](_0x473f90,_0x5e636c)[_0x0296('0xe')](function(_0x1491bf){logger[_0x0296('0xf')](_0x0296('0x10'),_0x4f0b16,'request\x20sent');logger[_0x0296('0x11')](_0x0296('0x12'),_0x4f0b16,_0x0296('0x13'),JSON[_0x0296('0x14')](_0x1491bf));if(_0x1491bf['error']){if(_0x1491bf[_0x0296('0x15')][_0x0296('0x16')]===0x1f4){logger[_0x0296('0x15')](_0x0296('0x10'),_0x4f0b16,_0x1491bf[_0x0296('0x15')]['message']);return _0x4e1a52(_0x1491bf[_0x0296('0x15')]['message']);}logger[_0x0296('0x15')](_0x0296('0x10'),_0x4f0b16,_0x1491bf[_0x0296('0x15')][_0x0296('0x17')]);return _0x85d1c4(_0x1491bf[_0x0296('0x15')]['message']);}else{logger[_0x0296('0xf')](_0x0296('0x10'),_0x4f0b16,'request\x20sent');_0x85d1c4(_0x1491bf[_0x0296('0x18')]['message']);}})[_0x0296('0x19')](function(_0x25b6bd){logger[_0x0296('0x15')](_0x0296('0x10'),_0x4f0b16,_0x25b6bd);_0x4e1a52(_0x25b6bd);});});}exports[_0x0296('0x1a')]=function(_0x427aa8){var _0xbc72b2=this;return new Promise(function(_0x103e3b,_0x45d9b4){return db['ChatQueueReport'][_0x0296('0x1b')](_0x427aa8[_0x0296('0x1c')],{'raw':_0x427aa8['options']?_0x427aa8['options'][_0x0296('0x1d')]===undefined?!![]:![]:!![]})[_0x0296('0xe')](function(_0x5daa33){logger[_0x0296('0xf')](_0x0296('0x1a'),_0x427aa8);logger[_0x0296('0x11')](_0x0296('0x1a'),_0x427aa8,JSON[_0x0296('0x14')](_0x5daa33));_0x103e3b(_0x5daa33);})[_0x0296('0x19')](function(_0x27594c){logger['error'](_0x0296('0x1a'),_0x27594c[_0x0296('0x17')],_0x427aa8);_0x45d9b4(_0xbc72b2['error'](0x1f4,_0x27594c['message']));});});};exports[_0x0296('0x1e')]=function(_0x497882){var _0x4827b7=this;return new Promise(function(_0x395587,_0x552122){return db['ChatQueueReport']['update'](_0x497882[_0x0296('0x1c')],{'raw':_0x497882[_0x0296('0x1f')]?_0x497882[_0x0296('0x1f')][_0x0296('0x1d')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x497882['options']?_0x497882[_0x0296('0x1f')][_0x0296('0x20')]||null:null,'attributes':_0x497882[_0x0296('0x1f')]?_0x497882[_0x0296('0x1f')][_0x0296('0x21')]||null:null,'limit':_0x497882[_0x0296('0x1f')]?_0x497882[_0x0296('0x1f')][_0x0296('0x22')]||null:null})[_0x0296('0xe')](function(_0x4723a9){logger[_0x0296('0xf')](_0x0296('0x1e'),_0x497882);logger['debug'](_0x0296('0x1e'),_0x497882,JSON[_0x0296('0x14')](_0x4723a9));_0x395587(_0x4723a9);})[_0x0296('0x19')](function(_0x5e3069){logger[_0x0296('0x15')](_0x0296('0x1e'),_0x5e3069[_0x0296('0x17')],_0x497882);_0x552122(_0x4827b7['error'](0x1f4,_0x5e3069[_0x0296('0x17')]));});});};
\ No newline at end of file
index 595fddc..fb4af18 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd2c2=['create','put','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./chatQueueReport.controller','isAuthenticated','index','get','/:id','show'];(function(_0x54c695,_0x5d6677){var _0x3ce06b=function(_0x55bdf1){while(--_0x55bdf1){_0x54c695['push'](_0x54c695['shift']());}};_0x3ce06b(++_0x5d6677);}(_0xd2c2,0x172));var _0x2d2c=function(_0x32894b,_0x5c9f22){_0x32894b=_0x32894b-0x0;var _0x5a98b9=_0xd2c2[_0x32894b];return _0x5a98b9;};'use strict';var multer=require(_0x2d2c('0x0'));var util=require(_0x2d2c('0x1'));var path=require(_0x2d2c('0x2'));var timeout=require(_0x2d2c('0x3'));var express=require(_0x2d2c('0x4'));var router=express[_0x2d2c('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x2d2c('0x6'));var config=require(_0x2d2c('0x7'));var controller=require(_0x2d2c('0x8'));router['get']('/',auth[_0x2d2c('0x9')](),controller[_0x2d2c('0xa')]);router[_0x2d2c('0xb')]('/describe',auth[_0x2d2c('0x9')](),controller['describe']);router[_0x2d2c('0xb')](_0x2d2c('0xc'),auth[_0x2d2c('0x9')](),controller[_0x2d2c('0xd')]);router['post']('/',auth[_0x2d2c('0x9')](),controller[_0x2d2c('0xe')]);router[_0x2d2c('0xf')](_0x2d2c('0xc'),auth[_0x2d2c('0x9')](),controller['update']);router['delete'](_0x2d2c('0xc'),auth[_0x2d2c('0x9')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0x8a32=['../../components/interaction/service','../../config/environment','./chatQueueReport.controller','get','index','/describe','isAuthenticated','/:id','post','create','put','update','delete','destroy','exports','multer','util','path','Router'];(function(_0x1213ce,_0x43eeb1){var _0x5aae14=function(_0x12807d){while(--_0x12807d){_0x1213ce['push'](_0x1213ce['shift']());}};_0x5aae14(++_0x43eeb1);}(_0x8a32,0x1ea));var _0x28a3=function(_0x2a1ae1,_0x1c0fc1){_0x2a1ae1=_0x2a1ae1-0x0;var _0x399e47=_0x8a32[_0x2a1ae1];return _0x399e47;};'use strict';var multer=require(_0x28a3('0x0'));var util=require(_0x28a3('0x1'));var path=require(_0x28a3('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x28a3('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x28a3('0x4'));var config=require(_0x28a3('0x5'));var controller=require(_0x28a3('0x6'));router[_0x28a3('0x7')]('/',auth['isAuthenticated'](),controller[_0x28a3('0x8')]);router[_0x28a3('0x7')](_0x28a3('0x9'),auth[_0x28a3('0xa')](),controller['describe']);router[_0x28a3('0x7')](_0x28a3('0xb'),auth[_0x28a3('0xa')](),controller['show']);router[_0x28a3('0xc')]('/',auth[_0x28a3('0xa')](),controller[_0x28a3('0xd')]);router[_0x28a3('0xe')]('/:id',auth[_0x28a3('0xa')](),controller[_0x28a3('0xf')]);router[_0x28a3('0x10')](_0x28a3('0xb'),auth[_0x28a3('0xa')](),controller[_0x28a3('0x11')]);module[_0x28a3('0x12')]=router;
\ No newline at end of file
index 493fc26..8485015 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2696=['ENUM','account','agent','queue','DATE','NOW','moment','sequelize','exports'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0x2696,0x16e));var _0x6269=function(_0x2916ce,_0x399a9e){_0x2916ce=_0x2916ce-0x0;var _0x4a1d66=_0x2696[_0x2916ce];return _0x4a1d66;};'use strict';var moment=require(_0x6269('0x0'));var Sequelize=require(_0x6269('0x1'));module[_0x6269('0x2')]={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'type':{'type':Sequelize[_0x6269('0x3')](_0x6269('0x4'),_0x6269('0x5'),_0x6269('0x6')),'allowNull':![],'defaultValue':_0x6269('0x6')},'transferredAt':{'type':Sequelize[_0x6269('0x7')],'allowNull':![],'defaultValue':Sequelize[_0x6269('0x8')]}};
\ No newline at end of file
+var _0xf572=['STRING','ENUM','account','agent','queue','DATE','NOW'];(function(_0x39868c,_0x57d081){var _0x434857=function(_0x11ddd4){while(--_0x11ddd4){_0x39868c['push'](_0x39868c['shift']());}};_0x434857(++_0x57d081);}(_0xf572,0x69));var _0x2f57=function(_0x40bb7c,_0x1e3d47){_0x40bb7c=_0x40bb7c-0x0;var _0x470085=_0xf572[_0x40bb7c];return _0x470085;};'use strict';var moment=require('moment');var Sequelize=require('sequelize');module['exports']={'uniqueid':{'type':Sequelize[_0x2f57('0x0')],'allowNull':![]},'type':{'type':Sequelize[_0x2f57('0x1')](_0x2f57('0x2'),_0x2f57('0x3'),_0x2f57('0x4')),'allowNull':![],'defaultValue':_0x2f57('0x4')},'transferredAt':{'type':Sequelize[_0x2f57('0x5')],'allowNull':![],'defaultValue':Sequelize[_0x2f57('0x6')]}};
\ No newline at end of file
index 7789d34..717b1a0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x58b4=['attributes','length','hasOwnProperty','nolimit','limit','sort','pick','filter','merge','where','map','type','key','field','ChatTransferReport','includeAll','include','findAll','rows','catch','show','params','rawAttributes','options','find','create','body','update','describe','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','status','end','count','offset','set','Content-Range','apply','reject','save','destroy','then','sendStatus','error','stack','name','send','index','model','keys','query','filters','intersection','fields'];(function(_0x27683f,_0x3f77ef){var _0x4448d0=function(_0x3b0815){while(--_0x3b0815){_0x27683f['push'](_0x27683f['shift']());}};_0x4448d0(++_0x3f77ef);}(_0x58b4,0xb7));var _0x458b=function(_0x44b177,_0x3cbf09){_0x44b177=_0x44b177-0x0;var _0x28ea32=_0x58b4[_0x44b177];return _0x28ea32;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x458b('0x0'));var rimraf=require(_0x458b('0x1'));var zipdir=require(_0x458b('0x2'));var jsonpatch=require(_0x458b('0x3'));var rp=require(_0x458b('0x4'));var moment=require(_0x458b('0x5'));var BPromise=require(_0x458b('0x6'));var Mustache=require(_0x458b('0x7'));var util=require(_0x458b('0x8'));var path=require('path');var sox=require(_0x458b('0x9'));var csv=require(_0x458b('0xa'));var ejs=require(_0x458b('0xb'));var fs=require('fs');var _=require(_0x458b('0xc'));var squel=require(_0x458b('0xd'));var crypto=require(_0x458b('0xe'));var jsforce=require(_0x458b('0xf'));var deskjs=require('desk.js');var toCsv=require(_0x458b('0xa'));var querystring=require('querystring');var Papa=require(_0x458b('0x10'));var Redis=require(_0x458b('0x11'));var authService=require(_0x458b('0x12'));var qs=require(_0x458b('0x13'));var hardwareService=require(_0x458b('0x14'));var logger=require(_0x458b('0x15'))('api');var utils=require(_0x458b('0x16'));var config=require(_0x458b('0x17'));var db=require(_0x458b('0x18'))['db'];function respondWithStatusCode(_0x2ff98b,_0x4a270b){_0x4a270b=_0x4a270b||0xcc;return function(_0x111b34){if(_0x111b34){return _0x2ff98b['sendStatus'](_0x4a270b);}return _0x2ff98b[_0x458b('0x19')](_0x4a270b)[_0x458b('0x1a')]();};}function respondWithResult(_0x570855,_0x3f2cf0){_0x3f2cf0=_0x3f2cf0||0xc8;return function(_0x3d57b7){if(_0x3d57b7){return _0x570855[_0x458b('0x19')](_0x3f2cf0)['json'](_0x3d57b7);}};}function respondWithFilteredResult(_0x29b7c4,_0x1bb199){return function(_0x18e424){if(_0x18e424){var _0x314aee=_0x18e424[_0x458b('0x1b')],_0x3b2339=_0x1bb199[_0x458b('0x1c')],_0x463c0b=_0x1bb199['offset']+_0x1bb199['limit'],_0x2c4299;if(_0x463c0b>=_0x314aee){_0x463c0b=_0x314aee;_0x2c4299=0xc8;}else{_0x2c4299=0xce;}_0x29b7c4['status'](_0x2c4299);return _0x29b7c4[_0x458b('0x1d')](_0x458b('0x1e'),_0x3b2339+'-'+_0x463c0b+'/'+_0x314aee)['json'](_0x18e424);}return null;};}function patchUpdates(_0x3411a1){return function(_0x5c8c6e){try{jsonpatch[_0x458b('0x1f')](_0x5c8c6e,_0x3411a1,!![]);}catch(_0x4a2b67){return BPromise[_0x458b('0x20')](_0x4a2b67);}return _0x5c8c6e[_0x458b('0x21')]();};}function saveUpdates(_0x20ba43,_0x4bd98c){return function(_0x25ef98){if(_0x25ef98){return _0x25ef98['update'](_0x20ba43)['then'](function(_0x49ad67){return _0x49ad67;});}return null;};}function removeEntity(_0x43ab5c,_0x138c14){return function(_0x28984c){if(_0x28984c){return _0x28984c[_0x458b('0x22')]()[_0x458b('0x23')](function(){_0x43ab5c[_0x458b('0x19')](0xcc)[_0x458b('0x1a')]();});}};}function handleEntityNotFound(_0x4591f7,_0x27dbb8){return function(_0x235173){if(!_0x235173){_0x4591f7[_0x458b('0x24')](0x194);}return _0x235173;};}function handleError(_0x54d1d1,_0x5a33fe){_0x5a33fe=_0x5a33fe||0x1f4;return function(_0x5e5c8f){logger[_0x458b('0x25')](_0x5e5c8f[_0x458b('0x26')]);if(_0x5e5c8f[_0x458b('0x27')]){delete _0x5e5c8f[_0x458b('0x27')];}_0x54d1d1['status'](_0x5a33fe)[_0x458b('0x28')](_0x5e5c8f);};}exports[_0x458b('0x29')]=function(_0xf5b8fb,_0x270ed3){var _0x1af5e6={},_0xffa61d={},_0x2d4492={'count':0x0,'rows':[]};var _0x226cde=db['ChatTransferReport']['rawAttributes'];_0xffa61d[_0x458b('0x2a')]=_[_0x458b('0x2b')](_0x226cde);_0xffa61d['query']=_[_0x458b('0x2b')](_0xf5b8fb[_0x458b('0x2c')]);_0xffa61d[_0x458b('0x2d')]=_['intersection'](_0xffa61d[_0x458b('0x2a')],_0xffa61d[_0x458b('0x2c')]);_0x1af5e6['attributes']=_[_0x458b('0x2e')](_0xffa61d[_0x458b('0x2a')],qs[_0x458b('0x2f')](_0xf5b8fb[_0x458b('0x2c')][_0x458b('0x2f')]));_0x1af5e6[_0x458b('0x30')]=_0x1af5e6[_0x458b('0x30')][_0x458b('0x31')]?_0x1af5e6[_0x458b('0x30')]:_0xffa61d[_0x458b('0x2a')];if(!_0xf5b8fb[_0x458b('0x2c')][_0x458b('0x32')](_0x458b('0x33'))){_0x1af5e6[_0x458b('0x34')]=qs['limit'](_0xf5b8fb['query']['limit']);_0x1af5e6[_0x458b('0x1c')]=qs[_0x458b('0x1c')](_0xf5b8fb[_0x458b('0x2c')][_0x458b('0x1c')]);}_0x1af5e6['order']=qs[_0x458b('0x35')](_0xf5b8fb[_0x458b('0x2c')][_0x458b('0x35')]);_0x1af5e6['where']=qs[_0x458b('0x2d')](_[_0x458b('0x36')](_0xf5b8fb[_0x458b('0x2c')],_0xffa61d['filters']));if(_0xf5b8fb[_0x458b('0x2c')][_0x458b('0x37')]){_0x1af5e6['where']=_[_0x458b('0x38')](_0x1af5e6[_0x458b('0x39')],{'$or':_[_0x458b('0x3a')](_0x226cde,function(_0x6261ba){if(_0x6261ba[_0x458b('0x3b')][_0x458b('0x3c')]!=='VIRTUAL'){var _0xf6b0a0={};_0xf6b0a0[_0x6261ba[_0x458b('0x3d')]]={'$like':'%'+_0xf5b8fb[_0x458b('0x2c')]['filter']+'%'};return _0xf6b0a0;}})});}_0x1af5e6=_[_0x458b('0x38')]({},_0x1af5e6,_0xf5b8fb['options']);var _0x1f7e31={'where':_0x1af5e6['where']};return db[_0x458b('0x3e')][_0x458b('0x1b')](_0x1f7e31)[_0x458b('0x23')](function(_0x1e0ed2){_0x2d4492['count']=_0x1e0ed2;if(_0xf5b8fb[_0x458b('0x2c')][_0x458b('0x3f')]){_0x1af5e6[_0x458b('0x40')]=[{'all':!![]}];}return db[_0x458b('0x3e')][_0x458b('0x41')](_0x1af5e6);})[_0x458b('0x23')](function(_0x397c46){_0x2d4492[_0x458b('0x42')]=_0x397c46;return _0x2d4492;})[_0x458b('0x23')](respondWithFilteredResult(_0x270ed3,_0x1af5e6))[_0x458b('0x43')](handleError(_0x270ed3,null));};exports[_0x458b('0x44')]=function(_0x15ab62,_0x3148cd){var _0x57bc06={'raw':!![],'where':{'id':_0x15ab62[_0x458b('0x45')]['id']}},_0x20db16={};_0x20db16[_0x458b('0x2a')]=_[_0x458b('0x2b')](db[_0x458b('0x3e')][_0x458b('0x46')]);_0x20db16['query']=_[_0x458b('0x2b')](_0x15ab62['query']);_0x20db16['filters']=_[_0x458b('0x2e')](_0x20db16[_0x458b('0x2a')],_0x20db16[_0x458b('0x2c')]);_0x57bc06['attributes']=_['intersection'](_0x20db16['model'],qs[_0x458b('0x2f')](_0x15ab62[_0x458b('0x2c')][_0x458b('0x2f')]));_0x57bc06[_0x458b('0x30')]=_0x57bc06[_0x458b('0x30')]['length']?_0x57bc06[_0x458b('0x30')]:_0x20db16[_0x458b('0x2a')];if(_0x15ab62['query']['includeAll']){_0x57bc06[_0x458b('0x40')]=[{'all':!![]}];}_0x57bc06=_['merge']({},_0x57bc06,_0x15ab62[_0x458b('0x47')]);return db['ChatTransferReport'][_0x458b('0x48')](_0x57bc06)[_0x458b('0x23')](handleEntityNotFound(_0x3148cd,null))[_0x458b('0x23')](respondWithResult(_0x3148cd,null))[_0x458b('0x43')](handleError(_0x3148cd,null));};exports[_0x458b('0x49')]=function(_0x2b321b,_0x24b699){return db[_0x458b('0x3e')][_0x458b('0x49')](_0x2b321b[_0x458b('0x4a')],{})[_0x458b('0x23')](respondWithResult(_0x24b699,0xc9))['catch'](handleError(_0x24b699,null));};exports[_0x458b('0x4b')]=function(_0xccf952,_0x5622a3){if(_0xccf952[_0x458b('0x4a')]['id']){delete _0xccf952[_0x458b('0x4a')]['id'];}return db[_0x458b('0x3e')][_0x458b('0x48')]({'where':{'id':_0xccf952[_0x458b('0x45')]['id']}})['then'](handleEntityNotFound(_0x5622a3,null))['then'](saveUpdates(_0xccf952[_0x458b('0x4a')],null))[_0x458b('0x23')](respondWithResult(_0x5622a3,null))['catch'](handleError(_0x5622a3,null));};exports['destroy']=function(_0x265d98,_0x5791a0){return db[_0x458b('0x3e')]['find']({'where':{'id':_0x265d98['params']['id']}})['then'](handleEntityNotFound(_0x5791a0,null))['then'](removeEntity(_0x5791a0,null))[_0x458b('0x43')](handleError(_0x5791a0,null));};exports[_0x458b('0x4c')]=function(_0x104188,_0x5daaa7){return db[_0x458b('0x3e')]['describe']()['then'](respondWithResult(_0x5daaa7,null))[_0x458b('0x43')](handleError(_0x5daaa7,null));};
\ No newline at end of file
+var _0xeebc=['sendStatus','error','stack','name','send','ChatTransferReport','rawAttributes','model','keys','query','filters','intersection','attributes','length','hasOwnProperty','limit','sort','where','pick','filter','map','type','VIRTUAL','field','merge','options','include','findAll','rows','catch','show','params','fields','includeAll','create','body','find','describe','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','mustache','util','sox','to-csv','ejs','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','end','status','json','count','offset','set','apply','reject','save','update','then','destroy'];(function(_0x526b66,_0x28f755){var _0x11f386=function(_0x375cdf){while(--_0x375cdf){_0x526b66['push'](_0x526b66['shift']());}};_0x11f386(++_0x28f755);}(_0xeebc,0x6f));var _0xceeb=function(_0x1777ef,_0x565261){_0x1777ef=_0x1777ef-0x0;var _0x690237=_0xeebc[_0x1777ef];return _0x690237;};'use strict';var pdf=require(_0xceeb('0x0'));var emlformat=require(_0xceeb('0x1'));var rimraf=require(_0xceeb('0x2'));var zipdir=require(_0xceeb('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xceeb('0x4'));var moment=require(_0xceeb('0x5'));var BPromise=require('bluebird');var Mustache=require(_0xceeb('0x6'));var util=require(_0xceeb('0x7'));var path=require('path');var sox=require(_0xceeb('0x8'));var csv=require(_0xceeb('0x9'));var ejs=require(_0xceeb('0xa'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xceeb('0xb'));var jsforce=require('jsforce');var deskjs=require(_0xceeb('0xc'));var toCsv=require('to-csv');var querystring=require(_0xceeb('0xd'));var Papa=require(_0xceeb('0xe'));var Redis=require(_0xceeb('0xf'));var authService=require(_0xceeb('0x10'));var qs=require(_0xceeb('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xceeb('0x12'))(_0xceeb('0x13'));var utils=require(_0xceeb('0x14'));var config=require(_0xceeb('0x15'));var db=require(_0xceeb('0x16'))['db'];function respondWithStatusCode(_0xf0a2c,_0x214752){_0x214752=_0x214752||0xcc;return function(_0xc138f7){if(_0xc138f7){return _0xf0a2c['sendStatus'](_0x214752);}return _0xf0a2c['status'](_0x214752)[_0xceeb('0x17')]();};}function respondWithResult(_0x49fb66,_0x56a3e1){_0x56a3e1=_0x56a3e1||0xc8;return function(_0x849356){if(_0x849356){return _0x49fb66[_0xceeb('0x18')](_0x56a3e1)[_0xceeb('0x19')](_0x849356);}};}function respondWithFilteredResult(_0x5ea808,_0x344ae6){return function(_0x4bd1f0){if(_0x4bd1f0){var _0x41b8f4=_0x4bd1f0[_0xceeb('0x1a')],_0x3624ce=_0x344ae6[_0xceeb('0x1b')],_0x1a7fd1=_0x344ae6['offset']+_0x344ae6['limit'],_0x2fc780;if(_0x1a7fd1>=_0x41b8f4){_0x1a7fd1=_0x41b8f4;_0x2fc780=0xc8;}else{_0x2fc780=0xce;}_0x5ea808['status'](_0x2fc780);return _0x5ea808[_0xceeb('0x1c')]('Content-Range',_0x3624ce+'-'+_0x1a7fd1+'/'+_0x41b8f4)[_0xceeb('0x19')](_0x4bd1f0);}return null;};}function patchUpdates(_0x35c414){return function(_0x17b2a1){try{jsonpatch[_0xceeb('0x1d')](_0x17b2a1,_0x35c414,!![]);}catch(_0x34b656){return BPromise[_0xceeb('0x1e')](_0x34b656);}return _0x17b2a1[_0xceeb('0x1f')]();};}function saveUpdates(_0x2064ed,_0x3fe4ac){return function(_0x1cf1c5){if(_0x1cf1c5){return _0x1cf1c5[_0xceeb('0x20')](_0x2064ed)[_0xceeb('0x21')](function(_0x1e81ac){return _0x1e81ac;});}return null;};}function removeEntity(_0x540bca,_0x5de570){return function(_0x531475){if(_0x531475){return _0x531475[_0xceeb('0x22')]()[_0xceeb('0x21')](function(){_0x540bca['status'](0xcc)[_0xceeb('0x17')]();});}};}function handleEntityNotFound(_0x356929,_0x3902a4){return function(_0x3071ef){if(!_0x3071ef){_0x356929[_0xceeb('0x23')](0x194);}return _0x3071ef;};}function handleError(_0x2ec642,_0x4defa7){_0x4defa7=_0x4defa7||0x1f4;return function(_0x13dae9){logger[_0xceeb('0x24')](_0x13dae9[_0xceeb('0x25')]);if(_0x13dae9['name']){delete _0x13dae9[_0xceeb('0x26')];}_0x2ec642['status'](_0x4defa7)[_0xceeb('0x27')](_0x13dae9);};}exports['index']=function(_0x2e5d0c,_0x955b3b){var _0x3adc8a={},_0x6492b0={},_0x49a641={'count':0x0,'rows':[]};var _0x35ba25=db[_0xceeb('0x28')][_0xceeb('0x29')];_0x6492b0[_0xceeb('0x2a')]=_[_0xceeb('0x2b')](_0x35ba25);_0x6492b0[_0xceeb('0x2c')]=_[_0xceeb('0x2b')](_0x2e5d0c[_0xceeb('0x2c')]);_0x6492b0[_0xceeb('0x2d')]=_[_0xceeb('0x2e')](_0x6492b0[_0xceeb('0x2a')],_0x6492b0[_0xceeb('0x2c')]);_0x3adc8a[_0xceeb('0x2f')]=_[_0xceeb('0x2e')](_0x6492b0['model'],qs['fields'](_0x2e5d0c[_0xceeb('0x2c')]['fields']));_0x3adc8a[_0xceeb('0x2f')]=_0x3adc8a['attributes'][_0xceeb('0x30')]?_0x3adc8a['attributes']:_0x6492b0[_0xceeb('0x2a')];if(!_0x2e5d0c[_0xceeb('0x2c')][_0xceeb('0x31')]('nolimit')){_0x3adc8a[_0xceeb('0x32')]=qs[_0xceeb('0x32')](_0x2e5d0c[_0xceeb('0x2c')][_0xceeb('0x32')]);_0x3adc8a[_0xceeb('0x1b')]=qs['offset'](_0x2e5d0c[_0xceeb('0x2c')][_0xceeb('0x1b')]);}_0x3adc8a['order']=qs[_0xceeb('0x33')](_0x2e5d0c['query'][_0xceeb('0x33')]);_0x3adc8a[_0xceeb('0x34')]=qs[_0xceeb('0x2d')](_[_0xceeb('0x35')](_0x2e5d0c[_0xceeb('0x2c')],_0x6492b0[_0xceeb('0x2d')]));if(_0x2e5d0c[_0xceeb('0x2c')][_0xceeb('0x36')]){_0x3adc8a[_0xceeb('0x34')]=_['merge'](_0x3adc8a['where'],{'$or':_[_0xceeb('0x37')](_0x35ba25,function(_0x3837df){if(_0x3837df[_0xceeb('0x38')]['key']!==_0xceeb('0x39')){var _0x5f4510={};_0x5f4510[_0x3837df[_0xceeb('0x3a')]]={'$like':'%'+_0x2e5d0c[_0xceeb('0x2c')][_0xceeb('0x36')]+'%'};return _0x5f4510;}})});}_0x3adc8a=_[_0xceeb('0x3b')]({},_0x3adc8a,_0x2e5d0c[_0xceeb('0x3c')]);var _0x475a62={'where':_0x3adc8a[_0xceeb('0x34')]};return db[_0xceeb('0x28')][_0xceeb('0x1a')](_0x475a62)[_0xceeb('0x21')](function(_0x841763){_0x49a641[_0xceeb('0x1a')]=_0x841763;if(_0x2e5d0c[_0xceeb('0x2c')]['includeAll']){_0x3adc8a[_0xceeb('0x3d')]=[{'all':!![]}];}return db[_0xceeb('0x28')][_0xceeb('0x3e')](_0x3adc8a);})[_0xceeb('0x21')](function(_0x123fdc){_0x49a641[_0xceeb('0x3f')]=_0x123fdc;return _0x49a641;})[_0xceeb('0x21')](respondWithFilteredResult(_0x955b3b,_0x3adc8a))[_0xceeb('0x40')](handleError(_0x955b3b,null));};exports[_0xceeb('0x41')]=function(_0x51c65e,_0x3885b1){var _0x378ce1={'raw':!![],'where':{'id':_0x51c65e[_0xceeb('0x42')]['id']}},_0x5bb864={};_0x5bb864['model']=_[_0xceeb('0x2b')](db['ChatTransferReport'][_0xceeb('0x29')]);_0x5bb864[_0xceeb('0x2c')]=_['keys'](_0x51c65e['query']);_0x5bb864[_0xceeb('0x2d')]=_['intersection'](_0x5bb864[_0xceeb('0x2a')],_0x5bb864[_0xceeb('0x2c')]);_0x378ce1[_0xceeb('0x2f')]=_[_0xceeb('0x2e')](_0x5bb864[_0xceeb('0x2a')],qs[_0xceeb('0x43')](_0x51c65e[_0xceeb('0x2c')][_0xceeb('0x43')]));_0x378ce1[_0xceeb('0x2f')]=_0x378ce1[_0xceeb('0x2f')]['length']?_0x378ce1[_0xceeb('0x2f')]:_0x5bb864[_0xceeb('0x2a')];if(_0x51c65e[_0xceeb('0x2c')][_0xceeb('0x44')]){_0x378ce1[_0xceeb('0x3d')]=[{'all':!![]}];}_0x378ce1=_[_0xceeb('0x3b')]({},_0x378ce1,_0x51c65e[_0xceeb('0x3c')]);return db[_0xceeb('0x28')]['find'](_0x378ce1)[_0xceeb('0x21')](handleEntityNotFound(_0x3885b1,null))[_0xceeb('0x21')](respondWithResult(_0x3885b1,null))[_0xceeb('0x40')](handleError(_0x3885b1,null));};exports[_0xceeb('0x45')]=function(_0x4f4cf1,_0x4ab6cc){return db[_0xceeb('0x28')][_0xceeb('0x45')](_0x4f4cf1['body'],{})[_0xceeb('0x21')](respondWithResult(_0x4ab6cc,0xc9))[_0xceeb('0x40')](handleError(_0x4ab6cc,null));};exports[_0xceeb('0x20')]=function(_0x9a3752,_0x3a2fcd){if(_0x9a3752[_0xceeb('0x46')]['id']){delete _0x9a3752[_0xceeb('0x46')]['id'];}return db['ChatTransferReport'][_0xceeb('0x47')]({'where':{'id':_0x9a3752[_0xceeb('0x42')]['id']}})[_0xceeb('0x21')](handleEntityNotFound(_0x3a2fcd,null))[_0xceeb('0x21')](saveUpdates(_0x9a3752['body'],null))['then'](respondWithResult(_0x3a2fcd,null))[_0xceeb('0x40')](handleError(_0x3a2fcd,null));};exports['destroy']=function(_0x350064,_0x5f0713){return db[_0xceeb('0x28')][_0xceeb('0x47')]({'where':{'id':_0x350064[_0xceeb('0x42')]['id']}})[_0xceeb('0x21')](handleEntityNotFound(_0x5f0713,null))['then'](removeEntity(_0x5f0713,null))[_0xceeb('0x40')](handleError(_0x5f0713,null));};exports[_0xceeb('0x48')]=function(_0x4a1980,_0x1ee455){return db[_0xceeb('0x28')][_0xceeb('0x48')]()[_0xceeb('0x21')](respondWithResult(_0x1ee455,null))[_0xceeb('0x40')](handleError(_0x1ee455,null));};
\ No newline at end of file
index 0491f1f..229962e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x205d=['util','../../config/logger','bluebird','request-promise','path','../../config/environment','./chatTransferReport.attributes','exports','define','ChatTransferReport','report_chat_transfer','uniqueid','lodash'];(function(_0xcc65e9,_0x4ccf83){var _0x45a8c5=function(_0x24e9fe){while(--_0x24e9fe){_0xcc65e9['push'](_0xcc65e9['shift']());}};_0x45a8c5(++_0x4ccf83);}(_0x205d,0xf6));var _0xd205=function(_0x402983,_0x5b1129){_0x402983=_0x402983-0x0;var _0x2dfa7e=_0x205d[_0x402983];return _0x2dfa7e;};'use strict';var _=require(_0xd205('0x0'));var util=require(_0xd205('0x1'));var logger=require(_0xd205('0x2'))('api');var moment=require('moment');var BPromise=require(_0xd205('0x3'));var rp=require(_0xd205('0x4'));var fs=require('fs');var path=require(_0xd205('0x5'));var rimraf=require('rimraf');var config=require(_0xd205('0x6'));var attributes=require(_0xd205('0x7'));module[_0xd205('0x8')]=function(_0x45a533,_0x4c078b){return _0x45a533[_0xd205('0x9')](_0xd205('0xa'),attributes,{'tableName':_0xd205('0xb'),'paranoid':![],'indexes':[{'name':_0xd205('0xc'),'fields':[_0xd205('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x0e21=['define','ChatTransferReport','uniqueid','lodash','moment','bluebird','request-promise','./chatTransferReport.attributes','exports'];(function(_0x428426,_0x306a8a){var _0x2dc25b=function(_0x3c8aae){while(--_0x3c8aae){_0x428426['push'](_0x428426['shift']());}};_0x2dc25b(++_0x306a8a);}(_0x0e21,0x159));var _0x10e2=function(_0x4c6fec,_0xcd96f0){_0x4c6fec=_0x4c6fec-0x0;var _0x1ad284=_0x0e21[_0x4c6fec];return _0x1ad284;};'use strict';var _=require(_0x10e2('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0x10e2('0x1'));var BPromise=require(_0x10e2('0x2'));var rp=require(_0x10e2('0x3'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x10e2('0x4'));module[_0x10e2('0x5')]=function(_0x147e05,_0x191636){return _0x147e05[_0x10e2('0x6')](_0x10e2('0x7'),attributes,{'tableName':'report_chat_transfer','paranoid':![],'indexes':[{'name':_0x10e2('0x8'),'fields':[_0x10e2('0x8')]}],'timestamps':!![]});};
\ No newline at end of file
index e933aa4..4557f35 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8eb=['result','catch','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','http','then','request\x20sent','debug','error','code','ChatTransferReport,\x20%s,\x20%s','message','info'];(function(_0x4cf856,_0x4ae30d){var _0x317752=function(_0xc8f702){while(--_0xc8f702){_0x4cf856['push'](_0x4cf856['shift']());}};_0x317752(++_0x4ae30d);}(_0xd8eb,0x66));var _0xbd8e=function(_0x17406e,_0x1049fd){_0x17406e=_0x17406e-0x0;var _0x2bfc5a=_0xd8eb[_0x17406e];return _0x2bfc5a;};'use strict';var _=require(_0xbd8e('0x0'));var util=require(_0xbd8e('0x1'));var moment=require('moment');var BPromise=require(_0xbd8e('0x2'));var rs=require(_0xbd8e('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xbd8e('0x4'))['db'];var utils=require(_0xbd8e('0x5'));var logger=require(_0xbd8e('0x6'))(_0xbd8e('0x7'));var config=require(_0xbd8e('0x8'));var jayson=require('jayson/promise');var client=jayson['client'][_0xbd8e('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x4a24dd,_0xbe29da,_0x7602aa){return new BPromise(function(_0x485c4f,_0x4501b8){return client['request'](_0x4a24dd,_0x7602aa)[_0xbd8e('0xa')](function(_0x469e17){logger['info']('ChatTransferReport,\x20%s,\x20%s',_0xbe29da,_0xbd8e('0xb'));logger[_0xbd8e('0xc')]('ChatTransferReport,\x20%s,\x20%s,\x20%s',_0xbe29da,_0xbd8e('0xb'),JSON['stringify'](_0x469e17));if(_0x469e17[_0xbd8e('0xd')]){if(_0x469e17[_0xbd8e('0xd')][_0xbd8e('0xe')]===0x1f4){logger['error'](_0xbd8e('0xf'),_0xbe29da,_0x469e17['error']['message']);return _0x4501b8(_0x469e17[_0xbd8e('0xd')][_0xbd8e('0x10')]);}logger[_0xbd8e('0xd')](_0xbd8e('0xf'),_0xbe29da,_0x469e17[_0xbd8e('0xd')][_0xbd8e('0x10')]);return _0x485c4f(_0x469e17[_0xbd8e('0xd')][_0xbd8e('0x10')]);}else{logger[_0xbd8e('0x11')](_0xbd8e('0xf'),_0xbe29da,_0xbd8e('0xb'));_0x485c4f(_0x469e17[_0xbd8e('0x12')][_0xbd8e('0x10')]);}})[_0xbd8e('0x13')](function(_0x4bcae0){logger[_0xbd8e('0xd')](_0xbd8e('0xf'),_0xbe29da,_0x4bcae0);_0x4501b8(_0x4bcae0);});});}
\ No newline at end of file
+var _0x48ea=['../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info','ChatTransferReport,\x20%s,\x20%s','debug','error','code','message','result','catch','lodash','moment','bluebird','randomstring'];(function(_0x4a2b88,_0x2b9e95){var _0x3deed8=function(_0x28caad){while(--_0x28caad){_0x4a2b88['push'](_0x4a2b88['shift']());}};_0x3deed8(++_0x2b9e95);}(_0x48ea,0x9c));var _0xa48e=function(_0x53c727,_0x23d986){_0x53c727=_0x53c727-0x0;var _0x584c22=_0x48ea[_0x53c727];return _0x584c22;};'use strict';var _=require(_0xa48e('0x0'));var util=require('util');var moment=require(_0xa48e('0x1'));var BPromise=require(_0xa48e('0x2'));var rs=require(_0xa48e('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xa48e('0x4'));var logger=require('../../config/logger')(_0xa48e('0x5'));var config=require(_0xa48e('0x6'));var jayson=require(_0xa48e('0x7'));var client=jayson[_0xa48e('0x8')][_0xa48e('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x405033,_0x5213e5,_0x143004){return new BPromise(function(_0x3bdc25,_0x170ffc){return client[_0xa48e('0xa')](_0x405033,_0x143004)[_0xa48e('0xb')](function(_0x3ad947){logger[_0xa48e('0xc')](_0xa48e('0xd'),_0x5213e5,'request\x20sent');logger[_0xa48e('0xe')]('ChatTransferReport,\x20%s,\x20%s,\x20%s',_0x5213e5,'request\x20sent',JSON['stringify'](_0x3ad947));if(_0x3ad947[_0xa48e('0xf')]){if(_0x3ad947[_0xa48e('0xf')][_0xa48e('0x10')]===0x1f4){logger[_0xa48e('0xf')]('ChatTransferReport,\x20%s,\x20%s',_0x5213e5,_0x3ad947[_0xa48e('0xf')][_0xa48e('0x11')]);return _0x170ffc(_0x3ad947[_0xa48e('0xf')][_0xa48e('0x11')]);}logger[_0xa48e('0xf')](_0xa48e('0xd'),_0x5213e5,_0x3ad947[_0xa48e('0xf')]['message']);return _0x3bdc25(_0x3ad947[_0xa48e('0xf')][_0xa48e('0x11')]);}else{logger[_0xa48e('0xc')](_0xa48e('0xd'),_0x5213e5,'request\x20sent');_0x3bdc25(_0x3ad947[_0xa48e('0x12')][_0xa48e('0x11')]);}})[_0xa48e('0x13')](function(_0x28c15c){logger[_0xa48e('0xf')](_0xa48e('0xd'),_0x5213e5,_0x28c15c);_0x170ffc(_0x28c15c);});});}
\ No newline at end of file
index 77fc48a..e73e615 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf230=['Router','../../components/auth/service','../../components/interaction/service','isAuthenticated','index','get','/describe','describe','/:id','show','post','put','exports','multer','util','path','connect-timeout'];(function(_0x4f431d,_0xd51a3b){var _0x4f31e1=function(_0x1c688d){while(--_0x1c688d){_0x4f431d['push'](_0x4f431d['shift']());}};_0x4f31e1(++_0xd51a3b);}(_0xf230,0x1c7));var _0x0f23=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0xf230[_0x2641f9];return _0x585741;};'use strict';var multer=require(_0x0f23('0x0'));var util=require(_0x0f23('0x1'));var path=require(_0x0f23('0x2'));var timeout=require(_0x0f23('0x3'));var express=require('express');var router=express[_0x0f23('0x4')]();var auth=require(_0x0f23('0x5'));var interaction=require(_0x0f23('0x6'));var config=require('../../config/environment');var controller=require('./chatTransferReport.controller');router['get']('/',auth[_0x0f23('0x7')](),controller[_0x0f23('0x8')]);router[_0x0f23('0x9')](_0x0f23('0xa'),auth[_0x0f23('0x7')](),controller[_0x0f23('0xb')]);router['get'](_0x0f23('0xc'),auth[_0x0f23('0x7')](),controller[_0x0f23('0xd')]);router[_0x0f23('0xe')]('/',auth[_0x0f23('0x7')](),controller['create']);router[_0x0f23('0xf')](_0x0f23('0xc'),auth['isAuthenticated'](),controller['update']);router['delete'](_0x0f23('0xc'),auth[_0x0f23('0x7')](),controller['destroy']);module[_0x0f23('0x10')]=router;
\ No newline at end of file
+var _0x7274=['isAuthenticated','index','/:id','show','post','create','put','update','delete','destroy','exports','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatTransferReport.controller','get'];(function(_0x506002,_0x17ad62){var _0x5a020c=function(_0xf907bc){while(--_0xf907bc){_0x506002['push'](_0x506002['shift']());}};_0x5a020c(++_0x17ad62);}(_0x7274,0xd3));var _0x4727=function(_0x5cd3ca,_0x39a78f){_0x5cd3ca=_0x5cd3ca-0x0;var _0x553c11=_0x7274[_0x5cd3ca];return _0x553c11;};'use strict';var multer=require('multer');var util=require(_0x4727('0x0'));var path=require(_0x4727('0x1'));var timeout=require(_0x4727('0x2'));var express=require(_0x4727('0x3'));var router=express['Router']();var auth=require(_0x4727('0x4'));var interaction=require(_0x4727('0x5'));var config=require(_0x4727('0x6'));var controller=require(_0x4727('0x7'));router[_0x4727('0x8')]('/',auth[_0x4727('0x9')](),controller[_0x4727('0xa')]);router[_0x4727('0x8')]('/describe',auth[_0x4727('0x9')](),controller['describe']);router[_0x4727('0x8')](_0x4727('0xb'),auth[_0x4727('0x9')](),controller[_0x4727('0xc')]);router[_0x4727('0xd')]('/',auth[_0x4727('0x9')](),controller[_0x4727('0xe')]);router[_0x4727('0xf')](_0x4727('0xb'),auth[_0x4727('0x9')](),controller[_0x4727('0x10')]);router[_0x4727('0x11')](_0x4727('0xb'),auth[_0x4727('0x9')](),controller[_0x4727('0x12')]);module[_0x4727('0x13')]=router;
\ No newline at end of file
index 7837f00..5b8681e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbfe0=['Send','Skip','thumb','star','input','text','name','getDataValue','onlineForm','parse','setDataValue','stringify','textarea','Comments','offlineForm','generate','All\x20of\x20our\x20agents\x20are\x20busy\x20at\x20this\x20time.\x20Your\x20chat\x20is\x20very\x20important\x20to\x20us.','New\x20offline\x20message\x20from\x20websiteName','You\x20received\x20a\x20new\x20offline\x20message\x20from\x20websiteName.\x20Here\x20you\x20can\x20find\x20the\x20details\x20of\x20the\x20request:','Your\x20request\x20has\x20not\x20been\x20processed.','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','website_alias','bottom_right','alternate','#fafafa','System','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','mandatoryDispositionPauseId','mandatoryDisposition','sequelize','randomstring','exports','STRING','address','email','Agent','#9f946a','#ffffff','BOOLEAN','ENUM','rounded','squared','Chat','Contact\x20us','INTEGER','Powered\x20by\x20xCALLY','TEXT','Do\x20you\x20want\x20to\x20close\x20the\x20interaction?','Form\x20properly\x20submitted','Type\x20a\x20message','Thanks\x20you\x20for\x20your\x20time!'];(function(_0x2adb39,_0x16b799){var _0x2d31b4=function(_0x43ac20){while(--_0x43ac20){_0x2adb39['push'](_0x2adb39['shift']());}};_0x2d31b4(++_0x16b799);}(_0xbfe0,0x1f2));var _0x0bfe=function(_0x2cfb58,_0x3d9412){_0x2cfb58=_0x2cfb58-0x0;var _0xd99951=_0xbfe0[_0x2cfb58];return _0xd99951;};'use strict';var Sequelize=require(_0x0bfe('0x0'));var rs=require(_0x0bfe('0x1'));module[_0x0bfe('0x2')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'address':{'type':Sequelize[_0x0bfe('0x3')],'allowNull':![],'unique':_0x0bfe('0x4')},'description':{'type':Sequelize[_0x0bfe('0x3')]},'mapKey':{'type':Sequelize['STRING'],'defaultValue':'email'},'mapKeyOffline':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':_0x0bfe('0x5')},'key':{'type':Sequelize[_0x0bfe('0x3')],'allowNull':![]},'agentAlias':{'type':Sequelize['STRING'],'defaultValue':_0x0bfe('0x6')},'customerAlias':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':'Me'},'color':{'type':Sequelize[_0x0bfe('0x3')],'allowNull':![],'defaultValue':_0x0bfe('0x7'),'validate':{'notEmpty':!![]}},'color_button':{'type':Sequelize[_0x0bfe('0x3')],'allowNull':![],'defaultValue':_0x0bfe('0x7'),'validate':{'notEmpty':!![]}},'textColor':{'type':Sequelize[_0x0bfe('0x3')],'allowNull':![],'defaultValue':_0x0bfe('0x8'),'validate':{'notEmpty':!![]}},'fontSize':{'type':Sequelize['INTEGER'],'defaultValue':0xf},'remote':{'type':Sequelize[_0x0bfe('0x3')]},'animation':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':!![]},'header_shape':{'type':Sequelize[_0x0bfe('0xa')](_0x0bfe('0xb'),_0x0bfe('0xc')),'defaultValue':_0x0bfe('0xb')},'header_online':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':'We\x20are\x20here!'},'start_chat_button':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':_0x0bfe('0xd')},'offline_chat_button':{'type':Sequelize['STRING'],'defaultValue':'Send'},'header_offline':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':_0x0bfe('0xe')},'download_transcript':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':!![]},'timeout':{'type':Sequelize[_0x0bfe('0xf')],'defaultValue':0x0},'whiteLabel':{'type':Sequelize['STRING'],'defaultValue':_0x0bfe('0x10')},'defaultWhiteLabel':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':!![]},'sitepic':{'type':Sequelize[_0x0bfe('0x11')]},'closingQuestion':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':_0x0bfe('0x12')},'formSubmitSuccessMessage':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':_0x0bfe('0x13')},'formSubmitFailureMessage':{'type':Sequelize['STRING'],'defaultValue':'Form\x20submission\x20error'},'noteTitle':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':'Note'},'placeholderMessage':{'type':Sequelize['STRING'],'defaultValue':_0x0bfe('0x14')},'closingMessage':{'type':Sequelize['STRING'],'defaultValue':_0x0bfe('0x15')},'closingMessageButton':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':_0x0bfe('0x16')},'skipMessageButton':{'type':Sequelize['STRING'],'defaultValue':_0x0bfe('0x17')},'conditionAgreement':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':![]},'enableRating':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'enableFeedback':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':![]},'ratingType':{'type':Sequelize[_0x0bfe('0xa')]('star',_0x0bfe('0x18')),'defaultValue':_0x0bfe('0x19')},'ratingStarsNumber':{'type':Sequelize[_0x0bfe('0xf')],'defaultValue':0x5},'onlineForm':{'type':Sequelize[_0x0bfe('0x11')],'defaultValue':function(){return JSON['stringify']({'items':[{'type':_0x0bfe('0x1a'),'variable':null,'config':{'placeholder':'name','type':_0x0bfe('0x1b'),'required':!![]},'props':{'title':_0x0bfe('0x1c'),'helpText':''}},{'type':_0x0bfe('0x1a'),'props':{'title':_0x0bfe('0x5'),'helpText':''},'config':{'required':!![],'placeholder':_0x0bfe('0x5'),'type':_0x0bfe('0x5')},'variable':null}],'fromKey':0x1});},'get':function(){return this[_0x0bfe('0x1d')](_0x0bfe('0x1e'))?JSON[_0x0bfe('0x1f')](this[_0x0bfe('0x1d')]('onlineForm')):{};},'set':function(_0x4572fb){return this[_0x0bfe('0x20')](_0x0bfe('0x1e'),JSON[_0x0bfe('0x21')](_0x4572fb));}},'offlineForm':{'type':Sequelize[_0x0bfe('0x11')],'defaultValue':function(){return JSON[_0x0bfe('0x21')]({'items':[{'type':_0x0bfe('0x1a'),'props':{'title':_0x0bfe('0x5'),'helpText':''},'config':{'required':!![],'placeholder':_0x0bfe('0x5'),'type':_0x0bfe('0x5')},'variable':null},{'type':_0x0bfe('0x22'),'config':{'placeholder':_0x0bfe('0x23')},'props':{'title':_0x0bfe('0x23'),'helpText':'Leave\x20your\x20comments'}}],'fromKey':0x0});},'get':function(){return this[_0x0bfe('0x1d')](_0x0bfe('0x24'))?JSON[_0x0bfe('0x1f')](this['getDataValue'](_0x0bfe('0x24'))):{};},'set':function(_0x1b8dca){return this[_0x0bfe('0x20')](_0x0bfe('0x24'),JSON[_0x0bfe('0x21')](_0x1b8dca));}},'token':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':function(){return rs[_0x0bfe('0x25')]();}},'autoclose':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':!![]},'enableCustomerWriting':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':![]},'forwardTranscript':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'forwardTranscriptMessage':{'type':Sequelize[_0x0bfe('0x3')]},'forwardOffline':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'forwardOfflineAddress':{'type':Sequelize[_0x0bfe('0x3')]},'waitingTitle':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':_0x0bfe('0x26')},'waitingMessage':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':'Please\x20hold\x20and\x20we\x20will\x20answer\x20your\x20request\x20as\x20soon\x20as\x20possible.'},'offlineMessageSubject':{'type':Sequelize['STRING'],'defaultValue':_0x0bfe('0x27')},'offlineMessageBody':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':_0x0bfe('0x28')},'enableUnmanagedNote':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'unmanagedMessage':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':_0x0bfe('0x29')},'skipUnmanaged':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':'Skip'},'sendUnmanaged':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':'Send'},'enableCustomerAttachment':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':![]},'enableCustomerCheckmarks':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentAvatar':{'type':Sequelize[_0x0bfe('0x11')]},'showAgentAvatar':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':![]},'timezone':{'type':Sequelize['STRING']},'notificationTemplate':{'type':Sequelize['TEXT'],'defaultValue':function(){return _0x0bfe('0x2a');}},'notificationSound':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':![]},'hideWhenOffline':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':![]},'agentIdentifier':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':_0x0bfe('0x2b')},'waitForTheAssignedAgent':{'type':Sequelize[_0x0bfe('0xf')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'alignment':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':_0x0bfe('0x2c')},'verticalAlignment':{'type':Sequelize['INTEGER'],'defaultValue':0x1e},'messagesAlignment':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':_0x0bfe('0x2d')},'defaultTitle':{'type':Sequelize[_0x0bfe('0x3')]},'customerAvatar':{'type':Sequelize[_0x0bfe('0x11')]},'showCustomerAvatar':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':![]},'messageFontSize':{'type':Sequelize[_0x0bfe('0xf')],'defaultValue':0xc},'backgroundColor':{'type':Sequelize[_0x0bfe('0x3')],'allowNull':![],'defaultValue':_0x0bfe('0x2e'),'validate':{'notEmpty':!![]}},'queueTransfer':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'systemAlias':{'type':Sequelize[_0x0bfe('0x3')],'defaultValue':_0x0bfe('0x2f')},'systemAvatar':{'type':Sequelize[_0x0bfe('0x11')]},'mandatoryDispositionPauseId':{'type':Sequelize[_0x0bfe('0xf')],'comment':_0x0bfe('0x30')},'mandatoryDisposition':{'type':Sequelize[_0x0bfe('0x9')],'defaultValue':![],'comment':_0x0bfe('0x31'),'set':function(_0x6bd8cf){if(!_0x6bd8cf)this[_0x0bfe('0x20')](_0x0bfe('0x32'),null);this['setDataValue'](_0x0bfe('0x33'),_0x6bd8cf);}}};
\ No newline at end of file
+var _0x0e30=['stringify','textarea','Comments','offlineForm','generate','All\x20of\x20our\x20agents\x20are\x20busy\x20at\x20this\x20time.\x20Your\x20chat\x20is\x20very\x20important\x20to\x20us.','Please\x20hold\x20and\x20we\x20will\x20answer\x20your\x20request\x20as\x20soon\x20as\x20possible.','You\x20received\x20a\x20new\x20offline\x20message\x20from\x20websiteName.\x20Here\x20you\x20can\x20find\x20the\x20details\x20of\x20the\x20request:','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','website_alias','bottom_right','alternate','#fafafa','System','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','mandatoryDispositionPauseId','mandatoryDisposition','randomstring','exports','STRING','address','Agent','#9f946a','#ffffff','INTEGER','BOOLEAN','ENUM','rounded','squared','We\x20are\x20here!','Chat','Send','Contact\x20us','Powered\x20by\x20xCALLY','TEXT','Do\x20you\x20want\x20to\x20close\x20the\x20interaction?','Form\x20properly\x20submitted','Form\x20submission\x20error','Note','Type\x20a\x20message','Thanks\x20you\x20for\x20your\x20time!','Skip','star','thumb','input','name','text','email','getDataValue','onlineForm','parse','setDataValue'];(function(_0x53d757,_0x4be50e){var _0x15c1c4=function(_0x12ce44){while(--_0x12ce44){_0x53d757['push'](_0x53d757['shift']());}};_0x15c1c4(++_0x4be50e);}(_0x0e30,0x150));var _0x00e3=function(_0x931e28,_0x3dcfb4){_0x931e28=_0x931e28-0x0;var _0x4e6d25=_0x0e30[_0x931e28];return _0x4e6d25;};'use strict';var Sequelize=require('sequelize');var rs=require(_0x00e3('0x0'));module[_0x00e3('0x1')]={'name':{'type':Sequelize[_0x00e3('0x2')],'allowNull':![]},'address':{'type':Sequelize[_0x00e3('0x2')],'allowNull':![],'unique':_0x00e3('0x3')},'description':{'type':Sequelize[_0x00e3('0x2')]},'mapKey':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':'email'},'mapKeyOffline':{'type':Sequelize['STRING'],'defaultValue':'email'},'key':{'type':Sequelize['STRING'],'allowNull':![]},'agentAlias':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0x4')},'customerAlias':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':'Me'},'color':{'type':Sequelize[_0x00e3('0x2')],'allowNull':![],'defaultValue':'#9f946a','validate':{'notEmpty':!![]}},'color_button':{'type':Sequelize[_0x00e3('0x2')],'allowNull':![],'defaultValue':_0x00e3('0x5'),'validate':{'notEmpty':!![]}},'textColor':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x00e3('0x6'),'validate':{'notEmpty':!![]}},'fontSize':{'type':Sequelize[_0x00e3('0x7')],'defaultValue':0xf},'remote':{'type':Sequelize[_0x00e3('0x2')]},'animation':{'type':Sequelize[_0x00e3('0x8')],'defaultValue':!![]},'header_shape':{'type':Sequelize[_0x00e3('0x9')](_0x00e3('0xa'),_0x00e3('0xb')),'defaultValue':'rounded'},'header_online':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0xc')},'start_chat_button':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0xd')},'offline_chat_button':{'type':Sequelize['STRING'],'defaultValue':_0x00e3('0xe')},'header_offline':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0xf')},'download_transcript':{'type':Sequelize[_0x00e3('0x8')],'defaultValue':!![]},'timeout':{'type':Sequelize[_0x00e3('0x7')],'defaultValue':0x0},'whiteLabel':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0x10')},'defaultWhiteLabel':{'type':Sequelize[_0x00e3('0x8')],'defaultValue':!![]},'sitepic':{'type':Sequelize[_0x00e3('0x11')]},'closingQuestion':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0x12')},'formSubmitSuccessMessage':{'type':Sequelize['STRING'],'defaultValue':_0x00e3('0x13')},'formSubmitFailureMessage':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0x14')},'noteTitle':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0x15')},'placeholderMessage':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0x16')},'closingMessage':{'type':Sequelize['STRING'],'defaultValue':_0x00e3('0x17')},'closingMessageButton':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0xe')},'skipMessageButton':{'type':Sequelize['STRING'],'defaultValue':_0x00e3('0x18')},'conditionAgreement':{'type':Sequelize[_0x00e3('0x8')],'defaultValue':![]},'enableRating':{'type':Sequelize[_0x00e3('0x8')],'defaultValue':![]},'enableFeedback':{'type':Sequelize[_0x00e3('0x8')],'defaultValue':![]},'ratingType':{'type':Sequelize['ENUM'](_0x00e3('0x19'),_0x00e3('0x1a')),'defaultValue':'star'},'ratingStarsNumber':{'type':Sequelize[_0x00e3('0x7')],'defaultValue':0x5},'onlineForm':{'type':Sequelize[_0x00e3('0x11')],'defaultValue':function(){return JSON['stringify']({'items':[{'type':_0x00e3('0x1b'),'variable':null,'config':{'placeholder':_0x00e3('0x1c'),'type':_0x00e3('0x1d'),'required':!![]},'props':{'title':_0x00e3('0x1c'),'helpText':''}},{'type':_0x00e3('0x1b'),'props':{'title':'email','helpText':''},'config':{'required':!![],'placeholder':_0x00e3('0x1e'),'type':_0x00e3('0x1e')},'variable':null}],'fromKey':0x1});},'get':function(){return this[_0x00e3('0x1f')](_0x00e3('0x20'))?JSON[_0x00e3('0x21')](this[_0x00e3('0x1f')]('onlineForm')):{};},'set':function(_0x153ee5){return this[_0x00e3('0x22')](_0x00e3('0x20'),JSON[_0x00e3('0x23')](_0x153ee5));}},'offlineForm':{'type':Sequelize[_0x00e3('0x11')],'defaultValue':function(){return JSON[_0x00e3('0x23')]({'items':[{'type':_0x00e3('0x1b'),'props':{'title':_0x00e3('0x1e'),'helpText':''},'config':{'required':!![],'placeholder':_0x00e3('0x1e'),'type':_0x00e3('0x1e')},'variable':null},{'type':_0x00e3('0x24'),'config':{'placeholder':_0x00e3('0x25')},'props':{'title':'Comments','helpText':'Leave\x20your\x20comments'}}],'fromKey':0x0});},'get':function(){return this[_0x00e3('0x1f')](_0x00e3('0x26'))?JSON[_0x00e3('0x21')](this['getDataValue'](_0x00e3('0x26'))):{};},'set':function(_0x2c4513){return this['setDataValue'](_0x00e3('0x26'),JSON[_0x00e3('0x23')](_0x2c4513));}},'token':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':function(){return rs[_0x00e3('0x27')]();}},'autoclose':{'type':Sequelize[_0x00e3('0x8')],'defaultValue':!![]},'enableCustomerWriting':{'type':Sequelize[_0x00e3('0x8')],'defaultValue':![]},'forwardTranscript':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'forwardTranscriptMessage':{'type':Sequelize[_0x00e3('0x2')]},'forwardOffline':{'type':Sequelize[_0x00e3('0x8')],'defaultValue':![]},'forwardOfflineAddress':{'type':Sequelize['STRING']},'waitingTitle':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0x28')},'waitingMessage':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0x29')},'offlineMessageSubject':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':'New\x20offline\x20message\x20from\x20websiteName'},'offlineMessageBody':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0x2a')},'enableUnmanagedNote':{'type':Sequelize[_0x00e3('0x8')],'defaultValue':!![]},'unmanagedMessage':{'type':Sequelize['STRING'],'defaultValue':'Your\x20request\x20has\x20not\x20been\x20processed.'},'skipUnmanaged':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0x18')},'sendUnmanaged':{'type':Sequelize['STRING'],'defaultValue':_0x00e3('0xe')},'enableCustomerAttachment':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'enableCustomerCheckmarks':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentAvatar':{'type':Sequelize[_0x00e3('0x11')]},'showAgentAvatar':{'type':Sequelize[_0x00e3('0x8')],'defaultValue':![]},'timezone':{'type':Sequelize[_0x00e3('0x2')]},'notificationTemplate':{'type':Sequelize['TEXT'],'defaultValue':function(){return _0x00e3('0x2b');}},'notificationSound':{'type':Sequelize[_0x00e3('0x8')],'defaultValue':!![]},'notificationShake':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'hideWhenOffline':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentIdentifier':{'type':Sequelize['STRING'],'defaultValue':_0x00e3('0x2c')},'waitForTheAssignedAgent':{'type':Sequelize[_0x00e3('0x7')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'alignment':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0x2d')},'verticalAlignment':{'type':Sequelize[_0x00e3('0x7')],'defaultValue':0x1e},'messagesAlignment':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0x2e')},'defaultTitle':{'type':Sequelize['STRING']},'customerAvatar':{'type':Sequelize['TEXT']},'showCustomerAvatar':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'messageFontSize':{'type':Sequelize[_0x00e3('0x7')],'defaultValue':0xc},'backgroundColor':{'type':Sequelize[_0x00e3('0x2')],'allowNull':![],'defaultValue':_0x00e3('0x2f'),'validate':{'notEmpty':!![]}},'queueTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x00e3('0x7')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'systemAlias':{'type':Sequelize[_0x00e3('0x2')],'defaultValue':_0x00e3('0x30')},'systemAvatar':{'type':Sequelize[_0x00e3('0x11')]},'mandatoryDispositionPauseId':{'type':Sequelize['INTEGER'],'comment':_0x00e3('0x31')},'mandatoryDisposition':{'type':Sequelize[_0x00e3('0x8')],'defaultValue':![],'comment':_0x00e3('0x32'),'set':function(_0x20dba2){if(!_0x20dba2)this[_0x00e3('0x22')](_0x00e3('0x33'),null);this[_0x00e3('0x22')](_0x00e3('0x34'),_0x20dba2);}}};
\ No newline at end of file
index adb0381..0cdad6a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3311=['send','from\x20is\x20mandatory','mapKeyOffline','mapKeyOffline\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','findOrCreate','server/files/templates/chatOfflineMessage.ejs','utf8','render','MailServerOut','Smtp','service','host','port','secure','auth','pass','SendMail','sendMail','\x22%s\x22\x20<%s>','email','forwardOfflineAddress','offlineMessageSubject','addInteraction','omit','getInteractions','Contact','fullname','internal','Tag','Tags','tag','Command','getSnippet','timezone','interval','iftime\x20%s','true','[%s][INTERVAL][%s]\x20%s\x20%s\x20(%s)','ONLINE','OFFLINE','No\x20timezone','Interval','virtual','License','increment','Intervals','all','some','server/files/chat/iframe.js','remote','x-forwarded-for','remoteAddress','alignment','verticalAlignment','addApplications','sequelize','transaction','getApplications','addProactiveActions','ChatProactiveAction','getProactiveActions','getFields','online','false','offlineForm','onlineForm','items','getOfflineMessages','ChatOfflineMessage','addAgents','emit','removeAgents','isArray','userChatWebsite:remove','getAgents','User','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','defaults','redis','localhost','socket.io-emitter','register','jayson/promise','client','http','test','request','then','info','ChatWebsite,\x20%s,\x20%s','ChatWebsite,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','update','destroy','get','ChatWebsites','name','index','Pause','mandatoryDispositionPause','ChatWebsite','rawAttributes','model','query','keys','filters','attributes','fields','nolimit','sort','where','pick','merge','type','VIRTUAL','field','filter','options','includeAll','findAll','rows','params','intersection','length','include','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','find','describe','addDisposition','ChatWebsiteId','Disposition','order','map','removeDispositions','ids','addAnswer','getAnswers','findOne','CannedAnswer','hasOwnProperty','removeAnswers','addLogo','sitepic','file','filename','addAvatar','customerAvatar','addSystemAvatar','systemAvatar','getLogo','join','server/files/images/logos/default_logo.png','../../config/license/util','getLicense','custom','isNil','server/files/images/logos/','root','download','server/files/images/avatars/default_avatar.png','existsSync','server/files/images/avatars/','agentAvatar','showCustomerAvatar','getSystemAvatar','server/files/images/avatars/system_avatar.png','notify','setUA','headers','getResult','CmContact','Sequelize','ValidationError','no\x20available\x20attributes','difference','createdAt','updatedAt','CompanyId','ListId','from','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','CmList','List','DESC','ChatApplication','Applications','account','applications','list','orderBy','priority','asc','firstName','customerIp','referer','browser','version','format','unknown','%s\x20%s','device','vendor','stringify','threadId','ChatInteraction','externalUrl','ContactId','interaction','spread','contact','lastName','messageId','created','autoclose','push','close','unmanaged','*,*,*,*','ChatMessage','AttachmentId','UserId','unshift','agent','waitForTheAssignedAgent','forcedOwnership','Start','startRouting','EventManager','offline'];(function(_0x31218c,_0x28ae34){var _0x13e4ab=function(_0x3e0521){while(--_0x3e0521){_0x31218c['push'](_0x31218c['shift']());}};_0x13e4ab(++_0x28ae34);}(_0x3311,0x165));var _0x1331=function(_0x478cb6,_0x3b9e9b){_0x478cb6=_0x478cb6-0x0;var _0x5205d7=_0x3311[_0x478cb6];return _0x5205d7;};'use strict';var pdf=require(_0x1331('0x0'));var emlformat=require(_0x1331('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x1331('0x2'));var jsonpatch=require(_0x1331('0x3'));var rp=require(_0x1331('0x4'));var moment=require(_0x1331('0x5'));var BPromise=require(_0x1331('0x6'));var Mustache=require(_0x1331('0x7'));var util=require(_0x1331('0x8'));var path=require(_0x1331('0x9'));var sox=require(_0x1331('0xa'));var csv=require(_0x1331('0xb'));var ejs=require(_0x1331('0xc'));var fs=require('fs');var _=require(_0x1331('0xd'));var squel=require(_0x1331('0xe'));var crypto=require(_0x1331('0xf'));var jsforce=require('jsforce');var deskjs=require(_0x1331('0x10'));var toCsv=require(_0x1331('0xb'));var querystring=require(_0x1331('0x11'));var Papa=require('papaparse');var Redis=require(_0x1331('0x12'));var authService=require(_0x1331('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x1331('0x14'));var logger=require(_0x1331('0x15'))(_0x1331('0x16'));var utils=require(_0x1331('0x17'));var config=require(_0x1331('0x18'));var db=require(_0x1331('0x19'))['db'];config['redis']=_[_0x1331('0x1a')](config[_0x1331('0x1b')],{'host':_0x1331('0x1c'),'port':0x18eb});var socket=require(_0x1331('0x1d'))(new Redis(config[_0x1331('0x1b')]));require('./chatWebsite.socket')[_0x1331('0x1e')](socket);var jayson=require(_0x1331('0x1f'));var client=jayson[_0x1331('0x20')][_0x1331('0x21')]({'port':0x232c});var client9002=jayson['client'][_0x1331('0x21')]({'port':0x232a});var client9003=jayson[_0x1331('0x20')][_0x1331('0x21')]({'port':0x232b});function checkPasswordPattern(_0xfab67c,_0x109028,_0x4e076e){if(_0x4e076e){var _0x438497=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x438497[_0x1331('0x22')](_0x109028)){return _0xfab67c;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0xfab67c;}}function respondWithRpcPromise(_0x460c1c,_0x92f1db,_0x4faa1d,_0x20bb0b){return new BPromise(function(_0xf4a528,_0xe2f1bd){var _0x45288b=_0x20bb0b||client;return _0x45288b[_0x1331('0x23')](_0x460c1c,_0x4faa1d)[_0x1331('0x24')](function(_0x1f9ccd){logger[_0x1331('0x25')](_0x1331('0x26'),_0x92f1db,'request\x20sent');logger['debug'](_0x1331('0x27'),_0x92f1db,_0x1331('0x28'),JSON['stringify'](_0x1f9ccd));if(_0x1f9ccd[_0x1331('0x29')]){if(_0x1f9ccd[_0x1331('0x29')][_0x1331('0x2a')]===0x1f4){logger[_0x1331('0x29')](_0x1331('0x26'),_0x92f1db,_0x1f9ccd['error']['message']);return _0xe2f1bd(_0x1f9ccd['error'][_0x1331('0x2b')]);}logger['error'](_0x1331('0x26'),_0x92f1db,_0x1f9ccd[_0x1331('0x29')][_0x1331('0x2b')]);return _0xf4a528(_0x1f9ccd[_0x1331('0x29')][_0x1331('0x2b')]);}else{logger['info'](_0x1331('0x26'),_0x92f1db,'request\x20sent');_0xf4a528(_0x1f9ccd[_0x1331('0x2c')][_0x1331('0x2b')]);}})[_0x1331('0x2d')](function(_0x29ea7d){logger[_0x1331('0x29')](_0x1331('0x26'),_0x92f1db,_0x29ea7d);_0xe2f1bd(_0x29ea7d);});});}function respondWithStatusCode(_0xefa2e4,_0x5842f3){_0x5842f3=_0x5842f3||0xcc;return function(_0x54067d){if(_0x54067d){return _0xefa2e4[_0x1331('0x2e')](_0x5842f3);}return _0xefa2e4[_0x1331('0x2f')](_0x5842f3)[_0x1331('0x30')]();};}function respondWithResult(_0x26b651,_0x23e3aa){_0x23e3aa=_0x23e3aa||0xc8;return function(_0x21d299){if(_0x21d299){return _0x26b651[_0x1331('0x2f')](_0x23e3aa)[_0x1331('0x31')](_0x21d299);}};}function respondWithFilteredResult(_0x5ee568,_0x60b563){return function(_0x1cedbd){if(_0x1cedbd){var _0x18dad2=_0x1cedbd[_0x1331('0x32')],_0x2a3420=_0x60b563[_0x1331('0x33')],_0x3bdcba=_0x60b563[_0x1331('0x33')]+_0x60b563[_0x1331('0x34')],_0x8925e7;if(_0x3bdcba>=_0x18dad2){_0x3bdcba=_0x18dad2;_0x8925e7=0xc8;}else{_0x8925e7=0xce;}_0x5ee568[_0x1331('0x2f')](_0x8925e7);return _0x5ee568[_0x1331('0x35')]('Content-Range',_0x2a3420+'-'+_0x3bdcba+'/'+_0x18dad2)[_0x1331('0x31')](_0x1cedbd);}return null;};}function patchUpdates(_0x3717be){return function(_0x35d94c){try{jsonpatch[_0x1331('0x36')](_0x35d94c,_0x3717be,!![]);}catch(_0x5b9826){return BPromise[_0x1331('0x37')](_0x5b9826);}return _0x35d94c[_0x1331('0x38')]();};}function saveUpdates(_0x1527af,_0x3b283e){return function(_0x5f379e){if(_0x5f379e){return _0x5f379e[_0x1331('0x39')](_0x1527af)['then'](function(_0x3a5647){return _0x3a5647;});}return null;};}function removeEntity(_0xd387b8,_0x441c20){return function(_0x324d2e){if(_0x324d2e){return _0x324d2e[_0x1331('0x3a')]()['then'](function(){var _0x52cfcc=_0x324d2e[_0x1331('0x3b')]({'plain':!![]});var _0x3f18a9=_0x1331('0x3c');return db['UserProfileResource'][_0x1331('0x3a')]({'where':{'type':_0x3f18a9,'resourceId':_0x52cfcc['id']}})['then'](function(){return _0x324d2e;});})[_0x1331('0x24')](function(){_0xd387b8[_0x1331('0x2f')](0xcc)['end']();});}};}function handleEntityNotFound(_0x16405e,_0x5220d9){return function(_0x3bb947){if(!_0x3bb947){_0x16405e['sendStatus'](0x194);}return _0x3bb947;};}function handleError(_0x2d1760,_0x108c58){_0x108c58=_0x108c58||0x1f4;return function(_0x399802){logger['error'](_0x399802['stack']);if(_0x399802[_0x1331('0x3d')]){delete _0x399802[_0x1331('0x3d')];}_0x2d1760['status'](_0x108c58)['send'](_0x399802);};}exports[_0x1331('0x3e')]=function(_0x194fa1,_0x3585f3){var _0x3b4b51={'include':[{'model':db[_0x1331('0x3f')],'as':_0x1331('0x40')}]},_0x29cfad={},_0x392b1f={'count':0x0,'rows':[]};var _0x242008=db[_0x1331('0x41')][_0x1331('0x42')];_0x29cfad[_0x1331('0x43')]=_['keys'](_0x242008);_0x29cfad[_0x1331('0x44')]=_[_0x1331('0x45')](_0x194fa1['query']);_0x29cfad[_0x1331('0x46')]=_['intersection'](_0x29cfad['model'],_0x29cfad[_0x1331('0x44')]);_0x3b4b51[_0x1331('0x47')]=_['intersection'](_0x29cfad[_0x1331('0x43')],qs[_0x1331('0x48')](_0x194fa1[_0x1331('0x44')]['fields']));_0x3b4b51[_0x1331('0x47')]=_0x3b4b51[_0x1331('0x47')]['length']?_0x3b4b51['attributes']:_0x29cfad[_0x1331('0x43')];if(!_0x194fa1['query']['hasOwnProperty'](_0x1331('0x49'))){_0x3b4b51[_0x1331('0x34')]=qs[_0x1331('0x34')](_0x194fa1[_0x1331('0x44')][_0x1331('0x34')]);_0x3b4b51['offset']=qs[_0x1331('0x33')](_0x194fa1[_0x1331('0x44')][_0x1331('0x33')]);}_0x3b4b51['order']=qs[_0x1331('0x4a')](_0x194fa1[_0x1331('0x44')][_0x1331('0x4a')]);_0x3b4b51[_0x1331('0x4b')]=qs['filters'](_[_0x1331('0x4c')](_0x194fa1[_0x1331('0x44')],_0x29cfad['filters']));if(_0x194fa1[_0x1331('0x44')]['filter']){_0x3b4b51[_0x1331('0x4b')]=_[_0x1331('0x4d')](_0x3b4b51['where'],{'$or':_['map'](_0x242008,function(_0x1e185b){if(_0x1e185b[_0x1331('0x4e')]['key']!==_0x1331('0x4f')){var _0x412478={};_0x412478[_0x1e185b[_0x1331('0x50')]]={'$like':'%'+_0x194fa1[_0x1331('0x44')][_0x1331('0x51')]+'%'};return _0x412478;}})});}_0x3b4b51=_[_0x1331('0x4d')]({},_0x3b4b51,_0x194fa1[_0x1331('0x52')]);var _0x18f882={'where':_0x3b4b51[_0x1331('0x4b')]};return db[_0x1331('0x41')]['count'](_0x18f882)[_0x1331('0x24')](function(_0x2889ca){_0x392b1f['count']=_0x2889ca;if(_0x194fa1[_0x1331('0x44')][_0x1331('0x53')]){_0x3b4b51['include']=[{'all':!![]}];}return db[_0x1331('0x41')][_0x1331('0x54')](_0x3b4b51);})[_0x1331('0x24')](function(_0x11f9cb){_0x392b1f[_0x1331('0x55')]=_0x11f9cb;return _0x392b1f;})[_0x1331('0x24')](respondWithFilteredResult(_0x3585f3,_0x3b4b51))['catch'](handleError(_0x3585f3,null));};exports['show']=function(_0x40340a,_0x1484ea){var _0x11d9d0={'raw':![],'where':{'id':_0x40340a[_0x1331('0x56')]['id']},'include':[{'model':db[_0x1331('0x3f')],'as':_0x1331('0x40')}]},_0x5905fa={};_0x5905fa[_0x1331('0x43')]=_['keys'](db[_0x1331('0x41')][_0x1331('0x42')]);_0x5905fa[_0x1331('0x44')]=_[_0x1331('0x45')](_0x40340a[_0x1331('0x44')]);_0x5905fa[_0x1331('0x46')]=_[_0x1331('0x57')](_0x5905fa[_0x1331('0x43')],_0x5905fa[_0x1331('0x44')]);_0x11d9d0[_0x1331('0x47')]=_[_0x1331('0x57')](_0x5905fa[_0x1331('0x43')],qs[_0x1331('0x48')](_0x40340a[_0x1331('0x44')]['fields']));_0x11d9d0['attributes']=_0x11d9d0[_0x1331('0x47')][_0x1331('0x58')]?_0x11d9d0[_0x1331('0x47')]:_0x5905fa['model'];if(_0x40340a[_0x1331('0x44')][_0x1331('0x53')]){_0x11d9d0[_0x1331('0x59')]=[{'all':!![]}];}_0x11d9d0=_[_0x1331('0x4d')]({},_0x11d9d0,_0x40340a[_0x1331('0x52')]);return db['ChatWebsite']['find'](_0x11d9d0)['then'](handleEntityNotFound(_0x1484ea,null))[_0x1331('0x24')](respondWithResult(_0x1484ea,null))['catch'](handleError(_0x1484ea,null));};exports[_0x1331('0x5a')]=function(_0xbfb9ae,_0x2016bc){return db[_0x1331('0x41')]['create'](_0xbfb9ae[_0x1331('0x5b')],{})[_0x1331('0x24')](function(_0x434594){var _0x5c746b=_0xbfb9ae[_0x1331('0x5c')][_0x1331('0x3b')]({'plain':!![]});if(!_0x5c746b)throw new Error(_0x1331('0x5d'));if(_0x5c746b[_0x1331('0x5e')]===_0x1331('0x5c')){var _0x253361=_0x434594[_0x1331('0x3b')]({'plain':!![]});var _0x58c7fc=_0x1331('0x3c');return db[_0x1331('0x5f')]['find']({'where':{'name':_0x58c7fc,'userProfileId':_0x5c746b[_0x1331('0x60')]},'raw':!![]})[_0x1331('0x24')](function(_0x38a7cc){if(_0x38a7cc&&_0x38a7cc[_0x1331('0x61')]===0x0){return db['UserProfileResource'][_0x1331('0x5a')]({'name':_0x253361[_0x1331('0x3d')],'resourceId':_0x253361['id'],'type':_0x38a7cc[_0x1331('0x3d')],'sectionId':_0x38a7cc['id']},{})['then'](function(){return _0x434594;});}else{return _0x434594;}})[_0x1331('0x2d')](function(_0x6d4c11){logger['error'](_0x1331('0x62'),_0x6d4c11);throw _0x6d4c11;});}return _0x434594;})['then'](respondWithResult(_0x2016bc,0xc9))[_0x1331('0x2d')](handleError(_0x2016bc,null));};exports[_0x1331('0x39')]=function(_0x50abd7,_0x53e515){if(_0x50abd7['body']['id']){delete _0x50abd7[_0x1331('0x5b')]['id'];}return db['ChatWebsite'][_0x1331('0x63')]({'where':{'id':_0x50abd7[_0x1331('0x56')]['id']},'include':[{'model':db['Pause'],'as':'mandatoryDispositionPause'}]})[_0x1331('0x24')](handleEntityNotFound(_0x53e515,null))[_0x1331('0x24')](saveUpdates(_0x50abd7[_0x1331('0x5b')],null))['then'](respondWithResult(_0x53e515,null))[_0x1331('0x2d')](handleError(_0x53e515,null));};exports[_0x1331('0x3a')]=function(_0x1beec7,_0x45f252){return db[_0x1331('0x41')][_0x1331('0x63')]({'where':{'id':_0x1beec7[_0x1331('0x56')]['id']}})[_0x1331('0x24')](handleEntityNotFound(_0x45f252,null))[_0x1331('0x24')](removeEntity(_0x45f252,null))[_0x1331('0x2d')](handleError(_0x45f252,null));};exports[_0x1331('0x64')]=function(_0x3183b5,_0x106507){return db['ChatWebsite'][_0x1331('0x64')]()[_0x1331('0x24')](respondWithResult(_0x106507,null))[_0x1331('0x2d')](handleError(_0x106507,null));};exports[_0x1331('0x65')]=function(_0x33b5ed,_0x10c230,_0x43ce7b){if(_0x33b5ed['body']['id']){delete _0x33b5ed[_0x1331('0x5b')]['id'];}return db[_0x1331('0x41')][_0x1331('0x63')]({'where':{'id':_0x33b5ed['params']['id']}})['then'](handleEntityNotFound(_0x10c230,null))[_0x1331('0x24')](function(_0x2cee84){if(_0x2cee84){_0x33b5ed[_0x1331('0x5b')][_0x1331('0x66')]=_0x2cee84['id'];return db[_0x1331('0x67')]['create'](_0x33b5ed[_0x1331('0x5b')]);}})[_0x1331('0x24')](respondWithResult(_0x10c230,null))[_0x1331('0x2d')](handleError(_0x10c230,null));};exports['getDispositions']=function(_0xe63ae8,_0x4ace41,_0x2ed7d8){var _0x336911={'raw':![],'where':{}};var _0x3f8477={};var _0x3736ae={'count':0x0,'rows':[]};return db[_0x1331('0x41')]['findOne']({'where':{'id':_0xe63ae8[_0x1331('0x56')]['id']}})['then'](handleEntityNotFound(_0x4ace41,null))[_0x1331('0x24')](function(_0x3ff7f9){if(_0x3ff7f9){_0x3f8477['model']=_[_0x1331('0x45')](db['Disposition'][_0x1331('0x42')]);_0x3f8477[_0x1331('0x44')]=_[_0x1331('0x45')](_0xe63ae8[_0x1331('0x44')]);_0x3f8477[_0x1331('0x46')]=_['intersection'](_0x3f8477[_0x1331('0x43')],_0x3f8477[_0x1331('0x44')]);_0x336911[_0x1331('0x47')]=_['intersection'](_0x3f8477[_0x1331('0x43')],qs['fields'](_0xe63ae8['query']['fields']));_0x336911[_0x1331('0x47')]=_0x336911[_0x1331('0x47')][_0x1331('0x58')]?_0x336911['attributes']:_0x3f8477[_0x1331('0x43')];if(!_0xe63ae8[_0x1331('0x44')]['hasOwnProperty']('nolimit')){_0x336911[_0x1331('0x34')]=qs['limit'](_0xe63ae8[_0x1331('0x44')][_0x1331('0x34')]);_0x336911['offset']=qs[_0x1331('0x33')](_0xe63ae8[_0x1331('0x44')][_0x1331('0x33')]);}_0x336911[_0x1331('0x68')]=qs[_0x1331('0x4a')](_0xe63ae8['query'][_0x1331('0x4a')]);_0x336911['where']=qs[_0x1331('0x46')](_[_0x1331('0x4c')](_0xe63ae8[_0x1331('0x44')],_0x3f8477[_0x1331('0x46')]));_0x336911[_0x1331('0x4b')]['ChatWebsiteId']=_0x3ff7f9['id'];if(_0xe63ae8[_0x1331('0x44')][_0x1331('0x51')]){_0x336911['where']=_[_0x1331('0x4d')](_0x336911[_0x1331('0x4b')],{'$or':_[_0x1331('0x69')](_0x336911[_0x1331('0x47')],function(_0x304100){var _0xdaf9e0={};_0xdaf9e0[_0x304100]={'$like':'%'+_0xe63ae8[_0x1331('0x44')][_0x1331('0x51')]+'%'};return _0xdaf9e0;})});}_0x336911=_[_0x1331('0x4d')]({},_0x336911,_0xe63ae8[_0x1331('0x52')]);return db[_0x1331('0x67')][_0x1331('0x32')]({'where':_0x336911[_0x1331('0x4b')]})[_0x1331('0x24')](function(_0x47f780){_0x3736ae[_0x1331('0x32')]=_0x47f780;if(_0xe63ae8[_0x1331('0x44')]['includeAll']){_0x336911[_0x1331('0x59')]=[{'all':!![]}];}return db[_0x1331('0x67')][_0x1331('0x54')](_0x336911);})['then'](function(_0x4d5f3f){_0x3736ae[_0x1331('0x55')]=_0x4d5f3f;return _0x3736ae;});}})[_0x1331('0x24')](respondWithFilteredResult(_0x4ace41,_0x336911))[_0x1331('0x2d')](handleError(_0x4ace41,null));};exports[_0x1331('0x6a')]=function(_0x3bd746,_0x52160f,_0x492086){return db[_0x1331('0x41')][_0x1331('0x63')]({'where':{'id':_0x3bd746[_0x1331('0x56')]['id']}})[_0x1331('0x24')](handleEntityNotFound(_0x52160f,null))[_0x1331('0x24')](function(_0xe6d1ac){if(_0xe6d1ac){return _0xe6d1ac[_0x1331('0x6a')](_0x3bd746[_0x1331('0x44')][_0x1331('0x6b')]);}})[_0x1331('0x24')](respondWithStatusCode(_0x52160f,null))[_0x1331('0x2d')](handleError(_0x52160f,null));};exports[_0x1331('0x6c')]=function(_0xbca5a5,_0x1b7fdf,_0x501b4f){if(_0xbca5a5[_0x1331('0x5b')]['id']){delete _0xbca5a5[_0x1331('0x5b')]['id'];}return db[_0x1331('0x41')][_0x1331('0x63')]({'where':{'id':_0xbca5a5[_0x1331('0x56')]['id']}})[_0x1331('0x24')](handleEntityNotFound(_0x1b7fdf,null))['then'](function(_0x1b85fc){if(_0x1b85fc){_0xbca5a5['body']['ChatWebsiteId']=_0x1b85fc['id'];return db['CannedAnswer']['create'](_0xbca5a5[_0x1331('0x5b')]);}})['then'](respondWithResult(_0x1b7fdf,null))[_0x1331('0x2d')](handleError(_0x1b7fdf,null));};exports[_0x1331('0x6d')]=function(_0x7c7e1a,_0x4dfac7,_0x3127f5){var _0x5e853e={'raw':![],'where':{}};var _0x38b585={};var _0x2185d1={'count':0x0,'rows':[]};return db[_0x1331('0x41')][_0x1331('0x6e')]({'where':{'id':_0x7c7e1a[_0x1331('0x56')]['id']}})[_0x1331('0x24')](handleEntityNotFound(_0x4dfac7,null))[_0x1331('0x24')](function(_0x4143d1){if(_0x4143d1){_0x38b585[_0x1331('0x43')]=_[_0x1331('0x45')](db[_0x1331('0x6f')][_0x1331('0x42')]);_0x38b585['query']=_[_0x1331('0x45')](_0x7c7e1a[_0x1331('0x44')]);_0x38b585[_0x1331('0x46')]=_['intersection'](_0x38b585['model'],_0x38b585[_0x1331('0x44')]);_0x5e853e[_0x1331('0x47')]=_[_0x1331('0x57')](_0x38b585['model'],qs['fields'](_0x7c7e1a[_0x1331('0x44')][_0x1331('0x48')]));_0x5e853e[_0x1331('0x47')]=_0x5e853e[_0x1331('0x47')][_0x1331('0x58')]?_0x5e853e[_0x1331('0x47')]:_0x38b585[_0x1331('0x43')];if(!_0x7c7e1a[_0x1331('0x44')][_0x1331('0x70')](_0x1331('0x49'))){_0x5e853e[_0x1331('0x34')]=qs[_0x1331('0x34')](_0x7c7e1a[_0x1331('0x44')][_0x1331('0x34')]);_0x5e853e['offset']=qs[_0x1331('0x33')](_0x7c7e1a[_0x1331('0x44')][_0x1331('0x33')]);}_0x5e853e[_0x1331('0x68')]=qs[_0x1331('0x4a')](_0x7c7e1a[_0x1331('0x44')][_0x1331('0x4a')]);_0x5e853e[_0x1331('0x4b')]=qs[_0x1331('0x46')](_['pick'](_0x7c7e1a['query'],_0x38b585[_0x1331('0x46')]));_0x5e853e[_0x1331('0x4b')]['ChatWebsiteId']=_0x4143d1['id'];if(_0x7c7e1a[_0x1331('0x44')]['filter']){_0x5e853e['where']=_[_0x1331('0x4d')](_0x5e853e[_0x1331('0x4b')],{'$or':_[_0x1331('0x69')](_0x5e853e[_0x1331('0x47')],function(_0x3cdac1){var _0x4d6afa={};_0x4d6afa[_0x3cdac1]={'$like':'%'+_0x7c7e1a['query'][_0x1331('0x51')]+'%'};return _0x4d6afa;})});}_0x5e853e=_[_0x1331('0x4d')]({},_0x5e853e,_0x7c7e1a[_0x1331('0x52')]);return db[_0x1331('0x6f')][_0x1331('0x32')]({'where':_0x5e853e[_0x1331('0x4b')]})[_0x1331('0x24')](function(_0x362637){_0x2185d1['count']=_0x362637;if(_0x7c7e1a['query'][_0x1331('0x53')]){_0x5e853e['include']=[{'all':!![]}];}return db[_0x1331('0x6f')][_0x1331('0x54')](_0x5e853e);})['then'](function(_0x25af60){_0x2185d1[_0x1331('0x55')]=_0x25af60;return _0x2185d1;});}})['then'](respondWithFilteredResult(_0x4dfac7,_0x5e853e))['catch'](handleError(_0x4dfac7,null));};exports[_0x1331('0x71')]=function(_0x25e2a4,_0x2fbe7b,_0x1a132d){return db[_0x1331('0x41')][_0x1331('0x63')]({'where':{'id':_0x25e2a4[_0x1331('0x56')]['id']}})[_0x1331('0x24')](handleEntityNotFound(_0x2fbe7b,null))[_0x1331('0x24')](function(_0xa90244){if(_0xa90244){return _0xa90244[_0x1331('0x71')](_0x25e2a4[_0x1331('0x44')][_0x1331('0x6b')]);}})[_0x1331('0x24')](respondWithStatusCode(_0x2fbe7b,null))[_0x1331('0x2d')](handleError(_0x2fbe7b,null));};exports[_0x1331('0x72')]=function(_0x4a2668,_0xf58bbd,_0x1b85c3){_0x4a2668[_0x1331('0x5b')][_0x1331('0x73')]=_0x4a2668[_0x1331('0x74')][_0x1331('0x75')];return db[_0x1331('0x41')][_0x1331('0x63')]({'where':{'id':_0x4a2668[_0x1331('0x56')]['id']}})[_0x1331('0x24')](handleEntityNotFound(_0xf58bbd,null))[_0x1331('0x24')](saveUpdates(_0x4a2668['body'],null))['then'](respondWithResult(_0xf58bbd,null))[_0x1331('0x2d')](handleError(_0xf58bbd,null));};exports[_0x1331('0x76')]=function(_0x843f9e,_0x3c04be,_0x2d1445){_0x843f9e[_0x1331('0x5b')]['agentAvatar']=_0x843f9e[_0x1331('0x74')][_0x1331('0x75')];return db[_0x1331('0x41')][_0x1331('0x63')]({'where':{'id':_0x843f9e[_0x1331('0x56')]['id']}})[_0x1331('0x24')](handleEntityNotFound(_0x3c04be,null))[_0x1331('0x24')](saveUpdates(_0x843f9e[_0x1331('0x5b')],null))['then'](respondWithResult(_0x3c04be,null))['catch'](handleError(_0x3c04be,null));};exports['addCustomerAvatar']=function(_0x542d01,_0x2dc1da,_0x15760c){_0x542d01[_0x1331('0x5b')][_0x1331('0x77')]=_0x542d01['file'][_0x1331('0x75')];return db['ChatWebsite'][_0x1331('0x63')]({'where':{'id':_0x542d01[_0x1331('0x56')]['id']}})['then'](handleEntityNotFound(_0x2dc1da,null))['then'](saveUpdates(_0x542d01[_0x1331('0x5b')],null))[_0x1331('0x24')](respondWithResult(_0x2dc1da,null))[_0x1331('0x2d')](handleError(_0x2dc1da,null));};exports[_0x1331('0x78')]=function(_0xf8299a,_0x3619e2,_0x384939){_0xf8299a[_0x1331('0x5b')][_0x1331('0x79')]=_0xf8299a[_0x1331('0x74')][_0x1331('0x75')];return db[_0x1331('0x41')][_0x1331('0x63')]({'where':{'id':_0xf8299a['params']['id']}})['then'](handleEntityNotFound(_0x3619e2,null))['then'](saveUpdates(_0xf8299a[_0x1331('0x5b')],null))['then'](respondWithResult(_0x3619e2,null))[_0x1331('0x2d')](handleError(_0x3619e2,null));};exports[_0x1331('0x7a')]=function(_0x3bee9c,_0xc5c383,_0x20f749){var _0x5bbc50=path[_0x1331('0x7b')](config['root'],_0x1331('0x7c'));var _0x13de72={'where':{'id':_0x3bee9c[_0x1331('0x56')]['id']},'attributes':['id',_0x1331('0x73')],'raw':!![]};var _0x328f0f=![];return require(_0x1331('0x7d'))[_0x1331('0x7e')]()['then'](function(_0x3b9593){if(_0x3b9593){_0x328f0f=_0x3b9593[_0x1331('0x7f')];}})[_0x1331('0x24')](function(){return db[_0x1331('0x41')][_0x1331('0x63')](_0x13de72);})[_0x1331('0x24')](handleEntityNotFound(_0xc5c383,null))[_0x1331('0x24')](function(_0x5c0d9f){if(_0x5c0d9f){if(!_[_0x1331('0x80')](_0x5c0d9f['sitepic'])){if(fs['existsSync'](path['join'](config['root'],_0x1331('0x81'),_0x5c0d9f[_0x1331('0x73')]))&&_0x328f0f){_0x5bbc50=path[_0x1331('0x7b')](config[_0x1331('0x82')],_0x1331('0x81'),_0x5c0d9f[_0x1331('0x73')]);}}return _0xc5c383[_0x1331('0x83')](_0x5bbc50);}})[_0x1331('0x2d')](handleError(_0xc5c383,null));};exports['getAvatar']=function(_0x2e60b1,_0x467ef0,_0x34ad9d){var _0x247310=path[_0x1331('0x7b')](config[_0x1331('0x82')],_0x1331('0x84'));var _0x10f66a={'where':{'id':_0x2e60b1['params']['id']},'attributes':['id','agentAvatar'],'raw':!![]};return db['ChatWebsite'][_0x1331('0x63')](_0x10f66a)[_0x1331('0x24')](handleEntityNotFound(_0x467ef0,null))['then'](function(_0x6ba1b0){if(_0x6ba1b0){if(!_['isNil'](_0x6ba1b0['agentAvatar'])){if(fs[_0x1331('0x85')](path[_0x1331('0x7b')](config[_0x1331('0x82')],_0x1331('0x86'),_0x6ba1b0[_0x1331('0x87')]))){_0x247310=path[_0x1331('0x7b')](config[_0x1331('0x82')],_0x1331('0x86'),_0x6ba1b0[_0x1331('0x87')]);}}return _0x467ef0[_0x1331('0x83')](_0x247310);}})[_0x1331('0x2d')](handleError(_0x467ef0,null));};exports['getCustomerAvatar']=function(_0x43253d,_0x546d8c,_0x3d3ede){var _0x506c0e=path[_0x1331('0x7b')](config['root'],'server/files/images/avatars/customer_avatar.png');var _0x5bac67={'where':{'id':_0x43253d['params']['id']},'attributes':['id',_0x1331('0x77'),_0x1331('0x88')],'raw':!![]};return db[_0x1331('0x41')][_0x1331('0x63')](_0x5bac67)[_0x1331('0x24')](handleEntityNotFound(_0x546d8c,null))[_0x1331('0x24')](function(_0x45b64b){if(_0x45b64b){if(!_['isNil'](_0x45b64b[_0x1331('0x77')])){if(fs[_0x1331('0x85')](path[_0x1331('0x7b')](config[_0x1331('0x82')],_0x1331('0x86'),_0x45b64b['customerAvatar']))&&_0x45b64b[_0x1331('0x88')]){_0x506c0e=path['join'](config['root'],'server/files/images/avatars/',_0x45b64b[_0x1331('0x77')]);}}return _0x546d8c[_0x1331('0x83')](_0x506c0e);}})[_0x1331('0x2d')](handleError(_0x546d8c,null));};exports[_0x1331('0x89')]=function(_0x4bff3d,_0x33b461,_0x4a4563){var _0x201445=path['join'](config[_0x1331('0x82')],_0x1331('0x8a'));var _0x169ce8={'where':{'id':_0x4bff3d[_0x1331('0x56')]['id']},'attributes':['id',_0x1331('0x79')],'raw':!![]};return db['ChatWebsite'][_0x1331('0x63')](_0x169ce8)[_0x1331('0x24')](handleEntityNotFound(_0x33b461,null))['then'](function(_0x2db432){if(_0x2db432){if(!_[_0x1331('0x80')](_0x2db432[_0x1331('0x79')])){if(fs[_0x1331('0x85')](path[_0x1331('0x7b')](config[_0x1331('0x82')],_0x1331('0x86'),_0x2db432[_0x1331('0x79')]))){_0x201445=path['join'](config['root'],_0x1331('0x86'),_0x2db432['systemAvatar']);}}return _0x33b461[_0x1331('0x83')](_0x201445);}})[_0x1331('0x2d')](handleError(_0x33b461,null));};exports[_0x1331('0x8b')]=function(_0x7b6bcd,_0x279aed,_0x126e7f){var _0x4841c5=require('user-agent-parser');var _0x2c9206=new _0x4841c5();var _0x5b4164=_0x2c9206[_0x1331('0x8c')](_0x7b6bcd[_0x1331('0x8d')]['user-agent'])[_0x1331('0x8e')]();var _0x1e2a21={'body':_0x7b6bcd['body'],'channel':'chat'};var _0x11bb83=[];var _0x356f3c=[];var _0x2b053c={};var _0x549e0f=![];return db[_0x1331('0x8f')][_0x1331('0x64')]()[_0x1331('0x24')](function(_0x2c6e7e){if(!_0x2c6e7e){throw new db[(_0x1331('0x90'))][(_0x1331('0x91'))](_0x1331('0x92'));}_0x11bb83=_[_0x1331('0x93')](_['keys'](_0x2c6e7e),[_0x1331('0x94'),_0x1331('0x95')]);_0x356f3c=_[_0x1331('0x93')](_[_0x1331('0x45')](_0x2c6e7e),[_0x1331('0x94'),_0x1331('0x95'),_0x1331('0x96'),_0x1331('0x97')]);if(_0x7b6bcd[_0x1331('0x5b')]['id']){delete _0x7b6bcd[_0x1331('0x5b')]['id'];}if(_[_0x1331('0x80')](_0x7b6bcd[_0x1331('0x5b')][_0x1331('0x98')])){throw new db[(_0x1331('0x90'))]['ValidationError']('from\x20is\x20mandatory');}if(_[_0x1331('0x80')](_0x7b6bcd[_0x1331('0x5b')][_0x1331('0x5b')])||_0x7b6bcd['body']['body']===''){throw new db['Sequelize'][(_0x1331('0x91'))](_0x1331('0x99'));}if(_[_0x1331('0x80')](_0x7b6bcd[_0x1331('0x5b')][_0x1331('0x9a')])){throw new db[(_0x1331('0x90'))][(_0x1331('0x91'))](_0x1331('0x9b')+_0x356f3c);}if(!_[_0x1331('0x9c')](_0x356f3c,_0x7b6bcd[_0x1331('0x5b')][_0x1331('0x9a')])){throw new db[(_0x1331('0x90'))][(_0x1331('0x91'))]('mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x356f3c);}_0x2b053c[_0x7b6bcd['body'][_0x1331('0x9a')]]=_0x7b6bcd[_0x1331('0x5b')][_0x1331('0x98')];})[_0x1331('0x24')](function(){return db['ChatWebsite']['find']({'where':{'id':_0x7b6bcd['params']['id']},'include':[{'model':db[_0x1331('0x9d')],'as':_0x1331('0x9e'),'include':[{'model':db['CmContact'],'as':'Contacts','where':_0x2b053c,'limit':0x1,'order':[[_0x1331('0x95'),_0x1331('0x9f')]]}]},{'model':db[_0x1331('0xa0')],'as':_0x1331('0xa1')}]});})[_0x1331('0x24')](handleEntityNotFound(_0x279aed,null))[_0x1331('0x24')](function(_0x70e204){if(_0x70e204&&_0x70e204['List']){_0x1e2a21[_0x1331('0xa2')]=_0x70e204;_0x1e2a21[_0x1331('0xa3')]=_0x70e204[_0x1331('0xa1')];_0x1e2a21[_0x1331('0xa4')]=_0x70e204[_0x1331('0x9e')];_0x1e2a21[_0x1331('0xa3')]=_[_0x1331('0xa5')](_0x1e2a21[_0x1331('0xa3')],[_0x1331('0xa6')],[_0x1331('0xa7')]);if(_0x1e2a21[_0x1331('0xa2')][_0x1331('0xa1')]){delete _0x1e2a21[_0x1331('0xa2')][_0x1331('0xa1')];}if(_0x1e2a21[_0x1331('0xa2')][_0x1331('0x9e')]&&_0x1e2a21[_0x1331('0xa2')]['List']['Contacts'][_0x1331('0x58')]){return _0x1e2a21[_0x1331('0xa2')][_0x1331('0x9e')]['Contacts'][0x0];}var _0xadee73=_[_0x1331('0x1a')](_0x7b6bcd[_0x1331('0x5b')],{'firstName':_0x7b6bcd[_0x1331('0x5b')][_0x1331('0x98')],'ListId':_0x70e204['ListId']});_0xadee73[_0x7b6bcd[_0x1331('0x5b')][_0x1331('0x9a')]]=_0x7b6bcd['body']['from'];return db[_0x1331('0x8f')]['create'](_0xadee73,{'fields':_0x11bb83,'raw':!![]});}})[_0x1331('0x24')](handleEntityNotFound(_0x279aed,null))[_0x1331('0x24')](function(_0x57b1c5){_0x1e2a21['contact']=_0x57b1c5;if(_0x57b1c5){var _0x211c45={'ContactId':_0x57b1c5['id'],'ChatWebsiteId':_0x7b6bcd[_0x1331('0x56')]['id'],'from':(_0x57b1c5[_0x1331('0xa8')]||'')+'\x20'+(_0x57b1c5['lastName']||''),'customerIp':_0x7b6bcd['body'][_0x1331('0xa9')],'referer':_0x7b6bcd[_0x1331('0x5b')][_0x1331('0xaa')],'browserName':_0x5b4164[_0x1331('0xab')][_0x1331('0x3d')]&&_0x5b4164['browser'][_0x1331('0xac')]?util[_0x1331('0xad')]('%s\x20%s',_0x5b4164[_0x1331('0xab')]['name'],_0x5b4164[_0x1331('0xab')][_0x1331('0xac')]):'unknown','browserVersion':_0x5b4164[_0x1331('0xab')][_0x1331('0xac')]||_0x1331('0xae'),'osName':util[_0x1331('0xad')](_0x1331('0xaf'),_0x5b4164['os'][_0x1331('0x3d')],_0x5b4164['os']['version']),'osVersion':_0x5b4164['os'][_0x1331('0xac')],'deviceModel':_0x5b4164['device'][_0x1331('0x43')]&&_0x5b4164[_0x1331('0xb0')][_0x1331('0xb1')]?util['format']('%s\x20%s\x20%s',_0x5b4164[_0x1331('0xb0')][_0x1331('0x43')],_0x5b4164[_0x1331('0xb0')][_0x1331('0xb1')],_0x5b4164[_0x1331('0xb0')][_0x1331('0x4e')]):null,'deviceVendor':_0x5b4164[_0x1331('0xb0')][_0x1331('0xb1')],'deviceType':_0x5b4164[_0x1331('0xb0')][_0x1331('0x4e')],'formData':JSON[_0x1331('0xb2')](_0x7b6bcd[_0x1331('0x5b')])};var _0x5f498f={'ChatWebsiteId':_0x7b6bcd[_0x1331('0x56')]['id'],'closed':![]};if(_0x7b6bcd['body'][_0x1331('0xb3')]){_0x5f498f[_0x1331('0xb3')]=_0x7b6bcd[_0x1331('0x5b')][_0x1331('0xb3')];return db[_0x1331('0xb4')][_0x1331('0x63')]({'where':_0x5f498f})[_0x1331('0x24')](function(_0xef9d8){if(_0xef9d8){return[_0xef9d8,![]];}_0x211c45[_0x1331('0xb3')]=_0x7b6bcd[_0x1331('0x5b')][_0x1331('0xb3')];_0x211c45[_0x1331('0xb5')]=_0x7b6bcd[_0x1331('0x5b')]['externalUrl'];return db[_0x1331('0xb4')][_0x1331('0x5a')](_0x211c45)[_0x1331('0x24')](function(_0x106bdf){return[_0x106bdf,!![]];});});}_0x5f498f[_0x1331('0xb6')]=_0x57b1c5['id'];if(_0x7b6bcd[_0x1331('0x5b')][_0x1331('0xb7')]&&_0x7b6bcd['body'][_0x1331('0xb7')]['id']){_0x5f498f['id']=_0x7b6bcd[_0x1331('0x5b')]['interaction']['id'];return db[_0x1331('0xb4')]['find']({'where':_0x5f498f})[_0x1331('0x24')](function(_0x16b6d9){if(_0x16b6d9){return[_0x16b6d9,![]];}return db[_0x1331('0xb4')][_0x1331('0x5a')](_0x211c45)[_0x1331('0x24')](function(_0x18a3ee){return[_0x18a3ee,!![]];});});}return db['ChatInteraction'][_0x1331('0x5a')](_0x211c45)[_0x1331('0x24')](function(_0x3caffb){return[_0x3caffb,!![]];});}})[_0x1331('0xb8')](function(_0x26597d,_0x4df81b){if(_0x26597d){_0x549e0f=_0x4df81b;if(!_0x4df81b){var _0x2421ba={'from':(_0x1e2a21[_0x1331('0xb9')][_0x1331('0xa8')]||'')+'\x20'+(_0x1e2a21[_0x1331('0xb9')][_0x1331('0xba')]||'')};if(_0x7b6bcd[_0x1331('0x5b')][_0x1331('0xb3')]&&_0x7b6bcd[_0x1331('0x5b')][_0x1331('0xbb')]&&_0x7b6bcd[_0x1331('0x5b')][_0x1331('0xb3')]!=_0x7b6bcd[_0x1331('0x5b')][_0x1331('0xbb')]){_0x2421ba[_0x1331('0xb3')]=_0x7b6bcd[_0x1331('0x5b')][_0x1331('0xbb')];}return _0x26597d[_0x1331('0x39')](_0x2421ba);}else{return _0x26597d;}}})[_0x1331('0x24')](function(_0x1c1e8a){_0x1e2a21[_0x1331('0xb7')]=_0x1c1e8a[_0x1331('0x3b')]({'plain':!![]});_0x1e2a21[_0x1331('0xb7')][_0x1331('0xbc')]=_0x549e0f;if(_0x1e2a21[_0x1331('0xb7')]['created']){if(_0x1e2a21[_0x1331('0xa2')][_0x1331('0xbd')]){_0x1e2a21[_0x1331('0xa3')][_0x1331('0xbe')]({'id':0x0,'priority':_0x1e2a21['applications'][_0x1331('0x58')]+0x1,'app':_0x1331('0xbf'),'appdata':_0x1331('0xc0'),'interval':_0x1331('0xc1')});}}return db[_0x1331('0xc2')][_0x1331('0x5a')]({'body':_0x7b6bcd[_0x1331('0x5b')][_0x1331('0x5b')],'ChatWebsiteId':_0x7b6bcd[_0x1331('0x56')]['id'],'ChatInteractionId':_0x1c1e8a['id'],'direction':'in','ContactId':_0x1e2a21[_0x1331('0xb9')]['id'],'AttachmentId':_0x7b6bcd[_0x1331('0x5b')][_0x1331('0xc3')]});})[_0x1331('0x24')](function(_0x31de09){_0x1e2a21['message']=_0x31de09;if(_0x1e2a21[_0x1331('0xb7')]['UserId']){return db['User'][_0x1331('0x63')]({'attributes':['id','name'],'where':{'id':_0x1e2a21[_0x1331('0xb7')][_0x1331('0xc4')]}})['then'](function(_0x8ee8e5){if(_0x8ee8e5){_0x1e2a21['applications'][_0x1331('0xc5')]({'id':0x0,'priority':0x0,'app':_0x1331('0xc6'),'appdata':_0x8ee8e5[_0x1331('0x3d')]+','+(_0x1e2a21[_0x1331('0xa2')][_0x1331('0xc7')]||0xa),'interval':_0x1331('0xc1')});_0x1e2a21[_0x1331('0xc8')]=!![];}return respondWithRpcPromise(_0x1331('0xc9'),'startRouting',_0x1e2a21);});}return respondWithRpcPromise(_0x1331('0xc9'),_0x1331('0xca'),_0x1e2a21);})[_0x1331('0x24')](function(_0x3a6b62){respondWithRpcPromise(_0x1331('0xcb'),_0x1331('0xcb'),{'event':_0x1331('0x8b'),'message':_0x3a6b62},client9002);return _0x3a6b62;})[_0x1331('0x24')](respondWithResult(_0x279aed,null))['catch'](handleError(_0x279aed,null));};exports[_0x1331('0xcc')]=function(_0x4cdb75,_0x3bd3a7,_0x5a28c3){var _0x52238f,_0x219ade,_0x407dd4;var _0x60021c=[];var _0x4c96f8=[];var _0x581068={};return db[_0x1331('0x8f')][_0x1331('0x64')]()[_0x1331('0x24')](function(_0x13ef49){if(!_0x13ef49){throw new db['Sequelize'][(_0x1331('0x91'))](_0x1331('0x92'));}_0x4c96f8=_[_0x1331('0x93')](_[_0x1331('0x45')](_0x13ef49),[_0x1331('0x94'),_0x1331('0x95')]);_0x60021c=_[_0x1331('0x93')](_['keys'](_0x13ef49),[_0x1331('0x94'),_0x1331('0x95'),_0x1331('0x96'),_0x1331('0x97')]);if(_0x4cdb75[_0x1331('0x5b')]['id']){delete _0x4cdb75['body']['id'];}if(_[_0x1331('0x80')](_0x4cdb75[_0x1331('0x5b')][_0x1331('0x98')])){throw _0x3bd3a7[_0x1331('0x2f')](0x1f4)[_0x1331('0xcd')](new db[(_0x1331('0x90'))][(_0x1331('0x91'))](_0x1331('0xce')));}if(_['isNil'](_0x4cdb75[_0x1331('0x5b')][_0x1331('0x5b')])||_0x4cdb75[_0x1331('0x5b')][_0x1331('0x5b')]===''){throw _0x3bd3a7['status'](0x1f4)[_0x1331('0xcd')](new db['Sequelize'][(_0x1331('0x91'))]('body\x20is\x20mandatory\x20and\x20not\x20empty'));}if(_[_0x1331('0x80')](_0x4cdb75['body'][_0x1331('0xcf')])){throw _0x3bd3a7[_0x1331('0x2f')](0x1f4)[_0x1331('0xcd')](new db['Sequelize'][(_0x1331('0x91'))]('mapKeyOffline\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x60021c));}if(!_[_0x1331('0x9c')](_0x60021c,_0x4cdb75[_0x1331('0x5b')][_0x1331('0xcf')])){throw _0x3bd3a7[_0x1331('0x2f')](0x1f4)[_0x1331('0xcd')](new db[(_0x1331('0x90'))][(_0x1331('0x91'))](_0x1331('0xd0')+_0x60021c));}_0x581068[_0x4cdb75['body']['mapKeyOffline']]=_0x4cdb75[_0x1331('0x5b')]['from'];})[_0x1331('0x24')](function(){return db[_0x1331('0x41')][_0x1331('0x63')]({'where':{'id':_0x4cdb75[_0x1331('0x56')]['id']},'include':[{'model':db[_0x1331('0x9d')],'as':'List'}]});})[_0x1331('0x24')](handleEntityNotFound(_0x3bd3a7,null))[_0x1331('0x24')](function(_0x525d0e){if(_0x525d0e&&_0x525d0e[_0x1331('0x9e')]){_0x219ade=_0x525d0e;var _0x96abad=_[_0x1331('0x1a')](_0x4cdb75[_0x1331('0x5b')],{'firstName':_0x4cdb75[_0x1331('0x5b')]['from'],'phone':_0x4cdb75[_0x1331('0x5b')][_0x1331('0x98')],'ListId':_0x525d0e[_0x1331('0x97')]});_0x96abad[_0x4cdb75['body'][_0x1331('0xcf')]]=_0x4cdb75[_0x1331('0x5b')][_0x1331('0x98')];return db[_0x1331('0x8f')][_0x1331('0xd1')]({'where':_0x581068,'defaults':_0x96abad});}})[_0x1331('0xb8')](function(_0x516e25){if(_0x516e25){_0x407dd4=_0x516e25;var _0x287032=fs['readFileSync'](path['join'](config['root'],_0x1331('0xd2')),_0x1331('0xd3'));var _0x55fe1d=ejs[_0x1331('0xd4')](_0x287032,{'body':_['toPairs'](_0x4cdb75[_0x1331('0x5b')][_0x1331('0x5b')]),'bodyTitle':_0x219ade['offlineMessageBody']});return db['ChatOfflineMessage']['create']({'body':_0x55fe1d,'ContactId':_0x516e25['id'],'ChatWebsiteId':_0x219ade['id']});}})[_0x1331('0x24')](function(_0x4dc1f0){if(_0x4dc1f0){_0x52238f=_0x4dc1f0;return db['MailAccount']['findOne']({'where':{'service':!![]},'include':[{'model':db[_0x1331('0xd5')],'as':_0x1331('0xd6'),'raw':!![]}]});}})[_0x1331('0x24')](function(_0x42f145){if(_0x42f145&&_0x42f145[_0x1331('0xd6')]&&_0x219ade['forwardOfflineAddress']){var _0x12da8d={'tls':{'rejectUnauthorized':![]}};if(_0x42f145[_0x1331('0xd6')][_0x1331('0xd7')]){_0x12da8d[_0x1331('0xd7')]=_0x42f145['Smtp'][_0x1331('0xd7')];}else{_0x12da8d[_0x1331('0xd8')]=_0x42f145[_0x1331('0xd6')]['host'];_0x12da8d[_0x1331('0xd9')]=_0x42f145[_0x1331('0xd6')][_0x1331('0xd9')];_0x12da8d[_0x1331('0xda')]=_0x42f145[_0x1331('0xd6')]['secure'];}if(_0x42f145[_0x1331('0xd6')]['authentication']){_0x12da8d[_0x1331('0xdb')]={'user':_0x42f145[_0x1331('0xd6')]['user'],'pass':_0x42f145[_0x1331('0xd6')][_0x1331('0xdc')]};}return respondWithRpcPromise(_0x1331('0xdd'),_0x1331('0xde'),{'account':_0x12da8d,'message':{'from':util[_0x1331('0xad')](_0x1331('0xdf'),_0x42f145['name'],_0x42f145[_0x1331('0xe0')]||_0x42f145[_0x1331('0xd6')][_0x1331('0x5c')]),'to':_0x219ade[_0x1331('0xe1')],'subject':_0x219ade[_0x1331('0xe2')],'text':_0x52238f[_0x1331('0x5b')]}},client9003)[_0x1331('0x24')](function(){return _0x52238f;})['catch'](function(_0x1fb452){console[_0x1331('0x29')](_0x1fb452);});}})[_0x1331('0x24')](function(){if(_0x52238f){return _0x52238f;}})[_0x1331('0x24')](respondWithResult(_0x3bd3a7,null))[_0x1331('0x2d')](handleError(_0x3bd3a7,null));};exports[_0x1331('0xe3')]=function(_0x111696,_0x277054,_0xa2dc4b){return db[_0x1331('0xb4')][_0x1331('0x63')]({'where':{'id':_0x111696[_0x1331('0x56')]['id']}})[_0x1331('0x24')](handleEntityNotFound(_0x277054,null))[_0x1331('0x24')](function(_0x1267c2){if(_0x1267c2){return _0x1267c2[_0x1331('0xe3')](_0x111696[_0x1331('0x5b')][_0x1331('0x6b')],_[_0x1331('0xe4')](_0x111696[_0x1331('0x5b')],[_0x1331('0x6b'),'id'])||{});}})['then'](respondWithResult(_0x277054,null))[_0x1331('0x2d')](handleError(_0x277054,null));};exports[_0x1331('0xe5')]=function(_0x1c9602,_0x217f55,_0xc5559e){var _0x37ae29={'raw':![],'where':{}};var _0x5d307e={};var _0x291902={'count':0x0,'rows':[]};return db['ChatWebsite'][_0x1331('0x6e')]({'where':{'id':_0x1c9602[_0x1331('0x56')]['id']}})[_0x1331('0x24')](handleEntityNotFound(_0x217f55,null))[_0x1331('0x24')](function(_0x7029fe){if(_0x7029fe){_0x5d307e[_0x1331('0x43')]=_[_0x1331('0x45')](db['ChatInteraction']['rawAttributes']);_0x5d307e['query']=_[_0x1331('0x45')](_0x1c9602[_0x1331('0x44')]);_0x5d307e[_0x1331('0x46')]=_['intersection'](_0x5d307e[_0x1331('0x43')],_0x5d307e[_0x1331('0x44')]);_0x37ae29['attributes']=_[_0x1331('0x57')](_0x5d307e[_0x1331('0x43')],qs['fields'](_0x1c9602[_0x1331('0x44')][_0x1331('0x48')]));_0x37ae29['attributes']=_0x37ae29[_0x1331('0x47')]['length']?_0x37ae29['attributes']:_0x5d307e['model'];if(!_0x1c9602[_0x1331('0x44')]['hasOwnProperty'](_0x1331('0x49'))){_0x37ae29[_0x1331('0x34')]=qs[_0x1331('0x34')](_0x1c9602[_0x1331('0x44')][_0x1331('0x34')]);_0x37ae29[_0x1331('0x33')]=qs[_0x1331('0x33')](_0x1c9602[_0x1331('0x44')][_0x1331('0x33')]);}_0x37ae29['order']=qs[_0x1331('0x4a')](_0x1c9602['query'][_0x1331('0x4a')]);_0x37ae29[_0x1331('0x4b')]=qs[_0x1331('0x46')](_[_0x1331('0x4c')](_0x1c9602[_0x1331('0x44')],_0x5d307e[_0x1331('0x46')]));_0x37ae29['where'][_0x1331('0x66')]=_0x7029fe['id'];if(_0x1c9602['query'][_0x1331('0x51')]){_0x37ae29[_0x1331('0x4b')]=_[_0x1331('0x4d')](_0x37ae29[_0x1331('0x4b')],{'$or':_[_0x1331('0x69')](_0x37ae29[_0x1331('0x47')],function(_0xf46de1){var _0x310470={};_0x310470[_0xf46de1]={'$like':'%'+_0x1c9602[_0x1331('0x44')][_0x1331('0x51')]+'%'};return _0x310470;})});}_0x37ae29=_['merge']({},_0x37ae29,_0x1c9602[_0x1331('0x52')]);return db[_0x1331('0xb4')]['count']({'where':_0x37ae29[_0x1331('0x4b')]})[_0x1331('0x24')](function(_0x28f268){_0x291902[_0x1331('0x32')]=_0x28f268;if(_0x1c9602['query'][_0x1331('0x53')]){_0x37ae29[_0x1331('0x59')]=[{'model':db[_0x1331('0x8f')],'as':_0x1331('0xe6'),'required':![]},{'model':db['User'],'as':'Owner','attributes':[_0x1331('0x3d'),_0x1331('0xe7'),_0x1331('0xe8')],'required':![]},{'model':db[_0x1331('0xe9')],'as':_0x1331('0xea'),'attributes':['id',_0x1331('0x3d'),'color'],'where':_0x1c9602[_0x1331('0x44')][_0x1331('0xeb')]?{'id':_0x1c9602['query']['tag']}:undefined,'required':_0x1c9602[_0x1331('0x44')][_0x1331('0xeb')]?!![]:![]}];}return db[_0x1331('0xb4')][_0x1331('0x54')](_0x37ae29);})[_0x1331('0x24')](function(_0x11aa1b){_0x291902['rows']=_0x11aa1b;return _0x291902;});}})[_0x1331('0x24')](respondWithFilteredResult(_0x217f55,_0x37ae29))[_0x1331('0x2d')](handleError(_0x217f55,null));};function iftimePromise(_0x4f2be7,_0x179541){return respondWithRpcPromise(_0x1331('0xec'),_0x1331('0xed'),{'command':_0x179541[_0x1331('0xee')]?util['format']('iftime\x20%s,%s',_0x4f2be7[_0x1331('0xef')],_0x179541['timezone']):util['format'](_0x1331('0xf0'),_0x4f2be7[_0x1331('0xef')])},client9002)[_0x1331('0x24')](function(_0x5e6882){var _0xb8d585=_0x5e6882&&_0x5e6882['indexOf'](_0x1331('0xf1'))>=0x0?!![]:![];logger[_0x1331('0x25')](_0x1331('0xf2'),_0x179541['id'],_0x4f2be7['id'],_0x4f2be7[_0x1331('0xef')],_0xb8d585?_0x1331('0xf3'):_0x1331('0xf4'),_0x179541[_0x1331('0xee')]?_0x179541[_0x1331('0xee')]:_0x1331('0xf5'));return _0xb8d585;})[_0x1331('0x2d')](function(_0x225ebc){logger[_0x1331('0x29')]('[%s][INTERVAL][%s]\x20%s\x20%s\x20(%s)',_0x179541['id'],_0x4f2be7['id'],_0x4f2be7['interval'],util['inspect'](_0x225ebc,{'showHidden':![],'depth':null}),_0x179541[_0x1331('0xee')]?_0x179541[_0x1331('0xee')]:_0x1331('0xf5'));return![];});}exports['getSnippet']=function(_0xf2a171,_0x589832,_0x251618){var _0x3ad5cf=0x0;var _0x317753=0x0;var _0x4da6e2=![];var _0x5918cf;var _0x9da2cc;return db[_0x1331('0x41')][_0x1331('0x63')]({'where':{'id':_0xf2a171['params']['id']},'include':[{'model':db[_0x1331('0xf6')],'as':_0x1331('0xf6'),'include':[{'model':db[_0x1331('0xf6')],'as':'Intervals','attributes':['id',_0x1331('0xef')],'raw':!![]}]}]})['then'](handleEntityNotFound(_0x589832,null))[_0x1331('0x24')](function(_0x25cd02){if(_0x25cd02){_0x5918cf=_0x25cd02;return _0x25cd02['getProactiveActions']({'raw':!![]});}})[_0x1331('0x24')](function(_0x35fdd4){if(_0x5918cf){if(_0x35fdd4){_0x9da2cc=_0x35fdd4;}}return require(_0x1331('0x7d'))[_0x1331('0x7e')]();})['then'](function(_0x4f4cd4){if(_0x4f4cd4){_0x317753=_0x4f4cd4[_0x1331('0xf7')];_0x4da6e2=_0x4f4cd4[_0x1331('0x7f')];}})[_0x1331('0x24')](function(){return db[_0x1331('0xb4')][_0x1331('0x32')]({'where':{'closed':![]}});})['then'](function(_0x22de95){_0x3ad5cf=_0x22de95;if(_0x317753&&_0x22de95>_0x317753){return db[_0x1331('0xf8')]['findOne']({'where':{'id':0x1}})['then'](function(_0x232766){if(_0x232766){_0x232766[_0x1331('0xf9')]('chatLicenseExceeded');}});}})[_0x1331('0x24')](function(){if(_0x5918cf[_0x1331('0xf6')]&&_0x5918cf[_0x1331('0xf6')][_0x1331('0xfa')]){var _0x1e3728=[];for(var _0x578913=0x0;_0x578913<_0x5918cf[_0x1331('0xf6')][_0x1331('0xfa')][_0x1331('0x58')];_0x578913++){var _0x582947=_0x5918cf[_0x1331('0xf6')][_0x1331('0xfa')][_0x578913][_0x1331('0x3b')]({'plain':!![]});_0x1e3728[_0x1331('0xbe')](iftimePromise(_0x582947,_0x5918cf));}return BPromise[_0x1331('0xfb')](_0x1e3728)['then'](function(_0x423eef){return _[_0x1331('0xfc')](_0x423eef);});}else{return!![];}})['then'](function(_0x5468d9){var _0x5c3a10=fs['readFileSync'](path[_0x1331('0x7b')](config[_0x1331('0x82')],_0x1331('0xfd')),_0x1331('0xd3'));var _0xb064b2={'remote':_0x5918cf[_0x1331('0xfe')],'query':querystring[_0x1331('0xb2')](_[_0x1331('0x4d')](_0x5918cf['get']({'plain':!![]}),{'customerIp':_0xf2a171['headers'][_0x1331('0xff')]||_0xf2a171[_0x1331('0x8d')]['x-real-ip']||_0xf2a171['connection'][_0x1331('0x100')]||_0xf2a171['ip'],'referer':_0xf2a171[_0x1331('0x8d')]['referer'],'openedInteractions':_0x3ad5cf,'maxInteractions':_0x317753,'virtual':_0x4da6e2['virtual'],'online':_0x5468d9,'custom':_0x4da6e2}))['replace'](/'/g,'\x5c\x27')};_0x589832[_0x1331('0xcd')](ejs[_0x1331('0xd4')](Mustache[_0x1331('0xd4')](_0x5c3a10,_0xb064b2),{'proactiveActions':_0x9da2cc,'alignment':_0x5918cf[_0x1331('0x101')],'verticalAlignment':_0x5918cf[_0x1331('0x102')]}));})[_0x1331('0x2d')](handleError(_0x589832,null));};exports[_0x1331('0x103')]=function(_0x1e1301,_0x2f8036,_0x1812d1){return db[_0x1331('0x41')][_0x1331('0x6e')]({'where':{'id':_0x1e1301[_0x1331('0x56')]['id']}})[_0x1331('0x24')](handleEntityNotFound(_0x2f8036,null))[_0x1331('0x24')](function(_0x5c4e80){if(_0x5c4e80){return db[_0x1331('0x104')][_0x1331('0x105')](function(_0xe5998){return db['ChatApplication'][_0x1331('0x3a')]({'where':{'ChatWebsiteId':_0x1e1301['params']['id']},'transaction':_0xe5998})['then'](function(_0x1f9e6e){var _0x3056e5=_[_0x1331('0x69')](_0x1e1301[_0x1331('0x5b')],function(_0x1f955a){_0x1f955a['ChatWebsiteId']=_0x1e1301[_0x1331('0x56')]['id'];return _0x1f955a;});return db[_0x1331('0xa0')]['bulkCreate'](_0x3056e5,{'transaction':_0xe5998});});})[_0x1331('0x24')](function(){return db[_0x1331('0xa0')]['findAndCountAll']({'where':{'ChatWebsiteId':_0x1e1301[_0x1331('0x56')]['id']},'order':_0x1331('0xa6')});});}})[_0x1331('0x24')](respondWithResult(_0x2f8036,null))[_0x1331('0x2d')](handleError(_0x2f8036,null));};exports[_0x1331('0x106')]=function(_0x4b89f9,_0x12e932,_0x2480b9){var _0x3a9104={};var _0x4d71d3={};var _0x5162d9;var _0x4f4350;return db['ChatWebsite'][_0x1331('0x6e')]({'where':{'id':_0x4b89f9['params']['id']}})[_0x1331('0x24')](handleEntityNotFound(_0x12e932,null))[_0x1331('0x24')](function(_0x1f0d35){if(_0x1f0d35){_0x5162d9=_0x1f0d35;_0x4d71d3[_0x1331('0x43')]=_[_0x1331('0x45')](db[_0x1331('0xa0')][_0x1331('0x42')]);_0x4d71d3[_0x1331('0x44')]=_[_0x1331('0x45')](_0x4b89f9[_0x1331('0x44')]);_0x4d71d3['filters']=_[_0x1331('0x57')](_0x4d71d3[_0x1331('0x43')],_0x4d71d3[_0x1331('0x44')]);_0x3a9104['attributes']=_[_0x1331('0x57')](_0x4d71d3['model'],qs[_0x1331('0x48')](_0x4b89f9[_0x1331('0x44')][_0x1331('0x48')]));_0x3a9104['attributes']=_0x3a9104[_0x1331('0x47')][_0x1331('0x58')]?_0x3a9104['attributes']:_0x4d71d3[_0x1331('0x43')];_0x3a9104[_0x1331('0x68')]=qs[_0x1331('0x4a')](_0x4b89f9[_0x1331('0x44')][_0x1331('0x4a')]);_0x3a9104[_0x1331('0x4b')]=qs[_0x1331('0x46')](_[_0x1331('0x4c')](_0x4b89f9[_0x1331('0x44')],_0x4d71d3[_0x1331('0x46')]));if(_0x4b89f9[_0x1331('0x44')]['filter']){_0x3a9104[_0x1331('0x4b')]=_[_0x1331('0x4d')](_0x3a9104[_0x1331('0x4b')],{'$or':_[_0x1331('0x69')](_0x3a9104[_0x1331('0x47')],function(_0xea7ea0){var _0x541ee2={};_0x541ee2[_0xea7ea0]={'$like':'%'+_0x4b89f9[_0x1331('0x44')][_0x1331('0x51')]+'%'};return _0x541ee2;})});}_0x3a9104=_[_0x1331('0x4d')]({},_0x3a9104,_0x4b89f9[_0x1331('0x52')]);return _0x5162d9[_0x1331('0x106')](_0x3a9104);}})[_0x1331('0x24')](function(_0x47aeef){if(_0x47aeef){_0x4f4350=_0x47aeef[_0x1331('0x58')];if(!_0x4b89f9['query'][_0x1331('0x70')]('nolimit')){_0x3a9104['limit']=qs['limit'](_0x4b89f9[_0x1331('0x44')]['limit']);_0x3a9104[_0x1331('0x33')]=qs['offset'](_0x4b89f9[_0x1331('0x44')]['offset']);}return _0x5162d9[_0x1331('0x106')](_0x3a9104);}})[_0x1331('0x24')](function(_0x4869ed){if(_0x4869ed){return _0x4869ed?{'count':_0x4f4350,'rows':_0x4869ed}:null;}})['then'](respondWithResult(_0x12e932,null))['catch'](handleError(_0x12e932,null));};exports[_0x1331('0x107')]=function(_0x3ebabd,_0x25f0c0,_0xa21fed){return db['chatProactiveAction'][_0x1331('0x63')]({'where':{'id':_0x3ebabd[_0x1331('0x56')]['id']}})[_0x1331('0x24')](handleEntityNotFound(_0x25f0c0,null))[_0x1331('0x24')](function(_0x1d8a18){if(_0x1d8a18){return _0x1d8a18['addProactiveActions'](_0x3ebabd[_0x1331('0x5b')][_0x1331('0x6b')],_['omit'](_0x3ebabd['body'],['ids','id'])||{});}})['then'](respondWithResult(_0x25f0c0,null))['catch'](handleError(_0x25f0c0,null));};exports['getProactiveActions']=function(_0x1a3c28,_0x529196,_0xdbde5c){var _0x591379={};var _0x27add5={};var _0x4f3a3c;var _0x445d33;return db['ChatWebsite'][_0x1331('0x6e')]({'where':{'id':_0x1a3c28[_0x1331('0x56')]['id']}})['then'](handleEntityNotFound(_0x529196,null))['then'](function(_0x7da410){if(_0x7da410){_0x4f3a3c=_0x7da410;_0x27add5[_0x1331('0x43')]=_['keys'](db[_0x1331('0x108')][_0x1331('0x42')]);_0x27add5[_0x1331('0x44')]=_[_0x1331('0x45')](_0x1a3c28['query']);_0x27add5['filters']=_[_0x1331('0x57')](_0x27add5['model'],_0x27add5[_0x1331('0x44')]);_0x591379[_0x1331('0x47')]=_[_0x1331('0x57')](_0x27add5[_0x1331('0x43')],qs[_0x1331('0x48')](_0x1a3c28[_0x1331('0x44')][_0x1331('0x48')]));_0x591379[_0x1331('0x47')]=_0x591379[_0x1331('0x47')][_0x1331('0x58')]?_0x591379[_0x1331('0x47')]:_0x27add5[_0x1331('0x43')];_0x591379[_0x1331('0x68')]=qs['sort'](_0x1a3c28['query']['sort']);_0x591379[_0x1331('0x4b')]=qs['filters'](_[_0x1331('0x4c')](_0x1a3c28[_0x1331('0x44')],_0x27add5[_0x1331('0x46')]));if(_0x1a3c28[_0x1331('0x44')][_0x1331('0x51')]){_0x591379[_0x1331('0x4b')]=_['merge'](_0x591379[_0x1331('0x4b')],{'$or':_[_0x1331('0x69')](_0x591379[_0x1331('0x47')],function(_0x41991c){var _0x103546={};_0x103546[_0x41991c]={'$like':'%'+_0x1a3c28[_0x1331('0x44')]['filter']+'%'};return _0x103546;})});}_0x591379=_['merge']({},_0x591379,_0x1a3c28[_0x1331('0x52')]);return _0x4f3a3c['getProactiveActions'](_0x591379);}})[_0x1331('0x24')](function(_0x2d68d8){if(_0x2d68d8){_0x445d33=_0x2d68d8[_0x1331('0x58')];if(!_0x1a3c28[_0x1331('0x44')]['hasOwnProperty']('nolimit')){_0x591379[_0x1331('0x34')]=qs[_0x1331('0x34')](_0x1a3c28[_0x1331('0x44')][_0x1331('0x34')]);_0x591379['offset']=qs['offset'](_0x1a3c28['query'][_0x1331('0x33')]);}return _0x4f3a3c[_0x1331('0x109')](_0x591379);}})[_0x1331('0x24')](function(_0x12db9d){if(_0x12db9d){return _0x12db9d?{'count':_0x445d33,'rows':_0x12db9d}:null;}})['then'](respondWithResult(_0x529196,null))[_0x1331('0x2d')](handleError(_0x529196,null));};exports[_0x1331('0x10a')]=function(_0x2c97dd,_0xe8f2cd,_0x2318d2){var _0x12c2cb=_0x2c97dd[_0x1331('0x44')][_0x1331('0x10b')]===_0x1331('0x10c')?_0x1331('0x10d'):_0x1331('0x10e');return db['ChatWebsite']['find']({'attributes':['id',_0x12c2cb],'where':{'id':_0x2c97dd[_0x1331('0x56')]['id']}})[_0x1331('0x24')](handleEntityNotFound(_0xe8f2cd,null))[_0x1331('0x24')](function(_0x3de107){if(_0x3de107){var _0xbe3e40=_0x3de107[_0x12c2cb];var _0x2e66f3=_0xbe3e40&&_0xbe3e40[_0x1331('0x10f')]?_0xbe3e40[_0x1331('0x10f')]:[];_0xe8f2cd[_0x1331('0xcd')]({'fromKey':_[_0x1331('0x80')](_0xbe3e40['fromKey'])?undefined:_0xbe3e40['fromKey'],'count':_0x2e66f3[_0x1331('0x58')],'rows':_0x2e66f3});}})[_0x1331('0x2d')](handleError(_0xe8f2cd,null));};exports[_0x1331('0x110')]=function(_0x104d1c,_0xd989a6,_0x1ee1e2){var _0x49c76d={'raw':!![],'where':{}};var _0x36468c={};var _0x53bf53={'count':0x0,'rows':[]};return db[_0x1331('0x41')][_0x1331('0x6e')]({'where':{'id':_0x104d1c[_0x1331('0x56')]['id']}})['then'](handleEntityNotFound(_0xd989a6,null))['then'](function(_0x2e0d75){if(_0x2e0d75){_0x36468c['model']=_['keys'](db['ChatOfflineMessage'][_0x1331('0x42')]);_0x36468c[_0x1331('0x44')]=_[_0x1331('0x45')](_0x104d1c[_0x1331('0x44')]);_0x36468c['filters']=_[_0x1331('0x57')](_0x36468c[_0x1331('0x43')],_0x36468c[_0x1331('0x44')]);_0x49c76d['attributes']=_['intersection'](_0x36468c[_0x1331('0x43')],qs[_0x1331('0x48')](_0x104d1c[_0x1331('0x44')]['fields']));_0x49c76d['attributes']=_0x49c76d[_0x1331('0x47')][_0x1331('0x58')]?_0x49c76d[_0x1331('0x47')]:_0x36468c[_0x1331('0x43')];if(!_0x104d1c[_0x1331('0x44')][_0x1331('0x70')](_0x1331('0x49'))){_0x49c76d['limit']=qs[_0x1331('0x34')](_0x104d1c[_0x1331('0x44')][_0x1331('0x34')]);_0x49c76d[_0x1331('0x33')]=qs[_0x1331('0x33')](_0x104d1c[_0x1331('0x44')][_0x1331('0x33')]);}_0x49c76d[_0x1331('0x68')]=qs[_0x1331('0x4a')](_0x104d1c[_0x1331('0x44')][_0x1331('0x4a')]);_0x49c76d[_0x1331('0x4b')]=qs[_0x1331('0x46')](_[_0x1331('0x4c')](_0x104d1c[_0x1331('0x44')],_0x36468c[_0x1331('0x46')]));_0x49c76d[_0x1331('0x4b')][_0x1331('0x66')]=_0x2e0d75['id'];if(_0x104d1c['query'][_0x1331('0x51')]){_0x49c76d['where']=_[_0x1331('0x4d')](_0x49c76d[_0x1331('0x4b')],{'$or':_[_0x1331('0x69')](_0x49c76d[_0x1331('0x47')],function(_0x1c59a5){var _0x22d68f={};_0x22d68f[_0x1c59a5]={'$like':'%'+_0x104d1c['query'][_0x1331('0x51')]+'%'};return _0x22d68f;})});}_0x49c76d=_[_0x1331('0x4d')]({},_0x49c76d,_0x104d1c[_0x1331('0x52')]);return db[_0x1331('0x111')][_0x1331('0x32')]({'where':_0x49c76d[_0x1331('0x4b')]})[_0x1331('0x24')](function(_0xd15a3f){_0x53bf53[_0x1331('0x32')]=_0xd15a3f;if(_0x104d1c[_0x1331('0x44')]['includeAll']){_0x49c76d[_0x1331('0x59')]=[{'all':!![]}];}return db[_0x1331('0x111')][_0x1331('0x54')](_0x49c76d);})['then'](function(_0x2dd07a){_0x53bf53[_0x1331('0x55')]=_0x2dd07a;return _0x53bf53;});}})[_0x1331('0x24')](respondWithFilteredResult(_0xd989a6,_0x49c76d))['catch'](handleError(_0xd989a6,null));};exports['addAgents']=function(_0x1c8de1,_0x42a999,_0x29e7f8){return db[_0x1331('0x41')][_0x1331('0x63')]({'where':{'id':_0x1c8de1['params']['id']}})[_0x1331('0x24')](handleEntityNotFound(_0x42a999,null))[_0x1331('0x24')](function(_0x41ed64){if(_0x41ed64){return _0x41ed64[_0x1331('0x112')](_0x1c8de1[_0x1331('0x5b')][_0x1331('0x6b')],_[_0x1331('0xe4')](_0x1c8de1[_0x1331('0x5b')],['ids','id'])||{})[_0x1331('0xb8')](function(_0x90661d){for(var _0x9e4fa8=0x0;_0x9e4fa8<_0x1c8de1['body'][_0x1331('0x6b')][_0x1331('0x58')];_0x9e4fa8+=0x1){socket[_0x1331('0x113')]('userChatWebsite:save',{'UserId':_0x1c8de1[_0x1331('0x5b')][_0x1331('0x6b')][_0x9e4fa8],'ChatWebsiteId':_0x1c8de1[_0x1331('0x56')]['id']});}return _0x90661d;});}})[_0x1331('0x24')](respondWithResult(_0x42a999,null))['catch'](handleError(_0x42a999,null));};exports[_0x1331('0x114')]=function(_0x19af2d,_0x33f040,_0x36fec3){return db[_0x1331('0x41')][_0x1331('0x63')]({'where':{'id':_0x19af2d['params']['id']}})[_0x1331('0x24')](handleEntityNotFound(_0x33f040,null))[_0x1331('0x24')](function(_0x59d513){if(_0x59d513){return _0x59d513[_0x1331('0x114')](_0x19af2d[_0x1331('0x44')]['ids'])[_0x1331('0x24')](function(){if(_[_0x1331('0x115')](_0x19af2d[_0x1331('0x44')][_0x1331('0x6b')])){for(var _0x46d7f3=0x0;_0x46d7f3<_0x19af2d['query'][_0x1331('0x6b')][_0x1331('0x58')];_0x46d7f3+=0x1){socket[_0x1331('0x113')](_0x1331('0x116'),{'UserId':Number(_0x19af2d[_0x1331('0x44')][_0x1331('0x6b')][_0x46d7f3]),'ChatWebsiteId':Number(_0x19af2d[_0x1331('0x56')]['id'])});}}else{socket[_0x1331('0x113')](_0x1331('0x116'),{'UserId':Number(_0x19af2d[_0x1331('0x44')][_0x1331('0x6b')]),'ChatWebsiteId':Number(_0x19af2d[_0x1331('0x56')]['id'])});}});}})[_0x1331('0x24')](respondWithStatusCode(_0x33f040,null))[_0x1331('0x2d')](handleError(_0x33f040,null));};exports[_0x1331('0x117')]=function(_0x28c8b9,_0x1b5200,_0x2d797f){var _0x3d4273={};var _0x14326d={};var _0x59cafc;var _0x560aad;return db[_0x1331('0x41')][_0x1331('0x6e')]({'where':{'id':_0x28c8b9['params']['id']}})['then'](handleEntityNotFound(_0x1b5200,null))[_0x1331('0x24')](function(_0x2ca4a3){if(_0x2ca4a3){_0x59cafc=_0x2ca4a3;_0x14326d[_0x1331('0x43')]=_['keys'](db[_0x1331('0x118')][_0x1331('0x42')]);_0x14326d[_0x1331('0x44')]=_[_0x1331('0x45')](_0x28c8b9[_0x1331('0x44')]);_0x14326d[_0x1331('0x46')]=_['intersection'](_0x14326d[_0x1331('0x43')],_0x14326d[_0x1331('0x44')]);_0x3d4273['attributes']=_[_0x1331('0x57')](_0x14326d['model'],qs[_0x1331('0x48')](_0x28c8b9[_0x1331('0x44')][_0x1331('0x48')]));_0x3d4273['attributes']=_0x3d4273[_0x1331('0x47')][_0x1331('0x58')]?_0x3d4273[_0x1331('0x47')]:_0x14326d['model'];_0x3d4273['order']=qs[_0x1331('0x4a')](_0x28c8b9[_0x1331('0x44')][_0x1331('0x4a')]);_0x3d4273[_0x1331('0x4b')]=qs[_0x1331('0x46')](_[_0x1331('0x4c')](_0x28c8b9['query'],_0x14326d[_0x1331('0x46')]));if(_0x28c8b9['query']['filter']){_0x3d4273[_0x1331('0x4b')]=_[_0x1331('0x4d')](_0x3d4273['where'],{'$or':_[_0x1331('0x69')](_0x3d4273[_0x1331('0x47')],function(_0x466ce0){var _0x3501c5={};_0x3501c5[_0x466ce0]={'$like':'%'+_0x28c8b9[_0x1331('0x44')][_0x1331('0x51')]+'%'};return _0x3501c5;})});}_0x3d4273=_[_0x1331('0x4d')]({},_0x3d4273,_0x28c8b9[_0x1331('0x52')]);return _0x59cafc['getAgents'](_0x3d4273);}})[_0x1331('0x24')](function(_0x32f94b){if(_0x32f94b){_0x560aad=_0x32f94b[_0x1331('0x58')];if(!_0x28c8b9['query']['hasOwnProperty'](_0x1331('0x49'))){_0x3d4273[_0x1331('0x34')]=qs[_0x1331('0x34')](_0x28c8b9[_0x1331('0x44')][_0x1331('0x34')]);_0x3d4273[_0x1331('0x33')]=qs[_0x1331('0x33')](_0x28c8b9[_0x1331('0x44')][_0x1331('0x33')]);}return _0x59cafc[_0x1331('0x117')](_0x3d4273);}})[_0x1331('0x24')](function(_0x35ffd0){if(_0x35ffd0){return _0x35ffd0?{'count':_0x560aad,'rows':_0x35ffd0}:null;}})['then'](respondWithResult(_0x1b5200,null))[_0x1331('0x2d')](handleError(_0x1b5200,null));};
\ No newline at end of file
+var _0xfc4c=['getAnswers','nolimit','rows','removeAnswers','filename','addAvatar','agentAvatar','file','addCustomerAvatar','customerAvatar','getLogo','join','root','server/files/images/logos/default_logo.png','sitepic','../../config/license/util','custom','existsSync','server/files/images/logos/','download','server/files/images/avatars/default_avatar.png','server/files/images/avatars/','getCustomerAvatar','showCustomerAvatar','isNil','getSystemAvatar','server/files/images/avatars/system_avatar.png','systemAvatar','notify','user-agent-parser','setUA','user-agent','getResult','chat','CmContact','Sequelize','ValidationError','no\x20available\x20attributes','difference','createdAt','updatedAt','CompanyId','ListId','from','from\x20is\x20mandatory','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','CmList','List','Contacts','ChatApplication','account','applications','Applications','orderBy','priority','asc','contact','lastName','customerIp','referer','browser','version','format','%s\x20%s','unknown','vendor','device','type','threadId','ChatInteraction','externalUrl','interaction','firstName','messageId','created','autoclose','push','close','ChatMessage','AttachmentId','UserId','User','unshift','agent','forcedOwnership','Start','startRouting','EventManager','offline','send','mapKeyOffline','mapKeyOffline\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','readFileSync','utf8','render','toPairs','offlineMessageBody','MailServerOut','Smtp','forwardOfflineAddress','service','host','port','secure','authentication','pass','SendMail','\x22%s\x22\x20<%s>','offlineMessageSubject','addInteraction','omit','getInteractions','Contact','Owner','fullname','internal','Tag','color','tag','Command','getSnippet','timezone','iftime\x20%s,%s','interval','true','[%s][INTERVAL][%s]\x20%s\x20%s\x20(%s)','OFFLINE','No\x20timezone','inspect','Interval','Intervals','getLicense','virtual','License','increment','chatLicenseExceeded','all','some','remote','headers','x-forwarded-for','x-real-ip','remoteAddress','replace','alignment','verticalAlignment','addApplications','sequelize','bulkCreate','getApplications','addProactiveActions','getProactiveActions','ChatProactiveAction','getFields','online','items','fromKey','getOfflineMessages','ChatOfflineMessage','addAgents','emit','removeAgents','isArray','userChatWebsite:remove','getAgents','html-pdf','eml-format','request-promise','moment','bluebird','mustache','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./chatWebsite.socket','register','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','then','info','ChatWebsite,\x20%s,\x20%s','request\x20sent','debug','ChatWebsite,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','get','ChatWebsites','destroy','stack','name','index','mandatoryDispositionPause','ChatWebsite','rawAttributes','model','keys','query','filters','intersection','attributes','length','order','sort','where','pick','merge','map','key','VIRTUAL','field','filter','count','include','findAll','show','params','Pause','includeAll','find','create','body','user','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','addDisposition','Disposition','getDispositions','findOne','fields','hasOwnProperty','ChatWebsiteId','options','removeDispositions','ids','CannedAnswer'];(function(_0x6aaf7a,_0x2ddf35){var _0x522e20=function(_0x5b6e19){while(--_0x5b6e19){_0x6aaf7a['push'](_0x6aaf7a['shift']());}};_0x522e20(++_0x2ddf35);}(_0xfc4c,0x1c0));var _0xcfc4=function(_0x15f02a,_0x13a522){_0x15f02a=_0x15f02a-0x0;var _0x14237c=_0xfc4c[_0x15f02a];return _0x14237c;};'use strict';var pdf=require(_0xcfc4('0x0'));var emlformat=require(_0xcfc4('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0xcfc4('0x2'));var moment=require(_0xcfc4('0x3'));var BPromise=require(_0xcfc4('0x4'));var Mustache=require(_0xcfc4('0x5'));var util=require('util');var path=require(_0xcfc4('0x6'));var sox=require(_0xcfc4('0x7'));var csv=require('to-csv');var ejs=require(_0xcfc4('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0xcfc4('0x9'));var crypto=require(_0xcfc4('0xa'));var jsforce=require(_0xcfc4('0xb'));var deskjs=require(_0xcfc4('0xc'));var toCsv=require(_0xcfc4('0xd'));var querystring=require(_0xcfc4('0xe'));var Papa=require(_0xcfc4('0xf'));var Redis=require(_0xcfc4('0x10'));var authService=require(_0xcfc4('0x11'));var qs=require(_0xcfc4('0x12'));var hardwareService=require(_0xcfc4('0x13'));var logger=require(_0xcfc4('0x14'))('api');var utils=require(_0xcfc4('0x15'));var config=require(_0xcfc4('0x16'));var db=require(_0xcfc4('0x17'))['db'];config[_0xcfc4('0x18')]=_[_0xcfc4('0x19')](config[_0xcfc4('0x18')],{'host':_0xcfc4('0x1a'),'port':0x18eb});var socket=require(_0xcfc4('0x1b'))(new Redis(config[_0xcfc4('0x18')]));require(_0xcfc4('0x1c'))[_0xcfc4('0x1d')](socket);var jayson=require(_0xcfc4('0x1e'));var client=jayson['client']['http']({'port':0x232c});var client9002=jayson[_0xcfc4('0x1f')]['http']({'port':0x232a});var client9003=jayson[_0xcfc4('0x1f')][_0xcfc4('0x20')]({'port':0x232b});function checkPasswordPattern(_0x27f5b4,_0x35e090,_0x2edd69){if(_0x2edd69){var _0xf55eb3=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0xf55eb3[_0xcfc4('0x21')](_0x35e090)){return _0x27f5b4;}else{throw new Error(_0xcfc4('0x22'));}}else{return _0x27f5b4;}}function respondWithRpcPromise(_0x345202,_0x44c302,_0x34fa5f,_0x1c385e){return new BPromise(function(_0x3af31e,_0xc6dad0){var _0x38c8ac=_0x1c385e||client;return _0x38c8ac['request'](_0x345202,_0x34fa5f)[_0xcfc4('0x23')](function(_0x6aa88e){logger[_0xcfc4('0x24')](_0xcfc4('0x25'),_0x44c302,_0xcfc4('0x26'));logger[_0xcfc4('0x27')](_0xcfc4('0x28'),_0x44c302,_0xcfc4('0x26'),JSON[_0xcfc4('0x29')](_0x6aa88e));if(_0x6aa88e[_0xcfc4('0x2a')]){if(_0x6aa88e[_0xcfc4('0x2a')]['code']===0x1f4){logger[_0xcfc4('0x2a')]('ChatWebsite,\x20%s,\x20%s',_0x44c302,_0x6aa88e['error']['message']);return _0xc6dad0(_0x6aa88e['error'][_0xcfc4('0x2b')]);}logger[_0xcfc4('0x2a')](_0xcfc4('0x25'),_0x44c302,_0x6aa88e['error']['message']);return _0x3af31e(_0x6aa88e[_0xcfc4('0x2a')][_0xcfc4('0x2b')]);}else{logger[_0xcfc4('0x24')](_0xcfc4('0x25'),_0x44c302,'request\x20sent');_0x3af31e(_0x6aa88e[_0xcfc4('0x2c')][_0xcfc4('0x2b')]);}})[_0xcfc4('0x2d')](function(_0x21af1f){logger[_0xcfc4('0x2a')](_0xcfc4('0x25'),_0x44c302,_0x21af1f);_0xc6dad0(_0x21af1f);});});}function respondWithStatusCode(_0xf7022e,_0x3d59a5){_0x3d59a5=_0x3d59a5||0xcc;return function(_0x51b9e3){if(_0x51b9e3){return _0xf7022e[_0xcfc4('0x2e')](_0x3d59a5);}return _0xf7022e[_0xcfc4('0x2f')](_0x3d59a5)[_0xcfc4('0x30')]();};}function respondWithResult(_0x368ace,_0x2cb18e){_0x2cb18e=_0x2cb18e||0xc8;return function(_0x2f44b5){if(_0x2f44b5){return _0x368ace[_0xcfc4('0x2f')](_0x2cb18e)[_0xcfc4('0x31')](_0x2f44b5);}};}function respondWithFilteredResult(_0x33ab09,_0x123444){return function(_0x4bdbe7){if(_0x4bdbe7){var _0x22237b=_0x4bdbe7['count'],_0x551ab4=_0x123444['offset'],_0x105a77=_0x123444[_0xcfc4('0x32')]+_0x123444[_0xcfc4('0x33')],_0x1ee6b4;if(_0x105a77>=_0x22237b){_0x105a77=_0x22237b;_0x1ee6b4=0xc8;}else{_0x1ee6b4=0xce;}_0x33ab09[_0xcfc4('0x2f')](_0x1ee6b4);return _0x33ab09[_0xcfc4('0x34')](_0xcfc4('0x35'),_0x551ab4+'-'+_0x105a77+'/'+_0x22237b)[_0xcfc4('0x31')](_0x4bdbe7);}return null;};}function patchUpdates(_0x460ffb){return function(_0x33f8cc){try{jsonpatch[_0xcfc4('0x36')](_0x33f8cc,_0x460ffb,!![]);}catch(_0x569723){return BPromise[_0xcfc4('0x37')](_0x569723);}return _0x33f8cc[_0xcfc4('0x38')]();};}function saveUpdates(_0x54416a,_0x4c3c08){return function(_0x53490f){if(_0x53490f){return _0x53490f[_0xcfc4('0x39')](_0x54416a)[_0xcfc4('0x23')](function(_0x535b05){return _0x535b05;});}return null;};}function removeEntity(_0xa40a5c,_0x24138b){return function(_0x1946c2){if(_0x1946c2){return _0x1946c2['destroy']()[_0xcfc4('0x23')](function(){var _0x2af541=_0x1946c2[_0xcfc4('0x3a')]({'plain':!![]});var _0x483cc9=_0xcfc4('0x3b');return db['UserProfileResource'][_0xcfc4('0x3c')]({'where':{'type':_0x483cc9,'resourceId':_0x2af541['id']}})[_0xcfc4('0x23')](function(){return _0x1946c2;});})[_0xcfc4('0x23')](function(){_0xa40a5c[_0xcfc4('0x2f')](0xcc)[_0xcfc4('0x30')]();});}};}function handleEntityNotFound(_0x481686,_0x1e713a){return function(_0x56aa00){if(!_0x56aa00){_0x481686['sendStatus'](0x194);}return _0x56aa00;};}function handleError(_0x1598d8,_0x35ccdd){_0x35ccdd=_0x35ccdd||0x1f4;return function(_0x5b4988){logger[_0xcfc4('0x2a')](_0x5b4988[_0xcfc4('0x3d')]);if(_0x5b4988[_0xcfc4('0x3e')]){delete _0x5b4988[_0xcfc4('0x3e')];}_0x1598d8['status'](_0x35ccdd)['send'](_0x5b4988);};}exports[_0xcfc4('0x3f')]=function(_0x2f7b34,_0x83b1f0){var _0x356fed={'include':[{'model':db['Pause'],'as':_0xcfc4('0x40')}]},_0x58e002={},_0x2f4c22={'count':0x0,'rows':[]};var _0x1e23d0=db[_0xcfc4('0x41')][_0xcfc4('0x42')];_0x58e002[_0xcfc4('0x43')]=_[_0xcfc4('0x44')](_0x1e23d0);_0x58e002[_0xcfc4('0x45')]=_[_0xcfc4('0x44')](_0x2f7b34[_0xcfc4('0x45')]);_0x58e002[_0xcfc4('0x46')]=_[_0xcfc4('0x47')](_0x58e002[_0xcfc4('0x43')],_0x58e002[_0xcfc4('0x45')]);_0x356fed[_0xcfc4('0x48')]=_[_0xcfc4('0x47')](_0x58e002[_0xcfc4('0x43')],qs['fields'](_0x2f7b34[_0xcfc4('0x45')]['fields']));_0x356fed['attributes']=_0x356fed['attributes'][_0xcfc4('0x49')]?_0x356fed['attributes']:_0x58e002['model'];if(!_0x2f7b34[_0xcfc4('0x45')]['hasOwnProperty']('nolimit')){_0x356fed[_0xcfc4('0x33')]=qs[_0xcfc4('0x33')](_0x2f7b34[_0xcfc4('0x45')][_0xcfc4('0x33')]);_0x356fed['offset']=qs[_0xcfc4('0x32')](_0x2f7b34['query'][_0xcfc4('0x32')]);}_0x356fed[_0xcfc4('0x4a')]=qs[_0xcfc4('0x4b')](_0x2f7b34['query'][_0xcfc4('0x4b')]);_0x356fed[_0xcfc4('0x4c')]=qs[_0xcfc4('0x46')](_[_0xcfc4('0x4d')](_0x2f7b34['query'],_0x58e002['filters']));if(_0x2f7b34[_0xcfc4('0x45')]['filter']){_0x356fed[_0xcfc4('0x4c')]=_[_0xcfc4('0x4e')](_0x356fed['where'],{'$or':_[_0xcfc4('0x4f')](_0x1e23d0,function(_0x32c032){if(_0x32c032['type'][_0xcfc4('0x50')]!==_0xcfc4('0x51')){var _0x43a1c8={};_0x43a1c8[_0x32c032[_0xcfc4('0x52')]]={'$like':'%'+_0x2f7b34[_0xcfc4('0x45')][_0xcfc4('0x53')]+'%'};return _0x43a1c8;}})});}_0x356fed=_[_0xcfc4('0x4e')]({},_0x356fed,_0x2f7b34['options']);var _0x5c90fa={'where':_0x356fed[_0xcfc4('0x4c')]};return db[_0xcfc4('0x41')][_0xcfc4('0x54')](_0x5c90fa)[_0xcfc4('0x23')](function(_0x4ef8c6){_0x2f4c22[_0xcfc4('0x54')]=_0x4ef8c6;if(_0x2f7b34[_0xcfc4('0x45')]['includeAll']){_0x356fed[_0xcfc4('0x55')]=[{'all':!![]}];}return db['ChatWebsite'][_0xcfc4('0x56')](_0x356fed);})[_0xcfc4('0x23')](function(_0x354461){_0x2f4c22['rows']=_0x354461;return _0x2f4c22;})['then'](respondWithFilteredResult(_0x83b1f0,_0x356fed))[_0xcfc4('0x2d')](handleError(_0x83b1f0,null));};exports[_0xcfc4('0x57')]=function(_0x12cd5b,_0x45a5b5){var _0x38811d={'raw':![],'where':{'id':_0x12cd5b[_0xcfc4('0x58')]['id']},'include':[{'model':db[_0xcfc4('0x59')],'as':_0xcfc4('0x40')}]},_0x589035={};_0x589035[_0xcfc4('0x43')]=_[_0xcfc4('0x44')](db['ChatWebsite'][_0xcfc4('0x42')]);_0x589035[_0xcfc4('0x45')]=_[_0xcfc4('0x44')](_0x12cd5b[_0xcfc4('0x45')]);_0x589035[_0xcfc4('0x46')]=_['intersection'](_0x589035[_0xcfc4('0x43')],_0x589035[_0xcfc4('0x45')]);_0x38811d[_0xcfc4('0x48')]=_[_0xcfc4('0x47')](_0x589035['model'],qs['fields'](_0x12cd5b[_0xcfc4('0x45')]['fields']));_0x38811d[_0xcfc4('0x48')]=_0x38811d[_0xcfc4('0x48')]['length']?_0x38811d[_0xcfc4('0x48')]:_0x589035[_0xcfc4('0x43')];if(_0x12cd5b[_0xcfc4('0x45')][_0xcfc4('0x5a')]){_0x38811d[_0xcfc4('0x55')]=[{'all':!![]}];}_0x38811d=_[_0xcfc4('0x4e')]({},_0x38811d,_0x12cd5b['options']);return db[_0xcfc4('0x41')][_0xcfc4('0x5b')](_0x38811d)[_0xcfc4('0x23')](handleEntityNotFound(_0x45a5b5,null))['then'](respondWithResult(_0x45a5b5,null))[_0xcfc4('0x2d')](handleError(_0x45a5b5,null));};exports[_0xcfc4('0x5c')]=function(_0x11c367,_0x550c1c){return db['ChatWebsite'][_0xcfc4('0x5c')](_0x11c367[_0xcfc4('0x5d')],{})[_0xcfc4('0x23')](function(_0x3d04c8){var _0x459d58=_0x11c367[_0xcfc4('0x5e')]['get']({'plain':!![]});if(!_0x459d58)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x459d58['role']===_0xcfc4('0x5e')){var _0x321b7b=_0x3d04c8['get']({'plain':!![]});var _0x56c0d1=_0xcfc4('0x3b');return db['UserProfileSection'][_0xcfc4('0x5b')]({'where':{'name':_0x56c0d1,'userProfileId':_0x459d58['userProfileId']},'raw':!![]})[_0xcfc4('0x23')](function(_0x47a88a){if(_0x47a88a&&_0x47a88a[_0xcfc4('0x5f')]===0x0){return db[_0xcfc4('0x60')][_0xcfc4('0x5c')]({'name':_0x321b7b[_0xcfc4('0x3e')],'resourceId':_0x321b7b['id'],'type':_0x47a88a[_0xcfc4('0x3e')],'sectionId':_0x47a88a['id']},{})['then'](function(){return _0x3d04c8;});}else{return _0x3d04c8;}})[_0xcfc4('0x2d')](function(_0x61aa4){logger['error'](_0xcfc4('0x61'),_0x61aa4);throw _0x61aa4;});}return _0x3d04c8;})[_0xcfc4('0x23')](respondWithResult(_0x550c1c,0xc9))[_0xcfc4('0x2d')](handleError(_0x550c1c,null));};exports[_0xcfc4('0x39')]=function(_0x54fef2,_0x1bf5b9){if(_0x54fef2[_0xcfc4('0x5d')]['id']){delete _0x54fef2[_0xcfc4('0x5d')]['id'];}return db[_0xcfc4('0x41')][_0xcfc4('0x5b')]({'where':{'id':_0x54fef2[_0xcfc4('0x58')]['id']},'include':[{'model':db[_0xcfc4('0x59')],'as':_0xcfc4('0x40')}]})[_0xcfc4('0x23')](handleEntityNotFound(_0x1bf5b9,null))[_0xcfc4('0x23')](saveUpdates(_0x54fef2[_0xcfc4('0x5d')],null))[_0xcfc4('0x23')](respondWithResult(_0x1bf5b9,null))[_0xcfc4('0x2d')](handleError(_0x1bf5b9,null));};exports[_0xcfc4('0x3c')]=function(_0x1945ec,_0x4af7ef){return db[_0xcfc4('0x41')]['find']({'where':{'id':_0x1945ec[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x4af7ef,null))[_0xcfc4('0x23')](removeEntity(_0x4af7ef,null))['catch'](handleError(_0x4af7ef,null));};exports[_0xcfc4('0x62')]=function(_0x1d2cd9,_0x3fd4ea){return db[_0xcfc4('0x41')][_0xcfc4('0x62')]()[_0xcfc4('0x23')](respondWithResult(_0x3fd4ea,null))[_0xcfc4('0x2d')](handleError(_0x3fd4ea,null));};exports[_0xcfc4('0x63')]=function(_0xdced38,_0xbdace4,_0x1d52de){if(_0xdced38[_0xcfc4('0x5d')]['id']){delete _0xdced38[_0xcfc4('0x5d')]['id'];}return db[_0xcfc4('0x41')]['find']({'where':{'id':_0xdced38['params']['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0xbdace4,null))['then'](function(_0x3ba9fc){if(_0x3ba9fc){_0xdced38['body']['ChatWebsiteId']=_0x3ba9fc['id'];return db[_0xcfc4('0x64')][_0xcfc4('0x5c')](_0xdced38[_0xcfc4('0x5d')]);}})[_0xcfc4('0x23')](respondWithResult(_0xbdace4,null))['catch'](handleError(_0xbdace4,null));};exports[_0xcfc4('0x65')]=function(_0x550269,_0x3b4c5,_0xe57e10){var _0x56e022={'raw':![],'where':{}};var _0x165888={};var _0x4c99a0={'count':0x0,'rows':[]};return db['ChatWebsite'][_0xcfc4('0x66')]({'where':{'id':_0x550269[_0xcfc4('0x58')]['id']}})['then'](handleEntityNotFound(_0x3b4c5,null))[_0xcfc4('0x23')](function(_0x8d84f3){if(_0x8d84f3){_0x165888[_0xcfc4('0x43')]=_[_0xcfc4('0x44')](db['Disposition']['rawAttributes']);_0x165888['query']=_['keys'](_0x550269[_0xcfc4('0x45')]);_0x165888[_0xcfc4('0x46')]=_[_0xcfc4('0x47')](_0x165888[_0xcfc4('0x43')],_0x165888[_0xcfc4('0x45')]);_0x56e022['attributes']=_[_0xcfc4('0x47')](_0x165888['model'],qs[_0xcfc4('0x67')](_0x550269['query'][_0xcfc4('0x67')]));_0x56e022[_0xcfc4('0x48')]=_0x56e022[_0xcfc4('0x48')][_0xcfc4('0x49')]?_0x56e022[_0xcfc4('0x48')]:_0x165888['model'];if(!_0x550269[_0xcfc4('0x45')][_0xcfc4('0x68')]('nolimit')){_0x56e022[_0xcfc4('0x33')]=qs[_0xcfc4('0x33')](_0x550269[_0xcfc4('0x45')]['limit']);_0x56e022['offset']=qs[_0xcfc4('0x32')](_0x550269[_0xcfc4('0x45')][_0xcfc4('0x32')]);}_0x56e022[_0xcfc4('0x4a')]=qs[_0xcfc4('0x4b')](_0x550269[_0xcfc4('0x45')][_0xcfc4('0x4b')]);_0x56e022[_0xcfc4('0x4c')]=qs[_0xcfc4('0x46')](_[_0xcfc4('0x4d')](_0x550269[_0xcfc4('0x45')],_0x165888[_0xcfc4('0x46')]));_0x56e022[_0xcfc4('0x4c')][_0xcfc4('0x69')]=_0x8d84f3['id'];if(_0x550269[_0xcfc4('0x45')]['filter']){_0x56e022[_0xcfc4('0x4c')]=_[_0xcfc4('0x4e')](_0x56e022[_0xcfc4('0x4c')],{'$or':_[_0xcfc4('0x4f')](_0x56e022[_0xcfc4('0x48')],function(_0x3ea6a0){var _0x292e99={};_0x292e99[_0x3ea6a0]={'$like':'%'+_0x550269[_0xcfc4('0x45')]['filter']+'%'};return _0x292e99;})});}_0x56e022=_['merge']({},_0x56e022,_0x550269[_0xcfc4('0x6a')]);return db['Disposition'][_0xcfc4('0x54')]({'where':_0x56e022[_0xcfc4('0x4c')]})[_0xcfc4('0x23')](function(_0x4be644){_0x4c99a0[_0xcfc4('0x54')]=_0x4be644;if(_0x550269[_0xcfc4('0x45')][_0xcfc4('0x5a')]){_0x56e022['include']=[{'all':!![]}];}return db[_0xcfc4('0x64')][_0xcfc4('0x56')](_0x56e022);})[_0xcfc4('0x23')](function(_0x171ec1){_0x4c99a0['rows']=_0x171ec1;return _0x4c99a0;});}})['then'](respondWithFilteredResult(_0x3b4c5,_0x56e022))[_0xcfc4('0x2d')](handleError(_0x3b4c5,null));};exports['removeDispositions']=function(_0x4ab3ed,_0x2019d0,_0x489882){return db[_0xcfc4('0x41')]['find']({'where':{'id':_0x4ab3ed[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x2019d0,null))[_0xcfc4('0x23')](function(_0x44d4b9){if(_0x44d4b9){return _0x44d4b9[_0xcfc4('0x6b')](_0x4ab3ed[_0xcfc4('0x45')][_0xcfc4('0x6c')]);}})[_0xcfc4('0x23')](respondWithStatusCode(_0x2019d0,null))[_0xcfc4('0x2d')](handleError(_0x2019d0,null));};exports['addAnswer']=function(_0x2c4145,_0x39faf8,_0x197ff5){if(_0x2c4145[_0xcfc4('0x5d')]['id']){delete _0x2c4145[_0xcfc4('0x5d')]['id'];}return db[_0xcfc4('0x41')][_0xcfc4('0x5b')]({'where':{'id':_0x2c4145[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x39faf8,null))[_0xcfc4('0x23')](function(_0xbdbfe1){if(_0xbdbfe1){_0x2c4145['body'][_0xcfc4('0x69')]=_0xbdbfe1['id'];return db[_0xcfc4('0x6d')][_0xcfc4('0x5c')](_0x2c4145[_0xcfc4('0x5d')]);}})['then'](respondWithResult(_0x39faf8,null))[_0xcfc4('0x2d')](handleError(_0x39faf8,null));};exports[_0xcfc4('0x6e')]=function(_0x5d3d19,_0x2108df,_0x35c603){var _0x3c5f32={'raw':![],'where':{}};var _0x46d740={};var _0x370c95={'count':0x0,'rows':[]};return db[_0xcfc4('0x41')][_0xcfc4('0x66')]({'where':{'id':_0x5d3d19[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x2108df,null))[_0xcfc4('0x23')](function(_0x98094f){if(_0x98094f){_0x46d740['model']=_[_0xcfc4('0x44')](db[_0xcfc4('0x6d')][_0xcfc4('0x42')]);_0x46d740['query']=_[_0xcfc4('0x44')](_0x5d3d19['query']);_0x46d740[_0xcfc4('0x46')]=_[_0xcfc4('0x47')](_0x46d740['model'],_0x46d740['query']);_0x3c5f32['attributes']=_[_0xcfc4('0x47')](_0x46d740[_0xcfc4('0x43')],qs[_0xcfc4('0x67')](_0x5d3d19['query']['fields']));_0x3c5f32[_0xcfc4('0x48')]=_0x3c5f32[_0xcfc4('0x48')][_0xcfc4('0x49')]?_0x3c5f32[_0xcfc4('0x48')]:_0x46d740['model'];if(!_0x5d3d19[_0xcfc4('0x45')]['hasOwnProperty'](_0xcfc4('0x6f'))){_0x3c5f32['limit']=qs['limit'](_0x5d3d19[_0xcfc4('0x45')][_0xcfc4('0x33')]);_0x3c5f32[_0xcfc4('0x32')]=qs[_0xcfc4('0x32')](_0x5d3d19[_0xcfc4('0x45')][_0xcfc4('0x32')]);}_0x3c5f32[_0xcfc4('0x4a')]=qs[_0xcfc4('0x4b')](_0x5d3d19['query'][_0xcfc4('0x4b')]);_0x3c5f32[_0xcfc4('0x4c')]=qs[_0xcfc4('0x46')](_['pick'](_0x5d3d19[_0xcfc4('0x45')],_0x46d740[_0xcfc4('0x46')]));_0x3c5f32[_0xcfc4('0x4c')][_0xcfc4('0x69')]=_0x98094f['id'];if(_0x5d3d19[_0xcfc4('0x45')][_0xcfc4('0x53')]){_0x3c5f32[_0xcfc4('0x4c')]=_[_0xcfc4('0x4e')](_0x3c5f32[_0xcfc4('0x4c')],{'$or':_[_0xcfc4('0x4f')](_0x3c5f32[_0xcfc4('0x48')],function(_0x4e637b){var _0x1a0151={};_0x1a0151[_0x4e637b]={'$like':'%'+_0x5d3d19[_0xcfc4('0x45')][_0xcfc4('0x53')]+'%'};return _0x1a0151;})});}_0x3c5f32=_[_0xcfc4('0x4e')]({},_0x3c5f32,_0x5d3d19[_0xcfc4('0x6a')]);return db[_0xcfc4('0x6d')][_0xcfc4('0x54')]({'where':_0x3c5f32[_0xcfc4('0x4c')]})[_0xcfc4('0x23')](function(_0x692219){_0x370c95['count']=_0x692219;if(_0x5d3d19[_0xcfc4('0x45')][_0xcfc4('0x5a')]){_0x3c5f32['include']=[{'all':!![]}];}return db[_0xcfc4('0x6d')][_0xcfc4('0x56')](_0x3c5f32);})[_0xcfc4('0x23')](function(_0xb0fac1){_0x370c95[_0xcfc4('0x70')]=_0xb0fac1;return _0x370c95;});}})['then'](respondWithFilteredResult(_0x2108df,_0x3c5f32))[_0xcfc4('0x2d')](handleError(_0x2108df,null));};exports[_0xcfc4('0x71')]=function(_0x38100f,_0x1b1da8,_0x5d67f1){return db[_0xcfc4('0x41')][_0xcfc4('0x5b')]({'where':{'id':_0x38100f[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x1b1da8,null))['then'](function(_0x328df1){if(_0x328df1){return _0x328df1[_0xcfc4('0x71')](_0x38100f['query'][_0xcfc4('0x6c')]);}})['then'](respondWithStatusCode(_0x1b1da8,null))['catch'](handleError(_0x1b1da8,null));};exports['addLogo']=function(_0x3f527d,_0x4ebdb8,_0x584010){_0x3f527d[_0xcfc4('0x5d')]['sitepic']=_0x3f527d['file'][_0xcfc4('0x72')];return db[_0xcfc4('0x41')][_0xcfc4('0x5b')]({'where':{'id':_0x3f527d[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x4ebdb8,null))[_0xcfc4('0x23')](saveUpdates(_0x3f527d['body'],null))[_0xcfc4('0x23')](respondWithResult(_0x4ebdb8,null))[_0xcfc4('0x2d')](handleError(_0x4ebdb8,null));};exports[_0xcfc4('0x73')]=function(_0xa6fbf,_0x439453,_0x24db8c){_0xa6fbf['body'][_0xcfc4('0x74')]=_0xa6fbf[_0xcfc4('0x75')][_0xcfc4('0x72')];return db[_0xcfc4('0x41')][_0xcfc4('0x5b')]({'where':{'id':_0xa6fbf[_0xcfc4('0x58')]['id']}})['then'](handleEntityNotFound(_0x439453,null))[_0xcfc4('0x23')](saveUpdates(_0xa6fbf[_0xcfc4('0x5d')],null))[_0xcfc4('0x23')](respondWithResult(_0x439453,null))[_0xcfc4('0x2d')](handleError(_0x439453,null));};exports[_0xcfc4('0x76')]=function(_0x4a7003,_0x57e9c4,_0x322348){_0x4a7003['body'][_0xcfc4('0x77')]=_0x4a7003[_0xcfc4('0x75')][_0xcfc4('0x72')];return db[_0xcfc4('0x41')][_0xcfc4('0x5b')]({'where':{'id':_0x4a7003[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x57e9c4,null))['then'](saveUpdates(_0x4a7003[_0xcfc4('0x5d')],null))[_0xcfc4('0x23')](respondWithResult(_0x57e9c4,null))[_0xcfc4('0x2d')](handleError(_0x57e9c4,null));};exports['addSystemAvatar']=function(_0x556623,_0xbe23d,_0x805edc){_0x556623['body']['systemAvatar']=_0x556623[_0xcfc4('0x75')][_0xcfc4('0x72')];return db['ChatWebsite']['find']({'where':{'id':_0x556623[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0xbe23d,null))[_0xcfc4('0x23')](saveUpdates(_0x556623[_0xcfc4('0x5d')],null))['then'](respondWithResult(_0xbe23d,null))['catch'](handleError(_0xbe23d,null));};exports[_0xcfc4('0x78')]=function(_0x579a12,_0x337d16,_0x5cfefb){var _0x5cc0c5=path[_0xcfc4('0x79')](config[_0xcfc4('0x7a')],_0xcfc4('0x7b'));var _0x5d8647={'where':{'id':_0x579a12[_0xcfc4('0x58')]['id']},'attributes':['id',_0xcfc4('0x7c')],'raw':!![]};var _0x404c33=![];return require(_0xcfc4('0x7d'))['getLicense']()[_0xcfc4('0x23')](function(_0x6cbba0){if(_0x6cbba0){_0x404c33=_0x6cbba0[_0xcfc4('0x7e')];}})[_0xcfc4('0x23')](function(){return db[_0xcfc4('0x41')][_0xcfc4('0x5b')](_0x5d8647);})['then'](handleEntityNotFound(_0x337d16,null))[_0xcfc4('0x23')](function(_0x64fe18){if(_0x64fe18){if(!_['isNil'](_0x64fe18['sitepic'])){if(fs[_0xcfc4('0x7f')](path[_0xcfc4('0x79')](config[_0xcfc4('0x7a')],_0xcfc4('0x80'),_0x64fe18[_0xcfc4('0x7c')]))&&_0x404c33){_0x5cc0c5=path['join'](config[_0xcfc4('0x7a')],_0xcfc4('0x80'),_0x64fe18['sitepic']);}}return _0x337d16[_0xcfc4('0x81')](_0x5cc0c5);}})[_0xcfc4('0x2d')](handleError(_0x337d16,null));};exports['getAvatar']=function(_0x29d3fa,_0x5d424f,_0x3b94ae){var _0x5dc74c=path[_0xcfc4('0x79')](config[_0xcfc4('0x7a')],_0xcfc4('0x82'));var _0x1d246b={'where':{'id':_0x29d3fa['params']['id']},'attributes':['id',_0xcfc4('0x74')],'raw':!![]};return db['ChatWebsite'][_0xcfc4('0x5b')](_0x1d246b)[_0xcfc4('0x23')](handleEntityNotFound(_0x5d424f,null))[_0xcfc4('0x23')](function(_0xb65e8a){if(_0xb65e8a){if(!_['isNil'](_0xb65e8a[_0xcfc4('0x74')])){if(fs[_0xcfc4('0x7f')](path[_0xcfc4('0x79')](config['root'],_0xcfc4('0x83'),_0xb65e8a[_0xcfc4('0x74')]))){_0x5dc74c=path['join'](config[_0xcfc4('0x7a')],_0xcfc4('0x83'),_0xb65e8a[_0xcfc4('0x74')]);}}return _0x5d424f[_0xcfc4('0x81')](_0x5dc74c);}})[_0xcfc4('0x2d')](handleError(_0x5d424f,null));};exports[_0xcfc4('0x84')]=function(_0x562eeb,_0x102c36,_0x29128e){var _0x411c25=path[_0xcfc4('0x79')](config[_0xcfc4('0x7a')],'server/files/images/avatars/customer_avatar.png');var _0x2bb64d={'where':{'id':_0x562eeb[_0xcfc4('0x58')]['id']},'attributes':['id',_0xcfc4('0x77'),_0xcfc4('0x85')],'raw':!![]};return db[_0xcfc4('0x41')][_0xcfc4('0x5b')](_0x2bb64d)[_0xcfc4('0x23')](handleEntityNotFound(_0x102c36,null))[_0xcfc4('0x23')](function(_0x28ee11){if(_0x28ee11){if(!_[_0xcfc4('0x86')](_0x28ee11[_0xcfc4('0x77')])){if(fs['existsSync'](path['join'](config[_0xcfc4('0x7a')],_0xcfc4('0x83'),_0x28ee11[_0xcfc4('0x77')]))&&_0x28ee11[_0xcfc4('0x85')]){_0x411c25=path[_0xcfc4('0x79')](config[_0xcfc4('0x7a')],_0xcfc4('0x83'),_0x28ee11[_0xcfc4('0x77')]);}}return _0x102c36[_0xcfc4('0x81')](_0x411c25);}})[_0xcfc4('0x2d')](handleError(_0x102c36,null));};exports[_0xcfc4('0x87')]=function(_0x5f3a80,_0x2e089b,_0x3cd41d){var _0xd40717=path[_0xcfc4('0x79')](config[_0xcfc4('0x7a')],_0xcfc4('0x88'));var _0x95268c={'where':{'id':_0x5f3a80[_0xcfc4('0x58')]['id']},'attributes':['id',_0xcfc4('0x89')],'raw':!![]};return db[_0xcfc4('0x41')]['find'](_0x95268c)[_0xcfc4('0x23')](handleEntityNotFound(_0x2e089b,null))['then'](function(_0x47bd7a){if(_0x47bd7a){if(!_[_0xcfc4('0x86')](_0x47bd7a['systemAvatar'])){if(fs[_0xcfc4('0x7f')](path[_0xcfc4('0x79')](config['root'],'server/files/images/avatars/',_0x47bd7a[_0xcfc4('0x89')]))){_0xd40717=path[_0xcfc4('0x79')](config[_0xcfc4('0x7a')],_0xcfc4('0x83'),_0x47bd7a[_0xcfc4('0x89')]);}}return _0x2e089b['download'](_0xd40717);}})['catch'](handleError(_0x2e089b,null));};exports[_0xcfc4('0x8a')]=function(_0x3080f1,_0x40030e,_0xbf5573){var _0x1f6fb3=require(_0xcfc4('0x8b'));var _0x270cc2=new _0x1f6fb3();var _0x5e8305=_0x270cc2[_0xcfc4('0x8c')](_0x3080f1['headers'][_0xcfc4('0x8d')])[_0xcfc4('0x8e')]();var _0x5cc60a={'body':_0x3080f1[_0xcfc4('0x5d')],'channel':_0xcfc4('0x8f')};var _0x182855=[];var _0x4966b7=[];var _0x586aad={};var _0x219419=![];return db[_0xcfc4('0x90')]['describe']()[_0xcfc4('0x23')](function(_0x5bfe5a){if(!_0x5bfe5a){throw new db[(_0xcfc4('0x91'))][(_0xcfc4('0x92'))](_0xcfc4('0x93'));}_0x182855=_[_0xcfc4('0x94')](_['keys'](_0x5bfe5a),['createdAt','updatedAt']);_0x4966b7=_[_0xcfc4('0x94')](_[_0xcfc4('0x44')](_0x5bfe5a),[_0xcfc4('0x95'),_0xcfc4('0x96'),_0xcfc4('0x97'),_0xcfc4('0x98')]);if(_0x3080f1[_0xcfc4('0x5d')]['id']){delete _0x3080f1['body']['id'];}if(_[_0xcfc4('0x86')](_0x3080f1['body'][_0xcfc4('0x99')])){throw new db[(_0xcfc4('0x91'))]['ValidationError'](_0xcfc4('0x9a'));}if(_[_0xcfc4('0x86')](_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0x5d')])||_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0x5d')]===''){throw new db[(_0xcfc4('0x91'))][(_0xcfc4('0x92'))](_0xcfc4('0x9b'));}if(_['isNil'](_0x3080f1['body'][_0xcfc4('0x9c')])){throw new db[(_0xcfc4('0x91'))][(_0xcfc4('0x92'))](_0xcfc4('0x9d')+_0x4966b7);}if(!_[_0xcfc4('0x9e')](_0x4966b7,_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0x9c')])){throw new db[(_0xcfc4('0x91'))][(_0xcfc4('0x92'))](_0xcfc4('0x9f')+_0x4966b7);}_0x586aad[_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0x9c')]]=_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0x99')];})[_0xcfc4('0x23')](function(){return db['ChatWebsite'][_0xcfc4('0x5b')]({'where':{'id':_0x3080f1['params']['id']},'include':[{'model':db[_0xcfc4('0xa0')],'as':_0xcfc4('0xa1'),'include':[{'model':db[_0xcfc4('0x90')],'as':_0xcfc4('0xa2'),'where':_0x586aad,'limit':0x1,'order':[[_0xcfc4('0x96'),'DESC']]}]},{'model':db[_0xcfc4('0xa3')],'as':'Applications'}]});})['then'](handleEntityNotFound(_0x40030e,null))[_0xcfc4('0x23')](function(_0x581c9b){if(_0x581c9b&&_0x581c9b[_0xcfc4('0xa1')]){_0x5cc60a[_0xcfc4('0xa4')]=_0x581c9b;_0x5cc60a[_0xcfc4('0xa5')]=_0x581c9b[_0xcfc4('0xa6')];_0x5cc60a['list']=_0x581c9b['List'];_0x5cc60a[_0xcfc4('0xa5')]=_[_0xcfc4('0xa7')](_0x5cc60a[_0xcfc4('0xa5')],[_0xcfc4('0xa8')],[_0xcfc4('0xa9')]);if(_0x5cc60a['account'][_0xcfc4('0xa6')]){delete _0x5cc60a[_0xcfc4('0xa4')][_0xcfc4('0xa6')];}if(_0x5cc60a[_0xcfc4('0xa4')]['List']&&_0x5cc60a[_0xcfc4('0xa4')][_0xcfc4('0xa1')][_0xcfc4('0xa2')][_0xcfc4('0x49')]){return _0x5cc60a[_0xcfc4('0xa4')]['List'][_0xcfc4('0xa2')][0x0];}var _0x34b157=_[_0xcfc4('0x19')](_0x3080f1['body'],{'firstName':_0x3080f1['body'][_0xcfc4('0x99')],'ListId':_0x581c9b['ListId']});_0x34b157[_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0x9c')]]=_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0x99')];return db[_0xcfc4('0x90')][_0xcfc4('0x5c')](_0x34b157,{'fields':_0x182855,'raw':!![]});}})['then'](handleEntityNotFound(_0x40030e,null))[_0xcfc4('0x23')](function(_0x4dcdff){_0x5cc60a[_0xcfc4('0xaa')]=_0x4dcdff;if(_0x4dcdff){var _0x4955af={'ContactId':_0x4dcdff['id'],'ChatWebsiteId':_0x3080f1[_0xcfc4('0x58')]['id'],'from':(_0x4dcdff['firstName']||'')+'\x20'+(_0x4dcdff[_0xcfc4('0xab')]||''),'customerIp':_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0xac')],'referer':_0x3080f1['body'][_0xcfc4('0xad')],'browserName':_0x5e8305[_0xcfc4('0xae')][_0xcfc4('0x3e')]&&_0x5e8305['browser'][_0xcfc4('0xaf')]?util[_0xcfc4('0xb0')](_0xcfc4('0xb1'),_0x5e8305[_0xcfc4('0xae')][_0xcfc4('0x3e')],_0x5e8305[_0xcfc4('0xae')][_0xcfc4('0xaf')]):_0xcfc4('0xb2'),'browserVersion':_0x5e8305[_0xcfc4('0xae')][_0xcfc4('0xaf')]||_0xcfc4('0xb2'),'osName':util['format'](_0xcfc4('0xb1'),_0x5e8305['os'][_0xcfc4('0x3e')],_0x5e8305['os'][_0xcfc4('0xaf')]),'osVersion':_0x5e8305['os'][_0xcfc4('0xaf')],'deviceModel':_0x5e8305['device']['model']&&_0x5e8305['device'][_0xcfc4('0xb3')]?util[_0xcfc4('0xb0')]('%s\x20%s\x20%s',_0x5e8305['device']['model'],_0x5e8305[_0xcfc4('0xb4')]['vendor'],_0x5e8305[_0xcfc4('0xb4')][_0xcfc4('0xb5')]):null,'deviceVendor':_0x5e8305['device'][_0xcfc4('0xb3')],'deviceType':_0x5e8305[_0xcfc4('0xb4')][_0xcfc4('0xb5')],'formData':JSON[_0xcfc4('0x29')](_0x3080f1[_0xcfc4('0x5d')])};var _0x15091e={'ChatWebsiteId':_0x3080f1[_0xcfc4('0x58')]['id'],'closed':![]};if(_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0xb6')]){_0x15091e[_0xcfc4('0xb6')]=_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0xb6')];return db[_0xcfc4('0xb7')][_0xcfc4('0x5b')]({'where':_0x15091e})['then'](function(_0x1c1ad6){if(_0x1c1ad6){return[_0x1c1ad6,![]];}_0x4955af['threadId']=_0x3080f1[_0xcfc4('0x5d')]['threadId'];_0x4955af[_0xcfc4('0xb8')]=_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0xb8')];return db[_0xcfc4('0xb7')][_0xcfc4('0x5c')](_0x4955af)['then'](function(_0x46d87b){return[_0x46d87b,!![]];});});}_0x15091e['ContactId']=_0x4dcdff['id'];if(_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0xb9')]&&_0x3080f1[_0xcfc4('0x5d')]['interaction']['id']){_0x15091e['id']=_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0xb9')]['id'];return db[_0xcfc4('0xb7')][_0xcfc4('0x5b')]({'where':_0x15091e})[_0xcfc4('0x23')](function(_0x32d81f){if(_0x32d81f){return[_0x32d81f,![]];}return db[_0xcfc4('0xb7')]['create'](_0x4955af)[_0xcfc4('0x23')](function(_0x3113b9){return[_0x3113b9,!![]];});});}return db[_0xcfc4('0xb7')]['create'](_0x4955af)['then'](function(_0x2d4234){return[_0x2d4234,!![]];});}})['spread'](function(_0x1a95ce,_0x195a76){if(_0x1a95ce){_0x219419=_0x195a76;if(!_0x195a76){var _0x38278d={'from':(_0x5cc60a[_0xcfc4('0xaa')][_0xcfc4('0xba')]||'')+'\x20'+(_0x5cc60a[_0xcfc4('0xaa')]['lastName']||'')};if(_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0xb6')]&&_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0xbb')]&&_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0xb6')]!=_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0xbb')]){_0x38278d[_0xcfc4('0xb6')]=_0x3080f1['body'][_0xcfc4('0xbb')];}return _0x1a95ce[_0xcfc4('0x39')](_0x38278d);}else{return _0x1a95ce;}}})[_0xcfc4('0x23')](function(_0x1c785a){_0x5cc60a[_0xcfc4('0xb9')]=_0x1c785a[_0xcfc4('0x3a')]({'plain':!![]});_0x5cc60a[_0xcfc4('0xb9')][_0xcfc4('0xbc')]=_0x219419;if(_0x5cc60a[_0xcfc4('0xb9')][_0xcfc4('0xbc')]){if(_0x5cc60a[_0xcfc4('0xa4')][_0xcfc4('0xbd')]){_0x5cc60a[_0xcfc4('0xa5')][_0xcfc4('0xbe')]({'id':0x0,'priority':_0x5cc60a['applications']['length']+0x1,'app':_0xcfc4('0xbf'),'appdata':'unmanaged','interval':'*,*,*,*'});}}return db[_0xcfc4('0xc0')][_0xcfc4('0x5c')]({'body':_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0x5d')],'ChatWebsiteId':_0x3080f1[_0xcfc4('0x58')]['id'],'ChatInteractionId':_0x1c785a['id'],'direction':'in','ContactId':_0x5cc60a[_0xcfc4('0xaa')]['id'],'AttachmentId':_0x3080f1[_0xcfc4('0x5d')][_0xcfc4('0xc1')]});})[_0xcfc4('0x23')](function(_0x117936){_0x5cc60a[_0xcfc4('0x2b')]=_0x117936;if(_0x5cc60a[_0xcfc4('0xb9')][_0xcfc4('0xc2')]){return db[_0xcfc4('0xc3')][_0xcfc4('0x5b')]({'attributes':['id','name'],'where':{'id':_0x5cc60a[_0xcfc4('0xb9')][_0xcfc4('0xc2')]}})[_0xcfc4('0x23')](function(_0x23e532){if(_0x23e532){_0x5cc60a[_0xcfc4('0xa5')][_0xcfc4('0xc4')]({'id':0x0,'priority':0x0,'app':_0xcfc4('0xc5'),'appdata':_0x23e532[_0xcfc4('0x3e')]+','+(_0x5cc60a['account']['waitForTheAssignedAgent']||0xa),'interval':'*,*,*,*'});_0x5cc60a[_0xcfc4('0xc6')]=!![];}return respondWithRpcPromise(_0xcfc4('0xc7'),_0xcfc4('0xc8'),_0x5cc60a);});}return respondWithRpcPromise('Start','startRouting',_0x5cc60a);})[_0xcfc4('0x23')](function(_0x143591){respondWithRpcPromise(_0xcfc4('0xc9'),_0xcfc4('0xc9'),{'event':_0xcfc4('0x8a'),'message':_0x143591},client9002);return _0x143591;})[_0xcfc4('0x23')](respondWithResult(_0x40030e,null))[_0xcfc4('0x2d')](handleError(_0x40030e,null));};exports[_0xcfc4('0xca')]=function(_0x2de18e,_0xa1c7fe,_0x24efc3){var _0x4f81d7,_0x14f9c3,_0x557dff;var _0x188f9b=[];var _0x59877f=[];var _0x4ac02c={};return db[_0xcfc4('0x90')][_0xcfc4('0x62')]()[_0xcfc4('0x23')](function(_0x19ac4f){if(!_0x19ac4f){throw new db[(_0xcfc4('0x91'))][(_0xcfc4('0x92'))](_0xcfc4('0x93'));}_0x59877f=_[_0xcfc4('0x94')](_[_0xcfc4('0x44')](_0x19ac4f),[_0xcfc4('0x95'),'updatedAt']);_0x188f9b=_[_0xcfc4('0x94')](_[_0xcfc4('0x44')](_0x19ac4f),[_0xcfc4('0x95'),_0xcfc4('0x96'),_0xcfc4('0x97'),_0xcfc4('0x98')]);if(_0x2de18e[_0xcfc4('0x5d')]['id']){delete _0x2de18e[_0xcfc4('0x5d')]['id'];}if(_[_0xcfc4('0x86')](_0x2de18e[_0xcfc4('0x5d')][_0xcfc4('0x99')])){throw _0xa1c7fe[_0xcfc4('0x2f')](0x1f4)[_0xcfc4('0xcb')](new db['Sequelize'][(_0xcfc4('0x92'))](_0xcfc4('0x9a')));}if(_[_0xcfc4('0x86')](_0x2de18e[_0xcfc4('0x5d')][_0xcfc4('0x5d')])||_0x2de18e[_0xcfc4('0x5d')]['body']===''){throw _0xa1c7fe[_0xcfc4('0x2f')](0x1f4)[_0xcfc4('0xcb')](new db[(_0xcfc4('0x91'))][(_0xcfc4('0x92'))](_0xcfc4('0x9b')));}if(_[_0xcfc4('0x86')](_0x2de18e[_0xcfc4('0x5d')][_0xcfc4('0xcc')])){throw _0xa1c7fe[_0xcfc4('0x2f')](0x1f4)['send'](new db[(_0xcfc4('0x91'))][(_0xcfc4('0x92'))](_0xcfc4('0xcd')+_0x188f9b));}if(!_[_0xcfc4('0x9e')](_0x188f9b,_0x2de18e[_0xcfc4('0x5d')]['mapKeyOffline'])){throw _0xa1c7fe['status'](0x1f4)[_0xcfc4('0xcb')](new db[(_0xcfc4('0x91'))][(_0xcfc4('0x92'))]('mapKeyOffline\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x188f9b));}_0x4ac02c[_0x2de18e[_0xcfc4('0x5d')]['mapKeyOffline']]=_0x2de18e[_0xcfc4('0x5d')][_0xcfc4('0x99')];})[_0xcfc4('0x23')](function(){return db[_0xcfc4('0x41')][_0xcfc4('0x5b')]({'where':{'id':_0x2de18e[_0xcfc4('0x58')]['id']},'include':[{'model':db[_0xcfc4('0xa0')],'as':_0xcfc4('0xa1')}]});})[_0xcfc4('0x23')](handleEntityNotFound(_0xa1c7fe,null))['then'](function(_0x5858f4){if(_0x5858f4&&_0x5858f4[_0xcfc4('0xa1')]){_0x14f9c3=_0x5858f4;var _0x2782dc=_[_0xcfc4('0x19')](_0x2de18e[_0xcfc4('0x5d')],{'firstName':_0x2de18e[_0xcfc4('0x5d')][_0xcfc4('0x99')],'phone':_0x2de18e[_0xcfc4('0x5d')]['from'],'ListId':_0x5858f4[_0xcfc4('0x98')]});_0x2782dc[_0x2de18e[_0xcfc4('0x5d')][_0xcfc4('0xcc')]]=_0x2de18e[_0xcfc4('0x5d')][_0xcfc4('0x99')];return db[_0xcfc4('0x90')]['findOrCreate']({'where':_0x4ac02c,'defaults':_0x2782dc});}})['spread'](function(_0x56f2ec){if(_0x56f2ec){_0x557dff=_0x56f2ec;var _0x581dfe=fs[_0xcfc4('0xce')](path[_0xcfc4('0x79')](config[_0xcfc4('0x7a')],'server/files/templates/chatOfflineMessage.ejs'),_0xcfc4('0xcf'));var _0x4005b9=ejs[_0xcfc4('0xd0')](_0x581dfe,{'body':_[_0xcfc4('0xd1')](_0x2de18e[_0xcfc4('0x5d')]['body']),'bodyTitle':_0x14f9c3[_0xcfc4('0xd2')]});return db['ChatOfflineMessage'][_0xcfc4('0x5c')]({'body':_0x4005b9,'ContactId':_0x56f2ec['id'],'ChatWebsiteId':_0x14f9c3['id']});}})[_0xcfc4('0x23')](function(_0x3c4256){if(_0x3c4256){_0x4f81d7=_0x3c4256;return db['MailAccount'][_0xcfc4('0x66')]({'where':{'service':!![]},'include':[{'model':db[_0xcfc4('0xd3')],'as':_0xcfc4('0xd4'),'raw':!![]}]});}})[_0xcfc4('0x23')](function(_0x2ca781){if(_0x2ca781&&_0x2ca781[_0xcfc4('0xd4')]&&_0x14f9c3[_0xcfc4('0xd5')]){var _0x54d0a7={'tls':{'rejectUnauthorized':![]}};if(_0x2ca781[_0xcfc4('0xd4')][_0xcfc4('0xd6')]){_0x54d0a7[_0xcfc4('0xd6')]=_0x2ca781[_0xcfc4('0xd4')]['service'];}else{_0x54d0a7[_0xcfc4('0xd7')]=_0x2ca781[_0xcfc4('0xd4')]['host'];_0x54d0a7[_0xcfc4('0xd8')]=_0x2ca781[_0xcfc4('0xd4')]['port'];_0x54d0a7['secure']=_0x2ca781[_0xcfc4('0xd4')][_0xcfc4('0xd9')];}if(_0x2ca781[_0xcfc4('0xd4')][_0xcfc4('0xda')]){_0x54d0a7['auth']={'user':_0x2ca781[_0xcfc4('0xd4')][_0xcfc4('0x5e')],'pass':_0x2ca781[_0xcfc4('0xd4')][_0xcfc4('0xdb')]};}return respondWithRpcPromise(_0xcfc4('0xdc'),'sendMail',{'account':_0x54d0a7,'message':{'from':util[_0xcfc4('0xb0')](_0xcfc4('0xdd'),_0x2ca781[_0xcfc4('0x3e')],_0x2ca781['email']||_0x2ca781['Smtp'][_0xcfc4('0x5e')]),'to':_0x14f9c3[_0xcfc4('0xd5')],'subject':_0x14f9c3[_0xcfc4('0xde')],'text':_0x4f81d7[_0xcfc4('0x5d')]}},client9003)[_0xcfc4('0x23')](function(){return _0x4f81d7;})[_0xcfc4('0x2d')](function(_0x862e7d){console['error'](_0x862e7d);});}})[_0xcfc4('0x23')](function(){if(_0x4f81d7){return _0x4f81d7;}})[_0xcfc4('0x23')](respondWithResult(_0xa1c7fe,null))[_0xcfc4('0x2d')](handleError(_0xa1c7fe,null));};exports[_0xcfc4('0xdf')]=function(_0x5d16c3,_0x48d9f0,_0x1f8f7f){return db[_0xcfc4('0xb7')][_0xcfc4('0x5b')]({'where':{'id':_0x5d16c3[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x48d9f0,null))[_0xcfc4('0x23')](function(_0x28166f){if(_0x28166f){return _0x28166f[_0xcfc4('0xdf')](_0x5d16c3[_0xcfc4('0x5d')][_0xcfc4('0x6c')],_[_0xcfc4('0xe0')](_0x5d16c3[_0xcfc4('0x5d')],['ids','id'])||{});}})[_0xcfc4('0x23')](respondWithResult(_0x48d9f0,null))[_0xcfc4('0x2d')](handleError(_0x48d9f0,null));};exports[_0xcfc4('0xe1')]=function(_0x5a1114,_0x44c3f1,_0x25f9ab){var _0x24b077={'raw':![],'where':{}};var _0x78b348={};var _0x497d36={'count':0x0,'rows':[]};return db[_0xcfc4('0x41')][_0xcfc4('0x66')]({'where':{'id':_0x5a1114[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x44c3f1,null))[_0xcfc4('0x23')](function(_0x33ff32){if(_0x33ff32){_0x78b348[_0xcfc4('0x43')]=_[_0xcfc4('0x44')](db[_0xcfc4('0xb7')][_0xcfc4('0x42')]);_0x78b348['query']=_[_0xcfc4('0x44')](_0x5a1114[_0xcfc4('0x45')]);_0x78b348[_0xcfc4('0x46')]=_[_0xcfc4('0x47')](_0x78b348[_0xcfc4('0x43')],_0x78b348[_0xcfc4('0x45')]);_0x24b077[_0xcfc4('0x48')]=_['intersection'](_0x78b348[_0xcfc4('0x43')],qs[_0xcfc4('0x67')](_0x5a1114['query']['fields']));_0x24b077[_0xcfc4('0x48')]=_0x24b077[_0xcfc4('0x48')][_0xcfc4('0x49')]?_0x24b077[_0xcfc4('0x48')]:_0x78b348[_0xcfc4('0x43')];if(!_0x5a1114['query'][_0xcfc4('0x68')]('nolimit')){_0x24b077[_0xcfc4('0x33')]=qs[_0xcfc4('0x33')](_0x5a1114[_0xcfc4('0x45')][_0xcfc4('0x33')]);_0x24b077[_0xcfc4('0x32')]=qs[_0xcfc4('0x32')](_0x5a1114[_0xcfc4('0x45')][_0xcfc4('0x32')]);}_0x24b077[_0xcfc4('0x4a')]=qs[_0xcfc4('0x4b')](_0x5a1114['query'][_0xcfc4('0x4b')]);_0x24b077[_0xcfc4('0x4c')]=qs[_0xcfc4('0x46')](_[_0xcfc4('0x4d')](_0x5a1114['query'],_0x78b348[_0xcfc4('0x46')]));_0x24b077[_0xcfc4('0x4c')][_0xcfc4('0x69')]=_0x33ff32['id'];if(_0x5a1114[_0xcfc4('0x45')][_0xcfc4('0x53')]){_0x24b077[_0xcfc4('0x4c')]=_['merge'](_0x24b077[_0xcfc4('0x4c')],{'$or':_['map'](_0x24b077[_0xcfc4('0x48')],function(_0x1f7ecd){var _0x49c00e={};_0x49c00e[_0x1f7ecd]={'$like':'%'+_0x5a1114[_0xcfc4('0x45')][_0xcfc4('0x53')]+'%'};return _0x49c00e;})});}_0x24b077=_['merge']({},_0x24b077,_0x5a1114[_0xcfc4('0x6a')]);return db['ChatInteraction'][_0xcfc4('0x54')]({'where':_0x24b077[_0xcfc4('0x4c')]})['then'](function(_0x1eb26e){_0x497d36[_0xcfc4('0x54')]=_0x1eb26e;if(_0x5a1114[_0xcfc4('0x45')][_0xcfc4('0x5a')]){_0x24b077['include']=[{'model':db['CmContact'],'as':_0xcfc4('0xe2'),'required':![]},{'model':db['User'],'as':_0xcfc4('0xe3'),'attributes':['name',_0xcfc4('0xe4'),_0xcfc4('0xe5')],'required':![]},{'model':db[_0xcfc4('0xe6')],'as':'Tags','attributes':['id',_0xcfc4('0x3e'),_0xcfc4('0xe7')],'where':_0x5a1114['query'][_0xcfc4('0xe8')]?{'id':_0x5a1114['query'][_0xcfc4('0xe8')]}:undefined,'required':_0x5a1114[_0xcfc4('0x45')][_0xcfc4('0xe8')]?!![]:![]}];}return db['ChatInteraction']['findAll'](_0x24b077);})[_0xcfc4('0x23')](function(_0x48d27b){_0x497d36[_0xcfc4('0x70')]=_0x48d27b;return _0x497d36;});}})['then'](respondWithFilteredResult(_0x44c3f1,_0x24b077))[_0xcfc4('0x2d')](handleError(_0x44c3f1,null));};function iftimePromise(_0xa934de,_0x384ba9){return respondWithRpcPromise(_0xcfc4('0xe9'),_0xcfc4('0xea'),{'command':_0x384ba9[_0xcfc4('0xeb')]?util[_0xcfc4('0xb0')](_0xcfc4('0xec'),_0xa934de[_0xcfc4('0xed')],_0x384ba9[_0xcfc4('0xeb')]):util[_0xcfc4('0xb0')]('iftime\x20%s',_0xa934de[_0xcfc4('0xed')])},client9002)[_0xcfc4('0x23')](function(_0x1dc898){var _0x5876a7=_0x1dc898&&_0x1dc898['indexOf'](_0xcfc4('0xee'))>=0x0?!![]:![];logger[_0xcfc4('0x24')](_0xcfc4('0xef'),_0x384ba9['id'],_0xa934de['id'],_0xa934de[_0xcfc4('0xed')],_0x5876a7?'ONLINE':_0xcfc4('0xf0'),_0x384ba9[_0xcfc4('0xeb')]?_0x384ba9[_0xcfc4('0xeb')]:_0xcfc4('0xf1'));return _0x5876a7;})['catch'](function(_0x500fc5){logger[_0xcfc4('0x2a')]('[%s][INTERVAL][%s]\x20%s\x20%s\x20(%s)',_0x384ba9['id'],_0xa934de['id'],_0xa934de[_0xcfc4('0xed')],util[_0xcfc4('0xf2')](_0x500fc5,{'showHidden':![],'depth':null}),_0x384ba9['timezone']?_0x384ba9[_0xcfc4('0xeb')]:_0xcfc4('0xf1'));return![];});}exports[_0xcfc4('0xea')]=function(_0x81098,_0x3c94a7,_0x497268){var _0x1c7372=0x0;var _0x449879=0x0;var _0x56141d=![];var _0x3e4b08;var _0x466789;return db[_0xcfc4('0x41')][_0xcfc4('0x5b')]({'where':{'id':_0x81098['params']['id']},'include':[{'model':db['Interval'],'as':'Interval','include':[{'model':db[_0xcfc4('0xf3')],'as':_0xcfc4('0xf4'),'attributes':['id',_0xcfc4('0xed')],'raw':!![]}]}]})[_0xcfc4('0x23')](handleEntityNotFound(_0x3c94a7,null))[_0xcfc4('0x23')](function(_0x9da03c){if(_0x9da03c){_0x3e4b08=_0x9da03c;return _0x9da03c['getProactiveActions']({'raw':!![]});}})[_0xcfc4('0x23')](function(_0xe4038){if(_0x3e4b08){if(_0xe4038){_0x466789=_0xe4038;}}return require('../../config/license/util')[_0xcfc4('0xf5')]();})[_0xcfc4('0x23')](function(_0x193c4d){if(_0x193c4d){_0x449879=_0x193c4d[_0xcfc4('0xf6')];_0x56141d=_0x193c4d[_0xcfc4('0x7e')];}})[_0xcfc4('0x23')](function(){return db[_0xcfc4('0xb7')]['count']({'where':{'closed':![]}});})['then'](function(_0x41dffb){_0x1c7372=_0x41dffb;if(_0x449879&&_0x41dffb>_0x449879){return db[_0xcfc4('0xf7')][_0xcfc4('0x66')]({'where':{'id':0x1}})[_0xcfc4('0x23')](function(_0x69b673){if(_0x69b673){_0x69b673[_0xcfc4('0xf8')](_0xcfc4('0xf9'));}});}})[_0xcfc4('0x23')](function(){if(_0x3e4b08[_0xcfc4('0xf3')]&&_0x3e4b08['Interval']['Intervals']){var _0x6a3f64=[];for(var _0xe90d73=0x0;_0xe90d73<_0x3e4b08['Interval'][_0xcfc4('0xf4')][_0xcfc4('0x49')];_0xe90d73++){var _0x178701=_0x3e4b08['Interval'][_0xcfc4('0xf4')][_0xe90d73]['get']({'plain':!![]});_0x6a3f64['push'](iftimePromise(_0x178701,_0x3e4b08));}return BPromise[_0xcfc4('0xfa')](_0x6a3f64)[_0xcfc4('0x23')](function(_0x517a18){return _[_0xcfc4('0xfb')](_0x517a18);});}else{return!![];}})['then'](function(_0x40edcc){var _0x1d2604=fs[_0xcfc4('0xce')](path[_0xcfc4('0x79')](config[_0xcfc4('0x7a')],'server/files/chat/iframe.js'),_0xcfc4('0xcf'));var _0x20ab20={'remote':_0x3e4b08[_0xcfc4('0xfc')],'query':querystring[_0xcfc4('0x29')](_[_0xcfc4('0x4e')](_0x3e4b08[_0xcfc4('0x3a')]({'plain':!![]}),{'customerIp':_0x81098[_0xcfc4('0xfd')][_0xcfc4('0xfe')]||_0x81098[_0xcfc4('0xfd')][_0xcfc4('0xff')]||_0x81098['connection'][_0xcfc4('0x100')]||_0x81098['ip'],'referer':_0x81098[_0xcfc4('0xfd')][_0xcfc4('0xad')],'openedInteractions':_0x1c7372,'maxInteractions':_0x449879,'virtual':_0x56141d['virtual'],'online':_0x40edcc,'custom':_0x56141d}))[_0xcfc4('0x101')](/'/g,'\x5c\x27')};_0x3c94a7[_0xcfc4('0xcb')](ejs['render'](Mustache[_0xcfc4('0xd0')](_0x1d2604,_0x20ab20),{'proactiveActions':_0x466789,'alignment':_0x3e4b08[_0xcfc4('0x102')],'verticalAlignment':_0x3e4b08[_0xcfc4('0x103')]}));})[_0xcfc4('0x2d')](handleError(_0x3c94a7,null));};exports[_0xcfc4('0x104')]=function(_0x53fe27,_0x279420,_0xfdda37){return db[_0xcfc4('0x41')][_0xcfc4('0x66')]({'where':{'id':_0x53fe27[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x279420,null))['then'](function(_0x28edf7){if(_0x28edf7){return db[_0xcfc4('0x105')]['transaction'](function(_0x9a4600){return db[_0xcfc4('0xa3')]['destroy']({'where':{'ChatWebsiteId':_0x53fe27['params']['id']},'transaction':_0x9a4600})[_0xcfc4('0x23')](function(_0x49aabe){var _0x302f57=_[_0xcfc4('0x4f')](_0x53fe27[_0xcfc4('0x5d')],function(_0x15e141){_0x15e141[_0xcfc4('0x69')]=_0x53fe27[_0xcfc4('0x58')]['id'];return _0x15e141;});return db[_0xcfc4('0xa3')][_0xcfc4('0x106')](_0x302f57,{'transaction':_0x9a4600});});})[_0xcfc4('0x23')](function(){return db[_0xcfc4('0xa3')]['findAndCountAll']({'where':{'ChatWebsiteId':_0x53fe27[_0xcfc4('0x58')]['id']},'order':_0xcfc4('0xa8')});});}})[_0xcfc4('0x23')](respondWithResult(_0x279420,null))['catch'](handleError(_0x279420,null));};exports[_0xcfc4('0x107')]=function(_0x4a33ee,_0x3accde,_0x27565a){var _0x51a29b={};var _0x3ac09a={};var _0x180d06;var _0x62b01f;return db['ChatWebsite']['findOne']({'where':{'id':_0x4a33ee['params']['id']}})['then'](handleEntityNotFound(_0x3accde,null))['then'](function(_0x203a52){if(_0x203a52){_0x180d06=_0x203a52;_0x3ac09a[_0xcfc4('0x43')]=_['keys'](db[_0xcfc4('0xa3')][_0xcfc4('0x42')]);_0x3ac09a['query']=_[_0xcfc4('0x44')](_0x4a33ee[_0xcfc4('0x45')]);_0x3ac09a[_0xcfc4('0x46')]=_['intersection'](_0x3ac09a[_0xcfc4('0x43')],_0x3ac09a['query']);_0x51a29b[_0xcfc4('0x48')]=_[_0xcfc4('0x47')](_0x3ac09a[_0xcfc4('0x43')],qs[_0xcfc4('0x67')](_0x4a33ee['query']['fields']));_0x51a29b[_0xcfc4('0x48')]=_0x51a29b[_0xcfc4('0x48')]['length']?_0x51a29b['attributes']:_0x3ac09a[_0xcfc4('0x43')];_0x51a29b[_0xcfc4('0x4a')]=qs[_0xcfc4('0x4b')](_0x4a33ee[_0xcfc4('0x45')][_0xcfc4('0x4b')]);_0x51a29b[_0xcfc4('0x4c')]=qs[_0xcfc4('0x46')](_[_0xcfc4('0x4d')](_0x4a33ee[_0xcfc4('0x45')],_0x3ac09a[_0xcfc4('0x46')]));if(_0x4a33ee[_0xcfc4('0x45')][_0xcfc4('0x53')]){_0x51a29b[_0xcfc4('0x4c')]=_['merge'](_0x51a29b[_0xcfc4('0x4c')],{'$or':_['map'](_0x51a29b['attributes'],function(_0x4ce2aa){var _0x320f3d={};_0x320f3d[_0x4ce2aa]={'$like':'%'+_0x4a33ee[_0xcfc4('0x45')]['filter']+'%'};return _0x320f3d;})});}_0x51a29b=_[_0xcfc4('0x4e')]({},_0x51a29b,_0x4a33ee[_0xcfc4('0x6a')]);return _0x180d06[_0xcfc4('0x107')](_0x51a29b);}})[_0xcfc4('0x23')](function(_0x4616db){if(_0x4616db){_0x62b01f=_0x4616db['length'];if(!_0x4a33ee[_0xcfc4('0x45')][_0xcfc4('0x68')]('nolimit')){_0x51a29b[_0xcfc4('0x33')]=qs[_0xcfc4('0x33')](_0x4a33ee[_0xcfc4('0x45')]['limit']);_0x51a29b['offset']=qs[_0xcfc4('0x32')](_0x4a33ee['query'][_0xcfc4('0x32')]);}return _0x180d06[_0xcfc4('0x107')](_0x51a29b);}})[_0xcfc4('0x23')](function(_0x371dea){if(_0x371dea){return _0x371dea?{'count':_0x62b01f,'rows':_0x371dea}:null;}})['then'](respondWithResult(_0x3accde,null))[_0xcfc4('0x2d')](handleError(_0x3accde,null));};exports[_0xcfc4('0x108')]=function(_0x176251,_0x42355e,_0x4f5010){return db['chatProactiveAction'][_0xcfc4('0x5b')]({'where':{'id':_0x176251[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x42355e,null))[_0xcfc4('0x23')](function(_0x3af847){if(_0x3af847){return _0x3af847[_0xcfc4('0x108')](_0x176251[_0xcfc4('0x5d')][_0xcfc4('0x6c')],_['omit'](_0x176251[_0xcfc4('0x5d')],[_0xcfc4('0x6c'),'id'])||{});}})[_0xcfc4('0x23')](respondWithResult(_0x42355e,null))[_0xcfc4('0x2d')](handleError(_0x42355e,null));};exports[_0xcfc4('0x109')]=function(_0xfed693,_0x214f36,_0x3f398a){var _0x59b459={};var _0x410e05={};var _0x3ddd55;var _0x38ba21;return db['ChatWebsite'][_0xcfc4('0x66')]({'where':{'id':_0xfed693[_0xcfc4('0x58')]['id']}})['then'](handleEntityNotFound(_0x214f36,null))[_0xcfc4('0x23')](function(_0x65070a){if(_0x65070a){_0x3ddd55=_0x65070a;_0x410e05[_0xcfc4('0x43')]=_[_0xcfc4('0x44')](db[_0xcfc4('0x10a')]['rawAttributes']);_0x410e05[_0xcfc4('0x45')]=_[_0xcfc4('0x44')](_0xfed693[_0xcfc4('0x45')]);_0x410e05[_0xcfc4('0x46')]=_['intersection'](_0x410e05[_0xcfc4('0x43')],_0x410e05[_0xcfc4('0x45')]);_0x59b459[_0xcfc4('0x48')]=_[_0xcfc4('0x47')](_0x410e05['model'],qs[_0xcfc4('0x67')](_0xfed693[_0xcfc4('0x45')][_0xcfc4('0x67')]));_0x59b459[_0xcfc4('0x48')]=_0x59b459['attributes'][_0xcfc4('0x49')]?_0x59b459[_0xcfc4('0x48')]:_0x410e05['model'];_0x59b459['order']=qs[_0xcfc4('0x4b')](_0xfed693[_0xcfc4('0x45')][_0xcfc4('0x4b')]);_0x59b459[_0xcfc4('0x4c')]=qs[_0xcfc4('0x46')](_[_0xcfc4('0x4d')](_0xfed693[_0xcfc4('0x45')],_0x410e05[_0xcfc4('0x46')]));if(_0xfed693[_0xcfc4('0x45')][_0xcfc4('0x53')]){_0x59b459['where']=_[_0xcfc4('0x4e')](_0x59b459[_0xcfc4('0x4c')],{'$or':_[_0xcfc4('0x4f')](_0x59b459[_0xcfc4('0x48')],function(_0x328362){var _0x3ba627={};_0x3ba627[_0x328362]={'$like':'%'+_0xfed693[_0xcfc4('0x45')]['filter']+'%'};return _0x3ba627;})});}_0x59b459=_['merge']({},_0x59b459,_0xfed693['options']);return _0x3ddd55['getProactiveActions'](_0x59b459);}})[_0xcfc4('0x23')](function(_0x5e0004){if(_0x5e0004){_0x38ba21=_0x5e0004[_0xcfc4('0x49')];if(!_0xfed693['query'][_0xcfc4('0x68')](_0xcfc4('0x6f'))){_0x59b459[_0xcfc4('0x33')]=qs[_0xcfc4('0x33')](_0xfed693[_0xcfc4('0x45')][_0xcfc4('0x33')]);_0x59b459[_0xcfc4('0x32')]=qs[_0xcfc4('0x32')](_0xfed693[_0xcfc4('0x45')][_0xcfc4('0x32')]);}return _0x3ddd55[_0xcfc4('0x109')](_0x59b459);}})[_0xcfc4('0x23')](function(_0x1c7624){if(_0x1c7624){return _0x1c7624?{'count':_0x38ba21,'rows':_0x1c7624}:null;}})[_0xcfc4('0x23')](respondWithResult(_0x214f36,null))['catch'](handleError(_0x214f36,null));};exports[_0xcfc4('0x10b')]=function(_0x3697a2,_0x5ccee1,_0x35132a){var _0x15497f=_0x3697a2[_0xcfc4('0x45')][_0xcfc4('0x10c')]==='false'?'offlineForm':'onlineForm';return db['ChatWebsite'][_0xcfc4('0x5b')]({'attributes':['id',_0x15497f],'where':{'id':_0x3697a2[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x5ccee1,null))[_0xcfc4('0x23')](function(_0x1f30f9){if(_0x1f30f9){var _0x1362a1=_0x1f30f9[_0x15497f];var _0x458763=_0x1362a1&&_0x1362a1[_0xcfc4('0x10d')]?_0x1362a1['items']:[];_0x5ccee1[_0xcfc4('0xcb')]({'fromKey':_[_0xcfc4('0x86')](_0x1362a1[_0xcfc4('0x10e')])?undefined:_0x1362a1[_0xcfc4('0x10e')],'count':_0x458763[_0xcfc4('0x49')],'rows':_0x458763});}})[_0xcfc4('0x2d')](handleError(_0x5ccee1,null));};exports[_0xcfc4('0x10f')]=function(_0x438a4e,_0x3f9a41,_0x1113ea){var _0x529ccb={'raw':!![],'where':{}};var _0x54348c={};var _0x6fb0={'count':0x0,'rows':[]};return db[_0xcfc4('0x41')][_0xcfc4('0x66')]({'where':{'id':_0x438a4e['params']['id']}})['then'](handleEntityNotFound(_0x3f9a41,null))[_0xcfc4('0x23')](function(_0x19a80b){if(_0x19a80b){_0x54348c[_0xcfc4('0x43')]=_['keys'](db[_0xcfc4('0x110')][_0xcfc4('0x42')]);_0x54348c['query']=_[_0xcfc4('0x44')](_0x438a4e[_0xcfc4('0x45')]);_0x54348c['filters']=_['intersection'](_0x54348c['model'],_0x54348c[_0xcfc4('0x45')]);_0x529ccb[_0xcfc4('0x48')]=_[_0xcfc4('0x47')](_0x54348c[_0xcfc4('0x43')],qs['fields'](_0x438a4e[_0xcfc4('0x45')][_0xcfc4('0x67')]));_0x529ccb[_0xcfc4('0x48')]=_0x529ccb[_0xcfc4('0x48')]['length']?_0x529ccb[_0xcfc4('0x48')]:_0x54348c[_0xcfc4('0x43')];if(!_0x438a4e[_0xcfc4('0x45')]['hasOwnProperty'](_0xcfc4('0x6f'))){_0x529ccb[_0xcfc4('0x33')]=qs[_0xcfc4('0x33')](_0x438a4e[_0xcfc4('0x45')][_0xcfc4('0x33')]);_0x529ccb['offset']=qs[_0xcfc4('0x32')](_0x438a4e[_0xcfc4('0x45')][_0xcfc4('0x32')]);}_0x529ccb['order']=qs[_0xcfc4('0x4b')](_0x438a4e[_0xcfc4('0x45')][_0xcfc4('0x4b')]);_0x529ccb[_0xcfc4('0x4c')]=qs[_0xcfc4('0x46')](_[_0xcfc4('0x4d')](_0x438a4e['query'],_0x54348c[_0xcfc4('0x46')]));_0x529ccb[_0xcfc4('0x4c')][_0xcfc4('0x69')]=_0x19a80b['id'];if(_0x438a4e['query'][_0xcfc4('0x53')]){_0x529ccb[_0xcfc4('0x4c')]=_[_0xcfc4('0x4e')](_0x529ccb['where'],{'$or':_['map'](_0x529ccb[_0xcfc4('0x48')],function(_0x367df4){var _0x476492={};_0x476492[_0x367df4]={'$like':'%'+_0x438a4e['query'][_0xcfc4('0x53')]+'%'};return _0x476492;})});}_0x529ccb=_[_0xcfc4('0x4e')]({},_0x529ccb,_0x438a4e[_0xcfc4('0x6a')]);return db['ChatOfflineMessage'][_0xcfc4('0x54')]({'where':_0x529ccb[_0xcfc4('0x4c')]})[_0xcfc4('0x23')](function(_0x441401){_0x6fb0[_0xcfc4('0x54')]=_0x441401;if(_0x438a4e[_0xcfc4('0x45')][_0xcfc4('0x5a')]){_0x529ccb[_0xcfc4('0x55')]=[{'all':!![]}];}return db['ChatOfflineMessage'][_0xcfc4('0x56')](_0x529ccb);})[_0xcfc4('0x23')](function(_0x5a96b7){_0x6fb0['rows']=_0x5a96b7;return _0x6fb0;});}})['then'](respondWithFilteredResult(_0x3f9a41,_0x529ccb))['catch'](handleError(_0x3f9a41,null));};exports[_0xcfc4('0x111')]=function(_0x38da18,_0x4f171c,_0x8ad078){return db[_0xcfc4('0x41')][_0xcfc4('0x5b')]({'where':{'id':_0x38da18['params']['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x4f171c,null))[_0xcfc4('0x23')](function(_0x190f3c){if(_0x190f3c){return _0x190f3c[_0xcfc4('0x111')](_0x38da18[_0xcfc4('0x5d')][_0xcfc4('0x6c')],_['omit'](_0x38da18[_0xcfc4('0x5d')],[_0xcfc4('0x6c'),'id'])||{})['spread'](function(_0xc9f0fa){for(var _0x3abb82=0x0;_0x3abb82<_0x38da18['body'][_0xcfc4('0x6c')][_0xcfc4('0x49')];_0x3abb82+=0x1){socket[_0xcfc4('0x112')]('userChatWebsite:save',{'UserId':_0x38da18['body']['ids'][_0x3abb82],'ChatWebsiteId':_0x38da18[_0xcfc4('0x58')]['id']});}return _0xc9f0fa;});}})[_0xcfc4('0x23')](respondWithResult(_0x4f171c,null))['catch'](handleError(_0x4f171c,null));};exports[_0xcfc4('0x113')]=function(_0x2cf4e5,_0x50bc15,_0x11283c){return db[_0xcfc4('0x41')][_0xcfc4('0x5b')]({'where':{'id':_0x2cf4e5[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x50bc15,null))[_0xcfc4('0x23')](function(_0x323e06){if(_0x323e06){return _0x323e06[_0xcfc4('0x113')](_0x2cf4e5[_0xcfc4('0x45')]['ids'])[_0xcfc4('0x23')](function(){if(_[_0xcfc4('0x114')](_0x2cf4e5[_0xcfc4('0x45')][_0xcfc4('0x6c')])){for(var _0x9ce737=0x0;_0x9ce737<_0x2cf4e5['query'][_0xcfc4('0x6c')][_0xcfc4('0x49')];_0x9ce737+=0x1){socket[_0xcfc4('0x112')]('userChatWebsite:remove',{'UserId':Number(_0x2cf4e5[_0xcfc4('0x45')][_0xcfc4('0x6c')][_0x9ce737]),'ChatWebsiteId':Number(_0x2cf4e5[_0xcfc4('0x58')]['id'])});}}else{socket['emit'](_0xcfc4('0x115'),{'UserId':Number(_0x2cf4e5[_0xcfc4('0x45')]['ids']),'ChatWebsiteId':Number(_0x2cf4e5['params']['id'])});}});}})[_0xcfc4('0x23')](respondWithStatusCode(_0x50bc15,null))['catch'](handleError(_0x50bc15,null));};exports[_0xcfc4('0x116')]=function(_0xb993c5,_0x324b06,_0x5c398c){var _0x41be9b={};var _0x5f551a={};var _0x27c40b;var _0xadc3a;return db[_0xcfc4('0x41')][_0xcfc4('0x66')]({'where':{'id':_0xb993c5[_0xcfc4('0x58')]['id']}})[_0xcfc4('0x23')](handleEntityNotFound(_0x324b06,null))[_0xcfc4('0x23')](function(_0x3ad108){if(_0x3ad108){_0x27c40b=_0x3ad108;_0x5f551a['model']=_['keys'](db[_0xcfc4('0xc3')][_0xcfc4('0x42')]);_0x5f551a['query']=_[_0xcfc4('0x44')](_0xb993c5[_0xcfc4('0x45')]);_0x5f551a['filters']=_[_0xcfc4('0x47')](_0x5f551a[_0xcfc4('0x43')],_0x5f551a[_0xcfc4('0x45')]);_0x41be9b[_0xcfc4('0x48')]=_['intersection'](_0x5f551a[_0xcfc4('0x43')],qs[_0xcfc4('0x67')](_0xb993c5[_0xcfc4('0x45')][_0xcfc4('0x67')]));_0x41be9b['attributes']=_0x41be9b['attributes']['length']?_0x41be9b['attributes']:_0x5f551a[_0xcfc4('0x43')];_0x41be9b[_0xcfc4('0x4a')]=qs[_0xcfc4('0x4b')](_0xb993c5[_0xcfc4('0x45')][_0xcfc4('0x4b')]);_0x41be9b[_0xcfc4('0x4c')]=qs[_0xcfc4('0x46')](_[_0xcfc4('0x4d')](_0xb993c5[_0xcfc4('0x45')],_0x5f551a[_0xcfc4('0x46')]));if(_0xb993c5[_0xcfc4('0x45')][_0xcfc4('0x53')]){_0x41be9b['where']=_[_0xcfc4('0x4e')](_0x41be9b[_0xcfc4('0x4c')],{'$or':_[_0xcfc4('0x4f')](_0x41be9b['attributes'],function(_0x165774){var _0x1055b4={};_0x1055b4[_0x165774]={'$like':'%'+_0xb993c5[_0xcfc4('0x45')]['filter']+'%'};return _0x1055b4;})});}_0x41be9b=_[_0xcfc4('0x4e')]({},_0x41be9b,_0xb993c5[_0xcfc4('0x6a')]);return _0x27c40b[_0xcfc4('0x116')](_0x41be9b);}})[_0xcfc4('0x23')](function(_0x1bb148){if(_0x1bb148){_0xadc3a=_0x1bb148['length'];if(!_0xb993c5[_0xcfc4('0x45')][_0xcfc4('0x68')](_0xcfc4('0x6f'))){_0x41be9b[_0xcfc4('0x33')]=qs[_0xcfc4('0x33')](_0xb993c5[_0xcfc4('0x45')][_0xcfc4('0x33')]);_0x41be9b[_0xcfc4('0x32')]=qs['offset'](_0xb993c5[_0xcfc4('0x45')][_0xcfc4('0x32')]);}return _0x27c40b[_0xcfc4('0x116')](_0x41be9b);}})[_0xcfc4('0x23')](function(_0x364fc4){if(_0x364fc4){return _0x364fc4?{'count':_0xadc3a,'rows':_0x364fc4}:null;}})[_0xcfc4('0x23')](respondWithResult(_0x324b06,null))[_0xcfc4('0x2d')](handleError(_0x324b06,null));};
\ No newline at end of file
index 099bde5..82f0ef3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d2e=['save','update','remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','ChatWebsite','setMaxListeners'];(function(_0x22a589,_0x1ee896){var _0x7d42c=function(_0x53fe67){while(--_0x53fe67){_0x22a589['push'](_0x22a589['shift']());}};_0x7d42c(++_0x1ee896);}(_0x4d2e,0x130));var _0xe4d2=function(_0x4c04b2,_0x2269c4){_0x4c04b2=_0x4c04b2-0x0;var _0x3839a9=_0x4d2e[_0x4c04b2];return _0x3839a9;};'use strict';var EventEmitter=require(_0xe4d2('0x0'));var ChatWebsite=require(_0xe4d2('0x1'))['db'][_0xe4d2('0x2')];var ChatWebsiteEvents=new EventEmitter();ChatWebsiteEvents[_0xe4d2('0x3')](0x0);var events={'afterCreate':_0xe4d2('0x4'),'afterUpdate':_0xe4d2('0x5'),'afterDestroy':_0xe4d2('0x6')};function emitEvent(_0x40ff27){return function(_0xd3845b,_0x1b10db,_0x418224){ChatWebsiteEvents[_0xe4d2('0x7')](_0x40ff27+':'+_0xd3845b['id'],_0xd3845b);ChatWebsiteEvents[_0xe4d2('0x7')](_0x40ff27,_0xd3845b);_0x418224(null);};}for(var e in events){if(events[_0xe4d2('0x8')](e)){var event=events[e];ChatWebsite[_0xe4d2('0x9')](e,emitEvent(event));}}module[_0xe4d2('0xa')]=ChatWebsiteEvents;
\ No newline at end of file
+var _0x4e28=['setMaxListeners','save','update','remove','emit','hasOwnProperty','exports','events'];(function(_0x457887,_0x19b7f1){var _0x2e9b1c=function(_0x41a97b){while(--_0x41a97b){_0x457887['push'](_0x457887['shift']());}};_0x2e9b1c(++_0x19b7f1);}(_0x4e28,0x1df));var _0x84e2=function(_0x11ddf2,_0x4dc742){_0x11ddf2=_0x11ddf2-0x0;var _0x46af6f=_0x4e28[_0x11ddf2];return _0x46af6f;};'use strict';var EventEmitter=require(_0x84e2('0x0'));var ChatWebsite=require('../../mysqldb')['db']['ChatWebsite'];var ChatWebsiteEvents=new EventEmitter();ChatWebsiteEvents[_0x84e2('0x1')](0x0);var events={'afterCreate':_0x84e2('0x2'),'afterUpdate':_0x84e2('0x3'),'afterDestroy':_0x84e2('0x4')};function emitEvent(_0xbc0fb9){return function(_0x103deb,_0x508f13,_0x23cdfa){ChatWebsiteEvents[_0x84e2('0x5')](_0xbc0fb9+':'+_0x103deb['id'],_0x103deb);ChatWebsiteEvents[_0x84e2('0x5')](_0xbc0fb9,_0x103deb);_0x23cdfa(null);};}for(var e in events){if(events[_0x84e2('0x6')](e)){var event=events[e];ChatWebsite['hook'](e,emitEvent(event));}}module[_0x84e2('0x7')]=ChatWebsiteEvents;
\ No newline at end of file
index a014af2..4d74e83 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x39ad=['../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','exports','ChatWebsite','lodash','util'];(function(_0x5494e8,_0x54c5ed){var _0x57b727=function(_0xef22c5){while(--_0xef22c5){_0x5494e8['push'](_0x5494e8['shift']());}};_0x57b727(++_0x54c5ed);}(_0x39ad,0xcf));var _0xd39a=function(_0x2aad20,_0x1b7ffb){_0x2aad20=_0x2aad20-0x0;var _0x17960b=_0x39ad[_0x2aad20];return _0x17960b;};'use strict';var _=require(_0xd39a('0x0'));var util=require(_0xd39a('0x1'));var logger=require(_0xd39a('0x2'))(_0xd39a('0x3'));var moment=require(_0xd39a('0x4'));var BPromise=require(_0xd39a('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xd39a('0x6'));var rimraf=require(_0xd39a('0x7'));var config=require(_0xd39a('0x8'));var attributes=require('./chatWebsite.attributes');module[_0xd39a('0x9')]=function(_0xb6f2,_0x1579b8){return _0xb6f2['define'](_0xd39a('0xa'),attributes,{'tableName':'chat_websites','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x3d0f=['chat_websites','lodash','util','moment','bluebird','request-promise','path','rimraf','../../config/environment','./chatWebsite.attributes','exports'];(function(_0x4c3c84,_0x2cd5b7){var _0x498e75=function(_0x164d46){while(--_0x164d46){_0x4c3c84['push'](_0x4c3c84['shift']());}};_0x498e75(++_0x2cd5b7);}(_0x3d0f,0x1f0));var _0xf3d0=function(_0x325c1d,_0xaac33){_0x325c1d=_0x325c1d-0x0;var _0x41620d=_0x3d0f[_0x325c1d];return _0x41620d;};'use strict';var _=require(_0xf3d0('0x0'));var util=require(_0xf3d0('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0xf3d0('0x2'));var BPromise=require(_0xf3d0('0x3'));var rp=require(_0xf3d0('0x4'));var fs=require('fs');var path=require(_0xf3d0('0x5'));var rimraf=require(_0xf3d0('0x6'));var config=require(_0xf3d0('0x7'));var attributes=require(_0xf3d0('0x8'));module[_0xf3d0('0x9')]=function(_0x4e23aa,_0x554d11){return _0x4e23aa['define']('ChatWebsite',attributes,{'tableName':_0xf3d0('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 0aeaba6..994cdc9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x261c=['redis','defaults','socket.io-emitter','register','request','then','info','ChatWebsite,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','catch','lodash','util','bluebird','randomstring','ioredis','../../config/utils','rpc','jayson/promise','client','http'];(function(_0x54c30a,_0x54e928){var _0x44121d=function(_0x9b05fd){while(--_0x9b05fd){_0x54c30a['push'](_0x54c30a['shift']());}};_0x44121d(++_0x54e928);}(_0x261c,0x1b8));var _0xc261=function(_0x952282,_0x51a614){_0x952282=_0x952282-0x0;var _0x613507=_0x261c[_0x952282];return _0x613507;};'use strict';var _=require(_0xc261('0x0'));var util=require(_0xc261('0x1'));var moment=require('moment');var BPromise=require(_0xc261('0x2'));var rs=require(_0xc261('0x3'));var fs=require('fs');var Redis=require(_0xc261('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0xc261('0x5'));var logger=require('../../config/logger')(_0xc261('0x6'));var config=require('../../config/environment');var jayson=require(_0xc261('0x7'));var client=jayson[_0xc261('0x8')][_0xc261('0x9')]({'port':0x232a});config[_0xc261('0xa')]=_[_0xc261('0xb')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0xc261('0xc'))(new Redis(config['redis']));require('./chatWebsite.socket')[_0xc261('0xd')](socket);function respondWithRpcPromise(_0x1777f7,_0x23dda8,_0x39e6fe){return new BPromise(function(_0x2ff64e,_0x233b9f){return client[_0xc261('0xe')](_0x1777f7,_0x39e6fe)[_0xc261('0xf')](function(_0x4f59e8){logger[_0xc261('0x10')](_0xc261('0x11'),_0x23dda8,'request\x20sent');logger[_0xc261('0x12')]('ChatWebsite,\x20%s,\x20%s,\x20%s',_0x23dda8,_0xc261('0x13'),JSON[_0xc261('0x14')](_0x4f59e8));if(_0x4f59e8[_0xc261('0x15')]){if(_0x4f59e8[_0xc261('0x15')][_0xc261('0x16')]===0x1f4){logger['error']('ChatWebsite,\x20%s,\x20%s',_0x23dda8,_0x4f59e8[_0xc261('0x15')][_0xc261('0x17')]);return _0x233b9f(_0x4f59e8[_0xc261('0x15')]['message']);}logger[_0xc261('0x15')](_0xc261('0x11'),_0x23dda8,_0x4f59e8[_0xc261('0x15')][_0xc261('0x17')]);return _0x2ff64e(_0x4f59e8['error'][_0xc261('0x17')]);}else{logger[_0xc261('0x10')](_0xc261('0x11'),_0x23dda8,'request\x20sent');_0x2ff64e(_0x4f59e8['result'][_0xc261('0x17')]);}})[_0xc261('0x18')](function(_0x4a0f43){logger[_0xc261('0x15')](_0xc261('0x11'),_0x23dda8,_0x4a0f43);_0x233b9f(_0x4a0f43);});});}
\ No newline at end of file
+var _0x2f29=['socket.io-emitter','register','request','info','ChatWebsite,\x20%s,\x20%s','debug','ChatWebsite,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','catch','lodash','util','moment','bluebird','ioredis','../../config/utils','../../config/environment','client','http','redis','defaults','localhost'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x2f29,0x6c));var _0x92f2=function(_0x1deb03,_0xd05ad8){_0x1deb03=_0x1deb03-0x0;var _0x189fe7=_0x2f29[_0x1deb03];return _0x189fe7;};'use strict';var _=require(_0x92f2('0x0'));var util=require(_0x92f2('0x1'));var moment=require(_0x92f2('0x2'));var BPromise=require(_0x92f2('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x92f2('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x92f2('0x5'));var logger=require('../../config/logger')('rpc');var config=require(_0x92f2('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x92f2('0x7')][_0x92f2('0x8')]({'port':0x232a});config[_0x92f2('0x9')]=_[_0x92f2('0xa')](config['redis'],{'host':_0x92f2('0xb'),'port':0x18eb});var socket=require(_0x92f2('0xc'))(new Redis(config[_0x92f2('0x9')]));require('./chatWebsite.socket')[_0x92f2('0xd')](socket);function respondWithRpcPromise(_0x3f0cbb,_0x17e66e,_0x1b6056){return new BPromise(function(_0x15f468,_0x23a8aa){return client[_0x92f2('0xe')](_0x3f0cbb,_0x1b6056)['then'](function(_0x33328b){logger[_0x92f2('0xf')](_0x92f2('0x10'),_0x17e66e,'request\x20sent');logger[_0x92f2('0x11')](_0x92f2('0x12'),_0x17e66e,_0x92f2('0x13'),JSON[_0x92f2('0x14')](_0x33328b));if(_0x33328b[_0x92f2('0x15')]){if(_0x33328b[_0x92f2('0x15')]['code']===0x1f4){logger[_0x92f2('0x15')]('ChatWebsite,\x20%s,\x20%s',_0x17e66e,_0x33328b[_0x92f2('0x15')][_0x92f2('0x16')]);return _0x23a8aa(_0x33328b[_0x92f2('0x15')][_0x92f2('0x16')]);}logger[_0x92f2('0x15')](_0x92f2('0x10'),_0x17e66e,_0x33328b[_0x92f2('0x15')]['message']);return _0x15f468(_0x33328b[_0x92f2('0x15')][_0x92f2('0x16')]);}else{logger['info'](_0x92f2('0x10'),_0x17e66e,'request\x20sent');_0x15f468(_0x33328b['result'][_0x92f2('0x16')]);}})[_0x92f2('0x17')](function(_0x1ef21d){logger['error'](_0x92f2('0x10'),_0x17e66e,_0x1ef21d);_0x23a8aa(_0x1ef21d);});});}
\ No newline at end of file
index 4ae6072..2933c4d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4c48=['removeListener','register','length','./chatWebsite.events','save','emit'];(function(_0x1547e9,_0xf449bf){var _0x3b4efe=function(_0x54664e){while(--_0x54664e){_0x1547e9['push'](_0x1547e9['shift']());}};_0x3b4efe(++_0xf449bf);}(_0x4c48,0x129));var _0x84c4=function(_0x764874,_0x3ed544){_0x764874=_0x764874-0x0;var _0x29f9d5=_0x4c48[_0x764874];return _0x29f9d5;};'use strict';var ChatWebsiteEvents=require(_0x84c4('0x0'));var events=[_0x84c4('0x1'),'remove','update'];function createListener(_0x3215fe,_0x2d8232){return function(_0x134582){_0x2d8232[_0x84c4('0x2')](_0x3215fe,_0x134582);};}function removeListener(_0x5f2322,_0x29280c){return function(){ChatWebsiteEvents[_0x84c4('0x3')](_0x5f2322,_0x29280c);};}exports[_0x84c4('0x4')]=function(_0x91c377){for(var _0x3f1ac2=0x0,_0x2bcadf=events[_0x84c4('0x5')];_0x3f1ac2<_0x2bcadf;_0x3f1ac2++){var _0x5afff4=events[_0x3f1ac2];var _0x4927e0=createListener('chatWebsite:'+_0x5afff4,_0x91c377);ChatWebsiteEvents['on'](_0x5afff4,_0x4927e0);}};
\ No newline at end of file
+var _0x095b=['update','removeListener','register','length','chatWebsite:','./chatWebsite.events','remove'];(function(_0x55e08b,_0x421620){var _0xd1a7ff=function(_0x58c7ff){while(--_0x58c7ff){_0x55e08b['push'](_0x55e08b['shift']());}};_0xd1a7ff(++_0x421620);}(_0x095b,0x6e));var _0xb095=function(_0x4cda99,_0xfff96){_0x4cda99=_0x4cda99-0x0;var _0x3b0c1=_0x095b[_0x4cda99];return _0x3b0c1;};'use strict';var ChatWebsiteEvents=require(_0xb095('0x0'));var events=['save',_0xb095('0x1'),_0xb095('0x2')];function createListener(_0x3e60de,_0x33ef98){return function(_0x33888f){_0x33ef98['emit'](_0x3e60de,_0x33888f);};}function removeListener(_0x1a42a5,_0x25f040){return function(){ChatWebsiteEvents[_0xb095('0x3')](_0x1a42a5,_0x25f040);};}exports[_0xb095('0x4')]=function(_0x10a03d){for(var _0x3e4cc9=0x0,_0x24deed=events[_0xb095('0x5')];_0x3e4cc9<_0x24deed;_0x3e4cc9++){var _0x39fc96=events[_0x3e4cc9];var _0x47a5eb=createListener(_0xb095('0x6')+_0x39fc96,_0x10a03d);ChatWebsiteEvents['on'](_0x39fc96,_0x47a5eb);}};
\ No newline at end of file
index cb5d4fb..5c18f9b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbb53=['single','addCustomerAvatar','addSystemAvatar','notify','offline','addInteraction','/:id/applications','addApplications','addProactiveActions','addAgents','/:id','update','delete','removeDispositions','removeAnswers','removeAgents','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatWebsite.controller','index','get','/describe','isAuthenticated','describe','show','/:id/dispositions','getDispositions','getAnswers','/:id/logo','/:id/customer_avatar','getCustomerAvatar','/:id/system_avatar','getSystemAvatar','/:id/interactions','getSnippet','getApplications','/:id/proactive_actions','getProactiveActions','/:id/fields','/:id/offline_messages','getOfflineMessages','/:id/users','getAgents','post','create','addDisposition','/:id/canned_answers','addAnswer','root','server/files/images/logos/','format','%s-%s','now','file','addLogo','diskStorage','join','server/files/images/avatars/','originalname','/:id/avatar'];(function(_0x54c73a,_0x1a56e4){var _0x8de51d=function(_0x18ca98){while(--_0x18ca98){_0x54c73a['push'](_0x54c73a['shift']());}};_0x8de51d(++_0x1a56e4);}(_0xbb53,0x121));var _0x3bb5=function(_0x1f76a2,_0x59e592){_0x1f76a2=_0x1f76a2-0x0;var _0x4da05d=_0xbb53[_0x1f76a2];return _0x4da05d;};'use strict';var multer=require(_0x3bb5('0x0'));var util=require(_0x3bb5('0x1'));var path=require(_0x3bb5('0x2'));var timeout=require(_0x3bb5('0x3'));var express=require(_0x3bb5('0x4'));var router=express[_0x3bb5('0x5')]();var auth=require(_0x3bb5('0x6'));var interaction=require(_0x3bb5('0x7'));var config=require(_0x3bb5('0x8'));var controller=require(_0x3bb5('0x9'));router['get']('/',auth['isAuthenticated'](),controller[_0x3bb5('0xa')]);router[_0x3bb5('0xb')](_0x3bb5('0xc'),auth[_0x3bb5('0xd')](),controller[_0x3bb5('0xe')]);router['get']('/:id',auth['isAuthenticated'](),controller[_0x3bb5('0xf')]);router[_0x3bb5('0xb')](_0x3bb5('0x10'),auth['isAuthenticated'](),controller[_0x3bb5('0x11')]);router['get']('/:id/canned_answers',auth[_0x3bb5('0xd')](),controller[_0x3bb5('0x12')]);router['get'](_0x3bb5('0x13'),controller['getLogo']);router[_0x3bb5('0xb')]('/:id/avatar',controller['getAvatar']);router[_0x3bb5('0xb')](_0x3bb5('0x14'),controller[_0x3bb5('0x15')]);router['get'](_0x3bb5('0x16'),controller[_0x3bb5('0x17')]);router['get'](_0x3bb5('0x18'),auth[_0x3bb5('0xd')](),controller['getInteractions']);router['get']('/:id/snippet',controller[_0x3bb5('0x19')]);router[_0x3bb5('0xb')]('/:id/applications',auth[_0x3bb5('0xd')](),controller[_0x3bb5('0x1a')]);router[_0x3bb5('0xb')](_0x3bb5('0x1b'),auth['isAuthenticated'](),controller[_0x3bb5('0x1c')]);router[_0x3bb5('0xb')](_0x3bb5('0x1d'),controller['getFields']);router['get'](_0x3bb5('0x1e'),auth[_0x3bb5('0xd')](),controller[_0x3bb5('0x1f')]);router['get'](_0x3bb5('0x20'),auth[_0x3bb5('0xd')](),controller[_0x3bb5('0x21')]);router[_0x3bb5('0x22')]('/',auth[_0x3bb5('0xd')](),controller[_0x3bb5('0x23')]);router['post'](_0x3bb5('0x10'),auth[_0x3bb5('0xd')](),controller[_0x3bb5('0x24')]);router[_0x3bb5('0x22')](_0x3bb5('0x25'),auth[_0x3bb5('0xd')](),controller[_0x3bb5('0x26')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x1d2a24,_0x3ef331,_0x559720){_0x559720(null,path['join'](config[_0x3bb5('0x27')],_0x3bb5('0x28')));},'filename':function(_0x58acdb,_0x483689,_0x477d1f){_0x477d1f(null,util[_0x3bb5('0x29')](_0x3bb5('0x2a'),Date[_0x3bb5('0x2b')](),_0x483689['originalname']));}})});router['post'](_0x3bb5('0x13'),upload['single'](_0x3bb5('0x2c')),controller[_0x3bb5('0x2d')]);var upload=multer({'storage':multer[_0x3bb5('0x2e')]({'destination':function(_0x534b15,_0x5f40ac,_0x19e61d){_0x19e61d(null,path[_0x3bb5('0x2f')](config[_0x3bb5('0x27')],_0x3bb5('0x30')));},'filename':function(_0x311680,_0x33571b,_0x3ed2cc){_0x3ed2cc(null,util['format'](_0x3bb5('0x2a'),Date[_0x3bb5('0x2b')](),_0x33571b[_0x3bb5('0x31')]));}})});router[_0x3bb5('0x22')](_0x3bb5('0x32'),upload[_0x3bb5('0x33')](_0x3bb5('0x2c')),controller['addAvatar']);var upload=multer({'storage':multer[_0x3bb5('0x2e')]({'destination':function(_0x25ba4c,_0x53654b,_0x396345){_0x396345(null,path[_0x3bb5('0x2f')](config[_0x3bb5('0x27')],_0x3bb5('0x30')));},'filename':function(_0x18ce1f,_0x50fb44,_0x31a1f9){_0x31a1f9(null,util[_0x3bb5('0x29')](_0x3bb5('0x2a'),Date[_0x3bb5('0x2b')](),_0x50fb44['originalname']));}})});router['post'](_0x3bb5('0x14'),upload[_0x3bb5('0x33')](_0x3bb5('0x2c')),controller[_0x3bb5('0x34')]);var upload=multer({'storage':multer[_0x3bb5('0x2e')]({'destination':function(_0x43a455,_0x2a2419,_0x2a0a19){_0x2a0a19(null,path[_0x3bb5('0x2f')](config['root'],_0x3bb5('0x30')));},'filename':function(_0x6b70e4,_0x5b3033,_0x5f3bf0){_0x5f3bf0(null,util[_0x3bb5('0x29')](_0x3bb5('0x2a'),Date[_0x3bb5('0x2b')](),_0x5b3033[_0x3bb5('0x31')]));}})});router['post']('/:id/system_avatar',upload[_0x3bb5('0x33')]('file'),controller[_0x3bb5('0x35')]);router['post']('/:id/notify',controller[_0x3bb5('0x36')]);router['post']('/:id/offline',controller[_0x3bb5('0x37')]);router[_0x3bb5('0x22')](_0x3bb5('0x18'),auth['isAuthenticated'](),controller[_0x3bb5('0x38')]);router['post'](_0x3bb5('0x39'),auth['isAuthenticated'](),controller[_0x3bb5('0x3a')]);router[_0x3bb5('0x22')](_0x3bb5('0x1b'),auth[_0x3bb5('0xd')](),controller[_0x3bb5('0x3b')]);router[_0x3bb5('0x22')]('/:id/users',auth[_0x3bb5('0xd')](),controller[_0x3bb5('0x3c')]);router['put'](_0x3bb5('0x3d'),auth[_0x3bb5('0xd')](),controller[_0x3bb5('0x3e')]);router['delete'](_0x3bb5('0x3d'),auth[_0x3bb5('0xd')](),controller['destroy']);router[_0x3bb5('0x3f')](_0x3bb5('0x10'),auth[_0x3bb5('0xd')](),controller[_0x3bb5('0x40')]);router[_0x3bb5('0x3f')](_0x3bb5('0x25'),auth[_0x3bb5('0xd')](),controller[_0x3bb5('0x41')]);router[_0x3bb5('0x3f')](_0x3bb5('0x20'),auth[_0x3bb5('0xd')](),controller[_0x3bb5('0x42')]);module[_0x3bb5('0x43')]=router;
\ No newline at end of file
+var _0x24cf=['delete','destroy','removeDispositions','removeAnswers','/:id/users','removeAgents','exports','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./chatWebsite.controller','get','isAuthenticated','/:id','show','/:id/dispositions','getDispositions','/:id/canned_answers','/:id/logo','getLogo','/:id/avatar','getAvatar','getCustomerAvatar','/:id/system_avatar','getSystemAvatar','/:id/interactions','getInteractions','/:id/snippet','/:id/applications','/:id/proactive_actions','getProactiveActions','/:id/fields','getFields','/:id/offline_messages','getOfflineMessages','getAgents','create','post','addAnswer','diskStorage','join','root','server/files/images/logos/','now','file','addLogo','server/files/images/avatars/','originalname','addAvatar','format','%s-%s','/:id/customer_avatar','single','addCustomerAvatar','/:id/notify','notify','/:id/offline','addInteraction','addApplications','addProactiveActions','addAgents','put','update'];(function(_0x5ddb1c,_0x5ea4df){var _0x354adc=function(_0x2dfb1f){while(--_0x2dfb1f){_0x5ddb1c['push'](_0x5ddb1c['shift']());}};_0x354adc(++_0x5ea4df);}(_0x24cf,0x1d5));var _0xf24c=function(_0x3a591a,_0x42fd80){_0x3a591a=_0x3a591a-0x0;var _0x3ba077=_0x24cf[_0x3a591a];return _0x3ba077;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xf24c('0x0'));var timeout=require(_0xf24c('0x1'));var express=require(_0xf24c('0x2'));var router=express[_0xf24c('0x3')]();var auth=require(_0xf24c('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xf24c('0x5'));var controller=require(_0xf24c('0x6'));router[_0xf24c('0x7')]('/',auth[_0xf24c('0x8')](),controller['index']);router['get']('/describe',auth[_0xf24c('0x8')](),controller['describe']);router[_0xf24c('0x7')](_0xf24c('0x9'),auth[_0xf24c('0x8')](),controller[_0xf24c('0xa')]);router['get'](_0xf24c('0xb'),auth[_0xf24c('0x8')](),controller[_0xf24c('0xc')]);router[_0xf24c('0x7')](_0xf24c('0xd'),auth[_0xf24c('0x8')](),controller['getAnswers']);router[_0xf24c('0x7')](_0xf24c('0xe'),controller[_0xf24c('0xf')]);router['get'](_0xf24c('0x10'),controller[_0xf24c('0x11')]);router['get']('/:id/customer_avatar',controller[_0xf24c('0x12')]);router['get'](_0xf24c('0x13'),controller[_0xf24c('0x14')]);router['get'](_0xf24c('0x15'),auth[_0xf24c('0x8')](),controller[_0xf24c('0x16')]);router[_0xf24c('0x7')](_0xf24c('0x17'),controller['getSnippet']);router['get'](_0xf24c('0x18'),auth[_0xf24c('0x8')](),controller['getApplications']);router[_0xf24c('0x7')](_0xf24c('0x19'),auth[_0xf24c('0x8')](),controller[_0xf24c('0x1a')]);router[_0xf24c('0x7')](_0xf24c('0x1b'),controller[_0xf24c('0x1c')]);router[_0xf24c('0x7')](_0xf24c('0x1d'),auth[_0xf24c('0x8')](),controller[_0xf24c('0x1e')]);router[_0xf24c('0x7')]('/:id/users',auth[_0xf24c('0x8')](),controller[_0xf24c('0x1f')]);router['post']('/',auth[_0xf24c('0x8')](),controller[_0xf24c('0x20')]);router[_0xf24c('0x21')]('/:id/dispositions',auth[_0xf24c('0x8')](),controller['addDisposition']);router[_0xf24c('0x21')](_0xf24c('0xd'),auth['isAuthenticated'](),controller[_0xf24c('0x22')]);var upload=multer({'storage':multer[_0xf24c('0x23')]({'destination':function(_0x106771,_0x35ba83,_0x273a80){_0x273a80(null,path[_0xf24c('0x24')](config[_0xf24c('0x25')],_0xf24c('0x26')));},'filename':function(_0xa8d02f,_0xc9fd87,_0x14003a){_0x14003a(null,util['format']('%s-%s',Date[_0xf24c('0x27')](),_0xc9fd87['originalname']));}})});router['post'](_0xf24c('0xe'),upload['single'](_0xf24c('0x28')),controller[_0xf24c('0x29')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x563ebe,_0x54a76f,_0x12129f){_0x12129f(null,path['join'](config[_0xf24c('0x25')],_0xf24c('0x2a')));},'filename':function(_0x2ee712,_0x5c8588,_0x2033a8){_0x2033a8(null,util['format']('%s-%s',Date[_0xf24c('0x27')](),_0x5c8588[_0xf24c('0x2b')]));}})});router[_0xf24c('0x21')](_0xf24c('0x10'),upload['single'](_0xf24c('0x28')),controller[_0xf24c('0x2c')]);var upload=multer({'storage':multer[_0xf24c('0x23')]({'destination':function(_0x311801,_0x3cfe5d,_0x16c827){_0x16c827(null,path['join'](config[_0xf24c('0x25')],_0xf24c('0x2a')));},'filename':function(_0x2441f7,_0x146a1f,_0x2f399a){_0x2f399a(null,util[_0xf24c('0x2d')](_0xf24c('0x2e'),Date['now'](),_0x146a1f[_0xf24c('0x2b')]));}})});router['post'](_0xf24c('0x2f'),upload[_0xf24c('0x30')]('file'),controller[_0xf24c('0x31')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x1bf4b2,_0x269d1b,_0x17f2b7){_0x17f2b7(null,path['join'](config[_0xf24c('0x25')],'server/files/images/avatars/'));},'filename':function(_0x24d8f1,_0x527472,_0x5648e8){_0x5648e8(null,util['format'](_0xf24c('0x2e'),Date[_0xf24c('0x27')](),_0x527472[_0xf24c('0x2b')]));}})});router[_0xf24c('0x21')](_0xf24c('0x13'),upload[_0xf24c('0x30')](_0xf24c('0x28')),controller['addSystemAvatar']);router[_0xf24c('0x21')](_0xf24c('0x32'),controller[_0xf24c('0x33')]);router[_0xf24c('0x21')](_0xf24c('0x34'),controller['offline']);router[_0xf24c('0x21')]('/:id/interactions',auth[_0xf24c('0x8')](),controller[_0xf24c('0x35')]);router[_0xf24c('0x21')](_0xf24c('0x18'),auth[_0xf24c('0x8')](),controller[_0xf24c('0x36')]);router[_0xf24c('0x21')](_0xf24c('0x19'),auth[_0xf24c('0x8')](),controller[_0xf24c('0x37')]);router[_0xf24c('0x21')]('/:id/users',auth['isAuthenticated'](),controller[_0xf24c('0x38')]);router[_0xf24c('0x39')](_0xf24c('0x9'),auth[_0xf24c('0x8')](),controller[_0xf24c('0x3a')]);router[_0xf24c('0x3b')](_0xf24c('0x9'),auth[_0xf24c('0x8')](),controller[_0xf24c('0x3c')]);router[_0xf24c('0x3b')](_0xf24c('0xb'),auth['isAuthenticated'](),controller[_0xf24c('0x3d')]);router['delete'](_0xf24c('0xd'),auth[_0xf24c('0x8')](),controller[_0xf24c('0x3e')]);router[_0xf24c('0x3b')](_0xf24c('0x3f'),auth[_0xf24c('0x8')](),controller[_0xf24c('0x40')]);module[_0xf24c('0x41')]=router;
\ No newline at end of file
index 75be5cb..009b9e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe483=['sequelize','exports','STRING','name'];(function(_0x58cd4d,_0x21f7a2){var _0x102010=function(_0x16c6f4){while(--_0x16c6f4){_0x58cd4d['push'](_0x58cd4d['shift']());}};_0x102010(++_0x21f7a2);}(_0xe483,0x7c));var _0x3e48=function(_0x354ac0,_0x44731a){_0x354ac0=_0x354ac0-0x0;var _0x1a737d=_0xe483[_0x354ac0];return _0x1a737d;};'use strict';var Sequelize=require(_0x3e48('0x0'));module[_0x3e48('0x1')]={'name':{'type':Sequelize[_0x3e48('0x2')],'unique':_0x3e48('0x3'),'allowNull':![],'validate':{'notEmpty':!![]}},'vat':{'type':Sequelize[_0x3e48('0x2')]},'companyId':{'type':Sequelize['STRING']},'website':{'type':Sequelize[_0x3e48('0x2')]},'phone':{'type':Sequelize['STRING']},'fax':{'type':Sequelize[_0x3e48('0x2')]},'type':{'type':Sequelize[_0x3e48('0x2')]},'street':{'type':Sequelize['STRING']},'postalCode':{'type':Sequelize[_0x3e48('0x2')]},'city':{'type':Sequelize[_0x3e48('0x2')]},'country':{'type':Sequelize[_0x3e48('0x2')]},'email':{'type':Sequelize[_0x3e48('0x2')],'validate':{'isEmail':!![]}},'emailDomain':{'type':Sequelize[_0x3e48('0x2')]},'sStreet':{'type':Sequelize[_0x3e48('0x2')]},'sPostalCode':{'type':Sequelize['STRING']},'sCity':{'type':Sequelize['STRING']},'sCountry':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x09f8=['name','sequelize','STRING'];(function(_0x4ff25e,_0xcadbf3){var _0xcf10d5=function(_0x12d29f){while(--_0x12d29f){_0x4ff25e['push'](_0x4ff25e['shift']());}};_0xcf10d5(++_0xcadbf3);}(_0x09f8,0xcd));var _0x809f=function(_0x2a2c95,_0x4b8878){_0x2a2c95=_0x2a2c95-0x0;var _0x198da1=_0x09f8[_0x2a2c95];return _0x198da1;};'use strict';var Sequelize=require(_0x809f('0x0'));module['exports']={'name':{'type':Sequelize[_0x809f('0x1')],'unique':_0x809f('0x2'),'allowNull':![],'validate':{'notEmpty':!![]}},'vat':{'type':Sequelize[_0x809f('0x1')]},'companyId':{'type':Sequelize[_0x809f('0x1')]},'website':{'type':Sequelize[_0x809f('0x1')]},'phone':{'type':Sequelize[_0x809f('0x1')]},'fax':{'type':Sequelize[_0x809f('0x1')]},'type':{'type':Sequelize[_0x809f('0x1')]},'street':{'type':Sequelize[_0x809f('0x1')]},'postalCode':{'type':Sequelize[_0x809f('0x1')]},'city':{'type':Sequelize[_0x809f('0x1')]},'country':{'type':Sequelize[_0x809f('0x1')]},'email':{'type':Sequelize[_0x809f('0x1')],'validate':{'isEmail':!![]}},'emailDomain':{'type':Sequelize['STRING']},'sStreet':{'type':Sequelize['STRING']},'sPostalCode':{'type':Sequelize[_0x809f('0x1')]},'sCity':{'type':Sequelize['STRING']},'sCountry':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x809f('0x1')]}};
\ No newline at end of file
index 3e59179..c65580e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x66cd=['offset','status','set','Content-Range','apply','reject','update','then','destroy','get','Companies','UserProfileResource','end','stack','name','send','index','CmCompany','rawAttributes','keys','query','filters','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','count','include','findAll','catch','show','includeAll','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','addContacts','omit','getContacts','findOne','CmContact','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/environment','sendStatus','json'];(function(_0x6118c8,_0x18a56f){var _0x2e16c9=function(_0x11fb3e){while(--_0x11fb3e){_0x6118c8['push'](_0x6118c8['shift']());}};_0x2e16c9(++_0x18a56f);}(_0x66cd,0xef));var _0xd66c=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0x66cd[_0x4cf98e];return _0x1623ac;};'use strict';var pdf=require(_0xd66c('0x0'));var emlformat=require(_0xd66c('0x1'));var rimraf=require(_0xd66c('0x2'));var zipdir=require(_0xd66c('0x3'));var jsonpatch=require(_0xd66c('0x4'));var rp=require(_0xd66c('0x5'));var moment=require(_0xd66c('0x6'));var BPromise=require('bluebird');var Mustache=require(_0xd66c('0x7'));var util=require('util');var path=require('path');var sox=require(_0xd66c('0x8'));var csv=require(_0xd66c('0x9'));var ejs=require(_0xd66c('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0xd66c('0xb'));var crypto=require(_0xd66c('0xc'));var jsforce=require(_0xd66c('0xd'));var deskjs=require(_0xd66c('0xe'));var toCsv=require(_0xd66c('0x9'));var querystring=require(_0xd66c('0xf'));var Papa=require(_0xd66c('0x10'));var Redis=require(_0xd66c('0x11'));var authService=require(_0xd66c('0x12'));var qs=require(_0xd66c('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xd66c('0x14'))(_0xd66c('0x15'));var utils=require('../../config/utils');var config=require(_0xd66c('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x28005b,_0x3652dc){_0x3652dc=_0x3652dc||0xcc;return function(_0x2b009b){if(_0x2b009b){return _0x28005b[_0xd66c('0x17')](_0x3652dc);}return _0x28005b['status'](_0x3652dc)['end']();};}function respondWithResult(_0x4aa1d3,_0x799071){_0x799071=_0x799071||0xc8;return function(_0x54d8be){if(_0x54d8be){return _0x4aa1d3['status'](_0x799071)[_0xd66c('0x18')](_0x54d8be);}};}function respondWithFilteredResult(_0x5f4c69,_0x5c66fa){return function(_0x20b1f0){if(_0x20b1f0){var _0x520382=_0x20b1f0['count'],_0x270a58=_0x5c66fa[_0xd66c('0x19')],_0x51df4a=_0x5c66fa[_0xd66c('0x19')]+_0x5c66fa['limit'],_0x2b9f77;if(_0x51df4a>=_0x520382){_0x51df4a=_0x520382;_0x2b9f77=0xc8;}else{_0x2b9f77=0xce;}_0x5f4c69[_0xd66c('0x1a')](_0x2b9f77);return _0x5f4c69[_0xd66c('0x1b')](_0xd66c('0x1c'),_0x270a58+'-'+_0x51df4a+'/'+_0x520382)[_0xd66c('0x18')](_0x20b1f0);}return null;};}function patchUpdates(_0x2e9eb5){return function(_0x10b0de){try{jsonpatch[_0xd66c('0x1d')](_0x10b0de,_0x2e9eb5,!![]);}catch(_0x25233f){return BPromise[_0xd66c('0x1e')](_0x25233f);}return _0x10b0de['save']();};}function saveUpdates(_0x2d3af0,_0x865a43){return function(_0x5b7f4){if(_0x5b7f4){return _0x5b7f4[_0xd66c('0x1f')](_0x2d3af0)[_0xd66c('0x20')](function(_0xb34e35){return _0xb34e35;});}return null;};}function removeEntity(_0x15cb05,_0xde95c6){return function(_0x4f1560){if(_0x4f1560){return _0x4f1560[_0xd66c('0x21')]()[_0xd66c('0x20')](function(){var _0x252335=_0x4f1560[_0xd66c('0x22')]({'plain':!![]});var _0x352df1=_0xd66c('0x23');return db[_0xd66c('0x24')][_0xd66c('0x21')]({'where':{'type':_0x352df1,'resourceId':_0x252335['id']}})['then'](function(){return _0x4f1560;});})[_0xd66c('0x20')](function(){_0x15cb05[_0xd66c('0x1a')](0xcc)[_0xd66c('0x25')]();});}};}function handleEntityNotFound(_0x24ca60,_0x389871){return function(_0x4e4b0a){if(!_0x4e4b0a){_0x24ca60[_0xd66c('0x17')](0x194);}return _0x4e4b0a;};}function handleError(_0x4aa687,_0x45341b){_0x45341b=_0x45341b||0x1f4;return function(_0x196050){logger['error'](_0x196050[_0xd66c('0x26')]);if(_0x196050['name']){delete _0x196050[_0xd66c('0x27')];}_0x4aa687[_0xd66c('0x1a')](_0x45341b)[_0xd66c('0x28')](_0x196050);};}exports[_0xd66c('0x29')]=function(_0x6fb715,_0x152bbb){var _0x84fa01={},_0xba85e7={},_0x2fb4f4={'count':0x0,'rows':[]};var _0x36f5f6=db[_0xd66c('0x2a')][_0xd66c('0x2b')];_0xba85e7['model']=_[_0xd66c('0x2c')](_0x36f5f6);_0xba85e7[_0xd66c('0x2d')]=_[_0xd66c('0x2c')](_0x6fb715[_0xd66c('0x2d')]);_0xba85e7[_0xd66c('0x2e')]=_[_0xd66c('0x2f')](_0xba85e7[_0xd66c('0x30')],_0xba85e7[_0xd66c('0x2d')]);_0x84fa01['attributes']=_[_0xd66c('0x2f')](_0xba85e7[_0xd66c('0x30')],qs[_0xd66c('0x31')](_0x6fb715[_0xd66c('0x2d')][_0xd66c('0x31')]));_0x84fa01[_0xd66c('0x32')]=_0x84fa01[_0xd66c('0x32')][_0xd66c('0x33')]?_0x84fa01[_0xd66c('0x32')]:_0xba85e7[_0xd66c('0x30')];if(!_0x6fb715['query'][_0xd66c('0x34')](_0xd66c('0x35'))){_0x84fa01[_0xd66c('0x36')]=qs[_0xd66c('0x36')](_0x6fb715['query'][_0xd66c('0x36')]);_0x84fa01[_0xd66c('0x19')]=qs['offset'](_0x6fb715[_0xd66c('0x2d')][_0xd66c('0x19')]);}_0x84fa01[_0xd66c('0x37')]=qs['sort'](_0x6fb715['query'][_0xd66c('0x38')]);_0x84fa01[_0xd66c('0x39')]=qs[_0xd66c('0x2e')](_[_0xd66c('0x3a')](_0x6fb715[_0xd66c('0x2d')],_0xba85e7[_0xd66c('0x2e')]));if(_0x6fb715['query'][_0xd66c('0x3b')]){_0x84fa01['where']=_[_0xd66c('0x3c')](_0x84fa01[_0xd66c('0x39')],{'$or':_[_0xd66c('0x3d')](_0x36f5f6,function(_0x22a86b){if(_0x22a86b[_0xd66c('0x3e')][_0xd66c('0x3f')]!==_0xd66c('0x40')){var _0x79b49f={};_0x79b49f[_0x22a86b[_0xd66c('0x41')]]={'$like':'%'+_0x6fb715['query'][_0xd66c('0x3b')]+'%'};return _0x79b49f;}})});}_0x84fa01=_[_0xd66c('0x3c')]({},_0x84fa01,_0x6fb715[_0xd66c('0x42')]);var _0x204265={'where':_0x84fa01['where']};return db[_0xd66c('0x2a')][_0xd66c('0x43')](_0x204265)[_0xd66c('0x20')](function(_0x478185){_0x2fb4f4[_0xd66c('0x43')]=_0x478185;if(_0x6fb715[_0xd66c('0x2d')]['includeAll']){_0x84fa01[_0xd66c('0x44')]=[{'all':!![]}];}return db['CmCompany'][_0xd66c('0x45')](_0x84fa01);})['then'](function(_0x1f93c5){_0x2fb4f4['rows']=_0x1f93c5;return _0x2fb4f4;})[_0xd66c('0x20')](respondWithFilteredResult(_0x152bbb,_0x84fa01))[_0xd66c('0x46')](handleError(_0x152bbb,null));};exports[_0xd66c('0x47')]=function(_0x195ceb,_0x48a902){var _0x24a6d2={'raw':![],'where':{'id':_0x195ceb['params']['id']}},_0x2aa649={};_0x2aa649[_0xd66c('0x30')]=_[_0xd66c('0x2c')](db[_0xd66c('0x2a')]['rawAttributes']);_0x2aa649[_0xd66c('0x2d')]=_[_0xd66c('0x2c')](_0x195ceb[_0xd66c('0x2d')]);_0x2aa649[_0xd66c('0x2e')]=_[_0xd66c('0x2f')](_0x2aa649[_0xd66c('0x30')],_0x2aa649['query']);_0x24a6d2['attributes']=_[_0xd66c('0x2f')](_0x2aa649[_0xd66c('0x30')],qs[_0xd66c('0x31')](_0x195ceb['query'][_0xd66c('0x31')]));_0x24a6d2['attributes']=_0x24a6d2[_0xd66c('0x32')][_0xd66c('0x33')]?_0x24a6d2[_0xd66c('0x32')]:_0x2aa649['model'];if(_0x195ceb[_0xd66c('0x2d')][_0xd66c('0x48')]){_0x24a6d2[_0xd66c('0x44')]=[{'all':!![]}];}_0x24a6d2=_['merge']({},_0x24a6d2,_0x195ceb['options']);return db['CmCompany'][_0xd66c('0x49')](_0x24a6d2)['then'](handleEntityNotFound(_0x48a902,null))[_0xd66c('0x20')](respondWithResult(_0x48a902,null))[_0xd66c('0x46')](handleError(_0x48a902,null));};exports[_0xd66c('0x4a')]=function(_0x55dbc3,_0x38ac86){return db[_0xd66c('0x2a')][_0xd66c('0x4a')](_0x55dbc3[_0xd66c('0x4b')],{})[_0xd66c('0x20')](function(_0x30768a){var _0x5cb5c2=_0x55dbc3[_0xd66c('0x4c')][_0xd66c('0x22')]({'plain':!![]});if(!_0x5cb5c2)throw new Error(_0xd66c('0x4d'));if(_0x5cb5c2[_0xd66c('0x4e')]===_0xd66c('0x4c')){var _0xafea2c=_0x30768a[_0xd66c('0x22')]({'plain':!![]});var _0x11836b=_0xd66c('0x23');return db[_0xd66c('0x4f')][_0xd66c('0x49')]({'where':{'name':_0x11836b,'userProfileId':_0x5cb5c2['userProfileId']},'raw':!![]})[_0xd66c('0x20')](function(_0x2580b8){if(_0x2580b8&&_0x2580b8['autoAssociation']===0x0){return db['UserProfileResource'][_0xd66c('0x4a')]({'name':_0xafea2c['name'],'resourceId':_0xafea2c['id'],'type':_0x2580b8[_0xd66c('0x27')],'sectionId':_0x2580b8['id']},{})[_0xd66c('0x20')](function(){return _0x30768a;});}else{return _0x30768a;}})[_0xd66c('0x46')](function(_0x309303){logger[_0xd66c('0x50')](_0xd66c('0x51'),_0x309303);throw _0x309303;});}return _0x30768a;})[_0xd66c('0x20')](respondWithResult(_0x38ac86,0xc9))[_0xd66c('0x46')](handleError(_0x38ac86,null));};exports[_0xd66c('0x1f')]=function(_0x22bb3d,_0x5429a9){if(_0x22bb3d[_0xd66c('0x4b')]['id']){delete _0x22bb3d[_0xd66c('0x4b')]['id'];}return db[_0xd66c('0x2a')][_0xd66c('0x49')]({'where':{'id':_0x22bb3d[_0xd66c('0x52')]['id']}})[_0xd66c('0x20')](handleEntityNotFound(_0x5429a9,null))[_0xd66c('0x20')](saveUpdates(_0x22bb3d[_0xd66c('0x4b')],null))[_0xd66c('0x20')](respondWithResult(_0x5429a9,null))[_0xd66c('0x46')](handleError(_0x5429a9,null));};exports[_0xd66c('0x21')]=function(_0x58084d,_0x4d964b){return db[_0xd66c('0x2a')][_0xd66c('0x49')]({'where':{'id':_0x58084d[_0xd66c('0x52')]['id']}})[_0xd66c('0x20')](handleEntityNotFound(_0x4d964b,null))[_0xd66c('0x20')](removeEntity(_0x4d964b,null))[_0xd66c('0x46')](handleError(_0x4d964b,null));};exports[_0xd66c('0x53')]=function(_0x1d67ee,_0x3d853d,_0x3ff1f7){return db['CmContact'][_0xd66c('0x49')]({'where':{'id':_0x1d67ee[_0xd66c('0x52')]['id']}})[_0xd66c('0x20')](handleEntityNotFound(_0x3d853d,null))[_0xd66c('0x20')](function(_0x4a7367){if(_0x4a7367){return _0x4a7367[_0xd66c('0x53')](_0x1d67ee['body']['ids'],_[_0xd66c('0x54')](_0x1d67ee['body'],['ids','id'])||{});}})['then'](respondWithResult(_0x3d853d,null))[_0xd66c('0x46')](handleError(_0x3d853d,null));};exports[_0xd66c('0x55')]=function(_0x523cd7,_0x5642c5,_0x2df46d){var _0x3dd65c={};var _0x1379a0={};var _0x216344;var _0x56c02f;return db['CmCompany'][_0xd66c('0x56')]({'where':{'id':_0x523cd7['params']['id']}})[_0xd66c('0x20')](handleEntityNotFound(_0x5642c5,null))['then'](function(_0x4235dd){if(_0x4235dd){_0x216344=_0x4235dd;_0x1379a0[_0xd66c('0x30')]=_[_0xd66c('0x2c')](db[_0xd66c('0x57')][_0xd66c('0x2b')]);_0x1379a0[_0xd66c('0x2d')]=_[_0xd66c('0x2c')](_0x523cd7['query']);_0x1379a0['filters']=_[_0xd66c('0x2f')](_0x1379a0[_0xd66c('0x30')],_0x1379a0[_0xd66c('0x2d')]);_0x3dd65c['attributes']=_['intersection'](_0x1379a0[_0xd66c('0x30')],qs['fields'](_0x523cd7['query'][_0xd66c('0x31')]));_0x3dd65c[_0xd66c('0x32')]=_0x3dd65c[_0xd66c('0x32')][_0xd66c('0x33')]?_0x3dd65c[_0xd66c('0x32')]:_0x1379a0[_0xd66c('0x30')];_0x3dd65c[_0xd66c('0x37')]=qs['sort'](_0x523cd7[_0xd66c('0x2d')][_0xd66c('0x38')]);_0x3dd65c['where']=qs[_0xd66c('0x2e')](_['pick'](_0x523cd7[_0xd66c('0x2d')],_0x1379a0[_0xd66c('0x2e')]));if(_0x523cd7[_0xd66c('0x2d')][_0xd66c('0x3b')]){_0x3dd65c[_0xd66c('0x39')]=_[_0xd66c('0x3c')](_0x3dd65c[_0xd66c('0x39')],{'$or':_[_0xd66c('0x3d')](_0x3dd65c['attributes'],function(_0x102cf5){var _0x2f165d={};_0x2f165d[_0x102cf5]={'$like':'%'+_0x523cd7[_0xd66c('0x2d')][_0xd66c('0x3b')]+'%'};return _0x2f165d;})});}_0x3dd65c=_[_0xd66c('0x3c')]({},_0x3dd65c,_0x523cd7[_0xd66c('0x42')]);return _0x216344[_0xd66c('0x55')](_0x3dd65c);}})[_0xd66c('0x20')](function(_0x2f2646){if(_0x2f2646){_0x56c02f=_0x2f2646['length'];if(!_0x523cd7[_0xd66c('0x2d')][_0xd66c('0x34')]('nolimit')){_0x3dd65c[_0xd66c('0x36')]=qs[_0xd66c('0x36')](_0x523cd7[_0xd66c('0x2d')][_0xd66c('0x36')]);_0x3dd65c[_0xd66c('0x19')]=qs['offset'](_0x523cd7[_0xd66c('0x2d')][_0xd66c('0x19')]);}return _0x216344[_0xd66c('0x55')](_0x3dd65c);}})[_0xd66c('0x20')](function(_0x360d39){if(_0x360d39){return _0x360d39?{'count':_0x56c02f,'rows':_0x360d39}:null;}})['then'](respondWithResult(_0x5642c5,null))[_0xd66c('0x46')](handleError(_0x5642c5,null));};
\ No newline at end of file
+var _0x0f2f=['CmCompany','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','limit','sort','pick','filter','where','merge','VIRTUAL','field','options','include','findAll','show','includeAll','create','user','role','find','userProfileId','autoAssociation','catch','body','params','addContacts','CmContact','ids','omit','findOne','order','map','getContacts','hasOwnProperty','html-pdf','eml-format','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','papaparse','../../components/auth/service','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','count','offset','Content-Range','json','reject','save','update','then','destroy','get','Companies','UserProfileResource','end','error','stack','name','send'];(function(_0x2b1952,_0x87b984){var _0x547118=function(_0x556b0e){while(--_0x556b0e){_0x2b1952['push'](_0x2b1952['shift']());}};_0x547118(++_0x87b984);}(_0x0f2f,0x7c));var _0xf0f2=function(_0x4556df,_0x2266bd){_0x4556df=_0x4556df-0x0;var _0x2c86d3=_0x0f2f[_0x4556df];return _0x2c86d3;};'use strict';var pdf=require(_0xf0f2('0x0'));var emlformat=require(_0xf0f2('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0xf0f2('0x2'));var moment=require(_0xf0f2('0x3'));var BPromise=require(_0xf0f2('0x4'));var Mustache=require('mustache');var util=require(_0xf0f2('0x5'));var path=require(_0xf0f2('0x6'));var sox=require(_0xf0f2('0x7'));var csv=require(_0xf0f2('0x8'));var ejs=require(_0xf0f2('0x9'));var fs=require('fs');var _=require(_0xf0f2('0xa'));var squel=require(_0xf0f2('0xb'));var crypto=require(_0xf0f2('0xc'));var jsforce=require(_0xf0f2('0xd'));var deskjs=require(_0xf0f2('0xe'));var toCsv=require(_0xf0f2('0x8'));var querystring=require('querystring');var Papa=require(_0xf0f2('0xf'));var Redis=require('ioredis');var authService=require(_0xf0f2('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xf0f2('0x11'));var utils=require(_0xf0f2('0x12'));var config=require(_0xf0f2('0x13'));var db=require(_0xf0f2('0x14'))['db'];function respondWithStatusCode(_0x126c98,_0x8d51d3){_0x8d51d3=_0x8d51d3||0xcc;return function(_0x34637d){if(_0x34637d){return _0x126c98[_0xf0f2('0x15')](_0x8d51d3);}return _0x126c98[_0xf0f2('0x16')](_0x8d51d3)['end']();};}function respondWithResult(_0x387c33,_0x23210c){_0x23210c=_0x23210c||0xc8;return function(_0x78e106){if(_0x78e106){return _0x387c33[_0xf0f2('0x16')](_0x23210c)['json'](_0x78e106);}};}function respondWithFilteredResult(_0xac7f5e,_0x345625){return function(_0x4e2947){if(_0x4e2947){var _0x3f6412=_0x4e2947[_0xf0f2('0x17')],_0x518e05=_0x345625[_0xf0f2('0x18')],_0x936dae=_0x345625[_0xf0f2('0x18')]+_0x345625['limit'],_0x54a7ef;if(_0x936dae>=_0x3f6412){_0x936dae=_0x3f6412;_0x54a7ef=0xc8;}else{_0x54a7ef=0xce;}_0xac7f5e[_0xf0f2('0x16')](_0x54a7ef);return _0xac7f5e['set'](_0xf0f2('0x19'),_0x518e05+'-'+_0x936dae+'/'+_0x3f6412)[_0xf0f2('0x1a')](_0x4e2947);}return null;};}function patchUpdates(_0x41c572){return function(_0x33b008){try{jsonpatch['apply'](_0x33b008,_0x41c572,!![]);}catch(_0x396bb4){return BPromise[_0xf0f2('0x1b')](_0x396bb4);}return _0x33b008[_0xf0f2('0x1c')]();};}function saveUpdates(_0xd9ba07,_0x4f6252){return function(_0x3049d4){if(_0x3049d4){return _0x3049d4[_0xf0f2('0x1d')](_0xd9ba07)[_0xf0f2('0x1e')](function(_0x4434a5){return _0x4434a5;});}return null;};}function removeEntity(_0x3058d9,_0x188eac){return function(_0x22d44c){if(_0x22d44c){return _0x22d44c[_0xf0f2('0x1f')]()[_0xf0f2('0x1e')](function(){var _0x560925=_0x22d44c[_0xf0f2('0x20')]({'plain':!![]});var _0x8dede8=_0xf0f2('0x21');return db[_0xf0f2('0x22')]['destroy']({'where':{'type':_0x8dede8,'resourceId':_0x560925['id']}})[_0xf0f2('0x1e')](function(){return _0x22d44c;});})[_0xf0f2('0x1e')](function(){_0x3058d9[_0xf0f2('0x16')](0xcc)[_0xf0f2('0x23')]();});}};}function handleEntityNotFound(_0x591417,_0x5ce39a){return function(_0x4208ff){if(!_0x4208ff){_0x591417[_0xf0f2('0x15')](0x194);}return _0x4208ff;};}function handleError(_0x34ac07,_0x271444){_0x271444=_0x271444||0x1f4;return function(_0x3db061){logger[_0xf0f2('0x24')](_0x3db061[_0xf0f2('0x25')]);if(_0x3db061[_0xf0f2('0x26')]){delete _0x3db061[_0xf0f2('0x26')];}_0x34ac07['status'](_0x271444)[_0xf0f2('0x27')](_0x3db061);};}exports['index']=function(_0x3cb29c,_0x2ea755){var _0x30edc1={},_0x2b77ec={},_0x235085={'count':0x0,'rows':[]};var _0x45c5e1=db[_0xf0f2('0x28')][_0xf0f2('0x29')];_0x2b77ec[_0xf0f2('0x2a')]=_[_0xf0f2('0x2b')](_0x45c5e1);_0x2b77ec['query']=_[_0xf0f2('0x2b')](_0x3cb29c[_0xf0f2('0x2c')]);_0x2b77ec[_0xf0f2('0x2d')]=_[_0xf0f2('0x2e')](_0x2b77ec[_0xf0f2('0x2a')],_0x2b77ec[_0xf0f2('0x2c')]);_0x30edc1[_0xf0f2('0x2f')]=_[_0xf0f2('0x2e')](_0x2b77ec[_0xf0f2('0x2a')],qs[_0xf0f2('0x30')](_0x3cb29c[_0xf0f2('0x2c')][_0xf0f2('0x30')]));_0x30edc1[_0xf0f2('0x2f')]=_0x30edc1['attributes'][_0xf0f2('0x31')]?_0x30edc1[_0xf0f2('0x2f')]:_0x2b77ec[_0xf0f2('0x2a')];if(!_0x3cb29c[_0xf0f2('0x2c')]['hasOwnProperty'](_0xf0f2('0x32'))){_0x30edc1['limit']=qs[_0xf0f2('0x33')](_0x3cb29c[_0xf0f2('0x2c')][_0xf0f2('0x33')]);_0x30edc1[_0xf0f2('0x18')]=qs[_0xf0f2('0x18')](_0x3cb29c[_0xf0f2('0x2c')][_0xf0f2('0x18')]);}_0x30edc1['order']=qs[_0xf0f2('0x34')](_0x3cb29c[_0xf0f2('0x2c')][_0xf0f2('0x34')]);_0x30edc1['where']=qs['filters'](_[_0xf0f2('0x35')](_0x3cb29c['query'],_0x2b77ec['filters']));if(_0x3cb29c[_0xf0f2('0x2c')][_0xf0f2('0x36')]){_0x30edc1[_0xf0f2('0x37')]=_[_0xf0f2('0x38')](_0x30edc1[_0xf0f2('0x37')],{'$or':_['map'](_0x45c5e1,function(_0x321986){if(_0x321986['type']['key']!==_0xf0f2('0x39')){var _0x115847={};_0x115847[_0x321986[_0xf0f2('0x3a')]]={'$like':'%'+_0x3cb29c[_0xf0f2('0x2c')][_0xf0f2('0x36')]+'%'};return _0x115847;}})});}_0x30edc1=_[_0xf0f2('0x38')]({},_0x30edc1,_0x3cb29c[_0xf0f2('0x3b')]);var _0x1d23ed={'where':_0x30edc1['where']};return db['CmCompany']['count'](_0x1d23ed)[_0xf0f2('0x1e')](function(_0xc0e960){_0x235085[_0xf0f2('0x17')]=_0xc0e960;if(_0x3cb29c[_0xf0f2('0x2c')]['includeAll']){_0x30edc1[_0xf0f2('0x3c')]=[{'all':!![]}];}return db[_0xf0f2('0x28')][_0xf0f2('0x3d')](_0x30edc1);})[_0xf0f2('0x1e')](function(_0x35bacb){_0x235085['rows']=_0x35bacb;return _0x235085;})['then'](respondWithFilteredResult(_0x2ea755,_0x30edc1))['catch'](handleError(_0x2ea755,null));};exports[_0xf0f2('0x3e')]=function(_0x320a4c,_0x2718af){var _0x2d423f={'raw':![],'where':{'id':_0x320a4c['params']['id']}},_0xd73752={};_0xd73752[_0xf0f2('0x2a')]=_[_0xf0f2('0x2b')](db[_0xf0f2('0x28')]['rawAttributes']);_0xd73752[_0xf0f2('0x2c')]=_['keys'](_0x320a4c['query']);_0xd73752['filters']=_[_0xf0f2('0x2e')](_0xd73752['model'],_0xd73752['query']);_0x2d423f['attributes']=_['intersection'](_0xd73752[_0xf0f2('0x2a')],qs['fields'](_0x320a4c[_0xf0f2('0x2c')][_0xf0f2('0x30')]));_0x2d423f[_0xf0f2('0x2f')]=_0x2d423f[_0xf0f2('0x2f')][_0xf0f2('0x31')]?_0x2d423f[_0xf0f2('0x2f')]:_0xd73752[_0xf0f2('0x2a')];if(_0x320a4c[_0xf0f2('0x2c')][_0xf0f2('0x3f')]){_0x2d423f[_0xf0f2('0x3c')]=[{'all':!![]}];}_0x2d423f=_[_0xf0f2('0x38')]({},_0x2d423f,_0x320a4c[_0xf0f2('0x3b')]);return db[_0xf0f2('0x28')]['find'](_0x2d423f)[_0xf0f2('0x1e')](handleEntityNotFound(_0x2718af,null))[_0xf0f2('0x1e')](respondWithResult(_0x2718af,null))['catch'](handleError(_0x2718af,null));};exports[_0xf0f2('0x40')]=function(_0x2dae02,_0xa624d8){return db['CmCompany'][_0xf0f2('0x40')](_0x2dae02['body'],{})[_0xf0f2('0x1e')](function(_0x2996ad){var _0x14b31b=_0x2dae02[_0xf0f2('0x41')][_0xf0f2('0x20')]({'plain':!![]});if(!_0x14b31b)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x14b31b[_0xf0f2('0x42')]===_0xf0f2('0x41')){var _0xed557f=_0x2996ad[_0xf0f2('0x20')]({'plain':!![]});var _0x59d06e=_0xf0f2('0x21');return db['UserProfileSection'][_0xf0f2('0x43')]({'where':{'name':_0x59d06e,'userProfileId':_0x14b31b[_0xf0f2('0x44')]},'raw':!![]})[_0xf0f2('0x1e')](function(_0x1c0022){if(_0x1c0022&&_0x1c0022[_0xf0f2('0x45')]===0x0){return db[_0xf0f2('0x22')][_0xf0f2('0x40')]({'name':_0xed557f[_0xf0f2('0x26')],'resourceId':_0xed557f['id'],'type':_0x1c0022[_0xf0f2('0x26')],'sectionId':_0x1c0022['id']},{})[_0xf0f2('0x1e')](function(){return _0x2996ad;});}else{return _0x2996ad;}})[_0xf0f2('0x46')](function(_0x51358b){logger[_0xf0f2('0x24')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x51358b);throw _0x51358b;});}return _0x2996ad;})[_0xf0f2('0x1e')](respondWithResult(_0xa624d8,0xc9))[_0xf0f2('0x46')](handleError(_0xa624d8,null));};exports[_0xf0f2('0x1d')]=function(_0x170437,_0x50e866){if(_0x170437[_0xf0f2('0x47')]['id']){delete _0x170437[_0xf0f2('0x47')]['id'];}return db['CmCompany'][_0xf0f2('0x43')]({'where':{'id':_0x170437[_0xf0f2('0x48')]['id']}})[_0xf0f2('0x1e')](handleEntityNotFound(_0x50e866,null))[_0xf0f2('0x1e')](saveUpdates(_0x170437['body'],null))[_0xf0f2('0x1e')](respondWithResult(_0x50e866,null))[_0xf0f2('0x46')](handleError(_0x50e866,null));};exports[_0xf0f2('0x1f')]=function(_0x4f2eab,_0x346a9d){return db[_0xf0f2('0x28')][_0xf0f2('0x43')]({'where':{'id':_0x4f2eab[_0xf0f2('0x48')]['id']}})[_0xf0f2('0x1e')](handleEntityNotFound(_0x346a9d,null))[_0xf0f2('0x1e')](removeEntity(_0x346a9d,null))[_0xf0f2('0x46')](handleError(_0x346a9d,null));};exports[_0xf0f2('0x49')]=function(_0x29f4e5,_0x1104b8,_0x409970){return db[_0xf0f2('0x4a')]['find']({'where':{'id':_0x29f4e5[_0xf0f2('0x48')]['id']}})[_0xf0f2('0x1e')](handleEntityNotFound(_0x1104b8,null))['then'](function(_0xb12f28){if(_0xb12f28){return _0xb12f28[_0xf0f2('0x49')](_0x29f4e5[_0xf0f2('0x47')][_0xf0f2('0x4b')],_[_0xf0f2('0x4c')](_0x29f4e5['body'],[_0xf0f2('0x4b'),'id'])||{});}})[_0xf0f2('0x1e')](respondWithResult(_0x1104b8,null))[_0xf0f2('0x46')](handleError(_0x1104b8,null));};exports['getContacts']=function(_0x49c581,_0x258a4b,_0x3b1cf0){var _0x16539e={};var _0x127111={};var _0x302cee;var _0x3f76f4;return db[_0xf0f2('0x28')][_0xf0f2('0x4d')]({'where':{'id':_0x49c581[_0xf0f2('0x48')]['id']}})[_0xf0f2('0x1e')](handleEntityNotFound(_0x258a4b,null))['then'](function(_0x13a758){if(_0x13a758){_0x302cee=_0x13a758;_0x127111['model']=_['keys'](db[_0xf0f2('0x4a')]['rawAttributes']);_0x127111[_0xf0f2('0x2c')]=_['keys'](_0x49c581[_0xf0f2('0x2c')]);_0x127111['filters']=_[_0xf0f2('0x2e')](_0x127111[_0xf0f2('0x2a')],_0x127111[_0xf0f2('0x2c')]);_0x16539e[_0xf0f2('0x2f')]=_[_0xf0f2('0x2e')](_0x127111[_0xf0f2('0x2a')],qs[_0xf0f2('0x30')](_0x49c581[_0xf0f2('0x2c')][_0xf0f2('0x30')]));_0x16539e[_0xf0f2('0x2f')]=_0x16539e['attributes'][_0xf0f2('0x31')]?_0x16539e[_0xf0f2('0x2f')]:_0x127111['model'];_0x16539e[_0xf0f2('0x4e')]=qs[_0xf0f2('0x34')](_0x49c581[_0xf0f2('0x2c')][_0xf0f2('0x34')]);_0x16539e['where']=qs[_0xf0f2('0x2d')](_[_0xf0f2('0x35')](_0x49c581['query'],_0x127111[_0xf0f2('0x2d')]));if(_0x49c581[_0xf0f2('0x2c')]['filter']){_0x16539e[_0xf0f2('0x37')]=_[_0xf0f2('0x38')](_0x16539e[_0xf0f2('0x37')],{'$or':_[_0xf0f2('0x4f')](_0x16539e[_0xf0f2('0x2f')],function(_0x1ab05e){var _0x5de4f0={};_0x5de4f0[_0x1ab05e]={'$like':'%'+_0x49c581[_0xf0f2('0x2c')][_0xf0f2('0x36')]+'%'};return _0x5de4f0;})});}_0x16539e=_[_0xf0f2('0x38')]({},_0x16539e,_0x49c581[_0xf0f2('0x3b')]);return _0x302cee[_0xf0f2('0x50')](_0x16539e);}})[_0xf0f2('0x1e')](function(_0x4e47a3){if(_0x4e47a3){_0x3f76f4=_0x4e47a3[_0xf0f2('0x31')];if(!_0x49c581[_0xf0f2('0x2c')][_0xf0f2('0x51')]('nolimit')){_0x16539e[_0xf0f2('0x33')]=qs['limit'](_0x49c581['query']['limit']);_0x16539e[_0xf0f2('0x18')]=qs[_0xf0f2('0x18')](_0x49c581[_0xf0f2('0x2c')][_0xf0f2('0x18')]);}return _0x302cee[_0xf0f2('0x50')](_0x16539e);}})['then'](function(_0xc4ce7c){if(_0xc4ce7c){return _0xc4ce7c?{'count':_0x3f76f4,'rows':_0xc4ce7c}:null;}})['then'](respondWithResult(_0x258a4b,null))['catch'](handleError(_0x258a4b,null));};
\ No newline at end of file
index 175e40c..4cf49b1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x02ce=['util','../../config/logger','moment','request-promise','path','rimraf','../../config/environment','./cmCompany.attributes','exports','define','lodash'];(function(_0x3a8b8c,_0x34d266){var _0x476c10=function(_0x1fec08){while(--_0x1fec08){_0x3a8b8c['push'](_0x3a8b8c['shift']());}};_0x476c10(++_0x34d266);}(_0x02ce,0x1ac));var _0xe02c=function(_0x5d2f93,_0x2b3c81){_0x5d2f93=_0x5d2f93-0x0;var _0xa1c2f4=_0x02ce[_0x5d2f93];return _0xa1c2f4;};'use strict';var _=require(_0xe02c('0x0'));var util=require(_0xe02c('0x1'));var logger=require(_0xe02c('0x2'))('api');var moment=require(_0xe02c('0x3'));var BPromise=require('bluebird');var rp=require(_0xe02c('0x4'));var fs=require('fs');var path=require(_0xe02c('0x5'));var rimraf=require(_0xe02c('0x6'));var config=require(_0xe02c('0x7'));var attributes=require(_0xe02c('0x8'));module[_0xe02c('0x9')]=function(_0x3f7436,_0x2b804f){return _0x3f7436[_0xe02c('0xa')]('CmCompany',attributes,{'tableName':'cm_companies','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2272=['lodash','util','../../config/logger','api','moment','request-promise','path','rimraf','exports','define','CmCompany','cm_companies'];(function(_0x494f3e,_0x5999dc){var _0x2ee240=function(_0x552840){while(--_0x552840){_0x494f3e['push'](_0x494f3e['shift']());}};_0x2ee240(++_0x5999dc);}(_0x2272,0xd8));var _0x2227=function(_0x17d9e3,_0x1f969c){_0x17d9e3=_0x17d9e3-0x0;var _0x14192d=_0x2272[_0x17d9e3];return _0x14192d;};'use strict';var _=require(_0x2227('0x0'));var util=require(_0x2227('0x1'));var logger=require(_0x2227('0x2'))(_0x2227('0x3'));var moment=require(_0x2227('0x4'));var BPromise=require('bluebird');var rp=require(_0x2227('0x5'));var fs=require('fs');var path=require(_0x2227('0x6'));var rimraf=require(_0x2227('0x7'));var config=require('../../config/environment');var attributes=require('./cmCompany.attributes');module[_0x2227('0x8')]=function(_0x3b8661,_0xb33647){return _0x3b8661[_0x2227('0x9')](_0x2227('0xa'),attributes,{'tableName':_0x2227('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 41e6851..1469bc6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcd4b=['ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','CmCompany,\x20%s,\x20%s','request\x20sent','debug','CmCompany,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','moment','randomstring'];(function(_0x2c7618,_0x26be9c){var _0x5ce3f0=function(_0x1837b3){while(--_0x1837b3){_0x2c7618['push'](_0x2c7618['shift']());}};_0x5ce3f0(++_0x26be9c);}(_0xcd4b,0xed));var _0xbcd4=function(_0x400d0f,_0x195810){_0x400d0f=_0x400d0f-0x0;var _0x2087ba=_0xcd4b[_0x400d0f];return _0x2087ba;};'use strict';var _=require(_0xbcd4('0x0'));var util=require('util');var moment=require(_0xbcd4('0x1'));var BPromise=require('bluebird');var rs=require(_0xbcd4('0x2'));var fs=require('fs');var Redis=require(_0xbcd4('0x3'));var db=require(_0xbcd4('0x4'))['db'];var utils=require(_0xbcd4('0x5'));var logger=require(_0xbcd4('0x6'))(_0xbcd4('0x7'));var config=require(_0xbcd4('0x8'));var jayson=require(_0xbcd4('0x9'));var client=jayson[_0xbcd4('0xa')][_0xbcd4('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x44f722,_0x282a20,_0x151d45){return new BPromise(function(_0xa05a26,_0x59268f){return client[_0xbcd4('0xc')](_0x44f722,_0x151d45)[_0xbcd4('0xd')](function(_0x2105c3){logger[_0xbcd4('0xe')](_0xbcd4('0xf'),_0x282a20,_0xbcd4('0x10'));logger[_0xbcd4('0x11')](_0xbcd4('0x12'),_0x282a20,_0xbcd4('0x10'),JSON['stringify'](_0x2105c3));if(_0x2105c3[_0xbcd4('0x13')]){if(_0x2105c3[_0xbcd4('0x13')][_0xbcd4('0x14')]===0x1f4){logger[_0xbcd4('0x13')](_0xbcd4('0xf'),_0x282a20,_0x2105c3[_0xbcd4('0x13')][_0xbcd4('0x15')]);return _0x59268f(_0x2105c3['error'][_0xbcd4('0x15')]);}logger[_0xbcd4('0x13')](_0xbcd4('0xf'),_0x282a20,_0x2105c3['error'][_0xbcd4('0x15')]);return _0xa05a26(_0x2105c3[_0xbcd4('0x13')][_0xbcd4('0x15')]);}else{logger['info']('CmCompany,\x20%s,\x20%s',_0x282a20,_0xbcd4('0x10'));_0xa05a26(_0x2105c3[_0xbcd4('0x16')][_0xbcd4('0x15')]);}})[_0xbcd4('0x17')](function(_0x1b888e){logger[_0xbcd4('0x13')](_0xbcd4('0xf'),_0x282a20,_0x1b888e);_0x59268f(_0x1b888e);});});}
\ No newline at end of file
+var _0xf81d=['../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','request\x20sent','CmCompany,\x20%s,\x20%s,\x20%s','stringify','error','code','message','CmCompany,\x20%s,\x20%s','result','util','moment','bluebird','ioredis','../../mysqldb'];(function(_0x237546,_0xa81b26){var _0x233e29=function(_0x728aa4){while(--_0x728aa4){_0x237546['push'](_0x237546['shift']());}};_0x233e29(++_0xa81b26);}(_0xf81d,0xeb));var _0xdf81=function(_0x221b0b,_0x4dfb48){_0x221b0b=_0x221b0b-0x0;var _0x5b6ba0=_0xf81d[_0x221b0b];return _0x5b6ba0;};'use strict';var _=require('lodash');var util=require(_0xdf81('0x0'));var moment=require(_0xdf81('0x1'));var BPromise=require(_0xdf81('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xdf81('0x3'));var db=require(_0xdf81('0x4'))['db'];var utils=require(_0xdf81('0x5'));var logger=require(_0xdf81('0x6'))('rpc');var config=require(_0xdf81('0x7'));var jayson=require(_0xdf81('0x8'));var client=jayson[_0xdf81('0x9')][_0xdf81('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x286d10,_0x98bced,_0x33b596){return new BPromise(function(_0x384c93,_0x3224b1){return client[_0xdf81('0xb')](_0x286d10,_0x33b596)['then'](function(_0x5dc669){logger['info']('CmCompany,\x20%s,\x20%s',_0x98bced,_0xdf81('0xc'));logger['debug'](_0xdf81('0xd'),_0x98bced,_0xdf81('0xc'),JSON[_0xdf81('0xe')](_0x5dc669));if(_0x5dc669[_0xdf81('0xf')]){if(_0x5dc669[_0xdf81('0xf')][_0xdf81('0x10')]===0x1f4){logger[_0xdf81('0xf')]('CmCompany,\x20%s,\x20%s',_0x98bced,_0x5dc669[_0xdf81('0xf')]['message']);return _0x3224b1(_0x5dc669[_0xdf81('0xf')][_0xdf81('0x11')]);}logger[_0xdf81('0xf')](_0xdf81('0x12'),_0x98bced,_0x5dc669[_0xdf81('0xf')][_0xdf81('0x11')]);return _0x384c93(_0x5dc669[_0xdf81('0xf')][_0xdf81('0x11')]);}else{logger['info'](_0xdf81('0x12'),_0x98bced,'request\x20sent');_0x384c93(_0x5dc669[_0xdf81('0x13')]['message']);}})['catch'](function(_0x51de99){logger['error'](_0xdf81('0x12'),_0x98bced,_0x51de99);_0x3224b1(_0x51de99);});});}
\ No newline at end of file
index 8049b85..649457f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x882a=['delete','destroy','exports','multer','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','get','index','/:id','isAuthenticated','show','/:id/contacts','getContacts','post','create','addContacts','put'];(function(_0xc65399,_0x4a1070){var _0x4829a9=function(_0x5606d4){while(--_0x5606d4){_0xc65399['push'](_0xc65399['shift']());}};_0x4829a9(++_0x4a1070);}(_0x882a,0xa3));var _0xa882=function(_0x17b8b0,_0xb9c0b9){_0x17b8b0=_0x17b8b0-0x0;var _0x354d9a=_0x882a[_0x17b8b0];return _0x354d9a;};'use strict';var multer=require(_0xa882('0x0'));var util=require('util');var path=require(_0xa882('0x1'));var timeout=require(_0xa882('0x2'));var express=require('express');var router=express[_0xa882('0x3')]();var auth=require(_0xa882('0x4'));var interaction=require(_0xa882('0x5'));var config=require('../../config/environment');var controller=require('./cmCompany.controller');router[_0xa882('0x6')]('/',auth['isAuthenticated'](),controller[_0xa882('0x7')]);router[_0xa882('0x6')](_0xa882('0x8'),auth[_0xa882('0x9')](),controller[_0xa882('0xa')]);router[_0xa882('0x6')](_0xa882('0xb'),auth[_0xa882('0x9')](),controller[_0xa882('0xc')]);router[_0xa882('0xd')]('/',auth[_0xa882('0x9')](),controller[_0xa882('0xe')]);router[_0xa882('0xd')](_0xa882('0xb'),auth['isAuthenticated'](),controller[_0xa882('0xf')]);router[_0xa882('0x10')](_0xa882('0x8'),auth['isAuthenticated'](),controller['update']);router[_0xa882('0x11')]('/:id',auth['isAuthenticated'](),controller[_0xa882('0x12')]);module[_0xa882('0x13')]=router;
\ No newline at end of file
+var _0xe2c7=['Router','../../components/auth/service','../../components/interaction/service','./cmCompany.controller','get','index','isAuthenticated','/:id/contacts','getContacts','post','create','addContacts','put','/:id','update','destroy','exports','multer','connect-timeout','express'];(function(_0x4a73dd,_0x58e46c){var _0x279e6b=function(_0x25254b){while(--_0x25254b){_0x4a73dd['push'](_0x4a73dd['shift']());}};_0x279e6b(++_0x58e46c);}(_0xe2c7,0xc5));var _0x7e2c=function(_0x4243a3,_0x447337){_0x4243a3=_0x4243a3-0x0;var _0x1b2a33=_0xe2c7[_0x4243a3];return _0x1b2a33;};'use strict';var multer=require(_0x7e2c('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x7e2c('0x1'));var express=require(_0x7e2c('0x2'));var router=express[_0x7e2c('0x3')]();var auth=require(_0x7e2c('0x4'));var interaction=require(_0x7e2c('0x5'));var config=require('../../config/environment');var controller=require(_0x7e2c('0x6'));router[_0x7e2c('0x7')]('/',auth['isAuthenticated'](),controller[_0x7e2c('0x8')]);router['get']('/:id',auth[_0x7e2c('0x9')](),controller['show']);router['get'](_0x7e2c('0xa'),auth[_0x7e2c('0x9')](),controller[_0x7e2c('0xb')]);router[_0x7e2c('0xc')]('/',auth[_0x7e2c('0x9')](),controller[_0x7e2c('0xd')]);router['post'](_0x7e2c('0xa'),auth[_0x7e2c('0x9')](),controller[_0x7e2c('0xe')]);router[_0x7e2c('0xf')](_0x7e2c('0x10'),auth['isAuthenticated'](),controller[_0x7e2c('0x11')]);router['delete']('/:id',auth[_0x7e2c('0x9')](),controller[_0x7e2c('0x12')]);module[_0x7e2c('0x13')]=router;
\ No newline at end of file
index ee4ff8a..a3cdb7c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x74c1=['UNSIGNED','DATE','NOW','sequelize','STRING','TEXT','INTEGER'];(function(_0x4b4baf,_0xd15ea6){var _0xd2824c=function(_0x276012){while(--_0x276012){_0x4b4baf['push'](_0x4b4baf['shift']());}};_0xd2824c(++_0xd15ea6);}(_0x74c1,0xc7));var _0x174c=function(_0x156e9a,_0x12e50e){_0x156e9a=_0x156e9a-0x0;var _0x5f372c=_0x74c1[_0x156e9a];return _0x5f372c;};'use strict';var _=require('lodash');var Sequelize=require(_0x174c('0x0'));module['exports']={'firstName':{'type':Sequelize['STRING'],'allowNull':![]},'lastName':{'type':Sequelize[_0x174c('0x1')]},'street':{'type':Sequelize[_0x174c('0x1')]},'postalCode':{'type':Sequelize[_0x174c('0x1')]},'city':{'type':Sequelize[_0x174c('0x1')]},'country':{'type':Sequelize[_0x174c('0x1')]},'dateOfBirth':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x174c('0x2')]},'phone':{'type':Sequelize[_0x174c('0x1')]},'mobile':{'type':Sequelize[_0x174c('0x1')]},'fax':{'type':Sequelize['STRING']},'email':{'type':Sequelize[_0x174c('0x1')]},'url':{'type':Sequelize[_0x174c('0x1')]},'facebook':{'type':Sequelize[_0x174c('0x1')]},'fb_data':{'type':Sequelize[_0x174c('0x1')]},'twitter':{'type':Sequelize[_0x174c('0x1')]},'skype':{'type':Sequelize[_0x174c('0x1')]},'teams':{'type':Sequelize[_0x174c('0x1')]},'viber':{'type':Sequelize[_0x174c('0x1')]},'line':{'type':Sequelize[_0x174c('0x1')]},'wechat':{'type':Sequelize[_0x174c('0x1')]},'telegram':{'type':Sequelize[_0x174c('0x1')]},'UserId':{'type':Sequelize[_0x174c('0x3')]},'priority':{'type':Sequelize[_0x174c('0x3')](0x2)[_0x174c('0x4')],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'scheduledat':{'type':Sequelize[_0x174c('0x5')],'defaultValue':Sequelize[_0x174c('0x6')]}};
\ No newline at end of file
+var _0x9041=['STRING','TEXT','INTEGER','DATE','NOW','sequelize','exports'];(function(_0x37fddc,_0xce493c){var _0x504eeb=function(_0x9eb2c0){while(--_0x9eb2c0){_0x37fddc['push'](_0x37fddc['shift']());}};_0x504eeb(++_0xce493c);}(_0x9041,0x1cc));var _0x1904=function(_0x53229f,_0x231c09){_0x53229f=_0x53229f-0x0;var _0x25b111=_0x9041[_0x53229f];return _0x25b111;};'use strict';var _=require('lodash');var Sequelize=require(_0x1904('0x0'));module[_0x1904('0x1')]={'firstName':{'type':Sequelize[_0x1904('0x2')],'allowNull':![]},'lastName':{'type':Sequelize[_0x1904('0x2')]},'street':{'type':Sequelize[_0x1904('0x2')]},'postalCode':{'type':Sequelize[_0x1904('0x2')]},'city':{'type':Sequelize[_0x1904('0x2')]},'country':{'type':Sequelize['STRING']},'dateOfBirth':{'type':Sequelize[_0x1904('0x2')]},'description':{'type':Sequelize[_0x1904('0x3')]},'phone':{'type':Sequelize[_0x1904('0x2')]},'mobile':{'type':Sequelize[_0x1904('0x2')]},'fax':{'type':Sequelize[_0x1904('0x2')]},'email':{'type':Sequelize[_0x1904('0x2')]},'url':{'type':Sequelize[_0x1904('0x2')]},'facebook':{'type':Sequelize['STRING']},'fb_data':{'type':Sequelize[_0x1904('0x2')]},'twitter':{'type':Sequelize[_0x1904('0x2')]},'skype':{'type':Sequelize[_0x1904('0x2')]},'teams':{'type':Sequelize[_0x1904('0x2')]},'viber':{'type':Sequelize[_0x1904('0x2')]},'line':{'type':Sequelize[_0x1904('0x2')]},'wechat':{'type':Sequelize[_0x1904('0x2')]},'telegram':{'type':Sequelize[_0x1904('0x2')]},'UserId':{'type':Sequelize[_0x1904('0x4')]},'priority':{'type':Sequelize[_0x1904('0x4')](0x2)['UNSIGNED'],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'scheduledat':{'type':Sequelize[_0x1904('0x5')],'defaultValue':Sequelize[_0x1904('0x6')]}};
\ No newline at end of file
index df55b54..e7b83d3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9b71=['User','agent','binding','fork','stringify','message','start\x20child\x20process\x20correctly!','pid','exit','error\x20child\x20process','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','squel','crypto','jsforce','desk.js','to-csv','querystring','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','redis','defaults','socket.io-emitter','sendStatus','end','status','json','count','offset','limit','set','Content-Range','reject','save','update','then','destroy','stack','name','send','index','CmContact','describe','model','keys','query','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','pick','filters','select','field','color','from','tools_tags','cm_contacts','where','c.deletedAt\x20IS\x20NULL','advancedFilter','parse','forEach','condition','isArray','value','length','and','tableAlias','\x20IN\x20?','\x20=\x20?','LIKE','\x20LIKE\x20?','\x20>\x20?','filter','isNil','isEmpty','ListId','c.ListId\x20IN\x20?','concat','replace','\x27\x27\x27\x27','isNumeric','c.id\x20LIKE\x20?','c.phone\x20LIKE\x20?','c.mobile\x20LIKE\x20?','c.fax\x20LIKE\x20?','c.email\x20LIKE\x20?','DESC','group','Sequelize','SELECT','COUNT(*)','tag','expr','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','having','left_join','cm_contact_has_tags','ct.CmContactId\x20=\x20c.id','t.id\x20=\x20ct.TagId','t.id\x20IN\x20?','sequelize','keyBy','toString','merge','c.*','GROUP_CONCAT(DISTINCT\x20t.id)','TagIds','Tags','split','push','catch','find','cf_','CmCustomField','findAll','columnName','displayName','alias','custom','type','body','get','mergeWith','tags','join','info','[CmContact][merge]\x20to\x20%s\x20from\x20%s','CmHopper','CmHopperBlack','[CmContact][merge][destroy][CmHopperBlack],\x20%s','ChatInteraction','ChatMessage','ChatOfflineMessage','MailInteraction','MailMessage','SmsInteraction','FaxInteraction','FaxMessage','OpenchannelInteraction','OpenchannelMessage','CmHopperFinal','CmHopperHistory','ReportAgentPreview','VoiceCallReport','ChatQueueReport','FaxQueueReport','MailQueueReport','OpenchannelQueueReport','SmsQueueReport','JscriptySessionReport','create','bulkCreate','duplicates','$or','findOrCreate','error','show','params','Tag','$and','map','format','omit','pickBy','startsWith','cf_%d','table','setFields','id\x20=\x20?','toParam','text','values','phone','findOne','rawAttributes','options','getTags','setTags','ids','getHoppers','ContactId','includeAll','rows','getHopperHistories','include','getHopperFinals','uploadCsv','No\x20ListId\x20specified','No\x20association\x20keys\x20specified!','No\x20association\x20values\x20specified!','socket_timestamp','Unable\x20to\x20synchronize\x20socket,\x20no\x20timestamp\x20passed','binding_values','zipObject','No\x20phone\x20column\x20specified','firstName','No\x20firstName\x20column\x20specified','root','server/files/tmp','file','chmodSync','0777','child_process','../../components/import/cm/csv','binding_keys','File\x20uploaded\x20correctly!','meta','import'];(function(_0x151518,_0x4519bd){var _0x1517e6=function(_0x2f51c2){while(--_0x2f51c2){_0x151518['push'](_0x151518['shift']());}};_0x1517e6(++_0x4519bd);}(_0x9b71,0xed));var _0x19b7=function(_0x3215f3,_0x9becf1){_0x3215f3=_0x3215f3-0x0;var _0x5ea89a=_0x9b71[_0x3215f3];return _0x5ea89a;};'use strict';var pdf=require(_0x19b7('0x0'));var emlformat=require(_0x19b7('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x19b7('0x2'));var jsonpatch=require(_0x19b7('0x3'));var rp=require(_0x19b7('0x4'));var moment=require(_0x19b7('0x5'));var BPromise=require(_0x19b7('0x6'));var Mustache=require(_0x19b7('0x7'));var util=require(_0x19b7('0x8'));var path=require(_0x19b7('0x9'));var sox=require(_0x19b7('0xa'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x19b7('0xb'));var crypto=require(_0x19b7('0xc'));var jsforce=require(_0x19b7('0xd'));var deskjs=require(_0x19b7('0xe'));var toCsv=require(_0x19b7('0xf'));var querystring=require(_0x19b7('0x10'));var Papa=require('papaparse');var Redis=require(_0x19b7('0x11'));var authService=require('../../components/auth/service');var qs=require(_0x19b7('0x12'));var hardwareService=require(_0x19b7('0x13'));var logger=require(_0x19b7('0x14'))(_0x19b7('0x15'));var utils=require(_0x19b7('0x16'));var config=require('../../config/environment');var db=require(_0x19b7('0x17'))['db'];config[_0x19b7('0x18')]=_[_0x19b7('0x19')](config[_0x19b7('0x18')],{'host':'localhost','port':0x18eb});var socket=require(_0x19b7('0x1a'))(new Redis(config[_0x19b7('0x18')]));require('./cmContact.socket')['register'](socket);function respondWithStatusCode(_0xde0428,_0x3a6a59){_0x3a6a59=_0x3a6a59||0xcc;return function(_0x590080){if(_0x590080){return _0xde0428[_0x19b7('0x1b')](_0x3a6a59);}return _0xde0428['status'](_0x3a6a59)[_0x19b7('0x1c')]();};}function respondWithResult(_0x518d7c,_0x138215){_0x138215=_0x138215||0xc8;return function(_0x273a51){if(_0x273a51){return _0x518d7c[_0x19b7('0x1d')](_0x138215)[_0x19b7('0x1e')](_0x273a51);}};}function respondWithFilteredResult(_0xda5966,_0x165f42){return function(_0x18c7eb){if(_0x18c7eb){var _0x4e3b03=_0x18c7eb[_0x19b7('0x1f')],_0x2d8ad3=_0x165f42[_0x19b7('0x20')],_0x3458f8=_0x165f42['offset']+_0x165f42[_0x19b7('0x21')],_0x45f727;if(_0x3458f8>=_0x4e3b03){_0x3458f8=_0x4e3b03;_0x45f727=0xc8;}else{_0x45f727=0xce;}_0xda5966[_0x19b7('0x1d')](_0x45f727);return _0xda5966[_0x19b7('0x22')](_0x19b7('0x23'),_0x2d8ad3+'-'+_0x3458f8+'/'+_0x4e3b03)['json'](_0x18c7eb);}return null;};}function patchUpdates(_0x20d9d5){return function(_0x307d73){try{jsonpatch['apply'](_0x307d73,_0x20d9d5,!![]);}catch(_0x175fe0){return BPromise[_0x19b7('0x24')](_0x175fe0);}return _0x307d73[_0x19b7('0x25')]();};}function saveUpdates(_0x3e2bd0,_0x2df4a0){return function(_0x532fa6){if(_0x532fa6){return _0x532fa6[_0x19b7('0x26')](_0x3e2bd0)[_0x19b7('0x27')](function(_0x28e9da){return _0x28e9da;});}return null;};}function removeEntity(_0x45ec52,_0x1e4f97){return function(_0x43a5d9){if(_0x43a5d9){return _0x43a5d9[_0x19b7('0x28')]()[_0x19b7('0x27')](function(){_0x45ec52[_0x19b7('0x1d')](0xcc)[_0x19b7('0x1c')]();});}};}function handleEntityNotFound(_0x6e00c8,_0x22b194){return function(_0x1f0af9){if(!_0x1f0af9){_0x6e00c8[_0x19b7('0x1b')](0x194);}return _0x1f0af9;};}function handleError(_0x2f0665,_0x573ae6){_0x573ae6=_0x573ae6||0x1f4;return function(_0x590069){logger['error'](_0x590069[_0x19b7('0x29')]);if(_0x590069[_0x19b7('0x2a')]){delete _0x590069[_0x19b7('0x2a')];}_0x2f0665[_0x19b7('0x1d')](_0x573ae6)[_0x19b7('0x2b')](_0x590069);};}exports[_0x19b7('0x2c')]=function(_0x4303b1,_0x32cae6){var _0x50c880={},_0x77a542={},_0x242ef0={'count':0x0,'rows':[]};return db[_0x19b7('0x2d')][_0x19b7('0x2e')]()[_0x19b7('0x27')](function(_0x176bb1){_0x77a542[_0x19b7('0x2f')]=_[_0x19b7('0x30')](_0x176bb1);_0x77a542['query']=_[_0x19b7('0x30')](_0x4303b1[_0x19b7('0x31')]);_0x77a542['filters']=_[_0x19b7('0x32')](_0x77a542[_0x19b7('0x2f')],_0x77a542['query']);_0x50c880[_0x19b7('0x33')]=_[_0x19b7('0x32')](_0x77a542[_0x19b7('0x2f')],qs['fields'](_0x4303b1[_0x19b7('0x31')][_0x19b7('0x34')]));_0x50c880[_0x19b7('0x33')]=_0x50c880[_0x19b7('0x33')]['length']?_0x50c880[_0x19b7('0x33')]:_0x77a542[_0x19b7('0x2f')];if(!_0x4303b1['query'][_0x19b7('0x35')](_0x19b7('0x36'))){_0x50c880['limit']=qs[_0x19b7('0x21')](_0x4303b1[_0x19b7('0x31')]['limit']);_0x50c880[_0x19b7('0x20')]=qs[_0x19b7('0x20')](_0x4303b1[_0x19b7('0x31')][_0x19b7('0x20')]);}_0x50c880[_0x19b7('0x37')]=qs[_0x19b7('0x38')](_0x4303b1[_0x19b7('0x31')]['sort']);_0x50c880['where']=qs['filters'](_[_0x19b7('0x39')](_0x4303b1[_0x19b7('0x31')],_0x77a542[_0x19b7('0x3a')]));var _0x406f00=[];var _0x18af98=squel[_0x19b7('0x3b')]()['field']('id')[_0x19b7('0x3c')](_0x19b7('0x2a'))[_0x19b7('0x3c')](_0x19b7('0x3d'))[_0x19b7('0x3e')](_0x19b7('0x3f'));var _0x15b564=squel['select']()['from'](_0x19b7('0x40'),'c')[_0x19b7('0x41')](_0x19b7('0x42'));var _0x40e269=squel['expr']();if(_0x4303b1[_0x19b7('0x31')][_0x19b7('0x43')]){var _0x58c122=JSON[_0x19b7('0x44')](_0x4303b1[_0x19b7('0x31')][_0x19b7('0x43')]);_['keys'](_0x58c122)[_0x19b7('0x45')](function(_0x176299){var _0x5c2e51=_0x58c122[_0x176299];switch(_0x5c2e51[_0x19b7('0x46')]){case'IS':if(_[_0x19b7('0x47')](_0x5c2e51[_0x19b7('0x48')])&&_0x5c2e51[_0x19b7('0x48')][_0x19b7('0x49')]>0x1){_0x40e269[_0x19b7('0x4a')](_0x5c2e51[_0x19b7('0x4b')]+'.'+_0x176299+_0x19b7('0x4c'),_0x5c2e51['value']);}else{_0x40e269[_0x19b7('0x4a')](_0x5c2e51[_0x19b7('0x4b')]+'.'+_0x176299+_0x19b7('0x4d'),_0x5c2e51[_0x19b7('0x48')][0x0]);}break;case'=':_0x40e269[_0x19b7('0x4a')](_0x5c2e51[_0x19b7('0x4b')]+'.'+_0x176299+_0x19b7('0x4d'),_0x5c2e51[_0x19b7('0x48')]);break;case _0x19b7('0x4e'):_0x40e269[_0x19b7('0x4a')](_0x5c2e51[_0x19b7('0x4b')]+'.'+_0x176299+_0x19b7('0x4f'),'%'+_0x5c2e51[_0x19b7('0x48')]+'%');break;case'>':_0x40e269[_0x19b7('0x4a')](_0x5c2e51[_0x19b7('0x4b')]+'.'+_0x176299+_0x19b7('0x50'),_0x5c2e51[_0x19b7('0x48')]);break;case'<':_0x40e269['and'](_0x5c2e51[_0x19b7('0x4b')]+'.'+_0x176299+'\x20<\x20?',_0x5c2e51[_0x19b7('0x48')]);break;}});}else{var _0x47dadf=_(Object[_0x19b7('0x30')](_0x4303b1[_0x19b7('0x31')]))['map'](function(_0x36a582){return _0x176bb1['hasOwnProperty'](_0x36a582)?_0x36a582:undefined;})[_0x19b7('0x51')](function(_0x3cb231){return!_[_0x19b7('0x52')](_0x3cb231);})[_0x19b7('0x48')]();if(!_[_0x19b7('0x53')](_0x47dadf)){_0x47dadf[_0x19b7('0x45')](function(_0x97198b){if(_0x97198b===_0x19b7('0x54')){_0x15b564[_0x19b7('0x41')](_0x19b7('0x55'),[][_0x19b7('0x56')](_0x4303b1[_0x19b7('0x31')][_0x97198b]));}else{_0x15b564[_0x19b7('0x41')]('c.'+_0x97198b+_0x19b7('0x4d'),_0x4303b1[_0x19b7('0x31')][_0x97198b]);}});}if(_0x4303b1['query']['filter']){var _0x34da2a=_0x4303b1[_0x19b7('0x31')]['filter'][_0x19b7('0x57')]('\x5c','\x5c\x5c')[_0x19b7('0x57')]('\x27\x27',_0x19b7('0x58'));if(qs[_0x19b7('0x59')](_0x34da2a)){_0x40e269['or'](_0x19b7('0x5a'),_0x34da2a+'%');_0x40e269['or'](_0x19b7('0x5b'),_0x34da2a+'%');_0x40e269['or'](_0x19b7('0x5c'),_0x34da2a+'%');_0x40e269['or'](_0x19b7('0x5d'),_0x34da2a+'%');}else if(qs['isEmail'](_0x34da2a)){_0x40e269['or'](_0x19b7('0x5e'),_0x34da2a+'%');}else{_0x40e269['or'](_0x19b7('0x5e'),_0x34da2a+'%');_0x40e269['or']('c.firstName\x20LIKE\x20?',_0x34da2a+'%');_0x40e269['or']('c.lastName\x20LIKE\x20?',_0x34da2a+'%');}}}_0x15b564[_0x19b7('0x41')](_0x40e269);if(_0x50c880[_0x19b7('0x37')]){_0x50c880[_0x19b7('0x37')]['forEach'](function(_0x2e9fc2){_0x15b564[_0x19b7('0x37')]('c.'+_0x2e9fc2[0x0],_0x2e9fc2[0x1]===_0x19b7('0x5f')?![]:!![]);});}_0x15b564[_0x19b7('0x60')]('c.id');var _0x509f26={'type':db[_0x19b7('0x61')]['QueryTypes'][_0x19b7('0x62')],'raw':!![]};var _0x1278ea=_0x15b564['clone']()[_0x19b7('0x3c')](_0x19b7('0x63'));if(!_0x4303b1['query'][_0x19b7('0x43')]){if(_0x4303b1[_0x19b7('0x31')]['tag']){var _0x447721=_[_0x19b7('0x47')](_0x4303b1[_0x19b7('0x31')]['tag'])?_0x4303b1[_0x19b7('0x31')][_0x19b7('0x64')]:new Array(_0x4303b1[_0x19b7('0x31')][_0x19b7('0x64')]);var _0xe328da=squel[_0x19b7('0x65')]();_0x447721['forEach'](function(_0x2025f1){_0xe328da['or'](_0x19b7('0x66'),'%,'+_0x2025f1+',%');});_0x15b564[_0x19b7('0x67')](_0xe328da);_0x1278ea[_0x19b7('0x68')](_0x19b7('0x69'),'ct',_0x19b7('0x6a'));_0x1278ea[_0x19b7('0x68')](_0x19b7('0x3f'),'t',_0x19b7('0x6b'));_0x1278ea['where'](_0x19b7('0x6c'),_0x447721);}}db[_0x19b7('0x6d')][_0x19b7('0x31')](_0x18af98['toString'](),_0x509f26)['then'](function(_0x291ea7){_0x406f00=_[_0x19b7('0x6e')](_0x291ea7,'id');return db['sequelize'][_0x19b7('0x31')](_0x1278ea[_0x19b7('0x6f')](),_0x509f26);})['then'](function(_0x1dbf95){_0x242ef0[_0x19b7('0x1f')]=_0x1dbf95[_0x19b7('0x49')];_0x509f26=_[_0x19b7('0x70')](_0x509f26,{'model':db[_0x19b7('0x2d')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x15b564['field'](_0x19b7('0x71'));_0x15b564[_0x19b7('0x3c')](_0x19b7('0x72'),_0x19b7('0x73'));_0x15b564[_0x19b7('0x68')]('cm_contact_has_tags','ct','ct.CmContactId\x20=\x20c.id');_0x15b564[_0x19b7('0x68')](_0x19b7('0x3f'),'t',_0x19b7('0x6b'));if(_0x50c880[_0x19b7('0x21')]){_0x15b564[_0x19b7('0x21')](_0x50c880[_0x19b7('0x21')]);}if(_0x50c880[_0x19b7('0x20')]){_0x15b564[_0x19b7('0x20')](_0x50c880[_0x19b7('0x20')]);}db['sequelize'][_0x19b7('0x31')](_0x15b564[_0x19b7('0x6f')](),_0x509f26)[_0x19b7('0x27')](function(_0xa0d2ed){_0xa0d2ed[_0x19b7('0x45')](function(_0x1be9e6){if(_0x1be9e6['TagIds']){_0x1be9e6[_0x19b7('0x74')]=[];_0x1be9e6['TagIds'][_0x19b7('0x75')](',')['forEach'](function(_0x3be0a6){_0x1be9e6['Tags'][_0x19b7('0x76')](_0x406f00[_0x3be0a6]);});}delete _0x1be9e6['TagIds'];});_0x242ef0['rows']=_0xa0d2ed;return _0x242ef0;})['then'](respondWithFilteredResult(_0x32cae6,_0x50c880))[_0x19b7('0x77')](handleError(_0x32cae6,null));});});};exports[_0x19b7('0x28')]=function(_0x5288c0,_0x550b0b){return db[_0x19b7('0x2d')][_0x19b7('0x78')]({'where':{'id':_0x5288c0['params']['id']}})['then'](handleEntityNotFound(_0x550b0b,null))[_0x19b7('0x27')](removeEntity(_0x550b0b,null))[_0x19b7('0x77')](handleError(_0x550b0b,null));};exports[_0x19b7('0x2e')]=function(_0x222a0e,_0x70fefe){return db[_0x19b7('0x2d')][_0x19b7('0x2e')]()[_0x19b7('0x27')](function(_0x4fce39){for(var _0x5c54e9=0x0;_0x5c54e9<Object[_0x19b7('0x30')](_0x4fce39)['length'];_0x5c54e9++){var _0x38d7aa=Object[_0x19b7('0x30')](_0x4fce39)[_0x5c54e9];if(!_['startsWith'](_0x38d7aa,_0x19b7('0x79'))){_0x4fce39[_0x38d7aa]['columnName']=_0x38d7aa;_0x4fce39[_0x38d7aa]['displayName']=_0x38d7aa;}}return _0x4fce39;})[_0x19b7('0x27')](function(_0x507c54){var _0x338855={'where':{'$or':[{'ListId':_0x222a0e[_0x19b7('0x31')]['id']},{'ListId':null}]},'raw':!![]};return db[_0x19b7('0x7a')][_0x19b7('0x7b')](_0x338855)['then'](function(_0x2cb3ac){for(var _0x2629be=0x0;_0x2629be<_0x2cb3ac[_0x19b7('0x49')];_0x2629be++){var _0x2d3686=_0x19b7('0x79')+_0x2cb3ac[_0x2629be]['id'];_0x507c54[_0x2d3686][_0x19b7('0x7c')]=_0x2d3686;_0x507c54[_0x2d3686][_0x19b7('0x7d')]=_0x2cb3ac[_0x2629be][_0x19b7('0x7e')];_0x507c54[_0x2d3686][_0x19b7('0x7f')]={'type':_0x2cb3ac[_0x2629be][_0x19b7('0x80')],'values':_0x2cb3ac[_0x2629be]['values']};}Object['keys'](_0x507c54)[_0x19b7('0x45')](function(_0x517370){if(!_0x507c54[_0x517370][_0x19b7('0x35')]('columnName')){delete _0x507c54[_0x517370];}});return _0x507c54;});})[_0x19b7('0x27')](respondWithResult(_0x70fefe,null))[_0x19b7('0x77')](handleError(_0x70fefe,null));};exports[_0x19b7('0x70')]=function(_0x28a710,_0x3fca1f){var _0x34d8d3;var _0x5746a2;var _0x547519;if(_0x28a710['body']['id']){delete _0x28a710[_0x19b7('0x81')]['id'];}return db[_0x19b7('0x2d')][_0x19b7('0x7b')]({'where':{'id':[_0x28a710[_0x19b7('0x81')]['to'],_0x28a710[_0x19b7('0x81')][_0x19b7('0x3e')]]}})[_0x19b7('0x27')](function(_0x5d7581){if(_0x5d7581){if(_0x5d7581[_0x19b7('0x49')]!==0x2){return null;}_0x5d7581[0x0]=_0x5d7581[0x0][_0x19b7('0x82')]({'plain':!![]});_0x5d7581[0x1]=_0x5d7581[0x1][_0x19b7('0x82')]({'plain':!![]});delete _0x5d7581[0x0]['id'];delete _0x5d7581[0x1]['id'];return _[_0x19b7('0x83')](_0x5d7581[0x0],_0x5d7581[0x1],function(_0x350681,_0x152d55){if(Array[_0x19b7('0x47')](_0x152d55)&&!_0x152d55[_0x19b7('0x49')]){return _0x350681;}else if(!_0x152d55){return _0x350681;}});}})[_0x19b7('0x27')](handleEntityNotFound(_0x3fca1f,null))[_0x19b7('0x27')](function(_0x3f0162){if(_0x3f0162){if(_0x3f0162['tags']&&_[_0x19b7('0x47')](_0x3f0162[_0x19b7('0x84')])){_0x3f0162['tags']=_0x3f0162[_0x19b7('0x84')][_0x19b7('0x85')]();}logger[_0x19b7('0x86')](_0x19b7('0x87'),_0x28a710['body']['to'],_0x28a710['body'][_0x19b7('0x3e')]);return db[_0x19b7('0x88')]['destroy']({'where':{'ContactId':[_0x28a710[_0x19b7('0x81')]['to'],_0x28a710[_0x19b7('0x81')]['from']]}})['then'](function(_0x4d02c0){logger['info']('[CmContact][merge][destroy][CmHopper],\x20%s',_0x4d02c0);return db[_0x19b7('0x89')]['destroy']({'where':{'ContactId':[_0x28a710['body']['to'],_0x28a710['body']['from']]}})[_0x19b7('0x27')](function(_0x383de1){logger['info'](_0x19b7('0x8a'),_0x383de1);return db[_0x19b7('0x2d')]['create'](_0x3f0162);});});}})['then'](function(_0xa6510c){if(_0xa6510c){_0x34d8d3=_0xa6510c;_0x5746a2={'ContactId':_0x34d8d3['id']};_0x547519={'where':{'ContactId':[_0x28a710['body']['to'],_0x28a710[_0x19b7('0x81')][_0x19b7('0x3e')]]}};return db[_0x19b7('0x8b')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x8c')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x8d')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x8e')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x8f')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db['MailInteraction'][_0x19b7('0x26')](_0x5746a2,_0x547519);}})['then'](function(){if(_0x34d8d3){return db[_0x19b7('0x8f')]['update'](_0x5746a2,_0x547519);}})['then'](function(){if(_0x34d8d3){return db[_0x19b7('0x90')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db['SmsMessage'][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x91')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x92')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x93')]['update'](_0x5746a2,_0x547519);}})['then'](function(){if(_0x34d8d3){return db[_0x19b7('0x94')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x95')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x96')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x97')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})['then'](function(){if(_0x34d8d3){return db[_0x19b7('0x98')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x99')]['update'](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x9a')]['update'](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x9b')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})['then'](function(){if(_0x34d8d3){return db[_0x19b7('0x9c')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x9d')]['update'](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x9e')][_0x19b7('0x26')](_0x5746a2,_0x547519);}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return db[_0x19b7('0x2d')][_0x19b7('0x28')]({'where':{'id':[_0x28a710['body']['to'],_0x28a710[_0x19b7('0x81')][_0x19b7('0x3e')]]}});}})[_0x19b7('0x27')](function(){if(_0x34d8d3){return _0x34d8d3;}})[_0x19b7('0x27')](respondWithResult(_0x3fca1f,null))['catch'](handleError(_0x3fca1f,null));};exports[_0x19b7('0x9f')]=function(_0x50ba32,_0x27e40c){return db[_0x19b7('0x2d')][_0x19b7('0x2e')]()[_0x19b7('0x27')](function(_0x396eb2){if(_0x50ba32[_0x19b7('0x81')][_0x19b7('0x84')]&&_[_0x19b7('0x47')](_0x50ba32[_0x19b7('0x81')]['tags'])){if(_0x50ba32[_0x19b7('0x81')][_0x19b7('0x84')][_0x19b7('0x49')]){_0x50ba32[_0x19b7('0x81')][_0x19b7('0x84')]=_0x50ba32['body'][_0x19b7('0x84')][_0x19b7('0x85')](';')+';';}else{_0x50ba32[_0x19b7('0x81')][_0x19b7('0x84')]=null;}}else{_0x50ba32[_0x19b7('0x81')][_0x19b7('0x84')]=null;}return db[_0x19b7('0x2d')]['create'](_0x50ba32['body'],{'fields':_[_0x19b7('0x30')](_0x396eb2),'raw':!![]});})['then'](respondWithResult(_0x27e40c,0xc9))['catch'](handleError(_0x27e40c,null));};exports[_0x19b7('0xa0')]=function(_0x845a98,_0x4afae0){var _0x45065d=[];var _0x1c4063=0x0;var _0x216c18=0x0;var _0x269db0=0x0;return db[_0x19b7('0x2d')][_0x19b7('0x2e')]()[_0x19b7('0x27')](function(_0x8ea15b){return BPromise['each'](_0x845a98[_0x19b7('0x81')],function(_0x37156a){var _0x3f5d5e={'where':{'$or':[]},'defaults':_0x37156a,'fields':_['keys'](_0x8ea15b),'raw':!![]};if(_0x37156a['duplicates']){for(var _0x14015f=0x0;_0x14015f<_0x37156a[_0x19b7('0xa1')][_0x19b7('0x49')];_0x14015f++){var _0x37c5bd={};_0x37c5bd[_0x37156a[_0x19b7('0xa1')][_0x14015f]]=_0x37156a[_0x37156a[_0x19b7('0xa1')][_0x14015f]];_0x3f5d5e[_0x19b7('0x41')][_0x19b7('0xa2')][_0x19b7('0x76')](_0x37c5bd);}_0x3f5d5e['where'][_0x19b7('0x54')]=_0x37156a[_0x19b7('0x54')];}return db[_0x19b7('0x2d')][_0x19b7('0xa3')](_0x3f5d5e)['spread'](function(_0x350e6c,_0x32bb1b){if(_0x32bb1b){_0x1c4063++;}else{_0x269db0++;}})[_0x19b7('0x77')](function(_0x32c38c){console[_0x19b7('0xa4')](_0x32c38c);_0x216c18++;});});})[_0x19b7('0x27')](function(_0x5e9ea5){if(_0x5e9ea5){return{'success':_0x1c4063,'failure':_0x216c18,'duplicates':_0x269db0};}})['then'](respondWithResult(_0x4afae0,0xc9))[_0x19b7('0x77')](handleError(_0x4afae0,null));};exports[_0x19b7('0xa5')]=function(_0x308146,_0xa1dad9,_0x9cbffc){var _0x2b52e4;return db[_0x19b7('0x2d')][_0x19b7('0x2e')]()[_0x19b7('0x27')](function(_0x185de2){return db[_0x19b7('0x2d')][_0x19b7('0x78')]({'where':{'id':_0x308146[_0x19b7('0xa6')]['id']},'include':[{'model':db[_0x19b7('0xa7')],'as':_0x19b7('0x74'),'attributes':['id',_0x19b7('0x2a'),_0x19b7('0x3d')],'required':_0x308146['query'][_0x19b7('0x64')]?!![]:![]}],'attributes':_['keys'](_0x185de2)});})['then'](function(_0x46caf6){_0x2b52e4=_0x46caf6[_0x19b7('0x82')]({'plain':!![]});var _0x42db59={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x46caf6&&_0x46caf6['ListId']){if(_0x46caf6[_0x19b7('0x54')]){_0x42db59[_0x19b7('0x41')][_0x19b7('0xa8')][_0x19b7('0x76')]({'ListId':{'$ne':_0x46caf6[_0x19b7('0x54')]}});}}return db[_0x19b7('0x7a')][_0x19b7('0x7b')](_0x42db59);})['then'](function(_0x2cd33e){return _['omit'](_0x2b52e4,_[_0x19b7('0xa9')](_0x2cd33e,function(_0x2fffb2){return util[_0x19b7('0xaa')]('cf_%d',_0x2fffb2['id']);}));})[_0x19b7('0x27')](handleEntityNotFound(_0xa1dad9,null))[_0x19b7('0x27')](respondWithResult(_0xa1dad9,null))[_0x19b7('0x77')](handleError(_0xa1dad9,null));};exports['update']=function(_0x469e7e,_0x27e345){var _0x5cf223;if(_0x469e7e['body']['id']){delete _0x469e7e[_0x19b7('0x81')]['id'];}return db[_0x19b7('0x2d')]['find']({'where':{'id':_0x469e7e['params']['id']}})[_0x19b7('0x27')](handleEntityNotFound(_0x27e345,null))['then'](saveUpdates(_0x469e7e['body'],null))[_0x19b7('0x27')](function(_0x3c7936){_0x5cf223=_0x3c7936;var _0x30665f={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x3c7936&&_0x3c7936[_0x19b7('0x54')]){if(_0x3c7936['ListId']){_0x30665f['where'][_0x19b7('0xa8')]['push']({'ListId':{'$ne':_0x3c7936[_0x19b7('0x54')]}});}}return db[_0x19b7('0x7a')][_0x19b7('0x7b')](_0x30665f);})[_0x19b7('0x27')](function(_0xfd8318){if(_0xfd8318){return _[_0x19b7('0xab')](_[_0x19b7('0xac')](_0x469e7e['body'],function(_0x84e9ee,_0x2ba33b){return _[_0x19b7('0xad')](_0x2ba33b,'cf_');}),_[_0x19b7('0xa9')](_0xfd8318,function(_0x12a459){return util[_0x19b7('0xaa')](_0x19b7('0xae'),_0x12a459['id']);}));}})['then'](function(_0x54e335){if(_0x54e335&&!_['isEmpty'](_0x54e335)){var _0x14c220=squel[_0x19b7('0x26')]()[_0x19b7('0xaf')](_0x19b7('0x40'))[_0x19b7('0xb0')](_0x54e335)[_0x19b7('0x41')](_0x19b7('0xb1'),_0x469e7e[_0x19b7('0xa6')]['id'])[_0x19b7('0xb2')]();return db[_0x19b7('0x6d')]['query'](_0x14c220[_0x19b7('0xb3')],{'replacements':_0x14c220[_0x19b7('0xb4')]});}})['then'](function(){if(_0x469e7e[_0x19b7('0x81')][_0x19b7('0xb5')]&&_0x5cf223){return db[_0x19b7('0x88')][_0x19b7('0x26')]({'phone':_0x469e7e[_0x19b7('0x81')][_0x19b7('0xb5')]},{'where':{'ContactId':_0x5cf223['id']}});}})[_0x19b7('0x27')](function(){return _0x5cf223;})[_0x19b7('0x27')](respondWithResult(_0x27e345,null))[_0x19b7('0x77')](handleError(_0x27e345,null));};exports['getTags']=function(_0x1eaa05,_0x3c30f0,_0xdb338e){var _0x40bd43={};var _0x23b66e={};var _0x572e18;var _0xf21646;return db[_0x19b7('0x2d')][_0x19b7('0xb6')]({'where':{'id':_0x1eaa05[_0x19b7('0xa6')]['id']}})['then'](handleEntityNotFound(_0x3c30f0,null))[_0x19b7('0x27')](function(_0x3ccd07){if(_0x3ccd07){_0x572e18=_0x3ccd07;_0x23b66e['model']=_[_0x19b7('0x30')](db[_0x19b7('0xa7')][_0x19b7('0xb7')]);_0x23b66e[_0x19b7('0x31')]=_['keys'](_0x1eaa05[_0x19b7('0x31')]);_0x23b66e[_0x19b7('0x3a')]=_[_0x19b7('0x32')](_0x23b66e['model'],_0x23b66e['query']);_0x40bd43['attributes']=_[_0x19b7('0x32')](_0x23b66e[_0x19b7('0x2f')],qs['fields'](_0x1eaa05['query'][_0x19b7('0x34')]));_0x40bd43[_0x19b7('0x33')]=_0x40bd43[_0x19b7('0x33')][_0x19b7('0x49')]?_0x40bd43[_0x19b7('0x33')]:_0x23b66e['model'];_0x40bd43[_0x19b7('0x37')]=qs['sort'](_0x1eaa05[_0x19b7('0x31')][_0x19b7('0x38')]);_0x40bd43['where']=qs[_0x19b7('0x3a')](_[_0x19b7('0x39')](_0x1eaa05[_0x19b7('0x31')],_0x23b66e[_0x19b7('0x3a')]));if(_0x1eaa05[_0x19b7('0x31')][_0x19b7('0x51')]){_0x40bd43[_0x19b7('0x41')]=_[_0x19b7('0x70')](_0x40bd43['where'],{'$or':_['map'](_0x40bd43['attributes'],function(_0x1364d2){var _0x2a5265={};_0x2a5265[_0x1364d2]={'$like':'%'+_0x1eaa05[_0x19b7('0x31')][_0x19b7('0x51')]+'%'};return _0x2a5265;})});}_0x40bd43=_[_0x19b7('0x70')]({},_0x40bd43,_0x1eaa05[_0x19b7('0xb8')]);return _0x572e18[_0x19b7('0xb9')](_0x40bd43);}})['then'](function(_0x2ab804){if(_0x2ab804){_0xf21646=_0x2ab804[_0x19b7('0x49')];if(!_0x1eaa05['query'][_0x19b7('0x35')](_0x19b7('0x36'))){_0x40bd43[_0x19b7('0x21')]=qs[_0x19b7('0x21')](_0x1eaa05[_0x19b7('0x31')][_0x19b7('0x21')]);_0x40bd43['offset']=qs[_0x19b7('0x20')](_0x1eaa05[_0x19b7('0x31')][_0x19b7('0x20')]);}return _0x572e18[_0x19b7('0xb9')](_0x40bd43);}})[_0x19b7('0x27')](function(_0x40efd3){if(_0x40efd3){return _0x40efd3?{'count':_0xf21646,'rows':_0x40efd3}:null;}})['then'](respondWithResult(_0x3c30f0,null))[_0x19b7('0x77')](handleError(_0x3c30f0,null));};exports[_0x19b7('0xba')]=function(_0x445f22,_0x1226fb,_0x23466d){if(_0x445f22[_0x19b7('0x81')]['id']){delete _0x445f22['body']['id'];}return db[_0x19b7('0x2d')][_0x19b7('0xb6')]({'where':{'id':_0x445f22[_0x19b7('0xa6')]['id']}})[_0x19b7('0x27')](handleEntityNotFound(_0x1226fb,null))[_0x19b7('0x27')](function(_0x5a14ae){if(_0x5a14ae){return _0x5a14ae['setTags'](_0x445f22[_0x19b7('0x81')][_0x19b7('0xbb')]||[]);}return null;})['then'](respondWithResult(_0x1226fb,null))[_0x19b7('0x77')](handleError(_0x1226fb,null));};exports[_0x19b7('0xbc')]=function(_0x257c1c,_0x54a1ab,_0xc3b59){var _0x4089e5={'raw':![],'where':{}};var _0x318847={};var _0x44d15f={'count':0x0,'rows':[]};return db[_0x19b7('0x2d')][_0x19b7('0xb6')]({'where':{'id':_0x257c1c['params']['id']}})[_0x19b7('0x27')](handleEntityNotFound(_0x54a1ab,null))[_0x19b7('0x27')](function(_0x138474){if(_0x138474){_0x318847[_0x19b7('0x2f')]=_['keys'](db[_0x19b7('0x88')][_0x19b7('0xb7')]);_0x318847[_0x19b7('0x31')]=_['keys'](_0x257c1c[_0x19b7('0x31')]);_0x318847['filters']=_['intersection'](_0x318847[_0x19b7('0x2f')],_0x318847['query']);_0x4089e5[_0x19b7('0x33')]=_[_0x19b7('0x32')](_0x318847['model'],qs[_0x19b7('0x34')](_0x257c1c['query']['fields']));_0x4089e5[_0x19b7('0x33')]=_0x4089e5[_0x19b7('0x33')]['length']?_0x4089e5[_0x19b7('0x33')]:_0x318847[_0x19b7('0x2f')];if(!_0x257c1c['query']['hasOwnProperty']('nolimit')){_0x4089e5['limit']=qs['limit'](_0x257c1c[_0x19b7('0x31')][_0x19b7('0x21')]);_0x4089e5[_0x19b7('0x20')]=qs[_0x19b7('0x20')](_0x257c1c[_0x19b7('0x31')][_0x19b7('0x20')]);}_0x4089e5[_0x19b7('0x37')]=qs[_0x19b7('0x38')](_0x257c1c[_0x19b7('0x31')][_0x19b7('0x38')]);_0x4089e5[_0x19b7('0x41')]=qs['filters'](_[_0x19b7('0x39')](_0x257c1c[_0x19b7('0x31')],_0x318847[_0x19b7('0x3a')]));_0x4089e5[_0x19b7('0x41')][_0x19b7('0xbd')]=_0x138474['id'];if(_0x257c1c[_0x19b7('0x31')][_0x19b7('0x51')]){_0x4089e5['where']=_[_0x19b7('0x70')](_0x4089e5['where'],{'$or':_[_0x19b7('0xa9')](_0x4089e5['attributes'],function(_0x3e140a){var _0x39723b={};_0x39723b[_0x3e140a]={'$like':'%'+_0x257c1c['query']['filter']+'%'};return _0x39723b;})});}_0x4089e5=_[_0x19b7('0x70')]({},_0x4089e5,_0x257c1c[_0x19b7('0xb8')]);return db['CmHopper'][_0x19b7('0x1f')]({'where':_0x4089e5['where']})[_0x19b7('0x27')](function(_0x358417){_0x44d15f['count']=_0x358417;if(_0x257c1c['query'][_0x19b7('0xbe')]){_0x4089e5['include']=[{'all':!![]}];}return db['CmHopper'][_0x19b7('0x7b')](_0x4089e5);})['then'](function(_0x239fa6){_0x44d15f[_0x19b7('0xbf')]=_0x239fa6;return _0x44d15f;});}})['then'](respondWithFilteredResult(_0x54a1ab,_0x4089e5))['catch'](handleError(_0x54a1ab,null));};exports[_0x19b7('0xc0')]=function(_0x3a2c5a,_0x362d79,_0x2cc7b7){var _0x5e2540={'raw':!![],'where':{}};var _0xcb6562={};var _0x2175f7={'count':0x0,'rows':[]};return db[_0x19b7('0x2d')][_0x19b7('0xb6')]({'where':{'id':_0x3a2c5a[_0x19b7('0xa6')]['id']}})[_0x19b7('0x27')](handleEntityNotFound(_0x362d79,null))[_0x19b7('0x27')](function(_0x547d52){if(_0x547d52){_0xcb6562[_0x19b7('0x2f')]=_[_0x19b7('0x30')](db[_0x19b7('0x96')][_0x19b7('0xb7')]);_0xcb6562[_0x19b7('0x31')]=_[_0x19b7('0x30')](_0x3a2c5a[_0x19b7('0x31')]);_0xcb6562[_0x19b7('0x3a')]=_[_0x19b7('0x32')](_0xcb6562[_0x19b7('0x2f')],_0xcb6562['query']);_0x5e2540['attributes']=_[_0x19b7('0x32')](_0xcb6562['model'],qs['fields'](_0x3a2c5a[_0x19b7('0x31')][_0x19b7('0x34')]));_0x5e2540[_0x19b7('0x33')]=_0x5e2540['attributes'][_0x19b7('0x49')]?_0x5e2540['attributes']:_0xcb6562[_0x19b7('0x2f')];if(!_0x3a2c5a[_0x19b7('0x31')][_0x19b7('0x35')](_0x19b7('0x36'))){_0x5e2540['limit']=qs[_0x19b7('0x21')](_0x3a2c5a[_0x19b7('0x31')][_0x19b7('0x21')]);_0x5e2540[_0x19b7('0x20')]=qs[_0x19b7('0x20')](_0x3a2c5a['query'][_0x19b7('0x20')]);}_0x5e2540['order']=qs[_0x19b7('0x38')](_0x3a2c5a[_0x19b7('0x31')]['sort']);_0x5e2540[_0x19b7('0x41')]=qs['filters'](_[_0x19b7('0x39')](_0x3a2c5a[_0x19b7('0x31')],_0xcb6562[_0x19b7('0x3a')]));_0x5e2540['where'][_0x19b7('0xbd')]=_0x547d52['id'];if(_0x3a2c5a[_0x19b7('0x31')][_0x19b7('0x51')]){_0x5e2540['where']=_['merge'](_0x5e2540[_0x19b7('0x41')],{'$or':_[_0x19b7('0xa9')](_0x5e2540['attributes'],function(_0x1bb574){var _0x2384e2={};_0x2384e2[_0x1bb574]={'$like':'%'+_0x3a2c5a[_0x19b7('0x31')][_0x19b7('0x51')]+'%'};return _0x2384e2;})});}_0x5e2540=_[_0x19b7('0x70')]({},_0x5e2540,_0x3a2c5a[_0x19b7('0xb8')]);return db['CmHopperHistory'][_0x19b7('0x1f')]({'where':_0x5e2540['where']})[_0x19b7('0x27')](function(_0x1a1acf){_0x2175f7[_0x19b7('0x1f')]=_0x1a1acf;if(_0x3a2c5a[_0x19b7('0x31')][_0x19b7('0xbe')]){_0x5e2540[_0x19b7('0xc1')]=[{'all':!![]}];}return db[_0x19b7('0x96')][_0x19b7('0x7b')](_0x5e2540);})[_0x19b7('0x27')](function(_0x24a34e){_0x2175f7['rows']=_0x24a34e;return _0x2175f7;});}})['then'](respondWithFilteredResult(_0x362d79,_0x5e2540))[_0x19b7('0x77')](handleError(_0x362d79,null));};exports[_0x19b7('0xc2')]=function(_0x268e7a,_0x48a994,_0x2f733c){var _0x10bffb={'raw':!![],'where':{}};var _0x702cf4={};var _0x1c3155={'count':0x0,'rows':[]};return db[_0x19b7('0x2d')]['findOne']({'where':{'id':_0x268e7a[_0x19b7('0xa6')]['id']}})[_0x19b7('0x27')](handleEntityNotFound(_0x48a994,null))[_0x19b7('0x27')](function(_0x5b1516){if(_0x5b1516){_0x702cf4[_0x19b7('0x2f')]=_[_0x19b7('0x30')](db[_0x19b7('0x95')][_0x19b7('0xb7')]);_0x702cf4['query']=_['keys'](_0x268e7a[_0x19b7('0x31')]);_0x702cf4[_0x19b7('0x3a')]=_[_0x19b7('0x32')](_0x702cf4[_0x19b7('0x2f')],_0x702cf4['query']);_0x10bffb[_0x19b7('0x33')]=_[_0x19b7('0x32')](_0x702cf4[_0x19b7('0x2f')],qs[_0x19b7('0x34')](_0x268e7a[_0x19b7('0x31')]['fields']));_0x10bffb['attributes']=_0x10bffb[_0x19b7('0x33')]['length']?_0x10bffb['attributes']:_0x702cf4['model'];if(!_0x268e7a[_0x19b7('0x31')][_0x19b7('0x35')](_0x19b7('0x36'))){_0x10bffb[_0x19b7('0x21')]=qs[_0x19b7('0x21')](_0x268e7a['query'][_0x19b7('0x21')]);_0x10bffb[_0x19b7('0x20')]=qs['offset'](_0x268e7a['query'][_0x19b7('0x20')]);}_0x10bffb[_0x19b7('0x37')]=qs[_0x19b7('0x38')](_0x268e7a[_0x19b7('0x31')][_0x19b7('0x38')]);_0x10bffb['where']=qs[_0x19b7('0x3a')](_[_0x19b7('0x39')](_0x268e7a[_0x19b7('0x31')],_0x702cf4[_0x19b7('0x3a')]));_0x10bffb[_0x19b7('0x41')]['ContactId']=_0x5b1516['id'];if(_0x268e7a[_0x19b7('0x31')]['filter']){_0x10bffb['where']=_[_0x19b7('0x70')](_0x10bffb[_0x19b7('0x41')],{'$or':_[_0x19b7('0xa9')](_0x10bffb['attributes'],function(_0x3cd058){var _0x3205fc={};_0x3205fc[_0x3cd058]={'$like':'%'+_0x268e7a[_0x19b7('0x31')][_0x19b7('0x51')]+'%'};return _0x3205fc;})});}_0x10bffb=_[_0x19b7('0x70')]({},_0x10bffb,_0x268e7a['options']);return db[_0x19b7('0x95')][_0x19b7('0x1f')]({'where':_0x10bffb[_0x19b7('0x41')]})[_0x19b7('0x27')](function(_0x16a31c){_0x1c3155[_0x19b7('0x1f')]=_0x16a31c;if(_0x268e7a[_0x19b7('0x31')][_0x19b7('0xbe')]){_0x10bffb['include']=[{'all':!![]}];}return db['CmHopperFinal'][_0x19b7('0x7b')](_0x10bffb);})['then'](function(_0x18a640){_0x1c3155[_0x19b7('0xbf')]=_0x18a640;return _0x1c3155;});}})['then'](respondWithFilteredResult(_0x48a994,_0x10bffb))[_0x19b7('0x77')](handleError(_0x48a994,null));};exports['getJscriptySessions']=function(_0x496a14,_0x1e0755,_0x5a395a){var _0x4d6af7={'raw':!![],'where':{}};var _0x552123={};var _0x120f19={'count':0x0,'rows':[]};return db[_0x19b7('0x2d')][_0x19b7('0xb6')]({'where':{'id':_0x496a14[_0x19b7('0xa6')]['id']}})['then'](handleEntityNotFound(_0x1e0755,null))[_0x19b7('0x27')](function(_0x27022f){if(_0x27022f){_0x552123[_0x19b7('0x2f')]=_[_0x19b7('0x30')](db[_0x19b7('0x9e')][_0x19b7('0xb7')]);_0x552123[_0x19b7('0x31')]=_[_0x19b7('0x30')](_0x496a14['query']);_0x552123[_0x19b7('0x3a')]=_[_0x19b7('0x32')](_0x552123['model'],_0x552123[_0x19b7('0x31')]);_0x4d6af7['attributes']=_['intersection'](_0x552123[_0x19b7('0x2f')],qs[_0x19b7('0x34')](_0x496a14[_0x19b7('0x31')][_0x19b7('0x34')]));_0x4d6af7[_0x19b7('0x33')]=_0x4d6af7[_0x19b7('0x33')][_0x19b7('0x49')]?_0x4d6af7['attributes']:_0x552123['model'];if(!_0x496a14[_0x19b7('0x31')]['hasOwnProperty'](_0x19b7('0x36'))){_0x4d6af7['limit']=qs[_0x19b7('0x21')](_0x496a14['query'][_0x19b7('0x21')]);_0x4d6af7[_0x19b7('0x20')]=qs[_0x19b7('0x20')](_0x496a14[_0x19b7('0x31')][_0x19b7('0x20')]);}_0x4d6af7[_0x19b7('0x37')]=qs[_0x19b7('0x38')](_0x496a14[_0x19b7('0x31')][_0x19b7('0x38')]);_0x4d6af7[_0x19b7('0x41')]=qs['filters'](_[_0x19b7('0x39')](_0x496a14[_0x19b7('0x31')],_0x552123['filters']));_0x4d6af7[_0x19b7('0x41')][_0x19b7('0xbd')]=_0x27022f['id'];if(_0x496a14['query'][_0x19b7('0x51')]){_0x4d6af7[_0x19b7('0x41')]=_[_0x19b7('0x70')](_0x4d6af7[_0x19b7('0x41')],{'$or':_[_0x19b7('0xa9')](_0x4d6af7['attributes'],function(_0x47c376){var _0x411d9f={};_0x411d9f[_0x47c376]={'$like':'%'+_0x496a14[_0x19b7('0x31')][_0x19b7('0x51')]+'%'};return _0x411d9f;})});}_0x4d6af7=_['merge']({},_0x4d6af7,_0x496a14[_0x19b7('0xb8')]);return db[_0x19b7('0x9e')][_0x19b7('0x1f')]({'where':_0x4d6af7[_0x19b7('0x41')]})[_0x19b7('0x27')](function(_0xa235e){_0x120f19[_0x19b7('0x1f')]=_0xa235e;if(_0x496a14['query'][_0x19b7('0xbe')]){_0x4d6af7[_0x19b7('0xc1')]=[{'all':!![]}];}return db[_0x19b7('0x9e')]['findAll'](_0x4d6af7);})[_0x19b7('0x27')](function(_0x4c7b9c){_0x120f19[_0x19b7('0xbf')]=_0x4c7b9c;return _0x120f19;});}})[_0x19b7('0x27')](respondWithFilteredResult(_0x1e0755,_0x4d6af7))[_0x19b7('0x77')](handleError(_0x1e0755,null));};exports[_0x19b7('0xc3')]=function(_0x5537d0,_0x2a6f2e,_0x49512b){try{if(!_0x5537d0[_0x19b7('0x81')]['ListId']){throw new Error(_0x19b7('0xc4'));}if(!_0x5537d0['body']['binding_keys']){throw new Error(_0x19b7('0xc5'));}if(!_0x5537d0[_0x19b7('0x81')]['binding_values']){throw new Error(_0x19b7('0xc6'));}if(!_0x5537d0[_0x19b7('0x81')][_0x19b7('0xc7')]){throw new Error(_0x19b7('0xc8'));}var _0x1825d9=_0x5537d0[_0x19b7('0x81')]['binding_keys'][_0x19b7('0x75')](',');var _0x17fcc3=_0x5537d0[_0x19b7('0x81')][_0x19b7('0xc9')][_0x19b7('0x75')](',');if(!_0x1825d9['length']||!_0x17fcc3['length']||_0x1825d9[_0x19b7('0x49')]!==_0x17fcc3[_0x19b7('0x49')]){throw new Error('Incorrect\x20binding\x20parameters\x20passed!');}_0x5537d0[_0x19b7('0x81')][_0x19b7('0x34')]=_[_0x19b7('0xca')](_0x1825d9,_0x17fcc3);if(!_0x5537d0[_0x19b7('0x81')][_0x19b7('0x34')][_0x19b7('0xb5')]){throw new Error(_0x19b7('0xcb'));}if(!_0x5537d0['body'][_0x19b7('0x34')][_0x19b7('0xcc')]){throw new Error(_0x19b7('0xcd'));}var _0x1e3ba3=path[_0x19b7('0x85')](config[_0x19b7('0xce')],_0x19b7('0xcf'),_0x5537d0[_0x19b7('0xd0')]['filename']);fs[_0x19b7('0xd1')](_0x1e3ba3,parseInt(_0x19b7('0xd2'),0x8));var _0x3a9d03=require(_0x19b7('0xd3'))['fork'](path[_0x19b7('0x85')](__dirname,_0x19b7('0xd4')),[_0x1e3ba3,_0x5537d0[_0x19b7('0x81')][_0x19b7('0xd5')],_0x5537d0[_0x19b7('0x81')][_0x19b7('0xc9')],_0x5537d0['body'][_0x19b7('0x54')],_0x5537d0[_0x19b7('0x81')]['CompanyId'],_0x5537d0['body'][_0x19b7('0xa1')],_0x5537d0[_0x19b7('0x81')][_0x19b7('0xc7')]]);return _0x2a6f2e['status'](0xc8)['json']({'message':_0x19b7('0xd6'),'pid':_0x3a9d03['pid']});}catch(_0x5cd109){return _0x2a6f2e[_0x19b7('0x1d')](0x1f4)[_0x19b7('0x2b')](_0x5cd109);}};exports['upload']=function(_0xf43aa7,_0x2826db,_0x415527){var _0x1b27ba=fs['createReadStream'](_0xf43aa7['file'][_0x19b7('0x9')]);Papa[_0x19b7('0x44')](_0x1b27ba,{'header':!![],'skipEmptyLines':!![],'preview':0x1,'complete':function(_0xd06858){return _0x2826db[_0x19b7('0x1d')](0xc8)[_0x19b7('0x1e')]({'file':_0xf43aa7[_0x19b7('0xd0')],'fields':_0xd06858[_0x19b7('0xd7')][_0x19b7('0x34')]});}});};exports[_0x19b7('0xd8')]=function(_0x19ca00,_0x246fb1,_0x206648){return db[_0x19b7('0xd9')]['findAll']({'raw':!![],'attributes':['id'],'where':{'role':_0x19b7('0xda')}})['then'](function(_0x59fd8f){var _0x5524e6=![];if(!_0x19ca00['body'][_0x19b7('0x54')]){throw new Error(_0x19b7('0xc4'));}if(!_0x19ca00[_0x19b7('0x81')]['binding']['phone']){throw new Error(_0x19b7('0xcb'));}if(!_0x19ca00[_0x19b7('0x81')][_0x19b7('0xdb')]['firstName']){throw new Error('No\x20firstName\x20column\x20specified');}if(!_0x19ca00[_0x19b7('0x81')][_0x19b7('0xc7')]){throw new Error('Unable\x20to\x20synchronize\x20socket,\x20no\x20timestamp\x20passed');}var _0x373101=require('child_process')[_0x19b7('0xdc')](path[_0x19b7('0x85')](__dirname,'../../components/import/cm/csv2'),[_0x19ca00[_0x19b7('0xa6')]['id'],JSON[_0x19b7('0xdd')](_0x19ca00[_0x19b7('0x81')]),JSON['stringify'](_0x59fd8f)]);_0x373101['on'](_0x19b7('0xde'),function(_0x3e7db1){_0x5524e6=!![];return _0x246fb1[_0x19b7('0x1d')](0xc8)[_0x19b7('0x1e')]({'message':_0x19b7('0xdf'),'pid':_0x373101[_0x19b7('0xe0')]});});_0x373101['on'](_0x19b7('0xe1'),function(_0x450105){if(_0x450105&&!_0x5524e6){return _0x246fb1[_0x19b7('0x1d')](0x1f4)[_0x19b7('0x1e')]({'message':_0x19b7('0xe2'),'pid':_0x373101['pid']});}});})['catch'](handleError(_0x246fb1,null));};
\ No newline at end of file
+var _0x7bc4=['MailInteraction','MailMessage','SmsMessage','FaxInteraction','OpenchannelInteraction','OpenchannelMessage','CmHopperFinal','CmHopperHistory','ChatQueueReport','FaxQueueReport','OpenchannelQueueReport','SmsQueueReport','JscriptySessionReport','bulkCreate','each','duplicates','$or','findOrCreate','error','show','$and','omit','format','startsWith','cf_%d','table','setFields','id\x20=\x20?','toParam','text','phone','getTags','rawAttributes','pick','setTags','ids','getHoppers','findOne','options','ContactId','includeAll','include','getJscriptySessions','uploadCsv','No\x20ListId\x20specified','binding_keys','No\x20association\x20keys\x20specified!','binding_values','No\x20association\x20values\x20specified!','socket_timestamp','Unable\x20to\x20synchronize\x20socket,\x20no\x20timestamp\x20passed','split','zipObject','No\x20phone\x20column\x20specified','firstName','No\x20firstName\x20column\x20specified','server/files/tmp','filename','chmodSync','0777','fork','../../components/import/cm/csv','CompanyId','File\x20uploaded\x20correctly!','upload','createReadStream','meta','User','agent','binding','child_process','../../components/import/cm/csv2','stringify','message','start\x20child\x20process\x20correctly!','error\x20child\x20process','pid','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','crypto','desk.js','querystring','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','redis','defaults','localhost','socket.io-emitter','./cmContact.socket','register','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','reject','save','update','then','stack','name','send','index','CmContact','model','query','keys','filters','intersection','attributes','fields','hasOwnProperty','nolimit','sort','select','field','color','from','tools_tags','c.deletedAt\x20IS\x20NULL','expr','parse','advancedFilter','forEach','condition','value','length','and','\x20IN\x20?','tableAlias','\x20=\x20?','\x20LIKE\x20?','\x20<\x20?','map','filter','isNil','ListId','where','c.ListId\x20IN\x20?','concat','replace','\x27\x27\x27\x27','isNumeric','c.id\x20LIKE\x20?','c.mobile\x20LIKE\x20?','c.fax\x20LIKE\x20?','c.email\x20LIKE\x20?','c.firstName\x20LIKE\x20?','c.lastName\x20LIKE\x20?','order','DESC','c.id','QueryTypes','clone','isArray','tag','left_join','cm_contact_has_tags','ct.CmContactId\x20=\x20c.id','t.id\x20=\x20ct.TagId','t.id\x20IN\x20?','sequelize','toString','keyBy','merge','GROUP_CONCAT(DISTINCT\x20t.id)','TagIds','Tags','push','rows','catch','destroy','find','params','describe','cf_','columnName','CmCustomField','findAll','displayName','alias','custom','values','body','get','mergeWith','tags','join','[CmContact][merge]\x20to\x20%s\x20from\x20%s','CmHopper','info','[CmContact][merge][destroy][CmHopper],\x20%s','CmHopperBlack','[CmContact][merge][destroy][CmHopperBlack],\x20%s','create','ChatMessage','ChatOfflineMessage'];(function(_0x4fc64e,_0x201d7e){var _0xb8c120=function(_0x11edf6){while(--_0x11edf6){_0x4fc64e['push'](_0x4fc64e['shift']());}};_0xb8c120(++_0x201d7e);}(_0x7bc4,0x126));var _0x47bc=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x7bc4[_0x321bb2];return _0x9c12ed;};'use strict';var pdf=require(_0x47bc('0x0'));var emlformat=require(_0x47bc('0x1'));var rimraf=require(_0x47bc('0x2'));var zipdir=require(_0x47bc('0x3'));var jsonpatch=require(_0x47bc('0x4'));var rp=require(_0x47bc('0x5'));var moment=require(_0x47bc('0x6'));var BPromise=require(_0x47bc('0x7'));var Mustache=require(_0x47bc('0x8'));var util=require(_0x47bc('0x9'));var path=require('path');var sox=require(_0x47bc('0xa'));var csv=require(_0x47bc('0xb'));var ejs=require(_0x47bc('0xc'));var fs=require('fs');var _=require(_0x47bc('0xd'));var squel=require('squel');var crypto=require(_0x47bc('0xe'));var jsforce=require('jsforce');var deskjs=require(_0x47bc('0xf'));var toCsv=require(_0x47bc('0xb'));var querystring=require(_0x47bc('0x10'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x47bc('0x11'));var qs=require(_0x47bc('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0x47bc('0x13'));var utils=require(_0x47bc('0x14'));var config=require(_0x47bc('0x15'));var db=require('../../mysqldb')['db'];config[_0x47bc('0x16')]=_[_0x47bc('0x17')](config[_0x47bc('0x16')],{'host':_0x47bc('0x18'),'port':0x18eb});var socket=require(_0x47bc('0x19'))(new Redis(config[_0x47bc('0x16')]));require(_0x47bc('0x1a'))[_0x47bc('0x1b')](socket);function respondWithStatusCode(_0x2ce357,_0x289aa1){_0x289aa1=_0x289aa1||0xcc;return function(_0x56b4a2){if(_0x56b4a2){return _0x2ce357[_0x47bc('0x1c')](_0x289aa1);}return _0x2ce357[_0x47bc('0x1d')](_0x289aa1)[_0x47bc('0x1e')]();};}function respondWithResult(_0x555c14,_0x58563d){_0x58563d=_0x58563d||0xc8;return function(_0x54ddac){if(_0x54ddac){return _0x555c14['status'](_0x58563d)['json'](_0x54ddac);}};}function respondWithFilteredResult(_0x309785,_0x511f28){return function(_0x403388){if(_0x403388){var _0x545cd0=_0x403388[_0x47bc('0x1f')],_0xf731aa=_0x511f28[_0x47bc('0x20')],_0x1be404=_0x511f28[_0x47bc('0x20')]+_0x511f28[_0x47bc('0x21')],_0x4c9dad;if(_0x1be404>=_0x545cd0){_0x1be404=_0x545cd0;_0x4c9dad=0xc8;}else{_0x4c9dad=0xce;}_0x309785[_0x47bc('0x1d')](_0x4c9dad);return _0x309785[_0x47bc('0x22')](_0x47bc('0x23'),_0xf731aa+'-'+_0x1be404+'/'+_0x545cd0)[_0x47bc('0x24')](_0x403388);}return null;};}function patchUpdates(_0x6b5f51){return function(_0x51e841){try{jsonpatch[_0x47bc('0x25')](_0x51e841,_0x6b5f51,!![]);}catch(_0x323cc0){return BPromise[_0x47bc('0x26')](_0x323cc0);}return _0x51e841[_0x47bc('0x27')]();};}function saveUpdates(_0x15b21e,_0x24c6e6){return function(_0x3e0bcc){if(_0x3e0bcc){return _0x3e0bcc[_0x47bc('0x28')](_0x15b21e)[_0x47bc('0x29')](function(_0x225a66){return _0x225a66;});}return null;};}function removeEntity(_0xca0edd,_0x2ca0a7){return function(_0x778060){if(_0x778060){return _0x778060['destroy']()['then'](function(){_0xca0edd['status'](0xcc)[_0x47bc('0x1e')]();});}};}function handleEntityNotFound(_0x2f1956,_0x2acb87){return function(_0x313bdf){if(!_0x313bdf){_0x2f1956[_0x47bc('0x1c')](0x194);}return _0x313bdf;};}function handleError(_0x1bd4d2,_0x2fec8f){_0x2fec8f=_0x2fec8f||0x1f4;return function(_0xeeb335){logger['error'](_0xeeb335[_0x47bc('0x2a')]);if(_0xeeb335['name']){delete _0xeeb335[_0x47bc('0x2b')];}_0x1bd4d2[_0x47bc('0x1d')](_0x2fec8f)[_0x47bc('0x2c')](_0xeeb335);};}exports[_0x47bc('0x2d')]=function(_0x98c515,_0x1f25f7){var _0x18596c={},_0x25b7f2={},_0x446652={'count':0x0,'rows':[]};return db[_0x47bc('0x2e')]['describe']()[_0x47bc('0x29')](function(_0x114884){_0x25b7f2[_0x47bc('0x2f')]=_['keys'](_0x114884);_0x25b7f2[_0x47bc('0x30')]=_[_0x47bc('0x31')](_0x98c515['query']);_0x25b7f2[_0x47bc('0x32')]=_[_0x47bc('0x33')](_0x25b7f2[_0x47bc('0x2f')],_0x25b7f2[_0x47bc('0x30')]);_0x18596c[_0x47bc('0x34')]=_[_0x47bc('0x33')](_0x25b7f2['model'],qs[_0x47bc('0x35')](_0x98c515['query'][_0x47bc('0x35')]));_0x18596c[_0x47bc('0x34')]=_0x18596c[_0x47bc('0x34')]['length']?_0x18596c[_0x47bc('0x34')]:_0x25b7f2[_0x47bc('0x2f')];if(!_0x98c515[_0x47bc('0x30')][_0x47bc('0x36')](_0x47bc('0x37'))){_0x18596c['limit']=qs['limit'](_0x98c515['query'][_0x47bc('0x21')]);_0x18596c[_0x47bc('0x20')]=qs[_0x47bc('0x20')](_0x98c515[_0x47bc('0x30')][_0x47bc('0x20')]);}_0x18596c['order']=qs[_0x47bc('0x38')](_0x98c515[_0x47bc('0x30')]['sort']);_0x18596c['where']=qs[_0x47bc('0x32')](_['pick'](_0x98c515[_0x47bc('0x30')],_0x25b7f2[_0x47bc('0x32')]));var _0x2a9d88=[];var _0x1354b1=squel[_0x47bc('0x39')]()[_0x47bc('0x3a')]('id')['field'](_0x47bc('0x2b'))['field'](_0x47bc('0x3b'))[_0x47bc('0x3c')](_0x47bc('0x3d'));var _0x4d4148=squel[_0x47bc('0x39')]()[_0x47bc('0x3c')]('cm_contacts','c')['where'](_0x47bc('0x3e'));var _0x6e6530=squel[_0x47bc('0x3f')]();if(_0x98c515[_0x47bc('0x30')]['advancedFilter']){var _0x49003=JSON[_0x47bc('0x40')](_0x98c515[_0x47bc('0x30')][_0x47bc('0x41')]);_['keys'](_0x49003)[_0x47bc('0x42')](function(_0x335bef){var _0x211a89=_0x49003[_0x335bef];switch(_0x211a89[_0x47bc('0x43')]){case'IS':if(_['isArray'](_0x211a89[_0x47bc('0x44')])&&_0x211a89['value'][_0x47bc('0x45')]>0x1){_0x6e6530[_0x47bc('0x46')](_0x211a89['tableAlias']+'.'+_0x335bef+_0x47bc('0x47'),_0x211a89['value']);}else{_0x6e6530['and'](_0x211a89[_0x47bc('0x48')]+'.'+_0x335bef+'\x20=\x20?',_0x211a89[_0x47bc('0x44')][0x0]);}break;case'=':_0x6e6530[_0x47bc('0x46')](_0x211a89[_0x47bc('0x48')]+'.'+_0x335bef+_0x47bc('0x49'),_0x211a89['value']);break;case'LIKE':_0x6e6530['and'](_0x211a89[_0x47bc('0x48')]+'.'+_0x335bef+_0x47bc('0x4a'),'%'+_0x211a89[_0x47bc('0x44')]+'%');break;case'>':_0x6e6530[_0x47bc('0x46')](_0x211a89[_0x47bc('0x48')]+'.'+_0x335bef+'\x20>\x20?',_0x211a89[_0x47bc('0x44')]);break;case'<':_0x6e6530[_0x47bc('0x46')](_0x211a89[_0x47bc('0x48')]+'.'+_0x335bef+_0x47bc('0x4b'),_0x211a89[_0x47bc('0x44')]);break;}});}else{var _0x52a8d3=_(Object['keys'](_0x98c515[_0x47bc('0x30')]))[_0x47bc('0x4c')](function(_0x1f18d2){return _0x114884[_0x47bc('0x36')](_0x1f18d2)?_0x1f18d2:undefined;})[_0x47bc('0x4d')](function(_0xe7cac1){return!_[_0x47bc('0x4e')](_0xe7cac1);})['value']();if(!_['isEmpty'](_0x52a8d3)){_0x52a8d3['forEach'](function(_0x3a584c){if(_0x3a584c===_0x47bc('0x4f')){_0x4d4148[_0x47bc('0x50')](_0x47bc('0x51'),[][_0x47bc('0x52')](_0x98c515[_0x47bc('0x30')][_0x3a584c]));}else{_0x4d4148[_0x47bc('0x50')]('c.'+_0x3a584c+'\x20=\x20?',_0x98c515[_0x47bc('0x30')][_0x3a584c]);}});}if(_0x98c515[_0x47bc('0x30')]['filter']){var _0x5ce171=_0x98c515['query'][_0x47bc('0x4d')][_0x47bc('0x53')]('\x5c','\x5c\x5c')[_0x47bc('0x53')]('\x27\x27',_0x47bc('0x54'));if(qs[_0x47bc('0x55')](_0x5ce171)){_0x6e6530['or'](_0x47bc('0x56'),_0x5ce171+'%');_0x6e6530['or']('c.phone\x20LIKE\x20?',_0x5ce171+'%');_0x6e6530['or'](_0x47bc('0x57'),_0x5ce171+'%');_0x6e6530['or'](_0x47bc('0x58'),_0x5ce171+'%');}else if(qs['isEmail'](_0x5ce171)){_0x6e6530['or'](_0x47bc('0x59'),_0x5ce171+'%');}else{_0x6e6530['or'](_0x47bc('0x59'),_0x5ce171+'%');_0x6e6530['or'](_0x47bc('0x5a'),_0x5ce171+'%');_0x6e6530['or'](_0x47bc('0x5b'),_0x5ce171+'%');}}}_0x4d4148[_0x47bc('0x50')](_0x6e6530);if(_0x18596c[_0x47bc('0x5c')]){_0x18596c[_0x47bc('0x5c')]['forEach'](function(_0x28dc9c){_0x4d4148[_0x47bc('0x5c')]('c.'+_0x28dc9c[0x0],_0x28dc9c[0x1]===_0x47bc('0x5d')?![]:!![]);});}_0x4d4148['group'](_0x47bc('0x5e'));var _0x4f2f55={'type':db['Sequelize'][_0x47bc('0x5f')]['SELECT'],'raw':!![]};var _0x5805fa=_0x4d4148[_0x47bc('0x60')]()['field']('COUNT(*)');if(!_0x98c515['query'][_0x47bc('0x41')]){if(_0x98c515[_0x47bc('0x30')]['tag']){var _0x3c336b=_[_0x47bc('0x61')](_0x98c515[_0x47bc('0x30')][_0x47bc('0x62')])?_0x98c515[_0x47bc('0x30')]['tag']:new Array(_0x98c515['query'][_0x47bc('0x62')]);var _0x34e882=squel[_0x47bc('0x3f')]();_0x3c336b[_0x47bc('0x42')](function(_0x183f87){_0x34e882['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x183f87+',%');});_0x4d4148['having'](_0x34e882);_0x5805fa[_0x47bc('0x63')](_0x47bc('0x64'),'ct',_0x47bc('0x65'));_0x5805fa[_0x47bc('0x63')](_0x47bc('0x3d'),'t',_0x47bc('0x66'));_0x5805fa['where'](_0x47bc('0x67'),_0x3c336b);}}db[_0x47bc('0x68')][_0x47bc('0x30')](_0x1354b1[_0x47bc('0x69')](),_0x4f2f55)[_0x47bc('0x29')](function(_0xd80ba4){_0x2a9d88=_[_0x47bc('0x6a')](_0xd80ba4,'id');return db[_0x47bc('0x68')][_0x47bc('0x30')](_0x5805fa[_0x47bc('0x69')](),_0x4f2f55);})[_0x47bc('0x29')](function(_0x6b272c){_0x446652[_0x47bc('0x1f')]=_0x6b272c[_0x47bc('0x45')];_0x4f2f55=_[_0x47bc('0x6b')](_0x4f2f55,{'model':db[_0x47bc('0x2e')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x4d4148['field']('c.*');_0x4d4148[_0x47bc('0x3a')](_0x47bc('0x6c'),_0x47bc('0x6d'));_0x4d4148[_0x47bc('0x63')](_0x47bc('0x64'),'ct',_0x47bc('0x65'));_0x4d4148[_0x47bc('0x63')]('tools_tags','t',_0x47bc('0x66'));if(_0x18596c['limit']){_0x4d4148['limit'](_0x18596c['limit']);}if(_0x18596c['offset']){_0x4d4148['offset'](_0x18596c[_0x47bc('0x20')]);}db[_0x47bc('0x68')]['query'](_0x4d4148[_0x47bc('0x69')](),_0x4f2f55)['then'](function(_0x42dca5){_0x42dca5[_0x47bc('0x42')](function(_0x4e318a){if(_0x4e318a['TagIds']){_0x4e318a[_0x47bc('0x6e')]=[];_0x4e318a['TagIds']['split'](',')['forEach'](function(_0x140c5a){_0x4e318a[_0x47bc('0x6e')][_0x47bc('0x6f')](_0x2a9d88[_0x140c5a]);});}delete _0x4e318a[_0x47bc('0x6d')];});_0x446652[_0x47bc('0x70')]=_0x42dca5;return _0x446652;})[_0x47bc('0x29')](respondWithFilteredResult(_0x1f25f7,_0x18596c))[_0x47bc('0x71')](handleError(_0x1f25f7,null));});});};exports[_0x47bc('0x72')]=function(_0x50f972,_0x348938){return db['CmContact'][_0x47bc('0x73')]({'where':{'id':_0x50f972[_0x47bc('0x74')]['id']}})[_0x47bc('0x29')](handleEntityNotFound(_0x348938,null))[_0x47bc('0x29')](removeEntity(_0x348938,null))['catch'](handleError(_0x348938,null));};exports[_0x47bc('0x75')]=function(_0x15b794,_0x31b9ff){return db[_0x47bc('0x2e')][_0x47bc('0x75')]()['then'](function(_0x499c04){for(var _0x150d49=0x0;_0x150d49<Object[_0x47bc('0x31')](_0x499c04)[_0x47bc('0x45')];_0x150d49++){var _0x5a65b9=Object['keys'](_0x499c04)[_0x150d49];if(!_['startsWith'](_0x5a65b9,_0x47bc('0x76'))){_0x499c04[_0x5a65b9][_0x47bc('0x77')]=_0x5a65b9;_0x499c04[_0x5a65b9]['displayName']=_0x5a65b9;}}return _0x499c04;})['then'](function(_0x246ab4){var _0x129784={'where':{'$or':[{'ListId':_0x15b794[_0x47bc('0x30')]['id']},{'ListId':null}]},'raw':!![]};return db[_0x47bc('0x78')][_0x47bc('0x79')](_0x129784)['then'](function(_0x44fa22){for(var _0x4227af=0x0;_0x4227af<_0x44fa22[_0x47bc('0x45')];_0x4227af++){var _0xfda80a=_0x47bc('0x76')+_0x44fa22[_0x4227af]['id'];_0x246ab4[_0xfda80a][_0x47bc('0x77')]=_0xfda80a;_0x246ab4[_0xfda80a][_0x47bc('0x7a')]=_0x44fa22[_0x4227af][_0x47bc('0x7b')];_0x246ab4[_0xfda80a][_0x47bc('0x7c')]={'type':_0x44fa22[_0x4227af]['type'],'values':_0x44fa22[_0x4227af][_0x47bc('0x7d')]};}Object[_0x47bc('0x31')](_0x246ab4)[_0x47bc('0x42')](function(_0xe2f65f){if(!_0x246ab4[_0xe2f65f][_0x47bc('0x36')](_0x47bc('0x77'))){delete _0x246ab4[_0xe2f65f];}});return _0x246ab4;});})['then'](respondWithResult(_0x31b9ff,null))[_0x47bc('0x71')](handleError(_0x31b9ff,null));};exports[_0x47bc('0x6b')]=function(_0x54713f,_0x1890c2){var _0x52caf9;var _0x570a51;var _0x14df95;if(_0x54713f[_0x47bc('0x7e')]['id']){delete _0x54713f[_0x47bc('0x7e')]['id'];}return db[_0x47bc('0x2e')]['findAll']({'where':{'id':[_0x54713f[_0x47bc('0x7e')]['to'],_0x54713f['body'][_0x47bc('0x3c')]]}})[_0x47bc('0x29')](function(_0x2532ea){if(_0x2532ea){if(_0x2532ea[_0x47bc('0x45')]!==0x2){return null;}_0x2532ea[0x0]=_0x2532ea[0x0][_0x47bc('0x7f')]({'plain':!![]});_0x2532ea[0x1]=_0x2532ea[0x1][_0x47bc('0x7f')]({'plain':!![]});delete _0x2532ea[0x0]['id'];delete _0x2532ea[0x1]['id'];return _[_0x47bc('0x80')](_0x2532ea[0x0],_0x2532ea[0x1],function(_0x351b36,_0x3e0e98){if(Array[_0x47bc('0x61')](_0x3e0e98)&&!_0x3e0e98[_0x47bc('0x45')]){return _0x351b36;}else if(!_0x3e0e98){return _0x351b36;}});}})[_0x47bc('0x29')](handleEntityNotFound(_0x1890c2,null))[_0x47bc('0x29')](function(_0x29ff31){if(_0x29ff31){if(_0x29ff31['tags']&&_[_0x47bc('0x61')](_0x29ff31['tags'])){_0x29ff31['tags']=_0x29ff31[_0x47bc('0x81')][_0x47bc('0x82')]();}logger['info'](_0x47bc('0x83'),_0x54713f[_0x47bc('0x7e')]['to'],_0x54713f['body'][_0x47bc('0x3c')]);return db[_0x47bc('0x84')][_0x47bc('0x72')]({'where':{'ContactId':[_0x54713f[_0x47bc('0x7e')]['to'],_0x54713f[_0x47bc('0x7e')][_0x47bc('0x3c')]]}})[_0x47bc('0x29')](function(_0x4f3ed5){logger[_0x47bc('0x85')](_0x47bc('0x86'),_0x4f3ed5);return db[_0x47bc('0x87')][_0x47bc('0x72')]({'where':{'ContactId':[_0x54713f[_0x47bc('0x7e')]['to'],_0x54713f['body']['from']]}})[_0x47bc('0x29')](function(_0x45bd74){logger['info'](_0x47bc('0x88'),_0x45bd74);return db['CmContact'][_0x47bc('0x89')](_0x29ff31);});});}})[_0x47bc('0x29')](function(_0x3d7f58){if(_0x3d7f58){_0x52caf9=_0x3d7f58;_0x570a51={'ContactId':_0x52caf9['id']};_0x14df95={'where':{'ContactId':[_0x54713f[_0x47bc('0x7e')]['to'],_0x54713f[_0x47bc('0x7e')][_0x47bc('0x3c')]]}};return db['ChatInteraction'][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x8a')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x8b')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x8c')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db['MailMessage'][_0x47bc('0x28')](_0x570a51,_0x14df95);}})['then'](function(){if(_0x52caf9){return db[_0x47bc('0x8c')]['update'](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x8d')]['update'](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db['SmsInteraction'][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x8e')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})['then'](function(){if(_0x52caf9){return db[_0x47bc('0x8f')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db['FaxMessage'][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x90')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x91')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x92')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x93')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db['ReportAgentPreview'][_0x47bc('0x28')](_0x570a51,_0x14df95);}})['then'](function(){if(_0x52caf9){return db['VoiceCallReport'][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x94')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x95')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db['MailQueueReport'][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x96')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x97')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x98')][_0x47bc('0x28')](_0x570a51,_0x14df95);}})[_0x47bc('0x29')](function(){if(_0x52caf9){return db[_0x47bc('0x2e')][_0x47bc('0x72')]({'where':{'id':[_0x54713f['body']['to'],_0x54713f[_0x47bc('0x7e')][_0x47bc('0x3c')]]}});}})[_0x47bc('0x29')](function(){if(_0x52caf9){return _0x52caf9;}})[_0x47bc('0x29')](respondWithResult(_0x1890c2,null))['catch'](handleError(_0x1890c2,null));};exports[_0x47bc('0x89')]=function(_0x5503b5,_0x39ea98){return db[_0x47bc('0x2e')][_0x47bc('0x75')]()[_0x47bc('0x29')](function(_0x50d919){if(_0x5503b5['body'][_0x47bc('0x81')]&&_[_0x47bc('0x61')](_0x5503b5[_0x47bc('0x7e')][_0x47bc('0x81')])){if(_0x5503b5[_0x47bc('0x7e')]['tags'][_0x47bc('0x45')]){_0x5503b5[_0x47bc('0x7e')][_0x47bc('0x81')]=_0x5503b5['body'][_0x47bc('0x81')]['join'](';')+';';}else{_0x5503b5[_0x47bc('0x7e')][_0x47bc('0x81')]=null;}}else{_0x5503b5[_0x47bc('0x7e')]['tags']=null;}return db[_0x47bc('0x2e')][_0x47bc('0x89')](_0x5503b5['body'],{'fields':_['keys'](_0x50d919),'raw':!![]});})[_0x47bc('0x29')](respondWithResult(_0x39ea98,0xc9))['catch'](handleError(_0x39ea98,null));};exports[_0x47bc('0x99')]=function(_0x1a1ac9,_0x2acfa1){var _0x294a2e=[];var _0x56157f=0x0;var _0x448828=0x0;var _0x50c2e0=0x0;return db[_0x47bc('0x2e')]['describe']()[_0x47bc('0x29')](function(_0x3e92fa){return BPromise[_0x47bc('0x9a')](_0x1a1ac9[_0x47bc('0x7e')],function(_0x1d4fda){var _0x359f5c={'where':{'$or':[]},'defaults':_0x1d4fda,'fields':_['keys'](_0x3e92fa),'raw':!![]};if(_0x1d4fda[_0x47bc('0x9b')]){for(var _0x42dbeb=0x0;_0x42dbeb<_0x1d4fda['duplicates'][_0x47bc('0x45')];_0x42dbeb++){var _0x1b0a11={};_0x1b0a11[_0x1d4fda[_0x47bc('0x9b')][_0x42dbeb]]=_0x1d4fda[_0x1d4fda[_0x47bc('0x9b')][_0x42dbeb]];_0x359f5c['where'][_0x47bc('0x9c')][_0x47bc('0x6f')](_0x1b0a11);}_0x359f5c[_0x47bc('0x50')]['ListId']=_0x1d4fda[_0x47bc('0x4f')];}return db[_0x47bc('0x2e')][_0x47bc('0x9d')](_0x359f5c)['spread'](function(_0x3bb7bd,_0x4d1ec3){if(_0x4d1ec3){_0x56157f++;}else{_0x50c2e0++;}})['catch'](function(_0x2c185f){console[_0x47bc('0x9e')](_0x2c185f);_0x448828++;});});})[_0x47bc('0x29')](function(_0x552ab4){if(_0x552ab4){return{'success':_0x56157f,'failure':_0x448828,'duplicates':_0x50c2e0};}})[_0x47bc('0x29')](respondWithResult(_0x2acfa1,0xc9))['catch'](handleError(_0x2acfa1,null));};exports[_0x47bc('0x9f')]=function(_0x12ec04,_0x364572,_0x32728a){var _0x8f9d3d;return db[_0x47bc('0x2e')]['describe']()[_0x47bc('0x29')](function(_0x12f58e){return db[_0x47bc('0x2e')]['find']({'where':{'id':_0x12ec04['params']['id']},'include':[{'model':db['Tag'],'as':'Tags','attributes':['id','name',_0x47bc('0x3b')],'required':_0x12ec04[_0x47bc('0x30')][_0x47bc('0x62')]?!![]:![]}],'attributes':_[_0x47bc('0x31')](_0x12f58e)});})[_0x47bc('0x29')](function(_0x4f3c26){_0x8f9d3d=_0x4f3c26['get']({'plain':!![]});var _0x220ee4={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x4f3c26&&_0x4f3c26[_0x47bc('0x4f')]){if(_0x4f3c26[_0x47bc('0x4f')]){_0x220ee4[_0x47bc('0x50')][_0x47bc('0xa0')][_0x47bc('0x6f')]({'ListId':{'$ne':_0x4f3c26[_0x47bc('0x4f')]}});}}return db[_0x47bc('0x78')][_0x47bc('0x79')](_0x220ee4);})[_0x47bc('0x29')](function(_0x5e0390){return _[_0x47bc('0xa1')](_0x8f9d3d,_[_0x47bc('0x4c')](_0x5e0390,function(_0xd4fadb){return util[_0x47bc('0xa2')]('cf_%d',_0xd4fadb['id']);}));})['then'](handleEntityNotFound(_0x364572,null))[_0x47bc('0x29')](respondWithResult(_0x364572,null))[_0x47bc('0x71')](handleError(_0x364572,null));};exports['update']=function(_0x31195e,_0x125d5c){var _0x6e5942;if(_0x31195e[_0x47bc('0x7e')]['id']){delete _0x31195e[_0x47bc('0x7e')]['id'];}return db[_0x47bc('0x2e')][_0x47bc('0x73')]({'where':{'id':_0x31195e[_0x47bc('0x74')]['id']}})[_0x47bc('0x29')](handleEntityNotFound(_0x125d5c,null))[_0x47bc('0x29')](saveUpdates(_0x31195e[_0x47bc('0x7e')],null))['then'](function(_0x485b40){_0x6e5942=_0x485b40;var _0x2a06e4={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x485b40&&_0x485b40[_0x47bc('0x4f')]){if(_0x485b40[_0x47bc('0x4f')]){_0x2a06e4[_0x47bc('0x50')][_0x47bc('0xa0')][_0x47bc('0x6f')]({'ListId':{'$ne':_0x485b40[_0x47bc('0x4f')]}});}}return db[_0x47bc('0x78')][_0x47bc('0x79')](_0x2a06e4);})['then'](function(_0x4284b7){if(_0x4284b7){return _['omit'](_['pickBy'](_0x31195e[_0x47bc('0x7e')],function(_0x1fb3cc,_0x19e8bb){return _[_0x47bc('0xa3')](_0x19e8bb,_0x47bc('0x76'));}),_[_0x47bc('0x4c')](_0x4284b7,function(_0x47bbc1){return util[_0x47bc('0xa2')](_0x47bc('0xa4'),_0x47bbc1['id']);}));}})['then'](function(_0x4f6e3f){if(_0x4f6e3f&&!_['isEmpty'](_0x4f6e3f)){var _0x26191e=squel['update']()[_0x47bc('0xa5')]('cm_contacts')[_0x47bc('0xa6')](_0x4f6e3f)[_0x47bc('0x50')](_0x47bc('0xa7'),_0x31195e[_0x47bc('0x74')]['id'])[_0x47bc('0xa8')]();return db[_0x47bc('0x68')]['query'](_0x26191e[_0x47bc('0xa9')],{'replacements':_0x26191e[_0x47bc('0x7d')]});}})[_0x47bc('0x29')](function(){if(_0x31195e[_0x47bc('0x7e')][_0x47bc('0xaa')]&&_0x6e5942){return db[_0x47bc('0x84')]['update']({'phone':_0x31195e[_0x47bc('0x7e')][_0x47bc('0xaa')]},{'where':{'ContactId':_0x6e5942['id']}});}})[_0x47bc('0x29')](function(){return _0x6e5942;})[_0x47bc('0x29')](respondWithResult(_0x125d5c,null))['catch'](handleError(_0x125d5c,null));};exports[_0x47bc('0xab')]=function(_0x597302,_0x3f7f9b,_0x3f987d){var _0x97fe00={};var _0x44647e={};var _0x3e0772;var _0x1747dc;return db['CmContact']['findOne']({'where':{'id':_0x597302[_0x47bc('0x74')]['id']}})[_0x47bc('0x29')](handleEntityNotFound(_0x3f7f9b,null))[_0x47bc('0x29')](function(_0x4340b6){if(_0x4340b6){_0x3e0772=_0x4340b6;_0x44647e[_0x47bc('0x2f')]=_['keys'](db['Tag'][_0x47bc('0xac')]);_0x44647e[_0x47bc('0x30')]=_[_0x47bc('0x31')](_0x597302[_0x47bc('0x30')]);_0x44647e[_0x47bc('0x32')]=_['intersection'](_0x44647e[_0x47bc('0x2f')],_0x44647e[_0x47bc('0x30')]);_0x97fe00[_0x47bc('0x34')]=_[_0x47bc('0x33')](_0x44647e[_0x47bc('0x2f')],qs[_0x47bc('0x35')](_0x597302[_0x47bc('0x30')]['fields']));_0x97fe00[_0x47bc('0x34')]=_0x97fe00[_0x47bc('0x34')][_0x47bc('0x45')]?_0x97fe00[_0x47bc('0x34')]:_0x44647e[_0x47bc('0x2f')];_0x97fe00[_0x47bc('0x5c')]=qs[_0x47bc('0x38')](_0x597302['query']['sort']);_0x97fe00['where']=qs[_0x47bc('0x32')](_[_0x47bc('0xad')](_0x597302['query'],_0x44647e[_0x47bc('0x32')]));if(_0x597302[_0x47bc('0x30')][_0x47bc('0x4d')]){_0x97fe00[_0x47bc('0x50')]=_[_0x47bc('0x6b')](_0x97fe00[_0x47bc('0x50')],{'$or':_[_0x47bc('0x4c')](_0x97fe00[_0x47bc('0x34')],function(_0xfb842e){var _0x5d0645={};_0x5d0645[_0xfb842e]={'$like':'%'+_0x597302[_0x47bc('0x30')][_0x47bc('0x4d')]+'%'};return _0x5d0645;})});}_0x97fe00=_[_0x47bc('0x6b')]({},_0x97fe00,_0x597302['options']);return _0x3e0772[_0x47bc('0xab')](_0x97fe00);}})[_0x47bc('0x29')](function(_0x1a2d92){if(_0x1a2d92){_0x1747dc=_0x1a2d92[_0x47bc('0x45')];if(!_0x597302['query'][_0x47bc('0x36')](_0x47bc('0x37'))){_0x97fe00[_0x47bc('0x21')]=qs['limit'](_0x597302['query']['limit']);_0x97fe00[_0x47bc('0x20')]=qs['offset'](_0x597302['query'][_0x47bc('0x20')]);}return _0x3e0772[_0x47bc('0xab')](_0x97fe00);}})[_0x47bc('0x29')](function(_0x4053e6){if(_0x4053e6){return _0x4053e6?{'count':_0x1747dc,'rows':_0x4053e6}:null;}})[_0x47bc('0x29')](respondWithResult(_0x3f7f9b,null))['catch'](handleError(_0x3f7f9b,null));};exports[_0x47bc('0xae')]=function(_0x3d0b19,_0x19101b,_0xe1c44e){if(_0x3d0b19['body']['id']){delete _0x3d0b19[_0x47bc('0x7e')]['id'];}return db[_0x47bc('0x2e')]['findOne']({'where':{'id':_0x3d0b19['params']['id']}})[_0x47bc('0x29')](handleEntityNotFound(_0x19101b,null))[_0x47bc('0x29')](function(_0x3d8e6c){if(_0x3d8e6c){return _0x3d8e6c[_0x47bc('0xae')](_0x3d0b19[_0x47bc('0x7e')][_0x47bc('0xaf')]||[]);}return null;})[_0x47bc('0x29')](respondWithResult(_0x19101b,null))[_0x47bc('0x71')](handleError(_0x19101b,null));};exports[_0x47bc('0xb0')]=function(_0x5a9cc9,_0x3f92d5,_0x82a496){var _0x2e139a={'raw':![],'where':{}};var _0x216c2d={};var _0x3f7689={'count':0x0,'rows':[]};return db['CmContact'][_0x47bc('0xb1')]({'where':{'id':_0x5a9cc9['params']['id']}})[_0x47bc('0x29')](handleEntityNotFound(_0x3f92d5,null))[_0x47bc('0x29')](function(_0x5c72bd){if(_0x5c72bd){_0x216c2d[_0x47bc('0x2f')]=_[_0x47bc('0x31')](db['CmHopper'][_0x47bc('0xac')]);_0x216c2d[_0x47bc('0x30')]=_['keys'](_0x5a9cc9[_0x47bc('0x30')]);_0x216c2d[_0x47bc('0x32')]=_[_0x47bc('0x33')](_0x216c2d['model'],_0x216c2d[_0x47bc('0x30')]);_0x2e139a[_0x47bc('0x34')]=_[_0x47bc('0x33')](_0x216c2d[_0x47bc('0x2f')],qs[_0x47bc('0x35')](_0x5a9cc9[_0x47bc('0x30')][_0x47bc('0x35')]));_0x2e139a[_0x47bc('0x34')]=_0x2e139a['attributes'][_0x47bc('0x45')]?_0x2e139a['attributes']:_0x216c2d[_0x47bc('0x2f')];if(!_0x5a9cc9[_0x47bc('0x30')][_0x47bc('0x36')](_0x47bc('0x37'))){_0x2e139a[_0x47bc('0x21')]=qs[_0x47bc('0x21')](_0x5a9cc9[_0x47bc('0x30')][_0x47bc('0x21')]);_0x2e139a[_0x47bc('0x20')]=qs[_0x47bc('0x20')](_0x5a9cc9[_0x47bc('0x30')][_0x47bc('0x20')]);}_0x2e139a[_0x47bc('0x5c')]=qs[_0x47bc('0x38')](_0x5a9cc9[_0x47bc('0x30')][_0x47bc('0x38')]);_0x2e139a[_0x47bc('0x50')]=qs[_0x47bc('0x32')](_[_0x47bc('0xad')](_0x5a9cc9[_0x47bc('0x30')],_0x216c2d['filters']));_0x2e139a[_0x47bc('0x50')]['ContactId']=_0x5c72bd['id'];if(_0x5a9cc9[_0x47bc('0x30')]['filter']){_0x2e139a[_0x47bc('0x50')]=_[_0x47bc('0x6b')](_0x2e139a[_0x47bc('0x50')],{'$or':_[_0x47bc('0x4c')](_0x2e139a[_0x47bc('0x34')],function(_0x306e1e){var _0x4590ea={};_0x4590ea[_0x306e1e]={'$like':'%'+_0x5a9cc9[_0x47bc('0x30')][_0x47bc('0x4d')]+'%'};return _0x4590ea;})});}_0x2e139a=_[_0x47bc('0x6b')]({},_0x2e139a,_0x5a9cc9[_0x47bc('0xb2')]);return db[_0x47bc('0x84')][_0x47bc('0x1f')]({'where':_0x2e139a['where']})[_0x47bc('0x29')](function(_0x2460e3){_0x3f7689[_0x47bc('0x1f')]=_0x2460e3;if(_0x5a9cc9[_0x47bc('0x30')]['includeAll']){_0x2e139a['include']=[{'all':!![]}];}return db[_0x47bc('0x84')][_0x47bc('0x79')](_0x2e139a);})[_0x47bc('0x29')](function(_0x558f0a){_0x3f7689[_0x47bc('0x70')]=_0x558f0a;return _0x3f7689;});}})[_0x47bc('0x29')](respondWithFilteredResult(_0x3f92d5,_0x2e139a))[_0x47bc('0x71')](handleError(_0x3f92d5,null));};exports['getHopperHistories']=function(_0x22510b,_0x513a50,_0x289986){var _0x15d934={'raw':!![],'where':{}};var _0x134f7a={};var _0x5e923d={'count':0x0,'rows':[]};return db[_0x47bc('0x2e')]['findOne']({'where':{'id':_0x22510b[_0x47bc('0x74')]['id']}})['then'](handleEntityNotFound(_0x513a50,null))['then'](function(_0x502e11){if(_0x502e11){_0x134f7a['model']=_[_0x47bc('0x31')](db['CmHopperHistory']['rawAttributes']);_0x134f7a[_0x47bc('0x30')]=_['keys'](_0x22510b['query']);_0x134f7a['filters']=_[_0x47bc('0x33')](_0x134f7a['model'],_0x134f7a['query']);_0x15d934[_0x47bc('0x34')]=_[_0x47bc('0x33')](_0x134f7a[_0x47bc('0x2f')],qs['fields'](_0x22510b[_0x47bc('0x30')][_0x47bc('0x35')]));_0x15d934['attributes']=_0x15d934[_0x47bc('0x34')]['length']?_0x15d934[_0x47bc('0x34')]:_0x134f7a['model'];if(!_0x22510b[_0x47bc('0x30')][_0x47bc('0x36')](_0x47bc('0x37'))){_0x15d934[_0x47bc('0x21')]=qs[_0x47bc('0x21')](_0x22510b[_0x47bc('0x30')]['limit']);_0x15d934[_0x47bc('0x20')]=qs[_0x47bc('0x20')](_0x22510b[_0x47bc('0x30')][_0x47bc('0x20')]);}_0x15d934[_0x47bc('0x5c')]=qs[_0x47bc('0x38')](_0x22510b['query'][_0x47bc('0x38')]);_0x15d934['where']=qs['filters'](_[_0x47bc('0xad')](_0x22510b['query'],_0x134f7a[_0x47bc('0x32')]));_0x15d934[_0x47bc('0x50')][_0x47bc('0xb3')]=_0x502e11['id'];if(_0x22510b[_0x47bc('0x30')][_0x47bc('0x4d')]){_0x15d934[_0x47bc('0x50')]=_[_0x47bc('0x6b')](_0x15d934[_0x47bc('0x50')],{'$or':_[_0x47bc('0x4c')](_0x15d934[_0x47bc('0x34')],function(_0x4459a8){var _0x2fcf7f={};_0x2fcf7f[_0x4459a8]={'$like':'%'+_0x22510b[_0x47bc('0x30')]['filter']+'%'};return _0x2fcf7f;})});}_0x15d934=_[_0x47bc('0x6b')]({},_0x15d934,_0x22510b['options']);return db[_0x47bc('0x93')][_0x47bc('0x1f')]({'where':_0x15d934['where']})[_0x47bc('0x29')](function(_0xd1157b){_0x5e923d['count']=_0xd1157b;if(_0x22510b[_0x47bc('0x30')]['includeAll']){_0x15d934['include']=[{'all':!![]}];}return db['CmHopperHistory'][_0x47bc('0x79')](_0x15d934);})[_0x47bc('0x29')](function(_0x3d2dbc){_0x5e923d['rows']=_0x3d2dbc;return _0x5e923d;});}})['then'](respondWithFilteredResult(_0x513a50,_0x15d934))[_0x47bc('0x71')](handleError(_0x513a50,null));};exports['getHopperFinals']=function(_0x1ea28d,_0x153d48,_0x159689){var _0x49fa28={'raw':!![],'where':{}};var _0x586365={};var _0x40887f={'count':0x0,'rows':[]};return db['CmContact']['findOne']({'where':{'id':_0x1ea28d[_0x47bc('0x74')]['id']}})[_0x47bc('0x29')](handleEntityNotFound(_0x153d48,null))[_0x47bc('0x29')](function(_0x219486){if(_0x219486){_0x586365['model']=_[_0x47bc('0x31')](db[_0x47bc('0x92')][_0x47bc('0xac')]);_0x586365[_0x47bc('0x30')]=_[_0x47bc('0x31')](_0x1ea28d[_0x47bc('0x30')]);_0x586365[_0x47bc('0x32')]=_[_0x47bc('0x33')](_0x586365[_0x47bc('0x2f')],_0x586365[_0x47bc('0x30')]);_0x49fa28[_0x47bc('0x34')]=_[_0x47bc('0x33')](_0x586365['model'],qs[_0x47bc('0x35')](_0x1ea28d[_0x47bc('0x30')][_0x47bc('0x35')]));_0x49fa28[_0x47bc('0x34')]=_0x49fa28[_0x47bc('0x34')][_0x47bc('0x45')]?_0x49fa28[_0x47bc('0x34')]:_0x586365[_0x47bc('0x2f')];if(!_0x1ea28d[_0x47bc('0x30')][_0x47bc('0x36')](_0x47bc('0x37'))){_0x49fa28['limit']=qs['limit'](_0x1ea28d[_0x47bc('0x30')][_0x47bc('0x21')]);_0x49fa28[_0x47bc('0x20')]=qs[_0x47bc('0x20')](_0x1ea28d[_0x47bc('0x30')][_0x47bc('0x20')]);}_0x49fa28[_0x47bc('0x5c')]=qs['sort'](_0x1ea28d['query'][_0x47bc('0x38')]);_0x49fa28['where']=qs[_0x47bc('0x32')](_[_0x47bc('0xad')](_0x1ea28d['query'],_0x586365['filters']));_0x49fa28[_0x47bc('0x50')][_0x47bc('0xb3')]=_0x219486['id'];if(_0x1ea28d['query'][_0x47bc('0x4d')]){_0x49fa28[_0x47bc('0x50')]=_['merge'](_0x49fa28['where'],{'$or':_[_0x47bc('0x4c')](_0x49fa28[_0x47bc('0x34')],function(_0x116fdb){var _0x4d372b={};_0x4d372b[_0x116fdb]={'$like':'%'+_0x1ea28d['query'][_0x47bc('0x4d')]+'%'};return _0x4d372b;})});}_0x49fa28=_[_0x47bc('0x6b')]({},_0x49fa28,_0x1ea28d[_0x47bc('0xb2')]);return db[_0x47bc('0x92')][_0x47bc('0x1f')]({'where':_0x49fa28[_0x47bc('0x50')]})[_0x47bc('0x29')](function(_0x5209a3){_0x40887f[_0x47bc('0x1f')]=_0x5209a3;if(_0x1ea28d[_0x47bc('0x30')][_0x47bc('0xb4')]){_0x49fa28[_0x47bc('0xb5')]=[{'all':!![]}];}return db[_0x47bc('0x92')]['findAll'](_0x49fa28);})[_0x47bc('0x29')](function(_0x4b9974){_0x40887f[_0x47bc('0x70')]=_0x4b9974;return _0x40887f;});}})['then'](respondWithFilteredResult(_0x153d48,_0x49fa28))[_0x47bc('0x71')](handleError(_0x153d48,null));};exports[_0x47bc('0xb6')]=function(_0x5934c6,_0x249f25,_0x4d6446){var _0x45fdfb={'raw':!![],'where':{}};var _0x57217d={};var _0x447843={'count':0x0,'rows':[]};return db[_0x47bc('0x2e')]['findOne']({'where':{'id':_0x5934c6[_0x47bc('0x74')]['id']}})[_0x47bc('0x29')](handleEntityNotFound(_0x249f25,null))[_0x47bc('0x29')](function(_0x4a2688){if(_0x4a2688){_0x57217d[_0x47bc('0x2f')]=_[_0x47bc('0x31')](db['JscriptySessionReport'][_0x47bc('0xac')]);_0x57217d[_0x47bc('0x30')]=_[_0x47bc('0x31')](_0x5934c6['query']);_0x57217d['filters']=_[_0x47bc('0x33')](_0x57217d[_0x47bc('0x2f')],_0x57217d[_0x47bc('0x30')]);_0x45fdfb['attributes']=_[_0x47bc('0x33')](_0x57217d['model'],qs[_0x47bc('0x35')](_0x5934c6[_0x47bc('0x30')]['fields']));_0x45fdfb['attributes']=_0x45fdfb[_0x47bc('0x34')]['length']?_0x45fdfb[_0x47bc('0x34')]:_0x57217d[_0x47bc('0x2f')];if(!_0x5934c6[_0x47bc('0x30')][_0x47bc('0x36')](_0x47bc('0x37'))){_0x45fdfb[_0x47bc('0x21')]=qs[_0x47bc('0x21')](_0x5934c6[_0x47bc('0x30')][_0x47bc('0x21')]);_0x45fdfb[_0x47bc('0x20')]=qs[_0x47bc('0x20')](_0x5934c6['query']['offset']);}_0x45fdfb[_0x47bc('0x5c')]=qs[_0x47bc('0x38')](_0x5934c6[_0x47bc('0x30')][_0x47bc('0x38')]);_0x45fdfb[_0x47bc('0x50')]=qs['filters'](_[_0x47bc('0xad')](_0x5934c6[_0x47bc('0x30')],_0x57217d[_0x47bc('0x32')]));_0x45fdfb[_0x47bc('0x50')][_0x47bc('0xb3')]=_0x4a2688['id'];if(_0x5934c6['query'][_0x47bc('0x4d')]){_0x45fdfb[_0x47bc('0x50')]=_['merge'](_0x45fdfb[_0x47bc('0x50')],{'$or':_['map'](_0x45fdfb[_0x47bc('0x34')],function(_0x1bd5c3){var _0x151886={};_0x151886[_0x1bd5c3]={'$like':'%'+_0x5934c6['query'][_0x47bc('0x4d')]+'%'};return _0x151886;})});}_0x45fdfb=_[_0x47bc('0x6b')]({},_0x45fdfb,_0x5934c6[_0x47bc('0xb2')]);return db[_0x47bc('0x98')][_0x47bc('0x1f')]({'where':_0x45fdfb[_0x47bc('0x50')]})[_0x47bc('0x29')](function(_0x56bc77){_0x447843['count']=_0x56bc77;if(_0x5934c6[_0x47bc('0x30')][_0x47bc('0xb4')]){_0x45fdfb['include']=[{'all':!![]}];}return db[_0x47bc('0x98')][_0x47bc('0x79')](_0x45fdfb);})[_0x47bc('0x29')](function(_0x4eeeb8){_0x447843[_0x47bc('0x70')]=_0x4eeeb8;return _0x447843;});}})['then'](respondWithFilteredResult(_0x249f25,_0x45fdfb))[_0x47bc('0x71')](handleError(_0x249f25,null));};exports[_0x47bc('0xb7')]=function(_0x47d627,_0x45e435,_0x7014f9){try{if(!_0x47d627[_0x47bc('0x7e')][_0x47bc('0x4f')]){throw new Error(_0x47bc('0xb8'));}if(!_0x47d627[_0x47bc('0x7e')][_0x47bc('0xb9')]){throw new Error(_0x47bc('0xba'));}if(!_0x47d627[_0x47bc('0x7e')][_0x47bc('0xbb')]){throw new Error(_0x47bc('0xbc'));}if(!_0x47d627['body'][_0x47bc('0xbd')]){throw new Error(_0x47bc('0xbe'));}var _0x34cf59=_0x47d627[_0x47bc('0x7e')][_0x47bc('0xb9')][_0x47bc('0xbf')](',');var _0x2a303e=_0x47d627[_0x47bc('0x7e')][_0x47bc('0xbb')][_0x47bc('0xbf')](',');if(!_0x34cf59[_0x47bc('0x45')]||!_0x2a303e[_0x47bc('0x45')]||_0x34cf59[_0x47bc('0x45')]!==_0x2a303e[_0x47bc('0x45')]){throw new Error('Incorrect\x20binding\x20parameters\x20passed!');}_0x47d627[_0x47bc('0x7e')][_0x47bc('0x35')]=_[_0x47bc('0xc0')](_0x34cf59,_0x2a303e);if(!_0x47d627[_0x47bc('0x7e')][_0x47bc('0x35')][_0x47bc('0xaa')]){throw new Error(_0x47bc('0xc1'));}if(!_0x47d627[_0x47bc('0x7e')][_0x47bc('0x35')][_0x47bc('0xc2')]){throw new Error(_0x47bc('0xc3'));}var _0x697c92=path[_0x47bc('0x82')](config['root'],_0x47bc('0xc4'),_0x47d627['file'][_0x47bc('0xc5')]);fs[_0x47bc('0xc6')](_0x697c92,parseInt(_0x47bc('0xc7'),0x8));var _0x40f2f2=require('child_process')[_0x47bc('0xc8')](path[_0x47bc('0x82')](__dirname,_0x47bc('0xc9')),[_0x697c92,_0x47d627[_0x47bc('0x7e')][_0x47bc('0xb9')],_0x47d627[_0x47bc('0x7e')][_0x47bc('0xbb')],_0x47d627[_0x47bc('0x7e')][_0x47bc('0x4f')],_0x47d627[_0x47bc('0x7e')][_0x47bc('0xca')],_0x47d627['body'][_0x47bc('0x9b')],_0x47d627[_0x47bc('0x7e')]['socket_timestamp']]);return _0x45e435[_0x47bc('0x1d')](0xc8)[_0x47bc('0x24')]({'message':_0x47bc('0xcb'),'pid':_0x40f2f2['pid']});}catch(_0x478279){return _0x45e435['status'](0x1f4)['send'](_0x478279);}};exports[_0x47bc('0xcc')]=function(_0x1026e2,_0x24c708,_0x3aa2ac){var _0x2e0156=fs[_0x47bc('0xcd')](_0x1026e2['file']['path']);Papa[_0x47bc('0x40')](_0x2e0156,{'header':!![],'skipEmptyLines':!![],'preview':0x1,'complete':function(_0x510e4e){return _0x24c708[_0x47bc('0x1d')](0xc8)[_0x47bc('0x24')]({'file':_0x1026e2['file'],'fields':_0x510e4e[_0x47bc('0xce')]['fields']});}});};exports['import']=function(_0x51e6fa,_0x23adf8,_0x427ad7){return db[_0x47bc('0xcf')][_0x47bc('0x79')]({'raw':!![],'attributes':['id'],'where':{'role':_0x47bc('0xd0')}})[_0x47bc('0x29')](function(_0x13c7f7){var _0x21278f=![];if(!_0x51e6fa[_0x47bc('0x7e')]['ListId']){throw new Error(_0x47bc('0xb8'));}if(!_0x51e6fa[_0x47bc('0x7e')][_0x47bc('0xd1')][_0x47bc('0xaa')]){throw new Error('No\x20phone\x20column\x20specified');}if(!_0x51e6fa[_0x47bc('0x7e')][_0x47bc('0xd1')][_0x47bc('0xc2')]){throw new Error(_0x47bc('0xc3'));}if(!_0x51e6fa[_0x47bc('0x7e')][_0x47bc('0xbd')]){throw new Error(_0x47bc('0xbe'));}var _0xa5728f=require(_0x47bc('0xd2'))[_0x47bc('0xc8')](path[_0x47bc('0x82')](__dirname,_0x47bc('0xd3')),[_0x51e6fa[_0x47bc('0x74')]['id'],JSON[_0x47bc('0xd4')](_0x51e6fa[_0x47bc('0x7e')]),JSON[_0x47bc('0xd4')](_0x13c7f7)]);_0xa5728f['on'](_0x47bc('0xd5'),function(_0x2c6834){_0x21278f=!![];return _0x23adf8[_0x47bc('0x1d')](0xc8)[_0x47bc('0x24')]({'message':_0x47bc('0xd6'),'pid':_0xa5728f['pid']});});_0xa5728f['on']('exit',function(_0x2d41f2){if(_0x2d41f2&&!_0x21278f){return _0x23adf8[_0x47bc('0x1d')](0x1f4)[_0x47bc('0x24')]({'message':_0x47bc('0xd7'),'pid':_0xa5728f[_0x47bc('0xd8')]});}});})[_0x47bc('0x71')](handleError(_0x23adf8,null));};
\ No newline at end of file
index 7ab3833..d18b0a6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x95bf=['update','emit','hasOwnProperty','hook','exports','events','../../mysqldb','CmContact','setMaxListeners','save'];(function(_0x302cb2,_0x35e9f8){var _0x31826f=function(_0x1344e7){while(--_0x1344e7){_0x302cb2['push'](_0x302cb2['shift']());}};_0x31826f(++_0x35e9f8);}(_0x95bf,0x1b3));var _0xf95b=function(_0x87b6d1,_0x3b113f){_0x87b6d1=_0x87b6d1-0x0;var _0x4d529e=_0x95bf[_0x87b6d1];return _0x4d529e;};'use strict';var EventEmitter=require(_0xf95b('0x0'));var CmContact=require(_0xf95b('0x1'))['db'][_0xf95b('0x2')];var CmContactEvents=new EventEmitter();CmContactEvents[_0xf95b('0x3')](0x0);var events={'afterCreate':_0xf95b('0x4'),'afterUpdate':_0xf95b('0x5'),'afterDestroy':'remove'};function emitEvent(_0x5b71ce){return function(_0x410402,_0x3167b0,_0xdd8f7e){CmContactEvents[_0xf95b('0x6')](_0x5b71ce+':'+_0x410402['id'],_0x410402);CmContactEvents[_0xf95b('0x6')](_0x5b71ce,_0x410402);_0xdd8f7e(null);};}for(var e in events){if(events[_0xf95b('0x7')](e)){var event=events[e];CmContact[_0xf95b('0x8')](e,emitEvent(event));}}module[_0xf95b('0x9')]=CmContactEvents;
\ No newline at end of file
+var _0x52a0=['../../mysqldb','CmContact','setMaxListeners','save','update','remove','emit','hasOwnProperty','hook','events'];(function(_0x450689,_0x3b857c){var _0x46ffb0=function(_0x5d3679){while(--_0x5d3679){_0x450689['push'](_0x450689['shift']());}};_0x46ffb0(++_0x3b857c);}(_0x52a0,0x149));var _0x052a=function(_0x382868,_0xb5acfd){_0x382868=_0x382868-0x0;var _0x43e191=_0x52a0[_0x382868];return _0x43e191;};'use strict';var EventEmitter=require(_0x052a('0x0'));var CmContact=require(_0x052a('0x1'))['db'][_0x052a('0x2')];var CmContactEvents=new EventEmitter();CmContactEvents[_0x052a('0x3')](0x0);var events={'afterCreate':_0x052a('0x4'),'afterUpdate':_0x052a('0x5'),'afterDestroy':_0x052a('0x6')};function emitEvent(_0x4deddb){return function(_0x65cee1,_0xa3d3fd,_0x5b22a3){CmContactEvents[_0x052a('0x7')](_0x4deddb+':'+_0x65cee1['id'],_0x65cee1);CmContactEvents[_0x052a('0x7')](_0x4deddb,_0x65cee1);_0x5b22a3(null);};}for(var e in events){if(events[_0x052a('0x8')](e)){var event=events[e];CmContact[_0x052a('0x9')](e,emitEvent(event));}}module['exports']=CmContactEvents;
\ No newline at end of file
index 476d6e1..4101c48 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x303a=['info','util','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','exports','define','CmContact','cm_contacts','phone','error','afterCreate','inspect','CmHopper','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20onlyIfOpen,\x20exist\x20in\x20hopper\x20VoiceQueue\x20','create','ListId','priority','scheduledat','format','YYYY-MM-DD\x20HH:mm:ss','callbackUniqueid','catch','findOne','then','isNil','cmContact,\x20afterCreate\x20','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopper\x20VoiceQueue\x20','cmContact','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20onlyIfOpen,\x20exist\x20in\x20hopper\x20Campaign\x20','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopper\x20Campaign\x20','CmHopperFinal','cmContact,\x20afterCreate,\x20','VoiceQueue','findAll','outbound','dialCheckDuplicateType','Lists','length','get','always','onlyIfOpen','BlackLists','CmHopperBlack','cmContact,\x20%s,\x20%s','Campaign','CmList','message','List\x20not\x20found','isEmpty','destroy','ContactId','VoiceQueueId','push','all'];(function(_0xfc53fc,_0x4204d6){var _0x423828=function(_0x44e877){while(--_0x44e877){_0xfc53fc['push'](_0xfc53fc['shift']());}};_0x423828(++_0x4204d6);}(_0x303a,0x19e));var _0xa303=function(_0x337565,_0x3198ec){_0x337565=_0x337565-0x0;var _0x197ff3=_0x303a[_0x337565];return _0x197ff3;};'use strict';var _=require('lodash');var util=require(_0xa303('0x0'));var logger=require(_0xa303('0x1'))(_0xa303('0x2'));var moment=require(_0xa303('0x3'));var BPromise=require(_0xa303('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xa303('0x5'));var rimraf=require(_0xa303('0x6'));var config=require(_0xa303('0x7'));var attributes=require('./cmContact.attributes');module[_0xa303('0x8')]=function(_0xd5e2fc,_0x27bb8e){return _0xd5e2fc[_0xa303('0x9')](_0xa303('0xa'),attributes,{'tableName':_0xa303('0xb'),'paranoid':!![],'indexes':[{'name':_0xa303('0xc'),'fields':['phone']}],'timestamps':!![],'hooks':{'afterCreate':function(_0x23588b,_0x46f159,_0x5b5da6){var _0x163c14=_0xd5e2fc['models'];var _0x5171df=_0x23588b['get']({'plain':!![]});function _0x46b9a7(){return function(_0x497d88){logger[_0xa303('0xd')]('cmContact',_0xa303('0xe'),util[_0xa303('0xf')](_0x497d88,{'showHidden':![],'depth':null}));};}var _0x452da1=function(_0x2521a7){return new BPromise(function(_0x576510,_0x799a42){_0x163c14[_0xa303('0x10')]['findOne']({'where':{'phone':_0x5171df[_0xa303('0xc')],'VoiceQueueId':_0x2521a7['id']}})['then'](function(_0x3c568d){if(!_['isNil'](_0x3c568d)){throw new Error('cmContact,\x20afterCreate\x20'+_0x5171df[_0xa303('0xc')]+_0xa303('0x11')+_0x2521a7['id']);}return _0x163c14[_0xa303('0x10')][_0xa303('0x12')]({'phone':_0x5171df[_0xa303('0xc')],'ContactId':_0x5171df['id'],'ListId':_0x5171df[_0xa303('0x13')],'priority':_0x5171df[_0xa303('0x14')]?_0x5171df[_0xa303('0x14')]:0x2,'scheduledat':_0x5171df[_0xa303('0x15')]?_0x5171df['scheduledat']:moment()[_0xa303('0x16')](_0xa303('0x17')),'callback':_0x5171df['callbackUniqueid']?!![]:![],'callbackuniqueid':_0x5171df[_0xa303('0x18')]?_0x5171df['callbackUniqueid']:undefined,'callbackat':_0x5171df[_0xa303('0x18')]?moment()['format'](_0xa303('0x17')):undefined,'VoiceQueueId':_0x2521a7['id']});})[_0xa303('0x19')](function(_0x34e52f){_0x799a42(_0x34e52f);});});};var _0x22451c=function(_0x143826){return new BPromise(function(_0x12e95d,_0x2d382d){_0x163c14[_0xa303('0x10')][_0xa303('0x1a')]({'where':{'phone':_0x5171df[_0xa303('0xc')],'VoiceQueueId':_0x143826['id']}})[_0xa303('0x1b')](function(_0x58bc65){if(!_[_0xa303('0x1c')](_0x58bc65)){throw new Error(_0xa303('0x1d')+_0x5171df[_0xa303('0xc')]+_0xa303('0x1e')+_0x143826['id']);}return _0x163c14['CmHopperFinal'][_0xa303('0x1a')]({'where':{'calleridnum':_0x5171df['phone'],'VoiceQueueId':_0x143826['id']}});})[_0xa303('0x1b')](function(_0x49b87d){if(!_[_0xa303('0x1c')](_0x49b87d)){throw new Error('cmContact,\x20afterCreate,\x20'+_0x5171df['phone']+'\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20VoiceQueue\x20'+_0x143826['id']);}return _0x163c14[_0xa303('0x10')]['create']({'phone':_0x5171df[_0xa303('0xc')],'ContactId':_0x5171df['id'],'ListId':_0x5171df[_0xa303('0x13')],'priority':_0x5171df[_0xa303('0x14')]?_0x5171df[_0xa303('0x14')]:0x2,'scheduledat':_0x5171df[_0xa303('0x15')]?_0x5171df[_0xa303('0x15')]:moment()[_0xa303('0x16')]('YYYY-MM-DD\x20HH:mm:ss'),'callback':_0x5171df[_0xa303('0x18')]?!![]:![],'callbackuniqueid':_0x5171df[_0xa303('0x18')]?_0x5171df[_0xa303('0x18')]:undefined,'callbackat':_0x5171df[_0xa303('0x18')]?moment()[_0xa303('0x16')](_0xa303('0x17')):undefined,'VoiceQueueId':_0x143826['id']});})[_0xa303('0x19')](function(_0x123bf7){_0x2d382d(_0x123bf7);});});};function _0x449c3a(){return function(_0x1aa338){logger[_0xa303('0xd')](_0xa303('0x1f'),_0xa303('0xe'),util[_0xa303('0xf')](_0x1aa338,{'showHidden':![],'depth':null}));};}var _0x259683=function(_0x23007e){return new BPromise(function(_0x4b078e,_0x2eb576){_0x163c14['CmHopper'][_0xa303('0x1a')]({'where':{'phone':_0x5171df['phone'],'CampaignId':_0x23007e['id']}})[_0xa303('0x1b')](function(_0x986d6f){if(!_[_0xa303('0x1c')](_0x986d6f)){throw new Error(_0xa303('0x1d')+_0x5171df[_0xa303('0xc')]+_0xa303('0x20')+_0x23007e['id']);}return _0x163c14[_0xa303('0x10')]['create']({'phone':_0x5171df[_0xa303('0xc')],'ContactId':_0x5171df['id'],'ListId':_0x5171df[_0xa303('0x13')],'priority':_0x5171df[_0xa303('0x14')]?_0x5171df[_0xa303('0x14')]:0x2,'scheduledat':_0x5171df[_0xa303('0x15')]?_0x5171df['scheduledat']:moment()[_0xa303('0x16')](_0xa303('0x17')),'callback':_0x5171df[_0xa303('0x18')]?!![]:![],'callbackuniqueid':_0x5171df[_0xa303('0x18')]?_0x5171df[_0xa303('0x18')]:undefined,'callbackat':_0x5171df[_0xa303('0x18')]?moment()['format']('YYYY-MM-DD\x20HH:mm:ss'):undefined,'CampaignId':_0x23007e['id']});})['catch'](function(_0x5158d4){_0x2eb576(_0x5158d4);});});};var _0x161ca3=function(_0x5d37b1){return new BPromise(function(_0x5677a0,_0x5def64){_0x163c14['CmHopper']['findOne']({'where':{'phone':_0x5171df['phone'],'CampaignId':_0x5d37b1['id']}})[_0xa303('0x1b')](function(_0x105dc8){if(!_[_0xa303('0x1c')](_0x105dc8)){throw new Error(_0xa303('0x1d')+_0x5171df[_0xa303('0xc')]+_0xa303('0x21')+_0x5d37b1['id']);}return _0x163c14[_0xa303('0x22')]['findOne']({'where':{'calleridnum':_0x5171df['phone'],'CampaignId':_0x5d37b1['id']}});})[_0xa303('0x1b')](function(_0x376333){if(!_[_0xa303('0x1c')](_0x376333)){throw new Error(_0xa303('0x23')+_0x5171df[_0xa303('0xc')]+'\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20Campaign\x20'+_0x5d37b1['id']);}return _0x163c14['CmHopper'][_0xa303('0x12')]({'phone':_0x5171df['phone'],'ContactId':_0x5171df['id'],'ListId':_0x5171df[_0xa303('0x13')],'priority':_0x5171df[_0xa303('0x14')]?_0x5171df['priority']:0x2,'scheduledat':_0x5171df[_0xa303('0x15')]?_0x5171df['scheduledat']:moment()[_0xa303('0x16')]('YYYY-MM-DD\x20HH:mm:ss'),'callback':_0x5171df[_0xa303('0x18')]?!![]:![],'callbackuniqueid':_0x5171df['callbackUniqueid']?_0x5171df[_0xa303('0x18')]:undefined,'callbackat':_0x5171df[_0xa303('0x18')]?moment()['format']('YYYY-MM-DD\x20HH:mm:ss'):undefined,'CampaignId':_0x5d37b1['id']});})['catch'](function(_0x48307d){_0x5def64(_0x48307d);});});};if(_0x5171df[_0xa303('0x13')]){_0x163c14[_0xa303('0x24')][_0xa303('0x25')]({'where':{'type':_0xa303('0x26')},'attributes':['id',_0xa303('0x27')],'include':[{'model':_0x163c14['CmList'],'as':_0xa303('0x28'),'where':{'id':_0x5171df[_0xa303('0x13')]}}]})[_0xa303('0x1b')](function(_0x49b611){if(_0x49b611){var _0x3210d1=[];for(var _0x1d21aa=0x0,_0x2c1425;_0x1d21aa<_0x49b611[_0xa303('0x29')];_0x1d21aa+=0x1){_0x2c1425=_0x49b611[_0x1d21aa][_0xa303('0x2a')]({'plain':!![]});switch(_0x2c1425[_0xa303('0x27')]){case _0xa303('0x2b'):_0x22451c(_0x2c1425)[_0xa303('0x19')](_0x46b9a7());break;case _0xa303('0x2c'):_0x452da1(_0x2c1425)[_0xa303('0x19')](_0x46b9a7());break;default:_0x163c14[_0xa303('0x10')][_0xa303('0x12')]({'phone':_0x5171df['phone'],'ContactId':_0x5171df['id'],'ListId':_0x5171df[_0xa303('0x13')],'scheduledat':_0x5171df[_0xa303('0x15')]?_0x5171df['scheduledat']:moment()[_0xa303('0x16')](_0xa303('0x17')),'priority':_0x5171df[_0xa303('0x14')]?_0x5171df[_0xa303('0x14')]:0x2,'callback':_0x5171df[_0xa303('0x18')]?!![]:![],'callbackuniqueid':_0x5171df[_0xa303('0x18')]?_0x5171df['callbackUniqueid']:undefined,'callbackat':_0x5171df[_0xa303('0x18')]?moment()[_0xa303('0x16')]('YYYY-MM-DD\x20HH:mm:ss'):undefined,'VoiceQueueId':_0x2c1425['id']})[_0xa303('0x19')](_0x46b9a7());}}}})['then'](function(){return _0x163c14[_0xa303('0x24')]['findAll']({'where':{'type':_0xa303('0x26')},'attributes':['id'],'include':[{'model':_0x163c14['CmList'],'as':_0xa303('0x2d'),'where':{'id':_0x5171df[_0xa303('0x13')]}}]})[_0xa303('0x1b')](function(_0x25c7fd){if(_0x25c7fd){var _0x4ba443=[];for(var _0x3c7bba=0x0,_0x58ba41;_0x3c7bba<_0x25c7fd[_0xa303('0x29')];_0x3c7bba+=0x1){_0x58ba41=_0x25c7fd[_0x3c7bba][_0xa303('0x2a')]({'plain':!![]});_0x163c14[_0xa303('0x2e')]['create']({'phone':_0x5171df[_0xa303('0xc')],'ContactId':_0x5171df['id'],'ListId':_0x5171df[_0xa303('0x13')],'VoiceQueueId':_0x58ba41['id']})[_0xa303('0x19')](function(_0x2b9735){logger[_0xa303('0xd')](_0xa303('0x2f'),'afterCreate',_0x2b9735['message']);});}}});})[_0xa303('0x1b')](function(){return _0x163c14[_0xa303('0x30')][_0xa303('0x25')]({'attributes':['id',_0xa303('0x27')],'include':[{'model':_0x163c14['CmList'],'as':_0xa303('0x28'),'where':{'id':_0x5171df[_0xa303('0x13')]}}]})['then'](function(_0x2fb6be){if(_0x2fb6be){var _0x21420b=[];for(var _0x17eb74=0x0,_0x16bced;_0x17eb74<_0x2fb6be['length'];_0x17eb74+=0x1){_0x16bced=_0x2fb6be[_0x17eb74][_0xa303('0x2a')]({'plain':!![]});switch(_0x16bced[_0xa303('0x27')]){case'always':_0x161ca3(_0x16bced)['catch'](_0x449c3a());break;case _0xa303('0x2c'):_0x259683(_0x16bced)[_0xa303('0x19')](_0x449c3a());break;default:_0x163c14[_0xa303('0x10')]['create']({'phone':_0x5171df[_0xa303('0xc')],'ContactId':_0x5171df['id'],'ListId':_0x5171df['ListId'],'scheduledat':_0x5171df['scheduledat']?_0x5171df[_0xa303('0x15')]:moment()['format'](_0xa303('0x17')),'priority':_0x5171df[_0xa303('0x14')]?_0x5171df[_0xa303('0x14')]:0x2,'callback':_0x5171df[_0xa303('0x18')]?!![]:![],'callbackuniqueid':_0x5171df[_0xa303('0x18')]?_0x5171df[_0xa303('0x18')]:undefined,'callbackat':_0x5171df['callbackUniqueid']?moment()[_0xa303('0x16')]('YYYY-MM-DD\x20HH:mm:ss'):undefined,'CampaignId':_0x16bced['id']})[_0xa303('0x19')](_0x449c3a());}}}});})[_0xa303('0x1b')](function(){return _0x163c14['Campaign'][_0xa303('0x25')]({'attributes':['id'],'include':[{'model':_0x163c14[_0xa303('0x31')],'as':_0xa303('0x2d'),'where':{'id':_0x5171df[_0xa303('0x13')]}}]})[_0xa303('0x1b')](function(_0x1bb9d9){if(_0x1bb9d9){var _0x3f9aa3=[];for(var _0x36f307=0x0,_0x1cb7f4;_0x36f307<_0x1bb9d9[_0xa303('0x29')];_0x36f307+=0x1){_0x1cb7f4=_0x1bb9d9[_0x36f307]['get']({'plain':!![]});_0x163c14[_0xa303('0x2e')]['create']({'phone':_0x5171df[_0xa303('0xc')],'ContactId':_0x5171df['id'],'ListId':_0x5171df['ListId'],'CampaignId':_0x1cb7f4['id']})[_0xa303('0x19')](function(_0x125697){logger[_0xa303('0xd')](_0xa303('0x2f'),'afterCreate',_0x125697[_0xa303('0x32')]);});}}});})['then'](function(){_0x5b5da6();})[_0xa303('0x19')](function(_0xe38f9d){logger['error'](_0xa303('0x2f'),_0xa303('0xe'),_0xe38f9d['message']);_0x5b5da6(_0xe38f9d);});}else{_0x5b5da6(new Error(_0xa303('0x33')));}},'afterDestroy':function(_0x27c1e0,_0xe46495,_0x57e5b7){var _0x56e6f9=_0xd5e2fc['models'];var _0x27ef31=_0x27c1e0[_0xa303('0x2a')]({'plain':!![]});return _0x56e6f9[_0xa303('0x10')]['findAll']({'raw':!![],'where':{'ListId':_0x27ef31[_0xa303('0x13')],'ContactId':_0x27ef31['id']}})[_0xa303('0x1b')](function(_0x4bc99b){if(!_[_0xa303('0x34')](_0x4bc99b)){var _0xb1a4f7=[];for(var _0x4dfe0c=0x0;_0x4dfe0c<_0x4bc99b['length'];_0x4dfe0c+=0x1){var _0x2fe91f=_0x56e6f9['CmHopper'][_0xa303('0x35')]({'where':{'ListId':_0x4bc99b[_0x4dfe0c]['ListId'],'ContactId':_0x4bc99b[_0x4dfe0c][_0xa303('0x36')],'VoiceQueueId':_0x4bc99b[_0x4dfe0c][_0xa303('0x37')],'CampaignId':_0x4bc99b[_0x4dfe0c]['CampaignId']}});_0xb1a4f7[_0xa303('0x38')](_0x2fe91f);}return BPromise[_0xa303('0x39')](_0xb1a4f7);}})[_0xa303('0x1b')](function(_0x456c56){logger[_0xa303('0x3a')]('[CmContact][afterDestroy][Succesfull]',util[_0xa303('0xf')](_0x456c56,{'showHidden':![],'depth':null}));_0x57e5b7();})['catch'](function(_0x2632c3){logger[_0xa303('0xd')]('[CmContact][afterDestroy][Error]',util[_0xa303('0xf')](_0x2632c3,{'showHidden':![],'depth':null}));_0x57e5b7(_0x2632c3);});}}});};
\ No newline at end of file
+var _0xf95a=['ListId','priority','scheduledat','format','YYYY-MM-DD\x20HH:mm:ss','callbackUniqueid','findOne','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopper\x20VoiceQueue\x20','CmHopperFinal','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20VoiceQueue\x20','catch','afterCreate','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopper\x20Campaign\x20','cmContact,\x20afterCreate,\x20','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20Campaign\x20','outbound','CmList','Lists','length','get','dialCheckDuplicateType','always','onlyIfOpen','VoiceQueue','findAll','CmHopperBlack','cmContact,\x20%s,\x20%s','message','Campaign','isEmpty','ContactId','VoiceQueueId','CampaignId','all','info','[CmContact][afterDestroy][Succesfull]','[CmContact][afterDestroy][Error]','util','api','moment','request-promise','path','../../config/environment','./cmContact.attributes','exports','define','CmContact','cm_contacts','models','error','cmContact','inspect','CmHopper','then','isNil','cmContact,\x20afterCreate\x20','phone','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20onlyIfOpen,\x20exist\x20in\x20hopper\x20VoiceQueue\x20','create'];(function(_0x311a19,_0x5bee85){var _0x6f5ebe=function(_0x52f0a1){while(--_0x52f0a1){_0x311a19['push'](_0x311a19['shift']());}};_0x6f5ebe(++_0x5bee85);}(_0xf95a,0xd6));var _0xaf95=function(_0x3533ec,_0x276cca){_0x3533ec=_0x3533ec-0x0;var _0x3ddad0=_0xf95a[_0x3533ec];return _0x3ddad0;};'use strict';var _=require('lodash');var util=require(_0xaf95('0x0'));var logger=require('../../config/logger')(_0xaf95('0x1'));var moment=require(_0xaf95('0x2'));var BPromise=require('bluebird');var rp=require(_0xaf95('0x3'));var fs=require('fs');var path=require(_0xaf95('0x4'));var rimraf=require('rimraf');var config=require(_0xaf95('0x5'));var attributes=require(_0xaf95('0x6'));module[_0xaf95('0x7')]=function(_0x247c79,_0x159c4c){return _0x247c79[_0xaf95('0x8')](_0xaf95('0x9'),attributes,{'tableName':_0xaf95('0xa'),'paranoid':!![],'indexes':[{'name':'phone','fields':['phone']}],'timestamps':!![],'hooks':{'afterCreate':function(_0x2604d6,_0x4d60c6,_0x4029c3){var _0x1d2a69=_0x247c79[_0xaf95('0xb')];var _0x101f5b=_0x2604d6['get']({'plain':!![]});function _0x41bce5(){return function(_0x1643fe){logger[_0xaf95('0xc')](_0xaf95('0xd'),'afterCreate',util[_0xaf95('0xe')](_0x1643fe,{'showHidden':![],'depth':null}));};}var _0x20ebe1=function(_0x328fb4){return new BPromise(function(_0xa799e0,_0x450c1a){_0x1d2a69[_0xaf95('0xf')]['findOne']({'where':{'phone':_0x101f5b['phone'],'VoiceQueueId':_0x328fb4['id']}})[_0xaf95('0x10')](function(_0xbe918a){if(!_[_0xaf95('0x11')](_0xbe918a)){throw new Error(_0xaf95('0x12')+_0x101f5b[_0xaf95('0x13')]+_0xaf95('0x14')+_0x328fb4['id']);}return _0x1d2a69[_0xaf95('0xf')][_0xaf95('0x15')]({'phone':_0x101f5b[_0xaf95('0x13')],'ContactId':_0x101f5b['id'],'ListId':_0x101f5b[_0xaf95('0x16')],'priority':_0x101f5b['priority']?_0x101f5b[_0xaf95('0x17')]:0x2,'scheduledat':_0x101f5b['scheduledat']?_0x101f5b[_0xaf95('0x18')]:moment()[_0xaf95('0x19')](_0xaf95('0x1a')),'callback':_0x101f5b[_0xaf95('0x1b')]?!![]:![],'callbackuniqueid':_0x101f5b[_0xaf95('0x1b')]?_0x101f5b[_0xaf95('0x1b')]:undefined,'callbackat':_0x101f5b[_0xaf95('0x1b')]?moment()[_0xaf95('0x19')]('YYYY-MM-DD\x20HH:mm:ss'):undefined,'VoiceQueueId':_0x328fb4['id']});})['catch'](function(_0x5de666){_0x450c1a(_0x5de666);});});};var _0x29c0fa=function(_0x4d5685){return new BPromise(function(_0x3d57ad,_0x16f97d){_0x1d2a69[_0xaf95('0xf')][_0xaf95('0x1c')]({'where':{'phone':_0x101f5b[_0xaf95('0x13')],'VoiceQueueId':_0x4d5685['id']}})[_0xaf95('0x10')](function(_0x4c6cca){if(!_[_0xaf95('0x11')](_0x4c6cca)){throw new Error(_0xaf95('0x12')+_0x101f5b[_0xaf95('0x13')]+_0xaf95('0x1d')+_0x4d5685['id']);}return _0x1d2a69[_0xaf95('0x1e')][_0xaf95('0x1c')]({'where':{'calleridnum':_0x101f5b['phone'],'VoiceQueueId':_0x4d5685['id']}});})[_0xaf95('0x10')](function(_0x4e847c){if(!_[_0xaf95('0x11')](_0x4e847c)){throw new Error('cmContact,\x20afterCreate,\x20'+_0x101f5b[_0xaf95('0x13')]+_0xaf95('0x1f')+_0x4d5685['id']);}return _0x1d2a69[_0xaf95('0xf')][_0xaf95('0x15')]({'phone':_0x101f5b[_0xaf95('0x13')],'ContactId':_0x101f5b['id'],'ListId':_0x101f5b['ListId'],'priority':_0x101f5b[_0xaf95('0x17')]?_0x101f5b[_0xaf95('0x17')]:0x2,'scheduledat':_0x101f5b[_0xaf95('0x18')]?_0x101f5b[_0xaf95('0x18')]:moment()[_0xaf95('0x19')](_0xaf95('0x1a')),'callback':_0x101f5b[_0xaf95('0x1b')]?!![]:![],'callbackuniqueid':_0x101f5b[_0xaf95('0x1b')]?_0x101f5b[_0xaf95('0x1b')]:undefined,'callbackat':_0x101f5b[_0xaf95('0x1b')]?moment()[_0xaf95('0x19')](_0xaf95('0x1a')):undefined,'VoiceQueueId':_0x4d5685['id']});})[_0xaf95('0x20')](function(_0x2b67d0){_0x16f97d(_0x2b67d0);});});};function _0x5af070(){return function(_0x19555d){logger['error']('cmContact',_0xaf95('0x21'),util['inspect'](_0x19555d,{'showHidden':![],'depth':null}));};}var _0x8c12c0=function(_0x4d36f2){return new BPromise(function(_0x4f5d05,_0x363939){_0x1d2a69[_0xaf95('0xf')][_0xaf95('0x1c')]({'where':{'phone':_0x101f5b[_0xaf95('0x13')],'CampaignId':_0x4d36f2['id']}})[_0xaf95('0x10')](function(_0x241aa0){if(!_[_0xaf95('0x11')](_0x241aa0)){throw new Error(_0xaf95('0x12')+_0x101f5b[_0xaf95('0x13')]+'\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20onlyIfOpen,\x20exist\x20in\x20hopper\x20Campaign\x20'+_0x4d36f2['id']);}return _0x1d2a69[_0xaf95('0xf')][_0xaf95('0x15')]({'phone':_0x101f5b[_0xaf95('0x13')],'ContactId':_0x101f5b['id'],'ListId':_0x101f5b[_0xaf95('0x16')],'priority':_0x101f5b['priority']?_0x101f5b['priority']:0x2,'scheduledat':_0x101f5b[_0xaf95('0x18')]?_0x101f5b[_0xaf95('0x18')]:moment()[_0xaf95('0x19')](_0xaf95('0x1a')),'callback':_0x101f5b[_0xaf95('0x1b')]?!![]:![],'callbackuniqueid':_0x101f5b['callbackUniqueid']?_0x101f5b['callbackUniqueid']:undefined,'callbackat':_0x101f5b[_0xaf95('0x1b')]?moment()[_0xaf95('0x19')](_0xaf95('0x1a')):undefined,'CampaignId':_0x4d36f2['id']});})[_0xaf95('0x20')](function(_0x302150){_0x363939(_0x302150);});});};var _0x4865ff=function(_0x18a842){return new BPromise(function(_0xceecc7,_0xd2d2f7){_0x1d2a69[_0xaf95('0xf')][_0xaf95('0x1c')]({'where':{'phone':_0x101f5b[_0xaf95('0x13')],'CampaignId':_0x18a842['id']}})[_0xaf95('0x10')](function(_0x5134a6){if(!_['isNil'](_0x5134a6)){throw new Error(_0xaf95('0x12')+_0x101f5b[_0xaf95('0x13')]+_0xaf95('0x22')+_0x18a842['id']);}return _0x1d2a69['CmHopperFinal'][_0xaf95('0x1c')]({'where':{'calleridnum':_0x101f5b['phone'],'CampaignId':_0x18a842['id']}});})[_0xaf95('0x10')](function(_0x3e2de4){if(!_[_0xaf95('0x11')](_0x3e2de4)){throw new Error(_0xaf95('0x23')+_0x101f5b[_0xaf95('0x13')]+_0xaf95('0x24')+_0x18a842['id']);}return _0x1d2a69[_0xaf95('0xf')][_0xaf95('0x15')]({'phone':_0x101f5b[_0xaf95('0x13')],'ContactId':_0x101f5b['id'],'ListId':_0x101f5b['ListId'],'priority':_0x101f5b[_0xaf95('0x17')]?_0x101f5b[_0xaf95('0x17')]:0x2,'scheduledat':_0x101f5b['scheduledat']?_0x101f5b[_0xaf95('0x18')]:moment()[_0xaf95('0x19')](_0xaf95('0x1a')),'callback':_0x101f5b['callbackUniqueid']?!![]:![],'callbackuniqueid':_0x101f5b[_0xaf95('0x1b')]?_0x101f5b[_0xaf95('0x1b')]:undefined,'callbackat':_0x101f5b[_0xaf95('0x1b')]?moment()[_0xaf95('0x19')](_0xaf95('0x1a')):undefined,'CampaignId':_0x18a842['id']});})[_0xaf95('0x20')](function(_0x20002f){_0xd2d2f7(_0x20002f);});});};if(_0x101f5b[_0xaf95('0x16')]){_0x1d2a69['VoiceQueue']['findAll']({'where':{'type':_0xaf95('0x25')},'attributes':['id','dialCheckDuplicateType'],'include':[{'model':_0x1d2a69[_0xaf95('0x26')],'as':_0xaf95('0x27'),'where':{'id':_0x101f5b[_0xaf95('0x16')]}}]})['then'](function(_0x54d61b){if(_0x54d61b){var _0xd9c2d=[];for(var _0x19b1ba=0x0,_0xbdc73;_0x19b1ba<_0x54d61b[_0xaf95('0x28')];_0x19b1ba+=0x1){_0xbdc73=_0x54d61b[_0x19b1ba][_0xaf95('0x29')]({'plain':!![]});switch(_0xbdc73[_0xaf95('0x2a')]){case _0xaf95('0x2b'):_0x29c0fa(_0xbdc73)[_0xaf95('0x20')](_0x41bce5());break;case _0xaf95('0x2c'):_0x20ebe1(_0xbdc73)[_0xaf95('0x20')](_0x41bce5());break;default:_0x1d2a69[_0xaf95('0xf')][_0xaf95('0x15')]({'phone':_0x101f5b['phone'],'ContactId':_0x101f5b['id'],'ListId':_0x101f5b[_0xaf95('0x16')],'scheduledat':_0x101f5b['scheduledat']?_0x101f5b['scheduledat']:moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'priority':_0x101f5b[_0xaf95('0x17')]?_0x101f5b['priority']:0x2,'callback':_0x101f5b['callbackUniqueid']?!![]:![],'callbackuniqueid':_0x101f5b[_0xaf95('0x1b')]?_0x101f5b[_0xaf95('0x1b')]:undefined,'callbackat':_0x101f5b[_0xaf95('0x1b')]?moment()[_0xaf95('0x19')](_0xaf95('0x1a')):undefined,'VoiceQueueId':_0xbdc73['id']})['catch'](_0x41bce5());}}}})[_0xaf95('0x10')](function(){return _0x1d2a69[_0xaf95('0x2d')][_0xaf95('0x2e')]({'where':{'type':_0xaf95('0x25')},'attributes':['id'],'include':[{'model':_0x1d2a69['CmList'],'as':'BlackLists','where':{'id':_0x101f5b[_0xaf95('0x16')]}}]})[_0xaf95('0x10')](function(_0xb4863b){if(_0xb4863b){var _0x1d2442=[];for(var _0x4e4681=0x0,_0x5bf1aa;_0x4e4681<_0xb4863b[_0xaf95('0x28')];_0x4e4681+=0x1){_0x5bf1aa=_0xb4863b[_0x4e4681][_0xaf95('0x29')]({'plain':!![]});_0x1d2a69[_0xaf95('0x2f')]['create']({'phone':_0x101f5b[_0xaf95('0x13')],'ContactId':_0x101f5b['id'],'ListId':_0x101f5b[_0xaf95('0x16')],'VoiceQueueId':_0x5bf1aa['id']})['catch'](function(_0x5880fc){logger['error'](_0xaf95('0x30'),_0xaf95('0x21'),_0x5880fc[_0xaf95('0x31')]);});}}});})[_0xaf95('0x10')](function(){return _0x1d2a69[_0xaf95('0x32')]['findAll']({'attributes':['id',_0xaf95('0x2a')],'include':[{'model':_0x1d2a69[_0xaf95('0x26')],'as':_0xaf95('0x27'),'where':{'id':_0x101f5b[_0xaf95('0x16')]}}]})[_0xaf95('0x10')](function(_0x409ee3){if(_0x409ee3){var _0x4d0c8d=[];for(var _0x585862=0x0,_0x331b32;_0x585862<_0x409ee3['length'];_0x585862+=0x1){_0x331b32=_0x409ee3[_0x585862]['get']({'plain':!![]});switch(_0x331b32[_0xaf95('0x2a')]){case'always':_0x4865ff(_0x331b32)[_0xaf95('0x20')](_0x5af070());break;case _0xaf95('0x2c'):_0x8c12c0(_0x331b32)['catch'](_0x5af070());break;default:_0x1d2a69[_0xaf95('0xf')][_0xaf95('0x15')]({'phone':_0x101f5b['phone'],'ContactId':_0x101f5b['id'],'ListId':_0x101f5b[_0xaf95('0x16')],'scheduledat':_0x101f5b[_0xaf95('0x18')]?_0x101f5b[_0xaf95('0x18')]:moment()[_0xaf95('0x19')]('YYYY-MM-DD\x20HH:mm:ss'),'priority':_0x101f5b[_0xaf95('0x17')]?_0x101f5b['priority']:0x2,'callback':_0x101f5b[_0xaf95('0x1b')]?!![]:![],'callbackuniqueid':_0x101f5b[_0xaf95('0x1b')]?_0x101f5b[_0xaf95('0x1b')]:undefined,'callbackat':_0x101f5b[_0xaf95('0x1b')]?moment()[_0xaf95('0x19')](_0xaf95('0x1a')):undefined,'CampaignId':_0x331b32['id']})['catch'](_0x5af070());}}}});})[_0xaf95('0x10')](function(){return _0x1d2a69['Campaign'][_0xaf95('0x2e')]({'attributes':['id'],'include':[{'model':_0x1d2a69[_0xaf95('0x26')],'as':'BlackLists','where':{'id':_0x101f5b[_0xaf95('0x16')]}}]})[_0xaf95('0x10')](function(_0x38623f){if(_0x38623f){var _0x1ecdf9=[];for(var _0x322f7d=0x0,_0x2cda28;_0x322f7d<_0x38623f['length'];_0x322f7d+=0x1){_0x2cda28=_0x38623f[_0x322f7d]['get']({'plain':!![]});_0x1d2a69[_0xaf95('0x2f')][_0xaf95('0x15')]({'phone':_0x101f5b[_0xaf95('0x13')],'ContactId':_0x101f5b['id'],'ListId':_0x101f5b['ListId'],'CampaignId':_0x2cda28['id']})[_0xaf95('0x20')](function(_0x2fac7d){logger[_0xaf95('0xc')](_0xaf95('0x30'),_0xaf95('0x21'),_0x2fac7d[_0xaf95('0x31')]);});}}});})[_0xaf95('0x10')](function(){_0x4029c3();})[_0xaf95('0x20')](function(_0x5576ae){logger[_0xaf95('0xc')](_0xaf95('0x30'),_0xaf95('0x21'),_0x5576ae['message']);_0x4029c3(_0x5576ae);});}else{_0x4029c3(new Error('List\x20not\x20found'));}},'afterDestroy':function(_0x1a95e4,_0x516a65,_0x5e5f18){var _0x5caba8=_0x247c79[_0xaf95('0xb')];var _0x262d9a=_0x1a95e4['get']({'plain':!![]});return _0x5caba8['CmHopper'][_0xaf95('0x2e')]({'raw':!![],'where':{'ListId':_0x262d9a[_0xaf95('0x16')],'ContactId':_0x262d9a['id']}})['then'](function(_0x3a3290){if(!_[_0xaf95('0x33')](_0x3a3290)){var _0x2919be=[];for(var _0x51be34=0x0;_0x51be34<_0x3a3290[_0xaf95('0x28')];_0x51be34+=0x1){var _0x4a297a=_0x5caba8[_0xaf95('0xf')]['destroy']({'where':{'ListId':_0x3a3290[_0x51be34]['ListId'],'ContactId':_0x3a3290[_0x51be34][_0xaf95('0x34')],'VoiceQueueId':_0x3a3290[_0x51be34][_0xaf95('0x35')],'CampaignId':_0x3a3290[_0x51be34][_0xaf95('0x36')]}});_0x2919be['push'](_0x4a297a);}return BPromise[_0xaf95('0x37')](_0x2919be);}})[_0xaf95('0x10')](function(_0x5c2749){logger[_0xaf95('0x38')](_0xaf95('0x39'),util[_0xaf95('0xe')](_0x5c2749,{'showHidden':![],'depth':null}));_0x5e5f18();})['catch'](function(_0x296a51){logger[_0xaf95('0xc')](_0xaf95('0x3a'),util[_0xaf95('0xe')](_0x296a51,{'showHidden':![],'depth':null}));_0x5e5f18(_0x296a51);});}}});};
\ No newline at end of file
index cd4116a..cf16460 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0e98=['code','message','catch','CmContact','find','raw','options','where','attributes','include','model','map','ShowCmContact','stringify','CreateCmContact','create','body','util','moment','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','./cmContact.socket','register','request','then','info','CmContact,\x20%s,\x20%s','request\x20sent','debug','CmContact,\x20%s,\x20%s,\x20%s','error'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x0e98,0xb5));var _0x80e9=function(_0x1ee3a3,_0x282e52){_0x1ee3a3=_0x1ee3a3-0x0;var _0x325665=_0x0e98[_0x1ee3a3];return _0x325665;};'use strict';var _=require('lodash');var util=require(_0x80e9('0x0'));var moment=require(_0x80e9('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x80e9('0x2'));var db=require(_0x80e9('0x3'))['db'];var utils=require(_0x80e9('0x4'));var logger=require(_0x80e9('0x5'))('rpc');var config=require(_0x80e9('0x6'));var jayson=require(_0x80e9('0x7'));var client=jayson[_0x80e9('0x8')][_0x80e9('0x9')]({'port':0x232a});config[_0x80e9('0xa')]=_[_0x80e9('0xb')](config[_0x80e9('0xa')],{'host':_0x80e9('0xc'),'port':0x18eb});var socket=require(_0x80e9('0xd'))(new Redis(config[_0x80e9('0xa')]));require(_0x80e9('0xe'))[_0x80e9('0xf')](socket);function respondWithRpcPromise(_0x1600bc,_0x252dd9,_0x2d44df){return new BPromise(function(_0xaab3c9,_0x5f3cc7){return client[_0x80e9('0x10')](_0x1600bc,_0x2d44df)[_0x80e9('0x11')](function(_0x1edd0d){logger[_0x80e9('0x12')](_0x80e9('0x13'),_0x252dd9,_0x80e9('0x14'));logger[_0x80e9('0x15')](_0x80e9('0x16'),_0x252dd9,_0x80e9('0x14'),JSON['stringify'](_0x1edd0d));if(_0x1edd0d[_0x80e9('0x17')]){if(_0x1edd0d['error'][_0x80e9('0x18')]===0x1f4){logger[_0x80e9('0x17')]('CmContact,\x20%s,\x20%s',_0x252dd9,_0x1edd0d[_0x80e9('0x17')][_0x80e9('0x19')]);return _0x5f3cc7(_0x1edd0d[_0x80e9('0x17')]['message']);}logger['error'](_0x80e9('0x13'),_0x252dd9,_0x1edd0d[_0x80e9('0x17')][_0x80e9('0x19')]);return _0xaab3c9(_0x1edd0d[_0x80e9('0x17')][_0x80e9('0x19')]);}else{logger['info'](_0x80e9('0x13'),_0x252dd9,'request\x20sent');_0xaab3c9(_0x1edd0d['result'][_0x80e9('0x19')]);}})[_0x80e9('0x1a')](function(_0x54e5ce){logger[_0x80e9('0x17')](_0x80e9('0x13'),_0x252dd9,_0x54e5ce);_0x5f3cc7(_0x54e5ce);});});}exports['ShowCmContact']=function(_0xdbd04b){var _0x28a9ee=this;return new Promise(function(_0x388caa,_0x323261){return db[_0x80e9('0x1b')][_0x80e9('0x1c')]({'raw':_0xdbd04b['options']?_0xdbd04b['options'][_0x80e9('0x1d')]===undefined?!![]:![]:!![],'where':_0xdbd04b[_0x80e9('0x1e')]?_0xdbd04b[_0x80e9('0x1e')][_0x80e9('0x1f')]||null:null,'attributes':_0xdbd04b['options']?_0xdbd04b['options'][_0x80e9('0x20')]||null:null,'include':_0xdbd04b[_0x80e9('0x1e')]?_0xdbd04b[_0x80e9('0x1e')][_0x80e9('0x21')]?_['map'](_0xdbd04b['options'][_0x80e9('0x21')],function(_0x3f2b2a){return{'model':db[_0x3f2b2a[_0x80e9('0x22')]],'as':_0x3f2b2a['as'],'attributes':_0x3f2b2a['attributes'],'include':_0x3f2b2a[_0x80e9('0x21')]?_[_0x80e9('0x23')](_0x3f2b2a['include'],function(_0x5e7206){return{'model':db[_0x5e7206[_0x80e9('0x22')]],'as':_0x5e7206['as'],'attributes':_0x5e7206[_0x80e9('0x20')],'include':_0x5e7206[_0x80e9('0x21')]?_[_0x80e9('0x23')](_0x5e7206['include'],function(_0x97d7ad){return{'model':db[_0x97d7ad['model']],'as':_0x97d7ad['as'],'attributes':_0x97d7ad[_0x80e9('0x20')]};}):[]};}):[]};}):[]:[]})[_0x80e9('0x11')](function(_0x45e676){logger[_0x80e9('0x12')](_0x80e9('0x24'),_0xdbd04b);logger['debug'](_0x80e9('0x24'),_0xdbd04b,JSON[_0x80e9('0x25')](_0x45e676));_0x388caa(_0x45e676);})[_0x80e9('0x1a')](function(_0x524174){logger[_0x80e9('0x17')](_0x80e9('0x24'),_0x524174[_0x80e9('0x19')],_0xdbd04b);_0x323261(_0x28a9ee[_0x80e9('0x17')](0x1f4,_0x524174[_0x80e9('0x19')]));});});};exports[_0x80e9('0x26')]=function(_0x5ddff9){var _0x2e8f01=this;return new Promise(function(_0x350b07,_0x58a875){return db[_0x80e9('0x1b')][_0x80e9('0x27')](_0x5ddff9[_0x80e9('0x28')],{'raw':_0x5ddff9[_0x80e9('0x1e')]?_0x5ddff9['options'][_0x80e9('0x1d')]===undefined?!![]:![]:!![]})['then'](function(_0x3fbc38){logger['info'](_0x80e9('0x26'),_0x5ddff9);logger[_0x80e9('0x15')](_0x80e9('0x26'),_0x5ddff9,JSON['stringify'](_0x3fbc38));_0x350b07(_0x3fbc38);})['catch'](function(_0x20122b){logger['error']('CreateCmContact',_0x20122b[_0x80e9('0x19')],_0x5ddff9);_0x58a875(_0x2e8f01[_0x80e9('0x17')](0x1f4,_0x20122b['message']));});});};
\ No newline at end of file
+var _0x3b21=['localhost','register','request','then','info','CmContact,\x20%s,\x20%s','request\x20sent','debug','CmContact,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','ShowCmContact','find','options','raw','where','attributes','map','include','model','stringify','CreateCmContact','CmContact','create','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','defaults'];(function(_0x22f635,_0x4a0def){var _0x41b2b3=function(_0x3ad6cf){while(--_0x3ad6cf){_0x22f635['push'](_0x22f635['shift']());}};_0x41b2b3(++_0x4a0def);}(_0x3b21,0x195));var _0x13b2=function(_0x23b1f6,_0x18bdc7){_0x23b1f6=_0x23b1f6-0x0;var _0xc99f65=_0x3b21[_0x23b1f6];return _0xc99f65;};'use strict';var _=require(_0x13b2('0x0'));var util=require(_0x13b2('0x1'));var moment=require(_0x13b2('0x2'));var BPromise=require('bluebird');var rs=require(_0x13b2('0x3'));var fs=require('fs');var Redis=require(_0x13b2('0x4'));var db=require(_0x13b2('0x5'))['db'];var utils=require(_0x13b2('0x6'));var logger=require(_0x13b2('0x7'))(_0x13b2('0x8'));var config=require(_0x13b2('0x9'));var jayson=require(_0x13b2('0xa'));var client=jayson[_0x13b2('0xb')][_0x13b2('0xc')]({'port':0x232a});config[_0x13b2('0xd')]=_[_0x13b2('0xe')](config[_0x13b2('0xd')],{'host':_0x13b2('0xf'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x13b2('0xd')]));require('./cmContact.socket')[_0x13b2('0x10')](socket);function respondWithRpcPromise(_0x264a8e,_0x437930,_0x5d0635){return new BPromise(function(_0x580b52,_0x265305){return client[_0x13b2('0x11')](_0x264a8e,_0x5d0635)[_0x13b2('0x12')](function(_0x4685e6){logger[_0x13b2('0x13')](_0x13b2('0x14'),_0x437930,_0x13b2('0x15'));logger[_0x13b2('0x16')](_0x13b2('0x17'),_0x437930,'request\x20sent',JSON['stringify'](_0x4685e6));if(_0x4685e6[_0x13b2('0x18')]){if(_0x4685e6['error'][_0x13b2('0x19')]===0x1f4){logger[_0x13b2('0x18')](_0x13b2('0x14'),_0x437930,_0x4685e6['error'][_0x13b2('0x1a')]);return _0x265305(_0x4685e6[_0x13b2('0x18')][_0x13b2('0x1a')]);}logger[_0x13b2('0x18')](_0x13b2('0x14'),_0x437930,_0x4685e6['error'][_0x13b2('0x1a')]);return _0x580b52(_0x4685e6['error'][_0x13b2('0x1a')]);}else{logger[_0x13b2('0x13')](_0x13b2('0x14'),_0x437930,_0x13b2('0x15'));_0x580b52(_0x4685e6[_0x13b2('0x1b')][_0x13b2('0x1a')]);}})[_0x13b2('0x1c')](function(_0x95aebc){logger[_0x13b2('0x18')](_0x13b2('0x14'),_0x437930,_0x95aebc);_0x265305(_0x95aebc);});});}exports[_0x13b2('0x1d')]=function(_0x46749b){var _0x20d945=this;return new Promise(function(_0x511da3,_0xda89b0){return db['CmContact'][_0x13b2('0x1e')]({'raw':_0x46749b[_0x13b2('0x1f')]?_0x46749b[_0x13b2('0x1f')][_0x13b2('0x20')]===undefined?!![]:![]:!![],'where':_0x46749b[_0x13b2('0x1f')]?_0x46749b[_0x13b2('0x1f')][_0x13b2('0x21')]||null:null,'attributes':_0x46749b[_0x13b2('0x1f')]?_0x46749b[_0x13b2('0x1f')][_0x13b2('0x22')]||null:null,'include':_0x46749b[_0x13b2('0x1f')]?_0x46749b[_0x13b2('0x1f')]['include']?_[_0x13b2('0x23')](_0x46749b[_0x13b2('0x1f')][_0x13b2('0x24')],function(_0x18b47a){return{'model':db[_0x18b47a[_0x13b2('0x25')]],'as':_0x18b47a['as'],'attributes':_0x18b47a[_0x13b2('0x22')],'include':_0x18b47a[_0x13b2('0x24')]?_[_0x13b2('0x23')](_0x18b47a[_0x13b2('0x24')],function(_0x4fee40){return{'model':db[_0x4fee40['model']],'as':_0x4fee40['as'],'attributes':_0x4fee40[_0x13b2('0x22')],'include':_0x4fee40['include']?_[_0x13b2('0x23')](_0x4fee40[_0x13b2('0x24')],function(_0x55b23e){return{'model':db[_0x55b23e[_0x13b2('0x25')]],'as':_0x55b23e['as'],'attributes':_0x55b23e['attributes']};}):[]};}):[]};}):[]:[]})[_0x13b2('0x12')](function(_0x54dec9){logger[_0x13b2('0x13')](_0x13b2('0x1d'),_0x46749b);logger[_0x13b2('0x16')]('ShowCmContact',_0x46749b,JSON[_0x13b2('0x26')](_0x54dec9));_0x511da3(_0x54dec9);})[_0x13b2('0x1c')](function(_0xc08192){logger[_0x13b2('0x18')](_0x13b2('0x1d'),_0xc08192[_0x13b2('0x1a')],_0x46749b);_0xda89b0(_0x20d945[_0x13b2('0x18')](0x1f4,_0xc08192[_0x13b2('0x1a')]));});});};exports[_0x13b2('0x27')]=function(_0x19fb0a){var _0x11940a=this;return new Promise(function(_0x48754c,_0x1cbc53){return db[_0x13b2('0x28')][_0x13b2('0x29')](_0x19fb0a['body'],{'raw':_0x19fb0a[_0x13b2('0x1f')]?_0x19fb0a[_0x13b2('0x1f')]['raw']===undefined?!![]:![]:!![]})[_0x13b2('0x12')](function(_0x7ddd53){logger[_0x13b2('0x13')]('CreateCmContact',_0x19fb0a);logger[_0x13b2('0x16')](_0x13b2('0x27'),_0x19fb0a,JSON[_0x13b2('0x26')](_0x7ddd53));_0x48754c(_0x7ddd53);})['catch'](function(_0x4dcf76){logger[_0x13b2('0x18')]('CreateCmContact',_0x4dcf76[_0x13b2('0x1a')],_0x19fb0a);_0x1cbc53(_0x11940a[_0x13b2('0x18')](0x1f4,_0x4dcf76[_0x13b2('0x1a')]));});});};
\ No newline at end of file
index 3ee1071..e06285d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x303a=['removeListener','register','length','./cmContact.events','remove','update','emit'];(function(_0xf39707,_0x271802){var _0x5190a7=function(_0x1e0457){while(--_0x1e0457){_0xf39707['push'](_0xf39707['shift']());}};_0x5190a7(++_0x271802);}(_0x303a,0x1a0));var _0xa303=function(_0x579cce,_0x31b8d4){_0x579cce=_0x579cce-0x0;var _0x2ea60a=_0x303a[_0x579cce];return _0x2ea60a;};'use strict';var CmContactEvents=require(_0xa303('0x0'));var events=['save',_0xa303('0x1'),_0xa303('0x2')];function createListener(_0x36e548,_0x19d27a){return function(_0x594b49){_0x19d27a[_0xa303('0x3')](_0x36e548,_0x594b49);};}function removeListener(_0x26b47c,_0x38a354){return function(){CmContactEvents[_0xa303('0x4')](_0x26b47c,_0x38a354);};}exports[_0xa303('0x5')]=function(_0x1c7ee9){for(var _0x2bc3d7=0x0,_0x3f61f1=events[_0xa303('0x6')];_0x2bc3d7<_0x3f61f1;_0x2bc3d7++){var _0x5d95fd=events[_0x2bc3d7];var _0x51e1ee=createListener('cmContact:'+_0x5d95fd,_0x1c7ee9);CmContactEvents['on'](_0x5d95fd,_0x51e1ee);}};
\ No newline at end of file
+var _0x00b3=['cmContact:','./cmContact.events','update','emit','register','length'];(function(_0x254d79,_0x33a620){var _0x24fa79=function(_0x38dc13){while(--_0x38dc13){_0x254d79['push'](_0x254d79['shift']());}};_0x24fa79(++_0x33a620);}(_0x00b3,0x97));var _0x300b=function(_0x10f359,_0x188403){_0x10f359=_0x10f359-0x0;var _0x40a757=_0x00b3[_0x10f359];return _0x40a757;};'use strict';var CmContactEvents=require(_0x300b('0x0'));var events=['save','remove',_0x300b('0x1')];function createListener(_0x46c812,_0x4aa4f4){return function(_0x5a96e9){_0x4aa4f4[_0x300b('0x2')](_0x46c812,_0x5a96e9);};}function removeListener(_0x29e653,_0x2feba7){return function(){CmContactEvents['removeListener'](_0x29e653,_0x2feba7);};}exports[_0x300b('0x3')]=function(_0xbceeb8){for(var _0x34a5cd=0x0,_0x4294fe=events[_0x300b('0x4')];_0x34a5cd<_0x4294fe;_0x34a5cd++){var _0x2cf1c5=events[_0x34a5cd];var _0x103922=createListener(_0x300b('0x5')+_0x2cf1c5,_0xbceeb8);CmContactEvents['on'](_0x2cf1c5,_0x103922);}};
\ No newline at end of file
index 18d70f0..b7f857e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe4e7=['replace','format','%s-%s%s','basename','now','extname','/csv','single','file','uploadCsv','/upload/:id','import','delete','destroy','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmContact.controller','isAuthenticated','index','get','/describe','describe','/:id','/:id/tags','/:id/hoppers','/:id/hopper_histories','getHopperHistories','getHopperFinals','getJscriptySessions','post','/merge','merge','/create_many','setTags','diskStorage','join','root','server/files/tmp','originalname'];(function(_0x242e7d,_0x4545ac){var _0x2caafa=function(_0x58cf60){while(--_0x58cf60){_0x242e7d['push'](_0x242e7d['shift']());}};_0x2caafa(++_0x4545ac);}(_0xe4e7,0x19a));var _0x7e4e=function(_0x19982f,_0x518412){_0x19982f=_0x19982f-0x0;var _0x13f7d1=_0xe4e7[_0x19982f];return _0x13f7d1;};'use strict';var multer=require(_0x7e4e('0x0'));var util=require(_0x7e4e('0x1'));var path=require(_0x7e4e('0x2'));var timeout=require('connect-timeout');var express=require(_0x7e4e('0x3'));var router=express['Router']();var auth=require(_0x7e4e('0x4'));var interaction=require(_0x7e4e('0x5'));var config=require(_0x7e4e('0x6'));var controller=require(_0x7e4e('0x7'));router['get']('/',auth[_0x7e4e('0x8')](),controller[_0x7e4e('0x9')]);router[_0x7e4e('0xa')](_0x7e4e('0xb'),auth['isAuthenticated'](),controller[_0x7e4e('0xc')]);router['get'](_0x7e4e('0xd'),auth[_0x7e4e('0x8')](),controller['show']);router['get'](_0x7e4e('0xe'),auth['isAuthenticated'](),controller['getTags']);router[_0x7e4e('0xa')](_0x7e4e('0xf'),auth[_0x7e4e('0x8')](),controller['getHoppers']);router[_0x7e4e('0xa')](_0x7e4e('0x10'),auth['isAuthenticated'](),controller[_0x7e4e('0x11')]);router[_0x7e4e('0xa')]('/:id/hopper_finals',auth[_0x7e4e('0x8')](),controller[_0x7e4e('0x12')]);router[_0x7e4e('0xa')]('/:id/jscripty_sessions',auth[_0x7e4e('0x8')](),controller[_0x7e4e('0x13')]);router[_0x7e4e('0x14')](_0x7e4e('0x15'),auth['isAuthenticated'](),controller[_0x7e4e('0x16')]);router[_0x7e4e('0x14')]('/',auth['isAuthenticated'](),controller['create']);router[_0x7e4e('0x14')](_0x7e4e('0x17'),auth['isAuthenticated'](),controller['bulkCreate']);router['post'](_0x7e4e('0xe'),auth[_0x7e4e('0x8')](),controller[_0x7e4e('0x18')]);var upload=multer({'storage':multer[_0x7e4e('0x19')]({'destination':function(_0x8a9bbc,_0x41542f,_0x29cfc7){_0x29cfc7(null,path[_0x7e4e('0x1a')](config[_0x7e4e('0x1b')],_0x7e4e('0x1c')));},'filename':function(_0x2043e4,_0x594f4f,_0x49eba6){_0x594f4f[_0x7e4e('0x1d')]=_0x594f4f['originalname'][_0x7e4e('0x1e')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x49eba6(null,util[_0x7e4e('0x1f')](_0x7e4e('0x20'),path[_0x7e4e('0x21')](_0x594f4f['originalname'],path['extname'](_0x594f4f[_0x7e4e('0x1d')])),Date[_0x7e4e('0x22')](),path[_0x7e4e('0x23')](_0x594f4f[_0x7e4e('0x1d')])));}})});router['post'](_0x7e4e('0x24'),upload[_0x7e4e('0x25')](_0x7e4e('0x26')),controller[_0x7e4e('0x27')]);var upload=multer({'storage':multer[_0x7e4e('0x19')]({'destination':function(_0x1dd9cf,_0xffa509,_0x5858c9){_0x5858c9(null,path[_0x7e4e('0x1a')](config[_0x7e4e('0x1b')],_0x7e4e('0x1c')));},'filename':function(_0x280b42,_0x5af4f6,_0x1a8ded){_0x5af4f6[_0x7e4e('0x1d')]=_0x5af4f6[_0x7e4e('0x1d')][_0x7e4e('0x1e')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x1a8ded(null,util[_0x7e4e('0x1f')](_0x7e4e('0x20'),path[_0x7e4e('0x21')](_0x5af4f6[_0x7e4e('0x1d')],path[_0x7e4e('0x23')](_0x5af4f6[_0x7e4e('0x1d')])),Date[_0x7e4e('0x22')](),path[_0x7e4e('0x23')](_0x5af4f6[_0x7e4e('0x1d')])));}})});router[_0x7e4e('0x14')]('/upload',upload[_0x7e4e('0x25')](_0x7e4e('0x26')),controller['upload']);router[_0x7e4e('0x14')](_0x7e4e('0x28'),auth[_0x7e4e('0x8')](),controller[_0x7e4e('0x29')]);router['put'](_0x7e4e('0xd'),auth[_0x7e4e('0x8')](),controller['update']);router[_0x7e4e('0x2a')](_0x7e4e('0xd'),auth[_0x7e4e('0x8')](),controller[_0x7e4e('0x2b')]);module['exports']=router;
\ No newline at end of file
+var _0x0e3d=['getTags','getHoppers','/:id/hopper_histories','getHopperHistories','/:id/hopper_finals','getHopperFinals','/:id/jscripty_sessions','getJscriptySessions','post','/merge','merge','create','/create_many','bulkCreate','setTags','server/files/tmp','originalname','replace','format','%s-%s%s','basename','extname','file','uploadCsv','diskStorage','root','now','single','/upload/:id','put','update','delete','destroy','exports','multer','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','/:id','show','/:id/tags'];(function(_0x34a9cb,_0x54f54b){var _0x2c65f8=function(_0x3dd9c3){while(--_0x3dd9c3){_0x34a9cb['push'](_0x34a9cb['shift']());}};_0x2c65f8(++_0x54f54b);}(_0x0e3d,0x16b));var _0xd0e3=function(_0x45b73b,_0x3908f4){_0x45b73b=_0x45b73b-0x0;var _0x13cfd2=_0x0e3d[_0x45b73b];return _0x13cfd2;};'use strict';var multer=require(_0xd0e3('0x0'));var util=require('util');var path=require(_0xd0e3('0x1'));var timeout=require('connect-timeout');var express=require(_0xd0e3('0x2'));var router=express['Router']();var auth=require(_0xd0e3('0x3'));var interaction=require(_0xd0e3('0x4'));var config=require(_0xd0e3('0x5'));var controller=require('./cmContact.controller');router[_0xd0e3('0x6')]('/',auth[_0xd0e3('0x7')](),controller[_0xd0e3('0x8')]);router['get'](_0xd0e3('0x9'),auth[_0xd0e3('0x7')](),controller['describe']);router['get'](_0xd0e3('0xa'),auth[_0xd0e3('0x7')](),controller[_0xd0e3('0xb')]);router[_0xd0e3('0x6')](_0xd0e3('0xc'),auth[_0xd0e3('0x7')](),controller[_0xd0e3('0xd')]);router[_0xd0e3('0x6')]('/:id/hoppers',auth[_0xd0e3('0x7')](),controller[_0xd0e3('0xe')]);router[_0xd0e3('0x6')](_0xd0e3('0xf'),auth[_0xd0e3('0x7')](),controller[_0xd0e3('0x10')]);router[_0xd0e3('0x6')](_0xd0e3('0x11'),auth[_0xd0e3('0x7')](),controller[_0xd0e3('0x12')]);router[_0xd0e3('0x6')](_0xd0e3('0x13'),auth['isAuthenticated'](),controller[_0xd0e3('0x14')]);router[_0xd0e3('0x15')](_0xd0e3('0x16'),auth['isAuthenticated'](),controller[_0xd0e3('0x17')]);router[_0xd0e3('0x15')]('/',auth['isAuthenticated'](),controller[_0xd0e3('0x18')]);router[_0xd0e3('0x15')](_0xd0e3('0x19'),auth[_0xd0e3('0x7')](),controller[_0xd0e3('0x1a')]);router[_0xd0e3('0x15')](_0xd0e3('0xc'),auth[_0xd0e3('0x7')](),controller[_0xd0e3('0x1b')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x49248f,_0x2eafd8,_0x53368e){_0x53368e(null,path['join'](config['root'],_0xd0e3('0x1c')));},'filename':function(_0xdf8d4e,_0x487644,_0x484640){_0x487644[_0xd0e3('0x1d')]=_0x487644[_0xd0e3('0x1d')][_0xd0e3('0x1e')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x484640(null,util[_0xd0e3('0x1f')](_0xd0e3('0x20'),path[_0xd0e3('0x21')](_0x487644[_0xd0e3('0x1d')],path[_0xd0e3('0x22')](_0x487644[_0xd0e3('0x1d')])),Date['now'](),path['extname'](_0x487644[_0xd0e3('0x1d')])));}})});router[_0xd0e3('0x15')]('/csv',upload['single'](_0xd0e3('0x23')),controller[_0xd0e3('0x24')]);var upload=multer({'storage':multer[_0xd0e3('0x25')]({'destination':function(_0x1f671a,_0x325816,_0x3abae3){_0x3abae3(null,path['join'](config[_0xd0e3('0x26')],_0xd0e3('0x1c')));},'filename':function(_0x3f11a8,_0xecc6ee,_0x1945c9){_0xecc6ee[_0xd0e3('0x1d')]=_0xecc6ee['originalname']['replace'](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x1945c9(null,util[_0xd0e3('0x1f')](_0xd0e3('0x20'),path['basename'](_0xecc6ee[_0xd0e3('0x1d')],path[_0xd0e3('0x22')](_0xecc6ee[_0xd0e3('0x1d')])),Date[_0xd0e3('0x27')](),path[_0xd0e3('0x22')](_0xecc6ee[_0xd0e3('0x1d')])));}})});router[_0xd0e3('0x15')]('/upload',upload[_0xd0e3('0x28')](_0xd0e3('0x23')),controller['upload']);router[_0xd0e3('0x15')](_0xd0e3('0x29'),auth[_0xd0e3('0x7')](),controller['import']);router[_0xd0e3('0x2a')](_0xd0e3('0xa'),auth[_0xd0e3('0x7')](),controller[_0xd0e3('0x2b')]);router[_0xd0e3('0x2c')](_0xd0e3('0xa'),auth[_0xd0e3('0x7')](),controller[_0xd0e3('0x2d')]);module[_0xd0e3('0x2e')]=router;
\ No newline at end of file
index c238ddd..c5bd663 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9987=['name','STRING','TEXT','long','type','select','parse','values','isArray','stringify','sequelize','lodash','exports','getDataValue','setDataValue','alias'];(function(_0x599f41,_0x4db732){var _0x2e4d58=function(_0x14c882){while(--_0x14c882){_0x599f41['push'](_0x599f41['shift']());}};_0x2e4d58(++_0x4db732);}(_0x9987,0xea));var _0x7998=function(_0x3a6731,_0x2745ce){_0x3a6731=_0x3a6731-0x0;var _0x461bed=_0x9987[_0x3a6731];return _0x461bed;};'use strict';var Sequelize=require(_0x7998('0x0'));var _=require(_0x7998('0x1'));module[_0x7998('0x2')]={'name':{'type':Sequelize['VIRTUAL'],'get':function(_0x147a02){return this[_0x7998('0x3')]('alias');}},'alias':{'type':Sequelize['STRING'],'allowNull':![],'set':function(_0xcd0f34){this[_0x7998('0x4')](_0x7998('0x5'),_0xcd0f34?_0xcd0f34:this[_0x7998('0x3')](_0x7998('0x6')));}},'type':{'type':Sequelize[_0x7998('0x7')],'allowNull':![]},'values':{'type':Sequelize[_0x7998('0x8')](_0x7998('0x9')),'get':function(){if(this[_0x7998('0x3')](_0x7998('0xa'))===_0x7998('0xb')){return JSON[_0x7998('0xc')](this[_0x7998('0x3')](_0x7998('0xd')));}else{return this['getDataValue'](_0x7998('0xd'));}},'set':function(_0x21f324){if(Array[_0x7998('0xe')](_0x21f324)){this[_0x7998('0x4')](_0x7998('0xd'),JSON[_0x7998('0xf')](_0x21f324));}else{this[_0x7998('0x4')](_0x7998('0xd'),_0x21f324);}}},'required':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
+var _0x6fcb=['select','values','isArray','stringify','BOOLEAN','sequelize','lodash','exports','VIRTUAL','getDataValue','alias','STRING','setDataValue','name','TEXT','long','type'];(function(_0x31fe17,_0x8021ae){var _0xda7364=function(_0x52d439){while(--_0x52d439){_0x31fe17['push'](_0x31fe17['shift']());}};_0xda7364(++_0x8021ae);}(_0x6fcb,0x148));var _0xb6fc=function(_0x14cced,_0x50dd2f){_0x14cced=_0x14cced-0x0;var _0x5e1ce6=_0x6fcb[_0x14cced];return _0x5e1ce6;};'use strict';var Sequelize=require(_0xb6fc('0x0'));var _=require(_0xb6fc('0x1'));module[_0xb6fc('0x2')]={'name':{'type':Sequelize[_0xb6fc('0x3')],'get':function(_0x46920d){return this[_0xb6fc('0x4')](_0xb6fc('0x5'));}},'alias':{'type':Sequelize[_0xb6fc('0x6')],'allowNull':![],'set':function(_0x15d841){this[_0xb6fc('0x7')](_0xb6fc('0x5'),_0x15d841?_0x15d841:this[_0xb6fc('0x4')](_0xb6fc('0x8')));}},'type':{'type':Sequelize[_0xb6fc('0x6')],'allowNull':![]},'values':{'type':Sequelize[_0xb6fc('0x9')](_0xb6fc('0xa')),'get':function(){if(this[_0xb6fc('0x4')](_0xb6fc('0xb'))===_0xb6fc('0xc')){return JSON['parse'](this[_0xb6fc('0x4')]('values'));}else{return this['getDataValue'](_0xb6fc('0xd'));}},'set':function(_0x29c497){if(Array[_0xb6fc('0xe')](_0x29c497)){this[_0xb6fc('0x7')](_0xb6fc('0xd'),JSON[_0xb6fc('0xf')](_0x29c497));}else{this[_0xb6fc('0x7')](_0xb6fc('0xd'),_0x29c497);}}},'required':{'type':Sequelize[_0xb6fc('0x10')],'defaultValue':![]}};
\ No newline at end of file
index be855a5..707c57c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe983=['filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','field','options','includeAll','include','catch','show','params','create','sequelize','find','body','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','update','then','destroy','stack','name','send','CmCustomField','rawAttributes','model','differenceBy','keys','query'];(function(_0x10edf9,_0xf9655c){var _0x26a414=function(_0x3eaef6){while(--_0x3eaef6){_0x10edf9['push'](_0x10edf9['shift']());}};_0x26a414(++_0xf9655c);}(_0xe983,0x1de));var _0x3e98=function(_0x730189,_0x2b9c57){_0x730189=_0x730189-0x0;var _0x50d140=_0xe983[_0x730189];return _0x50d140;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x3e98('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x3e98('0x1'));var jsonpatch=require(_0x3e98('0x2'));var rp=require(_0x3e98('0x3'));var moment=require(_0x3e98('0x4'));var BPromise=require(_0x3e98('0x5'));var Mustache=require(_0x3e98('0x6'));var util=require(_0x3e98('0x7'));var path=require(_0x3e98('0x8'));var sox=require('sox');var csv=require(_0x3e98('0x9'));var ejs=require(_0x3e98('0xa'));var fs=require('fs');var _=require(_0x3e98('0xb'));var squel=require(_0x3e98('0xc'));var crypto=require(_0x3e98('0xd'));var jsforce=require(_0x3e98('0xe'));var deskjs=require(_0x3e98('0xf'));var toCsv=require(_0x3e98('0x9'));var querystring=require(_0x3e98('0x10'));var Papa=require(_0x3e98('0x11'));var Redis=require(_0x3e98('0x12'));var authService=require(_0x3e98('0x13'));var qs=require(_0x3e98('0x14'));var hardwareService=require(_0x3e98('0x15'));var logger=require(_0x3e98('0x16'))('api');var utils=require('../../config/utils');var config=require(_0x3e98('0x17'));var db=require(_0x3e98('0x18'))['db'];function respondWithStatusCode(_0x347f30,_0x506051){_0x506051=_0x506051||0xcc;return function(_0xb6762c){if(_0xb6762c){return _0x347f30[_0x3e98('0x19')](_0x506051);}return _0x347f30[_0x3e98('0x1a')](_0x506051)[_0x3e98('0x1b')]();};}function respondWithResult(_0x3f1cf5,_0x18a2e0){_0x18a2e0=_0x18a2e0||0xc8;return function(_0x327c4e){if(_0x327c4e){return _0x3f1cf5[_0x3e98('0x1a')](_0x18a2e0)[_0x3e98('0x1c')](_0x327c4e);}};}function respondWithFilteredResult(_0x1876ae,_0x2cfa59){return function(_0x377ae3){if(_0x377ae3){var _0x4de543=_0x377ae3[_0x3e98('0x1d')],_0x557411=_0x2cfa59[_0x3e98('0x1e')],_0x31c9c5=_0x2cfa59[_0x3e98('0x1e')]+_0x2cfa59['limit'],_0x3ed987;if(_0x31c9c5>=_0x4de543){_0x31c9c5=_0x4de543;_0x3ed987=0xc8;}else{_0x3ed987=0xce;}_0x1876ae[_0x3e98('0x1a')](_0x3ed987);return _0x1876ae[_0x3e98('0x1f')](_0x3e98('0x20'),_0x557411+'-'+_0x31c9c5+'/'+_0x4de543)[_0x3e98('0x1c')](_0x377ae3);}return null;};}function patchUpdates(_0x90b42f){return function(_0x2f251b){try{jsonpatch[_0x3e98('0x21')](_0x2f251b,_0x90b42f,!![]);}catch(_0x326136){return BPromise[_0x3e98('0x22')](_0x326136);}return _0x2f251b['save']();};}function saveUpdates(_0x74d584,_0x5713c1){return function(_0x44cad9){if(_0x44cad9){return _0x44cad9[_0x3e98('0x23')](_0x74d584)[_0x3e98('0x24')](function(_0x2e9d45){return _0x2e9d45;});}return null;};}function removeEntity(_0x54265d,_0x4f931c){return function(_0x4da0e4){if(_0x4da0e4){return _0x4da0e4[_0x3e98('0x25')]()[_0x3e98('0x24')](function(){_0x54265d[_0x3e98('0x1a')](0xcc)[_0x3e98('0x1b')]();});}};}function handleEntityNotFound(_0x2c1c44,_0x3aa934){return function(_0x4a7680){if(!_0x4a7680){_0x2c1c44[_0x3e98('0x19')](0x194);}return _0x4a7680;};}function handleError(_0x1ec12b,_0x1a3dab){_0x1a3dab=_0x1a3dab||0x1f4;return function(_0x58b036){logger['error'](_0x58b036[_0x3e98('0x26')]);if(_0x58b036['name']){delete _0x58b036[_0x3e98('0x27')];}_0x1ec12b[_0x3e98('0x1a')](_0x1a3dab)[_0x3e98('0x28')](_0x58b036);};}exports['index']=function(_0x239125,_0x42181f){var _0x4c50c5={},_0x22e3c8={},_0x3a1a52={'count':0x0,'rows':[]};var _0x2f46ad=db[_0x3e98('0x29')][_0x3e98('0x2a')];_0x22e3c8[_0x3e98('0x2b')]=_[_0x3e98('0x2c')](_[_0x3e98('0x2d')](_0x2f46ad),['name']);_0x22e3c8['query']=_[_0x3e98('0x2d')](_0x239125[_0x3e98('0x2e')]);_0x22e3c8[_0x3e98('0x2f')]=_[_0x3e98('0x30')](_0x22e3c8['model'],_0x22e3c8['query']);_0x4c50c5['attributes']=_[_0x3e98('0x30')](_0x22e3c8['model'],qs[_0x3e98('0x31')](_0x239125[_0x3e98('0x2e')][_0x3e98('0x31')]));_0x4c50c5[_0x3e98('0x32')]=_0x4c50c5[_0x3e98('0x32')][_0x3e98('0x33')]?_0x4c50c5[_0x3e98('0x32')]:_0x22e3c8[_0x3e98('0x2b')];if(!_0x239125[_0x3e98('0x2e')][_0x3e98('0x34')](_0x3e98('0x35'))){_0x4c50c5[_0x3e98('0x36')]=qs['limit'](_0x239125['query'][_0x3e98('0x36')]);_0x4c50c5[_0x3e98('0x1e')]=qs[_0x3e98('0x1e')](_0x239125[_0x3e98('0x2e')][_0x3e98('0x1e')]);}_0x4c50c5[_0x3e98('0x37')]=qs[_0x3e98('0x38')](_0x239125[_0x3e98('0x2e')]['sort']);_0x4c50c5[_0x3e98('0x39')]=qs[_0x3e98('0x2f')](_[_0x3e98('0x3a')](_0x239125[_0x3e98('0x2e')],_0x22e3c8[_0x3e98('0x2f')]));if(_0x239125[_0x3e98('0x2e')][_0x3e98('0x3b')]){_0x4c50c5[_0x3e98('0x39')]=_[_0x3e98('0x3c')](_0x4c50c5[_0x3e98('0x39')],{'$or':_['map'](_0x2f46ad,function(_0x5ed089){if(_0x5ed089[_0x3e98('0x3d')][_0x3e98('0x3e')]!==_0x3e98('0x3f')){var _0x4a95cf={};_0x4a95cf[_0x5ed089[_0x3e98('0x40')]]={'$like':'%'+_0x239125[_0x3e98('0x2e')][_0x3e98('0x3b')]+'%'};return _0x4a95cf;}})});}_0x4c50c5=_[_0x3e98('0x3c')]({},_0x4c50c5,_0x239125[_0x3e98('0x41')]);var _0xe32b75={'where':_0x4c50c5[_0x3e98('0x39')]};return db[_0x3e98('0x29')]['count'](_0xe32b75)[_0x3e98('0x24')](function(_0x568410){_0x3a1a52[_0x3e98('0x1d')]=_0x568410;if(_0x239125[_0x3e98('0x2e')][_0x3e98('0x42')]){_0x4c50c5[_0x3e98('0x43')]=[{'all':!![]}];}return db[_0x3e98('0x29')]['findAll'](_0x4c50c5);})['then'](function(_0x37ba7d){_0x3a1a52['rows']=_0x37ba7d;return _0x3a1a52;})[_0x3e98('0x24')](respondWithFilteredResult(_0x42181f,_0x4c50c5))[_0x3e98('0x44')](handleError(_0x42181f,null));};exports[_0x3e98('0x45')]=function(_0x5ce0ee,_0x154832){var _0x2dfd17={'raw':!![],'where':{'id':_0x5ce0ee[_0x3e98('0x46')]['id']}},_0x4a3756={};_0x4a3756[_0x3e98('0x2b')]=_[_0x3e98('0x2d')](db[_0x3e98('0x29')][_0x3e98('0x2a')]);_0x4a3756[_0x3e98('0x2e')]=_[_0x3e98('0x2d')](_0x5ce0ee[_0x3e98('0x2e')]);_0x4a3756['filters']=_[_0x3e98('0x30')](_0x4a3756[_0x3e98('0x2b')],_0x4a3756[_0x3e98('0x2e')]);_0x2dfd17[_0x3e98('0x32')]=_[_0x3e98('0x30')](_0x4a3756[_0x3e98('0x2b')],qs[_0x3e98('0x31')](_0x5ce0ee[_0x3e98('0x2e')][_0x3e98('0x31')]));_0x2dfd17[_0x3e98('0x32')]=_0x2dfd17[_0x3e98('0x32')][_0x3e98('0x33')]?_0x2dfd17[_0x3e98('0x32')]:_0x4a3756[_0x3e98('0x2b')];if(_0x5ce0ee[_0x3e98('0x2e')][_0x3e98('0x42')]){_0x2dfd17[_0x3e98('0x43')]=[{'all':!![]}];}_0x2dfd17=_[_0x3e98('0x3c')]({},_0x2dfd17,_0x5ce0ee[_0x3e98('0x41')]);return db[_0x3e98('0x29')]['find'](_0x2dfd17)[_0x3e98('0x24')](handleEntityNotFound(_0x154832,null))[_0x3e98('0x24')](respondWithResult(_0x154832,null))['catch'](handleError(_0x154832,null));};exports[_0x3e98('0x47')]=function(_0x1d651f,_0x5a19b7){return db[_0x3e98('0x48')]['transaction'](function(_0x4d8f76){return db['CmCustomField'][_0x3e98('0x47')](_0x1d651f['body'],{'transaction':_0x4d8f76});})[_0x3e98('0x24')](respondWithResult(_0x5a19b7,0xc9))['catch'](handleError(_0x5a19b7,null));};exports[_0x3e98('0x23')]=function(_0x4fc03e,_0x4302df){if(_0x4fc03e['body']['id']){delete _0x4fc03e['body']['id'];}return db[_0x3e98('0x29')][_0x3e98('0x49')]({'where':{'id':_0x4fc03e[_0x3e98('0x46')]['id']}})[_0x3e98('0x24')](handleEntityNotFound(_0x4302df,null))[_0x3e98('0x24')](saveUpdates(_0x4fc03e[_0x3e98('0x4a')],null))[_0x3e98('0x24')](respondWithResult(_0x4302df,null))['catch'](handleError(_0x4302df,null));};exports[_0x3e98('0x25')]=function(_0x1c7c29,_0x6efdaa){return db['CmCustomField']['find']({'where':{'id':_0x1c7c29['params']['id']}})['then'](handleEntityNotFound(_0x6efdaa,null))[_0x3e98('0x24')](removeEntity(_0x6efdaa,null))['catch'](handleError(_0x6efdaa,null));};
\ No newline at end of file
+var _0x84bc=['jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','Content-Range','apply','reject','update','then','stack','name','send','CmCustomField','rawAttributes','model','differenceBy','keys','query','attributes','intersection','fields','length','hasOwnProperty','nolimit','sort','filters','pick','where','merge','key','field','filter','options','includeAll','include','findAll','rows','params','catch','create','sequelize','transaction','body','find','destroy','html-pdf','eml-format','zip-dir','fast-json-patch','bluebird','path','sox','to-csv','lodash','squel','crypto'];(function(_0x20b8d,_0x471e78){var _0x44b833=function(_0xcfc880){while(--_0xcfc880){_0x20b8d['push'](_0x20b8d['shift']());}};_0x44b833(++_0x471e78);}(_0x84bc,0xc7));var _0xc84b=function(_0x1f2fd2,_0x1777f5){_0x1f2fd2=_0x1f2fd2-0x0;var _0x3149b8=_0x84bc[_0x1f2fd2];return _0x3149b8;};'use strict';var pdf=require(_0xc84b('0x0'));var emlformat=require(_0xc84b('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xc84b('0x2'));var jsonpatch=require(_0xc84b('0x3'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xc84b('0x4'));var Mustache=require('mustache');var util=require('util');var path=require(_0xc84b('0x5'));var sox=require(_0xc84b('0x6'));var csv=require(_0xc84b('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xc84b('0x8'));var squel=require(_0xc84b('0x9'));var crypto=require(_0xc84b('0xa'));var jsforce=require(_0xc84b('0xb'));var deskjs=require(_0xc84b('0xc'));var toCsv=require(_0xc84b('0x7'));var querystring=require(_0xc84b('0xd'));var Papa=require(_0xc84b('0xe'));var Redis=require(_0xc84b('0xf'));var authService=require(_0xc84b('0x10'));var qs=require(_0xc84b('0x11'));var hardwareService=require(_0xc84b('0x12'));var logger=require('../../config/logger')(_0xc84b('0x13'));var utils=require('../../config/utils');var config=require(_0xc84b('0x14'));var db=require(_0xc84b('0x15'))['db'];function respondWithStatusCode(_0x37c05f,_0x387a17){_0x387a17=_0x387a17||0xcc;return function(_0x27e081){if(_0x27e081){return _0x37c05f[_0xc84b('0x16')](_0x387a17);}return _0x37c05f[_0xc84b('0x17')](_0x387a17)[_0xc84b('0x18')]();};}function respondWithResult(_0x2168ed,_0x536058){_0x536058=_0x536058||0xc8;return function(_0x2eec10){if(_0x2eec10){return _0x2168ed['status'](_0x536058)[_0xc84b('0x19')](_0x2eec10);}};}function respondWithFilteredResult(_0x144b67,_0x41cc86){return function(_0x5632b4){if(_0x5632b4){var _0x33f7a6=_0x5632b4[_0xc84b('0x1a')],_0x265e4b=_0x41cc86[_0xc84b('0x1b')],_0x482cf7=_0x41cc86['offset']+_0x41cc86[_0xc84b('0x1c')],_0x4a871c;if(_0x482cf7>=_0x33f7a6){_0x482cf7=_0x33f7a6;_0x4a871c=0xc8;}else{_0x4a871c=0xce;}_0x144b67['status'](_0x4a871c);return _0x144b67['set'](_0xc84b('0x1d'),_0x265e4b+'-'+_0x482cf7+'/'+_0x33f7a6)[_0xc84b('0x19')](_0x5632b4);}return null;};}function patchUpdates(_0x3d2fcc){return function(_0x5ba3f7){try{jsonpatch[_0xc84b('0x1e')](_0x5ba3f7,_0x3d2fcc,!![]);}catch(_0x478f32){return BPromise[_0xc84b('0x1f')](_0x478f32);}return _0x5ba3f7['save']();};}function saveUpdates(_0x55ff4c,_0x9b6963){return function(_0x4e6f8e){if(_0x4e6f8e){return _0x4e6f8e[_0xc84b('0x20')](_0x55ff4c)[_0xc84b('0x21')](function(_0x454b00){return _0x454b00;});}return null;};}function removeEntity(_0x4dab61,_0x10478e){return function(_0x2343c1){if(_0x2343c1){return _0x2343c1['destroy']()[_0xc84b('0x21')](function(){_0x4dab61['status'](0xcc)[_0xc84b('0x18')]();});}};}function handleEntityNotFound(_0x38d580,_0x403016){return function(_0x45236f){if(!_0x45236f){_0x38d580[_0xc84b('0x16')](0x194);}return _0x45236f;};}function handleError(_0x56d175,_0x3b7193){_0x3b7193=_0x3b7193||0x1f4;return function(_0x31e795){logger['error'](_0x31e795[_0xc84b('0x22')]);if(_0x31e795[_0xc84b('0x23')]){delete _0x31e795[_0xc84b('0x23')];}_0x56d175[_0xc84b('0x17')](_0x3b7193)[_0xc84b('0x24')](_0x31e795);};}exports['index']=function(_0x25a76f,_0x1dfa2f){var _0x3551ab={},_0x461d35={},_0x19c6bb={'count':0x0,'rows':[]};var _0x2223d8=db[_0xc84b('0x25')][_0xc84b('0x26')];_0x461d35[_0xc84b('0x27')]=_[_0xc84b('0x28')](_[_0xc84b('0x29')](_0x2223d8),['name']);_0x461d35['query']=_['keys'](_0x25a76f[_0xc84b('0x2a')]);_0x461d35['filters']=_['intersection'](_0x461d35[_0xc84b('0x27')],_0x461d35[_0xc84b('0x2a')]);_0x3551ab[_0xc84b('0x2b')]=_[_0xc84b('0x2c')](_0x461d35['model'],qs[_0xc84b('0x2d')](_0x25a76f[_0xc84b('0x2a')][_0xc84b('0x2d')]));_0x3551ab[_0xc84b('0x2b')]=_0x3551ab['attributes'][_0xc84b('0x2e')]?_0x3551ab[_0xc84b('0x2b')]:_0x461d35[_0xc84b('0x27')];if(!_0x25a76f['query'][_0xc84b('0x2f')](_0xc84b('0x30'))){_0x3551ab['limit']=qs[_0xc84b('0x1c')](_0x25a76f[_0xc84b('0x2a')][_0xc84b('0x1c')]);_0x3551ab[_0xc84b('0x1b')]=qs['offset'](_0x25a76f[_0xc84b('0x2a')]['offset']);}_0x3551ab['order']=qs[_0xc84b('0x31')](_0x25a76f['query'][_0xc84b('0x31')]);_0x3551ab['where']=qs[_0xc84b('0x32')](_[_0xc84b('0x33')](_0x25a76f[_0xc84b('0x2a')],_0x461d35[_0xc84b('0x32')]));if(_0x25a76f[_0xc84b('0x2a')]['filter']){_0x3551ab[_0xc84b('0x34')]=_[_0xc84b('0x35')](_0x3551ab[_0xc84b('0x34')],{'$or':_['map'](_0x2223d8,function(_0x10a2b2){if(_0x10a2b2['type'][_0xc84b('0x36')]!=='VIRTUAL'){var _0x122b8b={};_0x122b8b[_0x10a2b2[_0xc84b('0x37')]]={'$like':'%'+_0x25a76f[_0xc84b('0x2a')][_0xc84b('0x38')]+'%'};return _0x122b8b;}})});}_0x3551ab=_[_0xc84b('0x35')]({},_0x3551ab,_0x25a76f[_0xc84b('0x39')]);var _0x482ff6={'where':_0x3551ab[_0xc84b('0x34')]};return db[_0xc84b('0x25')][_0xc84b('0x1a')](_0x482ff6)[_0xc84b('0x21')](function(_0x5ad623){_0x19c6bb['count']=_0x5ad623;if(_0x25a76f['query'][_0xc84b('0x3a')]){_0x3551ab[_0xc84b('0x3b')]=[{'all':!![]}];}return db[_0xc84b('0x25')][_0xc84b('0x3c')](_0x3551ab);})[_0xc84b('0x21')](function(_0x32caee){_0x19c6bb[_0xc84b('0x3d')]=_0x32caee;return _0x19c6bb;})['then'](respondWithFilteredResult(_0x1dfa2f,_0x3551ab))['catch'](handleError(_0x1dfa2f,null));};exports['show']=function(_0x526553,_0x2fb395){var _0x2f697f={'raw':!![],'where':{'id':_0x526553[_0xc84b('0x3e')]['id']}},_0x2a94ee={};_0x2a94ee[_0xc84b('0x27')]=_['keys'](db['CmCustomField'][_0xc84b('0x26')]);_0x2a94ee[_0xc84b('0x2a')]=_['keys'](_0x526553[_0xc84b('0x2a')]);_0x2a94ee[_0xc84b('0x32')]=_['intersection'](_0x2a94ee['model'],_0x2a94ee[_0xc84b('0x2a')]);_0x2f697f['attributes']=_[_0xc84b('0x2c')](_0x2a94ee[_0xc84b('0x27')],qs[_0xc84b('0x2d')](_0x526553[_0xc84b('0x2a')]['fields']));_0x2f697f['attributes']=_0x2f697f['attributes'][_0xc84b('0x2e')]?_0x2f697f['attributes']:_0x2a94ee[_0xc84b('0x27')];if(_0x526553[_0xc84b('0x2a')][_0xc84b('0x3a')]){_0x2f697f[_0xc84b('0x3b')]=[{'all':!![]}];}_0x2f697f=_[_0xc84b('0x35')]({},_0x2f697f,_0x526553[_0xc84b('0x39')]);return db[_0xc84b('0x25')]['find'](_0x2f697f)[_0xc84b('0x21')](handleEntityNotFound(_0x2fb395,null))[_0xc84b('0x21')](respondWithResult(_0x2fb395,null))[_0xc84b('0x3f')](handleError(_0x2fb395,null));};exports[_0xc84b('0x40')]=function(_0x35447e,_0x335acc){return db[_0xc84b('0x41')][_0xc84b('0x42')](function(_0x48cb12){return db[_0xc84b('0x25')][_0xc84b('0x40')](_0x35447e['body'],{'transaction':_0x48cb12});})['then'](respondWithResult(_0x335acc,0xc9))[_0xc84b('0x3f')](handleError(_0x335acc,null));};exports[_0xc84b('0x20')]=function(_0x15b310,_0x7fed6f){if(_0x15b310[_0xc84b('0x43')]['id']){delete _0x15b310[_0xc84b('0x43')]['id'];}return db[_0xc84b('0x25')][_0xc84b('0x44')]({'where':{'id':_0x15b310['params']['id']}})[_0xc84b('0x21')](handleEntityNotFound(_0x7fed6f,null))[_0xc84b('0x21')](saveUpdates(_0x15b310[_0xc84b('0x43')],null))['then'](respondWithResult(_0x7fed6f,null))['catch'](handleError(_0x7fed6f,null));};exports[_0xc84b('0x45')]=function(_0x43f626,_0x43a934){return db[_0xc84b('0x25')][_0xc84b('0x44')]({'where':{'id':_0x43f626[_0xc84b('0x3e')]['id']}})[_0xc84b('0x21')](handleEntityNotFound(_0x43a934,null))[_0xc84b('0x21')](removeEntity(_0x43a934,null))[_0xc84b('0x3f')](handleError(_0x43a934,null));};
\ No newline at end of file
index bb6cb85..1e19426 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xffd0=['exports','define','CmCustomField','cm_custom_fields','TEXT','transaction','type','text','INTEGER','switch','BOOLEAN','defaultValue','queryInterface','addColumn','cf_%d','lodash','util','moment','bluebird','request-promise','path','rimraf','./cmCustomField.attributes'];(function(_0x29122d,_0x3089e5){var _0x7469ba=function(_0x19fec7){while(--_0x19fec7){_0x29122d['push'](_0x29122d['shift']());}};_0x7469ba(++_0x3089e5);}(_0xffd0,0x1db));var _0x0ffd=function(_0x3fb6d4,_0x51875e){_0x3fb6d4=_0x3fb6d4-0x0;var _0x474ee6=_0xffd0[_0x3fb6d4];return _0x474ee6;};'use strict';var _=require(_0x0ffd('0x0'));var util=require(_0x0ffd('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x0ffd('0x2'));var BPromise=require(_0x0ffd('0x3'));var rp=require(_0x0ffd('0x4'));var fs=require('fs');var path=require(_0x0ffd('0x5'));var rimraf=require(_0x0ffd('0x6'));var config=require('../../config/environment');var attributes=require(_0x0ffd('0x7'));module[_0x0ffd('0x8')]=function(_0x17235d,_0x2d64ad){return _0x17235d[_0x0ffd('0x9')](_0x0ffd('0xa'),attributes,{'tableName':_0x0ffd('0xb'),'paranoid':!![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x2a7696,_0x26e527,_0x50de9f){var _0x210e84=_0x2a7696['get']({'plain':!![]});var _0x2e45b4={'type':_0x2d64ad[_0x0ffd('0xc')],'transaction':_0x26e527[_0x0ffd('0xd')]};switch(_0x210e84[_0x0ffd('0xe')]){case _0x0ffd('0xf'):_0x2e45b4['type']=_0x2d64ad[_0x0ffd('0xc')];break;case'number':_0x2e45b4['type']=_0x2d64ad[_0x0ffd('0x10')];break;case _0x0ffd('0x11'):_0x2e45b4['type']=_0x2d64ad[_0x0ffd('0x12')];_0x2e45b4[_0x0ffd('0x13')]=![];break;}_0x17235d[_0x0ffd('0x14')][_0x0ffd('0x15')]('cm_contacts',util['format'](_0x0ffd('0x16'),_0x210e84['id']),_0x2e45b4);_0x50de9f();}}});};
\ No newline at end of file
+var _0xf5d4=['lodash','../../config/logger','api','moment','bluebird','request-promise','../../config/environment','exports','define','CmCustomField','cm_custom_fields','get','TEXT','transaction','type','text','number','INTEGER','switch','BOOLEAN','queryInterface','cm_contacts','cf_%d'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xf5d4,0x1b5));var _0x4f5d=function(_0x4af830,_0x433e36){_0x4af830=_0x4af830-0x0;var _0xe81e20=_0xf5d4[_0x4af830];return _0xe81e20;};'use strict';var _=require(_0x4f5d('0x0'));var util=require('util');var logger=require(_0x4f5d('0x1'))(_0x4f5d('0x2'));var moment=require(_0x4f5d('0x3'));var BPromise=require(_0x4f5d('0x4'));var rp=require(_0x4f5d('0x5'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x4f5d('0x6'));var attributes=require('./cmCustomField.attributes');module[_0x4f5d('0x7')]=function(_0x29b6b3,_0x26f36f){return _0x29b6b3[_0x4f5d('0x8')](_0x4f5d('0x9'),attributes,{'tableName':_0x4f5d('0xa'),'paranoid':!![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x13ac40,_0x4c86b8,_0xc31a2){var _0xfdc87b=_0x13ac40[_0x4f5d('0xb')]({'plain':!![]});var _0x1dfe46={'type':_0x26f36f[_0x4f5d('0xc')],'transaction':_0x4c86b8[_0x4f5d('0xd')]};switch(_0xfdc87b[_0x4f5d('0xe')]){case _0x4f5d('0xf'):_0x1dfe46[_0x4f5d('0xe')]=_0x26f36f['TEXT'];break;case _0x4f5d('0x10'):_0x1dfe46[_0x4f5d('0xe')]=_0x26f36f[_0x4f5d('0x11')];break;case _0x4f5d('0x12'):_0x1dfe46['type']=_0x26f36f[_0x4f5d('0x13')];_0x1dfe46['defaultValue']=![];break;}_0x29b6b3[_0x4f5d('0x14')]['addColumn'](_0x4f5d('0x15'),util['format'](_0x4f5d('0x16'),_0xfdc87b['id']),_0x1dfe46);_0xc31a2();}}});};
\ No newline at end of file
index 6523be0..66fb03c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x219d=['ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','CmCustomField,\x20%s,\x20%s','request\x20sent','CmCustomField,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','util','moment','bluebird','randomstring'];(function(_0x8406f8,_0x1911c0){var _0x8ff072=function(_0x476e05){while(--_0x476e05){_0x8406f8['push'](_0x8406f8['shift']());}};_0x8ff072(++_0x1911c0);}(_0x219d,0x10f));var _0xd219=function(_0x432682,_0x253044){_0x432682=_0x432682-0x0;var _0x463d05=_0x219d[_0x432682];return _0x463d05;};'use strict';var _=require('lodash');var util=require(_0xd219('0x0'));var moment=require(_0xd219('0x1'));var BPromise=require(_0xd219('0x2'));var rs=require(_0xd219('0x3'));var fs=require('fs');var Redis=require(_0xd219('0x4'));var db=require(_0xd219('0x5'))['db'];var utils=require(_0xd219('0x6'));var logger=require(_0xd219('0x7'))(_0xd219('0x8'));var config=require(_0xd219('0x9'));var jayson=require(_0xd219('0xa'));var client=jayson[_0xd219('0xb')][_0xd219('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x4159d5,_0x226cf5,_0x90d965){return new BPromise(function(_0x2e1232,_0x3acb92){return client[_0xd219('0xd')](_0x4159d5,_0x90d965)[_0xd219('0xe')](function(_0x13bff6){logger[_0xd219('0xf')](_0xd219('0x10'),_0x226cf5,_0xd219('0x11'));logger['debug'](_0xd219('0x12'),_0x226cf5,'request\x20sent',JSON[_0xd219('0x13')](_0x13bff6));if(_0x13bff6[_0xd219('0x14')]){if(_0x13bff6[_0xd219('0x14')][_0xd219('0x15')]===0x1f4){logger['error']('CmCustomField,\x20%s,\x20%s',_0x226cf5,_0x13bff6[_0xd219('0x14')][_0xd219('0x16')]);return _0x3acb92(_0x13bff6['error'][_0xd219('0x16')]);}logger[_0xd219('0x14')](_0xd219('0x10'),_0x226cf5,_0x13bff6['error'][_0xd219('0x16')]);return _0x2e1232(_0x13bff6[_0xd219('0x14')][_0xd219('0x16')]);}else{logger['info']('CmCustomField,\x20%s,\x20%s',_0x226cf5,_0xd219('0x11'));_0x2e1232(_0x13bff6[_0xd219('0x17')][_0xd219('0x16')]);}})[_0xd219('0x18')](function(_0x1dfcd0){logger[_0xd219('0x14')](_0xd219('0x10'),_0x226cf5,_0x1dfcd0);_0x3acb92(_0x1dfcd0);});});}
\ No newline at end of file
+var _0x4e2b=['request\x20sent','debug','CmCustomField,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client','http','request','info','CmCustomField,\x20%s,\x20%s'];(function(_0x4550cc,_0x16f0c2){var _0x24eacd=function(_0x5315f1){while(--_0x5315f1){_0x4550cc['push'](_0x4550cc['shift']());}};_0x24eacd(++_0x16f0c2);}(_0x4e2b,0xb8));var _0xb4e2=function(_0x1cd5ae,_0x4db99b){_0x1cd5ae=_0x1cd5ae-0x0;var _0x132122=_0x4e2b[_0x1cd5ae];return _0x132122;};'use strict';var _=require(_0xb4e2('0x0'));var util=require('util');var moment=require(_0xb4e2('0x1'));var BPromise=require(_0xb4e2('0x2'));var rs=require(_0xb4e2('0x3'));var fs=require('fs');var Redis=require(_0xb4e2('0x4'));var db=require(_0xb4e2('0x5'))['db'];var utils=require(_0xb4e2('0x6'));var logger=require(_0xb4e2('0x7'))('rpc');var config=require('../../config/environment');var jayson=require(_0xb4e2('0x8'));var client=jayson[_0xb4e2('0x9')][_0xb4e2('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3d5319,_0x254f59,_0x571664){return new BPromise(function(_0x3326ec,_0x1efa8b){return client[_0xb4e2('0xb')](_0x3d5319,_0x571664)['then'](function(_0x3f9146){logger[_0xb4e2('0xc')](_0xb4e2('0xd'),_0x254f59,_0xb4e2('0xe'));logger[_0xb4e2('0xf')](_0xb4e2('0x10'),_0x254f59,'request\x20sent',JSON['stringify'](_0x3f9146));if(_0x3f9146[_0xb4e2('0x11')]){if(_0x3f9146[_0xb4e2('0x11')][_0xb4e2('0x12')]===0x1f4){logger[_0xb4e2('0x11')](_0xb4e2('0xd'),_0x254f59,_0x3f9146['error'][_0xb4e2('0x13')]);return _0x1efa8b(_0x3f9146[_0xb4e2('0x11')][_0xb4e2('0x13')]);}logger[_0xb4e2('0x11')](_0xb4e2('0xd'),_0x254f59,_0x3f9146[_0xb4e2('0x11')][_0xb4e2('0x13')]);return _0x3326ec(_0x3f9146[_0xb4e2('0x11')][_0xb4e2('0x13')]);}else{logger['info'](_0xb4e2('0xd'),_0x254f59,_0xb4e2('0xe'));_0x3326ec(_0x3f9146[_0xb4e2('0x14')][_0xb4e2('0x13')]);}})[_0xb4e2('0x15')](function(_0x482377){logger[_0xb4e2('0x11')](_0xb4e2('0xd'),_0x254f59,_0x482377);_0x1efa8b(_0x482377);});});}
\ No newline at end of file
index 02df733..3378e57 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xacba=['./cmCustomField.controller','isAuthenticated','index','get','/:id','show','post','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x16a101,_0x12caba){var _0x47b258=function(_0x1d4a8b){while(--_0x1d4a8b){_0x16a101['push'](_0x16a101['shift']());}};_0x47b258(++_0x12caba);}(_0xacba,0xb5));var _0xaacb=function(_0x4b213c,_0x34f7b2){_0x4b213c=_0x4b213c-0x0;var _0x5cc384=_0xacba[_0x4b213c];return _0x5cc384;};'use strict';var multer=require(_0xaacb('0x0'));var util=require(_0xaacb('0x1'));var path=require(_0xaacb('0x2'));var timeout=require(_0xaacb('0x3'));var express=require(_0xaacb('0x4'));var router=express['Router']();var auth=require(_0xaacb('0x5'));var interaction=require(_0xaacb('0x6'));var config=require(_0xaacb('0x7'));var controller=require(_0xaacb('0x8'));router['get']('/',auth[_0xaacb('0x9')](),controller[_0xaacb('0xa')]);router[_0xaacb('0xb')](_0xaacb('0xc'),auth[_0xaacb('0x9')](),controller[_0xaacb('0xd')]);router[_0xaacb('0xe')]('/',auth['isAuthenticated'](),controller[_0xaacb('0xf')]);router[_0xaacb('0x10')](_0xaacb('0xc'),auth[_0xaacb('0x9')](),controller[_0xaacb('0x11')]);router[_0xaacb('0x12')](_0xaacb('0xc'),auth[_0xaacb('0x9')](),controller[_0xaacb('0x13')]);module[_0xaacb('0x14')]=router;
\ No newline at end of file
+var _0xfa1e=['post','put','update','delete','destroy','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmCustomField.controller','get','index','/:id','isAuthenticated','show'];(function(_0x3d967,_0x1d3d71){var _0x22caf4=function(_0x36da94){while(--_0x36da94){_0x3d967['push'](_0x3d967['shift']());}};_0x22caf4(++_0x1d3d71);}(_0xfa1e,0x196));var _0xefa1=function(_0x3cae69,_0x233c38){_0x3cae69=_0x3cae69-0x0;var _0x3128eb=_0xfa1e[_0x3cae69];return _0x3128eb;};'use strict';var multer=require('multer');var util=require(_0xefa1('0x0'));var path=require(_0xefa1('0x1'));var timeout=require(_0xefa1('0x2'));var express=require(_0xefa1('0x3'));var router=express[_0xefa1('0x4')]();var auth=require(_0xefa1('0x5'));var interaction=require(_0xefa1('0x6'));var config=require(_0xefa1('0x7'));var controller=require(_0xefa1('0x8'));router[_0xefa1('0x9')]('/',auth['isAuthenticated'](),controller[_0xefa1('0xa')]);router['get'](_0xefa1('0xb'),auth[_0xefa1('0xc')](),controller[_0xefa1('0xd')]);router[_0xefa1('0xe')]('/',auth[_0xefa1('0xc')](),controller['create']);router[_0xefa1('0xf')](_0xefa1('0xb'),auth[_0xefa1('0xc')](),controller[_0xefa1('0x10')]);router[_0xefa1('0x11')](_0xefa1('0xb'),auth[_0xefa1('0xc')](),controller[_0xefa1('0x12')]);module[_0xefa1('0x13')]=router;
\ No newline at end of file
index 0c31a98..18cedbb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb8cc=['contactListQueue','moment','exports','STRING','DATE','format','YYYY-MM-DD\x20HH:mm:ss','INTEGER','BOOLEAN'];(function(_0x17cc18,_0x4d99b6){var _0x5519f9=function(_0x288f8c){while(--_0x288f8c){_0x17cc18['push'](_0x17cc18['shift']());}};_0x5519f9(++_0x4d99b6);}(_0xb8cc,0x145));var _0xcb8c=function(_0x3c2a62,_0x5f48f7){_0x3c2a62=_0x3c2a62-0x0;var _0x2948c9=_0xb8cc[_0x3c2a62];return _0x2948c9;};'use strict';var moment=require(_0xcb8c('0x0'));var Sequelize=require('sequelize');module[_0xcb8c('0x1')]={'phone':{'type':Sequelize[_0xcb8c('0x2')],'allowNull':![]},'active':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'scheduledat':{'type':Sequelize[_0xcb8c('0x3')],'defaultValue':moment()[_0xcb8c('0x4')](_0xcb8c('0x5'))},'countbusyretry':{'type':Sequelize[_0xcb8c('0x6')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0xcb8c('0x6')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'callback':{'type':Sequelize[_0xcb8c('0x7')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize['STRING'],'defaultValue':null},'callbackat':{'type':Sequelize[_0xcb8c('0x3')]},'priority':{'type':Sequelize[_0xcb8c('0x6')](0x2)['UNSIGNED'],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'recallme':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'ContactId':{'type':Sequelize[_0xcb8c('0x6')],'unique':_0xcb8c('0x8')},'ListId':{'type':Sequelize[_0xcb8c('0x6')],'unique':_0xcb8c('0x8')},'UserId':{'type':Sequelize[_0xcb8c('0x6')]},'VoiceQueueId':{'type':Sequelize['INTEGER'],'unique':_0xcb8c('0x8')},'CampaignId':{'type':Sequelize[_0xcb8c('0x6')]}};
\ No newline at end of file
+var _0xc2c3=['INTEGER','STRING','DATE','UNSIGNED','contactListQueue','sequelize','BOOLEAN','format','YYYY-MM-DD\x20HH:mm:ss'];(function(_0x3571b5,_0x284a82){var _0x3c126a=function(_0x5b5ea5){while(--_0x5b5ea5){_0x3571b5['push'](_0x3571b5['shift']());}};_0x3c126a(++_0x284a82);}(_0xc2c3,0x1c7));var _0x3c2c=function(_0x170f46,_0x422fbd){_0x170f46=_0x170f46-0x0;var _0x46fe1d=_0xc2c3[_0x170f46];return _0x46fe1d;};'use strict';var moment=require('moment');var Sequelize=require(_0x3c2c('0x0'));module['exports']={'phone':{'type':Sequelize['STRING'],'allowNull':![]},'active':{'type':Sequelize[_0x3c2c('0x1')],'defaultValue':![]},'scheduledat':{'type':Sequelize['DATE'],'defaultValue':moment()[_0x3c2c('0x2')](_0x3c2c('0x3'))},'countbusyretry':{'type':Sequelize[_0x3c2c('0x4')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0x3c2c('0x4')],'defaultValue':0x0},'callback':{'type':Sequelize[_0x3c2c('0x1')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x3c2c('0x5')],'defaultValue':null},'callbackat':{'type':Sequelize[_0x3c2c('0x6')]},'priority':{'type':Sequelize[_0x3c2c('0x4')](0x2)[_0x3c2c('0x7')],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'recallme':{'type':Sequelize[_0x3c2c('0x1')],'defaultValue':![]},'ContactId':{'type':Sequelize[_0x3c2c('0x4')],'unique':_0x3c2c('0x8')},'ListId':{'type':Sequelize[_0x3c2c('0x4')],'unique':'contactListQueue'},'UserId':{'type':Sequelize[_0x3c2c('0x4')]},'VoiceQueueId':{'type':Sequelize[_0x3c2c('0x4')],'unique':'contactListQueue'},'CampaignId':{'type':Sequelize[_0x3c2c('0x4')]}};
\ No newline at end of file
index 784597d..0dac2c7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x95d9=['CmList','List','getOpenContacts','outbound','entity\x20not\x20found','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','util','path','sox','to-csv','ejs','lodash','squel','crypto','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/environment','sendStatus','status','end','json','count','offset','set','apply','reject','save','update','then','destroy','stack','name','index','CmHopper','rawAttributes','model','keys','query','intersection','filters','concat','$and','$gte','$lt','$lte','$ne','$eq','$in','$notIn','$like','$notLike','$iLike','$notILike','$overlap','$contains','$contained','fields','attributes','length','nolimit','limit','order','sort','where','pick','merge','map','VIRTUAL','field','filter','options','includeAll','include','findAll','rows','show','params','find','catch','create','body','describe','VoiceQueueId','CampaignId','VoiceQueue','Campaign','omit','dataValues','state','deleted','campaign','membername','user','format','calleridnum','phone','campaigntype','queue','ivr','CmContact','ContactId','firstName','lastName','isNil','calleridname','getPreview','getVoiceQueues','preview','dialOrderByScheduledAt','sequelize','transaction','YYYY-MM-DD\x20HH:mm:ss','isEmpty','hopperIds','priority','ASC','DESC','literal','COALESCE(CmHopper.UserId,\x200)\x20ASC','scheduledAt','COALESCE(CmHopper.UserId,\x200)\x20DESC','findOne','LOCK','Contact','CmCompany','Company'];(function(_0x3be975,_0x468e4c){var _0x118f02=function(_0x4cd57e){while(--_0x4cd57e){_0x3be975['push'](_0x3be975['shift']());}};_0x118f02(++_0x468e4c);}(_0x95d9,0x8d));var _0x995d=function(_0x1ae5ab,_0xc5d441){_0x1ae5ab=_0x1ae5ab-0x0;var _0x1ce001=_0x95d9[_0x1ae5ab];return _0x1ce001;};'use strict';var pdf=require(_0x995d('0x0'));var emlformat=require(_0x995d('0x1'));var rimraf=require(_0x995d('0x2'));var zipdir=require(_0x995d('0x3'));var jsonpatch=require(_0x995d('0x4'));var rp=require('request-promise');var moment=require(_0x995d('0x5'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x995d('0x6'));var path=require(_0x995d('0x7'));var sox=require(_0x995d('0x8'));var csv=require(_0x995d('0x9'));var ejs=require(_0x995d('0xa'));var fs=require('fs');var _=require(_0x995d('0xb'));var squel=require(_0x995d('0xc'));var crypto=require(_0x995d('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x995d('0x9'));var querystring=require(_0x995d('0xe'));var Papa=require(_0x995d('0xf'));var Redis=require(_0x995d('0x10'));var authService=require(_0x995d('0x11'));var qs=require(_0x995d('0x12'));var hardwareService=require(_0x995d('0x13'));var logger=require(_0x995d('0x14'))('api');var utils=require('../../config/utils');var config=require(_0x995d('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3d05e1,_0x3ebcf2){_0x3ebcf2=_0x3ebcf2||0xcc;return function(_0x90b515){if(_0x90b515){return _0x3d05e1[_0x995d('0x16')](_0x3ebcf2);}return _0x3d05e1[_0x995d('0x17')](_0x3ebcf2)[_0x995d('0x18')]();};}function respondWithResult(_0x51eb7a,_0xbf3259){_0xbf3259=_0xbf3259||0xc8;return function(_0x49906d){if(_0x49906d){return _0x51eb7a[_0x995d('0x17')](_0xbf3259)[_0x995d('0x19')](_0x49906d);}};}function respondWithFilteredResult(_0x2c27a2,_0x24bcc6){return function(_0x4c1bcb){if(_0x4c1bcb){var _0x4b3e36=_0x4c1bcb[_0x995d('0x1a')],_0x213d76=_0x24bcc6[_0x995d('0x1b')],_0x26aa80=_0x24bcc6[_0x995d('0x1b')]+_0x24bcc6['limit'],_0x594233;if(_0x26aa80>=_0x4b3e36){_0x26aa80=_0x4b3e36;_0x594233=0xc8;}else{_0x594233=0xce;}_0x2c27a2[_0x995d('0x17')](_0x594233);return _0x2c27a2[_0x995d('0x1c')]('Content-Range',_0x213d76+'-'+_0x26aa80+'/'+_0x4b3e36)['json'](_0x4c1bcb);}return null;};}function patchUpdates(_0x1af5af){return function(_0xecc8b6){try{jsonpatch[_0x995d('0x1d')](_0xecc8b6,_0x1af5af,!![]);}catch(_0x52d7d2){return BPromise[_0x995d('0x1e')](_0x52d7d2);}return _0xecc8b6[_0x995d('0x1f')]();};}function saveUpdates(_0x5b050f,_0x270004){return function(_0x2c67e1){if(_0x2c67e1){return _0x2c67e1[_0x995d('0x20')](_0x5b050f)[_0x995d('0x21')](function(_0x14e987){return _0x14e987;});}return null;};}function removeEntity(_0x2355b9,_0x39e4ea){return function(_0x29a282){if(_0x29a282){return _0x29a282[_0x995d('0x22')]()[_0x995d('0x21')](function(){_0x2355b9['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x2d91fe,_0x465128){return function(_0xdd1ccc){if(!_0xdd1ccc){_0x2d91fe['sendStatus'](0x194);}return _0xdd1ccc;};}function handleError(_0x42675f,_0x5a22e3){_0x5a22e3=_0x5a22e3||0x1f4;return function(_0x234af5){logger['error'](_0x234af5[_0x995d('0x23')]);if(_0x234af5[_0x995d('0x24')]){delete _0x234af5[_0x995d('0x24')];}_0x42675f['status'](_0x5a22e3)['send'](_0x234af5);};}exports[_0x995d('0x25')]=function(_0x2a6711,_0x29e964){var _0x5cc408={},_0x41b168={},_0x381afe={'count':0x0,'rows':[]};var _0x4f65b6=db[_0x995d('0x26')][_0x995d('0x27')];_0x41b168[_0x995d('0x28')]=_[_0x995d('0x29')](_0x4f65b6);_0x41b168[_0x995d('0x2a')]=_[_0x995d('0x29')](_0x2a6711[_0x995d('0x2a')]);_0x41b168['filters']=_[_0x995d('0x2b')](_0x41b168[_0x995d('0x28')],_0x41b168[_0x995d('0x2a')]);_0x41b168[_0x995d('0x2c')]=_[_0x995d('0x2d')](_0x41b168['filters'],[_0x995d('0x2e'),'$or','$gt',_0x995d('0x2f'),_0x995d('0x30'),_0x995d('0x31'),_0x995d('0x32'),_0x995d('0x33'),'$not','$between','$notBetween',_0x995d('0x34'),_0x995d('0x35'),_0x995d('0x36'),_0x995d('0x37'),_0x995d('0x38'),_0x995d('0x39'),_0x995d('0x36'),_0x995d('0x3a'),_0x995d('0x3b'),_0x995d('0x3c'),'$any']);_0x5cc408['attributes']=_[_0x995d('0x2b')](_0x41b168[_0x995d('0x28')],qs[_0x995d('0x3d')](_0x2a6711[_0x995d('0x2a')][_0x995d('0x3d')]));_0x5cc408['attributes']=_0x5cc408[_0x995d('0x3e')][_0x995d('0x3f')]?_0x5cc408[_0x995d('0x3e')]:_0x41b168['model'];if(!_0x2a6711[_0x995d('0x2a')]['hasOwnProperty'](_0x995d('0x40'))){_0x5cc408['limit']=qs[_0x995d('0x41')](_0x2a6711[_0x995d('0x2a')][_0x995d('0x41')]);_0x5cc408[_0x995d('0x1b')]=qs[_0x995d('0x1b')](_0x2a6711[_0x995d('0x2a')][_0x995d('0x1b')]);}_0x5cc408[_0x995d('0x42')]=qs[_0x995d('0x43')](_0x2a6711[_0x995d('0x2a')][_0x995d('0x43')]);_0x5cc408[_0x995d('0x44')]=qs[_0x995d('0x2c')](_[_0x995d('0x45')](_0x2a6711[_0x995d('0x2a')],_0x41b168[_0x995d('0x2c')]));if(_0x2a6711[_0x995d('0x2a')]['filter']){_0x5cc408['where']=_[_0x995d('0x46')](_0x5cc408[_0x995d('0x44')],{'$or':_[_0x995d('0x47')](_0x4f65b6,function(_0x4ca103){if(_0x4ca103['type']['key']!==_0x995d('0x48')){var _0x5283fd={};_0x5283fd[_0x4ca103[_0x995d('0x49')]]={'$like':'%'+_0x2a6711[_0x995d('0x2a')][_0x995d('0x4a')]+'%'};return _0x5283fd;}})});}_0x5cc408=_['merge']({},_0x5cc408,_0x2a6711[_0x995d('0x4b')]);var _0x297664={'where':_0x5cc408[_0x995d('0x44')]};return db[_0x995d('0x26')]['count'](_0x297664)['then'](function(_0x505b9a){_0x381afe[_0x995d('0x1a')]=_0x505b9a;if(_0x2a6711['query'][_0x995d('0x4c')]){_0x5cc408[_0x995d('0x4d')]=[{'all':!![]}];}return db[_0x995d('0x26')][_0x995d('0x4e')](_0x5cc408);})[_0x995d('0x21')](function(_0x4eba39){_0x381afe[_0x995d('0x4f')]=_0x4eba39;return _0x381afe;})[_0x995d('0x21')](respondWithFilteredResult(_0x29e964,_0x5cc408))['catch'](handleError(_0x29e964,null));};exports[_0x995d('0x50')]=function(_0x377565,_0x3aaf00){var _0x2a1c04={'raw':!![],'where':{'id':_0x377565[_0x995d('0x51')]['id']}},_0x394a52={};_0x394a52[_0x995d('0x28')]=_[_0x995d('0x29')](db[_0x995d('0x26')][_0x995d('0x27')]);_0x394a52[_0x995d('0x2a')]=_[_0x995d('0x29')](_0x377565[_0x995d('0x2a')]);_0x394a52[_0x995d('0x2c')]=_['intersection'](_0x394a52[_0x995d('0x28')],_0x394a52[_0x995d('0x2a')]);_0x2a1c04[_0x995d('0x3e')]=_['intersection'](_0x394a52[_0x995d('0x28')],qs['fields'](_0x377565[_0x995d('0x2a')][_0x995d('0x3d')]));_0x2a1c04['attributes']=_0x2a1c04['attributes'][_0x995d('0x3f')]?_0x2a1c04['attributes']:_0x394a52[_0x995d('0x28')];if(_0x377565[_0x995d('0x2a')][_0x995d('0x4c')]){_0x2a1c04[_0x995d('0x4d')]=[{'all':!![]}];}_0x2a1c04=_[_0x995d('0x46')]({},_0x2a1c04,_0x377565[_0x995d('0x4b')]);return db[_0x995d('0x26')][_0x995d('0x52')](_0x2a1c04)['then'](handleEntityNotFound(_0x3aaf00,null))[_0x995d('0x21')](respondWithResult(_0x3aaf00,null))[_0x995d('0x53')](handleError(_0x3aaf00,null));};exports[_0x995d('0x54')]=function(_0x1979d4,_0x1c2ef0){return db[_0x995d('0x26')]['create'](_0x1979d4[_0x995d('0x55')],{})[_0x995d('0x21')](respondWithResult(_0x1c2ef0,0xc9))[_0x995d('0x53')](handleError(_0x1c2ef0,null));};exports[_0x995d('0x20')]=function(_0x118b25,_0x2f101a){if(_0x118b25['body']['id']){delete _0x118b25['body']['id'];}return db[_0x995d('0x26')]['find']({'where':{'id':_0x118b25[_0x995d('0x51')]['id']}})[_0x995d('0x21')](handleEntityNotFound(_0x2f101a,null))[_0x995d('0x21')](saveUpdates(_0x118b25[_0x995d('0x55')],null))[_0x995d('0x21')](respondWithResult(_0x2f101a,null))[_0x995d('0x53')](handleError(_0x2f101a,null));};exports[_0x995d('0x56')]=function(_0x1bbe82,_0x286f3b){return db['CmHopper'][_0x995d('0x56')]()[_0x995d('0x21')](respondWithResult(_0x286f3b,null))['catch'](handleError(_0x286f3b,null));};exports['destroy']=function(_0x2e3ec7,_0x4e4337){var _0x110e3c;return db[_0x995d('0x26')]['find']({'where':{'id':_0x2e3ec7[_0x995d('0x51')]['id']}})[_0x995d('0x21')](handleEntityNotFound(_0x4e4337,null))[_0x995d('0x21')](function(_0xad74de){if(_0xad74de){return _0xad74de[_0x995d('0x22')]()[_0x995d('0x21')](function(_0x340d23){return _0x340d23;});}})[_0x995d('0x21')](function(_0x19f268){_0x110e3c=_0x19f268;if(_0x19f268){if(_0x19f268[_0x995d('0x57')]||_0x19f268[_0x995d('0x58')]){return db[_0x19f268['VoiceQueueId']?_0x995d('0x59'):_0x995d('0x5a')][_0x995d('0x52')]({'where':{'id':_0x19f268[_0x995d('0x57')]?_0x19f268[_0x995d('0x57')]:_0x19f268['CampaignId']},'attributes':['id',_0x995d('0x24')],'raw':!![]});}}})[_0x995d('0x21')](function(_0xe8de22){var _0x258591={};if(_0xe8de22){_[_0x995d('0x46')](_0x258591,_[_0x995d('0x5b')](_0x110e3c[_0x995d('0x5c')],['createdAt','updatedAt','id']));_0x258591[_0x995d('0x5d')]=0x15;_0x258591['statedesc']=_0x995d('0x5e');_0x258591[_0x995d('0x5f')]=_0xe8de22[_0x995d('0x24')];_0x258591[_0x995d('0x60')]=_0x2e3ec7[_0x995d('0x61')]['name'];_0x258591['UserId']=_0x2e3ec7[_0x995d('0x61')]['id'];_0x258591[_0x995d('0x5e')]=!![];_0x258591['deletedat']=moment()[_0x995d('0x62')]('YYYY-MM-DD\x20HH:mm:ss');_0x258591[_0x995d('0x63')]=_0x110e3c[_0x995d('0x64')];_0x258591[_0x995d('0x65')]=_0x110e3c['VoiceQueueId']?_0x995d('0x66'):_0x995d('0x67');return db[_0x995d('0x68')][_0x995d('0x52')]({'where':{'id':_0x258591[_0x995d('0x69')]},'attributes':[_0x995d('0x6a'),_0x995d('0x6b')]})[_0x995d('0x21')](function(_0x51edbc){if(!_['isNil'](_0x4e4337)&&!_['isNil'](_0x51edbc['firstName'])){_0x258591['calleridname']=_0x51edbc[_0x995d('0x6a')];if(!_[_0x995d('0x6c')](_0x51edbc[_0x995d('0x6b')])){_0x258591[_0x995d('0x6d')]+='\x20'+_0x51edbc[_0x995d('0x6b')];}}})['finally'](function(){return db['CmHopperFinal']['create'](_0x258591);});}})[_0x995d('0x21')](function(){return _0x4e4337[_0x995d('0x17')](0xcc)[_0x995d('0x18')]();})[_0x995d('0x53')](handleError(_0x4e4337,null));};exports[_0x995d('0x6e')]=function(_0x1780e0,_0xa77635,_0x3e2bea){var _0x2d1d5c=[];return db['CmContact'][_0x995d('0x56')]()[_0x995d('0x21')](function(_0x52b059){_0x2d1d5c=_[_0x995d('0x29')](_0x52b059);return _0x1780e0[_0x995d('0x61')][_0x995d('0x6f')]({'where':{'type':'outbound','dialActive':!![],'dialMethod':_0x995d('0x70')},'attributes':['id',_0x995d('0x71')],'raw':!![]});})[_0x995d('0x21')](function(_0xf142e6){if(_0xf142e6&&_0xf142e6[_0x995d('0x3f')]){return db[_0x995d('0x72')][_0x995d('0x73')](function(_0x463684){var _0x2f12d6={'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0x995d('0x62')](_0x995d('0x74'))},'VoiceQueueId':{'$in':_[_0x995d('0x47')](_0xf142e6,'id')},'$or':[{'UserId':null},{'UserId':_0x1780e0[_0x995d('0x61')]['id']}]};var _0x2a07f9=[];if(_0x1780e0['body']['direction']&&_0x1780e0[_0x995d('0x55')]['direction']==='prev'){if(!_[_0x995d('0x75')](_0x1780e0[_0x995d('0x55')][_0x995d('0x76')])){_0x2f12d6['id']={'$in':_0x1780e0[_0x995d('0x55')][_0x995d('0x76')]};}_0x2a07f9=[[_0x995d('0x77'),_0x995d('0x78')],['scheduledAt',_0xf142e6[0x0][_0x995d('0x71')]===_0x995d('0x78')?_0x995d('0x79'):_0x995d('0x78')],db[_0x995d('0x72')][_0x995d('0x7a')](_0x995d('0x7b')),['id',_0x995d('0x79')]];}else{if(!_['isEmpty'](_0x1780e0[_0x995d('0x55')][_0x995d('0x76')])){_0x2f12d6['id']={'$notIn':_0x1780e0[_0x995d('0x55')][_0x995d('0x76')]};}_0x2a07f9=[[_0x995d('0x77'),_0x995d('0x79')],[_0x995d('0x7c'),_0xf142e6[0x0][_0x995d('0x71')]],db[_0x995d('0x72')][_0x995d('0x7a')](_0x995d('0x7d')),['id',_0x995d('0x78')]];}return db[_0x995d('0x26')][_0x995d('0x7e')]({'attributes':['id','scheduledat'],'where':_0x2f12d6,'order':_0x2a07f9,'transaction':_0x463684,'lock':_0x463684[_0x995d('0x7f')]['UPDATE'],'include':[{'model':db[_0x995d('0x68')],'as':_0x995d('0x80'),'attributes':_0x2d1d5c,'include':[{'model':db[_0x995d('0x81')],'as':_0x995d('0x82'),'attributes':['id','name']}]},{'model':db[_0x995d('0x83')],'as':_0x995d('0x84'),'attributes':['id',_0x995d('0x24')]},{'model':db[_0x995d('0x59')],'as':'Queue','attributes':['id','name','dialActive']}]})['then'](function(_0x1be9f5){if(_0x1be9f5){return _0x1be9f5[_0x995d('0x20')]({'UserId':_0x1780e0[_0x995d('0x61')]['id']},{'transaction':_0x463684});}});});}})['then'](handleEntityNotFound(_0xa77635,null))[_0x995d('0x21')](respondWithResult(_0xa77635,null))[_0x995d('0x53')](handleError(_0xa77635,null));};exports[_0x995d('0x85')]=function(_0x4a09bb,_0x4e7fbd,_0x132232){return _0x4a09bb[_0x995d('0x61')]['getVoiceQueues']({'where':{'type':_0x995d('0x86'),'dialActive':!![],'dialMethod':_0x995d('0x70')},'attributes':['id'],'raw':!![]})['then'](function(_0x1edfdd){if(_0x1edfdd&&_0x1edfdd[_0x995d('0x3f')]){return db['CmHopper'][_0x995d('0x1a')]({'where':{'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0x995d('0x62')]('YYYY-MM-DD\x20HH:mm:ss')},'VoiceQueueId':{'$in':_[_0x995d('0x47')](_0x1edfdd,'id')},'$or':[{'UserId':null},{'UserId':_0x4a09bb['user']['id']}]}});}return 0x0;})[_0x995d('0x21')](function(_0x2ee12c){if(!_[_0x995d('0x6c')](_0x2ee12c)&&_['isNumber'](_0x2ee12c)){return _0x4e7fbd[_0x995d('0x17')](0xc8)[_0x995d('0x19')]({'contacts':_0x2ee12c});}else{logger['error']('CmHopper,\x20%s,\x20%s,\x20%s',_0x995d('0x85'),0x194,_0x995d('0x87'));_0x4e7fbd['sendStatus'](0x194);}})[_0x995d('0x53')](handleError(_0x4e7fbd,null));};
\ No newline at end of file
+var _0x48c4=['CmList','List','Queue','dialActive','CmHopper,\x20%s,\x20%s,\x20%s','entity\x20not\x20found','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','mustache','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','status','end','count','offset','limit','set','Content-Range','json','apply','save','update','then','sendStatus','error','stack','name','send','index','rawAttributes','keys','query','filters','intersection','model','concat','$and','$or','$gt','$gte','$lt','$lte','$ne','$eq','$between','$notBetween','$in','$notIn','$notLike','$iLike','$notILike','$like','$overlap','$contains','$contained','$any','attributes','length','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','CmHopper','includeAll','include','findAll','rows','catch','show','fields','create','body','find','describe','destroy','params','VoiceQueueId','VoiceQueue','Campaign','CampaignId','omit','createdAt','updatedAt','state','statedesc','membername','UserId','user','deleted','deletedat','format','YYYY-MM-DD\x20HH:mm:ss','calleridnum','phone','campaigntype','ivr','CmContact','ContactId','firstName','lastName','isNil','calleridname','finally','getVoiceQueues','outbound','preview','sequelize','transaction','direction','prev','isEmpty','hopperIds','priority','ASC','scheduledAt','dialOrderByScheduledAt','DESC','literal','scheduledat','LOCK','UPDATE','Contact','CmCompany','Company'];(function(_0x146484,_0x27a7f0){var _0x4c7aa3=function(_0x481b98){while(--_0x481b98){_0x146484['push'](_0x146484['shift']());}};_0x4c7aa3(++_0x27a7f0);}(_0x48c4,0x134));var _0x448c=function(_0x67e4d2,_0x49cfe4){_0x67e4d2=_0x67e4d2-0x0;var _0x1ba917=_0x48c4[_0x67e4d2];return _0x1ba917;};'use strict';var pdf=require(_0x448c('0x0'));var emlformat=require(_0x448c('0x1'));var rimraf=require(_0x448c('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x448c('0x3'));var rp=require(_0x448c('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x448c('0x5'));var util=require('util');var path=require(_0x448c('0x6'));var sox=require(_0x448c('0x7'));var csv=require(_0x448c('0x8'));var ejs=require(_0x448c('0x9'));var fs=require('fs');var _=require(_0x448c('0xa'));var squel=require('squel');var crypto=require(_0x448c('0xb'));var jsforce=require(_0x448c('0xc'));var deskjs=require(_0x448c('0xd'));var toCsv=require(_0x448c('0x8'));var querystring=require(_0x448c('0xe'));var Papa=require(_0x448c('0xf'));var Redis=require(_0x448c('0x10'));var authService=require(_0x448c('0x11'));var qs=require(_0x448c('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0x448c('0x13'));var utils=require(_0x448c('0x14'));var config=require(_0x448c('0x15'));var db=require(_0x448c('0x16'))['db'];function respondWithStatusCode(_0x219eac,_0x5aa716){_0x5aa716=_0x5aa716||0xcc;return function(_0x325b4d){if(_0x325b4d){return _0x219eac['sendStatus'](_0x5aa716);}return _0x219eac[_0x448c('0x17')](_0x5aa716)[_0x448c('0x18')]();};}function respondWithResult(_0x5a3f1d,_0x26a5fe){_0x26a5fe=_0x26a5fe||0xc8;return function(_0x4ac329){if(_0x4ac329){return _0x5a3f1d[_0x448c('0x17')](_0x26a5fe)['json'](_0x4ac329);}};}function respondWithFilteredResult(_0x149d80,_0x5ad6bc){return function(_0x19b5b9){if(_0x19b5b9){var _0x463a1e=_0x19b5b9[_0x448c('0x19')],_0x2f8334=_0x5ad6bc[_0x448c('0x1a')],_0x414e54=_0x5ad6bc[_0x448c('0x1a')]+_0x5ad6bc[_0x448c('0x1b')],_0x4d1d46;if(_0x414e54>=_0x463a1e){_0x414e54=_0x463a1e;_0x4d1d46=0xc8;}else{_0x4d1d46=0xce;}_0x149d80[_0x448c('0x17')](_0x4d1d46);return _0x149d80[_0x448c('0x1c')](_0x448c('0x1d'),_0x2f8334+'-'+_0x414e54+'/'+_0x463a1e)[_0x448c('0x1e')](_0x19b5b9);}return null;};}function patchUpdates(_0x4cbbea){return function(_0x2510f7){try{jsonpatch[_0x448c('0x1f')](_0x2510f7,_0x4cbbea,!![]);}catch(_0x277c1f){return BPromise['reject'](_0x277c1f);}return _0x2510f7[_0x448c('0x20')]();};}function saveUpdates(_0x435d02,_0x4085f8){return function(_0x309078){if(_0x309078){return _0x309078[_0x448c('0x21')](_0x435d02)[_0x448c('0x22')](function(_0x422998){return _0x422998;});}return null;};}function removeEntity(_0x1f05df,_0x1a0b9a){return function(_0x557f7d){if(_0x557f7d){return _0x557f7d['destroy']()[_0x448c('0x22')](function(){_0x1f05df[_0x448c('0x17')](0xcc)['end']();});}};}function handleEntityNotFound(_0x5d9e48,_0x476d94){return function(_0x1f6d1e){if(!_0x1f6d1e){_0x5d9e48[_0x448c('0x23')](0x194);}return _0x1f6d1e;};}function handleError(_0x336a8f,_0x4ea4c5){_0x4ea4c5=_0x4ea4c5||0x1f4;return function(_0x5f24d5){logger[_0x448c('0x24')](_0x5f24d5[_0x448c('0x25')]);if(_0x5f24d5[_0x448c('0x26')]){delete _0x5f24d5[_0x448c('0x26')];}_0x336a8f[_0x448c('0x17')](_0x4ea4c5)[_0x448c('0x27')](_0x5f24d5);};}exports[_0x448c('0x28')]=function(_0x42e096,_0x1de1a1){var _0x11554e={},_0xd51334={},_0x8d6188={'count':0x0,'rows':[]};var _0x26a28e=db['CmHopper'][_0x448c('0x29')];_0xd51334['model']=_[_0x448c('0x2a')](_0x26a28e);_0xd51334[_0x448c('0x2b')]=_[_0x448c('0x2a')](_0x42e096[_0x448c('0x2b')]);_0xd51334[_0x448c('0x2c')]=_[_0x448c('0x2d')](_0xd51334[_0x448c('0x2e')],_0xd51334[_0x448c('0x2b')]);_0xd51334[_0x448c('0x2c')]=_[_0x448c('0x2f')](_0xd51334[_0x448c('0x2c')],[_0x448c('0x30'),_0x448c('0x31'),_0x448c('0x32'),_0x448c('0x33'),_0x448c('0x34'),_0x448c('0x35'),_0x448c('0x36'),_0x448c('0x37'),'$not',_0x448c('0x38'),_0x448c('0x39'),_0x448c('0x3a'),_0x448c('0x3b'),'$like',_0x448c('0x3c'),_0x448c('0x3d'),_0x448c('0x3e'),_0x448c('0x3f'),_0x448c('0x40'),_0x448c('0x41'),_0x448c('0x42'),_0x448c('0x43')]);_0x11554e[_0x448c('0x44')]=_[_0x448c('0x2d')](_0xd51334[_0x448c('0x2e')],qs['fields'](_0x42e096[_0x448c('0x2b')]['fields']));_0x11554e[_0x448c('0x44')]=_0x11554e[_0x448c('0x44')][_0x448c('0x45')]?_0x11554e['attributes']:_0xd51334['model'];if(!_0x42e096[_0x448c('0x2b')]['hasOwnProperty'](_0x448c('0x46'))){_0x11554e[_0x448c('0x1b')]=qs['limit'](_0x42e096[_0x448c('0x2b')][_0x448c('0x1b')]);_0x11554e['offset']=qs[_0x448c('0x1a')](_0x42e096['query'][_0x448c('0x1a')]);}_0x11554e[_0x448c('0x47')]=qs[_0x448c('0x48')](_0x42e096[_0x448c('0x2b')][_0x448c('0x48')]);_0x11554e[_0x448c('0x49')]=qs[_0x448c('0x2c')](_[_0x448c('0x4a')](_0x42e096[_0x448c('0x2b')],_0xd51334[_0x448c('0x2c')]));if(_0x42e096['query'][_0x448c('0x4b')]){_0x11554e['where']=_[_0x448c('0x4c')](_0x11554e[_0x448c('0x49')],{'$or':_[_0x448c('0x4d')](_0x26a28e,function(_0x25603a){if(_0x25603a[_0x448c('0x4e')][_0x448c('0x4f')]!==_0x448c('0x50')){var _0x143f67={};_0x143f67[_0x25603a[_0x448c('0x51')]]={'$like':'%'+_0x42e096[_0x448c('0x2b')][_0x448c('0x4b')]+'%'};return _0x143f67;}})});}_0x11554e=_['merge']({},_0x11554e,_0x42e096[_0x448c('0x52')]);var _0x430ed6={'where':_0x11554e['where']};return db[_0x448c('0x53')][_0x448c('0x19')](_0x430ed6)[_0x448c('0x22')](function(_0x268e2f){_0x8d6188['count']=_0x268e2f;if(_0x42e096[_0x448c('0x2b')][_0x448c('0x54')]){_0x11554e[_0x448c('0x55')]=[{'all':!![]}];}return db[_0x448c('0x53')][_0x448c('0x56')](_0x11554e);})['then'](function(_0x31329f){_0x8d6188[_0x448c('0x57')]=_0x31329f;return _0x8d6188;})[_0x448c('0x22')](respondWithFilteredResult(_0x1de1a1,_0x11554e))[_0x448c('0x58')](handleError(_0x1de1a1,null));};exports[_0x448c('0x59')]=function(_0x163684,_0x51b8eb){var _0x5deafe={'raw':!![],'where':{'id':_0x163684['params']['id']}},_0x3bb9c4={};_0x3bb9c4[_0x448c('0x2e')]=_[_0x448c('0x2a')](db[_0x448c('0x53')][_0x448c('0x29')]);_0x3bb9c4[_0x448c('0x2b')]=_[_0x448c('0x2a')](_0x163684[_0x448c('0x2b')]);_0x3bb9c4[_0x448c('0x2c')]=_[_0x448c('0x2d')](_0x3bb9c4[_0x448c('0x2e')],_0x3bb9c4['query']);_0x5deafe['attributes']=_['intersection'](_0x3bb9c4['model'],qs[_0x448c('0x5a')](_0x163684[_0x448c('0x2b')][_0x448c('0x5a')]));_0x5deafe['attributes']=_0x5deafe[_0x448c('0x44')][_0x448c('0x45')]?_0x5deafe['attributes']:_0x3bb9c4[_0x448c('0x2e')];if(_0x163684[_0x448c('0x2b')][_0x448c('0x54')]){_0x5deafe[_0x448c('0x55')]=[{'all':!![]}];}_0x5deafe=_[_0x448c('0x4c')]({},_0x5deafe,_0x163684[_0x448c('0x52')]);return db[_0x448c('0x53')]['find'](_0x5deafe)[_0x448c('0x22')](handleEntityNotFound(_0x51b8eb,null))[_0x448c('0x22')](respondWithResult(_0x51b8eb,null))[_0x448c('0x58')](handleError(_0x51b8eb,null));};exports[_0x448c('0x5b')]=function(_0x1bb08d,_0x3cabb6){return db[_0x448c('0x53')][_0x448c('0x5b')](_0x1bb08d[_0x448c('0x5c')],{})['then'](respondWithResult(_0x3cabb6,0xc9))['catch'](handleError(_0x3cabb6,null));};exports['update']=function(_0x3c44ff,_0x169edd){if(_0x3c44ff[_0x448c('0x5c')]['id']){delete _0x3c44ff[_0x448c('0x5c')]['id'];}return db[_0x448c('0x53')][_0x448c('0x5d')]({'where':{'id':_0x3c44ff['params']['id']}})['then'](handleEntityNotFound(_0x169edd,null))['then'](saveUpdates(_0x3c44ff[_0x448c('0x5c')],null))[_0x448c('0x22')](respondWithResult(_0x169edd,null))[_0x448c('0x58')](handleError(_0x169edd,null));};exports[_0x448c('0x5e')]=function(_0x11c424,_0x3683be){return db[_0x448c('0x53')]['describe']()['then'](respondWithResult(_0x3683be,null))['catch'](handleError(_0x3683be,null));};exports[_0x448c('0x5f')]=function(_0xec1fe8,_0x57e4db){var _0x1517af;return db[_0x448c('0x53')][_0x448c('0x5d')]({'where':{'id':_0xec1fe8[_0x448c('0x60')]['id']}})[_0x448c('0x22')](handleEntityNotFound(_0x57e4db,null))[_0x448c('0x22')](function(_0x454422){if(_0x454422){return _0x454422[_0x448c('0x5f')]()[_0x448c('0x22')](function(_0x2a0aad){return _0x2a0aad;});}})['then'](function(_0x20985d){_0x1517af=_0x20985d;if(_0x20985d){if(_0x20985d['VoiceQueueId']||_0x20985d['CampaignId']){return db[_0x20985d[_0x448c('0x61')]?_0x448c('0x62'):_0x448c('0x63')][_0x448c('0x5d')]({'where':{'id':_0x20985d[_0x448c('0x61')]?_0x20985d['VoiceQueueId']:_0x20985d[_0x448c('0x64')]},'attributes':['id',_0x448c('0x26')],'raw':!![]});}}})['then'](function(_0x560dc9){var _0x10d33c={};if(_0x560dc9){_['merge'](_0x10d33c,_[_0x448c('0x65')](_0x1517af['dataValues'],[_0x448c('0x66'),_0x448c('0x67'),'id']));_0x10d33c[_0x448c('0x68')]=0x15;_0x10d33c[_0x448c('0x69')]='deleted';_0x10d33c['campaign']=_0x560dc9['name'];_0x10d33c[_0x448c('0x6a')]=_0xec1fe8['user'][_0x448c('0x26')];_0x10d33c[_0x448c('0x6b')]=_0xec1fe8[_0x448c('0x6c')]['id'];_0x10d33c[_0x448c('0x6d')]=!![];_0x10d33c[_0x448c('0x6e')]=moment()[_0x448c('0x6f')](_0x448c('0x70'));_0x10d33c[_0x448c('0x71')]=_0x1517af[_0x448c('0x72')];_0x10d33c[_0x448c('0x73')]=_0x1517af[_0x448c('0x61')]?'queue':_0x448c('0x74');return db[_0x448c('0x75')][_0x448c('0x5d')]({'where':{'id':_0x10d33c[_0x448c('0x76')]},'attributes':[_0x448c('0x77'),_0x448c('0x78')]})[_0x448c('0x22')](function(_0x49157d){if(!_['isNil'](_0x57e4db)&&!_[_0x448c('0x79')](_0x49157d['firstName'])){_0x10d33c[_0x448c('0x7a')]=_0x49157d[_0x448c('0x77')];if(!_[_0x448c('0x79')](_0x49157d[_0x448c('0x78')])){_0x10d33c[_0x448c('0x7a')]+='\x20'+_0x49157d[_0x448c('0x78')];}}})[_0x448c('0x7b')](function(){return db['CmHopperFinal'][_0x448c('0x5b')](_0x10d33c);});}})[_0x448c('0x22')](function(){return _0x57e4db['status'](0xcc)[_0x448c('0x18')]();})[_0x448c('0x58')](handleError(_0x57e4db,null));};exports['getPreview']=function(_0x216d42,_0xb799c0,_0x1a6f5b){var _0x37cd61=[];return db['CmContact'][_0x448c('0x5e')]()[_0x448c('0x22')](function(_0xccc911){_0x37cd61=_['keys'](_0xccc911);return _0x216d42[_0x448c('0x6c')][_0x448c('0x7c')]({'where':{'type':_0x448c('0x7d'),'dialActive':!![],'dialMethod':_0x448c('0x7e')},'attributes':['id','dialOrderByScheduledAt'],'raw':!![]});})[_0x448c('0x22')](function(_0x1dfd70){if(_0x1dfd70&&_0x1dfd70[_0x448c('0x45')]){return db[_0x448c('0x7f')][_0x448c('0x80')](function(_0x198846){var _0x5f58a1={'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0x448c('0x6f')](_0x448c('0x70'))},'VoiceQueueId':{'$in':_[_0x448c('0x4d')](_0x1dfd70,'id')},'$or':[{'UserId':null},{'UserId':_0x216d42['user']['id']}]};var _0x3d14c3=[];if(_0x216d42[_0x448c('0x5c')][_0x448c('0x81')]&&_0x216d42[_0x448c('0x5c')][_0x448c('0x81')]===_0x448c('0x82')){if(!_[_0x448c('0x83')](_0x216d42[_0x448c('0x5c')]['hopperIds'])){_0x5f58a1['id']={'$in':_0x216d42[_0x448c('0x5c')][_0x448c('0x84')]};}_0x3d14c3=[[_0x448c('0x85'),_0x448c('0x86')],[_0x448c('0x87'),_0x1dfd70[0x0][_0x448c('0x88')]===_0x448c('0x86')?_0x448c('0x89'):_0x448c('0x86')],db['sequelize']['literal']('COALESCE(CmHopper.UserId,\x200)\x20ASC'),['id','DESC']];}else{if(!_[_0x448c('0x83')](_0x216d42[_0x448c('0x5c')]['hopperIds'])){_0x5f58a1['id']={'$notIn':_0x216d42[_0x448c('0x5c')]['hopperIds']};}_0x3d14c3=[['priority','DESC'],[_0x448c('0x87'),_0x1dfd70[0x0]['dialOrderByScheduledAt']],db[_0x448c('0x7f')][_0x448c('0x8a')]('COALESCE(CmHopper.UserId,\x200)\x20DESC'),['id',_0x448c('0x86')]];}return db['CmHopper']['findOne']({'attributes':['id',_0x448c('0x8b')],'where':_0x5f58a1,'order':_0x3d14c3,'transaction':_0x198846,'lock':_0x198846[_0x448c('0x8c')][_0x448c('0x8d')],'include':[{'model':db[_0x448c('0x75')],'as':_0x448c('0x8e'),'attributes':_0x37cd61,'include':[{'model':db[_0x448c('0x8f')],'as':_0x448c('0x90'),'attributes':['id',_0x448c('0x26')]}]},{'model':db[_0x448c('0x91')],'as':_0x448c('0x92'),'attributes':['id',_0x448c('0x26')]},{'model':db['VoiceQueue'],'as':_0x448c('0x93'),'attributes':['id',_0x448c('0x26'),_0x448c('0x94')]}]})['then'](function(_0x56c8cc){if(_0x56c8cc){return _0x56c8cc[_0x448c('0x21')]({'UserId':_0x216d42[_0x448c('0x6c')]['id']},{'transaction':_0x198846});}});});}})[_0x448c('0x22')](handleEntityNotFound(_0xb799c0,null))[_0x448c('0x22')](respondWithResult(_0xb799c0,null))[_0x448c('0x58')](handleError(_0xb799c0,null));};exports['getOpenContacts']=function(_0x12518e,_0x44529c,_0x597321){return _0x12518e[_0x448c('0x6c')][_0x448c('0x7c')]({'where':{'type':_0x448c('0x7d'),'dialActive':!![],'dialMethod':_0x448c('0x7e')},'attributes':['id'],'raw':!![]})['then'](function(_0x2d3823){if(_0x2d3823&&_0x2d3823[_0x448c('0x45')]){return db[_0x448c('0x53')][_0x448c('0x19')]({'where':{'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0x448c('0x6f')](_0x448c('0x70'))},'VoiceQueueId':{'$in':_[_0x448c('0x4d')](_0x2d3823,'id')},'$or':[{'UserId':null},{'UserId':_0x12518e[_0x448c('0x6c')]['id']}]}});}return 0x0;})[_0x448c('0x22')](function(_0x220082){if(!_[_0x448c('0x79')](_0x220082)&&_['isNumber'](_0x220082)){return _0x44529c['status'](0xc8)[_0x448c('0x1e')]({'contacts':_0x220082});}else{logger[_0x448c('0x24')](_0x448c('0x95'),'getOpenContacts',0x194,_0x448c('0x96'));_0x44529c[_0x448c('0x23')](0x194);}})[_0x448c('0x58')](handleError(_0x44529c,null));};
\ No newline at end of file
index 0c8898a..c8de5cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e81=['../../config/environment','./cmHopper.attributes','exports','define','CmHopper','cm_hopper','scheduledat','phone','priority','lodash','util','../../config/logger','request-promise','path','rimraf'];(function(_0x34f17e,_0x2771c0){var _0x1e6a56=function(_0x5f33d3){while(--_0x5f33d3){_0x34f17e['push'](_0x34f17e['shift']());}};_0x1e6a56(++_0x2771c0);}(_0x4e81,0x1bc));var _0x14e8=function(_0x20b29c,_0xe22528){_0x20b29c=_0x20b29c-0x0;var _0x20d81b=_0x4e81[_0x20b29c];return _0x20d81b;};'use strict';var _=require(_0x14e8('0x0'));var util=require(_0x14e8('0x1'));var logger=require(_0x14e8('0x2'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x14e8('0x3'));var fs=require('fs');var path=require(_0x14e8('0x4'));var rimraf=require(_0x14e8('0x5'));var config=require(_0x14e8('0x6'));var attributes=require(_0x14e8('0x7'));module[_0x14e8('0x8')]=function(_0x56a266,_0x57c79b){return _0x56a266[_0x14e8('0x9')](_0x14e8('0xa'),attributes,{'tableName':_0x14e8('0xb'),'paranoid':![],'indexes':[{'name':_0x14e8('0xc'),'fields':[_0x14e8('0xc')]},{'name':_0x14e8('0xd'),'fields':[_0x14e8('0xd')]},{'name':_0x14e8('0xe'),'fields':[_0x14e8('0xe')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x0102=['util','../../config/logger','api','moment','./cmHopper.attributes','exports','CmHopper','scheduledat','phone','priority'];(function(_0x2f70a4,_0xb43feb){var _0x349a6e=function(_0x386343){while(--_0x386343){_0x2f70a4['push'](_0x2f70a4['shift']());}};_0x349a6e(++_0xb43feb);}(_0x0102,0x186));var _0x2010=function(_0x4ba6c9,_0x525da4){_0x4ba6c9=_0x4ba6c9-0x0;var _0x515175=_0x0102[_0x4ba6c9];return _0x515175;};'use strict';var _=require('lodash');var util=require(_0x2010('0x0'));var logger=require(_0x2010('0x1'))(_0x2010('0x2'));var moment=require(_0x2010('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x2010('0x4'));module[_0x2010('0x5')]=function(_0x130725,_0x304264){return _0x130725['define'](_0x2010('0x6'),attributes,{'tableName':'cm_hopper','paranoid':![],'indexes':[{'name':_0x2010('0x7'),'fields':[_0x2010('0x7')]},{'name':'phone','fields':[_0x2010('0x8')]},{'name':_0x2010('0x9'),'fields':[_0x2010('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
index 9305a28..7f92704 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4eb1=['find','ShowCmHopper','create','body','CreateCmHopper','UpdateCmHopper','update','DestroyCmHopper','destroy','describe','sequelize','transaction','UPDATE','CmContact','Contact','keys','length','push','all','GetContactDialer','CmHopperFinal','MoveContactManagedDialer','CountReScheduled','COUNT','literal','`scheduledat`\x20>=\x20','format','\x22%s\x22','YYYY-MM-DD\x20HH:mm:ss','\x20,\x201,\x20null','contactsRescheduled','order','UserId','LOCK','GetContactRecallMe','lodash','util','bluebird','../../mysqldb','../../config/utils','rpc','../../config/environment','http','request','then','info','CmHopper,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','GetCmHopper','CmHopper','findAll','options','raw','where','attributes','limit','include','model','map','debug'];(function(_0x506926,_0x5a58c1){var _0x1e12c7=function(_0x4b29a8){while(--_0x4b29a8){_0x506926['push'](_0x506926['shift']());}};_0x1e12c7(++_0x5a58c1);}(_0x4eb1,0x1af));var _0x14eb=function(_0x47394e,_0x5f26f2){_0x47394e=_0x47394e-0x0;var _0x4390f2=_0x4eb1[_0x47394e];return _0x4390f2;};'use strict';var _=require(_0x14eb('0x0'));var util=require(_0x14eb('0x1'));var moment=require('moment');var BPromise=require(_0x14eb('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x14eb('0x3'))['db'];var utils=require(_0x14eb('0x4'));var logger=require('../../config/logger')(_0x14eb('0x5'));var config=require(_0x14eb('0x6'));var jayson=require('jayson/promise');var client=jayson['client'][_0x14eb('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x56d682,_0x263388,_0x18ba8e){return new BPromise(function(_0x4c41a3,_0x5bf1de){return client[_0x14eb('0x8')](_0x56d682,_0x18ba8e)[_0x14eb('0x9')](function(_0x5cb4e0){logger[_0x14eb('0xa')](_0x14eb('0xb'),_0x263388,_0x14eb('0xc'));logger['debug']('CmHopper,\x20%s,\x20%s,\x20%s',_0x263388,_0x14eb('0xc'),JSON[_0x14eb('0xd')](_0x5cb4e0));if(_0x5cb4e0[_0x14eb('0xe')]){if(_0x5cb4e0[_0x14eb('0xe')][_0x14eb('0xf')]===0x1f4){logger[_0x14eb('0xe')]('CmHopper,\x20%s,\x20%s',_0x263388,_0x5cb4e0[_0x14eb('0xe')][_0x14eb('0x10')]);return _0x5bf1de(_0x5cb4e0[_0x14eb('0xe')][_0x14eb('0x10')]);}logger[_0x14eb('0xe')](_0x14eb('0xb'),_0x263388,_0x5cb4e0[_0x14eb('0xe')][_0x14eb('0x10')]);return _0x4c41a3(_0x5cb4e0[_0x14eb('0xe')][_0x14eb('0x10')]);}else{logger['info'](_0x14eb('0xb'),_0x263388,_0x14eb('0xc'));_0x4c41a3(_0x5cb4e0[_0x14eb('0x11')]['message']);}})[_0x14eb('0x12')](function(_0x1a749a){logger[_0x14eb('0xe')](_0x14eb('0xb'),_0x263388,_0x1a749a);_0x5bf1de(_0x1a749a);});});}exports[_0x14eb('0x13')]=function(_0x1d43fe){var _0x499338=this;return new Promise(function(_0x2b6fe7,_0x42f9d0){return db[_0x14eb('0x14')][_0x14eb('0x15')]({'raw':_0x1d43fe[_0x14eb('0x16')]?_0x1d43fe[_0x14eb('0x16')][_0x14eb('0x17')]===undefined?!![]:![]:!![],'where':_0x1d43fe[_0x14eb('0x16')]?_0x1d43fe[_0x14eb('0x16')][_0x14eb('0x18')]||null:null,'attributes':_0x1d43fe['options']?_0x1d43fe[_0x14eb('0x16')][_0x14eb('0x19')]||null:null,'limit':_0x1d43fe[_0x14eb('0x16')]?_0x1d43fe[_0x14eb('0x16')][_0x14eb('0x1a')]||null:null,'include':_0x1d43fe[_0x14eb('0x16')]?_0x1d43fe[_0x14eb('0x16')]['include']?_['map'](_0x1d43fe[_0x14eb('0x16')][_0x14eb('0x1b')],function(_0x2f1a68){return{'model':db[_0x2f1a68['model']],'as':_0x2f1a68['as'],'attributes':_0x2f1a68[_0x14eb('0x19')],'include':_0x2f1a68[_0x14eb('0x1b')]?_['map'](_0x2f1a68['include'],function(_0x404d56){return{'model':db[_0x404d56[_0x14eb('0x1c')]],'as':_0x404d56['as'],'attributes':_0x404d56[_0x14eb('0x19')],'include':_0x404d56[_0x14eb('0x1b')]?_[_0x14eb('0x1d')](_0x404d56['include'],function(_0x5166de){return{'model':db[_0x5166de[_0x14eb('0x1c')]],'as':_0x5166de['as'],'attributes':_0x5166de['attributes']};}):[]};}):[]};}):[]:[]})[_0x14eb('0x9')](function(_0x5a89c6){logger[_0x14eb('0xa')](_0x14eb('0x13'),_0x1d43fe);logger[_0x14eb('0x1e')]('GetCmHopper',_0x1d43fe,JSON['stringify'](_0x5a89c6));_0x2b6fe7(_0x5a89c6);})['catch'](function(_0x5e5e1d){logger['error']('GetCmHopper',_0x5e5e1d['message'],_0x1d43fe);_0x42f9d0(_0x499338[_0x14eb('0xe')](0x1f4,_0x5e5e1d[_0x14eb('0x10')]));});});};exports['ShowCmHopper']=function(_0x344aa2){var _0x3ec4cb=this;return new Promise(function(_0x2836f5,_0x191e00){return db['CmHopper'][_0x14eb('0x1f')]({'raw':_0x344aa2[_0x14eb('0x16')]?_0x344aa2['options']['raw']===undefined?!![]:![]:!![],'where':_0x344aa2[_0x14eb('0x16')]?_0x344aa2['options'][_0x14eb('0x18')]||null:null,'attributes':_0x344aa2[_0x14eb('0x16')]?_0x344aa2[_0x14eb('0x16')]['attributes']||null:null,'include':_0x344aa2['options']?_0x344aa2['options'][_0x14eb('0x1b')]?_[_0x14eb('0x1d')](_0x344aa2[_0x14eb('0x16')]['include'],function(_0x2e8761){return{'model':db[_0x2e8761[_0x14eb('0x1c')]],'as':_0x2e8761['as'],'attributes':_0x2e8761[_0x14eb('0x19')],'include':_0x2e8761[_0x14eb('0x1b')]?_[_0x14eb('0x1d')](_0x2e8761[_0x14eb('0x1b')],function(_0x2167f1){return{'model':db[_0x2167f1[_0x14eb('0x1c')]],'as':_0x2167f1['as'],'attributes':_0x2167f1['attributes'],'include':_0x2167f1[_0x14eb('0x1b')]?_[_0x14eb('0x1d')](_0x2167f1[_0x14eb('0x1b')],function(_0x40823c){return{'model':db[_0x40823c['model']],'as':_0x40823c['as'],'attributes':_0x40823c['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0xdb0f12){logger['info'](_0x14eb('0x20'),_0x344aa2);logger[_0x14eb('0x1e')](_0x14eb('0x20'),_0x344aa2,JSON[_0x14eb('0xd')](_0xdb0f12));_0x2836f5(_0xdb0f12);})[_0x14eb('0x12')](function(_0x2e9d34){logger['error']('ShowCmHopper',_0x2e9d34[_0x14eb('0x10')],_0x344aa2);_0x191e00(_0x3ec4cb[_0x14eb('0xe')](0x1f4,_0x2e9d34[_0x14eb('0x10')]));});});};exports['CreateCmHopper']=function(_0x2e4f65){var _0x5aa070=this;return new Promise(function(_0x4dae55,_0x17c914){return db[_0x14eb('0x14')][_0x14eb('0x21')](_0x2e4f65[_0x14eb('0x22')],{'raw':_0x2e4f65[_0x14eb('0x16')]?_0x2e4f65[_0x14eb('0x16')][_0x14eb('0x17')]===undefined?!![]:![]:!![]})[_0x14eb('0x9')](function(_0x38aa61){logger[_0x14eb('0xa')](_0x14eb('0x23'),_0x2e4f65);logger[_0x14eb('0x1e')](_0x14eb('0x23'),_0x2e4f65,JSON[_0x14eb('0xd')](_0x38aa61));_0x4dae55(_0x38aa61);})[_0x14eb('0x12')](function(_0x31558d){logger[_0x14eb('0xe')](_0x14eb('0x23'),_0x31558d[_0x14eb('0x10')],_0x2e4f65);_0x17c914(_0x5aa070['error'](0x1f4,_0x31558d[_0x14eb('0x10')]));});});};exports[_0x14eb('0x24')]=function(_0x568dee){var _0x4aec62=this;return new Promise(function(_0x3a95c1,_0x16f1f9){return db[_0x14eb('0x14')][_0x14eb('0x25')](_0x568dee[_0x14eb('0x22')],{'raw':_0x568dee[_0x14eb('0x16')]?_0x568dee[_0x14eb('0x16')][_0x14eb('0x17')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x568dee[_0x14eb('0x16')]?_0x568dee['options']['where']||null:null,'attributes':_0x568dee['options']?_0x568dee[_0x14eb('0x16')][_0x14eb('0x19')]||null:null,'limit':_0x568dee[_0x14eb('0x16')]?_0x568dee['options'][_0x14eb('0x1a')]||null:null})[_0x14eb('0x9')](function(_0x3b1693){logger['info'](_0x14eb('0x24'),_0x568dee);logger['debug'](_0x14eb('0x24'),_0x568dee,JSON[_0x14eb('0xd')](_0x3b1693));_0x3a95c1(_0x3b1693);})[_0x14eb('0x12')](function(_0xd02f37){logger[_0x14eb('0xe')]('UpdateCmHopper',_0xd02f37['message'],_0x568dee);_0x16f1f9(_0x4aec62[_0x14eb('0xe')](0x1f4,_0xd02f37[_0x14eb('0x10')]));});});};exports[_0x14eb('0x26')]=function(_0x24398d){var _0x11caa4=this;return new Promise(function(_0x200932,_0xf70e01){return db['CmHopper'][_0x14eb('0x27')]({'where':_0x24398d[_0x14eb('0x16')]?_0x24398d[_0x14eb('0x16')][_0x14eb('0x18')]||null:null})['then'](function(_0xeef253){logger[_0x14eb('0xa')](_0x14eb('0x26'),_0x24398d);logger[_0x14eb('0x1e')](_0x14eb('0x26'),_0x24398d,JSON[_0x14eb('0xd')](_0xeef253));_0x200932(_0xeef253);})[_0x14eb('0x12')](function(_0x4fb766){logger['error'](_0x14eb('0x26'),_0x4fb766['message'],_0x24398d);_0xf70e01(_0x11caa4[_0x14eb('0xe')](0x1f4,_0x4fb766['message']));});});};exports['GetContactDialer']=function(_0x95c42c){var _0x537be1=this;return new Promise(function(_0x1c4a71,_0x26d066){return db['CmContact'][_0x14eb('0x28')]()['then'](function(_0x24d4a2){return db[_0x14eb('0x29')][_0x14eb('0x2a')](function(_0x29b3b7){return db[_0x14eb('0x14')][_0x14eb('0x15')]({'where':_0x95c42c[_0x14eb('0x16')]?_0x95c42c['options'][_0x14eb('0x18')]||null:null,'attributes':_0x95c42c[_0x14eb('0x16')]?_0x95c42c[_0x14eb('0x16')]['attributes']||null:null,'limit':_0x95c42c['options']?_0x95c42c[_0x14eb('0x16')]['limit']||null:null,'order':_0x95c42c[_0x14eb('0x16')]?_0x95c42c[_0x14eb('0x16')]['order']||null:null,'transaction':_0x29b3b7,'lock':_0x29b3b7['LOCK'][_0x14eb('0x2b')],'include':[{'model':db[_0x14eb('0x2c')],'as':_0x14eb('0x2d'),'attributes':_[_0x14eb('0x2e')](_0x24d4a2)}]})[_0x14eb('0x9')](function(_0x5126dc){var _0xfa2b22=[];for(var _0x5db618=0x0;_0x5db618<_0x5126dc[_0x14eb('0x2f')];_0x5db618+=0x1){_0xfa2b22[_0x14eb('0x30')](_0x5126dc[_0x5db618][_0x14eb('0x25')](_0x95c42c[_0x14eb('0x22')],{'transaction':_0x29b3b7}));}return BPromise[_0x14eb('0x31')](_0xfa2b22);});})[_0x14eb('0x9')](function(_0x4e6f90){logger['info'](_0x14eb('0x32'),_0x95c42c);logger['debug'](_0x14eb('0x32'),_0x95c42c,JSON[_0x14eb('0xd')](_0x4e6f90));_0x1c4a71(_0x4e6f90);})[_0x14eb('0x12')](function(_0x1a4606){logger['error'](_0x14eb('0x32'),_0x1a4606[_0x14eb('0x10')],_0x95c42c);_0x26d066(_0x537be1[_0x14eb('0xe')](0x1f4,_0x1a4606[_0x14eb('0x10')]));});});});};exports['MoveContactManagedDialer']=function(_0x5cdbbe){var _0x2f4e87=this;return new Promise(function(_0xd84e2f,_0x435f16){return db[_0x14eb('0x29')][_0x14eb('0x2a')](function(_0x530b78){return db[_0x14eb('0x33')][_0x14eb('0x21')](_0x5cdbbe['body'],{'raw':_0x5cdbbe[_0x14eb('0x16')]?_0x5cdbbe[_0x14eb('0x16')][_0x14eb('0x17')]===undefined?!![]:![]:!![],'transaction':_0x530b78})[_0x14eb('0x9')](function(){return db[_0x14eb('0x14')][_0x14eb('0x27')]({'where':_0x5cdbbe[_0x14eb('0x16')]?_0x5cdbbe[_0x14eb('0x16')][_0x14eb('0x18')]||null:null,'transaction':_0x530b78});});})['then'](function(_0x18c63f){logger[_0x14eb('0xa')](_0x14eb('0x34'),_0x5cdbbe);logger[_0x14eb('0x1e')]('MoveContactManagedDialer',_0x5cdbbe,JSON[_0x14eb('0xd')](_0x18c63f));_0xd84e2f(_0x18c63f);})[_0x14eb('0x12')](function(_0x2c0589){logger[_0x14eb('0xe')]('MoveContactManagedDialer',_0x2c0589[_0x14eb('0x10')],_0x5cdbbe);_0x435f16(_0x2f4e87['error'](0x1f4,_0x2c0589['message']));});});};exports[_0x14eb('0x35')]=function(_0x4ac436){var _0x185f96=this;return new Promise(function(_0x2014d7,_0x1d4a2d){return db[_0x14eb('0x14')][_0x14eb('0x15')]({'raw':_0x4ac436[_0x14eb('0x16')]?_0x4ac436['options'][_0x14eb('0x17')]===undefined?!![]:![]:!![],'where':_0x4ac436[_0x14eb('0x16')]?_0x4ac436[_0x14eb('0x16')][_0x14eb('0x18')]||null:null,'attributes':[[db[_0x14eb('0x29')]['fn'](_0x14eb('0x36'),db['sequelize']['fn']('IF',db['sequelize'][_0x14eb('0x37')](_0x14eb('0x38')+util[_0x14eb('0x39')](_0x14eb('0x3a'),moment()[_0x14eb('0x39')](_0x14eb('0x3b')))+_0x14eb('0x3c')))),_0x14eb('0x3d')]]})[_0x14eb('0x9')](function(_0x20c7d5){logger[_0x14eb('0xa')](_0x14eb('0x35'),_0x4ac436);logger['debug']('CountReScheduled',_0x4ac436,JSON[_0x14eb('0xd')](_0x20c7d5));_0x2014d7(_0x20c7d5);})[_0x14eb('0x12')](function(_0x57dad8){logger[_0x14eb('0xe')](_0x14eb('0x35'),_0x57dad8[_0x14eb('0x10')],_0x4ac436);_0x1d4a2d(_0x185f96[_0x14eb('0xe')](0x1f4,_0x57dad8[_0x14eb('0x10')]));});});};exports['GetContactRecallMe']=function(_0x32d866){var _0x877283=this;return new Promise(function(_0xb35122,_0x1eec02){return db['CmContact']['describe']()[_0x14eb('0x9')](function(_0x1f7ee9){return db[_0x14eb('0x29')]['transaction'](function(_0x1dc415){return db['CmHopper'][_0x14eb('0x15')]({'where':_0x32d866[_0x14eb('0x16')]?_0x32d866['options']['where']||null:null,'attributes':_0x32d866['options']?_0x32d866[_0x14eb('0x16')][_0x14eb('0x19')]||null:null,'limit':0x1,'order':_0x32d866[_0x14eb('0x16')]?_0x32d866[_0x14eb('0x16')][_0x14eb('0x3e')]||null:null,'group':db[_0x14eb('0x14')][_0x14eb('0x3f')],'transaction':_0x1dc415,'lock':_0x1dc415[_0x14eb('0x40')][_0x14eb('0x2b')],'include':_0x32d866[_0x14eb('0x16')]?_0x32d866[_0x14eb('0x16')]['include']?_[_0x14eb('0x1d')](_0x32d866[_0x14eb('0x16')]['include'],function(_0x1d4b52){return{'model':db[_0x1d4b52[_0x14eb('0x1c')]],'as':_0x1d4b52['as'],'attributes':_0x1d4b52[_0x14eb('0x19')],'include':_0x1d4b52[_0x14eb('0x1b')]?_['map'](_0x1d4b52[_0x14eb('0x1b')],function(_0x5abf1d){return{'model':db[_0x5abf1d[_0x14eb('0x1c')]],'as':_0x5abf1d['as'],'attributes':_0x5abf1d[_0x14eb('0x19')],'include':_0x5abf1d[_0x14eb('0x1b')]?_[_0x14eb('0x1d')](_0x5abf1d['include'],function(_0x50166f){return{'model':db[_0x50166f['model']],'as':_0x50166f['as'],'attributes':_0x50166f[_0x14eb('0x19')]};}):[]};}):[]};}):[]:[]})[_0x14eb('0x9')](function(_0x587448){var _0x5db181=[];for(var _0x45936f=0x0;_0x45936f<_0x587448[_0x14eb('0x2f')];_0x45936f+=0x1){_0x5db181[_0x14eb('0x30')](_0x587448[_0x45936f][_0x14eb('0x25')](_0x32d866[_0x14eb('0x22')],{'transaction':_0x1dc415}));}return BPromise[_0x14eb('0x31')](_0x5db181);});})['then'](function(_0x34e607){logger[_0x14eb('0xa')](_0x14eb('0x41'),_0x32d866);logger['debug'](_0x14eb('0x41'),_0x32d866,JSON[_0x14eb('0xd')](_0x34e607));_0xb35122(_0x34e607);})[_0x14eb('0x12')](function(_0x32aa40){logger[_0x14eb('0xe')](_0x14eb('0x41'),_0x32aa40[_0x14eb('0x10')],_0x32d866);_0x1eec02(_0x877283[_0x14eb('0xe')](0x1f4,_0x32aa40['message']));});});});};
\ No newline at end of file
+var _0x7ddd=['rpc','../../config/environment','jayson/promise','client','http','request','then','info','CmHopper,\x20%s,\x20%s','request\x20sent','debug','CmHopper,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','GetCmHopper','CmHopper','findAll','options','attributes','include','map','model','catch','ShowCmHopper','raw','where','CreateCmHopper','create','body','UpdateCmHopper','update','limit','DestroyCmHopper','destroy','GetContactDialer','CmContact','describe','order','LOCK','UPDATE','length','all','MoveContactManagedDialer','sequelize','transaction','CountReScheduled','COUNT','literal','`scheduledat`\x20>=\x20','format','\x22%s\x22','YYYY-MM-DD\x20HH:mm:ss','\x20,\x201,\x20null','contactsRescheduled','GetContactRecallMe','UserId','push','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x5db99b,_0xdee23a){var _0x4b2d0e=function(_0x4deee1){while(--_0x4deee1){_0x5db99b['push'](_0x5db99b['shift']());}};_0x4b2d0e(++_0xdee23a);}(_0x7ddd,0xc0));var _0xd7dd=function(_0xff8ff1,_0x36379d){_0xff8ff1=_0xff8ff1-0x0;var _0x184816=_0x7ddd[_0xff8ff1];return _0x184816;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xd7dd('0x0'));var BPromise=require(_0xd7dd('0x1'));var rs=require(_0xd7dd('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xd7dd('0x3'))['db'];var utils=require(_0xd7dd('0x4'));var logger=require(_0xd7dd('0x5'))(_0xd7dd('0x6'));var config=require(_0xd7dd('0x7'));var jayson=require(_0xd7dd('0x8'));var client=jayson[_0xd7dd('0x9')][_0xd7dd('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x426151,_0xf040e0,_0x41a573){return new BPromise(function(_0x4921b4,_0x57a82e){return client[_0xd7dd('0xb')](_0x426151,_0x41a573)[_0xd7dd('0xc')](function(_0x4142ec){logger[_0xd7dd('0xd')](_0xd7dd('0xe'),_0xf040e0,_0xd7dd('0xf'));logger[_0xd7dd('0x10')](_0xd7dd('0x11'),_0xf040e0,_0xd7dd('0xf'),JSON[_0xd7dd('0x12')](_0x4142ec));if(_0x4142ec[_0xd7dd('0x13')]){if(_0x4142ec[_0xd7dd('0x13')][_0xd7dd('0x14')]===0x1f4){logger[_0xd7dd('0x13')](_0xd7dd('0xe'),_0xf040e0,_0x4142ec['error'][_0xd7dd('0x15')]);return _0x57a82e(_0x4142ec[_0xd7dd('0x13')]['message']);}logger[_0xd7dd('0x13')](_0xd7dd('0xe'),_0xf040e0,_0x4142ec[_0xd7dd('0x13')][_0xd7dd('0x15')]);return _0x4921b4(_0x4142ec[_0xd7dd('0x13')]['message']);}else{logger['info']('CmHopper,\x20%s,\x20%s',_0xf040e0,_0xd7dd('0xf'));_0x4921b4(_0x4142ec[_0xd7dd('0x16')][_0xd7dd('0x15')]);}})['catch'](function(_0x18e373){logger[_0xd7dd('0x13')]('CmHopper,\x20%s,\x20%s',_0xf040e0,_0x18e373);_0x57a82e(_0x18e373);});});}exports[_0xd7dd('0x17')]=function(_0x1be5b0){var _0x32a4d1=this;return new Promise(function(_0x1aea76,_0x324fd7){return db[_0xd7dd('0x18')][_0xd7dd('0x19')]({'raw':_0x1be5b0[_0xd7dd('0x1a')]?_0x1be5b0[_0xd7dd('0x1a')]['raw']===undefined?!![]:![]:!![],'where':_0x1be5b0[_0xd7dd('0x1a')]?_0x1be5b0[_0xd7dd('0x1a')]['where']||null:null,'attributes':_0x1be5b0[_0xd7dd('0x1a')]?_0x1be5b0[_0xd7dd('0x1a')][_0xd7dd('0x1b')]||null:null,'limit':_0x1be5b0[_0xd7dd('0x1a')]?_0x1be5b0['options']['limit']||null:null,'include':_0x1be5b0['options']?_0x1be5b0['options'][_0xd7dd('0x1c')]?_[_0xd7dd('0x1d')](_0x1be5b0[_0xd7dd('0x1a')][_0xd7dd('0x1c')],function(_0x3c0fe6){return{'model':db[_0x3c0fe6[_0xd7dd('0x1e')]],'as':_0x3c0fe6['as'],'attributes':_0x3c0fe6['attributes'],'include':_0x3c0fe6[_0xd7dd('0x1c')]?_[_0xd7dd('0x1d')](_0x3c0fe6[_0xd7dd('0x1c')],function(_0x57639f){return{'model':db[_0x57639f[_0xd7dd('0x1e')]],'as':_0x57639f['as'],'attributes':_0x57639f[_0xd7dd('0x1b')],'include':_0x57639f[_0xd7dd('0x1c')]?_[_0xd7dd('0x1d')](_0x57639f[_0xd7dd('0x1c')],function(_0x2c86eb){return{'model':db[_0x2c86eb[_0xd7dd('0x1e')]],'as':_0x2c86eb['as'],'attributes':_0x2c86eb['attributes']};}):[]};}):[]};}):[]:[]})[_0xd7dd('0xc')](function(_0x1c4c14){logger['info'](_0xd7dd('0x17'),_0x1be5b0);logger[_0xd7dd('0x10')](_0xd7dd('0x17'),_0x1be5b0,JSON[_0xd7dd('0x12')](_0x1c4c14));_0x1aea76(_0x1c4c14);})[_0xd7dd('0x1f')](function(_0x4815a2){logger[_0xd7dd('0x13')](_0xd7dd('0x17'),_0x4815a2[_0xd7dd('0x15')],_0x1be5b0);_0x324fd7(_0x32a4d1['error'](0x1f4,_0x4815a2['message']));});});};exports[_0xd7dd('0x20')]=function(_0x2018ca){var _0x4f82ce=this;return new Promise(function(_0x4101bf,_0x3a9cc2){return db['CmHopper']['find']({'raw':_0x2018ca[_0xd7dd('0x1a')]?_0x2018ca[_0xd7dd('0x1a')][_0xd7dd('0x21')]===undefined?!![]:![]:!![],'where':_0x2018ca[_0xd7dd('0x1a')]?_0x2018ca['options'][_0xd7dd('0x22')]||null:null,'attributes':_0x2018ca[_0xd7dd('0x1a')]?_0x2018ca['options'][_0xd7dd('0x1b')]||null:null,'include':_0x2018ca[_0xd7dd('0x1a')]?_0x2018ca['options'][_0xd7dd('0x1c')]?_['map'](_0x2018ca['options']['include'],function(_0x4588cb){return{'model':db[_0x4588cb[_0xd7dd('0x1e')]],'as':_0x4588cb['as'],'attributes':_0x4588cb[_0xd7dd('0x1b')],'include':_0x4588cb[_0xd7dd('0x1c')]?_[_0xd7dd('0x1d')](_0x4588cb[_0xd7dd('0x1c')],function(_0x526d74){return{'model':db[_0x526d74['model']],'as':_0x526d74['as'],'attributes':_0x526d74[_0xd7dd('0x1b')],'include':_0x526d74[_0xd7dd('0x1c')]?_[_0xd7dd('0x1d')](_0x526d74[_0xd7dd('0x1c')],function(_0x31a9ec){return{'model':db[_0x31a9ec[_0xd7dd('0x1e')]],'as':_0x31a9ec['as'],'attributes':_0x31a9ec['attributes']};}):[]};}):[]};}):[]:[]})[_0xd7dd('0xc')](function(_0x2fee0b){logger[_0xd7dd('0xd')]('ShowCmHopper',_0x2018ca);logger[_0xd7dd('0x10')](_0xd7dd('0x20'),_0x2018ca,JSON['stringify'](_0x2fee0b));_0x4101bf(_0x2fee0b);})['catch'](function(_0x567d9b){logger['error']('ShowCmHopper',_0x567d9b[_0xd7dd('0x15')],_0x2018ca);_0x3a9cc2(_0x4f82ce[_0xd7dd('0x13')](0x1f4,_0x567d9b[_0xd7dd('0x15')]));});});};exports[_0xd7dd('0x23')]=function(_0x2fae02){var _0x258084=this;return new Promise(function(_0x2ab927,_0x274c3a){return db['CmHopper'][_0xd7dd('0x24')](_0x2fae02[_0xd7dd('0x25')],{'raw':_0x2fae02[_0xd7dd('0x1a')]?_0x2fae02['options'][_0xd7dd('0x21')]===undefined?!![]:![]:!![]})['then'](function(_0x9afcf5){logger['info'](_0xd7dd('0x23'),_0x2fae02);logger[_0xd7dd('0x10')](_0xd7dd('0x23'),_0x2fae02,JSON['stringify'](_0x9afcf5));_0x2ab927(_0x9afcf5);})['catch'](function(_0x16b813){logger[_0xd7dd('0x13')](_0xd7dd('0x23'),_0x16b813[_0xd7dd('0x15')],_0x2fae02);_0x274c3a(_0x258084[_0xd7dd('0x13')](0x1f4,_0x16b813[_0xd7dd('0x15')]));});});};exports[_0xd7dd('0x26')]=function(_0x473b54){var _0x5d56c=this;return new Promise(function(_0x1f1536,_0x55e602){return db[_0xd7dd('0x18')][_0xd7dd('0x27')](_0x473b54[_0xd7dd('0x25')],{'raw':_0x473b54[_0xd7dd('0x1a')]?_0x473b54[_0xd7dd('0x1a')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x473b54[_0xd7dd('0x1a')]?_0x473b54['options'][_0xd7dd('0x22')]||null:null,'attributes':_0x473b54[_0xd7dd('0x1a')]?_0x473b54[_0xd7dd('0x1a')]['attributes']||null:null,'limit':_0x473b54[_0xd7dd('0x1a')]?_0x473b54[_0xd7dd('0x1a')][_0xd7dd('0x28')]||null:null})[_0xd7dd('0xc')](function(_0x4c8078){logger[_0xd7dd('0xd')](_0xd7dd('0x26'),_0x473b54);logger[_0xd7dd('0x10')](_0xd7dd('0x26'),_0x473b54,JSON['stringify'](_0x4c8078));_0x1f1536(_0x4c8078);})[_0xd7dd('0x1f')](function(_0x33af8d){logger['error']('UpdateCmHopper',_0x33af8d[_0xd7dd('0x15')],_0x473b54);_0x55e602(_0x5d56c['error'](0x1f4,_0x33af8d[_0xd7dd('0x15')]));});});};exports[_0xd7dd('0x29')]=function(_0x52e31e){var _0x40c86d=this;return new Promise(function(_0x4129c9,_0x5bc14f){return db[_0xd7dd('0x18')][_0xd7dd('0x2a')]({'where':_0x52e31e[_0xd7dd('0x1a')]?_0x52e31e[_0xd7dd('0x1a')][_0xd7dd('0x22')]||null:null})[_0xd7dd('0xc')](function(_0x576950){logger[_0xd7dd('0xd')](_0xd7dd('0x29'),_0x52e31e);logger[_0xd7dd('0x10')](_0xd7dd('0x29'),_0x52e31e,JSON[_0xd7dd('0x12')](_0x576950));_0x4129c9(_0x576950);})[_0xd7dd('0x1f')](function(_0x53ff58){logger[_0xd7dd('0x13')](_0xd7dd('0x29'),_0x53ff58[_0xd7dd('0x15')],_0x52e31e);_0x5bc14f(_0x40c86d[_0xd7dd('0x13')](0x1f4,_0x53ff58[_0xd7dd('0x15')]));});});};exports[_0xd7dd('0x2b')]=function(_0x43cd47){var _0x129755=this;return new Promise(function(_0x3baa14,_0x280038){return db[_0xd7dd('0x2c')][_0xd7dd('0x2d')]()[_0xd7dd('0xc')](function(_0x2ed663){return db['sequelize']['transaction'](function(_0x1d3e69){return db[_0xd7dd('0x18')][_0xd7dd('0x19')]({'where':_0x43cd47[_0xd7dd('0x1a')]?_0x43cd47['options']['where']||null:null,'attributes':_0x43cd47[_0xd7dd('0x1a')]?_0x43cd47[_0xd7dd('0x1a')][_0xd7dd('0x1b')]||null:null,'limit':_0x43cd47[_0xd7dd('0x1a')]?_0x43cd47[_0xd7dd('0x1a')][_0xd7dd('0x28')]||null:null,'order':_0x43cd47['options']?_0x43cd47[_0xd7dd('0x1a')][_0xd7dd('0x2e')]||null:null,'transaction':_0x1d3e69,'lock':_0x1d3e69[_0xd7dd('0x2f')][_0xd7dd('0x30')],'include':[{'model':db[_0xd7dd('0x2c')],'as':'Contact','attributes':_['keys'](_0x2ed663)}]})['then'](function(_0x6b6c69){var _0x250ca1=[];for(var _0x43f1b1=0x0;_0x43f1b1<_0x6b6c69[_0xd7dd('0x31')];_0x43f1b1+=0x1){_0x250ca1['push'](_0x6b6c69[_0x43f1b1][_0xd7dd('0x27')](_0x43cd47['body'],{'transaction':_0x1d3e69}));}return BPromise[_0xd7dd('0x32')](_0x250ca1);});})['then'](function(_0x1a51b9){logger[_0xd7dd('0xd')]('GetContactDialer',_0x43cd47);logger[_0xd7dd('0x10')](_0xd7dd('0x2b'),_0x43cd47,JSON[_0xd7dd('0x12')](_0x1a51b9));_0x3baa14(_0x1a51b9);})[_0xd7dd('0x1f')](function(_0x4b4bdd){logger[_0xd7dd('0x13')](_0xd7dd('0x2b'),_0x4b4bdd[_0xd7dd('0x15')],_0x43cd47);_0x280038(_0x129755[_0xd7dd('0x13')](0x1f4,_0x4b4bdd[_0xd7dd('0x15')]));});});});};exports[_0xd7dd('0x33')]=function(_0x2e6127){var _0x1f4756=this;return new Promise(function(_0x5798cd,_0x1d70a2){return db[_0xd7dd('0x34')][_0xd7dd('0x35')](function(_0x3c34a9){return db['CmHopperFinal'][_0xd7dd('0x24')](_0x2e6127[_0xd7dd('0x25')],{'raw':_0x2e6127['options']?_0x2e6127['options'][_0xd7dd('0x21')]===undefined?!![]:![]:!![],'transaction':_0x3c34a9})['then'](function(){return db[_0xd7dd('0x18')][_0xd7dd('0x2a')]({'where':_0x2e6127[_0xd7dd('0x1a')]?_0x2e6127['options']['where']||null:null,'transaction':_0x3c34a9});});})[_0xd7dd('0xc')](function(_0x53d7b0){logger[_0xd7dd('0xd')](_0xd7dd('0x33'),_0x2e6127);logger[_0xd7dd('0x10')]('MoveContactManagedDialer',_0x2e6127,JSON[_0xd7dd('0x12')](_0x53d7b0));_0x5798cd(_0x53d7b0);})[_0xd7dd('0x1f')](function(_0x254fee){logger[_0xd7dd('0x13')](_0xd7dd('0x33'),_0x254fee['message'],_0x2e6127);_0x1d70a2(_0x1f4756[_0xd7dd('0x13')](0x1f4,_0x254fee[_0xd7dd('0x15')]));});});};exports[_0xd7dd('0x36')]=function(_0x354b17){var _0x1ae94e=this;return new Promise(function(_0x2035b7,_0x22a86e){return db[_0xd7dd('0x18')][_0xd7dd('0x19')]({'raw':_0x354b17['options']?_0x354b17[_0xd7dd('0x1a')][_0xd7dd('0x21')]===undefined?!![]:![]:!![],'where':_0x354b17[_0xd7dd('0x1a')]?_0x354b17[_0xd7dd('0x1a')][_0xd7dd('0x22')]||null:null,'attributes':[[db[_0xd7dd('0x34')]['fn'](_0xd7dd('0x37'),db[_0xd7dd('0x34')]['fn']('IF',db[_0xd7dd('0x34')][_0xd7dd('0x38')](_0xd7dd('0x39')+util[_0xd7dd('0x3a')](_0xd7dd('0x3b'),moment()[_0xd7dd('0x3a')](_0xd7dd('0x3c')))+_0xd7dd('0x3d')))),_0xd7dd('0x3e')]]})[_0xd7dd('0xc')](function(_0xaa5f78){logger[_0xd7dd('0xd')](_0xd7dd('0x36'),_0x354b17);logger[_0xd7dd('0x10')](_0xd7dd('0x36'),_0x354b17,JSON[_0xd7dd('0x12')](_0xaa5f78));_0x2035b7(_0xaa5f78);})['catch'](function(_0x438bcd){logger[_0xd7dd('0x13')](_0xd7dd('0x36'),_0x438bcd[_0xd7dd('0x15')],_0x354b17);_0x22a86e(_0x1ae94e['error'](0x1f4,_0x438bcd['message']));});});};exports[_0xd7dd('0x3f')]=function(_0x2ead32){var _0x2ae504=this;return new Promise(function(_0xd0ddb8,_0x3a552d){return db[_0xd7dd('0x2c')]['describe']()['then'](function(_0x58151c){return db[_0xd7dd('0x34')][_0xd7dd('0x35')](function(_0x259f16){return db[_0xd7dd('0x18')][_0xd7dd('0x19')]({'where':_0x2ead32['options']?_0x2ead32[_0xd7dd('0x1a')][_0xd7dd('0x22')]||null:null,'attributes':_0x2ead32['options']?_0x2ead32['options'][_0xd7dd('0x1b')]||null:null,'limit':0x1,'order':_0x2ead32[_0xd7dd('0x1a')]?_0x2ead32['options']['order']||null:null,'group':db['CmHopper'][_0xd7dd('0x40')],'transaction':_0x259f16,'lock':_0x259f16[_0xd7dd('0x2f')][_0xd7dd('0x30')],'include':_0x2ead32[_0xd7dd('0x1a')]?_0x2ead32[_0xd7dd('0x1a')][_0xd7dd('0x1c')]?_['map'](_0x2ead32[_0xd7dd('0x1a')][_0xd7dd('0x1c')],function(_0xb71416){return{'model':db[_0xb71416[_0xd7dd('0x1e')]],'as':_0xb71416['as'],'attributes':_0xb71416[_0xd7dd('0x1b')],'include':_0xb71416[_0xd7dd('0x1c')]?_[_0xd7dd('0x1d')](_0xb71416['include'],function(_0x3c346e){return{'model':db[_0x3c346e[_0xd7dd('0x1e')]],'as':_0x3c346e['as'],'attributes':_0x3c346e['attributes'],'include':_0x3c346e[_0xd7dd('0x1c')]?_[_0xd7dd('0x1d')](_0x3c346e[_0xd7dd('0x1c')],function(_0x8e52d1){return{'model':db[_0x8e52d1['model']],'as':_0x8e52d1['as'],'attributes':_0x8e52d1['attributes']};}):[]};}):[]};}):[]:[]})[_0xd7dd('0xc')](function(_0x1e8ab2){var _0x5ae544=[];for(var _0x42e469=0x0;_0x42e469<_0x1e8ab2['length'];_0x42e469+=0x1){_0x5ae544[_0xd7dd('0x41')](_0x1e8ab2[_0x42e469]['update'](_0x2ead32[_0xd7dd('0x25')],{'transaction':_0x259f16}));}return BPromise[_0xd7dd('0x32')](_0x5ae544);});})[_0xd7dd('0xc')](function(_0x97d371){logger[_0xd7dd('0xd')](_0xd7dd('0x3f'),_0x2ead32);logger[_0xd7dd('0x10')](_0xd7dd('0x3f'),_0x2ead32,JSON['stringify'](_0x97d371));_0xd0ddb8(_0x97d371);})['catch'](function(_0x31bd1b){logger['error'](_0xd7dd('0x3f'),_0x31bd1b['message'],_0x2ead32);_0x3a552d(_0x2ae504[_0xd7dd('0x13')](0x1f4,_0x31bd1b[_0xd7dd('0x15')]));});});});};
\ No newline at end of file
index 294f1d8..f1415f3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['/:id','show','post','/preview','getPreview','put','update','delete','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','/opencontacts','getOpenContacts'];(function(_0xe66cf2,_0x32ba5f){var _0x2d84e7=function(_0x58a7d8){while(--_0x58a7d8){_0xe66cf2['push'](_0xe66cf2['shift']());}};_0x2d84e7(++_0x32ba5f);}(_0x9957,0x93));var _0x7995=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0x9957[_0x501510];return _0x1e6ee5;};'use strict';var multer=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var path=require(_0x7995('0x2'));var timeout=require(_0x7995('0x3'));var express=require('express');var router=express[_0x7995('0x4')]();var auth=require(_0x7995('0x5'));var interaction=require(_0x7995('0x6'));var config=require(_0x7995('0x7'));var controller=require('./cmHopper.controller');router[_0x7995('0x8')]('/',auth[_0x7995('0x9')](),controller[_0x7995('0xa')]);router[_0x7995('0x8')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller['describe']);router[_0x7995('0x8')](_0x7995('0xc'),auth['isAuthenticated'](),controller[_0x7995('0xd')]);router[_0x7995('0x8')](_0x7995('0xe'),auth[_0x7995('0x9')](),controller[_0x7995('0xf')]);router[_0x7995('0x10')]('/',auth[_0x7995('0x9')](),controller['create']);router[_0x7995('0x10')](_0x7995('0x11'),auth['isAuthenticated'](),controller[_0x7995('0x12')]);router[_0x7995('0x13')](_0x7995('0xe'),auth[_0x7995('0x9')](),controller[_0x7995('0x14')]);router[_0x7995('0x15')](_0x7995('0xe'),auth['isAuthenticated'](),controller['destroy']);module[_0x7995('0x16')]=router;
\ No newline at end of file
+var _0x9957=['/:id','show','post','/preview','getPreview','put','update','delete','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','/opencontacts','getOpenContacts'];(function(_0x9cd4c3,_0x1c9b2c){var _0x4c9025=function(_0x25b3c6){while(--_0x25b3c6){_0x9cd4c3['push'](_0x9cd4c3['shift']());}};_0x4c9025(++_0x1c9b2c);}(_0x9957,0x93));var _0x7995=function(_0xbca1b1,_0x33f0ce){_0xbca1b1=_0xbca1b1-0x0;var _0x4e1686=_0x9957[_0xbca1b1];return _0x4e1686;};'use strict';var multer=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var path=require(_0x7995('0x2'));var timeout=require(_0x7995('0x3'));var express=require('express');var router=express[_0x7995('0x4')]();var auth=require(_0x7995('0x5'));var interaction=require(_0x7995('0x6'));var config=require(_0x7995('0x7'));var controller=require('./cmHopper.controller');router[_0x7995('0x8')]('/',auth[_0x7995('0x9')](),controller[_0x7995('0xa')]);router[_0x7995('0x8')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller['describe']);router[_0x7995('0x8')](_0x7995('0xc'),auth['isAuthenticated'](),controller[_0x7995('0xd')]);router[_0x7995('0x8')](_0x7995('0xe'),auth[_0x7995('0x9')](),controller[_0x7995('0xf')]);router[_0x7995('0x10')]('/',auth[_0x7995('0x9')](),controller['create']);router[_0x7995('0x10')](_0x7995('0x11'),auth['isAuthenticated'](),controller[_0x7995('0x12')]);router[_0x7995('0x13')](_0x7995('0xe'),auth[_0x7995('0x9')](),controller[_0x7995('0x14')]);router[_0x7995('0x15')](_0x7995('0xe'),auth['isAuthenticated'](),controller['destroy']);module[_0x7995('0x16')]=router;
\ No newline at end of file
index 6da3218..324711b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x89c8=['contactListQueue','moment','sequelize','exports','INTEGER'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0x89c8,0x17d));var _0x889c=function(_0x46f974,_0x5b3a26){_0x46f974=_0x46f974-0x0;var _0x33baa6=_0x89c8[_0x46f974];return _0x33baa6;};'use strict';var moment=require(_0x889c('0x0'));var Sequelize=require(_0x889c('0x1'));module[_0x889c('0x2')]={'phone':{'type':Sequelize['STRING'],'allowNull':![]},'ContactId':{'type':Sequelize[_0x889c('0x3')],'unique':_0x889c('0x4')},'ListId':{'type':Sequelize[_0x889c('0x3')],'unique':_0x889c('0x4')},'VoiceQueueId':{'type':Sequelize[_0x889c('0x3')],'unique':_0x889c('0x4')}};
\ No newline at end of file
+var _0xb695=['sequelize','STRING','INTEGER','contactListQueue','moment'];(function(_0x2c3a19,_0x28652a){var _0x35111a=function(_0x5227bb){while(--_0x5227bb){_0x2c3a19['push'](_0x2c3a19['shift']());}};_0x35111a(++_0x28652a);}(_0xb695,0x7c));var _0x5b69=function(_0x5b897e,_0x23a626){_0x5b897e=_0x5b897e-0x0;var _0x16aa7e=_0xb695[_0x5b897e];return _0x16aa7e;};'use strict';var moment=require(_0x5b69('0x0'));var Sequelize=require(_0x5b69('0x1'));module['exports']={'phone':{'type':Sequelize[_0x5b69('0x2')],'allowNull':![]},'ContactId':{'type':Sequelize[_0x5b69('0x3')],'unique':'contactListQueue'},'ListId':{'type':Sequelize[_0x5b69('0x3')],'unique':_0x5b69('0x4')},'VoiceQueueId':{'type':Sequelize[_0x5b69('0x3')],'unique':'contactListQueue'}};
\ No newline at end of file
index 92de33b..0d8afa8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7efe=['query','filters','model','attributes','fields','hasOwnProperty','nolimit','limit','sort','where','pick','filter','merge','key','field','options','CmHopperBlack','includeAll','include','findAll','then','catch','show','params','keys','intersection','length','find','body','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','ioredis','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply','save','update','destroy','error','name','send','index','rawAttributes'];(function(_0x1c1db5,_0x2ee9c8){var _0x41d4d6=function(_0x4c659a){while(--_0x4c659a){_0x1c1db5['push'](_0x1c1db5['shift']());}};_0x41d4d6(++_0x2ee9c8);}(_0x7efe,0xac));var _0xe7ef=function(_0x50d583,_0x53e478){_0x50d583=_0x50d583-0x0;var _0x531c1a=_0x7efe[_0x50d583];return _0x531c1a;};'use strict';var pdf=require(_0xe7ef('0x0'));var emlformat=require(_0xe7ef('0x1'));var rimraf=require(_0xe7ef('0x2'));var zipdir=require(_0xe7ef('0x3'));var jsonpatch=require(_0xe7ef('0x4'));var rp=require(_0xe7ef('0x5'));var moment=require(_0xe7ef('0x6'));var BPromise=require(_0xe7ef('0x7'));var Mustache=require('mustache');var util=require(_0xe7ef('0x8'));var path=require(_0xe7ef('0x9'));var sox=require(_0xe7ef('0xa'));var csv=require(_0xe7ef('0xb'));var ejs=require(_0xe7ef('0xc'));var fs=require('fs');var _=require(_0xe7ef('0xd'));var squel=require(_0xe7ef('0xe'));var crypto=require(_0xe7ef('0xf'));var jsforce=require(_0xe7ef('0x10'));var deskjs=require(_0xe7ef('0x11'));var toCsv=require('to-csv');var querystring=require(_0xe7ef('0x12'));var Papa=require('papaparse');var Redis=require(_0xe7ef('0x13'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xe7ef('0x14'))(_0xe7ef('0x15'));var utils=require(_0xe7ef('0x16'));var config=require('../../config/environment');var db=require(_0xe7ef('0x17'))['db'];function respondWithStatusCode(_0x337d83,_0x2bfe00){_0x2bfe00=_0x2bfe00||0xcc;return function(_0x499ce5){if(_0x499ce5){return _0x337d83[_0xe7ef('0x18')](_0x2bfe00);}return _0x337d83[_0xe7ef('0x19')](_0x2bfe00)[_0xe7ef('0x1a')]();};}function respondWithResult(_0x3b6896,_0xfd1bdc){_0xfd1bdc=_0xfd1bdc||0xc8;return function(_0x45f7eb){if(_0x45f7eb){return _0x3b6896[_0xe7ef('0x19')](_0xfd1bdc)[_0xe7ef('0x1b')](_0x45f7eb);}};}function respondWithFilteredResult(_0x4cf08b,_0x5bad0c){return function(_0x386b03){if(_0x386b03){var _0x5c0a48=_0x386b03[_0xe7ef('0x1c')],_0x401b85=_0x5bad0c[_0xe7ef('0x1d')],_0x82760f=_0x5bad0c['offset']+_0x5bad0c['limit'],_0x29a023;if(_0x82760f>=_0x5c0a48){_0x82760f=_0x5c0a48;_0x29a023=0xc8;}else{_0x29a023=0xce;}_0x4cf08b[_0xe7ef('0x19')](_0x29a023);return _0x4cf08b[_0xe7ef('0x1e')](_0xe7ef('0x1f'),_0x401b85+'-'+_0x82760f+'/'+_0x5c0a48)[_0xe7ef('0x1b')](_0x386b03);}return null;};}function patchUpdates(_0x6263d1){return function(_0x2d8c91){try{jsonpatch[_0xe7ef('0x20')](_0x2d8c91,_0x6263d1,!![]);}catch(_0x5d54eb){return BPromise['reject'](_0x5d54eb);}return _0x2d8c91[_0xe7ef('0x21')]();};}function saveUpdates(_0xffa238,_0x19c289){return function(_0x1d4b62){if(_0x1d4b62){return _0x1d4b62[_0xe7ef('0x22')](_0xffa238)['then'](function(_0x2cccfb){return _0x2cccfb;});}return null;};}function removeEntity(_0x2332e8,_0x365953){return function(_0x197fd6){if(_0x197fd6){return _0x197fd6[_0xe7ef('0x23')]()['then'](function(){_0x2332e8[_0xe7ef('0x19')](0xcc)[_0xe7ef('0x1a')]();});}};}function handleEntityNotFound(_0x3b8de1,_0x1e3cc3){return function(_0x406d4b){if(!_0x406d4b){_0x3b8de1[_0xe7ef('0x18')](0x194);}return _0x406d4b;};}function handleError(_0x20b0fa,_0x2a0c2a){_0x2a0c2a=_0x2a0c2a||0x1f4;return function(_0x13c14f){logger[_0xe7ef('0x24')](_0x13c14f['stack']);if(_0x13c14f[_0xe7ef('0x25')]){delete _0x13c14f[_0xe7ef('0x25')];}_0x20b0fa['status'](_0x2a0c2a)[_0xe7ef('0x26')](_0x13c14f);};}exports[_0xe7ef('0x27')]=function(_0x1ae629,_0x459f5a){var _0x51c54a={},_0x2b15ed={},_0x1033a2={'count':0x0,'rows':[]};var _0x13da97=db['CmHopperBlack'][_0xe7ef('0x28')];_0x2b15ed['model']=_['keys'](_0x13da97);_0x2b15ed[_0xe7ef('0x29')]=_['keys'](_0x1ae629[_0xe7ef('0x29')]);_0x2b15ed[_0xe7ef('0x2a')]=_['intersection'](_0x2b15ed[_0xe7ef('0x2b')],_0x2b15ed[_0xe7ef('0x29')]);_0x51c54a[_0xe7ef('0x2c')]=_['intersection'](_0x2b15ed[_0xe7ef('0x2b')],qs[_0xe7ef('0x2d')](_0x1ae629[_0xe7ef('0x29')][_0xe7ef('0x2d')]));_0x51c54a['attributes']=_0x51c54a[_0xe7ef('0x2c')]['length']?_0x51c54a[_0xe7ef('0x2c')]:_0x2b15ed[_0xe7ef('0x2b')];if(!_0x1ae629[_0xe7ef('0x29')][_0xe7ef('0x2e')](_0xe7ef('0x2f'))){_0x51c54a[_0xe7ef('0x30')]=qs[_0xe7ef('0x30')](_0x1ae629[_0xe7ef('0x29')]['limit']);_0x51c54a[_0xe7ef('0x1d')]=qs[_0xe7ef('0x1d')](_0x1ae629[_0xe7ef('0x29')][_0xe7ef('0x1d')]);}_0x51c54a['order']=qs[_0xe7ef('0x31')](_0x1ae629[_0xe7ef('0x29')][_0xe7ef('0x31')]);_0x51c54a[_0xe7ef('0x32')]=qs[_0xe7ef('0x2a')](_[_0xe7ef('0x33')](_0x1ae629[_0xe7ef('0x29')],_0x2b15ed[_0xe7ef('0x2a')]));if(_0x1ae629['query'][_0xe7ef('0x34')]){_0x51c54a[_0xe7ef('0x32')]=_[_0xe7ef('0x35')](_0x51c54a['where'],{'$or':_['map'](_0x13da97,function(_0x1fe59c){if(_0x1fe59c['type'][_0xe7ef('0x36')]!=='VIRTUAL'){var _0x3f9027={};_0x3f9027[_0x1fe59c[_0xe7ef('0x37')]]={'$like':'%'+_0x1ae629['query'][_0xe7ef('0x34')]+'%'};return _0x3f9027;}})});}_0x51c54a=_['merge']({},_0x51c54a,_0x1ae629[_0xe7ef('0x38')]);var _0x51674e={'where':_0x51c54a[_0xe7ef('0x32')]};return db[_0xe7ef('0x39')][_0xe7ef('0x1c')](_0x51674e)['then'](function(_0x5b202d){_0x1033a2[_0xe7ef('0x1c')]=_0x5b202d;if(_0x1ae629[_0xe7ef('0x29')][_0xe7ef('0x3a')]){_0x51c54a[_0xe7ef('0x3b')]=[{'all':!![]}];}return db['CmHopperBlack'][_0xe7ef('0x3c')](_0x51c54a);})[_0xe7ef('0x3d')](function(_0x2320e6){_0x1033a2['rows']=_0x2320e6;return _0x1033a2;})['then'](respondWithFilteredResult(_0x459f5a,_0x51c54a))[_0xe7ef('0x3e')](handleError(_0x459f5a,null));};exports[_0xe7ef('0x3f')]=function(_0x44c20f,_0x18ef3f){var _0x4fc286={'raw':!![],'where':{'id':_0x44c20f[_0xe7ef('0x40')]['id']}},_0xa0be74={};_0xa0be74[_0xe7ef('0x2b')]=_[_0xe7ef('0x41')](db['CmHopperBlack'][_0xe7ef('0x28')]);_0xa0be74[_0xe7ef('0x29')]=_[_0xe7ef('0x41')](_0x44c20f[_0xe7ef('0x29')]);_0xa0be74[_0xe7ef('0x2a')]=_[_0xe7ef('0x42')](_0xa0be74[_0xe7ef('0x2b')],_0xa0be74[_0xe7ef('0x29')]);_0x4fc286[_0xe7ef('0x2c')]=_[_0xe7ef('0x42')](_0xa0be74[_0xe7ef('0x2b')],qs[_0xe7ef('0x2d')](_0x44c20f[_0xe7ef('0x29')]['fields']));_0x4fc286['attributes']=_0x4fc286[_0xe7ef('0x2c')][_0xe7ef('0x43')]?_0x4fc286[_0xe7ef('0x2c')]:_0xa0be74[_0xe7ef('0x2b')];if(_0x44c20f[_0xe7ef('0x29')][_0xe7ef('0x3a')]){_0x4fc286[_0xe7ef('0x3b')]=[{'all':!![]}];}_0x4fc286=_[_0xe7ef('0x35')]({},_0x4fc286,_0x44c20f[_0xe7ef('0x38')]);return db[_0xe7ef('0x39')][_0xe7ef('0x44')](_0x4fc286)[_0xe7ef('0x3d')](handleEntityNotFound(_0x18ef3f,null))[_0xe7ef('0x3d')](respondWithResult(_0x18ef3f,null))['catch'](handleError(_0x18ef3f,null));};exports[_0xe7ef('0x22')]=function(_0x114c21,_0x311fb9){if(_0x114c21[_0xe7ef('0x45')]['id']){delete _0x114c21[_0xe7ef('0x45')]['id'];}return db[_0xe7ef('0x39')]['find']({'where':{'id':_0x114c21[_0xe7ef('0x40')]['id']}})[_0xe7ef('0x3d')](handleEntityNotFound(_0x311fb9,null))[_0xe7ef('0x3d')](saveUpdates(_0x114c21['body'],null))[_0xe7ef('0x3d')](respondWithResult(_0x311fb9,null))[_0xe7ef('0x3e')](handleError(_0x311fb9,null));};exports['destroy']=function(_0x527c11,_0x57607f){return db[_0xe7ef('0x39')][_0xe7ef('0x44')]({'where':{'id':_0x527c11[_0xe7ef('0x40')]['id']}})[_0xe7ef('0x3d')](handleEntityNotFound(_0x57607f,null))[_0xe7ef('0x3d')](removeEntity(_0x57607f,null))[_0xe7ef('0x3e')](handleError(_0x57607f,null));};exports[_0xe7ef('0x46')]=function(_0x562225,_0x58cc9f){return db[_0xe7ef('0x39')][_0xe7ef('0x46')]()['then'](respondWithResult(_0x58cc9f,null))[_0xe7ef('0x3e')](handleError(_0x58cc9f,null));};
\ No newline at end of file
+var _0x1bbe=['destroy','then','error','name','send','CmHopperBlack','rawAttributes','model','query','keys','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','pick','where','merge','map','key','VIRTUAL','field','filter','options','count','includeAll','include','findAll','rows','catch','show','params','length','find','body','describe','eml-format','rimraf','bluebird','mustache','util','path','to-csv','ejs','lodash','crypto','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','json','offset','limit','set','Content-Range','reject','save','update'];(function(_0x432fca,_0xb0b1b5){var _0x3adba4=function(_0x5e3ae4){while(--_0x5e3ae4){_0x432fca['push'](_0x432fca['shift']());}};_0x3adba4(++_0xb0b1b5);}(_0x1bbe,0x18a));var _0xe1bb=function(_0x10edeb,_0x1b93b8){_0x10edeb=_0x10edeb-0x0;var _0x1c5fea=_0x1bbe[_0x10edeb];return _0x1c5fea;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xe1bb('0x0'));var rimraf=require(_0xe1bb('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xe1bb('0x2'));var Mustache=require(_0xe1bb('0x3'));var util=require(_0xe1bb('0x4'));var path=require(_0xe1bb('0x5'));var sox=require('sox');var csv=require(_0xe1bb('0x6'));var ejs=require(_0xe1bb('0x7'));var fs=require('fs');var _=require(_0xe1bb('0x8'));var squel=require('squel');var crypto=require(_0xe1bb('0x9'));var jsforce=require(_0xe1bb('0xa'));var deskjs=require(_0xe1bb('0xb'));var toCsv=require(_0xe1bb('0x6'));var querystring=require('querystring');var Papa=require(_0xe1bb('0xc'));var Redis=require(_0xe1bb('0xd'));var authService=require(_0xe1bb('0xe'));var qs=require(_0xe1bb('0xf'));var hardwareService=require(_0xe1bb('0x10'));var logger=require(_0xe1bb('0x11'))(_0xe1bb('0x12'));var utils=require(_0xe1bb('0x13'));var config=require(_0xe1bb('0x14'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x29452f,_0x11c293){_0x11c293=_0x11c293||0xcc;return function(_0x42f43f){if(_0x42f43f){return _0x29452f[_0xe1bb('0x15')](_0x11c293);}return _0x29452f[_0xe1bb('0x16')](_0x11c293)[_0xe1bb('0x17')]();};}function respondWithResult(_0x2bdd47,_0x3a09c5){_0x3a09c5=_0x3a09c5||0xc8;return function(_0x304d91){if(_0x304d91){return _0x2bdd47[_0xe1bb('0x16')](_0x3a09c5)[_0xe1bb('0x18')](_0x304d91);}};}function respondWithFilteredResult(_0x49e3ec,_0x495906){return function(_0x40fd81){if(_0x40fd81){var _0x4a0ac2=_0x40fd81['count'],_0x52d56e=_0x495906[_0xe1bb('0x19')],_0xe78b56=_0x495906[_0xe1bb('0x19')]+_0x495906[_0xe1bb('0x1a')],_0x473a8d;if(_0xe78b56>=_0x4a0ac2){_0xe78b56=_0x4a0ac2;_0x473a8d=0xc8;}else{_0x473a8d=0xce;}_0x49e3ec[_0xe1bb('0x16')](_0x473a8d);return _0x49e3ec[_0xe1bb('0x1b')](_0xe1bb('0x1c'),_0x52d56e+'-'+_0xe78b56+'/'+_0x4a0ac2)[_0xe1bb('0x18')](_0x40fd81);}return null;};}function patchUpdates(_0x1e93f4){return function(_0x2250ad){try{jsonpatch['apply'](_0x2250ad,_0x1e93f4,!![]);}catch(_0x3f490b){return BPromise[_0xe1bb('0x1d')](_0x3f490b);}return _0x2250ad[_0xe1bb('0x1e')]();};}function saveUpdates(_0x5f4d1e,_0x4a73ef){return function(_0x206e18){if(_0x206e18){return _0x206e18[_0xe1bb('0x1f')](_0x5f4d1e)['then'](function(_0x24df78){return _0x24df78;});}return null;};}function removeEntity(_0x2668d2,_0x27467d){return function(_0x4df13c){if(_0x4df13c){return _0x4df13c[_0xe1bb('0x20')]()[_0xe1bb('0x21')](function(){_0x2668d2[_0xe1bb('0x16')](0xcc)[_0xe1bb('0x17')]();});}};}function handleEntityNotFound(_0x31addf,_0x3530e0){return function(_0xcd9eca){if(!_0xcd9eca){_0x31addf[_0xe1bb('0x15')](0x194);}return _0xcd9eca;};}function handleError(_0x33b506,_0x526e0c){_0x526e0c=_0x526e0c||0x1f4;return function(_0x22bef7){logger[_0xe1bb('0x22')](_0x22bef7['stack']);if(_0x22bef7[_0xe1bb('0x23')]){delete _0x22bef7['name'];}_0x33b506[_0xe1bb('0x16')](_0x526e0c)[_0xe1bb('0x24')](_0x22bef7);};}exports['index']=function(_0x4f13d6,_0x3b991d){var _0x173134={},_0x11fc25={},_0x722479={'count':0x0,'rows':[]};var _0x1612d4=db[_0xe1bb('0x25')][_0xe1bb('0x26')];_0x11fc25[_0xe1bb('0x27')]=_['keys'](_0x1612d4);_0x11fc25[_0xe1bb('0x28')]=_[_0xe1bb('0x29')](_0x4f13d6[_0xe1bb('0x28')]);_0x11fc25[_0xe1bb('0x2a')]=_[_0xe1bb('0x2b')](_0x11fc25[_0xe1bb('0x27')],_0x11fc25[_0xe1bb('0x28')]);_0x173134[_0xe1bb('0x2c')]=_[_0xe1bb('0x2b')](_0x11fc25[_0xe1bb('0x27')],qs[_0xe1bb('0x2d')](_0x4f13d6[_0xe1bb('0x28')][_0xe1bb('0x2d')]));_0x173134[_0xe1bb('0x2c')]=_0x173134[_0xe1bb('0x2c')]['length']?_0x173134[_0xe1bb('0x2c')]:_0x11fc25[_0xe1bb('0x27')];if(!_0x4f13d6['query'][_0xe1bb('0x2e')](_0xe1bb('0x2f'))){_0x173134[_0xe1bb('0x1a')]=qs['limit'](_0x4f13d6[_0xe1bb('0x28')][_0xe1bb('0x1a')]);_0x173134['offset']=qs[_0xe1bb('0x19')](_0x4f13d6[_0xe1bb('0x28')]['offset']);}_0x173134[_0xe1bb('0x30')]=qs['sort'](_0x4f13d6[_0xe1bb('0x28')][_0xe1bb('0x31')]);_0x173134['where']=qs[_0xe1bb('0x2a')](_[_0xe1bb('0x32')](_0x4f13d6[_0xe1bb('0x28')],_0x11fc25[_0xe1bb('0x2a')]));if(_0x4f13d6[_0xe1bb('0x28')]['filter']){_0x173134[_0xe1bb('0x33')]=_[_0xe1bb('0x34')](_0x173134['where'],{'$or':_[_0xe1bb('0x35')](_0x1612d4,function(_0x2c4fa6){if(_0x2c4fa6['type'][_0xe1bb('0x36')]!==_0xe1bb('0x37')){var _0x24a9e6={};_0x24a9e6[_0x2c4fa6[_0xe1bb('0x38')]]={'$like':'%'+_0x4f13d6['query'][_0xe1bb('0x39')]+'%'};return _0x24a9e6;}})});}_0x173134=_[_0xe1bb('0x34')]({},_0x173134,_0x4f13d6[_0xe1bb('0x3a')]);var _0x1a46d0={'where':_0x173134[_0xe1bb('0x33')]};return db[_0xe1bb('0x25')]['count'](_0x1a46d0)[_0xe1bb('0x21')](function(_0x3d54ce){_0x722479[_0xe1bb('0x3b')]=_0x3d54ce;if(_0x4f13d6['query'][_0xe1bb('0x3c')]){_0x173134[_0xe1bb('0x3d')]=[{'all':!![]}];}return db['CmHopperBlack'][_0xe1bb('0x3e')](_0x173134);})[_0xe1bb('0x21')](function(_0x581fdd){_0x722479[_0xe1bb('0x3f')]=_0x581fdd;return _0x722479;})[_0xe1bb('0x21')](respondWithFilteredResult(_0x3b991d,_0x173134))[_0xe1bb('0x40')](handleError(_0x3b991d,null));};exports[_0xe1bb('0x41')]=function(_0x291532,_0x54053c){var _0x150181={'raw':!![],'where':{'id':_0x291532[_0xe1bb('0x42')]['id']}},_0x2bd7e5={};_0x2bd7e5[_0xe1bb('0x27')]=_[_0xe1bb('0x29')](db[_0xe1bb('0x25')][_0xe1bb('0x26')]);_0x2bd7e5[_0xe1bb('0x28')]=_[_0xe1bb('0x29')](_0x291532[_0xe1bb('0x28')]);_0x2bd7e5[_0xe1bb('0x2a')]=_[_0xe1bb('0x2b')](_0x2bd7e5['model'],_0x2bd7e5[_0xe1bb('0x28')]);_0x150181['attributes']=_[_0xe1bb('0x2b')](_0x2bd7e5[_0xe1bb('0x27')],qs[_0xe1bb('0x2d')](_0x291532[_0xe1bb('0x28')][_0xe1bb('0x2d')]));_0x150181[_0xe1bb('0x2c')]=_0x150181[_0xe1bb('0x2c')][_0xe1bb('0x43')]?_0x150181[_0xe1bb('0x2c')]:_0x2bd7e5[_0xe1bb('0x27')];if(_0x291532[_0xe1bb('0x28')][_0xe1bb('0x3c')]){_0x150181[_0xe1bb('0x3d')]=[{'all':!![]}];}_0x150181=_['merge']({},_0x150181,_0x291532[_0xe1bb('0x3a')]);return db['CmHopperBlack'][_0xe1bb('0x44')](_0x150181)[_0xe1bb('0x21')](handleEntityNotFound(_0x54053c,null))['then'](respondWithResult(_0x54053c,null))[_0xe1bb('0x40')](handleError(_0x54053c,null));};exports[_0xe1bb('0x1f')]=function(_0x531ddb,_0x123694){if(_0x531ddb[_0xe1bb('0x45')]['id']){delete _0x531ddb[_0xe1bb('0x45')]['id'];}return db[_0xe1bb('0x25')]['find']({'where':{'id':_0x531ddb[_0xe1bb('0x42')]['id']}})[_0xe1bb('0x21')](handleEntityNotFound(_0x123694,null))[_0xe1bb('0x21')](saveUpdates(_0x531ddb[_0xe1bb('0x45')],null))[_0xe1bb('0x21')](respondWithResult(_0x123694,null))['catch'](handleError(_0x123694,null));};exports[_0xe1bb('0x20')]=function(_0x41ab48,_0x4370b1){return db['CmHopperBlack'][_0xe1bb('0x44')]({'where':{'id':_0x41ab48[_0xe1bb('0x42')]['id']}})[_0xe1bb('0x21')](handleEntityNotFound(_0x4370b1,null))[_0xe1bb('0x21')](removeEntity(_0x4370b1,null))[_0xe1bb('0x40')](handleError(_0x4370b1,null));};exports['describe']=function(_0x3a5dfa,_0x4b9041){return db[_0xe1bb('0x25')][_0xe1bb('0x46')]()[_0xe1bb('0x21')](respondWithResult(_0x4b9041,null))['catch'](handleError(_0x4b9041,null));};
\ No newline at end of file
index 67c8573..aab3304 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34e8=['cm_hopper_black','lodash','util','../../config/logger','api','bluebird','request-promise','path','rimraf','../../config/environment','./cmHopperBlack.attributes','exports','CmHopperBlack'];(function(_0x4ae0a0,_0x5b3f3b){var _0x392131=function(_0x5d9a84){while(--_0x5d9a84){_0x4ae0a0['push'](_0x4ae0a0['shift']());}};_0x392131(++_0x5b3f3b);}(_0x34e8,0x12c));var _0x834e=function(_0x1bc7b7,_0x1c4bd5){_0x1bc7b7=_0x1bc7b7-0x0;var _0x2e723f=_0x34e8[_0x1bc7b7];return _0x2e723f;};'use strict';var _=require(_0x834e('0x0'));var util=require(_0x834e('0x1'));var logger=require(_0x834e('0x2'))(_0x834e('0x3'));var moment=require('moment');var BPromise=require(_0x834e('0x4'));var rp=require(_0x834e('0x5'));var fs=require('fs');var path=require(_0x834e('0x6'));var rimraf=require(_0x834e('0x7'));var config=require(_0x834e('0x8'));var attributes=require(_0x834e('0x9'));module[_0x834e('0xa')]=function(_0x4a2018,_0x858aa1){return _0x4a2018['define'](_0x834e('0xb'),attributes,{'tableName':_0x834e('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x008c=['define','cm_hopper_black','lodash','util','../../config/logger','api','moment','request-promise','path','rimraf','../../config/environment','./cmHopperBlack.attributes','exports'];(function(_0x4ed520,_0x21be63){var _0x4415a6=function(_0x14b151){while(--_0x14b151){_0x4ed520['push'](_0x4ed520['shift']());}};_0x4415a6(++_0x21be63);}(_0x008c,0x188));var _0xc008=function(_0x15d9bc,_0x513b46){_0x15d9bc=_0x15d9bc-0x0;var _0x5868fe=_0x008c[_0x15d9bc];return _0x5868fe;};'use strict';var _=require(_0xc008('0x0'));var util=require(_0xc008('0x1'));var logger=require(_0xc008('0x2'))(_0xc008('0x3'));var moment=require(_0xc008('0x4'));var BPromise=require('bluebird');var rp=require(_0xc008('0x5'));var fs=require('fs');var path=require(_0xc008('0x6'));var rimraf=require(_0xc008('0x7'));var config=require(_0xc008('0x8'));var attributes=require(_0xc008('0x9'));module[_0xc008('0xa')]=function(_0x13aa7,_0x39bb5e){return _0x13aa7[_0xc008('0xb')]('CmHopperBlack',attributes,{'tableName':_0xc008('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 25bde70..ab6aad6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7bb1=['limit','include','model','map','UpdateCmHopperBlack','CmHopperBlack','raw','DestroyCmHopperBlack','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','CmHopperBlack,\x20%s,\x20%s','debug','stringify','error','code','message','request\x20sent','result','catch','GetCmHopperBlack','options','where','attributes'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x7bb1,0x130));var _0x17bb=function(_0x2f1762,_0xab43df){_0x2f1762=_0x2f1762-0x0;var _0x8ab21=_0x7bb1[_0x2f1762];return _0x8ab21;};'use strict';var _=require(_0x17bb('0x0'));var util=require('util');var moment=require(_0x17bb('0x1'));var BPromise=require(_0x17bb('0x2'));var rs=require(_0x17bb('0x3'));var fs=require('fs');var Redis=require(_0x17bb('0x4'));var db=require(_0x17bb('0x5'))['db'];var utils=require(_0x17bb('0x6'));var logger=require(_0x17bb('0x7'))(_0x17bb('0x8'));var config=require(_0x17bb('0x9'));var jayson=require(_0x17bb('0xa'));var client=jayson[_0x17bb('0xb')][_0x17bb('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x1e74ba,_0x27e6c,_0x2b7e3f){return new BPromise(function(_0x365181,_0x51d3b0){return client[_0x17bb('0xd')](_0x1e74ba,_0x2b7e3f)[_0x17bb('0xe')](function(_0x17bed0){logger[_0x17bb('0xf')](_0x17bb('0x10'),_0x27e6c,'request\x20sent');logger[_0x17bb('0x11')]('CmHopperBlack,\x20%s,\x20%s,\x20%s',_0x27e6c,'request\x20sent',JSON[_0x17bb('0x12')](_0x17bed0));if(_0x17bed0['error']){if(_0x17bed0[_0x17bb('0x13')][_0x17bb('0x14')]===0x1f4){logger['error'](_0x17bb('0x10'),_0x27e6c,_0x17bed0[_0x17bb('0x13')]['message']);return _0x51d3b0(_0x17bed0['error']['message']);}logger['error']('CmHopperBlack,\x20%s,\x20%s',_0x27e6c,_0x17bed0[_0x17bb('0x13')][_0x17bb('0x15')]);return _0x365181(_0x17bed0['error'][_0x17bb('0x15')]);}else{logger[_0x17bb('0xf')](_0x17bb('0x10'),_0x27e6c,_0x17bb('0x16'));_0x365181(_0x17bed0[_0x17bb('0x17')]['message']);}})[_0x17bb('0x18')](function(_0x543bd4){logger[_0x17bb('0x13')](_0x17bb('0x10'),_0x27e6c,_0x543bd4);_0x51d3b0(_0x543bd4);});});}exports[_0x17bb('0x19')]=function(_0x3a0d25){var _0x37ce51=this;return new Promise(function(_0x110665,_0x309a31){return db['CmHopperBlack']['findAll']({'raw':_0x3a0d25[_0x17bb('0x1a')]?_0x3a0d25[_0x17bb('0x1a')]['raw']===undefined?!![]:![]:!![],'where':_0x3a0d25[_0x17bb('0x1a')]?_0x3a0d25[_0x17bb('0x1a')][_0x17bb('0x1b')]||null:null,'attributes':_0x3a0d25[_0x17bb('0x1a')]?_0x3a0d25[_0x17bb('0x1a')][_0x17bb('0x1c')]||null:null,'limit':_0x3a0d25[_0x17bb('0x1a')]?_0x3a0d25[_0x17bb('0x1a')][_0x17bb('0x1d')]||null:null,'include':_0x3a0d25[_0x17bb('0x1a')]?_0x3a0d25['options'][_0x17bb('0x1e')]?_['map'](_0x3a0d25['options'][_0x17bb('0x1e')],function(_0x184b56){return{'model':db[_0x184b56[_0x17bb('0x1f')]],'as':_0x184b56['as'],'attributes':_0x184b56['attributes'],'include':_0x184b56[_0x17bb('0x1e')]?_[_0x17bb('0x20')](_0x184b56[_0x17bb('0x1e')],function(_0x1d9900){return{'model':db[_0x1d9900[_0x17bb('0x1f')]],'as':_0x1d9900['as'],'attributes':_0x1d9900[_0x17bb('0x1c')],'include':_0x1d9900[_0x17bb('0x1e')]?_[_0x17bb('0x20')](_0x1d9900['include'],function(_0x458d21){return{'model':db[_0x458d21[_0x17bb('0x1f')]],'as':_0x458d21['as'],'attributes':_0x458d21['attributes']};}):[]};}):[]};}):[]:[]})[_0x17bb('0xe')](function(_0x5624b7){logger[_0x17bb('0xf')](_0x17bb('0x19'),_0x3a0d25);logger['debug'](_0x17bb('0x19'),_0x3a0d25,JSON['stringify'](_0x5624b7));_0x110665(_0x5624b7);})[_0x17bb('0x18')](function(_0x36b0bf){logger[_0x17bb('0x13')]('GetCmHopperBlack',_0x36b0bf[_0x17bb('0x15')],_0x3a0d25);_0x309a31(_0x37ce51[_0x17bb('0x13')](0x1f4,_0x36b0bf[_0x17bb('0x15')]));});});};exports[_0x17bb('0x21')]=function(_0x1249cd){var _0x2adb67=this;return new Promise(function(_0x3b1049,_0x3d7118){return db[_0x17bb('0x22')]['update'](_0x1249cd['body'],{'raw':_0x1249cd['options']?_0x1249cd[_0x17bb('0x1a')][_0x17bb('0x23')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x1249cd[_0x17bb('0x1a')]?_0x1249cd['options']['where']||null:null,'attributes':_0x1249cd[_0x17bb('0x1a')]?_0x1249cd[_0x17bb('0x1a')][_0x17bb('0x1c')]||null:null,'limit':_0x1249cd[_0x17bb('0x1a')]?_0x1249cd[_0x17bb('0x1a')][_0x17bb('0x1d')]||null:null})[_0x17bb('0xe')](function(_0x3e814f){logger[_0x17bb('0xf')](_0x17bb('0x21'),_0x1249cd);logger['debug'](_0x17bb('0x21'),_0x1249cd,JSON[_0x17bb('0x12')](_0x3e814f));_0x3b1049(_0x3e814f);})[_0x17bb('0x18')](function(_0x343b87){logger[_0x17bb('0x13')](_0x17bb('0x21'),_0x343b87[_0x17bb('0x15')],_0x1249cd);_0x3d7118(_0x2adb67['error'](0x1f4,_0x343b87['message']));});});};exports[_0x17bb('0x24')]=function(_0x153f29){var _0x223d36=this;return new Promise(function(_0x2e315e,_0x3925c9){return db[_0x17bb('0x22')]['destroy']({'where':_0x153f29[_0x17bb('0x1a')]?_0x153f29[_0x17bb('0x1a')][_0x17bb('0x1b')]||null:null})[_0x17bb('0xe')](function(_0x5564d7){logger[_0x17bb('0xf')](_0x17bb('0x24'),_0x153f29);logger[_0x17bb('0x11')](_0x17bb('0x24'),_0x153f29,JSON[_0x17bb('0x12')](_0x5564d7));_0x2e315e(_0x5564d7);})[_0x17bb('0x18')](function(_0x7702d1){logger['error'](_0x17bb('0x24'),_0x7702d1['message'],_0x153f29);_0x3925c9(_0x223d36[_0x17bb('0x13')](0x1f4,_0x7702d1[_0x17bb('0x15')]));});});};
\ No newline at end of file
+var _0xd2a4=['bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','http','request','then','CmHopperBlack,\x20%s,\x20%s','request\x20sent','debug','CmHopperBlack,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','GetCmHopperBlack','CmHopperBlack','findAll','options','raw','where','attributes','include','map','model','update','limit','UpdateCmHopperBlack','catch','destroy','DestroyCmHopperBlack','lodash'];(function(_0x315759,_0x34b3c2){var _0x9a8fa7=function(_0x2a2d85){while(--_0x2a2d85){_0x315759['push'](_0x315759['shift']());}};_0x9a8fa7(++_0x34b3c2);}(_0xd2a4,0x1bb));var _0x4d2a=function(_0x5a7574,_0x1f9463){_0x5a7574=_0x5a7574-0x0;var _0x4301b1=_0xd2a4[_0x5a7574];return _0x4301b1;};'use strict';var _=require(_0x4d2a('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x4d2a('0x1'));var rs=require(_0x4d2a('0x2'));var fs=require('fs');var Redis=require(_0x4d2a('0x3'));var db=require(_0x4d2a('0x4'))['db'];var utils=require(_0x4d2a('0x5'));var logger=require('../../config/logger')('rpc');var config=require(_0x4d2a('0x6'));var jayson=require(_0x4d2a('0x7'));var client=jayson['client'][_0x4d2a('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x356053,_0x383a3b,_0x2884ba){return new BPromise(function(_0x49729a,_0x37e6bc){return client[_0x4d2a('0x9')](_0x356053,_0x2884ba)[_0x4d2a('0xa')](function(_0x3ef779){logger['info'](_0x4d2a('0xb'),_0x383a3b,_0x4d2a('0xc'));logger[_0x4d2a('0xd')](_0x4d2a('0xe'),_0x383a3b,_0x4d2a('0xc'),JSON[_0x4d2a('0xf')](_0x3ef779));if(_0x3ef779[_0x4d2a('0x10')]){if(_0x3ef779[_0x4d2a('0x10')][_0x4d2a('0x11')]===0x1f4){logger[_0x4d2a('0x10')](_0x4d2a('0xb'),_0x383a3b,_0x3ef779[_0x4d2a('0x10')]['message']);return _0x37e6bc(_0x3ef779[_0x4d2a('0x10')][_0x4d2a('0x12')]);}logger[_0x4d2a('0x10')](_0x4d2a('0xb'),_0x383a3b,_0x3ef779[_0x4d2a('0x10')][_0x4d2a('0x12')]);return _0x49729a(_0x3ef779[_0x4d2a('0x10')]['message']);}else{logger[_0x4d2a('0x13')](_0x4d2a('0xb'),_0x383a3b,_0x4d2a('0xc'));_0x49729a(_0x3ef779[_0x4d2a('0x14')]['message']);}})['catch'](function(_0x487d0d){logger[_0x4d2a('0x10')](_0x4d2a('0xb'),_0x383a3b,_0x487d0d);_0x37e6bc(_0x487d0d);});});}exports[_0x4d2a('0x15')]=function(_0x6ca594){var _0xff7fe5=this;return new Promise(function(_0x2474a5,_0x29ed3f){return db[_0x4d2a('0x16')][_0x4d2a('0x17')]({'raw':_0x6ca594[_0x4d2a('0x18')]?_0x6ca594[_0x4d2a('0x18')][_0x4d2a('0x19')]===undefined?!![]:![]:!![],'where':_0x6ca594[_0x4d2a('0x18')]?_0x6ca594[_0x4d2a('0x18')][_0x4d2a('0x1a')]||null:null,'attributes':_0x6ca594[_0x4d2a('0x18')]?_0x6ca594[_0x4d2a('0x18')][_0x4d2a('0x1b')]||null:null,'limit':_0x6ca594[_0x4d2a('0x18')]?_0x6ca594[_0x4d2a('0x18')]['limit']||null:null,'include':_0x6ca594[_0x4d2a('0x18')]?_0x6ca594[_0x4d2a('0x18')][_0x4d2a('0x1c')]?_[_0x4d2a('0x1d')](_0x6ca594[_0x4d2a('0x18')]['include'],function(_0x197278){return{'model':db[_0x197278[_0x4d2a('0x1e')]],'as':_0x197278['as'],'attributes':_0x197278[_0x4d2a('0x1b')],'include':_0x197278[_0x4d2a('0x1c')]?_[_0x4d2a('0x1d')](_0x197278['include'],function(_0x34cb78){return{'model':db[_0x34cb78['model']],'as':_0x34cb78['as'],'attributes':_0x34cb78[_0x4d2a('0x1b')],'include':_0x34cb78['include']?_['map'](_0x34cb78[_0x4d2a('0x1c')],function(_0x1dfdb1){return{'model':db[_0x1dfdb1[_0x4d2a('0x1e')]],'as':_0x1dfdb1['as'],'attributes':_0x1dfdb1[_0x4d2a('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x4d2a('0xa')](function(_0x18c1b0){logger[_0x4d2a('0x13')](_0x4d2a('0x15'),_0x6ca594);logger['debug'](_0x4d2a('0x15'),_0x6ca594,JSON[_0x4d2a('0xf')](_0x18c1b0));_0x2474a5(_0x18c1b0);})['catch'](function(_0x6ff35d){logger[_0x4d2a('0x10')](_0x4d2a('0x15'),_0x6ff35d[_0x4d2a('0x12')],_0x6ca594);_0x29ed3f(_0xff7fe5[_0x4d2a('0x10')](0x1f4,_0x6ff35d[_0x4d2a('0x12')]));});});};exports['UpdateCmHopperBlack']=function(_0x160c9e){var _0x5f16fe=this;return new Promise(function(_0x422e30,_0x32e368){return db['CmHopperBlack'][_0x4d2a('0x1f')](_0x160c9e['body'],{'raw':_0x160c9e['options']?_0x160c9e['options'][_0x4d2a('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x160c9e[_0x4d2a('0x18')]?_0x160c9e[_0x4d2a('0x18')][_0x4d2a('0x1a')]||null:null,'attributes':_0x160c9e[_0x4d2a('0x18')]?_0x160c9e[_0x4d2a('0x18')]['attributes']||null:null,'limit':_0x160c9e[_0x4d2a('0x18')]?_0x160c9e['options'][_0x4d2a('0x20')]||null:null})[_0x4d2a('0xa')](function(_0x51ff27){logger['info']('UpdateCmHopperBlack',_0x160c9e);logger[_0x4d2a('0xd')](_0x4d2a('0x21'),_0x160c9e,JSON[_0x4d2a('0xf')](_0x51ff27));_0x422e30(_0x51ff27);})[_0x4d2a('0x22')](function(_0x48577){logger['error'](_0x4d2a('0x21'),_0x48577[_0x4d2a('0x12')],_0x160c9e);_0x32e368(_0x5f16fe[_0x4d2a('0x10')](0x1f4,_0x48577[_0x4d2a('0x12')]));});});};exports['DestroyCmHopperBlack']=function(_0x2269b9){var _0x24f171=this;return new Promise(function(_0xeb8fc8,_0x448c4f){return db[_0x4d2a('0x16')][_0x4d2a('0x23')]({'where':_0x2269b9['options']?_0x2269b9[_0x4d2a('0x18')][_0x4d2a('0x1a')]||null:null})[_0x4d2a('0xa')](function(_0x1e9620){logger[_0x4d2a('0x13')](_0x4d2a('0x24'),_0x2269b9);logger[_0x4d2a('0xd')](_0x4d2a('0x24'),_0x2269b9,JSON[_0x4d2a('0xf')](_0x1e9620));_0xeb8fc8(_0x1e9620);})[_0x4d2a('0x22')](function(_0x197bf3){logger['error']('DestroyCmHopperBlack',_0x197bf3[_0x4d2a('0x12')],_0x2269b9);_0x448c4f(_0x24f171[_0x4d2a('0x10')](0x1f4,_0x197bf3[_0x4d2a('0x12')]));});});};
\ No newline at end of file
index 280a313..3a37849 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ddd=['update','delete','destroy','multer','../../components/interaction/service','../../config/environment','./cmHopperBlack.controller','isAuthenticated','index','get','/describe','describe','show','/:id'];(function(_0x4709c0,_0x3396c7){var _0x13348b=function(_0x426235){while(--_0x426235){_0x4709c0['push'](_0x4709c0['shift']());}};_0x13348b(++_0x3396c7);}(_0x4ddd,0x18b));var _0xd4dd=function(_0x4bfac3,_0x58324d){_0x4bfac3=_0x4bfac3-0x0;var _0x15f0f2=_0x4ddd[_0x4bfac3];return _0x15f0f2;};'use strict';var multer=require(_0xd4dd('0x0'));var util=require('util');var path=require('path');var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xd4dd('0x1'));var config=require(_0xd4dd('0x2'));var controller=require(_0xd4dd('0x3'));router['get']('/',auth[_0xd4dd('0x4')](),controller[_0xd4dd('0x5')]);router[_0xd4dd('0x6')](_0xd4dd('0x7'),auth[_0xd4dd('0x4')](),controller[_0xd4dd('0x8')]);router[_0xd4dd('0x6')]('/:id',auth[_0xd4dd('0x4')](),controller[_0xd4dd('0x9')]);router['put'](_0xd4dd('0xa'),auth[_0xd4dd('0x4')](),controller[_0xd4dd('0xb')]);router[_0xd4dd('0xc')]('/:id',auth['isAuthenticated'](),controller[_0xd4dd('0xd')]);module['exports']=router;
\ No newline at end of file
+var _0x5697=['delete','destroy','exports','multer','path','connect-timeout','express','get','/describe','isAuthenticated','describe','/:id','put','update'];(function(_0x153079,_0x360c32){var _0x53f0f8=function(_0x42fa09){while(--_0x42fa09){_0x153079['push'](_0x153079['shift']());}};_0x53f0f8(++_0x360c32);}(_0x5697,0x1b5));var _0x7569=function(_0x53199f,_0x1dac3a){_0x53199f=_0x53199f-0x0;var _0x1f9609=_0x5697[_0x53199f];return _0x1f9609;};'use strict';var multer=require(_0x7569('0x0'));var util=require('util');var path=require(_0x7569('0x1'));var timeout=require(_0x7569('0x2'));var express=require(_0x7569('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./cmHopperBlack.controller');router[_0x7569('0x4')]('/',auth['isAuthenticated'](),controller['index']);router['get'](_0x7569('0x5'),auth[_0x7569('0x6')](),controller[_0x7569('0x7')]);router[_0x7569('0x4')](_0x7569('0x8'),auth[_0x7569('0x6')](),controller['show']);router[_0x7569('0x9')]('/:id',auth[_0x7569('0x6')](),controller[_0x7569('0xa')]);router[_0x7569('0xb')](_0x7569('0x8'),auth[_0x7569('0x6')](),controller[_0x7569('0xc')]);module[_0x7569('0xd')]=router;
\ No newline at end of file
index d6b9001..857ce5d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbd4c=['BOOLEAN','sequelize','moment','exports','INTEGER','STRING','DATE','getDataValue','diff','setDataValue','dispositionat'];(function(_0x2c3c3d,_0x3a25d2){var _0x341677=function(_0x1aeda9){while(--_0x1aeda9){_0x2c3c3d['push'](_0x2c3c3d['shift']());}};_0x341677(++_0x3a25d2);}(_0xbd4c,0x1cf));var _0xcbd4=function(_0x3405b6,_0x244ef7){_0x3405b6=_0x3405b6-0x0;var _0x2748d6=_0xbd4c[_0x3405b6];return _0x2748d6;};'use strict';var Sequelize=require(_0xcbd4('0x0'));var moment=require(_0xcbd4('0x1'));module[_0xcbd4('0x2')]={'state':{'type':Sequelize[_0xcbd4('0x3')](0x2)},'statedesc':{'type':Sequelize[_0xcbd4('0x4')]},'scheduledat':{'type':Sequelize[_0xcbd4('0x5')]},'countbusyretry':{'type':Sequelize[_0xcbd4('0x3')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0xcbd4('0x3')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0xcbd4('0x3')],'defaultValue':0x0},'countglobal':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0xcbd4('0x4')]},'originatecalleridnum':{'type':Sequelize[_0xcbd4('0x4')]},'originatecalleridname':{'type':Sequelize[_0xcbd4('0x4')]},'calleridnum':{'type':Sequelize[_0xcbd4('0x4')]},'calleridname':{'type':Sequelize[_0xcbd4('0x4')]},'starttime':{'type':Sequelize[_0xcbd4('0x5')]},'responsetime':{'type':Sequelize[_0xcbd4('0x5')]},'answertime':{'type':Sequelize[_0xcbd4('0x5')]},'droptime':{'type':Sequelize[_0xcbd4('0x5')]},'endtime':{'type':Sequelize['DATE']},'ringtime':{'type':Sequelize[_0xcbd4('0x3')],'defaultValue':0x0},'holdtime':{'type':Sequelize[_0xcbd4('0x3')],'defaultValue':0x0},'talktime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'followuptime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'dropreason':{'type':Sequelize['STRING']},'campaign':{'type':Sequelize['STRING']},'campaigntype':{'type':Sequelize[_0xcbd4('0x4')]},'membername':{'type':Sequelize['STRING']},'reason':{'type':Sequelize[_0xcbd4('0x4')]},'disposition':{'type':Sequelize[_0xcbd4('0x4')]},'dispositionat':{'type':Sequelize[_0xcbd4('0x5')],'set':function(_0x3039a6){var _0x58dc97=this[_0xcbd4('0x6')]('endtime');if(_0x58dc97&&_0x3039a6){this['setDataValue']('followuptime',moment(_0x3039a6)[_0xcbd4('0x7')](moment(_0x58dc97),'seconds'));}return this[_0xcbd4('0x8')](_0xcbd4('0x9'),_0x3039a6);}},'amd':{'type':Sequelize[_0xcbd4('0xa')],'defaultValue':![]},'fax':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'blacklist':{'type':Sequelize[_0xcbd4('0xa')],'defaultValue':![]},'rescheduled':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'rescheduledat':{'type':Sequelize['DATE']},'callback':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize['STRING'],'defaultValue':null},'callbackat':{'type':Sequelize[_0xcbd4('0x5')]},'deleted':{'type':Sequelize['STRING'],'defaultValue':null},'deletedat':{'type':Sequelize[_0xcbd4('0x5')]},'recallme':{'type':Sequelize[_0xcbd4('0xa')],'defaultValue':![]},'agiafterat':{'type':Sequelize[_0xcbd4('0x5')]}};
\ No newline at end of file
+var _0x1ee0=['diff','seconds','dispositionat','BOOLEAN','exports','STRING','DATE','INTEGER','getDataValue','endtime','setDataValue','followuptime'];(function(_0x1670aa,_0x498c32){var _0x52d286=function(_0x218aae){while(--_0x218aae){_0x1670aa['push'](_0x1670aa['shift']());}};_0x52d286(++_0x498c32);}(_0x1ee0,0x19c));var _0x01ee=function(_0x58e577,_0x4d1eb1){_0x58e577=_0x58e577-0x0;var _0x132131=_0x1ee0[_0x58e577];return _0x132131;};'use strict';var Sequelize=require('sequelize');var moment=require('moment');module[_0x01ee('0x0')]={'state':{'type':Sequelize['INTEGER'](0x2)},'statedesc':{'type':Sequelize[_0x01ee('0x1')]},'scheduledat':{'type':Sequelize[_0x01ee('0x2')]},'countbusyretry':{'type':Sequelize[_0x01ee('0x3')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0x01ee('0x3')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countglobal':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0x01ee('0x1')]},'originatecalleridnum':{'type':Sequelize[_0x01ee('0x1')]},'originatecalleridname':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0x01ee('0x1')]},'calleridname':{'type':Sequelize[_0x01ee('0x1')]},'starttime':{'type':Sequelize['DATE']},'responsetime':{'type':Sequelize['DATE']},'answertime':{'type':Sequelize['DATE']},'droptime':{'type':Sequelize[_0x01ee('0x2')]},'endtime':{'type':Sequelize[_0x01ee('0x2')]},'ringtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'holdtime':{'type':Sequelize[_0x01ee('0x3')],'defaultValue':0x0},'talktime':{'type':Sequelize[_0x01ee('0x3')],'defaultValue':0x0},'followuptime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'dropreason':{'type':Sequelize[_0x01ee('0x1')]},'campaign':{'type':Sequelize[_0x01ee('0x1')]},'campaigntype':{'type':Sequelize[_0x01ee('0x1')]},'membername':{'type':Sequelize[_0x01ee('0x1')]},'reason':{'type':Sequelize[_0x01ee('0x1')]},'disposition':{'type':Sequelize[_0x01ee('0x1')]},'dispositionat':{'type':Sequelize[_0x01ee('0x2')],'set':function(_0x1fc5b9){var _0xbdd0e5=this[_0x01ee('0x4')](_0x01ee('0x5'));if(_0xbdd0e5&&_0x1fc5b9){this[_0x01ee('0x6')](_0x01ee('0x7'),moment(_0x1fc5b9)[_0x01ee('0x8')](moment(_0xbdd0e5),_0x01ee('0x9')));}return this[_0x01ee('0x6')](_0x01ee('0xa'),_0x1fc5b9);}},'amd':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'fax':{'type':Sequelize[_0x01ee('0xb')],'defaultValue':![]},'blacklist':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'rescheduled':{'type':Sequelize[_0x01ee('0xb')],'defaultValue':![]},'rescheduledat':{'type':Sequelize[_0x01ee('0x2')]},'callback':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize['STRING'],'defaultValue':null},'callbackat':{'type':Sequelize[_0x01ee('0x2')]},'deleted':{'type':Sequelize['STRING'],'defaultValue':null},'deletedat':{'type':Sequelize['DATE']},'recallme':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agiafterat':{'type':Sequelize['DATE']}};
\ No newline at end of file
index c37f15d..acf055b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2056=['../../mysqldb','sendStatus','status','end','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','error','stack','name','send','index','rawAttributes','keys','query','filters','attributes','intersection','model','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','VIRTUAL','field','options','CmHopperFinal','include','rows','catch','show','params','includeAll','describe','uniqueid','body','countContactsQueueCampaignHopperFinal','findAll','sequelize','COUNT','literal','`state`\x20=\x200,\x201,\x20null','noSuchContacts','noAnswerContacts','`state`\x20=\x205,\x201,\x20null','`state`\x20=\x208,\x201,\x20null','congestionContacts','`state`\x20=\x2010\x20,\x201,\x20null','dropContacts','`state`\x20=\x2011\x20,\x201,\x20null','abandonedContacts','`state`\x20=\x2022,\x201,\x20null','reCallContacts','`state`\x20=\x2019,\x201,\x20null','answeringMachine','countContactsIvrCampaignHopperFinal','moveContactsQueueCampaignHopperFinal','find','insert','cm_hopper','fromQuery','scheduledAt','ContactId','ListId','VoiceQueueId','select','ANY_VALUE(calleridnum)','phone','NOW()','ANY_VALUE(ListId)','createdAt','from','cm_hopper_final','VoiceQueueId\x20=\x20?','toString','state\x20=\x20?','state','calleridnum\x20IS\x20NOT\x20NULL','calleridnum\x20NOT\x20IN\x20(?)','calleridnum','state\x20=\x204','group','moveContactsIvrCampaignHopperFinal','Campaign','CampaignId','updatedAt','ANY_VALUE(CampaignId)','CampaignId\x20=\x20?','checkContactHopper','CmHopper','html-pdf','eml-format','rimraf','zip-dir','moment','bluebird','mustache','util','path','sox','to-csv','lodash','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment'];(function(_0x34ac75,_0x75b3a2){var _0x389365=function(_0x4a47dc){while(--_0x4a47dc){_0x34ac75['push'](_0x34ac75['shift']());}};_0x389365(++_0x75b3a2);}(_0x2056,0x1ec));var _0x6205=function(_0x1b852e,_0x185f0d){_0x1b852e=_0x1b852e-0x0;var _0x2fd5cf=_0x2056[_0x1b852e];return _0x2fd5cf;};'use strict';var pdf=require(_0x6205('0x0'));var emlformat=require(_0x6205('0x1'));var rimraf=require(_0x6205('0x2'));var zipdir=require(_0x6205('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x6205('0x4'));var BPromise=require(_0x6205('0x5'));var Mustache=require(_0x6205('0x6'));var util=require(_0x6205('0x7'));var path=require(_0x6205('0x8'));var sox=require(_0x6205('0x9'));var csv=require(_0x6205('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x6205('0xb'));var squel=require('squel');var crypto=require(_0x6205('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x6205('0xd'));var toCsv=require(_0x6205('0xa'));var querystring=require(_0x6205('0xe'));var Papa=require(_0x6205('0xf'));var Redis=require(_0x6205('0x10'));var authService=require(_0x6205('0x11'));var qs=require(_0x6205('0x12'));var hardwareService=require(_0x6205('0x13'));var logger=require(_0x6205('0x14'))(_0x6205('0x15'));var utils=require(_0x6205('0x16'));var config=require(_0x6205('0x17'));var db=require(_0x6205('0x18'))['db'];function respondWithStatusCode(_0x1ba075,_0x921716){_0x921716=_0x921716||0xcc;return function(_0x2d804b){if(_0x2d804b){return _0x1ba075[_0x6205('0x19')](_0x921716);}return _0x1ba075[_0x6205('0x1a')](_0x921716)[_0x6205('0x1b')]();};}function respondWithResult(_0x24485c,_0x2c1801){_0x2c1801=_0x2c1801||0xc8;return function(_0x2d075f){if(_0x2d075f){return _0x24485c[_0x6205('0x1a')](_0x2c1801)['json'](_0x2d075f);}};}function respondWithFilteredResult(_0x5abfbc,_0xc842a0){return function(_0xf30a7a){if(_0xf30a7a){var _0x4381e0=_0xf30a7a[_0x6205('0x1c')],_0x540f14=_0xc842a0[_0x6205('0x1d')],_0x92ef3c=_0xc842a0['offset']+_0xc842a0[_0x6205('0x1e')],_0x3f0f02;if(_0x92ef3c>=_0x4381e0){_0x92ef3c=_0x4381e0;_0x3f0f02=0xc8;}else{_0x3f0f02=0xce;}_0x5abfbc[_0x6205('0x1a')](_0x3f0f02);return _0x5abfbc[_0x6205('0x1f')](_0x6205('0x20'),_0x540f14+'-'+_0x92ef3c+'/'+_0x4381e0)['json'](_0xf30a7a);}return null;};}function patchUpdates(_0x4c89ea){return function(_0x121d5e){try{jsonpatch[_0x6205('0x21')](_0x121d5e,_0x4c89ea,!![]);}catch(_0x399917){return BPromise[_0x6205('0x22')](_0x399917);}return _0x121d5e['save']();};}function saveUpdates(_0x1a9574,_0x2127d2){return function(_0x185380){if(_0x185380){return _0x185380[_0x6205('0x23')](_0x1a9574)[_0x6205('0x24')](function(_0x542bf9){return _0x542bf9;});}return null;};}function removeEntity(_0x34f534,_0x166e79){return function(_0x539538){if(_0x539538){return _0x539538[_0x6205('0x25')]()[_0x6205('0x24')](function(){_0x34f534[_0x6205('0x1a')](0xcc)[_0x6205('0x1b')]();});}};}function handleEntityNotFound(_0x3719c5,_0x5c9b92){return function(_0x29c9e6){if(!_0x29c9e6){_0x3719c5[_0x6205('0x19')](0x194);}return _0x29c9e6;};}function handleError(_0x1b9e29,_0x40d081){_0x40d081=_0x40d081||0x1f4;return function(_0x3089e7){logger[_0x6205('0x26')](_0x3089e7[_0x6205('0x27')]);if(_0x3089e7['name']){delete _0x3089e7[_0x6205('0x28')];}_0x1b9e29[_0x6205('0x1a')](_0x40d081)[_0x6205('0x29')](_0x3089e7);};}exports[_0x6205('0x2a')]=function(_0x170a62,_0x5997ac){var _0x1d3b07={},_0x1b8b0b={},_0x45d533={'count':0x0,'rows':[]};var _0x2eb2fc=db['CmHopperFinal'][_0x6205('0x2b')];_0x1b8b0b['model']=_[_0x6205('0x2c')](_0x2eb2fc);_0x1b8b0b[_0x6205('0x2d')]=_['keys'](_0x170a62['query']);_0x1b8b0b[_0x6205('0x2e')]=_['intersection'](_0x1b8b0b['model'],_0x1b8b0b[_0x6205('0x2d')]);_0x1d3b07[_0x6205('0x2f')]=_[_0x6205('0x30')](_0x1b8b0b[_0x6205('0x31')],qs[_0x6205('0x32')](_0x170a62[_0x6205('0x2d')][_0x6205('0x32')]));_0x1d3b07[_0x6205('0x2f')]=_0x1d3b07[_0x6205('0x2f')][_0x6205('0x33')]?_0x1d3b07[_0x6205('0x2f')]:_0x1b8b0b[_0x6205('0x31')];if(!_0x170a62['query'][_0x6205('0x34')](_0x6205('0x35'))){_0x1d3b07[_0x6205('0x1e')]=qs['limit'](_0x170a62[_0x6205('0x2d')][_0x6205('0x1e')]);_0x1d3b07['offset']=qs[_0x6205('0x1d')](_0x170a62[_0x6205('0x2d')]['offset']);}_0x1d3b07[_0x6205('0x36')]=qs[_0x6205('0x37')](_0x170a62[_0x6205('0x2d')][_0x6205('0x37')]);_0x1d3b07[_0x6205('0x38')]=qs[_0x6205('0x2e')](_[_0x6205('0x39')](_0x170a62[_0x6205('0x2d')],_0x1b8b0b[_0x6205('0x2e')]));if(_0x170a62[_0x6205('0x2d')][_0x6205('0x3a')]){_0x1d3b07[_0x6205('0x38')]=_[_0x6205('0x3b')](_0x1d3b07[_0x6205('0x38')],{'$or':_[_0x6205('0x3c')](_0x2eb2fc,function(_0x4ed38d){if(_0x4ed38d[_0x6205('0x3d')]['key']!==_0x6205('0x3e')){var _0x32c424={};_0x32c424[_0x4ed38d[_0x6205('0x3f')]]={'$like':'%'+_0x170a62[_0x6205('0x2d')]['filter']+'%'};return _0x32c424;}})});}_0x1d3b07=_[_0x6205('0x3b')]({},_0x1d3b07,_0x170a62[_0x6205('0x40')]);var _0x5959e3={'where':_0x1d3b07['where']};return db[_0x6205('0x41')][_0x6205('0x1c')](_0x5959e3)[_0x6205('0x24')](function(_0x557960){_0x45d533[_0x6205('0x1c')]=_0x557960;if(_0x170a62[_0x6205('0x2d')]['includeAll']){_0x1d3b07[_0x6205('0x42')]=[{'all':!![]}];}return db['CmHopperFinal']['findAll'](_0x1d3b07);})['then'](function(_0x83a2f7){_0x45d533[_0x6205('0x43')]=_0x83a2f7;return _0x45d533;})[_0x6205('0x24')](respondWithFilteredResult(_0x5997ac,_0x1d3b07))[_0x6205('0x44')](handleError(_0x5997ac,null));};exports[_0x6205('0x45')]=function(_0x2b73c6,_0x463d2d){var _0x435258={'raw':!![],'where':{'id':_0x2b73c6[_0x6205('0x46')]['id']}},_0x24ec45={};_0x24ec45[_0x6205('0x31')]=_[_0x6205('0x2c')](db[_0x6205('0x41')][_0x6205('0x2b')]);_0x24ec45[_0x6205('0x2d')]=_[_0x6205('0x2c')](_0x2b73c6[_0x6205('0x2d')]);_0x24ec45[_0x6205('0x2e')]=_[_0x6205('0x30')](_0x24ec45['model'],_0x24ec45[_0x6205('0x2d')]);_0x435258[_0x6205('0x2f')]=_['intersection'](_0x24ec45[_0x6205('0x31')],qs['fields'](_0x2b73c6[_0x6205('0x2d')][_0x6205('0x32')]));_0x435258['attributes']=_0x435258[_0x6205('0x2f')][_0x6205('0x33')]?_0x435258[_0x6205('0x2f')]:_0x24ec45[_0x6205('0x31')];if(_0x2b73c6[_0x6205('0x2d')][_0x6205('0x47')]){_0x435258[_0x6205('0x42')]=[{'all':!![]}];}_0x435258=_['merge']({},_0x435258,_0x2b73c6[_0x6205('0x40')]);return db[_0x6205('0x41')]['find'](_0x435258)[_0x6205('0x24')](handleEntityNotFound(_0x463d2d,null))[_0x6205('0x24')](respondWithResult(_0x463d2d,null))[_0x6205('0x44')](handleError(_0x463d2d,null));};exports[_0x6205('0x48')]=function(_0x318ca2,_0x5c222c){return db[_0x6205('0x41')][_0x6205('0x48')]()['then'](respondWithResult(_0x5c222c,null))[_0x6205('0x44')](handleError(_0x5c222c,null));};exports[_0x6205('0x23')]=function(_0x45b3d1,_0x1d811c){if(_0x45b3d1['body'][_0x6205('0x49')]){delete _0x45b3d1[_0x6205('0x4a')]['uniqueid'];}return db['CmHopperFinal']['find']({'where':{'uniqueid':_0x45b3d1['params']['id']}})[_0x6205('0x24')](handleEntityNotFound(_0x1d811c,null))[_0x6205('0x24')](saveUpdates(_0x45b3d1[_0x6205('0x4a')],null))[_0x6205('0x24')](respondWithResult(_0x1d811c,null))[_0x6205('0x44')](handleError(_0x1d811c,null));};exports[_0x6205('0x4b')]=function(_0x5a2357,_0x2d18f1,_0x4262a9){return db[_0x6205('0x41')][_0x6205('0x4c')]({'raw':![],'where':{'VoiceQueueId':_0x5a2357[_0x6205('0x46')]['id']},'attributes':[[db[_0x6205('0x4d')]['fn'](_0x6205('0x4e'),db[_0x6205('0x4d')]['fn']('IF',db['sequelize'][_0x6205('0x4f')](_0x6205('0x50')))),_0x6205('0x51')],[db[_0x6205('0x4d')]['fn']('COUNT',db[_0x6205('0x4d')]['fn']('IF',db[_0x6205('0x4d')][_0x6205('0x4f')]('`state`\x20=\x203,\x201,\x20null'))),_0x6205('0x52')],[db[_0x6205('0x4d')]['fn']('COUNT',db[_0x6205('0x4d')]['fn']('IF',db['sequelize'][_0x6205('0x4f')](_0x6205('0x53')))),'busyContacts'],[db[_0x6205('0x4d')]['fn']('COUNT',db['sequelize']['fn']('IF',db[_0x6205('0x4d')][_0x6205('0x4f')](_0x6205('0x54')))),_0x6205('0x55')],[db[_0x6205('0x4d')]['fn']('COUNT',db[_0x6205('0x4d')]['fn']('IF',db[_0x6205('0x4d')]['literal'](_0x6205('0x56')))),_0x6205('0x57')],[db[_0x6205('0x4d')]['fn'](_0x6205('0x4e'),db[_0x6205('0x4d')]['fn']('IF',db[_0x6205('0x4d')][_0x6205('0x4f')](_0x6205('0x58')))),_0x6205('0x59')],[db[_0x6205('0x4d')]['fn'](_0x6205('0x4e'),db[_0x6205('0x4d')]['fn']('IF',db[_0x6205('0x4d')][_0x6205('0x4f')](_0x6205('0x5a')))),_0x6205('0x5b')],[db[_0x6205('0x4d')]['fn'](_0x6205('0x4e'),db[_0x6205('0x4d')]['fn']('IF',db[_0x6205('0x4d')][_0x6205('0x4f')](_0x6205('0x5c')))),_0x6205('0x5d')]]})[_0x6205('0x24')](handleEntityNotFound(_0x2d18f1,null))[_0x6205('0x24')](respondWithResult(_0x2d18f1,null))[_0x6205('0x44')](handleError(_0x2d18f1,null));};exports[_0x6205('0x5e')]=function(_0x571047,_0x13a352,_0x242a63){return db[_0x6205('0x41')][_0x6205('0x4c')]({'raw':![],'where':{'CampaignId':_0x571047[_0x6205('0x46')]['id']},'attributes':[[db[_0x6205('0x4d')]['fn'](_0x6205('0x4e'),db['sequelize']['fn']('IF',db[_0x6205('0x4d')][_0x6205('0x4f')](_0x6205('0x50')))),_0x6205('0x51')],[db[_0x6205('0x4d')]['fn'](_0x6205('0x4e'),db[_0x6205('0x4d')]['fn']('IF',db[_0x6205('0x4d')]['literal']('`state`\x20=\x203,\x201,\x20null'))),'noAnswerContacts'],[db['sequelize']['fn'](_0x6205('0x4e'),db[_0x6205('0x4d')]['fn']('IF',db[_0x6205('0x4d')]['literal'](_0x6205('0x53')))),'busyContacts'],[db[_0x6205('0x4d')]['fn']('COUNT',db['sequelize']['fn']('IF',db[_0x6205('0x4d')]['literal'](_0x6205('0x54')))),_0x6205('0x55')],[db[_0x6205('0x4d')]['fn'](_0x6205('0x4e'),db[_0x6205('0x4d')]['fn']('IF',db['sequelize'][_0x6205('0x4f')](_0x6205('0x56')))),_0x6205('0x57')],[db[_0x6205('0x4d')]['fn'](_0x6205('0x4e'),db[_0x6205('0x4d')]['fn']('IF',db[_0x6205('0x4d')][_0x6205('0x4f')]('`state`\x20=\x2011\x20,\x201,\x20null'))),_0x6205('0x59')],[db['sequelize']['fn'](_0x6205('0x4e'),db['sequelize']['fn']('IF',db['sequelize'][_0x6205('0x4f')](_0x6205('0x5a')))),_0x6205('0x5b')],[db[_0x6205('0x4d')]['fn']('COUNT',db['sequelize']['fn']('IF',db[_0x6205('0x4d')][_0x6205('0x4f')](_0x6205('0x5c')))),_0x6205('0x5d')]]})[_0x6205('0x24')](handleEntityNotFound(_0x13a352,null))[_0x6205('0x24')](respondWithResult(_0x13a352,null))['catch'](handleError(_0x13a352,null));};exports[_0x6205('0x5f')]=function(_0x76f0a8,_0x35296a,_0x2d04b4){return db['VoiceQueue'][_0x6205('0x60')]({'where':{'id':_0x76f0a8[_0x6205('0x46')]['id']}})[_0x6205('0x24')](handleEntityNotFound(_0x35296a,null))[_0x6205('0x24')](function(_0x4cb1c7){var _0x1b6953;if(_0x4cb1c7){_0x1b6953=squel[_0x6205('0x61')]()['into'](_0x6205('0x62'))[_0x6205('0x63')](['phone',_0x6205('0x64'),_0x6205('0x65'),_0x6205('0x66'),_0x6205('0x67'),'createdAt','updatedAt'],squel[_0x6205('0x68')]()['field'](_0x6205('0x69'),_0x6205('0x6a'))[_0x6205('0x3f')](_0x6205('0x6b'),_0x6205('0x64'))['field']('ANY_VALUE(ContactId)',_0x6205('0x65'))[_0x6205('0x3f')](_0x6205('0x6c'),'ListId')[_0x6205('0x3f')]('ANY_VALUE(VoiceQueueId)','VoiceQueueId')[_0x6205('0x3f')](_0x6205('0x6b'),_0x6205('0x6d'))['field'](_0x6205('0x6b'),'updatedAt')[_0x6205('0x6e')](_0x6205('0x6f'))['where'](_0x6205('0x70'),_0x76f0a8[_0x6205('0x46')]['id'][_0x6205('0x71')]())['where'](_0x6205('0x72'),_0x76f0a8[_0x6205('0x4a')][_0x6205('0x73')][_0x6205('0x71')]())[_0x6205('0x38')](_0x6205('0x74'))[_0x6205('0x38')](_0x6205('0x75'),squel[_0x6205('0x68')]()[_0x6205('0x3f')](_0x6205('0x6a'))[_0x6205('0x6e')](_0x6205('0x62'))[_0x6205('0x38')](_0x6205('0x70'),_0x76f0a8[_0x6205('0x46')]['id'][_0x6205('0x71')]()))[_0x6205('0x38')]('calleridnum\x20NOT\x20IN\x20(?)',squel['select']()[_0x6205('0x3f')](_0x6205('0x76'))[_0x6205('0x6e')](_0x6205('0x6f'))[_0x6205('0x38')]('VoiceQueueId\x20=\x20?',_0x76f0a8[_0x6205('0x46')]['id']['toString']())['where'](_0x6205('0x77')))[_0x6205('0x78')](_0x6205('0x65')))[_0x6205('0x71')]();return db[_0x6205('0x4d')][_0x6205('0x2d')](_0x1b6953);}return[];})[_0x6205('0x24')](respondWithResult(_0x35296a,null))[_0x6205('0x44')](handleError(_0x35296a,null));};exports[_0x6205('0x79')]=function(_0x1e4233,_0x2eba7c,_0x5929f8){return db[_0x6205('0x7a')]['find']({'where':{'id':_0x1e4233[_0x6205('0x46')]['id']}})['then'](handleEntityNotFound(_0x2eba7c,null))[_0x6205('0x24')](function(_0x4e1688){var _0x2f9ac2;if(_0x4e1688){_0x2f9ac2=squel['insert']()['into'](_0x6205('0x62'))['fromQuery']([_0x6205('0x6a'),_0x6205('0x64'),_0x6205('0x65'),_0x6205('0x66'),_0x6205('0x7b'),_0x6205('0x6d'),_0x6205('0x7c')],squel[_0x6205('0x68')]()[_0x6205('0x3f')](_0x6205('0x69'),'phone')['field'](_0x6205('0x6b'),'scheduledAt')[_0x6205('0x3f')]('ANY_VALUE(ContactId)',_0x6205('0x65'))[_0x6205('0x3f')]('ANY_VALUE(ListId)',_0x6205('0x66'))[_0x6205('0x3f')](_0x6205('0x7d'),_0x6205('0x7b'))[_0x6205('0x3f')](_0x6205('0x6b'),'createdAt')['field'](_0x6205('0x6b'),_0x6205('0x7c'))[_0x6205('0x6e')](_0x6205('0x6f'))[_0x6205('0x38')](_0x6205('0x7e'),_0x1e4233[_0x6205('0x46')]['id'][_0x6205('0x71')]())[_0x6205('0x38')](_0x6205('0x72'),_0x1e4233[_0x6205('0x4a')][_0x6205('0x73')][_0x6205('0x71')]())[_0x6205('0x38')](_0x6205('0x74'))[_0x6205('0x38')](_0x6205('0x75'),squel[_0x6205('0x68')]()['field'](_0x6205('0x6a'))['from'](_0x6205('0x62'))[_0x6205('0x38')]('CampaignId\x20=\x20?',_0x1e4233[_0x6205('0x46')]['id'][_0x6205('0x71')]()))[_0x6205('0x38')](_0x6205('0x75'),squel[_0x6205('0x68')]()['field']('calleridnum')['from']('cm_hopper_final')[_0x6205('0x38')](_0x6205('0x7e'),_0x1e4233['params']['id'][_0x6205('0x71')]())[_0x6205('0x38')](_0x6205('0x77')))[_0x6205('0x78')]('ContactId'))[_0x6205('0x71')]();return db['sequelize'][_0x6205('0x2d')](_0x2f9ac2);}return[];})[_0x6205('0x24')](respondWithResult(_0x2eba7c,null))[_0x6205('0x44')](handleError(_0x2eba7c,null));};exports[_0x6205('0x7f')]=function(_0x2ae883,_0x3ee53e,_0x24e537){return db[_0x6205('0x80')]['findOne']({'where':{'VoiceQueueId':_0x2ae883[_0x6205('0x4a')][_0x6205('0x67')],'CampaignId':_0x2ae883[_0x6205('0x4a')]['CampaignId'],'ContactId':_0x2ae883[_0x6205('0x4a')][_0x6205('0x65')]}})[_0x6205('0x24')](handleEntityNotFound(_0x3ee53e,null))[_0x6205('0x24')](function(_0x59826c){if(_0x59826c){return _0x59826c;}return null;})[_0x6205('0x24')](respondWithResult(_0x3ee53e,null))[_0x6205('0x44')](handleError(_0x3ee53e,null));};
\ No newline at end of file
+var _0x0856=['fromQuery','phone','scheduledAt','ContactId','ListId','VoiceQueueId','createdAt','select','NOW()','ANY_VALUE(ContactId)','ANY_VALUE(VoiceQueueId)','updatedAt','from','cm_hopper_final','toString','state\x20=\x20?','state','cm_hopper','VoiceQueueId\x20=\x20?','calleridnum\x20NOT\x20IN\x20(?)','calleridnum','state\x20=\x204','group','moveContactsIvrCampaignHopperFinal','ANY_VALUE(calleridnum)','ANY_VALUE(ListId)','ANY_VALUE(CampaignId)','CampaignId','CampaignId\x20=\x20?','calleridnum\x20IS\x20NOT\x20NULL','checkContactHopper','CmHopper','findOne','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','path','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','limit','set','Content-Range','reject','update','then','error','stack','name','send','index','CmHopperFinal','keys','query','filters','model','intersection','fields','attributes','length','nolimit','order','pick','filter','where','merge','type','key','VIRTUAL','field','options','count','includeAll','include','rows','catch','show','params','rawAttributes','describe','body','uniqueid','find','countContactsQueueCampaignHopperFinal','findAll','sequelize','literal','`state`\x20=\x200,\x201,\x20null','noSuchContacts','COUNT','noAnswerContacts','`state`\x20=\x205,\x201,\x20null','busyContacts','`state`\x20=\x208,\x201,\x20null','`state`\x20=\x2010\x20,\x201,\x20null','dropContacts','abandonedContacts','`state`\x20=\x2022,\x201,\x20null','reCallContacts','`state`\x20=\x2019,\x201,\x20null','answeringMachine','countContactsIvrCampaignHopperFinal','`state`\x20=\x203,\x201,\x20null','congestionContacts','VoiceQueue','into'];(function(_0x516e0c,_0x497880){var _0x3a1ae8=function(_0x5694b1){while(--_0x5694b1){_0x516e0c['push'](_0x516e0c['shift']());}};_0x3a1ae8(++_0x497880);}(_0x0856,0xa2));var _0x6085=function(_0x4c343e,_0x85642){_0x4c343e=_0x4c343e-0x0;var _0x32eef2=_0x0856[_0x4c343e];return _0x32eef2;};'use strict';var pdf=require(_0x6085('0x0'));var emlformat=require(_0x6085('0x1'));var rimraf=require(_0x6085('0x2'));var zipdir=require(_0x6085('0x3'));var jsonpatch=require(_0x6085('0x4'));var rp=require(_0x6085('0x5'));var moment=require(_0x6085('0x6'));var BPromise=require(_0x6085('0x7'));var Mustache=require('mustache');var util=require('util');var path=require(_0x6085('0x8'));var sox=require('sox');var csv=require(_0x6085('0x9'));var ejs=require(_0x6085('0xa'));var fs=require('fs');var _=require(_0x6085('0xb'));var squel=require(_0x6085('0xc'));var crypto=require(_0x6085('0xd'));var jsforce=require(_0x6085('0xe'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x6085('0xf'));var Papa=require(_0x6085('0x10'));var Redis=require(_0x6085('0x11'));var authService=require(_0x6085('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x6085('0x13'));var logger=require(_0x6085('0x14'))(_0x6085('0x15'));var utils=require(_0x6085('0x16'));var config=require(_0x6085('0x17'));var db=require(_0x6085('0x18'))['db'];function respondWithStatusCode(_0xbe2eba,_0x46db11){_0x46db11=_0x46db11||0xcc;return function(_0x39e8fb){if(_0x39e8fb){return _0xbe2eba[_0x6085('0x19')](_0x46db11);}return _0xbe2eba[_0x6085('0x1a')](_0x46db11)[_0x6085('0x1b')]();};}function respondWithResult(_0x561142,_0x454b53){_0x454b53=_0x454b53||0xc8;return function(_0x590fd4){if(_0x590fd4){return _0x561142[_0x6085('0x1a')](_0x454b53)[_0x6085('0x1c')](_0x590fd4);}};}function respondWithFilteredResult(_0x537022,_0x2f8dd0){return function(_0x23e9f1){if(_0x23e9f1){var _0x307425=_0x23e9f1['count'],_0x26b879=_0x2f8dd0[_0x6085('0x1d')],_0x187cab=_0x2f8dd0[_0x6085('0x1d')]+_0x2f8dd0[_0x6085('0x1e')],_0x2b47cf;if(_0x187cab>=_0x307425){_0x187cab=_0x307425;_0x2b47cf=0xc8;}else{_0x2b47cf=0xce;}_0x537022[_0x6085('0x1a')](_0x2b47cf);return _0x537022[_0x6085('0x1f')](_0x6085('0x20'),_0x26b879+'-'+_0x187cab+'/'+_0x307425)[_0x6085('0x1c')](_0x23e9f1);}return null;};}function patchUpdates(_0x5166d4){return function(_0x52586e){try{jsonpatch['apply'](_0x52586e,_0x5166d4,!![]);}catch(_0x2b47f4){return BPromise[_0x6085('0x21')](_0x2b47f4);}return _0x52586e['save']();};}function saveUpdates(_0x13b237,_0x2f0db9){return function(_0xbaf26c){if(_0xbaf26c){return _0xbaf26c[_0x6085('0x22')](_0x13b237)['then'](function(_0x22ea36){return _0x22ea36;});}return null;};}function removeEntity(_0x49b9d7,_0x337cde){return function(_0x49e139){if(_0x49e139){return _0x49e139['destroy']()[_0x6085('0x23')](function(){_0x49b9d7[_0x6085('0x1a')](0xcc)[_0x6085('0x1b')]();});}};}function handleEntityNotFound(_0x50c407,_0x54f85d){return function(_0x3397fc){if(!_0x3397fc){_0x50c407[_0x6085('0x19')](0x194);}return _0x3397fc;};}function handleError(_0x455ba4,_0x3da5b4){_0x3da5b4=_0x3da5b4||0x1f4;return function(_0x140e4d){logger[_0x6085('0x24')](_0x140e4d[_0x6085('0x25')]);if(_0x140e4d[_0x6085('0x26')]){delete _0x140e4d[_0x6085('0x26')];}_0x455ba4[_0x6085('0x1a')](_0x3da5b4)[_0x6085('0x27')](_0x140e4d);};}exports[_0x6085('0x28')]=function(_0x3d29ed,_0x355f8e){var _0x51aae3={},_0x1a8fa0={},_0x22131c={'count':0x0,'rows':[]};var _0x35bf9f=db[_0x6085('0x29')]['rawAttributes'];_0x1a8fa0['model']=_[_0x6085('0x2a')](_0x35bf9f);_0x1a8fa0['query']=_[_0x6085('0x2a')](_0x3d29ed[_0x6085('0x2b')]);_0x1a8fa0[_0x6085('0x2c')]=_['intersection'](_0x1a8fa0[_0x6085('0x2d')],_0x1a8fa0['query']);_0x51aae3['attributes']=_[_0x6085('0x2e')](_0x1a8fa0[_0x6085('0x2d')],qs['fields'](_0x3d29ed[_0x6085('0x2b')][_0x6085('0x2f')]));_0x51aae3[_0x6085('0x30')]=_0x51aae3['attributes'][_0x6085('0x31')]?_0x51aae3[_0x6085('0x30')]:_0x1a8fa0['model'];if(!_0x3d29ed[_0x6085('0x2b')]['hasOwnProperty'](_0x6085('0x32'))){_0x51aae3[_0x6085('0x1e')]=qs[_0x6085('0x1e')](_0x3d29ed[_0x6085('0x2b')][_0x6085('0x1e')]);_0x51aae3[_0x6085('0x1d')]=qs[_0x6085('0x1d')](_0x3d29ed[_0x6085('0x2b')]['offset']);}_0x51aae3[_0x6085('0x33')]=qs['sort'](_0x3d29ed[_0x6085('0x2b')]['sort']);_0x51aae3['where']=qs[_0x6085('0x2c')](_[_0x6085('0x34')](_0x3d29ed['query'],_0x1a8fa0[_0x6085('0x2c')]));if(_0x3d29ed[_0x6085('0x2b')][_0x6085('0x35')]){_0x51aae3[_0x6085('0x36')]=_[_0x6085('0x37')](_0x51aae3[_0x6085('0x36')],{'$or':_['map'](_0x35bf9f,function(_0x5123cb){if(_0x5123cb[_0x6085('0x38')][_0x6085('0x39')]!==_0x6085('0x3a')){var _0x4fd470={};_0x4fd470[_0x5123cb[_0x6085('0x3b')]]={'$like':'%'+_0x3d29ed[_0x6085('0x2b')][_0x6085('0x35')]+'%'};return _0x4fd470;}})});}_0x51aae3=_[_0x6085('0x37')]({},_0x51aae3,_0x3d29ed[_0x6085('0x3c')]);var _0x4889a9={'where':_0x51aae3[_0x6085('0x36')]};return db[_0x6085('0x29')]['count'](_0x4889a9)[_0x6085('0x23')](function(_0x1b8c06){_0x22131c[_0x6085('0x3d')]=_0x1b8c06;if(_0x3d29ed[_0x6085('0x2b')][_0x6085('0x3e')]){_0x51aae3[_0x6085('0x3f')]=[{'all':!![]}];}return db[_0x6085('0x29')]['findAll'](_0x51aae3);})[_0x6085('0x23')](function(_0x4c6c98){_0x22131c[_0x6085('0x40')]=_0x4c6c98;return _0x22131c;})[_0x6085('0x23')](respondWithFilteredResult(_0x355f8e,_0x51aae3))[_0x6085('0x41')](handleError(_0x355f8e,null));};exports[_0x6085('0x42')]=function(_0x592502,_0x17f2c7){var _0x52feae={'raw':!![],'where':{'id':_0x592502[_0x6085('0x43')]['id']}},_0x59d4dd={};_0x59d4dd[_0x6085('0x2d')]=_[_0x6085('0x2a')](db[_0x6085('0x29')][_0x6085('0x44')]);_0x59d4dd['query']=_[_0x6085('0x2a')](_0x592502[_0x6085('0x2b')]);_0x59d4dd[_0x6085('0x2c')]=_[_0x6085('0x2e')](_0x59d4dd['model'],_0x59d4dd[_0x6085('0x2b')]);_0x52feae[_0x6085('0x30')]=_['intersection'](_0x59d4dd['model'],qs[_0x6085('0x2f')](_0x592502[_0x6085('0x2b')][_0x6085('0x2f')]));_0x52feae[_0x6085('0x30')]=_0x52feae['attributes'][_0x6085('0x31')]?_0x52feae[_0x6085('0x30')]:_0x59d4dd[_0x6085('0x2d')];if(_0x592502['query'][_0x6085('0x3e')]){_0x52feae[_0x6085('0x3f')]=[{'all':!![]}];}_0x52feae=_[_0x6085('0x37')]({},_0x52feae,_0x592502[_0x6085('0x3c')]);return db['CmHopperFinal']['find'](_0x52feae)[_0x6085('0x23')](handleEntityNotFound(_0x17f2c7,null))['then'](respondWithResult(_0x17f2c7,null))['catch'](handleError(_0x17f2c7,null));};exports['describe']=function(_0x2d4d17,_0x4e2021){return db['CmHopperFinal'][_0x6085('0x45')]()[_0x6085('0x23')](respondWithResult(_0x4e2021,null))[_0x6085('0x41')](handleError(_0x4e2021,null));};exports[_0x6085('0x22')]=function(_0xf1e03a,_0x4bde17){if(_0xf1e03a[_0x6085('0x46')][_0x6085('0x47')]){delete _0xf1e03a['body']['uniqueid'];}return db[_0x6085('0x29')][_0x6085('0x48')]({'where':{'uniqueid':_0xf1e03a[_0x6085('0x43')]['id']}})[_0x6085('0x23')](handleEntityNotFound(_0x4bde17,null))[_0x6085('0x23')](saveUpdates(_0xf1e03a[_0x6085('0x46')],null))[_0x6085('0x23')](respondWithResult(_0x4bde17,null))[_0x6085('0x41')](handleError(_0x4bde17,null));};exports[_0x6085('0x49')]=function(_0x1ef68a,_0x17f9bd,_0x50f345){return db[_0x6085('0x29')][_0x6085('0x4a')]({'raw':![],'where':{'VoiceQueueId':_0x1ef68a[_0x6085('0x43')]['id']},'attributes':[[db[_0x6085('0x4b')]['fn']('COUNT',db[_0x6085('0x4b')]['fn']('IF',db[_0x6085('0x4b')][_0x6085('0x4c')](_0x6085('0x4d')))),_0x6085('0x4e')],[db[_0x6085('0x4b')]['fn'](_0x6085('0x4f'),db[_0x6085('0x4b')]['fn']('IF',db[_0x6085('0x4b')][_0x6085('0x4c')]('`state`\x20=\x203,\x201,\x20null'))),_0x6085('0x50')],[db[_0x6085('0x4b')]['fn'](_0x6085('0x4f'),db[_0x6085('0x4b')]['fn']('IF',db[_0x6085('0x4b')]['literal'](_0x6085('0x51')))),_0x6085('0x52')],[db['sequelize']['fn'](_0x6085('0x4f'),db[_0x6085('0x4b')]['fn']('IF',db[_0x6085('0x4b')][_0x6085('0x4c')](_0x6085('0x53')))),'congestionContacts'],[db[_0x6085('0x4b')]['fn']('COUNT',db[_0x6085('0x4b')]['fn']('IF',db[_0x6085('0x4b')][_0x6085('0x4c')](_0x6085('0x54')))),_0x6085('0x55')],[db[_0x6085('0x4b')]['fn'](_0x6085('0x4f'),db[_0x6085('0x4b')]['fn']('IF',db['sequelize'][_0x6085('0x4c')]('`state`\x20=\x2011\x20,\x201,\x20null'))),_0x6085('0x56')],[db[_0x6085('0x4b')]['fn']('COUNT',db[_0x6085('0x4b')]['fn']('IF',db[_0x6085('0x4b')][_0x6085('0x4c')](_0x6085('0x57')))),_0x6085('0x58')],[db['sequelize']['fn'](_0x6085('0x4f'),db[_0x6085('0x4b')]['fn']('IF',db['sequelize'][_0x6085('0x4c')](_0x6085('0x59')))),_0x6085('0x5a')]]})[_0x6085('0x23')](handleEntityNotFound(_0x17f9bd,null))['then'](respondWithResult(_0x17f9bd,null))['catch'](handleError(_0x17f9bd,null));};exports[_0x6085('0x5b')]=function(_0xea8652,_0x9c17ab,_0x200b99){return db['CmHopperFinal']['findAll']({'raw':![],'where':{'CampaignId':_0xea8652['params']['id']},'attributes':[[db['sequelize']['fn'](_0x6085('0x4f'),db[_0x6085('0x4b')]['fn']('IF',db['sequelize'][_0x6085('0x4c')](_0x6085('0x4d')))),_0x6085('0x4e')],[db[_0x6085('0x4b')]['fn'](_0x6085('0x4f'),db[_0x6085('0x4b')]['fn']('IF',db['sequelize'][_0x6085('0x4c')](_0x6085('0x5c')))),'noAnswerContacts'],[db[_0x6085('0x4b')]['fn'](_0x6085('0x4f'),db[_0x6085('0x4b')]['fn']('IF',db[_0x6085('0x4b')][_0x6085('0x4c')]('`state`\x20=\x205,\x201,\x20null'))),_0x6085('0x52')],[db[_0x6085('0x4b')]['fn']('COUNT',db[_0x6085('0x4b')]['fn']('IF',db['sequelize'][_0x6085('0x4c')](_0x6085('0x53')))),_0x6085('0x5d')],[db[_0x6085('0x4b')]['fn'](_0x6085('0x4f'),db['sequelize']['fn']('IF',db['sequelize']['literal'](_0x6085('0x54')))),_0x6085('0x55')],[db[_0x6085('0x4b')]['fn'](_0x6085('0x4f'),db[_0x6085('0x4b')]['fn']('IF',db[_0x6085('0x4b')][_0x6085('0x4c')]('`state`\x20=\x2011\x20,\x201,\x20null'))),_0x6085('0x56')],[db[_0x6085('0x4b')]['fn'](_0x6085('0x4f'),db[_0x6085('0x4b')]['fn']('IF',db[_0x6085('0x4b')][_0x6085('0x4c')](_0x6085('0x57')))),'reCallContacts'],[db[_0x6085('0x4b')]['fn'](_0x6085('0x4f'),db[_0x6085('0x4b')]['fn']('IF',db[_0x6085('0x4b')][_0x6085('0x4c')](_0x6085('0x59')))),_0x6085('0x5a')]]})[_0x6085('0x23')](handleEntityNotFound(_0x9c17ab,null))[_0x6085('0x23')](respondWithResult(_0x9c17ab,null))['catch'](handleError(_0x9c17ab,null));};exports['moveContactsQueueCampaignHopperFinal']=function(_0x2ef851,_0xf634e2,_0x445bdb){return db[_0x6085('0x5e')][_0x6085('0x48')]({'where':{'id':_0x2ef851['params']['id']}})[_0x6085('0x23')](handleEntityNotFound(_0xf634e2,null))[_0x6085('0x23')](function(_0x402316){var _0x4a6fc4;if(_0x402316){_0x4a6fc4=squel['insert']()[_0x6085('0x5f')]('cm_hopper')[_0x6085('0x60')]([_0x6085('0x61'),_0x6085('0x62'),_0x6085('0x63'),_0x6085('0x64'),_0x6085('0x65'),_0x6085('0x66'),'updatedAt'],squel[_0x6085('0x67')]()[_0x6085('0x3b')]('ANY_VALUE(calleridnum)','phone')[_0x6085('0x3b')](_0x6085('0x68'),_0x6085('0x62'))[_0x6085('0x3b')](_0x6085('0x69'),_0x6085('0x63'))['field']('ANY_VALUE(ListId)',_0x6085('0x64'))['field'](_0x6085('0x6a'),_0x6085('0x65'))[_0x6085('0x3b')](_0x6085('0x68'),_0x6085('0x66'))['field'](_0x6085('0x68'),_0x6085('0x6b'))[_0x6085('0x6c')](_0x6085('0x6d'))[_0x6085('0x36')]('VoiceQueueId\x20=\x20?',_0x2ef851[_0x6085('0x43')]['id'][_0x6085('0x6e')]())['where'](_0x6085('0x6f'),_0x2ef851[_0x6085('0x46')][_0x6085('0x70')][_0x6085('0x6e')]())[_0x6085('0x36')]('calleridnum\x20IS\x20NOT\x20NULL')['where']('calleridnum\x20NOT\x20IN\x20(?)',squel[_0x6085('0x67')]()[_0x6085('0x3b')](_0x6085('0x61'))[_0x6085('0x6c')](_0x6085('0x71'))[_0x6085('0x36')](_0x6085('0x72'),_0x2ef851[_0x6085('0x43')]['id'][_0x6085('0x6e')]()))[_0x6085('0x36')](_0x6085('0x73'),squel[_0x6085('0x67')]()[_0x6085('0x3b')](_0x6085('0x74'))['from'](_0x6085('0x6d'))['where']('VoiceQueueId\x20=\x20?',_0x2ef851[_0x6085('0x43')]['id'][_0x6085('0x6e')]())[_0x6085('0x36')](_0x6085('0x75')))[_0x6085('0x76')](_0x6085('0x63')))['toString']();return db['sequelize'][_0x6085('0x2b')](_0x4a6fc4);}return[];})['then'](respondWithResult(_0xf634e2,null))[_0x6085('0x41')](handleError(_0xf634e2,null));};exports[_0x6085('0x77')]=function(_0x25442e,_0x2dfd87,_0x3e6fd5){return db['Campaign']['find']({'where':{'id':_0x25442e['params']['id']}})['then'](handleEntityNotFound(_0x2dfd87,null))[_0x6085('0x23')](function(_0x19b84c){var _0x5c253b;if(_0x19b84c){_0x5c253b=squel['insert']()[_0x6085('0x5f')](_0x6085('0x71'))['fromQuery']([_0x6085('0x61'),_0x6085('0x62'),_0x6085('0x63'),'ListId','CampaignId',_0x6085('0x66'),'updatedAt'],squel[_0x6085('0x67')]()[_0x6085('0x3b')](_0x6085('0x78'),_0x6085('0x61'))[_0x6085('0x3b')](_0x6085('0x68'),_0x6085('0x62'))['field'](_0x6085('0x69'),_0x6085('0x63'))[_0x6085('0x3b')](_0x6085('0x79'),_0x6085('0x64'))['field'](_0x6085('0x7a'),_0x6085('0x7b'))[_0x6085('0x3b')](_0x6085('0x68'),'createdAt')[_0x6085('0x3b')]('NOW()',_0x6085('0x6b'))[_0x6085('0x6c')](_0x6085('0x6d'))[_0x6085('0x36')](_0x6085('0x7c'),_0x25442e[_0x6085('0x43')]['id'][_0x6085('0x6e')]())[_0x6085('0x36')](_0x6085('0x6f'),_0x25442e[_0x6085('0x46')][_0x6085('0x70')]['toString']())[_0x6085('0x36')](_0x6085('0x7d'))[_0x6085('0x36')](_0x6085('0x73'),squel['select']()[_0x6085('0x3b')]('phone')[_0x6085('0x6c')](_0x6085('0x71'))[_0x6085('0x36')](_0x6085('0x7c'),_0x25442e[_0x6085('0x43')]['id'][_0x6085('0x6e')]()))['where'](_0x6085('0x73'),squel[_0x6085('0x67')]()['field'](_0x6085('0x74'))[_0x6085('0x6c')](_0x6085('0x6d'))[_0x6085('0x36')](_0x6085('0x7c'),_0x25442e[_0x6085('0x43')]['id']['toString']())[_0x6085('0x36')]('state\x20=\x204'))['group'](_0x6085('0x63')))[_0x6085('0x6e')]();return db[_0x6085('0x4b')][_0x6085('0x2b')](_0x5c253b);}return[];})['then'](respondWithResult(_0x2dfd87,null))[_0x6085('0x41')](handleError(_0x2dfd87,null));};exports[_0x6085('0x7e')]=function(_0x285f69,_0x257bac,_0x49cb7a){return db[_0x6085('0x7f')][_0x6085('0x80')]({'where':{'VoiceQueueId':_0x285f69[_0x6085('0x46')][_0x6085('0x65')],'CampaignId':_0x285f69[_0x6085('0x46')]['CampaignId'],'ContactId':_0x285f69[_0x6085('0x46')][_0x6085('0x63')]}})[_0x6085('0x23')](handleEntityNotFound(_0x257bac,null))[_0x6085('0x23')](function(_0x4078c4){if(_0x4078c4){return _0x4078c4;}return null;})[_0x6085('0x23')](respondWithResult(_0x257bac,null))[_0x6085('0x41')](handleError(_0x257bac,null));};
\ No newline at end of file
index 56f3642..1abf848 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x129a=['exports','define','CmHopperFinal','cm_hopper_final','calleridnum','uniqueid','lodash','../../config/logger','moment','bluebird','request-promise'];(function(_0x542c11,_0x35d5df){var _0xd5ba30=function(_0x352bff){while(--_0x352bff){_0x542c11['push'](_0x542c11['shift']());}};_0xd5ba30(++_0x35d5df);}(_0x129a,0x10e));var _0xa129=function(_0x43a6b4,_0x14070b){_0x43a6b4=_0x43a6b4-0x0;var _0x160884=_0x129a[_0x43a6b4];return _0x160884;};'use strict';var _=require(_0xa129('0x0'));var util=require('util');var logger=require(_0xa129('0x1'))('api');var moment=require(_0xa129('0x2'));var BPromise=require(_0xa129('0x3'));var rp=require(_0xa129('0x4'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require('./cmHopperFinal.attributes');module[_0xa129('0x5')]=function(_0x27aa43,_0x3b19b8){return _0x27aa43[_0xa129('0x6')](_0xa129('0x7'),attributes,{'tableName':_0xa129('0x8'),'paranoid':![],'indexes':[{'name':_0xa129('0x9'),'fields':[_0xa129('0x9')]},{'name':_0xa129('0xa'),'fields':[_0xa129('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x323a=['../../config/logger','moment','bluebird','path','rimraf','exports','CmHopperFinal','cm_hopper_final','calleridnum','uniqueid','lodash'];(function(_0x2f6cf3,_0x281218){var _0xeebe3b=function(_0x3bb35f){while(--_0x3bb35f){_0x2f6cf3['push'](_0x2f6cf3['shift']());}};_0xeebe3b(++_0x281218);}(_0x323a,0x99));var _0xa323=function(_0x3f23d9,_0x4f118e){_0x3f23d9=_0x3f23d9-0x0;var _0x5f15be=_0x323a[_0x3f23d9];return _0x5f15be;};'use strict';var _=require(_0xa323('0x0'));var util=require('util');var logger=require(_0xa323('0x1'))('api');var moment=require(_0xa323('0x2'));var BPromise=require(_0xa323('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xa323('0x4'));var rimraf=require(_0xa323('0x5'));var config=require('../../config/environment');var attributes=require('./cmHopperFinal.attributes');module[_0xa323('0x6')]=function(_0x26bd57,_0x8935be){return _0x26bd57['define'](_0xa323('0x7'),attributes,{'tableName':_0xa323('0x8'),'paranoid':![],'indexes':[{'name':'calleridnum','fields':[_0xa323('0x9')]},{'name':'uniqueid','fields':[_0xa323('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
index a642b60..9787121 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc368=['request\x20sent','debug','stringify','error','code','CmHopperFinal,\x20%s,\x20%s','message','info','result','catch','CmHopperFinal','body','options','raw','CreateCmHopperFinal','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','request','then'];(function(_0x48ad8d,_0x16332b){var _0xe00479=function(_0x4dd3a4){while(--_0x4dd3a4){_0x48ad8d['push'](_0x48ad8d['shift']());}};_0xe00479(++_0x16332b);}(_0xc368,0x7b));var _0x8c36=function(_0x4f642f,_0x4e3efa){_0x4f642f=_0x4f642f-0x0;var _0xc7bcf7=_0xc368[_0x4f642f];return _0xc7bcf7;};'use strict';var _=require('lodash');var util=require(_0x8c36('0x0'));var moment=require('moment');var BPromise=require(_0x8c36('0x1'));var rs=require(_0x8c36('0x2'));var fs=require('fs');var Redis=require(_0x8c36('0x3'));var db=require(_0x8c36('0x4'))['db'];var utils=require(_0x8c36('0x5'));var logger=require('../../config/logger')(_0x8c36('0x6'));var config=require(_0x8c36('0x7'));var jayson=require(_0x8c36('0x8'));var client=jayson[_0x8c36('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x554022,_0x8ed437,_0x384867){return new BPromise(function(_0x3e76be,_0x26bad1){return client[_0x8c36('0xa')](_0x554022,_0x384867)[_0x8c36('0xb')](function(_0x569f29){logger['info']('CmHopperFinal,\x20%s,\x20%s',_0x8ed437,_0x8c36('0xc'));logger[_0x8c36('0xd')]('CmHopperFinal,\x20%s,\x20%s,\x20%s',_0x8ed437,_0x8c36('0xc'),JSON[_0x8c36('0xe')](_0x569f29));if(_0x569f29[_0x8c36('0xf')]){if(_0x569f29[_0x8c36('0xf')][_0x8c36('0x10')]===0x1f4){logger[_0x8c36('0xf')](_0x8c36('0x11'),_0x8ed437,_0x569f29[_0x8c36('0xf')][_0x8c36('0x12')]);return _0x26bad1(_0x569f29[_0x8c36('0xf')][_0x8c36('0x12')]);}logger[_0x8c36('0xf')](_0x8c36('0x11'),_0x8ed437,_0x569f29[_0x8c36('0xf')]['message']);return _0x3e76be(_0x569f29[_0x8c36('0xf')]['message']);}else{logger[_0x8c36('0x13')](_0x8c36('0x11'),_0x8ed437,_0x8c36('0xc'));_0x3e76be(_0x569f29[_0x8c36('0x14')][_0x8c36('0x12')]);}})[_0x8c36('0x15')](function(_0x3c10eb){logger[_0x8c36('0xf')](_0x8c36('0x11'),_0x8ed437,_0x3c10eb);_0x26bad1(_0x3c10eb);});});}exports['CreateCmHopperFinal']=function(_0x2be9b0){var _0x46ae6e=this;return new Promise(function(_0x47832a,_0x2d5e5b){return db[_0x8c36('0x16')]['create'](_0x2be9b0[_0x8c36('0x17')],{'raw':_0x2be9b0[_0x8c36('0x18')]?_0x2be9b0[_0x8c36('0x18')][_0x8c36('0x19')]===undefined?!![]:![]:!![]})[_0x8c36('0xb')](function(_0x2b07ad){logger[_0x8c36('0x13')](_0x8c36('0x1a'),_0x2be9b0);logger[_0x8c36('0xd')](_0x8c36('0x1a'),_0x2be9b0,JSON[_0x8c36('0xe')](_0x2b07ad));_0x47832a(_0x2b07ad);})[_0x8c36('0x15')](function(_0x46645d){logger['error']('CreateCmHopperFinal',_0x46645d['message'],_0x2be9b0);_0x2d5e5b(_0x46ae6e['error'](0x1f4,_0x46645d[_0x8c36('0x12')]));});});};
\ No newline at end of file
+var _0x750a=['error','code','CmHopperFinal,\x20%s,\x20%s','message','catch','body','options','then','util','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','request\x20sent','debug','stringify'];(function(_0x7d4dc8,_0x14d70e){var _0x20b216=function(_0x3575b0){while(--_0x3575b0){_0x7d4dc8['push'](_0x7d4dc8['shift']());}};_0x20b216(++_0x14d70e);}(_0x750a,0x140));var _0xa750=function(_0x56b8a3,_0x412e85){_0x56b8a3=_0x56b8a3-0x0;var _0x39cc44=_0x750a[_0x56b8a3];return _0x39cc44;};'use strict';var _=require('lodash');var util=require(_0xa750('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xa750('0x1'));var fs=require('fs');var Redis=require(_0xa750('0x2'));var db=require(_0xa750('0x3'))['db'];var utils=require(_0xa750('0x4'));var logger=require(_0xa750('0x5'))(_0xa750('0x6'));var config=require(_0xa750('0x7'));var jayson=require(_0xa750('0x8'));var client=jayson[_0xa750('0x9')][_0xa750('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x197299,_0x1ae455,_0x3d7c43){return new BPromise(function(_0x47a4dd,_0x53f2cb){return client[_0xa750('0xb')](_0x197299,_0x3d7c43)['then'](function(_0x4458b1){logger[_0xa750('0xc')]('CmHopperFinal,\x20%s,\x20%s',_0x1ae455,_0xa750('0xd'));logger[_0xa750('0xe')]('CmHopperFinal,\x20%s,\x20%s,\x20%s',_0x1ae455,'request\x20sent',JSON[_0xa750('0xf')](_0x4458b1));if(_0x4458b1['error']){if(_0x4458b1[_0xa750('0x10')][_0xa750('0x11')]===0x1f4){logger['error'](_0xa750('0x12'),_0x1ae455,_0x4458b1[_0xa750('0x10')][_0xa750('0x13')]);return _0x53f2cb(_0x4458b1['error'][_0xa750('0x13')]);}logger[_0xa750('0x10')](_0xa750('0x12'),_0x1ae455,_0x4458b1[_0xa750('0x10')][_0xa750('0x13')]);return _0x47a4dd(_0x4458b1[_0xa750('0x10')]['message']);}else{logger[_0xa750('0xc')](_0xa750('0x12'),_0x1ae455,_0xa750('0xd'));_0x47a4dd(_0x4458b1['result'][_0xa750('0x13')]);}})[_0xa750('0x14')](function(_0x58639b){logger['error'](_0xa750('0x12'),_0x1ae455,_0x58639b);_0x53f2cb(_0x58639b);});});}exports['CreateCmHopperFinal']=function(_0x433dbd){var _0x1bde87=this;return new Promise(function(_0x4f1faa,_0x36dcca){return db['CmHopperFinal']['create'](_0x433dbd[_0xa750('0x15')],{'raw':_0x433dbd['options']?_0x433dbd[_0xa750('0x16')]['raw']===undefined?!![]:![]:!![]})[_0xa750('0x17')](function(_0x4a007d){logger[_0xa750('0xc')]('CreateCmHopperFinal',_0x433dbd);logger[_0xa750('0xe')]('CreateCmHopperFinal',_0x433dbd,JSON['stringify'](_0x4a007d));_0x4f1faa(_0x4a007d);})[_0xa750('0x14')](function(_0x52da84){logger[_0xa750('0x10')]('CreateCmHopperFinal',_0x52da84['message'],_0x433dbd);_0x36dcca(_0x1bde87['error'](0x1f4,_0x52da84['message']));});});};
\ No newline at end of file
index 894ca27..6d4b6e7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c44=['put','update','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','get','index','/describe','isAuthenticated','describe','/:id','show','countContactsQueueCampaignHopperFinal','countContactsIvrCampaignHopperFinal','moveContactsQueueCampaignHopperFinal','/voice/campaign/moveContacts/:id','post','/checkContactHopper','checkContactHopper'];(function(_0x84620,_0xa30b79){var _0x126e13=function(_0x385f52){while(--_0x385f52){_0x84620['push'](_0x84620['shift']());}};_0x126e13(++_0xa30b79);}(_0x9c44,0x178));var _0x49c4=function(_0x2d2c16,_0x4e88b6){_0x2d2c16=_0x2d2c16-0x0;var _0x53f2fb=_0x9c44[_0x2d2c16];return _0x53f2fb;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x49c4('0x0'));var timeout=require(_0x49c4('0x1'));var express=require(_0x49c4('0x2'));var router=express[_0x49c4('0x3')]();var auth=require(_0x49c4('0x4'));var interaction=require(_0x49c4('0x5'));var config=require('../../config/environment');var controller=require('./cmHopperFinal.controller');router[_0x49c4('0x6')]('/',auth['isAuthenticated'](),controller[_0x49c4('0x7')]);router[_0x49c4('0x6')](_0x49c4('0x8'),auth[_0x49c4('0x9')](),controller[_0x49c4('0xa')]);router['get'](_0x49c4('0xb'),auth[_0x49c4('0x9')](),controller[_0x49c4('0xc')]);router[_0x49c4('0x6')]('/voice/queue/countAttributes/:id',auth['isAuthenticated'](),controller[_0x49c4('0xd')]);router[_0x49c4('0x6')]('/campaign/countAttributes/:id',auth[_0x49c4('0x9')](),controller[_0x49c4('0xe')]);router['post']('/voice/queue/moveContacts/:id',auth[_0x49c4('0x9')](),controller[_0x49c4('0xf')]);router['post'](_0x49c4('0x10'),auth[_0x49c4('0x9')](),controller['moveContactsIvrCampaignHopperFinal']);router[_0x49c4('0x11')](_0x49c4('0x12'),auth[_0x49c4('0x9')](),controller[_0x49c4('0x13')]);router[_0x49c4('0x14')](_0x49c4('0xb'),auth[_0x49c4('0x9')](),controller[_0x49c4('0x15')]);module['exports']=router;
\ No newline at end of file
+var _0x9c44=['put','update','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','get','index','/describe','isAuthenticated','describe','/:id','show','countContactsQueueCampaignHopperFinal','countContactsIvrCampaignHopperFinal','moveContactsQueueCampaignHopperFinal','/voice/campaign/moveContacts/:id','post','/checkContactHopper','checkContactHopper'];(function(_0x4a80f8,_0x4ad29a){var _0x4f0c29=function(_0x16f28f){while(--_0x16f28f){_0x4a80f8['push'](_0x4a80f8['shift']());}};_0x4f0c29(++_0x4ad29a);}(_0x9c44,0x178));var _0x49c4=function(_0x3ab51d,_0x2fa01d){_0x3ab51d=_0x3ab51d-0x0;var _0x29a04e=_0x9c44[_0x3ab51d];return _0x29a04e;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x49c4('0x0'));var timeout=require(_0x49c4('0x1'));var express=require(_0x49c4('0x2'));var router=express[_0x49c4('0x3')]();var auth=require(_0x49c4('0x4'));var interaction=require(_0x49c4('0x5'));var config=require('../../config/environment');var controller=require('./cmHopperFinal.controller');router[_0x49c4('0x6')]('/',auth['isAuthenticated'](),controller[_0x49c4('0x7')]);router[_0x49c4('0x6')](_0x49c4('0x8'),auth[_0x49c4('0x9')](),controller[_0x49c4('0xa')]);router['get'](_0x49c4('0xb'),auth[_0x49c4('0x9')](),controller[_0x49c4('0xc')]);router[_0x49c4('0x6')]('/voice/queue/countAttributes/:id',auth['isAuthenticated'](),controller[_0x49c4('0xd')]);router[_0x49c4('0x6')]('/campaign/countAttributes/:id',auth[_0x49c4('0x9')](),controller[_0x49c4('0xe')]);router['post']('/voice/queue/moveContacts/:id',auth[_0x49c4('0x9')](),controller[_0x49c4('0xf')]);router['post'](_0x49c4('0x10'),auth[_0x49c4('0x9')](),controller['moveContactsIvrCampaignHopperFinal']);router[_0x49c4('0x11')](_0x49c4('0x12'),auth[_0x49c4('0x9')](),controller[_0x49c4('0x13')]);router[_0x49c4('0x14')](_0x49c4('0xb'),auth[_0x49c4('0x9')](),controller[_0x49c4('0x15')]);module['exports']=router;
\ No newline at end of file
index 536af13..06557ef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdbf5=['BOOLEAN','exports','DATE','INTEGER','STRING'];(function(_0x1098db,_0x39ba6b){var _0x14f090=function(_0x473ffe){while(--_0x473ffe){_0x1098db['push'](_0x1098db['shift']());}};_0x14f090(++_0x39ba6b);}(_0xdbf5,0x18c));var _0x5dbf=function(_0x221662,_0x35c467){_0x221662=_0x221662-0x0;var _0x922ec5=_0xdbf5[_0x221662];return _0x922ec5;};'use strict';var Sequelize=require('sequelize');module[_0x5dbf('0x0')]={'state':{'type':Sequelize['INTEGER'](0x2)},'statedesc':{'type':Sequelize['STRING']},'scheduledat':{'type':Sequelize[_0x5dbf('0x1')]},'countbusyretry':{'type':Sequelize[_0x5dbf('0x2')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0x5dbf('0x2')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0x5dbf('0x2')],'defaultValue':0x0},'countglobal':{'type':Sequelize[_0x5dbf('0x2')],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0x5dbf('0x3')]},'originatecalleridnum':{'type':Sequelize[_0x5dbf('0x3')]},'originatecalleridname':{'type':Sequelize[_0x5dbf('0x3')]},'calleridnum':{'type':Sequelize[_0x5dbf('0x3')]},'calleridname':{'type':Sequelize[_0x5dbf('0x3')]},'starttime':{'type':Sequelize[_0x5dbf('0x1')]},'responsetime':{'type':Sequelize[_0x5dbf('0x1')]},'answertime':{'type':Sequelize[_0x5dbf('0x1')]},'droptime':{'type':Sequelize['DATE']},'endtime':{'type':Sequelize[_0x5dbf('0x1')]},'ringtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'holdtime':{'type':Sequelize[_0x5dbf('0x2')],'defaultValue':0x0},'talktime':{'type':Sequelize[_0x5dbf('0x2')],'defaultValue':0x0},'followuptime':{'type':Sequelize[_0x5dbf('0x2')],'defaultValue':0x0},'dropreason':{'type':Sequelize[_0x5dbf('0x3')]},'campaign':{'type':Sequelize['STRING']},'campaigntype':{'type':Sequelize[_0x5dbf('0x3')]},'membername':{'type':Sequelize['STRING']},'reason':{'type':Sequelize['STRING']},'amd':{'type':Sequelize[_0x5dbf('0x4')],'defaultValue':![]},'fax':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'callback':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x5dbf('0x3')],'defaultValue':null},'callbackat':{'type':Sequelize['DATE']},'recallme':{'type':Sequelize[_0x5dbf('0x4')],'defaultValue':![]},'editedat':{'type':Sequelize[_0x5dbf('0x1')]},'edited':{'type':Sequelize[_0x5dbf('0x4')],'defaultValue':![]}};
\ No newline at end of file
+var _0x1159=['DATE','INTEGER','BOOLEAN','sequelize','STRING'];(function(_0x42ed24,_0x36048b){var _0x11bfc4=function(_0x380889){while(--_0x380889){_0x42ed24['push'](_0x42ed24['shift']());}};_0x11bfc4(++_0x36048b);}(_0x1159,0xf3));var _0x9115=function(_0x37896f,_0xfbd34d){_0x37896f=_0x37896f-0x0;var _0x543d6a=_0x1159[_0x37896f];return _0x543d6a;};'use strict';var Sequelize=require(_0x9115('0x0'));module['exports']={'state':{'type':Sequelize['INTEGER'](0x2)},'statedesc':{'type':Sequelize[_0x9115('0x1')]},'scheduledat':{'type':Sequelize[_0x9115('0x2')]},'countbusyretry':{'type':Sequelize[_0x9115('0x3')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0x9115('0x3')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0x9115('0x3')],'defaultValue':0x0},'countglobal':{'type':Sequelize[_0x9115('0x3')],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0x9115('0x1')]},'originatecalleridnum':{'type':Sequelize[_0x9115('0x1')]},'originatecalleridname':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0x9115('0x1')]},'calleridname':{'type':Sequelize[_0x9115('0x1')]},'starttime':{'type':Sequelize[_0x9115('0x2')]},'responsetime':{'type':Sequelize[_0x9115('0x2')]},'answertime':{'type':Sequelize[_0x9115('0x2')]},'droptime':{'type':Sequelize[_0x9115('0x2')]},'endtime':{'type':Sequelize[_0x9115('0x2')]},'ringtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'holdtime':{'type':Sequelize[_0x9115('0x3')],'defaultValue':0x0},'talktime':{'type':Sequelize[_0x9115('0x3')],'defaultValue':0x0},'followuptime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'dropreason':{'type':Sequelize['STRING']},'campaign':{'type':Sequelize[_0x9115('0x1')]},'campaigntype':{'type':Sequelize['STRING']},'membername':{'type':Sequelize[_0x9115('0x1')]},'reason':{'type':Sequelize[_0x9115('0x1')]},'amd':{'type':Sequelize[_0x9115('0x4')],'defaultValue':![]},'fax':{'type':Sequelize[_0x9115('0x4')],'defaultValue':![]},'callback':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x9115('0x1')],'defaultValue':null},'callbackat':{'type':Sequelize[_0x9115('0x2')]},'recallme':{'type':Sequelize[_0x9115('0x4')],'defaultValue':![]},'editedat':{'type':Sequelize[_0x9115('0x2')]},'edited':{'type':Sequelize[_0x9115('0x4')],'defaultValue':![]}};
\ No newline at end of file
index f7d7913..d71de72 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb10b=['options','find','create','describe','body','uniqueid','html-pdf','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','error','send','index','CmHopperHistory','rawAttributes','keys','query','filters','intersection','fields','length','attributes','hasOwnProperty','nolimit','order','sort','where','filter','merge','type','key','VIRTUAL','field','count','includeAll','findAll','catch','params','model'];(function(_0x1d7b23,_0x75416d){var _0x50fd26=function(_0x433395){while(--_0x433395){_0x1d7b23['push'](_0x1d7b23['shift']());}};_0x50fd26(++_0x75416d);}(_0xb10b,0x12a));var _0xbb10=function(_0x6090f2,_0x90b872){_0x6090f2=_0x6090f2-0x0;var _0x2618d2=_0xb10b[_0x6090f2];return _0x2618d2;};'use strict';var pdf=require(_0xbb10('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xbb10('0x1'));var zipdir=require(_0xbb10('0x2'));var jsonpatch=require(_0xbb10('0x3'));var rp=require('request-promise');var moment=require(_0xbb10('0x4'));var BPromise=require(_0xbb10('0x5'));var Mustache=require(_0xbb10('0x6'));var util=require(_0xbb10('0x7'));var path=require(_0xbb10('0x8'));var sox=require(_0xbb10('0x9'));var csv=require('to-csv');var ejs=require(_0xbb10('0xa'));var fs=require('fs');var _=require(_0xbb10('0xb'));var squel=require('squel');var crypto=require(_0xbb10('0xc'));var jsforce=require(_0xbb10('0xd'));var deskjs=require(_0xbb10('0xe'));var toCsv=require(_0xbb10('0xf'));var querystring=require(_0xbb10('0x10'));var Papa=require(_0xbb10('0x11'));var Redis=require(_0xbb10('0x12'));var authService=require(_0xbb10('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xbb10('0x14'))(_0xbb10('0x15'));var utils=require(_0xbb10('0x16'));var config=require('../../config/environment');var db=require(_0xbb10('0x17'))['db'];function respondWithStatusCode(_0x5be7e0,_0x44fb19){_0x44fb19=_0x44fb19||0xcc;return function(_0x916a32){if(_0x916a32){return _0x5be7e0[_0xbb10('0x18')](_0x44fb19);}return _0x5be7e0[_0xbb10('0x19')](_0x44fb19)[_0xbb10('0x1a')]();};}function respondWithResult(_0x147230,_0x58a612){_0x58a612=_0x58a612||0xc8;return function(_0x26e021){if(_0x26e021){return _0x147230[_0xbb10('0x19')](_0x58a612)[_0xbb10('0x1b')](_0x26e021);}};}function respondWithFilteredResult(_0x17fd46,_0x3df17b){return function(_0x2f2ebf){if(_0x2f2ebf){var _0x24a57b=_0x2f2ebf['count'],_0x36b5e8=_0x3df17b[_0xbb10('0x1c')],_0x3e26f4=_0x3df17b[_0xbb10('0x1c')]+_0x3df17b[_0xbb10('0x1d')],_0x2b184e;if(_0x3e26f4>=_0x24a57b){_0x3e26f4=_0x24a57b;_0x2b184e=0xc8;}else{_0x2b184e=0xce;}_0x17fd46[_0xbb10('0x19')](_0x2b184e);return _0x17fd46[_0xbb10('0x1e')](_0xbb10('0x1f'),_0x36b5e8+'-'+_0x3e26f4+'/'+_0x24a57b)[_0xbb10('0x1b')](_0x2f2ebf);}return null;};}function patchUpdates(_0x30efc6){return function(_0xbf2906){try{jsonpatch[_0xbb10('0x20')](_0xbf2906,_0x30efc6,!![]);}catch(_0x48b6e9){return BPromise[_0xbb10('0x21')](_0x48b6e9);}return _0xbf2906[_0xbb10('0x22')]();};}function saveUpdates(_0x388fab,_0x109908){return function(_0xdf237d){if(_0xdf237d){return _0xdf237d[_0xbb10('0x23')](_0x388fab)['then'](function(_0x12f888){return _0x12f888;});}return null;};}function removeEntity(_0x12ef77,_0x50aea1){return function(_0x4c4b0d){if(_0x4c4b0d){return _0x4c4b0d[_0xbb10('0x24')]()[_0xbb10('0x25')](function(){_0x12ef77[_0xbb10('0x19')](0xcc)[_0xbb10('0x1a')]();});}};}function handleEntityNotFound(_0x445761,_0x1824b7){return function(_0x407cb4){if(!_0x407cb4){_0x445761[_0xbb10('0x18')](0x194);}return _0x407cb4;};}function handleError(_0x7f2377,_0x395404){_0x395404=_0x395404||0x1f4;return function(_0x3ba6cd){logger[_0xbb10('0x26')](_0x3ba6cd['stack']);if(_0x3ba6cd['name']){delete _0x3ba6cd['name'];}_0x7f2377[_0xbb10('0x19')](_0x395404)[_0xbb10('0x27')](_0x3ba6cd);};}exports[_0xbb10('0x28')]=function(_0x4e25ff,_0x2fdde9){var _0x24d586={},_0x6ed43b={},_0x1d5e95={'count':0x0,'rows':[]};var _0x1acce9=db[_0xbb10('0x29')][_0xbb10('0x2a')];_0x6ed43b['model']=_[_0xbb10('0x2b')](_0x1acce9);_0x6ed43b[_0xbb10('0x2c')]=_[_0xbb10('0x2b')](_0x4e25ff[_0xbb10('0x2c')]);_0x6ed43b[_0xbb10('0x2d')]=_[_0xbb10('0x2e')](_0x6ed43b['model'],_0x6ed43b[_0xbb10('0x2c')]);_0x24d586['attributes']=_[_0xbb10('0x2e')](_0x6ed43b['model'],qs[_0xbb10('0x2f')](_0x4e25ff[_0xbb10('0x2c')][_0xbb10('0x2f')]));_0x24d586['attributes']=_0x24d586['attributes'][_0xbb10('0x30')]?_0x24d586[_0xbb10('0x31')]:_0x6ed43b['model'];if(!_0x4e25ff[_0xbb10('0x2c')][_0xbb10('0x32')](_0xbb10('0x33'))){_0x24d586[_0xbb10('0x1d')]=qs[_0xbb10('0x1d')](_0x4e25ff[_0xbb10('0x2c')][_0xbb10('0x1d')]);_0x24d586['offset']=qs[_0xbb10('0x1c')](_0x4e25ff[_0xbb10('0x2c')][_0xbb10('0x1c')]);}_0x24d586[_0xbb10('0x34')]=qs[_0xbb10('0x35')](_0x4e25ff[_0xbb10('0x2c')][_0xbb10('0x35')]);_0x24d586[_0xbb10('0x36')]=qs[_0xbb10('0x2d')](_['pick'](_0x4e25ff[_0xbb10('0x2c')],_0x6ed43b[_0xbb10('0x2d')]));if(_0x4e25ff[_0xbb10('0x2c')][_0xbb10('0x37')]){_0x24d586['where']=_[_0xbb10('0x38')](_0x24d586['where'],{'$or':_['map'](_0x1acce9,function(_0x3eb3cc){if(_0x3eb3cc[_0xbb10('0x39')][_0xbb10('0x3a')]!==_0xbb10('0x3b')){var _0x15d895={};_0x15d895[_0x3eb3cc[_0xbb10('0x3c')]]={'$like':'%'+_0x4e25ff['query'][_0xbb10('0x37')]+'%'};return _0x15d895;}})});}_0x24d586=_[_0xbb10('0x38')]({},_0x24d586,_0x4e25ff['options']);var _0x5e3fbd={'where':_0x24d586['where']};return db[_0xbb10('0x29')][_0xbb10('0x3d')](_0x5e3fbd)[_0xbb10('0x25')](function(_0x4d5a9b){_0x1d5e95[_0xbb10('0x3d')]=_0x4d5a9b;if(_0x4e25ff[_0xbb10('0x2c')][_0xbb10('0x3e')]){_0x24d586['include']=[{'all':!![]}];}return db[_0xbb10('0x29')][_0xbb10('0x3f')](_0x24d586);})[_0xbb10('0x25')](function(_0x446f49){_0x1d5e95['rows']=_0x446f49;return _0x1d5e95;})[_0xbb10('0x25')](respondWithFilteredResult(_0x2fdde9,_0x24d586))[_0xbb10('0x40')](handleError(_0x2fdde9,null));};exports['show']=function(_0xe2040f,_0x2e3214){var _0x44d6ae={'raw':!![],'where':{'id':_0xe2040f[_0xbb10('0x41')]['id']}},_0x3a9934={};_0x3a9934[_0xbb10('0x42')]=_['keys'](db[_0xbb10('0x29')][_0xbb10('0x2a')]);_0x3a9934[_0xbb10('0x2c')]=_[_0xbb10('0x2b')](_0xe2040f['query']);_0x3a9934[_0xbb10('0x2d')]=_[_0xbb10('0x2e')](_0x3a9934[_0xbb10('0x42')],_0x3a9934[_0xbb10('0x2c')]);_0x44d6ae['attributes']=_[_0xbb10('0x2e')](_0x3a9934[_0xbb10('0x42')],qs['fields'](_0xe2040f['query'][_0xbb10('0x2f')]));_0x44d6ae['attributes']=_0x44d6ae[_0xbb10('0x31')][_0xbb10('0x30')]?_0x44d6ae['attributes']:_0x3a9934[_0xbb10('0x42')];if(_0xe2040f[_0xbb10('0x2c')][_0xbb10('0x3e')]){_0x44d6ae['include']=[{'all':!![]}];}_0x44d6ae=_[_0xbb10('0x38')]({},_0x44d6ae,_0xe2040f[_0xbb10('0x43')]);return db[_0xbb10('0x29')][_0xbb10('0x44')](_0x44d6ae)[_0xbb10('0x25')](handleEntityNotFound(_0x2e3214,null))[_0xbb10('0x25')](respondWithResult(_0x2e3214,null))[_0xbb10('0x40')](handleError(_0x2e3214,null));};exports[_0xbb10('0x45')]=function(_0x205bb4,_0x43b948){return db[_0xbb10('0x29')][_0xbb10('0x45')](_0x205bb4['body'],{})[_0xbb10('0x25')](respondWithResult(_0x43b948,0xc9))[_0xbb10('0x40')](handleError(_0x43b948,null));};exports['describe']=function(_0x14e1cb,_0x2f5027){return db[_0xbb10('0x29')][_0xbb10('0x46')]()[_0xbb10('0x25')](respondWithResult(_0x2f5027,null))[_0xbb10('0x40')](handleError(_0x2f5027,null));};exports[_0xbb10('0x23')]=function(_0x5be85e,_0x4a9793){if(_0x5be85e[_0xbb10('0x47')][_0xbb10('0x48')]){delete _0x5be85e[_0xbb10('0x47')]['uniqueid'];}return db['CmHopperHistory'][_0xbb10('0x44')]({'where':{'uniqueid':_0x5be85e[_0xbb10('0x41')]['id']}})[_0xbb10('0x25')](handleEntityNotFound(_0x4a9793,null))[_0xbb10('0x25')](saveUpdates(_0x5be85e[_0xbb10('0x47')],null))[_0xbb10('0x25')](respondWithResult(_0x4a9793,null))[_0xbb10('0x40')](handleError(_0x4a9793,null));};
\ No newline at end of file
+var _0xa9e0=['where','pick','filter','merge','type','key','VIRTUAL','options','includeAll','include','catch','show','params','find','create','body','describe','update','uniqueid','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','then','error','stack','send','index','CmHopperHistory','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','nolimit','order','sort'];(function(_0x494969,_0x2deef4){var _0x2d0f26=function(_0x3d4cac){while(--_0x3d4cac){_0x494969['push'](_0x494969['shift']());}};_0x2d0f26(++_0x2deef4);}(_0xa9e0,0x123));var _0x0a9e=function(_0x433a86,_0x175b5c){_0x433a86=_0x433a86-0x0;var _0x23000c=_0xa9e0[_0x433a86];return _0x23000c;};'use strict';var pdf=require(_0x0a9e('0x0'));var emlformat=require(_0x0a9e('0x1'));var rimraf=require(_0x0a9e('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x0a9e('0x3'));var moment=require('moment');var BPromise=require(_0x0a9e('0x4'));var Mustache=require(_0x0a9e('0x5'));var util=require(_0x0a9e('0x6'));var path=require(_0x0a9e('0x7'));var sox=require(_0x0a9e('0x8'));var csv=require('to-csv');var ejs=require(_0x0a9e('0x9'));var fs=require('fs');var _=require(_0x0a9e('0xa'));var squel=require(_0x0a9e('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x0a9e('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x0a9e('0xd'));var Redis=require(_0x0a9e('0xe'));var authService=require(_0x0a9e('0xf'));var qs=require(_0x0a9e('0x10'));var hardwareService=require(_0x0a9e('0x11'));var logger=require(_0x0a9e('0x12'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x273d4d,_0x36471c){_0x36471c=_0x36471c||0xcc;return function(_0xd5b662){if(_0xd5b662){return _0x273d4d[_0x0a9e('0x13')](_0x36471c);}return _0x273d4d[_0x0a9e('0x14')](_0x36471c)[_0x0a9e('0x15')]();};}function respondWithResult(_0x5db4b0,_0x4283ce){_0x4283ce=_0x4283ce||0xc8;return function(_0x239b12){if(_0x239b12){return _0x5db4b0[_0x0a9e('0x14')](_0x4283ce)[_0x0a9e('0x16')](_0x239b12);}};}function respondWithFilteredResult(_0x44dcfd,_0x4d5611){return function(_0x52a03d){if(_0x52a03d){var _0x22dccb=_0x52a03d[_0x0a9e('0x17')],_0x5d0880=_0x4d5611[_0x0a9e('0x18')],_0x1985b6=_0x4d5611['offset']+_0x4d5611[_0x0a9e('0x19')],_0x519dfd;if(_0x1985b6>=_0x22dccb){_0x1985b6=_0x22dccb;_0x519dfd=0xc8;}else{_0x519dfd=0xce;}_0x44dcfd['status'](_0x519dfd);return _0x44dcfd[_0x0a9e('0x1a')](_0x0a9e('0x1b'),_0x5d0880+'-'+_0x1985b6+'/'+_0x22dccb)[_0x0a9e('0x16')](_0x52a03d);}return null;};}function patchUpdates(_0x205fd6){return function(_0x31b1ca){try{jsonpatch[_0x0a9e('0x1c')](_0x31b1ca,_0x205fd6,!![]);}catch(_0x530eb7){return BPromise[_0x0a9e('0x1d')](_0x530eb7);}return _0x31b1ca[_0x0a9e('0x1e')]();};}function saveUpdates(_0x112016,_0x1c696a){return function(_0x105080){if(_0x105080){return _0x105080['update'](_0x112016)[_0x0a9e('0x1f')](function(_0x155cce){return _0x155cce;});}return null;};}function removeEntity(_0x53682f,_0x20f109){return function(_0x5a09ef){if(_0x5a09ef){return _0x5a09ef['destroy']()[_0x0a9e('0x1f')](function(){_0x53682f[_0x0a9e('0x14')](0xcc)[_0x0a9e('0x15')]();});}};}function handleEntityNotFound(_0x30bae6,_0x4abc77){return function(_0xfb6e48){if(!_0xfb6e48){_0x30bae6[_0x0a9e('0x13')](0x194);}return _0xfb6e48;};}function handleError(_0x3b45bc,_0x4d00e6){_0x4d00e6=_0x4d00e6||0x1f4;return function(_0x370d86){logger[_0x0a9e('0x20')](_0x370d86[_0x0a9e('0x21')]);if(_0x370d86['name']){delete _0x370d86['name'];}_0x3b45bc[_0x0a9e('0x14')](_0x4d00e6)[_0x0a9e('0x22')](_0x370d86);};}exports[_0x0a9e('0x23')]=function(_0x33161b,_0x526cf3){var _0x384319={},_0x479bc4={},_0x45a1e7={'count':0x0,'rows':[]};var _0x5bfb33=db[_0x0a9e('0x24')][_0x0a9e('0x25')];_0x479bc4[_0x0a9e('0x26')]=_[_0x0a9e('0x27')](_0x5bfb33);_0x479bc4[_0x0a9e('0x28')]=_[_0x0a9e('0x27')](_0x33161b[_0x0a9e('0x28')]);_0x479bc4[_0x0a9e('0x29')]=_['intersection'](_0x479bc4[_0x0a9e('0x26')],_0x479bc4[_0x0a9e('0x28')]);_0x384319[_0x0a9e('0x2a')]=_[_0x0a9e('0x2b')](_0x479bc4['model'],qs[_0x0a9e('0x2c')](_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x2c')]));_0x384319[_0x0a9e('0x2a')]=_0x384319[_0x0a9e('0x2a')][_0x0a9e('0x2d')]?_0x384319[_0x0a9e('0x2a')]:_0x479bc4[_0x0a9e('0x26')];if(!_0x33161b[_0x0a9e('0x28')]['hasOwnProperty'](_0x0a9e('0x2e'))){_0x384319['limit']=qs[_0x0a9e('0x19')](_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x19')]);_0x384319[_0x0a9e('0x18')]=qs[_0x0a9e('0x18')](_0x33161b['query'][_0x0a9e('0x18')]);}_0x384319[_0x0a9e('0x2f')]=qs[_0x0a9e('0x30')](_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x30')]);_0x384319[_0x0a9e('0x31')]=qs[_0x0a9e('0x29')](_[_0x0a9e('0x32')](_0x33161b['query'],_0x479bc4[_0x0a9e('0x29')]));if(_0x33161b['query'][_0x0a9e('0x33')]){_0x384319[_0x0a9e('0x31')]=_[_0x0a9e('0x34')](_0x384319[_0x0a9e('0x31')],{'$or':_['map'](_0x5bfb33,function(_0x191e91){if(_0x191e91[_0x0a9e('0x35')][_0x0a9e('0x36')]!==_0x0a9e('0x37')){var _0x4853b1={};_0x4853b1[_0x191e91['field']]={'$like':'%'+_0x33161b[_0x0a9e('0x28')]['filter']+'%'};return _0x4853b1;}})});}_0x384319=_[_0x0a9e('0x34')]({},_0x384319,_0x33161b[_0x0a9e('0x38')]);var _0x381c37={'where':_0x384319[_0x0a9e('0x31')]};return db['CmHopperHistory'][_0x0a9e('0x17')](_0x381c37)[_0x0a9e('0x1f')](function(_0x3cae){_0x45a1e7['count']=_0x3cae;if(_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x39')]){_0x384319[_0x0a9e('0x3a')]=[{'all':!![]}];}return db['CmHopperHistory']['findAll'](_0x384319);})[_0x0a9e('0x1f')](function(_0x40d766){_0x45a1e7['rows']=_0x40d766;return _0x45a1e7;})[_0x0a9e('0x1f')](respondWithFilteredResult(_0x526cf3,_0x384319))[_0x0a9e('0x3b')](handleError(_0x526cf3,null));};exports[_0x0a9e('0x3c')]=function(_0x148f55,_0x4b38d9){var _0x5a594b={'raw':!![],'where':{'id':_0x148f55[_0x0a9e('0x3d')]['id']}},_0x15e37d={};_0x15e37d['model']=_[_0x0a9e('0x27')](db[_0x0a9e('0x24')][_0x0a9e('0x25')]);_0x15e37d['query']=_[_0x0a9e('0x27')](_0x148f55[_0x0a9e('0x28')]);_0x15e37d[_0x0a9e('0x29')]=_[_0x0a9e('0x2b')](_0x15e37d[_0x0a9e('0x26')],_0x15e37d[_0x0a9e('0x28')]);_0x5a594b[_0x0a9e('0x2a')]=_[_0x0a9e('0x2b')](_0x15e37d[_0x0a9e('0x26')],qs[_0x0a9e('0x2c')](_0x148f55[_0x0a9e('0x28')][_0x0a9e('0x2c')]));_0x5a594b[_0x0a9e('0x2a')]=_0x5a594b[_0x0a9e('0x2a')][_0x0a9e('0x2d')]?_0x5a594b['attributes']:_0x15e37d['model'];if(_0x148f55[_0x0a9e('0x28')][_0x0a9e('0x39')]){_0x5a594b[_0x0a9e('0x3a')]=[{'all':!![]}];}_0x5a594b=_[_0x0a9e('0x34')]({},_0x5a594b,_0x148f55[_0x0a9e('0x38')]);return db[_0x0a9e('0x24')][_0x0a9e('0x3e')](_0x5a594b)[_0x0a9e('0x1f')](handleEntityNotFound(_0x4b38d9,null))[_0x0a9e('0x1f')](respondWithResult(_0x4b38d9,null))[_0x0a9e('0x3b')](handleError(_0x4b38d9,null));};exports[_0x0a9e('0x3f')]=function(_0x35ed4a,_0x5026aa){return db[_0x0a9e('0x24')][_0x0a9e('0x3f')](_0x35ed4a[_0x0a9e('0x40')],{})[_0x0a9e('0x1f')](respondWithResult(_0x5026aa,0xc9))[_0x0a9e('0x3b')](handleError(_0x5026aa,null));};exports[_0x0a9e('0x41')]=function(_0x21eb86,_0x44dd99){return db['CmHopperHistory'][_0x0a9e('0x41')]()['then'](respondWithResult(_0x44dd99,null))[_0x0a9e('0x3b')](handleError(_0x44dd99,null));};exports[_0x0a9e('0x42')]=function(_0x8d6dd1,_0x562fb4){if(_0x8d6dd1[_0x0a9e('0x40')][_0x0a9e('0x43')]){delete _0x8d6dd1[_0x0a9e('0x40')][_0x0a9e('0x43')];}return db[_0x0a9e('0x24')][_0x0a9e('0x3e')]({'where':{'uniqueid':_0x8d6dd1[_0x0a9e('0x3d')]['id']}})['then'](handleEntityNotFound(_0x562fb4,null))[_0x0a9e('0x1f')](saveUpdates(_0x8d6dd1[_0x0a9e('0x40')],null))[_0x0a9e('0x1f')](respondWithResult(_0x562fb4,null))[_0x0a9e('0x3b')](handleError(_0x562fb4,null));};
\ No newline at end of file
index 8673d8c..bf0f76a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe706=['cm_hopper_history','endtime','uniqueid','lodash','util','../../config/logger','moment','bluebird','request-promise','path','rimraf','../../config/environment','./cmHopperHistory.attributes','exports','define','CmHopperHistory'];(function(_0x326331,_0x1d644d){var _0x4bfce8=function(_0x19ec4f){while(--_0x19ec4f){_0x326331['push'](_0x326331['shift']());}};_0x4bfce8(++_0x1d644d);}(_0xe706,0xa3));var _0x6e70=function(_0xe7c36a,_0x641105){_0xe7c36a=_0xe7c36a-0x0;var _0x8b1186=_0xe706[_0xe7c36a];return _0x8b1186;};'use strict';var _=require(_0x6e70('0x0'));var util=require(_0x6e70('0x1'));var logger=require(_0x6e70('0x2'))('api');var moment=require(_0x6e70('0x3'));var BPromise=require(_0x6e70('0x4'));var rp=require(_0x6e70('0x5'));var fs=require('fs');var path=require(_0x6e70('0x6'));var rimraf=require(_0x6e70('0x7'));var config=require(_0x6e70('0x8'));var attributes=require(_0x6e70('0x9'));module[_0x6e70('0xa')]=function(_0x1b0389,_0x4381d1){return _0x1b0389[_0x6e70('0xb')](_0x6e70('0xc'),attributes,{'tableName':_0x6e70('0xd'),'paranoid':![],'indexes':[{'name':_0x6e70('0xe'),'fields':[_0x6e70('0xe')]},{'name':_0x6e70('0xf'),'fields':[_0x6e70('0xf')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x34e8=['lodash','util','../../config/logger','api','bluebird','request-promise','path','rimraf','../../config/environment','./cmHopperHistory.attributes','exports','CmHopperHistory','cm_hopper_history','endtime','uniqueid'];(function(_0xfd061f,_0x119079){var _0x31c95a=function(_0x49f875){while(--_0x49f875){_0xfd061f['push'](_0xfd061f['shift']());}};_0x31c95a(++_0x119079);}(_0x34e8,0x12c));var _0x834e=function(_0x4388f7,_0x2ab60b){_0x4388f7=_0x4388f7-0x0;var _0x58dc99=_0x34e8[_0x4388f7];return _0x58dc99;};'use strict';var _=require(_0x834e('0x0'));var util=require(_0x834e('0x1'));var logger=require(_0x834e('0x2'))(_0x834e('0x3'));var moment=require('moment');var BPromise=require(_0x834e('0x4'));var rp=require(_0x834e('0x5'));var fs=require('fs');var path=require(_0x834e('0x6'));var rimraf=require(_0x834e('0x7'));var config=require(_0x834e('0x8'));var attributes=require(_0x834e('0x9'));module[_0x834e('0xa')]=function(_0x4a2018,_0x858aa1){return _0x4a2018['define'](_0x834e('0xb'),attributes,{'tableName':_0x834e('0xc'),'paranoid':![],'indexes':[{'name':_0x834e('0xd'),'fields':[_0x834e('0xd')]},{'name':_0x834e('0xe'),'fields':[_0x834e('0xe')]}],'timestamps':!![]});};
\ No newline at end of file
index 9a9493b..df624ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6427=['CmHopperHistory,\x20%s,\x20%s','request\x20sent','debug','CmHopperHistory,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','CreateCmHopperHistory','create','body','options','raw','AvgHandleTime','CmHopperHistory','findAll','where','COUNT','sequelize','col','`state`\x20=\x204,\x201,\x20null','literal','`state`\x20=\x2010,\x201,\x20null','predictiveIntervalDroppedCallsTimeout','AVG','`state`\x20=\x204,\x20`holdtime`,\x20null','GetVoiceQueueHopperHistory','campaign','name','outboundNoSuchCallsDay','outboundAnswerCallsDay','`state`\x20=\x205,\x201,\x20null','outboundBusyCallsDay','`state`\x20=\x208,\x201,\x20null','outboundCongestionCallsDay','`state`\x20=\x2010\x20,\x201,\x20null','`state`\x20=\x2011\x20,\x201,\x20null','outboundDropCallsDayCallersExit','`state`\x20=\x2012,\x201,\x20null','outboundUnknownCallsDay','`state`\x20=\x2013,\x201,\x20null','outboundBlacklistCallsDay','`state`\x20=\x2014,\x201,\x20null','`state`\x20=\x2018,\x201,\x20null','outboundRejectCallsDay','outboundAnswerAgiCallsDay','`state`\x20=\x2020,\x201,\x20null','`state`\x20=\x2022\x20or\x20`state`\x20=\x2023,\x201,\x20null','outboundReCallsDay','GetCampaignHopperHistory','ivrTotalCallsDays','ivrAnswerCallsDay','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info'];(function(_0x3132c7,_0x1e0452){var _0x49e30e=function(_0x5bf337){while(--_0x5bf337){_0x3132c7['push'](_0x3132c7['shift']());}};_0x49e30e(++_0x1e0452);}(_0x6427,0xbe));var _0x7642=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x6427[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require(_0x7642('0x0'));var moment=require(_0x7642('0x1'));var BPromise=require(_0x7642('0x2'));var rs=require(_0x7642('0x3'));var fs=require('fs');var Redis=require(_0x7642('0x4'));var db=require(_0x7642('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x7642('0x6'))(_0x7642('0x7'));var config=require(_0x7642('0x8'));var jayson=require(_0x7642('0x9'));var client=jayson[_0x7642('0xa')][_0x7642('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x1cd5f4,_0x266b9b,_0xd37092){return new BPromise(function(_0x30946f,_0x5e4b1f){return client['request'](_0x1cd5f4,_0xd37092)[_0x7642('0xc')](function(_0x17527f){logger[_0x7642('0xd')](_0x7642('0xe'),_0x266b9b,_0x7642('0xf'));logger[_0x7642('0x10')](_0x7642('0x11'),_0x266b9b,_0x7642('0xf'),JSON[_0x7642('0x12')](_0x17527f));if(_0x17527f[_0x7642('0x13')]){if(_0x17527f[_0x7642('0x13')][_0x7642('0x14')]===0x1f4){logger[_0x7642('0x13')](_0x7642('0xe'),_0x266b9b,_0x17527f[_0x7642('0x13')][_0x7642('0x15')]);return _0x5e4b1f(_0x17527f[_0x7642('0x13')]['message']);}logger[_0x7642('0x13')](_0x7642('0xe'),_0x266b9b,_0x17527f['error'][_0x7642('0x15')]);return _0x30946f(_0x17527f['error'][_0x7642('0x15')]);}else{logger['info'](_0x7642('0xe'),_0x266b9b,_0x7642('0xf'));_0x30946f(_0x17527f[_0x7642('0x16')][_0x7642('0x15')]);}})[_0x7642('0x17')](function(_0x2febf8){logger[_0x7642('0x13')]('CmHopperHistory,\x20%s,\x20%s',_0x266b9b,_0x2febf8);_0x5e4b1f(_0x2febf8);});});}exports[_0x7642('0x18')]=function(_0x392686){var _0x123f99=this;return new Promise(function(_0x96bc79,_0x543f00){return db['CmHopperHistory'][_0x7642('0x19')](_0x392686[_0x7642('0x1a')],{'raw':_0x392686['options']?_0x392686[_0x7642('0x1b')][_0x7642('0x1c')]===undefined?!![]:![]:!![]})['then'](function(_0x503c13){logger[_0x7642('0xd')](_0x7642('0x18'),_0x392686);logger['debug']('CreateCmHopperHistory',_0x392686,JSON[_0x7642('0x12')](_0x503c13));_0x96bc79(_0x503c13);})[_0x7642('0x17')](function(_0x37de2b){logger['error'](_0x7642('0x18'),_0x37de2b[_0x7642('0x15')],_0x392686);_0x543f00(_0x123f99['error'](0x1f4,_0x37de2b[_0x7642('0x15')]));});});};exports[_0x7642('0x1d')]=function(_0xf31489){var _0x21cdfe=this;return new Promise(function(_0x5174fa,_0x1987bb){return db[_0x7642('0x1e')][_0x7642('0x1f')]({'raw':_0xf31489[_0x7642('0x1b')]?_0xf31489['options'][_0x7642('0x1c')]===undefined?!![]:![]:!![],'where':_0xf31489[_0x7642('0x1b')]?_0xf31489[_0x7642('0x1b')][_0x7642('0x20')]||null:null,'attributes':[[db['sequelize']['fn'](_0x7642('0x21'),db[_0x7642('0x22')][_0x7642('0x23')]('id')),'predictiveIntervalTotalCalls'],[db[_0x7642('0x22')]['fn']('COUNT',db[_0x7642('0x22')]['fn']('IF',db[_0x7642('0x22')]['literal'](_0x7642('0x24')))),'predictiveIntervalAnsweredCalls'],[db[_0x7642('0x22')]['fn'](_0x7642('0x21'),db[_0x7642('0x22')]['fn']('IF',db[_0x7642('0x22')][_0x7642('0x25')](_0x7642('0x26')))),_0x7642('0x27')],[db[_0x7642('0x22')]['fn'](_0x7642('0x21'),db[_0x7642('0x22')]['fn']('IF',db[_0x7642('0x22')][_0x7642('0x25')]('`state`\x20=\x2011,\x201,\x20null'))),'predictiveIntervalDroppedCallsCallersExit'],[db[_0x7642('0x22')]['fn'](_0x7642('0x28'),db[_0x7642('0x22')]['fn']('IF',db['sequelize'][_0x7642('0x25')](_0x7642('0x29')))),'predictiveIntervalAvgHoldtime'],[db[_0x7642('0x22')]['fn']('AVG',db[_0x7642('0x22')]['fn']('IF',db[_0x7642('0x22')][_0x7642('0x25')]('`state`\x20=\x204,\x20`talktime`,\x20null'))),'predictiveIntervalAvgTalktime']]})[_0x7642('0xc')](function(_0x5b7f24){logger['info']('AvgHandleTime',_0xf31489);logger['debug'](_0x7642('0x1d'),_0xf31489,JSON[_0x7642('0x12')](_0x5b7f24));_0x5174fa(_0x5b7f24);})[_0x7642('0x17')](function(_0x40c778){logger[_0x7642('0x13')](_0x7642('0x1d'),_0x40c778[_0x7642('0x15')],_0xf31489);_0x1987bb(_0x21cdfe[_0x7642('0x13')](0x1f4,_0x40c778[_0x7642('0x15')]));});});};exports[_0x7642('0x2a')]=function(_0x4e5aec){var _0x4975c5=this;return new Promise(function(_0x5600d9,_0xc5edf3){return db[_0x7642('0x1e')][_0x7642('0x1f')]({'raw':_0x4e5aec[_0x7642('0x1b')]?_0x4e5aec[_0x7642('0x1b')][_0x7642('0x1c')]===undefined?!![]:![]:!![],'where':_0x4e5aec[_0x7642('0x1b')]?_0x4e5aec[_0x7642('0x1b')]['where']||null:null,'attributes':[[_0x7642('0x2b'),_0x7642('0x2c')],[db[_0x7642('0x22')]['fn'](_0x7642('0x21'),db[_0x7642('0x22')]['fn']('IF',db['sequelize'][_0x7642('0x25')]('`state`\x20=\x200,\x201,\x20null'))),_0x7642('0x2d')],[db[_0x7642('0x22')]['fn']('COUNT',db[_0x7642('0x22')]['fn']('IF',db['sequelize'][_0x7642('0x25')]('`state`\x20=\x203,\x201,\x20null'))),'outboundNoAnswerCallsDay'],[db[_0x7642('0x22')]['fn'](_0x7642('0x21'),db['sequelize']['fn']('IF',db['sequelize'][_0x7642('0x25')](_0x7642('0x24')))),_0x7642('0x2e')],[db['sequelize']['fn'](_0x7642('0x21'),db[_0x7642('0x22')]['fn']('IF',db[_0x7642('0x22')][_0x7642('0x25')](_0x7642('0x2f')))),_0x7642('0x30')],[db[_0x7642('0x22')]['fn'](_0x7642('0x21'),db[_0x7642('0x22')]['fn']('IF',db[_0x7642('0x22')]['literal'](_0x7642('0x31')))),_0x7642('0x32')],[db[_0x7642('0x22')]['fn'](_0x7642('0x21'),db[_0x7642('0x22')]['fn']('IF',db[_0x7642('0x22')][_0x7642('0x25')](_0x7642('0x33')))),'outboundDropCallsDayTimeout'],[db[_0x7642('0x22')]['fn']('COUNT',db[_0x7642('0x22')]['fn']('IF',db['sequelize'][_0x7642('0x25')](_0x7642('0x34')))),_0x7642('0x35')],[db[_0x7642('0x22')]['fn'](_0x7642('0x21'),db[_0x7642('0x22')]['fn']('IF',db['sequelize'][_0x7642('0x25')](_0x7642('0x36')))),_0x7642('0x37')],[db['sequelize']['fn'](_0x7642('0x21'),db[_0x7642('0x22')]['fn']('IF',db[_0x7642('0x22')][_0x7642('0x25')](_0x7642('0x38')))),_0x7642('0x39')],[db[_0x7642('0x22')]['fn'](_0x7642('0x21'),db[_0x7642('0x22')]['fn']('IF',db[_0x7642('0x22')]['literal'](_0x7642('0x3a')))),'outboundOriginateFailureCallsDay'],[db[_0x7642('0x22')]['fn'](_0x7642('0x21'),db[_0x7642('0x22')]['fn']('IF',db[_0x7642('0x22')][_0x7642('0x25')](_0x7642('0x3b')))),_0x7642('0x3c')],[db['sequelize']['fn'](_0x7642('0x21'),db[_0x7642('0x22')]['fn']('IF',db[_0x7642('0x22')][_0x7642('0x25')]('`state`\x20=\x2016,\x201,\x20null'))),_0x7642('0x3d')],[db[_0x7642('0x22')]['fn'](_0x7642('0x21'),db[_0x7642('0x22')]['fn']('IF',db['sequelize'][_0x7642('0x25')](_0x7642('0x3e')))),_0x7642('0x3c')],[db[_0x7642('0x22')]['fn']('COUNT',db[_0x7642('0x22')]['fn']('IF',db['sequelize']['literal'](_0x7642('0x3f')))),_0x7642('0x40')]],'group':[_0x7642('0x2b')]})[_0x7642('0xc')](function(_0x193624){logger[_0x7642('0xd')](_0x7642('0x2a'),_0x4e5aec);logger['debug'](_0x7642('0x2a'),_0x4e5aec,JSON[_0x7642('0x12')](_0x193624));_0x5600d9(_0x193624);})['catch'](function(_0x1952ea){logger[_0x7642('0x13')](_0x7642('0x2a'),_0x1952ea['message'],_0x4e5aec);_0xc5edf3(_0x4975c5[_0x7642('0x13')](0x1f4,_0x1952ea[_0x7642('0x15')]));});});};exports[_0x7642('0x41')]=function(_0x566b41){var _0x3ad09e=this;return new Promise(function(_0x2a97a6,_0x12914f){return db[_0x7642('0x1e')][_0x7642('0x1f')]({'raw':_0x566b41['options']?_0x566b41[_0x7642('0x1b')][_0x7642('0x1c')]===undefined?!![]:![]:!![],'where':_0x566b41[_0x7642('0x1b')]?_0x566b41['options'][_0x7642('0x20')]||null:null,'attributes':[[_0x7642('0x2b'),_0x7642('0x2c')],[db[_0x7642('0x22')]['fn'](_0x7642('0x21'),db['sequelize'][_0x7642('0x23')]('id')),_0x7642('0x42')],[db[_0x7642('0x22')]['fn']('COUNT',db[_0x7642('0x22')]['fn']('IF',db['sequelize'][_0x7642('0x25')](_0x7642('0x24')))),_0x7642('0x43')]],'group':[_0x7642('0x2b')]})[_0x7642('0xc')](function(_0x1cad79){logger['info']('GetCampaignHopperHistory',_0x566b41);logger['debug'](_0x7642('0x41'),_0x566b41,JSON['stringify'](_0x1cad79));_0x2a97a6(_0x1cad79);})['catch'](function(_0xa3ba0d){logger[_0x7642('0x13')](_0x7642('0x41'),_0xa3ba0d[_0x7642('0x15')],_0x566b41);_0x12914f(_0x3ad09e['error'](0x1f4,_0xa3ba0d[_0x7642('0x15')]));});});};
\ No newline at end of file
+var _0x136c=['CmHopperHistory,\x20%s,\x20%s,\x20%s','stringify','error','message','catch','CreateCmHopperHistory','CmHopperHistory','body','options','raw','findAll','sequelize','COUNT','col','predictiveIntervalTotalCalls','literal','`state`\x20=\x204,\x201,\x20null','predictiveIntervalAnsweredCalls','predictiveIntervalDroppedCallsTimeout','predictiveIntervalDroppedCallsCallersExit','AVG','predictiveIntervalAvgHoldtime','`state`\x20=\x204,\x20`talktime`,\x20null','predictiveIntervalAvgTalktime','then','AvgHandleTime','GetVoiceQueueHopperHistory','where','campaign','name','`state`\x20=\x200,\x201,\x20null','outboundNoSuchCallsDay','outboundNoAnswerCallsDay','outboundBusyCallsDay','`state`\x20=\x208,\x201,\x20null','`state`\x20=\x2010\x20,\x201,\x20null','outboundDropCallsDayTimeout','`state`\x20=\x2011\x20,\x201,\x20null','outboundDropCallsDayCallersExit','`state`\x20=\x2012,\x201,\x20null','outboundUnknownCallsDay','`state`\x20=\x2013,\x201,\x20null','outboundBlacklistCallsDay','`state`\x20=\x2014,\x201,\x20null','`state`\x20=\x2018,\x201,\x20null','`state`\x20=\x2016,\x201,\x20null','outboundAnswerAgiCallsDay','`state`\x20=\x2022\x20or\x20`state`\x20=\x2023,\x201,\x20null','outboundReCallsDay','GetCampaignHopperHistory','ivrTotalCallsDays','ivrAnswerCallsDay','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','info','CmHopperHistory,\x20%s,\x20%s','request\x20sent','debug'];(function(_0x2a2759,_0x285779){var _0x25d4e4=function(_0x8f08e1){while(--_0x8f08e1){_0x2a2759['push'](_0x2a2759['shift']());}};_0x25d4e4(++_0x285779);}(_0x136c,0x1d2));var _0xc136=function(_0x15501a,_0x5d6b93){_0x15501a=_0x15501a-0x0;var _0x33ecf1=_0x136c[_0x15501a];return _0x33ecf1;};'use strict';var _=require(_0xc136('0x0'));var util=require(_0xc136('0x1'));var moment=require('moment');var BPromise=require(_0xc136('0x2'));var rs=require(_0xc136('0x3'));var fs=require('fs');var Redis=require(_0xc136('0x4'));var db=require(_0xc136('0x5'))['db'];var utils=require(_0xc136('0x6'));var logger=require(_0xc136('0x7'))(_0xc136('0x8'));var config=require(_0xc136('0x9'));var jayson=require(_0xc136('0xa'));var client=jayson['client'][_0xc136('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x594112,_0x361a52,_0x3993f2){return new BPromise(function(_0x1804c1,_0x500376){return client[_0xc136('0xc')](_0x594112,_0x3993f2)['then'](function(_0x1ea07d){logger[_0xc136('0xd')](_0xc136('0xe'),_0x361a52,_0xc136('0xf'));logger[_0xc136('0x10')](_0xc136('0x11'),_0x361a52,_0xc136('0xf'),JSON[_0xc136('0x12')](_0x1ea07d));if(_0x1ea07d[_0xc136('0x13')]){if(_0x1ea07d['error']['code']===0x1f4){logger[_0xc136('0x13')]('CmHopperHistory,\x20%s,\x20%s',_0x361a52,_0x1ea07d[_0xc136('0x13')][_0xc136('0x14')]);return _0x500376(_0x1ea07d[_0xc136('0x13')]['message']);}logger['error'](_0xc136('0xe'),_0x361a52,_0x1ea07d[_0xc136('0x13')][_0xc136('0x14')]);return _0x1804c1(_0x1ea07d['error']['message']);}else{logger[_0xc136('0xd')](_0xc136('0xe'),_0x361a52,'request\x20sent');_0x1804c1(_0x1ea07d['result']['message']);}})[_0xc136('0x15')](function(_0x3daf55){logger[_0xc136('0x13')](_0xc136('0xe'),_0x361a52,_0x3daf55);_0x500376(_0x3daf55);});});}exports[_0xc136('0x16')]=function(_0x1ccf5f){var _0x59503b=this;return new Promise(function(_0x5df9b7,_0x4d56cb){return db[_0xc136('0x17')]['create'](_0x1ccf5f[_0xc136('0x18')],{'raw':_0x1ccf5f[_0xc136('0x19')]?_0x1ccf5f[_0xc136('0x19')][_0xc136('0x1a')]===undefined?!![]:![]:!![]})['then'](function(_0x2b8527){logger[_0xc136('0xd')]('CreateCmHopperHistory',_0x1ccf5f);logger[_0xc136('0x10')]('CreateCmHopperHistory',_0x1ccf5f,JSON['stringify'](_0x2b8527));_0x5df9b7(_0x2b8527);})[_0xc136('0x15')](function(_0x1a350a){logger['error'](_0xc136('0x16'),_0x1a350a[_0xc136('0x14')],_0x1ccf5f);_0x4d56cb(_0x59503b[_0xc136('0x13')](0x1f4,_0x1a350a[_0xc136('0x14')]));});});};exports['AvgHandleTime']=function(_0x6f0831){var _0x27719e=this;return new Promise(function(_0x584706,_0x3432b0){return db['CmHopperHistory'][_0xc136('0x1b')]({'raw':_0x6f0831[_0xc136('0x19')]?_0x6f0831['options']['raw']===undefined?!![]:![]:!![],'where':_0x6f0831[_0xc136('0x19')]?_0x6f0831[_0xc136('0x19')]['where']||null:null,'attributes':[[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db[_0xc136('0x1c')][_0xc136('0x1e')]('id')),_0xc136('0x1f')],[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db['sequelize']['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')](_0xc136('0x21')))),_0xc136('0x22')],[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db[_0xc136('0x1c')]['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')]('`state`\x20=\x2010,\x201,\x20null'))),_0xc136('0x23')],[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db['sequelize']['fn']('IF',db[_0xc136('0x1c')]['literal']('`state`\x20=\x2011,\x201,\x20null'))),_0xc136('0x24')],[db[_0xc136('0x1c')]['fn'](_0xc136('0x25'),db['sequelize']['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')]('`state`\x20=\x204,\x20`holdtime`,\x20null'))),_0xc136('0x26')],[db[_0xc136('0x1c')]['fn']('AVG',db[_0xc136('0x1c')]['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')](_0xc136('0x27')))),_0xc136('0x28')]]})[_0xc136('0x29')](function(_0xdaf3f1){logger[_0xc136('0xd')](_0xc136('0x2a'),_0x6f0831);logger[_0xc136('0x10')](_0xc136('0x2a'),_0x6f0831,JSON[_0xc136('0x12')](_0xdaf3f1));_0x584706(_0xdaf3f1);})['catch'](function(_0x20d05a){logger[_0xc136('0x13')](_0xc136('0x2a'),_0x20d05a[_0xc136('0x14')],_0x6f0831);_0x3432b0(_0x27719e[_0xc136('0x13')](0x1f4,_0x20d05a[_0xc136('0x14')]));});});};exports[_0xc136('0x2b')]=function(_0x513984){var _0x1ea381=this;return new Promise(function(_0x33c54c,_0x33e35e){return db[_0xc136('0x17')][_0xc136('0x1b')]({'raw':_0x513984[_0xc136('0x19')]?_0x513984[_0xc136('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x513984[_0xc136('0x19')]?_0x513984[_0xc136('0x19')][_0xc136('0x2c')]||null:null,'attributes':[[_0xc136('0x2d'),_0xc136('0x2e')],[db['sequelize']['fn'](_0xc136('0x1d'),db[_0xc136('0x1c')]['fn']('IF',db['sequelize'][_0xc136('0x20')](_0xc136('0x2f')))),_0xc136('0x30')],[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db['sequelize']['fn']('IF',db['sequelize'][_0xc136('0x20')]('`state`\x20=\x203,\x201,\x20null'))),_0xc136('0x31')],[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db[_0xc136('0x1c')]['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')](_0xc136('0x21')))),'outboundAnswerCallsDay'],[db['sequelize']['fn'](_0xc136('0x1d'),db['sequelize']['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')]('`state`\x20=\x205,\x201,\x20null'))),_0xc136('0x32')],[db[_0xc136('0x1c')]['fn']('COUNT',db['sequelize']['fn']('IF',db['sequelize'][_0xc136('0x20')](_0xc136('0x33')))),'outboundCongestionCallsDay'],[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db[_0xc136('0x1c')]['fn']('IF',db['sequelize'][_0xc136('0x20')](_0xc136('0x34')))),_0xc136('0x35')],[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db['sequelize']['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')](_0xc136('0x36')))),_0xc136('0x37')],[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db[_0xc136('0x1c')]['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')](_0xc136('0x38')))),_0xc136('0x39')],[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db[_0xc136('0x1c')]['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')](_0xc136('0x3a')))),_0xc136('0x3b')],[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db['sequelize']['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')](_0xc136('0x3c')))),'outboundOriginateFailureCallsDay'],[db['sequelize']['fn'](_0xc136('0x1d'),db[_0xc136('0x1c')]['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')](_0xc136('0x3d')))),'outboundRejectCallsDay'],[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db[_0xc136('0x1c')]['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')](_0xc136('0x3e')))),_0xc136('0x3f')],[db['sequelize']['fn'](_0xc136('0x1d'),db[_0xc136('0x1c')]['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')]('`state`\x20=\x2020,\x201,\x20null'))),'outboundRejectCallsDay'],[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db['sequelize']['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')](_0xc136('0x40')))),_0xc136('0x41')]],'group':[_0xc136('0x2d')]})[_0xc136('0x29')](function(_0x2e91d2){logger[_0xc136('0xd')](_0xc136('0x2b'),_0x513984);logger[_0xc136('0x10')]('GetVoiceQueueHopperHistory',_0x513984,JSON['stringify'](_0x2e91d2));_0x33c54c(_0x2e91d2);})[_0xc136('0x15')](function(_0x297158){logger[_0xc136('0x13')](_0xc136('0x2b'),_0x297158[_0xc136('0x14')],_0x513984);_0x33e35e(_0x1ea381[_0xc136('0x13')](0x1f4,_0x297158[_0xc136('0x14')]));});});};exports[_0xc136('0x42')]=function(_0x5c532b){var _0x485f64=this;return new Promise(function(_0x56f636,_0x5cc9ce){return db[_0xc136('0x17')]['findAll']({'raw':_0x5c532b['options']?_0x5c532b[_0xc136('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x5c532b[_0xc136('0x19')]?_0x5c532b[_0xc136('0x19')]['where']||null:null,'attributes':[[_0xc136('0x2d'),_0xc136('0x2e')],[db[_0xc136('0x1c')]['fn']('COUNT',db['sequelize'][_0xc136('0x1e')]('id')),_0xc136('0x43')],[db[_0xc136('0x1c')]['fn'](_0xc136('0x1d'),db[_0xc136('0x1c')]['fn']('IF',db[_0xc136('0x1c')][_0xc136('0x20')](_0xc136('0x21')))),_0xc136('0x44')]],'group':[_0xc136('0x2d')]})[_0xc136('0x29')](function(_0x38c2a6){logger[_0xc136('0xd')](_0xc136('0x42'),_0x5c532b);logger[_0xc136('0x10')](_0xc136('0x42'),_0x5c532b,JSON[_0xc136('0x12')](_0x38c2a6));_0x56f636(_0x38c2a6);})[_0xc136('0x15')](function(_0x4360c4){logger[_0xc136('0x13')](_0xc136('0x42'),_0x4360c4['message'],_0x5c532b);_0x5cc9ce(_0x485f64['error'](0x1f4,_0x4360c4[_0xc136('0x14')]));});});};
\ No newline at end of file
index 35eec14..fe3f018 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdf98=['/:id','update','exports','multer','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmHopperHistory.controller','get','isAuthenticated','index','describe','show','create','put'];(function(_0x3b9b2e,_0x1d3afe){var _0x3e1a74=function(_0x1d5439){while(--_0x1d5439){_0x3b9b2e['push'](_0x3b9b2e['shift']());}};_0x3e1a74(++_0x1d3afe);}(_0xdf98,0xcf));var _0x8df9=function(_0x52e363,_0x48062a){_0x52e363=_0x52e363-0x0;var _0x3fc2b5=_0xdf98[_0x52e363];return _0x3fc2b5;};'use strict';var multer=require(_0x8df9('0x0'));var util=require('util');var path=require(_0x8df9('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x8df9('0x2')]();var auth=require(_0x8df9('0x3'));var interaction=require(_0x8df9('0x4'));var config=require(_0x8df9('0x5'));var controller=require(_0x8df9('0x6'));router[_0x8df9('0x7')]('/',auth[_0x8df9('0x8')](),controller[_0x8df9('0x9')]);router[_0x8df9('0x7')]('/describe',auth[_0x8df9('0x8')](),controller[_0x8df9('0xa')]);router[_0x8df9('0x7')]('/:id',auth['isAuthenticated'](),controller[_0x8df9('0xb')]);router['post']('/',auth[_0x8df9('0x8')](),controller[_0x8df9('0xc')]);router[_0x8df9('0xd')](_0x8df9('0xe'),auth[_0x8df9('0x8')](),controller[_0x8df9('0xf')]);module[_0x8df9('0x10')]=router;
\ No newline at end of file
+var _0x5419=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmHopperHistory.controller','isAuthenticated','index','get','/describe','describe','/:id','show','create','put','update','exports','multer','util','path','connect-timeout','express'];(function(_0x580576,_0x2f107d){var _0x3f55a0=function(_0x2e180b){while(--_0x2e180b){_0x580576['push'](_0x580576['shift']());}};_0x3f55a0(++_0x2f107d);}(_0x5419,0x175));var _0x9541=function(_0x28d2e5,_0x30179f){_0x28d2e5=_0x28d2e5-0x0;var _0x19372b=_0x5419[_0x28d2e5];return _0x19372b;};'use strict';var multer=require(_0x9541('0x0'));var util=require(_0x9541('0x1'));var path=require(_0x9541('0x2'));var timeout=require(_0x9541('0x3'));var express=require(_0x9541('0x4'));var router=express[_0x9541('0x5')]();var auth=require(_0x9541('0x6'));var interaction=require(_0x9541('0x7'));var config=require(_0x9541('0x8'));var controller=require(_0x9541('0x9'));router['get']('/',auth[_0x9541('0xa')](),controller[_0x9541('0xb')]);router[_0x9541('0xc')](_0x9541('0xd'),auth[_0x9541('0xa')](),controller[_0x9541('0xe')]);router[_0x9541('0xc')](_0x9541('0xf'),auth['isAuthenticated'](),controller[_0x9541('0x10')]);router['post']('/',auth[_0x9541('0xa')](),controller[_0x9541('0x11')]);router[_0x9541('0x12')](_0x9541('0xf'),auth[_0x9541('0xa')](),controller[_0x9541('0x13')]);module[_0x9541('0x14')]=router;
\ No newline at end of file
index a224ef1..d8f6f2f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['exports','STRING','name','sequelize'];(function(_0x1ae541,_0xf7f46f){var _0xf81bb1=function(_0x1ac58a){while(--_0x1ac58a){_0x1ae541['push'](_0x1ae541['shift']());}};_0xf81bb1(++_0xf7f46f);}(_0x9957,0x93));var _0x7995=function(_0xbca1b1,_0x33f0ce){_0xbca1b1=_0xbca1b1-0x0;var _0x4e1686=_0x9957[_0xbca1b1];return _0x4e1686;};'use strict';var Sequelize=require(_0x7995('0x0'));module[_0x7995('0x1')]={'name':{'type':Sequelize[_0x7995('0x2')],'unique':_0x7995('0x3'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize['STRING']},'dialPrefix':{'type':Sequelize[_0x7995('0x2')]}};
\ No newline at end of file
+var _0x326f=['name','STRING','sequelize'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0x326f,0xd1));var _0xf326=function(_0x3803cb,_0x274044){_0x3803cb=_0x3803cb-0x0;var _0x4d4578=_0x326f[_0x3803cb];return _0x4d4578;};'use strict';var Sequelize=require(_0xf326('0x0'));module['exports']={'name':{'type':Sequelize['STRING'],'unique':_0xf326('0x1'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0xf326('0x2')]},'dialPrefix':{'type':Sequelize[_0xf326('0x2')]}};
\ No newline at end of file
index d85391c..312b0ae 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x172e=['CmContact','tags','isArray','join','push','each','success','dataValues','errors','message','Malformed\x20request\x20syntax','CustomFields','concat','cf_%d','raw','getContacts','format','isEmpty','now','writeFileSync','/tmp/list_%d_%s.csv','setHeader','Content-disposition','Content-type','download','addCustomField','sequelize','transaction','CmCustomField','addCustomFields','Sequelize','TEXT','text','number','INTEGER','BOOLEAN','defaultValue','queryInterface','addColumn','cm_contacts','cf_%s','getCustomFields','findAndCountAll','addAgents','omit','spread','emit','userCmList:save','removeAgents','userCmList:remove','getAgents','User','rimraf','zip-dir','fast-json-patch','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','defaults','redis','./cmList.socket','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','then','destroy','get','Lists','UserProfileResource','error','stack','name','send','CmList','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','merge','type','field','filter','includeAll','include','show','params','options','find','catch','create','body','user','role','UserProfileSection','userProfileId','autoAssociation','describe','ListId','Disposition','getDispositions','findOne','nolimit','pick','map','findAll','rows','ids','addContacts'];(function(_0x5a7f64,_0x347d57){var _0x3d30f1=function(_0x4bd1d6){while(--_0x4bd1d6){_0x5a7f64['push'](_0x5a7f64['shift']());}};_0x3d30f1(++_0x347d57);}(_0x172e,0x150));var _0xe172=function(_0x3c6eb1,_0x3bcb78){_0x3c6eb1=_0x3c6eb1-0x0;var _0x4856ff=_0x172e[_0x3c6eb1];return _0x4856ff;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xe172('0x0'));var zipdir=require(_0xe172('0x1'));var jsonpatch=require(_0xe172('0x2'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xe172('0x3'));var Mustache=require(_0xe172('0x4'));var util=require(_0xe172('0x5'));var path=require(_0xe172('0x6'));var sox=require(_0xe172('0x7'));var csv=require(_0xe172('0x8'));var ejs=require(_0xe172('0x9'));var fs=require('fs');var _=require(_0xe172('0xa'));var squel=require('squel');var crypto=require(_0xe172('0xb'));var jsforce=require(_0xe172('0xc'));var deskjs=require(_0xe172('0xd'));var toCsv=require(_0xe172('0x8'));var querystring=require('querystring');var Papa=require(_0xe172('0xe'));var Redis=require('ioredis');var authService=require(_0xe172('0xf'));var qs=require(_0xe172('0x10'));var hardwareService=require(_0xe172('0x11'));var logger=require(_0xe172('0x12'))(_0xe172('0x13'));var utils=require(_0xe172('0x14'));var config=require(_0xe172('0x15'));var db=require('../../mysqldb')['db'];config['redis']=_[_0xe172('0x16')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xe172('0x17')]));require(_0xe172('0x18'))['register'](socket);function respondWithStatusCode(_0x2f8847,_0x59be50){_0x59be50=_0x59be50||0xcc;return function(_0x47591e){if(_0x47591e){return _0x2f8847[_0xe172('0x19')](_0x59be50);}return _0x2f8847[_0xe172('0x1a')](_0x59be50)[_0xe172('0x1b')]();};}function respondWithResult(_0x2a7eba,_0xf6c018){_0xf6c018=_0xf6c018||0xc8;return function(_0x373ccb){if(_0x373ccb){return _0x2a7eba[_0xe172('0x1a')](_0xf6c018)[_0xe172('0x1c')](_0x373ccb);}};}function respondWithFilteredResult(_0x39fd5e,_0x4cd728){return function(_0x3d826b){if(_0x3d826b){var _0x21418d=_0x3d826b[_0xe172('0x1d')],_0xd2497d=_0x4cd728[_0xe172('0x1e')],_0x2da2ac=_0x4cd728[_0xe172('0x1e')]+_0x4cd728[_0xe172('0x1f')],_0x2d0000;if(_0x2da2ac>=_0x21418d){_0x2da2ac=_0x21418d;_0x2d0000=0xc8;}else{_0x2d0000=0xce;}_0x39fd5e[_0xe172('0x1a')](_0x2d0000);return _0x39fd5e[_0xe172('0x20')](_0xe172('0x21'),_0xd2497d+'-'+_0x2da2ac+'/'+_0x21418d)[_0xe172('0x1c')](_0x3d826b);}return null;};}function patchUpdates(_0x51e336){return function(_0x29b2ef){try{jsonpatch['apply'](_0x29b2ef,_0x51e336,!![]);}catch(_0xf501ab){return BPromise[_0xe172('0x22')](_0xf501ab);}return _0x29b2ef[_0xe172('0x23')]();};}function saveUpdates(_0x222171,_0x39b61a){return function(_0x218c8b){if(_0x218c8b){return _0x218c8b[_0xe172('0x24')](_0x222171)[_0xe172('0x25')](function(_0x3a8ef4){return _0x3a8ef4;});}return null;};}function removeEntity(_0x505bf6,_0x2fa799){return function(_0x1f4178){if(_0x1f4178){return _0x1f4178[_0xe172('0x26')]()[_0xe172('0x25')](function(){var _0x2076d4=_0x1f4178[_0xe172('0x27')]({'plain':!![]});var _0x5c64d5=_0xe172('0x28');return db[_0xe172('0x29')][_0xe172('0x26')]({'where':{'type':_0x5c64d5,'resourceId':_0x2076d4['id']}})['then'](function(){return _0x1f4178;});})[_0xe172('0x25')](function(){_0x505bf6['status'](0xcc)[_0xe172('0x1b')]();});}};}function handleEntityNotFound(_0x297bb1,_0x452a0e){return function(_0x4e276c){if(!_0x4e276c){_0x297bb1[_0xe172('0x19')](0x194);}return _0x4e276c;};}function handleError(_0x489049,_0x591ace){_0x591ace=_0x591ace||0x1f4;return function(_0x2a18a0){logger[_0xe172('0x2a')](_0x2a18a0[_0xe172('0x2b')]);if(_0x2a18a0[_0xe172('0x2c')]){delete _0x2a18a0['name'];}_0x489049[_0xe172('0x1a')](_0x591ace)[_0xe172('0x2d')](_0x2a18a0);};}exports['index']=function(_0x5a838a,_0x4142c6){var _0x373a7b={},_0x4b41bc={},_0x251fde={'count':0x0,'rows':[]};var _0x1e0a10=db[_0xe172('0x2e')][_0xe172('0x2f')];_0x4b41bc[_0xe172('0x30')]=_[_0xe172('0x31')](_0x1e0a10);_0x4b41bc[_0xe172('0x32')]=_[_0xe172('0x31')](_0x5a838a[_0xe172('0x32')]);_0x4b41bc[_0xe172('0x33')]=_[_0xe172('0x34')](_0x4b41bc[_0xe172('0x30')],_0x4b41bc[_0xe172('0x32')]);_0x373a7b[_0xe172('0x35')]=_['intersection'](_0x4b41bc[_0xe172('0x30')],qs[_0xe172('0x36')](_0x5a838a[_0xe172('0x32')][_0xe172('0x36')]));_0x373a7b['attributes']=_0x373a7b['attributes'][_0xe172('0x37')]?_0x373a7b[_0xe172('0x35')]:_0x4b41bc['model'];if(!_0x5a838a['query'][_0xe172('0x38')]('nolimit')){_0x373a7b[_0xe172('0x1f')]=qs[_0xe172('0x1f')](_0x5a838a[_0xe172('0x32')]['limit']);_0x373a7b[_0xe172('0x1e')]=qs[_0xe172('0x1e')](_0x5a838a[_0xe172('0x32')][_0xe172('0x1e')]);}_0x373a7b[_0xe172('0x39')]=qs[_0xe172('0x3a')](_0x5a838a[_0xe172('0x32')][_0xe172('0x3a')]);_0x373a7b[_0xe172('0x3b')]=qs[_0xe172('0x33')](_['pick'](_0x5a838a[_0xe172('0x32')],_0x4b41bc['filters']));if(_0x5a838a[_0xe172('0x32')]['filter']){_0x373a7b[_0xe172('0x3b')]=_[_0xe172('0x3c')](_0x373a7b[_0xe172('0x3b')],{'$or':_['map'](_0x1e0a10,function(_0x4f7593){if(_0x4f7593[_0xe172('0x3d')]['key']!=='VIRTUAL'){var _0x16a2a1={};_0x16a2a1[_0x4f7593[_0xe172('0x3e')]]={'$like':'%'+_0x5a838a[_0xe172('0x32')][_0xe172('0x3f')]+'%'};return _0x16a2a1;}})});}_0x373a7b=_[_0xe172('0x3c')]({},_0x373a7b,_0x5a838a['options']);var _0x134d43={'where':_0x373a7b[_0xe172('0x3b')]};return db[_0xe172('0x2e')][_0xe172('0x1d')](_0x134d43)[_0xe172('0x25')](function(_0x30a3a4){_0x251fde[_0xe172('0x1d')]=_0x30a3a4;if(_0x5a838a[_0xe172('0x32')][_0xe172('0x40')]){_0x373a7b[_0xe172('0x41')]=[{'all':!![]}];}return db[_0xe172('0x2e')]['findAll'](_0x373a7b);})[_0xe172('0x25')](function(_0x43e817){_0x251fde['rows']=_0x43e817;return _0x251fde;})['then'](respondWithFilteredResult(_0x4142c6,_0x373a7b))['catch'](handleError(_0x4142c6,null));};exports[_0xe172('0x42')]=function(_0x1565a0,_0x46b30f){var _0x407d04={'raw':![],'where':{'id':_0x1565a0[_0xe172('0x43')]['id']}},_0x172ecb={};_0x172ecb[_0xe172('0x30')]=_['keys'](db[_0xe172('0x2e')][_0xe172('0x2f')]);_0x172ecb[_0xe172('0x32')]=_[_0xe172('0x31')](_0x1565a0[_0xe172('0x32')]);_0x172ecb['filters']=_[_0xe172('0x34')](_0x172ecb[_0xe172('0x30')],_0x172ecb[_0xe172('0x32')]);_0x407d04[_0xe172('0x35')]=_[_0xe172('0x34')](_0x172ecb[_0xe172('0x30')],qs[_0xe172('0x36')](_0x1565a0['query']['fields']));_0x407d04['attributes']=_0x407d04['attributes'][_0xe172('0x37')]?_0x407d04['attributes']:_0x172ecb[_0xe172('0x30')];if(_0x1565a0[_0xe172('0x32')]['includeAll']){_0x407d04['include']=[{'all':!![]}];}_0x407d04=_['merge']({},_0x407d04,_0x1565a0[_0xe172('0x44')]);return db[_0xe172('0x2e')][_0xe172('0x45')](_0x407d04)[_0xe172('0x25')](handleEntityNotFound(_0x46b30f,null))[_0xe172('0x25')](respondWithResult(_0x46b30f,null))[_0xe172('0x46')](handleError(_0x46b30f,null));};exports[_0xe172('0x47')]=function(_0x3229b6,_0x591b58){return db[_0xe172('0x2e')][_0xe172('0x47')](_0x3229b6[_0xe172('0x48')],{})[_0xe172('0x25')](function(_0xc9f5f8){var _0x1ce639=_0x3229b6[_0xe172('0x49')][_0xe172('0x27')]({'plain':!![]});if(!_0x1ce639)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x1ce639[_0xe172('0x4a')]===_0xe172('0x49')){var _0x498233=_0xc9f5f8[_0xe172('0x27')]({'plain':!![]});var _0x1720b9=_0xe172('0x28');return db[_0xe172('0x4b')]['find']({'where':{'name':_0x1720b9,'userProfileId':_0x1ce639[_0xe172('0x4c')]},'raw':!![]})[_0xe172('0x25')](function(_0x290985){if(_0x290985&&_0x290985[_0xe172('0x4d')]===0x0){return db[_0xe172('0x29')][_0xe172('0x47')]({'name':_0x498233[_0xe172('0x2c')],'resourceId':_0x498233['id'],'type':_0x290985[_0xe172('0x2c')],'sectionId':_0x290985['id']},{})[_0xe172('0x25')](function(){return _0xc9f5f8;});}else{return _0xc9f5f8;}})[_0xe172('0x46')](function(_0x4d0fc6){logger[_0xe172('0x2a')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x4d0fc6);throw _0x4d0fc6;});}return _0xc9f5f8;})[_0xe172('0x25')](respondWithResult(_0x591b58,0xc9))[_0xe172('0x46')](handleError(_0x591b58,null));};exports[_0xe172('0x24')]=function(_0x3dcd62,_0xe4e8b){if(_0x3dcd62[_0xe172('0x48')]['id']){delete _0x3dcd62['body']['id'];}return db[_0xe172('0x2e')][_0xe172('0x45')]({'where':{'id':_0x3dcd62[_0xe172('0x43')]['id']}})[_0xe172('0x25')](handleEntityNotFound(_0xe4e8b,null))['then'](saveUpdates(_0x3dcd62[_0xe172('0x48')],null))[_0xe172('0x25')](respondWithResult(_0xe4e8b,null))[_0xe172('0x46')](handleError(_0xe4e8b,null));};exports['destroy']=function(_0x4725d9,_0x3f5164){return db[_0xe172('0x2e')][_0xe172('0x45')]({'where':{'id':_0x4725d9[_0xe172('0x43')]['id']}})[_0xe172('0x25')](handleEntityNotFound(_0x3f5164,null))[_0xe172('0x25')](removeEntity(_0x3f5164,null))[_0xe172('0x46')](handleError(_0x3f5164,null));};exports[_0xe172('0x4e')]=function(_0x16dc70,_0x5bb048){return db[_0xe172('0x2e')][_0xe172('0x4e')]()['then'](respondWithResult(_0x5bb048,null))['catch'](handleError(_0x5bb048,null));};exports['addDisposition']=function(_0x1ee3c1,_0x5ac6d8,_0x1204b6){if(_0x1ee3c1['body']['id']){delete _0x1ee3c1['body']['id'];}return db[_0xe172('0x2e')][_0xe172('0x45')]({'where':{'id':_0x1ee3c1[_0xe172('0x43')]['id']}})[_0xe172('0x25')](handleEntityNotFound(_0x5ac6d8,null))[_0xe172('0x25')](function(_0x5893be){if(_0x5893be){_0x1ee3c1[_0xe172('0x48')][_0xe172('0x4f')]=_0x5893be['id'];return db[_0xe172('0x50')][_0xe172('0x47')](_0x1ee3c1[_0xe172('0x48')]);}})['then'](respondWithResult(_0x5ac6d8,null))[_0xe172('0x46')](handleError(_0x5ac6d8,null));};exports[_0xe172('0x51')]=function(_0x1646a2,_0x60a8df,_0x27011e){var _0x19dab5={'raw':![],'where':{}};var _0x1260e8={};var _0x5420af={'count':0x0,'rows':[]};return db[_0xe172('0x2e')][_0xe172('0x52')]({'where':{'id':_0x1646a2['params']['id']}})[_0xe172('0x25')](handleEntityNotFound(_0x60a8df,null))[_0xe172('0x25')](function(_0x3112f8){if(_0x3112f8){_0x1260e8[_0xe172('0x30')]=_[_0xe172('0x31')](db['Disposition']['rawAttributes']);_0x1260e8[_0xe172('0x32')]=_[_0xe172('0x31')](_0x1646a2[_0xe172('0x32')]);_0x1260e8['filters']=_[_0xe172('0x34')](_0x1260e8['model'],_0x1260e8[_0xe172('0x32')]);_0x19dab5[_0xe172('0x35')]=_[_0xe172('0x34')](_0x1260e8['model'],qs[_0xe172('0x36')](_0x1646a2[_0xe172('0x32')][_0xe172('0x36')]));_0x19dab5[_0xe172('0x35')]=_0x19dab5['attributes'][_0xe172('0x37')]?_0x19dab5[_0xe172('0x35')]:_0x1260e8['model'];if(!_0x1646a2['query'][_0xe172('0x38')](_0xe172('0x53'))){_0x19dab5[_0xe172('0x1f')]=qs[_0xe172('0x1f')](_0x1646a2[_0xe172('0x32')][_0xe172('0x1f')]);_0x19dab5['offset']=qs[_0xe172('0x1e')](_0x1646a2[_0xe172('0x32')][_0xe172('0x1e')]);}_0x19dab5[_0xe172('0x39')]=qs[_0xe172('0x3a')](_0x1646a2['query'][_0xe172('0x3a')]);_0x19dab5[_0xe172('0x3b')]=qs['filters'](_[_0xe172('0x54')](_0x1646a2[_0xe172('0x32')],_0x1260e8[_0xe172('0x33')]));_0x19dab5['where']['ListId']=_0x3112f8['id'];if(_0x1646a2[_0xe172('0x32')]['filter']){_0x19dab5['where']=_[_0xe172('0x3c')](_0x19dab5[_0xe172('0x3b')],{'$or':_[_0xe172('0x55')](_0x19dab5[_0xe172('0x35')],function(_0x433136){var _0x581a80={};_0x581a80[_0x433136]={'$like':'%'+_0x1646a2[_0xe172('0x32')]['filter']+'%'};return _0x581a80;})});}_0x19dab5=_['merge']({},_0x19dab5,_0x1646a2[_0xe172('0x44')]);return db[_0xe172('0x50')][_0xe172('0x1d')]({'where':_0x19dab5[_0xe172('0x3b')]})[_0xe172('0x25')](function(_0x13f7cc){_0x5420af[_0xe172('0x1d')]=_0x13f7cc;if(_0x1646a2[_0xe172('0x32')]['includeAll']){_0x19dab5['include']=[{'all':!![]}];}return db[_0xe172('0x50')][_0xe172('0x56')](_0x19dab5);})[_0xe172('0x25')](function(_0x1e3247){_0x5420af[_0xe172('0x57')]=_0x1e3247;return _0x5420af;});}})[_0xe172('0x25')](respondWithFilteredResult(_0x60a8df,_0x19dab5))[_0xe172('0x46')](handleError(_0x60a8df,null));};exports['removeDispositions']=function(_0x5d63fd,_0x51da47,_0x389ba7){return db[_0xe172('0x2e')]['find']({'where':{'id':_0x5d63fd[_0xe172('0x43')]['id']}})[_0xe172('0x25')](handleEntityNotFound(_0x51da47,null))[_0xe172('0x25')](function(_0xd9eb21){if(_0xd9eb21){return _0xd9eb21['removeDispositions'](_0x5d63fd[_0xe172('0x32')][_0xe172('0x58')]);}})[_0xe172('0x25')](respondWithStatusCode(_0x51da47,null))[_0xe172('0x46')](handleError(_0x51da47,null));};exports[_0xe172('0x59')]=function(_0x28f1ec,_0x55c726,_0x131cc3){return db[_0xe172('0x2e')][_0xe172('0x45')]({'where':{'id':_0x28f1ec[_0xe172('0x43')]['id']}})[_0xe172('0x25')](handleEntityNotFound(_0x55c726,null))[_0xe172('0x25')](function(_0x4abd33){if(_0x4abd33){var _0x573d2e=[];var _0x23b929={'success':[],'errors':[]};return db[_0xe172('0x5a')][_0xe172('0x4e')]()['then'](function(_0x490328){if(_0x28f1ec[_0xe172('0x48')][_0xe172('0x5b')]&&_[_0xe172('0x5c')](_0x28f1ec[_0xe172('0x48')][_0xe172('0x5b')])){if(_0x28f1ec[_0xe172('0x48')][_0xe172('0x5b')][_0xe172('0x37')]){_0x28f1ec[_0xe172('0x48')][_0xe172('0x5b')]=_0x28f1ec[_0xe172('0x48')][_0xe172('0x5b')][_0xe172('0x5d')](';')+';';}else{_0x28f1ec['body']['tags']=null;}}else{_0x28f1ec[_0xe172('0x48')][_0xe172('0x5b')]=null;}if(_0x28f1ec[_0xe172('0x48')]&&_[_0xe172('0x5c')](_0x28f1ec[_0xe172('0x48')])){for(var _0x5a7f55=0x0;_0x5a7f55<_0x28f1ec[_0xe172('0x48')][_0xe172('0x37')];_0x5a7f55+=0x1){_0x28f1ec[_0xe172('0x48')][_0x5a7f55][_0xe172('0x4f')]=_0x28f1ec['params']['id'];_0x573d2e[_0xe172('0x5e')](_0x28f1ec[_0xe172('0x48')][_0x5a7f55]);}return BPromise[_0xe172('0x5f')](_0x573d2e,function(_0x31f5ec){return db[_0xe172('0x5a')][_0xe172('0x47')](_['omit'](_0x31f5ec,[_0xe172('0x58'),'id'])||{},{'fields':_['keys'](_0x490328),'raw':!![]})[_0xe172('0x25')](function(_0x5b9784){_0x23b929[_0xe172('0x60')][_0xe172('0x5e')](_0x5b9784[_0xe172('0x61')]);})[_0xe172('0x46')](function(_0x5d9d66){_0x23b929[_0xe172('0x62')][_0xe172('0x5e')]({'data':_0x31f5ec,'error':_0x5d9d66[_0xe172('0x63')]});});})[_0xe172('0x25')](function(_0x1592a6){return _0x23b929;})[_0xe172('0x46')](function(_0x217f15){return _0x217f15;});}else{_0x55c726[_0xe172('0x1a')](0x190)[_0xe172('0x1c')]({'message':_0xe172('0x64')});}});}})[_0xe172('0x25')](respondWithResult(_0x55c726,null))[_0xe172('0x46')](handleError(_0x55c726,null));};exports['getContacts']=function(_0x1a3e28,_0x4aa13e,_0x35ca77){var _0x57bac4;return db['CmList'][_0xe172('0x45')]({'where':{'id':_0x1a3e28[_0xe172('0x43')]['id']},'include':[{'model':db['CmCustomField'],'as':_0xe172('0x65')}]})[_0xe172('0x25')](handleEntityNotFound(_0x4aa13e,null))[_0xe172('0x25')](function(_0x44d442){if(_0x44d442){_0x57bac4=_0x44d442;return db[_0xe172('0x5a')]['rawAttributes'];}})[_0xe172('0x25')](function(_0x4c8d04){if(_0x4c8d04){var _0xbe1cf={};var _0x3927ee={};_0x3927ee['model']=_[_0xe172('0x66')](_['keys'](_0x4c8d04),_[_0xe172('0x55')](_0x57bac4[_0xe172('0x65')],function(_0x19d01c){return util['format'](_0xe172('0x67'),_0x19d01c['id']);}));_0x3927ee[_0xe172('0x32')]=_['keys'](_0x1a3e28['query']);_0x3927ee[_0xe172('0x33')]=_[_0xe172('0x34')](_0x3927ee[_0xe172('0x30')],_0x3927ee['query']);_0xbe1cf[_0xe172('0x35')]=_[_0xe172('0x34')](_0x3927ee[_0xe172('0x30')],qs[_0xe172('0x36')](_0x1a3e28[_0xe172('0x32')]['fields']));_0xbe1cf['attributes']=_0xbe1cf['attributes'][_0xe172('0x37')]?_0xbe1cf[_0xe172('0x35')]:_0x3927ee['model'];if(!_0x1a3e28[_0xe172('0x32')][_0xe172('0x38')](_0xe172('0x53'))){_0xbe1cf[_0xe172('0x1f')]=qs[_0xe172('0x1f')](_0x1a3e28[_0xe172('0x32')][_0xe172('0x1f')]);_0xbe1cf[_0xe172('0x1e')]=qs[_0xe172('0x1e')](_0x1a3e28[_0xe172('0x32')][_0xe172('0x1e')]);}_0xbe1cf['order']=qs[_0xe172('0x3a')](_0x1a3e28['query'][_0xe172('0x3a')]);_0xbe1cf['where']=qs[_0xe172('0x33')](_[_0xe172('0x54')](_0x1a3e28['query'],_0x3927ee[_0xe172('0x33')]));_0xbe1cf[_0xe172('0x68')]=!![];if(_0x1a3e28['query']['filter']){_0xbe1cf[_0xe172('0x3b')]=_[_0xe172('0x3c')](_0xbe1cf[_0xe172('0x3b')],{'$or':_[_0xe172('0x55')](_0xbe1cf[_0xe172('0x35')],function(_0x4fbc84){var _0x4100ef={};_0x4100ef[_0x4fbc84]={'$like':'%'+_0x1a3e28[_0xe172('0x32')][_0xe172('0x3f')]+'%'};return _0x4100ef;})});}_0xbe1cf=_[_0xe172('0x3c')]({},_0xbe1cf,_0x1a3e28['options']);return _0x57bac4[_0xe172('0x69')](_0xbe1cf);}})[_0xe172('0x25')](respondWithResult(_0x4aa13e,null))['catch'](handleError(_0x4aa13e,null));};exports['getContactsCsv']=function(_0x28b6b0,_0x5c6a98,_0x20d75c){var _0x5c85a3;return db[_0xe172('0x2e')][_0xe172('0x45')]({'where':{'id':_0x28b6b0[_0xe172('0x43')]['id']},'include':[{'model':db['CmCustomField'],'as':'CustomFields'}]})['then'](handleEntityNotFound(_0x5c6a98,null))['then'](function(_0x22d123){if(_0x22d123){_0x5c85a3=_0x22d123;return db[_0xe172('0x5a')]['rawAttributes'];}})[_0xe172('0x25')](function(_0x386606){if(_0x386606){var _0x2d7695={};var _0x15ad37={};_0x15ad37['model']=_[_0xe172('0x66')](_[_0xe172('0x31')](_0x386606),_[_0xe172('0x55')](_0x5c85a3['CustomFields'],function(_0x50d495){return util[_0xe172('0x6a')](_0xe172('0x67'),_0x50d495['id']);}));_0x15ad37[_0xe172('0x32')]=_[_0xe172('0x31')](_0x28b6b0[_0xe172('0x32')]);_0x15ad37[_0xe172('0x33')]=_[_0xe172('0x34')](_0x15ad37[_0xe172('0x30')],_0x15ad37[_0xe172('0x32')]);_0x2d7695[_0xe172('0x35')]=_['intersection'](_0x15ad37[_0xe172('0x30')],qs['fields'](_0x28b6b0[_0xe172('0x32')][_0xe172('0x36')]));_0x2d7695[_0xe172('0x35')]=_0x2d7695[_0xe172('0x35')]['length']?_0x2d7695[_0xe172('0x35')]:_0x15ad37[_0xe172('0x30')];if(!_0x28b6b0[_0xe172('0x32')][_0xe172('0x38')]('nolimit')){_0x2d7695['limit']=qs[_0xe172('0x1f')](_0x28b6b0[_0xe172('0x32')][_0xe172('0x1f')]);_0x2d7695[_0xe172('0x1e')]=qs[_0xe172('0x1e')](_0x28b6b0['query']['offset']);}_0x2d7695[_0xe172('0x39')]=qs[_0xe172('0x3a')](_0x28b6b0[_0xe172('0x32')][_0xe172('0x3a')]);_0x2d7695[_0xe172('0x3b')]=qs[_0xe172('0x33')](_[_0xe172('0x54')](_0x28b6b0[_0xe172('0x32')],_0x15ad37[_0xe172('0x33')]));_0x2d7695[_0xe172('0x68')]=!![];if(_0x28b6b0[_0xe172('0x32')][_0xe172('0x3f')]){_0x2d7695[_0xe172('0x3b')]=_['merge'](_0x2d7695[_0xe172('0x3b')],{'$or':_[_0xe172('0x55')](_0x2d7695['attributes'],function(_0x4eca33){var _0x13e137={};_0x13e137[_0x4eca33]={'$like':'%'+_0x28b6b0['query']['filter']+'%'};return _0x13e137;})});}_0x2d7695=_[_0xe172('0x3c')]({},_0x2d7695,_0x28b6b0['options']);return _0x5c85a3[_0xe172('0x69')](_0x2d7695);}})[_0xe172('0x25')](function(_0x41f8ea){if(!_[_0xe172('0x6b')](_0x41f8ea)){var _0x4c2881=toCsv(_0x41f8ea);var _0x8f0847=Date[_0xe172('0x6c')]();fs[_0xe172('0x6d')](util['format'](_0xe172('0x6e'),_0x5c85a3['id'],_0x8f0847),_0x4c2881);_0x5c6a98[_0xe172('0x6f')](_0xe172('0x70'),'attachment;\x20filename='+util[_0xe172('0x6a')]('list_%d_%s.csv',_0x5c85a3['id'],_0x8f0847));_0x5c6a98[_0xe172('0x6f')](_0xe172('0x71'),'text/csv');return _0x5c6a98[_0xe172('0x72')](util[_0xe172('0x6a')](_0xe172('0x6e'),_0x5c85a3['id'],_0x8f0847));}else{return _0x5c6a98[_0xe172('0x19')](0xcc);}})['catch'](handleError(_0x5c6a98,null));};exports[_0xe172('0x73')]=function(_0x20d8a3,_0x3b68cf,_0x3bf935){var _0x3339e2;delete _0x20d8a3[_0xe172('0x48')]['id'];return db[_0xe172('0x2e')][_0xe172('0x52')]({'where':{'id':_0x20d8a3[_0xe172('0x43')]['id']}})['then'](handleEntityNotFound(_0x3b68cf,null))[_0xe172('0x25')](function(_0x6ebc93){if(_0x6ebc93){return db[_0xe172('0x74')][_0xe172('0x75')](function(_0x41f26e){return db[_0xe172('0x76')][_0xe172('0x47')](_0x20d8a3['body'],{'transaction':_0x41f26e})['then'](function(_0x12e43a){_0x3339e2=_0x12e43a;return _0x6ebc93[_0xe172('0x77')](_0x12e43a,{'transaction':_0x41f26e});})[_0xe172('0x25')](function(){var _0x44e917={'type':db[_0xe172('0x78')][_0xe172('0x79')],'transaction':_0x41f26e};switch(_0x20d8a3[_0xe172('0x48')]['type']){case _0xe172('0x7a'):_0x44e917[_0xe172('0x3d')]=db['Sequelize'][_0xe172('0x79')];break;case _0xe172('0x7b'):_0x44e917['type']=db[_0xe172('0x78')][_0xe172('0x7c')];break;case'switch':_0x44e917[_0xe172('0x3d')]=db[_0xe172('0x78')][_0xe172('0x7d')];_0x44e917[_0xe172('0x7e')]=![];break;default:}return db['sequelize'][_0xe172('0x7f')][_0xe172('0x80')](_0xe172('0x81'),util[_0xe172('0x6a')](_0xe172('0x82'),_0x3339e2['id']),_0x44e917);})[_0xe172('0x25')](function(){return _0x3339e2;});});}})['then'](respondWithResult(_0x3b68cf,null))[_0xe172('0x46')](handleError(_0x3b68cf,null));};exports[_0xe172('0x83')]=function(_0x2b1587,_0x3a5a24,_0x304301){var _0xe20bcc={};var _0x354221={};var _0x18803d;var _0x55af0a;return db['CmList'][_0xe172('0x52')]({'where':{'id':_0x2b1587[_0xe172('0x43')]['id']}})[_0xe172('0x25')](handleEntityNotFound(_0x3a5a24,null))[_0xe172('0x25')](function(_0x12c4aa){if(_0x12c4aa){_0x18803d=_0x12c4aa;_0x354221[_0xe172('0x30')]=_['keys'](db[_0xe172('0x76')][_0xe172('0x2f')]);_0x354221[_0xe172('0x32')]=_[_0xe172('0x31')](_0x2b1587[_0xe172('0x32')]);_0x354221[_0xe172('0x33')]=_[_0xe172('0x34')](_0x354221[_0xe172('0x30')],_0x354221['query']);_0xe20bcc[_0xe172('0x35')]=_[_0xe172('0x34')](_0x354221['model'],qs[_0xe172('0x36')](_0x2b1587[_0xe172('0x32')][_0xe172('0x36')]));_0xe20bcc[_0xe172('0x35')]=_0xe20bcc[_0xe172('0x35')]['length']?_0xe20bcc['attributes']:_0x354221[_0xe172('0x30')];_0xe20bcc[_0xe172('0x39')]=qs[_0xe172('0x3a')](_0x2b1587[_0xe172('0x32')][_0xe172('0x3a')]);_0xe20bcc[_0xe172('0x3b')]=qs[_0xe172('0x33')](_['pick'](_0x2b1587['query'],_0x354221['filters']));_0xe20bcc[_0xe172('0x3b')]=_[_0xe172('0x3c')](_0xe20bcc['where'],{'$or':[{'ListId':_0x12c4aa['id']},{'ListId':null}]});if(_0x2b1587['query'][_0xe172('0x3f')]){_0xe20bcc[_0xe172('0x3b')]=_[_0xe172('0x3c')](_0xe20bcc['where'],{'$or':_[_0xe172('0x55')](_0xe20bcc[_0xe172('0x35')],function(_0x3c8baf){var _0xc6ef5a={};_0xc6ef5a[_0x3c8baf]={'$like':'%'+_0x2b1587['query'][_0xe172('0x3f')]+'%'};return _0xc6ef5a;})});}_0xe20bcc=_[_0xe172('0x3c')]({},_0xe20bcc,_0x2b1587[_0xe172('0x44')]);return db[_0xe172('0x76')][_0xe172('0x84')](_0xe20bcc);}})[_0xe172('0x25')](respondWithResult(_0x3a5a24,null))['catch'](handleError(_0x3a5a24,null));};exports[_0xe172('0x85')]=function(_0x4b29ba,_0x1195a8,_0xbcac17){return db[_0xe172('0x2e')][_0xe172('0x45')]({'where':{'id':_0x4b29ba[_0xe172('0x43')]['id']}})[_0xe172('0x25')](handleEntityNotFound(_0x1195a8,null))[_0xe172('0x25')](function(_0x4b16d2){if(_0x4b16d2){return _0x4b16d2['addAgents'](_0x4b29ba[_0xe172('0x48')][_0xe172('0x58')],_[_0xe172('0x86')](_0x4b29ba[_0xe172('0x48')],[_0xe172('0x58'),'id'])||{})[_0xe172('0x87')](function(_0x1f2c1e){for(var _0x5b69f2=0x0;_0x5b69f2<_0x4b29ba['body'][_0xe172('0x58')][_0xe172('0x37')];_0x5b69f2+=0x1){socket[_0xe172('0x88')](_0xe172('0x89'),{'UserId':_0x4b29ba[_0xe172('0x48')]['ids'][_0x5b69f2],'CmListId':_0x4b29ba[_0xe172('0x43')]['id']});}return _0x1f2c1e;});}})['then'](respondWithResult(_0x1195a8,null))[_0xe172('0x46')](handleError(_0x1195a8,null));};exports[_0xe172('0x8a')]=function(_0xb22f3a,_0x380cd9,_0xf19a45){return db['CmList']['find']({'where':{'id':_0xb22f3a[_0xe172('0x43')]['id']}})[_0xe172('0x25')](handleEntityNotFound(_0x380cd9,null))['then'](function(_0x39ba84){if(_0x39ba84){return _0x39ba84[_0xe172('0x8a')](_0xb22f3a[_0xe172('0x32')]['ids'])['then'](function(){if(_[_0xe172('0x5c')](_0xb22f3a['query'][_0xe172('0x58')])){for(var _0x4f45ef=0x0;_0x4f45ef<_0xb22f3a[_0xe172('0x32')][_0xe172('0x58')]['length'];_0x4f45ef+=0x1){socket[_0xe172('0x88')]('userCmList:remove',{'UserId':Number(_0xb22f3a[_0xe172('0x32')]['ids'][_0x4f45ef]),'CmListId':Number(_0xb22f3a['params']['id'])});}}else{socket[_0xe172('0x88')](_0xe172('0x8b'),{'UserId':Number(_0xb22f3a['query']['ids']),'CmListId':Number(_0xb22f3a[_0xe172('0x43')]['id'])});}});}})[_0xe172('0x25')](respondWithStatusCode(_0x380cd9,null))[_0xe172('0x46')](handleError(_0x380cd9,null));};exports[_0xe172('0x8c')]=function(_0x354380,_0x362b64,_0x36cb38){var _0x17b5fe={};var _0x55ef05={};var _0x19ccfb;var _0x326a54;return db[_0xe172('0x2e')][_0xe172('0x52')]({'where':{'id':_0x354380[_0xe172('0x43')]['id']}})['then'](handleEntityNotFound(_0x362b64,null))[_0xe172('0x25')](function(_0x2afd65){if(_0x2afd65){_0x19ccfb=_0x2afd65;_0x55ef05[_0xe172('0x30')]=_[_0xe172('0x31')](db[_0xe172('0x8d')][_0xe172('0x2f')]);_0x55ef05[_0xe172('0x32')]=_[_0xe172('0x31')](_0x354380[_0xe172('0x32')]);_0x55ef05[_0xe172('0x33')]=_['intersection'](_0x55ef05[_0xe172('0x30')],_0x55ef05[_0xe172('0x32')]);_0x17b5fe[_0xe172('0x35')]=_[_0xe172('0x34')](_0x55ef05[_0xe172('0x30')],qs[_0xe172('0x36')](_0x354380[_0xe172('0x32')][_0xe172('0x36')]));_0x17b5fe[_0xe172('0x35')]=_0x17b5fe[_0xe172('0x35')][_0xe172('0x37')]?_0x17b5fe['attributes']:_0x55ef05['model'];_0x17b5fe['order']=qs[_0xe172('0x3a')](_0x354380[_0xe172('0x32')]['sort']);_0x17b5fe['where']=qs[_0xe172('0x33')](_[_0xe172('0x54')](_0x354380[_0xe172('0x32')],_0x55ef05[_0xe172('0x33')]));if(_0x354380[_0xe172('0x32')][_0xe172('0x3f')]){_0x17b5fe[_0xe172('0x3b')]=_[_0xe172('0x3c')](_0x17b5fe[_0xe172('0x3b')],{'$or':_[_0xe172('0x55')](_0x17b5fe['attributes'],function(_0xd1da4f){var _0x3edb5b={};_0x3edb5b[_0xd1da4f]={'$like':'%'+_0x354380['query'][_0xe172('0x3f')]+'%'};return _0x3edb5b;})});}_0x17b5fe=_[_0xe172('0x3c')]({},_0x17b5fe,_0x354380[_0xe172('0x44')]);return _0x19ccfb[_0xe172('0x8c')](_0x17b5fe);}})['then'](function(_0x1cdd3f){if(_0x1cdd3f){_0x326a54=_0x1cdd3f[_0xe172('0x37')];if(!_0x354380[_0xe172('0x32')][_0xe172('0x38')](_0xe172('0x53'))){_0x17b5fe[_0xe172('0x1f')]=qs[_0xe172('0x1f')](_0x354380[_0xe172('0x32')]['limit']);_0x17b5fe[_0xe172('0x1e')]=qs['offset'](_0x354380[_0xe172('0x32')][_0xe172('0x1e')]);}return _0x19ccfb['getAgents'](_0x17b5fe);}})['then'](function(_0xd5885c){if(_0xd5885c){return _0xd5885c?{'count':_0x326a54,'rows':_0xd5885c}:null;}})[_0xe172('0x25')](respondWithResult(_0x362b64,null))[_0xe172('0x46')](handleError(_0x362b64,null));};
\ No newline at end of file
+var _0x675a=['removeAgents','userCmList:remove','getAgents','User','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/environment','localhost','redis','sendStatus','status','end','json','count','offset','set','reject','update','then','get','Lists','UserProfileResource','destroy','error','stack','name','send','index','CmList','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','merge','where','map','type','filter','options','include','findAll','rows','catch','show','rawAttributes','includeAll','find','create','body','user','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','describe','ListId','Disposition','removeDispositions','CmContact','tags','isArray','join','push','each','ids','success','dataValues','errors','Malformed\x20request\x20syntax','getContacts','CmCustomField','CustomFields','format','cf_%d','getContactsCsv','setHeader','Content-disposition','attachment;\x20filename=','Content-type','download','addCustomField','sequelize','transaction','Sequelize','TEXT','text','number','INTEGER','switch','BOOLEAN','defaultValue','queryInterface','addColumn','getCustomFields','findOne','addAgents','spread','emit'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x675a,0xfe));var _0xa675=function(_0x312944,_0x594eba){_0x312944=_0x312944-0x0;var _0x996a46=_0x675a[_0x312944];return _0x996a46;};'use strict';var pdf=require(_0xa675('0x0'));var emlformat=require(_0xa675('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xa675('0x2'));var jsonpatch=require(_0xa675('0x3'));var rp=require(_0xa675('0x4'));var moment=require('moment');var BPromise=require(_0xa675('0x5'));var Mustache=require(_0xa675('0x6'));var util=require(_0xa675('0x7'));var path=require('path');var sox=require('sox');var csv=require(_0xa675('0x8'));var ejs=require(_0xa675('0x9'));var fs=require('fs');var _=require(_0xa675('0xa'));var squel=require(_0xa675('0xb'));var crypto=require(_0xa675('0xc'));var jsforce=require(_0xa675('0xd'));var deskjs=require('desk.js');var toCsv=require(_0xa675('0x8'));var querystring=require(_0xa675('0xe'));var Papa=require('papaparse');var Redis=require(_0xa675('0xf'));var authService=require(_0xa675('0x10'));var qs=require(_0xa675('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xa675('0x12'));var utils=require('../../config/utils');var config=require(_0xa675('0x13'));var db=require('../../mysqldb')['db'];config['redis']=_['defaults'](config['redis'],{'host':_0xa675('0x14'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xa675('0x15')]));require('./cmList.socket')['register'](socket);function respondWithStatusCode(_0x54504b,_0x55c32e){_0x55c32e=_0x55c32e||0xcc;return function(_0x1f0722){if(_0x1f0722){return _0x54504b[_0xa675('0x16')](_0x55c32e);}return _0x54504b[_0xa675('0x17')](_0x55c32e)[_0xa675('0x18')]();};}function respondWithResult(_0x329e21,_0x3c893d){_0x3c893d=_0x3c893d||0xc8;return function(_0x5a4f80){if(_0x5a4f80){return _0x329e21[_0xa675('0x17')](_0x3c893d)[_0xa675('0x19')](_0x5a4f80);}};}function respondWithFilteredResult(_0x31170c,_0x8d9fd3){return function(_0x152e13){if(_0x152e13){var _0x27b1bc=_0x152e13[_0xa675('0x1a')],_0x4e50fe=_0x8d9fd3['offset'],_0x5dd40e=_0x8d9fd3[_0xa675('0x1b')]+_0x8d9fd3['limit'],_0x4f1a21;if(_0x5dd40e>=_0x27b1bc){_0x5dd40e=_0x27b1bc;_0x4f1a21=0xc8;}else{_0x4f1a21=0xce;}_0x31170c[_0xa675('0x17')](_0x4f1a21);return _0x31170c[_0xa675('0x1c')]('Content-Range',_0x4e50fe+'-'+_0x5dd40e+'/'+_0x27b1bc)[_0xa675('0x19')](_0x152e13);}return null;};}function patchUpdates(_0x186946){return function(_0x44e812){try{jsonpatch['apply'](_0x44e812,_0x186946,!![]);}catch(_0x3f8f92){return BPromise[_0xa675('0x1d')](_0x3f8f92);}return _0x44e812['save']();};}function saveUpdates(_0x1bdb54,_0x3c6605){return function(_0x2797d5){if(_0x2797d5){return _0x2797d5[_0xa675('0x1e')](_0x1bdb54)['then'](function(_0x2dcd5d){return _0x2dcd5d;});}return null;};}function removeEntity(_0x51505c,_0x32ea23){return function(_0x160c7b){if(_0x160c7b){return _0x160c7b['destroy']()[_0xa675('0x1f')](function(){var _0x1c9010=_0x160c7b[_0xa675('0x20')]({'plain':!![]});var _0x3b51de=_0xa675('0x21');return db[_0xa675('0x22')][_0xa675('0x23')]({'where':{'type':_0x3b51de,'resourceId':_0x1c9010['id']}})[_0xa675('0x1f')](function(){return _0x160c7b;});})[_0xa675('0x1f')](function(){_0x51505c['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x5dae7f,_0x213407){return function(_0x4447a5){if(!_0x4447a5){_0x5dae7f['sendStatus'](0x194);}return _0x4447a5;};}function handleError(_0x2ed870,_0x4c1075){_0x4c1075=_0x4c1075||0x1f4;return function(_0x477450){logger[_0xa675('0x24')](_0x477450[_0xa675('0x25')]);if(_0x477450[_0xa675('0x26')]){delete _0x477450[_0xa675('0x26')];}_0x2ed870[_0xa675('0x17')](_0x4c1075)[_0xa675('0x27')](_0x477450);};}exports[_0xa675('0x28')]=function(_0x1ad6df,_0x1e1bdb){var _0x5c9a5a={},_0xa24667={},_0x495b4a={'count':0x0,'rows':[]};var _0x4d9c06=db[_0xa675('0x29')]['rawAttributes'];_0xa24667['model']=_[_0xa675('0x2a')](_0x4d9c06);_0xa24667[_0xa675('0x2b')]=_[_0xa675('0x2a')](_0x1ad6df[_0xa675('0x2b')]);_0xa24667[_0xa675('0x2c')]=_[_0xa675('0x2d')](_0xa24667[_0xa675('0x2e')],_0xa24667[_0xa675('0x2b')]);_0x5c9a5a[_0xa675('0x2f')]=_['intersection'](_0xa24667[_0xa675('0x2e')],qs[_0xa675('0x30')](_0x1ad6df['query'][_0xa675('0x30')]));_0x5c9a5a['attributes']=_0x5c9a5a[_0xa675('0x2f')][_0xa675('0x31')]?_0x5c9a5a[_0xa675('0x2f')]:_0xa24667['model'];if(!_0x1ad6df[_0xa675('0x2b')][_0xa675('0x32')](_0xa675('0x33'))){_0x5c9a5a[_0xa675('0x34')]=qs[_0xa675('0x34')](_0x1ad6df[_0xa675('0x2b')][_0xa675('0x34')]);_0x5c9a5a[_0xa675('0x1b')]=qs['offset'](_0x1ad6df[_0xa675('0x2b')]['offset']);}_0x5c9a5a[_0xa675('0x35')]=qs[_0xa675('0x36')](_0x1ad6df['query'][_0xa675('0x36')]);_0x5c9a5a['where']=qs[_0xa675('0x2c')](_[_0xa675('0x37')](_0x1ad6df[_0xa675('0x2b')],_0xa24667[_0xa675('0x2c')]));if(_0x1ad6df[_0xa675('0x2b')]['filter']){_0x5c9a5a['where']=_[_0xa675('0x38')](_0x5c9a5a[_0xa675('0x39')],{'$or':_[_0xa675('0x3a')](_0x4d9c06,function(_0x24b47c){if(_0x24b47c[_0xa675('0x3b')]['key']!=='VIRTUAL'){var _0x48faf1={};_0x48faf1[_0x24b47c['field']]={'$like':'%'+_0x1ad6df[_0xa675('0x2b')][_0xa675('0x3c')]+'%'};return _0x48faf1;}})});}_0x5c9a5a=_[_0xa675('0x38')]({},_0x5c9a5a,_0x1ad6df[_0xa675('0x3d')]);var _0x1213dd={'where':_0x5c9a5a[_0xa675('0x39')]};return db[_0xa675('0x29')][_0xa675('0x1a')](_0x1213dd)[_0xa675('0x1f')](function(_0x186f46){_0x495b4a[_0xa675('0x1a')]=_0x186f46;if(_0x1ad6df['query']['includeAll']){_0x5c9a5a[_0xa675('0x3e')]=[{'all':!![]}];}return db[_0xa675('0x29')][_0xa675('0x3f')](_0x5c9a5a);})['then'](function(_0x1029f4){_0x495b4a[_0xa675('0x40')]=_0x1029f4;return _0x495b4a;})['then'](respondWithFilteredResult(_0x1e1bdb,_0x5c9a5a))[_0xa675('0x41')](handleError(_0x1e1bdb,null));};exports[_0xa675('0x42')]=function(_0x10e507,_0x366ad7){var _0x423b79={'raw':![],'where':{'id':_0x10e507['params']['id']}},_0x2122a2={};_0x2122a2['model']=_['keys'](db['CmList'][_0xa675('0x43')]);_0x2122a2[_0xa675('0x2b')]=_[_0xa675('0x2a')](_0x10e507[_0xa675('0x2b')]);_0x2122a2['filters']=_['intersection'](_0x2122a2[_0xa675('0x2e')],_0x2122a2['query']);_0x423b79[_0xa675('0x2f')]=_[_0xa675('0x2d')](_0x2122a2[_0xa675('0x2e')],qs['fields'](_0x10e507[_0xa675('0x2b')][_0xa675('0x30')]));_0x423b79['attributes']=_0x423b79[_0xa675('0x2f')][_0xa675('0x31')]?_0x423b79[_0xa675('0x2f')]:_0x2122a2[_0xa675('0x2e')];if(_0x10e507[_0xa675('0x2b')][_0xa675('0x44')]){_0x423b79[_0xa675('0x3e')]=[{'all':!![]}];}_0x423b79=_[_0xa675('0x38')]({},_0x423b79,_0x10e507[_0xa675('0x3d')]);return db[_0xa675('0x29')][_0xa675('0x45')](_0x423b79)[_0xa675('0x1f')](handleEntityNotFound(_0x366ad7,null))['then'](respondWithResult(_0x366ad7,null))[_0xa675('0x41')](handleError(_0x366ad7,null));};exports[_0xa675('0x46')]=function(_0xadc25b,_0x4e99ea){return db[_0xa675('0x29')][_0xa675('0x46')](_0xadc25b[_0xa675('0x47')],{})['then'](function(_0x5ecdf0){var _0xd8cc8e=_0xadc25b[_0xa675('0x48')][_0xa675('0x20')]({'plain':!![]});if(!_0xd8cc8e)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0xd8cc8e['role']==='user'){var _0x36d4d7=_0x5ecdf0[_0xa675('0x20')]({'plain':!![]});var _0x118998=_0xa675('0x21');return db['UserProfileSection'][_0xa675('0x45')]({'where':{'name':_0x118998,'userProfileId':_0xd8cc8e[_0xa675('0x49')]},'raw':!![]})[_0xa675('0x1f')](function(_0xfb5169){if(_0xfb5169&&_0xfb5169[_0xa675('0x4a')]===0x0){return db[_0xa675('0x22')][_0xa675('0x46')]({'name':_0x36d4d7[_0xa675('0x26')],'resourceId':_0x36d4d7['id'],'type':_0xfb5169[_0xa675('0x26')],'sectionId':_0xfb5169['id']},{})[_0xa675('0x1f')](function(){return _0x5ecdf0;});}else{return _0x5ecdf0;}})[_0xa675('0x41')](function(_0x1d1941){logger[_0xa675('0x24')](_0xa675('0x4b'),_0x1d1941);throw _0x1d1941;});}return _0x5ecdf0;})[_0xa675('0x1f')](respondWithResult(_0x4e99ea,0xc9))[_0xa675('0x41')](handleError(_0x4e99ea,null));};exports[_0xa675('0x1e')]=function(_0x34ccc0,_0x30d82c){if(_0x34ccc0[_0xa675('0x47')]['id']){delete _0x34ccc0[_0xa675('0x47')]['id'];}return db[_0xa675('0x29')][_0xa675('0x45')]({'where':{'id':_0x34ccc0[_0xa675('0x4c')]['id']}})[_0xa675('0x1f')](handleEntityNotFound(_0x30d82c,null))[_0xa675('0x1f')](saveUpdates(_0x34ccc0[_0xa675('0x47')],null))[_0xa675('0x1f')](respondWithResult(_0x30d82c,null))[_0xa675('0x41')](handleError(_0x30d82c,null));};exports[_0xa675('0x23')]=function(_0x1cc92e,_0x1ff738){return db[_0xa675('0x29')]['find']({'where':{'id':_0x1cc92e[_0xa675('0x4c')]['id']}})['then'](handleEntityNotFound(_0x1ff738,null))[_0xa675('0x1f')](removeEntity(_0x1ff738,null))['catch'](handleError(_0x1ff738,null));};exports[_0xa675('0x4d')]=function(_0x3855fc,_0x75e2e0){return db['CmList'][_0xa675('0x4d')]()['then'](respondWithResult(_0x75e2e0,null))[_0xa675('0x41')](handleError(_0x75e2e0,null));};exports['addDisposition']=function(_0x372475,_0x4fbf7f,_0x100c5){if(_0x372475[_0xa675('0x47')]['id']){delete _0x372475[_0xa675('0x47')]['id'];}return db[_0xa675('0x29')][_0xa675('0x45')]({'where':{'id':_0x372475[_0xa675('0x4c')]['id']}})['then'](handleEntityNotFound(_0x4fbf7f,null))[_0xa675('0x1f')](function(_0x64b86f){if(_0x64b86f){_0x372475[_0xa675('0x47')][_0xa675('0x4e')]=_0x64b86f['id'];return db[_0xa675('0x4f')][_0xa675('0x46')](_0x372475['body']);}})[_0xa675('0x1f')](respondWithResult(_0x4fbf7f,null))['catch'](handleError(_0x4fbf7f,null));};exports['getDispositions']=function(_0x8e9679,_0x440316,_0x58d313){var _0x2c326d={'raw':![],'where':{}};var _0x3204a7={};var _0x8211bd={'count':0x0,'rows':[]};return db[_0xa675('0x29')]['findOne']({'where':{'id':_0x8e9679[_0xa675('0x4c')]['id']}})[_0xa675('0x1f')](handleEntityNotFound(_0x440316,null))[_0xa675('0x1f')](function(_0xc55b4){if(_0xc55b4){_0x3204a7['model']=_[_0xa675('0x2a')](db[_0xa675('0x4f')][_0xa675('0x43')]);_0x3204a7[_0xa675('0x2b')]=_['keys'](_0x8e9679[_0xa675('0x2b')]);_0x3204a7[_0xa675('0x2c')]=_[_0xa675('0x2d')](_0x3204a7[_0xa675('0x2e')],_0x3204a7['query']);_0x2c326d[_0xa675('0x2f')]=_[_0xa675('0x2d')](_0x3204a7[_0xa675('0x2e')],qs[_0xa675('0x30')](_0x8e9679[_0xa675('0x2b')][_0xa675('0x30')]));_0x2c326d[_0xa675('0x2f')]=_0x2c326d[_0xa675('0x2f')][_0xa675('0x31')]?_0x2c326d[_0xa675('0x2f')]:_0x3204a7[_0xa675('0x2e')];if(!_0x8e9679[_0xa675('0x2b')][_0xa675('0x32')](_0xa675('0x33'))){_0x2c326d[_0xa675('0x34')]=qs[_0xa675('0x34')](_0x8e9679[_0xa675('0x2b')]['limit']);_0x2c326d['offset']=qs['offset'](_0x8e9679[_0xa675('0x2b')]['offset']);}_0x2c326d[_0xa675('0x35')]=qs[_0xa675('0x36')](_0x8e9679[_0xa675('0x2b')][_0xa675('0x36')]);_0x2c326d[_0xa675('0x39')]=qs[_0xa675('0x2c')](_[_0xa675('0x37')](_0x8e9679['query'],_0x3204a7[_0xa675('0x2c')]));_0x2c326d[_0xa675('0x39')]['ListId']=_0xc55b4['id'];if(_0x8e9679[_0xa675('0x2b')][_0xa675('0x3c')]){_0x2c326d[_0xa675('0x39')]=_['merge'](_0x2c326d['where'],{'$or':_[_0xa675('0x3a')](_0x2c326d[_0xa675('0x2f')],function(_0x5cab34){var _0x3b1ceb={};_0x3b1ceb[_0x5cab34]={'$like':'%'+_0x8e9679[_0xa675('0x2b')][_0xa675('0x3c')]+'%'};return _0x3b1ceb;})});}_0x2c326d=_['merge']({},_0x2c326d,_0x8e9679[_0xa675('0x3d')]);return db[_0xa675('0x4f')][_0xa675('0x1a')]({'where':_0x2c326d['where']})[_0xa675('0x1f')](function(_0x1631f7){_0x8211bd[_0xa675('0x1a')]=_0x1631f7;if(_0x8e9679[_0xa675('0x2b')][_0xa675('0x44')]){_0x2c326d[_0xa675('0x3e')]=[{'all':!![]}];}return db[_0xa675('0x4f')][_0xa675('0x3f')](_0x2c326d);})['then'](function(_0x101057){_0x8211bd['rows']=_0x101057;return _0x8211bd;});}})[_0xa675('0x1f')](respondWithFilteredResult(_0x440316,_0x2c326d))[_0xa675('0x41')](handleError(_0x440316,null));};exports[_0xa675('0x50')]=function(_0x4e52ac,_0x322134,_0x3415cd){return db[_0xa675('0x29')]['find']({'where':{'id':_0x4e52ac[_0xa675('0x4c')]['id']}})['then'](handleEntityNotFound(_0x322134,null))['then'](function(_0x1d4663){if(_0x1d4663){return _0x1d4663[_0xa675('0x50')](_0x4e52ac['query']['ids']);}})[_0xa675('0x1f')](respondWithStatusCode(_0x322134,null))[_0xa675('0x41')](handleError(_0x322134,null));};exports['addContacts']=function(_0x148003,_0x3b0436,_0x756bab){return db[_0xa675('0x29')]['find']({'where':{'id':_0x148003['params']['id']}})[_0xa675('0x1f')](handleEntityNotFound(_0x3b0436,null))[_0xa675('0x1f')](function(_0x144920){if(_0x144920){var _0x542471=[];var _0x1518b8={'success':[],'errors':[]};return db[_0xa675('0x51')][_0xa675('0x4d')]()['then'](function(_0x3567f8){if(_0x148003[_0xa675('0x47')][_0xa675('0x52')]&&_[_0xa675('0x53')](_0x148003[_0xa675('0x47')][_0xa675('0x52')])){if(_0x148003[_0xa675('0x47')][_0xa675('0x52')]['length']){_0x148003[_0xa675('0x47')][_0xa675('0x52')]=_0x148003[_0xa675('0x47')]['tags'][_0xa675('0x54')](';')+';';}else{_0x148003[_0xa675('0x47')][_0xa675('0x52')]=null;}}else{_0x148003['body'][_0xa675('0x52')]=null;}if(_0x148003[_0xa675('0x47')]&&_[_0xa675('0x53')](_0x148003[_0xa675('0x47')])){for(var _0x2a7c19=0x0;_0x2a7c19<_0x148003[_0xa675('0x47')][_0xa675('0x31')];_0x2a7c19+=0x1){_0x148003['body'][_0x2a7c19][_0xa675('0x4e')]=_0x148003[_0xa675('0x4c')]['id'];_0x542471[_0xa675('0x55')](_0x148003[_0xa675('0x47')][_0x2a7c19]);}return BPromise[_0xa675('0x56')](_0x542471,function(_0xec6444){return db[_0xa675('0x51')][_0xa675('0x46')](_['omit'](_0xec6444,[_0xa675('0x57'),'id'])||{},{'fields':_['keys'](_0x3567f8),'raw':!![]})[_0xa675('0x1f')](function(_0x189af8){_0x1518b8[_0xa675('0x58')][_0xa675('0x55')](_0x189af8[_0xa675('0x59')]);})[_0xa675('0x41')](function(_0x290ec7){_0x1518b8[_0xa675('0x5a')][_0xa675('0x55')]({'data':_0xec6444,'error':_0x290ec7['message']});});})[_0xa675('0x1f')](function(_0x9efa09){return _0x1518b8;})[_0xa675('0x41')](function(_0xfb98a){return _0xfb98a;});}else{_0x3b0436[_0xa675('0x17')](0x190)[_0xa675('0x19')]({'message':_0xa675('0x5b')});}});}})[_0xa675('0x1f')](respondWithResult(_0x3b0436,null))[_0xa675('0x41')](handleError(_0x3b0436,null));};exports[_0xa675('0x5c')]=function(_0x5a20e9,_0x19b2e7,_0x1ba378){var _0x223963;return db[_0xa675('0x29')][_0xa675('0x45')]({'where':{'id':_0x5a20e9[_0xa675('0x4c')]['id']},'include':[{'model':db[_0xa675('0x5d')],'as':_0xa675('0x5e')}]})[_0xa675('0x1f')](handleEntityNotFound(_0x19b2e7,null))[_0xa675('0x1f')](function(_0x1a1477){if(_0x1a1477){_0x223963=_0x1a1477;return db[_0xa675('0x51')][_0xa675('0x43')];}})['then'](function(_0x5e10b8){if(_0x5e10b8){var _0x1d0548={};var _0x4fab9d={};_0x4fab9d['model']=_['concat'](_[_0xa675('0x2a')](_0x5e10b8),_['map'](_0x223963[_0xa675('0x5e')],function(_0x705d3d){return util[_0xa675('0x5f')](_0xa675('0x60'),_0x705d3d['id']);}));_0x4fab9d[_0xa675('0x2b')]=_[_0xa675('0x2a')](_0x5a20e9[_0xa675('0x2b')]);_0x4fab9d[_0xa675('0x2c')]=_[_0xa675('0x2d')](_0x4fab9d[_0xa675('0x2e')],_0x4fab9d[_0xa675('0x2b')]);_0x1d0548[_0xa675('0x2f')]=_[_0xa675('0x2d')](_0x4fab9d[_0xa675('0x2e')],qs['fields'](_0x5a20e9[_0xa675('0x2b')]['fields']));_0x1d0548[_0xa675('0x2f')]=_0x1d0548[_0xa675('0x2f')]['length']?_0x1d0548['attributes']:_0x4fab9d[_0xa675('0x2e')];if(!_0x5a20e9[_0xa675('0x2b')]['hasOwnProperty']('nolimit')){_0x1d0548[_0xa675('0x34')]=qs[_0xa675('0x34')](_0x5a20e9[_0xa675('0x2b')][_0xa675('0x34')]);_0x1d0548[_0xa675('0x1b')]=qs[_0xa675('0x1b')](_0x5a20e9['query']['offset']);}_0x1d0548['order']=qs['sort'](_0x5a20e9[_0xa675('0x2b')]['sort']);_0x1d0548[_0xa675('0x39')]=qs[_0xa675('0x2c')](_[_0xa675('0x37')](_0x5a20e9[_0xa675('0x2b')],_0x4fab9d[_0xa675('0x2c')]));_0x1d0548['raw']=!![];if(_0x5a20e9['query'][_0xa675('0x3c')]){_0x1d0548['where']=_[_0xa675('0x38')](_0x1d0548[_0xa675('0x39')],{'$or':_[_0xa675('0x3a')](_0x1d0548[_0xa675('0x2f')],function(_0x10adb4){var _0x116bd7={};_0x116bd7[_0x10adb4]={'$like':'%'+_0x5a20e9['query'][_0xa675('0x3c')]+'%'};return _0x116bd7;})});}_0x1d0548=_['merge']({},_0x1d0548,_0x5a20e9[_0xa675('0x3d')]);return _0x223963[_0xa675('0x5c')](_0x1d0548);}})['then'](respondWithResult(_0x19b2e7,null))[_0xa675('0x41')](handleError(_0x19b2e7,null));};exports[_0xa675('0x61')]=function(_0x477ebf,_0x2c1909,_0x2eca1e){var _0x7ba6db;return db[_0xa675('0x29')][_0xa675('0x45')]({'where':{'id':_0x477ebf[_0xa675('0x4c')]['id']},'include':[{'model':db[_0xa675('0x5d')],'as':'CustomFields'}]})[_0xa675('0x1f')](handleEntityNotFound(_0x2c1909,null))[_0xa675('0x1f')](function(_0x3ba1f9){if(_0x3ba1f9){_0x7ba6db=_0x3ba1f9;return db[_0xa675('0x51')][_0xa675('0x43')];}})['then'](function(_0x27049f){if(_0x27049f){var _0x18b597={};var _0x218b47={};_0x218b47[_0xa675('0x2e')]=_['concat'](_[_0xa675('0x2a')](_0x27049f),_[_0xa675('0x3a')](_0x7ba6db[_0xa675('0x5e')],function(_0x2b429f){return util[_0xa675('0x5f')](_0xa675('0x60'),_0x2b429f['id']);}));_0x218b47[_0xa675('0x2b')]=_['keys'](_0x477ebf['query']);_0x218b47[_0xa675('0x2c')]=_[_0xa675('0x2d')](_0x218b47[_0xa675('0x2e')],_0x218b47[_0xa675('0x2b')]);_0x18b597['attributes']=_[_0xa675('0x2d')](_0x218b47[_0xa675('0x2e')],qs[_0xa675('0x30')](_0x477ebf[_0xa675('0x2b')][_0xa675('0x30')]));_0x18b597['attributes']=_0x18b597[_0xa675('0x2f')][_0xa675('0x31')]?_0x18b597[_0xa675('0x2f')]:_0x218b47[_0xa675('0x2e')];if(!_0x477ebf[_0xa675('0x2b')][_0xa675('0x32')](_0xa675('0x33'))){_0x18b597[_0xa675('0x34')]=qs['limit'](_0x477ebf[_0xa675('0x2b')]['limit']);_0x18b597[_0xa675('0x1b')]=qs[_0xa675('0x1b')](_0x477ebf[_0xa675('0x2b')][_0xa675('0x1b')]);}_0x18b597[_0xa675('0x35')]=qs[_0xa675('0x36')](_0x477ebf[_0xa675('0x2b')][_0xa675('0x36')]);_0x18b597[_0xa675('0x39')]=qs[_0xa675('0x2c')](_[_0xa675('0x37')](_0x477ebf['query'],_0x218b47[_0xa675('0x2c')]));_0x18b597['raw']=!![];if(_0x477ebf[_0xa675('0x2b')][_0xa675('0x3c')]){_0x18b597['where']=_[_0xa675('0x38')](_0x18b597['where'],{'$or':_[_0xa675('0x3a')](_0x18b597[_0xa675('0x2f')],function(_0x3cde92){var _0x7081a7={};_0x7081a7[_0x3cde92]={'$like':'%'+_0x477ebf[_0xa675('0x2b')][_0xa675('0x3c')]+'%'};return _0x7081a7;})});}_0x18b597=_[_0xa675('0x38')]({},_0x18b597,_0x477ebf[_0xa675('0x3d')]);return _0x7ba6db[_0xa675('0x5c')](_0x18b597);}})['then'](function(_0x32ec50){if(!_['isEmpty'](_0x32ec50)){var _0x5ec776=toCsv(_0x32ec50);var _0x1f7c65=Date['now']();fs['writeFileSync'](util[_0xa675('0x5f')]('/tmp/list_%d_%s.csv',_0x7ba6db['id'],_0x1f7c65),_0x5ec776);_0x2c1909[_0xa675('0x62')](_0xa675('0x63'),_0xa675('0x64')+util['format']('list_%d_%s.csv',_0x7ba6db['id'],_0x1f7c65));_0x2c1909[_0xa675('0x62')](_0xa675('0x65'),'text/csv');return _0x2c1909[_0xa675('0x66')](util['format']('/tmp/list_%d_%s.csv',_0x7ba6db['id'],_0x1f7c65));}else{return _0x2c1909[_0xa675('0x16')](0xcc);}})[_0xa675('0x41')](handleError(_0x2c1909,null));};exports[_0xa675('0x67')]=function(_0x514a4e,_0xa368e2,_0x5d7ec1){var _0x7b27b7;delete _0x514a4e[_0xa675('0x47')]['id'];return db[_0xa675('0x29')]['findOne']({'where':{'id':_0x514a4e[_0xa675('0x4c')]['id']}})[_0xa675('0x1f')](handleEntityNotFound(_0xa368e2,null))[_0xa675('0x1f')](function(_0x37b71c){if(_0x37b71c){return db[_0xa675('0x68')][_0xa675('0x69')](function(_0x119fa0){return db[_0xa675('0x5d')][_0xa675('0x46')](_0x514a4e[_0xa675('0x47')],{'transaction':_0x119fa0})['then'](function(_0x536d65){_0x7b27b7=_0x536d65;return _0x37b71c['addCustomFields'](_0x536d65,{'transaction':_0x119fa0});})[_0xa675('0x1f')](function(){var _0x661f8d={'type':db[_0xa675('0x6a')][_0xa675('0x6b')],'transaction':_0x119fa0};switch(_0x514a4e[_0xa675('0x47')][_0xa675('0x3b')]){case _0xa675('0x6c'):_0x661f8d[_0xa675('0x3b')]=db[_0xa675('0x6a')]['TEXT'];break;case _0xa675('0x6d'):_0x661f8d[_0xa675('0x3b')]=db[_0xa675('0x6a')][_0xa675('0x6e')];break;case _0xa675('0x6f'):_0x661f8d[_0xa675('0x3b')]=db[_0xa675('0x6a')][_0xa675('0x70')];_0x661f8d[_0xa675('0x71')]=![];break;default:}return db[_0xa675('0x68')][_0xa675('0x72')][_0xa675('0x73')]('cm_contacts',util[_0xa675('0x5f')]('cf_%s',_0x7b27b7['id']),_0x661f8d);})[_0xa675('0x1f')](function(){return _0x7b27b7;});});}})[_0xa675('0x1f')](respondWithResult(_0xa368e2,null))[_0xa675('0x41')](handleError(_0xa368e2,null));};exports[_0xa675('0x74')]=function(_0x560d1c,_0x376f19,_0x3b7330){var _0x2332d9={};var _0x2ea311={};var _0x4bb03e;var _0x38e032;return db['CmList'][_0xa675('0x75')]({'where':{'id':_0x560d1c['params']['id']}})['then'](handleEntityNotFound(_0x376f19,null))[_0xa675('0x1f')](function(_0x2a495d){if(_0x2a495d){_0x4bb03e=_0x2a495d;_0x2ea311[_0xa675('0x2e')]=_[_0xa675('0x2a')](db[_0xa675('0x5d')]['rawAttributes']);_0x2ea311['query']=_[_0xa675('0x2a')](_0x560d1c[_0xa675('0x2b')]);_0x2ea311['filters']=_['intersection'](_0x2ea311[_0xa675('0x2e')],_0x2ea311[_0xa675('0x2b')]);_0x2332d9[_0xa675('0x2f')]=_['intersection'](_0x2ea311[_0xa675('0x2e')],qs[_0xa675('0x30')](_0x560d1c['query'][_0xa675('0x30')]));_0x2332d9[_0xa675('0x2f')]=_0x2332d9[_0xa675('0x2f')][_0xa675('0x31')]?_0x2332d9[_0xa675('0x2f')]:_0x2ea311[_0xa675('0x2e')];_0x2332d9[_0xa675('0x35')]=qs['sort'](_0x560d1c[_0xa675('0x2b')][_0xa675('0x36')]);_0x2332d9[_0xa675('0x39')]=qs[_0xa675('0x2c')](_[_0xa675('0x37')](_0x560d1c[_0xa675('0x2b')],_0x2ea311[_0xa675('0x2c')]));_0x2332d9[_0xa675('0x39')]=_[_0xa675('0x38')](_0x2332d9[_0xa675('0x39')],{'$or':[{'ListId':_0x2a495d['id']},{'ListId':null}]});if(_0x560d1c['query'][_0xa675('0x3c')]){_0x2332d9[_0xa675('0x39')]=_['merge'](_0x2332d9[_0xa675('0x39')],{'$or':_[_0xa675('0x3a')](_0x2332d9[_0xa675('0x2f')],function(_0xcf2e51){var _0x54bbf5={};_0x54bbf5[_0xcf2e51]={'$like':'%'+_0x560d1c[_0xa675('0x2b')][_0xa675('0x3c')]+'%'};return _0x54bbf5;})});}_0x2332d9=_['merge']({},_0x2332d9,_0x560d1c['options']);return db[_0xa675('0x5d')]['findAndCountAll'](_0x2332d9);}})[_0xa675('0x1f')](respondWithResult(_0x376f19,null))[_0xa675('0x41')](handleError(_0x376f19,null));};exports['addAgents']=function(_0x5d032e,_0xd0cdc6,_0x3067ff){return db[_0xa675('0x29')][_0xa675('0x45')]({'where':{'id':_0x5d032e[_0xa675('0x4c')]['id']}})['then'](handleEntityNotFound(_0xd0cdc6,null))['then'](function(_0x5d5174){if(_0x5d5174){return _0x5d5174[_0xa675('0x76')](_0x5d032e['body'][_0xa675('0x57')],_['omit'](_0x5d032e[_0xa675('0x47')],[_0xa675('0x57'),'id'])||{})[_0xa675('0x77')](function(_0x1eb576){for(var _0x2addeb=0x0;_0x2addeb<_0x5d032e[_0xa675('0x47')][_0xa675('0x57')][_0xa675('0x31')];_0x2addeb+=0x1){socket[_0xa675('0x78')]('userCmList:save',{'UserId':_0x5d032e['body']['ids'][_0x2addeb],'CmListId':_0x5d032e[_0xa675('0x4c')]['id']});}return _0x1eb576;});}})[_0xa675('0x1f')](respondWithResult(_0xd0cdc6,null))[_0xa675('0x41')](handleError(_0xd0cdc6,null));};exports[_0xa675('0x79')]=function(_0x580306,_0x4fbde1,_0x43bdc7){return db[_0xa675('0x29')][_0xa675('0x45')]({'where':{'id':_0x580306[_0xa675('0x4c')]['id']}})[_0xa675('0x1f')](handleEntityNotFound(_0x4fbde1,null))['then'](function(_0x316f6d){if(_0x316f6d){return _0x316f6d[_0xa675('0x79')](_0x580306[_0xa675('0x2b')][_0xa675('0x57')])[_0xa675('0x1f')](function(){if(_[_0xa675('0x53')](_0x580306[_0xa675('0x2b')]['ids'])){for(var _0x111e7a=0x0;_0x111e7a<_0x580306[_0xa675('0x2b')][_0xa675('0x57')][_0xa675('0x31')];_0x111e7a+=0x1){socket[_0xa675('0x78')]('userCmList:remove',{'UserId':Number(_0x580306[_0xa675('0x2b')][_0xa675('0x57')][_0x111e7a]),'CmListId':Number(_0x580306[_0xa675('0x4c')]['id'])});}}else{socket[_0xa675('0x78')](_0xa675('0x7a'),{'UserId':Number(_0x580306[_0xa675('0x2b')][_0xa675('0x57')]),'CmListId':Number(_0x580306['params']['id'])});}});}})[_0xa675('0x1f')](respondWithStatusCode(_0x4fbde1,null))[_0xa675('0x41')](handleError(_0x4fbde1,null));};exports[_0xa675('0x7b')]=function(_0x1d002e,_0x2baf01,_0x3e87e8){var _0x533075={};var _0x576359={};var _0x4df3a9;var _0x35a207;return db[_0xa675('0x29')][_0xa675('0x75')]({'where':{'id':_0x1d002e[_0xa675('0x4c')]['id']}})[_0xa675('0x1f')](handleEntityNotFound(_0x2baf01,null))[_0xa675('0x1f')](function(_0x2a6c84){if(_0x2a6c84){_0x4df3a9=_0x2a6c84;_0x576359[_0xa675('0x2e')]=_[_0xa675('0x2a')](db[_0xa675('0x7c')][_0xa675('0x43')]);_0x576359[_0xa675('0x2b')]=_[_0xa675('0x2a')](_0x1d002e[_0xa675('0x2b')]);_0x576359[_0xa675('0x2c')]=_['intersection'](_0x576359[_0xa675('0x2e')],_0x576359['query']);_0x533075['attributes']=_[_0xa675('0x2d')](_0x576359[_0xa675('0x2e')],qs[_0xa675('0x30')](_0x1d002e[_0xa675('0x2b')]['fields']));_0x533075[_0xa675('0x2f')]=_0x533075['attributes'][_0xa675('0x31')]?_0x533075[_0xa675('0x2f')]:_0x576359[_0xa675('0x2e')];_0x533075[_0xa675('0x35')]=qs['sort'](_0x1d002e['query'][_0xa675('0x36')]);_0x533075[_0xa675('0x39')]=qs[_0xa675('0x2c')](_['pick'](_0x1d002e['query'],_0x576359['filters']));if(_0x1d002e[_0xa675('0x2b')][_0xa675('0x3c')]){_0x533075['where']=_['merge'](_0x533075[_0xa675('0x39')],{'$or':_[_0xa675('0x3a')](_0x533075[_0xa675('0x2f')],function(_0x17d5a9){var _0x5bbf54={};_0x5bbf54[_0x17d5a9]={'$like':'%'+_0x1d002e[_0xa675('0x2b')]['filter']+'%'};return _0x5bbf54;})});}_0x533075=_['merge']({},_0x533075,_0x1d002e[_0xa675('0x3d')]);return _0x4df3a9[_0xa675('0x7b')](_0x533075);}})[_0xa675('0x1f')](function(_0x5d569a){if(_0x5d569a){_0x35a207=_0x5d569a[_0xa675('0x31')];if(!_0x1d002e[_0xa675('0x2b')][_0xa675('0x32')]('nolimit')){_0x533075[_0xa675('0x34')]=qs[_0xa675('0x34')](_0x1d002e['query'][_0xa675('0x34')]);_0x533075['offset']=qs[_0xa675('0x1b')](_0x1d002e['query'][_0xa675('0x1b')]);}return _0x4df3a9[_0xa675('0x7b')](_0x533075);}})[_0xa675('0x1f')](function(_0x250a9f){if(_0x250a9f){return _0x250a9f?{'count':_0x35a207,'rows':_0x250a9f}:null;}})[_0xa675('0x1f')](respondWithResult(_0x2baf01,null))[_0xa675('0x41')](handleError(_0x2baf01,null));};
\ No newline at end of file
index f483188..1d41013 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa28=['update','remove','emit','hook','exports','../../mysqldb','CmList','save'];(function(_0x5b6589,_0x1fd9f0){var _0x1eb149=function(_0x3aa2af){while(--_0x3aa2af){_0x5b6589['push'](_0x5b6589['shift']());}};_0x1eb149(++_0x1fd9f0);}(_0xaa28,0x135));var _0x8aa2=function(_0x18cac4,_0x57a4d5){_0x18cac4=_0x18cac4-0x0;var _0x2227c6=_0xaa28[_0x18cac4];return _0x2227c6;};'use strict';var EventEmitter=require('events');var CmList=require(_0x8aa2('0x0'))['db'][_0x8aa2('0x1')];var CmListEvents=new EventEmitter();CmListEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x8aa2('0x2'),'afterUpdate':_0x8aa2('0x3'),'afterDestroy':_0x8aa2('0x4')};function emitEvent(_0x29e366){return function(_0x25482f,_0x542dfb,_0x29ee30){CmListEvents[_0x8aa2('0x5')](_0x29e366+':'+_0x25482f['id'],_0x25482f);CmListEvents['emit'](_0x29e366,_0x25482f);_0x29ee30(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];CmList[_0x8aa2('0x6')](e,emitEvent(event));}}module[_0x8aa2('0x7')]=CmListEvents;
\ No newline at end of file
+var _0x83a8=['update','remove','emit','hook','exports','events','../../mysqldb','CmList','save'];(function(_0x4df6f9,_0x44bd65){var _0x4b1a73=function(_0xf5adb7){while(--_0xf5adb7){_0x4df6f9['push'](_0x4df6f9['shift']());}};_0x4b1a73(++_0x44bd65);}(_0x83a8,0x149));var _0x883a=function(_0x1f28b1,_0x462b32){_0x1f28b1=_0x1f28b1-0x0;var _0x57d103=_0x83a8[_0x1f28b1];return _0x57d103;};'use strict';var EventEmitter=require(_0x883a('0x0'));var CmList=require(_0x883a('0x1'))['db'][_0x883a('0x2')];var CmListEvents=new EventEmitter();CmListEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x883a('0x3'),'afterUpdate':_0x883a('0x4'),'afterDestroy':_0x883a('0x5')};function emitEvent(_0x3f4b7c){return function(_0x4d7e02,_0x368e80,_0x3dbf95){CmListEvents['emit'](_0x3f4b7c+':'+_0x4d7e02['id'],_0x4d7e02);CmListEvents[_0x883a('0x6')](_0x3f4b7c,_0x4d7e02);_0x3dbf95(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];CmList[_0x883a('0x7')](e,emitEvent(event));}}module[_0x883a('0x8')]=CmListEvents;
\ No newline at end of file
index d082013..ec7099d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0e35=['util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','exports','CmList','cm_lists','lodash'];(function(_0x24cc79,_0x3ec5be){var _0x856ac7=function(_0x32c7dc){while(--_0x32c7dc){_0x24cc79['push'](_0x24cc79['shift']());}};_0x856ac7(++_0x3ec5be);}(_0x0e35,0xc2));var _0x50e3=function(_0x17097e,_0x2594cf){_0x17097e=_0x17097e-0x0;var _0x72b5ac=_0x0e35[_0x17097e];return _0x72b5ac;};'use strict';var _=require(_0x50e3('0x0'));var util=require(_0x50e3('0x1'));var logger=require(_0x50e3('0x2'))(_0x50e3('0x3'));var moment=require(_0x50e3('0x4'));var BPromise=require(_0x50e3('0x5'));var rp=require(_0x50e3('0x6'));var fs=require('fs');var path=require(_0x50e3('0x7'));var rimraf=require(_0x50e3('0x8'));var config=require(_0x50e3('0x9'));var attributes=require('./cmList.attributes');module[_0x50e3('0xa')]=function(_0x35e2b1,_0x47c955){return _0x35e2b1['define'](_0x50e3('0xb'),attributes,{'tableName':_0x50e3('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x9585=['CmList','cm_lists','util','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./cmList.attributes','define'];(function(_0x78881f,_0x3d584a){var _0x1e6b33=function(_0x10bb1c){while(--_0x10bb1c){_0x78881f['push'](_0x78881f['shift']());}};_0x1e6b33(++_0x3d584a);}(_0x9585,0x15e));var _0x5958=function(_0x11e45f,_0x111c88){_0x11e45f=_0x11e45f-0x0;var _0x4f21dd=_0x9585[_0x11e45f];return _0x4f21dd;};'use strict';var _=require('lodash');var util=require(_0x5958('0x0'));var logger=require('../../config/logger')(_0x5958('0x1'));var moment=require(_0x5958('0x2'));var BPromise=require(_0x5958('0x3'));var rp=require(_0x5958('0x4'));var fs=require('fs');var path=require(_0x5958('0x5'));var rimraf=require(_0x5958('0x6'));var config=require(_0x5958('0x7'));var attributes=require(_0x5958('0x8'));module['exports']=function(_0x202d6f,_0x48ddaf){return _0x202d6f[_0x5958('0x9')](_0x5958('0xa'),attributes,{'tableName':_0x5958('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 376d2f6..46a60d2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x25f7=['../../config/utils','../../config/logger','rpc','jayson/promise','client','redis','defaults','localhost','socket.io-emitter','./cmList.socket','register','request','CmList,\x20%s,\x20%s','request\x20sent','debug','CmList,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb'];(function(_0x1d211b,_0x475f3b){var _0x47c88b=function(_0x3126f5){while(--_0x3126f5){_0x1d211b['push'](_0x1d211b['shift']());}};_0x47c88b(++_0x475f3b);}(_0x25f7,0x165));var _0x725f=function(_0x13252b,_0x58f9f0){_0x13252b=_0x13252b-0x0;var _0x5dd995=_0x25f7[_0x13252b];return _0x5dd995;};'use strict';var _=require(_0x725f('0x0'));var util=require(_0x725f('0x1'));var moment=require(_0x725f('0x2'));var BPromise=require(_0x725f('0x3'));var rs=require(_0x725f('0x4'));var fs=require('fs');var Redis=require(_0x725f('0x5'));var db=require(_0x725f('0x6'))['db'];var utils=require(_0x725f('0x7'));var logger=require(_0x725f('0x8'))(_0x725f('0x9'));var config=require('../../config/environment');var jayson=require(_0x725f('0xa'));var client=jayson[_0x725f('0xb')]['http']({'port':0x232a});config[_0x725f('0xc')]=_[_0x725f('0xd')](config[_0x725f('0xc')],{'host':_0x725f('0xe'),'port':0x18eb});var socket=require(_0x725f('0xf'))(new Redis(config[_0x725f('0xc')]));require(_0x725f('0x10'))[_0x725f('0x11')](socket);function respondWithRpcPromise(_0x3fca93,_0x104261,_0x32c171){return new BPromise(function(_0x76e2e,_0x129107){return client[_0x725f('0x12')](_0x3fca93,_0x32c171)['then'](function(_0x5437a6){logger['info'](_0x725f('0x13'),_0x104261,_0x725f('0x14'));logger[_0x725f('0x15')](_0x725f('0x16'),_0x104261,'request\x20sent',JSON[_0x725f('0x17')](_0x5437a6));if(_0x5437a6[_0x725f('0x18')]){if(_0x5437a6['error']['code']===0x1f4){logger[_0x725f('0x18')](_0x725f('0x13'),_0x104261,_0x5437a6[_0x725f('0x18')][_0x725f('0x19')]);return _0x129107(_0x5437a6[_0x725f('0x18')][_0x725f('0x19')]);}logger[_0x725f('0x18')](_0x725f('0x13'),_0x104261,_0x5437a6[_0x725f('0x18')]['message']);return _0x76e2e(_0x5437a6[_0x725f('0x18')][_0x725f('0x19')]);}else{logger[_0x725f('0x1a')](_0x725f('0x13'),_0x104261,_0x725f('0x14'));_0x76e2e(_0x5437a6[_0x725f('0x1b')][_0x725f('0x19')]);}})['catch'](function(_0x8a53a){logger[_0x725f('0x18')](_0x725f('0x13'),_0x104261,_0x8a53a);_0x129107(_0x8a53a);});});}
\ No newline at end of file
+var _0x09d4=['http','redis','defaults','localhost','socket.io-emitter','./cmList.socket','register','then','CmList,\x20%s,\x20%s','request\x20sent','debug','CmList,\x20%s,\x20%s,\x20%s','error','code','message','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client'];(function(_0x3a0916,_0x4abc9a){var _0x5a9bd6=function(_0x51aa1f){while(--_0x51aa1f){_0x3a0916['push'](_0x3a0916['shift']());}};_0x5a9bd6(++_0x4abc9a);}(_0x09d4,0x1c3));var _0x409d=function(_0x4dfedb,_0x496cbb){_0x4dfedb=_0x4dfedb-0x0;var _0x34636f=_0x09d4[_0x4dfedb];return _0x34636f;};'use strict';var _=require(_0x409d('0x0'));var util=require(_0x409d('0x1'));var moment=require(_0x409d('0x2'));var BPromise=require(_0x409d('0x3'));var rs=require(_0x409d('0x4'));var fs=require('fs');var Redis=require(_0x409d('0x5'));var db=require(_0x409d('0x6'))['db'];var utils=require(_0x409d('0x7'));var logger=require(_0x409d('0x8'))(_0x409d('0x9'));var config=require(_0x409d('0xa'));var jayson=require(_0x409d('0xb'));var client=jayson[_0x409d('0xc')][_0x409d('0xd')]({'port':0x232a});config[_0x409d('0xe')]=_[_0x409d('0xf')](config['redis'],{'host':_0x409d('0x10'),'port':0x18eb});var socket=require(_0x409d('0x11'))(new Redis(config[_0x409d('0xe')]));require(_0x409d('0x12'))[_0x409d('0x13')](socket);function respondWithRpcPromise(_0x11179f,_0x4a5b90,_0x1a1096){return new BPromise(function(_0x14085c,_0x142234){return client['request'](_0x11179f,_0x1a1096)[_0x409d('0x14')](function(_0x54ee93){logger['info'](_0x409d('0x15'),_0x4a5b90,_0x409d('0x16'));logger[_0x409d('0x17')](_0x409d('0x18'),_0x4a5b90,_0x409d('0x16'),JSON['stringify'](_0x54ee93));if(_0x54ee93[_0x409d('0x19')]){if(_0x54ee93['error'][_0x409d('0x1a')]===0x1f4){logger[_0x409d('0x19')](_0x409d('0x15'),_0x4a5b90,_0x54ee93[_0x409d('0x19')]['message']);return _0x142234(_0x54ee93[_0x409d('0x19')][_0x409d('0x1b')]);}logger[_0x409d('0x19')](_0x409d('0x15'),_0x4a5b90,_0x54ee93[_0x409d('0x19')]['message']);return _0x14085c(_0x54ee93[_0x409d('0x19')][_0x409d('0x1b')]);}else{logger['info'](_0x409d('0x15'),_0x4a5b90,_0x409d('0x16'));_0x14085c(_0x54ee93['result'][_0x409d('0x1b')]);}})[_0x409d('0x1c')](function(_0x533323){logger[_0x409d('0x19')](_0x409d('0x15'),_0x4a5b90,_0x533323);_0x142234(_0x533323);});});}
\ No newline at end of file
index d52db9b..77c3fca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6758=['save','remove','update','emit','removeListener','cmList:'];(function(_0x178e48,_0x3c9509){var _0x440d7e=function(_0xc2f8a0){while(--_0xc2f8a0){_0x178e48['push'](_0x178e48['shift']());}};_0x440d7e(++_0x3c9509);}(_0x6758,0x1b6));var _0x8675=function(_0x468ff7,_0x594519){_0x468ff7=_0x468ff7-0x0;var _0x4eada2=_0x6758[_0x468ff7];return _0x4eada2;};'use strict';var CmListEvents=require('./cmList.events');var events=[_0x8675('0x0'),_0x8675('0x1'),_0x8675('0x2')];function createListener(_0x517844,_0x3e6df1){return function(_0xfb9987){_0x3e6df1[_0x8675('0x3')](_0x517844,_0xfb9987);};}function removeListener(_0x418c0f,_0x1949b0){return function(){CmListEvents[_0x8675('0x4')](_0x418c0f,_0x1949b0);};}exports['register']=function(_0x3ae273){for(var _0x5005fd=0x0,_0x4660d8=events['length'];_0x5005fd<_0x4660d8;_0x5005fd++){var _0x18f86c=events[_0x5005fd];var _0x477851=createListener(_0x8675('0x5')+_0x18f86c,_0x3ae273);CmListEvents['on'](_0x18f86c,_0x477851);}};
\ No newline at end of file
+var _0x11ba=['cmList:','./cmList.events','emit','removeListener','register','length'];(function(_0x286bfb,_0x46ac3c){var _0x52b683=function(_0x3e7fb1){while(--_0x3e7fb1){_0x286bfb['push'](_0x286bfb['shift']());}};_0x52b683(++_0x46ac3c);}(_0x11ba,0x10f));var _0xa11b=function(_0x593705,_0xd89e7a){_0x593705=_0x593705-0x0;var _0x5cff4e=_0x11ba[_0x593705];return _0x5cff4e;};'use strict';var CmListEvents=require(_0xa11b('0x0'));var events=['save','remove','update'];function createListener(_0x560648,_0x4d4e9f){return function(_0xb94242){_0x4d4e9f[_0xa11b('0x1')](_0x560648,_0xb94242);};}function removeListener(_0x32f71f,_0x2d6a88){return function(){CmListEvents[_0xa11b('0x2')](_0x32f71f,_0x2d6a88);};}exports[_0xa11b('0x3')]=function(_0x326747){for(var _0x4f5688=0x0,_0x100360=events[_0xa11b('0x4')];_0x4f5688<_0x100360;_0x4f5688++){var _0x5d9e92=events[_0x4f5688];var _0x38c643=createListener(_0xa11b('0x5')+_0x5d9e92,_0x326747);CmListEvents['on'](_0x5d9e92,_0x38c643);}};
\ No newline at end of file
index 3cf384e..6e06d9a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4384=['delete','destroy','removeDispositions','removeAgents','exports','multer','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmList.controller','get','isAuthenticated','index','/describe','describe','/:id','/:id/contacts','/:id/contacts/csv','getCustomFields','create','post','/:id/dispositions','addDisposition','addContacts','addCustomField','/:id/users','addAgents','put','update'];(function(_0x2366fc,_0x2468d4){var _0xb65077=function(_0x585ba3){while(--_0x585ba3){_0x2366fc['push'](_0x2366fc['shift']());}};_0xb65077(++_0x2468d4);}(_0x4384,0x1e5));var _0x4438=function(_0x211c5a,_0x50492a){_0x211c5a=_0x211c5a-0x0;var _0x2d0cd9=_0x4384[_0x211c5a];return _0x2d0cd9;};'use strict';var multer=require(_0x4438('0x0'));var util=require('util');var path=require(_0x4438('0x1'));var timeout=require(_0x4438('0x2'));var express=require('express');var router=express[_0x4438('0x3')]();var auth=require(_0x4438('0x4'));var interaction=require(_0x4438('0x5'));var config=require(_0x4438('0x6'));var controller=require(_0x4438('0x7'));router[_0x4438('0x8')]('/',auth[_0x4438('0x9')](),controller[_0x4438('0xa')]);router[_0x4438('0x8')](_0x4438('0xb'),auth[_0x4438('0x9')](),controller[_0x4438('0xc')]);router[_0x4438('0x8')](_0x4438('0xd'),auth[_0x4438('0x9')](),controller['show']);router[_0x4438('0x8')]('/:id/dispositions',auth[_0x4438('0x9')](),controller['getDispositions']);router[_0x4438('0x8')](_0x4438('0xe'),auth['isAuthenticated'](),controller['getContacts']);router[_0x4438('0x8')](_0x4438('0xf'),auth[_0x4438('0x9')](),controller['getContactsCsv']);router[_0x4438('0x8')]('/:id/fields',auth[_0x4438('0x9')](),controller[_0x4438('0x10')]);router['get']('/:id/users',auth['isAuthenticated'](),controller['getAgents']);router['post']('/',auth[_0x4438('0x9')](),controller[_0x4438('0x11')]);router[_0x4438('0x12')](_0x4438('0x13'),auth[_0x4438('0x9')](),controller[_0x4438('0x14')]);router[_0x4438('0x12')]('/:id/contacts',auth['isAuthenticated'](),controller[_0x4438('0x15')]);router['post']('/:id/fields',auth[_0x4438('0x9')](),controller[_0x4438('0x16')]);router['post'](_0x4438('0x17'),auth[_0x4438('0x9')](),controller[_0x4438('0x18')]);router[_0x4438('0x19')](_0x4438('0xd'),auth[_0x4438('0x9')](),controller[_0x4438('0x1a')]);router[_0x4438('0x1b')](_0x4438('0xd'),auth[_0x4438('0x9')](),controller[_0x4438('0x1c')]);router[_0x4438('0x1b')](_0x4438('0x13'),auth['isAuthenticated'](),controller[_0x4438('0x1d')]);router['delete']('/:id/users',auth[_0x4438('0x9')](),controller[_0x4438('0x1e')]);module[_0x4438('0x1f')]=router;
\ No newline at end of file
+var _0xc7af=['getCustomFields','/:id/users','getAgents','post','create','/:id/contacts','addCustomField','addAgents','put','delete','destroy','removeDispositions','exports','util','connect-timeout','express','Router','../../config/environment','./cmList.controller','get','index','/describe','isAuthenticated','describe','/:id','show','/:id/dispositions','getDispositions','getContacts','getContactsCsv','/:id/fields'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0xc7af,0x1a0));var _0xfc7a=function(_0x903228,_0x42c429){_0x903228=_0x903228-0x0;var _0xcec81d=_0xc7af[_0x903228];return _0xcec81d;};'use strict';var multer=require('multer');var util=require(_0xfc7a('0x0'));var path=require('path');var timeout=require(_0xfc7a('0x1'));var express=require(_0xfc7a('0x2'));var router=express[_0xfc7a('0x3')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xfc7a('0x4'));var controller=require(_0xfc7a('0x5'));router[_0xfc7a('0x6')]('/',auth['isAuthenticated'](),controller[_0xfc7a('0x7')]);router[_0xfc7a('0x6')](_0xfc7a('0x8'),auth[_0xfc7a('0x9')](),controller[_0xfc7a('0xa')]);router[_0xfc7a('0x6')](_0xfc7a('0xb'),auth['isAuthenticated'](),controller[_0xfc7a('0xc')]);router['get'](_0xfc7a('0xd'),auth[_0xfc7a('0x9')](),controller[_0xfc7a('0xe')]);router['get']('/:id/contacts',auth['isAuthenticated'](),controller[_0xfc7a('0xf')]);router[_0xfc7a('0x6')]('/:id/contacts/csv',auth['isAuthenticated'](),controller[_0xfc7a('0x10')]);router['get'](_0xfc7a('0x11'),auth[_0xfc7a('0x9')](),controller[_0xfc7a('0x12')]);router['get'](_0xfc7a('0x13'),auth[_0xfc7a('0x9')](),controller[_0xfc7a('0x14')]);router[_0xfc7a('0x15')]('/',auth[_0xfc7a('0x9')](),controller[_0xfc7a('0x16')]);router['post']('/:id/dispositions',auth[_0xfc7a('0x9')](),controller['addDisposition']);router[_0xfc7a('0x15')](_0xfc7a('0x17'),auth[_0xfc7a('0x9')](),controller['addContacts']);router['post']('/:id/fields',auth['isAuthenticated'](),controller[_0xfc7a('0x18')]);router[_0xfc7a('0x15')]('/:id/users',auth[_0xfc7a('0x9')](),controller[_0xfc7a('0x19')]);router[_0xfc7a('0x1a')](_0xfc7a('0xb'),auth[_0xfc7a('0x9')](),controller['update']);router[_0xfc7a('0x1b')](_0xfc7a('0xb'),auth[_0xfc7a('0x9')](),controller[_0xfc7a('0x1c')]);router[_0xfc7a('0x1b')](_0xfc7a('0xd'),auth[_0xfc7a('0x9')](),controller[_0xfc7a('0x1d')]);router[_0xfc7a('0x1b')](_0xfc7a('0x13'),auth['isAuthenticated'](),controller['removeAgents']);module[_0xfc7a('0x1e')]=router;
\ No newline at end of file
index 1f70e52..12d8c90 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x46b1=['exports','VIRTUAL','getDataValue','field','STRING','sequelize'];(function(_0x393db8,_0x3e1157){var _0x4295cc=function(_0x59aaf2){while(--_0x59aaf2){_0x393db8['push'](_0x393db8['shift']());}};_0x4295cc(++_0x3e1157);}(_0x46b1,0x143));var _0x146b=function(_0x2d64fc,_0x42b2a7){_0x2d64fc=_0x2d64fc-0x0;var _0x2c8556=_0x46b1[_0x2d64fc];return _0x2c8556;};'use strict';var Sequelize=require(_0x146b('0x0'));module[_0x146b('0x1')]={'name':{'type':Sequelize[_0x146b('0x2')],'get':function(_0x591384){return this[_0x146b('0x3')](_0x146b('0x4'));}},'field':{'type':Sequelize[_0x146b('0x5')],'allowNull':![]},'operator':{'type':Sequelize[_0x146b('0x5')],'allowNull':![]},'value':{'type':Sequelize[_0x146b('0x5')],'allowNull':![]}};
\ No newline at end of file
+var _0xebee=['getDataValue','STRING','sequelize','exports','VIRTUAL'];(function(_0x181a83,_0x5a56b5){var _0x548e46=function(_0x2acdef){while(--_0x2acdef){_0x181a83['push'](_0x181a83['shift']());}};_0x548e46(++_0x5a56b5);}(_0xebee,0x142));var _0xeebe=function(_0x5fd895,_0x32ac4e){_0x5fd895=_0x5fd895-0x0;var _0x1f2f90=_0xebee[_0x5fd895];return _0x1f2f90;};'use strict';var Sequelize=require(_0xeebe('0x0'));module[_0xeebe('0x1')]={'name':{'type':Sequelize[_0xeebe('0x2')],'get':function(_0x7be82e){return this[_0xeebe('0x3')]('field');}},'field':{'type':Sequelize[_0xeebe('0x4')],'allowNull':![]},'operator':{'type':Sequelize[_0xeebe('0x4')],'allowNull':![]},'value':{'type':Sequelize[_0xeebe('0x4')],'allowNull':![]}};
\ No newline at end of file
index 6956353..8abc868 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa8ec=['querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','apply','save','update','then','stack','name','send','body','Condition','params','catch','destroy','find','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','to-csv','ejs','lodash','squel','crypto','jsforce'];(function(_0x1232ec,_0x2df4b1){var _0x4483b4=function(_0x39bfff){while(--_0x39bfff){_0x1232ec['push'](_0x1232ec['shift']());}};_0x4483b4(++_0x2df4b1);}(_0xa8ec,0x71));var _0xca8e=function(_0x36ed48,_0x1ee0d4){_0x36ed48=_0x36ed48-0x0;var _0x51c63a=_0xa8ec[_0x36ed48];return _0x51c63a;};'use strict';var pdf=require(_0xca8e('0x0'));var emlformat=require(_0xca8e('0x1'));var rimraf=require(_0xca8e('0x2'));var zipdir=require(_0xca8e('0x3'));var jsonpatch=require(_0xca8e('0x4'));var rp=require(_0xca8e('0x5'));var moment=require('moment');var BPromise=require(_0xca8e('0x6'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0xca8e('0x7'));var ejs=require(_0xca8e('0x8'));var fs=require('fs');var _=require(_0xca8e('0x9'));var squel=require(_0xca8e('0xa'));var crypto=require(_0xca8e('0xb'));var jsforce=require(_0xca8e('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xca8e('0xd'));var Papa=require('papaparse');var Redis=require(_0xca8e('0xe'));var authService=require(_0xca8e('0xf'));var qs=require(_0xca8e('0x10'));var hardwareService=require(_0xca8e('0x11'));var logger=require('../../config/logger')(_0xca8e('0x12'));var utils=require(_0xca8e('0x13'));var config=require(_0xca8e('0x14'));var db=require(_0xca8e('0x15'))['db'];function respondWithStatusCode(_0x5e7cad,_0x2de500){_0x2de500=_0x2de500||0xcc;return function(_0x14630b){if(_0x14630b){return _0x5e7cad[_0xca8e('0x16')](_0x2de500);}return _0x5e7cad[_0xca8e('0x17')](_0x2de500)[_0xca8e('0x18')]();};}function respondWithResult(_0xc610c9,_0x519020){_0x519020=_0x519020||0xc8;return function(_0x15f1cf){if(_0x15f1cf){return _0xc610c9[_0xca8e('0x17')](_0x519020)[_0xca8e('0x19')](_0x15f1cf);}};}function respondWithFilteredResult(_0x4a64c9,_0x2615a4){return function(_0x4b26cb){if(_0x4b26cb){var _0x59278b=_0x4b26cb[_0xca8e('0x1a')],_0x1587ae=_0x2615a4[_0xca8e('0x1b')],_0x1290c0=_0x2615a4[_0xca8e('0x1b')]+_0x2615a4[_0xca8e('0x1c')],_0x43ec54;if(_0x1290c0>=_0x59278b){_0x1290c0=_0x59278b;_0x43ec54=0xc8;}else{_0x43ec54=0xce;}_0x4a64c9[_0xca8e('0x17')](_0x43ec54);return _0x4a64c9['set']('Content-Range',_0x1587ae+'-'+_0x1290c0+'/'+_0x59278b)['json'](_0x4b26cb);}return null;};}function patchUpdates(_0x1fe837){return function(_0x57d899){try{jsonpatch[_0xca8e('0x1d')](_0x57d899,_0x1fe837,!![]);}catch(_0x292c28){return BPromise['reject'](_0x292c28);}return _0x57d899[_0xca8e('0x1e')]();};}function saveUpdates(_0x6d831a,_0x320e39){return function(_0x14c1ea){if(_0x14c1ea){return _0x14c1ea[_0xca8e('0x1f')](_0x6d831a)[_0xca8e('0x20')](function(_0x5b03e0){return _0x5b03e0;});}return null;};}function removeEntity(_0xe4a18d,_0x21f90d){return function(_0x50a423){if(_0x50a423){return _0x50a423['destroy']()['then'](function(){_0xe4a18d[_0xca8e('0x17')](0xcc)[_0xca8e('0x18')]();});}};}function handleEntityNotFound(_0x3059da,_0x36107c){return function(_0x4be244){if(!_0x4be244){_0x3059da[_0xca8e('0x16')](0x194);}return _0x4be244;};}function handleError(_0x23f609,_0x5109a0){_0x5109a0=_0x5109a0||0x1f4;return function(_0x135e3a){logger['error'](_0x135e3a[_0xca8e('0x21')]);if(_0x135e3a[_0xca8e('0x22')]){delete _0x135e3a[_0xca8e('0x22')];}_0x23f609[_0xca8e('0x17')](_0x5109a0)[_0xca8e('0x23')](_0x135e3a);};}exports['update']=function(_0x16c703,_0x442563){if(_0x16c703['body']['id']){delete _0x16c703[_0xca8e('0x24')]['id'];}return db[_0xca8e('0x25')]['find']({'where':{'id':_0x16c703[_0xca8e('0x26')]['id']}})[_0xca8e('0x20')](handleEntityNotFound(_0x442563,null))[_0xca8e('0x20')](saveUpdates(_0x16c703[_0xca8e('0x24')],null))[_0xca8e('0x20')](respondWithResult(_0x442563,null))[_0xca8e('0x27')](handleError(_0x442563,null));};exports[_0xca8e('0x28')]=function(_0x25ebcd,_0x3613d1){return db['Condition'][_0xca8e('0x29')]({'where':{'id':_0x25ebcd[_0xca8e('0x26')]['id']}})[_0xca8e('0x20')](handleEntityNotFound(_0x3613d1,null))['then'](removeEntity(_0x3613d1,null))[_0xca8e('0x27')](handleError(_0x3613d1,null));};
\ No newline at end of file
+var _0xcf80=['send','body','Condition','params','find','catch','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','status','json','count','limit','set','Content-Range','apply','reject','save','update','then','destroy','end','sendStatus','error','stack','name'];(function(_0x1d1779,_0x284147){var _0x2377e9=function(_0x299f6f){while(--_0x299f6f){_0x1d1779['push'](_0x1d1779['shift']());}};_0x2377e9(++_0x284147);}(_0xcf80,0x148));var _0x0cf8=function(_0x1329a6,_0x1cc82b){_0x1329a6=_0x1329a6-0x0;var _0x4a7d38=_0xcf80[_0x1329a6];return _0x4a7d38;};'use strict';var pdf=require(_0x0cf8('0x0'));var emlformat=require(_0x0cf8('0x1'));var rimraf=require(_0x0cf8('0x2'));var zipdir=require(_0x0cf8('0x3'));var jsonpatch=require(_0x0cf8('0x4'));var rp=require(_0x0cf8('0x5'));var moment=require(_0x0cf8('0x6'));var BPromise=require(_0x0cf8('0x7'));var Mustache=require(_0x0cf8('0x8'));var util=require('util');var path=require(_0x0cf8('0x9'));var sox=require(_0x0cf8('0xa'));var csv=require(_0x0cf8('0xb'));var ejs=require(_0x0cf8('0xc'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x0cf8('0xd'));var jsforce=require(_0x0cf8('0xe'));var deskjs=require(_0x0cf8('0xf'));var toCsv=require(_0x0cf8('0xb'));var querystring=require(_0x0cf8('0x10'));var Papa=require(_0x0cf8('0x11'));var Redis=require(_0x0cf8('0x12'));var authService=require('../../components/auth/service');var qs=require(_0x0cf8('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x0cf8('0x14'))(_0x0cf8('0x15'));var utils=require(_0x0cf8('0x16'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xe1dd5,_0x3c22fe){_0x3c22fe=_0x3c22fe||0xcc;return function(_0x33e904){if(_0x33e904){return _0xe1dd5['sendStatus'](_0x3c22fe);}return _0xe1dd5['status'](_0x3c22fe)['end']();};}function respondWithResult(_0x80a1d1,_0x500b86){_0x500b86=_0x500b86||0xc8;return function(_0x1f7004){if(_0x1f7004){return _0x80a1d1[_0x0cf8('0x17')](_0x500b86)[_0x0cf8('0x18')](_0x1f7004);}};}function respondWithFilteredResult(_0x5d8fdf,_0x10d0ab){return function(_0x36393a){if(_0x36393a){var _0x509300=_0x36393a[_0x0cf8('0x19')],_0xf89189=_0x10d0ab['offset'],_0x5036fa=_0x10d0ab['offset']+_0x10d0ab[_0x0cf8('0x1a')],_0x162b4c;if(_0x5036fa>=_0x509300){_0x5036fa=_0x509300;_0x162b4c=0xc8;}else{_0x162b4c=0xce;}_0x5d8fdf[_0x0cf8('0x17')](_0x162b4c);return _0x5d8fdf[_0x0cf8('0x1b')](_0x0cf8('0x1c'),_0xf89189+'-'+_0x5036fa+'/'+_0x509300)[_0x0cf8('0x18')](_0x36393a);}return null;};}function patchUpdates(_0x3671ed){return function(_0x55679b){try{jsonpatch[_0x0cf8('0x1d')](_0x55679b,_0x3671ed,!![]);}catch(_0x3f6948){return BPromise[_0x0cf8('0x1e')](_0x3f6948);}return _0x55679b[_0x0cf8('0x1f')]();};}function saveUpdates(_0x311a61,_0x4a72ad){return function(_0x30d145){if(_0x30d145){return _0x30d145[_0x0cf8('0x20')](_0x311a61)[_0x0cf8('0x21')](function(_0x26423c){return _0x26423c;});}return null;};}function removeEntity(_0x28073a,_0x32e0b5){return function(_0x1f696b){if(_0x1f696b){return _0x1f696b[_0x0cf8('0x22')]()[_0x0cf8('0x21')](function(){_0x28073a['status'](0xcc)[_0x0cf8('0x23')]();});}};}function handleEntityNotFound(_0x457c1c,_0x14d827){return function(_0x1db14b){if(!_0x1db14b){_0x457c1c[_0x0cf8('0x24')](0x194);}return _0x1db14b;};}function handleError(_0xa525b9,_0x1d32ef){_0x1d32ef=_0x1d32ef||0x1f4;return function(_0x36892e){logger[_0x0cf8('0x25')](_0x36892e[_0x0cf8('0x26')]);if(_0x36892e['name']){delete _0x36892e[_0x0cf8('0x27')];}_0xa525b9[_0x0cf8('0x17')](_0x1d32ef)[_0x0cf8('0x28')](_0x36892e);};}exports[_0x0cf8('0x20')]=function(_0x1ab030,_0x3fd015){if(_0x1ab030[_0x0cf8('0x29')]['id']){delete _0x1ab030[_0x0cf8('0x29')]['id'];}return db[_0x0cf8('0x2a')]['find']({'where':{'id':_0x1ab030[_0x0cf8('0x2b')]['id']}})[_0x0cf8('0x21')](handleEntityNotFound(_0x3fd015,null))[_0x0cf8('0x21')](saveUpdates(_0x1ab030['body'],null))[_0x0cf8('0x21')](respondWithResult(_0x3fd015,null))['catch'](handleError(_0x3fd015,null));};exports['destroy']=function(_0xa24edd,_0x42091b){return db[_0x0cf8('0x2a')][_0x0cf8('0x2c')]({'where':{'id':_0xa24edd[_0x0cf8('0x2b')]['id']}})[_0x0cf8('0x21')](handleEntityNotFound(_0x42091b,null))['then'](removeEntity(_0x42091b,null))[_0x0cf8('0x2d')](handleError(_0x42091b,null));};
\ No newline at end of file
index 3c90098..6371d6f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x888a=['bluebird','request-promise','path','../../config/environment','exports','define','Condition','tools_conditions','util','../../config/logger','api','moment'];(function(_0x5de6ad,_0x51aa5d){var _0x3511bc=function(_0x357def){while(--_0x357def){_0x5de6ad['push'](_0x5de6ad['shift']());}};_0x3511bc(++_0x51aa5d);}(_0x888a,0x1f4));var _0xa888=function(_0x1902da,_0x1c465a){_0x1902da=_0x1902da-0x0;var _0x2fdcd7=_0x888a[_0x1902da];return _0x2fdcd7;};'use strict';var _=require('lodash');var util=require(_0xa888('0x0'));var logger=require(_0xa888('0x1'))(_0xa888('0x2'));var moment=require(_0xa888('0x3'));var BPromise=require(_0xa888('0x4'));var rp=require(_0xa888('0x5'));var fs=require('fs');var path=require(_0xa888('0x6'));var rimraf=require('rimraf');var config=require(_0xa888('0x7'));var attributes=require('./condition.attributes');module[_0xa888('0x8')]=function(_0x31da1a,_0x21a111){return _0x31da1a[_0xa888('0x9')](_0xa888('0xa'),attributes,{'tableName':_0xa888('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xdf17=['define','Condition','tools_conditions','lodash','util','../../config/logger','api','request-promise','rimraf','../../config/environment','./condition.attributes','exports'];(function(_0x5b21a2,_0x2c6461){var _0x57166b=function(_0x2c0c1a){while(--_0x2c0c1a){_0x5b21a2['push'](_0x5b21a2['shift']());}};_0x57166b(++_0x2c6461);}(_0xdf17,0x1d7));var _0x7df1=function(_0x297fd3,_0x115406){_0x297fd3=_0x297fd3-0x0;var _0x2af381=_0xdf17[_0x297fd3];return _0x2af381;};'use strict';var _=require(_0x7df1('0x0'));var util=require(_0x7df1('0x1'));var logger=require(_0x7df1('0x2'))(_0x7df1('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x7df1('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x7df1('0x5'));var config=require(_0x7df1('0x6'));var attributes=require(_0x7df1('0x7'));module[_0x7df1('0x8')]=function(_0xce6460,_0x3c23eb){return _0xce6460[_0x7df1('0x9')](_0x7df1('0xa'),attributes,{'tableName':_0x7df1('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 99ba292..c164977 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6ace=['debug','Condition,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','info','result','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','Condition,\x20%s,\x20%s'];(function(_0x5f5720,_0x5445c3){var _0x4a1e70=function(_0x4d3290){while(--_0x4d3290){_0x5f5720['push'](_0x5f5720['shift']());}};_0x4a1e70(++_0x5445c3);}(_0x6ace,0x105));var _0xe6ac=function(_0xb1ee0e,_0x2126df){_0xb1ee0e=_0xb1ee0e-0x0;var _0x376116=_0x6ace[_0xb1ee0e];return _0x376116;};'use strict';var _=require(_0xe6ac('0x0'));var util=require(_0xe6ac('0x1'));var moment=require(_0xe6ac('0x2'));var BPromise=require(_0xe6ac('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xe6ac('0x4'));var db=require(_0xe6ac('0x5'))['db'];var utils=require(_0xe6ac('0x6'));var logger=require(_0xe6ac('0x7'))(_0xe6ac('0x8'));var config=require(_0xe6ac('0x9'));var jayson=require(_0xe6ac('0xa'));var client=jayson['client'][_0xe6ac('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x3ff63d,_0xe54729,_0x48cd43){return new BPromise(function(_0x8a5a0f,_0x159abc){return client[_0xe6ac('0xc')](_0x3ff63d,_0x48cd43)[_0xe6ac('0xd')](function(_0x511204){logger['info'](_0xe6ac('0xe'),_0xe54729,'request\x20sent');logger[_0xe6ac('0xf')](_0xe6ac('0x10'),_0xe54729,_0xe6ac('0x11'),JSON[_0xe6ac('0x12')](_0x511204));if(_0x511204['error']){if(_0x511204[_0xe6ac('0x13')]['code']===0x1f4){logger[_0xe6ac('0x13')](_0xe6ac('0xe'),_0xe54729,_0x511204[_0xe6ac('0x13')]['message']);return _0x159abc(_0x511204['error'][_0xe6ac('0x14')]);}logger['error']('Condition,\x20%s,\x20%s',_0xe54729,_0x511204[_0xe6ac('0x13')]['message']);return _0x8a5a0f(_0x511204['error'][_0xe6ac('0x14')]);}else{logger[_0xe6ac('0x15')](_0xe6ac('0xe'),_0xe54729,_0xe6ac('0x11'));_0x8a5a0f(_0x511204[_0xe6ac('0x16')][_0xe6ac('0x14')]);}})['catch'](function(_0x5eb6a8){logger[_0xe6ac('0x13')](_0xe6ac('0xe'),_0xe54729,_0x5eb6a8);_0x159abc(_0x5eb6a8);});});}
\ No newline at end of file
+var _0xec2a=['message','result','catch','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','info','request\x20sent','debug','Condition,\x20%s,\x20%s,\x20%s','stringify','error','code','Condition,\x20%s,\x20%s'];(function(_0x39ef73,_0x41c3eb){var _0x274e9f=function(_0x56bc33){while(--_0x56bc33){_0x39ef73['push'](_0x39ef73['shift']());}};_0x274e9f(++_0x41c3eb);}(_0xec2a,0x100));var _0xaec2=function(_0x2a0739,_0x148e11){_0x2a0739=_0x2a0739-0x0;var _0x2c0f19=_0xec2a[_0x2a0739];return _0x2c0f19;};'use strict';var _=require(_0xaec2('0x0'));var util=require(_0xaec2('0x1'));var moment=require('moment');var BPromise=require(_0xaec2('0x2'));var rs=require(_0xaec2('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xaec2('0x4'))['db'];var utils=require(_0xaec2('0x5'));var logger=require(_0xaec2('0x6'))(_0xaec2('0x7'));var config=require(_0xaec2('0x8'));var jayson=require(_0xaec2('0x9'));var client=jayson[_0xaec2('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3e7fcf,_0x4dd69c,_0x12ea60){return new BPromise(function(_0x29c547,_0x1b4416){return client[_0xaec2('0xb')](_0x3e7fcf,_0x12ea60)['then'](function(_0xd13ec1){logger[_0xaec2('0xc')]('Condition,\x20%s,\x20%s',_0x4dd69c,_0xaec2('0xd'));logger[_0xaec2('0xe')](_0xaec2('0xf'),_0x4dd69c,_0xaec2('0xd'),JSON[_0xaec2('0x10')](_0xd13ec1));if(_0xd13ec1[_0xaec2('0x11')]){if(_0xd13ec1[_0xaec2('0x11')][_0xaec2('0x12')]===0x1f4){logger[_0xaec2('0x11')](_0xaec2('0x13'),_0x4dd69c,_0xd13ec1[_0xaec2('0x11')][_0xaec2('0x14')]);return _0x1b4416(_0xd13ec1['error']['message']);}logger[_0xaec2('0x11')](_0xaec2('0x13'),_0x4dd69c,_0xd13ec1[_0xaec2('0x11')]['message']);return _0x29c547(_0xd13ec1[_0xaec2('0x11')][_0xaec2('0x14')]);}else{logger[_0xaec2('0xc')](_0xaec2('0x13'),_0x4dd69c,'request\x20sent');_0x29c547(_0xd13ec1[_0xaec2('0x15')][_0xaec2('0x14')]);}})[_0xaec2('0x16')](function(_0x33628b){logger[_0xaec2('0x11')]('Condition,\x20%s,\x20%s',_0x4dd69c,_0x33628b);_0x1b4416(_0x33628b);});});}
\ No newline at end of file
index 0995ee9..bbcb6ec 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3fdc=['multer','connect-timeout','express','../../components/auth/service','../../config/environment','./condition.controller','put','/:id','isAuthenticated','update','delete','destroy','exports'];(function(_0x3f8d12,_0x388aba){var _0x647228=function(_0xc4981a){while(--_0xc4981a){_0x3f8d12['push'](_0x3f8d12['shift']());}};_0x647228(++_0x388aba);}(_0x3fdc,0x68));var _0xc3fd=function(_0x33e7e8,_0xd561da){_0x33e7e8=_0x33e7e8-0x0;var _0x379242=_0x3fdc[_0x33e7e8];return _0x379242;};'use strict';var multer=require(_0xc3fd('0x0'));var util=require('util');var path=require('path');var timeout=require(_0xc3fd('0x1'));var express=require(_0xc3fd('0x2'));var router=express['Router']();var auth=require(_0xc3fd('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0xc3fd('0x4'));var controller=require(_0xc3fd('0x5'));router[_0xc3fd('0x6')](_0xc3fd('0x7'),auth[_0xc3fd('0x8')](),controller[_0xc3fd('0x9')]);router[_0xc3fd('0xa')](_0xc3fd('0x7'),auth[_0xc3fd('0x8')](),controller[_0xc3fd('0xb')]);module[_0xc3fd('0xc')]=router;
\ No newline at end of file
+var _0x70cc=['../../components/interaction/service','../../config/environment','put','/:id','update','delete','isAuthenticated','multer','util','path','express','Router','../../components/auth/service'];(function(_0x4148fa,_0x2100a0){var _0x33df58=function(_0x50c5c3){while(--_0x50c5c3){_0x4148fa['push'](_0x4148fa['shift']());}};_0x33df58(++_0x2100a0);}(_0x70cc,0x125));var _0xc70c=function(_0x38537f,_0x252124){_0x38537f=_0x38537f-0x0;var _0x141e23=_0x70cc[_0x38537f];return _0x141e23;};'use strict';var multer=require(_0xc70c('0x0'));var util=require(_0xc70c('0x1'));var path=require(_0xc70c('0x2'));var timeout=require('connect-timeout');var express=require(_0xc70c('0x3'));var router=express[_0xc70c('0x4')]();var auth=require(_0xc70c('0x5'));var interaction=require(_0xc70c('0x6'));var config=require(_0xc70c('0x7'));var controller=require('./condition.controller');router[_0xc70c('0x8')](_0xc70c('0x9'),auth['isAuthenticated'](),controller[_0xc70c('0xa')]);router[_0xc70c('0xb')](_0xc70c('0x9'),auth[_0xc70c('0xc')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 3153104..4fc381f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf7ca=['name','exports','STRING'];(function(_0x2a67e7,_0x55bf7a){var _0x5c483d=function(_0x245abd){while(--_0x245abd){_0x2a67e7['push'](_0x2a67e7['shift']());}};_0x5c483d(++_0x55bf7a);}(_0xf7ca,0x1cc));var _0xaf7c=function(_0xfe1a0b,_0x46695a){_0xfe1a0b=_0xfe1a0b-0x0;var _0xac233e=_0xf7ca[_0xfe1a0b];return _0xac233e;};'use strict';var Sequelize=require('sequelize');module[_0xaf7c('0x0')]={'name':{'type':Sequelize[_0xaf7c('0x1')],'allowNull':![],'unique':_0xaf7c('0x2')},'description':{'type':Sequelize[_0xaf7c('0x1')]}};
\ No newline at end of file
+var _0x9274=['STRING'];(function(_0x4ddb99,_0x3152bb){var _0x34fed2=function(_0x158302){while(--_0x158302){_0x4ddb99['push'](_0x4ddb99['shift']());}};_0x34fed2(++_0x3152bb);}(_0x9274,0x130));var _0x4927=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0x9274[_0x5b644e];return _0x49c6bf;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize['STRING'],'allowNull':![],'unique':'name'},'description':{'type':Sequelize[_0x4927('0x0')]}};
\ No newline at end of file
index 7107e0a..f51d393 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5c5e=['include','findAll','rows','catch','show','intersection','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','omit','updatedAt','params','type','iframe','attrUrl','attrs','value','custom','attrPath','attrHourFormat','HH:mm:ss','attrTimezone','attrFontSize','counter','attrMetric','total','attrVoiceQueues','multibar-chart','pie-chart','attrSerie1','attrSerie2','attrSerie3','web-report','attrReport','reportType','attrRefresh','widgetAttributes:\x20%s','stringify','addItem','DashboardId','DashboardItem','getItems','findOne','html-pdf','eml-format','rimraf','request-promise','moment','bluebird','mustache','path','to-csv','ejs','crypto','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/environment','../../mysqldb','defaults','redis','localhost','socket.io-emitter','./dashboard.socket','register','sendStatus','end','json','count','offset','limit','status','apply','save','update','destroy','get','CustomDashboards','UserProfileResource','then','error','stack','name','send','index','Dashboard','rawAttributes','model','keys','query','filters','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','key','field','options','includeAll'];(function(_0x294ebc,_0x32ee52){var _0x1087bd=function(_0x50dbf9){while(--_0x50dbf9){_0x294ebc['push'](_0x294ebc['shift']());}};_0x1087bd(++_0x32ee52);}(_0x5c5e,0x194));var _0xe5c5=function(_0x8fc26d,_0x2335ea){_0x8fc26d=_0x8fc26d-0x0;var _0x8e7068=_0x5c5e[_0x8fc26d];return _0x8e7068;};'use strict';var pdf=require(_0xe5c5('0x0'));var emlformat=require(_0xe5c5('0x1'));var rimraf=require(_0xe5c5('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0xe5c5('0x3'));var moment=require(_0xe5c5('0x4'));var BPromise=require(_0xe5c5('0x5'));var Mustache=require(_0xe5c5('0x6'));var util=require('util');var path=require(_0xe5c5('0x7'));var sox=require('sox');var csv=require(_0xe5c5('0x8'));var ejs=require(_0xe5c5('0x9'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xe5c5('0xa'));var jsforce=require('jsforce');var deskjs=require(_0xe5c5('0xb'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xe5c5('0xc'));var Redis=require(_0xe5c5('0xd'));var authService=require(_0xe5c5('0xe'));var qs=require(_0xe5c5('0xf'));var hardwareService=require(_0xe5c5('0x10'));var logger=require(_0xe5c5('0x11'))('api');var utils=require('../../config/utils');var config=require(_0xe5c5('0x12'));var db=require(_0xe5c5('0x13'))['db'];config['redis']=_[_0xe5c5('0x14')](config[_0xe5c5('0x15')],{'host':_0xe5c5('0x16'),'port':0x18eb});var socket=require(_0xe5c5('0x17'))(new Redis(config[_0xe5c5('0x15')]));require(_0xe5c5('0x18'))[_0xe5c5('0x19')](socket);function respondWithStatusCode(_0x2100b0,_0x13a2d0){_0x13a2d0=_0x13a2d0||0xcc;return function(_0x3ef75b){if(_0x3ef75b){return _0x2100b0[_0xe5c5('0x1a')](_0x13a2d0);}return _0x2100b0['status'](_0x13a2d0)[_0xe5c5('0x1b')]();};}function respondWithResult(_0x39b2fe,_0x29d8ae){_0x29d8ae=_0x29d8ae||0xc8;return function(_0x14fc97){if(_0x14fc97){return _0x39b2fe['status'](_0x29d8ae)[_0xe5c5('0x1c')](_0x14fc97);}};}function respondWithFilteredResult(_0x379348,_0x3ed297){return function(_0x318986){if(_0x318986){var _0xd48180=_0x318986[_0xe5c5('0x1d')],_0x2794a7=_0x3ed297['offset'],_0x4ce74e=_0x3ed297[_0xe5c5('0x1e')]+_0x3ed297[_0xe5c5('0x1f')],_0x3dfd33;if(_0x4ce74e>=_0xd48180){_0x4ce74e=_0xd48180;_0x3dfd33=0xc8;}else{_0x3dfd33=0xce;}_0x379348[_0xe5c5('0x20')](_0x3dfd33);return _0x379348['set']('Content-Range',_0x2794a7+'-'+_0x4ce74e+'/'+_0xd48180)[_0xe5c5('0x1c')](_0x318986);}return null;};}function patchUpdates(_0x13c6b8){return function(_0x162f71){try{jsonpatch[_0xe5c5('0x21')](_0x162f71,_0x13c6b8,!![]);}catch(_0x402924){return BPromise['reject'](_0x402924);}return _0x162f71[_0xe5c5('0x22')]();};}function saveUpdates(_0x209c24,_0x4b3bc5){return function(_0x3221fc){if(_0x3221fc){return _0x3221fc[_0xe5c5('0x23')](_0x209c24)['then'](function(_0x46f4f9){return _0x46f4f9;});}return null;};}function removeEntity(_0x972fcd,_0x4c1f42){return function(_0x5a5811){if(_0x5a5811){return _0x5a5811[_0xe5c5('0x24')]()['then'](function(){var _0x35e5e9=_0x5a5811[_0xe5c5('0x25')]({'plain':!![]});var _0x3c2031=_0xe5c5('0x26');return db[_0xe5c5('0x27')][_0xe5c5('0x24')]({'where':{'type':_0x3c2031,'resourceId':_0x35e5e9['id']}})[_0xe5c5('0x28')](function(){return _0x5a5811;});})['then'](function(){_0x972fcd[_0xe5c5('0x20')](0xcc)[_0xe5c5('0x1b')]();});}};}function handleEntityNotFound(_0x364d72,_0x1a571f){return function(_0x54d83d){if(!_0x54d83d){_0x364d72[_0xe5c5('0x1a')](0x194);}return _0x54d83d;};}function handleError(_0x3b02da,_0x3635a1){_0x3635a1=_0x3635a1||0x1f4;return function(_0x58da9f){logger[_0xe5c5('0x29')](_0x58da9f[_0xe5c5('0x2a')]);if(_0x58da9f[_0xe5c5('0x2b')]){delete _0x58da9f[_0xe5c5('0x2b')];}_0x3b02da[_0xe5c5('0x20')](_0x3635a1)[_0xe5c5('0x2c')](_0x58da9f);};}exports[_0xe5c5('0x2d')]=function(_0x200e9b,_0x18bfd2){var _0x53bc3b={},_0x2d849d={},_0xaab773={'count':0x0,'rows':[]};var _0xe6ae3c=db[_0xe5c5('0x2e')][_0xe5c5('0x2f')];_0x2d849d[_0xe5c5('0x30')]=_[_0xe5c5('0x31')](_0xe6ae3c);_0x2d849d[_0xe5c5('0x32')]=_[_0xe5c5('0x31')](_0x200e9b[_0xe5c5('0x32')]);_0x2d849d[_0xe5c5('0x33')]=_['intersection'](_0x2d849d[_0xe5c5('0x30')],_0x2d849d[_0xe5c5('0x32')]);_0x53bc3b[_0xe5c5('0x34')]=_['intersection'](_0x2d849d[_0xe5c5('0x30')],qs[_0xe5c5('0x35')](_0x200e9b[_0xe5c5('0x32')][_0xe5c5('0x35')]));_0x53bc3b[_0xe5c5('0x34')]=_0x53bc3b[_0xe5c5('0x34')][_0xe5c5('0x36')]?_0x53bc3b[_0xe5c5('0x34')]:_0x2d849d[_0xe5c5('0x30')];if(!_0x200e9b[_0xe5c5('0x32')][_0xe5c5('0x37')](_0xe5c5('0x38'))){_0x53bc3b[_0xe5c5('0x1f')]=qs[_0xe5c5('0x1f')](_0x200e9b['query'][_0xe5c5('0x1f')]);_0x53bc3b['offset']=qs[_0xe5c5('0x1e')](_0x200e9b[_0xe5c5('0x32')][_0xe5c5('0x1e')]);}_0x53bc3b[_0xe5c5('0x39')]=qs[_0xe5c5('0x3a')](_0x200e9b[_0xe5c5('0x32')][_0xe5c5('0x3a')]);_0x53bc3b[_0xe5c5('0x3b')]=qs[_0xe5c5('0x33')](_[_0xe5c5('0x3c')](_0x200e9b[_0xe5c5('0x32')],_0x2d849d[_0xe5c5('0x33')]));if(_0x200e9b[_0xe5c5('0x32')][_0xe5c5('0x3d')]){_0x53bc3b['where']=_[_0xe5c5('0x3e')](_0x53bc3b[_0xe5c5('0x3b')],{'$or':_[_0xe5c5('0x3f')](_0xe6ae3c,function(_0x5692a9){if(_0x5692a9['type'][_0xe5c5('0x40')]!=='VIRTUAL'){var _0x30f7c7={};_0x30f7c7[_0x5692a9[_0xe5c5('0x41')]]={'$like':'%'+_0x200e9b[_0xe5c5('0x32')]['filter']+'%'};return _0x30f7c7;}})});}_0x53bc3b=_[_0xe5c5('0x3e')]({},_0x53bc3b,_0x200e9b[_0xe5c5('0x42')]);var _0xc3179e={'where':_0x53bc3b[_0xe5c5('0x3b')]};return db[_0xe5c5('0x2e')][_0xe5c5('0x1d')](_0xc3179e)[_0xe5c5('0x28')](function(_0x343528){_0xaab773['count']=_0x343528;if(_0x200e9b['query'][_0xe5c5('0x43')]){_0x53bc3b[_0xe5c5('0x44')]=[{'all':!![]}];}return db[_0xe5c5('0x2e')][_0xe5c5('0x45')](_0x53bc3b);})['then'](function(_0x257399){_0xaab773[_0xe5c5('0x46')]=_0x257399;return _0xaab773;})['then'](respondWithFilteredResult(_0x18bfd2,_0x53bc3b))[_0xe5c5('0x47')](handleError(_0x18bfd2,null));};exports[_0xe5c5('0x48')]=function(_0x45fcc5,_0x4e32c){var _0xccf016={'raw':![],'where':{'id':_0x45fcc5['params']['id']}},_0x4d82e0={};_0x4d82e0[_0xe5c5('0x30')]=_[_0xe5c5('0x31')](db[_0xe5c5('0x2e')][_0xe5c5('0x2f')]);_0x4d82e0[_0xe5c5('0x32')]=_[_0xe5c5('0x31')](_0x45fcc5[_0xe5c5('0x32')]);_0x4d82e0['filters']=_[_0xe5c5('0x49')](_0x4d82e0[_0xe5c5('0x30')],_0x4d82e0[_0xe5c5('0x32')]);_0xccf016[_0xe5c5('0x34')]=_[_0xe5c5('0x49')](_0x4d82e0[_0xe5c5('0x30')],qs[_0xe5c5('0x35')](_0x45fcc5[_0xe5c5('0x32')][_0xe5c5('0x35')]));_0xccf016[_0xe5c5('0x34')]=_0xccf016[_0xe5c5('0x34')][_0xe5c5('0x36')]?_0xccf016['attributes']:_0x4d82e0[_0xe5c5('0x30')];if(_0x45fcc5[_0xe5c5('0x32')]['includeAll']){_0xccf016[_0xe5c5('0x44')]=[{'all':!![]}];}_0xccf016=_[_0xe5c5('0x3e')]({},_0xccf016,_0x45fcc5[_0xe5c5('0x42')]);return db[_0xe5c5('0x2e')][_0xe5c5('0x4a')](_0xccf016)['then'](handleEntityNotFound(_0x4e32c,null))['then'](respondWithResult(_0x4e32c,null))[_0xe5c5('0x47')](handleError(_0x4e32c,null));};exports[_0xe5c5('0x4b')]=function(_0x4ff990,_0x5d213e){return db[_0xe5c5('0x2e')]['create'](_0x4ff990[_0xe5c5('0x4c')],{})[_0xe5c5('0x28')](function(_0x44c9e3){var _0x4b76f7=_0x4ff990[_0xe5c5('0x4d')][_0xe5c5('0x25')]({'plain':!![]});if(!_0x4b76f7)throw new Error(_0xe5c5('0x4e'));if(_0x4b76f7[_0xe5c5('0x4f')]===_0xe5c5('0x4d')){var _0x29fc7f=_0x44c9e3['get']({'plain':!![]});var _0x15e675=_0xe5c5('0x26');return db['UserProfileSection'][_0xe5c5('0x4a')]({'where':{'name':_0x15e675,'userProfileId':_0x4b76f7[_0xe5c5('0x50')]},'raw':!![]})[_0xe5c5('0x28')](function(_0x30de22){if(_0x30de22&&_0x30de22[_0xe5c5('0x51')]===0x0){return db[_0xe5c5('0x27')][_0xe5c5('0x4b')]({'name':_0x29fc7f['name'],'resourceId':_0x29fc7f['id'],'type':_0x30de22['name'],'sectionId':_0x30de22['id']},{})[_0xe5c5('0x28')](function(){return _0x44c9e3;});}else{return _0x44c9e3;}})['catch'](function(_0x5070e0){logger[_0xe5c5('0x29')](_0xe5c5('0x52'),_0x5070e0);throw _0x5070e0;});}return _0x44c9e3;})['then'](respondWithResult(_0x5d213e,0xc9))[_0xe5c5('0x47')](handleError(_0x5d213e,null));};exports[_0xe5c5('0x53')]=function(_0x2b6b3e,_0x47cdee){var _0x543feb={'raw':![],'where':{'id':_0x2b6b3e['params']['id']}},_0x181486={};_0x181486['model']=_['keys'](db[_0xe5c5('0x2e')][_0xe5c5('0x2f')]);_0x543feb[_0xe5c5('0x34')]=_[_0xe5c5('0x49')](_0x181486[_0xe5c5('0x30')],qs[_0xe5c5('0x35')](_0x2b6b3e[_0xe5c5('0x32')]['fields']));_0x543feb[_0xe5c5('0x34')]=_0x543feb[_0xe5c5('0x34')][_0xe5c5('0x36')]?_0x543feb[_0xe5c5('0x34')]:_0x181486[_0xe5c5('0x30')];if(_0x2b6b3e[_0xe5c5('0x32')][_0xe5c5('0x43')]){_0x543feb['include']=[{'all':!![]}];}_0x543feb=_['merge']({},_0x543feb,_0x2b6b3e['options']);return db['Dashboard'][_0xe5c5('0x4a')](_0x543feb)['then'](handleEntityNotFound(_0x47cdee,null))[_0xe5c5('0x28')](function(_0x9cd622){if(_0x9cd622){var _0x3c0b2b=_0x9cd622[_0xe5c5('0x25')]({'plain':!![]});_0x3c0b2b=qs[_0xe5c5('0x54')](_0x3c0b2b,['id','createdAt','updatedAt']);_0x2b6b3e[_0xe5c5('0x4c')]=_[_0xe5c5('0x54')](_0x2b6b3e['body'],['id','createdAt',_0xe5c5('0x55')]);return db[_0xe5c5('0x2e')][_0xe5c5('0x4b')](_['merge'](_0x3c0b2b,_0x2b6b3e[_0xe5c5('0x4c')]),{'include':_0x2b6b3e['query'][_0xe5c5('0x43')]?[{'all':!![]}]:undefined})['then'](function(_0x111c40){var _0xe419e7=_0x2b6b3e[_0xe5c5('0x4d')][_0xe5c5('0x25')]({'plain':!![]});if(!_0xe419e7)throw new Error(_0xe5c5('0x4e'));if(_0xe419e7['role']===_0xe5c5('0x4d')){var _0x87a703=_0x111c40[_0xe5c5('0x25')]({'plain':!![]});var _0x48bdc4='CustomDashboards';return db['UserProfileSection'][_0xe5c5('0x4a')]({'where':{'name':_0x48bdc4,'userProfileId':_0xe419e7[_0xe5c5('0x50')]},'raw':!![]})[_0xe5c5('0x28')](function(_0x554814){if(_0x554814&&_0x554814[_0xe5c5('0x51')]===0x0){return db[_0xe5c5('0x27')]['create']({'name':_0x87a703[_0xe5c5('0x2b')],'resourceId':_0x87a703['id'],'type':_0x554814[_0xe5c5('0x2b')],'sectionId':_0x554814['id']},{})[_0xe5c5('0x28')](function(){return _0x111c40;});}else{return _0x111c40;}})[_0xe5c5('0x47')](function(_0x275094){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x275094);throw _0x275094;});}return _0x111c40;});}})[_0xe5c5('0x28')](respondWithResult(_0x47cdee,0xc9))[_0xe5c5('0x47')](handleError(_0x47cdee,null));};exports[_0xe5c5('0x23')]=function(_0x504af2,_0x495590){if(_0x504af2[_0xe5c5('0x4c')]['id']){delete _0x504af2['body']['id'];}return db[_0xe5c5('0x2e')][_0xe5c5('0x4a')]({'where':{'id':_0x504af2[_0xe5c5('0x56')]['id']}})['then'](handleEntityNotFound(_0x495590,null))[_0xe5c5('0x28')](saveUpdates(_0x504af2['body'],null))[_0xe5c5('0x28')](respondWithResult(_0x495590,null))[_0xe5c5('0x47')](handleError(_0x495590,null));};exports[_0xe5c5('0x24')]=function(_0x9f5b89,_0x2efd51){return db['Dashboard'][_0xe5c5('0x4a')]({'where':{'id':_0x9f5b89[_0xe5c5('0x56')]['id']}})[_0xe5c5('0x28')](handleEntityNotFound(_0x2efd51,null))[_0xe5c5('0x28')](removeEntity(_0x2efd51,null))[_0xe5c5('0x47')](handleError(_0x2efd51,null));};function widgetAttributes(_0x16b4ca){try{switch(_0x16b4ca[_0xe5c5('0x57')]){case _0xe5c5('0x58'):return[{'name':_0xe5c5('0x59'),'value':_0x16b4ca[_0xe5c5('0x59')]||(_0x16b4ca[_0xe5c5('0x5a')]&&_0x16b4ca[_0xe5c5('0x5a')][0x0]?_0x16b4ca[_0xe5c5('0x5a')][0x0][_0xe5c5('0x5b')]:undefined)||'https://'}];case _0xe5c5('0x5c'):return[{'name':_0xe5c5('0x5d'),'value':_0x16b4ca[_0xe5c5('0x5d')]||(_0x16b4ca['attrs']&&_0x16b4ca[_0xe5c5('0x5a')][0x0]?_0x16b4ca[_0xe5c5('0x5a')][0x0][_0xe5c5('0x5b')]:undefined)||''}];case'clock':return[{'name':'attrHourFormat','value':_0x16b4ca[_0xe5c5('0x5e')]||(_0x16b4ca[_0xe5c5('0x5a')]&&_0x16b4ca['attrs'][0x0]?_0x16b4ca['attrs'][0x0][_0xe5c5('0x5b')]:undefined)||_0xe5c5('0x5f')},{'name':_0xe5c5('0x60'),'value':_0x16b4ca[_0xe5c5('0x60')]||(_0x16b4ca[_0xe5c5('0x5a')]&&_0x16b4ca[_0xe5c5('0x5a')][0x1]?_0x16b4ca[_0xe5c5('0x5a')][0x1]['value']:undefined)||'0.00'},{'name':_0xe5c5('0x61'),'value':_0x16b4ca['attrFontSize']||(_0x16b4ca['attrs']&&_0x16b4ca[_0xe5c5('0x5a')][0x2]?_0x16b4ca[_0xe5c5('0x5a')][0x2]['value']:undefined)||0xc}];case _0xe5c5('0x62'):return[{'name':_0xe5c5('0x63'),'value':_0x16b4ca[_0xe5c5('0x63')]||(_0x16b4ca[_0xe5c5('0x5a')]&&_0x16b4ca[_0xe5c5('0x5a')][0x0]?_0x16b4ca[_0xe5c5('0x5a')][0x0][_0xe5c5('0x5b')]:undefined)||_0xe5c5('0x64')},{'name':_0xe5c5('0x65'),'value':_0x16b4ca[_0xe5c5('0x65')]||(_0x16b4ca[_0xe5c5('0x5a')]&&_0x16b4ca[_0xe5c5('0x5a')][0x1]?_0x16b4ca[_0xe5c5('0x5a')][0x1][_0xe5c5('0x5b')]:undefined)||[]},{'name':'attrFontSize','value':_0x16b4ca[_0xe5c5('0x61')]||(_0x16b4ca[_0xe5c5('0x5a')]&&_0x16b4ca[_0xe5c5('0x5a')][0x2]?_0x16b4ca[_0xe5c5('0x5a')][0x2][_0xe5c5('0x5b')]:undefined)||0x14}];case _0xe5c5('0x66'):case _0xe5c5('0x67'):return[{'name':_0xe5c5('0x68'),'value':_0x16b4ca[_0xe5c5('0x68')]||(_0x16b4ca[_0xe5c5('0x5a')]&&_0x16b4ca[_0xe5c5('0x5a')][0x0]?_0x16b4ca[_0xe5c5('0x5a')][0x0][_0xe5c5('0x5b')]:undefined)||_0xe5c5('0x64')},{'name':_0xe5c5('0x69'),'value':_0x16b4ca[_0xe5c5('0x69')]||(_0x16b4ca[_0xe5c5('0x5a')]&&_0x16b4ca[_0xe5c5('0x5a')][0x1]?_0x16b4ca[_0xe5c5('0x5a')][0x1][_0xe5c5('0x5b')]:undefined)||null},{'name':_0xe5c5('0x6a'),'value':_0x16b4ca[_0xe5c5('0x6a')]||(_0x16b4ca[_0xe5c5('0x5a')]&&_0x16b4ca[_0xe5c5('0x5a')][0x2]?_0x16b4ca[_0xe5c5('0x5a')][0x2][_0xe5c5('0x5b')]:undefined)||null},{'name':_0xe5c5('0x65'),'value':_0x16b4ca[_0xe5c5('0x65')]||(_0x16b4ca[_0xe5c5('0x5a')]&&_0x16b4ca[_0xe5c5('0x5a')][0x3]?_0x16b4ca[_0xe5c5('0x5a')][0x3]['value']:undefined)||[]}];case _0xe5c5('0x6b'):return[{'name':_0xe5c5('0x6c'),'type':_0x16b4ca[_0xe5c5('0x6d')]||(_0x16b4ca[_0xe5c5('0x5a')]&&_0x16b4ca[_0xe5c5('0x5a')][0x0]?_0x16b4ca[_0xe5c5('0x5a')][0x0][_0xe5c5('0x57')]:undefined)||null,'value':_0x16b4ca[_0xe5c5('0x6c')]||(_0x16b4ca[_0xe5c5('0x5a')]&&_0x16b4ca[_0xe5c5('0x5a')][0x0]?_0x16b4ca[_0xe5c5('0x5a')][0x0][_0xe5c5('0x5b')]:undefined)||null},{'name':_0xe5c5('0x6e'),'value':_0x16b4ca['attrRefresh']||(_0x16b4ca[_0xe5c5('0x5a')]&&_0x16b4ca[_0xe5c5('0x5a')][0x1]?_0x16b4ca[_0xe5c5('0x5a')][0x1][_0xe5c5('0x5b')]:undefined)||0x0}];default:return[];}}catch(_0x4879ce){logger[_0xe5c5('0x29')](_0xe5c5('0x6f'),JSON[_0xe5c5('0x70')](_0x4879ce));return[];}}exports[_0xe5c5('0x71')]=function(_0x426c2,_0x2d0e38,_0x154644){if(_0x426c2[_0xe5c5('0x4c')]['id']){delete _0x426c2[_0xe5c5('0x4c')]['id'];}return db[_0xe5c5('0x2e')][_0xe5c5('0x4a')]({'where':{'id':_0x426c2[_0xe5c5('0x56')]['id']}})[_0xe5c5('0x28')](handleEntityNotFound(_0x2d0e38,null))[_0xe5c5('0x28')](function(_0x5a2ad7){if(_0x5a2ad7){_0x426c2[_0xe5c5('0x4c')][_0xe5c5('0x72')]=_0x5a2ad7['id'];_0x426c2[_0xe5c5('0x4c')][_0xe5c5('0x5a')]=widgetAttributes(_0x426c2[_0xe5c5('0x4c')]);return db[_0xe5c5('0x73')][_0xe5c5('0x4b')](_0x426c2[_0xe5c5('0x4c')]);}})['then'](respondWithResult(_0x2d0e38,null))[_0xe5c5('0x47')](handleError(_0x2d0e38,null));};exports[_0xe5c5('0x74')]=function(_0x25b646,_0x216804,_0x409d78){var _0x2222e8={};var _0x580be0={};var _0x43ad0c;var _0x35d902;return db[_0xe5c5('0x2e')][_0xe5c5('0x75')]({'where':{'id':_0x25b646[_0xe5c5('0x56')]['id']}})[_0xe5c5('0x28')](handleEntityNotFound(_0x216804,null))[_0xe5c5('0x28')](function(_0xeb5e39){if(_0xeb5e39){_0x43ad0c=_0xeb5e39;_0x580be0[_0xe5c5('0x30')]=_[_0xe5c5('0x31')](db['DashboardItem']['rawAttributes']);_0x580be0[_0xe5c5('0x32')]=_[_0xe5c5('0x31')](_0x25b646['query']);_0x580be0[_0xe5c5('0x33')]=_[_0xe5c5('0x49')](_0x580be0[_0xe5c5('0x30')],_0x580be0[_0xe5c5('0x32')]);_0x2222e8[_0xe5c5('0x34')]=_['intersection'](_0x580be0[_0xe5c5('0x30')],qs[_0xe5c5('0x35')](_0x25b646[_0xe5c5('0x32')]['fields']));_0x2222e8[_0xe5c5('0x34')]=_0x2222e8[_0xe5c5('0x34')][_0xe5c5('0x36')]?_0x2222e8[_0xe5c5('0x34')]:_0x580be0['model'];_0x2222e8['order']=qs[_0xe5c5('0x3a')](_0x25b646['query'][_0xe5c5('0x3a')]);_0x2222e8[_0xe5c5('0x3b')]=qs['filters'](_[_0xe5c5('0x3c')](_0x25b646[_0xe5c5('0x32')],_0x580be0[_0xe5c5('0x33')]));if(_0x25b646['query'][_0xe5c5('0x3d')]){_0x2222e8[_0xe5c5('0x3b')]=_[_0xe5c5('0x3e')](_0x2222e8['where'],{'$or':_[_0xe5c5('0x3f')](_0x2222e8[_0xe5c5('0x34')],function(_0x2cd000){var _0x1a6fb5={};_0x1a6fb5[_0x2cd000]={'$like':'%'+_0x25b646[_0xe5c5('0x32')][_0xe5c5('0x3d')]+'%'};return _0x1a6fb5;})});}_0x2222e8=_['merge']({},_0x2222e8,_0x25b646[_0xe5c5('0x42')]);return _0x43ad0c[_0xe5c5('0x74')](_0x2222e8);}})[_0xe5c5('0x28')](function(_0x9e431b){if(_0x9e431b){_0x35d902=_0x9e431b[_0xe5c5('0x36')];if(!_0x25b646[_0xe5c5('0x32')]['hasOwnProperty'](_0xe5c5('0x38'))){_0x2222e8[_0xe5c5('0x1f')]=qs[_0xe5c5('0x1f')](_0x25b646[_0xe5c5('0x32')][_0xe5c5('0x1f')]);_0x2222e8[_0xe5c5('0x1e')]=qs['offset'](_0x25b646[_0xe5c5('0x32')][_0xe5c5('0x1e')]);}return _0x43ad0c[_0xe5c5('0x74')](_0x2222e8);}})['then'](function(_0x4bcdde){if(_0x4bcdde){return _0x4bcdde?{'count':_0x35d902,'rows':_0x4bcdde}:null;}})[_0xe5c5('0x28')](respondWithResult(_0x216804,null))[_0xe5c5('0x47')](handleError(_0x216804,null));};
\ No newline at end of file
+var _0xbc53=['catch','show','params','rawAttributes','find','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','CustomDashboards','userProfileId','create','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','omit','createdAt','updatedAt','body','role','autoAssociation','iframe','attrUrl','attrs','value','https://','custom','attrPath','clock','attrHourFormat','HH:mm:ss','attrTimezone','0.00','counter','attrMetric','total','attrVoiceQueues','attrFontSize','pie-chart','attrSerie1','attrSerie2','attrSerie3','attrReport','attrRefresh','stringify','addItem','DashboardId','DashboardItem','getItems','findOne','pick','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','crypto','jsforce','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../mysqldb','redis','defaults','localhost','socket.io-emitter','status','offset','limit','set','Content-Range','apply','save','update','then','destroy','UserProfileResource','end','error','stack','name','index','Dashboard','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','count','includeAll','include','rows'];(function(_0x138adb,_0x193fee){var _0x1b27f2=function(_0x5e97a2){while(--_0x5e97a2){_0x138adb['push'](_0x138adb['shift']());}};_0x1b27f2(++_0x193fee);}(_0xbc53,0xa6));var _0x3bc5=function(_0x643c5f,_0x1fa3b8){_0x643c5f=_0x643c5f-0x0;var _0x3e9fcf=_0xbc53[_0x643c5f];return _0x3e9fcf;};'use strict';var pdf=require(_0x3bc5('0x0'));var emlformat=require(_0x3bc5('0x1'));var rimraf=require(_0x3bc5('0x2'));var zipdir=require(_0x3bc5('0x3'));var jsonpatch=require(_0x3bc5('0x4'));var rp=require(_0x3bc5('0x5'));var moment=require(_0x3bc5('0x6'));var BPromise=require(_0x3bc5('0x7'));var Mustache=require(_0x3bc5('0x8'));var util=require(_0x3bc5('0x9'));var path=require(_0x3bc5('0xa'));var sox=require(_0x3bc5('0xb'));var csv=require(_0x3bc5('0xc'));var ejs=require(_0x3bc5('0xd'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x3bc5('0xe'));var jsforce=require(_0x3bc5('0xf'));var deskjs=require('desk.js');var toCsv=require(_0x3bc5('0xc'));var querystring=require('querystring');var Papa=require(_0x3bc5('0x10'));var Redis=require(_0x3bc5('0x11'));var authService=require(_0x3bc5('0x12'));var qs=require(_0x3bc5('0x13'));var hardwareService=require(_0x3bc5('0x14'));var logger=require(_0x3bc5('0x15'))(_0x3bc5('0x16'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x3bc5('0x17'))['db'];config[_0x3bc5('0x18')]=_[_0x3bc5('0x19')](config[_0x3bc5('0x18')],{'host':_0x3bc5('0x1a'),'port':0x18eb});var socket=require(_0x3bc5('0x1b'))(new Redis(config[_0x3bc5('0x18')]));require('./dashboard.socket')['register'](socket);function respondWithStatusCode(_0x2df60f,_0x518164){_0x518164=_0x518164||0xcc;return function(_0x282fba){if(_0x282fba){return _0x2df60f['sendStatus'](_0x518164);}return _0x2df60f[_0x3bc5('0x1c')](_0x518164)['end']();};}function respondWithResult(_0x3d144b,_0x1de4a9){_0x1de4a9=_0x1de4a9||0xc8;return function(_0x5a5684){if(_0x5a5684){return _0x3d144b[_0x3bc5('0x1c')](_0x1de4a9)['json'](_0x5a5684);}};}function respondWithFilteredResult(_0x123e46,_0x47816b){return function(_0xe6ddb1){if(_0xe6ddb1){var _0x17c022=_0xe6ddb1['count'],_0x2ff7bf=_0x47816b['offset'],_0x3b505b=_0x47816b[_0x3bc5('0x1d')]+_0x47816b[_0x3bc5('0x1e')],_0x3e81ee;if(_0x3b505b>=_0x17c022){_0x3b505b=_0x17c022;_0x3e81ee=0xc8;}else{_0x3e81ee=0xce;}_0x123e46['status'](_0x3e81ee);return _0x123e46[_0x3bc5('0x1f')](_0x3bc5('0x20'),_0x2ff7bf+'-'+_0x3b505b+'/'+_0x17c022)['json'](_0xe6ddb1);}return null;};}function patchUpdates(_0x16e044){return function(_0x45c97b){try{jsonpatch[_0x3bc5('0x21')](_0x45c97b,_0x16e044,!![]);}catch(_0xd63952){return BPromise['reject'](_0xd63952);}return _0x45c97b[_0x3bc5('0x22')]();};}function saveUpdates(_0x4534ba,_0x1200fd){return function(_0x3a77ed){if(_0x3a77ed){return _0x3a77ed[_0x3bc5('0x23')](_0x4534ba)[_0x3bc5('0x24')](function(_0x47bbe8){return _0x47bbe8;});}return null;};}function removeEntity(_0x541722,_0x24c602){return function(_0x42f2e6){if(_0x42f2e6){return _0x42f2e6[_0x3bc5('0x25')]()['then'](function(){var _0x58fb0c=_0x42f2e6['get']({'plain':!![]});var _0x314565='CustomDashboards';return db[_0x3bc5('0x26')][_0x3bc5('0x25')]({'where':{'type':_0x314565,'resourceId':_0x58fb0c['id']}})[_0x3bc5('0x24')](function(){return _0x42f2e6;});})['then'](function(){_0x541722['status'](0xcc)[_0x3bc5('0x27')]();});}};}function handleEntityNotFound(_0x3a4ca1,_0x4c85b1){return function(_0x528526){if(!_0x528526){_0x3a4ca1['sendStatus'](0x194);}return _0x528526;};}function handleError(_0xb91358,_0x4389cc){_0x4389cc=_0x4389cc||0x1f4;return function(_0x202b7e){logger[_0x3bc5('0x28')](_0x202b7e[_0x3bc5('0x29')]);if(_0x202b7e['name']){delete _0x202b7e[_0x3bc5('0x2a')];}_0xb91358[_0x3bc5('0x1c')](_0x4389cc)['send'](_0x202b7e);};}exports[_0x3bc5('0x2b')]=function(_0x404739,_0x26cd64){var _0x301791={},_0x392bac={},_0x4606a8={'count':0x0,'rows':[]};var _0x4aaa08=db[_0x3bc5('0x2c')]['rawAttributes'];_0x392bac[_0x3bc5('0x2d')]=_[_0x3bc5('0x2e')](_0x4aaa08);_0x392bac[_0x3bc5('0x2f')]=_[_0x3bc5('0x2e')](_0x404739[_0x3bc5('0x2f')]);_0x392bac[_0x3bc5('0x30')]=_[_0x3bc5('0x31')](_0x392bac[_0x3bc5('0x2d')],_0x392bac[_0x3bc5('0x2f')]);_0x301791[_0x3bc5('0x32')]=_[_0x3bc5('0x31')](_0x392bac[_0x3bc5('0x2d')],qs[_0x3bc5('0x33')](_0x404739[_0x3bc5('0x2f')][_0x3bc5('0x33')]));_0x301791[_0x3bc5('0x32')]=_0x301791[_0x3bc5('0x32')][_0x3bc5('0x34')]?_0x301791['attributes']:_0x392bac[_0x3bc5('0x2d')];if(!_0x404739[_0x3bc5('0x2f')][_0x3bc5('0x35')](_0x3bc5('0x36'))){_0x301791[_0x3bc5('0x1e')]=qs[_0x3bc5('0x1e')](_0x404739[_0x3bc5('0x2f')][_0x3bc5('0x1e')]);_0x301791['offset']=qs[_0x3bc5('0x1d')](_0x404739[_0x3bc5('0x2f')][_0x3bc5('0x1d')]);}_0x301791[_0x3bc5('0x37')]=qs[_0x3bc5('0x38')](_0x404739['query']['sort']);_0x301791[_0x3bc5('0x39')]=qs['filters'](_['pick'](_0x404739['query'],_0x392bac[_0x3bc5('0x30')]));if(_0x404739['query'][_0x3bc5('0x3a')]){_0x301791[_0x3bc5('0x39')]=_[_0x3bc5('0x3b')](_0x301791[_0x3bc5('0x39')],{'$or':_[_0x3bc5('0x3c')](_0x4aaa08,function(_0x2f640e){if(_0x2f640e[_0x3bc5('0x3d')][_0x3bc5('0x3e')]!==_0x3bc5('0x3f')){var _0x35b1f1={};_0x35b1f1[_0x2f640e[_0x3bc5('0x40')]]={'$like':'%'+_0x404739[_0x3bc5('0x2f')]['filter']+'%'};return _0x35b1f1;}})});}_0x301791=_[_0x3bc5('0x3b')]({},_0x301791,_0x404739[_0x3bc5('0x41')]);var _0xd908f5={'where':_0x301791[_0x3bc5('0x39')]};return db[_0x3bc5('0x2c')][_0x3bc5('0x42')](_0xd908f5)[_0x3bc5('0x24')](function(_0x36787a){_0x4606a8[_0x3bc5('0x42')]=_0x36787a;if(_0x404739[_0x3bc5('0x2f')][_0x3bc5('0x43')]){_0x301791[_0x3bc5('0x44')]=[{'all':!![]}];}return db['Dashboard']['findAll'](_0x301791);})[_0x3bc5('0x24')](function(_0x45cce9){_0x4606a8[_0x3bc5('0x45')]=_0x45cce9;return _0x4606a8;})[_0x3bc5('0x24')](respondWithFilteredResult(_0x26cd64,_0x301791))[_0x3bc5('0x46')](handleError(_0x26cd64,null));};exports[_0x3bc5('0x47')]=function(_0x57701f,_0x3a99ce){var _0x57b828={'raw':![],'where':{'id':_0x57701f[_0x3bc5('0x48')]['id']}},_0x4c48ae={};_0x4c48ae[_0x3bc5('0x2d')]=_[_0x3bc5('0x2e')](db['Dashboard'][_0x3bc5('0x49')]);_0x4c48ae[_0x3bc5('0x2f')]=_[_0x3bc5('0x2e')](_0x57701f[_0x3bc5('0x2f')]);_0x4c48ae['filters']=_[_0x3bc5('0x31')](_0x4c48ae[_0x3bc5('0x2d')],_0x4c48ae[_0x3bc5('0x2f')]);_0x57b828[_0x3bc5('0x32')]=_['intersection'](_0x4c48ae[_0x3bc5('0x2d')],qs[_0x3bc5('0x33')](_0x57701f['query'][_0x3bc5('0x33')]));_0x57b828['attributes']=_0x57b828[_0x3bc5('0x32')][_0x3bc5('0x34')]?_0x57b828[_0x3bc5('0x32')]:_0x4c48ae['model'];if(_0x57701f['query']['includeAll']){_0x57b828['include']=[{'all':!![]}];}_0x57b828=_['merge']({},_0x57b828,_0x57701f[_0x3bc5('0x41')]);return db['Dashboard'][_0x3bc5('0x4a')](_0x57b828)[_0x3bc5('0x24')](handleEntityNotFound(_0x3a99ce,null))[_0x3bc5('0x24')](respondWithResult(_0x3a99ce,null))[_0x3bc5('0x46')](handleError(_0x3a99ce,null));};exports['create']=function(_0x1e1841,_0x528295){return db[_0x3bc5('0x2c')]['create'](_0x1e1841['body'],{})[_0x3bc5('0x24')](function(_0xe5225){var _0x358281=_0x1e1841[_0x3bc5('0x4b')][_0x3bc5('0x4c')]({'plain':!![]});if(!_0x358281)throw new Error(_0x3bc5('0x4d'));if(_0x358281['role']===_0x3bc5('0x4b')){var _0xdda5ce=_0xe5225[_0x3bc5('0x4c')]({'plain':!![]});var _0x17e7c=_0x3bc5('0x4e');return db['UserProfileSection'][_0x3bc5('0x4a')]({'where':{'name':_0x17e7c,'userProfileId':_0x358281[_0x3bc5('0x4f')]},'raw':!![]})[_0x3bc5('0x24')](function(_0xa3c373){if(_0xa3c373&&_0xa3c373['autoAssociation']===0x0){return db[_0x3bc5('0x26')][_0x3bc5('0x50')]({'name':_0xdda5ce[_0x3bc5('0x2a')],'resourceId':_0xdda5ce['id'],'type':_0xa3c373['name'],'sectionId':_0xa3c373['id']},{})[_0x3bc5('0x24')](function(){return _0xe5225;});}else{return _0xe5225;}})[_0x3bc5('0x46')](function(_0x36c95f){logger[_0x3bc5('0x28')](_0x3bc5('0x51'),_0x36c95f);throw _0x36c95f;});}return _0xe5225;})[_0x3bc5('0x24')](respondWithResult(_0x528295,0xc9))[_0x3bc5('0x46')](handleError(_0x528295,null));};exports['clone']=function(_0x9bff96,_0x4f211b){var _0x3167aa={'raw':![],'where':{'id':_0x9bff96[_0x3bc5('0x48')]['id']}},_0x411177={};_0x411177[_0x3bc5('0x2d')]=_['keys'](db['Dashboard'][_0x3bc5('0x49')]);_0x3167aa[_0x3bc5('0x32')]=_['intersection'](_0x411177[_0x3bc5('0x2d')],qs['fields'](_0x9bff96['query'][_0x3bc5('0x33')]));_0x3167aa['attributes']=_0x3167aa[_0x3bc5('0x32')][_0x3bc5('0x34')]?_0x3167aa[_0x3bc5('0x32')]:_0x411177['model'];if(_0x9bff96['query'][_0x3bc5('0x43')]){_0x3167aa['include']=[{'all':!![]}];}_0x3167aa=_['merge']({},_0x3167aa,_0x9bff96[_0x3bc5('0x41')]);return db[_0x3bc5('0x2c')][_0x3bc5('0x4a')](_0x3167aa)[_0x3bc5('0x24')](handleEntityNotFound(_0x4f211b,null))[_0x3bc5('0x24')](function(_0x57e1a2){if(_0x57e1a2){var _0x4a7d38=_0x57e1a2['get']({'plain':!![]});_0x4a7d38=qs[_0x3bc5('0x52')](_0x4a7d38,['id',_0x3bc5('0x53'),_0x3bc5('0x54')]);_0x9bff96['body']=_[_0x3bc5('0x52')](_0x9bff96['body'],['id',_0x3bc5('0x53'),'updatedAt']);return db[_0x3bc5('0x2c')]['create'](_[_0x3bc5('0x3b')](_0x4a7d38,_0x9bff96[_0x3bc5('0x55')]),{'include':_0x9bff96['query']['includeAll']?[{'all':!![]}]:undefined})[_0x3bc5('0x24')](function(_0x4d97fa){var _0x7970f6=_0x9bff96[_0x3bc5('0x4b')][_0x3bc5('0x4c')]({'plain':!![]});if(!_0x7970f6)throw new Error(_0x3bc5('0x4d'));if(_0x7970f6[_0x3bc5('0x56')]==='user'){var _0x12397d=_0x4d97fa[_0x3bc5('0x4c')]({'plain':!![]});var _0x432055=_0x3bc5('0x4e');return db['UserProfileSection']['find']({'where':{'name':_0x432055,'userProfileId':_0x7970f6[_0x3bc5('0x4f')]},'raw':!![]})['then'](function(_0x1758de){if(_0x1758de&&_0x1758de[_0x3bc5('0x57')]===0x0){return db['UserProfileResource']['create']({'name':_0x12397d['name'],'resourceId':_0x12397d['id'],'type':_0x1758de[_0x3bc5('0x2a')],'sectionId':_0x1758de['id']},{})[_0x3bc5('0x24')](function(){return _0x4d97fa;});}else{return _0x4d97fa;}})[_0x3bc5('0x46')](function(_0x4a6ecb){logger[_0x3bc5('0x28')](_0x3bc5('0x51'),_0x4a6ecb);throw _0x4a6ecb;});}return _0x4d97fa;});}})[_0x3bc5('0x24')](respondWithResult(_0x4f211b,0xc9))['catch'](handleError(_0x4f211b,null));};exports[_0x3bc5('0x23')]=function(_0xac08df,_0x5e0e24){if(_0xac08df[_0x3bc5('0x55')]['id']){delete _0xac08df[_0x3bc5('0x55')]['id'];}return db[_0x3bc5('0x2c')][_0x3bc5('0x4a')]({'where':{'id':_0xac08df[_0x3bc5('0x48')]['id']}})[_0x3bc5('0x24')](handleEntityNotFound(_0x5e0e24,null))[_0x3bc5('0x24')](saveUpdates(_0xac08df[_0x3bc5('0x55')],null))[_0x3bc5('0x24')](respondWithResult(_0x5e0e24,null))[_0x3bc5('0x46')](handleError(_0x5e0e24,null));};exports[_0x3bc5('0x25')]=function(_0x2987f4,_0x1452a3){return db[_0x3bc5('0x2c')][_0x3bc5('0x4a')]({'where':{'id':_0x2987f4[_0x3bc5('0x48')]['id']}})['then'](handleEntityNotFound(_0x1452a3,null))['then'](removeEntity(_0x1452a3,null))[_0x3bc5('0x46')](handleError(_0x1452a3,null));};function widgetAttributes(_0x545405){try{switch(_0x545405['type']){case _0x3bc5('0x58'):return[{'name':_0x3bc5('0x59'),'value':_0x545405[_0x3bc5('0x59')]||(_0x545405[_0x3bc5('0x5a')]&&_0x545405[_0x3bc5('0x5a')][0x0]?_0x545405['attrs'][0x0][_0x3bc5('0x5b')]:undefined)||_0x3bc5('0x5c')}];case _0x3bc5('0x5d'):return[{'name':_0x3bc5('0x5e'),'value':_0x545405[_0x3bc5('0x5e')]||(_0x545405[_0x3bc5('0x5a')]&&_0x545405[_0x3bc5('0x5a')][0x0]?_0x545405[_0x3bc5('0x5a')][0x0][_0x3bc5('0x5b')]:undefined)||''}];case _0x3bc5('0x5f'):return[{'name':'attrHourFormat','value':_0x545405[_0x3bc5('0x60')]||(_0x545405[_0x3bc5('0x5a')]&&_0x545405[_0x3bc5('0x5a')][0x0]?_0x545405[_0x3bc5('0x5a')][0x0]['value']:undefined)||_0x3bc5('0x61')},{'name':_0x3bc5('0x62'),'value':_0x545405[_0x3bc5('0x62')]||(_0x545405['attrs']&&_0x545405[_0x3bc5('0x5a')][0x1]?_0x545405[_0x3bc5('0x5a')][0x1][_0x3bc5('0x5b')]:undefined)||_0x3bc5('0x63')},{'name':'attrFontSize','value':_0x545405['attrFontSize']||(_0x545405[_0x3bc5('0x5a')]&&_0x545405[_0x3bc5('0x5a')][0x2]?_0x545405['attrs'][0x2]['value']:undefined)||0xc}];case _0x3bc5('0x64'):return[{'name':'attrMetric','value':_0x545405[_0x3bc5('0x65')]||(_0x545405[_0x3bc5('0x5a')]&&_0x545405[_0x3bc5('0x5a')][0x0]?_0x545405[_0x3bc5('0x5a')][0x0]['value']:undefined)||_0x3bc5('0x66')},{'name':_0x3bc5('0x67'),'value':_0x545405[_0x3bc5('0x67')]||(_0x545405[_0x3bc5('0x5a')]&&_0x545405[_0x3bc5('0x5a')][0x1]?_0x545405[_0x3bc5('0x5a')][0x1]['value']:undefined)||[]},{'name':_0x3bc5('0x68'),'value':_0x545405[_0x3bc5('0x68')]||(_0x545405[_0x3bc5('0x5a')]&&_0x545405[_0x3bc5('0x5a')][0x2]?_0x545405['attrs'][0x2]['value']:undefined)||0x14}];case'multibar-chart':case _0x3bc5('0x69'):return[{'name':_0x3bc5('0x6a'),'value':_0x545405[_0x3bc5('0x6a')]||(_0x545405[_0x3bc5('0x5a')]&&_0x545405[_0x3bc5('0x5a')][0x0]?_0x545405[_0x3bc5('0x5a')][0x0][_0x3bc5('0x5b')]:undefined)||_0x3bc5('0x66')},{'name':_0x3bc5('0x6b'),'value':_0x545405[_0x3bc5('0x6b')]||(_0x545405[_0x3bc5('0x5a')]&&_0x545405[_0x3bc5('0x5a')][0x1]?_0x545405['attrs'][0x1][_0x3bc5('0x5b')]:undefined)||null},{'name':_0x3bc5('0x6c'),'value':_0x545405[_0x3bc5('0x6c')]||(_0x545405['attrs']&&_0x545405[_0x3bc5('0x5a')][0x2]?_0x545405['attrs'][0x2][_0x3bc5('0x5b')]:undefined)||null},{'name':_0x3bc5('0x67'),'value':_0x545405[_0x3bc5('0x67')]||(_0x545405[_0x3bc5('0x5a')]&&_0x545405[_0x3bc5('0x5a')][0x3]?_0x545405['attrs'][0x3][_0x3bc5('0x5b')]:undefined)||[]}];case'web-report':return[{'name':_0x3bc5('0x6d'),'type':_0x545405['reportType']||(_0x545405[_0x3bc5('0x5a')]&&_0x545405[_0x3bc5('0x5a')][0x0]?_0x545405[_0x3bc5('0x5a')][0x0][_0x3bc5('0x3d')]:undefined)||null,'value':_0x545405['attrReport']||(_0x545405[_0x3bc5('0x5a')]&&_0x545405[_0x3bc5('0x5a')][0x0]?_0x545405[_0x3bc5('0x5a')][0x0]['value']:undefined)||null},{'name':_0x3bc5('0x6e'),'value':_0x545405[_0x3bc5('0x6e')]||(_0x545405[_0x3bc5('0x5a')]&&_0x545405['attrs'][0x1]?_0x545405['attrs'][0x1][_0x3bc5('0x5b')]:undefined)||0x0}];default:return[];}}catch(_0x316fb0){logger['error']('widgetAttributes:\x20%s',JSON[_0x3bc5('0x6f')](_0x316fb0));return[];}}exports[_0x3bc5('0x70')]=function(_0x4ce0a0,_0x434213,_0x1397b4){if(_0x4ce0a0[_0x3bc5('0x55')]['id']){delete _0x4ce0a0[_0x3bc5('0x55')]['id'];}return db[_0x3bc5('0x2c')][_0x3bc5('0x4a')]({'where':{'id':_0x4ce0a0[_0x3bc5('0x48')]['id']}})[_0x3bc5('0x24')](handleEntityNotFound(_0x434213,null))[_0x3bc5('0x24')](function(_0x346519){if(_0x346519){_0x4ce0a0[_0x3bc5('0x55')][_0x3bc5('0x71')]=_0x346519['id'];_0x4ce0a0[_0x3bc5('0x55')][_0x3bc5('0x5a')]=widgetAttributes(_0x4ce0a0['body']);return db[_0x3bc5('0x72')][_0x3bc5('0x50')](_0x4ce0a0[_0x3bc5('0x55')]);}})[_0x3bc5('0x24')](respondWithResult(_0x434213,null))[_0x3bc5('0x46')](handleError(_0x434213,null));};exports[_0x3bc5('0x73')]=function(_0x517bba,_0x4ac2b9,_0x6975f8){var _0x2a4034={};var _0x3c5c2b={};var _0x4515ff;var _0x497f26;return db[_0x3bc5('0x2c')][_0x3bc5('0x74')]({'where':{'id':_0x517bba[_0x3bc5('0x48')]['id']}})['then'](handleEntityNotFound(_0x4ac2b9,null))[_0x3bc5('0x24')](function(_0xf0b2ab){if(_0xf0b2ab){_0x4515ff=_0xf0b2ab;_0x3c5c2b['model']=_[_0x3bc5('0x2e')](db[_0x3bc5('0x72')][_0x3bc5('0x49')]);_0x3c5c2b['query']=_[_0x3bc5('0x2e')](_0x517bba[_0x3bc5('0x2f')]);_0x3c5c2b[_0x3bc5('0x30')]=_[_0x3bc5('0x31')](_0x3c5c2b[_0x3bc5('0x2d')],_0x3c5c2b[_0x3bc5('0x2f')]);_0x2a4034['attributes']=_[_0x3bc5('0x31')](_0x3c5c2b[_0x3bc5('0x2d')],qs[_0x3bc5('0x33')](_0x517bba[_0x3bc5('0x2f')][_0x3bc5('0x33')]));_0x2a4034[_0x3bc5('0x32')]=_0x2a4034['attributes'][_0x3bc5('0x34')]?_0x2a4034[_0x3bc5('0x32')]:_0x3c5c2b[_0x3bc5('0x2d')];_0x2a4034[_0x3bc5('0x37')]=qs['sort'](_0x517bba['query']['sort']);_0x2a4034[_0x3bc5('0x39')]=qs['filters'](_[_0x3bc5('0x75')](_0x517bba[_0x3bc5('0x2f')],_0x3c5c2b[_0x3bc5('0x30')]));if(_0x517bba[_0x3bc5('0x2f')][_0x3bc5('0x3a')]){_0x2a4034['where']=_[_0x3bc5('0x3b')](_0x2a4034[_0x3bc5('0x39')],{'$or':_[_0x3bc5('0x3c')](_0x2a4034['attributes'],function(_0x55f7f8){var _0x3e8294={};_0x3e8294[_0x55f7f8]={'$like':'%'+_0x517bba['query'][_0x3bc5('0x3a')]+'%'};return _0x3e8294;})});}_0x2a4034=_[_0x3bc5('0x3b')]({},_0x2a4034,_0x517bba[_0x3bc5('0x41')]);return _0x4515ff[_0x3bc5('0x73')](_0x2a4034);}})[_0x3bc5('0x24')](function(_0x47770b){if(_0x47770b){_0x497f26=_0x47770b[_0x3bc5('0x34')];if(!_0x517bba['query'][_0x3bc5('0x35')](_0x3bc5('0x36'))){_0x2a4034['limit']=qs[_0x3bc5('0x1e')](_0x517bba['query'][_0x3bc5('0x1e')]);_0x2a4034[_0x3bc5('0x1d')]=qs[_0x3bc5('0x1d')](_0x517bba[_0x3bc5('0x2f')][_0x3bc5('0x1d')]);}return _0x4515ff['getItems'](_0x2a4034);}})[_0x3bc5('0x24')](function(_0x501d09){if(_0x501d09){return _0x501d09?{'count':_0x497f26,'rows':_0x501d09}:null;}})[_0x3bc5('0x24')](respondWithResult(_0x4ac2b9,null))[_0x3bc5('0x46')](handleError(_0x4ac2b9,null));};
\ No newline at end of file
index e0485c4..bbc3de5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd217=['exports','../../mysqldb','Dashboard','save','update','remove','emit','hook'];(function(_0x365c62,_0x1845a3){var _0x18e25f=function(_0x46858d){while(--_0x46858d){_0x365c62['push'](_0x365c62['shift']());}};_0x18e25f(++_0x1845a3);}(_0xd217,0x141));var _0x7d21=function(_0x3f9044,_0x5942ed){_0x3f9044=_0x3f9044-0x0;var _0x399e08=_0xd217[_0x3f9044];return _0x399e08;};'use strict';var EventEmitter=require('events');var Dashboard=require(_0x7d21('0x0'))['db'][_0x7d21('0x1')];var DashboardEvents=new EventEmitter();DashboardEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x7d21('0x2'),'afterUpdate':_0x7d21('0x3'),'afterDestroy':_0x7d21('0x4')};function emitEvent(_0x3dd45a){return function(_0x17825a,_0x42d0c3,_0x2ea580){DashboardEvents[_0x7d21('0x5')](_0x3dd45a+':'+_0x17825a['id'],_0x17825a);DashboardEvents['emit'](_0x3dd45a,_0x17825a);_0x2ea580(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];Dashboard[_0x7d21('0x6')](e,emitEvent(event));}}module[_0x7d21('0x7')]=DashboardEvents;
\ No newline at end of file
+var _0x54c7=['hasOwnProperty','hook','exports','events','Dashboard','setMaxListeners','save','update','remove','emit'];(function(_0x4eab08,_0x5b39de){var _0x1ce1cc=function(_0x204df9){while(--_0x204df9){_0x4eab08['push'](_0x4eab08['shift']());}};_0x1ce1cc(++_0x5b39de);}(_0x54c7,0x161));var _0x754c=function(_0x3ed66d,_0x3a6428){_0x3ed66d=_0x3ed66d-0x0;var _0x25371e=_0x54c7[_0x3ed66d];return _0x25371e;};'use strict';var EventEmitter=require(_0x754c('0x0'));var Dashboard=require('../../mysqldb')['db'][_0x754c('0x1')];var DashboardEvents=new EventEmitter();DashboardEvents[_0x754c('0x2')](0x0);var events={'afterCreate':_0x754c('0x3'),'afterUpdate':_0x754c('0x4'),'afterDestroy':_0x754c('0x5')};function emitEvent(_0x4bb46c){return function(_0x5000a8,_0x4a028d,_0x338ac1){DashboardEvents[_0x754c('0x6')](_0x4bb46c+':'+_0x5000a8['id'],_0x5000a8);DashboardEvents['emit'](_0x4bb46c,_0x5000a8);_0x338ac1(null);};}for(var e in events){if(events[_0x754c('0x7')](e)){var event=events[e];Dashboard[_0x754c('0x8')](e,emitEvent(event));}}module[_0x754c('0x9')]=DashboardEvents;
\ No newline at end of file
index c72540e..1954c24 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe9b9=['exports','Dashboard','lodash','util','../../config/logger','api','moment','bluebird','request-promise','rimraf'];(function(_0x24edc6,_0x19d60a){var _0xf782f8=function(_0x58641e){while(--_0x58641e){_0x24edc6['push'](_0x24edc6['shift']());}};_0xf782f8(++_0x19d60a);}(_0xe9b9,0xd4));var _0x9e9b=function(_0x174583,_0x468485){_0x174583=_0x174583-0x0;var _0x14e46f=_0xe9b9[_0x174583];return _0x14e46f;};'use strict';var _=require(_0x9e9b('0x0'));var util=require(_0x9e9b('0x1'));var logger=require(_0x9e9b('0x2'))(_0x9e9b('0x3'));var moment=require(_0x9e9b('0x4'));var BPromise=require(_0x9e9b('0x5'));var rp=require(_0x9e9b('0x6'));var fs=require('fs');var path=require('path');var rimraf=require(_0x9e9b('0x7'));var config=require('../../config/environment');var attributes=require('./dashboard.attributes');module[_0x9e9b('0x8')]=function(_0x35e077,_0x49ac7c){return _0x35e077['define'](_0x9e9b('0x9'),attributes,{'tableName':'dashboards','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x1696=['./dashboard.attributes','define','Dashboard','dashboards','lodash','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment'];(function(_0x4c9bc4,_0x4b7f44){var _0xac3173=function(_0x55a5f6){while(--_0x55a5f6){_0x4c9bc4['push'](_0x4c9bc4['shift']());}};_0xac3173(++_0x4b7f44);}(_0x1696,0x79));var _0x6169=function(_0x4941aa,_0x4ea258){_0x4941aa=_0x4941aa-0x0;var _0x337cbc=_0x1696[_0x4941aa];return _0x337cbc;};'use strict';var _=require(_0x6169('0x0'));var util=require('util');var logger=require(_0x6169('0x1'))(_0x6169('0x2'));var moment=require(_0x6169('0x3'));var BPromise=require(_0x6169('0x4'));var rp=require(_0x6169('0x5'));var fs=require('fs');var path=require(_0x6169('0x6'));var rimraf=require(_0x6169('0x7'));var config=require(_0x6169('0x8'));var attributes=require(_0x6169('0x9'));module['exports']=function(_0x3569ff,_0x128cf1){return _0x3569ff[_0x6169('0xa')](_0x6169('0xb'),attributes,{'tableName':_0x6169('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ba8a58a..85c7bf7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1dc8=['then','Dashboard,\x20%s,\x20%s','request\x20sent','Dashboard,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','catch','lodash','util','bluebird','randomstring','../../mysqldb','rpc','../../config/environment','http','redis','defaults','localhost','./dashboard.socket'];(function(_0x1a72f3,_0x217011){var _0x57ef47=function(_0x20123d){while(--_0x20123d){_0x1a72f3['push'](_0x1a72f3['shift']());}};_0x57ef47(++_0x217011);}(_0x1dc8,0x78));var _0x81dc=function(_0x5cfe8e,_0x5e7250){_0x5cfe8e=_0x5cfe8e-0x0;var _0x3f8b08=_0x1dc8[_0x5cfe8e];return _0x3f8b08;};'use strict';var _=require(_0x81dc('0x0'));var util=require(_0x81dc('0x1'));var moment=require('moment');var BPromise=require(_0x81dc('0x2'));var rs=require(_0x81dc('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x81dc('0x4'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x81dc('0x5'));var config=require(_0x81dc('0x6'));var jayson=require('jayson/promise');var client=jayson['client'][_0x81dc('0x7')]({'port':0x232a});config[_0x81dc('0x8')]=_[_0x81dc('0x9')](config[_0x81dc('0x8')],{'host':_0x81dc('0xa'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x81dc('0x8')]));require(_0x81dc('0xb'))['register'](socket);function respondWithRpcPromise(_0x186c18,_0x57c836,_0x95fba7){return new BPromise(function(_0x2e0957,_0x256e93){return client['request'](_0x186c18,_0x95fba7)[_0x81dc('0xc')](function(_0x3f2fc5){logger['info'](_0x81dc('0xd'),_0x57c836,_0x81dc('0xe'));logger['debug'](_0x81dc('0xf'),_0x57c836,_0x81dc('0xe'),JSON[_0x81dc('0x10')](_0x3f2fc5));if(_0x3f2fc5[_0x81dc('0x11')]){if(_0x3f2fc5[_0x81dc('0x11')][_0x81dc('0x12')]===0x1f4){logger[_0x81dc('0x11')](_0x81dc('0xd'),_0x57c836,_0x3f2fc5[_0x81dc('0x11')][_0x81dc('0x13')]);return _0x256e93(_0x3f2fc5[_0x81dc('0x11')][_0x81dc('0x13')]);}logger[_0x81dc('0x11')](_0x81dc('0xd'),_0x57c836,_0x3f2fc5[_0x81dc('0x11')][_0x81dc('0x13')]);return _0x2e0957(_0x3f2fc5[_0x81dc('0x11')][_0x81dc('0x13')]);}else{logger[_0x81dc('0x14')]('Dashboard,\x20%s,\x20%s',_0x57c836,_0x81dc('0xe'));_0x2e0957(_0x3f2fc5['result'][_0x81dc('0x13')]);}})[_0x81dc('0x15')](function(_0x5b9701){logger[_0x81dc('0x11')](_0x81dc('0xd'),_0x57c836,_0x5b9701);_0x256e93(_0x5b9701);});});}
\ No newline at end of file
+var _0x0894=['message','result','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','redis','defaults','localhost','socket.io-emitter','register','request','then','info','Dashboard,\x20%s,\x20%s','request\x20sent','debug','Dashboard,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x897b38,_0x20943a){var _0x5365b7=function(_0x577666){while(--_0x577666){_0x897b38['push'](_0x897b38['shift']());}};_0x5365b7(++_0x20943a);}(_0x0894,0x11a));var _0x4089=function(_0x2ec5a9,_0x2e89c6){_0x2ec5a9=_0x2ec5a9-0x0;var _0x331c27=_0x0894[_0x2ec5a9];return _0x331c27;};'use strict';var _=require(_0x4089('0x0'));var util=require(_0x4089('0x1'));var moment=require(_0x4089('0x2'));var BPromise=require(_0x4089('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x4089('0x4'));var db=require(_0x4089('0x5'))['db'];var utils=require(_0x4089('0x6'));var logger=require(_0x4089('0x7'))(_0x4089('0x8'));var config=require(_0x4089('0x9'));var jayson=require(_0x4089('0xa'));var client=jayson['client'][_0x4089('0xb')]({'port':0x232a});config[_0x4089('0xc')]=_[_0x4089('0xd')](config[_0x4089('0xc')],{'host':_0x4089('0xe'),'port':0x18eb});var socket=require(_0x4089('0xf'))(new Redis(config[_0x4089('0xc')]));require('./dashboard.socket')[_0x4089('0x10')](socket);function respondWithRpcPromise(_0x5a7822,_0x41f371,_0x4afce4){return new BPromise(function(_0x57b331,_0x18432a){return client[_0x4089('0x11')](_0x5a7822,_0x4afce4)[_0x4089('0x12')](function(_0x579545){logger[_0x4089('0x13')](_0x4089('0x14'),_0x41f371,_0x4089('0x15'));logger[_0x4089('0x16')](_0x4089('0x17'),_0x41f371,'request\x20sent',JSON[_0x4089('0x18')](_0x579545));if(_0x579545['error']){if(_0x579545[_0x4089('0x19')]['code']===0x1f4){logger[_0x4089('0x19')](_0x4089('0x14'),_0x41f371,_0x579545['error'][_0x4089('0x1a')]);return _0x18432a(_0x579545[_0x4089('0x19')][_0x4089('0x1a')]);}logger[_0x4089('0x19')]('Dashboard,\x20%s,\x20%s',_0x41f371,_0x579545[_0x4089('0x19')][_0x4089('0x1a')]);return _0x57b331(_0x579545['error'][_0x4089('0x1a')]);}else{logger[_0x4089('0x13')](_0x4089('0x14'),_0x41f371,_0x4089('0x15'));_0x57b331(_0x579545[_0x4089('0x1b')]['message']);}})['catch'](function(_0x45ca5b){logger['error'](_0x4089('0x14'),_0x41f371,_0x45ca5b);_0x18432a(_0x45ca5b);});});}
\ No newline at end of file
index d735465..0bc5b99 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4b60=['update','removeListener','length','dashboard:','./dashboard.events','remove'];(function(_0x8f7d2b,_0x1bebaf){var _0x13c298=function(_0x54717e){while(--_0x54717e){_0x8f7d2b['push'](_0x8f7d2b['shift']());}};_0x13c298(++_0x1bebaf);}(_0x4b60,0x178));var _0x04b6=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x4b60[_0x14add3];return _0x4a174f;};'use strict';var DashboardEvents=require(_0x04b6('0x0'));var events=['save',_0x04b6('0x1'),_0x04b6('0x2')];function createListener(_0xf93770,_0x2da6de){return function(_0x324e0f){_0x2da6de['emit'](_0xf93770,_0x324e0f);};}function removeListener(_0x382ee5,_0x3e98d3){return function(){DashboardEvents[_0x04b6('0x3')](_0x382ee5,_0x3e98d3);};}exports['register']=function(_0x6b0126){for(var _0xb7c1e7=0x0,_0x4bd0b6=events[_0x04b6('0x4')];_0xb7c1e7<_0x4bd0b6;_0xb7c1e7++){var _0x180b0b=events[_0xb7c1e7];var _0x57fd29=createListener(_0x04b6('0x5')+_0x180b0b,_0x6b0126);DashboardEvents['on'](_0x180b0b,_0x57fd29);}};
\ No newline at end of file
+var _0x5b46=['./dashboard.events','save','remove','update','emit','register','length','dashboard:'];(function(_0x50a463,_0x517a1a){var _0x2971df=function(_0x1f9cf1){while(--_0x1f9cf1){_0x50a463['push'](_0x50a463['shift']());}};_0x2971df(++_0x517a1a);}(_0x5b46,0xa8));var _0x65b4=function(_0x574573,_0x3814fc){_0x574573=_0x574573-0x0;var _0x394187=_0x5b46[_0x574573];return _0x394187;};'use strict';var DashboardEvents=require(_0x65b4('0x0'));var events=[_0x65b4('0x1'),_0x65b4('0x2'),_0x65b4('0x3')];function createListener(_0x5867c2,_0x71dab1){return function(_0x32090a){_0x71dab1[_0x65b4('0x4')](_0x5867c2,_0x32090a);};}function removeListener(_0x3d78a7,_0x15908b){return function(){DashboardEvents['removeListener'](_0x3d78a7,_0x15908b);};}exports[_0x65b4('0x5')]=function(_0xc9b89f){for(var _0x419fc9=0x0,_0x66f5c2=events[_0x65b4('0x6')];_0x419fc9<_0x66f5c2;_0x419fc9++){var _0x5ea7df=events[_0x419fc9];var _0x1202c7=createListener(_0x65b4('0x7')+_0x5ea7df,_0xc9b89f);DashboardEvents['on'](_0x5ea7df,_0x1202c7);}};
\ No newline at end of file
index 1dc6249..9f24dc6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2675=['../../components/interaction/service','../../config/environment','./dashboard.controller','isAuthenticated','get','show','getItems','post','create','/:id/clone','clone','/:id/items','addItem','put','/:id','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service'];(function(_0x13d07a,_0x41efc3){var _0x5ee0ee=function(_0x4ca94a){while(--_0x4ca94a){_0x13d07a['push'](_0x13d07a['shift']());}};_0x5ee0ee(++_0x41efc3);}(_0x2675,0x165));var _0x5267=function(_0x304c51,_0x48e0b5){_0x304c51=_0x304c51-0x0;var _0x483e41=_0x2675[_0x304c51];return _0x483e41;};'use strict';var multer=require(_0x5267('0x0'));var util=require(_0x5267('0x1'));var path=require(_0x5267('0x2'));var timeout=require(_0x5267('0x3'));var express=require(_0x5267('0x4'));var router=express[_0x5267('0x5')]();var auth=require(_0x5267('0x6'));var interaction=require(_0x5267('0x7'));var config=require(_0x5267('0x8'));var controller=require(_0x5267('0x9'));router['get']('/',auth[_0x5267('0xa')](),controller['index']);router[_0x5267('0xb')]('/:id',auth['isAuthenticated'](),controller[_0x5267('0xc')]);router[_0x5267('0xb')]('/:id/items',auth[_0x5267('0xa')](),controller[_0x5267('0xd')]);router[_0x5267('0xe')]('/',auth[_0x5267('0xa')](),controller[_0x5267('0xf')]);router[_0x5267('0xe')](_0x5267('0x10'),auth[_0x5267('0xa')](),controller[_0x5267('0x11')]);router[_0x5267('0xe')](_0x5267('0x12'),auth[_0x5267('0xa')](),controller[_0x5267('0x13')]);router[_0x5267('0x14')](_0x5267('0x15'),auth[_0x5267('0xa')](),controller[_0x5267('0x16')]);router[_0x5267('0x17')](_0x5267('0x15'),auth[_0x5267('0xa')](),controller[_0x5267('0x18')]);module[_0x5267('0x19')]=router;
\ No newline at end of file
+var _0xc9f0=['destroy','util','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','isAuthenticated','get','/:id','show','getItems','post','create','clone','/:id/items','addItem','put','update','delete'];(function(_0x3562bf,_0x3ccc6e){var _0x4c8cdf=function(_0x3b061d){while(--_0x3b061d){_0x3562bf['push'](_0x3562bf['shift']());}};_0x4c8cdf(++_0x3ccc6e);}(_0xc9f0,0x86));var _0x0c9f=function(_0x4a6fa1,_0x5291bf){_0x4a6fa1=_0x4a6fa1-0x0;var _0x3ea91f=_0xc9f0[_0x4a6fa1];return _0x3ea91f;};'use strict';var multer=require('multer');var util=require(_0x0c9f('0x0'));var path=require('path');var timeout=require(_0x0c9f('0x1'));var express=require('express');var router=express[_0x0c9f('0x2')]();var auth=require(_0x0c9f('0x3'));var interaction=require(_0x0c9f('0x4'));var config=require('../../config/environment');var controller=require('./dashboard.controller');router['get']('/',auth[_0x0c9f('0x5')](),controller['index']);router[_0x0c9f('0x6')](_0x0c9f('0x7'),auth[_0x0c9f('0x5')](),controller[_0x0c9f('0x8')]);router[_0x0c9f('0x6')]('/:id/items',auth[_0x0c9f('0x5')](),controller[_0x0c9f('0x9')]);router[_0x0c9f('0xa')]('/',auth[_0x0c9f('0x5')](),controller[_0x0c9f('0xb')]);router[_0x0c9f('0xa')]('/:id/clone',auth[_0x0c9f('0x5')](),controller[_0x0c9f('0xc')]);router['post'](_0x0c9f('0xd'),auth[_0x0c9f('0x5')](),controller[_0x0c9f('0xe')]);router[_0x0c9f('0xf')](_0x0c9f('0x7'),auth[_0x0c9f('0x5')](),controller[_0x0c9f('0x10')]);router[_0x0c9f('0x11')](_0x0c9f('0x7'),auth[_0x0c9f('0x5')](),controller[_0x0c9f('0x12')]);module['exports']=router;
\ No newline at end of file
index 2d4dab6..552efad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xea8d=['sequelize','squel','lodash','exports','STRING','TEXT','long','parse','getDataValue','attrs','setDataValue','stringify','INTEGER','#ffffff'];(function(_0x485bb8,_0x3757e7){var _0x5d5c74=function(_0x58ae3d){while(--_0x58ae3d){_0x485bb8['push'](_0x485bb8['shift']());}};_0x5d5c74(++_0x3757e7);}(_0xea8d,0x10a));var _0xdea8=function(_0x256efe,_0x42bac2){_0x256efe=_0x256efe-0x0;var _0x3ef15b=_0xea8d[_0x256efe];return _0x3ef15b;};'use strict';var Sequelize=require(_0xdea8('0x0'));var squel=require(_0xdea8('0x1'));var _=require(_0xdea8('0x2'));module[_0xdea8('0x3')]={'title':{'type':Sequelize[_0xdea8('0x4')],'allowNull':![]},'type':{'type':Sequelize[_0xdea8('0x4')](0x14),'allowNull':![],'validate':{'len':[0x1,0x14]}},'attrs':{'type':Sequelize[_0xdea8('0x5')](_0xdea8('0x6')),'get':function(){try{return JSON[_0xdea8('0x7')](this[_0xdea8('0x8')](_0xdea8('0x9')));}catch(_0x57cb02){return[];}},'set':function(_0x7ddec2){try{this['setDataValue'](_0xdea8('0x9'),JSON['stringify'](_0x7ddec2));}catch(_0x3dd601){this[_0xdea8('0xa')](_0xdea8('0x9'),JSON[_0xdea8('0xb')]([]));}}},'sizeX':{'type':Sequelize[_0xdea8('0xc')],'allowNull':![],'defaultValue':0x1},'sizeY':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x1},'row':{'type':Sequelize[_0xdea8('0xc')]},'col':{'type':Sequelize[_0xdea8('0xc')]},'background':{'type':Sequelize[_0xdea8('0x4')],'allowNull':![],'defaultValue':_0xdea8('0xd'),'validate':{'notEmpty':!![]}},'foreground':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'#2196f3','validate':{'notEmpty':!![]}},'link':{'type':Sequelize[_0xdea8('0x4')]}};
\ No newline at end of file
+var _0x3d84=['INTEGER','#ffffff','sequelize','squel','STRING','long','getDataValue','attrs','setDataValue','stringify'];(function(_0x2c46c2,_0x3b2c78){var _0x26af87=function(_0x3e1dbf){while(--_0x3e1dbf){_0x2c46c2['push'](_0x2c46c2['shift']());}};_0x26af87(++_0x3b2c78);}(_0x3d84,0x106));var _0x43d8=function(_0x4d686d,_0x3e00ed){_0x4d686d=_0x4d686d-0x0;var _0x55a15a=_0x3d84[_0x4d686d];return _0x55a15a;};'use strict';var Sequelize=require(_0x43d8('0x0'));var squel=require(_0x43d8('0x1'));var _=require('lodash');module['exports']={'title':{'type':Sequelize[_0x43d8('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0x43d8('0x2')](0x14),'allowNull':![],'validate':{'len':[0x1,0x14]}},'attrs':{'type':Sequelize['TEXT'](_0x43d8('0x3')),'get':function(){try{return JSON['parse'](this[_0x43d8('0x4')](_0x43d8('0x5')));}catch(_0xb5b1b0){return[];}},'set':function(_0x5b2b8e){try{this[_0x43d8('0x6')](_0x43d8('0x5'),JSON[_0x43d8('0x7')](_0x5b2b8e));}catch(_0x3f47eb){this[_0x43d8('0x6')](_0x43d8('0x5'),JSON[_0x43d8('0x7')]([]));}}},'sizeX':{'type':Sequelize[_0x43d8('0x8')],'allowNull':![],'defaultValue':0x1},'sizeY':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x1},'row':{'type':Sequelize[_0x43d8('0x8')]},'col':{'type':Sequelize[_0x43d8('0x8')]},'background':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x43d8('0x9'),'validate':{'notEmpty':!![]}},'foreground':{'type':Sequelize[_0x43d8('0x2')],'allowNull':![],'defaultValue':'#2196f3','validate':{'notEmpty':!![]}},'link':{'type':Sequelize[_0x43d8('0x2')]}};
\ No newline at end of file
index bd1ddd5..8d5eed9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ccc=['includeAll','include','options','find','catch','type','attrUrl','attrs','value','https://','custom','attrPath','clock','attrHourFormat','HH:mm:ss','attrTimezone','attrFontSize','counter','attrMetric','total','attrVoiceQueues','multibar-chart','attrSerie1','attrSerie2','attrSerie3','web-report','attrReport','reportType','attrRefresh','create','body','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','localhost','./dashboardItem.socket','register','sendStatus','status','end','json','count','offset','Content-Range','apply','reject','save','update','destroy','then','error','stack','name','send','params','model','keys','DashboardItem','rawAttributes','query','filters','intersection','attributes','fields','length'];(function(_0x49db50,_0x49ede7){var _0x378121=function(_0x58b61c){while(--_0x58b61c){_0x49db50['push'](_0x49db50['shift']());}};_0x378121(++_0x49ede7);}(_0x4ccc,0x1cd));var _0xc4cc=function(_0x854260,_0x2d478c){_0x854260=_0x854260-0x0;var _0x30d816=_0x4ccc[_0x854260];return _0x30d816;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xc4cc('0x0'));var rimraf=require('rimraf');var zipdir=require(_0xc4cc('0x1'));var jsonpatch=require(_0xc4cc('0x2'));var rp=require(_0xc4cc('0x3'));var moment=require(_0xc4cc('0x4'));var BPromise=require(_0xc4cc('0x5'));var Mustache=require(_0xc4cc('0x6'));var util=require('util');var path=require(_0xc4cc('0x7'));var sox=require(_0xc4cc('0x8'));var csv=require(_0xc4cc('0x9'));var ejs=require(_0xc4cc('0xa'));var fs=require('fs');var _=require(_0xc4cc('0xb'));var squel=require(_0xc4cc('0xc'));var crypto=require(_0xc4cc('0xd'));var jsforce=require('jsforce');var deskjs=require(_0xc4cc('0xe'));var toCsv=require(_0xc4cc('0x9'));var querystring=require(_0xc4cc('0xf'));var Papa=require(_0xc4cc('0x10'));var Redis=require(_0xc4cc('0x11'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xc4cc('0x12'))(_0xc4cc('0x13'));var utils=require(_0xc4cc('0x14'));var config=require(_0xc4cc('0x15'));var db=require(_0xc4cc('0x16'))['db'];config[_0xc4cc('0x17')]=_['defaults'](config['redis'],{'host':_0xc4cc('0x18'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xc4cc('0x17')]));require(_0xc4cc('0x19'))[_0xc4cc('0x1a')](socket);function respondWithStatusCode(_0x15b7fd,_0x34d411){_0x34d411=_0x34d411||0xcc;return function(_0x7058a){if(_0x7058a){return _0x15b7fd[_0xc4cc('0x1b')](_0x34d411);}return _0x15b7fd[_0xc4cc('0x1c')](_0x34d411)[_0xc4cc('0x1d')]();};}function respondWithResult(_0x250afe,_0x49fde4){_0x49fde4=_0x49fde4||0xc8;return function(_0x2ff731){if(_0x2ff731){return _0x250afe['status'](_0x49fde4)[_0xc4cc('0x1e')](_0x2ff731);}};}function respondWithFilteredResult(_0x5d903d,_0xd0372d){return function(_0x344692){if(_0x344692){var _0x13953e=_0x344692[_0xc4cc('0x1f')],_0x4f6e10=_0xd0372d['offset'],_0x221086=_0xd0372d[_0xc4cc('0x20')]+_0xd0372d['limit'],_0x48b8f4;if(_0x221086>=_0x13953e){_0x221086=_0x13953e;_0x48b8f4=0xc8;}else{_0x48b8f4=0xce;}_0x5d903d['status'](_0x48b8f4);return _0x5d903d['set'](_0xc4cc('0x21'),_0x4f6e10+'-'+_0x221086+'/'+_0x13953e)['json'](_0x344692);}return null;};}function patchUpdates(_0x3c98d6){return function(_0x40e00f){try{jsonpatch[_0xc4cc('0x22')](_0x40e00f,_0x3c98d6,!![]);}catch(_0x1d03ca){return BPromise[_0xc4cc('0x23')](_0x1d03ca);}return _0x40e00f[_0xc4cc('0x24')]();};}function saveUpdates(_0x1d62fd,_0x23b923){return function(_0x281af7){if(_0x281af7){return _0x281af7[_0xc4cc('0x25')](_0x1d62fd)['then'](function(_0x4714ee){return _0x4714ee;});}return null;};}function removeEntity(_0x2ddcfb,_0x1c238c){return function(_0x3611a1){if(_0x3611a1){return _0x3611a1[_0xc4cc('0x26')]()[_0xc4cc('0x27')](function(){_0x2ddcfb['status'](0xcc)[_0xc4cc('0x1d')]();});}};}function handleEntityNotFound(_0x2505b6,_0x4db9b7){return function(_0x2144f0){if(!_0x2144f0){_0x2505b6[_0xc4cc('0x1b')](0x194);}return _0x2144f0;};}function handleError(_0x1a61fb,_0x4ca1e4){_0x4ca1e4=_0x4ca1e4||0x1f4;return function(_0x1a0d46){logger[_0xc4cc('0x28')](_0x1a0d46[_0xc4cc('0x29')]);if(_0x1a0d46[_0xc4cc('0x2a')]){delete _0x1a0d46[_0xc4cc('0x2a')];}_0x1a61fb[_0xc4cc('0x1c')](_0x4ca1e4)[_0xc4cc('0x2b')](_0x1a0d46);};}exports['show']=function(_0x387042,_0x806a39){var _0xabccdc={'raw':![],'where':{'id':_0x387042[_0xc4cc('0x2c')]['id']}},_0x534169={};_0x534169[_0xc4cc('0x2d')]=_[_0xc4cc('0x2e')](db[_0xc4cc('0x2f')][_0xc4cc('0x30')]);_0x534169[_0xc4cc('0x31')]=_[_0xc4cc('0x2e')](_0x387042['query']);_0x534169[_0xc4cc('0x32')]=_[_0xc4cc('0x33')](_0x534169[_0xc4cc('0x2d')],_0x534169[_0xc4cc('0x31')]);_0xabccdc[_0xc4cc('0x34')]=_['intersection'](_0x534169[_0xc4cc('0x2d')],qs[_0xc4cc('0x35')](_0x387042['query'][_0xc4cc('0x35')]));_0xabccdc[_0xc4cc('0x34')]=_0xabccdc[_0xc4cc('0x34')][_0xc4cc('0x36')]?_0xabccdc[_0xc4cc('0x34')]:_0x534169[_0xc4cc('0x2d')];if(_0x387042['query'][_0xc4cc('0x37')]){_0xabccdc[_0xc4cc('0x38')]=[{'all':!![]}];}_0xabccdc=_['merge']({},_0xabccdc,_0x387042[_0xc4cc('0x39')]);return db[_0xc4cc('0x2f')][_0xc4cc('0x3a')](_0xabccdc)[_0xc4cc('0x27')](handleEntityNotFound(_0x806a39,null))[_0xc4cc('0x27')](respondWithResult(_0x806a39,null))[_0xc4cc('0x3b')](handleError(_0x806a39,null));};exports[_0xc4cc('0x26')]=function(_0x514d72,_0x593a06){return db[_0xc4cc('0x2f')][_0xc4cc('0x3a')]({'where':{'id':_0x514d72['params']['id']}})['then'](handleEntityNotFound(_0x593a06,null))[_0xc4cc('0x27')](removeEntity(_0x593a06,null))['catch'](handleError(_0x593a06,null));};function widgetAttributes(_0x55cb54){try{switch(_0x55cb54[_0xc4cc('0x3c')]){case'iframe':return[{'name':_0xc4cc('0x3d'),'value':_0x55cb54[_0xc4cc('0x3d')]||(_0x55cb54[_0xc4cc('0x3e')]&&_0x55cb54['attrs'][0x0]?_0x55cb54['attrs'][0x0][_0xc4cc('0x3f')]:undefined)||_0xc4cc('0x40')}];case _0xc4cc('0x41'):return[{'name':_0xc4cc('0x42'),'value':_0x55cb54[_0xc4cc('0x42')]||(_0x55cb54[_0xc4cc('0x3e')]&&_0x55cb54['attrs'][0x0]?_0x55cb54[_0xc4cc('0x3e')][0x0]['value']:undefined)||''}];case _0xc4cc('0x43'):return[{'name':_0xc4cc('0x44'),'value':_0x55cb54[_0xc4cc('0x44')]||(_0x55cb54[_0xc4cc('0x3e')]&&_0x55cb54['attrs'][0x0]?_0x55cb54[_0xc4cc('0x3e')][0x0][_0xc4cc('0x3f')]:undefined)||_0xc4cc('0x45')},{'name':_0xc4cc('0x46'),'value':_0x55cb54[_0xc4cc('0x46')]||(_0x55cb54[_0xc4cc('0x3e')]&&_0x55cb54[_0xc4cc('0x3e')][0x1]?_0x55cb54[_0xc4cc('0x3e')][0x1][_0xc4cc('0x3f')]:undefined)||'0.00'},{'name':_0xc4cc('0x47'),'value':_0x55cb54[_0xc4cc('0x47')]||(_0x55cb54[_0xc4cc('0x3e')]&&_0x55cb54[_0xc4cc('0x3e')][0x2]?_0x55cb54[_0xc4cc('0x3e')][0x2][_0xc4cc('0x3f')]:undefined)||0xc}];case _0xc4cc('0x48'):return[{'name':_0xc4cc('0x49'),'value':_0x55cb54[_0xc4cc('0x49')]||(_0x55cb54['attrs']&&_0x55cb54[_0xc4cc('0x3e')][0x0]?_0x55cb54['attrs'][0x0][_0xc4cc('0x3f')]:undefined)||_0xc4cc('0x4a')},{'name':_0xc4cc('0x4b'),'value':_0x55cb54[_0xc4cc('0x4b')]||(_0x55cb54[_0xc4cc('0x3e')]&&_0x55cb54['attrs'][0x1]?_0x55cb54[_0xc4cc('0x3e')][0x1][_0xc4cc('0x3f')]:undefined)||[]},{'name':_0xc4cc('0x47'),'value':_0x55cb54[_0xc4cc('0x47')]||(_0x55cb54['attrs']&&_0x55cb54[_0xc4cc('0x3e')][0x2]?_0x55cb54[_0xc4cc('0x3e')][0x2][_0xc4cc('0x3f')]:undefined)||0x14}];case _0xc4cc('0x4c'):case'pie-chart':return[{'name':_0xc4cc('0x4d'),'value':_0x55cb54[_0xc4cc('0x4d')]||(_0x55cb54[_0xc4cc('0x3e')]&&_0x55cb54['attrs'][0x0]?_0x55cb54[_0xc4cc('0x3e')][0x0][_0xc4cc('0x3f')]:undefined)||_0xc4cc('0x4a')},{'name':'attrSerie2','value':_0x55cb54[_0xc4cc('0x4e')]||(_0x55cb54[_0xc4cc('0x3e')]&&_0x55cb54['attrs'][0x1]?_0x55cb54[_0xc4cc('0x3e')][0x1][_0xc4cc('0x3f')]:undefined)||null},{'name':_0xc4cc('0x4f'),'value':_0x55cb54[_0xc4cc('0x4f')]||(_0x55cb54[_0xc4cc('0x3e')]&&_0x55cb54[_0xc4cc('0x3e')][0x2]?_0x55cb54['attrs'][0x2][_0xc4cc('0x3f')]:undefined)||null},{'name':_0xc4cc('0x4b'),'value':_0x55cb54[_0xc4cc('0x4b')]||(_0x55cb54['attrs']&&_0x55cb54[_0xc4cc('0x3e')][0x3]?_0x55cb54[_0xc4cc('0x3e')][0x3][_0xc4cc('0x3f')]:undefined)||[]}];case _0xc4cc('0x50'):return[{'name':_0xc4cc('0x51'),'type':_0x55cb54[_0xc4cc('0x52')]||(_0x55cb54[_0xc4cc('0x3e')]&&_0x55cb54[_0xc4cc('0x3e')][0x0]?_0x55cb54[_0xc4cc('0x3e')][0x0][_0xc4cc('0x3c')]:undefined)||null,'value':_0x55cb54[_0xc4cc('0x51')]||(_0x55cb54[_0xc4cc('0x3e')]&&_0x55cb54[_0xc4cc('0x3e')][0x0]?_0x55cb54[_0xc4cc('0x3e')][0x0]['value']:undefined)||null},{'name':_0xc4cc('0x53'),'value':_0x55cb54[_0xc4cc('0x53')]||(_0x55cb54['attrs']&&_0x55cb54[_0xc4cc('0x3e')][0x1]?_0x55cb54[_0xc4cc('0x3e')][0x1][_0xc4cc('0x3f')]:undefined)||0x0}];default:return[];}}catch(_0x27fa51){logger['error']('widgetAttributes:\x20%s',JSON['stringify'](_0x27fa51));return[];}}exports[_0xc4cc('0x54')]=function(_0xef2083,_0x5b58e4){if(_0xef2083[_0xc4cc('0x55')]){_0xef2083[_0xc4cc('0x55')]['attrs']=widgetAttributes(_0xef2083[_0xc4cc('0x55')]);}return db['DashboardItem'][_0xc4cc('0x54')](_0xef2083['body'],{})['then'](respondWithResult(_0x5b58e4,0xc9))[_0xc4cc('0x3b')](handleError(_0x5b58e4,null));};exports[_0xc4cc('0x25')]=function(_0x271c44,_0x493db2){if(_0x271c44[_0xc4cc('0x55')]['id']){delete _0x271c44[_0xc4cc('0x55')]['id'];}_0x271c44[_0xc4cc('0x55')][_0xc4cc('0x3e')]=widgetAttributes(_0x271c44[_0xc4cc('0x55')]);return db['DashboardItem']['find']({'where':{'id':_0x271c44['params']['id']}})['then'](handleEntityNotFound(_0x493db2,null))['then'](saveUpdates(_0x271c44[_0xc4cc('0x55')],null))['then'](respondWithResult(_0x493db2,null))[_0xc4cc('0x3b')](handleError(_0x493db2,null));};
\ No newline at end of file
+var _0xc86d=['attrHourFormat','attrTimezone','0.00','attrFontSize','attrMetric','total','attrVoiceQueues','multibar-chart','pie-chart','attrSerie1','attrSerie2','attrSerie3','web-report','reportType','attrRefresh','stringify','body','create','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','mustache','path','sox','ejs','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','redis','localhost','socket.io-emitter','register','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','save','update','then','error','name','send','show','params','model','keys','DashboardItem','rawAttributes','query','filters','intersection','fields','attributes','length','includeAll','include','merge','options','find','catch','type','iframe','attrUrl','attrs','value','custom','attrPath','clock'];(function(_0x58e84b,_0x1f0cb1){var _0x17bebf=function(_0x27c30f){while(--_0x27c30f){_0x58e84b['push'](_0x58e84b['shift']());}};_0x17bebf(++_0x1f0cb1);}(_0xc86d,0x66));var _0xdc86=function(_0x491a7f,_0x28bb80){_0x491a7f=_0x491a7f-0x0;var _0x3d8f44=_0xc86d[_0x491a7f];return _0x3d8f44;};'use strict';var pdf=require(_0xdc86('0x0'));var emlformat=require(_0xdc86('0x1'));var rimraf=require(_0xdc86('0x2'));var zipdir=require(_0xdc86('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xdc86('0x4'));var moment=require(_0xdc86('0x5'));var BPromise=require('bluebird');var Mustache=require(_0xdc86('0x6'));var util=require('util');var path=require(_0xdc86('0x7'));var sox=require(_0xdc86('0x8'));var csv=require('to-csv');var ejs=require(_0xdc86('0x9'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xdc86('0xa'));var jsforce=require(_0xdc86('0xb'));var deskjs=require(_0xdc86('0xc'));var toCsv=require('to-csv');var querystring=require(_0xdc86('0xd'));var Papa=require(_0xdc86('0xe'));var Redis=require(_0xdc86('0xf'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0xdc86('0x10'));var logger=require(_0xdc86('0x11'))('api');var utils=require(_0xdc86('0x12'));var config=require(_0xdc86('0x13'));var db=require(_0xdc86('0x14'))['db'];config[_0xdc86('0x15')]=_['defaults'](config['redis'],{'host':_0xdc86('0x16'),'port':0x18eb});var socket=require(_0xdc86('0x17'))(new Redis(config[_0xdc86('0x15')]));require('./dashboardItem.socket')[_0xdc86('0x18')](socket);function respondWithStatusCode(_0x494e58,_0x5f34af){_0x5f34af=_0x5f34af||0xcc;return function(_0x3d1c90){if(_0x3d1c90){return _0x494e58[_0xdc86('0x19')](_0x5f34af);}return _0x494e58[_0xdc86('0x1a')](_0x5f34af)[_0xdc86('0x1b')]();};}function respondWithResult(_0x39f438,_0x4ab1fb){_0x4ab1fb=_0x4ab1fb||0xc8;return function(_0x3ea0b3){if(_0x3ea0b3){return _0x39f438[_0xdc86('0x1a')](_0x4ab1fb)[_0xdc86('0x1c')](_0x3ea0b3);}};}function respondWithFilteredResult(_0x2f58c1,_0xd61370){return function(_0x160dda){if(_0x160dda){var _0x4aa5db=_0x160dda['count'],_0x17c8b1=_0xd61370[_0xdc86('0x1d')],_0x5179d6=_0xd61370[_0xdc86('0x1d')]+_0xd61370[_0xdc86('0x1e')],_0xafa4d2;if(_0x5179d6>=_0x4aa5db){_0x5179d6=_0x4aa5db;_0xafa4d2=0xc8;}else{_0xafa4d2=0xce;}_0x2f58c1[_0xdc86('0x1a')](_0xafa4d2);return _0x2f58c1[_0xdc86('0x1f')](_0xdc86('0x20'),_0x17c8b1+'-'+_0x5179d6+'/'+_0x4aa5db)[_0xdc86('0x1c')](_0x160dda);}return null;};}function patchUpdates(_0x25f317){return function(_0x11be4e){try{jsonpatch[_0xdc86('0x21')](_0x11be4e,_0x25f317,!![]);}catch(_0x3e2d71){return BPromise['reject'](_0x3e2d71);}return _0x11be4e[_0xdc86('0x22')]();};}function saveUpdates(_0xbb6198,_0x37e310){return function(_0x9f472){if(_0x9f472){return _0x9f472[_0xdc86('0x23')](_0xbb6198)[_0xdc86('0x24')](function(_0x401ea5){return _0x401ea5;});}return null;};}function removeEntity(_0x396c83,_0x4ac06a){return function(_0x33262a){if(_0x33262a){return _0x33262a['destroy']()[_0xdc86('0x24')](function(){_0x396c83[_0xdc86('0x1a')](0xcc)[_0xdc86('0x1b')]();});}};}function handleEntityNotFound(_0x28deed,_0x296cde){return function(_0x35fbcd){if(!_0x35fbcd){_0x28deed[_0xdc86('0x19')](0x194);}return _0x35fbcd;};}function handleError(_0x5c416a,_0x318bcc){_0x318bcc=_0x318bcc||0x1f4;return function(_0xb38219){logger[_0xdc86('0x25')](_0xb38219['stack']);if(_0xb38219[_0xdc86('0x26')]){delete _0xb38219[_0xdc86('0x26')];}_0x5c416a[_0xdc86('0x1a')](_0x318bcc)[_0xdc86('0x27')](_0xb38219);};}exports[_0xdc86('0x28')]=function(_0x1d77e1,_0x2b66a8){var _0x4539c6={'raw':![],'where':{'id':_0x1d77e1[_0xdc86('0x29')]['id']}},_0x189902={};_0x189902[_0xdc86('0x2a')]=_[_0xdc86('0x2b')](db[_0xdc86('0x2c')][_0xdc86('0x2d')]);_0x189902[_0xdc86('0x2e')]=_[_0xdc86('0x2b')](_0x1d77e1[_0xdc86('0x2e')]);_0x189902[_0xdc86('0x2f')]=_[_0xdc86('0x30')](_0x189902[_0xdc86('0x2a')],_0x189902['query']);_0x4539c6['attributes']=_[_0xdc86('0x30')](_0x189902['model'],qs[_0xdc86('0x31')](_0x1d77e1[_0xdc86('0x2e')][_0xdc86('0x31')]));_0x4539c6[_0xdc86('0x32')]=_0x4539c6[_0xdc86('0x32')][_0xdc86('0x33')]?_0x4539c6[_0xdc86('0x32')]:_0x189902[_0xdc86('0x2a')];if(_0x1d77e1[_0xdc86('0x2e')][_0xdc86('0x34')]){_0x4539c6[_0xdc86('0x35')]=[{'all':!![]}];}_0x4539c6=_[_0xdc86('0x36')]({},_0x4539c6,_0x1d77e1[_0xdc86('0x37')]);return db[_0xdc86('0x2c')][_0xdc86('0x38')](_0x4539c6)[_0xdc86('0x24')](handleEntityNotFound(_0x2b66a8,null))[_0xdc86('0x24')](respondWithResult(_0x2b66a8,null))[_0xdc86('0x39')](handleError(_0x2b66a8,null));};exports['destroy']=function(_0x1d8d9d,_0x3d0731){return db['DashboardItem'][_0xdc86('0x38')]({'where':{'id':_0x1d8d9d[_0xdc86('0x29')]['id']}})['then'](handleEntityNotFound(_0x3d0731,null))[_0xdc86('0x24')](removeEntity(_0x3d0731,null))[_0xdc86('0x39')](handleError(_0x3d0731,null));};function widgetAttributes(_0x9b30c4){try{switch(_0x9b30c4[_0xdc86('0x3a')]){case _0xdc86('0x3b'):return[{'name':_0xdc86('0x3c'),'value':_0x9b30c4['attrUrl']||(_0x9b30c4[_0xdc86('0x3d')]&&_0x9b30c4[_0xdc86('0x3d')][0x0]?_0x9b30c4[_0xdc86('0x3d')][0x0][_0xdc86('0x3e')]:undefined)||'https://'}];case _0xdc86('0x3f'):return[{'name':_0xdc86('0x40'),'value':_0x9b30c4['attrPath']||(_0x9b30c4[_0xdc86('0x3d')]&&_0x9b30c4['attrs'][0x0]?_0x9b30c4[_0xdc86('0x3d')][0x0]['value']:undefined)||''}];case _0xdc86('0x41'):return[{'name':_0xdc86('0x42'),'value':_0x9b30c4[_0xdc86('0x42')]||(_0x9b30c4['attrs']&&_0x9b30c4[_0xdc86('0x3d')][0x0]?_0x9b30c4['attrs'][0x0]['value']:undefined)||'HH:mm:ss'},{'name':'attrTimezone','value':_0x9b30c4[_0xdc86('0x43')]||(_0x9b30c4[_0xdc86('0x3d')]&&_0x9b30c4[_0xdc86('0x3d')][0x1]?_0x9b30c4[_0xdc86('0x3d')][0x1][_0xdc86('0x3e')]:undefined)||_0xdc86('0x44')},{'name':_0xdc86('0x45'),'value':_0x9b30c4[_0xdc86('0x45')]||(_0x9b30c4[_0xdc86('0x3d')]&&_0x9b30c4[_0xdc86('0x3d')][0x2]?_0x9b30c4[_0xdc86('0x3d')][0x2][_0xdc86('0x3e')]:undefined)||0xc}];case'counter':return[{'name':_0xdc86('0x46'),'value':_0x9b30c4[_0xdc86('0x46')]||(_0x9b30c4[_0xdc86('0x3d')]&&_0x9b30c4[_0xdc86('0x3d')][0x0]?_0x9b30c4[_0xdc86('0x3d')][0x0]['value']:undefined)||_0xdc86('0x47')},{'name':_0xdc86('0x48'),'value':_0x9b30c4['attrVoiceQueues']||(_0x9b30c4[_0xdc86('0x3d')]&&_0x9b30c4[_0xdc86('0x3d')][0x1]?_0x9b30c4[_0xdc86('0x3d')][0x1][_0xdc86('0x3e')]:undefined)||[]},{'name':_0xdc86('0x45'),'value':_0x9b30c4[_0xdc86('0x45')]||(_0x9b30c4[_0xdc86('0x3d')]&&_0x9b30c4[_0xdc86('0x3d')][0x2]?_0x9b30c4[_0xdc86('0x3d')][0x2]['value']:undefined)||0x14}];case _0xdc86('0x49'):case _0xdc86('0x4a'):return[{'name':_0xdc86('0x4b'),'value':_0x9b30c4[_0xdc86('0x4b')]||(_0x9b30c4[_0xdc86('0x3d')]&&_0x9b30c4['attrs'][0x0]?_0x9b30c4[_0xdc86('0x3d')][0x0][_0xdc86('0x3e')]:undefined)||_0xdc86('0x47')},{'name':_0xdc86('0x4c'),'value':_0x9b30c4[_0xdc86('0x4c')]||(_0x9b30c4[_0xdc86('0x3d')]&&_0x9b30c4[_0xdc86('0x3d')][0x1]?_0x9b30c4['attrs'][0x1]['value']:undefined)||null},{'name':_0xdc86('0x4d'),'value':_0x9b30c4['attrSerie3']||(_0x9b30c4[_0xdc86('0x3d')]&&_0x9b30c4[_0xdc86('0x3d')][0x2]?_0x9b30c4[_0xdc86('0x3d')][0x2]['value']:undefined)||null},{'name':_0xdc86('0x48'),'value':_0x9b30c4[_0xdc86('0x48')]||(_0x9b30c4['attrs']&&_0x9b30c4[_0xdc86('0x3d')][0x3]?_0x9b30c4[_0xdc86('0x3d')][0x3]['value']:undefined)||[]}];case _0xdc86('0x4e'):return[{'name':'attrReport','type':_0x9b30c4[_0xdc86('0x4f')]||(_0x9b30c4[_0xdc86('0x3d')]&&_0x9b30c4[_0xdc86('0x3d')][0x0]?_0x9b30c4[_0xdc86('0x3d')][0x0]['type']:undefined)||null,'value':_0x9b30c4['attrReport']||(_0x9b30c4[_0xdc86('0x3d')]&&_0x9b30c4['attrs'][0x0]?_0x9b30c4['attrs'][0x0]['value']:undefined)||null},{'name':_0xdc86('0x50'),'value':_0x9b30c4[_0xdc86('0x50')]||(_0x9b30c4[_0xdc86('0x3d')]&&_0x9b30c4[_0xdc86('0x3d')][0x1]?_0x9b30c4[_0xdc86('0x3d')][0x1][_0xdc86('0x3e')]:undefined)||0x0}];default:return[];}}catch(_0x2068c3){logger[_0xdc86('0x25')]('widgetAttributes:\x20%s',JSON[_0xdc86('0x51')](_0x2068c3));return[];}}exports['create']=function(_0x6a3a6c,_0x5c6ccc){if(_0x6a3a6c[_0xdc86('0x52')]){_0x6a3a6c[_0xdc86('0x52')][_0xdc86('0x3d')]=widgetAttributes(_0x6a3a6c[_0xdc86('0x52')]);}return db[_0xdc86('0x2c')][_0xdc86('0x53')](_0x6a3a6c[_0xdc86('0x52')],{})[_0xdc86('0x24')](respondWithResult(_0x5c6ccc,0xc9))[_0xdc86('0x39')](handleError(_0x5c6ccc,null));};exports[_0xdc86('0x23')]=function(_0xa7fd6f,_0x5ad3c9){if(_0xa7fd6f[_0xdc86('0x52')]['id']){delete _0xa7fd6f[_0xdc86('0x52')]['id'];}_0xa7fd6f[_0xdc86('0x52')][_0xdc86('0x3d')]=widgetAttributes(_0xa7fd6f[_0xdc86('0x52')]);return db[_0xdc86('0x2c')][_0xdc86('0x38')]({'where':{'id':_0xa7fd6f['params']['id']}})['then'](handleEntityNotFound(_0x5ad3c9,null))[_0xdc86('0x24')](saveUpdates(_0xa7fd6f['body'],null))[_0xdc86('0x24')](respondWithResult(_0x5ad3c9,null))['catch'](handleError(_0x5ad3c9,null));};
\ No newline at end of file
index fae77ec..aebcbf8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf19c=['save','update','emit','hasOwnProperty','hook','exports','events','../../mysqldb','DashboardItem'];(function(_0x34b821,_0x504e55){var _0x5e00a0=function(_0x242892){while(--_0x242892){_0x34b821['push'](_0x34b821['shift']());}};_0x5e00a0(++_0x504e55);}(_0xf19c,0x10b));var _0xcf19=function(_0x4764ed,_0x45b1a3){_0x4764ed=_0x4764ed-0x0;var _0x5789ad=_0xf19c[_0x4764ed];return _0x5789ad;};'use strict';var EventEmitter=require(_0xcf19('0x0'));var DashboardItem=require(_0xcf19('0x1'))['db'][_0xcf19('0x2')];var DashboardItemEvents=new EventEmitter();DashboardItemEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xcf19('0x3'),'afterUpdate':_0xcf19('0x4'),'afterDestroy':'remove'};function emitEvent(_0x1fa8dc){return function(_0x2addca,_0x460b4f,_0x87534f){DashboardItemEvents[_0xcf19('0x5')](_0x1fa8dc+':'+_0x2addca['id'],_0x2addca);DashboardItemEvents['emit'](_0x1fa8dc,_0x2addca);_0x87534f(null);};}for(var e in events){if(events[_0xcf19('0x6')](e)){var event=events[e];DashboardItem[_0xcf19('0x7')](e,emitEvent(event));}}module[_0xcf19('0x8')]=DashboardItemEvents;
\ No newline at end of file
+var _0x32f4=['update','remove','emit','exports','events','../../mysqldb','DashboardItem','setMaxListeners'];(function(_0xbc60b5,_0xaf34a0){var _0x261773=function(_0x3a1675){while(--_0x3a1675){_0xbc60b5['push'](_0xbc60b5['shift']());}};_0x261773(++_0xaf34a0);}(_0x32f4,0x154));var _0x432f=function(_0x50ea03,_0x111d6d){_0x50ea03=_0x50ea03-0x0;var _0x442b60=_0x32f4[_0x50ea03];return _0x442b60;};'use strict';var EventEmitter=require(_0x432f('0x0'));var DashboardItem=require(_0x432f('0x1'))['db'][_0x432f('0x2')];var DashboardItemEvents=new EventEmitter();DashboardItemEvents[_0x432f('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x432f('0x4'),'afterDestroy':_0x432f('0x5')};function emitEvent(_0x51a71a){return function(_0x354293,_0x1eabac,_0x344a29){DashboardItemEvents[_0x432f('0x6')](_0x51a71a+':'+_0x354293['id'],_0x354293);DashboardItemEvents[_0x432f('0x6')](_0x51a71a,_0x354293);_0x344a29(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];DashboardItem['hook'](e,emitEvent(event));}}module[_0x432f('0x7')]=DashboardItemEvents;
\ No newline at end of file
index 4be1257..3d757e0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcd07=['dashboard_items','../../config/logger','moment','request-promise','path','rimraf','./dashboardItem.attributes','define','DashboardItem'];(function(_0x3f7979,_0x3e80a8){var _0x48507e=function(_0x45ddb9){while(--_0x45ddb9){_0x3f7979['push'](_0x3f7979['shift']());}};_0x48507e(++_0x3e80a8);}(_0xcd07,0xf4));var _0x7cd0=function(_0x225bd6,_0xa696ad){_0x225bd6=_0x225bd6-0x0;var _0x406c9e=_0xcd07[_0x225bd6];return _0x406c9e;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x7cd0('0x0'))('api');var moment=require(_0x7cd0('0x1'));var BPromise=require('bluebird');var rp=require(_0x7cd0('0x2'));var fs=require('fs');var path=require(_0x7cd0('0x3'));var rimraf=require(_0x7cd0('0x4'));var config=require('../../config/environment');var attributes=require(_0x7cd0('0x5'));module['exports']=function(_0x21ca26,_0x50d3c4){return _0x21ca26[_0x7cd0('0x6')](_0x7cd0('0x7'),attributes,{'tableName':_0x7cd0('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb02d=['bluebird','request-promise','path','../../config/environment','./dashboardItem.attributes','define','DashboardItem','lodash','util','../../config/logger','api'];(function(_0x397a4c,_0x39f610){var _0x3732b0=function(_0x4d5f5a){while(--_0x4d5f5a){_0x397a4c['push'](_0x397a4c['shift']());}};_0x3732b0(++_0x39f610);}(_0xb02d,0xf9));var _0xdb02=function(_0x37a85d,_0x34d0c3){_0x37a85d=_0x37a85d-0x0;var _0x21c0fc=_0xb02d[_0x37a85d];return _0x21c0fc;};'use strict';var _=require(_0xdb02('0x0'));var util=require(_0xdb02('0x1'));var logger=require(_0xdb02('0x2'))(_0xdb02('0x3'));var moment=require('moment');var BPromise=require(_0xdb02('0x4'));var rp=require(_0xdb02('0x5'));var fs=require('fs');var path=require(_0xdb02('0x6'));var rimraf=require('rimraf');var config=require(_0xdb02('0x7'));var attributes=require(_0xdb02('0x8'));module['exports']=function(_0x223b3c,_0x304c6e){return _0x223b3c[_0xdb02('0x9')](_0xdb02('0xa'),attributes,{'tableName':'dashboard_items','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 399e789..2d320c9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd631=['register','info','DashboardItem,\x20%s,\x20%s','request\x20sent','debug','DashboardItem,\x20%s,\x20%s,\x20%s','error','code','message','catch','lodash','util','moment','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','./dashboardItem.socket'];(function(_0x4e676e,_0x2a7c6d){var _0x336a3c=function(_0x4767c4){while(--_0x4767c4){_0x4e676e['push'](_0x4e676e['shift']());}};_0x336a3c(++_0x2a7c6d);}(_0xd631,0x14f));var _0x1d63=function(_0x33554b,_0x48162b){_0x33554b=_0x33554b-0x0;var _0x256954=_0xd631[_0x33554b];return _0x256954;};'use strict';var _=require(_0x1d63('0x0'));var util=require(_0x1d63('0x1'));var moment=require(_0x1d63('0x2'));var BPromise=require('bluebird');var rs=require(_0x1d63('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x1d63('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x1d63('0x5'))(_0x1d63('0x6'));var config=require(_0x1d63('0x7'));var jayson=require(_0x1d63('0x8'));var client=jayson[_0x1d63('0x9')][_0x1d63('0xa')]({'port':0x232a});config[_0x1d63('0xb')]=_[_0x1d63('0xc')](config['redis'],{'host':_0x1d63('0xd'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x1d63('0xb')]));require(_0x1d63('0xe'))[_0x1d63('0xf')](socket);function respondWithRpcPromise(_0x3f44da,_0x3bfb5e,_0x641aaa){return new BPromise(function(_0x4d8cf9,_0x339c94){return client['request'](_0x3f44da,_0x641aaa)['then'](function(_0x95731a){logger[_0x1d63('0x10')](_0x1d63('0x11'),_0x3bfb5e,_0x1d63('0x12'));logger[_0x1d63('0x13')](_0x1d63('0x14'),_0x3bfb5e,_0x1d63('0x12'),JSON['stringify'](_0x95731a));if(_0x95731a[_0x1d63('0x15')]){if(_0x95731a[_0x1d63('0x15')][_0x1d63('0x16')]===0x1f4){logger[_0x1d63('0x15')](_0x1d63('0x11'),_0x3bfb5e,_0x95731a[_0x1d63('0x15')]['message']);return _0x339c94(_0x95731a[_0x1d63('0x15')][_0x1d63('0x17')]);}logger[_0x1d63('0x15')](_0x1d63('0x11'),_0x3bfb5e,_0x95731a[_0x1d63('0x15')]['message']);return _0x4d8cf9(_0x95731a[_0x1d63('0x15')][_0x1d63('0x17')]);}else{logger['info'](_0x1d63('0x11'),_0x3bfb5e,'request\x20sent');_0x4d8cf9(_0x95731a['result']['message']);}})[_0x1d63('0x18')](function(_0xb782bd){logger[_0x1d63('0x15')](_0x1d63('0x11'),_0x3bfb5e,_0xb782bd);_0x339c94(_0xb782bd);});});}
\ No newline at end of file
+var _0x219e=['socket.io-emitter','./dashboardItem.socket','register','then','info','DashboardItem,\x20%s,\x20%s','request\x20sent','debug','DashboardItem,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','client','http','defaults','redis','localhost'];(function(_0x42cae2,_0x284ef8){var _0x5f256f=function(_0x41abc8){while(--_0x41abc8){_0x42cae2['push'](_0x42cae2['shift']());}};_0x5f256f(++_0x284ef8);}(_0x219e,0x1ce));var _0xe219=function(_0xaa0309,_0x1c8008){_0xaa0309=_0xaa0309-0x0;var _0x5de7ce=_0x219e[_0xaa0309];return _0x5de7ce;};'use strict';var _=require('lodash');var util=require(_0xe219('0x0'));var moment=require(_0xe219('0x1'));var BPromise=require(_0xe219('0x2'));var rs=require(_0xe219('0x3'));var fs=require('fs');var Redis=require(_0xe219('0x4'));var db=require(_0xe219('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xe219('0x6'))(_0xe219('0x7'));var config=require(_0xe219('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xe219('0x9')][_0xe219('0xa')]({'port':0x232a});config['redis']=_[_0xe219('0xb')](config[_0xe219('0xc')],{'host':_0xe219('0xd'),'port':0x18eb});var socket=require(_0xe219('0xe'))(new Redis(config[_0xe219('0xc')]));require(_0xe219('0xf'))[_0xe219('0x10')](socket);function respondWithRpcPromise(_0x365523,_0x33f921,_0x4b245d){return new BPromise(function(_0x2882c4,_0x83b6b7){return client['request'](_0x365523,_0x4b245d)[_0xe219('0x11')](function(_0x1260e7){logger[_0xe219('0x12')](_0xe219('0x13'),_0x33f921,_0xe219('0x14'));logger[_0xe219('0x15')](_0xe219('0x16'),_0x33f921,_0xe219('0x14'),JSON[_0xe219('0x17')](_0x1260e7));if(_0x1260e7['error']){if(_0x1260e7[_0xe219('0x18')][_0xe219('0x19')]===0x1f4){logger[_0xe219('0x18')](_0xe219('0x13'),_0x33f921,_0x1260e7['error'][_0xe219('0x1a')]);return _0x83b6b7(_0x1260e7[_0xe219('0x18')][_0xe219('0x1a')]);}logger['error']('DashboardItem,\x20%s,\x20%s',_0x33f921,_0x1260e7[_0xe219('0x18')][_0xe219('0x1a')]);return _0x2882c4(_0x1260e7['error'][_0xe219('0x1a')]);}else{logger['info']('DashboardItem,\x20%s,\x20%s',_0x33f921,_0xe219('0x14'));_0x2882c4(_0x1260e7[_0xe219('0x1b')][_0xe219('0x1a')]);}})['catch'](function(_0x556e5d){logger[_0xe219('0x18')](_0xe219('0x13'),_0x33f921,_0x556e5d);_0x83b6b7(_0x556e5d);});});}
\ No newline at end of file
index ef1748e..7d05606 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['register','length','dashboardItem:','./dashboardItem.events','save','remove','update','emit','removeListener'];(function(_0x4cbf20,_0x1bfa66){var _0x582ae4=function(_0x5eca38){while(--_0x5eca38){_0x4cbf20['push'](_0x4cbf20['shift']());}};_0x582ae4(++_0x1bfa66);}(_0x9957,0x93));var _0x7995=function(_0x2f5ac5,_0x1ee939){_0x2f5ac5=_0x2f5ac5-0x0;var _0x37c9a8=_0x9957[_0x2f5ac5];return _0x37c9a8;};'use strict';var DashboardItemEvents=require(_0x7995('0x0'));var events=[_0x7995('0x1'),_0x7995('0x2'),_0x7995('0x3')];function createListener(_0x5b96eb,_0x86c128){return function(_0x3c58eb){_0x86c128[_0x7995('0x4')](_0x5b96eb,_0x3c58eb);};}function removeListener(_0x462a03,_0x576d89){return function(){DashboardItemEvents[_0x7995('0x5')](_0x462a03,_0x576d89);};}exports[_0x7995('0x6')]=function(_0x137b6b){for(var _0x219534=0x0,_0xbda126=events[_0x7995('0x7')];_0x219534<_0xbda126;_0x219534++){var _0x4996ca=events[_0x219534];var _0x465276=createListener(_0x7995('0x8')+_0x4996ca,_0x137b6b);DashboardItemEvents['on'](_0x4996ca,_0x465276);}};
\ No newline at end of file
+var _0x008c=['./dashboardItem.events','save','remove','update','emit','removeListener','register','dashboardItem:'];(function(_0x1a8fa1,_0x1c124b){var _0x467573=function(_0x12e534){while(--_0x12e534){_0x1a8fa1['push'](_0x1a8fa1['shift']());}};_0x467573(++_0x1c124b);}(_0x008c,0x188));var _0xc008=function(_0xc81f5f,_0x181205){_0xc81f5f=_0xc81f5f-0x0;var _0x4410dc=_0x008c[_0xc81f5f];return _0x4410dc;};'use strict';var DashboardItemEvents=require(_0xc008('0x0'));var events=[_0xc008('0x1'),_0xc008('0x2'),_0xc008('0x3')];function createListener(_0x1d119a,_0x544fdf){return function(_0x3641af){_0x544fdf[_0xc008('0x4')](_0x1d119a,_0x3641af);};}function removeListener(_0x10b33c,_0x163bd9){return function(){DashboardItemEvents[_0xc008('0x5')](_0x10b33c,_0x163bd9);};}exports[_0xc008('0x6')]=function(_0x13aa7){for(var _0x39bb5e=0x0,_0x9c8cb2=events['length'];_0x39bb5e<_0x9c8cb2;_0x39bb5e++){var _0x428fa9=events[_0x39bb5e];var _0x5aa09b=createListener(_0xc008('0x7')+_0x428fa9,_0x13aa7);DashboardItemEvents['on'](_0x428fa9,_0x5aa09b);}};
\ No newline at end of file
index d14f9dd..d3ab544 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x856b=['path','../../components/interaction/service','./dashboardItem.controller','/:id','isAuthenticated','show','post','create','update','destroy','exports','util'];(function(_0x267510,_0x19f897){var _0x4232fc=function(_0x417972){while(--_0x417972){_0x267510['push'](_0x267510['shift']());}};_0x4232fc(++_0x19f897);}(_0x856b,0x173));var _0xb856=function(_0x551bc1,_0x47cff3){_0x551bc1=_0x551bc1-0x0;var _0x12ea5e=_0x856b[_0x551bc1];return _0x12ea5e;};'use strict';var multer=require('multer');var util=require(_0xb856('0x0'));var path=require(_0xb856('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xb856('0x2'));var config=require('../../config/environment');var controller=require(_0xb856('0x3'));router['get'](_0xb856('0x4'),auth[_0xb856('0x5')](),controller[_0xb856('0x6')]);router[_0xb856('0x7')]('/',auth[_0xb856('0x5')](),controller[_0xb856('0x8')]);router['put']('/:id',auth[_0xb856('0x5')](),controller[_0xb856('0x9')]);router['delete'](_0xb856('0x4'),auth[_0xb856('0x5')](),controller[_0xb856('0xa')]);module[_0xb856('0xb')]=router;
\ No newline at end of file
+var _0xa82a=['/:id','isAuthenticated','show','update','delete','destroy','exports','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./dashboardItem.controller'];(function(_0x1d1779,_0x284147){var _0x2377e9=function(_0x299f6f){while(--_0x299f6f){_0x1d1779['push'](_0x1d1779['shift']());}};_0x2377e9(++_0x284147);}(_0xa82a,0x187));var _0xaa82=function(_0x2d9bcc,_0x318dd3){_0x2d9bcc=_0x2d9bcc-0x0;var _0x48eb43=_0xa82a[_0x2d9bcc];return _0x48eb43;};'use strict';var multer=require(_0xaa82('0x0'));var util=require(_0xaa82('0x1'));var path=require('path');var timeout=require(_0xaa82('0x2'));var express=require(_0xaa82('0x3'));var router=express[_0xaa82('0x4')]();var auth=require(_0xaa82('0x5'));var interaction=require(_0xaa82('0x6'));var config=require(_0xaa82('0x7'));var controller=require(_0xaa82('0x8'));router['get'](_0xaa82('0x9'),auth[_0xaa82('0xa')](),controller[_0xaa82('0xb')]);router['post']('/',auth[_0xaa82('0xa')](),controller['create']);router['put'](_0xaa82('0x9'),auth[_0xaa82('0xa')](),controller[_0xaa82('0xc')]);router[_0xaa82('0xd')](_0xaa82('0x9'),auth['isAuthenticated'](),controller[_0xaa82('0xe')]);module[_0xaa82('0xf')]=router;
\ No newline at end of file
index 7712f49..f4a21f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x45f6=['sequelize'];(function(_0xb8dc9f,_0xb603be){var _0x1f9922=function(_0x2e24ce){while(--_0x2e24ce){_0xb8dc9f['push'](_0xb8dc9f['shift']());}};_0x1f9922(++_0xb603be);}(_0x45f6,0xa0));var _0x645f=function(_0x20ebb5,_0x237d88){_0x20ebb5=_0x20ebb5-0x0;var _0x487182=_0x45f6[_0x20ebb5];return _0x487182;};'use strict';var Sequelize=require(_0x645f('0x0'));module['exports']={'name':{'type':Sequelize['STRING'],'allowNull':![]}};
\ No newline at end of file
+var _0x528f=['exports','STRING','sequelize'];(function(_0x21c3ee,_0x4c4b6f){var _0x8657b2=function(_0x284dcf){while(--_0x284dcf){_0x21c3ee['push'](_0x21c3ee['shift']());}};_0x8657b2(++_0x4c4b6f);}(_0x528f,0x131));var _0xf528=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x528f[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0xf528('0x0'));module[_0xf528('0x1')]={'name':{'type':Sequelize[_0xf528('0x2')],'allowNull':![]}};
\ No newline at end of file
index 2205117..5bb11d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd001=['destroy','then','get','UserProfileResource','error','stack','name','Disposition','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','map','type','key','VIRTUAL','field','merge','options','count','includeAll','include','catch','show','find','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','Dispositions','UserProfileSection','userProfileId','autoAssociation','create','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','params','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','jsforce','desk.js','papaparse','ioredis','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','offset','limit','set','Content-Range','json','reject','save','update'];(function(_0x5e2cb4,_0x592c64){var _0x282902=function(_0x1c1836){while(--_0x1c1836){_0x5e2cb4['push'](_0x5e2cb4['shift']());}};_0x282902(++_0x592c64);}(_0xd001,0x120));var _0x1d00=function(_0x32b5e1,_0x43f2c1){_0x32b5e1=_0x32b5e1-0x0;var _0xc5f102=_0xd001[_0x32b5e1];return _0xc5f102;};'use strict';var pdf=require(_0x1d00('0x0'));var emlformat=require(_0x1d00('0x1'));var rimraf=require(_0x1d00('0x2'));var zipdir=require(_0x1d00('0x3'));var jsonpatch=require(_0x1d00('0x4'));var rp=require(_0x1d00('0x5'));var moment=require(_0x1d00('0x6'));var BPromise=require(_0x1d00('0x7'));var Mustache=require('mustache');var util=require(_0x1d00('0x8'));var path=require(_0x1d00('0x9'));var sox=require(_0x1d00('0xa'));var csv=require(_0x1d00('0xb'));var ejs=require(_0x1d00('0xc'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x1d00('0xd'));var deskjs=require(_0x1d00('0xe'));var toCsv=require(_0x1d00('0xb'));var querystring=require('querystring');var Papa=require(_0x1d00('0xf'));var Redis=require(_0x1d00('0x10'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0x1d00('0x11'))(_0x1d00('0x12'));var utils=require(_0x1d00('0x13'));var config=require(_0x1d00('0x14'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2c1914,_0xf34f23){_0xf34f23=_0xf34f23||0xcc;return function(_0x492e7f){if(_0x492e7f){return _0x2c1914[_0x1d00('0x15')](_0xf34f23);}return _0x2c1914[_0x1d00('0x16')](_0xf34f23)[_0x1d00('0x17')]();};}function respondWithResult(_0xf0d423,_0x2bc3b7){_0x2bc3b7=_0x2bc3b7||0xc8;return function(_0x47b75b){if(_0x47b75b){return _0xf0d423[_0x1d00('0x16')](_0x2bc3b7)['json'](_0x47b75b);}};}function respondWithFilteredResult(_0x1bd5de,_0x3a3777){return function(_0x473f26){if(_0x473f26){var _0x30b7ba=_0x473f26['count'],_0x5f2811=_0x3a3777[_0x1d00('0x18')],_0x5832e6=_0x3a3777[_0x1d00('0x18')]+_0x3a3777[_0x1d00('0x19')],_0x309813;if(_0x5832e6>=_0x30b7ba){_0x5832e6=_0x30b7ba;_0x309813=0xc8;}else{_0x309813=0xce;}_0x1bd5de['status'](_0x309813);return _0x1bd5de[_0x1d00('0x1a')](_0x1d00('0x1b'),_0x5f2811+'-'+_0x5832e6+'/'+_0x30b7ba)[_0x1d00('0x1c')](_0x473f26);}return null;};}function patchUpdates(_0x4f9b3d){return function(_0x1c92b3){try{jsonpatch['apply'](_0x1c92b3,_0x4f9b3d,!![]);}catch(_0x451769){return BPromise[_0x1d00('0x1d')](_0x451769);}return _0x1c92b3[_0x1d00('0x1e')]();};}function saveUpdates(_0x10f87c,_0x372351){return function(_0x39f180){if(_0x39f180){return _0x39f180[_0x1d00('0x1f')](_0x10f87c)['then'](function(_0x3ae303){return _0x3ae303;});}return null;};}function removeEntity(_0x587732,_0x1bca36){return function(_0xf9c604){if(_0xf9c604){return _0xf9c604[_0x1d00('0x20')]()[_0x1d00('0x21')](function(){var _0x4de6cb=_0xf9c604[_0x1d00('0x22')]({'plain':!![]});var _0x4b07b8='Dispositions';return db[_0x1d00('0x23')][_0x1d00('0x20')]({'where':{'type':_0x4b07b8,'resourceId':_0x4de6cb['id']}})[_0x1d00('0x21')](function(){return _0xf9c604;});})[_0x1d00('0x21')](function(){_0x587732['status'](0xcc)[_0x1d00('0x17')]();});}};}function handleEntityNotFound(_0x65b75f,_0x2bf4fe){return function(_0x4dc027){if(!_0x4dc027){_0x65b75f[_0x1d00('0x15')](0x194);}return _0x4dc027;};}function handleError(_0x42107e,_0x5c3c38){_0x5c3c38=_0x5c3c38||0x1f4;return function(_0x35eaa5){logger[_0x1d00('0x24')](_0x35eaa5[_0x1d00('0x25')]);if(_0x35eaa5[_0x1d00('0x26')]){delete _0x35eaa5[_0x1d00('0x26')];}_0x42107e[_0x1d00('0x16')](_0x5c3c38)['send'](_0x35eaa5);};}exports['index']=function(_0x324496,_0x2313de){var _0x3c4e23={},_0x33b20b={},_0xf4ab80={'count':0x0,'rows':[]};var _0x23a09e=db[_0x1d00('0x27')][_0x1d00('0x28')];_0x33b20b[_0x1d00('0x29')]=_[_0x1d00('0x2a')](_0x23a09e);_0x33b20b[_0x1d00('0x2b')]=_[_0x1d00('0x2a')](_0x324496['query']);_0x33b20b[_0x1d00('0x2c')]=_[_0x1d00('0x2d')](_0x33b20b[_0x1d00('0x29')],_0x33b20b[_0x1d00('0x2b')]);_0x3c4e23['attributes']=_[_0x1d00('0x2d')](_0x33b20b['model'],qs[_0x1d00('0x2e')](_0x324496[_0x1d00('0x2b')][_0x1d00('0x2e')]));_0x3c4e23['attributes']=_0x3c4e23[_0x1d00('0x2f')][_0x1d00('0x30')]?_0x3c4e23[_0x1d00('0x2f')]:_0x33b20b[_0x1d00('0x29')];if(!_0x324496[_0x1d00('0x2b')][_0x1d00('0x31')](_0x1d00('0x32'))){_0x3c4e23[_0x1d00('0x19')]=qs['limit'](_0x324496['query'][_0x1d00('0x19')]);_0x3c4e23['offset']=qs[_0x1d00('0x18')](_0x324496['query'][_0x1d00('0x18')]);}_0x3c4e23[_0x1d00('0x33')]=qs[_0x1d00('0x34')](_0x324496['query'][_0x1d00('0x34')]);_0x3c4e23[_0x1d00('0x35')]=qs['filters'](_[_0x1d00('0x36')](_0x324496[_0x1d00('0x2b')],_0x33b20b['filters']));if(_0x324496[_0x1d00('0x2b')][_0x1d00('0x37')]){_0x3c4e23['where']=_['merge'](_0x3c4e23['where'],{'$or':_[_0x1d00('0x38')](_0x23a09e,function(_0x3a59ff){if(_0x3a59ff[_0x1d00('0x39')][_0x1d00('0x3a')]!==_0x1d00('0x3b')){var _0x1abcd4={};_0x1abcd4[_0x3a59ff[_0x1d00('0x3c')]]={'$like':'%'+_0x324496[_0x1d00('0x2b')][_0x1d00('0x37')]+'%'};return _0x1abcd4;}})});}_0x3c4e23=_[_0x1d00('0x3d')]({},_0x3c4e23,_0x324496[_0x1d00('0x3e')]);var _0x3396e8={'where':_0x3c4e23['where']};return db[_0x1d00('0x27')][_0x1d00('0x3f')](_0x3396e8)[_0x1d00('0x21')](function(_0x29f133){_0xf4ab80['count']=_0x29f133;if(_0x324496['query'][_0x1d00('0x40')]){_0x3c4e23[_0x1d00('0x41')]=[{'all':!![]}];}return db[_0x1d00('0x27')]['findAll'](_0x3c4e23);})[_0x1d00('0x21')](function(_0x190378){_0xf4ab80['rows']=_0x190378;return _0xf4ab80;})['then'](respondWithFilteredResult(_0x2313de,_0x3c4e23))[_0x1d00('0x42')](handleError(_0x2313de,null));};exports[_0x1d00('0x43')]=function(_0x2ea4db,_0xfa979b){var _0x44f83c={'raw':!![],'where':{'id':_0x2ea4db['params']['id']}},_0x32836b={};_0x32836b[_0x1d00('0x29')]=_[_0x1d00('0x2a')](db['Disposition'][_0x1d00('0x28')]);_0x32836b['query']=_[_0x1d00('0x2a')](_0x2ea4db['query']);_0x32836b[_0x1d00('0x2c')]=_[_0x1d00('0x2d')](_0x32836b[_0x1d00('0x29')],_0x32836b[_0x1d00('0x2b')]);_0x44f83c[_0x1d00('0x2f')]=_['intersection'](_0x32836b['model'],qs[_0x1d00('0x2e')](_0x2ea4db[_0x1d00('0x2b')][_0x1d00('0x2e')]));_0x44f83c[_0x1d00('0x2f')]=_0x44f83c[_0x1d00('0x2f')][_0x1d00('0x30')]?_0x44f83c[_0x1d00('0x2f')]:_0x32836b[_0x1d00('0x29')];if(_0x2ea4db[_0x1d00('0x2b')][_0x1d00('0x40')]){_0x44f83c[_0x1d00('0x41')]=[{'all':!![]}];}_0x44f83c=_[_0x1d00('0x3d')]({},_0x44f83c,_0x2ea4db['options']);return db['Disposition'][_0x1d00('0x44')](_0x44f83c)[_0x1d00('0x21')](handleEntityNotFound(_0xfa979b,null))[_0x1d00('0x21')](respondWithResult(_0xfa979b,null))[_0x1d00('0x42')](handleError(_0xfa979b,null));};exports['create']=function(_0x116970,_0xafbb1a){return db[_0x1d00('0x27')]['create'](_0x116970['body'],{})[_0x1d00('0x21')](function(_0x1794e7){var _0x26a7c7=_0x116970['user'][_0x1d00('0x22')]({'plain':!![]});if(!_0x26a7c7)throw new Error(_0x1d00('0x45'));if(_0x26a7c7[_0x1d00('0x46')]===_0x1d00('0x47')){var _0x2e67d0=_0x1794e7[_0x1d00('0x22')]({'plain':!![]});var _0x2b6ae0=_0x1d00('0x48');return db[_0x1d00('0x49')]['find']({'where':{'name':_0x2b6ae0,'userProfileId':_0x26a7c7[_0x1d00('0x4a')]},'raw':!![]})['then'](function(_0x1ff223){if(_0x1ff223&&_0x1ff223[_0x1d00('0x4b')]===0x0){return db[_0x1d00('0x23')][_0x1d00('0x4c')]({'name':_0x2e67d0['name'],'resourceId':_0x2e67d0['id'],'type':_0x1ff223['name'],'sectionId':_0x1ff223['id']},{})[_0x1d00('0x21')](function(){return _0x1794e7;});}else{return _0x1794e7;}})[_0x1d00('0x42')](function(_0x3afbfa){logger[_0x1d00('0x24')](_0x1d00('0x4d'),_0x3afbfa);throw _0x3afbfa;});}return _0x1794e7;})[_0x1d00('0x21')](respondWithResult(_0xafbb1a,0xc9))[_0x1d00('0x42')](handleError(_0xafbb1a,null));};exports['update']=function(_0xe17b3c,_0x362848){if(_0xe17b3c[_0x1d00('0x4e')]['id']){delete _0xe17b3c[_0x1d00('0x4e')]['id'];}return db[_0x1d00('0x27')][_0x1d00('0x44')]({'where':{'id':_0xe17b3c[_0x1d00('0x4f')]['id']}})[_0x1d00('0x21')](handleEntityNotFound(_0x362848,null))[_0x1d00('0x21')](saveUpdates(_0xe17b3c['body'],null))[_0x1d00('0x21')](respondWithResult(_0x362848,null))['catch'](handleError(_0x362848,null));};exports['destroy']=function(_0x3ed7cb,_0x1a1bec){return db[_0x1d00('0x27')][_0x1d00('0x44')]({'where':{'id':_0x3ed7cb[_0x1d00('0x4f')]['id']}})[_0x1d00('0x21')](handleEntityNotFound(_0x1a1bec,null))[_0x1d00('0x21')](removeEntity(_0x1a1bec,null))[_0x1d00('0x42')](handleError(_0x1a1bec,null));};
\ No newline at end of file
+var _0x11e5=['keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','limit','sort','where','pick','map','VIRTUAL','field','filter','options','includeAll','include','findAll','rows','catch','show','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','sendStatus','end','status','count','offset','set','Content-Range','json','reject','save','update','then','destroy','error','stack','name','send','index','Disposition','rawAttributes','model'];(function(_0x2070da,_0x45e586){var _0x4f9fe1=function(_0x5b6f2a){while(--_0x5b6f2a){_0x2070da['push'](_0x2070da['shift']());}};_0x4f9fe1(++_0x45e586);}(_0x11e5,0x117));var _0x511e=function(_0x4cca27,_0x18e06f){_0x4cca27=_0x4cca27-0x0;var _0x3d8219=_0x11e5[_0x4cca27];return _0x3d8219;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x511e('0x0'));var rimraf=require(_0x511e('0x1'));var zipdir=require(_0x511e('0x2'));var jsonpatch=require(_0x511e('0x3'));var rp=require(_0x511e('0x4'));var moment=require(_0x511e('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x511e('0x6'));var util=require(_0x511e('0x7'));var path=require('path');var sox=require(_0x511e('0x8'));var csv=require(_0x511e('0x9'));var ejs=require(_0x511e('0xa'));var fs=require('fs');var _=require(_0x511e('0xb'));var squel=require(_0x511e('0xc'));var crypto=require(_0x511e('0xd'));var jsforce=require(_0x511e('0xe'));var deskjs=require(_0x511e('0xf'));var toCsv=require(_0x511e('0x9'));var querystring=require(_0x511e('0x10'));var Papa=require('papaparse');var Redis=require(_0x511e('0x11'));var authService=require(_0x511e('0x12'));var qs=require(_0x511e('0x13'));var hardwareService=require(_0x511e('0x14'));var logger=require(_0x511e('0x15'))(_0x511e('0x16'));var utils=require('../../config/utils');var config=require(_0x511e('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x130b40,_0x1ca897){_0x1ca897=_0x1ca897||0xcc;return function(_0x5a8e85){if(_0x5a8e85){return _0x130b40[_0x511e('0x18')](_0x1ca897);}return _0x130b40['status'](_0x1ca897)[_0x511e('0x19')]();};}function respondWithResult(_0x287f68,_0x5a086a){_0x5a086a=_0x5a086a||0xc8;return function(_0x5a1299){if(_0x5a1299){return _0x287f68[_0x511e('0x1a')](_0x5a086a)['json'](_0x5a1299);}};}function respondWithFilteredResult(_0x192872,_0x3120b8){return function(_0x1ddd2a){if(_0x1ddd2a){var _0xbf708=_0x1ddd2a[_0x511e('0x1b')],_0x331bd7=_0x3120b8['offset'],_0x3b4a57=_0x3120b8[_0x511e('0x1c')]+_0x3120b8['limit'],_0x3b8946;if(_0x3b4a57>=_0xbf708){_0x3b4a57=_0xbf708;_0x3b8946=0xc8;}else{_0x3b8946=0xce;}_0x192872[_0x511e('0x1a')](_0x3b8946);return _0x192872[_0x511e('0x1d')](_0x511e('0x1e'),_0x331bd7+'-'+_0x3b4a57+'/'+_0xbf708)[_0x511e('0x1f')](_0x1ddd2a);}return null;};}function patchUpdates(_0x6899b1){return function(_0x22f717){try{jsonpatch['apply'](_0x22f717,_0x6899b1,!![]);}catch(_0x4985c2){return BPromise[_0x511e('0x20')](_0x4985c2);}return _0x22f717[_0x511e('0x21')]();};}function saveUpdates(_0x3f0074,_0x2c4a77){return function(_0x6246d6){if(_0x6246d6){return _0x6246d6[_0x511e('0x22')](_0x3f0074)[_0x511e('0x23')](function(_0x300f28){return _0x300f28;});}return null;};}function removeEntity(_0x3e0586,_0xf18f93){return function(_0x35dc39){if(_0x35dc39){return _0x35dc39[_0x511e('0x24')]()[_0x511e('0x23')](function(){var _0x3cfaf8=_0x35dc39['get']({'plain':!![]});var _0x33183b='Dispositions';return db['UserProfileResource'][_0x511e('0x24')]({'where':{'type':_0x33183b,'resourceId':_0x3cfaf8['id']}})[_0x511e('0x23')](function(){return _0x35dc39;});})[_0x511e('0x23')](function(){_0x3e0586[_0x511e('0x1a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x167225,_0x416643){return function(_0x39e31a){if(!_0x39e31a){_0x167225[_0x511e('0x18')](0x194);}return _0x39e31a;};}function handleError(_0x159fcf,_0x329e5c){_0x329e5c=_0x329e5c||0x1f4;return function(_0x253f35){logger[_0x511e('0x25')](_0x253f35[_0x511e('0x26')]);if(_0x253f35[_0x511e('0x27')]){delete _0x253f35['name'];}_0x159fcf[_0x511e('0x1a')](_0x329e5c)[_0x511e('0x28')](_0x253f35);};}exports[_0x511e('0x29')]=function(_0x5cf8c3,_0x170eed){var _0x186ebd={},_0x18c928={},_0x225970={'count':0x0,'rows':[]};var _0x37d883=db[_0x511e('0x2a')][_0x511e('0x2b')];_0x18c928[_0x511e('0x2c')]=_[_0x511e('0x2d')](_0x37d883);_0x18c928[_0x511e('0x2e')]=_['keys'](_0x5cf8c3[_0x511e('0x2e')]);_0x18c928[_0x511e('0x2f')]=_['intersection'](_0x18c928['model'],_0x18c928[_0x511e('0x2e')]);_0x186ebd[_0x511e('0x30')]=_[_0x511e('0x31')](_0x18c928['model'],qs['fields'](_0x5cf8c3[_0x511e('0x2e')][_0x511e('0x32')]));_0x186ebd[_0x511e('0x30')]=_0x186ebd[_0x511e('0x30')][_0x511e('0x33')]?_0x186ebd[_0x511e('0x30')]:_0x18c928[_0x511e('0x2c')];if(!_0x5cf8c3[_0x511e('0x2e')][_0x511e('0x34')](_0x511e('0x35'))){_0x186ebd[_0x511e('0x36')]=qs[_0x511e('0x36')](_0x5cf8c3[_0x511e('0x2e')][_0x511e('0x36')]);_0x186ebd[_0x511e('0x1c')]=qs[_0x511e('0x1c')](_0x5cf8c3['query']['offset']);}_0x186ebd['order']=qs[_0x511e('0x37')](_0x5cf8c3[_0x511e('0x2e')][_0x511e('0x37')]);_0x186ebd[_0x511e('0x38')]=qs[_0x511e('0x2f')](_[_0x511e('0x39')](_0x5cf8c3[_0x511e('0x2e')],_0x18c928['filters']));if(_0x5cf8c3[_0x511e('0x2e')]['filter']){_0x186ebd[_0x511e('0x38')]=_['merge'](_0x186ebd['where'],{'$or':_[_0x511e('0x3a')](_0x37d883,function(_0x520082){if(_0x520082['type']['key']!==_0x511e('0x3b')){var _0x4cf56b={};_0x4cf56b[_0x520082[_0x511e('0x3c')]]={'$like':'%'+_0x5cf8c3[_0x511e('0x2e')][_0x511e('0x3d')]+'%'};return _0x4cf56b;}})});}_0x186ebd=_['merge']({},_0x186ebd,_0x5cf8c3[_0x511e('0x3e')]);var _0x2bcd57={'where':_0x186ebd[_0x511e('0x38')]};return db[_0x511e('0x2a')][_0x511e('0x1b')](_0x2bcd57)[_0x511e('0x23')](function(_0x3d72ba){_0x225970[_0x511e('0x1b')]=_0x3d72ba;if(_0x5cf8c3[_0x511e('0x2e')][_0x511e('0x3f')]){_0x186ebd[_0x511e('0x40')]=[{'all':!![]}];}return db[_0x511e('0x2a')][_0x511e('0x41')](_0x186ebd);})[_0x511e('0x23')](function(_0x5cd3db){_0x225970[_0x511e('0x42')]=_0x5cd3db;return _0x225970;})[_0x511e('0x23')](respondWithFilteredResult(_0x170eed,_0x186ebd))[_0x511e('0x43')](handleError(_0x170eed,null));};exports[_0x511e('0x44')]=function(_0x4c3ae9,_0x51554a){var _0xa1230f={'raw':!![],'where':{'id':_0x4c3ae9['params']['id']}},_0x273cfb={};_0x273cfb[_0x511e('0x2c')]=_[_0x511e('0x2d')](db[_0x511e('0x2a')]['rawAttributes']);_0x273cfb[_0x511e('0x2e')]=_[_0x511e('0x2d')](_0x4c3ae9[_0x511e('0x2e')]);_0x273cfb[_0x511e('0x2f')]=_[_0x511e('0x31')](_0x273cfb[_0x511e('0x2c')],_0x273cfb['query']);_0xa1230f[_0x511e('0x30')]=_[_0x511e('0x31')](_0x273cfb[_0x511e('0x2c')],qs[_0x511e('0x32')](_0x4c3ae9[_0x511e('0x2e')]['fields']));_0xa1230f[_0x511e('0x30')]=_0xa1230f[_0x511e('0x30')][_0x511e('0x33')]?_0xa1230f['attributes']:_0x273cfb[_0x511e('0x2c')];if(_0x4c3ae9[_0x511e('0x2e')][_0x511e('0x3f')]){_0xa1230f[_0x511e('0x40')]=[{'all':!![]}];}_0xa1230f=_['merge']({},_0xa1230f,_0x4c3ae9[_0x511e('0x3e')]);return db[_0x511e('0x2a')][_0x511e('0x45')](_0xa1230f)[_0x511e('0x23')](handleEntityNotFound(_0x51554a,null))[_0x511e('0x23')](respondWithResult(_0x51554a,null))['catch'](handleError(_0x51554a,null));};exports[_0x511e('0x46')]=function(_0x1f77c6,_0x97d192){return db['Disposition'][_0x511e('0x46')](_0x1f77c6[_0x511e('0x47')],{})['then'](function(_0x48be27){var _0x4d0c43=_0x1f77c6[_0x511e('0x48')][_0x511e('0x49')]({'plain':!![]});if(!_0x4d0c43)throw new Error(_0x511e('0x4a'));if(_0x4d0c43[_0x511e('0x4b')]==='user'){var _0x1461c8=_0x48be27[_0x511e('0x49')]({'plain':!![]});var _0x449c7b='Dispositions';return db[_0x511e('0x4c')][_0x511e('0x45')]({'where':{'name':_0x449c7b,'userProfileId':_0x4d0c43[_0x511e('0x4d')]},'raw':!![]})['then'](function(_0x2a1b07){if(_0x2a1b07&&_0x2a1b07['autoAssociation']===0x0){return db[_0x511e('0x4e')]['create']({'name':_0x1461c8[_0x511e('0x27')],'resourceId':_0x1461c8['id'],'type':_0x2a1b07['name'],'sectionId':_0x2a1b07['id']},{})[_0x511e('0x23')](function(){return _0x48be27;});}else{return _0x48be27;}})[_0x511e('0x43')](function(_0xd6e60){logger[_0x511e('0x25')](_0x511e('0x4f'),_0xd6e60);throw _0xd6e60;});}return _0x48be27;})['then'](respondWithResult(_0x97d192,0xc9))[_0x511e('0x43')](handleError(_0x97d192,null));};exports[_0x511e('0x22')]=function(_0x4e4421,_0x17ed07){if(_0x4e4421[_0x511e('0x47')]['id']){delete _0x4e4421[_0x511e('0x47')]['id'];}return db[_0x511e('0x2a')]['find']({'where':{'id':_0x4e4421[_0x511e('0x50')]['id']}})[_0x511e('0x23')](handleEntityNotFound(_0x17ed07,null))[_0x511e('0x23')](saveUpdates(_0x4e4421[_0x511e('0x47')],null))['then'](respondWithResult(_0x17ed07,null))['catch'](handleError(_0x17ed07,null));};exports['destroy']=function(_0x1495f9,_0x335f6e){return db[_0x511e('0x2a')][_0x511e('0x45')]({'where':{'id':_0x1495f9[_0x511e('0x50')]['id']}})[_0x511e('0x23')](handleEntityNotFound(_0x335f6e,null))[_0x511e('0x23')](removeEntity(_0x335f6e,null))[_0x511e('0x43')](handleError(_0x335f6e,null));};
\ No newline at end of file
index 4b40571..1c96ae1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdc1c=['path','rimraf','../../config/environment','exports','define','Disposition','tools_dispositions','name_voice','name','ListId','name_chat','ChatWebsiteId','MailAccountId','name_sms','name_fax','FaxAccountId','name_openchannel','OpenchannelAccountId','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x24b5b3,_0x4b5c87){var _0xd20ead=function(_0x127970){while(--_0x127970){_0x24b5b3['push'](_0x24b5b3['shift']());}};_0xd20ead(++_0x4b5c87);}(_0xdc1c,0xf3));var _0xcdc1=function(_0x40aaf3,_0x29c257){_0x40aaf3=_0x40aaf3-0x0;var _0x2b6b2a=_0xdc1c[_0x40aaf3];return _0x2b6b2a;};'use strict';var _=require(_0xcdc1('0x0'));var util=require(_0xcdc1('0x1'));var logger=require(_0xcdc1('0x2'))(_0xcdc1('0x3'));var moment=require(_0xcdc1('0x4'));var BPromise=require(_0xcdc1('0x5'));var rp=require(_0xcdc1('0x6'));var fs=require('fs');var path=require(_0xcdc1('0x7'));var rimraf=require(_0xcdc1('0x8'));var config=require(_0xcdc1('0x9'));var attributes=require('./disposition.attributes');module[_0xcdc1('0xa')]=function(_0x2b275c,_0x34404e){return _0x2b275c[_0xcdc1('0xb')](_0xcdc1('0xc'),attributes,{'tableName':_0xcdc1('0xd'),'paranoid':![],'indexes':[{'unique':!![],'name':_0xcdc1('0xe'),'fields':[_0xcdc1('0xf'),_0xcdc1('0x10')]},{'unique':!![],'name':_0xcdc1('0x11'),'fields':[_0xcdc1('0xf'),_0xcdc1('0x12')]},{'unique':!![],'name':'name_mail','fields':[_0xcdc1('0xf'),_0xcdc1('0x13')]},{'unique':!![],'name':_0xcdc1('0x14'),'fields':[_0xcdc1('0xf'),'SmsAccountId']},{'unique':!![],'name':_0xcdc1('0x15'),'fields':[_0xcdc1('0xf'),_0xcdc1('0x16')]},{'unique':!![],'name':_0xcdc1('0x17'),'fields':[_0xcdc1('0xf'),_0xcdc1('0x18')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x0d1d=['ListId','ChatWebsiteId','name_mail','MailAccountId','name_sms','SmsAccountId','name_fax','FaxAccountId','name_openchannel','OpenchannelAccountId','lodash','util','api','moment','bluebird','request-promise','path','../../config/environment','./disposition.attributes','exports','define','Disposition','name_voice','name'];(function(_0x5e0c97,_0x407d7d){var _0x1ebe95=function(_0x2210a1){while(--_0x2210a1){_0x5e0c97['push'](_0x5e0c97['shift']());}};_0x1ebe95(++_0x407d7d);}(_0x0d1d,0x15a));var _0xd0d1=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0d1d[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xd0d1('0x0'));var util=require(_0xd0d1('0x1'));var logger=require('../../config/logger')(_0xd0d1('0x2'));var moment=require(_0xd0d1('0x3'));var BPromise=require(_0xd0d1('0x4'));var rp=require(_0xd0d1('0x5'));var fs=require('fs');var path=require(_0xd0d1('0x6'));var rimraf=require('rimraf');var config=require(_0xd0d1('0x7'));var attributes=require(_0xd0d1('0x8'));module[_0xd0d1('0x9')]=function(_0x103112,_0x317c14){return _0x103112[_0xd0d1('0xa')](_0xd0d1('0xb'),attributes,{'tableName':'tools_dispositions','paranoid':![],'indexes':[{'unique':!![],'name':_0xd0d1('0xc'),'fields':[_0xd0d1('0xd'),_0xd0d1('0xe')]},{'unique':!![],'name':'name_chat','fields':[_0xd0d1('0xd'),_0xd0d1('0xf')]},{'unique':!![],'name':_0xd0d1('0x10'),'fields':[_0xd0d1('0xd'),_0xd0d1('0x11')]},{'unique':!![],'name':_0xd0d1('0x12'),'fields':[_0xd0d1('0xd'),_0xd0d1('0x13')]},{'unique':!![],'name':_0xd0d1('0x14'),'fields':[_0xd0d1('0xd'),_0xd0d1('0x15')]},{'unique':!![],'name':_0xd0d1('0x16'),'fields':[_0xd0d1('0xd'),_0xd0d1('0x17')]}],'timestamps':!![]});};
\ No newline at end of file
index a72a4e0..37ca7d1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ca9=['info','Disposition,\x20%s,\x20%s','request\x20sent','debug','Disposition,\x20%s,\x20%s,\x20%s','stringify','error','message','result','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','rpc','jayson/promise','http','request','then'];(function(_0x44c0b5,_0x35ab95){var _0x54a31c=function(_0x457f0d){while(--_0x457f0d){_0x44c0b5['push'](_0x44c0b5['shift']());}};_0x54a31c(++_0x35ab95);}(_0x8ca9,0x9c));var _0x98ca=function(_0xdb23fd,_0x2c4714){_0xdb23fd=_0xdb23fd-0x0;var _0x541393=_0x8ca9[_0xdb23fd];return _0x541393;};'use strict';var _=require(_0x98ca('0x0'));var util=require(_0x98ca('0x1'));var moment=require(_0x98ca('0x2'));var BPromise=require(_0x98ca('0x3'));var rs=require(_0x98ca('0x4'));var fs=require('fs');var Redis=require(_0x98ca('0x5'));var db=require(_0x98ca('0x6'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x98ca('0x7'));var config=require('../../config/environment');var jayson=require(_0x98ca('0x8'));var client=jayson['client'][_0x98ca('0x9')]({'port':0x232a});function respondWithRpcPromise(_0xca4097,_0x18c349,_0x2852a0){return new BPromise(function(_0x323c95,_0x28a37a){return client[_0x98ca('0xa')](_0xca4097,_0x2852a0)[_0x98ca('0xb')](function(_0x277c29){logger[_0x98ca('0xc')](_0x98ca('0xd'),_0x18c349,_0x98ca('0xe'));logger[_0x98ca('0xf')](_0x98ca('0x10'),_0x18c349,_0x98ca('0xe'),JSON[_0x98ca('0x11')](_0x277c29));if(_0x277c29[_0x98ca('0x12')]){if(_0x277c29[_0x98ca('0x12')]['code']===0x1f4){logger[_0x98ca('0x12')](_0x98ca('0xd'),_0x18c349,_0x277c29[_0x98ca('0x12')][_0x98ca('0x13')]);return _0x28a37a(_0x277c29['error'][_0x98ca('0x13')]);}logger[_0x98ca('0x12')](_0x98ca('0xd'),_0x18c349,_0x277c29[_0x98ca('0x12')][_0x98ca('0x13')]);return _0x323c95(_0x277c29[_0x98ca('0x12')][_0x98ca('0x13')]);}else{logger['info'](_0x98ca('0xd'),_0x18c349,_0x98ca('0xe'));_0x323c95(_0x277c29[_0x98ca('0x14')][_0x98ca('0x13')]);}})['catch'](function(_0x238c1a){logger[_0x98ca('0x12')](_0x98ca('0xd'),_0x18c349,_0x238c1a);_0x28a37a(_0x238c1a);});});}
\ No newline at end of file
+var _0x5577=['moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','then','info','Disposition,\x20%s,\x20%s','request\x20sent','debug','Disposition,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash'];(function(_0x3ab51d,_0x2fa01d){var _0x29a04e=function(_0x7807b0){while(--_0x7807b0){_0x3ab51d['push'](_0x3ab51d['shift']());}};_0x29a04e(++_0x2fa01d);}(_0x5577,0x1b4));var _0x7557=function(_0x46cb7e,_0x4818ad){_0x46cb7e=_0x46cb7e-0x0;var _0x47cfe7=_0x5577[_0x46cb7e];return _0x47cfe7;};'use strict';var _=require(_0x7557('0x0'));var util=require('util');var moment=require(_0x7557('0x1'));var BPromise=require(_0x7557('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7557('0x3'));var db=require(_0x7557('0x4'))['db'];var utils=require(_0x7557('0x5'));var logger=require(_0x7557('0x6'))(_0x7557('0x7'));var config=require(_0x7557('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x7557('0x9')][_0x7557('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3da895,_0x1446fd,_0x33e9aa){return new BPromise(function(_0x37f335,_0xa4f49a){return client[_0x7557('0xb')](_0x3da895,_0x33e9aa)[_0x7557('0xc')](function(_0x24b592){logger[_0x7557('0xd')](_0x7557('0xe'),_0x1446fd,_0x7557('0xf'));logger[_0x7557('0x10')](_0x7557('0x11'),_0x1446fd,'request\x20sent',JSON['stringify'](_0x24b592));if(_0x24b592[_0x7557('0x12')]){if(_0x24b592[_0x7557('0x12')][_0x7557('0x13')]===0x1f4){logger[_0x7557('0x12')](_0x7557('0xe'),_0x1446fd,_0x24b592[_0x7557('0x12')][_0x7557('0x14')]);return _0xa4f49a(_0x24b592[_0x7557('0x12')][_0x7557('0x14')]);}logger[_0x7557('0x12')]('Disposition,\x20%s,\x20%s',_0x1446fd,_0x24b592[_0x7557('0x12')][_0x7557('0x14')]);return _0x37f335(_0x24b592[_0x7557('0x12')]['message']);}else{logger[_0x7557('0xd')](_0x7557('0xe'),_0x1446fd,_0x7557('0xf'));_0x37f335(_0x24b592[_0x7557('0x15')]['message']);}})[_0x7557('0x16')](function(_0x46057c){logger['error']('Disposition,\x20%s,\x20%s',_0x1446fd,_0x46057c);_0xa4f49a(_0x46057c);});});}
\ No newline at end of file
index e932546..df791fd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x90e2=['util','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./disposition.controller','get','isAuthenticated','index','/:id','show','create','put','delete','destroy','exports','multer'];(function(_0x50b6e7,_0x2cb441){var _0x4a5887=function(_0x3b1e75){while(--_0x3b1e75){_0x50b6e7['push'](_0x50b6e7['shift']());}};_0x4a5887(++_0x2cb441);}(_0x90e2,0x143));var _0x290e=function(_0x32f072,_0x194fca){_0x32f072=_0x32f072-0x0;var _0x4f5aa2=_0x90e2[_0x32f072];return _0x4f5aa2;};'use strict';var multer=require(_0x290e('0x0'));var util=require(_0x290e('0x1'));var path=require('path');var timeout=require(_0x290e('0x2'));var express=require(_0x290e('0x3'));var router=express['Router']();var auth=require(_0x290e('0x4'));var interaction=require(_0x290e('0x5'));var config=require(_0x290e('0x6'));var controller=require(_0x290e('0x7'));router[_0x290e('0x8')]('/',auth[_0x290e('0x9')](),controller[_0x290e('0xa')]);router[_0x290e('0x8')](_0x290e('0xb'),auth['isAuthenticated'](),controller[_0x290e('0xc')]);router['post']('/',auth['isAuthenticated'](),controller[_0x290e('0xd')]);router[_0x290e('0xe')]('/:id',auth['isAuthenticated'](),controller['update']);router[_0x290e('0xf')]('/:id',auth[_0x290e('0x9')](),controller[_0x290e('0x10')]);module[_0x290e('0x11')]=router;
\ No newline at end of file
+var _0x98b0=['isAuthenticated','index','/:id','show','post','create','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./disposition.controller','get'];(function(_0x76fe56,_0x5b5954){var _0x6174e7=function(_0x4caaec){while(--_0x4caaec){_0x76fe56['push'](_0x76fe56['shift']());}};_0x6174e7(++_0x5b5954);}(_0x98b0,0x126));var _0x098b=function(_0x209941,_0x5c9988){_0x209941=_0x209941-0x0;var _0x1e8729=_0x98b0[_0x209941];return _0x1e8729;};'use strict';var multer=require(_0x098b('0x0'));var util=require(_0x098b('0x1'));var path=require(_0x098b('0x2'));var timeout=require(_0x098b('0x3'));var express=require(_0x098b('0x4'));var router=express[_0x098b('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x098b('0x6'));var config=require(_0x098b('0x7'));var controller=require(_0x098b('0x8'));router[_0x098b('0x9')]('/',auth[_0x098b('0xa')](),controller[_0x098b('0xb')]);router[_0x098b('0x9')](_0x098b('0xc'),auth[_0x098b('0xa')](),controller[_0x098b('0xd')]);router[_0x098b('0xe')]('/',auth[_0x098b('0xa')](),controller[_0x098b('0xf')]);router['put'](_0x098b('0xc'),auth[_0x098b('0xa')](),controller['update']);router[_0x098b('0x10')](_0x098b('0xc'),auth[_0x098b('0xa')](),controller[_0x098b('0x11')]);module[_0x098b('0x12')]=router;
\ No newline at end of file
index b1ee59a..a1976f5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc59c=['STRING','ENUM','yes','xCALLY\x20Motion\x20Fax','localstationid','2400','4800','9600','12000','14400','7200','INTEGER','IAX','DADHI','KHOMP','SIP','TEXT','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','BOOLEAN','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','setDataValue','mandatoryDispositionPauseId'];(function(_0x1d708d,_0x5a5f50){var _0x46ceea=function(_0x2fe775){while(--_0x2fe775){_0x1d708d['push'](_0x1d708d['shift']());}};_0x46ceea(++_0x5a5f50);}(_0xc59c,0xcf));var _0xcc59=function(_0x4d50b4,_0x314aaa){_0x4d50b4=_0x4d50b4-0x0;var _0x18bcbf=_0xc59c[_0x4d50b4];return _0x18bcbf;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize['STRING'],'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0xcc59('0x0')]},'ecm':{'type':Sequelize[_0xcc59('0x1')](_0xcc59('0x2'),'no'),'defaultValue':_0xcc59('0x2')},'headerinfo':{'type':Sequelize[_0xcc59('0x0')],'defaultValue':_0xcc59('0x3')},'localstationid':{'type':Sequelize[_0xcc59('0x0')],'unique':_0xcc59('0x4')},'minrate':{'type':Sequelize['ENUM'](_0xcc59('0x5'),_0xcc59('0x6'),'7200',_0xcc59('0x7'),_0xcc59('0x8'),_0xcc59('0x9')),'defaultValue':_0xcc59('0x6')},'maxrate':{'type':Sequelize[_0xcc59('0x1')](_0xcc59('0x5'),_0xcc59('0x6'),_0xcc59('0xa'),'9600',_0xcc59('0x8'),'14400'),'defaultValue':_0xcc59('0x9')},'modem':{'type':Sequelize['STRING'],'defaultValue':'v17,v27,v29'},'gateway':{'type':Sequelize[_0xcc59('0x0')],'defaultValue':'no','validate':{'is':/^(?:yes|no|[0-9]+)$/}},'faxdetect':{'type':Sequelize[_0xcc59('0x0')],'defaultValue':'no','validate':{'is':/^(?:yes|no|t38|cng|[0-9]+)$/}},'t38timeout':{'type':Sequelize[_0xcc59('0xb')],'defaultValue':0x1388,'validate':{'min':0x3e8}},'tech':{'type':Sequelize[_0xcc59('0x1')]('SIP',_0xcc59('0xc'),_0xcc59('0xd'),_0xcc59('0xe')),'defaultValue':_0xcc59('0xf')},'key':{'type':Sequelize[_0xcc59('0x0')],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0xcc59('0x10')],'defaultValue':function(){return _0xcc59('0x11');}},'notificationSound':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xcc59('0x12')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0xcc59('0x12')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xcc59('0xb')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0xcc59('0xb')],'allowNull':!![],'defaultValue':null,'comment':_0xcc59('0x13')},'mandatoryDisposition':{'type':Sequelize['BOOLEAN'],'defaultValue':![],'comment':_0xcc59('0x14'),'set':function(_0xfade55){if(!_0xfade55)this[_0xcc59('0x15')](_0xcc59('0x16'),null);this['setDataValue']('mandatoryDisposition',_0xfade55);}}};
\ No newline at end of file
+var _0x26ab=['SIP','IAX','DADHI','KHOMP','TEXT','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','BOOLEAN','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','setDataValue','mandatoryDispositionPauseId','mandatoryDisposition','exports','STRING','ENUM','yes','xCALLY\x20Motion\x20Fax','7200','9600','12000','14400','2400','4800','v17,v27,v29','INTEGER'];(function(_0x56b13c,_0xea4749){var _0x39798c=function(_0x53acda){while(--_0x53acda){_0x56b13c['push'](_0x56b13c['shift']());}};_0x39798c(++_0xea4749);}(_0x26ab,0x19c));var _0xb26a=function(_0x2e7cd1,_0x55737b){_0x2e7cd1=_0x2e7cd1-0x0;var _0x2866f2=_0x26ab[_0x2e7cd1];return _0x2866f2;};'use strict';var Sequelize=require('sequelize');module[_0xb26a('0x0')]={'name':{'type':Sequelize['STRING'],'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0xb26a('0x1')]},'ecm':{'type':Sequelize[_0xb26a('0x2')](_0xb26a('0x3'),'no'),'defaultValue':'yes'},'headerinfo':{'type':Sequelize[_0xb26a('0x1')],'defaultValue':_0xb26a('0x4')},'localstationid':{'type':Sequelize['STRING'],'unique':'localstationid'},'minrate':{'type':Sequelize[_0xb26a('0x2')]('2400','4800',_0xb26a('0x5'),_0xb26a('0x6'),_0xb26a('0x7'),_0xb26a('0x8')),'defaultValue':'4800'},'maxrate':{'type':Sequelize[_0xb26a('0x2')](_0xb26a('0x9'),_0xb26a('0xa'),_0xb26a('0x5'),'9600','12000',_0xb26a('0x8')),'defaultValue':_0xb26a('0x8')},'modem':{'type':Sequelize[_0xb26a('0x1')],'defaultValue':_0xb26a('0xb')},'gateway':{'type':Sequelize[_0xb26a('0x1')],'defaultValue':'no','validate':{'is':/^(?:yes|no|[0-9]+)$/}},'faxdetect':{'type':Sequelize[_0xb26a('0x1')],'defaultValue':'no','validate':{'is':/^(?:yes|no|t38|cng|[0-9]+)$/}},'t38timeout':{'type':Sequelize[_0xb26a('0xc')],'defaultValue':0x1388,'validate':{'min':0x3e8}},'tech':{'type':Sequelize['ENUM'](_0xb26a('0xd'),_0xb26a('0xe'),_0xb26a('0xf'),_0xb26a('0x10')),'defaultValue':_0xb26a('0xd')},'key':{'type':Sequelize[_0xb26a('0x1')],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0xb26a('0x11')],'defaultValue':function(){return _0xb26a('0x12');}},'notificationSound':{'type':Sequelize[_0xb26a('0x13')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xb26a('0x13')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0xb26a('0xc')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0xb26a('0x13')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xb26a('0xc')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xb26a('0xc')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0xb26a('0xc')],'allowNull':!![],'defaultValue':null,'comment':_0xb26a('0x14')},'mandatoryDisposition':{'type':Sequelize[_0xb26a('0x13')],'defaultValue':![],'comment':_0xb26a('0x15'),'set':function(_0x32a78d){if(!_0x32a78d)this[_0xb26a('0x16')](_0xb26a('0x17'),null);this[_0xb26a('0x16')](_0xb26a('0x18'),_0x32a78d);}}};
\ No newline at end of file
index d0c32b2..7c8cad6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfb9d=['offset','limit','Content-Range','apply','reject','save','update','get','FaxAccounts','UserProfileResource','destroy','sendStatus','stack','name','send','FaxAccount','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','filter','merge','map','type','VIRTUAL','field','options','count','includeAll','include','findAll','rows','show','params','Pause','mandatoryDispositionPause','rawAttributes','Unable\x20to\x20retrieve\x20the\x20current\x20user','user','UserProfileSection','find','autoAssociation','create','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','describe','addDisposition','FaxAccountId','getDispositions','Disposition','order','removeDispositions','addAnswer','CannedAnswer','getAnswers','findOne','removeAnswers','ids','addInteraction','FaxInteraction','getInteractions','CmContact','User','Owner','fullname','internal','Tag','color','tag','addApplications','sequelize','transaction','FaxApplication','bulkCreate','findAndCountAll','priority','getApplications','from-voip-provider','exten','localstationid','description','appdata','push','Answer','CDR(type)=inbound-fax','Set','ecm','gateway','faxdetect','headerinfo','minrate','modem','FAXOPT(','addAccountApplications','VoiceExtension','updateAccountApplications','omit','tech','key','updatedAt','TrunkId','ListId','findById','getMessages','FaxMessage','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','CmList','List','Contacts','DESC','attachments','root','server/files/attachments','basename','CheckAfterSend','isNil','\x22%s\x22\x20<%s>','fax','Send\x20Fax\x20failed','out','filename','Contact\x20not\x20found','spread','dataValues','Messages','SendFax','path','SendFaxRpc,\x20%s','addAgents','emit','userFaxAccount:save','removeAgents','userFaxAccount:remove','getAgents','eml-format','rimraf','zip-dir','request-promise','mustache','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./faxAccount.socket','register','jayson/promise','client','http','request','then','info','request\x20sent','debug','stringify','error','code','FaxAccount,\x20%s,\x20%s','message','result','catch','status','end','json'];(function(_0x424a9a,_0x2dd9af){var _0xa7831c=function(_0x512534){while(--_0x512534){_0x424a9a['push'](_0x424a9a['shift']());}};_0xa7831c(++_0x2dd9af);}(_0xfb9d,0x92));var _0xdfb9=function(_0x119763,_0x1747b2){_0x119763=_0x119763-0x0;var _0x14282d=_0xfb9d[_0x119763];return _0x14282d;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xdfb9('0x0'));var rimraf=require(_0xdfb9('0x1'));var zipdir=require(_0xdfb9('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xdfb9('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xdfb9('0x4'));var util=require('util');var path=require('path');var sox=require(_0xdfb9('0x5'));var csv=require('to-csv');var ejs=require(_0xdfb9('0x6'));var fs=require('fs');var _=require(_0xdfb9('0x7'));var squel=require('squel');var crypto=require(_0xdfb9('0x8'));var jsforce=require(_0xdfb9('0x9'));var deskjs=require(_0xdfb9('0xa'));var toCsv=require(_0xdfb9('0xb'));var querystring=require(_0xdfb9('0xc'));var Papa=require(_0xdfb9('0xd'));var Redis=require(_0xdfb9('0xe'));var authService=require(_0xdfb9('0xf'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xdfb9('0x10'));var logger=require(_0xdfb9('0x11'))(_0xdfb9('0x12'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xdfb9('0x13'))['db'];config[_0xdfb9('0x14')]=_[_0xdfb9('0x15')](config[_0xdfb9('0x14')],{'host':_0xdfb9('0x16'),'port':0x18eb});var socket=require(_0xdfb9('0x17'))(new Redis(config['redis']));require(_0xdfb9('0x18'))[_0xdfb9('0x19')](socket);var jayson=require(_0xdfb9('0x1a'));var client=jayson[_0xdfb9('0x1b')]['http']({'port':0x232c});var client9002=jayson['client'][_0xdfb9('0x1c')]({'port':0x232a});function checkPasswordPattern(_0x4f5369,_0x52ec98,_0x139b06){if(_0x139b06){var _0x556b59=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x556b59['test'](_0x52ec98)){return _0x4f5369;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x4f5369;}}function respondWithRpcPromise(_0x426153,_0x5732d4,_0x1bff9c,_0x5dace7){return new BPromise(function(_0x15359a,_0x3f48b9){var _0x5a8f27=_0x5dace7||client;return _0x5a8f27[_0xdfb9('0x1d')](_0x426153,_0x1bff9c)[_0xdfb9('0x1e')](function(_0x3f507c){logger[_0xdfb9('0x1f')]('FaxAccount,\x20%s,\x20%s',_0x5732d4,_0xdfb9('0x20'));logger[_0xdfb9('0x21')]('FaxAccount,\x20%s,\x20%s,\x20%s',_0x5732d4,_0xdfb9('0x20'),JSON[_0xdfb9('0x22')](_0x3f507c));if(_0x3f507c[_0xdfb9('0x23')]){if(_0x3f507c[_0xdfb9('0x23')][_0xdfb9('0x24')]===0x1f4){logger[_0xdfb9('0x23')](_0xdfb9('0x25'),_0x5732d4,_0x3f507c['error'][_0xdfb9('0x26')]);return _0x3f48b9(_0x3f507c[_0xdfb9('0x23')][_0xdfb9('0x26')]);}logger[_0xdfb9('0x23')](_0xdfb9('0x25'),_0x5732d4,_0x3f507c[_0xdfb9('0x23')][_0xdfb9('0x26')]);return _0x15359a(_0x3f507c[_0xdfb9('0x23')][_0xdfb9('0x26')]);}else{logger[_0xdfb9('0x1f')]('FaxAccount,\x20%s,\x20%s',_0x5732d4,_0xdfb9('0x20'));_0x15359a(_0x3f507c[_0xdfb9('0x27')][_0xdfb9('0x26')]);}})[_0xdfb9('0x28')](function(_0x46433f){logger[_0xdfb9('0x23')](_0xdfb9('0x25'),_0x5732d4,_0x46433f);_0x3f48b9(_0x46433f);});});}function respondWithStatusCode(_0x393b6e,_0x4fe695){_0x4fe695=_0x4fe695||0xcc;return function(_0x5a5452){if(_0x5a5452){return _0x393b6e['sendStatus'](_0x4fe695);}return _0x393b6e[_0xdfb9('0x29')](_0x4fe695)[_0xdfb9('0x2a')]();};}function respondWithResult(_0x3dcc13,_0x27ede7){_0x27ede7=_0x27ede7||0xc8;return function(_0x2ced6c){if(_0x2ced6c){return _0x3dcc13['status'](_0x27ede7)[_0xdfb9('0x2b')](_0x2ced6c);}};}function respondWithFilteredResult(_0x4be881,_0x1b093a){return function(_0xdc5856){if(_0xdc5856){var _0x4e2274=_0xdc5856['count'],_0x15a5c6=_0x1b093a[_0xdfb9('0x2c')],_0x358576=_0x1b093a[_0xdfb9('0x2c')]+_0x1b093a[_0xdfb9('0x2d')],_0x32cb4f;if(_0x358576>=_0x4e2274){_0x358576=_0x4e2274;_0x32cb4f=0xc8;}else{_0x32cb4f=0xce;}_0x4be881[_0xdfb9('0x29')](_0x32cb4f);return _0x4be881['set'](_0xdfb9('0x2e'),_0x15a5c6+'-'+_0x358576+'/'+_0x4e2274)['json'](_0xdc5856);}return null;};}function patchUpdates(_0x573b52){return function(_0x19a2df){try{jsonpatch[_0xdfb9('0x2f')](_0x19a2df,_0x573b52,!![]);}catch(_0x453e02){return BPromise[_0xdfb9('0x30')](_0x453e02);}return _0x19a2df[_0xdfb9('0x31')]();};}function saveUpdates(_0x128577,_0x2fcf55){return function(_0x2238f0){if(_0x2238f0){return _0x2238f0[_0xdfb9('0x32')](_0x128577)[_0xdfb9('0x1e')](function(_0x13239e){return _0x13239e;});}return null;};}function removeEntity(_0x326a71,_0x50901f){return function(_0x18ad1b){if(_0x18ad1b){return _0x18ad1b['destroy']()[_0xdfb9('0x1e')](function(){var _0xd55226=_0x18ad1b[_0xdfb9('0x33')]({'plain':!![]});var _0x23565e=_0xdfb9('0x34');return db[_0xdfb9('0x35')][_0xdfb9('0x36')]({'where':{'type':_0x23565e,'resourceId':_0xd55226['id']}})[_0xdfb9('0x1e')](function(){return _0x18ad1b;});})[_0xdfb9('0x1e')](function(){_0x326a71[_0xdfb9('0x29')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3b78c5,_0x3ca425){return function(_0x568e8d){if(!_0x568e8d){_0x3b78c5[_0xdfb9('0x37')](0x194);}return _0x568e8d;};}function handleError(_0x5df28a,_0x3dc479){_0x3dc479=_0x3dc479||0x1f4;return function(_0x21ce76){logger['error'](_0x21ce76[_0xdfb9('0x38')]);if(_0x21ce76[_0xdfb9('0x39')]){delete _0x21ce76[_0xdfb9('0x39')];}_0x5df28a['status'](_0x3dc479)[_0xdfb9('0x3a')](_0x21ce76);};}exports['index']=function(_0x262874,_0x5ab5cd){var _0x11bd29={'include':[{'model':db['Pause'],'as':'mandatoryDispositionPause'}]},_0x45c98e={},_0x550c83={'count':0x0,'rows':[]};var _0x2c239d=db[_0xdfb9('0x3b')]['rawAttributes'];_0x45c98e[_0xdfb9('0x3c')]=_[_0xdfb9('0x3d')](_0x2c239d);_0x45c98e[_0xdfb9('0x3e')]=_[_0xdfb9('0x3d')](_0x262874[_0xdfb9('0x3e')]);_0x45c98e[_0xdfb9('0x3f')]=_[_0xdfb9('0x40')](_0x45c98e['model'],_0x45c98e['query']);_0x11bd29[_0xdfb9('0x41')]=_[_0xdfb9('0x40')](_0x45c98e[_0xdfb9('0x3c')],qs['fields'](_0x262874['query'][_0xdfb9('0x42')]));_0x11bd29['attributes']=_0x11bd29[_0xdfb9('0x41')][_0xdfb9('0x43')]?_0x11bd29[_0xdfb9('0x41')]:_0x45c98e[_0xdfb9('0x3c')];if(!_0x262874[_0xdfb9('0x3e')][_0xdfb9('0x44')](_0xdfb9('0x45'))){_0x11bd29['limit']=qs[_0xdfb9('0x2d')](_0x262874[_0xdfb9('0x3e')][_0xdfb9('0x2d')]);_0x11bd29[_0xdfb9('0x2c')]=qs[_0xdfb9('0x2c')](_0x262874[_0xdfb9('0x3e')][_0xdfb9('0x2c')]);}_0x11bd29['order']=qs[_0xdfb9('0x46')](_0x262874['query'][_0xdfb9('0x46')]);_0x11bd29[_0xdfb9('0x47')]=qs[_0xdfb9('0x3f')](_[_0xdfb9('0x48')](_0x262874[_0xdfb9('0x3e')],_0x45c98e['filters']));if(_0x262874[_0xdfb9('0x3e')][_0xdfb9('0x49')]){_0x11bd29['where']=_[_0xdfb9('0x4a')](_0x11bd29[_0xdfb9('0x47')],{'$or':_[_0xdfb9('0x4b')](_0x2c239d,function(_0x3c8f52){if(_0x3c8f52[_0xdfb9('0x4c')]['key']!==_0xdfb9('0x4d')){var _0x1647f8={};_0x1647f8[_0x3c8f52[_0xdfb9('0x4e')]]={'$like':'%'+_0x262874[_0xdfb9('0x3e')][_0xdfb9('0x49')]+'%'};return _0x1647f8;}})});}_0x11bd29=_[_0xdfb9('0x4a')]({},_0x11bd29,_0x262874[_0xdfb9('0x4f')]);var _0x2d8d30={'where':_0x11bd29['where']};return db[_0xdfb9('0x3b')]['count'](_0x2d8d30)['then'](function(_0x1ca03c){_0x550c83[_0xdfb9('0x50')]=_0x1ca03c;if(_0x262874[_0xdfb9('0x3e')][_0xdfb9('0x51')]){_0x11bd29[_0xdfb9('0x52')]=[{'all':!![]}];}return db[_0xdfb9('0x3b')][_0xdfb9('0x53')](_0x11bd29);})[_0xdfb9('0x1e')](function(_0x31527e){_0x550c83[_0xdfb9('0x54')]=_0x31527e;return _0x550c83;})['then'](respondWithFilteredResult(_0x5ab5cd,_0x11bd29))[_0xdfb9('0x28')](handleError(_0x5ab5cd,null));};exports[_0xdfb9('0x55')]=function(_0x24a1f3,_0xb0ed5d){var _0x5d90a3={'raw':![],'where':{'id':_0x24a1f3[_0xdfb9('0x56')]['id']},'include':[{'model':db[_0xdfb9('0x57')],'as':_0xdfb9('0x58')}]},_0x29b1e3={};_0x29b1e3[_0xdfb9('0x3c')]=_[_0xdfb9('0x3d')](db[_0xdfb9('0x3b')][_0xdfb9('0x59')]);_0x29b1e3[_0xdfb9('0x3e')]=_[_0xdfb9('0x3d')](_0x24a1f3['query']);_0x29b1e3[_0xdfb9('0x3f')]=_['intersection'](_0x29b1e3[_0xdfb9('0x3c')],_0x29b1e3['query']);_0x5d90a3['attributes']=_[_0xdfb9('0x40')](_0x29b1e3[_0xdfb9('0x3c')],qs['fields'](_0x24a1f3['query'][_0xdfb9('0x42')]));_0x5d90a3[_0xdfb9('0x41')]=_0x5d90a3[_0xdfb9('0x41')]['length']?_0x5d90a3[_0xdfb9('0x41')]:_0x29b1e3[_0xdfb9('0x3c')];if(_0x24a1f3[_0xdfb9('0x3e')][_0xdfb9('0x51')]){_0x5d90a3[_0xdfb9('0x52')]=[{'all':!![]}];}_0x5d90a3=_[_0xdfb9('0x4a')]({},_0x5d90a3,_0x24a1f3[_0xdfb9('0x4f')]);return db[_0xdfb9('0x3b')]['find'](_0x5d90a3)[_0xdfb9('0x1e')](handleEntityNotFound(_0xb0ed5d,null))[_0xdfb9('0x1e')](respondWithResult(_0xb0ed5d,null))['catch'](handleError(_0xb0ed5d,null));};exports['create']=function(_0x294145,_0xbe481){return db['FaxAccount']['create'](_0x294145['body'],{})[_0xdfb9('0x1e')](function(_0x197aeb){var _0x36bf66=_0x294145['user']['get']({'plain':!![]});if(!_0x36bf66)throw new Error(_0xdfb9('0x5a'));if(_0x36bf66['role']===_0xdfb9('0x5b')){var _0x474af2=_0x197aeb[_0xdfb9('0x33')]({'plain':!![]});var _0x5a1fcf=_0xdfb9('0x34');return db[_0xdfb9('0x5c')][_0xdfb9('0x5d')]({'where':{'name':_0x5a1fcf,'userProfileId':_0x36bf66['userProfileId']},'raw':!![]})[_0xdfb9('0x1e')](function(_0x3f2776){if(_0x3f2776&&_0x3f2776[_0xdfb9('0x5e')]===0x0){return db[_0xdfb9('0x35')][_0xdfb9('0x5f')]({'name':_0x474af2['name'],'resourceId':_0x474af2['id'],'type':_0x3f2776[_0xdfb9('0x39')],'sectionId':_0x3f2776['id']},{})[_0xdfb9('0x1e')](function(){return _0x197aeb;});}else{return _0x197aeb;}})[_0xdfb9('0x28')](function(_0x16dce3){logger['error'](_0xdfb9('0x60'),_0x16dce3);throw _0x16dce3;});}return _0x197aeb;})[_0xdfb9('0x1e')](respondWithResult(_0xbe481,0xc9))[_0xdfb9('0x28')](handleError(_0xbe481,null));};exports[_0xdfb9('0x32')]=function(_0x3344da,_0x162609){if(_0x3344da[_0xdfb9('0x61')]['id']){delete _0x3344da[_0xdfb9('0x61')]['id'];}return db[_0xdfb9('0x3b')]['find']({'where':{'id':_0x3344da[_0xdfb9('0x56')]['id']},'include':[{'model':db['Pause'],'as':'mandatoryDispositionPause'}]})['then'](handleEntityNotFound(_0x162609,null))[_0xdfb9('0x1e')](saveUpdates(_0x3344da[_0xdfb9('0x61')],null))[_0xdfb9('0x1e')](respondWithResult(_0x162609,null))['catch'](handleError(_0x162609,null));};exports[_0xdfb9('0x36')]=function(_0x550129,_0x4eb916){return db[_0xdfb9('0x3b')][_0xdfb9('0x5d')]({'where':{'id':_0x550129[_0xdfb9('0x56')]['id']}})[_0xdfb9('0x1e')](handleEntityNotFound(_0x4eb916,null))['then'](removeEntity(_0x4eb916,null))[_0xdfb9('0x28')](handleError(_0x4eb916,null));};exports['describe']=function(_0x19f0b3,_0x4339ea){return db[_0xdfb9('0x3b')][_0xdfb9('0x62')]()[_0xdfb9('0x1e')](respondWithResult(_0x4339ea,null))[_0xdfb9('0x28')](handleError(_0x4339ea,null));};exports[_0xdfb9('0x63')]=function(_0x519cd1,_0x404054,_0xedb0ff){if(_0x519cd1['body']['id']){delete _0x519cd1[_0xdfb9('0x61')]['id'];}return db['FaxAccount'][_0xdfb9('0x5d')]({'where':{'id':_0x519cd1[_0xdfb9('0x56')]['id']}})['then'](handleEntityNotFound(_0x404054,null))[_0xdfb9('0x1e')](function(_0x404e90){if(_0x404e90){_0x519cd1['body'][_0xdfb9('0x64')]=_0x404e90['id'];return db['Disposition'][_0xdfb9('0x5f')](_0x519cd1[_0xdfb9('0x61')]);}})[_0xdfb9('0x1e')](respondWithResult(_0x404054,null))[_0xdfb9('0x28')](handleError(_0x404054,null));};exports[_0xdfb9('0x65')]=function(_0x23517a,_0x4da04f,_0x575199){var _0x2fbc02={'raw':![],'where':{}};var _0x38c124={};var _0x3dce6f={'count':0x0,'rows':[]};return db[_0xdfb9('0x3b')]['findOne']({'where':{'id':_0x23517a[_0xdfb9('0x56')]['id']}})[_0xdfb9('0x1e')](handleEntityNotFound(_0x4da04f,null))[_0xdfb9('0x1e')](function(_0xa320f3){if(_0xa320f3){_0x38c124[_0xdfb9('0x3c')]=_[_0xdfb9('0x3d')](db[_0xdfb9('0x66')][_0xdfb9('0x59')]);_0x38c124[_0xdfb9('0x3e')]=_[_0xdfb9('0x3d')](_0x23517a['query']);_0x38c124[_0xdfb9('0x3f')]=_[_0xdfb9('0x40')](_0x38c124[_0xdfb9('0x3c')],_0x38c124['query']);_0x2fbc02[_0xdfb9('0x41')]=_[_0xdfb9('0x40')](_0x38c124[_0xdfb9('0x3c')],qs[_0xdfb9('0x42')](_0x23517a[_0xdfb9('0x3e')][_0xdfb9('0x42')]));_0x2fbc02['attributes']=_0x2fbc02[_0xdfb9('0x41')]['length']?_0x2fbc02['attributes']:_0x38c124[_0xdfb9('0x3c')];if(!_0x23517a['query'][_0xdfb9('0x44')](_0xdfb9('0x45'))){_0x2fbc02[_0xdfb9('0x2d')]=qs[_0xdfb9('0x2d')](_0x23517a[_0xdfb9('0x3e')]['limit']);_0x2fbc02[_0xdfb9('0x2c')]=qs['offset'](_0x23517a[_0xdfb9('0x3e')][_0xdfb9('0x2c')]);}_0x2fbc02[_0xdfb9('0x67')]=qs[_0xdfb9('0x46')](_0x23517a['query'][_0xdfb9('0x46')]);_0x2fbc02['where']=qs[_0xdfb9('0x3f')](_[_0xdfb9('0x48')](_0x23517a[_0xdfb9('0x3e')],_0x38c124[_0xdfb9('0x3f')]));_0x2fbc02['where']['FaxAccountId']=_0xa320f3['id'];if(_0x23517a[_0xdfb9('0x3e')]['filter']){_0x2fbc02['where']=_[_0xdfb9('0x4a')](_0x2fbc02[_0xdfb9('0x47')],{'$or':_[_0xdfb9('0x4b')](_0x2fbc02['attributes'],function(_0x442062){var _0x36aa7a={};_0x36aa7a[_0x442062]={'$like':'%'+_0x23517a[_0xdfb9('0x3e')][_0xdfb9('0x49')]+'%'};return _0x36aa7a;})});}_0x2fbc02=_['merge']({},_0x2fbc02,_0x23517a[_0xdfb9('0x4f')]);return db[_0xdfb9('0x66')][_0xdfb9('0x50')]({'where':_0x2fbc02[_0xdfb9('0x47')]})[_0xdfb9('0x1e')](function(_0x835cd6){_0x3dce6f[_0xdfb9('0x50')]=_0x835cd6;if(_0x23517a['query']['includeAll']){_0x2fbc02[_0xdfb9('0x52')]=[{'all':!![]}];}return db[_0xdfb9('0x66')][_0xdfb9('0x53')](_0x2fbc02);})[_0xdfb9('0x1e')](function(_0x3943ae){_0x3dce6f[_0xdfb9('0x54')]=_0x3943ae;return _0x3dce6f;});}})[_0xdfb9('0x1e')](respondWithFilteredResult(_0x4da04f,_0x2fbc02))[_0xdfb9('0x28')](handleError(_0x4da04f,null));};exports['removeDispositions']=function(_0x5124f3,_0x48c9d7,_0x334e08){return db[_0xdfb9('0x3b')]['find']({'where':{'id':_0x5124f3[_0xdfb9('0x56')]['id']}})['then'](handleEntityNotFound(_0x48c9d7,null))[_0xdfb9('0x1e')](function(_0x556c44){if(_0x556c44){return _0x556c44[_0xdfb9('0x68')](_0x5124f3[_0xdfb9('0x3e')]['ids']);}})[_0xdfb9('0x1e')](respondWithStatusCode(_0x48c9d7,null))[_0xdfb9('0x28')](handleError(_0x48c9d7,null));};exports[_0xdfb9('0x69')]=function(_0x583c65,_0x5a169f,_0x4da58f){if(_0x583c65[_0xdfb9('0x61')]['id']){delete _0x583c65[_0xdfb9('0x61')]['id'];}return db['FaxAccount']['find']({'where':{'id':_0x583c65['params']['id']}})[_0xdfb9('0x1e')](handleEntityNotFound(_0x5a169f,null))[_0xdfb9('0x1e')](function(_0x2eff9b){if(_0x2eff9b){_0x583c65[_0xdfb9('0x61')][_0xdfb9('0x64')]=_0x2eff9b['id'];return db[_0xdfb9('0x6a')][_0xdfb9('0x5f')](_0x583c65['body']);}})['then'](respondWithResult(_0x5a169f,null))[_0xdfb9('0x28')](handleError(_0x5a169f,null));};exports[_0xdfb9('0x6b')]=function(_0x528d11,_0x49708b,_0x3c2dd1){var _0x5961cb={'raw':![],'where':{}};var _0x471406={};var _0x1ad99a={'count':0x0,'rows':[]};return db['FaxAccount'][_0xdfb9('0x6c')]({'where':{'id':_0x528d11[_0xdfb9('0x56')]['id']}})['then'](handleEntityNotFound(_0x49708b,null))[_0xdfb9('0x1e')](function(_0x3245ab){if(_0x3245ab){_0x471406['model']=_[_0xdfb9('0x3d')](db[_0xdfb9('0x6a')]['rawAttributes']);_0x471406[_0xdfb9('0x3e')]=_[_0xdfb9('0x3d')](_0x528d11[_0xdfb9('0x3e')]);_0x471406[_0xdfb9('0x3f')]=_['intersection'](_0x471406[_0xdfb9('0x3c')],_0x471406[_0xdfb9('0x3e')]);_0x5961cb[_0xdfb9('0x41')]=_[_0xdfb9('0x40')](_0x471406[_0xdfb9('0x3c')],qs['fields'](_0x528d11[_0xdfb9('0x3e')][_0xdfb9('0x42')]));_0x5961cb[_0xdfb9('0x41')]=_0x5961cb['attributes'][_0xdfb9('0x43')]?_0x5961cb['attributes']:_0x471406[_0xdfb9('0x3c')];if(!_0x528d11[_0xdfb9('0x3e')][_0xdfb9('0x44')](_0xdfb9('0x45'))){_0x5961cb[_0xdfb9('0x2d')]=qs['limit'](_0x528d11[_0xdfb9('0x3e')][_0xdfb9('0x2d')]);_0x5961cb[_0xdfb9('0x2c')]=qs[_0xdfb9('0x2c')](_0x528d11[_0xdfb9('0x3e')][_0xdfb9('0x2c')]);}_0x5961cb[_0xdfb9('0x67')]=qs[_0xdfb9('0x46')](_0x528d11[_0xdfb9('0x3e')]['sort']);_0x5961cb[_0xdfb9('0x47')]=qs[_0xdfb9('0x3f')](_[_0xdfb9('0x48')](_0x528d11['query'],_0x471406[_0xdfb9('0x3f')]));_0x5961cb[_0xdfb9('0x47')][_0xdfb9('0x64')]=_0x3245ab['id'];if(_0x528d11[_0xdfb9('0x3e')][_0xdfb9('0x49')]){_0x5961cb[_0xdfb9('0x47')]=_[_0xdfb9('0x4a')](_0x5961cb['where'],{'$or':_[_0xdfb9('0x4b')](_0x5961cb[_0xdfb9('0x41')],function(_0x107293){var _0x45dea3={};_0x45dea3[_0x107293]={'$like':'%'+_0x528d11['query'][_0xdfb9('0x49')]+'%'};return _0x45dea3;})});}_0x5961cb=_[_0xdfb9('0x4a')]({},_0x5961cb,_0x528d11[_0xdfb9('0x4f')]);return db[_0xdfb9('0x6a')][_0xdfb9('0x50')]({'where':_0x5961cb[_0xdfb9('0x47')]})[_0xdfb9('0x1e')](function(_0x34aaf3){_0x1ad99a[_0xdfb9('0x50')]=_0x34aaf3;if(_0x528d11[_0xdfb9('0x3e')][_0xdfb9('0x51')]){_0x5961cb[_0xdfb9('0x52')]=[{'all':!![]}];}return db[_0xdfb9('0x6a')][_0xdfb9('0x53')](_0x5961cb);})[_0xdfb9('0x1e')](function(_0x4f3ed3){_0x1ad99a[_0xdfb9('0x54')]=_0x4f3ed3;return _0x1ad99a;});}})[_0xdfb9('0x1e')](respondWithFilteredResult(_0x49708b,_0x5961cb))['catch'](handleError(_0x49708b,null));};exports[_0xdfb9('0x6d')]=function(_0x2cb24c,_0x47a084,_0x5cee7c){return db[_0xdfb9('0x3b')][_0xdfb9('0x5d')]({'where':{'id':_0x2cb24c['params']['id']}})['then'](handleEntityNotFound(_0x47a084,null))[_0xdfb9('0x1e')](function(_0x203f36){if(_0x203f36){return _0x203f36[_0xdfb9('0x6d')](_0x2cb24c[_0xdfb9('0x3e')][_0xdfb9('0x6e')]);}})[_0xdfb9('0x1e')](respondWithStatusCode(_0x47a084,null))['catch'](handleError(_0x47a084,null));};exports[_0xdfb9('0x6f')]=function(_0x9629a,_0x18c804,_0x5adb94){return db[_0xdfb9('0x70')][_0xdfb9('0x5d')]({'where':{'id':_0x9629a['params']['id']}})[_0xdfb9('0x1e')](handleEntityNotFound(_0x18c804,null))[_0xdfb9('0x1e')](function(_0x45ca3b){if(_0x45ca3b){return _0x45ca3b[_0xdfb9('0x6f')](_0x9629a[_0xdfb9('0x61')][_0xdfb9('0x6e')],_['omit'](_0x9629a[_0xdfb9('0x61')],[_0xdfb9('0x6e'),'id'])||{});}})[_0xdfb9('0x1e')](respondWithResult(_0x18c804,null))[_0xdfb9('0x28')](handleError(_0x18c804,null));};exports[_0xdfb9('0x71')]=function(_0x11667e,_0x3978b1,_0x58fd79){var _0x2e1318={'raw':![],'where':{}};var _0x283cd9={};var _0x19bdc5={'count':0x0,'rows':[]};return db[_0xdfb9('0x3b')][_0xdfb9('0x6c')]({'where':{'id':_0x11667e[_0xdfb9('0x56')]['id']}})[_0xdfb9('0x1e')](handleEntityNotFound(_0x3978b1,null))[_0xdfb9('0x1e')](function(_0x47c766){if(_0x47c766){_0x283cd9['model']=_[_0xdfb9('0x3d')](db['FaxInteraction'][_0xdfb9('0x59')]);_0x283cd9[_0xdfb9('0x3e')]=_['keys'](_0x11667e['query']);_0x283cd9[_0xdfb9('0x3f')]=_['intersection'](_0x283cd9[_0xdfb9('0x3c')],_0x283cd9['query']);_0x2e1318[_0xdfb9('0x41')]=_['intersection'](_0x283cd9[_0xdfb9('0x3c')],qs[_0xdfb9('0x42')](_0x11667e[_0xdfb9('0x3e')][_0xdfb9('0x42')]));_0x2e1318['attributes']=_0x2e1318[_0xdfb9('0x41')][_0xdfb9('0x43')]?_0x2e1318['attributes']:_0x283cd9[_0xdfb9('0x3c')];if(!_0x11667e['query'][_0xdfb9('0x44')](_0xdfb9('0x45'))){_0x2e1318['limit']=qs['limit'](_0x11667e[_0xdfb9('0x3e')][_0xdfb9('0x2d')]);_0x2e1318['offset']=qs[_0xdfb9('0x2c')](_0x11667e['query'][_0xdfb9('0x2c')]);}_0x2e1318[_0xdfb9('0x67')]=qs[_0xdfb9('0x46')](_0x11667e[_0xdfb9('0x3e')]['sort']);_0x2e1318['where']=qs['filters'](_[_0xdfb9('0x48')](_0x11667e[_0xdfb9('0x3e')],_0x283cd9[_0xdfb9('0x3f')]));_0x2e1318['where'][_0xdfb9('0x64')]=_0x47c766['id'];if(_0x11667e[_0xdfb9('0x3e')]['filter']){_0x2e1318[_0xdfb9('0x47')]=_[_0xdfb9('0x4a')](_0x2e1318['where'],{'$or':_[_0xdfb9('0x4b')](_0x2e1318[_0xdfb9('0x41')],function(_0x5a400c){var _0x425eab={};_0x425eab[_0x5a400c]={'$like':'%'+_0x11667e[_0xdfb9('0x3e')][_0xdfb9('0x49')]+'%'};return _0x425eab;})});}_0x2e1318=_['merge']({},_0x2e1318,_0x11667e['options']);return db[_0xdfb9('0x70')][_0xdfb9('0x50')]({'where':_0x2e1318[_0xdfb9('0x47')]})[_0xdfb9('0x1e')](function(_0x565ab9){_0x19bdc5[_0xdfb9('0x50')]=_0x565ab9;if(_0x11667e[_0xdfb9('0x3e')][_0xdfb9('0x51')]){_0x2e1318[_0xdfb9('0x52')]=[{'model':db[_0xdfb9('0x72')],'as':'Contact','required':![]},{'model':db[_0xdfb9('0x73')],'as':_0xdfb9('0x74'),'attributes':['name',_0xdfb9('0x75'),_0xdfb9('0x76')],'required':![]},{'model':db[_0xdfb9('0x77')],'as':'Tags','attributes':['id',_0xdfb9('0x39'),_0xdfb9('0x78')],'where':_0x11667e[_0xdfb9('0x3e')]['tag']?{'id':_0x11667e[_0xdfb9('0x3e')][_0xdfb9('0x79')]}:undefined,'required':_0x11667e['query']['tag']?!![]:![]}];}return db[_0xdfb9('0x70')][_0xdfb9('0x53')](_0x2e1318);})[_0xdfb9('0x1e')](function(_0x3805e5){_0x19bdc5[_0xdfb9('0x54')]=_0x3805e5;return _0x19bdc5;});}})[_0xdfb9('0x1e')](respondWithFilteredResult(_0x3978b1,_0x2e1318))[_0xdfb9('0x28')](handleError(_0x3978b1,null));};exports[_0xdfb9('0x7a')]=function(_0x456468,_0x2bb471,_0x4a38d8){return db['FaxAccount'][_0xdfb9('0x6c')]({'where':{'id':_0x456468['params']['id']}})[_0xdfb9('0x1e')](handleEntityNotFound(_0x2bb471,null))[_0xdfb9('0x1e')](function(_0x35717b){if(_0x35717b){return db[_0xdfb9('0x7b')][_0xdfb9('0x7c')](function(_0x1bde19){return db[_0xdfb9('0x7d')][_0xdfb9('0x36')]({'where':{'FaxAccountId':_0x456468[_0xdfb9('0x56')]['id']},'transaction':_0x1bde19})[_0xdfb9('0x1e')](function(_0x4fe059){var _0x1d4cbd=_[_0xdfb9('0x4b')](_0x456468[_0xdfb9('0x61')],function(_0x12fe03){_0x12fe03['FaxAccountId']=_0x456468['params']['id'];return _0x12fe03;});return db[_0xdfb9('0x7d')][_0xdfb9('0x7e')](_0x1d4cbd,{'transaction':_0x1bde19});});})[_0xdfb9('0x1e')](function(){return db['FaxApplication'][_0xdfb9('0x7f')]({'where':{'FaxAccountId':_0x456468['params']['id']},'order':_0xdfb9('0x80')});});}})[_0xdfb9('0x1e')](respondWithResult(_0x2bb471,null))['catch'](handleError(_0x2bb471,null));};exports['getApplications']=function(_0x5debac,_0x35d8d2,_0x426e14){var _0x48ce2d={};var _0x8b631e={};var _0x5e0003;var _0x33fb72;return db[_0xdfb9('0x3b')][_0xdfb9('0x6c')]({'where':{'id':_0x5debac[_0xdfb9('0x56')]['id']}})[_0xdfb9('0x1e')](handleEntityNotFound(_0x35d8d2,null))['then'](function(_0x41a482){if(_0x41a482){_0x5e0003=_0x41a482;_0x8b631e[_0xdfb9('0x3c')]=_[_0xdfb9('0x3d')](db[_0xdfb9('0x7d')][_0xdfb9('0x59')]);_0x8b631e[_0xdfb9('0x3e')]=_[_0xdfb9('0x3d')](_0x5debac[_0xdfb9('0x3e')]);_0x8b631e[_0xdfb9('0x3f')]=_[_0xdfb9('0x40')](_0x8b631e[_0xdfb9('0x3c')],_0x8b631e[_0xdfb9('0x3e')]);_0x48ce2d['attributes']=_[_0xdfb9('0x40')](_0x8b631e['model'],qs[_0xdfb9('0x42')](_0x5debac[_0xdfb9('0x3e')][_0xdfb9('0x42')]));_0x48ce2d[_0xdfb9('0x41')]=_0x48ce2d[_0xdfb9('0x41')][_0xdfb9('0x43')]?_0x48ce2d[_0xdfb9('0x41')]:_0x8b631e['model'];_0x48ce2d[_0xdfb9('0x67')]=qs[_0xdfb9('0x46')](_0x5debac['query']['sort']);_0x48ce2d[_0xdfb9('0x47')]=qs[_0xdfb9('0x3f')](_[_0xdfb9('0x48')](_0x5debac[_0xdfb9('0x3e')],_0x8b631e['filters']));if(_0x5debac[_0xdfb9('0x3e')][_0xdfb9('0x49')]){_0x48ce2d[_0xdfb9('0x47')]=_[_0xdfb9('0x4a')](_0x48ce2d[_0xdfb9('0x47')],{'$or':_[_0xdfb9('0x4b')](_0x48ce2d[_0xdfb9('0x41')],function(_0x355cec){var _0x507a6c={};_0x507a6c[_0x355cec]={'$like':'%'+_0x5debac[_0xdfb9('0x3e')][_0xdfb9('0x49')]+'%'};return _0x507a6c;})});}_0x48ce2d=_[_0xdfb9('0x4a')]({},_0x48ce2d,_0x5debac[_0xdfb9('0x4f')]);return _0x5e0003[_0xdfb9('0x81')](_0x48ce2d);}})[_0xdfb9('0x1e')](function(_0xff4338){if(_0xff4338){_0x33fb72=_0xff4338[_0xdfb9('0x43')];if(!_0x5debac['query'][_0xdfb9('0x44')](_0xdfb9('0x45'))){_0x48ce2d[_0xdfb9('0x2d')]=qs[_0xdfb9('0x2d')](_0x5debac[_0xdfb9('0x3e')][_0xdfb9('0x2d')]);_0x48ce2d['offset']=qs['offset'](_0x5debac[_0xdfb9('0x3e')][_0xdfb9('0x2c')]);}return _0x5e0003[_0xdfb9('0x81')](_0x48ce2d);}})[_0xdfb9('0x1e')](function(_0x4b0f3d){if(_0x4b0f3d){return _0x4b0f3d?{'count':_0x33fb72,'rows':_0x4b0f3d}:null;}})[_0xdfb9('0x1e')](respondWithResult(_0x35d8d2,null))[_0xdfb9('0x28')](handleError(_0x35d8d2,null));};function Extension(_0x5116a1,_0x540edf,_0x43f391,_0x503a35){this['context']=_0xdfb9('0x82');this[_0xdfb9('0x83')]=_0x5116a1[_0xdfb9('0x84')];this['app']=_0x503a35;this['type']='system';this[_0xdfb9('0x85')]='Fax\x20Extension';this[_0xdfb9('0x64')]=_0x5116a1['id'];this[_0xdfb9('0x80')]=_0x540edf;this[_0xdfb9('0x86')]=_0x43f391;}function createExtensionsReciveFax(_0x5393d9){var _0x46da33=0x1;var _0x14519d=[];_0x14519d[_0xdfb9('0x87')](new Extension(_0x5393d9,_0x46da33,'',_0xdfb9('0x88')));_0x46da33+=0x1;_0x14519d['push'](new Extension(_0x5393d9,_0x46da33,_0xdfb9('0x89'),_0xdfb9('0x8a')));_0x46da33+=0x1;for(var _0x2bc57b in _0x5393d9){if(_0x5393d9['hasOwnProperty'](_0x2bc57b)&&(_0x2bc57b===_0xdfb9('0x8b')||_0x2bc57b===_0xdfb9('0x84')||_0x2bc57b===_0xdfb9('0x8c')||_0x2bc57b===_0xdfb9('0x8d')||_0x2bc57b===_0xdfb9('0x8e')||_0x2bc57b==='maxrate'||_0x2bc57b===_0xdfb9('0x8f')||_0x2bc57b===_0xdfb9('0x90')||_0x2bc57b==='t38timeout')){_0x14519d[_0xdfb9('0x87')](new Extension(_0x5393d9,_0x46da33,_0xdfb9('0x91')+_0x2bc57b+')='+_0x5393d9[_0x2bc57b],'Set'));_0x46da33+=0x1;}}_0x14519d[_0xdfb9('0x87')](new Extension(_0x5393d9,_0x46da33,'6','Wait'));_0x46da33+=0x1;_0x14519d[_0xdfb9('0x87')](new Extension(_0x5393d9,_0x46da33,'/var/opt/motion2/server/files/attachments/fax-${CALLERID(num)}-${CUT(UNIQUEID,.,1)}-${CUT(UNIQUEID,.,2)}-${STRFTIME(,,%C%y%m%d%H%M%S)}-rx.tif,d','ReceiveFax'));_0x46da33=0x0;return _0x14519d;}exports[_0xdfb9('0x92')]=function(_0x4f2ee6,_0x3d5a14,_0xee4315){var _0x2a3321;return db[_0xdfb9('0x7b')][_0xdfb9('0x7c')](function(_0x90a008){return db['FaxAccount']['create'](_0x4f2ee6[_0xdfb9('0x61')],{'transaction':_0x90a008})[_0xdfb9('0x1e')](function(_0x4b83ce){_0x2a3321=_0x4b83ce[_0xdfb9('0x33')]({'plain':!![]});return db[_0xdfb9('0x93')][_0xdfb9('0x7e')](createExtensionsReciveFax(_0x2a3321),{'transaction':_0x90a008});});})[_0xdfb9('0x1e')](function(){return _0x2a3321;})['then'](respondWithResult(_0x3d5a14,null))['catch'](handleError(_0x3d5a14,null));};exports[_0xdfb9('0x94')]=function(_0x516d5f,_0x486293,_0x265c24){var _0x2cab62;return db[_0xdfb9('0x7b')]['transaction'](function(_0x2b013c){return db[_0xdfb9('0x3b')]['update'](_0x516d5f[_0xdfb9('0x61')],{'where':{'id':_0x516d5f[_0xdfb9('0x61')]['id']},'transaction':_0x2b013c})[_0xdfb9('0x1e')](function(_0x53c25d){return db[_0xdfb9('0x93')]['destroy']({'where':{'FaxAccountId':_0x516d5f[_0xdfb9('0x61')]['id']},'transaction':_0x2b013c})[_0xdfb9('0x1e')](function(_0x10165a){return db[_0xdfb9('0x93')][_0xdfb9('0x7e')](createExtensionsReciveFax(_[_0xdfb9('0x95')](_0x516d5f['body'],[_0xdfb9('0x96'),_0xdfb9('0x97'),'createdAt',_0xdfb9('0x98'),_0xdfb9('0x99'),_0xdfb9('0x9a')])),{'transaction':_0x2b013c});});});})[_0xdfb9('0x1e')](function(){return db[_0xdfb9('0x3b')][_0xdfb9('0x9b')](_0x516d5f[_0xdfb9('0x61')]['id']);})[_0xdfb9('0x1e')](respondWithResult(_0x486293,null))[_0xdfb9('0x28')](handleError(_0x486293,null));};exports[_0xdfb9('0x9c')]=function(_0x22f3a6,_0x1a4506,_0x45bf3a){var _0x44c361={'raw':!![],'where':{}};var _0x51fb8e={};var _0x26cf66={'count':0x0,'rows':[]};return db['FaxAccount'][_0xdfb9('0x6c')]({'where':{'id':_0x22f3a6[_0xdfb9('0x56')]['id']}})[_0xdfb9('0x1e')](handleEntityNotFound(_0x1a4506,null))['then'](function(_0x26b018){if(_0x26b018){_0x51fb8e[_0xdfb9('0x3c')]=_[_0xdfb9('0x3d')](db[_0xdfb9('0x9d')][_0xdfb9('0x59')]);_0x51fb8e[_0xdfb9('0x3e')]=_[_0xdfb9('0x3d')](_0x22f3a6['query']);_0x51fb8e[_0xdfb9('0x3f')]=_[_0xdfb9('0x40')](_0x51fb8e['model'],_0x51fb8e['query']);_0x44c361[_0xdfb9('0x41')]=_['intersection'](_0x51fb8e[_0xdfb9('0x3c')],qs[_0xdfb9('0x42')](_0x22f3a6['query']['fields']));_0x44c361[_0xdfb9('0x41')]=_0x44c361[_0xdfb9('0x41')][_0xdfb9('0x43')]?_0x44c361['attributes']:_0x51fb8e[_0xdfb9('0x3c')];if(!_0x22f3a6[_0xdfb9('0x3e')][_0xdfb9('0x44')]('nolimit')){_0x44c361[_0xdfb9('0x2d')]=qs['limit'](_0x22f3a6[_0xdfb9('0x3e')]['limit']);_0x44c361[_0xdfb9('0x2c')]=qs['offset'](_0x22f3a6['query'][_0xdfb9('0x2c')]);}_0x44c361[_0xdfb9('0x67')]=qs[_0xdfb9('0x46')](_0x22f3a6['query'][_0xdfb9('0x46')]);_0x44c361[_0xdfb9('0x47')]=qs[_0xdfb9('0x3f')](_[_0xdfb9('0x48')](_0x22f3a6[_0xdfb9('0x3e')],_0x51fb8e[_0xdfb9('0x3f')]));_0x44c361[_0xdfb9('0x47')][_0xdfb9('0x64')]=_0x26b018['id'];if(_0x22f3a6[_0xdfb9('0x3e')][_0xdfb9('0x49')]){_0x44c361[_0xdfb9('0x47')]=_[_0xdfb9('0x4a')](_0x44c361[_0xdfb9('0x47')],{'$or':_[_0xdfb9('0x4b')](_0x44c361[_0xdfb9('0x41')],function(_0x5f4a34){var _0x24b069={};_0x24b069[_0x5f4a34]={'$like':'%'+_0x22f3a6[_0xdfb9('0x3e')][_0xdfb9('0x49')]+'%'};return _0x24b069;})});}if(_0x22f3a6['query']['$gte']){var _0x42be71=_0x22f3a6['query'][_0xdfb9('0x9e')][_0xdfb9('0x9f')](',');var _0x1bae0e={};_0x1bae0e[_0x42be71[0x0]]={'$gte':moment(_0x42be71[0x1])[_0xdfb9('0xa0')](_0xdfb9('0xa1'))};_0x44c361[_0xdfb9('0x47')]=_['merge'](_0x44c361['where'],_0x1bae0e);}_0x44c361=_[_0xdfb9('0x4a')]({},_0x44c361,_0x22f3a6[_0xdfb9('0x4f')]);return db[_0xdfb9('0x9d')]['count']({'where':_0x44c361['where']})[_0xdfb9('0x1e')](function(_0x37deb9){_0x26cf66[_0xdfb9('0x50')]=_0x37deb9;if(_0x22f3a6[_0xdfb9('0x3e')][_0xdfb9('0x51')]){_0x44c361[_0xdfb9('0x52')]=[{'all':!![]}];}return db[_0xdfb9('0x9d')]['findAll'](_0x44c361);})[_0xdfb9('0x1e')](function(_0x4293fa){_0x26cf66[_0xdfb9('0x54')]=_0x4293fa;return _0x26cf66;});}})[_0xdfb9('0x1e')](respondWithFilteredResult(_0x1a4506,_0x44c361))[_0xdfb9('0x28')](handleError(_0x1a4506,null));};exports[_0xdfb9('0x3a')]=function(_0x12b4e5,_0x10446f,_0x349a6d){var _0x32b448,_0x4097be={},_0x42a441;if(_0x12b4e5[_0xdfb9('0x61')]['to']){_0x42a441=_0x12b4e5[_0xdfb9('0x61')]['to'][0x0];}return db['FaxAccount'][_0xdfb9('0x5d')]({'where':{'id':_0x12b4e5[_0xdfb9('0x56')]['id']},'include':[{'model':db[_0xdfb9('0xa2')],'as':_0xdfb9('0xa3'),'include':[{'model':db[_0xdfb9('0x72')],'as':_0xdfb9('0xa4'),'where':{'fax':_0x42a441},'limit':0x1,'order':[[_0xdfb9('0x98'),_0xdfb9('0xa5')]]}]}]})[_0xdfb9('0x1e')](handleEntityNotFound(_0x10446f,null))[_0xdfb9('0x1e')](function(_0x35efc2){_0x32b448=_0x35efc2;if(_0x12b4e5['body'][_0xdfb9('0xa6')]&&_0x12b4e5['body'][_0xdfb9('0xa6')][_0xdfb9('0x43')]){for(var _0x4455f7=0x0;_0x4455f7<_0x12b4e5[_0xdfb9('0x61')][_0xdfb9('0xa6')]['length'];_0x4455f7+=0x1){_0x12b4e5[_0xdfb9('0x61')][_0xdfb9('0xa6')][_0x4455f7]={'filename':_0x12b4e5[_0xdfb9('0x61')]['attachments'][_0x4455f7][_0xdfb9('0x39')],'id':_0x12b4e5[_0xdfb9('0x61')][_0xdfb9('0xa6')][_0x4455f7]['id'],'path':path['join'](config[_0xdfb9('0xa7')],_0xdfb9('0xa8'),_0x12b4e5[_0xdfb9('0x61')]['attachments'][_0x4455f7][_0xdfb9('0xa9')])};}}return respondWithRpcPromise('CheckAfterSend',_0xdfb9('0xaa'),{'FaxAccountId':_['isNil'](_0x12b4e5[_0xdfb9('0x56')]['id'])?undefined:_0x12b4e5['params']['id'],'path':_[_0xdfb9('0xab')](_0x12b4e5[_0xdfb9('0x61')]['attachments'][0x0]['path'])?undefined:_0x12b4e5[_0xdfb9('0x61')]['attachments'][0x0]['path'],'fax':_['isNil'](_0x12b4e5[_0xdfb9('0x61')]['to'][0x0])?undefined:_0x12b4e5[_0xdfb9('0x61')]['to'][0x0]},client9002);})[_0xdfb9('0x1e')](function(){if(_0x32b448){if(_[_0xdfb9('0xab')](_0x12b4e5[_0xdfb9('0x61')]['from'])){_0x12b4e5[_0xdfb9('0x61')]['from']=util[_0xdfb9('0xa0')](_0xdfb9('0xac'),_0x32b448[_0xdfb9('0x39')],_0x32b448[_0xdfb9('0xad')]);}if(_0x32b448['List']){if(_0x32b448['List'][_0xdfb9('0xa4')][_0xdfb9('0x43')]){return _0x32b448[_0xdfb9('0xa3')][_0xdfb9('0xa4')][0x0];}else{return db['CmContact'][_0xdfb9('0x5f')](_['defaults'](_0x12b4e5[_0xdfb9('0x61')],{'firstName':_0x12b4e5[_0xdfb9('0x61')]['to'][0x0],'phone':_0x12b4e5['body']['to'][0x0],'fax':_0x12b4e5['body']['to'][0x0],'ListId':_0x32b448[_0xdfb9('0x9a')]}));}}else{throw new Error('List\x20not\x20found');}}else{throw new Error(_0xdfb9('0xae'));}})['then'](function(_0x5c4205){if(_0x5c4205){return db[_0xdfb9('0x70')][_0xdfb9('0x5d')]({'where':{'ContactId':_0x5c4205['id'],'closed':![],'FaxAccountId':_0x32b448['id']}})[_0xdfb9('0x1e')](function(_0x30bd8d){if(_0x30bd8d){return[_0x30bd8d,![]];}return db[_0xdfb9('0x70')]['create']({'UserId':_0x12b4e5[_0xdfb9('0x5b')]['id'],'ContactId':_0x5c4205['id'],'FaxAccountId':_0x32b448['id'],'fax':_0x12b4e5[_0xdfb9('0x61')]['to'][0x0],'firstMsgDirection':_0xdfb9('0xaf'),'Messages':[_[_0xdfb9('0x4a')](_0x12b4e5[_0xdfb9('0x61')],{'read':![],'body':_0x12b4e5[_0xdfb9('0x61')][_0xdfb9('0xa6')][0x0][_0xdfb9('0xb0')],'FaxAccountId':_0x32b448['id'],'UserId':_0x12b4e5[_0xdfb9('0x5b')]['id'],'ContactId':_0x5c4205['id'],'AttachmentId':_0x12b4e5[_0xdfb9('0x61')]['attachments'][0x0]['id']})]},{'include':[{'model':db[_0xdfb9('0x9d')],'as':'Messages'}]})[_0xdfb9('0x1e')](function(_0x1b9e12){return[_0x1b9e12,!![]];});});}else{throw new Error(_0xdfb9('0xb1'));}})[_0xdfb9('0xb2')](function(_0x1c2721,_0x592956){if(_0x592956){return _0x1c2721;}return db[_0xdfb9('0x9d')][_0xdfb9('0x5f')]({'direction':_0xdfb9('0xaf'),'read':![],'body':_0x12b4e5[_0xdfb9('0x61')]['attachments'][0x0]['filename'],'FaxAccountId':_0x32b448['id'],'FaxInteractionId':_0x1c2721['id'],'UserId':_0x12b4e5[_0xdfb9('0x5b')]['id'],'ContactId':_0x1c2721['ContactId'],'AttachmentId':_0x12b4e5[_0xdfb9('0x61')][_0xdfb9('0xa6')][0x0]['id']})[_0xdfb9('0x1e')](function(_0x2eb7bb){_0x1c2721[_0xdfb9('0xb3')][_0xdfb9('0xb4')]=[];_0x1c2721[_0xdfb9('0xb3')]['Messages'][_0xdfb9('0x87')](_0x2eb7bb[_0xdfb9('0xb3')]);return _0x1c2721;});})['then'](function(_0x8f661f){respondWithRpcPromise(_0xdfb9('0xb5'),_0xdfb9('0xb5'),{'FaxAccountId':_[_0xdfb9('0xab')](_0x12b4e5[_0xdfb9('0x56')]['id'])?undefined:_0x12b4e5[_0xdfb9('0x56')]['id'],'path':_[_0xdfb9('0xab')](_0x12b4e5['body'][_0xdfb9('0xa6')][0x0]['path'])?undefined:_0x12b4e5[_0xdfb9('0x61')][_0xdfb9('0xa6')][0x0][_0xdfb9('0xb6')],'fax':_['isNil'](_0x12b4e5[_0xdfb9('0x61')]['to'][0x0])?undefined:_0x12b4e5[_0xdfb9('0x61')]['to'][0x0],'AttachmentId':_0x12b4e5[_0xdfb9('0x61')][_0xdfb9('0xa6')][0x0]['id']},client9002)[_0xdfb9('0x1e')](function(_0x5c38d3){logger['info']('SendFaxRpc,\x20%s',_0x5c38d3);})[_0xdfb9('0x28')](function(_0x382262){logger[_0xdfb9('0x1f')](_0xdfb9('0xb7'),_0x382262);});return _0x8f661f;})[_0xdfb9('0x1e')](respondWithResult(_0x10446f,null))[_0xdfb9('0x28')](handleError(_0x10446f,null));};exports['addAgents']=function(_0x533fbc,_0x2cf9cc,_0x3c0e15){return db['FaxAccount'][_0xdfb9('0x5d')]({'where':{'id':_0x533fbc[_0xdfb9('0x56')]['id']}})[_0xdfb9('0x1e')](handleEntityNotFound(_0x2cf9cc,null))[_0xdfb9('0x1e')](function(_0x571ea2){if(_0x571ea2){return _0x571ea2[_0xdfb9('0xb8')](_0x533fbc[_0xdfb9('0x61')][_0xdfb9('0x6e')],_['omit'](_0x533fbc[_0xdfb9('0x61')],[_0xdfb9('0x6e'),'id'])||{})[_0xdfb9('0xb2')](function(_0x319cd7){for(var _0x494ddc=0x0;_0x494ddc<_0x533fbc[_0xdfb9('0x61')][_0xdfb9('0x6e')]['length'];_0x494ddc+=0x1){socket[_0xdfb9('0xb9')](_0xdfb9('0xba'),{'UserId':_0x533fbc['body']['ids'][_0x494ddc],'FaxAccountId':_0x533fbc[_0xdfb9('0x56')]['id']});}return _0x319cd7;});}})[_0xdfb9('0x1e')](respondWithResult(_0x2cf9cc,null))[_0xdfb9('0x28')](handleError(_0x2cf9cc,null));};exports[_0xdfb9('0xbb')]=function(_0x326081,_0x201fb6,_0x2b77a7){return db[_0xdfb9('0x3b')]['find']({'where':{'id':_0x326081[_0xdfb9('0x56')]['id']}})[_0xdfb9('0x1e')](handleEntityNotFound(_0x201fb6,null))[_0xdfb9('0x1e')](function(_0x3d740a){if(_0x3d740a){return _0x3d740a['removeAgents'](_0x326081[_0xdfb9('0x3e')]['ids'])[_0xdfb9('0x1e')](function(){if(_['isArray'](_0x326081[_0xdfb9('0x3e')]['ids'])){for(var _0x3d5335=0x0;_0x3d5335<_0x326081[_0xdfb9('0x3e')][_0xdfb9('0x6e')][_0xdfb9('0x43')];_0x3d5335+=0x1){socket['emit']('userFaxAccount:remove',{'UserId':Number(_0x326081[_0xdfb9('0x3e')][_0xdfb9('0x6e')][_0x3d5335]),'FaxAccountId':Number(_0x326081[_0xdfb9('0x56')]['id'])});}}else{socket['emit'](_0xdfb9('0xbc'),{'UserId':Number(_0x326081[_0xdfb9('0x3e')][_0xdfb9('0x6e')]),'FaxAccountId':Number(_0x326081['params']['id'])});}});}})['then'](respondWithStatusCode(_0x201fb6,null))['catch'](handleError(_0x201fb6,null));};exports['getAgents']=function(_0x1e3c5b,_0xf4b898,_0x5c3ef1){var _0x5064bc={};var _0x3d2109={};var _0x56a44e;var _0x2d5c56;return db[_0xdfb9('0x3b')][_0xdfb9('0x6c')]({'where':{'id':_0x1e3c5b[_0xdfb9('0x56')]['id']}})[_0xdfb9('0x1e')](handleEntityNotFound(_0xf4b898,null))['then'](function(_0x494d4a){if(_0x494d4a){_0x56a44e=_0x494d4a;_0x3d2109['model']=_['keys'](db[_0xdfb9('0x73')]['rawAttributes']);_0x3d2109[_0xdfb9('0x3e')]=_[_0xdfb9('0x3d')](_0x1e3c5b[_0xdfb9('0x3e')]);_0x3d2109[_0xdfb9('0x3f')]=_[_0xdfb9('0x40')](_0x3d2109[_0xdfb9('0x3c')],_0x3d2109[_0xdfb9('0x3e')]);_0x5064bc[_0xdfb9('0x41')]=_[_0xdfb9('0x40')](_0x3d2109[_0xdfb9('0x3c')],qs[_0xdfb9('0x42')](_0x1e3c5b[_0xdfb9('0x3e')]['fields']));_0x5064bc[_0xdfb9('0x41')]=_0x5064bc[_0xdfb9('0x41')]['length']?_0x5064bc[_0xdfb9('0x41')]:_0x3d2109['model'];_0x5064bc[_0xdfb9('0x67')]=qs[_0xdfb9('0x46')](_0x1e3c5b[_0xdfb9('0x3e')][_0xdfb9('0x46')]);_0x5064bc[_0xdfb9('0x47')]=qs[_0xdfb9('0x3f')](_['pick'](_0x1e3c5b[_0xdfb9('0x3e')],_0x3d2109[_0xdfb9('0x3f')]));if(_0x1e3c5b[_0xdfb9('0x3e')]['filter']){_0x5064bc[_0xdfb9('0x47')]=_[_0xdfb9('0x4a')](_0x5064bc['where'],{'$or':_['map'](_0x5064bc[_0xdfb9('0x41')],function(_0x29d3e4){var _0x20bee8={};_0x20bee8[_0x29d3e4]={'$like':'%'+_0x1e3c5b[_0xdfb9('0x3e')]['filter']+'%'};return _0x20bee8;})});}_0x5064bc=_['merge']({},_0x5064bc,_0x1e3c5b[_0xdfb9('0x4f')]);return _0x56a44e[_0xdfb9('0xbd')](_0x5064bc);}})['then'](function(_0xb389e3){if(_0xb389e3){_0x2d5c56=_0xb389e3[_0xdfb9('0x43')];if(!_0x1e3c5b[_0xdfb9('0x3e')][_0xdfb9('0x44')](_0xdfb9('0x45'))){_0x5064bc['limit']=qs[_0xdfb9('0x2d')](_0x1e3c5b[_0xdfb9('0x3e')][_0xdfb9('0x2d')]);_0x5064bc['offset']=qs[_0xdfb9('0x2c')](_0x1e3c5b[_0xdfb9('0x3e')][_0xdfb9('0x2c')]);}return _0x56a44e[_0xdfb9('0xbd')](_0x5064bc);}})[_0xdfb9('0x1e')](function(_0x1807a1){if(_0x1807a1){return _0x1807a1?{'count':_0x2d5c56,'rows':_0x1807a1}:null;}})[_0xdfb9('0x1e')](respondWithResult(_0xf4b898,null))[_0xdfb9('0x28')](handleError(_0xf4b898,null));};
\ No newline at end of file
+var _0x26f4=['addAgents','emit','userFaxAccount:save','removeAgents','isArray','userFaxAccount:remove','getAgents','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','lodash','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','socket.io-emitter','redis','./faxAccount.socket','register','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','info','FaxAccount,\x20%s,\x20%s','request\x20sent','FaxAccount,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','status','end','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','get','FaxAccounts','UserProfileResource','sendStatus','stack','name','send','mandatoryDispositionPause','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','filter','merge','type','key','VIRTUAL','options','where','includeAll','include','FaxAccount','findAll','rows','params','Pause','find','create','user','role','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','describe','addDisposition','FaxAccountId','Disposition','getDispositions','findOne','map','removeDispositions','addAnswer','CannedAnswer','getAnswers','removeAnswers','ids','addInteraction','FaxInteraction','omit','getInteractions','CmContact','Contact','User','Owner','fullname','internal','Tags','color','tag','addApplications','sequelize','transaction','FaxApplication','bulkCreate','findAndCountAll','priority','getApplications','context','from-voip-provider','exten','system','description','Fax\x20Extension','ecm','localstationid','faxdetect','headerinfo','maxrate','minrate','modem','t38timeout','push','FAXOPT(','Set','Wait','/var/opt/motion2/server/files/attachments/fax-${CALLERID(num)}-${CUT(UNIQUEID,.,1)}-${CUT(UNIQUEID,.,2)}-${STRFTIME(,,%C%y%m%d%H%M%S)}-rx.tif,d','ReceiveFax','VoiceExtension','updateAccountApplications','createdAt','updatedAt','TrunkId','ListId','findById','getMessages','FaxMessage','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','CmList','List','Contacts','DESC','attachments','join','root','basename','CheckAfterSend','isNil','\x22%s\x22\x20<%s>','fax','defaults','List\x20not\x20found','Send\x20Fax\x20failed','out','Contact\x20not\x20found','spread','ContactId','dataValues','Messages','SendFax','SendFaxRpc,\x20%s'];(function(_0x42cae2,_0x284ef8){var _0x5f256f=function(_0x41abc8){while(--_0x41abc8){_0x42cae2['push'](_0x42cae2['shift']());}};_0x5f256f(++_0x284ef8);}(_0x26f4,0xca));var _0x426f=function(_0x2c3a47,_0x170687){_0x2c3a47=_0x2c3a47-0x0;var _0x1c04de=_0x26f4[_0x2c3a47];return _0x1c04de;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x426f('0x0'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x426f('0x1'));var rp=require(_0x426f('0x2'));var moment=require(_0x426f('0x3'));var BPromise=require(_0x426f('0x4'));var Mustache=require(_0x426f('0x5'));var util=require('util');var path=require(_0x426f('0x6'));var sox=require(_0x426f('0x7'));var csv=require(_0x426f('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x426f('0x9'));var squel=require('squel');var crypto=require(_0x426f('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x426f('0xb'));var toCsv=require(_0x426f('0x8'));var querystring=require(_0x426f('0xc'));var Papa=require(_0x426f('0xd'));var Redis=require(_0x426f('0xe'));var authService=require(_0x426f('0xf'));var qs=require(_0x426f('0x10'));var hardwareService=require(_0x426f('0x11'));var logger=require('../../config/logger')(_0x426f('0x12'));var utils=require(_0x426f('0x13'));var config=require(_0x426f('0x14'));var db=require(_0x426f('0x15'))['db'];config['redis']=_['defaults'](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0x426f('0x16'))(new Redis(config[_0x426f('0x17')]));require(_0x426f('0x18'))[_0x426f('0x19')](socket);var jayson=require(_0x426f('0x1a'));var client=jayson[_0x426f('0x1b')][_0x426f('0x1c')]({'port':0x232c});var client9002=jayson['client'][_0x426f('0x1c')]({'port':0x232a});function checkPasswordPattern(_0x19bdcc,_0x4a41fe,_0x206060){if(_0x206060){var _0x40c7eb=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x40c7eb[_0x426f('0x1d')](_0x4a41fe)){return _0x19bdcc;}else{throw new Error(_0x426f('0x1e'));}}else{return _0x19bdcc;}}function respondWithRpcPromise(_0x396e2b,_0x2110ad,_0x2b1dbe,_0x4b542c){return new BPromise(function(_0x23f032,_0xa9cb79){var _0x15960f=_0x4b542c||client;return _0x15960f[_0x426f('0x1f')](_0x396e2b,_0x2b1dbe)['then'](function(_0xbaaafb){logger[_0x426f('0x20')](_0x426f('0x21'),_0x2110ad,_0x426f('0x22'));logger['debug'](_0x426f('0x23'),_0x2110ad,_0x426f('0x22'),JSON['stringify'](_0xbaaafb));if(_0xbaaafb[_0x426f('0x24')]){if(_0xbaaafb[_0x426f('0x24')][_0x426f('0x25')]===0x1f4){logger[_0x426f('0x24')]('FaxAccount,\x20%s,\x20%s',_0x2110ad,_0xbaaafb[_0x426f('0x24')][_0x426f('0x26')]);return _0xa9cb79(_0xbaaafb['error'][_0x426f('0x26')]);}logger[_0x426f('0x24')](_0x426f('0x21'),_0x2110ad,_0xbaaafb[_0x426f('0x24')]['message']);return _0x23f032(_0xbaaafb['error'][_0x426f('0x26')]);}else{logger[_0x426f('0x20')](_0x426f('0x21'),_0x2110ad,_0x426f('0x22'));_0x23f032(_0xbaaafb[_0x426f('0x27')][_0x426f('0x26')]);}})[_0x426f('0x28')](function(_0x24a9fd){logger[_0x426f('0x24')](_0x426f('0x21'),_0x2110ad,_0x24a9fd);_0xa9cb79(_0x24a9fd);});});}function respondWithStatusCode(_0x557394,_0xa15f67){_0xa15f67=_0xa15f67||0xcc;return function(_0x272d89){if(_0x272d89){return _0x557394['sendStatus'](_0xa15f67);}return _0x557394[_0x426f('0x29')](_0xa15f67)[_0x426f('0x2a')]();};}function respondWithResult(_0x2c6501,_0x3ae5c2){_0x3ae5c2=_0x3ae5c2||0xc8;return function(_0xc73005){if(_0xc73005){return _0x2c6501['status'](_0x3ae5c2)[_0x426f('0x2b')](_0xc73005);}};}function respondWithFilteredResult(_0x341e0f,_0x1497f9){return function(_0x4e6f38){if(_0x4e6f38){var _0x2c6da2=_0x4e6f38[_0x426f('0x2c')],_0x9956a=_0x1497f9[_0x426f('0x2d')],_0x41bbb8=_0x1497f9[_0x426f('0x2d')]+_0x1497f9[_0x426f('0x2e')],_0x52b17f;if(_0x41bbb8>=_0x2c6da2){_0x41bbb8=_0x2c6da2;_0x52b17f=0xc8;}else{_0x52b17f=0xce;}_0x341e0f[_0x426f('0x29')](_0x52b17f);return _0x341e0f[_0x426f('0x2f')](_0x426f('0x30'),_0x9956a+'-'+_0x41bbb8+'/'+_0x2c6da2)[_0x426f('0x2b')](_0x4e6f38);}return null;};}function patchUpdates(_0x119192){return function(_0x538f96){try{jsonpatch[_0x426f('0x31')](_0x538f96,_0x119192,!![]);}catch(_0x4100c3){return BPromise['reject'](_0x4100c3);}return _0x538f96[_0x426f('0x32')]();};}function saveUpdates(_0x4b8166,_0x2c71a5){return function(_0xc70e7b){if(_0xc70e7b){return _0xc70e7b[_0x426f('0x33')](_0x4b8166)[_0x426f('0x34')](function(_0x2a1149){return _0x2a1149;});}return null;};}function removeEntity(_0x36099a,_0x3cbde8){return function(_0x2551f2){if(_0x2551f2){return _0x2551f2[_0x426f('0x35')]()[_0x426f('0x34')](function(){var _0x59ac74=_0x2551f2[_0x426f('0x36')]({'plain':!![]});var _0x5514c1=_0x426f('0x37');return db[_0x426f('0x38')][_0x426f('0x35')]({'where':{'type':_0x5514c1,'resourceId':_0x59ac74['id']}})[_0x426f('0x34')](function(){return _0x2551f2;});})['then'](function(){_0x36099a[_0x426f('0x29')](0xcc)[_0x426f('0x2a')]();});}};}function handleEntityNotFound(_0x9b8c97,_0x531bf2){return function(_0x46e1b0){if(!_0x46e1b0){_0x9b8c97[_0x426f('0x39')](0x194);}return _0x46e1b0;};}function handleError(_0x377351,_0x54ad07){_0x54ad07=_0x54ad07||0x1f4;return function(_0x3192d7){logger[_0x426f('0x24')](_0x3192d7[_0x426f('0x3a')]);if(_0x3192d7[_0x426f('0x3b')]){delete _0x3192d7[_0x426f('0x3b')];}_0x377351[_0x426f('0x29')](_0x54ad07)[_0x426f('0x3c')](_0x3192d7);};}exports['index']=function(_0x5b0521,_0x29494a){var _0x2bc10a={'include':[{'model':db['Pause'],'as':_0x426f('0x3d')}]},_0x5e40a5={},_0x49b762={'count':0x0,'rows':[]};var _0x4310ea=db['FaxAccount'][_0x426f('0x3e')];_0x5e40a5[_0x426f('0x3f')]=_[_0x426f('0x40')](_0x4310ea);_0x5e40a5['query']=_['keys'](_0x5b0521[_0x426f('0x41')]);_0x5e40a5[_0x426f('0x42')]=_[_0x426f('0x43')](_0x5e40a5[_0x426f('0x3f')],_0x5e40a5[_0x426f('0x41')]);_0x2bc10a[_0x426f('0x44')]=_[_0x426f('0x43')](_0x5e40a5[_0x426f('0x3f')],qs['fields'](_0x5b0521[_0x426f('0x41')][_0x426f('0x45')]));_0x2bc10a['attributes']=_0x2bc10a['attributes'][_0x426f('0x46')]?_0x2bc10a[_0x426f('0x44')]:_0x5e40a5[_0x426f('0x3f')];if(!_0x5b0521[_0x426f('0x41')][_0x426f('0x47')](_0x426f('0x48'))){_0x2bc10a[_0x426f('0x2e')]=qs[_0x426f('0x2e')](_0x5b0521[_0x426f('0x41')][_0x426f('0x2e')]);_0x2bc10a[_0x426f('0x2d')]=qs['offset'](_0x5b0521['query'][_0x426f('0x2d')]);}_0x2bc10a[_0x426f('0x49')]=qs[_0x426f('0x4a')](_0x5b0521[_0x426f('0x41')][_0x426f('0x4a')]);_0x2bc10a['where']=qs[_0x426f('0x42')](_[_0x426f('0x4b')](_0x5b0521[_0x426f('0x41')],_0x5e40a5['filters']));if(_0x5b0521[_0x426f('0x41')][_0x426f('0x4c')]){_0x2bc10a['where']=_[_0x426f('0x4d')](_0x2bc10a['where'],{'$or':_['map'](_0x4310ea,function(_0x3eaddc){if(_0x3eaddc[_0x426f('0x4e')][_0x426f('0x4f')]!==_0x426f('0x50')){var _0x4ba195={};_0x4ba195[_0x3eaddc['field']]={'$like':'%'+_0x5b0521[_0x426f('0x41')]['filter']+'%'};return _0x4ba195;}})});}_0x2bc10a=_[_0x426f('0x4d')]({},_0x2bc10a,_0x5b0521[_0x426f('0x51')]);var _0x1f530d={'where':_0x2bc10a[_0x426f('0x52')]};return db['FaxAccount'][_0x426f('0x2c')](_0x1f530d)[_0x426f('0x34')](function(_0x3b725c){_0x49b762['count']=_0x3b725c;if(_0x5b0521[_0x426f('0x41')][_0x426f('0x53')]){_0x2bc10a[_0x426f('0x54')]=[{'all':!![]}];}return db[_0x426f('0x55')][_0x426f('0x56')](_0x2bc10a);})[_0x426f('0x34')](function(_0x43d1da){_0x49b762[_0x426f('0x57')]=_0x43d1da;return _0x49b762;})['then'](respondWithFilteredResult(_0x29494a,_0x2bc10a))[_0x426f('0x28')](handleError(_0x29494a,null));};exports['show']=function(_0x422399,_0xb90e8){var _0x34ec55={'raw':![],'where':{'id':_0x422399[_0x426f('0x58')]['id']},'include':[{'model':db[_0x426f('0x59')],'as':_0x426f('0x3d')}]},_0x592789={};_0x592789[_0x426f('0x3f')]=_['keys'](db[_0x426f('0x55')]['rawAttributes']);_0x592789[_0x426f('0x41')]=_['keys'](_0x422399[_0x426f('0x41')]);_0x592789[_0x426f('0x42')]=_['intersection'](_0x592789[_0x426f('0x3f')],_0x592789[_0x426f('0x41')]);_0x34ec55[_0x426f('0x44')]=_[_0x426f('0x43')](_0x592789[_0x426f('0x3f')],qs[_0x426f('0x45')](_0x422399['query'][_0x426f('0x45')]));_0x34ec55[_0x426f('0x44')]=_0x34ec55['attributes'][_0x426f('0x46')]?_0x34ec55[_0x426f('0x44')]:_0x592789[_0x426f('0x3f')];if(_0x422399[_0x426f('0x41')][_0x426f('0x53')]){_0x34ec55['include']=[{'all':!![]}];}_0x34ec55=_['merge']({},_0x34ec55,_0x422399[_0x426f('0x51')]);return db[_0x426f('0x55')][_0x426f('0x5a')](_0x34ec55)[_0x426f('0x34')](handleEntityNotFound(_0xb90e8,null))[_0x426f('0x34')](respondWithResult(_0xb90e8,null))['catch'](handleError(_0xb90e8,null));};exports[_0x426f('0x5b')]=function(_0x25ae10,_0x2ab94a){return db[_0x426f('0x55')][_0x426f('0x5b')](_0x25ae10['body'],{})[_0x426f('0x34')](function(_0xe26f41){var _0x3287a0=_0x25ae10[_0x426f('0x5c')][_0x426f('0x36')]({'plain':!![]});if(!_0x3287a0)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x3287a0[_0x426f('0x5d')]===_0x426f('0x5c')){var _0x102bd1=_0xe26f41[_0x426f('0x36')]({'plain':!![]});var _0x3dad2d=_0x426f('0x37');return db[_0x426f('0x5e')]['find']({'where':{'name':_0x3dad2d,'userProfileId':_0x3287a0[_0x426f('0x5f')]},'raw':!![]})[_0x426f('0x34')](function(_0x191370){if(_0x191370&&_0x191370['autoAssociation']===0x0){return db[_0x426f('0x38')][_0x426f('0x5b')]({'name':_0x102bd1[_0x426f('0x3b')],'resourceId':_0x102bd1['id'],'type':_0x191370[_0x426f('0x3b')],'sectionId':_0x191370['id']},{})[_0x426f('0x34')](function(){return _0xe26f41;});}else{return _0xe26f41;}})[_0x426f('0x28')](function(_0x21cdf0){logger[_0x426f('0x24')](_0x426f('0x60'),_0x21cdf0);throw _0x21cdf0;});}return _0xe26f41;})[_0x426f('0x34')](respondWithResult(_0x2ab94a,0xc9))['catch'](handleError(_0x2ab94a,null));};exports[_0x426f('0x33')]=function(_0x17760e,_0x220905){if(_0x17760e['body']['id']){delete _0x17760e[_0x426f('0x61')]['id'];}return db[_0x426f('0x55')][_0x426f('0x5a')]({'where':{'id':_0x17760e[_0x426f('0x58')]['id']},'include':[{'model':db[_0x426f('0x59')],'as':_0x426f('0x3d')}]})[_0x426f('0x34')](handleEntityNotFound(_0x220905,null))[_0x426f('0x34')](saveUpdates(_0x17760e['body'],null))[_0x426f('0x34')](respondWithResult(_0x220905,null))['catch'](handleError(_0x220905,null));};exports[_0x426f('0x35')]=function(_0x1ec787,_0x2b5437){return db[_0x426f('0x55')][_0x426f('0x5a')]({'where':{'id':_0x1ec787['params']['id']}})[_0x426f('0x34')](handleEntityNotFound(_0x2b5437,null))[_0x426f('0x34')](removeEntity(_0x2b5437,null))[_0x426f('0x28')](handleError(_0x2b5437,null));};exports[_0x426f('0x62')]=function(_0x5302d9,_0x5e5dd3){return db[_0x426f('0x55')][_0x426f('0x62')]()[_0x426f('0x34')](respondWithResult(_0x5e5dd3,null))[_0x426f('0x28')](handleError(_0x5e5dd3,null));};exports[_0x426f('0x63')]=function(_0x52bf2d,_0x101c9f,_0xb6d7){if(_0x52bf2d[_0x426f('0x61')]['id']){delete _0x52bf2d[_0x426f('0x61')]['id'];}return db['FaxAccount'][_0x426f('0x5a')]({'where':{'id':_0x52bf2d[_0x426f('0x58')]['id']}})[_0x426f('0x34')](handleEntityNotFound(_0x101c9f,null))['then'](function(_0x5af809){if(_0x5af809){_0x52bf2d['body'][_0x426f('0x64')]=_0x5af809['id'];return db[_0x426f('0x65')][_0x426f('0x5b')](_0x52bf2d['body']);}})['then'](respondWithResult(_0x101c9f,null))[_0x426f('0x28')](handleError(_0x101c9f,null));};exports[_0x426f('0x66')]=function(_0x294867,_0x2d802a,_0x5a8b15){var _0x5f15f7={'raw':![],'where':{}};var _0x2813c9={};var _0x57e1c8={'count':0x0,'rows':[]};return db[_0x426f('0x55')][_0x426f('0x67')]({'where':{'id':_0x294867['params']['id']}})[_0x426f('0x34')](handleEntityNotFound(_0x2d802a,null))['then'](function(_0x3c715f){if(_0x3c715f){_0x2813c9[_0x426f('0x3f')]=_[_0x426f('0x40')](db[_0x426f('0x65')][_0x426f('0x3e')]);_0x2813c9[_0x426f('0x41')]=_['keys'](_0x294867['query']);_0x2813c9['filters']=_['intersection'](_0x2813c9['model'],_0x2813c9[_0x426f('0x41')]);_0x5f15f7['attributes']=_[_0x426f('0x43')](_0x2813c9['model'],qs[_0x426f('0x45')](_0x294867[_0x426f('0x41')]['fields']));_0x5f15f7[_0x426f('0x44')]=_0x5f15f7['attributes'][_0x426f('0x46')]?_0x5f15f7[_0x426f('0x44')]:_0x2813c9[_0x426f('0x3f')];if(!_0x294867[_0x426f('0x41')][_0x426f('0x47')](_0x426f('0x48'))){_0x5f15f7[_0x426f('0x2e')]=qs[_0x426f('0x2e')](_0x294867[_0x426f('0x41')][_0x426f('0x2e')]);_0x5f15f7['offset']=qs['offset'](_0x294867[_0x426f('0x41')][_0x426f('0x2d')]);}_0x5f15f7['order']=qs[_0x426f('0x4a')](_0x294867[_0x426f('0x41')][_0x426f('0x4a')]);_0x5f15f7[_0x426f('0x52')]=qs[_0x426f('0x42')](_[_0x426f('0x4b')](_0x294867[_0x426f('0x41')],_0x2813c9[_0x426f('0x42')]));_0x5f15f7[_0x426f('0x52')][_0x426f('0x64')]=_0x3c715f['id'];if(_0x294867[_0x426f('0x41')][_0x426f('0x4c')]){_0x5f15f7[_0x426f('0x52')]=_['merge'](_0x5f15f7[_0x426f('0x52')],{'$or':_[_0x426f('0x68')](_0x5f15f7[_0x426f('0x44')],function(_0x34f082){var _0x3d53bd={};_0x3d53bd[_0x34f082]={'$like':'%'+_0x294867[_0x426f('0x41')][_0x426f('0x4c')]+'%'};return _0x3d53bd;})});}_0x5f15f7=_[_0x426f('0x4d')]({},_0x5f15f7,_0x294867[_0x426f('0x51')]);return db[_0x426f('0x65')][_0x426f('0x2c')]({'where':_0x5f15f7[_0x426f('0x52')]})['then'](function(_0x3b8f9d){_0x57e1c8[_0x426f('0x2c')]=_0x3b8f9d;if(_0x294867['query'][_0x426f('0x53')]){_0x5f15f7['include']=[{'all':!![]}];}return db['Disposition'][_0x426f('0x56')](_0x5f15f7);})[_0x426f('0x34')](function(_0x561c88){_0x57e1c8[_0x426f('0x57')]=_0x561c88;return _0x57e1c8;});}})[_0x426f('0x34')](respondWithFilteredResult(_0x2d802a,_0x5f15f7))[_0x426f('0x28')](handleError(_0x2d802a,null));};exports[_0x426f('0x69')]=function(_0x3a18a3,_0x526182,_0x1e43d9){return db[_0x426f('0x55')]['find']({'where':{'id':_0x3a18a3[_0x426f('0x58')]['id']}})[_0x426f('0x34')](handleEntityNotFound(_0x526182,null))[_0x426f('0x34')](function(_0x34899f){if(_0x34899f){return _0x34899f['removeDispositions'](_0x3a18a3['query']['ids']);}})[_0x426f('0x34')](respondWithStatusCode(_0x526182,null))[_0x426f('0x28')](handleError(_0x526182,null));};exports[_0x426f('0x6a')]=function(_0x92b93,_0x1ff4b1,_0x1ea40a){if(_0x92b93['body']['id']){delete _0x92b93[_0x426f('0x61')]['id'];}return db[_0x426f('0x55')][_0x426f('0x5a')]({'where':{'id':_0x92b93[_0x426f('0x58')]['id']}})[_0x426f('0x34')](handleEntityNotFound(_0x1ff4b1,null))[_0x426f('0x34')](function(_0x1e4e82){if(_0x1e4e82){_0x92b93['body']['FaxAccountId']=_0x1e4e82['id'];return db[_0x426f('0x6b')]['create'](_0x92b93[_0x426f('0x61')]);}})[_0x426f('0x34')](respondWithResult(_0x1ff4b1,null))[_0x426f('0x28')](handleError(_0x1ff4b1,null));};exports[_0x426f('0x6c')]=function(_0x47fe91,_0x36dd3b,_0x962b8c){var _0x4bbf56={'raw':![],'where':{}};var _0x3b8ab6={};var _0x3dd2c1={'count':0x0,'rows':[]};return db[_0x426f('0x55')]['findOne']({'where':{'id':_0x47fe91[_0x426f('0x58')]['id']}})[_0x426f('0x34')](handleEntityNotFound(_0x36dd3b,null))[_0x426f('0x34')](function(_0x2ca242){if(_0x2ca242){_0x3b8ab6[_0x426f('0x3f')]=_['keys'](db[_0x426f('0x6b')][_0x426f('0x3e')]);_0x3b8ab6['query']=_['keys'](_0x47fe91[_0x426f('0x41')]);_0x3b8ab6['filters']=_['intersection'](_0x3b8ab6[_0x426f('0x3f')],_0x3b8ab6['query']);_0x4bbf56[_0x426f('0x44')]=_[_0x426f('0x43')](_0x3b8ab6[_0x426f('0x3f')],qs[_0x426f('0x45')](_0x47fe91[_0x426f('0x41')]['fields']));_0x4bbf56[_0x426f('0x44')]=_0x4bbf56['attributes'][_0x426f('0x46')]?_0x4bbf56[_0x426f('0x44')]:_0x3b8ab6[_0x426f('0x3f')];if(!_0x47fe91[_0x426f('0x41')]['hasOwnProperty']('nolimit')){_0x4bbf56[_0x426f('0x2e')]=qs[_0x426f('0x2e')](_0x47fe91[_0x426f('0x41')]['limit']);_0x4bbf56[_0x426f('0x2d')]=qs[_0x426f('0x2d')](_0x47fe91[_0x426f('0x41')]['offset']);}_0x4bbf56[_0x426f('0x49')]=qs[_0x426f('0x4a')](_0x47fe91[_0x426f('0x41')][_0x426f('0x4a')]);_0x4bbf56[_0x426f('0x52')]=qs[_0x426f('0x42')](_[_0x426f('0x4b')](_0x47fe91[_0x426f('0x41')],_0x3b8ab6['filters']));_0x4bbf56[_0x426f('0x52')]['FaxAccountId']=_0x2ca242['id'];if(_0x47fe91['query'][_0x426f('0x4c')]){_0x4bbf56['where']=_['merge'](_0x4bbf56['where'],{'$or':_['map'](_0x4bbf56[_0x426f('0x44')],function(_0x3c2225){var _0x17ec91={};_0x17ec91[_0x3c2225]={'$like':'%'+_0x47fe91[_0x426f('0x41')][_0x426f('0x4c')]+'%'};return _0x17ec91;})});}_0x4bbf56=_[_0x426f('0x4d')]({},_0x4bbf56,_0x47fe91[_0x426f('0x51')]);return db[_0x426f('0x6b')][_0x426f('0x2c')]({'where':_0x4bbf56['where']})[_0x426f('0x34')](function(_0x380c68){_0x3dd2c1['count']=_0x380c68;if(_0x47fe91['query'][_0x426f('0x53')]){_0x4bbf56[_0x426f('0x54')]=[{'all':!![]}];}return db[_0x426f('0x6b')][_0x426f('0x56')](_0x4bbf56);})[_0x426f('0x34')](function(_0xe1fbab){_0x3dd2c1[_0x426f('0x57')]=_0xe1fbab;return _0x3dd2c1;});}})[_0x426f('0x34')](respondWithFilteredResult(_0x36dd3b,_0x4bbf56))[_0x426f('0x28')](handleError(_0x36dd3b,null));};exports[_0x426f('0x6d')]=function(_0x2a5d8d,_0x4997b5,_0x1079d8){return db[_0x426f('0x55')][_0x426f('0x5a')]({'where':{'id':_0x2a5d8d[_0x426f('0x58')]['id']}})['then'](handleEntityNotFound(_0x4997b5,null))[_0x426f('0x34')](function(_0x2ecfad){if(_0x2ecfad){return _0x2ecfad[_0x426f('0x6d')](_0x2a5d8d['query'][_0x426f('0x6e')]);}})[_0x426f('0x34')](respondWithStatusCode(_0x4997b5,null))[_0x426f('0x28')](handleError(_0x4997b5,null));};exports[_0x426f('0x6f')]=function(_0x4d5be7,_0x1e92f0,_0x3abc02){return db[_0x426f('0x70')][_0x426f('0x5a')]({'where':{'id':_0x4d5be7[_0x426f('0x58')]['id']}})[_0x426f('0x34')](handleEntityNotFound(_0x1e92f0,null))[_0x426f('0x34')](function(_0x16fcd1){if(_0x16fcd1){return _0x16fcd1['addInteraction'](_0x4d5be7['body'][_0x426f('0x6e')],_[_0x426f('0x71')](_0x4d5be7[_0x426f('0x61')],[_0x426f('0x6e'),'id'])||{});}})['then'](respondWithResult(_0x1e92f0,null))[_0x426f('0x28')](handleError(_0x1e92f0,null));};exports[_0x426f('0x72')]=function(_0x1fe30c,_0x45fca7,_0x47f3f0){var _0x2612e5={'raw':![],'where':{}};var _0x507c30={};var _0xc5ba9e={'count':0x0,'rows':[]};return db[_0x426f('0x55')]['findOne']({'where':{'id':_0x1fe30c['params']['id']}})[_0x426f('0x34')](handleEntityNotFound(_0x45fca7,null))[_0x426f('0x34')](function(_0x41aeb8){if(_0x41aeb8){_0x507c30[_0x426f('0x3f')]=_['keys'](db['FaxInteraction'][_0x426f('0x3e')]);_0x507c30[_0x426f('0x41')]=_[_0x426f('0x40')](_0x1fe30c['query']);_0x507c30[_0x426f('0x42')]=_[_0x426f('0x43')](_0x507c30[_0x426f('0x3f')],_0x507c30[_0x426f('0x41')]);_0x2612e5['attributes']=_[_0x426f('0x43')](_0x507c30[_0x426f('0x3f')],qs[_0x426f('0x45')](_0x1fe30c[_0x426f('0x41')]['fields']));_0x2612e5[_0x426f('0x44')]=_0x2612e5['attributes'][_0x426f('0x46')]?_0x2612e5[_0x426f('0x44')]:_0x507c30[_0x426f('0x3f')];if(!_0x1fe30c[_0x426f('0x41')][_0x426f('0x47')]('nolimit')){_0x2612e5[_0x426f('0x2e')]=qs[_0x426f('0x2e')](_0x1fe30c[_0x426f('0x41')][_0x426f('0x2e')]);_0x2612e5[_0x426f('0x2d')]=qs['offset'](_0x1fe30c[_0x426f('0x41')][_0x426f('0x2d')]);}_0x2612e5[_0x426f('0x49')]=qs['sort'](_0x1fe30c['query'][_0x426f('0x4a')]);_0x2612e5[_0x426f('0x52')]=qs[_0x426f('0x42')](_[_0x426f('0x4b')](_0x1fe30c['query'],_0x507c30[_0x426f('0x42')]));_0x2612e5[_0x426f('0x52')]['FaxAccountId']=_0x41aeb8['id'];if(_0x1fe30c[_0x426f('0x41')]['filter']){_0x2612e5[_0x426f('0x52')]=_[_0x426f('0x4d')](_0x2612e5[_0x426f('0x52')],{'$or':_[_0x426f('0x68')](_0x2612e5[_0x426f('0x44')],function(_0x1ce3e2){var _0x3cdcb4={};_0x3cdcb4[_0x1ce3e2]={'$like':'%'+_0x1fe30c[_0x426f('0x41')][_0x426f('0x4c')]+'%'};return _0x3cdcb4;})});}_0x2612e5=_[_0x426f('0x4d')]({},_0x2612e5,_0x1fe30c[_0x426f('0x51')]);return db[_0x426f('0x70')]['count']({'where':_0x2612e5[_0x426f('0x52')]})[_0x426f('0x34')](function(_0x41bdc7){_0xc5ba9e[_0x426f('0x2c')]=_0x41bdc7;if(_0x1fe30c[_0x426f('0x41')][_0x426f('0x53')]){_0x2612e5['include']=[{'model':db[_0x426f('0x73')],'as':_0x426f('0x74'),'required':![]},{'model':db[_0x426f('0x75')],'as':_0x426f('0x76'),'attributes':['name',_0x426f('0x77'),_0x426f('0x78')],'required':![]},{'model':db['Tag'],'as':_0x426f('0x79'),'attributes':['id',_0x426f('0x3b'),_0x426f('0x7a')],'where':_0x1fe30c[_0x426f('0x41')][_0x426f('0x7b')]?{'id':_0x1fe30c['query'][_0x426f('0x7b')]}:undefined,'required':_0x1fe30c['query'][_0x426f('0x7b')]?!![]:![]}];}return db['FaxInteraction'][_0x426f('0x56')](_0x2612e5);})[_0x426f('0x34')](function(_0x34e1d2){_0xc5ba9e[_0x426f('0x57')]=_0x34e1d2;return _0xc5ba9e;});}})[_0x426f('0x34')](respondWithFilteredResult(_0x45fca7,_0x2612e5))[_0x426f('0x28')](handleError(_0x45fca7,null));};exports[_0x426f('0x7c')]=function(_0x37cfd0,_0x153e98,_0x587762){return db[_0x426f('0x55')][_0x426f('0x67')]({'where':{'id':_0x37cfd0['params']['id']}})[_0x426f('0x34')](handleEntityNotFound(_0x153e98,null))['then'](function(_0x182864){if(_0x182864){return db[_0x426f('0x7d')][_0x426f('0x7e')](function(_0x34b9e4){return db[_0x426f('0x7f')][_0x426f('0x35')]({'where':{'FaxAccountId':_0x37cfd0['params']['id']},'transaction':_0x34b9e4})[_0x426f('0x34')](function(_0x9d91a3){var _0x2581b2=_[_0x426f('0x68')](_0x37cfd0[_0x426f('0x61')],function(_0x1d3788){_0x1d3788[_0x426f('0x64')]=_0x37cfd0[_0x426f('0x58')]['id'];return _0x1d3788;});return db[_0x426f('0x7f')][_0x426f('0x80')](_0x2581b2,{'transaction':_0x34b9e4});});})['then'](function(){return db[_0x426f('0x7f')][_0x426f('0x81')]({'where':{'FaxAccountId':_0x37cfd0[_0x426f('0x58')]['id']},'order':_0x426f('0x82')});});}})[_0x426f('0x34')](respondWithResult(_0x153e98,null))['catch'](handleError(_0x153e98,null));};exports['getApplications']=function(_0x359d11,_0x14bfa3,_0x1cc8d4){var _0xf9d20a={};var _0x411c6c={};var _0x531e97;var _0x3a66e4;return db[_0x426f('0x55')][_0x426f('0x67')]({'where':{'id':_0x359d11['params']['id']}})[_0x426f('0x34')](handleEntityNotFound(_0x14bfa3,null))[_0x426f('0x34')](function(_0xb0699b){if(_0xb0699b){_0x531e97=_0xb0699b;_0x411c6c[_0x426f('0x3f')]=_[_0x426f('0x40')](db['FaxApplication'][_0x426f('0x3e')]);_0x411c6c[_0x426f('0x41')]=_[_0x426f('0x40')](_0x359d11[_0x426f('0x41')]);_0x411c6c[_0x426f('0x42')]=_['intersection'](_0x411c6c[_0x426f('0x3f')],_0x411c6c['query']);_0xf9d20a[_0x426f('0x44')]=_['intersection'](_0x411c6c[_0x426f('0x3f')],qs['fields'](_0x359d11[_0x426f('0x41')][_0x426f('0x45')]));_0xf9d20a[_0x426f('0x44')]=_0xf9d20a[_0x426f('0x44')][_0x426f('0x46')]?_0xf9d20a[_0x426f('0x44')]:_0x411c6c[_0x426f('0x3f')];_0xf9d20a[_0x426f('0x49')]=qs['sort'](_0x359d11[_0x426f('0x41')]['sort']);_0xf9d20a[_0x426f('0x52')]=qs[_0x426f('0x42')](_[_0x426f('0x4b')](_0x359d11['query'],_0x411c6c[_0x426f('0x42')]));if(_0x359d11['query'][_0x426f('0x4c')]){_0xf9d20a[_0x426f('0x52')]=_[_0x426f('0x4d')](_0xf9d20a[_0x426f('0x52')],{'$or':_[_0x426f('0x68')](_0xf9d20a[_0x426f('0x44')],function(_0x33297f){var _0x34bede={};_0x34bede[_0x33297f]={'$like':'%'+_0x359d11[_0x426f('0x41')]['filter']+'%'};return _0x34bede;})});}_0xf9d20a=_[_0x426f('0x4d')]({},_0xf9d20a,_0x359d11[_0x426f('0x51')]);return _0x531e97[_0x426f('0x83')](_0xf9d20a);}})[_0x426f('0x34')](function(_0x349700){if(_0x349700){_0x3a66e4=_0x349700[_0x426f('0x46')];if(!_0x359d11['query'][_0x426f('0x47')](_0x426f('0x48'))){_0xf9d20a[_0x426f('0x2e')]=qs['limit'](_0x359d11[_0x426f('0x41')][_0x426f('0x2e')]);_0xf9d20a['offset']=qs['offset'](_0x359d11[_0x426f('0x41')][_0x426f('0x2d')]);}return _0x531e97['getApplications'](_0xf9d20a);}})[_0x426f('0x34')](function(_0x417382){if(_0x417382){return _0x417382?{'count':_0x3a66e4,'rows':_0x417382}:null;}})[_0x426f('0x34')](respondWithResult(_0x14bfa3,null))[_0x426f('0x28')](handleError(_0x14bfa3,null));};function Extension(_0x10bc9,_0x4e8823,_0x12e188,_0x541ab8){this[_0x426f('0x84')]=_0x426f('0x85');this[_0x426f('0x86')]=_0x10bc9['localstationid'];this['app']=_0x541ab8;this[_0x426f('0x4e')]=_0x426f('0x87');this[_0x426f('0x88')]=_0x426f('0x89');this[_0x426f('0x64')]=_0x10bc9['id'];this[_0x426f('0x82')]=_0x4e8823;this['appdata']=_0x12e188;}function createExtensionsReciveFax(_0x336918){var _0x1f0956=0x1;var _0x15c7d6=[];_0x15c7d6['push'](new Extension(_0x336918,_0x1f0956,'','Answer'));_0x1f0956+=0x1;_0x15c7d6['push'](new Extension(_0x336918,_0x1f0956,'CDR(type)=inbound-fax','Set'));_0x1f0956+=0x1;for(var _0x4cda58 in _0x336918){if(_0x336918[_0x426f('0x47')](_0x4cda58)&&(_0x4cda58===_0x426f('0x8a')||_0x4cda58===_0x426f('0x8b')||_0x4cda58==='gateway'||_0x4cda58===_0x426f('0x8c')||_0x4cda58===_0x426f('0x8d')||_0x4cda58===_0x426f('0x8e')||_0x4cda58===_0x426f('0x8f')||_0x4cda58===_0x426f('0x90')||_0x4cda58===_0x426f('0x91'))){_0x15c7d6[_0x426f('0x92')](new Extension(_0x336918,_0x1f0956,_0x426f('0x93')+_0x4cda58+')='+_0x336918[_0x4cda58],_0x426f('0x94')));_0x1f0956+=0x1;}}_0x15c7d6[_0x426f('0x92')](new Extension(_0x336918,_0x1f0956,'6',_0x426f('0x95')));_0x1f0956+=0x1;_0x15c7d6[_0x426f('0x92')](new Extension(_0x336918,_0x1f0956,_0x426f('0x96'),_0x426f('0x97')));_0x1f0956=0x0;return _0x15c7d6;}exports['addAccountApplications']=function(_0x3f33d6,_0xc0b72c,_0x405055){var _0x938197;return db[_0x426f('0x7d')][_0x426f('0x7e')](function(_0x2ae8ac){return db[_0x426f('0x55')][_0x426f('0x5b')](_0x3f33d6['body'],{'transaction':_0x2ae8ac})[_0x426f('0x34')](function(_0x5e5ccf){_0x938197=_0x5e5ccf[_0x426f('0x36')]({'plain':!![]});return db[_0x426f('0x98')][_0x426f('0x80')](createExtensionsReciveFax(_0x938197),{'transaction':_0x2ae8ac});});})['then'](function(){return _0x938197;})[_0x426f('0x34')](respondWithResult(_0xc0b72c,null))['catch'](handleError(_0xc0b72c,null));};exports[_0x426f('0x99')]=function(_0x1786f8,_0x4ff60f,_0x1bd59d){var _0x3292f5;return db[_0x426f('0x7d')]['transaction'](function(_0x2a041e){return db[_0x426f('0x55')][_0x426f('0x33')](_0x1786f8[_0x426f('0x61')],{'where':{'id':_0x1786f8['body']['id']},'transaction':_0x2a041e})[_0x426f('0x34')](function(_0x3bd06b){return db[_0x426f('0x98')][_0x426f('0x35')]({'where':{'FaxAccountId':_0x1786f8[_0x426f('0x61')]['id']},'transaction':_0x2a041e})[_0x426f('0x34')](function(_0xeb314b){return db[_0x426f('0x98')][_0x426f('0x80')](createExtensionsReciveFax(_[_0x426f('0x71')](_0x1786f8['body'],['tech','key',_0x426f('0x9a'),_0x426f('0x9b'),_0x426f('0x9c'),_0x426f('0x9d')])),{'transaction':_0x2a041e});});});})[_0x426f('0x34')](function(){return db[_0x426f('0x55')][_0x426f('0x9e')](_0x1786f8[_0x426f('0x61')]['id']);})[_0x426f('0x34')](respondWithResult(_0x4ff60f,null))[_0x426f('0x28')](handleError(_0x4ff60f,null));};exports[_0x426f('0x9f')]=function(_0x3368c4,_0x3c64d0,_0xadf9a6){var _0x27ed4f={'raw':!![],'where':{}};var _0x10450f={};var _0x2f3628={'count':0x0,'rows':[]};return db[_0x426f('0x55')][_0x426f('0x67')]({'where':{'id':_0x3368c4[_0x426f('0x58')]['id']}})[_0x426f('0x34')](handleEntityNotFound(_0x3c64d0,null))[_0x426f('0x34')](function(_0x2e2f02){if(_0x2e2f02){_0x10450f[_0x426f('0x3f')]=_['keys'](db[_0x426f('0xa0')][_0x426f('0x3e')]);_0x10450f['query']=_[_0x426f('0x40')](_0x3368c4[_0x426f('0x41')]);_0x10450f[_0x426f('0x42')]=_['intersection'](_0x10450f[_0x426f('0x3f')],_0x10450f['query']);_0x27ed4f[_0x426f('0x44')]=_[_0x426f('0x43')](_0x10450f[_0x426f('0x3f')],qs[_0x426f('0x45')](_0x3368c4[_0x426f('0x41')][_0x426f('0x45')]));_0x27ed4f[_0x426f('0x44')]=_0x27ed4f['attributes'][_0x426f('0x46')]?_0x27ed4f[_0x426f('0x44')]:_0x10450f[_0x426f('0x3f')];if(!_0x3368c4['query']['hasOwnProperty']('nolimit')){_0x27ed4f[_0x426f('0x2e')]=qs[_0x426f('0x2e')](_0x3368c4[_0x426f('0x41')][_0x426f('0x2e')]);_0x27ed4f['offset']=qs['offset'](_0x3368c4[_0x426f('0x41')][_0x426f('0x2d')]);}_0x27ed4f[_0x426f('0x49')]=qs[_0x426f('0x4a')](_0x3368c4[_0x426f('0x41')][_0x426f('0x4a')]);_0x27ed4f[_0x426f('0x52')]=qs[_0x426f('0x42')](_['pick'](_0x3368c4['query'],_0x10450f[_0x426f('0x42')]));_0x27ed4f['where'][_0x426f('0x64')]=_0x2e2f02['id'];if(_0x3368c4[_0x426f('0x41')][_0x426f('0x4c')]){_0x27ed4f[_0x426f('0x52')]=_[_0x426f('0x4d')](_0x27ed4f[_0x426f('0x52')],{'$or':_[_0x426f('0x68')](_0x27ed4f[_0x426f('0x44')],function(_0x4883a4){var _0x301c09={};_0x301c09[_0x4883a4]={'$like':'%'+_0x3368c4[_0x426f('0x41')][_0x426f('0x4c')]+'%'};return _0x301c09;})});}if(_0x3368c4['query'][_0x426f('0xa1')]){var _0x547030=_0x3368c4['query']['$gte'][_0x426f('0xa2')](',');var _0x2fb269={};_0x2fb269[_0x547030[0x0]]={'$gte':moment(_0x547030[0x1])[_0x426f('0xa3')](_0x426f('0xa4'))};_0x27ed4f[_0x426f('0x52')]=_['merge'](_0x27ed4f[_0x426f('0x52')],_0x2fb269);}_0x27ed4f=_[_0x426f('0x4d')]({},_0x27ed4f,_0x3368c4['options']);return db[_0x426f('0xa0')][_0x426f('0x2c')]({'where':_0x27ed4f['where']})[_0x426f('0x34')](function(_0x25bf23){_0x2f3628['count']=_0x25bf23;if(_0x3368c4['query'][_0x426f('0x53')]){_0x27ed4f[_0x426f('0x54')]=[{'all':!![]}];}return db[_0x426f('0xa0')][_0x426f('0x56')](_0x27ed4f);})['then'](function(_0x7abafa){_0x2f3628[_0x426f('0x57')]=_0x7abafa;return _0x2f3628;});}})[_0x426f('0x34')](respondWithFilteredResult(_0x3c64d0,_0x27ed4f))[_0x426f('0x28')](handleError(_0x3c64d0,null));};exports['send']=function(_0x1651dc,_0x5cd640,_0xe1e5ba){var _0x5cd30c,_0x29c316={},_0x34b726;if(_0x1651dc[_0x426f('0x61')]['to']){_0x34b726=_0x1651dc[_0x426f('0x61')]['to'][0x0];}return db[_0x426f('0x55')]['find']({'where':{'id':_0x1651dc['params']['id']},'include':[{'model':db[_0x426f('0xa5')],'as':_0x426f('0xa6'),'include':[{'model':db[_0x426f('0x73')],'as':_0x426f('0xa7'),'where':{'fax':_0x34b726},'limit':0x1,'order':[[_0x426f('0x9b'),_0x426f('0xa8')]]}]}]})['then'](handleEntityNotFound(_0x5cd640,null))['then'](function(_0x385725){_0x5cd30c=_0x385725;if(_0x1651dc['body']['attachments']&&_0x1651dc['body'][_0x426f('0xa9')][_0x426f('0x46')]){for(var _0x2a6a78=0x0;_0x2a6a78<_0x1651dc['body'][_0x426f('0xa9')][_0x426f('0x46')];_0x2a6a78+=0x1){_0x1651dc[_0x426f('0x61')][_0x426f('0xa9')][_0x2a6a78]={'filename':_0x1651dc[_0x426f('0x61')][_0x426f('0xa9')][_0x2a6a78][_0x426f('0x3b')],'id':_0x1651dc['body'][_0x426f('0xa9')][_0x2a6a78]['id'],'path':path[_0x426f('0xaa')](config[_0x426f('0xab')],'server/files/attachments',_0x1651dc[_0x426f('0x61')]['attachments'][_0x2a6a78][_0x426f('0xac')])};}}return respondWithRpcPromise(_0x426f('0xad'),'CheckAfterSend',{'FaxAccountId':_[_0x426f('0xae')](_0x1651dc[_0x426f('0x58')]['id'])?undefined:_0x1651dc[_0x426f('0x58')]['id'],'path':_[_0x426f('0xae')](_0x1651dc[_0x426f('0x61')][_0x426f('0xa9')][0x0][_0x426f('0x6')])?undefined:_0x1651dc[_0x426f('0x61')]['attachments'][0x0]['path'],'fax':_[_0x426f('0xae')](_0x1651dc['body']['to'][0x0])?undefined:_0x1651dc['body']['to'][0x0]},client9002);})[_0x426f('0x34')](function(){if(_0x5cd30c){if(_['isNil'](_0x1651dc[_0x426f('0x61')]['from'])){_0x1651dc[_0x426f('0x61')]['from']=util[_0x426f('0xa3')](_0x426f('0xaf'),_0x5cd30c[_0x426f('0x3b')],_0x5cd30c[_0x426f('0xb0')]);}if(_0x5cd30c[_0x426f('0xa6')]){if(_0x5cd30c[_0x426f('0xa6')][_0x426f('0xa7')][_0x426f('0x46')]){return _0x5cd30c[_0x426f('0xa6')][_0x426f('0xa7')][0x0];}else{return db[_0x426f('0x73')][_0x426f('0x5b')](_[_0x426f('0xb1')](_0x1651dc['body'],{'firstName':_0x1651dc[_0x426f('0x61')]['to'][0x0],'phone':_0x1651dc[_0x426f('0x61')]['to'][0x0],'fax':_0x1651dc[_0x426f('0x61')]['to'][0x0],'ListId':_0x5cd30c[_0x426f('0x9d')]}));}}else{throw new Error(_0x426f('0xb2'));}}else{throw new Error(_0x426f('0xb3'));}})['then'](function(_0x44943a){if(_0x44943a){return db[_0x426f('0x70')]['find']({'where':{'ContactId':_0x44943a['id'],'closed':![],'FaxAccountId':_0x5cd30c['id']}})[_0x426f('0x34')](function(_0x47c0a6){if(_0x47c0a6){return[_0x47c0a6,![]];}return db[_0x426f('0x70')][_0x426f('0x5b')]({'UserId':_0x1651dc[_0x426f('0x5c')]['id'],'ContactId':_0x44943a['id'],'FaxAccountId':_0x5cd30c['id'],'fax':_0x1651dc[_0x426f('0x61')]['to'][0x0],'firstMsgDirection':_0x426f('0xb4'),'Messages':[_[_0x426f('0x4d')](_0x1651dc[_0x426f('0x61')],{'read':![],'body':_0x1651dc[_0x426f('0x61')]['attachments'][0x0]['filename'],'FaxAccountId':_0x5cd30c['id'],'UserId':_0x1651dc['user']['id'],'ContactId':_0x44943a['id'],'AttachmentId':_0x1651dc['body'][_0x426f('0xa9')][0x0]['id']})]},{'include':[{'model':db[_0x426f('0xa0')],'as':'Messages'}]})[_0x426f('0x34')](function(_0x2aa570){return[_0x2aa570,!![]];});});}else{throw new Error(_0x426f('0xb5'));}})[_0x426f('0xb6')](function(_0x52d1c3,_0xae7c4c){if(_0xae7c4c){return _0x52d1c3;}return db[_0x426f('0xa0')]['create']({'direction':_0x426f('0xb4'),'read':![],'body':_0x1651dc['body'][_0x426f('0xa9')][0x0]['filename'],'FaxAccountId':_0x5cd30c['id'],'FaxInteractionId':_0x52d1c3['id'],'UserId':_0x1651dc[_0x426f('0x5c')]['id'],'ContactId':_0x52d1c3[_0x426f('0xb7')],'AttachmentId':_0x1651dc[_0x426f('0x61')][_0x426f('0xa9')][0x0]['id']})[_0x426f('0x34')](function(_0x1788b8){_0x52d1c3[_0x426f('0xb8')][_0x426f('0xb9')]=[];_0x52d1c3[_0x426f('0xb8')]['Messages'][_0x426f('0x92')](_0x1788b8[_0x426f('0xb8')]);return _0x52d1c3;});})[_0x426f('0x34')](function(_0x18a6ff){respondWithRpcPromise('SendFax',_0x426f('0xba'),{'FaxAccountId':_[_0x426f('0xae')](_0x1651dc['params']['id'])?undefined:_0x1651dc[_0x426f('0x58')]['id'],'path':_[_0x426f('0xae')](_0x1651dc[_0x426f('0x61')][_0x426f('0xa9')][0x0][_0x426f('0x6')])?undefined:_0x1651dc['body'][_0x426f('0xa9')][0x0][_0x426f('0x6')],'fax':_['isNil'](_0x1651dc[_0x426f('0x61')]['to'][0x0])?undefined:_0x1651dc[_0x426f('0x61')]['to'][0x0],'AttachmentId':_0x1651dc[_0x426f('0x61')][_0x426f('0xa9')][0x0]['id']},client9002)[_0x426f('0x34')](function(_0x58b4cb){logger[_0x426f('0x20')](_0x426f('0xbb'),_0x58b4cb);})[_0x426f('0x28')](function(_0x21bd52){logger['info'](_0x426f('0xbb'),_0x21bd52);});return _0x18a6ff;})['then'](respondWithResult(_0x5cd640,null))[_0x426f('0x28')](handleError(_0x5cd640,null));};exports[_0x426f('0xbc')]=function(_0x3d32b6,_0x36781e,_0x3982a6){return db['FaxAccount'][_0x426f('0x5a')]({'where':{'id':_0x3d32b6['params']['id']}})['then'](handleEntityNotFound(_0x36781e,null))[_0x426f('0x34')](function(_0x5c03d3){if(_0x5c03d3){return _0x5c03d3['addAgents'](_0x3d32b6[_0x426f('0x61')][_0x426f('0x6e')],_[_0x426f('0x71')](_0x3d32b6[_0x426f('0x61')],[_0x426f('0x6e'),'id'])||{})['spread'](function(_0x3e3854){for(var _0x5d0a7d=0x0;_0x5d0a7d<_0x3d32b6[_0x426f('0x61')][_0x426f('0x6e')]['length'];_0x5d0a7d+=0x1){socket[_0x426f('0xbd')](_0x426f('0xbe'),{'UserId':_0x3d32b6[_0x426f('0x61')][_0x426f('0x6e')][_0x5d0a7d],'FaxAccountId':_0x3d32b6[_0x426f('0x58')]['id']});}return _0x3e3854;});}})['then'](respondWithResult(_0x36781e,null))['catch'](handleError(_0x36781e,null));};exports[_0x426f('0xbf')]=function(_0x5ab302,_0x46263c,_0x56c7c9){return db['FaxAccount'][_0x426f('0x5a')]({'where':{'id':_0x5ab302[_0x426f('0x58')]['id']}})[_0x426f('0x34')](handleEntityNotFound(_0x46263c,null))[_0x426f('0x34')](function(_0x122689){if(_0x122689){return _0x122689['removeAgents'](_0x5ab302['query']['ids'])[_0x426f('0x34')](function(){if(_[_0x426f('0xc0')](_0x5ab302[_0x426f('0x41')]['ids'])){for(var _0x3dc593=0x0;_0x3dc593<_0x5ab302['query'][_0x426f('0x6e')][_0x426f('0x46')];_0x3dc593+=0x1){socket[_0x426f('0xbd')](_0x426f('0xc1'),{'UserId':Number(_0x5ab302[_0x426f('0x41')]['ids'][_0x3dc593]),'FaxAccountId':Number(_0x5ab302['params']['id'])});}}else{socket[_0x426f('0xbd')](_0x426f('0xc1'),{'UserId':Number(_0x5ab302[_0x426f('0x41')][_0x426f('0x6e')]),'FaxAccountId':Number(_0x5ab302['params']['id'])});}});}})[_0x426f('0x34')](respondWithStatusCode(_0x46263c,null))[_0x426f('0x28')](handleError(_0x46263c,null));};exports['getAgents']=function(_0x2eb6ef,_0x27958b,_0xb31ffa){var _0x26a911={};var _0x47eb06={};var _0xfd7157;var _0x163cdc;return db[_0x426f('0x55')]['findOne']({'where':{'id':_0x2eb6ef[_0x426f('0x58')]['id']}})[_0x426f('0x34')](handleEntityNotFound(_0x27958b,null))[_0x426f('0x34')](function(_0x5bb38c){if(_0x5bb38c){_0xfd7157=_0x5bb38c;_0x47eb06[_0x426f('0x3f')]=_[_0x426f('0x40')](db[_0x426f('0x75')][_0x426f('0x3e')]);_0x47eb06[_0x426f('0x41')]=_[_0x426f('0x40')](_0x2eb6ef[_0x426f('0x41')]);_0x47eb06[_0x426f('0x42')]=_[_0x426f('0x43')](_0x47eb06[_0x426f('0x3f')],_0x47eb06[_0x426f('0x41')]);_0x26a911[_0x426f('0x44')]=_['intersection'](_0x47eb06[_0x426f('0x3f')],qs[_0x426f('0x45')](_0x2eb6ef[_0x426f('0x41')][_0x426f('0x45')]));_0x26a911['attributes']=_0x26a911[_0x426f('0x44')][_0x426f('0x46')]?_0x26a911[_0x426f('0x44')]:_0x47eb06[_0x426f('0x3f')];_0x26a911[_0x426f('0x49')]=qs[_0x426f('0x4a')](_0x2eb6ef['query'][_0x426f('0x4a')]);_0x26a911['where']=qs[_0x426f('0x42')](_[_0x426f('0x4b')](_0x2eb6ef[_0x426f('0x41')],_0x47eb06['filters']));if(_0x2eb6ef[_0x426f('0x41')][_0x426f('0x4c')]){_0x26a911[_0x426f('0x52')]=_[_0x426f('0x4d')](_0x26a911[_0x426f('0x52')],{'$or':_['map'](_0x26a911[_0x426f('0x44')],function(_0x36d719){var _0x4acf4a={};_0x4acf4a[_0x36d719]={'$like':'%'+_0x2eb6ef[_0x426f('0x41')]['filter']+'%'};return _0x4acf4a;})});}_0x26a911=_[_0x426f('0x4d')]({},_0x26a911,_0x2eb6ef[_0x426f('0x51')]);return _0xfd7157['getAgents'](_0x26a911);}})[_0x426f('0x34')](function(_0x5b144b){if(_0x5b144b){_0x163cdc=_0x5b144b[_0x426f('0x46')];if(!_0x2eb6ef[_0x426f('0x41')]['hasOwnProperty'](_0x426f('0x48'))){_0x26a911[_0x426f('0x2e')]=qs['limit'](_0x2eb6ef[_0x426f('0x41')][_0x426f('0x2e')]);_0x26a911[_0x426f('0x2d')]=qs[_0x426f('0x2d')](_0x2eb6ef[_0x426f('0x41')][_0x426f('0x2d')]);}return _0xfd7157[_0x426f('0xc2')](_0x26a911);}})['then'](function(_0x307828){if(_0x307828){return _0x307828?{'count':_0x163cdc,'rows':_0x307828}:null;}})[_0x426f('0x34')](respondWithResult(_0x27958b,null))[_0x426f('0x28')](handleError(_0x27958b,null));};
\ No newline at end of file
index 73f94cf..0987e26 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa2fb=['events','FaxAccount','setMaxListeners','save','update','remove','emit','hasOwnProperty'];(function(_0xac151d,_0x4ea1d2){var _0x111dba=function(_0x13d7f4){while(--_0x13d7f4){_0xac151d['push'](_0xac151d['shift']());}};_0x111dba(++_0x4ea1d2);}(_0xa2fb,0x1a8));var _0xba2f=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xa2fb[_0x14add3];return _0x4a174f;};'use strict';var EventEmitter=require(_0xba2f('0x0'));var FaxAccount=require('../../mysqldb')['db'][_0xba2f('0x1')];var FaxAccountEvents=new EventEmitter();FaxAccountEvents[_0xba2f('0x2')](0x0);var events={'afterCreate':_0xba2f('0x3'),'afterUpdate':_0xba2f('0x4'),'afterDestroy':_0xba2f('0x5')};function emitEvent(_0x1fc9ca){return function(_0x22409d,_0x2d1d0b,_0x465860){FaxAccountEvents[_0xba2f('0x6')](_0x1fc9ca+':'+_0x22409d['id'],_0x22409d);FaxAccountEvents['emit'](_0x1fc9ca,_0x22409d);_0x465860(null);};}for(var e in events){if(events[_0xba2f('0x7')](e)){var event=events[e];FaxAccount['hook'](e,emitEvent(event));}}module['exports']=FaxAccountEvents;
\ No newline at end of file
+var _0x6196=['events','FaxAccount','setMaxListeners','update','emit','hasOwnProperty','hook'];(function(_0x580576,_0x2f107d){var _0x3f55a0=function(_0x2e180b){while(--_0x2e180b){_0x580576['push'](_0x580576['shift']());}};_0x3f55a0(++_0x2f107d);}(_0x6196,0xfc));var _0x6619=function(_0x47bbcf,_0x33ce5e){_0x47bbcf=_0x47bbcf-0x0;var _0x10f7b7=_0x6196[_0x47bbcf];return _0x10f7b7;};'use strict';var EventEmitter=require(_0x6619('0x0'));var FaxAccount=require('../../mysqldb')['db'][_0x6619('0x1')];var FaxAccountEvents=new EventEmitter();FaxAccountEvents[_0x6619('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':_0x6619('0x3'),'afterDestroy':'remove'};function emitEvent(_0x1401cc){return function(_0x4acbc4,_0x48acba,_0x24af04){FaxAccountEvents[_0x6619('0x4')](_0x1401cc+':'+_0x4acbc4['id'],_0x4acbc4);FaxAccountEvents[_0x6619('0x4')](_0x1401cc,_0x4acbc4);_0x24af04(null);};}for(var e in events){if(events[_0x6619('0x5')](e)){var event=events[e];FaxAccount[_0x6619('0x6')](e,emitEvent(event));}}module['exports']=FaxAccountEvents;
\ No newline at end of file
index ba0b8db..2199a24 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe3ab=['bluebird','rimraf','../../config/environment','./faxAccount.attributes','exports','define','FaxAccount','fax_accounts','lodash','util','../../config/logger','api','moment'];(function(_0x52be73,_0x1b4cbd){var _0x26f66a=function(_0x4d56e0){while(--_0x4d56e0){_0x52be73['push'](_0x52be73['shift']());}};_0x26f66a(++_0x1b4cbd);}(_0xe3ab,0x181));var _0xbe3a=function(_0x5b114b,_0x58d78e){_0x5b114b=_0x5b114b-0x0;var _0x55fb49=_0xe3ab[_0x5b114b];return _0x55fb49;};'use strict';var _=require(_0xbe3a('0x0'));var util=require(_0xbe3a('0x1'));var logger=require(_0xbe3a('0x2'))(_0xbe3a('0x3'));var moment=require(_0xbe3a('0x4'));var BPromise=require(_0xbe3a('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0xbe3a('0x6'));var config=require(_0xbe3a('0x7'));var attributes=require(_0xbe3a('0x8'));module[_0xbe3a('0x9')]=function(_0x13116d,_0xb5632d){return _0x13116d[_0xbe3a('0xa')](_0xbe3a('0xb'),attributes,{'tableName':_0xbe3a('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x26bb=['define','FaxAccount','lodash','util','api','bluebird','request-promise','path','../../config/environment','./faxAccount.attributes'];(function(_0x28a3d2,_0xa20401){var _0x2a3494=function(_0x5341e2){while(--_0x5341e2){_0x28a3d2['push'](_0x28a3d2['shift']());}};_0x2a3494(++_0xa20401);}(_0x26bb,0x8e));var _0xb26b=function(_0x3c3e37,_0x328f11){_0x3c3e37=_0x3c3e37-0x0;var _0x547fe1=_0x26bb[_0x3c3e37];return _0x547fe1;};'use strict';var _=require(_0xb26b('0x0'));var util=require(_0xb26b('0x1'));var logger=require('../../config/logger')(_0xb26b('0x2'));var moment=require('moment');var BPromise=require(_0xb26b('0x3'));var rp=require(_0xb26b('0x4'));var fs=require('fs');var path=require(_0xb26b('0x5'));var rimraf=require('rimraf');var config=require(_0xb26b('0x6'));var attributes=require(_0xb26b('0x7'));module['exports']=function(_0x55a597,_0x1f14bd){return _0x55a597[_0xb26b('0x8')](_0xb26b('0x9'),attributes,{'tableName':'fax_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 743233c..50e8547 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7d0e=['client','http','redis','defaults','localhost','register','request','then','info','FaxAccount,\x20%s,\x20%s','request\x20sent','debug','error','message','result','GetFaxAccount','FaxAccount','findAll','raw','options','where','attributes','limit','include','map','model','catch','NotifyFaxAccount','CmContact','describe','Sequelize','ValidationError','no\x20available\x20attributes','difference','keys','createdAt','updatedAt','CompanyId','body','from','from\x20is\x20mandatory','isNil','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','find','account','CmList','List','Contacts','DESC','applications','Applications','orderBy','priority','ListId','create','contact','fax','FaxInteraction','Contact\x20not\x20found','spread','get','autoclose','unmanaged','*,*,*,*','created','interaction','UserId','User','name','unshift','agent','waitForTheAssignedAgent','Start','startRouting','lodash','moment','ioredis','../../config/utils','rpc','jayson/promise'];(function(_0x5af579,_0x2503e4){var _0x1af24b=function(_0x3433c4){while(--_0x3433c4){_0x5af579['push'](_0x5af579['shift']());}};_0x1af24b(++_0x2503e4);}(_0x7d0e,0x1f2));var _0xe7d0=function(_0x4a746b,_0x550aea){_0x4a746b=_0x4a746b-0x0;var _0x2d04ec=_0x7d0e[_0x4a746b];return _0x2d04ec;};'use strict';var _=require(_0xe7d0('0x0'));var util=require('util');var moment=require(_0xe7d0('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xe7d0('0x2'));var db=require('../../mysqldb')['db'];var utils=require(_0xe7d0('0x3'));var logger=require('../../config/logger')(_0xe7d0('0x4'));var config=require('../../config/environment');var jayson=require(_0xe7d0('0x5'));var client=jayson[_0xe7d0('0x6')][_0xe7d0('0x7')]({'port':0x232c});config[_0xe7d0('0x8')]=_[_0xe7d0('0x9')](config[_0xe7d0('0x8')],{'host':_0xe7d0('0xa'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require('./faxAccount.socket')[_0xe7d0('0xb')](socket);function respondWithRpcPromise(_0x98f3a5,_0xd7d597,_0x368e4f){return new BPromise(function(_0x63d18a,_0x289b24){return client[_0xe7d0('0xc')](_0x98f3a5,_0x368e4f)[_0xe7d0('0xd')](function(_0x36b4e4){logger[_0xe7d0('0xe')](_0xe7d0('0xf'),_0xd7d597,_0xe7d0('0x10'));logger[_0xe7d0('0x11')]('FaxAccount,\x20%s,\x20%s,\x20%s',_0xd7d597,_0xe7d0('0x10'),JSON['stringify'](_0x36b4e4));if(_0x36b4e4[_0xe7d0('0x12')]){if(_0x36b4e4[_0xe7d0('0x12')]['code']===0x1f4){logger[_0xe7d0('0x12')](_0xe7d0('0xf'),_0xd7d597,_0x36b4e4['error'][_0xe7d0('0x13')]);return _0x289b24(_0x36b4e4[_0xe7d0('0x12')][_0xe7d0('0x13')]);}logger[_0xe7d0('0x12')]('FaxAccount,\x20%s,\x20%s',_0xd7d597,_0x36b4e4[_0xe7d0('0x12')][_0xe7d0('0x13')]);return _0x63d18a(_0x36b4e4['error'][_0xe7d0('0x13')]);}else{logger['info'](_0xe7d0('0xf'),_0xd7d597,_0xe7d0('0x10'));_0x63d18a(_0x36b4e4[_0xe7d0('0x14')][_0xe7d0('0x13')]);}})['catch'](function(_0x33f4c4){logger[_0xe7d0('0x12')](_0xe7d0('0xf'),_0xd7d597,_0x33f4c4);_0x289b24(_0x33f4c4);});});}exports[_0xe7d0('0x15')]=function(_0x261e44){var _0x3a6cec=this;return new Promise(function(_0x174ced,_0x35621a){return db[_0xe7d0('0x16')][_0xe7d0('0x17')]({'raw':_0x261e44['options']?_0x261e44['options'][_0xe7d0('0x18')]===undefined?!![]:![]:!![],'where':_0x261e44[_0xe7d0('0x19')]?_0x261e44[_0xe7d0('0x19')][_0xe7d0('0x1a')]||null:null,'attributes':_0x261e44['options']?_0x261e44['options'][_0xe7d0('0x1b')]||null:null,'limit':_0x261e44['options']?_0x261e44[_0xe7d0('0x19')][_0xe7d0('0x1c')]||null:null,'include':_0x261e44[_0xe7d0('0x19')]?_0x261e44[_0xe7d0('0x19')][_0xe7d0('0x1d')]?_[_0xe7d0('0x1e')](_0x261e44[_0xe7d0('0x19')][_0xe7d0('0x1d')],function(_0x1ef236){return{'model':db[_0x1ef236[_0xe7d0('0x1f')]],'as':_0x1ef236['as'],'attributes':_0x1ef236[_0xe7d0('0x1b')],'include':_0x1ef236[_0xe7d0('0x1d')]?_[_0xe7d0('0x1e')](_0x1ef236[_0xe7d0('0x1d')],function(_0x12b062){return{'model':db[_0x12b062[_0xe7d0('0x1f')]],'as':_0x12b062['as'],'attributes':_0x12b062[_0xe7d0('0x1b')],'include':_0x12b062[_0xe7d0('0x1d')]?_['map'](_0x12b062['include'],function(_0x103e78){return{'model':db[_0x103e78[_0xe7d0('0x1f')]],'as':_0x103e78['as'],'attributes':_0x103e78[_0xe7d0('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xe7d0('0xd')](function(_0x3e8edb){logger[_0xe7d0('0xe')](_0xe7d0('0x15'),_0x261e44);logger[_0xe7d0('0x11')]('GetFaxAccount',_0x261e44,JSON['stringify'](_0x3e8edb));_0x174ced(_0x3e8edb);})[_0xe7d0('0x20')](function(_0x318488){logger['error'](_0xe7d0('0x15'),_0x318488[_0xe7d0('0x13')],_0x261e44);_0x35621a(_0x3a6cec[_0xe7d0('0x12')](0x1f4,_0x318488[_0xe7d0('0x13')]));});});};exports[_0xe7d0('0x21')]=function(_0x2f0d30,_0x4d13f9,_0x113ec1){var _0x322954=this;return new Promise(function(_0x5bb6fc,_0x2c839f){var _0x1828c0={'body':_0x2f0d30['body'],'channel':'fax'};var _0x24f32c=[];var _0xdcfc7f=[];var _0x21dd81={};return db[_0xe7d0('0x22')][_0xe7d0('0x23')]()['then'](function(_0x28b820){if(!_0x28b820){throw new db[(_0xe7d0('0x24'))][(_0xe7d0('0x25'))](_0xe7d0('0x26'));}_0x24f32c=_[_0xe7d0('0x27')](_[_0xe7d0('0x28')](_0x28b820),[_0xe7d0('0x29'),'updatedAt']);_0xdcfc7f=_[_0xe7d0('0x27')](_[_0xe7d0('0x28')](_0x28b820),[_0xe7d0('0x29'),_0xe7d0('0x2a'),_0xe7d0('0x2b'),'ListId']);if(_0x2f0d30[_0xe7d0('0x2c')]['id']){delete _0x2f0d30[_0xe7d0('0x2c')]['id'];}if(_['isNil'](_0x2f0d30[_0xe7d0('0x2c')][_0xe7d0('0x2d')])){throw new db[(_0xe7d0('0x24'))]['ValidationError'](_0xe7d0('0x2e'));}if(_[_0xe7d0('0x2f')](_0x2f0d30[_0xe7d0('0x2c')][_0xe7d0('0x2c')])||_0x2f0d30[_0xe7d0('0x2c')][_0xe7d0('0x2c')]===''){throw new db['Sequelize'][(_0xe7d0('0x25'))](_0xe7d0('0x30'));}if(_[_0xe7d0('0x2f')](_0x2f0d30[_0xe7d0('0x2c')][_0xe7d0('0x31')])){throw new db['Sequelize'][(_0xe7d0('0x25'))](_0xe7d0('0x32')+_0xdcfc7f);}if(!_[_0xe7d0('0x33')](_0xdcfc7f,_0x2f0d30['body'][_0xe7d0('0x31')])){throw new db[(_0xe7d0('0x24'))][(_0xe7d0('0x25'))](_0xe7d0('0x34')+_0xdcfc7f);}_0x21dd81[_0x2f0d30[_0xe7d0('0x2c')][_0xe7d0('0x31')]]=_0x2f0d30[_0xe7d0('0x2c')][_0xe7d0('0x2d')];})[_0xe7d0('0xd')](function(){return db[_0xe7d0('0x16')][_0xe7d0('0x35')]({'where':{'id':_0x2f0d30[_0xe7d0('0x36')]['id']},'include':[{'model':db[_0xe7d0('0x37')],'as':_0xe7d0('0x38'),'include':[{'model':db[_0xe7d0('0x22')],'as':_0xe7d0('0x39'),'where':_0x21dd81,'limit':0x1,'order':[['updatedAt',_0xe7d0('0x3a')]]}]},{'model':db['FaxApplication'],'as':'Applications'}]});})[_0xe7d0('0xd')](function(_0x1ccd82){if(_0x1ccd82&&_0x1ccd82[_0xe7d0('0x38')]){var _0x495d99=_0x1ccd82['get']({'plain':!![]});_0x1828c0[_0xe7d0('0x36')]=_0x495d99;_0x1828c0[_0xe7d0('0x3b')]=_0x495d99[_0xe7d0('0x3c')];_0x1828c0['list']=_0x495d99[_0xe7d0('0x38')];_0x1828c0[_0xe7d0('0x3b')]=_[_0xe7d0('0x3d')](_0x1828c0[_0xe7d0('0x3b')],[_0xe7d0('0x3e')],['asc']);if(_0x1828c0[_0xe7d0('0x36')][_0xe7d0('0x3c')]){delete _0x1828c0[_0xe7d0('0x36')]['Applications'];}if(_0x1828c0[_0xe7d0('0x36')][_0xe7d0('0x38')]&&_0x1828c0['account'][_0xe7d0('0x38')]['Contacts']['length']){return _0x1828c0['account']['List']['Contacts'][0x0];}var _0x533b42=_[_0xe7d0('0x9')](_0x2f0d30[_0xe7d0('0x2c')],{'firstName':_0x2f0d30['body'][_0xe7d0('0x2d')],'ListId':_0x495d99[_0xe7d0('0x3f')]});_0x533b42[_0x2f0d30[_0xe7d0('0x2c')][_0xe7d0('0x31')]]=_0x2f0d30[_0xe7d0('0x2c')][_0xe7d0('0x2d')];return db[_0xe7d0('0x22')][_0xe7d0('0x40')](_0x533b42,{'fields':_0x24f32c,'raw':!![]});}})[_0xe7d0('0xd')](function(_0x35d0a9){_0x1828c0[_0xe7d0('0x41')]=_0x35d0a9;if(_0x35d0a9){var _0xd85fd8={'ContactId':_0x35d0a9['id'],'FaxAccountId':_0x2f0d30['account']['id'],'fax':_0x35d0a9[_0xe7d0('0x42')]};return db[_0xe7d0('0x43')][_0xe7d0('0x35')]({'where':{'ContactId':_0x35d0a9['id'],'closed':![],'FaxAccountId':_0x2f0d30[_0xe7d0('0x36')]['id']}})['then'](function(_0x3d5f11){if(_0x3d5f11){return[_0x3d5f11,![]];}return db[_0xe7d0('0x43')]['create'](_0xd85fd8)[_0xe7d0('0xd')](function(_0x1a5caa){return[_0x1a5caa,!![]];});});}else{throw new Error(_0xe7d0('0x44'));}})[_0xe7d0('0x45')](function(_0x4f539c,_0x19045c){var _0x45f4dc=_0x4f539c[_0xe7d0('0x46')]({'plain':!![]});if(_0x19045c){if(_0x1828c0[_0xe7d0('0x36')][_0xe7d0('0x47')]){_0x1828c0[_0xe7d0('0x3b')]['push']({'id':0x0,'priority':_0x1828c0['applications']['length']+0x1,'app':'close','appdata':_0xe7d0('0x48'),'interval':_0xe7d0('0x49')});}_0x45f4dc[_0xe7d0('0x4a')]=!![];}else{_0x45f4dc['created']=![];}_0x1828c0[_0xe7d0('0x4b')]=_0x45f4dc;return db['FaxMessage']['create']({'body':_0x2f0d30[_0xe7d0('0x2c')][_0xe7d0('0x2c')],'FaxAccountId':_0x2f0d30[_0xe7d0('0x36')]['id'],'FaxInteractionId':_0x4f539c['id'],'direction':'in','ContactId':_0x4f539c['ContactId'],'AttachmentId':_0x2f0d30[_0xe7d0('0x2c')]['AttachmentId']});})['then'](function(_0x27e1fc){_0x1828c0[_0xe7d0('0x13')]=_0x27e1fc;if(_0x1828c0['interaction'][_0xe7d0('0x4c')]){return db[_0xe7d0('0x4d')]['find']({'attributes':['id',_0xe7d0('0x4e')],'where':{'id':_0x1828c0[_0xe7d0('0x4b')]['UserId']}})[_0xe7d0('0xd')](function(_0x50d8c9){if(_0x50d8c9){_0x1828c0['applications'][_0xe7d0('0x4f')]({'id':0x0,'priority':0x0,'app':_0xe7d0('0x50'),'appdata':_0x50d8c9[_0xe7d0('0x4e')]+','+(_0x1828c0['account'][_0xe7d0('0x51')]||0xa),'interval':_0xe7d0('0x49')});}return respondWithRpcPromise(_0xe7d0('0x52'),_0xe7d0('0x53'),_0x1828c0);});}return respondWithRpcPromise(_0xe7d0('0x52'),_0xe7d0('0x53'),_0x1828c0);})['then'](function(_0x366372){_0x5bb6fc(_0x366372);})['catch'](function(_0x1e6b49){_0x2c839f(_0x322954[_0xe7d0('0x12')](0x1f4,_0x1e6b49['message']));});});};
\ No newline at end of file
+var _0x035c=['ValidationError','no\x20available\x20attributes','difference','createdAt','CompanyId','body','from','from\x20is\x20mandatory','isNil','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','find','account','List','updatedAt','DESC','FaxApplication','Applications','get','applications','list','orderBy','priority','asc','Contacts','length','defaults','ListId','create','contact','FaxInteraction','Contact\x20not\x20found','autoclose','push','close','created','interaction','FaxMessage','ContactId','AttachmentId','UserId','name','unshift','agent','waitForTheAssignedAgent','*,*,*,*','Start','startRouting','lodash','util','randomstring','ioredis','../../config/logger','rpc','../../config/environment','client','http','redis','socket.io-emitter','./faxAccount.socket','request','then','info','request\x20sent','debug','stringify','error','code','message','FaxAccount,\x20%s,\x20%s','result','FaxAccount','options','raw','attributes','limit','include','model','map','GetFaxAccount','catch','NotifyFaxAccount','fax','CmContact','Sequelize'];(function(_0x292f35,_0x72e859){var _0x288e75=function(_0x1bba68){while(--_0x1bba68){_0x292f35['push'](_0x292f35['shift']());}};_0x288e75(++_0x72e859);}(_0x035c,0x87));var _0xc035=function(_0x4989d4,_0x2173ae){_0x4989d4=_0x4989d4-0x0;var _0x562420=_0x035c[_0x4989d4];return _0x562420;};'use strict';var _=require(_0xc035('0x0'));var util=require(_0xc035('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xc035('0x2'));var fs=require('fs');var Redis=require(_0xc035('0x3'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xc035('0x4'))(_0xc035('0x5'));var config=require(_0xc035('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xc035('0x7')][_0xc035('0x8')]({'port':0x232c});config[_0xc035('0x9')]=_['defaults'](config[_0xc035('0x9')],{'host':'localhost','port':0x18eb});var socket=require(_0xc035('0xa'))(new Redis(config['redis']));require(_0xc035('0xb'))['register'](socket);function respondWithRpcPromise(_0x24e746,_0x3b5f20,_0x4128e8){return new BPromise(function(_0x246cd5,_0x7b0ac5){return client[_0xc035('0xc')](_0x24e746,_0x4128e8)[_0xc035('0xd')](function(_0xe3bbca){logger[_0xc035('0xe')]('FaxAccount,\x20%s,\x20%s',_0x3b5f20,_0xc035('0xf'));logger[_0xc035('0x10')]('FaxAccount,\x20%s,\x20%s,\x20%s',_0x3b5f20,'request\x20sent',JSON[_0xc035('0x11')](_0xe3bbca));if(_0xe3bbca['error']){if(_0xe3bbca[_0xc035('0x12')][_0xc035('0x13')]===0x1f4){logger[_0xc035('0x12')]('FaxAccount,\x20%s,\x20%s',_0x3b5f20,_0xe3bbca[_0xc035('0x12')][_0xc035('0x14')]);return _0x7b0ac5(_0xe3bbca[_0xc035('0x12')]['message']);}logger[_0xc035('0x12')](_0xc035('0x15'),_0x3b5f20,_0xe3bbca[_0xc035('0x12')][_0xc035('0x14')]);return _0x246cd5(_0xe3bbca[_0xc035('0x12')]['message']);}else{logger[_0xc035('0xe')]('FaxAccount,\x20%s,\x20%s',_0x3b5f20,_0xc035('0xf'));_0x246cd5(_0xe3bbca[_0xc035('0x16')][_0xc035('0x14')]);}})['catch'](function(_0x5af500){logger[_0xc035('0x12')](_0xc035('0x15'),_0x3b5f20,_0x5af500);_0x7b0ac5(_0x5af500);});});}exports['GetFaxAccount']=function(_0x2bbe65){var _0x2882c3=this;return new Promise(function(_0x2dff4a,_0x34a4a5){return db[_0xc035('0x17')]['findAll']({'raw':_0x2bbe65[_0xc035('0x18')]?_0x2bbe65[_0xc035('0x18')][_0xc035('0x19')]===undefined?!![]:![]:!![],'where':_0x2bbe65[_0xc035('0x18')]?_0x2bbe65['options']['where']||null:null,'attributes':_0x2bbe65[_0xc035('0x18')]?_0x2bbe65[_0xc035('0x18')][_0xc035('0x1a')]||null:null,'limit':_0x2bbe65[_0xc035('0x18')]?_0x2bbe65[_0xc035('0x18')][_0xc035('0x1b')]||null:null,'include':_0x2bbe65[_0xc035('0x18')]?_0x2bbe65[_0xc035('0x18')][_0xc035('0x1c')]?_['map'](_0x2bbe65[_0xc035('0x18')][_0xc035('0x1c')],function(_0x3959aa){return{'model':db[_0x3959aa[_0xc035('0x1d')]],'as':_0x3959aa['as'],'attributes':_0x3959aa[_0xc035('0x1a')],'include':_0x3959aa[_0xc035('0x1c')]?_['map'](_0x3959aa[_0xc035('0x1c')],function(_0x361dfe){return{'model':db[_0x361dfe['model']],'as':_0x361dfe['as'],'attributes':_0x361dfe[_0xc035('0x1a')],'include':_0x361dfe[_0xc035('0x1c')]?_[_0xc035('0x1e')](_0x361dfe[_0xc035('0x1c')],function(_0x480f9b){return{'model':db[_0x480f9b[_0xc035('0x1d')]],'as':_0x480f9b['as'],'attributes':_0x480f9b['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x44078d){logger[_0xc035('0xe')](_0xc035('0x1f'),_0x2bbe65);logger[_0xc035('0x10')]('GetFaxAccount',_0x2bbe65,JSON[_0xc035('0x11')](_0x44078d));_0x2dff4a(_0x44078d);})[_0xc035('0x20')](function(_0x3b48cb){logger[_0xc035('0x12')](_0xc035('0x1f'),_0x3b48cb['message'],_0x2bbe65);_0x34a4a5(_0x2882c3['error'](0x1f4,_0x3b48cb['message']));});});};exports[_0xc035('0x21')]=function(_0x40a090,_0x14c1f1,_0x42aa92){var _0x5158a2=this;return new Promise(function(_0x2110a6,_0x22520c){var _0x2d16fe={'body':_0x40a090['body'],'channel':_0xc035('0x22')};var _0x477c3a=[];var _0x35986b=[];var _0x1ff30a={};return db[_0xc035('0x23')]['describe']()['then'](function(_0x3eb014){if(!_0x3eb014){throw new db[(_0xc035('0x24'))][(_0xc035('0x25'))](_0xc035('0x26'));}_0x477c3a=_['difference'](_['keys'](_0x3eb014),['createdAt','updatedAt']);_0x35986b=_[_0xc035('0x27')](_['keys'](_0x3eb014),[_0xc035('0x28'),'updatedAt',_0xc035('0x29'),'ListId']);if(_0x40a090[_0xc035('0x2a')]['id']){delete _0x40a090[_0xc035('0x2a')]['id'];}if(_['isNil'](_0x40a090['body'][_0xc035('0x2b')])){throw new db[(_0xc035('0x24'))]['ValidationError'](_0xc035('0x2c'));}if(_[_0xc035('0x2d')](_0x40a090[_0xc035('0x2a')][_0xc035('0x2a')])||_0x40a090[_0xc035('0x2a')]['body']===''){throw new db[(_0xc035('0x24'))]['ValidationError']('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_['isNil'](_0x40a090[_0xc035('0x2a')][_0xc035('0x2e')])){throw new db['Sequelize'][(_0xc035('0x25'))](_0xc035('0x2f')+_0x35986b);}if(!_['includes'](_0x35986b,_0x40a090[_0xc035('0x2a')]['mapKey'])){throw new db[(_0xc035('0x24'))][(_0xc035('0x25'))](_0xc035('0x30')+_0x35986b);}_0x1ff30a[_0x40a090[_0xc035('0x2a')][_0xc035('0x2e')]]=_0x40a090[_0xc035('0x2a')][_0xc035('0x2b')];})[_0xc035('0xd')](function(){return db[_0xc035('0x17')][_0xc035('0x31')]({'where':{'id':_0x40a090[_0xc035('0x32')]['id']},'include':[{'model':db['CmList'],'as':_0xc035('0x33'),'include':[{'model':db[_0xc035('0x23')],'as':'Contacts','where':_0x1ff30a,'limit':0x1,'order':[[_0xc035('0x34'),_0xc035('0x35')]]}]},{'model':db[_0xc035('0x36')],'as':_0xc035('0x37')}]});})[_0xc035('0xd')](function(_0x388d16){if(_0x388d16&&_0x388d16[_0xc035('0x33')]){var _0x167ab8=_0x388d16[_0xc035('0x38')]({'plain':!![]});_0x2d16fe[_0xc035('0x32')]=_0x167ab8;_0x2d16fe[_0xc035('0x39')]=_0x167ab8[_0xc035('0x37')];_0x2d16fe[_0xc035('0x3a')]=_0x167ab8['List'];_0x2d16fe[_0xc035('0x39')]=_[_0xc035('0x3b')](_0x2d16fe['applications'],[_0xc035('0x3c')],[_0xc035('0x3d')]);if(_0x2d16fe[_0xc035('0x32')][_0xc035('0x37')]){delete _0x2d16fe[_0xc035('0x32')][_0xc035('0x37')];}if(_0x2d16fe[_0xc035('0x32')][_0xc035('0x33')]&&_0x2d16fe['account'][_0xc035('0x33')][_0xc035('0x3e')][_0xc035('0x3f')]){return _0x2d16fe[_0xc035('0x32')][_0xc035('0x33')][_0xc035('0x3e')][0x0];}var _0x12b5b5=_[_0xc035('0x40')](_0x40a090['body'],{'firstName':_0x40a090[_0xc035('0x2a')][_0xc035('0x2b')],'ListId':_0x167ab8[_0xc035('0x41')]});_0x12b5b5[_0x40a090[_0xc035('0x2a')][_0xc035('0x2e')]]=_0x40a090['body'][_0xc035('0x2b')];return db[_0xc035('0x23')][_0xc035('0x42')](_0x12b5b5,{'fields':_0x477c3a,'raw':!![]});}})[_0xc035('0xd')](function(_0x217861){_0x2d16fe[_0xc035('0x43')]=_0x217861;if(_0x217861){var _0x3741d9={'ContactId':_0x217861['id'],'FaxAccountId':_0x40a090[_0xc035('0x32')]['id'],'fax':_0x217861[_0xc035('0x22')]};return db['FaxInteraction'][_0xc035('0x31')]({'where':{'ContactId':_0x217861['id'],'closed':![],'FaxAccountId':_0x40a090[_0xc035('0x32')]['id']}})[_0xc035('0xd')](function(_0x4cc05e){if(_0x4cc05e){return[_0x4cc05e,![]];}return db[_0xc035('0x44')]['create'](_0x3741d9)[_0xc035('0xd')](function(_0x5730cb){return[_0x5730cb,!![]];});});}else{throw new Error(_0xc035('0x45'));}})['spread'](function(_0x3611ee,_0x4886f3){var _0x44ff0e=_0x3611ee[_0xc035('0x38')]({'plain':!![]});if(_0x4886f3){if(_0x2d16fe['account'][_0xc035('0x46')]){_0x2d16fe[_0xc035('0x39')][_0xc035('0x47')]({'id':0x0,'priority':_0x2d16fe['applications'][_0xc035('0x3f')]+0x1,'app':_0xc035('0x48'),'appdata':'unmanaged','interval':'*,*,*,*'});}_0x44ff0e[_0xc035('0x49')]=!![];}else{_0x44ff0e[_0xc035('0x49')]=![];}_0x2d16fe[_0xc035('0x4a')]=_0x44ff0e;return db[_0xc035('0x4b')][_0xc035('0x42')]({'body':_0x40a090[_0xc035('0x2a')][_0xc035('0x2a')],'FaxAccountId':_0x40a090[_0xc035('0x32')]['id'],'FaxInteractionId':_0x3611ee['id'],'direction':'in','ContactId':_0x3611ee[_0xc035('0x4c')],'AttachmentId':_0x40a090[_0xc035('0x2a')][_0xc035('0x4d')]});})[_0xc035('0xd')](function(_0x4be9f0){_0x2d16fe[_0xc035('0x14')]=_0x4be9f0;if(_0x2d16fe[_0xc035('0x4a')][_0xc035('0x4e')]){return db['User'][_0xc035('0x31')]({'attributes':['id',_0xc035('0x4f')],'where':{'id':_0x2d16fe[_0xc035('0x4a')][_0xc035('0x4e')]}})[_0xc035('0xd')](function(_0x5c5fab){if(_0x5c5fab){_0x2d16fe['applications'][_0xc035('0x50')]({'id':0x0,'priority':0x0,'app':_0xc035('0x51'),'appdata':_0x5c5fab['name']+','+(_0x2d16fe[_0xc035('0x32')][_0xc035('0x52')]||0xa),'interval':_0xc035('0x53')});}return respondWithRpcPromise(_0xc035('0x54'),_0xc035('0x55'),_0x2d16fe);});}return respondWithRpcPromise('Start',_0xc035('0x55'),_0x2d16fe);})[_0xc035('0xd')](function(_0x4c0d1e){_0x2110a6(_0x4c0d1e);})['catch'](function(_0x6791da){_0x22520c(_0x5158a2[_0xc035('0x12')](0x1f4,_0x6791da['message']));});});};
\ No newline at end of file
index fe253fa..832eccf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6e9a=['register','length','./faxAccount.events','update','removeListener'];(function(_0x462a8a,_0x527861){var _0x322725=function(_0x5d9fef){while(--_0x5d9fef){_0x462a8a['push'](_0x462a8a['shift']());}};_0x322725(++_0x527861);}(_0x6e9a,0x18d));var _0xa6e9=function(_0x4ca89a,_0x33ffb8){_0x4ca89a=_0x4ca89a-0x0;var _0xfeb04d=_0x6e9a[_0x4ca89a];return _0xfeb04d;};'use strict';var FaxAccountEvents=require(_0xa6e9('0x0'));var events=['save','remove',_0xa6e9('0x1')];function createListener(_0xc9cdb4,_0x310bf5){return function(_0x4a41f3){_0x310bf5['emit'](_0xc9cdb4,_0x4a41f3);};}function removeListener(_0x595e02,_0x4fa8af){return function(){FaxAccountEvents[_0xa6e9('0x2')](_0x595e02,_0x4fa8af);};}exports[_0xa6e9('0x3')]=function(_0x586b0b){for(var _0x599cb8=0x0,_0x102a20=events[_0xa6e9('0x4')];_0x599cb8<_0x102a20;_0x599cb8++){var _0x918489=events[_0x599cb8];var _0x2bd461=createListener('faxAccount:'+_0x918489,_0x586b0b);FaxAccountEvents['on'](_0x918489,_0x2bd461);}};
\ No newline at end of file
+var _0x709c=['emit','register','length','./faxAccount.events','remove','update'];(function(_0x44a64f,_0x38475c){var _0x52024b=function(_0x2cd055){while(--_0x2cd055){_0x44a64f['push'](_0x44a64f['shift']());}};_0x52024b(++_0x38475c);}(_0x709c,0x135));var _0xc709=function(_0x4b478f,_0x13ace5){_0x4b478f=_0x4b478f-0x0;var _0x4128d6=_0x709c[_0x4b478f];return _0x4128d6;};'use strict';var FaxAccountEvents=require(_0xc709('0x0'));var events=['save',_0xc709('0x1'),_0xc709('0x2')];function createListener(_0x355666,_0x3c96d6){return function(_0x9fa816){_0x3c96d6[_0xc709('0x3')](_0x355666,_0x9fa816);};}function removeListener(_0x325c5b,_0x2c81a9){return function(){FaxAccountEvents['removeListener'](_0x325c5b,_0x2c81a9);};}exports[_0xc709('0x4')]=function(_0x5483c0){for(var _0x2e28f=0x0,_0x5f38d0=events[_0xc709('0x5')];_0x2e28f<_0x5f38d0;_0x2e28f++){var _0x1c4dc3=events[_0x2e28f];var _0x5804cf=createListener('faxAccount:'+_0x1c4dc3,_0x5483c0);FaxAccountEvents['on'](_0x1c4dc3,_0x5804cf);}};
\ No newline at end of file
index ab686fa..376041c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1518=['../../config/environment','./faxAccount.controller','get','isAuthenticated','index','/describe','describe','show','/:id/dispositions','getDispositions','getAnswers','getInteractions','/:id/applications','getApplications','/:id/messages','/:id/users','getAgents','post','addDisposition','addAnswer','/:id/interactions','addInteraction','/addaccountapplications','addAccountApplications','/updateaccountapplications','updateAccountApplications','put','/:id','update','delete','destroy','removeDispositions','/:id/canned_answers','removeAnswers','removeAgents','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x52d4ad,_0x25e611){var _0x34a767=function(_0x1f3daa){while(--_0x1f3daa){_0x52d4ad['push'](_0x52d4ad['shift']());}};_0x34a767(++_0x25e611);}(_0x1518,0x7c));var _0x8151=function(_0x1b4155,_0x4817ea){_0x1b4155=_0x1b4155-0x0;var _0x8804ea=_0x1518[_0x1b4155];return _0x8804ea;};'use strict';var multer=require(_0x8151('0x0'));var util=require(_0x8151('0x1'));var path=require(_0x8151('0x2'));var timeout=require(_0x8151('0x3'));var express=require(_0x8151('0x4'));var router=express[_0x8151('0x5')]();var auth=require(_0x8151('0x6'));var interaction=require(_0x8151('0x7'));var config=require(_0x8151('0x8'));var controller=require(_0x8151('0x9'));router[_0x8151('0xa')]('/',auth[_0x8151('0xb')](),controller[_0x8151('0xc')]);router[_0x8151('0xa')](_0x8151('0xd'),auth['isAuthenticated'](),controller[_0x8151('0xe')]);router[_0x8151('0xa')]('/:id',auth[_0x8151('0xb')](),controller[_0x8151('0xf')]);router[_0x8151('0xa')](_0x8151('0x10'),auth[_0x8151('0xb')](),controller[_0x8151('0x11')]);router['get']('/:id/canned_answers',auth[_0x8151('0xb')](),controller[_0x8151('0x12')]);router[_0x8151('0xa')]('/:id/interactions',auth['isAuthenticated'](),controller[_0x8151('0x13')]);router['get'](_0x8151('0x14'),auth['isAuthenticated'](),controller[_0x8151('0x15')]);router[_0x8151('0xa')](_0x8151('0x16'),auth['isAuthenticated'](),controller['getMessages']);router[_0x8151('0xa')](_0x8151('0x17'),auth['isAuthenticated'](),controller[_0x8151('0x18')]);router[_0x8151('0x19')]('/',auth[_0x8151('0xb')](),controller['create']);router[_0x8151('0x19')](_0x8151('0x10'),auth[_0x8151('0xb')](),controller[_0x8151('0x1a')]);router[_0x8151('0x19')]('/:id/canned_answers',auth['isAuthenticated'](),controller[_0x8151('0x1b')]);router[_0x8151('0x19')](_0x8151('0x1c'),auth['isAuthenticated'](),controller[_0x8151('0x1d')]);router[_0x8151('0x19')](_0x8151('0x14'),auth['isAuthenticated'](),controller['addApplications']);router[_0x8151('0x19')](_0x8151('0x1e'),auth[_0x8151('0xb')](),controller[_0x8151('0x1f')]);router['post'](_0x8151('0x20'),auth[_0x8151('0xb')](),controller[_0x8151('0x21')]);router['post']('/:id/send',auth[_0x8151('0xb')](),controller['send']);router[_0x8151('0x19')](_0x8151('0x17'),auth[_0x8151('0xb')](),controller['addAgents']);router[_0x8151('0x22')](_0x8151('0x23'),auth[_0x8151('0xb')](),controller[_0x8151('0x24')]);router[_0x8151('0x25')](_0x8151('0x23'),auth[_0x8151('0xb')](),controller[_0x8151('0x26')]);router[_0x8151('0x25')]('/:id/dispositions',auth[_0x8151('0xb')](),controller[_0x8151('0x27')]);router[_0x8151('0x25')](_0x8151('0x28'),auth['isAuthenticated'](),controller[_0x8151('0x29')]);router[_0x8151('0x25')](_0x8151('0x17'),auth[_0x8151('0xb')](),controller[_0x8151('0x2a')]);module[_0x8151('0x2b')]=router;
\ No newline at end of file
+var _0x8c45=['./faxAccount.controller','get','index','/describe','describe','/:id','show','isAuthenticated','getDispositions','/:id/canned_answers','/:id/interactions','/:id/applications','/:id/messages','getMessages','getAgents','post','create','/:id/dispositions','addDisposition','addAnswer','addInteraction','/addaccountapplications','addAccountApplications','/updateaccountapplications','updateAccountApplications','/:id/send','send','addAgents','update','delete','removeDispositions','/:id/users','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x44fb50,_0x2852b5){var _0x41c71e=function(_0x15022a){while(--_0x15022a){_0x44fb50['push'](_0x44fb50['shift']());}};_0x41c71e(++_0x2852b5);}(_0x8c45,0xee));var _0x58c4=function(_0x5b6ff1,_0x21f181){_0x5b6ff1=_0x5b6ff1-0x0;var _0x12efd6=_0x8c45[_0x5b6ff1];return _0x12efd6;};'use strict';var multer=require(_0x58c4('0x0'));var util=require(_0x58c4('0x1'));var path=require(_0x58c4('0x2'));var timeout=require('connect-timeout');var express=require(_0x58c4('0x3'));var router=express[_0x58c4('0x4')]();var auth=require(_0x58c4('0x5'));var interaction=require(_0x58c4('0x6'));var config=require(_0x58c4('0x7'));var controller=require(_0x58c4('0x8'));router[_0x58c4('0x9')]('/',auth['isAuthenticated'](),controller[_0x58c4('0xa')]);router['get'](_0x58c4('0xb'),auth['isAuthenticated'](),controller[_0x58c4('0xc')]);router[_0x58c4('0x9')](_0x58c4('0xd'),auth['isAuthenticated'](),controller[_0x58c4('0xe')]);router[_0x58c4('0x9')]('/:id/dispositions',auth[_0x58c4('0xf')](),controller[_0x58c4('0x10')]);router[_0x58c4('0x9')](_0x58c4('0x11'),auth[_0x58c4('0xf')](),controller['getAnswers']);router['get'](_0x58c4('0x12'),auth[_0x58c4('0xf')](),controller['getInteractions']);router['get'](_0x58c4('0x13'),auth['isAuthenticated'](),controller['getApplications']);router[_0x58c4('0x9')](_0x58c4('0x14'),auth[_0x58c4('0xf')](),controller[_0x58c4('0x15')]);router[_0x58c4('0x9')]('/:id/users',auth[_0x58c4('0xf')](),controller[_0x58c4('0x16')]);router[_0x58c4('0x17')]('/',auth['isAuthenticated'](),controller[_0x58c4('0x18')]);router[_0x58c4('0x17')](_0x58c4('0x19'),auth[_0x58c4('0xf')](),controller[_0x58c4('0x1a')]);router['post'](_0x58c4('0x11'),auth[_0x58c4('0xf')](),controller[_0x58c4('0x1b')]);router[_0x58c4('0x17')](_0x58c4('0x12'),auth[_0x58c4('0xf')](),controller[_0x58c4('0x1c')]);router['post'](_0x58c4('0x13'),auth[_0x58c4('0xf')](),controller['addApplications']);router[_0x58c4('0x17')](_0x58c4('0x1d'),auth[_0x58c4('0xf')](),controller[_0x58c4('0x1e')]);router[_0x58c4('0x17')](_0x58c4('0x1f'),auth['isAuthenticated'](),controller[_0x58c4('0x20')]);router['post'](_0x58c4('0x21'),auth[_0x58c4('0xf')](),controller[_0x58c4('0x22')]);router[_0x58c4('0x17')]('/:id/users',auth[_0x58c4('0xf')](),controller[_0x58c4('0x23')]);router['put']('/:id',auth[_0x58c4('0xf')](),controller[_0x58c4('0x24')]);router[_0x58c4('0x25')](_0x58c4('0xd'),auth[_0x58c4('0xf')](),controller['destroy']);router['delete']('/:id/dispositions',auth['isAuthenticated'](),controller[_0x58c4('0x26')]);router['delete']('/:id/canned_answers',auth[_0x58c4('0xf')](),controller['removeAnswers']);router[_0x58c4('0x25')](_0x58c4('0x27'),auth[_0x58c4('0xf')](),controller['removeAgents']);module[_0x58c4('0x28')]=router;
\ No newline at end of file
index 085d893..7f69edd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1867=['*,*,*,*','sequelize','exports','STRING','TEXT'];(function(_0x6decac,_0x351eb7){var _0x2a247c=function(_0xc9adce){while(--_0xc9adce){_0x6decac['push'](_0x6decac['shift']());}};_0x2a247c(++_0x351eb7);}(_0x1867,0xb5));var _0x7186=function(_0x4972bd,_0x2484dc){_0x4972bd=_0x4972bd-0x0;var _0x301b5d=_0x1867[_0x4972bd];return _0x301b5d;};'use strict';var Sequelize=require(_0x7186('0x0'));module[_0x7186('0x1')]={'priority':{'type':Sequelize['INTEGER'],'allowNull':![]},'app':{'type':Sequelize[_0x7186('0x2')],'allowNull':![],'defaultValue':'noop'},'appdata':{'type':Sequelize[_0x7186('0x3')]()},'description':{'type':Sequelize[_0x7186('0x2')]},'interval':{'type':Sequelize[_0x7186('0x2')],'defaultValue':_0x7186('0x4')}};
\ No newline at end of file
+var _0xf5b6=['*,*,*,*','INTEGER','STRING','noop','TEXT'];(function(_0x4a29a9,_0x58cd04){var _0x386570=function(_0x1d2d09){while(--_0x1d2d09){_0x4a29a9['push'](_0x4a29a9['shift']());}};_0x386570(++_0x58cd04);}(_0xf5b6,0x1b4));var _0x6f5b=function(_0x26db61,_0x8674a5){_0x26db61=_0x26db61-0x0;var _0x1c5e55=_0xf5b6[_0x26db61];return _0x1c5e55;};'use strict';var Sequelize=require('sequelize');module['exports']={'priority':{'type':Sequelize[_0x6f5b('0x0')],'allowNull':![]},'app':{'type':Sequelize[_0x6f5b('0x1')],'allowNull':![],'defaultValue':_0x6f5b('0x2')},'appdata':{'type':Sequelize[_0x6f5b('0x3')]()},'description':{'type':Sequelize['STRING']},'interval':{'type':Sequelize[_0x6f5b('0x1')],'defaultValue':_0x6f5b('0x4')}};
\ No newline at end of file
index 43e941f..b9f7112 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf5c2=['rows','show','params','attributes','find','catch','create','body','destroy','html-pdf','eml-format','zip-dir','request-promise','moment','mustache','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','status','json','offset','limit','reject','save','update','then','end','sendStatus','error','stack','name','send','index','FaxApplication','model','query','keys','filters','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','options','count','includeAll','findAll'];(function(_0x13ff53,_0x5e1424){var _0x290228=function(_0x3e3133){while(--_0x3e3133){_0x13ff53['push'](_0x13ff53['shift']());}};_0x290228(++_0x5e1424);}(_0xf5c2,0x95));var _0x2f5c=function(_0x5d949e,_0x555707){_0x5d949e=_0x5d949e-0x0;var _0x445c1e=_0xf5c2[_0x5d949e];return _0x445c1e;};'use strict';var pdf=require(_0x2f5c('0x0'));var emlformat=require(_0x2f5c('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x2f5c('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x2f5c('0x3'));var moment=require(_0x2f5c('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x2f5c('0x5'));var util=require('util');var path=require(_0x2f5c('0x6'));var sox=require(_0x2f5c('0x7'));var csv=require(_0x2f5c('0x8'));var ejs=require(_0x2f5c('0x9'));var fs=require('fs');var _=require(_0x2f5c('0xa'));var squel=require(_0x2f5c('0xb'));var crypto=require(_0x2f5c('0xc'));var jsforce=require(_0x2f5c('0xd'));var deskjs=require(_0x2f5c('0xe'));var toCsv=require(_0x2f5c('0x8'));var querystring=require(_0x2f5c('0xf'));var Papa=require('papaparse');var Redis=require(_0x2f5c('0x10'));var authService=require(_0x2f5c('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x2f5c('0x12'));var logger=require(_0x2f5c('0x13'))(_0x2f5c('0x14'));var utils=require(_0x2f5c('0x15'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2d4f78,_0x17f055){_0x17f055=_0x17f055||0xcc;return function(_0x1e7343){if(_0x1e7343){return _0x2d4f78['sendStatus'](_0x17f055);}return _0x2d4f78[_0x2f5c('0x16')](_0x17f055)['end']();};}function respondWithResult(_0x576479,_0x10f420){_0x10f420=_0x10f420||0xc8;return function(_0x45827d){if(_0x45827d){return _0x576479['status'](_0x10f420)[_0x2f5c('0x17')](_0x45827d);}};}function respondWithFilteredResult(_0x39cd43,_0x580572){return function(_0x8719a7){if(_0x8719a7){var _0x263e33=_0x8719a7['count'],_0x140e0f=_0x580572[_0x2f5c('0x18')],_0x126d21=_0x580572[_0x2f5c('0x18')]+_0x580572[_0x2f5c('0x19')],_0x50e8eb;if(_0x126d21>=_0x263e33){_0x126d21=_0x263e33;_0x50e8eb=0xc8;}else{_0x50e8eb=0xce;}_0x39cd43['status'](_0x50e8eb);return _0x39cd43['set']('Content-Range',_0x140e0f+'-'+_0x126d21+'/'+_0x263e33)[_0x2f5c('0x17')](_0x8719a7);}return null;};}function patchUpdates(_0x223970){return function(_0x575859){try{jsonpatch['apply'](_0x575859,_0x223970,!![]);}catch(_0x446543){return BPromise[_0x2f5c('0x1a')](_0x446543);}return _0x575859[_0x2f5c('0x1b')]();};}function saveUpdates(_0x1763d1,_0x3cd904){return function(_0x50eaf2){if(_0x50eaf2){return _0x50eaf2[_0x2f5c('0x1c')](_0x1763d1)[_0x2f5c('0x1d')](function(_0x4d721e){return _0x4d721e;});}return null;};}function removeEntity(_0x12587e,_0x24253f){return function(_0x5ecd8a){if(_0x5ecd8a){return _0x5ecd8a['destroy']()[_0x2f5c('0x1d')](function(){_0x12587e['status'](0xcc)[_0x2f5c('0x1e')]();});}};}function handleEntityNotFound(_0x5275ee,_0xede48e){return function(_0x24f870){if(!_0x24f870){_0x5275ee[_0x2f5c('0x1f')](0x194);}return _0x24f870;};}function handleError(_0x3adef6,_0x1eac2c){_0x1eac2c=_0x1eac2c||0x1f4;return function(_0x19e7fd){logger[_0x2f5c('0x20')](_0x19e7fd[_0x2f5c('0x21')]);if(_0x19e7fd[_0x2f5c('0x22')]){delete _0x19e7fd['name'];}_0x3adef6[_0x2f5c('0x16')](_0x1eac2c)[_0x2f5c('0x23')](_0x19e7fd);};}exports[_0x2f5c('0x24')]=function(_0x40e4b7,_0x301d52){var _0x1b8269={},_0x34c8c9={},_0x38e259={'count':0x0,'rows':[]};var _0xf47f0e=db[_0x2f5c('0x25')]['rawAttributes'];_0x34c8c9[_0x2f5c('0x26')]=_['keys'](_0xf47f0e);_0x34c8c9[_0x2f5c('0x27')]=_[_0x2f5c('0x28')](_0x40e4b7['query']);_0x34c8c9[_0x2f5c('0x29')]=_[_0x2f5c('0x2a')](_0x34c8c9['model'],_0x34c8c9[_0x2f5c('0x27')]);_0x1b8269['attributes']=_[_0x2f5c('0x2a')](_0x34c8c9[_0x2f5c('0x26')],qs[_0x2f5c('0x2b')](_0x40e4b7[_0x2f5c('0x27')][_0x2f5c('0x2b')]));_0x1b8269['attributes']=_0x1b8269['attributes'][_0x2f5c('0x2c')]?_0x1b8269['attributes']:_0x34c8c9[_0x2f5c('0x26')];if(!_0x40e4b7[_0x2f5c('0x27')][_0x2f5c('0x2d')](_0x2f5c('0x2e'))){_0x1b8269[_0x2f5c('0x19')]=qs[_0x2f5c('0x19')](_0x40e4b7[_0x2f5c('0x27')][_0x2f5c('0x19')]);_0x1b8269[_0x2f5c('0x18')]=qs[_0x2f5c('0x18')](_0x40e4b7[_0x2f5c('0x27')][_0x2f5c('0x18')]);}_0x1b8269[_0x2f5c('0x2f')]=qs[_0x2f5c('0x30')](_0x40e4b7[_0x2f5c('0x27')]['sort']);_0x1b8269[_0x2f5c('0x31')]=qs[_0x2f5c('0x29')](_[_0x2f5c('0x32')](_0x40e4b7[_0x2f5c('0x27')],_0x34c8c9[_0x2f5c('0x29')]));if(_0x40e4b7[_0x2f5c('0x27')][_0x2f5c('0x33')]){_0x1b8269[_0x2f5c('0x31')]=_[_0x2f5c('0x34')](_0x1b8269[_0x2f5c('0x31')],{'$or':_[_0x2f5c('0x35')](_0xf47f0e,function(_0x1c7492){if(_0x1c7492[_0x2f5c('0x36')][_0x2f5c('0x37')]!==_0x2f5c('0x38')){var _0x3517a3={};_0x3517a3[_0x1c7492['field']]={'$like':'%'+_0x40e4b7[_0x2f5c('0x27')][_0x2f5c('0x33')]+'%'};return _0x3517a3;}})});}_0x1b8269=_[_0x2f5c('0x34')]({},_0x1b8269,_0x40e4b7[_0x2f5c('0x39')]);var _0x4dd618={'where':_0x1b8269[_0x2f5c('0x31')]};return db['FaxApplication'][_0x2f5c('0x3a')](_0x4dd618)[_0x2f5c('0x1d')](function(_0xd66236){_0x38e259['count']=_0xd66236;if(_0x40e4b7[_0x2f5c('0x27')][_0x2f5c('0x3b')]){_0x1b8269['include']=[{'all':!![]}];}return db[_0x2f5c('0x25')][_0x2f5c('0x3c')](_0x1b8269);})['then'](function(_0x1e5bef){_0x38e259[_0x2f5c('0x3d')]=_0x1e5bef;return _0x38e259;})[_0x2f5c('0x1d')](respondWithFilteredResult(_0x301d52,_0x1b8269))['catch'](handleError(_0x301d52,null));};exports[_0x2f5c('0x3e')]=function(_0x1d5326,_0x2b84d0){var _0x3fb111={'raw':!![],'where':{'id':_0x1d5326[_0x2f5c('0x3f')]['id']}},_0x55b3e4={};_0x55b3e4[_0x2f5c('0x26')]=_[_0x2f5c('0x28')](db['FaxApplication']['rawAttributes']);_0x55b3e4[_0x2f5c('0x27')]=_[_0x2f5c('0x28')](_0x1d5326[_0x2f5c('0x27')]);_0x55b3e4[_0x2f5c('0x29')]=_['intersection'](_0x55b3e4[_0x2f5c('0x26')],_0x55b3e4[_0x2f5c('0x27')]);_0x3fb111[_0x2f5c('0x40')]=_[_0x2f5c('0x2a')](_0x55b3e4[_0x2f5c('0x26')],qs[_0x2f5c('0x2b')](_0x1d5326[_0x2f5c('0x27')][_0x2f5c('0x2b')]));_0x3fb111[_0x2f5c('0x40')]=_0x3fb111[_0x2f5c('0x40')][_0x2f5c('0x2c')]?_0x3fb111[_0x2f5c('0x40')]:_0x55b3e4[_0x2f5c('0x26')];if(_0x1d5326[_0x2f5c('0x27')][_0x2f5c('0x3b')]){_0x3fb111['include']=[{'all':!![]}];}_0x3fb111=_['merge']({},_0x3fb111,_0x1d5326['options']);return db[_0x2f5c('0x25')][_0x2f5c('0x41')](_0x3fb111)[_0x2f5c('0x1d')](handleEntityNotFound(_0x2b84d0,null))['then'](respondWithResult(_0x2b84d0,null))[_0x2f5c('0x42')](handleError(_0x2b84d0,null));};exports[_0x2f5c('0x43')]=function(_0x3bf1c0,_0x4f2dec){return db[_0x2f5c('0x25')][_0x2f5c('0x43')](_0x3bf1c0[_0x2f5c('0x44')],{})['then'](respondWithResult(_0x4f2dec,0xc9))[_0x2f5c('0x42')](handleError(_0x4f2dec,null));};exports[_0x2f5c('0x1c')]=function(_0xf62a99,_0xacf9ee){if(_0xf62a99[_0x2f5c('0x44')]['id']){delete _0xf62a99[_0x2f5c('0x44')]['id'];}return db[_0x2f5c('0x25')][_0x2f5c('0x41')]({'where':{'id':_0xf62a99[_0x2f5c('0x3f')]['id']}})[_0x2f5c('0x1d')](handleEntityNotFound(_0xacf9ee,null))['then'](saveUpdates(_0xf62a99['body'],null))[_0x2f5c('0x1d')](respondWithResult(_0xacf9ee,null))[_0x2f5c('0x42')](handleError(_0xacf9ee,null));};exports[_0x2f5c('0x45')]=function(_0x5d0d03,_0x5b2d1b){return db[_0x2f5c('0x25')][_0x2f5c('0x41')]({'where':{'id':_0x5d0d03['params']['id']}})[_0x2f5c('0x1d')](handleEntityNotFound(_0x5b2d1b,null))[_0x2f5c('0x1d')](removeEntity(_0x5b2d1b,null))[_0x2f5c('0x42')](handleError(_0x5b2d1b,null));};
\ No newline at end of file
+var _0xf8b8=['stack','name','send','index','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','merge','type','key','VIRTUAL','field','options','includeAll','include','findAll','show','params','FaxApplication','rawAttributes','find','create','body','catch','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','then','destroy'];(function(_0x2f02d4,_0x27b24a){var _0x4b707d=function(_0x52f3ba){while(--_0x52f3ba){_0x2f02d4['push'](_0x2f02d4['shift']());}};_0x4b707d(++_0x27b24a);}(_0xf8b8,0x1a0));var _0x8f8b=function(_0xaac449,_0x393732){_0xaac449=_0xaac449-0x0;var _0x53b5b9=_0xf8b8[_0xaac449];return _0x53b5b9;};'use strict';var pdf=require(_0x8f8b('0x0'));var emlformat=require(_0x8f8b('0x1'));var rimraf=require(_0x8f8b('0x2'));var zipdir=require(_0x8f8b('0x3'));var jsonpatch=require(_0x8f8b('0x4'));var rp=require(_0x8f8b('0x5'));var moment=require(_0x8f8b('0x6'));var BPromise=require('bluebird');var Mustache=require(_0x8f8b('0x7'));var util=require(_0x8f8b('0x8'));var path=require(_0x8f8b('0x9'));var sox=require(_0x8f8b('0xa'));var csv=require(_0x8f8b('0xb'));var ejs=require(_0x8f8b('0xc'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x8f8b('0xd'));var jsforce=require(_0x8f8b('0xe'));var deskjs=require(_0x8f8b('0xf'));var toCsv=require('to-csv');var querystring=require(_0x8f8b('0x10'));var Papa=require(_0x8f8b('0x11'));var Redis=require(_0x8f8b('0x12'));var authService=require(_0x8f8b('0x13'));var qs=require(_0x8f8b('0x14'));var hardwareService=require(_0x8f8b('0x15'));var logger=require(_0x8f8b('0x16'))(_0x8f8b('0x17'));var utils=require('../../config/utils');var config=require(_0x8f8b('0x18'));var db=require(_0x8f8b('0x19'))['db'];function respondWithStatusCode(_0x192eeb,_0x45689a){_0x45689a=_0x45689a||0xcc;return function(_0x53ac4b){if(_0x53ac4b){return _0x192eeb[_0x8f8b('0x1a')](_0x45689a);}return _0x192eeb[_0x8f8b('0x1b')](_0x45689a)[_0x8f8b('0x1c')]();};}function respondWithResult(_0x4026a2,_0x3b3c2c){_0x3b3c2c=_0x3b3c2c||0xc8;return function(_0x50c26a){if(_0x50c26a){return _0x4026a2[_0x8f8b('0x1b')](_0x3b3c2c)[_0x8f8b('0x1d')](_0x50c26a);}};}function respondWithFilteredResult(_0x32fe96,_0x3caecc){return function(_0x166586){if(_0x166586){var _0x41c2f9=_0x166586[_0x8f8b('0x1e')],_0x4816b4=_0x3caecc['offset'],_0x3402fa=_0x3caecc[_0x8f8b('0x1f')]+_0x3caecc[_0x8f8b('0x20')],_0x7c2ac1;if(_0x3402fa>=_0x41c2f9){_0x3402fa=_0x41c2f9;_0x7c2ac1=0xc8;}else{_0x7c2ac1=0xce;}_0x32fe96[_0x8f8b('0x1b')](_0x7c2ac1);return _0x32fe96[_0x8f8b('0x21')](_0x8f8b('0x22'),_0x4816b4+'-'+_0x3402fa+'/'+_0x41c2f9)[_0x8f8b('0x1d')](_0x166586);}return null;};}function patchUpdates(_0x56c389){return function(_0x17ea8c){try{jsonpatch['apply'](_0x17ea8c,_0x56c389,!![]);}catch(_0x17daa0){return BPromise[_0x8f8b('0x23')](_0x17daa0);}return _0x17ea8c[_0x8f8b('0x24')]();};}function saveUpdates(_0x54d8e1,_0x127b6c){return function(_0x55bc78){if(_0x55bc78){return _0x55bc78[_0x8f8b('0x25')](_0x54d8e1)[_0x8f8b('0x26')](function(_0x4fda9f){return _0x4fda9f;});}return null;};}function removeEntity(_0x32c0c3,_0x4915a9){return function(_0x2e1e3e){if(_0x2e1e3e){return _0x2e1e3e[_0x8f8b('0x27')]()['then'](function(){_0x32c0c3[_0x8f8b('0x1b')](0xcc)[_0x8f8b('0x1c')]();});}};}function handleEntityNotFound(_0x334a5d,_0x544f17){return function(_0x3424b7){if(!_0x3424b7){_0x334a5d[_0x8f8b('0x1a')](0x194);}return _0x3424b7;};}function handleError(_0xd3e58c,_0x31eca1){_0x31eca1=_0x31eca1||0x1f4;return function(_0xd50dd7){logger['error'](_0xd50dd7[_0x8f8b('0x28')]);if(_0xd50dd7[_0x8f8b('0x29')]){delete _0xd50dd7[_0x8f8b('0x29')];}_0xd3e58c[_0x8f8b('0x1b')](_0x31eca1)[_0x8f8b('0x2a')](_0xd50dd7);};}exports[_0x8f8b('0x2b')]=function(_0x5a2edc,_0x564ce4){var _0x4f6cfe={},_0xe29d60={},_0x54dbd6={'count':0x0,'rows':[]};var _0x442acd=db['FaxApplication']['rawAttributes'];_0xe29d60[_0x8f8b('0x2c')]=_[_0x8f8b('0x2d')](_0x442acd);_0xe29d60[_0x8f8b('0x2e')]=_['keys'](_0x5a2edc[_0x8f8b('0x2e')]);_0xe29d60['filters']=_[_0x8f8b('0x2f')](_0xe29d60[_0x8f8b('0x2c')],_0xe29d60[_0x8f8b('0x2e')]);_0x4f6cfe[_0x8f8b('0x30')]=_['intersection'](_0xe29d60[_0x8f8b('0x2c')],qs['fields'](_0x5a2edc[_0x8f8b('0x2e')][_0x8f8b('0x31')]));_0x4f6cfe['attributes']=_0x4f6cfe[_0x8f8b('0x30')][_0x8f8b('0x32')]?_0x4f6cfe['attributes']:_0xe29d60[_0x8f8b('0x2c')];if(!_0x5a2edc[_0x8f8b('0x2e')][_0x8f8b('0x33')](_0x8f8b('0x34'))){_0x4f6cfe[_0x8f8b('0x20')]=qs[_0x8f8b('0x20')](_0x5a2edc[_0x8f8b('0x2e')][_0x8f8b('0x20')]);_0x4f6cfe[_0x8f8b('0x1f')]=qs[_0x8f8b('0x1f')](_0x5a2edc[_0x8f8b('0x2e')][_0x8f8b('0x1f')]);}_0x4f6cfe[_0x8f8b('0x35')]=qs[_0x8f8b('0x36')](_0x5a2edc[_0x8f8b('0x2e')][_0x8f8b('0x36')]);_0x4f6cfe[_0x8f8b('0x37')]=qs[_0x8f8b('0x38')](_[_0x8f8b('0x39')](_0x5a2edc[_0x8f8b('0x2e')],_0xe29d60[_0x8f8b('0x38')]));if(_0x5a2edc['query'][_0x8f8b('0x3a')]){_0x4f6cfe[_0x8f8b('0x37')]=_[_0x8f8b('0x3b')](_0x4f6cfe[_0x8f8b('0x37')],{'$or':_['map'](_0x442acd,function(_0x374fee){if(_0x374fee[_0x8f8b('0x3c')][_0x8f8b('0x3d')]!==_0x8f8b('0x3e')){var _0x4cce66={};_0x4cce66[_0x374fee[_0x8f8b('0x3f')]]={'$like':'%'+_0x5a2edc[_0x8f8b('0x2e')]['filter']+'%'};return _0x4cce66;}})});}_0x4f6cfe=_[_0x8f8b('0x3b')]({},_0x4f6cfe,_0x5a2edc[_0x8f8b('0x40')]);var _0x4fd670={'where':_0x4f6cfe[_0x8f8b('0x37')]};return db['FaxApplication'][_0x8f8b('0x1e')](_0x4fd670)[_0x8f8b('0x26')](function(_0x470f82){_0x54dbd6[_0x8f8b('0x1e')]=_0x470f82;if(_0x5a2edc[_0x8f8b('0x2e')][_0x8f8b('0x41')]){_0x4f6cfe[_0x8f8b('0x42')]=[{'all':!![]}];}return db['FaxApplication'][_0x8f8b('0x43')](_0x4f6cfe);})[_0x8f8b('0x26')](function(_0xf7091b){_0x54dbd6['rows']=_0xf7091b;return _0x54dbd6;})[_0x8f8b('0x26')](respondWithFilteredResult(_0x564ce4,_0x4f6cfe))['catch'](handleError(_0x564ce4,null));};exports[_0x8f8b('0x44')]=function(_0x23813d,_0x343813){var _0x5c41c2={'raw':!![],'where':{'id':_0x23813d[_0x8f8b('0x45')]['id']}},_0x54a13b={};_0x54a13b[_0x8f8b('0x2c')]=_[_0x8f8b('0x2d')](db[_0x8f8b('0x46')][_0x8f8b('0x47')]);_0x54a13b['query']=_[_0x8f8b('0x2d')](_0x23813d[_0x8f8b('0x2e')]);_0x54a13b[_0x8f8b('0x38')]=_['intersection'](_0x54a13b[_0x8f8b('0x2c')],_0x54a13b['query']);_0x5c41c2[_0x8f8b('0x30')]=_[_0x8f8b('0x2f')](_0x54a13b['model'],qs[_0x8f8b('0x31')](_0x23813d[_0x8f8b('0x2e')][_0x8f8b('0x31')]));_0x5c41c2[_0x8f8b('0x30')]=_0x5c41c2[_0x8f8b('0x30')][_0x8f8b('0x32')]?_0x5c41c2[_0x8f8b('0x30')]:_0x54a13b['model'];if(_0x23813d[_0x8f8b('0x2e')][_0x8f8b('0x41')]){_0x5c41c2[_0x8f8b('0x42')]=[{'all':!![]}];}_0x5c41c2=_[_0x8f8b('0x3b')]({},_0x5c41c2,_0x23813d[_0x8f8b('0x40')]);return db[_0x8f8b('0x46')][_0x8f8b('0x48')](_0x5c41c2)[_0x8f8b('0x26')](handleEntityNotFound(_0x343813,null))[_0x8f8b('0x26')](respondWithResult(_0x343813,null))['catch'](handleError(_0x343813,null));};exports['create']=function(_0xbbc3ee,_0x3efdfe){return db[_0x8f8b('0x46')][_0x8f8b('0x49')](_0xbbc3ee[_0x8f8b('0x4a')],{})[_0x8f8b('0x26')](respondWithResult(_0x3efdfe,0xc9))['catch'](handleError(_0x3efdfe,null));};exports[_0x8f8b('0x25')]=function(_0x2ff99,_0x5a01d0){if(_0x2ff99[_0x8f8b('0x4a')]['id']){delete _0x2ff99['body']['id'];}return db[_0x8f8b('0x46')][_0x8f8b('0x48')]({'where':{'id':_0x2ff99[_0x8f8b('0x45')]['id']}})[_0x8f8b('0x26')](handleEntityNotFound(_0x5a01d0,null))[_0x8f8b('0x26')](saveUpdates(_0x2ff99[_0x8f8b('0x4a')],null))[_0x8f8b('0x26')](respondWithResult(_0x5a01d0,null))['catch'](handleError(_0x5a01d0,null));};exports['destroy']=function(_0x5966d9,_0x3b6cc9){return db[_0x8f8b('0x46')][_0x8f8b('0x48')]({'where':{'id':_0x5966d9[_0x8f8b('0x45')]['id']}})[_0x8f8b('0x26')](handleEntityNotFound(_0x3b6cc9,null))[_0x8f8b('0x26')](removeEntity(_0x3b6cc9,null))[_0x8f8b('0x4b')](handleError(_0x3b6cc9,null));};
\ No newline at end of file
index f772cac..f89a9aa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0fda=['lodash','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','exports','define','FaxApplication','fax_applications','utf8mb4'];(function(_0x1cd674,_0x8d3638){var _0x27928f=function(_0x5e3c70){while(--_0x5e3c70){_0x1cd674['push'](_0x1cd674['shift']());}};_0x27928f(++_0x8d3638);}(_0x0fda,0x1a0));var _0xa0fd=function(_0xeabfc8,_0x4c435a){_0xeabfc8=_0xeabfc8-0x0;var _0x340e86=_0x0fda[_0xeabfc8];return _0x340e86;};'use strict';var _=require(_0xa0fd('0x0'));var util=require('util');var logger=require(_0xa0fd('0x1'))(_0xa0fd('0x2'));var moment=require(_0xa0fd('0x3'));var BPromise=require(_0xa0fd('0x4'));var rp=require(_0xa0fd('0x5'));var fs=require('fs');var path=require(_0xa0fd('0x6'));var rimraf=require(_0xa0fd('0x7'));var config=require('../../config/environment');var attributes=require('./faxApplication.attributes');module[_0xa0fd('0x8')]=function(_0x4aec58,_0x49b3c1){return _0x4aec58[_0xa0fd('0x9')](_0xa0fd('0xa'),attributes,{'tableName':_0xa0fd('0xb'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0xa0fd('0xc'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
+var _0xc3b5=['rimraf','../../config/environment','exports','define','FaxApplication','fax_applications','utf8mb4','../../config/logger','api','moment','bluebird','request-promise','path'];(function(_0x22f530,_0x395c18){var _0x43b61a=function(_0xc99c58){while(--_0xc99c58){_0x22f530['push'](_0x22f530['shift']());}};_0x43b61a(++_0x395c18);}(_0xc3b5,0x6f));var _0x5c3b=function(_0x307ee7,_0x231d8a){_0x307ee7=_0x307ee7-0x0;var _0x410009=_0xc3b5[_0x307ee7];return _0x410009;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x5c3b('0x0'))(_0x5c3b('0x1'));var moment=require(_0x5c3b('0x2'));var BPromise=require(_0x5c3b('0x3'));var rp=require(_0x5c3b('0x4'));var fs=require('fs');var path=require(_0x5c3b('0x5'));var rimraf=require(_0x5c3b('0x6'));var config=require(_0x5c3b('0x7'));var attributes=require('./faxApplication.attributes');module[_0x5c3b('0x8')]=function(_0x6b8a1e,_0x56345e){return _0x6b8a1e[_0x5c3b('0x9')](_0x5c3b('0xa'),attributes,{'tableName':_0x5c3b('0xb'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x5c3b('0xc'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index 6d1d31f..6522d1f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5604=['../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','FaxApplication,\x20%s,\x20%s','debug','FaxApplication,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','FaxApplication','update','body','options','raw','where','attributes','UpdateFaxApplication','stringify','util','moment','randomstring','../../mysqldb','../../config/utils'];(function(_0x82da2,_0x5f0f32){var _0x1b2a2f=function(_0x84472c){while(--_0x84472c){_0x82da2['push'](_0x82da2['shift']());}};_0x1b2a2f(++_0x5f0f32);}(_0x5604,0x1db));var _0x4560=function(_0x51c819,_0xd812db){_0x51c819=_0x51c819-0x0;var _0x15c5d2=_0x5604[_0x51c819];return _0x15c5d2;};'use strict';var _=require('lodash');var util=require(_0x4560('0x0'));var moment=require(_0x4560('0x1'));var BPromise=require('bluebird');var rs=require(_0x4560('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x4560('0x3'))['db'];var utils=require(_0x4560('0x4'));var logger=require(_0x4560('0x5'))(_0x4560('0x6'));var config=require(_0x4560('0x7'));var jayson=require(_0x4560('0x8'));var client=jayson[_0x4560('0x9')][_0x4560('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x1d4c36,_0x5f286a,_0x21c851){return new BPromise(function(_0x239e7f,_0xfaf76){return client[_0x4560('0xb')](_0x1d4c36,_0x21c851)[_0x4560('0xc')](function(_0x408cf8){logger[_0x4560('0xd')](_0x4560('0xe'),_0x5f286a,'request\x20sent');logger[_0x4560('0xf')](_0x4560('0x10'),_0x5f286a,_0x4560('0x11'),JSON['stringify'](_0x408cf8));if(_0x408cf8[_0x4560('0x12')]){if(_0x408cf8[_0x4560('0x12')][_0x4560('0x13')]===0x1f4){logger[_0x4560('0x12')](_0x4560('0xe'),_0x5f286a,_0x408cf8[_0x4560('0x12')][_0x4560('0x14')]);return _0xfaf76(_0x408cf8[_0x4560('0x12')]['message']);}logger[_0x4560('0x12')](_0x4560('0xe'),_0x5f286a,_0x408cf8['error'][_0x4560('0x14')]);return _0x239e7f(_0x408cf8[_0x4560('0x12')][_0x4560('0x14')]);}else{logger[_0x4560('0xd')](_0x4560('0xe'),_0x5f286a,'request\x20sent');_0x239e7f(_0x408cf8[_0x4560('0x15')][_0x4560('0x14')]);}})[_0x4560('0x16')](function(_0x2f92ca){logger[_0x4560('0x12')]('FaxApplication,\x20%s,\x20%s',_0x5f286a,_0x2f92ca);_0xfaf76(_0x2f92ca);});});}exports['UpdateFaxApplication']=function(_0x300010){var _0x359bae=this;return new Promise(function(_0x2e1ee0,_0x391242){return db[_0x4560('0x17')][_0x4560('0x18')](_0x300010[_0x4560('0x19')],{'raw':_0x300010[_0x4560('0x1a')]?_0x300010[_0x4560('0x1a')][_0x4560('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x300010[_0x4560('0x1a')]?_0x300010[_0x4560('0x1a')][_0x4560('0x1c')]||null:null,'attributes':_0x300010[_0x4560('0x1a')]?_0x300010[_0x4560('0x1a')][_0x4560('0x1d')]||null:null,'limit':_0x300010[_0x4560('0x1a')]?_0x300010[_0x4560('0x1a')]['limit']||null:null})[_0x4560('0xc')](function(_0x2eb999){logger[_0x4560('0xd')](_0x4560('0x1e'),_0x300010);logger[_0x4560('0xf')](_0x4560('0x1e'),_0x300010,JSON[_0x4560('0x1f')](_0x2eb999));_0x2e1ee0(_0x2eb999);})['catch'](function(_0x3c675f){logger['error']('UpdateFaxApplication',_0x3c675f[_0x4560('0x14')],_0x300010);_0x391242(_0x359bae[_0x4560('0x12')](0x1f4,_0x3c675f[_0x4560('0x14')]));});});};
\ No newline at end of file
+var _0x3873=['FaxApplication,\x20%s,\x20%s,\x20%s','error','FaxApplication,\x20%s,\x20%s','message','FaxApplication','body','options','attributes','limit','info','debug','UpdateFaxApplication','stringify','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','request\x20sent'];(function(_0x54301e,_0x1bf9f2){var _0x3382aa=function(_0x1832d5){while(--_0x1832d5){_0x54301e['push'](_0x54301e['shift']());}};_0x3382aa(++_0x1bf9f2);}(_0x3873,0x65));var _0x3387=function(_0x4a4c4d,_0x27a5c3){_0x4a4c4d=_0x4a4c4d-0x0;var _0x2080ad=_0x3873[_0x4a4c4d];return _0x2080ad;};'use strict';var _=require('lodash');var util=require(_0x3387('0x0'));var moment=require(_0x3387('0x1'));var BPromise=require(_0x3387('0x2'));var rs=require(_0x3387('0x3'));var fs=require('fs');var Redis=require(_0x3387('0x4'));var db=require(_0x3387('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x3387('0x6'))(_0x3387('0x7'));var config=require(_0x3387('0x8'));var jayson=require(_0x3387('0x9'));var client=jayson[_0x3387('0xa')][_0x3387('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x46647a,_0x8d9af8,_0x4a81c1){return new BPromise(function(_0x16c881,_0x516fec){return client[_0x3387('0xc')](_0x46647a,_0x4a81c1)[_0x3387('0xd')](function(_0x5f2473){logger['info']('FaxApplication,\x20%s,\x20%s',_0x8d9af8,_0x3387('0xe'));logger['debug'](_0x3387('0xf'),_0x8d9af8,_0x3387('0xe'),JSON['stringify'](_0x5f2473));if(_0x5f2473[_0x3387('0x10')]){if(_0x5f2473[_0x3387('0x10')]['code']===0x1f4){logger['error'](_0x3387('0x11'),_0x8d9af8,_0x5f2473[_0x3387('0x10')][_0x3387('0x12')]);return _0x516fec(_0x5f2473[_0x3387('0x10')]['message']);}logger[_0x3387('0x10')](_0x3387('0x11'),_0x8d9af8,_0x5f2473[_0x3387('0x10')]['message']);return _0x16c881(_0x5f2473[_0x3387('0x10')]['message']);}else{logger['info'](_0x3387('0x11'),_0x8d9af8,_0x3387('0xe'));_0x16c881(_0x5f2473['result'][_0x3387('0x12')]);}})['catch'](function(_0x64ca43){logger[_0x3387('0x10')](_0x3387('0x11'),_0x8d9af8,_0x64ca43);_0x516fec(_0x64ca43);});});}exports['UpdateFaxApplication']=function(_0x5adaaa){var _0x212514=this;return new Promise(function(_0x313915,_0x118f03){return db[_0x3387('0x13')]['update'](_0x5adaaa[_0x3387('0x14')],{'raw':_0x5adaaa[_0x3387('0x15')]?_0x5adaaa[_0x3387('0x15')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5adaaa['options']?_0x5adaaa[_0x3387('0x15')]['where']||null:null,'attributes':_0x5adaaa[_0x3387('0x15')]?_0x5adaaa[_0x3387('0x15')][_0x3387('0x16')]||null:null,'limit':_0x5adaaa['options']?_0x5adaaa[_0x3387('0x15')][_0x3387('0x17')]||null:null})['then'](function(_0x56ab1e){logger[_0x3387('0x18')]('UpdateFaxApplication',_0x5adaaa);logger[_0x3387('0x19')](_0x3387('0x1a'),_0x5adaaa,JSON[_0x3387('0x1b')](_0x56ab1e));_0x313915(_0x56ab1e);})[_0x3387('0x1c')](function(_0x266641){logger['error'](_0x3387('0x1a'),_0x266641[_0x3387('0x12')],_0x5adaaa);_0x118f03(_0x212514[_0x3387('0x10')](0x1f4,_0x266641['message']));});});};
\ No newline at end of file
index 121bfff..430f7ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x236c=['exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./faxApplication.controller','get','isAuthenticated','index','show','put','update','delete','/:id'];(function(_0x2a5e6c,_0xaae743){var _0x91e0c8=function(_0x4729cf){while(--_0x4729cf){_0x2a5e6c['push'](_0x2a5e6c['shift']());}};_0x91e0c8(++_0xaae743);}(_0x236c,0x155));var _0xc236=function(_0x4a7c10,_0x1d5961){_0x4a7c10=_0x4a7c10-0x0;var _0x528ac3=_0x236c[_0x4a7c10];return _0x528ac3;};'use strict';var multer=require(_0xc236('0x0'));var util=require('util');var path=require(_0xc236('0x1'));var timeout=require(_0xc236('0x2'));var express=require(_0xc236('0x3'));var router=express[_0xc236('0x4')]();var auth=require(_0xc236('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xc236('0x6'));var controller=require(_0xc236('0x7'));router[_0xc236('0x8')]('/',auth[_0xc236('0x9')](),controller[_0xc236('0xa')]);router[_0xc236('0x8')]('/:id',auth[_0xc236('0x9')](),controller[_0xc236('0xb')]);router['post']('/',auth['isAuthenticated'](),controller['create']);router[_0xc236('0xc')]('/:id',auth[_0xc236('0x9')](),controller[_0xc236('0xd')]);router[_0xc236('0xe')](_0xc236('0xf'),auth[_0xc236('0x9')](),controller['destroy']);module[_0xc236('0x10')]=router;
\ No newline at end of file
+var _0xeffd=['../../config/environment','./faxApplication.controller','get','isAuthenticated','index','/:id','show','post','put','delete','destroy','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x35dadd,_0x3ed50f){var _0x2728ed=function(_0x80656f){while(--_0x80656f){_0x35dadd['push'](_0x35dadd['shift']());}};_0x2728ed(++_0x3ed50f);}(_0xeffd,0x6b));var _0xdeff=function(_0x2a5c2b,_0x1ef7a6){_0x2a5c2b=_0x2a5c2b-0x0;var _0xb4ce07=_0xeffd[_0x2a5c2b];return _0xb4ce07;};'use strict';var multer=require(_0xdeff('0x0'));var util=require('util');var path=require(_0xdeff('0x1'));var timeout=require(_0xdeff('0x2'));var express=require(_0xdeff('0x3'));var router=express[_0xdeff('0x4')]();var auth=require(_0xdeff('0x5'));var interaction=require(_0xdeff('0x6'));var config=require(_0xdeff('0x7'));var controller=require(_0xdeff('0x8'));router[_0xdeff('0x9')]('/',auth[_0xdeff('0xa')](),controller[_0xdeff('0xb')]);router[_0xdeff('0x9')](_0xdeff('0xc'),auth[_0xdeff('0xa')](),controller[_0xdeff('0xd')]);router[_0xdeff('0xe')]('/',auth[_0xdeff('0xa')](),controller['create']);router[_0xdeff('0xf')](_0xdeff('0xc'),auth[_0xdeff('0xa')](),controller['update']);router[_0xdeff('0x10')](_0xdeff('0xc'),auth[_0xdeff('0xa')](),controller[_0xdeff('0x11')]);module[_0xdeff('0x12')]=router;
\ No newline at end of file
index ae59434..59da706 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf1b1=['out','sequelize','exports','BOOLEAN','DATE','STRING','ENUM'];(function(_0x18cc1e,_0x541e17){var _0x46a42f=function(_0x53c9be){while(--_0x53c9be){_0x18cc1e['push'](_0x18cc1e['shift']());}};_0x46a42f(++_0x541e17);}(_0xf1b1,0x189));var _0x1f1b=function(_0x42ba3b,_0x355441){_0x42ba3b=_0x42ba3b-0x0;var _0x17634b=_0xf1b1[_0x42ba3b];return _0x17634b;};'use strict';var Sequelize=require(_0x1f1b('0x0'));module[_0x1f1b('0x1')]={'closed':{'type':Sequelize[_0x1f1b('0x2')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0x1f1b('0x3')]},'disposition':{'type':Sequelize['STRING']},'note':{'type':Sequelize[_0x1f1b('0x4')]},'read1stAt':{'type':Sequelize[_0x1f1b('0x3')]},'fax':{'type':Sequelize[_0x1f1b('0x4')]},'firstMsgDirection':{'type':Sequelize[_0x1f1b('0x5')]('in',_0x1f1b('0x6')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0x1f1b('0x3')]},'lastMsgDirection':{'type':Sequelize[_0x1f1b('0x5')]('in','out'),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
+var _0x81cf=['BOOLEAN','DATE','STRING','ENUM','out','exports'];(function(_0xa9a245,_0x2a0387){var _0x2d0eaa=function(_0x2bba86){while(--_0x2bba86){_0xa9a245['push'](_0xa9a245['shift']());}};_0x2d0eaa(++_0x2a0387);}(_0x81cf,0x89));var _0xf81c=function(_0x1f4be1,_0x111849){_0x1f4be1=_0x1f4be1-0x0;var _0x45e879=_0x81cf[_0x1f4be1];return _0x45e879;};'use strict';var Sequelize=require('sequelize');module[_0xf81c('0x0')]={'closed':{'type':Sequelize[_0xf81c('0x1')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0xf81c('0x2')]},'disposition':{'type':Sequelize[_0xf81c('0x3')]},'note':{'type':Sequelize[_0xf81c('0x3')]},'read1stAt':{'type':Sequelize[_0xf81c('0x2')]},'fax':{'type':Sequelize[_0xf81c('0x3')]},'firstMsgDirection':{'type':Sequelize[_0xf81c('0x4')]('in',_0xf81c('0x5')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0xf81c('0x2')]},'lastMsgDirection':{'type':Sequelize[_0xf81c('0x4')]('in',_0xf81c('0x5')),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
index 2227f68..6a6829c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa88=['cm_contacts','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL','users','fax_accounts','expr','advancedFilter','parse','createdAt','startOf','utc','format','endOf','day','and','condition','TagId','Messages.count','isArray','value','\x20=\x20?','c.firstName','\x20LIKE\x20?','tableAlias','\x20>\x20?','\x20IN\x20?','LIKE','ContactId','c.lastName','c.email','\x20<\x20?','map','filter','isNil','FaxAccountId','i.FaxAccountId\x20IN\x20?','concat','$gte','$lte','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','\x20IS\x20NULL','replace','i.id\x20LIKE\x20?','i.fax\x20LIKE\x20?','CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?','DESC','group','Sequelize','QueryTypes','SELECT','clone','read','toString','having','`Messages.count`\x20=\x200','`Messages.count`\x20>\x200','tag','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','fax_interaction_has_tags','it.FaxInteractionId\x20=\x20i.id','t.id\x20=\x20it.TagId','mail_interaction_has_tags','it.MailInteractionId\x20=\x20i.id','t.id\x20IN\x20?','%s\x20=\x200','%s\x20>\x200','sequelize','keyBy','merge','Account.key','i.*','Contact.firstName','Contact.email','c.phone','Contact.phone','c.mobile','c.fax','ui.FaxInteractionId\x20IN\x20?','groupBy','FaxInteractionId','rows','show','rawAttributes','includeAll','include','find','create','body','params','describe','ids','omit','getMessages','findOne','sort','YYYY-MM-DD\x20HH:mm:ss','options','findAll','addTags','spread','Tag','emit','removeTags','download','unix','join','server','files','root','interaction-%s.zip','Attachment','mkdirSync','createReadStream','pipe','createWriteStream','basename','unlinkSync','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','defaults','redis','localhost','./faxInteraction.socket','register','status','end','json','count','offset','limit','set','apply','reject','then','sendStatus','stack','name','send','unreadMessages','FaxMessage','Users','TagIds','Tags','split','forEach','push','catch','index','FaxInteraction','model','keys','filters','intersection','query','fields','attributes','length','hasOwnProperty','nolimit','order','pick','select','field','color','from','tools_tags','COUNT(*)','fax_messages','where','me.FaxInteractionId\x20=\x20i.id','me.direction\x20=\x20\x27in\x27','ui.FaxInteractionId','fax_interactions','left_join'];(function(_0x4344e9,_0x2b0c07){var _0x3322b4=function(_0x58a597){while(--_0x58a597){_0x4344e9['push'](_0x4344e9['shift']());}};_0x3322b4(++_0x2b0c07);}(_0xaa88,0x137));var _0x8aa8=function(_0x592df4,_0x4e719b){_0x592df4=_0x592df4-0x0;var _0x3b4fe4=_0xaa88[_0x592df4];return _0x3b4fe4;};'use strict';var pdf=require(_0x8aa8('0x0'));var emlformat=require(_0x8aa8('0x1'));var rimraf=require(_0x8aa8('0x2'));var zipdir=require(_0x8aa8('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x8aa8('0x4'));var moment=require(_0x8aa8('0x5'));var BPromise=require(_0x8aa8('0x6'));var Mustache=require(_0x8aa8('0x7'));var util=require(_0x8aa8('0x8'));var path=require(_0x8aa8('0x9'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x8aa8('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x8aa8('0xb'));var crypto=require(_0x8aa8('0xc'));var jsforce=require(_0x8aa8('0xd'));var deskjs=require(_0x8aa8('0xe'));var toCsv=require('to-csv');var querystring=require(_0x8aa8('0xf'));var Papa=require(_0x8aa8('0x10'));var Redis=require(_0x8aa8('0x11'));var authService=require('../../components/auth/service');var qs=require(_0x8aa8('0x12'));var hardwareService=require(_0x8aa8('0x13'));var logger=require(_0x8aa8('0x14'))(_0x8aa8('0x15'));var utils=require('../../config/utils');var config=require(_0x8aa8('0x16'));var db=require(_0x8aa8('0x17'))['db'];config['redis']=_[_0x8aa8('0x18')](config[_0x8aa8('0x19')],{'host':_0x8aa8('0x1a'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x8aa8('0x19')]));require(_0x8aa8('0x1b'))[_0x8aa8('0x1c')](socket);function respondWithStatusCode(_0x4b686e,_0x391642){_0x391642=_0x391642||0xcc;return function(_0x4af534){if(_0x4af534){return _0x4b686e['sendStatus'](_0x391642);}return _0x4b686e[_0x8aa8('0x1d')](_0x391642)[_0x8aa8('0x1e')]();};}function respondWithResult(_0xae81a0,_0xa6c2af){_0xa6c2af=_0xa6c2af||0xc8;return function(_0x42a6a4){if(_0x42a6a4){return _0xae81a0[_0x8aa8('0x1d')](_0xa6c2af)[_0x8aa8('0x1f')](_0x42a6a4);}};}function respondWithFilteredResult(_0xd59fb8,_0x20d303){return function(_0x4e8ce3){if(_0x4e8ce3){var _0x4843f5=_0x4e8ce3[_0x8aa8('0x20')],_0x2c1b9a=_0x20d303['offset'],_0x49d80d=_0x20d303[_0x8aa8('0x21')]+_0x20d303[_0x8aa8('0x22')],_0x557adc;if(_0x49d80d>=_0x4843f5){_0x49d80d=_0x4843f5;_0x557adc=0xc8;}else{_0x557adc=0xce;}_0xd59fb8[_0x8aa8('0x1d')](_0x557adc);return _0xd59fb8[_0x8aa8('0x23')]('Content-Range',_0x2c1b9a+'-'+_0x49d80d+'/'+_0x4843f5)[_0x8aa8('0x1f')](_0x4e8ce3);}return null;};}function patchUpdates(_0x36c445){return function(_0x2825fd){try{jsonpatch[_0x8aa8('0x24')](_0x2825fd,_0x36c445,!![]);}catch(_0x4c754e){return BPromise[_0x8aa8('0x25')](_0x4c754e);}return _0x2825fd['save']();};}function saveUpdates(_0x26cf63,_0x4cc455){return function(_0x1fdadd){if(_0x1fdadd){return _0x1fdadd['update'](_0x26cf63)[_0x8aa8('0x26')](function(_0x557e4e){return _0x557e4e;});}return null;};}function removeEntity(_0x65945b,_0x40adb5){return function(_0x3ca7dc){if(_0x3ca7dc){return _0x3ca7dc['destroy']()[_0x8aa8('0x26')](function(){_0x65945b[_0x8aa8('0x1d')](0xcc)[_0x8aa8('0x1e')]();});}};}function handleEntityNotFound(_0x547a7b,_0x57acd2){return function(_0x2d1508){if(!_0x2d1508){_0x547a7b[_0x8aa8('0x27')](0x194);}return _0x2d1508;};}function handleError(_0x2f91f3,_0x3a3c7a){_0x3a3c7a=_0x3a3c7a||0x1f4;return function(_0x24143e){logger['error'](_0x24143e[_0x8aa8('0x28')]);if(_0x24143e['name']){delete _0x24143e[_0x8aa8('0x29')];}_0x2f91f3[_0x8aa8('0x1d')](_0x3a3c7a)[_0x8aa8('0x2a')](_0x24143e);};}function getInteractionUnreadMessages(_0x519ac0){return new BPromise(function(_0x4c5c5c,_0x10810d){try{if(_0x519ac0['closed']){_0x519ac0[_0x8aa8('0x2b')]=0x0;_0x4c5c5c(_0x519ac0);}else{return db[_0x8aa8('0x2c')][_0x8aa8('0x20')]({'where':{'FaxInteractionId':_0x519ac0['id'],'direction':'in','read':![]}})[_0x8aa8('0x26')](function(_0xe07a83){_0x519ac0['unreadMessages']=_0xe07a83;_0x4c5c5c(_0x519ac0);});}}catch(_0x267f4c){_0x10810d(_0x267f4c);}});}function getInteractionUsers(_0x3003e5,_0x4b67f5){return new BPromise(function(_0x99f74e,_0xee2f61){try{if(_0x4b67f5[_0x3003e5['id']]){_0x3003e5[_0x8aa8('0x2d')]=_['map'](_0x4b67f5[_0x3003e5['id']],function(_0x28182b){return{'id':_0x28182b['id']};});}}catch(_0x3a0dce){_0xee2f61(_0x3a0dce);}_0x99f74e(_0x3003e5);});}function getInteractionTags(_0x23a37c,_0x423b02){return new BPromise(function(_0x1313f8,_0x356be7){try{if(_0x23a37c[_0x8aa8('0x2e')]){_0x23a37c[_0x8aa8('0x2f')]=[];_0x23a37c[_0x8aa8('0x2e')][_0x8aa8('0x30')](',')[_0x8aa8('0x31')](function(_0x5bf1a7){_0x23a37c['Tags'][_0x8aa8('0x32')](_0x423b02[_0x5bf1a7]);});}delete _0x23a37c[_0x8aa8('0x2e')];}catch(_0x201d8d){_0x356be7(_0x201d8d);}_0x1313f8(_0x23a37c);});}function updateFaxInteraction(_0x106ccb,_0xbe7639,_0x2f27cd){return new BPromise(function(_0x4b6f91,_0x4b8118){return getInteractionUnreadMessages(_0x106ccb)[_0x8aa8('0x26')](function(_0x5755b5){return getInteractionUsers(_0x5755b5,_0x2f27cd);})[_0x8aa8('0x26')](function(_0x2c5c84){return getInteractionTags(_0x2c5c84,_0xbe7639);})[_0x8aa8('0x26')](function(_0x59041c){_0x4b6f91(_0x59041c);})[_0x8aa8('0x33')](function(_0x38b8d4){_0x4b8118(_0x38b8d4);});});}exports[_0x8aa8('0x34')]=function(_0x5c28fa,_0x526779){var _0x22b511={},_0x1f90fc={},_0x52f87d={'count':0x0,'rows':[]};var _0x24eb18=db[_0x8aa8('0x35')]['rawAttributes'];_0x1f90fc[_0x8aa8('0x36')]=_['keys'](_0x24eb18);_0x1f90fc['query']=_[_0x8aa8('0x37')](_0x5c28fa['query']);_0x1f90fc[_0x8aa8('0x38')]=_[_0x8aa8('0x39')](_0x1f90fc[_0x8aa8('0x36')],_0x1f90fc[_0x8aa8('0x3a')]);_0x22b511['attributes']=_[_0x8aa8('0x39')](_0x1f90fc[_0x8aa8('0x36')],qs['fields'](_0x5c28fa[_0x8aa8('0x3a')][_0x8aa8('0x3b')]));_0x22b511['attributes']=_0x22b511[_0x8aa8('0x3c')][_0x8aa8('0x3d')]?_0x22b511[_0x8aa8('0x3c')]:_0x1f90fc[_0x8aa8('0x36')];if(!_0x5c28fa[_0x8aa8('0x3a')][_0x8aa8('0x3e')](_0x8aa8('0x3f'))){_0x22b511[_0x8aa8('0x22')]=qs[_0x8aa8('0x22')](_0x5c28fa[_0x8aa8('0x3a')][_0x8aa8('0x22')]);_0x22b511[_0x8aa8('0x21')]=qs[_0x8aa8('0x21')](_0x5c28fa[_0x8aa8('0x3a')][_0x8aa8('0x21')]);}_0x22b511[_0x8aa8('0x40')]=qs['sort'](_0x5c28fa[_0x8aa8('0x3a')]['sort']);_0x22b511['where']=qs['filters'](_[_0x8aa8('0x41')](_0x5c28fa['query'],_0x1f90fc['filters']));var _0x336cf9=[];var _0x4da4d8=squel[_0x8aa8('0x42')]()['field']('id')['field'](_0x8aa8('0x29'))[_0x8aa8('0x43')](_0x8aa8('0x44'))[_0x8aa8('0x45')](_0x8aa8('0x46'));var _0x34f440=squel[_0x8aa8('0x42')]()['field'](_0x8aa8('0x47'))['from'](_0x8aa8('0x48'),'me')[_0x8aa8('0x49')](_0x8aa8('0x4a'))[_0x8aa8('0x49')](_0x8aa8('0x4b'))[_0x8aa8('0x49')]('me.read\x20=\x20false');var _0x56e13f=squel[_0x8aa8('0x42')]()[_0x8aa8('0x43')]('u.id')[_0x8aa8('0x43')](_0x8aa8('0x4c'))[_0x8aa8('0x45')]('user_has_fax_interactions','ui')['left_join']('users','u','u.id\x20=\x20ui.UserId');var _0x2bd2ae=squel[_0x8aa8('0x42')]()['from'](_0x8aa8('0x4d'),'i')[_0x8aa8('0x4e')](_0x8aa8('0x4f'),'c',_0x8aa8('0x50'))[_0x8aa8('0x4e')](_0x8aa8('0x51'),'o','o.id\x20=\x20i.UserId')['left_join'](_0x8aa8('0x52'),'a','a.id\x20=\x20i.FaxAccountId')[_0x8aa8('0x4e')]('fax_messages','me',_0x8aa8('0x4a'));var _0x263620=squel[_0x8aa8('0x53')]();if(_0x5c28fa[_0x8aa8('0x3a')][_0x8aa8('0x54')]){var _0x839d86=JSON[_0x8aa8('0x55')](_0x5c28fa[_0x8aa8('0x3a')][_0x8aa8('0x54')]);_[_0x8aa8('0x37')](_0x839d86)[_0x8aa8('0x31')](function(_0x344c42){var _0x4fc51d=_0x839d86[_0x344c42];if(_0x344c42===_0x8aa8('0x56')){var _0x548b6f=moment(_0x4fc51d['value']['dateStart'])[_0x8aa8('0x57')]('day')[_0x8aa8('0x58')]()[_0x8aa8('0x59')]();var _0x7e3227=moment(_0x7e3227)['utc']()[_0x8aa8('0x5a')](_0x8aa8('0x5b'))[_0x8aa8('0x59')]();_0x263620[_0x8aa8('0x5c')]('i.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x548b6f,_0x7e3227);}else{if(_['isArray'](_0x4fc51d[_0x8aa8('0x5d')])){_0x4fc51d[_0x8aa8('0x5d')][_0x8aa8('0x31')](function(_0x110d3f){switch(_0x4fc51d['condition']['value']){case'IS':if(_0x344c42!==_0x8aa8('0x5e')&&_0x344c42!==_0x8aa8('0x5f')){if(_[_0x8aa8('0x60')](_0x4fc51d['value'])&&_0x4fc51d[_0x8aa8('0x61')][_0x8aa8('0x3d')]>0x1){_0x263620['and'](_0x4fc51d['tableAlias']+'.'+_0x344c42+'\x20IN\x20?',_0x4fc51d['value']);}else{_0x263620[_0x8aa8('0x5c')](_0x4fc51d['tableAlias']+'.'+_0x344c42+_0x8aa8('0x62'),_0x4fc51d[_0x8aa8('0x61')][0x0]);}}break;case'=':_0x263620['and'](_0x4fc51d['tableAlias']+'.'+_0x344c42+_0x8aa8('0x62'),_0x4fc51d[_0x8aa8('0x61')]);break;case'LIKE':if(_0x344c42==='ContactId'){_0x263620['and'](_0x8aa8('0x63')+_0x8aa8('0x64'),'%'+_0x4fc51d['value']+'%');_0x263620['or']('c.lastName'+_0x8aa8('0x64'),'%'+_0x4fc51d[_0x8aa8('0x61')]+'%');_0x263620['or']('c.email'+_0x8aa8('0x64'),'%'+_0x4fc51d[_0x8aa8('0x61')]+'%');}else{_0x263620['and'](_0x4fc51d[_0x8aa8('0x65')]+'.'+_0x344c42+'\x20LIKE\x20?','%'+_0x4fc51d[_0x8aa8('0x61')]+'%');}break;case'>':_0x263620['and'](_0x4fc51d[_0x8aa8('0x65')]+'.'+_0x344c42+_0x8aa8('0x66'),_0x4fc51d[_0x8aa8('0x61')]);break;case'<':_0x263620[_0x8aa8('0x5c')](_0x4fc51d[_0x8aa8('0x65')]+'.'+_0x344c42+'\x20<\x20?',_0x4fc51d[_0x8aa8('0x61')]);break;}});}else{switch(_0x4fc51d[_0x8aa8('0x5d')][_0x8aa8('0x61')]){case'IS':if(_0x344c42!==_0x8aa8('0x5e')&&_0x344c42!=='Messages.count'){if(_[_0x8aa8('0x60')](_0x4fc51d[_0x8aa8('0x61')])&&_0x4fc51d['value'][_0x8aa8('0x3d')]>0x1){_0x263620[_0x8aa8('0x5c')](_0x4fc51d[_0x8aa8('0x65')]+'.'+_0x344c42+_0x8aa8('0x67'),_0x4fc51d[_0x8aa8('0x61')]);}else{_0x263620[_0x8aa8('0x5c')](_0x4fc51d[_0x8aa8('0x65')]+'.'+_0x344c42+'\x20=\x20?',_0x4fc51d['value'][0x0]);}}break;case'=':_0x263620['and'](_0x4fc51d[_0x8aa8('0x65')]+'.'+_0x344c42+_0x8aa8('0x62'),_0x4fc51d[_0x8aa8('0x61')]);break;case _0x8aa8('0x68'):if(_0x344c42===_0x8aa8('0x69')){_0x263620[_0x8aa8('0x5c')](_0x8aa8('0x63')+_0x8aa8('0x64'),'%'+_0x4fc51d[_0x8aa8('0x61')]+'%');_0x263620['or'](_0x8aa8('0x6a')+_0x8aa8('0x64'),'%'+_0x4fc51d[_0x8aa8('0x61')]+'%');_0x263620['or'](_0x8aa8('0x6b')+_0x8aa8('0x64'),'%'+_0x4fc51d[_0x8aa8('0x61')]+'%');}else{_0x263620[_0x8aa8('0x5c')](_0x4fc51d[_0x8aa8('0x65')]+'.'+_0x344c42+_0x8aa8('0x64'),'%'+_0x4fc51d[_0x8aa8('0x61')]+'%');}break;case'>':_0x263620['and'](_0x4fc51d[_0x8aa8('0x65')]+'.'+_0x344c42+_0x8aa8('0x66'),_0x4fc51d[_0x8aa8('0x61')]);break;case'<':_0x263620[_0x8aa8('0x5c')](_0x4fc51d[_0x8aa8('0x65')]+'.'+_0x344c42+_0x8aa8('0x6c'),_0x4fc51d[_0x8aa8('0x61')]);break;}}}});}else{var _0x41ce34=_(Object[_0x8aa8('0x37')](_0x5c28fa['query']))[_0x8aa8('0x6d')](function(_0x3d2c0e){return _0x24eb18['hasOwnProperty'](_0x3d2c0e)?_0x3d2c0e:undefined;})[_0x8aa8('0x6e')](function(_0x5d72d0){return!_[_0x8aa8('0x6f')](_0x5d72d0);})[_0x8aa8('0x61')]();if(!_['isEmpty'](_0x41ce34)){_0x41ce34[_0x8aa8('0x31')](function(_0x16036a){if(_0x16036a===_0x8aa8('0x70')){_0x2bd2ae[_0x8aa8('0x49')](_0x8aa8('0x71'),[][_0x8aa8('0x72')](_0x5c28fa[_0x8aa8('0x3a')][_0x16036a]));}else if(_0x16036a==='createdAt'){var _0x35fb7a=JSON[_0x8aa8('0x55')](_0x5c28fa[_0x8aa8('0x3a')][_0x16036a])[_0x8aa8('0x73')];var _0x4f72a4=JSON['parse'](_0x5c28fa[_0x8aa8('0x3a')][_0x16036a])[_0x8aa8('0x74')];_0x2bd2ae[_0x8aa8('0x49')](_0x8aa8('0x75'),_0x35fb7a,_0x4f72a4);}else{if(_0x5c28fa['query'][_0x16036a]==='null'){_0x2bd2ae['where']('i.'+_0x16036a+_0x8aa8('0x76'));}else{_0x2bd2ae[_0x8aa8('0x49')]('i.'+_0x16036a+_0x8aa8('0x62'),_0x5c28fa[_0x8aa8('0x3a')][_0x16036a]);}}});}if(_0x5c28fa[_0x8aa8('0x3a')][_0x8aa8('0x6e')]){var _0x35e7c4=_0x5c28fa[_0x8aa8('0x3a')][_0x8aa8('0x6e')]['replace']('\x5c','\x5c\x5c')[_0x8aa8('0x77')]('\x27\x27','\x27\x27\x27\x27');if(qs['isNumeric'](_0x35e7c4)){_0x263620['or'](_0x8aa8('0x78'),_0x35e7c4+'%')['or'](_0x8aa8('0x79'),_0x35e7c4+'%');}_0x263620['or'](_0x8aa8('0x7a'),_0x35e7c4+'%');}}_0x2bd2ae['where'](_0x263620);if(_0x22b511[_0x8aa8('0x40')]){_0x22b511['order'][_0x8aa8('0x31')](function(_0x18ca34){_0x2bd2ae[_0x8aa8('0x40')]('i.'+_0x18ca34[0x0],_0x18ca34[0x1]===_0x8aa8('0x7b')?![]:!![]);});}_0x2bd2ae[_0x8aa8('0x7c')]('i.id');var _0x5d504c={'type':db[_0x8aa8('0x7d')][_0x8aa8('0x7e')][_0x8aa8('0x7f')],'raw':!![]};var _0x21f3f8=_0x2bd2ae[_0x8aa8('0x80')]()[_0x8aa8('0x43')](_0x8aa8('0x47'));if(!_0x5c28fa[_0x8aa8('0x3a')]['advancedFilter']){if(_0x5c28fa[_0x8aa8('0x3a')][_0x8aa8('0x81')]){if(_0x5c28fa['query']['read']==0x1){_0x21f3f8[_0x8aa8('0x49')](util[_0x8aa8('0x59')]('%s\x20=\x200',_0x34f440[_0x8aa8('0x82')]()));_0x2bd2ae[_0x8aa8('0x83')](_0x8aa8('0x84'));}else{_0x21f3f8['where'](util['format']('%s\x20>\x200',_0x34f440[_0x8aa8('0x82')]()));_0x2bd2ae[_0x8aa8('0x83')](_0x8aa8('0x85'));}}if(_0x5c28fa[_0x8aa8('0x3a')]['tag']){var _0x4274dc=_[_0x8aa8('0x60')](_0x5c28fa[_0x8aa8('0x3a')][_0x8aa8('0x86')])?_0x5c28fa['query'][_0x8aa8('0x86')]:new Array(_0x5c28fa['query']['tag']);var _0x430bb1=squel['expr']();_0x4274dc[_0x8aa8('0x31')](function(_0x34a5a9){_0x430bb1['or'](_0x8aa8('0x87'),'%,'+_0x34a5a9+',%');});_0x2bd2ae['having'](_0x430bb1);_0x21f3f8[_0x8aa8('0x4e')](_0x8aa8('0x88'),'it',_0x8aa8('0x89'));_0x21f3f8[_0x8aa8('0x4e')](_0x8aa8('0x46'),'t',_0x8aa8('0x8a'));_0x21f3f8['where']('t.id\x20IN\x20?',_0x4274dc);}}else{var _0x839d86=JSON['parse'](_0x5c28fa['query']['advancedFilter']);_['keys'](_0x839d86)['forEach'](function(_0x33392b){var _0x26092c=_0x839d86[_0x33392b];if(_0x33392b===_0x8aa8('0x5e')){var _0x1ab514=_0x26092c[_0x8aa8('0x61')];var _0xb9fb0=squel[_0x8aa8('0x53')]();_0x1ab514[_0x8aa8('0x31')](function(_0x1582bd){_0xb9fb0['or'](_0x8aa8('0x87'),'%,'+_0x1582bd+',%');});_0x2bd2ae['having'](_0xb9fb0);_0x21f3f8['left_join'](_0x8aa8('0x8b'),'it',_0x8aa8('0x8c'));_0x21f3f8[_0x8aa8('0x4e')](_0x8aa8('0x46'),'t',_0x8aa8('0x8a'));_0x21f3f8[_0x8aa8('0x49')](_0x8aa8('0x8d'),_0x1ab514);}else if(_0x33392b===_0x8aa8('0x5f')){if(_0x26092c['value'][_0x8aa8('0x3d')]===0x1){if(_0x26092c[_0x8aa8('0x61')][0x0]===0x1){_0x21f3f8[_0x8aa8('0x49')](util['format'](_0x8aa8('0x8e'),_0x34f440[_0x8aa8('0x82')]()));_0x2bd2ae['having'](_0x8aa8('0x84'));}else{_0x21f3f8[_0x8aa8('0x49')](util[_0x8aa8('0x59')](_0x8aa8('0x8f'),_0x34f440[_0x8aa8('0x82')]()));_0x2bd2ae['having'](_0x8aa8('0x85'));}}}});}db[_0x8aa8('0x90')][_0x8aa8('0x3a')](_0x21f3f8['toString'](),_0x5d504c)[_0x8aa8('0x26')](function(_0x13e9c9){_0x52f87d[_0x8aa8('0x20')]=_0x13e9c9[_0x8aa8('0x3d')];if(_0x52f87d[_0x8aa8('0x20')]===0x0)return[];return db[_0x8aa8('0x90')]['query'](_0x4da4d8[_0x8aa8('0x82')](),_0x5d504c)['then'](function(_0x1df869){_0x336cf9=_[_0x8aa8('0x91')](_0x1df869,'id');_0x5d504c=_[_0x8aa8('0x92')](_0x5d504c,{'model':db[_0x8aa8('0x35')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x2bd2ae[_0x8aa8('0x43')]('a.key',_0x8aa8('0x93'));_0x2bd2ae[_0x8aa8('0x43')](_0x8aa8('0x94'));_0x2bd2ae[_0x8aa8('0x43')](_0x8aa8('0x63'),_0x8aa8('0x95'));_0x2bd2ae[_0x8aa8('0x43')]('c.lastName','Contact.lastName');_0x2bd2ae[_0x8aa8('0x43')](_0x8aa8('0x6b'),_0x8aa8('0x96'));_0x2bd2ae[_0x8aa8('0x43')](_0x8aa8('0x97'),_0x8aa8('0x98'));_0x2bd2ae[_0x8aa8('0x43')](_0x8aa8('0x99'),'Contact.mobile');_0x2bd2ae[_0x8aa8('0x43')](_0x8aa8('0x9a'),'Contact.fax');_0x2bd2ae[_0x8aa8('0x43')]('GROUP_CONCAT(DISTINCT\x20t.id)',_0x8aa8('0x2e'));_0x2bd2ae[_0x8aa8('0x4e')](_0x8aa8('0x88'),'it',_0x8aa8('0x89'));_0x2bd2ae[_0x8aa8('0x4e')](_0x8aa8('0x46'),'t','t.id\x20=\x20it.TagId');_0x2bd2ae[_0x8aa8('0x22')](_0x22b511[_0x8aa8('0x22')]);_0x2bd2ae[_0x8aa8('0x21')](_0x22b511[_0x8aa8('0x21')]);return db[_0x8aa8('0x90')]['query'](_0x2bd2ae[_0x8aa8('0x82')](),_0x5d504c);})[_0x8aa8('0x26')](function(_0x111254){_0x56e13f[_0x8aa8('0x49')](_0x8aa8('0x9b'),_[_0x8aa8('0x6d')](_0x111254,'id'));return db[_0x8aa8('0x90')][_0x8aa8('0x3a')](_0x56e13f[_0x8aa8('0x82')](),_0x5d504c)[_0x8aa8('0x26')](function(_0x55f52d){var _0x57ea52=_[_0x8aa8('0x9c')](_0x55f52d,_0x8aa8('0x9d'));var _0x44919b=[];_0x111254[_0x8aa8('0x31')](function(_0x1683b3){_0x44919b[_0x8aa8('0x32')](updateFaxInteraction(_0x1683b3,_0x336cf9,_0x57ea52));});return BPromise['all'](_0x44919b);});});})[_0x8aa8('0x26')](function(_0x52d477){_0x52f87d[_0x8aa8('0x9e')]=_0x52d477;return _0x52f87d;})[_0x8aa8('0x26')](respondWithFilteredResult(_0x526779,_0x22b511))[_0x8aa8('0x33')](handleError(_0x526779,null));};exports[_0x8aa8('0x9f')]=function(_0x50b8a7,_0x41b117){var _0x4b98a7={'raw':![],'where':{'id':_0x50b8a7['params']['id']}},_0x481a72={};_0x481a72[_0x8aa8('0x36')]=_['keys'](db['FaxInteraction'][_0x8aa8('0xa0')]);_0x481a72[_0x8aa8('0x3a')]=_['keys'](_0x50b8a7[_0x8aa8('0x3a')]);_0x481a72[_0x8aa8('0x38')]=_[_0x8aa8('0x39')](_0x481a72[_0x8aa8('0x36')],_0x481a72['query']);_0x4b98a7[_0x8aa8('0x3c')]=_[_0x8aa8('0x39')](_0x481a72[_0x8aa8('0x36')],qs[_0x8aa8('0x3b')](_0x50b8a7[_0x8aa8('0x3a')][_0x8aa8('0x3b')]));_0x4b98a7[_0x8aa8('0x3c')]=_0x4b98a7[_0x8aa8('0x3c')][_0x8aa8('0x3d')]?_0x4b98a7[_0x8aa8('0x3c')]:_0x481a72['model'];if(_0x50b8a7[_0x8aa8('0x3a')][_0x8aa8('0xa1')]){_0x4b98a7[_0x8aa8('0xa2')]=[{'all':!![]}];}_0x4b98a7=_[_0x8aa8('0x92')]({},_0x4b98a7,_0x50b8a7['options']);return db[_0x8aa8('0x35')][_0x8aa8('0xa3')](_0x4b98a7)[_0x8aa8('0x26')](handleEntityNotFound(_0x41b117,null))[_0x8aa8('0x26')](respondWithResult(_0x41b117,null))['catch'](handleError(_0x41b117,null));};exports[_0x8aa8('0xa4')]=function(_0xb8456e,_0x4977e7){return db['FaxInteraction'][_0x8aa8('0xa4')](_0xb8456e['body'],{})[_0x8aa8('0x26')](respondWithResult(_0x4977e7,0xc9))['catch'](handleError(_0x4977e7,null));};exports['update']=function(_0x3bb148,_0x195d10){if(_0x3bb148[_0x8aa8('0xa5')]['id']){delete _0x3bb148[_0x8aa8('0xa5')]['id'];}return db['FaxInteraction'][_0x8aa8('0xa3')]({'where':{'id':_0x3bb148[_0x8aa8('0xa6')]['id']}})[_0x8aa8('0x26')](handleEntityNotFound(_0x195d10,null))[_0x8aa8('0x26')](saveUpdates(_0x3bb148[_0x8aa8('0xa5')],null))[_0x8aa8('0x26')](respondWithResult(_0x195d10,null))['catch'](handleError(_0x195d10,null));};exports['destroy']=function(_0x1dc515,_0x1075cb){return db[_0x8aa8('0x35')][_0x8aa8('0xa3')]({'where':{'id':_0x1dc515[_0x8aa8('0xa6')]['id']}})['then'](handleEntityNotFound(_0x1075cb,null))['then'](removeEntity(_0x1075cb,null))['catch'](handleError(_0x1075cb,null));};exports['describe']=function(_0x3f9075,_0x12a9bf){return db['FaxInteraction'][_0x8aa8('0xa7')]()[_0x8aa8('0x26')](respondWithResult(_0x12a9bf,null))[_0x8aa8('0x33')](handleError(_0x12a9bf,null));};exports['addMessage']=function(_0x4e1165,_0x10dc20,_0x2d600d){return db[_0x8aa8('0x2c')]['find']({'where':{'id':_0x4e1165[_0x8aa8('0xa6')]['id']}})['then'](handleEntityNotFound(_0x10dc20,null))[_0x8aa8('0x26')](function(_0xc35a92){if(_0xc35a92){return _0xc35a92['addMessage'](_0x4e1165[_0x8aa8('0xa5')][_0x8aa8('0xa8')],_[_0x8aa8('0xa9')](_0x4e1165[_0x8aa8('0xa5')],['ids','id'])||{});}})[_0x8aa8('0x26')](respondWithResult(_0x10dc20,null))['catch'](handleError(_0x10dc20,null));};exports[_0x8aa8('0xaa')]=function(_0x7f67c3,_0x2ec0a8,_0x585fc9){var _0x5b0f06={'raw':![],'where':{}};var _0x22a831={};var _0x11b5f6={'count':0x0,'rows':[]};return db[_0x8aa8('0x35')][_0x8aa8('0xab')]({'where':{'id':_0x7f67c3[_0x8aa8('0xa6')]['id']}})['then'](handleEntityNotFound(_0x2ec0a8,null))[_0x8aa8('0x26')](function(_0x3a620a){if(_0x3a620a){_0x22a831[_0x8aa8('0x36')]=_[_0x8aa8('0x37')](db[_0x8aa8('0x2c')][_0x8aa8('0xa0')]);_0x22a831[_0x8aa8('0x3a')]=_[_0x8aa8('0x37')](_0x7f67c3[_0x8aa8('0x3a')]);_0x22a831[_0x8aa8('0x38')]=_[_0x8aa8('0x39')](_0x22a831['model'],_0x22a831[_0x8aa8('0x3a')]);_0x5b0f06['attributes']=_[_0x8aa8('0x39')](_0x22a831[_0x8aa8('0x36')],qs[_0x8aa8('0x3b')](_0x7f67c3[_0x8aa8('0x3a')][_0x8aa8('0x3b')]));_0x5b0f06[_0x8aa8('0x3c')]=_0x5b0f06['attributes']['length']?_0x5b0f06['attributes']:_0x22a831[_0x8aa8('0x36')];if(!_0x7f67c3[_0x8aa8('0x3a')][_0x8aa8('0x3e')](_0x8aa8('0x3f'))){_0x5b0f06['limit']=qs[_0x8aa8('0x22')](_0x7f67c3[_0x8aa8('0x3a')][_0x8aa8('0x22')]);_0x5b0f06[_0x8aa8('0x21')]=qs[_0x8aa8('0x21')](_0x7f67c3['query'][_0x8aa8('0x21')]);}_0x5b0f06[_0x8aa8('0x40')]=qs[_0x8aa8('0xac')](_0x7f67c3[_0x8aa8('0x3a')][_0x8aa8('0xac')]);_0x5b0f06[_0x8aa8('0x49')]=qs['filters'](_[_0x8aa8('0x41')](_0x7f67c3[_0x8aa8('0x3a')],_0x22a831['filters']));_0x5b0f06['where'][_0x8aa8('0x9d')]=_0x3a620a['id'];if(_0x7f67c3['query']['filter']){_0x5b0f06['where']=_[_0x8aa8('0x92')](_0x5b0f06['where'],{'$or':_['map'](_0x5b0f06[_0x8aa8('0x3c')],function(_0x2aabbc){var _0x11ab19={};_0x11ab19[_0x2aabbc]={'$like':'%'+_0x7f67c3[_0x8aa8('0x3a')][_0x8aa8('0x6e')]+'%'};return _0x11ab19;})});}if(_0x7f67c3[_0x8aa8('0x3a')][_0x8aa8('0x73')]){var _0x241097=_0x7f67c3['query'][_0x8aa8('0x73')][_0x8aa8('0x30')](',');var _0x1c685e={};_0x1c685e[_0x241097[0x0]]={'$gte':moment(_0x241097[0x1])['format'](_0x8aa8('0xad'))};_0x5b0f06[_0x8aa8('0x49')]=_[_0x8aa8('0x92')](_0x5b0f06['where'],_0x1c685e);}_0x5b0f06=_[_0x8aa8('0x92')]({},_0x5b0f06,_0x7f67c3[_0x8aa8('0xae')]);return db[_0x8aa8('0x2c')][_0x8aa8('0x20')]({'where':_0x5b0f06[_0x8aa8('0x49')]})['then'](function(_0x5eb681){_0x11b5f6[_0x8aa8('0x20')]=_0x5eb681;if(_0x7f67c3[_0x8aa8('0x3a')]['includeAll']){_0x5b0f06[_0x8aa8('0xa2')]=[{'all':!![]}];}return db[_0x8aa8('0x2c')][_0x8aa8('0xaf')](_0x5b0f06);})[_0x8aa8('0x26')](function(_0x3d0748){_0x11b5f6[_0x8aa8('0x9e')]=_0x3d0748;return _0x11b5f6;});}})['then'](respondWithFilteredResult(_0x2ec0a8,_0x5b0f06))[_0x8aa8('0x33')](handleError(_0x2ec0a8,null));};exports[_0x8aa8('0xb0')]=function(_0x51bddc,_0x304777,_0x56c4a2){return db[_0x8aa8('0x35')][_0x8aa8('0xa3')]({'where':{'id':_0x51bddc[_0x8aa8('0xa6')]['id']}})['then'](handleEntityNotFound(_0x304777,null))['then'](function(_0x4c733a){if(_0x4c733a){return _0x4c733a['setTags'](_0x51bddc[_0x8aa8('0xa5')][_0x8aa8('0xa8')],_['omit'](_0x51bddc[_0x8aa8('0xa5')],['ids','id'])||{})[_0x8aa8('0xb1')](function(){return db[_0x8aa8('0xb2')][_0x8aa8('0xaf')]({'attributes':['id',_0x8aa8('0x29'),'color'],'where':{'id':_0x51bddc[_0x8aa8('0xa5')]['ids']}});})[_0x8aa8('0x26')](function(_0x5dd1c7){socket[_0x8aa8('0xb3')]('faxInteractionTags:save',{'id':Number(_0x51bddc[_0x8aa8('0xa6')]['id']),'tags':_0x5dd1c7||[]});return{'id':Number(_0x51bddc[_0x8aa8('0xa6')]['id']),'tags':_0x5dd1c7||[]};});}})['then'](respondWithResult(_0x304777,null))['catch'](handleError(_0x304777,null));};exports['removeTags']=function(_0xb79b26,_0x4696bf,_0x1d872c){return db[_0x8aa8('0x35')][_0x8aa8('0xa3')]({'where':{'id':_0xb79b26[_0x8aa8('0xa6')]['id']}})[_0x8aa8('0x26')](handleEntityNotFound(_0x4696bf,null))['then'](function(_0x1e5ed8){if(_0x1e5ed8){return _0x1e5ed8[_0x8aa8('0xb4')](_0xb79b26[_0x8aa8('0x3a')][_0x8aa8('0xa8')]);}})[_0x8aa8('0x26')](respondWithStatusCode(_0x4696bf,null))[_0x8aa8('0x33')](handleError(_0x4696bf,null));};exports[_0x8aa8('0xb5')]=function(_0x3db4b5,_0x3f8060){var _0x2c2d9a=moment()[_0x8aa8('0xb6')]()[_0x8aa8('0x82')]();var _0x19b724=path[_0x8aa8('0xb7')](config['root'],_0x8aa8('0xb8'),_0x8aa8('0xb9'),'attachments');var _0x54b167=path['join'](config[_0x8aa8('0xba')],_0x8aa8('0xb8'),_0x8aa8('0xb9'),'tmp');var _0x25428f=path[_0x8aa8('0xb7')](_0x54b167,_0x2c2d9a);var _0x304a4f=util[_0x8aa8('0x59')](_0x8aa8('0xbb'),_0x2c2d9a);var _0x11ea68=path[_0x8aa8('0xb7')](_0x54b167,_0x304a4f);var _0x1fc225=![];return db[_0x8aa8('0x35')][_0x8aa8('0xa3')]({'where':{'id':_0x3db4b5[_0x8aa8('0xa6')]['id']}})[_0x8aa8('0x26')](handleEntityNotFound(_0x3f8060,null))[_0x8aa8('0x26')](function(_0xb1bc53){if(_0xb1bc53){return _0xb1bc53[_0x8aa8('0xaa')]({'attributes':['id','body',_0x8aa8('0x56')],'include':[{'model':db['Attachment'],'as':_0x8aa8('0xbc')}]});}return[];})[_0x8aa8('0x26')](function(_0x5d0297){_0x1fc225=_0x5d0297[_0x8aa8('0x3d')];if(_0x5d0297['length']){fs[_0x8aa8('0xbd')](_0x25428f);for(var _0x23337f=0x0;_0x23337f<_0x5d0297[_0x8aa8('0x3d')];_0x23337f++){var _0x4bb398=_0x5d0297[_0x23337f];var _0xc2d8bb=_0x4bb398[_0x8aa8('0xbc')];if(_0xc2d8bb){var _0x4bd1ee=path['join'](_0x19b724,_0xc2d8bb['basename']);if(fs['existsSync'](_0x4bd1ee)){fs[_0x8aa8('0xbe')](_0x4bd1ee)[_0x8aa8('0xbf')](fs[_0x8aa8('0xc0')](path[_0x8aa8('0xb7')](_0x25428f,_0xc2d8bb[_0x8aa8('0xc1')])));}}}}})[_0x8aa8('0x26')](function(){if(_0x1fc225){return new BPromise(function(_0x51cfd8,_0xbb19c4){zipdir(_0x25428f,{'saveTo':_0x11ea68},function(_0x1f75f1,_0x3bb329){if(_0x1f75f1)return _0xbb19c4(_0x1f75f1);return _0x51cfd8(_0x3bb329);});});}})[_0x8aa8('0x26')](function(){if(_0x1fc225){return new BPromise(function(_0x5bec09,_0x4b8e78){rimraf(_0x25428f,function(_0x47a0fa){if(_0x47a0fa)_0x4b8e78(_0x47a0fa);return _0x5bec09();});});}})[_0x8aa8('0x26')](function(){if(_0x1fc225){return _0x3f8060[_0x8aa8('0xb5')](_0x11ea68,_0x304a4f,function(_0x327dfa){if(_0x327dfa){console['log']('err',_0x327dfa);}else{fs[_0x8aa8('0xc2')](_0x11ea68);}});}else{return _0x3f8060[_0x8aa8('0x27')](0xc8);}})['catch'](handleError(_0x3f8060,null));};
\ No newline at end of file
+var _0xd8a5=['Content-Range','apply','reject','save','then','destroy','send','Users','map','TagIds','Tags','forEach','push','catch','index','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','offset','order','sort','where','field','name','color','tools_tags','select','from','fax_messages','me.FaxInteractionId\x20=\x20i.id','me.direction\x20=\x20\x27in\x27','me.read\x20=\x20false','user_has_fax_interactions','left_join','users','u.id\x20=\x20ui.UserId','fax_interactions','o.id\x20=\x20i.UserId','fax_accounts','a.id\x20=\x20i.FaxAccountId','me.FaxInteractionId\x20=\x20i.id\x20AND\x20me.direction\x20=\x20\x27in\x27\x20AND\x20me.read\x20=\x20false','expr','advancedFilter','parse','createdAt','value','dateStart','startOf','day','utc','format','endOf','and','isArray','condition','TagId','tableAlias','\x20IN\x20?','\x20=\x20?','LIKE','ContactId','c.firstName','\x20LIKE\x20?','c.lastName','\x20>\x20?','\x20<\x20?','c.email','filter','isNil','FaxAccountId','i.FaxAccountId\x20IN\x20?','$gte','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','null','replace','i.id\x20LIKE\x20?','i.fax\x20LIKE\x20?','CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?','group','i.id','Sequelize','QueryTypes','SELECT','clone','COUNT(*)','read','having','`unreadMessages`\x20=\x200','`unreadMessages`\x20>\x200','tag','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','fax_interaction_has_tags','it.FaxInteractionId\x20=\x20i.id','t.id\x20=\x20it.TagId','t.id\x20IN\x20?','mail_interaction_has_tags','it.MailInteractionId\x20=\x20i.id','unreadMessages','toString','sequelize','keyBy','merge','COUNT(me.id)','Account.key','Contact.firstName','Contact.lastName','c.phone','Contact.phone','Contact.mobile','c.fax','Contact.fax','GROUP_CONCAT(DISTINCT\x20t.id)','ui.FaxInteractionId\x20IN\x20?','groupBy','all','rows','show','params','FaxInteraction','includeAll','include','options','create','body','update','find','describe','addMessage','FaxMessage','ids','omit','getMessages','findOne','rawAttributes','FaxInteractionId','split','YYYY-MM-DD\x20HH:mm:ss','findAll','addTags','setTags','spread','Tag','faxInteractionTags:save','removeTags','join','root','server','files','tmp','interaction-%s.zip','Attachment','mkdirSync','basename','createReadStream','pipe','createWriteStream','err','unlinkSync','html-pdf','eml-format','zip-dir','fast-json-patch','moment','mustache','path','sox','to-csv','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','defaults','redis','localhost','socket.io-emitter','./faxInteraction.socket','sendStatus','status','end','json','count','limit','set'];(function(_0xe11921,_0x3c1e04){var _0x3cf02e=function(_0x289299){while(--_0x289299){_0xe11921['push'](_0xe11921['shift']());}};_0x3cf02e(++_0x3c1e04);}(_0xd8a5,0xa5));var _0x5d8a=function(_0x4f778f,_0x80c5b1){_0x4f778f=_0x4f778f-0x0;var _0x5513ef=_0xd8a5[_0x4f778f];return _0x5513ef;};'use strict';var pdf=require(_0x5d8a('0x0'));var emlformat=require(_0x5d8a('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x5d8a('0x2'));var jsonpatch=require(_0x5d8a('0x3'));var rp=require('request-promise');var moment=require(_0x5d8a('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x5d8a('0x5'));var util=require('util');var path=require(_0x5d8a('0x6'));var sox=require(_0x5d8a('0x7'));var csv=require(_0x5d8a('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x5d8a('0x9'));var squel=require(_0x5d8a('0xa'));var crypto=require(_0x5d8a('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x5d8a('0xc'));var toCsv=require(_0x5d8a('0x8'));var querystring=require(_0x5d8a('0xd'));var Papa=require(_0x5d8a('0xe'));var Redis=require('ioredis');var authService=require(_0x5d8a('0xf'));var qs=require(_0x5d8a('0x10'));var hardwareService=require(_0x5d8a('0x11'));var logger=require(_0x5d8a('0x12'))(_0x5d8a('0x13'));var utils=require(_0x5d8a('0x14'));var config=require(_0x5d8a('0x15'));var db=require('../../mysqldb')['db'];config['redis']=_[_0x5d8a('0x16')](config[_0x5d8a('0x17')],{'host':_0x5d8a('0x18'),'port':0x18eb});var socket=require(_0x5d8a('0x19'))(new Redis(config[_0x5d8a('0x17')]));require(_0x5d8a('0x1a'))['register'](socket);function respondWithStatusCode(_0xf4e85f,_0x2b617d){_0x2b617d=_0x2b617d||0xcc;return function(_0x1933fe){if(_0x1933fe){return _0xf4e85f[_0x5d8a('0x1b')](_0x2b617d);}return _0xf4e85f[_0x5d8a('0x1c')](_0x2b617d)[_0x5d8a('0x1d')]();};}function respondWithResult(_0x21c88e,_0x5c16c2){_0x5c16c2=_0x5c16c2||0xc8;return function(_0x5e3b49){if(_0x5e3b49){return _0x21c88e[_0x5d8a('0x1c')](_0x5c16c2)[_0x5d8a('0x1e')](_0x5e3b49);}};}function respondWithFilteredResult(_0x7686fb,_0x2f715a){return function(_0x16432c){if(_0x16432c){var _0x7089b6=_0x16432c[_0x5d8a('0x1f')],_0x1f0315=_0x2f715a['offset'],_0x5e0eeb=_0x2f715a['offset']+_0x2f715a[_0x5d8a('0x20')],_0x54a49b;if(_0x5e0eeb>=_0x7089b6){_0x5e0eeb=_0x7089b6;_0x54a49b=0xc8;}else{_0x54a49b=0xce;}_0x7686fb[_0x5d8a('0x1c')](_0x54a49b);return _0x7686fb[_0x5d8a('0x21')](_0x5d8a('0x22'),_0x1f0315+'-'+_0x5e0eeb+'/'+_0x7089b6)[_0x5d8a('0x1e')](_0x16432c);}return null;};}function patchUpdates(_0xf628bc){return function(_0x51da47){try{jsonpatch[_0x5d8a('0x23')](_0x51da47,_0xf628bc,!![]);}catch(_0x1a7afb){return BPromise[_0x5d8a('0x24')](_0x1a7afb);}return _0x51da47[_0x5d8a('0x25')]();};}function saveUpdates(_0x345be9,_0x5d21c9){return function(_0x2d63da){if(_0x2d63da){return _0x2d63da['update'](_0x345be9)[_0x5d8a('0x26')](function(_0x18b9f9){return _0x18b9f9;});}return null;};}function removeEntity(_0x287f7e,_0x251d5d){return function(_0x830126){if(_0x830126){return _0x830126[_0x5d8a('0x27')]()[_0x5d8a('0x26')](function(){_0x287f7e[_0x5d8a('0x1c')](0xcc)[_0x5d8a('0x1d')]();});}};}function handleEntityNotFound(_0x15f2cd,_0x3e6a34){return function(_0x5803c1){if(!_0x5803c1){_0x15f2cd['sendStatus'](0x194);}return _0x5803c1;};}function handleError(_0x590870,_0x143ce1){_0x143ce1=_0x143ce1||0x1f4;return function(_0xa32f3e){logger['error'](_0xa32f3e['stack']);if(_0xa32f3e['name']){delete _0xa32f3e['name'];}_0x590870[_0x5d8a('0x1c')](_0x143ce1)[_0x5d8a('0x28')](_0xa32f3e);};}function getInteractionUsers(_0xe950b,_0x483aec){return new BPromise(function(_0x3a43ca,_0x14c390){try{if(_0x483aec[_0xe950b['id']]){_0xe950b[_0x5d8a('0x29')]=_[_0x5d8a('0x2a')](_0x483aec[_0xe950b['id']],function(_0x379075){return{'id':_0x379075['id']};});}}catch(_0x3de0d6){_0x14c390(_0x3de0d6);}_0x3a43ca(_0xe950b);});}function getInteractionTags(_0x488caf,_0x2e7df5){return new BPromise(function(_0x8390c3,_0x4acb6b){try{if(_0x488caf[_0x5d8a('0x2b')]){_0x488caf[_0x5d8a('0x2c')]=[];_0x488caf[_0x5d8a('0x2b')]['split'](',')[_0x5d8a('0x2d')](function(_0x28a92a){_0x488caf[_0x5d8a('0x2c')][_0x5d8a('0x2e')](_0x2e7df5[_0x28a92a]);});}delete _0x488caf[_0x5d8a('0x2b')];}catch(_0x3ae5f9){_0x4acb6b(_0x3ae5f9);}_0x8390c3(_0x488caf);});}function updateFaxInteraction(_0x2cebd9,_0x4ff152,_0x556c8f){return new BPromise(function(_0x2fda01,_0x3c3965){return getInteractionUsers(_0x2cebd9,_0x556c8f)['then'](function(_0x42cb4b){return getInteractionTags(_0x42cb4b,_0x4ff152);})[_0x5d8a('0x26')](function(_0x5dae93){_0x2fda01(_0x5dae93);})[_0x5d8a('0x2f')](function(_0x7e021d){_0x3c3965(_0x7e021d);});});}exports[_0x5d8a('0x30')]=function(_0x633156,_0x25266f){var _0x4b2b1f={},_0x4a8b47={},_0x19075e={'count':0x0,'rows':[]};var _0x214f8c=db['FaxInteraction']['rawAttributes'];_0x4a8b47[_0x5d8a('0x31')]=_[_0x5d8a('0x32')](_0x214f8c);_0x4a8b47[_0x5d8a('0x33')]=_[_0x5d8a('0x32')](_0x633156[_0x5d8a('0x33')]);_0x4a8b47[_0x5d8a('0x34')]=_[_0x5d8a('0x35')](_0x4a8b47['model'],_0x4a8b47[_0x5d8a('0x33')]);_0x4b2b1f[_0x5d8a('0x36')]=_[_0x5d8a('0x35')](_0x4a8b47[_0x5d8a('0x31')],qs[_0x5d8a('0x37')](_0x633156[_0x5d8a('0x33')][_0x5d8a('0x37')]));_0x4b2b1f[_0x5d8a('0x36')]=_0x4b2b1f[_0x5d8a('0x36')][_0x5d8a('0x38')]?_0x4b2b1f[_0x5d8a('0x36')]:_0x4a8b47[_0x5d8a('0x31')];if(!_0x633156[_0x5d8a('0x33')][_0x5d8a('0x39')](_0x5d8a('0x3a'))){_0x4b2b1f[_0x5d8a('0x20')]=qs[_0x5d8a('0x20')](_0x633156[_0x5d8a('0x33')][_0x5d8a('0x20')]);_0x4b2b1f[_0x5d8a('0x3b')]=qs[_0x5d8a('0x3b')](_0x633156['query']['offset']);}_0x4b2b1f[_0x5d8a('0x3c')]=qs[_0x5d8a('0x3d')](_0x633156['query'][_0x5d8a('0x3d')]);_0x4b2b1f[_0x5d8a('0x3e')]=qs[_0x5d8a('0x34')](_['pick'](_0x633156[_0x5d8a('0x33')],_0x4a8b47[_0x5d8a('0x34')]));var _0x5e3ff5=[];var _0x2beaa9=squel['select']()[_0x5d8a('0x3f')]('id')[_0x5d8a('0x3f')](_0x5d8a('0x40'))[_0x5d8a('0x3f')](_0x5d8a('0x41'))['from'](_0x5d8a('0x42'));var _0x38a729=squel[_0x5d8a('0x43')]()[_0x5d8a('0x3f')]('COUNT(*)')[_0x5d8a('0x44')](_0x5d8a('0x45'),'me')['where'](_0x5d8a('0x46'))[_0x5d8a('0x3e')](_0x5d8a('0x47'))[_0x5d8a('0x3e')](_0x5d8a('0x48'));var _0x363353=squel[_0x5d8a('0x43')]()[_0x5d8a('0x3f')]('u.id')[_0x5d8a('0x3f')]('ui.FaxInteractionId')[_0x5d8a('0x44')](_0x5d8a('0x49'),'ui')[_0x5d8a('0x4a')](_0x5d8a('0x4b'),'u',_0x5d8a('0x4c'));var _0x273e87=squel[_0x5d8a('0x43')]()[_0x5d8a('0x44')](_0x5d8a('0x4d'),'i')['left_join']('cm_contacts','c','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL')[_0x5d8a('0x4a')](_0x5d8a('0x4b'),'o',_0x5d8a('0x4e'))[_0x5d8a('0x4a')](_0x5d8a('0x4f'),'a',_0x5d8a('0x50'))[_0x5d8a('0x4a')](_0x5d8a('0x45'),'me',_0x5d8a('0x51'));var _0x2bb9ba=squel[_0x5d8a('0x52')]();if(_0x633156[_0x5d8a('0x33')][_0x5d8a('0x53')]){var _0x548210=JSON[_0x5d8a('0x54')](_0x633156[_0x5d8a('0x33')][_0x5d8a('0x53')]);_[_0x5d8a('0x32')](_0x548210)['forEach'](function(_0x58488a){var _0x311f61=_0x548210[_0x58488a];if(_0x58488a===_0x5d8a('0x55')){var _0x5c5cd2=moment(_0x311f61[_0x5d8a('0x56')][_0x5d8a('0x57')])[_0x5d8a('0x58')](_0x5d8a('0x59'))[_0x5d8a('0x5a')]()[_0x5d8a('0x5b')]();var _0x57e03f=moment(_0x57e03f)[_0x5d8a('0x5a')]()[_0x5d8a('0x5c')](_0x5d8a('0x59'))['format']();_0x2bb9ba[_0x5d8a('0x5d')]('i.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x5c5cd2,_0x57e03f);}else{if(_[_0x5d8a('0x5e')](_0x311f61['condition'])){_0x311f61[_0x5d8a('0x5f')][_0x5d8a('0x2d')](function(_0x4a0650){switch(_0x311f61['condition'][_0x5d8a('0x56')]){case'IS':if(_0x58488a!==_0x5d8a('0x60')&&_0x58488a!=='unreadMessages'){if(_['isArray'](_0x311f61['value'])&&_0x311f61[_0x5d8a('0x56')]['length']>0x1){_0x2bb9ba[_0x5d8a('0x5d')](_0x311f61[_0x5d8a('0x61')]+'.'+_0x58488a+_0x5d8a('0x62'),_0x311f61[_0x5d8a('0x56')]);}else{_0x2bb9ba[_0x5d8a('0x5d')](_0x311f61['tableAlias']+'.'+_0x58488a+_0x5d8a('0x63'),_0x311f61[_0x5d8a('0x56')][0x0]);}}break;case'=':_0x2bb9ba[_0x5d8a('0x5d')](_0x311f61[_0x5d8a('0x61')]+'.'+_0x58488a+_0x5d8a('0x63'),_0x311f61['value']);break;case _0x5d8a('0x64'):if(_0x58488a===_0x5d8a('0x65')){_0x2bb9ba[_0x5d8a('0x5d')](_0x5d8a('0x66')+_0x5d8a('0x67'),'%'+_0x311f61[_0x5d8a('0x56')]+'%');_0x2bb9ba['or'](_0x5d8a('0x68')+'\x20LIKE\x20?','%'+_0x311f61[_0x5d8a('0x56')]+'%');_0x2bb9ba['or']('c.email'+_0x5d8a('0x67'),'%'+_0x311f61[_0x5d8a('0x56')]+'%');}else{_0x2bb9ba[_0x5d8a('0x5d')](_0x311f61[_0x5d8a('0x61')]+'.'+_0x58488a+_0x5d8a('0x67'),'%'+_0x311f61['value']+'%');}break;case'>':_0x2bb9ba[_0x5d8a('0x5d')](_0x311f61[_0x5d8a('0x61')]+'.'+_0x58488a+_0x5d8a('0x69'),_0x311f61[_0x5d8a('0x56')]);break;case'<':_0x2bb9ba[_0x5d8a('0x5d')](_0x311f61['tableAlias']+'.'+_0x58488a+_0x5d8a('0x6a'),_0x311f61[_0x5d8a('0x56')]);break;}});}else{switch(_0x311f61[_0x5d8a('0x5f')]['value']){case'IS':if(_0x58488a!==_0x5d8a('0x60')&&_0x58488a!=='unreadMessages'){if(_[_0x5d8a('0x5e')](_0x311f61[_0x5d8a('0x56')])&&_0x311f61[_0x5d8a('0x56')][_0x5d8a('0x38')]>0x1){_0x2bb9ba[_0x5d8a('0x5d')](_0x311f61[_0x5d8a('0x61')]+'.'+_0x58488a+'\x20IN\x20?',_0x311f61[_0x5d8a('0x56')]);}else{_0x2bb9ba[_0x5d8a('0x5d')](_0x311f61[_0x5d8a('0x61')]+'.'+_0x58488a+_0x5d8a('0x63'),_0x311f61[_0x5d8a('0x56')][0x0]);}}break;case'=':_0x2bb9ba['and'](_0x311f61[_0x5d8a('0x61')]+'.'+_0x58488a+'\x20=\x20?',_0x311f61[_0x5d8a('0x56')]);break;case _0x5d8a('0x64'):if(_0x58488a===_0x5d8a('0x65')){_0x2bb9ba[_0x5d8a('0x5d')](_0x5d8a('0x66')+_0x5d8a('0x67'),'%'+_0x311f61[_0x5d8a('0x56')]+'%');_0x2bb9ba['or'](_0x5d8a('0x68')+_0x5d8a('0x67'),'%'+_0x311f61[_0x5d8a('0x56')]+'%');_0x2bb9ba['or'](_0x5d8a('0x6b')+_0x5d8a('0x67'),'%'+_0x311f61[_0x5d8a('0x56')]+'%');}else{_0x2bb9ba[_0x5d8a('0x5d')](_0x311f61[_0x5d8a('0x61')]+'.'+_0x58488a+_0x5d8a('0x67'),'%'+_0x311f61['value']+'%');}break;case'>':_0x2bb9ba[_0x5d8a('0x5d')](_0x311f61[_0x5d8a('0x61')]+'.'+_0x58488a+'\x20>\x20?',_0x311f61[_0x5d8a('0x56')]);break;case'<':_0x2bb9ba['and'](_0x311f61['tableAlias']+'.'+_0x58488a+_0x5d8a('0x6a'),_0x311f61[_0x5d8a('0x56')]);break;}}}});}else{var _0x239c8e=_(Object[_0x5d8a('0x32')](_0x633156['query']))['map'](function(_0x426dbb){return _0x214f8c[_0x5d8a('0x39')](_0x426dbb)?_0x426dbb:undefined;})[_0x5d8a('0x6c')](function(_0x15649a){return!_[_0x5d8a('0x6d')](_0x15649a);})[_0x5d8a('0x56')]();if(!_['isEmpty'](_0x239c8e)){_0x239c8e[_0x5d8a('0x2d')](function(_0xde0c05){if(_0xde0c05===_0x5d8a('0x6e')){_0x273e87[_0x5d8a('0x3e')](_0x5d8a('0x6f'),[]['concat'](_0x633156[_0x5d8a('0x33')][_0xde0c05]));}else if(_0xde0c05===_0x5d8a('0x55')){var _0x574d07=JSON[_0x5d8a('0x54')](_0x633156['query'][_0xde0c05])[_0x5d8a('0x70')];var _0x2441de=JSON[_0x5d8a('0x54')](_0x633156[_0x5d8a('0x33')][_0xde0c05])['$lte'];_0x273e87['where'](_0x5d8a('0x71'),_0x574d07,_0x2441de);}else{if(_0x633156[_0x5d8a('0x33')][_0xde0c05]===_0x5d8a('0x72')){_0x273e87[_0x5d8a('0x3e')]('i.'+_0xde0c05+'\x20IS\x20NULL');}else{_0x273e87[_0x5d8a('0x3e')]('i.'+_0xde0c05+_0x5d8a('0x63'),_0x633156['query'][_0xde0c05]);}}});}if(_0x633156[_0x5d8a('0x33')][_0x5d8a('0x6c')]){var _0x45df94=_0x633156[_0x5d8a('0x33')]['filter']['replace']('\x5c','\x5c\x5c')[_0x5d8a('0x73')]('\x27\x27','\x27\x27\x27\x27');if(qs['isNumeric'](_0x45df94)){_0x2bb9ba['or'](_0x5d8a('0x74'),_0x45df94+'%')['or'](_0x5d8a('0x75'),_0x45df94+'%');}_0x2bb9ba['or'](_0x5d8a('0x76'),_0x45df94+'%');}}_0x273e87['where'](_0x2bb9ba);if(_0x4b2b1f[_0x5d8a('0x3c')]){_0x4b2b1f[_0x5d8a('0x3c')]['forEach'](function(_0x4106e6){_0x273e87[_0x5d8a('0x3c')]('i.'+_0x4106e6[0x0],_0x4106e6[0x1]==='DESC'?![]:!![]);});}_0x273e87[_0x5d8a('0x77')](_0x5d8a('0x78'));var _0x36723c={'type':db[_0x5d8a('0x79')][_0x5d8a('0x7a')][_0x5d8a('0x7b')],'raw':!![]};var _0x5481c9=_0x273e87[_0x5d8a('0x7c')]()['field'](_0x5d8a('0x7d'))[_0x5d8a('0x3f')]('COUNT(me.id)','unreadMessages');if(!_0x633156['query'][_0x5d8a('0x53')]){if(_0x633156[_0x5d8a('0x33')][_0x5d8a('0x7e')]){if(_0x633156[_0x5d8a('0x33')][_0x5d8a('0x7e')]==0x1){_0x5481c9[_0x5d8a('0x7f')](_0x5d8a('0x80'));_0x273e87['having'](_0x5d8a('0x80'));}else{_0x5481c9[_0x5d8a('0x7f')]('`unreadMessages`\x20>\x200');_0x273e87[_0x5d8a('0x7f')](_0x5d8a('0x81'));}}if(_0x633156[_0x5d8a('0x33')][_0x5d8a('0x82')]){var _0x32f1a3=_[_0x5d8a('0x5e')](_0x633156[_0x5d8a('0x33')][_0x5d8a('0x82')])?_0x633156[_0x5d8a('0x33')][_0x5d8a('0x82')]:new Array(_0x633156[_0x5d8a('0x33')][_0x5d8a('0x82')]);var _0x1e64fc=squel['expr']();_0x32f1a3['forEach'](function(_0x2e47cd){_0x1e64fc['or'](_0x5d8a('0x83'),'%,'+_0x2e47cd+',%');});_0x273e87[_0x5d8a('0x7f')](_0x1e64fc);_0x5481c9['left_join'](_0x5d8a('0x84'),'it',_0x5d8a('0x85'));_0x5481c9['left_join']('tools_tags','t',_0x5d8a('0x86'));_0x5481c9[_0x5d8a('0x3e')](_0x5d8a('0x87'),_0x32f1a3);}}else{var _0x548210=JSON[_0x5d8a('0x54')](_0x633156[_0x5d8a('0x33')][_0x5d8a('0x53')]);_[_0x5d8a('0x32')](_0x548210)[_0x5d8a('0x2d')](function(_0xd3304b){var _0xc05bb8=_0x548210[_0xd3304b];if(_0xd3304b===_0x5d8a('0x60')){var _0x2bd26a=_0xc05bb8['value'];var _0x37b1f0=squel[_0x5d8a('0x52')]();_0x2bd26a[_0x5d8a('0x2d')](function(_0x188612){_0x37b1f0['or'](_0x5d8a('0x83'),'%,'+_0x188612+',%');});_0x273e87['having'](_0x37b1f0);_0x5481c9[_0x5d8a('0x4a')](_0x5d8a('0x88'),'it',_0x5d8a('0x89'));_0x5481c9[_0x5d8a('0x4a')]('tools_tags','t',_0x5d8a('0x86'));_0x5481c9['where'](_0x5d8a('0x87'),_0x2bd26a);}else if(_0xd3304b===_0x5d8a('0x8a')){if(_0xc05bb8[_0x5d8a('0x56')][_0x5d8a('0x38')]===0x1){if(_0xc05bb8['value'][0x0]===0x1){_0x5481c9[_0x5d8a('0x7f')]('`unreadMessages`\x20=\x200');_0x273e87['having']('`unreadMessages`\x20=\x200');}else{_0x5481c9['having']('`unreadMessages`\x20>\x200');_0x273e87[_0x5d8a('0x7f')](_0x5d8a('0x81'));}}}});}db['sequelize'][_0x5d8a('0x33')](_0x5481c9[_0x5d8a('0x8b')](),_0x36723c)[_0x5d8a('0x26')](function(_0x540ed1){_0x19075e['count']=_0x540ed1[_0x5d8a('0x38')];if(_0x19075e[_0x5d8a('0x1f')]===0x0)return[];return db[_0x5d8a('0x8c')][_0x5d8a('0x33')](_0x2beaa9[_0x5d8a('0x8b')](),_0x36723c)[_0x5d8a('0x26')](function(_0x1e229a){_0x5e3ff5=_[_0x5d8a('0x8d')](_0x1e229a,'id');_0x36723c=_[_0x5d8a('0x8e')](_0x36723c,{'model':db['FaxInteraction'],'mapToModel':!![],'raw':!![],'nest':!![]});_0x273e87[_0x5d8a('0x3f')](_0x5d8a('0x8f'),_0x5d8a('0x8a'));_0x273e87[_0x5d8a('0x3f')]('a.key',_0x5d8a('0x90'));_0x273e87['field']('i.*');_0x273e87[_0x5d8a('0x3f')]('c.firstName',_0x5d8a('0x91'));_0x273e87['field'](_0x5d8a('0x68'),_0x5d8a('0x92'));_0x273e87[_0x5d8a('0x3f')](_0x5d8a('0x6b'),'Contact.email');_0x273e87[_0x5d8a('0x3f')](_0x5d8a('0x93'),_0x5d8a('0x94'));_0x273e87[_0x5d8a('0x3f')]('c.mobile',_0x5d8a('0x95'));_0x273e87[_0x5d8a('0x3f')](_0x5d8a('0x96'),_0x5d8a('0x97'));_0x273e87[_0x5d8a('0x3f')](_0x5d8a('0x98'),_0x5d8a('0x2b'));_0x273e87[_0x5d8a('0x4a')](_0x5d8a('0x84'),'it',_0x5d8a('0x85'));_0x273e87[_0x5d8a('0x4a')]('tools_tags','t',_0x5d8a('0x86'));_0x273e87[_0x5d8a('0x20')](_0x4b2b1f[_0x5d8a('0x20')]);_0x273e87[_0x5d8a('0x3b')](_0x4b2b1f[_0x5d8a('0x3b')]);return db[_0x5d8a('0x8c')][_0x5d8a('0x33')](_0x273e87['toString'](),_0x36723c);})[_0x5d8a('0x26')](function(_0x338485){_0x363353['where'](_0x5d8a('0x99'),_[_0x5d8a('0x2a')](_0x338485,'id'));return db[_0x5d8a('0x8c')]['query'](_0x363353[_0x5d8a('0x8b')](),_0x36723c)[_0x5d8a('0x26')](function(_0x689c90){var _0x42ec02=_[_0x5d8a('0x9a')](_0x689c90,'FaxInteractionId');var _0x46e1b8=[];_0x338485['forEach'](function(_0x3f7a60){_0x46e1b8['push'](updateFaxInteraction(_0x3f7a60,_0x5e3ff5,_0x42ec02));});return BPromise[_0x5d8a('0x9b')](_0x46e1b8);});});})[_0x5d8a('0x26')](function(_0x2bfeb5){_0x19075e[_0x5d8a('0x9c')]=_0x2bfeb5;return _0x19075e;})[_0x5d8a('0x26')](respondWithFilteredResult(_0x25266f,_0x4b2b1f))[_0x5d8a('0x2f')](handleError(_0x25266f,null));};exports[_0x5d8a('0x9d')]=function(_0x1622f2,_0x4849f4){var _0x2124be={'raw':![],'where':{'id':_0x1622f2[_0x5d8a('0x9e')]['id']}},_0x1fc1b3={};_0x1fc1b3[_0x5d8a('0x31')]=_[_0x5d8a('0x32')](db[_0x5d8a('0x9f')]['rawAttributes']);_0x1fc1b3[_0x5d8a('0x33')]=_['keys'](_0x1622f2[_0x5d8a('0x33')]);_0x1fc1b3[_0x5d8a('0x34')]=_['intersection'](_0x1fc1b3[_0x5d8a('0x31')],_0x1fc1b3['query']);_0x2124be[_0x5d8a('0x36')]=_['intersection'](_0x1fc1b3[_0x5d8a('0x31')],qs[_0x5d8a('0x37')](_0x1622f2[_0x5d8a('0x33')][_0x5d8a('0x37')]));_0x2124be['attributes']=_0x2124be[_0x5d8a('0x36')][_0x5d8a('0x38')]?_0x2124be[_0x5d8a('0x36')]:_0x1fc1b3[_0x5d8a('0x31')];if(_0x1622f2[_0x5d8a('0x33')][_0x5d8a('0xa0')]){_0x2124be[_0x5d8a('0xa1')]=[{'all':!![]}];}_0x2124be=_[_0x5d8a('0x8e')]({},_0x2124be,_0x1622f2[_0x5d8a('0xa2')]);return db[_0x5d8a('0x9f')]['find'](_0x2124be)[_0x5d8a('0x26')](handleEntityNotFound(_0x4849f4,null))['then'](respondWithResult(_0x4849f4,null))[_0x5d8a('0x2f')](handleError(_0x4849f4,null));};exports[_0x5d8a('0xa3')]=function(_0x4b5496,_0x2ffa96){return db[_0x5d8a('0x9f')][_0x5d8a('0xa3')](_0x4b5496[_0x5d8a('0xa4')],{})[_0x5d8a('0x26')](respondWithResult(_0x2ffa96,0xc9))['catch'](handleError(_0x2ffa96,null));};exports[_0x5d8a('0xa5')]=function(_0x5efd44,_0x50e087){if(_0x5efd44[_0x5d8a('0xa4')]['id']){delete _0x5efd44[_0x5d8a('0xa4')]['id'];}return db[_0x5d8a('0x9f')][_0x5d8a('0xa6')]({'where':{'id':_0x5efd44[_0x5d8a('0x9e')]['id']}})['then'](handleEntityNotFound(_0x50e087,null))[_0x5d8a('0x26')](saveUpdates(_0x5efd44['body'],null))[_0x5d8a('0x26')](respondWithResult(_0x50e087,null))[_0x5d8a('0x2f')](handleError(_0x50e087,null));};exports[_0x5d8a('0x27')]=function(_0x2f5db7,_0x335acb){return db['FaxInteraction']['find']({'where':{'id':_0x2f5db7['params']['id']}})[_0x5d8a('0x26')](handleEntityNotFound(_0x335acb,null))[_0x5d8a('0x26')](removeEntity(_0x335acb,null))[_0x5d8a('0x2f')](handleError(_0x335acb,null));};exports[_0x5d8a('0xa7')]=function(_0x32d442,_0x2cb936){return db['FaxInteraction'][_0x5d8a('0xa7')]()[_0x5d8a('0x26')](respondWithResult(_0x2cb936,null))[_0x5d8a('0x2f')](handleError(_0x2cb936,null));};exports[_0x5d8a('0xa8')]=function(_0x1764ac,_0x4619f8,_0x363999){return db[_0x5d8a('0xa9')][_0x5d8a('0xa6')]({'where':{'id':_0x1764ac[_0x5d8a('0x9e')]['id']}})[_0x5d8a('0x26')](handleEntityNotFound(_0x4619f8,null))[_0x5d8a('0x26')](function(_0x55aa61){if(_0x55aa61){return _0x55aa61[_0x5d8a('0xa8')](_0x1764ac[_0x5d8a('0xa4')][_0x5d8a('0xaa')],_[_0x5d8a('0xab')](_0x1764ac[_0x5d8a('0xa4')],[_0x5d8a('0xaa'),'id'])||{});}})['then'](respondWithResult(_0x4619f8,null))[_0x5d8a('0x2f')](handleError(_0x4619f8,null));};exports[_0x5d8a('0xac')]=function(_0x354dde,_0x5a8a4c,_0x349f4d){var _0x41fa2b={'raw':![],'where':{}};var _0x3197f={};var _0x454013={'count':0x0,'rows':[]};return db[_0x5d8a('0x9f')][_0x5d8a('0xad')]({'where':{'id':_0x354dde[_0x5d8a('0x9e')]['id']}})[_0x5d8a('0x26')](handleEntityNotFound(_0x5a8a4c,null))[_0x5d8a('0x26')](function(_0x532105){if(_0x532105){_0x3197f['model']=_[_0x5d8a('0x32')](db[_0x5d8a('0xa9')][_0x5d8a('0xae')]);_0x3197f[_0x5d8a('0x33')]=_[_0x5d8a('0x32')](_0x354dde['query']);_0x3197f[_0x5d8a('0x34')]=_[_0x5d8a('0x35')](_0x3197f['model'],_0x3197f[_0x5d8a('0x33')]);_0x41fa2b[_0x5d8a('0x36')]=_['intersection'](_0x3197f['model'],qs[_0x5d8a('0x37')](_0x354dde['query'][_0x5d8a('0x37')]));_0x41fa2b['attributes']=_0x41fa2b['attributes']['length']?_0x41fa2b[_0x5d8a('0x36')]:_0x3197f[_0x5d8a('0x31')];if(!_0x354dde[_0x5d8a('0x33')][_0x5d8a('0x39')](_0x5d8a('0x3a'))){_0x41fa2b['limit']=qs[_0x5d8a('0x20')](_0x354dde[_0x5d8a('0x33')]['limit']);_0x41fa2b['offset']=qs[_0x5d8a('0x3b')](_0x354dde[_0x5d8a('0x33')][_0x5d8a('0x3b')]);}_0x41fa2b['order']=qs[_0x5d8a('0x3d')](_0x354dde[_0x5d8a('0x33')]['sort']);_0x41fa2b[_0x5d8a('0x3e')]=qs[_0x5d8a('0x34')](_['pick'](_0x354dde[_0x5d8a('0x33')],_0x3197f[_0x5d8a('0x34')]));_0x41fa2b[_0x5d8a('0x3e')][_0x5d8a('0xaf')]=_0x532105['id'];if(_0x354dde[_0x5d8a('0x33')]['filter']){_0x41fa2b['where']=_[_0x5d8a('0x8e')](_0x41fa2b['where'],{'$or':_[_0x5d8a('0x2a')](_0x41fa2b[_0x5d8a('0x36')],function(_0x2e0126){var _0x41db38={};_0x41db38[_0x2e0126]={'$like':'%'+_0x354dde[_0x5d8a('0x33')][_0x5d8a('0x6c')]+'%'};return _0x41db38;})});}if(_0x354dde['query'][_0x5d8a('0x70')]){var _0x4871a6=_0x354dde[_0x5d8a('0x33')][_0x5d8a('0x70')][_0x5d8a('0xb0')](',');var _0x422b03={};_0x422b03[_0x4871a6[0x0]]={'$gte':moment(_0x4871a6[0x1])[_0x5d8a('0x5b')](_0x5d8a('0xb1'))};_0x41fa2b['where']=_[_0x5d8a('0x8e')](_0x41fa2b[_0x5d8a('0x3e')],_0x422b03);}_0x41fa2b=_['merge']({},_0x41fa2b,_0x354dde[_0x5d8a('0xa2')]);return db['FaxMessage']['count']({'where':_0x41fa2b['where']})[_0x5d8a('0x26')](function(_0x180045){_0x454013['count']=_0x180045;if(_0x354dde['query'][_0x5d8a('0xa0')]){_0x41fa2b[_0x5d8a('0xa1')]=[{'all':!![]}];}return db[_0x5d8a('0xa9')][_0x5d8a('0xb2')](_0x41fa2b);})[_0x5d8a('0x26')](function(_0x5d5d02){_0x454013[_0x5d8a('0x9c')]=_0x5d5d02;return _0x454013;});}})[_0x5d8a('0x26')](respondWithFilteredResult(_0x5a8a4c,_0x41fa2b))[_0x5d8a('0x2f')](handleError(_0x5a8a4c,null));};exports[_0x5d8a('0xb3')]=function(_0x4362c9,_0x162490,_0x1f7703){return db[_0x5d8a('0x9f')][_0x5d8a('0xa6')]({'where':{'id':_0x4362c9['params']['id']}})[_0x5d8a('0x26')](handleEntityNotFound(_0x162490,null))['then'](function(_0x2e48b6){if(_0x2e48b6){return _0x2e48b6[_0x5d8a('0xb4')](_0x4362c9[_0x5d8a('0xa4')][_0x5d8a('0xaa')],_[_0x5d8a('0xab')](_0x4362c9[_0x5d8a('0xa4')],[_0x5d8a('0xaa'),'id'])||{})[_0x5d8a('0xb5')](function(){return db[_0x5d8a('0xb6')][_0x5d8a('0xb2')]({'attributes':['id',_0x5d8a('0x40'),_0x5d8a('0x41')],'where':{'id':_0x4362c9[_0x5d8a('0xa4')]['ids']}});})['then'](function(_0x32571d){socket['emit'](_0x5d8a('0xb7'),{'id':Number(_0x4362c9[_0x5d8a('0x9e')]['id']),'tags':_0x32571d||[]});return{'id':Number(_0x4362c9[_0x5d8a('0x9e')]['id']),'tags':_0x32571d||[]};});}})[_0x5d8a('0x26')](respondWithResult(_0x162490,null))[_0x5d8a('0x2f')](handleError(_0x162490,null));};exports[_0x5d8a('0xb8')]=function(_0x26a81d,_0x121745,_0x109bb8){return db[_0x5d8a('0x9f')][_0x5d8a('0xa6')]({'where':{'id':_0x26a81d[_0x5d8a('0x9e')]['id']}})[_0x5d8a('0x26')](handleEntityNotFound(_0x121745,null))['then'](function(_0x2025b6){if(_0x2025b6){return _0x2025b6[_0x5d8a('0xb8')](_0x26a81d['query']['ids']);}})[_0x5d8a('0x26')](respondWithStatusCode(_0x121745,null))['catch'](handleError(_0x121745,null));};exports['download']=function(_0x4a6844,_0x440c35){var _0x1c2898=moment()['unix']()[_0x5d8a('0x8b')]();var _0xfb19d8=path[_0x5d8a('0xb9')](config[_0x5d8a('0xba')],_0x5d8a('0xbb'),_0x5d8a('0xbc'),'attachments');var _0x18fd6d=path[_0x5d8a('0xb9')](config[_0x5d8a('0xba')],_0x5d8a('0xbb'),_0x5d8a('0xbc'),_0x5d8a('0xbd'));var _0x3b7652=path[_0x5d8a('0xb9')](_0x18fd6d,_0x1c2898);var _0x1119a6=util[_0x5d8a('0x5b')](_0x5d8a('0xbe'),_0x1c2898);var _0x133527=path[_0x5d8a('0xb9')](_0x18fd6d,_0x1119a6);var _0x65bac=![];return db['FaxInteraction'][_0x5d8a('0xa6')]({'where':{'id':_0x4a6844['params']['id']}})[_0x5d8a('0x26')](handleEntityNotFound(_0x440c35,null))[_0x5d8a('0x26')](function(_0x400fad){if(_0x400fad){return _0x400fad[_0x5d8a('0xac')]({'attributes':['id',_0x5d8a('0xa4'),'createdAt'],'include':[{'model':db[_0x5d8a('0xbf')],'as':_0x5d8a('0xbf')}]});}return[];})[_0x5d8a('0x26')](function(_0x252c73){_0x65bac=_0x252c73[_0x5d8a('0x38')];if(_0x252c73[_0x5d8a('0x38')]){fs[_0x5d8a('0xc0')](_0x3b7652);for(var _0xd6632b=0x0;_0xd6632b<_0x252c73['length'];_0xd6632b++){var _0x588fa7=_0x252c73[_0xd6632b];var _0xf15e37=_0x588fa7[_0x5d8a('0xbf')];if(_0xf15e37){var _0x3defbd=path['join'](_0xfb19d8,_0xf15e37[_0x5d8a('0xc1')]);if(fs['existsSync'](_0x3defbd)){fs[_0x5d8a('0xc2')](_0x3defbd)[_0x5d8a('0xc3')](fs[_0x5d8a('0xc4')](path[_0x5d8a('0xb9')](_0x3b7652,_0xf15e37[_0x5d8a('0xc1')])));}}}}})[_0x5d8a('0x26')](function(){if(_0x65bac){return new BPromise(function(_0x349d1a,_0x37e351){zipdir(_0x3b7652,{'saveTo':_0x133527},function(_0x175a5d,_0x2fb251){if(_0x175a5d)return _0x37e351(_0x175a5d);return _0x349d1a(_0x2fb251);});});}})['then'](function(){if(_0x65bac){return new BPromise(function(_0x4e9979,_0x59fae8){rimraf(_0x3b7652,function(_0x2068b2){if(_0x2068b2)_0x59fae8(_0x2068b2);return _0x4e9979();});});}})[_0x5d8a('0x26')](function(){if(_0x65bac){return _0x440c35['download'](_0x133527,_0x1119a6,function(_0x4b217c){if(_0x4b217c){console['log'](_0x5d8a('0xc5'),_0x4b217c);}else{fs[_0x5d8a('0xc6')](_0x133527);}});}else{return _0x440c35[_0x5d8a('0x1b')](0xc8);}})[_0x5d8a('0x2f')](handleError(_0x440c35,null));};
\ No newline at end of file
index de63e43..8b01bff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xef5c=['then','Users','findAll','setDataValue','unreadMessages','length','emit','catch','hasOwnProperty','hook','exports','events','../../mysqldb','FaxInteraction','FaxMessage','setMaxListeners','update','getUsers'];(function(_0x8d3b4a,_0x17c578){var _0x260494=function(_0x2445ed){while(--_0x2445ed){_0x8d3b4a['push'](_0x8d3b4a['shift']());}};_0x260494(++_0x17c578);}(_0xef5c,0x77));var _0xcef5=function(_0x47d9e1,_0x507cb1){_0x47d9e1=_0x47d9e1-0x0;var _0x124eca=_0xef5c[_0x47d9e1];return _0x124eca;};'use strict';var EventEmitter=require(_0xcef5('0x0'));var FaxInteraction=require(_0xcef5('0x1'))['db'][_0xcef5('0x2')];var FaxMessage=require(_0xcef5('0x1'))['db'][_0xcef5('0x3')];var FaxInteractionEvents=new EventEmitter();FaxInteractionEvents[_0xcef5('0x4')](0x0);var events={'afterCreate':'save','afterUpdate':_0xcef5('0x5'),'afterDestroy':'remove'};function emitEvent(_0x25d12b){return function(_0x21e863,_0x16ff03,_0x52d573){_0x21e863[_0xcef5('0x6')]({'attributes':['id'],'raw':!![]})[_0xcef5('0x7')](function(_0x4a8bfb){_0x21e863['setDataValue'](_0xcef5('0x8'),_0x4a8bfb['map'](function(_0x334b05){return{'id':_0x334b05['id']};}));return FaxMessage[_0xcef5('0x9')]({'where':{'FaxInteractionId':_0x21e863['id'],'direction':'in','read':![]},'raw':!![]});})['then'](function(_0x43fe97){_0x21e863[_0xcef5('0xa')](_0xcef5('0xb'),_0x43fe97[_0xcef5('0xc')]);FaxInteractionEvents[_0xcef5('0xd')](_0x25d12b+':'+_0x21e863['id'],_0x21e863);FaxInteractionEvents[_0xcef5('0xd')](_0x25d12b,_0x21e863);_0x52d573(null);})[_0xcef5('0xe')](_0x52d573(null));};}for(var e in events){if(events[_0xcef5('0xf')](e)){var event=events[e];FaxInteraction[_0xcef5('0x10')](e,emitEvent(event));}}module[_0xcef5('0x11')]=FaxInteractionEvents;
\ No newline at end of file
+var _0x95f4=['getUsers','setDataValue','Users','map','then','length','emit','hook','../../mysqldb','FaxMessage','save','update','remove'];(function(_0x59ae95,_0x5c3671){var _0x5276f7=function(_0x4094ee){while(--_0x4094ee){_0x59ae95['push'](_0x59ae95['shift']());}};_0x5276f7(++_0x5c3671);}(_0x95f4,0x19b));var _0x495f=function(_0x53a137,_0x1808b9){_0x53a137=_0x53a137-0x0;var _0x40da7b=_0x95f4[_0x53a137];return _0x40da7b;};'use strict';var EventEmitter=require('events');var FaxInteraction=require(_0x495f('0x0'))['db']['FaxInteraction'];var FaxMessage=require(_0x495f('0x0'))['db'][_0x495f('0x1')];var FaxInteractionEvents=new EventEmitter();FaxInteractionEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x495f('0x2'),'afterUpdate':_0x495f('0x3'),'afterDestroy':_0x495f('0x4')};function emitEvent(_0x12f818){return function(_0x8595ca,_0x18ade9,_0x52dea1){_0x8595ca[_0x495f('0x5')]({'attributes':['id'],'raw':!![]})['then'](function(_0x1ca649){_0x8595ca[_0x495f('0x6')](_0x495f('0x7'),_0x1ca649[_0x495f('0x8')](function(_0x54b646){return{'id':_0x54b646['id']};}));return FaxMessage['findAll']({'where':{'FaxInteractionId':_0x8595ca['id'],'direction':'in','read':![]},'raw':!![]});})[_0x495f('0x9')](function(_0x45cc87){_0x8595ca[_0x495f('0x6')]('unreadMessages',_0x45cc87[_0x495f('0xa')]);FaxInteractionEvents[_0x495f('0xb')](_0x12f818+':'+_0x8595ca['id'],_0x8595ca);FaxInteractionEvents['emit'](_0x12f818,_0x8595ca);_0x52dea1(null);})['catch'](_0x52dea1(null));};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];FaxInteraction[_0x495f('0xc')](e,emitEvent(event));}}module['exports']=FaxInteractionEvents;
\ No newline at end of file
index d95c330..3d7620f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5cf6=['format','lodash','util','../../config/logger','api','moment','request-promise','rimraf','../../config/environment','./faxInteraction.attributes','exports','define','fax_interactions','closed','closedAt'];(function(_0x488884,_0x1050cd){var _0x4fb2ee=function(_0x4dda5b){while(--_0x4dda5b){_0x488884['push'](_0x488884['shift']());}};_0x4fb2ee(++_0x1050cd);}(_0x5cf6,0x1a5));var _0x65cf=function(_0x27af45,_0x1b57aa){_0x27af45=_0x27af45-0x0;var _0x18df21=_0x5cf6[_0x27af45];return _0x18df21;};'use strict';var _=require(_0x65cf('0x0'));var util=require(_0x65cf('0x1'));var logger=require(_0x65cf('0x2'))(_0x65cf('0x3'));var moment=require(_0x65cf('0x4'));var BPromise=require('bluebird');var rp=require(_0x65cf('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x65cf('0x6'));var config=require(_0x65cf('0x7'));var attributes=require(_0x65cf('0x8'));module[_0x65cf('0x9')]=function(_0x8a7858,_0x197cf1){return _0x8a7858[_0x65cf('0xa')]('FaxInteraction',attributes,{'tableName':_0x65cf('0xb'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x1bca6c,_0x1d6081,_0x1007e0){if(_0x1bca6c['changed'](_0x65cf('0xc'))){_0x1bca6c[_0x65cf('0xd')]=moment()[_0x65cf('0xe')]('YYYY-MM-DD\x20HH:mm:ss');}_0x1007e0(null,_0x1bca6c);}}});};
\ No newline at end of file
+var _0x4836=['../../config/logger','api','moment','path','../../config/environment','./faxInteraction.attributes','define','FaxInteraction','fax_interactions','changed','closed','YYYY-MM-DD\x20HH:mm:ss','lodash','util'];(function(_0x383356,_0x33d2f5){var _0x32ee5a=function(_0x2741db){while(--_0x2741db){_0x383356['push'](_0x383356['shift']());}};_0x32ee5a(++_0x33d2f5);}(_0x4836,0x1cc));var _0x6483=function(_0xd77219,_0x34eaf2){_0xd77219=_0xd77219-0x0;var _0x3db9f1=_0x4836[_0xd77219];return _0x3db9f1;};'use strict';var _=require(_0x6483('0x0'));var util=require(_0x6483('0x1'));var logger=require(_0x6483('0x2'))(_0x6483('0x3'));var moment=require(_0x6483('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x6483('0x5'));var rimraf=require('rimraf');var config=require(_0x6483('0x6'));var attributes=require(_0x6483('0x7'));module['exports']=function(_0x40a63d,_0x13b690){return _0x40a63d[_0x6483('0x8')](_0x6483('0x9'),attributes,{'tableName':_0x6483('0xa'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x55b184,_0x5f2c8d,_0x48f965){if(_0x55b184[_0x6483('0xb')](_0x6483('0xc'))){_0x55b184['closedAt']=moment()['format'](_0x6483('0xd'));}_0x48f965(null,_0x55b184);}}});};
\ No newline at end of file
index 340c69f..59a5463 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9783=['ids','omit','spread','AddTags','lodash','util','ioredis','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','./faxInteraction.socket','register','request','then','info','FaxInteraction,\x20%s,\x20%s','request\x20sent','debug','FaxInteraction,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','UpdateFaxInteraction','FaxInteraction','update','body','options','raw','where','attributes','limit','stringify','find','addTags'];(function(_0x5eb22e,_0x27cbac){var _0x27fed5=function(_0x565467){while(--_0x565467){_0x5eb22e['push'](_0x5eb22e['shift']());}};_0x27fed5(++_0x27cbac);}(_0x9783,0x123));var _0x3978=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x9783[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x3978('0x0'));var util=require(_0x3978('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x3978('0x2'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x3978('0x3'))(_0x3978('0x4'));var config=require(_0x3978('0x5'));var jayson=require(_0x3978('0x6'));var client=jayson[_0x3978('0x7')][_0x3978('0x8')]({'port':0x232a});config[_0x3978('0x9')]=_[_0x3978('0xa')](config[_0x3978('0x9')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x3978('0xb'))[_0x3978('0xc')](socket);function respondWithRpcPromise(_0x1eaa59,_0xfd93a3,_0x13ddb3){return new BPromise(function(_0x1c9772,_0x52b4ec){return client[_0x3978('0xd')](_0x1eaa59,_0x13ddb3)[_0x3978('0xe')](function(_0x132bde){logger[_0x3978('0xf')](_0x3978('0x10'),_0xfd93a3,_0x3978('0x11'));logger[_0x3978('0x12')](_0x3978('0x13'),_0xfd93a3,_0x3978('0x11'),JSON['stringify'](_0x132bde));if(_0x132bde[_0x3978('0x14')]){if(_0x132bde['error'][_0x3978('0x15')]===0x1f4){logger[_0x3978('0x14')]('FaxInteraction,\x20%s,\x20%s',_0xfd93a3,_0x132bde[_0x3978('0x14')][_0x3978('0x16')]);return _0x52b4ec(_0x132bde['error']['message']);}logger[_0x3978('0x14')](_0x3978('0x10'),_0xfd93a3,_0x132bde[_0x3978('0x14')]['message']);return _0x1c9772(_0x132bde[_0x3978('0x14')][_0x3978('0x16')]);}else{logger['info'](_0x3978('0x10'),_0xfd93a3,_0x3978('0x11'));_0x1c9772(_0x132bde[_0x3978('0x17')][_0x3978('0x16')]);}})[_0x3978('0x18')](function(_0x158e23){logger[_0x3978('0x14')](_0x3978('0x10'),_0xfd93a3,_0x158e23);_0x52b4ec(_0x158e23);});});}exports[_0x3978('0x19')]=function(_0x519e98){var _0x4b88cd=this;return new Promise(function(_0x2a59b0,_0x1843e3){return db[_0x3978('0x1a')][_0x3978('0x1b')](_0x519e98[_0x3978('0x1c')],{'raw':_0x519e98[_0x3978('0x1d')]?_0x519e98[_0x3978('0x1d')][_0x3978('0x1e')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x519e98[_0x3978('0x1d')]?_0x519e98[_0x3978('0x1d')][_0x3978('0x1f')]||null:null,'attributes':_0x519e98[_0x3978('0x1d')]?_0x519e98['options'][_0x3978('0x20')]||null:null,'limit':_0x519e98['options']?_0x519e98[_0x3978('0x1d')][_0x3978('0x21')]||null:null})[_0x3978('0xe')](function(_0x39e04a){logger[_0x3978('0xf')]('UpdateFaxInteraction',_0x519e98);logger[_0x3978('0x12')](_0x3978('0x19'),_0x519e98,JSON[_0x3978('0x22')](_0x39e04a));_0x2a59b0(_0x39e04a);})[_0x3978('0x18')](function(_0x10aa31){logger[_0x3978('0x14')](_0x3978('0x19'),_0x10aa31['message'],_0x519e98);_0x1843e3(_0x4b88cd['error'](0x1f4,_0x10aa31[_0x3978('0x16')]));});});};exports['AddTagsToFaxInteraction']=function(_0x5096a1){return new Promise(function(_0x4ead18,_0x22e27a){return db[_0x3978('0x1a')][_0x3978('0x23')]({'where':_0x5096a1[_0x3978('0x1d')]?_0x5096a1[_0x3978('0x1d')]['where']||null:null})[_0x3978('0xe')](function(_0x1007ad){if(_0x1007ad){return _0x1007ad[_0x3978('0x24')](_0x5096a1[_0x3978('0x1c')][_0x3978('0x25')],_[_0x3978('0x26')](_0x5096a1['body'],[_0x3978('0x25'),'id'])||{});}})[_0x3978('0x27')](function(_0x203ee7){logger[_0x3978('0xf')]('AddTags',_0x5096a1);logger[_0x3978('0x12')](_0x3978('0x28'),_0x5096a1,JSON['stringify'](_0x203ee7));_0x4ead18(_0x203ee7);})[_0x3978('0x18')](function(_0x2b0ee3){logger['error'](_0x3978('0x28'),_0x2b0ee3[_0x3978('0x16')],_0x5096a1);_0x22e27a(_this[_0x3978('0x14')](0x1f4,_0x2b0ee3[_0x3978('0x16')]));});});};
\ No newline at end of file
+var _0x3752=['bluebird','../../mysqldb','../../config/utils','client','redis','defaults','localhost','socket.io-emitter','./faxInteraction.socket','register','request','then','FaxInteraction,\x20%s,\x20%s','debug','FaxInteraction,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','info','result','UpdateFaxInteraction','FaxInteraction','options','raw','where','attributes','limit','catch','AddTagsToFaxInteraction','find','body','ids','spread','AddTags','lodash','util','moment'];(function(_0x4cebcc,_0x56253e){var _0x4d1669=function(_0x89e326){while(--_0x89e326){_0x4cebcc['push'](_0x4cebcc['shift']());}};_0x4d1669(++_0x56253e);}(_0x3752,0x6f));var _0x2375=function(_0x11963b,_0x5d2da7){_0x11963b=_0x11963b-0x0;var _0x5d451e=_0x3752[_0x11963b];return _0x5d451e;};'use strict';var _=require(_0x2375('0x0'));var util=require(_0x2375('0x1'));var moment=require(_0x2375('0x2'));var BPromise=require(_0x2375('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x2375('0x4'))['db'];var utils=require(_0x2375('0x5'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x2375('0x6')]['http']({'port':0x232a});config[_0x2375('0x7')]=_[_0x2375('0x8')](config[_0x2375('0x7')],{'host':_0x2375('0x9'),'port':0x18eb});var socket=require(_0x2375('0xa'))(new Redis(config[_0x2375('0x7')]));require(_0x2375('0xb'))[_0x2375('0xc')](socket);function respondWithRpcPromise(_0x2fcc05,_0x3266da,_0x5a2d5f){return new BPromise(function(_0x571c28,_0x225f30){return client[_0x2375('0xd')](_0x2fcc05,_0x5a2d5f)[_0x2375('0xe')](function(_0x27a867){logger['info'](_0x2375('0xf'),_0x3266da,'request\x20sent');logger[_0x2375('0x10')](_0x2375('0x11'),_0x3266da,_0x2375('0x12'),JSON[_0x2375('0x13')](_0x27a867));if(_0x27a867[_0x2375('0x14')]){if(_0x27a867[_0x2375('0x14')]['code']===0x1f4){logger['error']('FaxInteraction,\x20%s,\x20%s',_0x3266da,_0x27a867[_0x2375('0x14')][_0x2375('0x15')]);return _0x225f30(_0x27a867[_0x2375('0x14')]['message']);}logger[_0x2375('0x14')](_0x2375('0xf'),_0x3266da,_0x27a867['error'][_0x2375('0x15')]);return _0x571c28(_0x27a867[_0x2375('0x14')][_0x2375('0x15')]);}else{logger[_0x2375('0x16')](_0x2375('0xf'),_0x3266da,_0x2375('0x12'));_0x571c28(_0x27a867[_0x2375('0x17')][_0x2375('0x15')]);}})['catch'](function(_0x584515){logger['error'](_0x2375('0xf'),_0x3266da,_0x584515);_0x225f30(_0x584515);});});}exports[_0x2375('0x18')]=function(_0x54cf59){var _0x3f50b7=this;return new Promise(function(_0x5d196c,_0x4e8313){return db[_0x2375('0x19')]['update'](_0x54cf59['body'],{'raw':_0x54cf59[_0x2375('0x1a')]?_0x54cf59[_0x2375('0x1a')][_0x2375('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x54cf59[_0x2375('0x1a')]?_0x54cf59[_0x2375('0x1a')][_0x2375('0x1c')]||null:null,'attributes':_0x54cf59[_0x2375('0x1a')]?_0x54cf59[_0x2375('0x1a')][_0x2375('0x1d')]||null:null,'limit':_0x54cf59[_0x2375('0x1a')]?_0x54cf59[_0x2375('0x1a')][_0x2375('0x1e')]||null:null})[_0x2375('0xe')](function(_0x46665b){logger[_0x2375('0x16')]('UpdateFaxInteraction',_0x54cf59);logger[_0x2375('0x10')](_0x2375('0x18'),_0x54cf59,JSON[_0x2375('0x13')](_0x46665b));_0x5d196c(_0x46665b);})[_0x2375('0x1f')](function(_0x47e143){logger[_0x2375('0x14')]('UpdateFaxInteraction',_0x47e143[_0x2375('0x15')],_0x54cf59);_0x4e8313(_0x3f50b7[_0x2375('0x14')](0x1f4,_0x47e143[_0x2375('0x15')]));});});};exports[_0x2375('0x20')]=function(_0x27c43f){return new Promise(function(_0x541637,_0x121f8e){return db[_0x2375('0x19')][_0x2375('0x21')]({'where':_0x27c43f['options']?_0x27c43f[_0x2375('0x1a')][_0x2375('0x1c')]||null:null})[_0x2375('0xe')](function(_0x40fe28){if(_0x40fe28){return _0x40fe28['addTags'](_0x27c43f[_0x2375('0x22')][_0x2375('0x23')],_['omit'](_0x27c43f[_0x2375('0x22')],['ids','id'])||{});}})[_0x2375('0x24')](function(_0x2aa341){logger[_0x2375('0x16')](_0x2375('0x25'),_0x27c43f);logger[_0x2375('0x10')](_0x2375('0x25'),_0x27c43f,JSON[_0x2375('0x13')](_0x2aa341));_0x541637(_0x2aa341);})[_0x2375('0x1f')](function(_0x56157e){logger['error'](_0x2375('0x25'),_0x56157e['message'],_0x27c43f);_0x121f8e(_this['error'](0x1f4,_0x56157e[_0x2375('0x15')]));});});};
\ No newline at end of file
index c16e8a6..b9a93fe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0af1=['remove','update','emit','removeListener','register','length','faxInteraction:','./faxInteraction.events'];(function(_0x190131,_0x4f8913){var _0x3b7500=function(_0x2a6eba){while(--_0x2a6eba){_0x190131['push'](_0x190131['shift']());}};_0x3b7500(++_0x4f8913);}(_0x0af1,0xbf));var _0x10af=function(_0x26c8f8,_0x233b26){_0x26c8f8=_0x26c8f8-0x0;var _0x477130=_0x0af1[_0x26c8f8];return _0x477130;};'use strict';var FaxInteractionEvents=require(_0x10af('0x0'));var events=['save',_0x10af('0x1'),_0x10af('0x2')];function createListener(_0x4954f5,_0x5c8881){return function(_0x2e371a){_0x5c8881[_0x10af('0x3')](_0x4954f5,_0x2e371a);};}function removeListener(_0x1aaf71,_0x4ff390){return function(){FaxInteractionEvents[_0x10af('0x4')](_0x1aaf71,_0x4ff390);};}exports[_0x10af('0x5')]=function(_0x42a52b){for(var _0x36342d=0x0,_0x1c0e5c=events[_0x10af('0x6')];_0x36342d<_0x1c0e5c;_0x36342d++){var _0x3e64d0=events[_0x36342d];var _0x22ae46=createListener(_0x10af('0x7')+_0x3e64d0,_0x42a52b);FaxInteractionEvents['on'](_0x3e64d0,_0x22ae46);}};
\ No newline at end of file
+var _0xc1c4=['emit','removeListener','faxInteraction:','./faxInteraction.events','remove','update'];(function(_0x133138,_0x55be23){var _0x419f46=function(_0x2c191d){while(--_0x2c191d){_0x133138['push'](_0x133138['shift']());}};_0x419f46(++_0x55be23);}(_0xc1c4,0x195));var _0x4c1c=function(_0x59df9c,_0x5668b9){_0x59df9c=_0x59df9c-0x0;var _0x248b8a=_0xc1c4[_0x59df9c];return _0x248b8a;};'use strict';var FaxInteractionEvents=require(_0x4c1c('0x0'));var events=['save',_0x4c1c('0x1'),_0x4c1c('0x2')];function createListener(_0x495bec,_0x51d375){return function(_0x1521f6){_0x51d375[_0x4c1c('0x3')](_0x495bec,_0x1521f6);};}function removeListener(_0xc3724c,_0x48f662){return function(){FaxInteractionEvents[_0x4c1c('0x4')](_0xc3724c,_0x48f662);};}exports['register']=function(_0x54afb4){for(var _0x2d80da=0x0,_0x4d7559=events['length'];_0x2d80da<_0x4d7559;_0x2d80da++){var _0xf8fcb7=events[_0x2d80da];var _0x2dcadb=createListener(_0x4c1c('0x5')+_0xf8fcb7,_0x54afb4);FaxInteractionEvents['on'](_0xf8fcb7,_0x2dcadb);}};
\ No newline at end of file
index 880d083..f400273 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x86fe=['/:id','show','/:id/messages','getMessages','/:id/download','download','post','create','addMessage','/:id/tags','tracked','fax','faxinteraction:addtags','addTags','faxinteraction:destroy','destroy','delete','removeTags','multer','util','path','connect-timeout','express','Router','../../components/auth/service','get','isAuthenticated','/describe','describe'];(function(_0x5037ab,_0x43209e){var _0x512adb=function(_0x261783){while(--_0x261783){_0x5037ab['push'](_0x5037ab['shift']());}};_0x512adb(++_0x43209e);}(_0x86fe,0x16e));var _0xe86f=function(_0x8e832c,_0x33b359){_0x8e832c=_0x8e832c-0x0;var _0x34b66c=_0x86fe[_0x8e832c];return _0x34b66c;};'use strict';var multer=require(_0xe86f('0x0'));var util=require(_0xe86f('0x1'));var path=require(_0xe86f('0x2'));var timeout=require(_0xe86f('0x3'));var express=require(_0xe86f('0x4'));var router=express[_0xe86f('0x5')]();var auth=require(_0xe86f('0x6'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./faxInteraction.controller');router[_0xe86f('0x7')]('/',auth[_0xe86f('0x8')](),controller['index']);router[_0xe86f('0x7')](_0xe86f('0x9'),auth['isAuthenticated'](),controller[_0xe86f('0xa')]);router[_0xe86f('0x7')](_0xe86f('0xb'),auth['isAuthenticated'](),controller[_0xe86f('0xc')]);router[_0xe86f('0x7')](_0xe86f('0xd'),auth['isAuthenticated'](),controller[_0xe86f('0xe')]);router[_0xe86f('0x7')](_0xe86f('0xf'),auth[_0xe86f('0x8')](),controller[_0xe86f('0x10')]);router[_0xe86f('0x11')]('/',auth[_0xe86f('0x8')](),controller[_0xe86f('0x12')]);router['post'](_0xe86f('0xd'),auth[_0xe86f('0x8')](),controller[_0xe86f('0x13')]);router[_0xe86f('0x11')](_0xe86f('0x14'),auth[_0xe86f('0x8')](),interaction[_0xe86f('0x15')](_0xe86f('0x16'),_0xe86f('0x17')),controller[_0xe86f('0x18')]);router['put']('/:id',auth['isAuthenticated'](),interaction[_0xe86f('0x15')](_0xe86f('0x16'),'faxinteraction:update'),controller['update']);router['delete']('/:id',auth[_0xe86f('0x8')](),interaction['tracked'](_0xe86f('0x16'),_0xe86f('0x19')),controller[_0xe86f('0x1a')]);router[_0xe86f('0x1b')]('/:id/tags',auth[_0xe86f('0x8')](),controller[_0xe86f('0x1c')]);module['exports']=router;
\ No newline at end of file
+var _0x6c90=['post','/:id/messages','faxinteraction:addtags','addTags','tracked','fax','faxinteraction:update','delete','faxinteraction:destroy','/:id/tags','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxInteraction.controller','isAuthenticated','get','/describe','describe','/:id','/:id/download','download'];(function(_0x18b59f,_0x1b4f64){var _0x2aff9b=function(_0x17f3d9){while(--_0x17f3d9){_0x18b59f['push'](_0x18b59f['shift']());}};_0x2aff9b(++_0x1b4f64);}(_0x6c90,0xe3));var _0x06c9=function(_0x50cd93,_0x202271){_0x50cd93=_0x50cd93-0x0;var _0x130fff=_0x6c90[_0x50cd93];return _0x130fff;};'use strict';var multer=require(_0x06c9('0x0'));var util=require(_0x06c9('0x1'));var path=require(_0x06c9('0x2'));var timeout=require(_0x06c9('0x3'));var express=require('express');var router=express[_0x06c9('0x4')]();var auth=require(_0x06c9('0x5'));var interaction=require(_0x06c9('0x6'));var config=require(_0x06c9('0x7'));var controller=require(_0x06c9('0x8'));router['get']('/',auth[_0x06c9('0x9')](),controller['index']);router[_0x06c9('0xa')](_0x06c9('0xb'),auth[_0x06c9('0x9')](),controller[_0x06c9('0xc')]);router[_0x06c9('0xa')](_0x06c9('0xd'),auth[_0x06c9('0x9')](),controller['show']);router[_0x06c9('0xa')]('/:id/messages',auth['isAuthenticated'](),controller['getMessages']);router['get'](_0x06c9('0xe'),auth['isAuthenticated'](),controller[_0x06c9('0xf')]);router['post']('/',auth[_0x06c9('0x9')](),controller['create']);router[_0x06c9('0x10')](_0x06c9('0x11'),auth[_0x06c9('0x9')](),controller['addMessage']);router[_0x06c9('0x10')]('/:id/tags',auth[_0x06c9('0x9')](),interaction['tracked']('fax',_0x06c9('0x12')),controller[_0x06c9('0x13')]);router['put'](_0x06c9('0xd'),auth[_0x06c9('0x9')](),interaction[_0x06c9('0x14')](_0x06c9('0x15'),_0x06c9('0x16')),controller['update']);router[_0x06c9('0x17')](_0x06c9('0xd'),auth['isAuthenticated'](),interaction[_0x06c9('0x14')](_0x06c9('0x15'),_0x06c9('0x18')),controller['destroy']);router[_0x06c9('0x17')](_0x06c9('0x19'),auth[_0x06c9('0x9')](),controller['removeTags']);module[_0x06c9('0x1a')]=router;
\ No newline at end of file
index 6f96224..03a6d0a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x886d=['DATE','sequelize','exports','TEXT','medium','BOOLEAN','ENUM','out'];(function(_0x5207a2,_0x316913){var _0x314716=function(_0x2ca663){while(--_0x2ca663){_0x5207a2['push'](_0x5207a2['shift']());}};_0x314716(++_0x316913);}(_0x886d,0xe9));var _0xd886=function(_0xfacee2,_0x29c3b0){_0xfacee2=_0xfacee2-0x0;var _0x4cc9ea=_0x886d[_0xfacee2];return _0x4cc9ea;};'use strict';var Sequelize=require(_0xd886('0x0'));module[_0xd886('0x1')]={'body':{'type':Sequelize[_0xd886('0x2')](_0xd886('0x3')),'allowNull':![]},'read':{'type':Sequelize[_0xd886('0x4')],'defaultValue':![]},'direction':{'type':Sequelize[_0xd886('0x5')]('in',_0xd886('0x6')),'defaultValue':_0xd886('0x6'),'allowNull':![]},'failMessage':{'type':Sequelize['TEXT'],'defaultValue':null},'readAt':{'type':Sequelize[_0xd886('0x7')]}};
\ No newline at end of file
+var _0x9cc7=['TEXT','DATE','sequelize','exports','medium','BOOLEAN','out'];(function(_0x22d423,_0x4ee083){var _0x1017ed=function(_0x29dd73){while(--_0x29dd73){_0x22d423['push'](_0x22d423['shift']());}};_0x1017ed(++_0x4ee083);}(_0x9cc7,0x64));var _0x79cc=function(_0x5534b7,_0xbe6ba4){_0x5534b7=_0x5534b7-0x0;var _0x34af05=_0x9cc7[_0x5534b7];return _0x34af05;};'use strict';var Sequelize=require(_0x79cc('0x0'));module[_0x79cc('0x1')]={'body':{'type':Sequelize['TEXT'](_0x79cc('0x2')),'allowNull':![]},'read':{'type':Sequelize[_0x79cc('0x3')],'defaultValue':![]},'direction':{'type':Sequelize['ENUM']('in',_0x79cc('0x4')),'defaultValue':_0x79cc('0x4'),'allowNull':![]},'failMessage':{'type':Sequelize[_0x79cc('0x5')],'defaultValue':null},'readAt':{'type':Sequelize[_0x79cc('0x6')]}};
\ No newline at end of file
index a97195b..0ae56e6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x24a6=['intersection','attributes','fields','length','hasOwnProperty','limit','order','sort','where','map','key','VIRTUAL','field','merge','options','then','include','rows','body','find','params','describe','../../config/logger','fax-interactions','fax','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','CmContact','Contact','FaxInteractionId','isNil','read1stAt','interaction','get','[FAXMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','user','null','AcceptMessage','acceptMessage','manual','interface','SIP/%s','channel','EventManager','agent','FaxInteraction','[FAXMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','RejectMessage','rejectMessage','event','rejectmessage','create','ContactId','Attachment','findOne','AttachmentId','SendFax','/var/opt/motion2/server/files/attachments/%s','basename','download','join','root','server','files','attachments','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','redis','defaults','register','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','FaxMessage,\x20%s,\x20%s','debug','FaxMessage,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','catch','sendStatus','status','json','count','offset','set','apply','reject','update','destroy','stack','name','send','FaxMessage','rawAttributes','model','keys','query','filters'];(function(_0x3760b4,_0x226cce){var _0x45ba7d=function(_0x292f6d){while(--_0x292f6d){_0x3760b4['push'](_0x3760b4['shift']());}};_0x45ba7d(++_0x226cce);}(_0x24a6,0x14f));var _0x624a=function(_0xf419f7,_0x34e0c1){_0xf419f7=_0xf419f7-0x0;var _0x4d7af3=_0x24a6[_0xf419f7];return _0x4d7af3;};'use strict';var pdf=require(_0x624a('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x624a('0x1'));var zipdir=require(_0x624a('0x2'));var jsonpatch=require(_0x624a('0x3'));var rp=require(_0x624a('0x4'));var moment=require(_0x624a('0x5'));var BPromise=require(_0x624a('0x6'));var Mustache=require(_0x624a('0x7'));var util=require(_0x624a('0x8'));var path=require(_0x624a('0x9'));var sox=require(_0x624a('0xa'));var csv=require(_0x624a('0xb'));var ejs=require(_0x624a('0xc'));var fs=require('fs');var _=require(_0x624a('0xd'));var squel=require(_0x624a('0xe'));var crypto=require(_0x624a('0xf'));var jsforce=require(_0x624a('0x10'));var deskjs=require(_0x624a('0x11'));var toCsv=require(_0x624a('0xb'));var querystring=require(_0x624a('0x12'));var Papa=require(_0x624a('0x13'));var Redis=require(_0x624a('0x14'));var authService=require(_0x624a('0x15'));var qs=require(_0x624a('0x16'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0x624a('0x17'));var utils=require(_0x624a('0x18'));var config=require(_0x624a('0x19'));var db=require('../../mysqldb')['db'];config[_0x624a('0x1a')]=_[_0x624a('0x1b')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x624a('0x1a')]));require('./faxMessage.socket')[_0x624a('0x1c')](socket);var jayson=require(_0x624a('0x1d'));var client=jayson[_0x624a('0x1e')][_0x624a('0x1f')]({'port':0x232c});var client9002=jayson['client'][_0x624a('0x1f')]({'port':0x232a});function checkPasswordPattern(_0x4935f4,_0x424200,_0x195bfc){if(_0x195bfc){var _0x53005e=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x53005e[_0x624a('0x20')](_0x424200)){return _0x4935f4;}else{throw new Error(_0x624a('0x21'));}}else{return _0x4935f4;}}function respondWithRpcPromise(_0x3b6414,_0x1082a0,_0xce9cd5,_0x158b72){return new BPromise(function(_0x364867,_0x32d6a0){var _0x35342c=_0x158b72||client;return _0x35342c[_0x624a('0x22')](_0x3b6414,_0xce9cd5)['then'](function(_0x32a44d){logger['info'](_0x624a('0x23'),_0x1082a0,'request\x20sent');logger[_0x624a('0x24')](_0x624a('0x25'),_0x1082a0,_0x624a('0x26'),JSON[_0x624a('0x27')](_0x32a44d));if(_0x32a44d[_0x624a('0x28')]){if(_0x32a44d['error'][_0x624a('0x29')]===0x1f4){logger[_0x624a('0x28')](_0x624a('0x23'),_0x1082a0,_0x32a44d[_0x624a('0x28')]['message']);return _0x32d6a0(_0x32a44d[_0x624a('0x28')][_0x624a('0x2a')]);}logger[_0x624a('0x28')]('FaxMessage,\x20%s,\x20%s',_0x1082a0,_0x32a44d['error']['message']);return _0x364867(_0x32a44d[_0x624a('0x28')][_0x624a('0x2a')]);}else{logger[_0x624a('0x2b')](_0x624a('0x23'),_0x1082a0,'request\x20sent');_0x364867(_0x32a44d['result'][_0x624a('0x2a')]);}})[_0x624a('0x2c')](function(_0x57eb2e){logger[_0x624a('0x28')](_0x624a('0x23'),_0x1082a0,_0x57eb2e);_0x32d6a0(_0x57eb2e);});});}function respondWithStatusCode(_0x534c41,_0x5366c4){_0x5366c4=_0x5366c4||0xcc;return function(_0x585126){if(_0x585126){return _0x534c41[_0x624a('0x2d')](_0x5366c4);}return _0x534c41[_0x624a('0x2e')](_0x5366c4)['end']();};}function respondWithResult(_0x57d2d5,_0x59917f){_0x59917f=_0x59917f||0xc8;return function(_0x422c20){if(_0x422c20){return _0x57d2d5[_0x624a('0x2e')](_0x59917f)[_0x624a('0x2f')](_0x422c20);}};}function respondWithFilteredResult(_0x55dff7,_0x16178d){return function(_0x1ba339){if(_0x1ba339){var _0x56dfb2=_0x1ba339[_0x624a('0x30')],_0x466af4=_0x16178d[_0x624a('0x31')],_0x59df8f=_0x16178d[_0x624a('0x31')]+_0x16178d['limit'],_0x209ca5;if(_0x59df8f>=_0x56dfb2){_0x59df8f=_0x56dfb2;_0x209ca5=0xc8;}else{_0x209ca5=0xce;}_0x55dff7[_0x624a('0x2e')](_0x209ca5);return _0x55dff7[_0x624a('0x32')]('Content-Range',_0x466af4+'-'+_0x59df8f+'/'+_0x56dfb2)[_0x624a('0x2f')](_0x1ba339);}return null;};}function patchUpdates(_0x11dcf4){return function(_0x100545){try{jsonpatch[_0x624a('0x33')](_0x100545,_0x11dcf4,!![]);}catch(_0x3b91ec){return BPromise[_0x624a('0x34')](_0x3b91ec);}return _0x100545['save']();};}function saveUpdates(_0x55d8f5,_0x45a3c2){return function(_0x3315aa){if(_0x3315aa){return _0x3315aa[_0x624a('0x35')](_0x55d8f5)['then'](function(_0x35b323){return _0x35b323;});}return null;};}function removeEntity(_0x5080a4,_0x54b4f7){return function(_0x5aa5ce){if(_0x5aa5ce){return _0x5aa5ce[_0x624a('0x36')]()['then'](function(){_0x5080a4[_0x624a('0x2e')](0xcc)['end']();});}};}function handleEntityNotFound(_0x21df69,_0x50f561){return function(_0x4d9bee){if(!_0x4d9bee){_0x21df69[_0x624a('0x2d')](0x194);}return _0x4d9bee;};}function handleError(_0x109899,_0x475fe6){_0x475fe6=_0x475fe6||0x1f4;return function(_0xa7b840){logger[_0x624a('0x28')](_0xa7b840[_0x624a('0x37')]);if(_0xa7b840[_0x624a('0x38')]){delete _0xa7b840[_0x624a('0x38')];}_0x109899[_0x624a('0x2e')](_0x475fe6)[_0x624a('0x39')](_0xa7b840);};}exports['index']=function(_0x3a784e,_0x14f9dc){var _0x24ccd4={},_0x4e44bb={},_0x3bbf38={'count':0x0,'rows':[]};var _0x5e9e7c=db[_0x624a('0x3a')][_0x624a('0x3b')];_0x4e44bb[_0x624a('0x3c')]=_[_0x624a('0x3d')](_0x5e9e7c);_0x4e44bb[_0x624a('0x3e')]=_[_0x624a('0x3d')](_0x3a784e['query']);_0x4e44bb[_0x624a('0x3f')]=_[_0x624a('0x40')](_0x4e44bb[_0x624a('0x3c')],_0x4e44bb['query']);_0x24ccd4[_0x624a('0x41')]=_['intersection'](_0x4e44bb['model'],qs[_0x624a('0x42')](_0x3a784e[_0x624a('0x3e')][_0x624a('0x42')]));_0x24ccd4['attributes']=_0x24ccd4['attributes'][_0x624a('0x43')]?_0x24ccd4[_0x624a('0x41')]:_0x4e44bb['model'];if(!_0x3a784e[_0x624a('0x3e')][_0x624a('0x44')]('nolimit')){_0x24ccd4[_0x624a('0x45')]=qs[_0x624a('0x45')](_0x3a784e[_0x624a('0x3e')][_0x624a('0x45')]);_0x24ccd4['offset']=qs['offset'](_0x3a784e['query'][_0x624a('0x31')]);}_0x24ccd4[_0x624a('0x46')]=qs[_0x624a('0x47')](_0x3a784e[_0x624a('0x3e')][_0x624a('0x47')]);_0x24ccd4[_0x624a('0x48')]=qs[_0x624a('0x3f')](_['pick'](_0x3a784e[_0x624a('0x3e')],_0x4e44bb[_0x624a('0x3f')]));if(_0x3a784e['query']['filter']){_0x24ccd4[_0x624a('0x48')]=_['merge'](_0x24ccd4[_0x624a('0x48')],{'$or':_[_0x624a('0x49')](_0x5e9e7c,function(_0x935e19){if(_0x935e19['type'][_0x624a('0x4a')]!==_0x624a('0x4b')){var _0x96a1a8={};_0x96a1a8[_0x935e19[_0x624a('0x4c')]]={'$like':'%'+_0x3a784e[_0x624a('0x3e')]['filter']+'%'};return _0x96a1a8;}})});}_0x24ccd4=_[_0x624a('0x4d')]({},_0x24ccd4,_0x3a784e[_0x624a('0x4e')]);var _0x20d2e2={'where':_0x24ccd4['where']};return db[_0x624a('0x3a')][_0x624a('0x30')](_0x20d2e2)[_0x624a('0x4f')](function(_0x18f37f){_0x3bbf38[_0x624a('0x30')]=_0x18f37f;if(_0x3a784e[_0x624a('0x3e')]['includeAll']){_0x24ccd4[_0x624a('0x50')]=[{'all':!![]}];}return db['FaxMessage']['findAll'](_0x24ccd4);})['then'](function(_0xc2884b){_0x3bbf38[_0x624a('0x51')]=_0xc2884b;return _0x3bbf38;})[_0x624a('0x4f')](respondWithFilteredResult(_0x14f9dc,_0x24ccd4))[_0x624a('0x2c')](handleError(_0x14f9dc,null));};exports['show']=function(_0x18c318,_0x4283ff){var _0x6528a0={'raw':!![],'where':{'id':_0x18c318['params']['id']}},_0x5469bf={};_0x5469bf[_0x624a('0x3c')]=_[_0x624a('0x3d')](db[_0x624a('0x3a')][_0x624a('0x3b')]);_0x5469bf[_0x624a('0x3e')]=_[_0x624a('0x3d')](_0x18c318['query']);_0x5469bf[_0x624a('0x3f')]=_[_0x624a('0x40')](_0x5469bf['model'],_0x5469bf[_0x624a('0x3e')]);_0x6528a0[_0x624a('0x41')]=_[_0x624a('0x40')](_0x5469bf[_0x624a('0x3c')],qs[_0x624a('0x42')](_0x18c318[_0x624a('0x3e')]['fields']));_0x6528a0[_0x624a('0x41')]=_0x6528a0[_0x624a('0x41')]['length']?_0x6528a0[_0x624a('0x41')]:_0x5469bf[_0x624a('0x3c')];if(_0x18c318[_0x624a('0x3e')]['includeAll']){_0x6528a0[_0x624a('0x50')]=[{'all':!![]}];}_0x6528a0=_[_0x624a('0x4d')]({},_0x6528a0,_0x18c318[_0x624a('0x4e')]);return db['FaxMessage']['find'](_0x6528a0)['then'](handleEntityNotFound(_0x4283ff,null))[_0x624a('0x4f')](respondWithResult(_0x4283ff,null))[_0x624a('0x2c')](handleError(_0x4283ff,null));};exports[_0x624a('0x35')]=function(_0x3c116f,_0x1f7c86){if(_0x3c116f['body']['id']){delete _0x3c116f[_0x624a('0x52')]['id'];}return db[_0x624a('0x3a')][_0x624a('0x53')]({'where':{'id':_0x3c116f[_0x624a('0x54')]['id']}})['then'](handleEntityNotFound(_0x1f7c86,null))['then'](saveUpdates(_0x3c116f[_0x624a('0x52')],null))[_0x624a('0x4f')](respondWithResult(_0x1f7c86,null))['catch'](handleError(_0x1f7c86,null));};exports['destroy']=function(_0x21d1a0,_0x10e330){return db[_0x624a('0x3a')]['find']({'where':{'id':_0x21d1a0['params']['id']}})[_0x624a('0x4f')](handleEntityNotFound(_0x10e330,null))['then'](removeEntity(_0x10e330,null))[_0x624a('0x2c')](handleError(_0x10e330,null));};exports[_0x624a('0x55')]=function(_0x10ff3e,_0x28c700){return db['FaxMessage'][_0x624a('0x55')]()[_0x624a('0x4f')](respondWithResult(_0x28c700,null))[_0x624a('0x2c')](handleError(_0x28c700,null));};var interaction_log=require(_0x624a('0x56'))(_0x624a('0x57'));exports['accept']=function(_0x466df6,_0x23cf77,_0x466078){var _0x765502={'channel':_0x624a('0x58')};if(_0x466df6['body']['id']){delete _0x466df6[_0x624a('0x52')]['id'];}_0x466df6['body'][_0x624a('0x59')]=!![];_0x466df6[_0x624a('0x52')][_0x624a('0x5a')]=moment()[_0x624a('0x5b')](_0x624a('0x5c'));_0x466df6[_0x624a('0x52')][_0x624a('0x5d')]=_0x466df6[_0x624a('0x52')][_0x624a('0x5d')]||_0x466df6['user']['id'];return db[_0x624a('0x3a')][_0x624a('0x53')]({'where':{'id':_0x466df6[_0x624a('0x54')]['id'],'UserId':null},'include':[{'model':db[_0x624a('0x5e')],'as':_0x624a('0x5f')}]})['then'](handleEntityNotFound(_0x23cf77,null))['then'](saveUpdates(_0x466df6['body'],null))[_0x624a('0x4f')](function(_0x501db3){if(_0x501db3){_0x765502[_0x624a('0x2a')]=_0x501db3['get']({'plain':!![]});return db['FaxInteraction'][_0x624a('0x53')]({'where':{'id':_0x501db3[_0x624a('0x60')]}});}return null;})[_0x624a('0x4f')](handleEntityNotFound(_0x23cf77,null))['then'](function(_0x6d88d7){if(_0x6d88d7){return _0x6d88d7[_0x624a('0x35')]({'UserId':_0x466df6['body']['UserId'],'read1stAt':_[_0x624a('0x61')](_0x6d88d7[_0x624a('0x62')])?moment()[_0x624a('0x5b')](_0x624a('0x5c')):undefined});}return null;})['then'](function(_0x1db2f7){if(_0x1db2f7){_0x765502[_0x624a('0x63')]=_0x1db2f7[_0x624a('0x64')]({'plain':!![]});interaction_log['info'](_0x624a('0x65'),_0x466df6[_0x624a('0x66')]['id'],_0x466df6[_0x624a('0x66')][_0x624a('0x38')],_0x466df6[_0x624a('0x66')]['role'],_0x765502[_0x624a('0x63')]['id'],_0x466df6[_0x624a('0x52')]?JSON[_0x624a('0x27')](_0x466df6[_0x624a('0x52')]):_0x624a('0x67'));return respondWithRpcPromise(_0x624a('0x68'),_0x624a('0x69'),_0x765502);}return null;})['then'](function(_0xa3dbef){if(_0xa3dbef){if(_0x466df6[_0x624a('0x52')][_0x624a('0x6a')]){_0x765502[_0x624a('0x2a')][_0x624a('0x6b')]=util[_0x624a('0x5b')](_0x624a('0x6c'),_0x466df6[_0x624a('0x66')]['name']);_0x765502[_0x624a('0x2a')][_0x624a('0x6d')]=_0x765502[_0x624a('0x6d')];_0x765502[_0x624a('0x2a')]['event']='accept';return respondWithRpcPromise(_0x624a('0x6e'),_0x624a('0x6e'),{'event':'acceptmessage','message':_0x765502[_0x624a('0x2a')]},client9002)[_0x624a('0x4f')](function(){return _0x765502;});}return _0x765502;}return null;})[_0x624a('0x4f')](respondWithResult(_0x23cf77,null))[_0x624a('0x2c')](handleError(_0x23cf77,null));};var interaction_log=require(_0x624a('0x56'))(_0x624a('0x57'));exports[_0x624a('0x34')]=function(_0x28ed5b,_0x35dc45,_0x284925){var _0x3b1e43={'agent':{},'channel':_0x624a('0x58')};if(_0x28ed5b[_0x624a('0x52')]['id']){delete _0x28ed5b['body']['id'];}_0x28ed5b['body'][_0x624a('0x5d')]=_0x28ed5b[_0x624a('0x52')]['UserId']||_0x28ed5b[_0x624a('0x66')]['id'];_0x3b1e43[_0x624a('0x6f')]['id']=_0x28ed5b[_0x624a('0x52')][_0x624a('0x5d')];return db['FaxMessage']['find']({'where':{'id':_0x28ed5b[_0x624a('0x54')]['id'],'UserId':null}})['then'](handleEntityNotFound(_0x35dc45,null))[_0x624a('0x4f')](function(_0x5cc0a7){if(_0x5cc0a7){_0x3b1e43[_0x624a('0x2a')]=_0x5cc0a7['get']({'plain':!![]});return db[_0x624a('0x70')][_0x624a('0x53')]({'where':{'id':_0x5cc0a7[_0x624a('0x60')]}});}return null;})[_0x624a('0x4f')](handleEntityNotFound(_0x35dc45,null))[_0x624a('0x4f')](function(_0x3ea486){if(_0x3ea486){_0x3b1e43[_0x624a('0x63')]=_0x3ea486[_0x624a('0x64')]({'plain':!![]});interaction_log[_0x624a('0x2b')](_0x624a('0x71'),_0x28ed5b['user']['id'],_0x28ed5b[_0x624a('0x66')][_0x624a('0x38')],_0x28ed5b[_0x624a('0x66')][_0x624a('0x72')],_0x3b1e43[_0x624a('0x63')]['id'],_0x28ed5b[_0x624a('0x52')]?JSON['stringify'](_0x28ed5b['body']):_0x624a('0x67'));return respondWithRpcPromise(_0x624a('0x73'),_0x624a('0x74'),_0x3b1e43);}return null;})[_0x624a('0x4f')](function(_0xb2245a){if(_0xb2245a){_0xb2245a['message'][_0x624a('0x6b')]=util['format']('SIP/%s',_0x28ed5b[_0x624a('0x66')][_0x624a('0x38')]);_0xb2245a[_0x624a('0x2a')][_0x624a('0x6d')]=_0x3b1e43[_0x624a('0x6d')];_0xb2245a[_0x624a('0x2a')][_0x624a('0x75')]=_0x624a('0x34');respondWithRpcPromise(_0x624a('0x6e'),_0x624a('0x6e'),{'event':_0x624a('0x76'),'message':_0xb2245a[_0x624a('0x2a')]},client9002);return _0x3b1e43;}return null;})[_0x624a('0x4f')](respondWithResult(_0x35dc45,null))[_0x624a('0x2c')](handleError(_0x35dc45,null));};exports[_0x624a('0x77')]=function(_0x22ac0a,_0x53abf0){var _0x48a842;return db[_0x624a('0x3a')][_0x624a('0x77')](_0x22ac0a[_0x624a('0x52')],{})['then'](function(_0x1b7c74){_0x48a842=_0x1b7c74;return db[_0x624a('0x5e')]['findOne']({'where':{'id':_0x48a842[_0x624a('0x78')]}});})['then'](function(_0xb4cbba){if(_[_0x624a('0x61')](_0xb4cbba)){return;}else{_0x48a842[_0x624a('0x58')]=_0xb4cbba[_0x624a('0x58')];return db[_0x624a('0x79')][_0x624a('0x7a')]({'where':{'id':_0x48a842[_0x624a('0x7b')]}});}})[_0x624a('0x4f')](function(_0x7d1ff2){return respondWithRpcPromise(_0x624a('0x7c'),_0x624a('0x7c'),{'FaxAccountId':_[_0x624a('0x61')](_0x22ac0a['body'])?undefined:_0x22ac0a['body']['FaxAccountId'],'path':_[_0x624a('0x61')](_0x7d1ff2)?undefined:util[_0x624a('0x5b')](_0x624a('0x7d'),_0x7d1ff2[_0x624a('0x7e')]),'fax':_[_0x624a('0x61')](_0x48a842[_0x624a('0x58')])?undefined:_0x48a842[_0x624a('0x58')],'AttachmentId':_0x48a842['AttachmentId']},client9002);})[_0x624a('0x4f')](respondWithResult(_0x53abf0,0xc9))['catch'](handleError(_0x53abf0,null));};exports[_0x624a('0x7f')]=function(_0x31df3f,_0x4dc7cc){var _0x54bd4a=path[_0x624a('0x80')](config[_0x624a('0x81')],_0x624a('0x82'),_0x624a('0x83'),_0x624a('0x84'));return db['FaxMessage'][_0x624a('0x53')]({'where':{'id':_0x31df3f[_0x624a('0x54')]['id']},'include':[{'model':db[_0x624a('0x79')],'as':_0x624a('0x79')}]})[_0x624a('0x4f')](handleEntityNotFound(_0x4dc7cc,null))['then'](function(_0x4c0979){if(_0x4c0979){return _0x4dc7cc['download'](path[_0x624a('0x80')](_0x54bd4a,_0x4c0979[_0x624a('0x79')]['basename']));}})[_0x624a('0x2c')](handleError(_0x4dc7cc,null));};
\ No newline at end of file
+var _0xad95=['querystring','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../mysqldb','redis','defaults','localhost','socket.io-emitter','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','FaxMessage,\x20%s,\x20%s','debug','stringify','error','code','message','request\x20sent','result','end','status','json','count','offset','set','apply','reject','save','stack','name','send','FaxMessage','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','limit','sort','pick','filter','where','merge','type','key','VIRTUAL','include','findAll','rows','catch','show','params','includeAll','options','find','update','body','destroy','describe','../../config/logger','fax-interactions','accept','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','CmContact','get','FaxInteraction','FaxInteractionId','isNil','read1stAt','interaction','user','role','manual','interface','SIP/%s','channel','EventManager','acceptmessage','fax','agent','[FAXMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','create','findOne','ContactId','Attachment','AttachmentId','SendFax','FaxAccountId','basename','root','server','files','attachments','download','join','html-pdf','eml-format','rimraf','request-promise','moment','util','lodash','squel','crypto','jsforce','desk.js'];(function(_0x4ceda9,_0x10a0b1){var _0x2ab459=function(_0x25ecf5){while(--_0x25ecf5){_0x4ceda9['push'](_0x4ceda9['shift']());}};_0x2ab459(++_0x10a0b1);}(_0xad95,0x70));var _0x5ad9=function(_0x343b85,_0x378fa8){_0x343b85=_0x343b85-0x0;var _0x21434e=_0xad95[_0x343b85];return _0x21434e;};'use strict';var pdf=require(_0x5ad9('0x0'));var emlformat=require(_0x5ad9('0x1'));var rimraf=require(_0x5ad9('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x5ad9('0x3'));var moment=require(_0x5ad9('0x4'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x5ad9('0x5'));var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x5ad9('0x6'));var squel=require(_0x5ad9('0x7'));var crypto=require(_0x5ad9('0x8'));var jsforce=require(_0x5ad9('0x9'));var deskjs=require(_0x5ad9('0xa'));var toCsv=require('to-csv');var querystring=require(_0x5ad9('0xb'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x5ad9('0xc'));var qs=require(_0x5ad9('0xd'));var hardwareService=require(_0x5ad9('0xe'));var logger=require('../../config/logger')(_0x5ad9('0xf'));var utils=require(_0x5ad9('0x10'));var config=require('../../config/environment');var db=require(_0x5ad9('0x11'))['db'];config[_0x5ad9('0x12')]=_[_0x5ad9('0x13')](config[_0x5ad9('0x12')],{'host':_0x5ad9('0x14'),'port':0x18eb});var socket=require(_0x5ad9('0x15'))(new Redis(config['redis']));require('./faxMessage.socket')['register'](socket);var jayson=require(_0x5ad9('0x16'));var client=jayson[_0x5ad9('0x17')]['http']({'port':0x232c});var client9002=jayson[_0x5ad9('0x17')][_0x5ad9('0x18')]({'port':0x232a});function checkPasswordPattern(_0x3f16ef,_0x543743,_0x3da125){if(_0x3da125){var _0x32b0bd=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x32b0bd[_0x5ad9('0x19')](_0x543743)){return _0x3f16ef;}else{throw new Error(_0x5ad9('0x1a'));}}else{return _0x3f16ef;}}function respondWithRpcPromise(_0x36e61f,_0x390d96,_0x521cc3,_0x1c0b8e){return new BPromise(function(_0x54f392,_0x3d1c8f){var _0x28682f=_0x1c0b8e||client;return _0x28682f[_0x5ad9('0x1b')](_0x36e61f,_0x521cc3)[_0x5ad9('0x1c')](function(_0x1c5ab7){logger[_0x5ad9('0x1d')](_0x5ad9('0x1e'),_0x390d96,'request\x20sent');logger[_0x5ad9('0x1f')]('FaxMessage,\x20%s,\x20%s,\x20%s',_0x390d96,'request\x20sent',JSON[_0x5ad9('0x20')](_0x1c5ab7));if(_0x1c5ab7['error']){if(_0x1c5ab7[_0x5ad9('0x21')][_0x5ad9('0x22')]===0x1f4){logger[_0x5ad9('0x21')](_0x5ad9('0x1e'),_0x390d96,_0x1c5ab7[_0x5ad9('0x21')]['message']);return _0x3d1c8f(_0x1c5ab7[_0x5ad9('0x21')]['message']);}logger[_0x5ad9('0x21')]('FaxMessage,\x20%s,\x20%s',_0x390d96,_0x1c5ab7['error']['message']);return _0x54f392(_0x1c5ab7[_0x5ad9('0x21')][_0x5ad9('0x23')]);}else{logger[_0x5ad9('0x1d')](_0x5ad9('0x1e'),_0x390d96,_0x5ad9('0x24'));_0x54f392(_0x1c5ab7[_0x5ad9('0x25')][_0x5ad9('0x23')]);}})['catch'](function(_0x54e9dd){logger[_0x5ad9('0x21')]('FaxMessage,\x20%s,\x20%s',_0x390d96,_0x54e9dd);_0x3d1c8f(_0x54e9dd);});});}function respondWithStatusCode(_0x3a2357,_0x584de3){_0x584de3=_0x584de3||0xcc;return function(_0x346f35){if(_0x346f35){return _0x3a2357['sendStatus'](_0x584de3);}return _0x3a2357['status'](_0x584de3)[_0x5ad9('0x26')]();};}function respondWithResult(_0x46d565,_0x49b3df){_0x49b3df=_0x49b3df||0xc8;return function(_0x509d41){if(_0x509d41){return _0x46d565[_0x5ad9('0x27')](_0x49b3df)[_0x5ad9('0x28')](_0x509d41);}};}function respondWithFilteredResult(_0x1b6faf,_0x2ad078){return function(_0xe06a1d){if(_0xe06a1d){var _0x3a4720=_0xe06a1d[_0x5ad9('0x29')],_0x5e5656=_0x2ad078[_0x5ad9('0x2a')],_0x132ec6=_0x2ad078['offset']+_0x2ad078['limit'],_0x12867b;if(_0x132ec6>=_0x3a4720){_0x132ec6=_0x3a4720;_0x12867b=0xc8;}else{_0x12867b=0xce;}_0x1b6faf[_0x5ad9('0x27')](_0x12867b);return _0x1b6faf[_0x5ad9('0x2b')]('Content-Range',_0x5e5656+'-'+_0x132ec6+'/'+_0x3a4720)['json'](_0xe06a1d);}return null;};}function patchUpdates(_0x59ca94){return function(_0x43dc66){try{jsonpatch[_0x5ad9('0x2c')](_0x43dc66,_0x59ca94,!![]);}catch(_0x51069d){return BPromise[_0x5ad9('0x2d')](_0x51069d);}return _0x43dc66[_0x5ad9('0x2e')]();};}function saveUpdates(_0x4688fc,_0x356373){return function(_0x4daf7b){if(_0x4daf7b){return _0x4daf7b['update'](_0x4688fc)[_0x5ad9('0x1c')](function(_0x433728){return _0x433728;});}return null;};}function removeEntity(_0x2406d5,_0x240e5a){return function(_0x211426){if(_0x211426){return _0x211426['destroy']()[_0x5ad9('0x1c')](function(){_0x2406d5[_0x5ad9('0x27')](0xcc)[_0x5ad9('0x26')]();});}};}function handleEntityNotFound(_0x18d300,_0x7a673f){return function(_0x1f67d4){if(!_0x1f67d4){_0x18d300['sendStatus'](0x194);}return _0x1f67d4;};}function handleError(_0x1486af,_0x4cad35){_0x4cad35=_0x4cad35||0x1f4;return function(_0x47ae79){logger[_0x5ad9('0x21')](_0x47ae79[_0x5ad9('0x2f')]);if(_0x47ae79['name']){delete _0x47ae79[_0x5ad9('0x30')];}_0x1486af[_0x5ad9('0x27')](_0x4cad35)[_0x5ad9('0x31')](_0x47ae79);};}exports['index']=function(_0x2154f6,_0x1815cc){var _0x1f8b9b={},_0x234f92={},_0x51712a={'count':0x0,'rows':[]};var _0x25f1ab=db[_0x5ad9('0x32')][_0x5ad9('0x33')];_0x234f92[_0x5ad9('0x34')]=_[_0x5ad9('0x35')](_0x25f1ab);_0x234f92[_0x5ad9('0x36')]=_[_0x5ad9('0x35')](_0x2154f6[_0x5ad9('0x36')]);_0x234f92[_0x5ad9('0x37')]=_['intersection'](_0x234f92[_0x5ad9('0x34')],_0x234f92[_0x5ad9('0x36')]);_0x1f8b9b[_0x5ad9('0x38')]=_[_0x5ad9('0x39')](_0x234f92[_0x5ad9('0x34')],qs['fields'](_0x2154f6[_0x5ad9('0x36')][_0x5ad9('0x3a')]));_0x1f8b9b[_0x5ad9('0x38')]=_0x1f8b9b['attributes'][_0x5ad9('0x3b')]?_0x1f8b9b[_0x5ad9('0x38')]:_0x234f92[_0x5ad9('0x34')];if(!_0x2154f6['query'][_0x5ad9('0x3c')]('nolimit')){_0x1f8b9b['limit']=qs[_0x5ad9('0x3d')](_0x2154f6[_0x5ad9('0x36')][_0x5ad9('0x3d')]);_0x1f8b9b[_0x5ad9('0x2a')]=qs['offset'](_0x2154f6['query'][_0x5ad9('0x2a')]);}_0x1f8b9b['order']=qs[_0x5ad9('0x3e')](_0x2154f6['query'][_0x5ad9('0x3e')]);_0x1f8b9b['where']=qs[_0x5ad9('0x37')](_[_0x5ad9('0x3f')](_0x2154f6[_0x5ad9('0x36')],_0x234f92[_0x5ad9('0x37')]));if(_0x2154f6[_0x5ad9('0x36')][_0x5ad9('0x40')]){_0x1f8b9b[_0x5ad9('0x41')]=_[_0x5ad9('0x42')](_0x1f8b9b[_0x5ad9('0x41')],{'$or':_['map'](_0x25f1ab,function(_0x3c43d4){if(_0x3c43d4[_0x5ad9('0x43')][_0x5ad9('0x44')]!==_0x5ad9('0x45')){var _0x46af56={};_0x46af56[_0x3c43d4['field']]={'$like':'%'+_0x2154f6[_0x5ad9('0x36')]['filter']+'%'};return _0x46af56;}})});}_0x1f8b9b=_['merge']({},_0x1f8b9b,_0x2154f6['options']);var _0x2c094c={'where':_0x1f8b9b[_0x5ad9('0x41')]};return db[_0x5ad9('0x32')]['count'](_0x2c094c)[_0x5ad9('0x1c')](function(_0x21074f){_0x51712a[_0x5ad9('0x29')]=_0x21074f;if(_0x2154f6[_0x5ad9('0x36')]['includeAll']){_0x1f8b9b[_0x5ad9('0x46')]=[{'all':!![]}];}return db[_0x5ad9('0x32')][_0x5ad9('0x47')](_0x1f8b9b);})[_0x5ad9('0x1c')](function(_0x4fdbb6){_0x51712a[_0x5ad9('0x48')]=_0x4fdbb6;return _0x51712a;})[_0x5ad9('0x1c')](respondWithFilteredResult(_0x1815cc,_0x1f8b9b))[_0x5ad9('0x49')](handleError(_0x1815cc,null));};exports[_0x5ad9('0x4a')]=function(_0x479bbc,_0x22c2f9){var _0x1b741d={'raw':!![],'where':{'id':_0x479bbc[_0x5ad9('0x4b')]['id']}},_0x5f42a8={};_0x5f42a8['model']=_[_0x5ad9('0x35')](db[_0x5ad9('0x32')][_0x5ad9('0x33')]);_0x5f42a8[_0x5ad9('0x36')]=_[_0x5ad9('0x35')](_0x479bbc[_0x5ad9('0x36')]);_0x5f42a8[_0x5ad9('0x37')]=_[_0x5ad9('0x39')](_0x5f42a8[_0x5ad9('0x34')],_0x5f42a8[_0x5ad9('0x36')]);_0x1b741d[_0x5ad9('0x38')]=_[_0x5ad9('0x39')](_0x5f42a8[_0x5ad9('0x34')],qs[_0x5ad9('0x3a')](_0x479bbc[_0x5ad9('0x36')]['fields']));_0x1b741d[_0x5ad9('0x38')]=_0x1b741d[_0x5ad9('0x38')][_0x5ad9('0x3b')]?_0x1b741d[_0x5ad9('0x38')]:_0x5f42a8[_0x5ad9('0x34')];if(_0x479bbc[_0x5ad9('0x36')][_0x5ad9('0x4c')]){_0x1b741d[_0x5ad9('0x46')]=[{'all':!![]}];}_0x1b741d=_['merge']({},_0x1b741d,_0x479bbc[_0x5ad9('0x4d')]);return db['FaxMessage'][_0x5ad9('0x4e')](_0x1b741d)[_0x5ad9('0x1c')](handleEntityNotFound(_0x22c2f9,null))[_0x5ad9('0x1c')](respondWithResult(_0x22c2f9,null))['catch'](handleError(_0x22c2f9,null));};exports[_0x5ad9('0x4f')]=function(_0x4d1e5c,_0x3f2430){if(_0x4d1e5c['body']['id']){delete _0x4d1e5c[_0x5ad9('0x50')]['id'];}return db['FaxMessage']['find']({'where':{'id':_0x4d1e5c[_0x5ad9('0x4b')]['id']}})[_0x5ad9('0x1c')](handleEntityNotFound(_0x3f2430,null))['then'](saveUpdates(_0x4d1e5c['body'],null))[_0x5ad9('0x1c')](respondWithResult(_0x3f2430,null))[_0x5ad9('0x49')](handleError(_0x3f2430,null));};exports[_0x5ad9('0x51')]=function(_0x76bc66,_0x255b03){return db[_0x5ad9('0x32')][_0x5ad9('0x4e')]({'where':{'id':_0x76bc66[_0x5ad9('0x4b')]['id']}})[_0x5ad9('0x1c')](handleEntityNotFound(_0x255b03,null))['then'](removeEntity(_0x255b03,null))[_0x5ad9('0x49')](handleError(_0x255b03,null));};exports[_0x5ad9('0x52')]=function(_0x4e0ace,_0x3afa73){return db[_0x5ad9('0x32')][_0x5ad9('0x52')]()['then'](respondWithResult(_0x3afa73,null))[_0x5ad9('0x49')](handleError(_0x3afa73,null));};var interaction_log=require(_0x5ad9('0x53'))(_0x5ad9('0x54'));exports[_0x5ad9('0x55')]=function(_0x426fbe,_0x2ea39d,_0x33deef){var _0x3e429f={'channel':'fax'};if(_0x426fbe[_0x5ad9('0x50')]['id']){delete _0x426fbe[_0x5ad9('0x50')]['id'];}_0x426fbe[_0x5ad9('0x50')][_0x5ad9('0x56')]=!![];_0x426fbe[_0x5ad9('0x50')][_0x5ad9('0x57')]=moment()[_0x5ad9('0x58')](_0x5ad9('0x59'));_0x426fbe[_0x5ad9('0x50')][_0x5ad9('0x5a')]=_0x426fbe[_0x5ad9('0x50')][_0x5ad9('0x5a')]||_0x426fbe['user']['id'];return db[_0x5ad9('0x32')][_0x5ad9('0x4e')]({'where':{'id':_0x426fbe[_0x5ad9('0x4b')]['id'],'UserId':null},'include':[{'model':db[_0x5ad9('0x5b')],'as':'Contact'}]})[_0x5ad9('0x1c')](handleEntityNotFound(_0x2ea39d,null))['then'](saveUpdates(_0x426fbe[_0x5ad9('0x50')],null))[_0x5ad9('0x1c')](function(_0x9b5af5){if(_0x9b5af5){_0x3e429f['message']=_0x9b5af5[_0x5ad9('0x5c')]({'plain':!![]});return db[_0x5ad9('0x5d')][_0x5ad9('0x4e')]({'where':{'id':_0x9b5af5[_0x5ad9('0x5e')]}});}return null;})[_0x5ad9('0x1c')](handleEntityNotFound(_0x2ea39d,null))[_0x5ad9('0x1c')](function(_0x5f53aa){if(_0x5f53aa){return _0x5f53aa[_0x5ad9('0x4f')]({'UserId':_0x426fbe[_0x5ad9('0x50')]['UserId'],'read1stAt':_[_0x5ad9('0x5f')](_0x5f53aa[_0x5ad9('0x60')])?moment()['format'](_0x5ad9('0x59')):undefined});}return null;})[_0x5ad9('0x1c')](function(_0x5b800f){if(_0x5b800f){_0x3e429f[_0x5ad9('0x61')]=_0x5b800f[_0x5ad9('0x5c')]({'plain':!![]});interaction_log[_0x5ad9('0x1d')]('[FAXMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x426fbe[_0x5ad9('0x62')]['id'],_0x426fbe[_0x5ad9('0x62')][_0x5ad9('0x30')],_0x426fbe[_0x5ad9('0x62')][_0x5ad9('0x63')],_0x3e429f['interaction']['id'],_0x426fbe['body']?JSON['stringify'](_0x426fbe['body']):'null');return respondWithRpcPromise('AcceptMessage','acceptMessage',_0x3e429f);}return null;})[_0x5ad9('0x1c')](function(_0x28196b){if(_0x28196b){if(_0x426fbe[_0x5ad9('0x50')][_0x5ad9('0x64')]){_0x3e429f[_0x5ad9('0x23')][_0x5ad9('0x65')]=util[_0x5ad9('0x58')](_0x5ad9('0x66'),_0x426fbe[_0x5ad9('0x62')]['name']);_0x3e429f[_0x5ad9('0x23')][_0x5ad9('0x67')]=_0x3e429f['channel'];_0x3e429f[_0x5ad9('0x23')]['event']=_0x5ad9('0x55');return respondWithRpcPromise(_0x5ad9('0x68'),_0x5ad9('0x68'),{'event':_0x5ad9('0x69'),'message':_0x3e429f[_0x5ad9('0x23')]},client9002)['then'](function(){return _0x3e429f;});}return _0x3e429f;}return null;})['then'](respondWithResult(_0x2ea39d,null))[_0x5ad9('0x49')](handleError(_0x2ea39d,null));};var interaction_log=require(_0x5ad9('0x53'))(_0x5ad9('0x54'));exports[_0x5ad9('0x2d')]=function(_0xf9b1c1,_0x3320d5,_0x381662){var _0x649938={'agent':{},'channel':_0x5ad9('0x6a')};if(_0xf9b1c1[_0x5ad9('0x50')]['id']){delete _0xf9b1c1[_0x5ad9('0x50')]['id'];}_0xf9b1c1[_0x5ad9('0x50')][_0x5ad9('0x5a')]=_0xf9b1c1[_0x5ad9('0x50')][_0x5ad9('0x5a')]||_0xf9b1c1['user']['id'];_0x649938[_0x5ad9('0x6b')]['id']=_0xf9b1c1[_0x5ad9('0x50')][_0x5ad9('0x5a')];return db[_0x5ad9('0x32')]['find']({'where':{'id':_0xf9b1c1[_0x5ad9('0x4b')]['id'],'UserId':null}})['then'](handleEntityNotFound(_0x3320d5,null))[_0x5ad9('0x1c')](function(_0x370445){if(_0x370445){_0x649938[_0x5ad9('0x23')]=_0x370445[_0x5ad9('0x5c')]({'plain':!![]});return db[_0x5ad9('0x5d')][_0x5ad9('0x4e')]({'where':{'id':_0x370445[_0x5ad9('0x5e')]}});}return null;})[_0x5ad9('0x1c')](handleEntityNotFound(_0x3320d5,null))['then'](function(_0x58b9d2){if(_0x58b9d2){_0x649938[_0x5ad9('0x61')]=_0x58b9d2[_0x5ad9('0x5c')]({'plain':!![]});interaction_log['info'](_0x5ad9('0x6c'),_0xf9b1c1[_0x5ad9('0x62')]['id'],_0xf9b1c1[_0x5ad9('0x62')][_0x5ad9('0x30')],_0xf9b1c1[_0x5ad9('0x62')][_0x5ad9('0x63')],_0x649938[_0x5ad9('0x61')]['id'],_0xf9b1c1[_0x5ad9('0x50')]?JSON['stringify'](_0xf9b1c1['body']):'null');return respondWithRpcPromise('RejectMessage','rejectMessage',_0x649938);}return null;})[_0x5ad9('0x1c')](function(_0x2194e5){if(_0x2194e5){_0x2194e5[_0x5ad9('0x23')][_0x5ad9('0x65')]=util[_0x5ad9('0x58')]('SIP/%s',_0xf9b1c1[_0x5ad9('0x62')][_0x5ad9('0x30')]);_0x2194e5[_0x5ad9('0x23')][_0x5ad9('0x67')]=_0x649938['channel'];_0x2194e5['message']['event']=_0x5ad9('0x2d');respondWithRpcPromise('EventManager',_0x5ad9('0x68'),{'event':'rejectmessage','message':_0x2194e5['message']},client9002);return _0x649938;}return null;})[_0x5ad9('0x1c')](respondWithResult(_0x3320d5,null))[_0x5ad9('0x49')](handleError(_0x3320d5,null));};exports[_0x5ad9('0x6d')]=function(_0x147bb0,_0x1ea467){var _0x350e5d;return db[_0x5ad9('0x32')][_0x5ad9('0x6d')](_0x147bb0[_0x5ad9('0x50')],{})['then'](function(_0x243c60){_0x350e5d=_0x243c60;return db[_0x5ad9('0x5b')][_0x5ad9('0x6e')]({'where':{'id':_0x350e5d[_0x5ad9('0x6f')]}});})[_0x5ad9('0x1c')](function(_0x2778da){if(_['isNil'](_0x2778da)){return;}else{_0x350e5d[_0x5ad9('0x6a')]=_0x2778da[_0x5ad9('0x6a')];return db[_0x5ad9('0x70')][_0x5ad9('0x6e')]({'where':{'id':_0x350e5d[_0x5ad9('0x71')]}});}})[_0x5ad9('0x1c')](function(_0x1bae3b){return respondWithRpcPromise(_0x5ad9('0x72'),_0x5ad9('0x72'),{'FaxAccountId':_[_0x5ad9('0x5f')](_0x147bb0['body'])?undefined:_0x147bb0[_0x5ad9('0x50')][_0x5ad9('0x73')],'path':_[_0x5ad9('0x5f')](_0x1bae3b)?undefined:util[_0x5ad9('0x58')]('/var/opt/motion2/server/files/attachments/%s',_0x1bae3b[_0x5ad9('0x74')]),'fax':_[_0x5ad9('0x5f')](_0x350e5d[_0x5ad9('0x6a')])?undefined:_0x350e5d[_0x5ad9('0x6a')],'AttachmentId':_0x350e5d[_0x5ad9('0x71')]},client9002);})[_0x5ad9('0x1c')](respondWithResult(_0x1ea467,0xc9))[_0x5ad9('0x49')](handleError(_0x1ea467,null));};exports['download']=function(_0x22c1e0,_0x8cde16){var _0x494966=path['join'](config[_0x5ad9('0x75')],_0x5ad9('0x76'),_0x5ad9('0x77'),_0x5ad9('0x78'));return db[_0x5ad9('0x32')]['find']({'where':{'id':_0x22c1e0[_0x5ad9('0x4b')]['id']},'include':[{'model':db[_0x5ad9('0x70')],'as':_0x5ad9('0x70')}]})[_0x5ad9('0x1c')](handleEntityNotFound(_0x8cde16,null))[_0x5ad9('0x1c')](function(_0x2a39af){if(_0x2a39af){return _0x8cde16[_0x5ad9('0x79')](path[_0x5ad9('0x7a')](_0x494966,_0x2a39af[_0x5ad9('0x70')][_0x5ad9('0x74')]));}})[_0x5ad9('0x49')](handleError(_0x8cde16,null));};
\ No newline at end of file
index 7dcccf0..a02f280 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfd65=['exports','FaxMessage','setMaxListeners','save','update','remove','emit','hasOwnProperty','hook'];(function(_0x60df74,_0x458e29){var _0x5ee872=function(_0x356888){while(--_0x356888){_0x60df74['push'](_0x60df74['shift']());}};_0x5ee872(++_0x458e29);}(_0xfd65,0xc7));var _0x5fd6=function(_0x3b0731,_0xcf9925){_0x3b0731=_0x3b0731-0x0;var _0x4204d7=_0xfd65[_0x3b0731];return _0x4204d7;};'use strict';var EventEmitter=require('events');var FaxMessage=require('../../mysqldb')['db'][_0x5fd6('0x0')];var FaxMessageEvents=new EventEmitter();FaxMessageEvents[_0x5fd6('0x1')](0x0);var events={'afterCreate':_0x5fd6('0x2'),'afterUpdate':_0x5fd6('0x3'),'afterDestroy':_0x5fd6('0x4')};function emitEvent(_0x58b430){return function(_0x55e4a4,_0x201099,_0x12cdce){FaxMessageEvents[_0x5fd6('0x5')](_0x58b430+':'+_0x55e4a4['id'],_0x55e4a4);FaxMessageEvents[_0x5fd6('0x5')](_0x58b430,_0x55e4a4);_0x12cdce(null);};}for(var e in events){if(events[_0x5fd6('0x6')](e)){var event=events[e];FaxMessage[_0x5fd6('0x7')](e,emitEvent(event));}}module[_0x5fd6('0x8')]=FaxMessageEvents;
\ No newline at end of file
+var _0xfd56=['hook','exports','../../mysqldb','FaxMessage','setMaxListeners','save','update','remove','emit'];(function(_0x5df39f,_0x46c78a){var _0x18353a=function(_0x506208){while(--_0x506208){_0x5df39f['push'](_0x5df39f['shift']());}};_0x18353a(++_0x46c78a);}(_0xfd56,0x17c));var _0x6fd5=function(_0x5973ee,_0x4a097f){_0x5973ee=_0x5973ee-0x0;var _0x2b88d1=_0xfd56[_0x5973ee];return _0x2b88d1;};'use strict';var EventEmitter=require('events');var FaxMessage=require(_0x6fd5('0x0'))['db'][_0x6fd5('0x1')];var FaxMessageEvents=new EventEmitter();FaxMessageEvents[_0x6fd5('0x2')](0x0);var events={'afterCreate':_0x6fd5('0x3'),'afterUpdate':_0x6fd5('0x4'),'afterDestroy':_0x6fd5('0x5')};function emitEvent(_0x454042){return function(_0x6d4a8b,_0x1f155a,_0x5e4e0e){FaxMessageEvents[_0x6fd5('0x6')](_0x454042+':'+_0x6d4a8b['id'],_0x6d4a8b);FaxMessageEvents[_0x6fd5('0x6')](_0x454042,_0x6d4a8b);_0x5e4e0e(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];FaxMessage[_0x6fd5('0x7')](e,emitEvent(event));}}module[_0x6fd5('0x8')]=FaxMessageEvents;
\ No newline at end of file
index 9f1baa1..7d6ebae 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7640=['../../config/environment','./faxMessage.attributes','FaxMessage','fti_fax_messages','body','models','get','direction','toLowerCase','out','isNil','UserId','FaxInteraction','findOne','then','update','createdAt','catch','error','utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','moment','request-promise','rimraf'];(function(_0x5437e2,_0x929f89){var _0x1d7022=function(_0x5035a1){while(--_0x5035a1){_0x5437e2['push'](_0x5437e2['shift']());}};_0x1d7022(++_0x929f89);}(_0x7640,0x19d));var _0x0764=function(_0x2e4e19,_0x493b50){_0x2e4e19=_0x2e4e19-0x0;var _0x9ba20b=_0x7640[_0x2e4e19];return _0x9ba20b;};'use strict';var _=require(_0x0764('0x0'));var util=require(_0x0764('0x1'));var logger=require(_0x0764('0x2'))(_0x0764('0x3'));var moment=require(_0x0764('0x4'));var BPromise=require('bluebird');var rp=require(_0x0764('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x0764('0x6'));var config=require(_0x0764('0x7'));var attributes=require(_0x0764('0x8'));module['exports']=function(_0x3f4986,_0x2db758){return _0x3f4986['define'](_0x0764('0x9'),attributes,{'tableName':'fax_messages','paranoid':![],'indexes':[{'name':_0x0764('0xa'),'fields':[_0x0764('0xb')],'type':'FULLTEXT'}],'timestamps':!![],'hooks':{'afterCreate':function(_0x130aaf,_0x419e82,_0x452faf){var _0x1e807f=_0x3f4986[_0x0764('0xc')];var _0x352597=_0x130aaf[_0x0764('0xd')]({'plain':!![]});if(_0x352597[_0x0764('0xe')][_0x0764('0xf')]()==='in'||_0x352597[_0x0764('0xe')]['toLowerCase']()===_0x0764('0x10')&&!_0x352597['secret']&&!_[_0x0764('0x11')](_0x352597[_0x0764('0x12')])){_0x1e807f[_0x0764('0x13')][_0x0764('0x14')]({'where':{'id':_0x352597['FaxInteractionId']}})[_0x0764('0x15')](function(_0x61a2ab){if(_0x61a2ab){_0x61a2ab[_0x0764('0x16')]({'lastMsgAt':_0x352597[_0x0764('0x17')],'lastMsgDirection':_0x352597[_0x0764('0xe')][_0x0764('0xf')]()});}})[_0x0764('0x18')](function(_0xcdd2ab){console[_0x0764('0x19')](_0xcdd2ab);});}_0x452faf();}},'charset':_0x0764('0x1a'),'collate':_0x0764('0x1b')});};
\ No newline at end of file
+var _0x843f=['FaxMessage','fax_messages','fti_fax_messages','body','models','get','direction','toLowerCase','secret','isNil','FaxInteraction','findOne','createdAt','catch','utf8mb4','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./faxMessage.attributes','exports'];(function(_0x553e3d,_0x4d9a80){var _0x3403a9=function(_0x117a6a){while(--_0x117a6a){_0x553e3d['push'](_0x553e3d['shift']());}};_0x3403a9(++_0x4d9a80);}(_0x843f,0x16d));var _0xf843=function(_0x29c73e,_0x171227){_0x29c73e=_0x29c73e-0x0;var _0x3b8d55=_0x843f[_0x29c73e];return _0x3b8d55;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xf843('0x0'))(_0xf843('0x1'));var moment=require(_0xf843('0x2'));var BPromise=require(_0xf843('0x3'));var rp=require(_0xf843('0x4'));var fs=require('fs');var path=require(_0xf843('0x5'));var rimraf=require(_0xf843('0x6'));var config=require(_0xf843('0x7'));var attributes=require(_0xf843('0x8'));module[_0xf843('0x9')]=function(_0x1d2ca6,_0x9fc29c){return _0x1d2ca6['define'](_0xf843('0xa'),attributes,{'tableName':_0xf843('0xb'),'paranoid':![],'indexes':[{'name':_0xf843('0xc'),'fields':[_0xf843('0xd')],'type':'FULLTEXT'}],'timestamps':!![],'hooks':{'afterCreate':function(_0x260c76,_0x49a98b,_0xd9f0af){var _0x1876f1=_0x1d2ca6[_0xf843('0xe')];var _0x2b8f9d=_0x260c76[_0xf843('0xf')]({'plain':!![]});if(_0x2b8f9d[_0xf843('0x10')]['toLowerCase']()==='in'||_0x2b8f9d[_0xf843('0x10')][_0xf843('0x11')]()==='out'&&!_0x2b8f9d[_0xf843('0x12')]&&!_[_0xf843('0x13')](_0x2b8f9d['UserId'])){_0x1876f1[_0xf843('0x14')][_0xf843('0x15')]({'where':{'id':_0x2b8f9d['FaxInteractionId']}})['then'](function(_0x458ce4){if(_0x458ce4){_0x458ce4['update']({'lastMsgAt':_0x2b8f9d[_0xf843('0x16')],'lastMsgDirection':_0x2b8f9d[_0xf843('0x10')][_0xf843('0x11')]()});}})[_0xf843('0x17')](function(_0x5161b5){console['error'](_0x5161b5);});}_0xd9f0af();}},'charset':_0xf843('0x18'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index d3abbd6..9f064e7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x39d9=['UpdateFaxMessage','options','attributes','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','http','defaults','redis','localhost','socket.io-emitter','./faxMessage.socket','register','request','then','request\x20sent','debug','FaxMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','FaxMessage,\x20%s,\x20%s','message','info','catch','CreateFaxMessage','FaxMessage','create','body','raw'];(function(_0x2ce1af,_0x18d743){var _0x29440f=function(_0x5ac105){while(--_0x5ac105){_0x2ce1af['push'](_0x2ce1af['shift']());}};_0x29440f(++_0x18d743);}(_0x39d9,0x17f));var _0x939d=function(_0x6e3157,_0x3c5117){_0x6e3157=_0x6e3157-0x0;var _0x2729eb=_0x39d9[_0x6e3157];return _0x2729eb;};'use strict';var _=require(_0x939d('0x0'));var util=require(_0x939d('0x1'));var moment=require(_0x939d('0x2'));var BPromise=require(_0x939d('0x3'));var rs=require(_0x939d('0x4'));var fs=require('fs');var Redis=require(_0x939d('0x5'));var db=require(_0x939d('0x6'))['db'];var utils=require(_0x939d('0x7'));var logger=require('../../config/logger')(_0x939d('0x8'));var config=require(_0x939d('0x9'));var jayson=require(_0x939d('0xa'));var client=jayson['client'][_0x939d('0xb')]({'port':0x232a});config['redis']=_[_0x939d('0xc')](config[_0x939d('0xd')],{'host':_0x939d('0xe'),'port':0x18eb});var socket=require(_0x939d('0xf'))(new Redis(config[_0x939d('0xd')]));require(_0x939d('0x10'))[_0x939d('0x11')](socket);function respondWithRpcPromise(_0x553693,_0x5566a5,_0x1187a9){return new BPromise(function(_0x2efa9e,_0x106bc9){return client[_0x939d('0x12')](_0x553693,_0x1187a9)[_0x939d('0x13')](function(_0x4be816){logger['info']('FaxMessage,\x20%s,\x20%s',_0x5566a5,_0x939d('0x14'));logger[_0x939d('0x15')](_0x939d('0x16'),_0x5566a5,'request\x20sent',JSON[_0x939d('0x17')](_0x4be816));if(_0x4be816[_0x939d('0x18')]){if(_0x4be816[_0x939d('0x18')][_0x939d('0x19')]===0x1f4){logger[_0x939d('0x18')](_0x939d('0x1a'),_0x5566a5,_0x4be816[_0x939d('0x18')][_0x939d('0x1b')]);return _0x106bc9(_0x4be816[_0x939d('0x18')]['message']);}logger['error'](_0x939d('0x1a'),_0x5566a5,_0x4be816['error'][_0x939d('0x1b')]);return _0x2efa9e(_0x4be816[_0x939d('0x18')]['message']);}else{logger[_0x939d('0x1c')](_0x939d('0x1a'),_0x5566a5,_0x939d('0x14'));_0x2efa9e(_0x4be816['result'][_0x939d('0x1b')]);}})[_0x939d('0x1d')](function(_0x2ff0db){logger[_0x939d('0x18')](_0x939d('0x1a'),_0x5566a5,_0x2ff0db);_0x106bc9(_0x2ff0db);});});}exports[_0x939d('0x1e')]=function(_0x4d8811){var _0x4c960c=this;return new Promise(function(_0x2a6fa6,_0x586626){return db[_0x939d('0x1f')][_0x939d('0x20')](_0x4d8811[_0x939d('0x21')],{'raw':_0x4d8811['options']?_0x4d8811['options'][_0x939d('0x22')]===undefined?!![]:![]:!![]})['then'](function(_0x5483e0){logger['info'](_0x939d('0x1e'),_0x4d8811);logger[_0x939d('0x15')](_0x939d('0x1e'),_0x4d8811,JSON[_0x939d('0x17')](_0x5483e0));_0x2a6fa6(_0x5483e0);})['catch'](function(_0x215b66){logger[_0x939d('0x18')]('CreateFaxMessage',_0x215b66[_0x939d('0x1b')],_0x4d8811);_0x586626(_0x4c960c['error'](0x1f4,_0x215b66['message']));});});};exports[_0x939d('0x23')]=function(_0x3ab3b2){var _0x448364=this;return new Promise(function(_0x30f643,_0x4ab0e6){return db[_0x939d('0x1f')]['update'](_0x3ab3b2[_0x939d('0x21')],{'raw':_0x3ab3b2[_0x939d('0x24')]?_0x3ab3b2[_0x939d('0x24')][_0x939d('0x22')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3ab3b2[_0x939d('0x24')]?_0x3ab3b2[_0x939d('0x24')]['where']||null:null,'attributes':_0x3ab3b2[_0x939d('0x24')]?_0x3ab3b2[_0x939d('0x24')][_0x939d('0x25')]||null:null,'limit':_0x3ab3b2[_0x939d('0x24')]?_0x3ab3b2[_0x939d('0x24')]['limit']||null:null})['then'](function(_0x254072){logger[_0x939d('0x1c')](_0x939d('0x23'),_0x3ab3b2);logger[_0x939d('0x15')](_0x939d('0x23'),_0x3ab3b2,JSON[_0x939d('0x17')](_0x254072));_0x30f643(_0x254072);})['catch'](function(_0x2b1ef7){logger['error'](_0x939d('0x23'),_0x2b1ef7[_0x939d('0x1b')],_0x3ab3b2);_0x4ab0e6(_0x448364['error'](0x1f4,_0x2b1ef7['message']));});});};
\ No newline at end of file
+var _0x37cc=['util','moment','bluebird','randomstring','ioredis','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','socket.io-emitter','./faxMessage.socket','register','request','then','info','FaxMessage,\x20%s,\x20%s','request\x20sent','debug','FaxMessage,\x20%s,\x20%s,\x20%s','error','code','message','catch','CreateFaxMessage','FaxMessage','create','body','options','stringify','UpdateFaxMessage','update','raw','attributes','limit','lodash'];(function(_0x600794,_0x37421d){var _0x33f912=function(_0x4a9317){while(--_0x4a9317){_0x600794['push'](_0x600794['shift']());}};_0x33f912(++_0x37421d);}(_0x37cc,0x185));var _0xc37c=function(_0x471d6a,_0x56e87c){_0x471d6a=_0x471d6a-0x0;var _0x5e837e=_0x37cc[_0x471d6a];return _0x5e837e;};'use strict';var _=require(_0xc37c('0x0'));var util=require(_0xc37c('0x1'));var moment=require(_0xc37c('0x2'));var BPromise=require(_0xc37c('0x3'));var rs=require(_0xc37c('0x4'));var fs=require('fs');var Redis=require(_0xc37c('0x5'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xc37c('0x6'))(_0xc37c('0x7'));var config=require(_0xc37c('0x8'));var jayson=require(_0xc37c('0x9'));var client=jayson[_0xc37c('0xa')][_0xc37c('0xb')]({'port':0x232a});config[_0xc37c('0xc')]=_[_0xc37c('0xd')](config[_0xc37c('0xc')],{'host':'localhost','port':0x18eb});var socket=require(_0xc37c('0xe'))(new Redis(config[_0xc37c('0xc')]));require(_0xc37c('0xf'))[_0xc37c('0x10')](socket);function respondWithRpcPromise(_0xbef543,_0x596406,_0xccce4e){return new BPromise(function(_0x35840a,_0xe0e5c7){return client[_0xc37c('0x11')](_0xbef543,_0xccce4e)[_0xc37c('0x12')](function(_0x6feb0c){logger[_0xc37c('0x13')](_0xc37c('0x14'),_0x596406,_0xc37c('0x15'));logger[_0xc37c('0x16')](_0xc37c('0x17'),_0x596406,'request\x20sent',JSON['stringify'](_0x6feb0c));if(_0x6feb0c[_0xc37c('0x18')]){if(_0x6feb0c[_0xc37c('0x18')][_0xc37c('0x19')]===0x1f4){logger[_0xc37c('0x18')](_0xc37c('0x14'),_0x596406,_0x6feb0c[_0xc37c('0x18')]['message']);return _0xe0e5c7(_0x6feb0c[_0xc37c('0x18')]['message']);}logger[_0xc37c('0x18')](_0xc37c('0x14'),_0x596406,_0x6feb0c[_0xc37c('0x18')][_0xc37c('0x1a')]);return _0x35840a(_0x6feb0c[_0xc37c('0x18')]['message']);}else{logger['info']('FaxMessage,\x20%s,\x20%s',_0x596406,_0xc37c('0x15'));_0x35840a(_0x6feb0c['result'][_0xc37c('0x1a')]);}})[_0xc37c('0x1b')](function(_0x520223){logger[_0xc37c('0x18')](_0xc37c('0x14'),_0x596406,_0x520223);_0xe0e5c7(_0x520223);});});}exports[_0xc37c('0x1c')]=function(_0x27158f){var _0x481d1a=this;return new Promise(function(_0x22b4a4,_0x4d3aa4){return db[_0xc37c('0x1d')][_0xc37c('0x1e')](_0x27158f[_0xc37c('0x1f')],{'raw':_0x27158f[_0xc37c('0x20')]?_0x27158f[_0xc37c('0x20')]['raw']===undefined?!![]:![]:!![]})[_0xc37c('0x12')](function(_0x33aa68){logger[_0xc37c('0x13')](_0xc37c('0x1c'),_0x27158f);logger[_0xc37c('0x16')](_0xc37c('0x1c'),_0x27158f,JSON[_0xc37c('0x21')](_0x33aa68));_0x22b4a4(_0x33aa68);})[_0xc37c('0x1b')](function(_0x1e61d4){logger[_0xc37c('0x18')](_0xc37c('0x1c'),_0x1e61d4[_0xc37c('0x1a')],_0x27158f);_0x4d3aa4(_0x481d1a[_0xc37c('0x18')](0x1f4,_0x1e61d4['message']));});});};exports[_0xc37c('0x22')]=function(_0x1ecf92){var _0x1d59fa=this;return new Promise(function(_0x484c43,_0x53f062){return db[_0xc37c('0x1d')][_0xc37c('0x23')](_0x1ecf92[_0xc37c('0x1f')],{'raw':_0x1ecf92[_0xc37c('0x20')]?_0x1ecf92[_0xc37c('0x20')][_0xc37c('0x24')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x1ecf92[_0xc37c('0x20')]?_0x1ecf92[_0xc37c('0x20')]['where']||null:null,'attributes':_0x1ecf92[_0xc37c('0x20')]?_0x1ecf92[_0xc37c('0x20')][_0xc37c('0x25')]||null:null,'limit':_0x1ecf92[_0xc37c('0x20')]?_0x1ecf92[_0xc37c('0x20')][_0xc37c('0x26')]||null:null})[_0xc37c('0x12')](function(_0x1c3e9d){logger[_0xc37c('0x13')](_0xc37c('0x22'),_0x1ecf92);logger[_0xc37c('0x16')](_0xc37c('0x22'),_0x1ecf92,JSON[_0xc37c('0x21')](_0x1c3e9d));_0x484c43(_0x1c3e9d);})['catch'](function(_0x1690f3){logger[_0xc37c('0x18')]('UpdateFaxMessage',_0x1690f3['message'],_0x1ecf92);_0x53f062(_0x1d59fa[_0xc37c('0x18')](0x1f4,_0x1690f3[_0xc37c('0x1a')]));});});};
\ No newline at end of file
index 36c8b00..973a453 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x38ca=['removeListener','faxMessage:','./faxMessage.events','remove','update','emit'];(function(_0x125a01,_0x220d36){var _0xf5329b=function(_0x13f407){while(--_0x13f407){_0x125a01['push'](_0x125a01['shift']());}};_0xf5329b(++_0x220d36);}(_0x38ca,0xb0));var _0xa38c=function(_0x54806c,_0x4b660d){_0x54806c=_0x54806c-0x0;var _0x543398=_0x38ca[_0x54806c];return _0x543398;};'use strict';var FaxMessageEvents=require(_0xa38c('0x0'));var events=['save',_0xa38c('0x1'),_0xa38c('0x2')];function createListener(_0x1cf953,_0x85c69f){return function(_0x548b85){_0x85c69f[_0xa38c('0x3')](_0x1cf953,_0x548b85);};}function removeListener(_0x2ccf9d,_0x2b713d){return function(){FaxMessageEvents[_0xa38c('0x4')](_0x2ccf9d,_0x2b713d);};}exports['register']=function(_0xe4cde2){for(var _0x4487ef=0x0,_0x5a54ee=events['length'];_0x4487ef<_0x5a54ee;_0x4487ef++){var _0x36830c=events[_0x4487ef];var _0x2b1a3e=createListener(_0xa38c('0x5')+_0x36830c,_0xe4cde2);FaxMessageEvents['on'](_0x36830c,_0x2b1a3e);}};
\ No newline at end of file
+var _0x36aa=['emit','register','length','faxMessage:','./faxMessage.events','remove','update'];(function(_0x3852ce,_0x1017a6){var _0xfb8ef3=function(_0x128695){while(--_0x128695){_0x3852ce['push'](_0x3852ce['shift']());}};_0xfb8ef3(++_0x1017a6);}(_0x36aa,0x170));var _0xa36a=function(_0x4cc984,_0x28d876){_0x4cc984=_0x4cc984-0x0;var _0x2bce2e=_0x36aa[_0x4cc984];return _0x2bce2e;};'use strict';var FaxMessageEvents=require(_0xa36a('0x0'));var events=['save',_0xa36a('0x1'),_0xa36a('0x2')];function createListener(_0x3f0ffa,_0x258fef){return function(_0x56f880){_0x258fef[_0xa36a('0x3')](_0x3f0ffa,_0x56f880);};}function removeListener(_0x588aad,_0x4c039c){return function(){FaxMessageEvents['removeListener'](_0x588aad,_0x4c039c);};}exports[_0xa36a('0x4')]=function(_0x3712fc){for(var _0x59f262=0x0,_0x4b6625=events[_0xa36a('0x5')];_0x59f262<_0x4b6625;_0x59f262++){var _0x27fbfc=events[_0x59f262];var _0x577ec4=createListener(_0xa36a('0x6')+_0x27fbfc,_0x3712fc);FaxMessageEvents['on'](_0x27fbfc,_0x577ec4);}};
\ No newline at end of file
index 71efad7..94e40ab 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf2e3=['accept','reject','delete','destroy','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxMessage.controller','get','index','/describe','isAuthenticated','describe','/:id','show','/:id/download','download','post','tracked','fax','faxmessage:create','create','put','/:id/accept'];(function(_0x330776,_0x167574){var _0x43c5d7=function(_0x52697a){while(--_0x52697a){_0x330776['push'](_0x330776['shift']());}};_0x43c5d7(++_0x167574);}(_0xf2e3,0x9b));var _0x3f2e=function(_0x59d89e,_0x55edf5){_0x59d89e=_0x59d89e-0x0;var _0x554e93=_0xf2e3[_0x59d89e];return _0x554e93;};'use strict';var multer=require(_0x3f2e('0x0'));var util=require('util');var path=require(_0x3f2e('0x1'));var timeout=require(_0x3f2e('0x2'));var express=require(_0x3f2e('0x3'));var router=express[_0x3f2e('0x4')]();var auth=require(_0x3f2e('0x5'));var interaction=require(_0x3f2e('0x6'));var config=require(_0x3f2e('0x7'));var controller=require(_0x3f2e('0x8'));router[_0x3f2e('0x9')]('/',auth['isAuthenticated'](),controller[_0x3f2e('0xa')]);router[_0x3f2e('0x9')](_0x3f2e('0xb'),auth[_0x3f2e('0xc')](),controller[_0x3f2e('0xd')]);router[_0x3f2e('0x9')](_0x3f2e('0xe'),auth[_0x3f2e('0xc')](),controller[_0x3f2e('0xf')]);router[_0x3f2e('0x9')](_0x3f2e('0x10'),auth[_0x3f2e('0xc')](),controller[_0x3f2e('0x11')]);router[_0x3f2e('0x12')]('/',auth[_0x3f2e('0xc')](),interaction[_0x3f2e('0x13')](_0x3f2e('0x14'),_0x3f2e('0x15')),controller[_0x3f2e('0x16')]);router['put'](_0x3f2e('0xe'),auth[_0x3f2e('0xc')](),controller['update']);router[_0x3f2e('0x17')](_0x3f2e('0x18'),auth[_0x3f2e('0xc')](),controller[_0x3f2e('0x19')]);router[_0x3f2e('0x17')]('/:id/reject',auth[_0x3f2e('0xc')](),controller[_0x3f2e('0x1a')]);router[_0x3f2e('0x1b')]('/:id',auth[_0x3f2e('0xc')](),controller[_0x3f2e('0x1c')]);module[_0x3f2e('0x1d')]=router;
\ No newline at end of file
+var _0x7880=['update','accept','/:id/reject','reject','destroy','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./faxMessage.controller','get','isAuthenticated','index','/describe','describe','download','post','tracked','faxmessage:create','create','put','/:id'];(function(_0x2f43a9,_0x28179a){var _0x20f22d=function(_0x460760){while(--_0x460760){_0x2f43a9['push'](_0x2f43a9['shift']());}};_0x20f22d(++_0x28179a);}(_0x7880,0x1f4));var _0x0788=function(_0x5c2e65,_0x20e630){_0x5c2e65=_0x5c2e65-0x0;var _0x445359=_0x7880[_0x5c2e65];return _0x445359;};'use strict';var multer=require('multer');var util=require(_0x0788('0x0'));var path=require(_0x0788('0x1'));var timeout=require(_0x0788('0x2'));var express=require(_0x0788('0x3'));var router=express[_0x0788('0x4')]();var auth=require(_0x0788('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x0788('0x6'));var controller=require(_0x0788('0x7'));router[_0x0788('0x8')]('/',auth[_0x0788('0x9')](),controller[_0x0788('0xa')]);router[_0x0788('0x8')](_0x0788('0xb'),auth[_0x0788('0x9')](),controller[_0x0788('0xc')]);router[_0x0788('0x8')]('/:id',auth[_0x0788('0x9')](),controller['show']);router[_0x0788('0x8')]('/:id/download',auth[_0x0788('0x9')](),controller[_0x0788('0xd')]);router[_0x0788('0xe')]('/',auth[_0x0788('0x9')](),interaction[_0x0788('0xf')]('fax',_0x0788('0x10')),controller[_0x0788('0x11')]);router[_0x0788('0x12')](_0x0788('0x13'),auth[_0x0788('0x9')](),controller[_0x0788('0x14')]);router[_0x0788('0x12')]('/:id/accept',auth[_0x0788('0x9')](),controller[_0x0788('0x15')]);router[_0x0788('0x12')](_0x0788('0x16'),auth['isAuthenticated'](),controller[_0x0788('0x17')]);router['delete'](_0x0788('0x13'),auth[_0x0788('0x9')](),controller[_0x0788('0x18')]);module[_0x0788('0x19')]=router;
\ No newline at end of file
index 207e195..6d0aaaf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3842=['STRING','INTEGER','rrmemory','beepall','roundrobin','exports'];(function(_0x1f1c98,_0x132e98){var _0x5ee779=function(_0x38e5ce){while(--_0x38e5ce){_0x1f1c98['push'](_0x1f1c98['shift']());}};_0x5ee779(++_0x132e98);}(_0x3842,0x14f));var _0x2384=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x3842[_0x321bb2];return _0x9c12ed;};'use strict';var Sequelize=require('sequelize');module[_0x2384('0x0')]={'name':{'type':Sequelize[_0x2384('0x1')],'unique':'name','allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize[_0x2384('0x2')],'allowNull':![],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM'](_0x2384('0x3'),_0x2384('0x4'),_0x2384('0x5')),'allowNull':![]},'lastAgent':{'type':Sequelize[_0x2384('0x2')],'defaultValue':0x0}};
\ No newline at end of file
+var _0xdd93=['exports','STRING','name','ENUM','rrmemory','beepall','roundrobin','sequelize'];(function(_0x2354f1,_0xabfc06){var _0x2274ca=function(_0x94e694){while(--_0x94e694){_0x2354f1['push'](_0x2354f1['shift']());}};_0x2274ca(++_0xabfc06);}(_0xdd93,0x127));var _0x3dd9=function(_0x4b2c37,_0x209312){_0x4b2c37=_0x4b2c37-0x0;var _0x281cf2=_0xdd93[_0x4b2c37];return _0x281cf2;};'use strict';var Sequelize=require(_0x3dd9('0x0'));module[_0x3dd9('0x1')]={'name':{'type':Sequelize[_0x3dd9('0x2')],'unique':_0x3dd9('0x3'),'allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x3dd9('0x2')]},'timeout':{'type':Sequelize['INTEGER'],'allowNull':![],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x3dd9('0x4')](_0x3dd9('0x5'),_0x3dd9('0x6'),_0x3dd9('0x7')),'allowNull':![]},'lastAgent':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
index 3349db6..c3f070e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbab3=['crypto','querystring','papaparse','../../components/auth/service','../../config/license/hardware','redis','defaults','localhost','socket.io-emitter','register','sendStatus','status','end','offset','limit','set','reject','save','update','then','get','FaxQueues','UserProfileResource','error','stack','name','send','rawAttributes','model','keys','query','intersection','attributes','fields','length','nolimit','order','sort','where','filters','pick','filter','merge','map','type','key','field','options','FaxQueue','count','includeAll','include','findAll','rows','show','find','catch','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','destroy','params','describe','getMembers','findOne','hasOwnProperty','FaxQueueId','UserFaxQueue','User','findAndCountAll','UserId','agent','updatedAt','createdAt','%s/%s','SIP','faxPause','getTeams','Agents','online','voicePause','interface','flatMap','sequelize','transaction','addTeams','findOrCreate','forEach','userFaxQueue:save','removeTeams','ids','select','from','join','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','FaxQueueId\x20=\x20?','clone','ut.UserId\x20=\x20?','push','toString','QueryTypes','SELECT','TeamId','includes','union','compact','value','isEmpty','removeAgents','userFaxQueue:remove','addAgents','omit','emit','getAgents','html-pdf','eml-format','zip-dir','request-promise','moment','mustache','util','sox','to-csv','ejs'];(function(_0x138adb,_0x193fee){var _0x1b27f2=function(_0x5e97a2){while(--_0x5e97a2){_0x138adb['push'](_0x138adb['shift']());}};_0x1b27f2(++_0x193fee);}(_0xbab3,0x78));var _0x3bab=function(_0x3e1fe8,_0x223c26){_0x3e1fe8=_0x3e1fe8-0x0;var _0x55d8e5=_0xbab3[_0x3e1fe8];return _0x55d8e5;};'use strict';var pdf=require(_0x3bab('0x0'));var emlformat=require(_0x3bab('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x3bab('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x3bab('0x3'));var moment=require(_0x3bab('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x3bab('0x5'));var util=require(_0x3bab('0x6'));var path=require('path');var sox=require(_0x3bab('0x7'));var csv=require(_0x3bab('0x8'));var ejs=require(_0x3bab('0x9'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x3bab('0xa'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x3bab('0xb'));var Papa=require(_0x3bab('0xc'));var Redis=require('ioredis');var authService=require(_0x3bab('0xd'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x3bab('0xe'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config[_0x3bab('0xf')]=_[_0x3bab('0x10')](config[_0x3bab('0xf')],{'host':_0x3bab('0x11'),'port':0x18eb});var socket=require(_0x3bab('0x12'))(new Redis(config['redis']));require('./faxQueue.socket')[_0x3bab('0x13')](socket);function respondWithStatusCode(_0x2e94ec,_0x2cd726){_0x2cd726=_0x2cd726||0xcc;return function(_0x330fd8){if(_0x330fd8){return _0x2e94ec[_0x3bab('0x14')](_0x2cd726);}return _0x2e94ec[_0x3bab('0x15')](_0x2cd726)[_0x3bab('0x16')]();};}function respondWithResult(_0x2f598e,_0x13b2f1){_0x13b2f1=_0x13b2f1||0xc8;return function(_0x2ab580){if(_0x2ab580){return _0x2f598e['status'](_0x13b2f1)['json'](_0x2ab580);}};}function respondWithFilteredResult(_0x36bb7a,_0x20b5b1){return function(_0x48b3bb){if(_0x48b3bb){var _0x1084e9=_0x48b3bb['count'],_0xc02a51=_0x20b5b1[_0x3bab('0x17')],_0x1d1731=_0x20b5b1['offset']+_0x20b5b1[_0x3bab('0x18')],_0x50e43b;if(_0x1d1731>=_0x1084e9){_0x1d1731=_0x1084e9;_0x50e43b=0xc8;}else{_0x50e43b=0xce;}_0x36bb7a[_0x3bab('0x15')](_0x50e43b);return _0x36bb7a[_0x3bab('0x19')]('Content-Range',_0xc02a51+'-'+_0x1d1731+'/'+_0x1084e9)['json'](_0x48b3bb);}return null;};}function patchUpdates(_0x1e9bd3){return function(_0x45b32c){try{jsonpatch['apply'](_0x45b32c,_0x1e9bd3,!![]);}catch(_0x287caa){return BPromise[_0x3bab('0x1a')](_0x287caa);}return _0x45b32c[_0x3bab('0x1b')]();};}function saveUpdates(_0x4bf779,_0x12239d){return function(_0x11e275){if(_0x11e275){return _0x11e275[_0x3bab('0x1c')](_0x4bf779)[_0x3bab('0x1d')](function(_0x30d052){return _0x30d052;});}return null;};}function removeEntity(_0x52e96f,_0x46fdc1){return function(_0x19dd84){if(_0x19dd84){return _0x19dd84['destroy']()['then'](function(){var _0x590917=_0x19dd84[_0x3bab('0x1e')]({'plain':!![]});var _0x72717d=_0x3bab('0x1f');return db[_0x3bab('0x20')]['destroy']({'where':{'type':_0x72717d,'resourceId':_0x590917['id']}})[_0x3bab('0x1d')](function(){return _0x19dd84;});})[_0x3bab('0x1d')](function(){_0x52e96f[_0x3bab('0x15')](0xcc)[_0x3bab('0x16')]();});}};}function handleEntityNotFound(_0x1889f4,_0xfa7192){return function(_0x2f2a8e){if(!_0x2f2a8e){_0x1889f4['sendStatus'](0x194);}return _0x2f2a8e;};}function handleError(_0x4bef1b,_0x4e5a74){_0x4e5a74=_0x4e5a74||0x1f4;return function(_0x1d60e3){logger[_0x3bab('0x21')](_0x1d60e3[_0x3bab('0x22')]);if(_0x1d60e3[_0x3bab('0x23')]){delete _0x1d60e3['name'];}_0x4bef1b[_0x3bab('0x15')](_0x4e5a74)[_0x3bab('0x24')](_0x1d60e3);};}exports['index']=function(_0x3eec2e,_0x5c3507){var _0x41d9f9={},_0x47bac1={},_0x48b9de={'count':0x0,'rows':[]};var _0x2f77dc=db['FaxQueue'][_0x3bab('0x25')];_0x47bac1[_0x3bab('0x26')]=_['keys'](_0x2f77dc);_0x47bac1['query']=_[_0x3bab('0x27')](_0x3eec2e[_0x3bab('0x28')]);_0x47bac1['filters']=_[_0x3bab('0x29')](_0x47bac1[_0x3bab('0x26')],_0x47bac1['query']);_0x41d9f9[_0x3bab('0x2a')]=_[_0x3bab('0x29')](_0x47bac1[_0x3bab('0x26')],qs['fields'](_0x3eec2e[_0x3bab('0x28')][_0x3bab('0x2b')]));_0x41d9f9['attributes']=_0x41d9f9['attributes'][_0x3bab('0x2c')]?_0x41d9f9[_0x3bab('0x2a')]:_0x47bac1[_0x3bab('0x26')];if(!_0x3eec2e['query']['hasOwnProperty'](_0x3bab('0x2d'))){_0x41d9f9[_0x3bab('0x18')]=qs['limit'](_0x3eec2e['query'][_0x3bab('0x18')]);_0x41d9f9['offset']=qs[_0x3bab('0x17')](_0x3eec2e[_0x3bab('0x28')][_0x3bab('0x17')]);}_0x41d9f9[_0x3bab('0x2e')]=qs['sort'](_0x3eec2e[_0x3bab('0x28')][_0x3bab('0x2f')]);_0x41d9f9[_0x3bab('0x30')]=qs[_0x3bab('0x31')](_[_0x3bab('0x32')](_0x3eec2e[_0x3bab('0x28')],_0x47bac1[_0x3bab('0x31')]));if(_0x3eec2e[_0x3bab('0x28')][_0x3bab('0x33')]){_0x41d9f9[_0x3bab('0x30')]=_[_0x3bab('0x34')](_0x41d9f9[_0x3bab('0x30')],{'$or':_[_0x3bab('0x35')](_0x2f77dc,function(_0x8bb752){if(_0x8bb752[_0x3bab('0x36')][_0x3bab('0x37')]!=='VIRTUAL'){var _0x2e968a={};_0x2e968a[_0x8bb752[_0x3bab('0x38')]]={'$like':'%'+_0x3eec2e[_0x3bab('0x28')]['filter']+'%'};return _0x2e968a;}})});}_0x41d9f9=_[_0x3bab('0x34')]({},_0x41d9f9,_0x3eec2e[_0x3bab('0x39')]);var _0x5a905d={'where':_0x41d9f9[_0x3bab('0x30')]};return db[_0x3bab('0x3a')][_0x3bab('0x3b')](_0x5a905d)[_0x3bab('0x1d')](function(_0x20866b){_0x48b9de[_0x3bab('0x3b')]=_0x20866b;if(_0x3eec2e['query'][_0x3bab('0x3c')]){_0x41d9f9[_0x3bab('0x3d')]=[{'all':!![]}];}return db[_0x3bab('0x3a')][_0x3bab('0x3e')](_0x41d9f9);})[_0x3bab('0x1d')](function(_0x387ace){_0x48b9de[_0x3bab('0x3f')]=_0x387ace;return _0x48b9de;})[_0x3bab('0x1d')](respondWithFilteredResult(_0x5c3507,_0x41d9f9))['catch'](handleError(_0x5c3507,null));};exports[_0x3bab('0x40')]=function(_0x23168a,_0x5256cb){var _0x2535df={'raw':!![],'where':{'id':_0x23168a['params']['id']}},_0x4dd6bd={};_0x4dd6bd['model']=_[_0x3bab('0x27')](db[_0x3bab('0x3a')]['rawAttributes']);_0x4dd6bd[_0x3bab('0x28')]=_[_0x3bab('0x27')](_0x23168a[_0x3bab('0x28')]);_0x4dd6bd[_0x3bab('0x31')]=_[_0x3bab('0x29')](_0x4dd6bd[_0x3bab('0x26')],_0x4dd6bd[_0x3bab('0x28')]);_0x2535df['attributes']=_['intersection'](_0x4dd6bd[_0x3bab('0x26')],qs[_0x3bab('0x2b')](_0x23168a[_0x3bab('0x28')]['fields']));_0x2535df[_0x3bab('0x2a')]=_0x2535df[_0x3bab('0x2a')][_0x3bab('0x2c')]?_0x2535df[_0x3bab('0x2a')]:_0x4dd6bd[_0x3bab('0x26')];if(_0x23168a[_0x3bab('0x28')][_0x3bab('0x3c')]){_0x2535df[_0x3bab('0x3d')]=[{'all':!![]}];}_0x2535df=_['merge']({},_0x2535df,_0x23168a[_0x3bab('0x39')]);return db[_0x3bab('0x3a')][_0x3bab('0x41')](_0x2535df)['then'](handleEntityNotFound(_0x5256cb,null))[_0x3bab('0x1d')](respondWithResult(_0x5256cb,null))[_0x3bab('0x42')](handleError(_0x5256cb,null));};exports['create']=function(_0x242ef5,_0x580762){return db['FaxQueue'][_0x3bab('0x43')](_0x242ef5[_0x3bab('0x44')],{})['then'](function(_0x17375e){var _0x245f3d=_0x242ef5[_0x3bab('0x45')][_0x3bab('0x1e')]({'plain':!![]});if(!_0x245f3d)throw new Error(_0x3bab('0x46'));if(_0x245f3d[_0x3bab('0x47')]==='user'){var _0x53f8aa=_0x17375e[_0x3bab('0x1e')]({'plain':!![]});var _0x4dfbc8=_0x3bab('0x1f');return db['UserProfileSection']['find']({'where':{'name':_0x4dfbc8,'userProfileId':_0x245f3d[_0x3bab('0x48')]},'raw':!![]})[_0x3bab('0x1d')](function(_0x48a5b2){if(_0x48a5b2&&_0x48a5b2[_0x3bab('0x49')]===0x0){return db[_0x3bab('0x20')]['create']({'name':_0x53f8aa['name'],'resourceId':_0x53f8aa['id'],'type':_0x48a5b2[_0x3bab('0x23')],'sectionId':_0x48a5b2['id']},{})['then'](function(){return _0x17375e;});}else{return _0x17375e;}})[_0x3bab('0x42')](function(_0x41d654){logger[_0x3bab('0x21')](_0x3bab('0x4a'),_0x41d654);throw _0x41d654;});}return _0x17375e;})[_0x3bab('0x1d')](respondWithResult(_0x580762,0xc9))[_0x3bab('0x42')](handleError(_0x580762,null));};exports['update']=function(_0x26f0f0,_0x41d237){if(_0x26f0f0['body']['id']){delete _0x26f0f0['body']['id'];}return db[_0x3bab('0x3a')]['find']({'where':{'id':_0x26f0f0['params']['id']}})[_0x3bab('0x1d')](handleEntityNotFound(_0x41d237,null))[_0x3bab('0x1d')](saveUpdates(_0x26f0f0[_0x3bab('0x44')],null))['then'](respondWithResult(_0x41d237,null))[_0x3bab('0x42')](handleError(_0x41d237,null));};exports[_0x3bab('0x4b')]=function(_0x47168c,_0x354db7){return db['FaxQueue']['find']({'where':{'id':_0x47168c[_0x3bab('0x4c')]['id']}})['then'](handleEntityNotFound(_0x354db7,null))['then'](removeEntity(_0x354db7,null))[_0x3bab('0x42')](handleError(_0x354db7,null));};exports[_0x3bab('0x4d')]=function(_0x46d6fd,_0x38af0c){return db[_0x3bab('0x3a')][_0x3bab('0x4d')]()[_0x3bab('0x1d')](respondWithResult(_0x38af0c,null))[_0x3bab('0x42')](handleError(_0x38af0c,null));};exports[_0x3bab('0x4e')]=function(_0x973555,_0x4eb94c,_0x4a58c1){var _0x219fc4={'raw':!![],'where':{}},_0x16e080={},_0x51ac7f;return db[_0x3bab('0x3a')][_0x3bab('0x4f')]({'where':{'id':_0x973555[_0x3bab('0x4c')]['id']}})[_0x3bab('0x1d')](handleEntityNotFound(_0x4eb94c,null))[_0x3bab('0x1d')](function(_0x2731f6){if(_0x2731f6){_0x51ac7f=_0x2731f6[_0x3bab('0x1e')]({'plain':!![]});_0x16e080[_0x3bab('0x26')]=_['keys'](db['UserFaxQueue'][_0x3bab('0x25')]);_0x16e080['query']=_[_0x3bab('0x27')](_0x973555[_0x3bab('0x28')]);_0x16e080[_0x3bab('0x31')]=_[_0x3bab('0x29')](_0x16e080[_0x3bab('0x26')],_0x16e080[_0x3bab('0x28')]);_0x219fc4[_0x3bab('0x2a')]=_[_0x3bab('0x29')](_0x16e080[_0x3bab('0x26')],qs['fields'](_0x973555[_0x3bab('0x28')][_0x3bab('0x2b')]));_0x219fc4[_0x3bab('0x2a')]=_0x219fc4['attributes'][_0x3bab('0x2c')]?_0x219fc4[_0x3bab('0x2a')]:_0x16e080[_0x3bab('0x26')];if(!_0x973555[_0x3bab('0x28')][_0x3bab('0x50')]('nolimit')){_0x219fc4[_0x3bab('0x18')]=qs[_0x3bab('0x18')](_0x973555[_0x3bab('0x28')][_0x3bab('0x18')]);_0x219fc4['offset']=qs[_0x3bab('0x17')](_0x973555[_0x3bab('0x28')][_0x3bab('0x17')]);}_0x219fc4[_0x3bab('0x2e')]=qs['sort'](_0x973555[_0x3bab('0x28')][_0x3bab('0x2f')]);_0x219fc4[_0x3bab('0x30')]=qs[_0x3bab('0x31')](_[_0x3bab('0x32')](_0x973555[_0x3bab('0x28')],_0x16e080[_0x3bab('0x31')]));_0x219fc4[_0x3bab('0x30')][_0x3bab('0x51')]=_0x2731f6['id'];if(_0x973555['query']['filter']){_0x219fc4['where']=_[_0x3bab('0x34')](_0x219fc4[_0x3bab('0x30')],{'$or':_[_0x3bab('0x35')](_0x219fc4[_0x3bab('0x2a')],function(_0x466ffa){var _0x5ed9a0={};_0x5ed9a0[_0x466ffa]={'$like':'%'+_0x973555['query'][_0x3bab('0x33')]+'%'};return _0x5ed9a0;})});}_0x219fc4=_['merge']({},_0x219fc4,_0x973555[_0x3bab('0x39')]);return db[_0x3bab('0x52')][_0x3bab('0x3e')](_0x219fc4);}})[_0x3bab('0x1d')](function(_0x2701ca){if(_0x2701ca){return db[_0x3bab('0x53')][_0x3bab('0x54')]({'where':{'id':_[_0x3bab('0x35')](_0x2701ca,_0x3bab('0x55')),'role':_0x3bab('0x56')},'attributes':['id',_0x3bab('0x23'),'faxPause',_0x3bab('0x57'),_0x3bab('0x58')]});}})[_0x3bab('0x1d')](function(_0x1d2b40){if(_0x1d2b40){return{'count':_0x1d2b40[_0x3bab('0x3b')],'rows':_[_0x3bab('0x35')](_0x1d2b40['rows'],function(_0x22df1d){return{'membername':_0x22df1d[_0x3bab('0x23')],'UserId':_0x22df1d['id'],'queue_name':_0x51ac7f[_0x3bab('0x23')],'FaxQueueId':_0x51ac7f['id'],'interface':util['format'](_0x3bab('0x59'),_0x3bab('0x5a'),_0x22df1d[_0x3bab('0x23')]),'penalty':0x0,'paused':_0x22df1d[_0x3bab('0x5b')],'createdAt':_0x22df1d[_0x3bab('0x58')],'updatedAt':_0x22df1d[_0x3bab('0x57')]};})};}else{return{'count':0x0,'rows':[]};}})[_0x3bab('0x1d')](respondWithFilteredResult(_0x4eb94c,_0x219fc4))[_0x3bab('0x42')](handleError(_0x4eb94c,null));};exports[_0x3bab('0x5c')]=function(_0x5c985f,_0x596f96,_0x1fcbfa){var _0x36e6a1={};var _0x470715={};var _0x3a32eb;var _0x49811d;return db[_0x3bab('0x3a')][_0x3bab('0x4f')]({'where':{'id':_0x5c985f['params']['id']}})[_0x3bab('0x1d')](handleEntityNotFound(_0x596f96,null))[_0x3bab('0x1d')](function(_0x4afb00){if(_0x4afb00){_0x3a32eb=_0x4afb00;_0x470715[_0x3bab('0x26')]=_[_0x3bab('0x27')](db['Team'][_0x3bab('0x25')]);_0x470715['query']=_[_0x3bab('0x27')](_0x5c985f['query']);_0x470715['filters']=_[_0x3bab('0x29')](_0x470715[_0x3bab('0x26')],_0x470715[_0x3bab('0x28')]);_0x36e6a1[_0x3bab('0x2a')]=_['intersection'](_0x470715[_0x3bab('0x26')],qs['fields'](_0x5c985f[_0x3bab('0x28')]['fields']));_0x36e6a1['attributes']=_0x36e6a1[_0x3bab('0x2a')]['length']?_0x36e6a1[_0x3bab('0x2a')]:_0x470715[_0x3bab('0x26')];_0x36e6a1[_0x3bab('0x2e')]=qs[_0x3bab('0x2f')](_0x5c985f[_0x3bab('0x28')][_0x3bab('0x2f')]);_0x36e6a1[_0x3bab('0x30')]=qs[_0x3bab('0x31')](_['pick'](_0x5c985f['query'],_0x470715[_0x3bab('0x31')]));if(_0x5c985f[_0x3bab('0x28')]['filter']){_0x36e6a1['where']=_[_0x3bab('0x34')](_0x36e6a1[_0x3bab('0x30')],{'$or':_[_0x3bab('0x35')](_0x36e6a1[_0x3bab('0x2a')],function(_0x4342c3){var _0x18a243={};_0x18a243[_0x4342c3]={'$like':'%'+_0x5c985f[_0x3bab('0x28')]['filter']+'%'};return _0x18a243;})});}_0x36e6a1=_[_0x3bab('0x34')]({},_0x36e6a1,_0x5c985f[_0x3bab('0x39')]);return _0x3a32eb[_0x3bab('0x5c')](_0x36e6a1);}})[_0x3bab('0x1d')](function(_0x2005ac){if(_0x2005ac){_0x49811d=_0x2005ac[_0x3bab('0x2c')];if(!_0x5c985f[_0x3bab('0x28')][_0x3bab('0x50')]('nolimit')){_0x36e6a1['limit']=qs[_0x3bab('0x18')](_0x5c985f[_0x3bab('0x28')][_0x3bab('0x18')]);_0x36e6a1[_0x3bab('0x17')]=qs['offset'](_0x5c985f[_0x3bab('0x28')][_0x3bab('0x17')]);}return _0x3a32eb[_0x3bab('0x5c')](_0x36e6a1);}})[_0x3bab('0x1d')](function(_0x137eef){if(_0x137eef){return _0x137eef?{'count':_0x49811d,'rows':_0x137eef}:null;}})[_0x3bab('0x1d')](respondWithResult(_0x596f96,null))[_0x3bab('0x42')](handleError(_0x596f96,null));};exports['addTeams']=function(_0x43dd1c,_0x5caf34,_0xe1dab4){var _0x45a391=_0x43dd1c[_0x3bab('0x44')]['teams'];return db['Team'][_0x3bab('0x3e')]({'where':{'id':_[_0x3bab('0x35')](_0x45a391,'id')},'attributes':['id'],'include':[{'model':db[_0x3bab('0x53')],'as':_0x3bab('0x5d'),'attributes':['id',_0x3bab('0x23'),_0x3bab('0x5e'),_0x3bab('0x5f'),_0x3bab('0x60')],'raw':!![]}]})['then'](function(_0x45d34e){if(_0x45d34e){var _0x68d606=_[_0x3bab('0x61')](_0x45d34e,function(_0x444127){var _0x1d25f5=_0x444127[_0x3bab('0x1e')]({'plain':!![]});return _0x1d25f5[_0x3bab('0x5d')];});return db[_0x3bab('0x3a')]['find']({'where':{'id':_0x43dd1c[_0x3bab('0x4c')]['id']}})[_0x3bab('0x1d')](function(_0x590dcb){return db[_0x3bab('0x62')][_0x3bab('0x63')](function(_0x5615a6){return _0x590dcb[_0x3bab('0x64')](_['map'](_0x45a391,'id'),{'transaction':_0x5615a6})[_0x3bab('0x1d')](function(){return BPromise['each'](_0x68d606,function(_0x14af58){return db['UserFaxQueue'][_0x3bab('0x65')]({'where':{'UserId':_0x14af58['id'],'FaxQueueId':_0x43dd1c[_0x3bab('0x4c')]['id']},'transaction':_0x5615a6});});})['then'](function(){_0x68d606[_0x3bab('0x66')](function(_0x3feabb){socket['emit'](_0x3bab('0x67'),{'UserId':_0x3feabb['id'],'FaxQueueId':_0x590dcb['id']});});});});});}})[_0x3bab('0x1d')](respondWithStatusCode(_0x5caf34,null))[_0x3bab('0x42')](handleError(_0x5caf34,null));};exports[_0x3bab('0x68')]=function(_0xaea416,_0x4015d3,_0x483115){return db['Team'][_0x3bab('0x3e')]({'where':{'id':_0xaea416[_0x3bab('0x28')][_0x3bab('0x69')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0x3bab('0x5d'),'attributes':['id'],'raw':!![]}]})['then'](handleEntityNotFound(_0x4015d3,null))[_0x3bab('0x1d')](function(_0x2d4b78){var _0x2534d9=_['map'](_0x2d4b78,'id');var _0x4b0d6d=[];var _0x25dd69=[];var _0x4bf514=squel[_0x3bab('0x6a')]();_0x4bf514[_0x3bab('0x38')]('tq.TeamId')[_0x3bab('0x6b')]('team_has_fax_queues','tq')[_0x3bab('0x6c')](_0x3bab('0x6d'),'ut',_0x3bab('0x6e'))[_0x3bab('0x30')](_0x3bab('0x6f'),_0xaea416['params']['id']);for(var _0x5cb528=0x0;_0x5cb528<_0x2d4b78['length'];_0x5cb528+=0x1){let _0x2a7c5e=_0x2d4b78[_0x5cb528];for(var _0x3250cf=0x0;_0x3250cf<_0x2a7c5e[_0x3bab('0x5d')][_0x3bab('0x2c')];_0x3250cf+=0x1){let _0x471752=_0x2a7c5e[_0x3bab('0x5d')][_0x3250cf];var _0x525873=_0x4bf514[_0x3bab('0x70')]();_0x525873[_0x3bab('0x30')](_0x3bab('0x71'),_0x471752['id']);_0x25dd69[_0x3bab('0x72')](db[_0x3bab('0x62')][_0x3bab('0x28')](_0x525873[_0x3bab('0x73')](),{'type':db[_0x3bab('0x62')][_0x3bab('0x74')][_0x3bab('0x75')]})[_0x3bab('0x1d')](function(_0x1de504){if(_0x1de504['length']===0x1){return _0x471752['id'];}else{var _0x33b87e=_['every'](_[_0x3bab('0x35')](_0x1de504,_0x3bab('0x76')),function(_0x51c915){return _[_0x3bab('0x77')](_0x2534d9,_0x51c915);});if(_0x33b87e){return _0x471752['id'];}}}));}}return BPromise['all'](_0x25dd69)[_0x3bab('0x1d')](function(_0x48a598){_0x4b0d6d=_(_0x4b0d6d)[_0x3bab('0x78')](_0x48a598)[_0x3bab('0x79')]()[_0x3bab('0x7a')]();return db[_0x3bab('0x3a')]['find']({'where':{'id':_0xaea416['params']['id']}})['then'](function(_0x3d78d9){return db['sequelize'][_0x3bab('0x63')](function(_0x557cb1){return _0x3d78d9['removeTeams'](_0xaea416[_0x3bab('0x28')]['ids'],{'transaction':_0x557cb1})[_0x3bab('0x1d')](function(){if(!_[_0x3bab('0x7b')](_0x4b0d6d)){return _0x3d78d9[_0x3bab('0x7c')](_0x4b0d6d,{'transaction':_0x557cb1});}})[_0x3bab('0x1d')](function(){_0x4b0d6d[_0x3bab('0x66')](function(_0x48aa1e){socket['emit'](_0x3bab('0x7d'),{'UserId':_0x48aa1e,'FaxQueueId':_0x3d78d9['id']});});});});});});})[_0x3bab('0x1d')](respondWithStatusCode(_0x4015d3,null))['catch'](handleError(_0x4015d3,null));};exports[_0x3bab('0x7e')]=function(_0x2bb303,_0x1fbf06,_0x98ec0d){return db['FaxQueue'][_0x3bab('0x41')]({'where':{'id':_0x2bb303['params']['id']}})['then'](handleEntityNotFound(_0x1fbf06,null))[_0x3bab('0x1d')](function(_0x3bf6e7){if(_0x3bf6e7){return _0x3bf6e7[_0x3bab('0x7e')](_0x2bb303['body'][_0x3bab('0x69')],_[_0x3bab('0x7f')](_0x2bb303['body'],['ids','id'])||{})['spread'](function(_0x4725fe){for(var _0x2bdba7=0x0;_0x2bdba7<_0x2bb303['body'][_0x3bab('0x69')][_0x3bab('0x2c')];_0x2bdba7+=0x1){socket[_0x3bab('0x80')](_0x3bab('0x67'),{'UserId':_0x2bb303['body']['ids'][_0x2bdba7],'FaxQueueId':_0x2bb303[_0x3bab('0x4c')]['id']});}return _0x4725fe;});}})['then'](respondWithResult(_0x1fbf06,null))[_0x3bab('0x42')](handleError(_0x1fbf06,null));};exports[_0x3bab('0x7c')]=function(_0x5cf0ce,_0x17c43d,_0x3d04d2){return db['FaxQueue']['find']({'where':{'id':_0x5cf0ce['params']['id']}})[_0x3bab('0x1d')](handleEntityNotFound(_0x17c43d,null))['then'](function(_0x104acc){if(_0x104acc){return _0x104acc[_0x3bab('0x7c')](_0x5cf0ce['query'][_0x3bab('0x69')])[_0x3bab('0x1d')](function(){if(_['isArray'](_0x5cf0ce[_0x3bab('0x28')][_0x3bab('0x69')])){for(var _0x28fb26=0x0;_0x28fb26<_0x5cf0ce[_0x3bab('0x28')][_0x3bab('0x69')][_0x3bab('0x2c')];_0x28fb26+=0x1){socket[_0x3bab('0x80')]('userFaxQueue:remove',{'UserId':Number(_0x5cf0ce['query'][_0x3bab('0x69')][_0x28fb26]),'FaxQueueId':Number(_0x5cf0ce[_0x3bab('0x4c')]['id'])});}}else{socket[_0x3bab('0x80')](_0x3bab('0x7d'),{'UserId':Number(_0x5cf0ce[_0x3bab('0x28')][_0x3bab('0x69')]),'FaxQueueId':Number(_0x5cf0ce['params']['id'])});}});}})[_0x3bab('0x1d')](respondWithStatusCode(_0x17c43d,null))[_0x3bab('0x42')](handleError(_0x17c43d,null));};exports[_0x3bab('0x81')]=function(_0x3cb618,_0x1923e5,_0x22e97f){var _0x5aeb23={};var _0x54da28={};var _0x230ffb;var _0x482106;return db['FaxQueue']['findOne']({'where':{'id':_0x3cb618[_0x3bab('0x4c')]['id']}})[_0x3bab('0x1d')](handleEntityNotFound(_0x1923e5,null))[_0x3bab('0x1d')](function(_0x80c67f){if(_0x80c67f){_0x230ffb=_0x80c67f;_0x54da28[_0x3bab('0x26')]=_[_0x3bab('0x27')](db[_0x3bab('0x53')][_0x3bab('0x25')]);_0x54da28[_0x3bab('0x28')]=_[_0x3bab('0x27')](_0x3cb618[_0x3bab('0x28')]);_0x54da28[_0x3bab('0x31')]=_[_0x3bab('0x29')](_0x54da28[_0x3bab('0x26')],_0x54da28['query']);_0x5aeb23[_0x3bab('0x2a')]=_['intersection'](_0x54da28[_0x3bab('0x26')],qs[_0x3bab('0x2b')](_0x3cb618[_0x3bab('0x28')][_0x3bab('0x2b')]));_0x5aeb23[_0x3bab('0x2a')]=_0x5aeb23[_0x3bab('0x2a')][_0x3bab('0x2c')]?_0x5aeb23['attributes']:_0x54da28[_0x3bab('0x26')];_0x5aeb23[_0x3bab('0x2e')]=qs[_0x3bab('0x2f')](_0x3cb618['query'][_0x3bab('0x2f')]);_0x5aeb23[_0x3bab('0x30')]=qs[_0x3bab('0x31')](_['pick'](_0x3cb618[_0x3bab('0x28')],_0x54da28[_0x3bab('0x31')]));if(_0x3cb618[_0x3bab('0x28')]['filter']){_0x5aeb23[_0x3bab('0x30')]=_[_0x3bab('0x34')](_0x5aeb23[_0x3bab('0x30')],{'$or':_[_0x3bab('0x35')](_0x5aeb23[_0x3bab('0x2a')],function(_0xa285ec){var _0x29cc6f={};_0x29cc6f[_0xa285ec]={'$like':'%'+_0x3cb618[_0x3bab('0x28')]['filter']+'%'};return _0x29cc6f;})});}_0x5aeb23=_['merge']({},_0x5aeb23,_0x3cb618[_0x3bab('0x39')]);return _0x230ffb[_0x3bab('0x81')](_0x5aeb23);}})[_0x3bab('0x1d')](function(_0x17f2a5){if(_0x17f2a5){_0x482106=_0x17f2a5[_0x3bab('0x2c')];if(!_0x3cb618[_0x3bab('0x28')][_0x3bab('0x50')](_0x3bab('0x2d'))){_0x5aeb23[_0x3bab('0x18')]=qs[_0x3bab('0x18')](_0x3cb618[_0x3bab('0x28')][_0x3bab('0x18')]);_0x5aeb23[_0x3bab('0x17')]=qs[_0x3bab('0x17')](_0x3cb618[_0x3bab('0x28')]['offset']);}return _0x230ffb[_0x3bab('0x81')](_0x5aeb23);}})['then'](function(_0x4306e5){if(_0x4306e5){return _0x4306e5?{'count':_0x482106,'rows':_0x4306e5}:null;}})['then'](respondWithResult(_0x1923e5,null))[_0x3bab('0x42')](handleError(_0x1923e5,null));};
\ No newline at end of file
+var _0x9685=['eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','querystring','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','redis','defaults','register','sendStatus','status','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','get','FaxQueues','UserProfileResource','end','stack','name','send','index','FaxQueue','rawAttributes','model','keys','filters','intersection','query','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','filter','merge','type','key','VIRTUAL','field','options','includeAll','findAll','rows','catch','show','include','find','create','body','userProfileId','autoAssociation','params','describe','UserFaxQueue','order','FaxQueueId','map','findAndCountAll','UserId','faxPause','updatedAt','createdAt','format','%s/%s','SIP','findOne','Team','getTeams','addTeams','teams','User','flatMap','Agents','transaction','each','findOrCreate','forEach','userFaxQueue:save','removeTeams','ids','select','tq.TeamId','from','team_has_fax_queues','join','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','FaxQueueId\x20=\x20?','clone','push','toString','sequelize','QueryTypes','includes','isEmpty','removeAgents','emit','userFaxQueue:remove','addAgents','omit','spread','isArray','getAgents'];(function(_0x272725,_0x50a84c){var _0x6622ae=function(_0x54d7da){while(--_0x54d7da){_0x272725['push'](_0x272725['shift']());}};_0x6622ae(++_0x50a84c);}(_0x9685,0x18c));var _0x5968=function(_0x36bf89,_0x3679ce){_0x36bf89=_0x36bf89-0x0;var _0x969757=_0x9685[_0x36bf89];return _0x969757;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x5968('0x0'));var rimraf=require(_0x5968('0x1'));var zipdir=require(_0x5968('0x2'));var jsonpatch=require(_0x5968('0x3'));var rp=require('request-promise');var moment=require(_0x5968('0x4'));var BPromise=require(_0x5968('0x5'));var Mustache=require(_0x5968('0x6'));var util=require(_0x5968('0x7'));var path=require(_0x5968('0x8'));var sox=require(_0x5968('0x9'));var csv=require(_0x5968('0xa'));var ejs=require(_0x5968('0xb'));var fs=require('fs');var _=require(_0x5968('0xc'));var squel=require('squel');var crypto=require(_0x5968('0xd'));var jsforce=require(_0x5968('0xe'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x5968('0xf'));var Papa=require('papaparse');var Redis=require(_0x5968('0x10'));var authService=require('../../components/auth/service');var qs=require(_0x5968('0x11'));var hardwareService=require(_0x5968('0x12'));var logger=require(_0x5968('0x13'))(_0x5968('0x14'));var utils=require(_0x5968('0x15'));var config=require('../../config/environment');var db=require(_0x5968('0x16'))['db'];config[_0x5968('0x17')]=_[_0x5968('0x18')](config[_0x5968('0x17')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x5968('0x17')]));require('./faxQueue.socket')[_0x5968('0x19')](socket);function respondWithStatusCode(_0x17f526,_0x1bbd50){_0x1bbd50=_0x1bbd50||0xcc;return function(_0x32329b){if(_0x32329b){return _0x17f526[_0x5968('0x1a')](_0x1bbd50);}return _0x17f526[_0x5968('0x1b')](_0x1bbd50)['end']();};}function respondWithResult(_0x434d18,_0xd37fa7){_0xd37fa7=_0xd37fa7||0xc8;return function(_0x890989){if(_0x890989){return _0x434d18[_0x5968('0x1b')](_0xd37fa7)['json'](_0x890989);}};}function respondWithFilteredResult(_0x4c6cd0,_0x58754b){return function(_0x23e3d5){if(_0x23e3d5){var _0x3a9686=_0x23e3d5[_0x5968('0x1c')],_0x401274=_0x58754b['offset'],_0x58f1d8=_0x58754b[_0x5968('0x1d')]+_0x58754b[_0x5968('0x1e')],_0x532365;if(_0x58f1d8>=_0x3a9686){_0x58f1d8=_0x3a9686;_0x532365=0xc8;}else{_0x532365=0xce;}_0x4c6cd0[_0x5968('0x1b')](_0x532365);return _0x4c6cd0[_0x5968('0x1f')](_0x5968('0x20'),_0x401274+'-'+_0x58f1d8+'/'+_0x3a9686)['json'](_0x23e3d5);}return null;};}function patchUpdates(_0x4965ad){return function(_0x4c907a){try{jsonpatch[_0x5968('0x21')](_0x4c907a,_0x4965ad,!![]);}catch(_0x33d7e5){return BPromise[_0x5968('0x22')](_0x33d7e5);}return _0x4c907a[_0x5968('0x23')]();};}function saveUpdates(_0x1e8e07,_0x5ada15){return function(_0xc5e6b2){if(_0xc5e6b2){return _0xc5e6b2[_0x5968('0x24')](_0x1e8e07)[_0x5968('0x25')](function(_0x9c091b){return _0x9c091b;});}return null;};}function removeEntity(_0x2b9d2d,_0x26d5ff){return function(_0x191633){if(_0x191633){return _0x191633[_0x5968('0x26')]()[_0x5968('0x25')](function(){var _0x3a2b04=_0x191633[_0x5968('0x27')]({'plain':!![]});var _0x7c6f33=_0x5968('0x28');return db[_0x5968('0x29')][_0x5968('0x26')]({'where':{'type':_0x7c6f33,'resourceId':_0x3a2b04['id']}})['then'](function(){return _0x191633;});})[_0x5968('0x25')](function(){_0x2b9d2d[_0x5968('0x1b')](0xcc)[_0x5968('0x2a')]();});}};}function handleEntityNotFound(_0xd7f972,_0x308844){return function(_0x596996){if(!_0x596996){_0xd7f972[_0x5968('0x1a')](0x194);}return _0x596996;};}function handleError(_0x5e9cce,_0x314314){_0x314314=_0x314314||0x1f4;return function(_0x310c45){logger['error'](_0x310c45[_0x5968('0x2b')]);if(_0x310c45['name']){delete _0x310c45[_0x5968('0x2c')];}_0x5e9cce[_0x5968('0x1b')](_0x314314)[_0x5968('0x2d')](_0x310c45);};}exports[_0x5968('0x2e')]=function(_0x1b291e,_0x318d11){var _0x49c63a={},_0x3a7bde={},_0x3011db={'count':0x0,'rows':[]};var _0x2a8677=db[_0x5968('0x2f')][_0x5968('0x30')];_0x3a7bde[_0x5968('0x31')]=_[_0x5968('0x32')](_0x2a8677);_0x3a7bde['query']=_[_0x5968('0x32')](_0x1b291e['query']);_0x3a7bde[_0x5968('0x33')]=_[_0x5968('0x34')](_0x3a7bde[_0x5968('0x31')],_0x3a7bde[_0x5968('0x35')]);_0x49c63a[_0x5968('0x36')]=_['intersection'](_0x3a7bde['model'],qs['fields'](_0x1b291e['query'][_0x5968('0x37')]));_0x49c63a[_0x5968('0x36')]=_0x49c63a[_0x5968('0x36')][_0x5968('0x38')]?_0x49c63a[_0x5968('0x36')]:_0x3a7bde['model'];if(!_0x1b291e['query'][_0x5968('0x39')](_0x5968('0x3a'))){_0x49c63a['limit']=qs[_0x5968('0x1e')](_0x1b291e[_0x5968('0x35')][_0x5968('0x1e')]);_0x49c63a[_0x5968('0x1d')]=qs[_0x5968('0x1d')](_0x1b291e[_0x5968('0x35')][_0x5968('0x1d')]);}_0x49c63a['order']=qs['sort'](_0x1b291e['query'][_0x5968('0x3b')]);_0x49c63a[_0x5968('0x3c')]=qs[_0x5968('0x33')](_[_0x5968('0x3d')](_0x1b291e['query'],_0x3a7bde[_0x5968('0x33')]));if(_0x1b291e[_0x5968('0x35')][_0x5968('0x3e')]){_0x49c63a[_0x5968('0x3c')]=_[_0x5968('0x3f')](_0x49c63a['where'],{'$or':_['map'](_0x2a8677,function(_0x330a2d){if(_0x330a2d[_0x5968('0x40')][_0x5968('0x41')]!==_0x5968('0x42')){var _0x317fc2={};_0x317fc2[_0x330a2d[_0x5968('0x43')]]={'$like':'%'+_0x1b291e[_0x5968('0x35')][_0x5968('0x3e')]+'%'};return _0x317fc2;}})});}_0x49c63a=_['merge']({},_0x49c63a,_0x1b291e[_0x5968('0x44')]);var _0x58c74c={'where':_0x49c63a[_0x5968('0x3c')]};return db[_0x5968('0x2f')][_0x5968('0x1c')](_0x58c74c)['then'](function(_0x37084e){_0x3011db[_0x5968('0x1c')]=_0x37084e;if(_0x1b291e[_0x5968('0x35')][_0x5968('0x45')]){_0x49c63a['include']=[{'all':!![]}];}return db[_0x5968('0x2f')][_0x5968('0x46')](_0x49c63a);})[_0x5968('0x25')](function(_0x106f17){_0x3011db[_0x5968('0x47')]=_0x106f17;return _0x3011db;})[_0x5968('0x25')](respondWithFilteredResult(_0x318d11,_0x49c63a))[_0x5968('0x48')](handleError(_0x318d11,null));};exports[_0x5968('0x49')]=function(_0x30b75c,_0x4a950f){var _0x4f1c8f={'raw':!![],'where':{'id':_0x30b75c['params']['id']}},_0x3e5d92={};_0x3e5d92[_0x5968('0x31')]=_[_0x5968('0x32')](db['FaxQueue'][_0x5968('0x30')]);_0x3e5d92['query']=_[_0x5968('0x32')](_0x30b75c[_0x5968('0x35')]);_0x3e5d92[_0x5968('0x33')]=_[_0x5968('0x34')](_0x3e5d92[_0x5968('0x31')],_0x3e5d92['query']);_0x4f1c8f[_0x5968('0x36')]=_[_0x5968('0x34')](_0x3e5d92[_0x5968('0x31')],qs[_0x5968('0x37')](_0x30b75c[_0x5968('0x35')][_0x5968('0x37')]));_0x4f1c8f['attributes']=_0x4f1c8f[_0x5968('0x36')][_0x5968('0x38')]?_0x4f1c8f[_0x5968('0x36')]:_0x3e5d92[_0x5968('0x31')];if(_0x30b75c['query'][_0x5968('0x45')]){_0x4f1c8f[_0x5968('0x4a')]=[{'all':!![]}];}_0x4f1c8f=_[_0x5968('0x3f')]({},_0x4f1c8f,_0x30b75c[_0x5968('0x44')]);return db[_0x5968('0x2f')][_0x5968('0x4b')](_0x4f1c8f)['then'](handleEntityNotFound(_0x4a950f,null))[_0x5968('0x25')](respondWithResult(_0x4a950f,null))[_0x5968('0x48')](handleError(_0x4a950f,null));};exports[_0x5968('0x4c')]=function(_0x1f52b4,_0x3e81a7){return db['FaxQueue'][_0x5968('0x4c')](_0x1f52b4[_0x5968('0x4d')],{})['then'](function(_0x273fee){var _0x2090c2=_0x1f52b4['user'][_0x5968('0x27')]({'plain':!![]});if(!_0x2090c2)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x2090c2['role']==='user'){var _0x5e039a=_0x273fee[_0x5968('0x27')]({'plain':!![]});var _0x2dc377=_0x5968('0x28');return db['UserProfileSection'][_0x5968('0x4b')]({'where':{'name':_0x2dc377,'userProfileId':_0x2090c2[_0x5968('0x4e')]},'raw':!![]})['then'](function(_0x46d576){if(_0x46d576&&_0x46d576[_0x5968('0x4f')]===0x0){return db['UserProfileResource'][_0x5968('0x4c')]({'name':_0x5e039a[_0x5968('0x2c')],'resourceId':_0x5e039a['id'],'type':_0x46d576[_0x5968('0x2c')],'sectionId':_0x46d576['id']},{})[_0x5968('0x25')](function(){return _0x273fee;});}else{return _0x273fee;}})[_0x5968('0x48')](function(_0x3dd4ba){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x3dd4ba);throw _0x3dd4ba;});}return _0x273fee;})[_0x5968('0x25')](respondWithResult(_0x3e81a7,0xc9))[_0x5968('0x48')](handleError(_0x3e81a7,null));};exports['update']=function(_0x28dd27,_0x5f0446){if(_0x28dd27[_0x5968('0x4d')]['id']){delete _0x28dd27[_0x5968('0x4d')]['id'];}return db[_0x5968('0x2f')][_0x5968('0x4b')]({'where':{'id':_0x28dd27[_0x5968('0x50')]['id']}})[_0x5968('0x25')](handleEntityNotFound(_0x5f0446,null))[_0x5968('0x25')](saveUpdates(_0x28dd27[_0x5968('0x4d')],null))[_0x5968('0x25')](respondWithResult(_0x5f0446,null))[_0x5968('0x48')](handleError(_0x5f0446,null));};exports[_0x5968('0x26')]=function(_0x4124e7,_0x5991c3){return db[_0x5968('0x2f')]['find']({'where':{'id':_0x4124e7[_0x5968('0x50')]['id']}})[_0x5968('0x25')](handleEntityNotFound(_0x5991c3,null))[_0x5968('0x25')](removeEntity(_0x5991c3,null))[_0x5968('0x48')](handleError(_0x5991c3,null));};exports[_0x5968('0x51')]=function(_0x49e579,_0x478717){return db['FaxQueue']['describe']()[_0x5968('0x25')](respondWithResult(_0x478717,null))['catch'](handleError(_0x478717,null));};exports['getMembers']=function(_0xa762a3,_0x3c2a22,_0x66930a){var _0x42e042={'raw':!![],'where':{}},_0x2673fa={},_0x267738;return db[_0x5968('0x2f')]['findOne']({'where':{'id':_0xa762a3[_0x5968('0x50')]['id']}})['then'](handleEntityNotFound(_0x3c2a22,null))[_0x5968('0x25')](function(_0x4f30cb){if(_0x4f30cb){_0x267738=_0x4f30cb[_0x5968('0x27')]({'plain':!![]});_0x2673fa[_0x5968('0x31')]=_[_0x5968('0x32')](db[_0x5968('0x52')][_0x5968('0x30')]);_0x2673fa[_0x5968('0x35')]=_[_0x5968('0x32')](_0xa762a3['query']);_0x2673fa[_0x5968('0x33')]=_[_0x5968('0x34')](_0x2673fa[_0x5968('0x31')],_0x2673fa[_0x5968('0x35')]);_0x42e042[_0x5968('0x36')]=_[_0x5968('0x34')](_0x2673fa[_0x5968('0x31')],qs[_0x5968('0x37')](_0xa762a3[_0x5968('0x35')]['fields']));_0x42e042[_0x5968('0x36')]=_0x42e042[_0x5968('0x36')]['length']?_0x42e042['attributes']:_0x2673fa['model'];if(!_0xa762a3[_0x5968('0x35')][_0x5968('0x39')](_0x5968('0x3a'))){_0x42e042[_0x5968('0x1e')]=qs[_0x5968('0x1e')](_0xa762a3[_0x5968('0x35')][_0x5968('0x1e')]);_0x42e042['offset']=qs[_0x5968('0x1d')](_0xa762a3[_0x5968('0x35')][_0x5968('0x1d')]);}_0x42e042[_0x5968('0x53')]=qs[_0x5968('0x3b')](_0xa762a3['query'][_0x5968('0x3b')]);_0x42e042[_0x5968('0x3c')]=qs[_0x5968('0x33')](_[_0x5968('0x3d')](_0xa762a3[_0x5968('0x35')],_0x2673fa[_0x5968('0x33')]));_0x42e042[_0x5968('0x3c')][_0x5968('0x54')]=_0x4f30cb['id'];if(_0xa762a3[_0x5968('0x35')][_0x5968('0x3e')]){_0x42e042['where']=_[_0x5968('0x3f')](_0x42e042['where'],{'$or':_[_0x5968('0x55')](_0x42e042[_0x5968('0x36')],function(_0x4c8048){var _0x530891={};_0x530891[_0x4c8048]={'$like':'%'+_0xa762a3[_0x5968('0x35')]['filter']+'%'};return _0x530891;})});}_0x42e042=_[_0x5968('0x3f')]({},_0x42e042,_0xa762a3[_0x5968('0x44')]);return db[_0x5968('0x52')][_0x5968('0x46')](_0x42e042);}})[_0x5968('0x25')](function(_0x3a722d){if(_0x3a722d){return db['User'][_0x5968('0x56')]({'where':{'id':_['map'](_0x3a722d,_0x5968('0x57')),'role':'agent'},'attributes':['id',_0x5968('0x2c'),_0x5968('0x58'),_0x5968('0x59'),_0x5968('0x5a')]});}})[_0x5968('0x25')](function(_0x38d9ff){if(_0x38d9ff){return{'count':_0x38d9ff[_0x5968('0x1c')],'rows':_[_0x5968('0x55')](_0x38d9ff['rows'],function(_0x5f35a0){return{'membername':_0x5f35a0[_0x5968('0x2c')],'UserId':_0x5f35a0['id'],'queue_name':_0x267738[_0x5968('0x2c')],'FaxQueueId':_0x267738['id'],'interface':util[_0x5968('0x5b')](_0x5968('0x5c'),_0x5968('0x5d'),_0x5f35a0[_0x5968('0x2c')]),'penalty':0x0,'paused':_0x5f35a0[_0x5968('0x58')],'createdAt':_0x5f35a0[_0x5968('0x5a')],'updatedAt':_0x5f35a0[_0x5968('0x59')]};})};}else{return{'count':0x0,'rows':[]};}})[_0x5968('0x25')](respondWithFilteredResult(_0x3c2a22,_0x42e042))['catch'](handleError(_0x3c2a22,null));};exports['getTeams']=function(_0x535482,_0x252b99,_0x2c861d){var _0x4fb036={};var _0x1b8b84={};var _0x4e0dd7;var _0x804e6e;return db['FaxQueue'][_0x5968('0x5e')]({'where':{'id':_0x535482['params']['id']}})[_0x5968('0x25')](handleEntityNotFound(_0x252b99,null))[_0x5968('0x25')](function(_0x59d42e){if(_0x59d42e){_0x4e0dd7=_0x59d42e;_0x1b8b84['model']=_[_0x5968('0x32')](db[_0x5968('0x5f')][_0x5968('0x30')]);_0x1b8b84[_0x5968('0x35')]=_[_0x5968('0x32')](_0x535482['query']);_0x1b8b84['filters']=_[_0x5968('0x34')](_0x1b8b84['model'],_0x1b8b84['query']);_0x4fb036['attributes']=_['intersection'](_0x1b8b84[_0x5968('0x31')],qs[_0x5968('0x37')](_0x535482[_0x5968('0x35')]['fields']));_0x4fb036['attributes']=_0x4fb036['attributes'][_0x5968('0x38')]?_0x4fb036[_0x5968('0x36')]:_0x1b8b84['model'];_0x4fb036[_0x5968('0x53')]=qs[_0x5968('0x3b')](_0x535482[_0x5968('0x35')][_0x5968('0x3b')]);_0x4fb036[_0x5968('0x3c')]=qs[_0x5968('0x33')](_[_0x5968('0x3d')](_0x535482[_0x5968('0x35')],_0x1b8b84[_0x5968('0x33')]));if(_0x535482['query']['filter']){_0x4fb036[_0x5968('0x3c')]=_['merge'](_0x4fb036[_0x5968('0x3c')],{'$or':_[_0x5968('0x55')](_0x4fb036['attributes'],function(_0x405ca1){var _0x3847cb={};_0x3847cb[_0x405ca1]={'$like':'%'+_0x535482[_0x5968('0x35')]['filter']+'%'};return _0x3847cb;})});}_0x4fb036=_[_0x5968('0x3f')]({},_0x4fb036,_0x535482[_0x5968('0x44')]);return _0x4e0dd7['getTeams'](_0x4fb036);}})[_0x5968('0x25')](function(_0x5b0797){if(_0x5b0797){_0x804e6e=_0x5b0797[_0x5968('0x38')];if(!_0x535482[_0x5968('0x35')]['hasOwnProperty'](_0x5968('0x3a'))){_0x4fb036[_0x5968('0x1e')]=qs[_0x5968('0x1e')](_0x535482['query'][_0x5968('0x1e')]);_0x4fb036[_0x5968('0x1d')]=qs[_0x5968('0x1d')](_0x535482[_0x5968('0x35')]['offset']);}return _0x4e0dd7[_0x5968('0x60')](_0x4fb036);}})['then'](function(_0x142cf7){if(_0x142cf7){return _0x142cf7?{'count':_0x804e6e,'rows':_0x142cf7}:null;}})[_0x5968('0x25')](respondWithResult(_0x252b99,null))['catch'](handleError(_0x252b99,null));};exports[_0x5968('0x61')]=function(_0x1d8186,_0x4cb6b6,_0xbf5a49){var _0xf503bb=_0x1d8186['body'][_0x5968('0x62')];return db['Team'][_0x5968('0x46')]({'where':{'id':_[_0x5968('0x55')](_0xf503bb,'id')},'attributes':['id'],'include':[{'model':db[_0x5968('0x63')],'as':'Agents','attributes':['id',_0x5968('0x2c'),'online','voicePause','interface'],'raw':!![]}]})['then'](function(_0x34a916){if(_0x34a916){var _0x113762=_[_0x5968('0x64')](_0x34a916,function(_0x2d02c4){var _0xb766e8=_0x2d02c4['get']({'plain':!![]});return _0xb766e8[_0x5968('0x65')];});return db[_0x5968('0x2f')]['find']({'where':{'id':_0x1d8186[_0x5968('0x50')]['id']}})[_0x5968('0x25')](function(_0x27be25){return db['sequelize'][_0x5968('0x66')](function(_0x4efb02){return _0x27be25[_0x5968('0x61')](_[_0x5968('0x55')](_0xf503bb,'id'),{'transaction':_0x4efb02})[_0x5968('0x25')](function(){return BPromise[_0x5968('0x67')](_0x113762,function(_0x4cef44){return db['UserFaxQueue'][_0x5968('0x68')]({'where':{'UserId':_0x4cef44['id'],'FaxQueueId':_0x1d8186['params']['id']},'transaction':_0x4efb02});});})[_0x5968('0x25')](function(){_0x113762[_0x5968('0x69')](function(_0x51e304){socket['emit'](_0x5968('0x6a'),{'UserId':_0x51e304['id'],'FaxQueueId':_0x27be25['id']});});});});});}})[_0x5968('0x25')](respondWithStatusCode(_0x4cb6b6,null))[_0x5968('0x48')](handleError(_0x4cb6b6,null));};exports[_0x5968('0x6b')]=function(_0x22b12f,_0x5eb620,_0x28f9c5){return db[_0x5968('0x5f')]['findAll']({'where':{'id':_0x22b12f[_0x5968('0x35')][_0x5968('0x6c')]},'attributes':['id'],'include':[{'model':db[_0x5968('0x63')],'as':_0x5968('0x65'),'attributes':['id'],'raw':!![]}]})['then'](handleEntityNotFound(_0x5eb620,null))[_0x5968('0x25')](function(_0x28e6e4){var _0x399aae=_[_0x5968('0x55')](_0x28e6e4,'id');var _0x456567=[];var _0x292e5d=[];var _0x12411b=squel[_0x5968('0x6d')]();_0x12411b[_0x5968('0x43')](_0x5968('0x6e'))[_0x5968('0x6f')](_0x5968('0x70'),'tq')[_0x5968('0x71')](_0x5968('0x72'),'ut',_0x5968('0x73'))['where'](_0x5968('0x74'),_0x22b12f[_0x5968('0x50')]['id']);for(var _0x4785d5=0x0;_0x4785d5<_0x28e6e4[_0x5968('0x38')];_0x4785d5+=0x1){let _0x53391b=_0x28e6e4[_0x4785d5];for(var _0x24c136=0x0;_0x24c136<_0x53391b['Agents']['length'];_0x24c136+=0x1){let _0x16bbd0=_0x53391b['Agents'][_0x24c136];var _0x200bd6=_0x12411b[_0x5968('0x75')]();_0x200bd6['where']('ut.UserId\x20=\x20?',_0x16bbd0['id']);_0x292e5d[_0x5968('0x76')](db['sequelize'][_0x5968('0x35')](_0x200bd6[_0x5968('0x77')](),{'type':db[_0x5968('0x78')][_0x5968('0x79')]['SELECT']})[_0x5968('0x25')](function(_0x2dc78b){if(_0x2dc78b[_0x5968('0x38')]===0x1){return _0x16bbd0['id'];}else{var _0x2a051b=_['every'](_[_0x5968('0x55')](_0x2dc78b,'TeamId'),function(_0x5ed81a){return _[_0x5968('0x7a')](_0x399aae,_0x5ed81a);});if(_0x2a051b){return _0x16bbd0['id'];}}}));}}return BPromise['all'](_0x292e5d)[_0x5968('0x25')](function(_0x568510){_0x456567=_(_0x456567)['union'](_0x568510)['compact']()['value']();return db[_0x5968('0x2f')][_0x5968('0x4b')]({'where':{'id':_0x22b12f[_0x5968('0x50')]['id']}})[_0x5968('0x25')](function(_0x4fd3f0){return db[_0x5968('0x78')]['transaction'](function(_0x54a22f){return _0x4fd3f0[_0x5968('0x6b')](_0x22b12f[_0x5968('0x35')][_0x5968('0x6c')],{'transaction':_0x54a22f})[_0x5968('0x25')](function(){if(!_[_0x5968('0x7b')](_0x456567)){return _0x4fd3f0[_0x5968('0x7c')](_0x456567,{'transaction':_0x54a22f});}})[_0x5968('0x25')](function(){_0x456567[_0x5968('0x69')](function(_0x2d360e){socket[_0x5968('0x7d')](_0x5968('0x7e'),{'UserId':_0x2d360e,'FaxQueueId':_0x4fd3f0['id']});});});});});});})[_0x5968('0x25')](respondWithStatusCode(_0x5eb620,null))[_0x5968('0x48')](handleError(_0x5eb620,null));};exports[_0x5968('0x7f')]=function(_0x1afad3,_0x5bdb9b,_0x11c27e){return db['FaxQueue'][_0x5968('0x4b')]({'where':{'id':_0x1afad3[_0x5968('0x50')]['id']}})['then'](handleEntityNotFound(_0x5bdb9b,null))['then'](function(_0x46e9b2){if(_0x46e9b2){return _0x46e9b2['addAgents'](_0x1afad3[_0x5968('0x4d')][_0x5968('0x6c')],_[_0x5968('0x80')](_0x1afad3[_0x5968('0x4d')],[_0x5968('0x6c'),'id'])||{})[_0x5968('0x81')](function(_0x1bf20e){for(var _0x4f53c6=0x0;_0x4f53c6<_0x1afad3['body'][_0x5968('0x6c')][_0x5968('0x38')];_0x4f53c6+=0x1){socket['emit'](_0x5968('0x6a'),{'UserId':_0x1afad3['body']['ids'][_0x4f53c6],'FaxQueueId':_0x1afad3[_0x5968('0x50')]['id']});}return _0x1bf20e;});}})[_0x5968('0x25')](respondWithResult(_0x5bdb9b,null))['catch'](handleError(_0x5bdb9b,null));};exports[_0x5968('0x7c')]=function(_0x5bbe96,_0x393eab,_0x1cf1eb){return db['FaxQueue'][_0x5968('0x4b')]({'where':{'id':_0x5bbe96[_0x5968('0x50')]['id']}})[_0x5968('0x25')](handleEntityNotFound(_0x393eab,null))['then'](function(_0x1d46ab){if(_0x1d46ab){return _0x1d46ab['removeAgents'](_0x5bbe96[_0x5968('0x35')][_0x5968('0x6c')])[_0x5968('0x25')](function(){if(_[_0x5968('0x82')](_0x5bbe96[_0x5968('0x35')]['ids'])){for(var _0x4b754a=0x0;_0x4b754a<_0x5bbe96[_0x5968('0x35')]['ids'][_0x5968('0x38')];_0x4b754a+=0x1){socket[_0x5968('0x7d')](_0x5968('0x7e'),{'UserId':Number(_0x5bbe96['query'][_0x5968('0x6c')][_0x4b754a]),'FaxQueueId':Number(_0x5bbe96[_0x5968('0x50')]['id'])});}}else{socket['emit'](_0x5968('0x7e'),{'UserId':Number(_0x5bbe96[_0x5968('0x35')][_0x5968('0x6c')]),'FaxQueueId':Number(_0x5bbe96[_0x5968('0x50')]['id'])});}});}})[_0x5968('0x25')](respondWithStatusCode(_0x393eab,null))[_0x5968('0x48')](handleError(_0x393eab,null));};exports[_0x5968('0x83')]=function(_0x5a675a,_0xe0ab8d,_0x2fa722){var _0x4fa908={};var _0x5b306a={};var _0x4d476b;var _0x162eaa;return db[_0x5968('0x2f')]['findOne']({'where':{'id':_0x5a675a['params']['id']}})['then'](handleEntityNotFound(_0xe0ab8d,null))[_0x5968('0x25')](function(_0x4704a3){if(_0x4704a3){_0x4d476b=_0x4704a3;_0x5b306a['model']=_[_0x5968('0x32')](db[_0x5968('0x63')]['rawAttributes']);_0x5b306a['query']=_[_0x5968('0x32')](_0x5a675a[_0x5968('0x35')]);_0x5b306a[_0x5968('0x33')]=_[_0x5968('0x34')](_0x5b306a[_0x5968('0x31')],_0x5b306a[_0x5968('0x35')]);_0x4fa908[_0x5968('0x36')]=_['intersection'](_0x5b306a[_0x5968('0x31')],qs[_0x5968('0x37')](_0x5a675a[_0x5968('0x35')][_0x5968('0x37')]));_0x4fa908[_0x5968('0x36')]=_0x4fa908[_0x5968('0x36')]['length']?_0x4fa908[_0x5968('0x36')]:_0x5b306a[_0x5968('0x31')];_0x4fa908[_0x5968('0x53')]=qs[_0x5968('0x3b')](_0x5a675a['query'][_0x5968('0x3b')]);_0x4fa908[_0x5968('0x3c')]=qs['filters'](_[_0x5968('0x3d')](_0x5a675a[_0x5968('0x35')],_0x5b306a[_0x5968('0x33')]));if(_0x5a675a[_0x5968('0x35')][_0x5968('0x3e')]){_0x4fa908[_0x5968('0x3c')]=_['merge'](_0x4fa908[_0x5968('0x3c')],{'$or':_[_0x5968('0x55')](_0x4fa908[_0x5968('0x36')],function(_0x415b4c){var _0x41f6db={};_0x41f6db[_0x415b4c]={'$like':'%'+_0x5a675a[_0x5968('0x35')][_0x5968('0x3e')]+'%'};return _0x41f6db;})});}_0x4fa908=_[_0x5968('0x3f')]({},_0x4fa908,_0x5a675a['options']);return _0x4d476b[_0x5968('0x83')](_0x4fa908);}})['then'](function(_0x2ee6e1){if(_0x2ee6e1){_0x162eaa=_0x2ee6e1[_0x5968('0x38')];if(!_0x5a675a[_0x5968('0x35')][_0x5968('0x39')]('nolimit')){_0x4fa908['limit']=qs['limit'](_0x5a675a[_0x5968('0x35')][_0x5968('0x1e')]);_0x4fa908[_0x5968('0x1d')]=qs[_0x5968('0x1d')](_0x5a675a[_0x5968('0x35')][_0x5968('0x1d')]);}return _0x4d476b[_0x5968('0x83')](_0x4fa908);}})[_0x5968('0x25')](function(_0x174caf){if(_0x174caf){return _0x174caf?{'count':_0x162eaa,'rows':_0x174caf}:null;}})['then'](respondWithResult(_0xe0ab8d,null))[_0x5968('0x48')](handleError(_0xe0ab8d,null));};
\ No newline at end of file
index 86f3d20..79fea97 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfe57=['events','../../mysqldb','save','update','remove','emit','hasOwnProperty','hook','exports'];(function(_0x52b929,_0x16e3b3){var _0x343503=function(_0x14c099){while(--_0x14c099){_0x52b929['push'](_0x52b929['shift']());}};_0x343503(++_0x16e3b3);}(_0xfe57,0x195));var _0x7fe5=function(_0xa8883,_0x1f107f){_0xa8883=_0xa8883-0x0;var _0x479426=_0xfe57[_0xa8883];return _0x479426;};'use strict';var EventEmitter=require(_0x7fe5('0x0'));var FaxQueue=require(_0x7fe5('0x1'))['db']['FaxQueue'];var FaxQueueEvents=new EventEmitter();FaxQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x7fe5('0x2'),'afterUpdate':_0x7fe5('0x3'),'afterDestroy':_0x7fe5('0x4')};function emitEvent(_0x421809){return function(_0x89ad5f,_0x1254d2,_0x41f5f4){FaxQueueEvents[_0x7fe5('0x5')](_0x421809+':'+_0x89ad5f['id'],_0x89ad5f);FaxQueueEvents[_0x7fe5('0x5')](_0x421809,_0x89ad5f);_0x41f5f4(null);};}for(var e in events){if(events[_0x7fe5('0x6')](e)){var event=events[e];FaxQueue[_0x7fe5('0x7')](e,emitEvent(event));}}module[_0x7fe5('0x8')]=FaxQueueEvents;
\ No newline at end of file
+var _0x6324=['hasOwnProperty','hook','events','../../mysqldb','FaxQueue','setMaxListeners','update','emit'];(function(_0x2565ee,_0x289dc3){var _0x44f1c0=function(_0xa5ac78){while(--_0xa5ac78){_0x2565ee['push'](_0x2565ee['shift']());}};_0x44f1c0(++_0x289dc3);}(_0x6324,0x142));var _0x4632=function(_0x1db7fb,_0x54396b){_0x1db7fb=_0x1db7fb-0x0;var _0x5dd4c7=_0x6324[_0x1db7fb];return _0x5dd4c7;};'use strict';var EventEmitter=require(_0x4632('0x0'));var FaxQueue=require(_0x4632('0x1'))['db'][_0x4632('0x2')];var FaxQueueEvents=new EventEmitter();FaxQueueEvents[_0x4632('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x4632('0x4'),'afterDestroy':'remove'};function emitEvent(_0x3bea40){return function(_0x54c200,_0x13b218,_0x592e39){FaxQueueEvents[_0x4632('0x5')](_0x3bea40+':'+_0x54c200['id'],_0x54c200);FaxQueueEvents[_0x4632('0x5')](_0x3bea40,_0x54c200);_0x592e39(null);};}for(var e in events){if(events[_0x4632('0x6')](e)){var event=events[e];FaxQueue[_0x4632('0x7')](e,emitEvent(event));}}module['exports']=FaxQueueEvents;
\ No newline at end of file
index b1ba944..153b3e6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f2f=['bluebird','request-promise','path','./faxQueue.attributes','exports','define','FaxQueue','lodash','util','../../config/logger','api','moment'];(function(_0xd541d2,_0xe6cd11){var _0x140e98=function(_0x2b3640){while(--_0x2b3640){_0xd541d2['push'](_0xd541d2['shift']());}};_0x140e98(++_0xe6cd11);}(_0x5f2f,0x73));var _0xf5f2=function(_0xb3910c,_0x1f9b14){_0xb3910c=_0xb3910c-0x0;var _0x1092c8=_0x5f2f[_0xb3910c];return _0x1092c8;};'use strict';var _=require(_0xf5f2('0x0'));var util=require(_0xf5f2('0x1'));var logger=require(_0xf5f2('0x2'))(_0xf5f2('0x3'));var moment=require(_0xf5f2('0x4'));var BPromise=require(_0xf5f2('0x5'));var rp=require(_0xf5f2('0x6'));var fs=require('fs');var path=require(_0xf5f2('0x7'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0xf5f2('0x8'));module[_0xf5f2('0x9')]=function(_0xad7f65,_0x3eebf6){return _0xad7f65[_0xf5f2('0xa')](_0xf5f2('0xb'),attributes,{'tableName':'fax_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x5f2f=['bluebird','request-promise','path','./faxQueue.attributes','exports','define','FaxQueue','lodash','util','../../config/logger','api','moment'];(function(_0x411d7e,_0x49ddac){var _0x5ae79a=function(_0x33c2b6){while(--_0x33c2b6){_0x411d7e['push'](_0x411d7e['shift']());}};_0x5ae79a(++_0x49ddac);}(_0x5f2f,0x73));var _0xf5f2=function(_0xd77b35,_0x5d0d78){_0xd77b35=_0xd77b35-0x0;var _0x27f5e4=_0x5f2f[_0xd77b35];return _0x27f5e4;};'use strict';var _=require(_0xf5f2('0x0'));var util=require(_0xf5f2('0x1'));var logger=require(_0xf5f2('0x2'))(_0xf5f2('0x3'));var moment=require(_0xf5f2('0x4'));var BPromise=require(_0xf5f2('0x5'));var rp=require(_0xf5f2('0x6'));var fs=require('fs');var path=require(_0xf5f2('0x7'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0xf5f2('0x8'));module[_0xf5f2('0x9')]=function(_0xad7f65,_0x3eebf6){return _0xad7f65[_0xf5f2('0xa')](_0xf5f2('0xb'),attributes,{'tableName':'fax_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index af530b2..5865199 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdc6e=['localhost','request','info','FaxQueue,\x20%s,\x20%s','debug','FaxQueue,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','FaxQueue','findAll','options','raw','where','attributes','include','map','model','then','GetFaxQueue','ShowFaxQueue','find','lodash','moment','bluebird','randomstring','../../config/utils','rpc','jayson/promise','client','http','redis','defaults'];(function(_0x3af7d4,_0x2f817b){var _0x4c8da4=function(_0x1b4c4f){while(--_0x1b4c4f){_0x3af7d4['push'](_0x3af7d4['shift']());}};_0x4c8da4(++_0x2f817b);}(_0xdc6e,0x1d6));var _0xedc6=function(_0x59820d,_0xc8e6ba){_0x59820d=_0x59820d-0x0;var _0x3c72b1=_0xdc6e[_0x59820d];return _0x3c72b1;};'use strict';var _=require(_0xedc6('0x0'));var util=require('util');var moment=require(_0xedc6('0x1'));var BPromise=require(_0xedc6('0x2'));var rs=require(_0xedc6('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xedc6('0x4'));var logger=require('../../config/logger')(_0xedc6('0x5'));var config=require('../../config/environment');var jayson=require(_0xedc6('0x6'));var client=jayson[_0xedc6('0x7')][_0xedc6('0x8')]({'port':0x232a});config[_0xedc6('0x9')]=_[_0xedc6('0xa')](config['redis'],{'host':_0xedc6('0xb'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xedc6('0x9')]));require('./faxQueue.socket')['register'](socket);function respondWithRpcPromise(_0x7e846,_0x4a721a,_0x351bdd){return new BPromise(function(_0x428f96,_0x1f5796){return client[_0xedc6('0xc')](_0x7e846,_0x351bdd)['then'](function(_0x66389){logger[_0xedc6('0xd')](_0xedc6('0xe'),_0x4a721a,'request\x20sent');logger[_0xedc6('0xf')](_0xedc6('0x10'),_0x4a721a,_0xedc6('0x11'),JSON[_0xedc6('0x12')](_0x66389));if(_0x66389[_0xedc6('0x13')]){if(_0x66389[_0xedc6('0x13')][_0xedc6('0x14')]===0x1f4){logger[_0xedc6('0x13')](_0xedc6('0xe'),_0x4a721a,_0x66389[_0xedc6('0x13')][_0xedc6('0x15')]);return _0x1f5796(_0x66389[_0xedc6('0x13')][_0xedc6('0x15')]);}logger[_0xedc6('0x13')]('FaxQueue,\x20%s,\x20%s',_0x4a721a,_0x66389['error'][_0xedc6('0x15')]);return _0x428f96(_0x66389[_0xedc6('0x13')][_0xedc6('0x15')]);}else{logger[_0xedc6('0xd')]('FaxQueue,\x20%s,\x20%s',_0x4a721a,'request\x20sent');_0x428f96(_0x66389[_0xedc6('0x16')][_0xedc6('0x15')]);}})[_0xedc6('0x17')](function(_0x4bbda7){logger[_0xedc6('0x13')]('FaxQueue,\x20%s,\x20%s',_0x4a721a,_0x4bbda7);_0x1f5796(_0x4bbda7);});});}exports['GetFaxQueue']=function(_0x3ed539){var _0x486b9d=this;return new Promise(function(_0x3e2b90,_0x4c3f63){return db[_0xedc6('0x18')][_0xedc6('0x19')]({'raw':_0x3ed539[_0xedc6('0x1a')]?_0x3ed539[_0xedc6('0x1a')][_0xedc6('0x1b')]===undefined?!![]:![]:!![],'where':_0x3ed539[_0xedc6('0x1a')]?_0x3ed539[_0xedc6('0x1a')][_0xedc6('0x1c')]||null:null,'attributes':_0x3ed539[_0xedc6('0x1a')]?_0x3ed539['options'][_0xedc6('0x1d')]||null:null,'limit':_0x3ed539[_0xedc6('0x1a')]?_0x3ed539[_0xedc6('0x1a')]['limit']||null:null,'include':_0x3ed539[_0xedc6('0x1a')]?_0x3ed539[_0xedc6('0x1a')][_0xedc6('0x1e')]?_[_0xedc6('0x1f')](_0x3ed539[_0xedc6('0x1a')][_0xedc6('0x1e')],function(_0x28c521){return{'model':db[_0x28c521[_0xedc6('0x20')]],'as':_0x28c521['as'],'attributes':_0x28c521[_0xedc6('0x1d')],'include':_0x28c521['include']?_[_0xedc6('0x1f')](_0x28c521['include'],function(_0x9a3e63){return{'model':db[_0x9a3e63['model']],'as':_0x9a3e63['as'],'attributes':_0x9a3e63[_0xedc6('0x1d')],'include':_0x9a3e63[_0xedc6('0x1e')]?_[_0xedc6('0x1f')](_0x9a3e63[_0xedc6('0x1e')],function(_0x5cd92a){return{'model':db[_0x5cd92a['model']],'as':_0x5cd92a['as'],'attributes':_0x5cd92a[_0xedc6('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xedc6('0x21')](function(_0x3e1c7d){logger[_0xedc6('0xd')](_0xedc6('0x22'),_0x3ed539);logger[_0xedc6('0xf')](_0xedc6('0x22'),_0x3ed539,JSON[_0xedc6('0x12')](_0x3e1c7d));_0x3e2b90(_0x3e1c7d);})[_0xedc6('0x17')](function(_0x1c56e1){logger['error'](_0xedc6('0x22'),_0x1c56e1[_0xedc6('0x15')],_0x3ed539);_0x4c3f63(_0x486b9d[_0xedc6('0x13')](0x1f4,_0x1c56e1['message']));});});};exports[_0xedc6('0x23')]=function(_0x2783f7){var _0x1bcfdb=this;return new Promise(function(_0x47a464,_0x4fcaa9){return db[_0xedc6('0x18')][_0xedc6('0x24')]({'raw':_0x2783f7[_0xedc6('0x1a')]?_0x2783f7[_0xedc6('0x1a')][_0xedc6('0x1b')]===undefined?!![]:![]:!![],'where':_0x2783f7[_0xedc6('0x1a')]?_0x2783f7[_0xedc6('0x1a')][_0xedc6('0x1c')]||null:null,'attributes':_0x2783f7[_0xedc6('0x1a')]?_0x2783f7['options'][_0xedc6('0x1d')]||null:null,'include':_0x2783f7['options']?_0x2783f7['options'][_0xedc6('0x1e')]?_[_0xedc6('0x1f')](_0x2783f7[_0xedc6('0x1a')][_0xedc6('0x1e')],function(_0x512697){return{'model':db[_0x512697[_0xedc6('0x20')]],'as':_0x512697['as'],'attributes':_0x512697[_0xedc6('0x1d')],'include':_0x512697[_0xedc6('0x1e')]?_[_0xedc6('0x1f')](_0x512697[_0xedc6('0x1e')],function(_0xb466c7){return{'model':db[_0xb466c7['model']],'as':_0xb466c7['as'],'attributes':_0xb466c7['attributes'],'include':_0xb466c7[_0xedc6('0x1e')]?_['map'](_0xb466c7[_0xedc6('0x1e')],function(_0x5f34a8){return{'model':db[_0x5f34a8[_0xedc6('0x20')]],'as':_0x5f34a8['as'],'attributes':_0x5f34a8[_0xedc6('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xedc6('0x21')](function(_0x563499){logger[_0xedc6('0xd')](_0xedc6('0x23'),_0x2783f7);logger[_0xedc6('0xf')]('ShowFaxQueue',_0x2783f7,JSON[_0xedc6('0x12')](_0x563499));_0x47a464(_0x563499);})[_0xedc6('0x17')](function(_0x1783bd){logger[_0xedc6('0x13')]('ShowFaxQueue',_0x1783bd[_0xedc6('0x15')],_0x2783f7);_0x4fcaa9(_0x1bcfdb['error'](0x1f4,_0x1783bd[_0xedc6('0x15')]));});});};
\ No newline at end of file
+var _0xb949=['catch','GetFaxQueue','FaxQueue','findAll','options','raw','where','attributes','limit','include','map','model','then','stringify','ShowFaxQueue','find','util','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','socket.io-emitter','./faxQueue.socket','register','info','FaxQueue,\x20%s,\x20%s','request\x20sent','debug','FaxQueue,\x20%s,\x20%s,\x20%s','error','message','result'];(function(_0x909dfe,_0x36e38a){var _0x5cb58f=function(_0x3f3000){while(--_0x3f3000){_0x909dfe['push'](_0x909dfe['shift']());}};_0x5cb58f(++_0x36e38a);}(_0xb949,0xfa));var _0x9b94=function(_0x5b0716,_0x4a8bc8){_0x5b0716=_0x5b0716-0x0;var _0x2815c2=_0xb949[_0x5b0716];return _0x2815c2;};'use strict';var _=require('lodash');var util=require(_0x9b94('0x0'));var moment=require('moment');var BPromise=require(_0x9b94('0x1'));var rs=require(_0x9b94('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x9b94('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x9b94('0x4'))(_0x9b94('0x5'));var config=require(_0x9b94('0x6'));var jayson=require(_0x9b94('0x7'));var client=jayson[_0x9b94('0x8')][_0x9b94('0x9')]({'port':0x232a});config[_0x9b94('0xa')]=_[_0x9b94('0xb')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0x9b94('0xc'))(new Redis(config[_0x9b94('0xa')]));require(_0x9b94('0xd'))[_0x9b94('0xe')](socket);function respondWithRpcPromise(_0x34461e,_0x773d8a,_0x1d58ad){return new BPromise(function(_0x953e9d,_0x3ebd65){return client['request'](_0x34461e,_0x1d58ad)['then'](function(_0x50caa8){logger[_0x9b94('0xf')](_0x9b94('0x10'),_0x773d8a,_0x9b94('0x11'));logger[_0x9b94('0x12')](_0x9b94('0x13'),_0x773d8a,_0x9b94('0x11'),JSON['stringify'](_0x50caa8));if(_0x50caa8[_0x9b94('0x14')]){if(_0x50caa8[_0x9b94('0x14')]['code']===0x1f4){logger[_0x9b94('0x14')](_0x9b94('0x10'),_0x773d8a,_0x50caa8[_0x9b94('0x14')][_0x9b94('0x15')]);return _0x3ebd65(_0x50caa8[_0x9b94('0x14')]['message']);}logger[_0x9b94('0x14')]('FaxQueue,\x20%s,\x20%s',_0x773d8a,_0x50caa8[_0x9b94('0x14')]['message']);return _0x953e9d(_0x50caa8[_0x9b94('0x14')]['message']);}else{logger[_0x9b94('0xf')](_0x9b94('0x10'),_0x773d8a,_0x9b94('0x11'));_0x953e9d(_0x50caa8[_0x9b94('0x16')][_0x9b94('0x15')]);}})[_0x9b94('0x17')](function(_0xbbbe8e){logger['error'](_0x9b94('0x10'),_0x773d8a,_0xbbbe8e);_0x3ebd65(_0xbbbe8e);});});}exports[_0x9b94('0x18')]=function(_0x3e9291){var _0x49e5d0=this;return new Promise(function(_0x1ad4e5,_0x5b5533){return db[_0x9b94('0x19')][_0x9b94('0x1a')]({'raw':_0x3e9291['options']?_0x3e9291[_0x9b94('0x1b')][_0x9b94('0x1c')]===undefined?!![]:![]:!![],'where':_0x3e9291[_0x9b94('0x1b')]?_0x3e9291[_0x9b94('0x1b')][_0x9b94('0x1d')]||null:null,'attributes':_0x3e9291[_0x9b94('0x1b')]?_0x3e9291[_0x9b94('0x1b')][_0x9b94('0x1e')]||null:null,'limit':_0x3e9291[_0x9b94('0x1b')]?_0x3e9291[_0x9b94('0x1b')][_0x9b94('0x1f')]||null:null,'include':_0x3e9291['options']?_0x3e9291[_0x9b94('0x1b')][_0x9b94('0x20')]?_[_0x9b94('0x21')](_0x3e9291[_0x9b94('0x1b')]['include'],function(_0xc18445){return{'model':db[_0xc18445[_0x9b94('0x22')]],'as':_0xc18445['as'],'attributes':_0xc18445[_0x9b94('0x1e')],'include':_0xc18445[_0x9b94('0x20')]?_[_0x9b94('0x21')](_0xc18445[_0x9b94('0x20')],function(_0x246924){return{'model':db[_0x246924[_0x9b94('0x22')]],'as':_0x246924['as'],'attributes':_0x246924['attributes'],'include':_0x246924['include']?_[_0x9b94('0x21')](_0x246924['include'],function(_0x222d5d){return{'model':db[_0x222d5d[_0x9b94('0x22')]],'as':_0x222d5d['as'],'attributes':_0x222d5d[_0x9b94('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x9b94('0x23')](function(_0x3a3b69){logger['info'](_0x9b94('0x18'),_0x3e9291);logger[_0x9b94('0x12')](_0x9b94('0x18'),_0x3e9291,JSON[_0x9b94('0x24')](_0x3a3b69));_0x1ad4e5(_0x3a3b69);})[_0x9b94('0x17')](function(_0x24d040){logger[_0x9b94('0x14')](_0x9b94('0x18'),_0x24d040[_0x9b94('0x15')],_0x3e9291);_0x5b5533(_0x49e5d0[_0x9b94('0x14')](0x1f4,_0x24d040['message']));});});};exports[_0x9b94('0x25')]=function(_0x1640f6){var _0x126561=this;return new Promise(function(_0x2eb3bc,_0x20fd37){return db[_0x9b94('0x19')][_0x9b94('0x26')]({'raw':_0x1640f6[_0x9b94('0x1b')]?_0x1640f6[_0x9b94('0x1b')]['raw']===undefined?!![]:![]:!![],'where':_0x1640f6[_0x9b94('0x1b')]?_0x1640f6[_0x9b94('0x1b')][_0x9b94('0x1d')]||null:null,'attributes':_0x1640f6[_0x9b94('0x1b')]?_0x1640f6[_0x9b94('0x1b')][_0x9b94('0x1e')]||null:null,'include':_0x1640f6[_0x9b94('0x1b')]?_0x1640f6[_0x9b94('0x1b')][_0x9b94('0x20')]?_['map'](_0x1640f6[_0x9b94('0x1b')][_0x9b94('0x20')],function(_0x4b039e){return{'model':db[_0x4b039e[_0x9b94('0x22')]],'as':_0x4b039e['as'],'attributes':_0x4b039e[_0x9b94('0x1e')],'include':_0x4b039e['include']?_[_0x9b94('0x21')](_0x4b039e[_0x9b94('0x20')],function(_0x4ac6bc){return{'model':db[_0x4ac6bc[_0x9b94('0x22')]],'as':_0x4ac6bc['as'],'attributes':_0x4ac6bc[_0x9b94('0x1e')],'include':_0x4ac6bc[_0x9b94('0x20')]?_[_0x9b94('0x21')](_0x4ac6bc['include'],function(_0x14a2e7){return{'model':db[_0x14a2e7['model']],'as':_0x14a2e7['as'],'attributes':_0x14a2e7[_0x9b94('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x9b94('0x23')](function(_0x515e50){logger[_0x9b94('0xf')](_0x9b94('0x25'),_0x1640f6);logger[_0x9b94('0x12')](_0x9b94('0x25'),_0x1640f6,JSON[_0x9b94('0x24')](_0x515e50));_0x2eb3bc(_0x515e50);})[_0x9b94('0x17')](function(_0x1d8a2c){logger[_0x9b94('0x14')]('ShowFaxQueue',_0x1d8a2c['message'],_0x1640f6);_0x20fd37(_0x126561[_0x9b94('0x14')](0x1f4,_0x1d8a2c[_0x9b94('0x15')]));});});};
\ No newline at end of file
index c4ee5f7..8d8649e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x33f0=['./faxQueue.events','remove','update','emit','removeListener','register','length','faxQueue:'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x33f0,0x1a0));var _0x033f=function(_0x4ee737,_0x2b2bbf){_0x4ee737=_0x4ee737-0x0;var _0x5ed19b=_0x33f0[_0x4ee737];return _0x5ed19b;};'use strict';var FaxQueueEvents=require(_0x033f('0x0'));var events=['save',_0x033f('0x1'),_0x033f('0x2')];function createListener(_0x4d1298,_0x1c6656){return function(_0x208aba){_0x1c6656[_0x033f('0x3')](_0x4d1298,_0x208aba);};}function removeListener(_0x37f115,_0x1266d1){return function(){FaxQueueEvents[_0x033f('0x4')](_0x37f115,_0x1266d1);};}exports[_0x033f('0x5')]=function(_0x117f0f){for(var _0x2b60f6=0x0,_0x2b8e39=events[_0x033f('0x6')];_0x2b60f6<_0x2b8e39;_0x2b60f6++){var _0x2f8d0c=events[_0x2b60f6];var _0x6e6464=createListener(_0x033f('0x7')+_0x2f8d0c,_0x117f0f);FaxQueueEvents['on'](_0x2f8d0c,_0x6e6464);}};
\ No newline at end of file
+var _0x666f=['update','emit','removeListener','register','faxQueue:','./faxQueue.events','save','remove'];(function(_0x27aaf2,_0x2fa2fd){var _0x571d2e=function(_0x30c0ba){while(--_0x30c0ba){_0x27aaf2['push'](_0x27aaf2['shift']());}};_0x571d2e(++_0x2fa2fd);}(_0x666f,0xcd));var _0xf666=function(_0x46698a,_0x8de1e4){_0x46698a=_0x46698a-0x0;var _0x356db0=_0x666f[_0x46698a];return _0x356db0;};'use strict';var FaxQueueEvents=require(_0xf666('0x0'));var events=[_0xf666('0x1'),_0xf666('0x2'),_0xf666('0x3')];function createListener(_0x47c020,_0xc4e4bb){return function(_0x4c2cb6){_0xc4e4bb[_0xf666('0x4')](_0x47c020,_0x4c2cb6);};}function removeListener(_0x58a9ec,_0x5ba812){return function(){FaxQueueEvents[_0xf666('0x5')](_0x58a9ec,_0x5ba812);};}exports[_0xf666('0x6')]=function(_0x588c80){for(var _0x5977f4=0x0,_0xf7130d=events['length'];_0x5977f4<_0xf7130d;_0x5977f4++){var _0x56e0d1=events[_0x5977f4];var _0x1096c0=createListener(_0xf666('0x7')+_0x56e0d1,_0x588c80);FaxQueueEvents['on'](_0x56e0d1,_0x1096c0);}};
\ No newline at end of file
index 7413e5b..a6a8507 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3b07=['/:id','show','/:id/members','getMembers','getTeams','/:id/users','getAgents','post','create','/:id/teams','addTeams','addAgents','removeAgents','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxQueue.controller','get','isAuthenticated','describe'];(function(_0x4e1aad,_0x4cb031){var _0x1a1abd=function(_0x1d111a){while(--_0x1d111a){_0x4e1aad['push'](_0x4e1aad['shift']());}};_0x1a1abd(++_0x4cb031);}(_0x3b07,0x120));var _0x73b0=function(_0x1c7538,_0x3e0842){_0x1c7538=_0x1c7538-0x0;var _0x2bea3e=_0x3b07[_0x1c7538];return _0x2bea3e;};'use strict';var multer=require('multer');var util=require(_0x73b0('0x0'));var path=require(_0x73b0('0x1'));var timeout=require(_0x73b0('0x2'));var express=require(_0x73b0('0x3'));var router=express[_0x73b0('0x4')]();var auth=require(_0x73b0('0x5'));var interaction=require(_0x73b0('0x6'));var config=require(_0x73b0('0x7'));var controller=require(_0x73b0('0x8'));router[_0x73b0('0x9')]('/',auth[_0x73b0('0xa')](),controller['index']);router[_0x73b0('0x9')]('/describe',auth[_0x73b0('0xa')](),controller[_0x73b0('0xb')]);router[_0x73b0('0x9')](_0x73b0('0xc'),auth[_0x73b0('0xa')](),controller[_0x73b0('0xd')]);router[_0x73b0('0x9')](_0x73b0('0xe'),auth['isAuthenticated'](),controller[_0x73b0('0xf')]);router['get']('/:id/teams',auth[_0x73b0('0xa')](),controller[_0x73b0('0x10')]);router[_0x73b0('0x9')](_0x73b0('0x11'),auth['isAuthenticated'](),controller[_0x73b0('0x12')]);router[_0x73b0('0x13')]('/',auth[_0x73b0('0xa')](),controller[_0x73b0('0x14')]);router[_0x73b0('0x13')](_0x73b0('0x15'),auth[_0x73b0('0xa')](),controller[_0x73b0('0x16')]);router[_0x73b0('0x13')](_0x73b0('0x11'),auth[_0x73b0('0xa')](),controller[_0x73b0('0x17')]);router['put'](_0x73b0('0xc'),auth['isAuthenticated'](),controller['update']);router['delete']('/:id',auth[_0x73b0('0xa')](),controller['destroy']);router['delete'](_0x73b0('0x15'),auth[_0x73b0('0xa')](),controller['removeTeams']);router['delete'](_0x73b0('0x11'),auth[_0x73b0('0xa')](),controller[_0x73b0('0x18')]);module['exports']=router;
\ No newline at end of file
+var _0xbebc=['describe','/:id','show','/:id/teams','getTeams','/:id/users','getAgents','post','create','addTeams','addAgents','put','update','delete','destroy','removeTeams','removeAgents','multer','connect-timeout','Router','../../components/interaction/service','../../config/environment','./faxQueue.controller','isAuthenticated','index','get','/describe'];(function(_0x368bba,_0x1f625b){var _0x409f8f=function(_0x463373){while(--_0x463373){_0x368bba['push'](_0x368bba['shift']());}};_0x409f8f(++_0x1f625b);}(_0xbebc,0xe9));var _0xcbeb=function(_0xb79918,_0x2614f1){_0xb79918=_0xb79918-0x0;var _0x161b08=_0xbebc[_0xb79918];return _0x161b08;};'use strict';var multer=require(_0xcbeb('0x0'));var util=require('util');var path=require('path');var timeout=require(_0xcbeb('0x1'));var express=require('express');var router=express[_0xcbeb('0x2')]();var auth=require('../../components/auth/service');var interaction=require(_0xcbeb('0x3'));var config=require(_0xcbeb('0x4'));var controller=require(_0xcbeb('0x5'));router['get']('/',auth[_0xcbeb('0x6')](),controller[_0xcbeb('0x7')]);router[_0xcbeb('0x8')](_0xcbeb('0x9'),auth[_0xcbeb('0x6')](),controller[_0xcbeb('0xa')]);router['get'](_0xcbeb('0xb'),auth[_0xcbeb('0x6')](),controller[_0xcbeb('0xc')]);router[_0xcbeb('0x8')]('/:id/members',auth[_0xcbeb('0x6')](),controller['getMembers']);router['get'](_0xcbeb('0xd'),auth['isAuthenticated'](),controller[_0xcbeb('0xe')]);router['get'](_0xcbeb('0xf'),auth[_0xcbeb('0x6')](),controller[_0xcbeb('0x10')]);router[_0xcbeb('0x11')]('/',auth[_0xcbeb('0x6')](),controller[_0xcbeb('0x12')]);router[_0xcbeb('0x11')](_0xcbeb('0xd'),auth[_0xcbeb('0x6')](),controller[_0xcbeb('0x13')]);router[_0xcbeb('0x11')](_0xcbeb('0xf'),auth[_0xcbeb('0x6')](),controller[_0xcbeb('0x14')]);router[_0xcbeb('0x15')]('/:id',auth[_0xcbeb('0x6')](),controller[_0xcbeb('0x16')]);router[_0xcbeb('0x17')](_0xcbeb('0xb'),auth[_0xcbeb('0x6')](),controller[_0xcbeb('0x18')]);router[_0xcbeb('0x17')]('/:id/teams',auth[_0xcbeb('0x6')](),controller[_0xcbeb('0x19')]);router[_0xcbeb('0x17')]('/:id/users',auth[_0xcbeb('0x6')](),controller[_0xcbeb('0x1a')]);module['exports']=router;
\ No newline at end of file
index 81f02f3..630d3d1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb295=['STRING','DATE','moment','exports'];(function(_0x131585,_0x1abd33){var _0x1fcca2=function(_0x8f165b){while(--_0x8f165b){_0x131585['push'](_0x131585['shift']());}};_0x1fcca2(++_0x1abd33);}(_0xb295,0x172));var _0x5b29=function(_0x27af45,_0x1b57aa){_0x27af45=_0x27af45-0x0;var _0x18df21=_0xb295[_0x27af45];return _0x18df21;};'use strict';var moment=require(_0x5b29('0x0'));var Sequelize=require('sequelize');module[_0x5b29('0x1')]={'uniqueid':{'type':Sequelize[_0x5b29('0x2')],'allowNull':![]},'from':{'type':Sequelize[_0x5b29('0x2')]},'joinAt':{'type':Sequelize[_0x5b29('0x3')]},'leaveAt':{'type':Sequelize[_0x5b29('0x3')]},'acceptAt':{'type':Sequelize['DATE']},'exitAt':{'type':Sequelize[_0x5b29('0x3')]},'reason':{'type':Sequelize[_0x5b29('0x2')]}};
\ No newline at end of file
+var _0x9ec1=['STRING','DATE','sequelize','exports'];(function(_0x35885a,_0x42fed7){var _0xe86249=function(_0x98edb3){while(--_0x98edb3){_0x35885a['push'](_0x35885a['shift']());}};_0xe86249(++_0x42fed7);}(_0x9ec1,0x14a));var _0x19ec=function(_0x14be12,_0x6f0e11){_0x14be12=_0x14be12-0x0;var _0x30baab=_0x9ec1[_0x14be12];return _0x30baab;};'use strict';var moment=require('moment');var Sequelize=require(_0x19ec('0x0'));module[_0x19ec('0x1')]={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'from':{'type':Sequelize[_0x19ec('0x2')]},'joinAt':{'type':Sequelize['DATE']},'leaveAt':{'type':Sequelize[_0x19ec('0x3')]},'acceptAt':{'type':Sequelize[_0x19ec('0x3')]},'exitAt':{'type':Sequelize['DATE']},'reason':{'type':Sequelize[_0x19ec('0x2')]}};
\ No newline at end of file
index dcea3c1..c20cdb4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a03=['eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','squel','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','then','error','stack','name','send','index','FaxQueueReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','filter','where','merge','map','type','key','VIRTUAL','field','options','includeAll','catch','show','params','find','create','body','describe','html-pdf'];(function(_0xf25001,_0xcaff40){var _0x3d593a=function(_0x15a786){while(--_0x15a786){_0xf25001['push'](_0xf25001['shift']());}};_0x3d593a(++_0xcaff40);}(_0x8a03,0x17b));var _0x38a0=function(_0x5953d5,_0x30d19c){_0x5953d5=_0x5953d5-0x0;var _0xd91698=_0x8a03[_0x5953d5];return _0xd91698;};'use strict';var pdf=require(_0x38a0('0x0'));var emlformat=require(_0x38a0('0x1'));var rimraf=require(_0x38a0('0x2'));var zipdir=require(_0x38a0('0x3'));var jsonpatch=require(_0x38a0('0x4'));var rp=require(_0x38a0('0x5'));var moment=require(_0x38a0('0x6'));var BPromise=require(_0x38a0('0x7'));var Mustache=require(_0x38a0('0x8'));var util=require(_0x38a0('0x9'));var path=require(_0x38a0('0xa'));var sox=require('sox');var csv=require(_0x38a0('0xb'));var ejs=require(_0x38a0('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0x38a0('0xd'));var crypto=require('crypto');var jsforce=require(_0x38a0('0xe'));var deskjs=require(_0x38a0('0xf'));var toCsv=require('to-csv');var querystring=require(_0x38a0('0x10'));var Papa=require('papaparse');var Redis=require(_0x38a0('0x11'));var authService=require(_0x38a0('0x12'));var qs=require(_0x38a0('0x13'));var hardwareService=require(_0x38a0('0x14'));var logger=require('../../config/logger')(_0x38a0('0x15'));var utils=require(_0x38a0('0x16'));var config=require(_0x38a0('0x17'));var db=require(_0x38a0('0x18'))['db'];function respondWithStatusCode(_0x596227,_0x56757e){_0x56757e=_0x56757e||0xcc;return function(_0x2af84f){if(_0x2af84f){return _0x596227[_0x38a0('0x19')](_0x56757e);}return _0x596227[_0x38a0('0x1a')](_0x56757e)[_0x38a0('0x1b')]();};}function respondWithResult(_0x239486,_0x4906d1){_0x4906d1=_0x4906d1||0xc8;return function(_0x1499ac){if(_0x1499ac){return _0x239486['status'](_0x4906d1)[_0x38a0('0x1c')](_0x1499ac);}};}function respondWithFilteredResult(_0x57e921,_0x1bfdbd){return function(_0x4de4f6){if(_0x4de4f6){var _0x326705=_0x4de4f6[_0x38a0('0x1d')],_0xeed3c2=_0x1bfdbd['offset'],_0x185810=_0x1bfdbd[_0x38a0('0x1e')]+_0x1bfdbd['limit'],_0x375489;if(_0x185810>=_0x326705){_0x185810=_0x326705;_0x375489=0xc8;}else{_0x375489=0xce;}_0x57e921[_0x38a0('0x1a')](_0x375489);return _0x57e921[_0x38a0('0x1f')](_0x38a0('0x20'),_0xeed3c2+'-'+_0x185810+'/'+_0x326705)['json'](_0x4de4f6);}return null;};}function patchUpdates(_0x4133b9){return function(_0x570335){try{jsonpatch[_0x38a0('0x21')](_0x570335,_0x4133b9,!![]);}catch(_0x2d7e2a){return BPromise[_0x38a0('0x22')](_0x2d7e2a);}return _0x570335[_0x38a0('0x23')]();};}function saveUpdates(_0x413325,_0x4c877f){return function(_0x5528a7){if(_0x5528a7){return _0x5528a7[_0x38a0('0x24')](_0x413325)[_0x38a0('0x25')](function(_0x20c5ff){return _0x20c5ff;});}return null;};}function removeEntity(_0x5d0163,_0x376b77){return function(_0x42f0b8){if(_0x42f0b8){return _0x42f0b8['destroy']()[_0x38a0('0x25')](function(){_0x5d0163[_0x38a0('0x1a')](0xcc)[_0x38a0('0x1b')]();});}};}function handleEntityNotFound(_0x3ce4ae,_0x306519){return function(_0x3f5bcb){if(!_0x3f5bcb){_0x3ce4ae['sendStatus'](0x194);}return _0x3f5bcb;};}function handleError(_0x133a4e,_0x2e2650){_0x2e2650=_0x2e2650||0x1f4;return function(_0x1fea89){logger[_0x38a0('0x26')](_0x1fea89[_0x38a0('0x27')]);if(_0x1fea89[_0x38a0('0x28')]){delete _0x1fea89[_0x38a0('0x28')];}_0x133a4e[_0x38a0('0x1a')](_0x2e2650)[_0x38a0('0x29')](_0x1fea89);};}exports[_0x38a0('0x2a')]=function(_0x5b99a4,_0xc9867d){var _0x4c7daf={},_0x2fda14={},_0x1e4f03={'count':0x0,'rows':[]};var _0x116b6f=db[_0x38a0('0x2b')][_0x38a0('0x2c')];_0x2fda14[_0x38a0('0x2d')]=_[_0x38a0('0x2e')](_0x116b6f);_0x2fda14[_0x38a0('0x2f')]=_[_0x38a0('0x2e')](_0x5b99a4[_0x38a0('0x2f')]);_0x2fda14[_0x38a0('0x30')]=_[_0x38a0('0x31')](_0x2fda14[_0x38a0('0x2d')],_0x2fda14['query']);_0x4c7daf[_0x38a0('0x32')]=_['intersection'](_0x2fda14[_0x38a0('0x2d')],qs[_0x38a0('0x33')](_0x5b99a4['query']['fields']));_0x4c7daf['attributes']=_0x4c7daf[_0x38a0('0x32')][_0x38a0('0x34')]?_0x4c7daf[_0x38a0('0x32')]:_0x2fda14[_0x38a0('0x2d')];if(!_0x5b99a4[_0x38a0('0x2f')][_0x38a0('0x35')](_0x38a0('0x36'))){_0x4c7daf[_0x38a0('0x37')]=qs[_0x38a0('0x37')](_0x5b99a4[_0x38a0('0x2f')]['limit']);_0x4c7daf[_0x38a0('0x1e')]=qs[_0x38a0('0x1e')](_0x5b99a4[_0x38a0('0x2f')][_0x38a0('0x1e')]);}_0x4c7daf[_0x38a0('0x38')]=qs[_0x38a0('0x39')](_0x5b99a4['query'][_0x38a0('0x39')]);_0x4c7daf['where']=qs[_0x38a0('0x30')](_[_0x38a0('0x3a')](_0x5b99a4['query'],_0x2fda14[_0x38a0('0x30')]));if(_0x5b99a4[_0x38a0('0x2f')][_0x38a0('0x3b')]){_0x4c7daf[_0x38a0('0x3c')]=_[_0x38a0('0x3d')](_0x4c7daf[_0x38a0('0x3c')],{'$or':_[_0x38a0('0x3e')](_0x116b6f,function(_0x1fe4b9){if(_0x1fe4b9[_0x38a0('0x3f')][_0x38a0('0x40')]!==_0x38a0('0x41')){var _0x8d280e={};_0x8d280e[_0x1fe4b9[_0x38a0('0x42')]]={'$like':'%'+_0x5b99a4[_0x38a0('0x2f')][_0x38a0('0x3b')]+'%'};return _0x8d280e;}})});}_0x4c7daf=_[_0x38a0('0x3d')]({},_0x4c7daf,_0x5b99a4[_0x38a0('0x43')]);var _0x1a67d6={'where':_0x4c7daf[_0x38a0('0x3c')]};return db[_0x38a0('0x2b')]['count'](_0x1a67d6)['then'](function(_0x5d6df9){_0x1e4f03[_0x38a0('0x1d')]=_0x5d6df9;if(_0x5b99a4[_0x38a0('0x2f')][_0x38a0('0x44')]){_0x4c7daf['include']=[{'all':!![]}];}return db['FaxQueueReport']['findAll'](_0x4c7daf);})['then'](function(_0x5e77f8){_0x1e4f03['rows']=_0x5e77f8;return _0x1e4f03;})[_0x38a0('0x25')](respondWithFilteredResult(_0xc9867d,_0x4c7daf))[_0x38a0('0x45')](handleError(_0xc9867d,null));};exports[_0x38a0('0x46')]=function(_0x11af7d,_0x29c9a1){var _0x237088={'raw':!![],'where':{'id':_0x11af7d[_0x38a0('0x47')]['id']}},_0x5a0c37={};_0x5a0c37[_0x38a0('0x2d')]=_['keys'](db[_0x38a0('0x2b')][_0x38a0('0x2c')]);_0x5a0c37[_0x38a0('0x2f')]=_[_0x38a0('0x2e')](_0x11af7d[_0x38a0('0x2f')]);_0x5a0c37['filters']=_[_0x38a0('0x31')](_0x5a0c37[_0x38a0('0x2d')],_0x5a0c37[_0x38a0('0x2f')]);_0x237088[_0x38a0('0x32')]=_[_0x38a0('0x31')](_0x5a0c37[_0x38a0('0x2d')],qs[_0x38a0('0x33')](_0x11af7d[_0x38a0('0x2f')]['fields']));_0x237088[_0x38a0('0x32')]=_0x237088['attributes'][_0x38a0('0x34')]?_0x237088['attributes']:_0x5a0c37[_0x38a0('0x2d')];if(_0x11af7d['query'][_0x38a0('0x44')]){_0x237088['include']=[{'all':!![]}];}_0x237088=_[_0x38a0('0x3d')]({},_0x237088,_0x11af7d[_0x38a0('0x43')]);return db[_0x38a0('0x2b')][_0x38a0('0x48')](_0x237088)[_0x38a0('0x25')](handleEntityNotFound(_0x29c9a1,null))['then'](respondWithResult(_0x29c9a1,null))[_0x38a0('0x45')](handleError(_0x29c9a1,null));};exports[_0x38a0('0x49')]=function(_0x18c647,_0x48fb7c){return db[_0x38a0('0x2b')][_0x38a0('0x49')](_0x18c647[_0x38a0('0x4a')],{})[_0x38a0('0x25')](respondWithResult(_0x48fb7c,0xc9))[_0x38a0('0x45')](handleError(_0x48fb7c,null));};exports[_0x38a0('0x24')]=function(_0x26ce18,_0x2735ce){if(_0x26ce18[_0x38a0('0x4a')]['id']){delete _0x26ce18[_0x38a0('0x4a')]['id'];}return db[_0x38a0('0x2b')][_0x38a0('0x48')]({'where':{'id':_0x26ce18['params']['id']}})['then'](handleEntityNotFound(_0x2735ce,null))[_0x38a0('0x25')](saveUpdates(_0x26ce18[_0x38a0('0x4a')],null))[_0x38a0('0x25')](respondWithResult(_0x2735ce,null))[_0x38a0('0x45')](handleError(_0x2735ce,null));};exports['destroy']=function(_0xd5be7b,_0x157e64){return db[_0x38a0('0x2b')]['find']({'where':{'id':_0xd5be7b[_0x38a0('0x47')]['id']}})[_0x38a0('0x25')](handleEntityNotFound(_0x157e64,null))[_0x38a0('0x25')](removeEntity(_0x157e64,null))[_0x38a0('0x45')](handleError(_0x157e64,null));};exports[_0x38a0('0x4b')]=function(_0x3264a3,_0x5211a2){return db[_0x38a0('0x2b')][_0x38a0('0x4b')]()[_0x38a0('0x25')](respondWithResult(_0x5211a2,null))[_0x38a0('0x45')](handleError(_0x5211a2,null));};
\ No newline at end of file
+var _0x4b79=['status','count','offset','limit','set','Content-Range','json','reject','update','then','destroy','end','stack','name','send','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','sort','where','filters','filter','merge','map','key','VIRTUAL','field','options','include','FaxQueueReport','findAll','catch','show','params','includeAll','find','create','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','mustache','util','ejs','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb'];(function(_0x963a04,_0x42b440){var _0xf1bc9e=function(_0x4b3a09){while(--_0x4b3a09){_0x963a04['push'](_0x963a04['shift']());}};_0xf1bc9e(++_0x42b440);}(_0x4b79,0xad));var _0x94b7=function(_0x323c5f,_0x489e9f){_0x323c5f=_0x323c5f-0x0;var _0x296169=_0x4b79[_0x323c5f];return _0x296169;};'use strict';var pdf=require(_0x94b7('0x0'));var emlformat=require(_0x94b7('0x1'));var rimraf=require(_0x94b7('0x2'));var zipdir=require(_0x94b7('0x3'));var jsonpatch=require(_0x94b7('0x4'));var rp=require('request-promise');var moment=require(_0x94b7('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x94b7('0x6'));var util=require(_0x94b7('0x7'));var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x94b7('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x94b7('0x9'));var crypto=require('crypto');var jsforce=require(_0x94b7('0xa'));var deskjs=require(_0x94b7('0xb'));var toCsv=require('to-csv');var querystring=require(_0x94b7('0xc'));var Papa=require(_0x94b7('0xd'));var Redis=require(_0x94b7('0xe'));var authService=require(_0x94b7('0xf'));var qs=require(_0x94b7('0x10'));var hardwareService=require(_0x94b7('0x11'));var logger=require('../../config/logger')(_0x94b7('0x12'));var utils=require(_0x94b7('0x13'));var config=require(_0x94b7('0x14'));var db=require(_0x94b7('0x15'))['db'];function respondWithStatusCode(_0x49036d,_0x1c4cc9){_0x1c4cc9=_0x1c4cc9||0xcc;return function(_0x1d0a0c){if(_0x1d0a0c){return _0x49036d['sendStatus'](_0x1c4cc9);}return _0x49036d['status'](_0x1c4cc9)['end']();};}function respondWithResult(_0x152b12,_0x3d827b){_0x3d827b=_0x3d827b||0xc8;return function(_0x3b8358){if(_0x3b8358){return _0x152b12[_0x94b7('0x16')](_0x3d827b)['json'](_0x3b8358);}};}function respondWithFilteredResult(_0x506571,_0x4938cf){return function(_0x47af4e){if(_0x47af4e){var _0x4088f3=_0x47af4e[_0x94b7('0x17')],_0x10d0df=_0x4938cf[_0x94b7('0x18')],_0x2d5715=_0x4938cf[_0x94b7('0x18')]+_0x4938cf[_0x94b7('0x19')],_0x1a083c;if(_0x2d5715>=_0x4088f3){_0x2d5715=_0x4088f3;_0x1a083c=0xc8;}else{_0x1a083c=0xce;}_0x506571[_0x94b7('0x16')](_0x1a083c);return _0x506571[_0x94b7('0x1a')](_0x94b7('0x1b'),_0x10d0df+'-'+_0x2d5715+'/'+_0x4088f3)[_0x94b7('0x1c')](_0x47af4e);}return null;};}function patchUpdates(_0x621cc1){return function(_0x1a8494){try{jsonpatch['apply'](_0x1a8494,_0x621cc1,!![]);}catch(_0x2b6873){return BPromise[_0x94b7('0x1d')](_0x2b6873);}return _0x1a8494['save']();};}function saveUpdates(_0xc72153,_0x31595a){return function(_0x719148){if(_0x719148){return _0x719148[_0x94b7('0x1e')](_0xc72153)[_0x94b7('0x1f')](function(_0x5841c6){return _0x5841c6;});}return null;};}function removeEntity(_0x31de88,_0x47ebe9){return function(_0x267ad1){if(_0x267ad1){return _0x267ad1[_0x94b7('0x20')]()[_0x94b7('0x1f')](function(){_0x31de88[_0x94b7('0x16')](0xcc)[_0x94b7('0x21')]();});}};}function handleEntityNotFound(_0x35f740,_0x32d63b){return function(_0x137732){if(!_0x137732){_0x35f740['sendStatus'](0x194);}return _0x137732;};}function handleError(_0x1ac2a1,_0x299bab){_0x299bab=_0x299bab||0x1f4;return function(_0x5832a9){logger['error'](_0x5832a9[_0x94b7('0x22')]);if(_0x5832a9[_0x94b7('0x23')]){delete _0x5832a9['name'];}_0x1ac2a1['status'](_0x299bab)[_0x94b7('0x24')](_0x5832a9);};}exports['index']=function(_0x240df2,_0x2146ec){var _0xc0477e={},_0x16f9f8={},_0x122717={'count':0x0,'rows':[]};var _0x3e2276=db['FaxQueueReport']['rawAttributes'];_0x16f9f8[_0x94b7('0x25')]=_[_0x94b7('0x26')](_0x3e2276);_0x16f9f8[_0x94b7('0x27')]=_['keys'](_0x240df2[_0x94b7('0x27')]);_0x16f9f8['filters']=_[_0x94b7('0x28')](_0x16f9f8[_0x94b7('0x25')],_0x16f9f8[_0x94b7('0x27')]);_0xc0477e[_0x94b7('0x29')]=_[_0x94b7('0x28')](_0x16f9f8[_0x94b7('0x25')],qs[_0x94b7('0x2a')](_0x240df2[_0x94b7('0x27')][_0x94b7('0x2a')]));_0xc0477e['attributes']=_0xc0477e[_0x94b7('0x29')][_0x94b7('0x2b')]?_0xc0477e[_0x94b7('0x29')]:_0x16f9f8[_0x94b7('0x25')];if(!_0x240df2['query'][_0x94b7('0x2c')]('nolimit')){_0xc0477e[_0x94b7('0x19')]=qs[_0x94b7('0x19')](_0x240df2['query'][_0x94b7('0x19')]);_0xc0477e[_0x94b7('0x18')]=qs[_0x94b7('0x18')](_0x240df2[_0x94b7('0x27')][_0x94b7('0x18')]);}_0xc0477e['order']=qs[_0x94b7('0x2d')](_0x240df2[_0x94b7('0x27')][_0x94b7('0x2d')]);_0xc0477e[_0x94b7('0x2e')]=qs[_0x94b7('0x2f')](_['pick'](_0x240df2[_0x94b7('0x27')],_0x16f9f8[_0x94b7('0x2f')]));if(_0x240df2[_0x94b7('0x27')][_0x94b7('0x30')]){_0xc0477e['where']=_[_0x94b7('0x31')](_0xc0477e[_0x94b7('0x2e')],{'$or':_[_0x94b7('0x32')](_0x3e2276,function(_0x11f83b){if(_0x11f83b['type'][_0x94b7('0x33')]!==_0x94b7('0x34')){var _0x3cec71={};_0x3cec71[_0x11f83b[_0x94b7('0x35')]]={'$like':'%'+_0x240df2[_0x94b7('0x27')][_0x94b7('0x30')]+'%'};return _0x3cec71;}})});}_0xc0477e=_[_0x94b7('0x31')]({},_0xc0477e,_0x240df2[_0x94b7('0x36')]);var _0x49b4b3={'where':_0xc0477e[_0x94b7('0x2e')]};return db['FaxQueueReport'][_0x94b7('0x17')](_0x49b4b3)[_0x94b7('0x1f')](function(_0x36aa38){_0x122717['count']=_0x36aa38;if(_0x240df2[_0x94b7('0x27')]['includeAll']){_0xc0477e[_0x94b7('0x37')]=[{'all':!![]}];}return db[_0x94b7('0x38')][_0x94b7('0x39')](_0xc0477e);})[_0x94b7('0x1f')](function(_0x4ef295){_0x122717['rows']=_0x4ef295;return _0x122717;})[_0x94b7('0x1f')](respondWithFilteredResult(_0x2146ec,_0xc0477e))[_0x94b7('0x3a')](handleError(_0x2146ec,null));};exports[_0x94b7('0x3b')]=function(_0x79d6b3,_0x16d471){var _0x35444e={'raw':!![],'where':{'id':_0x79d6b3[_0x94b7('0x3c')]['id']}},_0x38f3c3={};_0x38f3c3[_0x94b7('0x25')]=_[_0x94b7('0x26')](db[_0x94b7('0x38')]['rawAttributes']);_0x38f3c3[_0x94b7('0x27')]=_[_0x94b7('0x26')](_0x79d6b3[_0x94b7('0x27')]);_0x38f3c3['filters']=_[_0x94b7('0x28')](_0x38f3c3[_0x94b7('0x25')],_0x38f3c3[_0x94b7('0x27')]);_0x35444e['attributes']=_['intersection'](_0x38f3c3[_0x94b7('0x25')],qs[_0x94b7('0x2a')](_0x79d6b3[_0x94b7('0x27')][_0x94b7('0x2a')]));_0x35444e[_0x94b7('0x29')]=_0x35444e[_0x94b7('0x29')][_0x94b7('0x2b')]?_0x35444e[_0x94b7('0x29')]:_0x38f3c3['model'];if(_0x79d6b3[_0x94b7('0x27')][_0x94b7('0x3d')]){_0x35444e[_0x94b7('0x37')]=[{'all':!![]}];}_0x35444e=_['merge']({},_0x35444e,_0x79d6b3['options']);return db[_0x94b7('0x38')][_0x94b7('0x3e')](_0x35444e)[_0x94b7('0x1f')](handleEntityNotFound(_0x16d471,null))[_0x94b7('0x1f')](respondWithResult(_0x16d471,null))[_0x94b7('0x3a')](handleError(_0x16d471,null));};exports[_0x94b7('0x3f')]=function(_0x232840,_0x1e64d0){return db['FaxQueueReport'][_0x94b7('0x3f')](_0x232840[_0x94b7('0x40')],{})[_0x94b7('0x1f')](respondWithResult(_0x1e64d0,0xc9))['catch'](handleError(_0x1e64d0,null));};exports[_0x94b7('0x1e')]=function(_0x2dd5fc,_0x1925bc){if(_0x2dd5fc['body']['id']){delete _0x2dd5fc[_0x94b7('0x40')]['id'];}return db['FaxQueueReport'][_0x94b7('0x3e')]({'where':{'id':_0x2dd5fc[_0x94b7('0x3c')]['id']}})[_0x94b7('0x1f')](handleEntityNotFound(_0x1925bc,null))[_0x94b7('0x1f')](saveUpdates(_0x2dd5fc['body'],null))['then'](respondWithResult(_0x1925bc,null))[_0x94b7('0x3a')](handleError(_0x1925bc,null));};exports[_0x94b7('0x20')]=function(_0x29e1dd,_0x47d3ff){return db[_0x94b7('0x38')][_0x94b7('0x3e')]({'where':{'id':_0x29e1dd[_0x94b7('0x3c')]['id']}})[_0x94b7('0x1f')](handleEntityNotFound(_0x47d3ff,null))[_0x94b7('0x1f')](removeEntity(_0x47d3ff,null))['catch'](handleError(_0x47d3ff,null));};exports['describe']=function(_0x54ff3b,_0x8eea96){return db[_0x94b7('0x38')]['describe']()[_0x94b7('0x1f')](respondWithResult(_0x8eea96,null))[_0x94b7('0x3a')](handleError(_0x8eea96,null));};
\ No newline at end of file
index 747f441..31a2232 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6054=['uniqueid','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','./faxQueueReport.attributes'];(function(_0x312e70,_0x418674){var _0x3527e1=function(_0x21f30d){while(--_0x21f30d){_0x312e70['push'](_0x312e70['shift']());}};_0x3527e1(++_0x418674);}(_0x6054,0x14b));var _0x4605=function(_0x4c3ba1,_0x5d942d){_0x4c3ba1=_0x4c3ba1-0x0;var _0x326fa2=_0x6054[_0x4c3ba1];return _0x326fa2;};'use strict';var _=require(_0x4605('0x0'));var util=require(_0x4605('0x1'));var logger=require(_0x4605('0x2'))(_0x4605('0x3'));var moment=require(_0x4605('0x4'));var BPromise=require(_0x4605('0x5'));var rp=require(_0x4605('0x6'));var fs=require('fs');var path=require(_0x4605('0x7'));var rimraf=require(_0x4605('0x8'));var config=require('../../config/environment');var attributes=require(_0x4605('0x9'));module['exports']=function(_0x8585df,_0x5e36cd){return _0x8585df['define']('FaxQueueReport',attributes,{'tableName':'report_fax_queue','paranoid':![],'indexes':[{'name':_0x4605('0xa'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0xd4ee=['./faxQueueReport.attributes','exports','define','FaxQueueReport','uniqueid','../../config/logger','moment','bluebird','request-promise','path','rimraf','../../config/environment'];(function(_0x5baadf,_0x1bb942){var _0x3cd985=function(_0x15810c){while(--_0x15810c){_0x5baadf['push'](_0x5baadf['shift']());}};_0x3cd985(++_0x1bb942);}(_0xd4ee,0xc5));var _0xed4e=function(_0x3475f5,_0x66eca9){_0x3475f5=_0x3475f5-0x0;var _0x8ac27b=_0xd4ee[_0x3475f5];return _0x8ac27b;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xed4e('0x0'))('api');var moment=require(_0xed4e('0x1'));var BPromise=require(_0xed4e('0x2'));var rp=require(_0xed4e('0x3'));var fs=require('fs');var path=require(_0xed4e('0x4'));var rimraf=require(_0xed4e('0x5'));var config=require(_0xed4e('0x6'));var attributes=require(_0xed4e('0x7'));module[_0xed4e('0x8')]=function(_0x346574,_0x54b43c){return _0x346574[_0xed4e('0x9')](_0xed4e('0xa'),attributes,{'tableName':'report_fax_queue','paranoid':![],'indexes':[{'name':_0xed4e('0xb'),'fields':[_0xed4e('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index 79f59dd..81dec19 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9e6b=['request\x20sent','debug','FaxQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','CreateFaxQueueReport','create','body','options','then','UpdateFaxQueueReport','FaxQueueReport','update','raw','where','attributes','limit','lodash','util','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','info','FaxQueueReport,\x20%s,\x20%s'];(function(_0x8ed5e1,_0x423e3b){var _0xbc4db6=function(_0x928f93){while(--_0x928f93){_0x8ed5e1['push'](_0x8ed5e1['shift']());}};_0xbc4db6(++_0x423e3b);}(_0x9e6b,0x11c));var _0xb9e6=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x9e6b[_0x42cae2];return _0x5f256f;};'use strict';var _=require(_0xb9e6('0x0'));var util=require(_0xb9e6('0x1'));var moment=require('moment');var BPromise=require(_0xb9e6('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0xb9e6('0x3'))['db'];var utils=require(_0xb9e6('0x4'));var logger=require(_0xb9e6('0x5'))(_0xb9e6('0x6'));var config=require('../../config/environment');var jayson=require(_0xb9e6('0x7'));var client=jayson[_0xb9e6('0x8')][_0xb9e6('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x4bb674,_0x2cbcf7,_0x49565c){return new BPromise(function(_0x5a54db,_0x4cc018){return client[_0xb9e6('0xa')](_0x4bb674,_0x49565c)['then'](function(_0x378e17){logger[_0xb9e6('0xb')](_0xb9e6('0xc'),_0x2cbcf7,_0xb9e6('0xd'));logger[_0xb9e6('0xe')](_0xb9e6('0xf'),_0x2cbcf7,_0xb9e6('0xd'),JSON[_0xb9e6('0x10')](_0x378e17));if(_0x378e17[_0xb9e6('0x11')]){if(_0x378e17[_0xb9e6('0x11')]['code']===0x1f4){logger[_0xb9e6('0x11')](_0xb9e6('0xc'),_0x2cbcf7,_0x378e17[_0xb9e6('0x11')][_0xb9e6('0x12')]);return _0x4cc018(_0x378e17['error'][_0xb9e6('0x12')]);}logger[_0xb9e6('0x11')]('FaxQueueReport,\x20%s,\x20%s',_0x2cbcf7,_0x378e17['error'][_0xb9e6('0x12')]);return _0x5a54db(_0x378e17[_0xb9e6('0x11')][_0xb9e6('0x12')]);}else{logger[_0xb9e6('0xb')]('FaxQueueReport,\x20%s,\x20%s',_0x2cbcf7,_0xb9e6('0xd'));_0x5a54db(_0x378e17[_0xb9e6('0x13')][_0xb9e6('0x12')]);}})[_0xb9e6('0x14')](function(_0x15aa3d){logger[_0xb9e6('0x11')](_0xb9e6('0xc'),_0x2cbcf7,_0x15aa3d);_0x4cc018(_0x15aa3d);});});}exports[_0xb9e6('0x15')]=function(_0x8d7ea3){var _0x1931f2=this;return new Promise(function(_0x47bd4d,_0xffcdad){return db['FaxQueueReport'][_0xb9e6('0x16')](_0x8d7ea3[_0xb9e6('0x17')],{'raw':_0x8d7ea3[_0xb9e6('0x18')]?_0x8d7ea3[_0xb9e6('0x18')]['raw']===undefined?!![]:![]:!![]})[_0xb9e6('0x19')](function(_0x2de3ab){logger[_0xb9e6('0xb')](_0xb9e6('0x15'),_0x8d7ea3);logger['debug']('CreateFaxQueueReport',_0x8d7ea3,JSON['stringify'](_0x2de3ab));_0x47bd4d(_0x2de3ab);})[_0xb9e6('0x14')](function(_0x112675){logger['error'](_0xb9e6('0x15'),_0x112675['message'],_0x8d7ea3);_0xffcdad(_0x1931f2[_0xb9e6('0x11')](0x1f4,_0x112675[_0xb9e6('0x12')]));});});};exports[_0xb9e6('0x1a')]=function(_0x467aa4){var _0x17885d=this;return new Promise(function(_0x5cc468,_0x1b8ea3){return db[_0xb9e6('0x1b')][_0xb9e6('0x1c')](_0x467aa4[_0xb9e6('0x17')],{'raw':_0x467aa4[_0xb9e6('0x18')]?_0x467aa4['options'][_0xb9e6('0x1d')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x467aa4[_0xb9e6('0x18')]?_0x467aa4[_0xb9e6('0x18')][_0xb9e6('0x1e')]||null:null,'attributes':_0x467aa4['options']?_0x467aa4[_0xb9e6('0x18')][_0xb9e6('0x1f')]||null:null,'limit':_0x467aa4[_0xb9e6('0x18')]?_0x467aa4[_0xb9e6('0x18')][_0xb9e6('0x20')]||null:null})[_0xb9e6('0x19')](function(_0x3ee163){logger[_0xb9e6('0xb')]('UpdateFaxQueueReport',_0x467aa4);logger[_0xb9e6('0xe')](_0xb9e6('0x1a'),_0x467aa4,JSON['stringify'](_0x3ee163));_0x5cc468(_0x3ee163);})[_0xb9e6('0x14')](function(_0xda86d5){logger['error'](_0xb9e6('0x1a'),_0xda86d5[_0xb9e6('0x12')],_0x467aa4);_0x1b8ea3(_0x17885d[_0xb9e6('0x11')](0x1f4,_0xda86d5[_0xb9e6('0x12')]));});});};
\ No newline at end of file
+var _0x0c71=['create','body','options','raw','info','debug','UpdateFaxQueueReport','FaxQueueReport','update','where','limit','util','bluebird','randomstring','ioredis','../../config/logger','../../config/environment','jayson/promise','client','http','then','FaxQueueReport,\x20%s,\x20%s','request\x20sent','FaxQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','CreateFaxQueueReport'];(function(_0x342700,_0x569f75){var _0x53406f=function(_0x3b3c32){while(--_0x3b3c32){_0x342700['push'](_0x342700['shift']());}};_0x53406f(++_0x569f75);}(_0x0c71,0xfb));var _0x10c7=function(_0x475e74,_0x28e8a5){_0x475e74=_0x475e74-0x0;var _0x53d550=_0x0c71[_0x475e74];return _0x53d550;};'use strict';var _=require('lodash');var util=require(_0x10c7('0x0'));var moment=require('moment');var BPromise=require(_0x10c7('0x1'));var rs=require(_0x10c7('0x2'));var fs=require('fs');var Redis=require(_0x10c7('0x3'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x10c7('0x4'))('rpc');var config=require(_0x10c7('0x5'));var jayson=require(_0x10c7('0x6'));var client=jayson[_0x10c7('0x7')][_0x10c7('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x2dbe32,_0xd955fc,_0x4d8fc8){return new BPromise(function(_0x3cbcd7,_0x221c8f){return client['request'](_0x2dbe32,_0x4d8fc8)[_0x10c7('0x9')](function(_0x566146){logger['info'](_0x10c7('0xa'),_0xd955fc,_0x10c7('0xb'));logger['debug'](_0x10c7('0xc'),_0xd955fc,_0x10c7('0xb'),JSON[_0x10c7('0xd')](_0x566146));if(_0x566146[_0x10c7('0xe')]){if(_0x566146[_0x10c7('0xe')][_0x10c7('0xf')]===0x1f4){logger[_0x10c7('0xe')](_0x10c7('0xa'),_0xd955fc,_0x566146[_0x10c7('0xe')][_0x10c7('0x10')]);return _0x221c8f(_0x566146['error'][_0x10c7('0x10')]);}logger[_0x10c7('0xe')](_0x10c7('0xa'),_0xd955fc,_0x566146[_0x10c7('0xe')][_0x10c7('0x10')]);return _0x3cbcd7(_0x566146[_0x10c7('0xe')][_0x10c7('0x10')]);}else{logger['info'](_0x10c7('0xa'),_0xd955fc,_0x10c7('0xb'));_0x3cbcd7(_0x566146['result'][_0x10c7('0x10')]);}})[_0x10c7('0x11')](function(_0xbfd3a4){logger[_0x10c7('0xe')](_0x10c7('0xa'),_0xd955fc,_0xbfd3a4);_0x221c8f(_0xbfd3a4);});});}exports[_0x10c7('0x12')]=function(_0x3168e1){var _0x1bd968=this;return new Promise(function(_0x2ecb76,_0x4ce96d){return db['FaxQueueReport'][_0x10c7('0x13')](_0x3168e1[_0x10c7('0x14')],{'raw':_0x3168e1['options']?_0x3168e1[_0x10c7('0x15')][_0x10c7('0x16')]===undefined?!![]:![]:!![]})[_0x10c7('0x9')](function(_0x5373cf){logger[_0x10c7('0x17')]('CreateFaxQueueReport',_0x3168e1);logger[_0x10c7('0x18')](_0x10c7('0x12'),_0x3168e1,JSON[_0x10c7('0xd')](_0x5373cf));_0x2ecb76(_0x5373cf);})['catch'](function(_0x29a2e5){logger[_0x10c7('0xe')](_0x10c7('0x12'),_0x29a2e5[_0x10c7('0x10')],_0x3168e1);_0x4ce96d(_0x1bd968[_0x10c7('0xe')](0x1f4,_0x29a2e5[_0x10c7('0x10')]));});});};exports[_0x10c7('0x19')]=function(_0x308e3a){var _0x33b697=this;return new Promise(function(_0x3cd18a,_0x6a062b){return db[_0x10c7('0x1a')][_0x10c7('0x1b')](_0x308e3a[_0x10c7('0x14')],{'raw':_0x308e3a[_0x10c7('0x15')]?_0x308e3a[_0x10c7('0x15')][_0x10c7('0x16')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x308e3a[_0x10c7('0x15')]?_0x308e3a[_0x10c7('0x15')][_0x10c7('0x1c')]||null:null,'attributes':_0x308e3a['options']?_0x308e3a['options']['attributes']||null:null,'limit':_0x308e3a[_0x10c7('0x15')]?_0x308e3a[_0x10c7('0x15')][_0x10c7('0x1d')]||null:null})[_0x10c7('0x9')](function(_0x27ac7e){logger[_0x10c7('0x17')]('UpdateFaxQueueReport',_0x308e3a);logger[_0x10c7('0x18')]('UpdateFaxQueueReport',_0x308e3a,JSON[_0x10c7('0xd')](_0x27ac7e));_0x3cd18a(_0x27ac7e);})['catch'](function(_0x3731a1){logger[_0x10c7('0xe')]('UpdateFaxQueueReport',_0x3731a1[_0x10c7('0x10')],_0x308e3a);_0x6a062b(_0x33b697[_0x10c7('0xe')](0x1f4,_0x3731a1[_0x10c7('0x10')]));});});};
\ No newline at end of file
index b17b352..1571a3a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x026f=['./faxQueueReport.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','update','delete','destroy','multer','util','path','express','../../components/auth/service','../../components/interaction/service'];(function(_0x5e8ad6,_0x13d864){var _0x19883f=function(_0x2881f8){while(--_0x2881f8){_0x5e8ad6['push'](_0x5e8ad6['shift']());}};_0x19883f(++_0x13d864);}(_0x026f,0x150));var _0xf026=function(_0x26fba3,_0x284c1a){_0x26fba3=_0x26fba3-0x0;var _0x5365cc=_0x026f[_0x26fba3];return _0x5365cc;};'use strict';var multer=require(_0xf026('0x0'));var util=require(_0xf026('0x1'));var path=require(_0xf026('0x2'));var timeout=require('connect-timeout');var express=require(_0xf026('0x3'));var router=express['Router']();var auth=require(_0xf026('0x4'));var interaction=require(_0xf026('0x5'));var config=require('../../config/environment');var controller=require(_0xf026('0x6'));router[_0xf026('0x7')]('/',auth[_0xf026('0x8')](),controller[_0xf026('0x9')]);router[_0xf026('0x7')](_0xf026('0xa'),auth[_0xf026('0x8')](),controller[_0xf026('0xb')]);router[_0xf026('0x7')](_0xf026('0xc'),auth['isAuthenticated'](),controller[_0xf026('0xd')]);router[_0xf026('0xe')]('/',auth[_0xf026('0x8')](),controller['create']);router['put'](_0xf026('0xc'),auth[_0xf026('0x8')](),controller[_0xf026('0xf')]);router[_0xf026('0x10')](_0xf026('0xc'),auth[_0xf026('0x8')](),controller[_0xf026('0x11')]);module['exports']=router;
\ No newline at end of file
+var _0x74fd=['destroy','exports','multer','connect-timeout','Router','../../components/interaction/service','../../config/environment','./faxQueueReport.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','create','put','update','delete'];(function(_0x9df060,_0x253d33){var _0x338dfe=function(_0x17d9a5){while(--_0x17d9a5){_0x9df060['push'](_0x9df060['shift']());}};_0x338dfe(++_0x253d33);}(_0x74fd,0x1a6));var _0xd74f=function(_0x403c20,_0x4a7b99){_0x403c20=_0x403c20-0x0;var _0x2b271a=_0x74fd[_0x403c20];return _0x2b271a;};'use strict';var multer=require(_0xd74f('0x0'));var util=require('util');var path=require('path');var timeout=require(_0xd74f('0x1'));var express=require('express');var router=express[_0xd74f('0x2')]();var auth=require('../../components/auth/service');var interaction=require(_0xd74f('0x3'));var config=require(_0xd74f('0x4'));var controller=require(_0xd74f('0x5'));router[_0xd74f('0x6')]('/',auth[_0xd74f('0x7')](),controller[_0xd74f('0x8')]);router[_0xd74f('0x6')](_0xd74f('0x9'),auth[_0xd74f('0x7')](),controller[_0xd74f('0xa')]);router[_0xd74f('0x6')](_0xd74f('0xb'),auth[_0xd74f('0x7')](),controller[_0xd74f('0xc')]);router[_0xd74f('0xd')]('/',auth[_0xd74f('0x7')](),controller[_0xd74f('0xe')]);router[_0xd74f('0xf')](_0xd74f('0xb'),auth[_0xd74f('0x7')](),controller[_0xd74f('0x10')]);router[_0xd74f('0x11')]('/:id',auth['isAuthenticated'](),controller[_0xd74f('0x12')]);module[_0xd74f('0x13')]=router;
\ No newline at end of file
index ef629b9..9918ff8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6ca8=['agent','queue','DATE','moment','sequelize','exports','STRING','ENUM'];(function(_0xddfbdc,_0x561a0b){var _0x395d72=function(_0x2b7de6){while(--_0x2b7de6){_0xddfbdc['push'](_0xddfbdc['shift']());}};_0x395d72(++_0x561a0b);}(_0x6ca8,0x1eb));var _0x86ca=function(_0x4030c0,_0x21585a){_0x4030c0=_0x4030c0-0x0;var _0x265dce=_0x6ca8[_0x4030c0];return _0x265dce;};'use strict';var moment=require(_0x86ca('0x0'));var Sequelize=require(_0x86ca('0x1'));module[_0x86ca('0x2')]={'uniqueid':{'type':Sequelize[_0x86ca('0x3')],'allowNull':![]},'type':{'type':Sequelize[_0x86ca('0x4')]('account',_0x86ca('0x5'),_0x86ca('0x6')),'allowNull':![],'defaultValue':_0x86ca('0x6')},'transferredAt':{'type':Sequelize[_0x86ca('0x7')],'allowNull':![],'defaultValue':Sequelize['NOW']}};
\ No newline at end of file
+var _0x6864=['exports','STRING','ENUM','agent','queue','DATE','NOW','moment'];(function(_0x3ccd07,_0x586c61){var _0xe72103=function(_0x59ac53){while(--_0x59ac53){_0x3ccd07['push'](_0x3ccd07['shift']());}};_0xe72103(++_0x586c61);}(_0x6864,0x7f));var _0x4686=function(_0x5db740,_0x1aa8b7){_0x5db740=_0x5db740-0x0;var _0x352dbe=_0x6864[_0x5db740];return _0x352dbe;};'use strict';var moment=require(_0x4686('0x0'));var Sequelize=require('sequelize');module[_0x4686('0x1')]={'uniqueid':{'type':Sequelize[_0x4686('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0x4686('0x3')]('account',_0x4686('0x4'),_0x4686('0x5')),'allowNull':![],'defaultValue':_0x4686('0x5')},'transferredAt':{'type':Sequelize[_0x4686('0x6')],'allowNull':![],'defaultValue':Sequelize[_0x4686('0x7')]}};
\ No newline at end of file
index ef810f3..ee789a4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd213=['key','VIRTUAL','field','filter','options','then','includeAll','include','catch','show','params','find','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','save','update','destroy','stack','name','send','index','FaxTransferReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','merge'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xd213,0x9b));var _0x3d21=function(_0x3ef951,_0xae273a){_0x3ef951=_0x3ef951-0x0;var _0x2e8659=_0xd213[_0x3ef951];return _0x2e8659;};'use strict';var pdf=require(_0x3d21('0x0'));var emlformat=require(_0x3d21('0x1'));var rimraf=require(_0x3d21('0x2'));var zipdir=require(_0x3d21('0x3'));var jsonpatch=require(_0x3d21('0x4'));var rp=require(_0x3d21('0x5'));var moment=require(_0x3d21('0x6'));var BPromise=require(_0x3d21('0x7'));var Mustache=require(_0x3d21('0x8'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0x3d21('0x9'));var ejs=require(_0x3d21('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x3d21('0xb'));var crypto=require(_0x3d21('0xc'));var jsforce=require(_0x3d21('0xd'));var deskjs=require(_0x3d21('0xe'));var toCsv=require('to-csv');var querystring=require(_0x3d21('0xf'));var Papa=require('papaparse');var Redis=require(_0x3d21('0x10'));var authService=require(_0x3d21('0x11'));var qs=require(_0x3d21('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x3d21('0x13'))(_0x3d21('0x14'));var utils=require(_0x3d21('0x15'));var config=require('../../config/environment');var db=require(_0x3d21('0x16'))['db'];function respondWithStatusCode(_0x495d75,_0x82ea6c){_0x82ea6c=_0x82ea6c||0xcc;return function(_0x744094){if(_0x744094){return _0x495d75[_0x3d21('0x17')](_0x82ea6c);}return _0x495d75[_0x3d21('0x18')](_0x82ea6c)[_0x3d21('0x19')]();};}function respondWithResult(_0x514b6b,_0x78ec8e){_0x78ec8e=_0x78ec8e||0xc8;return function(_0x13369){if(_0x13369){return _0x514b6b['status'](_0x78ec8e)[_0x3d21('0x1a')](_0x13369);}};}function respondWithFilteredResult(_0x1550d9,_0x4f65dd){return function(_0x169fea){if(_0x169fea){var _0x102ba5=_0x169fea[_0x3d21('0x1b')],_0x516c89=_0x4f65dd['offset'],_0x749fd0=_0x4f65dd[_0x3d21('0x1c')]+_0x4f65dd[_0x3d21('0x1d')],_0x295e2c;if(_0x749fd0>=_0x102ba5){_0x749fd0=_0x102ba5;_0x295e2c=0xc8;}else{_0x295e2c=0xce;}_0x1550d9[_0x3d21('0x18')](_0x295e2c);return _0x1550d9[_0x3d21('0x1e')](_0x3d21('0x1f'),_0x516c89+'-'+_0x749fd0+'/'+_0x102ba5)['json'](_0x169fea);}return null;};}function patchUpdates(_0x5c2694){return function(_0x210fae){try{jsonpatch[_0x3d21('0x20')](_0x210fae,_0x5c2694,!![]);}catch(_0x4cf706){return BPromise['reject'](_0x4cf706);}return _0x210fae[_0x3d21('0x21')]();};}function saveUpdates(_0x4f7362,_0x401086){return function(_0xe099f9){if(_0xe099f9){return _0xe099f9[_0x3d21('0x22')](_0x4f7362)['then'](function(_0x3158d0){return _0x3158d0;});}return null;};}function removeEntity(_0x2036a4,_0x1cc7eb){return function(_0x2b4570){if(_0x2b4570){return _0x2b4570[_0x3d21('0x23')]()['then'](function(){_0x2036a4[_0x3d21('0x18')](0xcc)[_0x3d21('0x19')]();});}};}function handleEntityNotFound(_0x2a0e21,_0x41107f){return function(_0x55915f){if(!_0x55915f){_0x2a0e21[_0x3d21('0x17')](0x194);}return _0x55915f;};}function handleError(_0xd6e16d,_0x10b5e9){_0x10b5e9=_0x10b5e9||0x1f4;return function(_0x3ef1c8){logger['error'](_0x3ef1c8[_0x3d21('0x24')]);if(_0x3ef1c8[_0x3d21('0x25')]){delete _0x3ef1c8[_0x3d21('0x25')];}_0xd6e16d[_0x3d21('0x18')](_0x10b5e9)[_0x3d21('0x26')](_0x3ef1c8);};}exports[_0x3d21('0x27')]=function(_0x1f85ce,_0x479400){var _0x47fe88={},_0x7d2ef6={},_0x42c797={'count':0x0,'rows':[]};var _0x4030da=db[_0x3d21('0x28')][_0x3d21('0x29')];_0x7d2ef6[_0x3d21('0x2a')]=_[_0x3d21('0x2b')](_0x4030da);_0x7d2ef6['query']=_[_0x3d21('0x2b')](_0x1f85ce[_0x3d21('0x2c')]);_0x7d2ef6[_0x3d21('0x2d')]=_[_0x3d21('0x2e')](_0x7d2ef6[_0x3d21('0x2a')],_0x7d2ef6['query']);_0x47fe88[_0x3d21('0x2f')]=_[_0x3d21('0x2e')](_0x7d2ef6[_0x3d21('0x2a')],qs[_0x3d21('0x30')](_0x1f85ce[_0x3d21('0x2c')][_0x3d21('0x30')]));_0x47fe88[_0x3d21('0x2f')]=_0x47fe88[_0x3d21('0x2f')][_0x3d21('0x31')]?_0x47fe88['attributes']:_0x7d2ef6[_0x3d21('0x2a')];if(!_0x1f85ce[_0x3d21('0x2c')][_0x3d21('0x32')]('nolimit')){_0x47fe88[_0x3d21('0x1d')]=qs['limit'](_0x1f85ce[_0x3d21('0x2c')]['limit']);_0x47fe88[_0x3d21('0x1c')]=qs[_0x3d21('0x1c')](_0x1f85ce['query'][_0x3d21('0x1c')]);}_0x47fe88[_0x3d21('0x33')]=qs[_0x3d21('0x34')](_0x1f85ce[_0x3d21('0x2c')][_0x3d21('0x34')]);_0x47fe88[_0x3d21('0x35')]=qs[_0x3d21('0x2d')](_['pick'](_0x1f85ce[_0x3d21('0x2c')],_0x7d2ef6[_0x3d21('0x2d')]));if(_0x1f85ce[_0x3d21('0x2c')]['filter']){_0x47fe88['where']=_[_0x3d21('0x36')](_0x47fe88[_0x3d21('0x35')],{'$or':_['map'](_0x4030da,function(_0x106aa0){if(_0x106aa0['type'][_0x3d21('0x37')]!==_0x3d21('0x38')){var _0x56be64={};_0x56be64[_0x106aa0[_0x3d21('0x39')]]={'$like':'%'+_0x1f85ce[_0x3d21('0x2c')][_0x3d21('0x3a')]+'%'};return _0x56be64;}})});}_0x47fe88=_[_0x3d21('0x36')]({},_0x47fe88,_0x1f85ce[_0x3d21('0x3b')]);var _0x2152c3={'where':_0x47fe88[_0x3d21('0x35')]};return db[_0x3d21('0x28')][_0x3d21('0x1b')](_0x2152c3)[_0x3d21('0x3c')](function(_0x295a64){_0x42c797[_0x3d21('0x1b')]=_0x295a64;if(_0x1f85ce[_0x3d21('0x2c')][_0x3d21('0x3d')]){_0x47fe88[_0x3d21('0x3e')]=[{'all':!![]}];}return db[_0x3d21('0x28')]['findAll'](_0x47fe88);})[_0x3d21('0x3c')](function(_0x47de16){_0x42c797['rows']=_0x47de16;return _0x42c797;})['then'](respondWithFilteredResult(_0x479400,_0x47fe88))[_0x3d21('0x3f')](handleError(_0x479400,null));};exports[_0x3d21('0x40')]=function(_0x3ced16,_0x3c37ef){var _0x26ccf5={'raw':!![],'where':{'id':_0x3ced16[_0x3d21('0x41')]['id']}},_0xcc27cc={};_0xcc27cc[_0x3d21('0x2a')]=_[_0x3d21('0x2b')](db[_0x3d21('0x28')]['rawAttributes']);_0xcc27cc[_0x3d21('0x2c')]=_['keys'](_0x3ced16['query']);_0xcc27cc[_0x3d21('0x2d')]=_['intersection'](_0xcc27cc[_0x3d21('0x2a')],_0xcc27cc['query']);_0x26ccf5[_0x3d21('0x2f')]=_['intersection'](_0xcc27cc[_0x3d21('0x2a')],qs[_0x3d21('0x30')](_0x3ced16[_0x3d21('0x2c')][_0x3d21('0x30')]));_0x26ccf5[_0x3d21('0x2f')]=_0x26ccf5['attributes'][_0x3d21('0x31')]?_0x26ccf5['attributes']:_0xcc27cc[_0x3d21('0x2a')];if(_0x3ced16[_0x3d21('0x2c')][_0x3d21('0x3d')]){_0x26ccf5[_0x3d21('0x3e')]=[{'all':!![]}];}_0x26ccf5=_[_0x3d21('0x36')]({},_0x26ccf5,_0x3ced16[_0x3d21('0x3b')]);return db[_0x3d21('0x28')][_0x3d21('0x42')](_0x26ccf5)['then'](handleEntityNotFound(_0x3c37ef,null))['then'](respondWithResult(_0x3c37ef,null))[_0x3d21('0x3f')](handleError(_0x3c37ef,null));};exports[_0x3d21('0x43')]=function(_0x40144b,_0x4528e0){return db[_0x3d21('0x28')][_0x3d21('0x43')](_0x40144b[_0x3d21('0x44')],{})[_0x3d21('0x3c')](respondWithResult(_0x4528e0,0xc9))[_0x3d21('0x3f')](handleError(_0x4528e0,null));};exports[_0x3d21('0x22')]=function(_0x4746f1,_0x22aeea){if(_0x4746f1[_0x3d21('0x44')]['id']){delete _0x4746f1[_0x3d21('0x44')]['id'];}return db[_0x3d21('0x28')][_0x3d21('0x42')]({'where':{'id':_0x4746f1[_0x3d21('0x41')]['id']}})[_0x3d21('0x3c')](handleEntityNotFound(_0x22aeea,null))[_0x3d21('0x3c')](saveUpdates(_0x4746f1[_0x3d21('0x44')],null))[_0x3d21('0x3c')](respondWithResult(_0x22aeea,null))[_0x3d21('0x3f')](handleError(_0x22aeea,null));};exports[_0x3d21('0x23')]=function(_0xcec3b,_0x396232){return db[_0x3d21('0x28')][_0x3d21('0x42')]({'where':{'id':_0xcec3b[_0x3d21('0x41')]['id']}})[_0x3d21('0x3c')](handleEntityNotFound(_0x396232,null))[_0x3d21('0x3c')](removeEntity(_0x396232,null))[_0x3d21('0x3f')](handleError(_0x396232,null));};exports[_0x3d21('0x45')]=function(_0x593ee8,_0x17f71d){return db['FaxTransferReport']['describe']()['then'](respondWithResult(_0x17f71d,null))[_0x3d21('0x3f')](handleError(_0x17f71d,null));};
\ No newline at end of file
+var _0xee33=['ioredis','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','offset','limit','set','apply','reject','save','update','then','error','name','index','rawAttributes','model','query','keys','intersection','attributes','fields','hasOwnProperty','order','sort','filters','pick','filter','where','merge','map','type','options','FaxTransferReport','includeAll','include','findAll','rows','catch','show','params','length','find','create','body','describe','html-pdf','eml-format','fast-json-patch','moment','bluebird','util','path','sox','to-csv','ejs','squel','jsforce','querystring'];(function(_0x4cbf20,_0x1bfa66){var _0x582ae4=function(_0x5eca38){while(--_0x5eca38){_0x4cbf20['push'](_0x4cbf20['shift']());}};_0x582ae4(++_0x1bfa66);}(_0xee33,0xfb));var _0x3ee3=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xee33[_0x14add3];return _0x4a174f;};'use strict';var pdf=require(_0x3ee3('0x0'));var emlformat=require(_0x3ee3('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x3ee3('0x2'));var rp=require('request-promise');var moment=require(_0x3ee3('0x3'));var BPromise=require(_0x3ee3('0x4'));var Mustache=require('mustache');var util=require(_0x3ee3('0x5'));var path=require(_0x3ee3('0x6'));var sox=require(_0x3ee3('0x7'));var csv=require(_0x3ee3('0x8'));var ejs=require(_0x3ee3('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x3ee3('0xa'));var crypto=require('crypto');var jsforce=require(_0x3ee3('0xb'));var deskjs=require('desk.js');var toCsv=require(_0x3ee3('0x8'));var querystring=require(_0x3ee3('0xc'));var Papa=require('papaparse');var Redis=require(_0x3ee3('0xd'));var authService=require('../../components/auth/service');var qs=require(_0x3ee3('0xe'));var hardwareService=require(_0x3ee3('0xf'));var logger=require('../../config/logger')(_0x3ee3('0x10'));var utils=require(_0x3ee3('0x11'));var config=require(_0x3ee3('0x12'));var db=require(_0x3ee3('0x13'))['db'];function respondWithStatusCode(_0x3ee1f7,_0x5df3cc){_0x5df3cc=_0x5df3cc||0xcc;return function(_0x189e27){if(_0x189e27){return _0x3ee1f7[_0x3ee3('0x14')](_0x5df3cc);}return _0x3ee1f7['status'](_0x5df3cc)[_0x3ee3('0x15')]();};}function respondWithResult(_0x195a11,_0x14c127){_0x14c127=_0x14c127||0xc8;return function(_0x3a2db4){if(_0x3a2db4){return _0x195a11[_0x3ee3('0x16')](_0x14c127)[_0x3ee3('0x17')](_0x3a2db4);}};}function respondWithFilteredResult(_0x3398da,_0x1874b7){return function(_0x9948cf){if(_0x9948cf){var _0x7e1834=_0x9948cf['count'],_0x44f51f=_0x1874b7[_0x3ee3('0x18')],_0xb82874=_0x1874b7[_0x3ee3('0x18')]+_0x1874b7[_0x3ee3('0x19')],_0x166eb6;if(_0xb82874>=_0x7e1834){_0xb82874=_0x7e1834;_0x166eb6=0xc8;}else{_0x166eb6=0xce;}_0x3398da[_0x3ee3('0x16')](_0x166eb6);return _0x3398da[_0x3ee3('0x1a')]('Content-Range',_0x44f51f+'-'+_0xb82874+'/'+_0x7e1834)['json'](_0x9948cf);}return null;};}function patchUpdates(_0x23795a){return function(_0x51e14f){try{jsonpatch[_0x3ee3('0x1b')](_0x51e14f,_0x23795a,!![]);}catch(_0x46bef9){return BPromise[_0x3ee3('0x1c')](_0x46bef9);}return _0x51e14f[_0x3ee3('0x1d')]();};}function saveUpdates(_0x24946e,_0x5ef377){return function(_0x5c65e4){if(_0x5c65e4){return _0x5c65e4[_0x3ee3('0x1e')](_0x24946e)[_0x3ee3('0x1f')](function(_0x538907){return _0x538907;});}return null;};}function removeEntity(_0x580828,_0x2ae8c3){return function(_0x1b995e){if(_0x1b995e){return _0x1b995e['destroy']()[_0x3ee3('0x1f')](function(){_0x580828[_0x3ee3('0x16')](0xcc)[_0x3ee3('0x15')]();});}};}function handleEntityNotFound(_0x420ca3,_0x2bd83e){return function(_0xc66dd3){if(!_0xc66dd3){_0x420ca3['sendStatus'](0x194);}return _0xc66dd3;};}function handleError(_0x49c24f,_0x4d214d){_0x4d214d=_0x4d214d||0x1f4;return function(_0x5c1e0e){logger[_0x3ee3('0x20')](_0x5c1e0e['stack']);if(_0x5c1e0e['name']){delete _0x5c1e0e[_0x3ee3('0x21')];}_0x49c24f['status'](_0x4d214d)['send'](_0x5c1e0e);};}exports[_0x3ee3('0x22')]=function(_0x40cc83,_0x35f80d){var _0x5bda0e={},_0x9367ea={},_0x41706d={'count':0x0,'rows':[]};var _0x35cdf7=db['FaxTransferReport'][_0x3ee3('0x23')];_0x9367ea[_0x3ee3('0x24')]=_['keys'](_0x35cdf7);_0x9367ea[_0x3ee3('0x25')]=_[_0x3ee3('0x26')](_0x40cc83['query']);_0x9367ea['filters']=_[_0x3ee3('0x27')](_0x9367ea[_0x3ee3('0x24')],_0x9367ea[_0x3ee3('0x25')]);_0x5bda0e[_0x3ee3('0x28')]=_[_0x3ee3('0x27')](_0x9367ea['model'],qs[_0x3ee3('0x29')](_0x40cc83['query'][_0x3ee3('0x29')]));_0x5bda0e['attributes']=_0x5bda0e[_0x3ee3('0x28')]['length']?_0x5bda0e['attributes']:_0x9367ea[_0x3ee3('0x24')];if(!_0x40cc83['query'][_0x3ee3('0x2a')]('nolimit')){_0x5bda0e['limit']=qs['limit'](_0x40cc83[_0x3ee3('0x25')]['limit']);_0x5bda0e['offset']=qs[_0x3ee3('0x18')](_0x40cc83[_0x3ee3('0x25')][_0x3ee3('0x18')]);}_0x5bda0e[_0x3ee3('0x2b')]=qs[_0x3ee3('0x2c')](_0x40cc83['query'][_0x3ee3('0x2c')]);_0x5bda0e['where']=qs[_0x3ee3('0x2d')](_[_0x3ee3('0x2e')](_0x40cc83['query'],_0x9367ea[_0x3ee3('0x2d')]));if(_0x40cc83[_0x3ee3('0x25')][_0x3ee3('0x2f')]){_0x5bda0e[_0x3ee3('0x30')]=_[_0x3ee3('0x31')](_0x5bda0e[_0x3ee3('0x30')],{'$or':_[_0x3ee3('0x32')](_0x35cdf7,function(_0x1ef6f3){if(_0x1ef6f3[_0x3ee3('0x33')]['key']!=='VIRTUAL'){var _0x2649a2={};_0x2649a2[_0x1ef6f3['field']]={'$like':'%'+_0x40cc83[_0x3ee3('0x25')][_0x3ee3('0x2f')]+'%'};return _0x2649a2;}})});}_0x5bda0e=_[_0x3ee3('0x31')]({},_0x5bda0e,_0x40cc83[_0x3ee3('0x34')]);var _0x455c17={'where':_0x5bda0e['where']};return db[_0x3ee3('0x35')]['count'](_0x455c17)['then'](function(_0x5d6621){_0x41706d['count']=_0x5d6621;if(_0x40cc83[_0x3ee3('0x25')][_0x3ee3('0x36')]){_0x5bda0e[_0x3ee3('0x37')]=[{'all':!![]}];}return db['FaxTransferReport'][_0x3ee3('0x38')](_0x5bda0e);})[_0x3ee3('0x1f')](function(_0x318686){_0x41706d[_0x3ee3('0x39')]=_0x318686;return _0x41706d;})[_0x3ee3('0x1f')](respondWithFilteredResult(_0x35f80d,_0x5bda0e))[_0x3ee3('0x3a')](handleError(_0x35f80d,null));};exports[_0x3ee3('0x3b')]=function(_0x18b195,_0x32519a){var _0x30e410={'raw':!![],'where':{'id':_0x18b195[_0x3ee3('0x3c')]['id']}},_0x6adcdc={};_0x6adcdc[_0x3ee3('0x24')]=_[_0x3ee3('0x26')](db[_0x3ee3('0x35')]['rawAttributes']);_0x6adcdc[_0x3ee3('0x25')]=_[_0x3ee3('0x26')](_0x18b195[_0x3ee3('0x25')]);_0x6adcdc[_0x3ee3('0x2d')]=_[_0x3ee3('0x27')](_0x6adcdc[_0x3ee3('0x24')],_0x6adcdc['query']);_0x30e410['attributes']=_[_0x3ee3('0x27')](_0x6adcdc['model'],qs[_0x3ee3('0x29')](_0x18b195[_0x3ee3('0x25')][_0x3ee3('0x29')]));_0x30e410[_0x3ee3('0x28')]=_0x30e410['attributes'][_0x3ee3('0x3d')]?_0x30e410[_0x3ee3('0x28')]:_0x6adcdc[_0x3ee3('0x24')];if(_0x18b195[_0x3ee3('0x25')][_0x3ee3('0x36')]){_0x30e410[_0x3ee3('0x37')]=[{'all':!![]}];}_0x30e410=_[_0x3ee3('0x31')]({},_0x30e410,_0x18b195[_0x3ee3('0x34')]);return db[_0x3ee3('0x35')][_0x3ee3('0x3e')](_0x30e410)[_0x3ee3('0x1f')](handleEntityNotFound(_0x32519a,null))[_0x3ee3('0x1f')](respondWithResult(_0x32519a,null))['catch'](handleError(_0x32519a,null));};exports[_0x3ee3('0x3f')]=function(_0x140e59,_0x2035ef){return db[_0x3ee3('0x35')]['create'](_0x140e59[_0x3ee3('0x40')],{})[_0x3ee3('0x1f')](respondWithResult(_0x2035ef,0xc9))[_0x3ee3('0x3a')](handleError(_0x2035ef,null));};exports['update']=function(_0x3ebdf2,_0x3bc252){if(_0x3ebdf2[_0x3ee3('0x40')]['id']){delete _0x3ebdf2[_0x3ee3('0x40')]['id'];}return db['FaxTransferReport'][_0x3ee3('0x3e')]({'where':{'id':_0x3ebdf2[_0x3ee3('0x3c')]['id']}})[_0x3ee3('0x1f')](handleEntityNotFound(_0x3bc252,null))[_0x3ee3('0x1f')](saveUpdates(_0x3ebdf2[_0x3ee3('0x40')],null))[_0x3ee3('0x1f')](respondWithResult(_0x3bc252,null))['catch'](handleError(_0x3bc252,null));};exports['destroy']=function(_0x48b579,_0x582157){return db['FaxTransferReport'][_0x3ee3('0x3e')]({'where':{'id':_0x48b579[_0x3ee3('0x3c')]['id']}})[_0x3ee3('0x1f')](handleEntityNotFound(_0x582157,null))['then'](removeEntity(_0x582157,null))[_0x3ee3('0x3a')](handleError(_0x582157,null));};exports[_0x3ee3('0x41')]=function(_0x1f7c2e,_0x27ed70){return db['FaxTransferReport'][_0x3ee3('0x41')]()[_0x3ee3('0x1f')](respondWithResult(_0x27ed70,null))[_0x3ee3('0x3a')](handleError(_0x27ed70,null));};
\ No newline at end of file
index 5b44134..c569d54 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8fbc=['define','report_fax_transfer','uniqueid','lodash','util','api','moment','bluebird','request-promise','path','rimraf'];(function(_0xf40652,_0xf47f4a){var _0xe23894=function(_0x5284d3){while(--_0x5284d3){_0xf40652['push'](_0xf40652['shift']());}};_0xe23894(++_0xf47f4a);}(_0x8fbc,0xa8));var _0xc8fb=function(_0x423b69,_0x242087){_0x423b69=_0x423b69-0x0;var _0x31039f=_0x8fbc[_0x423b69];return _0x31039f;};'use strict';var _=require(_0xc8fb('0x0'));var util=require(_0xc8fb('0x1'));var logger=require('../../config/logger')(_0xc8fb('0x2'));var moment=require(_0xc8fb('0x3'));var BPromise=require(_0xc8fb('0x4'));var rp=require(_0xc8fb('0x5'));var fs=require('fs');var path=require(_0xc8fb('0x6'));var rimraf=require(_0xc8fb('0x7'));var config=require('../../config/environment');var attributes=require('./faxTransferReport.attributes');module['exports']=function(_0x104117,_0x1c5da3){return _0x104117[_0xc8fb('0x8')]('FaxTransferReport',attributes,{'tableName':_0xc8fb('0x9'),'paranoid':![],'indexes':[{'name':_0xc8fb('0xa'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0xc74e=['exports','define','FaxTransferReport','report_fax_transfer','lodash','util','../../config/logger','moment','bluebird','request-promise','path','rimraf','./faxTransferReport.attributes'];(function(_0xa97f62,_0x3ab559){var _0x184087=function(_0x4be14d){while(--_0x4be14d){_0xa97f62['push'](_0xa97f62['shift']());}};_0x184087(++_0x3ab559);}(_0xc74e,0xfb));var _0xec74=function(_0x502c7d,_0x2f1285){_0x502c7d=_0x502c7d-0x0;var _0x30b7ed=_0xc74e[_0x502c7d];return _0x30b7ed;};'use strict';var _=require(_0xec74('0x0'));var util=require(_0xec74('0x1'));var logger=require(_0xec74('0x2'))('api');var moment=require(_0xec74('0x3'));var BPromise=require(_0xec74('0x4'));var rp=require(_0xec74('0x5'));var fs=require('fs');var path=require(_0xec74('0x6'));var rimraf=require(_0xec74('0x7'));var config=require('../../config/environment');var attributes=require(_0xec74('0x8'));module[_0xec74('0x9')]=function(_0x460767,_0x501acc){return _0x460767[_0xec74('0xa')](_0xec74('0xb'),attributes,{'tableName':_0xec74('0xc'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
index 5438010..d883f55 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c58=['FaxTransferReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','FaxTransferReport,\x20%s,\x20%s','result','catch','lodash','util','bluebird','ioredis','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent'];(function(_0x46f43a,_0x39111e){var _0xd03ee8=function(_0x2937c5){while(--_0x2937c5){_0x46f43a['push'](_0x46f43a['shift']());}};_0xd03ee8(++_0x39111e);}(_0x9c58,0x126));var _0x89c5=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0x9c58[_0x122ef9];return _0x42fba0;};'use strict';var _=require(_0x89c5('0x0'));var util=require(_0x89c5('0x1'));var moment=require('moment');var BPromise=require(_0x89c5('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x89c5('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x89c5('0x4'));var logger=require(_0x89c5('0x5'))('rpc');var config=require(_0x89c5('0x6'));var jayson=require(_0x89c5('0x7'));var client=jayson[_0x89c5('0x8')][_0x89c5('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x57457c,_0x25c50a,_0x1ad025){return new BPromise(function(_0x2fbef2,_0x5e3618){return client[_0x89c5('0xa')](_0x57457c,_0x1ad025)[_0x89c5('0xb')](function(_0x5d8586){logger[_0x89c5('0xc')]('FaxTransferReport,\x20%s,\x20%s',_0x25c50a,_0x89c5('0xd'));logger['debug'](_0x89c5('0xe'),_0x25c50a,_0x89c5('0xd'),JSON[_0x89c5('0xf')](_0x5d8586));if(_0x5d8586[_0x89c5('0x10')]){if(_0x5d8586[_0x89c5('0x10')][_0x89c5('0x11')]===0x1f4){logger[_0x89c5('0x10')]('FaxTransferReport,\x20%s,\x20%s',_0x25c50a,_0x5d8586[_0x89c5('0x10')][_0x89c5('0x12')]);return _0x5e3618(_0x5d8586[_0x89c5('0x10')][_0x89c5('0x12')]);}logger[_0x89c5('0x10')](_0x89c5('0x13'),_0x25c50a,_0x5d8586['error'][_0x89c5('0x12')]);return _0x2fbef2(_0x5d8586[_0x89c5('0x10')][_0x89c5('0x12')]);}else{logger[_0x89c5('0xc')](_0x89c5('0x13'),_0x25c50a,'request\x20sent');_0x2fbef2(_0x5d8586[_0x89c5('0x14')]['message']);}})[_0x89c5('0x15')](function(_0x1cf9c7){logger['error']('FaxTransferReport,\x20%s,\x20%s',_0x25c50a,_0x1cf9c7);_0x5e3618(_0x1cf9c7);});});}
\ No newline at end of file
+var _0x8c6c=['../../config/utils','rpc','jayson/promise','client','http','then','FaxTransferReport,\x20%s,\x20%s','debug','FaxTransferReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','catch','util','bluebird','randomstring','../../mysqldb'];(function(_0x9af06d,_0x1b6c7d){var _0x69405c=function(_0x3dc85c){while(--_0x3dc85c){_0x9af06d['push'](_0x9af06d['shift']());}};_0x69405c(++_0x1b6c7d);}(_0x8c6c,0x1a0));var _0xc8c6=function(_0x3ab51d,_0x2fa01d){_0x3ab51d=_0x3ab51d-0x0;var _0x29a04e=_0x8c6c[_0x3ab51d];return _0x29a04e;};'use strict';var _=require('lodash');var util=require(_0xc8c6('0x0'));var moment=require('moment');var BPromise=require(_0xc8c6('0x1'));var rs=require(_0xc8c6('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xc8c6('0x3'))['db'];var utils=require(_0xc8c6('0x4'));var logger=require('../../config/logger')(_0xc8c6('0x5'));var config=require('../../config/environment');var jayson=require(_0xc8c6('0x6'));var client=jayson[_0xc8c6('0x7')][_0xc8c6('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x3afcf7,_0x5065aa,_0x272fdd){return new BPromise(function(_0x2603d0,_0x2d1f0e){return client['request'](_0x3afcf7,_0x272fdd)[_0xc8c6('0x9')](function(_0xaf5193){logger['info'](_0xc8c6('0xa'),_0x5065aa,'request\x20sent');logger[_0xc8c6('0xb')](_0xc8c6('0xc'),_0x5065aa,_0xc8c6('0xd'),JSON[_0xc8c6('0xe')](_0xaf5193));if(_0xaf5193[_0xc8c6('0xf')]){if(_0xaf5193[_0xc8c6('0xf')][_0xc8c6('0x10')]===0x1f4){logger[_0xc8c6('0xf')](_0xc8c6('0xa'),_0x5065aa,_0xaf5193[_0xc8c6('0xf')][_0xc8c6('0x11')]);return _0x2d1f0e(_0xaf5193[_0xc8c6('0xf')][_0xc8c6('0x11')]);}logger[_0xc8c6('0xf')](_0xc8c6('0xa'),_0x5065aa,_0xaf5193[_0xc8c6('0xf')]['message']);return _0x2603d0(_0xaf5193[_0xc8c6('0xf')][_0xc8c6('0x11')]);}else{logger[_0xc8c6('0x12')](_0xc8c6('0xa'),_0x5065aa,'request\x20sent');_0x2603d0(_0xaf5193['result'][_0xc8c6('0x11')]);}})[_0xc8c6('0x13')](function(_0x5b45a9){logger[_0xc8c6('0xf')]('FaxTransferReport,\x20%s,\x20%s',_0x5065aa,_0x5b45a9);_0x2d1f0e(_0x5b45a9);});});}
\ No newline at end of file
index f1ce444..00759f8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8d0e=['describe','/:id','show','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','/describe','isAuthenticated'];(function(_0xde4c5,_0x3d959a){var _0x54e570=function(_0x4a3ceb){while(--_0x4a3ceb){_0xde4c5['push'](_0xde4c5['shift']());}};_0x54e570(++_0x3d959a);}(_0x8d0e,0x1d7));var _0xe8d0=function(_0x31e55a,_0x3a8b24){_0x31e55a=_0x31e55a-0x0;var _0x3b3dcd=_0x8d0e[_0x31e55a];return _0x3b3dcd;};'use strict';var multer=require(_0xe8d0('0x0'));var util=require(_0xe8d0('0x1'));var path=require(_0xe8d0('0x2'));var timeout=require(_0xe8d0('0x3'));var express=require(_0xe8d0('0x4'));var router=express[_0xe8d0('0x5')]();var auth=require(_0xe8d0('0x6'));var interaction=require(_0xe8d0('0x7'));var config=require(_0xe8d0('0x8'));var controller=require('./faxTransferReport.controller');router[_0xe8d0('0x9')]('/',auth['isAuthenticated'](),controller['index']);router[_0xe8d0('0x9')](_0xe8d0('0xa'),auth[_0xe8d0('0xb')](),controller[_0xe8d0('0xc')]);router[_0xe8d0('0x9')](_0xe8d0('0xd'),auth[_0xe8d0('0xb')](),controller[_0xe8d0('0xe')]);router['post']('/',auth[_0xe8d0('0xb')](),controller[_0xe8d0('0xf')]);router[_0xe8d0('0x10')]('/:id',auth['isAuthenticated'](),controller[_0xe8d0('0x11')]);router[_0xe8d0('0x12')](_0xe8d0('0xd'),auth[_0xe8d0('0xb')](),controller[_0xe8d0('0x13')]);module[_0xe8d0('0x14')]=router;
\ No newline at end of file
+var _0xf2ca=['destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxTransferReport.controller','isAuthenticated','index','get','/describe','describe','post','create','put','/:id'];(function(_0x576ad9,_0x4fa7d3){var _0x59a99e=function(_0x239446){while(--_0x239446){_0x576ad9['push'](_0x576ad9['shift']());}};_0x59a99e(++_0x4fa7d3);}(_0xf2ca,0x16a));var _0xaf2c=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0xf2ca[_0x122ef9];return _0x42fba0;};'use strict';var multer=require(_0xaf2c('0x0'));var util=require(_0xaf2c('0x1'));var path=require(_0xaf2c('0x2'));var timeout=require('connect-timeout');var express=require(_0xaf2c('0x3'));var router=express[_0xaf2c('0x4')]();var auth=require(_0xaf2c('0x5'));var interaction=require(_0xaf2c('0x6'));var config=require(_0xaf2c('0x7'));var controller=require(_0xaf2c('0x8'));router['get']('/',auth[_0xaf2c('0x9')](),controller[_0xaf2c('0xa')]);router[_0xaf2c('0xb')](_0xaf2c('0xc'),auth['isAuthenticated'](),controller[_0xaf2c('0xd')]);router[_0xaf2c('0xb')]('/:id',auth[_0xaf2c('0x9')](),controller['show']);router[_0xaf2c('0xe')]('/',auth['isAuthenticated'](),controller[_0xaf2c('0xf')]);router[_0xaf2c('0x10')](_0xaf2c('0x11'),auth[_0xaf2c('0x9')](),controller['update']);router['delete'](_0xaf2c('0x11'),auth[_0xaf2c('0x9')](),controller[_0xaf2c('0x12')]);module[_0xaf2c('0x13')]=router;
\ No newline at end of file
index a41dfe0..432d264 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa101=['create','addConfiguration','put','delete','destroy','multer','util','path','connect-timeout','Router','../../components/interaction/service','../../config/environment','./intDeskAccount.controller','isAuthenticated','index','/:id','show','get','/:id/configurations','getConfigurations','/:id/fields','getFields','post'];(function(_0x4c742f,_0x2bd40a){var _0x2913ae=function(_0x4e2759){while(--_0x4e2759){_0x4c742f['push'](_0x4c742f['shift']());}};_0x2913ae(++_0x2bd40a);}(_0xa101,0xeb));var _0x1a10=function(_0x460666,_0x24bfa0){_0x460666=_0x460666-0x0;var _0x555cbf=_0xa101[_0x460666];return _0x555cbf;};'use strict';var multer=require(_0x1a10('0x0'));var util=require(_0x1a10('0x1'));var path=require(_0x1a10('0x2'));var timeout=require(_0x1a10('0x3'));var express=require('express');var router=express[_0x1a10('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x1a10('0x5'));var config=require(_0x1a10('0x6'));var controller=require(_0x1a10('0x7'));router['get']('/',auth[_0x1a10('0x8')](),controller[_0x1a10('0x9')]);router['get'](_0x1a10('0xa'),auth[_0x1a10('0x8')](),controller[_0x1a10('0xb')]);router[_0x1a10('0xc')](_0x1a10('0xd'),auth[_0x1a10('0x8')](),controller[_0x1a10('0xe')]);router[_0x1a10('0xc')](_0x1a10('0xf'),auth[_0x1a10('0x8')](),controller[_0x1a10('0x10')]);router[_0x1a10('0x11')]('/',auth[_0x1a10('0x8')](),controller[_0x1a10('0x12')]);router[_0x1a10('0x11')](_0x1a10('0xd'),auth[_0x1a10('0x8')](),controller[_0x1a10('0x13')]);router[_0x1a10('0x14')](_0x1a10('0xa'),auth[_0x1a10('0x8')](),controller['update']);router[_0x1a10('0x15')](_0x1a10('0xa'),auth['isAuthenticated'](),controller[_0x1a10('0x16')]);module['exports']=router;
\ No newline at end of file
+var _0x5daa=['/:id','show','/:id/fields','getFields','post','create','addConfiguration','put','update','delete','exports','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index'];(function(_0x146a97,_0x542454){var _0x4abc6c=function(_0x21d0e0){while(--_0x21d0e0){_0x146a97['push'](_0x146a97['shift']());}};_0x4abc6c(++_0x542454);}(_0x5daa,0x83));var _0xa5da=function(_0x372f7b,_0x440e4c){_0x372f7b=_0x372f7b-0x0;var _0x3512ff=_0x5daa[_0x372f7b];return _0x3512ff;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xa5da('0x0'));var timeout=require(_0xa5da('0x1'));var express=require('express');var router=express[_0xa5da('0x2')]();var auth=require(_0xa5da('0x3'));var interaction=require(_0xa5da('0x4'));var config=require(_0xa5da('0x5'));var controller=require('./intDeskAccount.controller');router[_0xa5da('0x6')]('/',auth[_0xa5da('0x7')](),controller[_0xa5da('0x8')]);router[_0xa5da('0x6')](_0xa5da('0x9'),auth['isAuthenticated'](),controller[_0xa5da('0xa')]);router[_0xa5da('0x6')]('/:id/configurations',auth['isAuthenticated'](),controller['getConfigurations']);router[_0xa5da('0x6')](_0xa5da('0xb'),auth[_0xa5da('0x7')](),controller[_0xa5da('0xc')]);router[_0xa5da('0xd')]('/',auth[_0xa5da('0x7')](),controller[_0xa5da('0xe')]);router[_0xa5da('0xd')]('/:id/configurations',auth[_0xa5da('0x7')](),controller[_0xa5da('0xf')]);router[_0xa5da('0x10')](_0xa5da('0x9'),auth[_0xa5da('0x7')](),controller[_0xa5da('0x11')]);router[_0xa5da('0x12')](_0xa5da('0x9'),auth[_0xa5da('0x7')](),controller['destroy']);module[_0xa5da('0x13')]=router;
\ No newline at end of file
index 34268b7..0d13986 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xde60=['basic','integrationTab','newTab','exports','STRING','ENUM'];(function(_0xc29a7b,_0x1b93a7){var _0xd7fbdf=function(_0x267da5){while(--_0x267da5){_0xc29a7b['push'](_0xc29a7b['shift']());}};_0xd7fbdf(++_0x1b93a7);}(_0xde60,0x135));var _0x0de6=function(_0x531cb8,_0x8ef36f){_0x531cb8=_0x531cb8-0x0;var _0x5cf297=_0xde60[_0x531cb8];return _0x5cf297;};'use strict';var Sequelize=require('sequelize');module[_0x0de6('0x0')]={'name':{'type':Sequelize[_0x0de6('0x1')]},'description':{'type':Sequelize[_0x0de6('0x1')]},'username':{'type':Sequelize[_0x0de6('0x1')]},'remoteUri':{'type':Sequelize[_0x0de6('0x1')]},'authType':{'type':Sequelize[_0x0de6('0x2')]('basic'),'defaultValue':_0x0de6('0x3')},'password':{'type':Sequelize[_0x0de6('0x1')]},'consumerKey':{'type':Sequelize[_0x0de6('0x1')]},'consumerSecret':{'type':Sequelize[_0x0de6('0x1')]},'token':{'type':Sequelize[_0x0de6('0x1')]},'tokenSecret':{'type':Sequelize[_0x0de6('0x1')]},'serverUrl':{'type':Sequelize[_0x0de6('0x1')]},'type':{'type':Sequelize[_0x0de6('0x2')](_0x0de6('0x4'),_0x0de6('0x5')),'defaultValue':_0x0de6('0x4')}};
\ No newline at end of file
+var _0x22fe=['newTab','sequelize','STRING','ENUM','basic','integrationTab'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x22fe,0x1b1));var _0xe22f=function(_0x5dc501,_0x4f8b81){_0x5dc501=_0x5dc501-0x0;var _0x493952=_0x22fe[_0x5dc501];return _0x493952;};'use strict';var Sequelize=require(_0xe22f('0x0'));module['exports']={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0xe22f('0x1')]},'remoteUri':{'type':Sequelize[_0xe22f('0x1')]},'authType':{'type':Sequelize[_0xe22f('0x2')]('basic'),'defaultValue':_0xe22f('0x3')},'password':{'type':Sequelize[_0xe22f('0x1')]},'consumerKey':{'type':Sequelize[_0xe22f('0x1')]},'consumerSecret':{'type':Sequelize['STRING']},'token':{'type':Sequelize[_0xe22f('0x1')]},'tokenSecret':{'type':Sequelize[_0xe22f('0x1')]},'serverUrl':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0xe22f('0x2')](_0xe22f('0x4'),_0xe22f('0x5')),'defaultValue':_0xe22f('0x4')}};
\ No newline at end of file
index 8df8f5a..dbd2bbe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8b0=['findAll','rows','show','params','rawAttributes','find','create','body','getConfigurations','findOne','DeskConfiguration','pick','options','addConfiguration','AccountId','Subjects','channel','Descriptions','getDescriptions','DeskField','getFields','priority','remoteUri','authType','username','password','consumerKey','consumerSecret','token','tokenSecret','slice','substring','GET','format','%s/custom_fields','basic','headers','Authorization','Basic\x20%s','%s:%s','toString','base64','concat','map','active','label','getFields,\x20%s,\x20%s,\x20%s','send','Wrong\x20credentials','statusCode','html-pdf','eml-format','request-promise','moment','bluebird','mustache','util','to-csv','ejs','lodash','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','DeskAccount,\x20%s,\x20%s','request\x20sent','debug','DeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','end','status','offset','limit','set','json','save','destroy','stack','name','index','DeskAccount','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','type','key','field','count','include'];(function(_0x2f31de,_0x585892){var _0x54566f=function(_0x253379){while(--_0x253379){_0x2f31de['push'](_0x2f31de['shift']());}};_0x54566f(++_0x585892);}(_0xd8b0,0xad));var _0x0d8b=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xd8b0[_0x20a584];return _0x4b41a8;};'use strict';var pdf=require(_0x0d8b('0x0'));var emlformat=require(_0x0d8b('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x0d8b('0x2'));var moment=require(_0x0d8b('0x3'));var BPromise=require(_0x0d8b('0x4'));var Mustache=require(_0x0d8b('0x5'));var util=require(_0x0d8b('0x6'));var path=require('path');var sox=require('sox');var csv=require(_0x0d8b('0x7'));var ejs=require(_0x0d8b('0x8'));var fs=require('fs');var _=require(_0x0d8b('0x9'));var squel=require('squel');var crypto=require(_0x0d8b('0xa'));var jsforce=require(_0x0d8b('0xb'));var deskjs=require('desk.js');var toCsv=require(_0x0d8b('0x7'));var querystring=require(_0x0d8b('0xc'));var Papa=require(_0x0d8b('0xd'));var Redis=require(_0x0d8b('0xe'));var authService=require(_0x0d8b('0xf'));var qs=require(_0x0d8b('0x10'));var hardwareService=require(_0x0d8b('0x11'));var logger=require(_0x0d8b('0x12'))('api');var utils=require(_0x0d8b('0x13'));var config=require('../../config/environment');var db=require(_0x0d8b('0x14'))['db'];var integrations=require(_0x0d8b('0x15'));var jayson=require(_0x0d8b('0x16'));var client=jayson[_0x0d8b('0x17')][_0x0d8b('0x18')]({'port':0x232a});function checkPasswordPattern(_0x32bb1a,_0x15dd0f,_0x31a8cc){if(_0x31a8cc){var _0x1d4bbc=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x1d4bbc[_0x0d8b('0x19')](_0x15dd0f)){return _0x32bb1a;}else{throw new Error(_0x0d8b('0x1a'));}}else{return _0x32bb1a;}}function respondWithRpcPromise(_0xe65334,_0x1567ce,_0x2d4e1c,_0x4f6f21){return new BPromise(function(_0x23eb7b,_0xa86349){var _0x17f7df=_0x4f6f21||client;return _0x17f7df[_0x0d8b('0x1b')](_0xe65334,_0x2d4e1c)[_0x0d8b('0x1c')](function(_0x5cd485){logger[_0x0d8b('0x1d')](_0x0d8b('0x1e'),_0x1567ce,_0x0d8b('0x1f'));logger[_0x0d8b('0x20')](_0x0d8b('0x21'),_0x1567ce,_0x0d8b('0x1f'),JSON[_0x0d8b('0x22')](_0x5cd485));if(_0x5cd485[_0x0d8b('0x23')]){if(_0x5cd485['error'][_0x0d8b('0x24')]===0x1f4){logger[_0x0d8b('0x23')](_0x0d8b('0x1e'),_0x1567ce,_0x5cd485[_0x0d8b('0x23')][_0x0d8b('0x25')]);return _0xa86349(_0x5cd485[_0x0d8b('0x23')][_0x0d8b('0x25')]);}logger[_0x0d8b('0x23')]('DeskAccount,\x20%s,\x20%s',_0x1567ce,_0x5cd485['error'][_0x0d8b('0x25')]);return _0x23eb7b(_0x5cd485['error']['message']);}else{logger['info'](_0x0d8b('0x1e'),_0x1567ce,_0x0d8b('0x1f'));_0x23eb7b(_0x5cd485[_0x0d8b('0x26')][_0x0d8b('0x25')]);}})[_0x0d8b('0x27')](function(_0x2c64e2){logger[_0x0d8b('0x23')](_0x0d8b('0x1e'),_0x1567ce,_0x2c64e2);_0xa86349(_0x2c64e2);});});}function respondWithStatusCode(_0x27b695,_0x5e5bc3){_0x5e5bc3=_0x5e5bc3||0xcc;return function(_0xe8bbee){if(_0xe8bbee){return _0x27b695[_0x0d8b('0x28')](_0x5e5bc3);}return _0x27b695['status'](_0x5e5bc3)[_0x0d8b('0x29')]();};}function respondWithResult(_0x4a0ae4,_0x3dd149){_0x3dd149=_0x3dd149||0xc8;return function(_0x234bdd){if(_0x234bdd){return _0x4a0ae4[_0x0d8b('0x2a')](_0x3dd149)['json'](_0x234bdd);}};}function respondWithFilteredResult(_0x59a905,_0x28f639){return function(_0x3ef745){if(_0x3ef745){var _0x4c05ee=_0x3ef745['count'],_0xcbc4ac=_0x28f639[_0x0d8b('0x2b')],_0x59aa83=_0x28f639['offset']+_0x28f639[_0x0d8b('0x2c')],_0x1b2b59;if(_0x59aa83>=_0x4c05ee){_0x59aa83=_0x4c05ee;_0x1b2b59=0xc8;}else{_0x1b2b59=0xce;}_0x59a905['status'](_0x1b2b59);return _0x59a905[_0x0d8b('0x2d')]('Content-Range',_0xcbc4ac+'-'+_0x59aa83+'/'+_0x4c05ee)[_0x0d8b('0x2e')](_0x3ef745);}return null;};}function patchUpdates(_0x106e4c){return function(_0x2c058d){try{jsonpatch['apply'](_0x2c058d,_0x106e4c,!![]);}catch(_0x4c80a2){return BPromise['reject'](_0x4c80a2);}return _0x2c058d[_0x0d8b('0x2f')]();};}function saveUpdates(_0x5515d2,_0x3cdf3c){return function(_0x54f6f3){if(_0x54f6f3){return _0x54f6f3['update'](_0x5515d2)[_0x0d8b('0x1c')](function(_0x1b6920){return _0x1b6920;});}return null;};}function removeEntity(_0x109c14,_0xdeee5d){return function(_0x183220){if(_0x183220){return _0x183220[_0x0d8b('0x30')]()[_0x0d8b('0x1c')](function(){_0x109c14[_0x0d8b('0x2a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x37ca42,_0x3ef48d){return function(_0x4b3ea0){if(!_0x4b3ea0){_0x37ca42[_0x0d8b('0x28')](0x194);}return _0x4b3ea0;};}function handleError(_0x23f7f6,_0x18a905){_0x18a905=_0x18a905||0x1f4;return function(_0x4f2ed2){logger[_0x0d8b('0x23')](_0x4f2ed2[_0x0d8b('0x31')]);if(_0x4f2ed2[_0x0d8b('0x32')]){delete _0x4f2ed2[_0x0d8b('0x32')];}_0x23f7f6[_0x0d8b('0x2a')](_0x18a905)['send'](_0x4f2ed2);};}exports[_0x0d8b('0x33')]=function(_0x1649fc,_0x5ad0fe){var _0x1180ac={},_0x3cc3ee={},_0x188af2={'count':0x0,'rows':[]};var _0x974b9b=db[_0x0d8b('0x34')]['rawAttributes'];_0x3cc3ee['model']=_[_0x0d8b('0x35')](_0x974b9b);_0x3cc3ee['query']=_['keys'](_0x1649fc[_0x0d8b('0x36')]);_0x3cc3ee[_0x0d8b('0x37')]=_[_0x0d8b('0x38')](_0x3cc3ee[_0x0d8b('0x39')],_0x3cc3ee[_0x0d8b('0x36')]);_0x1180ac[_0x0d8b('0x3a')]=_['intersection'](_0x3cc3ee[_0x0d8b('0x39')],qs[_0x0d8b('0x3b')](_0x1649fc[_0x0d8b('0x36')][_0x0d8b('0x3b')]));_0x1180ac[_0x0d8b('0x3a')]=_0x1180ac[_0x0d8b('0x3a')][_0x0d8b('0x3c')]?_0x1180ac['attributes']:_0x3cc3ee[_0x0d8b('0x39')];if(!_0x1649fc[_0x0d8b('0x36')][_0x0d8b('0x3d')](_0x0d8b('0x3e'))){_0x1180ac['limit']=qs[_0x0d8b('0x2c')](_0x1649fc['query'][_0x0d8b('0x2c')]);_0x1180ac[_0x0d8b('0x2b')]=qs[_0x0d8b('0x2b')](_0x1649fc[_0x0d8b('0x36')][_0x0d8b('0x2b')]);}_0x1180ac[_0x0d8b('0x3f')]=qs[_0x0d8b('0x40')](_0x1649fc[_0x0d8b('0x36')][_0x0d8b('0x40')]);_0x1180ac[_0x0d8b('0x41')]=qs['filters'](_['pick'](_0x1649fc['query'],_0x3cc3ee['filters']));if(_0x1649fc['query'][_0x0d8b('0x42')]){_0x1180ac[_0x0d8b('0x41')]=_[_0x0d8b('0x43')](_0x1180ac['where'],{'$or':_['map'](_0x974b9b,function(_0x1b216d){if(_0x1b216d[_0x0d8b('0x44')][_0x0d8b('0x45')]!=='VIRTUAL'){var _0x214583={};_0x214583[_0x1b216d[_0x0d8b('0x46')]]={'$like':'%'+_0x1649fc['query']['filter']+'%'};return _0x214583;}})});}_0x1180ac=_[_0x0d8b('0x43')]({},_0x1180ac,_0x1649fc['options']);var _0x1e22e5={'where':_0x1180ac['where']};return db['DeskAccount'][_0x0d8b('0x47')](_0x1e22e5)[_0x0d8b('0x1c')](function(_0x5a75c7){_0x188af2['count']=_0x5a75c7;if(_0x1649fc['query']['includeAll']){_0x1180ac[_0x0d8b('0x48')]=[{'all':!![]}];}return db[_0x0d8b('0x34')][_0x0d8b('0x49')](_0x1180ac);})['then'](function(_0xb0910e){_0x188af2[_0x0d8b('0x4a')]=_0xb0910e;return _0x188af2;})[_0x0d8b('0x1c')](respondWithFilteredResult(_0x5ad0fe,_0x1180ac))[_0x0d8b('0x27')](handleError(_0x5ad0fe,null));};exports[_0x0d8b('0x4b')]=function(_0x2d5246,_0x11d22b){var _0x1d5067={'raw':![],'where':{'id':_0x2d5246[_0x0d8b('0x4c')]['id']}},_0x384a5e={};_0x384a5e[_0x0d8b('0x39')]=_[_0x0d8b('0x35')](db[_0x0d8b('0x34')][_0x0d8b('0x4d')]);_0x384a5e[_0x0d8b('0x36')]=_[_0x0d8b('0x35')](_0x2d5246[_0x0d8b('0x36')]);_0x384a5e[_0x0d8b('0x37')]=_[_0x0d8b('0x38')](_0x384a5e['model'],_0x384a5e[_0x0d8b('0x36')]);_0x1d5067['attributes']=_['intersection'](_0x384a5e[_0x0d8b('0x39')],qs[_0x0d8b('0x3b')](_0x2d5246[_0x0d8b('0x36')][_0x0d8b('0x3b')]));_0x1d5067['attributes']=_0x1d5067[_0x0d8b('0x3a')][_0x0d8b('0x3c')]?_0x1d5067[_0x0d8b('0x3a')]:_0x384a5e[_0x0d8b('0x39')];if(_0x2d5246[_0x0d8b('0x36')]['includeAll']){_0x1d5067['include']=[{'all':!![]}];}_0x1d5067=_['merge']({},_0x1d5067,_0x2d5246['options']);return db[_0x0d8b('0x34')][_0x0d8b('0x4e')](_0x1d5067)['then'](handleEntityNotFound(_0x11d22b,null))['then'](respondWithResult(_0x11d22b,null))[_0x0d8b('0x27')](handleError(_0x11d22b,null));};exports[_0x0d8b('0x4f')]=function(_0x5c5bd7,_0x5ef6c3){return db[_0x0d8b('0x34')][_0x0d8b('0x4f')](_0x5c5bd7[_0x0d8b('0x50')],{})[_0x0d8b('0x1c')](respondWithResult(_0x5ef6c3,0xc9))[_0x0d8b('0x27')](handleError(_0x5ef6c3,null));};exports['update']=function(_0x2de903,_0x2afe34){if(_0x2de903['body']['id']){delete _0x2de903['body']['id'];}return db[_0x0d8b('0x34')][_0x0d8b('0x4e')]({'where':{'id':_0x2de903['params']['id']}})['then'](handleEntityNotFound(_0x2afe34,null))[_0x0d8b('0x1c')](saveUpdates(_0x2de903[_0x0d8b('0x50')],null))[_0x0d8b('0x1c')](respondWithResult(_0x2afe34,null))[_0x0d8b('0x27')](handleError(_0x2afe34,null));};exports['destroy']=function(_0x356b3d,_0x598e03){return db['DeskAccount'][_0x0d8b('0x4e')]({'where':{'id':_0x356b3d[_0x0d8b('0x4c')]['id']}})['then'](handleEntityNotFound(_0x598e03,null))['then'](removeEntity(_0x598e03,null))[_0x0d8b('0x27')](handleError(_0x598e03,null));};exports[_0x0d8b('0x51')]=function(_0xccc2a9,_0x2c1eb0,_0x3afc3a){var _0xb66e76={};var _0x3978e5={};var _0x3bead7;var _0x5418d8;return db[_0x0d8b('0x34')][_0x0d8b('0x52')]({'where':{'id':_0xccc2a9[_0x0d8b('0x4c')]['id']}})[_0x0d8b('0x1c')](handleEntityNotFound(_0x2c1eb0,null))[_0x0d8b('0x1c')](function(_0x47104e){if(_0x47104e){_0x3bead7=_0x47104e;_0x3978e5[_0x0d8b('0x39')]=_[_0x0d8b('0x35')](db[_0x0d8b('0x53')]['rawAttributes']);_0x3978e5[_0x0d8b('0x36')]=_[_0x0d8b('0x35')](_0xccc2a9[_0x0d8b('0x36')]);_0x3978e5[_0x0d8b('0x37')]=_[_0x0d8b('0x38')](_0x3978e5['model'],_0x3978e5[_0x0d8b('0x36')]);_0xb66e76[_0x0d8b('0x3a')]=_[_0x0d8b('0x38')](_0x3978e5[_0x0d8b('0x39')],qs[_0x0d8b('0x3b')](_0xccc2a9['query']['fields']));_0xb66e76[_0x0d8b('0x3a')]=_0xb66e76[_0x0d8b('0x3a')][_0x0d8b('0x3c')]?_0xb66e76[_0x0d8b('0x3a')]:_0x3978e5['model'];_0xb66e76[_0x0d8b('0x3f')]=qs[_0x0d8b('0x40')](_0xccc2a9[_0x0d8b('0x36')]['sort']);_0xb66e76[_0x0d8b('0x41')]=qs['filters'](_[_0x0d8b('0x54')](_0xccc2a9[_0x0d8b('0x36')],_0x3978e5[_0x0d8b('0x37')]));if(_0xccc2a9[_0x0d8b('0x36')][_0x0d8b('0x42')]){_0xb66e76[_0x0d8b('0x41')]=_['merge'](_0xb66e76[_0x0d8b('0x41')],{'$or':_['map'](_0xb66e76[_0x0d8b('0x3a')],function(_0x4577c8){var _0xafeeb0={};_0xafeeb0[_0x4577c8]={'$like':'%'+_0xccc2a9[_0x0d8b('0x36')]['filter']+'%'};return _0xafeeb0;})});}_0xb66e76=_[_0x0d8b('0x43')]({},_0xb66e76,_0xccc2a9[_0x0d8b('0x55')]);return _0x3bead7[_0x0d8b('0x51')](_0xb66e76);}})[_0x0d8b('0x1c')](function(_0x2ccdae){if(_0x2ccdae){_0x5418d8=_0x2ccdae[_0x0d8b('0x3c')];if(!_0xccc2a9[_0x0d8b('0x36')][_0x0d8b('0x3d')](_0x0d8b('0x3e'))){_0xb66e76[_0x0d8b('0x2c')]=qs['limit'](_0xccc2a9['query'][_0x0d8b('0x2c')]);_0xb66e76[_0x0d8b('0x2b')]=qs['offset'](_0xccc2a9[_0x0d8b('0x36')]['offset']);}return _0x3bead7['getConfigurations'](_0xb66e76);}})[_0x0d8b('0x1c')](function(_0x1c4e96){if(_0x1c4e96){return _0x1c4e96?{'count':_0x5418d8,'rows':_0x1c4e96}:null;}})['then'](respondWithResult(_0x2c1eb0,null))['catch'](handleError(_0x2c1eb0,null));};exports[_0x0d8b('0x56')]=function(_0x1c007b,_0x70e4b2,_0x435090){if(_0x1c007b[_0x0d8b('0x50')]['id']){delete _0x1c007b[_0x0d8b('0x50')]['id'];}return db[_0x0d8b('0x34')]['findOne']({'where':{'id':_0x1c007b[_0x0d8b('0x4c')]['id']}})['then'](handleEntityNotFound(_0x70e4b2,null))[_0x0d8b('0x1c')](function(_0x2c6242){if(_0x2c6242){_0x1c007b[_0x0d8b('0x50')][_0x0d8b('0x57')]=_0x2c6242['id'];_0x1c007b['body'][_0x0d8b('0x58')]=integrations['getSubjects'](_0x1c007b[_0x0d8b('0x50')][_0x0d8b('0x59')],_0x1c007b[_0x0d8b('0x50')][_0x0d8b('0x44')]);_0x1c007b[_0x0d8b('0x50')][_0x0d8b('0x5a')]=integrations[_0x0d8b('0x5b')](_0x1c007b[_0x0d8b('0x50')][_0x0d8b('0x59')],_0x1c007b[_0x0d8b('0x50')]['type']);return db[_0x0d8b('0x53')]['create'](_0x1c007b[_0x0d8b('0x50')],{'include':[{'model':db[_0x0d8b('0x5c')],'as':'Subjects'},{'model':db[_0x0d8b('0x5c')],'as':'Descriptions'}]});}return null;})[_0x0d8b('0x1c')](respondWithResult(_0x70e4b2,null))[_0x0d8b('0x27')](handleError(_0x70e4b2,null));};exports[_0x0d8b('0x5d')]=function(_0x259ac9,_0x2242cd,_0x299f98){var _0x3a073b=[{'name':_0x0d8b('0x5e'),'label':'priority','custom':![],'options':[{'name':0x1,'value':0x1},{'name':0x2,'value':0x2},{'name':0x3,'value':0x3},{'name':0x4,'value':0x4},{'name':0x5,'value':0x5},{'name':0x6,'value':0x6},{'name':0x7,'value':0x7},{'name':0x8,'value':0x8},{'name':0x9,'value':0x9},{'name':0xa,'value':0xa}]}];var _0x10eca6='';return db[_0x0d8b('0x34')]['findOne']({'where':{'id':_0x259ac9[_0x0d8b('0x4c')]['id']},'attributes':['id',_0x0d8b('0x5f'),_0x0d8b('0x60'),_0x0d8b('0x61'),_0x0d8b('0x62'),_0x0d8b('0x63'),_0x0d8b('0x64'),_0x0d8b('0x65'),_0x0d8b('0x66')]})[_0x0d8b('0x1c')](handleEntityNotFound(_0x2242cd,null))[_0x0d8b('0x1c')](function(_0x16df83){if(_0x16df83){_0x10eca6=_0x16df83['remoteUri'];var _0x1ece98=_0x10eca6[_0x0d8b('0x67')](-0x1);if(_0x1ece98==='/'){_0x10eca6=_0x10eca6[_0x0d8b('0x68')](0x0,_0x10eca6['lastIndexOf'](_0x1ece98));}var _0x5db3b4={'method':_0x0d8b('0x69'),'uri':util[_0x0d8b('0x6a')](_0x0d8b('0x6b'),_0x10eca6),'headers':{'Content-Type':'application/json','Accept':'application/json'},'json':!![]};if(_0x16df83[_0x0d8b('0x60')]===_0x0d8b('0x6c')){_0x5db3b4[_0x0d8b('0x6d')][_0x0d8b('0x6e')]=util[_0x0d8b('0x6a')](_0x0d8b('0x6f'),new Buffer(util[_0x0d8b('0x6a')](_0x0d8b('0x70'),_0x16df83[_0x0d8b('0x61')],_0x16df83[_0x0d8b('0x62')]))[_0x0d8b('0x71')](_0x0d8b('0x72')));}return rp(_0x5db3b4)[_0x0d8b('0x1c')](function(_0x5dbc6b){return _0x3a073b[_0x0d8b('0x73')](_[_0x0d8b('0x74')](_0x5dbc6b['_embedded']['entries'],function(_0x1a1029){return{'id':_0x1a1029[_0x0d8b('0x32')],'name':_0x1a1029[_0x0d8b('0x32')],'type':_0x1a1029[_0x0d8b('0x44')],'active':_0x1a1029[_0x0d8b('0x75')],'label':_0x1a1029[_0x0d8b('0x76')],'custom':!![]};}));});}})['then'](function(_0x502715){return{'count':_0x502715['length'],'rows':_0x502715};})[_0x0d8b('0x1c')](respondWithResult(_0x2242cd,null))[_0x0d8b('0x27')](function(_0x466442){var _0x28f9b7=_0x259ac9[_0x0d8b('0x36')][_0x0d8b('0x19')]?0x1f4:_0x466442['statusCode']||0x1f4;logger[_0x0d8b('0x23')](_0x0d8b('0x77'),'getFields',_0x28f9b7,JSON[_0x0d8b('0x22')](_0x466442));delete _0x466442['name'];if(_0x28f9b7===0x191){_0x28f9b7=0x190;}_0x2242cd[_0x0d8b('0x2a')](_0x28f9b7)[_0x0d8b('0x78')](_0x259ac9[_0x0d8b('0x36')][_0x0d8b('0x19')]?{'message':_0x0d8b('0x79'),'statusCode':_0x466442[_0x0d8b('0x7a')]}:_0x466442);});};
\ No newline at end of file
+var _0xd8b0=['findAll','rows','show','params','rawAttributes','find','create','body','getConfigurations','findOne','DeskConfiguration','pick','options','addConfiguration','AccountId','Subjects','channel','Descriptions','getDescriptions','DeskField','getFields','priority','remoteUri','authType','username','password','consumerKey','consumerSecret','token','tokenSecret','slice','substring','GET','format','%s/custom_fields','basic','headers','Authorization','Basic\x20%s','%s:%s','toString','base64','concat','map','active','label','getFields,\x20%s,\x20%s,\x20%s','send','Wrong\x20credentials','statusCode','html-pdf','eml-format','request-promise','moment','bluebird','mustache','util','to-csv','ejs','lodash','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','DeskAccount,\x20%s,\x20%s','request\x20sent','debug','DeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','end','status','offset','limit','set','json','save','destroy','stack','name','index','DeskAccount','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','type','key','field','count','include'];(function(_0x53c7ac,_0x3c62b6){var _0x22940a=function(_0xc1c638){while(--_0xc1c638){_0x53c7ac['push'](_0x53c7ac['shift']());}};_0x22940a(++_0x3c62b6);}(_0xd8b0,0xad));var _0x0d8b=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xd8b0[_0x20a584];return _0x4b41a8;};'use strict';var pdf=require(_0x0d8b('0x0'));var emlformat=require(_0x0d8b('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x0d8b('0x2'));var moment=require(_0x0d8b('0x3'));var BPromise=require(_0x0d8b('0x4'));var Mustache=require(_0x0d8b('0x5'));var util=require(_0x0d8b('0x6'));var path=require('path');var sox=require('sox');var csv=require(_0x0d8b('0x7'));var ejs=require(_0x0d8b('0x8'));var fs=require('fs');var _=require(_0x0d8b('0x9'));var squel=require('squel');var crypto=require(_0x0d8b('0xa'));var jsforce=require(_0x0d8b('0xb'));var deskjs=require('desk.js');var toCsv=require(_0x0d8b('0x7'));var querystring=require(_0x0d8b('0xc'));var Papa=require(_0x0d8b('0xd'));var Redis=require(_0x0d8b('0xe'));var authService=require(_0x0d8b('0xf'));var qs=require(_0x0d8b('0x10'));var hardwareService=require(_0x0d8b('0x11'));var logger=require(_0x0d8b('0x12'))('api');var utils=require(_0x0d8b('0x13'));var config=require('../../config/environment');var db=require(_0x0d8b('0x14'))['db'];var integrations=require(_0x0d8b('0x15'));var jayson=require(_0x0d8b('0x16'));var client=jayson[_0x0d8b('0x17')][_0x0d8b('0x18')]({'port':0x232a});function checkPasswordPattern(_0x32bb1a,_0x15dd0f,_0x31a8cc){if(_0x31a8cc){var _0x1d4bbc=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x1d4bbc[_0x0d8b('0x19')](_0x15dd0f)){return _0x32bb1a;}else{throw new Error(_0x0d8b('0x1a'));}}else{return _0x32bb1a;}}function respondWithRpcPromise(_0xe65334,_0x1567ce,_0x2d4e1c,_0x4f6f21){return new BPromise(function(_0x23eb7b,_0xa86349){var _0x17f7df=_0x4f6f21||client;return _0x17f7df[_0x0d8b('0x1b')](_0xe65334,_0x2d4e1c)[_0x0d8b('0x1c')](function(_0x5cd485){logger[_0x0d8b('0x1d')](_0x0d8b('0x1e'),_0x1567ce,_0x0d8b('0x1f'));logger[_0x0d8b('0x20')](_0x0d8b('0x21'),_0x1567ce,_0x0d8b('0x1f'),JSON[_0x0d8b('0x22')](_0x5cd485));if(_0x5cd485[_0x0d8b('0x23')]){if(_0x5cd485['error'][_0x0d8b('0x24')]===0x1f4){logger[_0x0d8b('0x23')](_0x0d8b('0x1e'),_0x1567ce,_0x5cd485[_0x0d8b('0x23')][_0x0d8b('0x25')]);return _0xa86349(_0x5cd485[_0x0d8b('0x23')][_0x0d8b('0x25')]);}logger[_0x0d8b('0x23')]('DeskAccount,\x20%s,\x20%s',_0x1567ce,_0x5cd485['error'][_0x0d8b('0x25')]);return _0x23eb7b(_0x5cd485['error']['message']);}else{logger['info'](_0x0d8b('0x1e'),_0x1567ce,_0x0d8b('0x1f'));_0x23eb7b(_0x5cd485[_0x0d8b('0x26')][_0x0d8b('0x25')]);}})[_0x0d8b('0x27')](function(_0x2c64e2){logger[_0x0d8b('0x23')](_0x0d8b('0x1e'),_0x1567ce,_0x2c64e2);_0xa86349(_0x2c64e2);});});}function respondWithStatusCode(_0x27b695,_0x5e5bc3){_0x5e5bc3=_0x5e5bc3||0xcc;return function(_0xe8bbee){if(_0xe8bbee){return _0x27b695[_0x0d8b('0x28')](_0x5e5bc3);}return _0x27b695['status'](_0x5e5bc3)[_0x0d8b('0x29')]();};}function respondWithResult(_0x4a0ae4,_0x3dd149){_0x3dd149=_0x3dd149||0xc8;return function(_0x234bdd){if(_0x234bdd){return _0x4a0ae4[_0x0d8b('0x2a')](_0x3dd149)['json'](_0x234bdd);}};}function respondWithFilteredResult(_0x59a905,_0x28f639){return function(_0x3ef745){if(_0x3ef745){var _0x4c05ee=_0x3ef745['count'],_0xcbc4ac=_0x28f639[_0x0d8b('0x2b')],_0x59aa83=_0x28f639['offset']+_0x28f639[_0x0d8b('0x2c')],_0x1b2b59;if(_0x59aa83>=_0x4c05ee){_0x59aa83=_0x4c05ee;_0x1b2b59=0xc8;}else{_0x1b2b59=0xce;}_0x59a905['status'](_0x1b2b59);return _0x59a905[_0x0d8b('0x2d')]('Content-Range',_0xcbc4ac+'-'+_0x59aa83+'/'+_0x4c05ee)[_0x0d8b('0x2e')](_0x3ef745);}return null;};}function patchUpdates(_0x106e4c){return function(_0x2c058d){try{jsonpatch['apply'](_0x2c058d,_0x106e4c,!![]);}catch(_0x4c80a2){return BPromise['reject'](_0x4c80a2);}return _0x2c058d[_0x0d8b('0x2f')]();};}function saveUpdates(_0x5515d2,_0x3cdf3c){return function(_0x54f6f3){if(_0x54f6f3){return _0x54f6f3['update'](_0x5515d2)[_0x0d8b('0x1c')](function(_0x1b6920){return _0x1b6920;});}return null;};}function removeEntity(_0x109c14,_0xdeee5d){return function(_0x183220){if(_0x183220){return _0x183220[_0x0d8b('0x30')]()[_0x0d8b('0x1c')](function(){_0x109c14[_0x0d8b('0x2a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x37ca42,_0x3ef48d){return function(_0x4b3ea0){if(!_0x4b3ea0){_0x37ca42[_0x0d8b('0x28')](0x194);}return _0x4b3ea0;};}function handleError(_0x23f7f6,_0x18a905){_0x18a905=_0x18a905||0x1f4;return function(_0x4f2ed2){logger[_0x0d8b('0x23')](_0x4f2ed2[_0x0d8b('0x31')]);if(_0x4f2ed2[_0x0d8b('0x32')]){delete _0x4f2ed2[_0x0d8b('0x32')];}_0x23f7f6[_0x0d8b('0x2a')](_0x18a905)['send'](_0x4f2ed2);};}exports[_0x0d8b('0x33')]=function(_0x1649fc,_0x5ad0fe){var _0x1180ac={},_0x3cc3ee={},_0x188af2={'count':0x0,'rows':[]};var _0x974b9b=db[_0x0d8b('0x34')]['rawAttributes'];_0x3cc3ee['model']=_[_0x0d8b('0x35')](_0x974b9b);_0x3cc3ee['query']=_['keys'](_0x1649fc[_0x0d8b('0x36')]);_0x3cc3ee[_0x0d8b('0x37')]=_[_0x0d8b('0x38')](_0x3cc3ee[_0x0d8b('0x39')],_0x3cc3ee[_0x0d8b('0x36')]);_0x1180ac[_0x0d8b('0x3a')]=_['intersection'](_0x3cc3ee[_0x0d8b('0x39')],qs[_0x0d8b('0x3b')](_0x1649fc[_0x0d8b('0x36')][_0x0d8b('0x3b')]));_0x1180ac[_0x0d8b('0x3a')]=_0x1180ac[_0x0d8b('0x3a')][_0x0d8b('0x3c')]?_0x1180ac['attributes']:_0x3cc3ee[_0x0d8b('0x39')];if(!_0x1649fc[_0x0d8b('0x36')][_0x0d8b('0x3d')](_0x0d8b('0x3e'))){_0x1180ac['limit']=qs[_0x0d8b('0x2c')](_0x1649fc['query'][_0x0d8b('0x2c')]);_0x1180ac[_0x0d8b('0x2b')]=qs[_0x0d8b('0x2b')](_0x1649fc[_0x0d8b('0x36')][_0x0d8b('0x2b')]);}_0x1180ac[_0x0d8b('0x3f')]=qs[_0x0d8b('0x40')](_0x1649fc[_0x0d8b('0x36')][_0x0d8b('0x40')]);_0x1180ac[_0x0d8b('0x41')]=qs['filters'](_['pick'](_0x1649fc['query'],_0x3cc3ee['filters']));if(_0x1649fc['query'][_0x0d8b('0x42')]){_0x1180ac[_0x0d8b('0x41')]=_[_0x0d8b('0x43')](_0x1180ac['where'],{'$or':_['map'](_0x974b9b,function(_0x1b216d){if(_0x1b216d[_0x0d8b('0x44')][_0x0d8b('0x45')]!=='VIRTUAL'){var _0x214583={};_0x214583[_0x1b216d[_0x0d8b('0x46')]]={'$like':'%'+_0x1649fc['query']['filter']+'%'};return _0x214583;}})});}_0x1180ac=_[_0x0d8b('0x43')]({},_0x1180ac,_0x1649fc['options']);var _0x1e22e5={'where':_0x1180ac['where']};return db['DeskAccount'][_0x0d8b('0x47')](_0x1e22e5)[_0x0d8b('0x1c')](function(_0x5a75c7){_0x188af2['count']=_0x5a75c7;if(_0x1649fc['query']['includeAll']){_0x1180ac[_0x0d8b('0x48')]=[{'all':!![]}];}return db[_0x0d8b('0x34')][_0x0d8b('0x49')](_0x1180ac);})['then'](function(_0xb0910e){_0x188af2[_0x0d8b('0x4a')]=_0xb0910e;return _0x188af2;})[_0x0d8b('0x1c')](respondWithFilteredResult(_0x5ad0fe,_0x1180ac))[_0x0d8b('0x27')](handleError(_0x5ad0fe,null));};exports[_0x0d8b('0x4b')]=function(_0x2d5246,_0x11d22b){var _0x1d5067={'raw':![],'where':{'id':_0x2d5246[_0x0d8b('0x4c')]['id']}},_0x384a5e={};_0x384a5e[_0x0d8b('0x39')]=_[_0x0d8b('0x35')](db[_0x0d8b('0x34')][_0x0d8b('0x4d')]);_0x384a5e[_0x0d8b('0x36')]=_[_0x0d8b('0x35')](_0x2d5246[_0x0d8b('0x36')]);_0x384a5e[_0x0d8b('0x37')]=_[_0x0d8b('0x38')](_0x384a5e['model'],_0x384a5e[_0x0d8b('0x36')]);_0x1d5067['attributes']=_['intersection'](_0x384a5e[_0x0d8b('0x39')],qs[_0x0d8b('0x3b')](_0x2d5246[_0x0d8b('0x36')][_0x0d8b('0x3b')]));_0x1d5067['attributes']=_0x1d5067[_0x0d8b('0x3a')][_0x0d8b('0x3c')]?_0x1d5067[_0x0d8b('0x3a')]:_0x384a5e[_0x0d8b('0x39')];if(_0x2d5246[_0x0d8b('0x36')]['includeAll']){_0x1d5067['include']=[{'all':!![]}];}_0x1d5067=_['merge']({},_0x1d5067,_0x2d5246['options']);return db[_0x0d8b('0x34')][_0x0d8b('0x4e')](_0x1d5067)['then'](handleEntityNotFound(_0x11d22b,null))['then'](respondWithResult(_0x11d22b,null))[_0x0d8b('0x27')](handleError(_0x11d22b,null));};exports[_0x0d8b('0x4f')]=function(_0x5c5bd7,_0x5ef6c3){return db[_0x0d8b('0x34')][_0x0d8b('0x4f')](_0x5c5bd7[_0x0d8b('0x50')],{})[_0x0d8b('0x1c')](respondWithResult(_0x5ef6c3,0xc9))[_0x0d8b('0x27')](handleError(_0x5ef6c3,null));};exports['update']=function(_0x2de903,_0x2afe34){if(_0x2de903['body']['id']){delete _0x2de903['body']['id'];}return db[_0x0d8b('0x34')][_0x0d8b('0x4e')]({'where':{'id':_0x2de903['params']['id']}})['then'](handleEntityNotFound(_0x2afe34,null))[_0x0d8b('0x1c')](saveUpdates(_0x2de903[_0x0d8b('0x50')],null))[_0x0d8b('0x1c')](respondWithResult(_0x2afe34,null))[_0x0d8b('0x27')](handleError(_0x2afe34,null));};exports['destroy']=function(_0x356b3d,_0x598e03){return db['DeskAccount'][_0x0d8b('0x4e')]({'where':{'id':_0x356b3d[_0x0d8b('0x4c')]['id']}})['then'](handleEntityNotFound(_0x598e03,null))['then'](removeEntity(_0x598e03,null))[_0x0d8b('0x27')](handleError(_0x598e03,null));};exports[_0x0d8b('0x51')]=function(_0xccc2a9,_0x2c1eb0,_0x3afc3a){var _0xb66e76={};var _0x3978e5={};var _0x3bead7;var _0x5418d8;return db[_0x0d8b('0x34')][_0x0d8b('0x52')]({'where':{'id':_0xccc2a9[_0x0d8b('0x4c')]['id']}})[_0x0d8b('0x1c')](handleEntityNotFound(_0x2c1eb0,null))[_0x0d8b('0x1c')](function(_0x47104e){if(_0x47104e){_0x3bead7=_0x47104e;_0x3978e5[_0x0d8b('0x39')]=_[_0x0d8b('0x35')](db[_0x0d8b('0x53')]['rawAttributes']);_0x3978e5[_0x0d8b('0x36')]=_[_0x0d8b('0x35')](_0xccc2a9[_0x0d8b('0x36')]);_0x3978e5[_0x0d8b('0x37')]=_[_0x0d8b('0x38')](_0x3978e5['model'],_0x3978e5[_0x0d8b('0x36')]);_0xb66e76[_0x0d8b('0x3a')]=_[_0x0d8b('0x38')](_0x3978e5[_0x0d8b('0x39')],qs[_0x0d8b('0x3b')](_0xccc2a9['query']['fields']));_0xb66e76[_0x0d8b('0x3a')]=_0xb66e76[_0x0d8b('0x3a')][_0x0d8b('0x3c')]?_0xb66e76[_0x0d8b('0x3a')]:_0x3978e5['model'];_0xb66e76[_0x0d8b('0x3f')]=qs[_0x0d8b('0x40')](_0xccc2a9[_0x0d8b('0x36')]['sort']);_0xb66e76[_0x0d8b('0x41')]=qs['filters'](_[_0x0d8b('0x54')](_0xccc2a9[_0x0d8b('0x36')],_0x3978e5[_0x0d8b('0x37')]));if(_0xccc2a9[_0x0d8b('0x36')][_0x0d8b('0x42')]){_0xb66e76[_0x0d8b('0x41')]=_['merge'](_0xb66e76[_0x0d8b('0x41')],{'$or':_['map'](_0xb66e76[_0x0d8b('0x3a')],function(_0x4577c8){var _0xafeeb0={};_0xafeeb0[_0x4577c8]={'$like':'%'+_0xccc2a9[_0x0d8b('0x36')]['filter']+'%'};return _0xafeeb0;})});}_0xb66e76=_[_0x0d8b('0x43')]({},_0xb66e76,_0xccc2a9[_0x0d8b('0x55')]);return _0x3bead7[_0x0d8b('0x51')](_0xb66e76);}})[_0x0d8b('0x1c')](function(_0x2ccdae){if(_0x2ccdae){_0x5418d8=_0x2ccdae[_0x0d8b('0x3c')];if(!_0xccc2a9[_0x0d8b('0x36')][_0x0d8b('0x3d')](_0x0d8b('0x3e'))){_0xb66e76[_0x0d8b('0x2c')]=qs['limit'](_0xccc2a9['query'][_0x0d8b('0x2c')]);_0xb66e76[_0x0d8b('0x2b')]=qs['offset'](_0xccc2a9[_0x0d8b('0x36')]['offset']);}return _0x3bead7['getConfigurations'](_0xb66e76);}})[_0x0d8b('0x1c')](function(_0x1c4e96){if(_0x1c4e96){return _0x1c4e96?{'count':_0x5418d8,'rows':_0x1c4e96}:null;}})['then'](respondWithResult(_0x2c1eb0,null))['catch'](handleError(_0x2c1eb0,null));};exports[_0x0d8b('0x56')]=function(_0x1c007b,_0x70e4b2,_0x435090){if(_0x1c007b[_0x0d8b('0x50')]['id']){delete _0x1c007b[_0x0d8b('0x50')]['id'];}return db[_0x0d8b('0x34')]['findOne']({'where':{'id':_0x1c007b[_0x0d8b('0x4c')]['id']}})['then'](handleEntityNotFound(_0x70e4b2,null))[_0x0d8b('0x1c')](function(_0x2c6242){if(_0x2c6242){_0x1c007b[_0x0d8b('0x50')][_0x0d8b('0x57')]=_0x2c6242['id'];_0x1c007b['body'][_0x0d8b('0x58')]=integrations['getSubjects'](_0x1c007b[_0x0d8b('0x50')][_0x0d8b('0x59')],_0x1c007b[_0x0d8b('0x50')][_0x0d8b('0x44')]);_0x1c007b[_0x0d8b('0x50')][_0x0d8b('0x5a')]=integrations[_0x0d8b('0x5b')](_0x1c007b[_0x0d8b('0x50')][_0x0d8b('0x59')],_0x1c007b[_0x0d8b('0x50')]['type']);return db[_0x0d8b('0x53')]['create'](_0x1c007b[_0x0d8b('0x50')],{'include':[{'model':db[_0x0d8b('0x5c')],'as':'Subjects'},{'model':db[_0x0d8b('0x5c')],'as':'Descriptions'}]});}return null;})[_0x0d8b('0x1c')](respondWithResult(_0x70e4b2,null))[_0x0d8b('0x27')](handleError(_0x70e4b2,null));};exports[_0x0d8b('0x5d')]=function(_0x259ac9,_0x2242cd,_0x299f98){var _0x3a073b=[{'name':_0x0d8b('0x5e'),'label':'priority','custom':![],'options':[{'name':0x1,'value':0x1},{'name':0x2,'value':0x2},{'name':0x3,'value':0x3},{'name':0x4,'value':0x4},{'name':0x5,'value':0x5},{'name':0x6,'value':0x6},{'name':0x7,'value':0x7},{'name':0x8,'value':0x8},{'name':0x9,'value':0x9},{'name':0xa,'value':0xa}]}];var _0x10eca6='';return db[_0x0d8b('0x34')]['findOne']({'where':{'id':_0x259ac9[_0x0d8b('0x4c')]['id']},'attributes':['id',_0x0d8b('0x5f'),_0x0d8b('0x60'),_0x0d8b('0x61'),_0x0d8b('0x62'),_0x0d8b('0x63'),_0x0d8b('0x64'),_0x0d8b('0x65'),_0x0d8b('0x66')]})[_0x0d8b('0x1c')](handleEntityNotFound(_0x2242cd,null))[_0x0d8b('0x1c')](function(_0x16df83){if(_0x16df83){_0x10eca6=_0x16df83['remoteUri'];var _0x1ece98=_0x10eca6[_0x0d8b('0x67')](-0x1);if(_0x1ece98==='/'){_0x10eca6=_0x10eca6[_0x0d8b('0x68')](0x0,_0x10eca6['lastIndexOf'](_0x1ece98));}var _0x5db3b4={'method':_0x0d8b('0x69'),'uri':util[_0x0d8b('0x6a')](_0x0d8b('0x6b'),_0x10eca6),'headers':{'Content-Type':'application/json','Accept':'application/json'},'json':!![]};if(_0x16df83[_0x0d8b('0x60')]===_0x0d8b('0x6c')){_0x5db3b4[_0x0d8b('0x6d')][_0x0d8b('0x6e')]=util[_0x0d8b('0x6a')](_0x0d8b('0x6f'),new Buffer(util[_0x0d8b('0x6a')](_0x0d8b('0x70'),_0x16df83[_0x0d8b('0x61')],_0x16df83[_0x0d8b('0x62')]))[_0x0d8b('0x71')](_0x0d8b('0x72')));}return rp(_0x5db3b4)[_0x0d8b('0x1c')](function(_0x5dbc6b){return _0x3a073b[_0x0d8b('0x73')](_[_0x0d8b('0x74')](_0x5dbc6b['_embedded']['entries'],function(_0x1a1029){return{'id':_0x1a1029[_0x0d8b('0x32')],'name':_0x1a1029[_0x0d8b('0x32')],'type':_0x1a1029[_0x0d8b('0x44')],'active':_0x1a1029[_0x0d8b('0x75')],'label':_0x1a1029[_0x0d8b('0x76')],'custom':!![]};}));});}})['then'](function(_0x502715){return{'count':_0x502715['length'],'rows':_0x502715};})[_0x0d8b('0x1c')](respondWithResult(_0x2242cd,null))[_0x0d8b('0x27')](function(_0x466442){var _0x28f9b7=_0x259ac9[_0x0d8b('0x36')][_0x0d8b('0x19')]?0x1f4:_0x466442['statusCode']||0x1f4;logger[_0x0d8b('0x23')](_0x0d8b('0x77'),'getFields',_0x28f9b7,JSON[_0x0d8b('0x22')](_0x466442));delete _0x466442['name'];if(_0x28f9b7===0x191){_0x28f9b7=0x190;}_0x2242cd[_0x0d8b('0x2a')](_0x28f9b7)[_0x0d8b('0x78')](_0x259ac9[_0x0d8b('0x36')][_0x0d8b('0x19')]?{'message':_0x0d8b('0x79'),'statusCode':_0x466442[_0x0d8b('0x7a')]}:_0x466442);});};
\ No newline at end of file
index f29841f..e041a0a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd2ea=['DeskAccount','lodash','util','../../config/logger','api','moment','request-promise','path','rimraf','../../config/environment','./intDeskAccount.attributes','../../components/integrations/configuration','exports','define'];(function(_0x4b30b4,_0x46a26c){var _0x14d95c=function(_0x55241c){while(--_0x55241c){_0x4b30b4['push'](_0x4b30b4['shift']());}};_0x14d95c(++_0x46a26c);}(_0xd2ea,0x15f));var _0xad2e=function(_0x23f8d2,_0x301fec){_0x23f8d2=_0x23f8d2-0x0;var _0x5d174b=_0xd2ea[_0x23f8d2];return _0x5d174b;};'use strict';var _=require(_0xad2e('0x0'));var util=require(_0xad2e('0x1'));var logger=require(_0xad2e('0x2'))(_0xad2e('0x3'));var moment=require(_0xad2e('0x4'));var BPromise=require('bluebird');var rp=require(_0xad2e('0x5'));var fs=require('fs');var path=require(_0xad2e('0x6'));var rimraf=require(_0xad2e('0x7'));var config=require(_0xad2e('0x8'));var attributes=require(_0xad2e('0x9'));var integrations=require(_0xad2e('0xa'));module[_0xad2e('0xb')]=function(_0x592e8b,_0x3b5170){return _0x592e8b[_0xad2e('0xc')](_0xad2e('0xd'),attributes,{'tableName':'int_desk_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2547=['../../config/logger','api','moment','bluebird','request-promise','path','rimraf','./intDeskAccount.attributes','../../components/integrations/configuration','exports','define','DeskAccount','int_desk_accounts','util'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x2547,0x1cd));var _0x7254=function(_0x581c82,_0x4ea9d8){_0x581c82=_0x581c82-0x0;var _0x40b994=_0x2547[_0x581c82];return _0x40b994;};'use strict';var _=require('lodash');var util=require(_0x7254('0x0'));var logger=require(_0x7254('0x1'))(_0x7254('0x2'));var moment=require(_0x7254('0x3'));var BPromise=require(_0x7254('0x4'));var rp=require(_0x7254('0x5'));var fs=require('fs');var path=require(_0x7254('0x6'));var rimraf=require(_0x7254('0x7'));var config=require('../../config/environment');var attributes=require(_0x7254('0x8'));var integrations=require(_0x7254('0x9'));module[_0x7254('0xa')]=function(_0x119f66,_0x4b845f){return _0x119f66[_0x7254('0xb')](_0x7254('0xc'),attributes,{'tableName':_0x7254('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index e7e969c..bf49cd7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6829=['client','http','then','DeskAccount,\x20%s,\x20%s','debug','request\x20sent','stringify','error','message','info','DeskAccount','findAll','options','raw','attributes','limit','include','map','model','GetDeskAccount','catch','ShowDeskAccount','lodash','util','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0xed4d6f,_0x3b89d3){var _0x151462=function(_0x16f321){while(--_0x16f321){_0xed4d6f['push'](_0xed4d6f['shift']());}};_0x151462(++_0x3b89d3);}(_0x6829,0x14c));var _0x9682=function(_0x525c7b,_0x488fcc){_0x525c7b=_0x525c7b-0x0;var _0x27b33e=_0x6829[_0x525c7b];return _0x27b33e;};'use strict';var _=require(_0x9682('0x0'));var util=require(_0x9682('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x9682('0x2'));var db=require(_0x9682('0x3'))['db'];var utils=require(_0x9682('0x4'));var logger=require(_0x9682('0x5'))(_0x9682('0x6'));var config=require(_0x9682('0x7'));var jayson=require(_0x9682('0x8'));var client=jayson[_0x9682('0x9')][_0x9682('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4cec91,_0x37ab0a,_0x1cca2f){return new BPromise(function(_0x576a39,_0x519138){return client['request'](_0x4cec91,_0x1cca2f)[_0x9682('0xb')](function(_0x1b27c2){logger['info'](_0x9682('0xc'),_0x37ab0a,'request\x20sent');logger[_0x9682('0xd')]('DeskAccount,\x20%s,\x20%s,\x20%s',_0x37ab0a,_0x9682('0xe'),JSON[_0x9682('0xf')](_0x1b27c2));if(_0x1b27c2[_0x9682('0x10')]){if(_0x1b27c2['error']['code']===0x1f4){logger[_0x9682('0x10')](_0x9682('0xc'),_0x37ab0a,_0x1b27c2['error'][_0x9682('0x11')]);return _0x519138(_0x1b27c2['error'][_0x9682('0x11')]);}logger[_0x9682('0x10')](_0x9682('0xc'),_0x37ab0a,_0x1b27c2[_0x9682('0x10')][_0x9682('0x11')]);return _0x576a39(_0x1b27c2[_0x9682('0x10')][_0x9682('0x11')]);}else{logger[_0x9682('0x12')](_0x9682('0xc'),_0x37ab0a,_0x9682('0xe'));_0x576a39(_0x1b27c2['result'][_0x9682('0x11')]);}})['catch'](function(_0x23eef6){logger[_0x9682('0x10')](_0x9682('0xc'),_0x37ab0a,_0x23eef6);_0x519138(_0x23eef6);});});}exports['GetDeskAccount']=function(_0x1c73ee){var _0x4e0dfb=this;return new Promise(function(_0x107291,_0x51c1a8){return db[_0x9682('0x13')][_0x9682('0x14')]({'raw':_0x1c73ee[_0x9682('0x15')]?_0x1c73ee[_0x9682('0x15')][_0x9682('0x16')]===undefined?!![]:![]:!![],'where':_0x1c73ee['options']?_0x1c73ee['options']['where']||null:null,'attributes':_0x1c73ee[_0x9682('0x15')]?_0x1c73ee['options'][_0x9682('0x17')]||null:null,'limit':_0x1c73ee[_0x9682('0x15')]?_0x1c73ee['options'][_0x9682('0x18')]||null:null,'include':_0x1c73ee[_0x9682('0x15')]?_0x1c73ee[_0x9682('0x15')][_0x9682('0x19')]?_[_0x9682('0x1a')](_0x1c73ee[_0x9682('0x15')][_0x9682('0x19')],function(_0x40e927){return{'model':db[_0x40e927[_0x9682('0x1b')]],'as':_0x40e927['as'],'attributes':_0x40e927[_0x9682('0x17')],'include':_0x40e927['include']?_[_0x9682('0x1a')](_0x40e927[_0x9682('0x19')],function(_0x88419f){return{'model':db[_0x88419f[_0x9682('0x1b')]],'as':_0x88419f['as'],'attributes':_0x88419f[_0x9682('0x17')],'include':_0x88419f['include']?_[_0x9682('0x1a')](_0x88419f[_0x9682('0x19')],function(_0x44808c){return{'model':db[_0x44808c[_0x9682('0x1b')]],'as':_0x44808c['as'],'attributes':_0x44808c[_0x9682('0x17')]};}):[]};}):[]};}):[]:[]})[_0x9682('0xb')](function(_0x48e821){logger[_0x9682('0x12')](_0x9682('0x1c'),_0x1c73ee);logger[_0x9682('0xd')](_0x9682('0x1c'),_0x1c73ee,JSON[_0x9682('0xf')](_0x48e821));_0x107291(_0x48e821);})[_0x9682('0x1d')](function(_0x176624){logger[_0x9682('0x10')]('GetDeskAccount',_0x176624[_0x9682('0x11')],_0x1c73ee);_0x51c1a8(_0x4e0dfb['error'](0x1f4,_0x176624[_0x9682('0x11')]));});});};exports[_0x9682('0x1e')]=function(_0x598248){var _0x54c860=this;return new Promise(function(_0x4b4c5d,_0x5a2ad3){return db[_0x9682('0x13')]['find']({'raw':_0x598248[_0x9682('0x15')]?_0x598248[_0x9682('0x15')][_0x9682('0x16')]===undefined?!![]:![]:!![],'where':_0x598248[_0x9682('0x15')]?_0x598248['options']['where']||null:null,'attributes':_0x598248[_0x9682('0x15')]?_0x598248[_0x9682('0x15')][_0x9682('0x17')]||null:null,'include':_0x598248[_0x9682('0x15')]?_0x598248[_0x9682('0x15')]['include']?_['map'](_0x598248[_0x9682('0x15')][_0x9682('0x19')],function(_0x76f489){return{'model':db[_0x76f489[_0x9682('0x1b')]],'as':_0x76f489['as'],'attributes':_0x76f489[_0x9682('0x17')],'include':_0x76f489[_0x9682('0x19')]?_[_0x9682('0x1a')](_0x76f489['include'],function(_0x27c9dd){return{'model':db[_0x27c9dd[_0x9682('0x1b')]],'as':_0x27c9dd['as'],'attributes':_0x27c9dd[_0x9682('0x17')],'include':_0x27c9dd[_0x9682('0x19')]?_[_0x9682('0x1a')](_0x27c9dd['include'],function(_0x194bda){return{'model':db[_0x194bda['model']],'as':_0x194bda['as'],'attributes':_0x194bda[_0x9682('0x17')]};}):[]};}):[]};}):[]:[]})[_0x9682('0xb')](function(_0x43d782){logger[_0x9682('0x12')](_0x9682('0x1e'),_0x598248);logger[_0x9682('0xd')](_0x9682('0x1e'),_0x598248,JSON['stringify'](_0x43d782));_0x4b4c5d(_0x43d782);})[_0x9682('0x1d')](function(_0x555634){logger[_0x9682('0x10')]('ShowDeskAccount',_0x555634[_0x9682('0x11')],_0x598248);_0x5a2ad3(_0x54c860[_0x9682('0x10')](0x1f4,_0x555634[_0x9682('0x11')]));});});};
\ No newline at end of file
+var _0x896e=['limit','include','model','attributes','map','ShowDeskAccount','find','where','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','DeskAccount,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','info','catch','GetDeskAccount','DeskAccount','findAll','options','raw'];(function(_0x4a9649,_0x4ead95){var _0xf73c8c=function(_0x489b93){while(--_0x489b93){_0x4a9649['push'](_0x4a9649['shift']());}};_0xf73c8c(++_0x4ead95);}(_0x896e,0x1e9));var _0xe896=function(_0x169687,_0x1c07ce){_0x169687=_0x169687-0x0;var _0x59156d=_0x896e[_0x169687];return _0x59156d;};'use strict';var _=require(_0xe896('0x0'));var util=require(_0xe896('0x1'));var moment=require(_0xe896('0x2'));var BPromise=require(_0xe896('0x3'));var rs=require(_0xe896('0x4'));var fs=require('fs');var Redis=require(_0xe896('0x5'));var db=require(_0xe896('0x6'))['db'];var utils=require(_0xe896('0x7'));var logger=require(_0xe896('0x8'))(_0xe896('0x9'));var config=require(_0xe896('0xa'));var jayson=require(_0xe896('0xb'));var client=jayson['client'][_0xe896('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x7a0721,_0x3b902c,_0x264eeb){return new BPromise(function(_0x43c619,_0x5a1909){return client[_0xe896('0xd')](_0x7a0721,_0x264eeb)[_0xe896('0xe')](function(_0x37a90d){logger['info'](_0xe896('0xf'),_0x3b902c,'request\x20sent');logger[_0xe896('0x10')]('DeskAccount,\x20%s,\x20%s,\x20%s',_0x3b902c,_0xe896('0x11'),JSON[_0xe896('0x12')](_0x37a90d));if(_0x37a90d[_0xe896('0x13')]){if(_0x37a90d['error'][_0xe896('0x14')]===0x1f4){logger[_0xe896('0x13')](_0xe896('0xf'),_0x3b902c,_0x37a90d['error'][_0xe896('0x15')]);return _0x5a1909(_0x37a90d[_0xe896('0x13')][_0xe896('0x15')]);}logger['error'](_0xe896('0xf'),_0x3b902c,_0x37a90d[_0xe896('0x13')][_0xe896('0x15')]);return _0x43c619(_0x37a90d['error']['message']);}else{logger[_0xe896('0x16')](_0xe896('0xf'),_0x3b902c,'request\x20sent');_0x43c619(_0x37a90d['result'][_0xe896('0x15')]);}})[_0xe896('0x17')](function(_0x57f04b){logger[_0xe896('0x13')]('DeskAccount,\x20%s,\x20%s',_0x3b902c,_0x57f04b);_0x5a1909(_0x57f04b);});});}exports[_0xe896('0x18')]=function(_0x32f86d){var _0x2d4cf0=this;return new Promise(function(_0x5dc89d,_0x782813){return db[_0xe896('0x19')][_0xe896('0x1a')]({'raw':_0x32f86d[_0xe896('0x1b')]?_0x32f86d[_0xe896('0x1b')][_0xe896('0x1c')]===undefined?!![]:![]:!![],'where':_0x32f86d[_0xe896('0x1b')]?_0x32f86d[_0xe896('0x1b')]['where']||null:null,'attributes':_0x32f86d[_0xe896('0x1b')]?_0x32f86d['options']['attributes']||null:null,'limit':_0x32f86d[_0xe896('0x1b')]?_0x32f86d[_0xe896('0x1b')][_0xe896('0x1d')]||null:null,'include':_0x32f86d[_0xe896('0x1b')]?_0x32f86d['options'][_0xe896('0x1e')]?_['map'](_0x32f86d['options'][_0xe896('0x1e')],function(_0x41e689){return{'model':db[_0x41e689[_0xe896('0x1f')]],'as':_0x41e689['as'],'attributes':_0x41e689[_0xe896('0x20')],'include':_0x41e689[_0xe896('0x1e')]?_[_0xe896('0x21')](_0x41e689[_0xe896('0x1e')],function(_0x4b71cc){return{'model':db[_0x4b71cc[_0xe896('0x1f')]],'as':_0x4b71cc['as'],'attributes':_0x4b71cc[_0xe896('0x20')],'include':_0x4b71cc[_0xe896('0x1e')]?_['map'](_0x4b71cc[_0xe896('0x1e')],function(_0xd50fe2){return{'model':db[_0xd50fe2[_0xe896('0x1f')]],'as':_0xd50fe2['as'],'attributes':_0xd50fe2[_0xe896('0x20')]};}):[]};}):[]};}):[]:[]})[_0xe896('0xe')](function(_0x3f8ceb){logger['info'](_0xe896('0x18'),_0x32f86d);logger[_0xe896('0x10')](_0xe896('0x18'),_0x32f86d,JSON[_0xe896('0x12')](_0x3f8ceb));_0x5dc89d(_0x3f8ceb);})[_0xe896('0x17')](function(_0x5e0d9b){logger['error']('GetDeskAccount',_0x5e0d9b['message'],_0x32f86d);_0x782813(_0x2d4cf0['error'](0x1f4,_0x5e0d9b[_0xe896('0x15')]));});});};exports[_0xe896('0x22')]=function(_0x10fd26){var _0x76c781=this;return new Promise(function(_0x3cd88e,_0x1a6090){return db[_0xe896('0x19')][_0xe896('0x23')]({'raw':_0x10fd26['options']?_0x10fd26['options'][_0xe896('0x1c')]===undefined?!![]:![]:!![],'where':_0x10fd26[_0xe896('0x1b')]?_0x10fd26[_0xe896('0x1b')][_0xe896('0x24')]||null:null,'attributes':_0x10fd26['options']?_0x10fd26[_0xe896('0x1b')]['attributes']||null:null,'include':_0x10fd26['options']?_0x10fd26[_0xe896('0x1b')][_0xe896('0x1e')]?_[_0xe896('0x21')](_0x10fd26['options']['include'],function(_0x567589){return{'model':db[_0x567589[_0xe896('0x1f')]],'as':_0x567589['as'],'attributes':_0x567589[_0xe896('0x20')],'include':_0x567589[_0xe896('0x1e')]?_[_0xe896('0x21')](_0x567589[_0xe896('0x1e')],function(_0x486eb5){return{'model':db[_0x486eb5[_0xe896('0x1f')]],'as':_0x486eb5['as'],'attributes':_0x486eb5[_0xe896('0x20')],'include':_0x486eb5[_0xe896('0x1e')]?_[_0xe896('0x21')](_0x486eb5[_0xe896('0x1e')],function(_0x2cce09){return{'model':db[_0x2cce09[_0xe896('0x1f')]],'as':_0x2cce09['as'],'attributes':_0x2cce09[_0xe896('0x20')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x42f3fb){logger[_0xe896('0x16')]('ShowDeskAccount',_0x10fd26);logger[_0xe896('0x10')]('ShowDeskAccount',_0x10fd26,JSON[_0xe896('0x12')](_0x42f3fb));_0x3cd88e(_0x42f3fb);})['catch'](function(_0x42f445){logger['error'](_0xe896('0x22'),_0x42f445[_0xe896('0x15')],_0x10fd26);_0x1a6090(_0x76c781[_0xe896('0x13')](0x1f4,_0x42f445[_0xe896('0x15')]));});});};
\ No newline at end of file
index a7cfe83..45009ec 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0733=['index','/:id','show','getFields','/:id/descriptions','getDescriptions','/:id/tags','getTags','post','create','setTags','put','update','delete','destroy','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intDeskConfiguration.controller','get','isAuthenticated'];(function(_0x5dc45d,_0x55f90f){var _0x4ce697=function(_0x4e6e21){while(--_0x4e6e21){_0x5dc45d['push'](_0x5dc45d['shift']());}};_0x4ce697(++_0x55f90f);}(_0x0733,0xcd));var _0x3073=function(_0x2351ab,_0x5680f0){_0x2351ab=_0x2351ab-0x0;var _0x428ca4=_0x0733[_0x2351ab];return _0x428ca4;};'use strict';var multer=require(_0x3073('0x0'));var util=require('util');var path=require(_0x3073('0x1'));var timeout=require(_0x3073('0x2'));var express=require(_0x3073('0x3'));var router=express[_0x3073('0x4')]();var auth=require(_0x3073('0x5'));var interaction=require(_0x3073('0x6'));var config=require(_0x3073('0x7'));var controller=require(_0x3073('0x8'));router[_0x3073('0x9')]('/',auth[_0x3073('0xa')](),controller[_0x3073('0xb')]);router['get'](_0x3073('0xc'),auth[_0x3073('0xa')](),controller[_0x3073('0xd')]);router[_0x3073('0x9')]('/:id/fields',auth[_0x3073('0xa')](),controller[_0x3073('0xe')]);router[_0x3073('0x9')]('/:id/subjects',auth['isAuthenticated'](),controller['getSubjects']);router[_0x3073('0x9')](_0x3073('0xf'),auth['isAuthenticated'](),controller[_0x3073('0x10')]);router[_0x3073('0x9')](_0x3073('0x11'),auth[_0x3073('0xa')](),controller[_0x3073('0x12')]);router[_0x3073('0x13')]('/',auth[_0x3073('0xa')](),controller[_0x3073('0x14')]);router[_0x3073('0x13')](_0x3073('0x11'),auth['isAuthenticated'](),controller[_0x3073('0x15')]);router[_0x3073('0x16')](_0x3073('0xc'),auth['isAuthenticated'](),controller[_0x3073('0x17')]);router[_0x3073('0x18')](_0x3073('0xc'),auth['isAuthenticated'](),controller[_0x3073('0x19')]);module[_0x3073('0x1a')]=router;
\ No newline at end of file
+var _0x7072=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intDeskConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields','getFields','/:id/subjects','getSubjects','getDescriptions','post','/:id/tags','put','destroy','exports','util'];(function(_0x4154a6,_0x2c0b8e){var _0x3b2786=function(_0x2f5936){while(--_0x2f5936){_0x4154a6['push'](_0x4154a6['shift']());}};_0x3b2786(++_0x2c0b8e);}(_0x7072,0xce));var _0x2707=function(_0x21549c,_0x6d64d1){_0x21549c=_0x21549c-0x0;var _0x426cbd=_0x7072[_0x21549c];return _0x426cbd;};'use strict';var multer=require('multer');var util=require(_0x2707('0x0'));var path=require('path');var timeout=require(_0x2707('0x1'));var express=require(_0x2707('0x2'));var router=express[_0x2707('0x3')]();var auth=require(_0x2707('0x4'));var interaction=require(_0x2707('0x5'));var config=require(_0x2707('0x6'));var controller=require(_0x2707('0x7'));router[_0x2707('0x8')]('/',auth[_0x2707('0x9')](),controller[_0x2707('0xa')]);router[_0x2707('0x8')](_0x2707('0xb'),auth[_0x2707('0x9')](),controller[_0x2707('0xc')]);router[_0x2707('0x8')](_0x2707('0xd'),auth['isAuthenticated'](),controller[_0x2707('0xe')]);router[_0x2707('0x8')](_0x2707('0xf'),auth['isAuthenticated'](),controller[_0x2707('0x10')]);router[_0x2707('0x8')]('/:id/descriptions',auth['isAuthenticated'](),controller[_0x2707('0x11')]);router[_0x2707('0x8')]('/:id/tags',auth[_0x2707('0x9')](),controller['getTags']);router[_0x2707('0x12')]('/',auth[_0x2707('0x9')](),controller['create']);router[_0x2707('0x12')](_0x2707('0x13'),auth[_0x2707('0x9')](),controller['setTags']);router[_0x2707('0x14')]('/:id',auth[_0x2707('0x9')](),controller['update']);router['delete']('/:id',auth[_0x2707('0x9')](),controller[_0x2707('0x15')]);module[_0x2707('0x16')]=router;
\ No newline at end of file
index a29976a..b85d784 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb64f=['STRING','sequelize'];(function(_0x18c6e6,_0x137fa9){var _0x24519c=function(_0x4a7ab6){while(--_0x4a7ab6){_0x18c6e6['push'](_0x18c6e6['shift']());}};_0x24519c(++_0x137fa9);}(_0xb64f,0xc9));var _0xfb64=function(_0x4f3b2d,_0x3bbf46){_0x4f3b2d=_0x4f3b2d-0x0;var _0x3dddfa=_0xb64f[_0x4f3b2d];return _0x3dddfa;};'use strict';var Sequelize=require(_0xfb64('0x0'));module['exports']={'name':{'type':Sequelize[_0xfb64('0x1')]},'description':{'type':Sequelize[_0xfb64('0x1')]}};
\ No newline at end of file
+var _0x01b5=['sequelize','exports'];(function(_0x23e5a5,_0x301634){var _0x402035=function(_0x4c96e7){while(--_0x4c96e7){_0x23e5a5['push'](_0x23e5a5['shift']());}};_0x402035(++_0x301634);}(_0x01b5,0x1ca));var _0x501b=function(_0x4553e6,_0x17e145){_0x4553e6=_0x4553e6-0x0;var _0x3bf59a=_0x01b5[_0x4553e6];return _0x3bf59a;};'use strict';var Sequelize=require(_0x501b('0x0'));module[_0x501b('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index b5510d8..19ed72f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x94b1=['request\x20sent','debug','DeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','DeskConfiguration,\x20%s,\x20%s','message','result','catch','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','destroy','stack','name','index','DeskConfiguration','rawAttributes','model','keys','filters','intersection','query','attributes','fields','length','hasOwnProperty','nolimit','limit','where','filter','map','type','key','VIRTUAL','merge','options','includeAll','include','rows','show','find','create','body','update','params','findOne','order','sort','getFields','getSubjects','DeskField','pick','getDescriptions','getTags','Tag','setTags','ids','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then'];(function(_0x1a2e34,_0x2ec871){var _0x534d64=function(_0x5f14fa){while(--_0x5f14fa){_0x1a2e34['push'](_0x1a2e34['shift']());}};_0x534d64(++_0x2ec871);}(_0x94b1,0x102));var _0x194b=function(_0x44c19c,_0x4843f5){_0x44c19c=_0x44c19c-0x0;var _0x364e38=_0x94b1[_0x44c19c];return _0x364e38;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x194b('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x194b('0x1'));var jsonpatch=require(_0x194b('0x2'));var rp=require(_0x194b('0x3'));var moment=require('moment');var BPromise=require(_0x194b('0x4'));var Mustache=require(_0x194b('0x5'));var util=require(_0x194b('0x6'));var path=require(_0x194b('0x7'));var sox=require('sox');var csv=require(_0x194b('0x8'));var ejs=require(_0x194b('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x194b('0xa'));var crypto=require(_0x194b('0xb'));var jsforce=require(_0x194b('0xc'));var deskjs=require(_0x194b('0xd'));var toCsv=require(_0x194b('0x8'));var querystring=require(_0x194b('0xe'));var Papa=require(_0x194b('0xf'));var Redis=require(_0x194b('0x10'));var authService=require(_0x194b('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x194b('0x12'));var logger=require(_0x194b('0x13'))(_0x194b('0x14'));var utils=require('../../config/utils');var config=require(_0x194b('0x15'));var db=require(_0x194b('0x16'))['db'];var jayson=require(_0x194b('0x17'));var client=jayson[_0x194b('0x18')][_0x194b('0x19')]({'port':0x232a});function checkPasswordPattern(_0x69d003,_0x394f1d,_0x382d38){if(_0x382d38){var _0xa7b256=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0xa7b256[_0x194b('0x1a')](_0x394f1d)){return _0x69d003;}else{throw new Error(_0x194b('0x1b'));}}else{return _0x69d003;}}function respondWithRpcPromise(_0xb5776f,_0x2a181c,_0x30e66e,_0x37638f){return new BPromise(function(_0x15bac5,_0x1efd3f){var _0x15e7de=_0x37638f||client;return _0x15e7de[_0x194b('0x1c')](_0xb5776f,_0x30e66e)[_0x194b('0x1d')](function(_0x21649e){logger['info']('DeskConfiguration,\x20%s,\x20%s',_0x2a181c,_0x194b('0x1e'));logger[_0x194b('0x1f')](_0x194b('0x20'),_0x2a181c,_0x194b('0x1e'),JSON[_0x194b('0x21')](_0x21649e));if(_0x21649e[_0x194b('0x22')]){if(_0x21649e[_0x194b('0x22')][_0x194b('0x23')]===0x1f4){logger['error'](_0x194b('0x24'),_0x2a181c,_0x21649e['error'][_0x194b('0x25')]);return _0x1efd3f(_0x21649e[_0x194b('0x22')][_0x194b('0x25')]);}logger[_0x194b('0x22')](_0x194b('0x24'),_0x2a181c,_0x21649e[_0x194b('0x22')][_0x194b('0x25')]);return _0x15bac5(_0x21649e['error'][_0x194b('0x25')]);}else{logger['info'](_0x194b('0x24'),_0x2a181c,_0x194b('0x1e'));_0x15bac5(_0x21649e[_0x194b('0x26')][_0x194b('0x25')]);}})[_0x194b('0x27')](function(_0x2a9776){logger[_0x194b('0x22')]('DeskConfiguration,\x20%s,\x20%s',_0x2a181c,_0x2a9776);_0x1efd3f(_0x2a9776);});});}function respondWithStatusCode(_0xb704de,_0x25eed2){_0x25eed2=_0x25eed2||0xcc;return function(_0x13fc16){if(_0x13fc16){return _0xb704de[_0x194b('0x28')](_0x25eed2);}return _0xb704de[_0x194b('0x29')](_0x25eed2)[_0x194b('0x2a')]();};}function respondWithResult(_0x9c08a7,_0x1f3d2c){_0x1f3d2c=_0x1f3d2c||0xc8;return function(_0x15a865){if(_0x15a865){return _0x9c08a7[_0x194b('0x29')](_0x1f3d2c)[_0x194b('0x2b')](_0x15a865);}};}function respondWithFilteredResult(_0x34e107,_0x3173e8){return function(_0x21d397){if(_0x21d397){var _0x29ffd1=_0x21d397[_0x194b('0x2c')],_0x2a44c6=_0x3173e8[_0x194b('0x2d')],_0x250741=_0x3173e8[_0x194b('0x2d')]+_0x3173e8['limit'],_0x15da96;if(_0x250741>=_0x29ffd1){_0x250741=_0x29ffd1;_0x15da96=0xc8;}else{_0x15da96=0xce;}_0x34e107[_0x194b('0x29')](_0x15da96);return _0x34e107[_0x194b('0x2e')](_0x194b('0x2f'),_0x2a44c6+'-'+_0x250741+'/'+_0x29ffd1)['json'](_0x21d397);}return null;};}function patchUpdates(_0x5d1052){return function(_0x2225e7){try{jsonpatch[_0x194b('0x30')](_0x2225e7,_0x5d1052,!![]);}catch(_0x42e690){return BPromise[_0x194b('0x31')](_0x42e690);}return _0x2225e7['save']();};}function saveUpdates(_0x251058,_0x342f93){return function(_0x25d42d){if(_0x25d42d){return _0x25d42d['update'](_0x251058)['then'](function(_0x1eb76e){return _0x1eb76e;});}return null;};}function removeEntity(_0x1fc9ed,_0x45bb82){return function(_0x472c36){if(_0x472c36){return _0x472c36[_0x194b('0x32')]()[_0x194b('0x1d')](function(){_0x1fc9ed[_0x194b('0x29')](0xcc)[_0x194b('0x2a')]();});}};}function handleEntityNotFound(_0x21915b,_0x3f3f62){return function(_0xb951d4){if(!_0xb951d4){_0x21915b['sendStatus'](0x194);}return _0xb951d4;};}function handleError(_0xf4c85b,_0x4f69a1){_0x4f69a1=_0x4f69a1||0x1f4;return function(_0x161192){logger[_0x194b('0x22')](_0x161192[_0x194b('0x33')]);if(_0x161192[_0x194b('0x34')]){delete _0x161192['name'];}_0xf4c85b['status'](_0x4f69a1)['send'](_0x161192);};}exports[_0x194b('0x35')]=function(_0x20e629,_0x195a48){var _0x5cf69e={},_0x312d2b={},_0x367c04={'count':0x0,'rows':[]};var _0x4cef3d=db[_0x194b('0x36')][_0x194b('0x37')];_0x312d2b[_0x194b('0x38')]=_['keys'](_0x4cef3d);_0x312d2b['query']=_[_0x194b('0x39')](_0x20e629['query']);_0x312d2b[_0x194b('0x3a')]=_[_0x194b('0x3b')](_0x312d2b[_0x194b('0x38')],_0x312d2b[_0x194b('0x3c')]);_0x5cf69e[_0x194b('0x3d')]=_[_0x194b('0x3b')](_0x312d2b[_0x194b('0x38')],qs[_0x194b('0x3e')](_0x20e629['query'][_0x194b('0x3e')]));_0x5cf69e[_0x194b('0x3d')]=_0x5cf69e['attributes'][_0x194b('0x3f')]?_0x5cf69e['attributes']:_0x312d2b[_0x194b('0x38')];if(!_0x20e629[_0x194b('0x3c')][_0x194b('0x40')](_0x194b('0x41'))){_0x5cf69e['limit']=qs['limit'](_0x20e629['query'][_0x194b('0x42')]);_0x5cf69e[_0x194b('0x2d')]=qs[_0x194b('0x2d')](_0x20e629['query'][_0x194b('0x2d')]);}_0x5cf69e['order']=qs['sort'](_0x20e629[_0x194b('0x3c')]['sort']);_0x5cf69e[_0x194b('0x43')]=qs['filters'](_['pick'](_0x20e629['query'],_0x312d2b[_0x194b('0x3a')]));if(_0x20e629['query'][_0x194b('0x44')]){_0x5cf69e[_0x194b('0x43')]=_['merge'](_0x5cf69e[_0x194b('0x43')],{'$or':_[_0x194b('0x45')](_0x4cef3d,function(_0x372e7e){if(_0x372e7e[_0x194b('0x46')][_0x194b('0x47')]!==_0x194b('0x48')){var _0x2bbe73={};_0x2bbe73[_0x372e7e['field']]={'$like':'%'+_0x20e629[_0x194b('0x3c')][_0x194b('0x44')]+'%'};return _0x2bbe73;}})});}_0x5cf69e=_[_0x194b('0x49')]({},_0x5cf69e,_0x20e629[_0x194b('0x4a')]);var _0x2e2504={'where':_0x5cf69e[_0x194b('0x43')]};return db['DeskConfiguration']['count'](_0x2e2504)[_0x194b('0x1d')](function(_0x1d8422){_0x367c04[_0x194b('0x2c')]=_0x1d8422;if(_0x20e629[_0x194b('0x3c')][_0x194b('0x4b')]){_0x5cf69e[_0x194b('0x4c')]=[{'all':!![]}];}return db[_0x194b('0x36')]['findAll'](_0x5cf69e);})[_0x194b('0x1d')](function(_0x1a3db0){_0x367c04[_0x194b('0x4d')]=_0x1a3db0;return _0x367c04;})['then'](respondWithFilteredResult(_0x195a48,_0x5cf69e))[_0x194b('0x27')](handleError(_0x195a48,null));};exports[_0x194b('0x4e')]=function(_0x3a4b7a,_0x541037){var _0x3e372e={'raw':![],'where':{'id':_0x3a4b7a['params']['id']}},_0x4a7c83={};_0x4a7c83['model']=_[_0x194b('0x39')](db[_0x194b('0x36')][_0x194b('0x37')]);_0x4a7c83[_0x194b('0x3c')]=_['keys'](_0x3a4b7a[_0x194b('0x3c')]);_0x4a7c83[_0x194b('0x3a')]=_['intersection'](_0x4a7c83['model'],_0x4a7c83[_0x194b('0x3c')]);_0x3e372e[_0x194b('0x3d')]=_[_0x194b('0x3b')](_0x4a7c83[_0x194b('0x38')],qs[_0x194b('0x3e')](_0x3a4b7a[_0x194b('0x3c')][_0x194b('0x3e')]));_0x3e372e[_0x194b('0x3d')]=_0x3e372e[_0x194b('0x3d')][_0x194b('0x3f')]?_0x3e372e['attributes']:_0x4a7c83[_0x194b('0x38')];if(_0x3a4b7a[_0x194b('0x3c')][_0x194b('0x4b')]){_0x3e372e['include']=[{'all':!![]}];}_0x3e372e=_[_0x194b('0x49')]({},_0x3e372e,_0x3a4b7a['options']);return db[_0x194b('0x36')][_0x194b('0x4f')](_0x3e372e)[_0x194b('0x1d')](handleEntityNotFound(_0x541037,null))[_0x194b('0x1d')](respondWithResult(_0x541037,null))[_0x194b('0x27')](handleError(_0x541037,null));};exports['create']=function(_0x1bbe25,_0x33684f){return db[_0x194b('0x36')][_0x194b('0x50')](_0x1bbe25[_0x194b('0x51')],{})[_0x194b('0x1d')](respondWithResult(_0x33684f,0xc9))['catch'](handleError(_0x33684f,null));};exports[_0x194b('0x52')]=function(_0x56e01f,_0x5a01d7){if(_0x56e01f[_0x194b('0x51')]['id']){delete _0x56e01f[_0x194b('0x51')]['id'];}return db[_0x194b('0x36')]['find']({'where':{'id':_0x56e01f['params']['id']}})['then'](handleEntityNotFound(_0x5a01d7,null))[_0x194b('0x1d')](saveUpdates(_0x56e01f[_0x194b('0x51')],null))['then'](respondWithResult(_0x5a01d7,null))[_0x194b('0x27')](handleError(_0x5a01d7,null));};exports[_0x194b('0x32')]=function(_0x2f92aa,_0x261c92){return db['DeskConfiguration'][_0x194b('0x4f')]({'where':{'id':_0x2f92aa[_0x194b('0x53')]['id']}})[_0x194b('0x1d')](handleEntityNotFound(_0x261c92,null))['then'](removeEntity(_0x261c92,null))[_0x194b('0x27')](handleError(_0x261c92,null));};exports['getFields']=function(_0x435c6a,_0x4c9478,_0x1f8f48){var _0x5582d8={};var _0x1dc889={};var _0x1a7180;var _0x2a8935;return db[_0x194b('0x36')][_0x194b('0x54')]({'where':{'id':_0x435c6a['params']['id']}})[_0x194b('0x1d')](handleEntityNotFound(_0x4c9478,null))['then'](function(_0x468d9d){if(_0x468d9d){_0x1a7180=_0x468d9d;_0x1dc889[_0x194b('0x38')]=_[_0x194b('0x39')](db['DeskField'][_0x194b('0x37')]);_0x1dc889[_0x194b('0x3c')]=_[_0x194b('0x39')](_0x435c6a[_0x194b('0x3c')]);_0x1dc889['filters']=_[_0x194b('0x3b')](_0x1dc889['model'],_0x1dc889[_0x194b('0x3c')]);_0x5582d8[_0x194b('0x3d')]=_[_0x194b('0x3b')](_0x1dc889[_0x194b('0x38')],qs['fields'](_0x435c6a['query'][_0x194b('0x3e')]));_0x5582d8[_0x194b('0x3d')]=_0x5582d8[_0x194b('0x3d')][_0x194b('0x3f')]?_0x5582d8[_0x194b('0x3d')]:_0x1dc889[_0x194b('0x38')];_0x5582d8[_0x194b('0x55')]=qs[_0x194b('0x56')](_0x435c6a[_0x194b('0x3c')][_0x194b('0x56')]);_0x5582d8[_0x194b('0x43')]=qs[_0x194b('0x3a')](_['pick'](_0x435c6a[_0x194b('0x3c')],_0x1dc889['filters']));if(_0x435c6a[_0x194b('0x3c')][_0x194b('0x44')]){_0x5582d8['where']=_[_0x194b('0x49')](_0x5582d8[_0x194b('0x43')],{'$or':_[_0x194b('0x45')](_0x5582d8[_0x194b('0x3d')],function(_0x45b16f){var _0x2c3d29={};_0x2c3d29[_0x45b16f]={'$like':'%'+_0x435c6a['query'][_0x194b('0x44')]+'%'};return _0x2c3d29;})});}_0x5582d8=_[_0x194b('0x49')]({},_0x5582d8,_0x435c6a[_0x194b('0x4a')]);return _0x1a7180[_0x194b('0x57')](_0x5582d8);}})[_0x194b('0x1d')](function(_0x8180d){if(_0x8180d){_0x2a8935=_0x8180d['length'];if(!_0x435c6a[_0x194b('0x3c')]['hasOwnProperty']('nolimit')){_0x5582d8['limit']=qs[_0x194b('0x42')](_0x435c6a[_0x194b('0x3c')][_0x194b('0x42')]);_0x5582d8[_0x194b('0x2d')]=qs['offset'](_0x435c6a[_0x194b('0x3c')][_0x194b('0x2d')]);}return _0x1a7180[_0x194b('0x57')](_0x5582d8);}})[_0x194b('0x1d')](function(_0x3b094d){if(_0x3b094d){return _0x3b094d?{'count':_0x2a8935,'rows':_0x3b094d}:null;}})['then'](respondWithResult(_0x4c9478,null))[_0x194b('0x27')](handleError(_0x4c9478,null));};exports[_0x194b('0x58')]=function(_0x751c2,_0x6d004,_0x218940){var _0x1f3cc2={};var _0x4cd288={};var _0x16ad56;var _0x5e3b7d;return db[_0x194b('0x36')][_0x194b('0x54')]({'where':{'id':_0x751c2[_0x194b('0x53')]['id']}})[_0x194b('0x1d')](handleEntityNotFound(_0x6d004,null))[_0x194b('0x1d')](function(_0x4455c9){if(_0x4455c9){_0x16ad56=_0x4455c9;_0x4cd288['model']=_[_0x194b('0x39')](db[_0x194b('0x59')][_0x194b('0x37')]);_0x4cd288[_0x194b('0x3c')]=_['keys'](_0x751c2[_0x194b('0x3c')]);_0x4cd288[_0x194b('0x3a')]=_['intersection'](_0x4cd288[_0x194b('0x38')],_0x4cd288[_0x194b('0x3c')]);_0x1f3cc2[_0x194b('0x3d')]=_[_0x194b('0x3b')](_0x4cd288[_0x194b('0x38')],qs[_0x194b('0x3e')](_0x751c2[_0x194b('0x3c')]['fields']));_0x1f3cc2[_0x194b('0x3d')]=_0x1f3cc2[_0x194b('0x3d')]['length']?_0x1f3cc2[_0x194b('0x3d')]:_0x4cd288[_0x194b('0x38')];_0x1f3cc2[_0x194b('0x55')]=qs[_0x194b('0x56')](_0x751c2[_0x194b('0x3c')]['sort']);_0x1f3cc2[_0x194b('0x43')]=qs[_0x194b('0x3a')](_[_0x194b('0x5a')](_0x751c2[_0x194b('0x3c')],_0x4cd288[_0x194b('0x3a')]));if(_0x751c2['query']['filter']){_0x1f3cc2[_0x194b('0x43')]=_[_0x194b('0x49')](_0x1f3cc2['where'],{'$or':_['map'](_0x1f3cc2[_0x194b('0x3d')],function(_0x8cfe){var _0x7f1a83={};_0x7f1a83[_0x8cfe]={'$like':'%'+_0x751c2['query'][_0x194b('0x44')]+'%'};return _0x7f1a83;})});}_0x1f3cc2=_[_0x194b('0x49')]({},_0x1f3cc2,_0x751c2[_0x194b('0x4a')]);return _0x16ad56['getSubjects'](_0x1f3cc2);}})['then'](function(_0x491d7c){if(_0x491d7c){_0x5e3b7d=_0x491d7c['length'];if(!_0x751c2[_0x194b('0x3c')][_0x194b('0x40')]('nolimit')){_0x1f3cc2['limit']=qs[_0x194b('0x42')](_0x751c2[_0x194b('0x3c')][_0x194b('0x42')]);_0x1f3cc2[_0x194b('0x2d')]=qs[_0x194b('0x2d')](_0x751c2[_0x194b('0x3c')][_0x194b('0x2d')]);}return _0x16ad56[_0x194b('0x58')](_0x1f3cc2);}})[_0x194b('0x1d')](function(_0x41637e){if(_0x41637e){return _0x41637e?{'count':_0x5e3b7d,'rows':_0x41637e}:null;}})['then'](respondWithResult(_0x6d004,null))['catch'](handleError(_0x6d004,null));};exports[_0x194b('0x5b')]=function(_0x3fb219,_0x3e801c,_0x19f6da){var _0x1fc483={};var _0x15ce4b={};var _0x24a7cb;var _0x2d1331;return db[_0x194b('0x36')][_0x194b('0x54')]({'where':{'id':_0x3fb219[_0x194b('0x53')]['id']}})[_0x194b('0x1d')](handleEntityNotFound(_0x3e801c,null))[_0x194b('0x1d')](function(_0x2afeb3){if(_0x2afeb3){_0x24a7cb=_0x2afeb3;_0x15ce4b['model']=_[_0x194b('0x39')](db['DeskField'][_0x194b('0x37')]);_0x15ce4b[_0x194b('0x3c')]=_['keys'](_0x3fb219[_0x194b('0x3c')]);_0x15ce4b['filters']=_[_0x194b('0x3b')](_0x15ce4b['model'],_0x15ce4b[_0x194b('0x3c')]);_0x1fc483[_0x194b('0x3d')]=_[_0x194b('0x3b')](_0x15ce4b[_0x194b('0x38')],qs[_0x194b('0x3e')](_0x3fb219[_0x194b('0x3c')][_0x194b('0x3e')]));_0x1fc483[_0x194b('0x3d')]=_0x1fc483[_0x194b('0x3d')][_0x194b('0x3f')]?_0x1fc483['attributes']:_0x15ce4b[_0x194b('0x38')];_0x1fc483['order']=qs['sort'](_0x3fb219[_0x194b('0x3c')]['sort']);_0x1fc483['where']=qs[_0x194b('0x3a')](_[_0x194b('0x5a')](_0x3fb219[_0x194b('0x3c')],_0x15ce4b[_0x194b('0x3a')]));if(_0x3fb219['query']['filter']){_0x1fc483[_0x194b('0x43')]=_[_0x194b('0x49')](_0x1fc483[_0x194b('0x43')],{'$or':_[_0x194b('0x45')](_0x1fc483[_0x194b('0x3d')],function(_0x4b2093){var _0xd1c8e7={};_0xd1c8e7[_0x4b2093]={'$like':'%'+_0x3fb219[_0x194b('0x3c')][_0x194b('0x44')]+'%'};return _0xd1c8e7;})});}_0x1fc483=_[_0x194b('0x49')]({},_0x1fc483,_0x3fb219[_0x194b('0x4a')]);return _0x24a7cb['getDescriptions'](_0x1fc483);}})[_0x194b('0x1d')](function(_0x2f1bca){if(_0x2f1bca){_0x2d1331=_0x2f1bca[_0x194b('0x3f')];if(!_0x3fb219[_0x194b('0x3c')][_0x194b('0x40')](_0x194b('0x41'))){_0x1fc483[_0x194b('0x42')]=qs[_0x194b('0x42')](_0x3fb219[_0x194b('0x3c')][_0x194b('0x42')]);_0x1fc483[_0x194b('0x2d')]=qs[_0x194b('0x2d')](_0x3fb219[_0x194b('0x3c')][_0x194b('0x2d')]);}return _0x24a7cb['getDescriptions'](_0x1fc483);}})['then'](function(_0x36ed55){if(_0x36ed55){return _0x36ed55?{'count':_0x2d1331,'rows':_0x36ed55}:null;}})[_0x194b('0x1d')](respondWithResult(_0x3e801c,null))[_0x194b('0x27')](handleError(_0x3e801c,null));};exports[_0x194b('0x5c')]=function(_0x22c728,_0xfa8f9e,_0x5855ef){var _0x31f96a={};var _0xe15e92={};var _0x28a791;var _0x4f57c2;return db[_0x194b('0x36')][_0x194b('0x54')]({'where':{'id':_0x22c728[_0x194b('0x53')]['id']}})[_0x194b('0x1d')](handleEntityNotFound(_0xfa8f9e,null))[_0x194b('0x1d')](function(_0x31a71f){if(_0x31a71f){_0x28a791=_0x31a71f;_0xe15e92[_0x194b('0x38')]=_[_0x194b('0x39')](db[_0x194b('0x5d')][_0x194b('0x37')]);_0xe15e92[_0x194b('0x3c')]=_[_0x194b('0x39')](_0x22c728[_0x194b('0x3c')]);_0xe15e92[_0x194b('0x3a')]=_[_0x194b('0x3b')](_0xe15e92[_0x194b('0x38')],_0xe15e92[_0x194b('0x3c')]);_0x31f96a['attributes']=_['intersection'](_0xe15e92[_0x194b('0x38')],qs[_0x194b('0x3e')](_0x22c728['query'][_0x194b('0x3e')]));_0x31f96a[_0x194b('0x3d')]=_0x31f96a[_0x194b('0x3d')][_0x194b('0x3f')]?_0x31f96a[_0x194b('0x3d')]:_0xe15e92[_0x194b('0x38')];_0x31f96a['order']=qs[_0x194b('0x56')](_0x22c728[_0x194b('0x3c')][_0x194b('0x56')]);_0x31f96a[_0x194b('0x43')]=qs['filters'](_[_0x194b('0x5a')](_0x22c728[_0x194b('0x3c')],_0xe15e92['filters']));if(_0x22c728[_0x194b('0x3c')]['filter']){_0x31f96a[_0x194b('0x43')]=_[_0x194b('0x49')](_0x31f96a[_0x194b('0x43')],{'$or':_[_0x194b('0x45')](_0x31f96a[_0x194b('0x3d')],function(_0x9ed846){var _0x330064={};_0x330064[_0x9ed846]={'$like':'%'+_0x22c728[_0x194b('0x3c')][_0x194b('0x44')]+'%'};return _0x330064;})});}_0x31f96a=_[_0x194b('0x49')]({},_0x31f96a,_0x22c728[_0x194b('0x4a')]);return _0x28a791[_0x194b('0x5c')](_0x31f96a);}})[_0x194b('0x1d')](function(_0x463f63){if(_0x463f63){_0x4f57c2=_0x463f63[_0x194b('0x3f')];if(!_0x22c728[_0x194b('0x3c')][_0x194b('0x40')]('nolimit')){_0x31f96a[_0x194b('0x42')]=qs[_0x194b('0x42')](_0x22c728['query']['limit']);_0x31f96a[_0x194b('0x2d')]=qs[_0x194b('0x2d')](_0x22c728['query'][_0x194b('0x2d')]);}return _0x28a791[_0x194b('0x5c')](_0x31f96a);}})[_0x194b('0x1d')](function(_0x11a9b5){if(_0x11a9b5){return _0x11a9b5?{'count':_0x4f57c2,'rows':_0x11a9b5}:null;}})[_0x194b('0x1d')](respondWithResult(_0xfa8f9e,null))[_0x194b('0x27')](handleError(_0xfa8f9e,null));};exports['setTags']=function(_0x584528,_0x5e40ce,_0x3edb24){if(_0x584528['body']['id']){delete _0x584528[_0x194b('0x51')]['id'];}return db[_0x194b('0x36')]['findOne']({'where':{'id':_0x584528[_0x194b('0x53')]['id']}})[_0x194b('0x1d')](handleEntityNotFound(_0x5e40ce,null))[_0x194b('0x1d')](function(_0x1100ac){if(_0x1100ac){return _0x1100ac[_0x194b('0x5e')](_0x584528['body'][_0x194b('0x5f')]||[]);}return null;})[_0x194b('0x1d')](respondWithResult(_0x5e40ce,null))[_0x194b('0x27')](handleError(_0x5e40ce,null));};
\ No newline at end of file
+var _0xe186=['status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','name','index','DeskConfiguration','keys','query','filters','intersection','model','attributes','fields','length','nolimit','sort','pick','type','key','merge','options','where','includeAll','include','rows','rawAttributes','find','create','body','params','getFields','findOne','DeskField','order','filter','map','hasOwnProperty','getSubjects','getDescriptions','getTags','Tag','setTags','ids','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','sox','to-csv','ejs','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','jayson/promise','http','test','request','then','info','debug','stringify','error','code','message','DeskConfiguration,\x20%s,\x20%s','result','catch','sendStatus'];(function(_0x1968c4,_0x4ce2bb){var _0x153766=function(_0x5ef90d){while(--_0x5ef90d){_0x1968c4['push'](_0x1968c4['shift']());}};_0x153766(++_0x4ce2bb);}(_0xe186,0x146));var _0x6e18=function(_0x506e5a,_0x418a48){_0x506e5a=_0x506e5a-0x0;var _0x4bc31b=_0xe186[_0x506e5a];return _0x4bc31b;};'use strict';var pdf=require(_0x6e18('0x0'));var emlformat=require(_0x6e18('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x6e18('0x2'));var jsonpatch=require(_0x6e18('0x3'));var rp=require(_0x6e18('0x4'));var moment=require(_0x6e18('0x5'));var BPromise=require(_0x6e18('0x6'));var Mustache=require('mustache');var util=require(_0x6e18('0x7'));var path=require('path');var sox=require(_0x6e18('0x8'));var csv=require(_0x6e18('0x9'));var ejs=require(_0x6e18('0xa'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x6e18('0xb'));var jsforce=require(_0x6e18('0xc'));var deskjs=require(_0x6e18('0xd'));var toCsv=require(_0x6e18('0x9'));var querystring=require(_0x6e18('0xe'));var Papa=require(_0x6e18('0xf'));var Redis=require(_0x6e18('0x10'));var authService=require(_0x6e18('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x6e18('0x12'));var logger=require(_0x6e18('0x13'))(_0x6e18('0x14'));var utils=require(_0x6e18('0x15'));var config=require(_0x6e18('0x16'));var db=require('../../mysqldb')['db'];var jayson=require(_0x6e18('0x17'));var client=jayson['client'][_0x6e18('0x18')]({'port':0x232a});function checkPasswordPattern(_0x25a9cf,_0x386427,_0x37a1de){if(_0x37a1de){var _0x227b81=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x227b81[_0x6e18('0x19')](_0x386427)){return _0x25a9cf;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x25a9cf;}}function respondWithRpcPromise(_0x795515,_0x254bba,_0x32c848,_0x4dcc63){return new BPromise(function(_0xef7033,_0x339e17){var _0x252bb3=_0x4dcc63||client;return _0x252bb3[_0x6e18('0x1a')](_0x795515,_0x32c848)[_0x6e18('0x1b')](function(_0x521f5c){logger[_0x6e18('0x1c')]('DeskConfiguration,\x20%s,\x20%s',_0x254bba,'request\x20sent');logger[_0x6e18('0x1d')]('DeskConfiguration,\x20%s,\x20%s,\x20%s',_0x254bba,'request\x20sent',JSON[_0x6e18('0x1e')](_0x521f5c));if(_0x521f5c['error']){if(_0x521f5c[_0x6e18('0x1f')][_0x6e18('0x20')]===0x1f4){logger[_0x6e18('0x1f')]('DeskConfiguration,\x20%s,\x20%s',_0x254bba,_0x521f5c['error'][_0x6e18('0x21')]);return _0x339e17(_0x521f5c[_0x6e18('0x1f')][_0x6e18('0x21')]);}logger[_0x6e18('0x1f')](_0x6e18('0x22'),_0x254bba,_0x521f5c[_0x6e18('0x1f')][_0x6e18('0x21')]);return _0xef7033(_0x521f5c['error'][_0x6e18('0x21')]);}else{logger[_0x6e18('0x1c')]('DeskConfiguration,\x20%s,\x20%s',_0x254bba,'request\x20sent');_0xef7033(_0x521f5c[_0x6e18('0x23')][_0x6e18('0x21')]);}})[_0x6e18('0x24')](function(_0x36cb1f){logger[_0x6e18('0x1f')](_0x6e18('0x22'),_0x254bba,_0x36cb1f);_0x339e17(_0x36cb1f);});});}function respondWithStatusCode(_0x3bb43d,_0x18d214){_0x18d214=_0x18d214||0xcc;return function(_0x39159e){if(_0x39159e){return _0x3bb43d[_0x6e18('0x25')](_0x18d214);}return _0x3bb43d[_0x6e18('0x26')](_0x18d214)[_0x6e18('0x27')]();};}function respondWithResult(_0x34a2a7,_0x243508){_0x243508=_0x243508||0xc8;return function(_0x193051){if(_0x193051){return _0x34a2a7[_0x6e18('0x26')](_0x243508)[_0x6e18('0x28')](_0x193051);}};}function respondWithFilteredResult(_0x4a56b1,_0x113feb){return function(_0x2f4d11){if(_0x2f4d11){var _0x4dc894=_0x2f4d11[_0x6e18('0x29')],_0x35734e=_0x113feb['offset'],_0x3007d9=_0x113feb[_0x6e18('0x2a')]+_0x113feb[_0x6e18('0x2b')],_0x176ad5;if(_0x3007d9>=_0x4dc894){_0x3007d9=_0x4dc894;_0x176ad5=0xc8;}else{_0x176ad5=0xce;}_0x4a56b1[_0x6e18('0x26')](_0x176ad5);return _0x4a56b1[_0x6e18('0x2c')](_0x6e18('0x2d'),_0x35734e+'-'+_0x3007d9+'/'+_0x4dc894)[_0x6e18('0x28')](_0x2f4d11);}return null;};}function patchUpdates(_0x17ed8e){return function(_0x1391af){try{jsonpatch[_0x6e18('0x2e')](_0x1391af,_0x17ed8e,!![]);}catch(_0x9acdc){return BPromise[_0x6e18('0x2f')](_0x9acdc);}return _0x1391af[_0x6e18('0x30')]();};}function saveUpdates(_0x5248c0,_0x739a56){return function(_0x301920){if(_0x301920){return _0x301920[_0x6e18('0x31')](_0x5248c0)[_0x6e18('0x1b')](function(_0x1ab9cc){return _0x1ab9cc;});}return null;};}function removeEntity(_0x916f68,_0x3c4c0f){return function(_0x45bc42){if(_0x45bc42){return _0x45bc42[_0x6e18('0x32')]()[_0x6e18('0x1b')](function(){_0x916f68['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x258ee5,_0x25f2ce){return function(_0x180163){if(!_0x180163){_0x258ee5[_0x6e18('0x25')](0x194);}return _0x180163;};}function handleError(_0x11be2f,_0x2113fa){_0x2113fa=_0x2113fa||0x1f4;return function(_0x4cc94d){logger[_0x6e18('0x1f')](_0x4cc94d['stack']);if(_0x4cc94d[_0x6e18('0x33')]){delete _0x4cc94d['name'];}_0x11be2f[_0x6e18('0x26')](_0x2113fa)['send'](_0x4cc94d);};}exports[_0x6e18('0x34')]=function(_0xf0b158,_0x5e3ac6){var _0x372731={},_0xcc9156={},_0x2e16c5={'count':0x0,'rows':[]};var _0x1208f7=db[_0x6e18('0x35')]['rawAttributes'];_0xcc9156['model']=_[_0x6e18('0x36')](_0x1208f7);_0xcc9156[_0x6e18('0x37')]=_[_0x6e18('0x36')](_0xf0b158[_0x6e18('0x37')]);_0xcc9156[_0x6e18('0x38')]=_[_0x6e18('0x39')](_0xcc9156[_0x6e18('0x3a')],_0xcc9156[_0x6e18('0x37')]);_0x372731[_0x6e18('0x3b')]=_[_0x6e18('0x39')](_0xcc9156[_0x6e18('0x3a')],qs[_0x6e18('0x3c')](_0xf0b158[_0x6e18('0x37')]['fields']));_0x372731[_0x6e18('0x3b')]=_0x372731['attributes'][_0x6e18('0x3d')]?_0x372731[_0x6e18('0x3b')]:_0xcc9156[_0x6e18('0x3a')];if(!_0xf0b158[_0x6e18('0x37')]['hasOwnProperty'](_0x6e18('0x3e'))){_0x372731[_0x6e18('0x2b')]=qs[_0x6e18('0x2b')](_0xf0b158[_0x6e18('0x37')][_0x6e18('0x2b')]);_0x372731[_0x6e18('0x2a')]=qs['offset'](_0xf0b158[_0x6e18('0x37')][_0x6e18('0x2a')]);}_0x372731['order']=qs[_0x6e18('0x3f')](_0xf0b158[_0x6e18('0x37')]['sort']);_0x372731['where']=qs['filters'](_[_0x6e18('0x40')](_0xf0b158[_0x6e18('0x37')],_0xcc9156[_0x6e18('0x38')]));if(_0xf0b158['query']['filter']){_0x372731['where']=_['merge'](_0x372731['where'],{'$or':_['map'](_0x1208f7,function(_0x4ccbda){if(_0x4ccbda[_0x6e18('0x41')][_0x6e18('0x42')]!=='VIRTUAL'){var _0x2a24d7={};_0x2a24d7[_0x4ccbda['field']]={'$like':'%'+_0xf0b158[_0x6e18('0x37')]['filter']+'%'};return _0x2a24d7;}})});}_0x372731=_[_0x6e18('0x43')]({},_0x372731,_0xf0b158[_0x6e18('0x44')]);var _0x4c93fa={'where':_0x372731[_0x6e18('0x45')]};return db['DeskConfiguration'][_0x6e18('0x29')](_0x4c93fa)[_0x6e18('0x1b')](function(_0x1c06fb){_0x2e16c5[_0x6e18('0x29')]=_0x1c06fb;if(_0xf0b158[_0x6e18('0x37')][_0x6e18('0x46')]){_0x372731[_0x6e18('0x47')]=[{'all':!![]}];}return db[_0x6e18('0x35')]['findAll'](_0x372731);})['then'](function(_0x6234d9){_0x2e16c5[_0x6e18('0x48')]=_0x6234d9;return _0x2e16c5;})[_0x6e18('0x1b')](respondWithFilteredResult(_0x5e3ac6,_0x372731))['catch'](handleError(_0x5e3ac6,null));};exports['show']=function(_0x4e34b4,_0x4c4163){var _0x522f4f={'raw':![],'where':{'id':_0x4e34b4['params']['id']}},_0x11f1e5={};_0x11f1e5[_0x6e18('0x3a')]=_[_0x6e18('0x36')](db[_0x6e18('0x35')][_0x6e18('0x49')]);_0x11f1e5['query']=_['keys'](_0x4e34b4['query']);_0x11f1e5[_0x6e18('0x38')]=_[_0x6e18('0x39')](_0x11f1e5[_0x6e18('0x3a')],_0x11f1e5['query']);_0x522f4f[_0x6e18('0x3b')]=_[_0x6e18('0x39')](_0x11f1e5[_0x6e18('0x3a')],qs[_0x6e18('0x3c')](_0x4e34b4[_0x6e18('0x37')][_0x6e18('0x3c')]));_0x522f4f[_0x6e18('0x3b')]=_0x522f4f['attributes'][_0x6e18('0x3d')]?_0x522f4f[_0x6e18('0x3b')]:_0x11f1e5[_0x6e18('0x3a')];if(_0x4e34b4[_0x6e18('0x37')][_0x6e18('0x46')]){_0x522f4f[_0x6e18('0x47')]=[{'all':!![]}];}_0x522f4f=_['merge']({},_0x522f4f,_0x4e34b4['options']);return db['DeskConfiguration'][_0x6e18('0x4a')](_0x522f4f)[_0x6e18('0x1b')](handleEntityNotFound(_0x4c4163,null))[_0x6e18('0x1b')](respondWithResult(_0x4c4163,null))[_0x6e18('0x24')](handleError(_0x4c4163,null));};exports[_0x6e18('0x4b')]=function(_0x4a4c05,_0x20c70b){return db['DeskConfiguration'][_0x6e18('0x4b')](_0x4a4c05[_0x6e18('0x4c')],{})[_0x6e18('0x1b')](respondWithResult(_0x20c70b,0xc9))[_0x6e18('0x24')](handleError(_0x20c70b,null));};exports['update']=function(_0x24eeec,_0x525474){if(_0x24eeec[_0x6e18('0x4c')]['id']){delete _0x24eeec[_0x6e18('0x4c')]['id'];}return db[_0x6e18('0x35')][_0x6e18('0x4a')]({'where':{'id':_0x24eeec[_0x6e18('0x4d')]['id']}})[_0x6e18('0x1b')](handleEntityNotFound(_0x525474,null))['then'](saveUpdates(_0x24eeec[_0x6e18('0x4c')],null))[_0x6e18('0x1b')](respondWithResult(_0x525474,null))[_0x6e18('0x24')](handleError(_0x525474,null));};exports['destroy']=function(_0x16e440,_0x3b545e){return db[_0x6e18('0x35')][_0x6e18('0x4a')]({'where':{'id':_0x16e440['params']['id']}})[_0x6e18('0x1b')](handleEntityNotFound(_0x3b545e,null))[_0x6e18('0x1b')](removeEntity(_0x3b545e,null))['catch'](handleError(_0x3b545e,null));};exports[_0x6e18('0x4e')]=function(_0x178b37,_0x3762b4,_0x2e2f5f){var _0x2042b1={};var _0x1915db={};var _0x351559;var _0x4424d6;return db[_0x6e18('0x35')][_0x6e18('0x4f')]({'where':{'id':_0x178b37[_0x6e18('0x4d')]['id']}})['then'](handleEntityNotFound(_0x3762b4,null))[_0x6e18('0x1b')](function(_0x5d27a0){if(_0x5d27a0){_0x351559=_0x5d27a0;_0x1915db['model']=_[_0x6e18('0x36')](db[_0x6e18('0x50')]['rawAttributes']);_0x1915db[_0x6e18('0x37')]=_[_0x6e18('0x36')](_0x178b37[_0x6e18('0x37')]);_0x1915db['filters']=_[_0x6e18('0x39')](_0x1915db[_0x6e18('0x3a')],_0x1915db[_0x6e18('0x37')]);_0x2042b1[_0x6e18('0x3b')]=_['intersection'](_0x1915db[_0x6e18('0x3a')],qs[_0x6e18('0x3c')](_0x178b37['query']['fields']));_0x2042b1[_0x6e18('0x3b')]=_0x2042b1[_0x6e18('0x3b')][_0x6e18('0x3d')]?_0x2042b1[_0x6e18('0x3b')]:_0x1915db[_0x6e18('0x3a')];_0x2042b1[_0x6e18('0x51')]=qs['sort'](_0x178b37[_0x6e18('0x37')][_0x6e18('0x3f')]);_0x2042b1[_0x6e18('0x45')]=qs[_0x6e18('0x38')](_[_0x6e18('0x40')](_0x178b37[_0x6e18('0x37')],_0x1915db[_0x6e18('0x38')]));if(_0x178b37[_0x6e18('0x37')][_0x6e18('0x52')]){_0x2042b1['where']=_['merge'](_0x2042b1['where'],{'$or':_[_0x6e18('0x53')](_0x2042b1['attributes'],function(_0x20d094){var _0x4be074={};_0x4be074[_0x20d094]={'$like':'%'+_0x178b37[_0x6e18('0x37')]['filter']+'%'};return _0x4be074;})});}_0x2042b1=_[_0x6e18('0x43')]({},_0x2042b1,_0x178b37[_0x6e18('0x44')]);return _0x351559[_0x6e18('0x4e')](_0x2042b1);}})['then'](function(_0x2d900f){if(_0x2d900f){_0x4424d6=_0x2d900f['length'];if(!_0x178b37[_0x6e18('0x37')][_0x6e18('0x54')](_0x6e18('0x3e'))){_0x2042b1['limit']=qs[_0x6e18('0x2b')](_0x178b37[_0x6e18('0x37')][_0x6e18('0x2b')]);_0x2042b1[_0x6e18('0x2a')]=qs['offset'](_0x178b37[_0x6e18('0x37')][_0x6e18('0x2a')]);}return _0x351559[_0x6e18('0x4e')](_0x2042b1);}})[_0x6e18('0x1b')](function(_0x57243c){if(_0x57243c){return _0x57243c?{'count':_0x4424d6,'rows':_0x57243c}:null;}})[_0x6e18('0x1b')](respondWithResult(_0x3762b4,null))[_0x6e18('0x24')](handleError(_0x3762b4,null));};exports[_0x6e18('0x55')]=function(_0x20a626,_0x1ab7ce,_0x1ebcbe){var _0x332be4={};var _0x5ce242={};var _0xc51e9a;var _0x4aeb15;return db[_0x6e18('0x35')][_0x6e18('0x4f')]({'where':{'id':_0x20a626[_0x6e18('0x4d')]['id']}})[_0x6e18('0x1b')](handleEntityNotFound(_0x1ab7ce,null))['then'](function(_0x2de93d){if(_0x2de93d){_0xc51e9a=_0x2de93d;_0x5ce242[_0x6e18('0x3a')]=_[_0x6e18('0x36')](db[_0x6e18('0x50')][_0x6e18('0x49')]);_0x5ce242[_0x6e18('0x37')]=_[_0x6e18('0x36')](_0x20a626['query']);_0x5ce242[_0x6e18('0x38')]=_[_0x6e18('0x39')](_0x5ce242[_0x6e18('0x3a')],_0x5ce242['query']);_0x332be4[_0x6e18('0x3b')]=_[_0x6e18('0x39')](_0x5ce242[_0x6e18('0x3a')],qs['fields'](_0x20a626[_0x6e18('0x37')][_0x6e18('0x3c')]));_0x332be4['attributes']=_0x332be4['attributes']['length']?_0x332be4[_0x6e18('0x3b')]:_0x5ce242['model'];_0x332be4['order']=qs['sort'](_0x20a626[_0x6e18('0x37')]['sort']);_0x332be4['where']=qs[_0x6e18('0x38')](_[_0x6e18('0x40')](_0x20a626[_0x6e18('0x37')],_0x5ce242[_0x6e18('0x38')]));if(_0x20a626['query']['filter']){_0x332be4[_0x6e18('0x45')]=_['merge'](_0x332be4[_0x6e18('0x45')],{'$or':_[_0x6e18('0x53')](_0x332be4[_0x6e18('0x3b')],function(_0x1a866b){var _0x31c1df={};_0x31c1df[_0x1a866b]={'$like':'%'+_0x20a626[_0x6e18('0x37')][_0x6e18('0x52')]+'%'};return _0x31c1df;})});}_0x332be4=_[_0x6e18('0x43')]({},_0x332be4,_0x20a626[_0x6e18('0x44')]);return _0xc51e9a[_0x6e18('0x55')](_0x332be4);}})[_0x6e18('0x1b')](function(_0x4f54ae){if(_0x4f54ae){_0x4aeb15=_0x4f54ae['length'];if(!_0x20a626[_0x6e18('0x37')]['hasOwnProperty']('nolimit')){_0x332be4[_0x6e18('0x2b')]=qs['limit'](_0x20a626['query'][_0x6e18('0x2b')]);_0x332be4['offset']=qs[_0x6e18('0x2a')](_0x20a626[_0x6e18('0x37')]['offset']);}return _0xc51e9a['getSubjects'](_0x332be4);}})[_0x6e18('0x1b')](function(_0x28d67e){if(_0x28d67e){return _0x28d67e?{'count':_0x4aeb15,'rows':_0x28d67e}:null;}})[_0x6e18('0x1b')](respondWithResult(_0x1ab7ce,null))['catch'](handleError(_0x1ab7ce,null));};exports[_0x6e18('0x56')]=function(_0x56ec3c,_0x6d8aa3,_0x58280e){var _0x1b1016={};var _0x3762b7={};var _0x26507f;var _0x4a5f42;return db['DeskConfiguration'][_0x6e18('0x4f')]({'where':{'id':_0x56ec3c['params']['id']}})[_0x6e18('0x1b')](handleEntityNotFound(_0x6d8aa3,null))['then'](function(_0x6c0d6e){if(_0x6c0d6e){_0x26507f=_0x6c0d6e;_0x3762b7[_0x6e18('0x3a')]=_[_0x6e18('0x36')](db[_0x6e18('0x50')][_0x6e18('0x49')]);_0x3762b7[_0x6e18('0x37')]=_['keys'](_0x56ec3c[_0x6e18('0x37')]);_0x3762b7[_0x6e18('0x38')]=_['intersection'](_0x3762b7[_0x6e18('0x3a')],_0x3762b7[_0x6e18('0x37')]);_0x1b1016['attributes']=_['intersection'](_0x3762b7[_0x6e18('0x3a')],qs['fields'](_0x56ec3c[_0x6e18('0x37')][_0x6e18('0x3c')]));_0x1b1016[_0x6e18('0x3b')]=_0x1b1016[_0x6e18('0x3b')][_0x6e18('0x3d')]?_0x1b1016[_0x6e18('0x3b')]:_0x3762b7[_0x6e18('0x3a')];_0x1b1016[_0x6e18('0x51')]=qs[_0x6e18('0x3f')](_0x56ec3c[_0x6e18('0x37')]['sort']);_0x1b1016['where']=qs[_0x6e18('0x38')](_[_0x6e18('0x40')](_0x56ec3c[_0x6e18('0x37')],_0x3762b7[_0x6e18('0x38')]));if(_0x56ec3c[_0x6e18('0x37')][_0x6e18('0x52')]){_0x1b1016[_0x6e18('0x45')]=_[_0x6e18('0x43')](_0x1b1016['where'],{'$or':_[_0x6e18('0x53')](_0x1b1016[_0x6e18('0x3b')],function(_0x3c2338){var _0x6de32={};_0x6de32[_0x3c2338]={'$like':'%'+_0x56ec3c[_0x6e18('0x37')][_0x6e18('0x52')]+'%'};return _0x6de32;})});}_0x1b1016=_[_0x6e18('0x43')]({},_0x1b1016,_0x56ec3c[_0x6e18('0x44')]);return _0x26507f['getDescriptions'](_0x1b1016);}})['then'](function(_0x59031c){if(_0x59031c){_0x4a5f42=_0x59031c[_0x6e18('0x3d')];if(!_0x56ec3c[_0x6e18('0x37')][_0x6e18('0x54')](_0x6e18('0x3e'))){_0x1b1016[_0x6e18('0x2b')]=qs['limit'](_0x56ec3c['query']['limit']);_0x1b1016['offset']=qs[_0x6e18('0x2a')](_0x56ec3c['query'][_0x6e18('0x2a')]);}return _0x26507f['getDescriptions'](_0x1b1016);}})[_0x6e18('0x1b')](function(_0x21438c){if(_0x21438c){return _0x21438c?{'count':_0x4a5f42,'rows':_0x21438c}:null;}})[_0x6e18('0x1b')](respondWithResult(_0x6d8aa3,null))[_0x6e18('0x24')](handleError(_0x6d8aa3,null));};exports[_0x6e18('0x57')]=function(_0x5ad41d,_0x394d14,_0x34abc0){var _0x5cb4d6={};var _0x59dd1b={};var _0x52e82e;var _0x553bee;return db['DeskConfiguration'][_0x6e18('0x4f')]({'where':{'id':_0x5ad41d[_0x6e18('0x4d')]['id']}})['then'](handleEntityNotFound(_0x394d14,null))['then'](function(_0x40219e){if(_0x40219e){_0x52e82e=_0x40219e;_0x59dd1b[_0x6e18('0x3a')]=_[_0x6e18('0x36')](db[_0x6e18('0x58')][_0x6e18('0x49')]);_0x59dd1b['query']=_['keys'](_0x5ad41d['query']);_0x59dd1b[_0x6e18('0x38')]=_[_0x6e18('0x39')](_0x59dd1b[_0x6e18('0x3a')],_0x59dd1b[_0x6e18('0x37')]);_0x5cb4d6[_0x6e18('0x3b')]=_['intersection'](_0x59dd1b[_0x6e18('0x3a')],qs[_0x6e18('0x3c')](_0x5ad41d[_0x6e18('0x37')][_0x6e18('0x3c')]));_0x5cb4d6['attributes']=_0x5cb4d6[_0x6e18('0x3b')][_0x6e18('0x3d')]?_0x5cb4d6[_0x6e18('0x3b')]:_0x59dd1b[_0x6e18('0x3a')];_0x5cb4d6[_0x6e18('0x51')]=qs[_0x6e18('0x3f')](_0x5ad41d['query'][_0x6e18('0x3f')]);_0x5cb4d6['where']=qs[_0x6e18('0x38')](_[_0x6e18('0x40')](_0x5ad41d[_0x6e18('0x37')],_0x59dd1b[_0x6e18('0x38')]));if(_0x5ad41d['query'][_0x6e18('0x52')]){_0x5cb4d6[_0x6e18('0x45')]=_['merge'](_0x5cb4d6['where'],{'$or':_['map'](_0x5cb4d6[_0x6e18('0x3b')],function(_0x1cb111){var _0x26c5f8={};_0x26c5f8[_0x1cb111]={'$like':'%'+_0x5ad41d['query'][_0x6e18('0x52')]+'%'};return _0x26c5f8;})});}_0x5cb4d6=_[_0x6e18('0x43')]({},_0x5cb4d6,_0x5ad41d[_0x6e18('0x44')]);return _0x52e82e[_0x6e18('0x57')](_0x5cb4d6);}})[_0x6e18('0x1b')](function(_0x40cde6){if(_0x40cde6){_0x553bee=_0x40cde6[_0x6e18('0x3d')];if(!_0x5ad41d[_0x6e18('0x37')][_0x6e18('0x54')](_0x6e18('0x3e'))){_0x5cb4d6[_0x6e18('0x2b')]=qs['limit'](_0x5ad41d[_0x6e18('0x37')][_0x6e18('0x2b')]);_0x5cb4d6[_0x6e18('0x2a')]=qs[_0x6e18('0x2a')](_0x5ad41d[_0x6e18('0x37')][_0x6e18('0x2a')]);}return _0x52e82e['getTags'](_0x5cb4d6);}})[_0x6e18('0x1b')](function(_0x583d17){if(_0x583d17){return _0x583d17?{'count':_0x553bee,'rows':_0x583d17}:null;}})[_0x6e18('0x1b')](respondWithResult(_0x394d14,null))['catch'](handleError(_0x394d14,null));};exports[_0x6e18('0x59')]=function(_0x565b08,_0x34e585,_0x58fce3){if(_0x565b08[_0x6e18('0x4c')]['id']){delete _0x565b08[_0x6e18('0x4c')]['id'];}return db['DeskConfiguration']['findOne']({'where':{'id':_0x565b08[_0x6e18('0x4d')]['id']}})[_0x6e18('0x1b')](handleEntityNotFound(_0x34e585,null))[_0x6e18('0x1b')](function(_0x214eb9){if(_0x214eb9){return _0x214eb9[_0x6e18('0x59')](_0x565b08['body'][_0x6e18('0x5a')]||[]);}return null;})['then'](respondWithResult(_0x34e585,null))[_0x6e18('0x24')](handleError(_0x34e585,null));};
\ No newline at end of file
index 8f196eb..b97e7bb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x16e5=['moment','bluebird','request-promise','path','./intDeskConfiguration.attributes','exports','define','DeskConfiguration','lodash','util','../../config/logger','api'];(function(_0x16f5cf,_0x542b42){var _0xeecea0=function(_0x1e8dd2){while(--_0x1e8dd2){_0x16f5cf['push'](_0x16f5cf['shift']());}};_0xeecea0(++_0x542b42);}(_0x16e5,0x1ac));var _0x516e=function(_0x3a9661,_0x530b12){_0x3a9661=_0x3a9661-0x0;var _0x5bb119=_0x16e5[_0x3a9661];return _0x5bb119;};'use strict';var _=require(_0x516e('0x0'));var util=require(_0x516e('0x1'));var logger=require(_0x516e('0x2'))(_0x516e('0x3'));var moment=require(_0x516e('0x4'));var BPromise=require(_0x516e('0x5'));var rp=require(_0x516e('0x6'));var fs=require('fs');var path=require(_0x516e('0x7'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x516e('0x8'));module[_0x516e('0x9')]=function(_0x24fe2b,_0x43aa66){return _0x24fe2b[_0x516e('0xa')](_0x516e('0xb'),attributes,{'tableName':'int_desk_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xbed1=['request-promise','path','../../config/environment','./intDeskConfiguration.attributes','exports','define','DeskConfiguration','int_desk_configurations','lodash','util','../../config/logger','bluebird'];(function(_0x2a0da3,_0x2c606e){var _0x21f28d=function(_0x2f6f3b){while(--_0x2f6f3b){_0x2a0da3['push'](_0x2a0da3['shift']());}};_0x21f28d(++_0x2c606e);}(_0xbed1,0x164));var _0x1bed=function(_0x587ba2,_0x42eb40){_0x587ba2=_0x587ba2-0x0;var _0x50ec73=_0xbed1[_0x587ba2];return _0x50ec73;};'use strict';var _=require(_0x1bed('0x0'));var util=require(_0x1bed('0x1'));var logger=require(_0x1bed('0x2'))('api');var moment=require('moment');var BPromise=require(_0x1bed('0x3'));var rp=require(_0x1bed('0x4'));var fs=require('fs');var path=require(_0x1bed('0x5'));var rimraf=require('rimraf');var config=require(_0x1bed('0x6'));var attributes=require(_0x1bed('0x7'));module[_0x1bed('0x8')]=function(_0x4215d4,_0x541b81){return _0x4215d4[_0x1bed('0x9')](_0x1bed('0xa'),attributes,{'tableName':_0x1bed('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 50f12b6..c752056 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1cb9=['error','message','result','catch','lodash','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','info','DeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','DeskConfiguration,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x432682,_0x253044){var _0x463d05=function(_0xa73403){while(--_0xa73403){_0x432682['push'](_0x432682['shift']());}};_0x463d05(++_0x253044);}(_0x1cb9,0x14e));var _0x91cb=function(_0x14db94,_0x354225){_0x14db94=_0x14db94-0x0;var _0x14388d=_0x1cb9[_0x14db94];return _0x14388d;};'use strict';var _=require(_0x91cb('0x0'));var util=require('util');var moment=require(_0x91cb('0x1'));var BPromise=require(_0x91cb('0x2'));var rs=require(_0x91cb('0x3'));var fs=require('fs');var Redis=require(_0x91cb('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x91cb('0x5'));var logger=require(_0x91cb('0x6'))('rpc');var config=require(_0x91cb('0x7'));var jayson=require(_0x91cb('0x8'));var client=jayson[_0x91cb('0x9')][_0x91cb('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3b9d98,_0x8f8a3b,_0x4c1f56){return new BPromise(function(_0x15c517,_0x5bda2f){return client[_0x91cb('0xb')](_0x3b9d98,_0x4c1f56)['then'](function(_0xa43e7a){logger[_0x91cb('0xc')](_0x91cb('0xd'),_0x8f8a3b,_0x91cb('0xe'));logger[_0x91cb('0xf')](_0x91cb('0x10'),_0x8f8a3b,_0x91cb('0xe'),JSON[_0x91cb('0x11')](_0xa43e7a));if(_0xa43e7a[_0x91cb('0x12')]){if(_0xa43e7a[_0x91cb('0x12')]['code']===0x1f4){logger[_0x91cb('0x12')](_0x91cb('0xd'),_0x8f8a3b,_0xa43e7a['error'][_0x91cb('0x13')]);return _0x5bda2f(_0xa43e7a[_0x91cb('0x12')][_0x91cb('0x13')]);}logger[_0x91cb('0x12')]('DeskConfiguration,\x20%s,\x20%s',_0x8f8a3b,_0xa43e7a['error'][_0x91cb('0x13')]);return _0x15c517(_0xa43e7a[_0x91cb('0x12')]['message']);}else{logger['info'](_0x91cb('0xd'),_0x8f8a3b,_0x91cb('0xe'));_0x15c517(_0xa43e7a[_0x91cb('0x14')]['message']);}})[_0x91cb('0x15')](function(_0x135890){logger['error'](_0x91cb('0xd'),_0x8f8a3b,_0x135890);_0x5bda2f(_0x135890);});});}
\ No newline at end of file
+var _0x53ec=['error','message','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','rpc','../../config/environment','client','request','then','info','DeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','stringify','code'];(function(_0x24f31b,_0x44b8f3){var _0x488401=function(_0x204caf){while(--_0x204caf){_0x24f31b['push'](_0x24f31b['shift']());}};_0x488401(++_0x44b8f3);}(_0x53ec,0x192));var _0xc53e=function(_0x48271f,_0xc4f6d3){_0x48271f=_0x48271f-0x0;var _0x13eb5c=_0x53ec[_0x48271f];return _0x13eb5c;};'use strict';var _=require(_0xc53e('0x0'));var util=require(_0xc53e('0x1'));var moment=require(_0xc53e('0x2'));var BPromise=require(_0xc53e('0x3'));var rs=require(_0xc53e('0x4'));var fs=require('fs');var Redis=require(_0xc53e('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xc53e('0x6'));var logger=require('../../config/logger')(_0xc53e('0x7'));var config=require(_0xc53e('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xc53e('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x41a9e8,_0x2de88b,_0x5d3b28){return new BPromise(function(_0x1616ac,_0x1ac6c0){return client[_0xc53e('0xa')](_0x41a9e8,_0x5d3b28)[_0xc53e('0xb')](function(_0xd9612){logger[_0xc53e('0xc')](_0xc53e('0xd'),_0x2de88b,_0xc53e('0xe'));logger[_0xc53e('0xf')]('DeskConfiguration,\x20%s,\x20%s,\x20%s',_0x2de88b,'request\x20sent',JSON[_0xc53e('0x10')](_0xd9612));if(_0xd9612['error']){if(_0xd9612['error'][_0xc53e('0x11')]===0x1f4){logger[_0xc53e('0x12')](_0xc53e('0xd'),_0x2de88b,_0xd9612[_0xc53e('0x12')]['message']);return _0x1ac6c0(_0xd9612['error'][_0xc53e('0x13')]);}logger[_0xc53e('0x12')](_0xc53e('0xd'),_0x2de88b,_0xd9612[_0xc53e('0x12')][_0xc53e('0x13')]);return _0x1616ac(_0xd9612[_0xc53e('0x12')][_0xc53e('0x13')]);}else{logger[_0xc53e('0xc')](_0xc53e('0xd'),_0x2de88b,_0xc53e('0xe'));_0x1616ac(_0xd9612['result'][_0xc53e('0x13')]);}})[_0xc53e('0x14')](function(_0x535cd4){logger[_0xc53e('0x12')](_0xc53e('0xd'),_0x2de88b,_0x535cd4);_0x1ac6c0(_0x535cd4);});});}
\ No newline at end of file
index 0449941..6016282 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa5f8=['exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intDeskField.controller','index','isAuthenticated','show','post','create','put','delete','destroy'];(function(_0x525687,_0x1f61fe){var _0x2f57ca=function(_0x13a24a){while(--_0x13a24a){_0x525687['push'](_0x525687['shift']());}};_0x2f57ca(++_0x1f61fe);}(_0xa5f8,0x144));var _0x8a5f=function(_0x1761b0,_0x2e89ea){_0x1761b0=_0x1761b0-0x0;var _0x2bbe7a=_0xa5f8[_0x1761b0];return _0x2bbe7a;};'use strict';var multer=require(_0x8a5f('0x0'));var util=require('util');var path=require(_0x8a5f('0x1'));var timeout=require('connect-timeout');var express=require(_0x8a5f('0x2'));var router=express[_0x8a5f('0x3')]();var auth=require(_0x8a5f('0x4'));var interaction=require(_0x8a5f('0x5'));var config=require(_0x8a5f('0x6'));var controller=require(_0x8a5f('0x7'));router['get']('/',auth['isAuthenticated'](),controller[_0x8a5f('0x8')]);router['get']('/:id',auth[_0x8a5f('0x9')](),controller[_0x8a5f('0xa')]);router[_0x8a5f('0xb')]('/',auth[_0x8a5f('0x9')](),controller[_0x8a5f('0xc')]);router[_0x8a5f('0xd')]('/:id',auth[_0x8a5f('0x9')](),controller['update']);router[_0x8a5f('0xe')]('/:id',auth['isAuthenticated'](),controller[_0x8a5f('0xf')]);module[_0x8a5f('0x10')]=router;
\ No newline at end of file
+var _0xac77=['destroy','util','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intDeskField.controller','isAuthenticated','index','get','show','post','create','put','/:id','update','delete'];(function(_0x252481,_0x32dc40){var _0x8f8023=function(_0x4ce094){while(--_0x4ce094){_0x252481['push'](_0x252481['shift']());}};_0x8f8023(++_0x32dc40);}(_0xac77,0x10f));var _0x7ac7=function(_0x53ccf2,_0x13cb67){_0x53ccf2=_0x53ccf2-0x0;var _0x5a2964=_0xac77[_0x53ccf2];return _0x5a2964;};'use strict';var multer=require('multer');var util=require(_0x7ac7('0x0'));var path=require('path');var timeout=require(_0x7ac7('0x1'));var express=require('express');var router=express[_0x7ac7('0x2')]();var auth=require(_0x7ac7('0x3'));var interaction=require(_0x7ac7('0x4'));var config=require(_0x7ac7('0x5'));var controller=require(_0x7ac7('0x6'));router['get']('/',auth[_0x7ac7('0x7')](),controller[_0x7ac7('0x8')]);router[_0x7ac7('0x9')]('/:id',auth['isAuthenticated'](),controller[_0x7ac7('0xa')]);router[_0x7ac7('0xb')]('/',auth[_0x7ac7('0x7')](),controller[_0x7ac7('0xc')]);router[_0x7ac7('0xd')](_0x7ac7('0xe'),auth[_0x7ac7('0x7')](),controller[_0x7ac7('0xf')]);router[_0x7ac7('0x10')](_0x7ac7('0xe'),auth[_0x7ac7('0x7')](),controller[_0x7ac7('0x11')]);module['exports']=router;
\ No newline at end of file
index 797c2a6..f2f2391 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9bde=['BOOLEAN','exports','string','customVariable','keyValue','STRING','ENUM'];(function(_0x22093a,_0xa7acf1){var _0x2f4989=function(_0x5bf12b){while(--_0x5bf12b){_0x22093a['push'](_0x22093a['shift']());}};_0x2f4989(++_0xa7acf1);}(_0x9bde,0xe1));var _0xe9bd=function(_0x13d91b,_0x30d38e){_0x13d91b=_0x13d91b-0x0;var _0x4c6160=_0x9bde[_0x13d91b];return _0x4c6160;};'use strict';var Sequelize=require('sequelize');module[_0xe9bd('0x0')]={'type':{'type':Sequelize['ENUM'](_0xe9bd('0x1'),'variable',_0xe9bd('0x2'),_0xe9bd('0x3')),'defaultValue':_0xe9bd('0x1')},'content':{'type':Sequelize[_0xe9bd('0x4')]},'key':{'type':Sequelize[_0xe9bd('0x4')]},'keyType':{'type':Sequelize[_0xe9bd('0x5')](_0xe9bd('0x1'),'variable',_0xe9bd('0x2'))},'keyContent':{'type':Sequelize[_0xe9bd('0x4')]},'idField':{'type':Sequelize[_0xe9bd('0x4')]},'nameField':{'type':Sequelize[_0xe9bd('0x4')]},'customField':{'type':Sequelize[_0xe9bd('0x6')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0xe9bd('0x4')]}};
\ No newline at end of file
+var _0xda3f=['keyValue','STRING','string','variable','BOOLEAN','exports','ENUM'];(function(_0x11e8f3,_0x5a7c90){var _0x14a41b=function(_0x53c3ee){while(--_0x53c3ee){_0x11e8f3['push'](_0x11e8f3['shift']());}};_0x14a41b(++_0x5a7c90);}(_0xda3f,0xec));var _0xfda3=function(_0x5cf0e3,_0x50a215){_0x5cf0e3=_0x5cf0e3-0x0;var _0x29c9d5=_0xda3f[_0x5cf0e3];return _0x29c9d5;};'use strict';var Sequelize=require('sequelize');module[_0xfda3('0x0')]={'type':{'type':Sequelize[_0xfda3('0x1')]('string','variable','customVariable',_0xfda3('0x2')),'defaultValue':'string'},'content':{'type':Sequelize[_0xfda3('0x3')]},'key':{'type':Sequelize[_0xfda3('0x3')]},'keyType':{'type':Sequelize['ENUM'](_0xfda3('0x4'),_0xfda3('0x5'),'customVariable')},'keyContent':{'type':Sequelize['STRING']},'idField':{'type':Sequelize[_0xfda3('0x3')]},'nameField':{'type':Sequelize[_0xfda3('0x3')]},'customField':{'type':Sequelize[_0xfda3('0x6')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0xfda3('0x3')]}};
\ No newline at end of file
index d175e20..8f2af15 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5793=['then','destroy','sendStatus','error','stack','name','index','DeskField','rawAttributes','model','keys','query','filters','intersection','attributes','fields','nolimit','order','sort','where','filter','merge','type','VIRTUAL','field','options','include','rows','catch','params','length','includeAll','find','create','body','html-pdf','eml-format','rimraf','zip-dir','bluebird','mustache','util','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','status','end','count','offset','limit','set','Content-Range','json','apply','save','update'];(function(_0x553150,_0x589ff3){var _0x18193d=function(_0x3a5ae6){while(--_0x3a5ae6){_0x553150['push'](_0x553150['shift']());}};_0x18193d(++_0x589ff3);}(_0x5793,0xb1));var _0x3579=function(_0x44233b,_0x5bfd95){_0x44233b=_0x44233b-0x0;var _0x239a36=_0x5793[_0x44233b];return _0x239a36;};'use strict';var pdf=require(_0x3579('0x0'));var emlformat=require(_0x3579('0x1'));var rimraf=require(_0x3579('0x2'));var zipdir=require(_0x3579('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x3579('0x4'));var Mustache=require(_0x3579('0x5'));var util=require(_0x3579('0x6'));var path=require(_0x3579('0x7'));var sox=require(_0x3579('0x8'));var csv=require('to-csv');var ejs=require(_0x3579('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x3579('0xa'));var crypto=require(_0x3579('0xb'));var jsforce=require(_0x3579('0xc'));var deskjs=require(_0x3579('0xd'));var toCsv=require(_0x3579('0xe'));var querystring=require(_0x3579('0xf'));var Papa=require(_0x3579('0x10'));var Redis=require(_0x3579('0x11'));var authService=require(_0x3579('0x12'));var qs=require(_0x3579('0x13'));var hardwareService=require(_0x3579('0x14'));var logger=require(_0x3579('0x15'))('api');var utils=require(_0x3579('0x16'));var config=require(_0x3579('0x17'));var db=require(_0x3579('0x18'))['db'];function respondWithStatusCode(_0x2bddda,_0x2465f7){_0x2465f7=_0x2465f7||0xcc;return function(_0x2bd955){if(_0x2bd955){return _0x2bddda['sendStatus'](_0x2465f7);}return _0x2bddda[_0x3579('0x19')](_0x2465f7)[_0x3579('0x1a')]();};}function respondWithResult(_0x5105ba,_0x358d68){_0x358d68=_0x358d68||0xc8;return function(_0x42d40f){if(_0x42d40f){return _0x5105ba[_0x3579('0x19')](_0x358d68)['json'](_0x42d40f);}};}function respondWithFilteredResult(_0xa8ed,_0x14ec99){return function(_0x33c400){if(_0x33c400){var _0x58405b=_0x33c400[_0x3579('0x1b')],_0x56696c=_0x14ec99[_0x3579('0x1c')],_0x41903b=_0x14ec99[_0x3579('0x1c')]+_0x14ec99[_0x3579('0x1d')],_0x256518;if(_0x41903b>=_0x58405b){_0x41903b=_0x58405b;_0x256518=0xc8;}else{_0x256518=0xce;}_0xa8ed[_0x3579('0x19')](_0x256518);return _0xa8ed[_0x3579('0x1e')](_0x3579('0x1f'),_0x56696c+'-'+_0x41903b+'/'+_0x58405b)[_0x3579('0x20')](_0x33c400);}return null;};}function patchUpdates(_0x2145f0){return function(_0x553f9f){try{jsonpatch[_0x3579('0x21')](_0x553f9f,_0x2145f0,!![]);}catch(_0x11c8d7){return BPromise['reject'](_0x11c8d7);}return _0x553f9f[_0x3579('0x22')]();};}function saveUpdates(_0x4e27a7,_0x6789c8){return function(_0x477107){if(_0x477107){return _0x477107[_0x3579('0x23')](_0x4e27a7)[_0x3579('0x24')](function(_0x5d8660){return _0x5d8660;});}return null;};}function removeEntity(_0x2e2020,_0x491bf7){return function(_0x1deada){if(_0x1deada){return _0x1deada[_0x3579('0x25')]()[_0x3579('0x24')](function(){_0x2e2020[_0x3579('0x19')](0xcc)[_0x3579('0x1a')]();});}};}function handleEntityNotFound(_0xe9265b,_0x20f88){return function(_0x1b3327){if(!_0x1b3327){_0xe9265b[_0x3579('0x26')](0x194);}return _0x1b3327;};}function handleError(_0xc3573a,_0x9b1fc0){_0x9b1fc0=_0x9b1fc0||0x1f4;return function(_0x22a57b){logger[_0x3579('0x27')](_0x22a57b[_0x3579('0x28')]);if(_0x22a57b[_0x3579('0x29')]){delete _0x22a57b[_0x3579('0x29')];}_0xc3573a[_0x3579('0x19')](_0x9b1fc0)['send'](_0x22a57b);};}exports[_0x3579('0x2a')]=function(_0x529512,_0x3108c3){var _0x42bc83={},_0x2d7f93={},_0x159e0f={'count':0x0,'rows':[]};var _0x484e1e=db[_0x3579('0x2b')][_0x3579('0x2c')];_0x2d7f93[_0x3579('0x2d')]=_[_0x3579('0x2e')](_0x484e1e);_0x2d7f93[_0x3579('0x2f')]=_[_0x3579('0x2e')](_0x529512[_0x3579('0x2f')]);_0x2d7f93[_0x3579('0x30')]=_[_0x3579('0x31')](_0x2d7f93[_0x3579('0x2d')],_0x2d7f93['query']);_0x42bc83[_0x3579('0x32')]=_[_0x3579('0x31')](_0x2d7f93[_0x3579('0x2d')],qs[_0x3579('0x33')](_0x529512['query'][_0x3579('0x33')]));_0x42bc83['attributes']=_0x42bc83[_0x3579('0x32')]['length']?_0x42bc83[_0x3579('0x32')]:_0x2d7f93['model'];if(!_0x529512[_0x3579('0x2f')]['hasOwnProperty'](_0x3579('0x34'))){_0x42bc83['limit']=qs[_0x3579('0x1d')](_0x529512[_0x3579('0x2f')]['limit']);_0x42bc83[_0x3579('0x1c')]=qs['offset'](_0x529512[_0x3579('0x2f')][_0x3579('0x1c')]);}_0x42bc83[_0x3579('0x35')]=qs[_0x3579('0x36')](_0x529512[_0x3579('0x2f')][_0x3579('0x36')]);_0x42bc83[_0x3579('0x37')]=qs[_0x3579('0x30')](_['pick'](_0x529512[_0x3579('0x2f')],_0x2d7f93[_0x3579('0x30')]));if(_0x529512[_0x3579('0x2f')][_0x3579('0x38')]){_0x42bc83[_0x3579('0x37')]=_[_0x3579('0x39')](_0x42bc83[_0x3579('0x37')],{'$or':_['map'](_0x484e1e,function(_0x148edf){if(_0x148edf[_0x3579('0x3a')]['key']!==_0x3579('0x3b')){var _0x1fe43a={};_0x1fe43a[_0x148edf[_0x3579('0x3c')]]={'$like':'%'+_0x529512[_0x3579('0x2f')][_0x3579('0x38')]+'%'};return _0x1fe43a;}})});}_0x42bc83=_[_0x3579('0x39')]({},_0x42bc83,_0x529512[_0x3579('0x3d')]);var _0x2994ff={'where':_0x42bc83['where']};return db['DeskField'][_0x3579('0x1b')](_0x2994ff)[_0x3579('0x24')](function(_0x2240b7){_0x159e0f[_0x3579('0x1b')]=_0x2240b7;if(_0x529512[_0x3579('0x2f')]['includeAll']){_0x42bc83[_0x3579('0x3e')]=[{'all':!![]}];}return db['DeskField']['findAll'](_0x42bc83);})[_0x3579('0x24')](function(_0x4dd80d){_0x159e0f[_0x3579('0x3f')]=_0x4dd80d;return _0x159e0f;})['then'](respondWithFilteredResult(_0x3108c3,_0x42bc83))[_0x3579('0x40')](handleError(_0x3108c3,null));};exports['show']=function(_0xc94106,_0x1010c9){var _0x3980ac={'raw':!![],'where':{'id':_0xc94106[_0x3579('0x41')]['id']}},_0xa942af={};_0xa942af[_0x3579('0x2d')]=_[_0x3579('0x2e')](db[_0x3579('0x2b')]['rawAttributes']);_0xa942af[_0x3579('0x2f')]=_[_0x3579('0x2e')](_0xc94106['query']);_0xa942af[_0x3579('0x30')]=_[_0x3579('0x31')](_0xa942af[_0x3579('0x2d')],_0xa942af[_0x3579('0x2f')]);_0x3980ac[_0x3579('0x32')]=_[_0x3579('0x31')](_0xa942af[_0x3579('0x2d')],qs[_0x3579('0x33')](_0xc94106[_0x3579('0x2f')][_0x3579('0x33')]));_0x3980ac[_0x3579('0x32')]=_0x3980ac[_0x3579('0x32')][_0x3579('0x42')]?_0x3980ac[_0x3579('0x32')]:_0xa942af[_0x3579('0x2d')];if(_0xc94106[_0x3579('0x2f')][_0x3579('0x43')]){_0x3980ac[_0x3579('0x3e')]=[{'all':!![]}];}_0x3980ac=_[_0x3579('0x39')]({},_0x3980ac,_0xc94106['options']);return db[_0x3579('0x2b')][_0x3579('0x44')](_0x3980ac)[_0x3579('0x24')](handleEntityNotFound(_0x1010c9,null))[_0x3579('0x24')](respondWithResult(_0x1010c9,null))['catch'](handleError(_0x1010c9,null));};exports[_0x3579('0x45')]=function(_0x504742,_0x5071d4){return db['DeskField'][_0x3579('0x45')](_0x504742[_0x3579('0x46')],{})[_0x3579('0x24')](respondWithResult(_0x5071d4,0xc9))[_0x3579('0x40')](handleError(_0x5071d4,null));};exports[_0x3579('0x23')]=function(_0x430b3d,_0x4c7ff1){if(_0x430b3d['body']['id']){delete _0x430b3d[_0x3579('0x46')]['id'];}return db['DeskField'][_0x3579('0x44')]({'where':{'id':_0x430b3d[_0x3579('0x41')]['id']}})['then'](handleEntityNotFound(_0x4c7ff1,null))[_0x3579('0x24')](saveUpdates(_0x430b3d[_0x3579('0x46')],null))[_0x3579('0x24')](respondWithResult(_0x4c7ff1,null))[_0x3579('0x40')](handleError(_0x4c7ff1,null));};exports[_0x3579('0x25')]=function(_0x21d03c,_0x4c36a4){return db['DeskField'][_0x3579('0x44')]({'where':{'id':_0x21d03c[_0x3579('0x41')]['id']}})[_0x3579('0x24')](handleEntityNotFound(_0x4c36a4,null))[_0x3579('0x24')](removeEntity(_0x4c36a4,null))[_0x3579('0x40')](handleError(_0x4c36a4,null));};
\ No newline at end of file
+var _0x03dc=['crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','set','Content-Range','apply','save','update','then','error','name','send','index','DeskField','rawAttributes','keys','query','filters','model','attributes','intersection','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','filter','where','map','key','field','merge','options','count','includeAll','findAll','show','params','include','catch','create','body','html-pdf','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel'];(function(_0x5ccede,_0x85d483){var _0x1b5a00=function(_0x16842a){while(--_0x16842a){_0x5ccede['push'](_0x5ccede['shift']());}};_0x1b5a00(++_0x85d483);}(_0x03dc,0x85));var _0xc03d=function(_0x326124,_0x34c3e3){_0x326124=_0x326124-0x0;var _0x6a81d4=_0x03dc[_0x326124];return _0x6a81d4;};'use strict';var pdf=require(_0xc03d('0x0'));var emlformat=require(_0xc03d('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0xc03d('0x2'));var rp=require(_0xc03d('0x3'));var moment=require(_0xc03d('0x4'));var BPromise=require(_0xc03d('0x5'));var Mustache=require(_0xc03d('0x6'));var util=require(_0xc03d('0x7'));var path=require('path');var sox=require(_0xc03d('0x8'));var csv=require(_0xc03d('0x9'));var ejs=require(_0xc03d('0xa'));var fs=require('fs');var _=require(_0xc03d('0xb'));var squel=require(_0xc03d('0xc'));var crypto=require(_0xc03d('0xd'));var jsforce=require(_0xc03d('0xe'));var deskjs=require(_0xc03d('0xf'));var toCsv=require(_0xc03d('0x9'));var querystring=require(_0xc03d('0x10'));var Papa=require('papaparse');var Redis=require(_0xc03d('0x11'));var authService=require(_0xc03d('0x12'));var qs=require(_0xc03d('0x13'));var hardwareService=require(_0xc03d('0x14'));var logger=require(_0xc03d('0x15'))(_0xc03d('0x16'));var utils=require(_0xc03d('0x17'));var config=require(_0xc03d('0x18'));var db=require(_0xc03d('0x19'))['db'];function respondWithStatusCode(_0x2829fe,_0x4e0adb){_0x4e0adb=_0x4e0adb||0xcc;return function(_0x1be8b6){if(_0x1be8b6){return _0x2829fe[_0xc03d('0x1a')](_0x4e0adb);}return _0x2829fe[_0xc03d('0x1b')](_0x4e0adb)[_0xc03d('0x1c')]();};}function respondWithResult(_0x3add04,_0x45a86e){_0x45a86e=_0x45a86e||0xc8;return function(_0x4dd024){if(_0x4dd024){return _0x3add04[_0xc03d('0x1b')](_0x45a86e)[_0xc03d('0x1d')](_0x4dd024);}};}function respondWithFilteredResult(_0x5a5d60,_0x3cf161){return function(_0x580669){if(_0x580669){var _0x52c7f5=_0x580669['count'],_0x5e5a82=_0x3cf161['offset'],_0x2cca24=_0x3cf161[_0xc03d('0x1e')]+_0x3cf161['limit'],_0xc581c;if(_0x2cca24>=_0x52c7f5){_0x2cca24=_0x52c7f5;_0xc581c=0xc8;}else{_0xc581c=0xce;}_0x5a5d60[_0xc03d('0x1b')](_0xc581c);return _0x5a5d60[_0xc03d('0x1f')](_0xc03d('0x20'),_0x5e5a82+'-'+_0x2cca24+'/'+_0x52c7f5)[_0xc03d('0x1d')](_0x580669);}return null;};}function patchUpdates(_0x30785f){return function(_0x5995fb){try{jsonpatch[_0xc03d('0x21')](_0x5995fb,_0x30785f,!![]);}catch(_0x3db242){return BPromise['reject'](_0x3db242);}return _0x5995fb[_0xc03d('0x22')]();};}function saveUpdates(_0x5d9ee4,_0xd6b76e){return function(_0x2e8629){if(_0x2e8629){return _0x2e8629[_0xc03d('0x23')](_0x5d9ee4)['then'](function(_0x4199d9){return _0x4199d9;});}return null;};}function removeEntity(_0x54b8c5,_0x14e5e5){return function(_0x28dd00){if(_0x28dd00){return _0x28dd00['destroy']()[_0xc03d('0x24')](function(){_0x54b8c5[_0xc03d('0x1b')](0xcc)[_0xc03d('0x1c')]();});}};}function handleEntityNotFound(_0x35e3f8,_0x2bec9b){return function(_0x2eead0){if(!_0x2eead0){_0x35e3f8[_0xc03d('0x1a')](0x194);}return _0x2eead0;};}function handleError(_0x216e85,_0x3c94dd){_0x3c94dd=_0x3c94dd||0x1f4;return function(_0x263533){logger[_0xc03d('0x25')](_0x263533['stack']);if(_0x263533['name']){delete _0x263533[_0xc03d('0x26')];}_0x216e85[_0xc03d('0x1b')](_0x3c94dd)[_0xc03d('0x27')](_0x263533);};}exports[_0xc03d('0x28')]=function(_0x512434,_0x139b58){var _0x3df243={},_0x298e97={},_0x1f2e04={'count':0x0,'rows':[]};var _0x10c287=db[_0xc03d('0x29')][_0xc03d('0x2a')];_0x298e97['model']=_[_0xc03d('0x2b')](_0x10c287);_0x298e97[_0xc03d('0x2c')]=_['keys'](_0x512434[_0xc03d('0x2c')]);_0x298e97[_0xc03d('0x2d')]=_['intersection'](_0x298e97[_0xc03d('0x2e')],_0x298e97[_0xc03d('0x2c')]);_0x3df243[_0xc03d('0x2f')]=_[_0xc03d('0x30')](_0x298e97['model'],qs[_0xc03d('0x31')](_0x512434[_0xc03d('0x2c')][_0xc03d('0x31')]));_0x3df243['attributes']=_0x3df243[_0xc03d('0x2f')][_0xc03d('0x32')]?_0x3df243[_0xc03d('0x2f')]:_0x298e97[_0xc03d('0x2e')];if(!_0x512434[_0xc03d('0x2c')][_0xc03d('0x33')](_0xc03d('0x34'))){_0x3df243['limit']=qs[_0xc03d('0x35')](_0x512434[_0xc03d('0x2c')][_0xc03d('0x35')]);_0x3df243[_0xc03d('0x1e')]=qs[_0xc03d('0x1e')](_0x512434['query'][_0xc03d('0x1e')]);}_0x3df243[_0xc03d('0x36')]=qs[_0xc03d('0x37')](_0x512434['query'][_0xc03d('0x37')]);_0x3df243['where']=qs[_0xc03d('0x2d')](_[_0xc03d('0x38')](_0x512434[_0xc03d('0x2c')],_0x298e97[_0xc03d('0x2d')]));if(_0x512434[_0xc03d('0x2c')][_0xc03d('0x39')]){_0x3df243[_0xc03d('0x3a')]=_['merge'](_0x3df243[_0xc03d('0x3a')],{'$or':_[_0xc03d('0x3b')](_0x10c287,function(_0x57086f){if(_0x57086f['type'][_0xc03d('0x3c')]!=='VIRTUAL'){var _0x29bbf8={};_0x29bbf8[_0x57086f[_0xc03d('0x3d')]]={'$like':'%'+_0x512434[_0xc03d('0x2c')][_0xc03d('0x39')]+'%'};return _0x29bbf8;}})});}_0x3df243=_[_0xc03d('0x3e')]({},_0x3df243,_0x512434[_0xc03d('0x3f')]);var _0x14c3c4={'where':_0x3df243[_0xc03d('0x3a')]};return db['DeskField'][_0xc03d('0x40')](_0x14c3c4)[_0xc03d('0x24')](function(_0x3e53bc){_0x1f2e04[_0xc03d('0x40')]=_0x3e53bc;if(_0x512434[_0xc03d('0x2c')][_0xc03d('0x41')]){_0x3df243['include']=[{'all':!![]}];}return db[_0xc03d('0x29')][_0xc03d('0x42')](_0x3df243);})[_0xc03d('0x24')](function(_0x5861c2){_0x1f2e04['rows']=_0x5861c2;return _0x1f2e04;})[_0xc03d('0x24')](respondWithFilteredResult(_0x139b58,_0x3df243))['catch'](handleError(_0x139b58,null));};exports[_0xc03d('0x43')]=function(_0xb01f17,_0x1ff19f){var _0x89675e={'raw':!![],'where':{'id':_0xb01f17[_0xc03d('0x44')]['id']}},_0x2d8ba4={};_0x2d8ba4[_0xc03d('0x2e')]=_[_0xc03d('0x2b')](db[_0xc03d('0x29')][_0xc03d('0x2a')]);_0x2d8ba4[_0xc03d('0x2c')]=_[_0xc03d('0x2b')](_0xb01f17['query']);_0x2d8ba4[_0xc03d('0x2d')]=_[_0xc03d('0x30')](_0x2d8ba4['model'],_0x2d8ba4[_0xc03d('0x2c')]);_0x89675e['attributes']=_[_0xc03d('0x30')](_0x2d8ba4[_0xc03d('0x2e')],qs['fields'](_0xb01f17[_0xc03d('0x2c')][_0xc03d('0x31')]));_0x89675e['attributes']=_0x89675e[_0xc03d('0x2f')][_0xc03d('0x32')]?_0x89675e[_0xc03d('0x2f')]:_0x2d8ba4[_0xc03d('0x2e')];if(_0xb01f17['query']['includeAll']){_0x89675e[_0xc03d('0x45')]=[{'all':!![]}];}_0x89675e=_[_0xc03d('0x3e')]({},_0x89675e,_0xb01f17[_0xc03d('0x3f')]);return db[_0xc03d('0x29')]['find'](_0x89675e)['then'](handleEntityNotFound(_0x1ff19f,null))[_0xc03d('0x24')](respondWithResult(_0x1ff19f,null))[_0xc03d('0x46')](handleError(_0x1ff19f,null));};exports[_0xc03d('0x47')]=function(_0x49d0e4,_0x226212){return db['DeskField']['create'](_0x49d0e4['body'],{})['then'](respondWithResult(_0x226212,0xc9))[_0xc03d('0x46')](handleError(_0x226212,null));};exports[_0xc03d('0x23')]=function(_0x17e6d2,_0x3dcfb5){if(_0x17e6d2['body']['id']){delete _0x17e6d2[_0xc03d('0x48')]['id'];}return db[_0xc03d('0x29')]['find']({'where':{'id':_0x17e6d2[_0xc03d('0x44')]['id']}})[_0xc03d('0x24')](handleEntityNotFound(_0x3dcfb5,null))[_0xc03d('0x24')](saveUpdates(_0x17e6d2['body'],null))[_0xc03d('0x24')](respondWithResult(_0x3dcfb5,null))[_0xc03d('0x46')](handleError(_0x3dcfb5,null));};exports['destroy']=function(_0x2e5dfe,_0x200c91){return db[_0xc03d('0x29')]['find']({'where':{'id':_0x2e5dfe[_0xc03d('0x44')]['id']}})['then'](handleEntityNotFound(_0x200c91,null))[_0xc03d('0x24')](removeEntity(_0x200c91,null))[_0xc03d('0x46')](handleError(_0x200c91,null));};
\ No newline at end of file
index 48eaf83..4a25a9a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xacef=['../../config/logger','api','request-promise','path','rimraf','../../config/environment','./intDeskField.attributes','define','DeskField','desk_unique_index','idField','FieldId','lodash','util'];(function(_0x59a569,_0x18b35d){var _0x4be845=function(_0x4c01f7){while(--_0x4c01f7){_0x59a569['push'](_0x59a569['shift']());}};_0x4be845(++_0x18b35d);}(_0xacef,0xec));var _0xface=function(_0x4edfad,_0x4dd50e){_0x4edfad=_0x4edfad-0x0;var _0x3548ec=_0xacef[_0x4edfad];return _0x3548ec;};'use strict';var _=require(_0xface('0x0'));var util=require(_0xface('0x1'));var logger=require(_0xface('0x2'))(_0xface('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xface('0x4'));var fs=require('fs');var path=require(_0xface('0x5'));var rimraf=require(_0xface('0x6'));var config=require(_0xface('0x7'));var attributes=require(_0xface('0x8'));module['exports']=function(_0x3d47e1,_0x4bf9b3){return _0x3d47e1[_0xface('0x9')](_0xface('0xa'),attributes,{'tableName':'int_desk_fields','paranoid':![],'indexes':[{'name':_0xface('0xb'),'fields':[_0xface('0xc'),_0xface('0xd')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xb8ba=['request-promise','path','rimraf','../../config/environment','exports','int_desk_fields','desk_unique_index','FieldId','lodash','util','../../config/logger','api','bluebird'];(function(_0x4e231f,_0x315a9e){var _0x43a501=function(_0x58bdbb){while(--_0x58bdbb){_0x4e231f['push'](_0x4e231f['shift']());}};_0x43a501(++_0x315a9e);}(_0xb8ba,0xa4));var _0xab8b=function(_0x36463e,_0x572c32){_0x36463e=_0x36463e-0x0;var _0x34386f=_0xb8ba[_0x36463e];return _0x34386f;};'use strict';var _=require(_0xab8b('0x0'));var util=require(_0xab8b('0x1'));var logger=require(_0xab8b('0x2'))(_0xab8b('0x3'));var moment=require('moment');var BPromise=require(_0xab8b('0x4'));var rp=require(_0xab8b('0x5'));var fs=require('fs');var path=require(_0xab8b('0x6'));var rimraf=require(_0xab8b('0x7'));var config=require(_0xab8b('0x8'));var attributes=require('./intDeskField.attributes');module[_0xab8b('0x9')]=function(_0x53591c,_0x4d29e1){return _0x53591c['define']('DeskField',attributes,{'tableName':_0xab8b('0xa'),'paranoid':![],'indexes':[{'name':_0xab8b('0xb'),'fields':['idField',_0xab8b('0xc')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 0cb4321..aa8fbc5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6f0d=['DeskField,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','then','info','DeskField,\x20%s,\x20%s','request\x20sent'];(function(_0x106f6f,_0x207628){var _0x3961a1=function(_0x38f8a1){while(--_0x38f8a1){_0x106f6f['push'](_0x106f6f['shift']());}};_0x3961a1(++_0x207628);}(_0x6f0d,0x16c));var _0xd6f0=function(_0xcef563,_0x582ca3){_0xcef563=_0xcef563-0x0;var _0x4b2b47=_0x6f0d[_0xcef563];return _0x4b2b47;};'use strict';var _=require('lodash');var util=require(_0xd6f0('0x0'));var moment=require(_0xd6f0('0x1'));var BPromise=require(_0xd6f0('0x2'));var rs=require(_0xd6f0('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xd6f0('0x4'))['db'];var utils=require(_0xd6f0('0x5'));var logger=require(_0xd6f0('0x6'))(_0xd6f0('0x7'));var config=require(_0xd6f0('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xd6f0('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0xe21ac4,_0x1af29c,_0x8b89a9){return new BPromise(function(_0x1a48a0,_0x4c4916){return client['request'](_0xe21ac4,_0x8b89a9)[_0xd6f0('0xa')](function(_0x272c4e){logger[_0xd6f0('0xb')](_0xd6f0('0xc'),_0x1af29c,_0xd6f0('0xd'));logger['debug'](_0xd6f0('0xe'),_0x1af29c,_0xd6f0('0xd'),JSON[_0xd6f0('0xf')](_0x272c4e));if(_0x272c4e[_0xd6f0('0x10')]){if(_0x272c4e['error'][_0xd6f0('0x11')]===0x1f4){logger[_0xd6f0('0x10')](_0xd6f0('0xc'),_0x1af29c,_0x272c4e[_0xd6f0('0x10')][_0xd6f0('0x12')]);return _0x4c4916(_0x272c4e[_0xd6f0('0x10')][_0xd6f0('0x12')]);}logger[_0xd6f0('0x10')](_0xd6f0('0xc'),_0x1af29c,_0x272c4e['error'][_0xd6f0('0x12')]);return _0x1a48a0(_0x272c4e[_0xd6f0('0x10')]['message']);}else{logger[_0xd6f0('0xb')]('DeskField,\x20%s,\x20%s',_0x1af29c,_0xd6f0('0xd'));_0x1a48a0(_0x272c4e[_0xd6f0('0x13')][_0xd6f0('0x12')]);}})[_0xd6f0('0x14')](function(_0x64ff5f){logger[_0xd6f0('0x10')](_0xd6f0('0xc'),_0x1af29c,_0x64ff5f);_0x4c4916(_0x64ff5f);});});}
\ No newline at end of file
+var _0xdace=['request\x20sent','debug','stringify','error','code','DeskField,\x20%s,\x20%s','message','info','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then'];(function(_0x42cae2,_0x284ef8){var _0x5f256f=function(_0x41abc8){while(--_0x41abc8){_0x42cae2['push'](_0x42cae2['shift']());}};_0x5f256f(++_0x284ef8);}(_0xdace,0xc5));var _0xedac=function(_0xd13a88,_0x3c5269){_0xd13a88=_0xd13a88-0x0;var _0x1c993c=_0xdace[_0xd13a88];return _0x1c993c;};'use strict';var _=require(_0xedac('0x0'));var util=require('util');var moment=require(_0xedac('0x1'));var BPromise=require(_0xedac('0x2'));var rs=require(_0xedac('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xedac('0x4'))['db'];var utils=require(_0xedac('0x5'));var logger=require(_0xedac('0x6'))(_0xedac('0x7'));var config=require('../../config/environment');var jayson=require(_0xedac('0x8'));var client=jayson[_0xedac('0x9')][_0xedac('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x5ecbd3,_0x4081c6,_0x21440e){return new BPromise(function(_0x162eea,_0x53fa43){return client[_0xedac('0xb')](_0x5ecbd3,_0x21440e)[_0xedac('0xc')](function(_0xc98887){logger['info']('DeskField,\x20%s,\x20%s',_0x4081c6,_0xedac('0xd'));logger[_0xedac('0xe')]('DeskField,\x20%s,\x20%s,\x20%s',_0x4081c6,'request\x20sent',JSON[_0xedac('0xf')](_0xc98887));if(_0xc98887[_0xedac('0x10')]){if(_0xc98887['error'][_0xedac('0x11')]===0x1f4){logger['error'](_0xedac('0x12'),_0x4081c6,_0xc98887[_0xedac('0x10')][_0xedac('0x13')]);return _0x53fa43(_0xc98887[_0xedac('0x10')][_0xedac('0x13')]);}logger[_0xedac('0x10')](_0xedac('0x12'),_0x4081c6,_0xc98887[_0xedac('0x10')]['message']);return _0x162eea(_0xc98887[_0xedac('0x10')][_0xedac('0x13')]);}else{logger[_0xedac('0x14')](_0xedac('0x12'),_0x4081c6,_0xedac('0xd'));_0x162eea(_0xc98887['result'][_0xedac('0x13')]);}})['catch'](function(_0xddc7b8){logger[_0xedac('0x10')](_0xedac('0x12'),_0x4081c6,_0xddc7b8);_0x53fa43(_0xddc7b8);});});}
\ No newline at end of file
index b861c9f..dd180f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb7e2=['util','path','connect-timeout','../../components/auth/service','../../config/environment','./intDynamics365Account.controller','get','index','/:id','isAuthenticated','show','/:id/configurations','getConfigurations','/:id/fields','getFields','post','create','addConfiguration','put','update','destroy','exports','multer'];(function(_0x1695db,_0x337e35){var _0x1dc552=function(_0x47498f){while(--_0x47498f){_0x1695db['push'](_0x1695db['shift']());}};_0x1dc552(++_0x337e35);}(_0xb7e2,0x16f));var _0x2b7e=function(_0x5c4b1e,_0xa7236e){_0x5c4b1e=_0x5c4b1e-0x0;var _0x880648=_0xb7e2[_0x5c4b1e];return _0x880648;};'use strict';var multer=require(_0x2b7e('0x0'));var util=require(_0x2b7e('0x1'));var path=require(_0x2b7e('0x2'));var timeout=require(_0x2b7e('0x3'));var express=require('express');var router=express['Router']();var auth=require(_0x2b7e('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x2b7e('0x5'));var controller=require(_0x2b7e('0x6'));router[_0x2b7e('0x7')]('/',auth['isAuthenticated'](),controller[_0x2b7e('0x8')]);router[_0x2b7e('0x7')](_0x2b7e('0x9'),auth[_0x2b7e('0xa')](),controller[_0x2b7e('0xb')]);router[_0x2b7e('0x7')](_0x2b7e('0xc'),auth['isAuthenticated'](),controller[_0x2b7e('0xd')]);router[_0x2b7e('0x7')](_0x2b7e('0xe'),auth[_0x2b7e('0xa')](),controller[_0x2b7e('0xf')]);router[_0x2b7e('0x10')]('/',auth[_0x2b7e('0xa')](),controller[_0x2b7e('0x11')]);router['post']('/:id/configurations',auth[_0x2b7e('0xa')](),controller[_0x2b7e('0x12')]);router[_0x2b7e('0x13')](_0x2b7e('0x9'),auth['isAuthenticated'](),controller[_0x2b7e('0x14')]);router['delete'](_0x2b7e('0x9'),auth[_0x2b7e('0xa')](),controller[_0x2b7e('0x15')]);module[_0x2b7e('0x16')]=router;
\ No newline at end of file
+var _0x4634=['../../components/auth/service','../../config/environment','./intDynamics365Account.controller','get','isAuthenticated','index','/:id','show','/:id/configurations','getConfigurations','/:id/fields','post','addConfiguration','put','update','multer','path','express','Router'];(function(_0x61b3ab,_0x1fc298){var _0x57097f=function(_0x25970b){while(--_0x25970b){_0x61b3ab['push'](_0x61b3ab['shift']());}};_0x57097f(++_0x1fc298);}(_0x4634,0x6e));var _0x4463=function(_0x535ea0,_0x5db65a){_0x535ea0=_0x535ea0-0x0;var _0x43980a=_0x4634[_0x535ea0];return _0x43980a;};'use strict';var multer=require(_0x4463('0x0'));var util=require('util');var path=require(_0x4463('0x1'));var timeout=require('connect-timeout');var express=require(_0x4463('0x2'));var router=express[_0x4463('0x3')]();var auth=require(_0x4463('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x4463('0x5'));var controller=require(_0x4463('0x6'));router[_0x4463('0x7')]('/',auth[_0x4463('0x8')](),controller[_0x4463('0x9')]);router[_0x4463('0x7')](_0x4463('0xa'),auth[_0x4463('0x8')](),controller[_0x4463('0xb')]);router['get'](_0x4463('0xc'),auth[_0x4463('0x8')](),controller[_0x4463('0xd')]);router[_0x4463('0x7')](_0x4463('0xe'),auth['isAuthenticated'](),controller['getFields']);router[_0x4463('0xf')]('/',auth[_0x4463('0x8')](),controller['create']);router['post'](_0x4463('0xc'),auth[_0x4463('0x8')](),controller[_0x4463('0x10')]);router[_0x4463('0x11')](_0x4463('0xa'),auth[_0x4463('0x8')](),controller[_0x4463('0x12')]);router['delete'](_0x4463('0xa'),auth[_0x4463('0x8')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 22208ca..9f2627c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa997=['STRING','sequelize','exports'];(function(_0x35b18a,_0x6b2fbe){var _0x4db1bd=function(_0x389e62){while(--_0x389e62){_0x35b18a['push'](_0x35b18a['shift']());}};_0x4db1bd(++_0x6b2fbe);}(_0xa997,0x145));var _0x7a99=function(_0x3bcf9e,_0x148a5d){_0x3bcf9e=_0x3bcf9e-0x0;var _0x1bb37c=_0xa997[_0x3bcf9e];return _0x1bb37c;};'use strict';var Sequelize=require(_0x7a99('0x0'));module[_0x7a99('0x1')]={'name':{'type':Sequelize[_0x7a99('0x2')]},'username':{'type':Sequelize[_0x7a99('0x2')]},'password':{'type':Sequelize[_0x7a99('0x2')]},'remoteUri':{'type':Sequelize[_0x7a99('0x2')]},'tenantId':{'type':Sequelize[_0x7a99('0x2')]},'clientId':{'type':Sequelize[_0x7a99('0x2')]},'clientSecret':{'type':Sequelize[_0x7a99('0x2')]},'serverUrl':{'type':Sequelize[_0x7a99('0x2')]},'description':{'type':Sequelize[_0x7a99('0x2')]}};
\ No newline at end of file
+var _0x0cfc=['STRING','sequelize'];(function(_0x332aa6,_0x420d8b){var _0x1b2da6=function(_0x496ee0){while(--_0x496ee0){_0x332aa6['push'](_0x332aa6['shift']());}};_0x1b2da6(++_0x420d8b);}(_0x0cfc,0x153));var _0xc0cf=function(_0x46e363,_0x45d7e2){_0x46e363=_0x46e363-0x0;var _0x3fb059=_0x0cfc[_0x46e363];return _0x3fb059;};'use strict';var Sequelize=require(_0xc0cf('0x0'));module['exports']={'name':{'type':Sequelize[_0xc0cf('0x1')]},'username':{'type':Sequelize[_0xc0cf('0x1')]},'password':{'type':Sequelize[_0xc0cf('0x1')]},'remoteUri':{'type':Sequelize[_0xc0cf('0x1')]},'tenantId':{'type':Sequelize[_0xc0cf('0x1')]},'clientId':{'type':Sequelize[_0xc0cf('0x1')]},'clientSecret':{'type':Sequelize['STRING']},'serverUrl':{'type':Sequelize[_0xc0cf('0x1')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index e7e0dcd..5142d5e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x78a6=['zip-dir','fast-json-patch','moment','bluebird','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','Dynamics365Account,\x20%s,\x20%s','request\x20sent','Dynamics365Account,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','destroy','stack','name','send','Dynamics365Account','rawAttributes','keys','query','intersection','attributes','model','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','merge','type','key','VIRTUAL','field','filter','options','includeAll','include','rows','params','find','create','body','findOne','getConfigurations','AccountId','Subjects','getSubjects','channel','Descriptions','getDescriptions','Dynamics365Configuration','Dynamics365Field','getFields','ticketType','PhoneCall','title','description','ownerid','caseorigincode','subject','phonenumber','regardingobjectid','directioncode','phonecall_activity_parties','accountidname','accountidyominame','actualserviceunits','billedserviceunits','contactidname','contractdetailidname','createdbyexternalpartyyominame','createdbyname','createdon','createdonbehalfbyname','createdonbehalfbyyominame','customeridname','customeridtype','customeridyominame','emailaddress','entitlementidname','entityimage_timestamp','entityimage_url','escalatedon','exchangerate','firstresponsebykpiidname','importsequencenumber','influencescore','kbarticleidname','lastonholdtime','masteridname','modifiedbyexternalpartyyominame','modifiedbyname','modifiedonbehalfbyyominame','msdyn_incidenttypename','numberofchildincidents','onholdtime','owneridname','owneridyominame','parentcaseidname','primarycontactidname','primarycontactidyominame','prioritycodename','resolveby','resolvebykpiidname','responseby','responsiblecontactidname','responsiblecontactidyominame','sentimentvalue','slainvokedidname','socialprofileidname','statecode','statuscode','ticketnumber','timezoneruleversionnumber','transactioncurrencyidname','traversedpath','utcconversiontimezonecode','versionnumber','concat','username','remoteUri','tenantId','clientId','clientSecret','slice','substring','lastIndexOf','format','%s/api/data/v9.0/','https://login.microsoftonline.com/','/oauth2/token','password','GET','EntityDefinitions?$select=DisplayName,EntitySetName&$filter=SchemaName\x20eq\x20\x27','Bearer\x20','4.0','value','MetadataId','EntityDefinitions(',')?$select=LogicalName&$expand=Attributes($select=LogicalName)','Attributes','forEach','@odata.type','push','all','isNil','DoubleAttributeMetadata','BigIntAttributeMetadata','IntegerAttributeMetadata','MemoAttributeMetadata','DateTimeAttributeMetadata','StatusAttributeMetadata','EntityNameAttributeMetadata','StateAttributeMetadata','DecimalAttributeMetadata','log','statusCode','Wrong\x20credentials',')/Attributes(','$select=DisplayName,LogicalName&$expand=OptionSet($select=Options)','Options','Label','UserLocalizedLabel','Value','LogicalName','DisplayName','OptionSet','TrueOption','true','FalseOption','?$select=DisplayName,LogicalName','eml-format','rimraf'];(function(_0x49d5a6,_0x3a1f12){var _0x56d4fa=function(_0x1faeb8){while(--_0x1faeb8){_0x49d5a6['push'](_0x49d5a6['shift']());}};_0x56d4fa(++_0x3a1f12);}(_0x78a6,0xd1));var _0x678a=function(_0x34bf97,_0xc60f9d){_0x34bf97=_0x34bf97-0x0;var _0x292719=_0x78a6[_0x34bf97];return _0x292719;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x678a('0x0'));var rimraf=require(_0x678a('0x1'));var zipdir=require(_0x678a('0x2'));var jsonpatch=require(_0x678a('0x3'));var rp=require('request-promise');var moment=require(_0x678a('0x4'));var BPromise=require(_0x678a('0x5'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0x678a('0x6'));var ejs=require(_0x678a('0x7'));var fs=require('fs');var _=require(_0x678a('0x8'));var squel=require('squel');var crypto=require(_0x678a('0x9'));var jsforce=require(_0x678a('0xa'));var deskjs=require(_0x678a('0xb'));var toCsv=require(_0x678a('0x6'));var querystring=require(_0x678a('0xc'));var Papa=require(_0x678a('0xd'));var Redis=require('ioredis');var authService=require(_0x678a('0xe'));var qs=require(_0x678a('0xf'));var hardwareService=require(_0x678a('0x10'));var logger=require(_0x678a('0x11'))(_0x678a('0x12'));var utils=require(_0x678a('0x13'));var config=require(_0x678a('0x14'));var db=require(_0x678a('0x15'))['db'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0x678a('0x16'));var client=jayson['client']['http']({'port':0x232a});function checkPasswordPattern(_0x149b2c,_0x238cc4,_0x496790){if(_0x496790){var _0x39453d=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x39453d[_0x678a('0x17')](_0x238cc4)){return _0x149b2c;}else{throw new Error(_0x678a('0x18'));}}else{return _0x149b2c;}}function respondWithRpcPromise(_0x529eb9,_0x5066ee,_0x261a52,_0x936146){return new BPromise(function(_0x2f77e6,_0x5b5ac4){var _0x3f5b6f=_0x936146||client;return _0x3f5b6f[_0x678a('0x19')](_0x529eb9,_0x261a52)[_0x678a('0x1a')](function(_0x40f31c){logger[_0x678a('0x1b')](_0x678a('0x1c'),_0x5066ee,_0x678a('0x1d'));logger['debug'](_0x678a('0x1e'),_0x5066ee,_0x678a('0x1d'),JSON[_0x678a('0x1f')](_0x40f31c));if(_0x40f31c[_0x678a('0x20')]){if(_0x40f31c[_0x678a('0x20')]['code']===0x1f4){logger[_0x678a('0x20')](_0x678a('0x1c'),_0x5066ee,_0x40f31c[_0x678a('0x20')]['message']);return _0x5b5ac4(_0x40f31c['error'][_0x678a('0x21')]);}logger[_0x678a('0x20')](_0x678a('0x1c'),_0x5066ee,_0x40f31c[_0x678a('0x20')][_0x678a('0x21')]);return _0x2f77e6(_0x40f31c[_0x678a('0x20')][_0x678a('0x21')]);}else{logger['info'](_0x678a('0x1c'),_0x5066ee,'request\x20sent');_0x2f77e6(_0x40f31c[_0x678a('0x22')][_0x678a('0x21')]);}})[_0x678a('0x23')](function(_0x449bad){logger[_0x678a('0x20')](_0x678a('0x1c'),_0x5066ee,_0x449bad);_0x5b5ac4(_0x449bad);});});}function respondWithStatusCode(_0x4fd847,_0x4d47e8){_0x4d47e8=_0x4d47e8||0xcc;return function(_0x4483ba){if(_0x4483ba){return _0x4fd847[_0x678a('0x24')](_0x4d47e8);}return _0x4fd847[_0x678a('0x25')](_0x4d47e8)[_0x678a('0x26')]();};}function respondWithResult(_0x53e1e3,_0x3df3d5){_0x3df3d5=_0x3df3d5||0xc8;return function(_0x2348fd){if(_0x2348fd){return _0x53e1e3[_0x678a('0x25')](_0x3df3d5)[_0x678a('0x27')](_0x2348fd);}};}function respondWithFilteredResult(_0x2f7146,_0x443f76){return function(_0x44b6a5){if(_0x44b6a5){var _0x5df5ab=_0x44b6a5[_0x678a('0x28')],_0x5f59c4=_0x443f76[_0x678a('0x29')],_0xb08292=_0x443f76[_0x678a('0x29')]+_0x443f76[_0x678a('0x2a')],_0x4bc11b;if(_0xb08292>=_0x5df5ab){_0xb08292=_0x5df5ab;_0x4bc11b=0xc8;}else{_0x4bc11b=0xce;}_0x2f7146[_0x678a('0x25')](_0x4bc11b);return _0x2f7146[_0x678a('0x2b')](_0x678a('0x2c'),_0x5f59c4+'-'+_0xb08292+'/'+_0x5df5ab)[_0x678a('0x27')](_0x44b6a5);}return null;};}function patchUpdates(_0x5f1428){return function(_0x50f76e){try{jsonpatch['apply'](_0x50f76e,_0x5f1428,!![]);}catch(_0x592213){return BPromise[_0x678a('0x2d')](_0x592213);}return _0x50f76e[_0x678a('0x2e')]();};}function saveUpdates(_0x5a388f,_0x22bf77){return function(_0x25d7fa){if(_0x25d7fa){return _0x25d7fa[_0x678a('0x2f')](_0x5a388f)[_0x678a('0x1a')](function(_0x4ea61f){return _0x4ea61f;});}return null;};}function removeEntity(_0x71e0d9,_0x4c7abe){return function(_0x45b880){if(_0x45b880){return _0x45b880[_0x678a('0x30')]()[_0x678a('0x1a')](function(){_0x71e0d9[_0x678a('0x25')](0xcc)[_0x678a('0x26')]();});}};}function handleEntityNotFound(_0x378ba1,_0x28dd1e){return function(_0x23652e){if(!_0x23652e){_0x378ba1[_0x678a('0x24')](0x194);}return _0x23652e;};}function handleError(_0x106dd5,_0x24627f){_0x24627f=_0x24627f||0x1f4;return function(_0x47682f){logger[_0x678a('0x20')](_0x47682f[_0x678a('0x31')]);if(_0x47682f[_0x678a('0x32')]){delete _0x47682f[_0x678a('0x32')];}_0x106dd5[_0x678a('0x25')](_0x24627f)[_0x678a('0x33')](_0x47682f);};}exports['index']=function(_0x5cacb6,_0x15d59e){var _0x3dfc15={},_0x855e2d={},_0x451982={'count':0x0,'rows':[]};var _0x55f352=db[_0x678a('0x34')][_0x678a('0x35')];_0x855e2d['model']=_[_0x678a('0x36')](_0x55f352);_0x855e2d[_0x678a('0x37')]=_[_0x678a('0x36')](_0x5cacb6[_0x678a('0x37')]);_0x855e2d['filters']=_[_0x678a('0x38')](_0x855e2d['model'],_0x855e2d[_0x678a('0x37')]);_0x3dfc15[_0x678a('0x39')]=_[_0x678a('0x38')](_0x855e2d[_0x678a('0x3a')],qs['fields'](_0x5cacb6[_0x678a('0x37')][_0x678a('0x3b')]));_0x3dfc15['attributes']=_0x3dfc15[_0x678a('0x39')][_0x678a('0x3c')]?_0x3dfc15[_0x678a('0x39')]:_0x855e2d['model'];if(!_0x5cacb6['query'][_0x678a('0x3d')](_0x678a('0x3e'))){_0x3dfc15[_0x678a('0x2a')]=qs['limit'](_0x5cacb6['query'][_0x678a('0x2a')]);_0x3dfc15['offset']=qs[_0x678a('0x29')](_0x5cacb6['query'][_0x678a('0x29')]);}_0x3dfc15[_0x678a('0x3f')]=qs[_0x678a('0x40')](_0x5cacb6['query'][_0x678a('0x40')]);_0x3dfc15[_0x678a('0x41')]=qs[_0x678a('0x42')](_[_0x678a('0x43')](_0x5cacb6[_0x678a('0x37')],_0x855e2d[_0x678a('0x42')]));if(_0x5cacb6[_0x678a('0x37')]['filter']){_0x3dfc15[_0x678a('0x41')]=_[_0x678a('0x44')](_0x3dfc15[_0x678a('0x41')],{'$or':_['map'](_0x55f352,function(_0x1d4816){if(_0x1d4816[_0x678a('0x45')][_0x678a('0x46')]!==_0x678a('0x47')){var _0x35a73e={};_0x35a73e[_0x1d4816[_0x678a('0x48')]]={'$like':'%'+_0x5cacb6[_0x678a('0x37')][_0x678a('0x49')]+'%'};return _0x35a73e;}})});}_0x3dfc15=_[_0x678a('0x44')]({},_0x3dfc15,_0x5cacb6[_0x678a('0x4a')]);var _0xe10b16={'where':_0x3dfc15[_0x678a('0x41')]};return db[_0x678a('0x34')][_0x678a('0x28')](_0xe10b16)[_0x678a('0x1a')](function(_0xfafaba){_0x451982[_0x678a('0x28')]=_0xfafaba;if(_0x5cacb6[_0x678a('0x37')][_0x678a('0x4b')]){_0x3dfc15[_0x678a('0x4c')]=[{'all':!![]}];}return db[_0x678a('0x34')]['findAll'](_0x3dfc15);})[_0x678a('0x1a')](function(_0x264afd){_0x451982[_0x678a('0x4d')]=_0x264afd;return _0x451982;})[_0x678a('0x1a')](respondWithFilteredResult(_0x15d59e,_0x3dfc15))[_0x678a('0x23')](handleError(_0x15d59e,null));};exports['show']=function(_0x5f33e0,_0x3460dc){var _0x46aa33={'raw':![],'where':{'id':_0x5f33e0[_0x678a('0x4e')]['id']}},_0xb8a622={};_0xb8a622[_0x678a('0x3a')]=_[_0x678a('0x36')](db[_0x678a('0x34')][_0x678a('0x35')]);_0xb8a622['query']=_[_0x678a('0x36')](_0x5f33e0[_0x678a('0x37')]);_0xb8a622['filters']=_[_0x678a('0x38')](_0xb8a622[_0x678a('0x3a')],_0xb8a622[_0x678a('0x37')]);_0x46aa33[_0x678a('0x39')]=_[_0x678a('0x38')](_0xb8a622[_0x678a('0x3a')],qs[_0x678a('0x3b')](_0x5f33e0[_0x678a('0x37')][_0x678a('0x3b')]));_0x46aa33[_0x678a('0x39')]=_0x46aa33['attributes'][_0x678a('0x3c')]?_0x46aa33['attributes']:_0xb8a622[_0x678a('0x3a')];if(_0x5f33e0[_0x678a('0x37')][_0x678a('0x4b')]){_0x46aa33[_0x678a('0x4c')]=[{'all':!![]}];}_0x46aa33=_['merge']({},_0x46aa33,_0x5f33e0[_0x678a('0x4a')]);return db[_0x678a('0x34')][_0x678a('0x4f')](_0x46aa33)['then'](handleEntityNotFound(_0x3460dc,null))[_0x678a('0x1a')](respondWithResult(_0x3460dc,null))[_0x678a('0x23')](handleError(_0x3460dc,null));};exports[_0x678a('0x50')]=function(_0x6460d5,_0x58c8e4){return db[_0x678a('0x34')][_0x678a('0x50')](_0x6460d5[_0x678a('0x51')],{})[_0x678a('0x1a')](respondWithResult(_0x58c8e4,0xc9))[_0x678a('0x23')](handleError(_0x58c8e4,null));};exports['update']=function(_0x1f37f2,_0x28d727){if(_0x1f37f2[_0x678a('0x51')]['id']){delete _0x1f37f2[_0x678a('0x51')]['id'];}return db[_0x678a('0x34')][_0x678a('0x4f')]({'where':{'id':_0x1f37f2[_0x678a('0x4e')]['id']}})['then'](handleEntityNotFound(_0x28d727,null))[_0x678a('0x1a')](saveUpdates(_0x1f37f2[_0x678a('0x51')],null))[_0x678a('0x1a')](respondWithResult(_0x28d727,null))['catch'](handleError(_0x28d727,null));};exports[_0x678a('0x30')]=function(_0x17b53b,_0x1492a1){return db['Dynamics365Account'][_0x678a('0x4f')]({'where':{'id':_0x17b53b['params']['id']}})[_0x678a('0x1a')](handleEntityNotFound(_0x1492a1,null))['then'](removeEntity(_0x1492a1,null))[_0x678a('0x23')](handleError(_0x1492a1,null));};exports['getConfigurations']=function(_0x361506,_0x42cc7e,_0x3a3538){var _0x113097={};var _0x19690c={};var _0x6b4417;var _0x1a91e9;return db['Dynamics365Account'][_0x678a('0x52')]({'where':{'id':_0x361506[_0x678a('0x4e')]['id']}})[_0x678a('0x1a')](handleEntityNotFound(_0x42cc7e,null))['then'](function(_0x11808a){if(_0x11808a){_0x6b4417=_0x11808a;_0x19690c[_0x678a('0x3a')]=_[_0x678a('0x36')](db['Dynamics365Configuration'][_0x678a('0x35')]);_0x19690c[_0x678a('0x37')]=_[_0x678a('0x36')](_0x361506[_0x678a('0x37')]);_0x19690c['filters']=_[_0x678a('0x38')](_0x19690c['model'],_0x19690c[_0x678a('0x37')]);_0x113097['attributes']=_['intersection'](_0x19690c[_0x678a('0x3a')],qs['fields'](_0x361506[_0x678a('0x37')][_0x678a('0x3b')]));_0x113097['attributes']=_0x113097[_0x678a('0x39')][_0x678a('0x3c')]?_0x113097[_0x678a('0x39')]:_0x19690c[_0x678a('0x3a')];_0x113097['order']=qs[_0x678a('0x40')](_0x361506[_0x678a('0x37')][_0x678a('0x40')]);_0x113097[_0x678a('0x41')]=qs[_0x678a('0x42')](_[_0x678a('0x43')](_0x361506[_0x678a('0x37')],_0x19690c[_0x678a('0x42')]));if(_0x361506[_0x678a('0x37')]['filter']){_0x113097[_0x678a('0x41')]=_['merge'](_0x113097[_0x678a('0x41')],{'$or':_['map'](_0x113097[_0x678a('0x39')],function(_0x4a0717){var _0x366d5d={};_0x366d5d[_0x4a0717]={'$like':'%'+_0x361506['query'][_0x678a('0x49')]+'%'};return _0x366d5d;})});}_0x113097=_[_0x678a('0x44')]({},_0x113097,_0x361506[_0x678a('0x4a')]);return _0x6b4417['getConfigurations'](_0x113097);}})[_0x678a('0x1a')](function(_0x4d883a){if(_0x4d883a){_0x1a91e9=_0x4d883a[_0x678a('0x3c')];if(!_0x361506['query'][_0x678a('0x3d')](_0x678a('0x3e'))){_0x113097['limit']=qs[_0x678a('0x2a')](_0x361506[_0x678a('0x37')][_0x678a('0x2a')]);_0x113097[_0x678a('0x29')]=qs[_0x678a('0x29')](_0x361506[_0x678a('0x37')][_0x678a('0x29')]);}return _0x6b4417[_0x678a('0x53')](_0x113097);}})[_0x678a('0x1a')](function(_0x347c3d){if(_0x347c3d){return _0x347c3d?{'count':_0x1a91e9,'rows':_0x347c3d}:null;}})['then'](respondWithResult(_0x42cc7e,null))[_0x678a('0x23')](handleError(_0x42cc7e,null));};exports['addConfiguration']=function(_0x4efcf4,_0x3b44a1,_0x6b4e5c){if(_0x4efcf4[_0x678a('0x51')]['id']){delete _0x4efcf4[_0x678a('0x51')]['id'];}return db[_0x678a('0x34')][_0x678a('0x52')]({'where':{'id':_0x4efcf4[_0x678a('0x4e')]['id']}})['then'](handleEntityNotFound(_0x3b44a1,null))[_0x678a('0x1a')](function(_0x46d7a5){if(_0x46d7a5){_0x4efcf4[_0x678a('0x51')][_0x678a('0x54')]=_0x46d7a5['id'];_0x4efcf4[_0x678a('0x51')][_0x678a('0x55')]=integrations[_0x678a('0x56')](_0x4efcf4[_0x678a('0x51')][_0x678a('0x57')],_0x4efcf4[_0x678a('0x51')][_0x678a('0x45')]);_0x4efcf4['body'][_0x678a('0x58')]=integrations[_0x678a('0x59')](_0x4efcf4[_0x678a('0x51')][_0x678a('0x57')],_0x4efcf4[_0x678a('0x51')][_0x678a('0x45')]);return db[_0x678a('0x5a')][_0x678a('0x50')](_0x4efcf4[_0x678a('0x51')],{'include':[{'model':db[_0x678a('0x5b')],'as':_0x678a('0x55')},{'model':db['Dynamics365Field'],'as':_0x678a('0x58')}]});}return null;})[_0x678a('0x1a')](respondWithResult(_0x3b44a1,null))[_0x678a('0x23')](handleError(_0x3b44a1,null));};exports[_0x678a('0x5c')]=function(_0x362470,_0x31a2d7,_0x47ea15){var _0x3cf847=_0x362470[_0x678a('0x37')][_0x678a('0x5d')];var _0x3beb1e=_0x3cf847==='incident'?'Incident':_0x678a('0x5e');var _0x3607fb='';var _0x564731='';var _0x527fca='';var _0x30b45c='';var _0x53b98c='';var _0x266d34='';var _0x42eb07='';var _0x4b0de5='';var _0x51fafb=[_0x678a('0x5f'),_0x678a('0x60'),'customerid',_0x678a('0x61'),_0x678a('0x62'),_0x678a('0x63'),_0x678a('0x64'),_0x678a('0x65'),_0x678a('0x66'),_0x678a('0x67')];var _0x586acd=[_0x678a('0x68'),_0x678a('0x69'),_0x678a('0x6a'),_0x678a('0x6b'),_0x678a('0x6c'),'contactidyominame',_0x678a('0x6d'),'contractidname','createdbyexternalpartyname',_0x678a('0x6e'),_0x678a('0x6f'),'createdbyyominame',_0x678a('0x70'),_0x678a('0x71'),_0x678a('0x72'),_0x678a('0x73'),_0x678a('0x74'),_0x678a('0x75'),_0x678a('0x76'),_0x678a('0x77'),_0x678a('0x78'),_0x678a('0x79'),_0x678a('0x7a'),_0x678a('0x7b'),_0x678a('0x7c'),'followupby',_0x678a('0x7d'),_0x678a('0x7e'),_0x678a('0x7f'),_0x678a('0x80'),_0x678a('0x81'),'modifiedbyexternalpartyname',_0x678a('0x82'),_0x678a('0x83'),'modifiedbyyominame','modifiedon','modifiedonbehalfbyname',_0x678a('0x84'),_0x678a('0x85'),'msdyn_iotalertname',_0x678a('0x86'),_0x678a('0x87'),'overriddencreatedon',_0x678a('0x88'),'owneridtype',_0x678a('0x89'),_0x678a('0x8a'),_0x678a('0x8b'),_0x678a('0x8c'),_0x678a('0x8d'),'productidname','productserialnumber',_0x678a('0x8e'),_0x678a('0x8f'),_0x678a('0x90'),_0x678a('0x91'),_0x678a('0x92'),_0x678a('0x93'),_0x678a('0x94'),'slaname',_0x678a('0x95'),_0x678a('0x96'),_0x678a('0x97'),'subjectidname',_0x678a('0x98'),_0x678a('0x99'),_0x678a('0x9a'),_0x678a('0x9b'),_0x678a('0x9c'),_0x678a('0x9d')];var _0x47f11b=_0x51fafb[_0x678a('0x9e')](_0x586acd);return db['Dynamics365Account'][_0x678a('0x52')]({'where':{'id':_0x362470[_0x678a('0x4e')]['id']},'attributes':['id',_0x678a('0x9f'),'password',_0x678a('0xa0'),_0x678a('0xa1'),_0x678a('0xa2'),_0x678a('0xa3')]})[_0x678a('0x1a')](handleEntityNotFound(_0x31a2d7,null))['then'](function(_0x2f4881){if(_0x2f4881){_0x4b0de5=_0x2f4881[_0x678a('0xa0')];var _0x59acb9=_0x4b0de5[_0x678a('0xa4')](-0x1);if(_0x59acb9==='/'){_0x4b0de5=_0x4b0de5[_0x678a('0xa5')](0x0,_0x4b0de5[_0x678a('0xa6')](_0x59acb9));}_0x42eb07=util[_0x678a('0xa7')](_0x678a('0xa8'),_0x4b0de5);var _0x53861f={'method':'POST','uri':_0x678a('0xa9')+_0x2f4881[_0x678a('0xa1')]+_0x678a('0xaa'),'form':{'client_id':_0x2f4881[_0x678a('0xa2')],'resource':_0x4b0de5,'username':_0x2f4881[_0x678a('0x9f')],'password':_0x2f4881['password'],'grant_type':_0x678a('0xab'),'client_secret':_0x2f4881[_0x678a('0xa3')]},'json':!![]};return rp(_0x53861f);}})[_0x678a('0x1a')](function(_0x3682d6){_0x266d34=_0x3682d6['access_token'];var _0x77c2e6={'method':_0x678a('0xac'),'uri':encodeURI(_0x42eb07+_0x678a('0xad')+_0x3beb1e+'\x27'),'headers':{'Authorization':_0x678a('0xae')+_0x266d34,'If-None-Match':null,'OData-Version':_0x678a('0xaf')},'json':!![]};return rp(_0x77c2e6);})[_0x678a('0x1a')](function(_0x27552e){var _0x1e55fa=_0x27552e[_0x678a('0xb0')][0x0];var _0xddecab=_0x1e55fa[_0x678a('0xb1')];var _0x57716e={'method':'GET','uri':_0x42eb07+_0x678a('0xb2')+_0xddecab+_0x678a('0xb3'),'headers':{'Authorization':'Bearer\x20'+_0x266d34,'If-None-Match':null,'OData-Version':_0x678a('0xaf')},'json':!![]};return rp(_0x57716e);})[_0x678a('0x1a')](function(_0x5c6a76){_0x3607fb=_0x5c6a76;_0x564731=_0x3607fb[_0x678a('0xb4')];_0x564731=_['remove'](_0x564731,function(_0x251b0b){return!_0x47f11b['includes'](_0x251b0b['LogicalName']);});var _0x1f28a1=[];var _0x3a06a5=[];_0x564731[_0x678a('0xb5')](function(_0x192036){if(_0x192036[_0x678a('0xb6')]){var _0x132cbb=_0x192036[_0x678a('0xb6')][_0x678a('0xa5')](_0x192036['@odata.type'][_0x678a('0xa6')]('.')+0x1);if(_0x132cbb==='PicklistAttributeMetadata'){_0x1f28a1[_0x678a('0xb7')](getSelectList(_0x42eb07,_0x3cf847,_0x3a06a5,_0x3607fb[_0x678a('0xb1')],_0x192036[_0x678a('0xb1')],_0x266d34));}}});return Promise[_0x678a('0xb8')](_0x1f28a1);})[_0x678a('0x1a')](function(_0xc6de34){_0x527fca=_0xc6de34[0x0];var _0x305d6f=[];var _0xbf55ec=[];_0x564731[_0x678a('0xb5')](function(_0xb10fca){if(!_[_0x678a('0xb9')](_0xb10fca[_0x678a('0xb6')])){var _0x3d00c3=_0xb10fca[_0x678a('0xb6')][_0x678a('0xa5')](_0xb10fca[_0x678a('0xb6')][_0x678a('0xa6')]('.')+0x1);if(_0x3d00c3==='BooleanAttributeMetadata'){_0x305d6f[_0x678a('0xb7')](getBooleanList(_0x42eb07,_0x3cf847,_0xbf55ec,_0x3607fb[_0x678a('0xb1')],_0xb10fca['MetadataId'],_0x266d34));}}});return Promise['all'](_0x305d6f);})['then'](function(_0x23e198){_0x30b45c=_0x23e198[0x0];var _0x12df68=[];var _0x3feeae=[];_0x564731['forEach'](function(_0x4918ac){if(_0x4918ac['@odata.type']){var _0x23c064=_0x4918ac[_0x678a('0xb6')][_0x678a('0xa5')](_0x4918ac[_0x678a('0xb6')][_0x678a('0xa6')]('.')+0x1);if(_0x23c064==='StringAttributeMetadata'||_0x23c064===_0x678a('0xba')||_0x23c064===_0x678a('0xbb')||_0x23c064===_0x678a('0xbc')||_0x23c064===_0x678a('0xbd')||_0x23c064===_0x678a('0xbe')||_0x23c064===_0x678a('0xbf')||_0x23c064===_0x678a('0xc0')||_0x23c064===_0x678a('0xc1')||_0x23c064===_0x678a('0xc2')){_0x12df68['push'](getInputList(_0x42eb07,_0x3cf847,_0x23c064,_0x3feeae,_0x3607fb[_0x678a('0xb1')],_0x4918ac[_0x678a('0xb1')],_0x266d34));}}});return Promise[_0x678a('0xb8')](_0x12df68);})[_0x678a('0x1a')](function(_0x4697c2){_0x53b98c=_0x4697c2[0x0];var _0x4b5e4a=_0x527fca['concat'](_0x30b45c)[_0x678a('0x9e')](_0x53b98c);var _0x13c8e3={'count':_0x4b5e4a['length'],'rows':_0x4b5e4a};return _0x13c8e3;})[_0x678a('0x1a')](respondWithResult(_0x31a2d7,null))['catch'](function(_0x394829){console[_0x678a('0xc3')]('Dynamics365\x20error:\x20'+_0x394829);var _0x45dd61=_0x362470['query'][_0x678a('0x17')]?0x1f4:_0x394829[_0x678a('0xc4')]||0x1f4;logger['error'](_0x394829[_0x678a('0x31')]);delete _0x394829['name'];if(_0x45dd61===0x191){_0x45dd61=0x190;}_0x31a2d7[_0x678a('0x25')](_0x45dd61)[_0x678a('0x33')](_0x362470[_0x678a('0x37')][_0x678a('0x17')]?{'message':_0x678a('0xc5'),'statusCode':_0x394829[_0x678a('0xc4')]}:_0x394829);});};function getSelectList(_0x177a80,_0x43f9d9,_0x1c0b79,_0x37224c,_0x24a19b,_0x270943){var _0x1f3db1={'method':_0x678a('0xac'),'uri':_0x177a80+_0x678a('0xb2')+_0x37224c+_0x678a('0xc6')+_0x24a19b+')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?'+_0x678a('0xc7'),'headers':{'Authorization':_0x678a('0xae')+_0x270943,'If-None-Match':null,'OData-Version':_0x678a('0xaf')},'json':!![]};return rp(_0x1f3db1)[_0x678a('0x1a')](function(_0x34d57c){var _0xc518c=[];var _0x45ee0f=_0x34d57c['OptionSet'][_0x678a('0xc8')];_0x45ee0f[_0x678a('0xb5')](function(_0x59b050){_0xc518c['push']({'name':_0x59b050[_0x678a('0xc9')][_0x678a('0xca')]['Label'],'value':String(_0x59b050[_0x678a('0xcb')])});});var _0x2a72e2={'id':_0x43f9d9+'_'+_0x34d57c[_0x678a('0xcc')],'name':_0x34d57c[_0x678a('0xcd')]['UserLocalizedLabel'][_0x678a('0xc9')],'custom':![],'options':_0xc518c};_0x1c0b79[_0x678a('0xb7')](_0x2a72e2);return _0x1c0b79;});}function getBooleanList(_0xb9dc2,_0x26a81c,_0x44253c,_0x5c7095,_0x418cd1,_0x2d32d6){var _0x5e36b2={'method':_0x678a('0xac'),'uri':_0xb9dc2+_0x678a('0xb2')+_0x5c7095+_0x678a('0xc6')+_0x418cd1+')/Microsoft.Dynamics.CRM.BooleanAttributeMetadata?$select=DisplayName,LogicalName&$expand=OptionSet($select=FalseOption,\x20TrueOption)','headers':{'Authorization':_0x678a('0xae')+_0x2d32d6,'If-None-Match':null,'OData-Version':_0x678a('0xaf')},'json':!![]};return rp(_0x5e36b2)[_0x678a('0x1a')](function(_0x1dedf8){var _0x428e2c=[];_0x428e2c[_0x678a('0xb7')]({'name':_0x1dedf8[_0x678a('0xce')][_0x678a('0xcf')][_0x678a('0xc9')][_0x678a('0xca')][_0x678a('0xc9')],'value':_0x678a('0xd0')},{'name':_0x1dedf8[_0x678a('0xce')][_0x678a('0xd1')][_0x678a('0xc9')][_0x678a('0xca')]['Label'],'value':'false'});var _0x5d17e1={'id':_0x26a81c+'_'+_0x1dedf8[_0x678a('0xcc')],'name':_0x1dedf8['DisplayName']['UserLocalizedLabel'][_0x678a('0xc9')],'custom':![],'options':_0x428e2c};_0x44253c[_0x678a('0xb7')](_0x5d17e1);return _0x44253c;});}function getInputList(_0x3e8ec4,_0x14dd0d,_0x3684a3,_0x42165e,_0x1a0127,_0x4fbbc9,_0x3321dc){var _0x37d004={'method':_0x678a('0xac'),'uri':_0x3e8ec4+_0x678a('0xb2')+_0x1a0127+_0x678a('0xc6')+_0x4fbbc9+')/Microsoft.Dynamics.CRM.'+_0x3684a3+_0x678a('0xd2'),'headers':{'Authorization':_0x678a('0xae')+_0x3321dc,'If-None-Match':null,'OData-Version':_0x678a('0xaf')},'json':!![]};return rp(_0x37d004)[_0x678a('0x1a')](function(_0x22aeab){var _0x100df9={'id':_0x14dd0d+'_'+_0x22aeab[_0x678a('0xcc')],'name':_0x22aeab[_0x678a('0xcd')][_0x678a('0xca')]?_0x22aeab[_0x678a('0xcd')][_0x678a('0xca')][_0x678a('0xc9')]:_0x22aeab['LogicalName'],'custom':![],'options':[]};_0x42165e[_0x678a('0xb7')](_0x100df9);return _0x42165e;});}
\ No newline at end of file
+var _0x2f4e=['AccountId','getSubjects','channel','Descriptions','getDescriptions','Dynamics365Field','getFields','ticketType','incident','Incident','PhoneCall','title','customerid','ownerid','subject','phonenumber','regardingobjectid','directioncode','phonecall_activity_parties','accountidname','accountidyominame','contactidname','contactidyominame','contractdetailidname','contractidname','createdbyexternalpartyyominame','createdbyyominame','createdon','createdonbehalfbyname','createdonbehalfbyyominame','customeridname','customeridyominame','emailaddress','entitlementidname','entityimage_timestamp','entityimage_url','escalatedon','firstresponsebykpiidname','followupby','influencescore','kbarticleidname','lastonholdtime','masteridname','modifiedbyexternalpartyyominame','modifiedbyyominame','modifiedon','modifiedonbehalfbyname','modifiedonbehalfbyyominame','msdyn_incidenttypename','msdyn_iotalertname','onholdtime','owneridname','primarycontactidyominame','productserialnumber','resolveby','resolvebykpiidname','responseby','responsiblecontactidyominame','slainvokedidname','statuscode','subjectidname','ticketnumber','timezoneruleversionnumber','transactioncurrencyidname','utcconversiontimezonecode','password','remoteUri','clientId','clientSecret','slice','substring','lastIndexOf','format','%s/api/data/v9.0/','https://login.microsoftonline.com/','tenantId','/oauth2/token','access_token','EntityDefinitions?$select=DisplayName,EntitySetName&$filter=SchemaName\x20eq\x20\x27','Bearer\x20','value','MetadataId','GET','EntityDefinitions(',')?$select=LogicalName&$expand=Attributes($select=LogicalName)','4.0','remove','includes','LogicalName','@odata.type','push','isNil','all','forEach','StringAttributeMetadata','DoubleAttributeMetadata','MemoAttributeMetadata','DateTimeAttributeMetadata','StatusAttributeMetadata','EntityNameAttributeMetadata','DecimalAttributeMetadata','concat','log','Dynamics365\x20error:\x20','statusCode','Wrong\x20credentials',')/Attributes(',')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?','$select=DisplayName,LogicalName&$expand=OptionSet($select=Options)','Label','UserLocalizedLabel','Value','DisplayName','TrueOption','true','OptionSet','false',')/Microsoft.Dynamics.CRM.','?$select=DisplayName,LogicalName','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','lodash','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','Dynamics365Account,\x20%s,\x20%s','request\x20sent','debug','error','code','message','result','catch','sendStatus','status','end','count','offset','limit','Content-Range','json','apply','reject','save','update','destroy','stack','name','send','index','Dynamics365Account','model','query','keys','filters','intersection','attributes','length','hasOwnProperty','order','sort','where','pick','merge','map','type','key','VIRTUAL','field','options','includeAll','rows','show','params','rawAttributes','fields','include','find','create','body','getConfigurations','findOne','Dynamics365Configuration','filter','nolimit','addConfiguration'];(function(_0x1035c1,_0x2d8583){var _0x308d67=function(_0x58ddb6){while(--_0x58ddb6){_0x1035c1['push'](_0x1035c1['shift']());}};_0x308d67(++_0x2d8583);}(_0x2f4e,0x14c));var _0xe2f4=function(_0x4b6cde,_0x47b03d){_0x4b6cde=_0x4b6cde-0x0;var _0x40f799=_0x2f4e[_0x4b6cde];return _0x40f799;};'use strict';var pdf=require(_0xe2f4('0x0'));var emlformat=require(_0xe2f4('0x1'));var rimraf=require(_0xe2f4('0x2'));var zipdir=require(_0xe2f4('0x3'));var jsonpatch=require(_0xe2f4('0x4'));var rp=require(_0xe2f4('0x5'));var moment=require(_0xe2f4('0x6'));var BPromise=require('bluebird');var Mustache=require(_0xe2f4('0x7'));var util=require(_0xe2f4('0x8'));var path=require(_0xe2f4('0x9'));var sox=require(_0xe2f4('0xa'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xe2f4('0xb'));var squel=require('squel');var crypto=require(_0xe2f4('0xc'));var jsforce=require(_0xe2f4('0xd'));var deskjs=require(_0xe2f4('0xe'));var toCsv=require('to-csv');var querystring=require(_0xe2f4('0xf'));var Papa=require('papaparse');var Redis=require(_0xe2f4('0x10'));var authService=require(_0xe2f4('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xe2f4('0x12'));var logger=require(_0xe2f4('0x13'))(_0xe2f4('0x14'));var utils=require(_0xe2f4('0x15'));var config=require(_0xe2f4('0x16'));var db=require(_0xe2f4('0x17'))['db'];var integrations=require(_0xe2f4('0x18'));var jayson=require(_0xe2f4('0x19'));var client=jayson[_0xe2f4('0x1a')][_0xe2f4('0x1b')]({'port':0x232a});function checkPasswordPattern(_0x58071f,_0x3d9644,_0x377cdd){if(_0x377cdd){var _0x1085a5=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x1085a5[_0xe2f4('0x1c')](_0x3d9644)){return _0x58071f;}else{throw new Error(_0xe2f4('0x1d'));}}else{return _0x58071f;}}function respondWithRpcPromise(_0x44a29c,_0x5c4c73,_0xbf6859,_0x555724){return new BPromise(function(_0x5ac2ea,_0x3f5c1e){var _0x37ebb5=_0x555724||client;return _0x37ebb5[_0xe2f4('0x1e')](_0x44a29c,_0xbf6859)[_0xe2f4('0x1f')](function(_0x4312f4){logger[_0xe2f4('0x20')](_0xe2f4('0x21'),_0x5c4c73,_0xe2f4('0x22'));logger[_0xe2f4('0x23')]('Dynamics365Account,\x20%s,\x20%s,\x20%s',_0x5c4c73,_0xe2f4('0x22'),JSON['stringify'](_0x4312f4));if(_0x4312f4[_0xe2f4('0x24')]){if(_0x4312f4[_0xe2f4('0x24')][_0xe2f4('0x25')]===0x1f4){logger['error'](_0xe2f4('0x21'),_0x5c4c73,_0x4312f4['error'][_0xe2f4('0x26')]);return _0x3f5c1e(_0x4312f4[_0xe2f4('0x24')][_0xe2f4('0x26')]);}logger[_0xe2f4('0x24')](_0xe2f4('0x21'),_0x5c4c73,_0x4312f4[_0xe2f4('0x24')][_0xe2f4('0x26')]);return _0x5ac2ea(_0x4312f4[_0xe2f4('0x24')][_0xe2f4('0x26')]);}else{logger['info'](_0xe2f4('0x21'),_0x5c4c73,'request\x20sent');_0x5ac2ea(_0x4312f4[_0xe2f4('0x27')][_0xe2f4('0x26')]);}})[_0xe2f4('0x28')](function(_0x283c2d){logger[_0xe2f4('0x24')](_0xe2f4('0x21'),_0x5c4c73,_0x283c2d);_0x3f5c1e(_0x283c2d);});});}function respondWithStatusCode(_0x478840,_0xa6bb23){_0xa6bb23=_0xa6bb23||0xcc;return function(_0x28923c){if(_0x28923c){return _0x478840[_0xe2f4('0x29')](_0xa6bb23);}return _0x478840[_0xe2f4('0x2a')](_0xa6bb23)[_0xe2f4('0x2b')]();};}function respondWithResult(_0xbdf326,_0x1e8359){_0x1e8359=_0x1e8359||0xc8;return function(_0x4b4000){if(_0x4b4000){return _0xbdf326['status'](_0x1e8359)['json'](_0x4b4000);}};}function respondWithFilteredResult(_0x4c1bd9,_0x421892){return function(_0x1d4b5e){if(_0x1d4b5e){var _0x17483d=_0x1d4b5e[_0xe2f4('0x2c')],_0x559383=_0x421892[_0xe2f4('0x2d')],_0x483984=_0x421892[_0xe2f4('0x2d')]+_0x421892[_0xe2f4('0x2e')],_0x460c37;if(_0x483984>=_0x17483d){_0x483984=_0x17483d;_0x460c37=0xc8;}else{_0x460c37=0xce;}_0x4c1bd9[_0xe2f4('0x2a')](_0x460c37);return _0x4c1bd9['set'](_0xe2f4('0x2f'),_0x559383+'-'+_0x483984+'/'+_0x17483d)[_0xe2f4('0x30')](_0x1d4b5e);}return null;};}function patchUpdates(_0x1e9e0c){return function(_0x5cd76c){try{jsonpatch[_0xe2f4('0x31')](_0x5cd76c,_0x1e9e0c,!![]);}catch(_0x3d71ac){return BPromise[_0xe2f4('0x32')](_0x3d71ac);}return _0x5cd76c[_0xe2f4('0x33')]();};}function saveUpdates(_0x21c9a2,_0x364fd4){return function(_0x4ae1f4){if(_0x4ae1f4){return _0x4ae1f4[_0xe2f4('0x34')](_0x21c9a2)[_0xe2f4('0x1f')](function(_0x52b96d){return _0x52b96d;});}return null;};}function removeEntity(_0x19fa6a,_0x1e2277){return function(_0x258f39){if(_0x258f39){return _0x258f39[_0xe2f4('0x35')]()[_0xe2f4('0x1f')](function(){_0x19fa6a[_0xe2f4('0x2a')](0xcc)[_0xe2f4('0x2b')]();});}};}function handleEntityNotFound(_0x450e4d,_0x11027c){return function(_0x977666){if(!_0x977666){_0x450e4d[_0xe2f4('0x29')](0x194);}return _0x977666;};}function handleError(_0x4943c2,_0x993447){_0x993447=_0x993447||0x1f4;return function(_0x315ce7){logger[_0xe2f4('0x24')](_0x315ce7[_0xe2f4('0x36')]);if(_0x315ce7[_0xe2f4('0x37')]){delete _0x315ce7[_0xe2f4('0x37')];}_0x4943c2[_0xe2f4('0x2a')](_0x993447)[_0xe2f4('0x38')](_0x315ce7);};}exports[_0xe2f4('0x39')]=function(_0x4254f0,_0x2525c8){var _0x3f3c32={},_0x397d86={},_0x4028c6={'count':0x0,'rows':[]};var _0x296b83=db[_0xe2f4('0x3a')]['rawAttributes'];_0x397d86[_0xe2f4('0x3b')]=_['keys'](_0x296b83);_0x397d86[_0xe2f4('0x3c')]=_[_0xe2f4('0x3d')](_0x4254f0['query']);_0x397d86[_0xe2f4('0x3e')]=_[_0xe2f4('0x3f')](_0x397d86['model'],_0x397d86[_0xe2f4('0x3c')]);_0x3f3c32['attributes']=_[_0xe2f4('0x3f')](_0x397d86[_0xe2f4('0x3b')],qs['fields'](_0x4254f0[_0xe2f4('0x3c')]['fields']));_0x3f3c32[_0xe2f4('0x40')]=_0x3f3c32[_0xe2f4('0x40')][_0xe2f4('0x41')]?_0x3f3c32[_0xe2f4('0x40')]:_0x397d86[_0xe2f4('0x3b')];if(!_0x4254f0[_0xe2f4('0x3c')][_0xe2f4('0x42')]('nolimit')){_0x3f3c32[_0xe2f4('0x2e')]=qs[_0xe2f4('0x2e')](_0x4254f0['query'][_0xe2f4('0x2e')]);_0x3f3c32[_0xe2f4('0x2d')]=qs[_0xe2f4('0x2d')](_0x4254f0[_0xe2f4('0x3c')][_0xe2f4('0x2d')]);}_0x3f3c32[_0xe2f4('0x43')]=qs['sort'](_0x4254f0[_0xe2f4('0x3c')][_0xe2f4('0x44')]);_0x3f3c32[_0xe2f4('0x45')]=qs[_0xe2f4('0x3e')](_[_0xe2f4('0x46')](_0x4254f0[_0xe2f4('0x3c')],_0x397d86['filters']));if(_0x4254f0[_0xe2f4('0x3c')]['filter']){_0x3f3c32[_0xe2f4('0x45')]=_[_0xe2f4('0x47')](_0x3f3c32[_0xe2f4('0x45')],{'$or':_[_0xe2f4('0x48')](_0x296b83,function(_0xbcde62){if(_0xbcde62[_0xe2f4('0x49')][_0xe2f4('0x4a')]!==_0xe2f4('0x4b')){var _0xcf7da6={};_0xcf7da6[_0xbcde62[_0xe2f4('0x4c')]]={'$like':'%'+_0x4254f0[_0xe2f4('0x3c')]['filter']+'%'};return _0xcf7da6;}})});}_0x3f3c32=_[_0xe2f4('0x47')]({},_0x3f3c32,_0x4254f0[_0xe2f4('0x4d')]);var _0x5c44b8={'where':_0x3f3c32['where']};return db[_0xe2f4('0x3a')][_0xe2f4('0x2c')](_0x5c44b8)[_0xe2f4('0x1f')](function(_0xac2bd2){_0x4028c6[_0xe2f4('0x2c')]=_0xac2bd2;if(_0x4254f0[_0xe2f4('0x3c')][_0xe2f4('0x4e')]){_0x3f3c32['include']=[{'all':!![]}];}return db[_0xe2f4('0x3a')]['findAll'](_0x3f3c32);})[_0xe2f4('0x1f')](function(_0x5b30fb){_0x4028c6[_0xe2f4('0x4f')]=_0x5b30fb;return _0x4028c6;})[_0xe2f4('0x1f')](respondWithFilteredResult(_0x2525c8,_0x3f3c32))[_0xe2f4('0x28')](handleError(_0x2525c8,null));};exports[_0xe2f4('0x50')]=function(_0x32f709,_0x1e4123){var _0x69de09={'raw':![],'where':{'id':_0x32f709[_0xe2f4('0x51')]['id']}},_0x36e0fe={};_0x36e0fe[_0xe2f4('0x3b')]=_[_0xe2f4('0x3d')](db[_0xe2f4('0x3a')][_0xe2f4('0x52')]);_0x36e0fe['query']=_[_0xe2f4('0x3d')](_0x32f709[_0xe2f4('0x3c')]);_0x36e0fe[_0xe2f4('0x3e')]=_[_0xe2f4('0x3f')](_0x36e0fe['model'],_0x36e0fe[_0xe2f4('0x3c')]);_0x69de09[_0xe2f4('0x40')]=_['intersection'](_0x36e0fe[_0xe2f4('0x3b')],qs[_0xe2f4('0x53')](_0x32f709['query'][_0xe2f4('0x53')]));_0x69de09[_0xe2f4('0x40')]=_0x69de09['attributes'][_0xe2f4('0x41')]?_0x69de09[_0xe2f4('0x40')]:_0x36e0fe[_0xe2f4('0x3b')];if(_0x32f709['query'][_0xe2f4('0x4e')]){_0x69de09[_0xe2f4('0x54')]=[{'all':!![]}];}_0x69de09=_[_0xe2f4('0x47')]({},_0x69de09,_0x32f709[_0xe2f4('0x4d')]);return db['Dynamics365Account'][_0xe2f4('0x55')](_0x69de09)[_0xe2f4('0x1f')](handleEntityNotFound(_0x1e4123,null))['then'](respondWithResult(_0x1e4123,null))[_0xe2f4('0x28')](handleError(_0x1e4123,null));};exports['create']=function(_0x1096c3,_0x3dd5c7){return db[_0xe2f4('0x3a')][_0xe2f4('0x56')](_0x1096c3[_0xe2f4('0x57')],{})[_0xe2f4('0x1f')](respondWithResult(_0x3dd5c7,0xc9))[_0xe2f4('0x28')](handleError(_0x3dd5c7,null));};exports[_0xe2f4('0x34')]=function(_0xe0f8b9,_0x6e24da){if(_0xe0f8b9[_0xe2f4('0x57')]['id']){delete _0xe0f8b9['body']['id'];}return db['Dynamics365Account'][_0xe2f4('0x55')]({'where':{'id':_0xe0f8b9['params']['id']}})['then'](handleEntityNotFound(_0x6e24da,null))['then'](saveUpdates(_0xe0f8b9[_0xe2f4('0x57')],null))[_0xe2f4('0x1f')](respondWithResult(_0x6e24da,null))[_0xe2f4('0x28')](handleError(_0x6e24da,null));};exports['destroy']=function(_0x5275a6,_0x4cb336){return db[_0xe2f4('0x3a')][_0xe2f4('0x55')]({'where':{'id':_0x5275a6['params']['id']}})['then'](handleEntityNotFound(_0x4cb336,null))['then'](removeEntity(_0x4cb336,null))[_0xe2f4('0x28')](handleError(_0x4cb336,null));};exports[_0xe2f4('0x58')]=function(_0x5af769,_0x1885a3,_0x574a2b){var _0x10990b={};var _0x5eb08d={};var _0xdb9dca;var _0xca30d;return db[_0xe2f4('0x3a')][_0xe2f4('0x59')]({'where':{'id':_0x5af769[_0xe2f4('0x51')]['id']}})[_0xe2f4('0x1f')](handleEntityNotFound(_0x1885a3,null))[_0xe2f4('0x1f')](function(_0x572a6a){if(_0x572a6a){_0xdb9dca=_0x572a6a;_0x5eb08d[_0xe2f4('0x3b')]=_[_0xe2f4('0x3d')](db[_0xe2f4('0x5a')][_0xe2f4('0x52')]);_0x5eb08d[_0xe2f4('0x3c')]=_[_0xe2f4('0x3d')](_0x5af769[_0xe2f4('0x3c')]);_0x5eb08d[_0xe2f4('0x3e')]=_[_0xe2f4('0x3f')](_0x5eb08d[_0xe2f4('0x3b')],_0x5eb08d[_0xe2f4('0x3c')]);_0x10990b[_0xe2f4('0x40')]=_[_0xe2f4('0x3f')](_0x5eb08d[_0xe2f4('0x3b')],qs[_0xe2f4('0x53')](_0x5af769[_0xe2f4('0x3c')][_0xe2f4('0x53')]));_0x10990b[_0xe2f4('0x40')]=_0x10990b[_0xe2f4('0x40')][_0xe2f4('0x41')]?_0x10990b[_0xe2f4('0x40')]:_0x5eb08d[_0xe2f4('0x3b')];_0x10990b[_0xe2f4('0x43')]=qs[_0xe2f4('0x44')](_0x5af769[_0xe2f4('0x3c')][_0xe2f4('0x44')]);_0x10990b[_0xe2f4('0x45')]=qs['filters'](_['pick'](_0x5af769[_0xe2f4('0x3c')],_0x5eb08d[_0xe2f4('0x3e')]));if(_0x5af769[_0xe2f4('0x3c')]['filter']){_0x10990b[_0xe2f4('0x45')]=_[_0xe2f4('0x47')](_0x10990b[_0xe2f4('0x45')],{'$or':_[_0xe2f4('0x48')](_0x10990b['attributes'],function(_0x487ed3){var _0x142a79={};_0x142a79[_0x487ed3]={'$like':'%'+_0x5af769[_0xe2f4('0x3c')][_0xe2f4('0x5b')]+'%'};return _0x142a79;})});}_0x10990b=_[_0xe2f4('0x47')]({},_0x10990b,_0x5af769[_0xe2f4('0x4d')]);return _0xdb9dca[_0xe2f4('0x58')](_0x10990b);}})[_0xe2f4('0x1f')](function(_0x140ef5){if(_0x140ef5){_0xca30d=_0x140ef5[_0xe2f4('0x41')];if(!_0x5af769[_0xe2f4('0x3c')]['hasOwnProperty'](_0xe2f4('0x5c'))){_0x10990b[_0xe2f4('0x2e')]=qs[_0xe2f4('0x2e')](_0x5af769[_0xe2f4('0x3c')][_0xe2f4('0x2e')]);_0x10990b[_0xe2f4('0x2d')]=qs[_0xe2f4('0x2d')](_0x5af769[_0xe2f4('0x3c')][_0xe2f4('0x2d')]);}return _0xdb9dca[_0xe2f4('0x58')](_0x10990b);}})[_0xe2f4('0x1f')](function(_0x579ab2){if(_0x579ab2){return _0x579ab2?{'count':_0xca30d,'rows':_0x579ab2}:null;}})[_0xe2f4('0x1f')](respondWithResult(_0x1885a3,null))[_0xe2f4('0x28')](handleError(_0x1885a3,null));};exports[_0xe2f4('0x5d')]=function(_0x3a29dd,_0x4da0ec,_0x464fe1){if(_0x3a29dd[_0xe2f4('0x57')]['id']){delete _0x3a29dd[_0xe2f4('0x57')]['id'];}return db[_0xe2f4('0x3a')][_0xe2f4('0x59')]({'where':{'id':_0x3a29dd['params']['id']}})[_0xe2f4('0x1f')](handleEntityNotFound(_0x4da0ec,null))[_0xe2f4('0x1f')](function(_0x1974c5){if(_0x1974c5){_0x3a29dd['body'][_0xe2f4('0x5e')]=_0x1974c5['id'];_0x3a29dd[_0xe2f4('0x57')]['Subjects']=integrations[_0xe2f4('0x5f')](_0x3a29dd['body'][_0xe2f4('0x60')],_0x3a29dd[_0xe2f4('0x57')][_0xe2f4('0x49')]);_0x3a29dd[_0xe2f4('0x57')][_0xe2f4('0x61')]=integrations[_0xe2f4('0x62')](_0x3a29dd['body'][_0xe2f4('0x60')],_0x3a29dd[_0xe2f4('0x57')][_0xe2f4('0x49')]);return db[_0xe2f4('0x5a')]['create'](_0x3a29dd[_0xe2f4('0x57')],{'include':[{'model':db[_0xe2f4('0x63')],'as':'Subjects'},{'model':db[_0xe2f4('0x63')],'as':'Descriptions'}]});}return null;})[_0xe2f4('0x1f')](respondWithResult(_0x4da0ec,null))[_0xe2f4('0x28')](handleError(_0x4da0ec,null));};exports[_0xe2f4('0x64')]=function(_0x3708f2,_0x4efd64,_0x54c9bd){var _0x3eb33e=_0x3708f2[_0xe2f4('0x3c')][_0xe2f4('0x65')];var _0x58bfcf=_0x3eb33e===_0xe2f4('0x66')?_0xe2f4('0x67'):_0xe2f4('0x68');var _0x1fff44='';var _0x59c3bf='';var _0x36e8e1='';var _0x13fbea='';var _0x51cda6='';var _0x43f158='';var _0x59a0a4='';var _0x5b46d1='';var _0x914903=[_0xe2f4('0x69'),'description',_0xe2f4('0x6a'),_0xe2f4('0x6b'),'caseorigincode',_0xe2f4('0x6c'),_0xe2f4('0x6d'),_0xe2f4('0x6e'),_0xe2f4('0x6f'),_0xe2f4('0x70')];var _0x138e37=[_0xe2f4('0x71'),_0xe2f4('0x72'),'actualserviceunits','billedserviceunits',_0xe2f4('0x73'),_0xe2f4('0x74'),_0xe2f4('0x75'),_0xe2f4('0x76'),'createdbyexternalpartyname',_0xe2f4('0x77'),'createdbyname',_0xe2f4('0x78'),_0xe2f4('0x79'),_0xe2f4('0x7a'),_0xe2f4('0x7b'),_0xe2f4('0x7c'),'customeridtype',_0xe2f4('0x7d'),_0xe2f4('0x7e'),_0xe2f4('0x7f'),_0xe2f4('0x80'),_0xe2f4('0x81'),_0xe2f4('0x82'),'exchangerate',_0xe2f4('0x83'),_0xe2f4('0x84'),'importsequencenumber',_0xe2f4('0x85'),_0xe2f4('0x86'),_0xe2f4('0x87'),_0xe2f4('0x88'),'modifiedbyexternalpartyname',_0xe2f4('0x89'),'modifiedbyname',_0xe2f4('0x8a'),_0xe2f4('0x8b'),_0xe2f4('0x8c'),_0xe2f4('0x8d'),_0xe2f4('0x8e'),_0xe2f4('0x8f'),'numberofchildincidents',_0xe2f4('0x90'),'overriddencreatedon',_0xe2f4('0x91'),'owneridtype','owneridyominame','parentcaseidname','primarycontactidname',_0xe2f4('0x92'),'prioritycodename','productidname',_0xe2f4('0x93'),_0xe2f4('0x94'),_0xe2f4('0x95'),_0xe2f4('0x96'),'responsiblecontactidname',_0xe2f4('0x97'),'sentimentvalue',_0xe2f4('0x98'),'slaname','socialprofileidname','statecode',_0xe2f4('0x99'),_0xe2f4('0x9a'),_0xe2f4('0x9b'),_0xe2f4('0x9c'),_0xe2f4('0x9d'),'traversedpath',_0xe2f4('0x9e'),'versionnumber'];var _0x195404=_0x914903['concat'](_0x138e37);return db['Dynamics365Account'][_0xe2f4('0x59')]({'where':{'id':_0x3708f2['params']['id']},'attributes':['id','username',_0xe2f4('0x9f'),_0xe2f4('0xa0'),'tenantId',_0xe2f4('0xa1'),_0xe2f4('0xa2')]})[_0xe2f4('0x1f')](handleEntityNotFound(_0x4efd64,null))[_0xe2f4('0x1f')](function(_0x31d679){if(_0x31d679){_0x5b46d1=_0x31d679[_0xe2f4('0xa0')];var _0x54d383=_0x5b46d1[_0xe2f4('0xa3')](-0x1);if(_0x54d383==='/'){_0x5b46d1=_0x5b46d1[_0xe2f4('0xa4')](0x0,_0x5b46d1[_0xe2f4('0xa5')](_0x54d383));}_0x59a0a4=util[_0xe2f4('0xa6')](_0xe2f4('0xa7'),_0x5b46d1);var _0x581d63={'method':'POST','uri':_0xe2f4('0xa8')+_0x31d679[_0xe2f4('0xa9')]+_0xe2f4('0xaa'),'form':{'client_id':_0x31d679['clientId'],'resource':_0x5b46d1,'username':_0x31d679['username'],'password':_0x31d679['password'],'grant_type':_0xe2f4('0x9f'),'client_secret':_0x31d679['clientSecret']},'json':!![]};return rp(_0x581d63);}})[_0xe2f4('0x1f')](function(_0x489dd4){_0x43f158=_0x489dd4[_0xe2f4('0xab')];var _0x1f70e9={'method':'GET','uri':encodeURI(_0x59a0a4+_0xe2f4('0xac')+_0x58bfcf+'\x27'),'headers':{'Authorization':_0xe2f4('0xad')+_0x43f158,'If-None-Match':null,'OData-Version':'4.0'},'json':!![]};return rp(_0x1f70e9);})['then'](function(_0x30d9d9){var _0x48f446=_0x30d9d9[_0xe2f4('0xae')][0x0];var _0x3fad02=_0x48f446[_0xe2f4('0xaf')];var _0x53ac5b={'method':_0xe2f4('0xb0'),'uri':_0x59a0a4+_0xe2f4('0xb1')+_0x3fad02+_0xe2f4('0xb2'),'headers':{'Authorization':_0xe2f4('0xad')+_0x43f158,'If-None-Match':null,'OData-Version':_0xe2f4('0xb3')},'json':!![]};return rp(_0x53ac5b);})[_0xe2f4('0x1f')](function(_0x515eb4){_0x1fff44=_0x515eb4;_0x59c3bf=_0x1fff44['Attributes'];_0x59c3bf=_[_0xe2f4('0xb4')](_0x59c3bf,function(_0x5ad7b8){return!_0x195404[_0xe2f4('0xb5')](_0x5ad7b8[_0xe2f4('0xb6')]);});var _0x2cc098=[];var _0x4ffc9c=[];_0x59c3bf['forEach'](function(_0x26fc80){if(_0x26fc80[_0xe2f4('0xb7')]){var _0x1c540f=_0x26fc80[_0xe2f4('0xb7')][_0xe2f4('0xa4')](_0x26fc80[_0xe2f4('0xb7')]['lastIndexOf']('.')+0x1);if(_0x1c540f==='PicklistAttributeMetadata'){_0x2cc098[_0xe2f4('0xb8')](getSelectList(_0x59a0a4,_0x3eb33e,_0x4ffc9c,_0x1fff44[_0xe2f4('0xaf')],_0x26fc80[_0xe2f4('0xaf')],_0x43f158));}}});return Promise['all'](_0x2cc098);})[_0xe2f4('0x1f')](function(_0x2ca84e){_0x36e8e1=_0x2ca84e[0x0];var _0x3f3dfb=[];var _0x170f82=[];_0x59c3bf['forEach'](function(_0x186af2){if(!_[_0xe2f4('0xb9')](_0x186af2[_0xe2f4('0xb7')])){var _0x22eb60=_0x186af2[_0xe2f4('0xb7')][_0xe2f4('0xa4')](_0x186af2[_0xe2f4('0xb7')]['lastIndexOf']('.')+0x1);if(_0x22eb60==='BooleanAttributeMetadata'){_0x3f3dfb[_0xe2f4('0xb8')](getBooleanList(_0x59a0a4,_0x3eb33e,_0x170f82,_0x1fff44[_0xe2f4('0xaf')],_0x186af2[_0xe2f4('0xaf')],_0x43f158));}}});return Promise[_0xe2f4('0xba')](_0x3f3dfb);})['then'](function(_0x759f40){_0x13fbea=_0x759f40[0x0];var _0x10c32a=[];var _0x134f9e=[];_0x59c3bf[_0xe2f4('0xbb')](function(_0x2c15a8){if(_0x2c15a8['@odata.type']){var _0x4af511=_0x2c15a8['@odata.type'][_0xe2f4('0xa4')](_0x2c15a8['@odata.type']['lastIndexOf']('.')+0x1);if(_0x4af511===_0xe2f4('0xbc')||_0x4af511===_0xe2f4('0xbd')||_0x4af511==='BigIntAttributeMetadata'||_0x4af511==='IntegerAttributeMetadata'||_0x4af511===_0xe2f4('0xbe')||_0x4af511===_0xe2f4('0xbf')||_0x4af511===_0xe2f4('0xc0')||_0x4af511===_0xe2f4('0xc1')||_0x4af511==='StateAttributeMetadata'||_0x4af511===_0xe2f4('0xc2')){_0x10c32a[_0xe2f4('0xb8')](getInputList(_0x59a0a4,_0x3eb33e,_0x4af511,_0x134f9e,_0x1fff44[_0xe2f4('0xaf')],_0x2c15a8[_0xe2f4('0xaf')],_0x43f158));}}});return Promise['all'](_0x10c32a);})[_0xe2f4('0x1f')](function(_0x52a903){_0x51cda6=_0x52a903[0x0];var _0x48914f=_0x36e8e1[_0xe2f4('0xc3')](_0x13fbea)[_0xe2f4('0xc3')](_0x51cda6);var _0x1bc2ce={'count':_0x48914f[_0xe2f4('0x41')],'rows':_0x48914f};return _0x1bc2ce;})[_0xe2f4('0x1f')](respondWithResult(_0x4efd64,null))['catch'](function(_0x3d2a8e){console[_0xe2f4('0xc4')](_0xe2f4('0xc5')+_0x3d2a8e);var _0x391779=_0x3708f2[_0xe2f4('0x3c')][_0xe2f4('0x1c')]?0x1f4:_0x3d2a8e[_0xe2f4('0xc6')]||0x1f4;logger[_0xe2f4('0x24')](_0x3d2a8e['stack']);delete _0x3d2a8e[_0xe2f4('0x37')];if(_0x391779===0x191){_0x391779=0x190;}_0x4efd64['status'](_0x391779)[_0xe2f4('0x38')](_0x3708f2[_0xe2f4('0x3c')][_0xe2f4('0x1c')]?{'message':_0xe2f4('0xc7'),'statusCode':_0x3d2a8e[_0xe2f4('0xc6')]}:_0x3d2a8e);});};function getSelectList(_0x10b082,_0x1ad603,_0x4a807d,_0x135780,_0x164baf,_0xe9f8b4){var _0x3efefb={'method':_0xe2f4('0xb0'),'uri':_0x10b082+_0xe2f4('0xb1')+_0x135780+_0xe2f4('0xc8')+_0x164baf+_0xe2f4('0xc9')+_0xe2f4('0xca'),'headers':{'Authorization':'Bearer\x20'+_0xe9f8b4,'If-None-Match':null,'OData-Version':'4.0'},'json':!![]};return rp(_0x3efefb)[_0xe2f4('0x1f')](function(_0x9a9370){var _0x141a7d=[];var _0x1aaf22=_0x9a9370['OptionSet']['Options'];_0x1aaf22[_0xe2f4('0xbb')](function(_0x3c5374){_0x141a7d['push']({'name':_0x3c5374[_0xe2f4('0xcb')][_0xe2f4('0xcc')][_0xe2f4('0xcb')],'value':String(_0x3c5374[_0xe2f4('0xcd')])});});var _0x1d2136={'id':_0x1ad603+'_'+_0x9a9370[_0xe2f4('0xb6')],'name':_0x9a9370[_0xe2f4('0xce')][_0xe2f4('0xcc')][_0xe2f4('0xcb')],'custom':![],'options':_0x141a7d};_0x4a807d[_0xe2f4('0xb8')](_0x1d2136);return _0x4a807d;});}function getBooleanList(_0x16565e,_0x2dfea1,_0x5c78ba,_0xabf806,_0x2d3127,_0x4913e3){var _0x8d61f3={'method':_0xe2f4('0xb0'),'uri':_0x16565e+_0xe2f4('0xb1')+_0xabf806+_0xe2f4('0xc8')+_0x2d3127+')/Microsoft.Dynamics.CRM.BooleanAttributeMetadata?$select=DisplayName,LogicalName&$expand=OptionSet($select=FalseOption,\x20TrueOption)','headers':{'Authorization':_0xe2f4('0xad')+_0x4913e3,'If-None-Match':null,'OData-Version':_0xe2f4('0xb3')},'json':!![]};return rp(_0x8d61f3)[_0xe2f4('0x1f')](function(_0x2510f1){var _0x50bf18=[];_0x50bf18[_0xe2f4('0xb8')]({'name':_0x2510f1['OptionSet'][_0xe2f4('0xcf')][_0xe2f4('0xcb')][_0xe2f4('0xcc')][_0xe2f4('0xcb')],'value':_0xe2f4('0xd0')},{'name':_0x2510f1[_0xe2f4('0xd1')]['FalseOption']['Label'][_0xe2f4('0xcc')]['Label'],'value':_0xe2f4('0xd2')});var _0x5e71ed={'id':_0x2dfea1+'_'+_0x2510f1[_0xe2f4('0xb6')],'name':_0x2510f1[_0xe2f4('0xce')][_0xe2f4('0xcc')]['Label'],'custom':![],'options':_0x50bf18};_0x5c78ba['push'](_0x5e71ed);return _0x5c78ba;});}function getInputList(_0x4794e3,_0x58141b,_0x9b7f93,_0x4bc002,_0x1786f6,_0x3aab6a,_0x12abd0){var _0x158bff={'method':_0xe2f4('0xb0'),'uri':_0x4794e3+_0xe2f4('0xb1')+_0x1786f6+')/Attributes('+_0x3aab6a+_0xe2f4('0xd3')+_0x9b7f93+_0xe2f4('0xd4'),'headers':{'Authorization':_0xe2f4('0xad')+_0x12abd0,'If-None-Match':null,'OData-Version':'4.0'},'json':!![]};return rp(_0x158bff)[_0xe2f4('0x1f')](function(_0x1547e1){var _0x5afc4c={'id':_0x58141b+'_'+_0x1547e1['LogicalName'],'name':_0x1547e1[_0xe2f4('0xce')][_0xe2f4('0xcc')]?_0x1547e1[_0xe2f4('0xce')][_0xe2f4('0xcc')][_0xe2f4('0xcb')]:_0x1547e1[_0xe2f4('0xb6')],'custom':![],'options':[]};_0x4bc002['push'](_0x5afc4c);return _0x4bc002;});}
\ No newline at end of file
index b5e0c83..a39bbc8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x047a=['request-promise','path','../../config/environment','exports','Dynamics365Account','int_dynamics365_accounts','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0x2a0738,_0x3c0bc5){var _0x159679=function(_0x9c9ec7){while(--_0x9c9ec7){_0x2a0738['push'](_0x2a0738['shift']());}};_0x159679(++_0x3c0bc5);}(_0x047a,0xba));var _0xa047=function(_0x4bc53b,_0x39fc31){_0x4bc53b=_0x4bc53b-0x0;var _0x5743f5=_0x047a[_0x4bc53b];return _0x5743f5;};'use strict';var _=require(_0xa047('0x0'));var util=require(_0xa047('0x1'));var logger=require(_0xa047('0x2'))(_0xa047('0x3'));var moment=require(_0xa047('0x4'));var BPromise=require(_0xa047('0x5'));var rp=require(_0xa047('0x6'));var fs=require('fs');var path=require(_0xa047('0x7'));var rimraf=require('rimraf');var config=require(_0xa047('0x8'));var attributes=require('./intDynamics365Account.attributes');var integrations=require('../../components/integrations/configuration');module[_0xa047('0x9')]=function(_0x4b53d1,_0x3c4c25){return _0x4b53d1['define'](_0xa047('0xa'),attributes,{'tableName':_0xa047('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x594e=['../../config/logger','api','bluebird','request-promise','rimraf','../../config/environment','./intDynamics365Account.attributes','exports','define','int_dynamics365_accounts','lodash','util'];(function(_0x597254,_0x1013ef){var _0x2014fd=function(_0x481d8c){while(--_0x481d8c){_0x597254['push'](_0x597254['shift']());}};_0x2014fd(++_0x1013ef);}(_0x594e,0xfa));var _0xe594=function(_0x1781fc,_0x494d1d){_0x1781fc=_0x1781fc-0x0;var _0x2c00a4=_0x594e[_0x1781fc];return _0x2c00a4;};'use strict';var _=require(_0xe594('0x0'));var util=require(_0xe594('0x1'));var logger=require(_0xe594('0x2'))(_0xe594('0x3'));var moment=require('moment');var BPromise=require(_0xe594('0x4'));var rp=require(_0xe594('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0xe594('0x6'));var config=require(_0xe594('0x7'));var attributes=require(_0xe594('0x8'));var integrations=require('../../components/integrations/configuration');module[_0xe594('0x9')]=function(_0x15cade,_0xc4b351){return _0x15cade[_0xe594('0xa')]('Dynamics365Account',attributes,{'tableName':_0xe594('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index f6ab240..412b941 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa7be=['randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','stringify','error','code','Dynamics365Account,\x20%s,\x20%s','message','result','catch','GetDynamics365Account','findAll','raw','options','attributes','limit','map','include','model','debug','find','where','ShowDynamics365Account','util','moment','bluebird'];(function(_0x19d807,_0x1ed89e){var _0x59b0a6=function(_0x244521){while(--_0x244521){_0x19d807['push'](_0x19d807['shift']());}};_0x59b0a6(++_0x1ed89e);}(_0xa7be,0x11d));var _0xea7b=function(_0x1a44a8,_0x21722a){_0x1a44a8=_0x1a44a8-0x0;var _0x518a99=_0xa7be[_0x1a44a8];return _0x518a99;};'use strict';var _=require('lodash');var util=require(_0xea7b('0x0'));var moment=require(_0xea7b('0x1'));var BPromise=require(_0xea7b('0x2'));var rs=require(_0xea7b('0x3'));var fs=require('fs');var Redis=require(_0xea7b('0x4'));var db=require(_0xea7b('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xea7b('0x6'))(_0xea7b('0x7'));var config=require(_0xea7b('0x8'));var jayson=require(_0xea7b('0x9'));var client=jayson[_0xea7b('0xa')][_0xea7b('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x5815a2,_0x523ab5,_0x1d577d){return new BPromise(function(_0xaa1dce,_0x1e2361){return client[_0xea7b('0xc')](_0x5815a2,_0x1d577d)[_0xea7b('0xd')](function(_0x3c91fc){logger[_0xea7b('0xe')]('Dynamics365Account,\x20%s,\x20%s',_0x523ab5,_0xea7b('0xf'));logger['debug']('Dynamics365Account,\x20%s,\x20%s,\x20%s',_0x523ab5,_0xea7b('0xf'),JSON[_0xea7b('0x10')](_0x3c91fc));if(_0x3c91fc[_0xea7b('0x11')]){if(_0x3c91fc[_0xea7b('0x11')][_0xea7b('0x12')]===0x1f4){logger[_0xea7b('0x11')](_0xea7b('0x13'),_0x523ab5,_0x3c91fc['error'][_0xea7b('0x14')]);return _0x1e2361(_0x3c91fc[_0xea7b('0x11')][_0xea7b('0x14')]);}logger[_0xea7b('0x11')](_0xea7b('0x13'),_0x523ab5,_0x3c91fc[_0xea7b('0x11')][_0xea7b('0x14')]);return _0xaa1dce(_0x3c91fc['error'][_0xea7b('0x14')]);}else{logger[_0xea7b('0xe')](_0xea7b('0x13'),_0x523ab5,_0xea7b('0xf'));_0xaa1dce(_0x3c91fc[_0xea7b('0x15')]['message']);}})[_0xea7b('0x16')](function(_0x372a42){logger[_0xea7b('0x11')](_0xea7b('0x13'),_0x523ab5,_0x372a42);_0x1e2361(_0x372a42);});});}exports[_0xea7b('0x17')]=function(_0x1ec5dc){var _0x3f4429=this;return new Promise(function(_0x5a7a27,_0x43afeb){return db['Dynamics365Account'][_0xea7b('0x18')]({'raw':_0x1ec5dc['options']?_0x1ec5dc['options'][_0xea7b('0x19')]===undefined?!![]:![]:!![],'where':_0x1ec5dc[_0xea7b('0x1a')]?_0x1ec5dc[_0xea7b('0x1a')]['where']||null:null,'attributes':_0x1ec5dc[_0xea7b('0x1a')]?_0x1ec5dc['options'][_0xea7b('0x1b')]||null:null,'limit':_0x1ec5dc[_0xea7b('0x1a')]?_0x1ec5dc[_0xea7b('0x1a')][_0xea7b('0x1c')]||null:null,'include':_0x1ec5dc[_0xea7b('0x1a')]?_0x1ec5dc[_0xea7b('0x1a')]['include']?_[_0xea7b('0x1d')](_0x1ec5dc[_0xea7b('0x1a')][_0xea7b('0x1e')],function(_0x1624b0){return{'model':db[_0x1624b0[_0xea7b('0x1f')]],'as':_0x1624b0['as'],'attributes':_0x1624b0[_0xea7b('0x1b')],'include':_0x1624b0[_0xea7b('0x1e')]?_[_0xea7b('0x1d')](_0x1624b0[_0xea7b('0x1e')],function(_0x962626){return{'model':db[_0x962626[_0xea7b('0x1f')]],'as':_0x962626['as'],'attributes':_0x962626['attributes'],'include':_0x962626[_0xea7b('0x1e')]?_[_0xea7b('0x1d')](_0x962626[_0xea7b('0x1e')],function(_0x2e8dbf){return{'model':db[_0x2e8dbf[_0xea7b('0x1f')]],'as':_0x2e8dbf['as'],'attributes':_0x2e8dbf[_0xea7b('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xea7b('0xd')](function(_0x2ad97f){logger[_0xea7b('0xe')](_0xea7b('0x17'),_0x1ec5dc);logger[_0xea7b('0x20')]('GetDynamics365Account',_0x1ec5dc,JSON[_0xea7b('0x10')](_0x2ad97f));_0x5a7a27(_0x2ad97f);})[_0xea7b('0x16')](function(_0x2bbf8c){logger[_0xea7b('0x11')](_0xea7b('0x17'),_0x2bbf8c[_0xea7b('0x14')],_0x1ec5dc);_0x43afeb(_0x3f4429[_0xea7b('0x11')](0x1f4,_0x2bbf8c[_0xea7b('0x14')]));});});};exports['ShowDynamics365Account']=function(_0x5b7f34){var _0x83521f=this;return new Promise(function(_0x53c4f2,_0x56f867){return db['Dynamics365Account'][_0xea7b('0x21')]({'raw':_0x5b7f34[_0xea7b('0x1a')]?_0x5b7f34[_0xea7b('0x1a')][_0xea7b('0x19')]===undefined?!![]:![]:!![],'where':_0x5b7f34[_0xea7b('0x1a')]?_0x5b7f34['options'][_0xea7b('0x22')]||null:null,'attributes':_0x5b7f34[_0xea7b('0x1a')]?_0x5b7f34[_0xea7b('0x1a')][_0xea7b('0x1b')]||null:null,'include':_0x5b7f34[_0xea7b('0x1a')]?_0x5b7f34[_0xea7b('0x1a')][_0xea7b('0x1e')]?_[_0xea7b('0x1d')](_0x5b7f34[_0xea7b('0x1a')]['include'],function(_0x5a9284){return{'model':db[_0x5a9284[_0xea7b('0x1f')]],'as':_0x5a9284['as'],'attributes':_0x5a9284[_0xea7b('0x1b')],'include':_0x5a9284[_0xea7b('0x1e')]?_[_0xea7b('0x1d')](_0x5a9284[_0xea7b('0x1e')],function(_0x34d545){return{'model':db[_0x34d545[_0xea7b('0x1f')]],'as':_0x34d545['as'],'attributes':_0x34d545[_0xea7b('0x1b')],'include':_0x34d545[_0xea7b('0x1e')]?_['map'](_0x34d545['include'],function(_0xcb9cf1){return{'model':db[_0xcb9cf1[_0xea7b('0x1f')]],'as':_0xcb9cf1['as'],'attributes':_0xcb9cf1[_0xea7b('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xea7b('0xd')](function(_0x11eeaf){logger[_0xea7b('0xe')](_0xea7b('0x23'),_0x5b7f34);logger[_0xea7b('0x20')](_0xea7b('0x23'),_0x5b7f34,JSON['stringify'](_0x11eeaf));_0x53c4f2(_0x11eeaf);})[_0xea7b('0x16')](function(_0xb453fc){logger[_0xea7b('0x11')]('ShowDynamics365Account',_0xb453fc['message'],_0x5b7f34);_0x56f867(_0x83521f['error'](0x1f4,_0xb453fc[_0xea7b('0x14')]));});});};
\ No newline at end of file
+var _0x1002=['GetDynamics365Account','ShowDynamics365Account','find','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','then','Dynamics365Account,\x20%s,\x20%s','request\x20sent','debug','Dynamics365Account,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','Dynamics365Account','findAll','options','raw','where','attributes','limit','include','map','model'];(function(_0xd9f102,_0x5a0d28){var _0x2652e4=function(_0x5021a1){while(--_0x5021a1){_0xd9f102['push'](_0xd9f102['shift']());}};_0x2652e4(++_0x5a0d28);}(_0x1002,0xb7));var _0x2100=function(_0x2e83e2,_0x4ffeba){_0x2e83e2=_0x2e83e2-0x0;var _0x289512=_0x1002[_0x2e83e2];return _0x289512;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x2100('0x0'));var BPromise=require(_0x2100('0x1'));var rs=require(_0x2100('0x2'));var fs=require('fs');var Redis=require(_0x2100('0x3'));var db=require(_0x2100('0x4'))['db'];var utils=require(_0x2100('0x5'));var logger=require(_0x2100('0x6'))(_0x2100('0x7'));var config=require(_0x2100('0x8'));var jayson=require(_0x2100('0x9'));var client=jayson['client'][_0x2100('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3b7823,_0x4805e7,_0x2e92b2){return new BPromise(function(_0x510f02,_0x34a99c){return client['request'](_0x3b7823,_0x2e92b2)[_0x2100('0xb')](function(_0x50aacc){logger['info'](_0x2100('0xc'),_0x4805e7,_0x2100('0xd'));logger[_0x2100('0xe')](_0x2100('0xf'),_0x4805e7,_0x2100('0xd'),JSON[_0x2100('0x10')](_0x50aacc));if(_0x50aacc[_0x2100('0x11')]){if(_0x50aacc['error'][_0x2100('0x12')]===0x1f4){logger[_0x2100('0x11')](_0x2100('0xc'),_0x4805e7,_0x50aacc[_0x2100('0x11')]['message']);return _0x34a99c(_0x50aacc[_0x2100('0x11')][_0x2100('0x13')]);}logger[_0x2100('0x11')]('Dynamics365Account,\x20%s,\x20%s',_0x4805e7,_0x50aacc[_0x2100('0x11')]['message']);return _0x510f02(_0x50aacc['error'][_0x2100('0x13')]);}else{logger[_0x2100('0x14')]('Dynamics365Account,\x20%s,\x20%s',_0x4805e7,_0x2100('0xd'));_0x510f02(_0x50aacc[_0x2100('0x15')][_0x2100('0x13')]);}})[_0x2100('0x16')](function(_0x190782){logger[_0x2100('0x11')](_0x2100('0xc'),_0x4805e7,_0x190782);_0x34a99c(_0x190782);});});}exports['GetDynamics365Account']=function(_0x195957){var _0x468438=this;return new Promise(function(_0x12f898,_0x211418){return db[_0x2100('0x17')][_0x2100('0x18')]({'raw':_0x195957[_0x2100('0x19')]?_0x195957[_0x2100('0x19')][_0x2100('0x1a')]===undefined?!![]:![]:!![],'where':_0x195957['options']?_0x195957[_0x2100('0x19')][_0x2100('0x1b')]||null:null,'attributes':_0x195957[_0x2100('0x19')]?_0x195957[_0x2100('0x19')][_0x2100('0x1c')]||null:null,'limit':_0x195957[_0x2100('0x19')]?_0x195957[_0x2100('0x19')][_0x2100('0x1d')]||null:null,'include':_0x195957[_0x2100('0x19')]?_0x195957[_0x2100('0x19')][_0x2100('0x1e')]?_[_0x2100('0x1f')](_0x195957[_0x2100('0x19')]['include'],function(_0x5e9c9b){return{'model':db[_0x5e9c9b['model']],'as':_0x5e9c9b['as'],'attributes':_0x5e9c9b[_0x2100('0x1c')],'include':_0x5e9c9b[_0x2100('0x1e')]?_[_0x2100('0x1f')](_0x5e9c9b['include'],function(_0x535fd2){return{'model':db[_0x535fd2[_0x2100('0x20')]],'as':_0x535fd2['as'],'attributes':_0x535fd2[_0x2100('0x1c')],'include':_0x535fd2[_0x2100('0x1e')]?_['map'](_0x535fd2[_0x2100('0x1e')],function(_0x43b5c1){return{'model':db[_0x43b5c1[_0x2100('0x20')]],'as':_0x43b5c1['as'],'attributes':_0x43b5c1[_0x2100('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x2100('0xb')](function(_0x27c744){logger[_0x2100('0x14')]('GetDynamics365Account',_0x195957);logger[_0x2100('0xe')](_0x2100('0x21'),_0x195957,JSON['stringify'](_0x27c744));_0x12f898(_0x27c744);})[_0x2100('0x16')](function(_0x1d4044){logger[_0x2100('0x11')](_0x2100('0x21'),_0x1d4044[_0x2100('0x13')],_0x195957);_0x211418(_0x468438[_0x2100('0x11')](0x1f4,_0x1d4044[_0x2100('0x13')]));});});};exports[_0x2100('0x22')]=function(_0x215b53){var _0x1c571b=this;return new Promise(function(_0x4129c4,_0x1f1894){return db['Dynamics365Account'][_0x2100('0x23')]({'raw':_0x215b53[_0x2100('0x19')]?_0x215b53[_0x2100('0x19')][_0x2100('0x1a')]===undefined?!![]:![]:!![],'where':_0x215b53['options']?_0x215b53['options'][_0x2100('0x1b')]||null:null,'attributes':_0x215b53[_0x2100('0x19')]?_0x215b53[_0x2100('0x19')]['attributes']||null:null,'include':_0x215b53[_0x2100('0x19')]?_0x215b53['options'][_0x2100('0x1e')]?_[_0x2100('0x1f')](_0x215b53[_0x2100('0x19')][_0x2100('0x1e')],function(_0xefba9b){return{'model':db[_0xefba9b[_0x2100('0x20')]],'as':_0xefba9b['as'],'attributes':_0xefba9b['attributes'],'include':_0xefba9b[_0x2100('0x1e')]?_['map'](_0xefba9b[_0x2100('0x1e')],function(_0x45f407){return{'model':db[_0x45f407[_0x2100('0x20')]],'as':_0x45f407['as'],'attributes':_0x45f407[_0x2100('0x1c')],'include':_0x45f407[_0x2100('0x1e')]?_[_0x2100('0x1f')](_0x45f407[_0x2100('0x1e')],function(_0x266547){return{'model':db[_0x266547['model']],'as':_0x266547['as'],'attributes':_0x266547['attributes']};}):[]};}):[]};}):[]:[]})[_0x2100('0xb')](function(_0x30ea3f){logger[_0x2100('0x14')](_0x2100('0x22'),_0x215b53);logger['debug']('ShowDynamics365Account',_0x215b53,JSON[_0x2100('0x10')](_0x30ea3f));_0x4129c4(_0x30ea3f);})[_0x2100('0x16')](function(_0x3292b3){logger['error'](_0x2100('0x22'),_0x3292b3['message'],_0x215b53);_0x1f1894(_0x1c571b[_0x2100('0x11')](0x1f4,_0x3292b3[_0x2100('0x13')]));});});};
\ No newline at end of file
index 4fd331f..237dbec 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xda5c=['create','put','update','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','/:id','show','/:id/fields','getFields','/:id/subjects','getSubjects','post'];(function(_0x10a212,_0x579d85){var _0x23c82b=function(_0x412ea9){while(--_0x412ea9){_0x10a212['push'](_0x10a212['shift']());}};_0x23c82b(++_0x579d85);}(_0xda5c,0xbd));var _0xcda5=function(_0x2f6160,_0x13925e){_0x2f6160=_0x2f6160-0x0;var _0x4333c8=_0xda5c[_0x2f6160];return _0x4333c8;};'use strict';var multer=require(_0xcda5('0x0'));var util=require(_0xcda5('0x1'));var path=require(_0xcda5('0x2'));var timeout=require(_0xcda5('0x3'));var express=require(_0xcda5('0x4'));var router=express[_0xcda5('0x5')]();var auth=require(_0xcda5('0x6'));var interaction=require(_0xcda5('0x7'));var config=require(_0xcda5('0x8'));var controller=require('./intDynamics365Configuration.controller');router[_0xcda5('0x9')]('/',auth[_0xcda5('0xa')](),controller['index']);router[_0xcda5('0x9')](_0xcda5('0xb'),auth[_0xcda5('0xa')](),controller[_0xcda5('0xc')]);router[_0xcda5('0x9')](_0xcda5('0xd'),auth[_0xcda5('0xa')](),controller[_0xcda5('0xe')]);router[_0xcda5('0x9')](_0xcda5('0xf'),auth[_0xcda5('0xa')](),controller[_0xcda5('0x10')]);router[_0xcda5('0x9')]('/:id/descriptions',auth[_0xcda5('0xa')](),controller['getDescriptions']);router[_0xcda5('0x11')]('/',auth['isAuthenticated'](),controller[_0xcda5('0x12')]);router[_0xcda5('0x13')](_0xcda5('0xb'),auth['isAuthenticated'](),controller[_0xcda5('0x14')]);router['delete'](_0xcda5('0xb'),auth[_0xcda5('0xa')](),controller[_0xcda5('0x15')]);module[_0xcda5('0x16')]=router;
\ No newline at end of file
+var _0xf2c6=['post','create','put','/:id','delete','destroy','exports','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./intDynamics365Configuration.controller','index','get','isAuthenticated','show','/:id/fields','getSubjects','/:id/descriptions','getDescriptions'];(function(_0x3e8bbe,_0x515b8d){var _0xb35505=function(_0x32b52a){while(--_0x32b52a){_0x3e8bbe['push'](_0x3e8bbe['shift']());}};_0xb35505(++_0x515b8d);}(_0xf2c6,0x1d3));var _0x6f2c=function(_0x18b5e8,_0x51e875){_0x18b5e8=_0x18b5e8-0x0;var _0x25baed=_0xf2c6[_0x18b5e8];return _0x25baed;};'use strict';var multer=require(_0x6f2c('0x0'));var util=require(_0x6f2c('0x1'));var path=require('path');var timeout=require(_0x6f2c('0x2'));var express=require(_0x6f2c('0x3'));var router=express[_0x6f2c('0x4')]();var auth=require(_0x6f2c('0x5'));var interaction=require(_0x6f2c('0x6'));var config=require('../../config/environment');var controller=require(_0x6f2c('0x7'));router['get']('/',auth['isAuthenticated'](),controller[_0x6f2c('0x8')]);router[_0x6f2c('0x9')]('/:id',auth[_0x6f2c('0xa')](),controller[_0x6f2c('0xb')]);router[_0x6f2c('0x9')](_0x6f2c('0xc'),auth[_0x6f2c('0xa')](),controller['getFields']);router[_0x6f2c('0x9')]('/:id/subjects',auth[_0x6f2c('0xa')](),controller[_0x6f2c('0xd')]);router['get'](_0x6f2c('0xe'),auth[_0x6f2c('0xa')](),controller[_0x6f2c('0xf')]);router[_0x6f2c('0x10')]('/',auth[_0x6f2c('0xa')](),controller[_0x6f2c('0x11')]);router[_0x6f2c('0x12')](_0x6f2c('0x13'),auth[_0x6f2c('0xa')](),controller['update']);router[_0x6f2c('0x14')]('/:id',auth[_0x6f2c('0xa')](),controller[_0x6f2c('0x15')]);module[_0x6f2c('0x16')]=router;
\ No newline at end of file
index 9345ff5..db3ca56 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9d60=['exports','STRING','ENUM','incident','phonecall'];(function(_0x17289e,_0x178569){var _0xb5fa1=function(_0x259078){while(--_0x259078){_0x17289e['push'](_0x17289e['shift']());}};_0xb5fa1(++_0x178569);}(_0x9d60,0xe6));var _0x09d6=function(_0x552fce,_0x3f24bc){_0x552fce=_0x552fce-0x0;var _0x3e27a2=_0x9d60[_0x552fce];return _0x3e27a2;};'use strict';var Sequelize=require('sequelize');module[_0x09d6('0x0')]={'name':{'type':Sequelize[_0x09d6('0x1')]},'description':{'type':Sequelize[_0x09d6('0x1')]},'ticketType':{'type':Sequelize[_0x09d6('0x2')](_0x09d6('0x3'),_0x09d6('0x4')),'defaultValue':_0x09d6('0x3')}};
\ No newline at end of file
+var _0xfe8c=['ENUM','incident','phonecall','sequelize','STRING'];(function(_0x200875,_0x3df837){var _0x2907bd=function(_0x30fa11){while(--_0x30fa11){_0x200875['push'](_0x200875['shift']());}};_0x2907bd(++_0x3df837);}(_0xfe8c,0x134));var _0xcfe8=function(_0xd1c39b,_0x16f0c6){_0xd1c39b=_0xd1c39b-0x0;var _0x58f5bc=_0xfe8c[_0xd1c39b];return _0x58f5bc;};'use strict';var Sequelize=require(_0xcfe8('0x0'));module['exports']={'name':{'type':Sequelize[_0xcfe8('0x1')]},'description':{'type':Sequelize[_0xcfe8('0x1')]},'ticketType':{'type':Sequelize[_0xcfe8('0x2')](_0xcfe8('0x3'),_0xcfe8('0x4')),'defaultValue':_0xcfe8('0x3')}};
\ No newline at end of file
index 27eea72..72b775d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x241a=['Dynamics365Configuration','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','nolimit','limit','order','sort','pick','filter','merge','map','type','key','VIRTUAL','field','options','where','include','findAll','rows','show','params','rawAttributes','length','find','body','update','getFields','findOne','Dynamics365Field','getSubjects','getDescriptions','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','http','request','then','info','Dynamics365Configuration,\x20%s,\x20%s','request\x20sent','debug','Dynamics365Configuration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','status','end','json','count','offset','Content-Range','apply','reject','save','sendStatus','name','index'];(function(_0x4515a6,_0x45695d){var _0x36f33b=function(_0x26a369){while(--_0x26a369){_0x4515a6['push'](_0x4515a6['shift']());}};_0x36f33b(++_0x45695d);}(_0x241a,0x137));var _0xa241=function(_0x2f1762,_0xab43df){_0x2f1762=_0x2f1762-0x0;var _0x8ab21=_0x241a[_0x2f1762];return _0x8ab21;};'use strict';var pdf=require(_0xa241('0x0'));var emlformat=require(_0xa241('0x1'));var rimraf=require(_0xa241('0x2'));var zipdir=require(_0xa241('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xa241('0x4'));var moment=require(_0xa241('0x5'));var BPromise=require(_0xa241('0x6'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require(_0xa241('0x7'));var csv=require('to-csv');var ejs=require(_0xa241('0x8'));var fs=require('fs');var _=require(_0xa241('0x9'));var squel=require(_0xa241('0xa'));var crypto=require(_0xa241('0xb'));var jsforce=require(_0xa241('0xc'));var deskjs=require(_0xa241('0xd'));var toCsv=require(_0xa241('0xe'));var querystring=require(_0xa241('0xf'));var Papa=require(_0xa241('0x10'));var Redis=require(_0xa241('0x11'));var authService=require(_0xa241('0x12'));var qs=require(_0xa241('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xa241('0x14'))(_0xa241('0x15'));var utils=require(_0xa241('0x16'));var config=require(_0xa241('0x17'));var db=require(_0xa241('0x18'))['db'];var jayson=require(_0xa241('0x19'));var client=jayson[_0xa241('0x1a')][_0xa241('0x1b')]({'port':0x232a});function checkPasswordPattern(_0x3e48f5,_0x4fe827,_0x5a3629){if(_0x5a3629){var _0x42d486=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x42d486['test'](_0x4fe827)){return _0x3e48f5;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x3e48f5;}}function respondWithRpcPromise(_0x34b4bf,_0x50ce75,_0x5bcf3d,_0xb05f46){return new BPromise(function(_0x1fa213,_0xcac6d1){var _0x1e4d47=_0xb05f46||client;return _0x1e4d47[_0xa241('0x1c')](_0x34b4bf,_0x5bcf3d)[_0xa241('0x1d')](function(_0x32ff1e){logger[_0xa241('0x1e')](_0xa241('0x1f'),_0x50ce75,_0xa241('0x20'));logger[_0xa241('0x21')](_0xa241('0x22'),_0x50ce75,_0xa241('0x20'),JSON[_0xa241('0x23')](_0x32ff1e));if(_0x32ff1e[_0xa241('0x24')]){if(_0x32ff1e['error'][_0xa241('0x25')]===0x1f4){logger[_0xa241('0x24')](_0xa241('0x1f'),_0x50ce75,_0x32ff1e[_0xa241('0x24')][_0xa241('0x26')]);return _0xcac6d1(_0x32ff1e[_0xa241('0x24')][_0xa241('0x26')]);}logger[_0xa241('0x24')](_0xa241('0x1f'),_0x50ce75,_0x32ff1e[_0xa241('0x24')][_0xa241('0x26')]);return _0x1fa213(_0x32ff1e[_0xa241('0x24')]['message']);}else{logger[_0xa241('0x1e')](_0xa241('0x1f'),_0x50ce75,'request\x20sent');_0x1fa213(_0x32ff1e[_0xa241('0x27')]['message']);}})[_0xa241('0x28')](function(_0x223c87){logger[_0xa241('0x24')](_0xa241('0x1f'),_0x50ce75,_0x223c87);_0xcac6d1(_0x223c87);});});}function respondWithStatusCode(_0x18d6d0,_0x8908d2){_0x8908d2=_0x8908d2||0xcc;return function(_0xd0b57f){if(_0xd0b57f){return _0x18d6d0['sendStatus'](_0x8908d2);}return _0x18d6d0[_0xa241('0x29')](_0x8908d2)[_0xa241('0x2a')]();};}function respondWithResult(_0x5bbd97,_0x4faba6){_0x4faba6=_0x4faba6||0xc8;return function(_0x51d048){if(_0x51d048){return _0x5bbd97[_0xa241('0x29')](_0x4faba6)[_0xa241('0x2b')](_0x51d048);}};}function respondWithFilteredResult(_0x2ffcb7,_0x493e30){return function(_0x33a05d){if(_0x33a05d){var _0x2c0660=_0x33a05d[_0xa241('0x2c')],_0x3d4671=_0x493e30[_0xa241('0x2d')],_0x417ee6=_0x493e30[_0xa241('0x2d')]+_0x493e30['limit'],_0x1ced3d;if(_0x417ee6>=_0x2c0660){_0x417ee6=_0x2c0660;_0x1ced3d=0xc8;}else{_0x1ced3d=0xce;}_0x2ffcb7[_0xa241('0x29')](_0x1ced3d);return _0x2ffcb7['set'](_0xa241('0x2e'),_0x3d4671+'-'+_0x417ee6+'/'+_0x2c0660)[_0xa241('0x2b')](_0x33a05d);}return null;};}function patchUpdates(_0x55bd58){return function(_0x23ab0c){try{jsonpatch[_0xa241('0x2f')](_0x23ab0c,_0x55bd58,!![]);}catch(_0x330659){return BPromise[_0xa241('0x30')](_0x330659);}return _0x23ab0c[_0xa241('0x31')]();};}function saveUpdates(_0x30ac1a,_0x239c17){return function(_0x49ecce){if(_0x49ecce){return _0x49ecce['update'](_0x30ac1a)[_0xa241('0x1d')](function(_0x20acd2){return _0x20acd2;});}return null;};}function removeEntity(_0x1cd854,_0xae3b24){return function(_0xab340d){if(_0xab340d){return _0xab340d['destroy']()['then'](function(){_0x1cd854[_0xa241('0x29')](0xcc)['end']();});}};}function handleEntityNotFound(_0xa7de82,_0x261b1f){return function(_0x2839e0){if(!_0x2839e0){_0xa7de82[_0xa241('0x32')](0x194);}return _0x2839e0;};}function handleError(_0x2d660d,_0x3ad37f){_0x3ad37f=_0x3ad37f||0x1f4;return function(_0x2e9901){logger['error'](_0x2e9901['stack']);if(_0x2e9901['name']){delete _0x2e9901[_0xa241('0x33')];}_0x2d660d[_0xa241('0x29')](_0x3ad37f)['send'](_0x2e9901);};}exports[_0xa241('0x34')]=function(_0x6f1e7c,_0x297bcc){var _0x6ee801={},_0x5ed06e={},_0x2999bb={'count':0x0,'rows':[]};var _0x3266d6=db[_0xa241('0x35')]['rawAttributes'];_0x5ed06e[_0xa241('0x36')]=_[_0xa241('0x37')](_0x3266d6);_0x5ed06e[_0xa241('0x38')]=_[_0xa241('0x37')](_0x6f1e7c['query']);_0x5ed06e[_0xa241('0x39')]=_[_0xa241('0x3a')](_0x5ed06e['model'],_0x5ed06e[_0xa241('0x38')]);_0x6ee801['attributes']=_[_0xa241('0x3a')](_0x5ed06e[_0xa241('0x36')],qs[_0xa241('0x3b')](_0x6f1e7c[_0xa241('0x38')][_0xa241('0x3b')]));_0x6ee801[_0xa241('0x3c')]=_0x6ee801[_0xa241('0x3c')]['length']?_0x6ee801[_0xa241('0x3c')]:_0x5ed06e['model'];if(!_0x6f1e7c['query'][_0xa241('0x3d')](_0xa241('0x3e'))){_0x6ee801[_0xa241('0x3f')]=qs[_0xa241('0x3f')](_0x6f1e7c[_0xa241('0x38')][_0xa241('0x3f')]);_0x6ee801[_0xa241('0x2d')]=qs['offset'](_0x6f1e7c[_0xa241('0x38')]['offset']);}_0x6ee801[_0xa241('0x40')]=qs[_0xa241('0x41')](_0x6f1e7c['query'][_0xa241('0x41')]);_0x6ee801['where']=qs[_0xa241('0x39')](_[_0xa241('0x42')](_0x6f1e7c[_0xa241('0x38')],_0x5ed06e[_0xa241('0x39')]));if(_0x6f1e7c[_0xa241('0x38')][_0xa241('0x43')]){_0x6ee801['where']=_[_0xa241('0x44')](_0x6ee801['where'],{'$or':_[_0xa241('0x45')](_0x3266d6,function(_0x131988){if(_0x131988[_0xa241('0x46')][_0xa241('0x47')]!==_0xa241('0x48')){var _0x4680df={};_0x4680df[_0x131988[_0xa241('0x49')]]={'$like':'%'+_0x6f1e7c[_0xa241('0x38')][_0xa241('0x43')]+'%'};return _0x4680df;}})});}_0x6ee801=_[_0xa241('0x44')]({},_0x6ee801,_0x6f1e7c[_0xa241('0x4a')]);var _0x353014={'where':_0x6ee801[_0xa241('0x4b')]};return db[_0xa241('0x35')][_0xa241('0x2c')](_0x353014)[_0xa241('0x1d')](function(_0x2e1c38){_0x2999bb[_0xa241('0x2c')]=_0x2e1c38;if(_0x6f1e7c[_0xa241('0x38')]['includeAll']){_0x6ee801[_0xa241('0x4c')]=[{'all':!![]}];}return db['Dynamics365Configuration'][_0xa241('0x4d')](_0x6ee801);})[_0xa241('0x1d')](function(_0x5097ba){_0x2999bb[_0xa241('0x4e')]=_0x5097ba;return _0x2999bb;})[_0xa241('0x1d')](respondWithFilteredResult(_0x297bcc,_0x6ee801))['catch'](handleError(_0x297bcc,null));};exports[_0xa241('0x4f')]=function(_0x3b4c7b,_0x167c2c){var _0xeaef52={'raw':![],'where':{'id':_0x3b4c7b[_0xa241('0x50')]['id']}},_0x247470={};_0x247470[_0xa241('0x36')]=_[_0xa241('0x37')](db['Dynamics365Configuration'][_0xa241('0x51')]);_0x247470['query']=_[_0xa241('0x37')](_0x3b4c7b[_0xa241('0x38')]);_0x247470[_0xa241('0x39')]=_[_0xa241('0x3a')](_0x247470[_0xa241('0x36')],_0x247470[_0xa241('0x38')]);_0xeaef52['attributes']=_[_0xa241('0x3a')](_0x247470[_0xa241('0x36')],qs[_0xa241('0x3b')](_0x3b4c7b[_0xa241('0x38')][_0xa241('0x3b')]));_0xeaef52[_0xa241('0x3c')]=_0xeaef52[_0xa241('0x3c')][_0xa241('0x52')]?_0xeaef52['attributes']:_0x247470['model'];if(_0x3b4c7b['query']['includeAll']){_0xeaef52[_0xa241('0x4c')]=[{'all':!![]}];}_0xeaef52=_[_0xa241('0x44')]({},_0xeaef52,_0x3b4c7b[_0xa241('0x4a')]);return db[_0xa241('0x35')][_0xa241('0x53')](_0xeaef52)[_0xa241('0x1d')](handleEntityNotFound(_0x167c2c,null))[_0xa241('0x1d')](respondWithResult(_0x167c2c,null))[_0xa241('0x28')](handleError(_0x167c2c,null));};exports['create']=function(_0x51a635,_0x3e49e1){return db[_0xa241('0x35')]['create'](_0x51a635[_0xa241('0x54')],{})[_0xa241('0x1d')](respondWithResult(_0x3e49e1,0xc9))['catch'](handleError(_0x3e49e1,null));};exports[_0xa241('0x55')]=function(_0x2a0ce9,_0x2cba8d){if(_0x2a0ce9[_0xa241('0x54')]['id']){delete _0x2a0ce9[_0xa241('0x54')]['id'];}return db[_0xa241('0x35')][_0xa241('0x53')]({'where':{'id':_0x2a0ce9[_0xa241('0x50')]['id']}})['then'](handleEntityNotFound(_0x2cba8d,null))[_0xa241('0x1d')](saveUpdates(_0x2a0ce9['body'],null))['then'](respondWithResult(_0x2cba8d,null))['catch'](handleError(_0x2cba8d,null));};exports['destroy']=function(_0x9b229b,_0x7b4fbb){return db['Dynamics365Configuration']['find']({'where':{'id':_0x9b229b[_0xa241('0x50')]['id']}})['then'](handleEntityNotFound(_0x7b4fbb,null))['then'](removeEntity(_0x7b4fbb,null))[_0xa241('0x28')](handleError(_0x7b4fbb,null));};exports[_0xa241('0x56')]=function(_0xe8db50,_0x2b7166,_0x1bd528){var _0x354e74={};var _0x1215f3={};var _0x10d16a;var _0x556438;return db['Dynamics365Configuration'][_0xa241('0x57')]({'where':{'id':_0xe8db50[_0xa241('0x50')]['id']}})[_0xa241('0x1d')](handleEntityNotFound(_0x2b7166,null))[_0xa241('0x1d')](function(_0x26323e){if(_0x26323e){_0x10d16a=_0x26323e;_0x1215f3['model']=_[_0xa241('0x37')](db[_0xa241('0x58')][_0xa241('0x51')]);_0x1215f3[_0xa241('0x38')]=_[_0xa241('0x37')](_0xe8db50[_0xa241('0x38')]);_0x1215f3[_0xa241('0x39')]=_['intersection'](_0x1215f3[_0xa241('0x36')],_0x1215f3['query']);_0x354e74[_0xa241('0x3c')]=_['intersection'](_0x1215f3[_0xa241('0x36')],qs[_0xa241('0x3b')](_0xe8db50[_0xa241('0x38')][_0xa241('0x3b')]));_0x354e74[_0xa241('0x3c')]=_0x354e74[_0xa241('0x3c')][_0xa241('0x52')]?_0x354e74[_0xa241('0x3c')]:_0x1215f3[_0xa241('0x36')];_0x354e74[_0xa241('0x40')]=qs[_0xa241('0x41')](_0xe8db50['query'][_0xa241('0x41')]);_0x354e74[_0xa241('0x4b')]=qs[_0xa241('0x39')](_[_0xa241('0x42')](_0xe8db50[_0xa241('0x38')],_0x1215f3[_0xa241('0x39')]));if(_0xe8db50[_0xa241('0x38')][_0xa241('0x43')]){_0x354e74[_0xa241('0x4b')]=_[_0xa241('0x44')](_0x354e74[_0xa241('0x4b')],{'$or':_[_0xa241('0x45')](_0x354e74[_0xa241('0x3c')],function(_0x5be6a0){var _0x3a1bb0={};_0x3a1bb0[_0x5be6a0]={'$like':'%'+_0xe8db50[_0xa241('0x38')]['filter']+'%'};return _0x3a1bb0;})});}_0x354e74=_['merge']({},_0x354e74,_0xe8db50[_0xa241('0x4a')]);return _0x10d16a['getFields'](_0x354e74);}})[_0xa241('0x1d')](function(_0x3d0dca){if(_0x3d0dca){_0x556438=_0x3d0dca['length'];if(!_0xe8db50[_0xa241('0x38')][_0xa241('0x3d')](_0xa241('0x3e'))){_0x354e74[_0xa241('0x3f')]=qs[_0xa241('0x3f')](_0xe8db50[_0xa241('0x38')][_0xa241('0x3f')]);_0x354e74['offset']=qs[_0xa241('0x2d')](_0xe8db50[_0xa241('0x38')][_0xa241('0x2d')]);}return _0x10d16a[_0xa241('0x56')](_0x354e74);}})[_0xa241('0x1d')](function(_0x19a929){if(_0x19a929){return _0x19a929?{'count':_0x556438,'rows':_0x19a929}:null;}})['then'](respondWithResult(_0x2b7166,null))['catch'](handleError(_0x2b7166,null));};exports[_0xa241('0x59')]=function(_0x422ca2,_0x58356c,_0x12f713){var _0x326cfb={};var _0x233963={};var _0x41ed5a;var _0xb671ef;return db['Dynamics365Configuration'][_0xa241('0x57')]({'where':{'id':_0x422ca2[_0xa241('0x50')]['id']}})[_0xa241('0x1d')](handleEntityNotFound(_0x58356c,null))['then'](function(_0x2a6962){if(_0x2a6962){_0x41ed5a=_0x2a6962;_0x233963['model']=_[_0xa241('0x37')](db[_0xa241('0x58')]['rawAttributes']);_0x233963[_0xa241('0x38')]=_['keys'](_0x422ca2['query']);_0x233963['filters']=_['intersection'](_0x233963['model'],_0x233963[_0xa241('0x38')]);_0x326cfb[_0xa241('0x3c')]=_['intersection'](_0x233963['model'],qs[_0xa241('0x3b')](_0x422ca2['query']['fields']));_0x326cfb[_0xa241('0x3c')]=_0x326cfb[_0xa241('0x3c')][_0xa241('0x52')]?_0x326cfb[_0xa241('0x3c')]:_0x233963[_0xa241('0x36')];_0x326cfb[_0xa241('0x40')]=qs['sort'](_0x422ca2[_0xa241('0x38')][_0xa241('0x41')]);_0x326cfb['where']=qs[_0xa241('0x39')](_['pick'](_0x422ca2[_0xa241('0x38')],_0x233963[_0xa241('0x39')]));if(_0x422ca2['query'][_0xa241('0x43')]){_0x326cfb['where']=_['merge'](_0x326cfb[_0xa241('0x4b')],{'$or':_[_0xa241('0x45')](_0x326cfb[_0xa241('0x3c')],function(_0x4cf6bd){var _0x4dfb64={};_0x4dfb64[_0x4cf6bd]={'$like':'%'+_0x422ca2[_0xa241('0x38')][_0xa241('0x43')]+'%'};return _0x4dfb64;})});}_0x326cfb=_[_0xa241('0x44')]({},_0x326cfb,_0x422ca2[_0xa241('0x4a')]);return _0x41ed5a[_0xa241('0x59')](_0x326cfb);}})[_0xa241('0x1d')](function(_0x5a6ea6){if(_0x5a6ea6){_0xb671ef=_0x5a6ea6[_0xa241('0x52')];if(!_0x422ca2[_0xa241('0x38')][_0xa241('0x3d')]('nolimit')){_0x326cfb[_0xa241('0x3f')]=qs[_0xa241('0x3f')](_0x422ca2[_0xa241('0x38')][_0xa241('0x3f')]);_0x326cfb[_0xa241('0x2d')]=qs[_0xa241('0x2d')](_0x422ca2[_0xa241('0x38')]['offset']);}return _0x41ed5a[_0xa241('0x59')](_0x326cfb);}})['then'](function(_0x1734f7){if(_0x1734f7){return _0x1734f7?{'count':_0xb671ef,'rows':_0x1734f7}:null;}})['then'](respondWithResult(_0x58356c,null))[_0xa241('0x28')](handleError(_0x58356c,null));};exports[_0xa241('0x5a')]=function(_0x7d09d5,_0x1e693c,_0x9a5cd2){var _0x3b0892={};var _0x37bca5={};var _0x50cb11;var _0x40ab57;return db[_0xa241('0x35')][_0xa241('0x57')]({'where':{'id':_0x7d09d5[_0xa241('0x50')]['id']}})[_0xa241('0x1d')](handleEntityNotFound(_0x1e693c,null))['then'](function(_0x408407){if(_0x408407){_0x50cb11=_0x408407;_0x37bca5[_0xa241('0x36')]=_[_0xa241('0x37')](db[_0xa241('0x58')]['rawAttributes']);_0x37bca5['query']=_[_0xa241('0x37')](_0x7d09d5[_0xa241('0x38')]);_0x37bca5[_0xa241('0x39')]=_[_0xa241('0x3a')](_0x37bca5['model'],_0x37bca5[_0xa241('0x38')]);_0x3b0892['attributes']=_['intersection'](_0x37bca5[_0xa241('0x36')],qs[_0xa241('0x3b')](_0x7d09d5[_0xa241('0x38')][_0xa241('0x3b')]));_0x3b0892['attributes']=_0x3b0892[_0xa241('0x3c')]['length']?_0x3b0892['attributes']:_0x37bca5[_0xa241('0x36')];_0x3b0892['order']=qs[_0xa241('0x41')](_0x7d09d5['query'][_0xa241('0x41')]);_0x3b0892[_0xa241('0x4b')]=qs[_0xa241('0x39')](_[_0xa241('0x42')](_0x7d09d5[_0xa241('0x38')],_0x37bca5[_0xa241('0x39')]));if(_0x7d09d5[_0xa241('0x38')]['filter']){_0x3b0892[_0xa241('0x4b')]=_[_0xa241('0x44')](_0x3b0892['where'],{'$or':_['map'](_0x3b0892[_0xa241('0x3c')],function(_0x17a1cb){var _0x19be34={};_0x19be34[_0x17a1cb]={'$like':'%'+_0x7d09d5[_0xa241('0x38')][_0xa241('0x43')]+'%'};return _0x19be34;})});}_0x3b0892=_[_0xa241('0x44')]({},_0x3b0892,_0x7d09d5[_0xa241('0x4a')]);return _0x50cb11[_0xa241('0x5a')](_0x3b0892);}})[_0xa241('0x1d')](function(_0x48674c){if(_0x48674c){_0x40ab57=_0x48674c[_0xa241('0x52')];if(!_0x7d09d5[_0xa241('0x38')][_0xa241('0x3d')](_0xa241('0x3e'))){_0x3b0892[_0xa241('0x3f')]=qs[_0xa241('0x3f')](_0x7d09d5['query'][_0xa241('0x3f')]);_0x3b0892[_0xa241('0x2d')]=qs['offset'](_0x7d09d5[_0xa241('0x38')][_0xa241('0x2d')]);}return _0x50cb11[_0xa241('0x5a')](_0x3b0892);}})[_0xa241('0x1d')](function(_0x6207a2){if(_0x6207a2){return _0x6207a2?{'count':_0x40ab57,'rows':_0x6207a2}:null;}})['then'](respondWithResult(_0x1e693c,null))['catch'](handleError(_0x1e693c,null));};
\ No newline at end of file
+var _0x47a0=['Dynamics365Field','getSubjects','getDescriptions','html-pdf','zip-dir','fast-json-patch','moment','bluebird','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','jayson/promise','client','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','request\x20sent','debug','Dynamics365Configuration,\x20%s,\x20%s,\x20%s','stringify','error','code','Dynamics365Configuration,\x20%s,\x20%s','message','result','sendStatus','status','offset','limit','Content-Range','apply','destroy','end','stack','name','send','Dynamics365Configuration','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','map','type','VIRTUAL','field','filter','merge','options','count','includeAll','include','findAll','rows','show','params','rawAttributes','find','create','body','catch','getFields','findOne'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x47a0,0x1ac));var _0x047a=function(_0x4e2a07,_0x29adfc){_0x4e2a07=_0x4e2a07-0x0;var _0x4992f1=_0x47a0[_0x4e2a07];return _0x4992f1;};'use strict';var pdf=require(_0x047a('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x047a('0x1'));var jsonpatch=require(_0x047a('0x2'));var rp=require('request-promise');var moment=require(_0x047a('0x3'));var BPromise=require(_0x047a('0x4'));var Mustache=require('mustache');var util=require(_0x047a('0x5'));var path=require(_0x047a('0x6'));var sox=require('sox');var csv=require(_0x047a('0x7'));var ejs=require(_0x047a('0x8'));var fs=require('fs');var _=require(_0x047a('0x9'));var squel=require(_0x047a('0xa'));var crypto=require(_0x047a('0xb'));var jsforce=require(_0x047a('0xc'));var deskjs=require(_0x047a('0xd'));var toCsv=require(_0x047a('0x7'));var querystring=require('querystring');var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x047a('0xe'));var qs=require(_0x047a('0xf'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x047a('0x10'))(_0x047a('0x11'));var utils=require(_0x047a('0x12'));var config=require('../../config/environment');var db=require(_0x047a('0x13'))['db'];var jayson=require(_0x047a('0x14'));var client=jayson[_0x047a('0x15')]['http']({'port':0x232a});function checkPasswordPattern(_0x4591e9,_0x3ed83f,_0x1c5175){if(_0x1c5175){var _0xb9ab96=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0xb9ab96['test'](_0x3ed83f)){return _0x4591e9;}else{throw new Error(_0x047a('0x16'));}}else{return _0x4591e9;}}function respondWithRpcPromise(_0x5b5fa1,_0x136cb0,_0x2c6887,_0x39486a){return new BPromise(function(_0x505f5c,_0x44f088){var _0x50dcff=_0x39486a||client;return _0x50dcff[_0x047a('0x17')](_0x5b5fa1,_0x2c6887)[_0x047a('0x18')](function(_0x3e2c05){logger[_0x047a('0x19')]('Dynamics365Configuration,\x20%s,\x20%s',_0x136cb0,_0x047a('0x1a'));logger[_0x047a('0x1b')](_0x047a('0x1c'),_0x136cb0,_0x047a('0x1a'),JSON[_0x047a('0x1d')](_0x3e2c05));if(_0x3e2c05[_0x047a('0x1e')]){if(_0x3e2c05[_0x047a('0x1e')][_0x047a('0x1f')]===0x1f4){logger[_0x047a('0x1e')](_0x047a('0x20'),_0x136cb0,_0x3e2c05[_0x047a('0x1e')]['message']);return _0x44f088(_0x3e2c05['error'][_0x047a('0x21')]);}logger[_0x047a('0x1e')](_0x047a('0x20'),_0x136cb0,_0x3e2c05[_0x047a('0x1e')]['message']);return _0x505f5c(_0x3e2c05[_0x047a('0x1e')][_0x047a('0x21')]);}else{logger[_0x047a('0x19')](_0x047a('0x20'),_0x136cb0,_0x047a('0x1a'));_0x505f5c(_0x3e2c05[_0x047a('0x22')][_0x047a('0x21')]);}})['catch'](function(_0x1382ae){logger[_0x047a('0x1e')]('Dynamics365Configuration,\x20%s,\x20%s',_0x136cb0,_0x1382ae);_0x44f088(_0x1382ae);});});}function respondWithStatusCode(_0x1f07f4,_0x1a39fd){_0x1a39fd=_0x1a39fd||0xcc;return function(_0x6d8daa){if(_0x6d8daa){return _0x1f07f4[_0x047a('0x23')](_0x1a39fd);}return _0x1f07f4[_0x047a('0x24')](_0x1a39fd)['end']();};}function respondWithResult(_0xc15051,_0x3d101){_0x3d101=_0x3d101||0xc8;return function(_0x2ddd57){if(_0x2ddd57){return _0xc15051[_0x047a('0x24')](_0x3d101)['json'](_0x2ddd57);}};}function respondWithFilteredResult(_0x9813c0,_0x594948){return function(_0x24aeb6){if(_0x24aeb6){var _0x1ad051=_0x24aeb6['count'],_0x60c4b2=_0x594948[_0x047a('0x25')],_0x4582f8=_0x594948[_0x047a('0x25')]+_0x594948[_0x047a('0x26')],_0x976440;if(_0x4582f8>=_0x1ad051){_0x4582f8=_0x1ad051;_0x976440=0xc8;}else{_0x976440=0xce;}_0x9813c0[_0x047a('0x24')](_0x976440);return _0x9813c0['set'](_0x047a('0x27'),_0x60c4b2+'-'+_0x4582f8+'/'+_0x1ad051)['json'](_0x24aeb6);}return null;};}function patchUpdates(_0xfcdbe8){return function(_0x4d6e58){try{jsonpatch[_0x047a('0x28')](_0x4d6e58,_0xfcdbe8,!![]);}catch(_0x5c38c9){return BPromise['reject'](_0x5c38c9);}return _0x4d6e58['save']();};}function saveUpdates(_0x3f6711,_0x21663c){return function(_0x40d603){if(_0x40d603){return _0x40d603['update'](_0x3f6711)['then'](function(_0x5e26cb){return _0x5e26cb;});}return null;};}function removeEntity(_0x501e89,_0x5b7436){return function(_0x2752d4){if(_0x2752d4){return _0x2752d4[_0x047a('0x29')]()[_0x047a('0x18')](function(){_0x501e89[_0x047a('0x24')](0xcc)[_0x047a('0x2a')]();});}};}function handleEntityNotFound(_0x38d634,_0x59689c){return function(_0x2f6640){if(!_0x2f6640){_0x38d634[_0x047a('0x23')](0x194);}return _0x2f6640;};}function handleError(_0x208286,_0x296551){_0x296551=_0x296551||0x1f4;return function(_0x37eadd){logger['error'](_0x37eadd[_0x047a('0x2b')]);if(_0x37eadd[_0x047a('0x2c')]){delete _0x37eadd[_0x047a('0x2c')];}_0x208286[_0x047a('0x24')](_0x296551)[_0x047a('0x2d')](_0x37eadd);};}exports['index']=function(_0x14e855,_0x347851){var _0x101467={},_0x2fd32c={},_0x102d4b={'count':0x0,'rows':[]};var _0x50d4a4=db[_0x047a('0x2e')]['rawAttributes'];_0x2fd32c[_0x047a('0x2f')]=_[_0x047a('0x30')](_0x50d4a4);_0x2fd32c[_0x047a('0x31')]=_[_0x047a('0x30')](_0x14e855[_0x047a('0x31')]);_0x2fd32c[_0x047a('0x32')]=_['intersection'](_0x2fd32c[_0x047a('0x2f')],_0x2fd32c[_0x047a('0x31')]);_0x101467[_0x047a('0x33')]=_[_0x047a('0x34')](_0x2fd32c[_0x047a('0x2f')],qs[_0x047a('0x35')](_0x14e855[_0x047a('0x31')][_0x047a('0x35')]));_0x101467['attributes']=_0x101467[_0x047a('0x33')][_0x047a('0x36')]?_0x101467['attributes']:_0x2fd32c[_0x047a('0x2f')];if(!_0x14e855['query'][_0x047a('0x37')](_0x047a('0x38'))){_0x101467[_0x047a('0x26')]=qs['limit'](_0x14e855[_0x047a('0x31')][_0x047a('0x26')]);_0x101467[_0x047a('0x25')]=qs[_0x047a('0x25')](_0x14e855['query'][_0x047a('0x25')]);}_0x101467[_0x047a('0x39')]=qs['sort'](_0x14e855['query'][_0x047a('0x3a')]);_0x101467[_0x047a('0x3b')]=qs[_0x047a('0x32')](_[_0x047a('0x3c')](_0x14e855[_0x047a('0x31')],_0x2fd32c[_0x047a('0x32')]));if(_0x14e855[_0x047a('0x31')]['filter']){_0x101467[_0x047a('0x3b')]=_['merge'](_0x101467['where'],{'$or':_[_0x047a('0x3d')](_0x50d4a4,function(_0x243656){if(_0x243656[_0x047a('0x3e')]['key']!==_0x047a('0x3f')){var _0x1909eb={};_0x1909eb[_0x243656[_0x047a('0x40')]]={'$like':'%'+_0x14e855[_0x047a('0x31')][_0x047a('0x41')]+'%'};return _0x1909eb;}})});}_0x101467=_[_0x047a('0x42')]({},_0x101467,_0x14e855[_0x047a('0x43')]);var _0x383ffe={'where':_0x101467['where']};return db['Dynamics365Configuration'][_0x047a('0x44')](_0x383ffe)[_0x047a('0x18')](function(_0x2b8fc3){_0x102d4b[_0x047a('0x44')]=_0x2b8fc3;if(_0x14e855[_0x047a('0x31')][_0x047a('0x45')]){_0x101467[_0x047a('0x46')]=[{'all':!![]}];}return db['Dynamics365Configuration'][_0x047a('0x47')](_0x101467);})['then'](function(_0x4337fb){_0x102d4b[_0x047a('0x48')]=_0x4337fb;return _0x102d4b;})[_0x047a('0x18')](respondWithFilteredResult(_0x347851,_0x101467))['catch'](handleError(_0x347851,null));};exports[_0x047a('0x49')]=function(_0x33be3c,_0x42a839){var _0x550f9b={'raw':![],'where':{'id':_0x33be3c[_0x047a('0x4a')]['id']}},_0x143ddb={};_0x143ddb[_0x047a('0x2f')]=_[_0x047a('0x30')](db[_0x047a('0x2e')][_0x047a('0x4b')]);_0x143ddb['query']=_[_0x047a('0x30')](_0x33be3c[_0x047a('0x31')]);_0x143ddb[_0x047a('0x32')]=_['intersection'](_0x143ddb[_0x047a('0x2f')],_0x143ddb[_0x047a('0x31')]);_0x550f9b[_0x047a('0x33')]=_[_0x047a('0x34')](_0x143ddb[_0x047a('0x2f')],qs['fields'](_0x33be3c[_0x047a('0x31')]['fields']));_0x550f9b[_0x047a('0x33')]=_0x550f9b[_0x047a('0x33')][_0x047a('0x36')]?_0x550f9b[_0x047a('0x33')]:_0x143ddb[_0x047a('0x2f')];if(_0x33be3c['query'][_0x047a('0x45')]){_0x550f9b[_0x047a('0x46')]=[{'all':!![]}];}_0x550f9b=_[_0x047a('0x42')]({},_0x550f9b,_0x33be3c['options']);return db[_0x047a('0x2e')][_0x047a('0x4c')](_0x550f9b)[_0x047a('0x18')](handleEntityNotFound(_0x42a839,null))[_0x047a('0x18')](respondWithResult(_0x42a839,null))['catch'](handleError(_0x42a839,null));};exports[_0x047a('0x4d')]=function(_0x33edf2,_0x392bbc){return db['Dynamics365Configuration'][_0x047a('0x4d')](_0x33edf2[_0x047a('0x4e')],{})['then'](respondWithResult(_0x392bbc,0xc9))[_0x047a('0x4f')](handleError(_0x392bbc,null));};exports['update']=function(_0x5726ff,_0x4deff4){if(_0x5726ff[_0x047a('0x4e')]['id']){delete _0x5726ff[_0x047a('0x4e')]['id'];}return db[_0x047a('0x2e')][_0x047a('0x4c')]({'where':{'id':_0x5726ff[_0x047a('0x4a')]['id']}})['then'](handleEntityNotFound(_0x4deff4,null))[_0x047a('0x18')](saveUpdates(_0x5726ff[_0x047a('0x4e')],null))['then'](respondWithResult(_0x4deff4,null))[_0x047a('0x4f')](handleError(_0x4deff4,null));};exports[_0x047a('0x29')]=function(_0x403d8b,_0x5ecb2b){return db['Dynamics365Configuration']['find']({'where':{'id':_0x403d8b['params']['id']}})[_0x047a('0x18')](handleEntityNotFound(_0x5ecb2b,null))['then'](removeEntity(_0x5ecb2b,null))['catch'](handleError(_0x5ecb2b,null));};exports[_0x047a('0x50')]=function(_0x4b9607,_0x2ac801,_0x19e7f8){var _0x2156ab={};var _0x97c56d={};var _0x41f3e0;var _0x50b10b;return db[_0x047a('0x2e')][_0x047a('0x51')]({'where':{'id':_0x4b9607['params']['id']}})['then'](handleEntityNotFound(_0x2ac801,null))['then'](function(_0x52f9a2){if(_0x52f9a2){_0x41f3e0=_0x52f9a2;_0x97c56d['model']=_['keys'](db[_0x047a('0x52')][_0x047a('0x4b')]);_0x97c56d[_0x047a('0x31')]=_['keys'](_0x4b9607[_0x047a('0x31')]);_0x97c56d[_0x047a('0x32')]=_['intersection'](_0x97c56d[_0x047a('0x2f')],_0x97c56d[_0x047a('0x31')]);_0x2156ab[_0x047a('0x33')]=_[_0x047a('0x34')](_0x97c56d['model'],qs[_0x047a('0x35')](_0x4b9607[_0x047a('0x31')][_0x047a('0x35')]));_0x2156ab[_0x047a('0x33')]=_0x2156ab[_0x047a('0x33')][_0x047a('0x36')]?_0x2156ab[_0x047a('0x33')]:_0x97c56d[_0x047a('0x2f')];_0x2156ab['order']=qs[_0x047a('0x3a')](_0x4b9607[_0x047a('0x31')]['sort']);_0x2156ab[_0x047a('0x3b')]=qs[_0x047a('0x32')](_[_0x047a('0x3c')](_0x4b9607[_0x047a('0x31')],_0x97c56d['filters']));if(_0x4b9607[_0x047a('0x31')][_0x047a('0x41')]){_0x2156ab[_0x047a('0x3b')]=_[_0x047a('0x42')](_0x2156ab[_0x047a('0x3b')],{'$or':_['map'](_0x2156ab['attributes'],function(_0x5a7562){var _0x3992bb={};_0x3992bb[_0x5a7562]={'$like':'%'+_0x4b9607[_0x047a('0x31')][_0x047a('0x41')]+'%'};return _0x3992bb;})});}_0x2156ab=_[_0x047a('0x42')]({},_0x2156ab,_0x4b9607[_0x047a('0x43')]);return _0x41f3e0[_0x047a('0x50')](_0x2156ab);}})[_0x047a('0x18')](function(_0x34afe3){if(_0x34afe3){_0x50b10b=_0x34afe3[_0x047a('0x36')];if(!_0x4b9607[_0x047a('0x31')][_0x047a('0x37')](_0x047a('0x38'))){_0x2156ab[_0x047a('0x26')]=qs[_0x047a('0x26')](_0x4b9607['query'][_0x047a('0x26')]);_0x2156ab[_0x047a('0x25')]=qs[_0x047a('0x25')](_0x4b9607[_0x047a('0x31')][_0x047a('0x25')]);}return _0x41f3e0['getFields'](_0x2156ab);}})['then'](function(_0x5301ac){if(_0x5301ac){return _0x5301ac?{'count':_0x50b10b,'rows':_0x5301ac}:null;}})[_0x047a('0x18')](respondWithResult(_0x2ac801,null))[_0x047a('0x4f')](handleError(_0x2ac801,null));};exports[_0x047a('0x53')]=function(_0xca42d6,_0x12ea29,_0x5ab2cd){var _0x2fb5e7={};var _0xb9a2e9={};var _0x2f530e;var _0x503da2;return db['Dynamics365Configuration'][_0x047a('0x51')]({'where':{'id':_0xca42d6[_0x047a('0x4a')]['id']}})[_0x047a('0x18')](handleEntityNotFound(_0x12ea29,null))[_0x047a('0x18')](function(_0x4186b0){if(_0x4186b0){_0x2f530e=_0x4186b0;_0xb9a2e9[_0x047a('0x2f')]=_['keys'](db['Dynamics365Field'][_0x047a('0x4b')]);_0xb9a2e9[_0x047a('0x31')]=_[_0x047a('0x30')](_0xca42d6[_0x047a('0x31')]);_0xb9a2e9[_0x047a('0x32')]=_[_0x047a('0x34')](_0xb9a2e9['model'],_0xb9a2e9['query']);_0x2fb5e7[_0x047a('0x33')]=_[_0x047a('0x34')](_0xb9a2e9['model'],qs[_0x047a('0x35')](_0xca42d6[_0x047a('0x31')][_0x047a('0x35')]));_0x2fb5e7[_0x047a('0x33')]=_0x2fb5e7[_0x047a('0x33')][_0x047a('0x36')]?_0x2fb5e7[_0x047a('0x33')]:_0xb9a2e9[_0x047a('0x2f')];_0x2fb5e7[_0x047a('0x39')]=qs[_0x047a('0x3a')](_0xca42d6[_0x047a('0x31')][_0x047a('0x3a')]);_0x2fb5e7[_0x047a('0x3b')]=qs[_0x047a('0x32')](_[_0x047a('0x3c')](_0xca42d6[_0x047a('0x31')],_0xb9a2e9['filters']));if(_0xca42d6[_0x047a('0x31')][_0x047a('0x41')]){_0x2fb5e7[_0x047a('0x3b')]=_[_0x047a('0x42')](_0x2fb5e7[_0x047a('0x3b')],{'$or':_[_0x047a('0x3d')](_0x2fb5e7[_0x047a('0x33')],function(_0x465fd0){var _0x25fea8={};_0x25fea8[_0x465fd0]={'$like':'%'+_0xca42d6[_0x047a('0x31')][_0x047a('0x41')]+'%'};return _0x25fea8;})});}_0x2fb5e7=_[_0x047a('0x42')]({},_0x2fb5e7,_0xca42d6['options']);return _0x2f530e[_0x047a('0x53')](_0x2fb5e7);}})['then'](function(_0x43a190){if(_0x43a190){_0x503da2=_0x43a190[_0x047a('0x36')];if(!_0xca42d6[_0x047a('0x31')][_0x047a('0x37')](_0x047a('0x38'))){_0x2fb5e7['limit']=qs[_0x047a('0x26')](_0xca42d6[_0x047a('0x31')][_0x047a('0x26')]);_0x2fb5e7[_0x047a('0x25')]=qs['offset'](_0xca42d6['query'][_0x047a('0x25')]);}return _0x2f530e[_0x047a('0x53')](_0x2fb5e7);}})[_0x047a('0x18')](function(_0x1b60d2){if(_0x1b60d2){return _0x1b60d2?{'count':_0x503da2,'rows':_0x1b60d2}:null;}})['then'](respondWithResult(_0x12ea29,null))[_0x047a('0x4f')](handleError(_0x12ea29,null));};exports[_0x047a('0x54')]=function(_0x1552a2,_0x588717,_0x29c575){var _0x9110be={};var _0x3cbc20={};var _0x2196a3;var _0x120d01;return db[_0x047a('0x2e')]['findOne']({'where':{'id':_0x1552a2[_0x047a('0x4a')]['id']}})[_0x047a('0x18')](handleEntityNotFound(_0x588717,null))[_0x047a('0x18')](function(_0x46909e){if(_0x46909e){_0x2196a3=_0x46909e;_0x3cbc20[_0x047a('0x2f')]=_[_0x047a('0x30')](db[_0x047a('0x52')][_0x047a('0x4b')]);_0x3cbc20[_0x047a('0x31')]=_[_0x047a('0x30')](_0x1552a2['query']);_0x3cbc20['filters']=_['intersection'](_0x3cbc20[_0x047a('0x2f')],_0x3cbc20[_0x047a('0x31')]);_0x9110be[_0x047a('0x33')]=_[_0x047a('0x34')](_0x3cbc20[_0x047a('0x2f')],qs[_0x047a('0x35')](_0x1552a2[_0x047a('0x31')]['fields']));_0x9110be[_0x047a('0x33')]=_0x9110be[_0x047a('0x33')][_0x047a('0x36')]?_0x9110be[_0x047a('0x33')]:_0x3cbc20[_0x047a('0x2f')];_0x9110be[_0x047a('0x39')]=qs['sort'](_0x1552a2[_0x047a('0x31')][_0x047a('0x3a')]);_0x9110be[_0x047a('0x3b')]=qs[_0x047a('0x32')](_[_0x047a('0x3c')](_0x1552a2[_0x047a('0x31')],_0x3cbc20['filters']));if(_0x1552a2[_0x047a('0x31')]['filter']){_0x9110be[_0x047a('0x3b')]=_['merge'](_0x9110be['where'],{'$or':_[_0x047a('0x3d')](_0x9110be[_0x047a('0x33')],function(_0x4f1b2d){var _0x3cc861={};_0x3cc861[_0x4f1b2d]={'$like':'%'+_0x1552a2[_0x047a('0x31')][_0x047a('0x41')]+'%'};return _0x3cc861;})});}_0x9110be=_[_0x047a('0x42')]({},_0x9110be,_0x1552a2['options']);return _0x2196a3[_0x047a('0x54')](_0x9110be);}})[_0x047a('0x18')](function(_0x3f705b){if(_0x3f705b){_0x120d01=_0x3f705b[_0x047a('0x36')];if(!_0x1552a2[_0x047a('0x31')][_0x047a('0x37')]('nolimit')){_0x9110be[_0x047a('0x26')]=qs[_0x047a('0x26')](_0x1552a2[_0x047a('0x31')][_0x047a('0x26')]);_0x9110be['offset']=qs[_0x047a('0x25')](_0x1552a2[_0x047a('0x31')][_0x047a('0x25')]);}return _0x2196a3[_0x047a('0x54')](_0x9110be);}})['then'](function(_0x2ad613){if(_0x2ad613){return _0x2ad613?{'count':_0x120d01,'rows':_0x2ad613}:null;}})[_0x047a('0x18')](respondWithResult(_0x588717,null))[_0x047a('0x4f')](handleError(_0x588717,null));};
\ No newline at end of file
index 8286ed6..46ae1ce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa020=['Dynamics365Configuration','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','../../config/environment','./intDynamics365Configuration.attributes','exports'];(function(_0x5d12fe,_0x17acc9){var _0x46629c=function(_0x4bb5f2){while(--_0x4bb5f2){_0x5d12fe['push'](_0x5d12fe['shift']());}};_0x46629c(++_0x17acc9);}(_0xa020,0x1ed));var _0x0a02=function(_0x1d966c,_0x118e3f){_0x1d966c=_0x1d966c-0x0;var _0x4bc41=_0xa020[_0x1d966c];return _0x4bc41;};'use strict';var _=require(_0x0a02('0x0'));var util=require(_0x0a02('0x1'));var logger=require(_0x0a02('0x2'))(_0x0a02('0x3'));var moment=require(_0x0a02('0x4'));var BPromise=require(_0x0a02('0x5'));var rp=require(_0x0a02('0x6'));var fs=require('fs');var path=require(_0x0a02('0x7'));var rimraf=require('rimraf');var config=require(_0x0a02('0x8'));var attributes=require(_0x0a02('0x9'));module[_0x0a02('0xa')]=function(_0x521205,_0x134083){return _0x521205['define'](_0x0a02('0xb'),attributes,{'tableName':'int_dynamics365_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb131=['define','Dynamics365Configuration','int_dynamics365_configurations','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','exports'];(function(_0x360b94,_0x540c61){var _0x2f8421=function(_0x1f3322){while(--_0x1f3322){_0x360b94['push'](_0x360b94['shift']());}};_0x2f8421(++_0x540c61);}(_0xb131,0x16f));var _0x1b13=function(_0x5d6c3e,_0x409a3e){_0x5d6c3e=_0x5d6c3e-0x0;var _0x44ecb7=_0xb131[_0x5d6c3e];return _0x44ecb7;};'use strict';var _=require(_0x1b13('0x0'));var util=require(_0x1b13('0x1'));var logger=require(_0x1b13('0x2'))(_0x1b13('0x3'));var moment=require(_0x1b13('0x4'));var BPromise=require(_0x1b13('0x5'));var rp=require(_0x1b13('0x6'));var fs=require('fs');var path=require(_0x1b13('0x7'));var rimraf=require(_0x1b13('0x8'));var config=require(_0x1b13('0x9'));var attributes=require('./intDynamics365Configuration.attributes');module[_0x1b13('0xa')]=function(_0x1d7c95,_0x254799){return _0x1d7c95[_0x1b13('0xb')](_0x1b13('0xc'),attributes,{'tableName':_0x1b13('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d9727d3..578c6a8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x18c3=['request\x20sent','Dynamics365Configuration,\x20%s,\x20%s,\x20%s','error','code','message','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','Dynamics365Configuration,\x20%s,\x20%s'];(function(_0x589781,_0x84e018){var _0x15c4a2=function(_0x4f5de9){while(--_0x4f5de9){_0x589781['push'](_0x589781['shift']());}};_0x15c4a2(++_0x84e018);}(_0x18c3,0xae));var _0x318c=function(_0x2d428f,_0x15848b){_0x2d428f=_0x2d428f-0x0;var _0x1aaa05=_0x18c3[_0x2d428f];return _0x1aaa05;};'use strict';var _=require(_0x318c('0x0'));var util=require(_0x318c('0x1'));var moment=require(_0x318c('0x2'));var BPromise=require(_0x318c('0x3'));var rs=require(_0x318c('0x4'));var fs=require('fs');var Redis=require(_0x318c('0x5'));var db=require(_0x318c('0x6'))['db'];var utils=require(_0x318c('0x7'));var logger=require(_0x318c('0x8'))(_0x318c('0x9'));var config=require(_0x318c('0xa'));var jayson=require(_0x318c('0xb'));var client=jayson[_0x318c('0xc')][_0x318c('0xd')]({'port':0x232a});function respondWithRpcPromise(_0xf8ccd8,_0x218666,_0x346d38){return new BPromise(function(_0x33ebac,_0x17a4a6){return client[_0x318c('0xe')](_0xf8ccd8,_0x346d38)[_0x318c('0xf')](function(_0x234cb9){logger[_0x318c('0x10')](_0x318c('0x11'),_0x218666,_0x318c('0x12'));logger['debug'](_0x318c('0x13'),_0x218666,_0x318c('0x12'),JSON['stringify'](_0x234cb9));if(_0x234cb9['error']){if(_0x234cb9[_0x318c('0x14')][_0x318c('0x15')]===0x1f4){logger[_0x318c('0x14')]('Dynamics365Configuration,\x20%s,\x20%s',_0x218666,_0x234cb9[_0x318c('0x14')]['message']);return _0x17a4a6(_0x234cb9['error']['message']);}logger[_0x318c('0x14')](_0x318c('0x11'),_0x218666,_0x234cb9['error'][_0x318c('0x16')]);return _0x33ebac(_0x234cb9[_0x318c('0x14')]['message']);}else{logger[_0x318c('0x10')](_0x318c('0x11'),_0x218666,_0x318c('0x12'));_0x33ebac(_0x234cb9['result'][_0x318c('0x16')]);}})[_0x318c('0x17')](function(_0x3fc783){logger['error'](_0x318c('0x11'),_0x218666,_0x3fc783);_0x17a4a6(_0x3fc783);});});}
\ No newline at end of file
+var _0xa436=['../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info','stringify','error','Dynamics365Configuration,\x20%s,\x20%s','message','request\x20sent','catch','lodash','moment','bluebird','randomstring','ioredis'];(function(_0x227b67,_0x5c4075){var _0x16f616=function(_0x46e857){while(--_0x46e857){_0x227b67['push'](_0x227b67['shift']());}};_0x16f616(++_0x5c4075);}(_0xa436,0x1c9));var _0x6a43=function(_0x2057ce,_0x4ae54c){_0x2057ce=_0x2057ce-0x0;var _0x2311db=_0xa436[_0x2057ce];return _0x2311db;};'use strict';var _=require(_0x6a43('0x0'));var util=require('util');var moment=require(_0x6a43('0x1'));var BPromise=require(_0x6a43('0x2'));var rs=require(_0x6a43('0x3'));var fs=require('fs');var Redis=require(_0x6a43('0x4'));var db=require(_0x6a43('0x5'))['db'];var utils=require(_0x6a43('0x6'));var logger=require('../../config/logger')(_0x6a43('0x7'));var config=require(_0x6a43('0x8'));var jayson=require(_0x6a43('0x9'));var client=jayson[_0x6a43('0xa')][_0x6a43('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x5d31d4,_0x477bc9,_0x503017){return new BPromise(function(_0x4da1f5,_0x5bfa4b){return client[_0x6a43('0xc')](_0x5d31d4,_0x503017)[_0x6a43('0xd')](function(_0x3ad19c){logger[_0x6a43('0xe')]('Dynamics365Configuration,\x20%s,\x20%s',_0x477bc9,'request\x20sent');logger['debug']('Dynamics365Configuration,\x20%s,\x20%s,\x20%s',_0x477bc9,'request\x20sent',JSON[_0x6a43('0xf')](_0x3ad19c));if(_0x3ad19c[_0x6a43('0x10')]){if(_0x3ad19c[_0x6a43('0x10')]['code']===0x1f4){logger['error'](_0x6a43('0x11'),_0x477bc9,_0x3ad19c[_0x6a43('0x10')][_0x6a43('0x12')]);return _0x5bfa4b(_0x3ad19c[_0x6a43('0x10')][_0x6a43('0x12')]);}logger[_0x6a43('0x10')]('Dynamics365Configuration,\x20%s,\x20%s',_0x477bc9,_0x3ad19c[_0x6a43('0x10')][_0x6a43('0x12')]);return _0x4da1f5(_0x3ad19c[_0x6a43('0x10')][_0x6a43('0x12')]);}else{logger[_0x6a43('0xe')](_0x6a43('0x11'),_0x477bc9,_0x6a43('0x13'));_0x4da1f5(_0x3ad19c['result'][_0x6a43('0x12')]);}})[_0x6a43('0x14')](function(_0x31672d){logger['error']('Dynamics365Configuration,\x20%s,\x20%s',_0x477bc9,_0x31672d);_0x5bfa4b(_0x31672d);});});}
\ No newline at end of file
index 42e33d3..f644682 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3c8e=['post','create','put','update','delete','exports','multer','util','path','express','Router','../../components/interaction/service','../../config/environment','./intDynamics365Field.controller','get','/:id','isAuthenticated'];(function(_0x27e36f,_0xa0fa74){var _0x20159c=function(_0x1bf9e9){while(--_0x1bf9e9){_0x27e36f['push'](_0x27e36f['shift']());}};_0x20159c(++_0xa0fa74);}(_0x3c8e,0x15a));var _0xe3c8=function(_0x3a6cf7,_0x206242){_0x3a6cf7=_0x3a6cf7-0x0;var _0x247bf8=_0x3c8e[_0x3a6cf7];return _0x247bf8;};'use strict';var multer=require(_0xe3c8('0x0'));var util=require(_0xe3c8('0x1'));var path=require(_0xe3c8('0x2'));var timeout=require('connect-timeout');var express=require(_0xe3c8('0x3'));var router=express[_0xe3c8('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xe3c8('0x5'));var config=require(_0xe3c8('0x6'));var controller=require(_0xe3c8('0x7'));router[_0xe3c8('0x8')]('/',auth['isAuthenticated'](),controller['index']);router[_0xe3c8('0x8')](_0xe3c8('0x9'),auth[_0xe3c8('0xa')](),controller['show']);router[_0xe3c8('0xb')]('/',auth['isAuthenticated'](),controller[_0xe3c8('0xc')]);router[_0xe3c8('0xd')](_0xe3c8('0x9'),auth[_0xe3c8('0xa')](),controller[_0xe3c8('0xe')]);router[_0xe3c8('0xf')](_0xe3c8('0x9'),auth[_0xe3c8('0xa')](),controller['destroy']);module[_0xe3c8('0x10')]=router;
\ No newline at end of file
+var _0x971f=['show','post','put','delete','destroy','exports','util','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intDynamics365Field.controller','get','isAuthenticated','index','/:id'];(function(_0x5fc886,_0x21b8f5){var _0x26bce4=function(_0x24d0a4){while(--_0x24d0a4){_0x5fc886['push'](_0x5fc886['shift']());}};_0x26bce4(++_0x21b8f5);}(_0x971f,0x17c));var _0xf971=function(_0x31b262,_0x4b7a9c){_0x31b262=_0x31b262-0x0;var _0x2f4b16=_0x971f[_0x31b262];return _0x2f4b16;};'use strict';var multer=require('multer');var util=require(_0xf971('0x0'));var path=require(_0xf971('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0xf971('0x2')]();var auth=require(_0xf971('0x3'));var interaction=require(_0xf971('0x4'));var config=require(_0xf971('0x5'));var controller=require(_0xf971('0x6'));router[_0xf971('0x7')]('/',auth[_0xf971('0x8')](),controller[_0xf971('0x9')]);router[_0xf971('0x7')](_0xf971('0xa'),auth['isAuthenticated'](),controller[_0xf971('0xb')]);router[_0xf971('0xc')]('/',auth[_0xf971('0x8')](),controller['create']);router[_0xf971('0xd')]('/:id',auth[_0xf971('0x8')](),controller['update']);router[_0xf971('0xe')](_0xf971('0xa'),auth['isAuthenticated'](),controller[_0xf971('0xf')]);module[_0xf971('0x10')]=router;
\ No newline at end of file
index 79d3ae0..cdf313f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5c00=['string','STRING','customVariable','BOOLEAN','sequelize','exports','ENUM','variable','keyValue'];(function(_0x843467,_0x4c6e32){var _0x5e5c2d=function(_0x286db3){while(--_0x286db3){_0x843467['push'](_0x843467['shift']());}};_0x5e5c2d(++_0x4c6e32);}(_0x5c00,0x17e));var _0x05c0=function(_0x5dc45d,_0x55f90f){_0x5dc45d=_0x5dc45d-0x0;var _0x4ce697=_0x5c00[_0x5dc45d];return _0x4ce697;};'use strict';var Sequelize=require(_0x05c0('0x0'));module[_0x05c0('0x1')]={'type':{'type':Sequelize[_0x05c0('0x2')]('string',_0x05c0('0x3'),'customVariable',_0x05c0('0x4')),'defaultValue':_0x05c0('0x5')},'content':{'type':Sequelize[_0x05c0('0x6')]},'key':{'type':Sequelize[_0x05c0('0x6')]},'keyType':{'type':Sequelize['ENUM'](_0x05c0('0x5'),_0x05c0('0x3'),_0x05c0('0x7'))},'keyContent':{'type':Sequelize[_0x05c0('0x6')]},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize[_0x05c0('0x6')]},'customField':{'type':Sequelize[_0x05c0('0x8')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x05c0('0x6')]}};
\ No newline at end of file
+var _0x1be1=['STRING','variable','BOOLEAN','ENUM','string','customVariable','keyValue'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x1be1,0x192));var _0x11be=function(_0x254c95,_0x4b0a4e){_0x254c95=_0x254c95-0x0;var _0x578b91=_0x1be1[_0x254c95];return _0x578b91;};'use strict';var Sequelize=require('sequelize');module['exports']={'type':{'type':Sequelize[_0x11be('0x0')](_0x11be('0x1'),'variable',_0x11be('0x2'),_0x11be('0x3')),'defaultValue':_0x11be('0x1')},'content':{'type':Sequelize[_0x11be('0x4')]},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0x11be('0x0')](_0x11be('0x1'),_0x11be('0x5'),'customVariable')},'keyContent':{'type':Sequelize[_0x11be('0x4')]},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize[_0x11be('0x4')]},'customField':{'type':Sequelize[_0x11be('0x6')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x11be('0x4')]}};
\ No newline at end of file
index 3de0ec0..23a06d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x70e0=['error','name','send','index','Dynamics365Field','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','nolimit','offset','sort','where','filter','merge','map','key','VIRTUAL','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','html-pdf','eml-format','rimraf','request-promise','moment','bluebird','mustache','path','to-csv','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','count','limit','set','Content-Range','json','apply','reject','save','update','then','destroy','end'];(function(_0x3a1cca,_0xf9cf7e){var _0x53b71c=function(_0x56c49f){while(--_0x56c49f){_0x3a1cca['push'](_0x3a1cca['shift']());}};_0x53b71c(++_0xf9cf7e);}(_0x70e0,0x17b));var _0x070e=function(_0x169b17,_0x44eee2){_0x169b17=_0x169b17-0x0;var _0x4d46fa=_0x70e0[_0x169b17];return _0x4d46fa;};'use strict';var pdf=require(_0x070e('0x0'));var emlformat=require(_0x070e('0x1'));var rimraf=require(_0x070e('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x070e('0x3'));var moment=require(_0x070e('0x4'));var BPromise=require(_0x070e('0x5'));var Mustache=require(_0x070e('0x6'));var util=require('util');var path=require(_0x070e('0x7'));var sox=require('sox');var csv=require(_0x070e('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x070e('0x9'));var jsforce=require(_0x070e('0xa'));var deskjs=require(_0x070e('0xb'));var toCsv=require(_0x070e('0x8'));var querystring=require(_0x070e('0xc'));var Papa=require(_0x070e('0xd'));var Redis=require(_0x070e('0xe'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0x070e('0xf'));var logger=require(_0x070e('0x10'))(_0x070e('0x11'));var utils=require(_0x070e('0x12'));var config=require(_0x070e('0x13'));var db=require(_0x070e('0x14'))['db'];function respondWithStatusCode(_0x25cfe1,_0x1baa12){_0x1baa12=_0x1baa12||0xcc;return function(_0x39d2b9){if(_0x39d2b9){return _0x25cfe1[_0x070e('0x15')](_0x1baa12);}return _0x25cfe1[_0x070e('0x16')](_0x1baa12)['end']();};}function respondWithResult(_0x5dca0f,_0x24baba){_0x24baba=_0x24baba||0xc8;return function(_0x56c7ba){if(_0x56c7ba){return _0x5dca0f['status'](_0x24baba)['json'](_0x56c7ba);}};}function respondWithFilteredResult(_0x11d2ce,_0x14c3fd){return function(_0x51d14d){if(_0x51d14d){var _0x5d3a38=_0x51d14d[_0x070e('0x17')],_0x373d86=_0x14c3fd['offset'],_0xeae1a5=_0x14c3fd['offset']+_0x14c3fd[_0x070e('0x18')],_0x180897;if(_0xeae1a5>=_0x5d3a38){_0xeae1a5=_0x5d3a38;_0x180897=0xc8;}else{_0x180897=0xce;}_0x11d2ce[_0x070e('0x16')](_0x180897);return _0x11d2ce[_0x070e('0x19')](_0x070e('0x1a'),_0x373d86+'-'+_0xeae1a5+'/'+_0x5d3a38)[_0x070e('0x1b')](_0x51d14d);}return null;};}function patchUpdates(_0x5037eb){return function(_0x3938b5){try{jsonpatch[_0x070e('0x1c')](_0x3938b5,_0x5037eb,!![]);}catch(_0x1ad3de){return BPromise[_0x070e('0x1d')](_0x1ad3de);}return _0x3938b5[_0x070e('0x1e')]();};}function saveUpdates(_0x5c16fd,_0x5b2f48){return function(_0x4e958f){if(_0x4e958f){return _0x4e958f[_0x070e('0x1f')](_0x5c16fd)[_0x070e('0x20')](function(_0x20dc60){return _0x20dc60;});}return null;};}function removeEntity(_0x4be0d7,_0x5b184){return function(_0x5dc5d2){if(_0x5dc5d2){return _0x5dc5d2[_0x070e('0x21')]()[_0x070e('0x20')](function(){_0x4be0d7[_0x070e('0x16')](0xcc)[_0x070e('0x22')]();});}};}function handleEntityNotFound(_0x28a1c3,_0xa86797){return function(_0xe405e){if(!_0xe405e){_0x28a1c3[_0x070e('0x15')](0x194);}return _0xe405e;};}function handleError(_0x595c7e,_0x2f8055){_0x2f8055=_0x2f8055||0x1f4;return function(_0x270061){logger[_0x070e('0x23')](_0x270061['stack']);if(_0x270061[_0x070e('0x24')]){delete _0x270061['name'];}_0x595c7e['status'](_0x2f8055)[_0x070e('0x25')](_0x270061);};}exports[_0x070e('0x26')]=function(_0x41deb1,_0x1743cc){var _0x4763c6={},_0x497f58={},_0x374c54={'count':0x0,'rows':[]};var _0x219e48=db[_0x070e('0x27')][_0x070e('0x28')];_0x497f58[_0x070e('0x29')]=_[_0x070e('0x2a')](_0x219e48);_0x497f58[_0x070e('0x2b')]=_[_0x070e('0x2a')](_0x41deb1['query']);_0x497f58[_0x070e('0x2c')]=_[_0x070e('0x2d')](_0x497f58[_0x070e('0x29')],_0x497f58['query']);_0x4763c6['attributes']=_[_0x070e('0x2d')](_0x497f58[_0x070e('0x29')],qs[_0x070e('0x2e')](_0x41deb1['query'][_0x070e('0x2e')]));_0x4763c6[_0x070e('0x2f')]=_0x4763c6[_0x070e('0x2f')][_0x070e('0x30')]?_0x4763c6['attributes']:_0x497f58['model'];if(!_0x41deb1['query']['hasOwnProperty'](_0x070e('0x31'))){_0x4763c6['limit']=qs[_0x070e('0x18')](_0x41deb1[_0x070e('0x2b')]['limit']);_0x4763c6['offset']=qs[_0x070e('0x32')](_0x41deb1[_0x070e('0x2b')]['offset']);}_0x4763c6['order']=qs[_0x070e('0x33')](_0x41deb1[_0x070e('0x2b')][_0x070e('0x33')]);_0x4763c6[_0x070e('0x34')]=qs[_0x070e('0x2c')](_['pick'](_0x41deb1['query'],_0x497f58[_0x070e('0x2c')]));if(_0x41deb1[_0x070e('0x2b')][_0x070e('0x35')]){_0x4763c6[_0x070e('0x34')]=_[_0x070e('0x36')](_0x4763c6['where'],{'$or':_[_0x070e('0x37')](_0x219e48,function(_0x1927f4){if(_0x1927f4['type'][_0x070e('0x38')]!==_0x070e('0x39')){var _0x4ba6f0={};_0x4ba6f0[_0x1927f4['field']]={'$like':'%'+_0x41deb1['query'][_0x070e('0x35')]+'%'};return _0x4ba6f0;}})});}_0x4763c6=_[_0x070e('0x36')]({},_0x4763c6,_0x41deb1[_0x070e('0x3a')]);var _0x334733={'where':_0x4763c6[_0x070e('0x34')]};return db['Dynamics365Field'][_0x070e('0x17')](_0x334733)[_0x070e('0x20')](function(_0xb53332){_0x374c54['count']=_0xb53332;if(_0x41deb1[_0x070e('0x2b')][_0x070e('0x3b')]){_0x4763c6[_0x070e('0x3c')]=[{'all':!![]}];}return db['Dynamics365Field'][_0x070e('0x3d')](_0x4763c6);})[_0x070e('0x20')](function(_0x4800a9){_0x374c54[_0x070e('0x3e')]=_0x4800a9;return _0x374c54;})['then'](respondWithFilteredResult(_0x1743cc,_0x4763c6))[_0x070e('0x3f')](handleError(_0x1743cc,null));};exports[_0x070e('0x40')]=function(_0x3462d3,_0x30319c){var _0xd03404={'raw':!![],'where':{'id':_0x3462d3[_0x070e('0x41')]['id']}},_0x47b929={};_0x47b929['model']=_['keys'](db[_0x070e('0x27')][_0x070e('0x28')]);_0x47b929[_0x070e('0x2b')]=_['keys'](_0x3462d3[_0x070e('0x2b')]);_0x47b929[_0x070e('0x2c')]=_[_0x070e('0x2d')](_0x47b929[_0x070e('0x29')],_0x47b929['query']);_0xd03404[_0x070e('0x2f')]=_['intersection'](_0x47b929['model'],qs['fields'](_0x3462d3[_0x070e('0x2b')][_0x070e('0x2e')]));_0xd03404[_0x070e('0x2f')]=_0xd03404[_0x070e('0x2f')][_0x070e('0x30')]?_0xd03404['attributes']:_0x47b929[_0x070e('0x29')];if(_0x3462d3['query'][_0x070e('0x3b')]){_0xd03404[_0x070e('0x3c')]=[{'all':!![]}];}_0xd03404=_[_0x070e('0x36')]({},_0xd03404,_0x3462d3['options']);return db['Dynamics365Field'][_0x070e('0x42')](_0xd03404)['then'](handleEntityNotFound(_0x30319c,null))[_0x070e('0x20')](respondWithResult(_0x30319c,null))[_0x070e('0x3f')](handleError(_0x30319c,null));};exports[_0x070e('0x43')]=function(_0x5f5675,_0x7c15f9){return db[_0x070e('0x27')]['create'](_0x5f5675['body'],{})[_0x070e('0x20')](respondWithResult(_0x7c15f9,0xc9))[_0x070e('0x3f')](handleError(_0x7c15f9,null));};exports[_0x070e('0x1f')]=function(_0x1fc7c4,_0x253e11){if(_0x1fc7c4['body']['id']){delete _0x1fc7c4[_0x070e('0x44')]['id'];}return db[_0x070e('0x27')][_0x070e('0x42')]({'where':{'id':_0x1fc7c4[_0x070e('0x41')]['id']}})[_0x070e('0x20')](handleEntityNotFound(_0x253e11,null))[_0x070e('0x20')](saveUpdates(_0x1fc7c4[_0x070e('0x44')],null))[_0x070e('0x20')](respondWithResult(_0x253e11,null))[_0x070e('0x3f')](handleError(_0x253e11,null));};exports[_0x070e('0x21')]=function(_0x210c4d,_0x3be553){return db[_0x070e('0x27')][_0x070e('0x42')]({'where':{'id':_0x210c4d[_0x070e('0x41')]['id']}})['then'](handleEntityNotFound(_0x3be553,null))[_0x070e('0x20')](removeEntity(_0x3be553,null))[_0x070e('0x3f')](handleError(_0x3be553,null));};
\ No newline at end of file
+var _0xa9e0=['fields','length','nolimit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','options','includeAll','include','catch','show','params','find','create','body','update','destroy','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','then','error','stack','send','index','Dynamics365Field','rawAttributes','model','keys','query','filters','attributes','intersection'];(function(_0xa0a8d5,_0x5662bb){var _0x1de145=function(_0x413ec4){while(--_0x413ec4){_0xa0a8d5['push'](_0xa0a8d5['shift']());}};_0x1de145(++_0x5662bb);}(_0xa9e0,0x123));var _0x0a9e=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0xa9e0[_0x19e35c];return _0x3e1fe8;};'use strict';var pdf=require(_0x0a9e('0x0'));var emlformat=require(_0x0a9e('0x1'));var rimraf=require(_0x0a9e('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x0a9e('0x3'));var moment=require('moment');var BPromise=require(_0x0a9e('0x4'));var Mustache=require(_0x0a9e('0x5'));var util=require(_0x0a9e('0x6'));var path=require(_0x0a9e('0x7'));var sox=require(_0x0a9e('0x8'));var csv=require('to-csv');var ejs=require(_0x0a9e('0x9'));var fs=require('fs');var _=require(_0x0a9e('0xa'));var squel=require(_0x0a9e('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x0a9e('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x0a9e('0xd'));var Redis=require(_0x0a9e('0xe'));var authService=require(_0x0a9e('0xf'));var qs=require(_0x0a9e('0x10'));var hardwareService=require(_0x0a9e('0x11'));var logger=require(_0x0a9e('0x12'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x273d4d,_0x36471c){_0x36471c=_0x36471c||0xcc;return function(_0xd5b662){if(_0xd5b662){return _0x273d4d[_0x0a9e('0x13')](_0x36471c);}return _0x273d4d[_0x0a9e('0x14')](_0x36471c)[_0x0a9e('0x15')]();};}function respondWithResult(_0x5db4b0,_0x4283ce){_0x4283ce=_0x4283ce||0xc8;return function(_0x239b12){if(_0x239b12){return _0x5db4b0[_0x0a9e('0x14')](_0x4283ce)[_0x0a9e('0x16')](_0x239b12);}};}function respondWithFilteredResult(_0x44dcfd,_0x4d5611){return function(_0x52a03d){if(_0x52a03d){var _0x22dccb=_0x52a03d[_0x0a9e('0x17')],_0x5d0880=_0x4d5611[_0x0a9e('0x18')],_0x1985b6=_0x4d5611['offset']+_0x4d5611[_0x0a9e('0x19')],_0x519dfd;if(_0x1985b6>=_0x22dccb){_0x1985b6=_0x22dccb;_0x519dfd=0xc8;}else{_0x519dfd=0xce;}_0x44dcfd['status'](_0x519dfd);return _0x44dcfd[_0x0a9e('0x1a')](_0x0a9e('0x1b'),_0x5d0880+'-'+_0x1985b6+'/'+_0x22dccb)[_0x0a9e('0x16')](_0x52a03d);}return null;};}function patchUpdates(_0x205fd6){return function(_0x31b1ca){try{jsonpatch[_0x0a9e('0x1c')](_0x31b1ca,_0x205fd6,!![]);}catch(_0x530eb7){return BPromise[_0x0a9e('0x1d')](_0x530eb7);}return _0x31b1ca[_0x0a9e('0x1e')]();};}function saveUpdates(_0x112016,_0x1c696a){return function(_0x105080){if(_0x105080){return _0x105080['update'](_0x112016)[_0x0a9e('0x1f')](function(_0x155cce){return _0x155cce;});}return null;};}function removeEntity(_0x53682f,_0x20f109){return function(_0x5a09ef){if(_0x5a09ef){return _0x5a09ef['destroy']()[_0x0a9e('0x1f')](function(){_0x53682f[_0x0a9e('0x14')](0xcc)[_0x0a9e('0x15')]();});}};}function handleEntityNotFound(_0x30bae6,_0x4abc77){return function(_0xfb6e48){if(!_0xfb6e48){_0x30bae6[_0x0a9e('0x13')](0x194);}return _0xfb6e48;};}function handleError(_0x3b45bc,_0x4d00e6){_0x4d00e6=_0x4d00e6||0x1f4;return function(_0x370d86){logger[_0x0a9e('0x20')](_0x370d86[_0x0a9e('0x21')]);if(_0x370d86['name']){delete _0x370d86['name'];}_0x3b45bc[_0x0a9e('0x14')](_0x4d00e6)[_0x0a9e('0x22')](_0x370d86);};}exports[_0x0a9e('0x23')]=function(_0x33161b,_0x526cf3){var _0x384319={},_0x479bc4={},_0x45a1e7={'count':0x0,'rows':[]};var _0x5bfb33=db[_0x0a9e('0x24')][_0x0a9e('0x25')];_0x479bc4[_0x0a9e('0x26')]=_[_0x0a9e('0x27')](_0x5bfb33);_0x479bc4[_0x0a9e('0x28')]=_[_0x0a9e('0x27')](_0x33161b[_0x0a9e('0x28')]);_0x479bc4[_0x0a9e('0x29')]=_['intersection'](_0x479bc4[_0x0a9e('0x26')],_0x479bc4[_0x0a9e('0x28')]);_0x384319[_0x0a9e('0x2a')]=_[_0x0a9e('0x2b')](_0x479bc4['model'],qs[_0x0a9e('0x2c')](_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x2c')]));_0x384319[_0x0a9e('0x2a')]=_0x384319[_0x0a9e('0x2a')][_0x0a9e('0x2d')]?_0x384319[_0x0a9e('0x2a')]:_0x479bc4[_0x0a9e('0x26')];if(!_0x33161b[_0x0a9e('0x28')]['hasOwnProperty'](_0x0a9e('0x2e'))){_0x384319['limit']=qs[_0x0a9e('0x19')](_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x19')]);_0x384319[_0x0a9e('0x18')]=qs[_0x0a9e('0x18')](_0x33161b['query'][_0x0a9e('0x18')]);}_0x384319[_0x0a9e('0x2f')]=qs[_0x0a9e('0x30')](_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x30')]);_0x384319[_0x0a9e('0x31')]=qs[_0x0a9e('0x29')](_[_0x0a9e('0x32')](_0x33161b['query'],_0x479bc4[_0x0a9e('0x29')]));if(_0x33161b['query'][_0x0a9e('0x33')]){_0x384319[_0x0a9e('0x31')]=_[_0x0a9e('0x34')](_0x384319[_0x0a9e('0x31')],{'$or':_['map'](_0x5bfb33,function(_0x191e91){if(_0x191e91[_0x0a9e('0x35')][_0x0a9e('0x36')]!==_0x0a9e('0x37')){var _0x4853b1={};_0x4853b1[_0x191e91['field']]={'$like':'%'+_0x33161b[_0x0a9e('0x28')]['filter']+'%'};return _0x4853b1;}})});}_0x384319=_[_0x0a9e('0x34')]({},_0x384319,_0x33161b[_0x0a9e('0x38')]);var _0x381c37={'where':_0x384319[_0x0a9e('0x31')]};return db['Dynamics365Field'][_0x0a9e('0x17')](_0x381c37)[_0x0a9e('0x1f')](function(_0x3cae){_0x45a1e7['count']=_0x3cae;if(_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x39')]){_0x384319[_0x0a9e('0x3a')]=[{'all':!![]}];}return db['Dynamics365Field']['findAll'](_0x384319);})[_0x0a9e('0x1f')](function(_0x40d766){_0x45a1e7['rows']=_0x40d766;return _0x45a1e7;})[_0x0a9e('0x1f')](respondWithFilteredResult(_0x526cf3,_0x384319))[_0x0a9e('0x3b')](handleError(_0x526cf3,null));};exports[_0x0a9e('0x3c')]=function(_0x148f55,_0x4b38d9){var _0x5a594b={'raw':!![],'where':{'id':_0x148f55[_0x0a9e('0x3d')]['id']}},_0x15e37d={};_0x15e37d['model']=_[_0x0a9e('0x27')](db[_0x0a9e('0x24')][_0x0a9e('0x25')]);_0x15e37d['query']=_[_0x0a9e('0x27')](_0x148f55[_0x0a9e('0x28')]);_0x15e37d[_0x0a9e('0x29')]=_[_0x0a9e('0x2b')](_0x15e37d[_0x0a9e('0x26')],_0x15e37d[_0x0a9e('0x28')]);_0x5a594b[_0x0a9e('0x2a')]=_[_0x0a9e('0x2b')](_0x15e37d[_0x0a9e('0x26')],qs[_0x0a9e('0x2c')](_0x148f55[_0x0a9e('0x28')][_0x0a9e('0x2c')]));_0x5a594b[_0x0a9e('0x2a')]=_0x5a594b[_0x0a9e('0x2a')][_0x0a9e('0x2d')]?_0x5a594b['attributes']:_0x15e37d['model'];if(_0x148f55[_0x0a9e('0x28')][_0x0a9e('0x39')]){_0x5a594b[_0x0a9e('0x3a')]=[{'all':!![]}];}_0x5a594b=_[_0x0a9e('0x34')]({},_0x5a594b,_0x148f55[_0x0a9e('0x38')]);return db[_0x0a9e('0x24')][_0x0a9e('0x3e')](_0x5a594b)[_0x0a9e('0x1f')](handleEntityNotFound(_0x4b38d9,null))[_0x0a9e('0x1f')](respondWithResult(_0x4b38d9,null))[_0x0a9e('0x3b')](handleError(_0x4b38d9,null));};exports[_0x0a9e('0x3f')]=function(_0x35ed4a,_0x5026aa){return db[_0x0a9e('0x24')][_0x0a9e('0x3f')](_0x35ed4a[_0x0a9e('0x40')],{})[_0x0a9e('0x1f')](respondWithResult(_0x5026aa,0xc9))[_0x0a9e('0x3b')](handleError(_0x5026aa,null));};exports[_0x0a9e('0x41')]=function(_0x21eb86,_0x44dd99){if(_0x21eb86['body']['id']){delete _0x21eb86[_0x0a9e('0x40')]['id'];}return db['Dynamics365Field'][_0x0a9e('0x3e')]({'where':{'id':_0x21eb86[_0x0a9e('0x3d')]['id']}})[_0x0a9e('0x1f')](handleEntityNotFound(_0x44dd99,null))['then'](saveUpdates(_0x21eb86[_0x0a9e('0x40')],null))[_0x0a9e('0x1f')](respondWithResult(_0x44dd99,null))[_0x0a9e('0x3b')](handleError(_0x44dd99,null));};exports[_0x0a9e('0x42')]=function(_0x45c845,_0x37be73){return db[_0x0a9e('0x24')]['find']({'where':{'id':_0x45c845[_0x0a9e('0x3d')]['id']}})[_0x0a9e('0x1f')](handleEntityNotFound(_0x37be73,null))[_0x0a9e('0x1f')](removeEntity(_0x37be73,null))[_0x0a9e('0x3b')](handleError(_0x37be73,null));};
\ No newline at end of file
index eac3c95..cd63da6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['int_dynamics365_fields','idField','lodash','util','../../config/logger','moment','bluebird','path','rimraf','../../config/environment','./intDynamics365Field.attributes','exports','Dynamics365Field'];(function(_0x4a89e6,_0x3a4e77){var _0x1b9e18=function(_0x1d4050){while(--_0x1d4050){_0x4a89e6['push'](_0x4a89e6['shift']());}};_0x1b9e18(++_0x3a4e77);}(_0x7a54,0x106));var _0x47a5=function(_0x20fba0,_0x27414c){_0x20fba0=_0x20fba0-0x0;var _0xfd1471=_0x7a54[_0x20fba0];return _0xfd1471;};'use strict';var _=require(_0x47a5('0x0'));var util=require(_0x47a5('0x1'));var logger=require(_0x47a5('0x2'))('api');var moment=require(_0x47a5('0x3'));var BPromise=require(_0x47a5('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x47a5('0x5'));var rimraf=require(_0x47a5('0x6'));var config=require(_0x47a5('0x7'));var attributes=require(_0x47a5('0x8'));module[_0x47a5('0x9')]=function(_0x545a97,_0x3d5629){return _0x545a97['define'](_0x47a5('0xa'),attributes,{'tableName':_0x47a5('0xb'),'paranoid':![],'indexes':[{'name':'dynamics365_unique_index','fields':[_0x47a5('0xc'),'FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xb10b=['api','moment','request-promise','path','rimraf','../../config/environment','./intDynamics365Field.attributes','exports','define','int_dynamics365_fields','dynamics365_unique_index','idField','FieldId','lodash','../../config/logger'];(function(_0x1afea9,_0x1d9e58){var _0x340032=function(_0x4e4946){while(--_0x4e4946){_0x1afea9['push'](_0x1afea9['shift']());}};_0x340032(++_0x1d9e58);}(_0xb10b,0x12a));var _0xbb10=function(_0x24f22d,_0x1f6649){_0x24f22d=_0x24f22d-0x0;var _0x321679=_0xb10b[_0x24f22d];return _0x321679;};'use strict';var _=require(_0xbb10('0x0'));var util=require('util');var logger=require(_0xbb10('0x1'))(_0xbb10('0x2'));var moment=require(_0xbb10('0x3'));var BPromise=require('bluebird');var rp=require(_0xbb10('0x4'));var fs=require('fs');var path=require(_0xbb10('0x5'));var rimraf=require(_0xbb10('0x6'));var config=require(_0xbb10('0x7'));var attributes=require(_0xbb10('0x8'));module[_0xbb10('0x9')]=function(_0x481979,_0x328583){return _0x481979[_0xbb10('0xa')]('Dynamics365Field',attributes,{'tableName':_0xbb10('0xb'),'paranoid':![],'indexes':[{'name':_0xbb10('0xc'),'fields':[_0xbb10('0xd'),_0xbb10('0xe')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index dbc773e..9eb5143 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3ece=['../../config/logger','../../config/environment','client','http','request','then','info','Dynamics365Field,\x20%s,\x20%s','request\x20sent','debug','Dynamics365Field,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','ioredis','../../config/utils'];(function(_0x1155bb,_0x578a0c){var _0x2ac9af=function(_0x44df0c){while(--_0x44df0c){_0x1155bb['push'](_0x1155bb['shift']());}};_0x2ac9af(++_0x578a0c);}(_0x3ece,0x10e));var _0xe3ec=function(_0x343047,_0xf6dfcb){_0x343047=_0x343047-0x0;var _0x416623=_0x3ece[_0x343047];return _0x416623;};'use strict';var _=require(_0xe3ec('0x0'));var util=require(_0xe3ec('0x1'));var moment=require(_0xe3ec('0x2'));var BPromise=require(_0xe3ec('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xe3ec('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0xe3ec('0x5'));var logger=require(_0xe3ec('0x6'))('rpc');var config=require(_0xe3ec('0x7'));var jayson=require('jayson/promise');var client=jayson[_0xe3ec('0x8')][_0xe3ec('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x6eefce,_0x582839,_0x11d048){return new BPromise(function(_0x2c1309,_0x4f3a9c){return client[_0xe3ec('0xa')](_0x6eefce,_0x11d048)[_0xe3ec('0xb')](function(_0x24140c){logger[_0xe3ec('0xc')](_0xe3ec('0xd'),_0x582839,_0xe3ec('0xe'));logger[_0xe3ec('0xf')](_0xe3ec('0x10'),_0x582839,'request\x20sent',JSON[_0xe3ec('0x11')](_0x24140c));if(_0x24140c[_0xe3ec('0x12')]){if(_0x24140c[_0xe3ec('0x12')][_0xe3ec('0x13')]===0x1f4){logger[_0xe3ec('0x12')](_0xe3ec('0xd'),_0x582839,_0x24140c[_0xe3ec('0x12')]['message']);return _0x4f3a9c(_0x24140c[_0xe3ec('0x12')][_0xe3ec('0x14')]);}logger['error'](_0xe3ec('0xd'),_0x582839,_0x24140c[_0xe3ec('0x12')][_0xe3ec('0x14')]);return _0x2c1309(_0x24140c[_0xe3ec('0x12')][_0xe3ec('0x14')]);}else{logger[_0xe3ec('0xc')]('Dynamics365Field,\x20%s,\x20%s',_0x582839,_0xe3ec('0xe'));_0x2c1309(_0x24140c[_0xe3ec('0x15')][_0xe3ec('0x14')]);}})[_0xe3ec('0x16')](function(_0x5b5ab5){logger[_0xe3ec('0x12')](_0xe3ec('0xd'),_0x582839,_0x5b5ab5);_0x4f3a9c(_0x5b5ab5);});});}
\ No newline at end of file
+var _0xfbe6=['error','code','message','result','catch','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','Dynamics365Field,\x20%s,\x20%s','request\x20sent','debug','Dynamics365Field,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x4907de,_0x5bbdc6){var _0x482054=function(_0x39ecf6){while(--_0x39ecf6){_0x4907de['push'](_0x4907de['shift']());}};_0x482054(++_0x5bbdc6);}(_0xfbe6,0x6d));var _0x6fbe=function(_0x472d6f,_0x4d598d){_0x472d6f=_0x472d6f-0x0;var _0x26b18b=_0xfbe6[_0x472d6f];return _0x26b18b;};'use strict';var _=require(_0x6fbe('0x0'));var util=require(_0x6fbe('0x1'));var moment=require(_0x6fbe('0x2'));var BPromise=require('bluebird');var rs=require(_0x6fbe('0x3'));var fs=require('fs');var Redis=require(_0x6fbe('0x4'));var db=require(_0x6fbe('0x5'))['db'];var utils=require(_0x6fbe('0x6'));var logger=require(_0x6fbe('0x7'))(_0x6fbe('0x8'));var config=require(_0x6fbe('0x9'));var jayson=require(_0x6fbe('0xa'));var client=jayson[_0x6fbe('0xb')][_0x6fbe('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x533992,_0x1b4712,_0x1be794){return new BPromise(function(_0x439feb,_0x5532b3){return client[_0x6fbe('0xd')](_0x533992,_0x1be794)[_0x6fbe('0xe')](function(_0x348ba5){logger[_0x6fbe('0xf')](_0x6fbe('0x10'),_0x1b4712,_0x6fbe('0x11'));logger[_0x6fbe('0x12')](_0x6fbe('0x13'),_0x1b4712,_0x6fbe('0x11'),JSON[_0x6fbe('0x14')](_0x348ba5));if(_0x348ba5['error']){if(_0x348ba5[_0x6fbe('0x15')][_0x6fbe('0x16')]===0x1f4){logger[_0x6fbe('0x15')](_0x6fbe('0x10'),_0x1b4712,_0x348ba5[_0x6fbe('0x15')][_0x6fbe('0x17')]);return _0x5532b3(_0x348ba5[_0x6fbe('0x15')][_0x6fbe('0x17')]);}logger['error']('Dynamics365Field,\x20%s,\x20%s',_0x1b4712,_0x348ba5[_0x6fbe('0x15')][_0x6fbe('0x17')]);return _0x439feb(_0x348ba5[_0x6fbe('0x15')]['message']);}else{logger[_0x6fbe('0xf')](_0x6fbe('0x10'),_0x1b4712,_0x6fbe('0x11'));_0x439feb(_0x348ba5[_0x6fbe('0x18')][_0x6fbe('0x17')]);}})[_0x6fbe('0x19')](function(_0x3b9bc0){logger[_0x6fbe('0x15')]('Dynamics365Field,\x20%s,\x20%s',_0x1b4712,_0x3b9bc0);_0x5532b3(_0x3b9bc0);});});}
\ No newline at end of file
index 41aee75..f7df6e5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9fe9=['isAuthenticated','index','show','/:id/configurations','/:id/fields','getFields','post','create','addConfiguration','put','/:id','delete','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intFreshdeskAccount.controller','get'];(function(_0x52544f,_0x251b08){var _0x1248cb=function(_0x429bae){while(--_0x429bae){_0x52544f['push'](_0x52544f['shift']());}};_0x1248cb(++_0x251b08);}(_0x9fe9,0xce));var _0x99fe=function(_0x4210ed,_0x1ab215){_0x4210ed=_0x4210ed-0x0;var _0x394e18=_0x9fe9[_0x4210ed];return _0x394e18;};'use strict';var multer=require(_0x99fe('0x0'));var util=require(_0x99fe('0x1'));var path=require(_0x99fe('0x2'));var timeout=require('connect-timeout');var express=require(_0x99fe('0x3'));var router=express[_0x99fe('0x4')]();var auth=require(_0x99fe('0x5'));var interaction=require(_0x99fe('0x6'));var config=require(_0x99fe('0x7'));var controller=require(_0x99fe('0x8'));router[_0x99fe('0x9')]('/',auth[_0x99fe('0xa')](),controller[_0x99fe('0xb')]);router['get']('/:id',auth[_0x99fe('0xa')](),controller[_0x99fe('0xc')]);router[_0x99fe('0x9')](_0x99fe('0xd'),auth[_0x99fe('0xa')](),controller['getConfigurations']);router['get'](_0x99fe('0xe'),auth['isAuthenticated'](),controller[_0x99fe('0xf')]);router[_0x99fe('0x10')]('/',auth[_0x99fe('0xa')](),controller[_0x99fe('0x11')]);router[_0x99fe('0x10')](_0x99fe('0xd'),auth[_0x99fe('0xa')](),controller[_0x99fe('0x12')]);router[_0x99fe('0x13')](_0x99fe('0x14'),auth[_0x99fe('0xa')](),controller['update']);router[_0x99fe('0x15')](_0x99fe('0x14'),auth['isAuthenticated'](),controller[_0x99fe('0x16')]);module[_0x99fe('0x17')]=router;
\ No newline at end of file
+var _0x3216=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intFreshdeskAccount.controller','get','isAuthenticated','index','/:id','show','/:id/configurations','post','addConfiguration','put','update','delete','destroy','multer','util','path'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0x3216,0x89));var _0x6321=function(_0x542790,_0x43552b){_0x542790=_0x542790-0x0;var _0x57bd5f=_0x3216[_0x542790];return _0x57bd5f;};'use strict';var multer=require(_0x6321('0x0'));var util=require(_0x6321('0x1'));var path=require(_0x6321('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x6321('0x3')]();var auth=require(_0x6321('0x4'));var interaction=require(_0x6321('0x5'));var config=require(_0x6321('0x6'));var controller=require(_0x6321('0x7'));router[_0x6321('0x8')]('/',auth[_0x6321('0x9')](),controller[_0x6321('0xa')]);router['get'](_0x6321('0xb'),auth[_0x6321('0x9')](),controller[_0x6321('0xc')]);router[_0x6321('0x8')](_0x6321('0xd'),auth[_0x6321('0x9')](),controller['getConfigurations']);router['get']('/:id/fields',auth[_0x6321('0x9')](),controller['getFields']);router[_0x6321('0xe')]('/',auth[_0x6321('0x9')](),controller['create']);router[_0x6321('0xe')](_0x6321('0xd'),auth[_0x6321('0x9')](),controller[_0x6321('0xf')]);router[_0x6321('0x10')]('/:id',auth[_0x6321('0x9')](),controller[_0x6321('0x11')]);router[_0x6321('0x12')](_0x6321('0xb'),auth[_0x6321('0x9')](),controller[_0x6321('0x13')]);module['exports']=router;
\ No newline at end of file
index c534da7..c82c98c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa918=['exports','STRING','username','remoteUri','sequelize'];(function(_0x93a34d,_0x25feee){var _0x567363=function(_0x4e7384){while(--_0x4e7384){_0x93a34d['push'](_0x93a34d['shift']());}};_0x567363(++_0x25feee);}(_0xa918,0x11c));var _0x8a91=function(_0x1e98c3,_0x4df38b){_0x1e98c3=_0x1e98c3-0x0;var _0x1eac8e=_0xa918[_0x1e98c3];return _0x1eac8e;};'use strict';var Sequelize=require(_0x8a91('0x0'));module[_0x8a91('0x1')]={'name':{'type':Sequelize[_0x8a91('0x2')]},'description':{'type':Sequelize[_0x8a91('0x2')]},'username':{'type':Sequelize[_0x8a91('0x2')],'unique':_0x8a91('0x3')},'apiKey':{'type':Sequelize['STRING']},'remoteUri':{'type':Sequelize[_0x8a91('0x2')],'unique':_0x8a91('0x4')},'serverUrl':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xe170=['exports','STRING','remoteUri','sequelize'];(function(_0x29938d,_0x4b5e7c){var _0x1ef03f=function(_0x445147){while(--_0x445147){_0x29938d['push'](_0x29938d['shift']());}};_0x1ef03f(++_0x4b5e7c);}(_0xe170,0x1b3));var _0x0e17=function(_0xbf1875,_0x34b144){_0xbf1875=_0xbf1875-0x0;var _0x2e598b=_0xe170[_0xbf1875];return _0x2e598b;};'use strict';var Sequelize=require(_0x0e17('0x0'));module[_0x0e17('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize['STRING'],'unique':'username'},'apiKey':{'type':Sequelize[_0x0e17('0x2')]},'remoteUri':{'type':Sequelize[_0x0e17('0x2')],'unique':_0x0e17('0x3')},'serverUrl':{'type':Sequelize[_0x0e17('0x2')]}};
\ No newline at end of file
index 913854e..0627e62 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x335a=['error','code','message','result','catch','sendStatus','end','json','count','offset','limit','status','Content-Range','apply','reject','save','update','destroy','stack','name','index','FreshdeskAccount','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','include','findAll','rows','show','params','find','create','body','getConfigurations','findOne','FreshdeskConfiguration','addConfiguration','AccountId','Subjects','getSubjects','channel','Descriptions','getDescriptions','FreshdeskField','getFields','remoteUri','slice','substring','lastIndexOf','format','Basic\x20%s','%s:X','apiKey','toString','base64','requester','subject','agent','description','ticket_type','company','remove','includes','default','custom_text','choices','capitalize','statusCode','getFields,\x20%s,\x20%s,\x20%s','send','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','to-csv','lodash','squel','crypto','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','http','test','request','then','FreshdeskAccount,\x20%s,\x20%s','request\x20sent','debug','FreshdeskAccount,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x4ff9c1,_0x57d31b){var _0x4bd1a7=function(_0x508013){while(--_0x508013){_0x4ff9c1['push'](_0x4ff9c1['shift']());}};_0x4bd1a7(++_0x57d31b);}(_0x335a,0x150));var _0xa335=function(_0x2e9693,_0x5dca3f){_0x2e9693=_0x2e9693-0x0;var _0x219b5a=_0x335a[_0x2e9693];return _0x219b5a;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xa335('0x0'));var zipdir=require(_0xa335('0x1'));var jsonpatch=require(_0xa335('0x2'));var rp=require(_0xa335('0x3'));var moment=require(_0xa335('0x4'));var BPromise=require(_0xa335('0x5'));var Mustache=require(_0xa335('0x6'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0xa335('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xa335('0x8'));var squel=require(_0xa335('0x9'));var crypto=require(_0xa335('0xa'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xa335('0x7'));var querystring=require(_0xa335('0xb'));var Papa=require(_0xa335('0xc'));var Redis=require(_0xa335('0xd'));var authService=require(_0xa335('0xe'));var qs=require(_0xa335('0xf'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xa335('0x10'))(_0xa335('0x11'));var utils=require(_0xa335('0x12'));var config=require(_0xa335('0x13'));var db=require(_0xa335('0x14'))['db'];var integrations=require(_0xa335('0x15'));var jayson=require(_0xa335('0x16'));var client=jayson[_0xa335('0x17')][_0xa335('0x18')]({'port':0x232a});function checkPasswordPattern(_0x217cb9,_0x56c376,_0x285d0e){if(_0x285d0e){var _0x51daa9=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x51daa9[_0xa335('0x19')](_0x56c376)){return _0x217cb9;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x217cb9;}}function respondWithRpcPromise(_0x94421e,_0x539ec5,_0x292b29,_0x5c9acf){return new BPromise(function(_0x43f080,_0x4d7824){var _0x56608b=_0x5c9acf||client;return _0x56608b[_0xa335('0x1a')](_0x94421e,_0x292b29)[_0xa335('0x1b')](function(_0x2f2f12){logger['info'](_0xa335('0x1c'),_0x539ec5,_0xa335('0x1d'));logger[_0xa335('0x1e')](_0xa335('0x1f'),_0x539ec5,_0xa335('0x1d'),JSON[_0xa335('0x20')](_0x2f2f12));if(_0x2f2f12[_0xa335('0x21')]){if(_0x2f2f12[_0xa335('0x21')][_0xa335('0x22')]===0x1f4){logger[_0xa335('0x21')]('FreshdeskAccount,\x20%s,\x20%s',_0x539ec5,_0x2f2f12['error']['message']);return _0x4d7824(_0x2f2f12['error'][_0xa335('0x23')]);}logger['error']('FreshdeskAccount,\x20%s,\x20%s',_0x539ec5,_0x2f2f12[_0xa335('0x21')][_0xa335('0x23')]);return _0x43f080(_0x2f2f12[_0xa335('0x21')]['message']);}else{logger['info']('FreshdeskAccount,\x20%s,\x20%s',_0x539ec5,_0xa335('0x1d'));_0x43f080(_0x2f2f12[_0xa335('0x24')][_0xa335('0x23')]);}})[_0xa335('0x25')](function(_0x2f593f){logger[_0xa335('0x21')](_0xa335('0x1c'),_0x539ec5,_0x2f593f);_0x4d7824(_0x2f593f);});});}function respondWithStatusCode(_0x552e61,_0x4f7202){_0x4f7202=_0x4f7202||0xcc;return function(_0x5c3653){if(_0x5c3653){return _0x552e61[_0xa335('0x26')](_0x4f7202);}return _0x552e61['status'](_0x4f7202)[_0xa335('0x27')]();};}function respondWithResult(_0x3cb9f4,_0x26c081){_0x26c081=_0x26c081||0xc8;return function(_0x4dcac4){if(_0x4dcac4){return _0x3cb9f4['status'](_0x26c081)[_0xa335('0x28')](_0x4dcac4);}};}function respondWithFilteredResult(_0x1f2653,_0x34d041){return function(_0x3ae893){if(_0x3ae893){var _0x16f104=_0x3ae893[_0xa335('0x29')],_0x1231db=_0x34d041[_0xa335('0x2a')],_0x5a7d84=_0x34d041[_0xa335('0x2a')]+_0x34d041[_0xa335('0x2b')],_0x1f76c5;if(_0x5a7d84>=_0x16f104){_0x5a7d84=_0x16f104;_0x1f76c5=0xc8;}else{_0x1f76c5=0xce;}_0x1f2653[_0xa335('0x2c')](_0x1f76c5);return _0x1f2653['set'](_0xa335('0x2d'),_0x1231db+'-'+_0x5a7d84+'/'+_0x16f104)[_0xa335('0x28')](_0x3ae893);}return null;};}function patchUpdates(_0x4b5634){return function(_0x57a40b){try{jsonpatch[_0xa335('0x2e')](_0x57a40b,_0x4b5634,!![]);}catch(_0x1522e8){return BPromise[_0xa335('0x2f')](_0x1522e8);}return _0x57a40b[_0xa335('0x30')]();};}function saveUpdates(_0x54b01e,_0x397e0f){return function(_0x1e9cfe){if(_0x1e9cfe){return _0x1e9cfe[_0xa335('0x31')](_0x54b01e)['then'](function(_0x5aa23b){return _0x5aa23b;});}return null;};}function removeEntity(_0x4dbcf2,_0x9191ab){return function(_0x4cd46e){if(_0x4cd46e){return _0x4cd46e[_0xa335('0x32')]()[_0xa335('0x1b')](function(){_0x4dbcf2[_0xa335('0x2c')](0xcc)[_0xa335('0x27')]();});}};}function handleEntityNotFound(_0x44f196,_0x3119ce){return function(_0x749323){if(!_0x749323){_0x44f196[_0xa335('0x26')](0x194);}return _0x749323;};}function handleError(_0x132f9c,_0x51a0c3){_0x51a0c3=_0x51a0c3||0x1f4;return function(_0x154f8e){logger[_0xa335('0x21')](_0x154f8e[_0xa335('0x33')]);if(_0x154f8e[_0xa335('0x34')]){delete _0x154f8e['name'];}_0x132f9c['status'](_0x51a0c3)['send'](_0x154f8e);};}exports[_0xa335('0x35')]=function(_0x578ecc,_0x2b125d){var _0x4a3eb1={},_0x45ca10={},_0x30a11d={'count':0x0,'rows':[]};var _0x2928b5=db[_0xa335('0x36')][_0xa335('0x37')];_0x45ca10[_0xa335('0x38')]=_['keys'](_0x2928b5);_0x45ca10[_0xa335('0x39')]=_[_0xa335('0x3a')](_0x578ecc[_0xa335('0x39')]);_0x45ca10[_0xa335('0x3b')]=_[_0xa335('0x3c')](_0x45ca10[_0xa335('0x38')],_0x45ca10['query']);_0x4a3eb1[_0xa335('0x3d')]=_[_0xa335('0x3c')](_0x45ca10[_0xa335('0x38')],qs[_0xa335('0x3e')](_0x578ecc[_0xa335('0x39')][_0xa335('0x3e')]));_0x4a3eb1['attributes']=_0x4a3eb1[_0xa335('0x3d')][_0xa335('0x3f')]?_0x4a3eb1['attributes']:_0x45ca10['model'];if(!_0x578ecc['query'][_0xa335('0x40')](_0xa335('0x41'))){_0x4a3eb1[_0xa335('0x2b')]=qs[_0xa335('0x2b')](_0x578ecc[_0xa335('0x39')][_0xa335('0x2b')]);_0x4a3eb1[_0xa335('0x2a')]=qs['offset'](_0x578ecc[_0xa335('0x39')]['offset']);}_0x4a3eb1[_0xa335('0x42')]=qs[_0xa335('0x43')](_0x578ecc[_0xa335('0x39')][_0xa335('0x43')]);_0x4a3eb1[_0xa335('0x44')]=qs[_0xa335('0x3b')](_[_0xa335('0x45')](_0x578ecc[_0xa335('0x39')],_0x45ca10[_0xa335('0x3b')]));if(_0x578ecc[_0xa335('0x39')][_0xa335('0x46')]){_0x4a3eb1[_0xa335('0x44')]=_[_0xa335('0x47')](_0x4a3eb1['where'],{'$or':_[_0xa335('0x48')](_0x2928b5,function(_0x24613c){if(_0x24613c[_0xa335('0x49')][_0xa335('0x4a')]!==_0xa335('0x4b')){var _0x52fb90={};_0x52fb90[_0x24613c[_0xa335('0x4c')]]={'$like':'%'+_0x578ecc[_0xa335('0x39')][_0xa335('0x46')]+'%'};return _0x52fb90;}})});}_0x4a3eb1=_[_0xa335('0x47')]({},_0x4a3eb1,_0x578ecc[_0xa335('0x4d')]);var _0x758050={'where':_0x4a3eb1[_0xa335('0x44')]};return db['FreshdeskAccount'][_0xa335('0x29')](_0x758050)[_0xa335('0x1b')](function(_0xb411ea){_0x30a11d['count']=_0xb411ea;if(_0x578ecc['query']['includeAll']){_0x4a3eb1[_0xa335('0x4e')]=[{'all':!![]}];}return db[_0xa335('0x36')][_0xa335('0x4f')](_0x4a3eb1);})['then'](function(_0xc09857){_0x30a11d[_0xa335('0x50')]=_0xc09857;return _0x30a11d;})[_0xa335('0x1b')](respondWithFilteredResult(_0x2b125d,_0x4a3eb1))[_0xa335('0x25')](handleError(_0x2b125d,null));};exports[_0xa335('0x51')]=function(_0x553bb6,_0x3ae0e0){var _0x58a02e={'raw':![],'where':{'id':_0x553bb6[_0xa335('0x52')]['id']}},_0x3f1c2d={};_0x3f1c2d[_0xa335('0x38')]=_[_0xa335('0x3a')](db[_0xa335('0x36')][_0xa335('0x37')]);_0x3f1c2d[_0xa335('0x39')]=_[_0xa335('0x3a')](_0x553bb6['query']);_0x3f1c2d[_0xa335('0x3b')]=_[_0xa335('0x3c')](_0x3f1c2d[_0xa335('0x38')],_0x3f1c2d['query']);_0x58a02e[_0xa335('0x3d')]=_['intersection'](_0x3f1c2d['model'],qs[_0xa335('0x3e')](_0x553bb6[_0xa335('0x39')][_0xa335('0x3e')]));_0x58a02e[_0xa335('0x3d')]=_0x58a02e['attributes'][_0xa335('0x3f')]?_0x58a02e[_0xa335('0x3d')]:_0x3f1c2d['model'];if(_0x553bb6[_0xa335('0x39')]['includeAll']){_0x58a02e[_0xa335('0x4e')]=[{'all':!![]}];}_0x58a02e=_[_0xa335('0x47')]({},_0x58a02e,_0x553bb6[_0xa335('0x4d')]);return db[_0xa335('0x36')][_0xa335('0x53')](_0x58a02e)[_0xa335('0x1b')](handleEntityNotFound(_0x3ae0e0,null))[_0xa335('0x1b')](respondWithResult(_0x3ae0e0,null))['catch'](handleError(_0x3ae0e0,null));};exports[_0xa335('0x54')]=function(_0x4d540f,_0x2d6e89){return db[_0xa335('0x36')]['create'](_0x4d540f[_0xa335('0x55')],{})[_0xa335('0x1b')](respondWithResult(_0x2d6e89,0xc9))[_0xa335('0x25')](handleError(_0x2d6e89,null));};exports[_0xa335('0x31')]=function(_0x2493b8,_0x209636){if(_0x2493b8[_0xa335('0x55')]['id']){delete _0x2493b8[_0xa335('0x55')]['id'];}return db['FreshdeskAccount'][_0xa335('0x53')]({'where':{'id':_0x2493b8[_0xa335('0x52')]['id']}})['then'](handleEntityNotFound(_0x209636,null))[_0xa335('0x1b')](saveUpdates(_0x2493b8[_0xa335('0x55')],null))['then'](respondWithResult(_0x209636,null))['catch'](handleError(_0x209636,null));};exports[_0xa335('0x32')]=function(_0x20f539,_0x712df){return db[_0xa335('0x36')]['find']({'where':{'id':_0x20f539[_0xa335('0x52')]['id']}})[_0xa335('0x1b')](handleEntityNotFound(_0x712df,null))[_0xa335('0x1b')](removeEntity(_0x712df,null))[_0xa335('0x25')](handleError(_0x712df,null));};exports[_0xa335('0x56')]=function(_0x1485fc,_0x5b0145,_0x57591b){var _0x134256={};var _0x277ecb={};var _0x6e17a8;var _0x3ce8d5;return db[_0xa335('0x36')][_0xa335('0x57')]({'where':{'id':_0x1485fc[_0xa335('0x52')]['id']}})['then'](handleEntityNotFound(_0x5b0145,null))['then'](function(_0x29fa55){if(_0x29fa55){_0x6e17a8=_0x29fa55;_0x277ecb[_0xa335('0x38')]=_[_0xa335('0x3a')](db[_0xa335('0x58')][_0xa335('0x37')]);_0x277ecb[_0xa335('0x39')]=_[_0xa335('0x3a')](_0x1485fc[_0xa335('0x39')]);_0x277ecb[_0xa335('0x3b')]=_[_0xa335('0x3c')](_0x277ecb[_0xa335('0x38')],_0x277ecb[_0xa335('0x39')]);_0x134256[_0xa335('0x3d')]=_[_0xa335('0x3c')](_0x277ecb['model'],qs[_0xa335('0x3e')](_0x1485fc['query']['fields']));_0x134256[_0xa335('0x3d')]=_0x134256[_0xa335('0x3d')][_0xa335('0x3f')]?_0x134256['attributes']:_0x277ecb[_0xa335('0x38')];_0x134256[_0xa335('0x42')]=qs[_0xa335('0x43')](_0x1485fc['query'][_0xa335('0x43')]);_0x134256[_0xa335('0x44')]=qs[_0xa335('0x3b')](_[_0xa335('0x45')](_0x1485fc[_0xa335('0x39')],_0x277ecb[_0xa335('0x3b')]));if(_0x1485fc[_0xa335('0x39')][_0xa335('0x46')]){_0x134256[_0xa335('0x44')]=_[_0xa335('0x47')](_0x134256[_0xa335('0x44')],{'$or':_[_0xa335('0x48')](_0x134256[_0xa335('0x3d')],function(_0x1a6619){var _0x25d451={};_0x25d451[_0x1a6619]={'$like':'%'+_0x1485fc[_0xa335('0x39')][_0xa335('0x46')]+'%'};return _0x25d451;})});}_0x134256=_[_0xa335('0x47')]({},_0x134256,_0x1485fc[_0xa335('0x4d')]);return _0x6e17a8[_0xa335('0x56')](_0x134256);}})[_0xa335('0x1b')](function(_0x18aa9d){if(_0x18aa9d){_0x3ce8d5=_0x18aa9d[_0xa335('0x3f')];if(!_0x1485fc[_0xa335('0x39')][_0xa335('0x40')](_0xa335('0x41'))){_0x134256['limit']=qs['limit'](_0x1485fc['query'][_0xa335('0x2b')]);_0x134256['offset']=qs[_0xa335('0x2a')](_0x1485fc['query'][_0xa335('0x2a')]);}return _0x6e17a8[_0xa335('0x56')](_0x134256);}})[_0xa335('0x1b')](function(_0x2689d9){if(_0x2689d9){return _0x2689d9?{'count':_0x3ce8d5,'rows':_0x2689d9}:null;}})[_0xa335('0x1b')](respondWithResult(_0x5b0145,null))['catch'](handleError(_0x5b0145,null));};exports[_0xa335('0x59')]=function(_0x4eee25,_0x3264ec,_0x889e07){if(_0x4eee25[_0xa335('0x55')]['id']){delete _0x4eee25[_0xa335('0x55')]['id'];}return db[_0xa335('0x36')]['findOne']({'where':{'id':_0x4eee25[_0xa335('0x52')]['id']}})[_0xa335('0x1b')](handleEntityNotFound(_0x3264ec,null))['then'](function(_0x617e79){if(_0x617e79){_0x4eee25[_0xa335('0x55')][_0xa335('0x5a')]=_0x617e79['id'];_0x4eee25['body'][_0xa335('0x5b')]=integrations[_0xa335('0x5c')](_0x4eee25[_0xa335('0x55')][_0xa335('0x5d')],_0x4eee25['body'][_0xa335('0x49')]);_0x4eee25[_0xa335('0x55')][_0xa335('0x5e')]=integrations[_0xa335('0x5f')](_0x4eee25['body'][_0xa335('0x5d')],_0x4eee25[_0xa335('0x55')]['type']);return db[_0xa335('0x58')][_0xa335('0x54')](_0x4eee25['body'],{'include':[{'model':db[_0xa335('0x60')],'as':_0xa335('0x5b')},{'model':db[_0xa335('0x60')],'as':_0xa335('0x5e')}]});}return null;})[_0xa335('0x1b')](respondWithResult(_0x3264ec,null))[_0xa335('0x25')](handleError(_0x3264ec,null));};exports[_0xa335('0x61')]=function(_0x40c0cc,_0x9d7e0c,_0x2eabbc){var _0x40f0cf='';return db[_0xa335('0x36')]['findOne']({'where':{'id':_0x40c0cc[_0xa335('0x52')]['id']},'attributes':['id','remoteUri','apiKey']})[_0xa335('0x1b')](handleEntityNotFound(_0x9d7e0c,null))[_0xa335('0x1b')](function(_0x307e41){if(_0x307e41){_0x40f0cf=_0x307e41[_0xa335('0x62')];var _0x4b6fb6=_0x40f0cf[_0xa335('0x63')](-0x1);if(_0x4b6fb6==='/'){_0x40f0cf=_0x40f0cf[_0xa335('0x64')](0x0,_0x40f0cf[_0xa335('0x65')](_0x4b6fb6));}return rp({'method':'GET','uri':util['format']('%s/%s',_0x40f0cf,'api/v2/ticket_fields'),'headers':{'Authorization':util[_0xa335('0x66')](_0xa335('0x67'),new Buffer(util[_0xa335('0x66')](_0xa335('0x68'),_0x307e41[_0xa335('0x69')]))[_0xa335('0x6a')](_0xa335('0x6b')))},'json':!![]});}})[_0xa335('0x1b')](function(_0x17aea6){if(_0x17aea6){var _0x5d76c0=[_0xa335('0x6c'),_0xa335('0x6d'),_0xa335('0x6e'),_0xa335('0x6f'),_0xa335('0x2c'),'priority','group','source',_0xa335('0x70'),'group',_0xa335('0x71')];_[_0xa335('0x72')](_0x17aea6,function(_0x3254ee){return _0x5d76c0[_0xa335('0x73')](_0x3254ee[_0xa335('0x34')])||!_0x3254ee[_0xa335('0x74')]&&_0x3254ee[_0xa335('0x49')]!==_0xa335('0x75')&&_0x3254ee['type']!=='custom_dropdown';});return{'count':_0x17aea6[_0xa335('0x3f')],'rows':_[_0xa335('0x48')](_0x17aea6,function(_0x331990){return{'id':_0x331990['name'],'name':_0x331990['label'],'custom':!_0x331990['default'],'options':_0x331990[_0xa335('0x76')]?_[_0xa335('0x48')](_0x331990[_0xa335('0x76')],function(_0x477635){return{'name':_[_0xa335('0x77')](_0x477635),'value':_0x477635};}):[]};})};}})['then'](respondWithResult(_0x9d7e0c,null))[_0xa335('0x25')](function(_0x43222c){var _0x43eb02=_0x40c0cc[_0xa335('0x39')][_0xa335('0x19')]?0x1f4:_0x43222c[_0xa335('0x78')]||0x1f4;logger['error'](_0xa335('0x79'),'getFields',_0x43eb02,JSON[_0xa335('0x20')](_0x43222c));delete _0x43222c[_0xa335('0x34')];if(_0x43eb02===0x191){_0x43eb02=0x190;}_0x9d7e0c['status'](_0x43eb02)[_0xa335('0x7a')](_0x40c0cc[_0xa335('0x39')][_0xa335('0x19')]?{'message':'Wrong\x20credentials','statusCode':_0x43222c[_0xa335('0x78')]}:_0x43222c);});};
\ No newline at end of file
+var _0x309e=['json','count','offset','limit','set','apply','update','destroy','then','stack','name','send','index','model','keys','query','intersection','fields','attributes','hasOwnProperty','order','sort','where','filters','pick','filter','merge','map','type','key','VIRTUAL','options','FreshdeskAccount','includeAll','include','findAll','show','params','length','create','body','find','getConfigurations','findOne','FreshdeskConfiguration','rawAttributes','addConfiguration','AccountId','Subjects','getSubjects','Descriptions','getDescriptions','channel','FreshdeskField','getFields','remoteUri','apiKey','slice','substring','lastIndexOf','GET','format','api/v2/ticket_fields','Basic\x20%s','%s:X','toString','base64','requester','subject','description','priority','source','ticket_type','group','company','remove','includes','custom_text','custom_dropdown','label','default','choices','capitalize','statusCode','Wrong\x20credentials','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','../../components/integrations/configuration','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','info','FreshdeskAccount,\x20%s,\x20%s','request\x20sent','debug','FreshdeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','status','end'];(function(_0x4166af,_0x533024){var _0x5a6721=function(_0x329bd9){while(--_0x329bd9){_0x4166af['push'](_0x4166af['shift']());}};_0x5a6721(++_0x533024);}(_0x309e,0x155));var _0xe309=function(_0x273c39,_0x1052e6){_0x273c39=_0x273c39-0x0;var _0x46d6b5=_0x309e[_0x273c39];return _0x46d6b5;};'use strict';var pdf=require(_0xe309('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xe309('0x1'));var zipdir=require(_0xe309('0x2'));var jsonpatch=require(_0xe309('0x3'));var rp=require(_0xe309('0x4'));var moment=require(_0xe309('0x5'));var BPromise=require(_0xe309('0x6'));var Mustache=require(_0xe309('0x7'));var util=require(_0xe309('0x8'));var path=require(_0xe309('0x9'));var sox=require(_0xe309('0xa'));var csv=require(_0xe309('0xb'));var ejs=require(_0xe309('0xc'));var fs=require('fs');var _=require(_0xe309('0xd'));var squel=require(_0xe309('0xe'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xe309('0xb'));var querystring=require(_0xe309('0xf'));var Papa=require(_0xe309('0x10'));var Redis=require(_0xe309('0x11'));var authService=require(_0xe309('0x12'));var qs=require(_0xe309('0x13'));var hardwareService=require(_0xe309('0x14'));var logger=require(_0xe309('0x15'))(_0xe309('0x16'));var utils=require(_0xe309('0x17'));var config=require('../../config/environment');var db=require(_0xe309('0x18'))['db'];var integrations=require(_0xe309('0x19'));var jayson=require('jayson/promise');var client=jayson['client'][_0xe309('0x1a')]({'port':0x232a});function checkPasswordPattern(_0x4dd791,_0x2ffc72,_0x30dc81){if(_0x30dc81){var _0x6f62e8=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x6f62e8[_0xe309('0x1b')](_0x2ffc72)){return _0x4dd791;}else{throw new Error(_0xe309('0x1c'));}}else{return _0x4dd791;}}function respondWithRpcPromise(_0x5118f7,_0x26f452,_0x249823,_0x32453e){return new BPromise(function(_0x2d4723,_0x50379d){var _0x5bf794=_0x32453e||client;return _0x5bf794['request'](_0x5118f7,_0x249823)['then'](function(_0xa59e97){logger[_0xe309('0x1d')](_0xe309('0x1e'),_0x26f452,_0xe309('0x1f'));logger[_0xe309('0x20')](_0xe309('0x21'),_0x26f452,_0xe309('0x1f'),JSON[_0xe309('0x22')](_0xa59e97));if(_0xa59e97[_0xe309('0x23')]){if(_0xa59e97[_0xe309('0x23')][_0xe309('0x24')]===0x1f4){logger['error'](_0xe309('0x1e'),_0x26f452,_0xa59e97['error'][_0xe309('0x25')]);return _0x50379d(_0xa59e97[_0xe309('0x23')][_0xe309('0x25')]);}logger[_0xe309('0x23')](_0xe309('0x1e'),_0x26f452,_0xa59e97['error'][_0xe309('0x25')]);return _0x2d4723(_0xa59e97[_0xe309('0x23')][_0xe309('0x25')]);}else{logger[_0xe309('0x1d')](_0xe309('0x1e'),_0x26f452,'request\x20sent');_0x2d4723(_0xa59e97[_0xe309('0x26')][_0xe309('0x25')]);}})[_0xe309('0x27')](function(_0x423c22){logger[_0xe309('0x23')](_0xe309('0x1e'),_0x26f452,_0x423c22);_0x50379d(_0x423c22);});});}function respondWithStatusCode(_0x3cda7f,_0x486d09){_0x486d09=_0x486d09||0xcc;return function(_0x701075){if(_0x701075){return _0x3cda7f[_0xe309('0x28')](_0x486d09);}return _0x3cda7f[_0xe309('0x29')](_0x486d09)[_0xe309('0x2a')]();};}function respondWithResult(_0x486863,_0x24328f){_0x24328f=_0x24328f||0xc8;return function(_0x3d7807){if(_0x3d7807){return _0x486863[_0xe309('0x29')](_0x24328f)[_0xe309('0x2b')](_0x3d7807);}};}function respondWithFilteredResult(_0x10ee33,_0x4d6288){return function(_0x5a9c9a){if(_0x5a9c9a){var _0x372a31=_0x5a9c9a[_0xe309('0x2c')],_0x549bc7=_0x4d6288[_0xe309('0x2d')],_0x10f8f8=_0x4d6288[_0xe309('0x2d')]+_0x4d6288[_0xe309('0x2e')],_0x5e4685;if(_0x10f8f8>=_0x372a31){_0x10f8f8=_0x372a31;_0x5e4685=0xc8;}else{_0x5e4685=0xce;}_0x10ee33[_0xe309('0x29')](_0x5e4685);return _0x10ee33[_0xe309('0x2f')]('Content-Range',_0x549bc7+'-'+_0x10f8f8+'/'+_0x372a31)['json'](_0x5a9c9a);}return null;};}function patchUpdates(_0x667f54){return function(_0x3b4979){try{jsonpatch[_0xe309('0x30')](_0x3b4979,_0x667f54,!![]);}catch(_0xf0e6d0){return BPromise['reject'](_0xf0e6d0);}return _0x3b4979['save']();};}function saveUpdates(_0x5126b7,_0x222393){return function(_0x49d850){if(_0x49d850){return _0x49d850[_0xe309('0x31')](_0x5126b7)['then'](function(_0x1efbca){return _0x1efbca;});}return null;};}function removeEntity(_0x2c39fb,_0x2be12a){return function(_0x4a116e){if(_0x4a116e){return _0x4a116e[_0xe309('0x32')]()[_0xe309('0x33')](function(){_0x2c39fb[_0xe309('0x29')](0xcc)['end']();});}};}function handleEntityNotFound(_0x50ce76,_0x25ab7c){return function(_0x1621e7){if(!_0x1621e7){_0x50ce76[_0xe309('0x28')](0x194);}return _0x1621e7;};}function handleError(_0xab2c7b,_0xd3d5d4){_0xd3d5d4=_0xd3d5d4||0x1f4;return function(_0x1224dc){logger[_0xe309('0x23')](_0x1224dc[_0xe309('0x34')]);if(_0x1224dc[_0xe309('0x35')]){delete _0x1224dc['name'];}_0xab2c7b[_0xe309('0x29')](_0xd3d5d4)[_0xe309('0x36')](_0x1224dc);};}exports[_0xe309('0x37')]=function(_0xfceeaa,_0xe41d9f){var _0x5c2b32={},_0x5c8ebb={},_0x13a0fa={'count':0x0,'rows':[]};var _0x2cf8a4=db['FreshdeskAccount']['rawAttributes'];_0x5c8ebb[_0xe309('0x38')]=_[_0xe309('0x39')](_0x2cf8a4);_0x5c8ebb['query']=_[_0xe309('0x39')](_0xfceeaa[_0xe309('0x3a')]);_0x5c8ebb['filters']=_[_0xe309('0x3b')](_0x5c8ebb[_0xe309('0x38')],_0x5c8ebb[_0xe309('0x3a')]);_0x5c2b32['attributes']=_['intersection'](_0x5c8ebb[_0xe309('0x38')],qs[_0xe309('0x3c')](_0xfceeaa[_0xe309('0x3a')][_0xe309('0x3c')]));_0x5c2b32['attributes']=_0x5c2b32[_0xe309('0x3d')]['length']?_0x5c2b32['attributes']:_0x5c8ebb[_0xe309('0x38')];if(!_0xfceeaa[_0xe309('0x3a')][_0xe309('0x3e')]('nolimit')){_0x5c2b32[_0xe309('0x2e')]=qs[_0xe309('0x2e')](_0xfceeaa[_0xe309('0x3a')]['limit']);_0x5c2b32[_0xe309('0x2d')]=qs[_0xe309('0x2d')](_0xfceeaa['query'][_0xe309('0x2d')]);}_0x5c2b32[_0xe309('0x3f')]=qs[_0xe309('0x40')](_0xfceeaa[_0xe309('0x3a')][_0xe309('0x40')]);_0x5c2b32[_0xe309('0x41')]=qs[_0xe309('0x42')](_[_0xe309('0x43')](_0xfceeaa[_0xe309('0x3a')],_0x5c8ebb[_0xe309('0x42')]));if(_0xfceeaa[_0xe309('0x3a')][_0xe309('0x44')]){_0x5c2b32[_0xe309('0x41')]=_[_0xe309('0x45')](_0x5c2b32[_0xe309('0x41')],{'$or':_[_0xe309('0x46')](_0x2cf8a4,function(_0x30f504){if(_0x30f504[_0xe309('0x47')][_0xe309('0x48')]!==_0xe309('0x49')){var _0x2bffe5={};_0x2bffe5[_0x30f504['field']]={'$like':'%'+_0xfceeaa[_0xe309('0x3a')][_0xe309('0x44')]+'%'};return _0x2bffe5;}})});}_0x5c2b32=_[_0xe309('0x45')]({},_0x5c2b32,_0xfceeaa[_0xe309('0x4a')]);var _0x426f0f={'where':_0x5c2b32[_0xe309('0x41')]};return db[_0xe309('0x4b')][_0xe309('0x2c')](_0x426f0f)[_0xe309('0x33')](function(_0x1078d1){_0x13a0fa[_0xe309('0x2c')]=_0x1078d1;if(_0xfceeaa['query'][_0xe309('0x4c')]){_0x5c2b32[_0xe309('0x4d')]=[{'all':!![]}];}return db['FreshdeskAccount'][_0xe309('0x4e')](_0x5c2b32);})[_0xe309('0x33')](function(_0x3da6b8){_0x13a0fa['rows']=_0x3da6b8;return _0x13a0fa;})[_0xe309('0x33')](respondWithFilteredResult(_0xe41d9f,_0x5c2b32))[_0xe309('0x27')](handleError(_0xe41d9f,null));};exports[_0xe309('0x4f')]=function(_0x356080,_0x5a0e7b){var _0x4b8615={'raw':![],'where':{'id':_0x356080[_0xe309('0x50')]['id']}},_0x42137b={};_0x42137b[_0xe309('0x38')]=_[_0xe309('0x39')](db[_0xe309('0x4b')]['rawAttributes']);_0x42137b['query']=_[_0xe309('0x39')](_0x356080[_0xe309('0x3a')]);_0x42137b[_0xe309('0x42')]=_['intersection'](_0x42137b[_0xe309('0x38')],_0x42137b[_0xe309('0x3a')]);_0x4b8615[_0xe309('0x3d')]=_[_0xe309('0x3b')](_0x42137b[_0xe309('0x38')],qs[_0xe309('0x3c')](_0x356080[_0xe309('0x3a')][_0xe309('0x3c')]));_0x4b8615[_0xe309('0x3d')]=_0x4b8615[_0xe309('0x3d')][_0xe309('0x51')]?_0x4b8615[_0xe309('0x3d')]:_0x42137b[_0xe309('0x38')];if(_0x356080[_0xe309('0x3a')]['includeAll']){_0x4b8615['include']=[{'all':!![]}];}_0x4b8615=_[_0xe309('0x45')]({},_0x4b8615,_0x356080[_0xe309('0x4a')]);return db[_0xe309('0x4b')]['find'](_0x4b8615)['then'](handleEntityNotFound(_0x5a0e7b,null))[_0xe309('0x33')](respondWithResult(_0x5a0e7b,null))[_0xe309('0x27')](handleError(_0x5a0e7b,null));};exports[_0xe309('0x52')]=function(_0x2c1bbf,_0x337f07){return db['FreshdeskAccount']['create'](_0x2c1bbf[_0xe309('0x53')],{})[_0xe309('0x33')](respondWithResult(_0x337f07,0xc9))[_0xe309('0x27')](handleError(_0x337f07,null));};exports[_0xe309('0x31')]=function(_0x3c0277,_0x199845){if(_0x3c0277['body']['id']){delete _0x3c0277[_0xe309('0x53')]['id'];}return db[_0xe309('0x4b')][_0xe309('0x54')]({'where':{'id':_0x3c0277[_0xe309('0x50')]['id']}})[_0xe309('0x33')](handleEntityNotFound(_0x199845,null))['then'](saveUpdates(_0x3c0277[_0xe309('0x53')],null))[_0xe309('0x33')](respondWithResult(_0x199845,null))[_0xe309('0x27')](handleError(_0x199845,null));};exports[_0xe309('0x32')]=function(_0x5c4071,_0x2e8e15){return db[_0xe309('0x4b')][_0xe309('0x54')]({'where':{'id':_0x5c4071[_0xe309('0x50')]['id']}})[_0xe309('0x33')](handleEntityNotFound(_0x2e8e15,null))[_0xe309('0x33')](removeEntity(_0x2e8e15,null))['catch'](handleError(_0x2e8e15,null));};exports[_0xe309('0x55')]=function(_0x4ee33a,_0x48b2c5,_0x28c2dd){var _0x34ed9e={};var _0x3926ed={};var _0x114d60;var _0x15d75a;return db[_0xe309('0x4b')][_0xe309('0x56')]({'where':{'id':_0x4ee33a[_0xe309('0x50')]['id']}})['then'](handleEntityNotFound(_0x48b2c5,null))[_0xe309('0x33')](function(_0x443099){if(_0x443099){_0x114d60=_0x443099;_0x3926ed['model']=_[_0xe309('0x39')](db[_0xe309('0x57')][_0xe309('0x58')]);_0x3926ed[_0xe309('0x3a')]=_[_0xe309('0x39')](_0x4ee33a['query']);_0x3926ed[_0xe309('0x42')]=_[_0xe309('0x3b')](_0x3926ed[_0xe309('0x38')],_0x3926ed[_0xe309('0x3a')]);_0x34ed9e['attributes']=_[_0xe309('0x3b')](_0x3926ed['model'],qs['fields'](_0x4ee33a[_0xe309('0x3a')]['fields']));_0x34ed9e['attributes']=_0x34ed9e[_0xe309('0x3d')][_0xe309('0x51')]?_0x34ed9e[_0xe309('0x3d')]:_0x3926ed['model'];_0x34ed9e[_0xe309('0x3f')]=qs[_0xe309('0x40')](_0x4ee33a[_0xe309('0x3a')][_0xe309('0x40')]);_0x34ed9e[_0xe309('0x41')]=qs[_0xe309('0x42')](_[_0xe309('0x43')](_0x4ee33a[_0xe309('0x3a')],_0x3926ed[_0xe309('0x42')]));if(_0x4ee33a['query'][_0xe309('0x44')]){_0x34ed9e[_0xe309('0x41')]=_[_0xe309('0x45')](_0x34ed9e['where'],{'$or':_[_0xe309('0x46')](_0x34ed9e['attributes'],function(_0x5aa177){var _0x2b4701={};_0x2b4701[_0x5aa177]={'$like':'%'+_0x4ee33a[_0xe309('0x3a')][_0xe309('0x44')]+'%'};return _0x2b4701;})});}_0x34ed9e=_[_0xe309('0x45')]({},_0x34ed9e,_0x4ee33a[_0xe309('0x4a')]);return _0x114d60[_0xe309('0x55')](_0x34ed9e);}})[_0xe309('0x33')](function(_0x1de60d){if(_0x1de60d){_0x15d75a=_0x1de60d['length'];if(!_0x4ee33a[_0xe309('0x3a')][_0xe309('0x3e')]('nolimit')){_0x34ed9e[_0xe309('0x2e')]=qs[_0xe309('0x2e')](_0x4ee33a[_0xe309('0x3a')][_0xe309('0x2e')]);_0x34ed9e['offset']=qs[_0xe309('0x2d')](_0x4ee33a[_0xe309('0x3a')][_0xe309('0x2d')]);}return _0x114d60[_0xe309('0x55')](_0x34ed9e);}})[_0xe309('0x33')](function(_0x16fa63){if(_0x16fa63){return _0x16fa63?{'count':_0x15d75a,'rows':_0x16fa63}:null;}})['then'](respondWithResult(_0x48b2c5,null))[_0xe309('0x27')](handleError(_0x48b2c5,null));};exports[_0xe309('0x59')]=function(_0x66da25,_0x4c8c4b,_0x1b973b){if(_0x66da25[_0xe309('0x53')]['id']){delete _0x66da25[_0xe309('0x53')]['id'];}return db[_0xe309('0x4b')][_0xe309('0x56')]({'where':{'id':_0x66da25[_0xe309('0x50')]['id']}})[_0xe309('0x33')](handleEntityNotFound(_0x4c8c4b,null))[_0xe309('0x33')](function(_0x834735){if(_0x834735){_0x66da25[_0xe309('0x53')][_0xe309('0x5a')]=_0x834735['id'];_0x66da25[_0xe309('0x53')][_0xe309('0x5b')]=integrations[_0xe309('0x5c')](_0x66da25[_0xe309('0x53')]['channel'],_0x66da25['body'][_0xe309('0x47')]);_0x66da25[_0xe309('0x53')][_0xe309('0x5d')]=integrations[_0xe309('0x5e')](_0x66da25[_0xe309('0x53')][_0xe309('0x5f')],_0x66da25['body'][_0xe309('0x47')]);return db['FreshdeskConfiguration'][_0xe309('0x52')](_0x66da25[_0xe309('0x53')],{'include':[{'model':db['FreshdeskField'],'as':_0xe309('0x5b')},{'model':db[_0xe309('0x60')],'as':_0xe309('0x5d')}]});}return null;})[_0xe309('0x33')](respondWithResult(_0x4c8c4b,null))[_0xe309('0x27')](handleError(_0x4c8c4b,null));};exports[_0xe309('0x61')]=function(_0x5addf4,_0x3efe2f,_0xbfacce){var _0x6e84f3='';return db['FreshdeskAccount'][_0xe309('0x56')]({'where':{'id':_0x5addf4[_0xe309('0x50')]['id']},'attributes':['id',_0xe309('0x62'),_0xe309('0x63')]})['then'](handleEntityNotFound(_0x3efe2f,null))[_0xe309('0x33')](function(_0x4a59da){if(_0x4a59da){_0x6e84f3=_0x4a59da[_0xe309('0x62')];var _0x2fa6be=_0x6e84f3[_0xe309('0x64')](-0x1);if(_0x2fa6be==='/'){_0x6e84f3=_0x6e84f3[_0xe309('0x65')](0x0,_0x6e84f3[_0xe309('0x66')](_0x2fa6be));}return rp({'method':_0xe309('0x67'),'uri':util[_0xe309('0x68')]('%s/%s',_0x6e84f3,_0xe309('0x69')),'headers':{'Authorization':util[_0xe309('0x68')](_0xe309('0x6a'),new Buffer(util['format'](_0xe309('0x6b'),_0x4a59da['apiKey']))[_0xe309('0x6c')](_0xe309('0x6d')))},'json':!![]});}})[_0xe309('0x33')](function(_0x127e61){if(_0x127e61){var _0x390ed7=[_0xe309('0x6e'),_0xe309('0x6f'),'agent',_0xe309('0x70'),_0xe309('0x29'),_0xe309('0x71'),'group',_0xe309('0x72'),_0xe309('0x73'),_0xe309('0x74'),_0xe309('0x75')];_[_0xe309('0x76')](_0x127e61,function(_0x15dcd5){return _0x390ed7[_0xe309('0x77')](_0x15dcd5[_0xe309('0x35')])||!_0x15dcd5['default']&&_0x15dcd5[_0xe309('0x47')]!==_0xe309('0x78')&&_0x15dcd5[_0xe309('0x47')]!==_0xe309('0x79');});return{'count':_0x127e61['length'],'rows':_[_0xe309('0x46')](_0x127e61,function(_0x27f45f){return{'id':_0x27f45f[_0xe309('0x35')],'name':_0x27f45f[_0xe309('0x7a')],'custom':!_0x27f45f[_0xe309('0x7b')],'options':_0x27f45f[_0xe309('0x7c')]?_[_0xe309('0x46')](_0x27f45f[_0xe309('0x7c')],function(_0x446255){return{'name':_[_0xe309('0x7d')](_0x446255),'value':_0x446255};}):[]};})};}})['then'](respondWithResult(_0x3efe2f,null))[_0xe309('0x27')](function(_0x23004b){var _0x1c6b5d=_0x5addf4[_0xe309('0x3a')]['test']?0x1f4:_0x23004b[_0xe309('0x7e')]||0x1f4;logger[_0xe309('0x23')]('getFields,\x20%s,\x20%s,\x20%s',_0xe309('0x61'),_0x1c6b5d,JSON['stringify'](_0x23004b));delete _0x23004b[_0xe309('0x35')];if(_0x1c6b5d===0x191){_0x1c6b5d=0x190;}_0x3efe2f['status'](_0x1c6b5d)['send'](_0x5addf4['query'][_0xe309('0x1b')]?{'message':_0xe309('0x7f'),'statusCode':_0x23004b['statusCode']}:_0x23004b);});};
\ No newline at end of file
index 1436751..cc3f52f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x87c4=['rimraf','../../config/environment','../../components/integrations/configuration','exports','define','FreshdeskAccount','int_freshdesk_accounts','lodash','util','../../config/logger','api','path'];(function(_0x25cd2c,_0x1d1fe5){var _0x38cd1c=function(_0x103190){while(--_0x103190){_0x25cd2c['push'](_0x25cd2c['shift']());}};_0x38cd1c(++_0x1d1fe5);}(_0x87c4,0x73));var _0x487c=function(_0x44dca1,_0x3535d8){_0x44dca1=_0x44dca1-0x0;var _0x459e63=_0x87c4[_0x44dca1];return _0x459e63;};'use strict';var _=require(_0x487c('0x0'));var util=require(_0x487c('0x1'));var logger=require(_0x487c('0x2'))(_0x487c('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x487c('0x4'));var rimraf=require(_0x487c('0x5'));var config=require(_0x487c('0x6'));var attributes=require('./intFreshdeskAccount.attributes');var integrations=require(_0x487c('0x7'));module[_0x487c('0x8')]=function(_0xdf6182,_0x49e157){return _0xdf6182[_0x487c('0x9')](_0x487c('0xa'),attributes,{'tableName':_0x487c('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x29a3=['lodash','api','moment','bluebird','path','rimraf','../../config/environment','./intFreshdeskAccount.attributes','../../components/integrations/configuration','exports','define','FreshdeskAccount','int_freshdesk_accounts'];(function(_0x580971,_0x10984d){var _0x16d873=function(_0x594084){while(--_0x594084){_0x580971['push'](_0x580971['shift']());}};_0x16d873(++_0x10984d);}(_0x29a3,0x12b));var _0x329a=function(_0x25c524,_0x590cd6){_0x25c524=_0x25c524-0x0;var _0x496c5b=_0x29a3[_0x25c524];return _0x496c5b;};'use strict';var _=require(_0x329a('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x329a('0x1'));var moment=require(_0x329a('0x2'));var BPromise=require(_0x329a('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x329a('0x4'));var rimraf=require(_0x329a('0x5'));var config=require(_0x329a('0x6'));var attributes=require(_0x329a('0x7'));var integrations=require(_0x329a('0x8'));module[_0x329a('0x9')]=function(_0x21aac9,_0x404111){return _0x21aac9[_0x329a('0xa')](_0x329a('0xb'),attributes,{'tableName':_0x329a('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ad9219b..bb9a7fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2d75=['result','catch','GetFreshdeskAccount','FreshdeskAccount','options','raw','where','attributes','limit','map','model','include','debug','find','ShowFreshdeskAccount','lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','FreshdeskAccount,\x20%s,\x20%s','FreshdeskAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message'];(function(_0x59bcb1,_0x5a4b6c){var _0x4a737f=function(_0x546a49){while(--_0x546a49){_0x59bcb1['push'](_0x59bcb1['shift']());}};_0x4a737f(++_0x5a4b6c);}(_0x2d75,0xc3));var _0x52d7=function(_0x2181b1,_0x569637){_0x2181b1=_0x2181b1-0x0;var _0x530548=_0x2d75[_0x2181b1];return _0x530548;};'use strict';var _=require(_0x52d7('0x0'));var util=require(_0x52d7('0x1'));var moment=require(_0x52d7('0x2'));var BPromise=require(_0x52d7('0x3'));var rs=require(_0x52d7('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x52d7('0x5'));var logger=require(_0x52d7('0x6'))(_0x52d7('0x7'));var config=require(_0x52d7('0x8'));var jayson=require(_0x52d7('0x9'));var client=jayson[_0x52d7('0xa')][_0x52d7('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x431da3,_0x28fb69,_0x178fd5){return new BPromise(function(_0x345423,_0x52be7b){return client['request'](_0x431da3,_0x178fd5)[_0x52d7('0xc')](function(_0x3dec03){logger[_0x52d7('0xd')](_0x52d7('0xe'),_0x28fb69,'request\x20sent');logger['debug'](_0x52d7('0xf'),_0x28fb69,_0x52d7('0x10'),JSON[_0x52d7('0x11')](_0x3dec03));if(_0x3dec03[_0x52d7('0x12')]){if(_0x3dec03[_0x52d7('0x12')][_0x52d7('0x13')]===0x1f4){logger[_0x52d7('0x12')](_0x52d7('0xe'),_0x28fb69,_0x3dec03['error'][_0x52d7('0x14')]);return _0x52be7b(_0x3dec03[_0x52d7('0x12')][_0x52d7('0x14')]);}logger[_0x52d7('0x12')](_0x52d7('0xe'),_0x28fb69,_0x3dec03['error'][_0x52d7('0x14')]);return _0x345423(_0x3dec03[_0x52d7('0x12')][_0x52d7('0x14')]);}else{logger[_0x52d7('0xd')](_0x52d7('0xe'),_0x28fb69,_0x52d7('0x10'));_0x345423(_0x3dec03[_0x52d7('0x15')]['message']);}})[_0x52d7('0x16')](function(_0x1b9974){logger[_0x52d7('0x12')]('FreshdeskAccount,\x20%s,\x20%s',_0x28fb69,_0x1b9974);_0x52be7b(_0x1b9974);});});}exports[_0x52d7('0x17')]=function(_0x1c9972){var _0xf35779=this;return new Promise(function(_0x34ab10,_0x277af4){return db[_0x52d7('0x18')]['findAll']({'raw':_0x1c9972[_0x52d7('0x19')]?_0x1c9972['options'][_0x52d7('0x1a')]===undefined?!![]:![]:!![],'where':_0x1c9972[_0x52d7('0x19')]?_0x1c9972[_0x52d7('0x19')][_0x52d7('0x1b')]||null:null,'attributes':_0x1c9972['options']?_0x1c9972[_0x52d7('0x19')][_0x52d7('0x1c')]||null:null,'limit':_0x1c9972[_0x52d7('0x19')]?_0x1c9972[_0x52d7('0x19')][_0x52d7('0x1d')]||null:null,'include':_0x1c9972[_0x52d7('0x19')]?_0x1c9972['options']['include']?_[_0x52d7('0x1e')](_0x1c9972['options']['include'],function(_0x5b632d){return{'model':db[_0x5b632d[_0x52d7('0x1f')]],'as':_0x5b632d['as'],'attributes':_0x5b632d[_0x52d7('0x1c')],'include':_0x5b632d[_0x52d7('0x20')]?_['map'](_0x5b632d[_0x52d7('0x20')],function(_0x57d2c4){return{'model':db[_0x57d2c4[_0x52d7('0x1f')]],'as':_0x57d2c4['as'],'attributes':_0x57d2c4[_0x52d7('0x1c')],'include':_0x57d2c4[_0x52d7('0x20')]?_['map'](_0x57d2c4[_0x52d7('0x20')],function(_0x346212){return{'model':db[_0x346212[_0x52d7('0x1f')]],'as':_0x346212['as'],'attributes':_0x346212[_0x52d7('0x1c')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x4a092e){logger[_0x52d7('0xd')](_0x52d7('0x17'),_0x1c9972);logger[_0x52d7('0x21')](_0x52d7('0x17'),_0x1c9972,JSON[_0x52d7('0x11')](_0x4a092e));_0x34ab10(_0x4a092e);})[_0x52d7('0x16')](function(_0x490b35){logger[_0x52d7('0x12')]('GetFreshdeskAccount',_0x490b35[_0x52d7('0x14')],_0x1c9972);_0x277af4(_0xf35779['error'](0x1f4,_0x490b35[_0x52d7('0x14')]));});});};exports['ShowFreshdeskAccount']=function(_0x103966){var _0x1ae06d=this;return new Promise(function(_0x4e54c5,_0x3826c7){return db['FreshdeskAccount'][_0x52d7('0x22')]({'raw':_0x103966[_0x52d7('0x19')]?_0x103966['options'][_0x52d7('0x1a')]===undefined?!![]:![]:!![],'where':_0x103966[_0x52d7('0x19')]?_0x103966[_0x52d7('0x19')][_0x52d7('0x1b')]||null:null,'attributes':_0x103966[_0x52d7('0x19')]?_0x103966[_0x52d7('0x19')][_0x52d7('0x1c')]||null:null,'include':_0x103966[_0x52d7('0x19')]?_0x103966[_0x52d7('0x19')]['include']?_[_0x52d7('0x1e')](_0x103966[_0x52d7('0x19')][_0x52d7('0x20')],function(_0x1d22e3){return{'model':db[_0x1d22e3[_0x52d7('0x1f')]],'as':_0x1d22e3['as'],'attributes':_0x1d22e3['attributes'],'include':_0x1d22e3[_0x52d7('0x20')]?_['map'](_0x1d22e3[_0x52d7('0x20')],function(_0x3f2e94){return{'model':db[_0x3f2e94[_0x52d7('0x1f')]],'as':_0x3f2e94['as'],'attributes':_0x3f2e94['attributes'],'include':_0x3f2e94[_0x52d7('0x20')]?_[_0x52d7('0x1e')](_0x3f2e94[_0x52d7('0x20')],function(_0x5b05d2){return{'model':db[_0x5b05d2[_0x52d7('0x1f')]],'as':_0x5b05d2['as'],'attributes':_0x5b05d2[_0x52d7('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x52d7('0xc')](function(_0x3559e4){logger[_0x52d7('0xd')](_0x52d7('0x23'),_0x103966);logger[_0x52d7('0x21')](_0x52d7('0x23'),_0x103966,JSON[_0x52d7('0x11')](_0x3559e4));_0x4e54c5(_0x3559e4);})[_0x52d7('0x16')](function(_0x5e92ef){logger[_0x52d7('0x12')](_0x52d7('0x23'),_0x5e92ef[_0x52d7('0x14')],_0x103966);_0x3826c7(_0x1ae06d['error'](0x1f4,_0x5e92ef[_0x52d7('0x14')]));});});};
\ No newline at end of file
+var _0xbf62=['request','then','info','FreshdeskAccount,\x20%s,\x20%s','request\x20sent','debug','FreshdeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','GetFreshdeskAccount','FreshdeskAccount','findAll','options','raw','where','limit','include','model','map','attributes','catch','ShowFreshdeskAccount','find','lodash','util','moment','ioredis','../../mysqldb','rpc','jayson/promise','client'];(function(_0x1c546c,_0x5c57cb){var _0x2cc384=function(_0x4dee11){while(--_0x4dee11){_0x1c546c['push'](_0x1c546c['shift']());}};_0x2cc384(++_0x5c57cb);}(_0xbf62,0x1a5));var _0x2bf6=function(_0xb4ce16,_0x2bd30c){_0xb4ce16=_0xb4ce16-0x0;var _0x14055c=_0xbf62[_0xb4ce16];return _0x14055c;};'use strict';var _=require(_0x2bf6('0x0'));var util=require(_0x2bf6('0x1'));var moment=require(_0x2bf6('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x2bf6('0x3'));var db=require(_0x2bf6('0x4'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x2bf6('0x5'));var config=require('../../config/environment');var jayson=require(_0x2bf6('0x6'));var client=jayson[_0x2bf6('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1bb432,_0x4f634d,_0x578e52){return new BPromise(function(_0x2e5582,_0x4cf23f){return client[_0x2bf6('0x8')](_0x1bb432,_0x578e52)[_0x2bf6('0x9')](function(_0x18d0af){logger[_0x2bf6('0xa')](_0x2bf6('0xb'),_0x4f634d,_0x2bf6('0xc'));logger[_0x2bf6('0xd')](_0x2bf6('0xe'),_0x4f634d,_0x2bf6('0xc'),JSON[_0x2bf6('0xf')](_0x18d0af));if(_0x18d0af['error']){if(_0x18d0af[_0x2bf6('0x10')][_0x2bf6('0x11')]===0x1f4){logger[_0x2bf6('0x10')](_0x2bf6('0xb'),_0x4f634d,_0x18d0af['error'][_0x2bf6('0x12')]);return _0x4cf23f(_0x18d0af[_0x2bf6('0x10')][_0x2bf6('0x12')]);}logger['error'](_0x2bf6('0xb'),_0x4f634d,_0x18d0af[_0x2bf6('0x10')][_0x2bf6('0x12')]);return _0x2e5582(_0x18d0af['error'][_0x2bf6('0x12')]);}else{logger[_0x2bf6('0xa')](_0x2bf6('0xb'),_0x4f634d,_0x2bf6('0xc'));_0x2e5582(_0x18d0af['result']['message']);}})['catch'](function(_0x32d688){logger['error'](_0x2bf6('0xb'),_0x4f634d,_0x32d688);_0x4cf23f(_0x32d688);});});}exports[_0x2bf6('0x13')]=function(_0x186001){var _0x427eca=this;return new Promise(function(_0x5b212b,_0x54db15){return db[_0x2bf6('0x14')][_0x2bf6('0x15')]({'raw':_0x186001[_0x2bf6('0x16')]?_0x186001[_0x2bf6('0x16')][_0x2bf6('0x17')]===undefined?!![]:![]:!![],'where':_0x186001['options']?_0x186001[_0x2bf6('0x16')][_0x2bf6('0x18')]||null:null,'attributes':_0x186001[_0x2bf6('0x16')]?_0x186001['options']['attributes']||null:null,'limit':_0x186001[_0x2bf6('0x16')]?_0x186001[_0x2bf6('0x16')][_0x2bf6('0x19')]||null:null,'include':_0x186001['options']?_0x186001['options'][_0x2bf6('0x1a')]?_['map'](_0x186001[_0x2bf6('0x16')][_0x2bf6('0x1a')],function(_0x9a515f){return{'model':db[_0x9a515f[_0x2bf6('0x1b')]],'as':_0x9a515f['as'],'attributes':_0x9a515f['attributes'],'include':_0x9a515f[_0x2bf6('0x1a')]?_[_0x2bf6('0x1c')](_0x9a515f[_0x2bf6('0x1a')],function(_0x16e22c){return{'model':db[_0x16e22c[_0x2bf6('0x1b')]],'as':_0x16e22c['as'],'attributes':_0x16e22c[_0x2bf6('0x1d')],'include':_0x16e22c[_0x2bf6('0x1a')]?_[_0x2bf6('0x1c')](_0x16e22c[_0x2bf6('0x1a')],function(_0x6065a2){return{'model':db[_0x6065a2['model']],'as':_0x6065a2['as'],'attributes':_0x6065a2[_0x2bf6('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x2bf6('0x9')](function(_0x51cd4c){logger[_0x2bf6('0xa')](_0x2bf6('0x13'),_0x186001);logger['debug'](_0x2bf6('0x13'),_0x186001,JSON['stringify'](_0x51cd4c));_0x5b212b(_0x51cd4c);})[_0x2bf6('0x1e')](function(_0x55732a){logger[_0x2bf6('0x10')](_0x2bf6('0x13'),_0x55732a[_0x2bf6('0x12')],_0x186001);_0x54db15(_0x427eca[_0x2bf6('0x10')](0x1f4,_0x55732a['message']));});});};exports[_0x2bf6('0x1f')]=function(_0x4e940f){var _0x420228=this;return new Promise(function(_0x57984b,_0x3c1374){return db[_0x2bf6('0x14')][_0x2bf6('0x20')]({'raw':_0x4e940f[_0x2bf6('0x16')]?_0x4e940f[_0x2bf6('0x16')]['raw']===undefined?!![]:![]:!![],'where':_0x4e940f[_0x2bf6('0x16')]?_0x4e940f[_0x2bf6('0x16')][_0x2bf6('0x18')]||null:null,'attributes':_0x4e940f[_0x2bf6('0x16')]?_0x4e940f[_0x2bf6('0x16')]['attributes']||null:null,'include':_0x4e940f['options']?_0x4e940f[_0x2bf6('0x16')][_0x2bf6('0x1a')]?_[_0x2bf6('0x1c')](_0x4e940f[_0x2bf6('0x16')][_0x2bf6('0x1a')],function(_0x119c1d){return{'model':db[_0x119c1d[_0x2bf6('0x1b')]],'as':_0x119c1d['as'],'attributes':_0x119c1d['attributes'],'include':_0x119c1d[_0x2bf6('0x1a')]?_[_0x2bf6('0x1c')](_0x119c1d['include'],function(_0x183665){return{'model':db[_0x183665[_0x2bf6('0x1b')]],'as':_0x183665['as'],'attributes':_0x183665[_0x2bf6('0x1d')],'include':_0x183665[_0x2bf6('0x1a')]?_[_0x2bf6('0x1c')](_0x183665[_0x2bf6('0x1a')],function(_0x5a27b6){return{'model':db[_0x5a27b6[_0x2bf6('0x1b')]],'as':_0x5a27b6['as'],'attributes':_0x5a27b6[_0x2bf6('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x2bf6('0x9')](function(_0x34a64b){logger[_0x2bf6('0xa')](_0x2bf6('0x1f'),_0x4e940f);logger[_0x2bf6('0xd')]('ShowFreshdeskAccount',_0x4e940f,JSON['stringify'](_0x34a64b));_0x57984b(_0x34a64b);})[_0x2bf6('0x1e')](function(_0x3dfac5){logger[_0x2bf6('0x10')](_0x2bf6('0x1f'),_0x3dfac5[_0x2bf6('0x12')],_0x4e940f);_0x3c1374(_0x420228[_0x2bf6('0x10')](0x1f4,_0x3dfac5[_0x2bf6('0x12')]));});});};
\ No newline at end of file
index 13fb5cc..48c99e3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa41a=['post','create','setTags','/:id','update','delete','destroy','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intFreshdeskConfiguration.controller','get','index','show','isAuthenticated','getFields','/:id/subjects','getSubjects','/:id/descriptions','/:id/tags'];(function(_0x149055,_0x42bd96){var _0x2862bf=function(_0x39a5dc){while(--_0x39a5dc){_0x149055['push'](_0x149055['shift']());}};_0x2862bf(++_0x42bd96);}(_0xa41a,0x6b));var _0xaa41=function(_0x1305ce,_0x22a49b){_0x1305ce=_0x1305ce-0x0;var _0x4d7ed5=_0xa41a[_0x1305ce];return _0x4d7ed5;};'use strict';var multer=require(_0xaa41('0x0'));var util=require(_0xaa41('0x1'));var path=require('path');var timeout=require(_0xaa41('0x2'));var express=require(_0xaa41('0x3'));var router=express[_0xaa41('0x4')]();var auth=require(_0xaa41('0x5'));var interaction=require(_0xaa41('0x6'));var config=require(_0xaa41('0x7'));var controller=require(_0xaa41('0x8'));router[_0xaa41('0x9')]('/',auth['isAuthenticated'](),controller[_0xaa41('0xa')]);router[_0xaa41('0x9')]('/:id',auth['isAuthenticated'](),controller[_0xaa41('0xb')]);router[_0xaa41('0x9')]('/:id/fields',auth[_0xaa41('0xc')](),controller[_0xaa41('0xd')]);router[_0xaa41('0x9')](_0xaa41('0xe'),auth[_0xaa41('0xc')](),controller[_0xaa41('0xf')]);router[_0xaa41('0x9')](_0xaa41('0x10'),auth[_0xaa41('0xc')](),controller['getDescriptions']);router[_0xaa41('0x9')](_0xaa41('0x11'),auth['isAuthenticated'](),controller['getTags']);router[_0xaa41('0x12')]('/',auth['isAuthenticated'](),controller[_0xaa41('0x13')]);router[_0xaa41('0x12')](_0xaa41('0x11'),auth[_0xaa41('0xc')](),controller[_0xaa41('0x14')]);router['put'](_0xaa41('0x15'),auth[_0xaa41('0xc')](),controller[_0xaa41('0x16')]);router[_0xaa41('0x17')](_0xaa41('0x15'),auth[_0xaa41('0xc')](),controller[_0xaa41('0x18')]);module['exports']=router;
\ No newline at end of file
+var _0xcca7=['./intFreshdeskConfiguration.controller','get','isAuthenticated','index','show','/:id/fields','getFields','/:id/subjects','getSubjects','getDescriptions','/:id/tags','post','create','setTags','put','/:id','update','delete','multer','util','path','connect-timeout','../../components/auth/service','../../config/environment'];(function(_0x458d44,_0x45224c){var _0x5ac860=function(_0x31059e){while(--_0x31059e){_0x458d44['push'](_0x458d44['shift']());}};_0x5ac860(++_0x45224c);}(_0xcca7,0x1aa));var _0x7cca=function(_0x797f5c,_0x39f0db){_0x797f5c=_0x797f5c-0x0;var _0x9053f7=_0xcca7[_0x797f5c];return _0x9053f7;};'use strict';var multer=require(_0x7cca('0x0'));var util=require(_0x7cca('0x1'));var path=require(_0x7cca('0x2'));var timeout=require(_0x7cca('0x3'));var express=require('express');var router=express['Router']();var auth=require(_0x7cca('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x7cca('0x5'));var controller=require(_0x7cca('0x6'));router[_0x7cca('0x7')]('/',auth[_0x7cca('0x8')](),controller[_0x7cca('0x9')]);router[_0x7cca('0x7')]('/:id',auth['isAuthenticated'](),controller[_0x7cca('0xa')]);router[_0x7cca('0x7')](_0x7cca('0xb'),auth[_0x7cca('0x8')](),controller[_0x7cca('0xc')]);router[_0x7cca('0x7')](_0x7cca('0xd'),auth[_0x7cca('0x8')](),controller[_0x7cca('0xe')]);router[_0x7cca('0x7')]('/:id/descriptions',auth[_0x7cca('0x8')](),controller[_0x7cca('0xf')]);router[_0x7cca('0x7')](_0x7cca('0x10'),auth[_0x7cca('0x8')](),controller['getTags']);router[_0x7cca('0x11')]('/',auth[_0x7cca('0x8')](),controller[_0x7cca('0x12')]);router['post']('/:id/tags',auth[_0x7cca('0x8')](),controller[_0x7cca('0x13')]);router[_0x7cca('0x14')](_0x7cca('0x15'),auth[_0x7cca('0x8')](),controller[_0x7cca('0x16')]);router[_0x7cca('0x17')]('/:id',auth[_0x7cca('0x8')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index f60e182..3daa171 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3c66=['STRING'];(function(_0x2b4411,_0x2625ed){var _0x8e41ef=function(_0x2aa8c1){while(--_0x2aa8c1){_0x2b4411['push'](_0x2b4411['shift']());}};_0x8e41ef(++_0x2625ed);}(_0x3c66,0x1de));var _0x63c6=function(_0x5d20ab,_0x9c4b87){_0x5d20ab=_0x5d20ab-0x0;var _0xd18208=_0x3c66[_0x5d20ab];return _0xd18208;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0x63c6('0x0')]},'description':{'type':Sequelize[_0x63c6('0x0')]}};
\ No newline at end of file
+var _0x71c3=['exports','STRING','sequelize'];(function(_0x1a9957,_0x346fb1){var _0xf39d99=function(_0x438cb2){while(--_0x438cb2){_0x1a9957['push'](_0x1a9957['shift']());}};_0xf39d99(++_0x346fb1);}(_0x71c3,0x1d6));var _0x371c=function(_0x3da20c,_0x2c48be){_0x3da20c=_0x3da20c-0x0;var _0x50831e=_0x71c3[_0x3da20c];return _0x50831e;};'use strict';var Sequelize=require(_0x371c('0x0'));module[_0x371c('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x371c('0x2')]}};
\ No newline at end of file
index 8fb99a8..f7cb9b4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x707d=['attributes','intersection','fields','length','hasOwnProperty','limit','order','sort','where','filters','pick','map','VIRTUAL','field','filter','includeAll','include','findAll','catch','show','params','options','find','create','body','destroy','FreshdeskField','merge','getFields','getDescriptions','nolimit','getTags','setTags','findOne','ids','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','jayson/promise','client','http','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','then','FreshdeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','code','error','message','info','status','end','json','count','offset','set','Content-Range','reject','save','update','name','send','index','FreshdeskConfiguration','rawAttributes','model','keys','query'];(function(_0x273c39,_0x1052e6){var _0x46d6b5=function(_0x44f1fb){while(--_0x44f1fb){_0x273c39['push'](_0x273c39['shift']());}};_0x46d6b5(++_0x1052e6);}(_0x707d,0x18b));var _0xd707=function(_0x33e952,_0x365a0f){_0x33e952=_0x33e952-0x0;var _0x3143b7=_0x707d[_0x33e952];return _0x3143b7;};'use strict';var pdf=require(_0xd707('0x0'));var emlformat=require(_0xd707('0x1'));var rimraf=require(_0xd707('0x2'));var zipdir=require(_0xd707('0x3'));var jsonpatch=require(_0xd707('0x4'));var rp=require(_0xd707('0x5'));var moment=require(_0xd707('0x6'));var BPromise=require('bluebird');var Mustache=require(_0xd707('0x7'));var util=require(_0xd707('0x8'));var path=require(_0xd707('0x9'));var sox=require(_0xd707('0xa'));var csv=require('to-csv');var ejs=require(_0xd707('0xb'));var fs=require('fs');var _=require(_0xd707('0xc'));var squel=require('squel');var crypto=require(_0xd707('0xd'));var jsforce=require(_0xd707('0xe'));var deskjs=require(_0xd707('0xf'));var toCsv=require('to-csv');var querystring=require(_0xd707('0x10'));var Papa=require(_0xd707('0x11'));var Redis=require('ioredis');var authService=require(_0xd707('0x12'));var qs=require(_0xd707('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xd707('0x14'));var utils=require(_0xd707('0x15'));var config=require(_0xd707('0x16'));var db=require('../../mysqldb')['db'];var jayson=require(_0xd707('0x17'));var client=jayson[_0xd707('0x18')][_0xd707('0x19')]({'port':0x232a});function checkPasswordPattern(_0x5c8366,_0x552d8b,_0x59cb75){if(_0x59cb75){var _0x19b5f9=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x19b5f9['test'](_0x552d8b)){return _0x5c8366;}else{throw new Error(_0xd707('0x1a'));}}else{return _0x5c8366;}}function respondWithRpcPromise(_0x1efc13,_0x55207e,_0x1c7487,_0x2be27e){return new BPromise(function(_0x4ef57a,_0x4f5e4e){var _0x8d4e1c=_0x2be27e||client;return _0x8d4e1c['request'](_0x1efc13,_0x1c7487)[_0xd707('0x1b')](function(_0x18211b){logger['info'](_0xd707('0x1c'),_0x55207e,_0xd707('0x1d'));logger[_0xd707('0x1e')](_0xd707('0x1f'),_0x55207e,_0xd707('0x1d'),JSON[_0xd707('0x20')](_0x18211b));if(_0x18211b['error']){if(_0x18211b['error'][_0xd707('0x21')]===0x1f4){logger['error'](_0xd707('0x1c'),_0x55207e,_0x18211b[_0xd707('0x22')][_0xd707('0x23')]);return _0x4f5e4e(_0x18211b['error']['message']);}logger[_0xd707('0x22')](_0xd707('0x1c'),_0x55207e,_0x18211b[_0xd707('0x22')][_0xd707('0x23')]);return _0x4ef57a(_0x18211b[_0xd707('0x22')][_0xd707('0x23')]);}else{logger[_0xd707('0x24')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x55207e,_0xd707('0x1d'));_0x4ef57a(_0x18211b['result'][_0xd707('0x23')]);}})['catch'](function(_0x3a4fa2){logger[_0xd707('0x22')](_0xd707('0x1c'),_0x55207e,_0x3a4fa2);_0x4f5e4e(_0x3a4fa2);});});}function respondWithStatusCode(_0x495f5a,_0xef6093){_0xef6093=_0xef6093||0xcc;return function(_0x20695f){if(_0x20695f){return _0x495f5a['sendStatus'](_0xef6093);}return _0x495f5a[_0xd707('0x25')](_0xef6093)[_0xd707('0x26')]();};}function respondWithResult(_0xdf8e03,_0xdc96a5){_0xdc96a5=_0xdc96a5||0xc8;return function(_0x2a41cb){if(_0x2a41cb){return _0xdf8e03[_0xd707('0x25')](_0xdc96a5)[_0xd707('0x27')](_0x2a41cb);}};}function respondWithFilteredResult(_0x3330e6,_0x3feb7f){return function(_0x1f752e){if(_0x1f752e){var _0x27d15b=_0x1f752e[_0xd707('0x28')],_0x53d5db=_0x3feb7f[_0xd707('0x29')],_0x2c0750=_0x3feb7f[_0xd707('0x29')]+_0x3feb7f['limit'],_0x340b79;if(_0x2c0750>=_0x27d15b){_0x2c0750=_0x27d15b;_0x340b79=0xc8;}else{_0x340b79=0xce;}_0x3330e6[_0xd707('0x25')](_0x340b79);return _0x3330e6[_0xd707('0x2a')](_0xd707('0x2b'),_0x53d5db+'-'+_0x2c0750+'/'+_0x27d15b)[_0xd707('0x27')](_0x1f752e);}return null;};}function patchUpdates(_0x3ed13a){return function(_0xd340a){try{jsonpatch['apply'](_0xd340a,_0x3ed13a,!![]);}catch(_0x2db6c6){return BPromise[_0xd707('0x2c')](_0x2db6c6);}return _0xd340a[_0xd707('0x2d')]();};}function saveUpdates(_0x4eb43c,_0x56e642){return function(_0x40eef5){if(_0x40eef5){return _0x40eef5[_0xd707('0x2e')](_0x4eb43c)['then'](function(_0x345382){return _0x345382;});}return null;};}function removeEntity(_0x11b05b,_0x3b05d5){return function(_0x2dde56){if(_0x2dde56){return _0x2dde56['destroy']()['then'](function(){_0x11b05b[_0xd707('0x25')](0xcc)[_0xd707('0x26')]();});}};}function handleEntityNotFound(_0x4903da,_0x385378){return function(_0x2b385c){if(!_0x2b385c){_0x4903da['sendStatus'](0x194);}return _0x2b385c;};}function handleError(_0x4cb9fd,_0x31be53){_0x31be53=_0x31be53||0x1f4;return function(_0x4b69d4){logger[_0xd707('0x22')](_0x4b69d4['stack']);if(_0x4b69d4[_0xd707('0x2f')]){delete _0x4b69d4[_0xd707('0x2f')];}_0x4cb9fd['status'](_0x31be53)[_0xd707('0x30')](_0x4b69d4);};}exports[_0xd707('0x31')]=function(_0x1fd80e,_0x431161){var _0xf41631={},_0x34ab5f={},_0x5424f7={'count':0x0,'rows':[]};var _0x1b0ac8=db[_0xd707('0x32')][_0xd707('0x33')];_0x34ab5f[_0xd707('0x34')]=_[_0xd707('0x35')](_0x1b0ac8);_0x34ab5f[_0xd707('0x36')]=_[_0xd707('0x35')](_0x1fd80e['query']);_0x34ab5f['filters']=_['intersection'](_0x34ab5f['model'],_0x34ab5f[_0xd707('0x36')]);_0xf41631[_0xd707('0x37')]=_[_0xd707('0x38')](_0x34ab5f[_0xd707('0x34')],qs[_0xd707('0x39')](_0x1fd80e['query']['fields']));_0xf41631[_0xd707('0x37')]=_0xf41631[_0xd707('0x37')][_0xd707('0x3a')]?_0xf41631[_0xd707('0x37')]:_0x34ab5f[_0xd707('0x34')];if(!_0x1fd80e[_0xd707('0x36')][_0xd707('0x3b')]('nolimit')){_0xf41631[_0xd707('0x3c')]=qs['limit'](_0x1fd80e[_0xd707('0x36')][_0xd707('0x3c')]);_0xf41631[_0xd707('0x29')]=qs[_0xd707('0x29')](_0x1fd80e['query'][_0xd707('0x29')]);}_0xf41631[_0xd707('0x3d')]=qs[_0xd707('0x3e')](_0x1fd80e[_0xd707('0x36')][_0xd707('0x3e')]);_0xf41631[_0xd707('0x3f')]=qs[_0xd707('0x40')](_[_0xd707('0x41')](_0x1fd80e[_0xd707('0x36')],_0x34ab5f[_0xd707('0x40')]));if(_0x1fd80e[_0xd707('0x36')]['filter']){_0xf41631[_0xd707('0x3f')]=_['merge'](_0xf41631[_0xd707('0x3f')],{'$or':_[_0xd707('0x42')](_0x1b0ac8,function(_0x56f230){if(_0x56f230['type']['key']!==_0xd707('0x43')){var _0x1916f5={};_0x1916f5[_0x56f230[_0xd707('0x44')]]={'$like':'%'+_0x1fd80e[_0xd707('0x36')][_0xd707('0x45')]+'%'};return _0x1916f5;}})});}_0xf41631=_['merge']({},_0xf41631,_0x1fd80e['options']);var _0x2e9c9b={'where':_0xf41631[_0xd707('0x3f')]};return db[_0xd707('0x32')][_0xd707('0x28')](_0x2e9c9b)['then'](function(_0x34fb1a){_0x5424f7[_0xd707('0x28')]=_0x34fb1a;if(_0x1fd80e[_0xd707('0x36')][_0xd707('0x46')]){_0xf41631[_0xd707('0x47')]=[{'all':!![]}];}return db[_0xd707('0x32')][_0xd707('0x48')](_0xf41631);})[_0xd707('0x1b')](function(_0x4086b4){_0x5424f7['rows']=_0x4086b4;return _0x5424f7;})[_0xd707('0x1b')](respondWithFilteredResult(_0x431161,_0xf41631))[_0xd707('0x49')](handleError(_0x431161,null));};exports[_0xd707('0x4a')]=function(_0x5ab41c,_0x198d79){var _0x47e45c={'raw':![],'where':{'id':_0x5ab41c[_0xd707('0x4b')]['id']}},_0x5d02cf={};_0x5d02cf['model']=_[_0xd707('0x35')](db[_0xd707('0x32')]['rawAttributes']);_0x5d02cf[_0xd707('0x36')]=_[_0xd707('0x35')](_0x5ab41c['query']);_0x5d02cf[_0xd707('0x40')]=_[_0xd707('0x38')](_0x5d02cf[_0xd707('0x34')],_0x5d02cf[_0xd707('0x36')]);_0x47e45c[_0xd707('0x37')]=_[_0xd707('0x38')](_0x5d02cf[_0xd707('0x34')],qs['fields'](_0x5ab41c[_0xd707('0x36')][_0xd707('0x39')]));_0x47e45c[_0xd707('0x37')]=_0x47e45c[_0xd707('0x37')][_0xd707('0x3a')]?_0x47e45c[_0xd707('0x37')]:_0x5d02cf['model'];if(_0x5ab41c[_0xd707('0x36')][_0xd707('0x46')]){_0x47e45c[_0xd707('0x47')]=[{'all':!![]}];}_0x47e45c=_['merge']({},_0x47e45c,_0x5ab41c[_0xd707('0x4c')]);return db['FreshdeskConfiguration'][_0xd707('0x4d')](_0x47e45c)[_0xd707('0x1b')](handleEntityNotFound(_0x198d79,null))['then'](respondWithResult(_0x198d79,null))[_0xd707('0x49')](handleError(_0x198d79,null));};exports[_0xd707('0x4e')]=function(_0x56d431,_0x1a0ba8){return db[_0xd707('0x32')][_0xd707('0x4e')](_0x56d431['body'],{})[_0xd707('0x1b')](respondWithResult(_0x1a0ba8,0xc9))[_0xd707('0x49')](handleError(_0x1a0ba8,null));};exports[_0xd707('0x2e')]=function(_0xbf4822,_0x3d1de1){if(_0xbf4822['body']['id']){delete _0xbf4822[_0xd707('0x4f')]['id'];}return db[_0xd707('0x32')][_0xd707('0x4d')]({'where':{'id':_0xbf4822['params']['id']}})[_0xd707('0x1b')](handleEntityNotFound(_0x3d1de1,null))['then'](saveUpdates(_0xbf4822[_0xd707('0x4f')],null))[_0xd707('0x1b')](respondWithResult(_0x3d1de1,null))[_0xd707('0x49')](handleError(_0x3d1de1,null));};exports[_0xd707('0x50')]=function(_0x325cef,_0x294b25){return db[_0xd707('0x32')][_0xd707('0x4d')]({'where':{'id':_0x325cef[_0xd707('0x4b')]['id']}})[_0xd707('0x1b')](handleEntityNotFound(_0x294b25,null))[_0xd707('0x1b')](removeEntity(_0x294b25,null))[_0xd707('0x49')](handleError(_0x294b25,null));};exports['getFields']=function(_0xd7c202,_0x21f3a5,_0x51b6f5){var _0x351832={};var _0x28073d={};var _0x409dbf;var _0x5604a7;return db['FreshdeskConfiguration']['findOne']({'where':{'id':_0xd7c202[_0xd707('0x4b')]['id']}})['then'](handleEntityNotFound(_0x21f3a5,null))[_0xd707('0x1b')](function(_0x261d34){if(_0x261d34){_0x409dbf=_0x261d34;_0x28073d[_0xd707('0x34')]=_[_0xd707('0x35')](db[_0xd707('0x51')]['rawAttributes']);_0x28073d['query']=_[_0xd707('0x35')](_0xd7c202[_0xd707('0x36')]);_0x28073d['filters']=_[_0xd707('0x38')](_0x28073d['model'],_0x28073d[_0xd707('0x36')]);_0x351832[_0xd707('0x37')]=_[_0xd707('0x38')](_0x28073d[_0xd707('0x34')],qs['fields'](_0xd7c202[_0xd707('0x36')][_0xd707('0x39')]));_0x351832[_0xd707('0x37')]=_0x351832[_0xd707('0x37')][_0xd707('0x3a')]?_0x351832[_0xd707('0x37')]:_0x28073d['model'];_0x351832[_0xd707('0x3d')]=qs[_0xd707('0x3e')](_0xd7c202[_0xd707('0x36')]['sort']);_0x351832[_0xd707('0x3f')]=qs[_0xd707('0x40')](_['pick'](_0xd7c202[_0xd707('0x36')],_0x28073d[_0xd707('0x40')]));if(_0xd7c202['query']['filter']){_0x351832[_0xd707('0x3f')]=_[_0xd707('0x52')](_0x351832['where'],{'$or':_['map'](_0x351832[_0xd707('0x37')],function(_0x206a93){var _0x44adb7={};_0x44adb7[_0x206a93]={'$like':'%'+_0xd7c202[_0xd707('0x36')][_0xd707('0x45')]+'%'};return _0x44adb7;})});}_0x351832=_['merge']({},_0x351832,_0xd7c202[_0xd707('0x4c')]);return _0x409dbf[_0xd707('0x53')](_0x351832);}})['then'](function(_0x409cf5){if(_0x409cf5){_0x5604a7=_0x409cf5[_0xd707('0x3a')];if(!_0xd7c202[_0xd707('0x36')][_0xd707('0x3b')]('nolimit')){_0x351832[_0xd707('0x3c')]=qs[_0xd707('0x3c')](_0xd7c202[_0xd707('0x36')]['limit']);_0x351832[_0xd707('0x29')]=qs['offset'](_0xd7c202['query']['offset']);}return _0x409dbf[_0xd707('0x53')](_0x351832);}})[_0xd707('0x1b')](function(_0xa99005){if(_0xa99005){return _0xa99005?{'count':_0x5604a7,'rows':_0xa99005}:null;}})[_0xd707('0x1b')](respondWithResult(_0x21f3a5,null))['catch'](handleError(_0x21f3a5,null));};exports['getSubjects']=function(_0x189185,_0x10b62d,_0x333d10){var _0x1f7d06={};var _0x25ebf4={};var _0x281b81;var _0x493769;return db[_0xd707('0x32')]['findOne']({'where':{'id':_0x189185['params']['id']}})['then'](handleEntityNotFound(_0x10b62d,null))[_0xd707('0x1b')](function(_0x47d153){if(_0x47d153){_0x281b81=_0x47d153;_0x25ebf4[_0xd707('0x34')]=_[_0xd707('0x35')](db[_0xd707('0x51')][_0xd707('0x33')]);_0x25ebf4[_0xd707('0x36')]=_[_0xd707('0x35')](_0x189185[_0xd707('0x36')]);_0x25ebf4[_0xd707('0x40')]=_[_0xd707('0x38')](_0x25ebf4[_0xd707('0x34')],_0x25ebf4[_0xd707('0x36')]);_0x1f7d06[_0xd707('0x37')]=_[_0xd707('0x38')](_0x25ebf4['model'],qs[_0xd707('0x39')](_0x189185[_0xd707('0x36')]['fields']));_0x1f7d06[_0xd707('0x37')]=_0x1f7d06[_0xd707('0x37')][_0xd707('0x3a')]?_0x1f7d06[_0xd707('0x37')]:_0x25ebf4['model'];_0x1f7d06[_0xd707('0x3d')]=qs[_0xd707('0x3e')](_0x189185[_0xd707('0x36')]['sort']);_0x1f7d06['where']=qs['filters'](_[_0xd707('0x41')](_0x189185[_0xd707('0x36')],_0x25ebf4[_0xd707('0x40')]));if(_0x189185[_0xd707('0x36')][_0xd707('0x45')]){_0x1f7d06[_0xd707('0x3f')]=_[_0xd707('0x52')](_0x1f7d06[_0xd707('0x3f')],{'$or':_[_0xd707('0x42')](_0x1f7d06[_0xd707('0x37')],function(_0x2cfdcb){var _0x14ac65={};_0x14ac65[_0x2cfdcb]={'$like':'%'+_0x189185[_0xd707('0x36')][_0xd707('0x45')]+'%'};return _0x14ac65;})});}_0x1f7d06=_[_0xd707('0x52')]({},_0x1f7d06,_0x189185[_0xd707('0x4c')]);return _0x281b81['getSubjects'](_0x1f7d06);}})[_0xd707('0x1b')](function(_0x3c5ac5){if(_0x3c5ac5){_0x493769=_0x3c5ac5[_0xd707('0x3a')];if(!_0x189185[_0xd707('0x36')][_0xd707('0x3b')]('nolimit')){_0x1f7d06[_0xd707('0x3c')]=qs['limit'](_0x189185['query'][_0xd707('0x3c')]);_0x1f7d06[_0xd707('0x29')]=qs[_0xd707('0x29')](_0x189185['query']['offset']);}return _0x281b81['getSubjects'](_0x1f7d06);}})[_0xd707('0x1b')](function(_0x39e5f1){if(_0x39e5f1){return _0x39e5f1?{'count':_0x493769,'rows':_0x39e5f1}:null;}})[_0xd707('0x1b')](respondWithResult(_0x10b62d,null))[_0xd707('0x49')](handleError(_0x10b62d,null));};exports[_0xd707('0x54')]=function(_0x4e7a7f,_0x54115d,_0x55361f){var _0x44317d={};var _0x4a369d={};var _0x1c0f99;var _0x4de75c;return db[_0xd707('0x32')]['findOne']({'where':{'id':_0x4e7a7f[_0xd707('0x4b')]['id']}})['then'](handleEntityNotFound(_0x54115d,null))[_0xd707('0x1b')](function(_0x1a7e5a){if(_0x1a7e5a){_0x1c0f99=_0x1a7e5a;_0x4a369d[_0xd707('0x34')]=_[_0xd707('0x35')](db['FreshdeskField'][_0xd707('0x33')]);_0x4a369d['query']=_[_0xd707('0x35')](_0x4e7a7f[_0xd707('0x36')]);_0x4a369d[_0xd707('0x40')]=_[_0xd707('0x38')](_0x4a369d[_0xd707('0x34')],_0x4a369d[_0xd707('0x36')]);_0x44317d['attributes']=_[_0xd707('0x38')](_0x4a369d[_0xd707('0x34')],qs[_0xd707('0x39')](_0x4e7a7f[_0xd707('0x36')]['fields']));_0x44317d[_0xd707('0x37')]=_0x44317d['attributes']['length']?_0x44317d[_0xd707('0x37')]:_0x4a369d['model'];_0x44317d[_0xd707('0x3d')]=qs[_0xd707('0x3e')](_0x4e7a7f['query'][_0xd707('0x3e')]);_0x44317d['where']=qs[_0xd707('0x40')](_[_0xd707('0x41')](_0x4e7a7f[_0xd707('0x36')],_0x4a369d[_0xd707('0x40')]));if(_0x4e7a7f[_0xd707('0x36')][_0xd707('0x45')]){_0x44317d[_0xd707('0x3f')]=_[_0xd707('0x52')](_0x44317d['where'],{'$or':_[_0xd707('0x42')](_0x44317d['attributes'],function(_0x2aeb5e){var _0xec28e2={};_0xec28e2[_0x2aeb5e]={'$like':'%'+_0x4e7a7f[_0xd707('0x36')]['filter']+'%'};return _0xec28e2;})});}_0x44317d=_[_0xd707('0x52')]({},_0x44317d,_0x4e7a7f[_0xd707('0x4c')]);return _0x1c0f99[_0xd707('0x54')](_0x44317d);}})[_0xd707('0x1b')](function(_0x1c6da2){if(_0x1c6da2){_0x4de75c=_0x1c6da2['length'];if(!_0x4e7a7f[_0xd707('0x36')][_0xd707('0x3b')](_0xd707('0x55'))){_0x44317d[_0xd707('0x3c')]=qs['limit'](_0x4e7a7f[_0xd707('0x36')][_0xd707('0x3c')]);_0x44317d[_0xd707('0x29')]=qs[_0xd707('0x29')](_0x4e7a7f[_0xd707('0x36')][_0xd707('0x29')]);}return _0x1c0f99['getDescriptions'](_0x44317d);}})[_0xd707('0x1b')](function(_0x3f855f){if(_0x3f855f){return _0x3f855f?{'count':_0x4de75c,'rows':_0x3f855f}:null;}})['then'](respondWithResult(_0x54115d,null))[_0xd707('0x49')](handleError(_0x54115d,null));};exports[_0xd707('0x56')]=function(_0x1b0232,_0x191f87,_0x1b9b79){var _0x56e614={};var _0xebe03f={};var _0x1e165b;var _0x104105;return db['FreshdeskConfiguration']['findOne']({'where':{'id':_0x1b0232[_0xd707('0x4b')]['id']}})[_0xd707('0x1b')](handleEntityNotFound(_0x191f87,null))[_0xd707('0x1b')](function(_0xfdab1e){if(_0xfdab1e){_0x1e165b=_0xfdab1e;_0xebe03f[_0xd707('0x34')]=_['keys'](db['Tag'][_0xd707('0x33')]);_0xebe03f[_0xd707('0x36')]=_[_0xd707('0x35')](_0x1b0232[_0xd707('0x36')]);_0xebe03f[_0xd707('0x40')]=_[_0xd707('0x38')](_0xebe03f[_0xd707('0x34')],_0xebe03f[_0xd707('0x36')]);_0x56e614[_0xd707('0x37')]=_[_0xd707('0x38')](_0xebe03f[_0xd707('0x34')],qs[_0xd707('0x39')](_0x1b0232[_0xd707('0x36')][_0xd707('0x39')]));_0x56e614[_0xd707('0x37')]=_0x56e614[_0xd707('0x37')]['length']?_0x56e614[_0xd707('0x37')]:_0xebe03f['model'];_0x56e614['order']=qs['sort'](_0x1b0232[_0xd707('0x36')][_0xd707('0x3e')]);_0x56e614[_0xd707('0x3f')]=qs['filters'](_[_0xd707('0x41')](_0x1b0232['query'],_0xebe03f[_0xd707('0x40')]));if(_0x1b0232['query']['filter']){_0x56e614['where']=_[_0xd707('0x52')](_0x56e614[_0xd707('0x3f')],{'$or':_[_0xd707('0x42')](_0x56e614['attributes'],function(_0xb3aa2b){var _0x2f0ea5={};_0x2f0ea5[_0xb3aa2b]={'$like':'%'+_0x1b0232['query'][_0xd707('0x45')]+'%'};return _0x2f0ea5;})});}_0x56e614=_['merge']({},_0x56e614,_0x1b0232[_0xd707('0x4c')]);return _0x1e165b['getTags'](_0x56e614);}})['then'](function(_0x32b8d0){if(_0x32b8d0){_0x104105=_0x32b8d0['length'];if(!_0x1b0232[_0xd707('0x36')][_0xd707('0x3b')]('nolimit')){_0x56e614['limit']=qs[_0xd707('0x3c')](_0x1b0232[_0xd707('0x36')]['limit']);_0x56e614[_0xd707('0x29')]=qs[_0xd707('0x29')](_0x1b0232[_0xd707('0x36')][_0xd707('0x29')]);}return _0x1e165b[_0xd707('0x56')](_0x56e614);}})[_0xd707('0x1b')](function(_0x3f59fe){if(_0x3f59fe){return _0x3f59fe?{'count':_0x104105,'rows':_0x3f59fe}:null;}})[_0xd707('0x1b')](respondWithResult(_0x191f87,null))['catch'](handleError(_0x191f87,null));};exports[_0xd707('0x57')]=function(_0x470e8d,_0x4ba5d5,_0x518c18){if(_0x470e8d[_0xd707('0x4f')]['id']){delete _0x470e8d['body']['id'];}return db[_0xd707('0x32')][_0xd707('0x58')]({'where':{'id':_0x470e8d['params']['id']}})['then'](handleEntityNotFound(_0x4ba5d5,null))[_0xd707('0x1b')](function(_0x195a46){if(_0x195a46){return _0x195a46[_0xd707('0x57')](_0x470e8d['body'][_0xd707('0x59')]||[]);}return null;})['then'](respondWithResult(_0x4ba5d5,null))['catch'](handleError(_0x4ba5d5,null));};
\ No newline at end of file
+var _0x26b2=['merge','body','find','findOne','FreshdeskField','getSubjects','getDescriptions','getTags','Tag','setTags','ids','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','crypto','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','info','FreshdeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','sendStatus','status','json','offset','limit','Content-Range','apply','reject','update','then','destroy','end','name','send','index','rawAttributes','model','keys','query','intersection','attributes','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','map','type','key','field','options','count','includeAll','FreshdeskConfiguration','findAll','rows','params','fields'];(function(_0x5b34c0,_0x3ad403){var _0x242bd3=function(_0x51d0ce){while(--_0x51d0ce){_0x5b34c0['push'](_0x5b34c0['shift']());}};_0x242bd3(++_0x3ad403);}(_0x26b2,0xc5));var _0x226b=function(_0x3d385a,_0x37bf08){_0x3d385a=_0x3d385a-0x0;var _0x1a495f=_0x26b2[_0x3d385a];return _0x1a495f;};'use strict';var pdf=require(_0x226b('0x0'));var emlformat=require(_0x226b('0x1'));var rimraf=require(_0x226b('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x226b('0x3'));var rp=require(_0x226b('0x4'));var moment=require(_0x226b('0x5'));var BPromise=require(_0x226b('0x6'));var Mustache=require(_0x226b('0x7'));var util=require(_0x226b('0x8'));var path=require(_0x226b('0x9'));var sox=require(_0x226b('0xa'));var csv=require(_0x226b('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x226b('0xc'));var squel=require('squel');var crypto=require(_0x226b('0xd'));var jsforce=require(_0x226b('0xe'));var deskjs=require(_0x226b('0xf'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x226b('0x10'));var Redis=require(_0x226b('0x11'));var authService=require(_0x226b('0x12'));var qs=require(_0x226b('0x13'));var hardwareService=require(_0x226b('0x14'));var logger=require(_0x226b('0x15'))('api');var utils=require(_0x226b('0x16'));var config=require('../../config/environment');var db=require(_0x226b('0x17'))['db'];var jayson=require(_0x226b('0x18'));var client=jayson[_0x226b('0x19')][_0x226b('0x1a')]({'port':0x232a});function checkPasswordPattern(_0x21b041,_0x3781a8,_0x4e8ad7){if(_0x4e8ad7){var _0x22a82c=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x22a82c[_0x226b('0x1b')](_0x3781a8)){return _0x21b041;}else{throw new Error(_0x226b('0x1c'));}}else{return _0x21b041;}}function respondWithRpcPromise(_0x3a69b9,_0x4f86e8,_0x396f4a,_0x197d8e){return new BPromise(function(_0x1e83f8,_0x41cdf4){var _0x2a93f=_0x197d8e||client;return _0x2a93f[_0x226b('0x1d')](_0x3a69b9,_0x396f4a)['then'](function(_0x3c1e31){logger[_0x226b('0x1e')](_0x226b('0x1f'),_0x4f86e8,_0x226b('0x20'));logger[_0x226b('0x21')](_0x226b('0x22'),_0x4f86e8,_0x226b('0x20'),JSON['stringify'](_0x3c1e31));if(_0x3c1e31[_0x226b('0x23')]){if(_0x3c1e31[_0x226b('0x23')][_0x226b('0x24')]===0x1f4){logger['error'](_0x226b('0x1f'),_0x4f86e8,_0x3c1e31['error'][_0x226b('0x25')]);return _0x41cdf4(_0x3c1e31['error'][_0x226b('0x25')]);}logger[_0x226b('0x23')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x4f86e8,_0x3c1e31[_0x226b('0x23')][_0x226b('0x25')]);return _0x1e83f8(_0x3c1e31[_0x226b('0x23')][_0x226b('0x25')]);}else{logger[_0x226b('0x1e')](_0x226b('0x1f'),_0x4f86e8,_0x226b('0x20'));_0x1e83f8(_0x3c1e31[_0x226b('0x26')][_0x226b('0x25')]);}})[_0x226b('0x27')](function(_0x8fbd85){logger[_0x226b('0x23')](_0x226b('0x1f'),_0x4f86e8,_0x8fbd85);_0x41cdf4(_0x8fbd85);});});}function respondWithStatusCode(_0x2a5c79,_0x286a38){_0x286a38=_0x286a38||0xcc;return function(_0x5555a9){if(_0x5555a9){return _0x2a5c79[_0x226b('0x28')](_0x286a38);}return _0x2a5c79[_0x226b('0x29')](_0x286a38)['end']();};}function respondWithResult(_0x1e2053,_0x4d8e1e){_0x4d8e1e=_0x4d8e1e||0xc8;return function(_0x2bb39d){if(_0x2bb39d){return _0x1e2053[_0x226b('0x29')](_0x4d8e1e)[_0x226b('0x2a')](_0x2bb39d);}};}function respondWithFilteredResult(_0x370d72,_0x2bc294){return function(_0x5b51e0){if(_0x5b51e0){var _0x42d4ed=_0x5b51e0['count'],_0xb9c059=_0x2bc294[_0x226b('0x2b')],_0x3799d9=_0x2bc294[_0x226b('0x2b')]+_0x2bc294[_0x226b('0x2c')],_0x37c0dd;if(_0x3799d9>=_0x42d4ed){_0x3799d9=_0x42d4ed;_0x37c0dd=0xc8;}else{_0x37c0dd=0xce;}_0x370d72[_0x226b('0x29')](_0x37c0dd);return _0x370d72['set'](_0x226b('0x2d'),_0xb9c059+'-'+_0x3799d9+'/'+_0x42d4ed)[_0x226b('0x2a')](_0x5b51e0);}return null;};}function patchUpdates(_0xfabd15){return function(_0x586c93){try{jsonpatch[_0x226b('0x2e')](_0x586c93,_0xfabd15,!![]);}catch(_0x353e8e){return BPromise[_0x226b('0x2f')](_0x353e8e);}return _0x586c93['save']();};}function saveUpdates(_0x27dcca,_0xd6f7bd){return function(_0x392efd){if(_0x392efd){return _0x392efd[_0x226b('0x30')](_0x27dcca)[_0x226b('0x31')](function(_0x3e04f5){return _0x3e04f5;});}return null;};}function removeEntity(_0x25f569,_0x1be4f7){return function(_0x46bec5){if(_0x46bec5){return _0x46bec5[_0x226b('0x32')]()[_0x226b('0x31')](function(){_0x25f569[_0x226b('0x29')](0xcc)[_0x226b('0x33')]();});}};}function handleEntityNotFound(_0x50664d,_0x3fe01f){return function(_0x9cf9fb){if(!_0x9cf9fb){_0x50664d[_0x226b('0x28')](0x194);}return _0x9cf9fb;};}function handleError(_0x1d8636,_0x589845){_0x589845=_0x589845||0x1f4;return function(_0x3d4725){logger[_0x226b('0x23')](_0x3d4725['stack']);if(_0x3d4725[_0x226b('0x34')]){delete _0x3d4725[_0x226b('0x34')];}_0x1d8636[_0x226b('0x29')](_0x589845)[_0x226b('0x35')](_0x3d4725);};}exports[_0x226b('0x36')]=function(_0x1e973a,_0x4cdf7c){var _0xb3f9a6={},_0x2e53ff={},_0x53227f={'count':0x0,'rows':[]};var _0x3d16fc=db['FreshdeskConfiguration'][_0x226b('0x37')];_0x2e53ff[_0x226b('0x38')]=_[_0x226b('0x39')](_0x3d16fc);_0x2e53ff[_0x226b('0x3a')]=_['keys'](_0x1e973a[_0x226b('0x3a')]);_0x2e53ff['filters']=_[_0x226b('0x3b')](_0x2e53ff[_0x226b('0x38')],_0x2e53ff[_0x226b('0x3a')]);_0xb3f9a6['attributes']=_[_0x226b('0x3b')](_0x2e53ff[_0x226b('0x38')],qs['fields'](_0x1e973a[_0x226b('0x3a')]['fields']));_0xb3f9a6[_0x226b('0x3c')]=_0xb3f9a6['attributes'][_0x226b('0x3d')]?_0xb3f9a6[_0x226b('0x3c')]:_0x2e53ff[_0x226b('0x38')];if(!_0x1e973a[_0x226b('0x3a')][_0x226b('0x3e')](_0x226b('0x3f'))){_0xb3f9a6[_0x226b('0x2c')]=qs[_0x226b('0x2c')](_0x1e973a['query'][_0x226b('0x2c')]);_0xb3f9a6[_0x226b('0x2b')]=qs[_0x226b('0x2b')](_0x1e973a[_0x226b('0x3a')][_0x226b('0x2b')]);}_0xb3f9a6[_0x226b('0x40')]=qs[_0x226b('0x41')](_0x1e973a['query']['sort']);_0xb3f9a6[_0x226b('0x42')]=qs[_0x226b('0x43')](_[_0x226b('0x44')](_0x1e973a[_0x226b('0x3a')],_0x2e53ff[_0x226b('0x43')]));if(_0x1e973a[_0x226b('0x3a')][_0x226b('0x45')]){_0xb3f9a6['where']=_['merge'](_0xb3f9a6[_0x226b('0x42')],{'$or':_[_0x226b('0x46')](_0x3d16fc,function(_0x18097b){if(_0x18097b[_0x226b('0x47')][_0x226b('0x48')]!=='VIRTUAL'){var _0x2a9a90={};_0x2a9a90[_0x18097b[_0x226b('0x49')]]={'$like':'%'+_0x1e973a[_0x226b('0x3a')][_0x226b('0x45')]+'%'};return _0x2a9a90;}})});}_0xb3f9a6=_['merge']({},_0xb3f9a6,_0x1e973a[_0x226b('0x4a')]);var _0x4adef0={'where':_0xb3f9a6['where']};return db['FreshdeskConfiguration'][_0x226b('0x4b')](_0x4adef0)[_0x226b('0x31')](function(_0x57d535){_0x53227f['count']=_0x57d535;if(_0x1e973a[_0x226b('0x3a')][_0x226b('0x4c')]){_0xb3f9a6['include']=[{'all':!![]}];}return db[_0x226b('0x4d')][_0x226b('0x4e')](_0xb3f9a6);})[_0x226b('0x31')](function(_0x13d6a8){_0x53227f[_0x226b('0x4f')]=_0x13d6a8;return _0x53227f;})['then'](respondWithFilteredResult(_0x4cdf7c,_0xb3f9a6))[_0x226b('0x27')](handleError(_0x4cdf7c,null));};exports['show']=function(_0x258706,_0x4bf7d6){var _0x461e8e={'raw':![],'where':{'id':_0x258706[_0x226b('0x50')]['id']}},_0x322511={};_0x322511[_0x226b('0x38')]=_[_0x226b('0x39')](db[_0x226b('0x4d')][_0x226b('0x37')]);_0x322511[_0x226b('0x3a')]=_[_0x226b('0x39')](_0x258706[_0x226b('0x3a')]);_0x322511[_0x226b('0x43')]=_[_0x226b('0x3b')](_0x322511['model'],_0x322511[_0x226b('0x3a')]);_0x461e8e[_0x226b('0x3c')]=_[_0x226b('0x3b')](_0x322511[_0x226b('0x38')],qs[_0x226b('0x51')](_0x258706['query'][_0x226b('0x51')]));_0x461e8e[_0x226b('0x3c')]=_0x461e8e[_0x226b('0x3c')][_0x226b('0x3d')]?_0x461e8e[_0x226b('0x3c')]:_0x322511[_0x226b('0x38')];if(_0x258706[_0x226b('0x3a')][_0x226b('0x4c')]){_0x461e8e['include']=[{'all':!![]}];}_0x461e8e=_[_0x226b('0x52')]({},_0x461e8e,_0x258706[_0x226b('0x4a')]);return db[_0x226b('0x4d')]['find'](_0x461e8e)[_0x226b('0x31')](handleEntityNotFound(_0x4bf7d6,null))[_0x226b('0x31')](respondWithResult(_0x4bf7d6,null))[_0x226b('0x27')](handleError(_0x4bf7d6,null));};exports['create']=function(_0x3946a5,_0x343f1a){return db['FreshdeskConfiguration']['create'](_0x3946a5[_0x226b('0x53')],{})[_0x226b('0x31')](respondWithResult(_0x343f1a,0xc9))[_0x226b('0x27')](handleError(_0x343f1a,null));};exports[_0x226b('0x30')]=function(_0x38ec61,_0x3e7ac7){if(_0x38ec61[_0x226b('0x53')]['id']){delete _0x38ec61[_0x226b('0x53')]['id'];}return db['FreshdeskConfiguration'][_0x226b('0x54')]({'where':{'id':_0x38ec61['params']['id']}})[_0x226b('0x31')](handleEntityNotFound(_0x3e7ac7,null))[_0x226b('0x31')](saveUpdates(_0x38ec61[_0x226b('0x53')],null))[_0x226b('0x31')](respondWithResult(_0x3e7ac7,null))[_0x226b('0x27')](handleError(_0x3e7ac7,null));};exports[_0x226b('0x32')]=function(_0x2a823e,_0x5dd864){return db[_0x226b('0x4d')][_0x226b('0x54')]({'where':{'id':_0x2a823e[_0x226b('0x50')]['id']}})[_0x226b('0x31')](handleEntityNotFound(_0x5dd864,null))['then'](removeEntity(_0x5dd864,null))[_0x226b('0x27')](handleError(_0x5dd864,null));};exports['getFields']=function(_0x774284,_0x1a4fd4,_0x5c2d3f){var _0x30c46b={};var _0x2c17ff={};var _0x22c3ec;var _0x204b2a;return db['FreshdeskConfiguration'][_0x226b('0x55')]({'where':{'id':_0x774284[_0x226b('0x50')]['id']}})['then'](handleEntityNotFound(_0x1a4fd4,null))[_0x226b('0x31')](function(_0x487393){if(_0x487393){_0x22c3ec=_0x487393;_0x2c17ff['model']=_[_0x226b('0x39')](db[_0x226b('0x56')][_0x226b('0x37')]);_0x2c17ff['query']=_[_0x226b('0x39')](_0x774284['query']);_0x2c17ff[_0x226b('0x43')]=_['intersection'](_0x2c17ff['model'],_0x2c17ff['query']);_0x30c46b['attributes']=_[_0x226b('0x3b')](_0x2c17ff[_0x226b('0x38')],qs[_0x226b('0x51')](_0x774284[_0x226b('0x3a')][_0x226b('0x51')]));_0x30c46b['attributes']=_0x30c46b[_0x226b('0x3c')]['length']?_0x30c46b[_0x226b('0x3c')]:_0x2c17ff[_0x226b('0x38')];_0x30c46b['order']=qs[_0x226b('0x41')](_0x774284[_0x226b('0x3a')][_0x226b('0x41')]);_0x30c46b[_0x226b('0x42')]=qs[_0x226b('0x43')](_['pick'](_0x774284['query'],_0x2c17ff['filters']));if(_0x774284[_0x226b('0x3a')]['filter']){_0x30c46b[_0x226b('0x42')]=_['merge'](_0x30c46b[_0x226b('0x42')],{'$or':_[_0x226b('0x46')](_0x30c46b[_0x226b('0x3c')],function(_0x2d5417){var _0x521b3f={};_0x521b3f[_0x2d5417]={'$like':'%'+_0x774284[_0x226b('0x3a')][_0x226b('0x45')]+'%'};return _0x521b3f;})});}_0x30c46b=_[_0x226b('0x52')]({},_0x30c46b,_0x774284['options']);return _0x22c3ec['getFields'](_0x30c46b);}})[_0x226b('0x31')](function(_0x2b8e42){if(_0x2b8e42){_0x204b2a=_0x2b8e42[_0x226b('0x3d')];if(!_0x774284[_0x226b('0x3a')][_0x226b('0x3e')]('nolimit')){_0x30c46b[_0x226b('0x2c')]=qs['limit'](_0x774284[_0x226b('0x3a')][_0x226b('0x2c')]);_0x30c46b['offset']=qs['offset'](_0x774284[_0x226b('0x3a')][_0x226b('0x2b')]);}return _0x22c3ec['getFields'](_0x30c46b);}})[_0x226b('0x31')](function(_0x5d6a10){if(_0x5d6a10){return _0x5d6a10?{'count':_0x204b2a,'rows':_0x5d6a10}:null;}})[_0x226b('0x31')](respondWithResult(_0x1a4fd4,null))[_0x226b('0x27')](handleError(_0x1a4fd4,null));};exports['getSubjects']=function(_0x36aa2d,_0x5eb9e1,_0xaef518){var _0x5efe42={};var _0x46d025={};var _0x3366cc;var _0x4acf8a;return db[_0x226b('0x4d')][_0x226b('0x55')]({'where':{'id':_0x36aa2d[_0x226b('0x50')]['id']}})[_0x226b('0x31')](handleEntityNotFound(_0x5eb9e1,null))['then'](function(_0x1598f7){if(_0x1598f7){_0x3366cc=_0x1598f7;_0x46d025[_0x226b('0x38')]=_['keys'](db[_0x226b('0x56')][_0x226b('0x37')]);_0x46d025[_0x226b('0x3a')]=_[_0x226b('0x39')](_0x36aa2d[_0x226b('0x3a')]);_0x46d025['filters']=_[_0x226b('0x3b')](_0x46d025[_0x226b('0x38')],_0x46d025['query']);_0x5efe42[_0x226b('0x3c')]=_['intersection'](_0x46d025[_0x226b('0x38')],qs[_0x226b('0x51')](_0x36aa2d['query'][_0x226b('0x51')]));_0x5efe42[_0x226b('0x3c')]=_0x5efe42['attributes']['length']?_0x5efe42['attributes']:_0x46d025[_0x226b('0x38')];_0x5efe42[_0x226b('0x40')]=qs[_0x226b('0x41')](_0x36aa2d[_0x226b('0x3a')][_0x226b('0x41')]);_0x5efe42['where']=qs['filters'](_[_0x226b('0x44')](_0x36aa2d[_0x226b('0x3a')],_0x46d025[_0x226b('0x43')]));if(_0x36aa2d[_0x226b('0x3a')][_0x226b('0x45')]){_0x5efe42[_0x226b('0x42')]=_[_0x226b('0x52')](_0x5efe42[_0x226b('0x42')],{'$or':_[_0x226b('0x46')](_0x5efe42[_0x226b('0x3c')],function(_0x301a9d){var _0x1571ed={};_0x1571ed[_0x301a9d]={'$like':'%'+_0x36aa2d['query'][_0x226b('0x45')]+'%'};return _0x1571ed;})});}_0x5efe42=_['merge']({},_0x5efe42,_0x36aa2d[_0x226b('0x4a')]);return _0x3366cc[_0x226b('0x57')](_0x5efe42);}})[_0x226b('0x31')](function(_0x559034){if(_0x559034){_0x4acf8a=_0x559034[_0x226b('0x3d')];if(!_0x36aa2d[_0x226b('0x3a')][_0x226b('0x3e')](_0x226b('0x3f'))){_0x5efe42[_0x226b('0x2c')]=qs[_0x226b('0x2c')](_0x36aa2d[_0x226b('0x3a')][_0x226b('0x2c')]);_0x5efe42[_0x226b('0x2b')]=qs['offset'](_0x36aa2d[_0x226b('0x3a')]['offset']);}return _0x3366cc[_0x226b('0x57')](_0x5efe42);}})['then'](function(_0xa1a28a){if(_0xa1a28a){return _0xa1a28a?{'count':_0x4acf8a,'rows':_0xa1a28a}:null;}})[_0x226b('0x31')](respondWithResult(_0x5eb9e1,null))[_0x226b('0x27')](handleError(_0x5eb9e1,null));};exports['getDescriptions']=function(_0x319384,_0xf0190f,_0xd71b91){var _0x50c362={};var _0x2704be={};var _0x49ef44;var _0x2bf878;return db[_0x226b('0x4d')][_0x226b('0x55')]({'where':{'id':_0x319384['params']['id']}})[_0x226b('0x31')](handleEntityNotFound(_0xf0190f,null))[_0x226b('0x31')](function(_0x48a64c){if(_0x48a64c){_0x49ef44=_0x48a64c;_0x2704be[_0x226b('0x38')]=_['keys'](db[_0x226b('0x56')][_0x226b('0x37')]);_0x2704be[_0x226b('0x3a')]=_[_0x226b('0x39')](_0x319384['query']);_0x2704be[_0x226b('0x43')]=_[_0x226b('0x3b')](_0x2704be['model'],_0x2704be[_0x226b('0x3a')]);_0x50c362[_0x226b('0x3c')]=_[_0x226b('0x3b')](_0x2704be['model'],qs[_0x226b('0x51')](_0x319384[_0x226b('0x3a')][_0x226b('0x51')]));_0x50c362[_0x226b('0x3c')]=_0x50c362[_0x226b('0x3c')][_0x226b('0x3d')]?_0x50c362[_0x226b('0x3c')]:_0x2704be[_0x226b('0x38')];_0x50c362['order']=qs[_0x226b('0x41')](_0x319384[_0x226b('0x3a')][_0x226b('0x41')]);_0x50c362['where']=qs[_0x226b('0x43')](_['pick'](_0x319384['query'],_0x2704be['filters']));if(_0x319384['query'][_0x226b('0x45')]){_0x50c362[_0x226b('0x42')]=_[_0x226b('0x52')](_0x50c362['where'],{'$or':_[_0x226b('0x46')](_0x50c362[_0x226b('0x3c')],function(_0x3f9a8c){var _0x12128b={};_0x12128b[_0x3f9a8c]={'$like':'%'+_0x319384['query'][_0x226b('0x45')]+'%'};return _0x12128b;})});}_0x50c362=_[_0x226b('0x52')]({},_0x50c362,_0x319384[_0x226b('0x4a')]);return _0x49ef44[_0x226b('0x58')](_0x50c362);}})['then'](function(_0x474904){if(_0x474904){_0x2bf878=_0x474904['length'];if(!_0x319384[_0x226b('0x3a')][_0x226b('0x3e')](_0x226b('0x3f'))){_0x50c362[_0x226b('0x2c')]=qs[_0x226b('0x2c')](_0x319384['query']['limit']);_0x50c362[_0x226b('0x2b')]=qs[_0x226b('0x2b')](_0x319384[_0x226b('0x3a')][_0x226b('0x2b')]);}return _0x49ef44[_0x226b('0x58')](_0x50c362);}})[_0x226b('0x31')](function(_0x8134ca){if(_0x8134ca){return _0x8134ca?{'count':_0x2bf878,'rows':_0x8134ca}:null;}})['then'](respondWithResult(_0xf0190f,null))[_0x226b('0x27')](handleError(_0xf0190f,null));};exports[_0x226b('0x59')]=function(_0x579718,_0x59f832,_0x1313aa){var _0x26b330={};var _0x3ef69e={};var _0x156185;var _0x25d0d6;return db[_0x226b('0x4d')][_0x226b('0x55')]({'where':{'id':_0x579718['params']['id']}})[_0x226b('0x31')](handleEntityNotFound(_0x59f832,null))[_0x226b('0x31')](function(_0x14e9ff){if(_0x14e9ff){_0x156185=_0x14e9ff;_0x3ef69e[_0x226b('0x38')]=_[_0x226b('0x39')](db[_0x226b('0x5a')]['rawAttributes']);_0x3ef69e['query']=_[_0x226b('0x39')](_0x579718[_0x226b('0x3a')]);_0x3ef69e['filters']=_[_0x226b('0x3b')](_0x3ef69e[_0x226b('0x38')],_0x3ef69e[_0x226b('0x3a')]);_0x26b330[_0x226b('0x3c')]=_[_0x226b('0x3b')](_0x3ef69e[_0x226b('0x38')],qs[_0x226b('0x51')](_0x579718[_0x226b('0x3a')][_0x226b('0x51')]));_0x26b330['attributes']=_0x26b330[_0x226b('0x3c')]['length']?_0x26b330[_0x226b('0x3c')]:_0x3ef69e[_0x226b('0x38')];_0x26b330[_0x226b('0x40')]=qs[_0x226b('0x41')](_0x579718[_0x226b('0x3a')]['sort']);_0x26b330['where']=qs[_0x226b('0x43')](_['pick'](_0x579718[_0x226b('0x3a')],_0x3ef69e['filters']));if(_0x579718[_0x226b('0x3a')][_0x226b('0x45')]){_0x26b330[_0x226b('0x42')]=_[_0x226b('0x52')](_0x26b330['where'],{'$or':_[_0x226b('0x46')](_0x26b330[_0x226b('0x3c')],function(_0x24665f){var _0x2ab202={};_0x2ab202[_0x24665f]={'$like':'%'+_0x579718[_0x226b('0x3a')][_0x226b('0x45')]+'%'};return _0x2ab202;})});}_0x26b330=_['merge']({},_0x26b330,_0x579718[_0x226b('0x4a')]);return _0x156185[_0x226b('0x59')](_0x26b330);}})[_0x226b('0x31')](function(_0x184ca6){if(_0x184ca6){_0x25d0d6=_0x184ca6['length'];if(!_0x579718[_0x226b('0x3a')][_0x226b('0x3e')](_0x226b('0x3f'))){_0x26b330[_0x226b('0x2c')]=qs[_0x226b('0x2c')](_0x579718[_0x226b('0x3a')][_0x226b('0x2c')]);_0x26b330[_0x226b('0x2b')]=qs[_0x226b('0x2b')](_0x579718[_0x226b('0x3a')]['offset']);}return _0x156185[_0x226b('0x59')](_0x26b330);}})['then'](function(_0x3a9021){if(_0x3a9021){return _0x3a9021?{'count':_0x25d0d6,'rows':_0x3a9021}:null;}})[_0x226b('0x31')](respondWithResult(_0x59f832,null))[_0x226b('0x27')](handleError(_0x59f832,null));};exports[_0x226b('0x5b')]=function(_0x15064b,_0x4e9842,_0x32d680){if(_0x15064b['body']['id']){delete _0x15064b['body']['id'];}return db['FreshdeskConfiguration'][_0x226b('0x55')]({'where':{'id':_0x15064b[_0x226b('0x50')]['id']}})[_0x226b('0x31')](handleEntityNotFound(_0x4e9842,null))['then'](function(_0x166377){if(_0x166377){return _0x166377[_0x226b('0x5b')](_0x15064b[_0x226b('0x53')][_0x226b('0x5c')]||[]);}return null;})['then'](respondWithResult(_0x4e9842,null))['catch'](handleError(_0x4e9842,null));};
\ No newline at end of file
index 0e208ed..0641d9d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc8a2=['bluebird','request-promise','exports','define','FreshdeskConfiguration','int_freshdesk_configurations','lodash','util','../../config/logger'];(function(_0x49873f,_0xebd2b8){var _0x518b6d=function(_0x258b41){while(--_0x258b41){_0x49873f['push'](_0x49873f['shift']());}};_0x518b6d(++_0xebd2b8);}(_0xc8a2,0x14a));var _0x2c8a=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xc8a2[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x2c8a('0x0'));var util=require(_0x2c8a('0x1'));var logger=require(_0x2c8a('0x2'))('api');var moment=require('moment');var BPromise=require(_0x2c8a('0x3'));var rp=require(_0x2c8a('0x4'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require('./intFreshdeskConfiguration.attributes');module[_0x2c8a('0x5')]=function(_0x2f55c8,_0x3ede46){return _0x2f55c8[_0x2c8a('0x6')](_0x2c8a('0x7'),attributes,{'tableName':_0x2c8a('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x04de=['rimraf','../../config/environment','./intFreshdeskConfiguration.attributes','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path'];(function(_0x2fdee1,_0x466858){var _0x2c5533=function(_0x1f34de){while(--_0x1f34de){_0x2fdee1['push'](_0x2fdee1['shift']());}};_0x2c5533(++_0x466858);}(_0x04de,0x10b));var _0xe04d=function(_0x5063a4,_0x554767){_0x5063a4=_0x5063a4-0x0;var _0x467a81=_0x04de[_0x5063a4];return _0x467a81;};'use strict';var _=require(_0xe04d('0x0'));var util=require(_0xe04d('0x1'));var logger=require(_0xe04d('0x2'))(_0xe04d('0x3'));var moment=require(_0xe04d('0x4'));var BPromise=require(_0xe04d('0x5'));var rp=require(_0xe04d('0x6'));var fs=require('fs');var path=require(_0xe04d('0x7'));var rimraf=require(_0xe04d('0x8'));var config=require(_0xe04d('0x9'));var attributes=require(_0xe04d('0xa'));module['exports']=function(_0x3013f2,_0x423575){return _0x3013f2['define']('FreshdeskConfiguration',attributes,{'tableName':'int_freshdesk_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index bc0d7af..bb814c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1037=['FreshdeskConfiguration,\x20%s,\x20%s','request\x20sent','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','moment','bluebird','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','info'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x1037,0xf0));var _0x7103=function(_0xe15270,_0x227d06){_0xe15270=_0xe15270-0x0;var _0x1e813b=_0x1037[_0xe15270];return _0x1e813b;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x7103('0x0'));var BPromise=require(_0x7103('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7103('0x2'));var db=require(_0x7103('0x3'))['db'];var utils=require(_0x7103('0x4'));var logger=require('../../config/logger')(_0x7103('0x5'));var config=require(_0x7103('0x6'));var jayson=require(_0x7103('0x7'));var client=jayson[_0x7103('0x8')][_0x7103('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x43f966,_0x455256,_0x5eabf1){return new BPromise(function(_0x3399b1,_0x189efe){return client[_0x7103('0xa')](_0x43f966,_0x5eabf1)['then'](function(_0x107a2d){logger[_0x7103('0xb')](_0x7103('0xc'),_0x455256,_0x7103('0xd'));logger['debug'](_0x7103('0xe'),_0x455256,'request\x20sent',JSON[_0x7103('0xf')](_0x107a2d));if(_0x107a2d[_0x7103('0x10')]){if(_0x107a2d['error'][_0x7103('0x11')]===0x1f4){logger['error'](_0x7103('0xc'),_0x455256,_0x107a2d[_0x7103('0x10')][_0x7103('0x12')]);return _0x189efe(_0x107a2d[_0x7103('0x10')][_0x7103('0x12')]);}logger[_0x7103('0x10')](_0x7103('0xc'),_0x455256,_0x107a2d[_0x7103('0x10')]['message']);return _0x3399b1(_0x107a2d[_0x7103('0x10')]['message']);}else{logger[_0x7103('0xb')](_0x7103('0xc'),_0x455256,_0x7103('0xd'));_0x3399b1(_0x107a2d[_0x7103('0x13')][_0x7103('0x12')]);}})[_0x7103('0x14')](function(_0x2c14e7){logger[_0x7103('0x10')](_0x7103('0xc'),_0x455256,_0x2c14e7);_0x189efe(_0x2c14e7);});});}
\ No newline at end of file
+var _0xcb55=['message','info','catch','lodash','moment','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','then','FreshdeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x4aba15,_0x4e90aa){var _0x1c8122=function(_0x568dba){while(--_0x568dba){_0x4aba15['push'](_0x4aba15['shift']());}};_0x1c8122(++_0x4e90aa);}(_0xcb55,0x1a5));var _0x5cb5=function(_0xf6a46,_0x9b06b9){_0xf6a46=_0xf6a46-0x0;var _0x2b51f5=_0xcb55[_0xf6a46];return _0x2b51f5;};'use strict';var _=require(_0x5cb5('0x0'));var util=require('util');var moment=require(_0x5cb5('0x1'));var BPromise=require('bluebird');var rs=require(_0x5cb5('0x2'));var fs=require('fs');var Redis=require(_0x5cb5('0x3'));var db=require(_0x5cb5('0x4'))['db'];var utils=require(_0x5cb5('0x5'));var logger=require('../../config/logger')(_0x5cb5('0x6'));var config=require(_0x5cb5('0x7'));var jayson=require(_0x5cb5('0x8'));var client=jayson[_0x5cb5('0x9')][_0x5cb5('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x5de53f,_0x5034eb,_0x251bc4){return new BPromise(function(_0xee9b73,_0x13cdb7){return client['request'](_0x5de53f,_0x251bc4)[_0x5cb5('0xb')](function(_0x206b73){logger['info'](_0x5cb5('0xc'),_0x5034eb,_0x5cb5('0xd'));logger[_0x5cb5('0xe')](_0x5cb5('0xf'),_0x5034eb,'request\x20sent',JSON[_0x5cb5('0x10')](_0x206b73));if(_0x206b73[_0x5cb5('0x11')]){if(_0x206b73['error'][_0x5cb5('0x12')]===0x1f4){logger[_0x5cb5('0x11')](_0x5cb5('0xc'),_0x5034eb,_0x206b73[_0x5cb5('0x11')][_0x5cb5('0x13')]);return _0x13cdb7(_0x206b73[_0x5cb5('0x11')][_0x5cb5('0x13')]);}logger[_0x5cb5('0x11')](_0x5cb5('0xc'),_0x5034eb,_0x206b73[_0x5cb5('0x11')][_0x5cb5('0x13')]);return _0xee9b73(_0x206b73['error'][_0x5cb5('0x13')]);}else{logger[_0x5cb5('0x14')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x5034eb,_0x5cb5('0xd'));_0xee9b73(_0x206b73['result']['message']);}})[_0x5cb5('0x15')](function(_0x1603d5){logger[_0x5cb5('0x11')](_0x5cb5('0xc'),_0x5034eb,_0x1603d5);_0x13cdb7(_0x1603d5);});});}
\ No newline at end of file
index 32a65f5..2319233 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0b3a=['path','Router','../../components/auth/service','./intFreshdeskField.controller','isAuthenticated','/:id','post','create','put','update','destroy','exports','util'];(function(_0x5e1043,_0x5bf223){var _0x2cd368=function(_0x22a91b){while(--_0x22a91b){_0x5e1043['push'](_0x5e1043['shift']());}};_0x2cd368(++_0x5bf223);}(_0x0b3a,0x178));var _0xa0b3=function(_0x53d172,_0x46611b){_0x53d172=_0x53d172-0x0;var _0x1bd0a2=_0x0b3a[_0x53d172];return _0x1bd0a2;};'use strict';var multer=require('multer');var util=require(_0xa0b3('0x0'));var path=require(_0xa0b3('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0xa0b3('0x2')]();var auth=require(_0xa0b3('0x3'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xa0b3('0x4'));router['get']('/',auth[_0xa0b3('0x5')](),controller['index']);router['get'](_0xa0b3('0x6'),auth[_0xa0b3('0x5')](),controller['show']);router[_0xa0b3('0x7')]('/',auth[_0xa0b3('0x5')](),controller[_0xa0b3('0x8')]);router[_0xa0b3('0x9')](_0xa0b3('0x6'),auth[_0xa0b3('0x5')](),controller[_0xa0b3('0xa')]);router['delete'](_0xa0b3('0x6'),auth['isAuthenticated'](),controller[_0xa0b3('0xb')]);module[_0xa0b3('0xc')]=router;
\ No newline at end of file
+var _0xf993=['exports','multer','util','path','connect-timeout','express','Router','../../config/environment','get','isAuthenticated','index','show','post','create','put','update','delete','/:id'];(function(_0x2226c1,_0x2bed75){var _0x178716=function(_0x54bb7e){while(--_0x54bb7e){_0x2226c1['push'](_0x2226c1['shift']());}};_0x178716(++_0x2bed75);}(_0xf993,0x1d5));var _0x3f99=function(_0x55002e,_0x5debdd){_0x55002e=_0x55002e-0x0;var _0x573b1f=_0xf993[_0x55002e];return _0x573b1f;};'use strict';var multer=require(_0x3f99('0x0'));var util=require(_0x3f99('0x1'));var path=require(_0x3f99('0x2'));var timeout=require(_0x3f99('0x3'));var express=require(_0x3f99('0x4'));var router=express[_0x3f99('0x5')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x3f99('0x6'));var controller=require('./intFreshdeskField.controller');router[_0x3f99('0x7')]('/',auth[_0x3f99('0x8')](),controller[_0x3f99('0x9')]);router['get']('/:id',auth[_0x3f99('0x8')](),controller[_0x3f99('0xa')]);router[_0x3f99('0xb')]('/',auth['isAuthenticated'](),controller[_0x3f99('0xc')]);router[_0x3f99('0xd')]('/:id',auth['isAuthenticated'](),controller[_0x3f99('0xe')]);router[_0x3f99('0xf')](_0x3f99('0x10'),auth[_0x3f99('0x8')](),controller['destroy']);module[_0x3f99('0x11')]=router;
\ No newline at end of file
index 429efe5..58a2841 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x702d=['STRING','customVariable','BOOLEAN','sequelize','exports','ENUM','string','variable','keyValue'];(function(_0x3964c3,_0x566ce6){var _0x34286a=function(_0x539a54){while(--_0x539a54){_0x3964c3['push'](_0x3964c3['shift']());}};_0x34286a(++_0x566ce6);}(_0x702d,0x147));var _0xd702=function(_0x45461d,_0x248e3a){_0x45461d=_0x45461d-0x0;var _0x162da6=_0x702d[_0x45461d];return _0x162da6;};'use strict';var Sequelize=require(_0xd702('0x0'));module[_0xd702('0x1')]={'type':{'type':Sequelize[_0xd702('0x2')](_0xd702('0x3'),_0xd702('0x4'),'customVariable',_0xd702('0x5')),'defaultValue':_0xd702('0x3')},'content':{'type':Sequelize[_0xd702('0x6')]},'key':{'type':Sequelize[_0xd702('0x6')]},'keyType':{'type':Sequelize['ENUM'](_0xd702('0x3'),'variable',_0xd702('0x7'))},'keyContent':{'type':Sequelize[_0xd702('0x6')]},'idField':{'type':Sequelize[_0xd702('0x6')]},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize[_0xd702('0x8')],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x3c81=['customVariable','BOOLEAN','sequelize','exports','string','variable','STRING','ENUM'];(function(_0x46698a,_0x8de1e4){var _0x356db0=function(_0x19e83c){while(--_0x19e83c){_0x46698a['push'](_0x46698a['shift']());}};_0x356db0(++_0x8de1e4);}(_0x3c81,0x102));var _0x13c8=function(_0x47c5a6,_0xa6ce77){_0x47c5a6=_0x47c5a6-0x0;var _0x4da519=_0x3c81[_0x47c5a6];return _0x4da519;};'use strict';var Sequelize=require(_0x13c8('0x0'));module[_0x13c8('0x1')]={'type':{'type':Sequelize['ENUM'](_0x13c8('0x2'),_0x13c8('0x3'),'customVariable','keyValue'),'defaultValue':'string'},'content':{'type':Sequelize['STRING']},'key':{'type':Sequelize[_0x13c8('0x4')]},'keyType':{'type':Sequelize[_0x13c8('0x5')](_0x13c8('0x2'),_0x13c8('0x3'),_0x13c8('0x6'))},'keyContent':{'type':Sequelize[_0x13c8('0x4')]},'idField':{'type':Sequelize[_0x13c8('0x4')]},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize[_0x13c8('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 62dee81..a371be3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa899=['create','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','path','sox','to-csv','ejs','crypto','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','sendStatus','status','end','json','offset','set','Content-Range','apply','reject','save','update','then','destroy','name','FreshdeskField','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','nolimit','limit','order','sort','where','pick','filter','merge','map','key','VIRTUAL','field','options','count','include','findAll','rows','catch','params','find'];(function(_0x502c83,_0x1db15d){var _0x40dd62=function(_0x405dfa){while(--_0x405dfa){_0x502c83['push'](_0x502c83['shift']());}};_0x40dd62(++_0x1db15d);}(_0xa899,0x147));var _0x9a89=function(_0x4ed520,_0x21be63){_0x4ed520=_0x4ed520-0x0;var _0x4415a6=_0xa899[_0x4ed520];return _0x4415a6;};'use strict';var pdf=require(_0x9a89('0x0'));var emlformat=require(_0x9a89('0x1'));var rimraf=require(_0x9a89('0x2'));var zipdir=require(_0x9a89('0x3'));var jsonpatch=require(_0x9a89('0x4'));var rp=require('request-promise');var moment=require(_0x9a89('0x5'));var BPromise=require(_0x9a89('0x6'));var Mustache=require(_0x9a89('0x7'));var util=require('util');var path=require(_0x9a89('0x8'));var sox=require(_0x9a89('0x9'));var csv=require(_0x9a89('0xa'));var ejs=require(_0x9a89('0xb'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x9a89('0xc'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x9a89('0xa'));var querystring=require('querystring');var Papa=require(_0x9a89('0xd'));var Redis=require(_0x9a89('0xe'));var authService=require('../../components/auth/service');var qs=require(_0x9a89('0xf'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x9a89('0x10'))(_0x9a89('0x11'));var utils=require(_0x9a89('0x12'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x56ef60,_0x4e3665){_0x4e3665=_0x4e3665||0xcc;return function(_0x5a1723){if(_0x5a1723){return _0x56ef60[_0x9a89('0x13')](_0x4e3665);}return _0x56ef60[_0x9a89('0x14')](_0x4e3665)[_0x9a89('0x15')]();};}function respondWithResult(_0x2d4c40,_0x4c03ae){_0x4c03ae=_0x4c03ae||0xc8;return function(_0x4f53bd){if(_0x4f53bd){return _0x2d4c40['status'](_0x4c03ae)[_0x9a89('0x16')](_0x4f53bd);}};}function respondWithFilteredResult(_0x554235,_0x5df49b){return function(_0x27ec51){if(_0x27ec51){var _0x3630e7=_0x27ec51['count'],_0x20d568=_0x5df49b['offset'],_0x266832=_0x5df49b[_0x9a89('0x17')]+_0x5df49b['limit'],_0x24af1a;if(_0x266832>=_0x3630e7){_0x266832=_0x3630e7;_0x24af1a=0xc8;}else{_0x24af1a=0xce;}_0x554235['status'](_0x24af1a);return _0x554235[_0x9a89('0x18')](_0x9a89('0x19'),_0x20d568+'-'+_0x266832+'/'+_0x3630e7)['json'](_0x27ec51);}return null;};}function patchUpdates(_0x261624){return function(_0x535dd2){try{jsonpatch[_0x9a89('0x1a')](_0x535dd2,_0x261624,!![]);}catch(_0x51a5fc){return BPromise[_0x9a89('0x1b')](_0x51a5fc);}return _0x535dd2[_0x9a89('0x1c')]();};}function saveUpdates(_0x2126a2,_0xcad715){return function(_0x3015a4){if(_0x3015a4){return _0x3015a4[_0x9a89('0x1d')](_0x2126a2)[_0x9a89('0x1e')](function(_0x1e6a37){return _0x1e6a37;});}return null;};}function removeEntity(_0x2ce716,_0x516c5f){return function(_0x2a58fb){if(_0x2a58fb){return _0x2a58fb[_0x9a89('0x1f')]()[_0x9a89('0x1e')](function(){_0x2ce716[_0x9a89('0x14')](0xcc)[_0x9a89('0x15')]();});}};}function handleEntityNotFound(_0x4cd232,_0x34d40b){return function(_0x29061f){if(!_0x29061f){_0x4cd232['sendStatus'](0x194);}return _0x29061f;};}function handleError(_0x4e7ba6,_0x29bb08){_0x29bb08=_0x29bb08||0x1f4;return function(_0x3fa08d){logger['error'](_0x3fa08d['stack']);if(_0x3fa08d[_0x9a89('0x20')]){delete _0x3fa08d[_0x9a89('0x20')];}_0x4e7ba6[_0x9a89('0x14')](_0x29bb08)['send'](_0x3fa08d);};}exports['index']=function(_0x447fd4,_0x3ee5ef){var _0x1985b2={},_0x4f9cfa={},_0x3efa4d={'count':0x0,'rows':[]};var _0xe46a88=db[_0x9a89('0x21')][_0x9a89('0x22')];_0x4f9cfa[_0x9a89('0x23')]=_[_0x9a89('0x24')](_0xe46a88);_0x4f9cfa[_0x9a89('0x25')]=_[_0x9a89('0x24')](_0x447fd4[_0x9a89('0x25')]);_0x4f9cfa[_0x9a89('0x26')]=_[_0x9a89('0x27')](_0x4f9cfa[_0x9a89('0x23')],_0x4f9cfa[_0x9a89('0x25')]);_0x1985b2['attributes']=_[_0x9a89('0x27')](_0x4f9cfa['model'],qs[_0x9a89('0x28')](_0x447fd4[_0x9a89('0x25')][_0x9a89('0x28')]));_0x1985b2[_0x9a89('0x29')]=_0x1985b2['attributes'][_0x9a89('0x2a')]?_0x1985b2[_0x9a89('0x29')]:_0x4f9cfa[_0x9a89('0x23')];if(!_0x447fd4[_0x9a89('0x25')]['hasOwnProperty'](_0x9a89('0x2b'))){_0x1985b2[_0x9a89('0x2c')]=qs[_0x9a89('0x2c')](_0x447fd4[_0x9a89('0x25')][_0x9a89('0x2c')]);_0x1985b2['offset']=qs[_0x9a89('0x17')](_0x447fd4[_0x9a89('0x25')][_0x9a89('0x17')]);}_0x1985b2[_0x9a89('0x2d')]=qs[_0x9a89('0x2e')](_0x447fd4[_0x9a89('0x25')][_0x9a89('0x2e')]);_0x1985b2[_0x9a89('0x2f')]=qs[_0x9a89('0x26')](_[_0x9a89('0x30')](_0x447fd4[_0x9a89('0x25')],_0x4f9cfa[_0x9a89('0x26')]));if(_0x447fd4['query'][_0x9a89('0x31')]){_0x1985b2[_0x9a89('0x2f')]=_[_0x9a89('0x32')](_0x1985b2['where'],{'$or':_[_0x9a89('0x33')](_0xe46a88,function(_0x2b37e5){if(_0x2b37e5['type'][_0x9a89('0x34')]!==_0x9a89('0x35')){var _0x4798a8={};_0x4798a8[_0x2b37e5[_0x9a89('0x36')]]={'$like':'%'+_0x447fd4[_0x9a89('0x25')][_0x9a89('0x31')]+'%'};return _0x4798a8;}})});}_0x1985b2=_[_0x9a89('0x32')]({},_0x1985b2,_0x447fd4[_0x9a89('0x37')]);var _0x47de98={'where':_0x1985b2[_0x9a89('0x2f')]};return db[_0x9a89('0x21')][_0x9a89('0x38')](_0x47de98)[_0x9a89('0x1e')](function(_0x252e43){_0x3efa4d[_0x9a89('0x38')]=_0x252e43;if(_0x447fd4[_0x9a89('0x25')]['includeAll']){_0x1985b2[_0x9a89('0x39')]=[{'all':!![]}];}return db[_0x9a89('0x21')][_0x9a89('0x3a')](_0x1985b2);})['then'](function(_0x9da2cd){_0x3efa4d[_0x9a89('0x3b')]=_0x9da2cd;return _0x3efa4d;})['then'](respondWithFilteredResult(_0x3ee5ef,_0x1985b2))[_0x9a89('0x3c')](handleError(_0x3ee5ef,null));};exports['show']=function(_0x24f6d0,_0x1a970c){var _0x362a12={'raw':!![],'where':{'id':_0x24f6d0[_0x9a89('0x3d')]['id']}},_0x5917d4={};_0x5917d4[_0x9a89('0x23')]=_['keys'](db[_0x9a89('0x21')][_0x9a89('0x22')]);_0x5917d4[_0x9a89('0x25')]=_['keys'](_0x24f6d0[_0x9a89('0x25')]);_0x5917d4[_0x9a89('0x26')]=_[_0x9a89('0x27')](_0x5917d4[_0x9a89('0x23')],_0x5917d4[_0x9a89('0x25')]);_0x362a12['attributes']=_[_0x9a89('0x27')](_0x5917d4[_0x9a89('0x23')],qs[_0x9a89('0x28')](_0x24f6d0[_0x9a89('0x25')]['fields']));_0x362a12[_0x9a89('0x29')]=_0x362a12[_0x9a89('0x29')][_0x9a89('0x2a')]?_0x362a12[_0x9a89('0x29')]:_0x5917d4[_0x9a89('0x23')];if(_0x24f6d0[_0x9a89('0x25')]['includeAll']){_0x362a12[_0x9a89('0x39')]=[{'all':!![]}];}_0x362a12=_[_0x9a89('0x32')]({},_0x362a12,_0x24f6d0['options']);return db[_0x9a89('0x21')][_0x9a89('0x3e')](_0x362a12)[_0x9a89('0x1e')](handleEntityNotFound(_0x1a970c,null))[_0x9a89('0x1e')](respondWithResult(_0x1a970c,null))[_0x9a89('0x3c')](handleError(_0x1a970c,null));};exports[_0x9a89('0x3f')]=function(_0x49fdce,_0x1d66b6){return db['FreshdeskField'][_0x9a89('0x3f')](_0x49fdce[_0x9a89('0x40')],{})[_0x9a89('0x1e')](respondWithResult(_0x1d66b6,0xc9))[_0x9a89('0x3c')](handleError(_0x1d66b6,null));};exports[_0x9a89('0x1d')]=function(_0x2aff6d,_0x2a78bf){if(_0x2aff6d[_0x9a89('0x40')]['id']){delete _0x2aff6d[_0x9a89('0x40')]['id'];}return db['FreshdeskField'][_0x9a89('0x3e')]({'where':{'id':_0x2aff6d[_0x9a89('0x3d')]['id']}})['then'](handleEntityNotFound(_0x2a78bf,null))['then'](saveUpdates(_0x2aff6d[_0x9a89('0x40')],null))[_0x9a89('0x1e')](respondWithResult(_0x2a78bf,null))[_0x9a89('0x3c')](handleError(_0x2a78bf,null));};exports['destroy']=function(_0x8d0cc8,_0xb1e5c5){return db['FreshdeskField'][_0x9a89('0x3e')]({'where':{'id':_0x8d0cc8[_0x9a89('0x3d')]['id']}})['then'](handleEntityNotFound(_0xb1e5c5,null))[_0x9a89('0x1e')](removeEntity(_0xb1e5c5,null))['catch'](handleError(_0xb1e5c5,null));};
\ No newline at end of file
+var _0x9341=['query','hasOwnProperty','nolimit','order','sort','where','filters','filter','merge','map','type','field','options','FreshdeskField','count','includeAll','include','rows','show','params','rawAttributes','length','find','catch','create','body','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../mysqldb','status','end','json','offset','limit','set','Content-Range','reject','update','then','sendStatus','stack','name','index','model','keys','intersection','attributes','fields'];(function(_0x42f009,_0x5e27b1){var _0x22a1e0=function(_0x297993){while(--_0x297993){_0x42f009['push'](_0x42f009['shift']());}};_0x22a1e0(++_0x5e27b1);}(_0x9341,0xa4));var _0x1934=function(_0x26c6f8,_0x23b370){_0x26c6f8=_0x26c6f8-0x0;var _0x4ba556=_0x9341[_0x26c6f8];return _0x4ba556;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x1934('0x0'));var rimraf=require(_0x1934('0x1'));var zipdir=require(_0x1934('0x2'));var jsonpatch=require(_0x1934('0x3'));var rp=require(_0x1934('0x4'));var moment=require(_0x1934('0x5'));var BPromise=require(_0x1934('0x6'));var Mustache=require(_0x1934('0x7'));var util=require('util');var path=require(_0x1934('0x8'));var sox=require(_0x1934('0x9'));var csv=require(_0x1934('0xa'));var ejs=require(_0x1934('0xb'));var fs=require('fs');var _=require(_0x1934('0xc'));var squel=require(_0x1934('0xd'));var crypto=require('crypto');var jsforce=require(_0x1934('0xe'));var deskjs=require(_0x1934('0xf'));var toCsv=require('to-csv');var querystring=require(_0x1934('0x10'));var Papa=require(_0x1934('0x11'));var Redis=require(_0x1934('0x12'));var authService=require(_0x1934('0x13'));var qs=require(_0x1934('0x14'));var hardwareService=require(_0x1934('0x15'));var logger=require('../../config/logger')(_0x1934('0x16'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x1934('0x17'))['db'];function respondWithStatusCode(_0x5e835c,_0x5ad41a){_0x5ad41a=_0x5ad41a||0xcc;return function(_0x5b821d){if(_0x5b821d){return _0x5e835c['sendStatus'](_0x5ad41a);}return _0x5e835c[_0x1934('0x18')](_0x5ad41a)[_0x1934('0x19')]();};}function respondWithResult(_0x4056a4,_0x4374b6){_0x4374b6=_0x4374b6||0xc8;return function(_0x412d18){if(_0x412d18){return _0x4056a4['status'](_0x4374b6)[_0x1934('0x1a')](_0x412d18);}};}function respondWithFilteredResult(_0x3023b6,_0xb48dfc){return function(_0x5d9b1c){if(_0x5d9b1c){var _0x50df7e=_0x5d9b1c['count'],_0x52e5d9=_0xb48dfc['offset'],_0x2f66d9=_0xb48dfc[_0x1934('0x1b')]+_0xb48dfc[_0x1934('0x1c')],_0x5f24e4;if(_0x2f66d9>=_0x50df7e){_0x2f66d9=_0x50df7e;_0x5f24e4=0xc8;}else{_0x5f24e4=0xce;}_0x3023b6[_0x1934('0x18')](_0x5f24e4);return _0x3023b6[_0x1934('0x1d')](_0x1934('0x1e'),_0x52e5d9+'-'+_0x2f66d9+'/'+_0x50df7e)[_0x1934('0x1a')](_0x5d9b1c);}return null;};}function patchUpdates(_0x161775){return function(_0x4494c9){try{jsonpatch['apply'](_0x4494c9,_0x161775,!![]);}catch(_0x4676d2){return BPromise[_0x1934('0x1f')](_0x4676d2);}return _0x4494c9['save']();};}function saveUpdates(_0x76a454,_0x446a6e){return function(_0x7b834){if(_0x7b834){return _0x7b834[_0x1934('0x20')](_0x76a454)['then'](function(_0x1e961b){return _0x1e961b;});}return null;};}function removeEntity(_0x524da9,_0x3622a9){return function(_0x40c178){if(_0x40c178){return _0x40c178['destroy']()[_0x1934('0x21')](function(){_0x524da9['status'](0xcc)[_0x1934('0x19')]();});}};}function handleEntityNotFound(_0x26ad87,_0x100a77){return function(_0x54052f){if(!_0x54052f){_0x26ad87[_0x1934('0x22')](0x194);}return _0x54052f;};}function handleError(_0xf0a7cd,_0x4d4ea0){_0x4d4ea0=_0x4d4ea0||0x1f4;return function(_0x50e78b){logger['error'](_0x50e78b[_0x1934('0x23')]);if(_0x50e78b[_0x1934('0x24')]){delete _0x50e78b[_0x1934('0x24')];}_0xf0a7cd['status'](_0x4d4ea0)['send'](_0x50e78b);};}exports[_0x1934('0x25')]=function(_0x52a0ae,_0x1d5f88){var _0x3f46ce={},_0x430e9b={},_0x539ca1={'count':0x0,'rows':[]};var _0x1ceb53=db['FreshdeskField']['rawAttributes'];_0x430e9b[_0x1934('0x26')]=_[_0x1934('0x27')](_0x1ceb53);_0x430e9b['query']=_['keys'](_0x52a0ae['query']);_0x430e9b['filters']=_[_0x1934('0x28')](_0x430e9b[_0x1934('0x26')],_0x430e9b['query']);_0x3f46ce[_0x1934('0x29')]=_[_0x1934('0x28')](_0x430e9b[_0x1934('0x26')],qs[_0x1934('0x2a')](_0x52a0ae['query'][_0x1934('0x2a')]));_0x3f46ce[_0x1934('0x29')]=_0x3f46ce[_0x1934('0x29')]['length']?_0x3f46ce[_0x1934('0x29')]:_0x430e9b[_0x1934('0x26')];if(!_0x52a0ae[_0x1934('0x2b')][_0x1934('0x2c')](_0x1934('0x2d'))){_0x3f46ce['limit']=qs[_0x1934('0x1c')](_0x52a0ae['query'][_0x1934('0x1c')]);_0x3f46ce[_0x1934('0x1b')]=qs['offset'](_0x52a0ae['query'][_0x1934('0x1b')]);}_0x3f46ce[_0x1934('0x2e')]=qs[_0x1934('0x2f')](_0x52a0ae['query'][_0x1934('0x2f')]);_0x3f46ce[_0x1934('0x30')]=qs[_0x1934('0x31')](_['pick'](_0x52a0ae[_0x1934('0x2b')],_0x430e9b[_0x1934('0x31')]));if(_0x52a0ae['query'][_0x1934('0x32')]){_0x3f46ce[_0x1934('0x30')]=_[_0x1934('0x33')](_0x3f46ce[_0x1934('0x30')],{'$or':_[_0x1934('0x34')](_0x1ceb53,function(_0x2ba230){if(_0x2ba230[_0x1934('0x35')]['key']!=='VIRTUAL'){var _0x429abe={};_0x429abe[_0x2ba230[_0x1934('0x36')]]={'$like':'%'+_0x52a0ae[_0x1934('0x2b')][_0x1934('0x32')]+'%'};return _0x429abe;}})});}_0x3f46ce=_['merge']({},_0x3f46ce,_0x52a0ae[_0x1934('0x37')]);var _0x4d262d={'where':_0x3f46ce[_0x1934('0x30')]};return db[_0x1934('0x38')]['count'](_0x4d262d)[_0x1934('0x21')](function(_0x146792){_0x539ca1[_0x1934('0x39')]=_0x146792;if(_0x52a0ae[_0x1934('0x2b')][_0x1934('0x3a')]){_0x3f46ce[_0x1934('0x3b')]=[{'all':!![]}];}return db[_0x1934('0x38')]['findAll'](_0x3f46ce);})['then'](function(_0x320f3e){_0x539ca1[_0x1934('0x3c')]=_0x320f3e;return _0x539ca1;})[_0x1934('0x21')](respondWithFilteredResult(_0x1d5f88,_0x3f46ce))['catch'](handleError(_0x1d5f88,null));};exports[_0x1934('0x3d')]=function(_0x27655a,_0x15764c){var _0x5fe5ba={'raw':!![],'where':{'id':_0x27655a[_0x1934('0x3e')]['id']}},_0x46990f={};_0x46990f[_0x1934('0x26')]=_['keys'](db['FreshdeskField'][_0x1934('0x3f')]);_0x46990f[_0x1934('0x2b')]=_[_0x1934('0x27')](_0x27655a[_0x1934('0x2b')]);_0x46990f[_0x1934('0x31')]=_[_0x1934('0x28')](_0x46990f[_0x1934('0x26')],_0x46990f[_0x1934('0x2b')]);_0x5fe5ba[_0x1934('0x29')]=_[_0x1934('0x28')](_0x46990f['model'],qs[_0x1934('0x2a')](_0x27655a[_0x1934('0x2b')][_0x1934('0x2a')]));_0x5fe5ba[_0x1934('0x29')]=_0x5fe5ba[_0x1934('0x29')][_0x1934('0x40')]?_0x5fe5ba[_0x1934('0x29')]:_0x46990f[_0x1934('0x26')];if(_0x27655a['query'][_0x1934('0x3a')]){_0x5fe5ba[_0x1934('0x3b')]=[{'all':!![]}];}_0x5fe5ba=_[_0x1934('0x33')]({},_0x5fe5ba,_0x27655a['options']);return db['FreshdeskField'][_0x1934('0x41')](_0x5fe5ba)['then'](handleEntityNotFound(_0x15764c,null))[_0x1934('0x21')](respondWithResult(_0x15764c,null))[_0x1934('0x42')](handleError(_0x15764c,null));};exports[_0x1934('0x43')]=function(_0x10c55f,_0x4ed142){return db[_0x1934('0x38')]['create'](_0x10c55f['body'],{})['then'](respondWithResult(_0x4ed142,0xc9))[_0x1934('0x42')](handleError(_0x4ed142,null));};exports[_0x1934('0x20')]=function(_0x3cd120,_0x19950a){if(_0x3cd120[_0x1934('0x44')]['id']){delete _0x3cd120[_0x1934('0x44')]['id'];}return db[_0x1934('0x38')][_0x1934('0x41')]({'where':{'id':_0x3cd120[_0x1934('0x3e')]['id']}})[_0x1934('0x21')](handleEntityNotFound(_0x19950a,null))['then'](saveUpdates(_0x3cd120[_0x1934('0x44')],null))[_0x1934('0x21')](respondWithResult(_0x19950a,null))['catch'](handleError(_0x19950a,null));};exports['destroy']=function(_0x5bfbb6,_0x4c0be2){return db[_0x1934('0x38')]['find']({'where':{'id':_0x5bfbb6[_0x1934('0x3e')]['id']}})[_0x1934('0x21')](handleEntityNotFound(_0x4c0be2,null))['then'](removeEntity(_0x4c0be2,null))[_0x1934('0x42')](handleError(_0x4c0be2,null));};
\ No newline at end of file
index 0cc80dc..b22d2f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe5e7=['freshdesk_unique_index','idField','FieldId','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./intFreshdeskField.attributes','FreshdeskField','int_freshdesk_fields'];(function(_0x381e5a,_0x489b08){var _0xd4d7cb=function(_0x567c5b){while(--_0x567c5b){_0x381e5a['push'](_0x381e5a['shift']());}};_0xd4d7cb(++_0x489b08);}(_0xe5e7,0x10d));var _0x7e5e=function(_0x35f119,_0x2d3850){_0x35f119=_0x35f119-0x0;var _0x3c59e8=_0xe5e7[_0x35f119];return _0x3c59e8;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x7e5e('0x0'))(_0x7e5e('0x1'));var moment=require(_0x7e5e('0x2'));var BPromise=require(_0x7e5e('0x3'));var rp=require(_0x7e5e('0x4'));var fs=require('fs');var path=require(_0x7e5e('0x5'));var rimraf=require(_0x7e5e('0x6'));var config=require(_0x7e5e('0x7'));var attributes=require(_0x7e5e('0x8'));module['exports']=function(_0x5d0438,_0x15e04a){return _0x5d0438['define'](_0x7e5e('0x9'),attributes,{'tableName':_0x7e5e('0xa'),'paranoid':![],'indexes':[{'name':_0x7e5e('0xb'),'fields':[_0x7e5e('0xc'),_0x7e5e('0xd')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x55b0=['moment','bluebird','path','rimraf','./intFreshdeskField.attributes','exports','define','FreshdeskField','freshdesk_unique_index','FieldId','util','api'];(function(_0x519002,_0x5d2bcf){var _0x439e16=function(_0x44afce){while(--_0x44afce){_0x519002['push'](_0x519002['shift']());}};_0x439e16(++_0x5d2bcf);}(_0x55b0,0xca));var _0x055b=function(_0x1ee178,_0x3d1992){_0x1ee178=_0x1ee178-0x0;var _0x28d2df=_0x55b0[_0x1ee178];return _0x28d2df;};'use strict';var _=require('lodash');var util=require(_0x055b('0x0'));var logger=require('../../config/logger')(_0x055b('0x1'));var moment=require(_0x055b('0x2'));var BPromise=require(_0x055b('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x055b('0x4'));var rimraf=require(_0x055b('0x5'));var config=require('../../config/environment');var attributes=require(_0x055b('0x6'));module[_0x055b('0x7')]=function(_0x58629c,_0x45edfa){return _0x58629c[_0x055b('0x8')](_0x055b('0x9'),attributes,{'tableName':'int_freshdesk_fields','paranoid':![],'indexes':[{'name':_0x055b('0xa'),'fields':['idField',_0x055b('0xb')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index ad219d3..e8d8961 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2356=['then','info','FreshdeskField,\x20%s,\x20%s','debug','FreshdeskField,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','util','moment','ioredis','../../mysqldb','rpc','client','http'];(function(_0xff565,_0x149ae5){var _0x5c0e6c=function(_0x348802){while(--_0x348802){_0xff565['push'](_0xff565['shift']());}};_0x5c0e6c(++_0x149ae5);}(_0x2356,0x14f));var _0x6235=function(_0x3b5045,_0xb0bea7){_0x3b5045=_0x3b5045-0x0;var _0x3fa262=_0x2356[_0x3b5045];return _0x3fa262;};'use strict';var _=require('lodash');var util=require(_0x6235('0x0'));var moment=require(_0x6235('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x6235('0x2'));var db=require(_0x6235('0x3'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x6235('0x4'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x6235('0x5')][_0x6235('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x3663e7,_0x47f3a5,_0x4c15c6){return new BPromise(function(_0x547159,_0x3a5750){return client['request'](_0x3663e7,_0x4c15c6)[_0x6235('0x7')](function(_0x11d1f9){logger[_0x6235('0x8')](_0x6235('0x9'),_0x47f3a5,'request\x20sent');logger[_0x6235('0xa')](_0x6235('0xb'),_0x47f3a5,_0x6235('0xc'),JSON[_0x6235('0xd')](_0x11d1f9));if(_0x11d1f9[_0x6235('0xe')]){if(_0x11d1f9['error'][_0x6235('0xf')]===0x1f4){logger[_0x6235('0xe')](_0x6235('0x9'),_0x47f3a5,_0x11d1f9[_0x6235('0xe')]['message']);return _0x3a5750(_0x11d1f9[_0x6235('0xe')][_0x6235('0x10')]);}logger['error'](_0x6235('0x9'),_0x47f3a5,_0x11d1f9['error'][_0x6235('0x10')]);return _0x547159(_0x11d1f9[_0x6235('0xe')]['message']);}else{logger[_0x6235('0x8')](_0x6235('0x9'),_0x47f3a5,_0x6235('0xc'));_0x547159(_0x11d1f9[_0x6235('0x11')]['message']);}})[_0x6235('0x12')](function(_0x190d7c){logger[_0x6235('0xe')](_0x6235('0x9'),_0x47f3a5,_0x190d7c);_0x3a5750(_0x190d7c);});});}
\ No newline at end of file
+var _0x2dae=['randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','FreshdeskField,\x20%s,\x20%s','request\x20sent','debug','FreshdeskField,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','moment','bluebird'];(function(_0xbccc47,_0x548dbf){var _0x1d840a=function(_0x25413e){while(--_0x25413e){_0xbccc47['push'](_0xbccc47['shift']());}};_0x1d840a(++_0x548dbf);}(_0x2dae,0xc3));var _0xe2da=function(_0x5eaa0b,_0x433b2f){_0x5eaa0b=_0x5eaa0b-0x0;var _0x28b295=_0x2dae[_0x5eaa0b];return _0x28b295;};'use strict';var _=require(_0xe2da('0x0'));var util=require('util');var moment=require(_0xe2da('0x1'));var BPromise=require(_0xe2da('0x2'));var rs=require(_0xe2da('0x3'));var fs=require('fs');var Redis=require(_0xe2da('0x4'));var db=require(_0xe2da('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xe2da('0x6'))(_0xe2da('0x7'));var config=require(_0xe2da('0x8'));var jayson=require(_0xe2da('0x9'));var client=jayson['client'][_0xe2da('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x89c70b,_0x34cc98,_0x2efbd8){return new BPromise(function(_0x238da3,_0x1c71ea){return client[_0xe2da('0xb')](_0x89c70b,_0x2efbd8)[_0xe2da('0xc')](function(_0x68aa40){logger['info'](_0xe2da('0xd'),_0x34cc98,_0xe2da('0xe'));logger[_0xe2da('0xf')](_0xe2da('0x10'),_0x34cc98,_0xe2da('0xe'),JSON[_0xe2da('0x11')](_0x68aa40));if(_0x68aa40[_0xe2da('0x12')]){if(_0x68aa40[_0xe2da('0x12')]['code']===0x1f4){logger[_0xe2da('0x12')]('FreshdeskField,\x20%s,\x20%s',_0x34cc98,_0x68aa40[_0xe2da('0x12')][_0xe2da('0x13')]);return _0x1c71ea(_0x68aa40[_0xe2da('0x12')][_0xe2da('0x13')]);}logger[_0xe2da('0x12')](_0xe2da('0xd'),_0x34cc98,_0x68aa40[_0xe2da('0x12')]['message']);return _0x238da3(_0x68aa40[_0xe2da('0x12')]['message']);}else{logger['info'](_0xe2da('0xd'),_0x34cc98,_0xe2da('0xe'));_0x238da3(_0x68aa40[_0xe2da('0x14')]['message']);}})[_0xe2da('0x15')](function(_0x2c0353){logger[_0xe2da('0x12')](_0xe2da('0xd'),_0x34cc98,_0x2c0353);_0x1c71ea(_0x2c0353);});});}
\ No newline at end of file
index b7d801d..6085904 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x78d2=['express','Router','../../config/environment','./intSalesforceAccount.controller','get','isAuthenticated','index','/:id','show','/:id/configurations','getConfigurations','getFields','post','create','addConfiguration','put','update','delete','destroy','exports','multer','util','path','connect-timeout'];(function(_0x3e8983,_0x29d12a){var _0x2e95ae=function(_0x1b28c6){while(--_0x1b28c6){_0x3e8983['push'](_0x3e8983['shift']());}};_0x2e95ae(++_0x29d12a);}(_0x78d2,0x1c4));var _0x278d=function(_0x367e3b,_0x5d92ad){_0x367e3b=_0x367e3b-0x0;var _0x35568d=_0x78d2[_0x367e3b];return _0x35568d;};'use strict';var multer=require(_0x278d('0x0'));var util=require(_0x278d('0x1'));var path=require(_0x278d('0x2'));var timeout=require(_0x278d('0x3'));var express=require(_0x278d('0x4'));var router=express[_0x278d('0x5')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x278d('0x6'));var controller=require(_0x278d('0x7'));router[_0x278d('0x8')]('/',auth[_0x278d('0x9')](),controller[_0x278d('0xa')]);router[_0x278d('0x8')](_0x278d('0xb'),auth[_0x278d('0x9')](),controller[_0x278d('0xc')]);router[_0x278d('0x8')](_0x278d('0xd'),auth['isAuthenticated'](),controller[_0x278d('0xe')]);router[_0x278d('0x8')]('/:id/fields',auth[_0x278d('0x9')](),controller[_0x278d('0xf')]);router[_0x278d('0x10')]('/',auth[_0x278d('0x9')](),controller[_0x278d('0x11')]);router[_0x278d('0x10')](_0x278d('0xd'),auth[_0x278d('0x9')](),controller[_0x278d('0x12')]);router[_0x278d('0x13')](_0x278d('0xb'),auth[_0x278d('0x9')](),controller[_0x278d('0x14')]);router[_0x278d('0x15')](_0x278d('0xb'),auth[_0x278d('0x9')](),controller[_0x278d('0x16')]);module[_0x278d('0x17')]=router;
\ No newline at end of file
+var _0x32d3=['put','/:id','update','destroy','multer','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','show','isAuthenticated','/:id/fields','getFields','post','/:id/configurations','addConfiguration'];(function(_0x46d621,_0x6b5a93){var _0x37dae3=function(_0x18a361){while(--_0x18a361){_0x46d621['push'](_0x46d621['shift']());}};_0x37dae3(++_0x6b5a93);}(_0x32d3,0xee));var _0x332d=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x32d3[_0x2dafbe];return _0x58a45a;};'use strict';var multer=require(_0x332d('0x0'));var util=require('util');var path=require('path');var timeout=require('connect-timeout');var express=require('express');var router=express[_0x332d('0x1')]();var auth=require(_0x332d('0x2'));var interaction=require(_0x332d('0x3'));var config=require(_0x332d('0x4'));var controller=require('./intSalesforceAccount.controller');router[_0x332d('0x5')]('/',auth['isAuthenticated'](),controller[_0x332d('0x6')]);router[_0x332d('0x5')]('/:id',auth['isAuthenticated'](),controller[_0x332d('0x7')]);router[_0x332d('0x5')]('/:id/configurations',auth[_0x332d('0x8')](),controller['getConfigurations']);router[_0x332d('0x5')](_0x332d('0x9'),auth[_0x332d('0x8')](),controller[_0x332d('0xa')]);router[_0x332d('0xb')]('/',auth[_0x332d('0x8')](),controller['create']);router['post'](_0x332d('0xc'),auth[_0x332d('0x8')](),controller[_0x332d('0xd')]);router[_0x332d('0xe')](_0x332d('0xf'),auth[_0x332d('0x8')](),controller[_0x332d('0x10')]);router['delete'](_0x332d('0xf'),auth[_0x332d('0x8')](),controller[_0x332d('0x11')]);module['exports']=router;
\ No newline at end of file
index 85dc038..d092804 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8bfa=['ENUM','integrationTab','sequelize','STRING'];(function(_0x30a2de,_0x21035a){var _0x1b0c2c=function(_0x14f27d){while(--_0x14f27d){_0x30a2de['push'](_0x30a2de['shift']());}};_0x1b0c2c(++_0x21035a);}(_0x8bfa,0x1d2));var _0xa8bf=function(_0x39b316,_0x3def1e){_0x39b316=_0x39b316-0x0;var _0x182ab1=_0x8bfa[_0x39b316];return _0x182ab1;};'use strict';var Sequelize=require(_0xa8bf('0x0'));module['exports']={'name':{'type':Sequelize[_0xa8bf('0x1')]},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0xa8bf('0x1')],'unique':'username'},'remoteUri':{'type':Sequelize[_0xa8bf('0x1')]},'password':{'type':Sequelize[_0xa8bf('0x1')]},'clientId':{'type':Sequelize['STRING']},'clientSecret':{'type':Sequelize[_0xa8bf('0x1')]},'securityToken':{'type':Sequelize[_0xa8bf('0x1')]},'serverUrl':{'type':Sequelize[_0xa8bf('0x1')]},'type':{'type':Sequelize[_0xa8bf('0x2')]('integrationTab','newTab'),'defaultValue':_0xa8bf('0x3')}};
\ No newline at end of file
+var _0xc5b2=['sequelize','exports','STRING','integrationTab'];(function(_0x178814,_0x8cbb99){var _0x5a2c00=function(_0x31256a){while(--_0x31256a){_0x178814['push'](_0x178814['shift']());}};_0x5a2c00(++_0x8cbb99);}(_0xc5b2,0x170));var _0x2c5b=function(_0x27e001,_0x23025b){_0x27e001=_0x27e001-0x0;var _0xe60c5f=_0xc5b2[_0x27e001];return _0xe60c5f;};'use strict';var Sequelize=require(_0x2c5b('0x0'));module[_0x2c5b('0x1')]={'name':{'type':Sequelize[_0x2c5b('0x2')]},'description':{'type':Sequelize[_0x2c5b('0x2')]},'username':{'type':Sequelize[_0x2c5b('0x2')],'unique':'username'},'remoteUri':{'type':Sequelize[_0x2c5b('0x2')]},'password':{'type':Sequelize[_0x2c5b('0x2')]},'clientId':{'type':Sequelize[_0x2c5b('0x2')]},'clientSecret':{'type':Sequelize[_0x2c5b('0x2')]},'securityToken':{'type':Sequelize[_0x2c5b('0x2')]},'serverUrl':{'type':Sequelize[_0x2c5b('0x2')]},'type':{'type':Sequelize['ENUM'](_0x2c5b('0x3'),'newTab'),'defaultValue':_0x2c5b('0x3')}};
\ No newline at end of file
index 0ac5a56..7477a53 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf84a=['body','findOne','getConfigurations','addConfiguration','AccountId','Subjects','getSubjects','channel','Descriptions','SalesforceConfiguration','SalesforceField','Task','remoteUri','clientId','clientSecret','username','password','securityToken','slice','lastIndexOf','Connection','isNil','ticketType','sobject','describe','CallObject','IsArchived','Status','Case','Type','Origin','Reason','IsEscalated','SuppliedCompany','custom','includes','map','label','picklistValues','value','boolean','True','true','False','false','test','getFields,\x20%s,\x20%s,\x20%s','getFields','send','statusCode','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','path','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','../../components/integrations/configuration','client','http','request','then','info','SalesforceAccount,\x20%s,\x20%s','request\x20sent','debug','SalesforceAccount,\x20%s,\x20%s,\x20%s','stringify','code','error','message','result','sendStatus','status','count','offset','set','json','reject','save','update','destroy','end','stack','name','index','SalesforceAccount','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','merge','type','VIRTUAL','field','filter','options','where','includeAll','findAll','rows','show','params','rawAttributes','include','find','catch','create'];(function(_0x5ac5c7,_0x3e5ecd){var _0x1eede1=function(_0x128357){while(--_0x128357){_0x5ac5c7['push'](_0x5ac5c7['shift']());}};_0x1eede1(++_0x3e5ecd);}(_0xf84a,0x1c7));var _0xaf84=function(_0x2ad162,_0x53e26e){_0x2ad162=_0x2ad162-0x0;var _0x2be5e3=_0xf84a[_0x2ad162];return _0x2be5e3;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xaf84('0x0'));var rimraf=require(_0xaf84('0x1'));var zipdir=require(_0xaf84('0x2'));var jsonpatch=require(_0xaf84('0x3'));var rp=require(_0xaf84('0x4'));var moment=require(_0xaf84('0x5'));var BPromise=require(_0xaf84('0x6'));var Mustache=require('mustache');var util=require('util');var path=require(_0xaf84('0x7'));var sox=require(_0xaf84('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xaf84('0x9'));var squel=require(_0xaf84('0xa'));var crypto=require(_0xaf84('0xb'));var jsforce=require(_0xaf84('0xc'));var deskjs=require(_0xaf84('0xd'));var toCsv=require(_0xaf84('0xe'));var querystring=require('querystring');var Papa=require(_0xaf84('0xf'));var Redis=require('ioredis');var authService=require(_0xaf84('0x10'));var qs=require(_0xaf84('0x11'));var hardwareService=require(_0xaf84('0x12'));var logger=require(_0xaf84('0x13'))(_0xaf84('0x14'));var utils=require(_0xaf84('0x15'));var config=require(_0xaf84('0x16'));var db=require(_0xaf84('0x17'))['db'];var integrations=require(_0xaf84('0x18'));var jayson=require('jayson/promise');var client=jayson[_0xaf84('0x19')][_0xaf84('0x1a')]({'port':0x232a});function checkPasswordPattern(_0x555aab,_0x484397,_0x2879ad){if(_0x2879ad){var _0x593e4f=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x593e4f['test'](_0x484397)){return _0x555aab;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x555aab;}}function respondWithRpcPromise(_0x223f2c,_0x5f4408,_0x2bab0b,_0x1075c0){return new BPromise(function(_0x3f77eb,_0x37cdab){var _0x2fc4ef=_0x1075c0||client;return _0x2fc4ef[_0xaf84('0x1b')](_0x223f2c,_0x2bab0b)[_0xaf84('0x1c')](function(_0x50587d){logger[_0xaf84('0x1d')](_0xaf84('0x1e'),_0x5f4408,_0xaf84('0x1f'));logger[_0xaf84('0x20')](_0xaf84('0x21'),_0x5f4408,_0xaf84('0x1f'),JSON[_0xaf84('0x22')](_0x50587d));if(_0x50587d['error']){if(_0x50587d['error'][_0xaf84('0x23')]===0x1f4){logger['error']('SalesforceAccount,\x20%s,\x20%s',_0x5f4408,_0x50587d[_0xaf84('0x24')]['message']);return _0x37cdab(_0x50587d['error'][_0xaf84('0x25')]);}logger['error']('SalesforceAccount,\x20%s,\x20%s',_0x5f4408,_0x50587d['error'][_0xaf84('0x25')]);return _0x3f77eb(_0x50587d[_0xaf84('0x24')][_0xaf84('0x25')]);}else{logger[_0xaf84('0x1d')]('SalesforceAccount,\x20%s,\x20%s',_0x5f4408,'request\x20sent');_0x3f77eb(_0x50587d[_0xaf84('0x26')][_0xaf84('0x25')]);}})['catch'](function(_0x32e612){logger[_0xaf84('0x24')](_0xaf84('0x1e'),_0x5f4408,_0x32e612);_0x37cdab(_0x32e612);});});}function respondWithStatusCode(_0x344901,_0x4634bb){_0x4634bb=_0x4634bb||0xcc;return function(_0x5cdad1){if(_0x5cdad1){return _0x344901[_0xaf84('0x27')](_0x4634bb);}return _0x344901[_0xaf84('0x28')](_0x4634bb)['end']();};}function respondWithResult(_0x1f8d47,_0x58b8c9){_0x58b8c9=_0x58b8c9||0xc8;return function(_0x46b26d){if(_0x46b26d){return _0x1f8d47[_0xaf84('0x28')](_0x58b8c9)['json'](_0x46b26d);}};}function respondWithFilteredResult(_0x4dbd93,_0x153008){return function(_0x4ba1a5){if(_0x4ba1a5){var _0x125590=_0x4ba1a5[_0xaf84('0x29')],_0x2c81f8=_0x153008[_0xaf84('0x2a')],_0x38fe68=_0x153008['offset']+_0x153008['limit'],_0x3234a8;if(_0x38fe68>=_0x125590){_0x38fe68=_0x125590;_0x3234a8=0xc8;}else{_0x3234a8=0xce;}_0x4dbd93[_0xaf84('0x28')](_0x3234a8);return _0x4dbd93[_0xaf84('0x2b')]('Content-Range',_0x2c81f8+'-'+_0x38fe68+'/'+_0x125590)[_0xaf84('0x2c')](_0x4ba1a5);}return null;};}function patchUpdates(_0x457f03){return function(_0x2802ee){try{jsonpatch['apply'](_0x2802ee,_0x457f03,!![]);}catch(_0x445838){return BPromise[_0xaf84('0x2d')](_0x445838);}return _0x2802ee[_0xaf84('0x2e')]();};}function saveUpdates(_0x581a46,_0x2554b4){return function(_0x1e302e){if(_0x1e302e){return _0x1e302e[_0xaf84('0x2f')](_0x581a46)['then'](function(_0x40d4ca){return _0x40d4ca;});}return null;};}function removeEntity(_0x344cca,_0x382a5e){return function(_0x145ce3){if(_0x145ce3){return _0x145ce3[_0xaf84('0x30')]()['then'](function(){_0x344cca[_0xaf84('0x28')](0xcc)[_0xaf84('0x31')]();});}};}function handleEntityNotFound(_0x5d0f43,_0x5e6147){return function(_0x5607fd){if(!_0x5607fd){_0x5d0f43['sendStatus'](0x194);}return _0x5607fd;};}function handleError(_0x1d90d2,_0x5dbc43){_0x5dbc43=_0x5dbc43||0x1f4;return function(_0x5592e4){logger['error'](_0x5592e4[_0xaf84('0x32')]);if(_0x5592e4[_0xaf84('0x33')]){delete _0x5592e4[_0xaf84('0x33')];}_0x1d90d2[_0xaf84('0x28')](_0x5dbc43)['send'](_0x5592e4);};}exports[_0xaf84('0x34')]=function(_0x22809b,_0x4b6ba1){var _0x56f013={},_0x18ac16={},_0x3e7989={'count':0x0,'rows':[]};var _0x43c1a3=db[_0xaf84('0x35')]['rawAttributes'];_0x18ac16['model']=_[_0xaf84('0x36')](_0x43c1a3);_0x18ac16['query']=_['keys'](_0x22809b[_0xaf84('0x37')]);_0x18ac16[_0xaf84('0x38')]=_[_0xaf84('0x39')](_0x18ac16[_0xaf84('0x3a')],_0x18ac16['query']);_0x56f013[_0xaf84('0x3b')]=_['intersection'](_0x18ac16[_0xaf84('0x3a')],qs[_0xaf84('0x3c')](_0x22809b[_0xaf84('0x37')][_0xaf84('0x3c')]));_0x56f013[_0xaf84('0x3b')]=_0x56f013[_0xaf84('0x3b')][_0xaf84('0x3d')]?_0x56f013['attributes']:_0x18ac16[_0xaf84('0x3a')];if(!_0x22809b['query'][_0xaf84('0x3e')](_0xaf84('0x3f'))){_0x56f013[_0xaf84('0x40')]=qs[_0xaf84('0x40')](_0x22809b['query'][_0xaf84('0x40')]);_0x56f013['offset']=qs['offset'](_0x22809b[_0xaf84('0x37')][_0xaf84('0x2a')]);}_0x56f013[_0xaf84('0x41')]=qs[_0xaf84('0x42')](_0x22809b['query'][_0xaf84('0x42')]);_0x56f013['where']=qs[_0xaf84('0x38')](_[_0xaf84('0x43')](_0x22809b[_0xaf84('0x37')],_0x18ac16[_0xaf84('0x38')]));if(_0x22809b[_0xaf84('0x37')]['filter']){_0x56f013['where']=_[_0xaf84('0x44')](_0x56f013['where'],{'$or':_['map'](_0x43c1a3,function(_0x1b2355){if(_0x1b2355[_0xaf84('0x45')]['key']!==_0xaf84('0x46')){var _0x2db55a={};_0x2db55a[_0x1b2355[_0xaf84('0x47')]]={'$like':'%'+_0x22809b[_0xaf84('0x37')][_0xaf84('0x48')]+'%'};return _0x2db55a;}})});}_0x56f013=_['merge']({},_0x56f013,_0x22809b[_0xaf84('0x49')]);var _0x77708={'where':_0x56f013[_0xaf84('0x4a')]};return db['SalesforceAccount'][_0xaf84('0x29')](_0x77708)['then'](function(_0x28c35b){_0x3e7989[_0xaf84('0x29')]=_0x28c35b;if(_0x22809b[_0xaf84('0x37')][_0xaf84('0x4b')]){_0x56f013['include']=[{'all':!![]}];}return db[_0xaf84('0x35')][_0xaf84('0x4c')](_0x56f013);})[_0xaf84('0x1c')](function(_0x39fd1b){_0x3e7989[_0xaf84('0x4d')]=_0x39fd1b;return _0x3e7989;})[_0xaf84('0x1c')](respondWithFilteredResult(_0x4b6ba1,_0x56f013))['catch'](handleError(_0x4b6ba1,null));};exports[_0xaf84('0x4e')]=function(_0x5968fe,_0x3d07a3){var _0x256d53={'raw':![],'where':{'id':_0x5968fe[_0xaf84('0x4f')]['id']}},_0x5cd960={};_0x5cd960[_0xaf84('0x3a')]=_['keys'](db[_0xaf84('0x35')][_0xaf84('0x50')]);_0x5cd960[_0xaf84('0x37')]=_['keys'](_0x5968fe[_0xaf84('0x37')]);_0x5cd960['filters']=_[_0xaf84('0x39')](_0x5cd960[_0xaf84('0x3a')],_0x5cd960[_0xaf84('0x37')]);_0x256d53[_0xaf84('0x3b')]=_['intersection'](_0x5cd960[_0xaf84('0x3a')],qs[_0xaf84('0x3c')](_0x5968fe[_0xaf84('0x37')][_0xaf84('0x3c')]));_0x256d53[_0xaf84('0x3b')]=_0x256d53['attributes'][_0xaf84('0x3d')]?_0x256d53[_0xaf84('0x3b')]:_0x5cd960[_0xaf84('0x3a')];if(_0x5968fe['query'][_0xaf84('0x4b')]){_0x256d53[_0xaf84('0x51')]=[{'all':!![]}];}_0x256d53=_[_0xaf84('0x44')]({},_0x256d53,_0x5968fe[_0xaf84('0x49')]);return db[_0xaf84('0x35')][_0xaf84('0x52')](_0x256d53)[_0xaf84('0x1c')](handleEntityNotFound(_0x3d07a3,null))[_0xaf84('0x1c')](respondWithResult(_0x3d07a3,null))[_0xaf84('0x53')](handleError(_0x3d07a3,null));};exports[_0xaf84('0x54')]=function(_0x4977f3,_0x2bb1a5){return db[_0xaf84('0x35')][_0xaf84('0x54')](_0x4977f3[_0xaf84('0x55')],{})[_0xaf84('0x1c')](respondWithResult(_0x2bb1a5,0xc9))[_0xaf84('0x53')](handleError(_0x2bb1a5,null));};exports['update']=function(_0x47f6e1,_0x29c30d){if(_0x47f6e1[_0xaf84('0x55')]['id']){delete _0x47f6e1['body']['id'];}return db[_0xaf84('0x35')][_0xaf84('0x52')]({'where':{'id':_0x47f6e1[_0xaf84('0x4f')]['id']}})['then'](handleEntityNotFound(_0x29c30d,null))['then'](saveUpdates(_0x47f6e1['body'],null))[_0xaf84('0x1c')](respondWithResult(_0x29c30d,null))[_0xaf84('0x53')](handleError(_0x29c30d,null));};exports[_0xaf84('0x30')]=function(_0x282807,_0x139170){return db[_0xaf84('0x35')][_0xaf84('0x52')]({'where':{'id':_0x282807[_0xaf84('0x4f')]['id']}})['then'](handleEntityNotFound(_0x139170,null))[_0xaf84('0x1c')](removeEntity(_0x139170,null))[_0xaf84('0x53')](handleError(_0x139170,null));};exports['getConfigurations']=function(_0x383842,_0x4caf6c,_0x2eca18){var _0x5a288b={};var _0x3479d={};var _0x3c2081;var _0x385c59;return db[_0xaf84('0x35')][_0xaf84('0x56')]({'where':{'id':_0x383842[_0xaf84('0x4f')]['id']}})[_0xaf84('0x1c')](handleEntityNotFound(_0x4caf6c,null))[_0xaf84('0x1c')](function(_0x208d02){if(_0x208d02){_0x3c2081=_0x208d02;_0x3479d['model']=_[_0xaf84('0x36')](db['SalesforceConfiguration'][_0xaf84('0x50')]);_0x3479d[_0xaf84('0x37')]=_[_0xaf84('0x36')](_0x383842['query']);_0x3479d[_0xaf84('0x38')]=_[_0xaf84('0x39')](_0x3479d['model'],_0x3479d[_0xaf84('0x37')]);_0x5a288b['attributes']=_['intersection'](_0x3479d['model'],qs['fields'](_0x383842[_0xaf84('0x37')][_0xaf84('0x3c')]));_0x5a288b['attributes']=_0x5a288b[_0xaf84('0x3b')]['length']?_0x5a288b[_0xaf84('0x3b')]:_0x3479d[_0xaf84('0x3a')];_0x5a288b[_0xaf84('0x41')]=qs[_0xaf84('0x42')](_0x383842['query'][_0xaf84('0x42')]);_0x5a288b['where']=qs[_0xaf84('0x38')](_['pick'](_0x383842[_0xaf84('0x37')],_0x3479d[_0xaf84('0x38')]));if(_0x383842[_0xaf84('0x37')]['filter']){_0x5a288b['where']=_[_0xaf84('0x44')](_0x5a288b[_0xaf84('0x4a')],{'$or':_['map'](_0x5a288b[_0xaf84('0x3b')],function(_0x2b7826){var _0xd9a426={};_0xd9a426[_0x2b7826]={'$like':'%'+_0x383842[_0xaf84('0x37')][_0xaf84('0x48')]+'%'};return _0xd9a426;})});}_0x5a288b=_[_0xaf84('0x44')]({},_0x5a288b,_0x383842[_0xaf84('0x49')]);return _0x3c2081[_0xaf84('0x57')](_0x5a288b);}})['then'](function(_0x5d520c){if(_0x5d520c){_0x385c59=_0x5d520c[_0xaf84('0x3d')];if(!_0x383842[_0xaf84('0x37')][_0xaf84('0x3e')](_0xaf84('0x3f'))){_0x5a288b[_0xaf84('0x40')]=qs['limit'](_0x383842[_0xaf84('0x37')]['limit']);_0x5a288b[_0xaf84('0x2a')]=qs[_0xaf84('0x2a')](_0x383842[_0xaf84('0x37')][_0xaf84('0x2a')]);}return _0x3c2081[_0xaf84('0x57')](_0x5a288b);}})[_0xaf84('0x1c')](function(_0x24c41c){if(_0x24c41c){return _0x24c41c?{'count':_0x385c59,'rows':_0x24c41c}:null;}})['then'](respondWithResult(_0x4caf6c,null))[_0xaf84('0x53')](handleError(_0x4caf6c,null));};exports[_0xaf84('0x58')]=function(_0x4363bb,_0x553d3e,_0x200db0){if(_0x4363bb[_0xaf84('0x55')]['id']){delete _0x4363bb[_0xaf84('0x55')]['id'];}return db[_0xaf84('0x35')][_0xaf84('0x56')]({'where':{'id':_0x4363bb[_0xaf84('0x4f')]['id']}})[_0xaf84('0x1c')](handleEntityNotFound(_0x553d3e,null))[_0xaf84('0x1c')](function(_0x55ce87){if(_0x55ce87){_0x4363bb[_0xaf84('0x55')][_0xaf84('0x59')]=_0x55ce87['id'];_0x4363bb[_0xaf84('0x55')][_0xaf84('0x5a')]=integrations[_0xaf84('0x5b')](_0x4363bb[_0xaf84('0x55')][_0xaf84('0x5c')],_0x4363bb[_0xaf84('0x55')][_0xaf84('0x45')]);_0x4363bb[_0xaf84('0x55')][_0xaf84('0x5d')]=integrations['getDescriptions'](_0x4363bb[_0xaf84('0x55')][_0xaf84('0x5c')],_0x4363bb['body']['type']);return db[_0xaf84('0x5e')]['create'](_0x4363bb[_0xaf84('0x55')],{'include':[{'model':db[_0xaf84('0x5f')],'as':'Subjects'},{'model':db[_0xaf84('0x5f')],'as':_0xaf84('0x5d')}]});}return null;})[_0xaf84('0x1c')](respondWithResult(_0x553d3e,null))[_0xaf84('0x53')](handleError(_0x553d3e,null));};exports['getFields']=function(_0x3a1991,_0x20ecf3,_0x1935c6){var _0x204ec3;var _0x42b557='';var _0x39ff7a=_0xaf84('0x60');return db['SalesforceAccount'][_0xaf84('0x56')]({'where':{'id':_0x3a1991[_0xaf84('0x4f')]['id']},'attributes':['id',_0xaf84('0x61'),_0xaf84('0x62'),_0xaf84('0x63'),_0xaf84('0x64'),_0xaf84('0x65'),_0xaf84('0x66')]})[_0xaf84('0x1c')](handleEntityNotFound(_0x20ecf3,null))['then'](function(_0x2134fd){if(_0x2134fd){_0x42b557=_0x2134fd[_0xaf84('0x61')];var _0x26e38e=_0x42b557[_0xaf84('0x67')](-0x1);if(_0x26e38e==='/'){_0x42b557=_0x42b557['substring'](0x0,_0x42b557[_0xaf84('0x68')](_0x26e38e));}_0x204ec3=new jsforce[(_0xaf84('0x69'))]({'oauth2':{'loginUrl':_0x42b557,'clientId':_0x2134fd[_0xaf84('0x62')],'clientSecret':_0x2134fd[_0xaf84('0x63')]}});return _0x204ec3['login'](_0x2134fd[_0xaf84('0x64')],_0x2134fd[_0xaf84('0x65')]['concat'](_0x2134fd[_0xaf84('0x66')]));}})[_0xaf84('0x1c')](function(_0x179fca){if(_0x179fca){if(!_[_0xaf84('0x6a')](_0x3a1991[_0xaf84('0x37')][_0xaf84('0x6b')])){_0x39ff7a=_0x3a1991[_0xaf84('0x37')][_0xaf84('0x6b')];}return _0x204ec3[_0xaf84('0x6c')](_0x39ff7a)[_0xaf84('0x6d')]();}})[_0xaf84('0x1c')](function(_0x433ae8){var _0x3196b9=['CallDisposition','CallDurationInSeconds',_0xaf84('0x6e'),'CallType',_0xaf84('0x6f'),'Priority',_0xaf84('0x70'),'Type'];if(!_['isNil'](_0x3a1991[_0xaf84('0x37')][_0xaf84('0x6b')])&&_0x3a1991[_0xaf84('0x37')][_0xaf84('0x6b')]===_0xaf84('0x71')){_0x3196b9=[_0xaf84('0x72'),_0xaf84('0x73'),_0xaf84('0x74'),_0xaf84('0x70'),'Priority',_0xaf84('0x75'),'SuppliedName',_0xaf84('0x76')];}if(_0x433ae8){_['remove'](_0x433ae8[_0xaf84('0x3c')],function(_0x2c3deb){return _0x2c3deb[_0xaf84('0x77')]===![]&&!_0x3196b9[_0xaf84('0x78')](_0x2c3deb['name']);});return{'count':_0x433ae8[_0xaf84('0x3c')][_0xaf84('0x3d')],'rows':_[_0xaf84('0x79')](_0x433ae8[_0xaf84('0x3c')],function(_0x2ecfb0){return{'id':_0x2ecfb0[_0xaf84('0x33')],'name':_0x2ecfb0[_0xaf84('0x7a')],'custom':_0x2ecfb0['custom'],'options':_0x2ecfb0[_0xaf84('0x7b')][_0xaf84('0x3d')]>0x0?_[_0xaf84('0x79')](_0x2ecfb0['picklistValues'],function(_0x4deaec){return{'name':_0x4deaec[_0xaf84('0x7a')],'value':_0x4deaec[_0xaf84('0x7c')]};}):_0x2ecfb0[_0xaf84('0x45')]==_0xaf84('0x7d')?[{'name':_0xaf84('0x7e'),'value':_0xaf84('0x7f')},{'name':_0xaf84('0x80'),'value':_0xaf84('0x81')}]:[]};})};}})[_0xaf84('0x1c')](respondWithResult(_0x20ecf3,null))[_0xaf84('0x53')](function(_0x2cb51c){var _0x307a1d=_0x3a1991[_0xaf84('0x37')][_0xaf84('0x82')]?0x1f4:_0x2cb51c['statusCode']||0x1f4;logger[_0xaf84('0x24')](_0xaf84('0x83'),_0xaf84('0x84'),_0x307a1d,JSON[_0xaf84('0x22')](_0x2cb51c));delete _0x2cb51c[_0xaf84('0x33')];if(_0x307a1d===0x191){_0x307a1d=0x190;}_0x20ecf3[_0xaf84('0x28')](_0x307a1d)[_0xaf84('0x85')](_0x3a1991[_0xaf84('0x37')][_0xaf84('0x82')]?{'message':'Wrong\x20credentials','statusCode':_0x2cb51c[_0xaf84('0x86')]}:_0x2cb51c);});};
\ No newline at end of file
+var _0x338e=['SalesforceField','getFields','Task','remoteUri','clientId','clientSecret','username','lastIndexOf','Connection','login','password','concat','securityToken','isNil','ticketType','sobject','describe','CallDisposition','CallDurationInSeconds','CallObject','CallType','IsArchived','Priority','Type','Origin','Reason','Status','IsEscalated','SuppliedName','remove','custom','picklistValues','value','boolean','true','False','false','test','statusCode','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/environment','../../components/integrations/configuration','client','http','then','SalesforceAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','SalesforceAccount,\x20%s,\x20%s','message','info','result','sendStatus','status','end','json','count','offset','set','Content-Range','save','update','destroy','stack','name','send','index','SalesforceAccount','rawAttributes','query','keys','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','limit','order','where','pick','filter','map','type','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','length','find','create','body','getConfigurations','findOne','SalesforceConfiguration','sort','merge','addConfiguration','AccountId','Subjects','Descriptions','getDescriptions','channel'];(function(_0x102881,_0x58d723){var _0x5c63d0=function(_0x955c59){while(--_0x955c59){_0x102881['push'](_0x102881['shift']());}};_0x5c63d0(++_0x58d723);}(_0x338e,0x137));var _0xe338=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x338e[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require(_0xe338('0x0'));var emlformat=require(_0xe338('0x1'));var rimraf=require(_0xe338('0x2'));var zipdir=require(_0xe338('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xe338('0x4'));var moment=require(_0xe338('0x5'));var BPromise=require(_0xe338('0x6'));var Mustache=require(_0xe338('0x7'));var util=require(_0xe338('0x8'));var path=require(_0xe338('0x9'));var sox=require(_0xe338('0xa'));var csv=require(_0xe338('0xb'));var ejs=require(_0xe338('0xc'));var fs=require('fs');var _=require(_0xe338('0xd'));var squel=require(_0xe338('0xe'));var crypto=require(_0xe338('0xf'));var jsforce=require('jsforce');var deskjs=require(_0xe338('0x10'));var toCsv=require(_0xe338('0xb'));var querystring=require(_0xe338('0x11'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xe338('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xe338('0x13'));var logger=require(_0xe338('0x14'))(_0xe338('0x15'));var utils=require('../../config/utils');var config=require(_0xe338('0x16'));var db=require('../../mysqldb')['db'];var integrations=require(_0xe338('0x17'));var jayson=require('jayson/promise');var client=jayson[_0xe338('0x18')][_0xe338('0x19')]({'port':0x232a});function checkPasswordPattern(_0x278dc8,_0x43f46d,_0x4da7ea){if(_0x4da7ea){var _0x3645ee=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3645ee['test'](_0x43f46d)){return _0x278dc8;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x278dc8;}}function respondWithRpcPromise(_0x47c13c,_0x57dc4c,_0x253e98,_0x5c9cb4){return new BPromise(function(_0x125c00,_0x4df29b){var _0x21722a=_0x5c9cb4||client;return _0x21722a['request'](_0x47c13c,_0x253e98)[_0xe338('0x1a')](function(_0x4ade13){logger['info']('SalesforceAccount,\x20%s,\x20%s',_0x57dc4c,'request\x20sent');logger['debug'](_0xe338('0x1b'),_0x57dc4c,_0xe338('0x1c'),JSON[_0xe338('0x1d')](_0x4ade13));if(_0x4ade13['error']){if(_0x4ade13[_0xe338('0x1e')][_0xe338('0x1f')]===0x1f4){logger[_0xe338('0x1e')](_0xe338('0x20'),_0x57dc4c,_0x4ade13[_0xe338('0x1e')][_0xe338('0x21')]);return _0x4df29b(_0x4ade13[_0xe338('0x1e')][_0xe338('0x21')]);}logger['error'](_0xe338('0x20'),_0x57dc4c,_0x4ade13[_0xe338('0x1e')][_0xe338('0x21')]);return _0x125c00(_0x4ade13[_0xe338('0x1e')]['message']);}else{logger[_0xe338('0x22')](_0xe338('0x20'),_0x57dc4c,'request\x20sent');_0x125c00(_0x4ade13[_0xe338('0x23')][_0xe338('0x21')]);}})['catch'](function(_0x1854f7){logger[_0xe338('0x1e')](_0xe338('0x20'),_0x57dc4c,_0x1854f7);_0x4df29b(_0x1854f7);});});}function respondWithStatusCode(_0x5ed542,_0x4cddac){_0x4cddac=_0x4cddac||0xcc;return function(_0x501c0a){if(_0x501c0a){return _0x5ed542[_0xe338('0x24')](_0x4cddac);}return _0x5ed542[_0xe338('0x25')](_0x4cddac)[_0xe338('0x26')]();};}function respondWithResult(_0x44ad20,_0x47caa6){_0x47caa6=_0x47caa6||0xc8;return function(_0x42405d){if(_0x42405d){return _0x44ad20[_0xe338('0x25')](_0x47caa6)[_0xe338('0x27')](_0x42405d);}};}function respondWithFilteredResult(_0x32df21,_0x3d2c89){return function(_0x4177fc){if(_0x4177fc){var _0x1f24d3=_0x4177fc[_0xe338('0x28')],_0x4ea0ab=_0x3d2c89['offset'],_0x29e6f7=_0x3d2c89[_0xe338('0x29')]+_0x3d2c89['limit'],_0x2a6cff;if(_0x29e6f7>=_0x1f24d3){_0x29e6f7=_0x1f24d3;_0x2a6cff=0xc8;}else{_0x2a6cff=0xce;}_0x32df21[_0xe338('0x25')](_0x2a6cff);return _0x32df21[_0xe338('0x2a')](_0xe338('0x2b'),_0x4ea0ab+'-'+_0x29e6f7+'/'+_0x1f24d3)[_0xe338('0x27')](_0x4177fc);}return null;};}function patchUpdates(_0x52fae9){return function(_0x453e7f){try{jsonpatch['apply'](_0x453e7f,_0x52fae9,!![]);}catch(_0x1a437b){return BPromise['reject'](_0x1a437b);}return _0x453e7f[_0xe338('0x2c')]();};}function saveUpdates(_0x4285ae,_0x2f6e22){return function(_0x133594){if(_0x133594){return _0x133594[_0xe338('0x2d')](_0x4285ae)[_0xe338('0x1a')](function(_0x29bb34){return _0x29bb34;});}return null;};}function removeEntity(_0x1bcf52,_0x324bb6){return function(_0x3f2c24){if(_0x3f2c24){return _0x3f2c24[_0xe338('0x2e')]()[_0xe338('0x1a')](function(){_0x1bcf52[_0xe338('0x25')](0xcc)[_0xe338('0x26')]();});}};}function handleEntityNotFound(_0x1360a0,_0x161c09){return function(_0x1894ee){if(!_0x1894ee){_0x1360a0[_0xe338('0x24')](0x194);}return _0x1894ee;};}function handleError(_0x440bcd,_0x55f24e){_0x55f24e=_0x55f24e||0x1f4;return function(_0x551c8b){logger[_0xe338('0x1e')](_0x551c8b[_0xe338('0x2f')]);if(_0x551c8b[_0xe338('0x30')]){delete _0x551c8b[_0xe338('0x30')];}_0x440bcd[_0xe338('0x25')](_0x55f24e)[_0xe338('0x31')](_0x551c8b);};}exports[_0xe338('0x32')]=function(_0x2ebd49,_0x1da13c){var _0x52fe95={},_0x4f79fd={},_0x15298d={'count':0x0,'rows':[]};var _0x2b7ec8=db[_0xe338('0x33')][_0xe338('0x34')];_0x4f79fd['model']=_['keys'](_0x2b7ec8);_0x4f79fd[_0xe338('0x35')]=_[_0xe338('0x36')](_0x2ebd49[_0xe338('0x35')]);_0x4f79fd[_0xe338('0x37')]=_[_0xe338('0x38')](_0x4f79fd[_0xe338('0x39')],_0x4f79fd[_0xe338('0x35')]);_0x52fe95[_0xe338('0x3a')]=_[_0xe338('0x38')](_0x4f79fd[_0xe338('0x39')],qs[_0xe338('0x3b')](_0x2ebd49[_0xe338('0x35')]['fields']));_0x52fe95[_0xe338('0x3a')]=_0x52fe95[_0xe338('0x3a')]['length']?_0x52fe95[_0xe338('0x3a')]:_0x4f79fd[_0xe338('0x39')];if(!_0x2ebd49[_0xe338('0x35')][_0xe338('0x3c')](_0xe338('0x3d'))){_0x52fe95[_0xe338('0x3e')]=qs[_0xe338('0x3e')](_0x2ebd49['query']['limit']);_0x52fe95[_0xe338('0x29')]=qs[_0xe338('0x29')](_0x2ebd49[_0xe338('0x35')]['offset']);}_0x52fe95[_0xe338('0x3f')]=qs['sort'](_0x2ebd49[_0xe338('0x35')]['sort']);_0x52fe95[_0xe338('0x40')]=qs[_0xe338('0x37')](_[_0xe338('0x41')](_0x2ebd49[_0xe338('0x35')],_0x4f79fd[_0xe338('0x37')]));if(_0x2ebd49[_0xe338('0x35')][_0xe338('0x42')]){_0x52fe95[_0xe338('0x40')]=_['merge'](_0x52fe95[_0xe338('0x40')],{'$or':_[_0xe338('0x43')](_0x2b7ec8,function(_0x35dffd){if(_0x35dffd[_0xe338('0x44')]['key']!==_0xe338('0x45')){var _0x2daebd={};_0x2daebd[_0x35dffd[_0xe338('0x46')]]={'$like':'%'+_0x2ebd49[_0xe338('0x35')][_0xe338('0x42')]+'%'};return _0x2daebd;}})});}_0x52fe95=_['merge']({},_0x52fe95,_0x2ebd49[_0xe338('0x47')]);var _0x80a79a={'where':_0x52fe95[_0xe338('0x40')]};return db[_0xe338('0x33')]['count'](_0x80a79a)[_0xe338('0x1a')](function(_0x46459e){_0x15298d[_0xe338('0x28')]=_0x46459e;if(_0x2ebd49[_0xe338('0x35')][_0xe338('0x48')]){_0x52fe95[_0xe338('0x49')]=[{'all':!![]}];}return db[_0xe338('0x33')][_0xe338('0x4a')](_0x52fe95);})[_0xe338('0x1a')](function(_0x3c1e91){_0x15298d[_0xe338('0x4b')]=_0x3c1e91;return _0x15298d;})['then'](respondWithFilteredResult(_0x1da13c,_0x52fe95))[_0xe338('0x4c')](handleError(_0x1da13c,null));};exports[_0xe338('0x4d')]=function(_0x1c945a,_0x27e5c4){var _0x190919={'raw':![],'where':{'id':_0x1c945a[_0xe338('0x4e')]['id']}},_0x516e8a={};_0x516e8a[_0xe338('0x39')]=_[_0xe338('0x36')](db['SalesforceAccount']['rawAttributes']);_0x516e8a[_0xe338('0x35')]=_['keys'](_0x1c945a['query']);_0x516e8a['filters']=_['intersection'](_0x516e8a[_0xe338('0x39')],_0x516e8a[_0xe338('0x35')]);_0x190919[_0xe338('0x3a')]=_[_0xe338('0x38')](_0x516e8a['model'],qs[_0xe338('0x3b')](_0x1c945a[_0xe338('0x35')][_0xe338('0x3b')]));_0x190919['attributes']=_0x190919[_0xe338('0x3a')][_0xe338('0x4f')]?_0x190919['attributes']:_0x516e8a[_0xe338('0x39')];if(_0x1c945a[_0xe338('0x35')]['includeAll']){_0x190919[_0xe338('0x49')]=[{'all':!![]}];}_0x190919=_['merge']({},_0x190919,_0x1c945a[_0xe338('0x47')]);return db['SalesforceAccount'][_0xe338('0x50')](_0x190919)['then'](handleEntityNotFound(_0x27e5c4,null))['then'](respondWithResult(_0x27e5c4,null))['catch'](handleError(_0x27e5c4,null));};exports[_0xe338('0x51')]=function(_0x4de64f,_0x18c9ba){return db[_0xe338('0x33')][_0xe338('0x51')](_0x4de64f[_0xe338('0x52')],{})[_0xe338('0x1a')](respondWithResult(_0x18c9ba,0xc9))['catch'](handleError(_0x18c9ba,null));};exports[_0xe338('0x2d')]=function(_0x412ef0,_0x212bd){if(_0x412ef0[_0xe338('0x52')]['id']){delete _0x412ef0['body']['id'];}return db[_0xe338('0x33')][_0xe338('0x50')]({'where':{'id':_0x412ef0[_0xe338('0x4e')]['id']}})[_0xe338('0x1a')](handleEntityNotFound(_0x212bd,null))[_0xe338('0x1a')](saveUpdates(_0x412ef0[_0xe338('0x52')],null))[_0xe338('0x1a')](respondWithResult(_0x212bd,null))[_0xe338('0x4c')](handleError(_0x212bd,null));};exports[_0xe338('0x2e')]=function(_0x33809d,_0x3242eb){return db[_0xe338('0x33')][_0xe338('0x50')]({'where':{'id':_0x33809d[_0xe338('0x4e')]['id']}})[_0xe338('0x1a')](handleEntityNotFound(_0x3242eb,null))[_0xe338('0x1a')](removeEntity(_0x3242eb,null))[_0xe338('0x4c')](handleError(_0x3242eb,null));};exports[_0xe338('0x53')]=function(_0x2d7323,_0x423230,_0x49f867){var _0x20c6f6={};var _0xa9b9e5={};var _0x851048;var _0x3d561a;return db['SalesforceAccount'][_0xe338('0x54')]({'where':{'id':_0x2d7323[_0xe338('0x4e')]['id']}})[_0xe338('0x1a')](handleEntityNotFound(_0x423230,null))[_0xe338('0x1a')](function(_0x18063e){if(_0x18063e){_0x851048=_0x18063e;_0xa9b9e5['model']=_[_0xe338('0x36')](db[_0xe338('0x55')][_0xe338('0x34')]);_0xa9b9e5['query']=_['keys'](_0x2d7323['query']);_0xa9b9e5[_0xe338('0x37')]=_['intersection'](_0xa9b9e5['model'],_0xa9b9e5[_0xe338('0x35')]);_0x20c6f6[_0xe338('0x3a')]=_[_0xe338('0x38')](_0xa9b9e5[_0xe338('0x39')],qs[_0xe338('0x3b')](_0x2d7323['query'][_0xe338('0x3b')]));_0x20c6f6[_0xe338('0x3a')]=_0x20c6f6['attributes'][_0xe338('0x4f')]?_0x20c6f6[_0xe338('0x3a')]:_0xa9b9e5[_0xe338('0x39')];_0x20c6f6[_0xe338('0x3f')]=qs[_0xe338('0x56')](_0x2d7323[_0xe338('0x35')][_0xe338('0x56')]);_0x20c6f6[_0xe338('0x40')]=qs['filters'](_[_0xe338('0x41')](_0x2d7323[_0xe338('0x35')],_0xa9b9e5[_0xe338('0x37')]));if(_0x2d7323[_0xe338('0x35')][_0xe338('0x42')]){_0x20c6f6[_0xe338('0x40')]=_[_0xe338('0x57')](_0x20c6f6[_0xe338('0x40')],{'$or':_[_0xe338('0x43')](_0x20c6f6[_0xe338('0x3a')],function(_0x542299){var _0x5ac8b2={};_0x5ac8b2[_0x542299]={'$like':'%'+_0x2d7323[_0xe338('0x35')][_0xe338('0x42')]+'%'};return _0x5ac8b2;})});}_0x20c6f6=_[_0xe338('0x57')]({},_0x20c6f6,_0x2d7323[_0xe338('0x47')]);return _0x851048[_0xe338('0x53')](_0x20c6f6);}})[_0xe338('0x1a')](function(_0x4a754e){if(_0x4a754e){_0x3d561a=_0x4a754e[_0xe338('0x4f')];if(!_0x2d7323['query']['hasOwnProperty'](_0xe338('0x3d'))){_0x20c6f6[_0xe338('0x3e')]=qs[_0xe338('0x3e')](_0x2d7323['query'][_0xe338('0x3e')]);_0x20c6f6['offset']=qs[_0xe338('0x29')](_0x2d7323[_0xe338('0x35')][_0xe338('0x29')]);}return _0x851048[_0xe338('0x53')](_0x20c6f6);}})['then'](function(_0x2ad1ab){if(_0x2ad1ab){return _0x2ad1ab?{'count':_0x3d561a,'rows':_0x2ad1ab}:null;}})[_0xe338('0x1a')](respondWithResult(_0x423230,null))[_0xe338('0x4c')](handleError(_0x423230,null));};exports[_0xe338('0x58')]=function(_0x330321,_0x934b11,_0x49a764){if(_0x330321[_0xe338('0x52')]['id']){delete _0x330321[_0xe338('0x52')]['id'];}return db[_0xe338('0x33')]['findOne']({'where':{'id':_0x330321[_0xe338('0x4e')]['id']}})[_0xe338('0x1a')](handleEntityNotFound(_0x934b11,null))[_0xe338('0x1a')](function(_0x1897fe){if(_0x1897fe){_0x330321['body'][_0xe338('0x59')]=_0x1897fe['id'];_0x330321[_0xe338('0x52')][_0xe338('0x5a')]=integrations['getSubjects'](_0x330321['body']['channel'],_0x330321[_0xe338('0x52')]['type']);_0x330321[_0xe338('0x52')][_0xe338('0x5b')]=integrations[_0xe338('0x5c')](_0x330321[_0xe338('0x52')][_0xe338('0x5d')],_0x330321[_0xe338('0x52')][_0xe338('0x44')]);return db[_0xe338('0x55')][_0xe338('0x51')](_0x330321[_0xe338('0x52')],{'include':[{'model':db[_0xe338('0x5e')],'as':_0xe338('0x5a')},{'model':db[_0xe338('0x5e')],'as':'Descriptions'}]});}return null;})[_0xe338('0x1a')](respondWithResult(_0x934b11,null))['catch'](handleError(_0x934b11,null));};exports[_0xe338('0x5f')]=function(_0x53c756,_0x2a21e1,_0x245de7){var _0x362855;var _0x4c3146='';var _0x4577ea=_0xe338('0x60');return db[_0xe338('0x33')][_0xe338('0x54')]({'where':{'id':_0x53c756[_0xe338('0x4e')]['id']},'attributes':['id',_0xe338('0x61'),_0xe338('0x62'),_0xe338('0x63'),_0xe338('0x64'),'password','securityToken']})[_0xe338('0x1a')](handleEntityNotFound(_0x2a21e1,null))['then'](function(_0x486e0a){if(_0x486e0a){_0x4c3146=_0x486e0a[_0xe338('0x61')];var _0x1d52ea=_0x4c3146['slice'](-0x1);if(_0x1d52ea==='/'){_0x4c3146=_0x4c3146['substring'](0x0,_0x4c3146[_0xe338('0x65')](_0x1d52ea));}_0x362855=new jsforce[(_0xe338('0x66'))]({'oauth2':{'loginUrl':_0x4c3146,'clientId':_0x486e0a[_0xe338('0x62')],'clientSecret':_0x486e0a[_0xe338('0x63')]}});return _0x362855[_0xe338('0x67')](_0x486e0a[_0xe338('0x64')],_0x486e0a[_0xe338('0x68')][_0xe338('0x69')](_0x486e0a[_0xe338('0x6a')]));}})['then'](function(_0x27d531){if(_0x27d531){if(!_[_0xe338('0x6b')](_0x53c756[_0xe338('0x35')][_0xe338('0x6c')])){_0x4577ea=_0x53c756['query'][_0xe338('0x6c')];}return _0x362855[_0xe338('0x6d')](_0x4577ea)[_0xe338('0x6e')]();}})['then'](function(_0x162315){var _0x475817=[_0xe338('0x6f'),_0xe338('0x70'),_0xe338('0x71'),_0xe338('0x72'),_0xe338('0x73'),_0xe338('0x74'),'Status',_0xe338('0x75')];if(!_[_0xe338('0x6b')](_0x53c756[_0xe338('0x35')][_0xe338('0x6c')])&&_0x53c756[_0xe338('0x35')]['ticketType']==='Case'){_0x475817=[_0xe338('0x75'),_0xe338('0x76'),_0xe338('0x77'),_0xe338('0x78'),_0xe338('0x74'),_0xe338('0x79'),_0xe338('0x7a'),'SuppliedCompany'];}if(_0x162315){_[_0xe338('0x7b')](_0x162315[_0xe338('0x3b')],function(_0x4dead5){return _0x4dead5[_0xe338('0x7c')]===![]&&!_0x475817['includes'](_0x4dead5['name']);});return{'count':_0x162315[_0xe338('0x3b')][_0xe338('0x4f')],'rows':_[_0xe338('0x43')](_0x162315['fields'],function(_0x25be82){return{'id':_0x25be82[_0xe338('0x30')],'name':_0x25be82['label'],'custom':_0x25be82['custom'],'options':_0x25be82[_0xe338('0x7d')][_0xe338('0x4f')]>0x0?_[_0xe338('0x43')](_0x25be82['picklistValues'],function(_0x1de632){return{'name':_0x1de632['label'],'value':_0x1de632[_0xe338('0x7e')]};}):_0x25be82[_0xe338('0x44')]==_0xe338('0x7f')?[{'name':'True','value':_0xe338('0x80')},{'name':_0xe338('0x81'),'value':_0xe338('0x82')}]:[]};})};}})[_0xe338('0x1a')](respondWithResult(_0x2a21e1,null))['catch'](function(_0x56d602){var _0x290b2d=_0x53c756[_0xe338('0x35')][_0xe338('0x83')]?0x1f4:_0x56d602[_0xe338('0x84')]||0x1f4;logger['error'](_0xe338('0x85'),_0xe338('0x5f'),_0x290b2d,JSON[_0xe338('0x1d')](_0x56d602));delete _0x56d602[_0xe338('0x30')];if(_0x290b2d===0x191){_0x290b2d=0x190;}_0x2a21e1[_0xe338('0x25')](_0x290b2d)['send'](_0x53c756['query']['test']?{'message':_0xe338('0x86'),'statusCode':_0x56d602[_0xe338('0x84')]}:_0x56d602);});};
\ No newline at end of file
index d3a3bfa..12b46c1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5c00=['../../config/logger','moment','request-promise','path','rimraf','../../config/environment','../../components/integrations/configuration','exports','SalesforceAccount','int_salesforce_accounts','lodash','util'];(function(_0x1ea756,_0x53549b){var _0x1dbe16=function(_0x223dfc){while(--_0x223dfc){_0x1ea756['push'](_0x1ea756['shift']());}};_0x1dbe16(++_0x53549b);}(_0x5c00,0x17e));var _0x05c0=function(_0x27d443,_0x4ee5ec){_0x27d443=_0x27d443-0x0;var _0x21b822=_0x5c00[_0x27d443];return _0x21b822;};'use strict';var _=require(_0x05c0('0x0'));var util=require(_0x05c0('0x1'));var logger=require(_0x05c0('0x2'))('api');var moment=require(_0x05c0('0x3'));var BPromise=require('bluebird');var rp=require(_0x05c0('0x4'));var fs=require('fs');var path=require(_0x05c0('0x5'));var rimraf=require(_0x05c0('0x6'));var config=require(_0x05c0('0x7'));var attributes=require('./intSalesforceAccount.attributes');var integrations=require(_0x05c0('0x8'));module[_0x05c0('0x9')]=function(_0x261624,_0x27dc10){return _0x261624['define'](_0x05c0('0xa'),attributes,{'tableName':_0x05c0('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x536f=['lodash','bluebird','request-promise','path','rimraf','./intSalesforceAccount.attributes','exports','int_salesforce_accounts'];(function(_0x3bb418,_0x4b5550){var _0x57344c=function(_0x5c53bb){while(--_0x5c53bb){_0x3bb418['push'](_0x3bb418['shift']());}};_0x57344c(++_0x4b5550);}(_0x536f,0x70));var _0xf536=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x536f[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0xf536('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require('moment');var BPromise=require(_0xf536('0x1'));var rp=require(_0xf536('0x2'));var fs=require('fs');var path=require(_0xf536('0x3'));var rimraf=require(_0xf536('0x4'));var config=require('../../config/environment');var attributes=require(_0xf536('0x5'));var integrations=require('../../components/integrations/configuration');module[_0xf536('0x6')]=function(_0x7e339b,_0x2fc517){return _0x7e339b['define']('SalesforceAccount',attributes,{'tableName':_0xf536('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 9525b6b..e1d3c4d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9a1b=['randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','SalesforceAccount,\x20%s,\x20%s','request\x20sent','debug','SalesforceAccount,\x20%s,\x20%s,\x20%s','error','code','message','catch','GetSalesforceAccount','SalesforceAccount','options','raw','where','attributes','include','map','model','stringify','ShowSalesforceAccount','find','lodash','moment','bluebird'];(function(_0x3b2000,_0x386e2d){var _0x51d5b1=function(_0x1ae0c5){while(--_0x1ae0c5){_0x3b2000['push'](_0x3b2000['shift']());}};_0x51d5b1(++_0x386e2d);}(_0x9a1b,0x17e));var _0xb9a1=function(_0x37c657,_0x41e62d){_0x37c657=_0x37c657-0x0;var _0x165959=_0x9a1b[_0x37c657];return _0x165959;};'use strict';var _=require(_0xb9a1('0x0'));var util=require('util');var moment=require(_0xb9a1('0x1'));var BPromise=require(_0xb9a1('0x2'));var rs=require(_0xb9a1('0x3'));var fs=require('fs');var Redis=require(_0xb9a1('0x4'));var db=require(_0xb9a1('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xb9a1('0x6'))(_0xb9a1('0x7'));var config=require(_0xb9a1('0x8'));var jayson=require(_0xb9a1('0x9'));var client=jayson[_0xb9a1('0xa')][_0xb9a1('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x1a7787,_0x52828f,_0x51941a){return new BPromise(function(_0x232730,_0x409e87){return client[_0xb9a1('0xc')](_0x1a7787,_0x51941a)[_0xb9a1('0xd')](function(_0x5517d6){logger[_0xb9a1('0xe')](_0xb9a1('0xf'),_0x52828f,_0xb9a1('0x10'));logger[_0xb9a1('0x11')](_0xb9a1('0x12'),_0x52828f,_0xb9a1('0x10'),JSON['stringify'](_0x5517d6));if(_0x5517d6[_0xb9a1('0x13')]){if(_0x5517d6[_0xb9a1('0x13')][_0xb9a1('0x14')]===0x1f4){logger[_0xb9a1('0x13')]('SalesforceAccount,\x20%s,\x20%s',_0x52828f,_0x5517d6[_0xb9a1('0x13')][_0xb9a1('0x15')]);return _0x409e87(_0x5517d6[_0xb9a1('0x13')][_0xb9a1('0x15')]);}logger[_0xb9a1('0x13')]('SalesforceAccount,\x20%s,\x20%s',_0x52828f,_0x5517d6[_0xb9a1('0x13')][_0xb9a1('0x15')]);return _0x232730(_0x5517d6['error'][_0xb9a1('0x15')]);}else{logger[_0xb9a1('0xe')](_0xb9a1('0xf'),_0x52828f,'request\x20sent');_0x232730(_0x5517d6['result'][_0xb9a1('0x15')]);}})[_0xb9a1('0x16')](function(_0x347ed4){logger[_0xb9a1('0x13')](_0xb9a1('0xf'),_0x52828f,_0x347ed4);_0x409e87(_0x347ed4);});});}exports[_0xb9a1('0x17')]=function(_0x5322eb){var _0x568c17=this;return new Promise(function(_0x456108,_0x4b9acc){return db[_0xb9a1('0x18')]['findAll']({'raw':_0x5322eb[_0xb9a1('0x19')]?_0x5322eb[_0xb9a1('0x19')][_0xb9a1('0x1a')]===undefined?!![]:![]:!![],'where':_0x5322eb[_0xb9a1('0x19')]?_0x5322eb[_0xb9a1('0x19')][_0xb9a1('0x1b')]||null:null,'attributes':_0x5322eb[_0xb9a1('0x19')]?_0x5322eb[_0xb9a1('0x19')][_0xb9a1('0x1c')]||null:null,'limit':_0x5322eb[_0xb9a1('0x19')]?_0x5322eb[_0xb9a1('0x19')]['limit']||null:null,'include':_0x5322eb['options']?_0x5322eb[_0xb9a1('0x19')][_0xb9a1('0x1d')]?_[_0xb9a1('0x1e')](_0x5322eb[_0xb9a1('0x19')][_0xb9a1('0x1d')],function(_0x151267){return{'model':db[_0x151267[_0xb9a1('0x1f')]],'as':_0x151267['as'],'attributes':_0x151267[_0xb9a1('0x1c')],'include':_0x151267[_0xb9a1('0x1d')]?_['map'](_0x151267[_0xb9a1('0x1d')],function(_0x1fed8e){return{'model':db[_0x1fed8e[_0xb9a1('0x1f')]],'as':_0x1fed8e['as'],'attributes':_0x1fed8e[_0xb9a1('0x1c')],'include':_0x1fed8e[_0xb9a1('0x1d')]?_[_0xb9a1('0x1e')](_0x1fed8e[_0xb9a1('0x1d')],function(_0x41e599){return{'model':db[_0x41e599['model']],'as':_0x41e599['as'],'attributes':_0x41e599[_0xb9a1('0x1c')]};}):[]};}):[]};}):[]:[]})[_0xb9a1('0xd')](function(_0xe89179){logger[_0xb9a1('0xe')]('GetSalesforceAccount',_0x5322eb);logger['debug']('GetSalesforceAccount',_0x5322eb,JSON[_0xb9a1('0x20')](_0xe89179));_0x456108(_0xe89179);})[_0xb9a1('0x16')](function(_0x1de624){logger[_0xb9a1('0x13')](_0xb9a1('0x17'),_0x1de624[_0xb9a1('0x15')],_0x5322eb);_0x4b9acc(_0x568c17['error'](0x1f4,_0x1de624[_0xb9a1('0x15')]));});});};exports[_0xb9a1('0x21')]=function(_0x308703){var _0xfec40f=this;return new Promise(function(_0x4fb0bf,_0x4c3d80){return db['SalesforceAccount'][_0xb9a1('0x22')]({'raw':_0x308703[_0xb9a1('0x19')]?_0x308703[_0xb9a1('0x19')][_0xb9a1('0x1a')]===undefined?!![]:![]:!![],'where':_0x308703['options']?_0x308703[_0xb9a1('0x19')][_0xb9a1('0x1b')]||null:null,'attributes':_0x308703['options']?_0x308703[_0xb9a1('0x19')]['attributes']||null:null,'include':_0x308703[_0xb9a1('0x19')]?_0x308703[_0xb9a1('0x19')][_0xb9a1('0x1d')]?_[_0xb9a1('0x1e')](_0x308703[_0xb9a1('0x19')][_0xb9a1('0x1d')],function(_0x45441f){return{'model':db[_0x45441f[_0xb9a1('0x1f')]],'as':_0x45441f['as'],'attributes':_0x45441f[_0xb9a1('0x1c')],'include':_0x45441f['include']?_[_0xb9a1('0x1e')](_0x45441f[_0xb9a1('0x1d')],function(_0x16b268){return{'model':db[_0x16b268[_0xb9a1('0x1f')]],'as':_0x16b268['as'],'attributes':_0x16b268[_0xb9a1('0x1c')],'include':_0x16b268[_0xb9a1('0x1d')]?_[_0xb9a1('0x1e')](_0x16b268['include'],function(_0x12a630){return{'model':db[_0x12a630['model']],'as':_0x12a630['as'],'attributes':_0x12a630[_0xb9a1('0x1c')]};}):[]};}):[]};}):[]:[]})[_0xb9a1('0xd')](function(_0xe958e7){logger['info'](_0xb9a1('0x21'),_0x308703);logger[_0xb9a1('0x11')](_0xb9a1('0x21'),_0x308703,JSON['stringify'](_0xe958e7));_0x4fb0bf(_0xe958e7);})[_0xb9a1('0x16')](function(_0x585724){logger[_0xb9a1('0x13')](_0xb9a1('0x21'),_0x585724['message'],_0x308703);_0x4c3d80(_0xfec40f[_0xb9a1('0x13')](0x1f4,_0x585724[_0xb9a1('0x15')]));});});};
\ No newline at end of file
+var _0x9eb0=['catch','ShowSalesforceAccount','find','where','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','debug','stringify','error','code','SalesforceAccount,\x20%s,\x20%s','message','result','raw','options','attributes','limit','include','map','model','GetSalesforceAccount'];(function(_0x2fb55e,_0x1811ba){var _0x4bd46d=function(_0x44466b){while(--_0x44466b){_0x2fb55e['push'](_0x2fb55e['shift']());}};_0x4bd46d(++_0x1811ba);}(_0x9eb0,0x185));var _0x09eb=function(_0x314bbf,_0x50b79e){_0x314bbf=_0x314bbf-0x0;var _0x3c8bb5=_0x9eb0[_0x314bbf];return _0x3c8bb5;};'use strict';var _=require(_0x09eb('0x0'));var util=require(_0x09eb('0x1'));var moment=require(_0x09eb('0x2'));var BPromise=require(_0x09eb('0x3'));var rs=require(_0x09eb('0x4'));var fs=require('fs');var Redis=require(_0x09eb('0x5'));var db=require(_0x09eb('0x6'))['db'];var utils=require(_0x09eb('0x7'));var logger=require(_0x09eb('0x8'))(_0x09eb('0x9'));var config=require('../../config/environment');var jayson=require(_0x09eb('0xa'));var client=jayson[_0x09eb('0xb')][_0x09eb('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x4ce30f,_0x493c36,_0x2c2434){return new BPromise(function(_0x982b0f,_0x5ced57){return client[_0x09eb('0xd')](_0x4ce30f,_0x2c2434)[_0x09eb('0xe')](function(_0x3f52f5){logger[_0x09eb('0xf')]('SalesforceAccount,\x20%s,\x20%s',_0x493c36,'request\x20sent');logger[_0x09eb('0x10')]('SalesforceAccount,\x20%s,\x20%s,\x20%s',_0x493c36,'request\x20sent',JSON[_0x09eb('0x11')](_0x3f52f5));if(_0x3f52f5[_0x09eb('0x12')]){if(_0x3f52f5[_0x09eb('0x12')][_0x09eb('0x13')]===0x1f4){logger[_0x09eb('0x12')](_0x09eb('0x14'),_0x493c36,_0x3f52f5[_0x09eb('0x12')][_0x09eb('0x15')]);return _0x5ced57(_0x3f52f5['error'][_0x09eb('0x15')]);}logger[_0x09eb('0x12')](_0x09eb('0x14'),_0x493c36,_0x3f52f5['error'][_0x09eb('0x15')]);return _0x982b0f(_0x3f52f5[_0x09eb('0x12')][_0x09eb('0x15')]);}else{logger['info']('SalesforceAccount,\x20%s,\x20%s',_0x493c36,'request\x20sent');_0x982b0f(_0x3f52f5[_0x09eb('0x16')][_0x09eb('0x15')]);}})['catch'](function(_0x3fd163){logger[_0x09eb('0x12')](_0x09eb('0x14'),_0x493c36,_0x3fd163);_0x5ced57(_0x3fd163);});});}exports['GetSalesforceAccount']=function(_0x5ed998){var _0x3652f1=this;return new Promise(function(_0x435c2a,_0x2492ef){return db['SalesforceAccount']['findAll']({'raw':_0x5ed998['options']?_0x5ed998['options'][_0x09eb('0x17')]===undefined?!![]:![]:!![],'where':_0x5ed998[_0x09eb('0x18')]?_0x5ed998[_0x09eb('0x18')]['where']||null:null,'attributes':_0x5ed998[_0x09eb('0x18')]?_0x5ed998['options'][_0x09eb('0x19')]||null:null,'limit':_0x5ed998[_0x09eb('0x18')]?_0x5ed998[_0x09eb('0x18')][_0x09eb('0x1a')]||null:null,'include':_0x5ed998[_0x09eb('0x18')]?_0x5ed998[_0x09eb('0x18')][_0x09eb('0x1b')]?_[_0x09eb('0x1c')](_0x5ed998[_0x09eb('0x18')][_0x09eb('0x1b')],function(_0x54a4c9){return{'model':db[_0x54a4c9['model']],'as':_0x54a4c9['as'],'attributes':_0x54a4c9['attributes'],'include':_0x54a4c9['include']?_['map'](_0x54a4c9[_0x09eb('0x1b')],function(_0x3ba6c6){return{'model':db[_0x3ba6c6[_0x09eb('0x1d')]],'as':_0x3ba6c6['as'],'attributes':_0x3ba6c6[_0x09eb('0x19')],'include':_0x3ba6c6[_0x09eb('0x1b')]?_['map'](_0x3ba6c6[_0x09eb('0x1b')],function(_0x2b2933){return{'model':db[_0x2b2933[_0x09eb('0x1d')]],'as':_0x2b2933['as'],'attributes':_0x2b2933[_0x09eb('0x19')]};}):[]};}):[]};}):[]:[]})[_0x09eb('0xe')](function(_0x53f6dc){logger[_0x09eb('0xf')](_0x09eb('0x1e'),_0x5ed998);logger[_0x09eb('0x10')](_0x09eb('0x1e'),_0x5ed998,JSON[_0x09eb('0x11')](_0x53f6dc));_0x435c2a(_0x53f6dc);})[_0x09eb('0x1f')](function(_0x37e8ea){logger['error'](_0x09eb('0x1e'),_0x37e8ea[_0x09eb('0x15')],_0x5ed998);_0x2492ef(_0x3652f1[_0x09eb('0x12')](0x1f4,_0x37e8ea[_0x09eb('0x15')]));});});};exports[_0x09eb('0x20')]=function(_0x731f99){var _0x236912=this;return new Promise(function(_0x5ea7ac,_0x52bb84){return db['SalesforceAccount'][_0x09eb('0x21')]({'raw':_0x731f99[_0x09eb('0x18')]?_0x731f99[_0x09eb('0x18')][_0x09eb('0x17')]===undefined?!![]:![]:!![],'where':_0x731f99[_0x09eb('0x18')]?_0x731f99[_0x09eb('0x18')][_0x09eb('0x22')]||null:null,'attributes':_0x731f99[_0x09eb('0x18')]?_0x731f99[_0x09eb('0x18')][_0x09eb('0x19')]||null:null,'include':_0x731f99['options']?_0x731f99['options']['include']?_[_0x09eb('0x1c')](_0x731f99['options'][_0x09eb('0x1b')],function(_0x4ec468){return{'model':db[_0x4ec468['model']],'as':_0x4ec468['as'],'attributes':_0x4ec468[_0x09eb('0x19')],'include':_0x4ec468['include']?_[_0x09eb('0x1c')](_0x4ec468['include'],function(_0xd8002d){return{'model':db[_0xd8002d[_0x09eb('0x1d')]],'as':_0xd8002d['as'],'attributes':_0xd8002d['attributes'],'include':_0xd8002d['include']?_[_0x09eb('0x1c')](_0xd8002d['include'],function(_0x410983){return{'model':db[_0x410983[_0x09eb('0x1d')]],'as':_0x410983['as'],'attributes':_0x410983['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x389110){logger[_0x09eb('0xf')]('ShowSalesforceAccount',_0x731f99);logger[_0x09eb('0x10')]('ShowSalesforceAccount',_0x731f99,JSON[_0x09eb('0x11')](_0x389110));_0x5ea7ac(_0x389110);})[_0x09eb('0x1f')](function(_0x1dafdd){logger[_0x09eb('0x12')]('ShowSalesforceAccount',_0x1dafdd[_0x09eb('0x15')],_0x731f99);_0x52bb84(_0x236912[_0x09eb('0x12')](0x1f4,_0x1dafdd['message']));});});};
\ No newline at end of file
index 6aacf39..266dd3f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x44b3=['express','../../components/auth/service','../../config/environment','get','index','/:id','isAuthenticated','/:id/fields','/:id/subjects','getSubjects','/:id/descriptions','post','create','update','delete','destroy','exports','multer','util','path','connect-timeout'];(function(_0x473d5b,_0xf1f27d){var _0x5564c9=function(_0x3f1074){while(--_0x3f1074){_0x473d5b['push'](_0x473d5b['shift']());}};_0x5564c9(++_0xf1f27d);}(_0x44b3,0x137));var _0x344b=function(_0x45fdb3,_0x374161){_0x45fdb3=_0x45fdb3-0x0;var _0x25575e=_0x44b3[_0x45fdb3];return _0x25575e;};'use strict';var multer=require(_0x344b('0x0'));var util=require(_0x344b('0x1'));var path=require(_0x344b('0x2'));var timeout=require(_0x344b('0x3'));var express=require(_0x344b('0x4'));var router=express['Router']();var auth=require(_0x344b('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x344b('0x6'));var controller=require('./intSalesforceConfiguration.controller');router[_0x344b('0x7')]('/',auth['isAuthenticated'](),controller[_0x344b('0x8')]);router[_0x344b('0x7')](_0x344b('0x9'),auth[_0x344b('0xa')](),controller['show']);router[_0x344b('0x7')](_0x344b('0xb'),auth[_0x344b('0xa')](),controller['getFields']);router['get'](_0x344b('0xc'),auth[_0x344b('0xa')](),controller[_0x344b('0xd')]);router['get'](_0x344b('0xe'),auth[_0x344b('0xa')](),controller['getDescriptions']);router[_0x344b('0xf')]('/',auth[_0x344b('0xa')](),controller[_0x344b('0x10')]);router['put'](_0x344b('0x9'),auth[_0x344b('0xa')](),controller[_0x344b('0x11')]);router[_0x344b('0x12')](_0x344b('0x9'),auth['isAuthenticated'](),controller[_0x344b('0x13')]);module[_0x344b('0x14')]=router;
\ No newline at end of file
+var _0x2004=['delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./intSalesforceConfiguration.controller','get','isAuthenticated','index','/:id','/:id/fields','getFields','getSubjects','/:id/descriptions','getDescriptions','post','put','update'];(function(_0xdeefbd,_0x9e1b3d){var _0x4ff63f=function(_0x4b51f9){while(--_0x4b51f9){_0xdeefbd['push'](_0xdeefbd['shift']());}};_0x4ff63f(++_0x9e1b3d);}(_0x2004,0x10b));var _0x4200=function(_0x420276,_0x24d91a){_0x420276=_0x420276-0x0;var _0x276093=_0x2004[_0x420276];return _0x276093;};'use strict';var multer=require(_0x4200('0x0'));var util=require(_0x4200('0x1'));var path=require(_0x4200('0x2'));var timeout=require(_0x4200('0x3'));var express=require(_0x4200('0x4'));var router=express[_0x4200('0x5')]();var auth=require(_0x4200('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x4200('0x7'));var controller=require(_0x4200('0x8'));router[_0x4200('0x9')]('/',auth[_0x4200('0xa')](),controller[_0x4200('0xb')]);router[_0x4200('0x9')](_0x4200('0xc'),auth[_0x4200('0xa')](),controller['show']);router[_0x4200('0x9')](_0x4200('0xd'),auth['isAuthenticated'](),controller[_0x4200('0xe')]);router[_0x4200('0x9')]('/:id/subjects',auth[_0x4200('0xa')](),controller[_0x4200('0xf')]);router['get'](_0x4200('0x10'),auth[_0x4200('0xa')](),controller[_0x4200('0x11')]);router[_0x4200('0x12')]('/',auth[_0x4200('0xa')](),controller['create']);router[_0x4200('0x13')](_0x4200('0xc'),auth[_0x4200('0xa')](),controller[_0x4200('0x14')]);router[_0x4200('0x15')](_0x4200('0xc'),auth['isAuthenticated'](),controller[_0x4200('0x16')]);module[_0x4200('0x17')]=router;
\ No newline at end of file
index 8067d8d..afd49dc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1eec=['contact','lead','sequelize','exports','STRING','Case','ENUM','contact_lead'];(function(_0x367a3d,_0x452717){var _0x460539=function(_0x1e8beb){while(--_0x1e8beb){_0x367a3d['push'](_0x367a3d['shift']());}};_0x460539(++_0x452717);}(_0x1eec,0x1a2));var _0xc1ee=function(_0x2e4e19,_0x493b50){_0x2e4e19=_0x2e4e19-0x0;var _0x9ba20b=_0x1eec[_0x2e4e19];return _0x9ba20b;};'use strict';var Sequelize=require(_0xc1ee('0x0'));module[_0xc1ee('0x1')]={'name':{'type':Sequelize[_0xc1ee('0x2')]},'description':{'type':Sequelize[_0xc1ee('0x2')]},'ticketType':{'type':Sequelize['ENUM']('Task',_0xc1ee('0x3')),'defaultValue':'Task'},'moduleSearch':{'type':Sequelize[_0xc1ee('0x4')](_0xc1ee('0x5'),_0xc1ee('0x6'),_0xc1ee('0x7')),'defaultValue':_0xc1ee('0x5')},'moduleCreate':{'type':Sequelize['ENUM']('nothing','contact',_0xc1ee('0x7')),'defaultValue':_0xc1ee('0x7')}};
\ No newline at end of file
+var _0x3a88=['STRING','ENUM','Task','contact_lead','contact','lead','nothing','sequelize','exports'];(function(_0x586f88,_0x1d2c8f){var _0x323829=function(_0x307be9){while(--_0x307be9){_0x586f88['push'](_0x586f88['shift']());}};_0x323829(++_0x1d2c8f);}(_0x3a88,0x130));var _0x83a8=function(_0x1fdb40,_0x51351c){_0x1fdb40=_0x1fdb40-0x0;var _0x281f93=_0x3a88[_0x1fdb40];return _0x281f93;};'use strict';var Sequelize=require(_0x83a8('0x0'));module[_0x83a8('0x1')]={'name':{'type':Sequelize[_0x83a8('0x2')]},'description':{'type':Sequelize[_0x83a8('0x2')]},'ticketType':{'type':Sequelize[_0x83a8('0x3')]('Task','Case'),'defaultValue':_0x83a8('0x4')},'moduleSearch':{'type':Sequelize[_0x83a8('0x3')](_0x83a8('0x5'),_0x83a8('0x6'),_0x83a8('0x7')),'defaultValue':_0x83a8('0x5')},'moduleCreate':{'type':Sequelize[_0x83a8('0x3')](_0x83a8('0x8'),'contact',_0x83a8('0x7')),'defaultValue':'lead'}};
\ No newline at end of file
index 6c0fcbf..689e069 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6282=['catch','show','params','create','body','destroy','find','getFields','findOne','SalesforceField','order','map','hasOwnProperty','getSubjects','getDescriptions','eml-format','rimraf','zip-dir','moment','bluebird','to-csv','lodash','squel','crypto','jsforce','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/environment','../../mysqldb','jayson/promise','client','http','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','SalesforceConfiguration,\x20%s,\x20%s','request\x20sent','debug','SalesforceConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','sendStatus','end','status','json','count','offset','limit','set','apply','reject','save','update','stack','name','send','SalesforceConfiguration','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','nolimit','sort','where','pick','filter','merge','type','key','options','includeAll','include','findAll','rows'];(function(_0x4e904e,_0x33e4ef){var _0x14601a=function(_0x4bc023){while(--_0x4bc023){_0x4e904e['push'](_0x4e904e['shift']());}};_0x14601a(++_0x33e4ef);}(_0x6282,0x10e));var _0x2628=function(_0x40d015,_0x4fc6e6){_0x40d015=_0x40d015-0x0;var _0x2af92e=_0x6282[_0x40d015];return _0x2af92e;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x2628('0x0'));var rimraf=require(_0x2628('0x1'));var zipdir=require(_0x2628('0x2'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x2628('0x3'));var BPromise=require(_0x2628('0x4'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0x2628('0x5'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x2628('0x6'));var squel=require(_0x2628('0x7'));var crypto=require(_0x2628('0x8'));var jsforce=require(_0x2628('0x9'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0x2628('0xa'));var authService=require('../../components/auth/service');var qs=require(_0x2628('0xb'));var hardwareService=require(_0x2628('0xc'));var logger=require(_0x2628('0xd'))('api');var utils=require('../../config/utils');var config=require(_0x2628('0xe'));var db=require(_0x2628('0xf'))['db'];var jayson=require(_0x2628('0x10'));var client=jayson[_0x2628('0x11')][_0x2628('0x12')]({'port':0x232a});function checkPasswordPattern(_0x2f3838,_0x4b97c,_0x5e6e7b){if(_0x5e6e7b){var _0x5b8560=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x5b8560['test'](_0x4b97c)){return _0x2f3838;}else{throw new Error(_0x2628('0x13'));}}else{return _0x2f3838;}}function respondWithRpcPromise(_0x5f080c,_0x59b966,_0x167de8,_0x190ae5){return new BPromise(function(_0x231b08,_0x30fdb8){var _0x465c8c=_0x190ae5||client;return _0x465c8c[_0x2628('0x14')](_0x5f080c,_0x167de8)[_0x2628('0x15')](function(_0x315fe3){logger[_0x2628('0x16')](_0x2628('0x17'),_0x59b966,_0x2628('0x18'));logger[_0x2628('0x19')](_0x2628('0x1a'),_0x59b966,_0x2628('0x18'),JSON[_0x2628('0x1b')](_0x315fe3));if(_0x315fe3[_0x2628('0x1c')]){if(_0x315fe3[_0x2628('0x1c')][_0x2628('0x1d')]===0x1f4){logger[_0x2628('0x1c')]('SalesforceConfiguration,\x20%s,\x20%s',_0x59b966,_0x315fe3['error']['message']);return _0x30fdb8(_0x315fe3['error'][_0x2628('0x1e')]);}logger[_0x2628('0x1c')](_0x2628('0x17'),_0x59b966,_0x315fe3[_0x2628('0x1c')]['message']);return _0x231b08(_0x315fe3['error'][_0x2628('0x1e')]);}else{logger[_0x2628('0x16')]('SalesforceConfiguration,\x20%s,\x20%s',_0x59b966,_0x2628('0x18'));_0x231b08(_0x315fe3[_0x2628('0x1f')][_0x2628('0x1e')]);}})['catch'](function(_0xe5ca07){logger[_0x2628('0x1c')](_0x2628('0x17'),_0x59b966,_0xe5ca07);_0x30fdb8(_0xe5ca07);});});}function respondWithStatusCode(_0x2412ef,_0x2565c0){_0x2565c0=_0x2565c0||0xcc;return function(_0x29c5b8){if(_0x29c5b8){return _0x2412ef[_0x2628('0x20')](_0x2565c0);}return _0x2412ef['status'](_0x2565c0)[_0x2628('0x21')]();};}function respondWithResult(_0x37be28,_0x2da193){_0x2da193=_0x2da193||0xc8;return function(_0x496d22){if(_0x496d22){return _0x37be28[_0x2628('0x22')](_0x2da193)[_0x2628('0x23')](_0x496d22);}};}function respondWithFilteredResult(_0x46a022,_0x4013ff){return function(_0x23e133){if(_0x23e133){var _0x22cabc=_0x23e133[_0x2628('0x24')],_0x2614d9=_0x4013ff[_0x2628('0x25')],_0x4d4f7d=_0x4013ff[_0x2628('0x25')]+_0x4013ff[_0x2628('0x26')],_0x1909a2;if(_0x4d4f7d>=_0x22cabc){_0x4d4f7d=_0x22cabc;_0x1909a2=0xc8;}else{_0x1909a2=0xce;}_0x46a022[_0x2628('0x22')](_0x1909a2);return _0x46a022[_0x2628('0x27')]('Content-Range',_0x2614d9+'-'+_0x4d4f7d+'/'+_0x22cabc)[_0x2628('0x23')](_0x23e133);}return null;};}function patchUpdates(_0x64cf42){return function(_0x2a8b53){try{jsonpatch[_0x2628('0x28')](_0x2a8b53,_0x64cf42,!![]);}catch(_0x2f5e36){return BPromise[_0x2628('0x29')](_0x2f5e36);}return _0x2a8b53[_0x2628('0x2a')]();};}function saveUpdates(_0x4b50eb,_0x10d59a){return function(_0x23fb69){if(_0x23fb69){return _0x23fb69[_0x2628('0x2b')](_0x4b50eb)[_0x2628('0x15')](function(_0x56326e){return _0x56326e;});}return null;};}function removeEntity(_0x122a9a,_0x4b0c90){return function(_0x5d2a06){if(_0x5d2a06){return _0x5d2a06['destroy']()[_0x2628('0x15')](function(){_0x122a9a[_0x2628('0x22')](0xcc)[_0x2628('0x21')]();});}};}function handleEntityNotFound(_0x1010b5,_0x317e37){return function(_0x2f6e6c){if(!_0x2f6e6c){_0x1010b5[_0x2628('0x20')](0x194);}return _0x2f6e6c;};}function handleError(_0x473007,_0x39a56d){_0x39a56d=_0x39a56d||0x1f4;return function(_0x50dbd9){logger[_0x2628('0x1c')](_0x50dbd9[_0x2628('0x2c')]);if(_0x50dbd9[_0x2628('0x2d')]){delete _0x50dbd9['name'];}_0x473007['status'](_0x39a56d)[_0x2628('0x2e')](_0x50dbd9);};}exports['index']=function(_0x3112f8,_0x5d5450){var _0x297eaf={},_0x284b86={},_0x359304={'count':0x0,'rows':[]};var _0x3894fe=db[_0x2628('0x2f')][_0x2628('0x30')];_0x284b86[_0x2628('0x31')]=_[_0x2628('0x32')](_0x3894fe);_0x284b86[_0x2628('0x33')]=_[_0x2628('0x32')](_0x3112f8[_0x2628('0x33')]);_0x284b86[_0x2628('0x34')]=_['intersection'](_0x284b86[_0x2628('0x31')],_0x284b86[_0x2628('0x33')]);_0x297eaf['attributes']=_[_0x2628('0x35')](_0x284b86['model'],qs[_0x2628('0x36')](_0x3112f8['query'][_0x2628('0x36')]));_0x297eaf[_0x2628('0x37')]=_0x297eaf[_0x2628('0x37')][_0x2628('0x38')]?_0x297eaf[_0x2628('0x37')]:_0x284b86[_0x2628('0x31')];if(!_0x3112f8[_0x2628('0x33')]['hasOwnProperty'](_0x2628('0x39'))){_0x297eaf['limit']=qs[_0x2628('0x26')](_0x3112f8[_0x2628('0x33')][_0x2628('0x26')]);_0x297eaf[_0x2628('0x25')]=qs['offset'](_0x3112f8['query'][_0x2628('0x25')]);}_0x297eaf['order']=qs['sort'](_0x3112f8[_0x2628('0x33')][_0x2628('0x3a')]);_0x297eaf[_0x2628('0x3b')]=qs[_0x2628('0x34')](_[_0x2628('0x3c')](_0x3112f8[_0x2628('0x33')],_0x284b86[_0x2628('0x34')]));if(_0x3112f8[_0x2628('0x33')][_0x2628('0x3d')]){_0x297eaf['where']=_[_0x2628('0x3e')](_0x297eaf[_0x2628('0x3b')],{'$or':_['map'](_0x3894fe,function(_0x426d75){if(_0x426d75[_0x2628('0x3f')][_0x2628('0x40')]!=='VIRTUAL'){var _0x45feda={};_0x45feda[_0x426d75['field']]={'$like':'%'+_0x3112f8[_0x2628('0x33')]['filter']+'%'};return _0x45feda;}})});}_0x297eaf=_[_0x2628('0x3e')]({},_0x297eaf,_0x3112f8[_0x2628('0x41')]);var _0x4c6bfd={'where':_0x297eaf[_0x2628('0x3b')]};return db[_0x2628('0x2f')][_0x2628('0x24')](_0x4c6bfd)['then'](function(_0x46e299){_0x359304['count']=_0x46e299;if(_0x3112f8[_0x2628('0x33')][_0x2628('0x42')]){_0x297eaf[_0x2628('0x43')]=[{'all':!![]}];}return db[_0x2628('0x2f')][_0x2628('0x44')](_0x297eaf);})[_0x2628('0x15')](function(_0x5403c0){_0x359304[_0x2628('0x45')]=_0x5403c0;return _0x359304;})[_0x2628('0x15')](respondWithFilteredResult(_0x5d5450,_0x297eaf))[_0x2628('0x46')](handleError(_0x5d5450,null));};exports[_0x2628('0x47')]=function(_0x2e703c,_0x40ac29){var _0xd1758d={'raw':![],'where':{'id':_0x2e703c[_0x2628('0x48')]['id']}},_0x249c17={};_0x249c17[_0x2628('0x31')]=_[_0x2628('0x32')](db[_0x2628('0x2f')]['rawAttributes']);_0x249c17[_0x2628('0x33')]=_[_0x2628('0x32')](_0x2e703c[_0x2628('0x33')]);_0x249c17[_0x2628('0x34')]=_[_0x2628('0x35')](_0x249c17[_0x2628('0x31')],_0x249c17[_0x2628('0x33')]);_0xd1758d['attributes']=_['intersection'](_0x249c17[_0x2628('0x31')],qs[_0x2628('0x36')](_0x2e703c[_0x2628('0x33')]['fields']));_0xd1758d[_0x2628('0x37')]=_0xd1758d[_0x2628('0x37')][_0x2628('0x38')]?_0xd1758d[_0x2628('0x37')]:_0x249c17[_0x2628('0x31')];if(_0x2e703c[_0x2628('0x33')][_0x2628('0x42')]){_0xd1758d[_0x2628('0x43')]=[{'all':!![]}];}_0xd1758d=_['merge']({},_0xd1758d,_0x2e703c[_0x2628('0x41')]);return db[_0x2628('0x2f')]['find'](_0xd1758d)[_0x2628('0x15')](handleEntityNotFound(_0x40ac29,null))[_0x2628('0x15')](respondWithResult(_0x40ac29,null))[_0x2628('0x46')](handleError(_0x40ac29,null));};exports[_0x2628('0x49')]=function(_0x41cf2b,_0x3f334e){return db[_0x2628('0x2f')][_0x2628('0x49')](_0x41cf2b[_0x2628('0x4a')],{})[_0x2628('0x15')](respondWithResult(_0x3f334e,0xc9))[_0x2628('0x46')](handleError(_0x3f334e,null));};exports[_0x2628('0x2b')]=function(_0x5e3890,_0x5def65){if(_0x5e3890[_0x2628('0x4a')]['id']){delete _0x5e3890['body']['id'];}return db[_0x2628('0x2f')]['find']({'where':{'id':_0x5e3890[_0x2628('0x48')]['id']}})[_0x2628('0x15')](handleEntityNotFound(_0x5def65,null))[_0x2628('0x15')](saveUpdates(_0x5e3890[_0x2628('0x4a')],null))[_0x2628('0x15')](respondWithResult(_0x5def65,null))[_0x2628('0x46')](handleError(_0x5def65,null));};exports[_0x2628('0x4b')]=function(_0x4f8d6f,_0x4ac27a){return db[_0x2628('0x2f')][_0x2628('0x4c')]({'where':{'id':_0x4f8d6f[_0x2628('0x48')]['id']}})[_0x2628('0x15')](handleEntityNotFound(_0x4ac27a,null))[_0x2628('0x15')](removeEntity(_0x4ac27a,null))['catch'](handleError(_0x4ac27a,null));};exports[_0x2628('0x4d')]=function(_0x2f4fa0,_0x583394,_0x41e8ac){var _0x15296d={};var _0x172733={};var _0x4c989a;var _0x24d18a;return db[_0x2628('0x2f')][_0x2628('0x4e')]({'where':{'id':_0x2f4fa0[_0x2628('0x48')]['id']}})[_0x2628('0x15')](handleEntityNotFound(_0x583394,null))[_0x2628('0x15')](function(_0x27d830){if(_0x27d830){_0x4c989a=_0x27d830;_0x172733['model']=_[_0x2628('0x32')](db[_0x2628('0x4f')][_0x2628('0x30')]);_0x172733[_0x2628('0x33')]=_[_0x2628('0x32')](_0x2f4fa0[_0x2628('0x33')]);_0x172733[_0x2628('0x34')]=_[_0x2628('0x35')](_0x172733['model'],_0x172733[_0x2628('0x33')]);_0x15296d['attributes']=_[_0x2628('0x35')](_0x172733[_0x2628('0x31')],qs[_0x2628('0x36')](_0x2f4fa0['query'][_0x2628('0x36')]));_0x15296d['attributes']=_0x15296d[_0x2628('0x37')]['length']?_0x15296d[_0x2628('0x37')]:_0x172733[_0x2628('0x31')];_0x15296d[_0x2628('0x50')]=qs[_0x2628('0x3a')](_0x2f4fa0[_0x2628('0x33')][_0x2628('0x3a')]);_0x15296d[_0x2628('0x3b')]=qs[_0x2628('0x34')](_[_0x2628('0x3c')](_0x2f4fa0['query'],_0x172733[_0x2628('0x34')]));if(_0x2f4fa0[_0x2628('0x33')][_0x2628('0x3d')]){_0x15296d['where']=_[_0x2628('0x3e')](_0x15296d[_0x2628('0x3b')],{'$or':_[_0x2628('0x51')](_0x15296d['attributes'],function(_0x2750fb){var _0x337762={};_0x337762[_0x2750fb]={'$like':'%'+_0x2f4fa0[_0x2628('0x33')][_0x2628('0x3d')]+'%'};return _0x337762;})});}_0x15296d=_[_0x2628('0x3e')]({},_0x15296d,_0x2f4fa0[_0x2628('0x41')]);return _0x4c989a['getFields'](_0x15296d);}})[_0x2628('0x15')](function(_0x121f2e){if(_0x121f2e){_0x24d18a=_0x121f2e[_0x2628('0x38')];if(!_0x2f4fa0[_0x2628('0x33')][_0x2628('0x52')](_0x2628('0x39'))){_0x15296d[_0x2628('0x26')]=qs[_0x2628('0x26')](_0x2f4fa0[_0x2628('0x33')][_0x2628('0x26')]);_0x15296d['offset']=qs[_0x2628('0x25')](_0x2f4fa0['query'][_0x2628('0x25')]);}return _0x4c989a[_0x2628('0x4d')](_0x15296d);}})[_0x2628('0x15')](function(_0x581b0a){if(_0x581b0a){return _0x581b0a?{'count':_0x24d18a,'rows':_0x581b0a}:null;}})[_0x2628('0x15')](respondWithResult(_0x583394,null))[_0x2628('0x46')](handleError(_0x583394,null));};exports['getSubjects']=function(_0xa37a9b,_0x46e1a0,_0x247038){var _0x40237a={};var _0x2abfcb={};var _0x43da10;var _0x4887f8;return db[_0x2628('0x2f')][_0x2628('0x4e')]({'where':{'id':_0xa37a9b['params']['id']}})['then'](handleEntityNotFound(_0x46e1a0,null))['then'](function(_0x1a4e66){if(_0x1a4e66){_0x43da10=_0x1a4e66;_0x2abfcb['model']=_[_0x2628('0x32')](db['SalesforceField'][_0x2628('0x30')]);_0x2abfcb[_0x2628('0x33')]=_[_0x2628('0x32')](_0xa37a9b[_0x2628('0x33')]);_0x2abfcb['filters']=_[_0x2628('0x35')](_0x2abfcb['model'],_0x2abfcb[_0x2628('0x33')]);_0x40237a[_0x2628('0x37')]=_['intersection'](_0x2abfcb[_0x2628('0x31')],qs[_0x2628('0x36')](_0xa37a9b[_0x2628('0x33')][_0x2628('0x36')]));_0x40237a[_0x2628('0x37')]=_0x40237a['attributes'][_0x2628('0x38')]?_0x40237a[_0x2628('0x37')]:_0x2abfcb[_0x2628('0x31')];_0x40237a[_0x2628('0x50')]=qs[_0x2628('0x3a')](_0xa37a9b[_0x2628('0x33')][_0x2628('0x3a')]);_0x40237a[_0x2628('0x3b')]=qs[_0x2628('0x34')](_['pick'](_0xa37a9b[_0x2628('0x33')],_0x2abfcb[_0x2628('0x34')]));if(_0xa37a9b[_0x2628('0x33')][_0x2628('0x3d')]){_0x40237a[_0x2628('0x3b')]=_[_0x2628('0x3e')](_0x40237a[_0x2628('0x3b')],{'$or':_[_0x2628('0x51')](_0x40237a[_0x2628('0x37')],function(_0x107ddd){var _0x2e691b={};_0x2e691b[_0x107ddd]={'$like':'%'+_0xa37a9b[_0x2628('0x33')][_0x2628('0x3d')]+'%'};return _0x2e691b;})});}_0x40237a=_[_0x2628('0x3e')]({},_0x40237a,_0xa37a9b[_0x2628('0x41')]);return _0x43da10[_0x2628('0x53')](_0x40237a);}})['then'](function(_0x52717c){if(_0x52717c){_0x4887f8=_0x52717c[_0x2628('0x38')];if(!_0xa37a9b[_0x2628('0x33')][_0x2628('0x52')]('nolimit')){_0x40237a[_0x2628('0x26')]=qs[_0x2628('0x26')](_0xa37a9b[_0x2628('0x33')][_0x2628('0x26')]);_0x40237a[_0x2628('0x25')]=qs[_0x2628('0x25')](_0xa37a9b['query'][_0x2628('0x25')]);}return _0x43da10[_0x2628('0x53')](_0x40237a);}})[_0x2628('0x15')](function(_0x1d8dcc){if(_0x1d8dcc){return _0x1d8dcc?{'count':_0x4887f8,'rows':_0x1d8dcc}:null;}})['then'](respondWithResult(_0x46e1a0,null))[_0x2628('0x46')](handleError(_0x46e1a0,null));};exports[_0x2628('0x54')]=function(_0x45f3f1,_0x4a132c,_0x9ad4ca){var _0x300cd5={};var _0x56673e={};var _0xaf2ec0;var _0x5ba6d5;return db['SalesforceConfiguration'][_0x2628('0x4e')]({'where':{'id':_0x45f3f1[_0x2628('0x48')]['id']}})[_0x2628('0x15')](handleEntityNotFound(_0x4a132c,null))[_0x2628('0x15')](function(_0x5f40b8){if(_0x5f40b8){_0xaf2ec0=_0x5f40b8;_0x56673e[_0x2628('0x31')]=_['keys'](db[_0x2628('0x4f')][_0x2628('0x30')]);_0x56673e[_0x2628('0x33')]=_[_0x2628('0x32')](_0x45f3f1[_0x2628('0x33')]);_0x56673e[_0x2628('0x34')]=_['intersection'](_0x56673e[_0x2628('0x31')],_0x56673e[_0x2628('0x33')]);_0x300cd5['attributes']=_[_0x2628('0x35')](_0x56673e[_0x2628('0x31')],qs[_0x2628('0x36')](_0x45f3f1[_0x2628('0x33')]['fields']));_0x300cd5[_0x2628('0x37')]=_0x300cd5[_0x2628('0x37')][_0x2628('0x38')]?_0x300cd5['attributes']:_0x56673e[_0x2628('0x31')];_0x300cd5[_0x2628('0x50')]=qs['sort'](_0x45f3f1['query'][_0x2628('0x3a')]);_0x300cd5[_0x2628('0x3b')]=qs[_0x2628('0x34')](_[_0x2628('0x3c')](_0x45f3f1['query'],_0x56673e[_0x2628('0x34')]));if(_0x45f3f1[_0x2628('0x33')]['filter']){_0x300cd5['where']=_[_0x2628('0x3e')](_0x300cd5[_0x2628('0x3b')],{'$or':_[_0x2628('0x51')](_0x300cd5[_0x2628('0x37')],function(_0x452c89){var _0x3876af={};_0x3876af[_0x452c89]={'$like':'%'+_0x45f3f1[_0x2628('0x33')]['filter']+'%'};return _0x3876af;})});}_0x300cd5=_[_0x2628('0x3e')]({},_0x300cd5,_0x45f3f1[_0x2628('0x41')]);return _0xaf2ec0[_0x2628('0x54')](_0x300cd5);}})[_0x2628('0x15')](function(_0x571ed8){if(_0x571ed8){_0x5ba6d5=_0x571ed8['length'];if(!_0x45f3f1[_0x2628('0x33')][_0x2628('0x52')](_0x2628('0x39'))){_0x300cd5[_0x2628('0x26')]=qs[_0x2628('0x26')](_0x45f3f1[_0x2628('0x33')][_0x2628('0x26')]);_0x300cd5[_0x2628('0x25')]=qs[_0x2628('0x25')](_0x45f3f1[_0x2628('0x33')][_0x2628('0x25')]);}return _0xaf2ec0[_0x2628('0x54')](_0x300cd5);}})[_0x2628('0x15')](function(_0x3d6960){if(_0x3d6960){return _0x3d6960?{'count':_0x5ba6d5,'rows':_0x3d6960}:null;}})[_0x2628('0x15')](respondWithResult(_0x4a132c,null))[_0x2628('0x46')](handleError(_0x4a132c,null));};
\ No newline at end of file
+var _0x0740=['include','findAll','length','find','create','body','update','params','destroy','getFields','findOne','SalesforceField','nolimit','getSubjects','getDescriptions','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','to-csv','ejs','squel','crypto','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','client','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','then','info','SalesforceConfiguration,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','result','catch','sendStatus','json','count','offset','status','set','Content-Range','save','stack','name','send','index','SalesforceConfiguration','rawAttributes','keys','query','filters','intersection','model','attributes','fields','hasOwnProperty','limit','order','sort','where','pick','merge','map','type','key','filter','options','includeAll'];(function(_0x56fb73,_0x491492){var _0xa9dd3=function(_0x3411dc){while(--_0x3411dc){_0x56fb73['push'](_0x56fb73['shift']());}};_0xa9dd3(++_0x491492);}(_0x0740,0x14f));var _0x0074=function(_0x4cc646,_0x43de8a){_0x4cc646=_0x4cc646-0x0;var _0xa533ee=_0x0740[_0x4cc646];return _0xa533ee;};'use strict';var pdf=require(_0x0074('0x0'));var emlformat=require(_0x0074('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x0074('0x2'));var jsonpatch=require(_0x0074('0x3'));var rp=require(_0x0074('0x4'));var moment=require('moment');var BPromise=require(_0x0074('0x5'));var Mustache=require(_0x0074('0x6'));var util=require(_0x0074('0x7'));var path=require('path');var sox=require('sox');var csv=require(_0x0074('0x8'));var ejs=require(_0x0074('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x0074('0xa'));var crypto=require(_0x0074('0xb'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x0074('0x8'));var querystring=require(_0x0074('0xc'));var Papa=require('papaparse');var Redis=require(_0x0074('0xd'));var authService=require(_0x0074('0xe'));var qs=require(_0x0074('0xf'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0x0074('0x10'));var utils=require(_0x0074('0x11'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var jayson=require('jayson/promise');var client=jayson[_0x0074('0x12')]['http']({'port':0x232a});function checkPasswordPattern(_0x4c1da7,_0x513551,_0x41b68e){if(_0x41b68e){var _0x27aa79=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x27aa79[_0x0074('0x13')](_0x513551)){return _0x4c1da7;}else{throw new Error(_0x0074('0x14'));}}else{return _0x4c1da7;}}function respondWithRpcPromise(_0x243aa7,_0x9b89c9,_0x2a65a8,_0x1b9db8){return new BPromise(function(_0x52ad5d,_0x33d720){var _0x4faeeb=_0x1b9db8||client;return _0x4faeeb['request'](_0x243aa7,_0x2a65a8)[_0x0074('0x15')](function(_0x18ebfc){logger[_0x0074('0x16')](_0x0074('0x17'),_0x9b89c9,_0x0074('0x18'));logger[_0x0074('0x19')]('SalesforceConfiguration,\x20%s,\x20%s,\x20%s',_0x9b89c9,_0x0074('0x18'),JSON[_0x0074('0x1a')](_0x18ebfc));if(_0x18ebfc['error']){if(_0x18ebfc['error']['code']===0x1f4){logger[_0x0074('0x1b')]('SalesforceConfiguration,\x20%s,\x20%s',_0x9b89c9,_0x18ebfc[_0x0074('0x1b')][_0x0074('0x1c')]);return _0x33d720(_0x18ebfc[_0x0074('0x1b')][_0x0074('0x1c')]);}logger[_0x0074('0x1b')](_0x0074('0x17'),_0x9b89c9,_0x18ebfc[_0x0074('0x1b')][_0x0074('0x1c')]);return _0x52ad5d(_0x18ebfc[_0x0074('0x1b')][_0x0074('0x1c')]);}else{logger[_0x0074('0x16')](_0x0074('0x17'),_0x9b89c9,_0x0074('0x18'));_0x52ad5d(_0x18ebfc[_0x0074('0x1d')]['message']);}})[_0x0074('0x1e')](function(_0x26e20f){logger[_0x0074('0x1b')](_0x0074('0x17'),_0x9b89c9,_0x26e20f);_0x33d720(_0x26e20f);});});}function respondWithStatusCode(_0xc771a2,_0xd57086){_0xd57086=_0xd57086||0xcc;return function(_0x891916){if(_0x891916){return _0xc771a2[_0x0074('0x1f')](_0xd57086);}return _0xc771a2['status'](_0xd57086)['end']();};}function respondWithResult(_0x1c7f2d,_0x5027a5){_0x5027a5=_0x5027a5||0xc8;return function(_0x52a524){if(_0x52a524){return _0x1c7f2d['status'](_0x5027a5)[_0x0074('0x20')](_0x52a524);}};}function respondWithFilteredResult(_0x406bd8,_0x5cfa73){return function(_0x5eb65f){if(_0x5eb65f){var _0x4aa1bb=_0x5eb65f[_0x0074('0x21')],_0x219491=_0x5cfa73[_0x0074('0x22')],_0x449792=_0x5cfa73['offset']+_0x5cfa73['limit'],_0x5dd6ea;if(_0x449792>=_0x4aa1bb){_0x449792=_0x4aa1bb;_0x5dd6ea=0xc8;}else{_0x5dd6ea=0xce;}_0x406bd8[_0x0074('0x23')](_0x5dd6ea);return _0x406bd8[_0x0074('0x24')](_0x0074('0x25'),_0x219491+'-'+_0x449792+'/'+_0x4aa1bb)['json'](_0x5eb65f);}return null;};}function patchUpdates(_0x415869){return function(_0x55199a){try{jsonpatch['apply'](_0x55199a,_0x415869,!![]);}catch(_0x38b2ec){return BPromise['reject'](_0x38b2ec);}return _0x55199a[_0x0074('0x26')]();};}function saveUpdates(_0x216d8b,_0x228c4){return function(_0x68536a){if(_0x68536a){return _0x68536a['update'](_0x216d8b)['then'](function(_0x3f9fbb){return _0x3f9fbb;});}return null;};}function removeEntity(_0x14f708,_0x39f05d){return function(_0x3936c2){if(_0x3936c2){return _0x3936c2['destroy']()['then'](function(){_0x14f708[_0x0074('0x23')](0xcc)['end']();});}};}function handleEntityNotFound(_0x404340,_0x4df344){return function(_0x2e96b6){if(!_0x2e96b6){_0x404340['sendStatus'](0x194);}return _0x2e96b6;};}function handleError(_0x2af73f,_0x172ec6){_0x172ec6=_0x172ec6||0x1f4;return function(_0x194998){logger[_0x0074('0x1b')](_0x194998[_0x0074('0x27')]);if(_0x194998[_0x0074('0x28')]){delete _0x194998[_0x0074('0x28')];}_0x2af73f[_0x0074('0x23')](_0x172ec6)[_0x0074('0x29')](_0x194998);};}exports[_0x0074('0x2a')]=function(_0x2d0c87,_0x422a84){var _0x41ea43={},_0x58cf0c={},_0x46d956={'count':0x0,'rows':[]};var _0x1b1a10=db[_0x0074('0x2b')][_0x0074('0x2c')];_0x58cf0c['model']=_[_0x0074('0x2d')](_0x1b1a10);_0x58cf0c[_0x0074('0x2e')]=_[_0x0074('0x2d')](_0x2d0c87[_0x0074('0x2e')]);_0x58cf0c[_0x0074('0x2f')]=_[_0x0074('0x30')](_0x58cf0c[_0x0074('0x31')],_0x58cf0c[_0x0074('0x2e')]);_0x41ea43[_0x0074('0x32')]=_['intersection'](_0x58cf0c[_0x0074('0x31')],qs[_0x0074('0x33')](_0x2d0c87[_0x0074('0x2e')][_0x0074('0x33')]));_0x41ea43['attributes']=_0x41ea43[_0x0074('0x32')]['length']?_0x41ea43[_0x0074('0x32')]:_0x58cf0c[_0x0074('0x31')];if(!_0x2d0c87[_0x0074('0x2e')][_0x0074('0x34')]('nolimit')){_0x41ea43[_0x0074('0x35')]=qs[_0x0074('0x35')](_0x2d0c87[_0x0074('0x2e')][_0x0074('0x35')]);_0x41ea43[_0x0074('0x22')]=qs[_0x0074('0x22')](_0x2d0c87[_0x0074('0x2e')][_0x0074('0x22')]);}_0x41ea43[_0x0074('0x36')]=qs[_0x0074('0x37')](_0x2d0c87['query']['sort']);_0x41ea43[_0x0074('0x38')]=qs[_0x0074('0x2f')](_[_0x0074('0x39')](_0x2d0c87[_0x0074('0x2e')],_0x58cf0c['filters']));if(_0x2d0c87['query']['filter']){_0x41ea43[_0x0074('0x38')]=_[_0x0074('0x3a')](_0x41ea43[_0x0074('0x38')],{'$or':_[_0x0074('0x3b')](_0x1b1a10,function(_0x266de6){if(_0x266de6[_0x0074('0x3c')][_0x0074('0x3d')]!=='VIRTUAL'){var _0x40d6cc={};_0x40d6cc[_0x266de6['field']]={'$like':'%'+_0x2d0c87[_0x0074('0x2e')][_0x0074('0x3e')]+'%'};return _0x40d6cc;}})});}_0x41ea43=_[_0x0074('0x3a')]({},_0x41ea43,_0x2d0c87[_0x0074('0x3f')]);var _0x256254={'where':_0x41ea43[_0x0074('0x38')]};return db[_0x0074('0x2b')]['count'](_0x256254)[_0x0074('0x15')](function(_0x1c4b75){_0x46d956[_0x0074('0x21')]=_0x1c4b75;if(_0x2d0c87[_0x0074('0x2e')][_0x0074('0x40')]){_0x41ea43[_0x0074('0x41')]=[{'all':!![]}];}return db[_0x0074('0x2b')][_0x0074('0x42')](_0x41ea43);})[_0x0074('0x15')](function(_0x24d7a8){_0x46d956['rows']=_0x24d7a8;return _0x46d956;})[_0x0074('0x15')](respondWithFilteredResult(_0x422a84,_0x41ea43))[_0x0074('0x1e')](handleError(_0x422a84,null));};exports['show']=function(_0x5216ba,_0x26249f){var _0xcbde3a={'raw':![],'where':{'id':_0x5216ba['params']['id']}},_0x1fc6f4={};_0x1fc6f4[_0x0074('0x31')]=_['keys'](db[_0x0074('0x2b')][_0x0074('0x2c')]);_0x1fc6f4[_0x0074('0x2e')]=_[_0x0074('0x2d')](_0x5216ba[_0x0074('0x2e')]);_0x1fc6f4[_0x0074('0x2f')]=_[_0x0074('0x30')](_0x1fc6f4[_0x0074('0x31')],_0x1fc6f4[_0x0074('0x2e')]);_0xcbde3a[_0x0074('0x32')]=_[_0x0074('0x30')](_0x1fc6f4['model'],qs[_0x0074('0x33')](_0x5216ba[_0x0074('0x2e')]['fields']));_0xcbde3a[_0x0074('0x32')]=_0xcbde3a['attributes'][_0x0074('0x43')]?_0xcbde3a[_0x0074('0x32')]:_0x1fc6f4[_0x0074('0x31')];if(_0x5216ba[_0x0074('0x2e')]['includeAll']){_0xcbde3a[_0x0074('0x41')]=[{'all':!![]}];}_0xcbde3a=_[_0x0074('0x3a')]({},_0xcbde3a,_0x5216ba[_0x0074('0x3f')]);return db['SalesforceConfiguration'][_0x0074('0x44')](_0xcbde3a)[_0x0074('0x15')](handleEntityNotFound(_0x26249f,null))[_0x0074('0x15')](respondWithResult(_0x26249f,null))[_0x0074('0x1e')](handleError(_0x26249f,null));};exports['create']=function(_0x123000,_0x288832){return db['SalesforceConfiguration'][_0x0074('0x45')](_0x123000[_0x0074('0x46')],{})[_0x0074('0x15')](respondWithResult(_0x288832,0xc9))[_0x0074('0x1e')](handleError(_0x288832,null));};exports[_0x0074('0x47')]=function(_0x21dc73,_0x15461a){if(_0x21dc73[_0x0074('0x46')]['id']){delete _0x21dc73[_0x0074('0x46')]['id'];}return db['SalesforceConfiguration']['find']({'where':{'id':_0x21dc73[_0x0074('0x48')]['id']}})[_0x0074('0x15')](handleEntityNotFound(_0x15461a,null))['then'](saveUpdates(_0x21dc73['body'],null))['then'](respondWithResult(_0x15461a,null))[_0x0074('0x1e')](handleError(_0x15461a,null));};exports[_0x0074('0x49')]=function(_0x5c1004,_0x27923c){return db[_0x0074('0x2b')][_0x0074('0x44')]({'where':{'id':_0x5c1004[_0x0074('0x48')]['id']}})[_0x0074('0x15')](handleEntityNotFound(_0x27923c,null))[_0x0074('0x15')](removeEntity(_0x27923c,null))[_0x0074('0x1e')](handleError(_0x27923c,null));};exports[_0x0074('0x4a')]=function(_0x459ad1,_0x5c867b,_0x1e17d9){var _0x15b6f8={};var _0xd080b2={};var _0xf34c77;var _0x493c7a;return db[_0x0074('0x2b')][_0x0074('0x4b')]({'where':{'id':_0x459ad1[_0x0074('0x48')]['id']}})[_0x0074('0x15')](handleEntityNotFound(_0x5c867b,null))[_0x0074('0x15')](function(_0x25595d){if(_0x25595d){_0xf34c77=_0x25595d;_0xd080b2['model']=_['keys'](db[_0x0074('0x4c')][_0x0074('0x2c')]);_0xd080b2[_0x0074('0x2e')]=_[_0x0074('0x2d')](_0x459ad1[_0x0074('0x2e')]);_0xd080b2[_0x0074('0x2f')]=_[_0x0074('0x30')](_0xd080b2['model'],_0xd080b2[_0x0074('0x2e')]);_0x15b6f8[_0x0074('0x32')]=_['intersection'](_0xd080b2[_0x0074('0x31')],qs[_0x0074('0x33')](_0x459ad1['query']['fields']));_0x15b6f8[_0x0074('0x32')]=_0x15b6f8[_0x0074('0x32')]['length']?_0x15b6f8[_0x0074('0x32')]:_0xd080b2[_0x0074('0x31')];_0x15b6f8[_0x0074('0x36')]=qs['sort'](_0x459ad1[_0x0074('0x2e')]['sort']);_0x15b6f8['where']=qs[_0x0074('0x2f')](_[_0x0074('0x39')](_0x459ad1[_0x0074('0x2e')],_0xd080b2['filters']));if(_0x459ad1['query'][_0x0074('0x3e')]){_0x15b6f8[_0x0074('0x38')]=_[_0x0074('0x3a')](_0x15b6f8[_0x0074('0x38')],{'$or':_[_0x0074('0x3b')](_0x15b6f8[_0x0074('0x32')],function(_0x55de69){var _0x583d9a={};_0x583d9a[_0x55de69]={'$like':'%'+_0x459ad1['query'][_0x0074('0x3e')]+'%'};return _0x583d9a;})});}_0x15b6f8=_[_0x0074('0x3a')]({},_0x15b6f8,_0x459ad1[_0x0074('0x3f')]);return _0xf34c77['getFields'](_0x15b6f8);}})[_0x0074('0x15')](function(_0x2e86f8){if(_0x2e86f8){_0x493c7a=_0x2e86f8[_0x0074('0x43')];if(!_0x459ad1[_0x0074('0x2e')]['hasOwnProperty'](_0x0074('0x4d'))){_0x15b6f8[_0x0074('0x35')]=qs[_0x0074('0x35')](_0x459ad1[_0x0074('0x2e')][_0x0074('0x35')]);_0x15b6f8[_0x0074('0x22')]=qs[_0x0074('0x22')](_0x459ad1[_0x0074('0x2e')][_0x0074('0x22')]);}return _0xf34c77[_0x0074('0x4a')](_0x15b6f8);}})[_0x0074('0x15')](function(_0x5f42b7){if(_0x5f42b7){return _0x5f42b7?{'count':_0x493c7a,'rows':_0x5f42b7}:null;}})[_0x0074('0x15')](respondWithResult(_0x5c867b,null))[_0x0074('0x1e')](handleError(_0x5c867b,null));};exports[_0x0074('0x4e')]=function(_0x3eacfa,_0x3d9fd0,_0x2d6af1){var _0x11ab02={};var _0x331e90={};var _0x2777f1;var _0x52d8ee;return db['SalesforceConfiguration'][_0x0074('0x4b')]({'where':{'id':_0x3eacfa['params']['id']}})[_0x0074('0x15')](handleEntityNotFound(_0x3d9fd0,null))[_0x0074('0x15')](function(_0x46eed8){if(_0x46eed8){_0x2777f1=_0x46eed8;_0x331e90[_0x0074('0x31')]=_[_0x0074('0x2d')](db['SalesforceField'][_0x0074('0x2c')]);_0x331e90[_0x0074('0x2e')]=_['keys'](_0x3eacfa['query']);_0x331e90[_0x0074('0x2f')]=_['intersection'](_0x331e90['model'],_0x331e90[_0x0074('0x2e')]);_0x11ab02['attributes']=_['intersection'](_0x331e90['model'],qs[_0x0074('0x33')](_0x3eacfa[_0x0074('0x2e')][_0x0074('0x33')]));_0x11ab02['attributes']=_0x11ab02[_0x0074('0x32')][_0x0074('0x43')]?_0x11ab02[_0x0074('0x32')]:_0x331e90['model'];_0x11ab02[_0x0074('0x36')]=qs['sort'](_0x3eacfa[_0x0074('0x2e')][_0x0074('0x37')]);_0x11ab02[_0x0074('0x38')]=qs['filters'](_['pick'](_0x3eacfa[_0x0074('0x2e')],_0x331e90[_0x0074('0x2f')]));if(_0x3eacfa['query']['filter']){_0x11ab02[_0x0074('0x38')]=_[_0x0074('0x3a')](_0x11ab02['where'],{'$or':_['map'](_0x11ab02[_0x0074('0x32')],function(_0x19dbda){var _0x3e9acb={};_0x3e9acb[_0x19dbda]={'$like':'%'+_0x3eacfa[_0x0074('0x2e')][_0x0074('0x3e')]+'%'};return _0x3e9acb;})});}_0x11ab02=_['merge']({},_0x11ab02,_0x3eacfa[_0x0074('0x3f')]);return _0x2777f1[_0x0074('0x4e')](_0x11ab02);}})[_0x0074('0x15')](function(_0x21e6d6){if(_0x21e6d6){_0x52d8ee=_0x21e6d6[_0x0074('0x43')];if(!_0x3eacfa[_0x0074('0x2e')][_0x0074('0x34')]('nolimit')){_0x11ab02['limit']=qs[_0x0074('0x35')](_0x3eacfa[_0x0074('0x2e')]['limit']);_0x11ab02[_0x0074('0x22')]=qs[_0x0074('0x22')](_0x3eacfa[_0x0074('0x2e')]['offset']);}return _0x2777f1[_0x0074('0x4e')](_0x11ab02);}})['then'](function(_0x771f3e){if(_0x771f3e){return _0x771f3e?{'count':_0x52d8ee,'rows':_0x771f3e}:null;}})[_0x0074('0x15')](respondWithResult(_0x3d9fd0,null))['catch'](handleError(_0x3d9fd0,null));};exports['getDescriptions']=function(_0x1d5cd3,_0x1ba05d,_0x2be0e0){var _0x393d22={};var _0x5b0dd7={};var _0x53a410;var _0x32bbda;return db[_0x0074('0x2b')]['findOne']({'where':{'id':_0x1d5cd3[_0x0074('0x48')]['id']}})[_0x0074('0x15')](handleEntityNotFound(_0x1ba05d,null))[_0x0074('0x15')](function(_0x5929c0){if(_0x5929c0){_0x53a410=_0x5929c0;_0x5b0dd7[_0x0074('0x31')]=_[_0x0074('0x2d')](db[_0x0074('0x4c')]['rawAttributes']);_0x5b0dd7['query']=_['keys'](_0x1d5cd3['query']);_0x5b0dd7[_0x0074('0x2f')]=_['intersection'](_0x5b0dd7[_0x0074('0x31')],_0x5b0dd7[_0x0074('0x2e')]);_0x393d22[_0x0074('0x32')]=_[_0x0074('0x30')](_0x5b0dd7[_0x0074('0x31')],qs[_0x0074('0x33')](_0x1d5cd3[_0x0074('0x2e')][_0x0074('0x33')]));_0x393d22['attributes']=_0x393d22[_0x0074('0x32')][_0x0074('0x43')]?_0x393d22[_0x0074('0x32')]:_0x5b0dd7[_0x0074('0x31')];_0x393d22[_0x0074('0x36')]=qs[_0x0074('0x37')](_0x1d5cd3[_0x0074('0x2e')]['sort']);_0x393d22['where']=qs[_0x0074('0x2f')](_[_0x0074('0x39')](_0x1d5cd3[_0x0074('0x2e')],_0x5b0dd7['filters']));if(_0x1d5cd3[_0x0074('0x2e')][_0x0074('0x3e')]){_0x393d22[_0x0074('0x38')]=_['merge'](_0x393d22[_0x0074('0x38')],{'$or':_['map'](_0x393d22[_0x0074('0x32')],function(_0x61e945){var _0xd83e5c={};_0xd83e5c[_0x61e945]={'$like':'%'+_0x1d5cd3['query']['filter']+'%'};return _0xd83e5c;})});}_0x393d22=_['merge']({},_0x393d22,_0x1d5cd3[_0x0074('0x3f')]);return _0x53a410[_0x0074('0x4f')](_0x393d22);}})[_0x0074('0x15')](function(_0x4e3c3e){if(_0x4e3c3e){_0x32bbda=_0x4e3c3e['length'];if(!_0x1d5cd3[_0x0074('0x2e')]['hasOwnProperty'](_0x0074('0x4d'))){_0x393d22['limit']=qs[_0x0074('0x35')](_0x1d5cd3[_0x0074('0x2e')]['limit']);_0x393d22['offset']=qs[_0x0074('0x22')](_0x1d5cd3[_0x0074('0x2e')][_0x0074('0x22')]);}return _0x53a410[_0x0074('0x4f')](_0x393d22);}})[_0x0074('0x15')](function(_0x2857ba){if(_0x2857ba){return _0x2857ba?{'count':_0x32bbda,'rows':_0x2857ba}:null;}})[_0x0074('0x15')](respondWithResult(_0x1ba05d,null))[_0x0074('0x1e')](handleError(_0x1ba05d,null));};
\ No newline at end of file
index b2a5d5c..2b310d2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2f54=['../../config/environment','./intSalesforceConfiguration.attributes','int_salesforce_configurations','lodash','util','../../config/logger','api','moment','bluebird','path','rimraf'];(function(_0x58b398,_0xa599c1){var _0x3ffd7e=function(_0x4cf5dc){while(--_0x4cf5dc){_0x58b398['push'](_0x58b398['shift']());}};_0x3ffd7e(++_0xa599c1);}(_0x2f54,0x19a));var _0x42f5=function(_0x2f4e7a,_0x4c3f4e){_0x2f4e7a=_0x2f4e7a-0x0;var _0x3299a0=_0x2f54[_0x2f4e7a];return _0x3299a0;};'use strict';var _=require(_0x42f5('0x0'));var util=require(_0x42f5('0x1'));var logger=require(_0x42f5('0x2'))(_0x42f5('0x3'));var moment=require(_0x42f5('0x4'));var BPromise=require(_0x42f5('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x42f5('0x6'));var rimraf=require(_0x42f5('0x7'));var config=require(_0x42f5('0x8'));var attributes=require(_0x42f5('0x9'));module['exports']=function(_0x7a7abe,_0x4292ba){return _0x7a7abe['define']('SalesforceConfiguration',attributes,{'tableName':_0x42f5('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x54ef=['../../config/environment','exports','define','int_salesforce_configurations','lodash','api','moment','request-promise','path','rimraf'];(function(_0x15aea4,_0x17820f){var _0x143cca=function(_0x15f079){while(--_0x15f079){_0x15aea4['push'](_0x15aea4['shift']());}};_0x143cca(++_0x17820f);}(_0x54ef,0x126));var _0xf54e=function(_0x53ff9b,_0x34c414){_0x53ff9b=_0x53ff9b-0x0;var _0x45d831=_0x54ef[_0x53ff9b];return _0x45d831;};'use strict';var _=require(_0xf54e('0x0'));var util=require('util');var logger=require('../../config/logger')(_0xf54e('0x1'));var moment=require(_0xf54e('0x2'));var BPromise=require('bluebird');var rp=require(_0xf54e('0x3'));var fs=require('fs');var path=require(_0xf54e('0x4'));var rimraf=require(_0xf54e('0x5'));var config=require(_0xf54e('0x6'));var attributes=require('./intSalesforceConfiguration.attributes');module[_0xf54e('0x7')]=function(_0x310a7e,_0x285d77){return _0x310a7e[_0xf54e('0x8')]('SalesforceConfiguration',attributes,{'tableName':_0xf54e('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 8881854..8868593 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc4aa=['moment','bluebird','randomstring','ioredis','rpc','../../config/environment','jayson/promise','client','http','request','then','SalesforceConfiguration,\x20%s,\x20%s','request\x20sent','debug','error','code','message','info','catch','lodash','util'];(function(_0x45f1aa,_0x70defe){var _0x163ca8=function(_0x3d95e4){while(--_0x3d95e4){_0x45f1aa['push'](_0x45f1aa['shift']());}};_0x163ca8(++_0x70defe);}(_0xc4aa,0x1b7));var _0xac4a=function(_0x4b369d,_0x265eb8){_0x4b369d=_0x4b369d-0x0;var _0x571a98=_0xc4aa[_0x4b369d];return _0x571a98;};'use strict';var _=require(_0xac4a('0x0'));var util=require(_0xac4a('0x1'));var moment=require(_0xac4a('0x2'));var BPromise=require(_0xac4a('0x3'));var rs=require(_0xac4a('0x4'));var fs=require('fs');var Redis=require(_0xac4a('0x5'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xac4a('0x6'));var config=require(_0xac4a('0x7'));var jayson=require(_0xac4a('0x8'));var client=jayson[_0xac4a('0x9')][_0xac4a('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x15cd34,_0x3ef77c,_0x10525b){return new BPromise(function(_0x5c6179,_0x5b8339){return client[_0xac4a('0xb')](_0x15cd34,_0x10525b)[_0xac4a('0xc')](function(_0x26ec84){logger['info'](_0xac4a('0xd'),_0x3ef77c,_0xac4a('0xe'));logger[_0xac4a('0xf')]('SalesforceConfiguration,\x20%s,\x20%s,\x20%s',_0x3ef77c,_0xac4a('0xe'),JSON['stringify'](_0x26ec84));if(_0x26ec84[_0xac4a('0x10')]){if(_0x26ec84['error'][_0xac4a('0x11')]===0x1f4){logger[_0xac4a('0x10')](_0xac4a('0xd'),_0x3ef77c,_0x26ec84['error'][_0xac4a('0x12')]);return _0x5b8339(_0x26ec84[_0xac4a('0x10')][_0xac4a('0x12')]);}logger[_0xac4a('0x10')](_0xac4a('0xd'),_0x3ef77c,_0x26ec84[_0xac4a('0x10')][_0xac4a('0x12')]);return _0x5c6179(_0x26ec84[_0xac4a('0x10')][_0xac4a('0x12')]);}else{logger[_0xac4a('0x13')](_0xac4a('0xd'),_0x3ef77c,_0xac4a('0xe'));_0x5c6179(_0x26ec84['result'][_0xac4a('0x12')]);}})[_0xac4a('0x14')](function(_0x23eb66){logger[_0xac4a('0x10')](_0xac4a('0xd'),_0x3ef77c,_0x23eb66);_0x5b8339(_0x23eb66);});});}
\ No newline at end of file
+var _0x326f=['info','SalesforceConfiguration,\x20%s,\x20%s','request\x20sent','debug','error','code','message','result','catch','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client'];(function(_0x530bf2,_0x28409e){var _0x356d35=function(_0x42dd56){while(--_0x42dd56){_0x530bf2['push'](_0x530bf2['shift']());}};_0x356d35(++_0x28409e);}(_0x326f,0xd1));var _0xf326=function(_0x473c91,_0x64c6c6){_0x473c91=_0x473c91-0x0;var _0x3a7f9c=_0x326f[_0x473c91];return _0x3a7f9c;};'use strict';var _=require(_0xf326('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xf326('0x1'));var rs=require(_0xf326('0x2'));var fs=require('fs');var Redis=require(_0xf326('0x3'));var db=require(_0xf326('0x4'))['db'];var utils=require(_0xf326('0x5'));var logger=require(_0xf326('0x6'))(_0xf326('0x7'));var config=require(_0xf326('0x8'));var jayson=require(_0xf326('0x9'));var client=jayson[_0xf326('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3c254d,_0x3851eb,_0x165f95){return new BPromise(function(_0x1e7b8a,_0x515bfa){return client['request'](_0x3c254d,_0x165f95)['then'](function(_0x3bacf2){logger[_0xf326('0xb')](_0xf326('0xc'),_0x3851eb,_0xf326('0xd'));logger[_0xf326('0xe')]('SalesforceConfiguration,\x20%s,\x20%s,\x20%s',_0x3851eb,_0xf326('0xd'),JSON['stringify'](_0x3bacf2));if(_0x3bacf2[_0xf326('0xf')]){if(_0x3bacf2['error'][_0xf326('0x10')]===0x1f4){logger['error'](_0xf326('0xc'),_0x3851eb,_0x3bacf2[_0xf326('0xf')]['message']);return _0x515bfa(_0x3bacf2[_0xf326('0xf')][_0xf326('0x11')]);}logger[_0xf326('0xf')](_0xf326('0xc'),_0x3851eb,_0x3bacf2['error'][_0xf326('0x11')]);return _0x1e7b8a(_0x3bacf2['error']['message']);}else{logger[_0xf326('0xb')](_0xf326('0xc'),_0x3851eb,_0xf326('0xd'));_0x1e7b8a(_0x3bacf2[_0xf326('0x12')][_0xf326('0x11')]);}})[_0xf326('0x13')](function(_0x34128e){logger[_0xf326('0xf')]('SalesforceConfiguration,\x20%s,\x20%s',_0x3851eb,_0x34128e);_0x515bfa(_0x34128e);});});}
\ No newline at end of file
index 99bfe4b..a3faa50 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x15db=['destroy','util','connect-timeout','express','../../components/auth/service','../../components/interaction/service','./intSalesforceField.controller','isAuthenticated','index','/:id','show','post','create','put','update','delete'];(function(_0xc8a598,_0x8ffd7c){var _0x2a6225=function(_0x5f2d46){while(--_0x5f2d46){_0xc8a598['push'](_0xc8a598['shift']());}};_0x2a6225(++_0x8ffd7c);}(_0x15db,0x111));var _0xb15d=function(_0x473203,_0x1ea637){_0x473203=_0x473203-0x0;var _0x45c971=_0x15db[_0x473203];return _0x45c971;};'use strict';var multer=require('multer');var util=require(_0xb15d('0x0'));var path=require('path');var timeout=require(_0xb15d('0x1'));var express=require(_0xb15d('0x2'));var router=express['Router']();var auth=require(_0xb15d('0x3'));var interaction=require(_0xb15d('0x4'));var config=require('../../config/environment');var controller=require(_0xb15d('0x5'));router['get']('/',auth[_0xb15d('0x6')](),controller[_0xb15d('0x7')]);router['get'](_0xb15d('0x8'),auth[_0xb15d('0x6')](),controller[_0xb15d('0x9')]);router[_0xb15d('0xa')]('/',auth[_0xb15d('0x6')](),controller[_0xb15d('0xb')]);router[_0xb15d('0xc')](_0xb15d('0x8'),auth[_0xb15d('0x6')](),controller[_0xb15d('0xd')]);router[_0xb15d('0xe')]('/:id',auth[_0xb15d('0x6')](),controller[_0xb15d('0xf')]);module['exports']=router;
\ No newline at end of file
+var _0x96b5=['/:id','show','post','create','put','update','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','./intSalesforceField.controller','get','isAuthenticated'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x96b5,0x18e));var _0x596b=function(_0x52aecf,_0x371776){_0x52aecf=_0x52aecf-0x0;var _0x32c3ee=_0x96b5[_0x52aecf];return _0x32c3ee;};'use strict';var multer=require(_0x596b('0x0'));var util=require(_0x596b('0x1'));var path=require(_0x596b('0x2'));var timeout=require(_0x596b('0x3'));var express=require(_0x596b('0x4'));var router=express['Router']();var auth=require(_0x596b('0x5'));var interaction=require(_0x596b('0x6'));var config=require('../../config/environment');var controller=require(_0x596b('0x7'));router[_0x596b('0x8')]('/',auth[_0x596b('0x9')](),controller['index']);router[_0x596b('0x8')](_0x596b('0xa'),auth[_0x596b('0x9')](),controller[_0x596b('0xb')]);router[_0x596b('0xc')]('/',auth[_0x596b('0x9')](),controller[_0x596b('0xd')]);router[_0x596b('0xe')](_0x596b('0xa'),auth[_0x596b('0x9')](),controller[_0x596b('0xf')]);router['delete'](_0x596b('0xa'),auth[_0x596b('0x9')](),controller['destroy']);module[_0x596b('0x10')]=router;
\ No newline at end of file
index 0680170..a9cfe09 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2cfa=['STRING','sequelize','exports','string','ENUM','customVariable'];(function(_0x3ea124,_0x10d3c4){var _0x369320=function(_0x50eda9){while(--_0x50eda9){_0x3ea124['push'](_0x3ea124['shift']());}};_0x369320(++_0x10d3c4);}(_0x2cfa,0x67));var _0xa2cf=function(_0x55291a,_0x814018){_0x55291a=_0x55291a-0x0;var _0x3c870c=_0x2cfa[_0x55291a];return _0x3c870c;};'use strict';var Sequelize=require(_0xa2cf('0x0'));module[_0xa2cf('0x1')]={'type':{'type':Sequelize['ENUM'](_0xa2cf('0x2'),'variable','customVariable','keyValue'),'defaultValue':_0xa2cf('0x2')},'content':{'type':Sequelize['STRING']},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0xa2cf('0x3')](_0xa2cf('0x2'),'variable',_0xa2cf('0x4'))},'keyContent':{'type':Sequelize[_0xa2cf('0x5')]},'idField':{'type':Sequelize[_0xa2cf('0x5')]},'variableName':{'type':Sequelize[_0xa2cf('0x5')]}};
\ No newline at end of file
+var _0xff3f=['exports','ENUM','string','variable','customVariable','STRING'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xff3f,0x1b6));var _0xfff3=function(_0x5c2e3e,_0x26ecd3){_0x5c2e3e=_0x5c2e3e-0x0;var _0x53f64a=_0xff3f[_0x5c2e3e];return _0x53f64a;};'use strict';var Sequelize=require('sequelize');module[_0xfff3('0x0')]={'type':{'type':Sequelize[_0xfff3('0x1')](_0xfff3('0x2'),_0xfff3('0x3'),_0xfff3('0x4'),'keyValue'),'defaultValue':_0xfff3('0x2')},'content':{'type':Sequelize[_0xfff3('0x5')]},'key':{'type':Sequelize[_0xfff3('0x5')]},'keyType':{'type':Sequelize[_0xfff3('0x1')](_0xfff3('0x2'),'variable',_0xfff3('0x4'))},'keyContent':{'type':Sequelize[_0xfff3('0x5')]},'idField':{'type':Sequelize[_0xfff3('0x5')]},'variableName':{'type':Sequelize[_0xfff3('0x5')]}};
\ No newline at end of file
index d65ecf8..dffec30 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4a5b=['limit','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','include','findAll','rows','catch','show','length','includeAll','find','create','body','params','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','path','sox','to-csv','lodash','squel','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','set','Content-Range','apply','reject','save','update','then','destroy','stack','name','index','SalesforceField','rawAttributes','keys','query','filters','attributes','intersection','model','fields','hasOwnProperty'];(function(_0x416cdc,_0x213b87){var _0x1931ce=function(_0x1dc762){while(--_0x1dc762){_0x416cdc['push'](_0x416cdc['shift']());}};_0x1931ce(++_0x213b87);}(_0x4a5b,0xe8));var _0xb4a5=function(_0x3f2f77,_0x379635){_0x3f2f77=_0x3f2f77-0x0;var _0x8db194=_0x4a5b[_0x3f2f77];return _0x8db194;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xb4a5('0x0'));var rimraf=require(_0xb4a5('0x1'));var zipdir=require(_0xb4a5('0x2'));var jsonpatch=require(_0xb4a5('0x3'));var rp=require('request-promise');var moment=require(_0xb4a5('0x4'));var BPromise=require(_0xb4a5('0x5'));var Mustache=require('mustache');var util=require('util');var path=require(_0xb4a5('0x6'));var sox=require(_0xb4a5('0x7'));var csv=require(_0xb4a5('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xb4a5('0x9'));var squel=require(_0xb4a5('0xa'));var crypto=require('crypto');var jsforce=require(_0xb4a5('0xb'));var deskjs=require(_0xb4a5('0xc'));var toCsv=require(_0xb4a5('0x8'));var querystring=require(_0xb4a5('0xd'));var Papa=require('papaparse');var Redis=require(_0xb4a5('0xe'));var authService=require(_0xb4a5('0xf'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xb4a5('0x10'));var logger=require(_0xb4a5('0x11'))(_0xb4a5('0x12'));var utils=require(_0xb4a5('0x13'));var config=require(_0xb4a5('0x14'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x44bc73,_0x1ba826){_0x1ba826=_0x1ba826||0xcc;return function(_0x562a0a){if(_0x562a0a){return _0x44bc73[_0xb4a5('0x15')](_0x1ba826);}return _0x44bc73['status'](_0x1ba826)[_0xb4a5('0x16')]();};}function respondWithResult(_0x2bca95,_0xa9d026){_0xa9d026=_0xa9d026||0xc8;return function(_0x311187){if(_0x311187){return _0x2bca95[_0xb4a5('0x17')](_0xa9d026)[_0xb4a5('0x18')](_0x311187);}};}function respondWithFilteredResult(_0x33c12a,_0x3a1732){return function(_0x5172e3){if(_0x5172e3){var _0x4463d=_0x5172e3[_0xb4a5('0x19')],_0x249002=_0x3a1732[_0xb4a5('0x1a')],_0x32b9ed=_0x3a1732[_0xb4a5('0x1a')]+_0x3a1732['limit'],_0x364852;if(_0x32b9ed>=_0x4463d){_0x32b9ed=_0x4463d;_0x364852=0xc8;}else{_0x364852=0xce;}_0x33c12a[_0xb4a5('0x17')](_0x364852);return _0x33c12a[_0xb4a5('0x1b')](_0xb4a5('0x1c'),_0x249002+'-'+_0x32b9ed+'/'+_0x4463d)['json'](_0x5172e3);}return null;};}function patchUpdates(_0x4f8ad0){return function(_0x18871b){try{jsonpatch[_0xb4a5('0x1d')](_0x18871b,_0x4f8ad0,!![]);}catch(_0x580e01){return BPromise[_0xb4a5('0x1e')](_0x580e01);}return _0x18871b[_0xb4a5('0x1f')]();};}function saveUpdates(_0x404781,_0x48a964){return function(_0x137487){if(_0x137487){return _0x137487[_0xb4a5('0x20')](_0x404781)[_0xb4a5('0x21')](function(_0x23405f){return _0x23405f;});}return null;};}function removeEntity(_0x4c21bd,_0xf87631){return function(_0x501e8c){if(_0x501e8c){return _0x501e8c[_0xb4a5('0x22')]()['then'](function(){_0x4c21bd[_0xb4a5('0x17')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4c68f2,_0x4a9e56){return function(_0x5d231f){if(!_0x5d231f){_0x4c68f2[_0xb4a5('0x15')](0x194);}return _0x5d231f;};}function handleError(_0x31d647,_0x318f6a){_0x318f6a=_0x318f6a||0x1f4;return function(_0x36906d){logger['error'](_0x36906d[_0xb4a5('0x23')]);if(_0x36906d[_0xb4a5('0x24')]){delete _0x36906d[_0xb4a5('0x24')];}_0x31d647['status'](_0x318f6a)['send'](_0x36906d);};}exports[_0xb4a5('0x25')]=function(_0x5ca9dd,_0x54a62e){var _0x25878e={},_0x3c5cc1={},_0x36fca1={'count':0x0,'rows':[]};var _0x2d0e6d=db[_0xb4a5('0x26')][_0xb4a5('0x27')];_0x3c5cc1['model']=_[_0xb4a5('0x28')](_0x2d0e6d);_0x3c5cc1[_0xb4a5('0x29')]=_['keys'](_0x5ca9dd[_0xb4a5('0x29')]);_0x3c5cc1[_0xb4a5('0x2a')]=_['intersection'](_0x3c5cc1['model'],_0x3c5cc1[_0xb4a5('0x29')]);_0x25878e[_0xb4a5('0x2b')]=_[_0xb4a5('0x2c')](_0x3c5cc1[_0xb4a5('0x2d')],qs[_0xb4a5('0x2e')](_0x5ca9dd['query'][_0xb4a5('0x2e')]));_0x25878e[_0xb4a5('0x2b')]=_0x25878e[_0xb4a5('0x2b')]['length']?_0x25878e[_0xb4a5('0x2b')]:_0x3c5cc1[_0xb4a5('0x2d')];if(!_0x5ca9dd[_0xb4a5('0x29')][_0xb4a5('0x2f')]('nolimit')){_0x25878e[_0xb4a5('0x30')]=qs[_0xb4a5('0x30')](_0x5ca9dd[_0xb4a5('0x29')][_0xb4a5('0x30')]);_0x25878e[_0xb4a5('0x1a')]=qs['offset'](_0x5ca9dd[_0xb4a5('0x29')][_0xb4a5('0x1a')]);}_0x25878e[_0xb4a5('0x31')]=qs[_0xb4a5('0x32')](_0x5ca9dd[_0xb4a5('0x29')][_0xb4a5('0x32')]);_0x25878e[_0xb4a5('0x33')]=qs[_0xb4a5('0x2a')](_['pick'](_0x5ca9dd[_0xb4a5('0x29')],_0x3c5cc1[_0xb4a5('0x2a')]));if(_0x5ca9dd[_0xb4a5('0x29')][_0xb4a5('0x34')]){_0x25878e[_0xb4a5('0x33')]=_[_0xb4a5('0x35')](_0x25878e[_0xb4a5('0x33')],{'$or':_[_0xb4a5('0x36')](_0x2d0e6d,function(_0x7d8ec9){if(_0x7d8ec9[_0xb4a5('0x37')][_0xb4a5('0x38')]!==_0xb4a5('0x39')){var _0x1b0f8c={};_0x1b0f8c[_0x7d8ec9[_0xb4a5('0x3a')]]={'$like':'%'+_0x5ca9dd[_0xb4a5('0x29')][_0xb4a5('0x34')]+'%'};return _0x1b0f8c;}})});}_0x25878e=_[_0xb4a5('0x35')]({},_0x25878e,_0x5ca9dd['options']);var _0x3c0c46={'where':_0x25878e[_0xb4a5('0x33')]};return db[_0xb4a5('0x26')][_0xb4a5('0x19')](_0x3c0c46)['then'](function(_0x5d4d6a){_0x36fca1['count']=_0x5d4d6a;if(_0x5ca9dd[_0xb4a5('0x29')]['includeAll']){_0x25878e[_0xb4a5('0x3b')]=[{'all':!![]}];}return db[_0xb4a5('0x26')][_0xb4a5('0x3c')](_0x25878e);})[_0xb4a5('0x21')](function(_0x1a9c4f){_0x36fca1[_0xb4a5('0x3d')]=_0x1a9c4f;return _0x36fca1;})[_0xb4a5('0x21')](respondWithFilteredResult(_0x54a62e,_0x25878e))[_0xb4a5('0x3e')](handleError(_0x54a62e,null));};exports[_0xb4a5('0x3f')]=function(_0x160d77,_0x436054){var _0x14dbc9={'raw':!![],'where':{'id':_0x160d77['params']['id']}},_0x59d296={};_0x59d296['model']=_[_0xb4a5('0x28')](db['SalesforceField'][_0xb4a5('0x27')]);_0x59d296[_0xb4a5('0x29')]=_[_0xb4a5('0x28')](_0x160d77[_0xb4a5('0x29')]);_0x59d296[_0xb4a5('0x2a')]=_[_0xb4a5('0x2c')](_0x59d296[_0xb4a5('0x2d')],_0x59d296[_0xb4a5('0x29')]);_0x14dbc9[_0xb4a5('0x2b')]=_[_0xb4a5('0x2c')](_0x59d296[_0xb4a5('0x2d')],qs[_0xb4a5('0x2e')](_0x160d77['query'][_0xb4a5('0x2e')]));_0x14dbc9[_0xb4a5('0x2b')]=_0x14dbc9[_0xb4a5('0x2b')][_0xb4a5('0x40')]?_0x14dbc9['attributes']:_0x59d296[_0xb4a5('0x2d')];if(_0x160d77[_0xb4a5('0x29')][_0xb4a5('0x41')]){_0x14dbc9['include']=[{'all':!![]}];}_0x14dbc9=_[_0xb4a5('0x35')]({},_0x14dbc9,_0x160d77['options']);return db['SalesforceField'][_0xb4a5('0x42')](_0x14dbc9)[_0xb4a5('0x21')](handleEntityNotFound(_0x436054,null))[_0xb4a5('0x21')](respondWithResult(_0x436054,null))['catch'](handleError(_0x436054,null));};exports[_0xb4a5('0x43')]=function(_0x16f431,_0x1a8b4c){return db[_0xb4a5('0x26')][_0xb4a5('0x43')](_0x16f431[_0xb4a5('0x44')],{})[_0xb4a5('0x21')](respondWithResult(_0x1a8b4c,0xc9))[_0xb4a5('0x3e')](handleError(_0x1a8b4c,null));};exports[_0xb4a5('0x20')]=function(_0x3938ac,_0x27a3a7){if(_0x3938ac[_0xb4a5('0x44')]['id']){delete _0x3938ac['body']['id'];}return db[_0xb4a5('0x26')][_0xb4a5('0x42')]({'where':{'id':_0x3938ac[_0xb4a5('0x45')]['id']}})[_0xb4a5('0x21')](handleEntityNotFound(_0x27a3a7,null))[_0xb4a5('0x21')](saveUpdates(_0x3938ac['body'],null))[_0xb4a5('0x21')](respondWithResult(_0x27a3a7,null))[_0xb4a5('0x3e')](handleError(_0x27a3a7,null));};exports['destroy']=function(_0x440837,_0xe2331e){return db[_0xb4a5('0x26')][_0xb4a5('0x42')]({'where':{'id':_0x440837[_0xb4a5('0x45')]['id']}})[_0xb4a5('0x21')](handleEntityNotFound(_0xe2331e,null))[_0xb4a5('0x21')](removeEntity(_0xe2331e,null))[_0xb4a5('0x3e')](handleError(_0xe2331e,null));};
\ No newline at end of file
+var _0x4227=['moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','json','count','offset','set','Content-Range','reject','save','update','then','destroy','end','error','stack','name','send','index','rawAttributes','model','keys','query','filters','attributes','fields','length','hasOwnProperty','limit','where','pick','map','type','key','VIRTUAL','filter','merge','options','SalesforceField','findAll','rows','show','params','intersection','includeAll','find','catch','create','body','html-pdf','zip-dir','request-promise'];(function(_0x127c0f,_0x13da71){var _0x2bf7b0=function(_0x586def){while(--_0x586def){_0x127c0f['push'](_0x127c0f['shift']());}};_0x2bf7b0(++_0x13da71);}(_0x4227,0x89));var _0x7422=function(_0x453861,_0x48f5c1){_0x453861=_0x453861-0x0;var _0x27a6a1=_0x4227[_0x453861];return _0x27a6a1;};'use strict';var pdf=require(_0x7422('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x7422('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0x7422('0x2'));var moment=require(_0x7422('0x3'));var BPromise=require(_0x7422('0x4'));var Mustache=require('mustache');var util=require(_0x7422('0x5'));var path=require(_0x7422('0x6'));var sox=require(_0x7422('0x7'));var csv=require(_0x7422('0x8'));var ejs=require(_0x7422('0x9'));var fs=require('fs');var _=require(_0x7422('0xa'));var squel=require(_0x7422('0xb'));var crypto=require(_0x7422('0xc'));var jsforce=require(_0x7422('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x7422('0x8'));var querystring=require(_0x7422('0xe'));var Papa=require(_0x7422('0xf'));var Redis=require('ioredis');var authService=require(_0x7422('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x7422('0x11'));var logger=require(_0x7422('0x12'))(_0x7422('0x13'));var utils=require(_0x7422('0x14'));var config=require(_0x7422('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x30d474,_0x348a19){_0x348a19=_0x348a19||0xcc;return function(_0x575c47){if(_0x575c47){return _0x30d474[_0x7422('0x16')](_0x348a19);}return _0x30d474[_0x7422('0x17')](_0x348a19)['end']();};}function respondWithResult(_0x117e37,_0x12a5cd){_0x12a5cd=_0x12a5cd||0xc8;return function(_0x555082){if(_0x555082){return _0x117e37['status'](_0x12a5cd)[_0x7422('0x18')](_0x555082);}};}function respondWithFilteredResult(_0x4ca0e4,_0x105e1b){return function(_0x788829){if(_0x788829){var _0x487c93=_0x788829[_0x7422('0x19')],_0x149c50=_0x105e1b[_0x7422('0x1a')],_0x39c31c=_0x105e1b[_0x7422('0x1a')]+_0x105e1b['limit'],_0x31c3ec;if(_0x39c31c>=_0x487c93){_0x39c31c=_0x487c93;_0x31c3ec=0xc8;}else{_0x31c3ec=0xce;}_0x4ca0e4[_0x7422('0x17')](_0x31c3ec);return _0x4ca0e4[_0x7422('0x1b')](_0x7422('0x1c'),_0x149c50+'-'+_0x39c31c+'/'+_0x487c93)[_0x7422('0x18')](_0x788829);}return null;};}function patchUpdates(_0x57b8bf){return function(_0x1f9e09){try{jsonpatch['apply'](_0x1f9e09,_0x57b8bf,!![]);}catch(_0x22a1c8){return BPromise[_0x7422('0x1d')](_0x22a1c8);}return _0x1f9e09[_0x7422('0x1e')]();};}function saveUpdates(_0x4a53a3,_0x24db36){return function(_0xacaad1){if(_0xacaad1){return _0xacaad1[_0x7422('0x1f')](_0x4a53a3)[_0x7422('0x20')](function(_0x55f98f){return _0x55f98f;});}return null;};}function removeEntity(_0x58e617,_0x2fedd2){return function(_0x380ef7){if(_0x380ef7){return _0x380ef7[_0x7422('0x21')]()[_0x7422('0x20')](function(){_0x58e617[_0x7422('0x17')](0xcc)[_0x7422('0x22')]();});}};}function handleEntityNotFound(_0xe4f174,_0x596b89){return function(_0x24ce62){if(!_0x24ce62){_0xe4f174[_0x7422('0x16')](0x194);}return _0x24ce62;};}function handleError(_0x4fc200,_0x3a5a0c){_0x3a5a0c=_0x3a5a0c||0x1f4;return function(_0x23fb68){logger[_0x7422('0x23')](_0x23fb68[_0x7422('0x24')]);if(_0x23fb68['name']){delete _0x23fb68[_0x7422('0x25')];}_0x4fc200[_0x7422('0x17')](_0x3a5a0c)[_0x7422('0x26')](_0x23fb68);};}exports[_0x7422('0x27')]=function(_0x3438d1,_0x5e997b){var _0x34f1b0={},_0x9c29c0={},_0x81c27e={'count':0x0,'rows':[]};var _0x11e94f=db['SalesforceField'][_0x7422('0x28')];_0x9c29c0[_0x7422('0x29')]=_[_0x7422('0x2a')](_0x11e94f);_0x9c29c0[_0x7422('0x2b')]=_['keys'](_0x3438d1[_0x7422('0x2b')]);_0x9c29c0[_0x7422('0x2c')]=_['intersection'](_0x9c29c0['model'],_0x9c29c0[_0x7422('0x2b')]);_0x34f1b0[_0x7422('0x2d')]=_['intersection'](_0x9c29c0[_0x7422('0x29')],qs[_0x7422('0x2e')](_0x3438d1[_0x7422('0x2b')][_0x7422('0x2e')]));_0x34f1b0[_0x7422('0x2d')]=_0x34f1b0[_0x7422('0x2d')][_0x7422('0x2f')]?_0x34f1b0[_0x7422('0x2d')]:_0x9c29c0[_0x7422('0x29')];if(!_0x3438d1[_0x7422('0x2b')][_0x7422('0x30')]('nolimit')){_0x34f1b0[_0x7422('0x31')]=qs[_0x7422('0x31')](_0x3438d1[_0x7422('0x2b')][_0x7422('0x31')]);_0x34f1b0['offset']=qs[_0x7422('0x1a')](_0x3438d1[_0x7422('0x2b')][_0x7422('0x1a')]);}_0x34f1b0['order']=qs['sort'](_0x3438d1[_0x7422('0x2b')]['sort']);_0x34f1b0[_0x7422('0x32')]=qs['filters'](_[_0x7422('0x33')](_0x3438d1['query'],_0x9c29c0[_0x7422('0x2c')]));if(_0x3438d1['query']['filter']){_0x34f1b0[_0x7422('0x32')]=_['merge'](_0x34f1b0[_0x7422('0x32')],{'$or':_[_0x7422('0x34')](_0x11e94f,function(_0x1b2a14){if(_0x1b2a14[_0x7422('0x35')][_0x7422('0x36')]!==_0x7422('0x37')){var _0x404309={};_0x404309[_0x1b2a14['field']]={'$like':'%'+_0x3438d1[_0x7422('0x2b')][_0x7422('0x38')]+'%'};return _0x404309;}})});}_0x34f1b0=_[_0x7422('0x39')]({},_0x34f1b0,_0x3438d1[_0x7422('0x3a')]);var _0x242903={'where':_0x34f1b0['where']};return db[_0x7422('0x3b')][_0x7422('0x19')](_0x242903)['then'](function(_0x20b4df){_0x81c27e['count']=_0x20b4df;if(_0x3438d1[_0x7422('0x2b')]['includeAll']){_0x34f1b0['include']=[{'all':!![]}];}return db[_0x7422('0x3b')][_0x7422('0x3c')](_0x34f1b0);})[_0x7422('0x20')](function(_0x57a500){_0x81c27e[_0x7422('0x3d')]=_0x57a500;return _0x81c27e;})[_0x7422('0x20')](respondWithFilteredResult(_0x5e997b,_0x34f1b0))['catch'](handleError(_0x5e997b,null));};exports[_0x7422('0x3e')]=function(_0x5df470,_0x37f696){var _0x21e89c={'raw':!![],'where':{'id':_0x5df470[_0x7422('0x3f')]['id']}},_0x45ce6d={};_0x45ce6d[_0x7422('0x29')]=_[_0x7422('0x2a')](db[_0x7422('0x3b')]['rawAttributes']);_0x45ce6d[_0x7422('0x2b')]=_[_0x7422('0x2a')](_0x5df470['query']);_0x45ce6d[_0x7422('0x2c')]=_[_0x7422('0x40')](_0x45ce6d['model'],_0x45ce6d[_0x7422('0x2b')]);_0x21e89c['attributes']=_[_0x7422('0x40')](_0x45ce6d['model'],qs[_0x7422('0x2e')](_0x5df470[_0x7422('0x2b')][_0x7422('0x2e')]));_0x21e89c[_0x7422('0x2d')]=_0x21e89c[_0x7422('0x2d')][_0x7422('0x2f')]?_0x21e89c[_0x7422('0x2d')]:_0x45ce6d[_0x7422('0x29')];if(_0x5df470[_0x7422('0x2b')][_0x7422('0x41')]){_0x21e89c['include']=[{'all':!![]}];}_0x21e89c=_[_0x7422('0x39')]({},_0x21e89c,_0x5df470['options']);return db['SalesforceField'][_0x7422('0x42')](_0x21e89c)[_0x7422('0x20')](handleEntityNotFound(_0x37f696,null))['then'](respondWithResult(_0x37f696,null))[_0x7422('0x43')](handleError(_0x37f696,null));};exports[_0x7422('0x44')]=function(_0x1d09e9,_0x26bb3e){return db[_0x7422('0x3b')][_0x7422('0x44')](_0x1d09e9[_0x7422('0x45')],{})['then'](respondWithResult(_0x26bb3e,0xc9))[_0x7422('0x43')](handleError(_0x26bb3e,null));};exports[_0x7422('0x1f')]=function(_0x433457,_0x45ad30){if(_0x433457['body']['id']){delete _0x433457[_0x7422('0x45')]['id'];}return db[_0x7422('0x3b')][_0x7422('0x42')]({'where':{'id':_0x433457['params']['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x45ad30,null))[_0x7422('0x20')](saveUpdates(_0x433457['body'],null))['then'](respondWithResult(_0x45ad30,null))['catch'](handleError(_0x45ad30,null));};exports[_0x7422('0x21')]=function(_0xbbc9ab,_0x5b4694){return db[_0x7422('0x3b')]['find']({'where':{'id':_0xbbc9ab[_0x7422('0x3f')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x5b4694,null))[_0x7422('0x20')](removeEntity(_0x5b4694,null))[_0x7422('0x43')](handleError(_0x5b4694,null));};
\ No newline at end of file
index 284e189..217aa41 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa883=['api','moment','bluebird','request-promise','path','rimraf','./intSalesforceField.attributes','define','int_salesforce_fields','salesforce_unique_index','FieldId','lodash','util','../../config/logger'];(function(_0x501f83,_0x266ef4){var _0x5ba1d3=function(_0x131da6){while(--_0x131da6){_0x501f83['push'](_0x501f83['shift']());}};_0x5ba1d3(++_0x266ef4);}(_0xa883,0xa5));var _0x3a88=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xa883[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x3a88('0x0'));var util=require(_0x3a88('0x1'));var logger=require(_0x3a88('0x2'))(_0x3a88('0x3'));var moment=require(_0x3a88('0x4'));var BPromise=require(_0x3a88('0x5'));var rp=require(_0x3a88('0x6'));var fs=require('fs');var path=require(_0x3a88('0x7'));var rimraf=require(_0x3a88('0x8'));var config=require('../../config/environment');var attributes=require(_0x3a88('0x9'));module['exports']=function(_0x1067af,_0x1072a3){return _0x1067af[_0x3a88('0xa')]('SalesforceField',attributes,{'tableName':_0x3a88('0xb'),'paranoid':![],'indexes':[{'name':_0x3a88('0xc'),'fields':['idField',_0x3a88('0xd')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x1d01=['exports','define','SalesforceField','int_salesforce_fields','salesforce_unique_index','idField','FieldId','lodash','util','../../config/logger','api','bluebird','request-promise','path','rimraf','../../config/environment','./intSalesforceField.attributes'];(function(_0x3ab9ee,_0x4a74b8){var _0x82ee88=function(_0x6ccc7e){while(--_0x6ccc7e){_0x3ab9ee['push'](_0x3ab9ee['shift']());}};_0x82ee88(++_0x4a74b8);}(_0x1d01,0x1b0));var _0x11d0=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x1d01[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x11d0('0x0'));var util=require(_0x11d0('0x1'));var logger=require(_0x11d0('0x2'))(_0x11d0('0x3'));var moment=require('moment');var BPromise=require(_0x11d0('0x4'));var rp=require(_0x11d0('0x5'));var fs=require('fs');var path=require(_0x11d0('0x6'));var rimraf=require(_0x11d0('0x7'));var config=require(_0x11d0('0x8'));var attributes=require(_0x11d0('0x9'));module[_0x11d0('0xa')]=function(_0x1b95b2,_0x2bbf33){return _0x1b95b2[_0x11d0('0xb')](_0x11d0('0xc'),attributes,{'tableName':_0x11d0('0xd'),'paranoid':![],'indexes':[{'name':_0x11d0('0xe'),'fields':[_0x11d0('0xf'),_0x11d0('0x10')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index a2bb8ed..3c372ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbb7d=['info','SalesforceField,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','lodash','moment','bluebird','randomstring','ioredis','rpc','../../config/environment','jayson/promise','client','request','then'];(function(_0x200ff2,_0x80b365){var _0x404f48=function(_0x4a9aa6){while(--_0x4a9aa6){_0x200ff2['push'](_0x200ff2['shift']());}};_0x404f48(++_0x80b365);}(_0xbb7d,0x106));var _0xdbb7=function(_0x130f88,_0x3a2db7){_0x130f88=_0x130f88-0x0;var _0x3cd815=_0xbb7d[_0x130f88];return _0x3cd815;};'use strict';var _=require(_0xdbb7('0x0'));var util=require('util');var moment=require(_0xdbb7('0x1'));var BPromise=require(_0xdbb7('0x2'));var rs=require(_0xdbb7('0x3'));var fs=require('fs');var Redis=require(_0xdbb7('0x4'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xdbb7('0x5'));var config=require(_0xdbb7('0x6'));var jayson=require(_0xdbb7('0x7'));var client=jayson[_0xdbb7('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x9086f7,_0x4e333f,_0x212227){return new BPromise(function(_0x125b44,_0x1755d6){return client[_0xdbb7('0x9')](_0x9086f7,_0x212227)[_0xdbb7('0xa')](function(_0x5997c6){logger[_0xdbb7('0xb')](_0xdbb7('0xc'),_0x4e333f,_0xdbb7('0xd'));logger[_0xdbb7('0xe')]('SalesforceField,\x20%s,\x20%s,\x20%s',_0x4e333f,_0xdbb7('0xd'),JSON[_0xdbb7('0xf')](_0x5997c6));if(_0x5997c6[_0xdbb7('0x10')]){if(_0x5997c6['error'][_0xdbb7('0x11')]===0x1f4){logger['error'](_0xdbb7('0xc'),_0x4e333f,_0x5997c6['error'][_0xdbb7('0x12')]);return _0x1755d6(_0x5997c6[_0xdbb7('0x10')][_0xdbb7('0x12')]);}logger['error'](_0xdbb7('0xc'),_0x4e333f,_0x5997c6[_0xdbb7('0x10')][_0xdbb7('0x12')]);return _0x125b44(_0x5997c6[_0xdbb7('0x10')][_0xdbb7('0x12')]);}else{logger[_0xdbb7('0xb')]('SalesforceField,\x20%s,\x20%s',_0x4e333f,_0xdbb7('0xd'));_0x125b44(_0x5997c6[_0xdbb7('0x13')][_0xdbb7('0x12')]);}})[_0xdbb7('0x14')](function(_0x56805c){logger['error'](_0xdbb7('0xc'),_0x4e333f,_0x56805c);_0x1755d6(_0x56805c);});});}
\ No newline at end of file
+var _0x7e93=['rpc','../../config/environment','jayson/promise','client','request','then','info','SalesforceField,\x20%s,\x20%s','request\x20sent','debug','SalesforceField,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x9bb472,_0x16ea0a){var _0x6a6522=function(_0x59be3a){while(--_0x59be3a){_0x9bb472['push'](_0x9bb472['shift']());}};_0x6a6522(++_0x16ea0a);}(_0x7e93,0x12f));var _0x37e9=function(_0x5f43df,_0x5833c4){_0x5f43df=_0x5f43df-0x0;var _0x371d4f=_0x7e93[_0x5f43df];return _0x371d4f;};'use strict';var _=require(_0x37e9('0x0'));var util=require(_0x37e9('0x1'));var moment=require(_0x37e9('0x2'));var BPromise=require(_0x37e9('0x3'));var rs=require(_0x37e9('0x4'));var fs=require('fs');var Redis=require(_0x37e9('0x5'));var db=require(_0x37e9('0x6'))['db'];var utils=require(_0x37e9('0x7'));var logger=require(_0x37e9('0x8'))(_0x37e9('0x9'));var config=require(_0x37e9('0xa'));var jayson=require(_0x37e9('0xb'));var client=jayson[_0x37e9('0xc')]['http']({'port':0x232a});function respondWithRpcPromise(_0x244566,_0x1114d4,_0x126208){return new BPromise(function(_0x59ca6c,_0x32673a){return client[_0x37e9('0xd')](_0x244566,_0x126208)[_0x37e9('0xe')](function(_0x73ff65){logger[_0x37e9('0xf')](_0x37e9('0x10'),_0x1114d4,_0x37e9('0x11'));logger[_0x37e9('0x12')](_0x37e9('0x13'),_0x1114d4,_0x37e9('0x11'),JSON[_0x37e9('0x14')](_0x73ff65));if(_0x73ff65[_0x37e9('0x15')]){if(_0x73ff65['error'][_0x37e9('0x16')]===0x1f4){logger[_0x37e9('0x15')](_0x37e9('0x10'),_0x1114d4,_0x73ff65[_0x37e9('0x15')][_0x37e9('0x17')]);return _0x32673a(_0x73ff65[_0x37e9('0x15')][_0x37e9('0x17')]);}logger[_0x37e9('0x15')](_0x37e9('0x10'),_0x1114d4,_0x73ff65[_0x37e9('0x15')][_0x37e9('0x17')]);return _0x59ca6c(_0x73ff65[_0x37e9('0x15')][_0x37e9('0x17')]);}else{logger[_0x37e9('0xf')](_0x37e9('0x10'),_0x1114d4,_0x37e9('0x11'));_0x59ca6c(_0x73ff65[_0x37e9('0x18')][_0x37e9('0x17')]);}})[_0x37e9('0x19')](function(_0x882c06){logger[_0x37e9('0x15')]('SalesforceField,\x20%s,\x20%s',_0x1114d4,_0x882c06);_0x32673a(_0x882c06);});});}
\ No newline at end of file
index 4a7b28d..4403e7b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb6d7=['get','isAuthenticated','index','/:id','/:id/configurations','/:id/fields','getFields','create','post','addConfiguration','put','delete','destroy','multer','path','express','Router','../../components/auth/service','../../config/environment'];(function(_0x4b54fb,_0x2150e4){var _0x375eb4=function(_0x461679){while(--_0x461679){_0x4b54fb['push'](_0x4b54fb['shift']());}};_0x375eb4(++_0x2150e4);}(_0xb6d7,0x176));var _0x7b6d=function(_0x294827,_0x1d97fe){_0x294827=_0x294827-0x0;var _0x1f9671=_0xb6d7[_0x294827];return _0x1f9671;};'use strict';var multer=require(_0x7b6d('0x0'));var util=require('util');var path=require(_0x7b6d('0x1'));var timeout=require('connect-timeout');var express=require(_0x7b6d('0x2'));var router=express[_0x7b6d('0x3')]();var auth=require(_0x7b6d('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x7b6d('0x5'));var controller=require('./intServicenowAccount.controller');router[_0x7b6d('0x6')]('/',auth[_0x7b6d('0x7')](),controller[_0x7b6d('0x8')]);router[_0x7b6d('0x6')](_0x7b6d('0x9'),auth[_0x7b6d('0x7')](),controller['show']);router['get'](_0x7b6d('0xa'),auth[_0x7b6d('0x7')](),controller['getConfigurations']);router[_0x7b6d('0x6')](_0x7b6d('0xb'),auth[_0x7b6d('0x7')](),controller[_0x7b6d('0xc')]);router['post']('/',auth[_0x7b6d('0x7')](),controller[_0x7b6d('0xd')]);router[_0x7b6d('0xe')](_0x7b6d('0xa'),auth['isAuthenticated'](),controller[_0x7b6d('0xf')]);router[_0x7b6d('0x10')]('/:id',auth[_0x7b6d('0x7')](),controller['update']);router[_0x7b6d('0x11')](_0x7b6d('0x9'),auth[_0x7b6d('0x7')](),controller[_0x7b6d('0x12')]);module['exports']=router;
\ No newline at end of file
+var _0x727a=['exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./intServicenowAccount.controller','get','isAuthenticated','index','show','/:id/configurations','/:id/fields','getFields','post','addConfiguration','put','/:id','update','delete','destroy'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x727a,0xc1));var _0xa727=function(_0xc51bca,_0x5a682a){_0xc51bca=_0xc51bca-0x0;var _0x5d8c3e=_0x727a[_0xc51bca];return _0x5d8c3e;};'use strict';var multer=require(_0xa727('0x0'));var util=require(_0xa727('0x1'));var path=require(_0xa727('0x2'));var timeout=require(_0xa727('0x3'));var express=require(_0xa727('0x4'));var router=express['Router']();var auth=require(_0xa727('0x5'));var interaction=require(_0xa727('0x6'));var config=require(_0xa727('0x7'));var controller=require(_0xa727('0x8'));router[_0xa727('0x9')]('/',auth[_0xa727('0xa')](),controller[_0xa727('0xb')]);router['get']('/:id',auth['isAuthenticated'](),controller[_0xa727('0xc')]);router[_0xa727('0x9')](_0xa727('0xd'),auth[_0xa727('0xa')](),controller['getConfigurations']);router[_0xa727('0x9')](_0xa727('0xe'),auth[_0xa727('0xa')](),controller[_0xa727('0xf')]);router[_0xa727('0x10')]('/',auth[_0xa727('0xa')](),controller['create']);router['post'](_0xa727('0xd'),auth[_0xa727('0xa')](),controller[_0xa727('0x11')]);router[_0xa727('0x12')](_0xa727('0x13'),auth[_0xa727('0xa')](),controller[_0xa727('0x14')]);router[_0xa727('0x15')]('/:id',auth[_0xa727('0xa')](),controller[_0xa727('0x16')]);module[_0xa727('0x17')]=router;
\ No newline at end of file
index c893ace..9f88431 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4483=['exports','STRING','username','sequelize'];(function(_0x2b82d5,_0x386039){var _0x3b4225=function(_0x31356d){while(--_0x31356d){_0x2b82d5['push'](_0x2b82d5['shift']());}};_0x3b4225(++_0x386039);}(_0x4483,0x1a3));var _0x3448=function(_0x41a98c,_0x497640){_0x41a98c=_0x41a98c-0x0;var _0x5dfc8e=_0x4483[_0x41a98c];return _0x5dfc8e;};'use strict';var Sequelize=require(_0x3448('0x0'));module[_0x3448('0x1')]={'name':{'type':Sequelize[_0x3448('0x2')]},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0x3448('0x2')],'unique':_0x3448('0x3')},'password':{'type':Sequelize[_0x3448('0x2')]},'email':{'type':Sequelize[_0x3448('0x2')]},'remoteUri':{'type':Sequelize[_0x3448('0x2')],'unique':'remoteUri'},'serverUrl':{'type':Sequelize[_0x3448('0x2')]}};
\ No newline at end of file
+var _0x6324=['username','remoteUri','sequelize','exports','STRING'];(function(_0x3dee92,_0x55e1eb){var _0x44d36e=function(_0x34de1a){while(--_0x34de1a){_0x3dee92['push'](_0x3dee92['shift']());}};_0x44d36e(++_0x55e1eb);}(_0x6324,0x142));var _0x4632=function(_0x247b0b,_0x3df01f){_0x247b0b=_0x247b0b-0x0;var _0x44dfde=_0x6324[_0x247b0b];return _0x44dfde;};'use strict';var Sequelize=require(_0x4632('0x0'));module[_0x4632('0x1')]={'name':{'type':Sequelize[_0x4632('0x2')]},'description':{'type':Sequelize[_0x4632('0x2')]},'username':{'type':Sequelize['STRING'],'unique':_0x4632('0x3')},'password':{'type':Sequelize['STRING']},'email':{'type':Sequelize[_0x4632('0x2')]},'remoteUri':{'type':Sequelize['STRING'],'unique':_0x4632('0x4')},'serverUrl':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 84f6907..75ac5ac 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x12c8=['upon_approval','correlation_id','email','serverUrl','remoteUri','slice','substring','format','password','log','forEach','internalType','label','push','all','assign','TCL:\x20_object','remove','includes','TCL:\x20exports.getEntityFields\x20->\x20_objectsCustom','concat','ServiceNow\x20error:\x20','statusCode','Wrong\x20credentials','boolean','True','False','false','sys_choice?sysparm_query=name=incident^element=','inactive','value','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','../../components/integrations/configuration','jayson/promise','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','then','info','request\x20sent','debug','stringify','error','code','ServicenowAccount,\x20%s,\x20%s','message','result','sendStatus','end','json','count','offset','set','Content-Range','apply','reject','update','destroy','status','stack','name','send','index','ServicenowAccount','query','keys','filters','intersection','model','attributes','fields','length','nolimit','limit','order','where','pick','filter','merge','map','type','key','VIRTUAL','includeAll','include','findAll','rows','catch','show','params','rawAttributes','options','find','create','body','getConfigurations','findOne','ServicenowConfiguration','sort','hasOwnProperty','addConfiguration','AccountId','Subjects','getSubjects','channel','Descriptions','getDescriptions','ServicenowField','getFields','made_sla','knowledge','subcategory','close_code','incident_state','severity','category','parent','caused_by','upon_reject','sys_updated_on','hold_reason','approval_history','number','resolved_by','opened_by','sys_created_on','state','sys_created_by','closed_at','delivery_plan','active','work_notes_list','business_service','priority','sys_domain_path','rfc','time_worked','expected_start','opened_at','business_duration','work_end','resolved_at','approval_set','work_notes','correlation_display','delivery_task','business_stc','additional_assignee_list','description','calendar_duration','notify','sys_class_name','close_notes','closed_by','follow_up','parent_incident','sys_id','problem_id','company','activity_due','assigned_to','comments','sla_due','comments_and_work_notes','due_date','sys_mod_count','reopen_count','sys_tags','escalation'];(function(_0x5c6299,_0x11bd28){var _0x23b564=function(_0x329ed6){while(--_0x329ed6){_0x5c6299['push'](_0x5c6299['shift']());}};_0x23b564(++_0x11bd28);}(_0x12c8,0x1a1));var _0x812c=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x12c8[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require(_0x812c('0x0'));var emlformat=require(_0x812c('0x1'));var rimraf=require(_0x812c('0x2'));var zipdir=require(_0x812c('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x812c('0x4'));var moment=require(_0x812c('0x5'));var BPromise=require(_0x812c('0x6'));var Mustache=require(_0x812c('0x7'));var util=require(_0x812c('0x8'));var path=require(_0x812c('0x9'));var sox=require(_0x812c('0xa'));var csv=require(_0x812c('0xb'));var ejs=require(_0x812c('0xc'));var fs=require('fs');var _=require(_0x812c('0xd'));var squel=require(_0x812c('0xe'));var crypto=require(_0x812c('0xf'));var jsforce=require(_0x812c('0x10'));var deskjs=require('desk.js');var toCsv=require(_0x812c('0xb'));var querystring=require(_0x812c('0x11'));var Papa=require(_0x812c('0x12'));var Redis=require(_0x812c('0x13'));var authService=require(_0x812c('0x14'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x812c('0x15'));var logger=require(_0x812c('0x16'))('api');var utils=require(_0x812c('0x17'));var config=require('../../config/environment');var db=require(_0x812c('0x18'))['db'];var integrations=require(_0x812c('0x19'));var jayson=require(_0x812c('0x1a'));var client=jayson['client'][_0x812c('0x1b')]({'port':0x232a});function checkPasswordPattern(_0x3b1cac,_0x25ad2d,_0x208a31){if(_0x208a31){var _0x52ff4c=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x52ff4c[_0x812c('0x1c')](_0x25ad2d)){return _0x3b1cac;}else{throw new Error(_0x812c('0x1d'));}}else{return _0x3b1cac;}}function respondWithRpcPromise(_0x5045ea,_0x17f42f,_0x50b8d1,_0x29c6a2){return new BPromise(function(_0x17607c,_0x51df43){var _0x16d9c0=_0x29c6a2||client;return _0x16d9c0['request'](_0x5045ea,_0x50b8d1)[_0x812c('0x1e')](function(_0x5e3b56){logger[_0x812c('0x1f')]('ServicenowAccount,\x20%s,\x20%s',_0x17f42f,_0x812c('0x20'));logger[_0x812c('0x21')]('ServicenowAccount,\x20%s,\x20%s,\x20%s',_0x17f42f,_0x812c('0x20'),JSON[_0x812c('0x22')](_0x5e3b56));if(_0x5e3b56['error']){if(_0x5e3b56[_0x812c('0x23')][_0x812c('0x24')]===0x1f4){logger['error'](_0x812c('0x25'),_0x17f42f,_0x5e3b56[_0x812c('0x23')][_0x812c('0x26')]);return _0x51df43(_0x5e3b56[_0x812c('0x23')][_0x812c('0x26')]);}logger['error']('ServicenowAccount,\x20%s,\x20%s',_0x17f42f,_0x5e3b56['error'][_0x812c('0x26')]);return _0x17607c(_0x5e3b56[_0x812c('0x23')]['message']);}else{logger[_0x812c('0x1f')](_0x812c('0x25'),_0x17f42f,_0x812c('0x20'));_0x17607c(_0x5e3b56[_0x812c('0x27')]['message']);}})['catch'](function(_0x23984f){logger[_0x812c('0x23')](_0x812c('0x25'),_0x17f42f,_0x23984f);_0x51df43(_0x23984f);});});}function respondWithStatusCode(_0x3bfb55,_0x522f92){_0x522f92=_0x522f92||0xcc;return function(_0xe50453){if(_0xe50453){return _0x3bfb55[_0x812c('0x28')](_0x522f92);}return _0x3bfb55['status'](_0x522f92)[_0x812c('0x29')]();};}function respondWithResult(_0x1a97a2,_0x5411fd){_0x5411fd=_0x5411fd||0xc8;return function(_0x216d11){if(_0x216d11){return _0x1a97a2['status'](_0x5411fd)[_0x812c('0x2a')](_0x216d11);}};}function respondWithFilteredResult(_0xddb353,_0x43c733){return function(_0x2017b7){if(_0x2017b7){var _0x1db9c2=_0x2017b7[_0x812c('0x2b')],_0x2ee74d=_0x43c733['offset'],_0x2f39dc=_0x43c733[_0x812c('0x2c')]+_0x43c733['limit'],_0x38cc76;if(_0x2f39dc>=_0x1db9c2){_0x2f39dc=_0x1db9c2;_0x38cc76=0xc8;}else{_0x38cc76=0xce;}_0xddb353['status'](_0x38cc76);return _0xddb353[_0x812c('0x2d')](_0x812c('0x2e'),_0x2ee74d+'-'+_0x2f39dc+'/'+_0x1db9c2)[_0x812c('0x2a')](_0x2017b7);}return null;};}function patchUpdates(_0xaec3d8){return function(_0x22601b){try{jsonpatch[_0x812c('0x2f')](_0x22601b,_0xaec3d8,!![]);}catch(_0x19d445){return BPromise[_0x812c('0x30')](_0x19d445);}return _0x22601b['save']();};}function saveUpdates(_0x21d4c5,_0x502e50){return function(_0x26c852){if(_0x26c852){return _0x26c852[_0x812c('0x31')](_0x21d4c5)['then'](function(_0x86ef84){return _0x86ef84;});}return null;};}function removeEntity(_0x237ae4,_0x42fa9e){return function(_0x23041e){if(_0x23041e){return _0x23041e[_0x812c('0x32')]()[_0x812c('0x1e')](function(){_0x237ae4[_0x812c('0x33')](0xcc)[_0x812c('0x29')]();});}};}function handleEntityNotFound(_0x23e0ef,_0x5b18e0){return function(_0x1373c8){if(!_0x1373c8){_0x23e0ef[_0x812c('0x28')](0x194);}return _0x1373c8;};}function handleError(_0x5751be,_0x5950ed){_0x5950ed=_0x5950ed||0x1f4;return function(_0x55ab06){logger['error'](_0x55ab06[_0x812c('0x34')]);if(_0x55ab06[_0x812c('0x35')]){delete _0x55ab06[_0x812c('0x35')];}_0x5751be[_0x812c('0x33')](_0x5950ed)[_0x812c('0x36')](_0x55ab06);};}exports[_0x812c('0x37')]=function(_0x3f2fbb,_0x5c9c7c){var _0xe01080={},_0x44bb8f={},_0x5af443={'count':0x0,'rows':[]};var _0x269736=db[_0x812c('0x38')]['rawAttributes'];_0x44bb8f['model']=_['keys'](_0x269736);_0x44bb8f[_0x812c('0x39')]=_[_0x812c('0x3a')](_0x3f2fbb[_0x812c('0x39')]);_0x44bb8f[_0x812c('0x3b')]=_[_0x812c('0x3c')](_0x44bb8f[_0x812c('0x3d')],_0x44bb8f[_0x812c('0x39')]);_0xe01080[_0x812c('0x3e')]=_['intersection'](_0x44bb8f[_0x812c('0x3d')],qs[_0x812c('0x3f')](_0x3f2fbb[_0x812c('0x39')][_0x812c('0x3f')]));_0xe01080['attributes']=_0xe01080['attributes'][_0x812c('0x40')]?_0xe01080[_0x812c('0x3e')]:_0x44bb8f['model'];if(!_0x3f2fbb[_0x812c('0x39')]['hasOwnProperty'](_0x812c('0x41'))){_0xe01080[_0x812c('0x42')]=qs[_0x812c('0x42')](_0x3f2fbb[_0x812c('0x39')][_0x812c('0x42')]);_0xe01080[_0x812c('0x2c')]=qs['offset'](_0x3f2fbb[_0x812c('0x39')][_0x812c('0x2c')]);}_0xe01080[_0x812c('0x43')]=qs['sort'](_0x3f2fbb[_0x812c('0x39')]['sort']);_0xe01080[_0x812c('0x44')]=qs['filters'](_[_0x812c('0x45')](_0x3f2fbb[_0x812c('0x39')],_0x44bb8f[_0x812c('0x3b')]));if(_0x3f2fbb[_0x812c('0x39')][_0x812c('0x46')]){_0xe01080[_0x812c('0x44')]=_[_0x812c('0x47')](_0xe01080['where'],{'$or':_[_0x812c('0x48')](_0x269736,function(_0x5802d0){if(_0x5802d0[_0x812c('0x49')][_0x812c('0x4a')]!==_0x812c('0x4b')){var _0x31b29b={};_0x31b29b[_0x5802d0['field']]={'$like':'%'+_0x3f2fbb[_0x812c('0x39')][_0x812c('0x46')]+'%'};return _0x31b29b;}})});}_0xe01080=_[_0x812c('0x47')]({},_0xe01080,_0x3f2fbb['options']);var _0x98b792={'where':_0xe01080[_0x812c('0x44')]};return db[_0x812c('0x38')][_0x812c('0x2b')](_0x98b792)[_0x812c('0x1e')](function(_0x183e3a){_0x5af443[_0x812c('0x2b')]=_0x183e3a;if(_0x3f2fbb['query'][_0x812c('0x4c')]){_0xe01080[_0x812c('0x4d')]=[{'all':!![]}];}return db['ServicenowAccount'][_0x812c('0x4e')](_0xe01080);})[_0x812c('0x1e')](function(_0x2c5dbf){_0x5af443[_0x812c('0x4f')]=_0x2c5dbf;return _0x5af443;})[_0x812c('0x1e')](respondWithFilteredResult(_0x5c9c7c,_0xe01080))[_0x812c('0x50')](handleError(_0x5c9c7c,null));};exports[_0x812c('0x51')]=function(_0x376fa5,_0x15d89f){var _0x9ff093={'raw':![],'where':{'id':_0x376fa5[_0x812c('0x52')]['id']}},_0x3e96ff={};_0x3e96ff['model']=_['keys'](db[_0x812c('0x38')][_0x812c('0x53')]);_0x3e96ff[_0x812c('0x39')]=_[_0x812c('0x3a')](_0x376fa5[_0x812c('0x39')]);_0x3e96ff[_0x812c('0x3b')]=_[_0x812c('0x3c')](_0x3e96ff['model'],_0x3e96ff['query']);_0x9ff093[_0x812c('0x3e')]=_['intersection'](_0x3e96ff[_0x812c('0x3d')],qs[_0x812c('0x3f')](_0x376fa5[_0x812c('0x39')][_0x812c('0x3f')]));_0x9ff093['attributes']=_0x9ff093[_0x812c('0x3e')][_0x812c('0x40')]?_0x9ff093['attributes']:_0x3e96ff[_0x812c('0x3d')];if(_0x376fa5['query'][_0x812c('0x4c')]){_0x9ff093['include']=[{'all':!![]}];}_0x9ff093=_[_0x812c('0x47')]({},_0x9ff093,_0x376fa5[_0x812c('0x54')]);return db[_0x812c('0x38')][_0x812c('0x55')](_0x9ff093)[_0x812c('0x1e')](handleEntityNotFound(_0x15d89f,null))[_0x812c('0x1e')](respondWithResult(_0x15d89f,null))[_0x812c('0x50')](handleError(_0x15d89f,null));};exports[_0x812c('0x56')]=function(_0x24c44e,_0x3505f2){return db[_0x812c('0x38')][_0x812c('0x56')](_0x24c44e[_0x812c('0x57')],{})['then'](respondWithResult(_0x3505f2,0xc9))[_0x812c('0x50')](handleError(_0x3505f2,null));};exports[_0x812c('0x31')]=function(_0x300c09,_0x50b911){if(_0x300c09[_0x812c('0x57')]['id']){delete _0x300c09['body']['id'];}return db['ServicenowAccount'][_0x812c('0x55')]({'where':{'id':_0x300c09[_0x812c('0x52')]['id']}})['then'](handleEntityNotFound(_0x50b911,null))[_0x812c('0x1e')](saveUpdates(_0x300c09[_0x812c('0x57')],null))[_0x812c('0x1e')](respondWithResult(_0x50b911,null))[_0x812c('0x50')](handleError(_0x50b911,null));};exports['destroy']=function(_0x150727,_0x4af103){return db[_0x812c('0x38')][_0x812c('0x55')]({'where':{'id':_0x150727[_0x812c('0x52')]['id']}})[_0x812c('0x1e')](handleEntityNotFound(_0x4af103,null))[_0x812c('0x1e')](removeEntity(_0x4af103,null))['catch'](handleError(_0x4af103,null));};exports[_0x812c('0x58')]=function(_0x5b4d3f,_0x2094e2,_0x564139){var _0x22b5fa={};var _0x4f7278={};var _0x2aea2c;var _0xba3534;return db[_0x812c('0x38')][_0x812c('0x59')]({'where':{'id':_0x5b4d3f['params']['id']}})['then'](handleEntityNotFound(_0x2094e2,null))['then'](function(_0x77f9eb){if(_0x77f9eb){_0x2aea2c=_0x77f9eb;_0x4f7278[_0x812c('0x3d')]=_[_0x812c('0x3a')](db[_0x812c('0x5a')][_0x812c('0x53')]);_0x4f7278[_0x812c('0x39')]=_['keys'](_0x5b4d3f[_0x812c('0x39')]);_0x4f7278[_0x812c('0x3b')]=_['intersection'](_0x4f7278[_0x812c('0x3d')],_0x4f7278[_0x812c('0x39')]);_0x22b5fa[_0x812c('0x3e')]=_['intersection'](_0x4f7278[_0x812c('0x3d')],qs['fields'](_0x5b4d3f[_0x812c('0x39')]['fields']));_0x22b5fa[_0x812c('0x3e')]=_0x22b5fa['attributes'][_0x812c('0x40')]?_0x22b5fa[_0x812c('0x3e')]:_0x4f7278['model'];_0x22b5fa['order']=qs[_0x812c('0x5b')](_0x5b4d3f[_0x812c('0x39')][_0x812c('0x5b')]);_0x22b5fa['where']=qs[_0x812c('0x3b')](_['pick'](_0x5b4d3f[_0x812c('0x39')],_0x4f7278['filters']));if(_0x5b4d3f[_0x812c('0x39')][_0x812c('0x46')]){_0x22b5fa[_0x812c('0x44')]=_[_0x812c('0x47')](_0x22b5fa[_0x812c('0x44')],{'$or':_[_0x812c('0x48')](_0x22b5fa[_0x812c('0x3e')],function(_0x210901){var _0x1c81c0={};_0x1c81c0[_0x210901]={'$like':'%'+_0x5b4d3f[_0x812c('0x39')][_0x812c('0x46')]+'%'};return _0x1c81c0;})});}_0x22b5fa=_[_0x812c('0x47')]({},_0x22b5fa,_0x5b4d3f[_0x812c('0x54')]);return _0x2aea2c[_0x812c('0x58')](_0x22b5fa);}})[_0x812c('0x1e')](function(_0x562370){if(_0x562370){_0xba3534=_0x562370[_0x812c('0x40')];if(!_0x5b4d3f[_0x812c('0x39')][_0x812c('0x5c')]('nolimit')){_0x22b5fa[_0x812c('0x42')]=qs[_0x812c('0x42')](_0x5b4d3f[_0x812c('0x39')][_0x812c('0x42')]);_0x22b5fa[_0x812c('0x2c')]=qs[_0x812c('0x2c')](_0x5b4d3f[_0x812c('0x39')][_0x812c('0x2c')]);}return _0x2aea2c[_0x812c('0x58')](_0x22b5fa);}})['then'](function(_0x1bd5c9){if(_0x1bd5c9){return _0x1bd5c9?{'count':_0xba3534,'rows':_0x1bd5c9}:null;}})[_0x812c('0x1e')](respondWithResult(_0x2094e2,null))[_0x812c('0x50')](handleError(_0x2094e2,null));};exports[_0x812c('0x5d')]=function(_0xec40eb,_0x355f4b,_0x1c0c46){if(_0xec40eb['body']['id']){delete _0xec40eb[_0x812c('0x57')]['id'];}return db[_0x812c('0x38')]['findOne']({'where':{'id':_0xec40eb['params']['id']}})[_0x812c('0x1e')](handleEntityNotFound(_0x355f4b,null))['then'](function(_0xddb93a){if(_0xddb93a){_0xec40eb[_0x812c('0x57')][_0x812c('0x5e')]=_0xddb93a['id'];_0xec40eb[_0x812c('0x57')][_0x812c('0x5f')]=integrations[_0x812c('0x60')](_0xec40eb['body'][_0x812c('0x61')],_0xec40eb['body'][_0x812c('0x49')]);_0xec40eb[_0x812c('0x57')][_0x812c('0x62')]=integrations[_0x812c('0x63')](_0xec40eb[_0x812c('0x57')][_0x812c('0x61')],_0xec40eb['body'][_0x812c('0x49')]);return db[_0x812c('0x5a')]['create'](_0xec40eb['body'],{'include':[{'model':db[_0x812c('0x64')],'as':_0x812c('0x5f')},{'model':db[_0x812c('0x64')],'as':_0x812c('0x62')}]});}return null;})[_0x812c('0x1e')](respondWithResult(_0x355f4b,null))['catch'](handleError(_0x355f4b,null));};exports[_0x812c('0x65')]=function(_0xed5296,_0x48a911,_0x5e8c94){var _0x2c7fcf=[_0x812c('0x66'),'hold_reason',_0x812c('0x67'),_0x812c('0x68'),_0x812c('0x69'),'notify',_0x812c('0x6a'),_0x812c('0x6b'),_0x812c('0x6c')];var _0x19c07b=[_0x812c('0x6d'),_0x812c('0x66'),_0x812c('0x6e'),'watch_list',_0x812c('0x6f'),_0x812c('0x70'),'child_incidents',_0x812c('0x71'),_0x812c('0x72'),_0x812c('0x73'),_0x812c('0x74'),'sys_updated_by',_0x812c('0x75'),'user_input',_0x812c('0x76'),'sys_domain',_0x812c('0x77'),_0x812c('0x78'),'knowledge',_0x812c('0x43'),'calendar_stc',_0x812c('0x79'),'cmdb_ci',_0x812c('0x7a'),'impact',_0x812c('0x7b'),_0x812c('0x7c'),_0x812c('0x7d'),_0x812c('0x7e'),_0x812c('0x7f'),_0x812c('0x80'),_0x812c('0x81'),_0x812c('0x82'),_0x812c('0x83'),_0x812c('0x84'),'group_list',_0x812c('0x85'),'reopened_time',_0x812c('0x86'),'caller_id',_0x812c('0x87'),_0x812c('0x68'),_0x812c('0x88'),'short_description',_0x812c('0x69'),_0x812c('0x89'),_0x812c('0x8a'),'work_start','assignment_group',_0x812c('0x8b'),_0x812c('0x8c'),_0x812c('0x8d'),_0x812c('0x8e'),_0x812c('0x8f'),_0x812c('0x90'),_0x812c('0x91'),_0x812c('0x92'),_0x812c('0x93'),_0x812c('0x94'),_0x812c('0x95'),'contact_type','reopened_by',_0x812c('0x6a'),'urgency',_0x812c('0x96'),_0x812c('0x97'),'reassignment_count',_0x812c('0x98'),_0x812c('0x99'),'severity',_0x812c('0x9a'),_0x812c('0x9b'),'approval',_0x812c('0x9c'),_0x812c('0x9d'),_0x812c('0x9e'),_0x812c('0x9f'),_0x812c('0xa0'),_0x812c('0xa1'),_0x812c('0xa2'),_0x812c('0xa3'),'location',_0x812c('0x6c')];var _0x5d33a6='';var _0x2d26bd='';var _0x5d2dda=[];var _0x363685='';var _0x17a027='';var _0x76894c=[];var _0x1ed05a='';var _0x4709a8='';var _0x1e6979={};var _0x4b48f4='';return db[_0x812c('0x38')]['findOne']({'where':{'id':_0xed5296[_0x812c('0x52')]['id']},'attributes':['id','username','password',_0x812c('0xa4'),'remoteUri',_0x812c('0xa5')]})[_0x812c('0x1e')](handleEntityNotFound(_0x48a911,null))['then'](function(_0x1f821d){if(_0x1f821d){_0x4b48f4=_0x1f821d[_0x812c('0xa6')];var _0xc13890=_0x4b48f4[_0x812c('0xa7')](-0x1);if(_0xc13890==='/'){_0x4b48f4=_0x4b48f4[_0x812c('0xa8')](0x0,_0x4b48f4['lastIndexOf'](_0xc13890));}_0x4709a8=util[_0x812c('0xa9')]('%s/api/now/doc/table/schema/',_0x4b48f4);_0x1ed05a=util[_0x812c('0xa9')]('%s/api/now/table/',_0x4b48f4);_0x1e6979={'user':_0x1f821d['username'],'pass':_0x1f821d[_0x812c('0xaa')]};var _0x123206={'method':'GET','uri':_0x4709a8+'incident?sysparm_display_value=all','auth':_0x1e6979,'json':!![]};return rp(_0x123206);}})[_0x812c('0x1e')](function(_0xe1d9ff){if(_0xe1d9ff[_0x812c('0x27')][_0x812c('0x40')]>0x0){_0x5d33a6=_0xe1d9ff[_0x812c('0x27')];}console[_0x812c('0xab')]('incident\x20table\x20objects',_0x5d33a6);_0x76894c=[];_0x2d26bd=Object['assign']([],_0x5d33a6);_['remove'](_0x2d26bd,function(_0x1c400b){return!_0x2c7fcf['includes'](_0x1c400b[_0x812c('0x35')]);});_0x2d26bd[_0x812c('0xac')](function(_0x2751f5){var _0x359c4a=createFieldObject(_0x1ed05a,_0x1e6979,_0x2751f5[_0x812c('0xad')],_0x2751f5[_0x812c('0x35')],_0x2751f5[_0x812c('0xae')],![]);_0x76894c[_0x812c('0xaf')](_0x359c4a);});return Promise[_0x812c('0xb0')](_0x76894c);})[_0x812c('0x1e')](function(_0x347b1e){_0x5d2dda=_0x347b1e;_0x363685=Object[_0x812c('0xb1')]([],_0x5d33a6);console['log'](_0x812c('0xb2'),_0x5d33a6);_[_0x812c('0xb3')](_0x363685,function(_0x2ad07a){return _0x19c07b[_0x812c('0xb4')](_0x2ad07a[_0x812c('0x35')]);});console[_0x812c('0xab')](_0x812c('0xb5'),_0x363685);_0x76894c=[];_0x363685[_0x812c('0xac')](function(_0x2e06d0){var _0x34876f=createFieldObject(_0x1ed05a,_0x1e6979,_0x2e06d0[_0x812c('0xad')],_0x2e06d0[_0x812c('0x35')],_0x2e06d0[_0x812c('0xae')],!![]);_0x76894c[_0x812c('0xaf')](_0x34876f);});return Promise['all'](_0x76894c);})[_0x812c('0x1e')](function(_0x50615f){_0x17a027=_0x50615f;var _0x1e4ab1=_0x5d2dda[_0x812c('0xb6')](_0x17a027);return{'count':_0x1e4ab1['length'],'rows':_0x1e4ab1};})[_0x812c('0x1e')](respondWithResult(_0x48a911,null))[_0x812c('0x50')](function(_0x5353d8){console['log'](_0x812c('0xb7')+_0x5353d8);var _0x73e69a=_0xed5296['query'][_0x812c('0x1c')]?0x1f4:_0x5353d8[_0x812c('0xb8')]||0x1f4;logger['error'](_0x5353d8[_0x812c('0x34')]);delete _0x5353d8[_0x812c('0x35')];if(_0x73e69a===0x191){_0x73e69a=0x190;}_0x48a911[_0x812c('0x33')](_0x73e69a)[_0x812c('0x36')](_0xed5296[_0x812c('0x39')][_0x812c('0x1c')]?{'message':_0x812c('0xb9'),'statusCode':_0x5353d8[_0x812c('0xb8')]}:_0x5353d8);});};function createFieldObject(_0x2d8d6d,_0xd8c36e,_0x45554c,_0x351717,_0x4b175e,_0x1d8459){return new Promise(function(_0x1a07f6,_0x796566){var _0x40de87={'id':_0x351717,'name':_0x4b175e,'custom':_0x1d8459};if(_0x45554c===_0x812c('0xba')){_0x40de87[_0x812c('0x54')]=[{'name':_0x812c('0xbb'),'value':'true'},{'name':_0x812c('0xbc'),'value':_0x812c('0xbd')}];_0x1a07f6(_0x40de87);}else{var _0xc33c6c={'method':'GET','uri':_0x2d8d6d+_0x812c('0xbe')+_0x351717,'auth':_0xd8c36e,'json':!![]};return rp(_0xc33c6c)[_0x812c('0x1e')](function(_0x295726){var _0x20cf96=[];if(_0x295726[_0x812c('0x27')][_0x812c('0x40')]>0x0){_0x295726[_0x812c('0x27')][_0x812c('0xac')](function(_0x2955a8){if(_0x2955a8[_0x812c('0xbf')]==='false'){var _0x431e2d={'name':_0x2955a8[_0x812c('0xae')],'value':_0x2955a8[_0x812c('0xc0')]};_0x20cf96[_0x812c('0xaf')](_0x431e2d);}});}_0x40de87[_0x812c('0x54')]=_0x20cf96;if(_0x40de87[_0x812c('0x54')][_0x812c('0x40')]>0x0){_0x1a07f6(_0x40de87);}else{if(_0x1d8459==![]){_0x1a07f6();}else{_0x1a07f6(_0x40de87);}}});}});}
\ No newline at end of file
+var _0xe74e=['time_worked','opened_at','business_duration','work_end','reopened_time','resolved_at','caller_id','approval_set','short_description','correlation_display','delivery_task','work_start','business_stc','additional_assignee_list','description','calendar_duration','notify','sys_class_name','close_notes','closed_by','follow_up','parent_incident','sys_id','contact_type','reopened_by','urgency','problem_id','company','activity_due','assigned_to','severity','comments','approval','comments_and_work_notes','due_date','reopen_count','escalation','upon_approval','correlation_id','location','category','password','email','remoteUri','serverUrl','slice','substring','lastIndexOf','format','username','GET','assign','remove','includes','forEach','internalType','label','push','all','log','TCL:\x20_object','concat','ServiceNow\x20error:\x20','statusCode','boolean','True','true','sys_choice?sysparm_query=name=incident^element=','false','value','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','ejs','lodash','jsforce','desk.js','to-csv','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','../../components/integrations/configuration','jayson/promise','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','info','debug','ServicenowAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','ServicenowAccount,\x20%s,\x20%s','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','stack','name','send','ServicenowAccount','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','limit','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','then','include','rows','show','length','includeAll','find','create','body','getConfigurations','findOne','params','ServicenowConfiguration','pick','addConfiguration','AccountId','Subjects','channel','Descriptions','getDescriptions','ServicenowField','getFields','made_sla','hold_reason','knowledge','subcategory','close_code','watch_list','sys_updated_on','child_incidents','number','resolved_by','sys_updated_by','opened_by','user_input','sys_created_on','state','sys_created_by','closed_at','cmdb_ci','delivery_plan','impact','active','work_notes_list','business_service','priority','sys_domain_path','rfc'];(function(_0x22b8a3,_0x2a79a7){var _0x199a0c=function(_0x544c66){while(--_0x544c66){_0x22b8a3['push'](_0x22b8a3['shift']());}};_0x199a0c(++_0x2a79a7);}(_0xe74e,0x10a));var _0xee74=function(_0x5eb52b,_0x112c2d){_0x5eb52b=_0x5eb52b-0x0;var _0x1d9c7e=_0xe74e[_0x5eb52b];return _0x1d9c7e;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xee74('0x0'));var rimraf=require(_0xee74('0x1'));var zipdir=require(_0xee74('0x2'));var jsonpatch=require(_0xee74('0x3'));var rp=require(_0xee74('0x4'));var moment=require(_0xee74('0x5'));var BPromise=require(_0xee74('0x6'));var Mustache=require(_0xee74('0x7'));var util=require(_0xee74('0x8'));var path=require(_0xee74('0x9'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xee74('0xa'));var fs=require('fs');var _=require(_0xee74('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xee74('0xc'));var deskjs=require(_0xee74('0xd'));var toCsv=require(_0xee74('0xe'));var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0xee74('0xf'));var authService=require(_0xee74('0x10'));var qs=require(_0xee74('0x11'));var hardwareService=require(_0xee74('0x12'));var logger=require(_0xee74('0x13'))(_0xee74('0x14'));var utils=require('../../config/utils');var config=require(_0xee74('0x15'));var db=require(_0xee74('0x16'))['db'];var integrations=require(_0xee74('0x17'));var jayson=require(_0xee74('0x18'));var client=jayson['client'][_0xee74('0x19')]({'port':0x232a});function checkPasswordPattern(_0xf608e2,_0x2f8b37,_0x25ffd1){if(_0x25ffd1){var _0x5ee1b4=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x5ee1b4[_0xee74('0x1a')](_0x2f8b37)){return _0xf608e2;}else{throw new Error(_0xee74('0x1b'));}}else{return _0xf608e2;}}function respondWithRpcPromise(_0x2dfe0f,_0x2d136c,_0x15d6f3,_0x24184e){return new BPromise(function(_0x489b98,_0x18789e){var _0x456c3f=_0x24184e||client;return _0x456c3f[_0xee74('0x1c')](_0x2dfe0f,_0x15d6f3)['then'](function(_0x988fb5){logger[_0xee74('0x1d')]('ServicenowAccount,\x20%s,\x20%s',_0x2d136c,'request\x20sent');logger[_0xee74('0x1e')](_0xee74('0x1f'),_0x2d136c,_0xee74('0x20'),JSON[_0xee74('0x21')](_0x988fb5));if(_0x988fb5[_0xee74('0x22')]){if(_0x988fb5['error'][_0xee74('0x23')]===0x1f4){logger[_0xee74('0x22')]('ServicenowAccount,\x20%s,\x20%s',_0x2d136c,_0x988fb5[_0xee74('0x22')][_0xee74('0x24')]);return _0x18789e(_0x988fb5[_0xee74('0x22')][_0xee74('0x24')]);}logger[_0xee74('0x22')]('ServicenowAccount,\x20%s,\x20%s',_0x2d136c,_0x988fb5[_0xee74('0x22')][_0xee74('0x24')]);return _0x489b98(_0x988fb5[_0xee74('0x22')][_0xee74('0x24')]);}else{logger['info']('ServicenowAccount,\x20%s,\x20%s',_0x2d136c,'request\x20sent');_0x489b98(_0x988fb5[_0xee74('0x25')][_0xee74('0x24')]);}})[_0xee74('0x26')](function(_0x1aa325){logger[_0xee74('0x22')](_0xee74('0x27'),_0x2d136c,_0x1aa325);_0x18789e(_0x1aa325);});});}function respondWithStatusCode(_0x111d69,_0xbf115d){_0xbf115d=_0xbf115d||0xcc;return function(_0x7bbf7e){if(_0x7bbf7e){return _0x111d69[_0xee74('0x28')](_0xbf115d);}return _0x111d69[_0xee74('0x29')](_0xbf115d)[_0xee74('0x2a')]();};}function respondWithResult(_0x42e392,_0xcdbcd5){_0xcdbcd5=_0xcdbcd5||0xc8;return function(_0x40a655){if(_0x40a655){return _0x42e392[_0xee74('0x29')](_0xcdbcd5)[_0xee74('0x2b')](_0x40a655);}};}function respondWithFilteredResult(_0x353c8f,_0x3fda83){return function(_0x1f0e7b){if(_0x1f0e7b){var _0x5c6096=_0x1f0e7b[_0xee74('0x2c')],_0x2cd871=_0x3fda83[_0xee74('0x2d')],_0x3e62bc=_0x3fda83[_0xee74('0x2d')]+_0x3fda83['limit'],_0x1d217b;if(_0x3e62bc>=_0x5c6096){_0x3e62bc=_0x5c6096;_0x1d217b=0xc8;}else{_0x1d217b=0xce;}_0x353c8f[_0xee74('0x29')](_0x1d217b);return _0x353c8f[_0xee74('0x2e')](_0xee74('0x2f'),_0x2cd871+'-'+_0x3e62bc+'/'+_0x5c6096)['json'](_0x1f0e7b);}return null;};}function patchUpdates(_0x413c57){return function(_0x25d3c9){try{jsonpatch[_0xee74('0x30')](_0x25d3c9,_0x413c57,!![]);}catch(_0x414713){return BPromise[_0xee74('0x31')](_0x414713);}return _0x25d3c9[_0xee74('0x32')]();};}function saveUpdates(_0x1edb74,_0xb8cc6f){return function(_0x378dbd){if(_0x378dbd){return _0x378dbd[_0xee74('0x33')](_0x1edb74)['then'](function(_0x2cd414){return _0x2cd414;});}return null;};}function removeEntity(_0x4cb876,_0x57b8ee){return function(_0x30b18b){if(_0x30b18b){return _0x30b18b['destroy']()['then'](function(){_0x4cb876[_0xee74('0x29')](0xcc)[_0xee74('0x2a')]();});}};}function handleEntityNotFound(_0x4acc6b,_0x301fbf){return function(_0x276c48){if(!_0x276c48){_0x4acc6b[_0xee74('0x28')](0x194);}return _0x276c48;};}function handleError(_0x4261c2,_0x4d543a){_0x4d543a=_0x4d543a||0x1f4;return function(_0x46a585){logger['error'](_0x46a585[_0xee74('0x34')]);if(_0x46a585[_0xee74('0x35')]){delete _0x46a585[_0xee74('0x35')];}_0x4261c2['status'](_0x4d543a)[_0xee74('0x36')](_0x46a585);};}exports['index']=function(_0x4a03c6,_0x7e86f9){var _0x21f000={},_0xbb8064={},_0x4fdc5d={'count':0x0,'rows':[]};var _0x4b91d7=db[_0xee74('0x37')][_0xee74('0x38')];_0xbb8064[_0xee74('0x39')]=_[_0xee74('0x3a')](_0x4b91d7);_0xbb8064[_0xee74('0x3b')]=_[_0xee74('0x3a')](_0x4a03c6[_0xee74('0x3b')]);_0xbb8064[_0xee74('0x3c')]=_[_0xee74('0x3d')](_0xbb8064[_0xee74('0x39')],_0xbb8064['query']);_0x21f000[_0xee74('0x3e')]=_[_0xee74('0x3d')](_0xbb8064[_0xee74('0x39')],qs['fields'](_0x4a03c6[_0xee74('0x3b')][_0xee74('0x3f')]));_0x21f000[_0xee74('0x3e')]=_0x21f000[_0xee74('0x3e')]['length']?_0x21f000['attributes']:_0xbb8064[_0xee74('0x39')];if(!_0x4a03c6['query'][_0xee74('0x40')](_0xee74('0x41'))){_0x21f000[_0xee74('0x42')]=qs[_0xee74('0x42')](_0x4a03c6[_0xee74('0x3b')][_0xee74('0x42')]);_0x21f000['offset']=qs[_0xee74('0x2d')](_0x4a03c6[_0xee74('0x3b')][_0xee74('0x2d')]);}_0x21f000[_0xee74('0x43')]=qs['sort'](_0x4a03c6[_0xee74('0x3b')][_0xee74('0x44')]);_0x21f000[_0xee74('0x45')]=qs[_0xee74('0x3c')](_['pick'](_0x4a03c6['query'],_0xbb8064[_0xee74('0x3c')]));if(_0x4a03c6['query'][_0xee74('0x46')]){_0x21f000[_0xee74('0x45')]=_[_0xee74('0x47')](_0x21f000['where'],{'$or':_[_0xee74('0x48')](_0x4b91d7,function(_0x547f7e){if(_0x547f7e[_0xee74('0x49')][_0xee74('0x4a')]!==_0xee74('0x4b')){var _0x4a0e63={};_0x4a0e63[_0x547f7e[_0xee74('0x4c')]]={'$like':'%'+_0x4a03c6[_0xee74('0x3b')]['filter']+'%'};return _0x4a0e63;}})});}_0x21f000=_[_0xee74('0x47')]({},_0x21f000,_0x4a03c6[_0xee74('0x4d')]);var _0x559a68={'where':_0x21f000[_0xee74('0x45')]};return db[_0xee74('0x37')][_0xee74('0x2c')](_0x559a68)[_0xee74('0x4e')](function(_0x56296b){_0x4fdc5d[_0xee74('0x2c')]=_0x56296b;if(_0x4a03c6[_0xee74('0x3b')]['includeAll']){_0x21f000[_0xee74('0x4f')]=[{'all':!![]}];}return db['ServicenowAccount']['findAll'](_0x21f000);})[_0xee74('0x4e')](function(_0x5bc14f){_0x4fdc5d[_0xee74('0x50')]=_0x5bc14f;return _0x4fdc5d;})[_0xee74('0x4e')](respondWithFilteredResult(_0x7e86f9,_0x21f000))[_0xee74('0x26')](handleError(_0x7e86f9,null));};exports[_0xee74('0x51')]=function(_0x3c713d,_0x100a4f){var _0x38934d={'raw':![],'where':{'id':_0x3c713d['params']['id']}},_0x4ea5d6={};_0x4ea5d6[_0xee74('0x39')]=_[_0xee74('0x3a')](db['ServicenowAccount'][_0xee74('0x38')]);_0x4ea5d6[_0xee74('0x3b')]=_['keys'](_0x3c713d[_0xee74('0x3b')]);_0x4ea5d6[_0xee74('0x3c')]=_[_0xee74('0x3d')](_0x4ea5d6[_0xee74('0x39')],_0x4ea5d6[_0xee74('0x3b')]);_0x38934d[_0xee74('0x3e')]=_[_0xee74('0x3d')](_0x4ea5d6['model'],qs[_0xee74('0x3f')](_0x3c713d[_0xee74('0x3b')][_0xee74('0x3f')]));_0x38934d['attributes']=_0x38934d['attributes'][_0xee74('0x52')]?_0x38934d[_0xee74('0x3e')]:_0x4ea5d6[_0xee74('0x39')];if(_0x3c713d[_0xee74('0x3b')][_0xee74('0x53')]){_0x38934d[_0xee74('0x4f')]=[{'all':!![]}];}_0x38934d=_[_0xee74('0x47')]({},_0x38934d,_0x3c713d['options']);return db[_0xee74('0x37')][_0xee74('0x54')](_0x38934d)[_0xee74('0x4e')](handleEntityNotFound(_0x100a4f,null))[_0xee74('0x4e')](respondWithResult(_0x100a4f,null))[_0xee74('0x26')](handleError(_0x100a4f,null));};exports[_0xee74('0x55')]=function(_0xb50829,_0x5461d1){return db[_0xee74('0x37')][_0xee74('0x55')](_0xb50829[_0xee74('0x56')],{})[_0xee74('0x4e')](respondWithResult(_0x5461d1,0xc9))[_0xee74('0x26')](handleError(_0x5461d1,null));};exports[_0xee74('0x33')]=function(_0x28e326,_0xa4a705){if(_0x28e326['body']['id']){delete _0x28e326[_0xee74('0x56')]['id'];}return db[_0xee74('0x37')][_0xee74('0x54')]({'where':{'id':_0x28e326['params']['id']}})[_0xee74('0x4e')](handleEntityNotFound(_0xa4a705,null))[_0xee74('0x4e')](saveUpdates(_0x28e326['body'],null))[_0xee74('0x4e')](respondWithResult(_0xa4a705,null))[_0xee74('0x26')](handleError(_0xa4a705,null));};exports['destroy']=function(_0x4ff77c,_0x1c44bc){return db['ServicenowAccount'][_0xee74('0x54')]({'where':{'id':_0x4ff77c['params']['id']}})['then'](handleEntityNotFound(_0x1c44bc,null))[_0xee74('0x4e')](removeEntity(_0x1c44bc,null))['catch'](handleError(_0x1c44bc,null));};exports[_0xee74('0x57')]=function(_0x787a0e,_0x5aa70a,_0x530847){var _0x2bad71={};var _0x185f99={};var _0x537968;var _0x5ebf1f;return db[_0xee74('0x37')][_0xee74('0x58')]({'where':{'id':_0x787a0e[_0xee74('0x59')]['id']}})[_0xee74('0x4e')](handleEntityNotFound(_0x5aa70a,null))[_0xee74('0x4e')](function(_0x4583c6){if(_0x4583c6){_0x537968=_0x4583c6;_0x185f99['model']=_[_0xee74('0x3a')](db[_0xee74('0x5a')][_0xee74('0x38')]);_0x185f99['query']=_[_0xee74('0x3a')](_0x787a0e[_0xee74('0x3b')]);_0x185f99[_0xee74('0x3c')]=_[_0xee74('0x3d')](_0x185f99['model'],_0x185f99[_0xee74('0x3b')]);_0x2bad71[_0xee74('0x3e')]=_[_0xee74('0x3d')](_0x185f99[_0xee74('0x39')],qs[_0xee74('0x3f')](_0x787a0e[_0xee74('0x3b')]['fields']));_0x2bad71['attributes']=_0x2bad71['attributes'][_0xee74('0x52')]?_0x2bad71[_0xee74('0x3e')]:_0x185f99['model'];_0x2bad71[_0xee74('0x43')]=qs['sort'](_0x787a0e[_0xee74('0x3b')][_0xee74('0x44')]);_0x2bad71[_0xee74('0x45')]=qs[_0xee74('0x3c')](_[_0xee74('0x5b')](_0x787a0e['query'],_0x185f99[_0xee74('0x3c')]));if(_0x787a0e[_0xee74('0x3b')][_0xee74('0x46')]){_0x2bad71[_0xee74('0x45')]=_[_0xee74('0x47')](_0x2bad71['where'],{'$or':_[_0xee74('0x48')](_0x2bad71[_0xee74('0x3e')],function(_0x1e7c63){var _0x28e663={};_0x28e663[_0x1e7c63]={'$like':'%'+_0x787a0e[_0xee74('0x3b')][_0xee74('0x46')]+'%'};return _0x28e663;})});}_0x2bad71=_[_0xee74('0x47')]({},_0x2bad71,_0x787a0e['options']);return _0x537968['getConfigurations'](_0x2bad71);}})[_0xee74('0x4e')](function(_0xe005db){if(_0xe005db){_0x5ebf1f=_0xe005db[_0xee74('0x52')];if(!_0x787a0e[_0xee74('0x3b')]['hasOwnProperty'](_0xee74('0x41'))){_0x2bad71[_0xee74('0x42')]=qs['limit'](_0x787a0e[_0xee74('0x3b')][_0xee74('0x42')]);_0x2bad71[_0xee74('0x2d')]=qs[_0xee74('0x2d')](_0x787a0e['query'][_0xee74('0x2d')]);}return _0x537968[_0xee74('0x57')](_0x2bad71);}})[_0xee74('0x4e')](function(_0x3f75f4){if(_0x3f75f4){return _0x3f75f4?{'count':_0x5ebf1f,'rows':_0x3f75f4}:null;}})['then'](respondWithResult(_0x5aa70a,null))[_0xee74('0x26')](handleError(_0x5aa70a,null));};exports[_0xee74('0x5c')]=function(_0x4eccbe,_0x19b826,_0x3f4d79){if(_0x4eccbe[_0xee74('0x56')]['id']){delete _0x4eccbe[_0xee74('0x56')]['id'];}return db['ServicenowAccount'][_0xee74('0x58')]({'where':{'id':_0x4eccbe[_0xee74('0x59')]['id']}})[_0xee74('0x4e')](handleEntityNotFound(_0x19b826,null))['then'](function(_0x42fb9a){if(_0x42fb9a){_0x4eccbe[_0xee74('0x56')][_0xee74('0x5d')]=_0x42fb9a['id'];_0x4eccbe[_0xee74('0x56')][_0xee74('0x5e')]=integrations['getSubjects'](_0x4eccbe[_0xee74('0x56')][_0xee74('0x5f')],_0x4eccbe[_0xee74('0x56')]['type']);_0x4eccbe[_0xee74('0x56')][_0xee74('0x60')]=integrations[_0xee74('0x61')](_0x4eccbe[_0xee74('0x56')][_0xee74('0x5f')],_0x4eccbe[_0xee74('0x56')]['type']);return db[_0xee74('0x5a')][_0xee74('0x55')](_0x4eccbe[_0xee74('0x56')],{'include':[{'model':db[_0xee74('0x62')],'as':_0xee74('0x5e')},{'model':db['ServicenowField'],'as':_0xee74('0x60')}]});}return null;})[_0xee74('0x4e')](respondWithResult(_0x19b826,null))[_0xee74('0x26')](handleError(_0x19b826,null));};exports[_0xee74('0x63')]=function(_0x42347d,_0x3d456f,_0x364da4){var _0x550afc=[_0xee74('0x64'),_0xee74('0x65'),_0xee74('0x66'),_0xee74('0x67'),_0xee74('0x68'),'notify','incident_state','severity','category'];var _0x18436d=['parent',_0xee74('0x64'),'caused_by',_0xee74('0x69'),'upon_reject',_0xee74('0x6a'),_0xee74('0x6b'),'hold_reason','approval_history',_0xee74('0x6c'),_0xee74('0x6d'),_0xee74('0x6e'),_0xee74('0x6f'),_0xee74('0x70'),_0xee74('0x71'),'sys_domain',_0xee74('0x72'),_0xee74('0x73'),_0xee74('0x66'),_0xee74('0x43'),'calendar_stc',_0xee74('0x74'),_0xee74('0x75'),_0xee74('0x76'),_0xee74('0x77'),_0xee74('0x78'),_0xee74('0x79'),_0xee74('0x7a'),_0xee74('0x7b'),_0xee74('0x7c'),_0xee74('0x7d'),_0xee74('0x7e'),'expected_start',_0xee74('0x7f'),_0xee74('0x80'),'group_list',_0xee74('0x81'),_0xee74('0x82'),_0xee74('0x83'),_0xee74('0x84'),_0xee74('0x85'),_0xee74('0x67'),'work_notes',_0xee74('0x86'),'close_code',_0xee74('0x87'),_0xee74('0x88'),_0xee74('0x89'),'assignment_group',_0xee74('0x8a'),_0xee74('0x8b'),_0xee74('0x8c'),_0xee74('0x8d'),_0xee74('0x8e'),_0xee74('0x8f'),_0xee74('0x90'),_0xee74('0x91'),_0xee74('0x92'),_0xee74('0x93'),_0xee74('0x94'),_0xee74('0x95'),_0xee74('0x96'),'incident_state',_0xee74('0x97'),_0xee74('0x98'),_0xee74('0x99'),'reassignment_count',_0xee74('0x9a'),_0xee74('0x9b'),_0xee74('0x9c'),_0xee74('0x9d'),'sla_due',_0xee74('0x9e'),_0xee74('0x9f'),_0xee74('0xa0'),'sys_mod_count',_0xee74('0xa1'),'sys_tags',_0xee74('0xa2'),_0xee74('0xa3'),_0xee74('0xa4'),_0xee74('0xa5'),_0xee74('0xa6')];var _0x3b6825='';var _0x31ab93='';var _0x361b47=[];var _0x45c563='';var _0x21a2d9='';var _0x1dc3f1=[];var _0x4a67a3='';var _0x4d9fe3='';var _0x595155={};var _0x439d32='';return db[_0xee74('0x37')]['findOne']({'where':{'id':_0x42347d[_0xee74('0x59')]['id']},'attributes':['id','username',_0xee74('0xa7'),_0xee74('0xa8'),_0xee74('0xa9'),_0xee74('0xaa')]})[_0xee74('0x4e')](handleEntityNotFound(_0x3d456f,null))[_0xee74('0x4e')](function(_0x5daa8c){if(_0x5daa8c){_0x439d32=_0x5daa8c[_0xee74('0xa9')];var _0x4470bb=_0x439d32[_0xee74('0xab')](-0x1);if(_0x4470bb==='/'){_0x439d32=_0x439d32[_0xee74('0xac')](0x0,_0x439d32[_0xee74('0xad')](_0x4470bb));}_0x4d9fe3=util[_0xee74('0xae')]('%s/api/now/doc/table/schema/',_0x439d32);_0x4a67a3=util[_0xee74('0xae')]('%s/api/now/table/',_0x439d32);_0x595155={'user':_0x5daa8c[_0xee74('0xaf')],'pass':_0x5daa8c['password']};var _0xf572d0={'method':_0xee74('0xb0'),'uri':_0x4d9fe3+'incident?sysparm_display_value=all','auth':_0x595155,'json':!![]};return rp(_0xf572d0);}})['then'](function(_0x1d1498){if(_0x1d1498[_0xee74('0x25')][_0xee74('0x52')]>0x0){_0x3b6825=_0x1d1498[_0xee74('0x25')];}console['log']('incident\x20table\x20objects',_0x3b6825);_0x1dc3f1=[];_0x31ab93=Object[_0xee74('0xb1')]([],_0x3b6825);_[_0xee74('0xb2')](_0x31ab93,function(_0x4b8b3a){return!_0x550afc[_0xee74('0xb3')](_0x4b8b3a[_0xee74('0x35')]);});_0x31ab93[_0xee74('0xb4')](function(_0x2a76dd){var _0x478cec=createFieldObject(_0x4a67a3,_0x595155,_0x2a76dd[_0xee74('0xb5')],_0x2a76dd[_0xee74('0x35')],_0x2a76dd[_0xee74('0xb6')],![]);_0x1dc3f1[_0xee74('0xb7')](_0x478cec);});return Promise[_0xee74('0xb8')](_0x1dc3f1);})[_0xee74('0x4e')](function(_0x5d6d81){_0x361b47=_0x5d6d81;_0x45c563=Object[_0xee74('0xb1')]([],_0x3b6825);console[_0xee74('0xb9')](_0xee74('0xba'),_0x3b6825);_[_0xee74('0xb2')](_0x45c563,function(_0x187c2a){return _0x18436d[_0xee74('0xb3')](_0x187c2a[_0xee74('0x35')]);});console[_0xee74('0xb9')]('TCL:\x20exports.getEntityFields\x20->\x20_objectsCustom',_0x45c563);_0x1dc3f1=[];_0x45c563[_0xee74('0xb4')](function(_0x19cc48){var _0x211a71=createFieldObject(_0x4a67a3,_0x595155,_0x19cc48[_0xee74('0xb5')],_0x19cc48[_0xee74('0x35')],_0x19cc48[_0xee74('0xb6')],!![]);_0x1dc3f1[_0xee74('0xb7')](_0x211a71);});return Promise[_0xee74('0xb8')](_0x1dc3f1);})[_0xee74('0x4e')](function(_0x5dec14){_0x21a2d9=_0x5dec14;var _0x13247a=_0x361b47[_0xee74('0xbb')](_0x21a2d9);return{'count':_0x13247a[_0xee74('0x52')],'rows':_0x13247a};})['then'](respondWithResult(_0x3d456f,null))[_0xee74('0x26')](function(_0x25d8c7){console['log'](_0xee74('0xbc')+_0x25d8c7);var _0x2bbbf2=_0x42347d[_0xee74('0x3b')]['test']?0x1f4:_0x25d8c7[_0xee74('0xbd')]||0x1f4;logger[_0xee74('0x22')](_0x25d8c7['stack']);delete _0x25d8c7[_0xee74('0x35')];if(_0x2bbbf2===0x191){_0x2bbbf2=0x190;}_0x3d456f[_0xee74('0x29')](_0x2bbbf2)[_0xee74('0x36')](_0x42347d[_0xee74('0x3b')]['test']?{'message':'Wrong\x20credentials','statusCode':_0x25d8c7[_0xee74('0xbd')]}:_0x25d8c7);});};function createFieldObject(_0x34fa45,_0x1fbcae,_0xbecab0,_0x5cfe2e,_0x214f67,_0x2008d2){return new Promise(function(_0x5a6165,_0x537127){var _0x4b706d={'id':_0x5cfe2e,'name':_0x214f67,'custom':_0x2008d2};if(_0xbecab0===_0xee74('0xbe')){_0x4b706d[_0xee74('0x4d')]=[{'name':_0xee74('0xbf'),'value':_0xee74('0xc0')},{'name':'False','value':'false'}];_0x5a6165(_0x4b706d);}else{var _0x27cc3c={'method':'GET','uri':_0x34fa45+_0xee74('0xc1')+_0x5cfe2e,'auth':_0x1fbcae,'json':!![]};return rp(_0x27cc3c)[_0xee74('0x4e')](function(_0x1f0daf){var _0x4f1093=[];if(_0x1f0daf[_0xee74('0x25')][_0xee74('0x52')]>0x0){_0x1f0daf['result'][_0xee74('0xb4')](function(_0x1c9285){if(_0x1c9285['inactive']===_0xee74('0xc2')){var _0x2de276={'name':_0x1c9285['label'],'value':_0x1c9285[_0xee74('0xc3')]};_0x4f1093[_0xee74('0xb7')](_0x2de276);}});}_0x4b706d[_0xee74('0x4d')]=_0x4f1093;if(_0x4b706d[_0xee74('0x4d')][_0xee74('0x52')]>0x0){_0x5a6165(_0x4b706d);}else{if(_0x2008d2==![]){_0x5a6165();}else{_0x5a6165(_0x4b706d);}}});}});}
\ No newline at end of file
index a79d248..dd3d4de 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x814b=['../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','./intServicenowAccount.attributes','../../components/integrations/configuration','exports','define','int_servicenow_accounts','lodash','util'];(function(_0xfa487c,_0x2a255a){var _0x5b4b7c=function(_0x5cbfa4){while(--_0x5cbfa4){_0xfa487c['push'](_0xfa487c['shift']());}};_0x5b4b7c(++_0x2a255a);}(_0x814b,0x1a2));var _0xb814=function(_0x48df04,_0x1522b1){_0x48df04=_0x48df04-0x0;var _0x4de5fa=_0x814b[_0x48df04];return _0x4de5fa;};'use strict';var _=require(_0xb814('0x0'));var util=require(_0xb814('0x1'));var logger=require(_0xb814('0x2'))(_0xb814('0x3'));var moment=require(_0xb814('0x4'));var BPromise=require(_0xb814('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xb814('0x6'));var rimraf=require(_0xb814('0x7'));var config=require(_0xb814('0x8'));var attributes=require(_0xb814('0x9'));var integrations=require(_0xb814('0xa'));module[_0xb814('0xb')]=function(_0x53e507,_0x3b0829){return _0x53e507[_0xb814('0xc')]('ServicenowAccount',attributes,{'tableName':_0xb814('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x814b=['../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','./intServicenowAccount.attributes','../../components/integrations/configuration','exports','define','int_servicenow_accounts','lodash','util'];(function(_0x316329,_0x339c6e){var _0xfc77f=function(_0xb94334){while(--_0xb94334){_0x316329['push'](_0x316329['shift']());}};_0xfc77f(++_0x339c6e);}(_0x814b,0x1a2));var _0xb814=function(_0x32e758,_0x13c271){_0x32e758=_0x32e758-0x0;var _0x349316=_0x814b[_0x32e758];return _0x349316;};'use strict';var _=require(_0xb814('0x0'));var util=require(_0xb814('0x1'));var logger=require(_0xb814('0x2'))(_0xb814('0x3'));var moment=require(_0xb814('0x4'));var BPromise=require(_0xb814('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xb814('0x6'));var rimraf=require(_0xb814('0x7'));var config=require(_0xb814('0x8'));var attributes=require(_0xb814('0x9'));var integrations=require(_0xb814('0xa'));module[_0xb814('0xb')]=function(_0x53e507,_0x3b0829){return _0x53e507[_0xb814('0xc')]('ServicenowAccount',attributes,{'tableName':_0xb814('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a5519df..58b0558 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc3e3=['result','GetServicenowAccount','ServicenowAccount','options','raw','where','attributes','limit','include','model','map','stringify','ShowServicenowAccount','find','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/environment','jayson/promise','http','request','then','info','ServicenowAccount,\x20%s,\x20%s','request\x20sent','debug','ServicenowAccount,\x20%s,\x20%s,\x20%s','error','code','message'];(function(_0x4cbe6a,_0x593aae){var _0x5273fa=function(_0x2332c3){while(--_0x2332c3){_0x4cbe6a['push'](_0x4cbe6a['shift']());}};_0x5273fa(++_0x593aae);}(_0xc3e3,0xb8));var _0x3c3e=function(_0x56e2a8,_0x2cf877){_0x56e2a8=_0x56e2a8-0x0;var _0x232412=_0xc3e3[_0x56e2a8];return _0x232412;};'use strict';var _=require(_0x3c3e('0x0'));var util=require(_0x3c3e('0x1'));var moment=require(_0x3c3e('0x2'));var BPromise=require(_0x3c3e('0x3'));var rs=require(_0x3c3e('0x4'));var fs=require('fs');var Redis=require(_0x3c3e('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x3c3e('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0x3c3e('0x7'));var jayson=require(_0x3c3e('0x8'));var client=jayson['client'][_0x3c3e('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x203bda,_0x1528b8,_0x488f05){return new BPromise(function(_0x435245,_0xd0a2b9){return client[_0x3c3e('0xa')](_0x203bda,_0x488f05)[_0x3c3e('0xb')](function(_0xdf2bb4){logger[_0x3c3e('0xc')](_0x3c3e('0xd'),_0x1528b8,_0x3c3e('0xe'));logger[_0x3c3e('0xf')](_0x3c3e('0x10'),_0x1528b8,_0x3c3e('0xe'),JSON['stringify'](_0xdf2bb4));if(_0xdf2bb4['error']){if(_0xdf2bb4[_0x3c3e('0x11')][_0x3c3e('0x12')]===0x1f4){logger[_0x3c3e('0x11')](_0x3c3e('0xd'),_0x1528b8,_0xdf2bb4['error'][_0x3c3e('0x13')]);return _0xd0a2b9(_0xdf2bb4[_0x3c3e('0x11')][_0x3c3e('0x13')]);}logger[_0x3c3e('0x11')](_0x3c3e('0xd'),_0x1528b8,_0xdf2bb4[_0x3c3e('0x11')][_0x3c3e('0x13')]);return _0x435245(_0xdf2bb4['error'][_0x3c3e('0x13')]);}else{logger[_0x3c3e('0xc')](_0x3c3e('0xd'),_0x1528b8,'request\x20sent');_0x435245(_0xdf2bb4[_0x3c3e('0x14')][_0x3c3e('0x13')]);}})['catch'](function(_0x787c56){logger[_0x3c3e('0x11')]('ServicenowAccount,\x20%s,\x20%s',_0x1528b8,_0x787c56);_0xd0a2b9(_0x787c56);});});}exports[_0x3c3e('0x15')]=function(_0x54adff){var _0x1f0959=this;return new Promise(function(_0x303ed9,_0x28f2fa){return db[_0x3c3e('0x16')]['findAll']({'raw':_0x54adff[_0x3c3e('0x17')]?_0x54adff[_0x3c3e('0x17')][_0x3c3e('0x18')]===undefined?!![]:![]:!![],'where':_0x54adff[_0x3c3e('0x17')]?_0x54adff[_0x3c3e('0x17')][_0x3c3e('0x19')]||null:null,'attributes':_0x54adff[_0x3c3e('0x17')]?_0x54adff[_0x3c3e('0x17')][_0x3c3e('0x1a')]||null:null,'limit':_0x54adff[_0x3c3e('0x17')]?_0x54adff[_0x3c3e('0x17')][_0x3c3e('0x1b')]||null:null,'include':_0x54adff['options']?_0x54adff[_0x3c3e('0x17')][_0x3c3e('0x1c')]?_['map'](_0x54adff[_0x3c3e('0x17')][_0x3c3e('0x1c')],function(_0x47397d){return{'model':db[_0x47397d[_0x3c3e('0x1d')]],'as':_0x47397d['as'],'attributes':_0x47397d[_0x3c3e('0x1a')],'include':_0x47397d[_0x3c3e('0x1c')]?_['map'](_0x47397d[_0x3c3e('0x1c')],function(_0x3566b3){return{'model':db[_0x3566b3[_0x3c3e('0x1d')]],'as':_0x3566b3['as'],'attributes':_0x3566b3[_0x3c3e('0x1a')],'include':_0x3566b3[_0x3c3e('0x1c')]?_[_0x3c3e('0x1e')](_0x3566b3[_0x3c3e('0x1c')],function(_0x1a0a00){return{'model':db[_0x1a0a00['model']],'as':_0x1a0a00['as'],'attributes':_0x1a0a00[_0x3c3e('0x1a')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x5b3dab){logger[_0x3c3e('0xc')](_0x3c3e('0x15'),_0x54adff);logger[_0x3c3e('0xf')](_0x3c3e('0x15'),_0x54adff,JSON[_0x3c3e('0x1f')](_0x5b3dab));_0x303ed9(_0x5b3dab);})['catch'](function(_0xe50190){logger[_0x3c3e('0x11')](_0x3c3e('0x15'),_0xe50190[_0x3c3e('0x13')],_0x54adff);_0x28f2fa(_0x1f0959[_0x3c3e('0x11')](0x1f4,_0xe50190[_0x3c3e('0x13')]));});});};exports[_0x3c3e('0x20')]=function(_0x14f39c){var _0xc9337e=this;return new Promise(function(_0x420777,_0x44a207){return db['ServicenowAccount'][_0x3c3e('0x21')]({'raw':_0x14f39c[_0x3c3e('0x17')]?_0x14f39c[_0x3c3e('0x17')][_0x3c3e('0x18')]===undefined?!![]:![]:!![],'where':_0x14f39c[_0x3c3e('0x17')]?_0x14f39c['options']['where']||null:null,'attributes':_0x14f39c['options']?_0x14f39c['options'][_0x3c3e('0x1a')]||null:null,'include':_0x14f39c[_0x3c3e('0x17')]?_0x14f39c[_0x3c3e('0x17')][_0x3c3e('0x1c')]?_[_0x3c3e('0x1e')](_0x14f39c[_0x3c3e('0x17')][_0x3c3e('0x1c')],function(_0x2be7a0){return{'model':db[_0x2be7a0['model']],'as':_0x2be7a0['as'],'attributes':_0x2be7a0[_0x3c3e('0x1a')],'include':_0x2be7a0[_0x3c3e('0x1c')]?_[_0x3c3e('0x1e')](_0x2be7a0['include'],function(_0x527d3e){return{'model':db[_0x527d3e[_0x3c3e('0x1d')]],'as':_0x527d3e['as'],'attributes':_0x527d3e['attributes'],'include':_0x527d3e['include']?_['map'](_0x527d3e['include'],function(_0x590ccc){return{'model':db[_0x590ccc[_0x3c3e('0x1d')]],'as':_0x590ccc['as'],'attributes':_0x590ccc[_0x3c3e('0x1a')]};}):[]};}):[]};}):[]:[]})[_0x3c3e('0xb')](function(_0x13ab74){logger['info'](_0x3c3e('0x20'),_0x14f39c);logger[_0x3c3e('0xf')](_0x3c3e('0x20'),_0x14f39c,JSON[_0x3c3e('0x1f')](_0x13ab74));_0x420777(_0x13ab74);})['catch'](function(_0x4bfe9e){logger[_0x3c3e('0x11')](_0x3c3e('0x20'),_0x4bfe9e[_0x3c3e('0x13')],_0x14f39c);_0x44a207(_0xc9337e[_0x3c3e('0x11')](0x1f4,_0x4bfe9e[_0x3c3e('0x13')]));});});};
\ No newline at end of file
+var _0x2fc7=['limit','include','map','model','attributes','ShowServicenowAccount','find','where','lodash','moment','randomstring','../../config/logger','jayson/promise','http','request','then','request\x20sent','debug','ServicenowAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','ServicenowAccount,\x20%s,\x20%s','message','info','result','catch','GetServicenowAccount','ServicenowAccount','findAll','options','raw'];(function(_0x12e409,_0x379bb4){var _0xacb87b=function(_0x53ad8c){while(--_0x53ad8c){_0x12e409['push'](_0x12e409['shift']());}};_0xacb87b(++_0x379bb4);}(_0x2fc7,0x108));var _0x72fc=function(_0x17710e,_0x5dcbc3){_0x17710e=_0x17710e-0x0;var _0x4cb606=_0x2fc7[_0x17710e];return _0x4cb606;};'use strict';var _=require(_0x72fc('0x0'));var util=require('util');var moment=require(_0x72fc('0x1'));var BPromise=require('bluebird');var rs=require(_0x72fc('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x72fc('0x3'))('rpc');var config=require('../../config/environment');var jayson=require(_0x72fc('0x4'));var client=jayson['client'][_0x72fc('0x5')]({'port':0x232a});function respondWithRpcPromise(_0x5b1e13,_0x43eb30,_0x105f49){return new BPromise(function(_0x4b6780,_0x19b7ad){return client[_0x72fc('0x6')](_0x5b1e13,_0x105f49)[_0x72fc('0x7')](function(_0x1c0cf8){logger['info']('ServicenowAccount,\x20%s,\x20%s',_0x43eb30,_0x72fc('0x8'));logger[_0x72fc('0x9')](_0x72fc('0xa'),_0x43eb30,'request\x20sent',JSON[_0x72fc('0xb')](_0x1c0cf8));if(_0x1c0cf8['error']){if(_0x1c0cf8[_0x72fc('0xc')][_0x72fc('0xd')]===0x1f4){logger['error'](_0x72fc('0xe'),_0x43eb30,_0x1c0cf8[_0x72fc('0xc')]['message']);return _0x19b7ad(_0x1c0cf8['error'][_0x72fc('0xf')]);}logger[_0x72fc('0xc')]('ServicenowAccount,\x20%s,\x20%s',_0x43eb30,_0x1c0cf8[_0x72fc('0xc')][_0x72fc('0xf')]);return _0x4b6780(_0x1c0cf8[_0x72fc('0xc')][_0x72fc('0xf')]);}else{logger[_0x72fc('0x10')](_0x72fc('0xe'),_0x43eb30,'request\x20sent');_0x4b6780(_0x1c0cf8[_0x72fc('0x11')]['message']);}})[_0x72fc('0x12')](function(_0x5953cb){logger[_0x72fc('0xc')]('ServicenowAccount,\x20%s,\x20%s',_0x43eb30,_0x5953cb);_0x19b7ad(_0x5953cb);});});}exports[_0x72fc('0x13')]=function(_0x378c51){var _0x94b10f=this;return new Promise(function(_0x427f4b,_0x207c7e){return db[_0x72fc('0x14')][_0x72fc('0x15')]({'raw':_0x378c51['options']?_0x378c51[_0x72fc('0x16')][_0x72fc('0x17')]===undefined?!![]:![]:!![],'where':_0x378c51['options']?_0x378c51[_0x72fc('0x16')]['where']||null:null,'attributes':_0x378c51[_0x72fc('0x16')]?_0x378c51[_0x72fc('0x16')]['attributes']||null:null,'limit':_0x378c51[_0x72fc('0x16')]?_0x378c51[_0x72fc('0x16')][_0x72fc('0x18')]||null:null,'include':_0x378c51['options']?_0x378c51['options'][_0x72fc('0x19')]?_[_0x72fc('0x1a')](_0x378c51['options'][_0x72fc('0x19')],function(_0x4258e7){return{'model':db[_0x4258e7[_0x72fc('0x1b')]],'as':_0x4258e7['as'],'attributes':_0x4258e7[_0x72fc('0x1c')],'include':_0x4258e7[_0x72fc('0x19')]?_[_0x72fc('0x1a')](_0x4258e7[_0x72fc('0x19')],function(_0x4172e1){return{'model':db[_0x4172e1[_0x72fc('0x1b')]],'as':_0x4172e1['as'],'attributes':_0x4172e1['attributes'],'include':_0x4172e1[_0x72fc('0x19')]?_[_0x72fc('0x1a')](_0x4172e1[_0x72fc('0x19')],function(_0x510093){return{'model':db[_0x510093[_0x72fc('0x1b')]],'as':_0x510093['as'],'attributes':_0x510093['attributes']};}):[]};}):[]};}):[]:[]})[_0x72fc('0x7')](function(_0x2d3c38){logger[_0x72fc('0x10')](_0x72fc('0x13'),_0x378c51);logger['debug'](_0x72fc('0x13'),_0x378c51,JSON['stringify'](_0x2d3c38));_0x427f4b(_0x2d3c38);})[_0x72fc('0x12')](function(_0x2c2c4b){logger[_0x72fc('0xc')](_0x72fc('0x13'),_0x2c2c4b[_0x72fc('0xf')],_0x378c51);_0x207c7e(_0x94b10f[_0x72fc('0xc')](0x1f4,_0x2c2c4b[_0x72fc('0xf')]));});});};exports[_0x72fc('0x1d')]=function(_0x24243d){var _0x24069a=this;return new Promise(function(_0xf2aac7,_0x1b4611){return db['ServicenowAccount'][_0x72fc('0x1e')]({'raw':_0x24243d[_0x72fc('0x16')]?_0x24243d[_0x72fc('0x16')]['raw']===undefined?!![]:![]:!![],'where':_0x24243d[_0x72fc('0x16')]?_0x24243d[_0x72fc('0x16')][_0x72fc('0x1f')]||null:null,'attributes':_0x24243d[_0x72fc('0x16')]?_0x24243d[_0x72fc('0x16')][_0x72fc('0x1c')]||null:null,'include':_0x24243d[_0x72fc('0x16')]?_0x24243d[_0x72fc('0x16')][_0x72fc('0x19')]?_['map'](_0x24243d[_0x72fc('0x16')]['include'],function(_0x3fdc20){return{'model':db[_0x3fdc20[_0x72fc('0x1b')]],'as':_0x3fdc20['as'],'attributes':_0x3fdc20[_0x72fc('0x1c')],'include':_0x3fdc20[_0x72fc('0x19')]?_[_0x72fc('0x1a')](_0x3fdc20[_0x72fc('0x19')],function(_0x3ac969){return{'model':db[_0x3ac969[_0x72fc('0x1b')]],'as':_0x3ac969['as'],'attributes':_0x3ac969[_0x72fc('0x1c')],'include':_0x3ac969[_0x72fc('0x19')]?_[_0x72fc('0x1a')](_0x3ac969[_0x72fc('0x19')],function(_0x31fa3f){return{'model':db[_0x31fa3f[_0x72fc('0x1b')]],'as':_0x31fa3f['as'],'attributes':_0x31fa3f[_0x72fc('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x72fc('0x7')](function(_0x3114a5){logger[_0x72fc('0x10')](_0x72fc('0x1d'),_0x24243d);logger[_0x72fc('0x9')](_0x72fc('0x1d'),_0x24243d,JSON['stringify'](_0x3114a5));_0xf2aac7(_0x3114a5);})[_0x72fc('0x12')](function(_0x5711f7){logger[_0x72fc('0xc')](_0x72fc('0x1d'),_0x5711f7[_0x72fc('0xf')],_0x24243d);_0x1b4611(_0x24069a[_0x72fc('0xc')](0x1f4,_0x5711f7[_0x72fc('0xf')]));});});};
\ No newline at end of file
index 927082f..5bca3f6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaf21=['get','isAuthenticated','index','/:id','/:id/fields','getSubjects','getDescriptions','post','put','update','delete','destroy','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','./intServicenowConfiguration.controller'];(function(_0x669e58,_0x68ffdf){var _0x3f0834=function(_0x4d38cd){while(--_0x4d38cd){_0x669e58['push'](_0x669e58['shift']());}};_0x3f0834(++_0x68ffdf);}(_0xaf21,0x14c));var _0x1af2=function(_0x4458cf,_0x14038d){_0x4458cf=_0x4458cf-0x0;var _0x48dc16=_0xaf21[_0x4458cf];return _0x48dc16;};'use strict';var multer=require(_0x1af2('0x0'));var util=require(_0x1af2('0x1'));var path=require(_0x1af2('0x2'));var timeout=require(_0x1af2('0x3'));var express=require(_0x1af2('0x4'));var router=express['Router']();var auth=require(_0x1af2('0x5'));var interaction=require(_0x1af2('0x6'));var config=require('../../config/environment');var controller=require(_0x1af2('0x7'));router[_0x1af2('0x8')]('/',auth[_0x1af2('0x9')](),controller[_0x1af2('0xa')]);router[_0x1af2('0x8')](_0x1af2('0xb'),auth[_0x1af2('0x9')](),controller['show']);router[_0x1af2('0x8')](_0x1af2('0xc'),auth[_0x1af2('0x9')](),controller['getFields']);router['get']('/:id/subjects',auth[_0x1af2('0x9')](),controller[_0x1af2('0xd')]);router['get']('/:id/descriptions',auth[_0x1af2('0x9')](),controller[_0x1af2('0xe')]);router[_0x1af2('0xf')]('/',auth[_0x1af2('0x9')](),controller['create']);router[_0x1af2('0x10')](_0x1af2('0xb'),auth['isAuthenticated'](),controller[_0x1af2('0x11')]);router[_0x1af2('0x12')](_0x1af2('0xb'),auth['isAuthenticated'](),controller[_0x1af2('0x13')]);module['exports']=router;
\ No newline at end of file
+var _0xb54a=['post','create','put','update','delete','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../config/environment','./intServicenowConfiguration.controller','get','isAuthenticated','index','/:id','show','getFields','/:id/subjects','getSubjects'];(function(_0x5a3cf0,_0x160a68){var _0x5a64ee=function(_0x34cd1d){while(--_0x34cd1d){_0x5a3cf0['push'](_0x5a3cf0['shift']());}};_0x5a64ee(++_0x160a68);}(_0xb54a,0xe2));var _0xab54=function(_0x279ba5,_0x53770d){_0x279ba5=_0x279ba5-0x0;var _0x4c3a9d=_0xb54a[_0x279ba5];return _0x4c3a9d;};'use strict';var multer=require(_0xab54('0x0'));var util=require(_0xab54('0x1'));var path=require(_0xab54('0x2'));var timeout=require(_0xab54('0x3'));var express=require(_0xab54('0x4'));var router=express['Router']();var auth=require(_0xab54('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xab54('0x6'));var controller=require(_0xab54('0x7'));router[_0xab54('0x8')]('/',auth[_0xab54('0x9')](),controller[_0xab54('0xa')]);router['get'](_0xab54('0xb'),auth[_0xab54('0x9')](),controller[_0xab54('0xc')]);router[_0xab54('0x8')]('/:id/fields',auth[_0xab54('0x9')](),controller[_0xab54('0xd')]);router[_0xab54('0x8')](_0xab54('0xe'),auth[_0xab54('0x9')](),controller[_0xab54('0xf')]);router[_0xab54('0x8')]('/:id/descriptions',auth['isAuthenticated'](),controller['getDescriptions']);router[_0xab54('0x10')]('/',auth[_0xab54('0x9')](),controller[_0xab54('0x11')]);router[_0xab54('0x12')](_0xab54('0xb'),auth[_0xab54('0x9')](),controller[_0xab54('0x13')]);router[_0xab54('0x14')](_0xab54('0xb'),auth['isAuthenticated'](),controller['destroy']);module[_0xab54('0x15')]=router;
\ No newline at end of file
index 7ae4ac1..828c252 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3fa4=['STRING','sequelize'];(function(_0x565fa0,_0x1d94b2){var _0x24a151=function(_0x15b67b){while(--_0x15b67b){_0x565fa0['push'](_0x565fa0['shift']());}};_0x24a151(++_0x1d94b2);}(_0x3fa4,0x1ab));var _0x43fa=function(_0x19073f,_0xa2fbc4){_0x19073f=_0x19073f-0x0;var _0x3c988b=_0x3fa4[_0x19073f];return _0x3c988b;};'use strict';var Sequelize=require(_0x43fa('0x0'));module['exports']={'name':{'type':Sequelize[_0x43fa('0x1')]},'description':{'type':Sequelize[_0x43fa('0x1')]}};
\ No newline at end of file
+var _0xd40c=['sequelize','exports','STRING'];(function(_0x5b4938,_0x4a904c){var _0x1db7ea=function(_0x145f5b){while(--_0x145f5b){_0x5b4938['push'](_0x5b4938['shift']());}};_0x1db7ea(++_0x4a904c);}(_0xd40c,0x165));var _0xcd40=function(_0x1f63a7,_0x55f853){_0x1f63a7=_0x1f63a7-0x0;var _0xaa2a9=_0xd40c[_0x1f63a7];return _0xaa2a9;};'use strict';var Sequelize=require(_0xcd40('0x0'));module[_0xcd40('0x1')]={'name':{'type':Sequelize[_0xcd40('0x2')]},'description':{'type':Sequelize[_0xcd40('0x2')]}};
\ No newline at end of file
index 8ef5794..05198c0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8bd1=['destroy','stack','name','send','index','ServicenowConfiguration','rawAttributes','model','keys','intersection','query','attributes','fields','length','nolimit','order','where','filters','pick','filter','merge','map','type','key','VIRTUAL','field','options','include','findAll','rows','catch','show','params','includeAll','find','create','body','getFields','findOne','ServicenowField','sort','hasOwnProperty','getSubjects','getDescriptions','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','util','path','sox','to-csv','squel','crypto','jsforce','querystring','papaparse','../../config/logger','api','../../config/utils','jayson/promise','client','http','test','request','then','info','request\x20sent','debug','stringify','error','code','ServicenowConfiguration,\x20%s,\x20%s','message','result','sendStatus','status','end','count','offset','limit','Content-Range','apply','save'];(function(_0xb6c477,_0x16652d){var _0xaf147a=function(_0x27c532){while(--_0x27c532){_0xb6c477['push'](_0xb6c477['shift']());}};_0xaf147a(++_0x16652d);}(_0x8bd1,0x1da));var _0x18bd=function(_0xd4f7ad,_0x5f0d98){_0xd4f7ad=_0xd4f7ad-0x0;var _0x143683=_0x8bd1[_0xd4f7ad];return _0x143683;};'use strict';var pdf=require(_0x18bd('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x18bd('0x1'));var zipdir=require(_0x18bd('0x2'));var jsonpatch=require(_0x18bd('0x3'));var rp=require(_0x18bd('0x4'));var moment=require('moment');var BPromise=require(_0x18bd('0x5'));var Mustache=require('mustache');var util=require(_0x18bd('0x6'));var path=require(_0x18bd('0x7'));var sox=require(_0x18bd('0x8'));var csv=require(_0x18bd('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x18bd('0xa'));var crypto=require(_0x18bd('0xb'));var jsforce=require(_0x18bd('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x18bd('0x9'));var querystring=require(_0x18bd('0xd'));var Papa=require(_0x18bd('0xe'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0x18bd('0xf'))(_0x18bd('0x10'));var utils=require(_0x18bd('0x11'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var jayson=require(_0x18bd('0x12'));var client=jayson[_0x18bd('0x13')][_0x18bd('0x14')]({'port':0x232a});function checkPasswordPattern(_0x995b11,_0x44e521,_0x42b8ac){if(_0x42b8ac){var _0x4573f2=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x4573f2[_0x18bd('0x15')](_0x44e521)){return _0x995b11;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x995b11;}}function respondWithRpcPromise(_0x2efa49,_0x381b30,_0x4f640a,_0x926ad5){return new BPromise(function(_0xdf9207,_0x2e5799){var _0x14c13f=_0x926ad5||client;return _0x14c13f[_0x18bd('0x16')](_0x2efa49,_0x4f640a)[_0x18bd('0x17')](function(_0x29dc29){logger[_0x18bd('0x18')]('ServicenowConfiguration,\x20%s,\x20%s',_0x381b30,_0x18bd('0x19'));logger[_0x18bd('0x1a')]('ServicenowConfiguration,\x20%s,\x20%s,\x20%s',_0x381b30,_0x18bd('0x19'),JSON[_0x18bd('0x1b')](_0x29dc29));if(_0x29dc29[_0x18bd('0x1c')]){if(_0x29dc29[_0x18bd('0x1c')][_0x18bd('0x1d')]===0x1f4){logger[_0x18bd('0x1c')](_0x18bd('0x1e'),_0x381b30,_0x29dc29[_0x18bd('0x1c')][_0x18bd('0x1f')]);return _0x2e5799(_0x29dc29[_0x18bd('0x1c')][_0x18bd('0x1f')]);}logger[_0x18bd('0x1c')](_0x18bd('0x1e'),_0x381b30,_0x29dc29[_0x18bd('0x1c')]['message']);return _0xdf9207(_0x29dc29['error'][_0x18bd('0x1f')]);}else{logger[_0x18bd('0x18')](_0x18bd('0x1e'),_0x381b30,_0x18bd('0x19'));_0xdf9207(_0x29dc29[_0x18bd('0x20')]['message']);}})['catch'](function(_0x5d6abf){logger[_0x18bd('0x1c')]('ServicenowConfiguration,\x20%s,\x20%s',_0x381b30,_0x5d6abf);_0x2e5799(_0x5d6abf);});});}function respondWithStatusCode(_0x103938,_0x3efa8d){_0x3efa8d=_0x3efa8d||0xcc;return function(_0x5d2682){if(_0x5d2682){return _0x103938[_0x18bd('0x21')](_0x3efa8d);}return _0x103938[_0x18bd('0x22')](_0x3efa8d)[_0x18bd('0x23')]();};}function respondWithResult(_0x4a93d7,_0x3a4b34){_0x3a4b34=_0x3a4b34||0xc8;return function(_0x59a80f){if(_0x59a80f){return _0x4a93d7[_0x18bd('0x22')](_0x3a4b34)['json'](_0x59a80f);}};}function respondWithFilteredResult(_0x62cde8,_0x341e58){return function(_0x4162a3){if(_0x4162a3){var _0x58999e=_0x4162a3[_0x18bd('0x24')],_0x2c6175=_0x341e58[_0x18bd('0x25')],_0x57b118=_0x341e58['offset']+_0x341e58[_0x18bd('0x26')],_0x2518cc;if(_0x57b118>=_0x58999e){_0x57b118=_0x58999e;_0x2518cc=0xc8;}else{_0x2518cc=0xce;}_0x62cde8[_0x18bd('0x22')](_0x2518cc);return _0x62cde8['set'](_0x18bd('0x27'),_0x2c6175+'-'+_0x57b118+'/'+_0x58999e)['json'](_0x4162a3);}return null;};}function patchUpdates(_0x5d2a56){return function(_0x42fe2d){try{jsonpatch[_0x18bd('0x28')](_0x42fe2d,_0x5d2a56,!![]);}catch(_0x55305e){return BPromise['reject'](_0x55305e);}return _0x42fe2d[_0x18bd('0x29')]();};}function saveUpdates(_0x8e8ac6,_0x161a8e){return function(_0x370912){if(_0x370912){return _0x370912['update'](_0x8e8ac6)[_0x18bd('0x17')](function(_0x13abc3){return _0x13abc3;});}return null;};}function removeEntity(_0x424543,_0x14acfd){return function(_0x5f2287){if(_0x5f2287){return _0x5f2287[_0x18bd('0x2a')]()['then'](function(){_0x424543[_0x18bd('0x22')](0xcc)[_0x18bd('0x23')]();});}};}function handleEntityNotFound(_0x53da52,_0x4667df){return function(_0x35c770){if(!_0x35c770){_0x53da52[_0x18bd('0x21')](0x194);}return _0x35c770;};}function handleError(_0x187b55,_0x3c707b){_0x3c707b=_0x3c707b||0x1f4;return function(_0x46e09e){logger[_0x18bd('0x1c')](_0x46e09e[_0x18bd('0x2b')]);if(_0x46e09e[_0x18bd('0x2c')]){delete _0x46e09e[_0x18bd('0x2c')];}_0x187b55[_0x18bd('0x22')](_0x3c707b)[_0x18bd('0x2d')](_0x46e09e);};}exports[_0x18bd('0x2e')]=function(_0x33814d,_0x129726){var _0x378fc9={},_0x2bf126={},_0x57fa28={'count':0x0,'rows':[]};var _0x1e4668=db[_0x18bd('0x2f')][_0x18bd('0x30')];_0x2bf126[_0x18bd('0x31')]=_[_0x18bd('0x32')](_0x1e4668);_0x2bf126['query']=_['keys'](_0x33814d['query']);_0x2bf126['filters']=_[_0x18bd('0x33')](_0x2bf126[_0x18bd('0x31')],_0x2bf126[_0x18bd('0x34')]);_0x378fc9[_0x18bd('0x35')]=_[_0x18bd('0x33')](_0x2bf126[_0x18bd('0x31')],qs[_0x18bd('0x36')](_0x33814d['query'][_0x18bd('0x36')]));_0x378fc9['attributes']=_0x378fc9[_0x18bd('0x35')][_0x18bd('0x37')]?_0x378fc9[_0x18bd('0x35')]:_0x2bf126['model'];if(!_0x33814d['query']['hasOwnProperty'](_0x18bd('0x38'))){_0x378fc9[_0x18bd('0x26')]=qs[_0x18bd('0x26')](_0x33814d[_0x18bd('0x34')]['limit']);_0x378fc9['offset']=qs[_0x18bd('0x25')](_0x33814d[_0x18bd('0x34')][_0x18bd('0x25')]);}_0x378fc9[_0x18bd('0x39')]=qs['sort'](_0x33814d['query']['sort']);_0x378fc9[_0x18bd('0x3a')]=qs[_0x18bd('0x3b')](_[_0x18bd('0x3c')](_0x33814d[_0x18bd('0x34')],_0x2bf126[_0x18bd('0x3b')]));if(_0x33814d['query'][_0x18bd('0x3d')]){_0x378fc9[_0x18bd('0x3a')]=_[_0x18bd('0x3e')](_0x378fc9[_0x18bd('0x3a')],{'$or':_[_0x18bd('0x3f')](_0x1e4668,function(_0x67c0fa){if(_0x67c0fa[_0x18bd('0x40')][_0x18bd('0x41')]!==_0x18bd('0x42')){var _0x28ee47={};_0x28ee47[_0x67c0fa[_0x18bd('0x43')]]={'$like':'%'+_0x33814d[_0x18bd('0x34')][_0x18bd('0x3d')]+'%'};return _0x28ee47;}})});}_0x378fc9=_['merge']({},_0x378fc9,_0x33814d[_0x18bd('0x44')]);var _0x4bf6a3={'where':_0x378fc9[_0x18bd('0x3a')]};return db[_0x18bd('0x2f')][_0x18bd('0x24')](_0x4bf6a3)['then'](function(_0x15cdef){_0x57fa28[_0x18bd('0x24')]=_0x15cdef;if(_0x33814d[_0x18bd('0x34')]['includeAll']){_0x378fc9[_0x18bd('0x45')]=[{'all':!![]}];}return db[_0x18bd('0x2f')][_0x18bd('0x46')](_0x378fc9);})[_0x18bd('0x17')](function(_0xcb9223){_0x57fa28[_0x18bd('0x47')]=_0xcb9223;return _0x57fa28;})[_0x18bd('0x17')](respondWithFilteredResult(_0x129726,_0x378fc9))[_0x18bd('0x48')](handleError(_0x129726,null));};exports[_0x18bd('0x49')]=function(_0x221e5c,_0x93f947){var _0x2093ad={'raw':![],'where':{'id':_0x221e5c[_0x18bd('0x4a')]['id']}},_0x184c32={};_0x184c32['model']=_[_0x18bd('0x32')](db[_0x18bd('0x2f')][_0x18bd('0x30')]);_0x184c32[_0x18bd('0x34')]=_[_0x18bd('0x32')](_0x221e5c[_0x18bd('0x34')]);_0x184c32[_0x18bd('0x3b')]=_[_0x18bd('0x33')](_0x184c32[_0x18bd('0x31')],_0x184c32[_0x18bd('0x34')]);_0x2093ad[_0x18bd('0x35')]=_[_0x18bd('0x33')](_0x184c32[_0x18bd('0x31')],qs[_0x18bd('0x36')](_0x221e5c[_0x18bd('0x34')][_0x18bd('0x36')]));_0x2093ad[_0x18bd('0x35')]=_0x2093ad['attributes'][_0x18bd('0x37')]?_0x2093ad[_0x18bd('0x35')]:_0x184c32['model'];if(_0x221e5c[_0x18bd('0x34')][_0x18bd('0x4b')]){_0x2093ad['include']=[{'all':!![]}];}_0x2093ad=_[_0x18bd('0x3e')]({},_0x2093ad,_0x221e5c[_0x18bd('0x44')]);return db[_0x18bd('0x2f')][_0x18bd('0x4c')](_0x2093ad)['then'](handleEntityNotFound(_0x93f947,null))[_0x18bd('0x17')](respondWithResult(_0x93f947,null))[_0x18bd('0x48')](handleError(_0x93f947,null));};exports[_0x18bd('0x4d')]=function(_0x4fc9e0,_0x78a2e9){return db['ServicenowConfiguration']['create'](_0x4fc9e0['body'],{})['then'](respondWithResult(_0x78a2e9,0xc9))[_0x18bd('0x48')](handleError(_0x78a2e9,null));};exports['update']=function(_0x4ecb9e,_0x54e2cc){if(_0x4ecb9e['body']['id']){delete _0x4ecb9e[_0x18bd('0x4e')]['id'];}return db[_0x18bd('0x2f')]['find']({'where':{'id':_0x4ecb9e['params']['id']}})[_0x18bd('0x17')](handleEntityNotFound(_0x54e2cc,null))[_0x18bd('0x17')](saveUpdates(_0x4ecb9e[_0x18bd('0x4e')],null))[_0x18bd('0x17')](respondWithResult(_0x54e2cc,null))[_0x18bd('0x48')](handleError(_0x54e2cc,null));};exports[_0x18bd('0x2a')]=function(_0x477776,_0x121c62){return db[_0x18bd('0x2f')][_0x18bd('0x4c')]({'where':{'id':_0x477776[_0x18bd('0x4a')]['id']}})[_0x18bd('0x17')](handleEntityNotFound(_0x121c62,null))[_0x18bd('0x17')](removeEntity(_0x121c62,null))[_0x18bd('0x48')](handleError(_0x121c62,null));};exports[_0x18bd('0x4f')]=function(_0x31464d,_0x53e448,_0x3b15a5){var _0x1d3c52={};var _0xbda10f={};var _0x71e19f;var _0x104f49;return db[_0x18bd('0x2f')][_0x18bd('0x50')]({'where':{'id':_0x31464d['params']['id']}})[_0x18bd('0x17')](handleEntityNotFound(_0x53e448,null))[_0x18bd('0x17')](function(_0x31c9c1){if(_0x31c9c1){_0x71e19f=_0x31c9c1;_0xbda10f[_0x18bd('0x31')]=_[_0x18bd('0x32')](db[_0x18bd('0x51')][_0x18bd('0x30')]);_0xbda10f['query']=_[_0x18bd('0x32')](_0x31464d[_0x18bd('0x34')]);_0xbda10f[_0x18bd('0x3b')]=_[_0x18bd('0x33')](_0xbda10f[_0x18bd('0x31')],_0xbda10f[_0x18bd('0x34')]);_0x1d3c52[_0x18bd('0x35')]=_[_0x18bd('0x33')](_0xbda10f['model'],qs[_0x18bd('0x36')](_0x31464d[_0x18bd('0x34')][_0x18bd('0x36')]));_0x1d3c52[_0x18bd('0x35')]=_0x1d3c52['attributes'][_0x18bd('0x37')]?_0x1d3c52['attributes']:_0xbda10f[_0x18bd('0x31')];_0x1d3c52[_0x18bd('0x39')]=qs['sort'](_0x31464d[_0x18bd('0x34')][_0x18bd('0x52')]);_0x1d3c52[_0x18bd('0x3a')]=qs['filters'](_[_0x18bd('0x3c')](_0x31464d['query'],_0xbda10f[_0x18bd('0x3b')]));if(_0x31464d[_0x18bd('0x34')][_0x18bd('0x3d')]){_0x1d3c52['where']=_[_0x18bd('0x3e')](_0x1d3c52[_0x18bd('0x3a')],{'$or':_[_0x18bd('0x3f')](_0x1d3c52['attributes'],function(_0x2c9bc2){var _0x2985e9={};_0x2985e9[_0x2c9bc2]={'$like':'%'+_0x31464d[_0x18bd('0x34')][_0x18bd('0x3d')]+'%'};return _0x2985e9;})});}_0x1d3c52=_[_0x18bd('0x3e')]({},_0x1d3c52,_0x31464d[_0x18bd('0x44')]);return _0x71e19f['getFields'](_0x1d3c52);}})[_0x18bd('0x17')](function(_0x1d8b19){if(_0x1d8b19){_0x104f49=_0x1d8b19['length'];if(!_0x31464d[_0x18bd('0x34')][_0x18bd('0x53')]('nolimit')){_0x1d3c52[_0x18bd('0x26')]=qs[_0x18bd('0x26')](_0x31464d[_0x18bd('0x34')][_0x18bd('0x26')]);_0x1d3c52['offset']=qs[_0x18bd('0x25')](_0x31464d[_0x18bd('0x34')][_0x18bd('0x25')]);}return _0x71e19f[_0x18bd('0x4f')](_0x1d3c52);}})[_0x18bd('0x17')](function(_0x5a785b){if(_0x5a785b){return _0x5a785b?{'count':_0x104f49,'rows':_0x5a785b}:null;}})['then'](respondWithResult(_0x53e448,null))[_0x18bd('0x48')](handleError(_0x53e448,null));};exports[_0x18bd('0x54')]=function(_0x126ee5,_0x3df052,_0x109d26){var _0x551c37={};var _0x516640={};var _0x5a5a25;var _0x2a15bd;return db[_0x18bd('0x2f')]['findOne']({'where':{'id':_0x126ee5[_0x18bd('0x4a')]['id']}})[_0x18bd('0x17')](handleEntityNotFound(_0x3df052,null))[_0x18bd('0x17')](function(_0x44be57){if(_0x44be57){_0x5a5a25=_0x44be57;_0x516640[_0x18bd('0x31')]=_[_0x18bd('0x32')](db[_0x18bd('0x51')][_0x18bd('0x30')]);_0x516640[_0x18bd('0x34')]=_[_0x18bd('0x32')](_0x126ee5[_0x18bd('0x34')]);_0x516640[_0x18bd('0x3b')]=_[_0x18bd('0x33')](_0x516640[_0x18bd('0x31')],_0x516640[_0x18bd('0x34')]);_0x551c37['attributes']=_['intersection'](_0x516640['model'],qs[_0x18bd('0x36')](_0x126ee5[_0x18bd('0x34')][_0x18bd('0x36')]));_0x551c37[_0x18bd('0x35')]=_0x551c37[_0x18bd('0x35')][_0x18bd('0x37')]?_0x551c37[_0x18bd('0x35')]:_0x516640['model'];_0x551c37[_0x18bd('0x39')]=qs['sort'](_0x126ee5[_0x18bd('0x34')][_0x18bd('0x52')]);_0x551c37[_0x18bd('0x3a')]=qs['filters'](_['pick'](_0x126ee5['query'],_0x516640[_0x18bd('0x3b')]));if(_0x126ee5[_0x18bd('0x34')][_0x18bd('0x3d')]){_0x551c37[_0x18bd('0x3a')]=_[_0x18bd('0x3e')](_0x551c37['where'],{'$or':_['map'](_0x551c37[_0x18bd('0x35')],function(_0xd51c8a){var _0x310ecb={};_0x310ecb[_0xd51c8a]={'$like':'%'+_0x126ee5['query'][_0x18bd('0x3d')]+'%'};return _0x310ecb;})});}_0x551c37=_[_0x18bd('0x3e')]({},_0x551c37,_0x126ee5[_0x18bd('0x44')]);return _0x5a5a25[_0x18bd('0x54')](_0x551c37);}})['then'](function(_0x4c9cc8){if(_0x4c9cc8){_0x2a15bd=_0x4c9cc8[_0x18bd('0x37')];if(!_0x126ee5['query']['hasOwnProperty'](_0x18bd('0x38'))){_0x551c37[_0x18bd('0x26')]=qs['limit'](_0x126ee5[_0x18bd('0x34')][_0x18bd('0x26')]);_0x551c37[_0x18bd('0x25')]=qs[_0x18bd('0x25')](_0x126ee5[_0x18bd('0x34')]['offset']);}return _0x5a5a25['getSubjects'](_0x551c37);}})[_0x18bd('0x17')](function(_0x20ff90){if(_0x20ff90){return _0x20ff90?{'count':_0x2a15bd,'rows':_0x20ff90}:null;}})[_0x18bd('0x17')](respondWithResult(_0x3df052,null))[_0x18bd('0x48')](handleError(_0x3df052,null));};exports[_0x18bd('0x55')]=function(_0x23fcb6,_0x90792,_0x1fa9a0){var _0x32726a={};var _0x35ef19={};var _0x167b58;var _0x21a8ce;return db[_0x18bd('0x2f')][_0x18bd('0x50')]({'where':{'id':_0x23fcb6['params']['id']}})[_0x18bd('0x17')](handleEntityNotFound(_0x90792,null))['then'](function(_0xdeee06){if(_0xdeee06){_0x167b58=_0xdeee06;_0x35ef19[_0x18bd('0x31')]=_['keys'](db[_0x18bd('0x51')][_0x18bd('0x30')]);_0x35ef19[_0x18bd('0x34')]=_[_0x18bd('0x32')](_0x23fcb6['query']);_0x35ef19[_0x18bd('0x3b')]=_[_0x18bd('0x33')](_0x35ef19[_0x18bd('0x31')],_0x35ef19[_0x18bd('0x34')]);_0x32726a['attributes']=_[_0x18bd('0x33')](_0x35ef19[_0x18bd('0x31')],qs[_0x18bd('0x36')](_0x23fcb6[_0x18bd('0x34')]['fields']));_0x32726a[_0x18bd('0x35')]=_0x32726a['attributes']['length']?_0x32726a['attributes']:_0x35ef19[_0x18bd('0x31')];_0x32726a['order']=qs[_0x18bd('0x52')](_0x23fcb6[_0x18bd('0x34')][_0x18bd('0x52')]);_0x32726a[_0x18bd('0x3a')]=qs[_0x18bd('0x3b')](_[_0x18bd('0x3c')](_0x23fcb6[_0x18bd('0x34')],_0x35ef19[_0x18bd('0x3b')]));if(_0x23fcb6[_0x18bd('0x34')][_0x18bd('0x3d')]){_0x32726a[_0x18bd('0x3a')]=_[_0x18bd('0x3e')](_0x32726a[_0x18bd('0x3a')],{'$or':_['map'](_0x32726a[_0x18bd('0x35')],function(_0x59ceb6){var _0x48db54={};_0x48db54[_0x59ceb6]={'$like':'%'+_0x23fcb6[_0x18bd('0x34')][_0x18bd('0x3d')]+'%'};return _0x48db54;})});}_0x32726a=_[_0x18bd('0x3e')]({},_0x32726a,_0x23fcb6[_0x18bd('0x44')]);return _0x167b58[_0x18bd('0x55')](_0x32726a);}})[_0x18bd('0x17')](function(_0x5b4991){if(_0x5b4991){_0x21a8ce=_0x5b4991[_0x18bd('0x37')];if(!_0x23fcb6[_0x18bd('0x34')][_0x18bd('0x53')](_0x18bd('0x38'))){_0x32726a[_0x18bd('0x26')]=qs[_0x18bd('0x26')](_0x23fcb6['query'][_0x18bd('0x26')]);_0x32726a[_0x18bd('0x25')]=qs[_0x18bd('0x25')](_0x23fcb6[_0x18bd('0x34')][_0x18bd('0x25')]);}return _0x167b58[_0x18bd('0x55')](_0x32726a);}})[_0x18bd('0x17')](function(_0x3e8c72){if(_0x3e8c72){return _0x3e8c72?{'count':_0x21a8ce,'rows':_0x3e8c72}:null;}})[_0x18bd('0x17')](respondWithResult(_0x90792,null))[_0x18bd('0x48')](handleError(_0x90792,null));};
\ No newline at end of file
+var _0xffd6=['key','field','options','ServicenowConfiguration','include','rows','show','params','includeAll','find','create','body','update','findOne','ServicenowField','nolimit','getSubjects','getDescriptions','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','bluebird','mustache','util','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','jayson/promise','client','http','test','request','ServicenowConfiguration,\x20%s,\x20%s','request\x20sent','debug','ServicenowConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','message','info','catch','status','end','json','count','offset','limit','set','Content-Range','reject','save','destroy','then','sendStatus','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','order','sort','pick','filter','where','merge','map','type'];(function(_0x40d5f7,_0x30fa9d){var _0x15b094=function(_0x2011ff){while(--_0x2011ff){_0x40d5f7['push'](_0x40d5f7['shift']());}};_0x15b094(++_0x30fa9d);}(_0xffd6,0x1d4));var _0x6ffd=function(_0x28e74e,_0x53fdf1){_0x28e74e=_0x28e74e-0x0;var _0xb45ac1=_0xffd6[_0x28e74e];return _0xb45ac1;};'use strict';var pdf=require(_0x6ffd('0x0'));var emlformat=require(_0x6ffd('0x1'));var rimraf=require(_0x6ffd('0x2'));var zipdir=require(_0x6ffd('0x3'));var jsonpatch=require(_0x6ffd('0x4'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x6ffd('0x5'));var Mustache=require(_0x6ffd('0x6'));var util=require(_0x6ffd('0x7'));var path=require('path');var sox=require(_0x6ffd('0x8'));var csv=require('to-csv');var ejs=require(_0x6ffd('0x9'));var fs=require('fs');var _=require(_0x6ffd('0xa'));var squel=require(_0x6ffd('0xb'));var crypto=require(_0x6ffd('0xc'));var jsforce=require(_0x6ffd('0xd'));var deskjs=require(_0x6ffd('0xe'));var toCsv=require(_0x6ffd('0xf'));var querystring=require('querystring');var Papa=require(_0x6ffd('0x10'));var Redis=require('ioredis');var authService=require(_0x6ffd('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x6ffd('0x12'));var logger=require(_0x6ffd('0x13'))(_0x6ffd('0x14'));var utils=require(_0x6ffd('0x15'));var config=require(_0x6ffd('0x16'));var db=require('../../mysqldb')['db'];var jayson=require(_0x6ffd('0x17'));var client=jayson[_0x6ffd('0x18')][_0x6ffd('0x19')]({'port':0x232a});function checkPasswordPattern(_0x44eee9,_0x3ed2c9,_0x142560){if(_0x142560){var _0x2ca351=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x2ca351[_0x6ffd('0x1a')](_0x3ed2c9)){return _0x44eee9;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x44eee9;}}function respondWithRpcPromise(_0x23a0e3,_0x150b03,_0x3a8da6,_0x3a7630){return new BPromise(function(_0x19e83c,_0x1b9c77){var _0x26eeda=_0x3a7630||client;return _0x26eeda[_0x6ffd('0x1b')](_0x23a0e3,_0x3a8da6)['then'](function(_0x286152){logger['info'](_0x6ffd('0x1c'),_0x150b03,_0x6ffd('0x1d'));logger[_0x6ffd('0x1e')](_0x6ffd('0x1f'),_0x150b03,_0x6ffd('0x1d'),JSON[_0x6ffd('0x20')](_0x286152));if(_0x286152[_0x6ffd('0x21')]){if(_0x286152[_0x6ffd('0x21')]['code']===0x1f4){logger[_0x6ffd('0x21')](_0x6ffd('0x1c'),_0x150b03,_0x286152[_0x6ffd('0x21')][_0x6ffd('0x22')]);return _0x1b9c77(_0x286152[_0x6ffd('0x21')][_0x6ffd('0x22')]);}logger[_0x6ffd('0x21')](_0x6ffd('0x1c'),_0x150b03,_0x286152['error'][_0x6ffd('0x22')]);return _0x19e83c(_0x286152[_0x6ffd('0x21')][_0x6ffd('0x22')]);}else{logger[_0x6ffd('0x23')](_0x6ffd('0x1c'),_0x150b03,_0x6ffd('0x1d'));_0x19e83c(_0x286152['result'][_0x6ffd('0x22')]);}})[_0x6ffd('0x24')](function(_0x2f89bb){logger[_0x6ffd('0x21')](_0x6ffd('0x1c'),_0x150b03,_0x2f89bb);_0x1b9c77(_0x2f89bb);});});}function respondWithStatusCode(_0x396851,_0x7a60ca){_0x7a60ca=_0x7a60ca||0xcc;return function(_0x5ebb3b){if(_0x5ebb3b){return _0x396851['sendStatus'](_0x7a60ca);}return _0x396851[_0x6ffd('0x25')](_0x7a60ca)[_0x6ffd('0x26')]();};}function respondWithResult(_0x5897c3,_0x49f3d7){_0x49f3d7=_0x49f3d7||0xc8;return function(_0x5b7e8d){if(_0x5b7e8d){return _0x5897c3[_0x6ffd('0x25')](_0x49f3d7)[_0x6ffd('0x27')](_0x5b7e8d);}};}function respondWithFilteredResult(_0x3ba263,_0x3d481d){return function(_0x54d66a){if(_0x54d66a){var _0x1480e2=_0x54d66a[_0x6ffd('0x28')],_0x3a53e2=_0x3d481d[_0x6ffd('0x29')],_0x1a3eec=_0x3d481d[_0x6ffd('0x29')]+_0x3d481d[_0x6ffd('0x2a')],_0x530ced;if(_0x1a3eec>=_0x1480e2){_0x1a3eec=_0x1480e2;_0x530ced=0xc8;}else{_0x530ced=0xce;}_0x3ba263['status'](_0x530ced);return _0x3ba263[_0x6ffd('0x2b')](_0x6ffd('0x2c'),_0x3a53e2+'-'+_0x1a3eec+'/'+_0x1480e2)[_0x6ffd('0x27')](_0x54d66a);}return null;};}function patchUpdates(_0x355894){return function(_0x25e105){try{jsonpatch['apply'](_0x25e105,_0x355894,!![]);}catch(_0x1f611b){return BPromise[_0x6ffd('0x2d')](_0x1f611b);}return _0x25e105[_0x6ffd('0x2e')]();};}function saveUpdates(_0x4cc709,_0x5eaa08){return function(_0x3a5ae4){if(_0x3a5ae4){return _0x3a5ae4['update'](_0x4cc709)['then'](function(_0x2f4ff4){return _0x2f4ff4;});}return null;};}function removeEntity(_0x229104,_0x1c6dd1){return function(_0x254863){if(_0x254863){return _0x254863[_0x6ffd('0x2f')]()[_0x6ffd('0x30')](function(){_0x229104[_0x6ffd('0x25')](0xcc)['end']();});}};}function handleEntityNotFound(_0x45995b,_0x3b1f51){return function(_0x5854d7){if(!_0x5854d7){_0x45995b[_0x6ffd('0x31')](0x194);}return _0x5854d7;};}function handleError(_0x1629bb,_0x461d61){_0x461d61=_0x461d61||0x1f4;return function(_0x41415f){logger[_0x6ffd('0x21')](_0x41415f[_0x6ffd('0x32')]);if(_0x41415f[_0x6ffd('0x33')]){delete _0x41415f['name'];}_0x1629bb[_0x6ffd('0x25')](_0x461d61)[_0x6ffd('0x34')](_0x41415f);};}exports[_0x6ffd('0x35')]=function(_0x2346c5,_0x54c817){var _0x140791={},_0x14ff3e={},_0xd355f4={'count':0x0,'rows':[]};var _0x11ba1d=db['ServicenowConfiguration'][_0x6ffd('0x36')];_0x14ff3e[_0x6ffd('0x37')]=_[_0x6ffd('0x38')](_0x11ba1d);_0x14ff3e[_0x6ffd('0x39')]=_[_0x6ffd('0x38')](_0x2346c5[_0x6ffd('0x39')]);_0x14ff3e[_0x6ffd('0x3a')]=_[_0x6ffd('0x3b')](_0x14ff3e[_0x6ffd('0x37')],_0x14ff3e[_0x6ffd('0x39')]);_0x140791['attributes']=_['intersection'](_0x14ff3e[_0x6ffd('0x37')],qs[_0x6ffd('0x3c')](_0x2346c5[_0x6ffd('0x39')][_0x6ffd('0x3c')]));_0x140791[_0x6ffd('0x3d')]=_0x140791[_0x6ffd('0x3d')][_0x6ffd('0x3e')]?_0x140791[_0x6ffd('0x3d')]:_0x14ff3e[_0x6ffd('0x37')];if(!_0x2346c5[_0x6ffd('0x39')][_0x6ffd('0x3f')]('nolimit')){_0x140791['limit']=qs[_0x6ffd('0x2a')](_0x2346c5[_0x6ffd('0x39')][_0x6ffd('0x2a')]);_0x140791['offset']=qs[_0x6ffd('0x29')](_0x2346c5[_0x6ffd('0x39')][_0x6ffd('0x29')]);}_0x140791[_0x6ffd('0x40')]=qs[_0x6ffd('0x41')](_0x2346c5[_0x6ffd('0x39')][_0x6ffd('0x41')]);_0x140791['where']=qs[_0x6ffd('0x3a')](_[_0x6ffd('0x42')](_0x2346c5[_0x6ffd('0x39')],_0x14ff3e[_0x6ffd('0x3a')]));if(_0x2346c5[_0x6ffd('0x39')][_0x6ffd('0x43')]){_0x140791[_0x6ffd('0x44')]=_[_0x6ffd('0x45')](_0x140791[_0x6ffd('0x44')],{'$or':_[_0x6ffd('0x46')](_0x11ba1d,function(_0x17ec76){if(_0x17ec76[_0x6ffd('0x47')][_0x6ffd('0x48')]!=='VIRTUAL'){var _0xa9edf3={};_0xa9edf3[_0x17ec76[_0x6ffd('0x49')]]={'$like':'%'+_0x2346c5[_0x6ffd('0x39')][_0x6ffd('0x43')]+'%'};return _0xa9edf3;}})});}_0x140791=_[_0x6ffd('0x45')]({},_0x140791,_0x2346c5[_0x6ffd('0x4a')]);var _0x363cc4={'where':_0x140791[_0x6ffd('0x44')]};return db[_0x6ffd('0x4b')][_0x6ffd('0x28')](_0x363cc4)[_0x6ffd('0x30')](function(_0x44de1b){_0xd355f4[_0x6ffd('0x28')]=_0x44de1b;if(_0x2346c5['query']['includeAll']){_0x140791[_0x6ffd('0x4c')]=[{'all':!![]}];}return db[_0x6ffd('0x4b')]['findAll'](_0x140791);})[_0x6ffd('0x30')](function(_0x49323e){_0xd355f4[_0x6ffd('0x4d')]=_0x49323e;return _0xd355f4;})['then'](respondWithFilteredResult(_0x54c817,_0x140791))[_0x6ffd('0x24')](handleError(_0x54c817,null));};exports[_0x6ffd('0x4e')]=function(_0x4b9637,_0x4f7d48){var _0x5caaba={'raw':![],'where':{'id':_0x4b9637[_0x6ffd('0x4f')]['id']}},_0x43e700={};_0x43e700[_0x6ffd('0x37')]=_[_0x6ffd('0x38')](db[_0x6ffd('0x4b')][_0x6ffd('0x36')]);_0x43e700['query']=_['keys'](_0x4b9637['query']);_0x43e700[_0x6ffd('0x3a')]=_[_0x6ffd('0x3b')](_0x43e700[_0x6ffd('0x37')],_0x43e700[_0x6ffd('0x39')]);_0x5caaba[_0x6ffd('0x3d')]=_[_0x6ffd('0x3b')](_0x43e700[_0x6ffd('0x37')],qs[_0x6ffd('0x3c')](_0x4b9637[_0x6ffd('0x39')]['fields']));_0x5caaba[_0x6ffd('0x3d')]=_0x5caaba['attributes'][_0x6ffd('0x3e')]?_0x5caaba[_0x6ffd('0x3d')]:_0x43e700['model'];if(_0x4b9637[_0x6ffd('0x39')][_0x6ffd('0x50')]){_0x5caaba[_0x6ffd('0x4c')]=[{'all':!![]}];}_0x5caaba=_[_0x6ffd('0x45')]({},_0x5caaba,_0x4b9637['options']);return db[_0x6ffd('0x4b')][_0x6ffd('0x51')](_0x5caaba)['then'](handleEntityNotFound(_0x4f7d48,null))['then'](respondWithResult(_0x4f7d48,null))[_0x6ffd('0x24')](handleError(_0x4f7d48,null));};exports[_0x6ffd('0x52')]=function(_0x2f28aa,_0x43ce4a){return db[_0x6ffd('0x4b')][_0x6ffd('0x52')](_0x2f28aa[_0x6ffd('0x53')],{})['then'](respondWithResult(_0x43ce4a,0xc9))[_0x6ffd('0x24')](handleError(_0x43ce4a,null));};exports[_0x6ffd('0x54')]=function(_0x468589,_0x589903){if(_0x468589[_0x6ffd('0x53')]['id']){delete _0x468589[_0x6ffd('0x53')]['id'];}return db['ServicenowConfiguration']['find']({'where':{'id':_0x468589[_0x6ffd('0x4f')]['id']}})[_0x6ffd('0x30')](handleEntityNotFound(_0x589903,null))['then'](saveUpdates(_0x468589['body'],null))[_0x6ffd('0x30')](respondWithResult(_0x589903,null))[_0x6ffd('0x24')](handleError(_0x589903,null));};exports['destroy']=function(_0x1bf079,_0x2f21cb){return db[_0x6ffd('0x4b')]['find']({'where':{'id':_0x1bf079[_0x6ffd('0x4f')]['id']}})[_0x6ffd('0x30')](handleEntityNotFound(_0x2f21cb,null))[_0x6ffd('0x30')](removeEntity(_0x2f21cb,null))['catch'](handleError(_0x2f21cb,null));};exports['getFields']=function(_0x54f25e,_0xf1fec6,_0x3f204a){var _0x2074f7={};var _0x11a20b={};var _0x1d0625;var _0x4616aa;return db[_0x6ffd('0x4b')][_0x6ffd('0x55')]({'where':{'id':_0x54f25e['params']['id']}})[_0x6ffd('0x30')](handleEntityNotFound(_0xf1fec6,null))[_0x6ffd('0x30')](function(_0x47dbfd){if(_0x47dbfd){_0x1d0625=_0x47dbfd;_0x11a20b[_0x6ffd('0x37')]=_[_0x6ffd('0x38')](db[_0x6ffd('0x56')][_0x6ffd('0x36')]);_0x11a20b['query']=_['keys'](_0x54f25e[_0x6ffd('0x39')]);_0x11a20b[_0x6ffd('0x3a')]=_[_0x6ffd('0x3b')](_0x11a20b[_0x6ffd('0x37')],_0x11a20b[_0x6ffd('0x39')]);_0x2074f7[_0x6ffd('0x3d')]=_['intersection'](_0x11a20b[_0x6ffd('0x37')],qs[_0x6ffd('0x3c')](_0x54f25e[_0x6ffd('0x39')][_0x6ffd('0x3c')]));_0x2074f7['attributes']=_0x2074f7[_0x6ffd('0x3d')][_0x6ffd('0x3e')]?_0x2074f7[_0x6ffd('0x3d')]:_0x11a20b[_0x6ffd('0x37')];_0x2074f7[_0x6ffd('0x40')]=qs[_0x6ffd('0x41')](_0x54f25e[_0x6ffd('0x39')][_0x6ffd('0x41')]);_0x2074f7[_0x6ffd('0x44')]=qs[_0x6ffd('0x3a')](_[_0x6ffd('0x42')](_0x54f25e[_0x6ffd('0x39')],_0x11a20b[_0x6ffd('0x3a')]));if(_0x54f25e['query'][_0x6ffd('0x43')]){_0x2074f7[_0x6ffd('0x44')]=_[_0x6ffd('0x45')](_0x2074f7['where'],{'$or':_['map'](_0x2074f7['attributes'],function(_0x213108){var _0x18ddbc={};_0x18ddbc[_0x213108]={'$like':'%'+_0x54f25e[_0x6ffd('0x39')]['filter']+'%'};return _0x18ddbc;})});}_0x2074f7=_[_0x6ffd('0x45')]({},_0x2074f7,_0x54f25e[_0x6ffd('0x4a')]);return _0x1d0625['getFields'](_0x2074f7);}})['then'](function(_0xe11fe2){if(_0xe11fe2){_0x4616aa=_0xe11fe2[_0x6ffd('0x3e')];if(!_0x54f25e[_0x6ffd('0x39')][_0x6ffd('0x3f')](_0x6ffd('0x57'))){_0x2074f7[_0x6ffd('0x2a')]=qs[_0x6ffd('0x2a')](_0x54f25e['query']['limit']);_0x2074f7[_0x6ffd('0x29')]=qs['offset'](_0x54f25e[_0x6ffd('0x39')][_0x6ffd('0x29')]);}return _0x1d0625['getFields'](_0x2074f7);}})[_0x6ffd('0x30')](function(_0x2b5674){if(_0x2b5674){return _0x2b5674?{'count':_0x4616aa,'rows':_0x2b5674}:null;}})[_0x6ffd('0x30')](respondWithResult(_0xf1fec6,null))[_0x6ffd('0x24')](handleError(_0xf1fec6,null));};exports['getSubjects']=function(_0x43d018,_0x4fa89a,_0x551395){var _0x4e5ee8={};var _0x18c8a4={};var _0x1f8a8a;var _0x3fdb3c;return db[_0x6ffd('0x4b')][_0x6ffd('0x55')]({'where':{'id':_0x43d018['params']['id']}})['then'](handleEntityNotFound(_0x4fa89a,null))['then'](function(_0x35a249){if(_0x35a249){_0x1f8a8a=_0x35a249;_0x18c8a4[_0x6ffd('0x37')]=_[_0x6ffd('0x38')](db[_0x6ffd('0x56')]['rawAttributes']);_0x18c8a4['query']=_[_0x6ffd('0x38')](_0x43d018[_0x6ffd('0x39')]);_0x18c8a4['filters']=_[_0x6ffd('0x3b')](_0x18c8a4[_0x6ffd('0x37')],_0x18c8a4[_0x6ffd('0x39')]);_0x4e5ee8[_0x6ffd('0x3d')]=_[_0x6ffd('0x3b')](_0x18c8a4[_0x6ffd('0x37')],qs[_0x6ffd('0x3c')](_0x43d018['query']['fields']));_0x4e5ee8[_0x6ffd('0x3d')]=_0x4e5ee8[_0x6ffd('0x3d')][_0x6ffd('0x3e')]?_0x4e5ee8[_0x6ffd('0x3d')]:_0x18c8a4[_0x6ffd('0x37')];_0x4e5ee8[_0x6ffd('0x40')]=qs[_0x6ffd('0x41')](_0x43d018[_0x6ffd('0x39')]['sort']);_0x4e5ee8['where']=qs[_0x6ffd('0x3a')](_[_0x6ffd('0x42')](_0x43d018[_0x6ffd('0x39')],_0x18c8a4[_0x6ffd('0x3a')]));if(_0x43d018[_0x6ffd('0x39')][_0x6ffd('0x43')]){_0x4e5ee8[_0x6ffd('0x44')]=_[_0x6ffd('0x45')](_0x4e5ee8['where'],{'$or':_[_0x6ffd('0x46')](_0x4e5ee8['attributes'],function(_0x3ab87c){var _0x509942={};_0x509942[_0x3ab87c]={'$like':'%'+_0x43d018[_0x6ffd('0x39')][_0x6ffd('0x43')]+'%'};return _0x509942;})});}_0x4e5ee8=_['merge']({},_0x4e5ee8,_0x43d018['options']);return _0x1f8a8a[_0x6ffd('0x58')](_0x4e5ee8);}})[_0x6ffd('0x30')](function(_0x1e664e){if(_0x1e664e){_0x3fdb3c=_0x1e664e[_0x6ffd('0x3e')];if(!_0x43d018[_0x6ffd('0x39')][_0x6ffd('0x3f')](_0x6ffd('0x57'))){_0x4e5ee8[_0x6ffd('0x2a')]=qs[_0x6ffd('0x2a')](_0x43d018['query'][_0x6ffd('0x2a')]);_0x4e5ee8['offset']=qs[_0x6ffd('0x29')](_0x43d018['query'][_0x6ffd('0x29')]);}return _0x1f8a8a[_0x6ffd('0x58')](_0x4e5ee8);}})[_0x6ffd('0x30')](function(_0x5da594){if(_0x5da594){return _0x5da594?{'count':_0x3fdb3c,'rows':_0x5da594}:null;}})[_0x6ffd('0x30')](respondWithResult(_0x4fa89a,null))[_0x6ffd('0x24')](handleError(_0x4fa89a,null));};exports[_0x6ffd('0x59')]=function(_0x183a1b,_0x100f8f,_0x3a6c17){var _0x2f3935={};var _0x25546e={};var _0x2f996e;var _0x220fd7;return db[_0x6ffd('0x4b')]['findOne']({'where':{'id':_0x183a1b['params']['id']}})[_0x6ffd('0x30')](handleEntityNotFound(_0x100f8f,null))[_0x6ffd('0x30')](function(_0x5d7b94){if(_0x5d7b94){_0x2f996e=_0x5d7b94;_0x25546e[_0x6ffd('0x37')]=_[_0x6ffd('0x38')](db[_0x6ffd('0x56')]['rawAttributes']);_0x25546e[_0x6ffd('0x39')]=_[_0x6ffd('0x38')](_0x183a1b['query']);_0x25546e[_0x6ffd('0x3a')]=_['intersection'](_0x25546e[_0x6ffd('0x37')],_0x25546e[_0x6ffd('0x39')]);_0x2f3935['attributes']=_[_0x6ffd('0x3b')](_0x25546e[_0x6ffd('0x37')],qs[_0x6ffd('0x3c')](_0x183a1b[_0x6ffd('0x39')]['fields']));_0x2f3935[_0x6ffd('0x3d')]=_0x2f3935[_0x6ffd('0x3d')][_0x6ffd('0x3e')]?_0x2f3935[_0x6ffd('0x3d')]:_0x25546e[_0x6ffd('0x37')];_0x2f3935[_0x6ffd('0x40')]=qs['sort'](_0x183a1b['query'][_0x6ffd('0x41')]);_0x2f3935[_0x6ffd('0x44')]=qs[_0x6ffd('0x3a')](_[_0x6ffd('0x42')](_0x183a1b[_0x6ffd('0x39')],_0x25546e[_0x6ffd('0x3a')]));if(_0x183a1b['query']['filter']){_0x2f3935['where']=_[_0x6ffd('0x45')](_0x2f3935[_0x6ffd('0x44')],{'$or':_['map'](_0x2f3935[_0x6ffd('0x3d')],function(_0x294dac){var _0x4cc217={};_0x4cc217[_0x294dac]={'$like':'%'+_0x183a1b[_0x6ffd('0x39')][_0x6ffd('0x43')]+'%'};return _0x4cc217;})});}_0x2f3935=_[_0x6ffd('0x45')]({},_0x2f3935,_0x183a1b[_0x6ffd('0x4a')]);return _0x2f996e[_0x6ffd('0x59')](_0x2f3935);}})[_0x6ffd('0x30')](function(_0x4f6506){if(_0x4f6506){_0x220fd7=_0x4f6506['length'];if(!_0x183a1b['query']['hasOwnProperty'](_0x6ffd('0x57'))){_0x2f3935[_0x6ffd('0x2a')]=qs[_0x6ffd('0x2a')](_0x183a1b[_0x6ffd('0x39')][_0x6ffd('0x2a')]);_0x2f3935[_0x6ffd('0x29')]=qs['offset'](_0x183a1b[_0x6ffd('0x39')][_0x6ffd('0x29')]);}return _0x2f996e[_0x6ffd('0x59')](_0x2f3935);}})[_0x6ffd('0x30')](function(_0x2546f9){if(_0x2546f9){return _0x2546f9?{'count':_0x220fd7,'rows':_0x2546f9}:null;}})[_0x6ffd('0x30')](respondWithResult(_0x100f8f,null))[_0x6ffd('0x24')](handleError(_0x100f8f,null));};
\ No newline at end of file
index fa86fce..e1a0cf2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa4e7=['define','ServicenowConfiguration','lodash','../../config/logger','moment','request-promise','path','rimraf','./intServicenowConfiguration.attributes'];(function(_0x28947d,_0x4cc9c6){var _0x12d2ee=function(_0x3f38fc){while(--_0x3f38fc){_0x28947d['push'](_0x28947d['shift']());}};_0x12d2ee(++_0x4cc9c6);}(_0xa4e7,0xe3));var _0x7a4e=function(_0x1a4b93,_0x534384){_0x1a4b93=_0x1a4b93-0x0;var _0x2fdb0e=_0xa4e7[_0x1a4b93];return _0x2fdb0e;};'use strict';var _=require(_0x7a4e('0x0'));var util=require('util');var logger=require(_0x7a4e('0x1'))('api');var moment=require(_0x7a4e('0x2'));var BPromise=require('bluebird');var rp=require(_0x7a4e('0x3'));var fs=require('fs');var path=require(_0x7a4e('0x4'));var rimraf=require(_0x7a4e('0x5'));var config=require('../../config/environment');var attributes=require(_0x7a4e('0x6'));module['exports']=function(_0x267828,_0x332e80){return _0x267828[_0x7a4e('0x7')](_0x7a4e('0x8'),attributes,{'tableName':'int_servicenow_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x3963=['define','int_servicenow_configurations','lodash','util','../../config/logger','moment','bluebird','request-promise','./intServicenowConfiguration.attributes','exports'];(function(_0x6131cd,_0x4c26a1){var _0x47e916=function(_0x1f2bce){while(--_0x1f2bce){_0x6131cd['push'](_0x6131cd['shift']());}};_0x47e916(++_0x4c26a1);}(_0x3963,0x12e));var _0x3396=function(_0x44039a,_0x2ac8a8){_0x44039a=_0x44039a-0x0;var _0x525de5=_0x3963[_0x44039a];return _0x525de5;};'use strict';var _=require(_0x3396('0x0'));var util=require(_0x3396('0x1'));var logger=require(_0x3396('0x2'))('api');var moment=require(_0x3396('0x3'));var BPromise=require(_0x3396('0x4'));var rp=require(_0x3396('0x5'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x3396('0x6'));module[_0x3396('0x7')]=function(_0x52ee51,_0x2caca6){return _0x52ee51[_0x3396('0x8')]('ServicenowConfiguration',attributes,{'tableName':_0x3396('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 7eb796e..2d849e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf5de=['rpc','../../config/environment','jayson/promise','client','request','then','info','ServicenowConfiguration,\x20%s,\x20%s','request\x20sent','ServicenowConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger'];(function(_0x1269c6,_0x1c8942){var _0x4868c7=function(_0x1661bc){while(--_0x1661bc){_0x1269c6['push'](_0x1269c6['shift']());}};_0x4868c7(++_0x1c8942);}(_0xf5de,0x1db));var _0xef5d=function(_0x4c2b3a,_0x38f445){_0x4c2b3a=_0x4c2b3a-0x0;var _0x36d4b3=_0xf5de[_0x4c2b3a];return _0x36d4b3;};'use strict';var _=require(_0xef5d('0x0'));var util=require(_0xef5d('0x1'));var moment=require(_0xef5d('0x2'));var BPromise=require(_0xef5d('0x3'));var rs=require(_0xef5d('0x4'));var fs=require('fs');var Redis=require(_0xef5d('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xef5d('0x6'));var logger=require(_0xef5d('0x7'))(_0xef5d('0x8'));var config=require(_0xef5d('0x9'));var jayson=require(_0xef5d('0xa'));var client=jayson[_0xef5d('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x347779,_0x336973,_0x3fe7fd){return new BPromise(function(_0x5e5145,_0x1585ba){return client[_0xef5d('0xc')](_0x347779,_0x3fe7fd)[_0xef5d('0xd')](function(_0x2a3db3){logger[_0xef5d('0xe')](_0xef5d('0xf'),_0x336973,_0xef5d('0x10'));logger['debug'](_0xef5d('0x11'),_0x336973,_0xef5d('0x10'),JSON[_0xef5d('0x12')](_0x2a3db3));if(_0x2a3db3[_0xef5d('0x13')]){if(_0x2a3db3[_0xef5d('0x13')][_0xef5d('0x14')]===0x1f4){logger[_0xef5d('0x13')]('ServicenowConfiguration,\x20%s,\x20%s',_0x336973,_0x2a3db3[_0xef5d('0x13')][_0xef5d('0x15')]);return _0x1585ba(_0x2a3db3[_0xef5d('0x13')][_0xef5d('0x15')]);}logger[_0xef5d('0x13')](_0xef5d('0xf'),_0x336973,_0x2a3db3['error'][_0xef5d('0x15')]);return _0x5e5145(_0x2a3db3[_0xef5d('0x13')][_0xef5d('0x15')]);}else{logger['info'](_0xef5d('0xf'),_0x336973,'request\x20sent');_0x5e5145(_0x2a3db3['result'][_0xef5d('0x15')]);}})[_0xef5d('0x16')](function(_0x6b9a71){logger['error'](_0xef5d('0xf'),_0x336973,_0x6b9a71);_0x1585ba(_0x6b9a71);});});}
\ No newline at end of file
+var _0xb12d=['../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','info','ServicenowConfiguration,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','lodash','util','moment','randomstring','ioredis'];(function(_0xc70436,_0x593fcd){var _0x51cd6e=function(_0x1cf79b){while(--_0x1cf79b){_0xc70436['push'](_0xc70436['shift']());}};_0x51cd6e(++_0x593fcd);}(_0xb12d,0x1b3));var _0xdb12=function(_0xe4d6c6,_0x3bdbf2){_0xe4d6c6=_0xe4d6c6-0x0;var _0x3a8935=_0xb12d[_0xe4d6c6];return _0x3a8935;};'use strict';var _=require(_0xdb12('0x0'));var util=require(_0xdb12('0x1'));var moment=require(_0xdb12('0x2'));var BPromise=require('bluebird');var rs=require(_0xdb12('0x3'));var fs=require('fs');var Redis=require(_0xdb12('0x4'));var db=require(_0xdb12('0x5'))['db'];var utils=require(_0xdb12('0x6'));var logger=require('../../config/logger')(_0xdb12('0x7'));var config=require(_0xdb12('0x8'));var jayson=require(_0xdb12('0x9'));var client=jayson[_0xdb12('0xa')][_0xdb12('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x4da571,_0x2824fe,_0x32196f){return new BPromise(function(_0x2293e8,_0x154be1){return client[_0xdb12('0xc')](_0x4da571,_0x32196f)['then'](function(_0x12fdf1){logger[_0xdb12('0xd')](_0xdb12('0xe'),_0x2824fe,_0xdb12('0xf'));logger[_0xdb12('0x10')]('ServicenowConfiguration,\x20%s,\x20%s,\x20%s',_0x2824fe,_0xdb12('0xf'),JSON[_0xdb12('0x11')](_0x12fdf1));if(_0x12fdf1[_0xdb12('0x12')]){if(_0x12fdf1['error'][_0xdb12('0x13')]===0x1f4){logger['error'](_0xdb12('0xe'),_0x2824fe,_0x12fdf1[_0xdb12('0x12')][_0xdb12('0x14')]);return _0x154be1(_0x12fdf1[_0xdb12('0x12')][_0xdb12('0x14')]);}logger[_0xdb12('0x12')](_0xdb12('0xe'),_0x2824fe,_0x12fdf1['error'][_0xdb12('0x14')]);return _0x2293e8(_0x12fdf1['error'][_0xdb12('0x14')]);}else{logger[_0xdb12('0xd')](_0xdb12('0xe'),_0x2824fe,_0xdb12('0xf'));_0x2293e8(_0x12fdf1[_0xdb12('0x15')][_0xdb12('0x14')]);}})['catch'](function(_0x40aea3){logger['error']('ServicenowConfiguration,\x20%s,\x20%s',_0x2824fe,_0x40aea3);_0x154be1(_0x40aea3);});});}
\ No newline at end of file
index dbdcd8d..26eff71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e17=['put','delete','destroy','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','get','index','/:id','isAuthenticated','show','create'];(function(_0x36542a,_0x754b82){var _0x47fa43=function(_0x3811f5){while(--_0x3811f5){_0x36542a['push'](_0x36542a['shift']());}};_0x47fa43(++_0x754b82);}(_0x3e17,0xe1));var _0x73e1=function(_0x40a045,_0x516f0e){_0x40a045=_0x40a045-0x0;var _0x1a687c=_0x3e17[_0x40a045];return _0x1a687c;};'use strict';var multer=require(_0x73e1('0x0'));var util=require('util');var path=require(_0x73e1('0x1'));var timeout=require(_0x73e1('0x2'));var express=require(_0x73e1('0x3'));var router=express[_0x73e1('0x4')]();var auth=require(_0x73e1('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x73e1('0x6'));var controller=require('./intServicenowField.controller');router[_0x73e1('0x7')]('/',auth['isAuthenticated'](),controller[_0x73e1('0x8')]);router[_0x73e1('0x7')](_0x73e1('0x9'),auth[_0x73e1('0xa')](),controller[_0x73e1('0xb')]);router['post']('/',auth[_0x73e1('0xa')](),controller[_0x73e1('0xc')]);router[_0x73e1('0xd')](_0x73e1('0x9'),auth[_0x73e1('0xa')](),controller['update']);router[_0x73e1('0xe')](_0x73e1('0x9'),auth[_0x73e1('0xa')](),controller[_0x73e1('0xf')]);module[_0x73e1('0x10')]=router;
\ No newline at end of file
+var _0xb0d1=['create','put','delete','destroy','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','get','/:id','isAuthenticated','post'];(function(_0x56973c,_0x2c9a63){var _0x19cb6d=function(_0x55cf2d){while(--_0x55cf2d){_0x56973c['push'](_0x56973c['shift']());}};_0x19cb6d(++_0x2c9a63);}(_0xb0d1,0x19d));var _0x1b0d=function(_0x2edcd3,_0x45a348){_0x2edcd3=_0x2edcd3-0x0;var _0x1018b4=_0xb0d1[_0x2edcd3];return _0x1018b4;};'use strict';var multer=require(_0x1b0d('0x0'));var util=require(_0x1b0d('0x1'));var path=require(_0x1b0d('0x2'));var timeout=require(_0x1b0d('0x3'));var express=require(_0x1b0d('0x4'));var router=express['Router']();var auth=require(_0x1b0d('0x5'));var interaction=require(_0x1b0d('0x6'));var config=require(_0x1b0d('0x7'));var controller=require('./intServicenowField.controller');router[_0x1b0d('0x8')]('/',auth['isAuthenticated'](),controller['index']);router[_0x1b0d('0x8')](_0x1b0d('0x9'),auth[_0x1b0d('0xa')](),controller['show']);router[_0x1b0d('0xb')]('/',auth[_0x1b0d('0xa')](),controller[_0x1b0d('0xc')]);router[_0x1b0d('0xd')](_0x1b0d('0x9'),auth[_0x1b0d('0xa')](),controller['update']);router[_0x1b0d('0xe')](_0x1b0d('0x9'),auth[_0x1b0d('0xa')](),controller[_0x1b0d('0xf')]);module[_0x1b0d('0x10')]=router;
\ No newline at end of file
index aaa1951..13432ac 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb7e7=['customVariable','BOOLEAN','sequelize','ENUM','variable','keyValue','STRING'];(function(_0x2b126c,_0x4bcb93){var _0x5a74d9=function(_0x19cd4f){while(--_0x19cd4f){_0x2b126c['push'](_0x2b126c['shift']());}};_0x5a74d9(++_0x4bcb93);}(_0xb7e7,0x121));var _0x7b7e=function(_0x487b0c,_0x14ff74){_0x487b0c=_0x487b0c-0x0;var _0x1adbdc=_0xb7e7[_0x487b0c];return _0x1adbdc;};'use strict';var Sequelize=require(_0x7b7e('0x0'));module['exports']={'type':{'type':Sequelize[_0x7b7e('0x1')]('string',_0x7b7e('0x2'),'customVariable',_0x7b7e('0x3')),'defaultValue':'string'},'content':{'type':Sequelize[_0x7b7e('0x4')]},'key':{'type':Sequelize[_0x7b7e('0x4')]},'keyType':{'type':Sequelize[_0x7b7e('0x1')]('string','variable',_0x7b7e('0x5'))},'keyContent':{'type':Sequelize[_0x7b7e('0x4')]},'idField':{'type':Sequelize[_0x7b7e('0x4')]},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize[_0x7b7e('0x6')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x7b7e('0x4')]}};
\ No newline at end of file
+var _0xa74f=['keyValue','string','STRING','BOOLEAN','ENUM','customVariable'];(function(_0x588227,_0x33f6c0){var _0x5acede=function(_0x4d68b3){while(--_0x4d68b3){_0x588227['push'](_0x588227['shift']());}};_0x5acede(++_0x33f6c0);}(_0xa74f,0x9a));var _0xfa74=function(_0x452968,_0x31e391){_0x452968=_0x452968-0x0;var _0xb6f9ae=_0xa74f[_0x452968];return _0xb6f9ae;};'use strict';var Sequelize=require('sequelize');module['exports']={'type':{'type':Sequelize[_0xfa74('0x0')]('string','variable',_0xfa74('0x1'),_0xfa74('0x2')),'defaultValue':_0xfa74('0x3')},'content':{'type':Sequelize[_0xfa74('0x4')]},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0xfa74('0x0')]('string','variable',_0xfa74('0x1'))},'keyContent':{'type':Sequelize[_0xfa74('0x4')]},'idField':{'type':Sequelize[_0xfa74('0x4')]},'nameField':{'type':Sequelize[_0xfa74('0x4')]},'customField':{'type':Sequelize[_0xfa74('0x5')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0xfa74('0x4')]}};
\ No newline at end of file
index bc9786a..c2c19f3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe432=['body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','limit','set','apply','save','update','then','stack','name','send','index','rawAttributes','query','keys','filters','intersection','model','fields','nolimit','offset','order','sort','where','merge','map','type','key','VIRTUAL','filter','options','ServicenowField','includeAll','findAll','rows','catch','show','params','attributes','length','find','create'];(function(_0x28669c,_0x1f62c4){var _0x4a3af6=function(_0x3e25d5){while(--_0x3e25d5){_0x28669c['push'](_0x28669c['shift']());}};_0x4a3af6(++_0x1f62c4);}(_0xe432,0x91));var _0x2e43=function(_0x2d7e21,_0x259497){_0x2d7e21=_0x2d7e21-0x0;var _0x205584=_0xe432[_0x2d7e21];return _0x205584;};'use strict';var pdf=require(_0x2e43('0x0'));var emlformat=require(_0x2e43('0x1'));var rimraf=require(_0x2e43('0x2'));var zipdir=require(_0x2e43('0x3'));var jsonpatch=require(_0x2e43('0x4'));var rp=require(_0x2e43('0x5'));var moment=require(_0x2e43('0x6'));var BPromise=require(_0x2e43('0x7'));var Mustache=require(_0x2e43('0x8'));var util=require('util');var path=require('path');var sox=require(_0x2e43('0x9'));var csv=require(_0x2e43('0xa'));var ejs=require(_0x2e43('0xb'));var fs=require('fs');var _=require(_0x2e43('0xc'));var squel=require(_0x2e43('0xd'));var crypto=require(_0x2e43('0xe'));var jsforce=require('jsforce');var deskjs=require(_0x2e43('0xf'));var toCsv=require(_0x2e43('0xa'));var querystring=require(_0x2e43('0x10'));var Papa=require(_0x2e43('0x11'));var Redis=require(_0x2e43('0x12'));var authService=require(_0x2e43('0x13'));var qs=require(_0x2e43('0x14'));var hardwareService=require(_0x2e43('0x15'));var logger=require(_0x2e43('0x16'))(_0x2e43('0x17'));var utils=require(_0x2e43('0x18'));var config=require(_0x2e43('0x19'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5726be,_0x375955){_0x375955=_0x375955||0xcc;return function(_0x1788e9){if(_0x1788e9){return _0x5726be[_0x2e43('0x1a')](_0x375955);}return _0x5726be['status'](_0x375955)[_0x2e43('0x1b')]();};}function respondWithResult(_0x5d3fbe,_0x3c8abe){_0x3c8abe=_0x3c8abe||0xc8;return function(_0x4c1560){if(_0x4c1560){return _0x5d3fbe[_0x2e43('0x1c')](_0x3c8abe)[_0x2e43('0x1d')](_0x4c1560);}};}function respondWithFilteredResult(_0x54440f,_0x2a7a44){return function(_0x516362){if(_0x516362){var _0x16b30e=_0x516362[_0x2e43('0x1e')],_0x48a6ca=_0x2a7a44['offset'],_0x4d0b1d=_0x2a7a44['offset']+_0x2a7a44[_0x2e43('0x1f')],_0x571662;if(_0x4d0b1d>=_0x16b30e){_0x4d0b1d=_0x16b30e;_0x571662=0xc8;}else{_0x571662=0xce;}_0x54440f[_0x2e43('0x1c')](_0x571662);return _0x54440f[_0x2e43('0x20')]('Content-Range',_0x48a6ca+'-'+_0x4d0b1d+'/'+_0x16b30e)[_0x2e43('0x1d')](_0x516362);}return null;};}function patchUpdates(_0xfb638d){return function(_0x3669c4){try{jsonpatch[_0x2e43('0x21')](_0x3669c4,_0xfb638d,!![]);}catch(_0x3148fe){return BPromise['reject'](_0x3148fe);}return _0x3669c4[_0x2e43('0x22')]();};}function saveUpdates(_0x29a0b8,_0x4ce073){return function(_0x5d2d69){if(_0x5d2d69){return _0x5d2d69[_0x2e43('0x23')](_0x29a0b8)[_0x2e43('0x24')](function(_0x51c8a5){return _0x51c8a5;});}return null;};}function removeEntity(_0x5aa92b,_0x461e54){return function(_0x19e41c){if(_0x19e41c){return _0x19e41c['destroy']()[_0x2e43('0x24')](function(){_0x5aa92b['status'](0xcc)[_0x2e43('0x1b')]();});}};}function handleEntityNotFound(_0x1b0c8d,_0x302989){return function(_0x526df4){if(!_0x526df4){_0x1b0c8d[_0x2e43('0x1a')](0x194);}return _0x526df4;};}function handleError(_0x22a991,_0x3bd959){_0x3bd959=_0x3bd959||0x1f4;return function(_0xf54ade){logger['error'](_0xf54ade[_0x2e43('0x25')]);if(_0xf54ade[_0x2e43('0x26')]){delete _0xf54ade[_0x2e43('0x26')];}_0x22a991[_0x2e43('0x1c')](_0x3bd959)[_0x2e43('0x27')](_0xf54ade);};}exports[_0x2e43('0x28')]=function(_0x90d9fd,_0x7d1e9f){var _0x10d212={},_0x4fa272={},_0x226d8b={'count':0x0,'rows':[]};var _0xf3f03d=db['ServicenowField'][_0x2e43('0x29')];_0x4fa272['model']=_['keys'](_0xf3f03d);_0x4fa272[_0x2e43('0x2a')]=_[_0x2e43('0x2b')](_0x90d9fd[_0x2e43('0x2a')]);_0x4fa272[_0x2e43('0x2c')]=_[_0x2e43('0x2d')](_0x4fa272[_0x2e43('0x2e')],_0x4fa272[_0x2e43('0x2a')]);_0x10d212['attributes']=_[_0x2e43('0x2d')](_0x4fa272[_0x2e43('0x2e')],qs['fields'](_0x90d9fd['query'][_0x2e43('0x2f')]));_0x10d212['attributes']=_0x10d212['attributes']['length']?_0x10d212['attributes']:_0x4fa272['model'];if(!_0x90d9fd[_0x2e43('0x2a')]['hasOwnProperty'](_0x2e43('0x30'))){_0x10d212[_0x2e43('0x1f')]=qs['limit'](_0x90d9fd[_0x2e43('0x2a')]['limit']);_0x10d212[_0x2e43('0x31')]=qs[_0x2e43('0x31')](_0x90d9fd[_0x2e43('0x2a')][_0x2e43('0x31')]);}_0x10d212[_0x2e43('0x32')]=qs['sort'](_0x90d9fd[_0x2e43('0x2a')][_0x2e43('0x33')]);_0x10d212['where']=qs[_0x2e43('0x2c')](_['pick'](_0x90d9fd[_0x2e43('0x2a')],_0x4fa272[_0x2e43('0x2c')]));if(_0x90d9fd[_0x2e43('0x2a')]['filter']){_0x10d212[_0x2e43('0x34')]=_[_0x2e43('0x35')](_0x10d212[_0x2e43('0x34')],{'$or':_[_0x2e43('0x36')](_0xf3f03d,function(_0x12c4d7){if(_0x12c4d7[_0x2e43('0x37')][_0x2e43('0x38')]!==_0x2e43('0x39')){var _0x35ee93={};_0x35ee93[_0x12c4d7['field']]={'$like':'%'+_0x90d9fd['query'][_0x2e43('0x3a')]+'%'};return _0x35ee93;}})});}_0x10d212=_[_0x2e43('0x35')]({},_0x10d212,_0x90d9fd[_0x2e43('0x3b')]);var _0x231f10={'where':_0x10d212['where']};return db[_0x2e43('0x3c')][_0x2e43('0x1e')](_0x231f10)[_0x2e43('0x24')](function(_0x2807cc){_0x226d8b['count']=_0x2807cc;if(_0x90d9fd['query'][_0x2e43('0x3d')]){_0x10d212['include']=[{'all':!![]}];}return db[_0x2e43('0x3c')][_0x2e43('0x3e')](_0x10d212);})[_0x2e43('0x24')](function(_0xf25993){_0x226d8b[_0x2e43('0x3f')]=_0xf25993;return _0x226d8b;})['then'](respondWithFilteredResult(_0x7d1e9f,_0x10d212))[_0x2e43('0x40')](handleError(_0x7d1e9f,null));};exports[_0x2e43('0x41')]=function(_0x2183b6,_0x10e35a){var _0x1d5bca={'raw':!![],'where':{'id':_0x2183b6[_0x2e43('0x42')]['id']}},_0x335f2e={};_0x335f2e['model']=_[_0x2e43('0x2b')](db[_0x2e43('0x3c')][_0x2e43('0x29')]);_0x335f2e[_0x2e43('0x2a')]=_[_0x2e43('0x2b')](_0x2183b6[_0x2e43('0x2a')]);_0x335f2e[_0x2e43('0x2c')]=_[_0x2e43('0x2d')](_0x335f2e['model'],_0x335f2e[_0x2e43('0x2a')]);_0x1d5bca[_0x2e43('0x43')]=_['intersection'](_0x335f2e['model'],qs[_0x2e43('0x2f')](_0x2183b6['query']['fields']));_0x1d5bca[_0x2e43('0x43')]=_0x1d5bca[_0x2e43('0x43')][_0x2e43('0x44')]?_0x1d5bca[_0x2e43('0x43')]:_0x335f2e[_0x2e43('0x2e')];if(_0x2183b6['query'][_0x2e43('0x3d')]){_0x1d5bca['include']=[{'all':!![]}];}_0x1d5bca=_['merge']({},_0x1d5bca,_0x2183b6[_0x2e43('0x3b')]);return db[_0x2e43('0x3c')][_0x2e43('0x45')](_0x1d5bca)['then'](handleEntityNotFound(_0x10e35a,null))[_0x2e43('0x24')](respondWithResult(_0x10e35a,null))['catch'](handleError(_0x10e35a,null));};exports[_0x2e43('0x46')]=function(_0x59e01f,_0x12c3b2){return db[_0x2e43('0x3c')][_0x2e43('0x46')](_0x59e01f[_0x2e43('0x47')],{})[_0x2e43('0x24')](respondWithResult(_0x12c3b2,0xc9))['catch'](handleError(_0x12c3b2,null));};exports[_0x2e43('0x23')]=function(_0x540952,_0x5ea9f6){if(_0x540952[_0x2e43('0x47')]['id']){delete _0x540952[_0x2e43('0x47')]['id'];}return db['ServicenowField'][_0x2e43('0x45')]({'where':{'id':_0x540952['params']['id']}})[_0x2e43('0x24')](handleEntityNotFound(_0x5ea9f6,null))[_0x2e43('0x24')](saveUpdates(_0x540952[_0x2e43('0x47')],null))[_0x2e43('0x24')](respondWithResult(_0x5ea9f6,null))[_0x2e43('0x40')](handleError(_0x5ea9f6,null));};exports['destroy']=function(_0x4f17aa,_0x3d9ca0){return db[_0x2e43('0x3c')][_0x2e43('0x45')]({'where':{'id':_0x4f17aa[_0x2e43('0x42')]['id']}})['then'](handleEntityNotFound(_0x3d9ca0,null))[_0x2e43('0x24')](removeEntity(_0x3d9ca0,null))[_0x2e43('0x40')](handleError(_0x3d9ca0,null));};
\ No newline at end of file
+var _0x2842=['sox','to-csv','ejs','lodash','squel','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','set','apply','reject','save','update','destroy','then','sendStatus','error','stack','name','send','index','ServicenowField','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','params','catch','create','body','find','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','path'];(function(_0x2f38ae,_0xef2739){var _0x170b7c=function(_0x4e439b){while(--_0x4e439b){_0x2f38ae['push'](_0x2f38ae['shift']());}};_0x170b7c(++_0xef2739);}(_0x2842,0x1ba));var _0x2284=function(_0x1035c1,_0x2d8583){_0x1035c1=_0x1035c1-0x0;var _0x308d67=_0x2842[_0x1035c1];return _0x308d67;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x2284('0x0'));var rimraf=require(_0x2284('0x1'));var zipdir=require(_0x2284('0x2'));var jsonpatch=require(_0x2284('0x3'));var rp=require(_0x2284('0x4'));var moment=require('moment');var BPromise=require(_0x2284('0x5'));var Mustache=require(_0x2284('0x6'));var util=require('util');var path=require(_0x2284('0x7'));var sox=require(_0x2284('0x8'));var csv=require(_0x2284('0x9'));var ejs=require(_0x2284('0xa'));var fs=require('fs');var _=require(_0x2284('0xb'));var squel=require(_0x2284('0xc'));var crypto=require('crypto');var jsforce=require(_0x2284('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x2284('0x9'));var querystring=require(_0x2284('0xe'));var Papa=require(_0x2284('0xf'));var Redis=require('ioredis');var authService=require(_0x2284('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x2284('0x11'));var logger=require(_0x2284('0x12'))(_0x2284('0x13'));var utils=require(_0x2284('0x14'));var config=require(_0x2284('0x15'));var db=require(_0x2284('0x16'))['db'];function respondWithStatusCode(_0xcdbe21,_0x57b9f1){_0x57b9f1=_0x57b9f1||0xcc;return function(_0x3523ef){if(_0x3523ef){return _0xcdbe21['sendStatus'](_0x57b9f1);}return _0xcdbe21[_0x2284('0x17')](_0x57b9f1)[_0x2284('0x18')]();};}function respondWithResult(_0x419d51,_0x39a510){_0x39a510=_0x39a510||0xc8;return function(_0x56b45b){if(_0x56b45b){return _0x419d51[_0x2284('0x17')](_0x39a510)[_0x2284('0x19')](_0x56b45b);}};}function respondWithFilteredResult(_0x59bad7,_0x41de4c){return function(_0x5cb2a7){if(_0x5cb2a7){var _0x4e09ba=_0x5cb2a7[_0x2284('0x1a')],_0x390719=_0x41de4c[_0x2284('0x1b')],_0x18b7a0=_0x41de4c['offset']+_0x41de4c[_0x2284('0x1c')],_0x46dfe2;if(_0x18b7a0>=_0x4e09ba){_0x18b7a0=_0x4e09ba;_0x46dfe2=0xc8;}else{_0x46dfe2=0xce;}_0x59bad7[_0x2284('0x17')](_0x46dfe2);return _0x59bad7[_0x2284('0x1d')]('Content-Range',_0x390719+'-'+_0x18b7a0+'/'+_0x4e09ba)[_0x2284('0x19')](_0x5cb2a7);}return null;};}function patchUpdates(_0x1108c3){return function(_0x177530){try{jsonpatch[_0x2284('0x1e')](_0x177530,_0x1108c3,!![]);}catch(_0x499a9a){return BPromise[_0x2284('0x1f')](_0x499a9a);}return _0x177530[_0x2284('0x20')]();};}function saveUpdates(_0x48c319,_0x823e25){return function(_0x55733f){if(_0x55733f){return _0x55733f[_0x2284('0x21')](_0x48c319)['then'](function(_0x34f1d4){return _0x34f1d4;});}return null;};}function removeEntity(_0x5d35ef,_0x36b6bc){return function(_0x132b87){if(_0x132b87){return _0x132b87[_0x2284('0x22')]()[_0x2284('0x23')](function(){_0x5d35ef[_0x2284('0x17')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3e8f59,_0x43b99d){return function(_0x173303){if(!_0x173303){_0x3e8f59[_0x2284('0x24')](0x194);}return _0x173303;};}function handleError(_0x470002,_0x4fb08b){_0x4fb08b=_0x4fb08b||0x1f4;return function(_0x23e6f8){logger[_0x2284('0x25')](_0x23e6f8[_0x2284('0x26')]);if(_0x23e6f8[_0x2284('0x27')]){delete _0x23e6f8[_0x2284('0x27')];}_0x470002[_0x2284('0x17')](_0x4fb08b)[_0x2284('0x28')](_0x23e6f8);};}exports[_0x2284('0x29')]=function(_0x3aa78d,_0x5852c2){var _0x3b5f00={},_0x54c29c={},_0x36b42a={'count':0x0,'rows':[]};var _0x11049c=db[_0x2284('0x2a')][_0x2284('0x2b')];_0x54c29c['model']=_[_0x2284('0x2c')](_0x11049c);_0x54c29c[_0x2284('0x2d')]=_['keys'](_0x3aa78d[_0x2284('0x2d')]);_0x54c29c[_0x2284('0x2e')]=_[_0x2284('0x2f')](_0x54c29c[_0x2284('0x30')],_0x54c29c['query']);_0x3b5f00[_0x2284('0x31')]=_[_0x2284('0x2f')](_0x54c29c[_0x2284('0x30')],qs[_0x2284('0x32')](_0x3aa78d[_0x2284('0x2d')]['fields']));_0x3b5f00[_0x2284('0x31')]=_0x3b5f00[_0x2284('0x31')][_0x2284('0x33')]?_0x3b5f00[_0x2284('0x31')]:_0x54c29c[_0x2284('0x30')];if(!_0x3aa78d[_0x2284('0x2d')][_0x2284('0x34')](_0x2284('0x35'))){_0x3b5f00[_0x2284('0x1c')]=qs[_0x2284('0x1c')](_0x3aa78d['query'][_0x2284('0x1c')]);_0x3b5f00['offset']=qs[_0x2284('0x1b')](_0x3aa78d['query'][_0x2284('0x1b')]);}_0x3b5f00[_0x2284('0x36')]=qs[_0x2284('0x37')](_0x3aa78d[_0x2284('0x2d')][_0x2284('0x37')]);_0x3b5f00[_0x2284('0x38')]=qs[_0x2284('0x2e')](_[_0x2284('0x39')](_0x3aa78d[_0x2284('0x2d')],_0x54c29c[_0x2284('0x2e')]));if(_0x3aa78d[_0x2284('0x2d')][_0x2284('0x3a')]){_0x3b5f00[_0x2284('0x38')]=_[_0x2284('0x3b')](_0x3b5f00['where'],{'$or':_[_0x2284('0x3c')](_0x11049c,function(_0x319acf){if(_0x319acf['type'][_0x2284('0x3d')]!==_0x2284('0x3e')){var _0x5a7b4e={};_0x5a7b4e[_0x319acf[_0x2284('0x3f')]]={'$like':'%'+_0x3aa78d[_0x2284('0x2d')][_0x2284('0x3a')]+'%'};return _0x5a7b4e;}})});}_0x3b5f00=_['merge']({},_0x3b5f00,_0x3aa78d[_0x2284('0x40')]);var _0x1c7df2={'where':_0x3b5f00[_0x2284('0x38')]};return db[_0x2284('0x2a')][_0x2284('0x1a')](_0x1c7df2)[_0x2284('0x23')](function(_0x419e8f){_0x36b42a[_0x2284('0x1a')]=_0x419e8f;if(_0x3aa78d[_0x2284('0x2d')][_0x2284('0x41')]){_0x3b5f00[_0x2284('0x42')]=[{'all':!![]}];}return db['ServicenowField'][_0x2284('0x43')](_0x3b5f00);})['then'](function(_0x475bf9){_0x36b42a[_0x2284('0x44')]=_0x475bf9;return _0x36b42a;})[_0x2284('0x23')](respondWithFilteredResult(_0x5852c2,_0x3b5f00))['catch'](handleError(_0x5852c2,null));};exports[_0x2284('0x45')]=function(_0x542dd2,_0x8c52e){var _0x2208fc={'raw':!![],'where':{'id':_0x542dd2[_0x2284('0x46')]['id']}},_0x5972fc={};_0x5972fc['model']=_['keys'](db[_0x2284('0x2a')][_0x2284('0x2b')]);_0x5972fc[_0x2284('0x2d')]=_[_0x2284('0x2c')](_0x542dd2[_0x2284('0x2d')]);_0x5972fc['filters']=_['intersection'](_0x5972fc[_0x2284('0x30')],_0x5972fc[_0x2284('0x2d')]);_0x2208fc[_0x2284('0x31')]=_[_0x2284('0x2f')](_0x5972fc[_0x2284('0x30')],qs[_0x2284('0x32')](_0x542dd2[_0x2284('0x2d')][_0x2284('0x32')]));_0x2208fc['attributes']=_0x2208fc[_0x2284('0x31')]['length']?_0x2208fc[_0x2284('0x31')]:_0x5972fc[_0x2284('0x30')];if(_0x542dd2[_0x2284('0x2d')][_0x2284('0x41')]){_0x2208fc[_0x2284('0x42')]=[{'all':!![]}];}_0x2208fc=_[_0x2284('0x3b')]({},_0x2208fc,_0x542dd2['options']);return db[_0x2284('0x2a')]['find'](_0x2208fc)[_0x2284('0x23')](handleEntityNotFound(_0x8c52e,null))[_0x2284('0x23')](respondWithResult(_0x8c52e,null))[_0x2284('0x47')](handleError(_0x8c52e,null));};exports[_0x2284('0x48')]=function(_0x4bca0c,_0x27d994){return db[_0x2284('0x2a')][_0x2284('0x48')](_0x4bca0c['body'],{})[_0x2284('0x23')](respondWithResult(_0x27d994,0xc9))[_0x2284('0x47')](handleError(_0x27d994,null));};exports['update']=function(_0x1b3ae3,_0x5799e4){if(_0x1b3ae3[_0x2284('0x49')]['id']){delete _0x1b3ae3['body']['id'];}return db[_0x2284('0x2a')]['find']({'where':{'id':_0x1b3ae3[_0x2284('0x46')]['id']}})[_0x2284('0x23')](handleEntityNotFound(_0x5799e4,null))['then'](saveUpdates(_0x1b3ae3[_0x2284('0x49')],null))['then'](respondWithResult(_0x5799e4,null))['catch'](handleError(_0x5799e4,null));};exports[_0x2284('0x22')]=function(_0x59fbb6,_0x5178cb){return db[_0x2284('0x2a')][_0x2284('0x4a')]({'where':{'id':_0x59fbb6[_0x2284('0x46')]['id']}})[_0x2284('0x23')](handleEntityNotFound(_0x5178cb,null))[_0x2284('0x23')](removeEntity(_0x5178cb,null))['catch'](handleError(_0x5178cb,null));};
\ No newline at end of file
index 82dd902..424019c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb9d8=['lodash','util','../../config/logger','api','moment','path','rimraf','../../config/environment','./intServicenowField.attributes','exports','define','int_servicenow_fields','servicenow_unique_index','idField'];(function(_0x1259c4,_0x14cb41){var _0x27eba2=function(_0x3b3ba6){while(--_0x3b3ba6){_0x1259c4['push'](_0x1259c4['shift']());}};_0x27eba2(++_0x14cb41);}(_0xb9d8,0x10a));var _0x8b9d=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xb9d8[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x8b9d('0x0'));var util=require(_0x8b9d('0x1'));var logger=require(_0x8b9d('0x2'))(_0x8b9d('0x3'));var moment=require(_0x8b9d('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x8b9d('0x5'));var rimraf=require(_0x8b9d('0x6'));var config=require(_0x8b9d('0x7'));var attributes=require(_0x8b9d('0x8'));module[_0x8b9d('0x9')]=function(_0x42493d,_0x3dc744){return _0x42493d[_0x8b9d('0xa')]('ServicenowField',attributes,{'tableName':_0x8b9d('0xb'),'paranoid':![],'indexes':[{'name':_0x8b9d('0xc'),'fields':[_0x8b9d('0xd'),'FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xce6f=['bluebird','request-promise','path','rimraf','../../config/environment','./intServicenowField.attributes','exports','FieldId','lodash','../../config/logger','api','moment'];(function(_0x460dae,_0x3a907f){var _0x36e6d0=function(_0x447057){while(--_0x447057){_0x460dae['push'](_0x460dae['shift']());}};_0x36e6d0(++_0x3a907f);}(_0xce6f,0x194));var _0xfce6=function(_0x4b8824,_0x474b85){_0x4b8824=_0x4b8824-0x0;var _0x434ad3=_0xce6f[_0x4b8824];return _0x434ad3;};'use strict';var _=require(_0xfce6('0x0'));var util=require('util');var logger=require(_0xfce6('0x1'))(_0xfce6('0x2'));var moment=require(_0xfce6('0x3'));var BPromise=require(_0xfce6('0x4'));var rp=require(_0xfce6('0x5'));var fs=require('fs');var path=require(_0xfce6('0x6'));var rimraf=require(_0xfce6('0x7'));var config=require(_0xfce6('0x8'));var attributes=require(_0xfce6('0x9'));module[_0xfce6('0xa')]=function(_0x1159c2,_0x35ec9e){return _0x1159c2['define']('ServicenowField',attributes,{'tableName':'int_servicenow_fields','paranoid':![],'indexes':[{'name':'servicenow_unique_index','fields':['idField',_0xfce6('0xb')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index b8a44da..7f33b97 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa456=['message','result','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','then','info','ServicenowField,\x20%s,\x20%s','request\x20sent','debug','ServicenowField,\x20%s,\x20%s,\x20%s','error'];(function(_0x52f4b8,_0x5eaed9){var _0x52c0f9=function(_0x4a5e95){while(--_0x4a5e95){_0x52f4b8['push'](_0x52f4b8['shift']());}};_0x52c0f9(++_0x5eaed9);}(_0xa456,0x142));var _0x6a45=function(_0x45783c,_0x49c56d){_0x45783c=_0x45783c-0x0;var _0x1161da=_0xa456[_0x45783c];return _0x1161da;};'use strict';var _=require(_0x6a45('0x0'));var util=require(_0x6a45('0x1'));var moment=require(_0x6a45('0x2'));var BPromise=require(_0x6a45('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x6a45('0x4'));var db=require(_0x6a45('0x5'))['db'];var utils=require(_0x6a45('0x6'));var logger=require('../../config/logger')(_0x6a45('0x7'));var config=require(_0x6a45('0x8'));var jayson=require(_0x6a45('0x9'));var client=jayson[_0x6a45('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x25cf8d,_0x26bfc0,_0x214514){return new BPromise(function(_0x19e67c,_0x3deb09){return client['request'](_0x25cf8d,_0x214514)[_0x6a45('0xb')](function(_0x517040){logger[_0x6a45('0xc')](_0x6a45('0xd'),_0x26bfc0,_0x6a45('0xe'));logger[_0x6a45('0xf')](_0x6a45('0x10'),_0x26bfc0,'request\x20sent',JSON['stringify'](_0x517040));if(_0x517040[_0x6a45('0x11')]){if(_0x517040[_0x6a45('0x11')]['code']===0x1f4){logger['error']('ServicenowField,\x20%s,\x20%s',_0x26bfc0,_0x517040[_0x6a45('0x11')][_0x6a45('0x12')]);return _0x3deb09(_0x517040[_0x6a45('0x11')][_0x6a45('0x12')]);}logger[_0x6a45('0x11')]('ServicenowField,\x20%s,\x20%s',_0x26bfc0,_0x517040['error'][_0x6a45('0x12')]);return _0x19e67c(_0x517040[_0x6a45('0x11')]['message']);}else{logger[_0x6a45('0xc')](_0x6a45('0xd'),_0x26bfc0,_0x6a45('0xe'));_0x19e67c(_0x517040[_0x6a45('0x13')]['message']);}})['catch'](function(_0x49023f){logger[_0x6a45('0x11')](_0x6a45('0xd'),_0x26bfc0,_0x49023f);_0x3deb09(_0x49023f);});});}
\ No newline at end of file
+var _0x9582=['error','code','message','info','result','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','ServicenowField,\x20%s,\x20%s','debug','ServicenowField,\x20%s,\x20%s,\x20%s','request\x20sent','stringify'];(function(_0x25ccff,_0x4ff95d){var _0x528b99=function(_0x59c602){while(--_0x59c602){_0x25ccff['push'](_0x25ccff['shift']());}};_0x528b99(++_0x4ff95d);}(_0x9582,0x95));var _0x2958=function(_0x196aaa,_0x482880){_0x196aaa=_0x196aaa-0x0;var _0x1edb47=_0x9582[_0x196aaa];return _0x1edb47;};'use strict';var _=require(_0x2958('0x0'));var util=require(_0x2958('0x1'));var moment=require(_0x2958('0x2'));var BPromise=require(_0x2958('0x3'));var rs=require(_0x2958('0x4'));var fs=require('fs');var Redis=require(_0x2958('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x2958('0x6'));var logger=require(_0x2958('0x7'))(_0x2958('0x8'));var config=require(_0x2958('0x9'));var jayson=require(_0x2958('0xa'));var client=jayson[_0x2958('0xb')][_0x2958('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x309525,_0xa385ec,_0x2e571b){return new BPromise(function(_0x56ca85,_0x5ec1b3){return client[_0x2958('0xd')](_0x309525,_0x2e571b)['then'](function(_0x10db1e){logger['info'](_0x2958('0xe'),_0xa385ec,'request\x20sent');logger[_0x2958('0xf')](_0x2958('0x10'),_0xa385ec,_0x2958('0x11'),JSON[_0x2958('0x12')](_0x10db1e));if(_0x10db1e[_0x2958('0x13')]){if(_0x10db1e['error'][_0x2958('0x14')]===0x1f4){logger[_0x2958('0x13')](_0x2958('0xe'),_0xa385ec,_0x10db1e[_0x2958('0x13')][_0x2958('0x15')]);return _0x5ec1b3(_0x10db1e[_0x2958('0x13')][_0x2958('0x15')]);}logger[_0x2958('0x13')]('ServicenowField,\x20%s,\x20%s',_0xa385ec,_0x10db1e[_0x2958('0x13')][_0x2958('0x15')]);return _0x56ca85(_0x10db1e['error']['message']);}else{logger[_0x2958('0x16')](_0x2958('0xe'),_0xa385ec,'request\x20sent');_0x56ca85(_0x10db1e[_0x2958('0x17')]['message']);}})['catch'](function(_0x429d42){logger[_0x2958('0x13')]('ServicenowField,\x20%s,\x20%s',_0xa385ec,_0x429d42);_0x5ec1b3(_0x429d42);});});}
\ No newline at end of file
index e9dd154..69cdb18 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xce67=['exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./intSugarcrmAccount.controller','isAuthenticated','index','get','/:id','/:id/configurations','getConfigurations','getFields','create','post','addConfiguration','update','delete','destroy'];(function(_0x3424b7,_0xe50ee5){var _0x40b9ed=function(_0x3059a8){while(--_0x3059a8){_0x3424b7['push'](_0x3424b7['shift']());}};_0x40b9ed(++_0xe50ee5);}(_0xce67,0x1b9));var _0x7ce6=function(_0x19a401,_0x39df5e){_0x19a401=_0x19a401-0x0;var _0x2666b1=_0xce67[_0x19a401];return _0x2666b1;};'use strict';var multer=require(_0x7ce6('0x0'));var util=require(_0x7ce6('0x1'));var path=require(_0x7ce6('0x2'));var timeout=require('connect-timeout');var express=require(_0x7ce6('0x3'));var router=express['Router']();var auth=require(_0x7ce6('0x4'));var interaction=require(_0x7ce6('0x5'));var config=require(_0x7ce6('0x6'));var controller=require(_0x7ce6('0x7'));router['get']('/',auth[_0x7ce6('0x8')](),controller[_0x7ce6('0x9')]);router[_0x7ce6('0xa')](_0x7ce6('0xb'),auth['isAuthenticated'](),controller['show']);router[_0x7ce6('0xa')](_0x7ce6('0xc'),auth[_0x7ce6('0x8')](),controller[_0x7ce6('0xd')]);router[_0x7ce6('0xa')]('/:id/fields',auth['isAuthenticated'](),controller[_0x7ce6('0xe')]);router['post']('/',auth[_0x7ce6('0x8')](),controller[_0x7ce6('0xf')]);router[_0x7ce6('0x10')]('/:id/configurations',auth['isAuthenticated'](),controller[_0x7ce6('0x11')]);router['put'](_0x7ce6('0xb'),auth[_0x7ce6('0x8')](),controller[_0x7ce6('0x12')]);router[_0x7ce6('0x13')]('/:id',auth[_0x7ce6('0x8')](),controller[_0x7ce6('0x14')]);module[_0x7ce6('0x15')]=router;
\ No newline at end of file
+var _0xf585=['/:id/fields','post','/:id/configurations','addConfiguration','put','/:id','update','delete','destroy','exports','multer','connect-timeout','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','getConfigurations'];(function(_0x11ce46,_0x177a85){var _0x368a1e=function(_0x425454){while(--_0x425454){_0x11ce46['push'](_0x11ce46['shift']());}};_0x368a1e(++_0x177a85);}(_0xf585,0x186));var _0x5f58=function(_0x3ff085,_0x27c92e){_0x3ff085=_0x3ff085-0x0;var _0x2b68c3=_0xf585[_0x3ff085];return _0x2b68c3;};'use strict';var multer=require(_0x5f58('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x5f58('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0x5f58('0x2'));var interaction=require(_0x5f58('0x3'));var config=require(_0x5f58('0x4'));var controller=require('./intSugarcrmAccount.controller');router[_0x5f58('0x5')]('/',auth[_0x5f58('0x6')](),controller[_0x5f58('0x7')]);router['get']('/:id',auth[_0x5f58('0x6')](),controller['show']);router[_0x5f58('0x5')]('/:id/configurations',auth['isAuthenticated'](),controller[_0x5f58('0x8')]);router[_0x5f58('0x5')](_0x5f58('0x9'),auth['isAuthenticated'](),controller['getFields']);router['post']('/',auth[_0x5f58('0x6')](),controller['create']);router[_0x5f58('0xa')](_0x5f58('0xb'),auth['isAuthenticated'](),controller[_0x5f58('0xc')]);router[_0x5f58('0xd')](_0x5f58('0xe'),auth['isAuthenticated'](),controller[_0x5f58('0xf')]);router[_0x5f58('0x10')]('/:id',auth['isAuthenticated'](),controller[_0x5f58('0x11')]);module[_0x5f58('0x12')]=router;
\ No newline at end of file
index 77c374d..50e497c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0cd8=['remoteUri','sequelize','STRING','username'];(function(_0x171449,_0x3330b4){var _0x2fd9c0=function(_0x3b1272){while(--_0x3b1272){_0x171449['push'](_0x171449['shift']());}};_0x2fd9c0(++_0x3330b4);}(_0x0cd8,0x95));var _0x80cd=function(_0x1b230b,_0x398ef2){_0x1b230b=_0x1b230b-0x0;var _0x14cada=_0x0cd8[_0x1b230b];return _0x14cada;};'use strict';var Sequelize=require(_0x80cd('0x0'));module['exports']={'name':{'type':Sequelize[_0x80cd('0x1')]},'description':{'type':Sequelize[_0x80cd('0x1')]},'username':{'type':Sequelize[_0x80cd('0x1')],'unique':_0x80cd('0x2')},'password':{'type':Sequelize[_0x80cd('0x1')]},'remoteUri':{'type':Sequelize[_0x80cd('0x1')],'unique':_0x80cd('0x3')},'serverUrl':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xc1e1=['exports','STRING','username','remoteUri'];(function(_0x28edda,_0xbd447a){var _0x21f4a4=function(_0x5ae05e){while(--_0x5ae05e){_0x28edda['push'](_0x28edda['shift']());}};_0x21f4a4(++_0xbd447a);}(_0xc1e1,0x130));var _0x1c1e=function(_0x579940,_0x5ba0b5){_0x579940=_0x579940-0x0;var _0x150486=_0xc1e1[_0x579940];return _0x150486;};'use strict';var Sequelize=require('sequelize');module[_0x1c1e('0x0')]={'name':{'type':Sequelize[_0x1c1e('0x1')]},'description':{'type':Sequelize[_0x1c1e('0x1')]},'username':{'type':Sequelize[_0x1c1e('0x1')],'unique':_0x1c1e('0x2')},'password':{'type':Sequelize[_0x1c1e('0x1')]},'remoteUri':{'type':Sequelize[_0x1c1e('0x1')],'unique':_0x1c1e('0x3')},'serverUrl':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 35df779..ff7eefe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa3e=['parent_name','direction','username','password','remoteUri','slice','substring','lastIndexOf','POST','format','/service/v4_1/rest.php','login','JSON','%s%s','get_module_fields','Calls','module_fields','remove','includes','label','endsWith','values','value','statusCode','Wrong\x20credentials','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../config/license/hardware','../../config/logger','api','../../mysqldb','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','SugarcrmAccount,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','result','catch','sendStatus','end','status','json','count','offset','limit','Content-Range','reject','save','update','destroy','send','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','merge','map','type','key','VIRTUAL','field','filter','options','SugarcrmAccount','includeAll','include','findAll','rows','params','rawAttributes','find','create','body','getConfigurations','findOne','Subjects','getSubjects','Descriptions','getDescriptions','channel','SugarcrmConfiguration','getFields','name','assigned_user_id','description','date_start','duration_hours','duration_minutes','parent_type'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0xaa3e,0x193));var _0xeaa3=function(_0x249e96,_0x3ea39d){_0x249e96=_0x249e96-0x0;var _0x17444c=_0xaa3e[_0x249e96];return _0x17444c;};'use strict';var pdf=require(_0xeaa3('0x0'));var emlformat=require(_0xeaa3('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xeaa3('0x2'));var jsonpatch=require(_0xeaa3('0x3'));var rp=require(_0xeaa3('0x4'));var moment=require('moment');var BPromise=require(_0xeaa3('0x5'));var Mustache=require(_0xeaa3('0x6'));var util=require(_0xeaa3('0x7'));var path=require(_0xeaa3('0x8'));var sox=require(_0xeaa3('0x9'));var csv=require('to-csv');var ejs=require(_0xeaa3('0xa'));var fs=require('fs');var _=require(_0xeaa3('0xb'));var squel=require(_0xeaa3('0xc'));var crypto=require(_0xeaa3('0xd'));var jsforce=require(_0xeaa3('0xe'));var deskjs=require(_0xeaa3('0xf'));var toCsv=require(_0xeaa3('0x10'));var querystring=require(_0xeaa3('0x11'));var Papa=require(_0xeaa3('0x12'));var Redis=require(_0xeaa3('0x13'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0xeaa3('0x14'));var logger=require(_0xeaa3('0x15'))(_0xeaa3('0x16'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xeaa3('0x17'))['db'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0xeaa3('0x18'));var client=jayson[_0xeaa3('0x19')][_0xeaa3('0x1a')]({'port':0x232a});function checkPasswordPattern(_0x335d5b,_0x1bd166,_0xc399fe){if(_0xc399fe){var _0x5d6eaf=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x5d6eaf[_0xeaa3('0x1b')](_0x1bd166)){return _0x335d5b;}else{throw new Error(_0xeaa3('0x1c'));}}else{return _0x335d5b;}}function respondWithRpcPromise(_0x2f008c,_0x4fc4cf,_0x4d9cdd,_0x392973){return new BPromise(function(_0x1b2475,_0x2ccee8){var _0x111696=_0x392973||client;return _0x111696[_0xeaa3('0x1d')](_0x2f008c,_0x4d9cdd)[_0xeaa3('0x1e')](function(_0x2c6ca7){logger['info'](_0xeaa3('0x1f'),_0x4fc4cf,_0xeaa3('0x20'));logger['debug']('SugarcrmAccount,\x20%s,\x20%s,\x20%s',_0x4fc4cf,_0xeaa3('0x20'),JSON[_0xeaa3('0x21')](_0x2c6ca7));if(_0x2c6ca7[_0xeaa3('0x22')]){if(_0x2c6ca7['error'][_0xeaa3('0x23')]===0x1f4){logger[_0xeaa3('0x22')](_0xeaa3('0x1f'),_0x4fc4cf,_0x2c6ca7['error'][_0xeaa3('0x24')]);return _0x2ccee8(_0x2c6ca7[_0xeaa3('0x22')]['message']);}logger['error'](_0xeaa3('0x1f'),_0x4fc4cf,_0x2c6ca7['error'][_0xeaa3('0x24')]);return _0x1b2475(_0x2c6ca7[_0xeaa3('0x22')][_0xeaa3('0x24')]);}else{logger[_0xeaa3('0x25')]('SugarcrmAccount,\x20%s,\x20%s',_0x4fc4cf,_0xeaa3('0x20'));_0x1b2475(_0x2c6ca7[_0xeaa3('0x26')]['message']);}})[_0xeaa3('0x27')](function(_0xed06be){logger[_0xeaa3('0x22')](_0xeaa3('0x1f'),_0x4fc4cf,_0xed06be);_0x2ccee8(_0xed06be);});});}function respondWithStatusCode(_0x56d24a,_0x1924ec){_0x1924ec=_0x1924ec||0xcc;return function(_0x10319d){if(_0x10319d){return _0x56d24a[_0xeaa3('0x28')](_0x1924ec);}return _0x56d24a['status'](_0x1924ec)[_0xeaa3('0x29')]();};}function respondWithResult(_0xb83083,_0x455730){_0x455730=_0x455730||0xc8;return function(_0x164901){if(_0x164901){return _0xb83083[_0xeaa3('0x2a')](_0x455730)[_0xeaa3('0x2b')](_0x164901);}};}function respondWithFilteredResult(_0x352fa4,_0x349f1e){return function(_0x324f7b){if(_0x324f7b){var _0x4baaba=_0x324f7b[_0xeaa3('0x2c')],_0x110a94=_0x349f1e[_0xeaa3('0x2d')],_0x5eec29=_0x349f1e[_0xeaa3('0x2d')]+_0x349f1e[_0xeaa3('0x2e')],_0x749561;if(_0x5eec29>=_0x4baaba){_0x5eec29=_0x4baaba;_0x749561=0xc8;}else{_0x749561=0xce;}_0x352fa4[_0xeaa3('0x2a')](_0x749561);return _0x352fa4['set'](_0xeaa3('0x2f'),_0x110a94+'-'+_0x5eec29+'/'+_0x4baaba)[_0xeaa3('0x2b')](_0x324f7b);}return null;};}function patchUpdates(_0x5cbbd9){return function(_0x496d67){try{jsonpatch['apply'](_0x496d67,_0x5cbbd9,!![]);}catch(_0x298089){return BPromise[_0xeaa3('0x30')](_0x298089);}return _0x496d67[_0xeaa3('0x31')]();};}function saveUpdates(_0x559759,_0x57449b){return function(_0x3e10dc){if(_0x3e10dc){return _0x3e10dc[_0xeaa3('0x32')](_0x559759)[_0xeaa3('0x1e')](function(_0xd216a9){return _0xd216a9;});}return null;};}function removeEntity(_0x2bff7d,_0x2db7da){return function(_0x22ec04){if(_0x22ec04){return _0x22ec04[_0xeaa3('0x33')]()[_0xeaa3('0x1e')](function(){_0x2bff7d[_0xeaa3('0x2a')](0xcc)[_0xeaa3('0x29')]();});}};}function handleEntityNotFound(_0x570e15,_0x413de2){return function(_0x4be7c2){if(!_0x4be7c2){_0x570e15[_0xeaa3('0x28')](0x194);}return _0x4be7c2;};}function handleError(_0x12c6aa,_0x12ec2a){_0x12ec2a=_0x12ec2a||0x1f4;return function(_0x55f4ef){logger[_0xeaa3('0x22')](_0x55f4ef['stack']);if(_0x55f4ef['name']){delete _0x55f4ef['name'];}_0x12c6aa[_0xeaa3('0x2a')](_0x12ec2a)[_0xeaa3('0x34')](_0x55f4ef);};}exports['index']=function(_0xbd35da,_0x5a9bfc){var _0x4492cb={},_0x495f64={},_0x531648={'count':0x0,'rows':[]};var _0x42ad79=db['SugarcrmAccount']['rawAttributes'];_0x495f64[_0xeaa3('0x35')]=_['keys'](_0x42ad79);_0x495f64['query']=_[_0xeaa3('0x36')](_0xbd35da[_0xeaa3('0x37')]);_0x495f64[_0xeaa3('0x38')]=_[_0xeaa3('0x39')](_0x495f64['model'],_0x495f64[_0xeaa3('0x37')]);_0x4492cb[_0xeaa3('0x3a')]=_[_0xeaa3('0x39')](_0x495f64[_0xeaa3('0x35')],qs[_0xeaa3('0x3b')](_0xbd35da[_0xeaa3('0x37')][_0xeaa3('0x3b')]));_0x4492cb['attributes']=_0x4492cb[_0xeaa3('0x3a')][_0xeaa3('0x3c')]?_0x4492cb[_0xeaa3('0x3a')]:_0x495f64[_0xeaa3('0x35')];if(!_0xbd35da[_0xeaa3('0x37')][_0xeaa3('0x3d')](_0xeaa3('0x3e'))){_0x4492cb[_0xeaa3('0x2e')]=qs['limit'](_0xbd35da[_0xeaa3('0x37')]['limit']);_0x4492cb[_0xeaa3('0x2d')]=qs['offset'](_0xbd35da[_0xeaa3('0x37')]['offset']);}_0x4492cb[_0xeaa3('0x3f')]=qs['sort'](_0xbd35da[_0xeaa3('0x37')][_0xeaa3('0x40')]);_0x4492cb[_0xeaa3('0x41')]=qs[_0xeaa3('0x38')](_[_0xeaa3('0x42')](_0xbd35da[_0xeaa3('0x37')],_0x495f64['filters']));if(_0xbd35da[_0xeaa3('0x37')]['filter']){_0x4492cb[_0xeaa3('0x41')]=_[_0xeaa3('0x43')](_0x4492cb['where'],{'$or':_[_0xeaa3('0x44')](_0x42ad79,function(_0x443b1b){if(_0x443b1b[_0xeaa3('0x45')][_0xeaa3('0x46')]!==_0xeaa3('0x47')){var _0x4fa266={};_0x4fa266[_0x443b1b[_0xeaa3('0x48')]]={'$like':'%'+_0xbd35da[_0xeaa3('0x37')][_0xeaa3('0x49')]+'%'};return _0x4fa266;}})});}_0x4492cb=_['merge']({},_0x4492cb,_0xbd35da[_0xeaa3('0x4a')]);var _0x149bc0={'where':_0x4492cb['where']};return db[_0xeaa3('0x4b')]['count'](_0x149bc0)[_0xeaa3('0x1e')](function(_0x254a01){_0x531648['count']=_0x254a01;if(_0xbd35da[_0xeaa3('0x37')][_0xeaa3('0x4c')]){_0x4492cb[_0xeaa3('0x4d')]=[{'all':!![]}];}return db['SugarcrmAccount'][_0xeaa3('0x4e')](_0x4492cb);})[_0xeaa3('0x1e')](function(_0x1bbd02){_0x531648[_0xeaa3('0x4f')]=_0x1bbd02;return _0x531648;})['then'](respondWithFilteredResult(_0x5a9bfc,_0x4492cb))[_0xeaa3('0x27')](handleError(_0x5a9bfc,null));};exports['show']=function(_0x36a8bb,_0x2e8970){var _0x5ae902={'raw':![],'where':{'id':_0x36a8bb[_0xeaa3('0x50')]['id']}},_0x2d0664={};_0x2d0664[_0xeaa3('0x35')]=_['keys'](db[_0xeaa3('0x4b')][_0xeaa3('0x51')]);_0x2d0664[_0xeaa3('0x37')]=_[_0xeaa3('0x36')](_0x36a8bb['query']);_0x2d0664[_0xeaa3('0x38')]=_[_0xeaa3('0x39')](_0x2d0664[_0xeaa3('0x35')],_0x2d0664[_0xeaa3('0x37')]);_0x5ae902['attributes']=_[_0xeaa3('0x39')](_0x2d0664[_0xeaa3('0x35')],qs[_0xeaa3('0x3b')](_0x36a8bb[_0xeaa3('0x37')][_0xeaa3('0x3b')]));_0x5ae902[_0xeaa3('0x3a')]=_0x5ae902[_0xeaa3('0x3a')][_0xeaa3('0x3c')]?_0x5ae902[_0xeaa3('0x3a')]:_0x2d0664['model'];if(_0x36a8bb['query'][_0xeaa3('0x4c')]){_0x5ae902[_0xeaa3('0x4d')]=[{'all':!![]}];}_0x5ae902=_[_0xeaa3('0x43')]({},_0x5ae902,_0x36a8bb[_0xeaa3('0x4a')]);return db[_0xeaa3('0x4b')][_0xeaa3('0x52')](_0x5ae902)[_0xeaa3('0x1e')](handleEntityNotFound(_0x2e8970,null))[_0xeaa3('0x1e')](respondWithResult(_0x2e8970,null))[_0xeaa3('0x27')](handleError(_0x2e8970,null));};exports[_0xeaa3('0x53')]=function(_0x158278,_0x4074a4){return db[_0xeaa3('0x4b')][_0xeaa3('0x53')](_0x158278[_0xeaa3('0x54')],{})[_0xeaa3('0x1e')](respondWithResult(_0x4074a4,0xc9))[_0xeaa3('0x27')](handleError(_0x4074a4,null));};exports[_0xeaa3('0x32')]=function(_0x3a4c78,_0xbd10d8){if(_0x3a4c78[_0xeaa3('0x54')]['id']){delete _0x3a4c78[_0xeaa3('0x54')]['id'];}return db[_0xeaa3('0x4b')][_0xeaa3('0x52')]({'where':{'id':_0x3a4c78[_0xeaa3('0x50')]['id']}})[_0xeaa3('0x1e')](handleEntityNotFound(_0xbd10d8,null))['then'](saveUpdates(_0x3a4c78['body'],null))[_0xeaa3('0x1e')](respondWithResult(_0xbd10d8,null))[_0xeaa3('0x27')](handleError(_0xbd10d8,null));};exports[_0xeaa3('0x33')]=function(_0x1f08b3,_0x33792d){return db['SugarcrmAccount'][_0xeaa3('0x52')]({'where':{'id':_0x1f08b3['params']['id']}})['then'](handleEntityNotFound(_0x33792d,null))[_0xeaa3('0x1e')](removeEntity(_0x33792d,null))[_0xeaa3('0x27')](handleError(_0x33792d,null));};exports[_0xeaa3('0x55')]=function(_0x39bb8f,_0x2eecb9,_0x358641){var _0x4936ff={};var _0x53a862={};var _0x373ec3;var _0x4dd855;return db[_0xeaa3('0x4b')][_0xeaa3('0x56')]({'where':{'id':_0x39bb8f[_0xeaa3('0x50')]['id']}})[_0xeaa3('0x1e')](handleEntityNotFound(_0x2eecb9,null))[_0xeaa3('0x1e')](function(_0x3e5dae){if(_0x3e5dae){_0x373ec3=_0x3e5dae;_0x53a862[_0xeaa3('0x35')]=_['keys'](db['SugarcrmConfiguration']['rawAttributes']);_0x53a862[_0xeaa3('0x37')]=_[_0xeaa3('0x36')](_0x39bb8f[_0xeaa3('0x37')]);_0x53a862[_0xeaa3('0x38')]=_['intersection'](_0x53a862[_0xeaa3('0x35')],_0x53a862[_0xeaa3('0x37')]);_0x4936ff[_0xeaa3('0x3a')]=_[_0xeaa3('0x39')](_0x53a862[_0xeaa3('0x35')],qs['fields'](_0x39bb8f[_0xeaa3('0x37')][_0xeaa3('0x3b')]));_0x4936ff[_0xeaa3('0x3a')]=_0x4936ff[_0xeaa3('0x3a')][_0xeaa3('0x3c')]?_0x4936ff[_0xeaa3('0x3a')]:_0x53a862[_0xeaa3('0x35')];_0x4936ff[_0xeaa3('0x3f')]=qs[_0xeaa3('0x40')](_0x39bb8f[_0xeaa3('0x37')][_0xeaa3('0x40')]);_0x4936ff[_0xeaa3('0x41')]=qs[_0xeaa3('0x38')](_[_0xeaa3('0x42')](_0x39bb8f[_0xeaa3('0x37')],_0x53a862['filters']));if(_0x39bb8f[_0xeaa3('0x37')][_0xeaa3('0x49')]){_0x4936ff[_0xeaa3('0x41')]=_[_0xeaa3('0x43')](_0x4936ff[_0xeaa3('0x41')],{'$or':_['map'](_0x4936ff[_0xeaa3('0x3a')],function(_0x238aa4){var _0x58c083={};_0x58c083[_0x238aa4]={'$like':'%'+_0x39bb8f[_0xeaa3('0x37')][_0xeaa3('0x49')]+'%'};return _0x58c083;})});}_0x4936ff=_['merge']({},_0x4936ff,_0x39bb8f[_0xeaa3('0x4a')]);return _0x373ec3[_0xeaa3('0x55')](_0x4936ff);}})['then'](function(_0x406ca4){if(_0x406ca4){_0x4dd855=_0x406ca4[_0xeaa3('0x3c')];if(!_0x39bb8f[_0xeaa3('0x37')][_0xeaa3('0x3d')]('nolimit')){_0x4936ff[_0xeaa3('0x2e')]=qs[_0xeaa3('0x2e')](_0x39bb8f[_0xeaa3('0x37')][_0xeaa3('0x2e')]);_0x4936ff[_0xeaa3('0x2d')]=qs[_0xeaa3('0x2d')](_0x39bb8f[_0xeaa3('0x37')][_0xeaa3('0x2d')]);}return _0x373ec3[_0xeaa3('0x55')](_0x4936ff);}})[_0xeaa3('0x1e')](function(_0x1ab1d9){if(_0x1ab1d9){return _0x1ab1d9?{'count':_0x4dd855,'rows':_0x1ab1d9}:null;}})[_0xeaa3('0x1e')](respondWithResult(_0x2eecb9,null))[_0xeaa3('0x27')](handleError(_0x2eecb9,null));};exports['addConfiguration']=function(_0x1129ad,_0x3996ad,_0x4c1a1c){if(_0x1129ad[_0xeaa3('0x54')]['id']){delete _0x1129ad[_0xeaa3('0x54')]['id'];}return db[_0xeaa3('0x4b')][_0xeaa3('0x56')]({'where':{'id':_0x1129ad['params']['id']}})['then'](handleEntityNotFound(_0x3996ad,null))[_0xeaa3('0x1e')](function(_0x1874ca){if(_0x1874ca){_0x1129ad['body']['AccountId']=_0x1874ca['id'];_0x1129ad[_0xeaa3('0x54')][_0xeaa3('0x57')]=integrations[_0xeaa3('0x58')](_0x1129ad['body']['channel'],_0x1129ad[_0xeaa3('0x54')]['type']);_0x1129ad[_0xeaa3('0x54')][_0xeaa3('0x59')]=integrations[_0xeaa3('0x5a')](_0x1129ad[_0xeaa3('0x54')][_0xeaa3('0x5b')],_0x1129ad[_0xeaa3('0x54')][_0xeaa3('0x45')]);return db[_0xeaa3('0x5c')]['create'](_0x1129ad[_0xeaa3('0x54')],{'include':[{'model':db['SugarcrmField'],'as':_0xeaa3('0x57')},{'model':db['SugarcrmField'],'as':_0xeaa3('0x59')}]});}return null;})[_0xeaa3('0x1e')](respondWithResult(_0x3996ad,null))[_0xeaa3('0x27')](handleError(_0x3996ad,null));};exports[_0xeaa3('0x5d')]=function(_0x58f8f1,_0x63835,_0x59e566){var _0x520047='';var _0x243c4c=['id',_0xeaa3('0x5e'),_0xeaa3('0x5f'),'created_by',_0xeaa3('0x60'),_0xeaa3('0x61'),_0xeaa3('0x62'),_0xeaa3('0x63'),'parent_id',_0xeaa3('0x64'),_0xeaa3('0x65'),_0xeaa3('0x66')];return db[_0xeaa3('0x4b')]['findOne']({'where':{'id':_0x58f8f1[_0xeaa3('0x50')]['id']},'attributes':['id',_0xeaa3('0x67'),_0xeaa3('0x68'),_0xeaa3('0x69')]})[_0xeaa3('0x1e')](handleEntityNotFound(_0x63835,null))[_0xeaa3('0x1e')](function(_0x3c0857){if(_0x3c0857){_0x520047=_0x3c0857[_0xeaa3('0x69')];var _0x196067=_0x520047[_0xeaa3('0x6a')](-0x1);if(_0x196067==='/'){_0x520047=_0x520047[_0xeaa3('0x6b')](0x0,_0x520047[_0xeaa3('0x6c')](_0x196067));}return rp({'method':_0xeaa3('0x6d'),'uri':util[_0xeaa3('0x6e')]('%s%s',_0x520047,_0xeaa3('0x6f')),'json':!![],'form':{'method':_0xeaa3('0x70'),'input_type':_0xeaa3('0x71'),'response_type':'JSON','rest_data':JSON[_0xeaa3('0x21')]({'user_auth':{'user_name':_0x3c0857['username'],'password':_0x3c0857[_0xeaa3('0x68')],'encryption':'PLAIN'},'application':'xCALLY\x20Motion\x20Integration'})}});}})['then'](function(_0x93fba7){if(_0x93fba7&&_0x93fba7['name']!=='Invalid\x20Login'&&_0x93fba7[_0xeaa3('0x5e')]!=='Password\x20Expired'){return rp({'method':_0xeaa3('0x6d'),'uri':util[_0xeaa3('0x6e')](_0xeaa3('0x72'),_0x520047,'/service/v4_1/rest.php'),'json':!![],'form':{'method':_0xeaa3('0x73'),'input_type':_0xeaa3('0x71'),'response_type':_0xeaa3('0x71'),'rest_data':JSON['stringify']({'session':_0x93fba7['id'],'module_name':_0xeaa3('0x74')})}})[_0xeaa3('0x1e')](function(_0x3f58cf){if(_0x3f58cf){var _0x5a43e6=_['values'](_0x3f58cf[_0xeaa3('0x75')]);_[_0xeaa3('0x76')](_0x5a43e6,function(_0xdeb8fa){return _0x243c4c[_0xeaa3('0x77')](_0xdeb8fa[_0xeaa3('0x5e')]);});return{'count':_0x5a43e6[_0xeaa3('0x3c')],'rows':_['map'](_0x5a43e6,function(_0x358c39){return{'id':_0x358c39['name'],'name':_0x358c39[_0xeaa3('0x78')],'custom':_[_0xeaa3('0x79')](_0x358c39[_0xeaa3('0x5e')],'_c')?!![]:![],'options':_0x358c39[_0xeaa3('0x4a')]?_['map'](_[_0xeaa3('0x7a')](_0x358c39['options']),function(_0x2d5d3d){return{'name':_0x2d5d3d[_0xeaa3('0x7b')],'value':_0x2d5d3d[_0xeaa3('0x5e')]};}):[]};})};}})[_0xeaa3('0x1e')](respondWithResult(_0x63835,null))[_0xeaa3('0x27')](function(_0x27e519){var _0x41e88a=_0x58f8f1[_0xeaa3('0x37')][_0xeaa3('0x1b')]?0x1f4:_0x27e519[_0xeaa3('0x7c')]||0x1f4;logger['error']('getFields,\x20%s,\x20%s,\x20%s',_0xeaa3('0x5d'),_0x41e88a,JSON[_0xeaa3('0x21')](_0x27e519));delete _0x27e519['name'];if(_0x41e88a===0x191){_0x41e88a=0x190;}_0x63835[_0xeaa3('0x2a')](_0x41e88a)[_0xeaa3('0x34')](_0x58f8f1['query'][_0xeaa3('0x1b')]?{'message':_0xeaa3('0x7d'),'statusCode':_0x27e519[_0xeaa3('0x7c')]}:_0x27e519);});}else{var _0x3af2e3=0x1f4;_0x63835[_0xeaa3('0x2a')](_0x3af2e3)[_0xeaa3('0x34')]({'message':_0xeaa3('0x7d'),'statusCode':0x190});}});};
\ No newline at end of file
+var _0x14e8=['SugarcrmAccount,\x20%s,\x20%s','SugarcrmAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','status','count','offset','limit','set','Content-Range','json','apply','reject','then','name','SugarcrmAccount','keys','filters','intersection','model','query','attributes','fields','length','hasOwnProperty','nolimit','sort','pick','filter','where','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','create','update','body','params','destroy','find','getConfigurations','findOne','SugarcrmConfiguration','rawAttributes','order','AccountId','Subjects','channel','Descriptions','SugarcrmField','getFields','assigned_user_id','created_by','description','date_start','duration_hours','duration_minutes','parent_id','direction','username','password','remoteUri','slice','lastIndexOf','format','%s%s','/service/v4_1/rest.php','login','JSON','PLAIN','Invalid\x20Login','Password\x20Expired','POST','get_module_fields','values','module_fields','remove','includes','label','value','test','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','send','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','util','path','sox','to-csv','lodash','squel','crypto','jsforce','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client'];(function(_0x1c9a0a,_0x56a77d){var _0x2fea2c=function(_0x3d1eac){while(--_0x3d1eac){_0x1c9a0a['push'](_0x1c9a0a['shift']());}};_0x2fea2c(++_0x56a77d);}(_0x14e8,0xdb));var _0x814e=function(_0xc90eeb,_0x762091){_0xc90eeb=_0xc90eeb-0x0;var _0x39cfa5=_0x14e8[_0xc90eeb];return _0x39cfa5;};'use strict';var pdf=require(_0x814e('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x814e('0x1'));var zipdir=require(_0x814e('0x2'));var jsonpatch=require(_0x814e('0x3'));var rp=require(_0x814e('0x4'));var moment=require('moment');var BPromise=require(_0x814e('0x5'));var Mustache=require('mustache');var util=require(_0x814e('0x6'));var path=require(_0x814e('0x7'));var sox=require(_0x814e('0x8'));var csv=require(_0x814e('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x814e('0xa'));var squel=require(_0x814e('0xb'));var crypto=require(_0x814e('0xc'));var jsforce=require(_0x814e('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x814e('0x9'));var querystring=require(_0x814e('0xe'));var Papa=require('papaparse');var Redis=require(_0x814e('0xf'));var authService=require(_0x814e('0x10'));var qs=require(_0x814e('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x814e('0x12'))(_0x814e('0x13'));var utils=require(_0x814e('0x14'));var config=require(_0x814e('0x15'));var db=require(_0x814e('0x16'))['db'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0x814e('0x17'));var client=jayson[_0x814e('0x18')]['http']({'port':0x232a});function checkPasswordPattern(_0x5427e1,_0x1d69ef,_0x1bcaa4){if(_0x1bcaa4){var _0x3a435b=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3a435b['test'](_0x1d69ef)){return _0x5427e1;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x5427e1;}}function respondWithRpcPromise(_0x310c4a,_0x39046b,_0x3a49cb,_0x3f68a7){return new BPromise(function(_0x440a80,_0x1ba5f8){var _0x6f58c6=_0x3f68a7||client;return _0x6f58c6['request'](_0x310c4a,_0x3a49cb)['then'](function(_0x1ddb90){logger['info'](_0x814e('0x19'),_0x39046b,'request\x20sent');logger['debug'](_0x814e('0x1a'),_0x39046b,_0x814e('0x1b'),JSON[_0x814e('0x1c')](_0x1ddb90));if(_0x1ddb90[_0x814e('0x1d')]){if(_0x1ddb90[_0x814e('0x1d')][_0x814e('0x1e')]===0x1f4){logger[_0x814e('0x1d')](_0x814e('0x19'),_0x39046b,_0x1ddb90[_0x814e('0x1d')][_0x814e('0x1f')]);return _0x1ba5f8(_0x1ddb90[_0x814e('0x1d')][_0x814e('0x1f')]);}logger[_0x814e('0x1d')]('SugarcrmAccount,\x20%s,\x20%s',_0x39046b,_0x1ddb90[_0x814e('0x1d')][_0x814e('0x1f')]);return _0x440a80(_0x1ddb90['error'][_0x814e('0x1f')]);}else{logger['info'](_0x814e('0x19'),_0x39046b,'request\x20sent');_0x440a80(_0x1ddb90[_0x814e('0x20')]['message']);}})[_0x814e('0x21')](function(_0x538944){logger[_0x814e('0x1d')](_0x814e('0x19'),_0x39046b,_0x538944);_0x1ba5f8(_0x538944);});});}function respondWithStatusCode(_0x3a89b0,_0x2cc340){_0x2cc340=_0x2cc340||0xcc;return function(_0x281f1a){if(_0x281f1a){return _0x3a89b0['sendStatus'](_0x2cc340);}return _0x3a89b0['status'](_0x2cc340)['end']();};}function respondWithResult(_0x374279,_0x126711){_0x126711=_0x126711||0xc8;return function(_0x2a888d){if(_0x2a888d){return _0x374279[_0x814e('0x22')](_0x126711)['json'](_0x2a888d);}};}function respondWithFilteredResult(_0x4b98d9,_0x323bf0){return function(_0x481497){if(_0x481497){var _0x19d36f=_0x481497[_0x814e('0x23')],_0xbf81d6=_0x323bf0[_0x814e('0x24')],_0x3ed172=_0x323bf0[_0x814e('0x24')]+_0x323bf0[_0x814e('0x25')],_0x366247;if(_0x3ed172>=_0x19d36f){_0x3ed172=_0x19d36f;_0x366247=0xc8;}else{_0x366247=0xce;}_0x4b98d9[_0x814e('0x22')](_0x366247);return _0x4b98d9[_0x814e('0x26')](_0x814e('0x27'),_0xbf81d6+'-'+_0x3ed172+'/'+_0x19d36f)[_0x814e('0x28')](_0x481497);}return null;};}function patchUpdates(_0x1825c3){return function(_0x23e029){try{jsonpatch[_0x814e('0x29')](_0x23e029,_0x1825c3,!![]);}catch(_0x165f33){return BPromise[_0x814e('0x2a')](_0x165f33);}return _0x23e029['save']();};}function saveUpdates(_0x1b4a8a,_0x64ff6f){return function(_0x449c75){if(_0x449c75){return _0x449c75['update'](_0x1b4a8a)[_0x814e('0x2b')](function(_0x268564){return _0x268564;});}return null;};}function removeEntity(_0x1fe4df,_0x4b2de8){return function(_0x4bde2d){if(_0x4bde2d){return _0x4bde2d['destroy']()['then'](function(){_0x1fe4df['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x27966e,_0xcc3150){return function(_0x42a753){if(!_0x42a753){_0x27966e['sendStatus'](0x194);}return _0x42a753;};}function handleError(_0x4353a1,_0xef95f3){_0xef95f3=_0xef95f3||0x1f4;return function(_0x456a7a){logger[_0x814e('0x1d')](_0x456a7a['stack']);if(_0x456a7a[_0x814e('0x2c')]){delete _0x456a7a[_0x814e('0x2c')];}_0x4353a1['status'](_0xef95f3)['send'](_0x456a7a);};}exports['index']=function(_0x803158,_0xc0cef7){var _0x35be89={},_0x49e0ea={},_0x356c7={'count':0x0,'rows':[]};var _0x538e30=db[_0x814e('0x2d')]['rawAttributes'];_0x49e0ea['model']=_[_0x814e('0x2e')](_0x538e30);_0x49e0ea['query']=_[_0x814e('0x2e')](_0x803158['query']);_0x49e0ea[_0x814e('0x2f')]=_[_0x814e('0x30')](_0x49e0ea[_0x814e('0x31')],_0x49e0ea[_0x814e('0x32')]);_0x35be89[_0x814e('0x33')]=_['intersection'](_0x49e0ea[_0x814e('0x31')],qs[_0x814e('0x34')](_0x803158['query'][_0x814e('0x34')]));_0x35be89[_0x814e('0x33')]=_0x35be89['attributes'][_0x814e('0x35')]?_0x35be89['attributes']:_0x49e0ea[_0x814e('0x31')];if(!_0x803158[_0x814e('0x32')][_0x814e('0x36')](_0x814e('0x37'))){_0x35be89[_0x814e('0x25')]=qs[_0x814e('0x25')](_0x803158[_0x814e('0x32')][_0x814e('0x25')]);_0x35be89[_0x814e('0x24')]=qs[_0x814e('0x24')](_0x803158[_0x814e('0x32')]['offset']);}_0x35be89['order']=qs[_0x814e('0x38')](_0x803158[_0x814e('0x32')][_0x814e('0x38')]);_0x35be89['where']=qs[_0x814e('0x2f')](_[_0x814e('0x39')](_0x803158[_0x814e('0x32')],_0x49e0ea['filters']));if(_0x803158['query'][_0x814e('0x3a')]){_0x35be89[_0x814e('0x3b')]=_[_0x814e('0x3c')](_0x35be89[_0x814e('0x3b')],{'$or':_[_0x814e('0x3d')](_0x538e30,function(_0x4974c9){if(_0x4974c9[_0x814e('0x3e')][_0x814e('0x3f')]!==_0x814e('0x40')){var _0x7182d5={};_0x7182d5[_0x4974c9[_0x814e('0x41')]]={'$like':'%'+_0x803158['query'][_0x814e('0x3a')]+'%'};return _0x7182d5;}})});}_0x35be89=_[_0x814e('0x3c')]({},_0x35be89,_0x803158[_0x814e('0x42')]);var _0x38662a={'where':_0x35be89[_0x814e('0x3b')]};return db[_0x814e('0x2d')][_0x814e('0x23')](_0x38662a)[_0x814e('0x2b')](function(_0x23e5eb){_0x356c7['count']=_0x23e5eb;if(_0x803158[_0x814e('0x32')][_0x814e('0x43')]){_0x35be89[_0x814e('0x44')]=[{'all':!![]}];}return db[_0x814e('0x2d')][_0x814e('0x45')](_0x35be89);})[_0x814e('0x2b')](function(_0x32b306){_0x356c7[_0x814e('0x46')]=_0x32b306;return _0x356c7;})[_0x814e('0x2b')](respondWithFilteredResult(_0xc0cef7,_0x35be89))[_0x814e('0x21')](handleError(_0xc0cef7,null));};exports[_0x814e('0x47')]=function(_0x57e123,_0x363199){var _0xcae1c9={'raw':![],'where':{'id':_0x57e123['params']['id']}},_0x2a2418={};_0x2a2418['model']=_[_0x814e('0x2e')](db[_0x814e('0x2d')]['rawAttributes']);_0x2a2418[_0x814e('0x32')]=_[_0x814e('0x2e')](_0x57e123[_0x814e('0x32')]);_0x2a2418[_0x814e('0x2f')]=_[_0x814e('0x30')](_0x2a2418[_0x814e('0x31')],_0x2a2418[_0x814e('0x32')]);_0xcae1c9[_0x814e('0x33')]=_[_0x814e('0x30')](_0x2a2418['model'],qs[_0x814e('0x34')](_0x57e123[_0x814e('0x32')]['fields']));_0xcae1c9[_0x814e('0x33')]=_0xcae1c9[_0x814e('0x33')][_0x814e('0x35')]?_0xcae1c9[_0x814e('0x33')]:_0x2a2418[_0x814e('0x31')];if(_0x57e123[_0x814e('0x32')][_0x814e('0x43')]){_0xcae1c9[_0x814e('0x44')]=[{'all':!![]}];}_0xcae1c9=_[_0x814e('0x3c')]({},_0xcae1c9,_0x57e123['options']);return db[_0x814e('0x2d')]['find'](_0xcae1c9)[_0x814e('0x2b')](handleEntityNotFound(_0x363199,null))[_0x814e('0x2b')](respondWithResult(_0x363199,null))['catch'](handleError(_0x363199,null));};exports[_0x814e('0x48')]=function(_0x20dd3a,_0x15f119){return db[_0x814e('0x2d')][_0x814e('0x48')](_0x20dd3a['body'],{})[_0x814e('0x2b')](respondWithResult(_0x15f119,0xc9))[_0x814e('0x21')](handleError(_0x15f119,null));};exports[_0x814e('0x49')]=function(_0x3a49c9,_0x272c74){if(_0x3a49c9[_0x814e('0x4a')]['id']){delete _0x3a49c9['body']['id'];}return db[_0x814e('0x2d')]['find']({'where':{'id':_0x3a49c9[_0x814e('0x4b')]['id']}})[_0x814e('0x2b')](handleEntityNotFound(_0x272c74,null))[_0x814e('0x2b')](saveUpdates(_0x3a49c9['body'],null))[_0x814e('0x2b')](respondWithResult(_0x272c74,null))['catch'](handleError(_0x272c74,null));};exports[_0x814e('0x4c')]=function(_0x17035e,_0x1e062b){return db['SugarcrmAccount'][_0x814e('0x4d')]({'where':{'id':_0x17035e['params']['id']}})[_0x814e('0x2b')](handleEntityNotFound(_0x1e062b,null))[_0x814e('0x2b')](removeEntity(_0x1e062b,null))[_0x814e('0x21')](handleError(_0x1e062b,null));};exports[_0x814e('0x4e')]=function(_0x238892,_0x5833bf,_0x54407e){var _0x48d5e8={};var _0x282845={};var _0xe0a53b;var _0x2bcc93;return db['SugarcrmAccount'][_0x814e('0x4f')]({'where':{'id':_0x238892[_0x814e('0x4b')]['id']}})[_0x814e('0x2b')](handleEntityNotFound(_0x5833bf,null))[_0x814e('0x2b')](function(_0x6f1824){if(_0x6f1824){_0xe0a53b=_0x6f1824;_0x282845[_0x814e('0x31')]=_[_0x814e('0x2e')](db[_0x814e('0x50')][_0x814e('0x51')]);_0x282845['query']=_[_0x814e('0x2e')](_0x238892[_0x814e('0x32')]);_0x282845[_0x814e('0x2f')]=_['intersection'](_0x282845[_0x814e('0x31')],_0x282845[_0x814e('0x32')]);_0x48d5e8[_0x814e('0x33')]=_[_0x814e('0x30')](_0x282845[_0x814e('0x31')],qs[_0x814e('0x34')](_0x238892[_0x814e('0x32')][_0x814e('0x34')]));_0x48d5e8[_0x814e('0x33')]=_0x48d5e8['attributes']['length']?_0x48d5e8[_0x814e('0x33')]:_0x282845['model'];_0x48d5e8[_0x814e('0x52')]=qs[_0x814e('0x38')](_0x238892[_0x814e('0x32')][_0x814e('0x38')]);_0x48d5e8[_0x814e('0x3b')]=qs['filters'](_[_0x814e('0x39')](_0x238892[_0x814e('0x32')],_0x282845['filters']));if(_0x238892[_0x814e('0x32')][_0x814e('0x3a')]){_0x48d5e8['where']=_[_0x814e('0x3c')](_0x48d5e8['where'],{'$or':_[_0x814e('0x3d')](_0x48d5e8['attributes'],function(_0x35d6e9){var _0x364b7d={};_0x364b7d[_0x35d6e9]={'$like':'%'+_0x238892['query'][_0x814e('0x3a')]+'%'};return _0x364b7d;})});}_0x48d5e8=_[_0x814e('0x3c')]({},_0x48d5e8,_0x238892['options']);return _0xe0a53b['getConfigurations'](_0x48d5e8);}})[_0x814e('0x2b')](function(_0x44f59c){if(_0x44f59c){_0x2bcc93=_0x44f59c['length'];if(!_0x238892[_0x814e('0x32')]['hasOwnProperty']('nolimit')){_0x48d5e8[_0x814e('0x25')]=qs[_0x814e('0x25')](_0x238892[_0x814e('0x32')][_0x814e('0x25')]);_0x48d5e8['offset']=qs['offset'](_0x238892[_0x814e('0x32')][_0x814e('0x24')]);}return _0xe0a53b[_0x814e('0x4e')](_0x48d5e8);}})['then'](function(_0xa79413){if(_0xa79413){return _0xa79413?{'count':_0x2bcc93,'rows':_0xa79413}:null;}})['then'](respondWithResult(_0x5833bf,null))['catch'](handleError(_0x5833bf,null));};exports['addConfiguration']=function(_0x3e312f,_0x284ef0,_0x551500){if(_0x3e312f[_0x814e('0x4a')]['id']){delete _0x3e312f[_0x814e('0x4a')]['id'];}return db[_0x814e('0x2d')]['findOne']({'where':{'id':_0x3e312f[_0x814e('0x4b')]['id']}})['then'](handleEntityNotFound(_0x284ef0,null))[_0x814e('0x2b')](function(_0x34b201){if(_0x34b201){_0x3e312f[_0x814e('0x4a')][_0x814e('0x53')]=_0x34b201['id'];_0x3e312f[_0x814e('0x4a')][_0x814e('0x54')]=integrations['getSubjects'](_0x3e312f[_0x814e('0x4a')][_0x814e('0x55')],_0x3e312f['body'][_0x814e('0x3e')]);_0x3e312f[_0x814e('0x4a')][_0x814e('0x56')]=integrations['getDescriptions'](_0x3e312f['body'][_0x814e('0x55')],_0x3e312f[_0x814e('0x4a')][_0x814e('0x3e')]);return db[_0x814e('0x50')][_0x814e('0x48')](_0x3e312f[_0x814e('0x4a')],{'include':[{'model':db[_0x814e('0x57')],'as':_0x814e('0x54')},{'model':db[_0x814e('0x57')],'as':_0x814e('0x56')}]});}return null;})[_0x814e('0x2b')](respondWithResult(_0x284ef0,null))['catch'](handleError(_0x284ef0,null));};exports[_0x814e('0x58')]=function(_0x3a9105,_0x188844,_0x5b941f){var _0x327535='';var _0x170257=['id',_0x814e('0x2c'),_0x814e('0x59'),_0x814e('0x5a'),_0x814e('0x5b'),_0x814e('0x5c'),_0x814e('0x5d'),_0x814e('0x5e'),_0x814e('0x5f'),'parent_type','parent_name',_0x814e('0x60')];return db[_0x814e('0x2d')][_0x814e('0x4f')]({'where':{'id':_0x3a9105[_0x814e('0x4b')]['id']},'attributes':['id',_0x814e('0x61'),_0x814e('0x62'),_0x814e('0x63')]})[_0x814e('0x2b')](handleEntityNotFound(_0x188844,null))[_0x814e('0x2b')](function(_0x33c3c4){if(_0x33c3c4){_0x327535=_0x33c3c4[_0x814e('0x63')];var _0x548ef7=_0x327535[_0x814e('0x64')](-0x1);if(_0x548ef7==='/'){_0x327535=_0x327535['substring'](0x0,_0x327535[_0x814e('0x65')](_0x548ef7));}return rp({'method':'POST','uri':util[_0x814e('0x66')](_0x814e('0x67'),_0x327535,_0x814e('0x68')),'json':!![],'form':{'method':_0x814e('0x69'),'input_type':'JSON','response_type':_0x814e('0x6a'),'rest_data':JSON[_0x814e('0x1c')]({'user_auth':{'user_name':_0x33c3c4[_0x814e('0x61')],'password':_0x33c3c4['password'],'encryption':_0x814e('0x6b')},'application':'xCALLY\x20Motion\x20Integration'})}});}})['then'](function(_0x2e06a5){if(_0x2e06a5&&_0x2e06a5[_0x814e('0x2c')]!==_0x814e('0x6c')&&_0x2e06a5[_0x814e('0x2c')]!==_0x814e('0x6d')){return rp({'method':_0x814e('0x6e'),'uri':util[_0x814e('0x66')](_0x814e('0x67'),_0x327535,_0x814e('0x68')),'json':!![],'form':{'method':_0x814e('0x6f'),'input_type':_0x814e('0x6a'),'response_type':'JSON','rest_data':JSON[_0x814e('0x1c')]({'session':_0x2e06a5['id'],'module_name':'Calls'})}})['then'](function(_0x4a20c0){if(_0x4a20c0){var _0x2356c9=_[_0x814e('0x70')](_0x4a20c0[_0x814e('0x71')]);_[_0x814e('0x72')](_0x2356c9,function(_0x49736a){return _0x170257[_0x814e('0x73')](_0x49736a[_0x814e('0x2c')]);});return{'count':_0x2356c9[_0x814e('0x35')],'rows':_[_0x814e('0x3d')](_0x2356c9,function(_0x1679c4){return{'id':_0x1679c4[_0x814e('0x2c')],'name':_0x1679c4[_0x814e('0x74')],'custom':_['endsWith'](_0x1679c4[_0x814e('0x2c')],'_c')?!![]:![],'options':_0x1679c4[_0x814e('0x42')]?_[_0x814e('0x3d')](_[_0x814e('0x70')](_0x1679c4['options']),function(_0x2e31bf){return{'name':_0x2e31bf[_0x814e('0x75')],'value':_0x2e31bf[_0x814e('0x2c')]};}):[]};})};}})['then'](respondWithResult(_0x188844,null))['catch'](function(_0x29cf30){var _0x723a00=_0x3a9105[_0x814e('0x32')][_0x814e('0x76')]?0x1f4:_0x29cf30['statusCode']||0x1f4;logger[_0x814e('0x1d')](_0x814e('0x77'),'getFields',_0x723a00,JSON[_0x814e('0x1c')](_0x29cf30));delete _0x29cf30['name'];if(_0x723a00===0x191){_0x723a00=0x190;}_0x188844[_0x814e('0x22')](_0x723a00)['send'](_0x3a9105['query'][_0x814e('0x76')]?{'message':_0x814e('0x78'),'statusCode':_0x29cf30['statusCode']}:_0x29cf30);});}else{var _0x7b9f88=0x1f4;_0x188844[_0x814e('0x22')](_0x7b9f88)[_0x814e('0x79')]({'message':_0x814e('0x78'),'statusCode':0x190});}});};
\ No newline at end of file
index 36a2613..c989a71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4cec=['rimraf','../../config/environment','./intSugarcrmAccount.attributes','../../components/integrations/configuration','exports','lodash','../../config/logger','api','bluebird','request-promise','path'];(function(_0x493f57,_0x302c27){var _0x1a54b2=function(_0x43c9e2){while(--_0x43c9e2){_0x493f57['push'](_0x493f57['shift']());}};_0x1a54b2(++_0x302c27);}(_0x4cec,0x7e));var _0xc4ce=function(_0x40a045,_0x516f0e){_0x40a045=_0x40a045-0x0;var _0x1a687c=_0x4cec[_0x40a045];return _0x1a687c;};'use strict';var _=require(_0xc4ce('0x0'));var util=require('util');var logger=require(_0xc4ce('0x1'))(_0xc4ce('0x2'));var moment=require('moment');var BPromise=require(_0xc4ce('0x3'));var rp=require(_0xc4ce('0x4'));var fs=require('fs');var path=require(_0xc4ce('0x5'));var rimraf=require(_0xc4ce('0x6'));var config=require(_0xc4ce('0x7'));var attributes=require(_0xc4ce('0x8'));var integrations=require(_0xc4ce('0x9'));module[_0xc4ce('0xa')]=function(_0x5bbe86,_0x5e49ba){return _0x5bbe86['define']('SugarcrmAccount',attributes,{'tableName':'int_sugarcrm_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x65ae=['rimraf','../../config/environment','./intSugarcrmAccount.attributes','../../components/integrations/configuration','exports','SugarcrmAccount','int_sugarcrm_accounts','lodash','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x1b4b23,_0x5dd6d6){var _0x2a325b=function(_0x175462){while(--_0x175462){_0x1b4b23['push'](_0x1b4b23['shift']());}};_0x2a325b(++_0x5dd6d6);}(_0x65ae,0x132));var _0xe65a=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x65ae[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0xe65a('0x0'));var util=require('util');var logger=require(_0xe65a('0x1'))(_0xe65a('0x2'));var moment=require(_0xe65a('0x3'));var BPromise=require(_0xe65a('0x4'));var rp=require(_0xe65a('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0xe65a('0x6'));var config=require(_0xe65a('0x7'));var attributes=require(_0xe65a('0x8'));var integrations=require(_0xe65a('0x9'));module[_0xe65a('0xa')]=function(_0x2b31c3,_0x3af867){return _0x2b31c3['define'](_0xe65a('0xb'),attributes,{'tableName':_0xe65a('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 80d1a81..65e8086 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5fbd=['include','map','model','then','catch','ShowSugarcrmAccount','SugarcrmAccount','find','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','info','SugarcrmAccount,\x20%s,\x20%s','request\x20sent','debug','SugarcrmAccount,\x20%s,\x20%s,\x20%s','stringify','error','message','result','GetSugarcrmAccount','findAll','options','raw','attributes','limit'];(function(_0x56acd3,_0x52fcc5){var _0x920a32=function(_0x16dc60){while(--_0x16dc60){_0x56acd3['push'](_0x56acd3['shift']());}};_0x920a32(++_0x52fcc5);}(_0x5fbd,0x90));var _0xd5fb=function(_0x2fc530,_0x512acc){_0x2fc530=_0x2fc530-0x0;var _0x5f326f=_0x5fbd[_0x2fc530];return _0x5f326f;};'use strict';var _=require(_0xd5fb('0x0'));var util=require(_0xd5fb('0x1'));var moment=require(_0xd5fb('0x2'));var BPromise=require(_0xd5fb('0x3'));var rs=require(_0xd5fb('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xd5fb('0x5'))['db'];var utils=require(_0xd5fb('0x6'));var logger=require(_0xd5fb('0x7'))('rpc');var config=require(_0xd5fb('0x8'));var jayson=require(_0xd5fb('0x9'));var client=jayson[_0xd5fb('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x122ea0,_0x3d8e7d,_0x552ac9){return new BPromise(function(_0xd94cb8,_0x127bf9){return client['request'](_0x122ea0,_0x552ac9)['then'](function(_0x134ace){logger[_0xd5fb('0xb')](_0xd5fb('0xc'),_0x3d8e7d,_0xd5fb('0xd'));logger[_0xd5fb('0xe')](_0xd5fb('0xf'),_0x3d8e7d,'request\x20sent',JSON[_0xd5fb('0x10')](_0x134ace));if(_0x134ace[_0xd5fb('0x11')]){if(_0x134ace[_0xd5fb('0x11')]['code']===0x1f4){logger['error'](_0xd5fb('0xc'),_0x3d8e7d,_0x134ace[_0xd5fb('0x11')]['message']);return _0x127bf9(_0x134ace[_0xd5fb('0x11')][_0xd5fb('0x12')]);}logger['error']('SugarcrmAccount,\x20%s,\x20%s',_0x3d8e7d,_0x134ace[_0xd5fb('0x11')]['message']);return _0xd94cb8(_0x134ace['error'][_0xd5fb('0x12')]);}else{logger[_0xd5fb('0xb')](_0xd5fb('0xc'),_0x3d8e7d,_0xd5fb('0xd'));_0xd94cb8(_0x134ace[_0xd5fb('0x13')]['message']);}})['catch'](function(_0x128d93){logger[_0xd5fb('0x11')]('SugarcrmAccount,\x20%s,\x20%s',_0x3d8e7d,_0x128d93);_0x127bf9(_0x128d93);});});}exports[_0xd5fb('0x14')]=function(_0xce610){var _0x183f44=this;return new Promise(function(_0x190f3d,_0x23222c){return db['SugarcrmAccount'][_0xd5fb('0x15')]({'raw':_0xce610[_0xd5fb('0x16')]?_0xce610['options'][_0xd5fb('0x17')]===undefined?!![]:![]:!![],'where':_0xce610[_0xd5fb('0x16')]?_0xce610[_0xd5fb('0x16')]['where']||null:null,'attributes':_0xce610['options']?_0xce610[_0xd5fb('0x16')][_0xd5fb('0x18')]||null:null,'limit':_0xce610[_0xd5fb('0x16')]?_0xce610[_0xd5fb('0x16')][_0xd5fb('0x19')]||null:null,'include':_0xce610[_0xd5fb('0x16')]?_0xce610['options'][_0xd5fb('0x1a')]?_['map'](_0xce610[_0xd5fb('0x16')][_0xd5fb('0x1a')],function(_0x5e017c){return{'model':db[_0x5e017c['model']],'as':_0x5e017c['as'],'attributes':_0x5e017c[_0xd5fb('0x18')],'include':_0x5e017c[_0xd5fb('0x1a')]?_[_0xd5fb('0x1b')](_0x5e017c[_0xd5fb('0x1a')],function(_0x5de0c6){return{'model':db[_0x5de0c6[_0xd5fb('0x1c')]],'as':_0x5de0c6['as'],'attributes':_0x5de0c6[_0xd5fb('0x18')],'include':_0x5de0c6[_0xd5fb('0x1a')]?_[_0xd5fb('0x1b')](_0x5de0c6[_0xd5fb('0x1a')],function(_0x2d8a83){return{'model':db[_0x2d8a83['model']],'as':_0x2d8a83['as'],'attributes':_0x2d8a83[_0xd5fb('0x18')]};}):[]};}):[]};}):[]:[]})[_0xd5fb('0x1d')](function(_0x2150b8){logger[_0xd5fb('0xb')](_0xd5fb('0x14'),_0xce610);logger[_0xd5fb('0xe')](_0xd5fb('0x14'),_0xce610,JSON[_0xd5fb('0x10')](_0x2150b8));_0x190f3d(_0x2150b8);})[_0xd5fb('0x1e')](function(_0x2b5eec){logger['error'](_0xd5fb('0x14'),_0x2b5eec['message'],_0xce610);_0x23222c(_0x183f44[_0xd5fb('0x11')](0x1f4,_0x2b5eec[_0xd5fb('0x12')]));});});};exports[_0xd5fb('0x1f')]=function(_0x26e4a5){var _0x7bb86d=this;return new Promise(function(_0x238011,_0x563557){return db[_0xd5fb('0x20')][_0xd5fb('0x21')]({'raw':_0x26e4a5[_0xd5fb('0x16')]?_0x26e4a5['options'][_0xd5fb('0x17')]===undefined?!![]:![]:!![],'where':_0x26e4a5[_0xd5fb('0x16')]?_0x26e4a5[_0xd5fb('0x16')]['where']||null:null,'attributes':_0x26e4a5[_0xd5fb('0x16')]?_0x26e4a5['options'][_0xd5fb('0x18')]||null:null,'include':_0x26e4a5[_0xd5fb('0x16')]?_0x26e4a5[_0xd5fb('0x16')]['include']?_[_0xd5fb('0x1b')](_0x26e4a5[_0xd5fb('0x16')][_0xd5fb('0x1a')],function(_0x30fe9e){return{'model':db[_0x30fe9e[_0xd5fb('0x1c')]],'as':_0x30fe9e['as'],'attributes':_0x30fe9e[_0xd5fb('0x18')],'include':_0x30fe9e['include']?_[_0xd5fb('0x1b')](_0x30fe9e['include'],function(_0x4f51b7){return{'model':db[_0x4f51b7['model']],'as':_0x4f51b7['as'],'attributes':_0x4f51b7['attributes'],'include':_0x4f51b7[_0xd5fb('0x1a')]?_[_0xd5fb('0x1b')](_0x4f51b7[_0xd5fb('0x1a')],function(_0x387a50){return{'model':db[_0x387a50[_0xd5fb('0x1c')]],'as':_0x387a50['as'],'attributes':_0x387a50[_0xd5fb('0x18')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x45eac6){logger['info'](_0xd5fb('0x1f'),_0x26e4a5);logger[_0xd5fb('0xe')]('ShowSugarcrmAccount',_0x26e4a5,JSON[_0xd5fb('0x10')](_0x45eac6));_0x238011(_0x45eac6);})[_0xd5fb('0x1e')](function(_0x4526ab){logger[_0xd5fb('0x11')]('ShowSugarcrmAccount',_0x4526ab[_0xd5fb('0x12')],_0x26e4a5);_0x563557(_0x7bb86d[_0xd5fb('0x11')](0x1f4,_0x4526ab['message']));});});};
\ No newline at end of file
+var _0xb042=['findAll','options','raw','attributes','include','map','model','stringify','catch','ShowSugarcrmAccount','where','debug','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','error','code','SugarcrmAccount,\x20%s,\x20%s','message','result','GetSugarcrmAccount','SugarcrmAccount'];(function(_0x45abb8,_0x4266c){var _0x272418=function(_0x324441){while(--_0x324441){_0x45abb8['push'](_0x45abb8['shift']());}};_0x272418(++_0x4266c);}(_0xb042,0x198));var _0x2b04=function(_0x8c43de,_0x90ff31){_0x8c43de=_0x8c43de-0x0;var _0xa6591b=_0xb042[_0x8c43de];return _0xa6591b;};'use strict';var _=require(_0x2b04('0x0'));var util=require(_0x2b04('0x1'));var moment=require(_0x2b04('0x2'));var BPromise=require(_0x2b04('0x3'));var rs=require(_0x2b04('0x4'));var fs=require('fs');var Redis=require(_0x2b04('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x2b04('0x6'));var logger=require(_0x2b04('0x7'))(_0x2b04('0x8'));var config=require(_0x2b04('0x9'));var jayson=require(_0x2b04('0xa'));var client=jayson[_0x2b04('0xb')][_0x2b04('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x225b13,_0x3e65c9,_0x18b9e2){return new BPromise(function(_0x2033c4,_0xdf6075){return client[_0x2b04('0xd')](_0x225b13,_0x18b9e2)[_0x2b04('0xe')](function(_0x3a8acc){logger[_0x2b04('0xf')]('SugarcrmAccount,\x20%s,\x20%s',_0x3e65c9,_0x2b04('0x10'));logger['debug']('SugarcrmAccount,\x20%s,\x20%s,\x20%s',_0x3e65c9,_0x2b04('0x10'),JSON['stringify'](_0x3a8acc));if(_0x3a8acc['error']){if(_0x3a8acc[_0x2b04('0x11')][_0x2b04('0x12')]===0x1f4){logger['error'](_0x2b04('0x13'),_0x3e65c9,_0x3a8acc['error'][_0x2b04('0x14')]);return _0xdf6075(_0x3a8acc[_0x2b04('0x11')][_0x2b04('0x14')]);}logger[_0x2b04('0x11')](_0x2b04('0x13'),_0x3e65c9,_0x3a8acc['error'][_0x2b04('0x14')]);return _0x2033c4(_0x3a8acc[_0x2b04('0x11')][_0x2b04('0x14')]);}else{logger[_0x2b04('0xf')](_0x2b04('0x13'),_0x3e65c9,'request\x20sent');_0x2033c4(_0x3a8acc[_0x2b04('0x15')]['message']);}})['catch'](function(_0x21f3fa){logger['error'](_0x2b04('0x13'),_0x3e65c9,_0x21f3fa);_0xdf6075(_0x21f3fa);});});}exports[_0x2b04('0x16')]=function(_0x6b6a25){var _0x260254=this;return new Promise(function(_0x126d1a,_0x12a713){return db[_0x2b04('0x17')][_0x2b04('0x18')]({'raw':_0x6b6a25[_0x2b04('0x19')]?_0x6b6a25[_0x2b04('0x19')][_0x2b04('0x1a')]===undefined?!![]:![]:!![],'where':_0x6b6a25[_0x2b04('0x19')]?_0x6b6a25[_0x2b04('0x19')]['where']||null:null,'attributes':_0x6b6a25[_0x2b04('0x19')]?_0x6b6a25['options'][_0x2b04('0x1b')]||null:null,'limit':_0x6b6a25['options']?_0x6b6a25[_0x2b04('0x19')]['limit']||null:null,'include':_0x6b6a25[_0x2b04('0x19')]?_0x6b6a25[_0x2b04('0x19')][_0x2b04('0x1c')]?_[_0x2b04('0x1d')](_0x6b6a25[_0x2b04('0x19')]['include'],function(_0x3e04be){return{'model':db[_0x3e04be['model']],'as':_0x3e04be['as'],'attributes':_0x3e04be[_0x2b04('0x1b')],'include':_0x3e04be[_0x2b04('0x1c')]?_[_0x2b04('0x1d')](_0x3e04be[_0x2b04('0x1c')],function(_0x313ed4){return{'model':db[_0x313ed4[_0x2b04('0x1e')]],'as':_0x313ed4['as'],'attributes':_0x313ed4[_0x2b04('0x1b')],'include':_0x313ed4[_0x2b04('0x1c')]?_[_0x2b04('0x1d')](_0x313ed4['include'],function(_0x52e81c){return{'model':db[_0x52e81c['model']],'as':_0x52e81c['as'],'attributes':_0x52e81c['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x57d8a2){logger[_0x2b04('0xf')](_0x2b04('0x16'),_0x6b6a25);logger['debug'](_0x2b04('0x16'),_0x6b6a25,JSON[_0x2b04('0x1f')](_0x57d8a2));_0x126d1a(_0x57d8a2);})[_0x2b04('0x20')](function(_0x17596c){logger['error'](_0x2b04('0x16'),_0x17596c['message'],_0x6b6a25);_0x12a713(_0x260254[_0x2b04('0x11')](0x1f4,_0x17596c[_0x2b04('0x14')]));});});};exports[_0x2b04('0x21')]=function(_0x2a3157){var _0x561be8=this;return new Promise(function(_0x25539d,_0x533a16){return db[_0x2b04('0x17')]['find']({'raw':_0x2a3157[_0x2b04('0x19')]?_0x2a3157[_0x2b04('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x2a3157[_0x2b04('0x19')]?_0x2a3157[_0x2b04('0x19')][_0x2b04('0x22')]||null:null,'attributes':_0x2a3157[_0x2b04('0x19')]?_0x2a3157[_0x2b04('0x19')][_0x2b04('0x1b')]||null:null,'include':_0x2a3157['options']?_0x2a3157[_0x2b04('0x19')][_0x2b04('0x1c')]?_[_0x2b04('0x1d')](_0x2a3157[_0x2b04('0x19')][_0x2b04('0x1c')],function(_0x18e7f7){return{'model':db[_0x18e7f7[_0x2b04('0x1e')]],'as':_0x18e7f7['as'],'attributes':_0x18e7f7['attributes'],'include':_0x18e7f7['include']?_[_0x2b04('0x1d')](_0x18e7f7[_0x2b04('0x1c')],function(_0x5370d3){return{'model':db[_0x5370d3[_0x2b04('0x1e')]],'as':_0x5370d3['as'],'attributes':_0x5370d3['attributes'],'include':_0x5370d3['include']?_[_0x2b04('0x1d')](_0x5370d3[_0x2b04('0x1c')],function(_0x32d587){return{'model':db[_0x32d587[_0x2b04('0x1e')]],'as':_0x32d587['as'],'attributes':_0x32d587['attributes']};}):[]};}):[]};}):[]:[]})[_0x2b04('0xe')](function(_0x33628a){logger['info'](_0x2b04('0x21'),_0x2a3157);logger[_0x2b04('0x23')]('ShowSugarcrmAccount',_0x2a3157,JSON[_0x2b04('0x1f')](_0x33628a));_0x25539d(_0x33628a);})[_0x2b04('0x20')](function(_0x4618e9){logger[_0x2b04('0x11')](_0x2b04('0x21'),_0x4618e9[_0x2b04('0x14')],_0x2a3157);_0x533a16(_0x561be8['error'](0x1f4,_0x4618e9[_0x2b04('0x14')]));});});};
\ No newline at end of file
index b3e5e2f..ddd82f6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8c1a=['isAuthenticated','show','/:id/fields','/:id/subjects','/:id/descriptions','getDescriptions','post','create','update','delete','exports','multer','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','get','index'];(function(_0x25028f,_0x22fe0f){var _0x544baf=function(_0x16adc0){while(--_0x16adc0){_0x25028f['push'](_0x25028f['shift']());}};_0x544baf(++_0x22fe0f);}(_0x8c1a,0x1ad));var _0xa8c1=function(_0x4b2251,_0x393f10){_0x4b2251=_0x4b2251-0x0;var _0x5d22fb=_0x8c1a[_0x4b2251];return _0x5d22fb;};'use strict';var multer=require(_0xa8c1('0x0'));var util=require('util');var path=require('path');var timeout=require(_0xa8c1('0x1'));var express=require(_0xa8c1('0x2'));var router=express[_0xa8c1('0x3')]();var auth=require(_0xa8c1('0x4'));var interaction=require(_0xa8c1('0x5'));var config=require('../../config/environment');var controller=require('./intSugarcrmConfiguration.controller');router[_0xa8c1('0x6')]('/',auth['isAuthenticated'](),controller[_0xa8c1('0x7')]);router[_0xa8c1('0x6')]('/:id',auth[_0xa8c1('0x8')](),controller[_0xa8c1('0x9')]);router[_0xa8c1('0x6')](_0xa8c1('0xa'),auth['isAuthenticated'](),controller['getFields']);router[_0xa8c1('0x6')](_0xa8c1('0xb'),auth[_0xa8c1('0x8')](),controller['getSubjects']);router['get'](_0xa8c1('0xc'),auth[_0xa8c1('0x8')](),controller[_0xa8c1('0xd')]);router[_0xa8c1('0xe')]('/',auth[_0xa8c1('0x8')](),controller[_0xa8c1('0xf')]);router['put']('/:id',auth[_0xa8c1('0x8')](),controller[_0xa8c1('0x10')]);router[_0xa8c1('0x11')]('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0xa8c1('0x12')]=router;
\ No newline at end of file
+var _0xde9f=['/:id/descriptions','post','create','put','/:id','delete','destroy','exports','multer','util','connect-timeout','Router','../../components/auth/service','../../config/environment','./intSugarcrmConfiguration.controller','get','isAuthenticated','show','/:id/fields','getFields','getSubjects'];(function(_0x5b5eb4,_0x117c87){var _0x42af53=function(_0xdf6fcb){while(--_0xdf6fcb){_0x5b5eb4['push'](_0x5b5eb4['shift']());}};_0x42af53(++_0x117c87);}(_0xde9f,0x16d));var _0xfde9=function(_0x90a39a,_0x32020d){_0x90a39a=_0x90a39a-0x0;var _0x2b62f7=_0xde9f[_0x90a39a];return _0x2b62f7;};'use strict';var multer=require(_0xfde9('0x0'));var util=require(_0xfde9('0x1'));var path=require('path');var timeout=require(_0xfde9('0x2'));var express=require('express');var router=express[_0xfde9('0x3')]();var auth=require(_0xfde9('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xfde9('0x5'));var controller=require(_0xfde9('0x6'));router[_0xfde9('0x7')]('/',auth[_0xfde9('0x8')](),controller['index']);router['get']('/:id',auth[_0xfde9('0x8')](),controller[_0xfde9('0x9')]);router['get'](_0xfde9('0xa'),auth['isAuthenticated'](),controller[_0xfde9('0xb')]);router[_0xfde9('0x7')]('/:id/subjects',auth[_0xfde9('0x8')](),controller[_0xfde9('0xc')]);router[_0xfde9('0x7')](_0xfde9('0xd'),auth[_0xfde9('0x8')](),controller['getDescriptions']);router[_0xfde9('0xe')]('/',auth[_0xfde9('0x8')](),controller[_0xfde9('0xf')]);router[_0xfde9('0x10')](_0xfde9('0x11'),auth[_0xfde9('0x8')](),controller['update']);router[_0xfde9('0x12')]('/:id',auth[_0xfde9('0x8')](),controller[_0xfde9('0x13')]);module[_0xfde9('0x14')]=router;
\ No newline at end of file
index 8c6abea..a62cd9f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6ecb=['STRING'];(function(_0x7f287d,_0xe3b36e){var _0x21514f=function(_0x2e392e){while(--_0x2e392e){_0x7f287d['push'](_0x7f287d['shift']());}};_0x21514f(++_0xe3b36e);}(_0x6ecb,0x1b7));var _0xb6ec=function(_0x5a461b,_0x104cf5){_0x5a461b=_0x5a461b-0x0;var _0x5232f8=_0x6ecb[_0x5a461b];return _0x5232f8;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0xb6ec('0x0')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xa382=['STRING'];(function(_0x57c7b3,_0x294734){var _0x572f94=function(_0x5b8ef7){while(--_0x5b8ef7){_0x57c7b3['push'](_0x57c7b3['shift']());}};_0x572f94(++_0x294734);}(_0xa382,0x1a2));var _0x2a38=function(_0x49b207,_0x408ade){_0x49b207=_0x49b207-0x0;var _0x2dc8fa=_0xa382[_0x49b207];return _0x2dc8fa;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x2a38('0x0')]}};
\ No newline at end of file
index 4729d52..070a248 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbc22=['limit','Content-Range','apply','reject','update','destroy','end','stack','name','send','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','SugarcrmConfiguration','includeAll','include','findAll','rows','show','params','rawAttributes','find','create','body','catch','SugarcrmField','getFields','getSubjects','pick','getDescriptions','html-pdf','eml-format','fast-json-patch','moment','util','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','jayson/promise','client','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','then','SugarcrmConfiguration,\x20%s,\x20%s','request\x20sent','debug','SugarcrmConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','sendStatus','status','json','count','offset'];(function(_0x575456,_0x33de80){var _0x225096=function(_0x140ed9){while(--_0x140ed9){_0x575456['push'](_0x575456['shift']());}};_0x225096(++_0x33de80);}(_0xbc22,0xe2));var _0x2bc2=function(_0x5f25b3,_0x35481a){_0x5f25b3=_0x5f25b3-0x0;var _0x4ab9bf=_0xbc22[_0x5f25b3];return _0x4ab9bf;};'use strict';var pdf=require(_0x2bc2('0x0'));var emlformat=require(_0x2bc2('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x2bc2('0x2'));var rp=require('request-promise');var moment=require(_0x2bc2('0x3'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x2bc2('0x4'));var path=require(_0x2bc2('0x5'));var sox=require(_0x2bc2('0x6'));var csv=require(_0x2bc2('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x2bc2('0x8'));var squel=require(_0x2bc2('0x9'));var crypto=require(_0x2bc2('0xa'));var jsforce=require(_0x2bc2('0xb'));var deskjs=require(_0x2bc2('0xc'));var toCsv=require(_0x2bc2('0x7'));var querystring=require('querystring');var Papa=require(_0x2bc2('0xd'));var Redis=require(_0x2bc2('0xe'));var authService=require(_0x2bc2('0xf'));var qs=require(_0x2bc2('0x10'));var hardwareService=require(_0x2bc2('0x11'));var logger=require('../../config/logger')(_0x2bc2('0x12'));var utils=require(_0x2bc2('0x13'));var config=require(_0x2bc2('0x14'));var db=require('../../mysqldb')['db'];var jayson=require(_0x2bc2('0x15'));var client=jayson[_0x2bc2('0x16')]['http']({'port':0x232a});function checkPasswordPattern(_0x183c3d,_0x435c20,_0x4a65d0){if(_0x4a65d0){var _0x3bca13=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3bca13[_0x2bc2('0x17')](_0x435c20)){return _0x183c3d;}else{throw new Error(_0x2bc2('0x18'));}}else{return _0x183c3d;}}function respondWithRpcPromise(_0x210398,_0x38328c,_0x2646e3,_0x5bbefc){return new BPromise(function(_0x2a0bc6,_0x3d3419){var _0x5b4132=_0x5bbefc||client;return _0x5b4132['request'](_0x210398,_0x2646e3)[_0x2bc2('0x19')](function(_0x1674b7){logger['info'](_0x2bc2('0x1a'),_0x38328c,_0x2bc2('0x1b'));logger[_0x2bc2('0x1c')](_0x2bc2('0x1d'),_0x38328c,_0x2bc2('0x1b'),JSON[_0x2bc2('0x1e')](_0x1674b7));if(_0x1674b7['error']){if(_0x1674b7[_0x2bc2('0x1f')][_0x2bc2('0x20')]===0x1f4){logger[_0x2bc2('0x1f')]('SugarcrmConfiguration,\x20%s,\x20%s',_0x38328c,_0x1674b7['error'][_0x2bc2('0x21')]);return _0x3d3419(_0x1674b7[_0x2bc2('0x1f')]['message']);}logger['error']('SugarcrmConfiguration,\x20%s,\x20%s',_0x38328c,_0x1674b7[_0x2bc2('0x1f')][_0x2bc2('0x21')]);return _0x2a0bc6(_0x1674b7['error'][_0x2bc2('0x21')]);}else{logger[_0x2bc2('0x22')]('SugarcrmConfiguration,\x20%s,\x20%s',_0x38328c,_0x2bc2('0x1b'));_0x2a0bc6(_0x1674b7[_0x2bc2('0x23')][_0x2bc2('0x21')]);}})['catch'](function(_0x2cd447){logger[_0x2bc2('0x1f')](_0x2bc2('0x1a'),_0x38328c,_0x2cd447);_0x3d3419(_0x2cd447);});});}function respondWithStatusCode(_0x1031c1,_0x3c9ccd){_0x3c9ccd=_0x3c9ccd||0xcc;return function(_0x1ddc50){if(_0x1ddc50){return _0x1031c1[_0x2bc2('0x24')](_0x3c9ccd);}return _0x1031c1[_0x2bc2('0x25')](_0x3c9ccd)['end']();};}function respondWithResult(_0x42a385,_0x50786c){_0x50786c=_0x50786c||0xc8;return function(_0xce707f){if(_0xce707f){return _0x42a385[_0x2bc2('0x25')](_0x50786c)[_0x2bc2('0x26')](_0xce707f);}};}function respondWithFilteredResult(_0x38aa73,_0x278286){return function(_0x5b7904){if(_0x5b7904){var _0x38f0b7=_0x5b7904[_0x2bc2('0x27')],_0x5d4587=_0x278286[_0x2bc2('0x28')],_0x155883=_0x278286[_0x2bc2('0x28')]+_0x278286[_0x2bc2('0x29')],_0x3fb531;if(_0x155883>=_0x38f0b7){_0x155883=_0x38f0b7;_0x3fb531=0xc8;}else{_0x3fb531=0xce;}_0x38aa73['status'](_0x3fb531);return _0x38aa73['set'](_0x2bc2('0x2a'),_0x5d4587+'-'+_0x155883+'/'+_0x38f0b7)[_0x2bc2('0x26')](_0x5b7904);}return null;};}function patchUpdates(_0xb0ef75){return function(_0xd3be34){try{jsonpatch[_0x2bc2('0x2b')](_0xd3be34,_0xb0ef75,!![]);}catch(_0x49c524){return BPromise[_0x2bc2('0x2c')](_0x49c524);}return _0xd3be34['save']();};}function saveUpdates(_0x2821a0,_0x3fa39a){return function(_0x144946){if(_0x144946){return _0x144946[_0x2bc2('0x2d')](_0x2821a0)['then'](function(_0x583acd){return _0x583acd;});}return null;};}function removeEntity(_0x1f48ad,_0x3f388a){return function(_0x3561f6){if(_0x3561f6){return _0x3561f6[_0x2bc2('0x2e')]()[_0x2bc2('0x19')](function(){_0x1f48ad[_0x2bc2('0x25')](0xcc)[_0x2bc2('0x2f')]();});}};}function handleEntityNotFound(_0x33b606,_0x5c0ed9){return function(_0x5eba62){if(!_0x5eba62){_0x33b606[_0x2bc2('0x24')](0x194);}return _0x5eba62;};}function handleError(_0x47efff,_0x59f2f9){_0x59f2f9=_0x59f2f9||0x1f4;return function(_0x196c60){logger[_0x2bc2('0x1f')](_0x196c60[_0x2bc2('0x30')]);if(_0x196c60[_0x2bc2('0x31')]){delete _0x196c60[_0x2bc2('0x31')];}_0x47efff[_0x2bc2('0x25')](_0x59f2f9)[_0x2bc2('0x32')](_0x196c60);};}exports['index']=function(_0x2edd20,_0x58e8b9){var _0x54d368={},_0x402b86={},_0x4e09a6={'count':0x0,'rows':[]};var _0x39116f=db['SugarcrmConfiguration']['rawAttributes'];_0x402b86[_0x2bc2('0x33')]=_[_0x2bc2('0x34')](_0x39116f);_0x402b86[_0x2bc2('0x35')]=_['keys'](_0x2edd20[_0x2bc2('0x35')]);_0x402b86[_0x2bc2('0x36')]=_[_0x2bc2('0x37')](_0x402b86[_0x2bc2('0x33')],_0x402b86[_0x2bc2('0x35')]);_0x54d368[_0x2bc2('0x38')]=_[_0x2bc2('0x37')](_0x402b86[_0x2bc2('0x33')],qs[_0x2bc2('0x39')](_0x2edd20[_0x2bc2('0x35')][_0x2bc2('0x39')]));_0x54d368[_0x2bc2('0x38')]=_0x54d368[_0x2bc2('0x38')][_0x2bc2('0x3a')]?_0x54d368[_0x2bc2('0x38')]:_0x402b86[_0x2bc2('0x33')];if(!_0x2edd20['query'][_0x2bc2('0x3b')](_0x2bc2('0x3c'))){_0x54d368[_0x2bc2('0x29')]=qs['limit'](_0x2edd20['query'][_0x2bc2('0x29')]);_0x54d368[_0x2bc2('0x28')]=qs[_0x2bc2('0x28')](_0x2edd20[_0x2bc2('0x35')][_0x2bc2('0x28')]);}_0x54d368[_0x2bc2('0x3d')]=qs[_0x2bc2('0x3e')](_0x2edd20[_0x2bc2('0x35')][_0x2bc2('0x3e')]);_0x54d368[_0x2bc2('0x3f')]=qs[_0x2bc2('0x36')](_['pick'](_0x2edd20[_0x2bc2('0x35')],_0x402b86['filters']));if(_0x2edd20[_0x2bc2('0x35')][_0x2bc2('0x40')]){_0x54d368[_0x2bc2('0x3f')]=_[_0x2bc2('0x41')](_0x54d368[_0x2bc2('0x3f')],{'$or':_[_0x2bc2('0x42')](_0x39116f,function(_0x3b8e77){if(_0x3b8e77[_0x2bc2('0x43')][_0x2bc2('0x44')]!==_0x2bc2('0x45')){var _0x2689cf={};_0x2689cf[_0x3b8e77[_0x2bc2('0x46')]]={'$like':'%'+_0x2edd20[_0x2bc2('0x35')][_0x2bc2('0x40')]+'%'};return _0x2689cf;}})});}_0x54d368=_[_0x2bc2('0x41')]({},_0x54d368,_0x2edd20[_0x2bc2('0x47')]);var _0x2fbdef={'where':_0x54d368[_0x2bc2('0x3f')]};return db[_0x2bc2('0x48')]['count'](_0x2fbdef)[_0x2bc2('0x19')](function(_0x487f4c){_0x4e09a6['count']=_0x487f4c;if(_0x2edd20[_0x2bc2('0x35')][_0x2bc2('0x49')]){_0x54d368[_0x2bc2('0x4a')]=[{'all':!![]}];}return db['SugarcrmConfiguration'][_0x2bc2('0x4b')](_0x54d368);})[_0x2bc2('0x19')](function(_0x483694){_0x4e09a6[_0x2bc2('0x4c')]=_0x483694;return _0x4e09a6;})[_0x2bc2('0x19')](respondWithFilteredResult(_0x58e8b9,_0x54d368))['catch'](handleError(_0x58e8b9,null));};exports[_0x2bc2('0x4d')]=function(_0x102874,_0x288ba2){var _0x2c3256={'raw':![],'where':{'id':_0x102874[_0x2bc2('0x4e')]['id']}},_0x43450f={};_0x43450f[_0x2bc2('0x33')]=_[_0x2bc2('0x34')](db['SugarcrmConfiguration'][_0x2bc2('0x4f')]);_0x43450f['query']=_[_0x2bc2('0x34')](_0x102874[_0x2bc2('0x35')]);_0x43450f[_0x2bc2('0x36')]=_[_0x2bc2('0x37')](_0x43450f[_0x2bc2('0x33')],_0x43450f[_0x2bc2('0x35')]);_0x2c3256[_0x2bc2('0x38')]=_['intersection'](_0x43450f[_0x2bc2('0x33')],qs[_0x2bc2('0x39')](_0x102874[_0x2bc2('0x35')][_0x2bc2('0x39')]));_0x2c3256[_0x2bc2('0x38')]=_0x2c3256[_0x2bc2('0x38')]['length']?_0x2c3256[_0x2bc2('0x38')]:_0x43450f['model'];if(_0x102874['query']['includeAll']){_0x2c3256[_0x2bc2('0x4a')]=[{'all':!![]}];}_0x2c3256=_[_0x2bc2('0x41')]({},_0x2c3256,_0x102874['options']);return db[_0x2bc2('0x48')][_0x2bc2('0x50')](_0x2c3256)['then'](handleEntityNotFound(_0x288ba2,null))['then'](respondWithResult(_0x288ba2,null))['catch'](handleError(_0x288ba2,null));};exports[_0x2bc2('0x51')]=function(_0x2cffba,_0xa57142){return db[_0x2bc2('0x48')][_0x2bc2('0x51')](_0x2cffba[_0x2bc2('0x52')],{})[_0x2bc2('0x19')](respondWithResult(_0xa57142,0xc9))[_0x2bc2('0x53')](handleError(_0xa57142,null));};exports[_0x2bc2('0x2d')]=function(_0x5bd6b,_0x120676){if(_0x5bd6b[_0x2bc2('0x52')]['id']){delete _0x5bd6b[_0x2bc2('0x52')]['id'];}return db[_0x2bc2('0x48')][_0x2bc2('0x50')]({'where':{'id':_0x5bd6b['params']['id']}})['then'](handleEntityNotFound(_0x120676,null))[_0x2bc2('0x19')](saveUpdates(_0x5bd6b['body'],null))[_0x2bc2('0x19')](respondWithResult(_0x120676,null))[_0x2bc2('0x53')](handleError(_0x120676,null));};exports['destroy']=function(_0x388589,_0x47202e){return db['SugarcrmConfiguration'][_0x2bc2('0x50')]({'where':{'id':_0x388589['params']['id']}})[_0x2bc2('0x19')](handleEntityNotFound(_0x47202e,null))[_0x2bc2('0x19')](removeEntity(_0x47202e,null))[_0x2bc2('0x53')](handleError(_0x47202e,null));};exports['getFields']=function(_0x3b8cf0,_0x23883b,_0x1c0365){var _0x24b178={};var _0x4dca72={};var _0xc41ecc;var _0x4fa2bb;return db['SugarcrmConfiguration']['findOne']({'where':{'id':_0x3b8cf0['params']['id']}})[_0x2bc2('0x19')](handleEntityNotFound(_0x23883b,null))[_0x2bc2('0x19')](function(_0x5d7bf7){if(_0x5d7bf7){_0xc41ecc=_0x5d7bf7;_0x4dca72[_0x2bc2('0x33')]=_[_0x2bc2('0x34')](db[_0x2bc2('0x54')][_0x2bc2('0x4f')]);_0x4dca72[_0x2bc2('0x35')]=_[_0x2bc2('0x34')](_0x3b8cf0['query']);_0x4dca72[_0x2bc2('0x36')]=_[_0x2bc2('0x37')](_0x4dca72[_0x2bc2('0x33')],_0x4dca72[_0x2bc2('0x35')]);_0x24b178[_0x2bc2('0x38')]=_[_0x2bc2('0x37')](_0x4dca72['model'],qs['fields'](_0x3b8cf0[_0x2bc2('0x35')][_0x2bc2('0x39')]));_0x24b178[_0x2bc2('0x38')]=_0x24b178[_0x2bc2('0x38')][_0x2bc2('0x3a')]?_0x24b178['attributes']:_0x4dca72[_0x2bc2('0x33')];_0x24b178['order']=qs[_0x2bc2('0x3e')](_0x3b8cf0[_0x2bc2('0x35')][_0x2bc2('0x3e')]);_0x24b178['where']=qs[_0x2bc2('0x36')](_['pick'](_0x3b8cf0['query'],_0x4dca72[_0x2bc2('0x36')]));if(_0x3b8cf0['query'][_0x2bc2('0x40')]){_0x24b178[_0x2bc2('0x3f')]=_['merge'](_0x24b178[_0x2bc2('0x3f')],{'$or':_[_0x2bc2('0x42')](_0x24b178[_0x2bc2('0x38')],function(_0x9296d9){var _0x196b50={};_0x196b50[_0x9296d9]={'$like':'%'+_0x3b8cf0[_0x2bc2('0x35')][_0x2bc2('0x40')]+'%'};return _0x196b50;})});}_0x24b178=_[_0x2bc2('0x41')]({},_0x24b178,_0x3b8cf0[_0x2bc2('0x47')]);return _0xc41ecc[_0x2bc2('0x55')](_0x24b178);}})[_0x2bc2('0x19')](function(_0x5e0fdf){if(_0x5e0fdf){_0x4fa2bb=_0x5e0fdf[_0x2bc2('0x3a')];if(!_0x3b8cf0[_0x2bc2('0x35')]['hasOwnProperty']('nolimit')){_0x24b178[_0x2bc2('0x29')]=qs[_0x2bc2('0x29')](_0x3b8cf0[_0x2bc2('0x35')]['limit']);_0x24b178['offset']=qs['offset'](_0x3b8cf0[_0x2bc2('0x35')]['offset']);}return _0xc41ecc[_0x2bc2('0x55')](_0x24b178);}})['then'](function(_0x2e0bcd){if(_0x2e0bcd){return _0x2e0bcd?{'count':_0x4fa2bb,'rows':_0x2e0bcd}:null;}})['then'](respondWithResult(_0x23883b,null))[_0x2bc2('0x53')](handleError(_0x23883b,null));};exports[_0x2bc2('0x56')]=function(_0x182bb5,_0x27e524,_0x4eda54){var _0x3ad997={};var _0xf78258={};var _0xcb881e;var _0x301cc0;return db['SugarcrmConfiguration']['findOne']({'where':{'id':_0x182bb5[_0x2bc2('0x4e')]['id']}})[_0x2bc2('0x19')](handleEntityNotFound(_0x27e524,null))[_0x2bc2('0x19')](function(_0x196106){if(_0x196106){_0xcb881e=_0x196106;_0xf78258[_0x2bc2('0x33')]=_['keys'](db[_0x2bc2('0x54')][_0x2bc2('0x4f')]);_0xf78258['query']=_[_0x2bc2('0x34')](_0x182bb5['query']);_0xf78258['filters']=_[_0x2bc2('0x37')](_0xf78258['model'],_0xf78258[_0x2bc2('0x35')]);_0x3ad997[_0x2bc2('0x38')]=_[_0x2bc2('0x37')](_0xf78258['model'],qs[_0x2bc2('0x39')](_0x182bb5[_0x2bc2('0x35')][_0x2bc2('0x39')]));_0x3ad997['attributes']=_0x3ad997[_0x2bc2('0x38')][_0x2bc2('0x3a')]?_0x3ad997[_0x2bc2('0x38')]:_0xf78258['model'];_0x3ad997[_0x2bc2('0x3d')]=qs['sort'](_0x182bb5['query']['sort']);_0x3ad997[_0x2bc2('0x3f')]=qs[_0x2bc2('0x36')](_[_0x2bc2('0x57')](_0x182bb5[_0x2bc2('0x35')],_0xf78258[_0x2bc2('0x36')]));if(_0x182bb5[_0x2bc2('0x35')][_0x2bc2('0x40')]){_0x3ad997[_0x2bc2('0x3f')]=_[_0x2bc2('0x41')](_0x3ad997[_0x2bc2('0x3f')],{'$or':_[_0x2bc2('0x42')](_0x3ad997[_0x2bc2('0x38')],function(_0x5aa692){var _0x10b94f={};_0x10b94f[_0x5aa692]={'$like':'%'+_0x182bb5[_0x2bc2('0x35')][_0x2bc2('0x40')]+'%'};return _0x10b94f;})});}_0x3ad997=_['merge']({},_0x3ad997,_0x182bb5[_0x2bc2('0x47')]);return _0xcb881e[_0x2bc2('0x56')](_0x3ad997);}})[_0x2bc2('0x19')](function(_0x3abc34){if(_0x3abc34){_0x301cc0=_0x3abc34[_0x2bc2('0x3a')];if(!_0x182bb5['query'][_0x2bc2('0x3b')](_0x2bc2('0x3c'))){_0x3ad997[_0x2bc2('0x29')]=qs[_0x2bc2('0x29')](_0x182bb5['query'][_0x2bc2('0x29')]);_0x3ad997['offset']=qs[_0x2bc2('0x28')](_0x182bb5[_0x2bc2('0x35')][_0x2bc2('0x28')]);}return _0xcb881e[_0x2bc2('0x56')](_0x3ad997);}})['then'](function(_0x16f3e4){if(_0x16f3e4){return _0x16f3e4?{'count':_0x301cc0,'rows':_0x16f3e4}:null;}})[_0x2bc2('0x19')](respondWithResult(_0x27e524,null))[_0x2bc2('0x53')](handleError(_0x27e524,null));};exports['getDescriptions']=function(_0x3b7a8a,_0x4ec094,_0x27061e){var _0x523685={};var _0x4bb0b7={};var _0x1207e3;var _0x1cb32d;return db['SugarcrmConfiguration']['findOne']({'where':{'id':_0x3b7a8a[_0x2bc2('0x4e')]['id']}})[_0x2bc2('0x19')](handleEntityNotFound(_0x4ec094,null))[_0x2bc2('0x19')](function(_0x576320){if(_0x576320){_0x1207e3=_0x576320;_0x4bb0b7[_0x2bc2('0x33')]=_[_0x2bc2('0x34')](db['SugarcrmField']['rawAttributes']);_0x4bb0b7[_0x2bc2('0x35')]=_[_0x2bc2('0x34')](_0x3b7a8a[_0x2bc2('0x35')]);_0x4bb0b7['filters']=_[_0x2bc2('0x37')](_0x4bb0b7[_0x2bc2('0x33')],_0x4bb0b7[_0x2bc2('0x35')]);_0x523685[_0x2bc2('0x38')]=_[_0x2bc2('0x37')](_0x4bb0b7['model'],qs['fields'](_0x3b7a8a['query'][_0x2bc2('0x39')]));_0x523685[_0x2bc2('0x38')]=_0x523685['attributes']['length']?_0x523685['attributes']:_0x4bb0b7[_0x2bc2('0x33')];_0x523685[_0x2bc2('0x3d')]=qs[_0x2bc2('0x3e')](_0x3b7a8a[_0x2bc2('0x35')][_0x2bc2('0x3e')]);_0x523685[_0x2bc2('0x3f')]=qs['filters'](_['pick'](_0x3b7a8a[_0x2bc2('0x35')],_0x4bb0b7[_0x2bc2('0x36')]));if(_0x3b7a8a[_0x2bc2('0x35')][_0x2bc2('0x40')]){_0x523685['where']=_[_0x2bc2('0x41')](_0x523685['where'],{'$or':_[_0x2bc2('0x42')](_0x523685[_0x2bc2('0x38')],function(_0x482e6d){var _0x2a39d0={};_0x2a39d0[_0x482e6d]={'$like':'%'+_0x3b7a8a[_0x2bc2('0x35')]['filter']+'%'};return _0x2a39d0;})});}_0x523685=_['merge']({},_0x523685,_0x3b7a8a[_0x2bc2('0x47')]);return _0x1207e3[_0x2bc2('0x58')](_0x523685);}})[_0x2bc2('0x19')](function(_0x1b16e6){if(_0x1b16e6){_0x1cb32d=_0x1b16e6[_0x2bc2('0x3a')];if(!_0x3b7a8a['query'][_0x2bc2('0x3b')]('nolimit')){_0x523685[_0x2bc2('0x29')]=qs['limit'](_0x3b7a8a[_0x2bc2('0x35')][_0x2bc2('0x29')]);_0x523685[_0x2bc2('0x28')]=qs[_0x2bc2('0x28')](_0x3b7a8a[_0x2bc2('0x35')][_0x2bc2('0x28')]);}return _0x1207e3[_0x2bc2('0x58')](_0x523685);}})[_0x2bc2('0x19')](function(_0x17e06c){if(_0x17e06c){return _0x17e06c?{'count':_0x1cb32d,'rows':_0x17e06c}:null;}})[_0x2bc2('0x19')](respondWithResult(_0x4ec094,null))[_0x2bc2('0x53')](handleError(_0x4ec094,null));};
\ No newline at end of file
+var _0x50de=['pick','filter','where','merge','VIRTUAL','field','options','include','show','params','includeAll','catch','body','update','SugarcrmField','map','getFields','findOne','getSubjects','hasOwnProperty','nolimit','getDescriptions','html-pdf','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','http','test','SugarcrmConfiguration,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','info','end','status','json','count','offset','limit','set','Content-Range','apply','save','then','destroy','sendStatus','name','send','index','SugarcrmConfiguration','rawAttributes','model','keys','query','intersection','attributes','fields','length','order','sort','filters'];(function(_0x5e6c81,_0x34ae3e){var _0x4ab4ab=function(_0x2771ec){while(--_0x2771ec){_0x5e6c81['push'](_0x5e6c81['shift']());}};_0x4ab4ab(++_0x34ae3e);}(_0x50de,0x69));var _0xe50d=function(_0x3f4a8e,_0x507c39){_0x3f4a8e=_0x3f4a8e-0x0;var _0x7f68fd=_0x50de[_0x3f4a8e];return _0x7f68fd;};'use strict';var pdf=require(_0xe50d('0x0'));var emlformat=require(_0xe50d('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xe50d('0x2'));var jsonpatch=require(_0xe50d('0x3'));var rp=require('request-promise');var moment=require(_0xe50d('0x4'));var BPromise=require(_0xe50d('0x5'));var Mustache=require(_0xe50d('0x6'));var util=require('util');var path=require('path');var sox=require(_0xe50d('0x7'));var csv=require(_0xe50d('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xe50d('0x9'));var squel=require(_0xe50d('0xa'));var crypto=require(_0xe50d('0xb'));var jsforce=require(_0xe50d('0xc'));var deskjs=require(_0xe50d('0xd'));var toCsv=require(_0xe50d('0x8'));var querystring=require(_0xe50d('0xe'));var Papa=require(_0xe50d('0xf'));var Redis=require(_0xe50d('0x10'));var authService=require(_0xe50d('0x11'));var qs=require(_0xe50d('0x12'));var hardwareService=require(_0xe50d('0x13'));var logger=require(_0xe50d('0x14'))('api');var utils=require(_0xe50d('0x15'));var config=require(_0xe50d('0x16'));var db=require('../../mysqldb')['db'];var jayson=require('jayson/promise');var client=jayson['client'][_0xe50d('0x17')]({'port':0x232a});function checkPasswordPattern(_0x33c180,_0x548704,_0x55e2e6){if(_0x55e2e6){var _0x5db329=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x5db329[_0xe50d('0x18')](_0x548704)){return _0x33c180;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x33c180;}}function respondWithRpcPromise(_0x3b5cf9,_0x3b0dd9,_0x417f19,_0x4204b6){return new BPromise(function(_0x4ceb0c,_0x53c2e9){var _0x27631e=_0x4204b6||client;return _0x27631e['request'](_0x3b5cf9,_0x417f19)['then'](function(_0x3cbab1){logger['info'](_0xe50d('0x19'),_0x3b0dd9,_0xe50d('0x1a'));logger[_0xe50d('0x1b')]('SugarcrmConfiguration,\x20%s,\x20%s,\x20%s',_0x3b0dd9,_0xe50d('0x1a'),JSON[_0xe50d('0x1c')](_0x3cbab1));if(_0x3cbab1[_0xe50d('0x1d')]){if(_0x3cbab1[_0xe50d('0x1d')][_0xe50d('0x1e')]===0x1f4){logger[_0xe50d('0x1d')](_0xe50d('0x19'),_0x3b0dd9,_0x3cbab1[_0xe50d('0x1d')][_0xe50d('0x1f')]);return _0x53c2e9(_0x3cbab1[_0xe50d('0x1d')][_0xe50d('0x1f')]);}logger[_0xe50d('0x1d')](_0xe50d('0x19'),_0x3b0dd9,_0x3cbab1[_0xe50d('0x1d')]['message']);return _0x4ceb0c(_0x3cbab1['error'][_0xe50d('0x1f')]);}else{logger[_0xe50d('0x20')](_0xe50d('0x19'),_0x3b0dd9,_0xe50d('0x1a'));_0x4ceb0c(_0x3cbab1['result'][_0xe50d('0x1f')]);}})['catch'](function(_0x32fbd3){logger[_0xe50d('0x1d')](_0xe50d('0x19'),_0x3b0dd9,_0x32fbd3);_0x53c2e9(_0x32fbd3);});});}function respondWithStatusCode(_0x20cd20,_0x1ee754){_0x1ee754=_0x1ee754||0xcc;return function(_0x2a315b){if(_0x2a315b){return _0x20cd20['sendStatus'](_0x1ee754);}return _0x20cd20['status'](_0x1ee754)[_0xe50d('0x21')]();};}function respondWithResult(_0x501d7b,_0x4c9985){_0x4c9985=_0x4c9985||0xc8;return function(_0x22a2ef){if(_0x22a2ef){return _0x501d7b[_0xe50d('0x22')](_0x4c9985)[_0xe50d('0x23')](_0x22a2ef);}};}function respondWithFilteredResult(_0x1fc31b,_0x1b0add){return function(_0x213dd9){if(_0x213dd9){var _0x41215e=_0x213dd9[_0xe50d('0x24')],_0x4107e9=_0x1b0add['offset'],_0x2818d6=_0x1b0add[_0xe50d('0x25')]+_0x1b0add[_0xe50d('0x26')],_0x5d77ad;if(_0x2818d6>=_0x41215e){_0x2818d6=_0x41215e;_0x5d77ad=0xc8;}else{_0x5d77ad=0xce;}_0x1fc31b[_0xe50d('0x22')](_0x5d77ad);return _0x1fc31b[_0xe50d('0x27')](_0xe50d('0x28'),_0x4107e9+'-'+_0x2818d6+'/'+_0x41215e)[_0xe50d('0x23')](_0x213dd9);}return null;};}function patchUpdates(_0x3db718){return function(_0x3c8fd5){try{jsonpatch[_0xe50d('0x29')](_0x3c8fd5,_0x3db718,!![]);}catch(_0x1fdf0c){return BPromise['reject'](_0x1fdf0c);}return _0x3c8fd5[_0xe50d('0x2a')]();};}function saveUpdates(_0x3fd5be,_0x5c3799){return function(_0x3a4e50){if(_0x3a4e50){return _0x3a4e50['update'](_0x3fd5be)[_0xe50d('0x2b')](function(_0x172233){return _0x172233;});}return null;};}function removeEntity(_0x483e5a,_0x1cc32f){return function(_0x52794a){if(_0x52794a){return _0x52794a[_0xe50d('0x2c')]()[_0xe50d('0x2b')](function(){_0x483e5a[_0xe50d('0x22')](0xcc)[_0xe50d('0x21')]();});}};}function handleEntityNotFound(_0xbd88d3,_0x4b662a){return function(_0xf1b4ad){if(!_0xf1b4ad){_0xbd88d3[_0xe50d('0x2d')](0x194);}return _0xf1b4ad;};}function handleError(_0x2f1b11,_0x21b058){_0x21b058=_0x21b058||0x1f4;return function(_0x5bf9d0){logger[_0xe50d('0x1d')](_0x5bf9d0['stack']);if(_0x5bf9d0[_0xe50d('0x2e')]){delete _0x5bf9d0['name'];}_0x2f1b11[_0xe50d('0x22')](_0x21b058)[_0xe50d('0x2f')](_0x5bf9d0);};}exports[_0xe50d('0x30')]=function(_0x5efe53,_0x39fd0e){var _0x35bb31={},_0x190f83={},_0x54c029={'count':0x0,'rows':[]};var _0x4150b3=db[_0xe50d('0x31')][_0xe50d('0x32')];_0x190f83[_0xe50d('0x33')]=_[_0xe50d('0x34')](_0x4150b3);_0x190f83[_0xe50d('0x35')]=_[_0xe50d('0x34')](_0x5efe53[_0xe50d('0x35')]);_0x190f83['filters']=_[_0xe50d('0x36')](_0x190f83[_0xe50d('0x33')],_0x190f83['query']);_0x35bb31[_0xe50d('0x37')]=_[_0xe50d('0x36')](_0x190f83[_0xe50d('0x33')],qs[_0xe50d('0x38')](_0x5efe53[_0xe50d('0x35')][_0xe50d('0x38')]));_0x35bb31[_0xe50d('0x37')]=_0x35bb31[_0xe50d('0x37')][_0xe50d('0x39')]?_0x35bb31['attributes']:_0x190f83[_0xe50d('0x33')];if(!_0x5efe53[_0xe50d('0x35')]['hasOwnProperty']('nolimit')){_0x35bb31[_0xe50d('0x26')]=qs[_0xe50d('0x26')](_0x5efe53[_0xe50d('0x35')][_0xe50d('0x26')]);_0x35bb31[_0xe50d('0x25')]=qs[_0xe50d('0x25')](_0x5efe53[_0xe50d('0x35')]['offset']);}_0x35bb31[_0xe50d('0x3a')]=qs[_0xe50d('0x3b')](_0x5efe53['query'][_0xe50d('0x3b')]);_0x35bb31['where']=qs[_0xe50d('0x3c')](_[_0xe50d('0x3d')](_0x5efe53['query'],_0x190f83[_0xe50d('0x3c')]));if(_0x5efe53['query'][_0xe50d('0x3e')]){_0x35bb31[_0xe50d('0x3f')]=_[_0xe50d('0x40')](_0x35bb31[_0xe50d('0x3f')],{'$or':_['map'](_0x4150b3,function(_0x333723){if(_0x333723['type']['key']!==_0xe50d('0x41')){var _0x1e474d={};_0x1e474d[_0x333723[_0xe50d('0x42')]]={'$like':'%'+_0x5efe53[_0xe50d('0x35')][_0xe50d('0x3e')]+'%'};return _0x1e474d;}})});}_0x35bb31=_[_0xe50d('0x40')]({},_0x35bb31,_0x5efe53[_0xe50d('0x43')]);var _0x1baa40={'where':_0x35bb31[_0xe50d('0x3f')]};return db[_0xe50d('0x31')][_0xe50d('0x24')](_0x1baa40)['then'](function(_0xe5f354){_0x54c029[_0xe50d('0x24')]=_0xe5f354;if(_0x5efe53[_0xe50d('0x35')]['includeAll']){_0x35bb31[_0xe50d('0x44')]=[{'all':!![]}];}return db[_0xe50d('0x31')]['findAll'](_0x35bb31);})[_0xe50d('0x2b')](function(_0x260876){_0x54c029['rows']=_0x260876;return _0x54c029;})[_0xe50d('0x2b')](respondWithFilteredResult(_0x39fd0e,_0x35bb31))['catch'](handleError(_0x39fd0e,null));};exports[_0xe50d('0x45')]=function(_0x2ae8c3,_0x5edcbc){var _0xbf30fa={'raw':![],'where':{'id':_0x2ae8c3[_0xe50d('0x46')]['id']}},_0x4e5519={};_0x4e5519['model']=_['keys'](db[_0xe50d('0x31')]['rawAttributes']);_0x4e5519['query']=_[_0xe50d('0x34')](_0x2ae8c3['query']);_0x4e5519[_0xe50d('0x3c')]=_[_0xe50d('0x36')](_0x4e5519[_0xe50d('0x33')],_0x4e5519['query']);_0xbf30fa['attributes']=_[_0xe50d('0x36')](_0x4e5519[_0xe50d('0x33')],qs[_0xe50d('0x38')](_0x2ae8c3[_0xe50d('0x35')][_0xe50d('0x38')]));_0xbf30fa[_0xe50d('0x37')]=_0xbf30fa['attributes']['length']?_0xbf30fa[_0xe50d('0x37')]:_0x4e5519[_0xe50d('0x33')];if(_0x2ae8c3[_0xe50d('0x35')][_0xe50d('0x47')]){_0xbf30fa['include']=[{'all':!![]}];}_0xbf30fa=_[_0xe50d('0x40')]({},_0xbf30fa,_0x2ae8c3[_0xe50d('0x43')]);return db['SugarcrmConfiguration']['find'](_0xbf30fa)[_0xe50d('0x2b')](handleEntityNotFound(_0x5edcbc,null))[_0xe50d('0x2b')](respondWithResult(_0x5edcbc,null))[_0xe50d('0x48')](handleError(_0x5edcbc,null));};exports['create']=function(_0x10be7b,_0x4a76d2){return db['SugarcrmConfiguration']['create'](_0x10be7b[_0xe50d('0x49')],{})[_0xe50d('0x2b')](respondWithResult(_0x4a76d2,0xc9))[_0xe50d('0x48')](handleError(_0x4a76d2,null));};exports[_0xe50d('0x4a')]=function(_0x224ace,_0x5a996c){if(_0x224ace['body']['id']){delete _0x224ace[_0xe50d('0x49')]['id'];}return db[_0xe50d('0x31')]['find']({'where':{'id':_0x224ace[_0xe50d('0x46')]['id']}})[_0xe50d('0x2b')](handleEntityNotFound(_0x5a996c,null))[_0xe50d('0x2b')](saveUpdates(_0x224ace['body'],null))['then'](respondWithResult(_0x5a996c,null))['catch'](handleError(_0x5a996c,null));};exports[_0xe50d('0x2c')]=function(_0x23ec10,_0x547992){return db[_0xe50d('0x31')]['find']({'where':{'id':_0x23ec10[_0xe50d('0x46')]['id']}})[_0xe50d('0x2b')](handleEntityNotFound(_0x547992,null))[_0xe50d('0x2b')](removeEntity(_0x547992,null))[_0xe50d('0x48')](handleError(_0x547992,null));};exports['getFields']=function(_0xf8bf51,_0x5c0389,_0x12b8a0){var _0x522d81={};var _0x41a9a3={};var _0x159de9;var _0x314f00;return db[_0xe50d('0x31')]['findOne']({'where':{'id':_0xf8bf51[_0xe50d('0x46')]['id']}})[_0xe50d('0x2b')](handleEntityNotFound(_0x5c0389,null))[_0xe50d('0x2b')](function(_0x33fdb6){if(_0x33fdb6){_0x159de9=_0x33fdb6;_0x41a9a3[_0xe50d('0x33')]=_[_0xe50d('0x34')](db[_0xe50d('0x4b')][_0xe50d('0x32')]);_0x41a9a3[_0xe50d('0x35')]=_[_0xe50d('0x34')](_0xf8bf51[_0xe50d('0x35')]);_0x41a9a3[_0xe50d('0x3c')]=_[_0xe50d('0x36')](_0x41a9a3['model'],_0x41a9a3[_0xe50d('0x35')]);_0x522d81[_0xe50d('0x37')]=_[_0xe50d('0x36')](_0x41a9a3[_0xe50d('0x33')],qs['fields'](_0xf8bf51['query'][_0xe50d('0x38')]));_0x522d81[_0xe50d('0x37')]=_0x522d81['attributes'][_0xe50d('0x39')]?_0x522d81['attributes']:_0x41a9a3[_0xe50d('0x33')];_0x522d81[_0xe50d('0x3a')]=qs[_0xe50d('0x3b')](_0xf8bf51[_0xe50d('0x35')][_0xe50d('0x3b')]);_0x522d81['where']=qs[_0xe50d('0x3c')](_[_0xe50d('0x3d')](_0xf8bf51[_0xe50d('0x35')],_0x41a9a3[_0xe50d('0x3c')]));if(_0xf8bf51[_0xe50d('0x35')][_0xe50d('0x3e')]){_0x522d81['where']=_[_0xe50d('0x40')](_0x522d81[_0xe50d('0x3f')],{'$or':_[_0xe50d('0x4c')](_0x522d81[_0xe50d('0x37')],function(_0x4579f9){var _0x57e6d8={};_0x57e6d8[_0x4579f9]={'$like':'%'+_0xf8bf51[_0xe50d('0x35')][_0xe50d('0x3e')]+'%'};return _0x57e6d8;})});}_0x522d81=_[_0xe50d('0x40')]({},_0x522d81,_0xf8bf51[_0xe50d('0x43')]);return _0x159de9['getFields'](_0x522d81);}})[_0xe50d('0x2b')](function(_0x2aa519){if(_0x2aa519){_0x314f00=_0x2aa519['length'];if(!_0xf8bf51['query']['hasOwnProperty']('nolimit')){_0x522d81[_0xe50d('0x26')]=qs[_0xe50d('0x26')](_0xf8bf51[_0xe50d('0x35')][_0xe50d('0x26')]);_0x522d81['offset']=qs[_0xe50d('0x25')](_0xf8bf51['query']['offset']);}return _0x159de9[_0xe50d('0x4d')](_0x522d81);}})['then'](function(_0x1317b9){if(_0x1317b9){return _0x1317b9?{'count':_0x314f00,'rows':_0x1317b9}:null;}})['then'](respondWithResult(_0x5c0389,null))[_0xe50d('0x48')](handleError(_0x5c0389,null));};exports['getSubjects']=function(_0x5f0f57,_0x278892,_0x4ff529){var _0x30054a={};var _0x31a511={};var _0x455130;var _0x571592;return db[_0xe50d('0x31')][_0xe50d('0x4e')]({'where':{'id':_0x5f0f57[_0xe50d('0x46')]['id']}})[_0xe50d('0x2b')](handleEntityNotFound(_0x278892,null))[_0xe50d('0x2b')](function(_0xb538b5){if(_0xb538b5){_0x455130=_0xb538b5;_0x31a511[_0xe50d('0x33')]=_[_0xe50d('0x34')](db[_0xe50d('0x4b')][_0xe50d('0x32')]);_0x31a511[_0xe50d('0x35')]=_['keys'](_0x5f0f57[_0xe50d('0x35')]);_0x31a511[_0xe50d('0x3c')]=_['intersection'](_0x31a511[_0xe50d('0x33')],_0x31a511[_0xe50d('0x35')]);_0x30054a['attributes']=_['intersection'](_0x31a511[_0xe50d('0x33')],qs[_0xe50d('0x38')](_0x5f0f57[_0xe50d('0x35')][_0xe50d('0x38')]));_0x30054a[_0xe50d('0x37')]=_0x30054a[_0xe50d('0x37')][_0xe50d('0x39')]?_0x30054a['attributes']:_0x31a511['model'];_0x30054a['order']=qs[_0xe50d('0x3b')](_0x5f0f57[_0xe50d('0x35')]['sort']);_0x30054a[_0xe50d('0x3f')]=qs[_0xe50d('0x3c')](_[_0xe50d('0x3d')](_0x5f0f57[_0xe50d('0x35')],_0x31a511[_0xe50d('0x3c')]));if(_0x5f0f57[_0xe50d('0x35')][_0xe50d('0x3e')]){_0x30054a[_0xe50d('0x3f')]=_[_0xe50d('0x40')](_0x30054a['where'],{'$or':_[_0xe50d('0x4c')](_0x30054a[_0xe50d('0x37')],function(_0xb4759a){var _0x2f96c3={};_0x2f96c3[_0xb4759a]={'$like':'%'+_0x5f0f57[_0xe50d('0x35')][_0xe50d('0x3e')]+'%'};return _0x2f96c3;})});}_0x30054a=_[_0xe50d('0x40')]({},_0x30054a,_0x5f0f57['options']);return _0x455130[_0xe50d('0x4f')](_0x30054a);}})['then'](function(_0x3cb1b9){if(_0x3cb1b9){_0x571592=_0x3cb1b9[_0xe50d('0x39')];if(!_0x5f0f57[_0xe50d('0x35')]['hasOwnProperty']('nolimit')){_0x30054a[_0xe50d('0x26')]=qs[_0xe50d('0x26')](_0x5f0f57[_0xe50d('0x35')][_0xe50d('0x26')]);_0x30054a[_0xe50d('0x25')]=qs[_0xe50d('0x25')](_0x5f0f57['query'][_0xe50d('0x25')]);}return _0x455130[_0xe50d('0x4f')](_0x30054a);}})[_0xe50d('0x2b')](function(_0x1090ce){if(_0x1090ce){return _0x1090ce?{'count':_0x571592,'rows':_0x1090ce}:null;}})['then'](respondWithResult(_0x278892,null))[_0xe50d('0x48')](handleError(_0x278892,null));};exports['getDescriptions']=function(_0x29744d,_0x9d0327,_0x520d14){var _0x36a696={};var _0x8d29d1={};var _0x2f9c3d;var _0xb7593d;return db[_0xe50d('0x31')][_0xe50d('0x4e')]({'where':{'id':_0x29744d[_0xe50d('0x46')]['id']}})[_0xe50d('0x2b')](handleEntityNotFound(_0x9d0327,null))['then'](function(_0x4ea75e){if(_0x4ea75e){_0x2f9c3d=_0x4ea75e;_0x8d29d1[_0xe50d('0x33')]=_[_0xe50d('0x34')](db[_0xe50d('0x4b')][_0xe50d('0x32')]);_0x8d29d1[_0xe50d('0x35')]=_[_0xe50d('0x34')](_0x29744d[_0xe50d('0x35')]);_0x8d29d1[_0xe50d('0x3c')]=_[_0xe50d('0x36')](_0x8d29d1[_0xe50d('0x33')],_0x8d29d1[_0xe50d('0x35')]);_0x36a696[_0xe50d('0x37')]=_[_0xe50d('0x36')](_0x8d29d1[_0xe50d('0x33')],qs[_0xe50d('0x38')](_0x29744d[_0xe50d('0x35')][_0xe50d('0x38')]));_0x36a696[_0xe50d('0x37')]=_0x36a696['attributes'][_0xe50d('0x39')]?_0x36a696[_0xe50d('0x37')]:_0x8d29d1[_0xe50d('0x33')];_0x36a696[_0xe50d('0x3a')]=qs[_0xe50d('0x3b')](_0x29744d['query']['sort']);_0x36a696[_0xe50d('0x3f')]=qs[_0xe50d('0x3c')](_['pick'](_0x29744d['query'],_0x8d29d1[_0xe50d('0x3c')]));if(_0x29744d[_0xe50d('0x35')][_0xe50d('0x3e')]){_0x36a696[_0xe50d('0x3f')]=_[_0xe50d('0x40')](_0x36a696[_0xe50d('0x3f')],{'$or':_[_0xe50d('0x4c')](_0x36a696[_0xe50d('0x37')],function(_0x25c45b){var _0x2c48f5={};_0x2c48f5[_0x25c45b]={'$like':'%'+_0x29744d['query'][_0xe50d('0x3e')]+'%'};return _0x2c48f5;})});}_0x36a696=_[_0xe50d('0x40')]({},_0x36a696,_0x29744d[_0xe50d('0x43')]);return _0x2f9c3d['getDescriptions'](_0x36a696);}})['then'](function(_0x1e5fbc){if(_0x1e5fbc){_0xb7593d=_0x1e5fbc[_0xe50d('0x39')];if(!_0x29744d['query'][_0xe50d('0x50')](_0xe50d('0x51'))){_0x36a696[_0xe50d('0x26')]=qs[_0xe50d('0x26')](_0x29744d['query']['limit']);_0x36a696[_0xe50d('0x25')]=qs[_0xe50d('0x25')](_0x29744d[_0xe50d('0x35')][_0xe50d('0x25')]);}return _0x2f9c3d[_0xe50d('0x52')](_0x36a696);}})[_0xe50d('0x2b')](function(_0x6d6ad9){if(_0x6d6ad9){return _0x6d6ad9?{'count':_0xb7593d,'rows':_0x6d6ad9}:null;}})[_0xe50d('0x2b')](respondWithResult(_0x9d0327,null))['catch'](handleError(_0x9d0327,null));};
\ No newline at end of file
index fce7759..250c28f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8be3=['../../config/environment','./intSugarcrmConfiguration.attributes','define','lodash','util','../../config/logger','moment','request-promise','path','rimraf'];(function(_0x4017b0,_0x4347db){var _0x5ed4f7=function(_0x706c26){while(--_0x706c26){_0x4017b0['push'](_0x4017b0['shift']());}};_0x5ed4f7(++_0x4347db);}(_0x8be3,0xc1));var _0x38be=function(_0x4e8909,_0x955af0){_0x4e8909=_0x4e8909-0x0;var _0x2e72b0=_0x8be3[_0x4e8909];return _0x2e72b0;};'use strict';var _=require(_0x38be('0x0'));var util=require(_0x38be('0x1'));var logger=require(_0x38be('0x2'))('api');var moment=require(_0x38be('0x3'));var BPromise=require('bluebird');var rp=require(_0x38be('0x4'));var fs=require('fs');var path=require(_0x38be('0x5'));var rimraf=require(_0x38be('0x6'));var config=require(_0x38be('0x7'));var attributes=require(_0x38be('0x8'));module['exports']=function(_0x212d78,_0xe16319){return _0x212d78[_0x38be('0x9')]('SugarcrmConfiguration',attributes,{'tableName':'int_sugarcrm_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8039=['../../config/environment','./intSugarcrmConfiguration.attributes','exports','define','SugarcrmConfiguration','lodash','util','api','moment','path','rimraf'];(function(_0x246c1a,_0x596d45){var _0x4cee0d=function(_0x332317){while(--_0x332317){_0x246c1a['push'](_0x246c1a['shift']());}};_0x4cee0d(++_0x596d45);}(_0x8039,0x1bd));var _0x9803=function(_0x3ec122,_0x55150a){_0x3ec122=_0x3ec122-0x0;var _0x4ecf41=_0x8039[_0x3ec122];return _0x4ecf41;};'use strict';var _=require(_0x9803('0x0'));var util=require(_0x9803('0x1'));var logger=require('../../config/logger')(_0x9803('0x2'));var moment=require(_0x9803('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x9803('0x4'));var rimraf=require(_0x9803('0x5'));var config=require(_0x9803('0x6'));var attributes=require(_0x9803('0x7'));module[_0x9803('0x8')]=function(_0x5bdb00,_0x57a9e5){return _0x5bdb00[_0x9803('0x9')](_0x9803('0xa'),attributes,{'tableName':'int_sugarcrm_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2b0f03c..67487a5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8d61=['bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','client','http','then','info','SugarcrmConfiguration,\x20%s,\x20%s','request\x20sent','debug','SugarcrmConfiguration,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','util','moment'];(function(_0x1db251,_0xf0443d){var _0x56685a=function(_0x6ec6b7){while(--_0x6ec6b7){_0x1db251['push'](_0x1db251['shift']());}};_0x56685a(++_0xf0443d);}(_0x8d61,0x67));var _0x18d6=function(_0x30182f,_0x30ce41){_0x30182f=_0x30182f-0x0;var _0x5207db=_0x8d61[_0x30182f];return _0x5207db;};'use strict';var _=require('lodash');var util=require(_0x18d6('0x0'));var moment=require(_0x18d6('0x1'));var BPromise=require(_0x18d6('0x2'));var rs=require(_0x18d6('0x3'));var fs=require('fs');var Redis=require(_0x18d6('0x4'));var db=require(_0x18d6('0x5'))['db'];var utils=require(_0x18d6('0x6'));var logger=require(_0x18d6('0x7'))('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x18d6('0x8')][_0x18d6('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x254163,_0x77da4e,_0x519079){return new BPromise(function(_0xe6f86e,_0x239d5d){return client['request'](_0x254163,_0x519079)[_0x18d6('0xa')](function(_0x5ba6b7){logger[_0x18d6('0xb')](_0x18d6('0xc'),_0x77da4e,_0x18d6('0xd'));logger[_0x18d6('0xe')](_0x18d6('0xf'),_0x77da4e,'request\x20sent',JSON['stringify'](_0x5ba6b7));if(_0x5ba6b7[_0x18d6('0x10')]){if(_0x5ba6b7[_0x18d6('0x10')][_0x18d6('0x11')]===0x1f4){logger[_0x18d6('0x10')]('SugarcrmConfiguration,\x20%s,\x20%s',_0x77da4e,_0x5ba6b7[_0x18d6('0x10')][_0x18d6('0x12')]);return _0x239d5d(_0x5ba6b7['error'][_0x18d6('0x12')]);}logger[_0x18d6('0x10')](_0x18d6('0xc'),_0x77da4e,_0x5ba6b7[_0x18d6('0x10')][_0x18d6('0x12')]);return _0xe6f86e(_0x5ba6b7[_0x18d6('0x10')][_0x18d6('0x12')]);}else{logger['info']('SugarcrmConfiguration,\x20%s,\x20%s',_0x77da4e,'request\x20sent');_0xe6f86e(_0x5ba6b7[_0x18d6('0x13')]['message']);}})[_0x18d6('0x14')](function(_0x1a8680){logger[_0x18d6('0x10')](_0x18d6('0xc'),_0x77da4e,_0x1a8680);_0x239d5d(_0x1a8680);});});}
\ No newline at end of file
+var _0xbf15=['error','code','message','result','catch','lodash','util','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','request','then','info','SugarcrmConfiguration,\x20%s,\x20%s','SugarcrmConfiguration,\x20%s,\x20%s,\x20%s','request\x20sent','stringify'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xbf15,0xec));var _0x5bf1=function(_0x4bb8e4,_0xc37658){_0x4bb8e4=_0x4bb8e4-0x0;var _0x4eaca0=_0xbf15[_0x4bb8e4];return _0x4eaca0;};'use strict';var _=require(_0x5bf1('0x0'));var util=require(_0x5bf1('0x1'));var moment=require('moment');var BPromise=require(_0x5bf1('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x5bf1('0x3'));var db=require(_0x5bf1('0x4'))['db'];var utils=require(_0x5bf1('0x5'));var logger=require(_0x5bf1('0x6'))(_0x5bf1('0x7'));var config=require(_0x5bf1('0x8'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x2e88e0,_0x4fd981,_0x25b4a3){return new BPromise(function(_0x572df8,_0x49d567){return client[_0x5bf1('0x9')](_0x2e88e0,_0x25b4a3)[_0x5bf1('0xa')](function(_0x586879){logger[_0x5bf1('0xb')](_0x5bf1('0xc'),_0x4fd981,'request\x20sent');logger['debug'](_0x5bf1('0xd'),_0x4fd981,_0x5bf1('0xe'),JSON[_0x5bf1('0xf')](_0x586879));if(_0x586879[_0x5bf1('0x10')]){if(_0x586879['error'][_0x5bf1('0x11')]===0x1f4){logger[_0x5bf1('0x10')](_0x5bf1('0xc'),_0x4fd981,_0x586879[_0x5bf1('0x10')][_0x5bf1('0x12')]);return _0x49d567(_0x586879[_0x5bf1('0x10')]['message']);}logger['error']('SugarcrmConfiguration,\x20%s,\x20%s',_0x4fd981,_0x586879[_0x5bf1('0x10')][_0x5bf1('0x12')]);return _0x572df8(_0x586879[_0x5bf1('0x10')][_0x5bf1('0x12')]);}else{logger[_0x5bf1('0xb')](_0x5bf1('0xc'),_0x4fd981,_0x5bf1('0xe'));_0x572df8(_0x586879[_0x5bf1('0x13')][_0x5bf1('0x12')]);}})[_0x5bf1('0x14')](function(_0x10921f){logger['error'](_0x5bf1('0xc'),_0x4fd981,_0x10921f);_0x49d567(_0x10921f);});});}
\ No newline at end of file
index ab75e33..9bf1fda 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x47a6=['update','exports','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','post','create','put'];(function(_0x30f395,_0x3629b5){var _0x2ea0ee=function(_0x35a9af){while(--_0x35a9af){_0x30f395['push'](_0x30f395['shift']());}};_0x2ea0ee(++_0x3629b5);}(_0x47a6,0xd2));var _0x647a=function(_0x463927,_0x4b9ffa){_0x463927=_0x463927-0x0;var _0x1453f5=_0x47a6[_0x463927];return _0x1453f5;};'use strict';var multer=require('multer');var util=require(_0x647a('0x0'));var path=require('path');var timeout=require(_0x647a('0x1'));var express=require(_0x647a('0x2'));var router=express[_0x647a('0x3')]();var auth=require(_0x647a('0x4'));var interaction=require(_0x647a('0x5'));var config=require(_0x647a('0x6'));var controller=require('./intSugarcrmField.controller');router[_0x647a('0x7')]('/',auth[_0x647a('0x8')](),controller[_0x647a('0x9')]);router[_0x647a('0x7')](_0x647a('0xa'),auth[_0x647a('0x8')](),controller['show']);router[_0x647a('0xb')]('/',auth['isAuthenticated'](),controller[_0x647a('0xc')]);router[_0x647a('0xd')](_0x647a('0xa'),auth[_0x647a('0x8')](),controller[_0x647a('0xe')]);router['delete']('/:id',auth[_0x647a('0x8')](),controller['destroy']);module[_0x647a('0xf')]=router;
\ No newline at end of file
+var _0x37ef=['multer','connect-timeout','express','../../components/interaction/service','../../config/environment','./intSugarcrmField.controller','get','isAuthenticated','index','/:id','show','post','create','update','delete','destroy'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x37ef,0x1d0));var _0xf37e=function(_0x7598c2,_0x3e0d4a){_0x7598c2=_0x7598c2-0x0;var _0x72ad3d=_0x37ef[_0x7598c2];return _0x72ad3d;};'use strict';var multer=require(_0xf37e('0x0'));var util=require('util');var path=require('path');var timeout=require(_0xf37e('0x1'));var express=require(_0xf37e('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xf37e('0x3'));var config=require(_0xf37e('0x4'));var controller=require(_0xf37e('0x5'));router[_0xf37e('0x6')]('/',auth[_0xf37e('0x7')](),controller[_0xf37e('0x8')]);router[_0xf37e('0x6')](_0xf37e('0x9'),auth[_0xf37e('0x7')](),controller[_0xf37e('0xa')]);router[_0xf37e('0xb')]('/',auth['isAuthenticated'](),controller[_0xf37e('0xc')]);router['put'](_0xf37e('0x9'),auth[_0xf37e('0x7')](),controller[_0xf37e('0xd')]);router[_0xf37e('0xe')](_0xf37e('0x9'),auth[_0xf37e('0x7')](),controller[_0xf37e('0xf')]);module['exports']=router;
\ No newline at end of file
index 98bebf5..486af40 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x91a7=['STRING','exports','ENUM','string','customVariable'];(function(_0xf219f7,_0x27140d){var _0x563bf2=function(_0x1949d1){while(--_0x1949d1){_0xf219f7['push'](_0xf219f7['shift']());}};_0x563bf2(++_0x27140d);}(_0x91a7,0xe7));var _0x791a=function(_0x48c94b,_0x1b2f3b){_0x48c94b=_0x48c94b-0x0;var _0xecba1e=_0x91a7[_0x48c94b];return _0xecba1e;};'use strict';var Sequelize=require('sequelize');module[_0x791a('0x0')]={'type':{'type':Sequelize[_0x791a('0x1')](_0x791a('0x2'),'variable',_0x791a('0x3'),'keyValue'),'defaultValue':_0x791a('0x2')},'content':{'type':Sequelize['STRING']},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0x791a('0x1')](_0x791a('0x2'),'variable',_0x791a('0x3'))},'keyContent':{'type':Sequelize['STRING']},'idField':{'type':Sequelize[_0x791a('0x4')]},'nameField':{'type':Sequelize[_0x791a('0x4')]},'customField':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x791a('0x4')]}};
\ No newline at end of file
+var _0x22fb=['string','STRING','BOOLEAN','ENUM','variable','customVariable','keyValue'];(function(_0x1f7baf,_0x2a7fe8){var _0x239696=function(_0x59460a){while(--_0x59460a){_0x1f7baf['push'](_0x1f7baf['shift']());}};_0x239696(++_0x2a7fe8);}(_0x22fb,0x192));var _0xb22f=function(_0xaeafbc,_0x4b59aa){_0xaeafbc=_0xaeafbc-0x0;var _0x1d6ffa=_0x22fb[_0xaeafbc];return _0x1d6ffa;};'use strict';var Sequelize=require('sequelize');module['exports']={'type':{'type':Sequelize[_0xb22f('0x0')]('string',_0xb22f('0x1'),_0xb22f('0x2'),_0xb22f('0x3')),'defaultValue':_0xb22f('0x4')},'content':{'type':Sequelize[_0xb22f('0x5')]},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0xb22f('0x0')](_0xb22f('0x4'),_0xb22f('0x1'),_0xb22f('0x2'))},'keyContent':{'type':Sequelize[_0xb22f('0x5')]},'idField':{'type':Sequelize[_0xb22f('0x5')]},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize[_0xb22f('0x6')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0xb22f('0x5')]}};
\ No newline at end of file
index 89a35d3..b2ba340 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8bd4=['lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','count','offset','Content-Range','reject','save','update','then','destroy','end','error','name','send','index','SugarcrmField','rawAttributes','keys','query','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','filters','filter','map','key','VIRTUAL','field','merge','include','catch','show','params','includeAll','options','find','create','body','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','path','sox','to-csv','ejs'];(function(_0x166dee,_0x21f362){var _0x45c622=function(_0x3daaeb){while(--_0x3daaeb){_0x166dee['push'](_0x166dee['shift']());}};_0x45c622(++_0x21f362);}(_0x8bd4,0x115));var _0x48bd=function(_0x280c49,_0x22188e){_0x280c49=_0x280c49-0x0;var _0x2a2f2a=_0x8bd4[_0x280c49];return _0x2a2f2a;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x48bd('0x0'));var rimraf=require(_0x48bd('0x1'));var zipdir=require(_0x48bd('0x2'));var jsonpatch=require(_0x48bd('0x3'));var rp=require(_0x48bd('0x4'));var moment=require(_0x48bd('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x48bd('0x6'));var util=require('util');var path=require(_0x48bd('0x7'));var sox=require(_0x48bd('0x8'));var csv=require(_0x48bd('0x9'));var ejs=require(_0x48bd('0xa'));var fs=require('fs');var _=require(_0x48bd('0xb'));var squel=require(_0x48bd('0xc'));var crypto=require(_0x48bd('0xd'));var jsforce=require(_0x48bd('0xe'));var deskjs=require(_0x48bd('0xf'));var toCsv=require(_0x48bd('0x9'));var querystring=require(_0x48bd('0x10'));var Papa=require(_0x48bd('0x11'));var Redis=require(_0x48bd('0x12'));var authService=require(_0x48bd('0x13'));var qs=require(_0x48bd('0x14'));var hardwareService=require(_0x48bd('0x15'));var logger=require(_0x48bd('0x16'))(_0x48bd('0x17'));var utils=require(_0x48bd('0x18'));var config=require(_0x48bd('0x19'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1548b4,_0x6f3017){_0x6f3017=_0x6f3017||0xcc;return function(_0x108f0d){if(_0x108f0d){return _0x1548b4[_0x48bd('0x1a')](_0x6f3017);}return _0x1548b4[_0x48bd('0x1b')](_0x6f3017)['end']();};}function respondWithResult(_0x548b65,_0x3ffbe2){_0x3ffbe2=_0x3ffbe2||0xc8;return function(_0x3b5d9d){if(_0x3b5d9d){return _0x548b65['status'](_0x3ffbe2)['json'](_0x3b5d9d);}};}function respondWithFilteredResult(_0x28b9a6,_0x1a2c59){return function(_0x58989c){if(_0x58989c){var _0x899470=_0x58989c[_0x48bd('0x1c')],_0x2d47c9=_0x1a2c59[_0x48bd('0x1d')],_0x1d0331=_0x1a2c59[_0x48bd('0x1d')]+_0x1a2c59['limit'],_0x43c62b;if(_0x1d0331>=_0x899470){_0x1d0331=_0x899470;_0x43c62b=0xc8;}else{_0x43c62b=0xce;}_0x28b9a6[_0x48bd('0x1b')](_0x43c62b);return _0x28b9a6['set'](_0x48bd('0x1e'),_0x2d47c9+'-'+_0x1d0331+'/'+_0x899470)['json'](_0x58989c);}return null;};}function patchUpdates(_0x31a477){return function(_0x4b6e61){try{jsonpatch['apply'](_0x4b6e61,_0x31a477,!![]);}catch(_0x5eacbf){return BPromise[_0x48bd('0x1f')](_0x5eacbf);}return _0x4b6e61[_0x48bd('0x20')]();};}function saveUpdates(_0x2855f1,_0x52f1f9){return function(_0x3f684e){if(_0x3f684e){return _0x3f684e[_0x48bd('0x21')](_0x2855f1)[_0x48bd('0x22')](function(_0x27e976){return _0x27e976;});}return null;};}function removeEntity(_0x40428e,_0x445e4c){return function(_0x2f2c5c){if(_0x2f2c5c){return _0x2f2c5c[_0x48bd('0x23')]()[_0x48bd('0x22')](function(){_0x40428e[_0x48bd('0x1b')](0xcc)[_0x48bd('0x24')]();});}};}function handleEntityNotFound(_0x48aaca,_0x3cbded){return function(_0x36fd62){if(!_0x36fd62){_0x48aaca[_0x48bd('0x1a')](0x194);}return _0x36fd62;};}function handleError(_0x3cda66,_0x24b145){_0x24b145=_0x24b145||0x1f4;return function(_0xfd7099){logger[_0x48bd('0x25')](_0xfd7099['stack']);if(_0xfd7099['name']){delete _0xfd7099[_0x48bd('0x26')];}_0x3cda66['status'](_0x24b145)[_0x48bd('0x27')](_0xfd7099);};}exports[_0x48bd('0x28')]=function(_0x254005,_0x14531f){var _0x3898b6={},_0x48cdd1={},_0xda1887={'count':0x0,'rows':[]};var _0x26aae8=db[_0x48bd('0x29')][_0x48bd('0x2a')];_0x48cdd1['model']=_[_0x48bd('0x2b')](_0x26aae8);_0x48cdd1[_0x48bd('0x2c')]=_[_0x48bd('0x2b')](_0x254005[_0x48bd('0x2c')]);_0x48cdd1['filters']=_[_0x48bd('0x2d')](_0x48cdd1[_0x48bd('0x2e')],_0x48cdd1['query']);_0x3898b6[_0x48bd('0x2f')]=_[_0x48bd('0x2d')](_0x48cdd1['model'],qs[_0x48bd('0x30')](_0x254005[_0x48bd('0x2c')][_0x48bd('0x30')]));_0x3898b6[_0x48bd('0x2f')]=_0x3898b6['attributes'][_0x48bd('0x31')]?_0x3898b6[_0x48bd('0x2f')]:_0x48cdd1['model'];if(!_0x254005[_0x48bd('0x2c')][_0x48bd('0x32')](_0x48bd('0x33'))){_0x3898b6[_0x48bd('0x34')]=qs[_0x48bd('0x34')](_0x254005[_0x48bd('0x2c')][_0x48bd('0x34')]);_0x3898b6['offset']=qs[_0x48bd('0x1d')](_0x254005[_0x48bd('0x2c')][_0x48bd('0x1d')]);}_0x3898b6[_0x48bd('0x35')]=qs[_0x48bd('0x36')](_0x254005[_0x48bd('0x2c')][_0x48bd('0x36')]);_0x3898b6[_0x48bd('0x37')]=qs[_0x48bd('0x38')](_['pick'](_0x254005[_0x48bd('0x2c')],_0x48cdd1[_0x48bd('0x38')]));if(_0x254005[_0x48bd('0x2c')][_0x48bd('0x39')]){_0x3898b6[_0x48bd('0x37')]=_['merge'](_0x3898b6['where'],{'$or':_[_0x48bd('0x3a')](_0x26aae8,function(_0x1bdc8b){if(_0x1bdc8b['type'][_0x48bd('0x3b')]!==_0x48bd('0x3c')){var _0x6c8fae={};_0x6c8fae[_0x1bdc8b[_0x48bd('0x3d')]]={'$like':'%'+_0x254005[_0x48bd('0x2c')][_0x48bd('0x39')]+'%'};return _0x6c8fae;}})});}_0x3898b6=_[_0x48bd('0x3e')]({},_0x3898b6,_0x254005['options']);var _0x18d725={'where':_0x3898b6[_0x48bd('0x37')]};return db[_0x48bd('0x29')][_0x48bd('0x1c')](_0x18d725)[_0x48bd('0x22')](function(_0x5cf1e7){_0xda1887['count']=_0x5cf1e7;if(_0x254005[_0x48bd('0x2c')]['includeAll']){_0x3898b6[_0x48bd('0x3f')]=[{'all':!![]}];}return db['SugarcrmField']['findAll'](_0x3898b6);})[_0x48bd('0x22')](function(_0xa26821){_0xda1887['rows']=_0xa26821;return _0xda1887;})[_0x48bd('0x22')](respondWithFilteredResult(_0x14531f,_0x3898b6))[_0x48bd('0x40')](handleError(_0x14531f,null));};exports[_0x48bd('0x41')]=function(_0x9fae80,_0x323de6){var _0x5c465f={'raw':!![],'where':{'id':_0x9fae80[_0x48bd('0x42')]['id']}},_0x36dad9={};_0x36dad9[_0x48bd('0x2e')]=_['keys'](db[_0x48bd('0x29')][_0x48bd('0x2a')]);_0x36dad9['query']=_[_0x48bd('0x2b')](_0x9fae80['query']);_0x36dad9[_0x48bd('0x38')]=_[_0x48bd('0x2d')](_0x36dad9[_0x48bd('0x2e')],_0x36dad9[_0x48bd('0x2c')]);_0x5c465f['attributes']=_[_0x48bd('0x2d')](_0x36dad9[_0x48bd('0x2e')],qs['fields'](_0x9fae80[_0x48bd('0x2c')][_0x48bd('0x30')]));_0x5c465f[_0x48bd('0x2f')]=_0x5c465f[_0x48bd('0x2f')][_0x48bd('0x31')]?_0x5c465f[_0x48bd('0x2f')]:_0x36dad9[_0x48bd('0x2e')];if(_0x9fae80[_0x48bd('0x2c')][_0x48bd('0x43')]){_0x5c465f[_0x48bd('0x3f')]=[{'all':!![]}];}_0x5c465f=_[_0x48bd('0x3e')]({},_0x5c465f,_0x9fae80[_0x48bd('0x44')]);return db[_0x48bd('0x29')][_0x48bd('0x45')](_0x5c465f)[_0x48bd('0x22')](handleEntityNotFound(_0x323de6,null))[_0x48bd('0x22')](respondWithResult(_0x323de6,null))[_0x48bd('0x40')](handleError(_0x323de6,null));};exports[_0x48bd('0x46')]=function(_0x467a7c,_0x353948){return db[_0x48bd('0x29')]['create'](_0x467a7c[_0x48bd('0x47')],{})[_0x48bd('0x22')](respondWithResult(_0x353948,0xc9))[_0x48bd('0x40')](handleError(_0x353948,null));};exports[_0x48bd('0x21')]=function(_0x481b8f,_0x8f27cf){if(_0x481b8f[_0x48bd('0x47')]['id']){delete _0x481b8f[_0x48bd('0x47')]['id'];}return db[_0x48bd('0x29')][_0x48bd('0x45')]({'where':{'id':_0x481b8f['params']['id']}})[_0x48bd('0x22')](handleEntityNotFound(_0x8f27cf,null))[_0x48bd('0x22')](saveUpdates(_0x481b8f['body'],null))['then'](respondWithResult(_0x8f27cf,null))['catch'](handleError(_0x8f27cf,null));};exports['destroy']=function(_0xf3878d,_0x12e07a){return db['SugarcrmField']['find']({'where':{'id':_0xf3878d['params']['id']}})[_0x48bd('0x22')](handleEntityNotFound(_0x12e07a,null))[_0x48bd('0x22')](removeEntity(_0x12e07a,null))[_0x48bd('0x40')](handleError(_0x12e07a,null));};
\ No newline at end of file
+var _0x5edb=['save','update','then','destroy','stack','name','send','index','SugarcrmField','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','type','VIRTUAL','count','includeAll','include','findAll','catch','show','options','create','body','find','params','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','crypto','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','sendStatus','status','end','json','offset','set','apply'];(function(_0x44d64d,_0x3b5380){var _0x2e7908=function(_0x2b634c){while(--_0x2b634c){_0x44d64d['push'](_0x44d64d['shift']());}};_0x2e7908(++_0x3b5380);}(_0x5edb,0xb5));var _0xb5ed=function(_0x456c88,_0x37819e){_0x456c88=_0x456c88-0x0;var _0x35d0a4=_0x5edb[_0x456c88];return _0x35d0a4;};'use strict';var pdf=require(_0xb5ed('0x0'));var emlformat=require(_0xb5ed('0x1'));var rimraf=require(_0xb5ed('0x2'));var zipdir=require(_0xb5ed('0x3'));var jsonpatch=require(_0xb5ed('0x4'));var rp=require(_0xb5ed('0x5'));var moment=require(_0xb5ed('0x6'));var BPromise=require(_0xb5ed('0x7'));var Mustache=require(_0xb5ed('0x8'));var util=require(_0xb5ed('0x9'));var path=require('path');var sox=require(_0xb5ed('0xa'));var csv=require(_0xb5ed('0xb'));var ejs=require(_0xb5ed('0xc'));var fs=require('fs');var _=require(_0xb5ed('0xd'));var squel=require('squel');var crypto=require(_0xb5ed('0xe'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xb5ed('0xb'));var querystring=require('querystring');var Papa=require(_0xb5ed('0xf'));var Redis=require(_0xb5ed('0x10'));var authService=require(_0xb5ed('0x11'));var qs=require(_0xb5ed('0x12'));var hardwareService=require(_0xb5ed('0x13'));var logger=require(_0xb5ed('0x14'))(_0xb5ed('0x15'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xa49322,_0x4b8f8d){_0x4b8f8d=_0x4b8f8d||0xcc;return function(_0x498e6d){if(_0x498e6d){return _0xa49322[_0xb5ed('0x16')](_0x4b8f8d);}return _0xa49322[_0xb5ed('0x17')](_0x4b8f8d)[_0xb5ed('0x18')]();};}function respondWithResult(_0x599500,_0x67028){_0x67028=_0x67028||0xc8;return function(_0x1f5759){if(_0x1f5759){return _0x599500['status'](_0x67028)[_0xb5ed('0x19')](_0x1f5759);}};}function respondWithFilteredResult(_0x2d5141,_0x410acc){return function(_0x514c8c){if(_0x514c8c){var _0x49637a=_0x514c8c['count'],_0x1929a0=_0x410acc['offset'],_0xd0fb14=_0x410acc[_0xb5ed('0x1a')]+_0x410acc['limit'],_0x2c85fa;if(_0xd0fb14>=_0x49637a){_0xd0fb14=_0x49637a;_0x2c85fa=0xc8;}else{_0x2c85fa=0xce;}_0x2d5141['status'](_0x2c85fa);return _0x2d5141[_0xb5ed('0x1b')]('Content-Range',_0x1929a0+'-'+_0xd0fb14+'/'+_0x49637a)[_0xb5ed('0x19')](_0x514c8c);}return null;};}function patchUpdates(_0x53bb9c){return function(_0x4d2752){try{jsonpatch[_0xb5ed('0x1c')](_0x4d2752,_0x53bb9c,!![]);}catch(_0x389ad1){return BPromise['reject'](_0x389ad1);}return _0x4d2752[_0xb5ed('0x1d')]();};}function saveUpdates(_0x338ac5,_0x575237){return function(_0x50a1ee){if(_0x50a1ee){return _0x50a1ee[_0xb5ed('0x1e')](_0x338ac5)[_0xb5ed('0x1f')](function(_0x499f9c){return _0x499f9c;});}return null;};}function removeEntity(_0x4ddc66,_0x367c6f){return function(_0x119c8b){if(_0x119c8b){return _0x119c8b[_0xb5ed('0x20')]()[_0xb5ed('0x1f')](function(){_0x4ddc66[_0xb5ed('0x17')](0xcc)[_0xb5ed('0x18')]();});}};}function handleEntityNotFound(_0x550961,_0x4c731a){return function(_0x35d585){if(!_0x35d585){_0x550961[_0xb5ed('0x16')](0x194);}return _0x35d585;};}function handleError(_0x52b2c7,_0x4846ab){_0x4846ab=_0x4846ab||0x1f4;return function(_0x53a52e){logger['error'](_0x53a52e[_0xb5ed('0x21')]);if(_0x53a52e[_0xb5ed('0x22')]){delete _0x53a52e[_0xb5ed('0x22')];}_0x52b2c7['status'](_0x4846ab)[_0xb5ed('0x23')](_0x53a52e);};}exports[_0xb5ed('0x24')]=function(_0x1de5e5,_0x24cda8){var _0x2f25fe={},_0x5ceaee={},_0x25b46a={'count':0x0,'rows':[]};var _0x206f50=db[_0xb5ed('0x25')][_0xb5ed('0x26')];_0x5ceaee['model']=_[_0xb5ed('0x27')](_0x206f50);_0x5ceaee[_0xb5ed('0x28')]=_['keys'](_0x1de5e5['query']);_0x5ceaee[_0xb5ed('0x29')]=_[_0xb5ed('0x2a')](_0x5ceaee[_0xb5ed('0x2b')],_0x5ceaee[_0xb5ed('0x28')]);_0x2f25fe[_0xb5ed('0x2c')]=_[_0xb5ed('0x2a')](_0x5ceaee[_0xb5ed('0x2b')],qs[_0xb5ed('0x2d')](_0x1de5e5[_0xb5ed('0x28')][_0xb5ed('0x2d')]));_0x2f25fe[_0xb5ed('0x2c')]=_0x2f25fe[_0xb5ed('0x2c')][_0xb5ed('0x2e')]?_0x2f25fe[_0xb5ed('0x2c')]:_0x5ceaee[_0xb5ed('0x2b')];if(!_0x1de5e5['query'][_0xb5ed('0x2f')](_0xb5ed('0x30'))){_0x2f25fe[_0xb5ed('0x31')]=qs[_0xb5ed('0x31')](_0x1de5e5['query'][_0xb5ed('0x31')]);_0x2f25fe[_0xb5ed('0x1a')]=qs[_0xb5ed('0x1a')](_0x1de5e5['query'][_0xb5ed('0x1a')]);}_0x2f25fe[_0xb5ed('0x32')]=qs['sort'](_0x1de5e5['query'][_0xb5ed('0x33')]);_0x2f25fe[_0xb5ed('0x34')]=qs[_0xb5ed('0x29')](_[_0xb5ed('0x35')](_0x1de5e5[_0xb5ed('0x28')],_0x5ceaee[_0xb5ed('0x29')]));if(_0x1de5e5[_0xb5ed('0x28')][_0xb5ed('0x36')]){_0x2f25fe[_0xb5ed('0x34')]=_[_0xb5ed('0x37')](_0x2f25fe['where'],{'$or':_[_0xb5ed('0x38')](_0x206f50,function(_0x1dda50){if(_0x1dda50[_0xb5ed('0x39')]['key']!==_0xb5ed('0x3a')){var _0xde2355={};_0xde2355[_0x1dda50['field']]={'$like':'%'+_0x1de5e5[_0xb5ed('0x28')][_0xb5ed('0x36')]+'%'};return _0xde2355;}})});}_0x2f25fe=_[_0xb5ed('0x37')]({},_0x2f25fe,_0x1de5e5['options']);var _0x362e70={'where':_0x2f25fe[_0xb5ed('0x34')]};return db['SugarcrmField'][_0xb5ed('0x3b')](_0x362e70)['then'](function(_0x230e2d){_0x25b46a[_0xb5ed('0x3b')]=_0x230e2d;if(_0x1de5e5[_0xb5ed('0x28')][_0xb5ed('0x3c')]){_0x2f25fe[_0xb5ed('0x3d')]=[{'all':!![]}];}return db[_0xb5ed('0x25')][_0xb5ed('0x3e')](_0x2f25fe);})[_0xb5ed('0x1f')](function(_0x36c62e){_0x25b46a['rows']=_0x36c62e;return _0x25b46a;})[_0xb5ed('0x1f')](respondWithFilteredResult(_0x24cda8,_0x2f25fe))[_0xb5ed('0x3f')](handleError(_0x24cda8,null));};exports[_0xb5ed('0x40')]=function(_0x24807b,_0x20299b){var _0x2d6594={'raw':!![],'where':{'id':_0x24807b['params']['id']}},_0x34bd97={};_0x34bd97[_0xb5ed('0x2b')]=_[_0xb5ed('0x27')](db[_0xb5ed('0x25')]['rawAttributes']);_0x34bd97[_0xb5ed('0x28')]=_[_0xb5ed('0x27')](_0x24807b[_0xb5ed('0x28')]);_0x34bd97[_0xb5ed('0x29')]=_['intersection'](_0x34bd97[_0xb5ed('0x2b')],_0x34bd97[_0xb5ed('0x28')]);_0x2d6594[_0xb5ed('0x2c')]=_[_0xb5ed('0x2a')](_0x34bd97[_0xb5ed('0x2b')],qs['fields'](_0x24807b[_0xb5ed('0x28')][_0xb5ed('0x2d')]));_0x2d6594[_0xb5ed('0x2c')]=_0x2d6594['attributes'][_0xb5ed('0x2e')]?_0x2d6594[_0xb5ed('0x2c')]:_0x34bd97['model'];if(_0x24807b['query'][_0xb5ed('0x3c')]){_0x2d6594['include']=[{'all':!![]}];}_0x2d6594=_[_0xb5ed('0x37')]({},_0x2d6594,_0x24807b[_0xb5ed('0x41')]);return db[_0xb5ed('0x25')]['find'](_0x2d6594)[_0xb5ed('0x1f')](handleEntityNotFound(_0x20299b,null))['then'](respondWithResult(_0x20299b,null))[_0xb5ed('0x3f')](handleError(_0x20299b,null));};exports['create']=function(_0x16588f,_0x409532){return db['SugarcrmField'][_0xb5ed('0x42')](_0x16588f[_0xb5ed('0x43')],{})[_0xb5ed('0x1f')](respondWithResult(_0x409532,0xc9))[_0xb5ed('0x3f')](handleError(_0x409532,null));};exports['update']=function(_0x464bc3,_0x2209df){if(_0x464bc3[_0xb5ed('0x43')]['id']){delete _0x464bc3[_0xb5ed('0x43')]['id'];}return db[_0xb5ed('0x25')][_0xb5ed('0x44')]({'where':{'id':_0x464bc3[_0xb5ed('0x45')]['id']}})['then'](handleEntityNotFound(_0x2209df,null))[_0xb5ed('0x1f')](saveUpdates(_0x464bc3[_0xb5ed('0x43')],null))[_0xb5ed('0x1f')](respondWithResult(_0x2209df,null))[_0xb5ed('0x3f')](handleError(_0x2209df,null));};exports[_0xb5ed('0x20')]=function(_0x5504a4,_0x1de1bf){return db[_0xb5ed('0x25')]['find']({'where':{'id':_0x5504a4[_0xb5ed('0x45')]['id']}})[_0xb5ed('0x1f')](handleEntityNotFound(_0x1de1bf,null))[_0xb5ed('0x1f')](removeEntity(_0x1de1bf,null))[_0xb5ed('0x3f')](handleError(_0x1de1bf,null));};
\ No newline at end of file
index af58f57..b18ef4a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x680a=['util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./intSugarcrmField.attributes','exports','define','SugarcrmField','int_sugarcrm_fields','idField','FieldId','lodash'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0x680a,0x175));var _0xa680=function(_0x3c58ff,_0x1a44e3){_0x3c58ff=_0x3c58ff-0x0;var _0x384be8=_0x680a[_0x3c58ff];return _0x384be8;};'use strict';var _=require(_0xa680('0x0'));var util=require(_0xa680('0x1'));var logger=require(_0xa680('0x2'))(_0xa680('0x3'));var moment=require(_0xa680('0x4'));var BPromise=require(_0xa680('0x5'));var rp=require(_0xa680('0x6'));var fs=require('fs');var path=require(_0xa680('0x7'));var rimraf=require(_0xa680('0x8'));var config=require(_0xa680('0x9'));var attributes=require(_0xa680('0xa'));module[_0xa680('0xb')]=function(_0x2c0a5e,_0x4d5844){return _0x2c0a5e[_0xa680('0xc')](_0xa680('0xd'),attributes,{'tableName':_0xa680('0xe'),'paranoid':![],'indexes':[{'name':'sugarcrm_unique_index','fields':[_0xa680('0xf'),_0xa680('0x10')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x47e3=['int_sugarcrm_fields','sugarcrm_unique_index','idField','lodash','../../config/logger','api','moment','bluebird','request-promise','../../config/environment','./intSugarcrmField.attributes','exports','define','SugarcrmField'];(function(_0x2c1b5b,_0x19570c){var _0x288aac=function(_0x2c9727){while(--_0x2c9727){_0x2c1b5b['push'](_0x2c1b5b['shift']());}};_0x288aac(++_0x19570c);}(_0x47e3,0xc7));var _0x347e=function(_0x588a9c,_0x338327){_0x588a9c=_0x588a9c-0x0;var _0x4166bc=_0x47e3[_0x588a9c];return _0x4166bc;};'use strict';var _=require(_0x347e('0x0'));var util=require('util');var logger=require(_0x347e('0x1'))(_0x347e('0x2'));var moment=require(_0x347e('0x3'));var BPromise=require(_0x347e('0x4'));var rp=require(_0x347e('0x5'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x347e('0x6'));var attributes=require(_0x347e('0x7'));module[_0x347e('0x8')]=function(_0x33dd3c,_0x3d2792){return _0x33dd3c[_0x347e('0x9')](_0x347e('0xa'),attributes,{'tableName':_0x347e('0xb'),'paranoid':![],'indexes':[{'name':_0x347e('0xc'),'fields':[_0x347e('0xd'),'FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 869d2b9..2ed39ba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6b7f=['../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','http','request','info','request\x20sent','debug','SugarcrmField,\x20%s,\x20%s,\x20%s','stringify','error','code','message','SugarcrmField,\x20%s,\x20%s','result','catch','lodash','util','moment','bluebird','randomstring','ioredis'];(function(_0x553e1e,_0x5bedef){var _0x3bb17b=function(_0x53ad59){while(--_0x53ad59){_0x553e1e['push'](_0x553e1e['shift']());}};_0x3bb17b(++_0x5bedef);}(_0x6b7f,0x17a));var _0xf6b7=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x6b7f[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xf6b7('0x0'));var util=require(_0xf6b7('0x1'));var moment=require(_0xf6b7('0x2'));var BPromise=require(_0xf6b7('0x3'));var rs=require(_0xf6b7('0x4'));var fs=require('fs');var Redis=require(_0xf6b7('0x5'));var db=require(_0xf6b7('0x6'))['db'];var utils=require(_0xf6b7('0x7'));var logger=require('../../config/logger')(_0xf6b7('0x8'));var config=require(_0xf6b7('0x9'));var jayson=require(_0xf6b7('0xa'));var client=jayson['client'][_0xf6b7('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x3d97a2,_0x383847,_0x471b76){return new BPromise(function(_0xbf67dd,_0x3ac152){return client[_0xf6b7('0xc')](_0x3d97a2,_0x471b76)['then'](function(_0x14e146){logger[_0xf6b7('0xd')]('SugarcrmField,\x20%s,\x20%s',_0x383847,_0xf6b7('0xe'));logger[_0xf6b7('0xf')](_0xf6b7('0x10'),_0x383847,_0xf6b7('0xe'),JSON[_0xf6b7('0x11')](_0x14e146));if(_0x14e146[_0xf6b7('0x12')]){if(_0x14e146[_0xf6b7('0x12')][_0xf6b7('0x13')]===0x1f4){logger[_0xf6b7('0x12')]('SugarcrmField,\x20%s,\x20%s',_0x383847,_0x14e146['error'][_0xf6b7('0x14')]);return _0x3ac152(_0x14e146['error']['message']);}logger[_0xf6b7('0x12')](_0xf6b7('0x15'),_0x383847,_0x14e146[_0xf6b7('0x12')][_0xf6b7('0x14')]);return _0xbf67dd(_0x14e146[_0xf6b7('0x12')][_0xf6b7('0x14')]);}else{logger[_0xf6b7('0xd')]('SugarcrmField,\x20%s,\x20%s',_0x383847,'request\x20sent');_0xbf67dd(_0x14e146[_0xf6b7('0x16')][_0xf6b7('0x14')]);}})[_0xf6b7('0x17')](function(_0x2b91b6){logger[_0xf6b7('0x12')](_0xf6b7('0x15'),_0x383847,_0x2b91b6);_0x3ac152(_0x2b91b6);});});}
\ No newline at end of file
+var _0x88c0=['util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','http','request','then','info','request\x20sent','debug','stringify','error','code','message','SugarcrmField,\x20%s,\x20%s'];(function(_0x8ff3d1,_0x3a3d67){var _0x4b4fde=function(_0x1024bd){while(--_0x1024bd){_0x8ff3d1['push'](_0x8ff3d1['shift']());}};_0x4b4fde(++_0x3a3d67);}(_0x88c0,0x165));var _0x088c=function(_0x5c52a3,_0x13c8d5){_0x5c52a3=_0x5c52a3-0x0;var _0x5537b9=_0x88c0[_0x5c52a3];return _0x5537b9;};'use strict';var _=require('lodash');var util=require(_0x088c('0x0'));var moment=require(_0x088c('0x1'));var BPromise=require(_0x088c('0x2'));var rs=require(_0x088c('0x3'));var fs=require('fs');var Redis=require(_0x088c('0x4'));var db=require(_0x088c('0x5'))['db'];var utils=require(_0x088c('0x6'));var logger=require('../../config/logger')(_0x088c('0x7'));var config=require(_0x088c('0x8'));var jayson=require(_0x088c('0x9'));var client=jayson['client'][_0x088c('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x27650d,_0x12a911,_0x38dd77){return new BPromise(function(_0x3cbe3e,_0x186a61){return client[_0x088c('0xb')](_0x27650d,_0x38dd77)[_0x088c('0xc')](function(_0x25311b){logger[_0x088c('0xd')]('SugarcrmField,\x20%s,\x20%s',_0x12a911,_0x088c('0xe'));logger[_0x088c('0xf')]('SugarcrmField,\x20%s,\x20%s,\x20%s',_0x12a911,_0x088c('0xe'),JSON[_0x088c('0x10')](_0x25311b));if(_0x25311b[_0x088c('0x11')]){if(_0x25311b[_0x088c('0x11')][_0x088c('0x12')]===0x1f4){logger[_0x088c('0x11')]('SugarcrmField,\x20%s,\x20%s',_0x12a911,_0x25311b[_0x088c('0x11')]['message']);return _0x186a61(_0x25311b[_0x088c('0x11')][_0x088c('0x13')]);}logger[_0x088c('0x11')](_0x088c('0x14'),_0x12a911,_0x25311b[_0x088c('0x11')][_0x088c('0x13')]);return _0x3cbe3e(_0x25311b[_0x088c('0x11')][_0x088c('0x13')]);}else{logger[_0x088c('0xd')]('SugarcrmField,\x20%s,\x20%s',_0x12a911,_0x088c('0xe'));_0x3cbe3e(_0x25311b['result'][_0x088c('0x13')]);}})['catch'](function(_0x13a647){logger[_0x088c('0x11')](_0x088c('0x14'),_0x12a911,_0x13a647);_0x186a61(_0x13a647);});});}
\ No newline at end of file
index 0591d1f..c068bd0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1ea5=['/:id','exports','path','connect-timeout','express','./intVtigerAccount.controller','get','isAuthenticated','index','/:id/configurations','getConfigurations','/:id/fields','getFields','post','create','addConfiguration','update'];(function(_0x240362,_0x156794){var _0x26de18=function(_0x4a4431){while(--_0x4a4431){_0x240362['push'](_0x240362['shift']());}};_0x26de18(++_0x156794);}(_0x1ea5,0x178));var _0x51ea=function(_0x1e9e56,_0x34a74a){_0x1e9e56=_0x1e9e56-0x0;var _0x5d5e2e=_0x1ea5[_0x1e9e56];return _0x5d5e2e;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x51ea('0x0'));var timeout=require(_0x51ea('0x1'));var express=require(_0x51ea('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x51ea('0x3'));router[_0x51ea('0x4')]('/',auth[_0x51ea('0x5')](),controller[_0x51ea('0x6')]);router[_0x51ea('0x4')]('/:id',auth['isAuthenticated'](),controller['show']);router[_0x51ea('0x4')](_0x51ea('0x7'),auth['isAuthenticated'](),controller[_0x51ea('0x8')]);router['get'](_0x51ea('0x9'),auth[_0x51ea('0x5')](),controller[_0x51ea('0xa')]);router[_0x51ea('0xb')]('/',auth['isAuthenticated'](),controller[_0x51ea('0xc')]);router[_0x51ea('0xb')](_0x51ea('0x7'),auth['isAuthenticated'](),controller[_0x51ea('0xd')]);router['put']('/:id',auth[_0x51ea('0x5')](),controller[_0x51ea('0xe')]);router['delete'](_0x51ea('0xf'),auth[_0x51ea('0x5')](),controller['destroy']);module[_0x51ea('0x10')]=router;
\ No newline at end of file
+var _0xd67d=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intVtigerAccount.controller','get','isAuthenticated','index','/:id','show','/:id/configurations','getConfigurations','/:id/fields','getFields','post','create','put','update','delete','destroy','exports','multer','util','path'];(function(_0x803017,_0x1f83ce){var _0x5b7fd5=function(_0x346912){while(--_0x346912){_0x803017['push'](_0x803017['shift']());}};_0x5b7fd5(++_0x1f83ce);}(_0xd67d,0x7f));var _0xdd67=function(_0x582b0f,_0x35a9de){_0x582b0f=_0x582b0f-0x0;var _0x4658f0=_0xd67d[_0x582b0f];return _0x4658f0;};'use strict';var multer=require(_0xdd67('0x0'));var util=require(_0xdd67('0x1'));var path=require(_0xdd67('0x2'));var timeout=require(_0xdd67('0x3'));var express=require(_0xdd67('0x4'));var router=express[_0xdd67('0x5')]();var auth=require(_0xdd67('0x6'));var interaction=require(_0xdd67('0x7'));var config=require(_0xdd67('0x8'));var controller=require(_0xdd67('0x9'));router[_0xdd67('0xa')]('/',auth[_0xdd67('0xb')](),controller[_0xdd67('0xc')]);router['get'](_0xdd67('0xd'),auth[_0xdd67('0xb')](),controller[_0xdd67('0xe')]);router[_0xdd67('0xa')](_0xdd67('0xf'),auth[_0xdd67('0xb')](),controller[_0xdd67('0x10')]);router['get'](_0xdd67('0x11'),auth[_0xdd67('0xb')](),controller[_0xdd67('0x12')]);router[_0xdd67('0x13')]('/',auth['isAuthenticated'](),controller[_0xdd67('0x14')]);router[_0xdd67('0x13')](_0xdd67('0xf'),auth[_0xdd67('0xb')](),controller['addConfiguration']);router[_0xdd67('0x15')](_0xdd67('0xd'),auth[_0xdd67('0xb')](),controller[_0xdd67('0x16')]);router[_0xdd67('0x17')](_0xdd67('0xd'),auth[_0xdd67('0xb')](),controller[_0xdd67('0x18')]);module[_0xdd67('0x19')]=router;
\ No newline at end of file
index 6efdfea..13b9050 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0a78=['exports','STRING','HelpDesk','sequelize'];(function(_0x2ffeb0,_0x3c2282){var _0x5709ed=function(_0x12bb05){while(--_0x12bb05){_0x2ffeb0['push'](_0x2ffeb0['shift']());}};_0x5709ed(++_0x3c2282);}(_0x0a78,0x6b));var _0x80a7=function(_0x38d3f4,_0x4abb9c){_0x38d3f4=_0x38d3f4-0x0;var _0x24b4ba=_0x0a78[_0x38d3f4];return _0x24b4ba;};'use strict';var Sequelize=require(_0x80a7('0x0'));module[_0x80a7('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0x80a7('0x2')],'allowNull':![]},'moduleName':{'type':Sequelize[_0x80a7('0x2')],'allowNull':![],'defaultValue':_0x80a7('0x3')},'remoteUri':{'type':Sequelize[_0x80a7('0x2')],'allowNull':![]},'serverUrl':{'type':Sequelize[_0x80a7('0x2')]},'accessKey':{'type':Sequelize[_0x80a7('0x2')],'allowNull':![]}};
\ No newline at end of file
+var _0x2a00=['STRING','HelpDesk','sequelize','exports'];(function(_0x167089,_0x1d96a2){var _0x1f388f=function(_0x187b6c){while(--_0x187b6c){_0x167089['push'](_0x167089['shift']());}};_0x1f388f(++_0x1d96a2);}(_0x2a00,0x12a));var _0x02a0=function(_0x1af5a8,_0x39a1f5){_0x1af5a8=_0x1af5a8-0x0;var _0xc26e05=_0x2a00[_0x1af5a8];return _0xc26e05;};'use strict';var Sequelize=require(_0x02a0('0x0'));module[_0x02a0('0x1')]={'name':{'type':Sequelize[_0x02a0('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x02a0('0x2')]},'username':{'type':Sequelize[_0x02a0('0x2')],'allowNull':![]},'moduleName':{'type':Sequelize[_0x02a0('0x2')],'allowNull':![],'defaultValue':_0x02a0('0x3')},'remoteUri':{'type':Sequelize[_0x02a0('0x2')],'allowNull':![]},'serverUrl':{'type':Sequelize[_0x02a0('0x2')]},'accessKey':{'type':Sequelize['STRING'],'allowNull':![]}};
\ No newline at end of file
index f9978c7..9d69f18 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcf64=['channel','getDescriptions','VtigerField','Subjects','Descriptions','getFields','name','username','description','moduleName','remoteUri','accessKey','slice','substring','lastIndexOf','format','GET','success','POST','login','token','describe','sessionName','autogenerated','remove','includes','editable','false','label','cf_','picklist','log','statusCode','getFields,\x20%s,\x20%s,\x20%s','send','Wrong\x20credentials','html-pdf','eml-format','rimraf','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','then','VtigerAccount,\x20%s,\x20%s','debug','VtigerAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','request\x20sent','result','catch','status','end','json','offset','limit','set','Content-Range','reject','save','update','destroy','sendStatus','stack','index','VtigerAccount','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','order','sort','merge','where','map','type','key','include','rows','show','params','includeAll','options','find','create','body','getConfigurations','findOne','VtigerConfiguration','pick','filter','addConfiguration','AccountId'];(function(_0x1fdb40,_0x51351c){var _0x281f93=function(_0x35eebe){while(--_0x35eebe){_0x1fdb40['push'](_0x1fdb40['shift']());}};_0x281f93(++_0x51351c);}(_0xcf64,0x19b));var _0x4cf6=function(_0x2bfe42,_0x278d3a){_0x2bfe42=_0x2bfe42-0x0;var _0x1c3bdb=_0xcf64[_0x2bfe42];return _0x1c3bdb;};'use strict';var pdf=require(_0x4cf6('0x0'));var emlformat=require(_0x4cf6('0x1'));var rimraf=require(_0x4cf6('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x4cf6('0x3'));var rp=require('request-promise');var moment=require(_0x4cf6('0x4'));var BPromise=require(_0x4cf6('0x5'));var Mustache=require(_0x4cf6('0x6'));var util=require(_0x4cf6('0x7'));var path=require(_0x4cf6('0x8'));var sox=require(_0x4cf6('0x9'));var csv=require(_0x4cf6('0xa'));var ejs=require(_0x4cf6('0xb'));var fs=require('fs');var _=require(_0x4cf6('0xc'));var squel=require('squel');var crypto=require(_0x4cf6('0xd'));var jsforce=require(_0x4cf6('0xe'));var deskjs=require('desk.js');var toCsv=require(_0x4cf6('0xa'));var querystring=require('querystring');var Papa=require(_0x4cf6('0xf'));var Redis=require(_0x4cf6('0x10'));var authService=require(_0x4cf6('0x11'));var qs=require(_0x4cf6('0x12'));var hardwareService=require(_0x4cf6('0x13'));var logger=require(_0x4cf6('0x14'))(_0x4cf6('0x15'));var utils=require('../../config/utils');var config=require(_0x4cf6('0x16'));var db=require(_0x4cf6('0x17'))['db'];var integrations=require(_0x4cf6('0x18'));var jayson=require(_0x4cf6('0x19'));var client=jayson[_0x4cf6('0x1a')][_0x4cf6('0x1b')]({'port':0x232a});function checkPasswordPattern(_0x3ddf0c,_0x5b1950,_0x59cc55){if(_0x59cc55){var _0x479f5a=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x479f5a[_0x4cf6('0x1c')](_0x5b1950)){return _0x3ddf0c;}else{throw new Error(_0x4cf6('0x1d'));}}else{return _0x3ddf0c;}}function respondWithRpcPromise(_0x5f0dd8,_0x29ce1f,_0x38da78,_0x49af04){return new BPromise(function(_0x5b4e4d,_0x2424c1){var _0x2e73ab=_0x49af04||client;return _0x2e73ab['request'](_0x5f0dd8,_0x38da78)[_0x4cf6('0x1e')](function(_0x4bd9e7){logger['info'](_0x4cf6('0x1f'),_0x29ce1f,'request\x20sent');logger[_0x4cf6('0x20')](_0x4cf6('0x21'),_0x29ce1f,'request\x20sent',JSON[_0x4cf6('0x22')](_0x4bd9e7));if(_0x4bd9e7[_0x4cf6('0x23')]){if(_0x4bd9e7[_0x4cf6('0x23')][_0x4cf6('0x24')]===0x1f4){logger[_0x4cf6('0x23')]('VtigerAccount,\x20%s,\x20%s',_0x29ce1f,_0x4bd9e7[_0x4cf6('0x23')][_0x4cf6('0x25')]);return _0x2424c1(_0x4bd9e7['error'][_0x4cf6('0x25')]);}logger[_0x4cf6('0x23')]('VtigerAccount,\x20%s,\x20%s',_0x29ce1f,_0x4bd9e7[_0x4cf6('0x23')]['message']);return _0x5b4e4d(_0x4bd9e7['error']['message']);}else{logger[_0x4cf6('0x26')]('VtigerAccount,\x20%s,\x20%s',_0x29ce1f,_0x4cf6('0x27'));_0x5b4e4d(_0x4bd9e7[_0x4cf6('0x28')][_0x4cf6('0x25')]);}})[_0x4cf6('0x29')](function(_0x527b3e){logger[_0x4cf6('0x23')](_0x4cf6('0x1f'),_0x29ce1f,_0x527b3e);_0x2424c1(_0x527b3e);});});}function respondWithStatusCode(_0x2ab087,_0x24ccf6){_0x24ccf6=_0x24ccf6||0xcc;return function(_0x15870f){if(_0x15870f){return _0x2ab087['sendStatus'](_0x24ccf6);}return _0x2ab087[_0x4cf6('0x2a')](_0x24ccf6)[_0x4cf6('0x2b')]();};}function respondWithResult(_0x53985f,_0x425943){_0x425943=_0x425943||0xc8;return function(_0x15c584){if(_0x15c584){return _0x53985f[_0x4cf6('0x2a')](_0x425943)[_0x4cf6('0x2c')](_0x15c584);}};}function respondWithFilteredResult(_0x25d576,_0x23f850){return function(_0x5a3bec){if(_0x5a3bec){var _0x1b4d6c=_0x5a3bec['count'],_0x58e46c=_0x23f850[_0x4cf6('0x2d')],_0x591e35=_0x23f850[_0x4cf6('0x2d')]+_0x23f850[_0x4cf6('0x2e')],_0x283f4a;if(_0x591e35>=_0x1b4d6c){_0x591e35=_0x1b4d6c;_0x283f4a=0xc8;}else{_0x283f4a=0xce;}_0x25d576[_0x4cf6('0x2a')](_0x283f4a);return _0x25d576[_0x4cf6('0x2f')](_0x4cf6('0x30'),_0x58e46c+'-'+_0x591e35+'/'+_0x1b4d6c)[_0x4cf6('0x2c')](_0x5a3bec);}return null;};}function patchUpdates(_0xcfa16b){return function(_0x3fabf7){try{jsonpatch['apply'](_0x3fabf7,_0xcfa16b,!![]);}catch(_0x20b45f){return BPromise[_0x4cf6('0x31')](_0x20b45f);}return _0x3fabf7[_0x4cf6('0x32')]();};}function saveUpdates(_0x4dbd44,_0x1dbffe){return function(_0x20951f){if(_0x20951f){return _0x20951f[_0x4cf6('0x33')](_0x4dbd44)[_0x4cf6('0x1e')](function(_0x2b5417){return _0x2b5417;});}return null;};}function removeEntity(_0x1e1462,_0x1ba417){return function(_0x5c93ea){if(_0x5c93ea){return _0x5c93ea[_0x4cf6('0x34')]()[_0x4cf6('0x1e')](function(){_0x1e1462[_0x4cf6('0x2a')](0xcc)[_0x4cf6('0x2b')]();});}};}function handleEntityNotFound(_0x2d78d1,_0x1b45c5){return function(_0xb9e6ce){if(!_0xb9e6ce){_0x2d78d1[_0x4cf6('0x35')](0x194);}return _0xb9e6ce;};}function handleError(_0x16e1bb,_0x57af02){_0x57af02=_0x57af02||0x1f4;return function(_0x5d3b62){logger['error'](_0x5d3b62[_0x4cf6('0x36')]);if(_0x5d3b62['name']){delete _0x5d3b62['name'];}_0x16e1bb[_0x4cf6('0x2a')](_0x57af02)['send'](_0x5d3b62);};}exports[_0x4cf6('0x37')]=function(_0x17aab5,_0x54aeb0){var _0x2cc310={},_0x17a760={},_0x45a0cf={'count':0x0,'rows':[]};var _0x271ea3=db[_0x4cf6('0x38')][_0x4cf6('0x39')];_0x17a760['model']=_['keys'](_0x271ea3);_0x17a760['query']=_[_0x4cf6('0x3a')](_0x17aab5[_0x4cf6('0x3b')]);_0x17a760[_0x4cf6('0x3c')]=_[_0x4cf6('0x3d')](_0x17a760[_0x4cf6('0x3e')],_0x17a760['query']);_0x2cc310[_0x4cf6('0x3f')]=_[_0x4cf6('0x3d')](_0x17a760[_0x4cf6('0x3e')],qs[_0x4cf6('0x40')](_0x17aab5['query'][_0x4cf6('0x40')]));_0x2cc310[_0x4cf6('0x3f')]=_0x2cc310['attributes'][_0x4cf6('0x41')]?_0x2cc310[_0x4cf6('0x3f')]:_0x17a760[_0x4cf6('0x3e')];if(!_0x17aab5['query']['hasOwnProperty']('nolimit')){_0x2cc310[_0x4cf6('0x2e')]=qs[_0x4cf6('0x2e')](_0x17aab5[_0x4cf6('0x3b')][_0x4cf6('0x2e')]);_0x2cc310['offset']=qs[_0x4cf6('0x2d')](_0x17aab5[_0x4cf6('0x3b')][_0x4cf6('0x2d')]);}_0x2cc310[_0x4cf6('0x42')]=qs[_0x4cf6('0x43')](_0x17aab5[_0x4cf6('0x3b')][_0x4cf6('0x43')]);_0x2cc310['where']=qs[_0x4cf6('0x3c')](_['pick'](_0x17aab5['query'],_0x17a760[_0x4cf6('0x3c')]));if(_0x17aab5['query']['filter']){_0x2cc310['where']=_[_0x4cf6('0x44')](_0x2cc310[_0x4cf6('0x45')],{'$or':_[_0x4cf6('0x46')](_0x271ea3,function(_0x2bd64f){if(_0x2bd64f[_0x4cf6('0x47')][_0x4cf6('0x48')]!=='VIRTUAL'){var _0x159409={};_0x159409[_0x2bd64f['field']]={'$like':'%'+_0x17aab5[_0x4cf6('0x3b')]['filter']+'%'};return _0x159409;}})});}_0x2cc310=_[_0x4cf6('0x44')]({},_0x2cc310,_0x17aab5['options']);var _0x450e6d={'where':_0x2cc310[_0x4cf6('0x45')]};return db[_0x4cf6('0x38')]['count'](_0x450e6d)[_0x4cf6('0x1e')](function(_0xed6e5d){_0x45a0cf['count']=_0xed6e5d;if(_0x17aab5[_0x4cf6('0x3b')]['includeAll']){_0x2cc310[_0x4cf6('0x49')]=[{'all':!![]}];}return db['VtigerAccount']['findAll'](_0x2cc310);})['then'](function(_0x511a23){_0x45a0cf[_0x4cf6('0x4a')]=_0x511a23;return _0x45a0cf;})[_0x4cf6('0x1e')](respondWithFilteredResult(_0x54aeb0,_0x2cc310))[_0x4cf6('0x29')](handleError(_0x54aeb0,null));};exports[_0x4cf6('0x4b')]=function(_0x5bac8f,_0x250486){var _0x84822f={'raw':![],'where':{'id':_0x5bac8f[_0x4cf6('0x4c')]['id']}},_0x564435={};_0x564435[_0x4cf6('0x3e')]=_[_0x4cf6('0x3a')](db['VtigerAccount']['rawAttributes']);_0x564435[_0x4cf6('0x3b')]=_['keys'](_0x5bac8f['query']);_0x564435[_0x4cf6('0x3c')]=_['intersection'](_0x564435[_0x4cf6('0x3e')],_0x564435['query']);_0x84822f[_0x4cf6('0x3f')]=_[_0x4cf6('0x3d')](_0x564435['model'],qs[_0x4cf6('0x40')](_0x5bac8f[_0x4cf6('0x3b')][_0x4cf6('0x40')]));_0x84822f[_0x4cf6('0x3f')]=_0x84822f[_0x4cf6('0x3f')]['length']?_0x84822f[_0x4cf6('0x3f')]:_0x564435[_0x4cf6('0x3e')];if(_0x5bac8f[_0x4cf6('0x3b')][_0x4cf6('0x4d')]){_0x84822f['include']=[{'all':!![]}];}_0x84822f=_[_0x4cf6('0x44')]({},_0x84822f,_0x5bac8f[_0x4cf6('0x4e')]);return db[_0x4cf6('0x38')][_0x4cf6('0x4f')](_0x84822f)[_0x4cf6('0x1e')](handleEntityNotFound(_0x250486,null))[_0x4cf6('0x1e')](respondWithResult(_0x250486,null))['catch'](handleError(_0x250486,null));};exports[_0x4cf6('0x50')]=function(_0x341a35,_0x6792ff){return db[_0x4cf6('0x38')]['create'](_0x341a35[_0x4cf6('0x51')],{})[_0x4cf6('0x1e')](respondWithResult(_0x6792ff,0xc9))['catch'](handleError(_0x6792ff,null));};exports['update']=function(_0x2fa352,_0x4996b0){if(_0x2fa352[_0x4cf6('0x51')]['id']){delete _0x2fa352[_0x4cf6('0x51')]['id'];}return db[_0x4cf6('0x38')][_0x4cf6('0x4f')]({'where':{'id':_0x2fa352[_0x4cf6('0x4c')]['id']}})[_0x4cf6('0x1e')](handleEntityNotFound(_0x4996b0,null))[_0x4cf6('0x1e')](saveUpdates(_0x2fa352[_0x4cf6('0x51')],null))[_0x4cf6('0x1e')](respondWithResult(_0x4996b0,null))[_0x4cf6('0x29')](handleError(_0x4996b0,null));};exports[_0x4cf6('0x34')]=function(_0x12ab29,_0xad650a){return db[_0x4cf6('0x38')]['find']({'where':{'id':_0x12ab29[_0x4cf6('0x4c')]['id']}})[_0x4cf6('0x1e')](handleEntityNotFound(_0xad650a,null))[_0x4cf6('0x1e')](removeEntity(_0xad650a,null))[_0x4cf6('0x29')](handleError(_0xad650a,null));};exports[_0x4cf6('0x52')]=function(_0x476b64,_0x429e2c,_0x1a37c0){var _0x5a3862={};var _0x58a5df={};var _0xbd3ee9;var _0x2faca7;return db['VtigerAccount'][_0x4cf6('0x53')]({'where':{'id':_0x476b64[_0x4cf6('0x4c')]['id']}})[_0x4cf6('0x1e')](handleEntityNotFound(_0x429e2c,null))[_0x4cf6('0x1e')](function(_0x909646){if(_0x909646){_0xbd3ee9=_0x909646;_0x58a5df[_0x4cf6('0x3e')]=_[_0x4cf6('0x3a')](db[_0x4cf6('0x54')][_0x4cf6('0x39')]);_0x58a5df['query']=_[_0x4cf6('0x3a')](_0x476b64[_0x4cf6('0x3b')]);_0x58a5df[_0x4cf6('0x3c')]=_[_0x4cf6('0x3d')](_0x58a5df[_0x4cf6('0x3e')],_0x58a5df['query']);_0x5a3862[_0x4cf6('0x3f')]=_[_0x4cf6('0x3d')](_0x58a5df[_0x4cf6('0x3e')],qs[_0x4cf6('0x40')](_0x476b64['query'][_0x4cf6('0x40')]));_0x5a3862[_0x4cf6('0x3f')]=_0x5a3862[_0x4cf6('0x3f')]['length']?_0x5a3862[_0x4cf6('0x3f')]:_0x58a5df['model'];_0x5a3862[_0x4cf6('0x42')]=qs['sort'](_0x476b64['query']['sort']);_0x5a3862['where']=qs[_0x4cf6('0x3c')](_[_0x4cf6('0x55')](_0x476b64[_0x4cf6('0x3b')],_0x58a5df['filters']));if(_0x476b64['query'][_0x4cf6('0x56')]){_0x5a3862[_0x4cf6('0x45')]=_['merge'](_0x5a3862[_0x4cf6('0x45')],{'$or':_[_0x4cf6('0x46')](_0x5a3862[_0x4cf6('0x3f')],function(_0x2153d1){var _0x34b62b={};_0x34b62b[_0x2153d1]={'$like':'%'+_0x476b64[_0x4cf6('0x3b')][_0x4cf6('0x56')]+'%'};return _0x34b62b;})});}_0x5a3862=_[_0x4cf6('0x44')]({},_0x5a3862,_0x476b64[_0x4cf6('0x4e')]);return _0xbd3ee9[_0x4cf6('0x52')](_0x5a3862);}})[_0x4cf6('0x1e')](function(_0x439338){if(_0x439338){_0x2faca7=_0x439338[_0x4cf6('0x41')];if(!_0x476b64[_0x4cf6('0x3b')]['hasOwnProperty']('nolimit')){_0x5a3862[_0x4cf6('0x2e')]=qs[_0x4cf6('0x2e')](_0x476b64[_0x4cf6('0x3b')][_0x4cf6('0x2e')]);_0x5a3862[_0x4cf6('0x2d')]=qs[_0x4cf6('0x2d')](_0x476b64[_0x4cf6('0x3b')][_0x4cf6('0x2d')]);}return _0xbd3ee9[_0x4cf6('0x52')](_0x5a3862);}})['then'](function(_0x9aa7bd){if(_0x9aa7bd){return _0x9aa7bd?{'count':_0x2faca7,'rows':_0x9aa7bd}:null;}})['then'](respondWithResult(_0x429e2c,null))[_0x4cf6('0x29')](handleError(_0x429e2c,null));};exports[_0x4cf6('0x57')]=function(_0xc8998e,_0x2d3e88,_0x7a7c8d){if(_0xc8998e[_0x4cf6('0x51')]['id']){delete _0xc8998e[_0x4cf6('0x51')]['id'];}return db[_0x4cf6('0x38')][_0x4cf6('0x53')]({'where':{'id':_0xc8998e[_0x4cf6('0x4c')]['id']}})[_0x4cf6('0x1e')](handleEntityNotFound(_0x2d3e88,null))[_0x4cf6('0x1e')](function(_0xcda986){if(_0xcda986){_0xc8998e[_0x4cf6('0x51')][_0x4cf6('0x58')]=_0xcda986['id'];_0xc8998e[_0x4cf6('0x51')]['Subjects']=integrations['getSubjects'](_0xc8998e['body'][_0x4cf6('0x59')],_0xc8998e[_0x4cf6('0x51')][_0x4cf6('0x47')]);_0xc8998e[_0x4cf6('0x51')]['Descriptions']=integrations[_0x4cf6('0x5a')](_0xc8998e[_0x4cf6('0x51')][_0x4cf6('0x59')],_0xc8998e[_0x4cf6('0x51')][_0x4cf6('0x47')]);return db['VtigerConfiguration'][_0x4cf6('0x50')](_0xc8998e['body'],{'include':[{'model':db[_0x4cf6('0x5b')],'as':_0x4cf6('0x5c')},{'model':db[_0x4cf6('0x5b')],'as':_0x4cf6('0x5d')}]});}return null;})[_0x4cf6('0x1e')](respondWithResult(_0x2d3e88,null))[_0x4cf6('0x29')](handleError(_0x2d3e88,null));};var md5=require('md5');exports[_0x4cf6('0x5e')]=function(_0x490d27,_0x12543c,_0x2e241f){var _0x1a5297=null;var _0x41b540=null;var _0x1514ce=null;var _0x247d2f=null;var _0x15d435='';return db[_0x4cf6('0x38')]['findOne']({'where':{'id':_0x490d27[_0x4cf6('0x4c')]['id']},'attributes':['id',_0x4cf6('0x5f'),_0x4cf6('0x60'),_0x4cf6('0x61'),_0x4cf6('0x62'),_0x4cf6('0x63'),'serverUrl',_0x4cf6('0x64')]})[_0x4cf6('0x1e')](handleEntityNotFound(_0x12543c,null))[_0x4cf6('0x1e')](function(_0x16ef7d){if(_0x16ef7d){_0x1a5297=_0x16ef7d[_0x4cf6('0x60')];_0x41b540=_0x16ef7d[_0x4cf6('0x64')];_0x1514ce=_0x16ef7d['moduleName'];_0x15d435=_0x16ef7d[_0x4cf6('0x63')];var _0x1378c9=_0x15d435[_0x4cf6('0x65')](-0x1);if(_0x1378c9==='/'){_0x15d435=_0x15d435[_0x4cf6('0x66')](0x0,_0x15d435[_0x4cf6('0x67')](_0x1378c9));}_0x247d2f=util[_0x4cf6('0x68')]('%s/webservice.php',_0x15d435);var _0x19608f={'method':_0x4cf6('0x69'),'uri':_0x247d2f,'qs':{'operation':'getchallenge','username':_0x16ef7d[_0x4cf6('0x60')]},'json':!![]};return rp(_0x19608f);}})['then'](function(_0xc813c3){if(_0xc813c3[_0x4cf6('0x6a')]){var _0x469237={'method':_0x4cf6('0x6b'),'uri':_0x247d2f,'form':{'operation':_0x4cf6('0x6c'),'username':_0x1a5297,'accessKey':md5(_0xc813c3[_0x4cf6('0x28')][_0x4cf6('0x6d')]+_0x41b540)},'json':!![]};return rp(_0x469237);}})[_0x4cf6('0x1e')](function(_0x48de5c){if(_0x48de5c['success']){var _0x2f6bfc={'method':_0x4cf6('0x69'),'uri':_0x247d2f,'qs':{'operation':_0x4cf6('0x6e'),'username':_0x1a5297,'sessionName':_0x48de5c[_0x4cf6('0x28')][_0x4cf6('0x6f')],'elementType':_0x1514ce},'json':!![]};return rp(_0x2f6bfc);}})[_0x4cf6('0x1e')](function(_0x42957d){if(_0x42957d['success']){var _0x1e9e01=[_0x4cf6('0x70'),'reference','owner'];_[_0x4cf6('0x71')](_0x42957d[_0x4cf6('0x28')][_0x4cf6('0x40')],function(_0x4e7164){return _0x1e9e01[_0x4cf6('0x72')](_0x4e7164[_0x4cf6('0x47')][_0x4cf6('0x5f')]);});_[_0x4cf6('0x71')](_0x42957d[_0x4cf6('0x28')]['fields'],function(_0x4aa725){return _0x4aa725[_0x4cf6('0x73')]===_0x4cf6('0x74');});return{'count':_0x42957d[_0x4cf6('0x28')][_0x4cf6('0x40')]['length'],'rows':_[_0x4cf6('0x46')](_0x42957d['result'][_0x4cf6('0x40')],function(_0x1740ef){return{'id':_0x1740ef['name'],'name':_0x1740ef[_0x4cf6('0x75')],'custom':_['startsWith'](_0x1740ef['name'],_0x4cf6('0x76'))?!![]:![],'options':_0x1740ef['type'][_0x4cf6('0x5f')]===_0x4cf6('0x77')&&_0x1740ef[_0x4cf6('0x47')]['picklistValues'][_0x4cf6('0x41')]>0x0?_[_0x4cf6('0x46')](_0x1740ef[_0x4cf6('0x47')]['picklistValues'],function(_0x5a8180){return{'name':_0x5a8180[_0x4cf6('0x75')],'value':_0x5a8180['value']};}):[]};})};}})[_0x4cf6('0x1e')](respondWithResult(_0x12543c,null))[_0x4cf6('0x29')](function(_0x235287){console[_0x4cf6('0x78')]('vTiger\x20error:\x20'+_0x235287);var _0x3e30ef=_0x490d27[_0x4cf6('0x3b')]['test']?0x1f4:_0x235287[_0x4cf6('0x79')]||0x1f4;logger['error'](_0x4cf6('0x7a'),_0x4cf6('0x5e'),_0x3e30ef,JSON[_0x4cf6('0x22')](_0x235287));delete _0x235287['name'];if(_0x3e30ef===0x191){_0x3e30ef=0x190;}_0x12543c[_0x4cf6('0x2a')](_0x3e30ef)[_0x4cf6('0x7b')](_0x490d27['query']['test']?{'message':_0x4cf6('0x7c'),'statusCode':_0x235287['statusCode']}:_0x235287);});};
\ No newline at end of file
+var _0xdbbf=['md5','getFields','findOne','description','moduleName','remoteUri','serverUrl','accessKey','slice','lastIndexOf','%s/webservice.php','GET','getchallenge','username','success','POST','token','describe','sessionName','autogenerated','reference','owner','remove','includes','editable','false','label','startsWith','cf_','picklist','picklistValues','value','log','vTiger\x20error:\x20','test','getFields,\x20%s,\x20%s,\x20%s','statusCode','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','ejs','lodash','crypto','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','../../components/integrations/configuration','client','http','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','VtigerAccount,\x20%s,\x20%s','request\x20sent','VtigerAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','status','end','json','count','offset','limit','Content-Range','save','update','destroy','stack','name','send','VtigerAccount','rawAttributes','model','keys','query','filters','attributes','intersection','nolimit','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','params','fields','find','create','body','getConfigurations','length','hasOwnProperty','addConfiguration','AccountId','Subjects','getSubjects','channel','Descriptions','getDescriptions','VtigerConfiguration','VtigerField'];(function(_0x39a3e9,_0x13b485){var _0x2019fd=function(_0x4b6670){while(--_0x4b6670){_0x39a3e9['push'](_0x39a3e9['shift']());}};_0x2019fd(++_0x13b485);}(_0xdbbf,0xab));var _0xfdbb=function(_0x25e7cb,_0x3579b7){_0x25e7cb=_0x25e7cb-0x0;var _0x375d92=_0xdbbf[_0x25e7cb];return _0x375d92;};'use strict';var pdf=require(_0xfdbb('0x0'));var emlformat=require(_0xfdbb('0x1'));var rimraf=require(_0xfdbb('0x2'));var zipdir=require(_0xfdbb('0x3'));var jsonpatch=require(_0xfdbb('0x4'));var rp=require(_0xfdbb('0x5'));var moment=require(_0xfdbb('0x6'));var BPromise=require(_0xfdbb('0x7'));var Mustache=require(_0xfdbb('0x8'));var util=require(_0xfdbb('0x9'));var path=require('path');var sox=require(_0xfdbb('0xa'));var csv=require('to-csv');var ejs=require(_0xfdbb('0xb'));var fs=require('fs');var _=require(_0xfdbb('0xc'));var squel=require('squel');var crypto=require(_0xfdbb('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xfdbb('0xe'));var Papa=require(_0xfdbb('0xf'));var Redis=require(_0xfdbb('0x10'));var authService=require(_0xfdbb('0x11'));var qs=require(_0xfdbb('0x12'));var hardwareService=require(_0xfdbb('0x13'));var logger=require(_0xfdbb('0x14'))(_0xfdbb('0x15'));var utils=require(_0xfdbb('0x16'));var config=require(_0xfdbb('0x17'));var db=require(_0xfdbb('0x18'))['db'];var integrations=require(_0xfdbb('0x19'));var jayson=require('jayson/promise');var client=jayson[_0xfdbb('0x1a')][_0xfdbb('0x1b')]({'port':0x232a});function checkPasswordPattern(_0x8100af,_0x250dc1,_0x2d58ce){if(_0x2d58ce){var _0x449c12=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x449c12['test'](_0x250dc1)){return _0x8100af;}else{throw new Error(_0xfdbb('0x1c'));}}else{return _0x8100af;}}function respondWithRpcPromise(_0x225660,_0x3dc8e3,_0x30b1c7,_0x163211){return new BPromise(function(_0x3ccd5a,_0x59a5cb){var _0xe4dec=_0x163211||client;return _0xe4dec[_0xfdbb('0x1d')](_0x225660,_0x30b1c7)[_0xfdbb('0x1e')](function(_0x4983e7){logger[_0xfdbb('0x1f')](_0xfdbb('0x20'),_0x3dc8e3,_0xfdbb('0x21'));logger['debug'](_0xfdbb('0x22'),_0x3dc8e3,_0xfdbb('0x21'),JSON[_0xfdbb('0x23')](_0x4983e7));if(_0x4983e7['error']){if(_0x4983e7[_0xfdbb('0x24')][_0xfdbb('0x25')]===0x1f4){logger[_0xfdbb('0x24')](_0xfdbb('0x20'),_0x3dc8e3,_0x4983e7['error'][_0xfdbb('0x26')]);return _0x59a5cb(_0x4983e7['error'][_0xfdbb('0x26')]);}logger[_0xfdbb('0x24')]('VtigerAccount,\x20%s,\x20%s',_0x3dc8e3,_0x4983e7[_0xfdbb('0x24')][_0xfdbb('0x26')]);return _0x3ccd5a(_0x4983e7[_0xfdbb('0x24')]['message']);}else{logger[_0xfdbb('0x1f')]('VtigerAccount,\x20%s,\x20%s',_0x3dc8e3,'request\x20sent');_0x3ccd5a(_0x4983e7[_0xfdbb('0x27')]['message']);}})[_0xfdbb('0x28')](function(_0x37c376){logger['error'](_0xfdbb('0x20'),_0x3dc8e3,_0x37c376);_0x59a5cb(_0x37c376);});});}function respondWithStatusCode(_0x47bf16,_0x4ae751){_0x4ae751=_0x4ae751||0xcc;return function(_0x3941c1){if(_0x3941c1){return _0x47bf16[_0xfdbb('0x29')](_0x4ae751);}return _0x47bf16[_0xfdbb('0x2a')](_0x4ae751)[_0xfdbb('0x2b')]();};}function respondWithResult(_0x18ade3,_0x32e2ca){_0x32e2ca=_0x32e2ca||0xc8;return function(_0x42d736){if(_0x42d736){return _0x18ade3[_0xfdbb('0x2a')](_0x32e2ca)[_0xfdbb('0x2c')](_0x42d736);}};}function respondWithFilteredResult(_0x2b6319,_0x18d0c4){return function(_0x159485){if(_0x159485){var _0xf9a4e3=_0x159485[_0xfdbb('0x2d')],_0x505d38=_0x18d0c4[_0xfdbb('0x2e')],_0x29c0af=_0x18d0c4[_0xfdbb('0x2e')]+_0x18d0c4[_0xfdbb('0x2f')],_0x21de70;if(_0x29c0af>=_0xf9a4e3){_0x29c0af=_0xf9a4e3;_0x21de70=0xc8;}else{_0x21de70=0xce;}_0x2b6319[_0xfdbb('0x2a')](_0x21de70);return _0x2b6319['set'](_0xfdbb('0x30'),_0x505d38+'-'+_0x29c0af+'/'+_0xf9a4e3)[_0xfdbb('0x2c')](_0x159485);}return null;};}function patchUpdates(_0x35bce7){return function(_0x33d600){try{jsonpatch['apply'](_0x33d600,_0x35bce7,!![]);}catch(_0x259660){return BPromise['reject'](_0x259660);}return _0x33d600[_0xfdbb('0x31')]();};}function saveUpdates(_0x47d76e,_0x5757ad){return function(_0x4d7eb8){if(_0x4d7eb8){return _0x4d7eb8[_0xfdbb('0x32')](_0x47d76e)[_0xfdbb('0x1e')](function(_0x3a1490){return _0x3a1490;});}return null;};}function removeEntity(_0x3b81ef,_0x543729){return function(_0x54d134){if(_0x54d134){return _0x54d134[_0xfdbb('0x33')]()[_0xfdbb('0x1e')](function(){_0x3b81ef[_0xfdbb('0x2a')](0xcc)[_0xfdbb('0x2b')]();});}};}function handleEntityNotFound(_0x530948,_0x175216){return function(_0x1bce07){if(!_0x1bce07){_0x530948[_0xfdbb('0x29')](0x194);}return _0x1bce07;};}function handleError(_0x156f81,_0x551c84){_0x551c84=_0x551c84||0x1f4;return function(_0x29965a){logger[_0xfdbb('0x24')](_0x29965a[_0xfdbb('0x34')]);if(_0x29965a['name']){delete _0x29965a[_0xfdbb('0x35')];}_0x156f81[_0xfdbb('0x2a')](_0x551c84)[_0xfdbb('0x36')](_0x29965a);};}exports['index']=function(_0x41579d,_0x4b9ec2){var _0x37f1e6={},_0x5b8384={},_0x3d048f={'count':0x0,'rows':[]};var _0x121465=db[_0xfdbb('0x37')][_0xfdbb('0x38')];_0x5b8384[_0xfdbb('0x39')]=_[_0xfdbb('0x3a')](_0x121465);_0x5b8384[_0xfdbb('0x3b')]=_[_0xfdbb('0x3a')](_0x41579d[_0xfdbb('0x3b')]);_0x5b8384[_0xfdbb('0x3c')]=_['intersection'](_0x5b8384['model'],_0x5b8384[_0xfdbb('0x3b')]);_0x37f1e6[_0xfdbb('0x3d')]=_[_0xfdbb('0x3e')](_0x5b8384['model'],qs['fields'](_0x41579d[_0xfdbb('0x3b')]['fields']));_0x37f1e6[_0xfdbb('0x3d')]=_0x37f1e6[_0xfdbb('0x3d')]['length']?_0x37f1e6['attributes']:_0x5b8384['model'];if(!_0x41579d['query']['hasOwnProperty'](_0xfdbb('0x3f'))){_0x37f1e6[_0xfdbb('0x2f')]=qs[_0xfdbb('0x2f')](_0x41579d[_0xfdbb('0x3b')][_0xfdbb('0x2f')]);_0x37f1e6['offset']=qs[_0xfdbb('0x2e')](_0x41579d['query'][_0xfdbb('0x2e')]);}_0x37f1e6[_0xfdbb('0x40')]=qs['sort'](_0x41579d[_0xfdbb('0x3b')][_0xfdbb('0x41')]);_0x37f1e6[_0xfdbb('0x42')]=qs[_0xfdbb('0x3c')](_['pick'](_0x41579d[_0xfdbb('0x3b')],_0x5b8384[_0xfdbb('0x3c')]));if(_0x41579d[_0xfdbb('0x3b')][_0xfdbb('0x43')]){_0x37f1e6[_0xfdbb('0x42')]=_[_0xfdbb('0x44')](_0x37f1e6[_0xfdbb('0x42')],{'$or':_[_0xfdbb('0x45')](_0x121465,function(_0x4701d1){if(_0x4701d1[_0xfdbb('0x46')][_0xfdbb('0x47')]!==_0xfdbb('0x48')){var _0x20328a={};_0x20328a[_0x4701d1[_0xfdbb('0x49')]]={'$like':'%'+_0x41579d['query'][_0xfdbb('0x43')]+'%'};return _0x20328a;}})});}_0x37f1e6=_[_0xfdbb('0x44')]({},_0x37f1e6,_0x41579d[_0xfdbb('0x4a')]);var _0x295bae={'where':_0x37f1e6['where']};return db[_0xfdbb('0x37')][_0xfdbb('0x2d')](_0x295bae)['then'](function(_0x412afc){_0x3d048f[_0xfdbb('0x2d')]=_0x412afc;if(_0x41579d['query'][_0xfdbb('0x4b')]){_0x37f1e6[_0xfdbb('0x4c')]=[{'all':!![]}];}return db[_0xfdbb('0x37')][_0xfdbb('0x4d')](_0x37f1e6);})[_0xfdbb('0x1e')](function(_0x913eb1){_0x3d048f[_0xfdbb('0x4e')]=_0x913eb1;return _0x3d048f;})[_0xfdbb('0x1e')](respondWithFilteredResult(_0x4b9ec2,_0x37f1e6))[_0xfdbb('0x28')](handleError(_0x4b9ec2,null));};exports[_0xfdbb('0x4f')]=function(_0x1bc2b0,_0x4c096a){var _0x37f39e={'raw':![],'where':{'id':_0x1bc2b0[_0xfdbb('0x50')]['id']}},_0x261421={};_0x261421[_0xfdbb('0x39')]=_['keys'](db['VtigerAccount'][_0xfdbb('0x38')]);_0x261421[_0xfdbb('0x3b')]=_[_0xfdbb('0x3a')](_0x1bc2b0['query']);_0x261421['filters']=_[_0xfdbb('0x3e')](_0x261421[_0xfdbb('0x39')],_0x261421[_0xfdbb('0x3b')]);_0x37f39e['attributes']=_[_0xfdbb('0x3e')](_0x261421[_0xfdbb('0x39')],qs[_0xfdbb('0x51')](_0x1bc2b0['query']['fields']));_0x37f39e[_0xfdbb('0x3d')]=_0x37f39e['attributes']['length']?_0x37f39e[_0xfdbb('0x3d')]:_0x261421['model'];if(_0x1bc2b0['query'][_0xfdbb('0x4b')]){_0x37f39e[_0xfdbb('0x4c')]=[{'all':!![]}];}_0x37f39e=_[_0xfdbb('0x44')]({},_0x37f39e,_0x1bc2b0[_0xfdbb('0x4a')]);return db[_0xfdbb('0x37')][_0xfdbb('0x52')](_0x37f39e)['then'](handleEntityNotFound(_0x4c096a,null))['then'](respondWithResult(_0x4c096a,null))[_0xfdbb('0x28')](handleError(_0x4c096a,null));};exports[_0xfdbb('0x53')]=function(_0x2a6a7a,_0x30ed45){return db['VtigerAccount'][_0xfdbb('0x53')](_0x2a6a7a[_0xfdbb('0x54')],{})['then'](respondWithResult(_0x30ed45,0xc9))[_0xfdbb('0x28')](handleError(_0x30ed45,null));};exports[_0xfdbb('0x32')]=function(_0x585a39,_0x516183){if(_0x585a39['body']['id']){delete _0x585a39[_0xfdbb('0x54')]['id'];}return db['VtigerAccount']['find']({'where':{'id':_0x585a39['params']['id']}})['then'](handleEntityNotFound(_0x516183,null))[_0xfdbb('0x1e')](saveUpdates(_0x585a39[_0xfdbb('0x54')],null))[_0xfdbb('0x1e')](respondWithResult(_0x516183,null))[_0xfdbb('0x28')](handleError(_0x516183,null));};exports['destroy']=function(_0x57295c,_0x364bd6){return db[_0xfdbb('0x37')][_0xfdbb('0x52')]({'where':{'id':_0x57295c[_0xfdbb('0x50')]['id']}})[_0xfdbb('0x1e')](handleEntityNotFound(_0x364bd6,null))['then'](removeEntity(_0x364bd6,null))[_0xfdbb('0x28')](handleError(_0x364bd6,null));};exports[_0xfdbb('0x55')]=function(_0x4cdfdc,_0x2106db,_0x545712){var _0x54df4d={};var _0x94d153={};var _0x316abd;var _0x486f4c;return db[_0xfdbb('0x37')]['findOne']({'where':{'id':_0x4cdfdc[_0xfdbb('0x50')]['id']}})[_0xfdbb('0x1e')](handleEntityNotFound(_0x2106db,null))[_0xfdbb('0x1e')](function(_0x10e633){if(_0x10e633){_0x316abd=_0x10e633;_0x94d153[_0xfdbb('0x39')]=_[_0xfdbb('0x3a')](db['VtigerConfiguration'][_0xfdbb('0x38')]);_0x94d153[_0xfdbb('0x3b')]=_[_0xfdbb('0x3a')](_0x4cdfdc[_0xfdbb('0x3b')]);_0x94d153[_0xfdbb('0x3c')]=_[_0xfdbb('0x3e')](_0x94d153[_0xfdbb('0x39')],_0x94d153[_0xfdbb('0x3b')]);_0x54df4d[_0xfdbb('0x3d')]=_[_0xfdbb('0x3e')](_0x94d153['model'],qs[_0xfdbb('0x51')](_0x4cdfdc[_0xfdbb('0x3b')][_0xfdbb('0x51')]));_0x54df4d['attributes']=_0x54df4d[_0xfdbb('0x3d')][_0xfdbb('0x56')]?_0x54df4d['attributes']:_0x94d153[_0xfdbb('0x39')];_0x54df4d['order']=qs['sort'](_0x4cdfdc[_0xfdbb('0x3b')][_0xfdbb('0x41')]);_0x54df4d['where']=qs['filters'](_['pick'](_0x4cdfdc[_0xfdbb('0x3b')],_0x94d153[_0xfdbb('0x3c')]));if(_0x4cdfdc['query'][_0xfdbb('0x43')]){_0x54df4d[_0xfdbb('0x42')]=_[_0xfdbb('0x44')](_0x54df4d[_0xfdbb('0x42')],{'$or':_[_0xfdbb('0x45')](_0x54df4d[_0xfdbb('0x3d')],function(_0x5e6838){var _0x66e154={};_0x66e154[_0x5e6838]={'$like':'%'+_0x4cdfdc[_0xfdbb('0x3b')][_0xfdbb('0x43')]+'%'};return _0x66e154;})});}_0x54df4d=_[_0xfdbb('0x44')]({},_0x54df4d,_0x4cdfdc[_0xfdbb('0x4a')]);return _0x316abd[_0xfdbb('0x55')](_0x54df4d);}})['then'](function(_0x32c399){if(_0x32c399){_0x486f4c=_0x32c399[_0xfdbb('0x56')];if(!_0x4cdfdc[_0xfdbb('0x3b')][_0xfdbb('0x57')](_0xfdbb('0x3f'))){_0x54df4d['limit']=qs[_0xfdbb('0x2f')](_0x4cdfdc[_0xfdbb('0x3b')]['limit']);_0x54df4d[_0xfdbb('0x2e')]=qs['offset'](_0x4cdfdc[_0xfdbb('0x3b')][_0xfdbb('0x2e')]);}return _0x316abd['getConfigurations'](_0x54df4d);}})['then'](function(_0x414a3b){if(_0x414a3b){return _0x414a3b?{'count':_0x486f4c,'rows':_0x414a3b}:null;}})[_0xfdbb('0x1e')](respondWithResult(_0x2106db,null))[_0xfdbb('0x28')](handleError(_0x2106db,null));};exports[_0xfdbb('0x58')]=function(_0x44fc8f,_0x13c484,_0x52c259){if(_0x44fc8f[_0xfdbb('0x54')]['id']){delete _0x44fc8f[_0xfdbb('0x54')]['id'];}return db[_0xfdbb('0x37')]['findOne']({'where':{'id':_0x44fc8f[_0xfdbb('0x50')]['id']}})[_0xfdbb('0x1e')](handleEntityNotFound(_0x13c484,null))[_0xfdbb('0x1e')](function(_0x44dc88){if(_0x44dc88){_0x44fc8f[_0xfdbb('0x54')][_0xfdbb('0x59')]=_0x44dc88['id'];_0x44fc8f[_0xfdbb('0x54')][_0xfdbb('0x5a')]=integrations[_0xfdbb('0x5b')](_0x44fc8f['body'][_0xfdbb('0x5c')],_0x44fc8f[_0xfdbb('0x54')]['type']);_0x44fc8f['body'][_0xfdbb('0x5d')]=integrations[_0xfdbb('0x5e')](_0x44fc8f[_0xfdbb('0x54')][_0xfdbb('0x5c')],_0x44fc8f[_0xfdbb('0x54')]['type']);return db[_0xfdbb('0x5f')]['create'](_0x44fc8f['body'],{'include':[{'model':db['VtigerField'],'as':_0xfdbb('0x5a')},{'model':db[_0xfdbb('0x60')],'as':'Descriptions'}]});}return null;})[_0xfdbb('0x1e')](respondWithResult(_0x13c484,null))[_0xfdbb('0x28')](handleError(_0x13c484,null));};var md5=require(_0xfdbb('0x61'));exports[_0xfdbb('0x62')]=function(_0x7f72dc,_0x2fdb1a,_0x2b6d78){var _0x11cc22=null;var _0x4cb48e=null;var _0x4060a5=null;var _0x28df6f=null;var _0x1a23dc='';return db['VtigerAccount'][_0xfdbb('0x63')]({'where':{'id':_0x7f72dc[_0xfdbb('0x50')]['id']},'attributes':['id','name','username',_0xfdbb('0x64'),_0xfdbb('0x65'),_0xfdbb('0x66'),_0xfdbb('0x67'),'accessKey']})[_0xfdbb('0x1e')](handleEntityNotFound(_0x2fdb1a,null))[_0xfdbb('0x1e')](function(_0x587cec){if(_0x587cec){_0x11cc22=_0x587cec['username'];_0x4cb48e=_0x587cec[_0xfdbb('0x68')];_0x4060a5=_0x587cec['moduleName'];_0x1a23dc=_0x587cec[_0xfdbb('0x66')];var _0x570011=_0x1a23dc[_0xfdbb('0x69')](-0x1);if(_0x570011==='/'){_0x1a23dc=_0x1a23dc['substring'](0x0,_0x1a23dc[_0xfdbb('0x6a')](_0x570011));}_0x28df6f=util['format'](_0xfdbb('0x6b'),_0x1a23dc);var _0x31d940={'method':_0xfdbb('0x6c'),'uri':_0x28df6f,'qs':{'operation':_0xfdbb('0x6d'),'username':_0x587cec[_0xfdbb('0x6e')]},'json':!![]};return rp(_0x31d940);}})[_0xfdbb('0x1e')](function(_0x5e1256){if(_0x5e1256[_0xfdbb('0x6f')]){var _0x9bf8d={'method':_0xfdbb('0x70'),'uri':_0x28df6f,'form':{'operation':'login','username':_0x11cc22,'accessKey':md5(_0x5e1256[_0xfdbb('0x27')][_0xfdbb('0x71')]+_0x4cb48e)},'json':!![]};return rp(_0x9bf8d);}})[_0xfdbb('0x1e')](function(_0x1db57d){if(_0x1db57d[_0xfdbb('0x6f')]){var _0x323346={'method':_0xfdbb('0x6c'),'uri':_0x28df6f,'qs':{'operation':_0xfdbb('0x72'),'username':_0x11cc22,'sessionName':_0x1db57d[_0xfdbb('0x27')][_0xfdbb('0x73')],'elementType':_0x4060a5},'json':!![]};return rp(_0x323346);}})[_0xfdbb('0x1e')](function(_0x267a87){if(_0x267a87['success']){var _0x3744a1=[_0xfdbb('0x74'),_0xfdbb('0x75'),_0xfdbb('0x76')];_[_0xfdbb('0x77')](_0x267a87['result'][_0xfdbb('0x51')],function(_0x36deba){return _0x3744a1[_0xfdbb('0x78')](_0x36deba['type'][_0xfdbb('0x35')]);});_[_0xfdbb('0x77')](_0x267a87[_0xfdbb('0x27')][_0xfdbb('0x51')],function(_0x269890){return _0x269890[_0xfdbb('0x79')]===_0xfdbb('0x7a');});return{'count':_0x267a87[_0xfdbb('0x27')][_0xfdbb('0x51')][_0xfdbb('0x56')],'rows':_['map'](_0x267a87[_0xfdbb('0x27')][_0xfdbb('0x51')],function(_0xc0b72c){return{'id':_0xc0b72c[_0xfdbb('0x35')],'name':_0xc0b72c[_0xfdbb('0x7b')],'custom':_[_0xfdbb('0x7c')](_0xc0b72c[_0xfdbb('0x35')],_0xfdbb('0x7d'))?!![]:![],'options':_0xc0b72c[_0xfdbb('0x46')][_0xfdbb('0x35')]===_0xfdbb('0x7e')&&_0xc0b72c['type'][_0xfdbb('0x7f')]['length']>0x0?_[_0xfdbb('0x45')](_0xc0b72c[_0xfdbb('0x46')][_0xfdbb('0x7f')],function(_0x4d048e){return{'name':_0x4d048e[_0xfdbb('0x7b')],'value':_0x4d048e[_0xfdbb('0x80')]};}):[]};})};}})[_0xfdbb('0x1e')](respondWithResult(_0x2fdb1a,null))[_0xfdbb('0x28')](function(_0x30c3f8){console[_0xfdbb('0x81')](_0xfdbb('0x82')+_0x30c3f8);var _0x327293=_0x7f72dc[_0xfdbb('0x3b')][_0xfdbb('0x83')]?0x1f4:_0x30c3f8['statusCode']||0x1f4;logger[_0xfdbb('0x24')](_0xfdbb('0x84'),'getFields',_0x327293,JSON[_0xfdbb('0x23')](_0x30c3f8));delete _0x30c3f8[_0xfdbb('0x35')];if(_0x327293===0x191){_0x327293=0x190;}_0x2fdb1a[_0xfdbb('0x2a')](_0x327293)['send'](_0x7f72dc[_0xfdbb('0x3b')]['test']?{'message':'Wrong\x20credentials','statusCode':_0x30c3f8[_0xfdbb('0x85')]}:_0x30c3f8);});};
\ No newline at end of file
index a2ac669..1c19011 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x16a2=['define','int_vtiger_accounts','lodash','util','../../config/logger','api','moment','path','rimraf','../../config/environment','./intVtigerAccount.attributes'];(function(_0x7a112,_0x2eb4a0){var _0x136dc5=function(_0x437650){while(--_0x437650){_0x7a112['push'](_0x7a112['shift']());}};_0x136dc5(++_0x2eb4a0);}(_0x16a2,0x1d0));var _0x216a=function(_0x5817e6,_0x44a2d0){_0x5817e6=_0x5817e6-0x0;var _0x51916a=_0x16a2[_0x5817e6];return _0x51916a;};'use strict';var _=require(_0x216a('0x0'));var util=require(_0x216a('0x1'));var logger=require(_0x216a('0x2'))(_0x216a('0x3'));var moment=require(_0x216a('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x216a('0x5'));var rimraf=require(_0x216a('0x6'));var config=require(_0x216a('0x7'));var attributes=require(_0x216a('0x8'));var integrations=require('../../components/integrations/configuration');module['exports']=function(_0x4456ad,_0x6dbac7){return _0x4456ad[_0x216a('0x9')]('VtigerAccount',attributes,{'tableName':_0x216a('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x1893=['./intVtigerAccount.attributes','../../components/integrations/configuration','exports','define','VtigerAccount','int_vtiger_accounts','../../config/logger','api','moment','bluebird','request-promise','path','rimraf'];(function(_0x465b89,_0x5daa97){var _0x31a252=function(_0x4fe129){while(--_0x4fe129){_0x465b89['push'](_0x465b89['shift']());}};_0x31a252(++_0x5daa97);}(_0x1893,0xa2));var _0x3189=function(_0x224f30,_0x4483c7){_0x224f30=_0x224f30-0x0;var _0x2a67ad=_0x1893[_0x224f30];return _0x2a67ad;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x3189('0x0'))(_0x3189('0x1'));var moment=require(_0x3189('0x2'));var BPromise=require(_0x3189('0x3'));var rp=require(_0x3189('0x4'));var fs=require('fs');var path=require(_0x3189('0x5'));var rimraf=require(_0x3189('0x6'));var config=require('../../config/environment');var attributes=require(_0x3189('0x7'));var integrations=require(_0x3189('0x8'));module[_0x3189('0x9')]=function(_0x4080a9,_0x77c566){return _0x4080a9[_0x3189('0xa')](_0x3189('0xb'),attributes,{'tableName':_0x3189('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d1a30c3..58f49ec 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfe6d=['lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','VtigerAccount,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','GetVtigerAccount','VtigerAccount','findAll','options','raw','limit','include','map','model','attributes','catch','ShowVtigerAccount','where'];(function(_0x1a173b,_0x5c9d8b){var _0x52270d=function(_0x4fdb50){while(--_0x4fdb50){_0x1a173b['push'](_0x1a173b['shift']());}};_0x52270d(++_0x5c9d8b);}(_0xfe6d,0xaf));var _0xdfe6=function(_0x1e8c4e,_0x4b6ba5){_0x1e8c4e=_0x1e8c4e-0x0;var _0x19088a=_0xfe6d[_0x1e8c4e];return _0x19088a;};'use strict';var _=require(_0xdfe6('0x0'));var util=require(_0xdfe6('0x1'));var moment=require('moment');var BPromise=require(_0xdfe6('0x2'));var rs=require(_0xdfe6('0x3'));var fs=require('fs');var Redis=require(_0xdfe6('0x4'));var db=require(_0xdfe6('0x5'))['db'];var utils=require(_0xdfe6('0x6'));var logger=require(_0xdfe6('0x7'))(_0xdfe6('0x8'));var config=require(_0xdfe6('0x9'));var jayson=require(_0xdfe6('0xa'));var client=jayson[_0xdfe6('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1fa70b,_0x4f5b73,_0x170673){return new BPromise(function(_0x2fb8f3,_0xd0dd38){return client[_0xdfe6('0xc')](_0x1fa70b,_0x170673)[_0xdfe6('0xd')](function(_0xabd304){logger[_0xdfe6('0xe')](_0xdfe6('0xf'),_0x4f5b73,_0xdfe6('0x10'));logger[_0xdfe6('0x11')]('VtigerAccount,\x20%s,\x20%s,\x20%s',_0x4f5b73,_0xdfe6('0x10'),JSON[_0xdfe6('0x12')](_0xabd304));if(_0xabd304[_0xdfe6('0x13')]){if(_0xabd304[_0xdfe6('0x13')][_0xdfe6('0x14')]===0x1f4){logger['error'](_0xdfe6('0xf'),_0x4f5b73,_0xabd304[_0xdfe6('0x13')][_0xdfe6('0x15')]);return _0xd0dd38(_0xabd304[_0xdfe6('0x13')][_0xdfe6('0x15')]);}logger[_0xdfe6('0x13')](_0xdfe6('0xf'),_0x4f5b73,_0xabd304[_0xdfe6('0x13')][_0xdfe6('0x15')]);return _0x2fb8f3(_0xabd304['error'][_0xdfe6('0x15')]);}else{logger[_0xdfe6('0xe')](_0xdfe6('0xf'),_0x4f5b73,_0xdfe6('0x10'));_0x2fb8f3(_0xabd304['result'][_0xdfe6('0x15')]);}})['catch'](function(_0x2c0f11){logger['error'](_0xdfe6('0xf'),_0x4f5b73,_0x2c0f11);_0xd0dd38(_0x2c0f11);});});}exports[_0xdfe6('0x16')]=function(_0x3ea6a6){var _0xa81437=this;return new Promise(function(_0x3804c6,_0x2a86ae){return db[_0xdfe6('0x17')][_0xdfe6('0x18')]({'raw':_0x3ea6a6[_0xdfe6('0x19')]?_0x3ea6a6[_0xdfe6('0x19')][_0xdfe6('0x1a')]===undefined?!![]:![]:!![],'where':_0x3ea6a6[_0xdfe6('0x19')]?_0x3ea6a6[_0xdfe6('0x19')]['where']||null:null,'attributes':_0x3ea6a6[_0xdfe6('0x19')]?_0x3ea6a6['options']['attributes']||null:null,'limit':_0x3ea6a6[_0xdfe6('0x19')]?_0x3ea6a6[_0xdfe6('0x19')][_0xdfe6('0x1b')]||null:null,'include':_0x3ea6a6[_0xdfe6('0x19')]?_0x3ea6a6['options'][_0xdfe6('0x1c')]?_[_0xdfe6('0x1d')](_0x3ea6a6['options'][_0xdfe6('0x1c')],function(_0x10cd05){return{'model':db[_0x10cd05[_0xdfe6('0x1e')]],'as':_0x10cd05['as'],'attributes':_0x10cd05['attributes'],'include':_0x10cd05['include']?_[_0xdfe6('0x1d')](_0x10cd05['include'],function(_0x46d86c){return{'model':db[_0x46d86c['model']],'as':_0x46d86c['as'],'attributes':_0x46d86c[_0xdfe6('0x1f')],'include':_0x46d86c[_0xdfe6('0x1c')]?_[_0xdfe6('0x1d')](_0x46d86c['include'],function(_0x1d4ae5){return{'model':db[_0x1d4ae5[_0xdfe6('0x1e')]],'as':_0x1d4ae5['as'],'attributes':_0x1d4ae5['attributes']};}):[]};}):[]};}):[]:[]})[_0xdfe6('0xd')](function(_0x29559a){logger['info'](_0xdfe6('0x16'),_0x3ea6a6);logger[_0xdfe6('0x11')](_0xdfe6('0x16'),_0x3ea6a6,JSON[_0xdfe6('0x12')](_0x29559a));_0x3804c6(_0x29559a);})[_0xdfe6('0x20')](function(_0x633b5f){logger['error'](_0xdfe6('0x16'),_0x633b5f[_0xdfe6('0x15')],_0x3ea6a6);_0x2a86ae(_0xa81437[_0xdfe6('0x13')](0x1f4,_0x633b5f[_0xdfe6('0x15')]));});});};exports[_0xdfe6('0x21')]=function(_0x2b4776){var _0x5b7e18=this;return new Promise(function(_0x2f3b34,_0x528e85){return db['VtigerAccount']['find']({'raw':_0x2b4776[_0xdfe6('0x19')]?_0x2b4776[_0xdfe6('0x19')][_0xdfe6('0x1a')]===undefined?!![]:![]:!![],'where':_0x2b4776[_0xdfe6('0x19')]?_0x2b4776[_0xdfe6('0x19')][_0xdfe6('0x22')]||null:null,'attributes':_0x2b4776['options']?_0x2b4776[_0xdfe6('0x19')]['attributes']||null:null,'include':_0x2b4776[_0xdfe6('0x19')]?_0x2b4776[_0xdfe6('0x19')][_0xdfe6('0x1c')]?_['map'](_0x2b4776[_0xdfe6('0x19')][_0xdfe6('0x1c')],function(_0x45e78a){return{'model':db[_0x45e78a[_0xdfe6('0x1e')]],'as':_0x45e78a['as'],'attributes':_0x45e78a['attributes'],'include':_0x45e78a[_0xdfe6('0x1c')]?_[_0xdfe6('0x1d')](_0x45e78a[_0xdfe6('0x1c')],function(_0x2f5e6a){return{'model':db[_0x2f5e6a['model']],'as':_0x2f5e6a['as'],'attributes':_0x2f5e6a[_0xdfe6('0x1f')],'include':_0x2f5e6a[_0xdfe6('0x1c')]?_[_0xdfe6('0x1d')](_0x2f5e6a[_0xdfe6('0x1c')],function(_0x5ed225){return{'model':db[_0x5ed225[_0xdfe6('0x1e')]],'as':_0x5ed225['as'],'attributes':_0x5ed225['attributes']};}):[]};}):[]};}):[]:[]})[_0xdfe6('0xd')](function(_0x2f82fe){logger[_0xdfe6('0xe')](_0xdfe6('0x21'),_0x2b4776);logger[_0xdfe6('0x11')](_0xdfe6('0x21'),_0x2b4776,JSON[_0xdfe6('0x12')](_0x2f82fe));_0x2f3b34(_0x2f82fe);})['catch'](function(_0x401707){logger[_0xdfe6('0x13')](_0xdfe6('0x21'),_0x401707['message'],_0x2b4776);_0x528e85(_0x5b7e18['error'](0x1f4,_0x401707[_0xdfe6('0x15')]));});});};
\ No newline at end of file
+var _0x64e0=['model','info','ShowVtigerAccount','where','catch','moment','ioredis','../../mysqldb','rpc','../../config/environment','client','http','request','then','VtigerAccount,\x20%s,\x20%s','request\x20sent','debug','VtigerAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','GetVtigerAccount','VtigerAccount','findAll','options','raw','attributes','limit','include','map'];(function(_0xc1af05,_0x4a1a4a){var _0x652c0=function(_0x5a9add){while(--_0x5a9add){_0xc1af05['push'](_0xc1af05['shift']());}};_0x652c0(++_0x4a1a4a);}(_0x64e0,0x185));var _0x064e=function(_0xb7cb72,_0x19d391){_0xb7cb72=_0xb7cb72-0x0;var _0x4b7570=_0x64e0[_0xb7cb72];return _0x4b7570;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x064e('0x0'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x064e('0x1'));var db=require(_0x064e('0x2'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x064e('0x3'));var config=require(_0x064e('0x4'));var jayson=require('jayson/promise');var client=jayson[_0x064e('0x5')][_0x064e('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x1fa13e,_0x50690b,_0x294c25){return new BPromise(function(_0x3e49e4,_0x25193b){return client[_0x064e('0x7')](_0x1fa13e,_0x294c25)[_0x064e('0x8')](function(_0x2543c6){logger['info'](_0x064e('0x9'),_0x50690b,_0x064e('0xa'));logger[_0x064e('0xb')](_0x064e('0xc'),_0x50690b,_0x064e('0xa'),JSON[_0x064e('0xd')](_0x2543c6));if(_0x2543c6[_0x064e('0xe')]){if(_0x2543c6[_0x064e('0xe')][_0x064e('0xf')]===0x1f4){logger[_0x064e('0xe')](_0x064e('0x9'),_0x50690b,_0x2543c6[_0x064e('0xe')][_0x064e('0x10')]);return _0x25193b(_0x2543c6[_0x064e('0xe')][_0x064e('0x10')]);}logger[_0x064e('0xe')](_0x064e('0x9'),_0x50690b,_0x2543c6['error'][_0x064e('0x10')]);return _0x3e49e4(_0x2543c6[_0x064e('0xe')][_0x064e('0x10')]);}else{logger['info'](_0x064e('0x9'),_0x50690b,'request\x20sent');_0x3e49e4(_0x2543c6[_0x064e('0x11')][_0x064e('0x10')]);}})['catch'](function(_0x28b877){logger[_0x064e('0xe')]('VtigerAccount,\x20%s,\x20%s',_0x50690b,_0x28b877);_0x25193b(_0x28b877);});});}exports[_0x064e('0x12')]=function(_0x89152b){var _0x173222=this;return new Promise(function(_0x152432,_0x20a3f4){return db[_0x064e('0x13')][_0x064e('0x14')]({'raw':_0x89152b[_0x064e('0x15')]?_0x89152b[_0x064e('0x15')][_0x064e('0x16')]===undefined?!![]:![]:!![],'where':_0x89152b[_0x064e('0x15')]?_0x89152b[_0x064e('0x15')]['where']||null:null,'attributes':_0x89152b[_0x064e('0x15')]?_0x89152b[_0x064e('0x15')][_0x064e('0x17')]||null:null,'limit':_0x89152b[_0x064e('0x15')]?_0x89152b[_0x064e('0x15')][_0x064e('0x18')]||null:null,'include':_0x89152b[_0x064e('0x15')]?_0x89152b['options'][_0x064e('0x19')]?_[_0x064e('0x1a')](_0x89152b['options'][_0x064e('0x19')],function(_0x2758ec){return{'model':db[_0x2758ec['model']],'as':_0x2758ec['as'],'attributes':_0x2758ec[_0x064e('0x17')],'include':_0x2758ec[_0x064e('0x19')]?_[_0x064e('0x1a')](_0x2758ec[_0x064e('0x19')],function(_0x3b9b5d){return{'model':db[_0x3b9b5d['model']],'as':_0x3b9b5d['as'],'attributes':_0x3b9b5d['attributes'],'include':_0x3b9b5d[_0x064e('0x19')]?_[_0x064e('0x1a')](_0x3b9b5d[_0x064e('0x19')],function(_0x194124){return{'model':db[_0x194124[_0x064e('0x1b')]],'as':_0x194124['as'],'attributes':_0x194124[_0x064e('0x17')]};}):[]};}):[]};}):[]:[]})[_0x064e('0x8')](function(_0x5da479){logger[_0x064e('0x1c')](_0x064e('0x12'),_0x89152b);logger['debug'](_0x064e('0x12'),_0x89152b,JSON[_0x064e('0xd')](_0x5da479));_0x152432(_0x5da479);})['catch'](function(_0x5342db){logger['error'](_0x064e('0x12'),_0x5342db['message'],_0x89152b);_0x20a3f4(_0x173222[_0x064e('0xe')](0x1f4,_0x5342db['message']));});});};exports[_0x064e('0x1d')]=function(_0x2bed69){var _0x119e32=this;return new Promise(function(_0x940aac,_0x249b99){return db[_0x064e('0x13')]['find']({'raw':_0x2bed69[_0x064e('0x15')]?_0x2bed69['options'][_0x064e('0x16')]===undefined?!![]:![]:!![],'where':_0x2bed69['options']?_0x2bed69[_0x064e('0x15')][_0x064e('0x1e')]||null:null,'attributes':_0x2bed69[_0x064e('0x15')]?_0x2bed69['options'][_0x064e('0x17')]||null:null,'include':_0x2bed69[_0x064e('0x15')]?_0x2bed69['options']['include']?_[_0x064e('0x1a')](_0x2bed69[_0x064e('0x15')][_0x064e('0x19')],function(_0x27f3ff){return{'model':db[_0x27f3ff[_0x064e('0x1b')]],'as':_0x27f3ff['as'],'attributes':_0x27f3ff[_0x064e('0x17')],'include':_0x27f3ff[_0x064e('0x19')]?_[_0x064e('0x1a')](_0x27f3ff[_0x064e('0x19')],function(_0x429ed3){return{'model':db[_0x429ed3['model']],'as':_0x429ed3['as'],'attributes':_0x429ed3[_0x064e('0x17')],'include':_0x429ed3[_0x064e('0x19')]?_[_0x064e('0x1a')](_0x429ed3[_0x064e('0x19')],function(_0x29a77b){return{'model':db[_0x29a77b[_0x064e('0x1b')]],'as':_0x29a77b['as'],'attributes':_0x29a77b[_0x064e('0x17')]};}):[]};}):[]};}):[]:[]})[_0x064e('0x8')](function(_0x129022){logger[_0x064e('0x1c')]('ShowVtigerAccount',_0x2bed69);logger[_0x064e('0xb')](_0x064e('0x1d'),_0x2bed69,JSON[_0x064e('0xd')](_0x129022));_0x940aac(_0x129022);})[_0x064e('0x1f')](function(_0x474d21){logger[_0x064e('0xe')](_0x064e('0x1d'),_0x474d21[_0x064e('0x10')],_0x2bed69);_0x249b99(_0x119e32[_0x064e('0xe')](0x1f4,_0x474d21[_0x064e('0x10')]));});});};
\ No newline at end of file
index 02ac2bd..e883b47 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe706=['update','delete','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intVtigerConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields','getFields','/:id/subjects','getSubjects','/:id/descriptions','create','put'];(function(_0x3de01a,_0xcc1fd4){var _0x43f31e=function(_0xf8e692){while(--_0xf8e692){_0x3de01a['push'](_0x3de01a['shift']());}};_0x43f31e(++_0xcc1fd4);}(_0xe706,0xa3));var _0x6e70=function(_0xafcda6,_0x2817b9){_0xafcda6=_0xafcda6-0x0;var _0x2f00c5=_0xe706[_0xafcda6];return _0x2f00c5;};'use strict';var multer=require(_0x6e70('0x0'));var util=require(_0x6e70('0x1'));var path=require(_0x6e70('0x2'));var timeout=require('connect-timeout');var express=require(_0x6e70('0x3'));var router=express[_0x6e70('0x4')]();var auth=require(_0x6e70('0x5'));var interaction=require(_0x6e70('0x6'));var config=require(_0x6e70('0x7'));var controller=require(_0x6e70('0x8'));router[_0x6e70('0x9')]('/',auth[_0x6e70('0xa')](),controller[_0x6e70('0xb')]);router[_0x6e70('0x9')](_0x6e70('0xc'),auth[_0x6e70('0xa')](),controller[_0x6e70('0xd')]);router[_0x6e70('0x9')](_0x6e70('0xe'),auth[_0x6e70('0xa')](),controller[_0x6e70('0xf')]);router[_0x6e70('0x9')](_0x6e70('0x10'),auth[_0x6e70('0xa')](),controller[_0x6e70('0x11')]);router[_0x6e70('0x9')](_0x6e70('0x12'),auth[_0x6e70('0xa')](),controller['getDescriptions']);router['post']('/',auth[_0x6e70('0xa')](),controller[_0x6e70('0x13')]);router[_0x6e70('0x14')](_0x6e70('0xc'),auth[_0x6e70('0xa')](),controller[_0x6e70('0x15')]);router[_0x6e70('0x16')](_0x6e70('0xc'),auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0xe706=['update','delete','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intVtigerConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields','getFields','/:id/subjects','getSubjects','/:id/descriptions','create','put'];(function(_0x43ed38,_0x507af1){var _0x181497=function(_0x153d8e){while(--_0x153d8e){_0x43ed38['push'](_0x43ed38['shift']());}};_0x181497(++_0x507af1);}(_0xe706,0xa3));var _0x6e70=function(_0x127af0,_0x49fbc5){_0x127af0=_0x127af0-0x0;var _0x1fc410=_0xe706[_0x127af0];return _0x1fc410;};'use strict';var multer=require(_0x6e70('0x0'));var util=require(_0x6e70('0x1'));var path=require(_0x6e70('0x2'));var timeout=require('connect-timeout');var express=require(_0x6e70('0x3'));var router=express[_0x6e70('0x4')]();var auth=require(_0x6e70('0x5'));var interaction=require(_0x6e70('0x6'));var config=require(_0x6e70('0x7'));var controller=require(_0x6e70('0x8'));router[_0x6e70('0x9')]('/',auth[_0x6e70('0xa')](),controller[_0x6e70('0xb')]);router[_0x6e70('0x9')](_0x6e70('0xc'),auth[_0x6e70('0xa')](),controller[_0x6e70('0xd')]);router[_0x6e70('0x9')](_0x6e70('0xe'),auth[_0x6e70('0xa')](),controller[_0x6e70('0xf')]);router[_0x6e70('0x9')](_0x6e70('0x10'),auth[_0x6e70('0xa')](),controller[_0x6e70('0x11')]);router[_0x6e70('0x9')](_0x6e70('0x12'),auth[_0x6e70('0xa')](),controller['getDescriptions']);router['post']('/',auth[_0x6e70('0xa')](),controller[_0x6e70('0x13')]);router[_0x6e70('0x14')](_0x6e70('0xc'),auth[_0x6e70('0xa')](),controller[_0x6e70('0x15')]);router[_0x6e70('0x16')](_0x6e70('0xc'),auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index baff8a3..6ca6b46 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9917=['STRING','sequelize','exports'];(function(_0x285f24,_0x196d6b){var _0x430d15=function(_0x5ea2cc){while(--_0x5ea2cc){_0x285f24['push'](_0x285f24['shift']());}};_0x430d15(++_0x196d6b);}(_0x9917,0x175));var _0x7991=function(_0x54f2a2,_0x592ad5){_0x54f2a2=_0x54f2a2-0x0;var _0x312d73=_0x9917[_0x54f2a2];return _0x312d73;};'use strict';var Sequelize=require(_0x7991('0x0'));module[_0x7991('0x1')]={'name':{'type':Sequelize[_0x7991('0x2')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xa6ec=['sequelize','exports','STRING'];(function(_0x1d18a0,_0x156273){var _0x4df4a6=function(_0x1c95a1){while(--_0x1c95a1){_0x1d18a0['push'](_0x1d18a0['shift']());}};_0x4df4a6(++_0x156273);}(_0xa6ec,0x81));var _0xca6e=function(_0x58b961,_0x57776a){_0x58b961=_0x58b961-0x0;var _0x432a84=_0xa6ec[_0x58b961];return _0x432a84;};'use strict';var Sequelize=require(_0xca6e('0x0'));module[_0xca6e('0x1')]={'name':{'type':Sequelize[_0xca6e('0x2')]},'description':{'type':Sequelize[_0xca6e('0x2')]}};
\ No newline at end of file
index 7c930f1..475f688 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x17e7=['field','options','includeAll','show','params','keys','include','find','create','body','getFields','findOne','VtigerField','map','pick','getSubjects','hasOwnProperty','getDescriptions','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','crypto','jsforce','desk.js','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','jayson/promise','client','http','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','info','VtigerConfiguration,\x20%s,\x20%s','request\x20sent','stringify','code','error','message','result','catch','sendStatus','status','end','json','count','offset','set','apply','reject','save','update','then','destroy','stack','name','send','index','VtigerConfiguration','rawAttributes','model','query','filters','intersection','fields','attributes','length','nolimit','limit','order','sort','where','filter','merge','type'];(function(_0x329a33,_0x585897){var _0x2bef80=function(_0x213b94){while(--_0x213b94){_0x329a33['push'](_0x329a33['shift']());}};_0x2bef80(++_0x585897);}(_0x17e7,0xc2));var _0x717e=function(_0x110c3d,_0x12ee06){_0x110c3d=_0x110c3d-0x0;var _0x226d67=_0x17e7[_0x110c3d];return _0x226d67;};'use strict';var pdf=require(_0x717e('0x0'));var emlformat=require(_0x717e('0x1'));var rimraf=require(_0x717e('0x2'));var zipdir=require(_0x717e('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x717e('0x4'));var moment=require(_0x717e('0x5'));var BPromise=require(_0x717e('0x6'));var Mustache=require('mustache');var util=require(_0x717e('0x7'));var path=require(_0x717e('0x8'));var sox=require(_0x717e('0x9'));var csv=require(_0x717e('0xa'));var ejs=require(_0x717e('0xb'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x717e('0xc'));var jsforce=require(_0x717e('0xd'));var deskjs=require(_0x717e('0xe'));var toCsv=require(_0x717e('0xa'));var querystring=require('querystring');var Papa=require(_0x717e('0xf'));var Redis=require(_0x717e('0x10'));var authService=require('../../components/auth/service');var qs=require(_0x717e('0x11'));var hardwareService=require(_0x717e('0x12'));var logger=require(_0x717e('0x13'))(_0x717e('0x14'));var utils=require(_0x717e('0x15'));var config=require(_0x717e('0x16'));var db=require('../../mysqldb')['db'];var jayson=require(_0x717e('0x17'));var client=jayson[_0x717e('0x18')][_0x717e('0x19')]({'port':0x232a});function checkPasswordPattern(_0x385ff0,_0x511604,_0x1fe1c8){if(_0x1fe1c8){var _0x1d12c8=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x1d12c8['test'](_0x511604)){return _0x385ff0;}else{throw new Error(_0x717e('0x1a'));}}else{return _0x385ff0;}}function respondWithRpcPromise(_0x11e034,_0x1aa8ba,_0x19f047,_0x6ffa2a){return new BPromise(function(_0x5e8453,_0x33e284){var _0x284a5d=_0x6ffa2a||client;return _0x284a5d['request'](_0x11e034,_0x19f047)['then'](function(_0x55d9f4){logger[_0x717e('0x1b')](_0x717e('0x1c'),_0x1aa8ba,_0x717e('0x1d'));logger['debug']('VtigerConfiguration,\x20%s,\x20%s,\x20%s',_0x1aa8ba,'request\x20sent',JSON[_0x717e('0x1e')](_0x55d9f4));if(_0x55d9f4['error']){if(_0x55d9f4['error'][_0x717e('0x1f')]===0x1f4){logger[_0x717e('0x20')](_0x717e('0x1c'),_0x1aa8ba,_0x55d9f4[_0x717e('0x20')][_0x717e('0x21')]);return _0x33e284(_0x55d9f4[_0x717e('0x20')][_0x717e('0x21')]);}logger[_0x717e('0x20')]('VtigerConfiguration,\x20%s,\x20%s',_0x1aa8ba,_0x55d9f4[_0x717e('0x20')][_0x717e('0x21')]);return _0x5e8453(_0x55d9f4[_0x717e('0x20')][_0x717e('0x21')]);}else{logger[_0x717e('0x1b')](_0x717e('0x1c'),_0x1aa8ba,_0x717e('0x1d'));_0x5e8453(_0x55d9f4[_0x717e('0x22')]['message']);}})[_0x717e('0x23')](function(_0x536ab8){logger[_0x717e('0x20')](_0x717e('0x1c'),_0x1aa8ba,_0x536ab8);_0x33e284(_0x536ab8);});});}function respondWithStatusCode(_0x4d3438,_0x30276c){_0x30276c=_0x30276c||0xcc;return function(_0xaf214d){if(_0xaf214d){return _0x4d3438[_0x717e('0x24')](_0x30276c);}return _0x4d3438[_0x717e('0x25')](_0x30276c)[_0x717e('0x26')]();};}function respondWithResult(_0x5567cb,_0x134763){_0x134763=_0x134763||0xc8;return function(_0x148a08){if(_0x148a08){return _0x5567cb[_0x717e('0x25')](_0x134763)[_0x717e('0x27')](_0x148a08);}};}function respondWithFilteredResult(_0x2558cb,_0x4515dd){return function(_0x395e06){if(_0x395e06){var _0x432965=_0x395e06[_0x717e('0x28')],_0x24c8c5=_0x4515dd[_0x717e('0x29')],_0x4faeb8=_0x4515dd['offset']+_0x4515dd['limit'],_0x4e3375;if(_0x4faeb8>=_0x432965){_0x4faeb8=_0x432965;_0x4e3375=0xc8;}else{_0x4e3375=0xce;}_0x2558cb['status'](_0x4e3375);return _0x2558cb[_0x717e('0x2a')]('Content-Range',_0x24c8c5+'-'+_0x4faeb8+'/'+_0x432965)[_0x717e('0x27')](_0x395e06);}return null;};}function patchUpdates(_0x29ab5b){return function(_0x5e167f){try{jsonpatch[_0x717e('0x2b')](_0x5e167f,_0x29ab5b,!![]);}catch(_0x779b1f){return BPromise[_0x717e('0x2c')](_0x779b1f);}return _0x5e167f[_0x717e('0x2d')]();};}function saveUpdates(_0x2ef1f8,_0xc38102){return function(_0x5961ff){if(_0x5961ff){return _0x5961ff[_0x717e('0x2e')](_0x2ef1f8)[_0x717e('0x2f')](function(_0x5f5f93){return _0x5f5f93;});}return null;};}function removeEntity(_0x1e7d35,_0x5a9549){return function(_0x57c3ad){if(_0x57c3ad){return _0x57c3ad[_0x717e('0x30')]()['then'](function(){_0x1e7d35['status'](0xcc)[_0x717e('0x26')]();});}};}function handleEntityNotFound(_0xd009a5,_0x4c3a2d){return function(_0x71e84c){if(!_0x71e84c){_0xd009a5[_0x717e('0x24')](0x194);}return _0x71e84c;};}function handleError(_0x361444,_0x99d584){_0x99d584=_0x99d584||0x1f4;return function(_0x1e357d){logger[_0x717e('0x20')](_0x1e357d[_0x717e('0x31')]);if(_0x1e357d['name']){delete _0x1e357d[_0x717e('0x32')];}_0x361444[_0x717e('0x25')](_0x99d584)[_0x717e('0x33')](_0x1e357d);};}exports[_0x717e('0x34')]=function(_0x110857,_0x35d009){var _0x424c6b={},_0x578171={},_0x50f02d={'count':0x0,'rows':[]};var _0xab83d3=db[_0x717e('0x35')][_0x717e('0x36')];_0x578171[_0x717e('0x37')]=_['keys'](_0xab83d3);_0x578171[_0x717e('0x38')]=_['keys'](_0x110857[_0x717e('0x38')]);_0x578171[_0x717e('0x39')]=_[_0x717e('0x3a')](_0x578171['model'],_0x578171['query']);_0x424c6b['attributes']=_[_0x717e('0x3a')](_0x578171['model'],qs[_0x717e('0x3b')](_0x110857[_0x717e('0x38')][_0x717e('0x3b')]));_0x424c6b[_0x717e('0x3c')]=_0x424c6b[_0x717e('0x3c')][_0x717e('0x3d')]?_0x424c6b[_0x717e('0x3c')]:_0x578171[_0x717e('0x37')];if(!_0x110857[_0x717e('0x38')]['hasOwnProperty'](_0x717e('0x3e'))){_0x424c6b[_0x717e('0x3f')]=qs['limit'](_0x110857['query']['limit']);_0x424c6b[_0x717e('0x29')]=qs[_0x717e('0x29')](_0x110857[_0x717e('0x38')]['offset']);}_0x424c6b[_0x717e('0x40')]=qs['sort'](_0x110857[_0x717e('0x38')][_0x717e('0x41')]);_0x424c6b[_0x717e('0x42')]=qs[_0x717e('0x39')](_['pick'](_0x110857[_0x717e('0x38')],_0x578171[_0x717e('0x39')]));if(_0x110857['query'][_0x717e('0x43')]){_0x424c6b[_0x717e('0x42')]=_[_0x717e('0x44')](_0x424c6b[_0x717e('0x42')],{'$or':_['map'](_0xab83d3,function(_0x4b9445){if(_0x4b9445[_0x717e('0x45')]['key']!=='VIRTUAL'){var _0x431abd={};_0x431abd[_0x4b9445[_0x717e('0x46')]]={'$like':'%'+_0x110857[_0x717e('0x38')][_0x717e('0x43')]+'%'};return _0x431abd;}})});}_0x424c6b=_[_0x717e('0x44')]({},_0x424c6b,_0x110857[_0x717e('0x47')]);var _0x538f55={'where':_0x424c6b['where']};return db[_0x717e('0x35')][_0x717e('0x28')](_0x538f55)['then'](function(_0x3f4a61){_0x50f02d['count']=_0x3f4a61;if(_0x110857[_0x717e('0x38')][_0x717e('0x48')]){_0x424c6b['include']=[{'all':!![]}];}return db[_0x717e('0x35')]['findAll'](_0x424c6b);})[_0x717e('0x2f')](function(_0x4971ca){_0x50f02d['rows']=_0x4971ca;return _0x50f02d;})[_0x717e('0x2f')](respondWithFilteredResult(_0x35d009,_0x424c6b))[_0x717e('0x23')](handleError(_0x35d009,null));};exports[_0x717e('0x49')]=function(_0x42e698,_0x519226){var _0x4f93b={'raw':![],'where':{'id':_0x42e698[_0x717e('0x4a')]['id']}},_0x5d6d3b={};_0x5d6d3b['model']=_['keys'](db[_0x717e('0x35')][_0x717e('0x36')]);_0x5d6d3b[_0x717e('0x38')]=_[_0x717e('0x4b')](_0x42e698[_0x717e('0x38')]);_0x5d6d3b['filters']=_[_0x717e('0x3a')](_0x5d6d3b[_0x717e('0x37')],_0x5d6d3b[_0x717e('0x38')]);_0x4f93b[_0x717e('0x3c')]=_[_0x717e('0x3a')](_0x5d6d3b[_0x717e('0x37')],qs[_0x717e('0x3b')](_0x42e698[_0x717e('0x38')][_0x717e('0x3b')]));_0x4f93b[_0x717e('0x3c')]=_0x4f93b['attributes'][_0x717e('0x3d')]?_0x4f93b[_0x717e('0x3c')]:_0x5d6d3b['model'];if(_0x42e698[_0x717e('0x38')][_0x717e('0x48')]){_0x4f93b[_0x717e('0x4c')]=[{'all':!![]}];}_0x4f93b=_[_0x717e('0x44')]({},_0x4f93b,_0x42e698['options']);return db[_0x717e('0x35')][_0x717e('0x4d')](_0x4f93b)[_0x717e('0x2f')](handleEntityNotFound(_0x519226,null))[_0x717e('0x2f')](respondWithResult(_0x519226,null))['catch'](handleError(_0x519226,null));};exports[_0x717e('0x4e')]=function(_0x3070a1,_0x433504){return db[_0x717e('0x35')]['create'](_0x3070a1[_0x717e('0x4f')],{})[_0x717e('0x2f')](respondWithResult(_0x433504,0xc9))[_0x717e('0x23')](handleError(_0x433504,null));};exports[_0x717e('0x2e')]=function(_0x4f15e5,_0x39d26b){if(_0x4f15e5[_0x717e('0x4f')]['id']){delete _0x4f15e5[_0x717e('0x4f')]['id'];}return db[_0x717e('0x35')]['find']({'where':{'id':_0x4f15e5[_0x717e('0x4a')]['id']}})[_0x717e('0x2f')](handleEntityNotFound(_0x39d26b,null))[_0x717e('0x2f')](saveUpdates(_0x4f15e5[_0x717e('0x4f')],null))[_0x717e('0x2f')](respondWithResult(_0x39d26b,null))[_0x717e('0x23')](handleError(_0x39d26b,null));};exports[_0x717e('0x30')]=function(_0x801dec,_0x1987a4){return db['VtigerConfiguration']['find']({'where':{'id':_0x801dec[_0x717e('0x4a')]['id']}})[_0x717e('0x2f')](handleEntityNotFound(_0x1987a4,null))['then'](removeEntity(_0x1987a4,null))[_0x717e('0x23')](handleError(_0x1987a4,null));};exports[_0x717e('0x50')]=function(_0x17964b,_0x3e1281,_0x370544){var _0x10de76={};var _0xf9f2e8={};var _0x57137d;var _0x37d4d1;return db[_0x717e('0x35')][_0x717e('0x51')]({'where':{'id':_0x17964b[_0x717e('0x4a')]['id']}})[_0x717e('0x2f')](handleEntityNotFound(_0x3e1281,null))[_0x717e('0x2f')](function(_0x1469f2){if(_0x1469f2){_0x57137d=_0x1469f2;_0xf9f2e8['model']=_[_0x717e('0x4b')](db[_0x717e('0x52')][_0x717e('0x36')]);_0xf9f2e8[_0x717e('0x38')]=_['keys'](_0x17964b[_0x717e('0x38')]);_0xf9f2e8[_0x717e('0x39')]=_[_0x717e('0x3a')](_0xf9f2e8[_0x717e('0x37')],_0xf9f2e8[_0x717e('0x38')]);_0x10de76[_0x717e('0x3c')]=_[_0x717e('0x3a')](_0xf9f2e8['model'],qs[_0x717e('0x3b')](_0x17964b['query'][_0x717e('0x3b')]));_0x10de76[_0x717e('0x3c')]=_0x10de76[_0x717e('0x3c')][_0x717e('0x3d')]?_0x10de76['attributes']:_0xf9f2e8[_0x717e('0x37')];_0x10de76['order']=qs[_0x717e('0x41')](_0x17964b[_0x717e('0x38')][_0x717e('0x41')]);_0x10de76['where']=qs[_0x717e('0x39')](_['pick'](_0x17964b[_0x717e('0x38')],_0xf9f2e8[_0x717e('0x39')]));if(_0x17964b[_0x717e('0x38')][_0x717e('0x43')]){_0x10de76[_0x717e('0x42')]=_[_0x717e('0x44')](_0x10de76[_0x717e('0x42')],{'$or':_[_0x717e('0x53')](_0x10de76[_0x717e('0x3c')],function(_0x206c3f){var _0x1425fc={};_0x1425fc[_0x206c3f]={'$like':'%'+_0x17964b[_0x717e('0x38')]['filter']+'%'};return _0x1425fc;})});}_0x10de76=_[_0x717e('0x44')]({},_0x10de76,_0x17964b[_0x717e('0x47')]);return _0x57137d[_0x717e('0x50')](_0x10de76);}})[_0x717e('0x2f')](function(_0x265db8){if(_0x265db8){_0x37d4d1=_0x265db8[_0x717e('0x3d')];if(!_0x17964b[_0x717e('0x38')]['hasOwnProperty'](_0x717e('0x3e'))){_0x10de76[_0x717e('0x3f')]=qs[_0x717e('0x3f')](_0x17964b[_0x717e('0x38')][_0x717e('0x3f')]);_0x10de76[_0x717e('0x29')]=qs['offset'](_0x17964b[_0x717e('0x38')]['offset']);}return _0x57137d[_0x717e('0x50')](_0x10de76);}})['then'](function(_0x581331){if(_0x581331){return _0x581331?{'count':_0x37d4d1,'rows':_0x581331}:null;}})[_0x717e('0x2f')](respondWithResult(_0x3e1281,null))['catch'](handleError(_0x3e1281,null));};exports['getSubjects']=function(_0x3b9e7e,_0x21db82,_0x7bfdb6){var _0x1a7fb5={};var _0x5c0f24={};var _0x611479;var _0x57400b;return db[_0x717e('0x35')][_0x717e('0x51')]({'where':{'id':_0x3b9e7e[_0x717e('0x4a')]['id']}})[_0x717e('0x2f')](handleEntityNotFound(_0x21db82,null))['then'](function(_0x1a3465){if(_0x1a3465){_0x611479=_0x1a3465;_0x5c0f24[_0x717e('0x37')]=_[_0x717e('0x4b')](db[_0x717e('0x52')][_0x717e('0x36')]);_0x5c0f24[_0x717e('0x38')]=_[_0x717e('0x4b')](_0x3b9e7e[_0x717e('0x38')]);_0x5c0f24['filters']=_[_0x717e('0x3a')](_0x5c0f24[_0x717e('0x37')],_0x5c0f24[_0x717e('0x38')]);_0x1a7fb5['attributes']=_[_0x717e('0x3a')](_0x5c0f24[_0x717e('0x37')],qs['fields'](_0x3b9e7e[_0x717e('0x38')][_0x717e('0x3b')]));_0x1a7fb5[_0x717e('0x3c')]=_0x1a7fb5[_0x717e('0x3c')]['length']?_0x1a7fb5[_0x717e('0x3c')]:_0x5c0f24[_0x717e('0x37')];_0x1a7fb5[_0x717e('0x40')]=qs['sort'](_0x3b9e7e[_0x717e('0x38')][_0x717e('0x41')]);_0x1a7fb5['where']=qs[_0x717e('0x39')](_[_0x717e('0x54')](_0x3b9e7e[_0x717e('0x38')],_0x5c0f24[_0x717e('0x39')]));if(_0x3b9e7e[_0x717e('0x38')][_0x717e('0x43')]){_0x1a7fb5[_0x717e('0x42')]=_[_0x717e('0x44')](_0x1a7fb5[_0x717e('0x42')],{'$or':_[_0x717e('0x53')](_0x1a7fb5[_0x717e('0x3c')],function(_0x72e8a7){var _0x39c222={};_0x39c222[_0x72e8a7]={'$like':'%'+_0x3b9e7e[_0x717e('0x38')][_0x717e('0x43')]+'%'};return _0x39c222;})});}_0x1a7fb5=_[_0x717e('0x44')]({},_0x1a7fb5,_0x3b9e7e['options']);return _0x611479[_0x717e('0x55')](_0x1a7fb5);}})['then'](function(_0x21f7b6){if(_0x21f7b6){_0x57400b=_0x21f7b6[_0x717e('0x3d')];if(!_0x3b9e7e[_0x717e('0x38')][_0x717e('0x56')](_0x717e('0x3e'))){_0x1a7fb5[_0x717e('0x3f')]=qs[_0x717e('0x3f')](_0x3b9e7e[_0x717e('0x38')][_0x717e('0x3f')]);_0x1a7fb5[_0x717e('0x29')]=qs[_0x717e('0x29')](_0x3b9e7e[_0x717e('0x38')]['offset']);}return _0x611479[_0x717e('0x55')](_0x1a7fb5);}})[_0x717e('0x2f')](function(_0x93b0d2){if(_0x93b0d2){return _0x93b0d2?{'count':_0x57400b,'rows':_0x93b0d2}:null;}})[_0x717e('0x2f')](respondWithResult(_0x21db82,null))['catch'](handleError(_0x21db82,null));};exports[_0x717e('0x57')]=function(_0x362144,_0x1b15da,_0x33db26){var _0x76e5cf={};var _0x2b105a={};var _0x5ef835;var _0x47d46b;return db[_0x717e('0x35')][_0x717e('0x51')]({'where':{'id':_0x362144['params']['id']}})[_0x717e('0x2f')](handleEntityNotFound(_0x1b15da,null))[_0x717e('0x2f')](function(_0x30d6ac){if(_0x30d6ac){_0x5ef835=_0x30d6ac;_0x2b105a[_0x717e('0x37')]=_['keys'](db[_0x717e('0x52')][_0x717e('0x36')]);_0x2b105a[_0x717e('0x38')]=_[_0x717e('0x4b')](_0x362144[_0x717e('0x38')]);_0x2b105a['filters']=_[_0x717e('0x3a')](_0x2b105a[_0x717e('0x37')],_0x2b105a[_0x717e('0x38')]);_0x76e5cf[_0x717e('0x3c')]=_[_0x717e('0x3a')](_0x2b105a['model'],qs['fields'](_0x362144[_0x717e('0x38')][_0x717e('0x3b')]));_0x76e5cf['attributes']=_0x76e5cf[_0x717e('0x3c')][_0x717e('0x3d')]?_0x76e5cf[_0x717e('0x3c')]:_0x2b105a[_0x717e('0x37')];_0x76e5cf['order']=qs[_0x717e('0x41')](_0x362144[_0x717e('0x38')]['sort']);_0x76e5cf[_0x717e('0x42')]=qs[_0x717e('0x39')](_[_0x717e('0x54')](_0x362144['query'],_0x2b105a['filters']));if(_0x362144[_0x717e('0x38')][_0x717e('0x43')]){_0x76e5cf[_0x717e('0x42')]=_[_0x717e('0x44')](_0x76e5cf[_0x717e('0x42')],{'$or':_[_0x717e('0x53')](_0x76e5cf['attributes'],function(_0x15afed){var _0x5a5a6f={};_0x5a5a6f[_0x15afed]={'$like':'%'+_0x362144['query']['filter']+'%'};return _0x5a5a6f;})});}_0x76e5cf=_[_0x717e('0x44')]({},_0x76e5cf,_0x362144[_0x717e('0x47')]);return _0x5ef835[_0x717e('0x57')](_0x76e5cf);}})['then'](function(_0x13cf7d){if(_0x13cf7d){_0x47d46b=_0x13cf7d['length'];if(!_0x362144['query'][_0x717e('0x56')]('nolimit')){_0x76e5cf[_0x717e('0x3f')]=qs['limit'](_0x362144[_0x717e('0x38')][_0x717e('0x3f')]);_0x76e5cf[_0x717e('0x29')]=qs['offset'](_0x362144['query'][_0x717e('0x29')]);}return _0x5ef835[_0x717e('0x57')](_0x76e5cf);}})[_0x717e('0x2f')](function(_0x8284d6){if(_0x8284d6){return _0x8284d6?{'count':_0x47d46b,'rows':_0x8284d6}:null;}})[_0x717e('0x2f')](respondWithResult(_0x1b15da,null))[_0x717e('0x23')](handleError(_0x1b15da,null));};
\ No newline at end of file
+var _0x6785=['../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../mysqldb','jayson/promise','client','http','test','info','VtigerConfiguration,\x20%s,\x20%s','request\x20sent','debug','VtigerConfiguration,\x20%s,\x20%s,\x20%s','error','code','message','catch','sendStatus','status','json','count','offset','limit','set','Content-Range','reject','save','update','destroy','end','stack','name','send','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','merge','map','type','key','VIRTUAL','field','filter','VtigerConfiguration','includeAll','include','findAll','then','rows','show','params','options','create','body','find','findOne','VtigerField','getFields','getSubjects','getDescriptions','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','papaparse'];(function(_0x173b35,_0x5830a){var _0x5d68fb=function(_0x3a0dab){while(--_0x3a0dab){_0x173b35['push'](_0x173b35['shift']());}};_0x5d68fb(++_0x5830a);}(_0x6785,0xa6));var _0x5678=function(_0x36eaaa,_0x326732){_0x36eaaa=_0x36eaaa-0x0;var _0x461349=_0x6785[_0x36eaaa];return _0x461349;};'use strict';var pdf=require(_0x5678('0x0'));var emlformat=require(_0x5678('0x1'));var rimraf=require(_0x5678('0x2'));var zipdir=require(_0x5678('0x3'));var jsonpatch=require(_0x5678('0x4'));var rp=require(_0x5678('0x5'));var moment=require(_0x5678('0x6'));var BPromise=require('bluebird');var Mustache=require(_0x5678('0x7'));var util=require(_0x5678('0x8'));var path=require(_0x5678('0x9'));var sox=require(_0x5678('0xa'));var csv=require('to-csv');var ejs=require(_0x5678('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x5678('0xc'));var crypto=require(_0x5678('0xd'));var jsforce=require(_0x5678('0xe'));var deskjs=require(_0x5678('0xf'));var toCsv=require(_0x5678('0x10'));var querystring=require('querystring');var Papa=require(_0x5678('0x11'));var Redis=require('ioredis');var authService=require(_0x5678('0x12'));var qs=require(_0x5678('0x13'));var hardwareService=require(_0x5678('0x14'));var logger=require(_0x5678('0x15'))(_0x5678('0x16'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x5678('0x17'))['db'];var jayson=require(_0x5678('0x18'));var client=jayson[_0x5678('0x19')][_0x5678('0x1a')]({'port':0x232a});function checkPasswordPattern(_0x441732,_0x5cf38b,_0x3c481e){if(_0x3c481e){var _0x4d3a83=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x4d3a83[_0x5678('0x1b')](_0x5cf38b)){return _0x441732;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x441732;}}function respondWithRpcPromise(_0x10c45b,_0x4a70fd,_0x17ba35,_0x179ec5){return new BPromise(function(_0x7a6f6f,_0x83513a){var _0x59df32=_0x179ec5||client;return _0x59df32['request'](_0x10c45b,_0x17ba35)['then'](function(_0x3839d7){logger[_0x5678('0x1c')](_0x5678('0x1d'),_0x4a70fd,_0x5678('0x1e'));logger[_0x5678('0x1f')](_0x5678('0x20'),_0x4a70fd,_0x5678('0x1e'),JSON['stringify'](_0x3839d7));if(_0x3839d7[_0x5678('0x21')]){if(_0x3839d7['error'][_0x5678('0x22')]===0x1f4){logger[_0x5678('0x21')](_0x5678('0x1d'),_0x4a70fd,_0x3839d7['error']['message']);return _0x83513a(_0x3839d7[_0x5678('0x21')][_0x5678('0x23')]);}logger[_0x5678('0x21')](_0x5678('0x1d'),_0x4a70fd,_0x3839d7[_0x5678('0x21')][_0x5678('0x23')]);return _0x7a6f6f(_0x3839d7[_0x5678('0x21')][_0x5678('0x23')]);}else{logger[_0x5678('0x1c')](_0x5678('0x1d'),_0x4a70fd,_0x5678('0x1e'));_0x7a6f6f(_0x3839d7['result']['message']);}})[_0x5678('0x24')](function(_0x4a824d){logger[_0x5678('0x21')](_0x5678('0x1d'),_0x4a70fd,_0x4a824d);_0x83513a(_0x4a824d);});});}function respondWithStatusCode(_0xa2e795,_0x54cf8c){_0x54cf8c=_0x54cf8c||0xcc;return function(_0x2668df){if(_0x2668df){return _0xa2e795[_0x5678('0x25')](_0x54cf8c);}return _0xa2e795['status'](_0x54cf8c)['end']();};}function respondWithResult(_0x3e2d3e,_0x712ef4){_0x712ef4=_0x712ef4||0xc8;return function(_0x171f3c){if(_0x171f3c){return _0x3e2d3e[_0x5678('0x26')](_0x712ef4)[_0x5678('0x27')](_0x171f3c);}};}function respondWithFilteredResult(_0x277aeb,_0x1885a0){return function(_0x128928){if(_0x128928){var _0x1eed8c=_0x128928[_0x5678('0x28')],_0x45cd03=_0x1885a0[_0x5678('0x29')],_0x1b7dcb=_0x1885a0['offset']+_0x1885a0[_0x5678('0x2a')],_0x171d74;if(_0x1b7dcb>=_0x1eed8c){_0x1b7dcb=_0x1eed8c;_0x171d74=0xc8;}else{_0x171d74=0xce;}_0x277aeb['status'](_0x171d74);return _0x277aeb[_0x5678('0x2b')](_0x5678('0x2c'),_0x45cd03+'-'+_0x1b7dcb+'/'+_0x1eed8c)[_0x5678('0x27')](_0x128928);}return null;};}function patchUpdates(_0x4cd8dc){return function(_0x411ee9){try{jsonpatch['apply'](_0x411ee9,_0x4cd8dc,!![]);}catch(_0x979630){return BPromise[_0x5678('0x2d')](_0x979630);}return _0x411ee9[_0x5678('0x2e')]();};}function saveUpdates(_0x101a63,_0x53ecad){return function(_0x357703){if(_0x357703){return _0x357703[_0x5678('0x2f')](_0x101a63)['then'](function(_0x4a6b8f){return _0x4a6b8f;});}return null;};}function removeEntity(_0x337334,_0xa89539){return function(_0x5c0cf1){if(_0x5c0cf1){return _0x5c0cf1[_0x5678('0x30')]()['then'](function(){_0x337334[_0x5678('0x26')](0xcc)[_0x5678('0x31')]();});}};}function handleEntityNotFound(_0xf0a235,_0x4d6540){return function(_0x2db7b0){if(!_0x2db7b0){_0xf0a235[_0x5678('0x25')](0x194);}return _0x2db7b0;};}function handleError(_0x261ab8,_0x88d6ec){_0x88d6ec=_0x88d6ec||0x1f4;return function(_0x11539f){logger[_0x5678('0x21')](_0x11539f[_0x5678('0x32')]);if(_0x11539f[_0x5678('0x33')]){delete _0x11539f[_0x5678('0x33')];}_0x261ab8['status'](_0x88d6ec)[_0x5678('0x34')](_0x11539f);};}exports['index']=function(_0xb66932,_0x351ba2){var _0x3221d4={},_0x553277={},_0x39850e={'count':0x0,'rows':[]};var _0x3afce7=db['VtigerConfiguration'][_0x5678('0x35')];_0x553277[_0x5678('0x36')]=_[_0x5678('0x37')](_0x3afce7);_0x553277[_0x5678('0x38')]=_[_0x5678('0x37')](_0xb66932[_0x5678('0x38')]);_0x553277[_0x5678('0x39')]=_[_0x5678('0x3a')](_0x553277[_0x5678('0x36')],_0x553277[_0x5678('0x38')]);_0x3221d4[_0x5678('0x3b')]=_[_0x5678('0x3a')](_0x553277['model'],qs[_0x5678('0x3c')](_0xb66932['query'][_0x5678('0x3c')]));_0x3221d4[_0x5678('0x3b')]=_0x3221d4[_0x5678('0x3b')][_0x5678('0x3d')]?_0x3221d4[_0x5678('0x3b')]:_0x553277['model'];if(!_0xb66932[_0x5678('0x38')][_0x5678('0x3e')](_0x5678('0x3f'))){_0x3221d4[_0x5678('0x2a')]=qs['limit'](_0xb66932[_0x5678('0x38')][_0x5678('0x2a')]);_0x3221d4[_0x5678('0x29')]=qs[_0x5678('0x29')](_0xb66932['query']['offset']);}_0x3221d4[_0x5678('0x40')]=qs['sort'](_0xb66932[_0x5678('0x38')][_0x5678('0x41')]);_0x3221d4[_0x5678('0x42')]=qs[_0x5678('0x39')](_[_0x5678('0x43')](_0xb66932[_0x5678('0x38')],_0x553277[_0x5678('0x39')]));if(_0xb66932[_0x5678('0x38')]['filter']){_0x3221d4[_0x5678('0x42')]=_[_0x5678('0x44')](_0x3221d4[_0x5678('0x42')],{'$or':_[_0x5678('0x45')](_0x3afce7,function(_0x9d5656){if(_0x9d5656[_0x5678('0x46')][_0x5678('0x47')]!==_0x5678('0x48')){var _0x5ccf05={};_0x5ccf05[_0x9d5656[_0x5678('0x49')]]={'$like':'%'+_0xb66932['query'][_0x5678('0x4a')]+'%'};return _0x5ccf05;}})});}_0x3221d4=_[_0x5678('0x44')]({},_0x3221d4,_0xb66932['options']);var _0x171c8e={'where':_0x3221d4['where']};return db[_0x5678('0x4b')]['count'](_0x171c8e)['then'](function(_0x2bf229){_0x39850e['count']=_0x2bf229;if(_0xb66932[_0x5678('0x38')][_0x5678('0x4c')]){_0x3221d4[_0x5678('0x4d')]=[{'all':!![]}];}return db[_0x5678('0x4b')][_0x5678('0x4e')](_0x3221d4);})[_0x5678('0x4f')](function(_0x4f4fce){_0x39850e[_0x5678('0x50')]=_0x4f4fce;return _0x39850e;})[_0x5678('0x4f')](respondWithFilteredResult(_0x351ba2,_0x3221d4))['catch'](handleError(_0x351ba2,null));};exports[_0x5678('0x51')]=function(_0x21e8dc,_0x37e2b6){var _0x1621a9={'raw':![],'where':{'id':_0x21e8dc[_0x5678('0x52')]['id']}},_0x492217={};_0x492217[_0x5678('0x36')]=_[_0x5678('0x37')](db[_0x5678('0x4b')]['rawAttributes']);_0x492217[_0x5678('0x38')]=_['keys'](_0x21e8dc[_0x5678('0x38')]);_0x492217[_0x5678('0x39')]=_[_0x5678('0x3a')](_0x492217[_0x5678('0x36')],_0x492217[_0x5678('0x38')]);_0x1621a9[_0x5678('0x3b')]=_[_0x5678('0x3a')](_0x492217[_0x5678('0x36')],qs[_0x5678('0x3c')](_0x21e8dc[_0x5678('0x38')]['fields']));_0x1621a9[_0x5678('0x3b')]=_0x1621a9[_0x5678('0x3b')][_0x5678('0x3d')]?_0x1621a9[_0x5678('0x3b')]:_0x492217[_0x5678('0x36')];if(_0x21e8dc[_0x5678('0x38')]['includeAll']){_0x1621a9[_0x5678('0x4d')]=[{'all':!![]}];}_0x1621a9=_['merge']({},_0x1621a9,_0x21e8dc[_0x5678('0x53')]);return db[_0x5678('0x4b')]['find'](_0x1621a9)['then'](handleEntityNotFound(_0x37e2b6,null))[_0x5678('0x4f')](respondWithResult(_0x37e2b6,null))[_0x5678('0x24')](handleError(_0x37e2b6,null));};exports[_0x5678('0x54')]=function(_0x33012f,_0x2f5c7c){return db['VtigerConfiguration'][_0x5678('0x54')](_0x33012f[_0x5678('0x55')],{})['then'](respondWithResult(_0x2f5c7c,0xc9))['catch'](handleError(_0x2f5c7c,null));};exports[_0x5678('0x2f')]=function(_0xb21192,_0x28b246){if(_0xb21192['body']['id']){delete _0xb21192[_0x5678('0x55')]['id'];}return db[_0x5678('0x4b')]['find']({'where':{'id':_0xb21192[_0x5678('0x52')]['id']}})[_0x5678('0x4f')](handleEntityNotFound(_0x28b246,null))[_0x5678('0x4f')](saveUpdates(_0xb21192[_0x5678('0x55')],null))[_0x5678('0x4f')](respondWithResult(_0x28b246,null))[_0x5678('0x24')](handleError(_0x28b246,null));};exports['destroy']=function(_0x2135d1,_0x228b28){return db[_0x5678('0x4b')][_0x5678('0x56')]({'where':{'id':_0x2135d1['params']['id']}})[_0x5678('0x4f')](handleEntityNotFound(_0x228b28,null))['then'](removeEntity(_0x228b28,null))[_0x5678('0x24')](handleError(_0x228b28,null));};exports['getFields']=function(_0x237ebc,_0x1060e3,_0x1b76e3){var _0x5cfe81={};var _0x12d83b={};var _0x4678e4;var _0x2fe96e;return db['VtigerConfiguration'][_0x5678('0x57')]({'where':{'id':_0x237ebc[_0x5678('0x52')]['id']}})['then'](handleEntityNotFound(_0x1060e3,null))[_0x5678('0x4f')](function(_0x51f1d1){if(_0x51f1d1){_0x4678e4=_0x51f1d1;_0x12d83b[_0x5678('0x36')]=_[_0x5678('0x37')](db[_0x5678('0x58')]['rawAttributes']);_0x12d83b[_0x5678('0x38')]=_[_0x5678('0x37')](_0x237ebc[_0x5678('0x38')]);_0x12d83b[_0x5678('0x39')]=_[_0x5678('0x3a')](_0x12d83b['model'],_0x12d83b[_0x5678('0x38')]);_0x5cfe81['attributes']=_[_0x5678('0x3a')](_0x12d83b[_0x5678('0x36')],qs[_0x5678('0x3c')](_0x237ebc[_0x5678('0x38')][_0x5678('0x3c')]));_0x5cfe81[_0x5678('0x3b')]=_0x5cfe81['attributes']['length']?_0x5cfe81[_0x5678('0x3b')]:_0x12d83b[_0x5678('0x36')];_0x5cfe81[_0x5678('0x40')]=qs[_0x5678('0x41')](_0x237ebc[_0x5678('0x38')][_0x5678('0x41')]);_0x5cfe81['where']=qs[_0x5678('0x39')](_[_0x5678('0x43')](_0x237ebc[_0x5678('0x38')],_0x12d83b[_0x5678('0x39')]));if(_0x237ebc[_0x5678('0x38')][_0x5678('0x4a')]){_0x5cfe81[_0x5678('0x42')]=_[_0x5678('0x44')](_0x5cfe81[_0x5678('0x42')],{'$or':_[_0x5678('0x45')](_0x5cfe81[_0x5678('0x3b')],function(_0x344a01){var _0x1554bd={};_0x1554bd[_0x344a01]={'$like':'%'+_0x237ebc[_0x5678('0x38')][_0x5678('0x4a')]+'%'};return _0x1554bd;})});}_0x5cfe81=_['merge']({},_0x5cfe81,_0x237ebc[_0x5678('0x53')]);return _0x4678e4[_0x5678('0x59')](_0x5cfe81);}})['then'](function(_0x1a1b1a){if(_0x1a1b1a){_0x2fe96e=_0x1a1b1a[_0x5678('0x3d')];if(!_0x237ebc[_0x5678('0x38')]['hasOwnProperty'](_0x5678('0x3f'))){_0x5cfe81[_0x5678('0x2a')]=qs['limit'](_0x237ebc[_0x5678('0x38')][_0x5678('0x2a')]);_0x5cfe81[_0x5678('0x29')]=qs[_0x5678('0x29')](_0x237ebc['query'][_0x5678('0x29')]);}return _0x4678e4[_0x5678('0x59')](_0x5cfe81);}})['then'](function(_0x48e8dd){if(_0x48e8dd){return _0x48e8dd?{'count':_0x2fe96e,'rows':_0x48e8dd}:null;}})[_0x5678('0x4f')](respondWithResult(_0x1060e3,null))[_0x5678('0x24')](handleError(_0x1060e3,null));};exports[_0x5678('0x5a')]=function(_0x1d0631,_0x7141cd,_0x25ce28){var _0x3e87e5={};var _0x2183cb={};var _0x38907c;var _0x138e2a;return db[_0x5678('0x4b')]['findOne']({'where':{'id':_0x1d0631['params']['id']}})[_0x5678('0x4f')](handleEntityNotFound(_0x7141cd,null))['then'](function(_0x2df26e){if(_0x2df26e){_0x38907c=_0x2df26e;_0x2183cb[_0x5678('0x36')]=_[_0x5678('0x37')](db[_0x5678('0x58')][_0x5678('0x35')]);_0x2183cb[_0x5678('0x38')]=_[_0x5678('0x37')](_0x1d0631['query']);_0x2183cb[_0x5678('0x39')]=_[_0x5678('0x3a')](_0x2183cb[_0x5678('0x36')],_0x2183cb[_0x5678('0x38')]);_0x3e87e5['attributes']=_[_0x5678('0x3a')](_0x2183cb['model'],qs[_0x5678('0x3c')](_0x1d0631[_0x5678('0x38')]['fields']));_0x3e87e5[_0x5678('0x3b')]=_0x3e87e5[_0x5678('0x3b')][_0x5678('0x3d')]?_0x3e87e5[_0x5678('0x3b')]:_0x2183cb[_0x5678('0x36')];_0x3e87e5[_0x5678('0x40')]=qs[_0x5678('0x41')](_0x1d0631[_0x5678('0x38')][_0x5678('0x41')]);_0x3e87e5[_0x5678('0x42')]=qs['filters'](_['pick'](_0x1d0631[_0x5678('0x38')],_0x2183cb[_0x5678('0x39')]));if(_0x1d0631['query']['filter']){_0x3e87e5[_0x5678('0x42')]=_['merge'](_0x3e87e5['where'],{'$or':_['map'](_0x3e87e5[_0x5678('0x3b')],function(_0x3390df){var _0x21242c={};_0x21242c[_0x3390df]={'$like':'%'+_0x1d0631['query'][_0x5678('0x4a')]+'%'};return _0x21242c;})});}_0x3e87e5=_[_0x5678('0x44')]({},_0x3e87e5,_0x1d0631[_0x5678('0x53')]);return _0x38907c[_0x5678('0x5a')](_0x3e87e5);}})[_0x5678('0x4f')](function(_0x5013ef){if(_0x5013ef){_0x138e2a=_0x5013ef[_0x5678('0x3d')];if(!_0x1d0631['query']['hasOwnProperty'](_0x5678('0x3f'))){_0x3e87e5['limit']=qs[_0x5678('0x2a')](_0x1d0631['query'][_0x5678('0x2a')]);_0x3e87e5[_0x5678('0x29')]=qs['offset'](_0x1d0631[_0x5678('0x38')][_0x5678('0x29')]);}return _0x38907c[_0x5678('0x5a')](_0x3e87e5);}})[_0x5678('0x4f')](function(_0x1aede2){if(_0x1aede2){return _0x1aede2?{'count':_0x138e2a,'rows':_0x1aede2}:null;}})['then'](respondWithResult(_0x7141cd,null))[_0x5678('0x24')](handleError(_0x7141cd,null));};exports[_0x5678('0x5b')]=function(_0x2e5375,_0x4c5edf,_0x2c69b1){var _0x169109={};var _0x4c6090={};var _0x2b44d0;var _0x21ecfb;return db[_0x5678('0x4b')]['findOne']({'where':{'id':_0x2e5375[_0x5678('0x52')]['id']}})['then'](handleEntityNotFound(_0x4c5edf,null))[_0x5678('0x4f')](function(_0x539828){if(_0x539828){_0x2b44d0=_0x539828;_0x4c6090[_0x5678('0x36')]=_['keys'](db[_0x5678('0x58')]['rawAttributes']);_0x4c6090['query']=_[_0x5678('0x37')](_0x2e5375[_0x5678('0x38')]);_0x4c6090['filters']=_['intersection'](_0x4c6090[_0x5678('0x36')],_0x4c6090[_0x5678('0x38')]);_0x169109[_0x5678('0x3b')]=_['intersection'](_0x4c6090['model'],qs[_0x5678('0x3c')](_0x2e5375[_0x5678('0x38')][_0x5678('0x3c')]));_0x169109['attributes']=_0x169109['attributes'][_0x5678('0x3d')]?_0x169109[_0x5678('0x3b')]:_0x4c6090[_0x5678('0x36')];_0x169109[_0x5678('0x40')]=qs['sort'](_0x2e5375[_0x5678('0x38')][_0x5678('0x41')]);_0x169109[_0x5678('0x42')]=qs['filters'](_[_0x5678('0x43')](_0x2e5375[_0x5678('0x38')],_0x4c6090[_0x5678('0x39')]));if(_0x2e5375[_0x5678('0x38')][_0x5678('0x4a')]){_0x169109[_0x5678('0x42')]=_[_0x5678('0x44')](_0x169109[_0x5678('0x42')],{'$or':_[_0x5678('0x45')](_0x169109[_0x5678('0x3b')],function(_0x539f7a){var _0x4d063b={};_0x4d063b[_0x539f7a]={'$like':'%'+_0x2e5375[_0x5678('0x38')][_0x5678('0x4a')]+'%'};return _0x4d063b;})});}_0x169109=_[_0x5678('0x44')]({},_0x169109,_0x2e5375[_0x5678('0x53')]);return _0x2b44d0['getDescriptions'](_0x169109);}})['then'](function(_0x4162fd){if(_0x4162fd){_0x21ecfb=_0x4162fd[_0x5678('0x3d')];if(!_0x2e5375[_0x5678('0x38')][_0x5678('0x3e')](_0x5678('0x3f'))){_0x169109['limit']=qs[_0x5678('0x2a')](_0x2e5375[_0x5678('0x38')][_0x5678('0x2a')]);_0x169109[_0x5678('0x29')]=qs[_0x5678('0x29')](_0x2e5375['query'][_0x5678('0x29')]);}return _0x2b44d0[_0x5678('0x5b')](_0x169109);}})[_0x5678('0x4f')](function(_0x392e2e){if(_0x392e2e){return _0x392e2e?{'count':_0x21ecfb,'rows':_0x392e2e}:null;}})['then'](respondWithResult(_0x4c5edf,null))['catch'](handleError(_0x4c5edf,null));};
\ No newline at end of file
index 652b6e6..ca8b50b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['../../config/environment','./intVtigerConfiguration.attributes','exports','define','VtigerConfiguration','lodash','util','../../config/logger','bluebird','path','rimraf'];(function(_0x1533d2,_0x486026){var _0x541f4a=function(_0x1dd0d5){while(--_0x1dd0d5){_0x1533d2['push'](_0x1533d2['shift']());}};_0x541f4a(++_0x486026);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0xa9e0[_0x2dafbe];return _0x58a45a;};'use strict';var _=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var logger=require(_0x0a9e('0x2'))('api');var moment=require('moment');var BPromise=require(_0x0a9e('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x0a9e('0x4'));var rimraf=require(_0x0a9e('0x5'));var config=require(_0x0a9e('0x6'));var attributes=require(_0x0a9e('0x7'));module[_0x0a9e('0x8')]=function(_0x57b080,_0x219af0){return _0x57b080[_0x0a9e('0x9')](_0x0a9e('0xa'),attributes,{'tableName':'int_vtiger_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xa9e0=['../../config/environment','./intVtigerConfiguration.attributes','exports','define','VtigerConfiguration','lodash','util','../../config/logger','bluebird','path','rimraf'];(function(_0x439618,_0x3d9129){var _0x3680cd=function(_0x2deff3){while(--_0x2deff3){_0x439618['push'](_0x439618['shift']());}};_0x3680cd(++_0x3d9129);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3b5250,_0x7a0b2c){_0x3b5250=_0x3b5250-0x0;var _0xc844a1=_0xa9e0[_0x3b5250];return _0xc844a1;};'use strict';var _=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var logger=require(_0x0a9e('0x2'))('api');var moment=require('moment');var BPromise=require(_0x0a9e('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x0a9e('0x4'));var rimraf=require(_0x0a9e('0x5'));var config=require(_0x0a9e('0x6'));var attributes=require(_0x0a9e('0x7'));module[_0x0a9e('0x8')]=function(_0x57b080,_0x219af0){return _0x57b080[_0x0a9e('0x9')](_0x0a9e('0xa'),attributes,{'tableName':'int_vtiger_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 201fec4..9e3cdc0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x55af=['client','http','request','info','VtigerConfiguration,\x20%s,\x20%s','request\x20sent','VtigerConfiguration,\x20%s,\x20%s,\x20%s','error','code','message','result','lodash','moment','bluebird','randomstring','ioredis','../../config/logger','../../config/environment','jayson/promise'];(function(_0x4b055c,_0x4b870b){var _0x4b62bb=function(_0x4884c2){while(--_0x4884c2){_0x4b055c['push'](_0x4b055c['shift']());}};_0x4b62bb(++_0x4b870b);}(_0x55af,0x90));var _0xf55a=function(_0x168f7d,_0x3d60f5){_0x168f7d=_0x168f7d-0x0;var _0x50051a=_0x55af[_0x168f7d];return _0x50051a;};'use strict';var _=require(_0xf55a('0x0'));var util=require('util');var moment=require(_0xf55a('0x1'));var BPromise=require(_0xf55a('0x2'));var rs=require(_0xf55a('0x3'));var fs=require('fs');var Redis=require(_0xf55a('0x4'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xf55a('0x5'))('rpc');var config=require(_0xf55a('0x6'));var jayson=require(_0xf55a('0x7'));var client=jayson[_0xf55a('0x8')][_0xf55a('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x1ba954,_0x149e7d,_0x56b975){return new BPromise(function(_0x12dfbc,_0x4c2f95){return client[_0xf55a('0xa')](_0x1ba954,_0x56b975)['then'](function(_0x429c05){logger[_0xf55a('0xb')](_0xf55a('0xc'),_0x149e7d,_0xf55a('0xd'));logger['debug'](_0xf55a('0xe'),_0x149e7d,_0xf55a('0xd'),JSON['stringify'](_0x429c05));if(_0x429c05[_0xf55a('0xf')]){if(_0x429c05[_0xf55a('0xf')][_0xf55a('0x10')]===0x1f4){logger[_0xf55a('0xf')](_0xf55a('0xc'),_0x149e7d,_0x429c05[_0xf55a('0xf')][_0xf55a('0x11')]);return _0x4c2f95(_0x429c05['error'][_0xf55a('0x11')]);}logger[_0xf55a('0xf')](_0xf55a('0xc'),_0x149e7d,_0x429c05[_0xf55a('0xf')][_0xf55a('0x11')]);return _0x12dfbc(_0x429c05[_0xf55a('0xf')][_0xf55a('0x11')]);}else{logger['info'](_0xf55a('0xc'),_0x149e7d,_0xf55a('0xd'));_0x12dfbc(_0x429c05[_0xf55a('0x12')][_0xf55a('0x11')]);}})['catch'](function(_0xcc0952){logger[_0xf55a('0xf')](_0xf55a('0xc'),_0x149e7d,_0xcc0952);_0x4c2f95(_0xcc0952);});});}
\ No newline at end of file
+var _0x4a88=['result','catch','util','moment','bluebird','randomstring','../../config/utils','jayson/promise','client','http','request','info','VtigerConfiguration,\x20%s,\x20%s','request\x20sent','debug','VtigerConfiguration,\x20%s,\x20%s,\x20%s','error','code','message'];(function(_0x232e4a,_0x8418a9){var _0x105d12=function(_0x4af0d9){while(--_0x4af0d9){_0x232e4a['push'](_0x232e4a['shift']());}};_0x105d12(++_0x8418a9);}(_0x4a88,0xad));var _0x84a8=function(_0x561200,_0x14a854){_0x561200=_0x561200-0x0;var _0x2d7516=_0x4a88[_0x561200];return _0x2d7516;};'use strict';var _=require('lodash');var util=require(_0x84a8('0x0'));var moment=require(_0x84a8('0x1'));var BPromise=require(_0x84a8('0x2'));var rs=require(_0x84a8('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x84a8('0x4'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0x84a8('0x5'));var client=jayson[_0x84a8('0x6')][_0x84a8('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x4de0d2,_0x263fec,_0x29af20){return new BPromise(function(_0x30d36d,_0x2535bd){return client[_0x84a8('0x8')](_0x4de0d2,_0x29af20)['then'](function(_0x1d1ddf){logger[_0x84a8('0x9')](_0x84a8('0xa'),_0x263fec,_0x84a8('0xb'));logger[_0x84a8('0xc')](_0x84a8('0xd'),_0x263fec,'request\x20sent',JSON['stringify'](_0x1d1ddf));if(_0x1d1ddf[_0x84a8('0xe')]){if(_0x1d1ddf[_0x84a8('0xe')][_0x84a8('0xf')]===0x1f4){logger[_0x84a8('0xe')](_0x84a8('0xa'),_0x263fec,_0x1d1ddf[_0x84a8('0xe')][_0x84a8('0x10')]);return _0x2535bd(_0x1d1ddf['error'][_0x84a8('0x10')]);}logger[_0x84a8('0xe')]('VtigerConfiguration,\x20%s,\x20%s',_0x263fec,_0x1d1ddf[_0x84a8('0xe')]['message']);return _0x30d36d(_0x1d1ddf[_0x84a8('0xe')]['message']);}else{logger[_0x84a8('0x9')](_0x84a8('0xa'),_0x263fec,'request\x20sent');_0x30d36d(_0x1d1ddf[_0x84a8('0x11')][_0x84a8('0x10')]);}})[_0x84a8('0x12')](function(_0x41b7ee){logger[_0x84a8('0xe')](_0x84a8('0xa'),_0x263fec,_0x41b7ee);_0x2535bd(_0x41b7ee);});});}
\ No newline at end of file
index 1c99b82..dc2b627 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdf20=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','/:id','show','put','isAuthenticated','delete','destroy','exports','path','connect-timeout'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0xdf20,0x1de));var _0x0df2=function(_0x2784a4,_0x339f82){_0x2784a4=_0x2784a4-0x0;var _0x41f380=_0xdf20[_0x2784a4];return _0x41f380;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x0df2('0x0'));var timeout=require(_0x0df2('0x1'));var express=require(_0x0df2('0x2'));var router=express[_0x0df2('0x3')]();var auth=require(_0x0df2('0x4'));var interaction=require(_0x0df2('0x5'));var config=require(_0x0df2('0x6'));var controller=require('./intVtigerField.controller');router[_0x0df2('0x7')]('/',auth['isAuthenticated'](),controller['index']);router['get'](_0x0df2('0x8'),auth['isAuthenticated'](),controller[_0x0df2('0x9')]);router['post']('/',auth['isAuthenticated'](),controller['create']);router[_0x0df2('0xa')](_0x0df2('0x8'),auth[_0x0df2('0xb')](),controller['update']);router[_0x0df2('0xc')](_0x0df2('0x8'),auth[_0x0df2('0xb')](),controller[_0x0df2('0xd')]);module[_0x0df2('0xe')]=router;
\ No newline at end of file
+var _0xb193=['util','path','connect-timeout','express','../../config/environment','./intVtigerField.controller','get','isAuthenticated','create','put','update','/:id','destroy','exports'];(function(_0x34d346,_0x4c6502){var _0x122d76=function(_0x22a5fd){while(--_0x22a5fd){_0x34d346['push'](_0x34d346['shift']());}};_0x122d76(++_0x4c6502);}(_0xb193,0x142));var _0x3b19=function(_0x5f25b3,_0x35481a){_0x5f25b3=_0x5f25b3-0x0;var _0x4ab9bf=_0xb193[_0x5f25b3];return _0x4ab9bf;};'use strict';var multer=require('multer');var util=require(_0x3b19('0x0'));var path=require(_0x3b19('0x1'));var timeout=require(_0x3b19('0x2'));var express=require(_0x3b19('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x3b19('0x4'));var controller=require(_0x3b19('0x5'));router[_0x3b19('0x6')]('/',auth[_0x3b19('0x7')](),controller['index']);router['get']('/:id',auth[_0x3b19('0x7')](),controller['show']);router['post']('/',auth[_0x3b19('0x7')](),controller[_0x3b19('0x8')]);router[_0x3b19('0x9')]('/:id',auth[_0x3b19('0x7')](),controller[_0x3b19('0xa')]);router['delete'](_0x3b19('0xb'),auth[_0x3b19('0x7')](),controller[_0x3b19('0xc')]);module[_0x3b19('0xd')]=router;
\ No newline at end of file
index e0fe21b..e58db98 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9bde=['BOOLEAN','exports','string','customVariable','keyValue','STRING','ENUM'];(function(_0x158da6,_0x3cb06d){var _0x429c30=function(_0x2d5895){while(--_0x2d5895){_0x158da6['push'](_0x158da6['shift']());}};_0x429c30(++_0x3cb06d);}(_0x9bde,0xe1));var _0xe9bd=function(_0x5aeaef,_0x52d8e1){_0x5aeaef=_0x5aeaef-0x0;var _0x4f22f6=_0x9bde[_0x5aeaef];return _0x4f22f6;};'use strict';var Sequelize=require('sequelize');module[_0xe9bd('0x0')]={'type':{'type':Sequelize['ENUM'](_0xe9bd('0x1'),'variable',_0xe9bd('0x2'),_0xe9bd('0x3')),'defaultValue':_0xe9bd('0x1')},'content':{'type':Sequelize[_0xe9bd('0x4')]},'key':{'type':Sequelize[_0xe9bd('0x4')]},'keyType':{'type':Sequelize[_0xe9bd('0x5')](_0xe9bd('0x1'),'variable',_0xe9bd('0x2'))},'keyContent':{'type':Sequelize[_0xe9bd('0x4')]},'idField':{'type':Sequelize[_0xe9bd('0x4')]},'nameField':{'type':Sequelize[_0xe9bd('0x4')]},'customField':{'type':Sequelize[_0xe9bd('0x6')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0xe9bd('0x4')]}};
\ No newline at end of file
+var _0xbdb7=['variable','customVariable','keyValue','STRING','BOOLEAN','sequelize','exports','ENUM','string'];(function(_0x311c35,_0x534915){var _0x5cc50c=function(_0x3ad680){while(--_0x3ad680){_0x311c35['push'](_0x311c35['shift']());}};_0x5cc50c(++_0x534915);}(_0xbdb7,0x12e));var _0x7bdb=function(_0x272fed,_0x243d67){_0x272fed=_0x272fed-0x0;var _0x2f7ead=_0xbdb7[_0x272fed];return _0x2f7ead;};'use strict';var Sequelize=require(_0x7bdb('0x0'));module[_0x7bdb('0x1')]={'type':{'type':Sequelize[_0x7bdb('0x2')](_0x7bdb('0x3'),_0x7bdb('0x4'),_0x7bdb('0x5'),_0x7bdb('0x6')),'defaultValue':_0x7bdb('0x3')},'content':{'type':Sequelize[_0x7bdb('0x7')]},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0x7bdb('0x2')]('string','variable',_0x7bdb('0x5'))},'keyContent':{'type':Sequelize[_0x7bdb('0x7')]},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize[_0x7bdb('0x8')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x7bdb('0x7')]}};
\ No newline at end of file
index 6df191d..7aa03fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdb94=['nolimit','offset','order','sort','pick','filter','where','merge','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','params','find','catch','create','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','path','ejs','squel','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','end','status','json','count','limit','set','Content-Range','apply','save','update','then','destroy','sendStatus','error','stack','name','send','index','VtigerField','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length'];(function(_0x48d824,_0x1bd0ee){var _0x513b57=function(_0x5261c8){while(--_0x5261c8){_0x48d824['push'](_0x48d824['shift']());}};_0x513b57(++_0x1bd0ee);}(_0xdb94,0xab));var _0x4db9=function(_0x4bb83f,_0xb45ade){_0x4bb83f=_0x4bb83f-0x0;var _0x1787c4=_0xdb94[_0x4bb83f];return _0x1787c4;};'use strict';var pdf=require(_0x4db9('0x0'));var emlformat=require(_0x4db9('0x1'));var rimraf=require(_0x4db9('0x2'));var zipdir=require(_0x4db9('0x3'));var jsonpatch=require(_0x4db9('0x4'));var rp=require('request-promise');var moment=require(_0x4db9('0x5'));var BPromise=require(_0x4db9('0x6'));var Mustache=require('mustache');var util=require('util');var path=require(_0x4db9('0x7'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x4db9('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x4db9('0x9'));var crypto=require('crypto');var jsforce=require(_0x4db9('0xa'));var deskjs=require(_0x4db9('0xb'));var toCsv=require(_0x4db9('0xc'));var querystring=require(_0x4db9('0xd'));var Papa=require(_0x4db9('0xe'));var Redis=require(_0x4db9('0xf'));var authService=require(_0x4db9('0x10'));var qs=require(_0x4db9('0x11'));var hardwareService=require(_0x4db9('0x12'));var logger=require(_0x4db9('0x13'))(_0x4db9('0x14'));var utils=require('../../config/utils');var config=require(_0x4db9('0x15'));var db=require(_0x4db9('0x16'))['db'];function respondWithStatusCode(_0x58a64b,_0x496645){_0x496645=_0x496645||0xcc;return function(_0x31222b){if(_0x31222b){return _0x58a64b['sendStatus'](_0x496645);}return _0x58a64b['status'](_0x496645)[_0x4db9('0x17')]();};}function respondWithResult(_0x3ff3d3,_0x569873){_0x569873=_0x569873||0xc8;return function(_0xd37d63){if(_0xd37d63){return _0x3ff3d3[_0x4db9('0x18')](_0x569873)[_0x4db9('0x19')](_0xd37d63);}};}function respondWithFilteredResult(_0x22667c,_0x51d024){return function(_0x5e04ab){if(_0x5e04ab){var _0x102274=_0x5e04ab[_0x4db9('0x1a')],_0x34de1a=_0x51d024['offset'],_0x4a037f=_0x51d024['offset']+_0x51d024[_0x4db9('0x1b')],_0xadc104;if(_0x4a037f>=_0x102274){_0x4a037f=_0x102274;_0xadc104=0xc8;}else{_0xadc104=0xce;}_0x22667c[_0x4db9('0x18')](_0xadc104);return _0x22667c[_0x4db9('0x1c')](_0x4db9('0x1d'),_0x34de1a+'-'+_0x4a037f+'/'+_0x102274)[_0x4db9('0x19')](_0x5e04ab);}return null;};}function patchUpdates(_0x55494a){return function(_0x3b1f87){try{jsonpatch[_0x4db9('0x1e')](_0x3b1f87,_0x55494a,!![]);}catch(_0x11012e){return BPromise['reject'](_0x11012e);}return _0x3b1f87[_0x4db9('0x1f')]();};}function saveUpdates(_0x36b5a3,_0x1fd635){return function(_0x4c92e8){if(_0x4c92e8){return _0x4c92e8[_0x4db9('0x20')](_0x36b5a3)[_0x4db9('0x21')](function(_0x4553c2){return _0x4553c2;});}return null;};}function removeEntity(_0x46fc3d,_0xf4f3fe){return function(_0x159d9b){if(_0x159d9b){return _0x159d9b[_0x4db9('0x22')]()['then'](function(){_0x46fc3d[_0x4db9('0x18')](0xcc)[_0x4db9('0x17')]();});}};}function handleEntityNotFound(_0xcde40c,_0x319475){return function(_0x4aaa84){if(!_0x4aaa84){_0xcde40c[_0x4db9('0x23')](0x194);}return _0x4aaa84;};}function handleError(_0xdac966,_0x5cbd3f){_0x5cbd3f=_0x5cbd3f||0x1f4;return function(_0x2e97ab){logger[_0x4db9('0x24')](_0x2e97ab[_0x4db9('0x25')]);if(_0x2e97ab['name']){delete _0x2e97ab[_0x4db9('0x26')];}_0xdac966[_0x4db9('0x18')](_0x5cbd3f)[_0x4db9('0x27')](_0x2e97ab);};}exports[_0x4db9('0x28')]=function(_0x3f9f7e,_0x385e22){var _0x385400={},_0x2a56b8={},_0x3d0f12={'count':0x0,'rows':[]};var _0x400ee5=db[_0x4db9('0x29')][_0x4db9('0x2a')];_0x2a56b8[_0x4db9('0x2b')]=_[_0x4db9('0x2c')](_0x400ee5);_0x2a56b8['query']=_['keys'](_0x3f9f7e[_0x4db9('0x2d')]);_0x2a56b8[_0x4db9('0x2e')]=_[_0x4db9('0x2f')](_0x2a56b8[_0x4db9('0x2b')],_0x2a56b8[_0x4db9('0x2d')]);_0x385400[_0x4db9('0x30')]=_['intersection'](_0x2a56b8[_0x4db9('0x2b')],qs['fields'](_0x3f9f7e[_0x4db9('0x2d')][_0x4db9('0x31')]));_0x385400[_0x4db9('0x30')]=_0x385400[_0x4db9('0x30')][_0x4db9('0x32')]?_0x385400['attributes']:_0x2a56b8['model'];if(!_0x3f9f7e[_0x4db9('0x2d')]['hasOwnProperty'](_0x4db9('0x33'))){_0x385400[_0x4db9('0x1b')]=qs['limit'](_0x3f9f7e[_0x4db9('0x2d')][_0x4db9('0x1b')]);_0x385400[_0x4db9('0x34')]=qs['offset'](_0x3f9f7e[_0x4db9('0x2d')]['offset']);}_0x385400[_0x4db9('0x35')]=qs[_0x4db9('0x36')](_0x3f9f7e[_0x4db9('0x2d')]['sort']);_0x385400['where']=qs[_0x4db9('0x2e')](_[_0x4db9('0x37')](_0x3f9f7e[_0x4db9('0x2d')],_0x2a56b8[_0x4db9('0x2e')]));if(_0x3f9f7e[_0x4db9('0x2d')][_0x4db9('0x38')]){_0x385400[_0x4db9('0x39')]=_[_0x4db9('0x3a')](_0x385400[_0x4db9('0x39')],{'$or':_['map'](_0x400ee5,function(_0x17b506){if(_0x17b506[_0x4db9('0x3b')][_0x4db9('0x3c')]!==_0x4db9('0x3d')){var _0x490f73={};_0x490f73[_0x17b506[_0x4db9('0x3e')]]={'$like':'%'+_0x3f9f7e[_0x4db9('0x2d')][_0x4db9('0x38')]+'%'};return _0x490f73;}})});}_0x385400=_['merge']({},_0x385400,_0x3f9f7e[_0x4db9('0x3f')]);var _0xaf5f09={'where':_0x385400[_0x4db9('0x39')]};return db[_0x4db9('0x29')]['count'](_0xaf5f09)['then'](function(_0x41da52){_0x3d0f12[_0x4db9('0x1a')]=_0x41da52;if(_0x3f9f7e[_0x4db9('0x2d')][_0x4db9('0x40')]){_0x385400[_0x4db9('0x41')]=[{'all':!![]}];}return db['VtigerField'][_0x4db9('0x42')](_0x385400);})[_0x4db9('0x21')](function(_0x23affc){_0x3d0f12[_0x4db9('0x43')]=_0x23affc;return _0x3d0f12;})[_0x4db9('0x21')](respondWithFilteredResult(_0x385e22,_0x385400))['catch'](handleError(_0x385e22,null));};exports[_0x4db9('0x44')]=function(_0x324765,_0x38a727){var _0x5aeb37={'raw':!![],'where':{'id':_0x324765[_0x4db9('0x45')]['id']}},_0x37358f={};_0x37358f[_0x4db9('0x2b')]=_[_0x4db9('0x2c')](db[_0x4db9('0x29')][_0x4db9('0x2a')]);_0x37358f[_0x4db9('0x2d')]=_[_0x4db9('0x2c')](_0x324765[_0x4db9('0x2d')]);_0x37358f[_0x4db9('0x2e')]=_['intersection'](_0x37358f['model'],_0x37358f['query']);_0x5aeb37[_0x4db9('0x30')]=_[_0x4db9('0x2f')](_0x37358f['model'],qs[_0x4db9('0x31')](_0x324765[_0x4db9('0x2d')]['fields']));_0x5aeb37['attributes']=_0x5aeb37[_0x4db9('0x30')]['length']?_0x5aeb37[_0x4db9('0x30')]:_0x37358f[_0x4db9('0x2b')];if(_0x324765['query'][_0x4db9('0x40')]){_0x5aeb37[_0x4db9('0x41')]=[{'all':!![]}];}_0x5aeb37=_['merge']({},_0x5aeb37,_0x324765[_0x4db9('0x3f')]);return db[_0x4db9('0x29')][_0x4db9('0x46')](_0x5aeb37)['then'](handleEntityNotFound(_0x38a727,null))['then'](respondWithResult(_0x38a727,null))[_0x4db9('0x47')](handleError(_0x38a727,null));};exports[_0x4db9('0x48')]=function(_0x719001,_0x41d0dd){return db[_0x4db9('0x29')][_0x4db9('0x48')](_0x719001[_0x4db9('0x49')],{})[_0x4db9('0x21')](respondWithResult(_0x41d0dd,0xc9))[_0x4db9('0x47')](handleError(_0x41d0dd,null));};exports[_0x4db9('0x20')]=function(_0x1159b3,_0x9fec71){if(_0x1159b3[_0x4db9('0x49')]['id']){delete _0x1159b3['body']['id'];}return db[_0x4db9('0x29')][_0x4db9('0x46')]({'where':{'id':_0x1159b3[_0x4db9('0x45')]['id']}})[_0x4db9('0x21')](handleEntityNotFound(_0x9fec71,null))[_0x4db9('0x21')](saveUpdates(_0x1159b3[_0x4db9('0x49')],null))[_0x4db9('0x21')](respondWithResult(_0x9fec71,null))[_0x4db9('0x47')](handleError(_0x9fec71,null));};exports[_0x4db9('0x22')]=function(_0x2d6094,_0x10dccb){return db['VtigerField']['find']({'where':{'id':_0x2d6094[_0x4db9('0x45')]['id']}})[_0x4db9('0x21')](handleEntityNotFound(_0x10dccb,null))[_0x4db9('0x21')](removeEntity(_0x10dccb,null))[_0x4db9('0x47')](handleError(_0x10dccb,null));};
\ No newline at end of file
+var _0x6324=['name','send','index','VtigerField','rawAttributes','model','keys','query','filters','intersection','fields','attributes','nolimit','order','sort','where','filter','map','type','key','field','includeAll','include','findAll','rows','show','length','merge','options','find','create','body','catch','params','html-pdf','eml-format','rimraf','zip-dir','request-promise','bluebird','util','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','set','reject','save','update','then','destroy','sendStatus','error','stack'];(function(_0xf22dce,_0x46f799){var _0x55c4ba=function(_0xc09efa){while(--_0xc09efa){_0xf22dce['push'](_0xf22dce['shift']());}};_0x55c4ba(++_0x46f799);}(_0x6324,0x142));var _0x4632=function(_0x5d1df9,_0x4a95bf){_0x5d1df9=_0x5d1df9-0x0;var _0x5d4feb=_0x6324[_0x5d1df9];return _0x5d4feb;};'use strict';var pdf=require(_0x4632('0x0'));var emlformat=require(_0x4632('0x1'));var rimraf=require(_0x4632('0x2'));var zipdir=require(_0x4632('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x4632('0x4'));var moment=require('moment');var BPromise=require(_0x4632('0x5'));var Mustache=require('mustache');var util=require(_0x4632('0x6'));var path=require('path');var sox=require(_0x4632('0x7'));var csv=require(_0x4632('0x8'));var ejs=require(_0x4632('0x9'));var fs=require('fs');var _=require(_0x4632('0xa'));var squel=require('squel');var crypto=require(_0x4632('0xb'));var jsforce=require(_0x4632('0xc'));var deskjs=require(_0x4632('0xd'));var toCsv=require('to-csv');var querystring=require(_0x4632('0xe'));var Papa=require(_0x4632('0xf'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x4632('0x10'));var hardwareService=require(_0x4632('0x11'));var logger=require(_0x4632('0x12'))(_0x4632('0x13'));var utils=require(_0x4632('0x14'));var config=require(_0x4632('0x15'));var db=require(_0x4632('0x16'))['db'];function respondWithStatusCode(_0x17f9d1,_0x4a4cdd){_0x4a4cdd=_0x4a4cdd||0xcc;return function(_0x2b3f0f){if(_0x2b3f0f){return _0x17f9d1['sendStatus'](_0x4a4cdd);}return _0x17f9d1[_0x4632('0x17')](_0x4a4cdd)[_0x4632('0x18')]();};}function respondWithResult(_0x3ef228,_0x2dce9f){_0x2dce9f=_0x2dce9f||0xc8;return function(_0x51ee37){if(_0x51ee37){return _0x3ef228[_0x4632('0x17')](_0x2dce9f)[_0x4632('0x19')](_0x51ee37);}};}function respondWithFilteredResult(_0x3b9901,_0x37d798){return function(_0x1c1be0){if(_0x1c1be0){var _0x5438ab=_0x1c1be0[_0x4632('0x1a')],_0x47b349=_0x37d798[_0x4632('0x1b')],_0x2fd7ae=_0x37d798['offset']+_0x37d798[_0x4632('0x1c')],_0x38bedd;if(_0x2fd7ae>=_0x5438ab){_0x2fd7ae=_0x5438ab;_0x38bedd=0xc8;}else{_0x38bedd=0xce;}_0x3b9901[_0x4632('0x17')](_0x38bedd);return _0x3b9901[_0x4632('0x1d')]('Content-Range',_0x47b349+'-'+_0x2fd7ae+'/'+_0x5438ab)[_0x4632('0x19')](_0x1c1be0);}return null;};}function patchUpdates(_0x1894bb){return function(_0x58e193){try{jsonpatch['apply'](_0x58e193,_0x1894bb,!![]);}catch(_0x1c0523){return BPromise[_0x4632('0x1e')](_0x1c0523);}return _0x58e193[_0x4632('0x1f')]();};}function saveUpdates(_0x3e3766,_0x2d63b1){return function(_0x3d2d23){if(_0x3d2d23){return _0x3d2d23[_0x4632('0x20')](_0x3e3766)[_0x4632('0x21')](function(_0x29f875){return _0x29f875;});}return null;};}function removeEntity(_0x3ea0d1,_0x414aa9){return function(_0x2d656a){if(_0x2d656a){return _0x2d656a[_0x4632('0x22')]()[_0x4632('0x21')](function(){_0x3ea0d1[_0x4632('0x17')](0xcc)[_0x4632('0x18')]();});}};}function handleEntityNotFound(_0x4264d5,_0x3537ed){return function(_0x380a9f){if(!_0x380a9f){_0x4264d5[_0x4632('0x23')](0x194);}return _0x380a9f;};}function handleError(_0x38cbbc,_0x4455ef){_0x4455ef=_0x4455ef||0x1f4;return function(_0x3b0823){logger[_0x4632('0x24')](_0x3b0823[_0x4632('0x25')]);if(_0x3b0823[_0x4632('0x26')]){delete _0x3b0823[_0x4632('0x26')];}_0x38cbbc[_0x4632('0x17')](_0x4455ef)[_0x4632('0x27')](_0x3b0823);};}exports[_0x4632('0x28')]=function(_0x22d0f5,_0x2a0b11){var _0x438354={},_0x4d9098={},_0x57798a={'count':0x0,'rows':[]};var _0x466126=db[_0x4632('0x29')][_0x4632('0x2a')];_0x4d9098[_0x4632('0x2b')]=_[_0x4632('0x2c')](_0x466126);_0x4d9098[_0x4632('0x2d')]=_[_0x4632('0x2c')](_0x22d0f5['query']);_0x4d9098[_0x4632('0x2e')]=_[_0x4632('0x2f')](_0x4d9098['model'],_0x4d9098[_0x4632('0x2d')]);_0x438354['attributes']=_[_0x4632('0x2f')](_0x4d9098['model'],qs['fields'](_0x22d0f5[_0x4632('0x2d')][_0x4632('0x30')]));_0x438354[_0x4632('0x31')]=_0x438354['attributes']['length']?_0x438354[_0x4632('0x31')]:_0x4d9098[_0x4632('0x2b')];if(!_0x22d0f5['query']['hasOwnProperty'](_0x4632('0x32'))){_0x438354[_0x4632('0x1c')]=qs['limit'](_0x22d0f5[_0x4632('0x2d')][_0x4632('0x1c')]);_0x438354[_0x4632('0x1b')]=qs[_0x4632('0x1b')](_0x22d0f5[_0x4632('0x2d')]['offset']);}_0x438354[_0x4632('0x33')]=qs[_0x4632('0x34')](_0x22d0f5['query']['sort']);_0x438354[_0x4632('0x35')]=qs['filters'](_['pick'](_0x22d0f5[_0x4632('0x2d')],_0x4d9098['filters']));if(_0x22d0f5[_0x4632('0x2d')][_0x4632('0x36')]){_0x438354[_0x4632('0x35')]=_['merge'](_0x438354[_0x4632('0x35')],{'$or':_[_0x4632('0x37')](_0x466126,function(_0x39305a){if(_0x39305a[_0x4632('0x38')][_0x4632('0x39')]!=='VIRTUAL'){var _0x486f6c={};_0x486f6c[_0x39305a[_0x4632('0x3a')]]={'$like':'%'+_0x22d0f5[_0x4632('0x2d')][_0x4632('0x36')]+'%'};return _0x486f6c;}})});}_0x438354=_['merge']({},_0x438354,_0x22d0f5['options']);var _0x53b436={'where':_0x438354[_0x4632('0x35')]};return db[_0x4632('0x29')]['count'](_0x53b436)[_0x4632('0x21')](function(_0x20a700){_0x57798a[_0x4632('0x1a')]=_0x20a700;if(_0x22d0f5[_0x4632('0x2d')][_0x4632('0x3b')]){_0x438354[_0x4632('0x3c')]=[{'all':!![]}];}return db[_0x4632('0x29')][_0x4632('0x3d')](_0x438354);})[_0x4632('0x21')](function(_0x2c04a8){_0x57798a[_0x4632('0x3e')]=_0x2c04a8;return _0x57798a;})[_0x4632('0x21')](respondWithFilteredResult(_0x2a0b11,_0x438354))['catch'](handleError(_0x2a0b11,null));};exports[_0x4632('0x3f')]=function(_0x45bff6,_0x4c0e13){var _0x19fdd0={'raw':!![],'where':{'id':_0x45bff6['params']['id']}},_0x1c39bc={};_0x1c39bc[_0x4632('0x2b')]=_['keys'](db[_0x4632('0x29')][_0x4632('0x2a')]);_0x1c39bc[_0x4632('0x2d')]=_[_0x4632('0x2c')](_0x45bff6['query']);_0x1c39bc[_0x4632('0x2e')]=_[_0x4632('0x2f')](_0x1c39bc[_0x4632('0x2b')],_0x1c39bc[_0x4632('0x2d')]);_0x19fdd0['attributes']=_['intersection'](_0x1c39bc[_0x4632('0x2b')],qs[_0x4632('0x30')](_0x45bff6[_0x4632('0x2d')]['fields']));_0x19fdd0[_0x4632('0x31')]=_0x19fdd0[_0x4632('0x31')][_0x4632('0x40')]?_0x19fdd0[_0x4632('0x31')]:_0x1c39bc[_0x4632('0x2b')];if(_0x45bff6[_0x4632('0x2d')][_0x4632('0x3b')]){_0x19fdd0['include']=[{'all':!![]}];}_0x19fdd0=_[_0x4632('0x41')]({},_0x19fdd0,_0x45bff6[_0x4632('0x42')]);return db[_0x4632('0x29')][_0x4632('0x43')](_0x19fdd0)[_0x4632('0x21')](handleEntityNotFound(_0x4c0e13,null))['then'](respondWithResult(_0x4c0e13,null))['catch'](handleError(_0x4c0e13,null));};exports[_0x4632('0x44')]=function(_0x3a1d52,_0x23b0df){return db[_0x4632('0x29')]['create'](_0x3a1d52[_0x4632('0x45')],{})[_0x4632('0x21')](respondWithResult(_0x23b0df,0xc9))[_0x4632('0x46')](handleError(_0x23b0df,null));};exports[_0x4632('0x20')]=function(_0x3afe87,_0x59e7b0){if(_0x3afe87[_0x4632('0x45')]['id']){delete _0x3afe87[_0x4632('0x45')]['id'];}return db[_0x4632('0x29')][_0x4632('0x43')]({'where':{'id':_0x3afe87[_0x4632('0x47')]['id']}})[_0x4632('0x21')](handleEntityNotFound(_0x59e7b0,null))[_0x4632('0x21')](saveUpdates(_0x3afe87[_0x4632('0x45')],null))[_0x4632('0x21')](respondWithResult(_0x59e7b0,null))[_0x4632('0x46')](handleError(_0x59e7b0,null));};exports[_0x4632('0x22')]=function(_0x517584,_0xc3ffd0){return db[_0x4632('0x29')][_0x4632('0x43')]({'where':{'id':_0x517584['params']['id']}})[_0x4632('0x21')](handleEntityNotFound(_0xc3ffd0,null))[_0x4632('0x21')](removeEntity(_0xc3ffd0,null))[_0x4632('0x46')](handleError(_0xc3ffd0,null));};
\ No newline at end of file
index 58a5117..0359c02 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6584=['lodash','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','exports','define','vtiger_unique_index','idField','FieldId'];(function(_0x586382,_0x37adee){var _0x1532f9=function(_0x3b8c4a){while(--_0x3b8c4a){_0x586382['push'](_0x586382['shift']());}};_0x1532f9(++_0x37adee);}(_0x6584,0x9c));var _0x4658=function(_0x8de54f,_0x271987){_0x8de54f=_0x8de54f-0x0;var _0x14cba4=_0x6584[_0x8de54f];return _0x14cba4;};'use strict';var _=require(_0x4658('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x4658('0x1'));var moment=require(_0x4658('0x2'));var BPromise=require(_0x4658('0x3'));var rp=require(_0x4658('0x4'));var fs=require('fs');var path=require(_0x4658('0x5'));var rimraf=require(_0x4658('0x6'));var config=require(_0x4658('0x7'));var attributes=require('./intVtigerField.attributes');module[_0x4658('0x8')]=function(_0xb46ffa,_0x434c68){return _0xb46ffa[_0x4658('0x9')]('VtigerField',attributes,{'tableName':'int_vtiger_fields','paranoid':![],'indexes':[{'name':_0x4658('0xa'),'fields':[_0x4658('0xb'),_0x4658('0xc')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x9a57=['vtiger_unique_index','idField','FieldId','lodash','../../config/logger','bluebird','request-promise','path','../../config/environment','./intVtigerField.attributes','exports','VtigerField','int_vtiger_fields'];(function(_0x48fb93,_0xbf2078){var _0x36033b=function(_0x51d5ed){while(--_0x51d5ed){_0x48fb93['push'](_0x48fb93['shift']());}};_0x36033b(++_0xbf2078);}(_0x9a57,0x1a3));var _0x79a5=function(_0xa3463d,_0x32f8da){_0xa3463d=_0xa3463d-0x0;var _0x50fd67=_0x9a57[_0xa3463d];return _0x50fd67;};'use strict';var _=require(_0x79a5('0x0'));var util=require('util');var logger=require(_0x79a5('0x1'))('api');var moment=require('moment');var BPromise=require(_0x79a5('0x2'));var rp=require(_0x79a5('0x3'));var fs=require('fs');var path=require(_0x79a5('0x4'));var rimraf=require('rimraf');var config=require(_0x79a5('0x5'));var attributes=require(_0x79a5('0x6'));module[_0x79a5('0x7')]=function(_0x5dc12d,_0x3aac7c){return _0x5dc12d['define'](_0x79a5('0x8'),attributes,{'tableName':_0x79a5('0x9'),'paranoid':![],'indexes':[{'name':_0x79a5('0xa'),'fields':[_0x79a5('0xb'),_0x79a5('0xc')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index cb4bd75..952905e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7d4f=['error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','request','info','VtigerField,\x20%s,\x20%s','VtigerField,\x20%s,\x20%s,\x20%s','request\x20sent','stringify'];(function(_0x4463f9,_0x5f183f){var _0x45037c=function(_0x53defd){while(--_0x53defd){_0x4463f9['push'](_0x4463f9['shift']());}};_0x45037c(++_0x5f183f);}(_0x7d4f,0xbd));var _0xf7d4=function(_0x41393a,_0xb93e63){_0x41393a=_0x41393a-0x0;var _0x9d51cd=_0x7d4f[_0x41393a];return _0x9d51cd;};'use strict';var _=require(_0xf7d4('0x0'));var util=require(_0xf7d4('0x1'));var moment=require(_0xf7d4('0x2'));var BPromise=require(_0xf7d4('0x3'));var rs=require(_0xf7d4('0x4'));var fs=require('fs');var Redis=require(_0xf7d4('0x5'));var db=require(_0xf7d4('0x6'))['db'];var utils=require(_0xf7d4('0x7'));var logger=require(_0xf7d4('0x8'))(_0xf7d4('0x9'));var config=require(_0xf7d4('0xa'));var jayson=require(_0xf7d4('0xb'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x3ae717,_0x485de8,_0x213488){return new BPromise(function(_0x355bed,_0x5cf8d6){return client[_0xf7d4('0xc')](_0x3ae717,_0x213488)['then'](function(_0x15bd31){logger[_0xf7d4('0xd')](_0xf7d4('0xe'),_0x485de8,'request\x20sent');logger['debug'](_0xf7d4('0xf'),_0x485de8,_0xf7d4('0x10'),JSON[_0xf7d4('0x11')](_0x15bd31));if(_0x15bd31[_0xf7d4('0x12')]){if(_0x15bd31['error'][_0xf7d4('0x13')]===0x1f4){logger['error'](_0xf7d4('0xe'),_0x485de8,_0x15bd31[_0xf7d4('0x12')][_0xf7d4('0x14')]);return _0x5cf8d6(_0x15bd31[_0xf7d4('0x12')][_0xf7d4('0x14')]);}logger['error']('VtigerField,\x20%s,\x20%s',_0x485de8,_0x15bd31[_0xf7d4('0x12')][_0xf7d4('0x14')]);return _0x355bed(_0x15bd31['error'][_0xf7d4('0x14')]);}else{logger[_0xf7d4('0xd')]('VtigerField,\x20%s,\x20%s',_0x485de8,_0xf7d4('0x10'));_0x355bed(_0x15bd31[_0xf7d4('0x15')][_0xf7d4('0x14')]);}})[_0xf7d4('0x16')](function(_0x303552){logger[_0xf7d4('0x12')](_0xf7d4('0xe'),_0x485de8,_0x303552);_0x5cf8d6(_0x303552);});});}
\ No newline at end of file
+var _0x7342=['result','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','VtigerField,\x20%s,\x20%s','VtigerField,\x20%s,\x20%s,\x20%s','error','code','message','request\x20sent'];(function(_0x5a32c7,_0x3d43fe){var _0x296b98=function(_0x6f637e){while(--_0x6f637e){_0x5a32c7['push'](_0x5a32c7['shift']());}};_0x296b98(++_0x3d43fe);}(_0x7342,0xa3));var _0x2734=function(_0x59bc36,_0x12aae8){_0x59bc36=_0x59bc36-0x0;var _0x1f27ce=_0x7342[_0x59bc36];return _0x1f27ce;};'use strict';var _=require(_0x2734('0x0'));var util=require(_0x2734('0x1'));var moment=require('moment');var BPromise=require(_0x2734('0x2'));var rs=require(_0x2734('0x3'));var fs=require('fs');var Redis=require(_0x2734('0x4'));var db=require(_0x2734('0x5'))['db'];var utils=require(_0x2734('0x6'));var logger=require(_0x2734('0x7'))('rpc');var config=require(_0x2734('0x8'));var jayson=require(_0x2734('0x9'));var client=jayson[_0x2734('0xa')][_0x2734('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x494e78,_0x5b273a,_0x229784){return new BPromise(function(_0x3c3d11,_0x265491){return client[_0x2734('0xc')](_0x494e78,_0x229784)[_0x2734('0xd')](function(_0x248379){logger[_0x2734('0xe')](_0x2734('0xf'),_0x5b273a,'request\x20sent');logger['debug'](_0x2734('0x10'),_0x5b273a,'request\x20sent',JSON['stringify'](_0x248379));if(_0x248379[_0x2734('0x11')]){if(_0x248379[_0x2734('0x11')][_0x2734('0x12')]===0x1f4){logger[_0x2734('0x11')](_0x2734('0xf'),_0x5b273a,_0x248379[_0x2734('0x11')]['message']);return _0x265491(_0x248379[_0x2734('0x11')]['message']);}logger[_0x2734('0x11')](_0x2734('0xf'),_0x5b273a,_0x248379['error'][_0x2734('0x13')]);return _0x3c3d11(_0x248379['error'][_0x2734('0x13')]);}else{logger[_0x2734('0xe')](_0x2734('0xf'),_0x5b273a,_0x2734('0x14'));_0x3c3d11(_0x248379[_0x2734('0x15')][_0x2734('0x13')]);}})[_0x2734('0x16')](function(_0x38413d){logger[_0x2734('0x11')](_0x2734('0xf'),_0x5b273a,_0x38413d);_0x265491(_0x38413d);});});}
\ No newline at end of file
index 7914d3e..3e825bc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9be2=['isAuthenticated','index','/:id','show','/:id/configurations','getConfigurations','/:id/fields','getFields','create','addConfiguration','put','update','delete','destroy','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./intZendeskAccount.controller','get'];(function(_0x14715e,_0x4f7c0a){var _0x32f5a2=function(_0x2a9604){while(--_0x2a9604){_0x14715e['push'](_0x14715e['shift']());}};_0x32f5a2(++_0x4f7c0a);}(_0x9be2,0x6e));var _0x29be=function(_0x1446b3,_0xe070dc){_0x1446b3=_0x1446b3-0x0;var _0x23a30f=_0x9be2[_0x1446b3];return _0x23a30f;};'use strict';var multer=require(_0x29be('0x0'));var util=require(_0x29be('0x1'));var path=require(_0x29be('0x2'));var timeout=require(_0x29be('0x3'));var express=require(_0x29be('0x4'));var router=express[_0x29be('0x5')]();var auth=require(_0x29be('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x29be('0x7'));var controller=require(_0x29be('0x8'));router[_0x29be('0x9')]('/',auth[_0x29be('0xa')](),controller[_0x29be('0xb')]);router[_0x29be('0x9')](_0x29be('0xc'),auth[_0x29be('0xa')](),controller[_0x29be('0xd')]);router[_0x29be('0x9')](_0x29be('0xe'),auth[_0x29be('0xa')](),controller[_0x29be('0xf')]);router[_0x29be('0x9')](_0x29be('0x10'),auth[_0x29be('0xa')](),controller[_0x29be('0x11')]);router['post']('/',auth[_0x29be('0xa')](),controller[_0x29be('0x12')]);router['post'](_0x29be('0xe'),auth['isAuthenticated'](),controller[_0x29be('0x13')]);router[_0x29be('0x14')](_0x29be('0xc'),auth[_0x29be('0xa')](),controller[_0x29be('0x15')]);router[_0x29be('0x16')]('/:id',auth[_0x29be('0xa')](),controller[_0x29be('0x17')]);module['exports']=router;
\ No newline at end of file
+var _0x14b8=['get','isAuthenticated','index','show','getConfigurations','/:id/fields','post','create','/:id/configurations','addConfiguration','put','/:id','update','delete','destroy','exports','util','path','connect-timeout','../../components/auth/service','../../components/interaction/service','./intZendeskAccount.controller'];(function(_0x1639de,_0x54d0c5){var _0x13d544=function(_0x45526d){while(--_0x45526d){_0x1639de['push'](_0x1639de['shift']());}};_0x13d544(++_0x54d0c5);}(_0x14b8,0xec));var _0x814b=function(_0x4066e7,_0x3315c5){_0x4066e7=_0x4066e7-0x0;var _0xe5a3ca=_0x14b8[_0x4066e7];return _0xe5a3ca;};'use strict';var multer=require('multer');var util=require(_0x814b('0x0'));var path=require(_0x814b('0x1'));var timeout=require(_0x814b('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x814b('0x3'));var interaction=require(_0x814b('0x4'));var config=require('../../config/environment');var controller=require(_0x814b('0x5'));router[_0x814b('0x6')]('/',auth[_0x814b('0x7')](),controller[_0x814b('0x8')]);router[_0x814b('0x6')]('/:id',auth[_0x814b('0x7')](),controller[_0x814b('0x9')]);router['get']('/:id/configurations',auth['isAuthenticated'](),controller[_0x814b('0xa')]);router[_0x814b('0x6')](_0x814b('0xb'),auth[_0x814b('0x7')](),controller['getFields']);router[_0x814b('0xc')]('/',auth[_0x814b('0x7')](),controller[_0x814b('0xd')]);router['post'](_0x814b('0xe'),auth[_0x814b('0x7')](),controller[_0x814b('0xf')]);router[_0x814b('0x10')](_0x814b('0x11'),auth[_0x814b('0x7')](),controller[_0x814b('0x12')]);router[_0x814b('0x13')](_0x814b('0x11'),auth[_0x814b('0x7')](),controller[_0x814b('0x14')]);module[_0x814b('0x15')]=router;
\ No newline at end of file
index 1afa0d4..bd9f636 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5943=['sequelize','exports','STRING','ENUM','password','token','integrationTab','newTab'];(function(_0x1acfad,_0x319877){var _0x2ca7d6=function(_0x66759a){while(--_0x66759a){_0x1acfad['push'](_0x1acfad['shift']());}};_0x2ca7d6(++_0x319877);}(_0x5943,0x168));var _0x3594=function(_0x1d30f9,_0x5b5cad){_0x1d30f9=_0x1d30f9-0x0;var _0x3e57e3=_0x5943[_0x1d30f9];return _0x3e57e3;};'use strict';var Sequelize=require(_0x3594('0x0'));module[_0x3594('0x1')]={'name':{'type':Sequelize[_0x3594('0x2')]},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0x3594('0x2')],'unique':'username'},'password':{'type':Sequelize[_0x3594('0x2')]},'token':{'type':Sequelize[_0x3594('0x2')]},'remoteUri':{'type':Sequelize[_0x3594('0x2')],'unique':'remoteUri'},'authType':{'type':Sequelize[_0x3594('0x3')](_0x3594('0x4'),_0x3594('0x5')),'defaultValue':_0x3594('0x4')},'serverUrl':{'type':Sequelize[_0x3594('0x2')]},'type':{'type':Sequelize[_0x3594('0x3')](_0x3594('0x6'),_0x3594('0x7')),'defaultValue':_0x3594('0x6')}};
\ No newline at end of file
+var _0x60ce=['sequelize','exports','STRING','username','password','ENUM','newTab','integrationTab'];(function(_0x56e4d7,_0x14407c){var _0x4641a9=function(_0x1b02e9){while(--_0x1b02e9){_0x56e4d7['push'](_0x56e4d7['shift']());}};_0x4641a9(++_0x14407c);}(_0x60ce,0x118));var _0xe60c=function(_0xbdde8a,_0x3b8784){_0xbdde8a=_0xbdde8a-0x0;var _0x1cc96f=_0x60ce[_0xbdde8a];return _0x1cc96f;};'use strict';var Sequelize=require(_0xe60c('0x0'));module[_0xe60c('0x1')]={'name':{'type':Sequelize[_0xe60c('0x2')]},'description':{'type':Sequelize[_0xe60c('0x2')]},'username':{'type':Sequelize[_0xe60c('0x2')],'unique':_0xe60c('0x3')},'password':{'type':Sequelize[_0xe60c('0x2')]},'token':{'type':Sequelize[_0xe60c('0x2')]},'remoteUri':{'type':Sequelize['STRING'],'unique':'remoteUri'},'authType':{'type':Sequelize['ENUM'](_0xe60c('0x4'),'token'),'defaultValue':_0xe60c('0x4')},'serverUrl':{'type':Sequelize[_0xe60c('0x2')]},'type':{'type':Sequelize[_0xe60c('0x5')]('integrationTab',_0xe60c('0x6')),'defaultValue':_0xe60c('0x7')}};
\ No newline at end of file
index a0ba6d7..d7317d0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x16dc=['getConfigurations','hasOwnProperty','nolimit','findOne','AccountId','Subjects','getSubjects','Descriptions','getDescriptions','channel','type','ZendeskConfiguration','ZendeskField','getFields','username','slice','substring','lastIndexOf','GET','format','%s/%s','authType','password','headers','Basic\x20%s','%s:%s','toString','base64','token','%s/token:%s','Sequelize','Unknown\x20authentication\x20type','description','remove','ticket_fields','includes','position','custom_field_options','statusCode','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','html-pdf','rimraf','zip-dir','request-promise','moment','util','to-csv','lodash','crypto','jsforce','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','ZendeskAccount,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','sendStatus','status','end','count','offset','limit','Content-Range','apply','update','stack','name','send','index','ZendeskAccount','rawAttributes','query','keys','intersection','model','attributes','fields','length','order','sort','pick','filters','filter','where','merge','key','field','options','includeAll','include','findAll','rows','show','params','create','body','find','destroy','map'];(function(_0x4544d3,_0x149a72){var _0x36aeca=function(_0x2b3fc8){while(--_0x2b3fc8){_0x4544d3['push'](_0x4544d3['shift']());}};_0x36aeca(++_0x149a72);}(_0x16dc,0xa1));var _0xc16d=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x16dc[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require(_0xc16d('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xc16d('0x1'));var zipdir=require(_0xc16d('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xc16d('0x3'));var moment=require(_0xc16d('0x4'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0xc16d('0x5'));var path=require('path');var sox=require('sox');var csv=require(_0xc16d('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xc16d('0x7'));var squel=require('squel');var crypto=require(_0xc16d('0x8'));var jsforce=require(_0xc16d('0x9'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xc16d('0xa'));var Papa=require('papaparse');var Redis=require(_0xc16d('0xb'));var authService=require(_0xc16d('0xc'));var qs=require(_0xc16d('0xd'));var hardwareService=require(_0xc16d('0xe'));var logger=require(_0xc16d('0xf'))(_0xc16d('0x10'));var utils=require(_0xc16d('0x11'));var config=require('../../config/environment');var db=require(_0xc16d('0x12'))['db'];var integrations=require(_0xc16d('0x13'));var jayson=require(_0xc16d('0x14'));var client=jayson[_0xc16d('0x15')]['http']({'port':0x232a});function checkPasswordPattern(_0x4fddee,_0x4e64b2,_0x449e62){if(_0x449e62){var _0x29731d=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x29731d[_0xc16d('0x16')](_0x4e64b2)){return _0x4fddee;}else{throw new Error(_0xc16d('0x17'));}}else{return _0x4fddee;}}function respondWithRpcPromise(_0x58f47f,_0xe97811,_0x7ab7ca,_0x4e1ea7){return new BPromise(function(_0x1f7410,_0x33ce65){var _0x1833c0=_0x4e1ea7||client;return _0x1833c0[_0xc16d('0x18')](_0x58f47f,_0x7ab7ca)[_0xc16d('0x19')](function(_0x20dfc2){logger[_0xc16d('0x1a')](_0xc16d('0x1b'),_0xe97811,_0xc16d('0x1c'));logger[_0xc16d('0x1d')]('ZendeskAccount,\x20%s,\x20%s,\x20%s',_0xe97811,'request\x20sent',JSON[_0xc16d('0x1e')](_0x20dfc2));if(_0x20dfc2[_0xc16d('0x1f')]){if(_0x20dfc2[_0xc16d('0x1f')][_0xc16d('0x20')]===0x1f4){logger[_0xc16d('0x1f')](_0xc16d('0x1b'),_0xe97811,_0x20dfc2['error'][_0xc16d('0x21')]);return _0x33ce65(_0x20dfc2[_0xc16d('0x1f')][_0xc16d('0x21')]);}logger[_0xc16d('0x1f')](_0xc16d('0x1b'),_0xe97811,_0x20dfc2[_0xc16d('0x1f')][_0xc16d('0x21')]);return _0x1f7410(_0x20dfc2['error']['message']);}else{logger[_0xc16d('0x1a')](_0xc16d('0x1b'),_0xe97811,_0xc16d('0x1c'));_0x1f7410(_0x20dfc2[_0xc16d('0x22')][_0xc16d('0x21')]);}})[_0xc16d('0x23')](function(_0x3de04d){logger[_0xc16d('0x1f')](_0xc16d('0x1b'),_0xe97811,_0x3de04d);_0x33ce65(_0x3de04d);});});}function respondWithStatusCode(_0x245d08,_0x185eef){_0x185eef=_0x185eef||0xcc;return function(_0x5c2024){if(_0x5c2024){return _0x245d08[_0xc16d('0x24')](_0x185eef);}return _0x245d08[_0xc16d('0x25')](_0x185eef)[_0xc16d('0x26')]();};}function respondWithResult(_0x1ca810,_0xe30d38){_0xe30d38=_0xe30d38||0xc8;return function(_0x5950e2){if(_0x5950e2){return _0x1ca810[_0xc16d('0x25')](_0xe30d38)['json'](_0x5950e2);}};}function respondWithFilteredResult(_0x53f7a1,_0x2e75ad){return function(_0x561a3a){if(_0x561a3a){var _0x161d16=_0x561a3a[_0xc16d('0x27')],_0x52d495=_0x2e75ad[_0xc16d('0x28')],_0x946cf0=_0x2e75ad[_0xc16d('0x28')]+_0x2e75ad[_0xc16d('0x29')],_0x443adc;if(_0x946cf0>=_0x161d16){_0x946cf0=_0x161d16;_0x443adc=0xc8;}else{_0x443adc=0xce;}_0x53f7a1[_0xc16d('0x25')](_0x443adc);return _0x53f7a1['set'](_0xc16d('0x2a'),_0x52d495+'-'+_0x946cf0+'/'+_0x161d16)['json'](_0x561a3a);}return null;};}function patchUpdates(_0x3f3935){return function(_0x48dc0b){try{jsonpatch[_0xc16d('0x2b')](_0x48dc0b,_0x3f3935,!![]);}catch(_0x454464){return BPromise['reject'](_0x454464);}return _0x48dc0b['save']();};}function saveUpdates(_0x2ecd6d,_0x1e0bd3){return function(_0x9f4ba1){if(_0x9f4ba1){return _0x9f4ba1[_0xc16d('0x2c')](_0x2ecd6d)[_0xc16d('0x19')](function(_0x266ae7){return _0x266ae7;});}return null;};}function removeEntity(_0x31d778,_0x22bf73){return function(_0x5bd813){if(_0x5bd813){return _0x5bd813['destroy']()[_0xc16d('0x19')](function(){_0x31d778[_0xc16d('0x25')](0xcc)[_0xc16d('0x26')]();});}};}function handleEntityNotFound(_0x56d928,_0x39f2c6){return function(_0x4b58bc){if(!_0x4b58bc){_0x56d928[_0xc16d('0x24')](0x194);}return _0x4b58bc;};}function handleError(_0x321e00,_0x595680){_0x595680=_0x595680||0x1f4;return function(_0x32778b){logger[_0xc16d('0x1f')](_0x32778b[_0xc16d('0x2d')]);if(_0x32778b['name']){delete _0x32778b[_0xc16d('0x2e')];}_0x321e00[_0xc16d('0x25')](_0x595680)[_0xc16d('0x2f')](_0x32778b);};}exports[_0xc16d('0x30')]=function(_0x454297,_0x13aad9){var _0x211bc3={},_0x524a58={},_0x9dbc5={'count':0x0,'rows':[]};var _0xb76db1=db[_0xc16d('0x31')][_0xc16d('0x32')];_0x524a58['model']=_['keys'](_0xb76db1);_0x524a58[_0xc16d('0x33')]=_[_0xc16d('0x34')](_0x454297[_0xc16d('0x33')]);_0x524a58['filters']=_[_0xc16d('0x35')](_0x524a58[_0xc16d('0x36')],_0x524a58[_0xc16d('0x33')]);_0x211bc3[_0xc16d('0x37')]=_[_0xc16d('0x35')](_0x524a58[_0xc16d('0x36')],qs[_0xc16d('0x38')](_0x454297[_0xc16d('0x33')][_0xc16d('0x38')]));_0x211bc3[_0xc16d('0x37')]=_0x211bc3['attributes'][_0xc16d('0x39')]?_0x211bc3[_0xc16d('0x37')]:_0x524a58[_0xc16d('0x36')];if(!_0x454297[_0xc16d('0x33')]['hasOwnProperty']('nolimit')){_0x211bc3[_0xc16d('0x29')]=qs[_0xc16d('0x29')](_0x454297[_0xc16d('0x33')][_0xc16d('0x29')]);_0x211bc3['offset']=qs['offset'](_0x454297[_0xc16d('0x33')][_0xc16d('0x28')]);}_0x211bc3[_0xc16d('0x3a')]=qs[_0xc16d('0x3b')](_0x454297[_0xc16d('0x33')]['sort']);_0x211bc3['where']=qs['filters'](_[_0xc16d('0x3c')](_0x454297[_0xc16d('0x33')],_0x524a58[_0xc16d('0x3d')]));if(_0x454297[_0xc16d('0x33')][_0xc16d('0x3e')]){_0x211bc3[_0xc16d('0x3f')]=_[_0xc16d('0x40')](_0x211bc3[_0xc16d('0x3f')],{'$or':_['map'](_0xb76db1,function(_0x37cc67){if(_0x37cc67['type'][_0xc16d('0x41')]!=='VIRTUAL'){var _0x357c7c={};_0x357c7c[_0x37cc67[_0xc16d('0x42')]]={'$like':'%'+_0x454297['query'][_0xc16d('0x3e')]+'%'};return _0x357c7c;}})});}_0x211bc3=_[_0xc16d('0x40')]({},_0x211bc3,_0x454297[_0xc16d('0x43')]);var _0x3184ae={'where':_0x211bc3['where']};return db[_0xc16d('0x31')][_0xc16d('0x27')](_0x3184ae)['then'](function(_0x3b0489){_0x9dbc5['count']=_0x3b0489;if(_0x454297[_0xc16d('0x33')][_0xc16d('0x44')]){_0x211bc3[_0xc16d('0x45')]=[{'all':!![]}];}return db[_0xc16d('0x31')][_0xc16d('0x46')](_0x211bc3);})['then'](function(_0x59906d){_0x9dbc5[_0xc16d('0x47')]=_0x59906d;return _0x9dbc5;})['then'](respondWithFilteredResult(_0x13aad9,_0x211bc3))[_0xc16d('0x23')](handleError(_0x13aad9,null));};exports[_0xc16d('0x48')]=function(_0x21273a,_0x306657){var _0x5d1dc0={'raw':![],'where':{'id':_0x21273a[_0xc16d('0x49')]['id']}},_0x18d809={};_0x18d809[_0xc16d('0x36')]=_[_0xc16d('0x34')](db[_0xc16d('0x31')][_0xc16d('0x32')]);_0x18d809['query']=_[_0xc16d('0x34')](_0x21273a[_0xc16d('0x33')]);_0x18d809[_0xc16d('0x3d')]=_['intersection'](_0x18d809['model'],_0x18d809['query']);_0x5d1dc0[_0xc16d('0x37')]=_[_0xc16d('0x35')](_0x18d809[_0xc16d('0x36')],qs[_0xc16d('0x38')](_0x21273a[_0xc16d('0x33')][_0xc16d('0x38')]));_0x5d1dc0[_0xc16d('0x37')]=_0x5d1dc0[_0xc16d('0x37')]['length']?_0x5d1dc0[_0xc16d('0x37')]:_0x18d809[_0xc16d('0x36')];if(_0x21273a[_0xc16d('0x33')][_0xc16d('0x44')]){_0x5d1dc0[_0xc16d('0x45')]=[{'all':!![]}];}_0x5d1dc0=_[_0xc16d('0x40')]({},_0x5d1dc0,_0x21273a[_0xc16d('0x43')]);return db['ZendeskAccount']['find'](_0x5d1dc0)[_0xc16d('0x19')](handleEntityNotFound(_0x306657,null))[_0xc16d('0x19')](respondWithResult(_0x306657,null))[_0xc16d('0x23')](handleError(_0x306657,null));};exports['create']=function(_0x370c03,_0x39dfeb){return db[_0xc16d('0x31')][_0xc16d('0x4a')](_0x370c03[_0xc16d('0x4b')],{})[_0xc16d('0x19')](respondWithResult(_0x39dfeb,0xc9))[_0xc16d('0x23')](handleError(_0x39dfeb,null));};exports[_0xc16d('0x2c')]=function(_0x4d0881,_0x249348){if(_0x4d0881['body']['id']){delete _0x4d0881[_0xc16d('0x4b')]['id'];}return db[_0xc16d('0x31')][_0xc16d('0x4c')]({'where':{'id':_0x4d0881[_0xc16d('0x49')]['id']}})[_0xc16d('0x19')](handleEntityNotFound(_0x249348,null))['then'](saveUpdates(_0x4d0881[_0xc16d('0x4b')],null))[_0xc16d('0x19')](respondWithResult(_0x249348,null))['catch'](handleError(_0x249348,null));};exports[_0xc16d('0x4d')]=function(_0x3f36cc,_0x4562a9){return db['ZendeskAccount'][_0xc16d('0x4c')]({'where':{'id':_0x3f36cc[_0xc16d('0x49')]['id']}})[_0xc16d('0x19')](handleEntityNotFound(_0x4562a9,null))[_0xc16d('0x19')](removeEntity(_0x4562a9,null))[_0xc16d('0x23')](handleError(_0x4562a9,null));};exports['getConfigurations']=function(_0x2c730d,_0x1cf7c4,_0x2bf7d5){var _0x18f9b2={};var _0x527e06={};var _0x1167ec;var _0x254eab;return db[_0xc16d('0x31')]['findOne']({'where':{'id':_0x2c730d[_0xc16d('0x49')]['id']}})['then'](handleEntityNotFound(_0x1cf7c4,null))[_0xc16d('0x19')](function(_0x229236){if(_0x229236){_0x1167ec=_0x229236;_0x527e06[_0xc16d('0x36')]=_[_0xc16d('0x34')](db['ZendeskConfiguration'][_0xc16d('0x32')]);_0x527e06['query']=_[_0xc16d('0x34')](_0x2c730d[_0xc16d('0x33')]);_0x527e06[_0xc16d('0x3d')]=_[_0xc16d('0x35')](_0x527e06[_0xc16d('0x36')],_0x527e06['query']);_0x18f9b2[_0xc16d('0x37')]=_[_0xc16d('0x35')](_0x527e06['model'],qs['fields'](_0x2c730d['query']['fields']));_0x18f9b2[_0xc16d('0x37')]=_0x18f9b2[_0xc16d('0x37')][_0xc16d('0x39')]?_0x18f9b2[_0xc16d('0x37')]:_0x527e06[_0xc16d('0x36')];_0x18f9b2[_0xc16d('0x3a')]=qs['sort'](_0x2c730d[_0xc16d('0x33')]['sort']);_0x18f9b2['where']=qs[_0xc16d('0x3d')](_[_0xc16d('0x3c')](_0x2c730d[_0xc16d('0x33')],_0x527e06[_0xc16d('0x3d')]));if(_0x2c730d[_0xc16d('0x33')][_0xc16d('0x3e')]){_0x18f9b2[_0xc16d('0x3f')]=_[_0xc16d('0x40')](_0x18f9b2['where'],{'$or':_[_0xc16d('0x4e')](_0x18f9b2['attributes'],function(_0x5512c4){var _0x299be4={};_0x299be4[_0x5512c4]={'$like':'%'+_0x2c730d['query']['filter']+'%'};return _0x299be4;})});}_0x18f9b2=_['merge']({},_0x18f9b2,_0x2c730d['options']);return _0x1167ec[_0xc16d('0x4f')](_0x18f9b2);}})[_0xc16d('0x19')](function(_0x265a30){if(_0x265a30){_0x254eab=_0x265a30['length'];if(!_0x2c730d[_0xc16d('0x33')][_0xc16d('0x50')](_0xc16d('0x51'))){_0x18f9b2[_0xc16d('0x29')]=qs[_0xc16d('0x29')](_0x2c730d['query']['limit']);_0x18f9b2[_0xc16d('0x28')]=qs['offset'](_0x2c730d[_0xc16d('0x33')][_0xc16d('0x28')]);}return _0x1167ec[_0xc16d('0x4f')](_0x18f9b2);}})[_0xc16d('0x19')](function(_0x143900){if(_0x143900){return _0x143900?{'count':_0x254eab,'rows':_0x143900}:null;}})[_0xc16d('0x19')](respondWithResult(_0x1cf7c4,null))[_0xc16d('0x23')](handleError(_0x1cf7c4,null));};exports['addConfiguration']=function(_0xe3fb1e,_0x434103,_0x4f842d){if(_0xe3fb1e[_0xc16d('0x4b')]['id']){delete _0xe3fb1e['body']['id'];}return db['ZendeskAccount'][_0xc16d('0x52')]({'where':{'id':_0xe3fb1e[_0xc16d('0x49')]['id']}})[_0xc16d('0x19')](handleEntityNotFound(_0x434103,null))[_0xc16d('0x19')](function(_0x4fd50c){if(_0x4fd50c){_0xe3fb1e[_0xc16d('0x4b')][_0xc16d('0x53')]=_0x4fd50c['id'];_0xe3fb1e['body'][_0xc16d('0x54')]=integrations[_0xc16d('0x55')](_0xe3fb1e['body']['channel'],_0xe3fb1e[_0xc16d('0x4b')]['type']);_0xe3fb1e[_0xc16d('0x4b')][_0xc16d('0x56')]=integrations[_0xc16d('0x57')](_0xe3fb1e[_0xc16d('0x4b')][_0xc16d('0x58')],_0xe3fb1e[_0xc16d('0x4b')][_0xc16d('0x59')]);return db[_0xc16d('0x5a')][_0xc16d('0x4a')](_0xe3fb1e[_0xc16d('0x4b')],{'include':[{'model':db[_0xc16d('0x5b')],'as':'Subjects'},{'model':db[_0xc16d('0x5b')],'as':_0xc16d('0x56')}]});}return null;})[_0xc16d('0x19')](respondWithResult(_0x434103,null))['catch'](handleError(_0x434103,null));};exports[_0xc16d('0x5c')]=function(_0x274b65,_0x1ced07,_0x3cb4c2){var _0x44efed='';return db[_0xc16d('0x31')][_0xc16d('0x52')]({'where':{'id':_0x274b65[_0xc16d('0x49')]['id']},'attributes':['id',_0xc16d('0x5d'),'password','token','authType','remoteUri']})[_0xc16d('0x19')](handleEntityNotFound(_0x1ced07,null))[_0xc16d('0x19')](function(_0x210c2a){if(_0x210c2a){_0x44efed=_0x210c2a['remoteUri'];var _0x300500=_0x44efed[_0xc16d('0x5e')](-0x1);if(_0x300500==='/'){_0x44efed=_0x44efed[_0xc16d('0x5f')](0x0,_0x44efed[_0xc16d('0x60')](_0x300500));}var _0x33d4c2={'method':_0xc16d('0x61'),'uri':util[_0xc16d('0x62')](_0xc16d('0x63'),_0x44efed,'ticket_fields'),'json':!![]};switch(_0x210c2a[_0xc16d('0x64')]){case _0xc16d('0x65'):_0x33d4c2[_0xc16d('0x66')]={'Authorization':util['format'](_0xc16d('0x67'),new Buffer(util[_0xc16d('0x62')](_0xc16d('0x68'),_0x210c2a[_0xc16d('0x5d')],_0x210c2a['password']))[_0xc16d('0x69')](_0xc16d('0x6a')))};break;case _0xc16d('0x6b'):_0x33d4c2[_0xc16d('0x66')]={'Authorization':util[_0xc16d('0x62')]('Basic\x20%s',new Buffer(util[_0xc16d('0x62')](_0xc16d('0x6c'),_0x210c2a['username'],_0x210c2a[_0xc16d('0x6b')]))[_0xc16d('0x69')](_0xc16d('0x6a')))};break;default:throw new db[(_0xc16d('0x6d'))]['ValidationError'](_0xc16d('0x6e'));}return rp(_0x33d4c2);}})[_0xc16d('0x19')](function(_0x57ff2d){if(_0x57ff2d){var _0x408ba9=['subject',_0xc16d('0x6f'),'group','assignee'];_[_0xc16d('0x70')](_0x57ff2d[_0xc16d('0x71')],function(_0x2f01a4){return _0x408ba9[_0xc16d('0x72')](_0x2f01a4[_0xc16d('0x59')]);});return{'count':_0x57ff2d[_0xc16d('0x71')][_0xc16d('0x39')],'rows':_[_0xc16d('0x4e')](_0x57ff2d[_0xc16d('0x71')],function(_0x3de64b){return{'id':_0x3de64b['id'],'name':_0x3de64b['position']>0x7?_0x3de64b['title']:_0x3de64b[_0xc16d('0x59')],'custom':_0x3de64b[_0xc16d('0x73')]>0x7?!![]:![],'options':_0x3de64b['system_field_options']?_0x3de64b['system_field_options']:_0x3de64b[_0xc16d('0x74')]?_0x3de64b[_0xc16d('0x74')]:[]};})};}})['then'](respondWithResult(_0x1ced07,null))['catch'](function(_0x172f89){var _0x1aba99=_0x274b65[_0xc16d('0x33')]['test']?0x1f4:_0x172f89[_0xc16d('0x75')]||0x1f4;logger['error'](_0xc16d('0x76'),_0xc16d('0x5c'),_0x1aba99,JSON[_0xc16d('0x1e')](_0x172f89));delete _0x172f89[_0xc16d('0x2e')];if(_0x1aba99===0x191){_0x1aba99=0x190;}_0x1ced07[_0xc16d('0x25')](_0x1aba99)[_0xc16d('0x2f')](_0x274b65[_0xc16d('0x33')][_0xc16d('0x16')]?{'message':_0xc16d('0x77'),'statusCode':_0x172f89[_0xc16d('0x75')]}:_0x172f89);});};
\ No newline at end of file
+var _0x3486=['remoteUri','slice','lastIndexOf','GET','format','%s/%s','ticket_fields','password','headers','Basic\x20%s','%s:%s','toString','%s/token:%s','username','base64','Sequelize','ValidationError','Unknown\x20authentication\x20type','subject','description','assignee','remove','includes','map','title','position','system_field_options','custom_field_options','statusCode','getFields','Wrong\x20credentials','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../components/integrations/configuration','jayson/promise','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','ZendeskAccount,\x20%s,\x20%s','debug','ZendeskAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','result','catch','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','destroy','stack','name','send','index','ZendeskAccount','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','sort','where','pick','filter','merge','key','VIRTUAL','options','count','include','rows','show','params','create','body','find','getConfigurations','ZendeskConfiguration','order','hasOwnProperty','addConfiguration','findOne','AccountId','Subjects','channel','type','Descriptions','getDescriptions','ZendeskField','token','authType'];(function(_0x4a8812,_0x430080){var _0x55a784=function(_0x4b25cf){while(--_0x4b25cf){_0x4a8812['push'](_0x4a8812['shift']());}};_0x55a784(++_0x430080);}(_0x3486,0xa2));var _0x6348=function(_0x1c0d45,_0x3a9ee9){_0x1c0d45=_0x1c0d45-0x0;var _0x2ab11e=_0x3486[_0x1c0d45];return _0x2ab11e;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x6348('0x0'));var rimraf=require(_0x6348('0x1'));var zipdir=require(_0x6348('0x2'));var jsonpatch=require(_0x6348('0x3'));var rp=require(_0x6348('0x4'));var moment=require(_0x6348('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x6348('0x6'));var util=require('util');var path=require(_0x6348('0x7'));var sox=require(_0x6348('0x8'));var csv=require(_0x6348('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x6348('0xa'));var squel=require(_0x6348('0xb'));var crypto=require(_0x6348('0xc'));var jsforce=require(_0x6348('0xd'));var deskjs=require(_0x6348('0xe'));var toCsv=require(_0x6348('0x9'));var querystring=require(_0x6348('0xf'));var Papa=require(_0x6348('0x10'));var Redis=require(_0x6348('0x11'));var authService=require('../../components/auth/service');var qs=require(_0x6348('0x12'));var hardwareService=require(_0x6348('0x13'));var logger=require(_0x6348('0x14'))(_0x6348('0x15'));var utils=require(_0x6348('0x16'));var config=require(_0x6348('0x17'));var db=require('../../mysqldb')['db'];var integrations=require(_0x6348('0x18'));var jayson=require(_0x6348('0x19'));var client=jayson['client'][_0x6348('0x1a')]({'port':0x232a});function checkPasswordPattern(_0x2c84fa,_0x425977,_0x3f1eb5){if(_0x3f1eb5){var _0x3f30b3=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3f30b3[_0x6348('0x1b')](_0x425977)){return _0x2c84fa;}else{throw new Error(_0x6348('0x1c'));}}else{return _0x2c84fa;}}function respondWithRpcPromise(_0x8e9df2,_0x11f683,_0x558b05,_0x32e3d6){return new BPromise(function(_0xbf0ba9,_0x321079){var _0x4bfa29=_0x32e3d6||client;return _0x4bfa29[_0x6348('0x1d')](_0x8e9df2,_0x558b05)[_0x6348('0x1e')](function(_0x8d2920){logger[_0x6348('0x1f')](_0x6348('0x20'),_0x11f683,'request\x20sent');logger[_0x6348('0x21')](_0x6348('0x22'),_0x11f683,_0x6348('0x23'),JSON[_0x6348('0x24')](_0x8d2920));if(_0x8d2920['error']){if(_0x8d2920['error']['code']===0x1f4){logger[_0x6348('0x25')](_0x6348('0x20'),_0x11f683,_0x8d2920[_0x6348('0x25')]['message']);return _0x321079(_0x8d2920['error'][_0x6348('0x26')]);}logger[_0x6348('0x25')](_0x6348('0x20'),_0x11f683,_0x8d2920[_0x6348('0x25')]['message']);return _0xbf0ba9(_0x8d2920[_0x6348('0x25')][_0x6348('0x26')]);}else{logger[_0x6348('0x1f')](_0x6348('0x20'),_0x11f683,_0x6348('0x23'));_0xbf0ba9(_0x8d2920[_0x6348('0x27')][_0x6348('0x26')]);}})[_0x6348('0x28')](function(_0x3ca1a3){logger[_0x6348('0x25')](_0x6348('0x20'),_0x11f683,_0x3ca1a3);_0x321079(_0x3ca1a3);});});}function respondWithStatusCode(_0x3eeeaf,_0x2e99b6){_0x2e99b6=_0x2e99b6||0xcc;return function(_0x3f00f3){if(_0x3f00f3){return _0x3eeeaf[_0x6348('0x29')](_0x2e99b6);}return _0x3eeeaf[_0x6348('0x2a')](_0x2e99b6)[_0x6348('0x2b')]();};}function respondWithResult(_0x45f836,_0x35f7df){_0x35f7df=_0x35f7df||0xc8;return function(_0x200997){if(_0x200997){return _0x45f836[_0x6348('0x2a')](_0x35f7df)[_0x6348('0x2c')](_0x200997);}};}function respondWithFilteredResult(_0x5211d1,_0x5a0f9e){return function(_0x7dcd61){if(_0x7dcd61){var _0x5a8244=_0x7dcd61['count'],_0x45cad6=_0x5a0f9e[_0x6348('0x2d')],_0x55de4c=_0x5a0f9e[_0x6348('0x2d')]+_0x5a0f9e[_0x6348('0x2e')],_0x1c8066;if(_0x55de4c>=_0x5a8244){_0x55de4c=_0x5a8244;_0x1c8066=0xc8;}else{_0x1c8066=0xce;}_0x5211d1[_0x6348('0x2a')](_0x1c8066);return _0x5211d1[_0x6348('0x2f')](_0x6348('0x30'),_0x45cad6+'-'+_0x55de4c+'/'+_0x5a8244)['json'](_0x7dcd61);}return null;};}function patchUpdates(_0x14d5f5){return function(_0x5035b3){try{jsonpatch[_0x6348('0x31')](_0x5035b3,_0x14d5f5,!![]);}catch(_0x138616){return BPromise[_0x6348('0x32')](_0x138616);}return _0x5035b3[_0x6348('0x33')]();};}function saveUpdates(_0x1273e5,_0x2f1aa4){return function(_0x16dff6){if(_0x16dff6){return _0x16dff6[_0x6348('0x34')](_0x1273e5)['then'](function(_0x359518){return _0x359518;});}return null;};}function removeEntity(_0x58d6fd,_0x5ba267){return function(_0x54ef90){if(_0x54ef90){return _0x54ef90[_0x6348('0x35')]()[_0x6348('0x1e')](function(){_0x58d6fd[_0x6348('0x2a')](0xcc)[_0x6348('0x2b')]();});}};}function handleEntityNotFound(_0xd66ae3,_0x19ef98){return function(_0x3cf628){if(!_0x3cf628){_0xd66ae3['sendStatus'](0x194);}return _0x3cf628;};}function handleError(_0x384cd6,_0x451280){_0x451280=_0x451280||0x1f4;return function(_0x4032a3){logger['error'](_0x4032a3[_0x6348('0x36')]);if(_0x4032a3['name']){delete _0x4032a3[_0x6348('0x37')];}_0x384cd6['status'](_0x451280)[_0x6348('0x38')](_0x4032a3);};}exports[_0x6348('0x39')]=function(_0x3ef96d,_0x504c65){var _0x21f8cd={},_0x3036a1={},_0x10cb1d={'count':0x0,'rows':[]};var _0x4eae74=db[_0x6348('0x3a')][_0x6348('0x3b')];_0x3036a1[_0x6348('0x3c')]=_[_0x6348('0x3d')](_0x4eae74);_0x3036a1['query']=_[_0x6348('0x3d')](_0x3ef96d[_0x6348('0x3e')]);_0x3036a1[_0x6348('0x3f')]=_[_0x6348('0x40')](_0x3036a1['model'],_0x3036a1['query']);_0x21f8cd[_0x6348('0x41')]=_[_0x6348('0x40')](_0x3036a1[_0x6348('0x3c')],qs[_0x6348('0x42')](_0x3ef96d['query']['fields']));_0x21f8cd[_0x6348('0x41')]=_0x21f8cd['attributes'][_0x6348('0x43')]?_0x21f8cd['attributes']:_0x3036a1[_0x6348('0x3c')];if(!_0x3ef96d[_0x6348('0x3e')]['hasOwnProperty'](_0x6348('0x44'))){_0x21f8cd[_0x6348('0x2e')]=qs[_0x6348('0x2e')](_0x3ef96d['query'][_0x6348('0x2e')]);_0x21f8cd[_0x6348('0x2d')]=qs[_0x6348('0x2d')](_0x3ef96d[_0x6348('0x3e')][_0x6348('0x2d')]);}_0x21f8cd['order']=qs[_0x6348('0x45')](_0x3ef96d[_0x6348('0x3e')][_0x6348('0x45')]);_0x21f8cd[_0x6348('0x46')]=qs['filters'](_[_0x6348('0x47')](_0x3ef96d[_0x6348('0x3e')],_0x3036a1['filters']));if(_0x3ef96d[_0x6348('0x3e')][_0x6348('0x48')]){_0x21f8cd['where']=_[_0x6348('0x49')](_0x21f8cd[_0x6348('0x46')],{'$or':_['map'](_0x4eae74,function(_0x39e335){if(_0x39e335['type'][_0x6348('0x4a')]!==_0x6348('0x4b')){var _0xdc78c6={};_0xdc78c6[_0x39e335['field']]={'$like':'%'+_0x3ef96d[_0x6348('0x3e')][_0x6348('0x48')]+'%'};return _0xdc78c6;}})});}_0x21f8cd=_[_0x6348('0x49')]({},_0x21f8cd,_0x3ef96d[_0x6348('0x4c')]);var _0x16cabb={'where':_0x21f8cd['where']};return db[_0x6348('0x3a')][_0x6348('0x4d')](_0x16cabb)['then'](function(_0x3827c9){_0x10cb1d[_0x6348('0x4d')]=_0x3827c9;if(_0x3ef96d[_0x6348('0x3e')]['includeAll']){_0x21f8cd[_0x6348('0x4e')]=[{'all':!![]}];}return db[_0x6348('0x3a')]['findAll'](_0x21f8cd);})['then'](function(_0x5f21e4){_0x10cb1d[_0x6348('0x4f')]=_0x5f21e4;return _0x10cb1d;})['then'](respondWithFilteredResult(_0x504c65,_0x21f8cd))[_0x6348('0x28')](handleError(_0x504c65,null));};exports[_0x6348('0x50')]=function(_0x563e43,_0x196c98){var _0x15fb70={'raw':![],'where':{'id':_0x563e43[_0x6348('0x51')]['id']}},_0x3fa8fd={};_0x3fa8fd[_0x6348('0x3c')]=_['keys'](db[_0x6348('0x3a')][_0x6348('0x3b')]);_0x3fa8fd[_0x6348('0x3e')]=_[_0x6348('0x3d')](_0x563e43[_0x6348('0x3e')]);_0x3fa8fd[_0x6348('0x3f')]=_[_0x6348('0x40')](_0x3fa8fd[_0x6348('0x3c')],_0x3fa8fd[_0x6348('0x3e')]);_0x15fb70[_0x6348('0x41')]=_['intersection'](_0x3fa8fd['model'],qs[_0x6348('0x42')](_0x563e43[_0x6348('0x3e')]['fields']));_0x15fb70[_0x6348('0x41')]=_0x15fb70[_0x6348('0x41')][_0x6348('0x43')]?_0x15fb70[_0x6348('0x41')]:_0x3fa8fd[_0x6348('0x3c')];if(_0x563e43[_0x6348('0x3e')]['includeAll']){_0x15fb70[_0x6348('0x4e')]=[{'all':!![]}];}_0x15fb70=_['merge']({},_0x15fb70,_0x563e43[_0x6348('0x4c')]);return db[_0x6348('0x3a')]['find'](_0x15fb70)[_0x6348('0x1e')](handleEntityNotFound(_0x196c98,null))[_0x6348('0x1e')](respondWithResult(_0x196c98,null))[_0x6348('0x28')](handleError(_0x196c98,null));};exports[_0x6348('0x52')]=function(_0x256ffb,_0x26e4b6){return db[_0x6348('0x3a')][_0x6348('0x52')](_0x256ffb['body'],{})['then'](respondWithResult(_0x26e4b6,0xc9))['catch'](handleError(_0x26e4b6,null));};exports['update']=function(_0x135a21,_0xd8d837){if(_0x135a21[_0x6348('0x53')]['id']){delete _0x135a21[_0x6348('0x53')]['id'];}return db[_0x6348('0x3a')]['find']({'where':{'id':_0x135a21[_0x6348('0x51')]['id']}})[_0x6348('0x1e')](handleEntityNotFound(_0xd8d837,null))[_0x6348('0x1e')](saveUpdates(_0x135a21['body'],null))[_0x6348('0x1e')](respondWithResult(_0xd8d837,null))[_0x6348('0x28')](handleError(_0xd8d837,null));};exports[_0x6348('0x35')]=function(_0x411b6c,_0x114bfd){return db['ZendeskAccount'][_0x6348('0x54')]({'where':{'id':_0x411b6c['params']['id']}})[_0x6348('0x1e')](handleEntityNotFound(_0x114bfd,null))['then'](removeEntity(_0x114bfd,null))['catch'](handleError(_0x114bfd,null));};exports[_0x6348('0x55')]=function(_0x4bc434,_0x1429fd,_0x4b7547){var _0x49ae01={};var _0x5d3346={};var _0x15028b;var _0x269608;return db[_0x6348('0x3a')]['findOne']({'where':{'id':_0x4bc434[_0x6348('0x51')]['id']}})[_0x6348('0x1e')](handleEntityNotFound(_0x1429fd,null))[_0x6348('0x1e')](function(_0x4eaae9){if(_0x4eaae9){_0x15028b=_0x4eaae9;_0x5d3346[_0x6348('0x3c')]=_[_0x6348('0x3d')](db[_0x6348('0x56')]['rawAttributes']);_0x5d3346[_0x6348('0x3e')]=_['keys'](_0x4bc434[_0x6348('0x3e')]);_0x5d3346['filters']=_[_0x6348('0x40')](_0x5d3346[_0x6348('0x3c')],_0x5d3346[_0x6348('0x3e')]);_0x49ae01[_0x6348('0x41')]=_[_0x6348('0x40')](_0x5d3346[_0x6348('0x3c')],qs['fields'](_0x4bc434['query']['fields']));_0x49ae01[_0x6348('0x41')]=_0x49ae01[_0x6348('0x41')][_0x6348('0x43')]?_0x49ae01[_0x6348('0x41')]:_0x5d3346[_0x6348('0x3c')];_0x49ae01[_0x6348('0x57')]=qs[_0x6348('0x45')](_0x4bc434['query'][_0x6348('0x45')]);_0x49ae01[_0x6348('0x46')]=qs[_0x6348('0x3f')](_[_0x6348('0x47')](_0x4bc434[_0x6348('0x3e')],_0x5d3346[_0x6348('0x3f')]));if(_0x4bc434[_0x6348('0x3e')][_0x6348('0x48')]){_0x49ae01[_0x6348('0x46')]=_['merge'](_0x49ae01[_0x6348('0x46')],{'$or':_['map'](_0x49ae01[_0x6348('0x41')],function(_0x2998ca){var _0x4a9999={};_0x4a9999[_0x2998ca]={'$like':'%'+_0x4bc434[_0x6348('0x3e')][_0x6348('0x48')]+'%'};return _0x4a9999;})});}_0x49ae01=_['merge']({},_0x49ae01,_0x4bc434[_0x6348('0x4c')]);return _0x15028b[_0x6348('0x55')](_0x49ae01);}})[_0x6348('0x1e')](function(_0x178a08){if(_0x178a08){_0x269608=_0x178a08[_0x6348('0x43')];if(!_0x4bc434[_0x6348('0x3e')][_0x6348('0x58')]('nolimit')){_0x49ae01['limit']=qs[_0x6348('0x2e')](_0x4bc434[_0x6348('0x3e')][_0x6348('0x2e')]);_0x49ae01[_0x6348('0x2d')]=qs[_0x6348('0x2d')](_0x4bc434[_0x6348('0x3e')][_0x6348('0x2d')]);}return _0x15028b['getConfigurations'](_0x49ae01);}})[_0x6348('0x1e')](function(_0x396a73){if(_0x396a73){return _0x396a73?{'count':_0x269608,'rows':_0x396a73}:null;}})[_0x6348('0x1e')](respondWithResult(_0x1429fd,null))['catch'](handleError(_0x1429fd,null));};exports[_0x6348('0x59')]=function(_0x6c2c43,_0x1dee26,_0x5262c4){if(_0x6c2c43[_0x6348('0x53')]['id']){delete _0x6c2c43['body']['id'];}return db[_0x6348('0x3a')][_0x6348('0x5a')]({'where':{'id':_0x6c2c43['params']['id']}})[_0x6348('0x1e')](handleEntityNotFound(_0x1dee26,null))[_0x6348('0x1e')](function(_0x4fc8c1){if(_0x4fc8c1){_0x6c2c43[_0x6348('0x53')][_0x6348('0x5b')]=_0x4fc8c1['id'];_0x6c2c43[_0x6348('0x53')][_0x6348('0x5c')]=integrations['getSubjects'](_0x6c2c43[_0x6348('0x53')][_0x6348('0x5d')],_0x6c2c43['body'][_0x6348('0x5e')]);_0x6c2c43[_0x6348('0x53')][_0x6348('0x5f')]=integrations[_0x6348('0x60')](_0x6c2c43[_0x6348('0x53')][_0x6348('0x5d')],_0x6c2c43[_0x6348('0x53')]['type']);return db['ZendeskConfiguration'][_0x6348('0x52')](_0x6c2c43[_0x6348('0x53')],{'include':[{'model':db[_0x6348('0x61')],'as':_0x6348('0x5c')},{'model':db[_0x6348('0x61')],'as':'Descriptions'}]});}return null;})[_0x6348('0x1e')](respondWithResult(_0x1dee26,null))['catch'](handleError(_0x1dee26,null));};exports['getFields']=function(_0x472bb0,_0x51a30a,_0x19f53b){var _0x3445dc='';return db[_0x6348('0x3a')]['findOne']({'where':{'id':_0x472bb0['params']['id']},'attributes':['id','username','password',_0x6348('0x62'),_0x6348('0x63'),_0x6348('0x64')]})[_0x6348('0x1e')](handleEntityNotFound(_0x51a30a,null))[_0x6348('0x1e')](function(_0x159bc9){if(_0x159bc9){_0x3445dc=_0x159bc9[_0x6348('0x64')];var _0x58fa32=_0x3445dc[_0x6348('0x65')](-0x1);if(_0x58fa32==='/'){_0x3445dc=_0x3445dc['substring'](0x0,_0x3445dc[_0x6348('0x66')](_0x58fa32));}var _0x376ec9={'method':_0x6348('0x67'),'uri':util[_0x6348('0x68')](_0x6348('0x69'),_0x3445dc,_0x6348('0x6a')),'json':!![]};switch(_0x159bc9['authType']){case _0x6348('0x6b'):_0x376ec9[_0x6348('0x6c')]={'Authorization':util['format'](_0x6348('0x6d'),new Buffer(util[_0x6348('0x68')](_0x6348('0x6e'),_0x159bc9['username'],_0x159bc9[_0x6348('0x6b')]))[_0x6348('0x6f')]('base64'))};break;case _0x6348('0x62'):_0x376ec9['headers']={'Authorization':util[_0x6348('0x68')](_0x6348('0x6d'),new Buffer(util['format'](_0x6348('0x70'),_0x159bc9[_0x6348('0x71')],_0x159bc9[_0x6348('0x62')]))[_0x6348('0x6f')](_0x6348('0x72')))};break;default:throw new db[(_0x6348('0x73'))][(_0x6348('0x74'))](_0x6348('0x75'));}return rp(_0x376ec9);}})[_0x6348('0x1e')](function(_0x4bbdc0){if(_0x4bbdc0){var _0x35364a=[_0x6348('0x76'),_0x6348('0x77'),'group',_0x6348('0x78')];_[_0x6348('0x79')](_0x4bbdc0[_0x6348('0x6a')],function(_0x21cc63){return _0x35364a[_0x6348('0x7a')](_0x21cc63['type']);});return{'count':_0x4bbdc0[_0x6348('0x6a')][_0x6348('0x43')],'rows':_[_0x6348('0x7b')](_0x4bbdc0['ticket_fields'],function(_0x41bd63){return{'id':_0x41bd63['id'],'name':_0x41bd63['position']>0x7?_0x41bd63[_0x6348('0x7c')]:_0x41bd63[_0x6348('0x5e')],'custom':_0x41bd63[_0x6348('0x7d')]>0x7?!![]:![],'options':_0x41bd63[_0x6348('0x7e')]?_0x41bd63['system_field_options']:_0x41bd63[_0x6348('0x7f')]?_0x41bd63[_0x6348('0x7f')]:[]};})};}})[_0x6348('0x1e')](respondWithResult(_0x51a30a,null))[_0x6348('0x28')](function(_0x17ccdc){var _0x1f0bc6=_0x472bb0['query'][_0x6348('0x1b')]?0x1f4:_0x17ccdc[_0x6348('0x80')]||0x1f4;logger[_0x6348('0x25')]('getFields,\x20%s,\x20%s,\x20%s',_0x6348('0x81'),_0x1f0bc6,JSON['stringify'](_0x17ccdc));delete _0x17ccdc[_0x6348('0x37')];if(_0x1f0bc6===0x191){_0x1f0bc6=0x190;}_0x51a30a[_0x6348('0x2a')](_0x1f0bc6)[_0x6348('0x38')](_0x472bb0[_0x6348('0x3e')]['test']?{'message':_0x6348('0x82'),'statusCode':_0x17ccdc[_0x6348('0x80')]}:_0x17ccdc);});};
\ No newline at end of file
index e70616e..6e37667 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcf30=['bluebird','request-promise','./intZendeskAccount.attributes','define','ZendeskAccount','int_zendesk_accounts','lodash','util','../../config/logger','api'];(function(_0x2a6d49,_0x2726ea){var _0x37bd9a=function(_0x46fec2){while(--_0x46fec2){_0x2a6d49['push'](_0x2a6d49['shift']());}};_0x37bd9a(++_0x2726ea);}(_0xcf30,0x128));var _0x0cf3=function(_0xf9de0f,_0x27390f){_0xf9de0f=_0xf9de0f-0x0;var _0x2fd7ea=_0xcf30[_0xf9de0f];return _0x2fd7ea;};'use strict';var _=require(_0x0cf3('0x0'));var util=require(_0x0cf3('0x1'));var logger=require(_0x0cf3('0x2'))(_0x0cf3('0x3'));var moment=require('moment');var BPromise=require(_0x0cf3('0x4'));var rp=require(_0x0cf3('0x5'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x0cf3('0x6'));var integrations=require('../../components/integrations/configuration');module['exports']=function(_0x57016d,_0x126c36){return _0x57016d[_0x0cf3('0x7')](_0x0cf3('0x8'),attributes,{'tableName':_0x0cf3('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xfd20=['ZendeskAccount','int_zendesk_accounts','util','moment','bluebird','path','../../config/environment','./intZendeskAccount.attributes','../../components/integrations/configuration','exports'];(function(_0x67b075,_0x43557d){var _0x39d030=function(_0x4f25e1){while(--_0x4f25e1){_0x67b075['push'](_0x67b075['shift']());}};_0x39d030(++_0x43557d);}(_0xfd20,0x66));var _0x0fd2=function(_0x56fb73,_0x491492){_0x56fb73=_0x56fb73-0x0;var _0xa9dd3=_0xfd20[_0x56fb73];return _0xa9dd3;};'use strict';var _=require('lodash');var util=require(_0x0fd2('0x0'));var logger=require('../../config/logger')('api');var moment=require(_0x0fd2('0x1'));var BPromise=require(_0x0fd2('0x2'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x0fd2('0x3'));var rimraf=require('rimraf');var config=require(_0x0fd2('0x4'));var attributes=require(_0x0fd2('0x5'));var integrations=require(_0x0fd2('0x6'));module[_0x0fd2('0x7')]=function(_0x247d6e,_0x4d114c){return _0x247d6e['define'](_0x0fd2('0x8'),attributes,{'tableName':_0x0fd2('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 4595ff1..6d838b5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8107=['include','model','attributes','then','stringify','find','ShowZendeskAccount','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','debug','request\x20sent','error','code','ZendeskAccount,\x20%s,\x20%s','message','catch','GetZendeskAccount','ZendeskAccount','findAll','options','raw','where','map'];(function(_0xda21ef,_0x139818){var _0x4f76d8=function(_0xea5558){while(--_0xea5558){_0xda21ef['push'](_0xda21ef['shift']());}};_0x4f76d8(++_0x139818);}(_0x8107,0x1f1));var _0x7810=function(_0x3e25ba,_0x4d5399){_0x3e25ba=_0x3e25ba-0x0;var _0x393fb8=_0x8107[_0x3e25ba];return _0x393fb8;};'use strict';var _=require('lodash');var util=require(_0x7810('0x0'));var moment=require('moment');var BPromise=require(_0x7810('0x1'));var rs=require(_0x7810('0x2'));var fs=require('fs');var Redis=require(_0x7810('0x3'));var db=require(_0x7810('0x4'))['db'];var utils=require(_0x7810('0x5'));var logger=require(_0x7810('0x6'))(_0x7810('0x7'));var config=require(_0x7810('0x8'));var jayson=require(_0x7810('0x9'));var client=jayson[_0x7810('0xa')][_0x7810('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x31b59a,_0x50a024,_0x260f04){return new BPromise(function(_0x19cb23,_0x1579da){return client[_0x7810('0xc')](_0x31b59a,_0x260f04)['then'](function(_0x32d2f1){logger[_0x7810('0xd')]('ZendeskAccount,\x20%s,\x20%s',_0x50a024,'request\x20sent');logger[_0x7810('0xe')]('ZendeskAccount,\x20%s,\x20%s,\x20%s',_0x50a024,_0x7810('0xf'),JSON['stringify'](_0x32d2f1));if(_0x32d2f1[_0x7810('0x10')]){if(_0x32d2f1[_0x7810('0x10')][_0x7810('0x11')]===0x1f4){logger[_0x7810('0x10')](_0x7810('0x12'),_0x50a024,_0x32d2f1[_0x7810('0x10')]['message']);return _0x1579da(_0x32d2f1[_0x7810('0x10')][_0x7810('0x13')]);}logger['error'](_0x7810('0x12'),_0x50a024,_0x32d2f1['error']['message']);return _0x19cb23(_0x32d2f1['error']['message']);}else{logger[_0x7810('0xd')](_0x7810('0x12'),_0x50a024,'request\x20sent');_0x19cb23(_0x32d2f1['result'][_0x7810('0x13')]);}})[_0x7810('0x14')](function(_0x3bd208){logger['error']('ZendeskAccount,\x20%s,\x20%s',_0x50a024,_0x3bd208);_0x1579da(_0x3bd208);});});}exports[_0x7810('0x15')]=function(_0x3dbd45){var _0x11edb7=this;return new Promise(function(_0x4ae4fe,_0x5b408c){return db[_0x7810('0x16')][_0x7810('0x17')]({'raw':_0x3dbd45[_0x7810('0x18')]?_0x3dbd45[_0x7810('0x18')][_0x7810('0x19')]===undefined?!![]:![]:!![],'where':_0x3dbd45[_0x7810('0x18')]?_0x3dbd45[_0x7810('0x18')][_0x7810('0x1a')]||null:null,'attributes':_0x3dbd45[_0x7810('0x18')]?_0x3dbd45[_0x7810('0x18')]['attributes']||null:null,'limit':_0x3dbd45[_0x7810('0x18')]?_0x3dbd45[_0x7810('0x18')]['limit']||null:null,'include':_0x3dbd45[_0x7810('0x18')]?_0x3dbd45['options']['include']?_[_0x7810('0x1b')](_0x3dbd45[_0x7810('0x18')][_0x7810('0x1c')],function(_0x703a53){return{'model':db[_0x703a53[_0x7810('0x1d')]],'as':_0x703a53['as'],'attributes':_0x703a53[_0x7810('0x1e')],'include':_0x703a53['include']?_[_0x7810('0x1b')](_0x703a53[_0x7810('0x1c')],function(_0x569adf){return{'model':db[_0x569adf[_0x7810('0x1d')]],'as':_0x569adf['as'],'attributes':_0x569adf[_0x7810('0x1e')],'include':_0x569adf[_0x7810('0x1c')]?_[_0x7810('0x1b')](_0x569adf[_0x7810('0x1c')],function(_0x19e6c9){return{'model':db[_0x19e6c9[_0x7810('0x1d')]],'as':_0x19e6c9['as'],'attributes':_0x19e6c9[_0x7810('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x7810('0x1f')](function(_0x20a84e){logger[_0x7810('0xd')](_0x7810('0x15'),_0x3dbd45);logger['debug'](_0x7810('0x15'),_0x3dbd45,JSON[_0x7810('0x20')](_0x20a84e));_0x4ae4fe(_0x20a84e);})[_0x7810('0x14')](function(_0x12ed9c){logger['error'](_0x7810('0x15'),_0x12ed9c[_0x7810('0x13')],_0x3dbd45);_0x5b408c(_0x11edb7[_0x7810('0x10')](0x1f4,_0x12ed9c[_0x7810('0x13')]));});});};exports['ShowZendeskAccount']=function(_0x223fa5){var _0x43646d=this;return new Promise(function(_0x39d101,_0x2188ac){return db[_0x7810('0x16')][_0x7810('0x21')]({'raw':_0x223fa5[_0x7810('0x18')]?_0x223fa5['options']['raw']===undefined?!![]:![]:!![],'where':_0x223fa5['options']?_0x223fa5[_0x7810('0x18')][_0x7810('0x1a')]||null:null,'attributes':_0x223fa5[_0x7810('0x18')]?_0x223fa5[_0x7810('0x18')]['attributes']||null:null,'include':_0x223fa5[_0x7810('0x18')]?_0x223fa5[_0x7810('0x18')][_0x7810('0x1c')]?_['map'](_0x223fa5['options'][_0x7810('0x1c')],function(_0x6a5215){return{'model':db[_0x6a5215[_0x7810('0x1d')]],'as':_0x6a5215['as'],'attributes':_0x6a5215[_0x7810('0x1e')],'include':_0x6a5215['include']?_[_0x7810('0x1b')](_0x6a5215[_0x7810('0x1c')],function(_0x6ee749){return{'model':db[_0x6ee749[_0x7810('0x1d')]],'as':_0x6ee749['as'],'attributes':_0x6ee749['attributes'],'include':_0x6ee749[_0x7810('0x1c')]?_[_0x7810('0x1b')](_0x6ee749[_0x7810('0x1c')],function(_0x40c250){return{'model':db[_0x40c250['model']],'as':_0x40c250['as'],'attributes':_0x40c250[_0x7810('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x7810('0x1f')](function(_0x260297){logger[_0x7810('0xd')]('ShowZendeskAccount',_0x223fa5);logger[_0x7810('0xe')](_0x7810('0x22'),_0x223fa5,JSON[_0x7810('0x20')](_0x260297));_0x39d101(_0x260297);})[_0x7810('0x14')](function(_0x172006){logger['error'](_0x7810('0x22'),_0x172006[_0x7810('0x13')],_0x223fa5);_0x2188ac(_0x43646d[_0x7810('0x10')](0x1f4,_0x172006['message']));});});};
\ No newline at end of file
+var _0xa318=['http','request','then','info','ZendeskAccount,\x20%s,\x20%s','request\x20sent','debug','ZendeskAccount,\x20%s,\x20%s,\x20%s','error','code','message','GetZendeskAccount','ZendeskAccount','options','raw','where','attributes','limit','map','include','model','stringify','ShowZendeskAccount','find','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','jayson/promise'];(function(_0xa85dbd,_0x2838a5){var _0x3be7aa=function(_0x2573f8){while(--_0x2573f8){_0xa85dbd['push'](_0xa85dbd['shift']());}};_0x3be7aa(++_0x2838a5);}(_0xa318,0x9c));var _0x8a31=function(_0x23648e,_0x4e9160){_0x23648e=_0x23648e-0x0;var _0x520be8=_0xa318[_0x23648e];return _0x520be8;};'use strict';var _=require(_0x8a31('0x0'));var util=require(_0x8a31('0x1'));var moment=require(_0x8a31('0x2'));var BPromise=require('bluebird');var rs=require(_0x8a31('0x3'));var fs=require('fs');var Redis=require(_0x8a31('0x4'));var db=require(_0x8a31('0x5'))['db'];var utils=require(_0x8a31('0x6'));var logger=require('../../config/logger')(_0x8a31('0x7'));var config=require('../../config/environment');var jayson=require(_0x8a31('0x8'));var client=jayson['client'][_0x8a31('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2e9905,_0x4f6ce8,_0x5b46fb){return new BPromise(function(_0x2cb37c,_0x24b501){return client[_0x8a31('0xa')](_0x2e9905,_0x5b46fb)[_0x8a31('0xb')](function(_0x180ebe){logger[_0x8a31('0xc')](_0x8a31('0xd'),_0x4f6ce8,_0x8a31('0xe'));logger[_0x8a31('0xf')](_0x8a31('0x10'),_0x4f6ce8,'request\x20sent',JSON['stringify'](_0x180ebe));if(_0x180ebe[_0x8a31('0x11')]){if(_0x180ebe[_0x8a31('0x11')][_0x8a31('0x12')]===0x1f4){logger[_0x8a31('0x11')](_0x8a31('0xd'),_0x4f6ce8,_0x180ebe[_0x8a31('0x11')][_0x8a31('0x13')]);return _0x24b501(_0x180ebe[_0x8a31('0x11')][_0x8a31('0x13')]);}logger['error']('ZendeskAccount,\x20%s,\x20%s',_0x4f6ce8,_0x180ebe[_0x8a31('0x11')][_0x8a31('0x13')]);return _0x2cb37c(_0x180ebe[_0x8a31('0x11')]['message']);}else{logger['info'](_0x8a31('0xd'),_0x4f6ce8,_0x8a31('0xe'));_0x2cb37c(_0x180ebe['result'][_0x8a31('0x13')]);}})['catch'](function(_0x581745){logger['error']('ZendeskAccount,\x20%s,\x20%s',_0x4f6ce8,_0x581745);_0x24b501(_0x581745);});});}exports[_0x8a31('0x14')]=function(_0x14093c){var _0x1f7e31=this;return new Promise(function(_0x1d18b7,_0x25c1c6){return db[_0x8a31('0x15')]['findAll']({'raw':_0x14093c[_0x8a31('0x16')]?_0x14093c['options'][_0x8a31('0x17')]===undefined?!![]:![]:!![],'where':_0x14093c[_0x8a31('0x16')]?_0x14093c[_0x8a31('0x16')][_0x8a31('0x18')]||null:null,'attributes':_0x14093c['options']?_0x14093c[_0x8a31('0x16')][_0x8a31('0x19')]||null:null,'limit':_0x14093c[_0x8a31('0x16')]?_0x14093c[_0x8a31('0x16')][_0x8a31('0x1a')]||null:null,'include':_0x14093c[_0x8a31('0x16')]?_0x14093c[_0x8a31('0x16')]['include']?_[_0x8a31('0x1b')](_0x14093c['options'][_0x8a31('0x1c')],function(_0x5848f8){return{'model':db[_0x5848f8['model']],'as':_0x5848f8['as'],'attributes':_0x5848f8[_0x8a31('0x19')],'include':_0x5848f8['include']?_['map'](_0x5848f8[_0x8a31('0x1c')],function(_0x207681){return{'model':db[_0x207681[_0x8a31('0x1d')]],'as':_0x207681['as'],'attributes':_0x207681[_0x8a31('0x19')],'include':_0x207681[_0x8a31('0x1c')]?_[_0x8a31('0x1b')](_0x207681[_0x8a31('0x1c')],function(_0xfbc915){return{'model':db[_0xfbc915[_0x8a31('0x1d')]],'as':_0xfbc915['as'],'attributes':_0xfbc915['attributes']};}):[]};}):[]};}):[]:[]})[_0x8a31('0xb')](function(_0x122256){logger[_0x8a31('0xc')](_0x8a31('0x14'),_0x14093c);logger[_0x8a31('0xf')](_0x8a31('0x14'),_0x14093c,JSON[_0x8a31('0x1e')](_0x122256));_0x1d18b7(_0x122256);})['catch'](function(_0x4cf22d){logger[_0x8a31('0x11')](_0x8a31('0x14'),_0x4cf22d[_0x8a31('0x13')],_0x14093c);_0x25c1c6(_0x1f7e31[_0x8a31('0x11')](0x1f4,_0x4cf22d['message']));});});};exports[_0x8a31('0x1f')]=function(_0x5ba92b){var _0x32d70b=this;return new Promise(function(_0x5431e0,_0x45d671){return db[_0x8a31('0x15')][_0x8a31('0x20')]({'raw':_0x5ba92b[_0x8a31('0x16')]?_0x5ba92b['options'][_0x8a31('0x17')]===undefined?!![]:![]:!![],'where':_0x5ba92b[_0x8a31('0x16')]?_0x5ba92b[_0x8a31('0x16')]['where']||null:null,'attributes':_0x5ba92b[_0x8a31('0x16')]?_0x5ba92b[_0x8a31('0x16')]['attributes']||null:null,'include':_0x5ba92b[_0x8a31('0x16')]?_0x5ba92b[_0x8a31('0x16')][_0x8a31('0x1c')]?_[_0x8a31('0x1b')](_0x5ba92b[_0x8a31('0x16')]['include'],function(_0x49c888){return{'model':db[_0x49c888[_0x8a31('0x1d')]],'as':_0x49c888['as'],'attributes':_0x49c888['attributes'],'include':_0x49c888[_0x8a31('0x1c')]?_[_0x8a31('0x1b')](_0x49c888[_0x8a31('0x1c')],function(_0x174e17){return{'model':db[_0x174e17['model']],'as':_0x174e17['as'],'attributes':_0x174e17[_0x8a31('0x19')],'include':_0x174e17['include']?_[_0x8a31('0x1b')](_0x174e17[_0x8a31('0x1c')],function(_0x571cd4){return{'model':db[_0x571cd4[_0x8a31('0x1d')]],'as':_0x571cd4['as'],'attributes':_0x571cd4[_0x8a31('0x19')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x35be9f){logger['info'](_0x8a31('0x1f'),_0x5ba92b);logger[_0x8a31('0xf')](_0x8a31('0x1f'),_0x5ba92b,JSON[_0x8a31('0x1e')](_0x35be9f));_0x5431e0(_0x35be9f);})['catch'](function(_0x5efe81){logger[_0x8a31('0x11')](_0x8a31('0x1f'),_0x5efe81[_0x8a31('0x13')],_0x5ba92b);_0x45d671(_0x32d70b[_0x8a31('0x11')](0x1f4,_0x5efe81[_0x8a31('0x13')]));});});};
\ No newline at end of file
index a5c6e70..90377f6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d23=['setTags','put','update','delete','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./intZendeskConfiguration.controller','get','isAuthenticated','index','/:id','show','getFields','/:id/subjects','getSubjects','/:id/descriptions','/:id/tags','getTags','post','create'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0x5d23,0x1a5));var _0x35d2=function(_0x3cf972,_0x5e5254){_0x3cf972=_0x3cf972-0x0;var _0x2eaef6=_0x5d23[_0x3cf972];return _0x2eaef6;};'use strict';var multer=require(_0x35d2('0x0'));var util=require('util');var path=require(_0x35d2('0x1'));var timeout=require(_0x35d2('0x2'));var express=require(_0x35d2('0x3'));var router=express[_0x35d2('0x4')]();var auth=require(_0x35d2('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x35d2('0x6'));var controller=require(_0x35d2('0x7'));router[_0x35d2('0x8')]('/',auth[_0x35d2('0x9')](),controller[_0x35d2('0xa')]);router[_0x35d2('0x8')](_0x35d2('0xb'),auth[_0x35d2('0x9')](),controller[_0x35d2('0xc')]);router[_0x35d2('0x8')]('/:id/fields',auth[_0x35d2('0x9')](),controller[_0x35d2('0xd')]);router[_0x35d2('0x8')](_0x35d2('0xe'),auth[_0x35d2('0x9')](),controller[_0x35d2('0xf')]);router[_0x35d2('0x8')](_0x35d2('0x10'),auth[_0x35d2('0x9')](),controller['getDescriptions']);router[_0x35d2('0x8')](_0x35d2('0x11'),auth[_0x35d2('0x9')](),controller[_0x35d2('0x12')]);router[_0x35d2('0x13')]('/',auth[_0x35d2('0x9')](),controller[_0x35d2('0x14')]);router[_0x35d2('0x13')](_0x35d2('0x11'),auth[_0x35d2('0x9')](),controller[_0x35d2('0x15')]);router[_0x35d2('0x16')](_0x35d2('0xb'),auth['isAuthenticated'](),controller[_0x35d2('0x17')]);router[_0x35d2('0x18')]('/:id',auth[_0x35d2('0x9')](),controller['destroy']);module[_0x35d2('0x19')]=router;
\ No newline at end of file
+var _0x46d6=['destroy','exports','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./intZendeskConfiguration.controller','get','isAuthenticated','index','show','getFields','/:id/subjects','getSubjects','/:id/descriptions','/:id/tags','post','create','put','update','delete'];(function(_0xa6cc5c,_0x239c99){var _0x44803d=function(_0x515b6e){while(--_0x515b6e){_0xa6cc5c['push'](_0xa6cc5c['shift']());}};_0x44803d(++_0x239c99);}(_0x46d6,0x15b));var _0x646d=function(_0xcda377,_0x1e2678){_0xcda377=_0xcda377-0x0;var _0x1c024f=_0x46d6[_0xcda377];return _0x1c024f;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x646d('0x0'));var timeout=require(_0x646d('0x1'));var express=require(_0x646d('0x2'));var router=express[_0x646d('0x3')]();var auth=require(_0x646d('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x646d('0x5'));var controller=require(_0x646d('0x6'));router[_0x646d('0x7')]('/',auth[_0x646d('0x8')](),controller[_0x646d('0x9')]);router[_0x646d('0x7')]('/:id',auth[_0x646d('0x8')](),controller[_0x646d('0xa')]);router['get']('/:id/fields',auth['isAuthenticated'](),controller[_0x646d('0xb')]);router['get'](_0x646d('0xc'),auth[_0x646d('0x8')](),controller[_0x646d('0xd')]);router[_0x646d('0x7')](_0x646d('0xe'),auth[_0x646d('0x8')](),controller['getDescriptions']);router[_0x646d('0x7')](_0x646d('0xf'),auth[_0x646d('0x8')](),controller['getTags']);router[_0x646d('0x10')]('/',auth[_0x646d('0x8')](),controller[_0x646d('0x11')]);router['post'](_0x646d('0xf'),auth['isAuthenticated'](),controller['setTags']);router[_0x646d('0x12')]('/:id',auth[_0x646d('0x8')](),controller[_0x646d('0x13')]);router[_0x646d('0x14')]('/:id',auth[_0x646d('0x8')](),controller[_0x646d('0x15')]);module[_0x646d('0x16')]=router;
\ No newline at end of file
index 5430526..e5cc43a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaafc=['exports','STRING','sequelize'];(function(_0x2218cb,_0x9a5b5c){var _0x2220e4=function(_0x3617cd){while(--_0x3617cd){_0x2218cb['push'](_0x2218cb['shift']());}};_0x2220e4(++_0x9a5b5c);}(_0xaafc,0x1b2));var _0xcaaf=function(_0x598195,_0x348501){_0x598195=_0x598195-0x0;var _0x1f0b46=_0xaafc[_0x598195];return _0x1f0b46;};'use strict';var Sequelize=require(_0xcaaf('0x0'));module[_0xcaaf('0x1')]={'name':{'type':Sequelize[_0xcaaf('0x2')]},'description':{'type':Sequelize[_0xcaaf('0x2')]}};
\ No newline at end of file
+var _0xb8f8=['STRING','exports'];(function(_0x2d7f79,_0x1e8b1e){var _0x2d1388=function(_0x484f62){while(--_0x484f62){_0x2d7f79['push'](_0x2d7f79['shift']());}};_0x2d1388(++_0x1e8b1e);}(_0xb8f8,0x1d7));var _0x8b8f=function(_0x4a9fb1,_0x273043){_0x4a9fb1=_0x4a9fb1-0x0;var _0x348672=_0xb8f8[_0x4a9fb1];return _0x348672;};'use strict';var Sequelize=require('sequelize');module[_0x8b8f('0x0')]={'name':{'type':Sequelize[_0x8b8f('0x1')]},'description':{'type':Sequelize[_0x8b8f('0x1')]}};
\ No newline at end of file
index 0d1614e..c6a209d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe57d=['reject','save','update','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','ZendeskConfiguration','includeAll','include','findAll','show','params','options','create','body','find','getFields','findOne','ZendeskField','map','getSubjects','getDescriptions','getTags','setTags','ids','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/environment','../../mysqldb','jayson/promise','http','test','request','then','ZendeskConfiguration,\x20%s,\x20%s','request\x20sent','ZendeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','catch','sendStatus','status','count','offset','limit','set','Content-Range','json','apply'];(function(_0x10c403,_0x4f3eb0){var _0xe1a9ba=function(_0x1ca061){while(--_0x1ca061){_0x10c403['push'](_0x10c403['shift']());}};_0xe1a9ba(++_0x4f3eb0);}(_0xe57d,0xe2));var _0xde57=function(_0x179a0c,_0x2ca073){_0x179a0c=_0x179a0c-0x0;var _0x1c8b9a=_0xe57d[_0x179a0c];return _0x1c8b9a;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xde57('0x0'));var rimraf=require('rimraf');var zipdir=require(_0xde57('0x1'));var jsonpatch=require(_0xde57('0x2'));var rp=require(_0xde57('0x3'));var moment=require(_0xde57('0x4'));var BPromise=require(_0xde57('0x5'));var Mustache=require('mustache');var util=require(_0xde57('0x6'));var path=require(_0xde57('0x7'));var sox=require(_0xde57('0x8'));var csv=require(_0xde57('0x9'));var ejs=require(_0xde57('0xa'));var fs=require('fs');var _=require(_0xde57('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0xde57('0xc'));var toCsv=require(_0xde57('0x9'));var querystring=require(_0xde57('0xd'));var Papa=require(_0xde57('0xe'));var Redis=require(_0xde57('0xf'));var authService=require(_0xde57('0x10'));var qs=require(_0xde57('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xde57('0x12'));var utils=require('../../config/utils');var config=require(_0xde57('0x13'));var db=require(_0xde57('0x14'))['db'];var jayson=require(_0xde57('0x15'));var client=jayson['client'][_0xde57('0x16')]({'port':0x232a});function checkPasswordPattern(_0x2fc7ed,_0x24fdc6,_0x53f50f){if(_0x53f50f){var _0x2d4538=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x2d4538[_0xde57('0x17')](_0x24fdc6)){return _0x2fc7ed;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x2fc7ed;}}function respondWithRpcPromise(_0xdd2b19,_0x5b1caf,_0x22cba5,_0x2fef17){return new BPromise(function(_0x34e8fa,_0x7d9f3){var _0x487c9f=_0x2fef17||client;return _0x487c9f[_0xde57('0x18')](_0xdd2b19,_0x22cba5)[_0xde57('0x19')](function(_0x4183f0){logger['info'](_0xde57('0x1a'),_0x5b1caf,_0xde57('0x1b'));logger['debug'](_0xde57('0x1c'),_0x5b1caf,'request\x20sent',JSON[_0xde57('0x1d')](_0x4183f0));if(_0x4183f0[_0xde57('0x1e')]){if(_0x4183f0['error']['code']===0x1f4){logger[_0xde57('0x1e')](_0xde57('0x1a'),_0x5b1caf,_0x4183f0[_0xde57('0x1e')][_0xde57('0x1f')]);return _0x7d9f3(_0x4183f0[_0xde57('0x1e')][_0xde57('0x1f')]);}logger[_0xde57('0x1e')]('ZendeskConfiguration,\x20%s,\x20%s',_0x5b1caf,_0x4183f0[_0xde57('0x1e')]['message']);return _0x34e8fa(_0x4183f0[_0xde57('0x1e')][_0xde57('0x1f')]);}else{logger[_0xde57('0x20')](_0xde57('0x1a'),_0x5b1caf,'request\x20sent');_0x34e8fa(_0x4183f0[_0xde57('0x21')][_0xde57('0x1f')]);}})[_0xde57('0x22')](function(_0x4fecd3){logger['error'](_0xde57('0x1a'),_0x5b1caf,_0x4fecd3);_0x7d9f3(_0x4fecd3);});});}function respondWithStatusCode(_0x56bea4,_0x31549b){_0x31549b=_0x31549b||0xcc;return function(_0x1c39be){if(_0x1c39be){return _0x56bea4[_0xde57('0x23')](_0x31549b);}return _0x56bea4['status'](_0x31549b)['end']();};}function respondWithResult(_0x128fd2,_0x5eac12){_0x5eac12=_0x5eac12||0xc8;return function(_0x52db84){if(_0x52db84){return _0x128fd2[_0xde57('0x24')](_0x5eac12)['json'](_0x52db84);}};}function respondWithFilteredResult(_0x16aa52,_0x527a89){return function(_0x474cdf){if(_0x474cdf){var _0x5b9d39=_0x474cdf[_0xde57('0x25')],_0x1371aa=_0x527a89[_0xde57('0x26')],_0x472bba=_0x527a89[_0xde57('0x26')]+_0x527a89[_0xde57('0x27')],_0x42b501;if(_0x472bba>=_0x5b9d39){_0x472bba=_0x5b9d39;_0x42b501=0xc8;}else{_0x42b501=0xce;}_0x16aa52[_0xde57('0x24')](_0x42b501);return _0x16aa52[_0xde57('0x28')](_0xde57('0x29'),_0x1371aa+'-'+_0x472bba+'/'+_0x5b9d39)[_0xde57('0x2a')](_0x474cdf);}return null;};}function patchUpdates(_0x2d4732){return function(_0x21cf91){try{jsonpatch[_0xde57('0x2b')](_0x21cf91,_0x2d4732,!![]);}catch(_0x55fd95){return BPromise[_0xde57('0x2c')](_0x55fd95);}return _0x21cf91[_0xde57('0x2d')]();};}function saveUpdates(_0x44a7fe,_0x1d154a){return function(_0x42e20a){if(_0x42e20a){return _0x42e20a[_0xde57('0x2e')](_0x44a7fe)[_0xde57('0x19')](function(_0x23e33a){return _0x23e33a;});}return null;};}function removeEntity(_0x568b27,_0x23e68a){return function(_0x54b947){if(_0x54b947){return _0x54b947['destroy']()['then'](function(){_0x568b27['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x50130d,_0x1a0fee){return function(_0x31f6c3){if(!_0x31f6c3){_0x50130d[_0xde57('0x23')](0x194);}return _0x31f6c3;};}function handleError(_0x31d243,_0x458931){_0x458931=_0x458931||0x1f4;return function(_0x313daa){logger[_0xde57('0x1e')](_0x313daa[_0xde57('0x2f')]);if(_0x313daa[_0xde57('0x30')]){delete _0x313daa['name'];}_0x31d243[_0xde57('0x24')](_0x458931)[_0xde57('0x31')](_0x313daa);};}exports[_0xde57('0x32')]=function(_0x5495a3,_0x459ea5){var _0x3e27df={},_0x4137eb={},_0x157b30={'count':0x0,'rows':[]};var _0x360a26=db['ZendeskConfiguration'][_0xde57('0x33')];_0x4137eb[_0xde57('0x34')]=_[_0xde57('0x35')](_0x360a26);_0x4137eb[_0xde57('0x36')]=_[_0xde57('0x35')](_0x5495a3[_0xde57('0x36')]);_0x4137eb[_0xde57('0x37')]=_[_0xde57('0x38')](_0x4137eb[_0xde57('0x34')],_0x4137eb[_0xde57('0x36')]);_0x3e27df['attributes']=_[_0xde57('0x38')](_0x4137eb['model'],qs[_0xde57('0x39')](_0x5495a3[_0xde57('0x36')][_0xde57('0x39')]));_0x3e27df[_0xde57('0x3a')]=_0x3e27df[_0xde57('0x3a')][_0xde57('0x3b')]?_0x3e27df[_0xde57('0x3a')]:_0x4137eb[_0xde57('0x34')];if(!_0x5495a3[_0xde57('0x36')][_0xde57('0x3c')](_0xde57('0x3d'))){_0x3e27df[_0xde57('0x27')]=qs['limit'](_0x5495a3[_0xde57('0x36')]['limit']);_0x3e27df[_0xde57('0x26')]=qs[_0xde57('0x26')](_0x5495a3[_0xde57('0x36')]['offset']);}_0x3e27df[_0xde57('0x3e')]=qs[_0xde57('0x3f')](_0x5495a3['query'][_0xde57('0x3f')]);_0x3e27df[_0xde57('0x40')]=qs[_0xde57('0x37')](_[_0xde57('0x41')](_0x5495a3[_0xde57('0x36')],_0x4137eb['filters']));if(_0x5495a3[_0xde57('0x36')][_0xde57('0x42')]){_0x3e27df['where']=_[_0xde57('0x43')](_0x3e27df[_0xde57('0x40')],{'$or':_['map'](_0x360a26,function(_0x3ab44a){if(_0x3ab44a[_0xde57('0x44')][_0xde57('0x45')]!==_0xde57('0x46')){var _0x327daf={};_0x327daf[_0x3ab44a['field']]={'$like':'%'+_0x5495a3['query'][_0xde57('0x42')]+'%'};return _0x327daf;}})});}_0x3e27df=_[_0xde57('0x43')]({},_0x3e27df,_0x5495a3['options']);var _0x4ba893={'where':_0x3e27df['where']};return db[_0xde57('0x47')]['count'](_0x4ba893)[_0xde57('0x19')](function(_0x12451c){_0x157b30[_0xde57('0x25')]=_0x12451c;if(_0x5495a3[_0xde57('0x36')][_0xde57('0x48')]){_0x3e27df[_0xde57('0x49')]=[{'all':!![]}];}return db[_0xde57('0x47')][_0xde57('0x4a')](_0x3e27df);})[_0xde57('0x19')](function(_0x158069){_0x157b30['rows']=_0x158069;return _0x157b30;})[_0xde57('0x19')](respondWithFilteredResult(_0x459ea5,_0x3e27df))[_0xde57('0x22')](handleError(_0x459ea5,null));};exports[_0xde57('0x4b')]=function(_0x2a7b0b,_0x5f38f3){var _0xd3cafb={'raw':![],'where':{'id':_0x2a7b0b[_0xde57('0x4c')]['id']}},_0x3f11ca={};_0x3f11ca[_0xde57('0x34')]=_[_0xde57('0x35')](db[_0xde57('0x47')][_0xde57('0x33')]);_0x3f11ca[_0xde57('0x36')]=_[_0xde57('0x35')](_0x2a7b0b[_0xde57('0x36')]);_0x3f11ca[_0xde57('0x37')]=_['intersection'](_0x3f11ca['model'],_0x3f11ca[_0xde57('0x36')]);_0xd3cafb[_0xde57('0x3a')]=_[_0xde57('0x38')](_0x3f11ca[_0xde57('0x34')],qs['fields'](_0x2a7b0b[_0xde57('0x36')][_0xde57('0x39')]));_0xd3cafb[_0xde57('0x3a')]=_0xd3cafb['attributes']['length']?_0xd3cafb[_0xde57('0x3a')]:_0x3f11ca['model'];if(_0x2a7b0b[_0xde57('0x36')][_0xde57('0x48')]){_0xd3cafb[_0xde57('0x49')]=[{'all':!![]}];}_0xd3cafb=_[_0xde57('0x43')]({},_0xd3cafb,_0x2a7b0b[_0xde57('0x4d')]);return db[_0xde57('0x47')]['find'](_0xd3cafb)[_0xde57('0x19')](handleEntityNotFound(_0x5f38f3,null))[_0xde57('0x19')](respondWithResult(_0x5f38f3,null))[_0xde57('0x22')](handleError(_0x5f38f3,null));};exports[_0xde57('0x4e')]=function(_0x192785,_0x3d2a76){return db[_0xde57('0x47')][_0xde57('0x4e')](_0x192785[_0xde57('0x4f')],{})[_0xde57('0x19')](respondWithResult(_0x3d2a76,0xc9))[_0xde57('0x22')](handleError(_0x3d2a76,null));};exports[_0xde57('0x2e')]=function(_0x30cdd7,_0x2df0f8){if(_0x30cdd7[_0xde57('0x4f')]['id']){delete _0x30cdd7[_0xde57('0x4f')]['id'];}return db[_0xde57('0x47')][_0xde57('0x50')]({'where':{'id':_0x30cdd7[_0xde57('0x4c')]['id']}})['then'](handleEntityNotFound(_0x2df0f8,null))['then'](saveUpdates(_0x30cdd7[_0xde57('0x4f')],null))[_0xde57('0x19')](respondWithResult(_0x2df0f8,null))[_0xde57('0x22')](handleError(_0x2df0f8,null));};exports['destroy']=function(_0xb48ca6,_0x2fefe8){return db['ZendeskConfiguration']['find']({'where':{'id':_0xb48ca6[_0xde57('0x4c')]['id']}})['then'](handleEntityNotFound(_0x2fefe8,null))[_0xde57('0x19')](removeEntity(_0x2fefe8,null))['catch'](handleError(_0x2fefe8,null));};exports[_0xde57('0x51')]=function(_0x337c0f,_0x51f29a,_0x9b91d4){var _0x43b1d7={};var _0x54edd3={};var _0x51b2b1;var _0x3bb848;return db[_0xde57('0x47')][_0xde57('0x52')]({'where':{'id':_0x337c0f[_0xde57('0x4c')]['id']}})[_0xde57('0x19')](handleEntityNotFound(_0x51f29a,null))[_0xde57('0x19')](function(_0x54cf86){if(_0x54cf86){_0x51b2b1=_0x54cf86;_0x54edd3[_0xde57('0x34')]=_['keys'](db[_0xde57('0x53')]['rawAttributes']);_0x54edd3[_0xde57('0x36')]=_[_0xde57('0x35')](_0x337c0f[_0xde57('0x36')]);_0x54edd3[_0xde57('0x37')]=_[_0xde57('0x38')](_0x54edd3[_0xde57('0x34')],_0x54edd3[_0xde57('0x36')]);_0x43b1d7['attributes']=_['intersection'](_0x54edd3['model'],qs[_0xde57('0x39')](_0x337c0f[_0xde57('0x36')][_0xde57('0x39')]));_0x43b1d7[_0xde57('0x3a')]=_0x43b1d7['attributes'][_0xde57('0x3b')]?_0x43b1d7[_0xde57('0x3a')]:_0x54edd3[_0xde57('0x34')];_0x43b1d7[_0xde57('0x3e')]=qs[_0xde57('0x3f')](_0x337c0f['query'][_0xde57('0x3f')]);_0x43b1d7[_0xde57('0x40')]=qs[_0xde57('0x37')](_['pick'](_0x337c0f['query'],_0x54edd3['filters']));if(_0x337c0f[_0xde57('0x36')][_0xde57('0x42')]){_0x43b1d7['where']=_[_0xde57('0x43')](_0x43b1d7[_0xde57('0x40')],{'$or':_[_0xde57('0x54')](_0x43b1d7[_0xde57('0x3a')],function(_0x16f323){var _0x230e7b={};_0x230e7b[_0x16f323]={'$like':'%'+_0x337c0f['query'][_0xde57('0x42')]+'%'};return _0x230e7b;})});}_0x43b1d7=_[_0xde57('0x43')]({},_0x43b1d7,_0x337c0f[_0xde57('0x4d')]);return _0x51b2b1[_0xde57('0x51')](_0x43b1d7);}})['then'](function(_0x27a755){if(_0x27a755){_0x3bb848=_0x27a755[_0xde57('0x3b')];if(!_0x337c0f[_0xde57('0x36')]['hasOwnProperty'](_0xde57('0x3d'))){_0x43b1d7[_0xde57('0x27')]=qs[_0xde57('0x27')](_0x337c0f['query']['limit']);_0x43b1d7['offset']=qs[_0xde57('0x26')](_0x337c0f['query']['offset']);}return _0x51b2b1[_0xde57('0x51')](_0x43b1d7);}})[_0xde57('0x19')](function(_0x29c364){if(_0x29c364){return _0x29c364?{'count':_0x3bb848,'rows':_0x29c364}:null;}})[_0xde57('0x19')](respondWithResult(_0x51f29a,null))[_0xde57('0x22')](handleError(_0x51f29a,null));};exports[_0xde57('0x55')]=function(_0x4f2720,_0x44c094,_0x3e51aa){var _0x5450a0={};var _0x3c6ad4={};var _0x19c4b8;var _0x557c1c;return db['ZendeskConfiguration']['findOne']({'where':{'id':_0x4f2720[_0xde57('0x4c')]['id']}})[_0xde57('0x19')](handleEntityNotFound(_0x44c094,null))['then'](function(_0x60390a){if(_0x60390a){_0x19c4b8=_0x60390a;_0x3c6ad4[_0xde57('0x34')]=_[_0xde57('0x35')](db[_0xde57('0x53')][_0xde57('0x33')]);_0x3c6ad4[_0xde57('0x36')]=_[_0xde57('0x35')](_0x4f2720[_0xde57('0x36')]);_0x3c6ad4[_0xde57('0x37')]=_['intersection'](_0x3c6ad4[_0xde57('0x34')],_0x3c6ad4[_0xde57('0x36')]);_0x5450a0['attributes']=_['intersection'](_0x3c6ad4['model'],qs[_0xde57('0x39')](_0x4f2720[_0xde57('0x36')][_0xde57('0x39')]));_0x5450a0[_0xde57('0x3a')]=_0x5450a0[_0xde57('0x3a')][_0xde57('0x3b')]?_0x5450a0[_0xde57('0x3a')]:_0x3c6ad4[_0xde57('0x34')];_0x5450a0[_0xde57('0x3e')]=qs['sort'](_0x4f2720[_0xde57('0x36')][_0xde57('0x3f')]);_0x5450a0[_0xde57('0x40')]=qs[_0xde57('0x37')](_[_0xde57('0x41')](_0x4f2720[_0xde57('0x36')],_0x3c6ad4[_0xde57('0x37')]));if(_0x4f2720[_0xde57('0x36')][_0xde57('0x42')]){_0x5450a0[_0xde57('0x40')]=_['merge'](_0x5450a0[_0xde57('0x40')],{'$or':_[_0xde57('0x54')](_0x5450a0[_0xde57('0x3a')],function(_0x2c691c){var _0x22eed2={};_0x22eed2[_0x2c691c]={'$like':'%'+_0x4f2720[_0xde57('0x36')][_0xde57('0x42')]+'%'};return _0x22eed2;})});}_0x5450a0=_[_0xde57('0x43')]({},_0x5450a0,_0x4f2720['options']);return _0x19c4b8[_0xde57('0x55')](_0x5450a0);}})[_0xde57('0x19')](function(_0x31f628){if(_0x31f628){_0x557c1c=_0x31f628[_0xde57('0x3b')];if(!_0x4f2720[_0xde57('0x36')][_0xde57('0x3c')](_0xde57('0x3d'))){_0x5450a0[_0xde57('0x27')]=qs[_0xde57('0x27')](_0x4f2720[_0xde57('0x36')][_0xde57('0x27')]);_0x5450a0[_0xde57('0x26')]=qs[_0xde57('0x26')](_0x4f2720['query'][_0xde57('0x26')]);}return _0x19c4b8['getSubjects'](_0x5450a0);}})[_0xde57('0x19')](function(_0x359f8f){if(_0x359f8f){return _0x359f8f?{'count':_0x557c1c,'rows':_0x359f8f}:null;}})[_0xde57('0x19')](respondWithResult(_0x44c094,null))[_0xde57('0x22')](handleError(_0x44c094,null));};exports['getDescriptions']=function(_0x30f1ef,_0x2a2ac2,_0x22d92){var _0x514bcf={};var _0x19b0fa={};var _0x243762;var _0x5c5b88;return db[_0xde57('0x47')]['findOne']({'where':{'id':_0x30f1ef[_0xde57('0x4c')]['id']}})[_0xde57('0x19')](handleEntityNotFound(_0x2a2ac2,null))[_0xde57('0x19')](function(_0x5aa142){if(_0x5aa142){_0x243762=_0x5aa142;_0x19b0fa[_0xde57('0x34')]=_[_0xde57('0x35')](db[_0xde57('0x53')][_0xde57('0x33')]);_0x19b0fa[_0xde57('0x36')]=_['keys'](_0x30f1ef[_0xde57('0x36')]);_0x19b0fa['filters']=_['intersection'](_0x19b0fa[_0xde57('0x34')],_0x19b0fa[_0xde57('0x36')]);_0x514bcf[_0xde57('0x3a')]=_[_0xde57('0x38')](_0x19b0fa['model'],qs[_0xde57('0x39')](_0x30f1ef[_0xde57('0x36')][_0xde57('0x39')]));_0x514bcf['attributes']=_0x514bcf[_0xde57('0x3a')][_0xde57('0x3b')]?_0x514bcf[_0xde57('0x3a')]:_0x19b0fa[_0xde57('0x34')];_0x514bcf[_0xde57('0x3e')]=qs[_0xde57('0x3f')](_0x30f1ef[_0xde57('0x36')][_0xde57('0x3f')]);_0x514bcf['where']=qs[_0xde57('0x37')](_[_0xde57('0x41')](_0x30f1ef[_0xde57('0x36')],_0x19b0fa[_0xde57('0x37')]));if(_0x30f1ef[_0xde57('0x36')]['filter']){_0x514bcf[_0xde57('0x40')]=_[_0xde57('0x43')](_0x514bcf[_0xde57('0x40')],{'$or':_['map'](_0x514bcf[_0xde57('0x3a')],function(_0xb695f1){var _0x479110={};_0x479110[_0xb695f1]={'$like':'%'+_0x30f1ef[_0xde57('0x36')][_0xde57('0x42')]+'%'};return _0x479110;})});}_0x514bcf=_[_0xde57('0x43')]({},_0x514bcf,_0x30f1ef['options']);return _0x243762[_0xde57('0x56')](_0x514bcf);}})[_0xde57('0x19')](function(_0x319651){if(_0x319651){_0x5c5b88=_0x319651[_0xde57('0x3b')];if(!_0x30f1ef['query'][_0xde57('0x3c')](_0xde57('0x3d'))){_0x514bcf[_0xde57('0x27')]=qs[_0xde57('0x27')](_0x30f1ef['query']['limit']);_0x514bcf[_0xde57('0x26')]=qs[_0xde57('0x26')](_0x30f1ef[_0xde57('0x36')][_0xde57('0x26')]);}return _0x243762['getDescriptions'](_0x514bcf);}})[_0xde57('0x19')](function(_0x59b56b){if(_0x59b56b){return _0x59b56b?{'count':_0x5c5b88,'rows':_0x59b56b}:null;}})['then'](respondWithResult(_0x2a2ac2,null))[_0xde57('0x22')](handleError(_0x2a2ac2,null));};exports[_0xde57('0x57')]=function(_0x38d727,_0x5e53d4,_0x5c05d6){var _0x119a6e={};var _0x45b06b={};var _0x160b59;var _0xfcdb75;return db[_0xde57('0x47')][_0xde57('0x52')]({'where':{'id':_0x38d727['params']['id']}})[_0xde57('0x19')](handleEntityNotFound(_0x5e53d4,null))[_0xde57('0x19')](function(_0x35e33a){if(_0x35e33a){_0x160b59=_0x35e33a;_0x45b06b[_0xde57('0x34')]=_[_0xde57('0x35')](db['Tag'][_0xde57('0x33')]);_0x45b06b['query']=_[_0xde57('0x35')](_0x38d727[_0xde57('0x36')]);_0x45b06b[_0xde57('0x37')]=_[_0xde57('0x38')](_0x45b06b[_0xde57('0x34')],_0x45b06b[_0xde57('0x36')]);_0x119a6e[_0xde57('0x3a')]=_[_0xde57('0x38')](_0x45b06b['model'],qs[_0xde57('0x39')](_0x38d727[_0xde57('0x36')][_0xde57('0x39')]));_0x119a6e[_0xde57('0x3a')]=_0x119a6e['attributes']['length']?_0x119a6e[_0xde57('0x3a')]:_0x45b06b['model'];_0x119a6e[_0xde57('0x3e')]=qs[_0xde57('0x3f')](_0x38d727[_0xde57('0x36')][_0xde57('0x3f')]);_0x119a6e[_0xde57('0x40')]=qs[_0xde57('0x37')](_['pick'](_0x38d727[_0xde57('0x36')],_0x45b06b[_0xde57('0x37')]));if(_0x38d727['query'][_0xde57('0x42')]){_0x119a6e['where']=_[_0xde57('0x43')](_0x119a6e[_0xde57('0x40')],{'$or':_['map'](_0x119a6e[_0xde57('0x3a')],function(_0x40273e){var _0x34b5ec={};_0x34b5ec[_0x40273e]={'$like':'%'+_0x38d727[_0xde57('0x36')]['filter']+'%'};return _0x34b5ec;})});}_0x119a6e=_['merge']({},_0x119a6e,_0x38d727[_0xde57('0x4d')]);return _0x160b59[_0xde57('0x57')](_0x119a6e);}})[_0xde57('0x19')](function(_0x7cd7c1){if(_0x7cd7c1){_0xfcdb75=_0x7cd7c1['length'];if(!_0x38d727['query']['hasOwnProperty'](_0xde57('0x3d'))){_0x119a6e[_0xde57('0x27')]=qs[_0xde57('0x27')](_0x38d727[_0xde57('0x36')][_0xde57('0x27')]);_0x119a6e['offset']=qs[_0xde57('0x26')](_0x38d727[_0xde57('0x36')][_0xde57('0x26')]);}return _0x160b59[_0xde57('0x57')](_0x119a6e);}})['then'](function(_0x197770){if(_0x197770){return _0x197770?{'count':_0xfcdb75,'rows':_0x197770}:null;}})['then'](respondWithResult(_0x5e53d4,null))[_0xde57('0x22')](handleError(_0x5e53d4,null));};exports[_0xde57('0x58')]=function(_0x127b2c,_0x5d9a21,_0x1e7e38){if(_0x127b2c[_0xde57('0x4f')]['id']){delete _0x127b2c['body']['id'];}return db['ZendeskConfiguration']['findOne']({'where':{'id':_0x127b2c['params']['id']}})[_0xde57('0x19')](handleEntityNotFound(_0x5d9a21,null))[_0xde57('0x19')](function(_0x5f12b3){if(_0x5f12b3){return _0x5f12b3['setTags'](_0x127b2c[_0xde57('0x4f')][_0xde57('0x59')]||[]);}return null;})[_0xde57('0x19')](respondWithResult(_0x5d9a21,null))[_0xde57('0x22')](handleError(_0x5d9a21,null));};
\ No newline at end of file
+var _0x7232=['error','code','message','result','catch','sendStatus','status','json','count','offset','limit','Content-Range','reject','save','update','then','destroy','end','stack','name','index','rawAttributes','model','query','keys','intersection','fields','attributes','length','hasOwnProperty','nolimit','sort','pick','filters','where','merge','map','key','VIRTUAL','field','filter','options','ZendeskConfiguration','includeAll','include','findAll','rows','show','params','find','create','body','getFields','findOne','order','ZendeskField','getSubjects','getDescriptions','getTags','setTags','html-pdf','eml-format','rimraf','zip-dir','moment','bluebird','path','sox','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','client','http','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','info','ZendeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','ZendeskConfiguration,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x5b3b9b,_0x1c71b0){var _0x47c1d7=function(_0x34c20b){while(--_0x34c20b){_0x5b3b9b['push'](_0x5b3b9b['shift']());}};_0x47c1d7(++_0x1c71b0);}(_0x7232,0x98));var _0x2723=function(_0x3e691b,_0x2a7b7c){_0x3e691b=_0x3e691b-0x0;var _0x137aab=_0x7232[_0x3e691b];return _0x137aab;};'use strict';var pdf=require(_0x2723('0x0'));var emlformat=require(_0x2723('0x1'));var rimraf=require(_0x2723('0x2'));var zipdir=require(_0x2723('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x2723('0x4'));var BPromise=require(_0x2723('0x5'));var Mustache=require('mustache');var util=require('util');var path=require(_0x2723('0x6'));var sox=require(_0x2723('0x7'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x2723('0x8'));var squel=require('squel');var crypto=require(_0x2723('0x9'));var jsforce=require(_0x2723('0xa'));var deskjs=require(_0x2723('0xb'));var toCsv=require(_0x2723('0xc'));var querystring=require(_0x2723('0xd'));var Papa=require(_0x2723('0xe'));var Redis=require('ioredis');var authService=require(_0x2723('0xf'));var qs=require(_0x2723('0x10'));var hardwareService=require(_0x2723('0x11'));var logger=require(_0x2723('0x12'))(_0x2723('0x13'));var utils=require(_0x2723('0x14'));var config=require(_0x2723('0x15'));var db=require(_0x2723('0x16'))['db'];var jayson=require('jayson/promise');var client=jayson[_0x2723('0x17')][_0x2723('0x18')]({'port':0x232a});function checkPasswordPattern(_0x18bf21,_0x31a505,_0x4b8387){if(_0x4b8387){var _0x585308=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x585308['test'](_0x31a505)){return _0x18bf21;}else{throw new Error(_0x2723('0x19'));}}else{return _0x18bf21;}}function respondWithRpcPromise(_0x16b9a8,_0x342f8e,_0xd5766a,_0x27f672){return new BPromise(function(_0x5e0aa8,_0x274b0a){var _0x4b58ee=_0x27f672||client;return _0x4b58ee['request'](_0x16b9a8,_0xd5766a)['then'](function(_0x1c265d){logger[_0x2723('0x1a')](_0x2723('0x1b'),_0x342f8e,_0x2723('0x1c'));logger[_0x2723('0x1d')](_0x2723('0x1e'),_0x342f8e,_0x2723('0x1c'),JSON[_0x2723('0x1f')](_0x1c265d));if(_0x1c265d[_0x2723('0x20')]){if(_0x1c265d['error'][_0x2723('0x21')]===0x1f4){logger['error'](_0x2723('0x1b'),_0x342f8e,_0x1c265d[_0x2723('0x20')]['message']);return _0x274b0a(_0x1c265d['error'][_0x2723('0x22')]);}logger[_0x2723('0x20')](_0x2723('0x1b'),_0x342f8e,_0x1c265d[_0x2723('0x20')][_0x2723('0x22')]);return _0x5e0aa8(_0x1c265d[_0x2723('0x20')][_0x2723('0x22')]);}else{logger['info'](_0x2723('0x1b'),_0x342f8e,_0x2723('0x1c'));_0x5e0aa8(_0x1c265d[_0x2723('0x23')][_0x2723('0x22')]);}})[_0x2723('0x24')](function(_0x5431fa){logger[_0x2723('0x20')]('ZendeskConfiguration,\x20%s,\x20%s',_0x342f8e,_0x5431fa);_0x274b0a(_0x5431fa);});});}function respondWithStatusCode(_0x17d22d,_0x21b24a){_0x21b24a=_0x21b24a||0xcc;return function(_0x37acbc){if(_0x37acbc){return _0x17d22d[_0x2723('0x25')](_0x21b24a);}return _0x17d22d[_0x2723('0x26')](_0x21b24a)['end']();};}function respondWithResult(_0x1202b8,_0x261ddd){_0x261ddd=_0x261ddd||0xc8;return function(_0x39ffe0){if(_0x39ffe0){return _0x1202b8[_0x2723('0x26')](_0x261ddd)[_0x2723('0x27')](_0x39ffe0);}};}function respondWithFilteredResult(_0x2a6b23,_0x44b3f6){return function(_0x301a44){if(_0x301a44){var _0x23cc50=_0x301a44[_0x2723('0x28')],_0xca5ea7=_0x44b3f6['offset'],_0x277246=_0x44b3f6[_0x2723('0x29')]+_0x44b3f6[_0x2723('0x2a')],_0x428502;if(_0x277246>=_0x23cc50){_0x277246=_0x23cc50;_0x428502=0xc8;}else{_0x428502=0xce;}_0x2a6b23[_0x2723('0x26')](_0x428502);return _0x2a6b23['set'](_0x2723('0x2b'),_0xca5ea7+'-'+_0x277246+'/'+_0x23cc50)['json'](_0x301a44);}return null;};}function patchUpdates(_0x45395b){return function(_0x250b46){try{jsonpatch['apply'](_0x250b46,_0x45395b,!![]);}catch(_0x98045f){return BPromise[_0x2723('0x2c')](_0x98045f);}return _0x250b46[_0x2723('0x2d')]();};}function saveUpdates(_0x39d2a4,_0x3df16e){return function(_0x1f9ae5){if(_0x1f9ae5){return _0x1f9ae5[_0x2723('0x2e')](_0x39d2a4)[_0x2723('0x2f')](function(_0x38f580){return _0x38f580;});}return null;};}function removeEntity(_0x36c994,_0x4bf975){return function(_0xdc11ea){if(_0xdc11ea){return _0xdc11ea[_0x2723('0x30')]()[_0x2723('0x2f')](function(){_0x36c994[_0x2723('0x26')](0xcc)[_0x2723('0x31')]();});}};}function handleEntityNotFound(_0xa7bf52,_0x555157){return function(_0x25c752){if(!_0x25c752){_0xa7bf52[_0x2723('0x25')](0x194);}return _0x25c752;};}function handleError(_0x255881,_0x943672){_0x943672=_0x943672||0x1f4;return function(_0x5bdeff){logger['error'](_0x5bdeff[_0x2723('0x32')]);if(_0x5bdeff[_0x2723('0x33')]){delete _0x5bdeff[_0x2723('0x33')];}_0x255881[_0x2723('0x26')](_0x943672)['send'](_0x5bdeff);};}exports[_0x2723('0x34')]=function(_0x5c9f9f,_0x103c60){var _0x28bb84={},_0x5acd02={},_0x52244d={'count':0x0,'rows':[]};var _0x3487fb=db['ZendeskConfiguration'][_0x2723('0x35')];_0x5acd02[_0x2723('0x36')]=_['keys'](_0x3487fb);_0x5acd02[_0x2723('0x37')]=_[_0x2723('0x38')](_0x5c9f9f[_0x2723('0x37')]);_0x5acd02['filters']=_[_0x2723('0x39')](_0x5acd02['model'],_0x5acd02[_0x2723('0x37')]);_0x28bb84['attributes']=_[_0x2723('0x39')](_0x5acd02[_0x2723('0x36')],qs[_0x2723('0x3a')](_0x5c9f9f[_0x2723('0x37')][_0x2723('0x3a')]));_0x28bb84[_0x2723('0x3b')]=_0x28bb84['attributes'][_0x2723('0x3c')]?_0x28bb84['attributes']:_0x5acd02[_0x2723('0x36')];if(!_0x5c9f9f[_0x2723('0x37')][_0x2723('0x3d')](_0x2723('0x3e'))){_0x28bb84[_0x2723('0x2a')]=qs[_0x2723('0x2a')](_0x5c9f9f[_0x2723('0x37')]['limit']);_0x28bb84[_0x2723('0x29')]=qs[_0x2723('0x29')](_0x5c9f9f[_0x2723('0x37')][_0x2723('0x29')]);}_0x28bb84['order']=qs['sort'](_0x5c9f9f[_0x2723('0x37')][_0x2723('0x3f')]);_0x28bb84['where']=qs['filters'](_[_0x2723('0x40')](_0x5c9f9f[_0x2723('0x37')],_0x5acd02[_0x2723('0x41')]));if(_0x5c9f9f['query']['filter']){_0x28bb84[_0x2723('0x42')]=_[_0x2723('0x43')](_0x28bb84[_0x2723('0x42')],{'$or':_[_0x2723('0x44')](_0x3487fb,function(_0x255c65){if(_0x255c65['type'][_0x2723('0x45')]!==_0x2723('0x46')){var _0x45ffaf={};_0x45ffaf[_0x255c65[_0x2723('0x47')]]={'$like':'%'+_0x5c9f9f[_0x2723('0x37')][_0x2723('0x48')]+'%'};return _0x45ffaf;}})});}_0x28bb84=_['merge']({},_0x28bb84,_0x5c9f9f[_0x2723('0x49')]);var _0x1163d2={'where':_0x28bb84['where']};return db[_0x2723('0x4a')][_0x2723('0x28')](_0x1163d2)[_0x2723('0x2f')](function(_0xcdf5ec){_0x52244d['count']=_0xcdf5ec;if(_0x5c9f9f[_0x2723('0x37')][_0x2723('0x4b')]){_0x28bb84[_0x2723('0x4c')]=[{'all':!![]}];}return db['ZendeskConfiguration'][_0x2723('0x4d')](_0x28bb84);})[_0x2723('0x2f')](function(_0x3441da){_0x52244d[_0x2723('0x4e')]=_0x3441da;return _0x52244d;})[_0x2723('0x2f')](respondWithFilteredResult(_0x103c60,_0x28bb84))['catch'](handleError(_0x103c60,null));};exports[_0x2723('0x4f')]=function(_0x32f441,_0x38b197){var _0x386a29={'raw':![],'where':{'id':_0x32f441[_0x2723('0x50')]['id']}},_0x8962b8={};_0x8962b8[_0x2723('0x36')]=_[_0x2723('0x38')](db[_0x2723('0x4a')][_0x2723('0x35')]);_0x8962b8[_0x2723('0x37')]=_[_0x2723('0x38')](_0x32f441['query']);_0x8962b8[_0x2723('0x41')]=_[_0x2723('0x39')](_0x8962b8[_0x2723('0x36')],_0x8962b8['query']);_0x386a29['attributes']=_[_0x2723('0x39')](_0x8962b8[_0x2723('0x36')],qs[_0x2723('0x3a')](_0x32f441[_0x2723('0x37')][_0x2723('0x3a')]));_0x386a29[_0x2723('0x3b')]=_0x386a29[_0x2723('0x3b')][_0x2723('0x3c')]?_0x386a29['attributes']:_0x8962b8[_0x2723('0x36')];if(_0x32f441[_0x2723('0x37')][_0x2723('0x4b')]){_0x386a29[_0x2723('0x4c')]=[{'all':!![]}];}_0x386a29=_[_0x2723('0x43')]({},_0x386a29,_0x32f441[_0x2723('0x49')]);return db[_0x2723('0x4a')][_0x2723('0x51')](_0x386a29)['then'](handleEntityNotFound(_0x38b197,null))[_0x2723('0x2f')](respondWithResult(_0x38b197,null))['catch'](handleError(_0x38b197,null));};exports[_0x2723('0x52')]=function(_0x423aa4,_0x12c81c){return db[_0x2723('0x4a')][_0x2723('0x52')](_0x423aa4[_0x2723('0x53')],{})[_0x2723('0x2f')](respondWithResult(_0x12c81c,0xc9))[_0x2723('0x24')](handleError(_0x12c81c,null));};exports['update']=function(_0x1e4b45,_0xbdb804){if(_0x1e4b45[_0x2723('0x53')]['id']){delete _0x1e4b45[_0x2723('0x53')]['id'];}return db[_0x2723('0x4a')][_0x2723('0x51')]({'where':{'id':_0x1e4b45[_0x2723('0x50')]['id']}})['then'](handleEntityNotFound(_0xbdb804,null))[_0x2723('0x2f')](saveUpdates(_0x1e4b45[_0x2723('0x53')],null))[_0x2723('0x2f')](respondWithResult(_0xbdb804,null))['catch'](handleError(_0xbdb804,null));};exports['destroy']=function(_0x55c284,_0x8ecb9d){return db[_0x2723('0x4a')][_0x2723('0x51')]({'where':{'id':_0x55c284['params']['id']}})['then'](handleEntityNotFound(_0x8ecb9d,null))[_0x2723('0x2f')](removeEntity(_0x8ecb9d,null))[_0x2723('0x24')](handleError(_0x8ecb9d,null));};exports[_0x2723('0x54')]=function(_0x5a0cbd,_0x585b05,_0x5b237f){var _0xe34b8={};var _0x3e0496={};var _0x196b9a;var _0xec595f;return db[_0x2723('0x4a')][_0x2723('0x55')]({'where':{'id':_0x5a0cbd['params']['id']}})[_0x2723('0x2f')](handleEntityNotFound(_0x585b05,null))['then'](function(_0x515081){if(_0x515081){_0x196b9a=_0x515081;_0x3e0496['model']=_[_0x2723('0x38')](db['ZendeskField']['rawAttributes']);_0x3e0496['query']=_[_0x2723('0x38')](_0x5a0cbd[_0x2723('0x37')]);_0x3e0496['filters']=_['intersection'](_0x3e0496[_0x2723('0x36')],_0x3e0496[_0x2723('0x37')]);_0xe34b8[_0x2723('0x3b')]=_[_0x2723('0x39')](_0x3e0496[_0x2723('0x36')],qs[_0x2723('0x3a')](_0x5a0cbd[_0x2723('0x37')][_0x2723('0x3a')]));_0xe34b8['attributes']=_0xe34b8[_0x2723('0x3b')][_0x2723('0x3c')]?_0xe34b8['attributes']:_0x3e0496[_0x2723('0x36')];_0xe34b8[_0x2723('0x56')]=qs[_0x2723('0x3f')](_0x5a0cbd[_0x2723('0x37')][_0x2723('0x3f')]);_0xe34b8[_0x2723('0x42')]=qs[_0x2723('0x41')](_[_0x2723('0x40')](_0x5a0cbd['query'],_0x3e0496[_0x2723('0x41')]));if(_0x5a0cbd[_0x2723('0x37')]['filter']){_0xe34b8['where']=_[_0x2723('0x43')](_0xe34b8[_0x2723('0x42')],{'$or':_[_0x2723('0x44')](_0xe34b8[_0x2723('0x3b')],function(_0x3d17f6){var _0x4d428b={};_0x4d428b[_0x3d17f6]={'$like':'%'+_0x5a0cbd[_0x2723('0x37')][_0x2723('0x48')]+'%'};return _0x4d428b;})});}_0xe34b8=_[_0x2723('0x43')]({},_0xe34b8,_0x5a0cbd['options']);return _0x196b9a[_0x2723('0x54')](_0xe34b8);}})[_0x2723('0x2f')](function(_0x44af1e){if(_0x44af1e){_0xec595f=_0x44af1e[_0x2723('0x3c')];if(!_0x5a0cbd[_0x2723('0x37')][_0x2723('0x3d')](_0x2723('0x3e'))){_0xe34b8[_0x2723('0x2a')]=qs[_0x2723('0x2a')](_0x5a0cbd[_0x2723('0x37')][_0x2723('0x2a')]);_0xe34b8[_0x2723('0x29')]=qs[_0x2723('0x29')](_0x5a0cbd['query'][_0x2723('0x29')]);}return _0x196b9a[_0x2723('0x54')](_0xe34b8);}})[_0x2723('0x2f')](function(_0x13d820){if(_0x13d820){return _0x13d820?{'count':_0xec595f,'rows':_0x13d820}:null;}})[_0x2723('0x2f')](respondWithResult(_0x585b05,null))['catch'](handleError(_0x585b05,null));};exports['getSubjects']=function(_0x458df2,_0x20c2f8,_0x104f9c){var _0x4150e3={};var _0x3382d2={};var _0x5cb90f;var _0x4296e0;return db['ZendeskConfiguration'][_0x2723('0x55')]({'where':{'id':_0x458df2[_0x2723('0x50')]['id']}})[_0x2723('0x2f')](handleEntityNotFound(_0x20c2f8,null))[_0x2723('0x2f')](function(_0xf75607){if(_0xf75607){_0x5cb90f=_0xf75607;_0x3382d2[_0x2723('0x36')]=_[_0x2723('0x38')](db[_0x2723('0x57')][_0x2723('0x35')]);_0x3382d2['query']=_[_0x2723('0x38')](_0x458df2['query']);_0x3382d2[_0x2723('0x41')]=_[_0x2723('0x39')](_0x3382d2[_0x2723('0x36')],_0x3382d2[_0x2723('0x37')]);_0x4150e3[_0x2723('0x3b')]=_[_0x2723('0x39')](_0x3382d2['model'],qs[_0x2723('0x3a')](_0x458df2['query'][_0x2723('0x3a')]));_0x4150e3['attributes']=_0x4150e3['attributes'][_0x2723('0x3c')]?_0x4150e3[_0x2723('0x3b')]:_0x3382d2[_0x2723('0x36')];_0x4150e3['order']=qs[_0x2723('0x3f')](_0x458df2[_0x2723('0x37')]['sort']);_0x4150e3['where']=qs['filters'](_[_0x2723('0x40')](_0x458df2[_0x2723('0x37')],_0x3382d2[_0x2723('0x41')]));if(_0x458df2[_0x2723('0x37')][_0x2723('0x48')]){_0x4150e3['where']=_[_0x2723('0x43')](_0x4150e3[_0x2723('0x42')],{'$or':_[_0x2723('0x44')](_0x4150e3[_0x2723('0x3b')],function(_0x288a10){var _0x1e084c={};_0x1e084c[_0x288a10]={'$like':'%'+_0x458df2['query']['filter']+'%'};return _0x1e084c;})});}_0x4150e3=_[_0x2723('0x43')]({},_0x4150e3,_0x458df2[_0x2723('0x49')]);return _0x5cb90f[_0x2723('0x58')](_0x4150e3);}})[_0x2723('0x2f')](function(_0x27f29c){if(_0x27f29c){_0x4296e0=_0x27f29c[_0x2723('0x3c')];if(!_0x458df2['query'][_0x2723('0x3d')](_0x2723('0x3e'))){_0x4150e3['limit']=qs['limit'](_0x458df2[_0x2723('0x37')]['limit']);_0x4150e3[_0x2723('0x29')]=qs[_0x2723('0x29')](_0x458df2[_0x2723('0x37')][_0x2723('0x29')]);}return _0x5cb90f[_0x2723('0x58')](_0x4150e3);}})[_0x2723('0x2f')](function(_0x4088bf){if(_0x4088bf){return _0x4088bf?{'count':_0x4296e0,'rows':_0x4088bf}:null;}})[_0x2723('0x2f')](respondWithResult(_0x20c2f8,null))[_0x2723('0x24')](handleError(_0x20c2f8,null));};exports['getDescriptions']=function(_0x1ba5fa,_0x327391,_0x4365ec){var _0x3bb5f6={};var _0x5ca930={};var _0x693440;var _0x5ca2e6;return db[_0x2723('0x4a')][_0x2723('0x55')]({'where':{'id':_0x1ba5fa['params']['id']}})[_0x2723('0x2f')](handleEntityNotFound(_0x327391,null))[_0x2723('0x2f')](function(_0x23837e){if(_0x23837e){_0x693440=_0x23837e;_0x5ca930[_0x2723('0x36')]=_[_0x2723('0x38')](db[_0x2723('0x57')][_0x2723('0x35')]);_0x5ca930[_0x2723('0x37')]=_[_0x2723('0x38')](_0x1ba5fa[_0x2723('0x37')]);_0x5ca930[_0x2723('0x41')]=_[_0x2723('0x39')](_0x5ca930['model'],_0x5ca930[_0x2723('0x37')]);_0x3bb5f6[_0x2723('0x3b')]=_[_0x2723('0x39')](_0x5ca930['model'],qs[_0x2723('0x3a')](_0x1ba5fa[_0x2723('0x37')][_0x2723('0x3a')]));_0x3bb5f6['attributes']=_0x3bb5f6['attributes']['length']?_0x3bb5f6[_0x2723('0x3b')]:_0x5ca930[_0x2723('0x36')];_0x3bb5f6['order']=qs[_0x2723('0x3f')](_0x1ba5fa['query'][_0x2723('0x3f')]);_0x3bb5f6[_0x2723('0x42')]=qs[_0x2723('0x41')](_['pick'](_0x1ba5fa[_0x2723('0x37')],_0x5ca930['filters']));if(_0x1ba5fa[_0x2723('0x37')][_0x2723('0x48')]){_0x3bb5f6[_0x2723('0x42')]=_[_0x2723('0x43')](_0x3bb5f6[_0x2723('0x42')],{'$or':_['map'](_0x3bb5f6['attributes'],function(_0x46f4da){var _0x1416b3={};_0x1416b3[_0x46f4da]={'$like':'%'+_0x1ba5fa[_0x2723('0x37')][_0x2723('0x48')]+'%'};return _0x1416b3;})});}_0x3bb5f6=_[_0x2723('0x43')]({},_0x3bb5f6,_0x1ba5fa[_0x2723('0x49')]);return _0x693440[_0x2723('0x59')](_0x3bb5f6);}})[_0x2723('0x2f')](function(_0x1bc28e){if(_0x1bc28e){_0x5ca2e6=_0x1bc28e[_0x2723('0x3c')];if(!_0x1ba5fa[_0x2723('0x37')]['hasOwnProperty'](_0x2723('0x3e'))){_0x3bb5f6[_0x2723('0x2a')]=qs[_0x2723('0x2a')](_0x1ba5fa['query'][_0x2723('0x2a')]);_0x3bb5f6[_0x2723('0x29')]=qs[_0x2723('0x29')](_0x1ba5fa[_0x2723('0x37')]['offset']);}return _0x693440[_0x2723('0x59')](_0x3bb5f6);}})[_0x2723('0x2f')](function(_0x36aa77){if(_0x36aa77){return _0x36aa77?{'count':_0x5ca2e6,'rows':_0x36aa77}:null;}})[_0x2723('0x2f')](respondWithResult(_0x327391,null))[_0x2723('0x24')](handleError(_0x327391,null));};exports['getTags']=function(_0x115e66,_0x1afa3b,_0x34341c){var _0x2d736b={};var _0x58447a={};var _0x56ff01;var _0x51f315;return db[_0x2723('0x4a')]['findOne']({'where':{'id':_0x115e66[_0x2723('0x50')]['id']}})[_0x2723('0x2f')](handleEntityNotFound(_0x1afa3b,null))[_0x2723('0x2f')](function(_0x1ec0b3){if(_0x1ec0b3){_0x56ff01=_0x1ec0b3;_0x58447a[_0x2723('0x36')]=_[_0x2723('0x38')](db['Tag'][_0x2723('0x35')]);_0x58447a[_0x2723('0x37')]=_[_0x2723('0x38')](_0x115e66[_0x2723('0x37')]);_0x58447a[_0x2723('0x41')]=_[_0x2723('0x39')](_0x58447a[_0x2723('0x36')],_0x58447a['query']);_0x2d736b[_0x2723('0x3b')]=_[_0x2723('0x39')](_0x58447a[_0x2723('0x36')],qs[_0x2723('0x3a')](_0x115e66[_0x2723('0x37')]['fields']));_0x2d736b['attributes']=_0x2d736b[_0x2723('0x3b')][_0x2723('0x3c')]?_0x2d736b[_0x2723('0x3b')]:_0x58447a['model'];_0x2d736b[_0x2723('0x56')]=qs['sort'](_0x115e66[_0x2723('0x37')][_0x2723('0x3f')]);_0x2d736b['where']=qs[_0x2723('0x41')](_['pick'](_0x115e66[_0x2723('0x37')],_0x58447a[_0x2723('0x41')]));if(_0x115e66[_0x2723('0x37')][_0x2723('0x48')]){_0x2d736b[_0x2723('0x42')]=_[_0x2723('0x43')](_0x2d736b[_0x2723('0x42')],{'$or':_[_0x2723('0x44')](_0x2d736b['attributes'],function(_0x1c96f1){var _0x5e45ff={};_0x5e45ff[_0x1c96f1]={'$like':'%'+_0x115e66[_0x2723('0x37')][_0x2723('0x48')]+'%'};return _0x5e45ff;})});}_0x2d736b=_['merge']({},_0x2d736b,_0x115e66[_0x2723('0x49')]);return _0x56ff01[_0x2723('0x5a')](_0x2d736b);}})[_0x2723('0x2f')](function(_0x16352d){if(_0x16352d){_0x51f315=_0x16352d[_0x2723('0x3c')];if(!_0x115e66['query'][_0x2723('0x3d')](_0x2723('0x3e'))){_0x2d736b[_0x2723('0x2a')]=qs[_0x2723('0x2a')](_0x115e66['query']['limit']);_0x2d736b['offset']=qs['offset'](_0x115e66[_0x2723('0x37')][_0x2723('0x29')]);}return _0x56ff01[_0x2723('0x5a')](_0x2d736b);}})['then'](function(_0x1a4226){if(_0x1a4226){return _0x1a4226?{'count':_0x51f315,'rows':_0x1a4226}:null;}})[_0x2723('0x2f')](respondWithResult(_0x1afa3b,null))['catch'](handleError(_0x1afa3b,null));};exports[_0x2723('0x5b')]=function(_0x559d78,_0x55151e,_0x14b182){if(_0x559d78[_0x2723('0x53')]['id']){delete _0x559d78[_0x2723('0x53')]['id'];}return db[_0x2723('0x4a')][_0x2723('0x55')]({'where':{'id':_0x559d78[_0x2723('0x50')]['id']}})[_0x2723('0x2f')](handleEntityNotFound(_0x55151e,null))[_0x2723('0x2f')](function(_0x287ae4){if(_0x287ae4){return _0x287ae4[_0x2723('0x5b')](_0x559d78['body']['ids']||[]);}return null;})['then'](respondWithResult(_0x55151e,null))[_0x2723('0x24')](handleError(_0x55151e,null));};
\ No newline at end of file
index 9d63d37..a4773ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x36e1=['request-promise','rimraf','exports','define','ZendeskConfiguration','int_zendesk_configurations','lodash','util','../../config/logger','moment','bluebird'];(function(_0x262417,_0x9b9f85){var _0x4404f7=function(_0x13354f){while(--_0x13354f){_0x262417['push'](_0x262417['shift']());}};_0x4404f7(++_0x9b9f85);}(_0x36e1,0xe2));var _0x136e=function(_0x26bf51,_0x5e261a){_0x26bf51=_0x26bf51-0x0;var _0x503415=_0x36e1[_0x26bf51];return _0x503415;};'use strict';var _=require(_0x136e('0x0'));var util=require(_0x136e('0x1'));var logger=require(_0x136e('0x2'))('api');var moment=require(_0x136e('0x3'));var BPromise=require(_0x136e('0x4'));var rp=require(_0x136e('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x136e('0x6'));var config=require('../../config/environment');var attributes=require('./intZendeskConfiguration.attributes');module[_0x136e('0x7')]=function(_0x5dbcde,_0x647696){return _0x5dbcde[_0x136e('0x8')](_0x136e('0x9'),attributes,{'tableName':_0x136e('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xdda4=['ZendeskConfiguration','int_zendesk_configurations','lodash','util','../../config/logger','api','moment','bluebird','request-promise','../../config/environment','./intZendeskConfiguration.attributes','exports'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0xdda4,0xce));var _0x4dda=function(_0x25248b,_0x3c8491){_0x25248b=_0x25248b-0x0;var _0x509939=_0xdda4[_0x25248b];return _0x509939;};'use strict';var _=require(_0x4dda('0x0'));var util=require(_0x4dda('0x1'));var logger=require(_0x4dda('0x2'))(_0x4dda('0x3'));var moment=require(_0x4dda('0x4'));var BPromise=require(_0x4dda('0x5'));var rp=require(_0x4dda('0x6'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x4dda('0x7'));var attributes=require(_0x4dda('0x8'));module[_0x4dda('0x9')]=function(_0x12f446,_0x5d6f5b){return _0x12f446['define'](_0x4dda('0xa'),attributes,{'tableName':_0x4dda('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a768b4d..9a48eb0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0846=['rpc','../../config/environment','jayson/promise','client','then','info','ZendeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','ZendeskConfiguration,\x20%s,\x20%s,\x20%s','error','message','result','catch','util','moment','bluebird','ioredis','../../mysqldb'];(function(_0x514952,_0x1b0a73){var _0x1596c5=function(_0x241411){while(--_0x241411){_0x514952['push'](_0x514952['shift']());}};_0x1596c5(++_0x1b0a73);}(_0x0846,0x18a));var _0x6084=function(_0x49f27c,_0x23bc8f){_0x49f27c=_0x49f27c-0x0;var _0x22b4c7=_0x0846[_0x49f27c];return _0x22b4c7;};'use strict';var _=require('lodash');var util=require(_0x6084('0x0'));var moment=require(_0x6084('0x1'));var BPromise=require(_0x6084('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x6084('0x3'));var db=require(_0x6084('0x4'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x6084('0x5'));var config=require(_0x6084('0x6'));var jayson=require(_0x6084('0x7'));var client=jayson[_0x6084('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x31ad61,_0x3288f9,_0x426571){return new BPromise(function(_0x512127,_0x53441d){return client['request'](_0x31ad61,_0x426571)[_0x6084('0x9')](function(_0x57ccbe){logger[_0x6084('0xa')](_0x6084('0xb'),_0x3288f9,_0x6084('0xc'));logger[_0x6084('0xd')](_0x6084('0xe'),_0x3288f9,_0x6084('0xc'),JSON['stringify'](_0x57ccbe));if(_0x57ccbe[_0x6084('0xf')]){if(_0x57ccbe[_0x6084('0xf')]['code']===0x1f4){logger[_0x6084('0xf')]('ZendeskConfiguration,\x20%s,\x20%s',_0x3288f9,_0x57ccbe['error'][_0x6084('0x10')]);return _0x53441d(_0x57ccbe['error'][_0x6084('0x10')]);}logger[_0x6084('0xf')]('ZendeskConfiguration,\x20%s,\x20%s',_0x3288f9,_0x57ccbe[_0x6084('0xf')][_0x6084('0x10')]);return _0x512127(_0x57ccbe[_0x6084('0xf')][_0x6084('0x10')]);}else{logger[_0x6084('0xa')](_0x6084('0xb'),_0x3288f9,'request\x20sent');_0x512127(_0x57ccbe[_0x6084('0x11')]['message']);}})[_0x6084('0x12')](function(_0x2c5a39){logger[_0x6084('0xf')](_0x6084('0xb'),_0x3288f9,_0x2c5a39);_0x53441d(_0x2c5a39);});});}
\ No newline at end of file
+var _0x3bfc=['request','then','info','ZendeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','ZendeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http'];(function(_0x17cb2f,_0x57666d){var _0xb40bee=function(_0x21c1d9){while(--_0x21c1d9){_0x17cb2f['push'](_0x17cb2f['shift']());}};_0xb40bee(++_0x57666d);}(_0x3bfc,0xa9));var _0xc3bf=function(_0x34b5ca,_0x594010){_0x34b5ca=_0x34b5ca-0x0;var _0x2d72c0=_0x3bfc[_0x34b5ca];return _0x2d72c0;};'use strict';var _=require(_0xc3bf('0x0'));var util=require(_0xc3bf('0x1'));var moment=require(_0xc3bf('0x2'));var BPromise=require(_0xc3bf('0x3'));var rs=require(_0xc3bf('0x4'));var fs=require('fs');var Redis=require(_0xc3bf('0x5'));var db=require(_0xc3bf('0x6'))['db'];var utils=require(_0xc3bf('0x7'));var logger=require('../../config/logger')(_0xc3bf('0x8'));var config=require(_0xc3bf('0x9'));var jayson=require(_0xc3bf('0xa'));var client=jayson[_0xc3bf('0xb')][_0xc3bf('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x47d070,_0x2bc7e1,_0x3db485){return new BPromise(function(_0x231555,_0x17da9c){return client[_0xc3bf('0xd')](_0x47d070,_0x3db485)[_0xc3bf('0xe')](function(_0x3ba729){logger[_0xc3bf('0xf')](_0xc3bf('0x10'),_0x2bc7e1,_0xc3bf('0x11'));logger[_0xc3bf('0x12')](_0xc3bf('0x13'),_0x2bc7e1,'request\x20sent',JSON[_0xc3bf('0x14')](_0x3ba729));if(_0x3ba729['error']){if(_0x3ba729[_0xc3bf('0x15')][_0xc3bf('0x16')]===0x1f4){logger[_0xc3bf('0x15')](_0xc3bf('0x10'),_0x2bc7e1,_0x3ba729[_0xc3bf('0x15')]['message']);return _0x17da9c(_0x3ba729['error']['message']);}logger[_0xc3bf('0x15')](_0xc3bf('0x10'),_0x2bc7e1,_0x3ba729[_0xc3bf('0x15')][_0xc3bf('0x17')]);return _0x231555(_0x3ba729[_0xc3bf('0x15')]['message']);}else{logger[_0xc3bf('0xf')]('ZendeskConfiguration,\x20%s,\x20%s',_0x2bc7e1,_0xc3bf('0x11'));_0x231555(_0x3ba729[_0xc3bf('0x18')][_0xc3bf('0x17')]);}})[_0xc3bf('0x19')](function(_0xaee749){logger[_0xc3bf('0x15')](_0xc3bf('0x10'),_0x2bc7e1,_0xaee749);_0x17da9c(_0xaee749);});});}
\ No newline at end of file
index 7168f35..93465a1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','post','put','update','delete','exports','multer','util','path','connect-timeout','Router','../../components/auth/service'];(function(_0x1cc89b,_0x1bf377){var _0xdf0ba0=function(_0x5909aa){while(--_0x5909aa){_0x1cc89b['push'](_0x1cc89b['shift']());}};_0xdf0ba0(++_0x1bf377);}(_0x9957,0x93));var _0x7995=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0x9957[_0x501510];return _0x1e6ee5;};'use strict';var multer=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var path=require(_0x7995('0x2'));var timeout=require(_0x7995('0x3'));var express=require('express');var router=express[_0x7995('0x4')]();var auth=require(_0x7995('0x5'));var interaction=require(_0x7995('0x6'));var config=require(_0x7995('0x7'));var controller=require('./intZendeskField.controller');router[_0x7995('0x8')]('/',auth[_0x7995('0x9')](),controller[_0x7995('0xa')]);router[_0x7995('0x8')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller['show']);router[_0x7995('0xc')]('/',auth[_0x7995('0x9')](),controller['create']);router[_0x7995('0xd')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller[_0x7995('0xe')]);router[_0x7995('0xf')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller['destroy']);module[_0x7995('0x10')]=router;
\ No newline at end of file
+var _0x9957=['../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','post','put','update','delete','exports','multer','util','path','connect-timeout','Router','../../components/auth/service'];(function(_0x285c85,_0x132c21){var _0x2f81cd=function(_0x9b9962){while(--_0x9b9962){_0x285c85['push'](_0x285c85['shift']());}};_0x2f81cd(++_0x132c21);}(_0x9957,0x93));var _0x7995=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x9957[_0x2dafbe];return _0x58a45a;};'use strict';var multer=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var path=require(_0x7995('0x2'));var timeout=require(_0x7995('0x3'));var express=require('express');var router=express[_0x7995('0x4')]();var auth=require(_0x7995('0x5'));var interaction=require(_0x7995('0x6'));var config=require(_0x7995('0x7'));var controller=require('./intZendeskField.controller');router[_0x7995('0x8')]('/',auth[_0x7995('0x9')](),controller[_0x7995('0xa')]);router[_0x7995('0x8')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller['show']);router[_0x7995('0xc')]('/',auth[_0x7995('0x9')](),controller['create']);router[_0x7995('0xd')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller[_0x7995('0xe')]);router[_0x7995('0xf')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller['destroy']);module[_0x7995('0x10')]=router;
\ No newline at end of file
index c359a5c..a79f789 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0713=['BOOLEAN','ENUM','string','variable','customVariable','keyValue','STRING'];(function(_0x3b5049,_0x495a94){var _0x12454e=function(_0x3988d3){while(--_0x3988d3){_0x3b5049['push'](_0x3b5049['shift']());}};_0x12454e(++_0x495a94);}(_0x0713,0x1ba));var _0x3071=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0713[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require('sequelize');module['exports']={'type':{'type':Sequelize[_0x3071('0x0')](_0x3071('0x1'),_0x3071('0x2'),_0x3071('0x3'),_0x3071('0x4')),'defaultValue':'string'},'content':{'type':Sequelize[_0x3071('0x5')]},'key':{'type':Sequelize[_0x3071('0x5')]},'keyType':{'type':Sequelize[_0x3071('0x0')](_0x3071('0x1'),_0x3071('0x2'),_0x3071('0x3'))},'keyContent':{'type':Sequelize[_0x3071('0x5')]},'idField':{'type':Sequelize[_0x3071('0x5')]},'nameField':{'type':Sequelize[_0x3071('0x5')]},'customField':{'type':Sequelize[_0x3071('0x6')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x3071('0x5')]}};
\ No newline at end of file
+var _0xb58b=['BOOLEAN','exports','ENUM','string','customVariable','keyValue','STRING','variable'];(function(_0x123935,_0x1670ba){var _0x1a8ebf=function(_0xa6933e){while(--_0xa6933e){_0x123935['push'](_0x123935['shift']());}};_0x1a8ebf(++_0x1670ba);}(_0xb58b,0x1f1));var _0xbb58=function(_0x34bb86,_0x20aac2){_0x34bb86=_0x34bb86-0x0;var _0x120380=_0xb58b[_0x34bb86];return _0x120380;};'use strict';var Sequelize=require('sequelize');module[_0xbb58('0x0')]={'type':{'type':Sequelize[_0xbb58('0x1')](_0xbb58('0x2'),'variable',_0xbb58('0x3'),_0xbb58('0x4')),'defaultValue':'string'},'content':{'type':Sequelize[_0xbb58('0x5')]},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0xbb58('0x1')](_0xbb58('0x2'),_0xbb58('0x6'),'customVariable')},'keyContent':{'type':Sequelize[_0xbb58('0x5')]},'idField':{'type':Sequelize[_0xbb58('0x5')]},'nameField':{'type':Sequelize[_0xbb58('0x5')]},'customField':{'type':Sequelize[_0xbb58('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0xbb58('0x5')]}};
\ No newline at end of file
index 137b45a..d75487a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe1bd=['intersection','find','create','body','params','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/utils','../../mysqldb','sendStatus','end','status','count','offset','limit','save','update','then','destroy','error','stack','name','send','index','ZendeskField','rawAttributes','model','keys','query','filters','attributes','fields','length','hasOwnProperty','nolimit','order','where','pick','filter','merge','map','key','VIRTUAL','options','includeAll','include','findAll','catch','show'];(function(_0x3b0731,_0xcf9925){var _0x4204d7=function(_0x635ac5){while(--_0x635ac5){_0x3b0731['push'](_0x3b0731['shift']());}};_0x4204d7(++_0xcf9925);}(_0xe1bd,0x1a3));var _0xde1b=function(_0x3deaaf,_0x4ae37f){_0x3deaaf=_0x3deaaf-0x0;var _0x3a7e56=_0xe1bd[_0x3deaaf];return _0x3a7e56;};'use strict';var pdf=require(_0xde1b('0x0'));var emlformat=require(_0xde1b('0x1'));var rimraf=require(_0xde1b('0x2'));var zipdir=require(_0xde1b('0x3'));var jsonpatch=require(_0xde1b('0x4'));var rp=require(_0xde1b('0x5'));var moment=require(_0xde1b('0x6'));var BPromise=require(_0xde1b('0x7'));var Mustache=require(_0xde1b('0x8'));var util=require(_0xde1b('0x9'));var path=require('path');var sox=require(_0xde1b('0xa'));var csv=require(_0xde1b('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xde1b('0xc'));var squel=require(_0xde1b('0xd'));var crypto=require(_0xde1b('0xe'));var jsforce=require(_0xde1b('0xf'));var deskjs=require(_0xde1b('0x10'));var toCsv=require(_0xde1b('0xb'));var querystring=require(_0xde1b('0x11'));var Papa=require('papaparse');var Redis=require(_0xde1b('0x12'));var authService=require(_0xde1b('0x13'));var qs=require(_0xde1b('0x14'));var hardwareService=require(_0xde1b('0x15'));var logger=require('../../config/logger')('api');var utils=require(_0xde1b('0x16'));var config=require('../../config/environment');var db=require(_0xde1b('0x17'))['db'];function respondWithStatusCode(_0x40736d,_0x4bd041){_0x4bd041=_0x4bd041||0xcc;return function(_0xfec5d6){if(_0xfec5d6){return _0x40736d[_0xde1b('0x18')](_0x4bd041);}return _0x40736d['status'](_0x4bd041)[_0xde1b('0x19')]();};}function respondWithResult(_0x7f212e,_0x420884){_0x420884=_0x420884||0xc8;return function(_0x35ee00){if(_0x35ee00){return _0x7f212e[_0xde1b('0x1a')](_0x420884)['json'](_0x35ee00);}};}function respondWithFilteredResult(_0x946630,_0x3a86cf){return function(_0x59e81a){if(_0x59e81a){var _0x1ee14e=_0x59e81a[_0xde1b('0x1b')],_0x379740=_0x3a86cf[_0xde1b('0x1c')],_0x12e8c0=_0x3a86cf[_0xde1b('0x1c')]+_0x3a86cf[_0xde1b('0x1d')],_0x4c522b;if(_0x12e8c0>=_0x1ee14e){_0x12e8c0=_0x1ee14e;_0x4c522b=0xc8;}else{_0x4c522b=0xce;}_0x946630[_0xde1b('0x1a')](_0x4c522b);return _0x946630['set']('Content-Range',_0x379740+'-'+_0x12e8c0+'/'+_0x1ee14e)['json'](_0x59e81a);}return null;};}function patchUpdates(_0x1b3787){return function(_0x64d454){try{jsonpatch['apply'](_0x64d454,_0x1b3787,!![]);}catch(_0x42cc27){return BPromise['reject'](_0x42cc27);}return _0x64d454[_0xde1b('0x1e')]();};}function saveUpdates(_0x355c88,_0xf23a0e){return function(_0x56a024){if(_0x56a024){return _0x56a024[_0xde1b('0x1f')](_0x355c88)[_0xde1b('0x20')](function(_0x54781b){return _0x54781b;});}return null;};}function removeEntity(_0x11ede8,_0x40f00d){return function(_0xeb5a77){if(_0xeb5a77){return _0xeb5a77[_0xde1b('0x21')]()[_0xde1b('0x20')](function(){_0x11ede8['status'](0xcc)[_0xde1b('0x19')]();});}};}function handleEntityNotFound(_0x1207aa,_0x284780){return function(_0x8681dd){if(!_0x8681dd){_0x1207aa['sendStatus'](0x194);}return _0x8681dd;};}function handleError(_0x277a59,_0x50d68f){_0x50d68f=_0x50d68f||0x1f4;return function(_0x3d5e32){logger[_0xde1b('0x22')](_0x3d5e32[_0xde1b('0x23')]);if(_0x3d5e32[_0xde1b('0x24')]){delete _0x3d5e32['name'];}_0x277a59[_0xde1b('0x1a')](_0x50d68f)[_0xde1b('0x25')](_0x3d5e32);};}exports[_0xde1b('0x26')]=function(_0x4d0873,_0x229aa0){var _0x420500={},_0x5e99e1={},_0x5591e8={'count':0x0,'rows':[]};var _0x4586d6=db[_0xde1b('0x27')][_0xde1b('0x28')];_0x5e99e1[_0xde1b('0x29')]=_[_0xde1b('0x2a')](_0x4586d6);_0x5e99e1[_0xde1b('0x2b')]=_[_0xde1b('0x2a')](_0x4d0873['query']);_0x5e99e1[_0xde1b('0x2c')]=_['intersection'](_0x5e99e1[_0xde1b('0x29')],_0x5e99e1[_0xde1b('0x2b')]);_0x420500[_0xde1b('0x2d')]=_['intersection'](_0x5e99e1['model'],qs[_0xde1b('0x2e')](_0x4d0873[_0xde1b('0x2b')][_0xde1b('0x2e')]));_0x420500['attributes']=_0x420500[_0xde1b('0x2d')][_0xde1b('0x2f')]?_0x420500[_0xde1b('0x2d')]:_0x5e99e1[_0xde1b('0x29')];if(!_0x4d0873['query'][_0xde1b('0x30')](_0xde1b('0x31'))){_0x420500[_0xde1b('0x1d')]=qs[_0xde1b('0x1d')](_0x4d0873['query'][_0xde1b('0x1d')]);_0x420500[_0xde1b('0x1c')]=qs[_0xde1b('0x1c')](_0x4d0873[_0xde1b('0x2b')][_0xde1b('0x1c')]);}_0x420500[_0xde1b('0x32')]=qs['sort'](_0x4d0873[_0xde1b('0x2b')]['sort']);_0x420500[_0xde1b('0x33')]=qs[_0xde1b('0x2c')](_[_0xde1b('0x34')](_0x4d0873[_0xde1b('0x2b')],_0x5e99e1['filters']));if(_0x4d0873[_0xde1b('0x2b')][_0xde1b('0x35')]){_0x420500['where']=_[_0xde1b('0x36')](_0x420500[_0xde1b('0x33')],{'$or':_[_0xde1b('0x37')](_0x4586d6,function(_0x274f16){if(_0x274f16['type'][_0xde1b('0x38')]!==_0xde1b('0x39')){var _0x5eb9f6={};_0x5eb9f6[_0x274f16['field']]={'$like':'%'+_0x4d0873[_0xde1b('0x2b')][_0xde1b('0x35')]+'%'};return _0x5eb9f6;}})});}_0x420500=_[_0xde1b('0x36')]({},_0x420500,_0x4d0873[_0xde1b('0x3a')]);var _0x3f05df={'where':_0x420500[_0xde1b('0x33')]};return db[_0xde1b('0x27')][_0xde1b('0x1b')](_0x3f05df)['then'](function(_0x29efa0){_0x5591e8[_0xde1b('0x1b')]=_0x29efa0;if(_0x4d0873[_0xde1b('0x2b')][_0xde1b('0x3b')]){_0x420500[_0xde1b('0x3c')]=[{'all':!![]}];}return db[_0xde1b('0x27')][_0xde1b('0x3d')](_0x420500);})[_0xde1b('0x20')](function(_0x143cc1){_0x5591e8['rows']=_0x143cc1;return _0x5591e8;})[_0xde1b('0x20')](respondWithFilteredResult(_0x229aa0,_0x420500))[_0xde1b('0x3e')](handleError(_0x229aa0,null));};exports[_0xde1b('0x3f')]=function(_0x4bb478,_0x3b1dad){var _0x5cdc8b={'raw':!![],'where':{'id':_0x4bb478['params']['id']}},_0x28d0e9={};_0x28d0e9[_0xde1b('0x29')]=_[_0xde1b('0x2a')](db[_0xde1b('0x27')][_0xde1b('0x28')]);_0x28d0e9[_0xde1b('0x2b')]=_['keys'](_0x4bb478[_0xde1b('0x2b')]);_0x28d0e9['filters']=_['intersection'](_0x28d0e9[_0xde1b('0x29')],_0x28d0e9[_0xde1b('0x2b')]);_0x5cdc8b[_0xde1b('0x2d')]=_[_0xde1b('0x40')](_0x28d0e9['model'],qs[_0xde1b('0x2e')](_0x4bb478[_0xde1b('0x2b')][_0xde1b('0x2e')]));_0x5cdc8b[_0xde1b('0x2d')]=_0x5cdc8b['attributes']['length']?_0x5cdc8b[_0xde1b('0x2d')]:_0x28d0e9[_0xde1b('0x29')];if(_0x4bb478[_0xde1b('0x2b')][_0xde1b('0x3b')]){_0x5cdc8b[_0xde1b('0x3c')]=[{'all':!![]}];}_0x5cdc8b=_[_0xde1b('0x36')]({},_0x5cdc8b,_0x4bb478['options']);return db[_0xde1b('0x27')][_0xde1b('0x41')](_0x5cdc8b)[_0xde1b('0x20')](handleEntityNotFound(_0x3b1dad,null))[_0xde1b('0x20')](respondWithResult(_0x3b1dad,null))[_0xde1b('0x3e')](handleError(_0x3b1dad,null));};exports[_0xde1b('0x42')]=function(_0x553e7e,_0xeff23e){return db[_0xde1b('0x27')]['create'](_0x553e7e[_0xde1b('0x43')],{})[_0xde1b('0x20')](respondWithResult(_0xeff23e,0xc9))[_0xde1b('0x3e')](handleError(_0xeff23e,null));};exports[_0xde1b('0x1f')]=function(_0x3e8b04,_0x541831){if(_0x3e8b04['body']['id']){delete _0x3e8b04[_0xde1b('0x43')]['id'];}return db[_0xde1b('0x27')][_0xde1b('0x41')]({'where':{'id':_0x3e8b04['params']['id']}})[_0xde1b('0x20')](handleEntityNotFound(_0x541831,null))['then'](saveUpdates(_0x3e8b04['body'],null))[_0xde1b('0x20')](respondWithResult(_0x541831,null))[_0xde1b('0x3e')](handleError(_0x541831,null));};exports['destroy']=function(_0x23673c,_0x2811b7){return db[_0xde1b('0x27')][_0xde1b('0x41')]({'where':{'id':_0x23673c[_0xde1b('0x44')]['id']}})[_0xde1b('0x20')](handleEntityNotFound(_0x2811b7,null))[_0xde1b('0x20')](removeEntity(_0x2811b7,null))[_0xde1b('0x3e')](handleError(_0x2811b7,null));};
\ No newline at end of file
+var _0x7348=['model','keys','query','intersection','attributes','fields','length','hasOwnProperty','sort','where','filters','filter','merge','map','VIRTUAL','field','options','ZendeskField','include','findAll','rows','catch','show','params','find','create','body','update','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','path','to-csv','lodash','squel','crypto','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','count','offset','limit','set','Content-Range','json','reject','save','destroy','then','error','stack','name','send','index','rawAttributes'];(function(_0x24aba7,_0xaf2aec){var _0xda207b=function(_0x1cb051){while(--_0x1cb051){_0x24aba7['push'](_0x24aba7['shift']());}};_0xda207b(++_0xaf2aec);}(_0x7348,0x16b));var _0x8734=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x7348[_0x42cae2];return _0x5f256f;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x8734('0x0'));var rimraf=require(_0x8734('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x8734('0x2'));var rp=require(_0x8734('0x3'));var moment=require(_0x8734('0x4'));var BPromise=require(_0x8734('0x5'));var Mustache=require(_0x8734('0x6'));var util=require('util');var path=require(_0x8734('0x7'));var sox=require('sox');var csv=require(_0x8734('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x8734('0x9'));var squel=require(_0x8734('0xa'));var crypto=require(_0x8734('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x8734('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x8734('0xd'));var Redis=require('ioredis');var authService=require(_0x8734('0xe'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x8734('0xf'));var logger=require(_0x8734('0x10'))(_0x8734('0x11'));var utils=require(_0x8734('0x12'));var config=require('../../config/environment');var db=require(_0x8734('0x13'))['db'];function respondWithStatusCode(_0xc09672,_0x32b0be){_0x32b0be=_0x32b0be||0xcc;return function(_0x9c3bf3){if(_0x9c3bf3){return _0xc09672[_0x8734('0x14')](_0x32b0be);}return _0xc09672[_0x8734('0x15')](_0x32b0be)[_0x8734('0x16')]();};}function respondWithResult(_0x5f085c,_0x123b12){_0x123b12=_0x123b12||0xc8;return function(_0x4986b6){if(_0x4986b6){return _0x5f085c['status'](_0x123b12)['json'](_0x4986b6);}};}function respondWithFilteredResult(_0x117bf3,_0x16cf2d){return function(_0xcd2b64){if(_0xcd2b64){var _0x381cfb=_0xcd2b64[_0x8734('0x17')],_0x642d54=_0x16cf2d['offset'],_0x4a90aa=_0x16cf2d[_0x8734('0x18')]+_0x16cf2d[_0x8734('0x19')],_0x331872;if(_0x4a90aa>=_0x381cfb){_0x4a90aa=_0x381cfb;_0x331872=0xc8;}else{_0x331872=0xce;}_0x117bf3[_0x8734('0x15')](_0x331872);return _0x117bf3[_0x8734('0x1a')](_0x8734('0x1b'),_0x642d54+'-'+_0x4a90aa+'/'+_0x381cfb)[_0x8734('0x1c')](_0xcd2b64);}return null;};}function patchUpdates(_0x25f144){return function(_0x548f22){try{jsonpatch['apply'](_0x548f22,_0x25f144,!![]);}catch(_0x3d2e95){return BPromise[_0x8734('0x1d')](_0x3d2e95);}return _0x548f22[_0x8734('0x1e')]();};}function saveUpdates(_0x380097,_0x3e010c){return function(_0xdf974b){if(_0xdf974b){return _0xdf974b['update'](_0x380097)['then'](function(_0x4d85bf){return _0x4d85bf;});}return null;};}function removeEntity(_0x345cf3,_0x21fde7){return function(_0x5ee54a){if(_0x5ee54a){return _0x5ee54a[_0x8734('0x1f')]()[_0x8734('0x20')](function(){_0x345cf3[_0x8734('0x15')](0xcc)[_0x8734('0x16')]();});}};}function handleEntityNotFound(_0x538bc6,_0x25b002){return function(_0x4a022e){if(!_0x4a022e){_0x538bc6[_0x8734('0x14')](0x194);}return _0x4a022e;};}function handleError(_0xa65ce6,_0x25b87e){_0x25b87e=_0x25b87e||0x1f4;return function(_0x316fe6){logger[_0x8734('0x21')](_0x316fe6[_0x8734('0x22')]);if(_0x316fe6[_0x8734('0x23')]){delete _0x316fe6[_0x8734('0x23')];}_0xa65ce6['status'](_0x25b87e)[_0x8734('0x24')](_0x316fe6);};}exports[_0x8734('0x25')]=function(_0x3e7bcf,_0x3d66bc){var _0x14ea87={},_0x232170={},_0xa831f3={'count':0x0,'rows':[]};var _0x3acb61=db['ZendeskField'][_0x8734('0x26')];_0x232170[_0x8734('0x27')]=_[_0x8734('0x28')](_0x3acb61);_0x232170[_0x8734('0x29')]=_[_0x8734('0x28')](_0x3e7bcf[_0x8734('0x29')]);_0x232170['filters']=_[_0x8734('0x2a')](_0x232170[_0x8734('0x27')],_0x232170['query']);_0x14ea87[_0x8734('0x2b')]=_['intersection'](_0x232170[_0x8734('0x27')],qs[_0x8734('0x2c')](_0x3e7bcf[_0x8734('0x29')][_0x8734('0x2c')]));_0x14ea87[_0x8734('0x2b')]=_0x14ea87[_0x8734('0x2b')][_0x8734('0x2d')]?_0x14ea87['attributes']:_0x232170[_0x8734('0x27')];if(!_0x3e7bcf[_0x8734('0x29')][_0x8734('0x2e')]('nolimit')){_0x14ea87[_0x8734('0x19')]=qs[_0x8734('0x19')](_0x3e7bcf[_0x8734('0x29')][_0x8734('0x19')]);_0x14ea87[_0x8734('0x18')]=qs[_0x8734('0x18')](_0x3e7bcf[_0x8734('0x29')]['offset']);}_0x14ea87['order']=qs['sort'](_0x3e7bcf[_0x8734('0x29')][_0x8734('0x2f')]);_0x14ea87[_0x8734('0x30')]=qs[_0x8734('0x31')](_['pick'](_0x3e7bcf[_0x8734('0x29')],_0x232170[_0x8734('0x31')]));if(_0x3e7bcf[_0x8734('0x29')][_0x8734('0x32')]){_0x14ea87[_0x8734('0x30')]=_[_0x8734('0x33')](_0x14ea87['where'],{'$or':_[_0x8734('0x34')](_0x3acb61,function(_0x4f7324){if(_0x4f7324['type']['key']!==_0x8734('0x35')){var _0x2dfef9={};_0x2dfef9[_0x4f7324[_0x8734('0x36')]]={'$like':'%'+_0x3e7bcf[_0x8734('0x29')][_0x8734('0x32')]+'%'};return _0x2dfef9;}})});}_0x14ea87=_[_0x8734('0x33')]({},_0x14ea87,_0x3e7bcf[_0x8734('0x37')]);var _0x221a52={'where':_0x14ea87['where']};return db[_0x8734('0x38')]['count'](_0x221a52)[_0x8734('0x20')](function(_0x13b555){_0xa831f3['count']=_0x13b555;if(_0x3e7bcf[_0x8734('0x29')]['includeAll']){_0x14ea87[_0x8734('0x39')]=[{'all':!![]}];}return db[_0x8734('0x38')][_0x8734('0x3a')](_0x14ea87);})[_0x8734('0x20')](function(_0x7328c2){_0xa831f3[_0x8734('0x3b')]=_0x7328c2;return _0xa831f3;})[_0x8734('0x20')](respondWithFilteredResult(_0x3d66bc,_0x14ea87))[_0x8734('0x3c')](handleError(_0x3d66bc,null));};exports[_0x8734('0x3d')]=function(_0x2c84de,_0x34a7e5){var _0x2fea68={'raw':!![],'where':{'id':_0x2c84de[_0x8734('0x3e')]['id']}},_0x57f665={};_0x57f665[_0x8734('0x27')]=_[_0x8734('0x28')](db[_0x8734('0x38')][_0x8734('0x26')]);_0x57f665[_0x8734('0x29')]=_[_0x8734('0x28')](_0x2c84de[_0x8734('0x29')]);_0x57f665[_0x8734('0x31')]=_[_0x8734('0x2a')](_0x57f665['model'],_0x57f665[_0x8734('0x29')]);_0x2fea68[_0x8734('0x2b')]=_[_0x8734('0x2a')](_0x57f665[_0x8734('0x27')],qs[_0x8734('0x2c')](_0x2c84de[_0x8734('0x29')]['fields']));_0x2fea68['attributes']=_0x2fea68['attributes']['length']?_0x2fea68[_0x8734('0x2b')]:_0x57f665['model'];if(_0x2c84de[_0x8734('0x29')]['includeAll']){_0x2fea68[_0x8734('0x39')]=[{'all':!![]}];}_0x2fea68=_[_0x8734('0x33')]({},_0x2fea68,_0x2c84de[_0x8734('0x37')]);return db[_0x8734('0x38')][_0x8734('0x3f')](_0x2fea68)[_0x8734('0x20')](handleEntityNotFound(_0x34a7e5,null))['then'](respondWithResult(_0x34a7e5,null))[_0x8734('0x3c')](handleError(_0x34a7e5,null));};exports[_0x8734('0x40')]=function(_0x379a38,_0x3ffd72){return db[_0x8734('0x38')][_0x8734('0x40')](_0x379a38[_0x8734('0x41')],{})[_0x8734('0x20')](respondWithResult(_0x3ffd72,0xc9))['catch'](handleError(_0x3ffd72,null));};exports[_0x8734('0x42')]=function(_0xe5bb27,_0x3045ac){if(_0xe5bb27[_0x8734('0x41')]['id']){delete _0xe5bb27['body']['id'];}return db[_0x8734('0x38')][_0x8734('0x3f')]({'where':{'id':_0xe5bb27[_0x8734('0x3e')]['id']}})[_0x8734('0x20')](handleEntityNotFound(_0x3045ac,null))[_0x8734('0x20')](saveUpdates(_0xe5bb27['body'],null))[_0x8734('0x20')](respondWithResult(_0x3045ac,null))['catch'](handleError(_0x3045ac,null));};exports[_0x8734('0x1f')]=function(_0x5ece7c,_0x14ea98){return db['ZendeskField'][_0x8734('0x3f')]({'where':{'id':_0x5ece7c['params']['id']}})['then'](handleEntityNotFound(_0x14ea98,null))['then'](removeEntity(_0x14ea98,null))[_0x8734('0x3c')](handleError(_0x14ea98,null));};
\ No newline at end of file
index c1c4f80..57240d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x74ce=['path','../../config/environment','./intZendeskField.attributes','exports','define','int_zendesk_fields','lodash','util','../../config/logger','moment','request-promise'];(function(_0x50b293,_0x2186e3){var _0x36c290=function(_0x334280){while(--_0x334280){_0x50b293['push'](_0x50b293['shift']());}};_0x36c290(++_0x2186e3);}(_0x74ce,0x1c9));var _0xe74c=function(_0x50d0f7,_0x33225c){_0x50d0f7=_0x50d0f7-0x0;var _0x3a99ce=_0x74ce[_0x50d0f7];return _0x3a99ce;};'use strict';var _=require(_0xe74c('0x0'));var util=require(_0xe74c('0x1'));var logger=require(_0xe74c('0x2'))('api');var moment=require(_0xe74c('0x3'));var BPromise=require('bluebird');var rp=require(_0xe74c('0x4'));var fs=require('fs');var path=require(_0xe74c('0x5'));var rimraf=require('rimraf');var config=require(_0xe74c('0x6'));var attributes=require(_0xe74c('0x7'));module[_0xe74c('0x8')]=function(_0x4c1457,_0x295ad8){return _0x4c1457[_0xe74c('0x9')]('ZendeskField',attributes,{'tableName':_0xe74c('0xa'),'paranoid':![],'indexes':[{'name':'zendesk_unique_index','fields':['idField','FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x537e=['lodash','util','moment','bluebird','request-promise','rimraf','../../config/environment','./intZendeskField.attributes','exports','ZendeskField','int_zendesk_fields','idField'];(function(_0x32f241,_0x2fa830){var _0x84107=function(_0x56fd2a){while(--_0x56fd2a){_0x32f241['push'](_0x32f241['shift']());}};_0x84107(++_0x2fa830);}(_0x537e,0x168));var _0xe537=function(_0x58924e,_0x183128){_0x58924e=_0x58924e-0x0;var _0x4c9f62=_0x537e[_0x58924e];return _0x4c9f62;};'use strict';var _=require(_0xe537('0x0'));var util=require(_0xe537('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0xe537('0x2'));var BPromise=require(_0xe537('0x3'));var rp=require(_0xe537('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0xe537('0x5'));var config=require(_0xe537('0x6'));var attributes=require(_0xe537('0x7'));module[_0xe537('0x8')]=function(_0x39591b,_0x17eea9){return _0x39591b['define'](_0xe537('0x9'),attributes,{'tableName':_0xe537('0xa'),'paranoid':![],'indexes':[{'name':'zendesk_unique_index','fields':[_0xe537('0xb'),'FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 30a4bea..9039f94 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4f7b=['ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','then','info','ZendeskField,\x20%s,\x20%s','request\x20sent','ZendeskField,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird'];(function(_0x3d8c48,_0x37cc95){var _0x3b2eeb=function(_0x5b6b97){while(--_0x5b6b97){_0x3d8c48['push'](_0x3d8c48['shift']());}};_0x3b2eeb(++_0x37cc95);}(_0x4f7b,0x13e));var _0xb4f7=function(_0x1efd91,_0x5cd573){_0x1efd91=_0x1efd91-0x0;var _0xca5243=_0x4f7b[_0x1efd91];return _0xca5243;};'use strict';var _=require(_0xb4f7('0x0'));var util=require(_0xb4f7('0x1'));var moment=require(_0xb4f7('0x2'));var BPromise=require(_0xb4f7('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xb4f7('0x4'));var db=require(_0xb4f7('0x5'))['db'];var utils=require(_0xb4f7('0x6'));var logger=require(_0xb4f7('0x7'))(_0xb4f7('0x8'));var config=require(_0xb4f7('0x9'));var jayson=require(_0xb4f7('0xa'));var client=jayson[_0xb4f7('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x27872e,_0x5e7b94,_0x179391){return new BPromise(function(_0xf56d08,_0x2849ed){return client['request'](_0x27872e,_0x179391)[_0xb4f7('0xc')](function(_0x5af41f){logger[_0xb4f7('0xd')](_0xb4f7('0xe'),_0x5e7b94,_0xb4f7('0xf'));logger['debug'](_0xb4f7('0x10'),_0x5e7b94,_0xb4f7('0xf'),JSON[_0xb4f7('0x11')](_0x5af41f));if(_0x5af41f[_0xb4f7('0x12')]){if(_0x5af41f[_0xb4f7('0x12')][_0xb4f7('0x13')]===0x1f4){logger[_0xb4f7('0x12')](_0xb4f7('0xe'),_0x5e7b94,_0x5af41f['error'][_0xb4f7('0x14')]);return _0x2849ed(_0x5af41f[_0xb4f7('0x12')][_0xb4f7('0x14')]);}logger[_0xb4f7('0x12')](_0xb4f7('0xe'),_0x5e7b94,_0x5af41f[_0xb4f7('0x12')]['message']);return _0xf56d08(_0x5af41f[_0xb4f7('0x12')]['message']);}else{logger[_0xb4f7('0xd')](_0xb4f7('0xe'),_0x5e7b94,_0xb4f7('0xf'));_0xf56d08(_0x5af41f[_0xb4f7('0x15')][_0xb4f7('0x14')]);}})[_0xb4f7('0x16')](function(_0xbc599a){logger[_0xb4f7('0x12')](_0xb4f7('0xe'),_0x5e7b94,_0xbc599a);_0x2849ed(_0xbc599a);});});}
\ No newline at end of file
+var _0x4bde=['catch','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','debug','ZendeskField,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','ZendeskField,\x20%s,\x20%s','message','info','result'];(function(_0x134745,_0x3c7be0){var _0x11c05b=function(_0x3d67c7){while(--_0x3d67c7){_0x134745['push'](_0x134745['shift']());}};_0x11c05b(++_0x3c7be0);}(_0x4bde,0x1b1));var _0xe4bd=function(_0x2a977f,_0x248bb8){_0x2a977f=_0x2a977f-0x0;var _0x3f8c63=_0x4bde[_0x2a977f];return _0x3f8c63;};'use strict';var _=require(_0xe4bd('0x0'));var util=require(_0xe4bd('0x1'));var moment=require(_0xe4bd('0x2'));var BPromise=require('bluebird');var rs=require(_0xe4bd('0x3'));var fs=require('fs');var Redis=require(_0xe4bd('0x4'));var db=require(_0xe4bd('0x5'))['db'];var utils=require(_0xe4bd('0x6'));var logger=require('../../config/logger')(_0xe4bd('0x7'));var config=require(_0xe4bd('0x8'));var jayson=require(_0xe4bd('0x9'));var client=jayson[_0xe4bd('0xa')][_0xe4bd('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x4008eb,_0x4c933b,_0x2cf33d){return new BPromise(function(_0xbd04ce,_0x262295){return client[_0xe4bd('0xc')](_0x4008eb,_0x2cf33d)[_0xe4bd('0xd')](function(_0x3ef7e7){logger['info']('ZendeskField,\x20%s,\x20%s',_0x4c933b,'request\x20sent');logger[_0xe4bd('0xe')](_0xe4bd('0xf'),_0x4c933b,_0xe4bd('0x10'),JSON['stringify'](_0x3ef7e7));if(_0x3ef7e7[_0xe4bd('0x11')]){if(_0x3ef7e7[_0xe4bd('0x11')][_0xe4bd('0x12')]===0x1f4){logger[_0xe4bd('0x11')]('ZendeskField,\x20%s,\x20%s',_0x4c933b,_0x3ef7e7[_0xe4bd('0x11')]['message']);return _0x262295(_0x3ef7e7[_0xe4bd('0x11')]['message']);}logger[_0xe4bd('0x11')](_0xe4bd('0x13'),_0x4c933b,_0x3ef7e7[_0xe4bd('0x11')][_0xe4bd('0x14')]);return _0xbd04ce(_0x3ef7e7[_0xe4bd('0x11')][_0xe4bd('0x14')]);}else{logger[_0xe4bd('0x15')](_0xe4bd('0x13'),_0x4c933b,_0xe4bd('0x10'));_0xbd04ce(_0x3ef7e7[_0xe4bd('0x16')][_0xe4bd('0x14')]);}})[_0xe4bd('0x17')](function(_0x470cd1){logger['error'](_0xe4bd('0x13'),_0x4c933b,_0x470cd1);_0x262295(_0x470cd1);});});}
\ No newline at end of file
index a7e4989..52ec958 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbaf0=['index','/:id','show','/:id/configurations','getConfigurations','/:id/fields','getFields','post','create','update','delete','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./intZohoAccount.controller','get','isAuthenticated'];(function(_0x4cbb8e,_0x1047c8){var _0x17846f=function(_0x29e1e0){while(--_0x29e1e0){_0x4cbb8e['push'](_0x4cbb8e['shift']());}};_0x17846f(++_0x1047c8);}(_0xbaf0,0x12a));var _0x0baf=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xbaf0[_0x14add3];return _0x4a174f;};'use strict';var multer=require('multer');var util=require(_0x0baf('0x0'));var path=require(_0x0baf('0x1'));var timeout=require(_0x0baf('0x2'));var express=require(_0x0baf('0x3'));var router=express[_0x0baf('0x4')]();var auth=require(_0x0baf('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x0baf('0x6'));var controller=require(_0x0baf('0x7'));router[_0x0baf('0x8')]('/',auth[_0x0baf('0x9')](),controller[_0x0baf('0xa')]);router[_0x0baf('0x8')](_0x0baf('0xb'),auth[_0x0baf('0x9')](),controller[_0x0baf('0xc')]);router['get'](_0x0baf('0xd'),auth['isAuthenticated'](),controller[_0x0baf('0xe')]);router[_0x0baf('0x8')](_0x0baf('0xf'),auth[_0x0baf('0x9')](),controller[_0x0baf('0x10')]);router[_0x0baf('0x11')]('/',auth[_0x0baf('0x9')](),controller[_0x0baf('0x12')]);router[_0x0baf('0x11')](_0x0baf('0xd'),auth[_0x0baf('0x9')](),controller['addConfiguration']);router['put'](_0x0baf('0xb'),auth[_0x0baf('0x9')](),controller[_0x0baf('0x13')]);router[_0x0baf('0x14')]('/:id',auth[_0x0baf('0x9')](),controller['destroy']);module[_0x0baf('0x15')]=router;
\ No newline at end of file
+var _0xf7b4=['express','../../components/interaction/service','../../config/environment','./intZohoAccount.controller','get','isAuthenticated','index','/:id','show','/:id/configurations','/:id/fields','getFields','post','create','update','delete','destroy','exports','multer','connect-timeout'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0xf7b4,0x152));var _0x4f7b=function(_0x1c734d,_0x3aa648){_0x1c734d=_0x1c734d-0x0;var _0x220218=_0xf7b4[_0x1c734d];return _0x220218;};'use strict';var multer=require(_0x4f7b('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x4f7b('0x1'));var express=require(_0x4f7b('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x4f7b('0x3'));var config=require(_0x4f7b('0x4'));var controller=require(_0x4f7b('0x5'));router[_0x4f7b('0x6')]('/',auth[_0x4f7b('0x7')](),controller[_0x4f7b('0x8')]);router[_0x4f7b('0x6')](_0x4f7b('0x9'),auth[_0x4f7b('0x7')](),controller[_0x4f7b('0xa')]);router[_0x4f7b('0x6')](_0x4f7b('0xb'),auth[_0x4f7b('0x7')](),controller['getConfigurations']);router[_0x4f7b('0x6')](_0x4f7b('0xc'),auth['isAuthenticated'](),controller[_0x4f7b('0xd')]);router[_0x4f7b('0xe')]('/',auth[_0x4f7b('0x7')](),controller[_0x4f7b('0xf')]);router[_0x4f7b('0xe')]('/:id/configurations',auth[_0x4f7b('0x7')](),controller['addConfiguration']);router['put'](_0x4f7b('0x9'),auth[_0x4f7b('0x7')](),controller[_0x4f7b('0x10')]);router[_0x4f7b('0x11')]('/:id',auth[_0x4f7b('0x7')](),controller[_0x4f7b('0x12')]);module[_0x4f7b('0x13')]=router;
\ No newline at end of file
index 5d27c5b..18af72f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb074=['sequelize','STRING'];(function(_0x43b9da,_0x539c50){var _0x30bef7=function(_0x324db1){while(--_0x324db1){_0x43b9da['push'](_0x43b9da['shift']());}};_0x30bef7(++_0x539c50);}(_0xb074,0x11a));var _0x4b07=function(_0x164039,_0x517559){_0x164039=_0x164039-0x0;var _0x3c6466=_0xb074[_0x164039];return _0x3c6466;};'use strict';var Sequelize=require(_0x4b07('0x0'));module['exports']={'name':{'type':Sequelize[_0x4b07('0x1')]},'description':{'type':Sequelize['STRING']},'authToken':{'type':Sequelize[_0x4b07('0x1')]},'host':{'type':Sequelize[_0x4b07('0x1')]},'serverUrl':{'type':Sequelize[_0x4b07('0x1')]}};
\ No newline at end of file
+var _0xb8be=['exports','STRING'];(function(_0x1a3184,_0x453b7d){var _0x13bd42=function(_0x14c57e){while(--_0x14c57e){_0x1a3184['push'](_0x1a3184['shift']());}};_0x13bd42(++_0x453b7d);}(_0xb8be,0xde));var _0xeb8b=function(_0x308213,_0x224541){_0x308213=_0x308213-0x0;var _0x2e1619=_0xb8be[_0x308213];return _0x2e1619;};'use strict';var Sequelize=require('sequelize');module[_0xeb8b('0x0')]={'name':{'type':Sequelize[_0xeb8b('0x1')]},'description':{'type':Sequelize[_0xeb8b('0x1')]},'authToken':{'type':Sequelize[_0xeb8b('0x1')]},'host':{'type':Sequelize[_0xeb8b('0x1')]},'serverUrl':{'type':Sequelize[_0xeb8b('0x1')]}};
\ No newline at end of file
index 2898bee..91e6803 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x72d7=['findOne','addConfiguration','AccountId','Subjects','getSubjects','channel','Descriptions','getDescriptions','ZohoConfiguration','getFields','authToken','host','slice','substring','lastIndexOf','https://crm.%s/crm/private/json/Calls/getFields','crmapi','response','Calls','section','Call\x20Purpose','includes','push','customfield','true','val','test','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','statusCode','html-pdf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','squel','crypto','jsforce','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','../../components/integrations/configuration','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','info','ZohoAccount,\x20%s,\x20%s','request\x20sent','debug','ZohoAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','status','json','offset','limit','set','Content-Range','apply','reject','save','update','then','end','sendStatus','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','type','key','field','ZohoAccount','count','includeAll','findAll','show','fields','options','find','create','body','params','getConfigurations'];(function(_0x421f8b,_0xe4499e){var _0x46dafe=function(_0x4b4d71){while(--_0x4b4d71){_0x421f8b['push'](_0x421f8b['shift']());}};_0x46dafe(++_0xe4499e);}(_0x72d7,0x8e));var _0x772d=function(_0x49ca18,_0x5e6d05){_0x49ca18=_0x49ca18-0x0;var _0x145d54=_0x72d7[_0x49ca18];return _0x145d54;};'use strict';var pdf=require(_0x772d('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x772d('0x1'));var jsonpatch=require(_0x772d('0x2'));var rp=require(_0x772d('0x3'));var moment=require(_0x772d('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x772d('0x5'));var util=require(_0x772d('0x6'));var path=require(_0x772d('0x7'));var sox=require(_0x772d('0x8'));var csv=require(_0x772d('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x772d('0xa'));var crypto=require(_0x772d('0xb'));var jsforce=require(_0x772d('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x772d('0x9'));var querystring=require('querystring');var Papa=require(_0x772d('0xd'));var Redis=require(_0x772d('0xe'));var authService=require('../../components/auth/service');var qs=require(_0x772d('0xf'));var hardwareService=require(_0x772d('0x10'));var logger=require(_0x772d('0x11'))(_0x772d('0x12'));var utils=require('../../config/utils');var config=require(_0x772d('0x13'));var db=require(_0x772d('0x14'))['db'];var integrations=require(_0x772d('0x15'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function checkPasswordPattern(_0xdd67fc,_0x47cec3,_0x3864ec){if(_0x3864ec){var _0x273833=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x273833['test'](_0x47cec3)){return _0xdd67fc;}else{throw new Error(_0x772d('0x16'));}}else{return _0xdd67fc;}}function respondWithRpcPromise(_0x43ba46,_0x259774,_0x2c7122,_0x338e2b){return new BPromise(function(_0x2d16d4,_0x10f651){var _0x5608ee=_0x338e2b||client;return _0x5608ee[_0x772d('0x17')](_0x43ba46,_0x2c7122)['then'](function(_0x4f3f6b){logger[_0x772d('0x18')](_0x772d('0x19'),_0x259774,_0x772d('0x1a'));logger[_0x772d('0x1b')](_0x772d('0x1c'),_0x259774,_0x772d('0x1a'),JSON[_0x772d('0x1d')](_0x4f3f6b));if(_0x4f3f6b[_0x772d('0x1e')]){if(_0x4f3f6b[_0x772d('0x1e')][_0x772d('0x1f')]===0x1f4){logger[_0x772d('0x1e')]('ZohoAccount,\x20%s,\x20%s',_0x259774,_0x4f3f6b['error']['message']);return _0x10f651(_0x4f3f6b[_0x772d('0x1e')][_0x772d('0x20')]);}logger[_0x772d('0x1e')](_0x772d('0x19'),_0x259774,_0x4f3f6b[_0x772d('0x1e')]['message']);return _0x2d16d4(_0x4f3f6b[_0x772d('0x1e')][_0x772d('0x20')]);}else{logger[_0x772d('0x18')]('ZohoAccount,\x20%s,\x20%s',_0x259774,_0x772d('0x1a'));_0x2d16d4(_0x4f3f6b['result'][_0x772d('0x20')]);}})[_0x772d('0x21')](function(_0x4bac6d){logger[_0x772d('0x1e')](_0x772d('0x19'),_0x259774,_0x4bac6d);_0x10f651(_0x4bac6d);});});}function respondWithStatusCode(_0x1c8f0a,_0x60e3df){_0x60e3df=_0x60e3df||0xcc;return function(_0x522a0f){if(_0x522a0f){return _0x1c8f0a['sendStatus'](_0x60e3df);}return _0x1c8f0a['status'](_0x60e3df)['end']();};}function respondWithResult(_0x159766,_0x228c46){_0x228c46=_0x228c46||0xc8;return function(_0x4882ad){if(_0x4882ad){return _0x159766[_0x772d('0x22')](_0x228c46)[_0x772d('0x23')](_0x4882ad);}};}function respondWithFilteredResult(_0x5f189a,_0x5bedfa){return function(_0x25c2fd){if(_0x25c2fd){var _0x6a4cc7=_0x25c2fd['count'],_0xe601ec=_0x5bedfa['offset'],_0x332030=_0x5bedfa[_0x772d('0x24')]+_0x5bedfa[_0x772d('0x25')],_0x4964be;if(_0x332030>=_0x6a4cc7){_0x332030=_0x6a4cc7;_0x4964be=0xc8;}else{_0x4964be=0xce;}_0x5f189a[_0x772d('0x22')](_0x4964be);return _0x5f189a[_0x772d('0x26')](_0x772d('0x27'),_0xe601ec+'-'+_0x332030+'/'+_0x6a4cc7)[_0x772d('0x23')](_0x25c2fd);}return null;};}function patchUpdates(_0x6a00c){return function(_0x533dd1){try{jsonpatch[_0x772d('0x28')](_0x533dd1,_0x6a00c,!![]);}catch(_0x225faa){return BPromise[_0x772d('0x29')](_0x225faa);}return _0x533dd1[_0x772d('0x2a')]();};}function saveUpdates(_0x170215,_0x44bbf8){return function(_0x410733){if(_0x410733){return _0x410733[_0x772d('0x2b')](_0x170215)[_0x772d('0x2c')](function(_0x352783){return _0x352783;});}return null;};}function removeEntity(_0x2339bf,_0x29d9ae){return function(_0x267abd){if(_0x267abd){return _0x267abd['destroy']()[_0x772d('0x2c')](function(){_0x2339bf[_0x772d('0x22')](0xcc)[_0x772d('0x2d')]();});}};}function handleEntityNotFound(_0x1a14b1,_0x1478ae){return function(_0x252338){if(!_0x252338){_0x1a14b1[_0x772d('0x2e')](0x194);}return _0x252338;};}function handleError(_0x339f80,_0x365c16){_0x365c16=_0x365c16||0x1f4;return function(_0x1a2bc3){logger[_0x772d('0x1e')](_0x1a2bc3[_0x772d('0x2f')]);if(_0x1a2bc3[_0x772d('0x30')]){delete _0x1a2bc3[_0x772d('0x30')];}_0x339f80[_0x772d('0x22')](_0x365c16)[_0x772d('0x31')](_0x1a2bc3);};}exports[_0x772d('0x32')]=function(_0x33c47b,_0x75f76f){var _0x49e6e1={},_0x58b3e1={},_0x45af6d={'count':0x0,'rows':[]};var _0x340917=db['ZohoAccount'][_0x772d('0x33')];_0x58b3e1[_0x772d('0x34')]=_[_0x772d('0x35')](_0x340917);_0x58b3e1[_0x772d('0x36')]=_[_0x772d('0x35')](_0x33c47b['query']);_0x58b3e1[_0x772d('0x37')]=_[_0x772d('0x38')](_0x58b3e1[_0x772d('0x34')],_0x58b3e1[_0x772d('0x36')]);_0x49e6e1['attributes']=_['intersection'](_0x58b3e1[_0x772d('0x34')],qs['fields'](_0x33c47b[_0x772d('0x36')]['fields']));_0x49e6e1[_0x772d('0x39')]=_0x49e6e1[_0x772d('0x39')][_0x772d('0x3a')]?_0x49e6e1[_0x772d('0x39')]:_0x58b3e1[_0x772d('0x34')];if(!_0x33c47b[_0x772d('0x36')][_0x772d('0x3b')](_0x772d('0x3c'))){_0x49e6e1[_0x772d('0x25')]=qs[_0x772d('0x25')](_0x33c47b[_0x772d('0x36')][_0x772d('0x25')]);_0x49e6e1[_0x772d('0x24')]=qs[_0x772d('0x24')](_0x33c47b['query'][_0x772d('0x24')]);}_0x49e6e1[_0x772d('0x3d')]=qs['sort'](_0x33c47b[_0x772d('0x36')][_0x772d('0x3e')]);_0x49e6e1[_0x772d('0x3f')]=qs['filters'](_['pick'](_0x33c47b[_0x772d('0x36')],_0x58b3e1[_0x772d('0x37')]));if(_0x33c47b[_0x772d('0x36')][_0x772d('0x40')]){_0x49e6e1['where']=_[_0x772d('0x41')](_0x49e6e1[_0x772d('0x3f')],{'$or':_[_0x772d('0x42')](_0x340917,function(_0xba2ac5){if(_0xba2ac5[_0x772d('0x43')][_0x772d('0x44')]!=='VIRTUAL'){var _0x2fc77b={};_0x2fc77b[_0xba2ac5[_0x772d('0x45')]]={'$like':'%'+_0x33c47b[_0x772d('0x36')][_0x772d('0x40')]+'%'};return _0x2fc77b;}})});}_0x49e6e1=_[_0x772d('0x41')]({},_0x49e6e1,_0x33c47b['options']);var _0x52c9bd={'where':_0x49e6e1[_0x772d('0x3f')]};return db[_0x772d('0x46')][_0x772d('0x47')](_0x52c9bd)[_0x772d('0x2c')](function(_0x504d70){_0x45af6d['count']=_0x504d70;if(_0x33c47b['query'][_0x772d('0x48')]){_0x49e6e1['include']=[{'all':!![]}];}return db[_0x772d('0x46')][_0x772d('0x49')](_0x49e6e1);})[_0x772d('0x2c')](function(_0x334afa){_0x45af6d['rows']=_0x334afa;return _0x45af6d;})['then'](respondWithFilteredResult(_0x75f76f,_0x49e6e1))[_0x772d('0x21')](handleError(_0x75f76f,null));};exports[_0x772d('0x4a')]=function(_0x263b43,_0x508ac9){var _0xc0940e={'raw':![],'where':{'id':_0x263b43['params']['id']}},_0x13bd3f={};_0x13bd3f[_0x772d('0x34')]=_[_0x772d('0x35')](db[_0x772d('0x46')][_0x772d('0x33')]);_0x13bd3f[_0x772d('0x36')]=_[_0x772d('0x35')](_0x263b43['query']);_0x13bd3f[_0x772d('0x37')]=_['intersection'](_0x13bd3f[_0x772d('0x34')],_0x13bd3f[_0x772d('0x36')]);_0xc0940e['attributes']=_[_0x772d('0x38')](_0x13bd3f[_0x772d('0x34')],qs[_0x772d('0x4b')](_0x263b43[_0x772d('0x36')][_0x772d('0x4b')]));_0xc0940e[_0x772d('0x39')]=_0xc0940e[_0x772d('0x39')][_0x772d('0x3a')]?_0xc0940e['attributes']:_0x13bd3f[_0x772d('0x34')];if(_0x263b43[_0x772d('0x36')][_0x772d('0x48')]){_0xc0940e['include']=[{'all':!![]}];}_0xc0940e=_[_0x772d('0x41')]({},_0xc0940e,_0x263b43[_0x772d('0x4c')]);return db[_0x772d('0x46')][_0x772d('0x4d')](_0xc0940e)[_0x772d('0x2c')](handleEntityNotFound(_0x508ac9,null))['then'](respondWithResult(_0x508ac9,null))[_0x772d('0x21')](handleError(_0x508ac9,null));};exports[_0x772d('0x4e')]=function(_0x40eae4,_0x1348a8){return db[_0x772d('0x46')][_0x772d('0x4e')](_0x40eae4[_0x772d('0x4f')],{})['then'](respondWithResult(_0x1348a8,0xc9))[_0x772d('0x21')](handleError(_0x1348a8,null));};exports['update']=function(_0x269eeb,_0xe68153){if(_0x269eeb[_0x772d('0x4f')]['id']){delete _0x269eeb[_0x772d('0x4f')]['id'];}return db[_0x772d('0x46')][_0x772d('0x4d')]({'where':{'id':_0x269eeb[_0x772d('0x50')]['id']}})[_0x772d('0x2c')](handleEntityNotFound(_0xe68153,null))[_0x772d('0x2c')](saveUpdates(_0x269eeb[_0x772d('0x4f')],null))[_0x772d('0x2c')](respondWithResult(_0xe68153,null))[_0x772d('0x21')](handleError(_0xe68153,null));};exports['destroy']=function(_0x5b93d3,_0x5c4321){return db[_0x772d('0x46')][_0x772d('0x4d')]({'where':{'id':_0x5b93d3[_0x772d('0x50')]['id']}})[_0x772d('0x2c')](handleEntityNotFound(_0x5c4321,null))[_0x772d('0x2c')](removeEntity(_0x5c4321,null))[_0x772d('0x21')](handleError(_0x5c4321,null));};exports[_0x772d('0x51')]=function(_0x49b3eb,_0x313206,_0x25093a){var _0x58e03c={};var _0x3c3570={};var _0x510b50;var _0x3533ac;return db['ZohoAccount'][_0x772d('0x52')]({'where':{'id':_0x49b3eb[_0x772d('0x50')]['id']}})[_0x772d('0x2c')](handleEntityNotFound(_0x313206,null))[_0x772d('0x2c')](function(_0x1f4fcc){if(_0x1f4fcc){_0x510b50=_0x1f4fcc;_0x3c3570['model']=_['keys'](db['ZohoConfiguration']['rawAttributes']);_0x3c3570[_0x772d('0x36')]=_[_0x772d('0x35')](_0x49b3eb[_0x772d('0x36')]);_0x3c3570[_0x772d('0x37')]=_[_0x772d('0x38')](_0x3c3570['model'],_0x3c3570[_0x772d('0x36')]);_0x58e03c['attributes']=_['intersection'](_0x3c3570[_0x772d('0x34')],qs['fields'](_0x49b3eb[_0x772d('0x36')]['fields']));_0x58e03c[_0x772d('0x39')]=_0x58e03c[_0x772d('0x39')][_0x772d('0x3a')]?_0x58e03c[_0x772d('0x39')]:_0x3c3570[_0x772d('0x34')];_0x58e03c[_0x772d('0x3d')]=qs['sort'](_0x49b3eb['query'][_0x772d('0x3e')]);_0x58e03c[_0x772d('0x3f')]=qs[_0x772d('0x37')](_['pick'](_0x49b3eb['query'],_0x3c3570['filters']));if(_0x49b3eb[_0x772d('0x36')][_0x772d('0x40')]){_0x58e03c[_0x772d('0x3f')]=_[_0x772d('0x41')](_0x58e03c[_0x772d('0x3f')],{'$or':_[_0x772d('0x42')](_0x58e03c[_0x772d('0x39')],function(_0x3d409d){var _0x167124={};_0x167124[_0x3d409d]={'$like':'%'+_0x49b3eb['query'][_0x772d('0x40')]+'%'};return _0x167124;})});}_0x58e03c=_[_0x772d('0x41')]({},_0x58e03c,_0x49b3eb[_0x772d('0x4c')]);return _0x510b50[_0x772d('0x51')](_0x58e03c);}})[_0x772d('0x2c')](function(_0x21977f){if(_0x21977f){_0x3533ac=_0x21977f[_0x772d('0x3a')];if(!_0x49b3eb['query']['hasOwnProperty']('nolimit')){_0x58e03c[_0x772d('0x25')]=qs[_0x772d('0x25')](_0x49b3eb[_0x772d('0x36')][_0x772d('0x25')]);_0x58e03c[_0x772d('0x24')]=qs[_0x772d('0x24')](_0x49b3eb[_0x772d('0x36')][_0x772d('0x24')]);}return _0x510b50[_0x772d('0x51')](_0x58e03c);}})[_0x772d('0x2c')](function(_0x2090d7){if(_0x2090d7){return _0x2090d7?{'count':_0x3533ac,'rows':_0x2090d7}:null;}})[_0x772d('0x2c')](respondWithResult(_0x313206,null))[_0x772d('0x21')](handleError(_0x313206,null));};exports[_0x772d('0x53')]=function(_0x3ea673,_0x3f6305,_0x236fbe){if(_0x3ea673[_0x772d('0x4f')]['id']){delete _0x3ea673[_0x772d('0x4f')]['id'];}return db[_0x772d('0x46')][_0x772d('0x52')]({'where':{'id':_0x3ea673[_0x772d('0x50')]['id']}})[_0x772d('0x2c')](handleEntityNotFound(_0x3f6305,null))[_0x772d('0x2c')](function(_0x16d095){if(_0x16d095){_0x3ea673[_0x772d('0x4f')][_0x772d('0x54')]=_0x16d095['id'];_0x3ea673[_0x772d('0x4f')][_0x772d('0x55')]=integrations[_0x772d('0x56')](_0x3ea673['body'][_0x772d('0x57')],_0x3ea673[_0x772d('0x4f')][_0x772d('0x43')]);_0x3ea673[_0x772d('0x4f')][_0x772d('0x58')]=integrations[_0x772d('0x59')](_0x3ea673['body']['channel'],_0x3ea673['body'][_0x772d('0x43')]);return db[_0x772d('0x5a')][_0x772d('0x4e')](_0x3ea673[_0x772d('0x4f')],{'include':[{'model':db['ZohoField'],'as':_0x772d('0x55')},{'model':db['ZohoField'],'as':'Descriptions'}]});}return null;})[_0x772d('0x2c')](respondWithResult(_0x3f6305,null))['catch'](handleError(_0x3f6305,null));};exports[_0x772d('0x5b')]=function(_0x563c46,_0x32cdea,_0x1d173b){var _0x23344b='';return db['ZohoAccount'][_0x772d('0x52')]({'where':{'id':_0x563c46['params']['id']},'attributes':['id','host',_0x772d('0x5c')]})[_0x772d('0x2c')](handleEntityNotFound(_0x32cdea,null))['then'](function(_0x28fa96){if(_0x28fa96){_0x23344b=_0x28fa96[_0x772d('0x5d')];var _0x5d7843=_0x23344b[_0x772d('0x5e')](-0x1);if(_0x5d7843==='/'){_0x23344b=_0x23344b[_0x772d('0x5f')](0x0,_0x23344b[_0x772d('0x60')](_0x5d7843));}return rp({'method':'GET','uri':util['format'](_0x772d('0x61'),_0x23344b),'qs':{'authtoken':_0x28fa96[_0x772d('0x5c')],'scope':_0x772d('0x62')},'json':!![]});}})[_0x772d('0x2c')](function(_0x985e5e){if(_0x985e5e){if(_0x985e5e[_0x772d('0x63')]&&_0x985e5e[_0x772d('0x63')][_0x772d('0x1e')]){throw new Error(_0x985e5e['response'][_0x772d('0x1e')][_0x772d('0x20')]);}var _0xe34b8a=[];if(_0x985e5e[_0x772d('0x64')]&&_0x985e5e[_0x772d('0x64')][_0x772d('0x65')]){if(_0x985e5e[_0x772d('0x64')]['section']['FL']){var _0x4ddc2b=[_0x772d('0x66')];for(var _0x580a7d=0x0,_0x5a8faf=_0x985e5e['Calls'][_0x772d('0x65')]['FL'][_0x772d('0x3a')];_0x580a7d<_0x5a8faf;_0x580a7d++){if(_[_0x772d('0x67')](_0x4ddc2b,_0x985e5e[_0x772d('0x64')][_0x772d('0x65')]['FL'][_0x580a7d]['dv'])){_0xe34b8a[_0x772d('0x68')]({'id':_0x985e5e[_0x772d('0x64')]['section']['FL'][_0x580a7d]['dv'],'name':_0x985e5e['Calls'][_0x772d('0x65')]['FL'][_0x580a7d]['label'],'custom':_0x985e5e[_0x772d('0x64')][_0x772d('0x65')]['FL'][_0x580a7d][_0x772d('0x69')]===_0x772d('0x6a')?!![]:![],'options':_0x985e5e['Calls'][_0x772d('0x65')]['FL'][_0x580a7d][_0x772d('0x43')]==='Pick\x20List'&&_0x985e5e[_0x772d('0x64')]['section']['FL'][_0x580a7d][_0x772d('0x6b')]?_['map'](_0x985e5e[_0x772d('0x64')][_0x772d('0x65')]['FL'][_0x580a7d][_0x772d('0x6b')],function(_0x1b471f){return{'name':_0x1b471f,'value':_0x1b471f};}):[]});}}}}return{'count':_0xe34b8a[_0x772d('0x3a')],'rows':_0xe34b8a};}})['then'](respondWithResult(_0x32cdea,null))[_0x772d('0x21')](function(_0x2aa64f){var _0x846053=_0x563c46[_0x772d('0x36')][_0x772d('0x6c')]?0x1f4:_0x2aa64f['statusCode']||0x1f4;logger[_0x772d('0x1e')](_0x772d('0x6d'),_0x772d('0x5b'),_0x846053,JSON[_0x772d('0x1d')](_0x2aa64f));delete _0x2aa64f['name'];if(_0x846053===0x191){_0x846053=0x190;}_0x32cdea[_0x772d('0x22')](_0x846053)[_0x772d('0x31')](_0x563c46[_0x772d('0x36')][_0x772d('0x6c')]?{'message':_0x772d('0x6e'),'statusCode':_0x2aa64f[_0x772d('0x6f')]}:_0x2aa64f);});};
\ No newline at end of file
+var _0x21e3=['intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','options','ZohoAccount','count','includeAll','rows','show','params','include','find','create','body','update','findOne','ZohoConfiguration','getConfigurations','addConfiguration','AccountId','Subjects','channel','getDescriptions','ZohoField','Descriptions','getFields','authToken','host','slice','substring','lastIndexOf','GET','format','https://crm.%s/crm/private/json/Calls/getFields','crmapi','response','Calls','section','Call\x20Purpose','push','customfield','Pick\x20List','val','statusCode','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','html-pdf','rimraf','moment','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','../../components/integrations/configuration','client','http','test','request','then','info','ZohoAccount,\x20%s,\x20%s','debug','ZohoAccount,\x20%s,\x20%s,\x20%s','error','code','message','request\x20sent','catch','status','end','offset','limit','set','Content-Range','json','apply','save','destroy','sendStatus','stack','name','send','index','rawAttributes','keys','query','filters'];(function(_0x2a4b4c,_0x43ecff){var _0x1eb3d2=function(_0xae694a){while(--_0xae694a){_0x2a4b4c['push'](_0x2a4b4c['shift']());}};_0x1eb3d2(++_0x43ecff);}(_0x21e3,0x121));var _0x321e=function(_0xec548b,_0x1e09b){_0xec548b=_0xec548b-0x0;var _0x52874d=_0x21e3[_0xec548b];return _0x52874d;};'use strict';var pdf=require(_0x321e('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x321e('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x321e('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x321e('0x3'));var util=require(_0x321e('0x4'));var path=require(_0x321e('0x5'));var sox=require(_0x321e('0x6'));var csv=require(_0x321e('0x7'));var ejs=require(_0x321e('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x321e('0x9'));var crypto=require(_0x321e('0xa'));var jsforce=require(_0x321e('0xb'));var deskjs=require(_0x321e('0xc'));var toCsv=require(_0x321e('0x7'));var querystring=require(_0x321e('0xd'));var Papa=require(_0x321e('0xe'));var Redis=require(_0x321e('0xf'));var authService=require(_0x321e('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x321e('0x11'));var logger=require('../../config/logger')(_0x321e('0x12'));var utils=require(_0x321e('0x13'));var config=require(_0x321e('0x14'));var db=require(_0x321e('0x15'))['db'];var integrations=require(_0x321e('0x16'));var jayson=require('jayson/promise');var client=jayson[_0x321e('0x17')][_0x321e('0x18')]({'port':0x232a});function checkPasswordPattern(_0x225e8d,_0x4ba40a,_0x40d95d){if(_0x40d95d){var _0x4ae3ba=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x4ae3ba[_0x321e('0x19')](_0x4ba40a)){return _0x225e8d;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x225e8d;}}function respondWithRpcPromise(_0x37ca38,_0x282c0a,_0x31f7a8,_0x460559){return new BPromise(function(_0xd543b5,_0x1d58bf){var _0x539a5f=_0x460559||client;return _0x539a5f[_0x321e('0x1a')](_0x37ca38,_0x31f7a8)[_0x321e('0x1b')](function(_0x323060){logger[_0x321e('0x1c')](_0x321e('0x1d'),_0x282c0a,'request\x20sent');logger[_0x321e('0x1e')](_0x321e('0x1f'),_0x282c0a,'request\x20sent',JSON['stringify'](_0x323060));if(_0x323060[_0x321e('0x20')]){if(_0x323060[_0x321e('0x20')][_0x321e('0x21')]===0x1f4){logger['error'](_0x321e('0x1d'),_0x282c0a,_0x323060[_0x321e('0x20')][_0x321e('0x22')]);return _0x1d58bf(_0x323060[_0x321e('0x20')][_0x321e('0x22')]);}logger[_0x321e('0x20')](_0x321e('0x1d'),_0x282c0a,_0x323060['error'][_0x321e('0x22')]);return _0xd543b5(_0x323060[_0x321e('0x20')][_0x321e('0x22')]);}else{logger[_0x321e('0x1c')](_0x321e('0x1d'),_0x282c0a,_0x321e('0x23'));_0xd543b5(_0x323060['result']['message']);}})[_0x321e('0x24')](function(_0x2e3bc7){logger[_0x321e('0x20')](_0x321e('0x1d'),_0x282c0a,_0x2e3bc7);_0x1d58bf(_0x2e3bc7);});});}function respondWithStatusCode(_0x322e29,_0x4574ab){_0x4574ab=_0x4574ab||0xcc;return function(_0x28d2a2){if(_0x28d2a2){return _0x322e29['sendStatus'](_0x4574ab);}return _0x322e29[_0x321e('0x25')](_0x4574ab)[_0x321e('0x26')]();};}function respondWithResult(_0x488e06,_0x5bcd00){_0x5bcd00=_0x5bcd00||0xc8;return function(_0x19733a){if(_0x19733a){return _0x488e06[_0x321e('0x25')](_0x5bcd00)['json'](_0x19733a);}};}function respondWithFilteredResult(_0x1237c2,_0x118a1c){return function(_0x350c37){if(_0x350c37){var _0x4c8ee0=_0x350c37['count'],_0x59d061=_0x118a1c[_0x321e('0x27')],_0x34d9ea=_0x118a1c[_0x321e('0x27')]+_0x118a1c[_0x321e('0x28')],_0x51981f;if(_0x34d9ea>=_0x4c8ee0){_0x34d9ea=_0x4c8ee0;_0x51981f=0xc8;}else{_0x51981f=0xce;}_0x1237c2[_0x321e('0x25')](_0x51981f);return _0x1237c2[_0x321e('0x29')](_0x321e('0x2a'),_0x59d061+'-'+_0x34d9ea+'/'+_0x4c8ee0)[_0x321e('0x2b')](_0x350c37);}return null;};}function patchUpdates(_0x3d4b2f){return function(_0x477dff){try{jsonpatch[_0x321e('0x2c')](_0x477dff,_0x3d4b2f,!![]);}catch(_0x51e1dc){return BPromise['reject'](_0x51e1dc);}return _0x477dff[_0x321e('0x2d')]();};}function saveUpdates(_0x1848d5,_0x351cc5){return function(_0x32b9d3){if(_0x32b9d3){return _0x32b9d3['update'](_0x1848d5)[_0x321e('0x1b')](function(_0xc32538){return _0xc32538;});}return null;};}function removeEntity(_0x1164e3,_0x3eef7b){return function(_0x32cfe2){if(_0x32cfe2){return _0x32cfe2[_0x321e('0x2e')]()[_0x321e('0x1b')](function(){_0x1164e3[_0x321e('0x25')](0xcc)['end']();});}};}function handleEntityNotFound(_0xc83c82,_0x381d33){return function(_0x2890e6){if(!_0x2890e6){_0xc83c82[_0x321e('0x2f')](0x194);}return _0x2890e6;};}function handleError(_0x5c76de,_0x4b8210){_0x4b8210=_0x4b8210||0x1f4;return function(_0x33fcfa){logger[_0x321e('0x20')](_0x33fcfa[_0x321e('0x30')]);if(_0x33fcfa[_0x321e('0x31')]){delete _0x33fcfa[_0x321e('0x31')];}_0x5c76de[_0x321e('0x25')](_0x4b8210)[_0x321e('0x32')](_0x33fcfa);};}exports[_0x321e('0x33')]=function(_0xd10854,_0x5aaac0){var _0x3ef305={},_0x4be6ed={},_0x394600={'count':0x0,'rows':[]};var _0x5c5b55=db['ZohoAccount'][_0x321e('0x34')];_0x4be6ed['model']=_[_0x321e('0x35')](_0x5c5b55);_0x4be6ed[_0x321e('0x36')]=_['keys'](_0xd10854[_0x321e('0x36')]);_0x4be6ed[_0x321e('0x37')]=_[_0x321e('0x38')](_0x4be6ed[_0x321e('0x39')],_0x4be6ed[_0x321e('0x36')]);_0x3ef305[_0x321e('0x3a')]=_['intersection'](_0x4be6ed['model'],qs[_0x321e('0x3b')](_0xd10854['query'][_0x321e('0x3b')]));_0x3ef305[_0x321e('0x3a')]=_0x3ef305[_0x321e('0x3a')][_0x321e('0x3c')]?_0x3ef305[_0x321e('0x3a')]:_0x4be6ed['model'];if(!_0xd10854['query'][_0x321e('0x3d')](_0x321e('0x3e'))){_0x3ef305[_0x321e('0x28')]=qs['limit'](_0xd10854[_0x321e('0x36')][_0x321e('0x28')]);_0x3ef305[_0x321e('0x27')]=qs[_0x321e('0x27')](_0xd10854['query'][_0x321e('0x27')]);}_0x3ef305[_0x321e('0x3f')]=qs[_0x321e('0x40')](_0xd10854['query'][_0x321e('0x40')]);_0x3ef305[_0x321e('0x41')]=qs[_0x321e('0x37')](_[_0x321e('0x42')](_0xd10854[_0x321e('0x36')],_0x4be6ed[_0x321e('0x37')]));if(_0xd10854[_0x321e('0x36')][_0x321e('0x43')]){_0x3ef305[_0x321e('0x41')]=_[_0x321e('0x44')](_0x3ef305[_0x321e('0x41')],{'$or':_['map'](_0x5c5b55,function(_0x1bf59b){if(_0x1bf59b[_0x321e('0x45')][_0x321e('0x46')]!==_0x321e('0x47')){var _0x4abe2d={};_0x4abe2d[_0x1bf59b['field']]={'$like':'%'+_0xd10854[_0x321e('0x36')][_0x321e('0x43')]+'%'};return _0x4abe2d;}})});}_0x3ef305=_[_0x321e('0x44')]({},_0x3ef305,_0xd10854[_0x321e('0x48')]);var _0x4c1bad={'where':_0x3ef305[_0x321e('0x41')]};return db[_0x321e('0x49')]['count'](_0x4c1bad)['then'](function(_0xe6fdb7){_0x394600[_0x321e('0x4a')]=_0xe6fdb7;if(_0xd10854[_0x321e('0x36')][_0x321e('0x4b')]){_0x3ef305['include']=[{'all':!![]}];}return db[_0x321e('0x49')]['findAll'](_0x3ef305);})[_0x321e('0x1b')](function(_0x2955aa){_0x394600[_0x321e('0x4c')]=_0x2955aa;return _0x394600;})[_0x321e('0x1b')](respondWithFilteredResult(_0x5aaac0,_0x3ef305))[_0x321e('0x24')](handleError(_0x5aaac0,null));};exports[_0x321e('0x4d')]=function(_0x4a0a02,_0x540410){var _0x191750={'raw':![],'where':{'id':_0x4a0a02[_0x321e('0x4e')]['id']}},_0x2fd821={};_0x2fd821[_0x321e('0x39')]=_[_0x321e('0x35')](db['ZohoAccount']['rawAttributes']);_0x2fd821['query']=_[_0x321e('0x35')](_0x4a0a02[_0x321e('0x36')]);_0x2fd821[_0x321e('0x37')]=_[_0x321e('0x38')](_0x2fd821[_0x321e('0x39')],_0x2fd821[_0x321e('0x36')]);_0x191750[_0x321e('0x3a')]=_['intersection'](_0x2fd821[_0x321e('0x39')],qs[_0x321e('0x3b')](_0x4a0a02[_0x321e('0x36')][_0x321e('0x3b')]));_0x191750[_0x321e('0x3a')]=_0x191750[_0x321e('0x3a')][_0x321e('0x3c')]?_0x191750[_0x321e('0x3a')]:_0x2fd821[_0x321e('0x39')];if(_0x4a0a02['query'][_0x321e('0x4b')]){_0x191750[_0x321e('0x4f')]=[{'all':!![]}];}_0x191750=_[_0x321e('0x44')]({},_0x191750,_0x4a0a02[_0x321e('0x48')]);return db[_0x321e('0x49')][_0x321e('0x50')](_0x191750)[_0x321e('0x1b')](handleEntityNotFound(_0x540410,null))[_0x321e('0x1b')](respondWithResult(_0x540410,null))[_0x321e('0x24')](handleError(_0x540410,null));};exports[_0x321e('0x51')]=function(_0x36c231,_0x5219ae){return db[_0x321e('0x49')]['create'](_0x36c231[_0x321e('0x52')],{})[_0x321e('0x1b')](respondWithResult(_0x5219ae,0xc9))[_0x321e('0x24')](handleError(_0x5219ae,null));};exports[_0x321e('0x53')]=function(_0x189b20,_0xd19ac1){if(_0x189b20[_0x321e('0x52')]['id']){delete _0x189b20[_0x321e('0x52')]['id'];}return db[_0x321e('0x49')]['find']({'where':{'id':_0x189b20[_0x321e('0x4e')]['id']}})[_0x321e('0x1b')](handleEntityNotFound(_0xd19ac1,null))[_0x321e('0x1b')](saveUpdates(_0x189b20['body'],null))['then'](respondWithResult(_0xd19ac1,null))['catch'](handleError(_0xd19ac1,null));};exports[_0x321e('0x2e')]=function(_0x45bfdc,_0x570502){return db['ZohoAccount'][_0x321e('0x50')]({'where':{'id':_0x45bfdc[_0x321e('0x4e')]['id']}})[_0x321e('0x1b')](handleEntityNotFound(_0x570502,null))['then'](removeEntity(_0x570502,null))['catch'](handleError(_0x570502,null));};exports['getConfigurations']=function(_0x4ab1a1,_0x313cc3,_0x1f83d9){var _0x4c8773={};var _0x53ae62={};var _0x594767;var _0x4f8188;return db[_0x321e('0x49')][_0x321e('0x54')]({'where':{'id':_0x4ab1a1['params']['id']}})[_0x321e('0x1b')](handleEntityNotFound(_0x313cc3,null))[_0x321e('0x1b')](function(_0x3889b6){if(_0x3889b6){_0x594767=_0x3889b6;_0x53ae62[_0x321e('0x39')]=_[_0x321e('0x35')](db[_0x321e('0x55')][_0x321e('0x34')]);_0x53ae62['query']=_[_0x321e('0x35')](_0x4ab1a1['query']);_0x53ae62[_0x321e('0x37')]=_[_0x321e('0x38')](_0x53ae62[_0x321e('0x39')],_0x53ae62[_0x321e('0x36')]);_0x4c8773[_0x321e('0x3a')]=_[_0x321e('0x38')](_0x53ae62[_0x321e('0x39')],qs['fields'](_0x4ab1a1[_0x321e('0x36')][_0x321e('0x3b')]));_0x4c8773['attributes']=_0x4c8773[_0x321e('0x3a')][_0x321e('0x3c')]?_0x4c8773['attributes']:_0x53ae62[_0x321e('0x39')];_0x4c8773[_0x321e('0x3f')]=qs[_0x321e('0x40')](_0x4ab1a1[_0x321e('0x36')]['sort']);_0x4c8773[_0x321e('0x41')]=qs[_0x321e('0x37')](_[_0x321e('0x42')](_0x4ab1a1[_0x321e('0x36')],_0x53ae62[_0x321e('0x37')]));if(_0x4ab1a1['query'][_0x321e('0x43')]){_0x4c8773[_0x321e('0x41')]=_[_0x321e('0x44')](_0x4c8773['where'],{'$or':_['map'](_0x4c8773[_0x321e('0x3a')],function(_0x35e43f){var _0x3964dc={};_0x3964dc[_0x35e43f]={'$like':'%'+_0x4ab1a1[_0x321e('0x36')][_0x321e('0x43')]+'%'};return _0x3964dc;})});}_0x4c8773=_[_0x321e('0x44')]({},_0x4c8773,_0x4ab1a1[_0x321e('0x48')]);return _0x594767[_0x321e('0x56')](_0x4c8773);}})['then'](function(_0x11c929){if(_0x11c929){_0x4f8188=_0x11c929[_0x321e('0x3c')];if(!_0x4ab1a1[_0x321e('0x36')][_0x321e('0x3d')](_0x321e('0x3e'))){_0x4c8773[_0x321e('0x28')]=qs[_0x321e('0x28')](_0x4ab1a1[_0x321e('0x36')][_0x321e('0x28')]);_0x4c8773[_0x321e('0x27')]=qs['offset'](_0x4ab1a1['query'][_0x321e('0x27')]);}return _0x594767[_0x321e('0x56')](_0x4c8773);}})[_0x321e('0x1b')](function(_0x532373){if(_0x532373){return _0x532373?{'count':_0x4f8188,'rows':_0x532373}:null;}})[_0x321e('0x1b')](respondWithResult(_0x313cc3,null))[_0x321e('0x24')](handleError(_0x313cc3,null));};exports[_0x321e('0x57')]=function(_0x5cd57b,_0x511575,_0x4cf985){if(_0x5cd57b[_0x321e('0x52')]['id']){delete _0x5cd57b[_0x321e('0x52')]['id'];}return db[_0x321e('0x49')][_0x321e('0x54')]({'where':{'id':_0x5cd57b['params']['id']}})[_0x321e('0x1b')](handleEntityNotFound(_0x511575,null))[_0x321e('0x1b')](function(_0x4b880b){if(_0x4b880b){_0x5cd57b['body'][_0x321e('0x58')]=_0x4b880b['id'];_0x5cd57b[_0x321e('0x52')][_0x321e('0x59')]=integrations['getSubjects'](_0x5cd57b[_0x321e('0x52')][_0x321e('0x5a')],_0x5cd57b[_0x321e('0x52')][_0x321e('0x45')]);_0x5cd57b[_0x321e('0x52')]['Descriptions']=integrations[_0x321e('0x5b')](_0x5cd57b[_0x321e('0x52')][_0x321e('0x5a')],_0x5cd57b[_0x321e('0x52')][_0x321e('0x45')]);return db[_0x321e('0x55')]['create'](_0x5cd57b['body'],{'include':[{'model':db[_0x321e('0x5c')],'as':'Subjects'},{'model':db[_0x321e('0x5c')],'as':_0x321e('0x5d')}]});}return null;})[_0x321e('0x1b')](respondWithResult(_0x511575,null))[_0x321e('0x24')](handleError(_0x511575,null));};exports[_0x321e('0x5e')]=function(_0x4419c5,_0x4f889d,_0x3c555d){var _0x289a23='';return db['ZohoAccount'][_0x321e('0x54')]({'where':{'id':_0x4419c5[_0x321e('0x4e')]['id']},'attributes':['id','host',_0x321e('0x5f')]})[_0x321e('0x1b')](handleEntityNotFound(_0x4f889d,null))['then'](function(_0x4ba925){if(_0x4ba925){_0x289a23=_0x4ba925[_0x321e('0x60')];var _0x48b1e6=_0x289a23[_0x321e('0x61')](-0x1);if(_0x48b1e6==='/'){_0x289a23=_0x289a23[_0x321e('0x62')](0x0,_0x289a23[_0x321e('0x63')](_0x48b1e6));}return rp({'method':_0x321e('0x64'),'uri':util[_0x321e('0x65')](_0x321e('0x66'),_0x289a23),'qs':{'authtoken':_0x4ba925[_0x321e('0x5f')],'scope':_0x321e('0x67')},'json':!![]});}})[_0x321e('0x1b')](function(_0x206e6b){if(_0x206e6b){if(_0x206e6b['response']&&_0x206e6b[_0x321e('0x68')][_0x321e('0x20')]){throw new Error(_0x206e6b[_0x321e('0x68')][_0x321e('0x20')]['message']);}var _0x2420c5=[];if(_0x206e6b[_0x321e('0x69')]&&_0x206e6b[_0x321e('0x69')][_0x321e('0x6a')]){if(_0x206e6b[_0x321e('0x69')][_0x321e('0x6a')]['FL']){var _0x4979ff=[_0x321e('0x6b')];for(var _0x11469a=0x0,_0x2d93b3=_0x206e6b['Calls']['section']['FL']['length'];_0x11469a<_0x2d93b3;_0x11469a++){if(_['includes'](_0x4979ff,_0x206e6b['Calls']['section']['FL'][_0x11469a]['dv'])){_0x2420c5[_0x321e('0x6c')]({'id':_0x206e6b[_0x321e('0x69')][_0x321e('0x6a')]['FL'][_0x11469a]['dv'],'name':_0x206e6b[_0x321e('0x69')][_0x321e('0x6a')]['FL'][_0x11469a]['label'],'custom':_0x206e6b['Calls'][_0x321e('0x6a')]['FL'][_0x11469a][_0x321e('0x6d')]==='true'?!![]:![],'options':_0x206e6b[_0x321e('0x69')][_0x321e('0x6a')]['FL'][_0x11469a][_0x321e('0x45')]===_0x321e('0x6e')&&_0x206e6b[_0x321e('0x69')][_0x321e('0x6a')]['FL'][_0x11469a][_0x321e('0x6f')]?_['map'](_0x206e6b[_0x321e('0x69')]['section']['FL'][_0x11469a][_0x321e('0x6f')],function(_0x15f1ac){return{'name':_0x15f1ac,'value':_0x15f1ac};}):[]});}}}}return{'count':_0x2420c5[_0x321e('0x3c')],'rows':_0x2420c5};}})[_0x321e('0x1b')](respondWithResult(_0x4f889d,null))[_0x321e('0x24')](function(_0x383b17){var _0xc773c=_0x4419c5[_0x321e('0x36')][_0x321e('0x19')]?0x1f4:_0x383b17[_0x321e('0x70')]||0x1f4;logger[_0x321e('0x20')](_0x321e('0x71'),_0x321e('0x5e'),_0xc773c,JSON['stringify'](_0x383b17));delete _0x383b17['name'];if(_0xc773c===0x191){_0xc773c=0x190;}_0x4f889d[_0x321e('0x25')](_0xc773c)[_0x321e('0x32')](_0x4419c5[_0x321e('0x36')]['test']?{'message':_0x321e('0x72'),'statusCode':_0x383b17[_0x321e('0x70')]}:_0x383b17);});};
\ No newline at end of file
index ae52274..0d727a0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x953d=['bluebird','request-promise','path','rimraf','../../config/environment','./intZohoAccount.attributes','exports','util','../../config/logger','api'];(function(_0x1a0393,_0x54cf76){var _0x3a2619=function(_0x4d18e7){while(--_0x4d18e7){_0x1a0393['push'](_0x1a0393['shift']());}};_0x3a2619(++_0x54cf76);}(_0x953d,0x93));var _0xd953=function(_0x455c0f,_0x2f211f){_0x455c0f=_0x455c0f-0x0;var _0x1b906d=_0x953d[_0x455c0f];return _0x1b906d;};'use strict';var _=require('lodash');var util=require(_0xd953('0x0'));var logger=require(_0xd953('0x1'))(_0xd953('0x2'));var moment=require('moment');var BPromise=require(_0xd953('0x3'));var rp=require(_0xd953('0x4'));var fs=require('fs');var path=require(_0xd953('0x5'));var rimraf=require(_0xd953('0x6'));var config=require(_0xd953('0x7'));var attributes=require(_0xd953('0x8'));var integrations=require('../../components/integrations/configuration');module[_0xd953('0x9')]=function(_0x4d4247,_0x640615){return _0x4d4247['define']('ZohoAccount',attributes,{'tableName':'int_zoho_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7fec=['int_zoho_accounts','lodash','util','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','./intZohoAccount.attributes','../../components/integrations/configuration','exports','define','ZohoAccount'];(function(_0x4b1665,_0xb0c095){var _0x5850c0=function(_0x44b7a4){while(--_0x44b7a4){_0x4b1665['push'](_0x4b1665['shift']());}};_0x5850c0(++_0xb0c095);}(_0x7fec,0x14b));var _0xc7fe=function(_0x4f44fa,_0x426680){_0x4f44fa=_0x4f44fa-0x0;var _0x27dd71=_0x7fec[_0x4f44fa];return _0x27dd71;};'use strict';var _=require(_0xc7fe('0x0'));var util=require(_0xc7fe('0x1'));var logger=require(_0xc7fe('0x2'))(_0xc7fe('0x3'));var moment=require(_0xc7fe('0x4'));var BPromise=require(_0xc7fe('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xc7fe('0x6'));var rimraf=require(_0xc7fe('0x7'));var config=require(_0xc7fe('0x8'));var attributes=require(_0xc7fe('0x9'));var integrations=require(_0xc7fe('0xa'));module[_0xc7fe('0xb')]=function(_0x4de230,_0x55a0d3){return _0x4de230[_0xc7fe('0xc')](_0xc7fe('0xd'),attributes,{'tableName':_0xc7fe('0xe'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a6d0298..e52e770 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1a21=['../../config/logger','rpc','../../config/environment','client','http','request','then','info','request\x20sent','debug','stringify','error','code','message','ZohoAccount,\x20%s,\x20%s','result','catch','GetZohoAccount','ZohoAccount','options','raw','where','attributes','limit','include','model','map','ShowZohoAccount','find','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils'];(function(_0x2cf88d,_0x40c7a){var _0x12294c=function(_0x5b6351){while(--_0x5b6351){_0x2cf88d['push'](_0x2cf88d['shift']());}};_0x12294c(++_0x40c7a);}(_0x1a21,0x1d9));var _0x11a2=function(_0x4e4519,_0x392ae){_0x4e4519=_0x4e4519-0x0;var _0x340044=_0x1a21[_0x4e4519];return _0x340044;};'use strict';var _=require(_0x11a2('0x0'));var util=require(_0x11a2('0x1'));var moment=require(_0x11a2('0x2'));var BPromise=require(_0x11a2('0x3'));var rs=require(_0x11a2('0x4'));var fs=require('fs');var Redis=require(_0x11a2('0x5'));var db=require(_0x11a2('0x6'))['db'];var utils=require(_0x11a2('0x7'));var logger=require(_0x11a2('0x8'))(_0x11a2('0x9'));var config=require(_0x11a2('0xa'));var jayson=require('jayson/promise');var client=jayson[_0x11a2('0xb')][_0x11a2('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x238950,_0x3b724f,_0x227e9b){return new BPromise(function(_0x42438b,_0x4f5406){return client[_0x11a2('0xd')](_0x238950,_0x227e9b)[_0x11a2('0xe')](function(_0x290125){logger[_0x11a2('0xf')]('ZohoAccount,\x20%s,\x20%s',_0x3b724f,_0x11a2('0x10'));logger[_0x11a2('0x11')]('ZohoAccount,\x20%s,\x20%s,\x20%s',_0x3b724f,'request\x20sent',JSON[_0x11a2('0x12')](_0x290125));if(_0x290125['error']){if(_0x290125[_0x11a2('0x13')][_0x11a2('0x14')]===0x1f4){logger[_0x11a2('0x13')]('ZohoAccount,\x20%s,\x20%s',_0x3b724f,_0x290125[_0x11a2('0x13')][_0x11a2('0x15')]);return _0x4f5406(_0x290125[_0x11a2('0x13')]['message']);}logger['error'](_0x11a2('0x16'),_0x3b724f,_0x290125[_0x11a2('0x13')]['message']);return _0x42438b(_0x290125[_0x11a2('0x13')][_0x11a2('0x15')]);}else{logger[_0x11a2('0xf')](_0x11a2('0x16'),_0x3b724f,_0x11a2('0x10'));_0x42438b(_0x290125[_0x11a2('0x17')][_0x11a2('0x15')]);}})[_0x11a2('0x18')](function(_0x4768f8){logger[_0x11a2('0x13')](_0x11a2('0x16'),_0x3b724f,_0x4768f8);_0x4f5406(_0x4768f8);});});}exports[_0x11a2('0x19')]=function(_0x2c1745){var _0x4d5823=this;return new Promise(function(_0x2764b9,_0x3135c2){return db[_0x11a2('0x1a')]['findAll']({'raw':_0x2c1745[_0x11a2('0x1b')]?_0x2c1745[_0x11a2('0x1b')][_0x11a2('0x1c')]===undefined?!![]:![]:!![],'where':_0x2c1745[_0x11a2('0x1b')]?_0x2c1745[_0x11a2('0x1b')][_0x11a2('0x1d')]||null:null,'attributes':_0x2c1745[_0x11a2('0x1b')]?_0x2c1745[_0x11a2('0x1b')][_0x11a2('0x1e')]||null:null,'limit':_0x2c1745[_0x11a2('0x1b')]?_0x2c1745[_0x11a2('0x1b')][_0x11a2('0x1f')]||null:null,'include':_0x2c1745[_0x11a2('0x1b')]?_0x2c1745['options'][_0x11a2('0x20')]?_['map'](_0x2c1745['options'][_0x11a2('0x20')],function(_0x509b4b){return{'model':db[_0x509b4b[_0x11a2('0x21')]],'as':_0x509b4b['as'],'attributes':_0x509b4b[_0x11a2('0x1e')],'include':_0x509b4b['include']?_[_0x11a2('0x22')](_0x509b4b[_0x11a2('0x20')],function(_0xe913b5){return{'model':db[_0xe913b5[_0x11a2('0x21')]],'as':_0xe913b5['as'],'attributes':_0xe913b5[_0x11a2('0x1e')],'include':_0xe913b5['include']?_[_0x11a2('0x22')](_0xe913b5[_0x11a2('0x20')],function(_0x2b10b2){return{'model':db[_0x2b10b2[_0x11a2('0x21')]],'as':_0x2b10b2['as'],'attributes':_0x2b10b2[_0x11a2('0x1e')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x36c2ad){logger[_0x11a2('0xf')](_0x11a2('0x19'),_0x2c1745);logger[_0x11a2('0x11')]('GetZohoAccount',_0x2c1745,JSON[_0x11a2('0x12')](_0x36c2ad));_0x2764b9(_0x36c2ad);})['catch'](function(_0x596237){logger['error'](_0x11a2('0x19'),_0x596237['message'],_0x2c1745);_0x3135c2(_0x4d5823[_0x11a2('0x13')](0x1f4,_0x596237[_0x11a2('0x15')]));});});};exports[_0x11a2('0x23')]=function(_0x24ac23){var _0x41a277=this;return new Promise(function(_0x2ae261,_0xc06b35){return db['ZohoAccount'][_0x11a2('0x24')]({'raw':_0x24ac23['options']?_0x24ac23[_0x11a2('0x1b')][_0x11a2('0x1c')]===undefined?!![]:![]:!![],'where':_0x24ac23[_0x11a2('0x1b')]?_0x24ac23[_0x11a2('0x1b')][_0x11a2('0x1d')]||null:null,'attributes':_0x24ac23[_0x11a2('0x1b')]?_0x24ac23[_0x11a2('0x1b')][_0x11a2('0x1e')]||null:null,'include':_0x24ac23[_0x11a2('0x1b')]?_0x24ac23['options'][_0x11a2('0x20')]?_[_0x11a2('0x22')](_0x24ac23[_0x11a2('0x1b')][_0x11a2('0x20')],function(_0x39ab92){return{'model':db[_0x39ab92[_0x11a2('0x21')]],'as':_0x39ab92['as'],'attributes':_0x39ab92[_0x11a2('0x1e')],'include':_0x39ab92[_0x11a2('0x20')]?_[_0x11a2('0x22')](_0x39ab92[_0x11a2('0x20')],function(_0x168094){return{'model':db[_0x168094[_0x11a2('0x21')]],'as':_0x168094['as'],'attributes':_0x168094[_0x11a2('0x1e')],'include':_0x168094[_0x11a2('0x20')]?_[_0x11a2('0x22')](_0x168094['include'],function(_0x31c2aa){return{'model':db[_0x31c2aa[_0x11a2('0x21')]],'as':_0x31c2aa['as'],'attributes':_0x31c2aa[_0x11a2('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x11a2('0xe')](function(_0x5a19e7){logger[_0x11a2('0xf')]('ShowZohoAccount',_0x24ac23);logger['debug']('ShowZohoAccount',_0x24ac23,JSON[_0x11a2('0x12')](_0x5a19e7));_0x2ae261(_0x5a19e7);})[_0x11a2('0x18')](function(_0x4e9787){logger['error'](_0x11a2('0x23'),_0x4e9787[_0x11a2('0x15')],_0x24ac23);_0xc06b35(_0x41a277[_0x11a2('0x13')](0x1f4,_0x4e9787[_0x11a2('0x15')]));});});};
\ No newline at end of file
+var _0xf264=['attributes','limit','include','model','map','stringify','ShowZohoAccount','find','lodash','util','moment','bluebird','ioredis','../../config/utils','rpc','jayson/promise','client','http','request','then','info','request\x20sent','debug','error','code','message','ZohoAccount,\x20%s,\x20%s','result','catch','GetZohoAccount','ZohoAccount','findAll','options','raw','where'];(function(_0x368fb9,_0x1a9895){var _0x4892fb=function(_0x28d735){while(--_0x28d735){_0x368fb9['push'](_0x368fb9['shift']());}};_0x4892fb(++_0x1a9895);}(_0xf264,0xfd));var _0x4f26=function(_0x351b46,_0x26b265){_0x351b46=_0x351b46-0x0;var _0x1515df=_0xf264[_0x351b46];return _0x1515df;};'use strict';var _=require(_0x4f26('0x0'));var util=require(_0x4f26('0x1'));var moment=require(_0x4f26('0x2'));var BPromise=require(_0x4f26('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x4f26('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x4f26('0x5'));var logger=require('../../config/logger')(_0x4f26('0x6'));var config=require('../../config/environment');var jayson=require(_0x4f26('0x7'));var client=jayson[_0x4f26('0x8')][_0x4f26('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x714d88,_0x1d47d5,_0x5f320a){return new BPromise(function(_0x4a8588,_0x243e54){return client[_0x4f26('0xa')](_0x714d88,_0x5f320a)[_0x4f26('0xb')](function(_0x1c97fc){logger[_0x4f26('0xc')]('ZohoAccount,\x20%s,\x20%s',_0x1d47d5,_0x4f26('0xd'));logger[_0x4f26('0xe')]('ZohoAccount,\x20%s,\x20%s,\x20%s',_0x1d47d5,'request\x20sent',JSON['stringify'](_0x1c97fc));if(_0x1c97fc[_0x4f26('0xf')]){if(_0x1c97fc[_0x4f26('0xf')][_0x4f26('0x10')]===0x1f4){logger[_0x4f26('0xf')]('ZohoAccount,\x20%s,\x20%s',_0x1d47d5,_0x1c97fc[_0x4f26('0xf')][_0x4f26('0x11')]);return _0x243e54(_0x1c97fc[_0x4f26('0xf')]['message']);}logger[_0x4f26('0xf')](_0x4f26('0x12'),_0x1d47d5,_0x1c97fc[_0x4f26('0xf')][_0x4f26('0x11')]);return _0x4a8588(_0x1c97fc[_0x4f26('0xf')]['message']);}else{logger[_0x4f26('0xc')](_0x4f26('0x12'),_0x1d47d5,'request\x20sent');_0x4a8588(_0x1c97fc[_0x4f26('0x13')][_0x4f26('0x11')]);}})[_0x4f26('0x14')](function(_0x544ebb){logger[_0x4f26('0xf')](_0x4f26('0x12'),_0x1d47d5,_0x544ebb);_0x243e54(_0x544ebb);});});}exports[_0x4f26('0x15')]=function(_0x593561){var _0x49069a=this;return new Promise(function(_0x5a8004,_0x53b74c){return db[_0x4f26('0x16')][_0x4f26('0x17')]({'raw':_0x593561[_0x4f26('0x18')]?_0x593561['options'][_0x4f26('0x19')]===undefined?!![]:![]:!![],'where':_0x593561[_0x4f26('0x18')]?_0x593561['options'][_0x4f26('0x1a')]||null:null,'attributes':_0x593561['options']?_0x593561[_0x4f26('0x18')][_0x4f26('0x1b')]||null:null,'limit':_0x593561['options']?_0x593561[_0x4f26('0x18')][_0x4f26('0x1c')]||null:null,'include':_0x593561[_0x4f26('0x18')]?_0x593561[_0x4f26('0x18')]['include']?_['map'](_0x593561[_0x4f26('0x18')][_0x4f26('0x1d')],function(_0x1717dd){return{'model':db[_0x1717dd[_0x4f26('0x1e')]],'as':_0x1717dd['as'],'attributes':_0x1717dd[_0x4f26('0x1b')],'include':_0x1717dd[_0x4f26('0x1d')]?_[_0x4f26('0x1f')](_0x1717dd[_0x4f26('0x1d')],function(_0x9fa472){return{'model':db[_0x9fa472[_0x4f26('0x1e')]],'as':_0x9fa472['as'],'attributes':_0x9fa472['attributes'],'include':_0x9fa472[_0x4f26('0x1d')]?_[_0x4f26('0x1f')](_0x9fa472[_0x4f26('0x1d')],function(_0x39f7a8){return{'model':db[_0x39f7a8[_0x4f26('0x1e')]],'as':_0x39f7a8['as'],'attributes':_0x39f7a8['attributes']};}):[]};}):[]};}):[]:[]})[_0x4f26('0xb')](function(_0x281e65){logger['info'](_0x4f26('0x15'),_0x593561);logger[_0x4f26('0xe')](_0x4f26('0x15'),_0x593561,JSON[_0x4f26('0x20')](_0x281e65));_0x5a8004(_0x281e65);})['catch'](function(_0x5351b7){logger[_0x4f26('0xf')](_0x4f26('0x15'),_0x5351b7[_0x4f26('0x11')],_0x593561);_0x53b74c(_0x49069a['error'](0x1f4,_0x5351b7['message']));});});};exports[_0x4f26('0x21')]=function(_0x3496ef){var _0x35d205=this;return new Promise(function(_0x58c529,_0xe780f8){return db['ZohoAccount'][_0x4f26('0x22')]({'raw':_0x3496ef['options']?_0x3496ef[_0x4f26('0x18')][_0x4f26('0x19')]===undefined?!![]:![]:!![],'where':_0x3496ef[_0x4f26('0x18')]?_0x3496ef['options'][_0x4f26('0x1a')]||null:null,'attributes':_0x3496ef[_0x4f26('0x18')]?_0x3496ef[_0x4f26('0x18')][_0x4f26('0x1b')]||null:null,'include':_0x3496ef['options']?_0x3496ef[_0x4f26('0x18')][_0x4f26('0x1d')]?_[_0x4f26('0x1f')](_0x3496ef['options'][_0x4f26('0x1d')],function(_0x8b8863){return{'model':db[_0x8b8863[_0x4f26('0x1e')]],'as':_0x8b8863['as'],'attributes':_0x8b8863['attributes'],'include':_0x8b8863['include']?_[_0x4f26('0x1f')](_0x8b8863['include'],function(_0x2df3dd){return{'model':db[_0x2df3dd['model']],'as':_0x2df3dd['as'],'attributes':_0x2df3dd[_0x4f26('0x1b')],'include':_0x2df3dd[_0x4f26('0x1d')]?_[_0x4f26('0x1f')](_0x2df3dd['include'],function(_0x14237b){return{'model':db[_0x14237b[_0x4f26('0x1e')]],'as':_0x14237b['as'],'attributes':_0x14237b[_0x4f26('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x4f26('0xb')](function(_0x1e71b1){logger[_0x4f26('0xc')]('ShowZohoAccount',_0x3496ef);logger[_0x4f26('0xe')]('ShowZohoAccount',_0x3496ef,JSON[_0x4f26('0x20')](_0x1e71b1));_0x58c529(_0x1e71b1);})[_0x4f26('0x14')](function(_0x2682e7){logger['error'](_0x4f26('0x21'),_0x2682e7[_0x4f26('0x11')],_0x3496ef);_0xe780f8(_0x35d205[_0x4f26('0xf')](0x1f4,_0x2682e7[_0x4f26('0x11')]));});});};
\ No newline at end of file
index dcc4813..9bea7a9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xffcc=['destroy','exports','util','connect-timeout','express','../../config/environment','get','index','/:id','isAuthenticated','/:id/fields','getSubjects','create','put','update','delete'];(function(_0xa148b7,_0x2f3eb2){var _0x51efd3=function(_0x34bcec){while(--_0x34bcec){_0xa148b7['push'](_0xa148b7['shift']());}};_0x51efd3(++_0x2f3eb2);}(_0xffcc,0x112));var _0xcffc=function(_0x475919,_0x3e7d38){_0x475919=_0x475919-0x0;var _0x2605b4=_0xffcc[_0x475919];return _0x2605b4;};'use strict';var multer=require('multer');var util=require(_0xcffc('0x0'));var path=require('path');var timeout=require(_0xcffc('0x1'));var express=require(_0xcffc('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xcffc('0x3'));var controller=require('./intZohoConfiguration.controller');router[_0xcffc('0x4')]('/',auth['isAuthenticated'](),controller[_0xcffc('0x5')]);router[_0xcffc('0x4')](_0xcffc('0x6'),auth[_0xcffc('0x7')](),controller['show']);router[_0xcffc('0x4')](_0xcffc('0x8'),auth[_0xcffc('0x7')](),controller['getFields']);router[_0xcffc('0x4')]('/:id/subjects',auth[_0xcffc('0x7')](),controller[_0xcffc('0x9')]);router[_0xcffc('0x4')]('/:id/descriptions',auth[_0xcffc('0x7')](),controller['getDescriptions']);router['post']('/',auth[_0xcffc('0x7')](),controller[_0xcffc('0xa')]);router[_0xcffc('0xb')](_0xcffc('0x6'),auth[_0xcffc('0x7')](),controller[_0xcffc('0xc')]);router[_0xcffc('0xd')](_0xcffc('0x6'),auth['isAuthenticated'](),controller[_0xcffc('0xe')]);module[_0xcffc('0xf')]=router;
\ No newline at end of file
+var _0x5ebe=['index','/:id','show','getSubjects','getDescriptions','post','create','update','destroy','exports','util','path','connect-timeout','express','Router','../../components/auth/service','./intZohoConfiguration.controller','get','isAuthenticated'];(function(_0x2351c4,_0x1dca54){var _0x1dd3f8=function(_0x4c3fa2){while(--_0x4c3fa2){_0x2351c4['push'](_0x2351c4['shift']());}};_0x1dd3f8(++_0x1dca54);}(_0x5ebe,0x69));var _0xe5eb=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0x5ebe[_0x122ef9];return _0x42fba0;};'use strict';var multer=require('multer');var util=require(_0xe5eb('0x0'));var path=require(_0xe5eb('0x1'));var timeout=require(_0xe5eb('0x2'));var express=require(_0xe5eb('0x3'));var router=express[_0xe5eb('0x4')]();var auth=require(_0xe5eb('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xe5eb('0x6'));router[_0xe5eb('0x7')]('/',auth[_0xe5eb('0x8')](),controller[_0xe5eb('0x9')]);router[_0xe5eb('0x7')](_0xe5eb('0xa'),auth[_0xe5eb('0x8')](),controller[_0xe5eb('0xb')]);router['get']('/:id/fields',auth['isAuthenticated'](),controller['getFields']);router[_0xe5eb('0x7')]('/:id/subjects',auth[_0xe5eb('0x8')](),controller[_0xe5eb('0xc')]);router[_0xe5eb('0x7')]('/:id/descriptions',auth[_0xe5eb('0x8')](),controller[_0xe5eb('0xd')]);router[_0xe5eb('0xe')]('/',auth[_0xe5eb('0x8')](),controller[_0xe5eb('0xf')]);router['put'](_0xe5eb('0xa'),auth[_0xe5eb('0x8')](),controller[_0xe5eb('0x10')]);router['delete']('/:id',auth[_0xe5eb('0x8')](),controller[_0xe5eb('0x11')]);module[_0xe5eb('0x12')]=router;
\ No newline at end of file
index 79f4644..845e9f9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb6e6=['sequelize','STRING'];(function(_0x4a68f9,_0x4fae3a){var _0x47e21e=function(_0x3b9c24){while(--_0x3b9c24){_0x4a68f9['push'](_0x4a68f9['shift']());}};_0x47e21e(++_0x4fae3a);}(_0xb6e6,0xa0));var _0x6b6e=function(_0x231a81,_0x4e8c91){_0x231a81=_0x231a81-0x0;var _0x9b0b10=_0xb6e6[_0x231a81];return _0x9b0b10;};'use strict';var Sequelize=require(_0x6b6e('0x0'));module['exports']={'name':{'type':Sequelize[_0x6b6e('0x1')]},'description':{'type':Sequelize[_0x6b6e('0x1')]}};
\ No newline at end of file
+var _0x8bbf=['sequelize','exports','STRING'];(function(_0x1e11c2,_0x1bcbca){var _0x4faa44=function(_0x4c3bf3){while(--_0x4c3bf3){_0x1e11c2['push'](_0x1e11c2['shift']());}};_0x4faa44(++_0x1bcbca);}(_0x8bbf,0x1c2));var _0xf8bb=function(_0x2a8250,_0x2bf826){_0x2a8250=_0x2a8250-0x0;var _0x24a6e8=_0x8bbf[_0x2a8250];return _0x24a6e8;};'use strict';var Sequelize=require(_0xf8bb('0x0'));module[_0xf8bb('0x1')]={'name':{'type':Sequelize[_0xf8bb('0x2')]},'description':{'type':Sequelize[_0xf8bb('0x2')]}};
\ No newline at end of file
index 327a700..26bcde2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2b10=['save','update','destroy','stack','name','send','index','ZohoConfiguration','rawAttributes','model','keys','query','filters','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','field','options','includeAll','include','findAll','rows','show','intersection','find','create','body','params','getFields','findOne','ZohoField','getSubjects','getDescriptions','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','request\x20sent','debug','ZohoConfiguration,\x20%s,\x20%s,\x20%s','stringify','code','ZohoConfiguration,\x20%s,\x20%s','error','message','result','catch','status','end','count','offset','limit','set','json','apply','reject'];(function(_0x59867f,_0x2f4f24){var _0x24f802=function(_0x2c3c10){while(--_0x2c3c10){_0x59867f['push'](_0x59867f['shift']());}};_0x24f802(++_0x2f4f24);}(_0x2b10,0x1f3));var _0x02b1=function(_0x581095,_0x72b988){_0x581095=_0x581095-0x0;var _0x972289=_0x2b10[_0x581095];return _0x972289;};'use strict';var pdf=require(_0x02b1('0x0'));var emlformat=require(_0x02b1('0x1'));var rimraf=require(_0x02b1('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x02b1('0x3'));var rp=require(_0x02b1('0x4'));var moment=require(_0x02b1('0x5'));var BPromise=require(_0x02b1('0x6'));var Mustache=require(_0x02b1('0x7'));var util=require(_0x02b1('0x8'));var path=require(_0x02b1('0x9'));var sox=require(_0x02b1('0xa'));var csv=require(_0x02b1('0xb'));var ejs=require(_0x02b1('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0x02b1('0xd'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x02b1('0xb'));var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0x02b1('0xe'));var authService=require(_0x02b1('0xf'));var qs=require(_0x02b1('0x10'));var hardwareService=require(_0x02b1('0x11'));var logger=require('../../config/logger')('api');var utils=require(_0x02b1('0x12'));var config=require(_0x02b1('0x13'));var db=require(_0x02b1('0x14'))['db'];var jayson=require(_0x02b1('0x15'));var client=jayson['client'][_0x02b1('0x16')]({'port':0x232a});function checkPasswordPattern(_0x137209,_0x1f8a78,_0x438b7f){if(_0x438b7f){var _0x47fc2c=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x47fc2c[_0x02b1('0x17')](_0x1f8a78)){return _0x137209;}else{throw new Error(_0x02b1('0x18'));}}else{return _0x137209;}}function respondWithRpcPromise(_0x39d8b2,_0x34ca2e,_0x386c57,_0x533ad0){return new BPromise(function(_0x4cabf0,_0x4984a9){var _0x35a846=_0x533ad0||client;return _0x35a846[_0x02b1('0x19')](_0x39d8b2,_0x386c57)[_0x02b1('0x1a')](function(_0x1eed4f){logger[_0x02b1('0x1b')]('ZohoConfiguration,\x20%s,\x20%s',_0x34ca2e,_0x02b1('0x1c'));logger[_0x02b1('0x1d')](_0x02b1('0x1e'),_0x34ca2e,_0x02b1('0x1c'),JSON[_0x02b1('0x1f')](_0x1eed4f));if(_0x1eed4f['error']){if(_0x1eed4f['error'][_0x02b1('0x20')]===0x1f4){logger['error'](_0x02b1('0x21'),_0x34ca2e,_0x1eed4f[_0x02b1('0x22')]['message']);return _0x4984a9(_0x1eed4f[_0x02b1('0x22')][_0x02b1('0x23')]);}logger[_0x02b1('0x22')](_0x02b1('0x21'),_0x34ca2e,_0x1eed4f[_0x02b1('0x22')]['message']);return _0x4cabf0(_0x1eed4f[_0x02b1('0x22')][_0x02b1('0x23')]);}else{logger[_0x02b1('0x1b')]('ZohoConfiguration,\x20%s,\x20%s',_0x34ca2e,'request\x20sent');_0x4cabf0(_0x1eed4f[_0x02b1('0x24')]['message']);}})[_0x02b1('0x25')](function(_0xb1e27e){logger[_0x02b1('0x22')](_0x02b1('0x21'),_0x34ca2e,_0xb1e27e);_0x4984a9(_0xb1e27e);});});}function respondWithStatusCode(_0x23e538,_0x104702){_0x104702=_0x104702||0xcc;return function(_0x49007a){if(_0x49007a){return _0x23e538['sendStatus'](_0x104702);}return _0x23e538[_0x02b1('0x26')](_0x104702)[_0x02b1('0x27')]();};}function respondWithResult(_0xf34404,_0x10ba3){_0x10ba3=_0x10ba3||0xc8;return function(_0x2067f0){if(_0x2067f0){return _0xf34404[_0x02b1('0x26')](_0x10ba3)['json'](_0x2067f0);}};}function respondWithFilteredResult(_0x4753c8,_0x4f546b){return function(_0x2ed23b){if(_0x2ed23b){var _0x5c3268=_0x2ed23b[_0x02b1('0x28')],_0xea863=_0x4f546b[_0x02b1('0x29')],_0x3fc31a=_0x4f546b[_0x02b1('0x29')]+_0x4f546b[_0x02b1('0x2a')],_0x1f09c7;if(_0x3fc31a>=_0x5c3268){_0x3fc31a=_0x5c3268;_0x1f09c7=0xc8;}else{_0x1f09c7=0xce;}_0x4753c8[_0x02b1('0x26')](_0x1f09c7);return _0x4753c8[_0x02b1('0x2b')]('Content-Range',_0xea863+'-'+_0x3fc31a+'/'+_0x5c3268)[_0x02b1('0x2c')](_0x2ed23b);}return null;};}function patchUpdates(_0x252fa6){return function(_0x4a2595){try{jsonpatch[_0x02b1('0x2d')](_0x4a2595,_0x252fa6,!![]);}catch(_0x238c9b){return BPromise[_0x02b1('0x2e')](_0x238c9b);}return _0x4a2595[_0x02b1('0x2f')]();};}function saveUpdates(_0x446eb5,_0x4ddd12){return function(_0x4d6f97){if(_0x4d6f97){return _0x4d6f97[_0x02b1('0x30')](_0x446eb5)[_0x02b1('0x1a')](function(_0x24dc14){return _0x24dc14;});}return null;};}function removeEntity(_0x3b52a4,_0x1e0ccb){return function(_0x283ca8){if(_0x283ca8){return _0x283ca8[_0x02b1('0x31')]()[_0x02b1('0x1a')](function(){_0x3b52a4[_0x02b1('0x26')](0xcc)[_0x02b1('0x27')]();});}};}function handleEntityNotFound(_0x1c0970,_0x4895f3){return function(_0x2fc8bf){if(!_0x2fc8bf){_0x1c0970['sendStatus'](0x194);}return _0x2fc8bf;};}function handleError(_0x279141,_0x1726f2){_0x1726f2=_0x1726f2||0x1f4;return function(_0x3b1d4a){logger[_0x02b1('0x22')](_0x3b1d4a[_0x02b1('0x32')]);if(_0x3b1d4a[_0x02b1('0x33')]){delete _0x3b1d4a[_0x02b1('0x33')];}_0x279141[_0x02b1('0x26')](_0x1726f2)[_0x02b1('0x34')](_0x3b1d4a);};}exports[_0x02b1('0x35')]=function(_0xde3339,_0x5a0a38){var _0x5c7509={},_0x25899a={},_0x102794={'count':0x0,'rows':[]};var _0x40fce6=db[_0x02b1('0x36')][_0x02b1('0x37')];_0x25899a[_0x02b1('0x38')]=_[_0x02b1('0x39')](_0x40fce6);_0x25899a[_0x02b1('0x3a')]=_[_0x02b1('0x39')](_0xde3339[_0x02b1('0x3a')]);_0x25899a[_0x02b1('0x3b')]=_['intersection'](_0x25899a[_0x02b1('0x38')],_0x25899a[_0x02b1('0x3a')]);_0x5c7509[_0x02b1('0x3c')]=_['intersection'](_0x25899a['model'],qs[_0x02b1('0x3d')](_0xde3339[_0x02b1('0x3a')]['fields']));_0x5c7509[_0x02b1('0x3c')]=_0x5c7509[_0x02b1('0x3c')][_0x02b1('0x3e')]?_0x5c7509['attributes']:_0x25899a[_0x02b1('0x38')];if(!_0xde3339[_0x02b1('0x3a')][_0x02b1('0x3f')](_0x02b1('0x40'))){_0x5c7509[_0x02b1('0x2a')]=qs['limit'](_0xde3339['query']['limit']);_0x5c7509['offset']=qs['offset'](_0xde3339[_0x02b1('0x3a')][_0x02b1('0x29')]);}_0x5c7509[_0x02b1('0x41')]=qs[_0x02b1('0x42')](_0xde3339['query'][_0x02b1('0x42')]);_0x5c7509[_0x02b1('0x43')]=qs[_0x02b1('0x3b')](_[_0x02b1('0x44')](_0xde3339[_0x02b1('0x3a')],_0x25899a[_0x02b1('0x3b')]));if(_0xde3339[_0x02b1('0x3a')][_0x02b1('0x45')]){_0x5c7509['where']=_[_0x02b1('0x46')](_0x5c7509['where'],{'$or':_[_0x02b1('0x47')](_0x40fce6,function(_0x5242d8){if(_0x5242d8[_0x02b1('0x48')][_0x02b1('0x49')]!=='VIRTUAL'){var _0x547f8c={};_0x547f8c[_0x5242d8[_0x02b1('0x4a')]]={'$like':'%'+_0xde3339[_0x02b1('0x3a')][_0x02b1('0x45')]+'%'};return _0x547f8c;}})});}_0x5c7509=_[_0x02b1('0x46')]({},_0x5c7509,_0xde3339[_0x02b1('0x4b')]);var _0x68f4eb={'where':_0x5c7509[_0x02b1('0x43')]};return db[_0x02b1('0x36')][_0x02b1('0x28')](_0x68f4eb)[_0x02b1('0x1a')](function(_0x5720b2){_0x102794[_0x02b1('0x28')]=_0x5720b2;if(_0xde3339['query'][_0x02b1('0x4c')]){_0x5c7509[_0x02b1('0x4d')]=[{'all':!![]}];}return db[_0x02b1('0x36')][_0x02b1('0x4e')](_0x5c7509);})[_0x02b1('0x1a')](function(_0x4cf34f){_0x102794[_0x02b1('0x4f')]=_0x4cf34f;return _0x102794;})[_0x02b1('0x1a')](respondWithFilteredResult(_0x5a0a38,_0x5c7509))[_0x02b1('0x25')](handleError(_0x5a0a38,null));};exports[_0x02b1('0x50')]=function(_0x3e221d,_0xd938a4){var _0x62514a={'raw':![],'where':{'id':_0x3e221d['params']['id']}},_0x86bbc7={};_0x86bbc7[_0x02b1('0x38')]=_[_0x02b1('0x39')](db[_0x02b1('0x36')][_0x02b1('0x37')]);_0x86bbc7[_0x02b1('0x3a')]=_['keys'](_0x3e221d[_0x02b1('0x3a')]);_0x86bbc7['filters']=_[_0x02b1('0x51')](_0x86bbc7[_0x02b1('0x38')],_0x86bbc7[_0x02b1('0x3a')]);_0x62514a[_0x02b1('0x3c')]=_[_0x02b1('0x51')](_0x86bbc7[_0x02b1('0x38')],qs['fields'](_0x3e221d[_0x02b1('0x3a')][_0x02b1('0x3d')]));_0x62514a[_0x02b1('0x3c')]=_0x62514a[_0x02b1('0x3c')][_0x02b1('0x3e')]?_0x62514a[_0x02b1('0x3c')]:_0x86bbc7[_0x02b1('0x38')];if(_0x3e221d[_0x02b1('0x3a')]['includeAll']){_0x62514a[_0x02b1('0x4d')]=[{'all':!![]}];}_0x62514a=_['merge']({},_0x62514a,_0x3e221d['options']);return db[_0x02b1('0x36')][_0x02b1('0x52')](_0x62514a)[_0x02b1('0x1a')](handleEntityNotFound(_0xd938a4,null))[_0x02b1('0x1a')](respondWithResult(_0xd938a4,null))[_0x02b1('0x25')](handleError(_0xd938a4,null));};exports[_0x02b1('0x53')]=function(_0x43f1bc,_0xe42497){return db[_0x02b1('0x36')][_0x02b1('0x53')](_0x43f1bc['body'],{})['then'](respondWithResult(_0xe42497,0xc9))[_0x02b1('0x25')](handleError(_0xe42497,null));};exports[_0x02b1('0x30')]=function(_0x15c356,_0x205e40){if(_0x15c356[_0x02b1('0x54')]['id']){delete _0x15c356[_0x02b1('0x54')]['id'];}return db[_0x02b1('0x36')][_0x02b1('0x52')]({'where':{'id':_0x15c356['params']['id']}})[_0x02b1('0x1a')](handleEntityNotFound(_0x205e40,null))['then'](saveUpdates(_0x15c356['body'],null))['then'](respondWithResult(_0x205e40,null))[_0x02b1('0x25')](handleError(_0x205e40,null));};exports[_0x02b1('0x31')]=function(_0x5006a1,_0x45313a){return db[_0x02b1('0x36')][_0x02b1('0x52')]({'where':{'id':_0x5006a1[_0x02b1('0x55')]['id']}})[_0x02b1('0x1a')](handleEntityNotFound(_0x45313a,null))['then'](removeEntity(_0x45313a,null))[_0x02b1('0x25')](handleError(_0x45313a,null));};exports[_0x02b1('0x56')]=function(_0x57b5c9,_0x3fb76a,_0x3a3b19){var _0x5cde33={};var _0x299aaa={};var _0xd9b22;var _0x8d9184;return db['ZohoConfiguration'][_0x02b1('0x57')]({'where':{'id':_0x57b5c9['params']['id']}})['then'](handleEntityNotFound(_0x3fb76a,null))[_0x02b1('0x1a')](function(_0x2ad9b3){if(_0x2ad9b3){_0xd9b22=_0x2ad9b3;_0x299aaa[_0x02b1('0x38')]=_[_0x02b1('0x39')](db[_0x02b1('0x58')]['rawAttributes']);_0x299aaa[_0x02b1('0x3a')]=_[_0x02b1('0x39')](_0x57b5c9[_0x02b1('0x3a')]);_0x299aaa[_0x02b1('0x3b')]=_['intersection'](_0x299aaa[_0x02b1('0x38')],_0x299aaa[_0x02b1('0x3a')]);_0x5cde33[_0x02b1('0x3c')]=_['intersection'](_0x299aaa[_0x02b1('0x38')],qs[_0x02b1('0x3d')](_0x57b5c9[_0x02b1('0x3a')][_0x02b1('0x3d')]));_0x5cde33[_0x02b1('0x3c')]=_0x5cde33[_0x02b1('0x3c')][_0x02b1('0x3e')]?_0x5cde33['attributes']:_0x299aaa[_0x02b1('0x38')];_0x5cde33[_0x02b1('0x41')]=qs[_0x02b1('0x42')](_0x57b5c9[_0x02b1('0x3a')][_0x02b1('0x42')]);_0x5cde33[_0x02b1('0x43')]=qs[_0x02b1('0x3b')](_[_0x02b1('0x44')](_0x57b5c9[_0x02b1('0x3a')],_0x299aaa['filters']));if(_0x57b5c9['query']['filter']){_0x5cde33[_0x02b1('0x43')]=_[_0x02b1('0x46')](_0x5cde33[_0x02b1('0x43')],{'$or':_[_0x02b1('0x47')](_0x5cde33[_0x02b1('0x3c')],function(_0x54bb63){var _0x45da05={};_0x45da05[_0x54bb63]={'$like':'%'+_0x57b5c9['query'][_0x02b1('0x45')]+'%'};return _0x45da05;})});}_0x5cde33=_[_0x02b1('0x46')]({},_0x5cde33,_0x57b5c9[_0x02b1('0x4b')]);return _0xd9b22[_0x02b1('0x56')](_0x5cde33);}})[_0x02b1('0x1a')](function(_0x1efd62){if(_0x1efd62){_0x8d9184=_0x1efd62[_0x02b1('0x3e')];if(!_0x57b5c9['query'][_0x02b1('0x3f')]('nolimit')){_0x5cde33[_0x02b1('0x2a')]=qs[_0x02b1('0x2a')](_0x57b5c9[_0x02b1('0x3a')][_0x02b1('0x2a')]);_0x5cde33['offset']=qs[_0x02b1('0x29')](_0x57b5c9[_0x02b1('0x3a')][_0x02b1('0x29')]);}return _0xd9b22[_0x02b1('0x56')](_0x5cde33);}})['then'](function(_0xb7eacf){if(_0xb7eacf){return _0xb7eacf?{'count':_0x8d9184,'rows':_0xb7eacf}:null;}})[_0x02b1('0x1a')](respondWithResult(_0x3fb76a,null))['catch'](handleError(_0x3fb76a,null));};exports[_0x02b1('0x59')]=function(_0x2af30d,_0x54c0d6,_0x1b4eb9){var _0x58235d={};var _0xaac56f={};var _0x1fe08e;var _0xc81e04;return db[_0x02b1('0x36')][_0x02b1('0x57')]({'where':{'id':_0x2af30d[_0x02b1('0x55')]['id']}})['then'](handleEntityNotFound(_0x54c0d6,null))[_0x02b1('0x1a')](function(_0x1d05d0){if(_0x1d05d0){_0x1fe08e=_0x1d05d0;_0xaac56f[_0x02b1('0x38')]=_[_0x02b1('0x39')](db['ZohoField'][_0x02b1('0x37')]);_0xaac56f[_0x02b1('0x3a')]=_[_0x02b1('0x39')](_0x2af30d['query']);_0xaac56f[_0x02b1('0x3b')]=_[_0x02b1('0x51')](_0xaac56f[_0x02b1('0x38')],_0xaac56f[_0x02b1('0x3a')]);_0x58235d[_0x02b1('0x3c')]=_[_0x02b1('0x51')](_0xaac56f['model'],qs[_0x02b1('0x3d')](_0x2af30d[_0x02b1('0x3a')][_0x02b1('0x3d')]));_0x58235d['attributes']=_0x58235d[_0x02b1('0x3c')]['length']?_0x58235d[_0x02b1('0x3c')]:_0xaac56f[_0x02b1('0x38')];_0x58235d[_0x02b1('0x41')]=qs[_0x02b1('0x42')](_0x2af30d[_0x02b1('0x3a')][_0x02b1('0x42')]);_0x58235d[_0x02b1('0x43')]=qs[_0x02b1('0x3b')](_[_0x02b1('0x44')](_0x2af30d[_0x02b1('0x3a')],_0xaac56f[_0x02b1('0x3b')]));if(_0x2af30d[_0x02b1('0x3a')][_0x02b1('0x45')]){_0x58235d[_0x02b1('0x43')]=_[_0x02b1('0x46')](_0x58235d[_0x02b1('0x43')],{'$or':_[_0x02b1('0x47')](_0x58235d['attributes'],function(_0x325209){var _0x17390a={};_0x17390a[_0x325209]={'$like':'%'+_0x2af30d[_0x02b1('0x3a')][_0x02b1('0x45')]+'%'};return _0x17390a;})});}_0x58235d=_[_0x02b1('0x46')]({},_0x58235d,_0x2af30d[_0x02b1('0x4b')]);return _0x1fe08e[_0x02b1('0x59')](_0x58235d);}})[_0x02b1('0x1a')](function(_0x5d01c0){if(_0x5d01c0){_0xc81e04=_0x5d01c0[_0x02b1('0x3e')];if(!_0x2af30d[_0x02b1('0x3a')][_0x02b1('0x3f')](_0x02b1('0x40'))){_0x58235d[_0x02b1('0x2a')]=qs[_0x02b1('0x2a')](_0x2af30d[_0x02b1('0x3a')]['limit']);_0x58235d[_0x02b1('0x29')]=qs['offset'](_0x2af30d[_0x02b1('0x3a')][_0x02b1('0x29')]);}return _0x1fe08e[_0x02b1('0x59')](_0x58235d);}})[_0x02b1('0x1a')](function(_0x30f032){if(_0x30f032){return _0x30f032?{'count':_0xc81e04,'rows':_0x30f032}:null;}})['then'](respondWithResult(_0x54c0d6,null))['catch'](handleError(_0x54c0d6,null));};exports[_0x02b1('0x5a')]=function(_0x4bfdfc,_0x5ecabb,_0x120260){var _0x2d4a25={};var _0x42991a={};var _0x2d4f5e;var _0x90856b;return db[_0x02b1('0x36')][_0x02b1('0x57')]({'where':{'id':_0x4bfdfc[_0x02b1('0x55')]['id']}})['then'](handleEntityNotFound(_0x5ecabb,null))[_0x02b1('0x1a')](function(_0xe0e272){if(_0xe0e272){_0x2d4f5e=_0xe0e272;_0x42991a[_0x02b1('0x38')]=_['keys'](db[_0x02b1('0x58')][_0x02b1('0x37')]);_0x42991a[_0x02b1('0x3a')]=_['keys'](_0x4bfdfc['query']);_0x42991a['filters']=_[_0x02b1('0x51')](_0x42991a['model'],_0x42991a[_0x02b1('0x3a')]);_0x2d4a25['attributes']=_[_0x02b1('0x51')](_0x42991a[_0x02b1('0x38')],qs[_0x02b1('0x3d')](_0x4bfdfc['query']['fields']));_0x2d4a25[_0x02b1('0x3c')]=_0x2d4a25['attributes']['length']?_0x2d4a25[_0x02b1('0x3c')]:_0x42991a['model'];_0x2d4a25[_0x02b1('0x41')]=qs[_0x02b1('0x42')](_0x4bfdfc[_0x02b1('0x3a')][_0x02b1('0x42')]);_0x2d4a25[_0x02b1('0x43')]=qs[_0x02b1('0x3b')](_[_0x02b1('0x44')](_0x4bfdfc[_0x02b1('0x3a')],_0x42991a['filters']));if(_0x4bfdfc[_0x02b1('0x3a')][_0x02b1('0x45')]){_0x2d4a25[_0x02b1('0x43')]=_[_0x02b1('0x46')](_0x2d4a25['where'],{'$or':_['map'](_0x2d4a25[_0x02b1('0x3c')],function(_0x4dfe78){var _0x5bb130={};_0x5bb130[_0x4dfe78]={'$like':'%'+_0x4bfdfc[_0x02b1('0x3a')][_0x02b1('0x45')]+'%'};return _0x5bb130;})});}_0x2d4a25=_[_0x02b1('0x46')]({},_0x2d4a25,_0x4bfdfc[_0x02b1('0x4b')]);return _0x2d4f5e['getDescriptions'](_0x2d4a25);}})[_0x02b1('0x1a')](function(_0x3657f2){if(_0x3657f2){_0x90856b=_0x3657f2[_0x02b1('0x3e')];if(!_0x4bfdfc[_0x02b1('0x3a')]['hasOwnProperty'](_0x02b1('0x40'))){_0x2d4a25[_0x02b1('0x2a')]=qs['limit'](_0x4bfdfc[_0x02b1('0x3a')][_0x02b1('0x2a')]);_0x2d4a25[_0x02b1('0x29')]=qs['offset'](_0x4bfdfc['query']['offset']);}return _0x2d4f5e[_0x02b1('0x5a')](_0x2d4a25);}})['then'](function(_0x2d096a){if(_0x2d096a){return _0x2d096a?{'count':_0x90856b,'rows':_0x2d096a}:null;}})[_0x02b1('0x1a')](respondWithResult(_0x5ecabb,null))['catch'](handleError(_0x5ecabb,null));};
\ No newline at end of file
+var _0xb406=['status','end','json','count','offset','limit','reject','destroy','stack','name','send','index','rawAttributes','model','keys','query','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','map','field','options','ZohoConfiguration','include','rows','catch','params','includeAll','merge','create','body','update','find','getFields','ZohoField','length','getSubjects','getDescriptions','findOne','html-pdf','eml-format','rimraf','zip-dir','moment','bluebird','mustache','util','sox','to-csv','crypto','jsforce','desk.js','querystring','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','http','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','then','info','ZohoConfiguration,\x20%s,\x20%s','request\x20sent','debug','ZohoConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','sendStatus'];(function(_0x47e7cb,_0x4c1b8d){var _0x2a8874=function(_0x36498f){while(--_0x36498f){_0x47e7cb['push'](_0x47e7cb['shift']());}};_0x2a8874(++_0x4c1b8d);}(_0xb406,0xd1));var _0x6b40=function(_0x2d9b31,_0x22393b){_0x2d9b31=_0x2d9b31-0x0;var _0x534d1b=_0xb406[_0x2d9b31];return _0x534d1b;};'use strict';var pdf=require(_0x6b40('0x0'));var emlformat=require(_0x6b40('0x1'));var rimraf=require(_0x6b40('0x2'));var zipdir=require(_0x6b40('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x6b40('0x4'));var BPromise=require(_0x6b40('0x5'));var Mustache=require(_0x6b40('0x6'));var util=require(_0x6b40('0x7'));var path=require('path');var sox=require(_0x6b40('0x8'));var csv=require(_0x6b40('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x6b40('0xa'));var jsforce=require(_0x6b40('0xb'));var deskjs=require(_0x6b40('0xc'));var toCsv=require('to-csv');var querystring=require(_0x6b40('0xd'));var Papa=require('papaparse');var Redis=require(_0x6b40('0xe'));var authService=require('../../components/auth/service');var qs=require(_0x6b40('0xf'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x6b40('0x10'))('api');var utils=require(_0x6b40('0x11'));var config=require(_0x6b40('0x12'));var db=require(_0x6b40('0x13'))['db'];var jayson=require(_0x6b40('0x14'));var client=jayson['client'][_0x6b40('0x15')]({'port':0x232a});function checkPasswordPattern(_0x14bd3c,_0x4cd350,_0x26af53){if(_0x26af53){var _0x191bd5=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x191bd5['test'](_0x4cd350)){return _0x14bd3c;}else{throw new Error(_0x6b40('0x16'));}}else{return _0x14bd3c;}}function respondWithRpcPromise(_0x4b28b4,_0x2fd573,_0x37b06d,_0x86e318){return new BPromise(function(_0x519d97,_0x444143){var _0x11ad99=_0x86e318||client;return _0x11ad99['request'](_0x4b28b4,_0x37b06d)[_0x6b40('0x17')](function(_0x5e985f){logger[_0x6b40('0x18')](_0x6b40('0x19'),_0x2fd573,_0x6b40('0x1a'));logger[_0x6b40('0x1b')](_0x6b40('0x1c'),_0x2fd573,'request\x20sent',JSON[_0x6b40('0x1d')](_0x5e985f));if(_0x5e985f[_0x6b40('0x1e')]){if(_0x5e985f[_0x6b40('0x1e')][_0x6b40('0x1f')]===0x1f4){logger[_0x6b40('0x1e')](_0x6b40('0x19'),_0x2fd573,_0x5e985f['error'][_0x6b40('0x20')]);return _0x444143(_0x5e985f[_0x6b40('0x1e')][_0x6b40('0x20')]);}logger[_0x6b40('0x1e')]('ZohoConfiguration,\x20%s,\x20%s',_0x2fd573,_0x5e985f[_0x6b40('0x1e')][_0x6b40('0x20')]);return _0x519d97(_0x5e985f[_0x6b40('0x1e')][_0x6b40('0x20')]);}else{logger[_0x6b40('0x18')](_0x6b40('0x19'),_0x2fd573,_0x6b40('0x1a'));_0x519d97(_0x5e985f['result']['message']);}})['catch'](function(_0x1401b7){logger[_0x6b40('0x1e')](_0x6b40('0x19'),_0x2fd573,_0x1401b7);_0x444143(_0x1401b7);});});}function respondWithStatusCode(_0x4a9328,_0x3b17d9){_0x3b17d9=_0x3b17d9||0xcc;return function(_0x49b25c){if(_0x49b25c){return _0x4a9328[_0x6b40('0x21')](_0x3b17d9);}return _0x4a9328[_0x6b40('0x22')](_0x3b17d9)[_0x6b40('0x23')]();};}function respondWithResult(_0x2984c0,_0x22892d){_0x22892d=_0x22892d||0xc8;return function(_0x18312a){if(_0x18312a){return _0x2984c0[_0x6b40('0x22')](_0x22892d)[_0x6b40('0x24')](_0x18312a);}};}function respondWithFilteredResult(_0x3a1f5e,_0x1f6b80){return function(_0x6c4ddd){if(_0x6c4ddd){var _0x5b5f6f=_0x6c4ddd[_0x6b40('0x25')],_0x56f59c=_0x1f6b80[_0x6b40('0x26')],_0x4da483=_0x1f6b80[_0x6b40('0x26')]+_0x1f6b80[_0x6b40('0x27')],_0x660957;if(_0x4da483>=_0x5b5f6f){_0x4da483=_0x5b5f6f;_0x660957=0xc8;}else{_0x660957=0xce;}_0x3a1f5e[_0x6b40('0x22')](_0x660957);return _0x3a1f5e['set']('Content-Range',_0x56f59c+'-'+_0x4da483+'/'+_0x5b5f6f)[_0x6b40('0x24')](_0x6c4ddd);}return null;};}function patchUpdates(_0x59e16e){return function(_0x4a29a5){try{jsonpatch['apply'](_0x4a29a5,_0x59e16e,!![]);}catch(_0x2380f5){return BPromise[_0x6b40('0x28')](_0x2380f5);}return _0x4a29a5['save']();};}function saveUpdates(_0x3abcc4,_0x5a8687){return function(_0x164dde){if(_0x164dde){return _0x164dde['update'](_0x3abcc4)[_0x6b40('0x17')](function(_0x4ad2b9){return _0x4ad2b9;});}return null;};}function removeEntity(_0x389770,_0x5702bd){return function(_0x5994de){if(_0x5994de){return _0x5994de[_0x6b40('0x29')]()[_0x6b40('0x17')](function(){_0x389770[_0x6b40('0x22')](0xcc)[_0x6b40('0x23')]();});}};}function handleEntityNotFound(_0x5069d2,_0x4b2994){return function(_0x38a796){if(!_0x38a796){_0x5069d2[_0x6b40('0x21')](0x194);}return _0x38a796;};}function handleError(_0x34b7e9,_0x55a091){_0x55a091=_0x55a091||0x1f4;return function(_0x168f8e){logger['error'](_0x168f8e[_0x6b40('0x2a')]);if(_0x168f8e[_0x6b40('0x2b')]){delete _0x168f8e[_0x6b40('0x2b')];}_0x34b7e9[_0x6b40('0x22')](_0x55a091)[_0x6b40('0x2c')](_0x168f8e);};}exports[_0x6b40('0x2d')]=function(_0x4864f4,_0x43898f){var _0x5305bc={},_0x31ed41={},_0x183093={'count':0x0,'rows':[]};var _0xa126b9=db['ZohoConfiguration'][_0x6b40('0x2e')];_0x31ed41[_0x6b40('0x2f')]=_[_0x6b40('0x30')](_0xa126b9);_0x31ed41[_0x6b40('0x31')]=_[_0x6b40('0x30')](_0x4864f4['query']);_0x31ed41['filters']=_[_0x6b40('0x32')](_0x31ed41[_0x6b40('0x2f')],_0x31ed41[_0x6b40('0x31')]);_0x5305bc['attributes']=_[_0x6b40('0x32')](_0x31ed41[_0x6b40('0x2f')],qs[_0x6b40('0x33')](_0x4864f4[_0x6b40('0x31')]['fields']));_0x5305bc[_0x6b40('0x34')]=_0x5305bc[_0x6b40('0x34')]['length']?_0x5305bc[_0x6b40('0x34')]:_0x31ed41[_0x6b40('0x2f')];if(!_0x4864f4[_0x6b40('0x31')][_0x6b40('0x35')](_0x6b40('0x36'))){_0x5305bc[_0x6b40('0x27')]=qs[_0x6b40('0x27')](_0x4864f4['query']['limit']);_0x5305bc[_0x6b40('0x26')]=qs[_0x6b40('0x26')](_0x4864f4[_0x6b40('0x31')][_0x6b40('0x26')]);}_0x5305bc[_0x6b40('0x37')]=qs[_0x6b40('0x38')](_0x4864f4[_0x6b40('0x31')][_0x6b40('0x38')]);_0x5305bc[_0x6b40('0x39')]=qs[_0x6b40('0x3a')](_[_0x6b40('0x3b')](_0x4864f4['query'],_0x31ed41['filters']));if(_0x4864f4['query'][_0x6b40('0x3c')]){_0x5305bc['where']=_['merge'](_0x5305bc[_0x6b40('0x39')],{'$or':_[_0x6b40('0x3d')](_0xa126b9,function(_0x973505){if(_0x973505['type']['key']!=='VIRTUAL'){var _0x53d62f={};_0x53d62f[_0x973505[_0x6b40('0x3e')]]={'$like':'%'+_0x4864f4[_0x6b40('0x31')][_0x6b40('0x3c')]+'%'};return _0x53d62f;}})});}_0x5305bc=_['merge']({},_0x5305bc,_0x4864f4[_0x6b40('0x3f')]);var _0x89ede4={'where':_0x5305bc[_0x6b40('0x39')]};return db[_0x6b40('0x40')]['count'](_0x89ede4)[_0x6b40('0x17')](function(_0x92fd0e){_0x183093[_0x6b40('0x25')]=_0x92fd0e;if(_0x4864f4[_0x6b40('0x31')]['includeAll']){_0x5305bc[_0x6b40('0x41')]=[{'all':!![]}];}return db[_0x6b40('0x40')]['findAll'](_0x5305bc);})['then'](function(_0x2ab3f8){_0x183093[_0x6b40('0x42')]=_0x2ab3f8;return _0x183093;})[_0x6b40('0x17')](respondWithFilteredResult(_0x43898f,_0x5305bc))[_0x6b40('0x43')](handleError(_0x43898f,null));};exports['show']=function(_0x375e78,_0x39c1e4){var _0x776b13={'raw':![],'where':{'id':_0x375e78[_0x6b40('0x44')]['id']}},_0x404682={};_0x404682[_0x6b40('0x2f')]=_[_0x6b40('0x30')](db[_0x6b40('0x40')][_0x6b40('0x2e')]);_0x404682[_0x6b40('0x31')]=_[_0x6b40('0x30')](_0x375e78[_0x6b40('0x31')]);_0x404682[_0x6b40('0x3a')]=_[_0x6b40('0x32')](_0x404682[_0x6b40('0x2f')],_0x404682[_0x6b40('0x31')]);_0x776b13[_0x6b40('0x34')]=_['intersection'](_0x404682['model'],qs[_0x6b40('0x33')](_0x375e78[_0x6b40('0x31')][_0x6b40('0x33')]));_0x776b13['attributes']=_0x776b13[_0x6b40('0x34')]['length']?_0x776b13['attributes']:_0x404682[_0x6b40('0x2f')];if(_0x375e78[_0x6b40('0x31')][_0x6b40('0x45')]){_0x776b13[_0x6b40('0x41')]=[{'all':!![]}];}_0x776b13=_[_0x6b40('0x46')]({},_0x776b13,_0x375e78[_0x6b40('0x3f')]);return db[_0x6b40('0x40')]['find'](_0x776b13)[_0x6b40('0x17')](handleEntityNotFound(_0x39c1e4,null))[_0x6b40('0x17')](respondWithResult(_0x39c1e4,null))[_0x6b40('0x43')](handleError(_0x39c1e4,null));};exports[_0x6b40('0x47')]=function(_0x200af1,_0xf76d16){return db['ZohoConfiguration'][_0x6b40('0x47')](_0x200af1[_0x6b40('0x48')],{})[_0x6b40('0x17')](respondWithResult(_0xf76d16,0xc9))[_0x6b40('0x43')](handleError(_0xf76d16,null));};exports[_0x6b40('0x49')]=function(_0xb8b7c5,_0x24ab4a){if(_0xb8b7c5[_0x6b40('0x48')]['id']){delete _0xb8b7c5[_0x6b40('0x48')]['id'];}return db['ZohoConfiguration'][_0x6b40('0x4a')]({'where':{'id':_0xb8b7c5['params']['id']}})[_0x6b40('0x17')](handleEntityNotFound(_0x24ab4a,null))[_0x6b40('0x17')](saveUpdates(_0xb8b7c5[_0x6b40('0x48')],null))[_0x6b40('0x17')](respondWithResult(_0x24ab4a,null))[_0x6b40('0x43')](handleError(_0x24ab4a,null));};exports['destroy']=function(_0x52ea07,_0x57b973){return db[_0x6b40('0x40')][_0x6b40('0x4a')]({'where':{'id':_0x52ea07[_0x6b40('0x44')]['id']}})['then'](handleEntityNotFound(_0x57b973,null))[_0x6b40('0x17')](removeEntity(_0x57b973,null))['catch'](handleError(_0x57b973,null));};exports[_0x6b40('0x4b')]=function(_0x48a2b7,_0x5b9126,_0x35ebff){var _0x364079={};var _0x54d23e={};var _0x91df37;var _0x2552c1;return db[_0x6b40('0x40')]['findOne']({'where':{'id':_0x48a2b7['params']['id']}})['then'](handleEntityNotFound(_0x5b9126,null))[_0x6b40('0x17')](function(_0x3dc7f0){if(_0x3dc7f0){_0x91df37=_0x3dc7f0;_0x54d23e['model']=_[_0x6b40('0x30')](db[_0x6b40('0x4c')][_0x6b40('0x2e')]);_0x54d23e['query']=_[_0x6b40('0x30')](_0x48a2b7[_0x6b40('0x31')]);_0x54d23e[_0x6b40('0x3a')]=_['intersection'](_0x54d23e['model'],_0x54d23e[_0x6b40('0x31')]);_0x364079[_0x6b40('0x34')]=_[_0x6b40('0x32')](_0x54d23e[_0x6b40('0x2f')],qs['fields'](_0x48a2b7['query']['fields']));_0x364079[_0x6b40('0x34')]=_0x364079[_0x6b40('0x34')][_0x6b40('0x4d')]?_0x364079['attributes']:_0x54d23e[_0x6b40('0x2f')];_0x364079[_0x6b40('0x37')]=qs[_0x6b40('0x38')](_0x48a2b7[_0x6b40('0x31')]['sort']);_0x364079[_0x6b40('0x39')]=qs['filters'](_[_0x6b40('0x3b')](_0x48a2b7[_0x6b40('0x31')],_0x54d23e['filters']));if(_0x48a2b7['query'][_0x6b40('0x3c')]){_0x364079[_0x6b40('0x39')]=_[_0x6b40('0x46')](_0x364079['where'],{'$or':_[_0x6b40('0x3d')](_0x364079[_0x6b40('0x34')],function(_0x12992d){var _0x1ca2a0={};_0x1ca2a0[_0x12992d]={'$like':'%'+_0x48a2b7[_0x6b40('0x31')][_0x6b40('0x3c')]+'%'};return _0x1ca2a0;})});}_0x364079=_[_0x6b40('0x46')]({},_0x364079,_0x48a2b7[_0x6b40('0x3f')]);return _0x91df37[_0x6b40('0x4b')](_0x364079);}})['then'](function(_0x49805a){if(_0x49805a){_0x2552c1=_0x49805a['length'];if(!_0x48a2b7[_0x6b40('0x31')][_0x6b40('0x35')](_0x6b40('0x36'))){_0x364079[_0x6b40('0x27')]=qs[_0x6b40('0x27')](_0x48a2b7['query'][_0x6b40('0x27')]);_0x364079[_0x6b40('0x26')]=qs[_0x6b40('0x26')](_0x48a2b7['query'][_0x6b40('0x26')]);}return _0x91df37[_0x6b40('0x4b')](_0x364079);}})['then'](function(_0x7e96ed){if(_0x7e96ed){return _0x7e96ed?{'count':_0x2552c1,'rows':_0x7e96ed}:null;}})[_0x6b40('0x17')](respondWithResult(_0x5b9126,null))[_0x6b40('0x43')](handleError(_0x5b9126,null));};exports[_0x6b40('0x4e')]=function(_0x42f63b,_0x254b12,_0x2c7a23){var _0x4cd124={};var _0x10a877={};var _0x1dfc8a;var _0x11ce7e;return db[_0x6b40('0x40')]['findOne']({'where':{'id':_0x42f63b[_0x6b40('0x44')]['id']}})[_0x6b40('0x17')](handleEntityNotFound(_0x254b12,null))[_0x6b40('0x17')](function(_0x703b31){if(_0x703b31){_0x1dfc8a=_0x703b31;_0x10a877[_0x6b40('0x2f')]=_[_0x6b40('0x30')](db['ZohoField'][_0x6b40('0x2e')]);_0x10a877['query']=_[_0x6b40('0x30')](_0x42f63b[_0x6b40('0x31')]);_0x10a877['filters']=_['intersection'](_0x10a877[_0x6b40('0x2f')],_0x10a877[_0x6b40('0x31')]);_0x4cd124['attributes']=_[_0x6b40('0x32')](_0x10a877['model'],qs['fields'](_0x42f63b[_0x6b40('0x31')]['fields']));_0x4cd124['attributes']=_0x4cd124[_0x6b40('0x34')][_0x6b40('0x4d')]?_0x4cd124[_0x6b40('0x34')]:_0x10a877[_0x6b40('0x2f')];_0x4cd124['order']=qs[_0x6b40('0x38')](_0x42f63b[_0x6b40('0x31')]['sort']);_0x4cd124[_0x6b40('0x39')]=qs[_0x6b40('0x3a')](_[_0x6b40('0x3b')](_0x42f63b['query'],_0x10a877[_0x6b40('0x3a')]));if(_0x42f63b[_0x6b40('0x31')]['filter']){_0x4cd124[_0x6b40('0x39')]=_[_0x6b40('0x46')](_0x4cd124[_0x6b40('0x39')],{'$or':_[_0x6b40('0x3d')](_0x4cd124[_0x6b40('0x34')],function(_0x37f233){var _0x503fac={};_0x503fac[_0x37f233]={'$like':'%'+_0x42f63b['query'][_0x6b40('0x3c')]+'%'};return _0x503fac;})});}_0x4cd124=_['merge']({},_0x4cd124,_0x42f63b[_0x6b40('0x3f')]);return _0x1dfc8a[_0x6b40('0x4e')](_0x4cd124);}})[_0x6b40('0x17')](function(_0x2ad703){if(_0x2ad703){_0x11ce7e=_0x2ad703[_0x6b40('0x4d')];if(!_0x42f63b[_0x6b40('0x31')]['hasOwnProperty'](_0x6b40('0x36'))){_0x4cd124[_0x6b40('0x27')]=qs[_0x6b40('0x27')](_0x42f63b['query'][_0x6b40('0x27')]);_0x4cd124[_0x6b40('0x26')]=qs['offset'](_0x42f63b['query'][_0x6b40('0x26')]);}return _0x1dfc8a[_0x6b40('0x4e')](_0x4cd124);}})[_0x6b40('0x17')](function(_0x5c2e31){if(_0x5c2e31){return _0x5c2e31?{'count':_0x11ce7e,'rows':_0x5c2e31}:null;}})['then'](respondWithResult(_0x254b12,null))[_0x6b40('0x43')](handleError(_0x254b12,null));};exports[_0x6b40('0x4f')]=function(_0x3e2bae,_0x12012e,_0x3239b9){var _0x351208={};var _0x402fa3={};var _0x1072cf;var _0x1841de;return db[_0x6b40('0x40')][_0x6b40('0x50')]({'where':{'id':_0x3e2bae[_0x6b40('0x44')]['id']}})[_0x6b40('0x17')](handleEntityNotFound(_0x12012e,null))[_0x6b40('0x17')](function(_0x1c851c){if(_0x1c851c){_0x1072cf=_0x1c851c;_0x402fa3[_0x6b40('0x2f')]=_[_0x6b40('0x30')](db[_0x6b40('0x4c')][_0x6b40('0x2e')]);_0x402fa3[_0x6b40('0x31')]=_[_0x6b40('0x30')](_0x3e2bae[_0x6b40('0x31')]);_0x402fa3[_0x6b40('0x3a')]=_['intersection'](_0x402fa3[_0x6b40('0x2f')],_0x402fa3[_0x6b40('0x31')]);_0x351208[_0x6b40('0x34')]=_[_0x6b40('0x32')](_0x402fa3[_0x6b40('0x2f')],qs[_0x6b40('0x33')](_0x3e2bae[_0x6b40('0x31')][_0x6b40('0x33')]));_0x351208[_0x6b40('0x34')]=_0x351208[_0x6b40('0x34')][_0x6b40('0x4d')]?_0x351208[_0x6b40('0x34')]:_0x402fa3[_0x6b40('0x2f')];_0x351208[_0x6b40('0x37')]=qs['sort'](_0x3e2bae['query'][_0x6b40('0x38')]);_0x351208[_0x6b40('0x39')]=qs[_0x6b40('0x3a')](_[_0x6b40('0x3b')](_0x3e2bae['query'],_0x402fa3['filters']));if(_0x3e2bae['query'][_0x6b40('0x3c')]){_0x351208[_0x6b40('0x39')]=_[_0x6b40('0x46')](_0x351208['where'],{'$or':_[_0x6b40('0x3d')](_0x351208[_0x6b40('0x34')],function(_0x3d640f){var _0x9f6017={};_0x9f6017[_0x3d640f]={'$like':'%'+_0x3e2bae[_0x6b40('0x31')][_0x6b40('0x3c')]+'%'};return _0x9f6017;})});}_0x351208=_[_0x6b40('0x46')]({},_0x351208,_0x3e2bae['options']);return _0x1072cf[_0x6b40('0x4f')](_0x351208);}})[_0x6b40('0x17')](function(_0x5107a9){if(_0x5107a9){_0x1841de=_0x5107a9['length'];if(!_0x3e2bae['query'][_0x6b40('0x35')](_0x6b40('0x36'))){_0x351208['limit']=qs[_0x6b40('0x27')](_0x3e2bae[_0x6b40('0x31')][_0x6b40('0x27')]);_0x351208[_0x6b40('0x26')]=qs[_0x6b40('0x26')](_0x3e2bae['query']['offset']);}return _0x1072cf['getDescriptions'](_0x351208);}})[_0x6b40('0x17')](function(_0x1dbbde){if(_0x1dbbde){return _0x1dbbde?{'count':_0x1841de,'rows':_0x1dbbde}:null;}})['then'](respondWithResult(_0x12012e,null))[_0x6b40('0x43')](handleError(_0x12012e,null));};
\ No newline at end of file
index c7fbcbe..d56d428 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1339=['moment','bluebird','request-promise','path','rimraf','../../config/environment','exports','ZohoConfiguration','int_zoho_configurations','../../config/logger','api'];(function(_0x1e291a,_0x13a9da){var _0x448d8a=function(_0x329ac6){while(--_0x329ac6){_0x1e291a['push'](_0x1e291a['shift']());}};_0x448d8a(++_0x13a9da);}(_0x1339,0x1ed));var _0x9133=function(_0x528656,_0x581f3b){_0x528656=_0x528656-0x0;var _0x4abcc1=_0x1339[_0x528656];return _0x4abcc1;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x9133('0x0'))(_0x9133('0x1'));var moment=require(_0x9133('0x2'));var BPromise=require(_0x9133('0x3'));var rp=require(_0x9133('0x4'));var fs=require('fs');var path=require(_0x9133('0x5'));var rimraf=require(_0x9133('0x6'));var config=require(_0x9133('0x7'));var attributes=require('./intZohoConfiguration.attributes');module[_0x9133('0x8')]=function(_0x855473,_0x379915){return _0x855473['define'](_0x9133('0x9'),attributes,{'tableName':_0x9133('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb688=['exports','ZohoConfiguration','int_zoho_configurations','util','../../config/logger','api','moment','bluebird','request-promise','rimraf','../../config/environment','./intZohoConfiguration.attributes'];(function(_0x5ef0ef,_0x55c55d){var _0x5c8ec6=function(_0x3d4872){while(--_0x3d4872){_0x5ef0ef['push'](_0x5ef0ef['shift']());}};_0x5c8ec6(++_0x55c55d);}(_0xb688,0xcf));var _0x8b68=function(_0x50d0d8,_0x6cb90c){_0x50d0d8=_0x50d0d8-0x0;var _0x260963=_0xb688[_0x50d0d8];return _0x260963;};'use strict';var _=require('lodash');var util=require(_0x8b68('0x0'));var logger=require(_0x8b68('0x1'))(_0x8b68('0x2'));var moment=require(_0x8b68('0x3'));var BPromise=require(_0x8b68('0x4'));var rp=require(_0x8b68('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x8b68('0x6'));var config=require(_0x8b68('0x7'));var attributes=require(_0x8b68('0x8'));module[_0x8b68('0x9')]=function(_0x583d16,_0x34314e){return _0x583d16['define'](_0x8b68('0xa'),attributes,{'tableName':_0x8b68('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index cccb9ca..76e3141 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdb15=['../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','request\x20sent','debug','ZohoConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','ZohoConfiguration,\x20%s,\x20%s','info','result','lodash','util','bluebird','ioredis'];(function(_0x58516c,_0x4272c0){var _0x39263b=function(_0x18a9b8){while(--_0x18a9b8){_0x58516c['push'](_0x58516c['shift']());}};_0x39263b(++_0x4272c0);}(_0xdb15,0x1b4));var _0x5db1=function(_0x418e63,_0x40d04f){_0x418e63=_0x418e63-0x0;var _0x4cded6=_0xdb15[_0x418e63];return _0x4cded6;};'use strict';var _=require(_0x5db1('0x0'));var util=require(_0x5db1('0x1'));var moment=require('moment');var BPromise=require(_0x5db1('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x5db1('0x3'));var db=require(_0x5db1('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x5db1('0x5'))(_0x5db1('0x6'));var config=require(_0x5db1('0x7'));var jayson=require(_0x5db1('0x8'));var client=jayson[_0x5db1('0x9')][_0x5db1('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x28e033,_0x1e3320,_0x51c453){return new BPromise(function(_0x2cf239,_0x244295){return client['request'](_0x28e033,_0x51c453)[_0x5db1('0xb')](function(_0x2f3356){logger['info']('ZohoConfiguration,\x20%s,\x20%s',_0x1e3320,_0x5db1('0xc'));logger[_0x5db1('0xd')](_0x5db1('0xe'),_0x1e3320,_0x5db1('0xc'),JSON[_0x5db1('0xf')](_0x2f3356));if(_0x2f3356['error']){if(_0x2f3356[_0x5db1('0x10')][_0x5db1('0x11')]===0x1f4){logger[_0x5db1('0x10')]('ZohoConfiguration,\x20%s,\x20%s',_0x1e3320,_0x2f3356[_0x5db1('0x10')][_0x5db1('0x12')]);return _0x244295(_0x2f3356[_0x5db1('0x10')][_0x5db1('0x12')]);}logger['error'](_0x5db1('0x13'),_0x1e3320,_0x2f3356[_0x5db1('0x10')]['message']);return _0x2cf239(_0x2f3356['error'][_0x5db1('0x12')]);}else{logger[_0x5db1('0x14')](_0x5db1('0x13'),_0x1e3320,_0x5db1('0xc'));_0x2cf239(_0x2f3356[_0x5db1('0x15')][_0x5db1('0x12')]);}})['catch'](function(_0x2e3d29){logger['error'](_0x5db1('0x13'),_0x1e3320,_0x2e3d29);_0x244295(_0x2e3d29);});});}
\ No newline at end of file
+var _0xfbc4=['http','request','then','info','ZohoConfiguration,\x20%s,\x20%s','request\x20sent','ZohoConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','message','result','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client'];(function(_0x2b3432,_0x1411a0){var _0x341808=function(_0x583ffe){while(--_0x583ffe){_0x2b3432['push'](_0x2b3432['shift']());}};_0x341808(++_0x1411a0);}(_0xfbc4,0x197));var _0x4fbc=function(_0x572f87,_0x365b1f){_0x572f87=_0x572f87-0x0;var _0x4ee7e0=_0xfbc4[_0x572f87];return _0x4ee7e0;};'use strict';var _=require('lodash');var util=require(_0x4fbc('0x0'));var moment=require(_0x4fbc('0x1'));var BPromise=require('bluebird');var rs=require(_0x4fbc('0x2'));var fs=require('fs');var Redis=require(_0x4fbc('0x3'));var db=require(_0x4fbc('0x4'))['db'];var utils=require(_0x4fbc('0x5'));var logger=require(_0x4fbc('0x6'))(_0x4fbc('0x7'));var config=require(_0x4fbc('0x8'));var jayson=require(_0x4fbc('0x9'));var client=jayson[_0x4fbc('0xa')][_0x4fbc('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x335473,_0x50b082,_0x1f5e8d){return new BPromise(function(_0x4d8c55,_0x1c9eb8){return client[_0x4fbc('0xc')](_0x335473,_0x1f5e8d)[_0x4fbc('0xd')](function(_0x1a2245){logger[_0x4fbc('0xe')](_0x4fbc('0xf'),_0x50b082,_0x4fbc('0x10'));logger['debug'](_0x4fbc('0x11'),_0x50b082,_0x4fbc('0x10'),JSON[_0x4fbc('0x12')](_0x1a2245));if(_0x1a2245[_0x4fbc('0x13')]){if(_0x1a2245[_0x4fbc('0x13')]['code']===0x1f4){logger[_0x4fbc('0x13')](_0x4fbc('0xf'),_0x50b082,_0x1a2245['error'][_0x4fbc('0x14')]);return _0x1c9eb8(_0x1a2245[_0x4fbc('0x13')][_0x4fbc('0x14')]);}logger[_0x4fbc('0x13')]('ZohoConfiguration,\x20%s,\x20%s',_0x50b082,_0x1a2245[_0x4fbc('0x13')][_0x4fbc('0x14')]);return _0x4d8c55(_0x1a2245[_0x4fbc('0x13')]['message']);}else{logger[_0x4fbc('0xe')](_0x4fbc('0xf'),_0x50b082,_0x4fbc('0x10'));_0x4d8c55(_0x1a2245[_0x4fbc('0x15')]['message']);}})['catch'](function(_0x564bad){logger[_0x4fbc('0x13')](_0x4fbc('0xf'),_0x50b082,_0x564bad);_0x1c9eb8(_0x564bad);});});}
\ No newline at end of file
index e690bb4..6be24ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x02f3=['index','get','/:id','show','post','create','put','update','delete','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','./intZohoField.controller','isAuthenticated'];(function(_0x4c4d81,_0x1bef2d){var _0xcd11a5=function(_0x185f46){while(--_0x185f46){_0x4c4d81['push'](_0x4c4d81['shift']());}};_0xcd11a5(++_0x1bef2d);}(_0x02f3,0x13a));var _0x302f=function(_0x1d47bf,_0x4472e1){_0x1d47bf=_0x1d47bf-0x0;var _0x5e150a=_0x02f3[_0x1d47bf];return _0x5e150a;};'use strict';var multer=require(_0x302f('0x0'));var util=require(_0x302f('0x1'));var path=require(_0x302f('0x2'));var timeout=require(_0x302f('0x3'));var express=require(_0x302f('0x4'));var router=express[_0x302f('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x302f('0x6'));var config=require('../../config/environment');var controller=require(_0x302f('0x7'));router['get']('/',auth[_0x302f('0x8')](),controller[_0x302f('0x9')]);router[_0x302f('0xa')](_0x302f('0xb'),auth['isAuthenticated'](),controller[_0x302f('0xc')]);router[_0x302f('0xd')]('/',auth[_0x302f('0x8')](),controller[_0x302f('0xe')]);router[_0x302f('0xf')](_0x302f('0xb'),auth[_0x302f('0x8')](),controller[_0x302f('0x10')]);router[_0x302f('0x11')]('/:id',auth[_0x302f('0x8')](),controller['destroy']);module[_0x302f('0x12')]=router;
\ No newline at end of file
+var _0x8d57=['isAuthenticated','/:id','show','post','create','put','update','delete','exports','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intZohoField.controller','get'];(function(_0x3a0d4b,_0x5bcf1a){var _0x4f3fdf=function(_0x8e1419){while(--_0x8e1419){_0x3a0d4b['push'](_0x3a0d4b['shift']());}};_0x4f3fdf(++_0x5bcf1a);}(_0x8d57,0x183));var _0x78d5=function(_0x4bfac3,_0x58324d){_0x4bfac3=_0x4bfac3-0x0;var _0x15f0f2=_0x8d57[_0x4bfac3];return _0x15f0f2;};'use strict';var multer=require('multer');var util=require(_0x78d5('0x0'));var path=require(_0x78d5('0x1'));var timeout=require(_0x78d5('0x2'));var express=require('express');var router=express[_0x78d5('0x3')]();var auth=require(_0x78d5('0x4'));var interaction=require(_0x78d5('0x5'));var config=require(_0x78d5('0x6'));var controller=require(_0x78d5('0x7'));router[_0x78d5('0x8')]('/',auth[_0x78d5('0x9')](),controller['index']);router['get'](_0x78d5('0xa'),auth[_0x78d5('0x9')](),controller[_0x78d5('0xb')]);router[_0x78d5('0xc')]('/',auth[_0x78d5('0x9')](),controller[_0x78d5('0xd')]);router[_0x78d5('0xe')](_0x78d5('0xa'),auth['isAuthenticated'](),controller[_0x78d5('0xf')]);router[_0x78d5('0x10')](_0x78d5('0xa'),auth['isAuthenticated'](),controller['destroy']);module[_0x78d5('0x11')]=router;
\ No newline at end of file
index 6a9c633..718f4fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x13f6=['variable','customVariable','keyValue','STRING','ENUM','sequelize','exports'];(function(_0x2308d5,_0x41f651){var _0x284f6d=function(_0x5685fd){while(--_0x5685fd){_0x2308d5['push'](_0x2308d5['shift']());}};_0x284f6d(++_0x41f651);}(_0x13f6,0x124));var _0x613f=function(_0x308ca1,_0xf8eb57){_0x308ca1=_0x308ca1-0x0;var _0x1c589e=_0x13f6[_0x308ca1];return _0x1c589e;};'use strict';var Sequelize=require(_0x613f('0x0'));module[_0x613f('0x1')]={'type':{'type':Sequelize['ENUM']('string',_0x613f('0x2'),_0x613f('0x3'),_0x613f('0x4')),'defaultValue':'string'},'content':{'type':Sequelize[_0x613f('0x5')]},'key':{'type':Sequelize[_0x613f('0x5')]},'keyType':{'type':Sequelize[_0x613f('0x6')]('string',_0x613f('0x2'),_0x613f('0x3'))},'keyContent':{'type':Sequelize['STRING']},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x613f('0x5')]}};
\ No newline at end of file
+var _0xa75b=['customVariable','keyValue','STRING','ENUM','sequelize','string','variable'];(function(_0x1ac595,_0x5d2081){var _0x455fff=function(_0x3043ee){while(--_0x3043ee){_0x1ac595['push'](_0x1ac595['shift']());}};_0x455fff(++_0x5d2081);}(_0xa75b,0x170));var _0xba75=function(_0xb4d6ba,_0x84ae3f){_0xb4d6ba=_0xb4d6ba-0x0;var _0xa36d32=_0xa75b[_0xb4d6ba];return _0xa36d32;};'use strict';var Sequelize=require(_0xba75('0x0'));module['exports']={'type':{'type':Sequelize['ENUM'](_0xba75('0x1'),_0xba75('0x2'),_0xba75('0x3'),_0xba75('0x4')),'defaultValue':_0xba75('0x1')},'content':{'type':Sequelize[_0xba75('0x5')]},'key':{'type':Sequelize[_0xba75('0x5')]},'keyType':{'type':Sequelize[_0xba75('0x6')](_0xba75('0x1'),_0xba75('0x2'),_0xba75('0x3'))},'keyContent':{'type':Sequelize[_0xba75('0x5')]},'idField':{'type':Sequelize[_0xba75('0x5')]},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'variableName':{'type':Sequelize[_0xba75('0x5')]}};
\ No newline at end of file
index 0bfe461..c23dab7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xac4a=['end','status','json','count','offset','Content-Range','apply','reject','save','then','destroy','stack','index','ZohoField','rawAttributes','model','query','keys','filters','intersection','attributes','fields','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','findAll','rows','catch','params','length','find','create','body','update','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','mustache','util','path','to-csv','lodash','crypto','jsforce','querystring','ioredis','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus'];(function(_0x199572,_0x33e667){var _0x13cfa3=function(_0x53c075){while(--_0x53c075){_0x199572['push'](_0x199572['shift']());}};_0x13cfa3(++_0x33e667);}(_0xac4a,0x13f));var _0xaac4=function(_0x9b3a50,_0x1f0e22){_0x9b3a50=_0x9b3a50-0x0;var _0x4c1f44=_0xac4a[_0x9b3a50];return _0x4c1f44;};'use strict';var pdf=require(_0xaac4('0x0'));var emlformat=require(_0xaac4('0x1'));var rimraf=require(_0xaac4('0x2'));var zipdir=require(_0xaac4('0x3'));var jsonpatch=require(_0xaac4('0x4'));var rp=require(_0xaac4('0x5'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xaac4('0x6'));var util=require(_0xaac4('0x7'));var path=require(_0xaac4('0x8'));var sox=require('sox');var csv=require(_0xaac4('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xaac4('0xa'));var squel=require('squel');var crypto=require(_0xaac4('0xb'));var jsforce=require(_0xaac4('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xaac4('0xd'));var Papa=require('papaparse');var Redis=require(_0xaac4('0xe'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0xaac4('0xf'));var logger=require(_0xaac4('0x10'))(_0xaac4('0x11'));var utils=require(_0xaac4('0x12'));var config=require(_0xaac4('0x13'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x508e14,_0x2348c2){_0x2348c2=_0x2348c2||0xcc;return function(_0x2e2d02){if(_0x2e2d02){return _0x508e14[_0xaac4('0x14')](_0x2348c2);}return _0x508e14['status'](_0x2348c2)[_0xaac4('0x15')]();};}function respondWithResult(_0x45c129,_0x5bcacd){_0x5bcacd=_0x5bcacd||0xc8;return function(_0xf06b1d){if(_0xf06b1d){return _0x45c129[_0xaac4('0x16')](_0x5bcacd)[_0xaac4('0x17')](_0xf06b1d);}};}function respondWithFilteredResult(_0x150fdd,_0x187624){return function(_0x2fbeb7){if(_0x2fbeb7){var _0x31b7e5=_0x2fbeb7[_0xaac4('0x18')],_0x1df9ae=_0x187624[_0xaac4('0x19')],_0x233278=_0x187624[_0xaac4('0x19')]+_0x187624['limit'],_0xb8466e;if(_0x233278>=_0x31b7e5){_0x233278=_0x31b7e5;_0xb8466e=0xc8;}else{_0xb8466e=0xce;}_0x150fdd[_0xaac4('0x16')](_0xb8466e);return _0x150fdd['set'](_0xaac4('0x1a'),_0x1df9ae+'-'+_0x233278+'/'+_0x31b7e5)['json'](_0x2fbeb7);}return null;};}function patchUpdates(_0x3ce35a){return function(_0x27fe7b){try{jsonpatch[_0xaac4('0x1b')](_0x27fe7b,_0x3ce35a,!![]);}catch(_0x271bcb){return BPromise[_0xaac4('0x1c')](_0x271bcb);}return _0x27fe7b[_0xaac4('0x1d')]();};}function saveUpdates(_0x44f0e8,_0x25b946){return function(_0x4166ee){if(_0x4166ee){return _0x4166ee['update'](_0x44f0e8)[_0xaac4('0x1e')](function(_0x4e1e89){return _0x4e1e89;});}return null;};}function removeEntity(_0x3303f1,_0x2013b7){return function(_0x43625c){if(_0x43625c){return _0x43625c[_0xaac4('0x1f')]()[_0xaac4('0x1e')](function(){_0x3303f1[_0xaac4('0x16')](0xcc)['end']();});}};}function handleEntityNotFound(_0x43ccdc,_0x27a84d){return function(_0x174860){if(!_0x174860){_0x43ccdc[_0xaac4('0x14')](0x194);}return _0x174860;};}function handleError(_0x3dd059,_0x2dcc59){_0x2dcc59=_0x2dcc59||0x1f4;return function(_0xb2577b){logger['error'](_0xb2577b[_0xaac4('0x20')]);if(_0xb2577b['name']){delete _0xb2577b['name'];}_0x3dd059['status'](_0x2dcc59)['send'](_0xb2577b);};}exports[_0xaac4('0x21')]=function(_0x17d25f,_0x22cda2){var _0xe93120={},_0x3c1445={},_0x249a5d={'count':0x0,'rows':[]};var _0x43b122=db[_0xaac4('0x22')][_0xaac4('0x23')];_0x3c1445[_0xaac4('0x24')]=_['keys'](_0x43b122);_0x3c1445[_0xaac4('0x25')]=_[_0xaac4('0x26')](_0x17d25f[_0xaac4('0x25')]);_0x3c1445[_0xaac4('0x27')]=_[_0xaac4('0x28')](_0x3c1445[_0xaac4('0x24')],_0x3c1445['query']);_0xe93120[_0xaac4('0x29')]=_['intersection'](_0x3c1445[_0xaac4('0x24')],qs[_0xaac4('0x2a')](_0x17d25f[_0xaac4('0x25')][_0xaac4('0x2a')]));_0xe93120['attributes']=_0xe93120['attributes']['length']?_0xe93120[_0xaac4('0x29')]:_0x3c1445[_0xaac4('0x24')];if(!_0x17d25f[_0xaac4('0x25')][_0xaac4('0x2b')](_0xaac4('0x2c'))){_0xe93120[_0xaac4('0x2d')]=qs[_0xaac4('0x2d')](_0x17d25f[_0xaac4('0x25')][_0xaac4('0x2d')]);_0xe93120[_0xaac4('0x19')]=qs[_0xaac4('0x19')](_0x17d25f[_0xaac4('0x25')][_0xaac4('0x19')]);}_0xe93120[_0xaac4('0x2e')]=qs[_0xaac4('0x2f')](_0x17d25f['query']['sort']);_0xe93120[_0xaac4('0x30')]=qs[_0xaac4('0x27')](_[_0xaac4('0x31')](_0x17d25f['query'],_0x3c1445[_0xaac4('0x27')]));if(_0x17d25f[_0xaac4('0x25')][_0xaac4('0x32')]){_0xe93120[_0xaac4('0x30')]=_[_0xaac4('0x33')](_0xe93120[_0xaac4('0x30')],{'$or':_[_0xaac4('0x34')](_0x43b122,function(_0x53b7cb){if(_0x53b7cb[_0xaac4('0x35')][_0xaac4('0x36')]!==_0xaac4('0x37')){var _0x5d64a2={};_0x5d64a2[_0x53b7cb[_0xaac4('0x38')]]={'$like':'%'+_0x17d25f['query']['filter']+'%'};return _0x5d64a2;}})});}_0xe93120=_[_0xaac4('0x33')]({},_0xe93120,_0x17d25f[_0xaac4('0x39')]);var _0x2da28a={'where':_0xe93120['where']};return db['ZohoField'][_0xaac4('0x18')](_0x2da28a)[_0xaac4('0x1e')](function(_0x2f7300){_0x249a5d[_0xaac4('0x18')]=_0x2f7300;if(_0x17d25f[_0xaac4('0x25')][_0xaac4('0x3a')]){_0xe93120['include']=[{'all':!![]}];}return db['ZohoField'][_0xaac4('0x3b')](_0xe93120);})[_0xaac4('0x1e')](function(_0x5371b4){_0x249a5d[_0xaac4('0x3c')]=_0x5371b4;return _0x249a5d;})[_0xaac4('0x1e')](respondWithFilteredResult(_0x22cda2,_0xe93120))[_0xaac4('0x3d')](handleError(_0x22cda2,null));};exports['show']=function(_0x74a1c,_0x4a4773){var _0x2259fc={'raw':!![],'where':{'id':_0x74a1c[_0xaac4('0x3e')]['id']}},_0x5bc387={};_0x5bc387[_0xaac4('0x24')]=_[_0xaac4('0x26')](db[_0xaac4('0x22')]['rawAttributes']);_0x5bc387[_0xaac4('0x25')]=_['keys'](_0x74a1c['query']);_0x5bc387[_0xaac4('0x27')]=_[_0xaac4('0x28')](_0x5bc387[_0xaac4('0x24')],_0x5bc387[_0xaac4('0x25')]);_0x2259fc[_0xaac4('0x29')]=_[_0xaac4('0x28')](_0x5bc387[_0xaac4('0x24')],qs[_0xaac4('0x2a')](_0x74a1c['query'][_0xaac4('0x2a')]));_0x2259fc[_0xaac4('0x29')]=_0x2259fc[_0xaac4('0x29')][_0xaac4('0x3f')]?_0x2259fc['attributes']:_0x5bc387[_0xaac4('0x24')];if(_0x74a1c[_0xaac4('0x25')][_0xaac4('0x3a')]){_0x2259fc['include']=[{'all':!![]}];}_0x2259fc=_[_0xaac4('0x33')]({},_0x2259fc,_0x74a1c[_0xaac4('0x39')]);return db[_0xaac4('0x22')][_0xaac4('0x40')](_0x2259fc)['then'](handleEntityNotFound(_0x4a4773,null))[_0xaac4('0x1e')](respondWithResult(_0x4a4773,null))[_0xaac4('0x3d')](handleError(_0x4a4773,null));};exports[_0xaac4('0x41')]=function(_0x57a7ab,_0xf404b9){return db[_0xaac4('0x22')][_0xaac4('0x41')](_0x57a7ab[_0xaac4('0x42')],{})[_0xaac4('0x1e')](respondWithResult(_0xf404b9,0xc9))[_0xaac4('0x3d')](handleError(_0xf404b9,null));};exports[_0xaac4('0x43')]=function(_0xa8d1c9,_0x6c713){if(_0xa8d1c9['body']['id']){delete _0xa8d1c9[_0xaac4('0x42')]['id'];}return db[_0xaac4('0x22')][_0xaac4('0x40')]({'where':{'id':_0xa8d1c9[_0xaac4('0x3e')]['id']}})[_0xaac4('0x1e')](handleEntityNotFound(_0x6c713,null))['then'](saveUpdates(_0xa8d1c9['body'],null))[_0xaac4('0x1e')](respondWithResult(_0x6c713,null))[_0xaac4('0x3d')](handleError(_0x6c713,null));};exports[_0xaac4('0x1f')]=function(_0x16c7f4,_0x5f33ea){return db[_0xaac4('0x22')]['find']({'where':{'id':_0x16c7f4[_0xaac4('0x3e')]['id']}})[_0xaac4('0x1e')](handleEntityNotFound(_0x5f33ea,null))['then'](removeEntity(_0x5f33ea,null))[_0xaac4('0x3d')](handleError(_0x5f33ea,null));};
\ No newline at end of file
+var _0xbaf0=['to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','Content-Range','apply','update','then','destroy','error','stack','name','send','index','ZohoField','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','filters','pick','filter','where','merge','map','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','params','catch','create','body','find','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox'];(function(_0x45bf86,_0x75586e){var _0x1f02b7=function(_0x1ea8a3){while(--_0x1ea8a3){_0x45bf86['push'](_0x45bf86['shift']());}};_0x1f02b7(++_0x75586e);}(_0xbaf0,0x12a));var _0x0baf=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0xbaf0[_0x19e35c];return _0x3e1fe8;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x0baf('0x0'));var rimraf=require(_0x0baf('0x1'));var zipdir=require(_0x0baf('0x2'));var jsonpatch=require(_0x0baf('0x3'));var rp=require(_0x0baf('0x4'));var moment=require(_0x0baf('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x0baf('0x6'));var util=require(_0x0baf('0x7'));var path=require(_0x0baf('0x8'));var sox=require(_0x0baf('0x9'));var csv=require(_0x0baf('0xa'));var ejs=require(_0x0baf('0xb'));var fs=require('fs');var _=require(_0x0baf('0xc'));var squel=require(_0x0baf('0xd'));var crypto=require(_0x0baf('0xe'));var jsforce=require('jsforce');var deskjs=require(_0x0baf('0xf'));var toCsv=require('to-csv');var querystring=require(_0x0baf('0x10'));var Papa=require(_0x0baf('0x11'));var Redis=require(_0x0baf('0x12'));var authService=require(_0x0baf('0x13'));var qs=require(_0x0baf('0x14'));var hardwareService=require(_0x0baf('0x15'));var logger=require(_0x0baf('0x16'))(_0x0baf('0x17'));var utils=require(_0x0baf('0x18'));var config=require(_0x0baf('0x19'));var db=require(_0x0baf('0x1a'))['db'];function respondWithStatusCode(_0x51d93c,_0x5a53e2){_0x5a53e2=_0x5a53e2||0xcc;return function(_0x465dd7){if(_0x465dd7){return _0x51d93c[_0x0baf('0x1b')](_0x5a53e2);}return _0x51d93c[_0x0baf('0x1c')](_0x5a53e2)[_0x0baf('0x1d')]();};}function respondWithResult(_0x5a0583,_0x2ab33e){_0x2ab33e=_0x2ab33e||0xc8;return function(_0x49e44b){if(_0x49e44b){return _0x5a0583[_0x0baf('0x1c')](_0x2ab33e)[_0x0baf('0x1e')](_0x49e44b);}};}function respondWithFilteredResult(_0x7fbf67,_0x2bc381){return function(_0xb8339e){if(_0xb8339e){var _0x469599=_0xb8339e[_0x0baf('0x1f')],_0x4f80a8=_0x2bc381[_0x0baf('0x20')],_0x4cd79d=_0x2bc381[_0x0baf('0x20')]+_0x2bc381[_0x0baf('0x21')],_0x2312c7;if(_0x4cd79d>=_0x469599){_0x4cd79d=_0x469599;_0x2312c7=0xc8;}else{_0x2312c7=0xce;}_0x7fbf67[_0x0baf('0x1c')](_0x2312c7);return _0x7fbf67['set'](_0x0baf('0x22'),_0x4f80a8+'-'+_0x4cd79d+'/'+_0x469599)[_0x0baf('0x1e')](_0xb8339e);}return null;};}function patchUpdates(_0x1ef0e5){return function(_0x3e9cb4){try{jsonpatch[_0x0baf('0x23')](_0x3e9cb4,_0x1ef0e5,!![]);}catch(_0x42b7f2){return BPromise['reject'](_0x42b7f2);}return _0x3e9cb4['save']();};}function saveUpdates(_0x1410ec,_0x154f48){return function(_0x32e839){if(_0x32e839){return _0x32e839[_0x0baf('0x24')](_0x1410ec)[_0x0baf('0x25')](function(_0x3e3e20){return _0x3e3e20;});}return null;};}function removeEntity(_0x210cd8,_0x636a13){return function(_0x2c42e2){if(_0x2c42e2){return _0x2c42e2[_0x0baf('0x26')]()['then'](function(){_0x210cd8[_0x0baf('0x1c')](0xcc)['end']();});}};}function handleEntityNotFound(_0xf6c158,_0x5dbf00){return function(_0x4de74c){if(!_0x4de74c){_0xf6c158[_0x0baf('0x1b')](0x194);}return _0x4de74c;};}function handleError(_0x48a0e9,_0x4be1b9){_0x4be1b9=_0x4be1b9||0x1f4;return function(_0x47c4b){logger[_0x0baf('0x27')](_0x47c4b[_0x0baf('0x28')]);if(_0x47c4b[_0x0baf('0x29')]){delete _0x47c4b[_0x0baf('0x29')];}_0x48a0e9['status'](_0x4be1b9)[_0x0baf('0x2a')](_0x47c4b);};}exports[_0x0baf('0x2b')]=function(_0x1ca35a,_0x366e71){var _0x3843b8={},_0x3b9b31={},_0x453525={'count':0x0,'rows':[]};var _0x549fd0=db[_0x0baf('0x2c')][_0x0baf('0x2d')];_0x3b9b31[_0x0baf('0x2e')]=_[_0x0baf('0x2f')](_0x549fd0);_0x3b9b31['query']=_[_0x0baf('0x2f')](_0x1ca35a[_0x0baf('0x30')]);_0x3b9b31['filters']=_[_0x0baf('0x31')](_0x3b9b31[_0x0baf('0x2e')],_0x3b9b31[_0x0baf('0x30')]);_0x3843b8[_0x0baf('0x32')]=_[_0x0baf('0x31')](_0x3b9b31[_0x0baf('0x2e')],qs[_0x0baf('0x33')](_0x1ca35a['query'][_0x0baf('0x33')]));_0x3843b8[_0x0baf('0x32')]=_0x3843b8[_0x0baf('0x32')][_0x0baf('0x34')]?_0x3843b8[_0x0baf('0x32')]:_0x3b9b31[_0x0baf('0x2e')];if(!_0x1ca35a[_0x0baf('0x30')][_0x0baf('0x35')](_0x0baf('0x36'))){_0x3843b8[_0x0baf('0x21')]=qs[_0x0baf('0x21')](_0x1ca35a[_0x0baf('0x30')][_0x0baf('0x21')]);_0x3843b8[_0x0baf('0x20')]=qs['offset'](_0x1ca35a[_0x0baf('0x30')]['offset']);}_0x3843b8[_0x0baf('0x37')]=qs[_0x0baf('0x38')](_0x1ca35a[_0x0baf('0x30')][_0x0baf('0x38')]);_0x3843b8['where']=qs[_0x0baf('0x39')](_[_0x0baf('0x3a')](_0x1ca35a['query'],_0x3b9b31[_0x0baf('0x39')]));if(_0x1ca35a[_0x0baf('0x30')][_0x0baf('0x3b')]){_0x3843b8[_0x0baf('0x3c')]=_[_0x0baf('0x3d')](_0x3843b8[_0x0baf('0x3c')],{'$or':_[_0x0baf('0x3e')](_0x549fd0,function(_0x675461){if(_0x675461['type'][_0x0baf('0x3f')]!==_0x0baf('0x40')){var _0x5b991f={};_0x5b991f[_0x675461[_0x0baf('0x41')]]={'$like':'%'+_0x1ca35a['query']['filter']+'%'};return _0x5b991f;}})});}_0x3843b8=_[_0x0baf('0x3d')]({},_0x3843b8,_0x1ca35a[_0x0baf('0x42')]);var _0x5d3ad1={'where':_0x3843b8['where']};return db[_0x0baf('0x2c')][_0x0baf('0x1f')](_0x5d3ad1)[_0x0baf('0x25')](function(_0xb2d9ab){_0x453525[_0x0baf('0x1f')]=_0xb2d9ab;if(_0x1ca35a[_0x0baf('0x30')][_0x0baf('0x43')]){_0x3843b8[_0x0baf('0x44')]=[{'all':!![]}];}return db[_0x0baf('0x2c')][_0x0baf('0x45')](_0x3843b8);})[_0x0baf('0x25')](function(_0x148540){_0x453525[_0x0baf('0x46')]=_0x148540;return _0x453525;})[_0x0baf('0x25')](respondWithFilteredResult(_0x366e71,_0x3843b8))['catch'](handleError(_0x366e71,null));};exports[_0x0baf('0x47')]=function(_0x1435d5,_0x4f1de9){var _0x38006a={'raw':!![],'where':{'id':_0x1435d5[_0x0baf('0x48')]['id']}},_0x324369={};_0x324369[_0x0baf('0x2e')]=_[_0x0baf('0x2f')](db[_0x0baf('0x2c')]['rawAttributes']);_0x324369[_0x0baf('0x30')]=_[_0x0baf('0x2f')](_0x1435d5['query']);_0x324369[_0x0baf('0x39')]=_[_0x0baf('0x31')](_0x324369[_0x0baf('0x2e')],_0x324369[_0x0baf('0x30')]);_0x38006a['attributes']=_[_0x0baf('0x31')](_0x324369[_0x0baf('0x2e')],qs[_0x0baf('0x33')](_0x1435d5[_0x0baf('0x30')][_0x0baf('0x33')]));_0x38006a[_0x0baf('0x32')]=_0x38006a[_0x0baf('0x32')][_0x0baf('0x34')]?_0x38006a[_0x0baf('0x32')]:_0x324369[_0x0baf('0x2e')];if(_0x1435d5['query'][_0x0baf('0x43')]){_0x38006a[_0x0baf('0x44')]=[{'all':!![]}];}_0x38006a=_[_0x0baf('0x3d')]({},_0x38006a,_0x1435d5[_0x0baf('0x42')]);return db[_0x0baf('0x2c')]['find'](_0x38006a)[_0x0baf('0x25')](handleEntityNotFound(_0x4f1de9,null))[_0x0baf('0x25')](respondWithResult(_0x4f1de9,null))[_0x0baf('0x49')](handleError(_0x4f1de9,null));};exports[_0x0baf('0x4a')]=function(_0x35b5db,_0x54ed41){return db[_0x0baf('0x2c')][_0x0baf('0x4a')](_0x35b5db[_0x0baf('0x4b')],{})[_0x0baf('0x25')](respondWithResult(_0x54ed41,0xc9))[_0x0baf('0x49')](handleError(_0x54ed41,null));};exports[_0x0baf('0x24')]=function(_0x178995,_0x5679d9){if(_0x178995[_0x0baf('0x4b')]['id']){delete _0x178995[_0x0baf('0x4b')]['id'];}return db[_0x0baf('0x2c')]['find']({'where':{'id':_0x178995[_0x0baf('0x48')]['id']}})[_0x0baf('0x25')](handleEntityNotFound(_0x5679d9,null))[_0x0baf('0x25')](saveUpdates(_0x178995[_0x0baf('0x4b')],null))[_0x0baf('0x25')](respondWithResult(_0x5679d9,null))[_0x0baf('0x49')](handleError(_0x5679d9,null));};exports[_0x0baf('0x26')]=function(_0x5a54bb,_0x22c451){return db[_0x0baf('0x2c')][_0x0baf('0x4c')]({'where':{'id':_0x5a54bb[_0x0baf('0x48')]['id']}})[_0x0baf('0x25')](handleEntityNotFound(_0x22c451,null))[_0x0baf('0x25')](removeEntity(_0x22c451,null))[_0x0baf('0x49')](handleError(_0x22c451,null));};
\ No newline at end of file
index 535154e..57cf75f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1998=['exports','define','ZohoField','int_zoho_fields','FieldId','lodash','util','../../config/logger','api','request-promise','path','rimraf','../../config/environment','./intZohoField.attributes'];(function(_0x214266,_0x1f6f52){var _0x568f75=function(_0x541904){while(--_0x541904){_0x214266['push'](_0x214266['shift']());}};_0x568f75(++_0x1f6f52);}(_0x1998,0x163));var _0x8199=function(_0x5c01de,_0x3c672b){_0x5c01de=_0x5c01de-0x0;var _0x74c071=_0x1998[_0x5c01de];return _0x74c071;};'use strict';var _=require(_0x8199('0x0'));var util=require(_0x8199('0x1'));var logger=require(_0x8199('0x2'))(_0x8199('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x8199('0x4'));var fs=require('fs');var path=require(_0x8199('0x5'));var rimraf=require(_0x8199('0x6'));var config=require(_0x8199('0x7'));var attributes=require(_0x8199('0x8'));module[_0x8199('0x9')]=function(_0x429fed,_0x18d01a){return _0x429fed[_0x8199('0xa')](_0x8199('0xb'),attributes,{'tableName':_0x8199('0xc'),'paranoid':![],'indexes':[{'name':'zoho_unique_index','fields':['idField',_0x8199('0xd')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x7ea8=['int_zoho_fields','idField','FieldId','../../config/logger','api','moment','request-promise','rimraf','../../config/environment','define','ZohoField'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x7ea8,0xbe));var _0x87ea=function(_0x716e2c,_0x486adc){_0x716e2c=_0x716e2c-0x0;var _0x458086=_0x7ea8[_0x716e2c];return _0x458086;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x87ea('0x0'))(_0x87ea('0x1'));var moment=require(_0x87ea('0x2'));var BPromise=require('bluebird');var rp=require(_0x87ea('0x3'));var fs=require('fs');var path=require('path');var rimraf=require(_0x87ea('0x4'));var config=require(_0x87ea('0x5'));var attributes=require('./intZohoField.attributes');module['exports']=function(_0x377608,_0x5814a3){return _0x377608[_0x87ea('0x6')](_0x87ea('0x7'),attributes,{'tableName':_0x87ea('0x8'),'paranoid':![],'indexes':[{'name':'zoho_unique_index','fields':[_0x87ea('0x9'),_0x87ea('0xa')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 5de1e02..ecf4c7f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a77=['randomstring','ioredis','../../mysqldb','../../config/utils','rpc','jayson/promise','client','http','request','ZohoField,\x20%s,\x20%s','request\x20sent','debug','ZohoField,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','lodash','util','bluebird'];(function(_0x533a17,_0x345bf7){var _0x22071c=function(_0xba9459){while(--_0xba9459){_0x533a17['push'](_0x533a17['shift']());}};_0x22071c(++_0x345bf7);}(_0x8a77,0xfa));var _0x78a7=function(_0x24b303,_0x4e32fe){_0x24b303=_0x24b303-0x0;var _0xd37597=_0x8a77[_0x24b303];return _0xd37597;};'use strict';var _=require(_0x78a7('0x0'));var util=require(_0x78a7('0x1'));var moment=require('moment');var BPromise=require(_0x78a7('0x2'));var rs=require(_0x78a7('0x3'));var fs=require('fs');var Redis=require(_0x78a7('0x4'));var db=require(_0x78a7('0x5'))['db'];var utils=require(_0x78a7('0x6'));var logger=require('../../config/logger')(_0x78a7('0x7'));var config=require('../../config/environment');var jayson=require(_0x78a7('0x8'));var client=jayson[_0x78a7('0x9')][_0x78a7('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4909d1,_0x5f531d,_0x561fa5){return new BPromise(function(_0x1ea98b,_0x2f919e){return client[_0x78a7('0xb')](_0x4909d1,_0x561fa5)['then'](function(_0x542836){logger['info'](_0x78a7('0xc'),_0x5f531d,_0x78a7('0xd'));logger[_0x78a7('0xe')](_0x78a7('0xf'),_0x5f531d,_0x78a7('0xd'),JSON[_0x78a7('0x10')](_0x542836));if(_0x542836[_0x78a7('0x11')]){if(_0x542836[_0x78a7('0x11')][_0x78a7('0x12')]===0x1f4){logger['error']('ZohoField,\x20%s,\x20%s',_0x5f531d,_0x542836[_0x78a7('0x11')][_0x78a7('0x13')]);return _0x2f919e(_0x542836[_0x78a7('0x11')][_0x78a7('0x13')]);}logger[_0x78a7('0x11')](_0x78a7('0xc'),_0x5f531d,_0x542836[_0x78a7('0x11')][_0x78a7('0x13')]);return _0x1ea98b(_0x542836[_0x78a7('0x11')][_0x78a7('0x13')]);}else{logger[_0x78a7('0x14')](_0x78a7('0xc'),_0x5f531d,_0x78a7('0xd'));_0x1ea98b(_0x542836[_0x78a7('0x15')]['message']);}})[_0x78a7('0x16')](function(_0x5d4f5f){logger['error'](_0x78a7('0xc'),_0x5f531d,_0x5d4f5f);_0x2f919e(_0x5d4f5f);});});}
\ No newline at end of file
+var _0x42c1=['moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','request','then','info','ZohoField,\x20%s,\x20%s','request\x20sent','debug','error','code','message','result','catch','lodash','util'];(function(_0x34a934,_0xf898ad){var _0x7702f9=function(_0x9aa2c1){while(--_0x9aa2c1){_0x34a934['push'](_0x34a934['shift']());}};_0x7702f9(++_0xf898ad);}(_0x42c1,0x98));var _0x142c=function(_0xd220c1,_0x23848b){_0xd220c1=_0xd220c1-0x0;var _0x47d512=_0x42c1[_0xd220c1];return _0x47d512;};'use strict';var _=require(_0x142c('0x0'));var util=require(_0x142c('0x1'));var moment=require(_0x142c('0x2'));var BPromise=require(_0x142c('0x3'));var rs=require(_0x142c('0x4'));var fs=require('fs');var Redis=require(_0x142c('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x142c('0x6'));var logger=require(_0x142c('0x7'))('rpc');var config=require(_0x142c('0x8'));var jayson=require(_0x142c('0x9'));var client=jayson[_0x142c('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x51bb98,_0x554990,_0x598bc6){return new BPromise(function(_0x2411bc,_0x5f4d62){return client[_0x142c('0xb')](_0x51bb98,_0x598bc6)[_0x142c('0xc')](function(_0x6c16e8){logger[_0x142c('0xd')](_0x142c('0xe'),_0x554990,_0x142c('0xf'));logger[_0x142c('0x10')]('ZohoField,\x20%s,\x20%s,\x20%s',_0x554990,_0x142c('0xf'),JSON['stringify'](_0x6c16e8));if(_0x6c16e8[_0x142c('0x11')]){if(_0x6c16e8[_0x142c('0x11')][_0x142c('0x12')]===0x1f4){logger[_0x142c('0x11')](_0x142c('0xe'),_0x554990,_0x6c16e8['error']['message']);return _0x5f4d62(_0x6c16e8[_0x142c('0x11')][_0x142c('0x13')]);}logger[_0x142c('0x11')](_0x142c('0xe'),_0x554990,_0x6c16e8[_0x142c('0x11')][_0x142c('0x13')]);return _0x2411bc(_0x6c16e8[_0x142c('0x11')][_0x142c('0x13')]);}else{logger[_0x142c('0xd')](_0x142c('0xe'),_0x554990,_0x142c('0xf'));_0x2411bc(_0x6c16e8[_0x142c('0x14')]['message']);}})[_0x142c('0x15')](function(_0x23057b){logger['error'](_0x142c('0xe'),_0x554990,_0x23057b);_0x5f4d62(_0x23057b);});});}
\ No newline at end of file
index 2a2147b..dadf4ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d58=['../../components/auth/service','../../config/environment','exports','Router'];(function(_0x2060e9,_0x5e22f8){var _0x3a5584=function(_0x7e9a24){while(--_0x7e9a24){_0x2060e9['push'](_0x2060e9['shift']());}};_0x3a5584(++_0x5e22f8);}(_0x5d58,0x187));var _0x85d5=function(_0x408545,_0x203ccd){_0x408545=_0x408545-0x0;var _0x5bdac0=_0x5d58[_0x408545];return _0x5bdac0;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var timeout=require('connect-timeout');var express=require('express');var router=express[_0x85d5('0x0')]();var auth=require(_0x85d5('0x1'));var interaction=require('../../components/interaction/service');var config=require(_0x85d5('0x2'));module[_0x85d5('0x3')]=router;
\ No newline at end of file
+var _0x8375=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','multer','util','path'];(function(_0xad5775,_0x45f14c){var _0x3ccb65=function(_0x29e505){while(--_0x29e505){_0xad5775['push'](_0xad5775['shift']());}};_0x3ccb65(++_0x45f14c);}(_0x8375,0xa8));var _0x5837=function(_0x42f1de,_0x4e136a){_0x42f1de=_0x42f1de-0x0;var _0x3ca734=_0x8375[_0x42f1de];return _0x3ca734;};'use strict';var multer=require(_0x5837('0x0'));var util=require(_0x5837('0x1'));var path=require(_0x5837('0x2'));var timeout=require('connect-timeout');var express=require(_0x5837('0x3'));var router=express[_0x5837('0x4')]();var auth=require(_0x5837('0x5'));var interaction=require(_0x5837('0x6'));var config=require(_0x5837('0x7'));module[_0x5837('0x8')]=router;
\ No newline at end of file
index 21a9ff3..26e0477 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x979d=['exports','unique_name_and_version','STRING','app.js','INTEGER','BOOLEAN','state','sequelize'];(function(_0x27eb97,_0x186266){var _0x3c44ac=function(_0xc842fa){while(--_0xc842fa){_0x27eb97['push'](_0x27eb97['shift']());}};_0x3c44ac(++_0x186266);}(_0x979d,0x1df));var _0xd979=function(_0x22b24a,_0x44d1fa){_0x22b24a=_0x22b24a-0x0;var _0x200c2b=_0x979d[_0x22b24a];return _0x200c2b;};'use strict';var Sequelize=require(_0xd979('0x0'));module[_0xd979('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0xd979('0x2')},'version':{'type':Sequelize[_0xd979('0x3')],'allowNull':![],'unique':'unique_name_and_version'},'main':{'type':Sequelize[_0xd979('0x3')],'defaultValue':_0xd979('0x4')},'filename':{'type':Sequelize[_0xd979('0x3')]},'path':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0xd979('0x3')]},'size':{'type':Sequelize[_0xd979('0x5')]},'active':{'type':Sequelize[_0xd979('0x6')],'defaultValue':![]},'author':{'type':Sequelize[_0xd979('0x3')]},'logo':{'type':Sequelize[_0xd979('0x3')]},'state':{'type':Sequelize[_0xd979('0x3')],'unique':_0xd979('0x7')},'description':{'type':Sequelize[_0xd979('0x3')]},'title':{'type':Sequelize[_0xd979('0x3')]},'remoteUri':{'type':Sequelize[_0xd979('0x3')]},'link':{'type':Sequelize['STRING'],'defaultValue':'#'}};
\ No newline at end of file
+var _0xc943=['INTEGER','BOOLEAN','state','sequelize','STRING','unique_name_and_version','app.js'];(function(_0x45b36c,_0x4efbfe){var _0x1dad2f=function(_0x1532af){while(--_0x1532af){_0x45b36c['push'](_0x45b36c['shift']());}};_0x1dad2f(++_0x4efbfe);}(_0xc943,0x145));var _0x3c94=function(_0x56608c,_0x29eb74){_0x56608c=_0x56608c-0x0;var _0x3c7fb0=_0xc943[_0x56608c];return _0x3c7fb0;};'use strict';var Sequelize=require(_0x3c94('0x0'));module['exports']={'name':{'type':Sequelize[_0x3c94('0x1')],'allowNull':![],'unique':'unique_name_and_version'},'version':{'type':Sequelize[_0x3c94('0x1')],'allowNull':![],'unique':_0x3c94('0x2')},'main':{'type':Sequelize[_0x3c94('0x1')],'defaultValue':_0x3c94('0x3')},'filename':{'type':Sequelize[_0x3c94('0x1')]},'path':{'type':Sequelize[_0x3c94('0x1')]},'type':{'type':Sequelize[_0x3c94('0x1')]},'size':{'type':Sequelize[_0x3c94('0x4')]},'active':{'type':Sequelize[_0x3c94('0x5')],'defaultValue':![]},'author':{'type':Sequelize['STRING']},'logo':{'type':Sequelize[_0x3c94('0x1')]},'state':{'type':Sequelize[_0x3c94('0x1')],'unique':_0x3c94('0x6')},'description':{'type':Sequelize['STRING']},'title':{'type':Sequelize['STRING']},'remoteUri':{'type':Sequelize[_0x3c94('0x1')]},'link':{'type':Sequelize[_0x3c94('0x1')],'defaultValue':'#'}};
\ No newline at end of file
index 19a1587..6c92128 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2a07=['papaparse','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','offset','limit','set','reject','update','then','destroy','end','error','stack','name','send','index','rawAttributes','model','query','keys','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','sort','pick','filter','where','merge','map','type','key','VIRTUAL','field','options','count','includeAll','Integration','findAll','rows','catch','params','include','find','create','body','html-pdf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','lodash','squel','crypto','jsforce','desk.js'];(function(_0x2a707f,_0x21fa97){var _0x36c86c=function(_0xecca28){while(--_0xecca28){_0x2a707f['push'](_0x2a707f['shift']());}};_0x36c86c(++_0x21fa97);}(_0x2a07,0x109));var _0x72a0=function(_0x3c538b,_0x14cb10){_0x3c538b=_0x3c538b-0x0;var _0x4b8542=_0x2a07[_0x3c538b];return _0x4b8542;};'use strict';var pdf=require(_0x72a0('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x72a0('0x1'));var jsonpatch=require(_0x72a0('0x2'));var rp=require(_0x72a0('0x3'));var moment=require(_0x72a0('0x4'));var BPromise=require(_0x72a0('0x5'));var Mustache=require(_0x72a0('0x6'));var util=require(_0x72a0('0x7'));var path=require(_0x72a0('0x8'));var sox=require('sox');var csv=require(_0x72a0('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x72a0('0xa'));var squel=require(_0x72a0('0xb'));var crypto=require(_0x72a0('0xc'));var jsforce=require(_0x72a0('0xd'));var deskjs=require(_0x72a0('0xe'));var toCsv=require(_0x72a0('0x9'));var querystring=require('querystring');var Papa=require(_0x72a0('0xf'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x72a0('0x10'));var hardwareService=require(_0x72a0('0x11'));var logger=require(_0x72a0('0x12'))(_0x72a0('0x13'));var utils=require('../../config/utils');var config=require(_0x72a0('0x14'));var db=require(_0x72a0('0x15'))['db'];function respondWithStatusCode(_0x1d6b46,_0x2bb600){_0x2bb600=_0x2bb600||0xcc;return function(_0x30653){if(_0x30653){return _0x1d6b46[_0x72a0('0x16')](_0x2bb600);}return _0x1d6b46[_0x72a0('0x17')](_0x2bb600)['end']();};}function respondWithResult(_0x4b255a,_0x4d207f){_0x4d207f=_0x4d207f||0xc8;return function(_0x49ad31){if(_0x49ad31){return _0x4b255a[_0x72a0('0x17')](_0x4d207f)['json'](_0x49ad31);}};}function respondWithFilteredResult(_0xf2a914,_0x137d21){return function(_0x46a614){if(_0x46a614){var _0x53f20b=_0x46a614['count'],_0x5e5a35=_0x137d21[_0x72a0('0x18')],_0x4c7f33=_0x137d21['offset']+_0x137d21[_0x72a0('0x19')],_0xee5c0a;if(_0x4c7f33>=_0x53f20b){_0x4c7f33=_0x53f20b;_0xee5c0a=0xc8;}else{_0xee5c0a=0xce;}_0xf2a914['status'](_0xee5c0a);return _0xf2a914[_0x72a0('0x1a')]('Content-Range',_0x5e5a35+'-'+_0x4c7f33+'/'+_0x53f20b)['json'](_0x46a614);}return null;};}function patchUpdates(_0x1c1645){return function(_0x446358){try{jsonpatch['apply'](_0x446358,_0x1c1645,!![]);}catch(_0x1c8da6){return BPromise[_0x72a0('0x1b')](_0x1c8da6);}return _0x446358['save']();};}function saveUpdates(_0x861a5e,_0x149a3e){return function(_0x47bfc3){if(_0x47bfc3){return _0x47bfc3[_0x72a0('0x1c')](_0x861a5e)[_0x72a0('0x1d')](function(_0x3ca397){return _0x3ca397;});}return null;};}function removeEntity(_0x469305,_0x57d6e8){return function(_0x21da10){if(_0x21da10){return _0x21da10[_0x72a0('0x1e')]()[_0x72a0('0x1d')](function(){_0x469305[_0x72a0('0x17')](0xcc)[_0x72a0('0x1f')]();});}};}function handleEntityNotFound(_0x56ebcd,_0x3826b1){return function(_0x1ac3d9){if(!_0x1ac3d9){_0x56ebcd[_0x72a0('0x16')](0x194);}return _0x1ac3d9;};}function handleError(_0x4624e1,_0x3a2ade){_0x3a2ade=_0x3a2ade||0x1f4;return function(_0x49efa7){logger[_0x72a0('0x20')](_0x49efa7[_0x72a0('0x21')]);if(_0x49efa7['name']){delete _0x49efa7[_0x72a0('0x22')];}_0x4624e1[_0x72a0('0x17')](_0x3a2ade)[_0x72a0('0x23')](_0x49efa7);};}exports[_0x72a0('0x24')]=function(_0x2cbd38,_0x33de59){var _0x1aa003={},_0x10991b={},_0xe10cd6={'count':0x0,'rows':[]};var _0x1f1d87=db['Integration'][_0x72a0('0x25')];_0x10991b[_0x72a0('0x26')]=_['keys'](_0x1f1d87);_0x10991b[_0x72a0('0x27')]=_[_0x72a0('0x28')](_0x2cbd38['query']);_0x10991b[_0x72a0('0x29')]=_['intersection'](_0x10991b[_0x72a0('0x26')],_0x10991b['query']);_0x1aa003['attributes']=_[_0x72a0('0x2a')](_0x10991b['model'],qs[_0x72a0('0x2b')](_0x2cbd38[_0x72a0('0x27')][_0x72a0('0x2b')]));_0x1aa003[_0x72a0('0x2c')]=_0x1aa003[_0x72a0('0x2c')][_0x72a0('0x2d')]?_0x1aa003[_0x72a0('0x2c')]:_0x10991b[_0x72a0('0x26')];if(!_0x2cbd38[_0x72a0('0x27')][_0x72a0('0x2e')](_0x72a0('0x2f'))){_0x1aa003['limit']=qs['limit'](_0x2cbd38[_0x72a0('0x27')][_0x72a0('0x19')]);_0x1aa003[_0x72a0('0x18')]=qs[_0x72a0('0x18')](_0x2cbd38['query'][_0x72a0('0x18')]);}_0x1aa003['order']=qs[_0x72a0('0x30')](_0x2cbd38[_0x72a0('0x27')][_0x72a0('0x30')]);_0x1aa003['where']=qs['filters'](_[_0x72a0('0x31')](_0x2cbd38[_0x72a0('0x27')],_0x10991b['filters']));if(_0x2cbd38[_0x72a0('0x27')][_0x72a0('0x32')]){_0x1aa003[_0x72a0('0x33')]=_[_0x72a0('0x34')](_0x1aa003['where'],{'$or':_[_0x72a0('0x35')](_0x1f1d87,function(_0x23f051){if(_0x23f051[_0x72a0('0x36')][_0x72a0('0x37')]!==_0x72a0('0x38')){var _0x3d53a6={};_0x3d53a6[_0x23f051[_0x72a0('0x39')]]={'$like':'%'+_0x2cbd38[_0x72a0('0x27')]['filter']+'%'};return _0x3d53a6;}})});}_0x1aa003=_[_0x72a0('0x34')]({},_0x1aa003,_0x2cbd38[_0x72a0('0x3a')]);var _0x5d3c98={'where':_0x1aa003[_0x72a0('0x33')]};return db['Integration'][_0x72a0('0x3b')](_0x5d3c98)[_0x72a0('0x1d')](function(_0x115605){_0xe10cd6[_0x72a0('0x3b')]=_0x115605;if(_0x2cbd38[_0x72a0('0x27')][_0x72a0('0x3c')]){_0x1aa003['include']=[{'all':!![]}];}return db[_0x72a0('0x3d')][_0x72a0('0x3e')](_0x1aa003);})[_0x72a0('0x1d')](function(_0x42300a){_0xe10cd6[_0x72a0('0x3f')]=_0x42300a;return _0xe10cd6;})['then'](respondWithFilteredResult(_0x33de59,_0x1aa003))[_0x72a0('0x40')](handleError(_0x33de59,null));};exports['show']=function(_0x20b122,_0x23d5e1){var _0x397248={'raw':![],'where':{'id':_0x20b122[_0x72a0('0x41')]['id']}},_0x305d7f={};_0x305d7f['model']=_['keys'](db[_0x72a0('0x3d')][_0x72a0('0x25')]);_0x305d7f['query']=_['keys'](_0x20b122[_0x72a0('0x27')]);_0x305d7f[_0x72a0('0x29')]=_['intersection'](_0x305d7f[_0x72a0('0x26')],_0x305d7f['query']);_0x397248[_0x72a0('0x2c')]=_[_0x72a0('0x2a')](_0x305d7f['model'],qs[_0x72a0('0x2b')](_0x20b122[_0x72a0('0x27')][_0x72a0('0x2b')]));_0x397248[_0x72a0('0x2c')]=_0x397248[_0x72a0('0x2c')][_0x72a0('0x2d')]?_0x397248[_0x72a0('0x2c')]:_0x305d7f[_0x72a0('0x26')];if(_0x20b122[_0x72a0('0x27')][_0x72a0('0x3c')]){_0x397248[_0x72a0('0x42')]=[{'all':!![]}];}_0x397248=_[_0x72a0('0x34')]({},_0x397248,_0x20b122[_0x72a0('0x3a')]);return db[_0x72a0('0x3d')][_0x72a0('0x43')](_0x397248)[_0x72a0('0x1d')](handleEntityNotFound(_0x23d5e1,null))['then'](respondWithResult(_0x23d5e1,null))[_0x72a0('0x40')](handleError(_0x23d5e1,null));};exports[_0x72a0('0x44')]=function(_0x54b42d,_0xdf4283){return db[_0x72a0('0x3d')]['create'](_0x54b42d[_0x72a0('0x45')],{})[_0x72a0('0x1d')](respondWithResult(_0xdf4283,0xc9))[_0x72a0('0x40')](handleError(_0xdf4283,null));};exports[_0x72a0('0x1c')]=function(_0x4275f4,_0x3f0366){if(_0x4275f4[_0x72a0('0x45')]['id']){delete _0x4275f4[_0x72a0('0x45')]['id'];}return db[_0x72a0('0x3d')][_0x72a0('0x43')]({'where':{'id':_0x4275f4[_0x72a0('0x41')]['id']}})[_0x72a0('0x1d')](handleEntityNotFound(_0x3f0366,null))[_0x72a0('0x1d')](saveUpdates(_0x4275f4[_0x72a0('0x45')],null))[_0x72a0('0x1d')](respondWithResult(_0x3f0366,null))[_0x72a0('0x40')](handleError(_0x3f0366,null));};exports[_0x72a0('0x1e')]=function(_0x7f57a6,_0x350f3d){return db[_0x72a0('0x3d')][_0x72a0('0x43')]({'where':{'id':_0x7f57a6['params']['id']}})[_0x72a0('0x1d')](handleEntityNotFound(_0x350f3d,null))[_0x72a0('0x1d')](removeEntity(_0x350f3d,null))[_0x72a0('0x40')](handleError(_0x350f3d,null));};
\ No newline at end of file
+var _0x6da5=['status','json','count','offset','set','Content-Range','reject','then','destroy','end','error','stack','index','Integration','rawAttributes','keys','query','filters','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','pick','filter','where','merge','map','type','field','options','includeAll','findAll','rows','catch','params','find','create','body','html-pdf','request-promise','bluebird','path','sox','lodash','squel','crypto','to-csv','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus'];(function(_0xd67ffb,_0x2f7ebc){var _0x51d5fb=function(_0x1e2dfd){while(--_0x1e2dfd){_0xd67ffb['push'](_0xd67ffb['shift']());}};_0x51d5fb(++_0x2f7ebc);}(_0x6da5,0x12c));var _0x56da=function(_0x3c28aa,_0x43d5dc){_0x3c28aa=_0x3c28aa-0x0;var _0x426778=_0x6da5[_0x3c28aa];return _0x426778;};'use strict';var pdf=require(_0x56da('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x56da('0x1'));var moment=require('moment');var BPromise=require(_0x56da('0x2'));var Mustache=require('mustache');var util=require('util');var path=require(_0x56da('0x3'));var sox=require(_0x56da('0x4'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x56da('0x5'));var squel=require(_0x56da('0x6'));var crypto=require(_0x56da('0x7'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x56da('0x8'));var querystring=require(_0x56da('0x9'));var Papa=require('papaparse');var Redis=require(_0x56da('0xa'));var authService=require(_0x56da('0xb'));var qs=require(_0x56da('0xc'));var hardwareService=require(_0x56da('0xd'));var logger=require(_0x56da('0xe'))(_0x56da('0xf'));var utils=require(_0x56da('0x10'));var config=require(_0x56da('0x11'));var db=require(_0x56da('0x12'))['db'];function respondWithStatusCode(_0x2514fd,_0x522737){_0x522737=_0x522737||0xcc;return function(_0x53b176){if(_0x53b176){return _0x2514fd[_0x56da('0x13')](_0x522737);}return _0x2514fd['status'](_0x522737)['end']();};}function respondWithResult(_0x4f3ef5,_0x4c04f1){_0x4c04f1=_0x4c04f1||0xc8;return function(_0x345c3a){if(_0x345c3a){return _0x4f3ef5[_0x56da('0x14')](_0x4c04f1)[_0x56da('0x15')](_0x345c3a);}};}function respondWithFilteredResult(_0x3d9d20,_0x37e35c){return function(_0x3dac0b){if(_0x3dac0b){var _0x18d16f=_0x3dac0b[_0x56da('0x16')],_0x332744=_0x37e35c[_0x56da('0x17')],_0x59f1e2=_0x37e35c[_0x56da('0x17')]+_0x37e35c['limit'],_0x37b575;if(_0x59f1e2>=_0x18d16f){_0x59f1e2=_0x18d16f;_0x37b575=0xc8;}else{_0x37b575=0xce;}_0x3d9d20[_0x56da('0x14')](_0x37b575);return _0x3d9d20[_0x56da('0x18')](_0x56da('0x19'),_0x332744+'-'+_0x59f1e2+'/'+_0x18d16f)[_0x56da('0x15')](_0x3dac0b);}return null;};}function patchUpdates(_0x198198){return function(_0xc974c5){try{jsonpatch['apply'](_0xc974c5,_0x198198,!![]);}catch(_0x151940){return BPromise[_0x56da('0x1a')](_0x151940);}return _0xc974c5['save']();};}function saveUpdates(_0x31a440,_0xc6436b){return function(_0x12a116){if(_0x12a116){return _0x12a116['update'](_0x31a440)[_0x56da('0x1b')](function(_0x240121){return _0x240121;});}return null;};}function removeEntity(_0x42e476,_0x23d237){return function(_0x5a7550){if(_0x5a7550){return _0x5a7550[_0x56da('0x1c')]()[_0x56da('0x1b')](function(){_0x42e476['status'](0xcc)[_0x56da('0x1d')]();});}};}function handleEntityNotFound(_0x5073bf,_0x59b693){return function(_0x2e9b6f){if(!_0x2e9b6f){_0x5073bf[_0x56da('0x13')](0x194);}return _0x2e9b6f;};}function handleError(_0x3aad19,_0x3d301f){_0x3d301f=_0x3d301f||0x1f4;return function(_0x2d2131){logger[_0x56da('0x1e')](_0x2d2131[_0x56da('0x1f')]);if(_0x2d2131['name']){delete _0x2d2131['name'];}_0x3aad19[_0x56da('0x14')](_0x3d301f)['send'](_0x2d2131);};}exports[_0x56da('0x20')]=function(_0x955089,_0x2c9233){var _0x272cba={},_0x108f32={},_0x6cdfb6={'count':0x0,'rows':[]};var _0x55af01=db[_0x56da('0x21')][_0x56da('0x22')];_0x108f32['model']=_[_0x56da('0x23')](_0x55af01);_0x108f32[_0x56da('0x24')]=_[_0x56da('0x23')](_0x955089[_0x56da('0x24')]);_0x108f32[_0x56da('0x25')]=_[_0x56da('0x26')](_0x108f32[_0x56da('0x27')],_0x108f32['query']);_0x272cba['attributes']=_[_0x56da('0x26')](_0x108f32['model'],qs[_0x56da('0x28')](_0x955089[_0x56da('0x24')][_0x56da('0x28')]));_0x272cba[_0x56da('0x29')]=_0x272cba['attributes'][_0x56da('0x2a')]?_0x272cba[_0x56da('0x29')]:_0x108f32['model'];if(!_0x955089[_0x56da('0x24')][_0x56da('0x2b')](_0x56da('0x2c'))){_0x272cba[_0x56da('0x2d')]=qs[_0x56da('0x2d')](_0x955089[_0x56da('0x24')][_0x56da('0x2d')]);_0x272cba['offset']=qs['offset'](_0x955089['query'][_0x56da('0x17')]);}_0x272cba[_0x56da('0x2e')]=qs[_0x56da('0x2f')](_0x955089[_0x56da('0x24')][_0x56da('0x2f')]);_0x272cba['where']=qs[_0x56da('0x25')](_[_0x56da('0x30')](_0x955089[_0x56da('0x24')],_0x108f32[_0x56da('0x25')]));if(_0x955089[_0x56da('0x24')][_0x56da('0x31')]){_0x272cba[_0x56da('0x32')]=_[_0x56da('0x33')](_0x272cba[_0x56da('0x32')],{'$or':_[_0x56da('0x34')](_0x55af01,function(_0x16976d){if(_0x16976d[_0x56da('0x35')]['key']!=='VIRTUAL'){var _0x523e77={};_0x523e77[_0x16976d[_0x56da('0x36')]]={'$like':'%'+_0x955089[_0x56da('0x24')][_0x56da('0x31')]+'%'};return _0x523e77;}})});}_0x272cba=_[_0x56da('0x33')]({},_0x272cba,_0x955089[_0x56da('0x37')]);var _0x2ce880={'where':_0x272cba[_0x56da('0x32')]};return db[_0x56da('0x21')][_0x56da('0x16')](_0x2ce880)[_0x56da('0x1b')](function(_0x407753){_0x6cdfb6[_0x56da('0x16')]=_0x407753;if(_0x955089[_0x56da('0x24')][_0x56da('0x38')]){_0x272cba['include']=[{'all':!![]}];}return db[_0x56da('0x21')][_0x56da('0x39')](_0x272cba);})[_0x56da('0x1b')](function(_0x2bcabf){_0x6cdfb6[_0x56da('0x3a')]=_0x2bcabf;return _0x6cdfb6;})['then'](respondWithFilteredResult(_0x2c9233,_0x272cba))[_0x56da('0x3b')](handleError(_0x2c9233,null));};exports['show']=function(_0x329486,_0x321643){var _0x55491e={'raw':![],'where':{'id':_0x329486[_0x56da('0x3c')]['id']}},_0x4d3ff2={};_0x4d3ff2[_0x56da('0x27')]=_['keys'](db[_0x56da('0x21')][_0x56da('0x22')]);_0x4d3ff2[_0x56da('0x24')]=_['keys'](_0x329486[_0x56da('0x24')]);_0x4d3ff2[_0x56da('0x25')]=_[_0x56da('0x26')](_0x4d3ff2['model'],_0x4d3ff2[_0x56da('0x24')]);_0x55491e[_0x56da('0x29')]=_[_0x56da('0x26')](_0x4d3ff2[_0x56da('0x27')],qs[_0x56da('0x28')](_0x329486['query']['fields']));_0x55491e[_0x56da('0x29')]=_0x55491e[_0x56da('0x29')]['length']?_0x55491e[_0x56da('0x29')]:_0x4d3ff2['model'];if(_0x329486[_0x56da('0x24')][_0x56da('0x38')]){_0x55491e['include']=[{'all':!![]}];}_0x55491e=_[_0x56da('0x33')]({},_0x55491e,_0x329486['options']);return db['Integration'][_0x56da('0x3d')](_0x55491e)['then'](handleEntityNotFound(_0x321643,null))[_0x56da('0x1b')](respondWithResult(_0x321643,null))['catch'](handleError(_0x321643,null));};exports[_0x56da('0x3e')]=function(_0x5acaa7,_0x1e1940){return db['Integration'][_0x56da('0x3e')](_0x5acaa7[_0x56da('0x3f')],{})[_0x56da('0x1b')](respondWithResult(_0x1e1940,0xc9))['catch'](handleError(_0x1e1940,null));};exports['update']=function(_0x4b9eea,_0x2f4cca){if(_0x4b9eea[_0x56da('0x3f')]['id']){delete _0x4b9eea[_0x56da('0x3f')]['id'];}return db[_0x56da('0x21')][_0x56da('0x3d')]({'where':{'id':_0x4b9eea[_0x56da('0x3c')]['id']}})[_0x56da('0x1b')](handleEntityNotFound(_0x2f4cca,null))[_0x56da('0x1b')](saveUpdates(_0x4b9eea[_0x56da('0x3f')],null))[_0x56da('0x1b')](respondWithResult(_0x2f4cca,null))['catch'](handleError(_0x2f4cca,null));};exports[_0x56da('0x1c')]=function(_0x26bddc,_0x330998){return db[_0x56da('0x21')]['find']({'where':{'id':_0x26bddc['params']['id']}})[_0x56da('0x1b')](handleEntityNotFound(_0x330998,null))[_0x56da('0x1b')](removeEntity(_0x330998,null))['catch'](handleError(_0x330998,null));};
\ No newline at end of file
index 003fde4..595b545 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9f79=['Integration','integrations','lodash','util','../../config/logger','bluebird','request-promise','path','rimraf','../../config/environment','define'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x9f79,0xff));var _0x99f7=function(_0x180190,_0x525fa9){_0x180190=_0x180190-0x0;var _0xeab8db=_0x9f79[_0x180190];return _0xeab8db;};'use strict';var _=require(_0x99f7('0x0'));var util=require(_0x99f7('0x1'));var logger=require(_0x99f7('0x2'))('api');var moment=require('moment');var BPromise=require(_0x99f7('0x3'));var rp=require(_0x99f7('0x4'));var fs=require('fs');var path=require(_0x99f7('0x5'));var rimraf=require(_0x99f7('0x6'));var config=require(_0x99f7('0x7'));var attributes=require('./integration.attributes');module['exports']=function(_0x4c9bbe,_0x2478bf){return _0x4c9bbe[_0x99f7('0x8')](_0x99f7('0x9'),attributes,{'tableName':_0x99f7('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x9b6b=['bluebird','rimraf','../../config/environment','./integration.attributes','exports','define','integrations','lodash','util','api','moment'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x9b6b,0x11a));var _0xb9b6=function(_0x2e0621,_0x2ac6c0){_0x2e0621=_0x2e0621-0x0;var _0x4a21c1=_0x9b6b[_0x2e0621];return _0x4a21c1;};'use strict';var _=require(_0xb9b6('0x0'));var util=require(_0xb9b6('0x1'));var logger=require('../../config/logger')(_0xb9b6('0x2'));var moment=require(_0xb9b6('0x3'));var BPromise=require(_0xb9b6('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0xb9b6('0x5'));var config=require(_0xb9b6('0x6'));var attributes=require(_0xb9b6('0x7'));module[_0xb9b6('0x8')]=function(_0x13d0fb,_0x212080){return _0x13d0fb[_0xb9b6('0x9')]('Integration',attributes,{'tableName':_0xb9b6('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d717621..ba90e01 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8215=['../../mysqldb','../../config/utils','../../config/logger','client','request','info','request\x20sent','debug','Integration,\x20%s,\x20%s,\x20%s','error','code','message','Integration,\x20%s,\x20%s','result','util','moment','bluebird','randomstring','ioredis'];(function(_0x42fc9e,_0x1d6985){var _0xa923cc=function(_0x4fd274){while(--_0x4fd274){_0x42fc9e['push'](_0x42fc9e['shift']());}};_0xa923cc(++_0x1d6985);}(_0x8215,0x1c3));var _0x5821=function(_0x57ed05,_0x4e28b7){_0x57ed05=_0x57ed05-0x0;var _0x5c08eb=_0x8215[_0x57ed05];return _0x5c08eb;};'use strict';var _=require('lodash');var util=require(_0x5821('0x0'));var moment=require(_0x5821('0x1'));var BPromise=require(_0x5821('0x2'));var rs=require(_0x5821('0x3'));var fs=require('fs');var Redis=require(_0x5821('0x4'));var db=require(_0x5821('0x5'))['db'];var utils=require(_0x5821('0x6'));var logger=require(_0x5821('0x7'))('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x5821('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x852772,_0x491869,_0x51936f){return new BPromise(function(_0x1120e3,_0x3093b6){return client[_0x5821('0x9')](_0x852772,_0x51936f)['then'](function(_0x713f02){logger[_0x5821('0xa')]('Integration,\x20%s,\x20%s',_0x491869,_0x5821('0xb'));logger[_0x5821('0xc')](_0x5821('0xd'),_0x491869,_0x5821('0xb'),JSON['stringify'](_0x713f02));if(_0x713f02[_0x5821('0xe')]){if(_0x713f02[_0x5821('0xe')][_0x5821('0xf')]===0x1f4){logger[_0x5821('0xe')]('Integration,\x20%s,\x20%s',_0x491869,_0x713f02[_0x5821('0xe')][_0x5821('0x10')]);return _0x3093b6(_0x713f02[_0x5821('0xe')][_0x5821('0x10')]);}logger[_0x5821('0xe')](_0x5821('0x11'),_0x491869,_0x713f02[_0x5821('0xe')][_0x5821('0x10')]);return _0x1120e3(_0x713f02[_0x5821('0xe')]['message']);}else{logger['info'](_0x5821('0x11'),_0x491869,_0x5821('0xb'));_0x1120e3(_0x713f02[_0x5821('0x12')][_0x5821('0x10')]);}})['catch'](function(_0xe9dd94){logger[_0x5821('0xe')](_0x5821('0x11'),_0x491869,_0xe9dd94);_0x3093b6(_0xe9dd94);});});}
\ No newline at end of file
+var _0xef93=['../../config/logger','rpc','../../config/environment','jayson/promise','http','request','Integration,\x20%s,\x20%s','request\x20sent','Integration,\x20%s,\x20%s,\x20%s','stringify','error','message','info','catch','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils'];(function(_0x5c351c,_0x2046d8){var _0x26f3b3=function(_0x47ac18){while(--_0x47ac18){_0x5c351c['push'](_0x5c351c['shift']());}};_0x26f3b3(++_0x2046d8);}(_0xef93,0x188));var _0x3ef9=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xef93[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x3ef9('0x0'));var util=require(_0x3ef9('0x1'));var moment=require(_0x3ef9('0x2'));var BPromise=require(_0x3ef9('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x3ef9('0x4'));var db=require(_0x3ef9('0x5'))['db'];var utils=require(_0x3ef9('0x6'));var logger=require(_0x3ef9('0x7'))(_0x3ef9('0x8'));var config=require(_0x3ef9('0x9'));var jayson=require(_0x3ef9('0xa'));var client=jayson['client'][_0x3ef9('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x444982,_0x128171,_0x3fd169){return new BPromise(function(_0x189dff,_0x286927){return client[_0x3ef9('0xc')](_0x444982,_0x3fd169)['then'](function(_0x39780e){logger['info'](_0x3ef9('0xd'),_0x128171,_0x3ef9('0xe'));logger['debug'](_0x3ef9('0xf'),_0x128171,_0x3ef9('0xe'),JSON[_0x3ef9('0x10')](_0x39780e));if(_0x39780e[_0x3ef9('0x11')]){if(_0x39780e[_0x3ef9('0x11')]['code']===0x1f4){logger[_0x3ef9('0x11')](_0x3ef9('0xd'),_0x128171,_0x39780e[_0x3ef9('0x11')][_0x3ef9('0x12')]);return _0x286927(_0x39780e[_0x3ef9('0x11')][_0x3ef9('0x12')]);}logger[_0x3ef9('0x11')](_0x3ef9('0xd'),_0x128171,_0x39780e[_0x3ef9('0x11')]['message']);return _0x189dff(_0x39780e[_0x3ef9('0x11')][_0x3ef9('0x12')]);}else{logger[_0x3ef9('0x13')](_0x3ef9('0xd'),_0x128171,_0x3ef9('0xe'));_0x189dff(_0x39780e['result']['message']);}})[_0x3ef9('0x14')](function(_0x4a9196){logger[_0x3ef9('0x11')]('Integration,\x20%s,\x20%s',_0x128171,_0x4a9196);_0x286927(_0x4a9196);});});}
\ No newline at end of file
index d92e296..8d2dbf3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x24ab=['isAuthenticated','index','/describe','describe','/:id','show','post','create','put','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./integrationReport.controller','get'];(function(_0x1c4223,_0x4f3ee7){var _0x12b2e8=function(_0x85f242){while(--_0x85f242){_0x1c4223['push'](_0x1c4223['shift']());}};_0x12b2e8(++_0x4f3ee7);}(_0x24ab,0x1c4));var _0xb24a=function(_0x47c195,_0x6304ba){_0x47c195=_0x47c195-0x0;var _0x3f6afb=_0x24ab[_0x47c195];return _0x3f6afb;};'use strict';var multer=require(_0xb24a('0x0'));var util=require(_0xb24a('0x1'));var path=require(_0xb24a('0x2'));var timeout=require(_0xb24a('0x3'));var express=require(_0xb24a('0x4'));var router=express[_0xb24a('0x5')]();var auth=require(_0xb24a('0x6'));var interaction=require(_0xb24a('0x7'));var config=require('../../config/environment');var controller=require(_0xb24a('0x8'));router[_0xb24a('0x9')]('/',auth[_0xb24a('0xa')](),controller[_0xb24a('0xb')]);router[_0xb24a('0x9')](_0xb24a('0xc'),auth[_0xb24a('0xa')](),controller[_0xb24a('0xd')]);router['get'](_0xb24a('0xe'),auth[_0xb24a('0xa')](),controller[_0xb24a('0xf')]);router[_0xb24a('0x10')]('/',auth['isAuthenticated'](),controller[_0xb24a('0x11')]);router[_0xb24a('0x12')]('/:id',auth[_0xb24a('0xa')](),controller['update']);router[_0xb24a('0x13')](_0xb24a('0xe'),auth[_0xb24a('0xa')](),controller[_0xb24a('0x14')]);module[_0xb24a('0x15')]=router;
\ No newline at end of file
+var _0x2052=['/:id','show','post','create','put','update','delete','destroy','util','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./integrationReport.controller','get','isAuthenticated','index','/describe'];(function(_0x6c993a,_0x5ea3ab){var _0x27f547=function(_0x22df20){while(--_0x22df20){_0x6c993a['push'](_0x6c993a['shift']());}};_0x27f547(++_0x5ea3ab);}(_0x2052,0x7a));var _0x2205=function(_0x4c39f0,_0x137862){_0x4c39f0=_0x4c39f0-0x0;var _0x380cc2=_0x2052[_0x4c39f0];return _0x380cc2;};'use strict';var multer=require('multer');var util=require(_0x2205('0x0'));var path=require('path');var timeout=require(_0x2205('0x1'));var express=require(_0x2205('0x2'));var router=express['Router']();var auth=require(_0x2205('0x3'));var interaction=require(_0x2205('0x4'));var config=require(_0x2205('0x5'));var controller=require(_0x2205('0x6'));router[_0x2205('0x7')]('/',auth[_0x2205('0x8')](),controller[_0x2205('0x9')]);router[_0x2205('0x7')](_0x2205('0xa'),auth[_0x2205('0x8')](),controller['describe']);router[_0x2205('0x7')](_0x2205('0xb'),auth['isAuthenticated'](),controller[_0x2205('0xc')]);router[_0x2205('0xd')]('/',auth[_0x2205('0x8')](),controller[_0x2205('0xe')]);router[_0x2205('0xf')](_0x2205('0xb'),auth[_0x2205('0x8')](),controller[_0x2205('0x10')]);router[_0x2205('0x11')]('/:id',auth[_0x2205('0x8')](),controller[_0x2205('0x12')]);module['exports']=router;
\ No newline at end of file
index b0ebe03..4ba090d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5bfd=['ENUM','SENT','RECEIVED','sequelize','exports','STRING','INTEGER','DATE','BOOLEAN','TEXT'];(function(_0x3a9d77,_0xdc466){var _0x130f80=function(_0x740c4a){while(--_0x740c4a){_0x3a9d77['push'](_0x3a9d77['shift']());}};_0x130f80(++_0xdc466);}(_0x5bfd,0xcb));var _0xd5bf=function(_0x4f6b25,_0x1c8224){_0x4f6b25=_0x4f6b25-0x0;var _0x23c392=_0x5bfd[_0x4f6b25];return _0x23c392;};'use strict';var Sequelize=require(_0xd5bf('0x0'));module[_0xd5bf('0x1')]={'integration':{'type':Sequelize[_0xd5bf('0x2')]},'eventChannel':{'type':Sequelize[_0xd5bf('0x2')]},'exitStatus':{'type':Sequelize[_0xd5bf('0x2')]},'ticketId':{'type':Sequelize[_0xd5bf('0x2')]},'integrationId':{'type':Sequelize[_0xd5bf('0x3')]},'contacts':{'type':Sequelize[_0xd5bf('0x2')]},'uniqueid':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0xd5bf('0x2')]},'calleridname':{'type':Sequelize[_0xd5bf('0x2')]},'queue':{'type':Sequelize[_0xd5bf('0x2')]},'interface':{'type':Sequelize[_0xd5bf('0x2')]},'membername':{'type':Sequelize[_0xd5bf('0x2')]},'agentcalledAt':{'type':Sequelize[_0xd5bf('0x4')]},'agentconnectAt':{'type':Sequelize['DATE']},'holdtime':{'type':Sequelize['INTEGER']},'agentcomplete':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentcompleteAt':{'type':Sequelize[_0xd5bf('0x4')]},'talktime':{'type':Sequelize[_0xd5bf('0x3')]},'agentacw':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'acwtime':{'type':Sequelize[_0xd5bf('0x3')]},'reason':{'type':Sequelize[_0xd5bf('0x2')]},'agentringnoanswer':{'type':Sequelize[_0xd5bf('0x5')],'defaultValue':![]},'agentringnoanswerAt':{'type':Sequelize['DATE']},'agentdump':{'type':Sequelize[_0xd5bf('0x5')],'defaultValue':![]},'agentdumpAt':{'type':Sequelize[_0xd5bf('0x4')]},'lastevent':{'type':Sequelize['STRING']},'channel':{'type':Sequelize[_0xd5bf('0x2')]},'channelstate':{'type':Sequelize[_0xd5bf('0x3')]},'channelstatedesc':{'type':Sequelize[_0xd5bf('0x2')]},'connectedlinenum':{'type':Sequelize[_0xd5bf('0x2')]},'connectedlinename':{'type':Sequelize['STRING']},'language':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize[_0xd5bf('0x2')]},'context':{'type':Sequelize[_0xd5bf('0x2')]},'exten':{'type':Sequelize[_0xd5bf('0x2')]},'priority':{'type':Sequelize[_0xd5bf('0x2')]},'destchannel':{'type':Sequelize['STRING']},'destchannelstate':{'type':Sequelize[_0xd5bf('0x3')]},'destchannelstatedesc':{'type':Sequelize[_0xd5bf('0x2')]},'destcalleridnum':{'type':Sequelize[_0xd5bf('0x2')]},'destcalleridname':{'type':Sequelize[_0xd5bf('0x2')]},'destconnectedlinenum':{'type':Sequelize['STRING']},'destconnectedlinename':{'type':Sequelize[_0xd5bf('0x2')]},'destlanguage':{'type':Sequelize[_0xd5bf('0x2')]},'destaccountcode':{'type':Sequelize[_0xd5bf('0x2')]},'destcontext':{'type':Sequelize['STRING']},'destexten':{'type':Sequelize['STRING']},'destpriority':{'type':Sequelize[_0xd5bf('0x2')]},'destuniqueid':{'type':Sequelize[_0xd5bf('0x2')]},'messageId':{'type':Sequelize['STRING']},'inReplyTo':{'type':Sequelize[_0xd5bf('0x2')]},'subject':{'type':Sequelize[_0xd5bf('0x2')]},'from':{'type':Sequelize[_0xd5bf('0x2')]},'to':{'type':Sequelize[_0xd5bf('0x2')]},'cc':{'type':Sequelize['STRING']},'attachment':{'type':Sequelize[_0xd5bf('0x6')]},'html':{'type':Sequelize[_0xd5bf('0x6')]},'text':{'type':Sequelize['TEXT']},'status':{'type':Sequelize[_0xd5bf('0x7')](_0xd5bf('0x8'),'SENDING',_0xd5bf('0x9'),'FAILED')},'url':{'type':Sequelize['STRING']},'app':{'type':Sequelize[_0xd5bf('0x2')]},'appdata':{'type':Sequelize['STRING']},'projectId':{'type':Sequelize[_0xd5bf('0x3')]}};
\ No newline at end of file
+var _0x70d0=['STRING','DATE','INTEGER','BOOLEAN','TEXT','ENUM','SENT','SENDING','RECEIVED','FAILED','sequelize','exports'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x70d0,0xee));var _0x070d=function(_0x1d558c,_0x1e497c){_0x1d558c=_0x1d558c-0x0;var _0x15767d=_0x70d0[_0x1d558c];return _0x15767d;};'use strict';var Sequelize=require(_0x070d('0x0'));module[_0x070d('0x1')]={'integration':{'type':Sequelize[_0x070d('0x2')]},'eventChannel':{'type':Sequelize['STRING']},'exitStatus':{'type':Sequelize[_0x070d('0x2')]},'ticketId':{'type':Sequelize[_0x070d('0x2')]},'integrationId':{'type':Sequelize['INTEGER']},'contacts':{'type':Sequelize[_0x070d('0x2')]},'uniqueid':{'type':Sequelize[_0x070d('0x2')]},'calleridnum':{'type':Sequelize[_0x070d('0x2')]},'calleridname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize[_0x070d('0x2')]},'interface':{'type':Sequelize['STRING']},'membername':{'type':Sequelize[_0x070d('0x2')]},'agentcalledAt':{'type':Sequelize[_0x070d('0x3')]},'agentconnectAt':{'type':Sequelize[_0x070d('0x3')]},'holdtime':{'type':Sequelize[_0x070d('0x4')]},'agentcomplete':{'type':Sequelize[_0x070d('0x5')],'defaultValue':![]},'agentcompleteAt':{'type':Sequelize[_0x070d('0x3')]},'talktime':{'type':Sequelize[_0x070d('0x4')]},'agentacw':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'acwtime':{'type':Sequelize[_0x070d('0x4')]},'reason':{'type':Sequelize['STRING']},'agentringnoanswer':{'type':Sequelize[_0x070d('0x5')],'defaultValue':![]},'agentringnoanswerAt':{'type':Sequelize[_0x070d('0x3')]},'agentdump':{'type':Sequelize[_0x070d('0x5')],'defaultValue':![]},'agentdumpAt':{'type':Sequelize[_0x070d('0x3')]},'lastevent':{'type':Sequelize[_0x070d('0x2')]},'channel':{'type':Sequelize['STRING']},'channelstate':{'type':Sequelize['INTEGER']},'channelstatedesc':{'type':Sequelize[_0x070d('0x2')]},'connectedlinenum':{'type':Sequelize[_0x070d('0x2')]},'connectedlinename':{'type':Sequelize['STRING']},'language':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize['STRING']},'context':{'type':Sequelize['STRING']},'exten':{'type':Sequelize[_0x070d('0x2')]},'priority':{'type':Sequelize['STRING']},'destchannel':{'type':Sequelize[_0x070d('0x2')]},'destchannelstate':{'type':Sequelize['INTEGER']},'destchannelstatedesc':{'type':Sequelize[_0x070d('0x2')]},'destcalleridnum':{'type':Sequelize[_0x070d('0x2')]},'destcalleridname':{'type':Sequelize['STRING']},'destconnectedlinenum':{'type':Sequelize[_0x070d('0x2')]},'destconnectedlinename':{'type':Sequelize['STRING']},'destlanguage':{'type':Sequelize['STRING']},'destaccountcode':{'type':Sequelize['STRING']},'destcontext':{'type':Sequelize['STRING']},'destexten':{'type':Sequelize['STRING']},'destpriority':{'type':Sequelize[_0x070d('0x2')]},'destuniqueid':{'type':Sequelize[_0x070d('0x2')]},'messageId':{'type':Sequelize[_0x070d('0x2')]},'inReplyTo':{'type':Sequelize[_0x070d('0x2')]},'subject':{'type':Sequelize[_0x070d('0x2')]},'from':{'type':Sequelize['STRING']},'to':{'type':Sequelize[_0x070d('0x2')]},'cc':{'type':Sequelize[_0x070d('0x2')]},'attachment':{'type':Sequelize[_0x070d('0x6')]},'html':{'type':Sequelize[_0x070d('0x6')]},'text':{'type':Sequelize[_0x070d('0x6')]},'status':{'type':Sequelize[_0x070d('0x7')](_0x070d('0x8'),_0x070d('0x9'),_0x070d('0xa'),_0x070d('0xb'))},'url':{'type':Sequelize[_0x070d('0x2')]},'app':{'type':Sequelize[_0x070d('0x2')]},'appdata':{'type':Sequelize['STRING']},'projectId':{'type':Sequelize[_0x070d('0x4')]}};
\ No newline at end of file
index de59669..35e7889 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa1db=['order','sort','pick','filter','where','type','key','VIRTUAL','field','merge','options','includeAll','include','findAll','rows','show','params','find','catch','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','index','IntegrationReport','rawAttributes','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty'];(function(_0x2eac4f,_0x5173f9){var _0x58f73b=function(_0x529f28){while(--_0x529f28){_0x2eac4f['push'](_0x2eac4f['shift']());}};_0x58f73b(++_0x5173f9);}(_0xa1db,0xb0));var _0xba1d=function(_0x5207a2,_0x316913){_0x5207a2=_0x5207a2-0x0;var _0x314716=_0xa1db[_0x5207a2];return _0x314716;};'use strict';var pdf=require(_0xba1d('0x0'));var emlformat=require(_0xba1d('0x1'));var rimraf=require(_0xba1d('0x2'));var zipdir=require(_0xba1d('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xba1d('0x4'));var BPromise=require(_0xba1d('0x5'));var Mustache=require('mustache');var util=require(_0xba1d('0x6'));var path=require(_0xba1d('0x7'));var sox=require(_0xba1d('0x8'));var csv=require(_0xba1d('0x9'));var ejs=require(_0xba1d('0xa'));var fs=require('fs');var _=require(_0xba1d('0xb'));var squel=require(_0xba1d('0xc'));var crypto=require(_0xba1d('0xd'));var jsforce=require(_0xba1d('0xe'));var deskjs=require(_0xba1d('0xf'));var toCsv=require(_0xba1d('0x9'));var querystring=require(_0xba1d('0x10'));var Papa=require(_0xba1d('0x11'));var Redis=require('ioredis');var authService=require(_0xba1d('0x12'));var qs=require(_0xba1d('0x13'));var hardwareService=require(_0xba1d('0x14'));var logger=require(_0xba1d('0x15'))(_0xba1d('0x16'));var utils=require(_0xba1d('0x17'));var config=require(_0xba1d('0x18'));var db=require(_0xba1d('0x19'))['db'];function respondWithStatusCode(_0x5b56c9,_0x19b479){_0x19b479=_0x19b479||0xcc;return function(_0x8ea64){if(_0x8ea64){return _0x5b56c9[_0xba1d('0x1a')](_0x19b479);}return _0x5b56c9[_0xba1d('0x1b')](_0x19b479)[_0xba1d('0x1c')]();};}function respondWithResult(_0x539c61,_0x5780cf){_0x5780cf=_0x5780cf||0xc8;return function(_0x2db5ae){if(_0x2db5ae){return _0x539c61[_0xba1d('0x1b')](_0x5780cf)[_0xba1d('0x1d')](_0x2db5ae);}};}function respondWithFilteredResult(_0xfce76d,_0x6cb53f){return function(_0x126602){if(_0x126602){var _0x5da25d=_0x126602[_0xba1d('0x1e')],_0x47f4d7=_0x6cb53f['offset'],_0x2c1dcc=_0x6cb53f[_0xba1d('0x1f')]+_0x6cb53f[_0xba1d('0x20')],_0x24dfc5;if(_0x2c1dcc>=_0x5da25d){_0x2c1dcc=_0x5da25d;_0x24dfc5=0xc8;}else{_0x24dfc5=0xce;}_0xfce76d[_0xba1d('0x1b')](_0x24dfc5);return _0xfce76d[_0xba1d('0x21')](_0xba1d('0x22'),_0x47f4d7+'-'+_0x2c1dcc+'/'+_0x5da25d)[_0xba1d('0x1d')](_0x126602);}return null;};}function patchUpdates(_0x575093){return function(_0x3110c2){try{jsonpatch[_0xba1d('0x23')](_0x3110c2,_0x575093,!![]);}catch(_0x34149b){return BPromise[_0xba1d('0x24')](_0x34149b);}return _0x3110c2[_0xba1d('0x25')]();};}function saveUpdates(_0xb35743,_0x5cac0c){return function(_0xf438ab){if(_0xf438ab){return _0xf438ab[_0xba1d('0x26')](_0xb35743)[_0xba1d('0x27')](function(_0x39b8de){return _0x39b8de;});}return null;};}function removeEntity(_0x107a85,_0x3225ee){return function(_0x1b02d6){if(_0x1b02d6){return _0x1b02d6[_0xba1d('0x28')]()[_0xba1d('0x27')](function(){_0x107a85['status'](0xcc)[_0xba1d('0x1c')]();});}};}function handleEntityNotFound(_0x9b939b,_0x44eb3a){return function(_0x588839){if(!_0x588839){_0x9b939b[_0xba1d('0x1a')](0x194);}return _0x588839;};}function handleError(_0x31511b,_0x19c062){_0x19c062=_0x19c062||0x1f4;return function(_0x3fc11d){logger[_0xba1d('0x29')](_0x3fc11d[_0xba1d('0x2a')]);if(_0x3fc11d[_0xba1d('0x2b')]){delete _0x3fc11d[_0xba1d('0x2b')];}_0x31511b['status'](_0x19c062)['send'](_0x3fc11d);};}exports[_0xba1d('0x2c')]=function(_0x5c0e7b,_0x1bfd2d){var _0x479593={},_0x507949={},_0x51750a={'count':0x0,'rows':[]};var _0x351373=db[_0xba1d('0x2d')][_0xba1d('0x2e')];_0x507949[_0xba1d('0x2f')]=_[_0xba1d('0x30')](_0x351373);_0x507949[_0xba1d('0x31')]=_[_0xba1d('0x30')](_0x5c0e7b[_0xba1d('0x31')]);_0x507949[_0xba1d('0x32')]=_[_0xba1d('0x33')](_0x507949[_0xba1d('0x2f')],_0x507949[_0xba1d('0x31')]);_0x479593['attributes']=_[_0xba1d('0x33')](_0x507949[_0xba1d('0x2f')],qs[_0xba1d('0x34')](_0x5c0e7b[_0xba1d('0x31')][_0xba1d('0x34')]));_0x479593[_0xba1d('0x35')]=_0x479593[_0xba1d('0x35')]['length']?_0x479593[_0xba1d('0x35')]:_0x507949['model'];if(!_0x5c0e7b[_0xba1d('0x31')][_0xba1d('0x36')]('nolimit')){_0x479593['limit']=qs['limit'](_0x5c0e7b[_0xba1d('0x31')][_0xba1d('0x20')]);_0x479593[_0xba1d('0x1f')]=qs[_0xba1d('0x1f')](_0x5c0e7b[_0xba1d('0x31')][_0xba1d('0x1f')]);}_0x479593[_0xba1d('0x37')]=qs['sort'](_0x5c0e7b[_0xba1d('0x31')][_0xba1d('0x38')]);_0x479593['where']=qs[_0xba1d('0x32')](_[_0xba1d('0x39')](_0x5c0e7b[_0xba1d('0x31')],_0x507949[_0xba1d('0x32')]));if(_0x5c0e7b['query'][_0xba1d('0x3a')]){_0x479593[_0xba1d('0x3b')]=_['merge'](_0x479593[_0xba1d('0x3b')],{'$or':_['map'](_0x351373,function(_0x445417){if(_0x445417[_0xba1d('0x3c')][_0xba1d('0x3d')]!==_0xba1d('0x3e')){var _0x552e4f={};_0x552e4f[_0x445417[_0xba1d('0x3f')]]={'$like':'%'+_0x5c0e7b[_0xba1d('0x31')][_0xba1d('0x3a')]+'%'};return _0x552e4f;}})});}_0x479593=_[_0xba1d('0x40')]({},_0x479593,_0x5c0e7b[_0xba1d('0x41')]);var _0x1fe793={'where':_0x479593['where']};return db[_0xba1d('0x2d')]['count'](_0x1fe793)[_0xba1d('0x27')](function(_0x3e09a1){_0x51750a['count']=_0x3e09a1;if(_0x5c0e7b[_0xba1d('0x31')][_0xba1d('0x42')]){_0x479593[_0xba1d('0x43')]=[{'all':!![]}];}return db['IntegrationReport'][_0xba1d('0x44')](_0x479593);})[_0xba1d('0x27')](function(_0x62dc90){_0x51750a[_0xba1d('0x45')]=_0x62dc90;return _0x51750a;})['then'](respondWithFilteredResult(_0x1bfd2d,_0x479593))['catch'](handleError(_0x1bfd2d,null));};exports[_0xba1d('0x46')]=function(_0x50041e,_0x1aef5d){var _0x57b305={'raw':![],'where':{'id':_0x50041e[_0xba1d('0x47')]['id']}},_0x18cc0b={};_0x18cc0b[_0xba1d('0x2f')]=_['keys'](db['IntegrationReport'][_0xba1d('0x2e')]);_0x18cc0b[_0xba1d('0x31')]=_[_0xba1d('0x30')](_0x50041e[_0xba1d('0x31')]);_0x18cc0b['filters']=_[_0xba1d('0x33')](_0x18cc0b[_0xba1d('0x2f')],_0x18cc0b[_0xba1d('0x31')]);_0x57b305[_0xba1d('0x35')]=_['intersection'](_0x18cc0b[_0xba1d('0x2f')],qs[_0xba1d('0x34')](_0x50041e[_0xba1d('0x31')][_0xba1d('0x34')]));_0x57b305[_0xba1d('0x35')]=_0x57b305['attributes']['length']?_0x57b305[_0xba1d('0x35')]:_0x18cc0b[_0xba1d('0x2f')];if(_0x50041e[_0xba1d('0x31')][_0xba1d('0x42')]){_0x57b305[_0xba1d('0x43')]=[{'all':!![]}];}_0x57b305=_[_0xba1d('0x40')]({},_0x57b305,_0x50041e[_0xba1d('0x41')]);return db['IntegrationReport'][_0xba1d('0x48')](_0x57b305)[_0xba1d('0x27')](handleEntityNotFound(_0x1aef5d,null))['then'](respondWithResult(_0x1aef5d,null))[_0xba1d('0x49')](handleError(_0x1aef5d,null));};exports[_0xba1d('0x4a')]=function(_0xdb8d06,_0x23e2de){return db[_0xba1d('0x2d')]['create'](_0xdb8d06['body'],{})[_0xba1d('0x27')](respondWithResult(_0x23e2de,0xc9))[_0xba1d('0x49')](handleError(_0x23e2de,null));};exports['update']=function(_0x575ab1,_0x48171e){if(_0x575ab1[_0xba1d('0x4b')]['id']){delete _0x575ab1[_0xba1d('0x4b')]['id'];}return db['IntegrationReport']['find']({'where':{'id':_0x575ab1['params']['id']}})[_0xba1d('0x27')](handleEntityNotFound(_0x48171e,null))[_0xba1d('0x27')](saveUpdates(_0x575ab1[_0xba1d('0x4b')],null))[_0xba1d('0x27')](respondWithResult(_0x48171e,null))[_0xba1d('0x49')](handleError(_0x48171e,null));};exports[_0xba1d('0x28')]=function(_0x3e824a,_0x4b2cef){return db[_0xba1d('0x2d')][_0xba1d('0x48')]({'where':{'id':_0x3e824a[_0xba1d('0x47')]['id']}})[_0xba1d('0x27')](handleEntityNotFound(_0x4b2cef,null))[_0xba1d('0x27')](removeEntity(_0x4b2cef,null))[_0xba1d('0x49')](handleError(_0x4b2cef,null));};exports[_0xba1d('0x4c')]=function(_0x4073ef,_0x580688){return db[_0xba1d('0x2d')][_0xba1d('0x4c')]()[_0xba1d('0x27')](respondWithResult(_0x580688,null))['catch'](handleError(_0x580688,null));};
\ No newline at end of file
+var _0x0b78=['ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','Content-Range','reject','save','then','destroy','error','stack','name','send','index','IntegrationReport','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','map','type','key','VIRTUAL','field','merge','options','includeAll','findAll','rows','show','params','rawAttributes','length','include','create','catch','update','body','describe','html-pdf','eml-format','zip-dir','fast-json-patch','moment','mustache','util','path','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse'];(function(_0x20642b,_0x4960e0){var _0x12523c=function(_0x440044){while(--_0x440044){_0x20642b['push'](_0x20642b['shift']());}};_0x12523c(++_0x4960e0);}(_0x0b78,0x1ad));var _0x80b7=function(_0x4b369d,_0x265eb8){_0x4b369d=_0x4b369d-0x0;var _0x571a98=_0x0b78[_0x4b369d];return _0x571a98;};'use strict';var pdf=require(_0x80b7('0x0'));var emlformat=require(_0x80b7('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x80b7('0x2'));var jsonpatch=require(_0x80b7('0x3'));var rp=require('request-promise');var moment=require(_0x80b7('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x80b7('0x5'));var util=require(_0x80b7('0x6'));var path=require(_0x80b7('0x7'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x80b7('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x80b7('0x9'));var crypto=require(_0x80b7('0xa'));var jsforce=require(_0x80b7('0xb'));var deskjs=require(_0x80b7('0xc'));var toCsv=require('to-csv');var querystring=require(_0x80b7('0xd'));var Papa=require(_0x80b7('0xe'));var Redis=require(_0x80b7('0xf'));var authService=require('../../components/auth/service');var qs=require(_0x80b7('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x80b7('0x11'))(_0x80b7('0x12'));var utils=require(_0x80b7('0x13'));var config=require(_0x80b7('0x14'));var db=require(_0x80b7('0x15'))['db'];function respondWithStatusCode(_0x2d61d4,_0x3f8c16){_0x3f8c16=_0x3f8c16||0xcc;return function(_0x145241){if(_0x145241){return _0x2d61d4[_0x80b7('0x16')](_0x3f8c16);}return _0x2d61d4[_0x80b7('0x17')](_0x3f8c16)[_0x80b7('0x18')]();};}function respondWithResult(_0x519401,_0x2c2668){_0x2c2668=_0x2c2668||0xc8;return function(_0x401ad3){if(_0x401ad3){return _0x519401['status'](_0x2c2668)[_0x80b7('0x19')](_0x401ad3);}};}function respondWithFilteredResult(_0x1a6317,_0x4aaa02){return function(_0x46822c){if(_0x46822c){var _0x3b6b13=_0x46822c[_0x80b7('0x1a')],_0x21ea65=_0x4aaa02[_0x80b7('0x1b')],_0x2c0c4e=_0x4aaa02[_0x80b7('0x1b')]+_0x4aaa02[_0x80b7('0x1c')],_0x36d0bb;if(_0x2c0c4e>=_0x3b6b13){_0x2c0c4e=_0x3b6b13;_0x36d0bb=0xc8;}else{_0x36d0bb=0xce;}_0x1a6317[_0x80b7('0x17')](_0x36d0bb);return _0x1a6317['set'](_0x80b7('0x1d'),_0x21ea65+'-'+_0x2c0c4e+'/'+_0x3b6b13)[_0x80b7('0x19')](_0x46822c);}return null;};}function patchUpdates(_0x205457){return function(_0x125c47){try{jsonpatch['apply'](_0x125c47,_0x205457,!![]);}catch(_0x48c356){return BPromise[_0x80b7('0x1e')](_0x48c356);}return _0x125c47[_0x80b7('0x1f')]();};}function saveUpdates(_0x1b584b,_0xd51ad9){return function(_0x574e5c){if(_0x574e5c){return _0x574e5c['update'](_0x1b584b)[_0x80b7('0x20')](function(_0x3aed77){return _0x3aed77;});}return null;};}function removeEntity(_0xa465d2,_0x3ad8c1){return function(_0x527d0f){if(_0x527d0f){return _0x527d0f[_0x80b7('0x21')]()['then'](function(){_0xa465d2['status'](0xcc)[_0x80b7('0x18')]();});}};}function handleEntityNotFound(_0xdab5e0,_0x65d31d){return function(_0x155c00){if(!_0x155c00){_0xdab5e0[_0x80b7('0x16')](0x194);}return _0x155c00;};}function handleError(_0x3a029b,_0x29a4e6){_0x29a4e6=_0x29a4e6||0x1f4;return function(_0x8fa95e){logger[_0x80b7('0x22')](_0x8fa95e[_0x80b7('0x23')]);if(_0x8fa95e[_0x80b7('0x24')]){delete _0x8fa95e[_0x80b7('0x24')];}_0x3a029b[_0x80b7('0x17')](_0x29a4e6)[_0x80b7('0x25')](_0x8fa95e);};}exports[_0x80b7('0x26')]=function(_0x481cd2,_0x40cfd3){var _0x1661be={},_0x5e3f6f={},_0x370bfb={'count':0x0,'rows':[]};var _0x37fda1=db[_0x80b7('0x27')]['rawAttributes'];_0x5e3f6f[_0x80b7('0x28')]=_[_0x80b7('0x29')](_0x37fda1);_0x5e3f6f[_0x80b7('0x2a')]=_[_0x80b7('0x29')](_0x481cd2[_0x80b7('0x2a')]);_0x5e3f6f[_0x80b7('0x2b')]=_[_0x80b7('0x2c')](_0x5e3f6f[_0x80b7('0x28')],_0x5e3f6f[_0x80b7('0x2a')]);_0x1661be[_0x80b7('0x2d')]=_[_0x80b7('0x2c')](_0x5e3f6f[_0x80b7('0x28')],qs[_0x80b7('0x2e')](_0x481cd2['query']['fields']));_0x1661be[_0x80b7('0x2d')]=_0x1661be[_0x80b7('0x2d')]['length']?_0x1661be['attributes']:_0x5e3f6f[_0x80b7('0x28')];if(!_0x481cd2[_0x80b7('0x2a')][_0x80b7('0x2f')](_0x80b7('0x30'))){_0x1661be[_0x80b7('0x1c')]=qs[_0x80b7('0x1c')](_0x481cd2['query'][_0x80b7('0x1c')]);_0x1661be[_0x80b7('0x1b')]=qs[_0x80b7('0x1b')](_0x481cd2[_0x80b7('0x2a')]['offset']);}_0x1661be[_0x80b7('0x31')]=qs[_0x80b7('0x32')](_0x481cd2['query'][_0x80b7('0x32')]);_0x1661be[_0x80b7('0x33')]=qs[_0x80b7('0x2b')](_[_0x80b7('0x34')](_0x481cd2[_0x80b7('0x2a')],_0x5e3f6f[_0x80b7('0x2b')]));if(_0x481cd2[_0x80b7('0x2a')][_0x80b7('0x35')]){_0x1661be['where']=_['merge'](_0x1661be['where'],{'$or':_[_0x80b7('0x36')](_0x37fda1,function(_0x26da30){if(_0x26da30[_0x80b7('0x37')][_0x80b7('0x38')]!==_0x80b7('0x39')){var _0x2e0136={};_0x2e0136[_0x26da30[_0x80b7('0x3a')]]={'$like':'%'+_0x481cd2[_0x80b7('0x2a')]['filter']+'%'};return _0x2e0136;}})});}_0x1661be=_[_0x80b7('0x3b')]({},_0x1661be,_0x481cd2[_0x80b7('0x3c')]);var _0x15e1e2={'where':_0x1661be[_0x80b7('0x33')]};return db[_0x80b7('0x27')][_0x80b7('0x1a')](_0x15e1e2)['then'](function(_0x287f7e){_0x370bfb['count']=_0x287f7e;if(_0x481cd2[_0x80b7('0x2a')][_0x80b7('0x3d')]){_0x1661be['include']=[{'all':!![]}];}return db['IntegrationReport'][_0x80b7('0x3e')](_0x1661be);})['then'](function(_0x5c91d8){_0x370bfb[_0x80b7('0x3f')]=_0x5c91d8;return _0x370bfb;})[_0x80b7('0x20')](respondWithFilteredResult(_0x40cfd3,_0x1661be))['catch'](handleError(_0x40cfd3,null));};exports[_0x80b7('0x40')]=function(_0x196f48,_0x55cf02){var _0x59e0c4={'raw':![],'where':{'id':_0x196f48[_0x80b7('0x41')]['id']}},_0x2fdd6d={};_0x2fdd6d[_0x80b7('0x28')]=_[_0x80b7('0x29')](db[_0x80b7('0x27')][_0x80b7('0x42')]);_0x2fdd6d['query']=_[_0x80b7('0x29')](_0x196f48[_0x80b7('0x2a')]);_0x2fdd6d[_0x80b7('0x2b')]=_[_0x80b7('0x2c')](_0x2fdd6d['model'],_0x2fdd6d[_0x80b7('0x2a')]);_0x59e0c4['attributes']=_[_0x80b7('0x2c')](_0x2fdd6d[_0x80b7('0x28')],qs[_0x80b7('0x2e')](_0x196f48[_0x80b7('0x2a')][_0x80b7('0x2e')]));_0x59e0c4[_0x80b7('0x2d')]=_0x59e0c4[_0x80b7('0x2d')][_0x80b7('0x43')]?_0x59e0c4[_0x80b7('0x2d')]:_0x2fdd6d[_0x80b7('0x28')];if(_0x196f48[_0x80b7('0x2a')][_0x80b7('0x3d')]){_0x59e0c4[_0x80b7('0x44')]=[{'all':!![]}];}_0x59e0c4=_['merge']({},_0x59e0c4,_0x196f48[_0x80b7('0x3c')]);return db[_0x80b7('0x27')]['find'](_0x59e0c4)[_0x80b7('0x20')](handleEntityNotFound(_0x55cf02,null))['then'](respondWithResult(_0x55cf02,null))['catch'](handleError(_0x55cf02,null));};exports[_0x80b7('0x45')]=function(_0x59e065,_0x50ad92){return db[_0x80b7('0x27')][_0x80b7('0x45')](_0x59e065['body'],{})[_0x80b7('0x20')](respondWithResult(_0x50ad92,0xc9))[_0x80b7('0x46')](handleError(_0x50ad92,null));};exports[_0x80b7('0x47')]=function(_0x5455a5,_0x385e84){if(_0x5455a5[_0x80b7('0x48')]['id']){delete _0x5455a5[_0x80b7('0x48')]['id'];}return db[_0x80b7('0x27')]['find']({'where':{'id':_0x5455a5['params']['id']}})['then'](handleEntityNotFound(_0x385e84,null))[_0x80b7('0x20')](saveUpdates(_0x5455a5[_0x80b7('0x48')],null))[_0x80b7('0x20')](respondWithResult(_0x385e84,null))[_0x80b7('0x46')](handleError(_0x385e84,null));};exports[_0x80b7('0x21')]=function(_0x44b23d,_0x398925){return db[_0x80b7('0x27')]['find']({'where':{'id':_0x44b23d['params']['id']}})[_0x80b7('0x20')](handleEntityNotFound(_0x398925,null))[_0x80b7('0x20')](removeEntity(_0x398925,null))[_0x80b7('0x46')](handleError(_0x398925,null));};exports[_0x80b7('0x49')]=function(_0x1fff8c,_0x2da4a1){return db['IntegrationReport'][_0x80b7('0x49')]()[_0x80b7('0x20')](respondWithResult(_0x2da4a1,null))['catch'](handleError(_0x2da4a1,null));};
\ No newline at end of file
index 8592132..d02ae4a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x56e7=['define','IntegrationReport','util','../../config/logger','moment','bluebird','request-promise','path','rimraf','../../config/environment','./integrationReport.attributes'];(function(_0x153b93,_0x111ba3){var _0x11d8b2=function(_0x1e3e33){while(--_0x1e3e33){_0x153b93['push'](_0x153b93['shift']());}};_0x11d8b2(++_0x111ba3);}(_0x56e7,0x7b));var _0x756e=function(_0x55c28c,_0x446d6c){_0x55c28c=_0x55c28c-0x0;var _0x2ca90a=_0x56e7[_0x55c28c];return _0x2ca90a;};'use strict';var _=require('lodash');var util=require(_0x756e('0x0'));var logger=require(_0x756e('0x1'))('api');var moment=require(_0x756e('0x2'));var BPromise=require(_0x756e('0x3'));var rp=require(_0x756e('0x4'));var fs=require('fs');var path=require(_0x756e('0x5'));var rimraf=require(_0x756e('0x6'));var config=require(_0x756e('0x7'));var attributes=require(_0x756e('0x8'));module['exports']=function(_0x3b3b8f,_0x404189){return _0x3b3b8f[_0x756e('0x9')](_0x756e('0xa'),attributes,{'tableName':'report_integration','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x41fe=['util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./integrationReport.attributes','exports','define','IntegrationReport','report_integration','lodash'];(function(_0x1caeb4,_0x4ebfa5){var _0x40193b=function(_0x5dcd6f){while(--_0x5dcd6f){_0x1caeb4['push'](_0x1caeb4['shift']());}};_0x40193b(++_0x4ebfa5);}(_0x41fe,0xd1));var _0xe41f=function(_0x45b034,_0x3a57dd){_0x45b034=_0x45b034-0x0;var _0x509cb0=_0x41fe[_0x45b034];return _0x509cb0;};'use strict';var _=require(_0xe41f('0x0'));var util=require(_0xe41f('0x1'));var logger=require(_0xe41f('0x2'))(_0xe41f('0x3'));var moment=require(_0xe41f('0x4'));var BPromise=require(_0xe41f('0x5'));var rp=require(_0xe41f('0x6'));var fs=require('fs');var path=require(_0xe41f('0x7'));var rimraf=require(_0xe41f('0x8'));var config=require(_0xe41f('0x9'));var attributes=require(_0xe41f('0xa'));module[_0xe41f('0xb')]=function(_0xd3c763,_0x370385){return _0xd3c763[_0xe41f('0xc')](_0xe41f('0xd'),attributes,{'tableName':_0xe41f('0xe'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index b4d825a..7d7195c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x916c=['../../mysqldb','../../config/logger','rpc','jayson/promise','client','http','request','IntegrationReport,\x20%s,\x20%s','request\x20sent','IntegrationReport,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','catch','lodash','util','moment','bluebird','randomstring','ioredis'];(function(_0x5cb5fc,_0x6cdda3){var _0x4b6fab=function(_0x353db1){while(--_0x353db1){_0x5cb5fc['push'](_0x5cb5fc['shift']());}};_0x4b6fab(++_0x6cdda3);}(_0x916c,0x19c));var _0xc916=function(_0x58175c,_0x2d9373){_0x58175c=_0x58175c-0x0;var _0x55b88f=_0x916c[_0x58175c];return _0x55b88f;};'use strict';var _=require(_0xc916('0x0'));var util=require(_0xc916('0x1'));var moment=require(_0xc916('0x2'));var BPromise=require(_0xc916('0x3'));var rs=require(_0xc916('0x4'));var fs=require('fs');var Redis=require(_0xc916('0x5'));var db=require(_0xc916('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0xc916('0x7'))(_0xc916('0x8'));var config=require('../../config/environment');var jayson=require(_0xc916('0x9'));var client=jayson[_0xc916('0xa')][_0xc916('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x914336,_0x3a6390,_0x13215f){return new BPromise(function(_0x56acc1,_0x317962){return client[_0xc916('0xc')](_0x914336,_0x13215f)['then'](function(_0x47d759){logger['info'](_0xc916('0xd'),_0x3a6390,_0xc916('0xe'));logger['debug'](_0xc916('0xf'),_0x3a6390,_0xc916('0xe'),JSON[_0xc916('0x10')](_0x47d759));if(_0x47d759[_0xc916('0x11')]){if(_0x47d759[_0xc916('0x11')]['code']===0x1f4){logger[_0xc916('0x11')]('IntegrationReport,\x20%s,\x20%s',_0x3a6390,_0x47d759[_0xc916('0x11')][_0xc916('0x12')]);return _0x317962(_0x47d759[_0xc916('0x11')]['message']);}logger[_0xc916('0x11')](_0xc916('0xd'),_0x3a6390,_0x47d759[_0xc916('0x11')]['message']);return _0x56acc1(_0x47d759[_0xc916('0x11')][_0xc916('0x12')]);}else{logger[_0xc916('0x13')](_0xc916('0xd'),_0x3a6390,'request\x20sent');_0x56acc1(_0x47d759[_0xc916('0x14')][_0xc916('0x12')]);}})[_0xc916('0x15')](function(_0x2bdac3){logger[_0xc916('0x11')](_0xc916('0xd'),_0x3a6390,_0x2bdac3);_0x317962(_0x2bdac3);});});}
\ No newline at end of file
+var _0x5b41=['jayson/promise','client','http','request','then','info','IntegrationReport,\x20%s,\x20%s','request\x20sent','debug','IntegrationReport,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0x4cc571,_0x48754f){var _0x1c2123=function(_0x59b2e1){while(--_0x59b2e1){_0x4cc571['push'](_0x4cc571['shift']());}};_0x1c2123(++_0x48754f);}(_0x5b41,0xa5));var _0x15b4=function(_0x12ec84,_0x27bf9c){_0x12ec84=_0x12ec84-0x0;var _0x574e18=_0x5b41[_0x12ec84];return _0x574e18;};'use strict';var _=require(_0x15b4('0x0'));var util=require(_0x15b4('0x1'));var moment=require(_0x15b4('0x2'));var BPromise=require(_0x15b4('0x3'));var rs=require(_0x15b4('0x4'));var fs=require('fs');var Redis=require(_0x15b4('0x5'));var db=require(_0x15b4('0x6'))['db'];var utils=require(_0x15b4('0x7'));var logger=require(_0x15b4('0x8'))(_0x15b4('0x9'));var config=require('../../config/environment');var jayson=require(_0x15b4('0xa'));var client=jayson[_0x15b4('0xb')][_0x15b4('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x51bdf2,_0x1e3d35,_0x39fd77){return new BPromise(function(_0x176919,_0x2936c5){return client[_0x15b4('0xd')](_0x51bdf2,_0x39fd77)[_0x15b4('0xe')](function(_0x21b88d){logger[_0x15b4('0xf')](_0x15b4('0x10'),_0x1e3d35,_0x15b4('0x11'));logger[_0x15b4('0x12')](_0x15b4('0x13'),_0x1e3d35,'request\x20sent',JSON[_0x15b4('0x14')](_0x21b88d));if(_0x21b88d[_0x15b4('0x15')]){if(_0x21b88d[_0x15b4('0x15')]['code']===0x1f4){logger[_0x15b4('0x15')](_0x15b4('0x10'),_0x1e3d35,_0x21b88d[_0x15b4('0x15')][_0x15b4('0x16')]);return _0x2936c5(_0x21b88d['error'][_0x15b4('0x16')]);}logger[_0x15b4('0x15')](_0x15b4('0x10'),_0x1e3d35,_0x21b88d[_0x15b4('0x15')][_0x15b4('0x16')]);return _0x176919(_0x21b88d[_0x15b4('0x15')]['message']);}else{logger[_0x15b4('0xf')](_0x15b4('0x10'),_0x1e3d35,'request\x20sent');_0x176919(_0x21b88d[_0x15b4('0x17')][_0x15b4('0x16')]);}})[_0x15b4('0x18')](function(_0x29735a){logger[_0x15b4('0x15')]('IntegrationReport,\x20%s,\x20%s',_0x1e3d35,_0x29735a);_0x2936c5(_0x29735a);});});}
\ No newline at end of file
index 1fe991b..dff408b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfcdd=['path','connect-timeout','express','../../config/environment','./interval.controller','get','index','/:id','isAuthenticated','show','/:id/sub_intervals','post','create','addInterval','/:id/sub_intervals/create_many','addIntervals','update','delete','destroy','exports','multer','util'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xfcdd,0x18a));var _0xdfcd=function(_0x3df937,_0x185001){_0x3df937=_0x3df937-0x0;var _0x4aa01d=_0xfcdd[_0x3df937];return _0x4aa01d;};'use strict';var multer=require(_0xdfcd('0x0'));var util=require(_0xdfcd('0x1'));var path=require(_0xdfcd('0x2'));var timeout=require(_0xdfcd('0x3'));var express=require(_0xdfcd('0x4'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xdfcd('0x5'));var controller=require(_0xdfcd('0x6'));router[_0xdfcd('0x7')]('/',auth['isAuthenticated'](),controller[_0xdfcd('0x8')]);router[_0xdfcd('0x7')](_0xdfcd('0x9'),auth[_0xdfcd('0xa')](),controller[_0xdfcd('0xb')]);router[_0xdfcd('0x7')](_0xdfcd('0xc'),auth[_0xdfcd('0xa')](),controller['getIntervals']);router[_0xdfcd('0xd')]('/',auth[_0xdfcd('0xa')](),controller[_0xdfcd('0xe')]);router['post'](_0xdfcd('0xc'),auth[_0xdfcd('0xa')](),controller[_0xdfcd('0xf')]);router[_0xdfcd('0xd')](_0xdfcd('0x10'),auth[_0xdfcd('0xa')](),controller[_0xdfcd('0x11')]);router['put']('/:id',auth[_0xdfcd('0xa')](),controller[_0xdfcd('0x12')]);router[_0xdfcd('0x13')](_0xdfcd('0x9'),auth[_0xdfcd('0xa')](),controller[_0xdfcd('0x14')]);module[_0xdfcd('0x15')]=router;
\ No newline at end of file
+var _0xd7ab=['/:id','isAuthenticated','/:id/sub_intervals','getIntervals','post','/:id/sub_intervals/create_many','addIntervals','put','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','get'];(function(_0x4314d7,_0x355218){var _0x5c599b=function(_0x556354){while(--_0x556354){_0x4314d7['push'](_0x4314d7['shift']());}};_0x5c599b(++_0x355218);}(_0xd7ab,0x14e));var _0xbd7a=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xd7ab[_0x14add3];return _0x4a174f;};'use strict';var multer=require(_0xbd7a('0x0'));var util=require(_0xbd7a('0x1'));var path=require(_0xbd7a('0x2'));var timeout=require(_0xbd7a('0x3'));var express=require(_0xbd7a('0x4'));var router=express[_0xbd7a('0x5')]();var auth=require(_0xbd7a('0x6'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./interval.controller');router[_0xbd7a('0x7')]('/',auth['isAuthenticated'](),controller['index']);router[_0xbd7a('0x7')](_0xbd7a('0x8'),auth[_0xbd7a('0x9')](),controller['show']);router[_0xbd7a('0x7')](_0xbd7a('0xa'),auth['isAuthenticated'](),controller[_0xbd7a('0xb')]);router['post']('/',auth[_0xbd7a('0x9')](),controller['create']);router['post'](_0xbd7a('0xa'),auth['isAuthenticated'](),controller['addInterval']);router[_0xbd7a('0xc')](_0xbd7a('0xd'),auth[_0xbd7a('0x9')](),controller[_0xbd7a('0xe')]);router[_0xbd7a('0xf')]('/:id',auth[_0xbd7a('0x9')](),controller['update']);router[_0xbd7a('0x10')](_0xbd7a('0x8'),auth[_0xbd7a('0x9')](),controller[_0xbd7a('0x11')]);module[_0xbd7a('0x12')]=router;
\ No newline at end of file
index b3cfe1b..a0efa46 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1488=['sequelize','STRING'];(function(_0xb0f7c3,_0x4eae95){var _0x28ea68=function(_0x4395a7){while(--_0x4395a7){_0xb0f7c3['push'](_0xb0f7c3['shift']());}};_0x28ea68(++_0x4eae95);}(_0x1488,0x88));var _0x8148=function(_0xd13a88,_0x3c5269){_0xd13a88=_0xd13a88-0x0;var _0x1c993c=_0x1488[_0xd13a88];return _0x1c993c;};'use strict';var Sequelize=require(_0x8148('0x0'));module['exports']={'name':{'type':Sequelize[_0x8148('0x1')]},'description':{'type':Sequelize[_0x8148('0x1')]},'interval':{'type':Sequelize[_0x8148('0x1')],'allowNull':!![]}};
\ No newline at end of file
+var _0x07f6=['sequelize','exports','STRING'];(function(_0x5c1128,_0x50bb34){var _0xde8554=function(_0x13e46d){while(--_0x13e46d){_0x5c1128['push'](_0x5c1128['shift']());}};_0xde8554(++_0x50bb34);}(_0x07f6,0xa8));var _0x607f=function(_0x1d1d09,_0x504d77){_0x1d1d09=_0x1d1d09-0x0;var _0x8827e=_0x07f6[_0x1d1d09];return _0x8827e;};'use strict';var Sequelize=require(_0x607f('0x0'));module[_0x607f('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']},'interval':{'type':Sequelize[_0x607f('0x2')],'allowNull':!![]}};
\ No newline at end of file
index 16aab17..2430e4c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe638=['length','hasOwnProperty','nolimit','limit','order','sort','where','filter','merge','type','key','VIRTUAL','options','includeAll','findAll','rows','catch','show','params','include','find','create','body','user','get','role','Intervals','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','addInterval','getIntervals','findOne','pick','map','addIntervals','sequelize','IntervalId','bulkCreate','html-pdf','eml-format','zip-dir','request-promise','mustache','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../mysqldb','../../components/extensions/rewrite','sendStatus','status','end','json','count','offset','set','Content-Range','apply','then','destroy','error','stack','name','send','index','Interval','rawAttributes','model','keys','query','filters','intersection','attributes','fields'];(function(_0x395778,_0xd23dd7){var _0x5787ad=function(_0x48648a){while(--_0x48648a){_0x395778['push'](_0x395778['shift']());}};_0x5787ad(++_0xd23dd7);}(_0xe638,0xd9));var _0x8e63=function(_0x3cdfd2,_0x42c73a){_0x3cdfd2=_0x3cdfd2-0x0;var _0x5cba81=_0xe638[_0x3cdfd2];return _0x5cba81;};'use strict';var pdf=require(_0x8e63('0x0'));var emlformat=require(_0x8e63('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x8e63('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x8e63('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x8e63('0x4'));var util=require('util');var path=require(_0x8e63('0x5'));var sox=require(_0x8e63('0x6'));var csv=require(_0x8e63('0x7'));var ejs=require(_0x8e63('0x8'));var fs=require('fs');var _=require(_0x8e63('0x9'));var squel=require('squel');var crypto=require(_0x8e63('0xa'));var jsforce=require(_0x8e63('0xb'));var deskjs=require(_0x8e63('0xc'));var toCsv=require(_0x8e63('0x7'));var querystring=require('querystring');var Papa=require(_0x8e63('0xd'));var Redis=require(_0x8e63('0xe'));var authService=require(_0x8e63('0xf'));var qs=require(_0x8e63('0x10'));var hardwareService=require(_0x8e63('0x11'));var logger=require('../../config/logger')(_0x8e63('0x12'));var utils=require(_0x8e63('0x13'));var config=require('../../config/environment');var db=require(_0x8e63('0x14'))['db'];var extensions=require(_0x8e63('0x15'));function respondWithStatusCode(_0x1d1274,_0x3a0172){_0x3a0172=_0x3a0172||0xcc;return function(_0x145551){if(_0x145551){return _0x1d1274[_0x8e63('0x16')](_0x3a0172);}return _0x1d1274[_0x8e63('0x17')](_0x3a0172)[_0x8e63('0x18')]();};}function respondWithResult(_0x2e7c92,_0x3aded6){_0x3aded6=_0x3aded6||0xc8;return function(_0x4be9d4){if(_0x4be9d4){return _0x2e7c92['status'](_0x3aded6)[_0x8e63('0x19')](_0x4be9d4);}};}function respondWithFilteredResult(_0x97b584,_0x2fbde3){return function(_0x2d9c0a){if(_0x2d9c0a){var _0x24df1f=_0x2d9c0a[_0x8e63('0x1a')],_0xf46f37=_0x2fbde3[_0x8e63('0x1b')],_0x21b0e3=_0x2fbde3[_0x8e63('0x1b')]+_0x2fbde3['limit'],_0x4935dc;if(_0x21b0e3>=_0x24df1f){_0x21b0e3=_0x24df1f;_0x4935dc=0xc8;}else{_0x4935dc=0xce;}_0x97b584[_0x8e63('0x17')](_0x4935dc);return _0x97b584[_0x8e63('0x1c')](_0x8e63('0x1d'),_0xf46f37+'-'+_0x21b0e3+'/'+_0x24df1f)['json'](_0x2d9c0a);}return null;};}function patchUpdates(_0x4f5441){return function(_0x2c819c){try{jsonpatch[_0x8e63('0x1e')](_0x2c819c,_0x4f5441,!![]);}catch(_0x5147f2){return BPromise['reject'](_0x5147f2);}return _0x2c819c['save']();};}function saveUpdates(_0x278093,_0x52510f){return function(_0x3b4072){if(_0x3b4072){return _0x3b4072['update'](_0x278093)[_0x8e63('0x1f')](function(_0x4387a6){return _0x4387a6;});}return null;};}function removeEntity(_0x47e8eb,_0x501a9a){return function(_0x37db75){if(_0x37db75){return _0x37db75['destroy']()[_0x8e63('0x1f')](function(){var _0x5ae357=_0x37db75['get']({'plain':!![]});var _0x3c27c0='Intervals';return db['UserProfileResource'][_0x8e63('0x20')]({'where':{'type':_0x3c27c0,'resourceId':_0x5ae357['id']}})['then'](function(){return _0x37db75;});})['then'](function(){_0x47e8eb[_0x8e63('0x17')](0xcc)[_0x8e63('0x18')]();});}};}function handleEntityNotFound(_0x55cc09,_0x1a46e1){return function(_0x2d9672){if(!_0x2d9672){_0x55cc09[_0x8e63('0x16')](0x194);}return _0x2d9672;};}function handleError(_0x4907d2,_0x27ca43){_0x27ca43=_0x27ca43||0x1f4;return function(_0x3dd38f){logger[_0x8e63('0x21')](_0x3dd38f[_0x8e63('0x22')]);if(_0x3dd38f[_0x8e63('0x23')]){delete _0x3dd38f[_0x8e63('0x23')];}_0x4907d2[_0x8e63('0x17')](_0x27ca43)[_0x8e63('0x24')](_0x3dd38f);};}exports[_0x8e63('0x25')]=function(_0x1b7375,_0x51ef6d){var _0x548e65={},_0x97025a={},_0x3fff3d={'count':0x0,'rows':[]};var _0x25bd70=db[_0x8e63('0x26')][_0x8e63('0x27')];_0x97025a[_0x8e63('0x28')]=_[_0x8e63('0x29')](_0x25bd70);_0x97025a['query']=_[_0x8e63('0x29')](_0x1b7375[_0x8e63('0x2a')]);_0x97025a[_0x8e63('0x2b')]=_[_0x8e63('0x2c')](_0x97025a[_0x8e63('0x28')],_0x97025a[_0x8e63('0x2a')]);_0x548e65[_0x8e63('0x2d')]=_[_0x8e63('0x2c')](_0x97025a[_0x8e63('0x28')],qs[_0x8e63('0x2e')](_0x1b7375['query'][_0x8e63('0x2e')]));_0x548e65['attributes']=_0x548e65[_0x8e63('0x2d')][_0x8e63('0x2f')]?_0x548e65['attributes']:_0x97025a[_0x8e63('0x28')];if(!_0x1b7375[_0x8e63('0x2a')][_0x8e63('0x30')](_0x8e63('0x31'))){_0x548e65[_0x8e63('0x32')]=qs[_0x8e63('0x32')](_0x1b7375[_0x8e63('0x2a')][_0x8e63('0x32')]);_0x548e65[_0x8e63('0x1b')]=qs['offset'](_0x1b7375[_0x8e63('0x2a')][_0x8e63('0x1b')]);}_0x548e65[_0x8e63('0x33')]=qs[_0x8e63('0x34')](_0x1b7375[_0x8e63('0x2a')]['sort']);_0x548e65[_0x8e63('0x35')]=qs[_0x8e63('0x2b')](_['pick'](_0x1b7375['query'],_0x97025a[_0x8e63('0x2b')]));if(_0x1b7375[_0x8e63('0x2a')][_0x8e63('0x36')]){_0x548e65['where']=_[_0x8e63('0x37')](_0x548e65[_0x8e63('0x35')],{'$or':_['map'](_0x25bd70,function(_0x33425f){if(_0x33425f[_0x8e63('0x38')][_0x8e63('0x39')]!==_0x8e63('0x3a')){var _0xa65886={};_0xa65886[_0x33425f['field']]={'$like':'%'+_0x1b7375['query'][_0x8e63('0x36')]+'%'};return _0xa65886;}})});}_0x548e65=_[_0x8e63('0x37')]({},_0x548e65,_0x1b7375[_0x8e63('0x3b')]);var _0x5433e2={'where':_0x548e65[_0x8e63('0x35')]};return db[_0x8e63('0x26')][_0x8e63('0x1a')](_0x5433e2)[_0x8e63('0x1f')](function(_0xf10090){_0x3fff3d['count']=_0xf10090;if(_0x1b7375['query'][_0x8e63('0x3c')]){_0x548e65['include']=[{'all':!![]}];}return db[_0x8e63('0x26')][_0x8e63('0x3d')](_0x548e65);})[_0x8e63('0x1f')](function(_0x313912){_0x3fff3d[_0x8e63('0x3e')]=_0x313912;return _0x3fff3d;})[_0x8e63('0x1f')](respondWithFilteredResult(_0x51ef6d,_0x548e65))[_0x8e63('0x3f')](handleError(_0x51ef6d,null));};exports[_0x8e63('0x40')]=function(_0x3b97de,_0x1cf2ad){var _0x3c09fc={'raw':!![],'where':{'id':_0x3b97de[_0x8e63('0x41')]['id']}},_0x53bc7c={};_0x53bc7c[_0x8e63('0x28')]=_[_0x8e63('0x29')](db[_0x8e63('0x26')][_0x8e63('0x27')]);_0x53bc7c[_0x8e63('0x2a')]=_[_0x8e63('0x29')](_0x3b97de[_0x8e63('0x2a')]);_0x53bc7c['filters']=_[_0x8e63('0x2c')](_0x53bc7c[_0x8e63('0x28')],_0x53bc7c[_0x8e63('0x2a')]);_0x3c09fc[_0x8e63('0x2d')]=_['intersection'](_0x53bc7c[_0x8e63('0x28')],qs[_0x8e63('0x2e')](_0x3b97de['query']['fields']));_0x3c09fc[_0x8e63('0x2d')]=_0x3c09fc[_0x8e63('0x2d')][_0x8e63('0x2f')]?_0x3c09fc[_0x8e63('0x2d')]:_0x53bc7c[_0x8e63('0x28')];if(_0x3b97de[_0x8e63('0x2a')]['includeAll']){_0x3c09fc[_0x8e63('0x42')]=[{'all':!![]}];}_0x3c09fc=_[_0x8e63('0x37')]({},_0x3c09fc,_0x3b97de[_0x8e63('0x3b')]);return db[_0x8e63('0x26')][_0x8e63('0x43')](_0x3c09fc)[_0x8e63('0x1f')](handleEntityNotFound(_0x1cf2ad,null))[_0x8e63('0x1f')](respondWithResult(_0x1cf2ad,null))[_0x8e63('0x3f')](handleError(_0x1cf2ad,null));};exports[_0x8e63('0x44')]=function(_0xca53cb,_0x3013c5){return db[_0x8e63('0x26')][_0x8e63('0x44')](_0xca53cb[_0x8e63('0x45')],{})[_0x8e63('0x1f')](function(_0x33ae28){var _0x562393=_0xca53cb[_0x8e63('0x46')][_0x8e63('0x47')]({'plain':!![]});if(!_0x562393)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x562393[_0x8e63('0x48')]===_0x8e63('0x46')){var _0x84c938=_0x33ae28[_0x8e63('0x47')]({'plain':!![]});var _0x40b95f=_0x8e63('0x49');return db[_0x8e63('0x4a')][_0x8e63('0x43')]({'where':{'name':_0x40b95f,'userProfileId':_0x562393[_0x8e63('0x4b')]},'raw':!![]})[_0x8e63('0x1f')](function(_0x5138e3){if(_0x5138e3&&_0x5138e3[_0x8e63('0x4c')]===0x0){return db[_0x8e63('0x4d')]['create']({'name':_0x84c938[_0x8e63('0x23')],'resourceId':_0x84c938['id'],'type':_0x5138e3['name'],'sectionId':_0x5138e3['id']},{})[_0x8e63('0x1f')](function(){return _0x33ae28;});}else{return _0x33ae28;}})[_0x8e63('0x3f')](function(_0x21836a){logger['error'](_0x8e63('0x4e'),_0x21836a);throw _0x21836a;});}return _0x33ae28;})[_0x8e63('0x1f')](respondWithResult(_0x3013c5,0xc9))['catch'](handleError(_0x3013c5,null));};exports['update']=function(_0x2f6080,_0xf7ea12){if(_0x2f6080[_0x8e63('0x45')]['id']){delete _0x2f6080['body']['id'];}return db['Interval'][_0x8e63('0x43')]({'where':{'id':_0x2f6080[_0x8e63('0x41')]['id']}})[_0x8e63('0x1f')](handleEntityNotFound(_0xf7ea12,null))['then'](saveUpdates(_0x2f6080[_0x8e63('0x45')],null))[_0x8e63('0x1f')](respondWithResult(_0xf7ea12,null))[_0x8e63('0x3f')](handleError(_0xf7ea12,null));};exports[_0x8e63('0x20')]=function(_0x5bcede,_0x468ecf){return db['Interval'][_0x8e63('0x43')]({'where':{'id':_0x5bcede[_0x8e63('0x41')]['id']}})[_0x8e63('0x1f')](handleEntityNotFound(_0x468ecf,null))[_0x8e63('0x1f')](removeEntity(_0x468ecf,null))[_0x8e63('0x3f')](handleError(_0x468ecf,null));};exports[_0x8e63('0x4f')]=function(_0x412aab,_0x2dd557,_0x41f10c){if(_0x412aab[_0x8e63('0x45')]['id']){delete _0x412aab[_0x8e63('0x45')]['id'];}return db[_0x8e63('0x26')]['find']({'where':{'id':_0x412aab[_0x8e63('0x41')]['id']}})[_0x8e63('0x1f')](handleEntityNotFound(_0x2dd557,null))['then'](function(_0x5dcf7a){if(_0x5dcf7a){_0x412aab['body']['IntervalId']=_0x5dcf7a['id'];return db['Interval'][_0x8e63('0x44')](_0x412aab[_0x8e63('0x45')]);}})[_0x8e63('0x1f')](respondWithResult(_0x2dd557,null))[_0x8e63('0x3f')](handleError(_0x2dd557,null));};exports[_0x8e63('0x50')]=function(_0x261d13,_0x3467f7,_0x309f78){var _0x1e1295={};var _0x41b51e={};var _0x4947ff;var _0x45f5fa;return db[_0x8e63('0x26')][_0x8e63('0x51')]({'where':{'id':_0x261d13[_0x8e63('0x41')]['id']}})[_0x8e63('0x1f')](handleEntityNotFound(_0x3467f7,null))[_0x8e63('0x1f')](function(_0x2655fe){if(_0x2655fe){_0x4947ff=_0x2655fe;_0x41b51e[_0x8e63('0x28')]=_[_0x8e63('0x29')](db[_0x8e63('0x26')][_0x8e63('0x27')]);_0x41b51e['query']=_[_0x8e63('0x29')](_0x261d13[_0x8e63('0x2a')]);_0x41b51e[_0x8e63('0x2b')]=_['intersection'](_0x41b51e[_0x8e63('0x28')],_0x41b51e[_0x8e63('0x2a')]);_0x1e1295[_0x8e63('0x2d')]=_[_0x8e63('0x2c')](_0x41b51e[_0x8e63('0x28')],qs[_0x8e63('0x2e')](_0x261d13[_0x8e63('0x2a')][_0x8e63('0x2e')]));_0x1e1295[_0x8e63('0x2d')]=_0x1e1295[_0x8e63('0x2d')]['length']?_0x1e1295[_0x8e63('0x2d')]:_0x41b51e[_0x8e63('0x28')];_0x1e1295[_0x8e63('0x33')]=qs[_0x8e63('0x34')](_0x261d13[_0x8e63('0x2a')][_0x8e63('0x34')]);_0x1e1295[_0x8e63('0x35')]=qs[_0x8e63('0x2b')](_[_0x8e63('0x52')](_0x261d13[_0x8e63('0x2a')],_0x41b51e[_0x8e63('0x2b')]));if(_0x261d13[_0x8e63('0x2a')][_0x8e63('0x36')]){_0x1e1295[_0x8e63('0x35')]=_[_0x8e63('0x37')](_0x1e1295[_0x8e63('0x35')],{'$or':_[_0x8e63('0x53')](_0x1e1295['attributes'],function(_0x594407){var _0x72ae26={};_0x72ae26[_0x594407]={'$like':'%'+_0x261d13['query'][_0x8e63('0x36')]+'%'};return _0x72ae26;})});}_0x1e1295=_['merge']({},_0x1e1295,_0x261d13[_0x8e63('0x3b')]);return _0x4947ff[_0x8e63('0x50')](_0x1e1295);}})[_0x8e63('0x1f')](function(_0x538784){if(_0x538784){_0x45f5fa=_0x538784[_0x8e63('0x2f')];if(!_0x261d13[_0x8e63('0x2a')]['hasOwnProperty']('nolimit')){_0x1e1295[_0x8e63('0x32')]=qs['limit'](_0x261d13[_0x8e63('0x2a')]['limit']);_0x1e1295[_0x8e63('0x1b')]=qs[_0x8e63('0x1b')](_0x261d13[_0x8e63('0x2a')]['offset']);}return _0x4947ff['getIntervals'](_0x1e1295);}})[_0x8e63('0x1f')](function(_0x21a7d2){if(_0x21a7d2){return _0x21a7d2?{'count':_0x45f5fa,'rows':_0x21a7d2}:null;}})[_0x8e63('0x1f')](respondWithResult(_0x3467f7,null))[_0x8e63('0x3f')](handleError(_0x3467f7,null));};exports[_0x8e63('0x54')]=function(_0x5bdee0,_0x348170,_0x452f2a){return db['Interval'][_0x8e63('0x51')]({'where':{'id':_0x5bdee0['params']['id']}})[_0x8e63('0x1f')](handleEntityNotFound(_0x348170,null))[_0x8e63('0x1f')](function(_0x43dbed){if(_0x43dbed){return db[_0x8e63('0x55')]['transaction'](function(_0x575e7c){return db['Interval']['destroy']({'where':{'IntervalId':_0x5bdee0[_0x8e63('0x41')]['id']},'transaction':_0x575e7c})[_0x8e63('0x1f')](function(_0x4614b7){var _0xb00ef4=_['map'](_0x5bdee0['body'],function(_0x377a4a){delete _0x377a4a['id'];_0x377a4a[_0x8e63('0x56')]=_0x5bdee0[_0x8e63('0x41')]['id'];return _0x377a4a;});return db['Interval'][_0x8e63('0x57')](_0xb00ef4,{'transaction':_0x575e7c});});})['then'](function(){return db[_0x8e63('0x26')][_0x8e63('0x3d')]({'where':{'IntervalId':_0x5bdee0[_0x8e63('0x41')]['id']}});});}})['then'](respondWithResult(_0x348170,null))[_0x8e63('0x3f')](handleError(_0x348170,null));};
\ No newline at end of file
+var _0x39e4=['sox','to-csv','ejs','lodash','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','../../components/extensions/rewrite','status','end','count','offset','limit','set','reject','save','then','destroy','UserProfileResource','sendStatus','error','name','send','Interval','rawAttributes','model','keys','query','intersection','attributes','fields','hasOwnProperty','nolimit','sort','where','pick','filters','map','type','VIRTUAL','field','merge','options','includeAll','findAll','show','params','include','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','Intervals','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','catch','addInterval','IntervalId','length','order','filter','getIntervals','sequelize','bulkCreate','eml-format','fast-json-patch','moment','util','path'];(function(_0x3e5086,_0x48f4a2){var _0xfeb102=function(_0x5a945f){while(--_0x5a945f){_0x3e5086['push'](_0x3e5086['shift']());}};_0xfeb102(++_0x48f4a2);}(_0x39e4,0x17c));var _0x439e=function(_0x28204c,_0x3bc01a){_0x28204c=_0x28204c-0x0;var _0x33f018=_0x39e4[_0x28204c];return _0x33f018;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x439e('0x0'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x439e('0x1'));var rp=require('request-promise');var moment=require(_0x439e('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x439e('0x3'));var path=require(_0x439e('0x4'));var sox=require(_0x439e('0x5'));var csv=require(_0x439e('0x6'));var ejs=require(_0x439e('0x7'));var fs=require('fs');var _=require(_0x439e('0x8'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x439e('0x6'));var querystring=require('querystring');var Papa=require(_0x439e('0x9'));var Redis=require(_0x439e('0xa'));var authService=require(_0x439e('0xb'));var qs=require(_0x439e('0xc'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x439e('0xd'))(_0x439e('0xe'));var utils=require(_0x439e('0xf'));var config=require(_0x439e('0x10'));var db=require(_0x439e('0x11'))['db'];var extensions=require(_0x439e('0x12'));function respondWithStatusCode(_0x10d5a3,_0x5ae073){_0x5ae073=_0x5ae073||0xcc;return function(_0x479548){if(_0x479548){return _0x10d5a3['sendStatus'](_0x5ae073);}return _0x10d5a3[_0x439e('0x13')](_0x5ae073)[_0x439e('0x14')]();};}function respondWithResult(_0x32667c,_0x5bdfff){_0x5bdfff=_0x5bdfff||0xc8;return function(_0x27e267){if(_0x27e267){return _0x32667c[_0x439e('0x13')](_0x5bdfff)['json'](_0x27e267);}};}function respondWithFilteredResult(_0x5f3134,_0xdfe272){return function(_0x3697df){if(_0x3697df){var _0x41edeb=_0x3697df[_0x439e('0x15')],_0x3f0d2a=_0xdfe272[_0x439e('0x16')],_0x3d39ce=_0xdfe272[_0x439e('0x16')]+_0xdfe272[_0x439e('0x17')],_0x12f142;if(_0x3d39ce>=_0x41edeb){_0x3d39ce=_0x41edeb;_0x12f142=0xc8;}else{_0x12f142=0xce;}_0x5f3134[_0x439e('0x13')](_0x12f142);return _0x5f3134[_0x439e('0x18')]('Content-Range',_0x3f0d2a+'-'+_0x3d39ce+'/'+_0x41edeb)['json'](_0x3697df);}return null;};}function patchUpdates(_0x4f5b5b){return function(_0x42656a){try{jsonpatch['apply'](_0x42656a,_0x4f5b5b,!![]);}catch(_0x575004){return BPromise[_0x439e('0x19')](_0x575004);}return _0x42656a[_0x439e('0x1a')]();};}function saveUpdates(_0xb79f44,_0x288892){return function(_0x1c6154){if(_0x1c6154){return _0x1c6154['update'](_0xb79f44)[_0x439e('0x1b')](function(_0xe508de){return _0xe508de;});}return null;};}function removeEntity(_0x472372,_0x4bd7e0){return function(_0x7dc4bd){if(_0x7dc4bd){return _0x7dc4bd[_0x439e('0x1c')]()[_0x439e('0x1b')](function(){var _0x32b20e=_0x7dc4bd['get']({'plain':!![]});var _0x47555b='Intervals';return db[_0x439e('0x1d')]['destroy']({'where':{'type':_0x47555b,'resourceId':_0x32b20e['id']}})[_0x439e('0x1b')](function(){return _0x7dc4bd;});})[_0x439e('0x1b')](function(){_0x472372['status'](0xcc)[_0x439e('0x14')]();});}};}function handleEntityNotFound(_0x31007c,_0x1bfc96){return function(_0x54aed5){if(!_0x54aed5){_0x31007c[_0x439e('0x1e')](0x194);}return _0x54aed5;};}function handleError(_0x23ee9c,_0x4034d0){_0x4034d0=_0x4034d0||0x1f4;return function(_0x1b2dca){logger[_0x439e('0x1f')](_0x1b2dca['stack']);if(_0x1b2dca[_0x439e('0x20')]){delete _0x1b2dca[_0x439e('0x20')];}_0x23ee9c['status'](_0x4034d0)[_0x439e('0x21')](_0x1b2dca);};}exports['index']=function(_0xa91d33,_0x56cea4){var _0xe0b9c8={},_0x3227c1={},_0x5ba84a={'count':0x0,'rows':[]};var _0x2e6f57=db[_0x439e('0x22')][_0x439e('0x23')];_0x3227c1[_0x439e('0x24')]=_['keys'](_0x2e6f57);_0x3227c1['query']=_[_0x439e('0x25')](_0xa91d33[_0x439e('0x26')]);_0x3227c1['filters']=_[_0x439e('0x27')](_0x3227c1[_0x439e('0x24')],_0x3227c1[_0x439e('0x26')]);_0xe0b9c8[_0x439e('0x28')]=_[_0x439e('0x27')](_0x3227c1[_0x439e('0x24')],qs[_0x439e('0x29')](_0xa91d33[_0x439e('0x26')][_0x439e('0x29')]));_0xe0b9c8[_0x439e('0x28')]=_0xe0b9c8[_0x439e('0x28')]['length']?_0xe0b9c8[_0x439e('0x28')]:_0x3227c1[_0x439e('0x24')];if(!_0xa91d33[_0x439e('0x26')][_0x439e('0x2a')](_0x439e('0x2b'))){_0xe0b9c8[_0x439e('0x17')]=qs[_0x439e('0x17')](_0xa91d33[_0x439e('0x26')][_0x439e('0x17')]);_0xe0b9c8[_0x439e('0x16')]=qs[_0x439e('0x16')](_0xa91d33[_0x439e('0x26')][_0x439e('0x16')]);}_0xe0b9c8['order']=qs[_0x439e('0x2c')](_0xa91d33[_0x439e('0x26')][_0x439e('0x2c')]);_0xe0b9c8[_0x439e('0x2d')]=qs['filters'](_[_0x439e('0x2e')](_0xa91d33[_0x439e('0x26')],_0x3227c1[_0x439e('0x2f')]));if(_0xa91d33[_0x439e('0x26')]['filter']){_0xe0b9c8[_0x439e('0x2d')]=_['merge'](_0xe0b9c8[_0x439e('0x2d')],{'$or':_[_0x439e('0x30')](_0x2e6f57,function(_0x51c575){if(_0x51c575[_0x439e('0x31')]['key']!==_0x439e('0x32')){var _0x5a04ea={};_0x5a04ea[_0x51c575[_0x439e('0x33')]]={'$like':'%'+_0xa91d33[_0x439e('0x26')]['filter']+'%'};return _0x5a04ea;}})});}_0xe0b9c8=_[_0x439e('0x34')]({},_0xe0b9c8,_0xa91d33[_0x439e('0x35')]);var _0x36423a={'where':_0xe0b9c8[_0x439e('0x2d')]};return db[_0x439e('0x22')][_0x439e('0x15')](_0x36423a)[_0x439e('0x1b')](function(_0x77c5d3){_0x5ba84a[_0x439e('0x15')]=_0x77c5d3;if(_0xa91d33['query'][_0x439e('0x36')]){_0xe0b9c8['include']=[{'all':!![]}];}return db['Interval'][_0x439e('0x37')](_0xe0b9c8);})[_0x439e('0x1b')](function(_0x2d0b31){_0x5ba84a['rows']=_0x2d0b31;return _0x5ba84a;})[_0x439e('0x1b')](respondWithFilteredResult(_0x56cea4,_0xe0b9c8))['catch'](handleError(_0x56cea4,null));};exports[_0x439e('0x38')]=function(_0x1805ad,_0x26f625){var _0x3777b7={'raw':!![],'where':{'id':_0x1805ad[_0x439e('0x39')]['id']}},_0x7bd6ec={};_0x7bd6ec['model']=_[_0x439e('0x25')](db['Interval']['rawAttributes']);_0x7bd6ec['query']=_[_0x439e('0x25')](_0x1805ad[_0x439e('0x26')]);_0x7bd6ec[_0x439e('0x2f')]=_['intersection'](_0x7bd6ec['model'],_0x7bd6ec[_0x439e('0x26')]);_0x3777b7['attributes']=_[_0x439e('0x27')](_0x7bd6ec[_0x439e('0x24')],qs[_0x439e('0x29')](_0x1805ad[_0x439e('0x26')][_0x439e('0x29')]));_0x3777b7[_0x439e('0x28')]=_0x3777b7['attributes']['length']?_0x3777b7[_0x439e('0x28')]:_0x7bd6ec[_0x439e('0x24')];if(_0x1805ad['query'][_0x439e('0x36')]){_0x3777b7[_0x439e('0x3a')]=[{'all':!![]}];}_0x3777b7=_[_0x439e('0x34')]({},_0x3777b7,_0x1805ad[_0x439e('0x35')]);return db[_0x439e('0x22')][_0x439e('0x3b')](_0x3777b7)[_0x439e('0x1b')](handleEntityNotFound(_0x26f625,null))[_0x439e('0x1b')](respondWithResult(_0x26f625,null))['catch'](handleError(_0x26f625,null));};exports[_0x439e('0x3c')]=function(_0x3c0d34,_0x53f18b){return db['Interval']['create'](_0x3c0d34[_0x439e('0x3d')],{})[_0x439e('0x1b')](function(_0x109395){var _0x89d69=_0x3c0d34[_0x439e('0x3e')]['get']({'plain':!![]});if(!_0x89d69)throw new Error(_0x439e('0x3f'));if(_0x89d69[_0x439e('0x40')]===_0x439e('0x3e')){var _0x44dd56=_0x109395['get']({'plain':!![]});var _0x3c1cef=_0x439e('0x41');return db['UserProfileSection'][_0x439e('0x3b')]({'where':{'name':_0x3c1cef,'userProfileId':_0x89d69['userProfileId']},'raw':!![]})[_0x439e('0x1b')](function(_0x3afe47){if(_0x3afe47&&_0x3afe47[_0x439e('0x42')]===0x0){return db[_0x439e('0x1d')]['create']({'name':_0x44dd56[_0x439e('0x20')],'resourceId':_0x44dd56['id'],'type':_0x3afe47[_0x439e('0x20')],'sectionId':_0x3afe47['id']},{})['then'](function(){return _0x109395;});}else{return _0x109395;}})['catch'](function(_0x64db47){logger[_0x439e('0x1f')](_0x439e('0x43'),_0x64db47);throw _0x64db47;});}return _0x109395;})[_0x439e('0x1b')](respondWithResult(_0x53f18b,0xc9))[_0x439e('0x44')](handleError(_0x53f18b,null));};exports['update']=function(_0x4f6abb,_0x2c247e){if(_0x4f6abb['body']['id']){delete _0x4f6abb[_0x439e('0x3d')]['id'];}return db[_0x439e('0x22')][_0x439e('0x3b')]({'where':{'id':_0x4f6abb['params']['id']}})[_0x439e('0x1b')](handleEntityNotFound(_0x2c247e,null))['then'](saveUpdates(_0x4f6abb['body'],null))['then'](respondWithResult(_0x2c247e,null))[_0x439e('0x44')](handleError(_0x2c247e,null));};exports[_0x439e('0x1c')]=function(_0x24c76c,_0x427833){return db['Interval'][_0x439e('0x3b')]({'where':{'id':_0x24c76c[_0x439e('0x39')]['id']}})[_0x439e('0x1b')](handleEntityNotFound(_0x427833,null))[_0x439e('0x1b')](removeEntity(_0x427833,null))[_0x439e('0x44')](handleError(_0x427833,null));};exports[_0x439e('0x45')]=function(_0x1775e2,_0x5875c9,_0x4e6259){if(_0x1775e2['body']['id']){delete _0x1775e2[_0x439e('0x3d')]['id'];}return db[_0x439e('0x22')][_0x439e('0x3b')]({'where':{'id':_0x1775e2[_0x439e('0x39')]['id']}})['then'](handleEntityNotFound(_0x5875c9,null))[_0x439e('0x1b')](function(_0x5b9e89){if(_0x5b9e89){_0x1775e2[_0x439e('0x3d')][_0x439e('0x46')]=_0x5b9e89['id'];return db[_0x439e('0x22')][_0x439e('0x3c')](_0x1775e2[_0x439e('0x3d')]);}})[_0x439e('0x1b')](respondWithResult(_0x5875c9,null))[_0x439e('0x44')](handleError(_0x5875c9,null));};exports['getIntervals']=function(_0x26c470,_0x862f84,_0x1e99e8){var _0x2cdd3d={};var _0x57a163={};var _0x11f902;var _0x1ccb54;return db[_0x439e('0x22')]['findOne']({'where':{'id':_0x26c470[_0x439e('0x39')]['id']}})[_0x439e('0x1b')](handleEntityNotFound(_0x862f84,null))[_0x439e('0x1b')](function(_0x18fe0f){if(_0x18fe0f){_0x11f902=_0x18fe0f;_0x57a163[_0x439e('0x24')]=_[_0x439e('0x25')](db[_0x439e('0x22')][_0x439e('0x23')]);_0x57a163[_0x439e('0x26')]=_[_0x439e('0x25')](_0x26c470['query']);_0x57a163[_0x439e('0x2f')]=_[_0x439e('0x27')](_0x57a163[_0x439e('0x24')],_0x57a163['query']);_0x2cdd3d[_0x439e('0x28')]=_[_0x439e('0x27')](_0x57a163[_0x439e('0x24')],qs[_0x439e('0x29')](_0x26c470[_0x439e('0x26')]['fields']));_0x2cdd3d[_0x439e('0x28')]=_0x2cdd3d[_0x439e('0x28')][_0x439e('0x47')]?_0x2cdd3d[_0x439e('0x28')]:_0x57a163['model'];_0x2cdd3d[_0x439e('0x48')]=qs['sort'](_0x26c470[_0x439e('0x26')][_0x439e('0x2c')]);_0x2cdd3d[_0x439e('0x2d')]=qs['filters'](_[_0x439e('0x2e')](_0x26c470['query'],_0x57a163[_0x439e('0x2f')]));if(_0x26c470[_0x439e('0x26')][_0x439e('0x49')]){_0x2cdd3d[_0x439e('0x2d')]=_[_0x439e('0x34')](_0x2cdd3d[_0x439e('0x2d')],{'$or':_['map'](_0x2cdd3d[_0x439e('0x28')],function(_0x374dc3){var _0x372549={};_0x372549[_0x374dc3]={'$like':'%'+_0x26c470['query']['filter']+'%'};return _0x372549;})});}_0x2cdd3d=_[_0x439e('0x34')]({},_0x2cdd3d,_0x26c470[_0x439e('0x35')]);return _0x11f902[_0x439e('0x4a')](_0x2cdd3d);}})['then'](function(_0x17bdf7){if(_0x17bdf7){_0x1ccb54=_0x17bdf7[_0x439e('0x47')];if(!_0x26c470[_0x439e('0x26')][_0x439e('0x2a')]('nolimit')){_0x2cdd3d['limit']=qs[_0x439e('0x17')](_0x26c470[_0x439e('0x26')][_0x439e('0x17')]);_0x2cdd3d[_0x439e('0x16')]=qs[_0x439e('0x16')](_0x26c470[_0x439e('0x26')][_0x439e('0x16')]);}return _0x11f902[_0x439e('0x4a')](_0x2cdd3d);}})['then'](function(_0x304539){if(_0x304539){return _0x304539?{'count':_0x1ccb54,'rows':_0x304539}:null;}})[_0x439e('0x1b')](respondWithResult(_0x862f84,null))[_0x439e('0x44')](handleError(_0x862f84,null));};exports['addIntervals']=function(_0x1b4310,_0x371ff3,_0x1d15f9){return db[_0x439e('0x22')]['findOne']({'where':{'id':_0x1b4310[_0x439e('0x39')]['id']}})[_0x439e('0x1b')](handleEntityNotFound(_0x371ff3,null))[_0x439e('0x1b')](function(_0x4ec2f4){if(_0x4ec2f4){return db[_0x439e('0x4b')]['transaction'](function(_0x1c8830){return db[_0x439e('0x22')][_0x439e('0x1c')]({'where':{'IntervalId':_0x1b4310[_0x439e('0x39')]['id']},'transaction':_0x1c8830})['then'](function(_0x295fd0){var _0x18b452=_['map'](_0x1b4310[_0x439e('0x3d')],function(_0x2173c6){delete _0x2173c6['id'];_0x2173c6[_0x439e('0x46')]=_0x1b4310['params']['id'];return _0x2173c6;});return db['Interval'][_0x439e('0x4c')](_0x18b452,{'transaction':_0x1c8830});});})['then'](function(){return db[_0x439e('0x22')][_0x439e('0x37')]({'where':{'IntervalId':_0x1b4310[_0x439e('0x39')]['id']}});});}})[_0x439e('0x1b')](respondWithResult(_0x371ff3,null))[_0x439e('0x44')](handleError(_0x371ff3,null));};
\ No newline at end of file
index 395beb9..90d4893 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x053b=['path','rimraf','./interval.attributes','exports','define','Interval','tools_intervals','rewrite','util','../../config/logger','api','moment','bluebird'];(function(_0x2f9d3e,_0x29345f){var _0x32d8e6=function(_0x9f63fc){while(--_0x9f63fc){_0x2f9d3e['push'](_0x2f9d3e['shift']());}};_0x32d8e6(++_0x29345f);}(_0x053b,0x119));var _0xb053=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x053b[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require(_0xb053('0x0'));var logger=require(_0xb053('0x1'))(_0xb053('0x2'));var moment=require(_0xb053('0x3'));var BPromise=require(_0xb053('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xb053('0x5'));var rimraf=require(_0xb053('0x6'));var config=require('../../config/environment');var attributes=require(_0xb053('0x7'));var extensions=require('../../components/extensions/rewrite');module[_0xb053('0x8')]=function(_0x374da4,_0x1c397a){return _0x374da4[_0xb053('0x9')](_0xb053('0xa'),attributes,{'tableName':_0xb053('0xb'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x5a7764,_0x4d8b1d){extensions['rewrite'](_0x374da4,_0x5a7764);},'afterBulkCreate':function(_0x9fc04e,_0x1f77b2,_0x47b6cb){_0x47b6cb();extensions['rewrite'](_0x374da4,_0x9fc04e[0x0]);},'afterUpdate':function(_0x2ce5f3,_0x1fc3c8){extensions[_0xb053('0xc')](_0x374da4,_0x2ce5f3);},'afterDestroy':function(_0x144bd9,_0x1faa58){extensions[_0xb053('0xc')](_0x374da4,_0x144bd9);}}});};
\ No newline at end of file
+var _0x863f=['path','rimraf','../../config/environment','./interval.attributes','../../components/extensions/rewrite','exports','define','Interval','tools_intervals','rewrite','../../config/logger','api','moment','request-promise'];(function(_0x57172c,_0x1df512){var _0x38e8a4=function(_0x1bc9a5){while(--_0x1bc9a5){_0x57172c['push'](_0x57172c['shift']());}};_0x38e8a4(++_0x1df512);}(_0x863f,0x1ca));var _0xf863=function(_0x4a747d,_0x3b747f){_0x4a747d=_0x4a747d-0x0;var _0x3a5b5c=_0x863f[_0x4a747d];return _0x3a5b5c;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xf863('0x0'))(_0xf863('0x1'));var moment=require(_0xf863('0x2'));var BPromise=require('bluebird');var rp=require(_0xf863('0x3'));var fs=require('fs');var path=require(_0xf863('0x4'));var rimraf=require(_0xf863('0x5'));var config=require(_0xf863('0x6'));var attributes=require(_0xf863('0x7'));var extensions=require(_0xf863('0x8'));module[_0xf863('0x9')]=function(_0x514b1f,_0x397b92){return _0x514b1f[_0xf863('0xa')](_0xf863('0xb'),attributes,{'tableName':_0xf863('0xc'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x2e91b6,_0x32db1e){extensions[_0xf863('0xd')](_0x514b1f,_0x2e91b6);},'afterBulkCreate':function(_0x368e15,_0x227d0c,_0x4e8b9a){_0x4e8b9a();extensions[_0xf863('0xd')](_0x514b1f,_0x368e15[0x0]);},'afterUpdate':function(_0x1a50cb,_0x17f609){extensions['rewrite'](_0x514b1f,_0x1a50cb);},'afterDestroy':function(_0x5107c4,_0x229bf2){extensions[_0xf863('0xd')](_0x514b1f,_0x5107c4);}}});};
\ No newline at end of file
index 23db585..c56f6e2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1b20=['rpc','../../config/environment','jayson/promise','client','http','then','info','Interval,\x20%s,\x20%s','request\x20sent','debug','Interval,\x20%s,\x20%s,\x20%s','error','code','message','result','GetInterval','Interval','findAll','options','where','attributes','limit','include','map','model','catch','ShowInterval','find','raw','stringify','util','moment','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x2c713d,_0x1ef2e8){var _0x18f5da=function(_0x501fe4){while(--_0x501fe4){_0x2c713d['push'](_0x2c713d['shift']());}};_0x18f5da(++_0x1ef2e8);}(_0x1b20,0x66));var _0x01b2=function(_0x502c7d,_0x2f1285){_0x502c7d=_0x502c7d-0x0;var _0x30b7ed=_0x1b20[_0x502c7d];return _0x30b7ed;};'use strict';var _=require('lodash');var util=require(_0x01b2('0x0'));var moment=require(_0x01b2('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x01b2('0x2'));var db=require(_0x01b2('0x3'))['db'];var utils=require(_0x01b2('0x4'));var logger=require(_0x01b2('0x5'))(_0x01b2('0x6'));var config=require(_0x01b2('0x7'));var jayson=require(_0x01b2('0x8'));var client=jayson[_0x01b2('0x9')][_0x01b2('0xa')]({'port':0x232a});function respondWithRpcPromise(_0xa64ad1,_0x43d561,_0x323470){return new BPromise(function(_0x508add,_0x132a08){return client['request'](_0xa64ad1,_0x323470)[_0x01b2('0xb')](function(_0x157fb6){logger[_0x01b2('0xc')](_0x01b2('0xd'),_0x43d561,_0x01b2('0xe'));logger[_0x01b2('0xf')](_0x01b2('0x10'),_0x43d561,_0x01b2('0xe'),JSON['stringify'](_0x157fb6));if(_0x157fb6[_0x01b2('0x11')]){if(_0x157fb6['error'][_0x01b2('0x12')]===0x1f4){logger['error'](_0x01b2('0xd'),_0x43d561,_0x157fb6[_0x01b2('0x11')][_0x01b2('0x13')]);return _0x132a08(_0x157fb6[_0x01b2('0x11')]['message']);}logger[_0x01b2('0x11')](_0x01b2('0xd'),_0x43d561,_0x157fb6[_0x01b2('0x11')][_0x01b2('0x13')]);return _0x508add(_0x157fb6[_0x01b2('0x11')]['message']);}else{logger[_0x01b2('0xc')](_0x01b2('0xd'),_0x43d561,_0x01b2('0xe'));_0x508add(_0x157fb6[_0x01b2('0x14')]['message']);}})['catch'](function(_0x2a8458){logger[_0x01b2('0x11')]('Interval,\x20%s,\x20%s',_0x43d561,_0x2a8458);_0x132a08(_0x2a8458);});});}exports[_0x01b2('0x15')]=function(_0x444236){var _0x27a0bc=this;return new Promise(function(_0x5986f5,_0x25c55f){return db[_0x01b2('0x16')][_0x01b2('0x17')]({'raw':_0x444236[_0x01b2('0x18')]?_0x444236[_0x01b2('0x18')]['raw']===undefined?!![]:![]:!![],'where':_0x444236[_0x01b2('0x18')]?_0x444236['options'][_0x01b2('0x19')]||null:null,'attributes':_0x444236['options']?_0x444236[_0x01b2('0x18')][_0x01b2('0x1a')]||null:null,'limit':_0x444236[_0x01b2('0x18')]?_0x444236['options'][_0x01b2('0x1b')]||null:null,'include':_0x444236[_0x01b2('0x18')]?_0x444236[_0x01b2('0x18')][_0x01b2('0x1c')]?_[_0x01b2('0x1d')](_0x444236['options'][_0x01b2('0x1c')],function(_0x539db1){return{'model':db[_0x539db1['model']],'as':_0x539db1['as'],'attributes':_0x539db1[_0x01b2('0x1a')],'include':_0x539db1[_0x01b2('0x1c')]?_[_0x01b2('0x1d')](_0x539db1[_0x01b2('0x1c')],function(_0x2e32c1){return{'model':db[_0x2e32c1[_0x01b2('0x1e')]],'as':_0x2e32c1['as'],'attributes':_0x2e32c1['attributes'],'include':_0x2e32c1[_0x01b2('0x1c')]?_[_0x01b2('0x1d')](_0x2e32c1[_0x01b2('0x1c')],function(_0x17274f){return{'model':db[_0x17274f['model']],'as':_0x17274f['as'],'attributes':_0x17274f[_0x01b2('0x1a')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x122925){logger[_0x01b2('0xc')]('GetInterval',_0x444236);logger[_0x01b2('0xf')]('GetInterval',_0x444236,JSON['stringify'](_0x122925));_0x5986f5(_0x122925);})[_0x01b2('0x1f')](function(_0x4363ec){logger['error'](_0x01b2('0x15'),_0x4363ec[_0x01b2('0x13')],_0x444236);_0x25c55f(_0x27a0bc[_0x01b2('0x11')](0x1f4,_0x4363ec[_0x01b2('0x13')]));});});};exports[_0x01b2('0x20')]=function(_0xd7ad6b){var _0xd60b46=this;return new Promise(function(_0x3169f5,_0x27eeb3){return db[_0x01b2('0x16')][_0x01b2('0x21')]({'raw':_0xd7ad6b['options']?_0xd7ad6b[_0x01b2('0x18')][_0x01b2('0x22')]===undefined?!![]:![]:!![],'where':_0xd7ad6b[_0x01b2('0x18')]?_0xd7ad6b[_0x01b2('0x18')][_0x01b2('0x19')]||null:null,'attributes':_0xd7ad6b[_0x01b2('0x18')]?_0xd7ad6b['options']['attributes']||null:null,'include':_0xd7ad6b[_0x01b2('0x18')]?_0xd7ad6b['options']['include']?_[_0x01b2('0x1d')](_0xd7ad6b[_0x01b2('0x18')][_0x01b2('0x1c')],function(_0x3b1307){return{'model':db[_0x3b1307['model']],'as':_0x3b1307['as'],'attributes':_0x3b1307[_0x01b2('0x1a')],'include':_0x3b1307['include']?_[_0x01b2('0x1d')](_0x3b1307['include'],function(_0x5af6ff){return{'model':db[_0x5af6ff['model']],'as':_0x5af6ff['as'],'attributes':_0x5af6ff[_0x01b2('0x1a')],'include':_0x5af6ff[_0x01b2('0x1c')]?_[_0x01b2('0x1d')](_0x5af6ff[_0x01b2('0x1c')],function(_0x4d80d0){return{'model':db[_0x4d80d0[_0x01b2('0x1e')]],'as':_0x4d80d0['as'],'attributes':_0x4d80d0[_0x01b2('0x1a')]};}):[]};}):[]};}):[]:[]})['then'](function(_0xecbce4){logger[_0x01b2('0xc')](_0x01b2('0x20'),_0xd7ad6b);logger[_0x01b2('0xf')](_0x01b2('0x20'),_0xd7ad6b,JSON[_0x01b2('0x23')](_0xecbce4));_0x3169f5(_0xecbce4);})['catch'](function(_0x2fb530){logger[_0x01b2('0x11')]('ShowInterval',_0x2fb530['message'],_0xd7ad6b);_0x27eeb3(_0xd60b46[_0x01b2('0x11')](0x1f4,_0x2fb530[_0x01b2('0x13')]));});});};
\ No newline at end of file
+var _0x04de=['Interval','findAll','options','raw','where','attributes','include','model','ShowInterval','find','map','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','request','then','info','request\x20sent','debug','Interval,\x20%s,\x20%s,\x20%s','stringify','error','code','message','Interval,\x20%s,\x20%s','result','catch','GetInterval'];(function(_0x659560,_0x34805a){var _0x27f83e=function(_0x5b280d){while(--_0x5b280d){_0x659560['push'](_0x659560['shift']());}};_0x27f83e(++_0x34805a);}(_0x04de,0x107));var _0xe04d=function(_0x9f95dd,_0x7aeacc){_0x9f95dd=_0x9f95dd-0x0;var _0x29a974=_0x04de[_0x9f95dd];return _0x29a974;};'use strict';var _=require(_0xe04d('0x0'));var util=require(_0xe04d('0x1'));var moment=require(_0xe04d('0x2'));var BPromise=require(_0xe04d('0x3'));var rs=require(_0xe04d('0x4'));var fs=require('fs');var Redis=require(_0xe04d('0x5'));var db=require(_0xe04d('0x6'))['db'];var utils=require(_0xe04d('0x7'));var logger=require(_0xe04d('0x8'))(_0xe04d('0x9'));var config=require(_0xe04d('0xa'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x531688,_0x55efb5,_0x210e93){return new BPromise(function(_0x72b1ce,_0x1be121){return client[_0xe04d('0xb')](_0x531688,_0x210e93)[_0xe04d('0xc')](function(_0x2ae3c9){logger[_0xe04d('0xd')]('Interval,\x20%s,\x20%s',_0x55efb5,_0xe04d('0xe'));logger[_0xe04d('0xf')](_0xe04d('0x10'),_0x55efb5,_0xe04d('0xe'),JSON[_0xe04d('0x11')](_0x2ae3c9));if(_0x2ae3c9[_0xe04d('0x12')]){if(_0x2ae3c9[_0xe04d('0x12')][_0xe04d('0x13')]===0x1f4){logger[_0xe04d('0x12')]('Interval,\x20%s,\x20%s',_0x55efb5,_0x2ae3c9[_0xe04d('0x12')][_0xe04d('0x14')]);return _0x1be121(_0x2ae3c9[_0xe04d('0x12')][_0xe04d('0x14')]);}logger[_0xe04d('0x12')](_0xe04d('0x15'),_0x55efb5,_0x2ae3c9[_0xe04d('0x12')][_0xe04d('0x14')]);return _0x72b1ce(_0x2ae3c9[_0xe04d('0x12')][_0xe04d('0x14')]);}else{logger[_0xe04d('0xd')](_0xe04d('0x15'),_0x55efb5,'request\x20sent');_0x72b1ce(_0x2ae3c9[_0xe04d('0x16')]['message']);}})[_0xe04d('0x17')](function(_0x49c063){logger[_0xe04d('0x12')](_0xe04d('0x15'),_0x55efb5,_0x49c063);_0x1be121(_0x49c063);});});}exports[_0xe04d('0x18')]=function(_0x93b107){var _0x4090e0=this;return new Promise(function(_0x35a2b4,_0x251772){return db[_0xe04d('0x19')][_0xe04d('0x1a')]({'raw':_0x93b107['options']?_0x93b107[_0xe04d('0x1b')][_0xe04d('0x1c')]===undefined?!![]:![]:!![],'where':_0x93b107[_0xe04d('0x1b')]?_0x93b107[_0xe04d('0x1b')][_0xe04d('0x1d')]||null:null,'attributes':_0x93b107[_0xe04d('0x1b')]?_0x93b107['options'][_0xe04d('0x1e')]||null:null,'limit':_0x93b107[_0xe04d('0x1b')]?_0x93b107['options']['limit']||null:null,'include':_0x93b107['options']?_0x93b107[_0xe04d('0x1b')]['include']?_['map'](_0x93b107[_0xe04d('0x1b')][_0xe04d('0x1f')],function(_0x495f73){return{'model':db[_0x495f73[_0xe04d('0x20')]],'as':_0x495f73['as'],'attributes':_0x495f73['attributes'],'include':_0x495f73[_0xe04d('0x1f')]?_['map'](_0x495f73[_0xe04d('0x1f')],function(_0x456822){return{'model':db[_0x456822[_0xe04d('0x20')]],'as':_0x456822['as'],'attributes':_0x456822[_0xe04d('0x1e')],'include':_0x456822[_0xe04d('0x1f')]?_['map'](_0x456822[_0xe04d('0x1f')],function(_0x3e43ca){return{'model':db[_0x3e43ca[_0xe04d('0x20')]],'as':_0x3e43ca['as'],'attributes':_0x3e43ca[_0xe04d('0x1e')]};}):[]};}):[]};}):[]:[]})['then'](function(_0xc73068){logger[_0xe04d('0xd')](_0xe04d('0x18'),_0x93b107);logger['debug'](_0xe04d('0x18'),_0x93b107,JSON['stringify'](_0xc73068));_0x35a2b4(_0xc73068);})['catch'](function(_0x569e4b){logger[_0xe04d('0x12')](_0xe04d('0x18'),_0x569e4b['message'],_0x93b107);_0x251772(_0x4090e0['error'](0x1f4,_0x569e4b[_0xe04d('0x14')]));});});};exports[_0xe04d('0x21')]=function(_0xff4dfb){var _0x4a2a10=this;return new Promise(function(_0x2cf005,_0x370cea){return db['Interval'][_0xe04d('0x22')]({'raw':_0xff4dfb['options']?_0xff4dfb[_0xe04d('0x1b')][_0xe04d('0x1c')]===undefined?!![]:![]:!![],'where':_0xff4dfb['options']?_0xff4dfb[_0xe04d('0x1b')]['where']||null:null,'attributes':_0xff4dfb[_0xe04d('0x1b')]?_0xff4dfb[_0xe04d('0x1b')][_0xe04d('0x1e')]||null:null,'include':_0xff4dfb[_0xe04d('0x1b')]?_0xff4dfb[_0xe04d('0x1b')][_0xe04d('0x1f')]?_[_0xe04d('0x23')](_0xff4dfb['options'][_0xe04d('0x1f')],function(_0x152837){return{'model':db[_0x152837[_0xe04d('0x20')]],'as':_0x152837['as'],'attributes':_0x152837[_0xe04d('0x1e')],'include':_0x152837[_0xe04d('0x1f')]?_[_0xe04d('0x23')](_0x152837[_0xe04d('0x1f')],function(_0x10b44f){return{'model':db[_0x10b44f[_0xe04d('0x20')]],'as':_0x10b44f['as'],'attributes':_0x10b44f['attributes'],'include':_0x10b44f[_0xe04d('0x1f')]?_['map'](_0x10b44f[_0xe04d('0x1f')],function(_0x547f56){return{'model':db[_0x547f56['model']],'as':_0x547f56['as'],'attributes':_0x547f56[_0xe04d('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xe04d('0xc')](function(_0x261116){logger[_0xe04d('0xd')]('ShowInterval',_0xff4dfb);logger[_0xe04d('0xf')](_0xe04d('0x21'),_0xff4dfb,JSON[_0xe04d('0x11')](_0x261116));_0x2cf005(_0x261116);})[_0xe04d('0x17')](function(_0x322228){logger['error']('ShowInterval',_0x322228[_0xe04d('0x14')],_0xff4dfb);_0x370cea(_0x4a2a10['error'](0x1f4,_0x322228['message']));});});};
\ No newline at end of file
index 88a991e..0601673 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f2f=['isAuthenticated','send','exports','express','Router','../../components/auth/service','./jira.controller','post'];(function(_0xf6aed6,_0x48a505){var _0x4834b7=function(_0xefaed7){while(--_0xefaed7){_0xf6aed6['push'](_0xf6aed6['shift']());}};_0x4834b7(++_0x48a505);}(_0x5f2f,0x73));var _0xf5f2=function(_0x5a5e94,_0x3bd9f3){_0x5a5e94=_0x5a5e94-0x0;var _0x98c0d=_0x5f2f[_0x5a5e94];return _0x98c0d;};'use strict';var express=require(_0xf5f2('0x0'));var router=express[_0xf5f2('0x1')]();var auth=require(_0xf5f2('0x2'));var controller=require(_0xf5f2('0x3'));router[_0xf5f2('0x4')]('/',auth[_0xf5f2('0x5')](),controller[_0xf5f2('0x6')]);module[_0xf5f2('0x7')]=router;
\ No newline at end of file
+var _0x5f2f=['isAuthenticated','send','exports','express','Router','../../components/auth/service','./jira.controller','post'];(function(_0x15a3ad,_0x1a1ee2){var _0x2d7283=function(_0x2ba6af){while(--_0x2ba6af){_0x15a3ad['push'](_0x15a3ad['shift']());}};_0x2d7283(++_0x1a1ee2);}(_0x5f2f,0x73));var _0xf5f2=function(_0x3b936a,_0x1961be){_0x3b936a=_0x3b936a-0x0;var _0x594d1e=_0x5f2f[_0x3b936a];return _0x594d1e;};'use strict';var express=require(_0xf5f2('0x0'));var router=express[_0xf5f2('0x1')]();var auth=require(_0xf5f2('0x2'));var controller=require(_0xf5f2('0x3'));router[_0xf5f2('0x4')]('/',auth[_0xf5f2('0x5')](),controller[_0xf5f2('0x6')]);module[_0xf5f2('0x7')]=router;
\ No newline at end of file
index 670e218..5e7f38c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcb91=['summary','\x20from\x20','description','issuetype','Bug','customfield_11500','customfield_11501','oldToken','fields','customfield_11502','newToken','customfield_11503','name','customfield_11504','reason','track.xcallymotion.com','/rest/api/2/issue','POST','application/json','toString','base64','stringify','setEncoding','utf8','data','end','status','parse','error','json','Error\x20during\x20license\x20request.\x20Please\x20contact\x20our\x20license\x20team\x20at\x20license@xcally.com\x20with\x20your\x20request','api.jira','openIssue','x-forwarded-for','connection','remoteAddress','socket','body','../../config/logger','api','support','3eAmWpBVP0','MOTGUI'];(function(_0x28d391,_0x1357b3){var _0x3c8bf0=function(_0x55bac9){while(--_0x55bac9){_0x28d391['push'](_0x28d391['shift']());}};_0x3c8bf0(++_0x1357b3);}(_0xcb91,0x1a9));var _0x1cb9=function(_0x245afe,_0x319cde){_0x245afe=_0x245afe-0x0;var _0x4eefde=_0xcb91[_0x245afe];return _0x4eefde;};'use strict';var BPromise=require('bluebird');var https=require('https');var logger=require(_0x1cb9('0x0'))(_0x1cb9('0x1'));var USERNAME=_0x1cb9('0x2');var PASSWORD=_0x1cb9('0x3');function openIssue(_0x4c37e8,_0x8c392f){var _0x2c17b8={'fields':{'project':{'key':_0x4c37e8['key']||_0x1cb9('0x4')},'summary':(_0x4c37e8[_0x1cb9('0x5')]||'Report')+_0x1cb9('0x6')+_0x4c37e8['ip'],'description':_0x4c37e8[_0x1cb9('0x7')]||JSON['stringify'](_0x4c37e8),'issuetype':{'name':_0x4c37e8[_0x1cb9('0x8')]||_0x1cb9('0x9')}}};_0x2c17b8['fields'][_0x1cb9('0xa')]=_0x4c37e8['email'];_0x2c17b8['fields'][_0x1cb9('0xb')]=_0x4c37e8[_0x1cb9('0xc')];_0x2c17b8[_0x1cb9('0xd')][_0x1cb9('0xe')]=_0x4c37e8[_0x1cb9('0xf')];_0x2c17b8['fields'][_0x1cb9('0x10')]=_0x4c37e8[_0x1cb9('0x11')];_0x2c17b8[_0x1cb9('0xd')][_0x1cb9('0x12')]=_0x4c37e8[_0x1cb9('0x13')];_0x2c17b8['fields']['customfield_10102']=_0x4c37e8['ip'];var _0x59dec3={'host':_0x1cb9('0x14'),'port':0x1bb,'path':_0x1cb9('0x15'),'method':_0x1cb9('0x16'),'timeout':0x4e20,'headers':{'Content-Type':_0x1cb9('0x17'),'Authorization':'Basic\x20'+new Buffer(USERNAME+':'+PASSWORD)[_0x1cb9('0x18')](_0x1cb9('0x19'))}};var _0x1b3cd7=JSON[_0x1cb9('0x1a')](_0x2c17b8);var _0x3e2d11=https['request'](_0x59dec3,function(_0x5572cb){_0x5572cb[_0x1cb9('0x1b')](_0x1cb9('0x1c'));var _0x3904b7='';_0x5572cb['on'](_0x1cb9('0x1d'),function(_0x3e21e0){_0x3904b7+=_0x3e21e0;});_0x5572cb['on'](_0x1cb9('0x1e'),function(){if(_0x8c392f){return _0x8c392f[_0x1cb9('0x1f')](_0x5572cb['statusCode'])['json'](JSON[_0x1cb9('0x20')](_0x3904b7));}});});_0x3e2d11['on'](_0x1cb9('0x21'),function(_0x2b2669){if(_0x8c392f){return _0x8c392f[_0x1cb9('0x1f')](0x1f4)[_0x1cb9('0x22')]({'errors':[{'message':_0x1cb9('0x23'),'type':_0x1cb9('0x24')}]});}});_0x3e2d11['write'](_0x1b3cd7);_0x3e2d11['end']();}exports[_0x1cb9('0x25')]=openIssue;exports['send']=function(_0x4750b1,_0x2265ea){_0x4750b1['body']['ip']=_0x4750b1['headers'][_0x1cb9('0x26')]||_0x4750b1[_0x1cb9('0x27')][_0x1cb9('0x28')]||_0x4750b1[_0x1cb9('0x29')][_0x1cb9('0x28')]||_0x4750b1[_0x1cb9('0x27')]['socket']['remoteAddress'];return openIssue(_0x4750b1[_0x1cb9('0x2a')],_0x2265ea);};
\ No newline at end of file
+var _0xbaf0=['description','stringify','issuetype','fields','email','customfield_11501','oldToken','customfield_11502','newToken','customfield_11503','name','customfield_10102','track.xcallymotion.com','POST','Basic\x20','toString','base64','setEncoding','utf8','data','end','statusCode','json','parse','error','status','api.jira','write','openIssue','send','body','headers','x-forwarded-for','remoteAddress','https','../../config/logger','api','support','3eAmWpBVP0','key','MOTGUI','summary','Report','\x20from\x20'];(function(_0x30ed4c,_0x236b8d){var _0x12bce2=function(_0x2d8574){while(--_0x2d8574){_0x30ed4c['push'](_0x30ed4c['shift']());}};_0x12bce2(++_0x236b8d);}(_0xbaf0,0x12a));var _0x0baf=function(_0x2f5ac5,_0x1ee939){_0x2f5ac5=_0x2f5ac5-0x0;var _0x37c9a8=_0xbaf0[_0x2f5ac5];return _0x37c9a8;};'use strict';var BPromise=require('bluebird');var https=require(_0x0baf('0x0'));var logger=require(_0x0baf('0x1'))(_0x0baf('0x2'));var USERNAME=_0x0baf('0x3');var PASSWORD=_0x0baf('0x4');function openIssue(_0x4d2e72,_0x5a3e42){var _0x232cc7={'fields':{'project':{'key':_0x4d2e72[_0x0baf('0x5')]||_0x0baf('0x6')},'summary':(_0x4d2e72[_0x0baf('0x7')]||_0x0baf('0x8'))+_0x0baf('0x9')+_0x4d2e72['ip'],'description':_0x4d2e72[_0x0baf('0xa')]||JSON[_0x0baf('0xb')](_0x4d2e72),'issuetype':{'name':_0x4d2e72[_0x0baf('0xc')]||'Bug'}}};_0x232cc7[_0x0baf('0xd')]['customfield_11500']=_0x4d2e72[_0x0baf('0xe')];_0x232cc7[_0x0baf('0xd')][_0x0baf('0xf')]=_0x4d2e72[_0x0baf('0x10')];_0x232cc7[_0x0baf('0xd')][_0x0baf('0x11')]=_0x4d2e72[_0x0baf('0x12')];_0x232cc7[_0x0baf('0xd')][_0x0baf('0x13')]=_0x4d2e72[_0x0baf('0x14')];_0x232cc7[_0x0baf('0xd')]['customfield_11504']=_0x4d2e72['reason'];_0x232cc7[_0x0baf('0xd')][_0x0baf('0x15')]=_0x4d2e72['ip'];var _0x5db689={'host':_0x0baf('0x16'),'port':0x1bb,'path':'/rest/api/2/issue','method':_0x0baf('0x17'),'timeout':0x4e20,'headers':{'Content-Type':'application/json','Authorization':_0x0baf('0x18')+new Buffer(USERNAME+':'+PASSWORD)[_0x0baf('0x19')](_0x0baf('0x1a'))}};var _0x2bc381=JSON[_0x0baf('0xb')](_0x232cc7);var _0x469599=https['request'](_0x5db689,function(_0x4cd79d){_0x4cd79d[_0x0baf('0x1b')](_0x0baf('0x1c'));var _0x283408='';_0x4cd79d['on'](_0x0baf('0x1d'),function(_0x2cf7da){_0x283408+=_0x2cf7da;});_0x4cd79d['on'](_0x0baf('0x1e'),function(){if(_0x5a3e42){return _0x5a3e42['status'](_0x4cd79d[_0x0baf('0x1f')])[_0x0baf('0x20')](JSON[_0x0baf('0x21')](_0x283408));}});});_0x469599['on'](_0x0baf('0x22'),function(_0x47070d){if(_0x5a3e42){return _0x5a3e42[_0x0baf('0x23')](0x1f4)['json']({'errors':[{'message':'Error\x20during\x20license\x20request.\x20Please\x20contact\x20our\x20license\x20team\x20at\x20license@xcally.com\x20with\x20your\x20request','type':_0x0baf('0x24')}]});}});_0x469599[_0x0baf('0x25')](_0x2bc381);_0x469599[_0x0baf('0x1e')]();}exports[_0x0baf('0x26')]=openIssue;exports[_0x0baf('0x27')]=function(_0x3e3e20,_0x210cd8){_0x3e3e20[_0x0baf('0x28')]['ip']=_0x3e3e20[_0x0baf('0x29')][_0x0baf('0x2a')]||_0x3e3e20['connection'][_0x0baf('0x2b')]||_0x3e3e20['socket'][_0x0baf('0x2b')]||_0x3e3e20['connection']['socket'][_0x0baf('0x2b')];return openIssue(_0x3e3e20['body'],_0x210cd8);};
\ No newline at end of file
index 79fbbdd..4711026 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe67a=['../../config/environment','./jscriptyAnswerReport.controller','get','index','/describe','isAuthenticated','describe','show','post','create','/:id','update','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service'];(function(_0x1f29e8,_0x320b53){var _0x5b4338=function(_0x42b362){while(--_0x42b362){_0x1f29e8['push'](_0x1f29e8['shift']());}};_0x5b4338(++_0x320b53);}(_0xe67a,0x18a));var _0xae67=function(_0x2c106b,_0x54574e){_0x2c106b=_0x2c106b-0x0;var _0x332262=_0xe67a[_0x2c106b];return _0x332262;};'use strict';var multer=require(_0xae67('0x0'));var util=require(_0xae67('0x1'));var path=require(_0xae67('0x2'));var timeout=require(_0xae67('0x3'));var express=require('express');var router=express[_0xae67('0x4')]();var auth=require(_0xae67('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xae67('0x6'));var controller=require(_0xae67('0x7'));router[_0xae67('0x8')]('/',auth['isAuthenticated'](),controller[_0xae67('0x9')]);router[_0xae67('0x8')](_0xae67('0xa'),auth[_0xae67('0xb')](),controller[_0xae67('0xc')]);router['get']('/:id',auth[_0xae67('0xb')](),controller[_0xae67('0xd')]);router[_0xae67('0xe')]('/',auth['isAuthenticated'](),controller[_0xae67('0xf')]);router['put'](_0xae67('0x10'),auth[_0xae67('0xb')](),controller[_0xae67('0x11')]);router['delete'](_0xae67('0x10'),auth[_0xae67('0xb')](),controller[_0xae67('0x12')]);module[_0xae67('0x13')]=router;
\ No newline at end of file
+var _0x6355=['isAuthenticated','index','/describe','describe','/:id','show','post','create','put','update','destroy','exports','multer','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','get'];(function(_0x1415ef,_0x5c219e){var _0x234acc=function(_0x2dbfca){while(--_0x2dbfca){_0x1415ef['push'](_0x1415ef['shift']());}};_0x234acc(++_0x5c219e);}(_0x6355,0x1ae));var _0x5635=function(_0x542c88,_0x5d6405){_0x542c88=_0x542c88-0x0;var _0x141def=_0x6355[_0x542c88];return _0x141def;};'use strict';var multer=require(_0x5635('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x5635('0x1'));var express=require(_0x5635('0x2'));var router=express[_0x5635('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x5635('0x4'));var config=require(_0x5635('0x5'));var controller=require('./jscriptyAnswerReport.controller');router[_0x5635('0x6')]('/',auth[_0x5635('0x7')](),controller[_0x5635('0x8')]);router['get'](_0x5635('0x9'),auth['isAuthenticated'](),controller[_0x5635('0xa')]);router[_0x5635('0x6')](_0x5635('0xb'),auth[_0x5635('0x7')](),controller[_0x5635('0xc')]);router[_0x5635('0xd')]('/',auth[_0x5635('0x7')](),controller[_0x5635('0xe')]);router[_0x5635('0xf')](_0x5635('0xb'),auth['isAuthenticated'](),controller[_0x5635('0x10')]);router['delete'](_0x5635('0xb'),auth[_0x5635('0x7')](),controller[_0x5635('0x11')]);module[_0x5635('0x12')]=router;
\ No newline at end of file
index 5c60149..06da2e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x342e=['sequelize','exports','STRING'];(function(_0x2880d8,_0x284ded){var _0x51f5a9=function(_0xafd747){while(--_0xafd747){_0x2880d8['push'](_0x2880d8['shift']());}};_0x51f5a9(++_0x284ded);}(_0x342e,0xde));var _0xe342=function(_0x33c603,_0x6d0ce4){_0x33c603=_0x33c603-0x0;var _0xae96f4=_0x342e[_0x33c603];return _0xae96f4;};'use strict';var Sequelize=require(_0xe342('0x0'));module[_0xe342('0x1')]={'question':{'type':Sequelize[_0xe342('0x2')]},'answer':{'type':Sequelize['TEXT']('long')},'membername':{'type':Sequelize[_0xe342('0x2')]},'projectname':{'type':Sequelize[_0xe342('0x2')]},'queue':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0xe342('0x2')]},'calleridnum':{'type':Sequelize[_0xe342('0x2')]},'questionId':{'type':Sequelize[_0xe342('0x2')]}};
\ No newline at end of file
+var _0xc718=['STRING','TEXT','sequelize'];(function(_0x160248,_0x2a57e6){var _0x4e589d=function(_0x1ba722){while(--_0x1ba722){_0x160248['push'](_0x160248['shift']());}};_0x4e589d(++_0x2a57e6);}(_0xc718,0xb6));var _0x8c71=function(_0x58a663,_0x1fc9bd){_0x58a663=_0x58a663-0x0;var _0x2a8b7c=_0xc718[_0x58a663];return _0x2a8b7c;};'use strict';var Sequelize=require(_0x8c71('0x0'));module['exports']={'question':{'type':Sequelize[_0x8c71('0x1')]},'answer':{'type':Sequelize[_0x8c71('0x2')]('long')},'membername':{'type':Sequelize[_0x8c71('0x1')]},'projectname':{'type':Sequelize[_0x8c71('0x1')]},'queue':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x8c71('0x1')]},'calleridnum':{'type':Sequelize['STRING']},'questionId':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 721b182..75f3565 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x946f=['papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','json','offset','set','Content-Range','apply','save','update','destroy','then','end','sendStatus','error','stack','name','index','JscriptyAnswerReport','rawAttributes','model','query','keys','filters','intersection','attributes','fields','limit','order','sort','where','pick','filter','merge','map','type','VIRTUAL','field','count','includeAll','include','findAll','rows','catch','show','params','find','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','lodash','squel','jsforce','querystring'];(function(_0x56916d,_0x37b935){var _0x2b7f1f=function(_0x206eb1){while(--_0x206eb1){_0x56916d['push'](_0x56916d['shift']());}};_0x2b7f1f(++_0x37b935);}(_0x946f,0x111));var _0xf946=function(_0x209156,_0x54ca14){_0x209156=_0x209156-0x0;var _0x2fddc6=_0x946f[_0x209156];return _0x2fddc6;};'use strict';var pdf=require(_0xf946('0x0'));var emlformat=require(_0xf946('0x1'));var rimraf=require(_0xf946('0x2'));var zipdir=require(_0xf946('0x3'));var jsonpatch=require(_0xf946('0x4'));var rp=require(_0xf946('0x5'));var moment=require(_0xf946('0x6'));var BPromise=require(_0xf946('0x7'));var Mustache=require(_0xf946('0x8'));var util=require(_0xf946('0x9'));var path=require('path');var sox=require(_0xf946('0xa'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xf946('0xb'));var squel=require(_0xf946('0xc'));var crypto=require('crypto');var jsforce=require(_0xf946('0xd'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xf946('0xe'));var Papa=require(_0xf946('0xf'));var Redis=require(_0xf946('0x10'));var authService=require(_0xf946('0x11'));var qs=require(_0xf946('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xf946('0x13'))(_0xf946('0x14'));var utils=require(_0xf946('0x15'));var config=require(_0xf946('0x16'));var db=require(_0xf946('0x17'))['db'];function respondWithStatusCode(_0x304cb5,_0x23d242){_0x23d242=_0x23d242||0xcc;return function(_0x3169e8){if(_0x3169e8){return _0x304cb5['sendStatus'](_0x23d242);}return _0x304cb5[_0xf946('0x18')](_0x23d242)['end']();};}function respondWithResult(_0x51ff4a,_0x29aebb){_0x29aebb=_0x29aebb||0xc8;return function(_0x116636){if(_0x116636){return _0x51ff4a['status'](_0x29aebb)[_0xf946('0x19')](_0x116636);}};}function respondWithFilteredResult(_0x23153c,_0x1df830){return function(_0x55e622){if(_0x55e622){var _0x4ef7bd=_0x55e622['count'],_0x2e3d06=_0x1df830[_0xf946('0x1a')],_0x3ad666=_0x1df830[_0xf946('0x1a')]+_0x1df830['limit'],_0x2f2668;if(_0x3ad666>=_0x4ef7bd){_0x3ad666=_0x4ef7bd;_0x2f2668=0xc8;}else{_0x2f2668=0xce;}_0x23153c[_0xf946('0x18')](_0x2f2668);return _0x23153c[_0xf946('0x1b')](_0xf946('0x1c'),_0x2e3d06+'-'+_0x3ad666+'/'+_0x4ef7bd)['json'](_0x55e622);}return null;};}function patchUpdates(_0x29e74e){return function(_0x4cdfeb){try{jsonpatch[_0xf946('0x1d')](_0x4cdfeb,_0x29e74e,!![]);}catch(_0x58703c){return BPromise['reject'](_0x58703c);}return _0x4cdfeb[_0xf946('0x1e')]();};}function saveUpdates(_0x1763d4,_0x453146){return function(_0x47e271){if(_0x47e271){return _0x47e271[_0xf946('0x1f')](_0x1763d4)['then'](function(_0x2b0bab){return _0x2b0bab;});}return null;};}function removeEntity(_0x46ebc6,_0x4dd2e0){return function(_0x5baa0a){if(_0x5baa0a){return _0x5baa0a[_0xf946('0x20')]()[_0xf946('0x21')](function(){_0x46ebc6['status'](0xcc)[_0xf946('0x22')]();});}};}function handleEntityNotFound(_0x4ee552,_0x180693){return function(_0x3ce3dc){if(!_0x3ce3dc){_0x4ee552[_0xf946('0x23')](0x194);}return _0x3ce3dc;};}function handleError(_0xa1269d,_0x87f3c){_0x87f3c=_0x87f3c||0x1f4;return function(_0xe9f76d){logger[_0xf946('0x24')](_0xe9f76d[_0xf946('0x25')]);if(_0xe9f76d[_0xf946('0x26')]){delete _0xe9f76d[_0xf946('0x26')];}_0xa1269d[_0xf946('0x18')](_0x87f3c)['send'](_0xe9f76d);};}exports[_0xf946('0x27')]=function(_0x16e9ba,_0x19b9c4){var _0x5b4325={},_0x14f107={},_0x26810b={'count':0x0,'rows':[]};var _0x468593=db[_0xf946('0x28')][_0xf946('0x29')];_0x14f107[_0xf946('0x2a')]=_['keys'](_0x468593);_0x14f107[_0xf946('0x2b')]=_[_0xf946('0x2c')](_0x16e9ba[_0xf946('0x2b')]);_0x14f107[_0xf946('0x2d')]=_[_0xf946('0x2e')](_0x14f107['model'],_0x14f107['query']);_0x5b4325[_0xf946('0x2f')]=_[_0xf946('0x2e')](_0x14f107[_0xf946('0x2a')],qs['fields'](_0x16e9ba[_0xf946('0x2b')][_0xf946('0x30')]));_0x5b4325[_0xf946('0x2f')]=_0x5b4325[_0xf946('0x2f')]['length']?_0x5b4325[_0xf946('0x2f')]:_0x14f107[_0xf946('0x2a')];if(!_0x16e9ba['query']['hasOwnProperty']('nolimit')){_0x5b4325[_0xf946('0x31')]=qs[_0xf946('0x31')](_0x16e9ba['query'][_0xf946('0x31')]);_0x5b4325[_0xf946('0x1a')]=qs['offset'](_0x16e9ba[_0xf946('0x2b')][_0xf946('0x1a')]);}_0x5b4325[_0xf946('0x32')]=qs[_0xf946('0x33')](_0x16e9ba[_0xf946('0x2b')]['sort']);_0x5b4325[_0xf946('0x34')]=qs[_0xf946('0x2d')](_[_0xf946('0x35')](_0x16e9ba[_0xf946('0x2b')],_0x14f107[_0xf946('0x2d')]));if(_0x16e9ba[_0xf946('0x2b')][_0xf946('0x36')]){_0x5b4325[_0xf946('0x34')]=_[_0xf946('0x37')](_0x5b4325[_0xf946('0x34')],{'$or':_[_0xf946('0x38')](_0x468593,function(_0x4b734b){if(_0x4b734b[_0xf946('0x39')]['key']!==_0xf946('0x3a')){var _0x246bfd={};_0x246bfd[_0x4b734b[_0xf946('0x3b')]]={'$like':'%'+_0x16e9ba['query'][_0xf946('0x36')]+'%'};return _0x246bfd;}})});}_0x5b4325=_[_0xf946('0x37')]({},_0x5b4325,_0x16e9ba['options']);var _0xa09e89={'where':_0x5b4325[_0xf946('0x34')]};return db[_0xf946('0x28')][_0xf946('0x3c')](_0xa09e89)[_0xf946('0x21')](function(_0x3e8d42){_0x26810b['count']=_0x3e8d42;if(_0x16e9ba['query'][_0xf946('0x3d')]){_0x5b4325[_0xf946('0x3e')]=[{'all':!![]}];}return db[_0xf946('0x28')][_0xf946('0x3f')](_0x5b4325);})['then'](function(_0x318266){_0x26810b[_0xf946('0x40')]=_0x318266;return _0x26810b;})[_0xf946('0x21')](respondWithFilteredResult(_0x19b9c4,_0x5b4325))[_0xf946('0x41')](handleError(_0x19b9c4,null));};exports[_0xf946('0x42')]=function(_0x1bf8db,_0xe4cd26){var _0x5e3672={'raw':!![],'where':{'id':_0x1bf8db[_0xf946('0x43')]['id']}},_0x239f64={};_0x239f64[_0xf946('0x2a')]=_[_0xf946('0x2c')](db[_0xf946('0x28')][_0xf946('0x29')]);_0x239f64[_0xf946('0x2b')]=_[_0xf946('0x2c')](_0x1bf8db[_0xf946('0x2b')]);_0x239f64[_0xf946('0x2d')]=_[_0xf946('0x2e')](_0x239f64[_0xf946('0x2a')],_0x239f64['query']);_0x5e3672[_0xf946('0x2f')]=_[_0xf946('0x2e')](_0x239f64['model'],qs[_0xf946('0x30')](_0x1bf8db[_0xf946('0x2b')][_0xf946('0x30')]));_0x5e3672[_0xf946('0x2f')]=_0x5e3672[_0xf946('0x2f')]['length']?_0x5e3672['attributes']:_0x239f64[_0xf946('0x2a')];if(_0x1bf8db[_0xf946('0x2b')][_0xf946('0x3d')]){_0x5e3672[_0xf946('0x3e')]=[{'all':!![]}];}_0x5e3672=_[_0xf946('0x37')]({},_0x5e3672,_0x1bf8db['options']);return db[_0xf946('0x28')][_0xf946('0x44')](_0x5e3672)[_0xf946('0x21')](handleEntityNotFound(_0xe4cd26,null))['then'](respondWithResult(_0xe4cd26,null))[_0xf946('0x41')](handleError(_0xe4cd26,null));};exports['create']=function(_0x419663,_0x5dfafe){return db[_0xf946('0x28')][_0xf946('0x45')](_0x419663['body'],{})[_0xf946('0x21')](respondWithResult(_0x5dfafe,0xc9))[_0xf946('0x41')](handleError(_0x5dfafe,null));};exports[_0xf946('0x1f')]=function(_0x564771,_0x27bb86){if(_0x564771['body']['id']){delete _0x564771[_0xf946('0x46')]['id'];}return db[_0xf946('0x28')][_0xf946('0x44')]({'where':{'id':_0x564771['params']['id']}})[_0xf946('0x21')](handleEntityNotFound(_0x27bb86,null))['then'](saveUpdates(_0x564771[_0xf946('0x46')],null))[_0xf946('0x21')](respondWithResult(_0x27bb86,null))['catch'](handleError(_0x27bb86,null));};exports[_0xf946('0x20')]=function(_0x531d5b,_0x525807){return db[_0xf946('0x28')][_0xf946('0x44')]({'where':{'id':_0x531d5b[_0xf946('0x43')]['id']}})[_0xf946('0x21')](handleEntityNotFound(_0x525807,null))[_0xf946('0x21')](removeEntity(_0x525807,null))[_0xf946('0x41')](handleError(_0x525807,null));};exports[_0xf946('0x47')]=function(_0x81ec04,_0x56cdfd){return db[_0xf946('0x28')][_0xf946('0x47')]()[_0xf946('0x21')](respondWithResult(_0x56cdfd,null))['catch'](handleError(_0x56cdfd,null));};
\ No newline at end of file
+var _0xaf26=['papaparse','../../components/auth/service','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','apply','reject','save','update','then','destroy','error','stack','name','send','index','rawAttributes','keys','query','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','filter','merge','map','type','key','VIRTUAL','field','options','JscriptyAnswerReport','include','findAll','params','includeAll','catch','create','body','find','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','ejs','jsforce','desk.js','to-csv','querystring'];(function(_0x373612,_0x5734cb){var _0x29057d=function(_0x498844){while(--_0x498844){_0x373612['push'](_0x373612['shift']());}};_0x29057d(++_0x5734cb);}(_0xaf26,0x158));var _0x6af2=function(_0x4c7935,_0x4a53fb){_0x4c7935=_0x4c7935-0x0;var _0x30651d=_0xaf26[_0x4c7935];return _0x30651d;};'use strict';var pdf=require(_0x6af2('0x0'));var emlformat=require(_0x6af2('0x1'));var rimraf=require(_0x6af2('0x2'));var zipdir=require(_0x6af2('0x3'));var jsonpatch=require(_0x6af2('0x4'));var rp=require(_0x6af2('0x5'));var moment=require(_0x6af2('0x6'));var BPromise=require(_0x6af2('0x7'));var Mustache=require(_0x6af2('0x8'));var util=require(_0x6af2('0x9'));var path=require('path');var sox=require(_0x6af2('0xa'));var csv=require('to-csv');var ejs=require(_0x6af2('0xb'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x6af2('0xc'));var deskjs=require(_0x6af2('0xd'));var toCsv=require(_0x6af2('0xe'));var querystring=require(_0x6af2('0xf'));var Papa=require(_0x6af2('0x10'));var Redis=require('ioredis');var authService=require(_0x6af2('0x11'));var qs=require(_0x6af2('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')('api');var utils=require(_0x6af2('0x13'));var config=require(_0x6af2('0x14'));var db=require(_0x6af2('0x15'))['db'];function respondWithStatusCode(_0x1cf40a,_0x5262f5){_0x5262f5=_0x5262f5||0xcc;return function(_0x2e2316){if(_0x2e2316){return _0x1cf40a[_0x6af2('0x16')](_0x5262f5);}return _0x1cf40a[_0x6af2('0x17')](_0x5262f5)['end']();};}function respondWithResult(_0x8afbe8,_0x45fd77){_0x45fd77=_0x45fd77||0xc8;return function(_0x4e0f41){if(_0x4e0f41){return _0x8afbe8[_0x6af2('0x17')](_0x45fd77)[_0x6af2('0x18')](_0x4e0f41);}};}function respondWithFilteredResult(_0x5caf30,_0x534e82){return function(_0x1ad632){if(_0x1ad632){var _0x904b26=_0x1ad632[_0x6af2('0x19')],_0x4011e4=_0x534e82['offset'],_0xeb5375=_0x534e82[_0x6af2('0x1a')]+_0x534e82[_0x6af2('0x1b')],_0x53887d;if(_0xeb5375>=_0x904b26){_0xeb5375=_0x904b26;_0x53887d=0xc8;}else{_0x53887d=0xce;}_0x5caf30[_0x6af2('0x17')](_0x53887d);return _0x5caf30[_0x6af2('0x1c')]('Content-Range',_0x4011e4+'-'+_0xeb5375+'/'+_0x904b26)['json'](_0x1ad632);}return null;};}function patchUpdates(_0x1c9f9a){return function(_0x86e9ac){try{jsonpatch[_0x6af2('0x1d')](_0x86e9ac,_0x1c9f9a,!![]);}catch(_0x33c9){return BPromise[_0x6af2('0x1e')](_0x33c9);}return _0x86e9ac[_0x6af2('0x1f')]();};}function saveUpdates(_0x5a4da2,_0x4e91c0){return function(_0x24c90b){if(_0x24c90b){return _0x24c90b[_0x6af2('0x20')](_0x5a4da2)[_0x6af2('0x21')](function(_0x49e87b){return _0x49e87b;});}return null;};}function removeEntity(_0x201d24,_0x1bf9fa){return function(_0x194f91){if(_0x194f91){return _0x194f91[_0x6af2('0x22')]()[_0x6af2('0x21')](function(){_0x201d24[_0x6af2('0x17')](0xcc)['end']();});}};}function handleEntityNotFound(_0x27ddb3,_0x18515a){return function(_0x5e83cc){if(!_0x5e83cc){_0x27ddb3[_0x6af2('0x16')](0x194);}return _0x5e83cc;};}function handleError(_0x476291,_0x25d504){_0x25d504=_0x25d504||0x1f4;return function(_0xf52ceb){logger[_0x6af2('0x23')](_0xf52ceb[_0x6af2('0x24')]);if(_0xf52ceb[_0x6af2('0x25')]){delete _0xf52ceb[_0x6af2('0x25')];}_0x476291[_0x6af2('0x17')](_0x25d504)[_0x6af2('0x26')](_0xf52ceb);};}exports[_0x6af2('0x27')]=function(_0x1994b9,_0x358b8e){var _0x58519c={},_0xac1e0={},_0x1fe584={'count':0x0,'rows':[]};var _0x46a120=db['JscriptyAnswerReport'][_0x6af2('0x28')];_0xac1e0['model']=_[_0x6af2('0x29')](_0x46a120);_0xac1e0[_0x6af2('0x2a')]=_[_0x6af2('0x29')](_0x1994b9[_0x6af2('0x2a')]);_0xac1e0['filters']=_[_0x6af2('0x2b')](_0xac1e0[_0x6af2('0x2c')],_0xac1e0[_0x6af2('0x2a')]);_0x58519c[_0x6af2('0x2d')]=_[_0x6af2('0x2b')](_0xac1e0[_0x6af2('0x2c')],qs[_0x6af2('0x2e')](_0x1994b9['query']['fields']));_0x58519c[_0x6af2('0x2d')]=_0x58519c[_0x6af2('0x2d')][_0x6af2('0x2f')]?_0x58519c[_0x6af2('0x2d')]:_0xac1e0[_0x6af2('0x2c')];if(!_0x1994b9[_0x6af2('0x2a')][_0x6af2('0x30')](_0x6af2('0x31'))){_0x58519c['limit']=qs[_0x6af2('0x1b')](_0x1994b9[_0x6af2('0x2a')][_0x6af2('0x1b')]);_0x58519c[_0x6af2('0x1a')]=qs[_0x6af2('0x1a')](_0x1994b9['query']['offset']);}_0x58519c[_0x6af2('0x32')]=qs[_0x6af2('0x33')](_0x1994b9['query'][_0x6af2('0x33')]);_0x58519c[_0x6af2('0x34')]=qs['filters'](_['pick'](_0x1994b9[_0x6af2('0x2a')],_0xac1e0[_0x6af2('0x35')]));if(_0x1994b9[_0x6af2('0x2a')][_0x6af2('0x36')]){_0x58519c[_0x6af2('0x34')]=_[_0x6af2('0x37')](_0x58519c[_0x6af2('0x34')],{'$or':_[_0x6af2('0x38')](_0x46a120,function(_0x2b9021){if(_0x2b9021[_0x6af2('0x39')][_0x6af2('0x3a')]!==_0x6af2('0x3b')){var _0x2b2e50={};_0x2b2e50[_0x2b9021[_0x6af2('0x3c')]]={'$like':'%'+_0x1994b9[_0x6af2('0x2a')][_0x6af2('0x36')]+'%'};return _0x2b2e50;}})});}_0x58519c=_[_0x6af2('0x37')]({},_0x58519c,_0x1994b9[_0x6af2('0x3d')]);var _0x491bc2={'where':_0x58519c['where']};return db[_0x6af2('0x3e')][_0x6af2('0x19')](_0x491bc2)[_0x6af2('0x21')](function(_0xc4bac4){_0x1fe584[_0x6af2('0x19')]=_0xc4bac4;if(_0x1994b9[_0x6af2('0x2a')]['includeAll']){_0x58519c[_0x6af2('0x3f')]=[{'all':!![]}];}return db[_0x6af2('0x3e')][_0x6af2('0x40')](_0x58519c);})[_0x6af2('0x21')](function(_0x5982af){_0x1fe584['rows']=_0x5982af;return _0x1fe584;})[_0x6af2('0x21')](respondWithFilteredResult(_0x358b8e,_0x58519c))['catch'](handleError(_0x358b8e,null));};exports['show']=function(_0x2e6022,_0x259b38){var _0x4b4262={'raw':!![],'where':{'id':_0x2e6022[_0x6af2('0x41')]['id']}},_0x1ca608={};_0x1ca608[_0x6af2('0x2c')]=_[_0x6af2('0x29')](db[_0x6af2('0x3e')]['rawAttributes']);_0x1ca608[_0x6af2('0x2a')]=_[_0x6af2('0x29')](_0x2e6022[_0x6af2('0x2a')]);_0x1ca608['filters']=_[_0x6af2('0x2b')](_0x1ca608['model'],_0x1ca608[_0x6af2('0x2a')]);_0x4b4262['attributes']=_[_0x6af2('0x2b')](_0x1ca608[_0x6af2('0x2c')],qs[_0x6af2('0x2e')](_0x2e6022[_0x6af2('0x2a')][_0x6af2('0x2e')]));_0x4b4262[_0x6af2('0x2d')]=_0x4b4262[_0x6af2('0x2d')][_0x6af2('0x2f')]?_0x4b4262['attributes']:_0x1ca608[_0x6af2('0x2c')];if(_0x2e6022[_0x6af2('0x2a')][_0x6af2('0x42')]){_0x4b4262[_0x6af2('0x3f')]=[{'all':!![]}];}_0x4b4262=_[_0x6af2('0x37')]({},_0x4b4262,_0x2e6022[_0x6af2('0x3d')]);return db[_0x6af2('0x3e')]['find'](_0x4b4262)[_0x6af2('0x21')](handleEntityNotFound(_0x259b38,null))[_0x6af2('0x21')](respondWithResult(_0x259b38,null))[_0x6af2('0x43')](handleError(_0x259b38,null));};exports[_0x6af2('0x44')]=function(_0x496a4d,_0x29338f){return db['JscriptyAnswerReport']['create'](_0x496a4d[_0x6af2('0x45')],{})['then'](respondWithResult(_0x29338f,0xc9))[_0x6af2('0x43')](handleError(_0x29338f,null));};exports['update']=function(_0x51d597,_0x46ec8e){if(_0x51d597['body']['id']){delete _0x51d597['body']['id'];}return db[_0x6af2('0x3e')][_0x6af2('0x46')]({'where':{'id':_0x51d597['params']['id']}})[_0x6af2('0x21')](handleEntityNotFound(_0x46ec8e,null))[_0x6af2('0x21')](saveUpdates(_0x51d597['body'],null))[_0x6af2('0x21')](respondWithResult(_0x46ec8e,null))[_0x6af2('0x43')](handleError(_0x46ec8e,null));};exports[_0x6af2('0x22')]=function(_0x2c9453,_0x4b332d){return db[_0x6af2('0x3e')][_0x6af2('0x46')]({'where':{'id':_0x2c9453[_0x6af2('0x41')]['id']}})[_0x6af2('0x21')](handleEntityNotFound(_0x4b332d,null))['then'](removeEntity(_0x4b332d,null))[_0x6af2('0x43')](handleError(_0x4b332d,null));};exports['describe']=function(_0x339e7c,_0x1770cc){return db[_0x6af2('0x3e')][_0x6af2('0x47')]()[_0x6af2('0x21')](respondWithResult(_0x1770cc,null))[_0x6af2('0x43')](handleError(_0x1770cc,null));};
\ No newline at end of file
index 409a6b3..5a662dd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6356=['moment','rimraf','../../config/environment','./jscriptyAnswerReport.attributes','exports','define','JscriptyAnswerReport','report_jscripty_answers','../../config/logger','api'];(function(_0x552804,_0x3c3d1e){var _0x32be66=function(_0x14c213){while(--_0x14c213){_0x552804['push'](_0x552804['shift']());}};_0x32be66(++_0x3c3d1e);}(_0x6356,0x1ac));var _0x6635=function(_0x1830a9,_0x1583bd){_0x1830a9=_0x1830a9-0x0;var _0x2b6166=_0x6356[_0x1830a9];return _0x2b6166;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x6635('0x0'))(_0x6635('0x1'));var moment=require(_0x6635('0x2'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x6635('0x3'));var config=require(_0x6635('0x4'));var attributes=require(_0x6635('0x5'));module[_0x6635('0x6')]=function(_0x1d0cb3,_0x301d38){return _0x1d0cb3[_0x6635('0x7')](_0x6635('0x8'),attributes,{'tableName':_0x6635('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x75b0=['../../config/environment','./jscriptyAnswerReport.attributes','exports','define','report_jscripty_answers','moment','request-promise','rimraf'];(function(_0x1cfad8,_0x1a5444){var _0x1e3f35=function(_0x11620d){while(--_0x11620d){_0x1cfad8['push'](_0x1cfad8['shift']());}};_0x1e3f35(++_0x1a5444);}(_0x75b0,0x1d5));var _0x075b=function(_0x41cf82,_0x44a878){_0x41cf82=_0x41cf82-0x0;var _0x25e22d=_0x75b0[_0x41cf82];return _0x25e22d;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0x075b('0x0'));var BPromise=require('bluebird');var rp=require(_0x075b('0x1'));var fs=require('fs');var path=require('path');var rimraf=require(_0x075b('0x2'));var config=require(_0x075b('0x3'));var attributes=require(_0x075b('0x4'));module[_0x075b('0x5')]=function(_0x50c102,_0x3423ae){return _0x50c102[_0x075b('0x6')]('JscriptyAnswerReport',attributes,{'tableName':_0x075b('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6902717..30350cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf98d=['JscriptyAnswerReport,\x20%s,\x20%s,\x20%s','stringify','code','error','message','result','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','request','then','JscriptyAnswerReport,\x20%s,\x20%s','request\x20sent'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xf98d,0xc4));var _0xdf98=function(_0x35cf24,_0x3b299d){_0x35cf24=_0x35cf24-0x0;var _0x266a9a=_0xf98d[_0x35cf24];return _0x266a9a;};'use strict';var _=require('lodash');var util=require(_0xdf98('0x0'));var moment=require(_0xdf98('0x1'));var BPromise=require(_0xdf98('0x2'));var rs=require(_0xdf98('0x3'));var fs=require('fs');var Redis=require(_0xdf98('0x4'));var db=require(_0xdf98('0x5'))['db'];var utils=require(_0xdf98('0x6'));var logger=require(_0xdf98('0x7'))('rpc');var config=require(_0xdf98('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xdf98('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x16cd1f,_0x245dfe,_0x3a87de){return new BPromise(function(_0x1d3785,_0x4e3873){return client[_0xdf98('0xa')](_0x16cd1f,_0x3a87de)[_0xdf98('0xb')](function(_0x4be84c){logger['info'](_0xdf98('0xc'),_0x245dfe,_0xdf98('0xd'));logger['debug'](_0xdf98('0xe'),_0x245dfe,_0xdf98('0xd'),JSON[_0xdf98('0xf')](_0x4be84c));if(_0x4be84c['error']){if(_0x4be84c['error'][_0xdf98('0x10')]===0x1f4){logger[_0xdf98('0x11')](_0xdf98('0xc'),_0x245dfe,_0x4be84c[_0xdf98('0x11')][_0xdf98('0x12')]);return _0x4e3873(_0x4be84c[_0xdf98('0x11')][_0xdf98('0x12')]);}logger[_0xdf98('0x11')](_0xdf98('0xc'),_0x245dfe,_0x4be84c['error'][_0xdf98('0x12')]);return _0x1d3785(_0x4be84c[_0xdf98('0x11')][_0xdf98('0x12')]);}else{logger['info'](_0xdf98('0xc'),_0x245dfe,_0xdf98('0xd'));_0x1d3785(_0x4be84c[_0xdf98('0x13')]['message']);}})[_0xdf98('0x14')](function(_0x506265){logger[_0xdf98('0x11')](_0xdf98('0xc'),_0x245dfe,_0x506265);_0x4e3873(_0x506265);});});}
\ No newline at end of file
+var _0x2e32=['code','message','catch','lodash','util','bluebird','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','http','then','info','JscriptyAnswerReport,\x20%s,\x20%s','request\x20sent','debug','JscriptyAnswerReport,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x5f38c7,_0x4ae529){var _0x303cf7=function(_0x3eec64){while(--_0x3eec64){_0x5f38c7['push'](_0x5f38c7['shift']());}};_0x303cf7(++_0x4ae529);}(_0x2e32,0x16b));var _0x22e3=function(_0x87b0ff,_0x314389){_0x87b0ff=_0x87b0ff-0x0;var _0x3bc0b2=_0x2e32[_0x87b0ff];return _0x3bc0b2;};'use strict';var _=require(_0x22e3('0x0'));var util=require(_0x22e3('0x1'));var moment=require('moment');var BPromise=require(_0x22e3('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x22e3('0x3'));var db=require(_0x22e3('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x22e3('0x5'))(_0x22e3('0x6'));var config=require(_0x22e3('0x7'));var jayson=require('jayson/promise');var client=jayson['client'][_0x22e3('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x3e99ac,_0x4cf43a,_0x1952bf){return new BPromise(function(_0x2b8170,_0x17ce5b){return client['request'](_0x3e99ac,_0x1952bf)[_0x22e3('0x9')](function(_0x1ed12b){logger[_0x22e3('0xa')](_0x22e3('0xb'),_0x4cf43a,_0x22e3('0xc'));logger[_0x22e3('0xd')](_0x22e3('0xe'),_0x4cf43a,'request\x20sent',JSON[_0x22e3('0xf')](_0x1ed12b));if(_0x1ed12b[_0x22e3('0x10')]){if(_0x1ed12b[_0x22e3('0x10')][_0x22e3('0x11')]===0x1f4){logger[_0x22e3('0x10')]('JscriptyAnswerReport,\x20%s,\x20%s',_0x4cf43a,_0x1ed12b[_0x22e3('0x10')][_0x22e3('0x12')]);return _0x17ce5b(_0x1ed12b[_0x22e3('0x10')][_0x22e3('0x12')]);}logger[_0x22e3('0x10')](_0x22e3('0xb'),_0x4cf43a,_0x1ed12b[_0x22e3('0x10')]['message']);return _0x2b8170(_0x1ed12b['error'][_0x22e3('0x12')]);}else{logger[_0x22e3('0xa')](_0x22e3('0xb'),_0x4cf43a,_0x22e3('0xc'));_0x2b8170(_0x1ed12b['result'][_0x22e3('0x12')]);}})[_0x22e3('0x13')](function(_0x516fdd){logger[_0x22e3('0x10')](_0x22e3('0xb'),_0x4cf43a,_0x516fdd);_0x17ce5b(_0x516fdd);});});}
\ No newline at end of file
index c571a0a..904974b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x934b=['update','delete','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./jscriptyProject.controller','get','isAuthenticated','index','/:id','show','/:id/sessions','getSessions','/:id/answers','getAnswers','30s','getSummary','post','create','/:id/clone','put'];(function(_0x1ef71d,_0x146c30){var _0x24f61a=function(_0x3bea9f){while(--_0x3bea9f){_0x1ef71d['push'](_0x1ef71d['shift']());}};_0x24f61a(++_0x146c30);}(_0x934b,0xe4));var _0xb934=function(_0x1a36a5,_0x746928){_0x1a36a5=_0x1a36a5-0x0;var _0x746243=_0x934b[_0x1a36a5];return _0x746243;};'use strict';var multer=require(_0xb934('0x0'));var util=require(_0xb934('0x1'));var path=require(_0xb934('0x2'));var timeout=require(_0xb934('0x3'));var express=require('express');var router=express[_0xb934('0x4')]();var auth=require(_0xb934('0x5'));var interaction=require(_0xb934('0x6'));var config=require(_0xb934('0x7'));var controller=require(_0xb934('0x8'));router[_0xb934('0x9')]('/',auth[_0xb934('0xa')](),controller[_0xb934('0xb')]);router['get'](_0xb934('0xc'),auth['isAuthenticated'](),controller[_0xb934('0xd')]);router['get'](_0xb934('0xe'),auth[_0xb934('0xa')](),controller[_0xb934('0xf')]);router[_0xb934('0x9')](_0xb934('0x10'),auth[_0xb934('0xa')](),controller[_0xb934('0x11')]);router[_0xb934('0x9')]('/:id/summary',auth[_0xb934('0xa')](),timeout(_0xb934('0x12')),controller[_0xb934('0x13')]);router[_0xb934('0x14')]('/',auth['isAuthenticated'](),controller[_0xb934('0x15')]);router[_0xb934('0x14')](_0xb934('0x16'),auth[_0xb934('0xa')](),controller['clone']);router[_0xb934('0x17')](_0xb934('0xc'),auth[_0xb934('0xa')](),controller[_0xb934('0x18')]);router[_0xb934('0x19')](_0xb934('0xc'),auth['isAuthenticated'](),controller[_0xb934('0x1a')]);module[_0xb934('0x1b')]=router;
\ No newline at end of file
+var _0xa004=['get','isAuthenticated','index','/:id','show','/:id/sessions','/:id/answers','getAnswers','30s','getSummary','post','/:id/clone','update','delete','destroy','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./jscriptyProject.controller'];(function(_0x3b99e0,_0x4981b4){var _0xaf524c=function(_0x5d33c3){while(--_0x5d33c3){_0x3b99e0['push'](_0x3b99e0['shift']());}};_0xaf524c(++_0x4981b4);}(_0xa004,0x143));var _0x4a00=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xa004[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x4a00('0x0'));var timeout=require('connect-timeout');var express=require(_0x4a00('0x1'));var router=express[_0x4a00('0x2')]();var auth=require(_0x4a00('0x3'));var interaction=require(_0x4a00('0x4'));var config=require(_0x4a00('0x5'));var controller=require(_0x4a00('0x6'));router[_0x4a00('0x7')]('/',auth[_0x4a00('0x8')](),controller[_0x4a00('0x9')]);router['get'](_0x4a00('0xa'),auth['isAuthenticated'](),controller[_0x4a00('0xb')]);router['get'](_0x4a00('0xc'),auth[_0x4a00('0x8')](),controller['getSessions']);router[_0x4a00('0x7')](_0x4a00('0xd'),auth['isAuthenticated'](),controller[_0x4a00('0xe')]);router['get']('/:id/summary',auth[_0x4a00('0x8')](),timeout(_0x4a00('0xf')),controller[_0x4a00('0x10')]);router[_0x4a00('0x11')]('/',auth[_0x4a00('0x8')](),controller['create']);router[_0x4a00('0x11')](_0x4a00('0x12'),auth[_0x4a00('0x8')](),controller['clone']);router['put'](_0x4a00('0xa'),auth[_0x4a00('0x8')](),controller[_0x4a00('0x13')]);router[_0x4a00('0x14')]('/:id',auth[_0x4a00('0x8')](),controller[_0x4a00('0x15')]);module['exports']=router;
\ No newline at end of file
index adeb787..ac92714 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x657d=['format','getDataValue','name','description','sequelize','lodash','STRING','TEXT','long','setDataValue','formData','stringify','isString'];(function(_0x5ddb1c,_0x5ea4df){var _0x354adc=function(_0x2dfb1f){while(--_0x2dfb1f){_0x5ddb1c['push'](_0x5ddb1c['shift']());}};_0x354adc(++_0x5ea4df);}(_0x657d,0xc7));var _0xd657=function(_0x3de7e0,_0x28cbff){_0x3de7e0=_0x3de7e0-0x0;var _0x11d0b3=_0x657d[_0x3de7e0];return _0x11d0b3;};'use strict';var Sequelize=require(_0xd657('0x0'));var _=require(_0xd657('0x1'));var util=require('util');module['exports']={'name':{'type':Sequelize[_0xd657('0x2')],'unique':'name'},'description':{'type':Sequelize[_0xd657('0x2')]},'formData':{'type':Sequelize[_0xd657('0x3')](_0xd657('0x4')),'set':function(_0x14c254){if(_['isObjectLike'](_0x14c254)){this[_0xd657('0x5')](_0xd657('0x6'),JSON[_0xd657('0x7')](_0x14c254));}else if(_[_0xd657('0x8')](_0x14c254)){this['setDataValue'](_0xd657('0x6'),_0x14c254);}else{this[_0xd657('0x5')](_0xd657('0x6'),util[_0xd657('0x9')]('{\x22name\x22:\x22%s\x22,\x22description\x22:\x22%s\x22,\x22pages\x22:[]}',this[_0xd657('0xa')](_0xd657('0xb'))||'',this[_0xd657('0xa')](_0xd657('0xc'))||''));}}},'enableUncompleteSave':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]}};
\ No newline at end of file
+var _0xf176=['isString','{\x22name\x22:\x22%s\x22,\x22description\x22:\x22%s\x22,\x22pages\x22:[]}','getDataValue','BOOLEAN','sequelize','lodash','util','exports','STRING','name','TEXT','long','isObjectLike','setDataValue','formData','stringify'];(function(_0x3a7f64,_0x5b3c34){var _0x5ec593=function(_0x4a7169){while(--_0x4a7169){_0x3a7f64['push'](_0x3a7f64['shift']());}};_0x5ec593(++_0x5b3c34);}(_0xf176,0x74));var _0x6f17=function(_0x1344c2,_0x540c25){_0x1344c2=_0x1344c2-0x0;var _0xf24785=_0xf176[_0x1344c2];return _0xf24785;};'use strict';var Sequelize=require(_0x6f17('0x0'));var _=require(_0x6f17('0x1'));var util=require(_0x6f17('0x2'));module[_0x6f17('0x3')]={'name':{'type':Sequelize[_0x6f17('0x4')],'unique':_0x6f17('0x5')},'description':{'type':Sequelize[_0x6f17('0x4')]},'formData':{'type':Sequelize[_0x6f17('0x6')](_0x6f17('0x7')),'set':function(_0x1c0aed){if(_[_0x6f17('0x8')](_0x1c0aed)){this[_0x6f17('0x9')](_0x6f17('0xa'),JSON[_0x6f17('0xb')](_0x1c0aed));}else if(_[_0x6f17('0xc')](_0x1c0aed)){this[_0x6f17('0x9')](_0x6f17('0xa'),_0x1c0aed);}else{this[_0x6f17('0x9')](_0x6f17('0xa'),util['format'](_0x6f17('0xd'),this[_0x6f17('0xe')](_0x6f17('0x5'))||'',this[_0x6f17('0xe')]('description')||''));}}},'enableUncompleteSave':{'type':Sequelize[_0x6f17('0xf')],'defaultValue':!![]}};
\ No newline at end of file
index 0975d74..6f2ebf1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeabc=['html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','path','sox','to-csv','ejs','lodash','crypto','jsforce','querystring','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','set','apply','reject','save','update','destroy','then','Projects','UserProfileResource','error','stack','index','JscriptyProject','model','keys','query','filters','intersection','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','rawAttributes','fields','find','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','userProfileId','autoAssociation','create','name','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','omit','createdAt','updatedAt','getSessions','JscriptySessionReport','getAnswers','findOne','JscriptyAnswerReport','ProjectId','number','toString','indexOf','getSummary','startTime','starttime','parse','JscriptyQuestionReport','-createdAt','questionId','question','format','YYYY-MM-DD\x20HH:mm:ss','SessionId','answer','writeFileSync','/tmp/Jscripty_Project_%d_Summary_%s.csv','setHeader','Content-disposition','Jscripty_Project_%d_Summary_%s.csv','Content-type','text/csv','download'];(function(_0x41d432,_0x20e878){var _0x1650f9=function(_0x27f177){while(--_0x27f177){_0x41d432['push'](_0x41d432['shift']());}};_0x1650f9(++_0x20e878);}(_0xeabc,0x1c4));var _0xceab=function(_0x538978,_0xb6c4f){_0x538978=_0x538978-0x0;var _0x510395=_0xeabc[_0x538978];return _0x510395;};'use strict';var pdf=require(_0xceab('0x0'));var emlformat=require(_0xceab('0x1'));var rimraf=require(_0xceab('0x2'));var zipdir=require(_0xceab('0x3'));var jsonpatch=require(_0xceab('0x4'));var rp=require(_0xceab('0x5'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0xceab('0x6'));var sox=require(_0xceab('0x7'));var csv=require(_0xceab('0x8'));var ejs=require(_0xceab('0x9'));var fs=require('fs');var _=require(_0xceab('0xa'));var squel=require('squel');var crypto=require(_0xceab('0xb'));var jsforce=require(_0xceab('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xceab('0xd'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xceab('0xe'));var qs=require(_0xceab('0xf'));var hardwareService=require(_0xceab('0x10'));var logger=require(_0xceab('0x11'))(_0xceab('0x12'));var utils=require(_0xceab('0x13'));var config=require(_0xceab('0x14'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x42ede9,_0x3e411c){_0x3e411c=_0x3e411c||0xcc;return function(_0x5c4801){if(_0x5c4801){return _0x42ede9[_0xceab('0x15')](_0x3e411c);}return _0x42ede9[_0xceab('0x16')](_0x3e411c)[_0xceab('0x17')]();};}function respondWithResult(_0x8580d3,_0x35a34f){_0x35a34f=_0x35a34f||0xc8;return function(_0x180b7d){if(_0x180b7d){return _0x8580d3[_0xceab('0x16')](_0x35a34f)[_0xceab('0x18')](_0x180b7d);}};}function respondWithFilteredResult(_0x315534,_0x201bfb){return function(_0x147843){if(_0x147843){var _0x351589=_0x147843[_0xceab('0x19')],_0x2c7410=_0x201bfb[_0xceab('0x1a')],_0x182e22=_0x201bfb[_0xceab('0x1a')]+_0x201bfb['limit'],_0x3ea442;if(_0x182e22>=_0x351589){_0x182e22=_0x351589;_0x3ea442=0xc8;}else{_0x3ea442=0xce;}_0x315534[_0xceab('0x16')](_0x3ea442);return _0x315534[_0xceab('0x1b')]('Content-Range',_0x2c7410+'-'+_0x182e22+'/'+_0x351589)['json'](_0x147843);}return null;};}function patchUpdates(_0x1cb8d3){return function(_0x21cc6b){try{jsonpatch[_0xceab('0x1c')](_0x21cc6b,_0x1cb8d3,!![]);}catch(_0x1e38b9){return BPromise[_0xceab('0x1d')](_0x1e38b9);}return _0x21cc6b[_0xceab('0x1e')]();};}function saveUpdates(_0x341f65,_0x66b9cd){return function(_0x545ca1){if(_0x545ca1){return _0x545ca1[_0xceab('0x1f')](_0x341f65)['then'](function(_0x270e57){return _0x270e57;});}return null;};}function removeEntity(_0x5b19b5,_0x21fff1){return function(_0x23effc){if(_0x23effc){return _0x23effc[_0xceab('0x20')]()[_0xceab('0x21')](function(){var _0x42215d=_0x23effc['get']({'plain':!![]});var _0x14ff6c=_0xceab('0x22');return db[_0xceab('0x23')][_0xceab('0x20')]({'where':{'type':_0x14ff6c,'resourceId':_0x42215d['id']}})[_0xceab('0x21')](function(){return _0x23effc;});})['then'](function(){_0x5b19b5[_0xceab('0x16')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3f2c44,_0x41b8de){return function(_0x4b288c){if(!_0x4b288c){_0x3f2c44['sendStatus'](0x194);}return _0x4b288c;};}function handleError(_0x24df9c,_0x220081){_0x220081=_0x220081||0x1f4;return function(_0x3d121b){logger[_0xceab('0x24')](_0x3d121b[_0xceab('0x25')]);if(_0x3d121b['name']){delete _0x3d121b['name'];}_0x24df9c[_0xceab('0x16')](_0x220081)['send'](_0x3d121b);};}exports[_0xceab('0x26')]=function(_0x23e066,_0x58fd49){var _0x4a3778={},_0x4c5470={},_0x3e2188={'count':0x0,'rows':[]};var _0x22c086=db[_0xceab('0x27')]['rawAttributes'];_0x4c5470[_0xceab('0x28')]=_[_0xceab('0x29')](_0x22c086);_0x4c5470['query']=_[_0xceab('0x29')](_0x23e066[_0xceab('0x2a')]);_0x4c5470[_0xceab('0x2b')]=_[_0xceab('0x2c')](_0x4c5470[_0xceab('0x28')],_0x4c5470['query']);_0x4a3778[_0xceab('0x2d')]=_[_0xceab('0x2c')](_0x4c5470[_0xceab('0x28')],qs['fields'](_0x23e066[_0xceab('0x2a')]['fields']));_0x4a3778['attributes']=_0x4a3778[_0xceab('0x2d')][_0xceab('0x2e')]?_0x4a3778['attributes']:_0x4c5470['model'];if(!_0x23e066[_0xceab('0x2a')][_0xceab('0x2f')](_0xceab('0x30'))){_0x4a3778[_0xceab('0x31')]=qs[_0xceab('0x31')](_0x23e066['query'][_0xceab('0x31')]);_0x4a3778[_0xceab('0x1a')]=qs[_0xceab('0x1a')](_0x23e066['query'][_0xceab('0x1a')]);}_0x4a3778[_0xceab('0x32')]=qs[_0xceab('0x33')](_0x23e066[_0xceab('0x2a')][_0xceab('0x33')]);_0x4a3778[_0xceab('0x34')]=qs['filters'](_[_0xceab('0x35')](_0x23e066[_0xceab('0x2a')],_0x4c5470[_0xceab('0x2b')]));if(_0x23e066[_0xceab('0x2a')][_0xceab('0x36')]){_0x4a3778[_0xceab('0x34')]=_[_0xceab('0x37')](_0x4a3778['where'],{'$or':_[_0xceab('0x38')](_0x22c086,function(_0x3882a9){if(_0x3882a9['type'][_0xceab('0x39')]!==_0xceab('0x3a')){var _0x571785={};_0x571785[_0x3882a9[_0xceab('0x3b')]]={'$like':'%'+_0x23e066[_0xceab('0x2a')][_0xceab('0x36')]+'%'};return _0x571785;}})});}_0x4a3778=_[_0xceab('0x37')]({},_0x4a3778,_0x23e066[_0xceab('0x3c')]);var _0x92a74b={'where':_0x4a3778['where']};return db[_0xceab('0x27')]['count'](_0x92a74b)['then'](function(_0x350668){_0x3e2188[_0xceab('0x19')]=_0x350668;if(_0x23e066[_0xceab('0x2a')][_0xceab('0x3d')]){_0x4a3778[_0xceab('0x3e')]=[{'all':!![]}];}return db['JscriptyProject'][_0xceab('0x3f')](_0x4a3778);})['then'](function(_0x2c2c2c){_0x3e2188[_0xceab('0x40')]=_0x2c2c2c;return _0x3e2188;})['then'](respondWithFilteredResult(_0x58fd49,_0x4a3778))[_0xceab('0x41')](handleError(_0x58fd49,null));};exports[_0xceab('0x42')]=function(_0x5ac319,_0x2130c5){var _0x439c85={'raw':![],'where':{'id':_0x5ac319[_0xceab('0x43')]['id']}},_0xab174a={};_0xab174a[_0xceab('0x28')]=_[_0xceab('0x29')](db[_0xceab('0x27')][_0xceab('0x44')]);_0xab174a[_0xceab('0x2a')]=_[_0xceab('0x29')](_0x5ac319['query']);_0xab174a[_0xceab('0x2b')]=_['intersection'](_0xab174a[_0xceab('0x28')],_0xab174a[_0xceab('0x2a')]);_0x439c85[_0xceab('0x2d')]=_[_0xceab('0x2c')](_0xab174a[_0xceab('0x28')],qs['fields'](_0x5ac319['query'][_0xceab('0x45')]));_0x439c85[_0xceab('0x2d')]=_0x439c85[_0xceab('0x2d')][_0xceab('0x2e')]?_0x439c85[_0xceab('0x2d')]:_0xab174a[_0xceab('0x28')];if(_0x5ac319[_0xceab('0x2a')][_0xceab('0x3d')]){_0x439c85[_0xceab('0x3e')]=[{'all':!![]}];}_0x439c85=_[_0xceab('0x37')]({},_0x439c85,_0x5ac319['options']);return db[_0xceab('0x27')][_0xceab('0x46')](_0x439c85)[_0xceab('0x21')](handleEntityNotFound(_0x2130c5,null))[_0xceab('0x21')](respondWithResult(_0x2130c5,null))['catch'](handleError(_0x2130c5,null));};exports['create']=function(_0x4013f7,_0x471122){return db[_0xceab('0x27')]['create'](_0x4013f7[_0xceab('0x47')],{})[_0xceab('0x21')](function(_0x468c78){var _0x15d6e6=_0x4013f7[_0xceab('0x48')][_0xceab('0x49')]({'plain':!![]});if(!_0x15d6e6)throw new Error(_0xceab('0x4a'));if(_0x15d6e6['role']===_0xceab('0x48')){var _0x3d3470=_0x468c78[_0xceab('0x49')]({'plain':!![]});var _0x1e707f='Projects';return db['UserProfileSection']['find']({'where':{'name':_0x1e707f,'userProfileId':_0x15d6e6[_0xceab('0x4b')]},'raw':!![]})[_0xceab('0x21')](function(_0x3e4ac8){if(_0x3e4ac8&&_0x3e4ac8[_0xceab('0x4c')]===0x0){return db[_0xceab('0x23')][_0xceab('0x4d')]({'name':_0x3d3470[_0xceab('0x4e')],'resourceId':_0x3d3470['id'],'type':_0x3e4ac8['name'],'sectionId':_0x3e4ac8['id']},{})[_0xceab('0x21')](function(){return _0x468c78;});}else{return _0x468c78;}})[_0xceab('0x41')](function(_0x397406){logger[_0xceab('0x24')](_0xceab('0x4f'),_0x397406);throw _0x397406;});}return _0x468c78;})['then'](respondWithResult(_0x471122,0xc9))['catch'](handleError(_0x471122,null));};exports[_0xceab('0x50')]=function(_0x137c82,_0x470043){var _0x368522={'raw':![],'where':{'id':_0x137c82[_0xceab('0x43')]['id']}},_0x7371a4={};_0x7371a4[_0xceab('0x28')]=_[_0xceab('0x29')](db[_0xceab('0x27')]['rawAttributes']);_0x368522[_0xceab('0x2d')]=_[_0xceab('0x2c')](_0x7371a4[_0xceab('0x28')],qs['fields'](_0x137c82[_0xceab('0x2a')][_0xceab('0x45')]));_0x368522['attributes']=_0x368522[_0xceab('0x2d')][_0xceab('0x2e')]?_0x368522[_0xceab('0x2d')]:_0x7371a4[_0xceab('0x28')];if(_0x137c82[_0xceab('0x2a')][_0xceab('0x3d')]){_0x368522[_0xceab('0x3e')]=[{'all':!![]}];}_0x368522=_[_0xceab('0x37')]({},_0x368522,_0x137c82[_0xceab('0x3c')]);return db['JscriptyProject'][_0xceab('0x46')](_0x368522)['then'](handleEntityNotFound(_0x470043,null))[_0xceab('0x21')](function(_0x585297){if(_0x585297){var _0x441c63=_0x585297[_0xceab('0x49')]({'plain':!![]});_0x441c63=qs[_0xceab('0x51')](_0x441c63,['id',_0xceab('0x52'),_0xceab('0x53')]);_0x137c82['body']=_[_0xceab('0x51')](_0x137c82[_0xceab('0x47')],['id',_0xceab('0x52'),_0xceab('0x53')]);return db[_0xceab('0x27')]['create'](_['merge'](_0x441c63,_0x137c82[_0xceab('0x47')]),{'include':_0x137c82[_0xceab('0x2a')][_0xceab('0x3d')]?[{'all':!![]}]:undefined})[_0xceab('0x21')](function(_0x46817f){var _0x345e50=_0x137c82[_0xceab('0x48')]['get']({'plain':!![]});if(!_0x345e50)throw new Error(_0xceab('0x4a'));if(_0x345e50['role']==='user'){var _0x37e297=_0x46817f[_0xceab('0x49')]({'plain':!![]});var _0x5ec0b5='Projects';return db['UserProfileSection'][_0xceab('0x46')]({'where':{'name':_0x5ec0b5,'userProfileId':_0x345e50['userProfileId']},'raw':!![]})[_0xceab('0x21')](function(_0x14e405){if(_0x14e405&&_0x14e405[_0xceab('0x4c')]===0x0){return db[_0xceab('0x23')][_0xceab('0x4d')]({'name':_0x37e297[_0xceab('0x4e')],'resourceId':_0x37e297['id'],'type':_0x14e405[_0xceab('0x4e')],'sectionId':_0x14e405['id']},{})[_0xceab('0x21')](function(){return _0x46817f;});}else{return _0x46817f;}})[_0xceab('0x41')](function(_0x39e78a){logger[_0xceab('0x24')](_0xceab('0x4f'),_0x39e78a);throw _0x39e78a;});}return _0x46817f;});}})[_0xceab('0x21')](respondWithResult(_0x470043,0xc9))[_0xceab('0x41')](handleError(_0x470043,null));};exports['update']=function(_0x52f32f,_0x32cc66){if(_0x52f32f['body']['id']){delete _0x52f32f['body']['id'];}return db[_0xceab('0x27')][_0xceab('0x46')]({'where':{'id':_0x52f32f[_0xceab('0x43')]['id']}})[_0xceab('0x21')](handleEntityNotFound(_0x32cc66,null))[_0xceab('0x21')](saveUpdates(_0x52f32f[_0xceab('0x47')],null))['then'](respondWithResult(_0x32cc66,null))[_0xceab('0x41')](handleError(_0x32cc66,null));};exports[_0xceab('0x20')]=function(_0x568432,_0x25f6a2){return db[_0xceab('0x27')][_0xceab('0x46')]({'where':{'id':_0x568432[_0xceab('0x43')]['id']}})[_0xceab('0x21')](handleEntityNotFound(_0x25f6a2,null))['then'](removeEntity(_0x25f6a2,null))['catch'](handleError(_0x25f6a2,null));};exports[_0xceab('0x54')]=function(_0x5aabca,_0xa92186,_0x281f58){var _0x50431d={'raw':!![],'where':{}};var _0x2d55f9={};var _0x4c8daa={'count':0x0,'rows':[]};return db[_0xceab('0x27')]['findOne']({'where':{'id':_0x5aabca['params']['id']}})[_0xceab('0x21')](handleEntityNotFound(_0xa92186,null))[_0xceab('0x21')](function(_0x1cc8f2){if(_0x1cc8f2){_0x2d55f9[_0xceab('0x28')]=_['keys'](db[_0xceab('0x55')][_0xceab('0x44')]);_0x2d55f9[_0xceab('0x2a')]=_[_0xceab('0x29')](_0x5aabca['query']);_0x2d55f9[_0xceab('0x2b')]=_['intersection'](_0x2d55f9[_0xceab('0x28')],_0x2d55f9[_0xceab('0x2a')]);_0x50431d['attributes']=_['intersection'](_0x2d55f9[_0xceab('0x28')],qs[_0xceab('0x45')](_0x5aabca[_0xceab('0x2a')][_0xceab('0x45')]));_0x50431d['attributes']=_0x50431d[_0xceab('0x2d')][_0xceab('0x2e')]?_0x50431d['attributes']:_0x2d55f9[_0xceab('0x28')];if(!_0x5aabca['query'][_0xceab('0x2f')](_0xceab('0x30'))){_0x50431d[_0xceab('0x31')]=qs['limit'](_0x5aabca[_0xceab('0x2a')][_0xceab('0x31')]);_0x50431d['offset']=qs[_0xceab('0x1a')](_0x5aabca[_0xceab('0x2a')][_0xceab('0x1a')]);}_0x50431d['order']=qs['sort'](_0x5aabca[_0xceab('0x2a')]['sort']);_0x50431d[_0xceab('0x34')]=qs['filters'](_['pick'](_0x5aabca[_0xceab('0x2a')],_0x2d55f9['filters']));_0x50431d[_0xceab('0x34')]['ProjectId']=_0x1cc8f2['id'];if(_0x5aabca[_0xceab('0x2a')][_0xceab('0x36')]){_0x50431d[_0xceab('0x34')]=_['merge'](_0x50431d[_0xceab('0x34')],{'$or':_[_0xceab('0x38')](_0x50431d[_0xceab('0x2d')],function(_0x277ab2){var _0x826858={};_0x826858[_0x277ab2]={'$like':'%'+_0x5aabca[_0xceab('0x2a')][_0xceab('0x36')]+'%'};return _0x826858;})});}_0x50431d=_[_0xceab('0x37')]({},_0x50431d,_0x5aabca[_0xceab('0x3c')]);return db[_0xceab('0x55')][_0xceab('0x19')]({'where':_0x50431d[_0xceab('0x34')]})[_0xceab('0x21')](function(_0x4ac55a){_0x4c8daa[_0xceab('0x19')]=_0x4ac55a;if(_0x5aabca['query'][_0xceab('0x3d')]){_0x50431d[_0xceab('0x3e')]=[{'all':!![]}];}return db['JscriptySessionReport'][_0xceab('0x3f')](_0x50431d);})[_0xceab('0x21')](function(_0x471d71){_0x4c8daa[_0xceab('0x40')]=_0x471d71;return _0x4c8daa;});}})[_0xceab('0x21')](respondWithFilteredResult(_0xa92186,_0x50431d))[_0xceab('0x41')](handleError(_0xa92186,null));};exports[_0xceab('0x56')]=function(_0x246412,_0x4337fd,_0x5bf78c){var _0x2dab68={'raw':!![],'where':{}};var _0x4e03a5={};var _0x113b31={'count':0x0,'rows':[]};return db[_0xceab('0x27')][_0xceab('0x57')]({'where':{'id':_0x246412[_0xceab('0x43')]['id']}})[_0xceab('0x21')](handleEntityNotFound(_0x4337fd,null))[_0xceab('0x21')](function(_0x9c29b1){if(_0x9c29b1){_0x4e03a5[_0xceab('0x28')]=_[_0xceab('0x29')](db[_0xceab('0x58')]['rawAttributes']);_0x4e03a5[_0xceab('0x2a')]=_[_0xceab('0x29')](_0x246412[_0xceab('0x2a')]);_0x4e03a5[_0xceab('0x2b')]=_[_0xceab('0x2c')](_0x4e03a5['model'],_0x4e03a5['query']);_0x2dab68[_0xceab('0x2d')]=_['intersection'](_0x4e03a5[_0xceab('0x28')],qs[_0xceab('0x45')](_0x246412['query'][_0xceab('0x45')]));_0x2dab68[_0xceab('0x2d')]=_0x2dab68[_0xceab('0x2d')]['length']?_0x2dab68[_0xceab('0x2d')]:_0x4e03a5[_0xceab('0x28')];if(!_0x246412[_0xceab('0x2a')][_0xceab('0x2f')](_0xceab('0x30'))){_0x2dab68[_0xceab('0x31')]=qs['limit'](_0x246412[_0xceab('0x2a')]['limit']);_0x2dab68[_0xceab('0x1a')]=qs[_0xceab('0x1a')](_0x246412[_0xceab('0x2a')][_0xceab('0x1a')]);}_0x2dab68[_0xceab('0x32')]=qs['sort'](_0x246412['query'][_0xceab('0x33')]);_0x2dab68[_0xceab('0x34')]=qs['filters'](_[_0xceab('0x35')](_0x246412[_0xceab('0x2a')],_0x4e03a5[_0xceab('0x2b')]));_0x2dab68['where'][_0xceab('0x59')]=_0x9c29b1['id'];if(_0x246412[_0xceab('0x2a')][_0xceab('0x36')]){_0x2dab68[_0xceab('0x34')]=_[_0xceab('0x37')](_0x2dab68[_0xceab('0x34')],{'$or':_['map'](_0x2dab68['attributes'],function(_0x453a24){var _0x353f50={};_0x353f50[_0x453a24]={'$like':'%'+_0x246412[_0xceab('0x2a')]['filter']+'%'};return _0x353f50;})});}_0x2dab68=_[_0xceab('0x37')]({},_0x2dab68,_0x246412[_0xceab('0x3c')]);return db[_0xceab('0x58')][_0xceab('0x19')]({'where':_0x2dab68[_0xceab('0x34')]})[_0xceab('0x21')](function(_0x407e05){_0x113b31[_0xceab('0x19')]=_0x407e05;if(_0x246412['query'][_0xceab('0x3d')]){_0x2dab68[_0xceab('0x3e')]=[{'all':!![]}];}return db[_0xceab('0x58')][_0xceab('0x3f')](_0x2dab68);})[_0xceab('0x21')](function(_0x41ab11){_0x113b31[_0xceab('0x40')]=_0x41ab11;return _0x113b31;});}})[_0xceab('0x21')](respondWithFilteredResult(_0x4337fd,_0x2dab68))[_0xceab('0x41')](handleError(_0x4337fd,null));};function char(_0x1bdf74){return _0xceab('0x5a')===typeof _0x1bdf74?String['fromCharCode'][_0xceab('0x1c')](null,arguments):_0x1bdf74;}function needsEncapsulation(_0x513dcc){return!!_0x513dcc&&(_0x513dcc[_0xceab('0x5b')]()[_0xceab('0x5c')](char(0xd))>=0x0||_0x513dcc[_0xceab('0x5b')]()[_0xceab('0x5c')](char(0xa))>=0x0||_0x513dcc[_0xceab('0x5b')]()['indexOf'](char(0x2c))>=0x0||_0x513dcc['toString']()['indexOf'](char(0x22))>=0x0);}function encapsulate(_0x2b1d7a){var _0x4e212f=char(0x22),_0x1cc67a='\x5c'+char(0x22),_0x280086=_0x2b1d7a['toString']()['replace'](new RegExp(_0x4e212f,'g'),_0x1cc67a);return _0x4e212f+_0x280086+_0x4e212f;}exports[_0xceab('0x5d')]=function(_0xa73ba2,_0x283aea,_0x4d089c){var _0x51fad2,_0x4cce38;var _0x599632={'where':{'ProjectId':_0xa73ba2[_0xceab('0x43')]['id']}};if(_0xa73ba2['query'][_0xceab('0x5e')]){_0x599632[_0xceab('0x34')][_0xceab('0x5f')]=JSON[_0xceab('0x60')](_0xa73ba2[_0xceab('0x2a')]['startTime']);}return db[_0xceab('0x55')][_0xceab('0x3f')](_0x599632)[_0xceab('0x21')](handleEntityNotFound(_0x283aea,null))[_0xceab('0x21')](function(_0x9ef9e){if(_0x9ef9e){_0x51fad2=_0x9ef9e;return db[_0xceab('0x61')]['findAll']({'where':{'SessionId':{'$in':_[_0xceab('0x38')](_0x51fad2,'id')},'ProjectId':_0xa73ba2['params']['id']},'order':_0xceab('0x62')});}})['then'](handleEntityNotFound(_0x283aea,null))[_0xceab('0x21')](function(_0x429379){if(_0x429379){_0x4cce38=_0x429379;var _0x5d7b29={};for(var _0x443cd0=0x0,_0x26e2cb=_0x4cce38[_0xceab('0x2e')];_0x443cd0<_0x26e2cb;_0x443cd0++){if(!_0x5d7b29['hasOwnProperty'](_0x4cce38[_0x443cd0][_0xceab('0x63')])){_0x5d7b29[_0x4cce38[_0x443cd0][_0xceab('0x63')]]=needsEncapsulation(_0x4cce38[_0x443cd0][_0xceab('0x64')])?encapsulate(_0x4cce38[_0x443cd0][_0xceab('0x64')]):_0x4cce38[_0x443cd0][_0xceab('0x64')];}}var _0x590062=[],_0x3d98c5={};for(var _0xeebfda=0x0,_0x2de779=_0x51fad2[_0xceab('0x2e')];_0xeebfda<_0x2de779;_0xeebfda++){_0x3d98c5={'ProjectId':_0xa73ba2[_0xceab('0x43')]['id'],'SessionId':_0x51fad2[_0xeebfda]['id'],'StartTime':moment(_0x51fad2[_0xeebfda][_0xceab('0x5f')])[_0xceab('0x65')](_0xceab('0x66'))};for(var _0x3bc644=0x0,_0x105428=_0x4cce38[_0xceab('0x2e')];_0x3bc644<_0x105428;_0x3bc644++){if(_0x4cce38[_0x3bc644][_0xceab('0x67')]==_0x51fad2[_0xeebfda]['id']&&_0x5d7b29[_0xceab('0x2f')](_0x4cce38[_0x3bc644][_0xceab('0x63')])){_0x3d98c5[_0x5d7b29[_0x4cce38[_0x3bc644]['questionId']]]=_0x4cce38[_0x3bc644][_0xceab('0x68')];}}for(var _0x4186a4 in _0x5d7b29){if(!_0x3d98c5[_0xceab('0x2f')](_0x5d7b29[_0x4186a4])){_0x3d98c5[_0x5d7b29[_0x4186a4]]=null;}}_0x590062['push'](_0x3d98c5);}return _0x590062;}})[_0xceab('0x21')](function(_0x320c8f){if(!_['isEmpty'](_0x320c8f)){var _0x2918e3=toCsv(_0x320c8f);var _0x5e5d4a=Date['now']();fs[_0xceab('0x69')](util[_0xceab('0x65')](_0xceab('0x6a'),_0xa73ba2[_0xceab('0x43')]['id'],_0x5e5d4a),_0x2918e3);_0x283aea[_0xceab('0x6b')](_0xceab('0x6c'),'attachment;\x20filename='+util[_0xceab('0x65')](_0xceab('0x6d'),_0xa73ba2[_0xceab('0x43')]['id'],_0x5e5d4a));_0x283aea[_0xceab('0x6b')](_0xceab('0x6e'),_0xceab('0x6f'));return _0x283aea[_0xceab('0x70')](util[_0xceab('0x65')]('/tmp/Jscripty_Project_%d_Summary_%s.csv',_0xa73ba2[_0xceab('0x43')]['id'],_0x5e5d4a));}else{return _0x283aea['sendStatus'](0xcc);}})[_0xceab('0x41')](handleError(_0x283aea,null));};
\ No newline at end of file
+var _0x3d42=['crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/environment','sendStatus','status','json','count','offset','limit','Content-Range','apply','reject','update','destroy','then','get','Projects','UserProfileResource','end','error','stack','name','send','index','JscriptyProject','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','order','sort','pick','filter','where','merge','map','type','key','field','findAll','rows','catch','show','params','includeAll','options','find','create','user','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','include','createdAt','updatedAt','body','role','getSessions','hasOwnProperty','ProjectId','JscriptySessionReport','JscriptyAnswerReport','number','toString','indexOf','getSummary','startTime','starttime','questionId','question','format','YYYY-MM-DD\x20HH:mm:ss','answer','push','isEmpty','now','writeFileSync','/tmp/Jscripty_Project_%d_Summary_%s.csv','setHeader','Content-disposition','Content-type','text/csv','download','html-pdf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel'];(function(_0x54188f,_0x40cc29){var _0x4b31f0=function(_0x448b87){while(--_0x448b87){_0x54188f['push'](_0x54188f['shift']());}};_0x4b31f0(++_0x40cc29);}(_0x3d42,0xd2));var _0x23d4=function(_0x44f347,_0x3be1a9){_0x44f347=_0x44f347-0x0;var _0x296219=_0x3d42[_0x44f347];return _0x296219;};'use strict';var pdf=require(_0x23d4('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x23d4('0x1'));var jsonpatch=require(_0x23d4('0x2'));var rp=require(_0x23d4('0x3'));var moment=require(_0x23d4('0x4'));var BPromise=require(_0x23d4('0x5'));var Mustache=require(_0x23d4('0x6'));var util=require(_0x23d4('0x7'));var path=require(_0x23d4('0x8'));var sox=require(_0x23d4('0x9'));var csv=require(_0x23d4('0xa'));var ejs=require(_0x23d4('0xb'));var fs=require('fs');var _=require(_0x23d4('0xc'));var squel=require(_0x23d4('0xd'));var crypto=require(_0x23d4('0xe'));var jsforce=require(_0x23d4('0xf'));var deskjs=require(_0x23d4('0x10'));var toCsv=require(_0x23d4('0xa'));var querystring=require(_0x23d4('0x11'));var Papa=require(_0x23d4('0x12'));var Redis=require(_0x23d4('0x13'));var authService=require(_0x23d4('0x14'));var qs=require(_0x23d4('0x15'));var hardwareService=require(_0x23d4('0x16'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0x23d4('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x18bfcd,_0x20a3e3){_0x20a3e3=_0x20a3e3||0xcc;return function(_0x3f5474){if(_0x3f5474){return _0x18bfcd[_0x23d4('0x18')](_0x20a3e3);}return _0x18bfcd[_0x23d4('0x19')](_0x20a3e3)['end']();};}function respondWithResult(_0x2bb0cb,_0x35dd06){_0x35dd06=_0x35dd06||0xc8;return function(_0x3bc640){if(_0x3bc640){return _0x2bb0cb[_0x23d4('0x19')](_0x35dd06)[_0x23d4('0x1a')](_0x3bc640);}};}function respondWithFilteredResult(_0x2d9508,_0x59c8b3){return function(_0x4e479a){if(_0x4e479a){var _0x58f74d=_0x4e479a[_0x23d4('0x1b')],_0x491555=_0x59c8b3[_0x23d4('0x1c')],_0x1bd140=_0x59c8b3['offset']+_0x59c8b3[_0x23d4('0x1d')],_0x217ed5;if(_0x1bd140>=_0x58f74d){_0x1bd140=_0x58f74d;_0x217ed5=0xc8;}else{_0x217ed5=0xce;}_0x2d9508[_0x23d4('0x19')](_0x217ed5);return _0x2d9508['set'](_0x23d4('0x1e'),_0x491555+'-'+_0x1bd140+'/'+_0x58f74d)[_0x23d4('0x1a')](_0x4e479a);}return null;};}function patchUpdates(_0x1b6109){return function(_0x22d910){try{jsonpatch[_0x23d4('0x1f')](_0x22d910,_0x1b6109,!![]);}catch(_0x162601){return BPromise[_0x23d4('0x20')](_0x162601);}return _0x22d910['save']();};}function saveUpdates(_0x26ebd1,_0x316368){return function(_0x4bf00c){if(_0x4bf00c){return _0x4bf00c[_0x23d4('0x21')](_0x26ebd1)['then'](function(_0x2ebf4d){return _0x2ebf4d;});}return null;};}function removeEntity(_0x120961,_0x412ce8){return function(_0x704e2c){if(_0x704e2c){return _0x704e2c[_0x23d4('0x22')]()[_0x23d4('0x23')](function(){var _0x53846c=_0x704e2c[_0x23d4('0x24')]({'plain':!![]});var _0xdf405b=_0x23d4('0x25');return db[_0x23d4('0x26')][_0x23d4('0x22')]({'where':{'type':_0xdf405b,'resourceId':_0x53846c['id']}})[_0x23d4('0x23')](function(){return _0x704e2c;});})[_0x23d4('0x23')](function(){_0x120961['status'](0xcc)[_0x23d4('0x27')]();});}};}function handleEntityNotFound(_0x1fd4a6,_0x411f77){return function(_0x3e1a38){if(!_0x3e1a38){_0x1fd4a6[_0x23d4('0x18')](0x194);}return _0x3e1a38;};}function handleError(_0x1666a5,_0x16c290){_0x16c290=_0x16c290||0x1f4;return function(_0x2f1fde){logger[_0x23d4('0x28')](_0x2f1fde[_0x23d4('0x29')]);if(_0x2f1fde[_0x23d4('0x2a')]){delete _0x2f1fde[_0x23d4('0x2a')];}_0x1666a5[_0x23d4('0x19')](_0x16c290)[_0x23d4('0x2b')](_0x2f1fde);};}exports[_0x23d4('0x2c')]=function(_0xabe116,_0x12e266){var _0xb6533e={},_0xb90075={},_0x4de85c={'count':0x0,'rows':[]};var _0xe12f80=db[_0x23d4('0x2d')][_0x23d4('0x2e')];_0xb90075[_0x23d4('0x2f')]=_[_0x23d4('0x30')](_0xe12f80);_0xb90075[_0x23d4('0x31')]=_[_0x23d4('0x30')](_0xabe116[_0x23d4('0x31')]);_0xb90075[_0x23d4('0x32')]=_[_0x23d4('0x33')](_0xb90075[_0x23d4('0x2f')],_0xb90075['query']);_0xb6533e[_0x23d4('0x34')]=_[_0x23d4('0x33')](_0xb90075[_0x23d4('0x2f')],qs[_0x23d4('0x35')](_0xabe116[_0x23d4('0x31')][_0x23d4('0x35')]));_0xb6533e[_0x23d4('0x34')]=_0xb6533e[_0x23d4('0x34')][_0x23d4('0x36')]?_0xb6533e['attributes']:_0xb90075[_0x23d4('0x2f')];if(!_0xabe116[_0x23d4('0x31')]['hasOwnProperty'](_0x23d4('0x37'))){_0xb6533e[_0x23d4('0x1d')]=qs['limit'](_0xabe116[_0x23d4('0x31')][_0x23d4('0x1d')]);_0xb6533e[_0x23d4('0x1c')]=qs['offset'](_0xabe116[_0x23d4('0x31')][_0x23d4('0x1c')]);}_0xb6533e[_0x23d4('0x38')]=qs[_0x23d4('0x39')](_0xabe116[_0x23d4('0x31')][_0x23d4('0x39')]);_0xb6533e['where']=qs[_0x23d4('0x32')](_[_0x23d4('0x3a')](_0xabe116['query'],_0xb90075['filters']));if(_0xabe116[_0x23d4('0x31')][_0x23d4('0x3b')]){_0xb6533e[_0x23d4('0x3c')]=_[_0x23d4('0x3d')](_0xb6533e[_0x23d4('0x3c')],{'$or':_[_0x23d4('0x3e')](_0xe12f80,function(_0x10f8fb){if(_0x10f8fb[_0x23d4('0x3f')][_0x23d4('0x40')]!=='VIRTUAL'){var _0x227bf6={};_0x227bf6[_0x10f8fb[_0x23d4('0x41')]]={'$like':'%'+_0xabe116[_0x23d4('0x31')][_0x23d4('0x3b')]+'%'};return _0x227bf6;}})});}_0xb6533e=_['merge']({},_0xb6533e,_0xabe116['options']);var _0x36d279={'where':_0xb6533e[_0x23d4('0x3c')]};return db[_0x23d4('0x2d')][_0x23d4('0x1b')](_0x36d279)[_0x23d4('0x23')](function(_0x52184c){_0x4de85c[_0x23d4('0x1b')]=_0x52184c;if(_0xabe116['query']['includeAll']){_0xb6533e['include']=[{'all':!![]}];}return db[_0x23d4('0x2d')][_0x23d4('0x42')](_0xb6533e);})[_0x23d4('0x23')](function(_0x145557){_0x4de85c[_0x23d4('0x43')]=_0x145557;return _0x4de85c;})[_0x23d4('0x23')](respondWithFilteredResult(_0x12e266,_0xb6533e))[_0x23d4('0x44')](handleError(_0x12e266,null));};exports[_0x23d4('0x45')]=function(_0x2f6a2f,_0x1013c2){var _0x32af91={'raw':![],'where':{'id':_0x2f6a2f[_0x23d4('0x46')]['id']}},_0x2e47f4={};_0x2e47f4[_0x23d4('0x2f')]=_[_0x23d4('0x30')](db[_0x23d4('0x2d')][_0x23d4('0x2e')]);_0x2e47f4[_0x23d4('0x31')]=_[_0x23d4('0x30')](_0x2f6a2f[_0x23d4('0x31')]);_0x2e47f4[_0x23d4('0x32')]=_[_0x23d4('0x33')](_0x2e47f4['model'],_0x2e47f4[_0x23d4('0x31')]);_0x32af91[_0x23d4('0x34')]=_[_0x23d4('0x33')](_0x2e47f4[_0x23d4('0x2f')],qs[_0x23d4('0x35')](_0x2f6a2f[_0x23d4('0x31')]['fields']));_0x32af91[_0x23d4('0x34')]=_0x32af91[_0x23d4('0x34')][_0x23d4('0x36')]?_0x32af91[_0x23d4('0x34')]:_0x2e47f4['model'];if(_0x2f6a2f[_0x23d4('0x31')][_0x23d4('0x47')]){_0x32af91['include']=[{'all':!![]}];}_0x32af91=_['merge']({},_0x32af91,_0x2f6a2f[_0x23d4('0x48')]);return db['JscriptyProject'][_0x23d4('0x49')](_0x32af91)[_0x23d4('0x23')](handleEntityNotFound(_0x1013c2,null))['then'](respondWithResult(_0x1013c2,null))[_0x23d4('0x44')](handleError(_0x1013c2,null));};exports[_0x23d4('0x4a')]=function(_0x41131b,_0x27506c){return db[_0x23d4('0x2d')][_0x23d4('0x4a')](_0x41131b['body'],{})[_0x23d4('0x23')](function(_0x42f605){var _0x45fa32=_0x41131b[_0x23d4('0x4b')]['get']({'plain':!![]});if(!_0x45fa32)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x45fa32['role']===_0x23d4('0x4b')){var _0x209ba1=_0x42f605[_0x23d4('0x24')]({'plain':!![]});var _0x4836d5='Projects';return db[_0x23d4('0x4c')]['find']({'where':{'name':_0x4836d5,'userProfileId':_0x45fa32[_0x23d4('0x4d')]},'raw':!![]})[_0x23d4('0x23')](function(_0x32c1e7){if(_0x32c1e7&&_0x32c1e7[_0x23d4('0x4e')]===0x0){return db[_0x23d4('0x26')][_0x23d4('0x4a')]({'name':_0x209ba1[_0x23d4('0x2a')],'resourceId':_0x209ba1['id'],'type':_0x32c1e7['name'],'sectionId':_0x32c1e7['id']},{})[_0x23d4('0x23')](function(){return _0x42f605;});}else{return _0x42f605;}})['catch'](function(_0x2d2957){logger[_0x23d4('0x28')](_0x23d4('0x4f'),_0x2d2957);throw _0x2d2957;});}return _0x42f605;})[_0x23d4('0x23')](respondWithResult(_0x27506c,0xc9))[_0x23d4('0x44')](handleError(_0x27506c,null));};exports[_0x23d4('0x50')]=function(_0x581106,_0x28b077){var _0x428044={'raw':![],'where':{'id':_0x581106['params']['id']}},_0x55a6eb={};_0x55a6eb[_0x23d4('0x2f')]=_['keys'](db[_0x23d4('0x2d')][_0x23d4('0x2e')]);_0x428044[_0x23d4('0x34')]=_[_0x23d4('0x33')](_0x55a6eb[_0x23d4('0x2f')],qs['fields'](_0x581106[_0x23d4('0x31')][_0x23d4('0x35')]));_0x428044['attributes']=_0x428044[_0x23d4('0x34')]['length']?_0x428044['attributes']:_0x55a6eb['model'];if(_0x581106[_0x23d4('0x31')][_0x23d4('0x47')]){_0x428044[_0x23d4('0x51')]=[{'all':!![]}];}_0x428044=_[_0x23d4('0x3d')]({},_0x428044,_0x581106[_0x23d4('0x48')]);return db['JscriptyProject']['find'](_0x428044)['then'](handleEntityNotFound(_0x28b077,null))[_0x23d4('0x23')](function(_0x2587ba){if(_0x2587ba){var _0x581e41=_0x2587ba[_0x23d4('0x24')]({'plain':!![]});_0x581e41=qs['omit'](_0x581e41,['id',_0x23d4('0x52'),_0x23d4('0x53')]);_0x581106[_0x23d4('0x54')]=_['omit'](_0x581106['body'],['id','createdAt','updatedAt']);return db['JscriptyProject'][_0x23d4('0x4a')](_[_0x23d4('0x3d')](_0x581e41,_0x581106[_0x23d4('0x54')]),{'include':_0x581106[_0x23d4('0x31')][_0x23d4('0x47')]?[{'all':!![]}]:undefined})[_0x23d4('0x23')](function(_0x494085){var _0x2640ce=_0x581106[_0x23d4('0x4b')]['get']({'plain':!![]});if(!_0x2640ce)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x2640ce[_0x23d4('0x55')]===_0x23d4('0x4b')){var _0x24809c=_0x494085[_0x23d4('0x24')]({'plain':!![]});var _0x3b83d2='Projects';return db[_0x23d4('0x4c')][_0x23d4('0x49')]({'where':{'name':_0x3b83d2,'userProfileId':_0x2640ce[_0x23d4('0x4d')]},'raw':!![]})['then'](function(_0xb2d4ff){if(_0xb2d4ff&&_0xb2d4ff[_0x23d4('0x4e')]===0x0){return db['UserProfileResource']['create']({'name':_0x24809c[_0x23d4('0x2a')],'resourceId':_0x24809c['id'],'type':_0xb2d4ff[_0x23d4('0x2a')],'sectionId':_0xb2d4ff['id']},{})[_0x23d4('0x23')](function(){return _0x494085;});}else{return _0x494085;}})[_0x23d4('0x44')](function(_0x2db70a){logger[_0x23d4('0x28')](_0x23d4('0x4f'),_0x2db70a);throw _0x2db70a;});}return _0x494085;});}})[_0x23d4('0x23')](respondWithResult(_0x28b077,0xc9))[_0x23d4('0x44')](handleError(_0x28b077,null));};exports[_0x23d4('0x21')]=function(_0xc042ff,_0x3fdefb){if(_0xc042ff['body']['id']){delete _0xc042ff[_0x23d4('0x54')]['id'];}return db[_0x23d4('0x2d')][_0x23d4('0x49')]({'where':{'id':_0xc042ff[_0x23d4('0x46')]['id']}})[_0x23d4('0x23')](handleEntityNotFound(_0x3fdefb,null))[_0x23d4('0x23')](saveUpdates(_0xc042ff[_0x23d4('0x54')],null))[_0x23d4('0x23')](respondWithResult(_0x3fdefb,null))[_0x23d4('0x44')](handleError(_0x3fdefb,null));};exports['destroy']=function(_0x7369e7,_0x1a5976){return db[_0x23d4('0x2d')][_0x23d4('0x49')]({'where':{'id':_0x7369e7['params']['id']}})[_0x23d4('0x23')](handleEntityNotFound(_0x1a5976,null))['then'](removeEntity(_0x1a5976,null))[_0x23d4('0x44')](handleError(_0x1a5976,null));};exports[_0x23d4('0x56')]=function(_0xe7d730,_0xea0f90,_0x4ec742){var _0x57e3b0={'raw':!![],'where':{}};var _0x29ba74={};var _0x34ca4c={'count':0x0,'rows':[]};return db[_0x23d4('0x2d')]['findOne']({'where':{'id':_0xe7d730[_0x23d4('0x46')]['id']}})[_0x23d4('0x23')](handleEntityNotFound(_0xea0f90,null))[_0x23d4('0x23')](function(_0x2972db){if(_0x2972db){_0x29ba74[_0x23d4('0x2f')]=_[_0x23d4('0x30')](db['JscriptySessionReport'][_0x23d4('0x2e')]);_0x29ba74[_0x23d4('0x31')]=_[_0x23d4('0x30')](_0xe7d730['query']);_0x29ba74['filters']=_[_0x23d4('0x33')](_0x29ba74[_0x23d4('0x2f')],_0x29ba74[_0x23d4('0x31')]);_0x57e3b0[_0x23d4('0x34')]=_[_0x23d4('0x33')](_0x29ba74[_0x23d4('0x2f')],qs['fields'](_0xe7d730[_0x23d4('0x31')][_0x23d4('0x35')]));_0x57e3b0['attributes']=_0x57e3b0[_0x23d4('0x34')]['length']?_0x57e3b0[_0x23d4('0x34')]:_0x29ba74[_0x23d4('0x2f')];if(!_0xe7d730['query'][_0x23d4('0x57')](_0x23d4('0x37'))){_0x57e3b0['limit']=qs[_0x23d4('0x1d')](_0xe7d730['query']['limit']);_0x57e3b0[_0x23d4('0x1c')]=qs[_0x23d4('0x1c')](_0xe7d730[_0x23d4('0x31')][_0x23d4('0x1c')]);}_0x57e3b0[_0x23d4('0x38')]=qs[_0x23d4('0x39')](_0xe7d730[_0x23d4('0x31')][_0x23d4('0x39')]);_0x57e3b0[_0x23d4('0x3c')]=qs[_0x23d4('0x32')](_[_0x23d4('0x3a')](_0xe7d730[_0x23d4('0x31')],_0x29ba74[_0x23d4('0x32')]));_0x57e3b0[_0x23d4('0x3c')][_0x23d4('0x58')]=_0x2972db['id'];if(_0xe7d730[_0x23d4('0x31')][_0x23d4('0x3b')]){_0x57e3b0[_0x23d4('0x3c')]=_[_0x23d4('0x3d')](_0x57e3b0[_0x23d4('0x3c')],{'$or':_[_0x23d4('0x3e')](_0x57e3b0[_0x23d4('0x34')],function(_0x170ef6){var _0x225d18={};_0x225d18[_0x170ef6]={'$like':'%'+_0xe7d730[_0x23d4('0x31')][_0x23d4('0x3b')]+'%'};return _0x225d18;})});}_0x57e3b0=_[_0x23d4('0x3d')]({},_0x57e3b0,_0xe7d730[_0x23d4('0x48')]);return db[_0x23d4('0x59')][_0x23d4('0x1b')]({'where':_0x57e3b0[_0x23d4('0x3c')]})[_0x23d4('0x23')](function(_0x581f54){_0x34ca4c[_0x23d4('0x1b')]=_0x581f54;if(_0xe7d730['query']['includeAll']){_0x57e3b0[_0x23d4('0x51')]=[{'all':!![]}];}return db[_0x23d4('0x59')][_0x23d4('0x42')](_0x57e3b0);})[_0x23d4('0x23')](function(_0x166be7){_0x34ca4c[_0x23d4('0x43')]=_0x166be7;return _0x34ca4c;});}})['then'](respondWithFilteredResult(_0xea0f90,_0x57e3b0))['catch'](handleError(_0xea0f90,null));};exports['getAnswers']=function(_0x46f4f2,_0x43d755,_0x52354c){var _0x5a017a={'raw':!![],'where':{}};var _0x26ab0d={};var _0x41a163={'count':0x0,'rows':[]};return db[_0x23d4('0x2d')]['findOne']({'where':{'id':_0x46f4f2[_0x23d4('0x46')]['id']}})[_0x23d4('0x23')](handleEntityNotFound(_0x43d755,null))[_0x23d4('0x23')](function(_0x35b76a){if(_0x35b76a){_0x26ab0d[_0x23d4('0x2f')]=_[_0x23d4('0x30')](db[_0x23d4('0x5a')]['rawAttributes']);_0x26ab0d[_0x23d4('0x31')]=_[_0x23d4('0x30')](_0x46f4f2[_0x23d4('0x31')]);_0x26ab0d[_0x23d4('0x32')]=_[_0x23d4('0x33')](_0x26ab0d['model'],_0x26ab0d[_0x23d4('0x31')]);_0x5a017a[_0x23d4('0x34')]=_['intersection'](_0x26ab0d[_0x23d4('0x2f')],qs[_0x23d4('0x35')](_0x46f4f2[_0x23d4('0x31')][_0x23d4('0x35')]));_0x5a017a[_0x23d4('0x34')]=_0x5a017a[_0x23d4('0x34')][_0x23d4('0x36')]?_0x5a017a['attributes']:_0x26ab0d['model'];if(!_0x46f4f2['query'][_0x23d4('0x57')](_0x23d4('0x37'))){_0x5a017a['limit']=qs[_0x23d4('0x1d')](_0x46f4f2[_0x23d4('0x31')][_0x23d4('0x1d')]);_0x5a017a[_0x23d4('0x1c')]=qs[_0x23d4('0x1c')](_0x46f4f2['query']['offset']);}_0x5a017a[_0x23d4('0x38')]=qs[_0x23d4('0x39')](_0x46f4f2[_0x23d4('0x31')][_0x23d4('0x39')]);_0x5a017a['where']=qs[_0x23d4('0x32')](_[_0x23d4('0x3a')](_0x46f4f2[_0x23d4('0x31')],_0x26ab0d[_0x23d4('0x32')]));_0x5a017a[_0x23d4('0x3c')][_0x23d4('0x58')]=_0x35b76a['id'];if(_0x46f4f2[_0x23d4('0x31')][_0x23d4('0x3b')]){_0x5a017a[_0x23d4('0x3c')]=_[_0x23d4('0x3d')](_0x5a017a[_0x23d4('0x3c')],{'$or':_['map'](_0x5a017a[_0x23d4('0x34')],function(_0x7cc0a6){var _0x37c879={};_0x37c879[_0x7cc0a6]={'$like':'%'+_0x46f4f2[_0x23d4('0x31')]['filter']+'%'};return _0x37c879;})});}_0x5a017a=_[_0x23d4('0x3d')]({},_0x5a017a,_0x46f4f2[_0x23d4('0x48')]);return db[_0x23d4('0x5a')][_0x23d4('0x1b')]({'where':_0x5a017a[_0x23d4('0x3c')]})[_0x23d4('0x23')](function(_0x306f0f){_0x41a163[_0x23d4('0x1b')]=_0x306f0f;if(_0x46f4f2['query'][_0x23d4('0x47')]){_0x5a017a[_0x23d4('0x51')]=[{'all':!![]}];}return db['JscriptyAnswerReport'][_0x23d4('0x42')](_0x5a017a);})['then'](function(_0x175452){_0x41a163['rows']=_0x175452;return _0x41a163;});}})[_0x23d4('0x23')](respondWithFilteredResult(_0x43d755,_0x5a017a))['catch'](handleError(_0x43d755,null));};function char(_0x1248d3){return _0x23d4('0x5b')===typeof _0x1248d3?String['fromCharCode'][_0x23d4('0x1f')](null,arguments):_0x1248d3;}function needsEncapsulation(_0xbcede0){return!!_0xbcede0&&(_0xbcede0[_0x23d4('0x5c')]()[_0x23d4('0x5d')](char(0xd))>=0x0||_0xbcede0['toString']()['indexOf'](char(0xa))>=0x0||_0xbcede0[_0x23d4('0x5c')]()[_0x23d4('0x5d')](char(0x2c))>=0x0||_0xbcede0['toString']()[_0x23d4('0x5d')](char(0x22))>=0x0);}function encapsulate(_0x585640){var _0x43e79b=char(0x22),_0x43f6fa='\x5c'+char(0x22),_0x143d21=_0x585640[_0x23d4('0x5c')]()['replace'](new RegExp(_0x43e79b,'g'),_0x43f6fa);return _0x43e79b+_0x143d21+_0x43e79b;}exports[_0x23d4('0x5e')]=function(_0x1af605,_0xc222c0,_0x164ef1){var _0x524668,_0x197c31;var _0xd90abf={'where':{'ProjectId':_0x1af605[_0x23d4('0x46')]['id']}};if(_0x1af605[_0x23d4('0x31')][_0x23d4('0x5f')]){_0xd90abf[_0x23d4('0x3c')][_0x23d4('0x60')]=JSON['parse'](_0x1af605[_0x23d4('0x31')][_0x23d4('0x5f')]);}return db[_0x23d4('0x59')][_0x23d4('0x42')](_0xd90abf)[_0x23d4('0x23')](handleEntityNotFound(_0xc222c0,null))[_0x23d4('0x23')](function(_0x4c9733){if(_0x4c9733){_0x524668=_0x4c9733;return db['JscriptyQuestionReport'][_0x23d4('0x42')]({'where':{'SessionId':{'$in':_[_0x23d4('0x3e')](_0x524668,'id')},'ProjectId':_0x1af605['params']['id']},'order':'-createdAt'});}})[_0x23d4('0x23')](handleEntityNotFound(_0xc222c0,null))[_0x23d4('0x23')](function(_0x448226){if(_0x448226){_0x197c31=_0x448226;var _0x168364={};for(var _0x4c30ea=0x0,_0x2470c8=_0x197c31['length'];_0x4c30ea<_0x2470c8;_0x4c30ea++){if(!_0x168364[_0x23d4('0x57')](_0x197c31[_0x4c30ea][_0x23d4('0x61')])){_0x168364[_0x197c31[_0x4c30ea][_0x23d4('0x61')]]=needsEncapsulation(_0x197c31[_0x4c30ea][_0x23d4('0x62')])?encapsulate(_0x197c31[_0x4c30ea][_0x23d4('0x62')]):_0x197c31[_0x4c30ea][_0x23d4('0x62')];}}var _0x3c5dec=[],_0x202e36={};for(var _0x58cbb0=0x0,_0x263526=_0x524668['length'];_0x58cbb0<_0x263526;_0x58cbb0++){_0x202e36={'ProjectId':_0x1af605[_0x23d4('0x46')]['id'],'SessionId':_0x524668[_0x58cbb0]['id'],'StartTime':moment(_0x524668[_0x58cbb0][_0x23d4('0x60')])[_0x23d4('0x63')](_0x23d4('0x64'))};for(var _0x5f379e=0x0,_0x44093e=_0x197c31[_0x23d4('0x36')];_0x5f379e<_0x44093e;_0x5f379e++){if(_0x197c31[_0x5f379e]['SessionId']==_0x524668[_0x58cbb0]['id']&&_0x168364[_0x23d4('0x57')](_0x197c31[_0x5f379e]['questionId'])){_0x202e36[_0x168364[_0x197c31[_0x5f379e][_0x23d4('0x61')]]]=_0x197c31[_0x5f379e][_0x23d4('0x65')];}}for(var _0x1212b6 in _0x168364){if(!_0x202e36['hasOwnProperty'](_0x168364[_0x1212b6])){_0x202e36[_0x168364[_0x1212b6]]=null;}}_0x3c5dec[_0x23d4('0x66')](_0x202e36);}return _0x3c5dec;}})[_0x23d4('0x23')](function(_0x48705e){if(!_[_0x23d4('0x67')](_0x48705e)){var _0x475bc4=toCsv(_0x48705e);var _0x4b717=Date[_0x23d4('0x68')]();fs[_0x23d4('0x69')](util[_0x23d4('0x63')](_0x23d4('0x6a'),_0x1af605['params']['id'],_0x4b717),_0x475bc4);_0xc222c0[_0x23d4('0x6b')](_0x23d4('0x6c'),'attachment;\x20filename='+util[_0x23d4('0x63')]('Jscripty_Project_%d_Summary_%s.csv',_0x1af605[_0x23d4('0x46')]['id'],_0x4b717));_0xc222c0['setHeader'](_0x23d4('0x6d'),_0x23d4('0x6e'));return _0xc222c0[_0x23d4('0x6f')](util[_0x23d4('0x63')](_0x23d4('0x6a'),_0x1af605[_0x23d4('0x46')]['id'],_0x4b717));}else{return _0xc222c0[_0x23d4('0x18')](0xcc);}})['catch'](handleError(_0xc222c0,null));};
\ No newline at end of file
index 550e4c4..fdca0fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7163=['lodash','api','moment','bluebird','path','rimraf','../../config/environment','./jscriptyProject.attributes','define','JscriptyProject','jscripty_projects'];(function(_0x3ab928,_0x2b990b){var _0xf47692=function(_0x311b8e){while(--_0x311b8e){_0x3ab928['push'](_0x3ab928['shift']());}};_0xf47692(++_0x2b990b);}(_0x7163,0x1ef));var _0x3716=function(_0x32f7d7,_0x54231b){_0x32f7d7=_0x32f7d7-0x0;var _0x133d09=_0x7163[_0x32f7d7];return _0x133d09;};'use strict';var _=require(_0x3716('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x3716('0x1'));var moment=require(_0x3716('0x2'));var BPromise=require(_0x3716('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x3716('0x4'));var rimraf=require(_0x3716('0x5'));var config=require(_0x3716('0x6'));var attributes=require(_0x3716('0x7'));module['exports']=function(_0x5c81bb,_0x3112a7){return _0x5c81bb[_0x3716('0x8')](_0x3716('0x9'),attributes,{'tableName':_0x3716('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2b0a=['../../config/environment','./jscriptyProject.attributes','exports','jscripty_projects','lodash','util','api','rimraf'];(function(_0x15bbe6,_0x3a8547){var _0x5b7128=function(_0x408c91){while(--_0x408c91){_0x15bbe6['push'](_0x15bbe6['shift']());}};_0x5b7128(++_0x3a8547);}(_0x2b0a,0x84));var _0xa2b0=function(_0x5a8e4e,_0x3d3283){_0x5a8e4e=_0x5a8e4e-0x0;var _0xa5a96b=_0x2b0a[_0x5a8e4e];return _0xa5a96b;};'use strict';var _=require(_0xa2b0('0x0'));var util=require(_0xa2b0('0x1'));var logger=require('../../config/logger')(_0xa2b0('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0xa2b0('0x3'));var config=require(_0xa2b0('0x4'));var attributes=require(_0xa2b0('0x5'));module[_0xa2b0('0x6')]=function(_0x31fab2,_0xa4e906){return _0x31fab2['define']('JscriptyProject',attributes,{'tableName':_0xa2b0('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index c5dbfac..318f9be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x905c=['../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','JscriptyProject,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','info','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb'];(function(_0x469ac7,_0x38e416){var _0x22f3b0=function(_0x1a1447){while(--_0x1a1447){_0x469ac7['push'](_0x469ac7['shift']());}};_0x22f3b0(++_0x38e416);}(_0x905c,0xf7));var _0xc905=function(_0x58f06e,_0x43472b){_0x58f06e=_0x58f06e-0x0;var _0x564a9a=_0x905c[_0x58f06e];return _0x564a9a;};'use strict';var _=require(_0xc905('0x0'));var util=require(_0xc905('0x1'));var moment=require(_0xc905('0x2'));var BPromise=require(_0xc905('0x3'));var rs=require(_0xc905('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xc905('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xc905('0x6'))(_0xc905('0x7'));var config=require(_0xc905('0x8'));var jayson=require(_0xc905('0x9'));var client=jayson[_0xc905('0xa')][_0xc905('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x1ad650,_0x57c792,_0x3fc687){return new BPromise(function(_0x15c2c1,_0x8c47f){return client[_0xc905('0xc')](_0x1ad650,_0x3fc687)[_0xc905('0xd')](function(_0x2722b8){logger['info'](_0xc905('0xe'),_0x57c792,_0xc905('0xf'));logger[_0xc905('0x10')]('JscriptyProject,\x20%s,\x20%s,\x20%s',_0x57c792,_0xc905('0xf'),JSON[_0xc905('0x11')](_0x2722b8));if(_0x2722b8[_0xc905('0x12')]){if(_0x2722b8[_0xc905('0x12')]['code']===0x1f4){logger[_0xc905('0x12')](_0xc905('0xe'),_0x57c792,_0x2722b8[_0xc905('0x12')][_0xc905('0x13')]);return _0x8c47f(_0x2722b8[_0xc905('0x12')][_0xc905('0x13')]);}logger['error'](_0xc905('0xe'),_0x57c792,_0x2722b8['error']['message']);return _0x15c2c1(_0x2722b8[_0xc905('0x12')][_0xc905('0x13')]);}else{logger[_0xc905('0x14')](_0xc905('0xe'),_0x57c792,_0xc905('0xf'));_0x15c2c1(_0x2722b8[_0xc905('0x15')][_0xc905('0x13')]);}})[_0xc905('0x16')](function(_0x5aec79){logger[_0xc905('0x12')](_0xc905('0xe'),_0x57c792,_0x5aec79);_0x8c47f(_0x5aec79);});});}
\ No newline at end of file
+var _0xea0d=['JscriptyProject,\x20%s,\x20%s','debug','stringify','error','code','message','request\x20sent','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','jayson/promise','client','http','then'];(function(_0x3ab51d,_0x2fa01d){var _0x29a04e=function(_0x7807b0){while(--_0x7807b0){_0x3ab51d['push'](_0x3ab51d['shift']());}};_0x29a04e(++_0x2fa01d);}(_0xea0d,0x8d));var _0xdea0=function(_0xea81a1,_0xb28e9e){_0xea81a1=_0xea81a1-0x0;var _0x2cd030=_0xea0d[_0xea81a1];return _0x2cd030;};'use strict';var _=require(_0xdea0('0x0'));var util=require(_0xdea0('0x1'));var moment=require(_0xdea0('0x2'));var BPromise=require(_0xdea0('0x3'));var rs=require(_0xdea0('0x4'));var fs=require('fs');var Redis=require(_0xdea0('0x5'));var db=require(_0xdea0('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0xdea0('0x7'))(_0xdea0('0x8'));var config=require('../../config/environment');var jayson=require(_0xdea0('0x9'));var client=jayson[_0xdea0('0xa')][_0xdea0('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x2fe941,_0x1b2585,_0x5aa0c2){return new BPromise(function(_0x2b77b9,_0x5cb3a0){return client['request'](_0x2fe941,_0x5aa0c2)[_0xdea0('0xc')](function(_0x578df2){logger['info'](_0xdea0('0xd'),_0x1b2585,'request\x20sent');logger[_0xdea0('0xe')]('JscriptyProject,\x20%s,\x20%s,\x20%s',_0x1b2585,'request\x20sent',JSON[_0xdea0('0xf')](_0x578df2));if(_0x578df2['error']){if(_0x578df2[_0xdea0('0x10')][_0xdea0('0x11')]===0x1f4){logger[_0xdea0('0x10')](_0xdea0('0xd'),_0x1b2585,_0x578df2['error'][_0xdea0('0x12')]);return _0x5cb3a0(_0x578df2['error'][_0xdea0('0x12')]);}logger[_0xdea0('0x10')](_0xdea0('0xd'),_0x1b2585,_0x578df2[_0xdea0('0x10')][_0xdea0('0x12')]);return _0x2b77b9(_0x578df2[_0xdea0('0x10')][_0xdea0('0x12')]);}else{logger['info'](_0xdea0('0xd'),_0x1b2585,_0xdea0('0x13'));_0x2b77b9(_0x578df2[_0xdea0('0x14')][_0xdea0('0x12')]);}})[_0xdea0('0x15')](function(_0x2f6bf5){logger['error'](_0xdea0('0xd'),_0x1b2585,_0x2f6bf5);_0x5cb3a0(_0x2f6bf5);});});}
\ No newline at end of file
index 16ce1d2..8b2472f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdb37=['get','isAuthenticated','index','/describe','describe','/:id','show','post','create','put','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./jscriptyQuestionReport.controller'];(function(_0x1f69d3,_0x4d1d40){var _0x491b42=function(_0x45d377){while(--_0x45d377){_0x1f69d3['push'](_0x1f69d3['shift']());}};_0x491b42(++_0x4d1d40);}(_0xdb37,0x1d3));var _0x7db3=function(_0x56a4f7,_0x56fe21){_0x56a4f7=_0x56a4f7-0x0;var _0x372152=_0xdb37[_0x56a4f7];return _0x372152;};'use strict';var multer=require(_0x7db3('0x0'));var util=require(_0x7db3('0x1'));var path=require(_0x7db3('0x2'));var timeout=require('connect-timeout');var express=require(_0x7db3('0x3'));var router=express['Router']();var auth=require(_0x7db3('0x4'));var interaction=require(_0x7db3('0x5'));var config=require(_0x7db3('0x6'));var controller=require(_0x7db3('0x7'));router[_0x7db3('0x8')]('/',auth[_0x7db3('0x9')](),controller[_0x7db3('0xa')]);router[_0x7db3('0x8')](_0x7db3('0xb'),auth[_0x7db3('0x9')](),controller[_0x7db3('0xc')]);router[_0x7db3('0x8')](_0x7db3('0xd'),auth[_0x7db3('0x9')](),controller[_0x7db3('0xe')]);router[_0x7db3('0xf')]('/',auth[_0x7db3('0x9')](),controller[_0x7db3('0x10')]);router[_0x7db3('0x11')](_0x7db3('0xd'),auth['isAuthenticated'](),controller['update']);router['delete'](_0x7db3('0xd'),auth[_0x7db3('0x9')](),controller['destroy']);module[_0x7db3('0x12')]=router;
\ No newline at end of file
+var _0x5f5d=['connect-timeout','Router','../../components/auth/service','../../config/environment','index','get','/describe','isAuthenticated','describe','/:id','show','post','create','put','update','delete','destroy','exports','multer','util'];(function(_0x365ae8,_0x1a0c59){var _0x16f6b5=function(_0x1f39e4){while(--_0x1f39e4){_0x365ae8['push'](_0x365ae8['shift']());}};_0x16f6b5(++_0x1a0c59);}(_0x5f5d,0x1de));var _0xd5f5=function(_0xea0a42,_0x788de3){_0xea0a42=_0xea0a42-0x0;var _0x43846d=_0x5f5d[_0xea0a42];return _0x43846d;};'use strict';var multer=require(_0xd5f5('0x0'));var util=require(_0xd5f5('0x1'));var path=require('path');var timeout=require(_0xd5f5('0x2'));var express=require('express');var router=express[_0xd5f5('0x3')]();var auth=require(_0xd5f5('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xd5f5('0x5'));var controller=require('./jscriptyQuestionReport.controller');router['get']('/',auth['isAuthenticated'](),controller[_0xd5f5('0x6')]);router[_0xd5f5('0x7')](_0xd5f5('0x8'),auth[_0xd5f5('0x9')](),controller[_0xd5f5('0xa')]);router[_0xd5f5('0x7')](_0xd5f5('0xb'),auth[_0xd5f5('0x9')](),controller[_0xd5f5('0xc')]);router[_0xd5f5('0xd')]('/',auth['isAuthenticated'](),controller[_0xd5f5('0xe')]);router[_0xd5f5('0xf')](_0xd5f5('0xb'),auth[_0xd5f5('0x9')](),controller[_0xd5f5('0x10')]);router[_0xd5f5('0x11')](_0xd5f5('0xb'),auth[_0xd5f5('0x9')](),controller[_0xd5f5('0x12')]);module[_0xd5f5('0x13')]=router;
\ No newline at end of file
index 2735b77..78e9e79 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9780=['STRING','TEXT','long'];(function(_0x2a56d9,_0x29f568){var _0x241f80=function(_0x12f3c8){while(--_0x12f3c8){_0x2a56d9['push'](_0x2a56d9['shift']());}};_0x241f80(++_0x29f568);}(_0x9780,0x1d4));var _0x0978=function(_0x59f0dc,_0x1e2497){_0x59f0dc=_0x59f0dc-0x0;var _0x5b5445=_0x9780[_0x59f0dc];return _0x5b5445;};'use strict';var Sequelize=require('sequelize');module['exports']={'question':{'type':Sequelize[_0x0978('0x0')]},'answer':{'type':Sequelize[_0x0978('0x1')](_0x0978('0x2'))},'membername':{'type':Sequelize[_0x0978('0x0')]},'projectname':{'type':Sequelize[_0x0978('0x0')]},'queue':{'type':Sequelize[_0x0978('0x0')]},'uniqueid':{'type':Sequelize[_0x0978('0x0')]},'calleridname':{'type':Sequelize[_0x0978('0x0')]},'calleridnum':{'type':Sequelize[_0x0978('0x0')]},'questionId':{'type':Sequelize[_0x0978('0x0')]}};
\ No newline at end of file
+var _0x1d90=['sequelize','STRING','long'];(function(_0x4594ad,_0x3a9ca1){var _0x59f44e=function(_0x4ed666){while(--_0x4ed666){_0x4594ad['push'](_0x4594ad['shift']());}};_0x59f44e(++_0x3a9ca1);}(_0x1d90,0x13e));var _0x01d9=function(_0x262c39,_0x14b574){_0x262c39=_0x262c39-0x0;var _0x371d00=_0x1d90[_0x262c39];return _0x371d00;};'use strict';var Sequelize=require(_0x01d9('0x0'));module['exports']={'question':{'type':Sequelize[_0x01d9('0x1')]},'answer':{'type':Sequelize['TEXT'](_0x01d9('0x2'))},'membername':{'type':Sequelize['STRING']},'projectname':{'type':Sequelize[_0x01d9('0x1')]},'queue':{'type':Sequelize[_0x01d9('0x1')]},'uniqueid':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x01d9('0x1')]},'calleridnum':{'type':Sequelize[_0x01d9('0x1')]},'questionId':{'type':Sequelize[_0x01d9('0x1')]}};
\ No newline at end of file
index fafab24..573e5ce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf61e=['order','sort','where','pick','filter','merge','map','VIRTUAL','options','includeAll','include','findAll','rows','show','params','catch','create','body','find','destroy','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','crypto','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','save','update','then','stack','name','send','index','JscriptyQuestionReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit'];(function(_0xf9af5b,_0x36998d){var _0x208d50=function(_0x2c53f9){while(--_0x2c53f9){_0xf9af5b['push'](_0xf9af5b['shift']());}};_0x208d50(++_0x36998d);}(_0xf61e,0x191));var _0xef61=function(_0x51abcd,_0x501790){_0x51abcd=_0x51abcd-0x0;var _0x30eded=_0xf61e[_0x51abcd];return _0x30eded;};'use strict';var pdf=require(_0xef61('0x0'));var emlformat=require(_0xef61('0x1'));var rimraf=require(_0xef61('0x2'));var zipdir=require(_0xef61('0x3'));var jsonpatch=require(_0xef61('0x4'));var rp=require(_0xef61('0x5'));var moment=require(_0xef61('0x6'));var BPromise=require(_0xef61('0x7'));var Mustache=require(_0xef61('0x8'));var util=require(_0xef61('0x9'));var path=require(_0xef61('0xa'));var sox=require(_0xef61('0xb'));var csv=require('to-csv');var ejs=require(_0xef61('0xc'));var fs=require('fs');var _=require(_0xef61('0xd'));var squel=require('squel');var crypto=require(_0xef61('0xe'));var jsforce=require(_0xef61('0xf'));var deskjs=require(_0xef61('0x10'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xef61('0x11'));var Redis=require(_0xef61('0x12'));var authService=require(_0xef61('0x13'));var qs=require(_0xef61('0x14'));var hardwareService=require(_0xef61('0x15'));var logger=require(_0xef61('0x16'))(_0xef61('0x17'));var utils=require(_0xef61('0x18'));var config=require(_0xef61('0x19'));var db=require(_0xef61('0x1a'))['db'];function respondWithStatusCode(_0x28d4f7,_0x2f203c){_0x2f203c=_0x2f203c||0xcc;return function(_0x114e1f){if(_0x114e1f){return _0x28d4f7[_0xef61('0x1b')](_0x2f203c);}return _0x28d4f7['status'](_0x2f203c)[_0xef61('0x1c')]();};}function respondWithResult(_0x58d9a0,_0x106472){_0x106472=_0x106472||0xc8;return function(_0x1db2a9){if(_0x1db2a9){return _0x58d9a0[_0xef61('0x1d')](_0x106472)[_0xef61('0x1e')](_0x1db2a9);}};}function respondWithFilteredResult(_0x4c64b5,_0x2ac1b2){return function(_0x435beb){if(_0x435beb){var _0x1224c2=_0x435beb[_0xef61('0x1f')],_0x78ff22=_0x2ac1b2['offset'],_0x588a61=_0x2ac1b2[_0xef61('0x20')]+_0x2ac1b2[_0xef61('0x21')],_0x66fa62;if(_0x588a61>=_0x1224c2){_0x588a61=_0x1224c2;_0x66fa62=0xc8;}else{_0x66fa62=0xce;}_0x4c64b5[_0xef61('0x1d')](_0x66fa62);return _0x4c64b5[_0xef61('0x22')](_0xef61('0x23'),_0x78ff22+'-'+_0x588a61+'/'+_0x1224c2)[_0xef61('0x1e')](_0x435beb);}return null;};}function patchUpdates(_0xdd5e38){return function(_0x55f887){try{jsonpatch[_0xef61('0x24')](_0x55f887,_0xdd5e38,!![]);}catch(_0x2c8dad){return BPromise['reject'](_0x2c8dad);}return _0x55f887[_0xef61('0x25')]();};}function saveUpdates(_0x36966a,_0x29c13c){return function(_0x26cf42){if(_0x26cf42){return _0x26cf42[_0xef61('0x26')](_0x36966a)[_0xef61('0x27')](function(_0x92ea33){return _0x92ea33;});}return null;};}function removeEntity(_0x51f9ca,_0x536e9e){return function(_0x3d31c1){if(_0x3d31c1){return _0x3d31c1['destroy']()[_0xef61('0x27')](function(){_0x51f9ca['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x2f0569,_0x5ce99d){return function(_0x53181b){if(!_0x53181b){_0x2f0569[_0xef61('0x1b')](0x194);}return _0x53181b;};}function handleError(_0x3782c6,_0x3ceb14){_0x3ceb14=_0x3ceb14||0x1f4;return function(_0x111bac){logger['error'](_0x111bac[_0xef61('0x28')]);if(_0x111bac['name']){delete _0x111bac[_0xef61('0x29')];}_0x3782c6[_0xef61('0x1d')](_0x3ceb14)[_0xef61('0x2a')](_0x111bac);};}exports[_0xef61('0x2b')]=function(_0x2155f1,_0x45ece2){var _0x258b5a={},_0x23837f={},_0x297df7={'count':0x0,'rows':[]};var _0x1ee27b=db[_0xef61('0x2c')][_0xef61('0x2d')];_0x23837f[_0xef61('0x2e')]=_[_0xef61('0x2f')](_0x1ee27b);_0x23837f[_0xef61('0x30')]=_[_0xef61('0x2f')](_0x2155f1[_0xef61('0x30')]);_0x23837f[_0xef61('0x31')]=_[_0xef61('0x32')](_0x23837f[_0xef61('0x2e')],_0x23837f[_0xef61('0x30')]);_0x258b5a[_0xef61('0x33')]=_['intersection'](_0x23837f['model'],qs[_0xef61('0x34')](_0x2155f1[_0xef61('0x30')][_0xef61('0x34')]));_0x258b5a['attributes']=_0x258b5a[_0xef61('0x33')][_0xef61('0x35')]?_0x258b5a['attributes']:_0x23837f[_0xef61('0x2e')];if(!_0x2155f1['query']['hasOwnProperty'](_0xef61('0x36'))){_0x258b5a['limit']=qs[_0xef61('0x21')](_0x2155f1['query'][_0xef61('0x21')]);_0x258b5a[_0xef61('0x20')]=qs[_0xef61('0x20')](_0x2155f1[_0xef61('0x30')][_0xef61('0x20')]);}_0x258b5a[_0xef61('0x37')]=qs[_0xef61('0x38')](_0x2155f1[_0xef61('0x30')][_0xef61('0x38')]);_0x258b5a[_0xef61('0x39')]=qs['filters'](_[_0xef61('0x3a')](_0x2155f1[_0xef61('0x30')],_0x23837f[_0xef61('0x31')]));if(_0x2155f1[_0xef61('0x30')][_0xef61('0x3b')]){_0x258b5a['where']=_[_0xef61('0x3c')](_0x258b5a[_0xef61('0x39')],{'$or':_[_0xef61('0x3d')](_0x1ee27b,function(_0x53bdb9){if(_0x53bdb9['type']['key']!==_0xef61('0x3e')){var _0x595a5a={};_0x595a5a[_0x53bdb9['field']]={'$like':'%'+_0x2155f1['query'][_0xef61('0x3b')]+'%'};return _0x595a5a;}})});}_0x258b5a=_[_0xef61('0x3c')]({},_0x258b5a,_0x2155f1[_0xef61('0x3f')]);var _0x508dc7={'where':_0x258b5a['where']};return db['JscriptyQuestionReport'][_0xef61('0x1f')](_0x508dc7)[_0xef61('0x27')](function(_0x5e1128){_0x297df7[_0xef61('0x1f')]=_0x5e1128;if(_0x2155f1[_0xef61('0x30')][_0xef61('0x40')]){_0x258b5a[_0xef61('0x41')]=[{'all':!![]}];}return db['JscriptyQuestionReport'][_0xef61('0x42')](_0x258b5a);})[_0xef61('0x27')](function(_0x3103d4){_0x297df7[_0xef61('0x43')]=_0x3103d4;return _0x297df7;})['then'](respondWithFilteredResult(_0x45ece2,_0x258b5a))['catch'](handleError(_0x45ece2,null));};exports[_0xef61('0x44')]=function(_0x462972,_0xd4f102){var _0x53abdb={'raw':!![],'where':{'id':_0x462972[_0xef61('0x45')]['id']}},_0x3eee46={};_0x3eee46[_0xef61('0x2e')]=_[_0xef61('0x2f')](db['JscriptyQuestionReport']['rawAttributes']);_0x3eee46['query']=_[_0xef61('0x2f')](_0x462972[_0xef61('0x30')]);_0x3eee46[_0xef61('0x31')]=_[_0xef61('0x32')](_0x3eee46[_0xef61('0x2e')],_0x3eee46[_0xef61('0x30')]);_0x53abdb[_0xef61('0x33')]=_['intersection'](_0x3eee46[_0xef61('0x2e')],qs[_0xef61('0x34')](_0x462972[_0xef61('0x30')][_0xef61('0x34')]));_0x53abdb['attributes']=_0x53abdb[_0xef61('0x33')][_0xef61('0x35')]?_0x53abdb[_0xef61('0x33')]:_0x3eee46[_0xef61('0x2e')];if(_0x462972[_0xef61('0x30')][_0xef61('0x40')]){_0x53abdb['include']=[{'all':!![]}];}_0x53abdb=_[_0xef61('0x3c')]({},_0x53abdb,_0x462972[_0xef61('0x3f')]);return db[_0xef61('0x2c')]['find'](_0x53abdb)[_0xef61('0x27')](handleEntityNotFound(_0xd4f102,null))[_0xef61('0x27')](respondWithResult(_0xd4f102,null))[_0xef61('0x46')](handleError(_0xd4f102,null));};exports[_0xef61('0x47')]=function(_0x216916,_0x354ab1){return db['JscriptyQuestionReport'][_0xef61('0x47')](_0x216916[_0xef61('0x48')],{})['then'](respondWithResult(_0x354ab1,0xc9))[_0xef61('0x46')](handleError(_0x354ab1,null));};exports[_0xef61('0x26')]=function(_0x183ddd,_0x3dbd56){if(_0x183ddd['body']['id']){delete _0x183ddd[_0xef61('0x48')]['id'];}return db[_0xef61('0x2c')][_0xef61('0x49')]({'where':{'id':_0x183ddd['params']['id']}})[_0xef61('0x27')](handleEntityNotFound(_0x3dbd56,null))[_0xef61('0x27')](saveUpdates(_0x183ddd['body'],null))[_0xef61('0x27')](respondWithResult(_0x3dbd56,null))[_0xef61('0x46')](handleError(_0x3dbd56,null));};exports[_0xef61('0x4a')]=function(_0x2904e0,_0x13bb20){return db[_0xef61('0x2c')][_0xef61('0x49')]({'where':{'id':_0x2904e0['params']['id']}})[_0xef61('0x27')](handleEntityNotFound(_0x13bb20,null))['then'](removeEntity(_0x13bb20,null))[_0xef61('0x46')](handleError(_0x13bb20,null));};exports[_0xef61('0x4b')]=function(_0x3b7004,_0x193f46){return db[_0xef61('0x2c')][_0xef61('0x4b')]()[_0xef61('0x27')](respondWithResult(_0x193f46,null))[_0xef61('0x46')](handleError(_0x193f46,null));};
\ No newline at end of file
+var _0x2484=['attributes','fields','order','sort','pick','filter','where','merge','key','field','options','include','findAll','params','length','includeAll','find','catch','create','body','describe','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','name','send','index','JscriptyQuestionReport','rawAttributes','model','keys','query','filters','intersection'];(function(_0x32d2e3,_0x447277){var _0x5116db=function(_0x3f8f9c){while(--_0x3f8f9c){_0x32d2e3['push'](_0x32d2e3['shift']());}};_0x5116db(++_0x447277);}(_0x2484,0x178));var _0x4248=function(_0x5520c7,_0xbee449){_0x5520c7=_0x5520c7-0x0;var _0x3b0590=_0x2484[_0x5520c7];return _0x3b0590;};'use strict';var pdf=require(_0x4248('0x0'));var emlformat=require(_0x4248('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x4248('0x2'));var jsonpatch=require(_0x4248('0x3'));var rp=require(_0x4248('0x4'));var moment=require(_0x4248('0x5'));var BPromise=require(_0x4248('0x6'));var Mustache=require(_0x4248('0x7'));var util=require(_0x4248('0x8'));var path=require('path');var sox=require(_0x4248('0x9'));var csv=require(_0x4248('0xa'));var ejs=require(_0x4248('0xb'));var fs=require('fs');var _=require(_0x4248('0xc'));var squel=require(_0x4248('0xd'));var crypto=require(_0x4248('0xe'));var jsforce=require('jsforce');var deskjs=require(_0x4248('0xf'));var toCsv=require(_0x4248('0xa'));var querystring=require(_0x4248('0x10'));var Papa=require(_0x4248('0x11'));var Redis=require(_0x4248('0x12'));var authService=require(_0x4248('0x13'));var qs=require(_0x4248('0x14'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x4248('0x15'))('api');var utils=require(_0x4248('0x16'));var config=require(_0x4248('0x17'));var db=require(_0x4248('0x18'))['db'];function respondWithStatusCode(_0x59180d,_0x483f49){_0x483f49=_0x483f49||0xcc;return function(_0xeb5fd1){if(_0xeb5fd1){return _0x59180d['sendStatus'](_0x483f49);}return _0x59180d[_0x4248('0x19')](_0x483f49)[_0x4248('0x1a')]();};}function respondWithResult(_0x201804,_0x3a8be9){_0x3a8be9=_0x3a8be9||0xc8;return function(_0x3a557b){if(_0x3a557b){return _0x201804['status'](_0x3a8be9)[_0x4248('0x1b')](_0x3a557b);}};}function respondWithFilteredResult(_0xada934,_0x1ae491){return function(_0x35308b){if(_0x35308b){var _0x3e7d0a=_0x35308b[_0x4248('0x1c')],_0x51c92e=_0x1ae491[_0x4248('0x1d')],_0x46cfbb=_0x1ae491[_0x4248('0x1d')]+_0x1ae491[_0x4248('0x1e')],_0xe1ab31;if(_0x46cfbb>=_0x3e7d0a){_0x46cfbb=_0x3e7d0a;_0xe1ab31=0xc8;}else{_0xe1ab31=0xce;}_0xada934[_0x4248('0x19')](_0xe1ab31);return _0xada934[_0x4248('0x1f')](_0x4248('0x20'),_0x51c92e+'-'+_0x46cfbb+'/'+_0x3e7d0a)[_0x4248('0x1b')](_0x35308b);}return null;};}function patchUpdates(_0x2c2a0d){return function(_0x2f7547){try{jsonpatch[_0x4248('0x21')](_0x2f7547,_0x2c2a0d,!![]);}catch(_0x1b2f10){return BPromise[_0x4248('0x22')](_0x1b2f10);}return _0x2f7547[_0x4248('0x23')]();};}function saveUpdates(_0x200542,_0x396fc8){return function(_0x5ab53e){if(_0x5ab53e){return _0x5ab53e[_0x4248('0x24')](_0x200542)[_0x4248('0x25')](function(_0x2d674b){return _0x2d674b;});}return null;};}function removeEntity(_0x36ed34,_0x4b6c12){return function(_0x43c75d){if(_0x43c75d){return _0x43c75d[_0x4248('0x26')]()[_0x4248('0x25')](function(){_0x36ed34['status'](0xcc)[_0x4248('0x1a')]();});}};}function handleEntityNotFound(_0x25ffa3,_0x50f032){return function(_0x3bfcf2){if(!_0x3bfcf2){_0x25ffa3['sendStatus'](0x194);}return _0x3bfcf2;};}function handleError(_0x18070b,_0x138ac1){_0x138ac1=_0x138ac1||0x1f4;return function(_0x1daf92){logger[_0x4248('0x27')](_0x1daf92['stack']);if(_0x1daf92[_0x4248('0x28')]){delete _0x1daf92[_0x4248('0x28')];}_0x18070b[_0x4248('0x19')](_0x138ac1)[_0x4248('0x29')](_0x1daf92);};}exports[_0x4248('0x2a')]=function(_0x429641,_0x3e5a78){var _0x302308={},_0x74b7e0={},_0x1f26be={'count':0x0,'rows':[]};var _0x3b29fe=db[_0x4248('0x2b')][_0x4248('0x2c')];_0x74b7e0[_0x4248('0x2d')]=_[_0x4248('0x2e')](_0x3b29fe);_0x74b7e0[_0x4248('0x2f')]=_['keys'](_0x429641[_0x4248('0x2f')]);_0x74b7e0[_0x4248('0x30')]=_[_0x4248('0x31')](_0x74b7e0['model'],_0x74b7e0[_0x4248('0x2f')]);_0x302308[_0x4248('0x32')]=_[_0x4248('0x31')](_0x74b7e0[_0x4248('0x2d')],qs[_0x4248('0x33')](_0x429641[_0x4248('0x2f')][_0x4248('0x33')]));_0x302308['attributes']=_0x302308['attributes']['length']?_0x302308['attributes']:_0x74b7e0['model'];if(!_0x429641['query']['hasOwnProperty']('nolimit')){_0x302308['limit']=qs[_0x4248('0x1e')](_0x429641[_0x4248('0x2f')][_0x4248('0x1e')]);_0x302308[_0x4248('0x1d')]=qs['offset'](_0x429641[_0x4248('0x2f')]['offset']);}_0x302308[_0x4248('0x34')]=qs[_0x4248('0x35')](_0x429641[_0x4248('0x2f')][_0x4248('0x35')]);_0x302308['where']=qs['filters'](_[_0x4248('0x36')](_0x429641[_0x4248('0x2f')],_0x74b7e0[_0x4248('0x30')]));if(_0x429641[_0x4248('0x2f')][_0x4248('0x37')]){_0x302308[_0x4248('0x38')]=_[_0x4248('0x39')](_0x302308[_0x4248('0x38')],{'$or':_['map'](_0x3b29fe,function(_0x58f9c4){if(_0x58f9c4['type'][_0x4248('0x3a')]!=='VIRTUAL'){var _0x3cedaa={};_0x3cedaa[_0x58f9c4[_0x4248('0x3b')]]={'$like':'%'+_0x429641[_0x4248('0x2f')][_0x4248('0x37')]+'%'};return _0x3cedaa;}})});}_0x302308=_[_0x4248('0x39')]({},_0x302308,_0x429641[_0x4248('0x3c')]);var _0x4edf1f={'where':_0x302308[_0x4248('0x38')]};return db['JscriptyQuestionReport'][_0x4248('0x1c')](_0x4edf1f)[_0x4248('0x25')](function(_0x571d63){_0x1f26be[_0x4248('0x1c')]=_0x571d63;if(_0x429641[_0x4248('0x2f')]['includeAll']){_0x302308[_0x4248('0x3d')]=[{'all':!![]}];}return db[_0x4248('0x2b')][_0x4248('0x3e')](_0x302308);})[_0x4248('0x25')](function(_0xb7f152){_0x1f26be['rows']=_0xb7f152;return _0x1f26be;})[_0x4248('0x25')](respondWithFilteredResult(_0x3e5a78,_0x302308))['catch'](handleError(_0x3e5a78,null));};exports['show']=function(_0x33152c,_0x2ac3e4){var _0x897341={'raw':!![],'where':{'id':_0x33152c[_0x4248('0x3f')]['id']}},_0x3a2f6a={};_0x3a2f6a[_0x4248('0x2d')]=_[_0x4248('0x2e')](db[_0x4248('0x2b')][_0x4248('0x2c')]);_0x3a2f6a[_0x4248('0x2f')]=_['keys'](_0x33152c[_0x4248('0x2f')]);_0x3a2f6a[_0x4248('0x30')]=_[_0x4248('0x31')](_0x3a2f6a['model'],_0x3a2f6a['query']);_0x897341['attributes']=_[_0x4248('0x31')](_0x3a2f6a[_0x4248('0x2d')],qs[_0x4248('0x33')](_0x33152c[_0x4248('0x2f')][_0x4248('0x33')]));_0x897341[_0x4248('0x32')]=_0x897341['attributes'][_0x4248('0x40')]?_0x897341[_0x4248('0x32')]:_0x3a2f6a[_0x4248('0x2d')];if(_0x33152c['query'][_0x4248('0x41')]){_0x897341[_0x4248('0x3d')]=[{'all':!![]}];}_0x897341=_[_0x4248('0x39')]({},_0x897341,_0x33152c['options']);return db['JscriptyQuestionReport'][_0x4248('0x42')](_0x897341)[_0x4248('0x25')](handleEntityNotFound(_0x2ac3e4,null))[_0x4248('0x25')](respondWithResult(_0x2ac3e4,null))[_0x4248('0x43')](handleError(_0x2ac3e4,null));};exports['create']=function(_0x2498ce,_0x1108c7){return db['JscriptyQuestionReport'][_0x4248('0x44')](_0x2498ce['body'],{})[_0x4248('0x25')](respondWithResult(_0x1108c7,0xc9))[_0x4248('0x43')](handleError(_0x1108c7,null));};exports['update']=function(_0x31bdfc,_0x5d79d0){if(_0x31bdfc[_0x4248('0x45')]['id']){delete _0x31bdfc[_0x4248('0x45')]['id'];}return db[_0x4248('0x2b')][_0x4248('0x42')]({'where':{'id':_0x31bdfc['params']['id']}})['then'](handleEntityNotFound(_0x5d79d0,null))['then'](saveUpdates(_0x31bdfc[_0x4248('0x45')],null))[_0x4248('0x25')](respondWithResult(_0x5d79d0,null))[_0x4248('0x43')](handleError(_0x5d79d0,null));};exports[_0x4248('0x26')]=function(_0x4c5b11,_0x42f12a){return db[_0x4248('0x2b')][_0x4248('0x42')]({'where':{'id':_0x4c5b11[_0x4248('0x3f')]['id']}})['then'](handleEntityNotFound(_0x42f12a,null))[_0x4248('0x25')](removeEntity(_0x42f12a,null))[_0x4248('0x43')](handleError(_0x42f12a,null));};exports[_0x4248('0x46')]=function(_0x2ed764,_0x141d66){return db[_0x4248('0x2b')][_0x4248('0x46')]()[_0x4248('0x25')](respondWithResult(_0x141d66,null))[_0x4248('0x43')](handleError(_0x141d66,null));};
\ No newline at end of file
index 5942f90..dfb6c40 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x25bb=['./jscriptyQuestionReport.attributes','exports','define','JscriptyQuestionReport','report_jscripty_questions','lodash','util','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment'];(function(_0x247378,_0x34e125){var _0x420dd6=function(_0x23e21c){while(--_0x23e21c){_0x247378['push'](_0x247378['shift']());}};_0x420dd6(++_0x34e125);}(_0x25bb,0x139));var _0xb25b=function(_0x30e34,_0x3d04c9){_0x30e34=_0x30e34-0x0;var _0x2061ff=_0x25bb[_0x30e34];return _0x2061ff;};'use strict';var _=require(_0xb25b('0x0'));var util=require(_0xb25b('0x1'));var logger=require(_0xb25b('0x2'))(_0xb25b('0x3'));var moment=require(_0xb25b('0x4'));var BPromise=require(_0xb25b('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xb25b('0x6'));var rimraf=require(_0xb25b('0x7'));var config=require(_0xb25b('0x8'));var attributes=require(_0xb25b('0x9'));module[_0xb25b('0xa')]=function(_0x1989ad,_0x333740){return _0x1989ad[_0xb25b('0xb')](_0xb25b('0xc'),attributes,{'tableName':_0xb25b('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xa739=['report_jscripty_questions','lodash','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','./jscriptyQuestionReport.attributes','exports','define'];(function(_0x462b3a,_0x52fa71){var _0xbc5daa=function(_0x10dc88){while(--_0x10dc88){_0x462b3a['push'](_0x462b3a['shift']());}};_0xbc5daa(++_0x52fa71);}(_0xa739,0x145));var _0x9a73=function(_0x3bf747,_0x20352d){_0x3bf747=_0x3bf747-0x0;var _0x425334=_0xa739[_0x3bf747];return _0x425334;};'use strict';var _=require(_0x9a73('0x0'));var util=require('util');var logger=require(_0x9a73('0x1'))(_0x9a73('0x2'));var moment=require(_0x9a73('0x3'));var BPromise=require(_0x9a73('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x9a73('0x5'));var rimraf=require(_0x9a73('0x6'));var config=require(_0x9a73('0x7'));var attributes=require(_0x9a73('0x8'));module[_0x9a73('0x9')]=function(_0x5be63e,_0x57fc64){return _0x5be63e[_0x9a73('0xa')]('JscriptyQuestionReport',attributes,{'tableName':_0x9a73('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 0667102..2756cfb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x83b3=['../../config/utils','rpc','../../config/environment','jayson/promise','http','request','JscriptyQuestionReport,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','lodash','util','moment','bluebird','../../mysqldb'];(function(_0x221322,_0x3b59b1){var _0x32bdbb=function(_0x118067){while(--_0x118067){_0x221322['push'](_0x221322['shift']());}};_0x32bdbb(++_0x3b59b1);}(_0x83b3,0x67));var _0x383b=function(_0x3b751b,_0x344f44){_0x3b751b=_0x3b751b-0x0;var _0x3864e0=_0x83b3[_0x3b751b];return _0x3864e0;};'use strict';var _=require(_0x383b('0x0'));var util=require(_0x383b('0x1'));var moment=require(_0x383b('0x2'));var BPromise=require(_0x383b('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x383b('0x4'))['db'];var utils=require(_0x383b('0x5'));var logger=require('../../config/logger')(_0x383b('0x6'));var config=require(_0x383b('0x7'));var jayson=require(_0x383b('0x8'));var client=jayson['client'][_0x383b('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2a53e6,_0x256812,_0x538948){return new BPromise(function(_0x4bc428,_0x437850){return client[_0x383b('0xa')](_0x2a53e6,_0x538948)['then'](function(_0x1d88e4){logger['info'](_0x383b('0xb'),_0x256812,_0x383b('0xc'));logger['debug']('JscriptyQuestionReport,\x20%s,\x20%s,\x20%s',_0x256812,_0x383b('0xc'),JSON[_0x383b('0xd')](_0x1d88e4));if(_0x1d88e4[_0x383b('0xe')]){if(_0x1d88e4[_0x383b('0xe')][_0x383b('0xf')]===0x1f4){logger['error'](_0x383b('0xb'),_0x256812,_0x1d88e4[_0x383b('0xe')][_0x383b('0x10')]);return _0x437850(_0x1d88e4[_0x383b('0xe')]['message']);}logger[_0x383b('0xe')](_0x383b('0xb'),_0x256812,_0x1d88e4['error'][_0x383b('0x10')]);return _0x4bc428(_0x1d88e4['error'][_0x383b('0x10')]);}else{logger['info'](_0x383b('0xb'),_0x256812,_0x383b('0xc'));_0x4bc428(_0x1d88e4[_0x383b('0x11')][_0x383b('0x10')]);}})['catch'](function(_0x5dd191){logger[_0x383b('0xe')](_0x383b('0xb'),_0x256812,_0x5dd191);_0x437850(_0x5dd191);});});}
\ No newline at end of file
+var _0xc059=['rpc','jayson/promise','client','http','request','JscriptyQuestionReport,\x20%s,\x20%s','request\x20sent','debug','JscriptyQuestionReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/logger'];(function(_0x41da16,_0x1e4fd9){var _0x8b9e24=function(_0x496deb){while(--_0x496deb){_0x41da16['push'](_0x41da16['shift']());}};_0x8b9e24(++_0x1e4fd9);}(_0xc059,0x83));var _0x9c05=function(_0xdc0f9,_0x5ecb9b){_0xdc0f9=_0xdc0f9-0x0;var _0x2b7260=_0xc059[_0xdc0f9];return _0x2b7260;};'use strict';var _=require(_0x9c05('0x0'));var util=require(_0x9c05('0x1'));var moment=require(_0x9c05('0x2'));var BPromise=require('bluebird');var rs=require(_0x9c05('0x3'));var fs=require('fs');var Redis=require(_0x9c05('0x4'));var db=require(_0x9c05('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x9c05('0x6'))(_0x9c05('0x7'));var config=require('../../config/environment');var jayson=require(_0x9c05('0x8'));var client=jayson[_0x9c05('0x9')][_0x9c05('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x45b77d,_0x570220,_0xbfb613){return new BPromise(function(_0x5e2b2d,_0x286055){return client[_0x9c05('0xb')](_0x45b77d,_0xbfb613)['then'](function(_0x4f7efe){logger['info'](_0x9c05('0xc'),_0x570220,_0x9c05('0xd'));logger[_0x9c05('0xe')](_0x9c05('0xf'),_0x570220,_0x9c05('0xd'),JSON[_0x9c05('0x10')](_0x4f7efe));if(_0x4f7efe[_0x9c05('0x11')]){if(_0x4f7efe['error'][_0x9c05('0x12')]===0x1f4){logger[_0x9c05('0x11')](_0x9c05('0xc'),_0x570220,_0x4f7efe[_0x9c05('0x11')]['message']);return _0x286055(_0x4f7efe['error'][_0x9c05('0x13')]);}logger['error'](_0x9c05('0xc'),_0x570220,_0x4f7efe[_0x9c05('0x11')][_0x9c05('0x13')]);return _0x5e2b2d(_0x4f7efe['error'][_0x9c05('0x13')]);}else{logger[_0x9c05('0x14')](_0x9c05('0xc'),_0x570220,_0x9c05('0xd'));_0x5e2b2d(_0x4f7efe[_0x9c05('0x15')]['message']);}})[_0x9c05('0x16')](function(_0x174c35){logger[_0x9c05('0x11')](_0x9c05('0xc'),_0x570220,_0x174c35);_0x286055(_0x174c35);});});}
\ No newline at end of file
index fe4ce9a..cc38e6c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x53ad=['util','path','connect-timeout','../../components/auth/service','./jscriptySessionReport.controller','get','/describe','describe','/:id','isAuthenticated','show','/:id/questions','getQuestions','post','create','put','update','exports'];(function(_0x3ceb73,_0x4829e5){var _0xf8ff4f=function(_0x1c6659){while(--_0x1c6659){_0x3ceb73['push'](_0x3ceb73['shift']());}};_0xf8ff4f(++_0x4829e5);}(_0x53ad,0x19e));var _0xd53a=function(_0x6c993a,_0x5ea3ab){_0x6c993a=_0x6c993a-0x0;var _0x27f547=_0x53ad[_0x6c993a];return _0x27f547;};'use strict';var multer=require('multer');var util=require(_0xd53a('0x0'));var path=require(_0xd53a('0x1'));var timeout=require(_0xd53a('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0xd53a('0x3'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xd53a('0x4'));router[_0xd53a('0x5')]('/',auth['isAuthenticated'](),controller['index']);router[_0xd53a('0x5')](_0xd53a('0x6'),auth['isAuthenticated'](),controller[_0xd53a('0x7')]);router[_0xd53a('0x5')](_0xd53a('0x8'),auth[_0xd53a('0x9')](),controller[_0xd53a('0xa')]);router[_0xd53a('0x5')](_0xd53a('0xb'),auth[_0xd53a('0x9')](),controller[_0xd53a('0xc')]);router[_0xd53a('0xd')]('/',auth[_0xd53a('0x9')](),controller[_0xd53a('0xe')]);router[_0xd53a('0xf')](_0xd53a('0x8'),auth[_0xd53a('0x9')](),controller[_0xd53a('0x10')]);router['delete']('/:id',auth[_0xd53a('0x9')](),controller['destroy']);module[_0xd53a('0x11')]=router;
\ No newline at end of file
+var _0xe758=['/describe','/:id','show','/:id/questions','getQuestions','put','delete','destroy','exports','multer','path','connect-timeout','Router','../../components/interaction/service','../../config/environment','./jscriptySessionReport.controller','get','isAuthenticated'];(function(_0x4b2436,_0x452299){var _0x4f5ab2=function(_0x5c6679){while(--_0x5c6679){_0x4b2436['push'](_0x4b2436['shift']());}};_0x4f5ab2(++_0x452299);}(_0xe758,0x15f));var _0x8e75=function(_0x11e09c,_0x2e157d){_0x11e09c=_0x11e09c-0x0;var _0x4b67a7=_0xe758[_0x11e09c];return _0x4b67a7;};'use strict';var multer=require(_0x8e75('0x0'));var util=require('util');var path=require(_0x8e75('0x1'));var timeout=require(_0x8e75('0x2'));var express=require('express');var router=express[_0x8e75('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x8e75('0x4'));var config=require(_0x8e75('0x5'));var controller=require(_0x8e75('0x6'));router[_0x8e75('0x7')]('/',auth[_0x8e75('0x8')](),controller['index']);router[_0x8e75('0x7')](_0x8e75('0x9'),auth[_0x8e75('0x8')](),controller['describe']);router['get'](_0x8e75('0xa'),auth[_0x8e75('0x8')](),controller[_0x8e75('0xb')]);router[_0x8e75('0x7')](_0x8e75('0xc'),auth[_0x8e75('0x8')](),controller[_0x8e75('0xd')]);router['post']('/',auth[_0x8e75('0x8')](),controller['create']);router[_0x8e75('0xe')](_0x8e75('0xa'),auth['isAuthenticated'](),controller['update']);router[_0x8e75('0xf')]('/:id',auth[_0x8e75('0x8')](),controller[_0x8e75('0x10')]);module[_0x8e75('0x11')]=router;
\ No newline at end of file
index 02fabc0..712b75d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xca07=['BOOLEAN','sequelize','DATE','setDataValue','starttime','format','YYYY-MM-DD\x20HH:mm:ss','STRING'];(function(_0x51b169,_0x5efbc2){var _0x12605a=function(_0x570f5e){while(--_0x570f5e){_0x51b169['push'](_0x51b169['shift']());}};_0x12605a(++_0x5efbc2);}(_0xca07,0xb1));var _0x7ca0=function(_0x10499e,_0x56fd86){_0x10499e=_0x10499e-0x0;var _0x3fef98=_0xca07[_0x10499e];return _0x3fef98;};'use strict';var moment=require('moment');var Sequelize=require(_0x7ca0('0x0'));module['exports']={'starttime':{'type':Sequelize[_0x7ca0('0x1')],'set':function(_0x4c2cc4){this[_0x7ca0('0x2')](_0x7ca0('0x3'),_0x4c2cc4);this[_0x7ca0('0x2')]('endtime',moment()[_0x7ca0('0x4')](_0x7ca0('0x5')));}},'endtime':{'type':Sequelize[_0x7ca0('0x1')]},'membername':{'type':Sequelize['STRING']},'projectname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0x7ca0('0x6')]},'calleridname':{'type':Sequelize[_0x7ca0('0x6')]},'calleridnum':{'type':Sequelize['STRING']},'completed':{'type':Sequelize[_0x7ca0('0x7')],'defaultValue':![]}};
\ No newline at end of file
+var _0x5d9f=['DATE','starttime','setDataValue','format','YYYY-MM-DD\x20HH:mm:ss','STRING','moment','sequelize','exports'];(function(_0x46e363,_0x45d7e2){var _0x3fb059=function(_0x5e6274){while(--_0x5e6274){_0x46e363['push'](_0x46e363['shift']());}};_0x3fb059(++_0x45d7e2);}(_0x5d9f,0x15c));var _0xf5d9=function(_0x11fd6b,_0x1dadd4){_0x11fd6b=_0x11fd6b-0x0;var _0x4869d4=_0x5d9f[_0x11fd6b];return _0x4869d4;};'use strict';var moment=require(_0xf5d9('0x0'));var Sequelize=require(_0xf5d9('0x1'));module[_0xf5d9('0x2')]={'starttime':{'type':Sequelize[_0xf5d9('0x3')],'set':function(_0x120b14){this['setDataValue'](_0xf5d9('0x4'),_0x120b14);this[_0xf5d9('0x5')]('endtime',moment()[_0xf5d9('0x6')](_0xf5d9('0x7')));}},'endtime':{'type':Sequelize['DATE']},'membername':{'type':Sequelize[_0xf5d9('0x8')]},'projectname':{'type':Sequelize[_0xf5d9('0x8')]},'queue':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0xf5d9('0x8')]},'calleridname':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0xf5d9('0x8')]},'completed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
index e35a18f..7afb639 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf27d=['send','index','JscriptySessionReport','rawAttributes','keys','query','filters','model','intersection','fields','attributes','length','hasOwnProperty','order','sort','where','pick','filter','merge','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','update','destroy','describe','getQuestions','findOne','JscriptyQuestionReport','SessionId','html-pdf','rimraf','fast-json-patch','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','then','error','stack','name'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0xf27d,0xc3));var _0xdf27=function(_0x33240f,_0x520f5d){_0x33240f=_0x33240f-0x0;var _0xe5d11e=_0xf27d[_0x33240f];return _0xe5d11e;};'use strict';var pdf=require(_0xdf27('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xdf27('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xdf27('0x2'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xdf27('0x3'));var Mustache=require(_0xdf27('0x4'));var util=require(_0xdf27('0x5'));var path=require(_0xdf27('0x6'));var sox=require(_0xdf27('0x7'));var csv=require(_0xdf27('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xdf27('0x9'));var squel=require(_0xdf27('0xa'));var crypto=require(_0xdf27('0xb'));var jsforce=require(_0xdf27('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xdf27('0xd'));var Papa=require(_0xdf27('0xe'));var Redis=require('ioredis');var authService=require(_0xdf27('0xf'));var qs=require(_0xdf27('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xdf27('0x11'))(_0xdf27('0x12'));var utils=require(_0xdf27('0x13'));var config=require(_0xdf27('0x14'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1187c1,_0x2ff06e){_0x2ff06e=_0x2ff06e||0xcc;return function(_0x3f4454){if(_0x3f4454){return _0x1187c1[_0xdf27('0x15')](_0x2ff06e);}return _0x1187c1[_0xdf27('0x16')](_0x2ff06e)[_0xdf27('0x17')]();};}function respondWithResult(_0x5253ac,_0x2d664e){_0x2d664e=_0x2d664e||0xc8;return function(_0x16df03){if(_0x16df03){return _0x5253ac[_0xdf27('0x16')](_0x2d664e)[_0xdf27('0x18')](_0x16df03);}};}function respondWithFilteredResult(_0x84cfeb,_0x3aa0e4){return function(_0x214cb0){if(_0x214cb0){var _0x599b6e=_0x214cb0[_0xdf27('0x19')],_0x209acf=_0x3aa0e4[_0xdf27('0x1a')],_0x44691f=_0x3aa0e4[_0xdf27('0x1a')]+_0x3aa0e4[_0xdf27('0x1b')],_0x53326c;if(_0x44691f>=_0x599b6e){_0x44691f=_0x599b6e;_0x53326c=0xc8;}else{_0x53326c=0xce;}_0x84cfeb[_0xdf27('0x16')](_0x53326c);return _0x84cfeb[_0xdf27('0x1c')]('Content-Range',_0x209acf+'-'+_0x44691f+'/'+_0x599b6e)[_0xdf27('0x18')](_0x214cb0);}return null;};}function patchUpdates(_0x2ce00a){return function(_0x473abe){try{jsonpatch[_0xdf27('0x1d')](_0x473abe,_0x2ce00a,!![]);}catch(_0x151935){return BPromise[_0xdf27('0x1e')](_0x151935);}return _0x473abe[_0xdf27('0x1f')]();};}function saveUpdates(_0x2a98ab,_0x3a9c7b){return function(_0x24a751){if(_0x24a751){return _0x24a751['update'](_0x2a98ab)['then'](function(_0x509f6f){return _0x509f6f;});}return null;};}function removeEntity(_0x5b5208,_0x3b0440){return function(_0x3e7719){if(_0x3e7719){return _0x3e7719['destroy']()[_0xdf27('0x20')](function(){_0x5b5208[_0xdf27('0x16')](0xcc)[_0xdf27('0x17')]();});}};}function handleEntityNotFound(_0x32df4d,_0x5be31b){return function(_0x2afb6e){if(!_0x2afb6e){_0x32df4d[_0xdf27('0x15')](0x194);}return _0x2afb6e;};}function handleError(_0x56fb51,_0x5ae76c){_0x5ae76c=_0x5ae76c||0x1f4;return function(_0x29c6cb){logger[_0xdf27('0x21')](_0x29c6cb[_0xdf27('0x22')]);if(_0x29c6cb['name']){delete _0x29c6cb[_0xdf27('0x23')];}_0x56fb51['status'](_0x5ae76c)[_0xdf27('0x24')](_0x29c6cb);};}exports[_0xdf27('0x25')]=function(_0x3e8dd2,_0x30af5e){var _0x1ccedb={},_0x294d00={},_0x3ab6f4={'count':0x0,'rows':[]};var _0x449c84=db[_0xdf27('0x26')][_0xdf27('0x27')];_0x294d00['model']=_[_0xdf27('0x28')](_0x449c84);_0x294d00[_0xdf27('0x29')]=_[_0xdf27('0x28')](_0x3e8dd2[_0xdf27('0x29')]);_0x294d00[_0xdf27('0x2a')]=_['intersection'](_0x294d00[_0xdf27('0x2b')],_0x294d00[_0xdf27('0x29')]);_0x1ccedb['attributes']=_[_0xdf27('0x2c')](_0x294d00[_0xdf27('0x2b')],qs[_0xdf27('0x2d')](_0x3e8dd2['query'][_0xdf27('0x2d')]));_0x1ccedb[_0xdf27('0x2e')]=_0x1ccedb[_0xdf27('0x2e')][_0xdf27('0x2f')]?_0x1ccedb[_0xdf27('0x2e')]:_0x294d00['model'];if(!_0x3e8dd2['query'][_0xdf27('0x30')]('nolimit')){_0x1ccedb[_0xdf27('0x1b')]=qs[_0xdf27('0x1b')](_0x3e8dd2[_0xdf27('0x29')][_0xdf27('0x1b')]);_0x1ccedb[_0xdf27('0x1a')]=qs[_0xdf27('0x1a')](_0x3e8dd2[_0xdf27('0x29')]['offset']);}_0x1ccedb[_0xdf27('0x31')]=qs[_0xdf27('0x32')](_0x3e8dd2[_0xdf27('0x29')][_0xdf27('0x32')]);_0x1ccedb[_0xdf27('0x33')]=qs[_0xdf27('0x2a')](_[_0xdf27('0x34')](_0x3e8dd2[_0xdf27('0x29')],_0x294d00[_0xdf27('0x2a')]));if(_0x3e8dd2[_0xdf27('0x29')][_0xdf27('0x35')]){_0x1ccedb[_0xdf27('0x33')]=_[_0xdf27('0x36')](_0x1ccedb['where'],{'$or':_['map'](_0x449c84,function(_0x5890ef){if(_0x5890ef[_0xdf27('0x37')][_0xdf27('0x38')]!==_0xdf27('0x39')){var _0x3a341c={};_0x3a341c[_0x5890ef[_0xdf27('0x3a')]]={'$like':'%'+_0x3e8dd2[_0xdf27('0x29')][_0xdf27('0x35')]+'%'};return _0x3a341c;}})});}_0x1ccedb=_[_0xdf27('0x36')]({},_0x1ccedb,_0x3e8dd2[_0xdf27('0x3b')]);var _0x3a55c0={'where':_0x1ccedb[_0xdf27('0x33')]};return db[_0xdf27('0x26')][_0xdf27('0x19')](_0x3a55c0)[_0xdf27('0x20')](function(_0x4fdaed){_0x3ab6f4[_0xdf27('0x19')]=_0x4fdaed;if(_0x3e8dd2[_0xdf27('0x29')][_0xdf27('0x3c')]){_0x1ccedb[_0xdf27('0x3d')]=[{'all':!![]}];}return db['JscriptySessionReport'][_0xdf27('0x3e')](_0x1ccedb);})[_0xdf27('0x20')](function(_0x481c42){_0x3ab6f4[_0xdf27('0x3f')]=_0x481c42;return _0x3ab6f4;})[_0xdf27('0x20')](respondWithFilteredResult(_0x30af5e,_0x1ccedb))[_0xdf27('0x40')](handleError(_0x30af5e,null));};exports[_0xdf27('0x41')]=function(_0x5d50d2,_0x393e46){var _0x4fa140={'raw':!![],'where':{'id':_0x5d50d2[_0xdf27('0x42')]['id']}},_0x18c847={};_0x18c847['model']=_['keys'](db[_0xdf27('0x26')][_0xdf27('0x27')]);_0x18c847[_0xdf27('0x29')]=_['keys'](_0x5d50d2['query']);_0x18c847[_0xdf27('0x2a')]=_[_0xdf27('0x2c')](_0x18c847[_0xdf27('0x2b')],_0x18c847[_0xdf27('0x29')]);_0x4fa140[_0xdf27('0x2e')]=_[_0xdf27('0x2c')](_0x18c847[_0xdf27('0x2b')],qs[_0xdf27('0x2d')](_0x5d50d2[_0xdf27('0x29')][_0xdf27('0x2d')]));_0x4fa140['attributes']=_0x4fa140[_0xdf27('0x2e')][_0xdf27('0x2f')]?_0x4fa140['attributes']:_0x18c847['model'];if(_0x5d50d2[_0xdf27('0x29')][_0xdf27('0x3c')]){_0x4fa140[_0xdf27('0x3d')]=[{'all':!![]}];}_0x4fa140=_[_0xdf27('0x36')]({},_0x4fa140,_0x5d50d2['options']);return db['JscriptySessionReport'][_0xdf27('0x43')](_0x4fa140)[_0xdf27('0x20')](handleEntityNotFound(_0x393e46,null))[_0xdf27('0x20')](respondWithResult(_0x393e46,null))[_0xdf27('0x40')](handleError(_0x393e46,null));};exports[_0xdf27('0x44')]=function(_0x404d9b,_0x24b7f0){return db[_0xdf27('0x26')][_0xdf27('0x44')](_0x404d9b[_0xdf27('0x45')],{})[_0xdf27('0x20')](respondWithResult(_0x24b7f0,0xc9))[_0xdf27('0x40')](handleError(_0x24b7f0,null));};exports[_0xdf27('0x46')]=function(_0x2cb2f3,_0x4e6624){if(_0x2cb2f3[_0xdf27('0x45')]['id']){delete _0x2cb2f3[_0xdf27('0x45')]['id'];}return db[_0xdf27('0x26')][_0xdf27('0x43')]({'where':{'id':_0x2cb2f3[_0xdf27('0x42')]['id']}})[_0xdf27('0x20')](handleEntityNotFound(_0x4e6624,null))['then'](saveUpdates(_0x2cb2f3[_0xdf27('0x45')],null))['then'](respondWithResult(_0x4e6624,null))[_0xdf27('0x40')](handleError(_0x4e6624,null));};exports[_0xdf27('0x47')]=function(_0x4d9cd9,_0x34d137){return db['JscriptySessionReport'][_0xdf27('0x43')]({'where':{'id':_0x4d9cd9['params']['id']}})[_0xdf27('0x20')](handleEntityNotFound(_0x34d137,null))[_0xdf27('0x20')](removeEntity(_0x34d137,null))[_0xdf27('0x40')](handleError(_0x34d137,null));};exports['describe']=function(_0x472643,_0x3db365){return db[_0xdf27('0x26')][_0xdf27('0x48')]()[_0xdf27('0x20')](respondWithResult(_0x3db365,null))[_0xdf27('0x40')](handleError(_0x3db365,null));};exports[_0xdf27('0x49')]=function(_0x54bdd4,_0x6d2a3f,_0x4d7822){var _0x557e68={'raw':!![],'where':{}};var _0x4dc68d={};var _0x24808a={'count':0x0,'rows':[]};return db[_0xdf27('0x26')][_0xdf27('0x4a')]({'where':{'id':_0x54bdd4[_0xdf27('0x42')]['id']}})['then'](handleEntityNotFound(_0x6d2a3f,null))[_0xdf27('0x20')](function(_0x52a8e9){if(_0x52a8e9){_0x4dc68d[_0xdf27('0x2b')]=_['keys'](db[_0xdf27('0x4b')][_0xdf27('0x27')]);_0x4dc68d[_0xdf27('0x29')]=_['keys'](_0x54bdd4[_0xdf27('0x29')]);_0x4dc68d[_0xdf27('0x2a')]=_[_0xdf27('0x2c')](_0x4dc68d[_0xdf27('0x2b')],_0x4dc68d['query']);_0x557e68[_0xdf27('0x2e')]=_[_0xdf27('0x2c')](_0x4dc68d[_0xdf27('0x2b')],qs[_0xdf27('0x2d')](_0x54bdd4[_0xdf27('0x29')][_0xdf27('0x2d')]));_0x557e68[_0xdf27('0x2e')]=_0x557e68[_0xdf27('0x2e')][_0xdf27('0x2f')]?_0x557e68[_0xdf27('0x2e')]:_0x4dc68d[_0xdf27('0x2b')];if(!_0x54bdd4[_0xdf27('0x29')][_0xdf27('0x30')]('nolimit')){_0x557e68[_0xdf27('0x1b')]=qs['limit'](_0x54bdd4['query'][_0xdf27('0x1b')]);_0x557e68['offset']=qs[_0xdf27('0x1a')](_0x54bdd4[_0xdf27('0x29')][_0xdf27('0x1a')]);}_0x557e68[_0xdf27('0x31')]=qs[_0xdf27('0x32')](_0x54bdd4['query'][_0xdf27('0x32')]);_0x557e68[_0xdf27('0x33')]=qs[_0xdf27('0x2a')](_[_0xdf27('0x34')](_0x54bdd4[_0xdf27('0x29')],_0x4dc68d[_0xdf27('0x2a')]));_0x557e68[_0xdf27('0x33')][_0xdf27('0x4c')]=_0x52a8e9['id'];if(_0x54bdd4[_0xdf27('0x29')][_0xdf27('0x35')]){_0x557e68[_0xdf27('0x33')]=_['merge'](_0x557e68[_0xdf27('0x33')],{'$or':_['map'](_0x557e68[_0xdf27('0x2e')],function(_0x384af3){var _0x2bcd92={};_0x2bcd92[_0x384af3]={'$like':'%'+_0x54bdd4[_0xdf27('0x29')][_0xdf27('0x35')]+'%'};return _0x2bcd92;})});}_0x557e68=_[_0xdf27('0x36')]({},_0x557e68,_0x54bdd4[_0xdf27('0x3b')]);return db['JscriptyQuestionReport']['count']({'where':_0x557e68[_0xdf27('0x33')]})['then'](function(_0x4019c9){_0x24808a[_0xdf27('0x19')]=_0x4019c9;if(_0x54bdd4[_0xdf27('0x29')]['includeAll']){_0x557e68[_0xdf27('0x3d')]=[{'all':!![]}];}return db[_0xdf27('0x4b')][_0xdf27('0x3e')](_0x557e68);})[_0xdf27('0x20')](function(_0x7b0ba0){_0x24808a[_0xdf27('0x3f')]=_0x7b0ba0;return _0x24808a;});}})['then'](respondWithFilteredResult(_0x6d2a3f,_0x557e68))[_0xdf27('0x40')](handleError(_0x6d2a3f,null));};
\ No newline at end of file
+var _0x16a8=['keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','sort','where','VIRTUAL','filter','merge','options','includeAll','findAll','rows','catch','show','params','include','find','body','describe','getQuestions','order','pick','SessionId','map','JscriptyQuestionReport','html-pdf','rimraf','zip-dir','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','Content-Range','save','update','then','destroy','error','name','index','JscriptySessionReport','rawAttributes','model'];(function(_0x4d8ed9,_0x2ae284){var _0x1e2140=function(_0x9cca89){while(--_0x9cca89){_0x4d8ed9['push'](_0x4d8ed9['shift']());}};_0x1e2140(++_0x2ae284);}(_0x16a8,0xb4));var _0x816a=function(_0x618414,_0x1a7a60){_0x618414=_0x618414-0x0;var _0x21c19a=_0x16a8[_0x618414];return _0x21c19a;};'use strict';var pdf=require(_0x816a('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x816a('0x1'));var zipdir=require(_0x816a('0x2'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x816a('0x3'));var BPromise=require(_0x816a('0x4'));var Mustache=require(_0x816a('0x5'));var util=require(_0x816a('0x6'));var path=require(_0x816a('0x7'));var sox=require(_0x816a('0x8'));var csv=require(_0x816a('0x9'));var ejs=require(_0x816a('0xa'));var fs=require('fs');var _=require(_0x816a('0xb'));var squel=require('squel');var crypto=require(_0x816a('0xc'));var jsforce=require(_0x816a('0xd'));var deskjs=require(_0x816a('0xe'));var toCsv=require(_0x816a('0x9'));var querystring=require(_0x816a('0xf'));var Papa=require(_0x816a('0x10'));var Redis=require(_0x816a('0x11'));var authService=require(_0x816a('0x12'));var qs=require(_0x816a('0x13'));var hardwareService=require(_0x816a('0x14'));var logger=require(_0x816a('0x15'))('api');var utils=require(_0x816a('0x16'));var config=require(_0x816a('0x17'));var db=require(_0x816a('0x18'))['db'];function respondWithStatusCode(_0x23bed9,_0x4f9d77){_0x4f9d77=_0x4f9d77||0xcc;return function(_0x4d4427){if(_0x4d4427){return _0x23bed9[_0x816a('0x19')](_0x4f9d77);}return _0x23bed9[_0x816a('0x1a')](_0x4f9d77)[_0x816a('0x1b')]();};}function respondWithResult(_0x3c8ff9,_0x41ee79){_0x41ee79=_0x41ee79||0xc8;return function(_0x3e3829){if(_0x3e3829){return _0x3c8ff9[_0x816a('0x1a')](_0x41ee79)[_0x816a('0x1c')](_0x3e3829);}};}function respondWithFilteredResult(_0x540dd1,_0x1bf38a){return function(_0x4e9d5e){if(_0x4e9d5e){var _0x3ce19d=_0x4e9d5e[_0x816a('0x1d')],_0x3d668a=_0x1bf38a[_0x816a('0x1e')],_0x106d28=_0x1bf38a[_0x816a('0x1e')]+_0x1bf38a['limit'],_0x4c03dd;if(_0x106d28>=_0x3ce19d){_0x106d28=_0x3ce19d;_0x4c03dd=0xc8;}else{_0x4c03dd=0xce;}_0x540dd1[_0x816a('0x1a')](_0x4c03dd);return _0x540dd1['set'](_0x816a('0x1f'),_0x3d668a+'-'+_0x106d28+'/'+_0x3ce19d)['json'](_0x4e9d5e);}return null;};}function patchUpdates(_0xa8db15){return function(_0x20c03f){try{jsonpatch['apply'](_0x20c03f,_0xa8db15,!![]);}catch(_0x3c8b09){return BPromise['reject'](_0x3c8b09);}return _0x20c03f[_0x816a('0x20')]();};}function saveUpdates(_0xfd3273,_0x3f2796){return function(_0x339be6){if(_0x339be6){return _0x339be6[_0x816a('0x21')](_0xfd3273)[_0x816a('0x22')](function(_0x2f5ec0){return _0x2f5ec0;});}return null;};}function removeEntity(_0x439594,_0x4af9d8){return function(_0xd5051f){if(_0xd5051f){return _0xd5051f[_0x816a('0x23')]()[_0x816a('0x22')](function(){_0x439594['status'](0xcc)[_0x816a('0x1b')]();});}};}function handleEntityNotFound(_0xb053ab,_0x5ac945){return function(_0x4108bf){if(!_0x4108bf){_0xb053ab[_0x816a('0x19')](0x194);}return _0x4108bf;};}function handleError(_0x406a34,_0x53b718){_0x53b718=_0x53b718||0x1f4;return function(_0x55281f){logger[_0x816a('0x24')](_0x55281f['stack']);if(_0x55281f[_0x816a('0x25')]){delete _0x55281f[_0x816a('0x25')];}_0x406a34[_0x816a('0x1a')](_0x53b718)['send'](_0x55281f);};}exports[_0x816a('0x26')]=function(_0x1bf75d,_0x482d17){var _0x242756={},_0x23e375={},_0x53c656={'count':0x0,'rows':[]};var _0x21d286=db[_0x816a('0x27')][_0x816a('0x28')];_0x23e375[_0x816a('0x29')]=_[_0x816a('0x2a')](_0x21d286);_0x23e375[_0x816a('0x2b')]=_['keys'](_0x1bf75d[_0x816a('0x2b')]);_0x23e375[_0x816a('0x2c')]=_['intersection'](_0x23e375[_0x816a('0x29')],_0x23e375[_0x816a('0x2b')]);_0x242756['attributes']=_[_0x816a('0x2d')](_0x23e375[_0x816a('0x29')],qs[_0x816a('0x2e')](_0x1bf75d[_0x816a('0x2b')][_0x816a('0x2e')]));_0x242756[_0x816a('0x2f')]=_0x242756[_0x816a('0x2f')][_0x816a('0x30')]?_0x242756[_0x816a('0x2f')]:_0x23e375[_0x816a('0x29')];if(!_0x1bf75d[_0x816a('0x2b')][_0x816a('0x31')](_0x816a('0x32'))){_0x242756[_0x816a('0x33')]=qs[_0x816a('0x33')](_0x1bf75d[_0x816a('0x2b')][_0x816a('0x33')]);_0x242756['offset']=qs[_0x816a('0x1e')](_0x1bf75d[_0x816a('0x2b')][_0x816a('0x1e')]);}_0x242756['order']=qs[_0x816a('0x34')](_0x1bf75d[_0x816a('0x2b')][_0x816a('0x34')]);_0x242756['where']=qs[_0x816a('0x2c')](_['pick'](_0x1bf75d[_0x816a('0x2b')],_0x23e375[_0x816a('0x2c')]));if(_0x1bf75d[_0x816a('0x2b')]['filter']){_0x242756['where']=_['merge'](_0x242756[_0x816a('0x35')],{'$or':_['map'](_0x21d286,function(_0x58b8d0){if(_0x58b8d0['type']['key']!==_0x816a('0x36')){var _0x5d99e4={};_0x5d99e4[_0x58b8d0['field']]={'$like':'%'+_0x1bf75d[_0x816a('0x2b')][_0x816a('0x37')]+'%'};return _0x5d99e4;}})});}_0x242756=_[_0x816a('0x38')]({},_0x242756,_0x1bf75d[_0x816a('0x39')]);var _0x202b66={'where':_0x242756[_0x816a('0x35')]};return db['JscriptySessionReport'][_0x816a('0x1d')](_0x202b66)['then'](function(_0x270801){_0x53c656['count']=_0x270801;if(_0x1bf75d['query'][_0x816a('0x3a')]){_0x242756['include']=[{'all':!![]}];}return db['JscriptySessionReport'][_0x816a('0x3b')](_0x242756);})[_0x816a('0x22')](function(_0x5c60a9){_0x53c656[_0x816a('0x3c')]=_0x5c60a9;return _0x53c656;})[_0x816a('0x22')](respondWithFilteredResult(_0x482d17,_0x242756))[_0x816a('0x3d')](handleError(_0x482d17,null));};exports[_0x816a('0x3e')]=function(_0x20227f,_0x5156e2){var _0x4aafbb={'raw':!![],'where':{'id':_0x20227f[_0x816a('0x3f')]['id']}},_0x31d496={};_0x31d496['model']=_[_0x816a('0x2a')](db[_0x816a('0x27')]['rawAttributes']);_0x31d496[_0x816a('0x2b')]=_[_0x816a('0x2a')](_0x20227f[_0x816a('0x2b')]);_0x31d496[_0x816a('0x2c')]=_[_0x816a('0x2d')](_0x31d496[_0x816a('0x29')],_0x31d496[_0x816a('0x2b')]);_0x4aafbb[_0x816a('0x2f')]=_[_0x816a('0x2d')](_0x31d496[_0x816a('0x29')],qs['fields'](_0x20227f['query'][_0x816a('0x2e')]));_0x4aafbb[_0x816a('0x2f')]=_0x4aafbb['attributes'][_0x816a('0x30')]?_0x4aafbb[_0x816a('0x2f')]:_0x31d496[_0x816a('0x29')];if(_0x20227f['query'][_0x816a('0x3a')]){_0x4aafbb[_0x816a('0x40')]=[{'all':!![]}];}_0x4aafbb=_['merge']({},_0x4aafbb,_0x20227f[_0x816a('0x39')]);return db[_0x816a('0x27')][_0x816a('0x41')](_0x4aafbb)[_0x816a('0x22')](handleEntityNotFound(_0x5156e2,null))[_0x816a('0x22')](respondWithResult(_0x5156e2,null))[_0x816a('0x3d')](handleError(_0x5156e2,null));};exports['create']=function(_0x47e575,_0xc9906d){return db[_0x816a('0x27')]['create'](_0x47e575[_0x816a('0x42')],{})[_0x816a('0x22')](respondWithResult(_0xc9906d,0xc9))['catch'](handleError(_0xc9906d,null));};exports[_0x816a('0x21')]=function(_0x1fdda7,_0x4b01c8){if(_0x1fdda7['body']['id']){delete _0x1fdda7[_0x816a('0x42')]['id'];}return db[_0x816a('0x27')]['find']({'where':{'id':_0x1fdda7[_0x816a('0x3f')]['id']}})[_0x816a('0x22')](handleEntityNotFound(_0x4b01c8,null))['then'](saveUpdates(_0x1fdda7[_0x816a('0x42')],null))[_0x816a('0x22')](respondWithResult(_0x4b01c8,null))[_0x816a('0x3d')](handleError(_0x4b01c8,null));};exports[_0x816a('0x23')]=function(_0xc35abb,_0x59bbd0){return db['JscriptySessionReport'][_0x816a('0x41')]({'where':{'id':_0xc35abb[_0x816a('0x3f')]['id']}})[_0x816a('0x22')](handleEntityNotFound(_0x59bbd0,null))['then'](removeEntity(_0x59bbd0,null))[_0x816a('0x3d')](handleError(_0x59bbd0,null));};exports['describe']=function(_0x5e539f,_0x464b30){return db[_0x816a('0x27')][_0x816a('0x43')]()[_0x816a('0x22')](respondWithResult(_0x464b30,null))[_0x816a('0x3d')](handleError(_0x464b30,null));};exports[_0x816a('0x44')]=function(_0x27f900,_0x4c7b97,_0x3260fb){var _0x13d683={'raw':!![],'where':{}};var _0x2d8262={};var _0x531b05={'count':0x0,'rows':[]};return db[_0x816a('0x27')]['findOne']({'where':{'id':_0x27f900[_0x816a('0x3f')]['id']}})[_0x816a('0x22')](handleEntityNotFound(_0x4c7b97,null))[_0x816a('0x22')](function(_0x434746){if(_0x434746){_0x2d8262[_0x816a('0x29')]=_[_0x816a('0x2a')](db['JscriptyQuestionReport']['rawAttributes']);_0x2d8262[_0x816a('0x2b')]=_['keys'](_0x27f900[_0x816a('0x2b')]);_0x2d8262[_0x816a('0x2c')]=_[_0x816a('0x2d')](_0x2d8262[_0x816a('0x29')],_0x2d8262[_0x816a('0x2b')]);_0x13d683[_0x816a('0x2f')]=_[_0x816a('0x2d')](_0x2d8262[_0x816a('0x29')],qs['fields'](_0x27f900[_0x816a('0x2b')]['fields']));_0x13d683[_0x816a('0x2f')]=_0x13d683[_0x816a('0x2f')]['length']?_0x13d683[_0x816a('0x2f')]:_0x2d8262[_0x816a('0x29')];if(!_0x27f900['query']['hasOwnProperty']('nolimit')){_0x13d683['limit']=qs[_0x816a('0x33')](_0x27f900[_0x816a('0x2b')]['limit']);_0x13d683[_0x816a('0x1e')]=qs[_0x816a('0x1e')](_0x27f900[_0x816a('0x2b')]['offset']);}_0x13d683[_0x816a('0x45')]=qs[_0x816a('0x34')](_0x27f900['query'][_0x816a('0x34')]);_0x13d683['where']=qs[_0x816a('0x2c')](_[_0x816a('0x46')](_0x27f900['query'],_0x2d8262['filters']));_0x13d683[_0x816a('0x35')][_0x816a('0x47')]=_0x434746['id'];if(_0x27f900[_0x816a('0x2b')][_0x816a('0x37')]){_0x13d683[_0x816a('0x35')]=_['merge'](_0x13d683[_0x816a('0x35')],{'$or':_[_0x816a('0x48')](_0x13d683[_0x816a('0x2f')],function(_0x2fdfc7){var _0x6a5cb2={};_0x6a5cb2[_0x2fdfc7]={'$like':'%'+_0x27f900['query'][_0x816a('0x37')]+'%'};return _0x6a5cb2;})});}_0x13d683=_['merge']({},_0x13d683,_0x27f900[_0x816a('0x39')]);return db[_0x816a('0x49')]['count']({'where':_0x13d683[_0x816a('0x35')]})[_0x816a('0x22')](function(_0x5d03d0){_0x531b05[_0x816a('0x1d')]=_0x5d03d0;if(_0x27f900[_0x816a('0x2b')][_0x816a('0x3a')]){_0x13d683[_0x816a('0x40')]=[{'all':!![]}];}return db[_0x816a('0x49')]['findAll'](_0x13d683);})[_0x816a('0x22')](function(_0x4065dc){_0x531b05[_0x816a('0x3c')]=_0x4065dc;return _0x531b05;});}})[_0x816a('0x22')](respondWithFilteredResult(_0x4c7b97,_0x13d683))[_0x816a('0x3d')](handleError(_0x4c7b97,null));};
\ No newline at end of file
index 04c9811..d63bc9a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a85=['exports','JscriptySessionReport','report_jscripty_sessions','lodash','../../config/logger','api','moment','bluebird','request-promise','path','../../config/environment'];(function(_0x5a8f5e,_0xff92bb){var _0x40602f=function(_0x183b6f){while(--_0x183b6f){_0x5a8f5e['push'](_0x5a8f5e['shift']());}};_0x40602f(++_0xff92bb);}(_0x8a85,0xdf));var _0x58a8=function(_0x334894,_0x43f2de){_0x334894=_0x334894-0x0;var _0x373298=_0x8a85[_0x334894];return _0x373298;};'use strict';var _=require(_0x58a8('0x0'));var util=require('util');var logger=require(_0x58a8('0x1'))(_0x58a8('0x2'));var moment=require(_0x58a8('0x3'));var BPromise=require(_0x58a8('0x4'));var rp=require(_0x58a8('0x5'));var fs=require('fs');var path=require(_0x58a8('0x6'));var rimraf=require('rimraf');var config=require(_0x58a8('0x7'));var attributes=require('./jscriptySessionReport.attributes');module[_0x58a8('0x8')]=function(_0xd2ec58,_0x12b997){return _0xd2ec58['define'](_0x58a8('0x9'),attributes,{'tableName':_0x58a8('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xfa64=['rimraf','../../config/environment','./jscriptySessionReport.attributes','JscriptySessionReport','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x550062,_0x231bba){var _0x5488e8=function(_0x585140){while(--_0x585140){_0x550062['push'](_0x550062['shift']());}};_0x5488e8(++_0x231bba);}(_0xfa64,0xa9));var _0x4fa6=function(_0x21c6d7,_0x4598fd){_0x21c6d7=_0x21c6d7-0x0;var _0x3ff27a=_0xfa64[_0x21c6d7];return _0x3ff27a;};'use strict';var _=require(_0x4fa6('0x0'));var util=require(_0x4fa6('0x1'));var logger=require(_0x4fa6('0x2'))(_0x4fa6('0x3'));var moment=require(_0x4fa6('0x4'));var BPromise=require(_0x4fa6('0x5'));var rp=require(_0x4fa6('0x6'));var fs=require('fs');var path=require('path');var rimraf=require(_0x4fa6('0x7'));var config=require(_0x4fa6('0x8'));var attributes=require(_0x4fa6('0x9'));module['exports']=function(_0x3092ec,_0xc9cfa9){return _0x3092ec['define'](_0x4fa6('0xa'),attributes,{'tableName':'report_jscripty_sessions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 3f11243..d730836 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfb0b=['../../config/environment','jayson/promise','client','http','request','then','debug','JscriptySessionReport,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','JscriptySessionReport,\x20%s,\x20%s','message','info','result','catch','lodash','util','moment','randomstring','ioredis','../../config/logger'];(function(_0x3478a0,_0x2744cf){var _0x5eb76e=function(_0x43e236){while(--_0x43e236){_0x3478a0['push'](_0x3478a0['shift']());}};_0x5eb76e(++_0x2744cf);}(_0xfb0b,0x94));var _0xbfb0=function(_0x456840,_0x3baddb){_0x456840=_0x456840-0x0;var _0x3afd45=_0xfb0b[_0x456840];return _0x3afd45;};'use strict';var _=require(_0xbfb0('0x0'));var util=require(_0xbfb0('0x1'));var moment=require(_0xbfb0('0x2'));var BPromise=require('bluebird');var rs=require(_0xbfb0('0x3'));var fs=require('fs');var Redis=require(_0xbfb0('0x4'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xbfb0('0x5'))('rpc');var config=require(_0xbfb0('0x6'));var jayson=require(_0xbfb0('0x7'));var client=jayson[_0xbfb0('0x8')][_0xbfb0('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2b3840,_0x46166a,_0x52eba3){return new BPromise(function(_0x3491c7,_0x1afe32){return client[_0xbfb0('0xa')](_0x2b3840,_0x52eba3)[_0xbfb0('0xb')](function(_0x4c2cee){logger['info']('JscriptySessionReport,\x20%s,\x20%s',_0x46166a,'request\x20sent');logger[_0xbfb0('0xc')](_0xbfb0('0xd'),_0x46166a,_0xbfb0('0xe'),JSON['stringify'](_0x4c2cee));if(_0x4c2cee[_0xbfb0('0xf')]){if(_0x4c2cee['error'][_0xbfb0('0x10')]===0x1f4){logger[_0xbfb0('0xf')](_0xbfb0('0x11'),_0x46166a,_0x4c2cee[_0xbfb0('0xf')][_0xbfb0('0x12')]);return _0x1afe32(_0x4c2cee[_0xbfb0('0xf')]['message']);}logger[_0xbfb0('0xf')]('JscriptySessionReport,\x20%s,\x20%s',_0x46166a,_0x4c2cee['error']['message']);return _0x3491c7(_0x4c2cee[_0xbfb0('0xf')][_0xbfb0('0x12')]);}else{logger[_0xbfb0('0x13')](_0xbfb0('0x11'),_0x46166a,_0xbfb0('0xe'));_0x3491c7(_0x4c2cee[_0xbfb0('0x14')][_0xbfb0('0x12')]);}})[_0xbfb0('0x15')](function(_0x315b80){logger[_0xbfb0('0xf')](_0xbfb0('0x11'),_0x46166a,_0x315b80);_0x1afe32(_0x315b80);});});}
\ No newline at end of file
+var _0x44ff=['client','http','then','info','JscriptySessionReport,\x20%s,\x20%s','request\x20sent','debug','JscriptySessionReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','util','moment','bluebird','../../config/logger','rpc'];(function(_0x40aaa4,_0x3b22f4){var _0x4e21e5=function(_0x35d2f3){while(--_0x35d2f3){_0x40aaa4['push'](_0x40aaa4['shift']());}};_0x4e21e5(++_0x3b22f4);}(_0x44ff,0x1c3));var _0xf44f=function(_0x3b89d5,_0x3ce186){_0x3b89d5=_0x3b89d5-0x0;var _0x5192e1=_0x44ff[_0x3b89d5];return _0x5192e1;};'use strict';var _=require('lodash');var util=require(_0xf44f('0x0'));var moment=require(_0xf44f('0x1'));var BPromise=require(_0xf44f('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xf44f('0x3'))(_0xf44f('0x4'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xf44f('0x5')][_0xf44f('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x24baf4,_0x536b0e,_0x1aa3e5){return new BPromise(function(_0x2dae46,_0x1a1b8a){return client['request'](_0x24baf4,_0x1aa3e5)[_0xf44f('0x7')](function(_0x1f12d7){logger[_0xf44f('0x8')](_0xf44f('0x9'),_0x536b0e,_0xf44f('0xa'));logger[_0xf44f('0xb')](_0xf44f('0xc'),_0x536b0e,_0xf44f('0xa'),JSON[_0xf44f('0xd')](_0x1f12d7));if(_0x1f12d7[_0xf44f('0xe')]){if(_0x1f12d7['error'][_0xf44f('0xf')]===0x1f4){logger[_0xf44f('0xe')](_0xf44f('0x9'),_0x536b0e,_0x1f12d7[_0xf44f('0xe')][_0xf44f('0x10')]);return _0x1a1b8a(_0x1f12d7[_0xf44f('0xe')][_0xf44f('0x10')]);}logger['error']('JscriptySessionReport,\x20%s,\x20%s',_0x536b0e,_0x1f12d7[_0xf44f('0xe')]['message']);return _0x2dae46(_0x1f12d7['error']['message']);}else{logger[_0xf44f('0x8')](_0xf44f('0x9'),_0x536b0e,_0xf44f('0xa'));_0x2dae46(_0x1f12d7[_0xf44f('0x11')]['message']);}})[_0xf44f('0x12')](function(_0x56b1ca){logger[_0xf44f('0xe')](_0xf44f('0x9'),_0x536b0e,_0x56b1ca);_0x1a1b8a(_0x56b1ca);});});}
\ No newline at end of file
index d87082d..2758426 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xde93=['Router','../../components/auth/service','../../config/environment','get','put','/:id','multer','util','path','connect-timeout','express'];(function(_0x3f0bbb,_0x404eb2){var _0x5d1eaa=function(_0x5024ee){while(--_0x5024ee){_0x3f0bbb['push'](_0x3f0bbb['shift']());}};_0x5d1eaa(++_0x404eb2);}(_0xde93,0x187));var _0x3de9=function(_0x175f44,_0x350863){_0x175f44=_0x175f44-0x0;var _0x5779c8=_0xde93[_0x175f44];return _0x5779c8;};'use strict';var multer=require(_0x3de9('0x0'));var util=require(_0x3de9('0x1'));var path=require(_0x3de9('0x2'));var timeout=require(_0x3de9('0x3'));var express=require(_0x3de9('0x4'));var router=express[_0x3de9('0x5')]();var auth=require(_0x3de9('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x3de9('0x7'));var controller=require('./license.controller');router[_0x3de9('0x8')]('/',controller['index']);router[_0x3de9('0x9')](_0x3de9('0xa'),auth['isAuthenticated'](),controller['update']);module['exports']=router;
\ No newline at end of file
+var _0xeb79=['/:id','isAuthenticated','update','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./license.controller','get','index'];(function(_0x4ae625,_0xf396d0){var _0x31accf=function(_0x3ded6b){while(--_0x3ded6b){_0x4ae625['push'](_0x4ae625['shift']());}};_0x31accf(++_0xf396d0);}(_0xeb79,0x7b));var _0x9eb7=function(_0x3e5f69,_0x1eb2b1){_0x3e5f69=_0x3e5f69-0x0;var _0x55df21=_0xeb79[_0x3e5f69];return _0x55df21;};'use strict';var multer=require(_0x9eb7('0x0'));var util=require(_0x9eb7('0x1'));var path=require(_0x9eb7('0x2'));var timeout=require(_0x9eb7('0x3'));var express=require(_0x9eb7('0x4'));var router=express[_0x9eb7('0x5')]();var auth=require(_0x9eb7('0x6'));var interaction=require(_0x9eb7('0x7'));var config=require(_0x9eb7('0x8'));var controller=require(_0x9eb7('0x9'));router[_0x9eb7('0xa')]('/',controller[_0x9eb7('0xb')]);router['put'](_0x9eb7('0xc'),auth[_0x9eb7('0xd')](),controller[_0x9eb7('0xe')]);module['exports']=router;
\ No newline at end of file
index c2df7bd..f71eb42 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2b01=['INTEGER','exports','TEXT','STRING'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x2b01,0x18d));var _0x12b0=function(_0x152ccd,_0x508adb){_0x152ccd=_0x152ccd-0x0;var _0x4532a8=_0x2b01[_0x152ccd];return _0x4532a8;};'use strict';var Sequelize=require('sequelize');module[_0x12b0('0x0')]={'license':{'type':Sequelize[_0x12b0('0x1')]},'data1':{'type':Sequelize[_0x12b0('0x2')]},'data2':{'type':Sequelize[_0x12b0('0x2')]},'chatLicenseExceeded':{'type':Sequelize[_0x12b0('0x3')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x48e0=['sequelize','exports','TEXT','STRING','INTEGER'];(function(_0x4d4c73,_0x5e11c3){var _0x36ac1b=function(_0x89c2c){while(--_0x89c2c){_0x4d4c73['push'](_0x4d4c73['shift']());}};_0x36ac1b(++_0x5e11c3);}(_0x48e0,0xb4));var _0x048e=function(_0x29c5f1,_0x4dcbe9){_0x29c5f1=_0x29c5f1-0x0;var _0x591bf7=_0x48e0[_0x29c5f1];return _0x591bf7;};'use strict';var Sequelize=require(_0x048e('0x0'));module[_0x048e('0x1')]={'license':{'type':Sequelize[_0x048e('0x2')]},'data1':{'type':Sequelize[_0x048e('0x3')]},'data2':{'type':Sequelize[_0x048e('0x3')]},'chatLicenseExceeded':{'type':Sequelize[_0x048e('0x4')],'defaultValue':0x0}};
\ No newline at end of file
index 12c4ef7..c8ad24c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8375=['checkLicense','key','body','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','desk.js','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','json','count','offset','limit','apply','reject','save','destroy','then','stack','name','../../config/license/util','index','model','keys','rawAttributes','query','filters','intersection','fields','attributes','length','catch','update','License','find','get'];(function(_0x28e6cf,_0x1b9fe0){var _0x5874ea=function(_0x245013){while(--_0x245013){_0x28e6cf['push'](_0x28e6cf['shift']());}};_0x5874ea(++_0x1b9fe0);}(_0x8375,0xa8));var _0x5837=function(_0x2c8d9a,_0x38dc7d){_0x2c8d9a=_0x2c8d9a-0x0;var _0x6689d9=_0x8375[_0x2c8d9a];return _0x6689d9;};'use strict';var pdf=require(_0x5837('0x0'));var emlformat=require(_0x5837('0x1'));var rimraf=require(_0x5837('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x5837('0x3'));var rp=require(_0x5837('0x4'));var moment=require(_0x5837('0x5'));var BPromise=require(_0x5837('0x6'));var Mustache=require(_0x5837('0x7'));var util=require(_0x5837('0x8'));var path=require('path');var sox=require(_0x5837('0x9'));var csv=require(_0x5837('0xa'));var ejs=require(_0x5837('0xb'));var fs=require('fs');var _=require(_0x5837('0xc'));var squel=require(_0x5837('0xd'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x5837('0xe'));var toCsv=require(_0x5837('0xa'));var querystring=require('querystring');var Papa=require(_0x5837('0xf'));var Redis=require('ioredis');var authService=require(_0x5837('0x10'));var qs=require(_0x5837('0x11'));var hardwareService=require(_0x5837('0x12'));var logger=require(_0x5837('0x13'))(_0x5837('0x14'));var utils=require(_0x5837('0x15'));var config=require('../../config/environment');var db=require(_0x5837('0x16'))['db'];function respondWithStatusCode(_0x312533,_0x1b0a4d){_0x1b0a4d=_0x1b0a4d||0xcc;return function(_0x10c1a1){if(_0x10c1a1){return _0x312533[_0x5837('0x17')](_0x1b0a4d);}return _0x312533['status'](_0x1b0a4d)['end']();};}function respondWithResult(_0x5a23d2,_0x1fb327){_0x1fb327=_0x1fb327||0xc8;return function(_0x111dbf){if(_0x111dbf){return _0x5a23d2[_0x5837('0x18')](_0x1fb327)[_0x5837('0x19')](_0x111dbf);}};}function respondWithFilteredResult(_0x17601e,_0x2a7d71){return function(_0x206f02){if(_0x206f02){var _0x754f39=_0x206f02[_0x5837('0x1a')],_0x10d882=_0x2a7d71['offset'],_0x59a378=_0x2a7d71[_0x5837('0x1b')]+_0x2a7d71[_0x5837('0x1c')],_0x189967;if(_0x59a378>=_0x754f39){_0x59a378=_0x754f39;_0x189967=0xc8;}else{_0x189967=0xce;}_0x17601e[_0x5837('0x18')](_0x189967);return _0x17601e['set']('Content-Range',_0x10d882+'-'+_0x59a378+'/'+_0x754f39)['json'](_0x206f02);}return null;};}function patchUpdates(_0x38d0c9){return function(_0x3a5386){try{jsonpatch[_0x5837('0x1d')](_0x3a5386,_0x38d0c9,!![]);}catch(_0x58e7f7){return BPromise[_0x5837('0x1e')](_0x58e7f7);}return _0x3a5386[_0x5837('0x1f')]();};}function saveUpdates(_0x316d43,_0x139111){return function(_0x5881ff){if(_0x5881ff){return _0x5881ff['update'](_0x316d43)['then'](function(_0x3d352f){return _0x3d352f;});}return null;};}function removeEntity(_0x5475c3,_0x275cb6){return function(_0x2bd103){if(_0x2bd103){return _0x2bd103[_0x5837('0x20')]()[_0x5837('0x21')](function(){_0x5475c3['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x1b80db,_0x2262b9){return function(_0x406506){if(!_0x406506){_0x1b80db['sendStatus'](0x194);}return _0x406506;};}function handleError(_0x7a6232,_0x46296c){_0x46296c=_0x46296c||0x1f4;return function(_0x231b17){logger['error'](_0x231b17[_0x5837('0x22')]);if(_0x231b17[_0x5837('0x23')]){delete _0x231b17[_0x5837('0x23')];}_0x7a6232['status'](_0x46296c)['send'](_0x231b17);};}var utilLicense=require(_0x5837('0x24'));exports[_0x5837('0x25')]=function(_0x23a4e3,_0x2ae6a0){var _0x2d5c00={'raw':!![],'where':{'id':0x1}},_0x3adb74={};_0x3adb74[_0x5837('0x26')]=_[_0x5837('0x27')](db['License'][_0x5837('0x28')]);_0x3adb74[_0x5837('0x29')]=_[_0x5837('0x27')](_0x23a4e3[_0x5837('0x29')]);_0x3adb74[_0x5837('0x2a')]=_[_0x5837('0x2b')](_0x3adb74[_0x5837('0x26')],_0x3adb74[_0x5837('0x29')]);_0x2d5c00['attributes']=_['intersection'](_0x3adb74[_0x5837('0x26')],qs[_0x5837('0x2c')](_0x23a4e3['query'][_0x5837('0x2c')]));_0x2d5c00[_0x5837('0x2d')]=_0x2d5c00['attributes'][_0x5837('0x2e')]?_0x2d5c00[_0x5837('0x2d')]:_0x3adb74[_0x5837('0x26')];_0x2d5c00=_['merge']({},_0x2d5c00,_0x23a4e3['options']);return utilLicense['getLicense'](_0x2d5c00)[_0x5837('0x21')](respondWithResult(_0x2ae6a0,null))[_0x5837('0x2f')](handleError(_0x2ae6a0,null));};exports[_0x5837('0x30')]=function(_0x1902a4,_0x1c0eca){if(_0x1902a4['body']['id']){delete _0x1902a4['body']['id'];}return db[_0x5837('0x31')][_0x5837('0x32')]({'where':{'id':_0x1902a4['params']['id']}})['then'](handleEntityNotFound(_0x1c0eca,null))[_0x5837('0x21')](function(_0x5d282e){var _0x5dcd99=_0x5d282e[_0x5837('0x33')]({'plain':!![]});return utilLicense[_0x5837('0x34')](_0x5dcd99,_0x1902a4['body'][_0x5837('0x35')]);})[_0x5837('0x21')](function(_0x2c8321){if(!_0x2c8321['demo']){return saveUpdates(_0x1902a4[_0x5837('0x36')],null);}return _0x2c8321;})[_0x5837('0x21')](respondWithResult(_0x1c0eca,null))[_0x5837('0x2f')](handleError(_0x1c0eca,null));};
\ No newline at end of file
+var _0xa0a1=['fields','length','merge','getLicense','update','body','params','checkLicense','key','demo','catch','html-pdf','rimraf','zip-dir','fast-json-patch','bluebird','mustache','path','sox','ejs','lodash','squel','crypto','jsforce','to-csv','querystring','papaparse','../../config/license/hardware','../../config/logger','api','../../config/environment','sendStatus','status','end','json','count','offset','set','Content-Range','reject','save','then','destroy','error','stack','send','../../config/license/util','index','model','keys','License','rawAttributes','query','filters','intersection','attributes'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0xa0a1,0x15b));var _0x1a0a=function(_0x1cb6af,_0x46be2b){_0x1cb6af=_0x1cb6af-0x0;var _0x3b9bcd=_0xa0a1[_0x1cb6af];return _0x3b9bcd;};'use strict';var pdf=require(_0x1a0a('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x1a0a('0x1'));var zipdir=require(_0x1a0a('0x2'));var jsonpatch=require(_0x1a0a('0x3'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x1a0a('0x4'));var Mustache=require(_0x1a0a('0x5'));var util=require('util');var path=require(_0x1a0a('0x6'));var sox=require(_0x1a0a('0x7'));var csv=require('to-csv');var ejs=require(_0x1a0a('0x8'));var fs=require('fs');var _=require(_0x1a0a('0x9'));var squel=require(_0x1a0a('0xa'));var crypto=require(_0x1a0a('0xb'));var jsforce=require(_0x1a0a('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x1a0a('0xd'));var querystring=require(_0x1a0a('0xe'));var Papa=require(_0x1a0a('0xf'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0x1a0a('0x10'));var logger=require(_0x1a0a('0x11'))(_0x1a0a('0x12'));var utils=require('../../config/utils');var config=require(_0x1a0a('0x13'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x280df2,_0x111e90){_0x111e90=_0x111e90||0xcc;return function(_0x461b36){if(_0x461b36){return _0x280df2[_0x1a0a('0x14')](_0x111e90);}return _0x280df2[_0x1a0a('0x15')](_0x111e90)[_0x1a0a('0x16')]();};}function respondWithResult(_0x3f34d2,_0x4f2b35){_0x4f2b35=_0x4f2b35||0xc8;return function(_0x88d191){if(_0x88d191){return _0x3f34d2[_0x1a0a('0x15')](_0x4f2b35)[_0x1a0a('0x17')](_0x88d191);}};}function respondWithFilteredResult(_0x26c1df,_0xe1fd03){return function(_0x4c8080){if(_0x4c8080){var _0x16b8c9=_0x4c8080[_0x1a0a('0x18')],_0x80627b=_0xe1fd03['offset'],_0x157b74=_0xe1fd03[_0x1a0a('0x19')]+_0xe1fd03['limit'],_0x5b6d15;if(_0x157b74>=_0x16b8c9){_0x157b74=_0x16b8c9;_0x5b6d15=0xc8;}else{_0x5b6d15=0xce;}_0x26c1df['status'](_0x5b6d15);return _0x26c1df[_0x1a0a('0x1a')](_0x1a0a('0x1b'),_0x80627b+'-'+_0x157b74+'/'+_0x16b8c9)[_0x1a0a('0x17')](_0x4c8080);}return null;};}function patchUpdates(_0x2ee613){return function(_0x4d11a4){try{jsonpatch['apply'](_0x4d11a4,_0x2ee613,!![]);}catch(_0x239065){return BPromise[_0x1a0a('0x1c')](_0x239065);}return _0x4d11a4[_0x1a0a('0x1d')]();};}function saveUpdates(_0x5b2884,_0x1976ba){return function(_0x3547fe){if(_0x3547fe){return _0x3547fe['update'](_0x5b2884)[_0x1a0a('0x1e')](function(_0x1ba27f){return _0x1ba27f;});}return null;};}function removeEntity(_0x316ae3,_0x53e569){return function(_0x159a2a){if(_0x159a2a){return _0x159a2a[_0x1a0a('0x1f')]()[_0x1a0a('0x1e')](function(){_0x316ae3['status'](0xcc)[_0x1a0a('0x16')]();});}};}function handleEntityNotFound(_0x47ef88,_0x28c094){return function(_0x2d426d){if(!_0x2d426d){_0x47ef88[_0x1a0a('0x14')](0x194);}return _0x2d426d;};}function handleError(_0x29bb35,_0x35e411){_0x35e411=_0x35e411||0x1f4;return function(_0x578995){logger[_0x1a0a('0x20')](_0x578995[_0x1a0a('0x21')]);if(_0x578995['name']){delete _0x578995['name'];}_0x29bb35[_0x1a0a('0x15')](_0x35e411)[_0x1a0a('0x22')](_0x578995);};}var utilLicense=require(_0x1a0a('0x23'));exports[_0x1a0a('0x24')]=function(_0x4483a3,_0x244bbf){var _0x338e8c={'raw':!![],'where':{'id':0x1}},_0x18e676={};_0x18e676[_0x1a0a('0x25')]=_[_0x1a0a('0x26')](db[_0x1a0a('0x27')][_0x1a0a('0x28')]);_0x18e676[_0x1a0a('0x29')]=_[_0x1a0a('0x26')](_0x4483a3[_0x1a0a('0x29')]);_0x18e676[_0x1a0a('0x2a')]=_[_0x1a0a('0x2b')](_0x18e676['model'],_0x18e676[_0x1a0a('0x29')]);_0x338e8c[_0x1a0a('0x2c')]=_[_0x1a0a('0x2b')](_0x18e676[_0x1a0a('0x25')],qs[_0x1a0a('0x2d')](_0x4483a3[_0x1a0a('0x29')][_0x1a0a('0x2d')]));_0x338e8c[_0x1a0a('0x2c')]=_0x338e8c[_0x1a0a('0x2c')][_0x1a0a('0x2e')]?_0x338e8c['attributes']:_0x18e676[_0x1a0a('0x25')];_0x338e8c=_[_0x1a0a('0x2f')]({},_0x338e8c,_0x4483a3['options']);return utilLicense[_0x1a0a('0x30')](_0x338e8c)['then'](respondWithResult(_0x244bbf,null))['catch'](handleError(_0x244bbf,null));};exports[_0x1a0a('0x31')]=function(_0x38c7f3,_0x4fd7b9){if(_0x38c7f3[_0x1a0a('0x32')]['id']){delete _0x38c7f3[_0x1a0a('0x32')]['id'];}return db[_0x1a0a('0x27')]['find']({'where':{'id':_0x38c7f3[_0x1a0a('0x33')]['id']}})[_0x1a0a('0x1e')](handleEntityNotFound(_0x4fd7b9,null))['then'](function(_0x439db4){var _0x20084d=_0x439db4['get']({'plain':!![]});return utilLicense[_0x1a0a('0x34')](_0x20084d,_0x38c7f3[_0x1a0a('0x32')][_0x1a0a('0x35')]);})[_0x1a0a('0x1e')](function(_0x58f689){if(!_0x58f689[_0x1a0a('0x36')]){return saveUpdates(_0x38c7f3[_0x1a0a('0x32')],null);}return _0x58f689;})[_0x1a0a('0x1e')](respondWithResult(_0x4fd7b9,null))[_0x1a0a('0x37')](handleError(_0x4fd7b9,null));};
\ No newline at end of file
index 6ccd348..2362efa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x39c4=['License','license','util','moment','bluebird','rimraf','../../config/environment','./license.attributes','exports','define'];(function(_0x44fdb5,_0x4ed1e7){var _0x266256=function(_0xc88b6f){while(--_0xc88b6f){_0x44fdb5['push'](_0x44fdb5['shift']());}};_0x266256(++_0x4ed1e7);}(_0x39c4,0x174));var _0x439c=function(_0x2185d4,_0x2c0433){_0x2185d4=_0x2185d4-0x0;var _0x450ba1=_0x39c4[_0x2185d4];return _0x450ba1;};'use strict';var _=require('lodash');var util=require(_0x439c('0x0'));var logger=require('../../config/logger')('api');var moment=require(_0x439c('0x1'));var BPromise=require(_0x439c('0x2'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x439c('0x3'));var config=require(_0x439c('0x4'));var attributes=require(_0x439c('0x5'));module[_0x439c('0x6')]=function(_0x105a46,_0x387467){return _0x105a46[_0x439c('0x7')](_0x439c('0x8'),attributes,{'tableName':_0x439c('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xbaf0=['../../config/logger','api','moment','bluebird','request-promise','rimraf','../../config/environment','./license.attributes','exports','define','License','license','util'];(function(_0x5de366,_0x42e495){var _0x5687c5=function(_0x406090){while(--_0x406090){_0x5de366['push'](_0x5de366['shift']());}};_0x5687c5(++_0x42e495);}(_0xbaf0,0x12a));var _0x0baf=function(_0x432682,_0x253044){_0x432682=_0x432682-0x0;var _0x463d05=_0xbaf0[_0x432682];return _0x463d05;};'use strict';var _=require('lodash');var util=require(_0x0baf('0x0'));var logger=require(_0x0baf('0x1'))(_0x0baf('0x2'));var moment=require(_0x0baf('0x3'));var BPromise=require(_0x0baf('0x4'));var rp=require(_0x0baf('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x0baf('0x6'));var config=require(_0x0baf('0x7'));var attributes=require(_0x0baf('0x8'));module[_0x0baf('0x9')]=function(_0xe4c3c4,_0x335e24){return _0xe4c3c4[_0x0baf('0xa')](_0x0baf('0xb'),attributes,{'tableName':_0x0baf('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2278e06..6d96da1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4c0b=['request\x20sent','debug','License,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','request','then','info','License,\x20%s,\x20%s'];(function(_0x30d3a9,_0x519e68){var _0x32580e=function(_0x91267){while(--_0x91267){_0x30d3a9['push'](_0x30d3a9['shift']());}};_0x32580e(++_0x519e68);}(_0x4c0b,0x1e4));var _0xb4c0=function(_0x429095,_0x5d9760){_0x429095=_0x429095-0x0;var _0x2dd7e2=_0x4c0b[_0x429095];return _0x2dd7e2;};'use strict';var _=require(_0xb4c0('0x0'));var util=require(_0xb4c0('0x1'));var moment=require(_0xb4c0('0x2'));var BPromise=require(_0xb4c0('0x3'));var rs=require(_0xb4c0('0x4'));var fs=require('fs');var Redis=require(_0xb4c0('0x5'));var db=require(_0xb4c0('0x6'))['db'];var utils=require(_0xb4c0('0x7'));var logger=require(_0xb4c0('0x8'))('rpc');var config=require(_0xb4c0('0x9'));var jayson=require(_0xb4c0('0xa'));var client=jayson[_0xb4c0('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x13b316,_0x5c34a3,_0x3aee22){return new BPromise(function(_0x4d2f01,_0x5ed826){return client[_0xb4c0('0xc')](_0x13b316,_0x3aee22)[_0xb4c0('0xd')](function(_0x32cffe){logger[_0xb4c0('0xe')](_0xb4c0('0xf'),_0x5c34a3,_0xb4c0('0x10'));logger[_0xb4c0('0x11')](_0xb4c0('0x12'),_0x5c34a3,_0xb4c0('0x10'),JSON[_0xb4c0('0x13')](_0x32cffe));if(_0x32cffe['error']){if(_0x32cffe[_0xb4c0('0x14')][_0xb4c0('0x15')]===0x1f4){logger[_0xb4c0('0x14')](_0xb4c0('0xf'),_0x5c34a3,_0x32cffe[_0xb4c0('0x14')][_0xb4c0('0x16')]);return _0x5ed826(_0x32cffe[_0xb4c0('0x14')][_0xb4c0('0x16')]);}logger['error'](_0xb4c0('0xf'),_0x5c34a3,_0x32cffe['error'][_0xb4c0('0x16')]);return _0x4d2f01(_0x32cffe[_0xb4c0('0x14')][_0xb4c0('0x16')]);}else{logger['info'](_0xb4c0('0xf'),_0x5c34a3,'request\x20sent');_0x4d2f01(_0x32cffe[_0xb4c0('0x17')]['message']);}})[_0xb4c0('0x18')](function(_0x48b53e){logger['error'](_0xb4c0('0xf'),_0x5c34a3,_0x48b53e);_0x5ed826(_0x48b53e);});});}
\ No newline at end of file
+var _0x8472=['debug','License,\x20%s,\x20%s,\x20%s','stringify','error','code','License,\x20%s,\x20%s','message','result','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','info','request\x20sent'];(function(_0x2e8905,_0x57c504){var _0x4c3af4=function(_0x1d2e52){while(--_0x1d2e52){_0x2e8905['push'](_0x2e8905['shift']());}};_0x4c3af4(++_0x57c504);}(_0x8472,0xd7));var _0x2847=function(_0x57b311,_0x122bfb){_0x57b311=_0x57b311-0x0;var _0x2051ce=_0x8472[_0x57b311];return _0x2051ce;};'use strict';var _=require(_0x2847('0x0'));var util=require(_0x2847('0x1'));var moment=require(_0x2847('0x2'));var BPromise=require(_0x2847('0x3'));var rs=require(_0x2847('0x4'));var fs=require('fs');var Redis=require(_0x2847('0x5'));var db=require(_0x2847('0x6'))['db'];var utils=require(_0x2847('0x7'));var logger=require(_0x2847('0x8'))('rpc');var config=require(_0x2847('0x9'));var jayson=require(_0x2847('0xa'));var client=jayson[_0x2847('0xb')][_0x2847('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x425bc1,_0x578114,_0x138e71){return new BPromise(function(_0x34fe8d,_0x145c70){return client['request'](_0x425bc1,_0x138e71)['then'](function(_0x401866){logger[_0x2847('0xd')]('License,\x20%s,\x20%s',_0x578114,_0x2847('0xe'));logger[_0x2847('0xf')](_0x2847('0x10'),_0x578114,_0x2847('0xe'),JSON[_0x2847('0x11')](_0x401866));if(_0x401866['error']){if(_0x401866[_0x2847('0x12')][_0x2847('0x13')]===0x1f4){logger[_0x2847('0x12')](_0x2847('0x14'),_0x578114,_0x401866[_0x2847('0x12')]['message']);return _0x145c70(_0x401866['error'][_0x2847('0x15')]);}logger['error'](_0x2847('0x14'),_0x578114,_0x401866[_0x2847('0x12')][_0x2847('0x15')]);return _0x34fe8d(_0x401866[_0x2847('0x12')][_0x2847('0x15')]);}else{logger[_0x2847('0xd')](_0x2847('0x14'),_0x578114,_0x2847('0xe'));_0x34fe8d(_0x401866[_0x2847('0x16')][_0x2847('0x15')]);}})['catch'](function(_0x1687eb){logger['error'](_0x2847('0x14'),_0x578114,_0x1687eb);_0x145c70(_0x1687eb);});});}
\ No newline at end of file
index 2a70d88..001f460 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbd8b=['/:id/applications','/:id/messages','getMessages','verifySmtp','/:id/users','getAgents','post','addDisposition','addAnswer','create','addImap','/:id/out_servers','addSmtp','addInteraction','addApplications','/:id/send','addAgents','put','update','removeDispositions','delete','removeAnswers','removeImap','removeSmtp','removeAgents','exports','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailAccount.controller','get','isAuthenticated','index','/describe','describe','/:id','/:id/dispositions','/:id/canned_answers','getAnswers','/:id/in_servers','getSmtp','/:id/interactions','getInteractions'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xbd8b,0x12e));var _0xbbd8=function(_0x4fa8a9,_0x88baa2){_0x4fa8a9=_0x4fa8a9-0x0;var _0x44384c=_0xbd8b[_0x4fa8a9];return _0x44384c;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xbbd8('0x0'));var timeout=require(_0xbbd8('0x1'));var express=require(_0xbbd8('0x2'));var router=express['Router']();var auth=require(_0xbbd8('0x3'));var interaction=require(_0xbbd8('0x4'));var config=require(_0xbbd8('0x5'));var controller=require(_0xbbd8('0x6'));router[_0xbbd8('0x7')]('/',auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x9')]);router['get'](_0xbbd8('0xa'),auth[_0xbbd8('0x8')](),controller[_0xbbd8('0xb')]);router[_0xbbd8('0x7')](_0xbbd8('0xc'),auth['isAuthenticated'](),controller['show']);router['get'](_0xbbd8('0xd'),auth['isAuthenticated'](),controller['getDispositions']);router[_0xbbd8('0x7')](_0xbbd8('0xe'),auth['isAuthenticated'](),controller[_0xbbd8('0xf')]);router[_0xbbd8('0x7')](_0xbbd8('0x10'),auth['isAuthenticated'](),controller['getImap']);router[_0xbbd8('0x7')]('/:id/out_servers',auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x11')]);router[_0xbbd8('0x7')](_0xbbd8('0x12'),auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x13')]);router['get'](_0xbbd8('0x14'),auth['isAuthenticated'](),controller['getApplications']);router[_0xbbd8('0x7')](_0xbbd8('0x15'),auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x16')]);router[_0xbbd8('0x7')]('/:id/verify',auth['isAuthenticated'](),controller[_0xbbd8('0x17')]);router[_0xbbd8('0x7')](_0xbbd8('0x18'),auth['isAuthenticated'](),controller[_0xbbd8('0x19')]);router[_0xbbd8('0x1a')](_0xbbd8('0xd'),auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x1b')]);router[_0xbbd8('0x1a')]('/:id/canned_answers',auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x1c')]);router['post']('/',auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x1d')]);router[_0xbbd8('0x1a')]('/:id/in_servers',auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x1e')]);router['post'](_0xbbd8('0x1f'),auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x20')]);router[_0xbbd8('0x1a')]('/:id/interactions',auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x21')]);router['post']('/:id/applications',auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x22')]);router[_0xbbd8('0x1a')](_0xbbd8('0x23'),auth['isAuthenticated'](),controller['send']);router[_0xbbd8('0x1a')]('/:id/users',auth['isAuthenticated'](),controller[_0xbbd8('0x24')]);router[_0xbbd8('0x25')](_0xbbd8('0xc'),auth['isAuthenticated'](),controller[_0xbbd8('0x26')]);router['delete']('/:id/dispositions',auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x27')]);router[_0xbbd8('0x28')](_0xbbd8('0xe'),auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x29')]);router[_0xbbd8('0x28')](_0xbbd8('0x10'),auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x2a')]);router['delete']('/:id/out_servers',auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x2b')]);router['delete'](_0xbbd8('0xc'),auth[_0xbbd8('0x8')](),controller['destroy']);router[_0xbbd8('0x28')](_0xbbd8('0x18'),auth[_0xbbd8('0x8')](),controller[_0xbbd8('0x2c')]);module[_0xbbd8('0x2d')]=router;
\ No newline at end of file
+var _0xd078=['addAgents','put','delete','removeDispositions','removeImap','removeSmtp','removeAgents','exports','util','path','Router','./mailAccount.controller','get','isAuthenticated','index','/describe','describe','/:id','getDispositions','/:id/canned_answers','getAnswers','/:id/in_servers','getSmtp','/:id/interactions','getInteractions','/:id/applications','getApplications','/:id/messages','getMessages','verifySmtp','/:id/users','getAgents','/:id/dispositions','addAnswer','post','create','/:id/out_servers','addInteraction','addApplications','/:id/send','send'];(function(_0x3ff3c5,_0x4f3fd2){var _0x2208c2=function(_0x2998a9){while(--_0x2998a9){_0x3ff3c5['push'](_0x3ff3c5['shift']());}};_0x2208c2(++_0x4f3fd2);}(_0xd078,0x179));var _0x8d07=function(_0x137d1d,_0x35c663){_0x137d1d=_0x137d1d-0x0;var _0x485108=_0xd078[_0x137d1d];return _0x485108;};'use strict';var multer=require('multer');var util=require(_0x8d07('0x0'));var path=require(_0x8d07('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x8d07('0x2')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x8d07('0x3'));router[_0x8d07('0x4')]('/',auth[_0x8d07('0x5')](),controller[_0x8d07('0x6')]);router['get'](_0x8d07('0x7'),auth[_0x8d07('0x5')](),controller[_0x8d07('0x8')]);router[_0x8d07('0x4')](_0x8d07('0x9'),auth[_0x8d07('0x5')](),controller['show']);router[_0x8d07('0x4')]('/:id/dispositions',auth[_0x8d07('0x5')](),controller[_0x8d07('0xa')]);router[_0x8d07('0x4')](_0x8d07('0xb'),auth[_0x8d07('0x5')](),controller[_0x8d07('0xc')]);router['get'](_0x8d07('0xd'),auth[_0x8d07('0x5')](),controller['getImap']);router['get']('/:id/out_servers',auth[_0x8d07('0x5')](),controller[_0x8d07('0xe')]);router['get'](_0x8d07('0xf'),auth[_0x8d07('0x5')](),controller[_0x8d07('0x10')]);router[_0x8d07('0x4')](_0x8d07('0x11'),auth[_0x8d07('0x5')](),controller[_0x8d07('0x12')]);router[_0x8d07('0x4')](_0x8d07('0x13'),auth[_0x8d07('0x5')](),controller[_0x8d07('0x14')]);router['get']('/:id/verify',auth['isAuthenticated'](),controller[_0x8d07('0x15')]);router[_0x8d07('0x4')](_0x8d07('0x16'),auth[_0x8d07('0x5')](),controller[_0x8d07('0x17')]);router['post'](_0x8d07('0x18'),auth[_0x8d07('0x5')](),controller['addDisposition']);router['post'](_0x8d07('0xb'),auth[_0x8d07('0x5')](),controller[_0x8d07('0x19')]);router[_0x8d07('0x1a')]('/',auth[_0x8d07('0x5')](),controller[_0x8d07('0x1b')]);router['post']('/:id/in_servers',auth[_0x8d07('0x5')](),controller['addImap']);router[_0x8d07('0x1a')](_0x8d07('0x1c'),auth['isAuthenticated'](),controller['addSmtp']);router[_0x8d07('0x1a')](_0x8d07('0xf'),auth[_0x8d07('0x5')](),controller[_0x8d07('0x1d')]);router['post'](_0x8d07('0x11'),auth[_0x8d07('0x5')](),controller[_0x8d07('0x1e')]);router['post'](_0x8d07('0x1f'),auth[_0x8d07('0x5')](),controller[_0x8d07('0x20')]);router['post'](_0x8d07('0x16'),auth[_0x8d07('0x5')](),controller[_0x8d07('0x21')]);router[_0x8d07('0x22')](_0x8d07('0x9'),auth[_0x8d07('0x5')](),controller['update']);router[_0x8d07('0x23')](_0x8d07('0x18'),auth[_0x8d07('0x5')](),controller[_0x8d07('0x24')]);router[_0x8d07('0x23')](_0x8d07('0xb'),auth['isAuthenticated'](),controller['removeAnswers']);router[_0x8d07('0x23')](_0x8d07('0xd'),auth['isAuthenticated'](),controller[_0x8d07('0x25')]);router[_0x8d07('0x23')](_0x8d07('0x1c'),auth['isAuthenticated'](),controller[_0x8d07('0x26')]);router[_0x8d07('0x23')](_0x8d07('0x9'),auth['isAuthenticated'](),controller['destroy']);router['delete'](_0x8d07('0x16'),auth['isAuthenticated'](),controller[_0x8d07('0x27')]);module[_0x8d07('0x28')]=router;
\ No newline at end of file
index 40c45d7..3e00ed4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe360=['BOOLEAN','TEXT','STRING','Arial,Helvetica,sans-serif','INTEGER','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}<br/>Subject\x20:\x20{{message.subject}}','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','setDataValue','mandatoryDispositionPauseId','mandatoryDisposition','sequelize'];(function(_0x10b6e2,_0x122fba){var _0x3e67d1=function(_0x48c03d){while(--_0x48c03d){_0x10b6e2['push'](_0x10b6e2['shift']());}};_0x3e67d1(++_0x122fba);}(_0xe360,0x1b7));var _0x0e36=function(_0x4d8ed9,_0x2ae284){_0x4d8ed9=_0x4d8ed9-0x0;var _0x1e2140=_0xe360[_0x4d8ed9];return _0x1e2140;};'use strict';var Sequelize=require(_0x0e36('0x0'));module['exports']={'description':{'type':Sequelize['STRING']},'name':{'type':Sequelize['STRING'],'allowNull':![]},'service':{'type':Sequelize[_0x0e36('0x1')],'defaultValue':![]},'email':{'type':Sequelize['STRING'],'validate':{'isEmail':!![]}},'active':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'key':{'type':Sequelize['STRING'],'allowNull':![]},'template':{'type':Sequelize[_0x0e36('0x2')]},'markAsUnread':{'type':Sequelize[_0x0e36('0x1')],'defaultValue':![]},'fontFamily':{'type':Sequelize[_0x0e36('0x3')],'allowNull':![],'defaultValue':_0x0e36('0x4')},'fontSize':{'type':Sequelize[_0x0e36('0x5')](0x2)['UNSIGNED'],'defaultValue':0xd,'validate':{'min':0x8,'max':0x48}},'notificationTemplate':{'type':Sequelize['TEXT'],'defaultValue':function(){return _0x0e36('0x6');}},'notificationSound':{'type':Sequelize[_0x0e36('0x1')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x0e36('0x1')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x0e36('0x5')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x0e36('0x5')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0x0e36('0x5')],'allowNull':!![],'defaultValue':null,'comment':_0x0e36('0x7')},'mandatoryDisposition':{'type':Sequelize[_0x0e36('0x1')],'defaultValue':![],'comment':'Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','set':function(_0x345427){if(!_0x345427)this[_0x0e36('0x8')](_0x0e36('0x9'),null);this['setDataValue'](_0x0e36('0xa'),_0x345427);}}};
\ No newline at end of file
+var _0x2c1f=['Arial,Helvetica,sans-serif','INTEGER','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}<br/>Subject\x20:\x20{{message.subject}}','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','setDataValue','sequelize','exports','STRING','BOOLEAN','TEXT'];(function(_0x1a36a5,_0x746928){var _0x746243=function(_0x481966){while(--_0x481966){_0x1a36a5['push'](_0x1a36a5['shift']());}};_0x746243(++_0x746928);}(_0x2c1f,0x18b));var _0xf2c1=function(_0x1ca1ff,_0x4d395d){_0x1ca1ff=_0x1ca1ff-0x0;var _0xcc4dc3=_0x2c1f[_0x1ca1ff];return _0xcc4dc3;};'use strict';var Sequelize=require(_0xf2c1('0x0'));module[_0xf2c1('0x1')]={'description':{'type':Sequelize['STRING']},'name':{'type':Sequelize[_0xf2c1('0x2')],'allowNull':![]},'service':{'type':Sequelize[_0xf2c1('0x3')],'defaultValue':![]},'email':{'type':Sequelize['STRING'],'validate':{'isEmail':!![]}},'active':{'type':Sequelize[_0xf2c1('0x3')],'defaultValue':!![]},'key':{'type':Sequelize['STRING'],'allowNull':![]},'template':{'type':Sequelize[_0xf2c1('0x4')]},'markAsUnread':{'type':Sequelize[_0xf2c1('0x3')],'defaultValue':![]},'fontFamily':{'type':Sequelize[_0xf2c1('0x2')],'allowNull':![],'defaultValue':_0xf2c1('0x5')},'fontSize':{'type':Sequelize[_0xf2c1('0x6')](0x2)['UNSIGNED'],'defaultValue':0xd,'validate':{'min':0x8,'max':0x48}},'notificationTemplate':{'type':Sequelize[_0xf2c1('0x4')],'defaultValue':function(){return _0xf2c1('0x7');}},'notificationSound':{'type':Sequelize[_0xf2c1('0x3')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xf2c1('0x3')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0xf2c1('0x3')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xf2c1('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0xf2c1('0x3')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xf2c1('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0xf2c1('0x6')],'allowNull':!![],'defaultValue':null,'comment':_0xf2c1('0x8')},'mandatoryDisposition':{'type':Sequelize[_0xf2c1('0x3')],'defaultValue':![],'comment':'Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','set':function(_0x375dcd){if(!_0x375dcd)this[_0xf2c1('0x9')]('mandatoryDispositionPauseId',null);this[_0xf2c1('0x9')]('mandatoryDisposition',_0x375dcd);}}};
\ No newline at end of file
index f698bec..2213dbb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdbfc=['addAnswer','getAnswers','CannedAnswer','rows','removeAnswers','ids','ListId','active','description','isNil','cservice','cauthentication','user','cuser','pass','authentication','host','port','service','password','cpassword','role','UserProfileSection','MailAccounts','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','getImap','setImap','getSmtp','addSmtp','removeSmtp','setSmtp','addInteraction','omit','getInteractions','MailInteraction','nolimit','CmContact','Contact','User','Owner','internal','color','tag','addApplications','sequelize','transaction','MailApplication','bulkCreate','findAndCountAll','priority','getApplications','getMessages','MailMessage','$gte','split','CmList','List','Contacts','updatedAt','DESC','from','format','attachments','root','server/files/attachments','basename','auth','secure','sendMail','List\x20not\x20found','subject','attach','out','messageId','YYYY-MM-DD\x20HH:mm:ss','Interaction','verifySmtp','VerifySmtp','Sequelize','ValidationError','You\x20can\x27t\x20remove\x20the\x20mail\x20service\x20account','addAgents','spread','emit','userMailAccount:save','removeAgents','isArray','userMailAccount:remove','getAgents','html-pdf','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','../../config/utils','../../mysqldb','defaults','redis','localhost','register','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','then','info','MailAccount,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','status','end','json','count','offset','limit','set','apply','save','update','get','UserProfileResource','destroy','sendStatus','stack','name','send','index','MailServerIn','Imap','MailServerOut','Pause','mandatoryDispositionPause','MailAccount','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','order','sort','pick','where','map','key','field','filter','merge','options','includeAll','include','findAll','show','params','Smtp','find','body','describe','addDisposition','MailAccountId','create','getDispositions','findOne','Disposition','removeDispositions'];(function(_0x175947,_0x106269){var _0x162070=function(_0x25bc01){while(--_0x25bc01){_0x175947['push'](_0x175947['shift']());}};_0x162070(++_0x106269);}(_0xdbfc,0x11d));var _0xcdbf=function(_0x58178f,_0x3ff393){_0x58178f=_0x58178f-0x0;var _0x2e8a31=_0xdbfc[_0x58178f];return _0x2e8a31;};'use strict';var pdf=require(_0xcdbf('0x0'));var emlformat=require(_0xcdbf('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0xcdbf('0x2'));var rp=require(_0xcdbf('0x3'));var moment=require(_0xcdbf('0x4'));var BPromise=require(_0xcdbf('0x5'));var Mustache=require(_0xcdbf('0x6'));var util=require(_0xcdbf('0x7'));var path=require(_0xcdbf('0x8'));var sox=require('sox');var csv=require(_0xcdbf('0x9'));var ejs=require(_0xcdbf('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0xcdbf('0xb'));var crypto=require(_0xcdbf('0xc'));var jsforce=require(_0xcdbf('0xd'));var deskjs=require(_0xcdbf('0xe'));var toCsv=require('to-csv');var querystring=require(_0xcdbf('0xf'));var Papa=require(_0xcdbf('0x10'));var Redis=require(_0xcdbf('0x11'));var authService=require(_0xcdbf('0x12'));var qs=require(_0xcdbf('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xcdbf('0x14'))('api');var utils=require(_0xcdbf('0x15'));var config=require('../../config/environment');var db=require(_0xcdbf('0x16'))['db'];config['redis']=_[_0xcdbf('0x17')](config[_0xcdbf('0x18')],{'host':_0xcdbf('0x19'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xcdbf('0x18')]));require('./mailAccount.socket')[_0xcdbf('0x1a')](socket);var jayson=require(_0xcdbf('0x1b'));var client=jayson[_0xcdbf('0x1c')][_0xcdbf('0x1d')]({'port':0x232b});function checkPasswordPattern(_0x3e3881,_0x5ec307,_0x3eba78){if(_0x3eba78){var _0x403795=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x403795[_0xcdbf('0x1e')](_0x5ec307)){return _0x3e3881;}else{throw new Error(_0xcdbf('0x1f'));}}else{return _0x3e3881;}}function respondWithRpcPromise(_0x17334c,_0x2d78bc,_0x19b5bd,_0x263f54){return new BPromise(function(_0x2fd95b,_0x3b3630){var _0x133959=_0x263f54||client;return _0x133959['request'](_0x17334c,_0x19b5bd)[_0xcdbf('0x20')](function(_0x402166){logger[_0xcdbf('0x21')](_0xcdbf('0x22'),_0x2d78bc,_0xcdbf('0x23'));logger[_0xcdbf('0x24')]('MailAccount,\x20%s,\x20%s,\x20%s',_0x2d78bc,_0xcdbf('0x23'),JSON[_0xcdbf('0x25')](_0x402166));if(_0x402166[_0xcdbf('0x26')]){if(_0x402166[_0xcdbf('0x26')][_0xcdbf('0x27')]===0x1f4){logger['error'](_0xcdbf('0x22'),_0x2d78bc,_0x402166[_0xcdbf('0x26')][_0xcdbf('0x28')]);return _0x3b3630(_0x402166[_0xcdbf('0x26')]['message']);}logger[_0xcdbf('0x26')]('MailAccount,\x20%s,\x20%s',_0x2d78bc,_0x402166['error'][_0xcdbf('0x28')]);return _0x2fd95b(_0x402166['error'][_0xcdbf('0x28')]);}else{logger[_0xcdbf('0x21')](_0xcdbf('0x22'),_0x2d78bc,_0xcdbf('0x23'));_0x2fd95b(_0x402166[_0xcdbf('0x29')]['message']);}})[_0xcdbf('0x2a')](function(_0x102f5c){logger[_0xcdbf('0x26')](_0xcdbf('0x22'),_0x2d78bc,_0x102f5c);_0x3b3630(_0x102f5c);});});}function respondWithStatusCode(_0x3b6da3,_0x3ef24b){_0x3ef24b=_0x3ef24b||0xcc;return function(_0x2e95bf){if(_0x2e95bf){return _0x3b6da3['sendStatus'](_0x3ef24b);}return _0x3b6da3[_0xcdbf('0x2b')](_0x3ef24b)[_0xcdbf('0x2c')]();};}function respondWithResult(_0xc9f8e5,_0x474af8){_0x474af8=_0x474af8||0xc8;return function(_0x15c884){if(_0x15c884){return _0xc9f8e5[_0xcdbf('0x2b')](_0x474af8)[_0xcdbf('0x2d')](_0x15c884);}};}function respondWithFilteredResult(_0x55088d,_0x30b753){return function(_0x2fa55a){if(_0x2fa55a){var _0x475118=_0x2fa55a[_0xcdbf('0x2e')],_0x3e1228=_0x30b753[_0xcdbf('0x2f')],_0x1f653d=_0x30b753[_0xcdbf('0x2f')]+_0x30b753[_0xcdbf('0x30')],_0x575be6;if(_0x1f653d>=_0x475118){_0x1f653d=_0x475118;_0x575be6=0xc8;}else{_0x575be6=0xce;}_0x55088d[_0xcdbf('0x2b')](_0x575be6);return _0x55088d[_0xcdbf('0x31')]('Content-Range',_0x3e1228+'-'+_0x1f653d+'/'+_0x475118)[_0xcdbf('0x2d')](_0x2fa55a);}return null;};}function patchUpdates(_0x1d02da){return function(_0x39e439){try{jsonpatch[_0xcdbf('0x32')](_0x39e439,_0x1d02da,!![]);}catch(_0x2e7ad5){return BPromise['reject'](_0x2e7ad5);}return _0x39e439[_0xcdbf('0x33')]();};}function saveUpdates(_0x272e27,_0xbfe717){return function(_0x3cb09f){if(_0x3cb09f){return _0x3cb09f[_0xcdbf('0x34')](_0x272e27)[_0xcdbf('0x20')](function(_0x2a37e2){return _0x2a37e2;});}return null;};}function removeEntity(_0x8fea82,_0x4a2ec){return function(_0x40bac1){if(_0x40bac1){return _0x40bac1['destroy']()['then'](function(){var _0x19babb=_0x40bac1[_0xcdbf('0x35')]({'plain':!![]});var _0xc6695='MailAccounts';return db[_0xcdbf('0x36')][_0xcdbf('0x37')]({'where':{'type':_0xc6695,'resourceId':_0x19babb['id']}})[_0xcdbf('0x20')](function(){return _0x40bac1;});})[_0xcdbf('0x20')](function(){_0x8fea82[_0xcdbf('0x2b')](0xcc)[_0xcdbf('0x2c')]();});}};}function handleEntityNotFound(_0x40cffe,_0x3650ac){return function(_0x5a0569){if(!_0x5a0569){_0x40cffe[_0xcdbf('0x38')](0x194);}return _0x5a0569;};}function handleError(_0x5987ed,_0x4122ea){_0x4122ea=_0x4122ea||0x1f4;return function(_0x4b7ed6){logger[_0xcdbf('0x26')](_0x4b7ed6[_0xcdbf('0x39')]);if(_0x4b7ed6[_0xcdbf('0x3a')]){delete _0x4b7ed6[_0xcdbf('0x3a')];}_0x5987ed[_0xcdbf('0x2b')](_0x4122ea)[_0xcdbf('0x3b')](_0x4b7ed6);};}exports[_0xcdbf('0x3c')]=function(_0x4378b7,_0x116453){var _0x115dd2={'include':[{'model':db[_0xcdbf('0x3d')],'as':_0xcdbf('0x3e')},{'model':db[_0xcdbf('0x3f')],'as':'Smtp'},{'model':db[_0xcdbf('0x40')],'as':_0xcdbf('0x41')}]},_0x5d56b1={},_0x907f4d={'count':0x0,'rows':[]};var _0x20583c=db[_0xcdbf('0x42')][_0xcdbf('0x43')];_0x5d56b1[_0xcdbf('0x44')]=_[_0xcdbf('0x45')](_0x20583c);_0x5d56b1[_0xcdbf('0x46')]=_['keys'](_0x4378b7[_0xcdbf('0x46')]);_0x5d56b1[_0xcdbf('0x47')]=_['intersection'](_0x5d56b1[_0xcdbf('0x44')],_0x5d56b1[_0xcdbf('0x46')]);_0x115dd2[_0xcdbf('0x48')]=_[_0xcdbf('0x49')](_0x5d56b1[_0xcdbf('0x44')],qs[_0xcdbf('0x4a')](_0x4378b7[_0xcdbf('0x46')][_0xcdbf('0x4a')]));_0x115dd2[_0xcdbf('0x48')]=_0x115dd2[_0xcdbf('0x48')][_0xcdbf('0x4b')]?_0x115dd2['attributes']:_0x5d56b1[_0xcdbf('0x44')];if(!_0x4378b7[_0xcdbf('0x46')][_0xcdbf('0x4c')]('nolimit')){_0x115dd2[_0xcdbf('0x30')]=qs[_0xcdbf('0x30')](_0x4378b7[_0xcdbf('0x46')][_0xcdbf('0x30')]);_0x115dd2[_0xcdbf('0x2f')]=qs[_0xcdbf('0x2f')](_0x4378b7['query'][_0xcdbf('0x2f')]);}_0x115dd2[_0xcdbf('0x4d')]=qs[_0xcdbf('0x4e')](_0x4378b7[_0xcdbf('0x46')]['sort']);_0x115dd2['where']=qs[_0xcdbf('0x47')](_[_0xcdbf('0x4f')](_0x4378b7[_0xcdbf('0x46')],_0x5d56b1[_0xcdbf('0x47')]));if(_0x4378b7[_0xcdbf('0x46')]['filter']){_0x115dd2[_0xcdbf('0x50')]=_['merge'](_0x115dd2[_0xcdbf('0x50')],{'$or':_[_0xcdbf('0x51')](_0x20583c,function(_0x1583d3){if(_0x1583d3['type'][_0xcdbf('0x52')]!=='VIRTUAL'){var _0x166ae6={};_0x166ae6[_0x1583d3[_0xcdbf('0x53')]]={'$like':'%'+_0x4378b7[_0xcdbf('0x46')][_0xcdbf('0x54')]+'%'};return _0x166ae6;}})});}_0x115dd2=_[_0xcdbf('0x55')]({},_0x115dd2,_0x4378b7[_0xcdbf('0x56')]);var _0x2d732e={'where':_0x115dd2[_0xcdbf('0x50')]};return db['MailAccount'][_0xcdbf('0x2e')](_0x2d732e)[_0xcdbf('0x20')](function(_0xe3583a){_0x907f4d[_0xcdbf('0x2e')]=_0xe3583a;if(_0x4378b7['query'][_0xcdbf('0x57')]){_0x115dd2[_0xcdbf('0x58')]=[{'all':!![]}];}return db[_0xcdbf('0x42')][_0xcdbf('0x59')](_0x115dd2);})[_0xcdbf('0x20')](function(_0x32be86){_0x907f4d['rows']=_0x32be86;return _0x907f4d;})['then'](respondWithFilteredResult(_0x116453,_0x115dd2))[_0xcdbf('0x2a')](handleError(_0x116453,null));};exports[_0xcdbf('0x5a')]=function(_0x3d6fff,_0x582efb){var _0x43fba8={'raw':![],'where':{'id':_0x3d6fff[_0xcdbf('0x5b')]['id']},'include':[{'model':db[_0xcdbf('0x3d')],'as':_0xcdbf('0x3e')},{'model':db['MailServerOut'],'as':_0xcdbf('0x5c')},{'model':db[_0xcdbf('0x40')],'as':'mandatoryDispositionPause'}]},_0x18328b={};_0x18328b[_0xcdbf('0x44')]=_[_0xcdbf('0x45')](db[_0xcdbf('0x42')][_0xcdbf('0x43')]);_0x18328b[_0xcdbf('0x46')]=_[_0xcdbf('0x45')](_0x3d6fff[_0xcdbf('0x46')]);_0x18328b[_0xcdbf('0x47')]=_[_0xcdbf('0x49')](_0x18328b['model'],_0x18328b['query']);_0x43fba8['attributes']=_[_0xcdbf('0x49')](_0x18328b['model'],qs[_0xcdbf('0x4a')](_0x3d6fff['query'][_0xcdbf('0x4a')]));_0x43fba8['attributes']=_0x43fba8['attributes'][_0xcdbf('0x4b')]?_0x43fba8['attributes']:_0x18328b[_0xcdbf('0x44')];if(_0x3d6fff[_0xcdbf('0x46')][_0xcdbf('0x57')]){_0x43fba8['include']=[{'all':!![]}];}_0x43fba8=_['merge']({},_0x43fba8,_0x3d6fff[_0xcdbf('0x56')]);return db[_0xcdbf('0x42')][_0xcdbf('0x5d')](_0x43fba8)[_0xcdbf('0x20')](handleEntityNotFound(_0x582efb,null))[_0xcdbf('0x20')](respondWithResult(_0x582efb,null))['catch'](handleError(_0x582efb,null));};exports[_0xcdbf('0x34')]=function(_0x7d3ec9,_0x287a1b){if(_0x7d3ec9[_0xcdbf('0x5e')]['id']){delete _0x7d3ec9[_0xcdbf('0x5e')]['id'];}return db[_0xcdbf('0x42')][_0xcdbf('0x5d')]({'where':{'id':_0x7d3ec9[_0xcdbf('0x5b')]['id']},'include':[{'model':db[_0xcdbf('0x3d')],'as':_0xcdbf('0x3e')},{'model':db[_0xcdbf('0x3f')],'as':'Smtp'},{'model':db[_0xcdbf('0x40')],'as':_0xcdbf('0x41')}]})[_0xcdbf('0x20')](handleEntityNotFound(_0x287a1b,null))['then'](saveUpdates(_0x7d3ec9[_0xcdbf('0x5e')],null))[_0xcdbf('0x20')](function(_0x486a39){if(_0x486a39&&_0x7d3ec9[_0xcdbf('0x5e')][_0xcdbf('0x3e')]){return db[_0xcdbf('0x3d')][_0xcdbf('0x34')](_0x7d3ec9[_0xcdbf('0x5e')][_0xcdbf('0x3e')],{'where':{'MailAccountId':_0x486a39['id']}})[_0xcdbf('0x20')](function(){return _0x486a39;});}return _0x486a39;})[_0xcdbf('0x20')](function(_0x422476){if(_0x422476&&_0x7d3ec9[_0xcdbf('0x5e')][_0xcdbf('0x5c')]){return db[_0xcdbf('0x3f')][_0xcdbf('0x34')](_0x7d3ec9[_0xcdbf('0x5e')][_0xcdbf('0x5c')],{'where':{'MailAccountId':_0x422476['id']}})[_0xcdbf('0x20')](function(){return _0x422476;});}return _0x422476;})[_0xcdbf('0x20')](respondWithResult(_0x287a1b,null))[_0xcdbf('0x2a')](handleError(_0x287a1b,null));};exports[_0xcdbf('0x5f')]=function(_0x53cc42,_0x105093){return db[_0xcdbf('0x42')][_0xcdbf('0x5f')]()[_0xcdbf('0x20')](respondWithResult(_0x105093,null))[_0xcdbf('0x2a')](handleError(_0x105093,null));};exports[_0xcdbf('0x60')]=function(_0x552f6e,_0x24a779,_0x106f4a){if(_0x552f6e[_0xcdbf('0x5e')]['id']){delete _0x552f6e[_0xcdbf('0x5e')]['id'];}return db[_0xcdbf('0x42')][_0xcdbf('0x5d')]({'where':{'id':_0x552f6e[_0xcdbf('0x5b')]['id']}})['then'](handleEntityNotFound(_0x24a779,null))['then'](function(_0x4d3e3c){if(_0x4d3e3c){_0x552f6e[_0xcdbf('0x5e')][_0xcdbf('0x61')]=_0x4d3e3c['id'];return db['Disposition'][_0xcdbf('0x62')](_0x552f6e[_0xcdbf('0x5e')]);}})[_0xcdbf('0x20')](respondWithResult(_0x24a779,null))['catch'](handleError(_0x24a779,null));};exports[_0xcdbf('0x63')]=function(_0xb56fd4,_0x1fa963,_0x6c9b10){var _0x5d925d={'raw':![],'where':{}};var _0xb7b58b={};var _0x1b6857={'count':0x0,'rows':[]};return db[_0xcdbf('0x42')][_0xcdbf('0x64')]({'where':{'id':_0xb56fd4[_0xcdbf('0x5b')]['id']}})[_0xcdbf('0x20')](handleEntityNotFound(_0x1fa963,null))[_0xcdbf('0x20')](function(_0x3c87dc){if(_0x3c87dc){_0xb7b58b['model']=_[_0xcdbf('0x45')](db[_0xcdbf('0x65')][_0xcdbf('0x43')]);_0xb7b58b['query']=_[_0xcdbf('0x45')](_0xb56fd4[_0xcdbf('0x46')]);_0xb7b58b[_0xcdbf('0x47')]=_[_0xcdbf('0x49')](_0xb7b58b[_0xcdbf('0x44')],_0xb7b58b[_0xcdbf('0x46')]);_0x5d925d[_0xcdbf('0x48')]=_[_0xcdbf('0x49')](_0xb7b58b[_0xcdbf('0x44')],qs[_0xcdbf('0x4a')](_0xb56fd4[_0xcdbf('0x46')][_0xcdbf('0x4a')]));_0x5d925d[_0xcdbf('0x48')]=_0x5d925d[_0xcdbf('0x48')][_0xcdbf('0x4b')]?_0x5d925d[_0xcdbf('0x48')]:_0xb7b58b[_0xcdbf('0x44')];if(!_0xb56fd4[_0xcdbf('0x46')]['hasOwnProperty']('nolimit')){_0x5d925d[_0xcdbf('0x30')]=qs['limit'](_0xb56fd4['query']['limit']);_0x5d925d[_0xcdbf('0x2f')]=qs['offset'](_0xb56fd4['query'][_0xcdbf('0x2f')]);}_0x5d925d[_0xcdbf('0x4d')]=qs['sort'](_0xb56fd4[_0xcdbf('0x46')][_0xcdbf('0x4e')]);_0x5d925d[_0xcdbf('0x50')]=qs[_0xcdbf('0x47')](_[_0xcdbf('0x4f')](_0xb56fd4[_0xcdbf('0x46')],_0xb7b58b['filters']));_0x5d925d[_0xcdbf('0x50')][_0xcdbf('0x61')]=_0x3c87dc['id'];if(_0xb56fd4[_0xcdbf('0x46')][_0xcdbf('0x54')]){_0x5d925d[_0xcdbf('0x50')]=_['merge'](_0x5d925d[_0xcdbf('0x50')],{'$or':_[_0xcdbf('0x51')](_0x5d925d['attributes'],function(_0x41225f){var _0x25ca39={};_0x25ca39[_0x41225f]={'$like':'%'+_0xb56fd4['query'][_0xcdbf('0x54')]+'%'};return _0x25ca39;})});}_0x5d925d=_[_0xcdbf('0x55')]({},_0x5d925d,_0xb56fd4[_0xcdbf('0x56')]);return db[_0xcdbf('0x65')][_0xcdbf('0x2e')]({'where':_0x5d925d[_0xcdbf('0x50')]})[_0xcdbf('0x20')](function(_0x473200){_0x1b6857[_0xcdbf('0x2e')]=_0x473200;if(_0xb56fd4['query']['includeAll']){_0x5d925d['include']=[{'all':!![]}];}return db[_0xcdbf('0x65')][_0xcdbf('0x59')](_0x5d925d);})[_0xcdbf('0x20')](function(_0x4a6740){_0x1b6857['rows']=_0x4a6740;return _0x1b6857;});}})[_0xcdbf('0x20')](respondWithFilteredResult(_0x1fa963,_0x5d925d))[_0xcdbf('0x2a')](handleError(_0x1fa963,null));};exports['removeDispositions']=function(_0x23078a,_0x4f5eef,_0x1b88b4){return db[_0xcdbf('0x42')][_0xcdbf('0x5d')]({'where':{'id':_0x23078a['params']['id']}})[_0xcdbf('0x20')](handleEntityNotFound(_0x4f5eef,null))[_0xcdbf('0x20')](function(_0x5a5e37){if(_0x5a5e37){return _0x5a5e37[_0xcdbf('0x66')](_0x23078a[_0xcdbf('0x46')]['ids']);}})[_0xcdbf('0x20')](respondWithStatusCode(_0x4f5eef,null))[_0xcdbf('0x2a')](handleError(_0x4f5eef,null));};exports[_0xcdbf('0x67')]=function(_0x5aa2a3,_0x268503,_0x4cee3c){if(_0x5aa2a3['body']['id']){delete _0x5aa2a3[_0xcdbf('0x5e')]['id'];}return db[_0xcdbf('0x42')][_0xcdbf('0x5d')]({'where':{'id':_0x5aa2a3[_0xcdbf('0x5b')]['id']}})['then'](handleEntityNotFound(_0x268503,null))[_0xcdbf('0x20')](function(_0x507f88){if(_0x507f88){_0x5aa2a3['body']['MailAccountId']=_0x507f88['id'];return db['CannedAnswer'][_0xcdbf('0x62')](_0x5aa2a3['body']);}})[_0xcdbf('0x20')](respondWithResult(_0x268503,null))[_0xcdbf('0x2a')](handleError(_0x268503,null));};exports[_0xcdbf('0x68')]=function(_0x314ec1,_0x291c29,_0x3893e2){var _0x281ee6={'raw':![],'where':{}};var _0x5f115b={};var _0x5340a5={'count':0x0,'rows':[]};return db[_0xcdbf('0x42')][_0xcdbf('0x64')]({'where':{'id':_0x314ec1[_0xcdbf('0x5b')]['id']}})[_0xcdbf('0x20')](handleEntityNotFound(_0x291c29,null))['then'](function(_0x386add){if(_0x386add){_0x5f115b[_0xcdbf('0x44')]=_[_0xcdbf('0x45')](db[_0xcdbf('0x69')][_0xcdbf('0x43')]);_0x5f115b[_0xcdbf('0x46')]=_[_0xcdbf('0x45')](_0x314ec1[_0xcdbf('0x46')]);_0x5f115b[_0xcdbf('0x47')]=_[_0xcdbf('0x49')](_0x5f115b[_0xcdbf('0x44')],_0x5f115b[_0xcdbf('0x46')]);_0x281ee6['attributes']=_[_0xcdbf('0x49')](_0x5f115b[_0xcdbf('0x44')],qs[_0xcdbf('0x4a')](_0x314ec1[_0xcdbf('0x46')][_0xcdbf('0x4a')]));_0x281ee6[_0xcdbf('0x48')]=_0x281ee6[_0xcdbf('0x48')][_0xcdbf('0x4b')]?_0x281ee6[_0xcdbf('0x48')]:_0x5f115b[_0xcdbf('0x44')];if(!_0x314ec1['query'][_0xcdbf('0x4c')]('nolimit')){_0x281ee6[_0xcdbf('0x30')]=qs[_0xcdbf('0x30')](_0x314ec1[_0xcdbf('0x46')][_0xcdbf('0x30')]);_0x281ee6[_0xcdbf('0x2f')]=qs[_0xcdbf('0x2f')](_0x314ec1[_0xcdbf('0x46')][_0xcdbf('0x2f')]);}_0x281ee6[_0xcdbf('0x4d')]=qs[_0xcdbf('0x4e')](_0x314ec1['query'][_0xcdbf('0x4e')]);_0x281ee6[_0xcdbf('0x50')]=qs[_0xcdbf('0x47')](_[_0xcdbf('0x4f')](_0x314ec1[_0xcdbf('0x46')],_0x5f115b[_0xcdbf('0x47')]));_0x281ee6[_0xcdbf('0x50')][_0xcdbf('0x61')]=_0x386add['id'];if(_0x314ec1['query'][_0xcdbf('0x54')]){_0x281ee6[_0xcdbf('0x50')]=_[_0xcdbf('0x55')](_0x281ee6['where'],{'$or':_[_0xcdbf('0x51')](_0x281ee6[_0xcdbf('0x48')],function(_0x319715){var _0x216733={};_0x216733[_0x319715]={'$like':'%'+_0x314ec1[_0xcdbf('0x46')][_0xcdbf('0x54')]+'%'};return _0x216733;})});}_0x281ee6=_[_0xcdbf('0x55')]({},_0x281ee6,_0x314ec1[_0xcdbf('0x56')]);return db[_0xcdbf('0x69')][_0xcdbf('0x2e')]({'where':_0x281ee6[_0xcdbf('0x50')]})[_0xcdbf('0x20')](function(_0x4fe766){_0x5340a5[_0xcdbf('0x2e')]=_0x4fe766;if(_0x314ec1[_0xcdbf('0x46')]['includeAll']){_0x281ee6[_0xcdbf('0x58')]=[{'all':!![]}];}return db['CannedAnswer'][_0xcdbf('0x59')](_0x281ee6);})[_0xcdbf('0x20')](function(_0x394469){_0x5340a5[_0xcdbf('0x6a')]=_0x394469;return _0x5340a5;});}})[_0xcdbf('0x20')](respondWithFilteredResult(_0x291c29,_0x281ee6))[_0xcdbf('0x2a')](handleError(_0x291c29,null));};exports[_0xcdbf('0x6b')]=function(_0x408caa,_0x252592,_0x3fa137){return db['MailAccount'][_0xcdbf('0x5d')]({'where':{'id':_0x408caa[_0xcdbf('0x5b')]['id']}})[_0xcdbf('0x20')](handleEntityNotFound(_0x252592,null))[_0xcdbf('0x20')](function(_0x20e17c){if(_0x20e17c){return _0x20e17c[_0xcdbf('0x6b')](_0x408caa[_0xcdbf('0x46')][_0xcdbf('0x6c')]);}})[_0xcdbf('0x20')](respondWithStatusCode(_0x252592,null))[_0xcdbf('0x2a')](handleError(_0x252592,null));};exports[_0xcdbf('0x62')]=function(_0x17e143,_0x31176e){var _0x1c3d92={'name':_0x17e143['body']['name'],'key':_0x17e143[_0xcdbf('0x5e')]['key'],'email':_0x17e143[_0xcdbf('0x5e')]['email'],'ListId':_0x17e143['body'][_0xcdbf('0x6d')],'active':!_['isNil'](_0x17e143[_0xcdbf('0x5e')][_0xcdbf('0x6e')])?_0x17e143[_0xcdbf('0x5e')]['active']:!![],'description':_0x17e143[_0xcdbf('0x5e')][_0xcdbf('0x6f')]||null,'Imap':{},'Smtp':{}};if(_[_0xcdbf('0x70')](_0x17e143[_0xcdbf('0x5e')][_0xcdbf('0x71')])){if(_0x17e143['body'][_0xcdbf('0x72')]){_0x1c3d92[_0xcdbf('0x3e')][_0xcdbf('0x73')]=_0x1c3d92[_0xcdbf('0x5c')][_0xcdbf('0x73')]=_0x17e143[_0xcdbf('0x5e')][_0xcdbf('0x74')];_0x1c3d92[_0xcdbf('0x3e')]['password']=_0x1c3d92[_0xcdbf('0x5c')][_0xcdbf('0x75')]=_0x17e143[_0xcdbf('0x5e')]['cpassword'];}else{_0x1c3d92[_0xcdbf('0x3e')][_0xcdbf('0x76')]=_0x1c3d92['Smtp'][_0xcdbf('0x76')]=![];}_0x1c3d92[_0xcdbf('0x3e')][_0xcdbf('0x77')]=_0x17e143[_0xcdbf('0x5e')][_0xcdbf('0x3e')][_0xcdbf('0x77')];_0x1c3d92[_0xcdbf('0x3e')][_0xcdbf('0x78')]=_0x17e143[_0xcdbf('0x5e')][_0xcdbf('0x3e')][_0xcdbf('0x78')];_0x1c3d92['Smtp'][_0xcdbf('0x77')]=_0x17e143[_0xcdbf('0x5e')][_0xcdbf('0x5c')][_0xcdbf('0x77')];_0x1c3d92[_0xcdbf('0x5c')][_0xcdbf('0x78')]=_0x17e143[_0xcdbf('0x5e')]['Smtp'][_0xcdbf('0x78')];}else{_0x1c3d92[_0xcdbf('0x3e')][_0xcdbf('0x79')]=_0x1c3d92['Smtp'][_0xcdbf('0x79')]=_0x17e143[_0xcdbf('0x5e')][_0xcdbf('0x71')];_0x1c3d92[_0xcdbf('0x3e')][_0xcdbf('0x73')]=_0x1c3d92[_0xcdbf('0x5c')][_0xcdbf('0x73')]=_0x17e143[_0xcdbf('0x5e')][_0xcdbf('0x74')];_0x1c3d92[_0xcdbf('0x3e')][_0xcdbf('0x7a')]=_0x1c3d92[_0xcdbf('0x5c')][_0xcdbf('0x75')]=_0x17e143[_0xcdbf('0x5e')][_0xcdbf('0x7b')];}return db['MailAccount'][_0xcdbf('0x62')](_0x1c3d92,{'include':[{'model':db['MailServerOut'],'as':_0xcdbf('0x5c')},{'model':db[_0xcdbf('0x3d')],'as':_0xcdbf('0x3e')}]})[_0xcdbf('0x20')](function(_0x248541){var _0x5c783f=_0x17e143['user'][_0xcdbf('0x35')]({'plain':!![]});if(!_0x5c783f)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x5c783f[_0xcdbf('0x7c')]===_0xcdbf('0x73')){var _0x2dcf96=_0x248541[_0xcdbf('0x35')]({'plain':!![]});return db[_0xcdbf('0x7d')]['find']({'where':{'name':_0xcdbf('0x7e'),'userProfileId':_0x5c783f[_0xcdbf('0x7f')]},'raw':!![]})[_0xcdbf('0x20')](function(_0x4fddf0){if(_0x4fddf0&&_0x4fddf0[_0xcdbf('0x80')]===0x0){return db['UserProfileResource'][_0xcdbf('0x62')]({'name':_0x2dcf96[_0xcdbf('0x3a')],'resourceId':_0x2dcf96['id'],'type':_0x4fddf0[_0xcdbf('0x3a')],'sectionId':_0x4fddf0['id']},{})[_0xcdbf('0x20')](function(){return _0x248541;});}else{return _0x248541;}})[_0xcdbf('0x2a')](function(_0x495f15){logger[_0xcdbf('0x26')](_0xcdbf('0x81'),_0x495f15);throw _0x495f15;});}return _0x248541;})[_0xcdbf('0x20')](respondWithResult(_0x31176e,0xc9))[_0xcdbf('0x2a')](handleError(_0x31176e,null));};exports['getImap']=function(_0x48562c,_0x50baae,_0x377f05){return db[_0xcdbf('0x42')][_0xcdbf('0x64')]({'where':{'id':_0x48562c[_0xcdbf('0x5b')]['id']}})['then'](handleEntityNotFound(_0x50baae,null))[_0xcdbf('0x20')](function(_0x28c773){if(_0x28c773){return _0x28c773[_0xcdbf('0x82')]();}return null;})[_0xcdbf('0x20')](respondWithResult(_0x50baae,null))['catch'](handleError(_0x50baae,null));};exports['addImap']=function(_0x636ea0,_0x1da9a0,_0x81b949){if(_0x636ea0[_0xcdbf('0x5e')]['id']){delete _0x636ea0[_0xcdbf('0x5e')]['id'];}return db['MailAccount'][_0xcdbf('0x5d')]({'where':{'id':_0x636ea0[_0xcdbf('0x5b')]['id']}})[_0xcdbf('0x20')](handleEntityNotFound(_0x1da9a0,null))['then'](function(_0x55fffa){if(_0x55fffa){_0x636ea0[_0xcdbf('0x5e')][_0xcdbf('0x61')]=_0x55fffa['id'];return db[_0xcdbf('0x3d')]['create'](_0x636ea0['body']);}})[_0xcdbf('0x20')](respondWithResult(_0x1da9a0,null))[_0xcdbf('0x2a')](handleError(_0x1da9a0,null));};exports['removeImap']=function(_0xa13047,_0x20bdd5,_0x458c9c){return db[_0xcdbf('0x42')][_0xcdbf('0x64')]({'where':{'id':_0xa13047['params']['id']}})[_0xcdbf('0x20')](handleEntityNotFound(_0x20bdd5,null))[_0xcdbf('0x20')](function(_0x3b9bf5){if(_0x3b9bf5){return _0x3b9bf5[_0xcdbf('0x83')](null);}return null;})[_0xcdbf('0x20')](respondWithStatusCode(_0x20bdd5,null))[_0xcdbf('0x2a')](handleError(_0x20bdd5,null));};exports[_0xcdbf('0x84')]=function(_0x421bca,_0x575ace,_0xfd291d){return db[_0xcdbf('0x42')][_0xcdbf('0x64')]({'where':{'id':_0x421bca[_0xcdbf('0x5b')]['id']}})['then'](handleEntityNotFound(_0x575ace,null))[_0xcdbf('0x20')](function(_0x423b9c){if(_0x423b9c){return _0x423b9c[_0xcdbf('0x84')]();}return null;})['then'](respondWithResult(_0x575ace,null))[_0xcdbf('0x2a')](handleError(_0x575ace,null));};exports[_0xcdbf('0x85')]=function(_0x10ce38,_0x3649ad,_0x53c907){if(_0x10ce38['body']['id']){delete _0x10ce38[_0xcdbf('0x5e')]['id'];}return db[_0xcdbf('0x42')][_0xcdbf('0x5d')]({'where':{'id':_0x10ce38[_0xcdbf('0x5b')]['id']}})['then'](handleEntityNotFound(_0x3649ad,null))['then'](function(_0x539bee){if(_0x539bee){_0x10ce38[_0xcdbf('0x5e')][_0xcdbf('0x61')]=_0x539bee['id'];return db[_0xcdbf('0x3f')][_0xcdbf('0x62')](_0x10ce38[_0xcdbf('0x5e')]);}})[_0xcdbf('0x20')](respondWithResult(_0x3649ad,null))[_0xcdbf('0x2a')](handleError(_0x3649ad,null));};exports[_0xcdbf('0x86')]=function(_0x1fab0d,_0x3dd5b9,_0x48dd90){return db['MailAccount'][_0xcdbf('0x64')]({'where':{'id':_0x1fab0d[_0xcdbf('0x5b')]['id']}})[_0xcdbf('0x20')](handleEntityNotFound(_0x3dd5b9,null))[_0xcdbf('0x20')](function(_0x584cd4){if(_0x584cd4){return _0x584cd4[_0xcdbf('0x87')](null);}return null;})[_0xcdbf('0x20')](respondWithStatusCode(_0x3dd5b9,null))['catch'](handleError(_0x3dd5b9,null));};exports[_0xcdbf('0x88')]=function(_0x4d65f9,_0x2ed791,_0x2e8b15){return db['MailInteraction'][_0xcdbf('0x5d')]({'where':{'id':_0x4d65f9['params']['id']}})[_0xcdbf('0x20')](handleEntityNotFound(_0x2ed791,null))[_0xcdbf('0x20')](function(_0x14c506){if(_0x14c506){return _0x14c506['addInteraction'](_0x4d65f9[_0xcdbf('0x5e')][_0xcdbf('0x6c')],_[_0xcdbf('0x89')](_0x4d65f9['body'],[_0xcdbf('0x6c'),'id'])||{});}})[_0xcdbf('0x20')](respondWithResult(_0x2ed791,null))[_0xcdbf('0x2a')](handleError(_0x2ed791,null));};exports[_0xcdbf('0x8a')]=function(_0x4e1cd0,_0x28d1cc,_0x59ceac){var _0x28cbad={'raw':![],'where':{}};var _0x3e3743={};var _0x2c8ac9={'count':0x0,'rows':[]};return db['MailAccount'][_0xcdbf('0x64')]({'where':{'id':_0x4e1cd0['params']['id']}})[_0xcdbf('0x20')](handleEntityNotFound(_0x28d1cc,null))[_0xcdbf('0x20')](function(_0x8bf4f9){if(_0x8bf4f9){_0x3e3743[_0xcdbf('0x44')]=_[_0xcdbf('0x45')](db[_0xcdbf('0x8b')]['rawAttributes']);_0x3e3743[_0xcdbf('0x46')]=_[_0xcdbf('0x45')](_0x4e1cd0[_0xcdbf('0x46')]);_0x3e3743[_0xcdbf('0x47')]=_['intersection'](_0x3e3743[_0xcdbf('0x44')],_0x3e3743[_0xcdbf('0x46')]);_0x28cbad[_0xcdbf('0x48')]=_[_0xcdbf('0x49')](_0x3e3743[_0xcdbf('0x44')],qs[_0xcdbf('0x4a')](_0x4e1cd0[_0xcdbf('0x46')][_0xcdbf('0x4a')]));_0x28cbad[_0xcdbf('0x48')]=_0x28cbad[_0xcdbf('0x48')]['length']?_0x28cbad[_0xcdbf('0x48')]:_0x3e3743['model'];if(!_0x4e1cd0[_0xcdbf('0x46')][_0xcdbf('0x4c')](_0xcdbf('0x8c'))){_0x28cbad[_0xcdbf('0x30')]=qs[_0xcdbf('0x30')](_0x4e1cd0['query'][_0xcdbf('0x30')]);_0x28cbad[_0xcdbf('0x2f')]=qs['offset'](_0x4e1cd0['query'][_0xcdbf('0x2f')]);}_0x28cbad[_0xcdbf('0x4d')]=qs[_0xcdbf('0x4e')](_0x4e1cd0['query'][_0xcdbf('0x4e')]);_0x28cbad[_0xcdbf('0x50')]=qs[_0xcdbf('0x47')](_['pick'](_0x4e1cd0[_0xcdbf('0x46')],_0x3e3743[_0xcdbf('0x47')]));_0x28cbad['where'][_0xcdbf('0x61')]=_0x8bf4f9['id'];if(_0x4e1cd0['query'][_0xcdbf('0x54')]){_0x28cbad['where']=_[_0xcdbf('0x55')](_0x28cbad[_0xcdbf('0x50')],{'$or':_['map'](_0x28cbad[_0xcdbf('0x48')],function(_0x5cf117){var _0x1b3523={};_0x1b3523[_0x5cf117]={'$like':'%'+_0x4e1cd0[_0xcdbf('0x46')][_0xcdbf('0x54')]+'%'};return _0x1b3523;})});}_0x28cbad=_[_0xcdbf('0x55')]({},_0x28cbad,_0x4e1cd0['options']);return db['MailInteraction']['count']({'where':_0x28cbad[_0xcdbf('0x50')]})[_0xcdbf('0x20')](function(_0x35b688){_0x2c8ac9[_0xcdbf('0x2e')]=_0x35b688;if(_0x4e1cd0[_0xcdbf('0x46')][_0xcdbf('0x57')]){_0x28cbad['include']=[{'model':db[_0xcdbf('0x8d')],'as':_0xcdbf('0x8e'),'required':![]},{'model':db[_0xcdbf('0x8f')],'as':_0xcdbf('0x90'),'attributes':['name','fullname',_0xcdbf('0x91')],'required':![]},{'model':db['Tag'],'as':'Tags','attributes':['id','name',_0xcdbf('0x92')],'where':_0x4e1cd0[_0xcdbf('0x46')][_0xcdbf('0x93')]?{'id':_0x4e1cd0[_0xcdbf('0x46')][_0xcdbf('0x93')]}:undefined,'required':_0x4e1cd0[_0xcdbf('0x46')]['tag']?!![]:![]}];}return db[_0xcdbf('0x8b')][_0xcdbf('0x59')](_0x28cbad);})[_0xcdbf('0x20')](function(_0x39fcab){_0x2c8ac9['rows']=_0x39fcab;return _0x2c8ac9;});}})['then'](respondWithFilteredResult(_0x28d1cc,_0x28cbad))['catch'](handleError(_0x28d1cc,null));};exports[_0xcdbf('0x94')]=function(_0x491816,_0x47d40c,_0x172cbe){return db[_0xcdbf('0x42')][_0xcdbf('0x64')]({'where':{'id':_0x491816[_0xcdbf('0x5b')]['id']}})[_0xcdbf('0x20')](handleEntityNotFound(_0x47d40c,null))[_0xcdbf('0x20')](function(_0x17cf79){if(_0x17cf79){return db[_0xcdbf('0x95')][_0xcdbf('0x96')](function(_0x2c3493){return db[_0xcdbf('0x97')][_0xcdbf('0x37')]({'where':{'MailAccountId':_0x491816['params']['id']},'transaction':_0x2c3493})[_0xcdbf('0x20')](function(_0x52cbd7){var _0x2cbf3d=_['map'](_0x491816[_0xcdbf('0x5e')],function(_0x3220e4){_0x3220e4[_0xcdbf('0x61')]=_0x491816[_0xcdbf('0x5b')]['id'];return _0x3220e4;});return db[_0xcdbf('0x97')][_0xcdbf('0x98')](_0x2cbf3d,{'transaction':_0x2c3493});});})[_0xcdbf('0x20')](function(){return db[_0xcdbf('0x97')][_0xcdbf('0x99')]({'where':{'MailAccountId':_0x491816[_0xcdbf('0x5b')]['id']},'order':_0xcdbf('0x9a')});});}})[_0xcdbf('0x20')](respondWithResult(_0x47d40c,null))[_0xcdbf('0x2a')](handleError(_0x47d40c,null));};exports[_0xcdbf('0x9b')]=function(_0x122781,_0x1571c5,_0x49de44){var _0xf1341e={};var _0x7513d6={};var _0x5cbb10;var _0x276ba7;return db[_0xcdbf('0x42')]['findOne']({'where':{'id':_0x122781[_0xcdbf('0x5b')]['id']}})['then'](handleEntityNotFound(_0x1571c5,null))[_0xcdbf('0x20')](function(_0x205a18){if(_0x205a18){_0x5cbb10=_0x205a18;_0x7513d6[_0xcdbf('0x44')]=_[_0xcdbf('0x45')](db['MailApplication']['rawAttributes']);_0x7513d6['query']=_['keys'](_0x122781[_0xcdbf('0x46')]);_0x7513d6['filters']=_[_0xcdbf('0x49')](_0x7513d6[_0xcdbf('0x44')],_0x7513d6['query']);_0xf1341e[_0xcdbf('0x48')]=_['intersection'](_0x7513d6[_0xcdbf('0x44')],qs['fields'](_0x122781[_0xcdbf('0x46')][_0xcdbf('0x4a')]));_0xf1341e['attributes']=_0xf1341e[_0xcdbf('0x48')][_0xcdbf('0x4b')]?_0xf1341e[_0xcdbf('0x48')]:_0x7513d6['model'];_0xf1341e['order']=qs['sort'](_0x122781[_0xcdbf('0x46')][_0xcdbf('0x4e')]);_0xf1341e['where']=qs[_0xcdbf('0x47')](_[_0xcdbf('0x4f')](_0x122781[_0xcdbf('0x46')],_0x7513d6[_0xcdbf('0x47')]));if(_0x122781['query']['filter']){_0xf1341e[_0xcdbf('0x50')]=_[_0xcdbf('0x55')](_0xf1341e[_0xcdbf('0x50')],{'$or':_[_0xcdbf('0x51')](_0xf1341e['attributes'],function(_0xfd2f87){var _0x4c2601={};_0x4c2601[_0xfd2f87]={'$like':'%'+_0x122781['query'][_0xcdbf('0x54')]+'%'};return _0x4c2601;})});}_0xf1341e=_['merge']({},_0xf1341e,_0x122781['options']);return _0x5cbb10['getApplications'](_0xf1341e);}})[_0xcdbf('0x20')](function(_0x27c4b8){if(_0x27c4b8){_0x276ba7=_0x27c4b8['length'];if(!_0x122781['query'][_0xcdbf('0x4c')](_0xcdbf('0x8c'))){_0xf1341e[_0xcdbf('0x30')]=qs[_0xcdbf('0x30')](_0x122781[_0xcdbf('0x46')][_0xcdbf('0x30')]);_0xf1341e[_0xcdbf('0x2f')]=qs[_0xcdbf('0x2f')](_0x122781[_0xcdbf('0x46')][_0xcdbf('0x2f')]);}return _0x5cbb10[_0xcdbf('0x9b')](_0xf1341e);}})[_0xcdbf('0x20')](function(_0x100324){if(_0x100324){return _0x100324?{'count':_0x276ba7,'rows':_0x100324}:null;}})[_0xcdbf('0x20')](respondWithResult(_0x1571c5,null))[_0xcdbf('0x2a')](handleError(_0x1571c5,null));};exports[_0xcdbf('0x9c')]=function(_0x5c5c91,_0x3b2043,_0x5af9f3){var _0x2f75b2={'raw':!![],'where':{}};var _0xb8f274={};var _0x2f03bb={'count':0x0,'rows':[]};return db['MailAccount'][_0xcdbf('0x64')]({'where':{'id':_0x5c5c91[_0xcdbf('0x5b')]['id']}})[_0xcdbf('0x20')](handleEntityNotFound(_0x3b2043,null))['then'](function(_0xfef452){if(_0xfef452){_0xb8f274[_0xcdbf('0x44')]=_['keys'](db[_0xcdbf('0x9d')][_0xcdbf('0x43')]);_0xb8f274[_0xcdbf('0x46')]=_['keys'](_0x5c5c91['query']);_0xb8f274['filters']=_[_0xcdbf('0x49')](_0xb8f274[_0xcdbf('0x44')],_0xb8f274[_0xcdbf('0x46')]);_0x2f75b2[_0xcdbf('0x48')]=_[_0xcdbf('0x49')](_0xb8f274[_0xcdbf('0x44')],qs[_0xcdbf('0x4a')](_0x5c5c91[_0xcdbf('0x46')][_0xcdbf('0x4a')]));_0x2f75b2[_0xcdbf('0x48')]=_0x2f75b2['attributes'][_0xcdbf('0x4b')]?_0x2f75b2[_0xcdbf('0x48')]:_0xb8f274[_0xcdbf('0x44')];if(!_0x5c5c91['query'][_0xcdbf('0x4c')](_0xcdbf('0x8c'))){_0x2f75b2[_0xcdbf('0x30')]=qs['limit'](_0x5c5c91[_0xcdbf('0x46')][_0xcdbf('0x30')]);_0x2f75b2[_0xcdbf('0x2f')]=qs[_0xcdbf('0x2f')](_0x5c5c91[_0xcdbf('0x46')][_0xcdbf('0x2f')]);}_0x2f75b2[_0xcdbf('0x4d')]=qs[_0xcdbf('0x4e')](_0x5c5c91[_0xcdbf('0x46')]['sort']);_0x2f75b2[_0xcdbf('0x50')]=qs[_0xcdbf('0x47')](_[_0xcdbf('0x4f')](_0x5c5c91['query'],_0xb8f274[_0xcdbf('0x47')]));_0x2f75b2[_0xcdbf('0x50')]['MailAccountId']=_0xfef452['id'];if(_0x5c5c91[_0xcdbf('0x46')]['filter']){_0x2f75b2[_0xcdbf('0x50')]=_[_0xcdbf('0x55')](_0x2f75b2[_0xcdbf('0x50')],{'$or':_[_0xcdbf('0x51')](_0x2f75b2[_0xcdbf('0x48')],function(_0x2a9ab5){var _0x32d1d0={};_0x32d1d0[_0x2a9ab5]={'$like':'%'+_0x5c5c91[_0xcdbf('0x46')][_0xcdbf('0x54')]+'%'};return _0x32d1d0;})});}if(_0x5c5c91['query'][_0xcdbf('0x9e')]){var _0x30dd34=_0x5c5c91[_0xcdbf('0x46')][_0xcdbf('0x9e')][_0xcdbf('0x9f')](',');var _0x5e5761={};_0x5e5761[_0x30dd34[0x0]]={'$gte':moment(_0x30dd34[0x1])['format']('YYYY-MM-DD\x20HH:mm:ss')};_0x2f75b2[_0xcdbf('0x50')]=_['merge'](_0x2f75b2[_0xcdbf('0x50')],_0x5e5761);}_0x2f75b2=_['merge']({},_0x2f75b2,_0x5c5c91['options']);return db['MailMessage']['count']({'where':_0x2f75b2[_0xcdbf('0x50')]})[_0xcdbf('0x20')](function(_0x15d268){_0x2f03bb[_0xcdbf('0x2e')]=_0x15d268;if(_0x5c5c91[_0xcdbf('0x46')][_0xcdbf('0x57')]){_0x2f75b2['include']=[{'all':!![]}];}return db[_0xcdbf('0x9d')][_0xcdbf('0x59')](_0x2f75b2);})[_0xcdbf('0x20')](function(_0x136767){_0x2f03bb[_0xcdbf('0x6a')]=_0x136767;return _0x2f03bb;});}})[_0xcdbf('0x20')](respondWithFilteredResult(_0x3b2043,_0x2f75b2))['catch'](handleError(_0x3b2043,null));};exports['send']=function(_0x1de03f,_0x57a30d,_0x15faa8){var _0x5276b1,_0x3ac339={},_0x4fc0bd;if(_0x1de03f['body']['to']){_0x4fc0bd=_0x1de03f[_0xcdbf('0x5e')]['to'][_0xcdbf('0x9f')](',')[0x0];}return db[_0xcdbf('0x42')][_0xcdbf('0x5d')]({'where':{'id':_0x1de03f[_0xcdbf('0x5b')]['id']},'include':[{'model':db[_0xcdbf('0xa0')],'as':_0xcdbf('0xa1'),'include':[{'model':db['CmContact'],'as':_0xcdbf('0xa2'),'where':{'email':_0x4fc0bd},'limit':0x1,'order':[[_0xcdbf('0xa3'),_0xcdbf('0xa4')]]}]},{'model':db[_0xcdbf('0x3f')],'as':'Smtp','raw':!![]}]})['then'](handleEntityNotFound(_0x57a30d,null))[_0xcdbf('0x20')](function(_0xc65110){if(_0xc65110){_0x5276b1=_0xc65110;if(_0xc65110[_0xcdbf('0x5c')]){if(_[_0xcdbf('0x70')](_0x1de03f['body'][_0xcdbf('0xa5')])){_0x1de03f[_0xcdbf('0x5e')]['from']=util[_0xcdbf('0xa6')]('%s\x20<%s>',_0xc65110['name'],_0xc65110['email']||_0xc65110['Smtp']['user']);}if(_0x1de03f['body'][_0xcdbf('0xa7')]&&_0x1de03f[_0xcdbf('0x5e')][_0xcdbf('0xa7')]['length']){for(var _0xf04361=0x0;_0xf04361<_0x1de03f[_0xcdbf('0x5e')]['attachments'][_0xcdbf('0x4b')];_0xf04361+=0x1){_0x1de03f[_0xcdbf('0x5e')]['attachments'][_0xf04361]={'filename':_0x1de03f[_0xcdbf('0x5e')][_0xcdbf('0xa7')][_0xf04361][_0xcdbf('0x3a')],'path':path['join'](config[_0xcdbf('0xa8')],_0xcdbf('0xa9'),_0x1de03f[_0xcdbf('0x5e')][_0xcdbf('0xa7')][_0xf04361][_0xcdbf('0xaa')])};}}var _0xcb9ac7={'tls':{'rejectUnauthorized':![]}};if(_[_0xcdbf('0x70')](_0xc65110[_0xcdbf('0x5c')][_0xcdbf('0x79')])){if(_0xc65110[_0xcdbf('0x5c')][_0xcdbf('0x76')]){_0xcb9ac7[_0xcdbf('0xab')]={'user':_0xc65110[_0xcdbf('0x5c')][_0xcdbf('0x73')],'pass':_0xc65110[_0xcdbf('0x5c')]['pass']};}_0xcb9ac7['host']=_0xc65110[_0xcdbf('0x5c')][_0xcdbf('0x77')];_0xcb9ac7[_0xcdbf('0x78')]=_0xc65110[_0xcdbf('0x5c')][_0xcdbf('0x78')];_0xcb9ac7[_0xcdbf('0xac')]=_0xc65110['Smtp'][_0xcdbf('0xac')];}else{_0xcb9ac7[_0xcdbf('0x79')]=_0xc65110[_0xcdbf('0x5c')]['service'];_0xcb9ac7['auth']={'user':_0xc65110['Smtp'][_0xcdbf('0x73')],'pass':_0xc65110[_0xcdbf('0x5c')][_0xcdbf('0x75')]};}return respondWithRpcPromise('SendMail',_0xcdbf('0xad'),{'account':_0xcb9ac7,'message':_0x1de03f[_0xcdbf('0x5e')]});}else{throw new Error('List\x20not\x20found');}}})[_0xcdbf('0x20')](function(_0x27d703){if(_0x27d703){_0x3ac339=_0x27d703;if(_0x5276b1[_0xcdbf('0xa1')]){if(_0x5276b1[_0xcdbf('0xa1')][_0xcdbf('0xa2')][_0xcdbf('0x4b')]){return _0x5276b1[_0xcdbf('0xa1')][_0xcdbf('0xa2')][0x0];}else{return db[_0xcdbf('0x8d')][_0xcdbf('0x62')](_[_0xcdbf('0x17')](_0x1de03f[_0xcdbf('0x5e')],{'firstName':_0x1de03f[_0xcdbf('0x5e')]['to'],'email':_0x1de03f[_0xcdbf('0x5e')]['to'],'phone':_0x1de03f[_0xcdbf('0x5e')]['to'],'ListId':_0x5276b1[_0xcdbf('0x6d')]}));}}else{throw new Error(_0xcdbf('0xae'));}}})[_0xcdbf('0x20')](function(_0x29d0cc){if(_0x29d0cc){var _0x30054e={'UserId':_0x1de03f['user']['id'],'ContactId':_0x29d0cc['id'],'MailAccountId':_0x5276b1['id'],'inReplyTo':_0x3ac339['messageId'],'to':_0x1de03f[_0xcdbf('0x5e')][_0xcdbf('0xa5')],'cc':_0x1de03f[_0xcdbf('0x5e')]['cc'],'subject':_0x1de03f['body'][_0xcdbf('0xaf')],'attach':_0x1de03f[_0xcdbf('0x5e')][_0xcdbf('0xb0')],'firstMsgDirection':_0xcdbf('0xb1'),'lastMsgAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'lastMsgDirection':_0xcdbf('0xb1'),'lastMsgBody':_0x1de03f[_0xcdbf('0x5e')]['body'],'Messages':[_[_0xcdbf('0x55')](_0x1de03f[_0xcdbf('0x5e')],{'messageId':_0x3ac339[_0xcdbf('0xb2')],'sentAt':moment()[_0xcdbf('0xa6')](_0xcdbf('0xb3')),'read':!![],'MailAccountId':_0x5276b1['id'],'UserId':_0x1de03f[_0xcdbf('0x73')]['id'],'ContactId':_0x29d0cc['id']})]};if(_0x1de03f[_0xcdbf('0x5e')][_0xcdbf('0xb4')]){_0x30054e=_[_0xcdbf('0x55')](_0x30054e,_0x1de03f[_0xcdbf('0x5e')][_0xcdbf('0xb4')]);}return db[_0xcdbf('0x8b')][_0xcdbf('0x62')](_0x30054e,{'include':[{'model':db['MailMessage'],'as':'Messages'}]});}})['then'](respondWithResult(_0x57a30d,null))[_0xcdbf('0x2a')](handleError(_0x57a30d,null));};exports[_0xcdbf('0xb5')]=function(_0x52c5af,_0xa247f8,_0x4f18c5){return db[_0xcdbf('0x42')][_0xcdbf('0x5d')]({'where':{'id':_0x52c5af[_0xcdbf('0x5b')]['id']},'include':[{'model':db['MailServerOut'],'as':'Smtp','raw':!![]}]})[_0xcdbf('0x20')](handleEntityNotFound(_0xa247f8,null))[_0xcdbf('0x20')](function(_0x300b42){if(_0x300b42&&_0x300b42['Smtp']){var _0x1296aa={'id':_0x300b42['id'],'tls':{'rejectUnauthorized':![]}};if(_0x300b42[_0xcdbf('0x5c')]['service']){_0x1296aa[_0xcdbf('0x79')]=_0x300b42[_0xcdbf('0x5c')][_0xcdbf('0x79')];}else{_0x1296aa[_0xcdbf('0x77')]=_0x300b42[_0xcdbf('0x5c')][_0xcdbf('0x77')];_0x1296aa[_0xcdbf('0x78')]=_0x300b42[_0xcdbf('0x5c')][_0xcdbf('0x78')];_0x1296aa[_0xcdbf('0xac')]=_0x300b42[_0xcdbf('0x5c')][_0xcdbf('0xac')];}if(_0x300b42[_0xcdbf('0x5c')][_0xcdbf('0x76')]){_0x1296aa[_0xcdbf('0xab')]={'user':_0x300b42[_0xcdbf('0x5c')][_0xcdbf('0x73')],'pass':_0x300b42['Smtp']['pass']};}return respondWithRpcPromise(_0xcdbf('0xb6'),'verifySmtp',{'account':_0x1296aa});}})['then'](respondWithResult(_0xa247f8,null))['catch'](handleError(_0xa247f8,null));};exports[_0xcdbf('0x37')]=function(_0x4fb107,_0xc04cee){return db[_0xcdbf('0x42')]['find']({'where':{'id':_0x4fb107[_0xcdbf('0x5b')]['id']}})['then'](handleEntityNotFound(_0xc04cee,null))['then'](function(_0x384b02){if(_0x384b02&&_0x384b02[_0xcdbf('0x79')]){throw new db[(_0xcdbf('0xb7'))][(_0xcdbf('0xb8'))](_0xcdbf('0xb9'));}return _0x384b02;})[_0xcdbf('0x20')](removeEntity(_0xc04cee,null))[_0xcdbf('0x2a')](handleError(_0xc04cee,null));};exports[_0xcdbf('0xba')]=function(_0xff429d,_0x15ac86,_0x4dc611){return db[_0xcdbf('0x42')]['find']({'where':{'id':_0xff429d['params']['id']}})['then'](handleEntityNotFound(_0x15ac86,null))[_0xcdbf('0x20')](function(_0x1a9323){if(_0x1a9323){return _0x1a9323[_0xcdbf('0xba')](_0xff429d[_0xcdbf('0x5e')]['ids'],_[_0xcdbf('0x89')](_0xff429d[_0xcdbf('0x5e')],[_0xcdbf('0x6c'),'id'])||{})[_0xcdbf('0xbb')](function(_0x32529e){for(var _0x5438eb=0x0;_0x5438eb<_0xff429d['body']['ids'][_0xcdbf('0x4b')];_0x5438eb+=0x1){socket[_0xcdbf('0xbc')](_0xcdbf('0xbd'),{'UserId':_0xff429d[_0xcdbf('0x5e')][_0xcdbf('0x6c')][_0x5438eb],'MailAccountId':_0xff429d[_0xcdbf('0x5b')]['id']});}return _0x32529e;});}})[_0xcdbf('0x20')](respondWithResult(_0x15ac86,null))[_0xcdbf('0x2a')](handleError(_0x15ac86,null));};exports[_0xcdbf('0xbe')]=function(_0x2ae030,_0x907ad7,_0x1c47f7){return db[_0xcdbf('0x42')]['find']({'where':{'id':_0x2ae030[_0xcdbf('0x5b')]['id']}})[_0xcdbf('0x20')](handleEntityNotFound(_0x907ad7,null))[_0xcdbf('0x20')](function(_0x524d7b){if(_0x524d7b){return _0x524d7b['removeAgents'](_0x2ae030['query'][_0xcdbf('0x6c')])[_0xcdbf('0x20')](function(){if(_[_0xcdbf('0xbf')](_0x2ae030[_0xcdbf('0x46')][_0xcdbf('0x6c')])){for(var _0x3da226=0x0;_0x3da226<_0x2ae030[_0xcdbf('0x46')]['ids'][_0xcdbf('0x4b')];_0x3da226+=0x1){socket[_0xcdbf('0xbc')](_0xcdbf('0xc0'),{'UserId':Number(_0x2ae030['query']['ids'][_0x3da226]),'MailAccountId':Number(_0x2ae030[_0xcdbf('0x5b')]['id'])});}}else{socket['emit']('userMailAccount:remove',{'UserId':Number(_0x2ae030[_0xcdbf('0x46')]['ids']),'MailAccountId':Number(_0x2ae030['params']['id'])});}});}})[_0xcdbf('0x20')](respondWithStatusCode(_0x907ad7,null))[_0xcdbf('0x2a')](handleError(_0x907ad7,null));};exports[_0xcdbf('0xc1')]=function(_0x5a6849,_0x298a57,_0x527622){var _0x476859={};var _0x2ed4ca={};var _0x2ddb5a;var _0x44334e;return db[_0xcdbf('0x42')][_0xcdbf('0x64')]({'where':{'id':_0x5a6849[_0xcdbf('0x5b')]['id']}})['then'](handleEntityNotFound(_0x298a57,null))[_0xcdbf('0x20')](function(_0x5f0ea9){if(_0x5f0ea9){_0x2ddb5a=_0x5f0ea9;_0x2ed4ca['model']=_['keys'](db[_0xcdbf('0x8f')]['rawAttributes']);_0x2ed4ca[_0xcdbf('0x46')]=_[_0xcdbf('0x45')](_0x5a6849[_0xcdbf('0x46')]);_0x2ed4ca['filters']=_[_0xcdbf('0x49')](_0x2ed4ca[_0xcdbf('0x44')],_0x2ed4ca['query']);_0x476859[_0xcdbf('0x48')]=_[_0xcdbf('0x49')](_0x2ed4ca[_0xcdbf('0x44')],qs[_0xcdbf('0x4a')](_0x5a6849[_0xcdbf('0x46')][_0xcdbf('0x4a')]));_0x476859[_0xcdbf('0x48')]=_0x476859[_0xcdbf('0x48')][_0xcdbf('0x4b')]?_0x476859[_0xcdbf('0x48')]:_0x2ed4ca[_0xcdbf('0x44')];_0x476859[_0xcdbf('0x4d')]=qs[_0xcdbf('0x4e')](_0x5a6849['query'][_0xcdbf('0x4e')]);_0x476859[_0xcdbf('0x50')]=qs['filters'](_['pick'](_0x5a6849[_0xcdbf('0x46')],_0x2ed4ca[_0xcdbf('0x47')]));if(_0x5a6849['query'][_0xcdbf('0x54')]){_0x476859[_0xcdbf('0x50')]=_[_0xcdbf('0x55')](_0x476859[_0xcdbf('0x50')],{'$or':_[_0xcdbf('0x51')](_0x476859[_0xcdbf('0x48')],function(_0x4bd6de){var _0x56800d={};_0x56800d[_0x4bd6de]={'$like':'%'+_0x5a6849[_0xcdbf('0x46')][_0xcdbf('0x54')]+'%'};return _0x56800d;})});}_0x476859=_[_0xcdbf('0x55')]({},_0x476859,_0x5a6849[_0xcdbf('0x56')]);return _0x2ddb5a[_0xcdbf('0xc1')](_0x476859);}})[_0xcdbf('0x20')](function(_0x12dc9d){if(_0x12dc9d){_0x44334e=_0x12dc9d[_0xcdbf('0x4b')];if(!_0x5a6849[_0xcdbf('0x46')][_0xcdbf('0x4c')](_0xcdbf('0x8c'))){_0x476859[_0xcdbf('0x30')]=qs[_0xcdbf('0x30')](_0x5a6849['query'][_0xcdbf('0x30')]);_0x476859['offset']=qs[_0xcdbf('0x2f')](_0x5a6849[_0xcdbf('0x46')][_0xcdbf('0x2f')]);}return _0x2ddb5a[_0xcdbf('0xc1')](_0x476859);}})[_0xcdbf('0x20')](function(_0x40c988){if(_0x40c988){return _0x40c988?{'count':_0x44334e,'rows':_0x40c988}:null;}})['then'](respondWithResult(_0x298a57,null))[_0xcdbf('0x2a')](handleError(_0x298a57,null));};
\ No newline at end of file
+var _0x4227=['destroy','stack','name','send','MailServerIn','Smtp','Pause','mandatoryDispositionPause','MailAccount','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','sort','where','filter','merge','type','key','VIRTUAL','field','options','include','findAll','catch','params','Imap','MailServerOut','find','body','describe','addDisposition','Disposition','create','getDispositions','findOne','order','map','includeAll','rows','removeDispositions','addAnswer','CannedAnswer','getAnswers','pick','MailAccountId','removeAnswers','email','ListId','isNil','active','cservice','cauthentication','cuser','pass','authentication','host','port','service','password','cpassword','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','getImap','removeImap','setImap','getSmtp','addSmtp','removeSmtp','addInteraction','ids','omit','getInteractions','MailInteraction','CmContact','Contact','User','Owner','fullname','color','tag','addApplications','sequelize','MailApplication','bulkCreate','findAndCountAll','getApplications','getMessages','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','MailMessage','CmList','List','Contacts','updatedAt','DESC','from','%s\x20<%s>','attachments','join','root','basename','auth','secure','sendMail','List\x20not\x20found','subject','out','messageId','Interaction','Messages','verifySmtp','VerifySmtp','Sequelize','ValidationError','addAgents','spread','emit','userMailAccount:save','removeAgents','isArray','userMailAccount:remove','getAgents','html-pdf','zip-dir','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','redis','defaults','localhost','socket.io-emitter','./mailAccount.socket','register','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','request\x20sent','debug','MailAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','MailAccount,\x20%s,\x20%s','result','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','get','MailAccounts'];(function(_0x27b980,_0x48c437){var _0x4f5fe6=function(_0x4ace34){while(--_0x4ace34){_0x27b980['push'](_0x27b980['shift']());}};_0x4f5fe6(++_0x48c437);}(_0x4227,0x89));var _0x7422=function(_0x165fa6,_0x37349f){_0x165fa6=_0x165fa6-0x0;var _0x9b71af=_0x4227[_0x165fa6];return _0x9b71af;};'use strict';var pdf=require(_0x7422('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x7422('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0x7422('0x2'));var moment=require(_0x7422('0x3'));var BPromise=require(_0x7422('0x4'));var Mustache=require('mustache');var util=require(_0x7422('0x5'));var path=require(_0x7422('0x6'));var sox=require(_0x7422('0x7'));var csv=require(_0x7422('0x8'));var ejs=require(_0x7422('0x9'));var fs=require('fs');var _=require(_0x7422('0xa'));var squel=require(_0x7422('0xb'));var crypto=require(_0x7422('0xc'));var jsforce=require(_0x7422('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x7422('0x8'));var querystring=require(_0x7422('0xe'));var Papa=require(_0x7422('0xf'));var Redis=require('ioredis');var authService=require(_0x7422('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x7422('0x11'));var logger=require(_0x7422('0x12'))(_0x7422('0x13'));var utils=require(_0x7422('0x14'));var config=require(_0x7422('0x15'));var db=require('../../mysqldb')['db'];config[_0x7422('0x16')]=_[_0x7422('0x17')](config['redis'],{'host':_0x7422('0x18'),'port':0x18eb});var socket=require(_0x7422('0x19'))(new Redis(config['redis']));require(_0x7422('0x1a'))[_0x7422('0x1b')](socket);var jayson=require('jayson/promise');var client=jayson['client'][_0x7422('0x1c')]({'port':0x232b});function checkPasswordPattern(_0x4ca0e4,_0x105e1b,_0x788829){if(_0x788829){var _0x487c93=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x487c93[_0x7422('0x1d')](_0x105e1b)){return _0x4ca0e4;}else{throw new Error(_0x7422('0x1e'));}}else{return _0x4ca0e4;}}function respondWithRpcPromise(_0x31c3ec,_0x1d1ac3,_0x2946ca,_0x25401d){return new BPromise(function(_0x4e2b60,_0x21d4b9){var _0xa7ff41=_0x25401d||client;return _0xa7ff41[_0x7422('0x1f')](_0x31c3ec,_0x2946ca)[_0x7422('0x20')](function(_0x57b8bf){logger[_0x7422('0x21')]('MailAccount,\x20%s,\x20%s',_0x1d1ac3,_0x7422('0x22'));logger[_0x7422('0x23')](_0x7422('0x24'),_0x1d1ac3,'request\x20sent',JSON[_0x7422('0x25')](_0x57b8bf));if(_0x57b8bf[_0x7422('0x26')]){if(_0x57b8bf[_0x7422('0x26')][_0x7422('0x27')]===0x1f4){logger['error']('MailAccount,\x20%s,\x20%s',_0x1d1ac3,_0x57b8bf[_0x7422('0x26')][_0x7422('0x28')]);return _0x21d4b9(_0x57b8bf[_0x7422('0x26')][_0x7422('0x28')]);}logger[_0x7422('0x26')](_0x7422('0x29'),_0x1d1ac3,_0x57b8bf[_0x7422('0x26')]['message']);return _0x4e2b60(_0x57b8bf[_0x7422('0x26')][_0x7422('0x28')]);}else{logger['info'](_0x7422('0x29'),_0x1d1ac3,_0x7422('0x22'));_0x4e2b60(_0x57b8bf[_0x7422('0x2a')][_0x7422('0x28')]);}})['catch'](function(_0x3f579a){logger[_0x7422('0x26')](_0x7422('0x29'),_0x1d1ac3,_0x3f579a);_0x21d4b9(_0x3f579a);});});}function respondWithStatusCode(_0x2dd10f,_0x3438d1){_0x3438d1=_0x3438d1||0xcc;return function(_0x5e997b){if(_0x5e997b){return _0x2dd10f[_0x7422('0x2b')](_0x3438d1);}return _0x2dd10f[_0x7422('0x2c')](_0x3438d1)[_0x7422('0x2d')]();};}function respondWithResult(_0x11e94f,_0x5ae0f7){_0x5ae0f7=_0x5ae0f7||0xc8;return function(_0x474aa8){if(_0x474aa8){return _0x11e94f[_0x7422('0x2c')](_0x5ae0f7)[_0x7422('0x2e')](_0x474aa8);}};}function respondWithFilteredResult(_0x702aef,_0x59bc52){return function(_0x1cd623){if(_0x1cd623){var _0x41d4a1=_0x1cd623[_0x7422('0x2f')],_0x5be605=_0x59bc52['offset'],_0x4e4ac1=_0x59bc52[_0x7422('0x30')]+_0x59bc52[_0x7422('0x31')],_0x2baac6;if(_0x4e4ac1>=_0x41d4a1){_0x4e4ac1=_0x41d4a1;_0x2baac6=0xc8;}else{_0x2baac6=0xce;}_0x702aef[_0x7422('0x2c')](_0x2baac6);return _0x702aef[_0x7422('0x32')](_0x7422('0x33'),_0x5be605+'-'+_0x4e4ac1+'/'+_0x41d4a1)[_0x7422('0x2e')](_0x1cd623);}return null;};}function patchUpdates(_0x212a66){return function(_0xa9d41){try{jsonpatch[_0x7422('0x34')](_0xa9d41,_0x212a66,!![]);}catch(_0x1770b6){return BPromise[_0x7422('0x35')](_0x1770b6);}return _0xa9d41['save']();};}function saveUpdates(_0x50c794,_0x3d0fb9){return function(_0x22327f){if(_0x22327f){return _0x22327f[_0x7422('0x36')](_0x50c794)['then'](function(_0x3823a5){return _0x3823a5;});}return null;};}function removeEntity(_0x339b85,_0x4606d9){return function(_0x58d9fe){if(_0x58d9fe){return _0x58d9fe['destroy']()[_0x7422('0x20')](function(){var _0x49ed14=_0x58d9fe[_0x7422('0x37')]({'plain':!![]});var _0x55c622=_0x7422('0x38');return db['UserProfileResource'][_0x7422('0x39')]({'where':{'type':_0x55c622,'resourceId':_0x49ed14['id']}})['then'](function(){return _0x58d9fe;});})['then'](function(){_0x339b85[_0x7422('0x2c')](0xcc)['end']();});}};}function handleEntityNotFound(_0x37da42,_0xa280c5){return function(_0x1b2a14){if(!_0x1b2a14){_0x37da42[_0x7422('0x2b')](0x194);}return _0x1b2a14;};}function handleError(_0x386cde,_0x3aca40){_0x3aca40=_0x3aca40||0x1f4;return function(_0x404309){logger['error'](_0x404309[_0x7422('0x3a')]);if(_0x404309[_0x7422('0x3b')]){delete _0x404309[_0x7422('0x3b')];}_0x386cde[_0x7422('0x2c')](_0x3aca40)[_0x7422('0x3c')](_0x404309);};}exports['index']=function(_0x437d31,_0x2b8820){var _0x5bfbf6={'include':[{'model':db[_0x7422('0x3d')],'as':'Imap'},{'model':db['MailServerOut'],'as':_0x7422('0x3e')},{'model':db[_0x7422('0x3f')],'as':_0x7422('0x40')}]},_0x20b4df={},_0x5c701c={'count':0x0,'rows':[]};var _0x57a500=db[_0x7422('0x41')][_0x7422('0x42')];_0x20b4df['model']=_[_0x7422('0x43')](_0x57a500);_0x20b4df['query']=_[_0x7422('0x43')](_0x437d31[_0x7422('0x44')]);_0x20b4df[_0x7422('0x45')]=_[_0x7422('0x46')](_0x20b4df[_0x7422('0x47')],_0x20b4df[_0x7422('0x44')]);_0x5bfbf6[_0x7422('0x48')]=_['intersection'](_0x20b4df[_0x7422('0x47')],qs[_0x7422('0x49')](_0x437d31['query'][_0x7422('0x49')]));_0x5bfbf6[_0x7422('0x48')]=_0x5bfbf6['attributes'][_0x7422('0x4a')]?_0x5bfbf6['attributes']:_0x20b4df[_0x7422('0x47')];if(!_0x437d31['query'][_0x7422('0x4b')](_0x7422('0x4c'))){_0x5bfbf6[_0x7422('0x31')]=qs[_0x7422('0x31')](_0x437d31[_0x7422('0x44')][_0x7422('0x31')]);_0x5bfbf6[_0x7422('0x30')]=qs[_0x7422('0x30')](_0x437d31[_0x7422('0x44')][_0x7422('0x30')]);}_0x5bfbf6['order']=qs[_0x7422('0x4d')](_0x437d31['query']['sort']);_0x5bfbf6[_0x7422('0x4e')]=qs[_0x7422('0x45')](_['pick'](_0x437d31[_0x7422('0x44')],_0x20b4df[_0x7422('0x45')]));if(_0x437d31[_0x7422('0x44')][_0x7422('0x4f')]){_0x5bfbf6[_0x7422('0x4e')]=_[_0x7422('0x50')](_0x5bfbf6[_0x7422('0x4e')],{'$or':_['map'](_0x57a500,function(_0x10151d){if(_0x10151d[_0x7422('0x51')][_0x7422('0x52')]!==_0x7422('0x53')){var _0x52f1bc={};_0x52f1bc[_0x10151d[_0x7422('0x54')]]={'$like':'%'+_0x437d31[_0x7422('0x44')][_0x7422('0x4f')]+'%'};return _0x52f1bc;}})});}_0x5bfbf6=_['merge']({},_0x5bfbf6,_0x437d31[_0x7422('0x55')]);var _0x380b87={'where':_0x5bfbf6['where']};return db['MailAccount']['count'](_0x380b87)[_0x7422('0x20')](function(_0xbbc9ab){_0x5c701c['count']=_0xbbc9ab;if(_0x437d31[_0x7422('0x44')]['includeAll']){_0x5bfbf6[_0x7422('0x56')]=[{'all':!![]}];}return db[_0x7422('0x41')][_0x7422('0x57')](_0x5bfbf6);})[_0x7422('0x20')](function(_0x557bcc){_0x5c701c['rows']=_0x557bcc;return _0x5c701c;})[_0x7422('0x20')](respondWithFilteredResult(_0x2b8820,_0x5bfbf6))[_0x7422('0x58')](handleError(_0x2b8820,null));};exports['show']=function(_0x121983,_0x2fbe91){var _0x5034f8={'raw':![],'where':{'id':_0x121983[_0x7422('0x59')]['id']},'include':[{'model':db[_0x7422('0x3d')],'as':_0x7422('0x5a')},{'model':db[_0x7422('0x5b')],'as':_0x7422('0x3e')},{'model':db[_0x7422('0x3f')],'as':_0x7422('0x40')}]},_0x39066e={};_0x39066e[_0x7422('0x47')]=_[_0x7422('0x43')](db['MailAccount'][_0x7422('0x42')]);_0x39066e[_0x7422('0x44')]=_[_0x7422('0x43')](_0x121983['query']);_0x39066e[_0x7422('0x45')]=_[_0x7422('0x46')](_0x39066e[_0x7422('0x47')],_0x39066e[_0x7422('0x44')]);_0x5034f8[_0x7422('0x48')]=_[_0x7422('0x46')](_0x39066e['model'],qs[_0x7422('0x49')](_0x121983[_0x7422('0x44')][_0x7422('0x49')]));_0x5034f8[_0x7422('0x48')]=_0x5034f8[_0x7422('0x48')][_0x7422('0x4a')]?_0x5034f8[_0x7422('0x48')]:_0x39066e['model'];if(_0x121983[_0x7422('0x44')]['includeAll']){_0x5034f8['include']=[{'all':!![]}];}_0x5034f8=_[_0x7422('0x50')]({},_0x5034f8,_0x121983['options']);return db[_0x7422('0x41')][_0x7422('0x5c')](_0x5034f8)[_0x7422('0x20')](handleEntityNotFound(_0x2fbe91,null))['then'](respondWithResult(_0x2fbe91,null))[_0x7422('0x58')](handleError(_0x2fbe91,null));};exports[_0x7422('0x36')]=function(_0x13366c,_0x1e5475){if(_0x13366c['body']['id']){delete _0x13366c['body']['id'];}return db[_0x7422('0x41')][_0x7422('0x5c')]({'where':{'id':_0x13366c['params']['id']},'include':[{'model':db['MailServerIn'],'as':_0x7422('0x5a')},{'model':db[_0x7422('0x5b')],'as':_0x7422('0x3e')},{'model':db[_0x7422('0x3f')],'as':_0x7422('0x40')}]})[_0x7422('0x20')](handleEntityNotFound(_0x1e5475,null))[_0x7422('0x20')](saveUpdates(_0x13366c[_0x7422('0x5d')],null))[_0x7422('0x20')](function(_0x219b19){if(_0x219b19&&_0x13366c['body'][_0x7422('0x5a')]){return db[_0x7422('0x3d')][_0x7422('0x36')](_0x13366c[_0x7422('0x5d')][_0x7422('0x5a')],{'where':{'MailAccountId':_0x219b19['id']}})[_0x7422('0x20')](function(){return _0x219b19;});}return _0x219b19;})['then'](function(_0x2a7bf0){if(_0x2a7bf0&&_0x13366c[_0x7422('0x5d')][_0x7422('0x3e')]){return db[_0x7422('0x5b')][_0x7422('0x36')](_0x13366c[_0x7422('0x5d')][_0x7422('0x3e')],{'where':{'MailAccountId':_0x2a7bf0['id']}})[_0x7422('0x20')](function(){return _0x2a7bf0;});}return _0x2a7bf0;})['then'](respondWithResult(_0x1e5475,null))['catch'](handleError(_0x1e5475,null));};exports[_0x7422('0x5e')]=function(_0x25792e,_0x352340){return db['MailAccount'][_0x7422('0x5e')]()['then'](respondWithResult(_0x352340,null))['catch'](handleError(_0x352340,null));};exports[_0x7422('0x5f')]=function(_0x4ac5d3,_0x2d6a8c,_0x216869){if(_0x4ac5d3[_0x7422('0x5d')]['id']){delete _0x4ac5d3[_0x7422('0x5d')]['id'];}return db[_0x7422('0x41')][_0x7422('0x5c')]({'where':{'id':_0x4ac5d3[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x2d6a8c,null))[_0x7422('0x20')](function(_0x26f729){if(_0x26f729){_0x4ac5d3[_0x7422('0x5d')]['MailAccountId']=_0x26f729['id'];return db[_0x7422('0x60')][_0x7422('0x61')](_0x4ac5d3[_0x7422('0x5d')]);}})[_0x7422('0x20')](respondWithResult(_0x2d6a8c,null))['catch'](handleError(_0x2d6a8c,null));};exports[_0x7422('0x62')]=function(_0x4bb430,_0x4450ec,_0x5b355d){var _0x2f7a91={'raw':![],'where':{}};var _0x1de215={};var _0x5b2ed3={'count':0x0,'rows':[]};return db[_0x7422('0x41')][_0x7422('0x63')]({'where':{'id':_0x4bb430[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x4450ec,null))[_0x7422('0x20')](function(_0x127a61){if(_0x127a61){_0x1de215['model']=_[_0x7422('0x43')](db[_0x7422('0x60')]['rawAttributes']);_0x1de215[_0x7422('0x44')]=_[_0x7422('0x43')](_0x4bb430['query']);_0x1de215[_0x7422('0x45')]=_['intersection'](_0x1de215[_0x7422('0x47')],_0x1de215[_0x7422('0x44')]);_0x2f7a91[_0x7422('0x48')]=_[_0x7422('0x46')](_0x1de215[_0x7422('0x47')],qs[_0x7422('0x49')](_0x4bb430[_0x7422('0x44')]['fields']));_0x2f7a91[_0x7422('0x48')]=_0x2f7a91['attributes'][_0x7422('0x4a')]?_0x2f7a91[_0x7422('0x48')]:_0x1de215['model'];if(!_0x4bb430[_0x7422('0x44')][_0x7422('0x4b')](_0x7422('0x4c'))){_0x2f7a91[_0x7422('0x31')]=qs['limit'](_0x4bb430['query'][_0x7422('0x31')]);_0x2f7a91[_0x7422('0x30')]=qs[_0x7422('0x30')](_0x4bb430[_0x7422('0x44')][_0x7422('0x30')]);}_0x2f7a91[_0x7422('0x64')]=qs[_0x7422('0x4d')](_0x4bb430[_0x7422('0x44')][_0x7422('0x4d')]);_0x2f7a91['where']=qs[_0x7422('0x45')](_['pick'](_0x4bb430['query'],_0x1de215[_0x7422('0x45')]));_0x2f7a91['where']['MailAccountId']=_0x127a61['id'];if(_0x4bb430[_0x7422('0x44')][_0x7422('0x4f')]){_0x2f7a91[_0x7422('0x4e')]=_[_0x7422('0x50')](_0x2f7a91[_0x7422('0x4e')],{'$or':_[_0x7422('0x65')](_0x2f7a91[_0x7422('0x48')],function(_0x1b01ff){var _0x55183c={};_0x55183c[_0x1b01ff]={'$like':'%'+_0x4bb430[_0x7422('0x44')][_0x7422('0x4f')]+'%'};return _0x55183c;})});}_0x2f7a91=_[_0x7422('0x50')]({},_0x2f7a91,_0x4bb430[_0x7422('0x55')]);return db['Disposition'][_0x7422('0x2f')]({'where':_0x2f7a91[_0x7422('0x4e')]})[_0x7422('0x20')](function(_0x537a26){_0x5b2ed3['count']=_0x537a26;if(_0x4bb430[_0x7422('0x44')][_0x7422('0x66')]){_0x2f7a91[_0x7422('0x56')]=[{'all':!![]}];}return db['Disposition'][_0x7422('0x57')](_0x2f7a91);})[_0x7422('0x20')](function(_0xcceb4d){_0x5b2ed3[_0x7422('0x67')]=_0xcceb4d;return _0x5b2ed3;});}})[_0x7422('0x20')](respondWithFilteredResult(_0x4450ec,_0x2f7a91))[_0x7422('0x58')](handleError(_0x4450ec,null));};exports[_0x7422('0x68')]=function(_0x4e63a0,_0x16c6e9,_0x12b377){return db[_0x7422('0x41')][_0x7422('0x5c')]({'where':{'id':_0x4e63a0['params']['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x16c6e9,null))['then'](function(_0x86b363){if(_0x86b363){return _0x86b363[_0x7422('0x68')](_0x4e63a0[_0x7422('0x44')]['ids']);}})[_0x7422('0x20')](respondWithStatusCode(_0x16c6e9,null))[_0x7422('0x58')](handleError(_0x16c6e9,null));};exports[_0x7422('0x69')]=function(_0x5ec62f,_0x1effdf,_0x1eed19){if(_0x5ec62f[_0x7422('0x5d')]['id']){delete _0x5ec62f['body']['id'];}return db[_0x7422('0x41')][_0x7422('0x5c')]({'where':{'id':_0x5ec62f[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x1effdf,null))[_0x7422('0x20')](function(_0x14d47f){if(_0x14d47f){_0x5ec62f[_0x7422('0x5d')]['MailAccountId']=_0x14d47f['id'];return db[_0x7422('0x6a')][_0x7422('0x61')](_0x5ec62f[_0x7422('0x5d')]);}})[_0x7422('0x20')](respondWithResult(_0x1effdf,null))[_0x7422('0x58')](handleError(_0x1effdf,null));};exports[_0x7422('0x6b')]=function(_0x1be450,_0x2d003a,_0x1d4214){var _0xd4542a={'raw':![],'where':{}};var _0x1ee6e3={};var _0x181469={'count':0x0,'rows':[]};return db[_0x7422('0x41')][_0x7422('0x63')]({'where':{'id':_0x1be450[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x2d003a,null))['then'](function(_0x17810d){if(_0x17810d){_0x1ee6e3[_0x7422('0x47')]=_[_0x7422('0x43')](db[_0x7422('0x6a')]['rawAttributes']);_0x1ee6e3[_0x7422('0x44')]=_[_0x7422('0x43')](_0x1be450['query']);_0x1ee6e3[_0x7422('0x45')]=_[_0x7422('0x46')](_0x1ee6e3['model'],_0x1ee6e3[_0x7422('0x44')]);_0xd4542a[_0x7422('0x48')]=_[_0x7422('0x46')](_0x1ee6e3[_0x7422('0x47')],qs['fields'](_0x1be450[_0x7422('0x44')][_0x7422('0x49')]));_0xd4542a[_0x7422('0x48')]=_0xd4542a['attributes'][_0x7422('0x4a')]?_0xd4542a[_0x7422('0x48')]:_0x1ee6e3[_0x7422('0x47')];if(!_0x1be450['query'][_0x7422('0x4b')](_0x7422('0x4c'))){_0xd4542a[_0x7422('0x31')]=qs[_0x7422('0x31')](_0x1be450[_0x7422('0x44')]['limit']);_0xd4542a[_0x7422('0x30')]=qs[_0x7422('0x30')](_0x1be450[_0x7422('0x44')]['offset']);}_0xd4542a[_0x7422('0x64')]=qs[_0x7422('0x4d')](_0x1be450[_0x7422('0x44')][_0x7422('0x4d')]);_0xd4542a['where']=qs[_0x7422('0x45')](_[_0x7422('0x6c')](_0x1be450['query'],_0x1ee6e3[_0x7422('0x45')]));_0xd4542a[_0x7422('0x4e')][_0x7422('0x6d')]=_0x17810d['id'];if(_0x1be450[_0x7422('0x44')][_0x7422('0x4f')]){_0xd4542a[_0x7422('0x4e')]=_[_0x7422('0x50')](_0xd4542a[_0x7422('0x4e')],{'$or':_['map'](_0xd4542a[_0x7422('0x48')],function(_0x463c91){var _0x659249={};_0x659249[_0x463c91]={'$like':'%'+_0x1be450['query'][_0x7422('0x4f')]+'%'};return _0x659249;})});}_0xd4542a=_[_0x7422('0x50')]({},_0xd4542a,_0x1be450[_0x7422('0x55')]);return db[_0x7422('0x6a')][_0x7422('0x2f')]({'where':_0xd4542a[_0x7422('0x4e')]})[_0x7422('0x20')](function(_0x4dd5c4){_0x181469[_0x7422('0x2f')]=_0x4dd5c4;if(_0x1be450[_0x7422('0x44')][_0x7422('0x66')]){_0xd4542a[_0x7422('0x56')]=[{'all':!![]}];}return db[_0x7422('0x6a')][_0x7422('0x57')](_0xd4542a);})[_0x7422('0x20')](function(_0x25a9df){_0x181469[_0x7422('0x67')]=_0x25a9df;return _0x181469;});}})['then'](respondWithFilteredResult(_0x2d003a,_0xd4542a))['catch'](handleError(_0x2d003a,null));};exports[_0x7422('0x6e')]=function(_0x4ec39d,_0x368002,_0xee3c68){return db[_0x7422('0x41')][_0x7422('0x5c')]({'where':{'id':_0x4ec39d[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x368002,null))[_0x7422('0x20')](function(_0xaef1de){if(_0xaef1de){return _0xaef1de[_0x7422('0x6e')](_0x4ec39d[_0x7422('0x44')]['ids']);}})[_0x7422('0x20')](respondWithStatusCode(_0x368002,null))[_0x7422('0x58')](handleError(_0x368002,null));};exports[_0x7422('0x61')]=function(_0x5f52ec,_0x298c34){var _0x55325c={'name':_0x5f52ec[_0x7422('0x5d')][_0x7422('0x3b')],'key':_0x5f52ec[_0x7422('0x5d')]['key'],'email':_0x5f52ec[_0x7422('0x5d')][_0x7422('0x6f')],'ListId':_0x5f52ec[_0x7422('0x5d')][_0x7422('0x70')],'active':!_[_0x7422('0x71')](_0x5f52ec[_0x7422('0x5d')][_0x7422('0x72')])?_0x5f52ec[_0x7422('0x5d')][_0x7422('0x72')]:!![],'description':_0x5f52ec['body']['description']||null,'Imap':{},'Smtp':{}};if(_[_0x7422('0x71')](_0x5f52ec[_0x7422('0x5d')][_0x7422('0x73')])){if(_0x5f52ec[_0x7422('0x5d')][_0x7422('0x74')]){_0x55325c[_0x7422('0x5a')]['user']=_0x55325c[_0x7422('0x3e')]['user']=_0x5f52ec[_0x7422('0x5d')][_0x7422('0x75')];_0x55325c[_0x7422('0x5a')]['password']=_0x55325c[_0x7422('0x3e')][_0x7422('0x76')]=_0x5f52ec[_0x7422('0x5d')]['cpassword'];}else{_0x55325c['Imap'][_0x7422('0x77')]=_0x55325c['Smtp']['authentication']=![];}_0x55325c[_0x7422('0x5a')][_0x7422('0x78')]=_0x5f52ec[_0x7422('0x5d')][_0x7422('0x5a')][_0x7422('0x78')];_0x55325c[_0x7422('0x5a')][_0x7422('0x79')]=_0x5f52ec[_0x7422('0x5d')][_0x7422('0x5a')][_0x7422('0x79')];_0x55325c['Smtp'][_0x7422('0x78')]=_0x5f52ec['body'][_0x7422('0x3e')]['host'];_0x55325c[_0x7422('0x3e')][_0x7422('0x79')]=_0x5f52ec['body'][_0x7422('0x3e')][_0x7422('0x79')];}else{_0x55325c[_0x7422('0x5a')][_0x7422('0x7a')]=_0x55325c[_0x7422('0x3e')][_0x7422('0x7a')]=_0x5f52ec['body'][_0x7422('0x73')];_0x55325c[_0x7422('0x5a')]['user']=_0x55325c[_0x7422('0x3e')]['user']=_0x5f52ec[_0x7422('0x5d')][_0x7422('0x75')];_0x55325c[_0x7422('0x5a')][_0x7422('0x7b')]=_0x55325c[_0x7422('0x3e')]['pass']=_0x5f52ec[_0x7422('0x5d')][_0x7422('0x7c')];}return db[_0x7422('0x41')][_0x7422('0x61')](_0x55325c,{'include':[{'model':db['MailServerOut'],'as':'Smtp'},{'model':db[_0x7422('0x3d')],'as':_0x7422('0x5a')}]})[_0x7422('0x20')](function(_0x34c8b0){var _0x12ad11=_0x5f52ec[_0x7422('0x7d')][_0x7422('0x37')]({'plain':!![]});if(!_0x12ad11)throw new Error(_0x7422('0x7e'));if(_0x12ad11[_0x7422('0x7f')]===_0x7422('0x7d')){var _0x2fe234=_0x34c8b0['get']({'plain':!![]});return db[_0x7422('0x80')]['find']({'where':{'name':_0x7422('0x38'),'userProfileId':_0x12ad11[_0x7422('0x81')]},'raw':!![]})[_0x7422('0x20')](function(_0x391989){if(_0x391989&&_0x391989[_0x7422('0x82')]===0x0){return db['UserProfileResource'][_0x7422('0x61')]({'name':_0x2fe234[_0x7422('0x3b')],'resourceId':_0x2fe234['id'],'type':_0x391989[_0x7422('0x3b')],'sectionId':_0x391989['id']},{})[_0x7422('0x20')](function(){return _0x34c8b0;});}else{return _0x34c8b0;}})[_0x7422('0x58')](function(_0x5cd3cf){logger[_0x7422('0x26')](_0x7422('0x83'),_0x5cd3cf);throw _0x5cd3cf;});}return _0x34c8b0;})[_0x7422('0x20')](respondWithResult(_0x298c34,0xc9))[_0x7422('0x58')](handleError(_0x298c34,null));};exports[_0x7422('0x84')]=function(_0x67df86,_0x3c4ff0,_0x4c5828){return db['MailAccount']['findOne']({'where':{'id':_0x67df86[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x3c4ff0,null))[_0x7422('0x20')](function(_0x42d114){if(_0x42d114){return _0x42d114[_0x7422('0x84')]();}return null;})[_0x7422('0x20')](respondWithResult(_0x3c4ff0,null))[_0x7422('0x58')](handleError(_0x3c4ff0,null));};exports['addImap']=function(_0xc037b7,_0x152b86,_0x32a366){if(_0xc037b7[_0x7422('0x5d')]['id']){delete _0xc037b7[_0x7422('0x5d')]['id'];}return db['MailAccount'][_0x7422('0x5c')]({'where':{'id':_0xc037b7[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x152b86,null))[_0x7422('0x20')](function(_0x50264e){if(_0x50264e){_0xc037b7[_0x7422('0x5d')]['MailAccountId']=_0x50264e['id'];return db[_0x7422('0x3d')][_0x7422('0x61')](_0xc037b7['body']);}})[_0x7422('0x20')](respondWithResult(_0x152b86,null))[_0x7422('0x58')](handleError(_0x152b86,null));};exports[_0x7422('0x85')]=function(_0x50863e,_0x3c2e7d,_0x2b7afc){return db[_0x7422('0x41')]['findOne']({'where':{'id':_0x50863e['params']['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x3c2e7d,null))[_0x7422('0x20')](function(_0x4b0819){if(_0x4b0819){return _0x4b0819[_0x7422('0x86')](null);}return null;})[_0x7422('0x20')](respondWithStatusCode(_0x3c2e7d,null))[_0x7422('0x58')](handleError(_0x3c2e7d,null));};exports[_0x7422('0x87')]=function(_0x387036,_0x455273,_0x109ece){return db[_0x7422('0x41')][_0x7422('0x63')]({'where':{'id':_0x387036['params']['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x455273,null))[_0x7422('0x20')](function(_0x2fcee9){if(_0x2fcee9){return _0x2fcee9[_0x7422('0x87')]();}return null;})[_0x7422('0x20')](respondWithResult(_0x455273,null))[_0x7422('0x58')](handleError(_0x455273,null));};exports[_0x7422('0x88')]=function(_0x1e1a85,_0xd36f7,_0x194612){if(_0x1e1a85[_0x7422('0x5d')]['id']){delete _0x1e1a85[_0x7422('0x5d')]['id'];}return db[_0x7422('0x41')]['find']({'where':{'id':_0x1e1a85['params']['id']}})[_0x7422('0x20')](handleEntityNotFound(_0xd36f7,null))[_0x7422('0x20')](function(_0x3ecb87){if(_0x3ecb87){_0x1e1a85[_0x7422('0x5d')][_0x7422('0x6d')]=_0x3ecb87['id'];return db[_0x7422('0x5b')]['create'](_0x1e1a85[_0x7422('0x5d')]);}})[_0x7422('0x20')](respondWithResult(_0xd36f7,null))[_0x7422('0x58')](handleError(_0xd36f7,null));};exports[_0x7422('0x89')]=function(_0x10a58e,_0x3b6f96,_0x394da5){return db['MailAccount'][_0x7422('0x63')]({'where':{'id':_0x10a58e[_0x7422('0x59')]['id']}})['then'](handleEntityNotFound(_0x3b6f96,null))[_0x7422('0x20')](function(_0x3e1acc){if(_0x3e1acc){return _0x3e1acc['setSmtp'](null);}return null;})['then'](respondWithStatusCode(_0x3b6f96,null))[_0x7422('0x58')](handleError(_0x3b6f96,null));};exports[_0x7422('0x8a')]=function(_0x5d1c1b,_0x33b51d,_0x2c3ce0){return db['MailInteraction'][_0x7422('0x5c')]({'where':{'id':_0x5d1c1b[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x33b51d,null))[_0x7422('0x20')](function(_0x2ee967){if(_0x2ee967){return _0x2ee967[_0x7422('0x8a')](_0x5d1c1b[_0x7422('0x5d')][_0x7422('0x8b')],_[_0x7422('0x8c')](_0x5d1c1b[_0x7422('0x5d')],[_0x7422('0x8b'),'id'])||{});}})[_0x7422('0x20')](respondWithResult(_0x33b51d,null))['catch'](handleError(_0x33b51d,null));};exports[_0x7422('0x8d')]=function(_0x1a9529,_0x901734,_0x193515){var _0x1314b1={'raw':![],'where':{}};var _0x4e31cd={};var _0x513d26={'count':0x0,'rows':[]};return db[_0x7422('0x41')]['findOne']({'where':{'id':_0x1a9529[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x901734,null))[_0x7422('0x20')](function(_0x50e0b8){if(_0x50e0b8){_0x4e31cd[_0x7422('0x47')]=_[_0x7422('0x43')](db['MailInteraction'][_0x7422('0x42')]);_0x4e31cd[_0x7422('0x44')]=_['keys'](_0x1a9529[_0x7422('0x44')]);_0x4e31cd[_0x7422('0x45')]=_[_0x7422('0x46')](_0x4e31cd[_0x7422('0x47')],_0x4e31cd[_0x7422('0x44')]);_0x1314b1[_0x7422('0x48')]=_[_0x7422('0x46')](_0x4e31cd[_0x7422('0x47')],qs[_0x7422('0x49')](_0x1a9529[_0x7422('0x44')][_0x7422('0x49')]));_0x1314b1[_0x7422('0x48')]=_0x1314b1['attributes'][_0x7422('0x4a')]?_0x1314b1['attributes']:_0x4e31cd[_0x7422('0x47')];if(!_0x1a9529[_0x7422('0x44')][_0x7422('0x4b')](_0x7422('0x4c'))){_0x1314b1['limit']=qs[_0x7422('0x31')](_0x1a9529[_0x7422('0x44')][_0x7422('0x31')]);_0x1314b1['offset']=qs[_0x7422('0x30')](_0x1a9529[_0x7422('0x44')][_0x7422('0x30')]);}_0x1314b1['order']=qs[_0x7422('0x4d')](_0x1a9529['query'][_0x7422('0x4d')]);_0x1314b1[_0x7422('0x4e')]=qs[_0x7422('0x45')](_['pick'](_0x1a9529[_0x7422('0x44')],_0x4e31cd[_0x7422('0x45')]));_0x1314b1[_0x7422('0x4e')][_0x7422('0x6d')]=_0x50e0b8['id'];if(_0x1a9529[_0x7422('0x44')][_0x7422('0x4f')]){_0x1314b1['where']=_[_0x7422('0x50')](_0x1314b1[_0x7422('0x4e')],{'$or':_['map'](_0x1314b1[_0x7422('0x48')],function(_0x59f8b2){var _0x52b5d2={};_0x52b5d2[_0x59f8b2]={'$like':'%'+_0x1a9529['query']['filter']+'%'};return _0x52b5d2;})});}_0x1314b1=_[_0x7422('0x50')]({},_0x1314b1,_0x1a9529[_0x7422('0x55')]);return db[_0x7422('0x8e')][_0x7422('0x2f')]({'where':_0x1314b1[_0x7422('0x4e')]})[_0x7422('0x20')](function(_0x1408a7){_0x513d26[_0x7422('0x2f')]=_0x1408a7;if(_0x1a9529[_0x7422('0x44')][_0x7422('0x66')]){_0x1314b1['include']=[{'model':db[_0x7422('0x8f')],'as':_0x7422('0x90'),'required':![]},{'model':db[_0x7422('0x91')],'as':_0x7422('0x92'),'attributes':['name',_0x7422('0x93'),'internal'],'required':![]},{'model':db['Tag'],'as':'Tags','attributes':['id',_0x7422('0x3b'),_0x7422('0x94')],'where':_0x1a9529[_0x7422('0x44')][_0x7422('0x95')]?{'id':_0x1a9529[_0x7422('0x44')][_0x7422('0x95')]}:undefined,'required':_0x1a9529[_0x7422('0x44')][_0x7422('0x95')]?!![]:![]}];}return db['MailInteraction'][_0x7422('0x57')](_0x1314b1);})[_0x7422('0x20')](function(_0x4d36c9){_0x513d26[_0x7422('0x67')]=_0x4d36c9;return _0x513d26;});}})[_0x7422('0x20')](respondWithFilteredResult(_0x901734,_0x1314b1))[_0x7422('0x58')](handleError(_0x901734,null));};exports[_0x7422('0x96')]=function(_0x1d685f,_0x4dcf48,_0x4f183f){return db[_0x7422('0x41')]['findOne']({'where':{'id':_0x1d685f[_0x7422('0x59')]['id']}})['then'](handleEntityNotFound(_0x4dcf48,null))[_0x7422('0x20')](function(_0x3ec919){if(_0x3ec919){return db[_0x7422('0x97')]['transaction'](function(_0x5ad816){return db[_0x7422('0x98')]['destroy']({'where':{'MailAccountId':_0x1d685f[_0x7422('0x59')]['id']},'transaction':_0x5ad816})[_0x7422('0x20')](function(_0x5318fe){var _0x52c404=_[_0x7422('0x65')](_0x1d685f[_0x7422('0x5d')],function(_0x3ed417){_0x3ed417[_0x7422('0x6d')]=_0x1d685f[_0x7422('0x59')]['id'];return _0x3ed417;});return db[_0x7422('0x98')][_0x7422('0x99')](_0x52c404,{'transaction':_0x5ad816});});})['then'](function(){return db[_0x7422('0x98')][_0x7422('0x9a')]({'where':{'MailAccountId':_0x1d685f[_0x7422('0x59')]['id']},'order':'priority'});});}})[_0x7422('0x20')](respondWithResult(_0x4dcf48,null))[_0x7422('0x58')](handleError(_0x4dcf48,null));};exports['getApplications']=function(_0x4b6a50,_0x15b9fe,_0x12d3eb){var _0x528959={};var _0x50ec04={};var _0x13488b;var _0x7fc193;return db['MailAccount']['findOne']({'where':{'id':_0x4b6a50[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x15b9fe,null))[_0x7422('0x20')](function(_0x8a8361){if(_0x8a8361){_0x13488b=_0x8a8361;_0x50ec04[_0x7422('0x47')]=_[_0x7422('0x43')](db[_0x7422('0x98')][_0x7422('0x42')]);_0x50ec04[_0x7422('0x44')]=_[_0x7422('0x43')](_0x4b6a50[_0x7422('0x44')]);_0x50ec04[_0x7422('0x45')]=_[_0x7422('0x46')](_0x50ec04[_0x7422('0x47')],_0x50ec04[_0x7422('0x44')]);_0x528959['attributes']=_[_0x7422('0x46')](_0x50ec04['model'],qs['fields'](_0x4b6a50[_0x7422('0x44')][_0x7422('0x49')]));_0x528959['attributes']=_0x528959[_0x7422('0x48')][_0x7422('0x4a')]?_0x528959[_0x7422('0x48')]:_0x50ec04[_0x7422('0x47')];_0x528959[_0x7422('0x64')]=qs[_0x7422('0x4d')](_0x4b6a50[_0x7422('0x44')][_0x7422('0x4d')]);_0x528959['where']=qs[_0x7422('0x45')](_[_0x7422('0x6c')](_0x4b6a50[_0x7422('0x44')],_0x50ec04['filters']));if(_0x4b6a50[_0x7422('0x44')][_0x7422('0x4f')]){_0x528959[_0x7422('0x4e')]=_[_0x7422('0x50')](_0x528959['where'],{'$or':_[_0x7422('0x65')](_0x528959[_0x7422('0x48')],function(_0x55b348){var _0x17fcc0={};_0x17fcc0[_0x55b348]={'$like':'%'+_0x4b6a50[_0x7422('0x44')][_0x7422('0x4f')]+'%'};return _0x17fcc0;})});}_0x528959=_[_0x7422('0x50')]({},_0x528959,_0x4b6a50[_0x7422('0x55')]);return _0x13488b[_0x7422('0x9b')](_0x528959);}})[_0x7422('0x20')](function(_0x47b55a){if(_0x47b55a){_0x7fc193=_0x47b55a[_0x7422('0x4a')];if(!_0x4b6a50[_0x7422('0x44')][_0x7422('0x4b')](_0x7422('0x4c'))){_0x528959['limit']=qs[_0x7422('0x31')](_0x4b6a50[_0x7422('0x44')][_0x7422('0x31')]);_0x528959[_0x7422('0x30')]=qs[_0x7422('0x30')](_0x4b6a50[_0x7422('0x44')][_0x7422('0x30')]);}return _0x13488b['getApplications'](_0x528959);}})[_0x7422('0x20')](function(_0x401874){if(_0x401874){return _0x401874?{'count':_0x7fc193,'rows':_0x401874}:null;}})[_0x7422('0x20')](respondWithResult(_0x15b9fe,null))[_0x7422('0x58')](handleError(_0x15b9fe,null));};exports[_0x7422('0x9c')]=function(_0x3875bd,_0x295a24,_0x3129a5){var _0x5a9547={'raw':!![],'where':{}};var _0x268f5e={};var _0x22fb6b={'count':0x0,'rows':[]};return db['MailAccount'][_0x7422('0x63')]({'where':{'id':_0x3875bd[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x295a24,null))['then'](function(_0x15fd6a){if(_0x15fd6a){_0x268f5e[_0x7422('0x47')]=_[_0x7422('0x43')](db['MailMessage'][_0x7422('0x42')]);_0x268f5e['query']=_['keys'](_0x3875bd[_0x7422('0x44')]);_0x268f5e[_0x7422('0x45')]=_[_0x7422('0x46')](_0x268f5e[_0x7422('0x47')],_0x268f5e[_0x7422('0x44')]);_0x5a9547[_0x7422('0x48')]=_[_0x7422('0x46')](_0x268f5e['model'],qs['fields'](_0x3875bd[_0x7422('0x44')][_0x7422('0x49')]));_0x5a9547[_0x7422('0x48')]=_0x5a9547['attributes']['length']?_0x5a9547[_0x7422('0x48')]:_0x268f5e[_0x7422('0x47')];if(!_0x3875bd[_0x7422('0x44')][_0x7422('0x4b')](_0x7422('0x4c'))){_0x5a9547['limit']=qs[_0x7422('0x31')](_0x3875bd[_0x7422('0x44')][_0x7422('0x31')]);_0x5a9547[_0x7422('0x30')]=qs['offset'](_0x3875bd[_0x7422('0x44')][_0x7422('0x30')]);}_0x5a9547['order']=qs[_0x7422('0x4d')](_0x3875bd[_0x7422('0x44')][_0x7422('0x4d')]);_0x5a9547['where']=qs[_0x7422('0x45')](_[_0x7422('0x6c')](_0x3875bd[_0x7422('0x44')],_0x268f5e[_0x7422('0x45')]));_0x5a9547[_0x7422('0x4e')][_0x7422('0x6d')]=_0x15fd6a['id'];if(_0x3875bd[_0x7422('0x44')][_0x7422('0x4f')]){_0x5a9547[_0x7422('0x4e')]=_[_0x7422('0x50')](_0x5a9547[_0x7422('0x4e')],{'$or':_['map'](_0x5a9547[_0x7422('0x48')],function(_0x27773c){var _0x233030={};_0x233030[_0x27773c]={'$like':'%'+_0x3875bd[_0x7422('0x44')]['filter']+'%'};return _0x233030;})});}if(_0x3875bd[_0x7422('0x44')][_0x7422('0x9d')]){var _0x39f39c=_0x3875bd[_0x7422('0x44')][_0x7422('0x9d')][_0x7422('0x9e')](',');var _0x9cd86f={};_0x9cd86f[_0x39f39c[0x0]]={'$gte':moment(_0x39f39c[0x1])[_0x7422('0x9f')](_0x7422('0xa0'))};_0x5a9547[_0x7422('0x4e')]=_[_0x7422('0x50')](_0x5a9547[_0x7422('0x4e')],_0x9cd86f);}_0x5a9547=_['merge']({},_0x5a9547,_0x3875bd[_0x7422('0x55')]);return db[_0x7422('0xa1')][_0x7422('0x2f')]({'where':_0x5a9547['where']})['then'](function(_0x1ba722){_0x22fb6b[_0x7422('0x2f')]=_0x1ba722;if(_0x3875bd['query']['includeAll']){_0x5a9547[_0x7422('0x56')]=[{'all':!![]}];}return db[_0x7422('0xa1')][_0x7422('0x57')](_0x5a9547);})[_0x7422('0x20')](function(_0x2b7013){_0x22fb6b[_0x7422('0x67')]=_0x2b7013;return _0x22fb6b;});}})[_0x7422('0x20')](respondWithFilteredResult(_0x295a24,_0x5a9547))[_0x7422('0x58')](handleError(_0x295a24,null));};exports['send']=function(_0xe74606,_0x90aa1e,_0x42cdb8){var _0x8d9d08,_0x588716={},_0x3abc56;if(_0xe74606['body']['to']){_0x3abc56=_0xe74606[_0x7422('0x5d')]['to'][_0x7422('0x9e')](',')[0x0];}return db['MailAccount'][_0x7422('0x5c')]({'where':{'id':_0xe74606[_0x7422('0x59')]['id']},'include':[{'model':db[_0x7422('0xa2')],'as':_0x7422('0xa3'),'include':[{'model':db[_0x7422('0x8f')],'as':_0x7422('0xa4'),'where':{'email':_0x3abc56},'limit':0x1,'order':[[_0x7422('0xa5'),_0x7422('0xa6')]]}]},{'model':db[_0x7422('0x5b')],'as':_0x7422('0x3e'),'raw':!![]}]})['then'](handleEntityNotFound(_0x90aa1e,null))[_0x7422('0x20')](function(_0x44f73b){if(_0x44f73b){_0x8d9d08=_0x44f73b;if(_0x44f73b[_0x7422('0x3e')]){if(_[_0x7422('0x71')](_0xe74606[_0x7422('0x5d')][_0x7422('0xa7')])){_0xe74606['body'][_0x7422('0xa7')]=util['format'](_0x7422('0xa8'),_0x44f73b[_0x7422('0x3b')],_0x44f73b[_0x7422('0x6f')]||_0x44f73b[_0x7422('0x3e')][_0x7422('0x7d')]);}if(_0xe74606[_0x7422('0x5d')][_0x7422('0xa9')]&&_0xe74606[_0x7422('0x5d')][_0x7422('0xa9')][_0x7422('0x4a')]){for(var _0x478fca=0x0;_0x478fca<_0xe74606[_0x7422('0x5d')]['attachments']['length'];_0x478fca+=0x1){_0xe74606[_0x7422('0x5d')][_0x7422('0xa9')][_0x478fca]={'filename':_0xe74606[_0x7422('0x5d')]['attachments'][_0x478fca][_0x7422('0x3b')],'path':path[_0x7422('0xaa')](config[_0x7422('0xab')],'server/files/attachments',_0xe74606['body'][_0x7422('0xa9')][_0x478fca][_0x7422('0xac')])};}}var _0x1e2602={'tls':{'rejectUnauthorized':![]}};if(_[_0x7422('0x71')](_0x44f73b[_0x7422('0x3e')][_0x7422('0x7a')])){if(_0x44f73b[_0x7422('0x3e')][_0x7422('0x77')]){_0x1e2602[_0x7422('0xad')]={'user':_0x44f73b[_0x7422('0x3e')][_0x7422('0x7d')],'pass':_0x44f73b[_0x7422('0x3e')][_0x7422('0x76')]};}_0x1e2602['host']=_0x44f73b[_0x7422('0x3e')][_0x7422('0x78')];_0x1e2602[_0x7422('0x79')]=_0x44f73b['Smtp'][_0x7422('0x79')];_0x1e2602[_0x7422('0xae')]=_0x44f73b['Smtp'][_0x7422('0xae')];}else{_0x1e2602[_0x7422('0x7a')]=_0x44f73b['Smtp'][_0x7422('0x7a')];_0x1e2602[_0x7422('0xad')]={'user':_0x44f73b[_0x7422('0x3e')][_0x7422('0x7d')],'pass':_0x44f73b[_0x7422('0x3e')][_0x7422('0x76')]};}return respondWithRpcPromise('SendMail',_0x7422('0xaf'),{'account':_0x1e2602,'message':_0xe74606[_0x7422('0x5d')]});}else{throw new Error(_0x7422('0xb0'));}}})['then'](function(_0x1f612a){if(_0x1f612a){_0x588716=_0x1f612a;if(_0x8d9d08[_0x7422('0xa3')]){if(_0x8d9d08[_0x7422('0xa3')]['Contacts'][_0x7422('0x4a')]){return _0x8d9d08['List'][_0x7422('0xa4')][0x0];}else{return db[_0x7422('0x8f')][_0x7422('0x61')](_[_0x7422('0x17')](_0xe74606[_0x7422('0x5d')],{'firstName':_0xe74606[_0x7422('0x5d')]['to'],'email':_0xe74606['body']['to'],'phone':_0xe74606[_0x7422('0x5d')]['to'],'ListId':_0x8d9d08['ListId']}));}}else{throw new Error(_0x7422('0xb0'));}}})[_0x7422('0x20')](function(_0xd10c93){if(_0xd10c93){var _0x45883a={'UserId':_0xe74606[_0x7422('0x7d')]['id'],'ContactId':_0xd10c93['id'],'MailAccountId':_0x8d9d08['id'],'inReplyTo':_0x588716['messageId'],'to':_0xe74606[_0x7422('0x5d')][_0x7422('0xa7')],'cc':_0xe74606['body']['cc'],'subject':_0xe74606[_0x7422('0x5d')][_0x7422('0xb1')],'attach':_0xe74606['body']['attach'],'firstMsgDirection':_0x7422('0xb2'),'lastMsgAt':moment()[_0x7422('0x9f')](_0x7422('0xa0')),'lastMsgDirection':_0x7422('0xb2'),'lastMsgBody':_0xe74606[_0x7422('0x5d')]['body'],'Messages':[_[_0x7422('0x50')](_0xe74606[_0x7422('0x5d')],{'messageId':_0x588716[_0x7422('0xb3')],'sentAt':moment()[_0x7422('0x9f')](_0x7422('0xa0')),'read':!![],'MailAccountId':_0x8d9d08['id'],'UserId':_0xe74606[_0x7422('0x7d')]['id'],'ContactId':_0xd10c93['id']})]};if(_0xe74606[_0x7422('0x5d')][_0x7422('0xb4')]){_0x45883a=_[_0x7422('0x50')](_0x45883a,_0xe74606[_0x7422('0x5d')][_0x7422('0xb4')]);}return db[_0x7422('0x8e')][_0x7422('0x61')](_0x45883a,{'include':[{'model':db['MailMessage'],'as':_0x7422('0xb5')}]});}})[_0x7422('0x20')](respondWithResult(_0x90aa1e,null))[_0x7422('0x58')](handleError(_0x90aa1e,null));};exports[_0x7422('0xb6')]=function(_0x17a277,_0x1bf84f,_0x1c6231){return db[_0x7422('0x41')]['find']({'where':{'id':_0x17a277[_0x7422('0x59')]['id']},'include':[{'model':db[_0x7422('0x5b')],'as':_0x7422('0x3e'),'raw':!![]}]})['then'](handleEntityNotFound(_0x1bf84f,null))[_0x7422('0x20')](function(_0x339cc8){if(_0x339cc8&&_0x339cc8[_0x7422('0x3e')]){var _0x186567={'id':_0x339cc8['id'],'tls':{'rejectUnauthorized':![]}};if(_0x339cc8[_0x7422('0x3e')][_0x7422('0x7a')]){_0x186567[_0x7422('0x7a')]=_0x339cc8[_0x7422('0x3e')][_0x7422('0x7a')];}else{_0x186567[_0x7422('0x78')]=_0x339cc8[_0x7422('0x3e')][_0x7422('0x78')];_0x186567[_0x7422('0x79')]=_0x339cc8[_0x7422('0x3e')]['port'];_0x186567['secure']=_0x339cc8[_0x7422('0x3e')][_0x7422('0xae')];}if(_0x339cc8[_0x7422('0x3e')][_0x7422('0x77')]){_0x186567[_0x7422('0xad')]={'user':_0x339cc8['Smtp'][_0x7422('0x7d')],'pass':_0x339cc8['Smtp'][_0x7422('0x76')]};}return respondWithRpcPromise(_0x7422('0xb7'),_0x7422('0xb6'),{'account':_0x186567});}})[_0x7422('0x20')](respondWithResult(_0x1bf84f,null))[_0x7422('0x58')](handleError(_0x1bf84f,null));};exports[_0x7422('0x39')]=function(_0x49e40d,_0x4cbc57){return db[_0x7422('0x41')][_0x7422('0x5c')]({'where':{'id':_0x49e40d[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x4cbc57,null))[_0x7422('0x20')](function(_0x3010fc){if(_0x3010fc&&_0x3010fc['service']){throw new db[(_0x7422('0xb8'))][(_0x7422('0xb9'))]('You\x20can\x27t\x20remove\x20the\x20mail\x20service\x20account');}return _0x3010fc;})[_0x7422('0x20')](removeEntity(_0x4cbc57,null))['catch'](handleError(_0x4cbc57,null));};exports['addAgents']=function(_0x47edce,_0x5350b3,_0x451a20){return db[_0x7422('0x41')][_0x7422('0x5c')]({'where':{'id':_0x47edce[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x5350b3,null))['then'](function(_0x5829db){if(_0x5829db){return _0x5829db[_0x7422('0xba')](_0x47edce[_0x7422('0x5d')][_0x7422('0x8b')],_['omit'](_0x47edce[_0x7422('0x5d')],[_0x7422('0x8b'),'id'])||{})[_0x7422('0xbb')](function(_0x1e9364){for(var _0x59bfb8=0x0;_0x59bfb8<_0x47edce[_0x7422('0x5d')][_0x7422('0x8b')]['length'];_0x59bfb8+=0x1){socket[_0x7422('0xbc')](_0x7422('0xbd'),{'UserId':_0x47edce[_0x7422('0x5d')][_0x7422('0x8b')][_0x59bfb8],'MailAccountId':_0x47edce[_0x7422('0x59')]['id']});}return _0x1e9364;});}})['then'](respondWithResult(_0x5350b3,null))[_0x7422('0x58')](handleError(_0x5350b3,null));};exports[_0x7422('0xbe')]=function(_0x3aea63,_0x5d0841,_0x4138fc){return db[_0x7422('0x41')]['find']({'where':{'id':_0x3aea63[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x5d0841,null))['then'](function(_0x5d883e){if(_0x5d883e){return _0x5d883e[_0x7422('0xbe')](_0x3aea63[_0x7422('0x44')]['ids'])[_0x7422('0x20')](function(){if(_[_0x7422('0xbf')](_0x3aea63['query'][_0x7422('0x8b')])){for(var _0x11f042=0x0;_0x11f042<_0x3aea63['query'][_0x7422('0x8b')][_0x7422('0x4a')];_0x11f042+=0x1){socket[_0x7422('0xbc')](_0x7422('0xc0'),{'UserId':Number(_0x3aea63[_0x7422('0x44')][_0x7422('0x8b')][_0x11f042]),'MailAccountId':Number(_0x3aea63[_0x7422('0x59')]['id'])});}}else{socket[_0x7422('0xbc')](_0x7422('0xc0'),{'UserId':Number(_0x3aea63[_0x7422('0x44')]['ids']),'MailAccountId':Number(_0x3aea63[_0x7422('0x59')]['id'])});}});}})['then'](respondWithStatusCode(_0x5d0841,null))[_0x7422('0x58')](handleError(_0x5d0841,null));};exports[_0x7422('0xc1')]=function(_0x2b2750,_0x52b6af,_0x3fb395){var _0x83c779={};var _0x4d95d2={};var _0x332036;var _0x505f5a;return db[_0x7422('0x41')]['findOne']({'where':{'id':_0x2b2750[_0x7422('0x59')]['id']}})[_0x7422('0x20')](handleEntityNotFound(_0x52b6af,null))[_0x7422('0x20')](function(_0x5e8e44){if(_0x5e8e44){_0x332036=_0x5e8e44;_0x4d95d2[_0x7422('0x47')]=_[_0x7422('0x43')](db[_0x7422('0x91')]['rawAttributes']);_0x4d95d2[_0x7422('0x44')]=_['keys'](_0x2b2750['query']);_0x4d95d2[_0x7422('0x45')]=_[_0x7422('0x46')](_0x4d95d2[_0x7422('0x47')],_0x4d95d2['query']);_0x83c779[_0x7422('0x48')]=_[_0x7422('0x46')](_0x4d95d2[_0x7422('0x47')],qs[_0x7422('0x49')](_0x2b2750[_0x7422('0x44')][_0x7422('0x49')]));_0x83c779[_0x7422('0x48')]=_0x83c779[_0x7422('0x48')][_0x7422('0x4a')]?_0x83c779[_0x7422('0x48')]:_0x4d95d2[_0x7422('0x47')];_0x83c779[_0x7422('0x64')]=qs['sort'](_0x2b2750['query']['sort']);_0x83c779[_0x7422('0x4e')]=qs[_0x7422('0x45')](_['pick'](_0x2b2750[_0x7422('0x44')],_0x4d95d2[_0x7422('0x45')]));if(_0x2b2750['query'][_0x7422('0x4f')]){_0x83c779[_0x7422('0x4e')]=_[_0x7422('0x50')](_0x83c779[_0x7422('0x4e')],{'$or':_[_0x7422('0x65')](_0x83c779[_0x7422('0x48')],function(_0x761674){var _0x5e29c9={};_0x5e29c9[_0x761674]={'$like':'%'+_0x2b2750[_0x7422('0x44')]['filter']+'%'};return _0x5e29c9;})});}_0x83c779=_[_0x7422('0x50')]({},_0x83c779,_0x2b2750[_0x7422('0x55')]);return _0x332036['getAgents'](_0x83c779);}})[_0x7422('0x20')](function(_0x4df252){if(_0x4df252){_0x505f5a=_0x4df252[_0x7422('0x4a')];if(!_0x2b2750['query'][_0x7422('0x4b')](_0x7422('0x4c'))){_0x83c779[_0x7422('0x31')]=qs['limit'](_0x2b2750['query']['limit']);_0x83c779[_0x7422('0x30')]=qs[_0x7422('0x30')](_0x2b2750[_0x7422('0x44')][_0x7422('0x30')]);}return _0x332036[_0x7422('0xc1')](_0x83c779);}})[_0x7422('0x20')](function(_0x769968){if(_0x769968){return _0x769968?{'count':_0x505f5a,'rows':_0x769968}:null;}})[_0x7422('0x20')](respondWithResult(_0x52b6af,null))[_0x7422('0x58')](handleError(_0x52b6af,null));};
\ No newline at end of file
index e9f7c2c..4c2e309 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['hasOwnProperty','hook','exports','events','../../mysqldb','MailAccount','update','emit'];(function(_0x49c68e,_0x1c1673){var _0x33032b=function(_0x42ac31){while(--_0x42ac31){_0x49c68e['push'](_0x49c68e['shift']());}};_0x33032b(++_0x1c1673);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3c4737,_0x2329ec){_0x3c4737=_0x3c4737-0x0;var _0x2bb926=_0xa9e0[_0x3c4737];return _0x2bb926;};'use strict';var EventEmitter=require(_0x0a9e('0x0'));var MailAccount=require(_0x0a9e('0x1'))['db'][_0x0a9e('0x2')];var MailAccountEvents=new EventEmitter();MailAccountEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0x0a9e('0x3'),'afterDestroy':'remove'};function emitEvent(_0x333808){return function(_0x432180,_0x2ab90b,_0x991246){MailAccountEvents[_0x0a9e('0x4')](_0x333808+':'+_0x432180['id'],_0x432180);MailAccountEvents['emit'](_0x333808,_0x432180);_0x991246(null);};}for(var e in events){if(events[_0x0a9e('0x5')](e)){var event=events[e];MailAccount[_0x0a9e('0x6')](e,emitEvent(event));}}module[_0x0a9e('0x7')]=MailAccountEvents;
\ No newline at end of file
+var _0xa9e0=['hasOwnProperty','hook','exports','events','../../mysqldb','MailAccount','update','emit'];(function(_0x4ca6a4,_0x5e9694){var _0x120555=function(_0x56888c){while(--_0x56888c){_0x4ca6a4['push'](_0x4ca6a4['shift']());}};_0x120555(++_0x5e9694);}(_0xa9e0,0x123));var _0x0a9e=function(_0x5e3b04,_0xbb6795){_0x5e3b04=_0x5e3b04-0x0;var _0x1fc44d=_0xa9e0[_0x5e3b04];return _0x1fc44d;};'use strict';var EventEmitter=require(_0x0a9e('0x0'));var MailAccount=require(_0x0a9e('0x1'))['db'][_0x0a9e('0x2')];var MailAccountEvents=new EventEmitter();MailAccountEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0x0a9e('0x3'),'afterDestroy':'remove'};function emitEvent(_0x333808){return function(_0x432180,_0x2ab90b,_0x991246){MailAccountEvents[_0x0a9e('0x4')](_0x333808+':'+_0x432180['id'],_0x432180);MailAccountEvents['emit'](_0x333808,_0x432180);_0x991246(null);};}for(var e in events){if(events[_0x0a9e('0x5')](e)){var event=events[e];MailAccount[_0x0a9e('0x6')](e,emitEvent(event));}}module[_0x0a9e('0x7')]=MailAccountEvents;
\ No newline at end of file
index ba30b52..272cbce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5458=['../../config/environment','exports','define','mail_accounts','lodash','util','../../config/logger','moment','bluebird','path','rimraf'];(function(_0x9388b3,_0x3767b5){var _0x281bce=function(_0x5d7f28){while(--_0x5d7f28){_0x9388b3['push'](_0x9388b3['shift']());}};_0x281bce(++_0x3767b5);}(_0x5458,0x1c7));var _0x8545=function(_0x2927f6,_0x53bdb3){_0x2927f6=_0x2927f6-0x0;var _0x57bd36=_0x5458[_0x2927f6];return _0x57bd36;};'use strict';var _=require(_0x8545('0x0'));var util=require(_0x8545('0x1'));var logger=require(_0x8545('0x2'))('api');var moment=require(_0x8545('0x3'));var BPromise=require(_0x8545('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x8545('0x5'));var rimraf=require(_0x8545('0x6'));var config=require(_0x8545('0x7'));var attributes=require('./mailAccount.attributes');module[_0x8545('0x8')]=function(_0x2bd13a,_0x10792f){return _0x2bd13a[_0x8545('0x9')]('MailAccount',attributes,{'tableName':_0x8545('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xfc4f=['path','../../config/environment','./mailAccount.attributes','exports','define','MailAccount','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x544636,_0x2c02cd){var _0x435856=function(_0x2b08ef){while(--_0x2b08ef){_0x544636['push'](_0x544636['shift']());}};_0x435856(++_0x2c02cd);}(_0xfc4f,0x192));var _0xffc4=function(_0x432682,_0x253044){_0x432682=_0x432682-0x0;var _0x463d05=_0xfc4f[_0x432682];return _0x463d05;};'use strict';var _=require('lodash');var util=require(_0xffc4('0x0'));var logger=require(_0xffc4('0x1'))(_0xffc4('0x2'));var moment=require(_0xffc4('0x3'));var BPromise=require(_0xffc4('0x4'));var rp=require(_0xffc4('0x5'));var fs=require('fs');var path=require(_0xffc4('0x6'));var rimraf=require('rimraf');var config=require(_0xffc4('0x7'));var attributes=require(_0xffc4('0x8'));module[_0xffc4('0x9')]=function(_0x2efa5f,_0x4cd469){return _0x2efa5f[_0xffc4('0xa')](_0xffc4('0xb'),attributes,{'tableName':'mail_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6c10599..2564691 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd98d=['interaction','create','attachments','originTo','originCc','UserId','User','name','Start','startRouting','util','moment','bluebird','randomstring','../../config/utils','rpc','../../config/environment','jayson/promise','http','redis','socket.io-emitter','./mailAccount.socket','register','then','info','MailAccount,\x20%s,\x20%s','request\x20sent','debug','MailAccount,\x20%s,\x20%s,\x20%s','stringify','code','error','message','result','catch','GetMailAccount','MailAccount','findAll','options','where','attributes','limit','include','map','model','ShowMailAccount','find','raw','NotifyMailAccount','body','mail','difference','keys','CmContact','rawAttributes','createdAt','CompanyId','ListId','isNil','from','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','CmList','MailServerOut','Smtp','account','Applications','List','applications','priority','asc','push','length','*,*,*,*','Contacts','defaults','List\x20not\x20found','contact','messageId','generate','subject','attach','format','YYYY-MM-DD\x20HH:mm:ss','MailInteraction','MailMessage','Messages','inReplyTo','Contact\x20not\x20found','update'];(function(_0x222563,_0x587767){var _0x25e55e=function(_0x2ec55c){while(--_0x2ec55c){_0x222563['push'](_0x222563['shift']());}};_0x25e55e(++_0x587767);}(_0xd98d,0x65));var _0xdd98=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xd98d[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require(_0xdd98('0x0'));var moment=require(_0xdd98('0x1'));var BPromise=require(_0xdd98('0x2'));var rs=require(_0xdd98('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xdd98('0x4'));var logger=require('../../config/logger')(_0xdd98('0x5'));var config=require(_0xdd98('0x6'));var jayson=require(_0xdd98('0x7'));var client=jayson['client'][_0xdd98('0x8')]({'port':0x232c});config[_0xdd98('0x9')]=_['defaults'](config[_0xdd98('0x9')],{'host':'localhost','port':0x18eb});var socket=require(_0xdd98('0xa'))(new Redis(config[_0xdd98('0x9')]));require(_0xdd98('0xb'))[_0xdd98('0xc')](socket);function respondWithRpcPromise(_0x654f13,_0x518214,_0x3a12fd){return new BPromise(function(_0x14362c,_0x1d95a5){return client['request'](_0x654f13,_0x3a12fd)[_0xdd98('0xd')](function(_0x59535c){logger[_0xdd98('0xe')](_0xdd98('0xf'),_0x518214,_0xdd98('0x10'));logger[_0xdd98('0x11')](_0xdd98('0x12'),_0x518214,'request\x20sent',JSON[_0xdd98('0x13')](_0x59535c));if(_0x59535c['error']){if(_0x59535c['error'][_0xdd98('0x14')]===0x1f4){logger[_0xdd98('0x15')](_0xdd98('0xf'),_0x518214,_0x59535c[_0xdd98('0x15')][_0xdd98('0x16')]);return _0x1d95a5(_0x59535c['error'][_0xdd98('0x16')]);}logger[_0xdd98('0x15')]('MailAccount,\x20%s,\x20%s',_0x518214,_0x59535c[_0xdd98('0x15')][_0xdd98('0x16')]);return _0x14362c(_0x59535c[_0xdd98('0x15')]['message']);}else{logger[_0xdd98('0xe')](_0xdd98('0xf'),_0x518214,'request\x20sent');_0x14362c(_0x59535c[_0xdd98('0x17')][_0xdd98('0x16')]);}})[_0xdd98('0x18')](function(_0x2bc524){logger['error']('MailAccount,\x20%s,\x20%s',_0x518214,_0x2bc524);_0x1d95a5(_0x2bc524);});});}exports[_0xdd98('0x19')]=function(_0xc74d5f){var _0x510b8a=this;return new Promise(function(_0x1adcb1,_0x481307){return db[_0xdd98('0x1a')][_0xdd98('0x1b')]({'raw':_0xc74d5f[_0xdd98('0x1c')]?_0xc74d5f[_0xdd98('0x1c')]['raw']===undefined?!![]:![]:!![],'where':_0xc74d5f[_0xdd98('0x1c')]?_0xc74d5f[_0xdd98('0x1c')][_0xdd98('0x1d')]||null:null,'attributes':_0xc74d5f['options']?_0xc74d5f[_0xdd98('0x1c')][_0xdd98('0x1e')]||null:null,'limit':_0xc74d5f['options']?_0xc74d5f[_0xdd98('0x1c')][_0xdd98('0x1f')]||null:null,'include':_0xc74d5f[_0xdd98('0x1c')]?_0xc74d5f[_0xdd98('0x1c')][_0xdd98('0x20')]?_[_0xdd98('0x21')](_0xc74d5f[_0xdd98('0x1c')][_0xdd98('0x20')],function(_0x278b49){return{'model':db[_0x278b49['model']],'as':_0x278b49['as'],'attributes':_0x278b49['attributes'],'include':_0x278b49[_0xdd98('0x20')]?_[_0xdd98('0x21')](_0x278b49[_0xdd98('0x20')],function(_0xc25338){return{'model':db[_0xc25338[_0xdd98('0x22')]],'as':_0xc25338['as'],'attributes':_0xc25338[_0xdd98('0x1e')],'include':_0xc25338[_0xdd98('0x20')]?_[_0xdd98('0x21')](_0xc25338['include'],function(_0xd6c20e){return{'model':db[_0xd6c20e[_0xdd98('0x22')]],'as':_0xd6c20e['as'],'attributes':_0xd6c20e[_0xdd98('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xdd98('0xd')](function(_0x5ac3e9){logger['info'](_0xdd98('0x19'),_0xc74d5f);logger[_0xdd98('0x11')](_0xdd98('0x19'),_0xc74d5f,JSON[_0xdd98('0x13')](_0x5ac3e9));_0x1adcb1(_0x5ac3e9);})[_0xdd98('0x18')](function(_0xf66bdd){logger[_0xdd98('0x15')]('GetMailAccount',_0xf66bdd[_0xdd98('0x16')],_0xc74d5f);_0x481307(_0x510b8a['error'](0x1f4,_0xf66bdd[_0xdd98('0x16')]));});});};exports[_0xdd98('0x23')]=function(_0x31c5cd){var _0x6167c5=this;return new Promise(function(_0x5f56c8,_0x342ced){return db[_0xdd98('0x1a')][_0xdd98('0x24')]({'raw':_0x31c5cd['options']?_0x31c5cd['options'][_0xdd98('0x25')]===undefined?!![]:![]:!![],'where':_0x31c5cd['options']?_0x31c5cd[_0xdd98('0x1c')]['where']||null:null,'attributes':_0x31c5cd[_0xdd98('0x1c')]?_0x31c5cd[_0xdd98('0x1c')][_0xdd98('0x1e')]||null:null,'include':_0x31c5cd[_0xdd98('0x1c')]?_0x31c5cd['options'][_0xdd98('0x20')]?_[_0xdd98('0x21')](_0x31c5cd[_0xdd98('0x1c')][_0xdd98('0x20')],function(_0x1fb347){return{'model':db[_0x1fb347[_0xdd98('0x22')]],'as':_0x1fb347['as'],'attributes':_0x1fb347[_0xdd98('0x1e')],'include':_0x1fb347[_0xdd98('0x20')]?_['map'](_0x1fb347[_0xdd98('0x20')],function(_0x393266){return{'model':db[_0x393266[_0xdd98('0x22')]],'as':_0x393266['as'],'attributes':_0x393266[_0xdd98('0x1e')],'include':_0x393266['include']?_[_0xdd98('0x21')](_0x393266[_0xdd98('0x20')],function(_0x391c8b){return{'model':db[_0x391c8b['model']],'as':_0x391c8b['as'],'attributes':_0x391c8b['attributes']};}):[]};}):[]};}):[]:[]})[_0xdd98('0xd')](function(_0x4a78e0){logger[_0xdd98('0xe')]('ShowMailAccount',_0x31c5cd);logger[_0xdd98('0x11')](_0xdd98('0x23'),_0x31c5cd,JSON[_0xdd98('0x13')](_0x4a78e0));_0x5f56c8(_0x4a78e0);})[_0xdd98('0x18')](function(_0x27b84c){logger[_0xdd98('0x15')](_0xdd98('0x23'),_0x27b84c[_0xdd98('0x16')],_0x31c5cd);_0x342ced(_0x6167c5[_0xdd98('0x15')](0x1f4,_0x27b84c[_0xdd98('0x16')]));});});};exports[_0xdd98('0x26')]=function(_0x23cda3){var _0x48ee7e=this;return new Promise(function(_0x1878c0,_0x8c7764){var _0x1495f4={'body':_0x23cda3[_0xdd98('0x27')],'channel':_0xdd98('0x28')};var _0x272a5a=_[_0xdd98('0x29')](_[_0xdd98('0x2a')](db[_0xdd98('0x2b')][_0xdd98('0x2c')]),[_0xdd98('0x2d'),'updatedAt',_0xdd98('0x2e'),_0xdd98('0x2f')]);var _0x33d5e3=![];if(_0x23cda3['body']['id']){delete _0x23cda3['body']['id'];}if(_[_0xdd98('0x30')](_0x23cda3[_0xdd98('0x27')][_0xdd98('0x31')])){return _0x8c7764(_0x48ee7e[_0xdd98('0x15')](0x1f4,'from\x20is\x20mandatory'));}if(_['isNil'](_0x23cda3['body'][_0xdd98('0x27')])||_0x23cda3[_0xdd98('0x27')][_0xdd98('0x27')]===''){return _0x8c7764(_0x48ee7e[_0xdd98('0x15')](0x1f4,_0xdd98('0x32')));}if(_[_0xdd98('0x30')](_0x23cda3['body'][_0xdd98('0x33')])){return _0x8c7764(_0x48ee7e[_0xdd98('0x15')](0x1f4,'mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x272a5a));}if(!_['includes'](_0x272a5a,_0x23cda3['body'][_0xdd98('0x33')])){return _0x8c7764(_0x48ee7e['error'](0x1f4,_0xdd98('0x34')+_0x272a5a));}var _0x1910a5={};_0x1910a5[_0x23cda3[_0xdd98('0x27')]['mapKey']]=_0x23cda3[_0xdd98('0x27')][_0xdd98('0x31')];return db[_0xdd98('0x1a')]['find']({'where':{'id':_0x23cda3['account']['id']},'include':[{'model':db[_0xdd98('0x35')],'as':'List','include':[{'model':db[_0xdd98('0x2b')],'as':'Contacts','where':_0x1910a5,'limit':0x1,'order':[['updatedAt','DESC']]}]},{'model':db['MailApplication'],'as':'Applications'},{'model':db[_0xdd98('0x36')],'as':_0xdd98('0x37')}]})[_0xdd98('0xd')](function(_0x1a2098){if(_0x1a2098&&_0x1a2098['List']){var _0x28394b=_0x1a2098['get']({'plain':!![]});_0x1495f4[_0xdd98('0x38')]=_['omit'](_0x28394b,[_0xdd98('0x39'),_0xdd98('0x3a')]);_0x1495f4[_0xdd98('0x3b')]=_0x28394b[_0xdd98('0x39')];_0x1495f4['list']=_0x28394b[_0xdd98('0x3a')];_0x1495f4[_0xdd98('0x3b')]=_['orderBy'](_0x1495f4[_0xdd98('0x3b')],[_0xdd98('0x3c')],[_0xdd98('0x3d')]);if(_0x1495f4[_0xdd98('0x38')]&&_0x1495f4[_0xdd98('0x38')]['autoclose']){_0x1495f4[_0xdd98('0x3b')][_0xdd98('0x3e')]({'id':0x0,'priority':_0x1495f4[_0xdd98('0x3b')][_0xdd98('0x3f')]+0x1,'app':'close','appdata':'autoclose','interval':_0xdd98('0x40')});}if(_0x1495f4[_0xdd98('0x38')]['Applications']){delete _0x1495f4['account'][_0xdd98('0x39')];}if(_0x1495f4[_0xdd98('0x38')][_0xdd98('0x3a')]){delete _0x1495f4[_0xdd98('0x38')][_0xdd98('0x3a')];}if(_0x28394b['List'][_0xdd98('0x41')][_0xdd98('0x3f')]){return _0x28394b[_0xdd98('0x3a')][_0xdd98('0x41')][0x0];}var _0x5d5010=_[_0xdd98('0x42')](_0x23cda3['body'],{'firstName':_0x23cda3['body'][_0xdd98('0x31')],'ListId':_0x28394b['ListId']});_0x5d5010[_0x23cda3[_0xdd98('0x27')][_0xdd98('0x33')]]=_0x23cda3[_0xdd98('0x27')]['from'];return db[_0xdd98('0x2b')]['create'](_0x5d5010);}else{throw new Error(_0xdd98('0x43'));}})[_0xdd98('0xd')](function(_0x48449f){_0x1495f4[_0xdd98('0x44')]=_0x48449f;if(_0x48449f){if(!_0x23cda3['body'][_0xdd98('0x16')]['messageId']){_0x23cda3['body']['message'][_0xdd98('0x45')]=rs[_0xdd98('0x46')]()+'\x20'+_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')][_0xdd98('0x31')];}var _0x414c26={'ContactId':_0x48449f['id'],'MailAccountId':_0x23cda3[_0xdd98('0x38')]['id'],'inReplyTo':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')]['messageId'],'to':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')][_0xdd98('0x31')],'cc':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')]['cc'],'subject':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')][_0xdd98('0x47')],'attach':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')][_0xdd98('0x48')],'lastMsgAt':moment()[_0xdd98('0x49')](_0xdd98('0x4a')),'lastMsgDirection':'in','lastMsgBody':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x27')]};return db[_0xdd98('0x4b')][_0xdd98('0x24')]({'where':{'closed':![],'MailAccountId':_0x23cda3['account']['id']},'include':[{'model':db[_0xdd98('0x4c')],'as':_0xdd98('0x4d'),'attributes':[_0xdd98('0x45')],'where':{'messageId':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')][_0xdd98('0x4e')]}}]})[_0xdd98('0xd')](function(_0x5c3fad){if(_0x5c3fad){return[_0x5c3fad,![]];}return db[_0xdd98('0x4b')]['create'](_0x414c26)[_0xdd98('0xd')](function(_0x4078d8){return[_0x4078d8,!![]];});});}else{throw new Error(_0xdd98('0x4f'));}})['spread'](function(_0x182842,_0x26055f){if(_0x182842){_0x33d5e3=_0x26055f;if(!_0x26055f){return _0x182842[_0xdd98('0x50')]({'inReplyTo':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')]['messageId'],'to':_0x23cda3[_0xdd98('0x27')]['message'][_0xdd98('0x31')],'cc':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')]['cc'],'subject':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')][_0xdd98('0x47')],'attach':_0x182842[_0xdd98('0x48')]?_0x182842[_0xdd98('0x48')]:_0x23cda3[_0xdd98('0x27')]['message'][_0xdd98('0x48')],'substatus':null,'substatusAt':moment()[_0xdd98('0x49')](_0xdd98('0x4a')),'lastMsgAt':moment()[_0xdd98('0x49')](_0xdd98('0x4a')),'lastMsgDirection':'in','lastMsgBody':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x27')]});}else{return _0x182842;}}})[_0xdd98('0xd')](function(_0x153ca5){_0x1495f4[_0xdd98('0x51')]=_0x153ca5['get']({'plain':!![]});_0x1495f4[_0xdd98('0x51')]['created']=_0x33d5e3;return db[_0xdd98('0x4c')][_0xdd98('0x52')]({'body':_0x23cda3['body'][_0xdd98('0x27')],'MailAccountId':_0x23cda3[_0xdd98('0x38')]['id'],'MailInteractionId':_0x153ca5['id'],'direction':'in','ContactId':_0x1495f4[_0xdd98('0x44')]['id'],'messageId':_0x23cda3[_0xdd98('0x27')]['message'][_0xdd98('0x45')],'from':_0x23cda3[_0xdd98('0x27')]['message'][_0xdd98('0x31')],'to':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')]['to'],'cc':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')]['cc'],'subject':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')]['subject'],'attach':_0x23cda3[_0xdd98('0x27')]['message'][_0xdd98('0x48')],'Attachments':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')][_0xdd98('0x53')],'originTo':_0x23cda3[_0xdd98('0x27')]['message'][_0xdd98('0x54')],'originCc':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')][_0xdd98('0x55')],'bcc':_0x23cda3[_0xdd98('0x27')][_0xdd98('0x16')]['bcc']},{'include':[{'model':db['Attachment'],'as':'Attachments'}]});})['then'](function(_0x3b0054){_0x1495f4[_0xdd98('0x16')]=_0x3b0054;if(_0x1495f4['interaction'][_0xdd98('0x56')]){return db[_0xdd98('0x57')][_0xdd98('0x24')]({'attributes':['id',_0xdd98('0x58')],'where':{'id':_0x1495f4[_0xdd98('0x51')][_0xdd98('0x56')]}})[_0xdd98('0xd')](function(_0x17598d){if(_0x17598d){_0x1495f4['applications']['unshift']({'id':0x0,'priority':0x0,'app':'agent','appdata':_0x17598d[_0xdd98('0x58')]+','+(_0x1495f4[_0xdd98('0x38')]['waitForTheAssignedAgent']||0xa),'interval':_0xdd98('0x40')});}return respondWithRpcPromise(_0xdd98('0x59'),'startRouting',_0x1495f4);});}return respondWithRpcPromise(_0xdd98('0x59'),_0xdd98('0x5a'),_0x1495f4);})[_0xdd98('0xd')](function(_0x3bfa81){_0x1878c0(_0x3bfa81);})['catch'](function(_0x3e680c){_0x8c7764(_0x48ee7e[_0xdd98('0x15')](0x1f4,_0x3e680c[_0xdd98('0x16')]));});});};
\ No newline at end of file
+var _0x49ec=['map','ShowMailAccount','NotifyMailAccount','difference','keys','rawAttributes','createdAt','updatedAt','ListId','body','isNil','from','from\x20is\x20mandatory','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','account','List','DESC','Applications','get','omit','applications','list','orderBy','priority','autoclose','Contacts','length','defaults','CmContact','create','List\x20not\x20found','contact','messageId','subject','attach','format','YYYY-MM-DD\x20HH:mm:ss','MailInteraction','MailMessage','Messages','Contact\x20not\x20found','spread','interaction','created','attachments','originTo','originCc','bcc','Attachments','UserId','User','name','unshift','agent','*,*,*,*','Start','startRouting','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','socket.io-emitter','register','request','then','info','MailAccount,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','result','catch','GetMailAccount','MailAccount','options','where','limit','attributes','include','model','find','raw'];(function(_0x256bcf,_0x32e334){var _0x1d7ae1=function(_0x42fc4d){while(--_0x42fc4d){_0x256bcf['push'](_0x256bcf['shift']());}};_0x1d7ae1(++_0x32e334);}(_0x49ec,0x15c));var _0xc49e=function(_0x20d779,_0x121367){_0x20d779=_0x20d779-0x0;var _0x433f52=_0x49ec[_0x20d779];return _0x433f52;};'use strict';var _=require('lodash');var util=require(_0xc49e('0x0'));var moment=require(_0xc49e('0x1'));var BPromise=require(_0xc49e('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xc49e('0x3'));var db=require(_0xc49e('0x4'))['db'];var utils=require(_0xc49e('0x5'));var logger=require(_0xc49e('0x6'))(_0xc49e('0x7'));var config=require(_0xc49e('0x8'));var jayson=require(_0xc49e('0x9'));var client=jayson[_0xc49e('0xa')][_0xc49e('0xb')]({'port':0x232c});config[_0xc49e('0xc')]=_['defaults'](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0xc49e('0xd'))(new Redis(config[_0xc49e('0xc')]));require('./mailAccount.socket')[_0xc49e('0xe')](socket);function respondWithRpcPromise(_0x3a8650,_0xf107f6,_0xc8a7c7){return new BPromise(function(_0x4c76ba,_0x2b25e6){return client[_0xc49e('0xf')](_0x3a8650,_0xc8a7c7)[_0xc49e('0x10')](function(_0x20f573){logger[_0xc49e('0x11')](_0xc49e('0x12'),_0xf107f6,_0xc49e('0x13'));logger[_0xc49e('0x14')]('MailAccount,\x20%s,\x20%s,\x20%s',_0xf107f6,_0xc49e('0x13'),JSON[_0xc49e('0x15')](_0x20f573));if(_0x20f573[_0xc49e('0x16')]){if(_0x20f573['error']['code']===0x1f4){logger[_0xc49e('0x16')](_0xc49e('0x12'),_0xf107f6,_0x20f573[_0xc49e('0x16')]['message']);return _0x2b25e6(_0x20f573[_0xc49e('0x16')][_0xc49e('0x17')]);}logger[_0xc49e('0x16')](_0xc49e('0x12'),_0xf107f6,_0x20f573['error'][_0xc49e('0x17')]);return _0x4c76ba(_0x20f573[_0xc49e('0x16')][_0xc49e('0x17')]);}else{logger[_0xc49e('0x11')](_0xc49e('0x12'),_0xf107f6,_0xc49e('0x13'));_0x4c76ba(_0x20f573[_0xc49e('0x18')][_0xc49e('0x17')]);}})[_0xc49e('0x19')](function(_0x5f130c){logger[_0xc49e('0x16')](_0xc49e('0x12'),_0xf107f6,_0x5f130c);_0x2b25e6(_0x5f130c);});});}exports[_0xc49e('0x1a')]=function(_0x1c9260){var _0x24ac26=this;return new Promise(function(_0x29f375,_0x4fe115){return db[_0xc49e('0x1b')]['findAll']({'raw':_0x1c9260[_0xc49e('0x1c')]?_0x1c9260[_0xc49e('0x1c')]['raw']===undefined?!![]:![]:!![],'where':_0x1c9260[_0xc49e('0x1c')]?_0x1c9260[_0xc49e('0x1c')][_0xc49e('0x1d')]||null:null,'attributes':_0x1c9260[_0xc49e('0x1c')]?_0x1c9260['options']['attributes']||null:null,'limit':_0x1c9260[_0xc49e('0x1c')]?_0x1c9260[_0xc49e('0x1c')][_0xc49e('0x1e')]||null:null,'include':_0x1c9260[_0xc49e('0x1c')]?_0x1c9260[_0xc49e('0x1c')]['include']?_['map'](_0x1c9260[_0xc49e('0x1c')]['include'],function(_0x5af450){return{'model':db[_0x5af450['model']],'as':_0x5af450['as'],'attributes':_0x5af450[_0xc49e('0x1f')],'include':_0x5af450[_0xc49e('0x20')]?_['map'](_0x5af450[_0xc49e('0x20')],function(_0x3887e9){return{'model':db[_0x3887e9['model']],'as':_0x3887e9['as'],'attributes':_0x3887e9[_0xc49e('0x1f')],'include':_0x3887e9[_0xc49e('0x20')]?_['map'](_0x3887e9[_0xc49e('0x20')],function(_0x48f845){return{'model':db[_0x48f845[_0xc49e('0x21')]],'as':_0x48f845['as'],'attributes':_0x48f845['attributes']};}):[]};}):[]};}):[]:[]})[_0xc49e('0x10')](function(_0x243f16){logger[_0xc49e('0x11')](_0xc49e('0x1a'),_0x1c9260);logger[_0xc49e('0x14')]('GetMailAccount',_0x1c9260,JSON['stringify'](_0x243f16));_0x29f375(_0x243f16);})[_0xc49e('0x19')](function(_0x261464){logger[_0xc49e('0x16')]('GetMailAccount',_0x261464[_0xc49e('0x17')],_0x1c9260);_0x4fe115(_0x24ac26['error'](0x1f4,_0x261464[_0xc49e('0x17')]));});});};exports['ShowMailAccount']=function(_0x444afc){var _0x129a00=this;return new Promise(function(_0x59531d,_0x49a003){return db[_0xc49e('0x1b')][_0xc49e('0x22')]({'raw':_0x444afc[_0xc49e('0x1c')]?_0x444afc[_0xc49e('0x1c')][_0xc49e('0x23')]===undefined?!![]:![]:!![],'where':_0x444afc[_0xc49e('0x1c')]?_0x444afc[_0xc49e('0x1c')][_0xc49e('0x1d')]||null:null,'attributes':_0x444afc[_0xc49e('0x1c')]?_0x444afc[_0xc49e('0x1c')][_0xc49e('0x1f')]||null:null,'include':_0x444afc[_0xc49e('0x1c')]?_0x444afc[_0xc49e('0x1c')]['include']?_[_0xc49e('0x24')](_0x444afc[_0xc49e('0x1c')]['include'],function(_0x322273){return{'model':db[_0x322273[_0xc49e('0x21')]],'as':_0x322273['as'],'attributes':_0x322273[_0xc49e('0x1f')],'include':_0x322273['include']?_['map'](_0x322273['include'],function(_0x24ccfe){return{'model':db[_0x24ccfe['model']],'as':_0x24ccfe['as'],'attributes':_0x24ccfe[_0xc49e('0x1f')],'include':_0x24ccfe[_0xc49e('0x20')]?_[_0xc49e('0x24')](_0x24ccfe[_0xc49e('0x20')],function(_0x4fa603){return{'model':db[_0x4fa603[_0xc49e('0x21')]],'as':_0x4fa603['as'],'attributes':_0x4fa603[_0xc49e('0x1f')]};}):[]};}):[]};}):[]:[]})[_0xc49e('0x10')](function(_0x3c7efe){logger[_0xc49e('0x11')](_0xc49e('0x25'),_0x444afc);logger[_0xc49e('0x14')](_0xc49e('0x25'),_0x444afc,JSON['stringify'](_0x3c7efe));_0x59531d(_0x3c7efe);})['catch'](function(_0x3eb021){logger[_0xc49e('0x16')](_0xc49e('0x25'),_0x3eb021[_0xc49e('0x17')],_0x444afc);_0x49a003(_0x129a00[_0xc49e('0x16')](0x1f4,_0x3eb021[_0xc49e('0x17')]));});});};exports[_0xc49e('0x26')]=function(_0x55e3c1){var _0x5f4f61=this;return new Promise(function(_0x106f92,_0x5bf038){var _0x1a279b={'body':_0x55e3c1['body'],'channel':'mail'};var _0x6967a6=_[_0xc49e('0x27')](_[_0xc49e('0x28')](db['CmContact'][_0xc49e('0x29')]),[_0xc49e('0x2a'),_0xc49e('0x2b'),'CompanyId',_0xc49e('0x2c')]);var _0x5f18ae=![];if(_0x55e3c1[_0xc49e('0x2d')]['id']){delete _0x55e3c1['body']['id'];}if(_[_0xc49e('0x2e')](_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x2f')])){return _0x5bf038(_0x5f4f61[_0xc49e('0x16')](0x1f4,_0xc49e('0x30')));}if(_[_0xc49e('0x2e')](_0x55e3c1['body'][_0xc49e('0x2d')])||_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x2d')]===''){return _0x5bf038(_0x5f4f61[_0xc49e('0x16')](0x1f4,_0xc49e('0x31')));}if(_[_0xc49e('0x2e')](_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x32')])){return _0x5bf038(_0x5f4f61[_0xc49e('0x16')](0x1f4,_0xc49e('0x33')+_0x6967a6));}if(!_[_0xc49e('0x34')](_0x6967a6,_0x55e3c1['body'][_0xc49e('0x32')])){return _0x5bf038(_0x5f4f61[_0xc49e('0x16')](0x1f4,'mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x6967a6));}var _0x4b2987={};_0x4b2987[_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x32')]]=_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x2f')];return db[_0xc49e('0x1b')][_0xc49e('0x22')]({'where':{'id':_0x55e3c1[_0xc49e('0x35')]['id']},'include':[{'model':db['CmList'],'as':_0xc49e('0x36'),'include':[{'model':db['CmContact'],'as':'Contacts','where':_0x4b2987,'limit':0x1,'order':[[_0xc49e('0x2b'),_0xc49e('0x37')]]}]},{'model':db['MailApplication'],'as':_0xc49e('0x38')},{'model':db['MailServerOut'],'as':'Smtp'}]})[_0xc49e('0x10')](function(_0x1a7ebd){if(_0x1a7ebd&&_0x1a7ebd[_0xc49e('0x36')]){var _0x2a72ab=_0x1a7ebd[_0xc49e('0x39')]({'plain':!![]});_0x1a279b[_0xc49e('0x35')]=_[_0xc49e('0x3a')](_0x2a72ab,[_0xc49e('0x38'),_0xc49e('0x36')]);_0x1a279b[_0xc49e('0x3b')]=_0x2a72ab[_0xc49e('0x38')];_0x1a279b[_0xc49e('0x3c')]=_0x2a72ab[_0xc49e('0x36')];_0x1a279b[_0xc49e('0x3b')]=_[_0xc49e('0x3d')](_0x1a279b[_0xc49e('0x3b')],[_0xc49e('0x3e')],['asc']);if(_0x1a279b[_0xc49e('0x35')]&&_0x1a279b['account'][_0xc49e('0x3f')]){_0x1a279b[_0xc49e('0x3b')]['push']({'id':0x0,'priority':_0x1a279b[_0xc49e('0x3b')]['length']+0x1,'app':'close','appdata':'autoclose','interval':'*,*,*,*'});}if(_0x1a279b[_0xc49e('0x35')]['Applications']){delete _0x1a279b[_0xc49e('0x35')][_0xc49e('0x38')];}if(_0x1a279b[_0xc49e('0x35')]['List']){delete _0x1a279b[_0xc49e('0x35')][_0xc49e('0x36')];}if(_0x2a72ab[_0xc49e('0x36')][_0xc49e('0x40')][_0xc49e('0x41')]){return _0x2a72ab['List'][_0xc49e('0x40')][0x0];}var _0x4e7d50=_[_0xc49e('0x42')](_0x55e3c1[_0xc49e('0x2d')],{'firstName':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x2f')],'ListId':_0x2a72ab[_0xc49e('0x2c')]});_0x4e7d50[_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x32')]]=_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x2f')];return db[_0xc49e('0x43')][_0xc49e('0x44')](_0x4e7d50);}else{throw new Error(_0xc49e('0x45'));}})[_0xc49e('0x10')](function(_0x5251bf){_0x1a279b[_0xc49e('0x46')]=_0x5251bf;if(_0x5251bf){if(!_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x17')][_0xc49e('0x47')]){_0x55e3c1[_0xc49e('0x2d')]['message'][_0xc49e('0x47')]=rs['generate']()+'\x20'+_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x17')][_0xc49e('0x2f')];}var _0x80f574={'ContactId':_0x5251bf['id'],'MailAccountId':_0x55e3c1[_0xc49e('0x35')]['id'],'inReplyTo':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x17')][_0xc49e('0x47')],'to':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x17')][_0xc49e('0x2f')],'cc':_0x55e3c1[_0xc49e('0x2d')]['message']['cc'],'subject':_0x55e3c1[_0xc49e('0x2d')]['message'][_0xc49e('0x48')],'attach':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x17')][_0xc49e('0x49')],'lastMsgAt':moment()[_0xc49e('0x4a')](_0xc49e('0x4b')),'lastMsgDirection':'in','lastMsgBody':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x2d')]};return db[_0xc49e('0x4c')]['find']({'where':{'closed':![],'MailAccountId':_0x55e3c1[_0xc49e('0x35')]['id']},'include':[{'model':db[_0xc49e('0x4d')],'as':_0xc49e('0x4e'),'attributes':[_0xc49e('0x47')],'where':{'messageId':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x17')]['inReplyTo']}}]})[_0xc49e('0x10')](function(_0x2ad865){if(_0x2ad865){return[_0x2ad865,![]];}return db[_0xc49e('0x4c')][_0xc49e('0x44')](_0x80f574)[_0xc49e('0x10')](function(_0x2cff35){return[_0x2cff35,!![]];});});}else{throw new Error(_0xc49e('0x4f'));}})[_0xc49e('0x50')](function(_0x1910bc,_0x5c586f){if(_0x1910bc){_0x5f18ae=_0x5c586f;if(!_0x5c586f){return _0x1910bc['update']({'inReplyTo':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x17')][_0xc49e('0x47')],'to':_0x55e3c1[_0xc49e('0x2d')]['message']['from'],'cc':_0x55e3c1['body'][_0xc49e('0x17')]['cc'],'subject':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x17')][_0xc49e('0x48')],'attach':_0x1910bc['attach']?_0x1910bc['attach']:_0x55e3c1[_0xc49e('0x2d')]['message'][_0xc49e('0x49')],'substatus':null,'substatusAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'lastMsgAt':moment()[_0xc49e('0x4a')]('YYYY-MM-DD\x20HH:mm:ss'),'lastMsgDirection':'in','lastMsgBody':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x2d')]});}else{return _0x1910bc;}}})[_0xc49e('0x10')](function(_0x15f21a){_0x1a279b[_0xc49e('0x51')]=_0x15f21a[_0xc49e('0x39')]({'plain':!![]});_0x1a279b['interaction'][_0xc49e('0x52')]=_0x5f18ae;return db['MailMessage'][_0xc49e('0x44')]({'body':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x2d')],'MailAccountId':_0x55e3c1[_0xc49e('0x35')]['id'],'MailInteractionId':_0x15f21a['id'],'direction':'in','ContactId':_0x1a279b[_0xc49e('0x46')]['id'],'messageId':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x17')]['messageId'],'from':_0x55e3c1['body'][_0xc49e('0x17')][_0xc49e('0x2f')],'to':_0x55e3c1['body'][_0xc49e('0x17')]['to'],'cc':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x17')]['cc'],'subject':_0x55e3c1['body'][_0xc49e('0x17')][_0xc49e('0x48')],'attach':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x17')]['attach'],'Attachments':_0x55e3c1[_0xc49e('0x2d')][_0xc49e('0x17')][_0xc49e('0x53')],'originTo':_0x55e3c1['body'][_0xc49e('0x17')][_0xc49e('0x54')],'originCc':_0x55e3c1['body']['message'][_0xc49e('0x55')],'bcc':_0x55e3c1['body'][_0xc49e('0x17')][_0xc49e('0x56')]},{'include':[{'model':db['Attachment'],'as':_0xc49e('0x57')}]});})['then'](function(_0x2f27dd){_0x1a279b[_0xc49e('0x17')]=_0x2f27dd;if(_0x1a279b['interaction'][_0xc49e('0x58')]){return db[_0xc49e('0x59')][_0xc49e('0x22')]({'attributes':['id',_0xc49e('0x5a')],'where':{'id':_0x1a279b[_0xc49e('0x51')][_0xc49e('0x58')]}})[_0xc49e('0x10')](function(_0x5e07c0){if(_0x5e07c0){_0x1a279b[_0xc49e('0x3b')][_0xc49e('0x5b')]({'id':0x0,'priority':0x0,'app':_0xc49e('0x5c'),'appdata':_0x5e07c0[_0xc49e('0x5a')]+','+(_0x1a279b[_0xc49e('0x35')]['waitForTheAssignedAgent']||0xa),'interval':_0xc49e('0x5d')});}return respondWithRpcPromise(_0xc49e('0x5e'),_0xc49e('0x5f'),_0x1a279b);});}return respondWithRpcPromise(_0xc49e('0x5e'),_0xc49e('0x5f'),_0x1a279b);})[_0xc49e('0x10')](function(_0x45d3db){_0x106f92(_0x45d3db);})[_0xc49e('0x19')](function(_0x10a11d){_0x5bf038(_0x5f4f61[_0xc49e('0x16')](0x1f4,_0x10a11d[_0xc49e('0x17')]));});});};
\ No newline at end of file
index d93c9b3..2df7071 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1626=['register','length','mailAccount:','./mailAccount.events','remove','update','emit','removeListener'];(function(_0x4b4517,_0x5dbf6a){var _0x48278b=function(_0x4592ea){while(--_0x4592ea){_0x4b4517['push'](_0x4b4517['shift']());}};_0x48278b(++_0x5dbf6a);}(_0x1626,0xc3));var _0x6162=function(_0x146484,_0x27a7f0){_0x146484=_0x146484-0x0;var _0x4c7aa3=_0x1626[_0x146484];return _0x4c7aa3;};'use strict';var MailAccountEvents=require(_0x6162('0x0'));var events=['save',_0x6162('0x1'),_0x6162('0x2')];function createListener(_0x7209,_0x27fa52){return function(_0x235949){_0x27fa52[_0x6162('0x3')](_0x7209,_0x235949);};}function removeListener(_0xcc5e78,_0x5236c2){return function(){MailAccountEvents[_0x6162('0x4')](_0xcc5e78,_0x5236c2);};}exports[_0x6162('0x5')]=function(_0x52ef71){for(var _0x4a9497=0x0,_0x271e7e=events[_0x6162('0x6')];_0x4a9497<_0x271e7e;_0x4a9497++){var _0x28d3e4=events[_0x4a9497];var _0x46cd86=createListener(_0x6162('0x7')+_0x28d3e4,_0x52ef71);MailAccountEvents['on'](_0x28d3e4,_0x46cd86);}};
\ No newline at end of file
+var _0xb7db=['length','mailAccount:','./mailAccount.events','save','remove','emit','removeListener','register'];(function(_0x47d773,_0x6ff2af){var _0x8d01a3=function(_0x181f13){while(--_0x181f13){_0x47d773['push'](_0x47d773['shift']());}};_0x8d01a3(++_0x6ff2af);}(_0xb7db,0x19a));var _0xbb7d=function(_0x20de1f,_0x18ff3f){_0x20de1f=_0x20de1f-0x0;var _0x22a923=_0xb7db[_0x20de1f];return _0x22a923;};'use strict';var MailAccountEvents=require(_0xbb7d('0x0'));var events=[_0xbb7d('0x1'),_0xbb7d('0x2'),'update'];function createListener(_0x32007f,_0x5f4bb0){return function(_0x50363c){_0x5f4bb0[_0xbb7d('0x3')](_0x32007f,_0x50363c);};}function removeListener(_0xaab04d,_0x317292){return function(){MailAccountEvents[_0xbb7d('0x4')](_0xaab04d,_0x317292);};}exports[_0xbb7d('0x5')]=function(_0x224445){for(var _0x2445e8=0x0,_0x7b5292=events[_0xbb7d('0x6')];_0x2445e8<_0x7b5292;_0x2445e8++){var _0xb49953=events[_0x2445e8];var _0x285ff5=createListener(_0xbb7d('0x7')+_0xb49953,_0x224445);MailAccountEvents['on'](_0xb49953,_0x285ff5);}};
\ No newline at end of file
index 6152c5c..b7afc77 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6a24=['util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./mailApplication.controller','get','isAuthenticated','show','update','/:id','destroy','multer'];(function(_0x20c304,_0x2fd01c){var _0x700473=function(_0x1e145e){while(--_0x1e145e){_0x20c304['push'](_0x20c304['shift']());}};_0x700473(++_0x2fd01c);}(_0x6a24,0xd1));var _0x46a2=function(_0x47b4dc,_0x4e9ad4){_0x47b4dc=_0x47b4dc-0x0;var _0x1dff60=_0x6a24[_0x47b4dc];return _0x1dff60;};'use strict';var multer=require(_0x46a2('0x0'));var util=require(_0x46a2('0x1'));var path=require('path');var timeout=require(_0x46a2('0x2'));var express=require(_0x46a2('0x3'));var router=express[_0x46a2('0x4')]();var auth=require(_0x46a2('0x5'));var interaction=require(_0x46a2('0x6'));var config=require('../../config/environment');var controller=require(_0x46a2('0x7'));router[_0x46a2('0x8')]('/:id',auth[_0x46a2('0x9')](),controller[_0x46a2('0xa')]);router['put']('/:id',auth[_0x46a2('0x9')](),controller[_0x46a2('0xb')]);router['delete'](_0x46a2('0xc'),auth['isAuthenticated'](),controller[_0x46a2('0xd')]);module['exports']=router;
\ No newline at end of file
+var _0x4d9e=['update','delete','destroy','exports','multer','connect-timeout','Router','../../components/interaction/service','../../config/environment','get','/:id','isAuthenticated','show','put'];(function(_0x3cfaad,_0x147050){var _0x1081c3=function(_0x10d600){while(--_0x10d600){_0x3cfaad['push'](_0x3cfaad['shift']());}};_0x1081c3(++_0x147050);}(_0x4d9e,0x18c));var _0xe4d9=function(_0x10a563,_0x815a77){_0x10a563=_0x10a563-0x0;var _0x3a2109=_0x4d9e[_0x10a563];return _0x3a2109;};'use strict';var multer=require(_0xe4d9('0x0'));var util=require('util');var path=require('path');var timeout=require(_0xe4d9('0x1'));var express=require('express');var router=express[_0xe4d9('0x2')]();var auth=require('../../components/auth/service');var interaction=require(_0xe4d9('0x3'));var config=require(_0xe4d9('0x4'));var controller=require('./mailApplication.controller');router[_0xe4d9('0x5')](_0xe4d9('0x6'),auth[_0xe4d9('0x7')](),controller[_0xe4d9('0x8')]);router[_0xe4d9('0x9')](_0xe4d9('0x6'),auth['isAuthenticated'](),controller[_0xe4d9('0xa')]);router[_0xe4d9('0xb')](_0xe4d9('0x6'),auth[_0xe4d9('0x7')](),controller[_0xe4d9('0xc')]);module[_0xe4d9('0xd')]=router;
\ No newline at end of file
index 62daf18..cae54ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7aa0=['*,*,*,*','sequelize','exports','INTEGER','STRING'];(function(_0x164eca,_0x555e28){var _0x2ce562=function(_0x148ca6){while(--_0x148ca6){_0x164eca['push'](_0x164eca['shift']());}};_0x2ce562(++_0x555e28);}(_0x7aa0,0xa1));var _0x07aa=function(_0x218426,_0x95fcc7){_0x218426=_0x218426-0x0;var _0x25f311=_0x7aa0[_0x218426];return _0x25f311;};'use strict';var Sequelize=require(_0x07aa('0x0'));module[_0x07aa('0x1')]={'priority':{'type':Sequelize[_0x07aa('0x2')],'allowNull':![]},'app':{'type':Sequelize[_0x07aa('0x3')],'allowNull':![],'defaultValue':'noop'},'appdata':{'type':Sequelize['TEXT']()},'description':{'type':Sequelize[_0x07aa('0x3')]},'interval':{'type':Sequelize[_0x07aa('0x3')],'defaultValue':_0x07aa('0x4')}};
\ No newline at end of file
+var _0x023e=['*,*,*,*','sequelize','TEXT','STRING'];(function(_0x540eac,_0x2c34be){var _0x27146d=function(_0xea786){while(--_0xea786){_0x540eac['push'](_0x540eac['shift']());}};_0x27146d(++_0x2c34be);}(_0x023e,0xc5));var _0xe023=function(_0x1d9153,_0x51bab0){_0x1d9153=_0x1d9153-0x0;var _0x4c6aaf=_0x023e[_0x1d9153];return _0x4c6aaf;};'use strict';var Sequelize=require(_0xe023('0x0'));module['exports']={'priority':{'type':Sequelize['INTEGER'],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'noop'},'appdata':{'type':Sequelize[_0xe023('0x1')]()},'description':{'type':Sequelize[_0xe023('0x2')]},'interval':{'type':Sequelize['STRING'],'defaultValue':_0xe023('0x3')}};
\ No newline at end of file
index ebfdcf1..3cdd8a2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x87e5=['end','error','name','send','params','model','MailApplication','rawAttributes','query','keys','filters','intersection','attributes','fields','length','includeAll','include','merge','find','catch','update','body','html-pdf','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','offset','limit','set','Content-Range','apply','reject','save','then','destroy'];(function(_0x41447d,_0x4d7555){var _0x4ae3f1=function(_0x1c8170){while(--_0x1c8170){_0x41447d['push'](_0x41447d['shift']());}};_0x4ae3f1(++_0x4d7555);}(_0x87e5,0xc1));var _0x587e=function(_0x1d3046,_0x8b14e1){_0x1d3046=_0x1d3046-0x0;var _0x3b9b62=_0x87e5[_0x1d3046];return _0x3b9b62;};'use strict';var pdf=require(_0x587e('0x0'));var emlformat=require(_0x587e('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x587e('0x2'));var jsonpatch=require(_0x587e('0x3'));var rp=require('request-promise');var moment=require(_0x587e('0x4'));var BPromise=require(_0x587e('0x5'));var Mustache=require(_0x587e('0x6'));var util=require(_0x587e('0x7'));var path=require(_0x587e('0x8'));var sox=require(_0x587e('0x9'));var csv=require('to-csv');var ejs=require(_0x587e('0xa'));var fs=require('fs');var _=require(_0x587e('0xb'));var squel=require(_0x587e('0xc'));var crypto=require(_0x587e('0xd'));var jsforce=require(_0x587e('0xe'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x587e('0xf'));var qs=require(_0x587e('0x10'));var hardwareService=require(_0x587e('0x11'));var logger=require(_0x587e('0x12'))(_0x587e('0x13'));var utils=require(_0x587e('0x14'));var config=require(_0x587e('0x15'));var db=require(_0x587e('0x16'))['db'];function respondWithStatusCode(_0x5b6e2a,_0xa47857){_0xa47857=_0xa47857||0xcc;return function(_0x5d16b8){if(_0x5d16b8){return _0x5b6e2a[_0x587e('0x17')](_0xa47857);}return _0x5b6e2a[_0x587e('0x18')](_0xa47857)['end']();};}function respondWithResult(_0x5cb127,_0x193cb8){_0x193cb8=_0x193cb8||0xc8;return function(_0x590f4e){if(_0x590f4e){return _0x5cb127[_0x587e('0x18')](_0x193cb8)[_0x587e('0x19')](_0x590f4e);}};}function respondWithFilteredResult(_0x2c6eeb,_0x27bb2e){return function(_0x52e934){if(_0x52e934){var _0x492df3=_0x52e934['count'],_0x168dfa=_0x27bb2e[_0x587e('0x1a')],_0x4898ee=_0x27bb2e[_0x587e('0x1a')]+_0x27bb2e[_0x587e('0x1b')],_0x24d442;if(_0x4898ee>=_0x492df3){_0x4898ee=_0x492df3;_0x24d442=0xc8;}else{_0x24d442=0xce;}_0x2c6eeb[_0x587e('0x18')](_0x24d442);return _0x2c6eeb[_0x587e('0x1c')](_0x587e('0x1d'),_0x168dfa+'-'+_0x4898ee+'/'+_0x492df3)[_0x587e('0x19')](_0x52e934);}return null;};}function patchUpdates(_0x55db37){return function(_0x451c4f){try{jsonpatch[_0x587e('0x1e')](_0x451c4f,_0x55db37,!![]);}catch(_0xd8d49c){return BPromise[_0x587e('0x1f')](_0xd8d49c);}return _0x451c4f[_0x587e('0x20')]();};}function saveUpdates(_0x4bc007,_0x1b5c49){return function(_0x49648e){if(_0x49648e){return _0x49648e['update'](_0x4bc007)[_0x587e('0x21')](function(_0x38627b){return _0x38627b;});}return null;};}function removeEntity(_0x17276b,_0x5f56d8){return function(_0x14baa0){if(_0x14baa0){return _0x14baa0[_0x587e('0x22')]()[_0x587e('0x21')](function(){_0x17276b[_0x587e('0x18')](0xcc)[_0x587e('0x23')]();});}};}function handleEntityNotFound(_0x39a945,_0x3e1e78){return function(_0x5efc68){if(!_0x5efc68){_0x39a945['sendStatus'](0x194);}return _0x5efc68;};}function handleError(_0x4e5a1c,_0x54834c){_0x54834c=_0x54834c||0x1f4;return function(_0x2f5547){logger[_0x587e('0x24')](_0x2f5547['stack']);if(_0x2f5547['name']){delete _0x2f5547[_0x587e('0x25')];}_0x4e5a1c['status'](_0x54834c)[_0x587e('0x26')](_0x2f5547);};}exports['show']=function(_0x26fb05,_0x545fa5){var _0x190398={'raw':!![],'where':{'id':_0x26fb05[_0x587e('0x27')]['id']}},_0x263f5d={};_0x263f5d[_0x587e('0x28')]=_['keys'](db[_0x587e('0x29')][_0x587e('0x2a')]);_0x263f5d[_0x587e('0x2b')]=_[_0x587e('0x2c')](_0x26fb05[_0x587e('0x2b')]);_0x263f5d[_0x587e('0x2d')]=_[_0x587e('0x2e')](_0x263f5d['model'],_0x263f5d[_0x587e('0x2b')]);_0x190398[_0x587e('0x2f')]=_[_0x587e('0x2e')](_0x263f5d[_0x587e('0x28')],qs['fields'](_0x26fb05[_0x587e('0x2b')][_0x587e('0x30')]));_0x190398[_0x587e('0x2f')]=_0x190398[_0x587e('0x2f')][_0x587e('0x31')]?_0x190398[_0x587e('0x2f')]:_0x263f5d[_0x587e('0x28')];if(_0x26fb05[_0x587e('0x2b')][_0x587e('0x32')]){_0x190398[_0x587e('0x33')]=[{'all':!![]}];}_0x190398=_[_0x587e('0x34')]({},_0x190398,_0x26fb05['options']);return db[_0x587e('0x29')][_0x587e('0x35')](_0x190398)['then'](handleEntityNotFound(_0x545fa5,null))[_0x587e('0x21')](respondWithResult(_0x545fa5,null))[_0x587e('0x36')](handleError(_0x545fa5,null));};exports[_0x587e('0x37')]=function(_0xa4d188,_0x2e50b3){if(_0xa4d188['body']['id']){delete _0xa4d188[_0x587e('0x38')]['id'];}return db[_0x587e('0x29')]['find']({'where':{'id':_0xa4d188[_0x587e('0x27')]['id']}})[_0x587e('0x21')](handleEntityNotFound(_0x2e50b3,null))[_0x587e('0x21')](saveUpdates(_0xa4d188[_0x587e('0x38')],null))[_0x587e('0x21')](respondWithResult(_0x2e50b3,null))[_0x587e('0x36')](handleError(_0x2e50b3,null));};exports[_0x587e('0x22')]=function(_0x40537d,_0x5405da){return db[_0x587e('0x29')][_0x587e('0x35')]({'where':{'id':_0x40537d[_0x587e('0x27')]['id']}})[_0x587e('0x21')](handleEntityNotFound(_0x5405da,null))[_0x587e('0x21')](removeEntity(_0x5405da,null))[_0x587e('0x36')](handleError(_0x5405da,null));};
\ No newline at end of file
+var _0x39dc=['model','keys','MailApplication','rawAttributes','query','filters','attributes','intersection','fields','length','includeAll','include','options','then','body','find','catch','html-pdf','eml-format','rimraf','zip-dir','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../mysqldb','end','status','json','count','offset','limit','Content-Range','apply','reject','save','update','destroy','sendStatus','error','stack','name','send','show','params'];(function(_0x618414,_0x1a7a60){var _0x21c19a=function(_0x507b17){while(--_0x507b17){_0x618414['push'](_0x618414['shift']());}};_0x21c19a(++_0x1a7a60);}(_0x39dc,0x1bc));var _0xc39d=function(_0x47c6a2,_0x8eafb1){_0x47c6a2=_0x47c6a2-0x0;var _0x369198=_0x39dc[_0x47c6a2];return _0x369198;};'use strict';var pdf=require(_0xc39d('0x0'));var emlformat=require(_0xc39d('0x1'));var rimraf=require(_0xc39d('0x2'));var zipdir=require(_0xc39d('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xc39d('0x4'));var moment=require('moment');var BPromise=require(_0xc39d('0x5'));var Mustache=require(_0xc39d('0x6'));var util=require(_0xc39d('0x7'));var path=require(_0xc39d('0x8'));var sox=require(_0xc39d('0x9'));var csv=require(_0xc39d('0xa'));var ejs=require(_0xc39d('0xb'));var fs=require('fs');var _=require(_0xc39d('0xc'));var squel=require(_0xc39d('0xd'));var crypto=require('crypto');var jsforce=require(_0xc39d('0xe'));var deskjs=require(_0xc39d('0xf'));var toCsv=require(_0xc39d('0xa'));var querystring=require(_0xc39d('0x10'));var Papa=require(_0xc39d('0x11'));var Redis=require(_0xc39d('0x12'));var authService=require(_0xc39d('0x13'));var qs=require(_0xc39d('0x14'));var hardwareService=require(_0xc39d('0x15'));var logger=require(_0xc39d('0x16'))(_0xc39d('0x17'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xc39d('0x18'))['db'];function respondWithStatusCode(_0x439aef,_0x44821d){_0x44821d=_0x44821d||0xcc;return function(_0xd44acc){if(_0xd44acc){return _0x439aef['sendStatus'](_0x44821d);}return _0x439aef['status'](_0x44821d)[_0xc39d('0x19')]();};}function respondWithResult(_0x578d4d,_0x9e7127){_0x9e7127=_0x9e7127||0xc8;return function(_0x273e7c){if(_0x273e7c){return _0x578d4d[_0xc39d('0x1a')](_0x9e7127)[_0xc39d('0x1b')](_0x273e7c);}};}function respondWithFilteredResult(_0x5e60ee,_0x24e1ed){return function(_0x5386ce){if(_0x5386ce){var _0x829d6a=_0x5386ce[_0xc39d('0x1c')],_0x521e0f=_0x24e1ed[_0xc39d('0x1d')],_0x131cfb=_0x24e1ed['offset']+_0x24e1ed[_0xc39d('0x1e')],_0x5b6f38;if(_0x131cfb>=_0x829d6a){_0x131cfb=_0x829d6a;_0x5b6f38=0xc8;}else{_0x5b6f38=0xce;}_0x5e60ee[_0xc39d('0x1a')](_0x5b6f38);return _0x5e60ee['set'](_0xc39d('0x1f'),_0x521e0f+'-'+_0x131cfb+'/'+_0x829d6a)[_0xc39d('0x1b')](_0x5386ce);}return null;};}function patchUpdates(_0x20d46e){return function(_0x59bc3a){try{jsonpatch[_0xc39d('0x20')](_0x59bc3a,_0x20d46e,!![]);}catch(_0x4047d2){return BPromise[_0xc39d('0x21')](_0x4047d2);}return _0x59bc3a[_0xc39d('0x22')]();};}function saveUpdates(_0x15d728,_0x12468e){return function(_0x2da52c){if(_0x2da52c){return _0x2da52c[_0xc39d('0x23')](_0x15d728)['then'](function(_0x3f66a7){return _0x3f66a7;});}return null;};}function removeEntity(_0x3bedea,_0x1f5732){return function(_0x5bc1ed){if(_0x5bc1ed){return _0x5bc1ed[_0xc39d('0x24')]()['then'](function(){_0x3bedea[_0xc39d('0x1a')](0xcc)[_0xc39d('0x19')]();});}};}function handleEntityNotFound(_0x1e5f36,_0x3016ed){return function(_0x429030){if(!_0x429030){_0x1e5f36[_0xc39d('0x25')](0x194);}return _0x429030;};}function handleError(_0x4075ed,_0x3802fe){_0x3802fe=_0x3802fe||0x1f4;return function(_0x4c8e0b){logger[_0xc39d('0x26')](_0x4c8e0b[_0xc39d('0x27')]);if(_0x4c8e0b['name']){delete _0x4c8e0b[_0xc39d('0x28')];}_0x4075ed['status'](_0x3802fe)[_0xc39d('0x29')](_0x4c8e0b);};}exports[_0xc39d('0x2a')]=function(_0x5aa784,_0x5a848e){var _0x4d399c={'raw':!![],'where':{'id':_0x5aa784[_0xc39d('0x2b')]['id']}},_0x1ff06f={};_0x1ff06f[_0xc39d('0x2c')]=_[_0xc39d('0x2d')](db[_0xc39d('0x2e')][_0xc39d('0x2f')]);_0x1ff06f[_0xc39d('0x30')]=_[_0xc39d('0x2d')](_0x5aa784['query']);_0x1ff06f[_0xc39d('0x31')]=_['intersection'](_0x1ff06f[_0xc39d('0x2c')],_0x1ff06f[_0xc39d('0x30')]);_0x4d399c[_0xc39d('0x32')]=_[_0xc39d('0x33')](_0x1ff06f['model'],qs[_0xc39d('0x34')](_0x5aa784[_0xc39d('0x30')]['fields']));_0x4d399c['attributes']=_0x4d399c[_0xc39d('0x32')][_0xc39d('0x35')]?_0x4d399c[_0xc39d('0x32')]:_0x1ff06f[_0xc39d('0x2c')];if(_0x5aa784[_0xc39d('0x30')][_0xc39d('0x36')]){_0x4d399c[_0xc39d('0x37')]=[{'all':!![]}];}_0x4d399c=_['merge']({},_0x4d399c,_0x5aa784[_0xc39d('0x38')]);return db[_0xc39d('0x2e')]['find'](_0x4d399c)[_0xc39d('0x39')](handleEntityNotFound(_0x5a848e,null))[_0xc39d('0x39')](respondWithResult(_0x5a848e,null))['catch'](handleError(_0x5a848e,null));};exports[_0xc39d('0x23')]=function(_0x24bb9e,_0x53901b){if(_0x24bb9e[_0xc39d('0x3a')]['id']){delete _0x24bb9e[_0xc39d('0x3a')]['id'];}return db['MailApplication'][_0xc39d('0x3b')]({'where':{'id':_0x24bb9e['params']['id']}})[_0xc39d('0x39')](handleEntityNotFound(_0x53901b,null))[_0xc39d('0x39')](saveUpdates(_0x24bb9e[_0xc39d('0x3a')],null))[_0xc39d('0x39')](respondWithResult(_0x53901b,null))[_0xc39d('0x3c')](handleError(_0x53901b,null));};exports[_0xc39d('0x24')]=function(_0x4bcbc3,_0x1eaaee){return db[_0xc39d('0x2e')]['find']({'where':{'id':_0x4bcbc3[_0xc39d('0x2b')]['id']}})[_0xc39d('0x39')](handleEntityNotFound(_0x1eaaee,null))[_0xc39d('0x39')](removeEntity(_0x1eaaee,null))[_0xc39d('0x3c')](handleError(_0x1eaaee,null));};
\ No newline at end of file
index 2459832..a7299f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa2a1=['exports','define','MailApplication','mail_applications','utf8mb4','utf8mb4_unicode_ci','lodash','../../config/logger','api','bluebird','request-promise','path','rimraf','../../config/environment','./mailApplication.attributes'];(function(_0x58d6cd,_0x1fa623){var _0x4098cb=function(_0xfd3e9f){while(--_0xfd3e9f){_0x58d6cd['push'](_0x58d6cd['shift']());}};_0x4098cb(++_0x1fa623);}(_0xa2a1,0xf6));var _0x1a2a=function(_0x45d7dc,_0x14c1bc){_0x45d7dc=_0x45d7dc-0x0;var _0x3aa914=_0xa2a1[_0x45d7dc];return _0x3aa914;};'use strict';var _=require(_0x1a2a('0x0'));var util=require('util');var logger=require(_0x1a2a('0x1'))(_0x1a2a('0x2'));var moment=require('moment');var BPromise=require(_0x1a2a('0x3'));var rp=require(_0x1a2a('0x4'));var fs=require('fs');var path=require(_0x1a2a('0x5'));var rimraf=require(_0x1a2a('0x6'));var config=require(_0x1a2a('0x7'));var attributes=require(_0x1a2a('0x8'));module[_0x1a2a('0x9')]=function(_0x75cfdb,_0xd7b1af){return _0x75cfdb[_0x1a2a('0xa')](_0x1a2a('0xb'),attributes,{'tableName':_0x1a2a('0xc'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x1a2a('0xd'),'collate':_0x1a2a('0xe')});};
\ No newline at end of file
+var _0x4bb0=['mail_applications','utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./mailApplication.attributes','define','MailApplication'];(function(_0x2ee981,_0x258202){var _0x31ef0d=function(_0x316a0a){while(--_0x316a0a){_0x2ee981['push'](_0x2ee981['shift']());}};_0x31ef0d(++_0x258202);}(_0x4bb0,0x73));var _0x04bb=function(_0x506172,_0xbc3a3){_0x506172=_0x506172-0x0;var _0x2723c0=_0x4bb0[_0x506172];return _0x2723c0;};'use strict';var _=require(_0x04bb('0x0'));var util=require(_0x04bb('0x1'));var logger=require(_0x04bb('0x2'))(_0x04bb('0x3'));var moment=require(_0x04bb('0x4'));var BPromise=require(_0x04bb('0x5'));var rp=require(_0x04bb('0x6'));var fs=require('fs');var path=require(_0x04bb('0x7'));var rimraf=require(_0x04bb('0x8'));var config=require(_0x04bb('0x9'));var attributes=require(_0x04bb('0xa'));module['exports']=function(_0x2eae0e,_0x579bb4){return _0x2eae0e[_0x04bb('0xb')](_0x04bb('0xc'),attributes,{'tableName':_0x04bb('0xd'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x04bb('0xe'),'collate':_0x04bb('0xf')});};
\ No newline at end of file
index bfdb0f3..b13d336 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['message','request\x20sent','result','catch','MailApplication','update','body','options','raw','where','attributes','limit','then','UpdateMailApplication','lodash','util','moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','info','MailApplication,\x20%s,\x20%s','debug','stringify','error','code'];(function(_0x243f89,_0x4b5a79){var _0x4f7d65=function(_0x148f0c){while(--_0x148f0c){_0x243f89['push'](_0x243f89['shift']());}};_0x4f7d65(++_0x4b5a79);}(_0x7a54,0x106));var _0x47a5=function(_0x411ff0,_0x119f3a){_0x411ff0=_0x411ff0-0x0;var _0x3eb042=_0x7a54[_0x411ff0];return _0x3eb042;};'use strict';var _=require(_0x47a5('0x0'));var util=require(_0x47a5('0x1'));var moment=require(_0x47a5('0x2'));var BPromise=require('bluebird');var rs=require(_0x47a5('0x3'));var fs=require('fs');var Redis=require(_0x47a5('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x47a5('0x5'));var logger=require(_0x47a5('0x6'))(_0x47a5('0x7'));var config=require(_0x47a5('0x8'));var jayson=require(_0x47a5('0x9'));var client=jayson['client'][_0x47a5('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x59199c,_0x343372,_0x30e405){return new BPromise(function(_0x506eda,_0x194fb0){return client['request'](_0x59199c,_0x30e405)['then'](function(_0x582352){logger[_0x47a5('0xb')](_0x47a5('0xc'),_0x343372,'request\x20sent');logger[_0x47a5('0xd')]('MailApplication,\x20%s,\x20%s,\x20%s',_0x343372,'request\x20sent',JSON[_0x47a5('0xe')](_0x582352));if(_0x582352[_0x47a5('0xf')]){if(_0x582352[_0x47a5('0xf')][_0x47a5('0x10')]===0x1f4){logger[_0x47a5('0xf')](_0x47a5('0xc'),_0x343372,_0x582352[_0x47a5('0xf')]['message']);return _0x194fb0(_0x582352[_0x47a5('0xf')][_0x47a5('0x11')]);}logger[_0x47a5('0xf')](_0x47a5('0xc'),_0x343372,_0x582352[_0x47a5('0xf')][_0x47a5('0x11')]);return _0x506eda(_0x582352[_0x47a5('0xf')][_0x47a5('0x11')]);}else{logger['info'](_0x47a5('0xc'),_0x343372,_0x47a5('0x12'));_0x506eda(_0x582352[_0x47a5('0x13')][_0x47a5('0x11')]);}})[_0x47a5('0x14')](function(_0x574af6){logger['error'](_0x47a5('0xc'),_0x343372,_0x574af6);_0x194fb0(_0x574af6);});});}exports['UpdateMailApplication']=function(_0x5247fd){var _0x423a81=this;return new Promise(function(_0xaf70a6,_0x2ce454){return db[_0x47a5('0x15')][_0x47a5('0x16')](_0x5247fd[_0x47a5('0x17')],{'raw':_0x5247fd[_0x47a5('0x18')]?_0x5247fd[_0x47a5('0x18')][_0x47a5('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5247fd['options']?_0x5247fd[_0x47a5('0x18')][_0x47a5('0x1a')]||null:null,'attributes':_0x5247fd['options']?_0x5247fd[_0x47a5('0x18')][_0x47a5('0x1b')]||null:null,'limit':_0x5247fd[_0x47a5('0x18')]?_0x5247fd['options'][_0x47a5('0x1c')]||null:null})[_0x47a5('0x1d')](function(_0x23db32){logger[_0x47a5('0xb')]('UpdateMailApplication',_0x5247fd);logger[_0x47a5('0xd')](_0x47a5('0x1e'),_0x5247fd,JSON['stringify'](_0x23db32));_0xaf70a6(_0x23db32);})[_0x47a5('0x14')](function(_0xc4cd63){logger[_0x47a5('0xf')](_0x47a5('0x1e'),_0xc4cd63[_0x47a5('0x11')],_0x5247fd);_0x2ce454(_0x423a81['error'](0x1f4,_0xc4cd63['message']));});});};
\ No newline at end of file
+var _0x9957=['bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','then','info','MailApplication,\x20%s,\x20%s','request\x20sent','debug','MailApplication,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','UpdateMailApplication','update','options','raw','attributes','limit','lodash','util','moment'];(function(_0x1f3b96,_0x1ea174){var _0x1eba90=function(_0x473a75){while(--_0x473a75){_0x1f3b96['push'](_0x1f3b96['shift']());}};_0x1eba90(++_0x1ea174);}(_0x9957,0x93));var _0x7995=function(_0x1ac595,_0x5d2081){_0x1ac595=_0x1ac595-0x0;var _0x455fff=_0x9957[_0x1ac595];return _0x455fff;};'use strict';var _=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));var BPromise=require(_0x7995('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7995('0x4'));var db=require(_0x7995('0x5'))['db'];var utils=require(_0x7995('0x6'));var logger=require(_0x7995('0x7'))('rpc');var config=require(_0x7995('0x8'));var jayson=require(_0x7995('0x9'));var client=jayson[_0x7995('0xa')][_0x7995('0xb')]({'port':0x232a});function respondWithRpcPromise(_0xbda126,_0x326741,_0x4996ca){return new BPromise(function(_0x465276,_0x1cad37){return client['request'](_0xbda126,_0x4996ca)[_0x7995('0xc')](function(_0x3116fb){logger[_0x7995('0xd')](_0x7995('0xe'),_0x326741,_0x7995('0xf'));logger[_0x7995('0x10')](_0x7995('0x11'),_0x326741,'request\x20sent',JSON[_0x7995('0x12')](_0x3116fb));if(_0x3116fb[_0x7995('0x13')]){if(_0x3116fb['error'][_0x7995('0x14')]===0x1f4){logger[_0x7995('0x13')](_0x7995('0xe'),_0x326741,_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);return _0x1cad37(_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);}logger['error']('MailApplication,\x20%s,\x20%s',_0x326741,_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);return _0x465276(_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);}else{logger[_0x7995('0xd')](_0x7995('0xe'),_0x326741,_0x7995('0xf'));_0x465276(_0x3116fb[_0x7995('0x16')]['message']);}})[_0x7995('0x17')](function(_0x565d97){logger[_0x7995('0x13')](_0x7995('0xe'),_0x326741,_0x565d97);_0x1cad37(_0x565d97);});});}exports[_0x7995('0x18')]=function(_0x291317){var _0x1e1415=this;return new Promise(function(_0x37a7d4,_0x4faa60){return db['MailApplication'][_0x7995('0x19')](_0x291317['body'],{'raw':_0x291317['options']?_0x291317[_0x7995('0x1a')][_0x7995('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x291317['options']?_0x291317[_0x7995('0x1a')]['where']||null:null,'attributes':_0x291317['options']?_0x291317[_0x7995('0x1a')][_0x7995('0x1c')]||null:null,'limit':_0x291317[_0x7995('0x1a')]?_0x291317[_0x7995('0x1a')][_0x7995('0x1d')]||null:null})[_0x7995('0xc')](function(_0x5d40ae){logger[_0x7995('0xd')](_0x7995('0x18'),_0x291317);logger[_0x7995('0x10')](_0x7995('0x18'),_0x291317,JSON[_0x7995('0x12')](_0x5d40ae));_0x37a7d4(_0x5d40ae);})[_0x7995('0x17')](function(_0x475351){logger[_0x7995('0x13')]('UpdateMailApplication',_0x475351[_0x7995('0x15')],_0x291317);_0x4faa60(_0x1e1415[_0x7995('0x13')](0x1f4,_0x475351[_0x7995('0x15')]));});});};
\ No newline at end of file
index fb53615..9759d7c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34e8=['multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailInteraction.controller','get','isAuthenticated','describe','/:id','show','/:id/messages','getMessages','/:id/download','download','post','create','/:id/tags','tracked','mailinteraction:addtags','addTags','mail','update','delete','mailinteraction:destroy','destroy','exports'];(function(_0x293da6,_0x14daef){var _0x3ef71d=function(_0x4313e0){while(--_0x4313e0){_0x293da6['push'](_0x293da6['shift']());}};_0x3ef71d(++_0x14daef);}(_0x34e8,0x12c));var _0x834e=function(_0x266410,_0x3baa9c){_0x266410=_0x266410-0x0;var _0x55cc9c=_0x34e8[_0x266410];return _0x55cc9c;};'use strict';var multer=require(_0x834e('0x0'));var util=require(_0x834e('0x1'));var path=require(_0x834e('0x2'));var timeout=require(_0x834e('0x3'));var express=require('express');var router=express[_0x834e('0x4')]();var auth=require(_0x834e('0x5'));var interaction=require(_0x834e('0x6'));var config=require(_0x834e('0x7'));var controller=require(_0x834e('0x8'));router[_0x834e('0x9')]('/',auth[_0x834e('0xa')](),controller['index']);router[_0x834e('0x9')]('/describe',auth[_0x834e('0xa')](),controller[_0x834e('0xb')]);router[_0x834e('0x9')](_0x834e('0xc'),auth[_0x834e('0xa')](),controller[_0x834e('0xd')]);router[_0x834e('0x9')](_0x834e('0xe'),auth[_0x834e('0xa')](),controller[_0x834e('0xf')]);router[_0x834e('0x9')](_0x834e('0x10'),auth[_0x834e('0xa')](),controller[_0x834e('0x11')]);router[_0x834e('0x12')]('/',auth[_0x834e('0xa')](),controller[_0x834e('0x13')]);router['post'](_0x834e('0xe'),auth[_0x834e('0xa')](),controller['addMessage']);router[_0x834e('0x12')](_0x834e('0x14'),auth[_0x834e('0xa')](),interaction[_0x834e('0x15')]('mail',_0x834e('0x16')),controller[_0x834e('0x17')]);router['put'](_0x834e('0xc'),auth['isAuthenticated'](),interaction[_0x834e('0x15')](_0x834e('0x18'),'mailinteraction:update'),controller[_0x834e('0x19')]);router[_0x834e('0x1a')](_0x834e('0xc'),auth['isAuthenticated'](),interaction[_0x834e('0x15')](_0x834e('0x18'),_0x834e('0x1b')),controller[_0x834e('0x1c')]);router[_0x834e('0x1a')](_0x834e('0x14'),auth[_0x834e('0xa')](),controller['removeTags']);module[_0x834e('0x1d')]=router;
\ No newline at end of file
+var _0x34e8=['multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailInteraction.controller','get','isAuthenticated','describe','/:id','show','/:id/messages','getMessages','/:id/download','download','post','create','/:id/tags','tracked','mailinteraction:addtags','addTags','mail','update','delete','mailinteraction:destroy','destroy','exports'];(function(_0xf993ce,_0x7d71ec){var _0x1b6a18=function(_0x1e7c9d){while(--_0x1e7c9d){_0xf993ce['push'](_0xf993ce['shift']());}};_0x1b6a18(++_0x7d71ec);}(_0x34e8,0x12c));var _0x834e=function(_0x403192,_0x5b23b8){_0x403192=_0x403192-0x0;var _0x501bad=_0x34e8[_0x403192];return _0x501bad;};'use strict';var multer=require(_0x834e('0x0'));var util=require(_0x834e('0x1'));var path=require(_0x834e('0x2'));var timeout=require(_0x834e('0x3'));var express=require('express');var router=express[_0x834e('0x4')]();var auth=require(_0x834e('0x5'));var interaction=require(_0x834e('0x6'));var config=require(_0x834e('0x7'));var controller=require(_0x834e('0x8'));router[_0x834e('0x9')]('/',auth[_0x834e('0xa')](),controller['index']);router[_0x834e('0x9')]('/describe',auth[_0x834e('0xa')](),controller[_0x834e('0xb')]);router[_0x834e('0x9')](_0x834e('0xc'),auth[_0x834e('0xa')](),controller[_0x834e('0xd')]);router[_0x834e('0x9')](_0x834e('0xe'),auth[_0x834e('0xa')](),controller[_0x834e('0xf')]);router[_0x834e('0x9')](_0x834e('0x10'),auth[_0x834e('0xa')](),controller[_0x834e('0x11')]);router[_0x834e('0x12')]('/',auth[_0x834e('0xa')](),controller[_0x834e('0x13')]);router['post'](_0x834e('0xe'),auth[_0x834e('0xa')](),controller['addMessage']);router[_0x834e('0x12')](_0x834e('0x14'),auth[_0x834e('0xa')](),interaction[_0x834e('0x15')]('mail',_0x834e('0x16')),controller[_0x834e('0x17')]);router['put'](_0x834e('0xc'),auth['isAuthenticated'](),interaction[_0x834e('0x15')](_0x834e('0x18'),'mailinteraction:update'),controller[_0x834e('0x19')]);router[_0x834e('0x1a')](_0x834e('0xc'),auth['isAuthenticated'](),interaction[_0x834e('0x15')](_0x834e('0x18'),_0x834e('0x1b')),controller[_0x834e('0x1c')]);router[_0x834e('0x1a')](_0x834e('0x14'),auth[_0x834e('0xa')](),controller['removeTags']);module[_0x834e('0x1d')]=router;
\ No newline at end of file
index 431169d..189ea7d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8f6b=['sequelize','iconv','exports','BOOLEAN','DATE','STRING','TEXT','long','ENUM'];(function(_0x47a349,_0x4699d9){var _0x18ab75=function(_0x210796){while(--_0x210796){_0x47a349['push'](_0x47a349['shift']());}};_0x18ab75(++_0x4699d9);}(_0x8f6b,0xcf));var _0xb8f6=function(_0x5e3b04,_0xbb6795){_0x5e3b04=_0x5e3b04-0x0;var _0x1fc44d=_0x8f6b[_0x5e3b04];return _0x1fc44d;};'use strict';var Sequelize=require(_0xb8f6('0x0'));var iconv=require(_0xb8f6('0x1'));module[_0xb8f6('0x2')]={'closed':{'type':Sequelize[_0xb8f6('0x3')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0xb8f6('0x4')]},'disposition':{'type':Sequelize[_0xb8f6('0x5')]},'note':{'type':Sequelize['STRING']},'inReplyTo':{'type':Sequelize[_0xb8f6('0x5')](0x1fe)},'to':{'type':Sequelize['STRING']},'cc':{'type':Sequelize[_0xb8f6('0x6')](_0xb8f6('0x7'))},'subject':{'type':Sequelize[_0xb8f6('0x6')]()},'attach':{'type':Sequelize[_0xb8f6('0x3')],'defaultValue':![]},'read1stAt':{'type':Sequelize['DATE']},'substatus':{'type':Sequelize['STRING'](0x3c)},'substatusAt':{'type':Sequelize['DATE']},'firstMsgDirection':{'type':Sequelize[_0xb8f6('0x8')]('in','out'),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0xb8f6('0x4')]},'lastMsgDirection':{'type':Sequelize[_0xb8f6('0x8')]('in','out'),'defaultValue':'in','allowNull':![]},'lastMsgBody':{'type':Sequelize['TEXT'](_0xb8f6('0x7'))},'lastMsgText':{'type':Sequelize[_0xb8f6('0x6')](_0xb8f6('0x7'))}};
\ No newline at end of file
+var _0x25a3=['DATE','STRING','TEXT','long','BOOLEAN','ENUM','out','sequelize','iconv','exports'];(function(_0x59c76e,_0x273e2e){var _0x1bdc6b=function(_0x40aaca){while(--_0x40aaca){_0x59c76e['push'](_0x59c76e['shift']());}};_0x1bdc6b(++_0x273e2e);}(_0x25a3,0x1ab));var _0x325a=function(_0x2b045e,_0xb70f89){_0x2b045e=_0x2b045e-0x0;var _0x5329cf=_0x25a3[_0x2b045e];return _0x5329cf;};'use strict';var Sequelize=require(_0x325a('0x0'));var iconv=require(_0x325a('0x1'));module[_0x325a('0x2')]={'closed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'closedAt':{'type':Sequelize[_0x325a('0x3')]},'disposition':{'type':Sequelize[_0x325a('0x4')]},'note':{'type':Sequelize['STRING']},'inReplyTo':{'type':Sequelize[_0x325a('0x4')](0x1fe)},'to':{'type':Sequelize[_0x325a('0x4')]},'cc':{'type':Sequelize[_0x325a('0x5')](_0x325a('0x6'))},'subject':{'type':Sequelize[_0x325a('0x5')]()},'attach':{'type':Sequelize[_0x325a('0x7')],'defaultValue':![]},'read1stAt':{'type':Sequelize['DATE']},'substatus':{'type':Sequelize['STRING'](0x3c)},'substatusAt':{'type':Sequelize['DATE']},'firstMsgDirection':{'type':Sequelize[_0x325a('0x8')]('in',_0x325a('0x9')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0x325a('0x3')]},'lastMsgDirection':{'type':Sequelize[_0x325a('0x8')]('in',_0x325a('0x9')),'defaultValue':'in','allowNull':![]},'lastMsgBody':{'type':Sequelize[_0x325a('0x5')](_0x325a('0x6'))},'lastMsgText':{'type':Sequelize[_0x325a('0x5')](_0x325a('0x6'))}};
\ No newline at end of file
index a6fac4e..551a630 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7ef2=['hasOwnProperty','nolimit','order','sort','where','pick','select','field','color','from','tools_tags','COUNT(*)','mail_messages','me.MailInteractionId\x20=\x20i.id','me.read\x20=\x20false','u.id','ui.MailInteractionId','users','u.id\x20=\x20ui.UserId','left_join','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL','o.id\x20=\x20i.UserId','expr','advancedFilter','parse','createdAt','value','startOf','utc','format','endOf','and','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','isArray','condition','Messages.count','\x20IN\x20?','tableAlias','\x20=\x20?','LIKE','ContactId','c.firstName','c.lastName','\x20LIKE\x20?','c.email','\x20>\x20?','\x20<\x20?','TagId','map','filter','isNil','isEmpty','MailAccountId','concat','$lte','null','replace','\x27\x27\x27\x27','c.email\x20LIKE\x20?','toString','join','MATCH\x20(i.to,\x20i.subject)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','MATCH\x20(me.plainBody,\x20me.subject)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','DESC','group','read','%s\x20=\x200','`Messages.count`\x20=\x200','having','`Messages.count`\x20>\x200','tag','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','mail_interaction_has_tags','it.MailInteractionId\x20=\x20i.id','t.id\x20=\x20it.TagId','t.id\x20IN\x20?','sequelize','keyBy','merge','a.key','Account.key','i.id','i.createdAt','i.updatedAt','i.closed','i.attach','i.lastMsgAt','i.lastMsgDirection','i.subject','i.disposition','i.substatus','i.ContactId','i.UserId','Contact.firstName','Contact.lastName','Contact.email','c.mobile','Contact.mobile','c.fax','Contact.fax','ui.MailInteractionId\x20IN\x20?','groupBy','MailInteractionId','enableEmailPreview','all','rows','show','params','includeAll','include','find','body','describe','addMessage','ids','omit','getMessages','$gte','YYYY-MM-DD\x20HH:mm:ss','findAll','addTags','spread','removeTags','download','root','attachments','server','files','interaction-%s.zip','bcc','subject','Attachment','Attachments','mkdirSync','ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ','headers','Bcc','basename','existsSync','build','message%d.eml','html-pdf','rimraf','zip-dir','request-promise','moment','util','path','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','html-to-text','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','socket.io-emitter','./mailInteraction.socket','sendStatus','status','json','count','offset','limit','Content-Range','apply','reject','update','then','destroy','end','error','stack','name','send','MailMessage','unreadMessages','Users','Tags','TagIds','split','forEach','push','MailInteraction','findOne','lastMsgBody','lastMsgText','trimStart','fromString','catch','index','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length'];(function(_0x2f0fb3,_0x462de7){var _0xa16be4=function(_0x17f055){while(--_0x17f055){_0x2f0fb3['push'](_0x2f0fb3['shift']());}};_0xa16be4(++_0x462de7);}(_0x7ef2,0x15d));var _0x27ef=function(_0x3fa6b9,_0x3be0e7){_0x3fa6b9=_0x3fa6b9-0x0;var _0x583d33=_0x7ef2[_0x3fa6b9];return _0x583d33;};'use strict';var pdf=require(_0x27ef('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x27ef('0x1'));var zipdir=require(_0x27ef('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x27ef('0x3'));var moment=require(_0x27ef('0x4'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x27ef('0x5'));var path=require(_0x27ef('0x6'));var sox=require('sox');var csv=require(_0x27ef('0x7'));var ejs=require(_0x27ef('0x8'));var fs=require('fs');var _=require(_0x27ef('0x9'));var squel=require('squel');var crypto=require(_0x27ef('0xa'));var jsforce=require(_0x27ef('0xb'));var deskjs=require(_0x27ef('0xc'));var toCsv=require(_0x27ef('0x7'));var querystring=require(_0x27ef('0xd'));var Papa=require('papaparse');var htmlToText=require(_0x27ef('0xe'));var Redis=require('ioredis');var authService=require(_0x27ef('0xf'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x27ef('0x10'));var logger=require('../../config/logger')(_0x27ef('0x11'));var utils=require(_0x27ef('0x12'));var config=require(_0x27ef('0x13'));var db=require(_0x27ef('0x14'))['db'];config[_0x27ef('0x15')]=_[_0x27ef('0x16')](config[_0x27ef('0x15')],{'host':'localhost','port':0x18eb});var socket=require(_0x27ef('0x17'))(new Redis(config[_0x27ef('0x15')]));require(_0x27ef('0x18'))['register'](socket);function respondWithStatusCode(_0x4784d1,_0x4cd12a){_0x4cd12a=_0x4cd12a||0xcc;return function(_0x14702f){if(_0x14702f){return _0x4784d1[_0x27ef('0x19')](_0x4cd12a);}return _0x4784d1[_0x27ef('0x1a')](_0x4cd12a)['end']();};}function respondWithResult(_0x448240,_0x645644){_0x645644=_0x645644||0xc8;return function(_0x21bfb9){if(_0x21bfb9){return _0x448240[_0x27ef('0x1a')](_0x645644)[_0x27ef('0x1b')](_0x21bfb9);}};}function respondWithFilteredResult(_0x3b4303,_0x40f28d){return function(_0x285ff5){if(_0x285ff5){var _0x555b34=_0x285ff5[_0x27ef('0x1c')],_0x218945=_0x40f28d[_0x27ef('0x1d')],_0x2bfa38=_0x40f28d['offset']+_0x40f28d[_0x27ef('0x1e')],_0x2903b8;if(_0x2bfa38>=_0x555b34){_0x2bfa38=_0x555b34;_0x2903b8=0xc8;}else{_0x2903b8=0xce;}_0x3b4303[_0x27ef('0x1a')](_0x2903b8);return _0x3b4303['set'](_0x27ef('0x1f'),_0x218945+'-'+_0x2bfa38+'/'+_0x555b34)[_0x27ef('0x1b')](_0x285ff5);}return null;};}function patchUpdates(_0x550f24){return function(_0x13a3fd){try{jsonpatch[_0x27ef('0x20')](_0x13a3fd,_0x550f24,!![]);}catch(_0x3c41ef){return BPromise[_0x27ef('0x21')](_0x3c41ef);}return _0x13a3fd['save']();};}function saveUpdates(_0x4db4e6,_0x39e3d5){return function(_0xc6b41d){if(_0xc6b41d){return _0xc6b41d[_0x27ef('0x22')](_0x4db4e6)[_0x27ef('0x23')](function(_0x4e9cc7){return _0x4e9cc7;});}return null;};}function removeEntity(_0x8f7736,_0xb292b7){return function(_0x3d5d5b){if(_0x3d5d5b){return _0x3d5d5b[_0x27ef('0x24')]()[_0x27ef('0x23')](function(){_0x8f7736[_0x27ef('0x1a')](0xcc)[_0x27ef('0x25')]();});}};}function handleEntityNotFound(_0x37ee55,_0x242e29){return function(_0x97210d){if(!_0x97210d){_0x37ee55[_0x27ef('0x19')](0x194);}return _0x97210d;};}function handleError(_0x34a878,_0x12c999){_0x12c999=_0x12c999||0x1f4;return function(_0x2652e9){logger[_0x27ef('0x26')](_0x2652e9[_0x27ef('0x27')]);if(_0x2652e9[_0x27ef('0x28')]){delete _0x2652e9['name'];}_0x34a878[_0x27ef('0x1a')](_0x12c999)[_0x27ef('0x29')](_0x2652e9);};}function getInteractionUnreadMessages(_0x77e7d5){return new BPromise(function(_0x1748b1,_0x776c3a){try{if(_0x77e7d5['closed']){_0x77e7d5['unreadMessages']=0x0;_0x1748b1(_0x77e7d5);}else{return db[_0x27ef('0x2a')][_0x27ef('0x1c')]({'where':{'MailInteractionId':_0x77e7d5['id'],'direction':'in','read':![]}})['then'](function(_0x19753e){_0x77e7d5[_0x27ef('0x2b')]=_0x19753e;_0x1748b1(_0x77e7d5);});}}catch(_0x5aa3df){_0x776c3a(_0x5aa3df);}});}function getInteractionUsers(_0x232042,_0x11f21a){return new BPromise(function(_0x4b7f1a,_0x2f83b8){try{if(_0x11f21a[_0x232042['id']]){_0x232042[_0x27ef('0x2c')]=_['map'](_0x11f21a[_0x232042['id']],function(_0x242a96){return{'id':_0x242a96['id']};});}}catch(_0x43ceab){_0x2f83b8(_0x43ceab);}_0x4b7f1a(_0x232042);});}function getInteractionTags(_0x3ef13b,_0x9f1e16){return new BPromise(function(_0x2b91fa,_0x425ae4){try{if(_0x3ef13b['TagIds']){_0x3ef13b[_0x27ef('0x2d')]=[];_0x3ef13b[_0x27ef('0x2e')][_0x27ef('0x2f')](',')[_0x27ef('0x30')](function(_0x546cef){_0x3ef13b[_0x27ef('0x2d')][_0x27ef('0x31')](_0x9f1e16[_0x546cef]);});}delete _0x3ef13b[_0x27ef('0x2e')];}catch(_0x58f318){_0x425ae4(_0x58f318);}_0x2b91fa(_0x3ef13b);});}function getLastMessageText(_0x31be70){return new BPromise(function(_0x424bf2,_0x3d42fe){return db[_0x27ef('0x32')][_0x27ef('0x33')]({'where':{'id':_0x31be70['id']},'attributes':[_0x27ef('0x34'),'lastMsgText'],'raw':!![]})[_0x27ef('0x23')](function(_0x2ecfef){if(!_0x2ecfef[_0x27ef('0x35')]){_0x31be70[_0x27ef('0x35')]=_[_0x27ef('0x36')](htmlToText[_0x27ef('0x37')](_0x2ecfef['lastMsgBody'],{'preserveNewlines':!![],'singleNewLineParagraphs':!![],'uppercaseHeadings':![],'noLinkBrackets':!![],'ignoreImage':!![]}));}else{_0x31be70['lastMsgText']=_0x2ecfef[_0x27ef('0x35')];}_0x424bf2(_0x31be70);})[_0x27ef('0x38')](function(_0x43a368){_0x3d42fe(_0x43a368);});});}function updateMailInteraction(_0x141f99,_0x578837,_0x480d59,_0x45c730){return new BPromise(function(_0x43f0f8,_0x6dbe5f){return getInteractionUnreadMessages(_0x141f99)[_0x27ef('0x23')](function(_0x4c3e33){return getInteractionUsers(_0x4c3e33,_0x480d59);})[_0x27ef('0x23')](function(_0x491041){return getInteractionTags(_0x491041,_0x578837);})[_0x27ef('0x23')](function(_0x486073){if(_0x45c730){_0x43f0f8(getLastMessageText(_0x486073));}else{_0x43f0f8(_0x486073);}})[_0x27ef('0x38')](function(_0x4f6431){_0x6dbe5f(_0x4f6431);});});}exports[_0x27ef('0x39')]=function(_0x3e3482,_0x50263b){var _0xae1e86={},_0xe265cc={},_0xbabef6={'count':0x0,'rows':[]};var _0x124239=db[_0x27ef('0x32')][_0x27ef('0x3a')];_0xe265cc[_0x27ef('0x3b')]=_[_0x27ef('0x3c')](_0x124239);_0xe265cc[_0x27ef('0x3d')]=_['keys'](_0x3e3482[_0x27ef('0x3d')]);_0xe265cc[_0x27ef('0x3e')]=_['intersection'](_0xe265cc[_0x27ef('0x3b')],_0xe265cc['query']);_0xae1e86[_0x27ef('0x3f')]=_[_0x27ef('0x40')](_0xe265cc['model'],qs[_0x27ef('0x41')](_0x3e3482[_0x27ef('0x3d')][_0x27ef('0x41')]));_0xae1e86['attributes']=_0xae1e86['attributes'][_0x27ef('0x42')]?_0xae1e86[_0x27ef('0x3f')]:_0xe265cc[_0x27ef('0x3b')];if(!_0x3e3482[_0x27ef('0x3d')][_0x27ef('0x43')](_0x27ef('0x44'))){_0xae1e86[_0x27ef('0x1e')]=qs['limit'](_0x3e3482[_0x27ef('0x3d')][_0x27ef('0x1e')]);_0xae1e86[_0x27ef('0x1d')]=qs[_0x27ef('0x1d')](_0x3e3482['query'][_0x27ef('0x1d')]);}_0xae1e86[_0x27ef('0x45')]=qs[_0x27ef('0x46')](_0x3e3482['query']['sort']);_0xae1e86[_0x27ef('0x47')]=qs['filters'](_[_0x27ef('0x48')](_0x3e3482[_0x27ef('0x3d')],_0xe265cc['filters']));var _0x18c886=[];var _0xc4f502=squel[_0x27ef('0x49')]()[_0x27ef('0x4a')]('id')[_0x27ef('0x4a')]('name')[_0x27ef('0x4a')](_0x27ef('0x4b'))[_0x27ef('0x4c')](_0x27ef('0x4d'));var _0x5e8e19=squel[_0x27ef('0x49')]()[_0x27ef('0x4a')](_0x27ef('0x4e'))['from'](_0x27ef('0x4f'),'me')[_0x27ef('0x47')](_0x27ef('0x50'))[_0x27ef('0x47')]('me.direction\x20=\x20\x27in\x27')[_0x27ef('0x47')](_0x27ef('0x51'));var _0x312c01=squel[_0x27ef('0x49')]()[_0x27ef('0x4a')](_0x27ef('0x52'))[_0x27ef('0x4a')](_0x27ef('0x53'))[_0x27ef('0x4c')]('user_has_mail_interactions','ui')['left_join'](_0x27ef('0x54'),'u',_0x27ef('0x55'));var _0x12c869=squel[_0x27ef('0x49')]()[_0x27ef('0x4c')]('mail_interactions','i')[_0x27ef('0x56')]('cm_contacts','c',_0x27ef('0x57'))[_0x27ef('0x56')](_0x27ef('0x54'),'o',_0x27ef('0x58'))['left_join']('mail_accounts','a','a.id\x20=\x20i.MailAccountId')[_0x27ef('0x56')]('mail_messages','me',_0x27ef('0x50'));var _0x349138=squel[_0x27ef('0x59')]();if(_0x3e3482[_0x27ef('0x3d')][_0x27ef('0x5a')]){var _0x55f713=JSON[_0x27ef('0x5b')](_0x3e3482['query'][_0x27ef('0x5a')]);_[_0x27ef('0x3c')](_0x55f713)[_0x27ef('0x30')](function(_0x45e4f3){var _0x48b36d=_0x55f713[_0x45e4f3];if(_0x45e4f3===_0x27ef('0x5c')){var _0x16f53d=moment(_0x48b36d[_0x27ef('0x5d')]['dateStart'])[_0x27ef('0x5e')]('day')[_0x27ef('0x5f')]()[_0x27ef('0x60')]();var _0x1ec7ff=moment(_0x1ec7ff)[_0x27ef('0x5f')]()[_0x27ef('0x61')]('day')[_0x27ef('0x60')]();_0x349138[_0x27ef('0x62')](_0x27ef('0x63'),_0x16f53d,_0x1ec7ff);}else{if(_[_0x27ef('0x64')](_0x48b36d[_0x27ef('0x65')])){_0x48b36d['condition'][_0x27ef('0x30')](function(_0x235c3e){switch(_0x48b36d[_0x27ef('0x65')][_0x27ef('0x5d')]){case'IS':if(_0x45e4f3!=='TagId'&&_0x45e4f3!==_0x27ef('0x66')){if(_[_0x27ef('0x64')](_0x48b36d[_0x27ef('0x5d')])&&_0x48b36d[_0x27ef('0x5d')]['length']>0x1){_0x349138[_0x27ef('0x62')](_0x48b36d['tableAlias']+'.'+_0x45e4f3+_0x27ef('0x67'),_0x48b36d[_0x27ef('0x5d')]);}else{_0x349138['and'](_0x48b36d[_0x27ef('0x68')]+'.'+_0x45e4f3+_0x27ef('0x69'),_0x48b36d[_0x27ef('0x5d')][0x0]);}}break;case'=':_0x349138['and'](_0x48b36d[_0x27ef('0x68')]+'.'+_0x45e4f3+_0x27ef('0x69'),_0x48b36d[_0x27ef('0x5d')]);break;case _0x27ef('0x6a'):if(_0x45e4f3===_0x27ef('0x6b')){_0x349138['and'](_0x27ef('0x6c')+'\x20LIKE\x20?','%'+_0x48b36d['value']+'%');_0x349138['or'](_0x27ef('0x6d')+_0x27ef('0x6e'),'%'+_0x48b36d['value']+'%');_0x349138['or'](_0x27ef('0x6f')+_0x27ef('0x6e'),'%'+_0x48b36d[_0x27ef('0x5d')]+'%');}else{_0x349138[_0x27ef('0x62')](_0x48b36d[_0x27ef('0x68')]+'.'+_0x45e4f3+_0x27ef('0x6e'),'%'+_0x48b36d['value']+'%');}break;case'>':_0x349138[_0x27ef('0x62')](_0x48b36d['tableAlias']+'.'+_0x45e4f3+_0x27ef('0x70'),_0x48b36d[_0x27ef('0x5d')]);break;case'<':_0x349138[_0x27ef('0x62')](_0x48b36d[_0x27ef('0x68')]+'.'+_0x45e4f3+_0x27ef('0x71'),_0x48b36d[_0x27ef('0x5d')]);break;}});}else{switch(_0x48b36d['condition'][_0x27ef('0x5d')]){case'IS':if(_0x45e4f3!==_0x27ef('0x72')&&_0x45e4f3!==_0x27ef('0x66')){if(_[_0x27ef('0x64')](_0x48b36d['value'])&&_0x48b36d[_0x27ef('0x5d')][_0x27ef('0x42')]>0x1){_0x349138[_0x27ef('0x62')](_0x48b36d[_0x27ef('0x68')]+'.'+_0x45e4f3+'\x20IN\x20?',_0x48b36d[_0x27ef('0x5d')]);}else{_0x349138[_0x27ef('0x62')](_0x48b36d[_0x27ef('0x68')]+'.'+_0x45e4f3+_0x27ef('0x69'),_0x48b36d[_0x27ef('0x5d')][0x0]);}}break;case'=':_0x349138[_0x27ef('0x62')](_0x48b36d['tableAlias']+'.'+_0x45e4f3+_0x27ef('0x69'),_0x48b36d[_0x27ef('0x5d')]);break;case _0x27ef('0x6a'):if(_0x45e4f3===_0x27ef('0x6b')){_0x349138[_0x27ef('0x62')](_0x27ef('0x6c')+_0x27ef('0x6e'),'%'+_0x48b36d[_0x27ef('0x5d')]+'%');_0x349138['or'](_0x27ef('0x6d')+_0x27ef('0x6e'),'%'+_0x48b36d[_0x27ef('0x5d')]+'%');_0x349138['or'](_0x27ef('0x6f')+'\x20LIKE\x20?','%'+_0x48b36d[_0x27ef('0x5d')]+'%');}else{_0x349138[_0x27ef('0x62')](_0x48b36d[_0x27ef('0x68')]+'.'+_0x45e4f3+'\x20LIKE\x20?','%'+_0x48b36d[_0x27ef('0x5d')]+'%');}break;case'>':_0x349138[_0x27ef('0x62')](_0x48b36d[_0x27ef('0x68')]+'.'+_0x45e4f3+'\x20>\x20?',_0x48b36d[_0x27ef('0x5d')]);break;case'<':_0x349138[_0x27ef('0x62')](_0x48b36d[_0x27ef('0x68')]+'.'+_0x45e4f3+_0x27ef('0x71'),_0x48b36d['value']);break;}}}});}else{var _0x56ad18=_(Object[_0x27ef('0x3c')](_0x3e3482[_0x27ef('0x3d')]))[_0x27ef('0x73')](function(_0x1506cb){return _0x124239[_0x27ef('0x43')](_0x1506cb)?_0x1506cb:undefined;})[_0x27ef('0x74')](function(_0x3f1a46){return!_[_0x27ef('0x75')](_0x3f1a46);})[_0x27ef('0x5d')]();if(!_[_0x27ef('0x76')](_0x56ad18)){_0x56ad18[_0x27ef('0x30')](function(_0x41a339){if(_0x41a339===_0x27ef('0x77')){_0x12c869[_0x27ef('0x47')]('i.MailAccountId\x20IN\x20?',[][_0x27ef('0x78')](_0x3e3482[_0x27ef('0x3d')][_0x41a339]));}else if(_0x41a339===_0x27ef('0x5c')){var _0x478115=JSON['parse'](_0x3e3482[_0x27ef('0x3d')][_0x41a339])['$gte'];var _0x35411d=JSON[_0x27ef('0x5b')](_0x3e3482[_0x27ef('0x3d')][_0x41a339])[_0x27ef('0x79')];_0x12c869['where'](_0x27ef('0x63'),_0x478115,_0x35411d);}else{if(_0x3e3482['query'][_0x41a339]===_0x27ef('0x7a')){_0x12c869[_0x27ef('0x47')]('i.'+_0x41a339+'\x20IS\x20NULL');}else{_0x12c869['where']('i.'+_0x41a339+'\x20=\x20?',_0x3e3482[_0x27ef('0x3d')][_0x41a339]);}}});}if(_0x3e3482[_0x27ef('0x3d')]['filter']){var _0x254d40=_0x3e3482[_0x27ef('0x3d')][_0x27ef('0x74')]['replace']('\x5c','\x5c\x5c')[_0x27ef('0x7b')]('\x27\x27',_0x27ef('0x7c'));if(qs['isNumeric'](_0x254d40)){_0x349138['or']('i.id\x20LIKE\x20?',_0x254d40+'%');}else if(qs['isEmail'](_0x254d40)){_0x349138['or'](_0x27ef('0x7d'),_0x254d40+'%');}else{var _0x2ac5ef=[];_0x254d40[_0x27ef('0x2f')]('\x20')[_0x27ef('0x30')](function(_0x260384){_0x2ac5ef[_0x27ef('0x31')]('+'+_0x260384[_0x27ef('0x7e')]());});var _0x155180=_0x2ac5ef[_0x27ef('0x7f')]('\x20');_0x349138['or'](_0x27ef('0x80'),_0x155180)['or'](_0x27ef('0x81'),_0x155180);}}}_0x12c869[_0x27ef('0x47')](_0x349138);if(_0xae1e86[_0x27ef('0x45')]){_0xae1e86[_0x27ef('0x45')][_0x27ef('0x30')](function(_0x276889){_0x12c869[_0x27ef('0x45')]('i.'+_0x276889[0x0],_0x276889[0x1]===_0x27ef('0x82')?![]:!![]);});}_0x12c869[_0x27ef('0x83')]('i.id');var _0x532ec4={'type':db['Sequelize']['QueryTypes']['SELECT'],'raw':!![]};var _0x71cb6d=_0x12c869['clone']()['field'](_0x27ef('0x4e'));if(!_0x3e3482[_0x27ef('0x3d')]['advancedFilter']){if(_0x3e3482[_0x27ef('0x3d')][_0x27ef('0x84')]){if(_0x3e3482['query'][_0x27ef('0x84')]==0x1){_0x71cb6d[_0x27ef('0x47')](util[_0x27ef('0x60')](_0x27ef('0x85'),_0x5e8e19['toString']()));_0x12c869['having'](_0x27ef('0x86'));}else{_0x71cb6d[_0x27ef('0x47')](util[_0x27ef('0x60')]('%s\x20>\x200',_0x5e8e19[_0x27ef('0x7e')]()));_0x12c869[_0x27ef('0x87')](_0x27ef('0x88'));}}if(_0x3e3482[_0x27ef('0x3d')][_0x27ef('0x89')]){var _0x454cab=_[_0x27ef('0x64')](_0x3e3482[_0x27ef('0x3d')][_0x27ef('0x89')])?_0x3e3482[_0x27ef('0x3d')][_0x27ef('0x89')]:new Array(_0x3e3482[_0x27ef('0x3d')][_0x27ef('0x89')]);var _0x4ffd6f=squel[_0x27ef('0x59')]();_0x454cab['forEach'](function(_0x1e2022){_0x4ffd6f['or'](_0x27ef('0x8a'),'%,'+_0x1e2022+',%');});_0x12c869[_0x27ef('0x87')](_0x4ffd6f);_0x71cb6d[_0x27ef('0x56')](_0x27ef('0x8b'),'it',_0x27ef('0x8c'));_0x71cb6d[_0x27ef('0x56')](_0x27ef('0x4d'),'t',_0x27ef('0x8d'));_0x71cb6d[_0x27ef('0x47')](_0x27ef('0x8e'),_0x454cab);}}else{var _0x55f713=JSON[_0x27ef('0x5b')](_0x3e3482[_0x27ef('0x3d')][_0x27ef('0x5a')]);_[_0x27ef('0x3c')](_0x55f713)[_0x27ef('0x30')](function(_0x220b72){var _0x2a3e1d=_0x55f713[_0x220b72];if(_0x220b72===_0x27ef('0x72')){var _0x4cbd2f=_0x2a3e1d['value'];var _0x595102=squel['expr']();_0x4cbd2f[_0x27ef('0x30')](function(_0x24c6b5){_0x595102['or'](_0x27ef('0x8a'),'%,'+_0x24c6b5+',%');});_0x12c869[_0x27ef('0x87')](_0x595102);_0x71cb6d[_0x27ef('0x56')](_0x27ef('0x8b'),'it',_0x27ef('0x8c'));_0x71cb6d[_0x27ef('0x56')](_0x27ef('0x4d'),'t',_0x27ef('0x8d'));_0x71cb6d['where'](_0x27ef('0x8e'),_0x4cbd2f);}else if(_0x220b72===_0x27ef('0x66')){if(_0x2a3e1d[_0x27ef('0x5d')][_0x27ef('0x42')]===0x1){if(_0x2a3e1d[_0x27ef('0x5d')][0x0]===0x1){_0x71cb6d['where'](util['format'](_0x27ef('0x85'),_0x5e8e19[_0x27ef('0x7e')]()));_0x12c869['having']('`Messages.count`\x20=\x200');}else{_0x71cb6d['where'](util[_0x27ef('0x60')]('%s\x20>\x200',_0x5e8e19[_0x27ef('0x7e')]()));_0x12c869['having'](_0x27ef('0x88'));}}}});}db[_0x27ef('0x8f')]['query'](_0x71cb6d[_0x27ef('0x7e')](),_0x532ec4)['then'](function(_0x2422c8){_0xbabef6[_0x27ef('0x1c')]=_0x2422c8['length'];if(_0xbabef6[_0x27ef('0x1c')]===0x0)return[];return db['sequelize'][_0x27ef('0x3d')](_0xc4f502['toString'](),_0x532ec4)[_0x27ef('0x23')](function(_0x29a51a){_0x18c886=_[_0x27ef('0x90')](_0x29a51a,'id');_0x532ec4=_[_0x27ef('0x91')](_0x532ec4,{'model':db[_0x27ef('0x32')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x12c869[_0x27ef('0x4a')](_0x27ef('0x92'),_0x27ef('0x93'));_0x12c869[_0x27ef('0x4a')](_0x27ef('0x94'));_0x12c869[_0x27ef('0x4a')](_0x27ef('0x95'));_0x12c869[_0x27ef('0x4a')](_0x27ef('0x96'));_0x12c869[_0x27ef('0x4a')](_0x27ef('0x97'));_0x12c869[_0x27ef('0x4a')]('i.closedAt');_0x12c869[_0x27ef('0x4a')](_0x27ef('0x98'));_0x12c869['field'](_0x27ef('0x99'));_0x12c869[_0x27ef('0x4a')](_0x27ef('0x9a'));_0x12c869[_0x27ef('0x4a')](_0x27ef('0x9b'));_0x12c869['field'](_0x27ef('0x9c'));_0x12c869[_0x27ef('0x4a')](_0x27ef('0x9d'));_0x12c869[_0x27ef('0x4a')]('i.to');_0x12c869[_0x27ef('0x4a')](_0x27ef('0x9e'));_0x12c869[_0x27ef('0x4a')]('i.MailAccountId');_0x12c869[_0x27ef('0x4a')](_0x27ef('0x9f'));_0x12c869[_0x27ef('0x4a')](_0x27ef('0x6c'),_0x27ef('0xa0'));_0x12c869['field'](_0x27ef('0x6d'),_0x27ef('0xa1'));_0x12c869['field'](_0x27ef('0x6f'),_0x27ef('0xa2'));_0x12c869[_0x27ef('0x4a')]('c.phone','Contact.phone');_0x12c869[_0x27ef('0x4a')](_0x27ef('0xa3'),_0x27ef('0xa4'));_0x12c869[_0x27ef('0x4a')](_0x27ef('0xa5'),_0x27ef('0xa6'));_0x12c869[_0x27ef('0x4a')]('GROUP_CONCAT(DISTINCT\x20t.id)','TagIds');_0x12c869[_0x27ef('0x56')]('mail_interaction_has_tags','it',_0x27ef('0x8c'));_0x12c869[_0x27ef('0x56')](_0x27ef('0x4d'),'t',_0x27ef('0x8d'));_0x12c869['limit'](_0xae1e86[_0x27ef('0x1e')]);_0x12c869[_0x27ef('0x1d')](_0xae1e86['offset']);return db[_0x27ef('0x8f')][_0x27ef('0x3d')](_0x12c869[_0x27ef('0x7e')](),_0x532ec4);})[_0x27ef('0x23')](function(_0xbab129){_0x312c01[_0x27ef('0x47')](_0x27ef('0xa7'),_['map'](_0xbab129,'id'));return db[_0x27ef('0x8f')][_0x27ef('0x3d')](_0x312c01[_0x27ef('0x7e')](),_0x532ec4)['then'](function(_0x24dafc){var _0x4f84b9=_[_0x27ef('0xa8')](_0x24dafc,_0x27ef('0xa9'));var _0x5e72ab=[];return db['Setting']['findOne']({'attributes':[_0x27ef('0xaa')],'raw':!![]})['then'](function(_0x2de334){var _0x5297b2=_0x2de334['enableEmailPreview'];_0xbab129[_0x27ef('0x30')](function(_0x39f05e){_0x5e72ab[_0x27ef('0x31')](updateMailInteraction(_0x39f05e,_0x18c886,_0x4f84b9,_0x5297b2));});return BPromise[_0x27ef('0xab')](_0x5e72ab);});});});})[_0x27ef('0x23')](function(_0x387241){_0xbabef6[_0x27ef('0xac')]=_0x387241;return _0xbabef6;})[_0x27ef('0x23')](respondWithFilteredResult(_0x50263b,_0xae1e86))['catch'](handleError(_0x50263b,null));};exports[_0x27ef('0xad')]=function(_0xcb57d2,_0x1f578b){var _0x16ee1a={'raw':![],'where':{'id':_0xcb57d2[_0x27ef('0xae')]['id']}},_0x13074f={};_0x13074f['model']=_[_0x27ef('0x3c')](db[_0x27ef('0x32')][_0x27ef('0x3a')]);_0x13074f['query']=_['keys'](_0xcb57d2[_0x27ef('0x3d')]);_0x13074f[_0x27ef('0x3e')]=_[_0x27ef('0x40')](_0x13074f[_0x27ef('0x3b')],_0x13074f[_0x27ef('0x3d')]);_0x16ee1a['attributes']=_[_0x27ef('0x40')](_0x13074f['model'],qs[_0x27ef('0x41')](_0xcb57d2[_0x27ef('0x3d')]['fields']));_0x16ee1a['attributes']=_0x16ee1a[_0x27ef('0x3f')]['length']?_0x16ee1a[_0x27ef('0x3f')]:_0x13074f[_0x27ef('0x3b')];if(_0xcb57d2[_0x27ef('0x3d')][_0x27ef('0xaf')]){_0x16ee1a[_0x27ef('0xb0')]=[{'all':!![]}];}_0x16ee1a=_[_0x27ef('0x91')]({},_0x16ee1a,_0xcb57d2['options']);return db['MailInteraction'][_0x27ef('0xb1')](_0x16ee1a)[_0x27ef('0x23')](handleEntityNotFound(_0x1f578b,null))[_0x27ef('0x23')](respondWithResult(_0x1f578b,null))[_0x27ef('0x38')](handleError(_0x1f578b,null));};exports['create']=function(_0x1ad44b,_0x1fdb72){return db[_0x27ef('0x32')]['create'](_0x1ad44b[_0x27ef('0xb2')],{})[_0x27ef('0x23')](respondWithResult(_0x1fdb72,0xc9))[_0x27ef('0x38')](handleError(_0x1fdb72,null));};exports[_0x27ef('0x22')]=function(_0x26d2b6,_0x368d67){if(_0x26d2b6[_0x27ef('0xb2')]['id']){delete _0x26d2b6[_0x27ef('0xb2')]['id'];}return db[_0x27ef('0x32')][_0x27ef('0xb1')]({'where':{'id':_0x26d2b6[_0x27ef('0xae')]['id']}})[_0x27ef('0x23')](handleEntityNotFound(_0x368d67,null))[_0x27ef('0x23')](saveUpdates(_0x26d2b6[_0x27ef('0xb2')],null))[_0x27ef('0x23')](respondWithResult(_0x368d67,null))[_0x27ef('0x38')](handleError(_0x368d67,null));};exports[_0x27ef('0x24')]=function(_0xd9f031,_0x271ea8){return db[_0x27ef('0x32')][_0x27ef('0xb1')]({'where':{'id':_0xd9f031[_0x27ef('0xae')]['id']}})[_0x27ef('0x23')](handleEntityNotFound(_0x271ea8,null))[_0x27ef('0x23')](removeEntity(_0x271ea8,null))[_0x27ef('0x38')](handleError(_0x271ea8,null));};exports[_0x27ef('0xb3')]=function(_0x50f684,_0x490e11){return db[_0x27ef('0x32')][_0x27ef('0xb3')]()['then'](respondWithResult(_0x490e11,null))[_0x27ef('0x38')](handleError(_0x490e11,null));};exports[_0x27ef('0xb4')]=function(_0x2a91f8,_0x255108,_0xd3a46f){return db[_0x27ef('0x2a')][_0x27ef('0xb1')]({'where':{'id':_0x2a91f8[_0x27ef('0xae')]['id']}})[_0x27ef('0x23')](handleEntityNotFound(_0x255108,null))[_0x27ef('0x23')](function(_0x1ee804){if(_0x1ee804){return _0x1ee804['addMessage'](_0x2a91f8[_0x27ef('0xb2')][_0x27ef('0xb5')],_[_0x27ef('0xb6')](_0x2a91f8[_0x27ef('0xb2')],['ids','id'])||{});}})['then'](respondWithResult(_0x255108,null))[_0x27ef('0x38')](handleError(_0x255108,null));};exports[_0x27ef('0xb7')]=function(_0x1cd030,_0x8317a3,_0x4bc813){var _0x1b6443={'raw':![],'where':{}};var _0xe41984={};var _0x535484={'count':0x0,'rows':[]};return db['MailInteraction'][_0x27ef('0x33')]({'where':{'id':_0x1cd030[_0x27ef('0xae')]['id']}})['then'](handleEntityNotFound(_0x8317a3,null))[_0x27ef('0x23')](function(_0x4fc353){if(_0x4fc353){_0xe41984['model']=_[_0x27ef('0x3c')](db['MailMessage'][_0x27ef('0x3a')]);_0xe41984[_0x27ef('0x3d')]=_[_0x27ef('0x3c')](_0x1cd030[_0x27ef('0x3d')]);_0xe41984[_0x27ef('0x3e')]=_[_0x27ef('0x40')](_0xe41984['model'],_0xe41984[_0x27ef('0x3d')]);_0x1b6443[_0x27ef('0x3f')]=_['intersection'](_0xe41984[_0x27ef('0x3b')],qs[_0x27ef('0x41')](_0x1cd030[_0x27ef('0x3d')][_0x27ef('0x41')]));_0x1b6443['attributes']=_0x1b6443[_0x27ef('0x3f')]['length']?_0x1b6443['attributes']:_0xe41984[_0x27ef('0x3b')];if(!_0x1cd030[_0x27ef('0x3d')][_0x27ef('0x43')](_0x27ef('0x44'))){_0x1b6443[_0x27ef('0x1e')]=qs[_0x27ef('0x1e')](_0x1cd030[_0x27ef('0x3d')]['limit']);_0x1b6443[_0x27ef('0x1d')]=qs[_0x27ef('0x1d')](_0x1cd030[_0x27ef('0x3d')][_0x27ef('0x1d')]);}_0x1b6443[_0x27ef('0x45')]=qs[_0x27ef('0x46')](_0x1cd030[_0x27ef('0x3d')][_0x27ef('0x46')]);_0x1b6443['where']=qs[_0x27ef('0x3e')](_[_0x27ef('0x48')](_0x1cd030[_0x27ef('0x3d')],_0xe41984[_0x27ef('0x3e')]));_0x1b6443['where'][_0x27ef('0xa9')]=_0x4fc353['id'];if(_0x1cd030[_0x27ef('0x3d')][_0x27ef('0x74')]){_0x1b6443[_0x27ef('0x47')]=_[_0x27ef('0x91')](_0x1b6443[_0x27ef('0x47')],{'$or':_['map'](_0x1b6443[_0x27ef('0x3f')],function(_0x4a84c0){var _0x1a4852={};_0x1a4852[_0x4a84c0]={'$like':'%'+_0x1cd030[_0x27ef('0x3d')][_0x27ef('0x74')]+'%'};return _0x1a4852;})});}if(_0x1cd030['query'][_0x27ef('0xb8')]){var _0x3b19e8=_0x1cd030[_0x27ef('0x3d')]['$gte'][_0x27ef('0x2f')](',');var _0x5c7354={};_0x5c7354[_0x3b19e8[0x0]]={'$gte':moment(_0x3b19e8[0x1])[_0x27ef('0x60')](_0x27ef('0xb9'))};_0x1b6443[_0x27ef('0x47')]=_[_0x27ef('0x91')](_0x1b6443[_0x27ef('0x47')],_0x5c7354);}_0x1b6443=_['merge']({},_0x1b6443,_0x1cd030['options']);return db[_0x27ef('0x2a')]['count']({'where':_0x1b6443[_0x27ef('0x47')]})[_0x27ef('0x23')](function(_0x5e2a8a){_0x535484[_0x27ef('0x1c')]=_0x5e2a8a;if(_0x1cd030[_0x27ef('0x3d')][_0x27ef('0xaf')]){_0x1b6443[_0x27ef('0xb0')]=[{'all':!![]}];}return db['MailMessage'][_0x27ef('0xba')](_0x1b6443);})[_0x27ef('0x23')](function(_0xa0081c){_0x535484['rows']=_0xa0081c;return _0x535484;});}})[_0x27ef('0x23')](respondWithFilteredResult(_0x8317a3,_0x1b6443))['catch'](handleError(_0x8317a3,null));};exports[_0x27ef('0xbb')]=function(_0x6d1b03,_0x142d28,_0x1f029d){return db['MailInteraction']['find']({'where':{'id':_0x6d1b03['params']['id']}})[_0x27ef('0x23')](handleEntityNotFound(_0x142d28,null))[_0x27ef('0x23')](function(_0xddf09c){if(_0xddf09c){return _0xddf09c['setTags'](_0x6d1b03[_0x27ef('0xb2')][_0x27ef('0xb5')],_['omit'](_0x6d1b03['body'],[_0x27ef('0xb5'),'id'])||{})[_0x27ef('0xbc')](function(){return db['Tag'][_0x27ef('0xba')]({'attributes':['id',_0x27ef('0x28'),_0x27ef('0x4b')],'where':{'id':_0x6d1b03['body'][_0x27ef('0xb5')]}});})['then'](function(_0xceafab){socket['emit']('mailInteractionTags:save',{'id':Number(_0x6d1b03['params']['id']),'tags':_0xceafab||[]});return{'id':Number(_0x6d1b03[_0x27ef('0xae')]['id']),'tags':_0xceafab||[]};});}})[_0x27ef('0x23')](respondWithResult(_0x142d28,null))[_0x27ef('0x38')](handleError(_0x142d28,null));};exports[_0x27ef('0xbd')]=function(_0xb995fc,_0x3171b2,_0x4d4f6b){return db[_0x27ef('0x32')][_0x27ef('0xb1')]({'where':{'id':_0xb995fc[_0x27ef('0xae')]['id']}})[_0x27ef('0x23')](handleEntityNotFound(_0x3171b2,null))[_0x27ef('0x23')](function(_0x8990f9){if(_0x8990f9){return _0x8990f9[_0x27ef('0xbd')](_0xb995fc['query'][_0x27ef('0xb5')]);}})[_0x27ef('0x23')](respondWithStatusCode(_0x3171b2,null))['catch'](handleError(_0x3171b2,null));};exports[_0x27ef('0xbe')]=function(_0x53ca61,_0x52eb48){var _0x3b7de0=moment()['unix']()[_0x27ef('0x7e')]();var _0x5a289a=path['join'](config[_0x27ef('0xbf')],'server','files',_0x27ef('0xc0'));var _0xec2fee=path[_0x27ef('0x7f')](config[_0x27ef('0xbf')],_0x27ef('0xc1'),_0x27ef('0xc2'),'tmp');var _0x2e1231=path['join'](_0xec2fee,_0x3b7de0);var _0x3fbee2=util[_0x27ef('0x60')](_0x27ef('0xc3'),_0x3b7de0);var _0x7e2b57=path[_0x27ef('0x7f')](_0xec2fee,_0x3fbee2);var _0x4d5cb3=![];return db[_0x27ef('0x32')][_0x27ef('0xb1')]({'where':{'id':_0x53ca61[_0x27ef('0xae')]['id']}})[_0x27ef('0x23')](handleEntityNotFound(_0x52eb48,null))['then'](function(_0x2ce11f){if(_0x2ce11f){return _0x2ce11f['getMessages']({'attributes':['id',_0x27ef('0xb2'),'from','to','cc',_0x27ef('0xc4'),_0x27ef('0xc5'),_0x27ef('0x5c')],'where':{'secret':![]},'include':_0x53ca61[_0x27ef('0x3d')][_0x27ef('0xc0')]?[{'model':db[_0x27ef('0xc6')],'as':_0x27ef('0xc7')}]:undefined,'order':qs[_0x27ef('0x46')]('id')});}return[];})[_0x27ef('0x23')](function(_0x7850a2){_0x4d5cb3=_0x7850a2[_0x27ef('0x42')];if(_0x7850a2[_0x27ef('0x42')]){fs[_0x27ef('0xc8')](_0x2e1231);return BPromise['each'](_0x7850a2,function(_0x56b738,_0x48559a){var _0x2d7bc1=_0x56b738;var _0x32f2ea={'from':_0x2d7bc1['from'],'to':_0x2d7bc1['to'],'subject':_0x2d7bc1['subject'],'html':_0x2d7bc1[_0x27ef('0xb2')],'headers':{'Date':moment(_0x2d7bc1[_0x27ef('0x5c')])[_0x27ef('0x60')](_0x27ef('0xc9'))},'attachments':[]};if(_0x56b738['cc']){_0x32f2ea[_0x27ef('0xca')]['Cc']=_0x56b738['cc'];}if(_0x56b738[_0x27ef('0xc4')]){_0x32f2ea[_0x27ef('0xca')][_0x27ef('0xcb')]=_0x56b738[_0x27ef('0xc4')];}return new BPromise(function(_0xe36c75,_0x207ccf){if(_0x56b738[_0x27ef('0xc7')]){for(var _0x8465c=0x0;_0x8465c<_0x56b738[_0x27ef('0xc7')][_0x27ef('0x42')];_0x8465c++){var _0x3c905c=_0x56b738[_0x27ef('0xc7')][_0x8465c];var _0x5a881b=path['join'](_0x5a289a,_0x3c905c[_0x27ef('0xcc')]);if(fs[_0x27ef('0xcd')](_0x5a881b)){_0x32f2ea[_0x27ef('0xc0')][_0x27ef('0x31')]({'name':_0x3c905c['name'],'contentType':_0x3c905c['type'],'data':fs['readFileSync'](_0x5a881b)});}}}emlformat[_0x27ef('0xce')](_0x32f2ea,function(_0x5f1ea0,_0x34f40d){if(_0x5f1ea0)return _0x207ccf(_0x5f1ea0);fs['writeFileSync'](path[_0x27ef('0x7f')](_0x2e1231,util['format'](_0x27ef('0xcf'),_0x48559a)),_0x34f40d);return _0xe36c75(_0x34f40d);});});});}})['then'](function(){if(_0x4d5cb3){return new BPromise(function(_0x1b68df,_0x38940d){zipdir(_0x2e1231,{'saveTo':_0x7e2b57},function(_0x5b8c51,_0x1a6dc6){if(_0x5b8c51)return _0x38940d(_0x5b8c51);return _0x1b68df(_0x1a6dc6);});});}})[_0x27ef('0x23')](function(){if(_0x4d5cb3){return new BPromise(function(_0x19e5b8,_0x594982){rimraf(_0x2e1231,function(_0x2981fd){if(_0x2981fd)_0x594982(_0x2981fd);return _0x19e5b8();});});}})['then'](function(){if(_0x4d5cb3){return _0x52eb48[_0x27ef('0xbe')](_0x7e2b57,_0x3fbee2,function(_0x18aba1){if(_0x18aba1){console['log']('err',_0x18aba1);}else{fs['unlinkSync'](_0x7e2b57);}});}else{return _0x52eb48[_0x27ef('0x19')](0xc8);}})['catch'](handleError(_0x52eb48,null));};
\ No newline at end of file
+var _0x0713=['ejs','lodash','squel','crypto','jsforce','desk.js','querystring','html-to-text','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','redis','localhost','./mailInteraction.socket','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','destroy','then','error','stack','name','send','Users','TagIds','Tags','push','findOne','lastMsgBody','lastMsgText','trimStart','catch','MailInteraction','model','query','filters','intersection','fields','attributes','length','hasOwnProperty','limit','order','sort','where','pick','field','color','from','mail_messages','me.MailInteractionId\x20=\x20i.id','me.direction\x20=\x20\x27in\x27','me.read\x20=\x20false','user_has_mail_interactions','users','u.id\x20=\x20ui.UserId','select','mail_interactions','left_join','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL','o.id\x20=\x20i.UserId','mail_accounts','a.id\x20=\x20i.MailAccountId','me.MailInteractionId\x20=\x20i.id\x20AND\x20me.direction\x20=\x20\x27in\x27\x20AND\x20me.read\x20=\x20false','expr','advancedFilter','parse','keys','forEach','dateStart','startOf','day','format','and','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','condition','TagId','unreadMessages','isArray','value','tableAlias','\x20=\x20?','LIKE','ContactId','c.firstName','c.lastName','\x20LIKE\x20?','c.email','\x20<\x20?','\x20IN\x20?','\x20>\x20?','map','isNil','isEmpty','MailAccountId','i.MailAccountId\x20IN\x20?','concat','createdAt','$gte','$lte','null','filter','replace','isNumeric','i.id\x20LIKE\x20?','isEmail','c.email\x20LIKE\x20?','split','toString','join','MATCH\x20(i.to,\x20i.subject)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','MATCH\x20(me.plainBody,\x20me.subject)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','DESC','group','i.id','Sequelize','QueryTypes','SELECT','clone','COUNT(*)','read','having','`unreadMessages`\x20=\x200','`unreadMessages`\x20>\x200','tag','mail_interaction_has_tags','it.MailInteractionId\x20=\x20i.id','tools_tags','t.id\x20=\x20it.TagId','t.id\x20IN\x20?','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','keyBy','COUNT(me.id)','a.key','Account.key','i.createdAt','i.updatedAt','i.attach','i.lastMsgAt','i.lastMsgDirection','i.subject','i.disposition','i.to','i.ContactId','i.MailAccountId','i.UserId','Contact.email','c.phone','Contact.phone','c.mobile','Contact.fax','sequelize','ui.MailInteractionId\x20IN\x20?','MailInteractionId','enableEmailPreview','all','rows','rawAttributes','includeAll','include','merge','options','find','create','body','params','describe','addMessage','ids','omit','getMessages','MailMessage','nolimit','YYYY-MM-DD\x20HH:mm:ss','setTags','spread','Tag','emit','mailInteractionTags:save','removeTags','download','unix','server','files','root','tmp','bcc','subject','attachments','Attachment','Attachments','mkdirSync','each','headers','Bcc','existsSync','type','readFileSync','build','writeFileSync','err','unlinkSync','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv'];(function(_0x2c786c,_0x15d810){var _0x3d7d8e=function(_0x8accde){while(--_0x8accde){_0x2c786c['push'](_0x2c786c['shift']());}};_0x3d7d8e(++_0x15d810);}(_0x0713,0x1ba));var _0x3071=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0713[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x3071('0x0'));var zipdir=require(_0x3071('0x1'));var jsonpatch=require(_0x3071('0x2'));var rp=require(_0x3071('0x3'));var moment=require(_0x3071('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x3071('0x5'));var util=require(_0x3071('0x6'));var path=require(_0x3071('0x7'));var sox=require(_0x3071('0x8'));var csv=require(_0x3071('0x9'));var ejs=require(_0x3071('0xa'));var fs=require('fs');var _=require(_0x3071('0xb'));var squel=require(_0x3071('0xc'));var crypto=require(_0x3071('0xd'));var jsforce=require(_0x3071('0xe'));var deskjs=require(_0x3071('0xf'));var toCsv=require(_0x3071('0x9'));var querystring=require(_0x3071('0x10'));var Papa=require('papaparse');var htmlToText=require(_0x3071('0x11'));var Redis=require(_0x3071('0x12'));var authService=require(_0x3071('0x13'));var qs=require(_0x3071('0x14'));var hardwareService=require(_0x3071('0x15'));var logger=require('../../config/logger')(_0x3071('0x16'));var utils=require(_0x3071('0x17'));var config=require(_0x3071('0x18'));var db=require(_0x3071('0x19'))['db'];config[_0x3071('0x1a')]=_['defaults'](config['redis'],{'host':_0x3071('0x1b'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x3071('0x1a')]));require(_0x3071('0x1c'))['register'](socket);function respondWithStatusCode(_0x104e73,_0x4e1219){_0x4e1219=_0x4e1219||0xcc;return function(_0x2fc15d){if(_0x2fc15d){return _0x104e73[_0x3071('0x1d')](_0x4e1219);}return _0x104e73[_0x3071('0x1e')](_0x4e1219)[_0x3071('0x1f')]();};}function respondWithResult(_0x1caa5d,_0x2a6a4b){_0x2a6a4b=_0x2a6a4b||0xc8;return function(_0x157a47){if(_0x157a47){return _0x1caa5d[_0x3071('0x1e')](_0x2a6a4b)[_0x3071('0x20')](_0x157a47);}};}function respondWithFilteredResult(_0x344ea6,_0x5f3c22){return function(_0x224996){if(_0x224996){var _0x17dbda=_0x224996[_0x3071('0x21')],_0x1068d9=_0x5f3c22[_0x3071('0x22')],_0x108a83=_0x5f3c22[_0x3071('0x22')]+_0x5f3c22['limit'],_0x3acf0e;if(_0x108a83>=_0x17dbda){_0x108a83=_0x17dbda;_0x3acf0e=0xc8;}else{_0x3acf0e=0xce;}_0x344ea6[_0x3071('0x1e')](_0x3acf0e);return _0x344ea6[_0x3071('0x23')](_0x3071('0x24'),_0x1068d9+'-'+_0x108a83+'/'+_0x17dbda)['json'](_0x224996);}return null;};}function patchUpdates(_0xb8f4e3){return function(_0x5cd80d){try{jsonpatch[_0x3071('0x25')](_0x5cd80d,_0xb8f4e3,!![]);}catch(_0x43128c){return BPromise[_0x3071('0x26')](_0x43128c);}return _0x5cd80d[_0x3071('0x27')]();};}function saveUpdates(_0x33090c,_0x34c50e){return function(_0x3c5cef){if(_0x3c5cef){return _0x3c5cef[_0x3071('0x28')](_0x33090c)['then'](function(_0x481a51){return _0x481a51;});}return null;};}function removeEntity(_0x2ce48a,_0xb05b1d){return function(_0x412652){if(_0x412652){return _0x412652[_0x3071('0x29')]()[_0x3071('0x2a')](function(){_0x2ce48a[_0x3071('0x1e')](0xcc)[_0x3071('0x1f')]();});}};}function handleEntityNotFound(_0x1fe727,_0x1de5fb){return function(_0x4c7130){if(!_0x4c7130){_0x1fe727[_0x3071('0x1d')](0x194);}return _0x4c7130;};}function handleError(_0x3f1e6e,_0x177138){_0x177138=_0x177138||0x1f4;return function(_0x4d5c4b){logger[_0x3071('0x2b')](_0x4d5c4b[_0x3071('0x2c')]);if(_0x4d5c4b[_0x3071('0x2d')]){delete _0x4d5c4b[_0x3071('0x2d')];}_0x3f1e6e[_0x3071('0x1e')](_0x177138)[_0x3071('0x2e')](_0x4d5c4b);};}function getInteractionUsers(_0x177b5f,_0x3921a1){return new BPromise(function(_0x32f1b4,_0x292205){try{if(_0x3921a1[_0x177b5f['id']]){_0x177b5f[_0x3071('0x2f')]=_['map'](_0x3921a1[_0x177b5f['id']],function(_0x4f1484){return{'id':_0x4f1484['id']};});}}catch(_0x9e26d1){_0x292205(_0x9e26d1);}_0x32f1b4(_0x177b5f);});}function getInteractionTags(_0x149e0d,_0x6ddf96){return new BPromise(function(_0x40be95,_0x3f6d90){try{if(_0x149e0d[_0x3071('0x30')]){_0x149e0d[_0x3071('0x31')]=[];_0x149e0d[_0x3071('0x30')]['split'](',')['forEach'](function(_0x4ab983){_0x149e0d[_0x3071('0x31')][_0x3071('0x32')](_0x6ddf96[_0x4ab983]);});}delete _0x149e0d['TagIds'];}catch(_0x17407a){_0x3f6d90(_0x17407a);}_0x40be95(_0x149e0d);});}function getLastMessageText(_0x28747d){return new BPromise(function(_0x25250e,_0x13ae2c){return db['MailInteraction'][_0x3071('0x33')]({'where':{'id':_0x28747d['id']},'attributes':[_0x3071('0x34'),_0x3071('0x35')],'raw':!![]})[_0x3071('0x2a')](function(_0x148096){if(!_0x148096[_0x3071('0x35')]){_0x28747d[_0x3071('0x35')]=_[_0x3071('0x36')](htmlToText['fromString'](_0x148096[_0x3071('0x34')],{'preserveNewlines':!![],'singleNewLineParagraphs':!![],'uppercaseHeadings':![],'noLinkBrackets':!![],'ignoreImage':!![]}));}else{_0x28747d['lastMsgText']=_0x148096['lastMsgText'];}_0x25250e(_0x28747d);})[_0x3071('0x37')](function(_0xa3a7ae){_0x13ae2c(_0xa3a7ae);});});}function updateMailInteraction(_0x54d9c3,_0x2e85c8,_0x46e94e,_0x265d76){return new BPromise(function(_0x14ac42,_0xc60572){return getInteractionUsers(_0x54d9c3,_0x46e94e)[_0x3071('0x2a')](function(_0x5610ab){return getInteractionTags(_0x5610ab,_0x2e85c8);})[_0x3071('0x2a')](function(_0xd7971f){if(_0x265d76){_0x14ac42(getLastMessageText(_0xd7971f));}else{_0x14ac42(_0xd7971f);}})['catch'](function(_0x44ad05){_0xc60572(_0x44ad05);});});}exports['index']=function(_0x28f855,_0x43133a){var _0x5733e9={},_0x593c99={},_0x283074={'count':0x0,'rows':[]};var _0x185f63=db[_0x3071('0x38')]['rawAttributes'];_0x593c99[_0x3071('0x39')]=_['keys'](_0x185f63);_0x593c99[_0x3071('0x3a')]=_['keys'](_0x28f855[_0x3071('0x3a')]);_0x593c99[_0x3071('0x3b')]=_[_0x3071('0x3c')](_0x593c99[_0x3071('0x39')],_0x593c99[_0x3071('0x3a')]);_0x5733e9['attributes']=_['intersection'](_0x593c99[_0x3071('0x39')],qs[_0x3071('0x3d')](_0x28f855[_0x3071('0x3a')][_0x3071('0x3d')]));_0x5733e9['attributes']=_0x5733e9[_0x3071('0x3e')][_0x3071('0x3f')]?_0x5733e9[_0x3071('0x3e')]:_0x593c99[_0x3071('0x39')];if(!_0x28f855[_0x3071('0x3a')][_0x3071('0x40')]('nolimit')){_0x5733e9[_0x3071('0x41')]=qs['limit'](_0x28f855['query']['limit']);_0x5733e9['offset']=qs[_0x3071('0x22')](_0x28f855[_0x3071('0x3a')][_0x3071('0x22')]);}_0x5733e9[_0x3071('0x42')]=qs[_0x3071('0x43')](_0x28f855[_0x3071('0x3a')][_0x3071('0x43')]);_0x5733e9[_0x3071('0x44')]=qs['filters'](_[_0x3071('0x45')](_0x28f855[_0x3071('0x3a')],_0x593c99[_0x3071('0x3b')]));var _0x151a9c=[];var _0x93cbcc=squel['select']()['field']('id')[_0x3071('0x46')](_0x3071('0x2d'))[_0x3071('0x46')](_0x3071('0x47'))[_0x3071('0x48')]('tools_tags');var _0x9444d=squel['select']()[_0x3071('0x46')]('COUNT(*)')['from'](_0x3071('0x49'),'me')['where'](_0x3071('0x4a'))['where'](_0x3071('0x4b'))[_0x3071('0x44')](_0x3071('0x4c'));var _0x25d752=squel['select']()[_0x3071('0x46')]('u.id')[_0x3071('0x46')]('ui.MailInteractionId')[_0x3071('0x48')](_0x3071('0x4d'),'ui')['left_join'](_0x3071('0x4e'),'u',_0x3071('0x4f'));var _0x224a70=squel[_0x3071('0x50')]()[_0x3071('0x48')](_0x3071('0x51'),'i')[_0x3071('0x52')]('cm_contacts','c',_0x3071('0x53'))[_0x3071('0x52')](_0x3071('0x4e'),'o',_0x3071('0x54'))['left_join'](_0x3071('0x55'),'a',_0x3071('0x56'))[_0x3071('0x52')](_0x3071('0x49'),'me',_0x3071('0x57'));var _0x26c8e4=squel[_0x3071('0x58')]();if(_0x28f855[_0x3071('0x3a')][_0x3071('0x59')]){var _0x32b2e2=JSON[_0x3071('0x5a')](_0x28f855[_0x3071('0x3a')][_0x3071('0x59')]);_[_0x3071('0x5b')](_0x32b2e2)[_0x3071('0x5c')](function(_0x12be97){var _0x596cdd=_0x32b2e2[_0x12be97];if(_0x12be97==='createdAt'){var _0x12536d=moment(_0x596cdd['value'][_0x3071('0x5d')])[_0x3071('0x5e')](_0x3071('0x5f'))['utc']()[_0x3071('0x60')]();var _0x1ada95=moment(_0x1ada95)['utc']()['endOf'](_0x3071('0x5f'))[_0x3071('0x60')]();_0x26c8e4[_0x3071('0x61')](_0x3071('0x62'),_0x12536d,_0x1ada95);}else{if(_['isArray'](_0x596cdd[_0x3071('0x63')])){_0x596cdd[_0x3071('0x63')][_0x3071('0x5c')](function(_0x41f02a){switch(_0x596cdd[_0x3071('0x63')]['value']){case'IS':if(_0x12be97!==_0x3071('0x64')&&_0x12be97!==_0x3071('0x65')){if(_[_0x3071('0x66')](_0x596cdd[_0x3071('0x67')])&&_0x596cdd[_0x3071('0x67')][_0x3071('0x3f')]>0x1){_0x26c8e4[_0x3071('0x61')](_0x596cdd['tableAlias']+'.'+_0x12be97+'\x20IN\x20?',_0x596cdd[_0x3071('0x67')]);}else{_0x26c8e4['and'](_0x596cdd[_0x3071('0x68')]+'.'+_0x12be97+_0x3071('0x69'),_0x596cdd['value'][0x0]);}}break;case'=':_0x26c8e4[_0x3071('0x61')](_0x596cdd[_0x3071('0x68')]+'.'+_0x12be97+'\x20=\x20?',_0x596cdd[_0x3071('0x67')]);break;case _0x3071('0x6a'):if(_0x12be97===_0x3071('0x6b')){_0x26c8e4[_0x3071('0x61')](_0x3071('0x6c')+'\x20LIKE\x20?','%'+_0x596cdd[_0x3071('0x67')]+'%');_0x26c8e4['or'](_0x3071('0x6d')+_0x3071('0x6e'),'%'+_0x596cdd['value']+'%');_0x26c8e4['or'](_0x3071('0x6f')+_0x3071('0x6e'),'%'+_0x596cdd[_0x3071('0x67')]+'%');}else{_0x26c8e4[_0x3071('0x61')](_0x596cdd[_0x3071('0x68')]+'.'+_0x12be97+_0x3071('0x6e'),'%'+_0x596cdd[_0x3071('0x67')]+'%');}break;case'>':_0x26c8e4[_0x3071('0x61')](_0x596cdd[_0x3071('0x68')]+'.'+_0x12be97+'\x20>\x20?',_0x596cdd[_0x3071('0x67')]);break;case'<':_0x26c8e4[_0x3071('0x61')](_0x596cdd[_0x3071('0x68')]+'.'+_0x12be97+_0x3071('0x70'),_0x596cdd[_0x3071('0x67')]);break;}});}else{switch(_0x596cdd[_0x3071('0x63')][_0x3071('0x67')]){case'IS':if(_0x12be97!==_0x3071('0x64')&&_0x12be97!==_0x3071('0x65')){if(_[_0x3071('0x66')](_0x596cdd[_0x3071('0x67')])&&_0x596cdd['value'][_0x3071('0x3f')]>0x1){_0x26c8e4[_0x3071('0x61')](_0x596cdd[_0x3071('0x68')]+'.'+_0x12be97+_0x3071('0x71'),_0x596cdd[_0x3071('0x67')]);}else{_0x26c8e4[_0x3071('0x61')](_0x596cdd[_0x3071('0x68')]+'.'+_0x12be97+_0x3071('0x69'),_0x596cdd['value'][0x0]);}}break;case'=':_0x26c8e4[_0x3071('0x61')](_0x596cdd[_0x3071('0x68')]+'.'+_0x12be97+'\x20=\x20?',_0x596cdd['value']);break;case _0x3071('0x6a'):if(_0x12be97===_0x3071('0x6b')){_0x26c8e4[_0x3071('0x61')](_0x3071('0x6c')+'\x20LIKE\x20?','%'+_0x596cdd['value']+'%');_0x26c8e4['or'](_0x3071('0x6d')+'\x20LIKE\x20?','%'+_0x596cdd['value']+'%');_0x26c8e4['or']('c.email'+'\x20LIKE\x20?','%'+_0x596cdd[_0x3071('0x67')]+'%');}else{_0x26c8e4[_0x3071('0x61')](_0x596cdd[_0x3071('0x68')]+'.'+_0x12be97+'\x20LIKE\x20?','%'+_0x596cdd[_0x3071('0x67')]+'%');}break;case'>':_0x26c8e4[_0x3071('0x61')](_0x596cdd[_0x3071('0x68')]+'.'+_0x12be97+_0x3071('0x72'),_0x596cdd['value']);break;case'<':_0x26c8e4[_0x3071('0x61')](_0x596cdd[_0x3071('0x68')]+'.'+_0x12be97+'\x20<\x20?',_0x596cdd[_0x3071('0x67')]);break;}}}});}else{var _0x29ee70=_(Object[_0x3071('0x5b')](_0x28f855[_0x3071('0x3a')]))[_0x3071('0x73')](function(_0x11ffdd){return _0x185f63[_0x3071('0x40')](_0x11ffdd)?_0x11ffdd:undefined;})['filter'](function(_0x5dde93){return!_[_0x3071('0x74')](_0x5dde93);})[_0x3071('0x67')]();if(!_[_0x3071('0x75')](_0x29ee70)){_0x29ee70['forEach'](function(_0x53ebfe){if(_0x53ebfe===_0x3071('0x76')){_0x224a70[_0x3071('0x44')](_0x3071('0x77'),[][_0x3071('0x78')](_0x28f855[_0x3071('0x3a')][_0x53ebfe]));}else if(_0x53ebfe===_0x3071('0x79')){var _0x19bc85=JSON[_0x3071('0x5a')](_0x28f855['query'][_0x53ebfe])[_0x3071('0x7a')];var _0x5ea33f=JSON[_0x3071('0x5a')](_0x28f855[_0x3071('0x3a')][_0x53ebfe])[_0x3071('0x7b')];_0x224a70[_0x3071('0x44')](_0x3071('0x62'),_0x19bc85,_0x5ea33f);}else{if(_0x28f855[_0x3071('0x3a')][_0x53ebfe]===_0x3071('0x7c')){_0x224a70[_0x3071('0x44')]('i.'+_0x53ebfe+'\x20IS\x20NULL');}else{_0x224a70[_0x3071('0x44')]('i.'+_0x53ebfe+_0x3071('0x69'),_0x28f855[_0x3071('0x3a')][_0x53ebfe]);}}});}if(_0x28f855['query'][_0x3071('0x7d')]){var _0x22ec7b=_0x28f855[_0x3071('0x3a')]['filter']['replace']('\x5c','\x5c\x5c')[_0x3071('0x7e')]('\x27\x27','\x27\x27\x27\x27');if(qs[_0x3071('0x7f')](_0x22ec7b)){_0x26c8e4['or'](_0x3071('0x80'),_0x22ec7b+'%');}else if(qs[_0x3071('0x81')](_0x22ec7b)){_0x26c8e4['or'](_0x3071('0x82'),_0x22ec7b+'%');}else{var _0x311939=[];_0x22ec7b[_0x3071('0x83')]('\x20')[_0x3071('0x5c')](function(_0x4c67ec){_0x311939[_0x3071('0x32')]('+'+_0x4c67ec[_0x3071('0x84')]());});var _0x42d310=_0x311939[_0x3071('0x85')]('\x20');_0x26c8e4['or'](_0x3071('0x86'),_0x42d310)['or'](_0x3071('0x87'),_0x42d310);}}}_0x224a70[_0x3071('0x44')](_0x26c8e4);if(_0x5733e9[_0x3071('0x42')]){_0x5733e9['order'][_0x3071('0x5c')](function(_0x5ed436){_0x224a70[_0x3071('0x42')]('i.'+_0x5ed436[0x0],_0x5ed436[0x1]===_0x3071('0x88')?![]:!![]);});}_0x224a70[_0x3071('0x89')](_0x3071('0x8a'));var _0x33746e={'type':db[_0x3071('0x8b')][_0x3071('0x8c')][_0x3071('0x8d')],'raw':!![]};var _0x77df0=_0x224a70[_0x3071('0x8e')]()['field'](_0x3071('0x8f'))[_0x3071('0x46')]('COUNT(me.id)',_0x3071('0x65'));if(!_0x28f855[_0x3071('0x3a')][_0x3071('0x59')]){if(_0x28f855[_0x3071('0x3a')][_0x3071('0x90')]){if(_0x28f855['query']['read']==0x1){_0x77df0[_0x3071('0x91')]('`unreadMessages`\x20=\x200');_0x224a70[_0x3071('0x91')](_0x3071('0x92'));}else{_0x77df0[_0x3071('0x91')](_0x3071('0x93'));_0x224a70[_0x3071('0x91')](_0x3071('0x93'));}}if(_0x28f855['query'][_0x3071('0x94')]){var _0xa732ea=_[_0x3071('0x66')](_0x28f855[_0x3071('0x3a')]['tag'])?_0x28f855[_0x3071('0x3a')][_0x3071('0x94')]:new Array(_0x28f855['query'][_0x3071('0x94')]);var _0x2ea7e9=squel[_0x3071('0x58')]();_0xa732ea[_0x3071('0x5c')](function(_0x34e4f3){_0x2ea7e9['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x34e4f3+',%');});_0x224a70[_0x3071('0x91')](_0x2ea7e9);_0x77df0['left_join'](_0x3071('0x95'),'it',_0x3071('0x96'));_0x77df0[_0x3071('0x52')](_0x3071('0x97'),'t',_0x3071('0x98'));_0x77df0[_0x3071('0x44')](_0x3071('0x99'),_0xa732ea);}}else{var _0x32b2e2=JSON['parse'](_0x28f855[_0x3071('0x3a')][_0x3071('0x59')]);_[_0x3071('0x5b')](_0x32b2e2)['forEach'](function(_0xc62ee){var _0x5d22b0=_0x32b2e2[_0xc62ee];if(_0xc62ee===_0x3071('0x64')){var _0x5a5861=_0x5d22b0[_0x3071('0x67')];var _0x5e0cbd=squel[_0x3071('0x58')]();_0x5a5861[_0x3071('0x5c')](function(_0x3cbb6e){_0x5e0cbd['or'](_0x3071('0x9a'),'%,'+_0x3cbb6e+',%');});_0x224a70[_0x3071('0x91')](_0x5e0cbd);_0x77df0[_0x3071('0x52')](_0x3071('0x95'),'it',_0x3071('0x96'));_0x77df0[_0x3071('0x52')]('tools_tags','t',_0x3071('0x98'));_0x77df0[_0x3071('0x44')](_0x3071('0x99'),_0x5a5861);}else if(_0xc62ee==='unreadMessages'){if(_0x5d22b0['value']['length']===0x1){if(_0x5d22b0['value'][0x0]===0x1){_0x77df0['having'](_0x3071('0x92'));_0x224a70[_0x3071('0x91')]('`unreadMessages`\x20=\x200');}else{_0x77df0[_0x3071('0x91')](_0x3071('0x93'));_0x224a70[_0x3071('0x91')]('`unreadMessages`\x20>\x200');}}}});}db['sequelize'][_0x3071('0x3a')](_0x77df0[_0x3071('0x84')](),_0x33746e)[_0x3071('0x2a')](function(_0x8cdb97){_0x283074[_0x3071('0x21')]=_0x8cdb97[_0x3071('0x3f')];if(_0x283074[_0x3071('0x21')]===0x0)return[];return db['sequelize']['query'](_0x93cbcc[_0x3071('0x84')](),_0x33746e)[_0x3071('0x2a')](function(_0x3db9c8){_0x151a9c=_[_0x3071('0x9b')](_0x3db9c8,'id');_0x33746e=_['merge'](_0x33746e,{'model':db[_0x3071('0x38')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x224a70[_0x3071('0x46')](_0x3071('0x9c'),_0x3071('0x65'));_0x224a70[_0x3071('0x46')](_0x3071('0x9d'),_0x3071('0x9e'));_0x224a70[_0x3071('0x46')]('i.id');_0x224a70[_0x3071('0x46')](_0x3071('0x9f'));_0x224a70[_0x3071('0x46')](_0x3071('0xa0'));_0x224a70[_0x3071('0x46')]('i.closed');_0x224a70[_0x3071('0x46')]('i.closedAt');_0x224a70['field'](_0x3071('0xa1'));_0x224a70[_0x3071('0x46')](_0x3071('0xa2'));_0x224a70['field'](_0x3071('0xa3'));_0x224a70[_0x3071('0x46')](_0x3071('0xa4'));_0x224a70[_0x3071('0x46')](_0x3071('0xa5'));_0x224a70['field']('i.substatus');_0x224a70[_0x3071('0x46')](_0x3071('0xa6'));_0x224a70['field'](_0x3071('0xa7'));_0x224a70[_0x3071('0x46')](_0x3071('0xa8'));_0x224a70[_0x3071('0x46')](_0x3071('0xa9'));_0x224a70['field'](_0x3071('0x6c'),'Contact.firstName');_0x224a70[_0x3071('0x46')](_0x3071('0x6d'),'Contact.lastName');_0x224a70[_0x3071('0x46')]('c.email',_0x3071('0xaa'));_0x224a70[_0x3071('0x46')](_0x3071('0xab'),_0x3071('0xac'));_0x224a70['field'](_0x3071('0xad'),'Contact.mobile');_0x224a70[_0x3071('0x46')]('c.fax',_0x3071('0xae'));_0x224a70[_0x3071('0x46')]('GROUP_CONCAT(DISTINCT\x20t.id)',_0x3071('0x30'));_0x224a70[_0x3071('0x52')]('mail_interaction_has_tags','it',_0x3071('0x96'));_0x224a70[_0x3071('0x52')](_0x3071('0x97'),'t',_0x3071('0x98'));_0x224a70[_0x3071('0x41')](_0x5733e9[_0x3071('0x41')]);_0x224a70[_0x3071('0x22')](_0x5733e9[_0x3071('0x22')]);return db[_0x3071('0xaf')][_0x3071('0x3a')](_0x224a70[_0x3071('0x84')](),_0x33746e);})[_0x3071('0x2a')](function(_0x397a07){_0x25d752[_0x3071('0x44')](_0x3071('0xb0'),_['map'](_0x397a07,'id'));return db[_0x3071('0xaf')][_0x3071('0x3a')](_0x25d752[_0x3071('0x84')](),_0x33746e)[_0x3071('0x2a')](function(_0x19f63d){var _0x5910a7=_['groupBy'](_0x19f63d,_0x3071('0xb1'));var _0x2e7859=[];return db['Setting'][_0x3071('0x33')]({'attributes':[_0x3071('0xb2')],'raw':!![]})['then'](function(_0x49c3e8){var _0x2edff8=_0x49c3e8[_0x3071('0xb2')];_0x397a07[_0x3071('0x5c')](function(_0x30ed66){_0x2e7859[_0x3071('0x32')](updateMailInteraction(_0x30ed66,_0x151a9c,_0x5910a7,_0x2edff8));});return BPromise[_0x3071('0xb3')](_0x2e7859);});});});})[_0x3071('0x2a')](function(_0xbee265){_0x283074[_0x3071('0xb4')]=_0xbee265;return _0x283074;})['then'](respondWithFilteredResult(_0x43133a,_0x5733e9))[_0x3071('0x37')](handleError(_0x43133a,null));};exports['show']=function(_0x1abbff,_0x322154){var _0x46ab46={'raw':![],'where':{'id':_0x1abbff['params']['id']}},_0x3d4d6b={};_0x3d4d6b['model']=_['keys'](db[_0x3071('0x38')][_0x3071('0xb5')]);_0x3d4d6b[_0x3071('0x3a')]=_[_0x3071('0x5b')](_0x1abbff['query']);_0x3d4d6b[_0x3071('0x3b')]=_[_0x3071('0x3c')](_0x3d4d6b[_0x3071('0x39')],_0x3d4d6b['query']);_0x46ab46['attributes']=_['intersection'](_0x3d4d6b['model'],qs[_0x3071('0x3d')](_0x1abbff[_0x3071('0x3a')]['fields']));_0x46ab46[_0x3071('0x3e')]=_0x46ab46[_0x3071('0x3e')][_0x3071('0x3f')]?_0x46ab46[_0x3071('0x3e')]:_0x3d4d6b[_0x3071('0x39')];if(_0x1abbff['query'][_0x3071('0xb6')]){_0x46ab46[_0x3071('0xb7')]=[{'all':!![]}];}_0x46ab46=_[_0x3071('0xb8')]({},_0x46ab46,_0x1abbff[_0x3071('0xb9')]);return db['MailInteraction'][_0x3071('0xba')](_0x46ab46)['then'](handleEntityNotFound(_0x322154,null))[_0x3071('0x2a')](respondWithResult(_0x322154,null))[_0x3071('0x37')](handleError(_0x322154,null));};exports[_0x3071('0xbb')]=function(_0x4ec7a4,_0x100be7){return db[_0x3071('0x38')][_0x3071('0xbb')](_0x4ec7a4[_0x3071('0xbc')],{})['then'](respondWithResult(_0x100be7,0xc9))[_0x3071('0x37')](handleError(_0x100be7,null));};exports[_0x3071('0x28')]=function(_0xc326c2,_0x35bde9){if(_0xc326c2[_0x3071('0xbc')]['id']){delete _0xc326c2['body']['id'];}return db['MailInteraction'][_0x3071('0xba')]({'where':{'id':_0xc326c2[_0x3071('0xbd')]['id']}})[_0x3071('0x2a')](handleEntityNotFound(_0x35bde9,null))[_0x3071('0x2a')](saveUpdates(_0xc326c2['body'],null))['then'](respondWithResult(_0x35bde9,null))[_0x3071('0x37')](handleError(_0x35bde9,null));};exports[_0x3071('0x29')]=function(_0x5a18f7,_0xdd926b){return db[_0x3071('0x38')][_0x3071('0xba')]({'where':{'id':_0x5a18f7['params']['id']}})['then'](handleEntityNotFound(_0xdd926b,null))['then'](removeEntity(_0xdd926b,null))[_0x3071('0x37')](handleError(_0xdd926b,null));};exports[_0x3071('0xbe')]=function(_0x31e1,_0x4a92d8){return db['MailInteraction'][_0x3071('0xbe')]()[_0x3071('0x2a')](respondWithResult(_0x4a92d8,null))[_0x3071('0x37')](handleError(_0x4a92d8,null));};exports[_0x3071('0xbf')]=function(_0x41e6c4,_0x5d4ea9,_0x3422d8){return db['MailMessage'][_0x3071('0xba')]({'where':{'id':_0x41e6c4[_0x3071('0xbd')]['id']}})[_0x3071('0x2a')](handleEntityNotFound(_0x5d4ea9,null))[_0x3071('0x2a')](function(_0x1817a8){if(_0x1817a8){return _0x1817a8['addMessage'](_0x41e6c4[_0x3071('0xbc')][_0x3071('0xc0')],_[_0x3071('0xc1')](_0x41e6c4[_0x3071('0xbc')],[_0x3071('0xc0'),'id'])||{});}})[_0x3071('0x2a')](respondWithResult(_0x5d4ea9,null))[_0x3071('0x37')](handleError(_0x5d4ea9,null));};exports[_0x3071('0xc2')]=function(_0xc6bc56,_0x109d20,_0x41cc75){var _0x4ffbec={'raw':![],'where':{}};var _0x334d3a={};var _0x21d4b8={'count':0x0,'rows':[]};return db[_0x3071('0x38')][_0x3071('0x33')]({'where':{'id':_0xc6bc56['params']['id']}})[_0x3071('0x2a')](handleEntityNotFound(_0x109d20,null))['then'](function(_0x17a9f5){if(_0x17a9f5){_0x334d3a[_0x3071('0x39')]=_[_0x3071('0x5b')](db[_0x3071('0xc3')][_0x3071('0xb5')]);_0x334d3a[_0x3071('0x3a')]=_[_0x3071('0x5b')](_0xc6bc56['query']);_0x334d3a[_0x3071('0x3b')]=_['intersection'](_0x334d3a['model'],_0x334d3a[_0x3071('0x3a')]);_0x4ffbec[_0x3071('0x3e')]=_['intersection'](_0x334d3a[_0x3071('0x39')],qs['fields'](_0xc6bc56[_0x3071('0x3a')][_0x3071('0x3d')]));_0x4ffbec[_0x3071('0x3e')]=_0x4ffbec[_0x3071('0x3e')][_0x3071('0x3f')]?_0x4ffbec[_0x3071('0x3e')]:_0x334d3a[_0x3071('0x39')];if(!_0xc6bc56[_0x3071('0x3a')][_0x3071('0x40')](_0x3071('0xc4'))){_0x4ffbec[_0x3071('0x41')]=qs['limit'](_0xc6bc56[_0x3071('0x3a')][_0x3071('0x41')]);_0x4ffbec[_0x3071('0x22')]=qs['offset'](_0xc6bc56[_0x3071('0x3a')]['offset']);}_0x4ffbec[_0x3071('0x42')]=qs[_0x3071('0x43')](_0xc6bc56[_0x3071('0x3a')][_0x3071('0x43')]);_0x4ffbec['where']=qs['filters'](_['pick'](_0xc6bc56[_0x3071('0x3a')],_0x334d3a['filters']));_0x4ffbec['where'][_0x3071('0xb1')]=_0x17a9f5['id'];if(_0xc6bc56['query'][_0x3071('0x7d')]){_0x4ffbec[_0x3071('0x44')]=_[_0x3071('0xb8')](_0x4ffbec['where'],{'$or':_[_0x3071('0x73')](_0x4ffbec['attributes'],function(_0x587e6b){var _0x129567={};_0x129567[_0x587e6b]={'$like':'%'+_0xc6bc56[_0x3071('0x3a')][_0x3071('0x7d')]+'%'};return _0x129567;})});}if(_0xc6bc56[_0x3071('0x3a')][_0x3071('0x7a')]){var _0x38b2c5=_0xc6bc56[_0x3071('0x3a')]['$gte'][_0x3071('0x83')](',');var _0x76a69a={};_0x76a69a[_0x38b2c5[0x0]]={'$gte':moment(_0x38b2c5[0x1])[_0x3071('0x60')](_0x3071('0xc5'))};_0x4ffbec[_0x3071('0x44')]=_[_0x3071('0xb8')](_0x4ffbec[_0x3071('0x44')],_0x76a69a);}_0x4ffbec=_[_0x3071('0xb8')]({},_0x4ffbec,_0xc6bc56[_0x3071('0xb9')]);return db['MailMessage'][_0x3071('0x21')]({'where':_0x4ffbec[_0x3071('0x44')]})[_0x3071('0x2a')](function(_0x28e880){_0x21d4b8[_0x3071('0x21')]=_0x28e880;if(_0xc6bc56[_0x3071('0x3a')][_0x3071('0xb6')]){_0x4ffbec['include']=[{'all':!![]}];}return db[_0x3071('0xc3')]['findAll'](_0x4ffbec);})[_0x3071('0x2a')](function(_0x164f3d){_0x21d4b8[_0x3071('0xb4')]=_0x164f3d;return _0x21d4b8;});}})['then'](respondWithFilteredResult(_0x109d20,_0x4ffbec))['catch'](handleError(_0x109d20,null));};exports['addTags']=function(_0x475047,_0x2fb723,_0x22fdcc){return db['MailInteraction'][_0x3071('0xba')]({'where':{'id':_0x475047[_0x3071('0xbd')]['id']}})[_0x3071('0x2a')](handleEntityNotFound(_0x2fb723,null))[_0x3071('0x2a')](function(_0x3e788f){if(_0x3e788f){return _0x3e788f[_0x3071('0xc6')](_0x475047[_0x3071('0xbc')][_0x3071('0xc0')],_[_0x3071('0xc1')](_0x475047['body'],[_0x3071('0xc0'),'id'])||{})[_0x3071('0xc7')](function(){return db[_0x3071('0xc8')]['findAll']({'attributes':['id',_0x3071('0x2d'),_0x3071('0x47')],'where':{'id':_0x475047[_0x3071('0xbc')][_0x3071('0xc0')]}});})[_0x3071('0x2a')](function(_0x1cc091){socket[_0x3071('0xc9')](_0x3071('0xca'),{'id':Number(_0x475047[_0x3071('0xbd')]['id']),'tags':_0x1cc091||[]});return{'id':Number(_0x475047[_0x3071('0xbd')]['id']),'tags':_0x1cc091||[]};});}})[_0x3071('0x2a')](respondWithResult(_0x2fb723,null))[_0x3071('0x37')](handleError(_0x2fb723,null));};exports['removeTags']=function(_0x9e027c,_0x3e9573,_0x5dcd7a){return db['MailInteraction']['find']({'where':{'id':_0x9e027c['params']['id']}})[_0x3071('0x2a')](handleEntityNotFound(_0x3e9573,null))[_0x3071('0x2a')](function(_0x51a67d){if(_0x51a67d){return _0x51a67d[_0x3071('0xcb')](_0x9e027c[_0x3071('0x3a')][_0x3071('0xc0')]);}})[_0x3071('0x2a')](respondWithStatusCode(_0x3e9573,null))[_0x3071('0x37')](handleError(_0x3e9573,null));};exports[_0x3071('0xcc')]=function(_0x358227,_0x1f6e73){var _0xcdeec2=moment()[_0x3071('0xcd')]()[_0x3071('0x84')]();var _0x28c7bc=path[_0x3071('0x85')](config['root'],_0x3071('0xce'),_0x3071('0xcf'),'attachments');var _0x17e204=path[_0x3071('0x85')](config[_0x3071('0xd0')],_0x3071('0xce'),'files',_0x3071('0xd1'));var _0x363418=path[_0x3071('0x85')](_0x17e204,_0xcdeec2);var _0x2ec794=util['format']('interaction-%s.zip',_0xcdeec2);var _0x1afce9=path[_0x3071('0x85')](_0x17e204,_0x2ec794);var _0x10f664=![];return db[_0x3071('0x38')][_0x3071('0xba')]({'where':{'id':_0x358227[_0x3071('0xbd')]['id']}})[_0x3071('0x2a')](handleEntityNotFound(_0x1f6e73,null))[_0x3071('0x2a')](function(_0x4d2992){if(_0x4d2992){return _0x4d2992[_0x3071('0xc2')]({'attributes':['id','body','from','to','cc',_0x3071('0xd2'),_0x3071('0xd3'),'createdAt'],'where':{'secret':![]},'include':_0x358227['query'][_0x3071('0xd4')]?[{'model':db[_0x3071('0xd5')],'as':_0x3071('0xd6')}]:undefined,'order':qs[_0x3071('0x43')]('id')});}return[];})['then'](function(_0x6ad3d9){_0x10f664=_0x6ad3d9[_0x3071('0x3f')];if(_0x6ad3d9[_0x3071('0x3f')]){fs[_0x3071('0xd7')](_0x363418);return BPromise[_0x3071('0xd8')](_0x6ad3d9,function(_0x47880d,_0x2bf807){var _0x1a3fe8=_0x47880d;var _0x52b7a8={'from':_0x1a3fe8['from'],'to':_0x1a3fe8['to'],'subject':_0x1a3fe8['subject'],'html':_0x1a3fe8[_0x3071('0xbc')],'headers':{'Date':moment(_0x1a3fe8[_0x3071('0x79')])[_0x3071('0x60')]('ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ')},'attachments':[]};if(_0x47880d['cc']){_0x52b7a8[_0x3071('0xd9')]['Cc']=_0x47880d['cc'];}if(_0x47880d[_0x3071('0xd2')]){_0x52b7a8['headers'][_0x3071('0xda')]=_0x47880d[_0x3071('0xd2')];}return new BPromise(function(_0x33efb9,_0x15edc7){if(_0x47880d[_0x3071('0xd6')]){for(var _0x5a0462=0x0;_0x5a0462<_0x47880d['Attachments'][_0x3071('0x3f')];_0x5a0462++){var _0x20230c=_0x47880d[_0x3071('0xd6')][_0x5a0462];var _0x420132=path['join'](_0x28c7bc,_0x20230c['basename']);if(fs[_0x3071('0xdb')](_0x420132)){_0x52b7a8[_0x3071('0xd4')]['push']({'name':_0x20230c[_0x3071('0x2d')],'contentType':_0x20230c[_0x3071('0xdc')],'data':fs[_0x3071('0xdd')](_0x420132)});}}}emlformat[_0x3071('0xde')](_0x52b7a8,function(_0x4e1cfa,_0x89fa53){if(_0x4e1cfa)return _0x15edc7(_0x4e1cfa);fs[_0x3071('0xdf')](path[_0x3071('0x85')](_0x363418,util[_0x3071('0x60')]('message%d.eml',_0x2bf807)),_0x89fa53);return _0x33efb9(_0x89fa53);});});});}})[_0x3071('0x2a')](function(){if(_0x10f664){return new BPromise(function(_0x2fa596,_0x50c25d){zipdir(_0x363418,{'saveTo':_0x1afce9},function(_0x12f599,_0xaedcbd){if(_0x12f599)return _0x50c25d(_0x12f599);return _0x2fa596(_0xaedcbd);});});}})[_0x3071('0x2a')](function(){if(_0x10f664){return new BPromise(function(_0x8ab533,_0x30ca22){rimraf(_0x363418,function(_0x5069a9){if(_0x5069a9)_0x30ca22(_0x5069a9);return _0x8ab533();});});}})[_0x3071('0x2a')](function(){if(_0x10f664){return _0x1f6e73['download'](_0x1afce9,_0x2ec794,function(_0x241635){if(_0x241635){console['log'](_0x3071('0xe0'),_0x241635);}else{fs[_0x3071('0xe1')](_0x1afce9);}});}else{return _0x1f6e73[_0x3071('0x1d')](0xc8);}})[_0x3071('0x37')](handleError(_0x1f6e73,null));};
\ No newline at end of file
index 2ecbfd8..8125b38 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe9b0=['Users','map','findAll','unreadMessages','emit','hasOwnProperty','hook','exports','events','../../mysqldb','MailInteraction','MailMessage','setMaxListeners','save','remove','getUsers','then'];(function(_0x97df78,_0x36cfa3){var _0x4b627e=function(_0x15524a){while(--_0x15524a){_0x97df78['push'](_0x97df78['shift']());}};_0x4b627e(++_0x36cfa3);}(_0xe9b0,0x1e4));var _0x0e9b=function(_0x26c10f,_0x5411be){_0x26c10f=_0x26c10f-0x0;var _0x17e0b8=_0xe9b0[_0x26c10f];return _0x17e0b8;};'use strict';var EventEmitter=require(_0x0e9b('0x0'));var MailInteraction=require(_0x0e9b('0x1'))['db'][_0x0e9b('0x2')];var MailMessage=require(_0x0e9b('0x1'))['db'][_0x0e9b('0x3')];var MailInteractionEvents=new EventEmitter();MailInteractionEvents[_0x0e9b('0x4')](0x0);var events={'afterCreate':_0x0e9b('0x5'),'afterUpdate':'update','afterDestroy':_0x0e9b('0x6')};function emitEvent(_0x81b969){return function(_0x339d6d,_0x32e2f2,_0xf2bc5){_0x339d6d[_0x0e9b('0x7')]({'attributes':['id'],'raw':!![]})[_0x0e9b('0x8')](function(_0xd354d){_0x339d6d['setDataValue'](_0x0e9b('0x9'),_0xd354d[_0x0e9b('0xa')](function(_0x4a0b79){return{'id':_0x4a0b79['id']};}));return MailMessage[_0x0e9b('0xb')]({'where':{'MailInteractionId':_0x339d6d['id'],'direction':'in','read':![]},'raw':!![]});})['then'](function(_0x2dcea4){_0x339d6d['setDataValue'](_0x0e9b('0xc'),_0x2dcea4['length']);MailInteractionEvents[_0x0e9b('0xd')](_0x81b969+':'+_0x339d6d['id'],_0x339d6d);MailInteractionEvents[_0x0e9b('0xd')](_0x81b969,_0x339d6d);_0xf2bc5(null);})['catch'](_0xf2bc5(null));};}for(var e in events){if(events[_0x0e9b('0xe')](e)){var event=events[e];MailInteraction[_0x0e9b('0xf')](e,emitEvent(event));}}module[_0x0e9b('0x10')]=MailInteractionEvents;
\ No newline at end of file
+var _0x7766=['events','../../mysqldb','MailMessage','setMaxListeners','save','update','remove','getUsers','then','Users','findAll','unreadMessages','length','emit','catch','hasOwnProperty','hook','exports'];(function(_0x5bccbf,_0x547e42){var _0x2158c6=function(_0x40f28a){while(--_0x40f28a){_0x5bccbf['push'](_0x5bccbf['shift']());}};_0x2158c6(++_0x547e42);}(_0x7766,0x6c));var _0x6776=function(_0x2e32a5,_0xc5e0e4){_0x2e32a5=_0x2e32a5-0x0;var _0xeaf48a=_0x7766[_0x2e32a5];return _0xeaf48a;};'use strict';var EventEmitter=require(_0x6776('0x0'));var MailInteraction=require(_0x6776('0x1'))['db']['MailInteraction'];var MailMessage=require(_0x6776('0x1'))['db'][_0x6776('0x2')];var MailInteractionEvents=new EventEmitter();MailInteractionEvents[_0x6776('0x3')](0x0);var events={'afterCreate':_0x6776('0x4'),'afterUpdate':_0x6776('0x5'),'afterDestroy':_0x6776('0x6')};function emitEvent(_0x5871a3){return function(_0x305371,_0x2989aa,_0x5195c3){_0x305371[_0x6776('0x7')]({'attributes':['id'],'raw':!![]})[_0x6776('0x8')](function(_0x38e1e9){_0x305371['setDataValue'](_0x6776('0x9'),_0x38e1e9['map'](function(_0x49b005){return{'id':_0x49b005['id']};}));return MailMessage[_0x6776('0xa')]({'where':{'MailInteractionId':_0x305371['id'],'direction':'in','read':![]},'raw':!![]});})[_0x6776('0x8')](function(_0x2ec4bc){_0x305371['setDataValue'](_0x6776('0xb'),_0x2ec4bc[_0x6776('0xc')]);MailInteractionEvents[_0x6776('0xd')](_0x5871a3+':'+_0x305371['id'],_0x305371);MailInteractionEvents[_0x6776('0xd')](_0x5871a3,_0x305371);_0x5195c3(null);})[_0x6776('0xe')](_0x5195c3(null));};}for(var e in events){if(events[_0x6776('0xf')](e)){var event=events[e];MailInteraction[_0x6776('0x10')](e,emitEvent(event));}}module[_0x6776('0x11')]=MailInteractionEvents;
\ No newline at end of file
index 1a2e288..d329e34 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4403=['FULLTEXT','substatus','substatusAt','format','YYYY-MM-DD\x20HH:mm:ss','closed','closedAt','changed','models','get','MailMessage','catch','utf8mb4','lodash','../../config/logger','moment','bluebird','path','../../config/environment','./mailInteraction.attributes','define','MailInteraction','mail_interactions','fti_mail_interactions','subject'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x4403,0x1b6));var _0x3440=function(_0x13ced7,_0xce4fb5){_0x13ced7=_0x13ced7-0x0;var _0x91009=_0x4403[_0x13ced7];return _0x91009;};'use strict';var _=require(_0x3440('0x0'));var util=require('util');var logger=require(_0x3440('0x1'))('api');var moment=require(_0x3440('0x2'));var BPromise=require(_0x3440('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x3440('0x4'));var rimraf=require('rimraf');var config=require(_0x3440('0x5'));var attributes=require(_0x3440('0x6'));module['exports']=function(_0x466fe2,_0x4dbe7d){return _0x466fe2[_0x3440('0x7')](_0x3440('0x8'),attributes,{'tableName':_0x3440('0x9'),'paranoid':![],'indexes':[{'name':_0x3440('0xa'),'fields':[_0x3440('0xb'),'to'],'type':_0x3440('0xc')}],'timestamps':!![],'hooks':{'beforeCreate':function(_0xb4ca43,_0x5daa4d,_0x4ef213){if(_0xb4ca43[_0x3440('0xd')]){_0xb4ca43[_0x3440('0xe')]=moment()[_0x3440('0xf')](_0x3440('0x10'));}if(_0xb4ca43[_0x3440('0x11')]){_0xb4ca43[_0x3440('0x12')]=moment()[_0x3440('0xf')](_0x3440('0x10'));}_0x4ef213(null,_0x5daa4d);},'beforeUpdate':function(_0x522129,_0x363160,_0x27e34c){if(_0x522129[_0x3440('0x13')](_0x3440('0xd'))){_0x522129[_0x3440('0xe')]=moment()['format'](_0x3440('0x10'));}if(_0x522129[_0x3440('0x13')](_0x3440('0x11'))){_0x522129[_0x3440('0x12')]=moment()[_0x3440('0xf')]('YYYY-MM-DD\x20HH:mm:ss');}_0x27e34c(null,_0x522129);},'afterUpdate':function(_0x1ff2a3,_0x27c56f,_0x5f5230){var _0x126896=_0x466fe2[_0x3440('0x14')];var _0x7b6a93=_0x1ff2a3[_0x3440('0x15')]({'plain':!![]});if(_0x7b6a93[_0x3440('0x11')]){return _0x126896[_0x3440('0x16')]['update']({'read':!![]},{'where':{'MailInteractionId':_0x7b6a93['id']}})['then'](function(){_0x5f5230();})[_0x3440('0x17')](function(_0x192a19){_0x5f5230(_0x192a19);});}else{_0x5f5230();}}},'charset':_0x3440('0x18'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
+var _0xc648=['YYYY-MM-DD\x20HH:mm:ss','changed','substatus','closed','models','update','then','catch','lodash','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','./mailInteraction.attributes','exports','define','mail_interactions','fti_mail_interactions','FULLTEXT','substatusAt','format','closedAt'];(function(_0xf50836,_0x4d3e35){var _0x2ca828=function(_0x1b36c3){while(--_0x1b36c3){_0xf50836['push'](_0xf50836['shift']());}};_0x2ca828(++_0x4d3e35);}(_0xc648,0x166));var _0x8c64=function(_0x232c8d,_0x2cd11b){_0x232c8d=_0x232c8d-0x0;var _0x340c6a=_0xc648[_0x232c8d];return _0x340c6a;};'use strict';var _=require(_0x8c64('0x0'));var util=require('util');var logger=require(_0x8c64('0x1'))(_0x8c64('0x2'));var moment=require(_0x8c64('0x3'));var BPromise=require(_0x8c64('0x4'));var rp=require(_0x8c64('0x5'));var fs=require('fs');var path=require(_0x8c64('0x6'));var rimraf=require(_0x8c64('0x7'));var config=require('../../config/environment');var attributes=require(_0x8c64('0x8'));module[_0x8c64('0x9')]=function(_0x33f37a,_0x43b073){return _0x33f37a[_0x8c64('0xa')]('MailInteraction',attributes,{'tableName':_0x8c64('0xb'),'paranoid':![],'indexes':[{'name':_0x8c64('0xc'),'fields':['subject','to'],'type':_0x8c64('0xd')}],'timestamps':!![],'hooks':{'beforeCreate':function(_0x1fffa3,_0x3a8c4c,_0x6716ee){if(_0x1fffa3['substatus']){_0x1fffa3[_0x8c64('0xe')]=moment()[_0x8c64('0xf')]('YYYY-MM-DD\x20HH:mm:ss');}if(_0x1fffa3['closed']){_0x1fffa3[_0x8c64('0x10')]=moment()[_0x8c64('0xf')](_0x8c64('0x11'));}_0x6716ee(null,_0x3a8c4c);},'beforeUpdate':function(_0x332d0a,_0x5ed5aa,_0x8d93ec){if(_0x332d0a[_0x8c64('0x12')](_0x8c64('0x13'))){_0x332d0a['substatusAt']=moment()[_0x8c64('0xf')](_0x8c64('0x11'));}if(_0x332d0a[_0x8c64('0x12')](_0x8c64('0x14'))){_0x332d0a['closedAt']=moment()['format'](_0x8c64('0x11'));}_0x8d93ec(null,_0x332d0a);},'afterUpdate':function(_0x4631b,_0x17318a,_0x227009){var _0x16e6de=_0x33f37a[_0x8c64('0x15')];var _0x5d2a5b=_0x4631b['get']({'plain':!![]});if(_0x5d2a5b['closed']){return _0x16e6de['MailMessage'][_0x8c64('0x16')]({'read':!![]},{'where':{'MailInteractionId':_0x5d2a5b['id']}})[_0x8c64('0x17')](function(){_0x227009();})[_0x8c64('0x18')](function(_0x3f11b4){_0x227009(_0x3f11b4);});}else{_0x227009();}}},'charset':'utf8mb4','collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index 989ce38..832c33f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0cfe=['jayson/promise','http','redis','defaults','localhost','socket.io-emitter','./mailInteraction.socket','register','request','then','info','MailInteraction,\x20%s,\x20%s','request\x20sent','debug','MailInteraction,\x20%s,\x20%s,\x20%s','stringify','error','message','result','MailInteraction','body','options','raw','where','limit','UpdateMailInteraction','catch','AddTagsToMailInteraction','find','addTags','ids','omit','AddTags','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment'];(function(_0x1b5aea,_0x3f04b7){var _0x15cfc6=function(_0x204e92){while(--_0x204e92){_0x1b5aea['push'](_0x1b5aea['shift']());}};_0x15cfc6(++_0x3f04b7);}(_0x0cfe,0x9c));var _0xe0cf=function(_0x5ad807,_0x1623be){_0x5ad807=_0x5ad807-0x0;var _0x142bbb=_0x0cfe[_0x5ad807];return _0x142bbb;};'use strict';var _=require(_0xe0cf('0x0'));var util=require('util');var moment=require(_0xe0cf('0x1'));var BPromise=require(_0xe0cf('0x2'));var rs=require(_0xe0cf('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xe0cf('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xe0cf('0x5'))(_0xe0cf('0x6'));var config=require(_0xe0cf('0x7'));var jayson=require(_0xe0cf('0x8'));var client=jayson['client'][_0xe0cf('0x9')]({'port':0x232a});config[_0xe0cf('0xa')]=_[_0xe0cf('0xb')](config['redis'],{'host':_0xe0cf('0xc'),'port':0x18eb});var socket=require(_0xe0cf('0xd'))(new Redis(config['redis']));require(_0xe0cf('0xe'))[_0xe0cf('0xf')](socket);function respondWithRpcPromise(_0x1d304a,_0x2aaa10,_0x2e689c){return new BPromise(function(_0x10752a,_0x531fde){return client[_0xe0cf('0x10')](_0x1d304a,_0x2e689c)[_0xe0cf('0x11')](function(_0x264b18){logger[_0xe0cf('0x12')](_0xe0cf('0x13'),_0x2aaa10,_0xe0cf('0x14'));logger[_0xe0cf('0x15')](_0xe0cf('0x16'),_0x2aaa10,_0xe0cf('0x14'),JSON[_0xe0cf('0x17')](_0x264b18));if(_0x264b18[_0xe0cf('0x18')]){if(_0x264b18[_0xe0cf('0x18')]['code']===0x1f4){logger[_0xe0cf('0x18')](_0xe0cf('0x13'),_0x2aaa10,_0x264b18[_0xe0cf('0x18')][_0xe0cf('0x19')]);return _0x531fde(_0x264b18[_0xe0cf('0x18')]['message']);}logger['error'](_0xe0cf('0x13'),_0x2aaa10,_0x264b18['error']['message']);return _0x10752a(_0x264b18[_0xe0cf('0x18')][_0xe0cf('0x19')]);}else{logger[_0xe0cf('0x12')](_0xe0cf('0x13'),_0x2aaa10,_0xe0cf('0x14'));_0x10752a(_0x264b18[_0xe0cf('0x1a')][_0xe0cf('0x19')]);}})['catch'](function(_0x5c2bcc){logger[_0xe0cf('0x18')](_0xe0cf('0x13'),_0x2aaa10,_0x5c2bcc);_0x531fde(_0x5c2bcc);});});}exports['UpdateMailInteraction']=function(_0x112ea6){var _0x3dba33=this;return new Promise(function(_0x2c44e6,_0x2b4a16){return db[_0xe0cf('0x1b')]['update'](_0x112ea6[_0xe0cf('0x1c')],{'raw':_0x112ea6['options']?_0x112ea6[_0xe0cf('0x1d')][_0xe0cf('0x1e')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x112ea6['options']?_0x112ea6[_0xe0cf('0x1d')][_0xe0cf('0x1f')]||null:null,'attributes':_0x112ea6[_0xe0cf('0x1d')]?_0x112ea6[_0xe0cf('0x1d')]['attributes']||null:null,'limit':_0x112ea6[_0xe0cf('0x1d')]?_0x112ea6[_0xe0cf('0x1d')][_0xe0cf('0x20')]||null:null})[_0xe0cf('0x11')](function(_0x4b74bf){logger[_0xe0cf('0x12')]('UpdateMailInteraction',_0x112ea6);logger[_0xe0cf('0x15')](_0xe0cf('0x21'),_0x112ea6,JSON[_0xe0cf('0x17')](_0x4b74bf));_0x2c44e6(_0x4b74bf);})[_0xe0cf('0x22')](function(_0x94276f){logger[_0xe0cf('0x18')]('UpdateMailInteraction',_0x94276f[_0xe0cf('0x19')],_0x112ea6);_0x2b4a16(_0x3dba33[_0xe0cf('0x18')](0x1f4,_0x94276f[_0xe0cf('0x19')]));});});};exports[_0xe0cf('0x23')]=function(_0x35e46d){return new Promise(function(_0x5e878c,_0x5845b7){return db['MailInteraction'][_0xe0cf('0x24')]({'where':_0x35e46d[_0xe0cf('0x1d')]?_0x35e46d['options']['where']||null:null})[_0xe0cf('0x11')](function(_0x447207){if(_0x447207){return _0x447207[_0xe0cf('0x25')](_0x35e46d[_0xe0cf('0x1c')][_0xe0cf('0x26')],_[_0xe0cf('0x27')](_0x35e46d[_0xe0cf('0x1c')],[_0xe0cf('0x26'),'id'])||{});}})['spread'](function(_0x5ac33b){logger[_0xe0cf('0x12')](_0xe0cf('0x28'),_0x35e46d);logger[_0xe0cf('0x15')](_0xe0cf('0x28'),_0x35e46d,JSON[_0xe0cf('0x17')](_0x5ac33b));_0x5e878c(_0x5ac33b);})[_0xe0cf('0x22')](function(_0x189f18){logger['error'](_0xe0cf('0x28'),_0x189f18[_0xe0cf('0x19')],_0x35e46d);_0x5845b7(_this[_0xe0cf('0x18')](0x1f4,_0x189f18[_0xe0cf('0x19')]));});});};
\ No newline at end of file
+var _0x2cd0=['then','MailInteraction,\x20%s,\x20%s','request\x20sent','debug','MailInteraction,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','catch','UpdateMailInteraction','MailInteraction','update','body','options','raw','where','limit','AddTagsToMailInteraction','find','addTags','omit','ids','AddTags','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','redis','defaults','./mailInteraction.socket','request'];(function(_0x2ed39e,_0x4384d3){var _0x20252=function(_0x3ef0e2){while(--_0x3ef0e2){_0x2ed39e['push'](_0x2ed39e['shift']());}};_0x20252(++_0x4384d3);}(_0x2cd0,0x10f));var _0x02cd=function(_0x53e2a2,_0x38f753){_0x53e2a2=_0x53e2a2-0x0;var _0x4dcf45=_0x2cd0[_0x53e2a2];return _0x4dcf45;};'use strict';var _=require(_0x02cd('0x0'));var util=require(_0x02cd('0x1'));var moment=require(_0x02cd('0x2'));var BPromise=require(_0x02cd('0x3'));var rs=require(_0x02cd('0x4'));var fs=require('fs');var Redis=require(_0x02cd('0x5'));var db=require(_0x02cd('0x6'))['db'];var utils=require(_0x02cd('0x7'));var logger=require('../../config/logger')(_0x02cd('0x8'));var config=require(_0x02cd('0x9'));var jayson=require(_0x02cd('0xa'));var client=jayson[_0x02cd('0xb')]['http']({'port':0x232a});config[_0x02cd('0xc')]=_[_0x02cd('0xd')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x02cd('0xc')]));require(_0x02cd('0xe'))['register'](socket);function respondWithRpcPromise(_0x4a74ff,_0x1f5b09,_0x2b6731){return new BPromise(function(_0x9c0497,_0x27fc91){return client[_0x02cd('0xf')](_0x4a74ff,_0x2b6731)[_0x02cd('0x10')](function(_0x50603f){logger['info'](_0x02cd('0x11'),_0x1f5b09,_0x02cd('0x12'));logger[_0x02cd('0x13')](_0x02cd('0x14'),_0x1f5b09,_0x02cd('0x12'),JSON[_0x02cd('0x15')](_0x50603f));if(_0x50603f['error']){if(_0x50603f[_0x02cd('0x16')]['code']===0x1f4){logger[_0x02cd('0x16')]('MailInteraction,\x20%s,\x20%s',_0x1f5b09,_0x50603f['error']['message']);return _0x27fc91(_0x50603f[_0x02cd('0x16')][_0x02cd('0x17')]);}logger[_0x02cd('0x16')](_0x02cd('0x11'),_0x1f5b09,_0x50603f[_0x02cd('0x16')][_0x02cd('0x17')]);return _0x9c0497(_0x50603f[_0x02cd('0x16')][_0x02cd('0x17')]);}else{logger[_0x02cd('0x18')](_0x02cd('0x11'),_0x1f5b09,_0x02cd('0x12'));_0x9c0497(_0x50603f[_0x02cd('0x19')][_0x02cd('0x17')]);}})[_0x02cd('0x1a')](function(_0x6bbe36){logger[_0x02cd('0x16')]('MailInteraction,\x20%s,\x20%s',_0x1f5b09,_0x6bbe36);_0x27fc91(_0x6bbe36);});});}exports[_0x02cd('0x1b')]=function(_0x2ba059){var _0x1c9327=this;return new Promise(function(_0x17c764,_0x822204){return db[_0x02cd('0x1c')][_0x02cd('0x1d')](_0x2ba059[_0x02cd('0x1e')],{'raw':_0x2ba059[_0x02cd('0x1f')]?_0x2ba059[_0x02cd('0x1f')][_0x02cd('0x20')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2ba059['options']?_0x2ba059[_0x02cd('0x1f')][_0x02cd('0x21')]||null:null,'attributes':_0x2ba059[_0x02cd('0x1f')]?_0x2ba059[_0x02cd('0x1f')]['attributes']||null:null,'limit':_0x2ba059[_0x02cd('0x1f')]?_0x2ba059['options'][_0x02cd('0x22')]||null:null})[_0x02cd('0x10')](function(_0x238696){logger[_0x02cd('0x18')](_0x02cd('0x1b'),_0x2ba059);logger[_0x02cd('0x13')](_0x02cd('0x1b'),_0x2ba059,JSON['stringify'](_0x238696));_0x17c764(_0x238696);})[_0x02cd('0x1a')](function(_0x1fce0c){logger['error'](_0x02cd('0x1b'),_0x1fce0c['message'],_0x2ba059);_0x822204(_0x1c9327[_0x02cd('0x16')](0x1f4,_0x1fce0c[_0x02cd('0x17')]));});});};exports[_0x02cd('0x23')]=function(_0x3651d4){return new Promise(function(_0x478068,_0x205ee7){return db[_0x02cd('0x1c')][_0x02cd('0x24')]({'where':_0x3651d4['options']?_0x3651d4['options'][_0x02cd('0x21')]||null:null})[_0x02cd('0x10')](function(_0x2ba830){if(_0x2ba830){return _0x2ba830[_0x02cd('0x25')](_0x3651d4['body']['ids'],_[_0x02cd('0x26')](_0x3651d4[_0x02cd('0x1e')],[_0x02cd('0x27'),'id'])||{});}})['spread'](function(_0x169a70){logger['info'](_0x02cd('0x28'),_0x3651d4);logger['debug'](_0x02cd('0x28'),_0x3651d4,JSON['stringify'](_0x169a70));_0x478068(_0x169a70);})[_0x02cd('0x1a')](function(_0x3ab9f9){logger[_0x02cd('0x16')](_0x02cd('0x28'),_0x3ab9f9[_0x02cd('0x17')],_0x3651d4);_0x205ee7(_this['error'](0x1f4,_0x3ab9f9[_0x02cd('0x17')]));});});};
\ No newline at end of file
index 85dbc1f..b636411 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5e8e=['update','emit','removeListener','mailInteraction:','./mailInteraction.events','remove'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0x5e8e,0x1ae));var _0xe5e8=function(_0x32da04,_0x255b7b){_0x32da04=_0x32da04-0x0;var _0x468bac=_0x5e8e[_0x32da04];return _0x468bac;};'use strict';var MailInteractionEvents=require(_0xe5e8('0x0'));var events=['save',_0xe5e8('0x1'),_0xe5e8('0x2')];function createListener(_0x22ed3d,_0xc7a0d2){return function(_0x25c393){_0xc7a0d2[_0xe5e8('0x3')](_0x22ed3d,_0x25c393);};}function removeListener(_0x5d9157,_0x6164cb){return function(){MailInteractionEvents[_0xe5e8('0x4')](_0x5d9157,_0x6164cb);};}exports['register']=function(_0x4e5ebd){for(var _0x1e6ac4=0x0,_0x4d3ea2=events['length'];_0x1e6ac4<_0x4d3ea2;_0x1e6ac4++){var _0x1e6fac=events[_0x1e6ac4];var _0x31307a=createListener(_0xe5e8('0x5')+_0x1e6fac,_0x4e5ebd);MailInteractionEvents['on'](_0x1e6fac,_0x31307a);}};
\ No newline at end of file
+var _0xde25=['register','length','mailInteraction:','save','remove','emit','removeListener'];(function(_0x203c49,_0xb41d65){var _0x927c2f=function(_0x548666){while(--_0x548666){_0x203c49['push'](_0x203c49['shift']());}};_0x927c2f(++_0xb41d65);}(_0xde25,0xdc));var _0x5de2=function(_0xc965b0,_0x9faa5d){_0xc965b0=_0xc965b0-0x0;var _0x2acd28=_0xde25[_0xc965b0];return _0x2acd28;};'use strict';var MailInteractionEvents=require('./mailInteraction.events');var events=[_0x5de2('0x0'),_0x5de2('0x1'),'update'];function createListener(_0x45841d,_0x3b9472){return function(_0x5d5f1b){_0x3b9472[_0x5de2('0x2')](_0x45841d,_0x5d5f1b);};}function removeListener(_0x1334a3,_0x23093d){return function(){MailInteractionEvents[_0x5de2('0x3')](_0x1334a3,_0x23093d);};}exports[_0x5de2('0x4')]=function(_0x45130e){for(var _0xba8d8a=0x0,_0x185892=events[_0x5de2('0x5')];_0xba8d8a<_0x185892;_0xba8d8a++){var _0x2ad50d=events[_0xba8d8a];var _0x5af0bb=createListener(_0x5de2('0x6')+_0x2ad50d,_0x45130e);MailInteractionEvents['on'](_0x2ad50d,_0x5af0bb);}};
\ No newline at end of file
index 67c050f..a78307d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3eea=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailMessage.controller','get','isAuthenticated','index','download','post','tracked','mail','put','/:id','update','/:id/accept','accept','/:id/reject','delete','multer','path'];(function(_0x18482e,_0x563445){var _0x367fb7=function(_0x229262){while(--_0x229262){_0x18482e['push'](_0x18482e['shift']());}};_0x367fb7(++_0x563445);}(_0x3eea,0x1ca));var _0xa3ee=function(_0x479d22,_0x2a544f){_0x479d22=_0x479d22-0x0;var _0x143101=_0x3eea[_0x479d22];return _0x143101;};'use strict';var multer=require(_0xa3ee('0x0'));var util=require('util');var path=require(_0xa3ee('0x1'));var timeout=require(_0xa3ee('0x2'));var express=require(_0xa3ee('0x3'));var router=express[_0xa3ee('0x4')]();var auth=require(_0xa3ee('0x5'));var interaction=require(_0xa3ee('0x6'));var config=require(_0xa3ee('0x7'));var controller=require(_0xa3ee('0x8'));router[_0xa3ee('0x9')]('/',auth[_0xa3ee('0xa')](),controller[_0xa3ee('0xb')]);router['get']('/describe',auth[_0xa3ee('0xa')](),controller['describe']);router[_0xa3ee('0x9')]('/:id',auth[_0xa3ee('0xa')](),controller['show']);router[_0xa3ee('0x9')]('/:id/download',auth[_0xa3ee('0xa')](),controller[_0xa3ee('0xc')]);router[_0xa3ee('0xd')]('/',auth['isAuthenticated'](),interaction[_0xa3ee('0xe')](_0xa3ee('0xf'),'mailmessage:create'),controller['create']);router[_0xa3ee('0x10')](_0xa3ee('0x11'),auth[_0xa3ee('0xa')](),controller[_0xa3ee('0x12')]);router['put'](_0xa3ee('0x13'),auth['isAuthenticated'](),controller[_0xa3ee('0x14')]);router[_0xa3ee('0x10')](_0xa3ee('0x15'),auth[_0xa3ee('0xa')](),controller['reject']);router[_0xa3ee('0x16')](_0xa3ee('0x11'),auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0x71ab=['../../components/interaction/service','../../config/environment','./mailMessage.controller','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/download','download','tracked','mail','create','put','/:id/accept','accept','reject','delete','destroy','exports','util','connect-timeout','Router','../../components/auth/service'];(function(_0x138540,_0x3a1135){var _0x418516=function(_0x6b2ad1){while(--_0x6b2ad1){_0x138540['push'](_0x138540['shift']());}};_0x418516(++_0x3a1135);}(_0x71ab,0x64));var _0xb71a=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0x71ab[_0x4cf98e];return _0x1623ac;};'use strict';var multer=require('multer');var util=require(_0xb71a('0x0'));var path=require('path');var timeout=require(_0xb71a('0x1'));var express=require('express');var router=express[_0xb71a('0x2')]();var auth=require(_0xb71a('0x3'));var interaction=require(_0xb71a('0x4'));var config=require(_0xb71a('0x5'));var controller=require(_0xb71a('0x6'));router[_0xb71a('0x7')]('/',auth[_0xb71a('0x8')](),controller[_0xb71a('0x9')]);router[_0xb71a('0x7')](_0xb71a('0xa'),auth[_0xb71a('0x8')](),controller[_0xb71a('0xb')]);router[_0xb71a('0x7')](_0xb71a('0xc'),auth[_0xb71a('0x8')](),controller[_0xb71a('0xd')]);router[_0xb71a('0x7')](_0xb71a('0xe'),auth['isAuthenticated'](),controller[_0xb71a('0xf')]);router['post']('/',auth[_0xb71a('0x8')](),interaction[_0xb71a('0x10')](_0xb71a('0x11'),'mailmessage:create'),controller[_0xb71a('0x12')]);router['put'](_0xb71a('0xc'),auth['isAuthenticated'](),controller['update']);router[_0xb71a('0x13')](_0xb71a('0x14'),auth[_0xb71a('0x8')](),controller[_0xb71a('0x15')]);router['put']('/:id/reject',auth['isAuthenticated'](),controller[_0xb71a('0x16')]);router[_0xb71a('0x17')](_0xb71a('0xc'),auth[_0xb71a('0x8')](),controller[_0xb71a('0x18')]);module[_0xb71a('0x19')]=router;
\ No newline at end of file
index 69f7124..5366e48 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x68b0=['TEXT','long','medium','BOOLEAN','ENUM','out','STRING','DATE','INTEGER','sequelize','lodash','exports'];(function(_0x55b49e,_0x299902){var _0x1dbb7a=function(_0x475c00){while(--_0x475c00){_0x55b49e['push'](_0x55b49e['shift']());}};_0x1dbb7a(++_0x299902);}(_0x68b0,0x11d));var _0x068b=function(_0x48d1fc,_0x2a465d){_0x48d1fc=_0x48d1fc-0x0;var _0x2bdfb8=_0x68b0[_0x48d1fc];return _0x2bdfb8;};'use strict';var Sequelize=require(_0x068b('0x0'));var _=require(_0x068b('0x1'));module[_0x068b('0x2')]={'body':{'type':Sequelize[_0x068b('0x3')](_0x068b('0x4')),'allowNull':![]},'plainBody':{'type':Sequelize[_0x068b('0x3')](_0x068b('0x5'))},'read':{'type':Sequelize[_0x068b('0x6')],'defaultValue':![]},'direction':{'type':Sequelize[_0x068b('0x7')]('in',_0x068b('0x8')),'defaultValue':_0x068b('0x8'),'allowNull':![]},'messageId':{'type':Sequelize[_0x068b('0x9')](0x1fe)},'from':{'type':Sequelize['STRING']},'to':{'type':Sequelize[_0x068b('0x3')]('long')},'cc':{'type':Sequelize[_0x068b('0x3')](_0x068b('0x4'))},'bcc':{'type':Sequelize[_0x068b('0x3')](_0x068b('0x4'))},'subject':{'type':Sequelize[_0x068b('0x3')]},'sentAt':{'type':Sequelize[_0x068b('0xa')]},'attach':{'type':Sequelize[_0x068b('0xb')],'defaultValue':0x0},'secret':{'type':Sequelize[_0x068b('0x6')],'defaultValue':![]},'readAt':{'type':Sequelize[_0x068b('0xa')]},'originTo':{'type':Sequelize['TEXT'](_0x068b('0x4'))},'originCc':{'type':Sequelize[_0x068b('0x3')]('long')}};
\ No newline at end of file
+var _0x10b8=['BOOLEAN','ENUM','out','STRING','INTEGER','DATE','sequelize','lodash','exports','TEXT','long'];(function(_0x29d915,_0x54a040){var _0x160f86=function(_0x237dfa){while(--_0x237dfa){_0x29d915['push'](_0x29d915['shift']());}};_0x160f86(++_0x54a040);}(_0x10b8,0x166));var _0x810b=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x10b8[_0x42cae2];return _0x5f256f;};'use strict';var Sequelize=require(_0x810b('0x0'));var _=require(_0x810b('0x1'));module[_0x810b('0x2')]={'body':{'type':Sequelize[_0x810b('0x3')](_0x810b('0x4')),'allowNull':![]},'plainBody':{'type':Sequelize[_0x810b('0x3')]('medium')},'read':{'type':Sequelize[_0x810b('0x5')],'defaultValue':![]},'direction':{'type':Sequelize[_0x810b('0x6')]('in',_0x810b('0x7')),'defaultValue':'out','allowNull':![]},'messageId':{'type':Sequelize[_0x810b('0x8')](0x1fe)},'from':{'type':Sequelize[_0x810b('0x8')]},'to':{'type':Sequelize[_0x810b('0x3')](_0x810b('0x4'))},'cc':{'type':Sequelize[_0x810b('0x3')](_0x810b('0x4'))},'bcc':{'type':Sequelize[_0x810b('0x3')]('long')},'subject':{'type':Sequelize[_0x810b('0x3')]},'sentAt':{'type':Sequelize['DATE']},'attach':{'type':Sequelize[_0x810b('0x9')],'defaultValue':0x0},'secret':{'type':Sequelize[_0x810b('0x5')],'defaultValue':![]},'readAt':{'type':Sequelize[_0x810b('0xa')]},'originTo':{'type':Sequelize[_0x810b('0x3')](_0x810b('0x4'))},'originCc':{'type':Sequelize['TEXT'](_0x810b('0x4'))}};
\ No newline at end of file
index e98bcb2..6150c04 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x577e=['rawAttributes','model','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','map','type','key','VIRTUAL','field','options','MailMessage','includeAll','findAll','show','params','keys','merge','find','body','describe','create','out','secret','MailAccount','findOne','MailAccountId','MailServerOut','Smtp','service','port','secure','auth','user','pass','attachments','name','root','server/files/attachments','basename','SendMail','sendMail','messageId','format','YYYY-MM-DD\x20HH:mm:ss','stringify','mail-interactions','accept','mail','read','readAt','UserId','CmContact','MailInteraction','isNil','read1stAt','interaction','get','[MAILMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','AcceptMessage','manual','interface','SIP/%s','channel','EventManager','acceptmessage','agent','MailInteractionId','[MAILMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','rejectMessage','event','rejectmessage','download','unix','toString','join','server','tmp','files','message-%s.eml','from','bcc','subject','createdAt','Attachment','Attachments','ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ','headers','readFileSync','build','writeFileSync','log','err','unlinkSync','eml-format','rimraf','zip-dir','request-promise','bluebird','path','to-csv','ejs','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','localhost','register','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','MailMessage,\x20%s,\x20%s','request\x20sent','debug','MailMessage,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','end','stack','send'];(function(_0x346737,_0x3e6081){var _0x1ade2e=function(_0x15e50e){while(--_0x15e50e){_0x346737['push'](_0x346737['shift']());}};_0x1ade2e(++_0x3e6081);}(_0x577e,0x10e));var _0xe577=function(_0x4382bc,_0x231a2d){_0x4382bc=_0x4382bc-0x0;var _0x13c82a=_0x577e[_0x4382bc];return _0x13c82a;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xe577('0x0'));var rimraf=require(_0xe577('0x1'));var zipdir=require(_0xe577('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xe577('0x3'));var moment=require('moment');var BPromise=require(_0xe577('0x4'));var Mustache=require('mustache');var util=require('util');var path=require(_0xe577('0x5'));var sox=require('sox');var csv=require(_0xe577('0x6'));var ejs=require(_0xe577('0x7'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xe577('0x8'));var jsforce=require(_0xe577('0x9'));var deskjs=require(_0xe577('0xa'));var toCsv=require(_0xe577('0x6'));var querystring=require(_0xe577('0xb'));var Papa=require(_0xe577('0xc'));var Redis=require(_0xe577('0xd'));var authService=require(_0xe577('0xe'));var qs=require(_0xe577('0xf'));var hardwareService=require(_0xe577('0x10'));var logger=require(_0xe577('0x11'))(_0xe577('0x12'));var utils=require(_0xe577('0x13'));var config=require(_0xe577('0x14'));var db=require(_0xe577('0x15'))['db'];config[_0xe577('0x16')]=_['defaults'](config['redis'],{'host':_0xe577('0x17'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xe577('0x16')]));require('./mailMessage.socket')[_0xe577('0x18')](socket);var jayson=require(_0xe577('0x19'));var client=jayson[_0xe577('0x1a')]['http']({'port':0x232c});var client9003=jayson[_0xe577('0x1a')]['http']({'port':0x232b});var client9002=jayson['client'][_0xe577('0x1b')]({'port':0x232a});function checkPasswordPattern(_0x2b1e6b,_0x25aa56,_0x13613c){if(_0x13613c){var _0x36e5da=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x36e5da[_0xe577('0x1c')](_0x25aa56)){return _0x2b1e6b;}else{throw new Error(_0xe577('0x1d'));}}else{return _0x2b1e6b;}}function respondWithRpcPromise(_0x4867bf,_0x512d15,_0x2397fe,_0x1e08b9){return new BPromise(function(_0x3a2be9,_0x3fddb0){var _0x349d47=_0x1e08b9||client;return _0x349d47[_0xe577('0x1e')](_0x4867bf,_0x2397fe)[_0xe577('0x1f')](function(_0x348be2){logger[_0xe577('0x20')](_0xe577('0x21'),_0x512d15,_0xe577('0x22'));logger[_0xe577('0x23')](_0xe577('0x24'),_0x512d15,_0xe577('0x22'),JSON['stringify'](_0x348be2));if(_0x348be2[_0xe577('0x25')]){if(_0x348be2[_0xe577('0x25')][_0xe577('0x26')]===0x1f4){logger[_0xe577('0x25')]('MailMessage,\x20%s,\x20%s',_0x512d15,_0x348be2[_0xe577('0x25')][_0xe577('0x27')]);return _0x3fddb0(_0x348be2['error'][_0xe577('0x27')]);}logger[_0xe577('0x25')](_0xe577('0x21'),_0x512d15,_0x348be2[_0xe577('0x25')][_0xe577('0x27')]);return _0x3a2be9(_0x348be2[_0xe577('0x25')]['message']);}else{logger[_0xe577('0x20')](_0xe577('0x21'),_0x512d15,_0xe577('0x22'));_0x3a2be9(_0x348be2[_0xe577('0x28')][_0xe577('0x27')]);}})[_0xe577('0x29')](function(_0x5aa343){logger[_0xe577('0x25')](_0xe577('0x21'),_0x512d15,_0x5aa343);_0x3fddb0(_0x5aa343);});});}function respondWithStatusCode(_0xd1724e,_0x3030d4){_0x3030d4=_0x3030d4||0xcc;return function(_0x1ff557){if(_0x1ff557){return _0xd1724e[_0xe577('0x2a')](_0x3030d4);}return _0xd1724e[_0xe577('0x2b')](_0x3030d4)['end']();};}function respondWithResult(_0x3091fb,_0x52b099){_0x52b099=_0x52b099||0xc8;return function(_0xde8d85){if(_0xde8d85){return _0x3091fb[_0xe577('0x2b')](_0x52b099)[_0xe577('0x2c')](_0xde8d85);}};}function respondWithFilteredResult(_0x16719f,_0x136f09){return function(_0x5c992d){if(_0x5c992d){var _0x273b59=_0x5c992d[_0xe577('0x2d')],_0x4ea5dc=_0x136f09[_0xe577('0x2e')],_0x3281e6=_0x136f09[_0xe577('0x2e')]+_0x136f09[_0xe577('0x2f')],_0x21a3fb;if(_0x3281e6>=_0x273b59){_0x3281e6=_0x273b59;_0x21a3fb=0xc8;}else{_0x21a3fb=0xce;}_0x16719f[_0xe577('0x2b')](_0x21a3fb);return _0x16719f[_0xe577('0x30')](_0xe577('0x31'),_0x4ea5dc+'-'+_0x3281e6+'/'+_0x273b59)['json'](_0x5c992d);}return null;};}function patchUpdates(_0x47b066){return function(_0x59587f){try{jsonpatch[_0xe577('0x32')](_0x59587f,_0x47b066,!![]);}catch(_0x25bc77){return BPromise[_0xe577('0x33')](_0x25bc77);}return _0x59587f[_0xe577('0x34')]();};}function saveUpdates(_0x3649e8,_0x4d9010){return function(_0xba7459){if(_0xba7459){return _0xba7459[_0xe577('0x35')](_0x3649e8)[_0xe577('0x1f')](function(_0x3301a2){return _0x3301a2;});}return null;};}function removeEntity(_0x59bda6,_0x1f8f2f){return function(_0x299b97){if(_0x299b97){return _0x299b97[_0xe577('0x36')]()[_0xe577('0x1f')](function(){_0x59bda6[_0xe577('0x2b')](0xcc)[_0xe577('0x37')]();});}};}function handleEntityNotFound(_0x51f02d,_0x3c3482){return function(_0x41f6f0){if(!_0x41f6f0){_0x51f02d[_0xe577('0x2a')](0x194);}return _0x41f6f0;};}function handleError(_0x38cf20,_0x5b14cd){_0x5b14cd=_0x5b14cd||0x1f4;return function(_0x2dc0b9){logger[_0xe577('0x25')](_0x2dc0b9[_0xe577('0x38')]);if(_0x2dc0b9['name']){delete _0x2dc0b9['name'];}_0x38cf20[_0xe577('0x2b')](_0x5b14cd)[_0xe577('0x39')](_0x2dc0b9);};}exports['index']=function(_0x280ab8,_0x479a62){var _0x293eaf={},_0x3c58f8={},_0x817486={'count':0x0,'rows':[]};var _0x5c4d3e=db['MailMessage'][_0xe577('0x3a')];_0x3c58f8[_0xe577('0x3b')]=_['keys'](_0x5c4d3e);_0x3c58f8[_0xe577('0x3c')]=_['keys'](_0x280ab8[_0xe577('0x3c')]);_0x3c58f8[_0xe577('0x3d')]=_[_0xe577('0x3e')](_0x3c58f8['model'],_0x3c58f8[_0xe577('0x3c')]);_0x293eaf[_0xe577('0x3f')]=_[_0xe577('0x3e')](_0x3c58f8[_0xe577('0x3b')],qs[_0xe577('0x40')](_0x280ab8[_0xe577('0x3c')][_0xe577('0x40')]));_0x293eaf[_0xe577('0x3f')]=_0x293eaf['attributes'][_0xe577('0x41')]?_0x293eaf[_0xe577('0x3f')]:_0x3c58f8[_0xe577('0x3b')];if(!_0x280ab8[_0xe577('0x3c')][_0xe577('0x42')](_0xe577('0x43'))){_0x293eaf['limit']=qs[_0xe577('0x2f')](_0x280ab8[_0xe577('0x3c')][_0xe577('0x2f')]);_0x293eaf[_0xe577('0x2e')]=qs['offset'](_0x280ab8['query'][_0xe577('0x2e')]);}_0x293eaf[_0xe577('0x44')]=qs['sort'](_0x280ab8[_0xe577('0x3c')][_0xe577('0x45')]);_0x293eaf[_0xe577('0x46')]=qs['filters'](_[_0xe577('0x47')](_0x280ab8[_0xe577('0x3c')],_0x3c58f8[_0xe577('0x3d')]));if(_0x280ab8[_0xe577('0x3c')][_0xe577('0x48')]){_0x293eaf['where']=_['merge'](_0x293eaf[_0xe577('0x46')],{'$or':_[_0xe577('0x49')](_0x5c4d3e,function(_0x15a811){if(_0x15a811[_0xe577('0x4a')][_0xe577('0x4b')]!==_0xe577('0x4c')){var _0x32ffa0={};_0x32ffa0[_0x15a811[_0xe577('0x4d')]]={'$like':'%'+_0x280ab8[_0xe577('0x3c')][_0xe577('0x48')]+'%'};return _0x32ffa0;}})});}_0x293eaf=_['merge']({},_0x293eaf,_0x280ab8[_0xe577('0x4e')]);var _0x49584e={'where':_0x293eaf[_0xe577('0x46')]};return db[_0xe577('0x4f')][_0xe577('0x2d')](_0x49584e)[_0xe577('0x1f')](function(_0x10ea91){_0x817486['count']=_0x10ea91;if(_0x280ab8[_0xe577('0x3c')][_0xe577('0x50')]){_0x293eaf['include']=[{'all':!![]}];}return db[_0xe577('0x4f')][_0xe577('0x51')](_0x293eaf);})[_0xe577('0x1f')](function(_0x3a55e5){_0x817486['rows']=_0x3a55e5;return _0x817486;})['then'](respondWithFilteredResult(_0x479a62,_0x293eaf))[_0xe577('0x29')](handleError(_0x479a62,null));};exports[_0xe577('0x52')]=function(_0x4de2ef,_0x1f2970){var _0x41a285={'raw':!![],'where':{'id':_0x4de2ef[_0xe577('0x53')]['id']}},_0x1d0e99={};_0x1d0e99[_0xe577('0x3b')]=_[_0xe577('0x54')](db['MailMessage'][_0xe577('0x3a')]);_0x1d0e99['query']=_['keys'](_0x4de2ef[_0xe577('0x3c')]);_0x1d0e99['filters']=_['intersection'](_0x1d0e99[_0xe577('0x3b')],_0x1d0e99[_0xe577('0x3c')]);_0x41a285[_0xe577('0x3f')]=_[_0xe577('0x3e')](_0x1d0e99[_0xe577('0x3b')],qs[_0xe577('0x40')](_0x4de2ef[_0xe577('0x3c')][_0xe577('0x40')]));_0x41a285[_0xe577('0x3f')]=_0x41a285[_0xe577('0x3f')]['length']?_0x41a285[_0xe577('0x3f')]:_0x1d0e99[_0xe577('0x3b')];if(_0x4de2ef[_0xe577('0x3c')]['includeAll']){_0x41a285['include']=[{'all':!![]}];}_0x41a285=_[_0xe577('0x55')]({},_0x41a285,_0x4de2ef[_0xe577('0x4e')]);return db[_0xe577('0x4f')][_0xe577('0x56')](_0x41a285)[_0xe577('0x1f')](handleEntityNotFound(_0x1f2970,null))[_0xe577('0x1f')](respondWithResult(_0x1f2970,null))[_0xe577('0x29')](handleError(_0x1f2970,null));};exports['update']=function(_0x276e2a,_0x3cd150){if(_0x276e2a[_0xe577('0x57')]['id']){delete _0x276e2a[_0xe577('0x57')]['id'];}return db[_0xe577('0x4f')][_0xe577('0x56')]({'where':{'id':_0x276e2a[_0xe577('0x53')]['id']}})[_0xe577('0x1f')](handleEntityNotFound(_0x3cd150,null))[_0xe577('0x1f')](saveUpdates(_0x276e2a[_0xe577('0x57')],null))[_0xe577('0x1f')](respondWithResult(_0x3cd150,null))[_0xe577('0x29')](handleError(_0x3cd150,null));};exports['destroy']=function(_0x3f630b,_0x553ef9){return db[_0xe577('0x4f')][_0xe577('0x56')]({'where':{'id':_0x3f630b[_0xe577('0x53')]['id']}})['then'](handleEntityNotFound(_0x553ef9,null))[_0xe577('0x1f')](removeEntity(_0x553ef9,null))['catch'](handleError(_0x553ef9,null));};exports[_0xe577('0x58')]=function(_0x6f068e,_0x5540c0){return db[_0xe577('0x4f')][_0xe577('0x58')]()[_0xe577('0x1f')](respondWithResult(_0x5540c0,null))['catch'](handleError(_0x5540c0,null));};exports[_0xe577('0x59')]=function(_0x115d4b,_0x23f95c){return db[_0xe577('0x4f')]['create'](_0x115d4b[_0xe577('0x57')])[_0xe577('0x1f')](function(_0x492ccb){if(_0x492ccb){if(_0x492ccb['direction']===_0xe577('0x5a')&&!_0x492ccb[_0xe577('0x5b')]){return db[_0xe577('0x5c')][_0xe577('0x5d')]({'where':{'id':_0x492ccb[_0xe577('0x5e')]},'include':[{'model':db[_0xe577('0x5f')],'as':_0xe577('0x60'),'raw':!![]}]})[_0xe577('0x1f')](function(_0x575f40){if(_0x575f40&&_0x575f40[_0xe577('0x60')]){var _0x1db4c={'tls':{'rejectUnauthorized':![]}};if(_['isNil'](_0x575f40[_0xe577('0x60')][_0xe577('0x61')])){_0x1db4c['host']=_0x575f40[_0xe577('0x60')]['host'];_0x1db4c[_0xe577('0x62')]=_0x575f40[_0xe577('0x60')][_0xe577('0x62')];_0x1db4c['secure']=_0x575f40[_0xe577('0x60')][_0xe577('0x63')];if(_0x575f40['Smtp']['authentication']){_0x1db4c[_0xe577('0x64')]={'user':_0x575f40[_0xe577('0x60')][_0xe577('0x65')],'pass':_0x575f40[_0xe577('0x60')]['pass']};}}else{_0x1db4c[_0xe577('0x61')]=_0x575f40[_0xe577('0x60')][_0xe577('0x61')];_0x1db4c[_0xe577('0x64')]={'user':_0x575f40[_0xe577('0x60')]['user'],'pass':_0x575f40[_0xe577('0x60')][_0xe577('0x66')]};_0x1db4c[_0xe577('0x63')]=_0x575f40[_0xe577('0x60')][_0xe577('0x63')];}if(_0x115d4b['body']['attachments']&&_0x115d4b[_0xe577('0x57')][_0xe577('0x67')][_0xe577('0x41')]){for(var _0xf9a3ee=0x0;_0xf9a3ee<_0x115d4b[_0xe577('0x57')][_0xe577('0x67')]['length'];_0xf9a3ee+=0x1){_0x115d4b['body'][_0xe577('0x67')][_0xf9a3ee]={'filename':_0x115d4b[_0xe577('0x57')][_0xe577('0x67')][_0xf9a3ee][_0xe577('0x68')],'path':path['join'](config[_0xe577('0x69')],_0xe577('0x6a'),_0x115d4b[_0xe577('0x57')][_0xe577('0x67')][_0xf9a3ee][_0xe577('0x6b')])};}}return{'account':_0x1db4c,'message':_0x115d4b[_0xe577('0x57')]};}})[_0xe577('0x1f')](function(_0x3d4c70){if(_0x3d4c70){return respondWithRpcPromise(_0xe577('0x6c'),_0xe577('0x6d'),_0x3d4c70,client9003)[_0xe577('0x1f')](function(_0x34fd30){return _0x492ccb['update']({'read':!![],'messageId':_0x34fd30[_0xe577('0x6e')],'sentAt':moment()[_0xe577('0x6f')](_0xe577('0x70'))});})[_0xe577('0x29')](function(_0x468c61){logger['error']('%s',JSON[_0xe577('0x71')](_0x468c61));return _0x492ccb;});}return _0x492ccb;});}return _0x492ccb;}})[_0xe577('0x1f')](respondWithResult(_0x23f95c,0xc9))[_0xe577('0x29')](handleError(_0x23f95c,null));};var interaction_log=require(_0xe577('0x11'))(_0xe577('0x72'));exports[_0xe577('0x73')]=function(_0x2f97e7,_0x45e5df,_0xeaf590){var _0x5d77da={'channel':_0xe577('0x74')};if(_0x2f97e7[_0xe577('0x57')]['id']){delete _0x2f97e7[_0xe577('0x57')]['id'];}_0x2f97e7[_0xe577('0x57')][_0xe577('0x75')]=!![];_0x2f97e7[_0xe577('0x57')][_0xe577('0x76')]=moment()[_0xe577('0x6f')]('YYYY-MM-DD\x20HH:mm:ss');_0x2f97e7[_0xe577('0x57')][_0xe577('0x77')]=_0x2f97e7[_0xe577('0x57')][_0xe577('0x77')]||_0x2f97e7[_0xe577('0x65')]['id'];return db['MailMessage']['find']({'where':{'id':_0x2f97e7[_0xe577('0x53')]['id'],'UserId':null},'include':[{'model':db[_0xe577('0x78')],'as':'Contact'}]})[_0xe577('0x1f')](handleEntityNotFound(_0x45e5df,null))[_0xe577('0x1f')](saveUpdates(_0x2f97e7[_0xe577('0x57')],null))[_0xe577('0x1f')](function(_0x36fdcf){if(_0x36fdcf){_0x5d77da['message']=_0x36fdcf['get']({'plain':!![]});return db[_0xe577('0x79')]['find']({'where':{'id':_0x36fdcf['MailInteractionId']}});}return null;})[_0xe577('0x1f')](handleEntityNotFound(_0x45e5df,null))[_0xe577('0x1f')](function(_0x6b35c7){if(_0x6b35c7){return _0x6b35c7[_0xe577('0x35')]({'UserId':_0x2f97e7['body'][_0xe577('0x77')],'read1stAt':_[_0xe577('0x7a')](_0x6b35c7[_0xe577('0x7b')])?moment()[_0xe577('0x6f')](_0xe577('0x70')):undefined});}return null;})['then'](function(_0x74e557){if(_0x74e557){_0x5d77da[_0xe577('0x7c')]=_0x74e557[_0xe577('0x7d')]({'plain':!![]});interaction_log[_0xe577('0x20')](_0xe577('0x7e'),_0x2f97e7[_0xe577('0x65')]['id'],_0x2f97e7['user']['name'],_0x2f97e7['user'][_0xe577('0x7f')],_0x5d77da[_0xe577('0x7c')]['id'],_0x2f97e7['body']?JSON[_0xe577('0x71')](_0x2f97e7[_0xe577('0x57')]):'null');return respondWithRpcPromise(_0xe577('0x80'),'acceptMessage',_0x5d77da);}return null;})[_0xe577('0x1f')](function(_0x344582){if(_0x344582){if(_0x2f97e7[_0xe577('0x57')][_0xe577('0x81')]){_0x5d77da[_0xe577('0x27')][_0xe577('0x82')]=util[_0xe577('0x6f')](_0xe577('0x83'),_0x2f97e7[_0xe577('0x65')][_0xe577('0x68')]);_0x5d77da[_0xe577('0x27')]['channel']=_0x5d77da[_0xe577('0x84')];_0x5d77da[_0xe577('0x27')]['event']='accept';return respondWithRpcPromise(_0xe577('0x85'),_0xe577('0x85'),{'event':_0xe577('0x86'),'message':_0x5d77da[_0xe577('0x27')]},client9002)['then'](function(){return _0x5d77da;});}return _0x5d77da;}return null;})[_0xe577('0x1f')](respondWithResult(_0x45e5df,null))[_0xe577('0x29')](handleError(_0x45e5df,null));};var interaction_log=require('../../config/logger')(_0xe577('0x72'));exports[_0xe577('0x33')]=function(_0x5574ec,_0x1488d1,_0x6b0407){var _0x1421e1={'agent':{},'channel':'mail'};if(_0x5574ec['body']['id']){delete _0x5574ec[_0xe577('0x57')]['id'];}_0x5574ec[_0xe577('0x57')][_0xe577('0x77')]=_0x5574ec[_0xe577('0x57')][_0xe577('0x77')]||_0x5574ec[_0xe577('0x65')]['id'];_0x1421e1[_0xe577('0x87')]['id']=_0x5574ec[_0xe577('0x57')][_0xe577('0x77')];return db[_0xe577('0x4f')][_0xe577('0x56')]({'where':{'id':_0x5574ec[_0xe577('0x53')]['id'],'UserId':null}})[_0xe577('0x1f')](handleEntityNotFound(_0x1488d1,null))[_0xe577('0x1f')](function(_0x185e0f){if(_0x185e0f){_0x1421e1[_0xe577('0x27')]=_0x185e0f[_0xe577('0x7d')]({'plain':!![]});return db[_0xe577('0x79')][_0xe577('0x56')]({'where':{'id':_0x185e0f[_0xe577('0x88')]}});}return null;})['then'](handleEntityNotFound(_0x1488d1,null))[_0xe577('0x1f')](function(_0xd83f10){if(_0xd83f10){_0x1421e1[_0xe577('0x7c')]=_0xd83f10['get']({'plain':!![]});interaction_log[_0xe577('0x20')](_0xe577('0x89'),_0x5574ec[_0xe577('0x65')]['id'],_0x5574ec[_0xe577('0x65')][_0xe577('0x68')],_0x5574ec['user'][_0xe577('0x7f')],_0x1421e1[_0xe577('0x7c')]['id'],_0x5574ec[_0xe577('0x57')]?JSON['stringify'](_0x5574ec['body']):'null');return respondWithRpcPromise(_0xe577('0x8a'),_0xe577('0x8b'),_0x1421e1);}return null;})['then'](function(_0xc95929){if(_0xc95929){_0xc95929[_0xe577('0x27')][_0xe577('0x82')]=util[_0xe577('0x6f')](_0xe577('0x83'),_0x5574ec['user'][_0xe577('0x68')]);_0xc95929[_0xe577('0x27')][_0xe577('0x84')]=_0x1421e1[_0xe577('0x84')];_0xc95929[_0xe577('0x27')][_0xe577('0x8c')]='reject';respondWithRpcPromise(_0xe577('0x85'),_0xe577('0x85'),{'event':_0xe577('0x8d'),'message':_0xc95929[_0xe577('0x27')]},client9002);return _0x1421e1;}return null;})['then'](respondWithResult(_0x1488d1,null))['catch'](handleError(_0x1488d1,null));};exports[_0xe577('0x8e')]=function(_0x59c445,_0x272014){var _0xd75848=moment()[_0xe577('0x8f')]()[_0xe577('0x90')]();var _0x459a16=path[_0xe577('0x91')](config[_0xe577('0x69')],_0xe577('0x92'),'files',_0xe577('0x93'));var _0x570f23=path['join'](config[_0xe577('0x69')],_0xe577('0x92'),_0xe577('0x94'),'attachments');var _0x95008a=util[_0xe577('0x6f')](_0xe577('0x95'),_0xd75848);return db[_0xe577('0x4f')][_0xe577('0x56')]({'where':{'id':_0x59c445[_0xe577('0x53')]['id']},'attributes':['id',_0xe577('0x57'),_0xe577('0x96'),'to','cc',_0xe577('0x97'),_0xe577('0x98'),_0xe577('0x99')],'include':_0x59c445[_0xe577('0x3c')][_0xe577('0x67')]?[{'model':db[_0xe577('0x9a')],'as':_0xe577('0x9b')}]:undefined})[_0xe577('0x1f')](handleEntityNotFound(_0x272014,null))[_0xe577('0x1f')](function(_0x27c68e){if(_0x27c68e){var _0x291e3f=_0x27c68e;var _0x19a485={'from':_0x291e3f[_0xe577('0x96')],'to':_0x291e3f['to'],'subject':_0x291e3f[_0xe577('0x98')],'html':_0x291e3f[_0xe577('0x57')],'headers':{'Date':moment(_0x291e3f['createdAt'])['format'](_0xe577('0x9c'))},'attachments':[]};if(_0x27c68e['cc']){_0x19a485[_0xe577('0x9d')]['Cc']=_0x27c68e['cc'];}if(_0x27c68e['bcc']){_0x19a485[_0xe577('0x9d')]['Bcc']=_0x27c68e['bcc'];}return new BPromise(function(_0x34b816,_0x43fdf3){if(_0x27c68e[_0xe577('0x9b')]){for(var _0xf04d31=0x0;_0xf04d31<_0x27c68e[_0xe577('0x9b')][_0xe577('0x41')];_0xf04d31++){var _0x5b3a49=_0x27c68e[_0xe577('0x9b')][_0xf04d31];var _0x7efc98=path[_0xe577('0x91')](_0x570f23,_0x5b3a49[_0xe577('0x6b')]);if(fs['existsSync'](_0x7efc98)){_0x19a485[_0xe577('0x67')]['push']({'name':_0x5b3a49['name'],'contentType':_0x5b3a49[_0xe577('0x4a')],'data':fs[_0xe577('0x9e')](_0x7efc98)});}}}emlformat[_0xe577('0x9f')](_0x19a485,function(_0x1b580,_0x109e5d){if(_0x1b580)return _0x43fdf3(_0x1b580);fs[_0xe577('0xa0')](path[_0xe577('0x91')](_0x459a16,_0x95008a),_0x109e5d);return _0x34b816(_0x109e5d);});});}})['then'](function(_0x221b2f){if(_0x221b2f){return _0x272014[_0xe577('0x8e')](path[_0xe577('0x91')](_0x459a16,_0x95008a),_0x95008a,function(_0x71f758){if(_0x71f758){console[_0xe577('0xa1')](_0xe577('0xa2'),_0x71f758);}else{fs[_0xe577('0xa3')](path[_0xe577('0x91')](_0x459a16,_0x95008a));}});}})[_0xe577('0x29')](handleError(_0x272014,null));};
\ No newline at end of file
+var _0x43ff=['service','attachments','join','root','server/files/attachments','basename','SendMail','sendMail','messageId','format','YYYY-MM-DD\x20HH:mm:ss','mail-interactions','accept','mail','read','readAt','UserId','Contact','get','MailInteraction','read1stAt','interaction','[MAILMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','stringify','null','AcceptMessage','acceptMessage','manual','interface','channel','event','EventManager','MailInteractionId','RejectMessage','SIP/%s','reject','rejectmessage','toString','server','files','tmp','bcc','subject','Attachment','Attachments','from','ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ','headers','Bcc','existsSync','push','readFileSync','build','err','zip-dir','fast-json-patch','request-promise','moment','mustache','sox','to-csv','lodash','crypto','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','defaults','redis','localhost','./mailMessage.socket','register','jayson/promise','client','http','test','request','then','MailMessage,\x20%s,\x20%s','request\x20sent','debug','MailMessage,\x20%s,\x20%s,\x20%s','error','code','message','info','result','status','end','count','offset','set','Content-Range','json','save','update','sendStatus','stack','name','send','index','MailMessage','model','query','filters','intersection','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','map','type','includeAll','include','findAll','rows','catch','show','params','keys','rawAttributes','fields','merge','find','body','describe','create','out','secret','MailAccount','findOne','MailAccountId','MailServerOut','Smtp','isNil','host','port','secure','authentication','auth','user','pass'];(function(_0x5a9c42,_0x1522a0){var _0x36d349=function(_0x4cff40){while(--_0x4cff40){_0x5a9c42['push'](_0x5a9c42['shift']());}};_0x36d349(++_0x1522a0);}(_0x43ff,0x16b));var _0xf43f=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x43ff[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xf43f('0x0'));var jsonpatch=require(_0xf43f('0x1'));var rp=require(_0xf43f('0x2'));var moment=require(_0xf43f('0x3'));var BPromise=require('bluebird');var Mustache=require(_0xf43f('0x4'));var util=require('util');var path=require('path');var sox=require(_0xf43f('0x5'));var csv=require(_0xf43f('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xf43f('0x7'));var squel=require('squel');var crypto=require(_0xf43f('0x8'));var jsforce=require(_0xf43f('0x9'));var deskjs=require(_0xf43f('0xa'));var toCsv=require(_0xf43f('0x6'));var querystring=require('querystring');var Papa=require(_0xf43f('0xb'));var Redis=require(_0xf43f('0xc'));var authService=require(_0xf43f('0xd'));var qs=require(_0xf43f('0xe'));var hardwareService=require(_0xf43f('0xf'));var logger=require(_0xf43f('0x10'))('api');var utils=require(_0xf43f('0x11'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config['redis']=_[_0xf43f('0x12')](config[_0xf43f('0x13')],{'host':_0xf43f('0x14'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xf43f('0x13')]));require(_0xf43f('0x15'))[_0xf43f('0x16')](socket);var jayson=require(_0xf43f('0x17'));var client=jayson[_0xf43f('0x18')][_0xf43f('0x19')]({'port':0x232c});var client9003=jayson[_0xf43f('0x18')][_0xf43f('0x19')]({'port':0x232b});var client9002=jayson[_0xf43f('0x18')][_0xf43f('0x19')]({'port':0x232a});function checkPasswordPattern(_0x27b154,_0x57f2e8,_0x4f2b82){if(_0x4f2b82){var _0x1a3fb2=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x1a3fb2[_0xf43f('0x1a')](_0x57f2e8)){return _0x27b154;}else{throw new Error('The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.');}}else{return _0x27b154;}}function respondWithRpcPromise(_0x276cc4,_0x4b72ab,_0x535818,_0x453796){return new BPromise(function(_0x397238,_0xd23928){var _0x45c58c=_0x453796||client;return _0x45c58c[_0xf43f('0x1b')](_0x276cc4,_0x535818)[_0xf43f('0x1c')](function(_0x3ffc53){logger['info'](_0xf43f('0x1d'),_0x4b72ab,_0xf43f('0x1e'));logger[_0xf43f('0x1f')](_0xf43f('0x20'),_0x4b72ab,_0xf43f('0x1e'),JSON['stringify'](_0x3ffc53));if(_0x3ffc53[_0xf43f('0x21')]){if(_0x3ffc53[_0xf43f('0x21')][_0xf43f('0x22')]===0x1f4){logger['error']('MailMessage,\x20%s,\x20%s',_0x4b72ab,_0x3ffc53['error'][_0xf43f('0x23')]);return _0xd23928(_0x3ffc53['error'][_0xf43f('0x23')]);}logger[_0xf43f('0x21')](_0xf43f('0x1d'),_0x4b72ab,_0x3ffc53['error']['message']);return _0x397238(_0x3ffc53['error'][_0xf43f('0x23')]);}else{logger[_0xf43f('0x24')](_0xf43f('0x1d'),_0x4b72ab,_0xf43f('0x1e'));_0x397238(_0x3ffc53[_0xf43f('0x25')][_0xf43f('0x23')]);}})['catch'](function(_0x256a6c){logger[_0xf43f('0x21')](_0xf43f('0x1d'),_0x4b72ab,_0x256a6c);_0xd23928(_0x256a6c);});});}function respondWithStatusCode(_0x34580e,_0x30adda){_0x30adda=_0x30adda||0xcc;return function(_0x13891e){if(_0x13891e){return _0x34580e['sendStatus'](_0x30adda);}return _0x34580e[_0xf43f('0x26')](_0x30adda)[_0xf43f('0x27')]();};}function respondWithResult(_0x217421,_0x3c933a){_0x3c933a=_0x3c933a||0xc8;return function(_0x5288f9){if(_0x5288f9){return _0x217421[_0xf43f('0x26')](_0x3c933a)['json'](_0x5288f9);}};}function respondWithFilteredResult(_0x1bf0c0,_0x4246be){return function(_0x11eaa2){if(_0x11eaa2){var _0x300e0f=_0x11eaa2[_0xf43f('0x28')],_0xbd6572=_0x4246be[_0xf43f('0x29')],_0x19085f=_0x4246be['offset']+_0x4246be['limit'],_0x18f8c3;if(_0x19085f>=_0x300e0f){_0x19085f=_0x300e0f;_0x18f8c3=0xc8;}else{_0x18f8c3=0xce;}_0x1bf0c0[_0xf43f('0x26')](_0x18f8c3);return _0x1bf0c0[_0xf43f('0x2a')](_0xf43f('0x2b'),_0xbd6572+'-'+_0x19085f+'/'+_0x300e0f)[_0xf43f('0x2c')](_0x11eaa2);}return null;};}function patchUpdates(_0x3b70e1){return function(_0x5ca12c){try{jsonpatch['apply'](_0x5ca12c,_0x3b70e1,!![]);}catch(_0x4213aa){return BPromise['reject'](_0x4213aa);}return _0x5ca12c[_0xf43f('0x2d')]();};}function saveUpdates(_0x25e834,_0x55eeb0){return function(_0x54378a){if(_0x54378a){return _0x54378a[_0xf43f('0x2e')](_0x25e834)[_0xf43f('0x1c')](function(_0x48762b){return _0x48762b;});}return null;};}function removeEntity(_0x6bed27,_0xe241c1){return function(_0x8673e8){if(_0x8673e8){return _0x8673e8['destroy']()['then'](function(){_0x6bed27[_0xf43f('0x26')](0xcc)[_0xf43f('0x27')]();});}};}function handleEntityNotFound(_0x585f8a,_0x16ee71){return function(_0x1ba464){if(!_0x1ba464){_0x585f8a[_0xf43f('0x2f')](0x194);}return _0x1ba464;};}function handleError(_0x1fb25e,_0x55b436){_0x55b436=_0x55b436||0x1f4;return function(_0x277796){logger[_0xf43f('0x21')](_0x277796[_0xf43f('0x30')]);if(_0x277796[_0xf43f('0x31')]){delete _0x277796[_0xf43f('0x31')];}_0x1fb25e[_0xf43f('0x26')](_0x55b436)[_0xf43f('0x32')](_0x277796);};}exports[_0xf43f('0x33')]=function(_0x24c94b,_0x6755f6){var _0xbbad61={},_0x454d08={},_0x256d3c={'count':0x0,'rows':[]};var _0x2ec932=db[_0xf43f('0x34')]['rawAttributes'];_0x454d08[_0xf43f('0x35')]=_['keys'](_0x2ec932);_0x454d08[_0xf43f('0x36')]=_['keys'](_0x24c94b['query']);_0x454d08[_0xf43f('0x37')]=_[_0xf43f('0x38')](_0x454d08[_0xf43f('0x35')],_0x454d08[_0xf43f('0x36')]);_0xbbad61[_0xf43f('0x39')]=_[_0xf43f('0x38')](_0x454d08['model'],qs['fields'](_0x24c94b['query']['fields']));_0xbbad61['attributes']=_0xbbad61[_0xf43f('0x39')][_0xf43f('0x3a')]?_0xbbad61[_0xf43f('0x39')]:_0x454d08['model'];if(!_0x24c94b['query'][_0xf43f('0x3b')](_0xf43f('0x3c'))){_0xbbad61[_0xf43f('0x3d')]=qs[_0xf43f('0x3d')](_0x24c94b['query']['limit']);_0xbbad61[_0xf43f('0x29')]=qs[_0xf43f('0x29')](_0x24c94b[_0xf43f('0x36')]['offset']);}_0xbbad61[_0xf43f('0x3e')]=qs['sort'](_0x24c94b[_0xf43f('0x36')][_0xf43f('0x3f')]);_0xbbad61[_0xf43f('0x40')]=qs['filters'](_[_0xf43f('0x41')](_0x24c94b[_0xf43f('0x36')],_0x454d08['filters']));if(_0x24c94b[_0xf43f('0x36')][_0xf43f('0x42')]){_0xbbad61[_0xf43f('0x40')]=_['merge'](_0xbbad61['where'],{'$or':_[_0xf43f('0x43')](_0x2ec932,function(_0x2ac15f){if(_0x2ac15f[_0xf43f('0x44')]['key']!=='VIRTUAL'){var _0x200d1c={};_0x200d1c[_0x2ac15f['field']]={'$like':'%'+_0x24c94b[_0xf43f('0x36')]['filter']+'%'};return _0x200d1c;}})});}_0xbbad61=_['merge']({},_0xbbad61,_0x24c94b['options']);var _0x13098f={'where':_0xbbad61['where']};return db[_0xf43f('0x34')]['count'](_0x13098f)[_0xf43f('0x1c')](function(_0x3c0fb4){_0x256d3c[_0xf43f('0x28')]=_0x3c0fb4;if(_0x24c94b[_0xf43f('0x36')][_0xf43f('0x45')]){_0xbbad61[_0xf43f('0x46')]=[{'all':!![]}];}return db[_0xf43f('0x34')][_0xf43f('0x47')](_0xbbad61);})[_0xf43f('0x1c')](function(_0x117879){_0x256d3c[_0xf43f('0x48')]=_0x117879;return _0x256d3c;})['then'](respondWithFilteredResult(_0x6755f6,_0xbbad61))[_0xf43f('0x49')](handleError(_0x6755f6,null));};exports[_0xf43f('0x4a')]=function(_0x31ce6f,_0x4ea65e){var _0x1cbaa7={'raw':!![],'where':{'id':_0x31ce6f[_0xf43f('0x4b')]['id']}},_0x176bbf={};_0x176bbf[_0xf43f('0x35')]=_[_0xf43f('0x4c')](db[_0xf43f('0x34')][_0xf43f('0x4d')]);_0x176bbf[_0xf43f('0x36')]=_[_0xf43f('0x4c')](_0x31ce6f[_0xf43f('0x36')]);_0x176bbf['filters']=_[_0xf43f('0x38')](_0x176bbf[_0xf43f('0x35')],_0x176bbf[_0xf43f('0x36')]);_0x1cbaa7[_0xf43f('0x39')]=_['intersection'](_0x176bbf[_0xf43f('0x35')],qs[_0xf43f('0x4e')](_0x31ce6f[_0xf43f('0x36')]['fields']));_0x1cbaa7[_0xf43f('0x39')]=_0x1cbaa7[_0xf43f('0x39')][_0xf43f('0x3a')]?_0x1cbaa7[_0xf43f('0x39')]:_0x176bbf['model'];if(_0x31ce6f[_0xf43f('0x36')]['includeAll']){_0x1cbaa7['include']=[{'all':!![]}];}_0x1cbaa7=_[_0xf43f('0x4f')]({},_0x1cbaa7,_0x31ce6f['options']);return db[_0xf43f('0x34')][_0xf43f('0x50')](_0x1cbaa7)[_0xf43f('0x1c')](handleEntityNotFound(_0x4ea65e,null))['then'](respondWithResult(_0x4ea65e,null))[_0xf43f('0x49')](handleError(_0x4ea65e,null));};exports[_0xf43f('0x2e')]=function(_0x4c69c9,_0x2126cb){if(_0x4c69c9[_0xf43f('0x51')]['id']){delete _0x4c69c9[_0xf43f('0x51')]['id'];}return db[_0xf43f('0x34')][_0xf43f('0x50')]({'where':{'id':_0x4c69c9[_0xf43f('0x4b')]['id']}})[_0xf43f('0x1c')](handleEntityNotFound(_0x2126cb,null))[_0xf43f('0x1c')](saveUpdates(_0x4c69c9[_0xf43f('0x51')],null))[_0xf43f('0x1c')](respondWithResult(_0x2126cb,null))[_0xf43f('0x49')](handleError(_0x2126cb,null));};exports['destroy']=function(_0x279cd5,_0x153a5c){return db['MailMessage'][_0xf43f('0x50')]({'where':{'id':_0x279cd5[_0xf43f('0x4b')]['id']}})[_0xf43f('0x1c')](handleEntityNotFound(_0x153a5c,null))[_0xf43f('0x1c')](removeEntity(_0x153a5c,null))[_0xf43f('0x49')](handleError(_0x153a5c,null));};exports[_0xf43f('0x52')]=function(_0x2d1564,_0x5144ee){return db['MailMessage'][_0xf43f('0x52')]()[_0xf43f('0x1c')](respondWithResult(_0x5144ee,null))[_0xf43f('0x49')](handleError(_0x5144ee,null));};exports[_0xf43f('0x53')]=function(_0x39a18c,_0x573ced){return db[_0xf43f('0x34')][_0xf43f('0x53')](_0x39a18c['body'])['then'](function(_0x2a51b5){if(_0x2a51b5){if(_0x2a51b5['direction']===_0xf43f('0x54')&&!_0x2a51b5[_0xf43f('0x55')]){return db[_0xf43f('0x56')][_0xf43f('0x57')]({'where':{'id':_0x2a51b5[_0xf43f('0x58')]},'include':[{'model':db[_0xf43f('0x59')],'as':'Smtp','raw':!![]}]})[_0xf43f('0x1c')](function(_0x29928b){if(_0x29928b&&_0x29928b[_0xf43f('0x5a')]){var _0x2edaa8={'tls':{'rejectUnauthorized':![]}};if(_[_0xf43f('0x5b')](_0x29928b['Smtp']['service'])){_0x2edaa8[_0xf43f('0x5c')]=_0x29928b[_0xf43f('0x5a')][_0xf43f('0x5c')];_0x2edaa8[_0xf43f('0x5d')]=_0x29928b[_0xf43f('0x5a')]['port'];_0x2edaa8[_0xf43f('0x5e')]=_0x29928b[_0xf43f('0x5a')][_0xf43f('0x5e')];if(_0x29928b[_0xf43f('0x5a')][_0xf43f('0x5f')]){_0x2edaa8[_0xf43f('0x60')]={'user':_0x29928b[_0xf43f('0x5a')][_0xf43f('0x61')],'pass':_0x29928b[_0xf43f('0x5a')][_0xf43f('0x62')]};}}else{_0x2edaa8['service']=_0x29928b['Smtp'][_0xf43f('0x63')];_0x2edaa8[_0xf43f('0x60')]={'user':_0x29928b['Smtp'][_0xf43f('0x61')],'pass':_0x29928b[_0xf43f('0x5a')]['pass']};_0x2edaa8['secure']=_0x29928b[_0xf43f('0x5a')][_0xf43f('0x5e')];}if(_0x39a18c['body'][_0xf43f('0x64')]&&_0x39a18c[_0xf43f('0x51')][_0xf43f('0x64')][_0xf43f('0x3a')]){for(var _0x9c4816=0x0;_0x9c4816<_0x39a18c[_0xf43f('0x51')][_0xf43f('0x64')][_0xf43f('0x3a')];_0x9c4816+=0x1){_0x39a18c[_0xf43f('0x51')][_0xf43f('0x64')][_0x9c4816]={'filename':_0x39a18c['body'][_0xf43f('0x64')][_0x9c4816][_0xf43f('0x31')],'path':path[_0xf43f('0x65')](config[_0xf43f('0x66')],_0xf43f('0x67'),_0x39a18c[_0xf43f('0x51')][_0xf43f('0x64')][_0x9c4816][_0xf43f('0x68')])};}}return{'account':_0x2edaa8,'message':_0x39a18c[_0xf43f('0x51')]};}})[_0xf43f('0x1c')](function(_0x26735c){if(_0x26735c){return respondWithRpcPromise(_0xf43f('0x69'),_0xf43f('0x6a'),_0x26735c,client9003)[_0xf43f('0x1c')](function(_0x514db7){return _0x2a51b5[_0xf43f('0x2e')]({'read':!![],'messageId':_0x514db7[_0xf43f('0x6b')],'sentAt':moment()[_0xf43f('0x6c')](_0xf43f('0x6d'))});})[_0xf43f('0x49')](function(_0x13d8df){logger[_0xf43f('0x21')]('%s',JSON['stringify'](_0x13d8df));return _0x2a51b5;});}return _0x2a51b5;});}return _0x2a51b5;}})['then'](respondWithResult(_0x573ced,0xc9))[_0xf43f('0x49')](handleError(_0x573ced,null));};var interaction_log=require(_0xf43f('0x10'))(_0xf43f('0x6e'));exports[_0xf43f('0x6f')]=function(_0x4da353,_0x565f40,_0x155a5f){var _0x5a8889={'channel':_0xf43f('0x70')};if(_0x4da353[_0xf43f('0x51')]['id']){delete _0x4da353[_0xf43f('0x51')]['id'];}_0x4da353[_0xf43f('0x51')][_0xf43f('0x71')]=!![];_0x4da353['body'][_0xf43f('0x72')]=moment()[_0xf43f('0x6c')]('YYYY-MM-DD\x20HH:mm:ss');_0x4da353[_0xf43f('0x51')][_0xf43f('0x73')]=_0x4da353[_0xf43f('0x51')][_0xf43f('0x73')]||_0x4da353[_0xf43f('0x61')]['id'];return db[_0xf43f('0x34')][_0xf43f('0x50')]({'where':{'id':_0x4da353['params']['id'],'UserId':null},'include':[{'model':db['CmContact'],'as':_0xf43f('0x74')}]})[_0xf43f('0x1c')](handleEntityNotFound(_0x565f40,null))[_0xf43f('0x1c')](saveUpdates(_0x4da353[_0xf43f('0x51')],null))[_0xf43f('0x1c')](function(_0x2f9f3c){if(_0x2f9f3c){_0x5a8889['message']=_0x2f9f3c[_0xf43f('0x75')]({'plain':!![]});return db[_0xf43f('0x76')]['find']({'where':{'id':_0x2f9f3c['MailInteractionId']}});}return null;})[_0xf43f('0x1c')](handleEntityNotFound(_0x565f40,null))['then'](function(_0xfde37b){if(_0xfde37b){return _0xfde37b[_0xf43f('0x2e')]({'UserId':_0x4da353['body'][_0xf43f('0x73')],'read1stAt':_['isNil'](_0xfde37b[_0xf43f('0x77')])?moment()[_0xf43f('0x6c')](_0xf43f('0x6d')):undefined});}return null;})[_0xf43f('0x1c')](function(_0xe54f5e){if(_0xe54f5e){_0x5a8889[_0xf43f('0x78')]=_0xe54f5e[_0xf43f('0x75')]({'plain':!![]});interaction_log['info'](_0xf43f('0x79'),_0x4da353['user']['id'],_0x4da353['user'][_0xf43f('0x31')],_0x4da353[_0xf43f('0x61')][_0xf43f('0x7a')],_0x5a8889[_0xf43f('0x78')]['id'],_0x4da353[_0xf43f('0x51')]?JSON[_0xf43f('0x7b')](_0x4da353[_0xf43f('0x51')]):_0xf43f('0x7c'));return respondWithRpcPromise(_0xf43f('0x7d'),_0xf43f('0x7e'),_0x5a8889);}return null;})[_0xf43f('0x1c')](function(_0x506892){if(_0x506892){if(_0x4da353[_0xf43f('0x51')][_0xf43f('0x7f')]){_0x5a8889['message'][_0xf43f('0x80')]=util[_0xf43f('0x6c')]('SIP/%s',_0x4da353['user']['name']);_0x5a8889[_0xf43f('0x23')][_0xf43f('0x81')]=_0x5a8889[_0xf43f('0x81')];_0x5a8889['message'][_0xf43f('0x82')]=_0xf43f('0x6f');return respondWithRpcPromise(_0xf43f('0x83'),_0xf43f('0x83'),{'event':'acceptmessage','message':_0x5a8889[_0xf43f('0x23')]},client9002)[_0xf43f('0x1c')](function(){return _0x5a8889;});}return _0x5a8889;}return null;})['then'](respondWithResult(_0x565f40,null))[_0xf43f('0x49')](handleError(_0x565f40,null));};var interaction_log=require(_0xf43f('0x10'))(_0xf43f('0x6e'));exports['reject']=function(_0x16b348,_0x5ab2e2,_0x238c06){var _0x145652={'agent':{},'channel':_0xf43f('0x70')};if(_0x16b348[_0xf43f('0x51')]['id']){delete _0x16b348[_0xf43f('0x51')]['id'];}_0x16b348[_0xf43f('0x51')][_0xf43f('0x73')]=_0x16b348[_0xf43f('0x51')][_0xf43f('0x73')]||_0x16b348[_0xf43f('0x61')]['id'];_0x145652['agent']['id']=_0x16b348[_0xf43f('0x51')][_0xf43f('0x73')];return db[_0xf43f('0x34')][_0xf43f('0x50')]({'where':{'id':_0x16b348[_0xf43f('0x4b')]['id'],'UserId':null}})[_0xf43f('0x1c')](handleEntityNotFound(_0x5ab2e2,null))[_0xf43f('0x1c')](function(_0x288298){if(_0x288298){_0x145652[_0xf43f('0x23')]=_0x288298[_0xf43f('0x75')]({'plain':!![]});return db[_0xf43f('0x76')]['find']({'where':{'id':_0x288298[_0xf43f('0x84')]}});}return null;})[_0xf43f('0x1c')](handleEntityNotFound(_0x5ab2e2,null))['then'](function(_0x4d3b37){if(_0x4d3b37){_0x145652['interaction']=_0x4d3b37[_0xf43f('0x75')]({'plain':!![]});interaction_log[_0xf43f('0x24')]('[MAILMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x16b348[_0xf43f('0x61')]['id'],_0x16b348['user'][_0xf43f('0x31')],_0x16b348['user'][_0xf43f('0x7a')],_0x145652['interaction']['id'],_0x16b348[_0xf43f('0x51')]?JSON[_0xf43f('0x7b')](_0x16b348[_0xf43f('0x51')]):_0xf43f('0x7c'));return respondWithRpcPromise(_0xf43f('0x85'),'rejectMessage',_0x145652);}return null;})['then'](function(_0x583826){if(_0x583826){_0x583826[_0xf43f('0x23')]['interface']=util[_0xf43f('0x6c')](_0xf43f('0x86'),_0x16b348['user'][_0xf43f('0x31')]);_0x583826[_0xf43f('0x23')][_0xf43f('0x81')]=_0x145652[_0xf43f('0x81')];_0x583826['message']['event']=_0xf43f('0x87');respondWithRpcPromise(_0xf43f('0x83'),_0xf43f('0x83'),{'event':_0xf43f('0x88'),'message':_0x583826[_0xf43f('0x23')]},client9002);return _0x145652;}return null;})[_0xf43f('0x1c')](respondWithResult(_0x5ab2e2,null))['catch'](handleError(_0x5ab2e2,null));};exports['download']=function(_0xdd2655,_0x5d3123){var _0x5f5c9e=moment()['unix']()[_0xf43f('0x89')]();var _0x4dd8ec=path['join'](config[_0xf43f('0x66')],_0xf43f('0x8a'),_0xf43f('0x8b'),_0xf43f('0x8c'));var _0x53e036=path['join'](config[_0xf43f('0x66')],_0xf43f('0x8a'),_0xf43f('0x8b'),'attachments');var _0x42904a=util[_0xf43f('0x6c')]('message-%s.eml',_0x5f5c9e);return db[_0xf43f('0x34')]['find']({'where':{'id':_0xdd2655['params']['id']},'attributes':['id',_0xf43f('0x51'),'from','to','cc',_0xf43f('0x8d'),_0xf43f('0x8e'),'createdAt'],'include':_0xdd2655[_0xf43f('0x36')][_0xf43f('0x64')]?[{'model':db[_0xf43f('0x8f')],'as':_0xf43f('0x90')}]:undefined})['then'](handleEntityNotFound(_0x5d3123,null))[_0xf43f('0x1c')](function(_0x3e920a){if(_0x3e920a){var _0x48548a=_0x3e920a;var _0x2617ff={'from':_0x48548a[_0xf43f('0x91')],'to':_0x48548a['to'],'subject':_0x48548a[_0xf43f('0x8e')],'html':_0x48548a[_0xf43f('0x51')],'headers':{'Date':moment(_0x48548a['createdAt'])[_0xf43f('0x6c')](_0xf43f('0x92'))},'attachments':[]};if(_0x3e920a['cc']){_0x2617ff[_0xf43f('0x93')]['Cc']=_0x3e920a['cc'];}if(_0x3e920a['bcc']){_0x2617ff[_0xf43f('0x93')][_0xf43f('0x94')]=_0x3e920a[_0xf43f('0x8d')];}return new BPromise(function(_0x138630,_0x1f4b81){if(_0x3e920a['Attachments']){for(var _0x22945c=0x0;_0x22945c<_0x3e920a[_0xf43f('0x90')][_0xf43f('0x3a')];_0x22945c++){var _0x4c77ff=_0x3e920a['Attachments'][_0x22945c];var _0x2ea869=path[_0xf43f('0x65')](_0x53e036,_0x4c77ff[_0xf43f('0x68')]);if(fs[_0xf43f('0x95')](_0x2ea869)){_0x2617ff['attachments'][_0xf43f('0x96')]({'name':_0x4c77ff['name'],'contentType':_0x4c77ff[_0xf43f('0x44')],'data':fs[_0xf43f('0x97')](_0x2ea869)});}}}emlformat[_0xf43f('0x98')](_0x2617ff,function(_0x514c38,_0xe6ff3f){if(_0x514c38)return _0x1f4b81(_0x514c38);fs['writeFileSync'](path[_0xf43f('0x65')](_0x4dd8ec,_0x42904a),_0xe6ff3f);return _0x138630(_0xe6ff3f);});});}})['then'](function(_0x5bb238){if(_0x5bb238){return _0x5d3123['download'](path[_0xf43f('0x65')](_0x4dd8ec,_0x42904a),_0x42904a,function(_0x419bd2){if(_0x419bd2){console['log'](_0xf43f('0x99'),_0x419bd2);}else{fs['unlinkSync'](path[_0xf43f('0x65')](_0x4dd8ec,_0x42904a));}});}})[_0xf43f('0x49')](handleError(_0x5d3123,null));};
\ No newline at end of file
index edf953a..cf6678b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaf09=['emit','hasOwnProperty','hook','exports','events','../../mysqldb','MailMessage','setMaxListeners','update'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xaf09,0xa6));var _0x9af0=function(_0x24237f,_0x4cf32c){_0x24237f=_0x24237f-0x0;var _0x48298e=_0xaf09[_0x24237f];return _0x48298e;};'use strict';var EventEmitter=require(_0x9af0('0x0'));var MailMessage=require(_0x9af0('0x1'))['db'][_0x9af0('0x2')];var MailMessageEvents=new EventEmitter();MailMessageEvents[_0x9af0('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x9af0('0x4'),'afterDestroy':'remove'};function emitEvent(_0x16f8a4){return function(_0x171afe,_0x5340b3,_0x407010){MailMessageEvents[_0x9af0('0x5')](_0x16f8a4+':'+_0x171afe['id'],_0x171afe);MailMessageEvents[_0x9af0('0x5')](_0x16f8a4,_0x171afe);_0x407010(null);};}for(var e in events){if(events[_0x9af0('0x6')](e)){var event=events[e];MailMessage[_0x9af0('0x7')](e,emitEvent(event));}}module[_0x9af0('0x8')]=MailMessageEvents;
\ No newline at end of file
+var _0xc96c=['setMaxListeners','update','remove','emit','hook','exports','../../mysqldb'];(function(_0x11cc5b,_0x110244){var _0x46e399=function(_0x4ccea8){while(--_0x4ccea8){_0x11cc5b['push'](_0x11cc5b['shift']());}};_0x46e399(++_0x110244);}(_0xc96c,0x1db));var _0xcc96=function(_0x592af0,_0x6c7240){_0x592af0=_0x592af0-0x0;var _0x24ead5=_0xc96c[_0x592af0];return _0x24ead5;};'use strict';var EventEmitter=require('events');var MailMessage=require(_0xcc96('0x0'))['db']['MailMessage'];var MailMessageEvents=new EventEmitter();MailMessageEvents[_0xcc96('0x1')](0x0);var events={'afterCreate':'save','afterUpdate':_0xcc96('0x2'),'afterDestroy':_0xcc96('0x3')};function emitEvent(_0x721444){return function(_0x35e628,_0x4bfc90,_0xbafba5){MailMessageEvents['emit'](_0x721444+':'+_0x35e628['id'],_0x35e628);MailMessageEvents[_0xcc96('0x4')](_0x721444,_0x35e628);_0xbafba5(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];MailMessage[_0xcc96('0x5')](e,emitEvent(event));}}module[_0xcc96('0x6')]=MailMessageEvents;
\ No newline at end of file
index e845994..a2bb3e7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd980=['createdAt','catch','error','utf8mb4','utf8mb4_unicode_ci','lodash','util','moment','bluebird','request-promise','html-to-text','path','rimraf','../../config/environment','./mailMessage.attributes','define','MailMessage','messageId','plainBody','subject','body','fromString','models','get','direction','toLowerCase','MailInteraction','findOne','MailInteractionId','then'];(function(_0x3044e3,_0x255336){var _0x389181=function(_0x4aac71){while(--_0x4aac71){_0x3044e3['push'](_0x3044e3['shift']());}};_0x389181(++_0x255336);}(_0xd980,0xb9));var _0x0d98=function(_0x24945a,_0x2f4a55){_0x24945a=_0x24945a-0x0;var _0x32de20=_0xd980[_0x24945a];return _0x32de20;};'use strict';var _=require(_0x0d98('0x0'));var util=require(_0x0d98('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x0d98('0x2'));var BPromise=require(_0x0d98('0x3'));var rp=require(_0x0d98('0x4'));var htmlToText=require(_0x0d98('0x5'));var fs=require('fs');var path=require(_0x0d98('0x6'));var rimraf=require(_0x0d98('0x7'));var config=require(_0x0d98('0x8'));var attributes=require(_0x0d98('0x9'));module['exports']=function(_0x38b98b,_0x57d691){return _0x38b98b[_0x0d98('0xa')](_0x0d98('0xb'),attributes,{'tableName':'mail_messages','paranoid':![],'indexes':[{'name':_0x0d98('0xc'),'fields':[_0x0d98('0xc')]},{'name':'fti_mail_messages','fields':[_0x0d98('0xd'),_0x0d98('0xe')],'type':'FULLTEXT'}],'timestamps':!![],'hooks':{'beforeCreate':function(_0xb321cf,_0x37fb6a,_0x294fdf){if(_0xb321cf[_0x0d98('0xf')]){_0xb321cf[_0x0d98('0xd')]=htmlToText[_0x0d98('0x10')](_0xb321cf[_0x0d98('0xf')],{'preserveNewlines':!![],'singleNewLineParagraphs':!![],'uppercaseHeadings':![],'noLinkBrackets':!![],'ignoreImage':!![]});}_0x294fdf(null,_0x37fb6a);},'afterCreate':function(_0x4c52f7,_0x1d3886,_0x430da6){var _0x2c6936=_0x38b98b[_0x0d98('0x11')];var _0x2f32d4=_0x4c52f7[_0x0d98('0x12')]({'plain':!![]});if(_0x2f32d4[_0x0d98('0x13')][_0x0d98('0x14')]()==='in'||_0x2f32d4[_0x0d98('0x13')][_0x0d98('0x14')]()==='out'&&!_0x2f32d4['secret']&&!_['isNil'](_0x2f32d4['UserId'])){_0x2c6936[_0x0d98('0x15')][_0x0d98('0x16')]({'where':{'id':_0x2f32d4[_0x0d98('0x17')]}})[_0x0d98('0x18')](function(_0x4788df){if(_0x4788df){_0x4788df['update']({'lastMsgAt':_0x2f32d4[_0x0d98('0x19')],'lastMsgDirection':_0x2f32d4[_0x0d98('0x13')]['toLowerCase'](),'lastMsgBody':_0x2f32d4[_0x0d98('0xf')]});}})[_0x0d98('0x1a')](function(_0x19bda8){console[_0x0d98('0x1b')](_0x19bda8);});}_0x430da6();}},'charset':_0x0d98('0x1c'),'collate':_0x0d98('0x1d')});};
\ No newline at end of file
+var _0xf389=['error','utf8mb4','utf8mb4_unicode_ci','util','../../config/logger','api','moment','bluebird','request-promise','html-to-text','rimraf','./mailMessage.attributes','exports','define','MailMessage','mail_messages','messageId','subject','body','fromString','models','direction','toLowerCase','out','MailInteraction','then','createdAt','catch'];(function(_0x403cff,_0x1cf463){var _0x5a7c56=function(_0x1bab9d){while(--_0x1bab9d){_0x403cff['push'](_0x403cff['shift']());}};_0x5a7c56(++_0x1cf463);}(_0xf389,0x1a7));var _0x9f38=function(_0xddb7c,_0x338320){_0xddb7c=_0xddb7c-0x0;var _0x41f5bc=_0xf389[_0xddb7c];return _0x41f5bc;};'use strict';var _=require('lodash');var util=require(_0x9f38('0x0'));var logger=require(_0x9f38('0x1'))(_0x9f38('0x2'));var moment=require(_0x9f38('0x3'));var BPromise=require(_0x9f38('0x4'));var rp=require(_0x9f38('0x5'));var htmlToText=require(_0x9f38('0x6'));var fs=require('fs');var path=require('path');var rimraf=require(_0x9f38('0x7'));var config=require('../../config/environment');var attributes=require(_0x9f38('0x8'));module[_0x9f38('0x9')]=function(_0x531637,_0x18f4ca){return _0x531637[_0x9f38('0xa')](_0x9f38('0xb'),attributes,{'tableName':_0x9f38('0xc'),'paranoid':![],'indexes':[{'name':_0x9f38('0xd'),'fields':[_0x9f38('0xd')]},{'name':'fti_mail_messages','fields':['plainBody',_0x9f38('0xe')],'type':'FULLTEXT'}],'timestamps':!![],'hooks':{'beforeCreate':function(_0x1c2777,_0x5d31e7,_0x37f412){if(_0x1c2777[_0x9f38('0xf')]){_0x1c2777['plainBody']=htmlToText[_0x9f38('0x10')](_0x1c2777['body'],{'preserveNewlines':!![],'singleNewLineParagraphs':!![],'uppercaseHeadings':![],'noLinkBrackets':!![],'ignoreImage':!![]});}_0x37f412(null,_0x5d31e7);},'afterCreate':function(_0x3d7466,_0x3b3763,_0x576b3a){var _0x27f314=_0x531637[_0x9f38('0x11')];var _0x5057e8=_0x3d7466['get']({'plain':!![]});if(_0x5057e8[_0x9f38('0x12')][_0x9f38('0x13')]()==='in'||_0x5057e8[_0x9f38('0x12')][_0x9f38('0x13')]()===_0x9f38('0x14')&&!_0x5057e8['secret']&&!_['isNil'](_0x5057e8['UserId'])){_0x27f314[_0x9f38('0x15')]['findOne']({'where':{'id':_0x5057e8['MailInteractionId']}})[_0x9f38('0x16')](function(_0x5413ac){if(_0x5413ac){_0x5413ac['update']({'lastMsgAt':_0x5057e8[_0x9f38('0x17')],'lastMsgDirection':_0x5057e8[_0x9f38('0x12')][_0x9f38('0x13')](),'lastMsgBody':_0x5057e8[_0x9f38('0xf')]});}})[_0x9f38('0x18')](function(_0x28ec8f){console[_0x9f38('0x19')](_0x28ec8f);});}_0x576b3a();}},'charset':_0x9f38('0x1a'),'collate':_0x9f38('0x1b')});};
\ No newline at end of file
index c6b3b6d..4d82e94 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x723e=['MailMessage,\x20%s,\x20%s','request\x20sent','debug','error','message','result','catch','MailMessage','body','options','raw','then','CreateMailMessage','stringify','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','redis','defaults','localhost','socket.io-emitter','register','request','info'];(function(_0x18187c,_0x85ae7){var _0x44f458=function(_0x3daf28){while(--_0x3daf28){_0x18187c['push'](_0x18187c['shift']());}};_0x44f458(++_0x85ae7);}(_0x723e,0x179));var _0xe723=function(_0x220d63,_0x2ac173){_0x220d63=_0x220d63-0x0;var _0xffccaa=_0x723e[_0x220d63];return _0xffccaa;};'use strict';var _=require('lodash');var util=require(_0xe723('0x0'));var moment=require(_0xe723('0x1'));var BPromise=require(_0xe723('0x2'));var rs=require(_0xe723('0x3'));var fs=require('fs');var Redis=require(_0xe723('0x4'));var db=require(_0xe723('0x5'))['db'];var utils=require(_0xe723('0x6'));var logger=require(_0xe723('0x7'))(_0xe723('0x8'));var config=require(_0xe723('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xe723('0xa')][_0xe723('0xb')]({'port':0x232a});config[_0xe723('0xc')]=_[_0xe723('0xd')](config[_0xe723('0xc')],{'host':_0xe723('0xe'),'port':0x18eb});var socket=require(_0xe723('0xf'))(new Redis(config[_0xe723('0xc')]));require('./mailMessage.socket')[_0xe723('0x10')](socket);function respondWithRpcPromise(_0x270346,_0x34831f,_0x5a43fb){return new BPromise(function(_0x24eef1,_0x3809af){return client[_0xe723('0x11')](_0x270346,_0x5a43fb)['then'](function(_0x146098){logger[_0xe723('0x12')](_0xe723('0x13'),_0x34831f,_0xe723('0x14'));logger[_0xe723('0x15')]('MailMessage,\x20%s,\x20%s,\x20%s',_0x34831f,_0xe723('0x14'),JSON['stringify'](_0x146098));if(_0x146098['error']){if(_0x146098['error']['code']===0x1f4){logger[_0xe723('0x16')](_0xe723('0x13'),_0x34831f,_0x146098[_0xe723('0x16')][_0xe723('0x17')]);return _0x3809af(_0x146098[_0xe723('0x16')]['message']);}logger[_0xe723('0x16')](_0xe723('0x13'),_0x34831f,_0x146098[_0xe723('0x16')][_0xe723('0x17')]);return _0x24eef1(_0x146098[_0xe723('0x16')][_0xe723('0x17')]);}else{logger[_0xe723('0x12')](_0xe723('0x13'),_0x34831f,_0xe723('0x14'));_0x24eef1(_0x146098[_0xe723('0x18')][_0xe723('0x17')]);}})[_0xe723('0x19')](function(_0x262a8d){logger[_0xe723('0x16')]('MailMessage,\x20%s,\x20%s',_0x34831f,_0x262a8d);_0x3809af(_0x262a8d);});});}exports['CreateMailMessage']=function(_0x31c839){var _0x1ed6fb=this;return new Promise(function(_0x487058,_0x28caca){return db[_0xe723('0x1a')]['create'](_0x31c839[_0xe723('0x1b')],{'raw':_0x31c839['options']?_0x31c839[_0xe723('0x1c')][_0xe723('0x1d')]===undefined?!![]:![]:!![]})[_0xe723('0x1e')](function(_0x1fe43d){logger[_0xe723('0x12')](_0xe723('0x1f'),_0x31c839);logger[_0xe723('0x15')](_0xe723('0x1f'),_0x31c839,JSON[_0xe723('0x20')](_0x1fe43d));_0x487058(_0x1fe43d);})[_0xe723('0x19')](function(_0x4a0899){logger[_0xe723('0x16')]('CreateMailMessage',_0x4a0899[_0xe723('0x17')],_0x31c839);_0x28caca(_0x1ed6fb['error'](0x1f4,_0x4a0899[_0xe723('0x17')]));});});};
\ No newline at end of file
+var _0x8a28=['message','result','catch','MailMessage','create','body','options','CreateMailMessage','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','defaults','localhost','socket.io-emitter','redis','./mailMessage.socket','register','then','info','MailMessage,\x20%s,\x20%s','request\x20sent','MailMessage,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x37d86b,_0x4a4334){var _0x14847d=function(_0x591420){while(--_0x591420){_0x37d86b['push'](_0x37d86b['shift']());}};_0x14847d(++_0x4a4334);}(_0x8a28,0xfd));var _0x88a2=function(_0x3ce3c,_0x319337){_0x3ce3c=_0x3ce3c-0x0;var _0x55a2c9=_0x8a28[_0x3ce3c];return _0x55a2c9;};'use strict';var _=require(_0x88a2('0x0'));var util=require(_0x88a2('0x1'));var moment=require(_0x88a2('0x2'));var BPromise=require(_0x88a2('0x3'));var rs=require(_0x88a2('0x4'));var fs=require('fs');var Redis=require(_0x88a2('0x5'));var db=require(_0x88a2('0x6'))['db'];var utils=require(_0x88a2('0x7'));var logger=require('../../config/logger')(_0x88a2('0x8'));var config=require(_0x88a2('0x9'));var jayson=require(_0x88a2('0xa'));var client=jayson[_0x88a2('0xb')][_0x88a2('0xc')]({'port':0x232a});config['redis']=_[_0x88a2('0xd')](config['redis'],{'host':_0x88a2('0xe'),'port':0x18eb});var socket=require(_0x88a2('0xf'))(new Redis(config[_0x88a2('0x10')]));require(_0x88a2('0x11'))[_0x88a2('0x12')](socket);function respondWithRpcPromise(_0x2d0fce,_0x183ca3,_0x306a59){return new BPromise(function(_0x4eec50,_0x4f02ff){return client['request'](_0x2d0fce,_0x306a59)[_0x88a2('0x13')](function(_0x430931){logger[_0x88a2('0x14')](_0x88a2('0x15'),_0x183ca3,_0x88a2('0x16'));logger['debug'](_0x88a2('0x17'),_0x183ca3,_0x88a2('0x16'),JSON[_0x88a2('0x18')](_0x430931));if(_0x430931[_0x88a2('0x19')]){if(_0x430931['error'][_0x88a2('0x1a')]===0x1f4){logger[_0x88a2('0x19')](_0x88a2('0x15'),_0x183ca3,_0x430931['error'][_0x88a2('0x1b')]);return _0x4f02ff(_0x430931[_0x88a2('0x19')][_0x88a2('0x1b')]);}logger[_0x88a2('0x19')](_0x88a2('0x15'),_0x183ca3,_0x430931[_0x88a2('0x19')][_0x88a2('0x1b')]);return _0x4eec50(_0x430931[_0x88a2('0x19')][_0x88a2('0x1b')]);}else{logger[_0x88a2('0x14')](_0x88a2('0x15'),_0x183ca3,_0x88a2('0x16'));_0x4eec50(_0x430931[_0x88a2('0x1c')][_0x88a2('0x1b')]);}})[_0x88a2('0x1d')](function(_0x162b5f){logger[_0x88a2('0x19')](_0x88a2('0x15'),_0x183ca3,_0x162b5f);_0x4f02ff(_0x162b5f);});});}exports['CreateMailMessage']=function(_0x190aac){var _0x282a27=this;return new Promise(function(_0x4cd11e,_0x499891){return db[_0x88a2('0x1e')][_0x88a2('0x1f')](_0x190aac[_0x88a2('0x20')],{'raw':_0x190aac[_0x88a2('0x21')]?_0x190aac[_0x88a2('0x21')]['raw']===undefined?!![]:![]:!![]})[_0x88a2('0x13')](function(_0xda54c4){logger[_0x88a2('0x14')](_0x88a2('0x22'),_0x190aac);logger['debug'](_0x88a2('0x22'),_0x190aac,JSON['stringify'](_0xda54c4));_0x4cd11e(_0xda54c4);})['catch'](function(_0x26a3a6){logger[_0x88a2('0x19')]('CreateMailMessage',_0x26a3a6['message'],_0x190aac);_0x499891(_0x282a27[_0x88a2('0x19')](0x1f4,_0x26a3a6[_0x88a2('0x1b')]));});});};
\ No newline at end of file
index 75b65d1..adb1020 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x030a=['update','emit','removeListener','register','length','./mailMessage.events','save'];(function(_0x48bcae,_0x27f7d2){var _0x4998b4=function(_0x47072e){while(--_0x47072e){_0x48bcae['push'](_0x48bcae['shift']());}};_0x4998b4(++_0x27f7d2);}(_0x030a,0xc2));var _0xa030=function(_0x2acec2,_0x12ebf1){_0x2acec2=_0x2acec2-0x0;var _0x19aa0d=_0x030a[_0x2acec2];return _0x19aa0d;};'use strict';var MailMessageEvents=require(_0xa030('0x0'));var events=[_0xa030('0x1'),'remove',_0xa030('0x2')];function createListener(_0x5a0350,_0x1e9f21){return function(_0x10079a){_0x1e9f21[_0xa030('0x3')](_0x5a0350,_0x10079a);};}function removeListener(_0x86d003,_0x1f9971){return function(){MailMessageEvents[_0xa030('0x4')](_0x86d003,_0x1f9971);};}exports[_0xa030('0x5')]=function(_0x5b7fdf){for(var _0x46406a=0x0,_0x52b10f=events[_0xa030('0x6')];_0x46406a<_0x52b10f;_0x46406a++){var _0x391672=events[_0x46406a];var _0x20ed6b=createListener('mailMessage:'+_0x391672,_0x5b7fdf);MailMessageEvents['on'](_0x391672,_0x20ed6b);}};
\ No newline at end of file
+var _0xbc74=['mailMessage:','./mailMessage.events','save','remove','emit','length'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xbc74,0x1c3));var _0x4bc7=function(_0x35da42,_0x5c2610){_0x35da42=_0x35da42-0x0;var _0x370035=_0xbc74[_0x35da42];return _0x370035;};'use strict';var MailMessageEvents=require(_0x4bc7('0x0'));var events=[_0x4bc7('0x1'),_0x4bc7('0x2'),'update'];function createListener(_0x370c04,_0x3b7ba0){return function(_0xcadf47){_0x3b7ba0[_0x4bc7('0x3')](_0x370c04,_0xcadf47);};}function removeListener(_0x55820b,_0x469db9){return function(){MailMessageEvents['removeListener'](_0x55820b,_0x469db9);};}exports['register']=function(_0x2f4caf){for(var _0x6a2392=0x0,_0x2db5b3=events[_0x4bc7('0x4')];_0x6a2392<_0x2db5b3;_0x6a2392++){var _0x10d3cc=events[_0x6a2392];var _0x148e37=createListener(_0x4bc7('0x5')+_0x10d3cc,_0x2f4caf);MailMessageEvents['on'](_0x10d3cc,_0x148e37);}};
\ No newline at end of file
index b29d341..093e73f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e19=['update','delete','destroy','removeAgents','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../config/environment','./mailQueue.controller','isAuthenticated','get','/describe','/:id','show','/:id/members','/:id/teams','getTeams','/:id/users','getAgents','post','addTeams'];(function(_0x23351c,_0x33173a){var _0x4126fd=function(_0x2852cb){while(--_0x2852cb){_0x23351c['push'](_0x23351c['shift']());}};_0x4126fd(++_0x33173a);}(_0x4e19,0x1c7));var _0x94e1=function(_0x286c4a,_0x3d559d){_0x286c4a=_0x286c4a-0x0;var _0x476a25=_0x4e19[_0x286c4a];return _0x476a25;};'use strict';var multer=require(_0x94e1('0x0'));var util=require(_0x94e1('0x1'));var path=require(_0x94e1('0x2'));var timeout=require(_0x94e1('0x3'));var express=require('express');var router=express[_0x94e1('0x4')]();var auth=require(_0x94e1('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x94e1('0x6'));var controller=require(_0x94e1('0x7'));router['get']('/',auth[_0x94e1('0x8')](),controller['index']);router[_0x94e1('0x9')](_0x94e1('0xa'),auth[_0x94e1('0x8')](),controller['describe']);router[_0x94e1('0x9')](_0x94e1('0xb'),auth[_0x94e1('0x8')](),controller[_0x94e1('0xc')]);router[_0x94e1('0x9')](_0x94e1('0xd'),auth[_0x94e1('0x8')](),controller['getMembers']);router[_0x94e1('0x9')](_0x94e1('0xe'),auth['isAuthenticated'](),controller[_0x94e1('0xf')]);router['get'](_0x94e1('0x10'),auth[_0x94e1('0x8')](),controller[_0x94e1('0x11')]);router[_0x94e1('0x12')]('/',auth[_0x94e1('0x8')](),controller['create']);router[_0x94e1('0x12')](_0x94e1('0xe'),auth[_0x94e1('0x8')](),controller[_0x94e1('0x13')]);router[_0x94e1('0x12')](_0x94e1('0x10'),auth[_0x94e1('0x8')](),controller['addAgents']);router['put'](_0x94e1('0xb'),auth[_0x94e1('0x8')](),controller[_0x94e1('0x14')]);router[_0x94e1('0x15')](_0x94e1('0xb'),auth[_0x94e1('0x8')](),controller[_0x94e1('0x16')]);router[_0x94e1('0x15')](_0x94e1('0xe'),auth[_0x94e1('0x8')](),controller['removeTeams']);router['delete'](_0x94e1('0x10'),auth[_0x94e1('0x8')](),controller[_0x94e1('0x17')]);module[_0x94e1('0x18')]=router;
\ No newline at end of file
+var _0xd44b=['connect-timeout','express','Router','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','show','/:id/members','getMembers','getTeams','getAgents','post','create','addTeams','/:id/users','put','update','destroy','delete','/:id/teams','removeTeams','removeAgents','util'];(function(_0x3c357e,_0x4c3edf){var _0x5cec9c=function(_0x428f21){while(--_0x428f21){_0x3c357e['push'](_0x3c357e['shift']());}};_0x5cec9c(++_0x4c3edf);}(_0xd44b,0x16b));var _0xbd44=function(_0xe21718,_0x57d3bd){_0xe21718=_0xe21718-0x0;var _0x2abac7=_0xd44b[_0xe21718];return _0x2abac7;};'use strict';var multer=require('multer');var util=require(_0xbd44('0x0'));var path=require('path');var timeout=require(_0xbd44('0x1'));var express=require(_0xbd44('0x2'));var router=express[_0xbd44('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xbd44('0x4'));var config=require(_0xbd44('0x5'));var controller=require('./mailQueue.controller');router[_0xbd44('0x6')]('/',auth[_0xbd44('0x7')](),controller[_0xbd44('0x8')]);router[_0xbd44('0x6')]('/describe',auth[_0xbd44('0x7')](),controller['describe']);router[_0xbd44('0x6')](_0xbd44('0x9'),auth['isAuthenticated'](),controller[_0xbd44('0xa')]);router[_0xbd44('0x6')](_0xbd44('0xb'),auth[_0xbd44('0x7')](),controller[_0xbd44('0xc')]);router[_0xbd44('0x6')]('/:id/teams',auth[_0xbd44('0x7')](),controller[_0xbd44('0xd')]);router[_0xbd44('0x6')]('/:id/users',auth['isAuthenticated'](),controller[_0xbd44('0xe')]);router[_0xbd44('0xf')]('/',auth['isAuthenticated'](),controller[_0xbd44('0x10')]);router[_0xbd44('0xf')]('/:id/teams',auth[_0xbd44('0x7')](),controller[_0xbd44('0x11')]);router[_0xbd44('0xf')](_0xbd44('0x12'),auth[_0xbd44('0x7')](),controller['addAgents']);router[_0xbd44('0x13')]('/:id',auth[_0xbd44('0x7')](),controller[_0xbd44('0x14')]);router['delete']('/:id',auth[_0xbd44('0x7')](),controller[_0xbd44('0x15')]);router[_0xbd44('0x16')](_0xbd44('0x17'),auth[_0xbd44('0x7')](),controller[_0xbd44('0x18')]);router['delete']('/:id/users',auth['isAuthenticated'](),controller[_0xbd44('0x19')]);module['exports']=router;
\ No newline at end of file
index 8d86eef..5ff312b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8d91=['beepall','sequelize','STRING','name','INTEGER','ENUM','rrmemory'];(function(_0x189418,_0x4ee706){var _0x343b35=function(_0x1547e5){while(--_0x1547e5){_0x189418['push'](_0x189418['shift']());}};_0x343b35(++_0x4ee706);}(_0x8d91,0x1e4));var _0x18d9=function(_0xf261b7,_0x35ef78){_0xf261b7=_0xf261b7-0x0;var _0x1360d4=_0x8d91[_0xf261b7];return _0x1360d4;};'use strict';var Sequelize=require(_0x18d9('0x0'));module['exports']={'name':{'type':Sequelize[_0x18d9('0x1')],'unique':_0x18d9('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize[_0x18d9('0x3')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x18d9('0x4')](_0x18d9('0x5'),_0x18d9('0x6'),'roundrobin')}};
\ No newline at end of file
+var _0xc7a8=['roundrobin','sequelize','exports','STRING','name','rrmemory','beepall'];(function(_0x33554b,_0x48162b){var _0x256954=function(_0x185f66){while(--_0x185f66){_0x33554b['push'](_0x33554b['shift']());}};_0x256954(++_0x48162b);}(_0xc7a8,0x17b));var _0x8c7a=function(_0x5ebc95,_0x23bb1f){_0x5ebc95=_0x5ebc95-0x0;var _0x1037e2=_0xc7a8[_0x5ebc95];return _0x1037e2;};'use strict';var Sequelize=require(_0x8c7a('0x0'));module[_0x8c7a('0x1')]={'name':{'type':Sequelize[_0x8c7a('0x2')],'unique':_0x8c7a('0x3'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x8c7a('0x2')]},'timeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM'](_0x8c7a('0x4'),_0x8c7a('0x5'),_0x8c7a('0x6'))}};
\ No newline at end of file
index 96b8294..522044d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x68a2=['getAgents','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','lodash','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./mailQueue.socket','sendStatus','end','count','offset','limit','status','set','json','apply','reject','save','destroy','then','get','MailQueues','UserProfileResource','error','stack','name','send','keys','query','intersection','attributes','model','fields','hasOwnProperty','nolimit','order','sort','where','filters','pick','map','type','key','VIRTUAL','field','filter','includeAll','include','findAll','rows','catch','show','MailQueue','length','merge','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','params','describe','getMembers','findOne','UserMailQueue','rawAttributes','MailQueueId','options','findAndCountAll','UserId','agent','mailPause','updatedAt','createdAt','format','%s/%s','SIP','Team','getTeams','addTeams','teams','User','Agents','online','voicePause','interface','flatMap','sequelize','transaction','findOrCreate','forEach','emit','userMailQueue:save','removeTeams','ids','join','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','MailQueueId\x20=\x20?','clone','ut.UserId\x20=\x20?','push','QueryTypes','SELECT','every','TeamId','compact','value','isEmpty','removeAgents','userMailQueue:remove','addAgents','omit','isArray'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x68a2,0x1a8));var _0x268a=function(_0x5ec056,_0x2455c7){_0x5ec056=_0x5ec056-0x0;var _0x440c92=_0x68a2[_0x5ec056];return _0x440c92;};'use strict';var pdf=require(_0x268a('0x0'));var emlformat=require(_0x268a('0x1'));var rimraf=require(_0x268a('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x268a('0x3'));var rp=require(_0x268a('0x4'));var moment=require(_0x268a('0x5'));var BPromise=require(_0x268a('0x6'));var Mustache=require('mustache');var util=require(_0x268a('0x7'));var path=require(_0x268a('0x8'));var sox=require(_0x268a('0x9'));var csv=require(_0x268a('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x268a('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x268a('0xc'));var deskjs=require(_0x268a('0xd'));var toCsv=require(_0x268a('0xa'));var querystring=require(_0x268a('0xe'));var Papa=require(_0x268a('0xf'));var Redis=require(_0x268a('0x10'));var authService=require(_0x268a('0x11'));var qs=require(_0x268a('0x12'));var hardwareService=require(_0x268a('0x13'));var logger=require(_0x268a('0x14'))(_0x268a('0x15'));var utils=require(_0x268a('0x16'));var config=require(_0x268a('0x17'));var db=require(_0x268a('0x18'))['db'];config[_0x268a('0x19')]=_[_0x268a('0x1a')](config[_0x268a('0x19')],{'host':_0x268a('0x1b'),'port':0x18eb});var socket=require(_0x268a('0x1c'))(new Redis(config[_0x268a('0x19')]));require(_0x268a('0x1d'))['register'](socket);function respondWithStatusCode(_0x1269dd,_0x3d5534){_0x3d5534=_0x3d5534||0xcc;return function(_0x40741a){if(_0x40741a){return _0x1269dd[_0x268a('0x1e')](_0x3d5534);}return _0x1269dd['status'](_0x3d5534)[_0x268a('0x1f')]();};}function respondWithResult(_0x473af3,_0x279a06){_0x279a06=_0x279a06||0xc8;return function(_0x4efd09){if(_0x4efd09){return _0x473af3['status'](_0x279a06)['json'](_0x4efd09);}};}function respondWithFilteredResult(_0x2c306c,_0x1e8877){return function(_0x2a1df3){if(_0x2a1df3){var _0x47eca8=_0x2a1df3[_0x268a('0x20')],_0x4bb7e5=_0x1e8877[_0x268a('0x21')],_0x5e0e49=_0x1e8877[_0x268a('0x21')]+_0x1e8877[_0x268a('0x22')],_0x3c2833;if(_0x5e0e49>=_0x47eca8){_0x5e0e49=_0x47eca8;_0x3c2833=0xc8;}else{_0x3c2833=0xce;}_0x2c306c[_0x268a('0x23')](_0x3c2833);return _0x2c306c[_0x268a('0x24')]('Content-Range',_0x4bb7e5+'-'+_0x5e0e49+'/'+_0x47eca8)[_0x268a('0x25')](_0x2a1df3);}return null;};}function patchUpdates(_0x25d325){return function(_0x4eec30){try{jsonpatch[_0x268a('0x26')](_0x4eec30,_0x25d325,!![]);}catch(_0x1aaa45){return BPromise[_0x268a('0x27')](_0x1aaa45);}return _0x4eec30[_0x268a('0x28')]();};}function saveUpdates(_0x28c536,_0x4c5407){return function(_0x50275){if(_0x50275){return _0x50275['update'](_0x28c536)['then'](function(_0x3c67df){return _0x3c67df;});}return null;};}function removeEntity(_0x51b487,_0x3c408c){return function(_0x4a7ba5){if(_0x4a7ba5){return _0x4a7ba5[_0x268a('0x29')]()[_0x268a('0x2a')](function(){var _0x5c03bc=_0x4a7ba5[_0x268a('0x2b')]({'plain':!![]});var _0x2559e3=_0x268a('0x2c');return db[_0x268a('0x2d')][_0x268a('0x29')]({'where':{'type':_0x2559e3,'resourceId':_0x5c03bc['id']}})[_0x268a('0x2a')](function(){return _0x4a7ba5;});})[_0x268a('0x2a')](function(){_0x51b487['status'](0xcc)[_0x268a('0x1f')]();});}};}function handleEntityNotFound(_0x3de1e4,_0xfbc347){return function(_0x341d4a){if(!_0x341d4a){_0x3de1e4[_0x268a('0x1e')](0x194);}return _0x341d4a;};}function handleError(_0x4ef456,_0x209c48){_0x209c48=_0x209c48||0x1f4;return function(_0x3d7cbc){logger[_0x268a('0x2e')](_0x3d7cbc[_0x268a('0x2f')]);if(_0x3d7cbc[_0x268a('0x30')]){delete _0x3d7cbc['name'];}_0x4ef456[_0x268a('0x23')](_0x209c48)[_0x268a('0x31')](_0x3d7cbc);};}exports['index']=function(_0x14f6c4,_0x281c71){var _0x1fb29d={},_0x2034be={},_0x2f700c={'count':0x0,'rows':[]};var _0x2f5107=db['MailQueue']['rawAttributes'];_0x2034be['model']=_[_0x268a('0x32')](_0x2f5107);_0x2034be[_0x268a('0x33')]=_['keys'](_0x14f6c4['query']);_0x2034be['filters']=_[_0x268a('0x34')](_0x2034be['model'],_0x2034be[_0x268a('0x33')]);_0x1fb29d[_0x268a('0x35')]=_['intersection'](_0x2034be[_0x268a('0x36')],qs[_0x268a('0x37')](_0x14f6c4['query'][_0x268a('0x37')]));_0x1fb29d[_0x268a('0x35')]=_0x1fb29d[_0x268a('0x35')]['length']?_0x1fb29d[_0x268a('0x35')]:_0x2034be[_0x268a('0x36')];if(!_0x14f6c4['query'][_0x268a('0x38')](_0x268a('0x39'))){_0x1fb29d[_0x268a('0x22')]=qs[_0x268a('0x22')](_0x14f6c4[_0x268a('0x33')][_0x268a('0x22')]);_0x1fb29d[_0x268a('0x21')]=qs[_0x268a('0x21')](_0x14f6c4['query'][_0x268a('0x21')]);}_0x1fb29d[_0x268a('0x3a')]=qs[_0x268a('0x3b')](_0x14f6c4['query'][_0x268a('0x3b')]);_0x1fb29d[_0x268a('0x3c')]=qs[_0x268a('0x3d')](_[_0x268a('0x3e')](_0x14f6c4['query'],_0x2034be[_0x268a('0x3d')]));if(_0x14f6c4[_0x268a('0x33')]['filter']){_0x1fb29d[_0x268a('0x3c')]=_['merge'](_0x1fb29d['where'],{'$or':_[_0x268a('0x3f')](_0x2f5107,function(_0x2f2619){if(_0x2f2619[_0x268a('0x40')][_0x268a('0x41')]!==_0x268a('0x42')){var _0x442ae7={};_0x442ae7[_0x2f2619[_0x268a('0x43')]]={'$like':'%'+_0x14f6c4['query'][_0x268a('0x44')]+'%'};return _0x442ae7;}})});}_0x1fb29d=_['merge']({},_0x1fb29d,_0x14f6c4['options']);var _0x42c491={'where':_0x1fb29d[_0x268a('0x3c')]};return db['MailQueue'][_0x268a('0x20')](_0x42c491)[_0x268a('0x2a')](function(_0x2a0ac3){_0x2f700c[_0x268a('0x20')]=_0x2a0ac3;if(_0x14f6c4[_0x268a('0x33')][_0x268a('0x45')]){_0x1fb29d[_0x268a('0x46')]=[{'all':!![]}];}return db['MailQueue'][_0x268a('0x47')](_0x1fb29d);})[_0x268a('0x2a')](function(_0x172072){_0x2f700c[_0x268a('0x48')]=_0x172072;return _0x2f700c;})[_0x268a('0x2a')](respondWithFilteredResult(_0x281c71,_0x1fb29d))[_0x268a('0x49')](handleError(_0x281c71,null));};exports[_0x268a('0x4a')]=function(_0x8dc46a,_0x2213fe){var _0x15e054={'raw':!![],'where':{'id':_0x8dc46a['params']['id']}},_0x5cfed1={};_0x5cfed1[_0x268a('0x36')]=_[_0x268a('0x32')](db[_0x268a('0x4b')]['rawAttributes']);_0x5cfed1['query']=_[_0x268a('0x32')](_0x8dc46a[_0x268a('0x33')]);_0x5cfed1[_0x268a('0x3d')]=_[_0x268a('0x34')](_0x5cfed1[_0x268a('0x36')],_0x5cfed1[_0x268a('0x33')]);_0x15e054[_0x268a('0x35')]=_['intersection'](_0x5cfed1['model'],qs[_0x268a('0x37')](_0x8dc46a[_0x268a('0x33')]['fields']));_0x15e054[_0x268a('0x35')]=_0x15e054[_0x268a('0x35')][_0x268a('0x4c')]?_0x15e054['attributes']:_0x5cfed1[_0x268a('0x36')];if(_0x8dc46a[_0x268a('0x33')][_0x268a('0x45')]){_0x15e054['include']=[{'all':!![]}];}_0x15e054=_[_0x268a('0x4d')]({},_0x15e054,_0x8dc46a['options']);return db[_0x268a('0x4b')][_0x268a('0x4e')](_0x15e054)[_0x268a('0x2a')](handleEntityNotFound(_0x2213fe,null))[_0x268a('0x2a')](respondWithResult(_0x2213fe,null))[_0x268a('0x49')](handleError(_0x2213fe,null));};exports['create']=function(_0x394e95,_0x367aab){return db['MailQueue'][_0x268a('0x4f')](_0x394e95[_0x268a('0x50')],{})['then'](function(_0x5d9374){var _0x46a725=_0x394e95[_0x268a('0x51')][_0x268a('0x2b')]({'plain':!![]});if(!_0x46a725)throw new Error(_0x268a('0x52'));if(_0x46a725['role']===_0x268a('0x51')){var _0x11a9bb=_0x5d9374[_0x268a('0x2b')]({'plain':!![]});var _0x17e380='MailQueues';return db[_0x268a('0x53')]['find']({'where':{'name':_0x17e380,'userProfileId':_0x46a725['userProfileId']},'raw':!![]})[_0x268a('0x2a')](function(_0x3654aa){if(_0x3654aa&&_0x3654aa['autoAssociation']===0x0){return db[_0x268a('0x2d')]['create']({'name':_0x11a9bb[_0x268a('0x30')],'resourceId':_0x11a9bb['id'],'type':_0x3654aa[_0x268a('0x30')],'sectionId':_0x3654aa['id']},{})[_0x268a('0x2a')](function(){return _0x5d9374;});}else{return _0x5d9374;}})['catch'](function(_0x3f8f3e){logger[_0x268a('0x2e')](_0x268a('0x54'),_0x3f8f3e);throw _0x3f8f3e;});}return _0x5d9374;})['then'](respondWithResult(_0x367aab,0xc9))[_0x268a('0x49')](handleError(_0x367aab,null));};exports[_0x268a('0x55')]=function(_0x3ba7e7,_0x32edb1){if(_0x3ba7e7[_0x268a('0x50')]['id']){delete _0x3ba7e7['body']['id'];}return db[_0x268a('0x4b')][_0x268a('0x4e')]({'where':{'id':_0x3ba7e7[_0x268a('0x56')]['id']}})[_0x268a('0x2a')](handleEntityNotFound(_0x32edb1,null))['then'](saveUpdates(_0x3ba7e7[_0x268a('0x50')],null))[_0x268a('0x2a')](respondWithResult(_0x32edb1,null))[_0x268a('0x49')](handleError(_0x32edb1,null));};exports[_0x268a('0x29')]=function(_0x5613df,_0xfcf6f6){return db[_0x268a('0x4b')][_0x268a('0x4e')]({'where':{'id':_0x5613df[_0x268a('0x56')]['id']}})['then'](handleEntityNotFound(_0xfcf6f6,null))[_0x268a('0x2a')](removeEntity(_0xfcf6f6,null))[_0x268a('0x49')](handleError(_0xfcf6f6,null));};exports[_0x268a('0x57')]=function(_0x59a20c,_0x3965ac){return db[_0x268a('0x4b')][_0x268a('0x57')]()['then'](respondWithResult(_0x3965ac,null))[_0x268a('0x49')](handleError(_0x3965ac,null));};exports[_0x268a('0x58')]=function(_0x6b59ba,_0x14ae6c,_0x4e5d71){var _0x4fcce9={'raw':!![],'where':{}},_0x3df35c={},_0x384cc4;return db['MailQueue'][_0x268a('0x59')]({'where':{'id':_0x6b59ba['params']['id']}})[_0x268a('0x2a')](handleEntityNotFound(_0x14ae6c,null))[_0x268a('0x2a')](function(_0x29c972){if(_0x29c972){_0x384cc4=_0x29c972['get']({'plain':!![]});_0x3df35c[_0x268a('0x36')]=_[_0x268a('0x32')](db[_0x268a('0x5a')][_0x268a('0x5b')]);_0x3df35c[_0x268a('0x33')]=_[_0x268a('0x32')](_0x6b59ba[_0x268a('0x33')]);_0x3df35c[_0x268a('0x3d')]=_[_0x268a('0x34')](_0x3df35c[_0x268a('0x36')],_0x3df35c[_0x268a('0x33')]);_0x4fcce9[_0x268a('0x35')]=_[_0x268a('0x34')](_0x3df35c[_0x268a('0x36')],qs[_0x268a('0x37')](_0x6b59ba[_0x268a('0x33')][_0x268a('0x37')]));_0x4fcce9[_0x268a('0x35')]=_0x4fcce9['attributes'][_0x268a('0x4c')]?_0x4fcce9[_0x268a('0x35')]:_0x3df35c[_0x268a('0x36')];if(!_0x6b59ba['query'][_0x268a('0x38')]('nolimit')){_0x4fcce9[_0x268a('0x22')]=qs[_0x268a('0x22')](_0x6b59ba[_0x268a('0x33')][_0x268a('0x22')]);_0x4fcce9['offset']=qs[_0x268a('0x21')](_0x6b59ba[_0x268a('0x33')][_0x268a('0x21')]);}_0x4fcce9[_0x268a('0x3a')]=qs[_0x268a('0x3b')](_0x6b59ba['query'][_0x268a('0x3b')]);_0x4fcce9[_0x268a('0x3c')]=qs[_0x268a('0x3d')](_[_0x268a('0x3e')](_0x6b59ba[_0x268a('0x33')],_0x3df35c[_0x268a('0x3d')]));_0x4fcce9[_0x268a('0x3c')][_0x268a('0x5c')]=_0x29c972['id'];if(_0x6b59ba[_0x268a('0x33')][_0x268a('0x44')]){_0x4fcce9[_0x268a('0x3c')]=_[_0x268a('0x4d')](_0x4fcce9[_0x268a('0x3c')],{'$or':_[_0x268a('0x3f')](_0x4fcce9['attributes'],function(_0x3b003a){var _0x35d0d={};_0x35d0d[_0x3b003a]={'$like':'%'+_0x6b59ba[_0x268a('0x33')][_0x268a('0x44')]+'%'};return _0x35d0d;})});}_0x4fcce9=_[_0x268a('0x4d')]({},_0x4fcce9,_0x6b59ba[_0x268a('0x5d')]);return db[_0x268a('0x5a')][_0x268a('0x47')](_0x4fcce9);}})[_0x268a('0x2a')](function(_0x1c6154){if(_0x1c6154){return db['User'][_0x268a('0x5e')]({'where':{'id':_[_0x268a('0x3f')](_0x1c6154,_0x268a('0x5f')),'role':_0x268a('0x60')},'attributes':['id',_0x268a('0x30'),_0x268a('0x61'),_0x268a('0x62'),_0x268a('0x63')]});}})['then'](function(_0x57e2b2){if(_0x57e2b2){return{'count':_0x57e2b2['count'],'rows':_['map'](_0x57e2b2[_0x268a('0x48')],function(_0x5eb202){return{'membername':_0x5eb202[_0x268a('0x30')],'UserId':_0x5eb202['id'],'queue_name':_0x384cc4['name'],'MailQueueId':_0x384cc4['id'],'interface':util[_0x268a('0x64')](_0x268a('0x65'),_0x268a('0x66'),_0x5eb202[_0x268a('0x30')]),'penalty':0x0,'paused':_0x5eb202[_0x268a('0x61')],'createdAt':_0x5eb202[_0x268a('0x63')],'updatedAt':_0x5eb202['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})[_0x268a('0x2a')](respondWithFilteredResult(_0x14ae6c,_0x4fcce9))[_0x268a('0x49')](handleError(_0x14ae6c,null));};exports['getTeams']=function(_0x1c5a6c,_0x42443d,_0xf97ca1){var _0x27fc1d={};var _0x190a44={};var _0x48c9cb;var _0x55893a;return db[_0x268a('0x4b')]['findOne']({'where':{'id':_0x1c5a6c[_0x268a('0x56')]['id']}})['then'](handleEntityNotFound(_0x42443d,null))['then'](function(_0x5388ec){if(_0x5388ec){_0x48c9cb=_0x5388ec;_0x190a44[_0x268a('0x36')]=_['keys'](db[_0x268a('0x67')]['rawAttributes']);_0x190a44[_0x268a('0x33')]=_[_0x268a('0x32')](_0x1c5a6c[_0x268a('0x33')]);_0x190a44[_0x268a('0x3d')]=_[_0x268a('0x34')](_0x190a44[_0x268a('0x36')],_0x190a44[_0x268a('0x33')]);_0x27fc1d[_0x268a('0x35')]=_[_0x268a('0x34')](_0x190a44[_0x268a('0x36')],qs[_0x268a('0x37')](_0x1c5a6c[_0x268a('0x33')][_0x268a('0x37')]));_0x27fc1d[_0x268a('0x35')]=_0x27fc1d[_0x268a('0x35')][_0x268a('0x4c')]?_0x27fc1d[_0x268a('0x35')]:_0x190a44[_0x268a('0x36')];_0x27fc1d[_0x268a('0x3a')]=qs[_0x268a('0x3b')](_0x1c5a6c[_0x268a('0x33')][_0x268a('0x3b')]);_0x27fc1d[_0x268a('0x3c')]=qs[_0x268a('0x3d')](_['pick'](_0x1c5a6c[_0x268a('0x33')],_0x190a44[_0x268a('0x3d')]));if(_0x1c5a6c[_0x268a('0x33')]['filter']){_0x27fc1d[_0x268a('0x3c')]=_[_0x268a('0x4d')](_0x27fc1d[_0x268a('0x3c')],{'$or':_['map'](_0x27fc1d[_0x268a('0x35')],function(_0x5d7528){var _0x1d3219={};_0x1d3219[_0x5d7528]={'$like':'%'+_0x1c5a6c[_0x268a('0x33')]['filter']+'%'};return _0x1d3219;})});}_0x27fc1d=_['merge']({},_0x27fc1d,_0x1c5a6c['options']);return _0x48c9cb[_0x268a('0x68')](_0x27fc1d);}})['then'](function(_0x3d66b1){if(_0x3d66b1){_0x55893a=_0x3d66b1['length'];if(!_0x1c5a6c[_0x268a('0x33')]['hasOwnProperty'](_0x268a('0x39'))){_0x27fc1d[_0x268a('0x22')]=qs['limit'](_0x1c5a6c[_0x268a('0x33')][_0x268a('0x22')]);_0x27fc1d[_0x268a('0x21')]=qs[_0x268a('0x21')](_0x1c5a6c[_0x268a('0x33')]['offset']);}return _0x48c9cb['getTeams'](_0x27fc1d);}})[_0x268a('0x2a')](function(_0x13d26e){if(_0x13d26e){return _0x13d26e?{'count':_0x55893a,'rows':_0x13d26e}:null;}})[_0x268a('0x2a')](respondWithResult(_0x42443d,null))[_0x268a('0x49')](handleError(_0x42443d,null));};exports[_0x268a('0x69')]=function(_0x5f10c7,_0xd1243b,_0x431e51){var _0x308e10=_0x5f10c7[_0x268a('0x50')][_0x268a('0x6a')];return db[_0x268a('0x67')]['findAll']({'where':{'id':_[_0x268a('0x3f')](_0x308e10,'id')},'attributes':['id'],'include':[{'model':db[_0x268a('0x6b')],'as':_0x268a('0x6c'),'attributes':['id',_0x268a('0x30'),_0x268a('0x6d'),_0x268a('0x6e'),_0x268a('0x6f')],'raw':!![]}]})[_0x268a('0x2a')](function(_0x58b20f){if(_0x58b20f){var _0xc82a07=_[_0x268a('0x70')](_0x58b20f,function(_0x47cb93){var _0x102017=_0x47cb93[_0x268a('0x2b')]({'plain':!![]});return _0x102017['Agents'];});return db[_0x268a('0x4b')][_0x268a('0x4e')]({'where':{'id':_0x5f10c7[_0x268a('0x56')]['id']}})[_0x268a('0x2a')](function(_0x12bed7){return db[_0x268a('0x71')][_0x268a('0x72')](function(_0x54adc3){return _0x12bed7['addTeams'](_[_0x268a('0x3f')](_0x308e10,'id'),{'transaction':_0x54adc3})[_0x268a('0x2a')](function(){return BPromise['each'](_0xc82a07,function(_0x46dd10){return db[_0x268a('0x5a')][_0x268a('0x73')]({'where':{'UserId':_0x46dd10['id'],'MailQueueId':_0x5f10c7[_0x268a('0x56')]['id']},'transaction':_0x54adc3});});})[_0x268a('0x2a')](function(){_0xc82a07[_0x268a('0x74')](function(_0x1f462c){socket[_0x268a('0x75')](_0x268a('0x76'),{'UserId':_0x1f462c['id'],'MailQueueId':_0x12bed7['id']});});});});});}})[_0x268a('0x2a')](respondWithStatusCode(_0xd1243b,null))[_0x268a('0x49')](handleError(_0xd1243b,null));};exports[_0x268a('0x77')]=function(_0x51ff0d,_0x220885,_0x563217){return db['Team']['findAll']({'where':{'id':_0x51ff0d[_0x268a('0x33')][_0x268a('0x78')]},'attributes':['id'],'include':[{'model':db[_0x268a('0x6b')],'as':_0x268a('0x6c'),'attributes':['id'],'raw':!![]}]})['then'](handleEntityNotFound(_0x220885,null))[_0x268a('0x2a')](function(_0x503330){var _0x52d584=_[_0x268a('0x3f')](_0x503330,'id');var _0x8fd24b=[];var _0x34a03c=[];var _0x3a130e=squel['select']();_0x3a130e['field']('tq.TeamId')['from']('team_has_mail_queues','tq')[_0x268a('0x79')](_0x268a('0x7a'),'ut',_0x268a('0x7b'))[_0x268a('0x3c')](_0x268a('0x7c'),_0x51ff0d['params']['id']);for(var _0x1922b6=0x0;_0x1922b6<_0x503330[_0x268a('0x4c')];_0x1922b6+=0x1){let _0x5e233d=_0x503330[_0x1922b6];for(var _0x4997e3=0x0;_0x4997e3<_0x5e233d['Agents']['length'];_0x4997e3+=0x1){let _0x41524a=_0x5e233d['Agents'][_0x4997e3];var _0x4bbe4f=_0x3a130e[_0x268a('0x7d')]();_0x4bbe4f[_0x268a('0x3c')](_0x268a('0x7e'),_0x41524a['id']);_0x34a03c[_0x268a('0x7f')](db[_0x268a('0x71')]['query'](_0x4bbe4f['toString'](),{'type':db[_0x268a('0x71')][_0x268a('0x80')][_0x268a('0x81')]})['then'](function(_0x522f34){if(_0x522f34[_0x268a('0x4c')]===0x1){return _0x41524a['id'];}else{var _0x41e203=_[_0x268a('0x82')](_[_0x268a('0x3f')](_0x522f34,_0x268a('0x83')),function(_0x54c255){return _['includes'](_0x52d584,_0x54c255);});if(_0x41e203){return _0x41524a['id'];}}}));}}return BPromise['all'](_0x34a03c)[_0x268a('0x2a')](function(_0x7e5f0b){_0x8fd24b=_(_0x8fd24b)['union'](_0x7e5f0b)[_0x268a('0x84')]()[_0x268a('0x85')]();return db[_0x268a('0x4b')][_0x268a('0x4e')]({'where':{'id':_0x51ff0d[_0x268a('0x56')]['id']}})['then'](function(_0x204d25){return db[_0x268a('0x71')]['transaction'](function(_0x1d9a3d){return _0x204d25['removeTeams'](_0x51ff0d[_0x268a('0x33')][_0x268a('0x78')],{'transaction':_0x1d9a3d})['then'](function(){if(!_[_0x268a('0x86')](_0x8fd24b)){return _0x204d25[_0x268a('0x87')](_0x8fd24b,{'transaction':_0x1d9a3d});}})[_0x268a('0x2a')](function(){_0x8fd24b['forEach'](function(_0x1ca4a7){socket[_0x268a('0x75')](_0x268a('0x88'),{'UserId':_0x1ca4a7,'MailQueueId':_0x204d25['id']});});});});});});})[_0x268a('0x2a')](respondWithStatusCode(_0x220885,null))[_0x268a('0x49')](handleError(_0x220885,null));};exports[_0x268a('0x89')]=function(_0x15d175,_0x44288c,_0x54e060){return db[_0x268a('0x4b')][_0x268a('0x4e')]({'where':{'id':_0x15d175[_0x268a('0x56')]['id']}})[_0x268a('0x2a')](handleEntityNotFound(_0x44288c,null))[_0x268a('0x2a')](function(_0x1c0c5c){if(_0x1c0c5c){return _0x1c0c5c[_0x268a('0x89')](_0x15d175[_0x268a('0x50')]['ids'],_[_0x268a('0x8a')](_0x15d175[_0x268a('0x50')],[_0x268a('0x78'),'id'])||{})['spread'](function(_0x37ed40){for(var _0x57cbc7=0x0;_0x57cbc7<_0x15d175[_0x268a('0x50')][_0x268a('0x78')]['length'];_0x57cbc7+=0x1){socket['emit'](_0x268a('0x76'),{'UserId':_0x15d175[_0x268a('0x50')][_0x268a('0x78')][_0x57cbc7],'MailQueueId':_0x15d175[_0x268a('0x56')]['id']});}return _0x37ed40;});}})[_0x268a('0x2a')](respondWithResult(_0x44288c,null))['catch'](handleError(_0x44288c,null));};exports[_0x268a('0x87')]=function(_0x565016,_0x42cd50,_0x5eb58a){return db[_0x268a('0x4b')]['find']({'where':{'id':_0x565016['params']['id']}})[_0x268a('0x2a')](handleEntityNotFound(_0x42cd50,null))['then'](function(_0x1cca26){if(_0x1cca26){return _0x1cca26[_0x268a('0x87')](_0x565016['query'][_0x268a('0x78')])['then'](function(){if(_[_0x268a('0x8b')](_0x565016['query'][_0x268a('0x78')])){for(var _0x4bfb32=0x0;_0x4bfb32<_0x565016[_0x268a('0x33')]['ids']['length'];_0x4bfb32+=0x1){socket[_0x268a('0x75')](_0x268a('0x88'),{'UserId':Number(_0x565016[_0x268a('0x33')][_0x268a('0x78')][_0x4bfb32]),'MailQueueId':Number(_0x565016[_0x268a('0x56')]['id'])});}}else{socket[_0x268a('0x75')](_0x268a('0x88'),{'UserId':Number(_0x565016[_0x268a('0x33')][_0x268a('0x78')]),'MailQueueId':Number(_0x565016[_0x268a('0x56')]['id'])});}});}})[_0x268a('0x2a')](respondWithStatusCode(_0x42cd50,null))['catch'](handleError(_0x42cd50,null));};exports['getAgents']=function(_0x548de5,_0x19e068,_0x2cbfeb){var _0x23cfe8={};var _0x34cd1e={};var _0x547aa6;var _0x4bda9d;return db['MailQueue'][_0x268a('0x59')]({'where':{'id':_0x548de5[_0x268a('0x56')]['id']}})[_0x268a('0x2a')](handleEntityNotFound(_0x19e068,null))[_0x268a('0x2a')](function(_0x2ab4ee){if(_0x2ab4ee){_0x547aa6=_0x2ab4ee;_0x34cd1e[_0x268a('0x36')]=_[_0x268a('0x32')](db[_0x268a('0x6b')]['rawAttributes']);_0x34cd1e[_0x268a('0x33')]=_['keys'](_0x548de5[_0x268a('0x33')]);_0x34cd1e['filters']=_[_0x268a('0x34')](_0x34cd1e[_0x268a('0x36')],_0x34cd1e[_0x268a('0x33')]);_0x23cfe8[_0x268a('0x35')]=_[_0x268a('0x34')](_0x34cd1e[_0x268a('0x36')],qs[_0x268a('0x37')](_0x548de5[_0x268a('0x33')][_0x268a('0x37')]));_0x23cfe8[_0x268a('0x35')]=_0x23cfe8[_0x268a('0x35')][_0x268a('0x4c')]?_0x23cfe8[_0x268a('0x35')]:_0x34cd1e[_0x268a('0x36')];_0x23cfe8[_0x268a('0x3a')]=qs[_0x268a('0x3b')](_0x548de5[_0x268a('0x33')][_0x268a('0x3b')]);_0x23cfe8[_0x268a('0x3c')]=qs[_0x268a('0x3d')](_[_0x268a('0x3e')](_0x548de5[_0x268a('0x33')],_0x34cd1e[_0x268a('0x3d')]));if(_0x548de5[_0x268a('0x33')][_0x268a('0x44')]){_0x23cfe8[_0x268a('0x3c')]=_['merge'](_0x23cfe8['where'],{'$or':_['map'](_0x23cfe8[_0x268a('0x35')],function(_0x127e71){var _0x20eaae={};_0x20eaae[_0x127e71]={'$like':'%'+_0x548de5[_0x268a('0x33')][_0x268a('0x44')]+'%'};return _0x20eaae;})});}_0x23cfe8=_[_0x268a('0x4d')]({},_0x23cfe8,_0x548de5[_0x268a('0x5d')]);return _0x547aa6[_0x268a('0x8c')](_0x23cfe8);}})[_0x268a('0x2a')](function(_0x4be30c){if(_0x4be30c){_0x4bda9d=_0x4be30c[_0x268a('0x4c')];if(!_0x548de5['query'][_0x268a('0x38')](_0x268a('0x39'))){_0x23cfe8[_0x268a('0x22')]=qs[_0x268a('0x22')](_0x548de5[_0x268a('0x33')]['limit']);_0x23cfe8['offset']=qs[_0x268a('0x21')](_0x548de5['query']['offset']);}return _0x547aa6[_0x268a('0x8c')](_0x23cfe8);}})[_0x268a('0x2a')](function(_0x4e048b){if(_0x4e048b){return _0x4e048b?{'count':_0x4bda9d,'rows':_0x4e048b}:null;}})['then'](respondWithResult(_0x19e068,null))[_0x268a('0x49')](handleError(_0x19e068,null));};
\ No newline at end of file
+var _0xd90c=['removeAgents','userMailQueue:remove','addAgents','omit','spread','isArray','getAgents','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','redis','defaults','localhost','socket.io-emitter','register','sendStatus','status','end','json','offset','limit','set','Content-Range','reject','save','update','then','get','MailQueues','destroy','stack','name','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','MailQueue','count','includeAll','include','findAll','rows','catch','show','params','options','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','findOne','UserMailQueue','order','MailQueueId','findAndCountAll','UserId','agent','mailPause','updatedAt','createdAt','format','SIP','getTeams','Team','addTeams','teams','User','online','voicePause','interface','flatMap','Agents','sequelize','transaction','each','findOrCreate','forEach','emit','userMailQueue:save','removeTeams','ids','select','tq.TeamId','from','team_has_mail_queues','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','MailQueueId\x20=\x20?','clone','ut.UserId\x20=\x20?','QueryTypes','SELECT','TeamId','includes','all','union','value'];(function(_0x449b81,_0x4b2a6f){var _0xb9b60c=function(_0x2e9e0a){while(--_0x2e9e0a){_0x449b81['push'](_0x449b81['shift']());}};_0xb9b60c(++_0x4b2a6f);}(_0xd90c,0x12b));var _0xcd90=function(_0x5e45c3,_0x907997){_0x5e45c3=_0x5e45c3-0x0;var _0x5492ac=_0xd90c[_0x5e45c3];return _0x5492ac;};'use strict';var pdf=require(_0xcd90('0x0'));var emlformat=require(_0xcd90('0x1'));var rimraf=require(_0xcd90('0x2'));var zipdir=require(_0xcd90('0x3'));var jsonpatch=require(_0xcd90('0x4'));var rp=require(_0xcd90('0x5'));var moment=require(_0xcd90('0x6'));var BPromise=require(_0xcd90('0x7'));var Mustache=require(_0xcd90('0x8'));var util=require(_0xcd90('0x9'));var path=require('path');var sox=require(_0xcd90('0xa'));var csv=require(_0xcd90('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xcd90('0xc'));var squel=require(_0xcd90('0xd'));var crypto=require('crypto');var jsforce=require(_0xcd90('0xe'));var deskjs=require(_0xcd90('0xf'));var toCsv=require(_0xcd90('0xb'));var querystring=require(_0xcd90('0x10'));var Papa=require(_0xcd90('0x11'));var Redis=require(_0xcd90('0x12'));var authService=require(_0xcd90('0x13'));var qs=require(_0xcd90('0x14'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xcd90('0x15'))(_0xcd90('0x16'));var utils=require(_0xcd90('0x17'));var config=require(_0xcd90('0x18'));var db=require('../../mysqldb')['db'];config[_0xcd90('0x19')]=_[_0xcd90('0x1a')](config[_0xcd90('0x19')],{'host':_0xcd90('0x1b'),'port':0x18eb});var socket=require(_0xcd90('0x1c'))(new Redis(config[_0xcd90('0x19')]));require('./mailQueue.socket')[_0xcd90('0x1d')](socket);function respondWithStatusCode(_0x53ba4f,_0x349cb1){_0x349cb1=_0x349cb1||0xcc;return function(_0x25b3fd){if(_0x25b3fd){return _0x53ba4f[_0xcd90('0x1e')](_0x349cb1);}return _0x53ba4f[_0xcd90('0x1f')](_0x349cb1)[_0xcd90('0x20')]();};}function respondWithResult(_0x3637bc,_0x54cf7f){_0x54cf7f=_0x54cf7f||0xc8;return function(_0x1dc1a0){if(_0x1dc1a0){return _0x3637bc[_0xcd90('0x1f')](_0x54cf7f)[_0xcd90('0x21')](_0x1dc1a0);}};}function respondWithFilteredResult(_0x5dc679,_0x4202e4){return function(_0x2c0be0){if(_0x2c0be0){var _0x375061=_0x2c0be0['count'],_0x4dc75f=_0x4202e4['offset'],_0x1a7e81=_0x4202e4[_0xcd90('0x22')]+_0x4202e4[_0xcd90('0x23')],_0x48e884;if(_0x1a7e81>=_0x375061){_0x1a7e81=_0x375061;_0x48e884=0xc8;}else{_0x48e884=0xce;}_0x5dc679[_0xcd90('0x1f')](_0x48e884);return _0x5dc679[_0xcd90('0x24')](_0xcd90('0x25'),_0x4dc75f+'-'+_0x1a7e81+'/'+_0x375061)[_0xcd90('0x21')](_0x2c0be0);}return null;};}function patchUpdates(_0x2e3fa3){return function(_0x1a2cc5){try{jsonpatch['apply'](_0x1a2cc5,_0x2e3fa3,!![]);}catch(_0x1a3cf1){return BPromise[_0xcd90('0x26')](_0x1a3cf1);}return _0x1a2cc5[_0xcd90('0x27')]();};}function saveUpdates(_0x3b6c0d,_0x3084fe){return function(_0x22373b){if(_0x22373b){return _0x22373b[_0xcd90('0x28')](_0x3b6c0d)[_0xcd90('0x29')](function(_0x1fc449){return _0x1fc449;});}return null;};}function removeEntity(_0x1c31d6,_0x1cc935){return function(_0x46cdaf){if(_0x46cdaf){return _0x46cdaf['destroy']()['then'](function(){var _0x5249d0=_0x46cdaf[_0xcd90('0x2a')]({'plain':!![]});var _0x2919ce=_0xcd90('0x2b');return db['UserProfileResource'][_0xcd90('0x2c')]({'where':{'type':_0x2919ce,'resourceId':_0x5249d0['id']}})['then'](function(){return _0x46cdaf;});})[_0xcd90('0x29')](function(){_0x1c31d6[_0xcd90('0x1f')](0xcc)[_0xcd90('0x20')]();});}};}function handleEntityNotFound(_0x491039,_0x2fa37a){return function(_0x3d10e1){if(!_0x3d10e1){_0x491039[_0xcd90('0x1e')](0x194);}return _0x3d10e1;};}function handleError(_0x3860b2,_0x3cd367){_0x3cd367=_0x3cd367||0x1f4;return function(_0x20acea){logger['error'](_0x20acea[_0xcd90('0x2d')]);if(_0x20acea['name']){delete _0x20acea[_0xcd90('0x2e')];}_0x3860b2[_0xcd90('0x1f')](_0x3cd367)['send'](_0x20acea);};}exports[_0xcd90('0x2f')]=function(_0x38494b,_0x597317){var _0x376f6a={},_0x30787e={},_0x3f77b9={'count':0x0,'rows':[]};var _0x3c26b8=db['MailQueue'][_0xcd90('0x30')];_0x30787e[_0xcd90('0x31')]=_[_0xcd90('0x32')](_0x3c26b8);_0x30787e[_0xcd90('0x33')]=_[_0xcd90('0x32')](_0x38494b[_0xcd90('0x33')]);_0x30787e[_0xcd90('0x34')]=_[_0xcd90('0x35')](_0x30787e['model'],_0x30787e[_0xcd90('0x33')]);_0x376f6a[_0xcd90('0x36')]=_[_0xcd90('0x35')](_0x30787e['model'],qs['fields'](_0x38494b[_0xcd90('0x33')][_0xcd90('0x37')]));_0x376f6a[_0xcd90('0x36')]=_0x376f6a[_0xcd90('0x36')][_0xcd90('0x38')]?_0x376f6a[_0xcd90('0x36')]:_0x30787e['model'];if(!_0x38494b[_0xcd90('0x33')][_0xcd90('0x39')](_0xcd90('0x3a'))){_0x376f6a[_0xcd90('0x23')]=qs[_0xcd90('0x23')](_0x38494b[_0xcd90('0x33')][_0xcd90('0x23')]);_0x376f6a['offset']=qs[_0xcd90('0x22')](_0x38494b[_0xcd90('0x33')]['offset']);}_0x376f6a['order']=qs[_0xcd90('0x3b')](_0x38494b[_0xcd90('0x33')][_0xcd90('0x3b')]);_0x376f6a[_0xcd90('0x3c')]=qs[_0xcd90('0x34')](_[_0xcd90('0x3d')](_0x38494b[_0xcd90('0x33')],_0x30787e[_0xcd90('0x34')]));if(_0x38494b['query'][_0xcd90('0x3e')]){_0x376f6a[_0xcd90('0x3c')]=_[_0xcd90('0x3f')](_0x376f6a[_0xcd90('0x3c')],{'$or':_[_0xcd90('0x40')](_0x3c26b8,function(_0xe00803){if(_0xe00803[_0xcd90('0x41')][_0xcd90('0x42')]!==_0xcd90('0x43')){var _0x4b1f9f={};_0x4b1f9f[_0xe00803[_0xcd90('0x44')]]={'$like':'%'+_0x38494b[_0xcd90('0x33')][_0xcd90('0x3e')]+'%'};return _0x4b1f9f;}})});}_0x376f6a=_[_0xcd90('0x3f')]({},_0x376f6a,_0x38494b['options']);var _0x1e7368={'where':_0x376f6a['where']};return db[_0xcd90('0x45')][_0xcd90('0x46')](_0x1e7368)[_0xcd90('0x29')](function(_0x472c56){_0x3f77b9[_0xcd90('0x46')]=_0x472c56;if(_0x38494b[_0xcd90('0x33')][_0xcd90('0x47')]){_0x376f6a[_0xcd90('0x48')]=[{'all':!![]}];}return db[_0xcd90('0x45')][_0xcd90('0x49')](_0x376f6a);})[_0xcd90('0x29')](function(_0x5ea736){_0x3f77b9[_0xcd90('0x4a')]=_0x5ea736;return _0x3f77b9;})[_0xcd90('0x29')](respondWithFilteredResult(_0x597317,_0x376f6a))[_0xcd90('0x4b')](handleError(_0x597317,null));};exports[_0xcd90('0x4c')]=function(_0x1ff40e,_0x10f9df){var _0x37751d={'raw':!![],'where':{'id':_0x1ff40e[_0xcd90('0x4d')]['id']}},_0x4d1378={};_0x4d1378[_0xcd90('0x31')]=_[_0xcd90('0x32')](db[_0xcd90('0x45')]['rawAttributes']);_0x4d1378[_0xcd90('0x33')]=_['keys'](_0x1ff40e[_0xcd90('0x33')]);_0x4d1378[_0xcd90('0x34')]=_[_0xcd90('0x35')](_0x4d1378[_0xcd90('0x31')],_0x4d1378[_0xcd90('0x33')]);_0x37751d[_0xcd90('0x36')]=_[_0xcd90('0x35')](_0x4d1378[_0xcd90('0x31')],qs[_0xcd90('0x37')](_0x1ff40e['query'][_0xcd90('0x37')]));_0x37751d[_0xcd90('0x36')]=_0x37751d[_0xcd90('0x36')]['length']?_0x37751d['attributes']:_0x4d1378[_0xcd90('0x31')];if(_0x1ff40e['query']['includeAll']){_0x37751d[_0xcd90('0x48')]=[{'all':!![]}];}_0x37751d=_[_0xcd90('0x3f')]({},_0x37751d,_0x1ff40e[_0xcd90('0x4e')]);return db['MailQueue'][_0xcd90('0x4f')](_0x37751d)[_0xcd90('0x29')](handleEntityNotFound(_0x10f9df,null))['then'](respondWithResult(_0x10f9df,null))[_0xcd90('0x4b')](handleError(_0x10f9df,null));};exports[_0xcd90('0x50')]=function(_0x4aefd5,_0x56b116){return db[_0xcd90('0x45')][_0xcd90('0x50')](_0x4aefd5[_0xcd90('0x51')],{})[_0xcd90('0x29')](function(_0x4efac7){var _0x3581fe=_0x4aefd5[_0xcd90('0x52')]['get']({'plain':!![]});if(!_0x3581fe)throw new Error(_0xcd90('0x53'));if(_0x3581fe[_0xcd90('0x54')]===_0xcd90('0x52')){var _0x1cfcea=_0x4efac7[_0xcd90('0x2a')]({'plain':!![]});var _0x44e5bc=_0xcd90('0x2b');return db[_0xcd90('0x55')][_0xcd90('0x4f')]({'where':{'name':_0x44e5bc,'userProfileId':_0x3581fe[_0xcd90('0x56')]},'raw':!![]})['then'](function(_0x4dbb15){if(_0x4dbb15&&_0x4dbb15[_0xcd90('0x57')]===0x0){return db[_0xcd90('0x58')]['create']({'name':_0x1cfcea[_0xcd90('0x2e')],'resourceId':_0x1cfcea['id'],'type':_0x4dbb15[_0xcd90('0x2e')],'sectionId':_0x4dbb15['id']},{})[_0xcd90('0x29')](function(){return _0x4efac7;});}else{return _0x4efac7;}})['catch'](function(_0x1ac1f8){logger[_0xcd90('0x59')](_0xcd90('0x5a'),_0x1ac1f8);throw _0x1ac1f8;});}return _0x4efac7;})[_0xcd90('0x29')](respondWithResult(_0x56b116,0xc9))['catch'](handleError(_0x56b116,null));};exports['update']=function(_0x2f70d8,_0x3c2e67){if(_0x2f70d8[_0xcd90('0x51')]['id']){delete _0x2f70d8[_0xcd90('0x51')]['id'];}return db['MailQueue'][_0xcd90('0x4f')]({'where':{'id':_0x2f70d8[_0xcd90('0x4d')]['id']}})[_0xcd90('0x29')](handleEntityNotFound(_0x3c2e67,null))[_0xcd90('0x29')](saveUpdates(_0x2f70d8['body'],null))[_0xcd90('0x29')](respondWithResult(_0x3c2e67,null))[_0xcd90('0x4b')](handleError(_0x3c2e67,null));};exports['destroy']=function(_0x72eabb,_0x24c0af){return db[_0xcd90('0x45')][_0xcd90('0x4f')]({'where':{'id':_0x72eabb[_0xcd90('0x4d')]['id']}})[_0xcd90('0x29')](handleEntityNotFound(_0x24c0af,null))[_0xcd90('0x29')](removeEntity(_0x24c0af,null))[_0xcd90('0x4b')](handleError(_0x24c0af,null));};exports[_0xcd90('0x5b')]=function(_0x4dd67e,_0x24bbaa){return db[_0xcd90('0x45')][_0xcd90('0x5b')]()['then'](respondWithResult(_0x24bbaa,null))[_0xcd90('0x4b')](handleError(_0x24bbaa,null));};exports['getMembers']=function(_0x5d2049,_0x503ed7,_0x44a280){var _0x2dcc40={'raw':!![],'where':{}},_0x577c22={},_0x5d45f9;return db['MailQueue'][_0xcd90('0x5c')]({'where':{'id':_0x5d2049[_0xcd90('0x4d')]['id']}})[_0xcd90('0x29')](handleEntityNotFound(_0x503ed7,null))[_0xcd90('0x29')](function(_0x2171c3){if(_0x2171c3){_0x5d45f9=_0x2171c3[_0xcd90('0x2a')]({'plain':!![]});_0x577c22['model']=_[_0xcd90('0x32')](db[_0xcd90('0x5d')]['rawAttributes']);_0x577c22[_0xcd90('0x33')]=_[_0xcd90('0x32')](_0x5d2049['query']);_0x577c22[_0xcd90('0x34')]=_['intersection'](_0x577c22[_0xcd90('0x31')],_0x577c22['query']);_0x2dcc40['attributes']=_[_0xcd90('0x35')](_0x577c22[_0xcd90('0x31')],qs[_0xcd90('0x37')](_0x5d2049['query']['fields']));_0x2dcc40[_0xcd90('0x36')]=_0x2dcc40[_0xcd90('0x36')]['length']?_0x2dcc40[_0xcd90('0x36')]:_0x577c22[_0xcd90('0x31')];if(!_0x5d2049['query'][_0xcd90('0x39')](_0xcd90('0x3a'))){_0x2dcc40[_0xcd90('0x23')]=qs['limit'](_0x5d2049[_0xcd90('0x33')][_0xcd90('0x23')]);_0x2dcc40[_0xcd90('0x22')]=qs[_0xcd90('0x22')](_0x5d2049[_0xcd90('0x33')][_0xcd90('0x22')]);}_0x2dcc40[_0xcd90('0x5e')]=qs[_0xcd90('0x3b')](_0x5d2049[_0xcd90('0x33')][_0xcd90('0x3b')]);_0x2dcc40[_0xcd90('0x3c')]=qs[_0xcd90('0x34')](_[_0xcd90('0x3d')](_0x5d2049[_0xcd90('0x33')],_0x577c22[_0xcd90('0x34')]));_0x2dcc40[_0xcd90('0x3c')][_0xcd90('0x5f')]=_0x2171c3['id'];if(_0x5d2049[_0xcd90('0x33')][_0xcd90('0x3e')]){_0x2dcc40['where']=_[_0xcd90('0x3f')](_0x2dcc40[_0xcd90('0x3c')],{'$or':_[_0xcd90('0x40')](_0x2dcc40['attributes'],function(_0x589075){var _0x3a1364={};_0x3a1364[_0x589075]={'$like':'%'+_0x5d2049[_0xcd90('0x33')][_0xcd90('0x3e')]+'%'};return _0x3a1364;})});}_0x2dcc40=_['merge']({},_0x2dcc40,_0x5d2049[_0xcd90('0x4e')]);return db[_0xcd90('0x5d')][_0xcd90('0x49')](_0x2dcc40);}})[_0xcd90('0x29')](function(_0xe6d7cb){if(_0xe6d7cb){return db['User'][_0xcd90('0x60')]({'where':{'id':_[_0xcd90('0x40')](_0xe6d7cb,_0xcd90('0x61')),'role':_0xcd90('0x62')},'attributes':['id',_0xcd90('0x2e'),_0xcd90('0x63'),_0xcd90('0x64'),_0xcd90('0x65')]});}})[_0xcd90('0x29')](function(_0x1c8043){if(_0x1c8043){return{'count':_0x1c8043['count'],'rows':_[_0xcd90('0x40')](_0x1c8043[_0xcd90('0x4a')],function(_0xdf9ecc){return{'membername':_0xdf9ecc[_0xcd90('0x2e')],'UserId':_0xdf9ecc['id'],'queue_name':_0x5d45f9[_0xcd90('0x2e')],'MailQueueId':_0x5d45f9['id'],'interface':util[_0xcd90('0x66')]('%s/%s',_0xcd90('0x67'),_0xdf9ecc[_0xcd90('0x2e')]),'penalty':0x0,'paused':_0xdf9ecc[_0xcd90('0x63')],'createdAt':_0xdf9ecc[_0xcd90('0x65')],'updatedAt':_0xdf9ecc[_0xcd90('0x64')]};})};}else{return{'count':0x0,'rows':[]};}})[_0xcd90('0x29')](respondWithFilteredResult(_0x503ed7,_0x2dcc40))['catch'](handleError(_0x503ed7,null));};exports[_0xcd90('0x68')]=function(_0x4d23b2,_0x2b1c83,_0x4ac360){var _0x21a528={};var _0x4993e6={};var _0x227f3b;var _0x4e941f;return db[_0xcd90('0x45')][_0xcd90('0x5c')]({'where':{'id':_0x4d23b2['params']['id']}})[_0xcd90('0x29')](handleEntityNotFound(_0x2b1c83,null))[_0xcd90('0x29')](function(_0x519ff6){if(_0x519ff6){_0x227f3b=_0x519ff6;_0x4993e6[_0xcd90('0x31')]=_[_0xcd90('0x32')](db[_0xcd90('0x69')][_0xcd90('0x30')]);_0x4993e6[_0xcd90('0x33')]=_[_0xcd90('0x32')](_0x4d23b2[_0xcd90('0x33')]);_0x4993e6[_0xcd90('0x34')]=_[_0xcd90('0x35')](_0x4993e6['model'],_0x4993e6[_0xcd90('0x33')]);_0x21a528['attributes']=_[_0xcd90('0x35')](_0x4993e6['model'],qs[_0xcd90('0x37')](_0x4d23b2['query'][_0xcd90('0x37')]));_0x21a528[_0xcd90('0x36')]=_0x21a528[_0xcd90('0x36')][_0xcd90('0x38')]?_0x21a528[_0xcd90('0x36')]:_0x4993e6[_0xcd90('0x31')];_0x21a528[_0xcd90('0x5e')]=qs[_0xcd90('0x3b')](_0x4d23b2[_0xcd90('0x33')]['sort']);_0x21a528['where']=qs['filters'](_[_0xcd90('0x3d')](_0x4d23b2['query'],_0x4993e6[_0xcd90('0x34')]));if(_0x4d23b2[_0xcd90('0x33')][_0xcd90('0x3e')]){_0x21a528['where']=_[_0xcd90('0x3f')](_0x21a528[_0xcd90('0x3c')],{'$or':_[_0xcd90('0x40')](_0x21a528[_0xcd90('0x36')],function(_0x555a0b){var _0x33ddbd={};_0x33ddbd[_0x555a0b]={'$like':'%'+_0x4d23b2[_0xcd90('0x33')]['filter']+'%'};return _0x33ddbd;})});}_0x21a528=_[_0xcd90('0x3f')]({},_0x21a528,_0x4d23b2[_0xcd90('0x4e')]);return _0x227f3b['getTeams'](_0x21a528);}})[_0xcd90('0x29')](function(_0x5ba9b2){if(_0x5ba9b2){_0x4e941f=_0x5ba9b2[_0xcd90('0x38')];if(!_0x4d23b2[_0xcd90('0x33')][_0xcd90('0x39')](_0xcd90('0x3a'))){_0x21a528[_0xcd90('0x23')]=qs[_0xcd90('0x23')](_0x4d23b2[_0xcd90('0x33')]['limit']);_0x21a528['offset']=qs[_0xcd90('0x22')](_0x4d23b2[_0xcd90('0x33')][_0xcd90('0x22')]);}return _0x227f3b[_0xcd90('0x68')](_0x21a528);}})[_0xcd90('0x29')](function(_0x3412c6){if(_0x3412c6){return _0x3412c6?{'count':_0x4e941f,'rows':_0x3412c6}:null;}})['then'](respondWithResult(_0x2b1c83,null))[_0xcd90('0x4b')](handleError(_0x2b1c83,null));};exports[_0xcd90('0x6a')]=function(_0x1e9800,_0x21dab5,_0x237536){var _0x2c498f=_0x1e9800['body'][_0xcd90('0x6b')];return db[_0xcd90('0x69')][_0xcd90('0x49')]({'where':{'id':_[_0xcd90('0x40')](_0x2c498f,'id')},'attributes':['id'],'include':[{'model':db[_0xcd90('0x6c')],'as':'Agents','attributes':['id',_0xcd90('0x2e'),_0xcd90('0x6d'),_0xcd90('0x6e'),_0xcd90('0x6f')],'raw':!![]}]})['then'](function(_0x638e1){if(_0x638e1){var _0x2ef7a3=_[_0xcd90('0x70')](_0x638e1,function(_0xf7e27){var _0x58c1c9=_0xf7e27['get']({'plain':!![]});return _0x58c1c9[_0xcd90('0x71')];});return db['MailQueue']['find']({'where':{'id':_0x1e9800[_0xcd90('0x4d')]['id']}})[_0xcd90('0x29')](function(_0x39c318){return db[_0xcd90('0x72')][_0xcd90('0x73')](function(_0xccd6aa){return _0x39c318[_0xcd90('0x6a')](_[_0xcd90('0x40')](_0x2c498f,'id'),{'transaction':_0xccd6aa})[_0xcd90('0x29')](function(){return BPromise[_0xcd90('0x74')](_0x2ef7a3,function(_0x5e7de0){return db[_0xcd90('0x5d')][_0xcd90('0x75')]({'where':{'UserId':_0x5e7de0['id'],'MailQueueId':_0x1e9800[_0xcd90('0x4d')]['id']},'transaction':_0xccd6aa});});})[_0xcd90('0x29')](function(){_0x2ef7a3[_0xcd90('0x76')](function(_0xc865d4){socket[_0xcd90('0x77')](_0xcd90('0x78'),{'UserId':_0xc865d4['id'],'MailQueueId':_0x39c318['id']});});});});});}})[_0xcd90('0x29')](respondWithStatusCode(_0x21dab5,null))[_0xcd90('0x4b')](handleError(_0x21dab5,null));};exports[_0xcd90('0x79')]=function(_0x517d45,_0x1cb3ef,_0x5082a2){return db[_0xcd90('0x69')][_0xcd90('0x49')]({'where':{'id':_0x517d45[_0xcd90('0x33')][_0xcd90('0x7a')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0xcd90('0x71'),'attributes':['id'],'raw':!![]}]})[_0xcd90('0x29')](handleEntityNotFound(_0x1cb3ef,null))[_0xcd90('0x29')](function(_0x6f77c9){var _0x193cb9=_[_0xcd90('0x40')](_0x6f77c9,'id');var _0x143dfc=[];var _0x3f6c29=[];var _0x33572b=squel[_0xcd90('0x7b')]();_0x33572b[_0xcd90('0x44')](_0xcd90('0x7c'))[_0xcd90('0x7d')](_0xcd90('0x7e'),'tq')['join'](_0xcd90('0x7f'),'ut',_0xcd90('0x80'))[_0xcd90('0x3c')](_0xcd90('0x81'),_0x517d45[_0xcd90('0x4d')]['id']);for(var _0x43fd5d=0x0;_0x43fd5d<_0x6f77c9[_0xcd90('0x38')];_0x43fd5d+=0x1){let _0x1298ff=_0x6f77c9[_0x43fd5d];for(var _0xd0229e=0x0;_0xd0229e<_0x1298ff[_0xcd90('0x71')]['length'];_0xd0229e+=0x1){let _0x1f0c41=_0x1298ff[_0xcd90('0x71')][_0xd0229e];var _0x26fc1e=_0x33572b[_0xcd90('0x82')]();_0x26fc1e[_0xcd90('0x3c')](_0xcd90('0x83'),_0x1f0c41['id']);_0x3f6c29['push'](db['sequelize'][_0xcd90('0x33')](_0x26fc1e['toString'](),{'type':db['sequelize'][_0xcd90('0x84')][_0xcd90('0x85')]})[_0xcd90('0x29')](function(_0x4ab8e7){if(_0x4ab8e7[_0xcd90('0x38')]===0x1){return _0x1f0c41['id'];}else{var _0x1f6639=_['every'](_[_0xcd90('0x40')](_0x4ab8e7,_0xcd90('0x86')),function(_0x509e0f){return _[_0xcd90('0x87')](_0x193cb9,_0x509e0f);});if(_0x1f6639){return _0x1f0c41['id'];}}}));}}return BPromise[_0xcd90('0x88')](_0x3f6c29)['then'](function(_0x4bb6d8){_0x143dfc=_(_0x143dfc)[_0xcd90('0x89')](_0x4bb6d8)['compact']()[_0xcd90('0x8a')]();return db[_0xcd90('0x45')][_0xcd90('0x4f')]({'where':{'id':_0x517d45[_0xcd90('0x4d')]['id']}})[_0xcd90('0x29')](function(_0x14001c){return db[_0xcd90('0x72')][_0xcd90('0x73')](function(_0x491bc0){return _0x14001c[_0xcd90('0x79')](_0x517d45[_0xcd90('0x33')]['ids'],{'transaction':_0x491bc0})['then'](function(){if(!_['isEmpty'](_0x143dfc)){return _0x14001c[_0xcd90('0x8b')](_0x143dfc,{'transaction':_0x491bc0});}})['then'](function(){_0x143dfc['forEach'](function(_0x388ce4){socket[_0xcd90('0x77')](_0xcd90('0x8c'),{'UserId':_0x388ce4,'MailQueueId':_0x14001c['id']});});});});});});})[_0xcd90('0x29')](respondWithStatusCode(_0x1cb3ef,null))[_0xcd90('0x4b')](handleError(_0x1cb3ef,null));};exports['addAgents']=function(_0x19fc04,_0x41941a,_0x370adb){return db[_0xcd90('0x45')][_0xcd90('0x4f')]({'where':{'id':_0x19fc04[_0xcd90('0x4d')]['id']}})[_0xcd90('0x29')](handleEntityNotFound(_0x41941a,null))[_0xcd90('0x29')](function(_0x4b57b6){if(_0x4b57b6){return _0x4b57b6[_0xcd90('0x8d')](_0x19fc04['body']['ids'],_[_0xcd90('0x8e')](_0x19fc04[_0xcd90('0x51')],[_0xcd90('0x7a'),'id'])||{})[_0xcd90('0x8f')](function(_0x168f6c){for(var _0x18945e=0x0;_0x18945e<_0x19fc04['body'][_0xcd90('0x7a')]['length'];_0x18945e+=0x1){socket[_0xcd90('0x77')](_0xcd90('0x78'),{'UserId':_0x19fc04[_0xcd90('0x51')][_0xcd90('0x7a')][_0x18945e],'MailQueueId':_0x19fc04[_0xcd90('0x4d')]['id']});}return _0x168f6c;});}})['then'](respondWithResult(_0x41941a,null))[_0xcd90('0x4b')](handleError(_0x41941a,null));};exports['removeAgents']=function(_0x724288,_0x286a5c,_0x1813c3){return db[_0xcd90('0x45')][_0xcd90('0x4f')]({'where':{'id':_0x724288[_0xcd90('0x4d')]['id']}})['then'](handleEntityNotFound(_0x286a5c,null))[_0xcd90('0x29')](function(_0x3d2875){if(_0x3d2875){return _0x3d2875[_0xcd90('0x8b')](_0x724288[_0xcd90('0x33')][_0xcd90('0x7a')])[_0xcd90('0x29')](function(){if(_[_0xcd90('0x90')](_0x724288['query'][_0xcd90('0x7a')])){for(var _0x38b4e7=0x0;_0x38b4e7<_0x724288['query'][_0xcd90('0x7a')][_0xcd90('0x38')];_0x38b4e7+=0x1){socket['emit'](_0xcd90('0x8c'),{'UserId':Number(_0x724288[_0xcd90('0x33')][_0xcd90('0x7a')][_0x38b4e7]),'MailQueueId':Number(_0x724288[_0xcd90('0x4d')]['id'])});}}else{socket['emit'](_0xcd90('0x8c'),{'UserId':Number(_0x724288['query'][_0xcd90('0x7a')]),'MailQueueId':Number(_0x724288[_0xcd90('0x4d')]['id'])});}});}})[_0xcd90('0x29')](respondWithStatusCode(_0x286a5c,null))[_0xcd90('0x4b')](handleError(_0x286a5c,null));};exports[_0xcd90('0x91')]=function(_0x4e222b,_0x2a74e8,_0x1a95e2){var _0x845f1e={};var _0x5e6de1={};var _0x55322d;var _0x357a7f;return db[_0xcd90('0x45')]['findOne']({'where':{'id':_0x4e222b[_0xcd90('0x4d')]['id']}})[_0xcd90('0x29')](handleEntityNotFound(_0x2a74e8,null))[_0xcd90('0x29')](function(_0x38cfe1){if(_0x38cfe1){_0x55322d=_0x38cfe1;_0x5e6de1['model']=_[_0xcd90('0x32')](db[_0xcd90('0x6c')][_0xcd90('0x30')]);_0x5e6de1[_0xcd90('0x33')]=_[_0xcd90('0x32')](_0x4e222b[_0xcd90('0x33')]);_0x5e6de1[_0xcd90('0x34')]=_[_0xcd90('0x35')](_0x5e6de1[_0xcd90('0x31')],_0x5e6de1['query']);_0x845f1e['attributes']=_[_0xcd90('0x35')](_0x5e6de1[_0xcd90('0x31')],qs[_0xcd90('0x37')](_0x4e222b[_0xcd90('0x33')][_0xcd90('0x37')]));_0x845f1e[_0xcd90('0x36')]=_0x845f1e['attributes']['length']?_0x845f1e['attributes']:_0x5e6de1[_0xcd90('0x31')];_0x845f1e[_0xcd90('0x5e')]=qs['sort'](_0x4e222b[_0xcd90('0x33')]['sort']);_0x845f1e[_0xcd90('0x3c')]=qs[_0xcd90('0x34')](_[_0xcd90('0x3d')](_0x4e222b['query'],_0x5e6de1[_0xcd90('0x34')]));if(_0x4e222b[_0xcd90('0x33')][_0xcd90('0x3e')]){_0x845f1e[_0xcd90('0x3c')]=_[_0xcd90('0x3f')](_0x845f1e[_0xcd90('0x3c')],{'$or':_['map'](_0x845f1e['attributes'],function(_0x449c6a){var _0x38afd3={};_0x38afd3[_0x449c6a]={'$like':'%'+_0x4e222b[_0xcd90('0x33')][_0xcd90('0x3e')]+'%'};return _0x38afd3;})});}_0x845f1e=_[_0xcd90('0x3f')]({},_0x845f1e,_0x4e222b[_0xcd90('0x4e')]);return _0x55322d[_0xcd90('0x91')](_0x845f1e);}})[_0xcd90('0x29')](function(_0x45dd8d){if(_0x45dd8d){_0x357a7f=_0x45dd8d[_0xcd90('0x38')];if(!_0x4e222b['query'][_0xcd90('0x39')](_0xcd90('0x3a'))){_0x845f1e[_0xcd90('0x23')]=qs[_0xcd90('0x23')](_0x4e222b[_0xcd90('0x33')]['limit']);_0x845f1e[_0xcd90('0x22')]=qs['offset'](_0x4e222b[_0xcd90('0x33')][_0xcd90('0x22')]);}return _0x55322d[_0xcd90('0x91')](_0x845f1e);}})[_0xcd90('0x29')](function(_0x51c950){if(_0x51c950){return _0x51c950?{'count':_0x357a7f,'rows':_0x51c950}:null;}})[_0xcd90('0x29')](respondWithResult(_0x2a74e8,null))[_0xcd90('0x4b')](handleError(_0x2a74e8,null));};
\ No newline at end of file
index a6cec59..73ffef8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x170e=['save','update','remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','MailQueue','setMaxListeners'];(function(_0x165e33,_0x1af7a2){var _0x327d16=function(_0x4dd8f0){while(--_0x4dd8f0){_0x165e33['push'](_0x165e33['shift']());}};_0x327d16(++_0x1af7a2);}(_0x170e,0xac));var _0xe170=function(_0x177cc9,_0x3f6fdd){_0x177cc9=_0x177cc9-0x0;var _0x2fe577=_0x170e[_0x177cc9];return _0x2fe577;};'use strict';var EventEmitter=require(_0xe170('0x0'));var MailQueue=require(_0xe170('0x1'))['db'][_0xe170('0x2')];var MailQueueEvents=new EventEmitter();MailQueueEvents[_0xe170('0x3')](0x0);var events={'afterCreate':_0xe170('0x4'),'afterUpdate':_0xe170('0x5'),'afterDestroy':_0xe170('0x6')};function emitEvent(_0x4241dd){return function(_0x1ad4be,_0x1653d9,_0x152964){MailQueueEvents[_0xe170('0x7')](_0x4241dd+':'+_0x1ad4be['id'],_0x1ad4be);MailQueueEvents[_0xe170('0x7')](_0x4241dd,_0x1ad4be);_0x152964(null);};}for(var e in events){if(events[_0xe170('0x8')](e)){var event=events[e];MailQueue[_0xe170('0x9')](e,emitEvent(event));}}module[_0xe170('0xa')]=MailQueueEvents;
\ No newline at end of file
+var _0x6dea=['MailQueue','setMaxListeners','save','update','remove','hasOwnProperty','hook','exports','events'];(function(_0x4eafed,_0x26e2bc){var _0x159c85=function(_0x6f129f){while(--_0x6f129f){_0x4eafed['push'](_0x4eafed['shift']());}};_0x159c85(++_0x26e2bc);}(_0x6dea,0x86));var _0xa6de=function(_0x2c01df,_0x113b11){_0x2c01df=_0x2c01df-0x0;var _0x367a58=_0x6dea[_0x2c01df];return _0x367a58;};'use strict';var EventEmitter=require(_0xa6de('0x0'));var MailQueue=require('../../mysqldb')['db'][_0xa6de('0x1')];var MailQueueEvents=new EventEmitter();MailQueueEvents[_0xa6de('0x2')](0x0);var events={'afterCreate':_0xa6de('0x3'),'afterUpdate':_0xa6de('0x4'),'afterDestroy':_0xa6de('0x5')};function emitEvent(_0x5d992f){return function(_0x11ca79,_0x8ae013,_0x1a233e){MailQueueEvents['emit'](_0x5d992f+':'+_0x11ca79['id'],_0x11ca79);MailQueueEvents['emit'](_0x5d992f,_0x11ca79);_0x1a233e(null);};}for(var e in events){if(events[_0xa6de('0x6')](e)){var event=events[e];MailQueue[_0xa6de('0x7')](e,emitEvent(event));}}module[_0xa6de('0x8')]=MailQueueEvents;
\ No newline at end of file
index 343efb5..96b7b61 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcb91=['rimraf','./mailQueue.attributes','exports','define','mail_queues','../../config/logger','api','moment','bluebird','path'];(function(_0x2f4b69,_0x396424){var _0x80900a=function(_0x3e615c){while(--_0x3e615c){_0x2f4b69['push'](_0x2f4b69['shift']());}};_0x80900a(++_0x396424);}(_0xcb91,0x1a9));var _0x1cb9=function(_0xc77819,_0x139fdc){_0xc77819=_0xc77819-0x0;var _0x1c9434=_0xcb91[_0xc77819];return _0x1c9434;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x1cb9('0x0'))(_0x1cb9('0x1'));var moment=require(_0x1cb9('0x2'));var BPromise=require(_0x1cb9('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x1cb9('0x4'));var rimraf=require(_0x1cb9('0x5'));var config=require('../../config/environment');var attributes=require(_0x1cb9('0x6'));module[_0x1cb9('0x7')]=function(_0x53ffbd,_0x226b69){return _0x53ffbd[_0x1cb9('0x8')]('MailQueue',attributes,{'tableName':_0x1cb9('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0713=['moment','bluebird','request-promise','rimraf','../../config/environment','./mailQueue.attributes','exports','define','MailQueue','mail_queues','../../config/logger','api'];(function(_0x12dc61,_0x383811){var _0x5e3cf9=function(_0x1d2e51){while(--_0x1d2e51){_0x12dc61['push'](_0x12dc61['shift']());}};_0x5e3cf9(++_0x383811);}(_0x0713,0x1ba));var _0x3071=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0713[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x3071('0x0'))(_0x3071('0x1'));var moment=require(_0x3071('0x2'));var BPromise=require(_0x3071('0x3'));var rp=require(_0x3071('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x3071('0x5'));var config=require(_0x3071('0x6'));var attributes=require(_0x3071('0x7'));module[_0x3071('0x8')]=function(_0xabd7b6,_0x41cf76){return _0xabd7b6[_0x3071('0x9')](_0x3071('0xa'),attributes,{'tableName':_0x3071('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 412dbd8..8721749 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4b9b=['client','http','redis','defaults','socket.io-emitter','./mailQueue.socket','request','then','info','request\x20sent','debug','MailQueue,\x20%s,\x20%s,\x20%s','error','code','MailQueue,\x20%s,\x20%s','message','result','GetMailQueue','options','where','attributes','limit','include','map','model','catch','ShowMailQueue','MailQueue','find','raw','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0x494d1f,_0x3f72ff){var _0x457b6e=function(_0x38cb16){while(--_0x38cb16){_0x494d1f['push'](_0x494d1f['shift']());}};_0x457b6e(++_0x3f72ff);}(_0x4b9b,0xeb));var _0xb4b9=function(_0x4063a4,_0x19d730){_0x4063a4=_0x4063a4-0x0;var _0x17908d=_0x4b9b[_0x4063a4];return _0x17908d;};'use strict';var _=require(_0xb4b9('0x0'));var util=require(_0xb4b9('0x1'));var moment=require(_0xb4b9('0x2'));var BPromise=require(_0xb4b9('0x3'));var rs=require(_0xb4b9('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xb4b9('0x5'))['db'];var utils=require(_0xb4b9('0x6'));var logger=require(_0xb4b9('0x7'))(_0xb4b9('0x8'));var config=require(_0xb4b9('0x9'));var jayson=require(_0xb4b9('0xa'));var client=jayson[_0xb4b9('0xb')][_0xb4b9('0xc')]({'port':0x232a});config[_0xb4b9('0xd')]=_[_0xb4b9('0xe')](config[_0xb4b9('0xd')],{'host':'localhost','port':0x18eb});var socket=require(_0xb4b9('0xf'))(new Redis(config['redis']));require(_0xb4b9('0x10'))['register'](socket);function respondWithRpcPromise(_0x33e8c2,_0x20ad1f,_0x3a88ce){return new BPromise(function(_0x490245,_0x3a0899){return client[_0xb4b9('0x11')](_0x33e8c2,_0x3a88ce)[_0xb4b9('0x12')](function(_0x1b19c3){logger[_0xb4b9('0x13')]('MailQueue,\x20%s,\x20%s',_0x20ad1f,_0xb4b9('0x14'));logger[_0xb4b9('0x15')](_0xb4b9('0x16'),_0x20ad1f,_0xb4b9('0x14'),JSON['stringify'](_0x1b19c3));if(_0x1b19c3[_0xb4b9('0x17')]){if(_0x1b19c3[_0xb4b9('0x17')][_0xb4b9('0x18')]===0x1f4){logger['error'](_0xb4b9('0x19'),_0x20ad1f,_0x1b19c3[_0xb4b9('0x17')][_0xb4b9('0x1a')]);return _0x3a0899(_0x1b19c3['error'][_0xb4b9('0x1a')]);}logger['error']('MailQueue,\x20%s,\x20%s',_0x20ad1f,_0x1b19c3[_0xb4b9('0x17')][_0xb4b9('0x1a')]);return _0x490245(_0x1b19c3[_0xb4b9('0x17')][_0xb4b9('0x1a')]);}else{logger['info'](_0xb4b9('0x19'),_0x20ad1f,_0xb4b9('0x14'));_0x490245(_0x1b19c3[_0xb4b9('0x1b')][_0xb4b9('0x1a')]);}})['catch'](function(_0x460df6){logger[_0xb4b9('0x17')](_0xb4b9('0x19'),_0x20ad1f,_0x460df6);_0x3a0899(_0x460df6);});});}exports[_0xb4b9('0x1c')]=function(_0x4f3451){var _0x17b4f6=this;return new Promise(function(_0x3df12d,_0xf7440e){return db['MailQueue']['findAll']({'raw':_0x4f3451[_0xb4b9('0x1d')]?_0x4f3451[_0xb4b9('0x1d')]['raw']===undefined?!![]:![]:!![],'where':_0x4f3451[_0xb4b9('0x1d')]?_0x4f3451['options'][_0xb4b9('0x1e')]||null:null,'attributes':_0x4f3451[_0xb4b9('0x1d')]?_0x4f3451[_0xb4b9('0x1d')][_0xb4b9('0x1f')]||null:null,'limit':_0x4f3451['options']?_0x4f3451[_0xb4b9('0x1d')][_0xb4b9('0x20')]||null:null,'include':_0x4f3451[_0xb4b9('0x1d')]?_0x4f3451[_0xb4b9('0x1d')][_0xb4b9('0x21')]?_[_0xb4b9('0x22')](_0x4f3451[_0xb4b9('0x1d')]['include'],function(_0x3567d1){return{'model':db[_0x3567d1[_0xb4b9('0x23')]],'as':_0x3567d1['as'],'attributes':_0x3567d1['attributes'],'include':_0x3567d1[_0xb4b9('0x21')]?_['map'](_0x3567d1['include'],function(_0x3a64b7){return{'model':db[_0x3a64b7[_0xb4b9('0x23')]],'as':_0x3a64b7['as'],'attributes':_0x3a64b7['attributes'],'include':_0x3a64b7['include']?_[_0xb4b9('0x22')](_0x3a64b7[_0xb4b9('0x21')],function(_0x235dea){return{'model':db[_0x235dea[_0xb4b9('0x23')]],'as':_0x235dea['as'],'attributes':_0x235dea[_0xb4b9('0x1f')]};}):[]};}):[]};}):[]:[]})[_0xb4b9('0x12')](function(_0x188b2c){logger[_0xb4b9('0x13')]('GetMailQueue',_0x4f3451);logger[_0xb4b9('0x15')](_0xb4b9('0x1c'),_0x4f3451,JSON['stringify'](_0x188b2c));_0x3df12d(_0x188b2c);})[_0xb4b9('0x24')](function(_0x3c59c0){logger[_0xb4b9('0x17')](_0xb4b9('0x1c'),_0x3c59c0[_0xb4b9('0x1a')],_0x4f3451);_0xf7440e(_0x17b4f6['error'](0x1f4,_0x3c59c0[_0xb4b9('0x1a')]));});});};exports[_0xb4b9('0x25')]=function(_0x11a7d3){var _0x1f063c=this;return new Promise(function(_0x42b416,_0x4fae76){return db[_0xb4b9('0x26')][_0xb4b9('0x27')]({'raw':_0x11a7d3[_0xb4b9('0x1d')]?_0x11a7d3['options'][_0xb4b9('0x28')]===undefined?!![]:![]:!![],'where':_0x11a7d3[_0xb4b9('0x1d')]?_0x11a7d3[_0xb4b9('0x1d')][_0xb4b9('0x1e')]||null:null,'attributes':_0x11a7d3['options']?_0x11a7d3[_0xb4b9('0x1d')]['attributes']||null:null,'include':_0x11a7d3['options']?_0x11a7d3[_0xb4b9('0x1d')][_0xb4b9('0x21')]?_[_0xb4b9('0x22')](_0x11a7d3[_0xb4b9('0x1d')][_0xb4b9('0x21')],function(_0x3ddf66){return{'model':db[_0x3ddf66['model']],'as':_0x3ddf66['as'],'attributes':_0x3ddf66[_0xb4b9('0x1f')],'include':_0x3ddf66[_0xb4b9('0x21')]?_[_0xb4b9('0x22')](_0x3ddf66[_0xb4b9('0x21')],function(_0x5798c1){return{'model':db[_0x5798c1[_0xb4b9('0x23')]],'as':_0x5798c1['as'],'attributes':_0x5798c1[_0xb4b9('0x1f')],'include':_0x5798c1['include']?_['map'](_0x5798c1[_0xb4b9('0x21')],function(_0x55f280){return{'model':db[_0x55f280[_0xb4b9('0x23')]],'as':_0x55f280['as'],'attributes':_0x55f280[_0xb4b9('0x1f')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x110161){logger[_0xb4b9('0x13')](_0xb4b9('0x25'),_0x11a7d3);logger[_0xb4b9('0x15')](_0xb4b9('0x25'),_0x11a7d3,JSON['stringify'](_0x110161));_0x42b416(_0x110161);})[_0xb4b9('0x24')](function(_0x2c8864){logger[_0xb4b9('0x17')](_0xb4b9('0x25'),_0x2c8864[_0xb4b9('0x1a')],_0x11a7d3);_0x4fae76(_0x1f063c['error'](0x1f4,_0x2c8864[_0xb4b9('0x1a')]));});});};
\ No newline at end of file
+var _0x642f=['raw','where','limit','include','model','attributes','map','then','ShowMailQueue','MailQueue','find','lodash','moment','bluebird','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','./mailQueue.socket','register','request','info','MailQueue,\x20%s,\x20%s','request\x20sent','debug','MailQueue,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','GetMailQueue','findAll','options'];(function(_0x322a64,_0xddff42){var _0x52517f=function(_0x2f4030){while(--_0x2f4030){_0x322a64['push'](_0x322a64['shift']());}};_0x52517f(++_0xddff42);}(_0x642f,0xfb));var _0xf642=function(_0x397a95,_0x35c758){_0x397a95=_0x397a95-0x0;var _0x173be2=_0x642f[_0x397a95];return _0x173be2;};'use strict';var _=require(_0xf642('0x0'));var util=require('util');var moment=require(_0xf642('0x1'));var BPromise=require(_0xf642('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xf642('0x3'));var db=require(_0xf642('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xf642('0x5'))(_0xf642('0x6'));var config=require(_0xf642('0x7'));var jayson=require(_0xf642('0x8'));var client=jayson[_0xf642('0x9')][_0xf642('0xa')]({'port':0x232a});config[_0xf642('0xb')]=_[_0xf642('0xc')](config[_0xf642('0xb')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0xf642('0xd'))[_0xf642('0xe')](socket);function respondWithRpcPromise(_0x2ac35c,_0x267fdd,_0x2a2fbe){return new BPromise(function(_0x53a8b4,_0x23de9c){return client[_0xf642('0xf')](_0x2ac35c,_0x2a2fbe)['then'](function(_0x19daeb){logger[_0xf642('0x10')](_0xf642('0x11'),_0x267fdd,_0xf642('0x12'));logger[_0xf642('0x13')](_0xf642('0x14'),_0x267fdd,_0xf642('0x12'),JSON['stringify'](_0x19daeb));if(_0x19daeb[_0xf642('0x15')]){if(_0x19daeb['error'][_0xf642('0x16')]===0x1f4){logger['error'](_0xf642('0x11'),_0x267fdd,_0x19daeb[_0xf642('0x15')]['message']);return _0x23de9c(_0x19daeb[_0xf642('0x15')]['message']);}logger[_0xf642('0x15')]('MailQueue,\x20%s,\x20%s',_0x267fdd,_0x19daeb['error'][_0xf642('0x17')]);return _0x53a8b4(_0x19daeb[_0xf642('0x15')][_0xf642('0x17')]);}else{logger[_0xf642('0x10')]('MailQueue,\x20%s,\x20%s',_0x267fdd,_0xf642('0x12'));_0x53a8b4(_0x19daeb[_0xf642('0x18')]['message']);}})[_0xf642('0x19')](function(_0x23a139){logger[_0xf642('0x15')](_0xf642('0x11'),_0x267fdd,_0x23a139);_0x23de9c(_0x23a139);});});}exports[_0xf642('0x1a')]=function(_0x58d8ff){var _0x55d497=this;return new Promise(function(_0x2902cd,_0x1c19bf){return db['MailQueue'][_0xf642('0x1b')]({'raw':_0x58d8ff['options']?_0x58d8ff[_0xf642('0x1c')][_0xf642('0x1d')]===undefined?!![]:![]:!![],'where':_0x58d8ff[_0xf642('0x1c')]?_0x58d8ff[_0xf642('0x1c')][_0xf642('0x1e')]||null:null,'attributes':_0x58d8ff[_0xf642('0x1c')]?_0x58d8ff[_0xf642('0x1c')]['attributes']||null:null,'limit':_0x58d8ff['options']?_0x58d8ff[_0xf642('0x1c')][_0xf642('0x1f')]||null:null,'include':_0x58d8ff[_0xf642('0x1c')]?_0x58d8ff['options'][_0xf642('0x20')]?_['map'](_0x58d8ff['options'][_0xf642('0x20')],function(_0x2ea3a3){return{'model':db[_0x2ea3a3[_0xf642('0x21')]],'as':_0x2ea3a3['as'],'attributes':_0x2ea3a3[_0xf642('0x22')],'include':_0x2ea3a3[_0xf642('0x20')]?_[_0xf642('0x23')](_0x2ea3a3[_0xf642('0x20')],function(_0x532c0b){return{'model':db[_0x532c0b[_0xf642('0x21')]],'as':_0x532c0b['as'],'attributes':_0x532c0b[_0xf642('0x22')],'include':_0x532c0b[_0xf642('0x20')]?_[_0xf642('0x23')](_0x532c0b[_0xf642('0x20')],function(_0x2bf1c0){return{'model':db[_0x2bf1c0[_0xf642('0x21')]],'as':_0x2bf1c0['as'],'attributes':_0x2bf1c0[_0xf642('0x22')]};}):[]};}):[]};}):[]:[]})[_0xf642('0x24')](function(_0x231db7){logger[_0xf642('0x10')](_0xf642('0x1a'),_0x58d8ff);logger[_0xf642('0x13')](_0xf642('0x1a'),_0x58d8ff,JSON['stringify'](_0x231db7));_0x2902cd(_0x231db7);})[_0xf642('0x19')](function(_0x48bebb){logger[_0xf642('0x15')](_0xf642('0x1a'),_0x48bebb[_0xf642('0x17')],_0x58d8ff);_0x1c19bf(_0x55d497['error'](0x1f4,_0x48bebb[_0xf642('0x17')]));});});};exports[_0xf642('0x25')]=function(_0x42af06){var _0x1c9375=this;return new Promise(function(_0x4a35a3,_0x20c5e8){return db[_0xf642('0x26')][_0xf642('0x27')]({'raw':_0x42af06[_0xf642('0x1c')]?_0x42af06[_0xf642('0x1c')][_0xf642('0x1d')]===undefined?!![]:![]:!![],'where':_0x42af06['options']?_0x42af06[_0xf642('0x1c')]['where']||null:null,'attributes':_0x42af06[_0xf642('0x1c')]?_0x42af06[_0xf642('0x1c')][_0xf642('0x22')]||null:null,'include':_0x42af06[_0xf642('0x1c')]?_0x42af06['options']['include']?_[_0xf642('0x23')](_0x42af06['options'][_0xf642('0x20')],function(_0x4d3147){return{'model':db[_0x4d3147[_0xf642('0x21')]],'as':_0x4d3147['as'],'attributes':_0x4d3147['attributes'],'include':_0x4d3147[_0xf642('0x20')]?_[_0xf642('0x23')](_0x4d3147['include'],function(_0x172698){return{'model':db[_0x172698[_0xf642('0x21')]],'as':_0x172698['as'],'attributes':_0x172698[_0xf642('0x22')],'include':_0x172698[_0xf642('0x20')]?_[_0xf642('0x23')](_0x172698[_0xf642('0x20')],function(_0x2ceb32){return{'model':db[_0x2ceb32[_0xf642('0x21')]],'as':_0x2ceb32['as'],'attributes':_0x2ceb32['attributes']};}):[]};}):[]};}):[]:[]})[_0xf642('0x24')](function(_0x32ec5a){logger[_0xf642('0x10')](_0xf642('0x25'),_0x42af06);logger[_0xf642('0x13')](_0xf642('0x25'),_0x42af06,JSON['stringify'](_0x32ec5a));_0x4a35a3(_0x32ec5a);})[_0xf642('0x19')](function(_0x401ed4){logger[_0xf642('0x15')](_0xf642('0x25'),_0x401ed4[_0xf642('0x17')],_0x42af06);_0x20c5e8(_0x1c9375['error'](0x1f4,_0x401ed4[_0xf642('0x17')]));});});};
\ No newline at end of file
index 04ea01d..10247aa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa3c4=['length','mailQueue:','./mailQueue.events','update','emit','register'];(function(_0x2e2c9c,_0x3a2e71){var _0x195b88=function(_0x455ec7){while(--_0x455ec7){_0x2e2c9c['push'](_0x2e2c9c['shift']());}};_0x195b88(++_0x3a2e71);}(_0xa3c4,0x188));var _0x4a3c=function(_0x4ea474,_0x3759ad){_0x4ea474=_0x4ea474-0x0;var _0x4190ef=_0xa3c4[_0x4ea474];return _0x4190ef;};'use strict';var MailQueueEvents=require(_0x4a3c('0x0'));var events=['save','remove',_0x4a3c('0x1')];function createListener(_0x1850ab,_0x47e63b){return function(_0x478e7e){_0x47e63b[_0x4a3c('0x2')](_0x1850ab,_0x478e7e);};}function removeListener(_0x12b5b8,_0x5114c4){return function(){MailQueueEvents['removeListener'](_0x12b5b8,_0x5114c4);};}exports[_0x4a3c('0x3')]=function(_0x31daa4){for(var _0x3a3cb9=0x0,_0x38dba6=events[_0x4a3c('0x4')];_0x3a3cb9<_0x38dba6;_0x3a3cb9++){var _0x53334b=events[_0x3a3cb9];var _0xef12e5=createListener(_0x4a3c('0x5')+_0x53334b,_0x31daa4);MailQueueEvents['on'](_0x53334b,_0xef12e5);}};
\ No newline at end of file
+var _0xee14=['save','remove','removeListener','mailQueue:'];(function(_0x1efdbd,_0x5977e8){var _0x1534a5=function(_0x5311aa){while(--_0x5311aa){_0x1efdbd['push'](_0x1efdbd['shift']());}};_0x1534a5(++_0x5977e8);}(_0xee14,0x100));var _0x4ee1=function(_0x5e160f,_0x1b072d){_0x5e160f=_0x5e160f-0x0;var _0x5a8e67=_0xee14[_0x5e160f];return _0x5a8e67;};'use strict';var MailQueueEvents=require('./mailQueue.events');var events=[_0x4ee1('0x0'),_0x4ee1('0x1'),'update'];function createListener(_0x5e3d8b,_0x31b169){return function(_0x265977){_0x31b169['emit'](_0x5e3d8b,_0x265977);};}function removeListener(_0x3eb4d5,_0x1b8ea3){return function(){MailQueueEvents[_0x4ee1('0x2')](_0x3eb4d5,_0x1b8ea3);};}exports['register']=function(_0x14152e){for(var _0x10a44f=0x0,_0x2ae0c0=events['length'];_0x10a44f<_0x2ae0c0;_0x10a44f++){var _0x3f30dc=events[_0x10a44f];var _0xa4fa5b=createListener(_0x4ee1('0x3')+_0x3f30dc,_0x14152e);MailQueueEvents['on'](_0x3f30dc,_0xa4fa5b);}};
\ No newline at end of file
index eb1ed00..f04836b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x06b4=['get','index','/describe','isAuthenticated','describe','/:id','show','post','create','put','delete','destroy','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x3712a5,_0x2d6406){var _0x312fb2=function(_0x906e7f){while(--_0x906e7f){_0x3712a5['push'](_0x3712a5['shift']());}};_0x312fb2(++_0x2d6406);}(_0x06b4,0xd4));var _0x406b=function(_0x5ba0f3,_0x1807b1){_0x5ba0f3=_0x5ba0f3-0x0;var _0x17d0be=_0x06b4[_0x5ba0f3];return _0x17d0be;};'use strict';var multer=require('multer');var util=require(_0x406b('0x0'));var path=require(_0x406b('0x1'));var timeout=require(_0x406b('0x2'));var express=require(_0x406b('0x3'));var router=express[_0x406b('0x4')]();var auth=require(_0x406b('0x5'));var interaction=require(_0x406b('0x6'));var config=require(_0x406b('0x7'));var controller=require('./mailQueueReport.controller');router[_0x406b('0x8')]('/',auth['isAuthenticated'](),controller[_0x406b('0x9')]);router[_0x406b('0x8')](_0x406b('0xa'),auth[_0x406b('0xb')](),controller[_0x406b('0xc')]);router[_0x406b('0x8')](_0x406b('0xd'),auth['isAuthenticated'](),controller[_0x406b('0xe')]);router[_0x406b('0xf')]('/',auth[_0x406b('0xb')](),controller[_0x406b('0x10')]);router[_0x406b('0x11')]('/:id',auth['isAuthenticated'](),controller['update']);router[_0x406b('0x12')](_0x406b('0xd'),auth[_0x406b('0xb')](),controller[_0x406b('0x13')]);module['exports']=router;
\ No newline at end of file
+var _0x56b9=['/describe','describe','get','/:id','isAuthenticated','show','post','create','put','update','delete','destroy','multer','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailQueueReport.controller','index'];(function(_0x365be9,_0x3c88b9){var _0x185c12=function(_0xbadbbf){while(--_0xbadbbf){_0x365be9['push'](_0x365be9['shift']());}};_0x185c12(++_0x3c88b9);}(_0x56b9,0x11d));var _0x956b=function(_0x536e71,_0xd2c2c1){_0x536e71=_0x536e71-0x0;var _0x5f903e=_0x56b9[_0x536e71];return _0x5f903e;};'use strict';var multer=require(_0x956b('0x0'));var util=require('util');var path=require(_0x956b('0x1'));var timeout=require(_0x956b('0x2'));var express=require('express');var router=express[_0x956b('0x3')]();var auth=require(_0x956b('0x4'));var interaction=require(_0x956b('0x5'));var config=require(_0x956b('0x6'));var controller=require(_0x956b('0x7'));router['get']('/',auth['isAuthenticated'](),controller[_0x956b('0x8')]);router['get'](_0x956b('0x9'),auth['isAuthenticated'](),controller[_0x956b('0xa')]);router[_0x956b('0xb')](_0x956b('0xc'),auth[_0x956b('0xd')](),controller[_0x956b('0xe')]);router[_0x956b('0xf')]('/',auth[_0x956b('0xd')](),controller[_0x956b('0x10')]);router[_0x956b('0x11')](_0x956b('0xc'),auth[_0x956b('0xd')](),controller[_0x956b('0x12')]);router[_0x956b('0x13')]('/:id',auth[_0x956b('0xd')](),controller[_0x956b('0x14')]);module['exports']=router;
\ No newline at end of file
index b450027..fec9fc2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x550f=['DATE','sequelize','exports','STRING'];(function(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0x550f,0xad));var _0xf550=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x550f[_0x3dd15e];return _0x231fd0;};'use strict';var moment=require('moment');var Sequelize=require(_0xf550('0x0'));module[_0xf550('0x1')]={'uniqueid':{'type':Sequelize[_0xf550('0x2')],'allowNull':![]},'from':{'type':Sequelize[_0xf550('0x2')]},'joinAt':{'type':Sequelize[_0xf550('0x3')]},'leaveAt':{'type':Sequelize[_0xf550('0x3')]},'acceptAt':{'type':Sequelize[_0xf550('0x3')]},'exitAt':{'type':Sequelize[_0xf550('0x3')]},'reason':{'type':Sequelize[_0xf550('0x2')]}};
\ No newline at end of file
+var _0xcd20=['STRING','DATE','moment','sequelize','exports'];(function(_0x11866f,_0x467cb1){var _0x16ba25=function(_0x3a95ef){while(--_0x3a95ef){_0x11866f['push'](_0x11866f['shift']());}};_0x16ba25(++_0x467cb1);}(_0xcd20,0x1d3));var _0x0cd2=function(_0x315cdd,_0x364667){_0x315cdd=_0x315cdd-0x0;var _0x21e583=_0xcd20[_0x315cdd];return _0x21e583;};'use strict';var moment=require(_0x0cd2('0x0'));var Sequelize=require(_0x0cd2('0x1'));module[_0x0cd2('0x2')]={'uniqueid':{'type':Sequelize[_0x0cd2('0x3')],'allowNull':![]},'from':{'type':Sequelize[_0x0cd2('0x3')]},'joinAt':{'type':Sequelize[_0x0cd2('0x4')]},'leaveAt':{'type':Sequelize[_0x0cd2('0x4')]},'acceptAt':{'type':Sequelize[_0x0cd2('0x4')]},'exitAt':{'type':Sequelize[_0x0cd2('0x4')]},'reason':{'type':Sequelize[_0x0cd2('0x3')]}};
\ No newline at end of file
index 6786d48..bcc3af2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8078=['offset','reject','save','update','then','destroy','error','name','index','MailQueueReport','rawAttributes','model','query','keys','attributes','intersection','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','filters','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','findAll','rows','params','include','find','catch','create','body','describe','html-pdf','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','end','status','json','count'];(function(_0x249f9a,_0x4fb6c8){var _0xd63e3=function(_0x1cb09e){while(--_0x1cb09e){_0x249f9a['push'](_0x249f9a['shift']());}};_0xd63e3(++_0x4fb6c8);}(_0x8078,0x147));var _0x8807=function(_0x24c1bc,_0x2d35c4){_0x24c1bc=_0x24c1bc-0x0;var _0x18499f=_0x8078[_0x24c1bc];return _0x18499f;};'use strict';var pdf=require(_0x8807('0x0'));var emlformat=require(_0x8807('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x8807('0x2'));var rp=require(_0x8807('0x3'));var moment=require(_0x8807('0x4'));var BPromise=require(_0x8807('0x5'));var Mustache=require(_0x8807('0x6'));var util=require(_0x8807('0x7'));var path=require(_0x8807('0x8'));var sox=require(_0x8807('0x9'));var csv=require(_0x8807('0xa'));var ejs=require(_0x8807('0xb'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x8807('0xc'));var jsforce=require(_0x8807('0xd'));var deskjs=require(_0x8807('0xe'));var toCsv=require(_0x8807('0xa'));var querystring=require(_0x8807('0xf'));var Papa=require(_0x8807('0x10'));var Redis=require('ioredis');var authService=require(_0x8807('0x11'));var qs=require(_0x8807('0x12'));var hardwareService=require(_0x8807('0x13'));var logger=require(_0x8807('0x14'))('api');var utils=require(_0x8807('0x15'));var config=require(_0x8807('0x16'));var db=require(_0x8807('0x17'))['db'];function respondWithStatusCode(_0x2d0e4e,_0x4ee347){_0x4ee347=_0x4ee347||0xcc;return function(_0x2c1f27){if(_0x2c1f27){return _0x2d0e4e['sendStatus'](_0x4ee347);}return _0x2d0e4e['status'](_0x4ee347)[_0x8807('0x18')]();};}function respondWithResult(_0x167657,_0x222838){_0x222838=_0x222838||0xc8;return function(_0x51fdc1){if(_0x51fdc1){return _0x167657[_0x8807('0x19')](_0x222838)[_0x8807('0x1a')](_0x51fdc1);}};}function respondWithFilteredResult(_0xdbeb2e,_0x470278){return function(_0x9f36e1){if(_0x9f36e1){var _0x193cc1=_0x9f36e1[_0x8807('0x1b')],_0x16ea9d=_0x470278[_0x8807('0x1c')],_0x1b713e=_0x470278['offset']+_0x470278['limit'],_0x1ef666;if(_0x1b713e>=_0x193cc1){_0x1b713e=_0x193cc1;_0x1ef666=0xc8;}else{_0x1ef666=0xce;}_0xdbeb2e['status'](_0x1ef666);return _0xdbeb2e['set']('Content-Range',_0x16ea9d+'-'+_0x1b713e+'/'+_0x193cc1)['json'](_0x9f36e1);}return null;};}function patchUpdates(_0x50854b){return function(_0x3c18fd){try{jsonpatch['apply'](_0x3c18fd,_0x50854b,!![]);}catch(_0x1bb7ac){return BPromise[_0x8807('0x1d')](_0x1bb7ac);}return _0x3c18fd[_0x8807('0x1e')]();};}function saveUpdates(_0xd0da46,_0x52fc97){return function(_0x3a3ffb){if(_0x3a3ffb){return _0x3a3ffb[_0x8807('0x1f')](_0xd0da46)[_0x8807('0x20')](function(_0x45b17e){return _0x45b17e;});}return null;};}function removeEntity(_0x50dcf7,_0x12e969){return function(_0x29b102){if(_0x29b102){return _0x29b102[_0x8807('0x21')]()['then'](function(){_0x50dcf7[_0x8807('0x19')](0xcc)[_0x8807('0x18')]();});}};}function handleEntityNotFound(_0x1dd570,_0x1891a0){return function(_0x57974c){if(!_0x57974c){_0x1dd570['sendStatus'](0x194);}return _0x57974c;};}function handleError(_0x1de6f4,_0x42e4fb){_0x42e4fb=_0x42e4fb||0x1f4;return function(_0x40ee65){logger[_0x8807('0x22')](_0x40ee65['stack']);if(_0x40ee65[_0x8807('0x23')]){delete _0x40ee65[_0x8807('0x23')];}_0x1de6f4[_0x8807('0x19')](_0x42e4fb)['send'](_0x40ee65);};}exports[_0x8807('0x24')]=function(_0x536406,_0x405619){var _0x599c60={},_0x3c3e85={},_0x1ba170={'count':0x0,'rows':[]};var _0x59b9b2=db[_0x8807('0x25')][_0x8807('0x26')];_0x3c3e85[_0x8807('0x27')]=_['keys'](_0x59b9b2);_0x3c3e85[_0x8807('0x28')]=_[_0x8807('0x29')](_0x536406['query']);_0x3c3e85['filters']=_['intersection'](_0x3c3e85[_0x8807('0x27')],_0x3c3e85[_0x8807('0x28')]);_0x599c60[_0x8807('0x2a')]=_[_0x8807('0x2b')](_0x3c3e85[_0x8807('0x27')],qs[_0x8807('0x2c')](_0x536406['query'][_0x8807('0x2c')]));_0x599c60[_0x8807('0x2a')]=_0x599c60[_0x8807('0x2a')][_0x8807('0x2d')]?_0x599c60[_0x8807('0x2a')]:_0x3c3e85['model'];if(!_0x536406['query'][_0x8807('0x2e')](_0x8807('0x2f'))){_0x599c60[_0x8807('0x30')]=qs['limit'](_0x536406[_0x8807('0x28')]['limit']);_0x599c60[_0x8807('0x1c')]=qs[_0x8807('0x1c')](_0x536406[_0x8807('0x28')][_0x8807('0x1c')]);}_0x599c60[_0x8807('0x31')]=qs['sort'](_0x536406[_0x8807('0x28')][_0x8807('0x32')]);_0x599c60[_0x8807('0x33')]=qs[_0x8807('0x34')](_['pick'](_0x536406[_0x8807('0x28')],_0x3c3e85[_0x8807('0x34')]));if(_0x536406[_0x8807('0x28')][_0x8807('0x35')]){_0x599c60[_0x8807('0x33')]=_[_0x8807('0x36')](_0x599c60[_0x8807('0x33')],{'$or':_[_0x8807('0x37')](_0x59b9b2,function(_0xd0ca7a){if(_0xd0ca7a[_0x8807('0x38')][_0x8807('0x39')]!==_0x8807('0x3a')){var _0x31be7d={};_0x31be7d[_0xd0ca7a[_0x8807('0x3b')]]={'$like':'%'+_0x536406[_0x8807('0x28')][_0x8807('0x35')]+'%'};return _0x31be7d;}})});}_0x599c60=_[_0x8807('0x36')]({},_0x599c60,_0x536406[_0x8807('0x3c')]);var _0x1b5e84={'where':_0x599c60[_0x8807('0x33')]};return db[_0x8807('0x25')]['count'](_0x1b5e84)['then'](function(_0x18019b){_0x1ba170[_0x8807('0x1b')]=_0x18019b;if(_0x536406['query'][_0x8807('0x3d')]){_0x599c60['include']=[{'all':!![]}];}return db['MailQueueReport'][_0x8807('0x3e')](_0x599c60);})[_0x8807('0x20')](function(_0x14bdc7){_0x1ba170[_0x8807('0x3f')]=_0x14bdc7;return _0x1ba170;})[_0x8807('0x20')](respondWithFilteredResult(_0x405619,_0x599c60))['catch'](handleError(_0x405619,null));};exports['show']=function(_0x5e107e,_0x5b3e8d){var _0x16b85b={'raw':!![],'where':{'id':_0x5e107e[_0x8807('0x40')]['id']}},_0x18e0ec={};_0x18e0ec[_0x8807('0x27')]=_['keys'](db[_0x8807('0x25')][_0x8807('0x26')]);_0x18e0ec['query']=_[_0x8807('0x29')](_0x5e107e[_0x8807('0x28')]);_0x18e0ec['filters']=_[_0x8807('0x2b')](_0x18e0ec['model'],_0x18e0ec[_0x8807('0x28')]);_0x16b85b[_0x8807('0x2a')]=_[_0x8807('0x2b')](_0x18e0ec[_0x8807('0x27')],qs['fields'](_0x5e107e['query'][_0x8807('0x2c')]));_0x16b85b[_0x8807('0x2a')]=_0x16b85b[_0x8807('0x2a')][_0x8807('0x2d')]?_0x16b85b[_0x8807('0x2a')]:_0x18e0ec['model'];if(_0x5e107e[_0x8807('0x28')][_0x8807('0x3d')]){_0x16b85b[_0x8807('0x41')]=[{'all':!![]}];}_0x16b85b=_[_0x8807('0x36')]({},_0x16b85b,_0x5e107e[_0x8807('0x3c')]);return db[_0x8807('0x25')][_0x8807('0x42')](_0x16b85b)[_0x8807('0x20')](handleEntityNotFound(_0x5b3e8d,null))[_0x8807('0x20')](respondWithResult(_0x5b3e8d,null))[_0x8807('0x43')](handleError(_0x5b3e8d,null));};exports[_0x8807('0x44')]=function(_0x4042d3,_0x4027ad){return db[_0x8807('0x25')]['create'](_0x4042d3['body'],{})[_0x8807('0x20')](respondWithResult(_0x4027ad,0xc9))[_0x8807('0x43')](handleError(_0x4027ad,null));};exports['update']=function(_0x370afa,_0x49052f){if(_0x370afa['body']['id']){delete _0x370afa[_0x8807('0x45')]['id'];}return db[_0x8807('0x25')][_0x8807('0x42')]({'where':{'id':_0x370afa[_0x8807('0x40')]['id']}})[_0x8807('0x20')](handleEntityNotFound(_0x49052f,null))['then'](saveUpdates(_0x370afa['body'],null))[_0x8807('0x20')](respondWithResult(_0x49052f,null))['catch'](handleError(_0x49052f,null));};exports[_0x8807('0x21')]=function(_0x1350ec,_0x5bf10b){return db[_0x8807('0x25')]['find']({'where':{'id':_0x1350ec[_0x8807('0x40')]['id']}})[_0x8807('0x20')](handleEntityNotFound(_0x5bf10b,null))['then'](removeEntity(_0x5bf10b,null))[_0x8807('0x43')](handleError(_0x5bf10b,null));};exports[_0x8807('0x46')]=function(_0x386723,_0x504730){return db['MailQueueReport']['describe']()[_0x8807('0x20')](respondWithResult(_0x504730,null))[_0x8807('0x43')](handleError(_0x504730,null));};
\ No newline at end of file
+var _0xd146=['fields','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','key','VIRTUAL','field','options','includeAll','include','findAll','catch','params','length','create','body','find','describe','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','mustache','util','sox','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','status','end','json','count','offset','limit','Content-Range','apply','reject','save','update','then','destroy','sendStatus','error','name','send','MailQueueReport','rawAttributes','model','keys','query','filters','intersection','attributes'];(function(_0x23b7f7,_0x453675){var _0x555e34=function(_0x3e1495){while(--_0x3e1495){_0x23b7f7['push'](_0x23b7f7['shift']());}};_0x555e34(++_0x453675);}(_0xd146,0xf2));var _0x6d14=function(_0x5e8109,_0x258c6d){_0x5e8109=_0x5e8109-0x0;var _0x46fe74=_0xd146[_0x5e8109];return _0x46fe74;};'use strict';var pdf=require(_0x6d14('0x0'));var emlformat=require(_0x6d14('0x1'));var rimraf=require(_0x6d14('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x6d14('0x3'));var rp=require(_0x6d14('0x4'));var moment=require(_0x6d14('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x6d14('0x6'));var util=require(_0x6d14('0x7'));var path=require('path');var sox=require(_0x6d14('0x8'));var csv=require('to-csv');var ejs=require(_0x6d14('0x9'));var fs=require('fs');var _=require(_0x6d14('0xa'));var squel=require(_0x6d14('0xb'));var crypto=require(_0x6d14('0xc'));var jsforce=require(_0x6d14('0xd'));var deskjs=require(_0x6d14('0xe'));var toCsv=require('to-csv');var querystring=require(_0x6d14('0xf'));var Papa=require(_0x6d14('0x10'));var Redis=require(_0x6d14('0x11'));var authService=require(_0x6d14('0x12'));var qs=require(_0x6d14('0x13'));var hardwareService=require(_0x6d14('0x14'));var logger=require(_0x6d14('0x15'))(_0x6d14('0x16'));var utils=require(_0x6d14('0x17'));var config=require('../../config/environment');var db=require(_0x6d14('0x18'))['db'];function respondWithStatusCode(_0x541d94,_0x5dad70){_0x5dad70=_0x5dad70||0xcc;return function(_0x2ebae0){if(_0x2ebae0){return _0x541d94['sendStatus'](_0x5dad70);}return _0x541d94[_0x6d14('0x19')](_0x5dad70)[_0x6d14('0x1a')]();};}function respondWithResult(_0x43c028,_0x3c8ebe){_0x3c8ebe=_0x3c8ebe||0xc8;return function(_0x5262ce){if(_0x5262ce){return _0x43c028[_0x6d14('0x19')](_0x3c8ebe)[_0x6d14('0x1b')](_0x5262ce);}};}function respondWithFilteredResult(_0x1a4906,_0x1ba9bc){return function(_0x237cd8){if(_0x237cd8){var _0x4a4ef0=_0x237cd8[_0x6d14('0x1c')],_0x12a07d=_0x1ba9bc[_0x6d14('0x1d')],_0x6bdc17=_0x1ba9bc[_0x6d14('0x1d')]+_0x1ba9bc[_0x6d14('0x1e')],_0x42cd8b;if(_0x6bdc17>=_0x4a4ef0){_0x6bdc17=_0x4a4ef0;_0x42cd8b=0xc8;}else{_0x42cd8b=0xce;}_0x1a4906[_0x6d14('0x19')](_0x42cd8b);return _0x1a4906['set'](_0x6d14('0x1f'),_0x12a07d+'-'+_0x6bdc17+'/'+_0x4a4ef0)[_0x6d14('0x1b')](_0x237cd8);}return null;};}function patchUpdates(_0x2e3bf6){return function(_0x3220da){try{jsonpatch[_0x6d14('0x20')](_0x3220da,_0x2e3bf6,!![]);}catch(_0x3f98e8){return BPromise[_0x6d14('0x21')](_0x3f98e8);}return _0x3220da[_0x6d14('0x22')]();};}function saveUpdates(_0x49b22b,_0x35d792){return function(_0xfaec3b){if(_0xfaec3b){return _0xfaec3b[_0x6d14('0x23')](_0x49b22b)[_0x6d14('0x24')](function(_0x297360){return _0x297360;});}return null;};}function removeEntity(_0x1419c1,_0x249240){return function(_0x3629ee){if(_0x3629ee){return _0x3629ee[_0x6d14('0x25')]()[_0x6d14('0x24')](function(){_0x1419c1['status'](0xcc)[_0x6d14('0x1a')]();});}};}function handleEntityNotFound(_0xad8dcf,_0x146315){return function(_0x2977ab){if(!_0x2977ab){_0xad8dcf[_0x6d14('0x26')](0x194);}return _0x2977ab;};}function handleError(_0x1351f1,_0x5bd6ed){_0x5bd6ed=_0x5bd6ed||0x1f4;return function(_0x164ac3){logger[_0x6d14('0x27')](_0x164ac3['stack']);if(_0x164ac3[_0x6d14('0x28')]){delete _0x164ac3[_0x6d14('0x28')];}_0x1351f1[_0x6d14('0x19')](_0x5bd6ed)[_0x6d14('0x29')](_0x164ac3);};}exports['index']=function(_0x5f07c5,_0x355a61){var _0x9aa9e8={},_0x1633ce={},_0x68754b={'count':0x0,'rows':[]};var _0x56d75c=db[_0x6d14('0x2a')][_0x6d14('0x2b')];_0x1633ce[_0x6d14('0x2c')]=_[_0x6d14('0x2d')](_0x56d75c);_0x1633ce[_0x6d14('0x2e')]=_[_0x6d14('0x2d')](_0x5f07c5[_0x6d14('0x2e')]);_0x1633ce[_0x6d14('0x2f')]=_[_0x6d14('0x30')](_0x1633ce[_0x6d14('0x2c')],_0x1633ce[_0x6d14('0x2e')]);_0x9aa9e8[_0x6d14('0x31')]=_[_0x6d14('0x30')](_0x1633ce[_0x6d14('0x2c')],qs[_0x6d14('0x32')](_0x5f07c5[_0x6d14('0x2e')]['fields']));_0x9aa9e8[_0x6d14('0x31')]=_0x9aa9e8[_0x6d14('0x31')]['length']?_0x9aa9e8[_0x6d14('0x31')]:_0x1633ce[_0x6d14('0x2c')];if(!_0x5f07c5[_0x6d14('0x2e')][_0x6d14('0x33')](_0x6d14('0x34'))){_0x9aa9e8[_0x6d14('0x1e')]=qs[_0x6d14('0x1e')](_0x5f07c5[_0x6d14('0x2e')][_0x6d14('0x1e')]);_0x9aa9e8[_0x6d14('0x1d')]=qs[_0x6d14('0x1d')](_0x5f07c5[_0x6d14('0x2e')][_0x6d14('0x1d')]);}_0x9aa9e8[_0x6d14('0x35')]=qs[_0x6d14('0x36')](_0x5f07c5[_0x6d14('0x2e')][_0x6d14('0x36')]);_0x9aa9e8['where']=qs[_0x6d14('0x2f')](_[_0x6d14('0x37')](_0x5f07c5['query'],_0x1633ce['filters']));if(_0x5f07c5[_0x6d14('0x2e')][_0x6d14('0x38')]){_0x9aa9e8[_0x6d14('0x39')]=_[_0x6d14('0x3a')](_0x9aa9e8[_0x6d14('0x39')],{'$or':_['map'](_0x56d75c,function(_0x10134c){if(_0x10134c['type'][_0x6d14('0x3b')]!==_0x6d14('0x3c')){var _0xde2dd0={};_0xde2dd0[_0x10134c[_0x6d14('0x3d')]]={'$like':'%'+_0x5f07c5[_0x6d14('0x2e')][_0x6d14('0x38')]+'%'};return _0xde2dd0;}})});}_0x9aa9e8=_[_0x6d14('0x3a')]({},_0x9aa9e8,_0x5f07c5[_0x6d14('0x3e')]);var _0x417529={'where':_0x9aa9e8['where']};return db[_0x6d14('0x2a')]['count'](_0x417529)[_0x6d14('0x24')](function(_0x110606){_0x68754b[_0x6d14('0x1c')]=_0x110606;if(_0x5f07c5['query'][_0x6d14('0x3f')]){_0x9aa9e8[_0x6d14('0x40')]=[{'all':!![]}];}return db['MailQueueReport'][_0x6d14('0x41')](_0x9aa9e8);})[_0x6d14('0x24')](function(_0x2ac643){_0x68754b['rows']=_0x2ac643;return _0x68754b;})['then'](respondWithFilteredResult(_0x355a61,_0x9aa9e8))[_0x6d14('0x42')](handleError(_0x355a61,null));};exports['show']=function(_0x35af32,_0x3bd6ee){var _0x2f8d94={'raw':!![],'where':{'id':_0x35af32[_0x6d14('0x43')]['id']}},_0x40f5bc={};_0x40f5bc[_0x6d14('0x2c')]=_['keys'](db[_0x6d14('0x2a')][_0x6d14('0x2b')]);_0x40f5bc[_0x6d14('0x2e')]=_[_0x6d14('0x2d')](_0x35af32[_0x6d14('0x2e')]);_0x40f5bc[_0x6d14('0x2f')]=_[_0x6d14('0x30')](_0x40f5bc[_0x6d14('0x2c')],_0x40f5bc['query']);_0x2f8d94[_0x6d14('0x31')]=_[_0x6d14('0x30')](_0x40f5bc[_0x6d14('0x2c')],qs[_0x6d14('0x32')](_0x35af32['query'][_0x6d14('0x32')]));_0x2f8d94['attributes']=_0x2f8d94[_0x6d14('0x31')][_0x6d14('0x44')]?_0x2f8d94['attributes']:_0x40f5bc[_0x6d14('0x2c')];if(_0x35af32[_0x6d14('0x2e')]['includeAll']){_0x2f8d94[_0x6d14('0x40')]=[{'all':!![]}];}_0x2f8d94=_[_0x6d14('0x3a')]({},_0x2f8d94,_0x35af32[_0x6d14('0x3e')]);return db['MailQueueReport']['find'](_0x2f8d94)[_0x6d14('0x24')](handleEntityNotFound(_0x3bd6ee,null))[_0x6d14('0x24')](respondWithResult(_0x3bd6ee,null))[_0x6d14('0x42')](handleError(_0x3bd6ee,null));};exports['create']=function(_0xf6c444,_0x4878df){return db[_0x6d14('0x2a')][_0x6d14('0x45')](_0xf6c444['body'],{})[_0x6d14('0x24')](respondWithResult(_0x4878df,0xc9))[_0x6d14('0x42')](handleError(_0x4878df,null));};exports[_0x6d14('0x23')]=function(_0x18366e,_0x293ee4){if(_0x18366e['body']['id']){delete _0x18366e['body']['id'];}return db['MailQueueReport']['find']({'where':{'id':_0x18366e['params']['id']}})[_0x6d14('0x24')](handleEntityNotFound(_0x293ee4,null))['then'](saveUpdates(_0x18366e[_0x6d14('0x46')],null))[_0x6d14('0x24')](respondWithResult(_0x293ee4,null))[_0x6d14('0x42')](handleError(_0x293ee4,null));};exports[_0x6d14('0x25')]=function(_0x33e212,_0x4d872d){return db[_0x6d14('0x2a')][_0x6d14('0x47')]({'where':{'id':_0x33e212[_0x6d14('0x43')]['id']}})[_0x6d14('0x24')](handleEntityNotFound(_0x4d872d,null))[_0x6d14('0x24')](removeEntity(_0x4d872d,null))[_0x6d14('0x42')](handleError(_0x4d872d,null));};exports[_0x6d14('0x48')]=function(_0x3e6690,_0xe2cc25){return db['MailQueueReport'][_0x6d14('0x48')]()[_0x6d14('0x24')](respondWithResult(_0xe2cc25,null))[_0x6d14('0x42')](handleError(_0xe2cc25,null));};
\ No newline at end of file
index f7bf90a..5b4bbd8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8769=['report_mail_queue','uniqueid','lodash','util','api','bluebird','request-promise','../../config/environment','./mailQueueReport.attributes','MailQueueReport'];(function(_0x1a0597,_0x99244d){var _0x500976=function(_0x3779b9){while(--_0x3779b9){_0x1a0597['push'](_0x1a0597['shift']());}};_0x500976(++_0x99244d);}(_0x8769,0x110));var _0x9876=function(_0x51020b,_0x38c2c7){_0x51020b=_0x51020b-0x0;var _0x371e47=_0x8769[_0x51020b];return _0x371e47;};'use strict';var _=require(_0x9876('0x0'));var util=require(_0x9876('0x1'));var logger=require('../../config/logger')(_0x9876('0x2'));var moment=require('moment');var BPromise=require(_0x9876('0x3'));var rp=require(_0x9876('0x4'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x9876('0x5'));var attributes=require(_0x9876('0x6'));module['exports']=function(_0x179357,_0x5a4149){return _0x179357['define'](_0x9876('0x7'),attributes,{'tableName':_0x9876('0x8'),'paranoid':![],'indexes':[{'name':_0x9876('0x9'),'fields':[_0x9876('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x0647=['../../config/logger','api','moment','bluebird','request-promise','../../config/environment','./mailQueueReport.attributes','exports','define','uniqueid','lodash'];(function(_0x166742,_0x55520c){var _0xb7814a=function(_0x18feaf){while(--_0x18feaf){_0x166742['push'](_0x166742['shift']());}};_0xb7814a(++_0x55520c);}(_0x0647,0xd0));var _0x7064=function(_0x369151,_0x179f72){_0x369151=_0x369151-0x0;var _0x4292d5=_0x0647[_0x369151];return _0x4292d5;};'use strict';var _=require(_0x7064('0x0'));var util=require('util');var logger=require(_0x7064('0x1'))(_0x7064('0x2'));var moment=require(_0x7064('0x3'));var BPromise=require(_0x7064('0x4'));var rp=require(_0x7064('0x5'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x7064('0x6'));var attributes=require(_0x7064('0x7'));module[_0x7064('0x8')]=function(_0x44b1bb,_0x2b6f9b){return _0x44b1bb[_0x7064('0x9')]('MailQueueReport',attributes,{'tableName':'report_mail_queue','paranoid':![],'indexes':[{'name':_0x7064('0xa'),'fields':[_0x7064('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
index e52c5b5..768def1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x49be=['request','MailQueueReport,\x20%s,\x20%s','request\x20sent','debug','MailQueueReport,\x20%s,\x20%s,\x20%s','error','message','info','result','catch','CreateMailQueueReport','MailQueueReport','create','options','raw','stringify','update','body','where','attributes','limit','then','UpdateMailQueueReport','lodash','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http'];(function(_0x54d4a8,_0x585a59){var _0x3b321b=function(_0x245c6a){while(--_0x245c6a){_0x54d4a8['push'](_0x54d4a8['shift']());}};_0x3b321b(++_0x585a59);}(_0x49be,0x10f));var _0xe49b=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0x49be[_0x2641f9];return _0x585741;};'use strict';var _=require(_0xe49b('0x0'));var util=require('util');var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xe49b('0x1'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xe49b('0x2'))['db'];var utils=require(_0xe49b('0x3'));var logger=require(_0xe49b('0x4'))(_0xe49b('0x5'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xe49b('0x6')][_0xe49b('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x527a6b,_0x562cdc,_0x277c5c){return new BPromise(function(_0x552a30,_0x24affe){return client[_0xe49b('0x8')](_0x527a6b,_0x277c5c)['then'](function(_0x56c5f2){logger['info'](_0xe49b('0x9'),_0x562cdc,_0xe49b('0xa'));logger[_0xe49b('0xb')](_0xe49b('0xc'),_0x562cdc,'request\x20sent',JSON['stringify'](_0x56c5f2));if(_0x56c5f2[_0xe49b('0xd')]){if(_0x56c5f2[_0xe49b('0xd')]['code']===0x1f4){logger['error'](_0xe49b('0x9'),_0x562cdc,_0x56c5f2['error'][_0xe49b('0xe')]);return _0x24affe(_0x56c5f2[_0xe49b('0xd')]['message']);}logger[_0xe49b('0xd')](_0xe49b('0x9'),_0x562cdc,_0x56c5f2[_0xe49b('0xd')]['message']);return _0x552a30(_0x56c5f2[_0xe49b('0xd')][_0xe49b('0xe')]);}else{logger[_0xe49b('0xf')](_0xe49b('0x9'),_0x562cdc,_0xe49b('0xa'));_0x552a30(_0x56c5f2[_0xe49b('0x10')][_0xe49b('0xe')]);}})[_0xe49b('0x11')](function(_0xbba9){logger[_0xe49b('0xd')]('MailQueueReport,\x20%s,\x20%s',_0x562cdc,_0xbba9);_0x24affe(_0xbba9);});});}exports[_0xe49b('0x12')]=function(_0x1fdee8){var _0x143cdd=this;return new Promise(function(_0x53d9c2,_0x43e1ab){return db[_0xe49b('0x13')][_0xe49b('0x14')](_0x1fdee8['body'],{'raw':_0x1fdee8[_0xe49b('0x15')]?_0x1fdee8[_0xe49b('0x15')][_0xe49b('0x16')]===undefined?!![]:![]:!![]})['then'](function(_0x4f82e6){logger[_0xe49b('0xf')](_0xe49b('0x12'),_0x1fdee8);logger[_0xe49b('0xb')](_0xe49b('0x12'),_0x1fdee8,JSON[_0xe49b('0x17')](_0x4f82e6));_0x53d9c2(_0x4f82e6);})['catch'](function(_0x3b5db3){logger[_0xe49b('0xd')](_0xe49b('0x12'),_0x3b5db3[_0xe49b('0xe')],_0x1fdee8);_0x43e1ab(_0x143cdd[_0xe49b('0xd')](0x1f4,_0x3b5db3[_0xe49b('0xe')]));});});};exports['UpdateMailQueueReport']=function(_0x458708){var _0x20b3de=this;return new Promise(function(_0xab1ccd,_0x23f707){return db[_0xe49b('0x13')][_0xe49b('0x18')](_0x458708[_0xe49b('0x19')],{'raw':_0x458708['options']?_0x458708[_0xe49b('0x15')][_0xe49b('0x16')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x458708[_0xe49b('0x15')]?_0x458708[_0xe49b('0x15')][_0xe49b('0x1a')]||null:null,'attributes':_0x458708[_0xe49b('0x15')]?_0x458708[_0xe49b('0x15')][_0xe49b('0x1b')]||null:null,'limit':_0x458708[_0xe49b('0x15')]?_0x458708['options'][_0xe49b('0x1c')]||null:null})[_0xe49b('0x1d')](function(_0x2979dd){logger[_0xe49b('0xf')](_0xe49b('0x1e'),_0x458708);logger[_0xe49b('0xb')](_0xe49b('0x1e'),_0x458708,JSON[_0xe49b('0x17')](_0x2979dd));_0xab1ccd(_0x2979dd);})['catch'](function(_0x222dc7){logger[_0xe49b('0xd')](_0xe49b('0x1e'),_0x222dc7[_0xe49b('0xe')],_0x458708);_0x23f707(_0x20b3de['error'](0x1f4,_0x222dc7[_0xe49b('0xe')]));});});};
\ No newline at end of file
+var _0x3b7e=['catch','CreateMailQueueReport','MailQueueReport','create','body','options','UpdateMailQueueReport','update','raw','where','attributes','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','info','MailQueueReport,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message'];(function(_0x47f23d,_0x286a33){var _0x526f97=function(_0x44ff9c){while(--_0x44ff9c){_0x47f23d['push'](_0x47f23d['shift']());}};_0x526f97(++_0x286a33);}(_0x3b7e,0xd7));var _0xe3b7=function(_0x437b5d,_0x48a06d){_0x437b5d=_0x437b5d-0x0;var _0x21362c=_0x3b7e[_0x437b5d];return _0x21362c;};'use strict';var _=require(_0xe3b7('0x0'));var util=require(_0xe3b7('0x1'));var moment=require(_0xe3b7('0x2'));var BPromise=require(_0xe3b7('0x3'));var rs=require(_0xe3b7('0x4'));var fs=require('fs');var Redis=require(_0xe3b7('0x5'));var db=require(_0xe3b7('0x6'))['db'];var utils=require(_0xe3b7('0x7'));var logger=require(_0xe3b7('0x8'))(_0xe3b7('0x9'));var config=require(_0xe3b7('0xa'));var jayson=require(_0xe3b7('0xb'));var client=jayson['client'][_0xe3b7('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x269775,_0x4e0027,_0x3bb46d){return new BPromise(function(_0x535f07,_0xf32aac){return client[_0xe3b7('0xd')](_0x269775,_0x3bb46d)[_0xe3b7('0xe')](function(_0x1a0b47){logger[_0xe3b7('0xf')](_0xe3b7('0x10'),_0x4e0027,_0xe3b7('0x11'));logger[_0xe3b7('0x12')]('MailQueueReport,\x20%s,\x20%s,\x20%s',_0x4e0027,_0xe3b7('0x11'),JSON[_0xe3b7('0x13')](_0x1a0b47));if(_0x1a0b47[_0xe3b7('0x14')]){if(_0x1a0b47[_0xe3b7('0x14')][_0xe3b7('0x15')]===0x1f4){logger['error'](_0xe3b7('0x10'),_0x4e0027,_0x1a0b47[_0xe3b7('0x14')][_0xe3b7('0x16')]);return _0xf32aac(_0x1a0b47[_0xe3b7('0x14')][_0xe3b7('0x16')]);}logger[_0xe3b7('0x14')](_0xe3b7('0x10'),_0x4e0027,_0x1a0b47[_0xe3b7('0x14')]['message']);return _0x535f07(_0x1a0b47[_0xe3b7('0x14')][_0xe3b7('0x16')]);}else{logger[_0xe3b7('0xf')](_0xe3b7('0x10'),_0x4e0027,'request\x20sent');_0x535f07(_0x1a0b47['result'][_0xe3b7('0x16')]);}})[_0xe3b7('0x17')](function(_0x1a5c69){logger[_0xe3b7('0x14')](_0xe3b7('0x10'),_0x4e0027,_0x1a5c69);_0xf32aac(_0x1a5c69);});});}exports[_0xe3b7('0x18')]=function(_0x282e54){var _0x547d67=this;return new Promise(function(_0x16c566,_0x45e9b8){return db[_0xe3b7('0x19')][_0xe3b7('0x1a')](_0x282e54[_0xe3b7('0x1b')],{'raw':_0x282e54[_0xe3b7('0x1c')]?_0x282e54[_0xe3b7('0x1c')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x194200){logger[_0xe3b7('0xf')](_0xe3b7('0x18'),_0x282e54);logger['debug']('CreateMailQueueReport',_0x282e54,JSON[_0xe3b7('0x13')](_0x194200));_0x16c566(_0x194200);})[_0xe3b7('0x17')](function(_0x2351e0){logger[_0xe3b7('0x14')](_0xe3b7('0x18'),_0x2351e0[_0xe3b7('0x16')],_0x282e54);_0x45e9b8(_0x547d67[_0xe3b7('0x14')](0x1f4,_0x2351e0[_0xe3b7('0x16')]));});});};exports[_0xe3b7('0x1d')]=function(_0x1675c6){var _0x4d9d56=this;return new Promise(function(_0x38c78c,_0x57952d){return db[_0xe3b7('0x19')][_0xe3b7('0x1e')](_0x1675c6[_0xe3b7('0x1b')],{'raw':_0x1675c6[_0xe3b7('0x1c')]?_0x1675c6['options'][_0xe3b7('0x1f')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x1675c6['options']?_0x1675c6[_0xe3b7('0x1c')][_0xe3b7('0x20')]||null:null,'attributes':_0x1675c6['options']?_0x1675c6[_0xe3b7('0x1c')][_0xe3b7('0x21')]||null:null,'limit':_0x1675c6[_0xe3b7('0x1c')]?_0x1675c6[_0xe3b7('0x1c')]['limit']||null:null})[_0xe3b7('0xe')](function(_0xdd5964){logger['info'](_0xe3b7('0x1d'),_0x1675c6);logger['debug']('UpdateMailQueueReport',_0x1675c6,JSON[_0xe3b7('0x13')](_0xdd5964));_0x38c78c(_0xdd5964);})[_0xe3b7('0x17')](function(_0x2f11a4){logger[_0xe3b7('0x14')](_0xe3b7('0x1d'),_0x2f11a4[_0xe3b7('0x16')],_0x1675c6);_0x57952d(_0x4d9d56[_0xe3b7('0x14')](0x1f4,_0x2f11a4[_0xe3b7('0x16')]));});});};
\ No newline at end of file
index f9f05e4..84393a9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa6bb=['path','connect-timeout','express','Router','../../config/environment','exports','util'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xa6bb,0x12c));var _0xba6b=function(_0x9a92c7,_0x53bb13){_0x9a92c7=_0x9a92c7-0x0;var _0x593fdc=_0xa6bb[_0x9a92c7];return _0x593fdc;};'use strict';var multer=require('multer');var util=require(_0xba6b('0x0'));var path=require(_0xba6b('0x1'));var timeout=require(_0xba6b('0x2'));var express=require(_0xba6b('0x3'));var router=express[_0xba6b('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xba6b('0x5'));module[_0xba6b('0x6')]=router;
\ No newline at end of file
+var _0x81c6=['Router','../../components/auth/service','../../components/interaction/service','exports','util'];(function(_0x4c8a8f,_0x997ef){var _0x404500=function(_0x1c6072){while(--_0x1c6072){_0x4c8a8f['push'](_0x4c8a8f['shift']());}};_0x404500(++_0x997ef);}(_0x81c6,0x1d5));var _0x681c=function(_0xb71c35,_0x129343){_0xb71c35=_0xb71c35-0x0;var _0x39224f=_0x81c6[_0xb71c35];return _0x39224f;};'use strict';var multer=require('multer');var util=require(_0x681c('0x0'));var path=require('path');var timeout=require('connect-timeout');var express=require('express');var router=express[_0x681c('0x1')]();var auth=require(_0x681c('0x2'));var interaction=require(_0x681c('0x3'));var config=require('../../config/environment');module[_0x681c('0x4')]=router;
\ No newline at end of file
index 96ce8df..6d7e65f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xda3f=['BOOLEAN','INBOX','exports','STRING','username','INTEGER'];(function(_0x29b2d0,_0x73bf4b){var _0x4af937=function(_0x1b19c9){while(--_0x1b19c9){_0x29b2d0['push'](_0x29b2d0['shift']());}};_0x4af937(++_0x73bf4b);}(_0xda3f,0xec));var _0xfda3=function(_0xb6daf8,_0xa31562){_0xb6daf8=_0xb6daf8-0x0;var _0x11fff9=_0xda3f[_0xb6daf8];return _0x11fff9;};'use strict';var Sequelize=require('sequelize');module[_0xfda3('0x0')]={'description':{'type':Sequelize[_0xfda3('0x1')]},'host':{'type':Sequelize['STRING']},'authentication':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'user':{'type':Sequelize['STRING'],'unique':_0xfda3('0x2')},'password':{'type':Sequelize['STRING']},'port':{'type':Sequelize[_0xfda3('0x3')]},'tls':{'type':Sequelize[_0xfda3('0x4')],'defaultValue':!![]},'mailbox':{'type':Sequelize['STRING'],'defaultValue':_0xfda3('0x5')},'connTimeout':{'type':Sequelize[_0xfda3('0x3')],'defaultValue':0xa},'authTimeout':{'type':Sequelize['INTEGER'],'defaultValue':0x5},'service':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xe28e=['INBOX','sequelize','exports','STRING','BOOLEAN','username','INTEGER'];(function(_0x1489ef,_0x275d93){var _0x20e0e6=function(_0x26c449){while(--_0x26c449){_0x1489ef['push'](_0x1489ef['shift']());}};_0x20e0e6(++_0x275d93);}(_0xe28e,0x1ba));var _0xee28=function(_0x465b71,_0x6f65fb){_0x465b71=_0x465b71-0x0;var _0x17cd09=_0xe28e[_0x465b71];return _0x17cd09;};'use strict';var Sequelize=require(_0xee28('0x0'));module[_0xee28('0x1')]={'description':{'type':Sequelize[_0xee28('0x2')]},'host':{'type':Sequelize[_0xee28('0x2')]},'authentication':{'type':Sequelize[_0xee28('0x3')],'defaultValue':!![]},'user':{'type':Sequelize[_0xee28('0x2')],'unique':_0xee28('0x4')},'password':{'type':Sequelize[_0xee28('0x2')]},'port':{'type':Sequelize[_0xee28('0x5')]},'tls':{'type':Sequelize[_0xee28('0x3')],'defaultValue':!![]},'mailbox':{'type':Sequelize[_0xee28('0x2')],'defaultValue':_0xee28('0x6')},'connTimeout':{'type':Sequelize[_0xee28('0x5')],'defaultValue':0xa},'authTimeout':{'type':Sequelize['INTEGER'],'defaultValue':0x5},'service':{'type':Sequelize[_0xee28('0x2')]}};
\ No newline at end of file
index ac9699f..f84e5b1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe295=['../../config/logger','api','moment','bluebird','request-promise','path','../../config/environment','exports','define','MailServerIn','mail_servers_in','util'];(function(_0x1d87e9,_0x4f240d){var _0x13037b=function(_0x31319e){while(--_0x31319e){_0x1d87e9['push'](_0x1d87e9['shift']());}};_0x13037b(++_0x4f240d);}(_0xe295,0x143));var _0x5e29=function(_0x3b29d5,_0x12faa2){_0x3b29d5=_0x3b29d5-0x0;var _0x20b96d=_0xe295[_0x3b29d5];return _0x20b96d;};'use strict';var _=require('lodash');var util=require(_0x5e29('0x0'));var logger=require(_0x5e29('0x1'))(_0x5e29('0x2'));var moment=require(_0x5e29('0x3'));var BPromise=require(_0x5e29('0x4'));var rp=require(_0x5e29('0x5'));var fs=require('fs');var path=require(_0x5e29('0x6'));var rimraf=require('rimraf');var config=require(_0x5e29('0x7'));var attributes=require('./mailServerIn.attributes');module[_0x5e29('0x8')]=function(_0x5751a0,_0x3567ca){return _0x5751a0[_0x5e29('0x9')](_0x5e29('0xa'),attributes,{'tableName':_0x5e29('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xf730=['bluebird','request-promise','rimraf','../../config/environment','exports','define','MailServerIn','lodash','util','../../config/logger'];(function(_0x13541e,_0x3a44fb){var _0x2ebb9a=function(_0x1b43d6){while(--_0x1b43d6){_0x13541e['push'](_0x13541e['shift']());}};_0x2ebb9a(++_0x3a44fb);}(_0xf730,0xbb));var _0x0f73=function(_0x4cefbc,_0x3ffa6c){_0x4cefbc=_0x4cefbc-0x0;var _0x423c86=_0xf730[_0x4cefbc];return _0x423c86;};'use strict';var _=require(_0x0f73('0x0'));var util=require(_0x0f73('0x1'));var logger=require(_0x0f73('0x2'))('api');var moment=require('moment');var BPromise=require(_0x0f73('0x3'));var rp=require(_0x0f73('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x0f73('0x5'));var config=require(_0x0f73('0x6'));var attributes=require('./mailServerIn.attributes');module[_0x0f73('0x7')]=function(_0x376d11,_0x525d7d){return _0x376d11[_0x0f73('0x8')](_0x0f73('0x9'),attributes,{'tableName':'mail_servers_in','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 4b62558..ec6bc43 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6028=['GetMailServerIn','findAll','options','raw','where','map','include','model','attributes','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','rpc','jayson/promise','client','http','request','then','request\x20sent','debug','MailServerIn,\x20%s,\x20%s,\x20%s','stringify','error','MailServerIn,\x20%s,\x20%s','message','info','result','catch'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0x6028,0x101));var _0x8602=function(_0x36daac,_0x4243a1){_0x36daac=_0x36daac-0x0;var _0xdbe83a=_0x6028[_0x36daac];return _0xdbe83a;};'use strict';var _=require(_0x8602('0x0'));var util=require(_0x8602('0x1'));var moment=require(_0x8602('0x2'));var BPromise=require('bluebird');var rs=require(_0x8602('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x8602('0x4'))['db'];var utils=require(_0x8602('0x5'));var logger=require('../../config/logger')(_0x8602('0x6'));var config=require('../../config/environment');var jayson=require(_0x8602('0x7'));var client=jayson[_0x8602('0x8')][_0x8602('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x383b64,_0x4457d0,_0x1c50c5){return new BPromise(function(_0x13575f,_0x5781c9){return client[_0x8602('0xa')](_0x383b64,_0x1c50c5)[_0x8602('0xb')](function(_0x2a37a6){logger['info']('MailServerIn,\x20%s,\x20%s',_0x4457d0,_0x8602('0xc'));logger[_0x8602('0xd')](_0x8602('0xe'),_0x4457d0,_0x8602('0xc'),JSON[_0x8602('0xf')](_0x2a37a6));if(_0x2a37a6[_0x8602('0x10')]){if(_0x2a37a6[_0x8602('0x10')]['code']===0x1f4){logger[_0x8602('0x10')](_0x8602('0x11'),_0x4457d0,_0x2a37a6[_0x8602('0x10')]['message']);return _0x5781c9(_0x2a37a6['error'][_0x8602('0x12')]);}logger[_0x8602('0x10')](_0x8602('0x11'),_0x4457d0,_0x2a37a6[_0x8602('0x10')][_0x8602('0x12')]);return _0x13575f(_0x2a37a6[_0x8602('0x10')][_0x8602('0x12')]);}else{logger[_0x8602('0x13')](_0x8602('0x11'),_0x4457d0,_0x8602('0xc'));_0x13575f(_0x2a37a6[_0x8602('0x14')][_0x8602('0x12')]);}})[_0x8602('0x15')](function(_0x532294){logger[_0x8602('0x10')](_0x8602('0x11'),_0x4457d0,_0x532294);_0x5781c9(_0x532294);});});}exports[_0x8602('0x16')]=function(_0x37b7d0){var _0x59c783=this;return new Promise(function(_0x2d0fa7,_0x1bf856){return db['MailServerIn'][_0x8602('0x17')]({'raw':_0x37b7d0[_0x8602('0x18')]?_0x37b7d0[_0x8602('0x18')][_0x8602('0x19')]===undefined?!![]:![]:!![],'where':_0x37b7d0[_0x8602('0x18')]?_0x37b7d0[_0x8602('0x18')][_0x8602('0x1a')]||null:null,'attributes':_0x37b7d0[_0x8602('0x18')]?_0x37b7d0[_0x8602('0x18')]['attributes']||null:null,'limit':_0x37b7d0[_0x8602('0x18')]?_0x37b7d0[_0x8602('0x18')]['limit']||null:null,'include':_0x37b7d0['options']?_0x37b7d0[_0x8602('0x18')]['include']?_[_0x8602('0x1b')](_0x37b7d0[_0x8602('0x18')][_0x8602('0x1c')],function(_0x41874d){return{'model':db[_0x41874d[_0x8602('0x1d')]],'as':_0x41874d['as'],'attributes':_0x41874d['attributes'],'include':_0x41874d['include']?_['map'](_0x41874d['include'],function(_0x869074){return{'model':db[_0x869074['model']],'as':_0x869074['as'],'attributes':_0x869074[_0x8602('0x1e')],'include':_0x869074[_0x8602('0x1c')]?_['map'](_0x869074['include'],function(_0x4cf8f7){return{'model':db[_0x4cf8f7['model']],'as':_0x4cf8f7['as'],'attributes':_0x4cf8f7[_0x8602('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x8602('0xb')](function(_0x2a9777){logger[_0x8602('0x13')]('GetMailServerIn',_0x37b7d0);logger[_0x8602('0xd')](_0x8602('0x16'),_0x37b7d0,JSON[_0x8602('0xf')](_0x2a9777));_0x2d0fa7(_0x2a9777);})['catch'](function(_0x341f80){logger[_0x8602('0x10')](_0x8602('0x16'),_0x341f80['message'],_0x37b7d0);_0x1bf856(_0x59c783['error'](0x1f4,_0x341f80['message']));});});};
\ No newline at end of file
+var _0xde25=['options','attributes','limit','include','map','model','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','request','then','info','MailServerIn,\x20%s,\x20%s','request\x20sent','debug','error','code','message','result','catch','GetMailServerIn','MailServerIn','findAll'];(function(_0x5515d1,_0x40adf6){var _0x1c4c55=function(_0x13dec3){while(--_0x13dec3){_0x5515d1['push'](_0x5515d1['shift']());}};_0x1c4c55(++_0x40adf6);}(_0xde25,0x132));var _0x5de2=function(_0x335d99,_0x26aef3){_0x335d99=_0x335d99-0x0;var _0x143bac=_0xde25[_0x335d99];return _0x143bac;};'use strict';var _=require(_0x5de2('0x0'));var util=require(_0x5de2('0x1'));var moment=require(_0x5de2('0x2'));var BPromise=require(_0x5de2('0x3'));var rs=require(_0x5de2('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x5de2('0x5'))['db'];var utils=require(_0x5de2('0x6'));var logger=require(_0x5de2('0x7'))('rpc');var config=require(_0x5de2('0x8'));var jayson=require(_0x5de2('0x9'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x36a0fa,_0x19f9a1,_0xc58562){return new BPromise(function(_0x129a57,_0xe1a380){return client[_0x5de2('0xa')](_0x36a0fa,_0xc58562)[_0x5de2('0xb')](function(_0x4cf296){logger[_0x5de2('0xc')](_0x5de2('0xd'),_0x19f9a1,_0x5de2('0xe'));logger[_0x5de2('0xf')]('MailServerIn,\x20%s,\x20%s,\x20%s',_0x19f9a1,'request\x20sent',JSON['stringify'](_0x4cf296));if(_0x4cf296[_0x5de2('0x10')]){if(_0x4cf296['error'][_0x5de2('0x11')]===0x1f4){logger['error'](_0x5de2('0xd'),_0x19f9a1,_0x4cf296[_0x5de2('0x10')][_0x5de2('0x12')]);return _0xe1a380(_0x4cf296[_0x5de2('0x10')]['message']);}logger[_0x5de2('0x10')](_0x5de2('0xd'),_0x19f9a1,_0x4cf296[_0x5de2('0x10')]['message']);return _0x129a57(_0x4cf296[_0x5de2('0x10')]['message']);}else{logger[_0x5de2('0xc')]('MailServerIn,\x20%s,\x20%s',_0x19f9a1,_0x5de2('0xe'));_0x129a57(_0x4cf296[_0x5de2('0x13')][_0x5de2('0x12')]);}})[_0x5de2('0x14')](function(_0xd330f0){logger[_0x5de2('0x10')](_0x5de2('0xd'),_0x19f9a1,_0xd330f0);_0xe1a380(_0xd330f0);});});}exports[_0x5de2('0x15')]=function(_0x16e6ca){var _0xc50a3=this;return new Promise(function(_0x5eb8d8,_0x1639d0){return db[_0x5de2('0x16')][_0x5de2('0x17')]({'raw':_0x16e6ca[_0x5de2('0x18')]?_0x16e6ca['options']['raw']===undefined?!![]:![]:!![],'where':_0x16e6ca[_0x5de2('0x18')]?_0x16e6ca[_0x5de2('0x18')]['where']||null:null,'attributes':_0x16e6ca['options']?_0x16e6ca[_0x5de2('0x18')][_0x5de2('0x19')]||null:null,'limit':_0x16e6ca['options']?_0x16e6ca[_0x5de2('0x18')][_0x5de2('0x1a')]||null:null,'include':_0x16e6ca['options']?_0x16e6ca[_0x5de2('0x18')][_0x5de2('0x1b')]?_[_0x5de2('0x1c')](_0x16e6ca[_0x5de2('0x18')]['include'],function(_0x58410c){return{'model':db[_0x58410c[_0x5de2('0x1d')]],'as':_0x58410c['as'],'attributes':_0x58410c[_0x5de2('0x19')],'include':_0x58410c[_0x5de2('0x1b')]?_[_0x5de2('0x1c')](_0x58410c[_0x5de2('0x1b')],function(_0xe2456f){return{'model':db[_0xe2456f[_0x5de2('0x1d')]],'as':_0xe2456f['as'],'attributes':_0xe2456f[_0x5de2('0x19')],'include':_0xe2456f[_0x5de2('0x1b')]?_[_0x5de2('0x1c')](_0xe2456f[_0x5de2('0x1b')],function(_0x1d77f9){return{'model':db[_0x1d77f9[_0x5de2('0x1d')]],'as':_0x1d77f9['as'],'attributes':_0x1d77f9[_0x5de2('0x19')]};}):[]};}):[]};}):[]:[]})[_0x5de2('0xb')](function(_0x271d15){logger[_0x5de2('0xc')](_0x5de2('0x15'),_0x16e6ca);logger['debug'](_0x5de2('0x15'),_0x16e6ca,JSON['stringify'](_0x271d15));_0x5eb8d8(_0x271d15);})[_0x5de2('0x14')](function(_0xa425ad){logger['error']('GetMailServerIn',_0xa425ad[_0x5de2('0x12')],_0x16e6ca);_0x1639d0(_0xc50a3['error'](0x1f4,_0xa425ad[_0x5de2('0x12')]));});});};
\ No newline at end of file
index 704674e..cca571a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa286=['./mailServerOut.controller','isAuthenticated','get','/:id','show','post','put','update','delete','destroy','exports','Router','../../components/auth/service','../../config/environment'];(function(_0xd1dd07,_0x569cd5){var _0x534b73=function(_0x34945a){while(--_0x34945a){_0xd1dd07['push'](_0xd1dd07['shift']());}};_0x534b73(++_0x569cd5);}(_0xa286,0x1a1));var _0x6a28=function(_0x57add2,_0x4f2b7d){_0x57add2=_0x57add2-0x0;var _0x4e3670=_0xa286[_0x57add2];return _0x4e3670;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var timeout=require('connect-timeout');var express=require('express');var router=express[_0x6a28('0x0')]();var auth=require(_0x6a28('0x1'));var interaction=require('../../components/interaction/service');var config=require(_0x6a28('0x2'));var controller=require(_0x6a28('0x3'));router['get']('/',auth[_0x6a28('0x4')](),controller['index']);router[_0x6a28('0x5')](_0x6a28('0x6'),auth[_0x6a28('0x4')](),controller[_0x6a28('0x7')]);router[_0x6a28('0x8')]('/',auth[_0x6a28('0x4')](),controller['create']);router[_0x6a28('0x9')](_0x6a28('0x6'),auth[_0x6a28('0x4')](),controller[_0x6a28('0xa')]);router[_0x6a28('0xb')](_0x6a28('0x6'),auth[_0x6a28('0x4')](),controller[_0x6a28('0xc')]);module[_0x6a28('0xd')]=router;
\ No newline at end of file
+var _0x30c0=['/:id','isAuthenticated','post','create','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailServerOut.controller','get','index'];(function(_0x465a0c,_0x19d4d5){var _0x1e202e=function(_0x27bd8a){while(--_0x27bd8a){_0x465a0c['push'](_0x465a0c['shift']());}};_0x1e202e(++_0x19d4d5);}(_0x30c0,0x14a));var _0x030c=function(_0x3406ce,_0x17948b){_0x3406ce=_0x3406ce-0x0;var _0x6b38=_0x30c0[_0x3406ce];return _0x6b38;};'use strict';var multer=require(_0x030c('0x0'));var util=require(_0x030c('0x1'));var path=require(_0x030c('0x2'));var timeout=require(_0x030c('0x3'));var express=require(_0x030c('0x4'));var router=express[_0x030c('0x5')]();var auth=require(_0x030c('0x6'));var interaction=require(_0x030c('0x7'));var config=require(_0x030c('0x8'));var controller=require(_0x030c('0x9'));router[_0x030c('0xa')]('/',auth['isAuthenticated'](),controller[_0x030c('0xb')]);router['get'](_0x030c('0xc'),auth[_0x030c('0xd')](),controller['show']);router[_0x030c('0xe')]('/',auth[_0x030c('0xd')](),controller[_0x030c('0xf')]);router['put'](_0x030c('0xc'),auth['isAuthenticated'](),controller['update']);router['delete'](_0x030c('0xc'),auth['isAuthenticated'](),controller[_0x030c('0x10')]);module[_0x030c('0x11')]=router;
\ No newline at end of file
index 39fd51a..0bf66f1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7314=['BOOLEAN','sequelize','exports','STRING','INTEGER'];(function(_0x11a422,_0x5907a5){var _0x547177=function(_0x55ec90){while(--_0x55ec90){_0x11a422['push'](_0x11a422['shift']());}};_0x547177(++_0x5907a5);}(_0x7314,0x1d7));var _0x4731=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7314[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0x4731('0x0'));module[_0x4731('0x1')]={'description':{'type':Sequelize[_0x4731('0x2')]},'host':{'type':Sequelize['STRING']},'user':{'type':Sequelize[_0x4731('0x2')]},'pass':{'type':Sequelize[_0x4731('0x2')]},'port':{'type':Sequelize[_0x4731('0x3')]},'secure':{'type':Sequelize[_0x4731('0x4')],'defaultValue':![]},'service':{'type':Sequelize['STRING']},'authentication':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]}};
\ No newline at end of file
+var _0x64de=['exports','STRING','INTEGER','BOOLEAN'];(function(_0x363ef8,_0x4ecb1a){var _0x148822=function(_0x232634){while(--_0x232634){_0x363ef8['push'](_0x363ef8['shift']());}};_0x148822(++_0x4ecb1a);}(_0x64de,0x90));var _0xe64d=function(_0xe30494,_0x5940ff){_0xe30494=_0xe30494-0x0;var _0x8e9615=_0x64de[_0xe30494];return _0x8e9615;};'use strict';var Sequelize=require('sequelize');module[_0xe64d('0x0')]={'description':{'type':Sequelize['STRING']},'host':{'type':Sequelize[_0xe64d('0x1')]},'user':{'type':Sequelize[_0xe64d('0x1')]},'pass':{'type':Sequelize[_0xe64d('0x1')]},'port':{'type':Sequelize[_0xe64d('0x2')]},'secure':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'service':{'type':Sequelize['STRING']},'authentication':{'type':Sequelize[_0xe64d('0x3')],'defaultValue':!![]}};
\ No newline at end of file
index a345604..4eacd4a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x885d=['destroy','error','stack','name','send','index','MailServerOut','rawAttributes','model','keys','query','attributes','intersection','fields','length','hasOwnProperty','nolimit','sort','where','filters','pick','map','type','key','field','filter','merge','include','findAll','catch','show','includeAll','options','find','create','body','params','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','apply','update','then'];(function(_0x35e90c,_0x584afe){var _0x407eb2=function(_0xcc0e3b){while(--_0xcc0e3b){_0x35e90c['push'](_0x35e90c['shift']());}};_0x407eb2(++_0x584afe);}(_0x885d,0xad));var _0xd885=function(_0x1bb6aa,_0x40fe82){_0x1bb6aa=_0x1bb6aa-0x0;var _0x2ef28e=_0x885d[_0x1bb6aa];return _0x2ef28e;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xd885('0x0'));var rimraf=require('rimraf');var zipdir=require(_0xd885('0x1'));var jsonpatch=require(_0xd885('0x2'));var rp=require('request-promise');var moment=require(_0xd885('0x3'));var BPromise=require(_0xd885('0x4'));var Mustache=require(_0xd885('0x5'));var util=require(_0xd885('0x6'));var path=require(_0xd885('0x7'));var sox=require('sox');var csv=require(_0xd885('0x8'));var ejs=require(_0xd885('0x9'));var fs=require('fs');var _=require(_0xd885('0xa'));var squel=require(_0xd885('0xb'));var crypto=require(_0xd885('0xc'));var jsforce=require(_0xd885('0xd'));var deskjs=require('desk.js');var toCsv=require(_0xd885('0x8'));var querystring=require(_0xd885('0xe'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xd885('0xf'));var qs=require(_0xd885('0x10'));var hardwareService=require(_0xd885('0x11'));var logger=require('../../config/logger')(_0xd885('0x12'));var utils=require('../../config/utils');var config=require(_0xd885('0x13'));var db=require(_0xd885('0x14'))['db'];function respondWithStatusCode(_0x127791,_0x357389){_0x357389=_0x357389||0xcc;return function(_0x4c7616){if(_0x4c7616){return _0x127791[_0xd885('0x15')](_0x357389);}return _0x127791[_0xd885('0x16')](_0x357389)[_0xd885('0x17')]();};}function respondWithResult(_0x3caed7,_0x9739ee){_0x9739ee=_0x9739ee||0xc8;return function(_0x1619ac){if(_0x1619ac){return _0x3caed7[_0xd885('0x16')](_0x9739ee)[_0xd885('0x18')](_0x1619ac);}};}function respondWithFilteredResult(_0x4a71c9,_0x59679a){return function(_0x1d6021){if(_0x1d6021){var _0x54d6da=_0x1d6021[_0xd885('0x19')],_0x1ffa23=_0x59679a[_0xd885('0x1a')],_0x29fc1f=_0x59679a[_0xd885('0x1a')]+_0x59679a[_0xd885('0x1b')],_0x27da6;if(_0x29fc1f>=_0x54d6da){_0x29fc1f=_0x54d6da;_0x27da6=0xc8;}else{_0x27da6=0xce;}_0x4a71c9[_0xd885('0x16')](_0x27da6);return _0x4a71c9['set']('Content-Range',_0x1ffa23+'-'+_0x29fc1f+'/'+_0x54d6da)[_0xd885('0x18')](_0x1d6021);}return null;};}function patchUpdates(_0xdd719e){return function(_0x3571f8){try{jsonpatch[_0xd885('0x1c')](_0x3571f8,_0xdd719e,!![]);}catch(_0x53e76d){return BPromise['reject'](_0x53e76d);}return _0x3571f8['save']();};}function saveUpdates(_0x817bb3,_0x50fbb6){return function(_0x1d9bd7){if(_0x1d9bd7){return _0x1d9bd7[_0xd885('0x1d')](_0x817bb3)[_0xd885('0x1e')](function(_0x293713){return _0x293713;});}return null;};}function removeEntity(_0x159f5a,_0x34f7de){return function(_0xe1e31a){if(_0xe1e31a){return _0xe1e31a[_0xd885('0x1f')]()['then'](function(){_0x159f5a['status'](0xcc)[_0xd885('0x17')]();});}};}function handleEntityNotFound(_0x425d8a,_0x356f30){return function(_0x411da4){if(!_0x411da4){_0x425d8a[_0xd885('0x15')](0x194);}return _0x411da4;};}function handleError(_0x5794e5,_0x4de470){_0x4de470=_0x4de470||0x1f4;return function(_0x5d198d){logger[_0xd885('0x20')](_0x5d198d[_0xd885('0x21')]);if(_0x5d198d[_0xd885('0x22')]){delete _0x5d198d['name'];}_0x5794e5['status'](_0x4de470)[_0xd885('0x23')](_0x5d198d);};}exports[_0xd885('0x24')]=function(_0x3589ad,_0x22754e){var _0x103170={},_0x3e0dcb={},_0x44c45b={'count':0x0,'rows':[]};var _0x2134da=db[_0xd885('0x25')][_0xd885('0x26')];_0x3e0dcb[_0xd885('0x27')]=_[_0xd885('0x28')](_0x2134da);_0x3e0dcb[_0xd885('0x29')]=_[_0xd885('0x28')](_0x3589ad[_0xd885('0x29')]);_0x3e0dcb['filters']=_['intersection'](_0x3e0dcb['model'],_0x3e0dcb[_0xd885('0x29')]);_0x103170[_0xd885('0x2a')]=_[_0xd885('0x2b')](_0x3e0dcb[_0xd885('0x27')],qs[_0xd885('0x2c')](_0x3589ad[_0xd885('0x29')][_0xd885('0x2c')]));_0x103170[_0xd885('0x2a')]=_0x103170['attributes'][_0xd885('0x2d')]?_0x103170[_0xd885('0x2a')]:_0x3e0dcb[_0xd885('0x27')];if(!_0x3589ad['query'][_0xd885('0x2e')](_0xd885('0x2f'))){_0x103170[_0xd885('0x1b')]=qs[_0xd885('0x1b')](_0x3589ad['query'][_0xd885('0x1b')]);_0x103170[_0xd885('0x1a')]=qs[_0xd885('0x1a')](_0x3589ad[_0xd885('0x29')][_0xd885('0x1a')]);}_0x103170['order']=qs[_0xd885('0x30')](_0x3589ad['query'][_0xd885('0x30')]);_0x103170[_0xd885('0x31')]=qs[_0xd885('0x32')](_[_0xd885('0x33')](_0x3589ad[_0xd885('0x29')],_0x3e0dcb[_0xd885('0x32')]));if(_0x3589ad['query']['filter']){_0x103170['where']=_['merge'](_0x103170[_0xd885('0x31')],{'$or':_[_0xd885('0x34')](_0x2134da,function(_0x1f503f){if(_0x1f503f[_0xd885('0x35')][_0xd885('0x36')]!=='VIRTUAL'){var _0x380e82={};_0x380e82[_0x1f503f[_0xd885('0x37')]]={'$like':'%'+_0x3589ad['query'][_0xd885('0x38')]+'%'};return _0x380e82;}})});}_0x103170=_[_0xd885('0x39')]({},_0x103170,_0x3589ad['options']);var _0x50cf84={'where':_0x103170[_0xd885('0x31')]};return db['MailServerOut'][_0xd885('0x19')](_0x50cf84)[_0xd885('0x1e')](function(_0x335e3a){_0x44c45b[_0xd885('0x19')]=_0x335e3a;if(_0x3589ad[_0xd885('0x29')]['includeAll']){_0x103170[_0xd885('0x3a')]=[{'all':!![]}];}return db[_0xd885('0x25')][_0xd885('0x3b')](_0x103170);})[_0xd885('0x1e')](function(_0x145b96){_0x44c45b['rows']=_0x145b96;return _0x44c45b;})['then'](respondWithFilteredResult(_0x22754e,_0x103170))[_0xd885('0x3c')](handleError(_0x22754e,null));};exports[_0xd885('0x3d')]=function(_0x44a4d6,_0x9a4c5a){var _0x5edde1={'raw':!![],'where':{'id':_0x44a4d6['params']['id']}},_0x6be5fe={};_0x6be5fe['model']=_[_0xd885('0x28')](db[_0xd885('0x25')][_0xd885('0x26')]);_0x6be5fe[_0xd885('0x29')]=_[_0xd885('0x28')](_0x44a4d6['query']);_0x6be5fe[_0xd885('0x32')]=_[_0xd885('0x2b')](_0x6be5fe[_0xd885('0x27')],_0x6be5fe[_0xd885('0x29')]);_0x5edde1[_0xd885('0x2a')]=_[_0xd885('0x2b')](_0x6be5fe[_0xd885('0x27')],qs[_0xd885('0x2c')](_0x44a4d6['query'][_0xd885('0x2c')]));_0x5edde1[_0xd885('0x2a')]=_0x5edde1[_0xd885('0x2a')][_0xd885('0x2d')]?_0x5edde1[_0xd885('0x2a')]:_0x6be5fe[_0xd885('0x27')];if(_0x44a4d6[_0xd885('0x29')][_0xd885('0x3e')]){_0x5edde1[_0xd885('0x3a')]=[{'all':!![]}];}_0x5edde1=_[_0xd885('0x39')]({},_0x5edde1,_0x44a4d6[_0xd885('0x3f')]);return db[_0xd885('0x25')][_0xd885('0x40')](_0x5edde1)['then'](handleEntityNotFound(_0x9a4c5a,null))[_0xd885('0x1e')](respondWithResult(_0x9a4c5a,null))[_0xd885('0x3c')](handleError(_0x9a4c5a,null));};exports['create']=function(_0x283119,_0x344299){return db['MailServerOut'][_0xd885('0x41')](_0x283119[_0xd885('0x42')],{})[_0xd885('0x1e')](respondWithResult(_0x344299,0xc9))['catch'](handleError(_0x344299,null));};exports[_0xd885('0x1d')]=function(_0x1b6cd4,_0x1cd716){if(_0x1b6cd4['body']['id']){delete _0x1b6cd4[_0xd885('0x42')]['id'];}return db[_0xd885('0x25')][_0xd885('0x40')]({'where':{'id':_0x1b6cd4[_0xd885('0x43')]['id']}})[_0xd885('0x1e')](handleEntityNotFound(_0x1cd716,null))[_0xd885('0x1e')](saveUpdates(_0x1b6cd4[_0xd885('0x42')],null))[_0xd885('0x1e')](respondWithResult(_0x1cd716,null))[_0xd885('0x3c')](handleError(_0x1cd716,null));};exports[_0xd885('0x1f')]=function(_0x5acfa6,_0x3a3943){return db[_0xd885('0x25')]['find']({'where':{'id':_0x5acfa6[_0xd885('0x43')]['id']}})[_0xd885('0x1e')](handleEntityNotFound(_0x3a3943,null))['then'](removeEntity(_0x3a3943,null))[_0xd885('0x3c')](handleError(_0x3a3943,null));};
\ No newline at end of file
+var _0x3d9e=['offset','limit','set','then','name','send','index','MailServerOut','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','order','sort','where','pick','merge','map','type','key','VIRTUAL','field','filter','options','count','includeAll','include','findAll','show','params','catch','create','update','body','find','destroy','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','sox','to-csv','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','json'];(function(_0x53bdd1,_0x3f29e8){var _0x291016=function(_0x1fb28c){while(--_0x1fb28c){_0x53bdd1['push'](_0x53bdd1['shift']());}};_0x291016(++_0x3f29e8);}(_0x3d9e,0x70));var _0xe3d9=function(_0x2d8fc2,_0x1c461d){_0x2d8fc2=_0x2d8fc2-0x0;var _0x3a9e53=_0x3d9e[_0x2d8fc2];return _0x3a9e53;};'use strict';var pdf=require(_0xe3d9('0x0'));var emlformat=require(_0xe3d9('0x1'));var rimraf=require(_0xe3d9('0x2'));var zipdir=require(_0xe3d9('0x3'));var jsonpatch=require(_0xe3d9('0x4'));var rp=require(_0xe3d9('0x5'));var moment=require(_0xe3d9('0x6'));var BPromise=require(_0xe3d9('0x7'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require(_0xe3d9('0x8'));var csv=require(_0xe3d9('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xe3d9('0xa'));var squel=require(_0xe3d9('0xb'));var crypto=require(_0xe3d9('0xc'));var jsforce=require('jsforce');var deskjs=require(_0xe3d9('0xd'));var toCsv=require(_0xe3d9('0x9'));var querystring=require(_0xe3d9('0xe'));var Papa=require(_0xe3d9('0xf'));var Redis=require(_0xe3d9('0x10'));var authService=require(_0xe3d9('0x11'));var qs=require(_0xe3d9('0x12'));var hardwareService=require(_0xe3d9('0x13'));var logger=require(_0xe3d9('0x14'))(_0xe3d9('0x15'));var utils=require('../../config/utils');var config=require(_0xe3d9('0x16'));var db=require(_0xe3d9('0x17'))['db'];function respondWithStatusCode(_0x947699,_0xaf52f6){_0xaf52f6=_0xaf52f6||0xcc;return function(_0x40b2aa){if(_0x40b2aa){return _0x947699[_0xe3d9('0x18')](_0xaf52f6);}return _0x947699[_0xe3d9('0x19')](_0xaf52f6)[_0xe3d9('0x1a')]();};}function respondWithResult(_0x27e01a,_0x3bc035){_0x3bc035=_0x3bc035||0xc8;return function(_0x11f508){if(_0x11f508){return _0x27e01a[_0xe3d9('0x19')](_0x3bc035)[_0xe3d9('0x1b')](_0x11f508);}};}function respondWithFilteredResult(_0x47d495,_0x3eec8b){return function(_0x1fff72){if(_0x1fff72){var _0x541a33=_0x1fff72['count'],_0x349c81=_0x3eec8b[_0xe3d9('0x1c')],_0x2c005f=_0x3eec8b[_0xe3d9('0x1c')]+_0x3eec8b[_0xe3d9('0x1d')],_0x381a6f;if(_0x2c005f>=_0x541a33){_0x2c005f=_0x541a33;_0x381a6f=0xc8;}else{_0x381a6f=0xce;}_0x47d495[_0xe3d9('0x19')](_0x381a6f);return _0x47d495[_0xe3d9('0x1e')]('Content-Range',_0x349c81+'-'+_0x2c005f+'/'+_0x541a33)[_0xe3d9('0x1b')](_0x1fff72);}return null;};}function patchUpdates(_0x33207e){return function(_0xeeb782){try{jsonpatch['apply'](_0xeeb782,_0x33207e,!![]);}catch(_0x502200){return BPromise['reject'](_0x502200);}return _0xeeb782['save']();};}function saveUpdates(_0x2b5e56,_0xe95e72){return function(_0x3b2bc7){if(_0x3b2bc7){return _0x3b2bc7['update'](_0x2b5e56)[_0xe3d9('0x1f')](function(_0x313bc5){return _0x313bc5;});}return null;};}function removeEntity(_0x6d297b,_0xb49021){return function(_0x1a81d2){if(_0x1a81d2){return _0x1a81d2['destroy']()[_0xe3d9('0x1f')](function(){_0x6d297b['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x351a2b,_0x8d8729){return function(_0x3c4812){if(!_0x3c4812){_0x351a2b[_0xe3d9('0x18')](0x194);}return _0x3c4812;};}function handleError(_0x4524cf,_0x75fd2e){_0x75fd2e=_0x75fd2e||0x1f4;return function(_0xa88a75){logger['error'](_0xa88a75['stack']);if(_0xa88a75[_0xe3d9('0x20')]){delete _0xa88a75[_0xe3d9('0x20')];}_0x4524cf[_0xe3d9('0x19')](_0x75fd2e)[_0xe3d9('0x21')](_0xa88a75);};}exports[_0xe3d9('0x22')]=function(_0x1c2ada,_0x589b6c){var _0x25d903={},_0x3f4ed1={},_0x1c89f6={'count':0x0,'rows':[]};var _0x18cbaa=db[_0xe3d9('0x23')][_0xe3d9('0x24')];_0x3f4ed1[_0xe3d9('0x25')]=_[_0xe3d9('0x26')](_0x18cbaa);_0x3f4ed1[_0xe3d9('0x27')]=_[_0xe3d9('0x26')](_0x1c2ada[_0xe3d9('0x27')]);_0x3f4ed1[_0xe3d9('0x28')]=_['intersection'](_0x3f4ed1['model'],_0x3f4ed1[_0xe3d9('0x27')]);_0x25d903[_0xe3d9('0x29')]=_[_0xe3d9('0x2a')](_0x3f4ed1[_0xe3d9('0x25')],qs[_0xe3d9('0x2b')](_0x1c2ada['query']['fields']));_0x25d903[_0xe3d9('0x29')]=_0x25d903[_0xe3d9('0x29')][_0xe3d9('0x2c')]?_0x25d903[_0xe3d9('0x29')]:_0x3f4ed1[_0xe3d9('0x25')];if(!_0x1c2ada['query'][_0xe3d9('0x2d')]('nolimit')){_0x25d903[_0xe3d9('0x1d')]=qs['limit'](_0x1c2ada[_0xe3d9('0x27')][_0xe3d9('0x1d')]);_0x25d903['offset']=qs['offset'](_0x1c2ada[_0xe3d9('0x27')][_0xe3d9('0x1c')]);}_0x25d903[_0xe3d9('0x2e')]=qs[_0xe3d9('0x2f')](_0x1c2ada[_0xe3d9('0x27')][_0xe3d9('0x2f')]);_0x25d903[_0xe3d9('0x30')]=qs[_0xe3d9('0x28')](_[_0xe3d9('0x31')](_0x1c2ada[_0xe3d9('0x27')],_0x3f4ed1[_0xe3d9('0x28')]));if(_0x1c2ada[_0xe3d9('0x27')]['filter']){_0x25d903[_0xe3d9('0x30')]=_[_0xe3d9('0x32')](_0x25d903[_0xe3d9('0x30')],{'$or':_[_0xe3d9('0x33')](_0x18cbaa,function(_0x28da04){if(_0x28da04[_0xe3d9('0x34')][_0xe3d9('0x35')]!==_0xe3d9('0x36')){var _0x46eb5e={};_0x46eb5e[_0x28da04[_0xe3d9('0x37')]]={'$like':'%'+_0x1c2ada['query'][_0xe3d9('0x38')]+'%'};return _0x46eb5e;}})});}_0x25d903=_[_0xe3d9('0x32')]({},_0x25d903,_0x1c2ada[_0xe3d9('0x39')]);var _0x46b444={'where':_0x25d903['where']};return db[_0xe3d9('0x23')][_0xe3d9('0x3a')](_0x46b444)['then'](function(_0x2c7cdf){_0x1c89f6[_0xe3d9('0x3a')]=_0x2c7cdf;if(_0x1c2ada[_0xe3d9('0x27')][_0xe3d9('0x3b')]){_0x25d903[_0xe3d9('0x3c')]=[{'all':!![]}];}return db['MailServerOut'][_0xe3d9('0x3d')](_0x25d903);})[_0xe3d9('0x1f')](function(_0x3d0f6a){_0x1c89f6['rows']=_0x3d0f6a;return _0x1c89f6;})[_0xe3d9('0x1f')](respondWithFilteredResult(_0x589b6c,_0x25d903))['catch'](handleError(_0x589b6c,null));};exports[_0xe3d9('0x3e')]=function(_0x59015e,_0x2efc23){var _0x1677b2={'raw':!![],'where':{'id':_0x59015e[_0xe3d9('0x3f')]['id']}},_0x22e389={};_0x22e389[_0xe3d9('0x25')]=_[_0xe3d9('0x26')](db[_0xe3d9('0x23')]['rawAttributes']);_0x22e389[_0xe3d9('0x27')]=_['keys'](_0x59015e[_0xe3d9('0x27')]);_0x22e389['filters']=_[_0xe3d9('0x2a')](_0x22e389[_0xe3d9('0x25')],_0x22e389[_0xe3d9('0x27')]);_0x1677b2[_0xe3d9('0x29')]=_[_0xe3d9('0x2a')](_0x22e389[_0xe3d9('0x25')],qs[_0xe3d9('0x2b')](_0x59015e['query']['fields']));_0x1677b2[_0xe3d9('0x29')]=_0x1677b2[_0xe3d9('0x29')][_0xe3d9('0x2c')]?_0x1677b2['attributes']:_0x22e389[_0xe3d9('0x25')];if(_0x59015e[_0xe3d9('0x27')][_0xe3d9('0x3b')]){_0x1677b2[_0xe3d9('0x3c')]=[{'all':!![]}];}_0x1677b2=_[_0xe3d9('0x32')]({},_0x1677b2,_0x59015e[_0xe3d9('0x39')]);return db[_0xe3d9('0x23')]['find'](_0x1677b2)['then'](handleEntityNotFound(_0x2efc23,null))[_0xe3d9('0x1f')](respondWithResult(_0x2efc23,null))[_0xe3d9('0x40')](handleError(_0x2efc23,null));};exports[_0xe3d9('0x41')]=function(_0x18a354,_0x342884){return db[_0xe3d9('0x23')][_0xe3d9('0x41')](_0x18a354['body'],{})['then'](respondWithResult(_0x342884,0xc9))['catch'](handleError(_0x342884,null));};exports[_0xe3d9('0x42')]=function(_0x1c6feb,_0x5fe3bb){if(_0x1c6feb[_0xe3d9('0x43')]['id']){delete _0x1c6feb[_0xe3d9('0x43')]['id'];}return db['MailServerOut'][_0xe3d9('0x44')]({'where':{'id':_0x1c6feb[_0xe3d9('0x3f')]['id']}})[_0xe3d9('0x1f')](handleEntityNotFound(_0x5fe3bb,null))['then'](saveUpdates(_0x1c6feb[_0xe3d9('0x43')],null))['then'](respondWithResult(_0x5fe3bb,null))[_0xe3d9('0x40')](handleError(_0x5fe3bb,null));};exports[_0xe3d9('0x45')]=function(_0x29c432,_0x42e22f){return db[_0xe3d9('0x23')]['find']({'where':{'id':_0x29c432['params']['id']}})['then'](handleEntityNotFound(_0x42e22f,null))['then'](removeEntity(_0x42e22f,null))[_0xe3d9('0x40')](handleError(_0x42e22f,null));};
\ No newline at end of file
index 7e2053d..ea14d47 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4cf8=['../../config/environment','./mailServerOut.attributes','exports','define','mail_servers_out','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf'];(function(_0x53c766,_0x182c04){var _0x34f741=function(_0xd0e50c){while(--_0xd0e50c){_0x53c766['push'](_0x53c766['shift']());}};_0x34f741(++_0x182c04);}(_0x4cf8,0x1e1));var _0x84cf=function(_0x4c9915,_0x406b1a){_0x4c9915=_0x4c9915-0x0;var _0x473218=_0x4cf8[_0x4c9915];return _0x473218;};'use strict';var _=require(_0x84cf('0x0'));var util=require(_0x84cf('0x1'));var logger=require(_0x84cf('0x2'))(_0x84cf('0x3'));var moment=require(_0x84cf('0x4'));var BPromise=require(_0x84cf('0x5'));var rp=require(_0x84cf('0x6'));var fs=require('fs');var path=require(_0x84cf('0x7'));var rimraf=require(_0x84cf('0x8'));var config=require(_0x84cf('0x9'));var attributes=require(_0x84cf('0xa'));module[_0x84cf('0xb')]=function(_0x50ade2,_0x4af3f1){return _0x50ade2[_0x84cf('0xc')]('MailServerOut',attributes,{'tableName':_0x84cf('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x14a0=['../../config/logger','api','moment','bluebird','request-promise','path','./mailServerOut.attributes','exports','MailServerOut','mail_servers_out','util'];(function(_0x31b7e9,_0x4f75a1){var _0x485d39=function(_0x199b49){while(--_0x199b49){_0x31b7e9['push'](_0x31b7e9['shift']());}};_0x485d39(++_0x4f75a1);}(_0x14a0,0x8e));var _0x014a=function(_0x6a3e29,_0x281702){_0x6a3e29=_0x6a3e29-0x0;var _0x4e2dba=_0x14a0[_0x6a3e29];return _0x4e2dba;};'use strict';var _=require('lodash');var util=require(_0x014a('0x0'));var logger=require(_0x014a('0x1'))(_0x014a('0x2'));var moment=require(_0x014a('0x3'));var BPromise=require(_0x014a('0x4'));var rp=require(_0x014a('0x5'));var fs=require('fs');var path=require(_0x014a('0x6'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x014a('0x7'));module[_0x014a('0x8')]=function(_0x38a22c,_0x5ec84d){return _0x38a22c['define'](_0x014a('0x9'),attributes,{'tableName':_0x014a('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 38f2ffd..fa325cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5e25=['request\x20sent','debug','MailServerOut,\x20%s,\x20%s,\x20%s','stringify','error','MailServerOut,\x20%s,\x20%s','message','result','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','request','then','info'];(function(_0x42facb,_0xcd5494){var _0x9ea814=function(_0x1e8427){while(--_0x1e8427){_0x42facb['push'](_0x42facb['shift']());}};_0x9ea814(++_0xcd5494);}(_0x5e25,0x152));var _0x55e2=function(_0x377bff,_0x18405e){_0x377bff=_0x377bff-0x0;var _0x18576e=_0x5e25[_0x377bff];return _0x18576e;};'use strict';var _=require(_0x55e2('0x0'));var util=require('util');var moment=require(_0x55e2('0x1'));var BPromise=require(_0x55e2('0x2'));var rs=require(_0x55e2('0x3'));var fs=require('fs');var Redis=require(_0x55e2('0x4'));var db=require(_0x55e2('0x5'))['db'];var utils=require(_0x55e2('0x6'));var logger=require('../../config/logger')(_0x55e2('0x7'));var config=require(_0x55e2('0x8'));var jayson=require(_0x55e2('0x9'));var client=jayson[_0x55e2('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x4f31fa,_0xd34c10,_0x35a8be){return new BPromise(function(_0x26af4a,_0x586d75){return client[_0x55e2('0xb')](_0x4f31fa,_0x35a8be)[_0x55e2('0xc')](function(_0x5dd12e){logger[_0x55e2('0xd')]('MailServerOut,\x20%s,\x20%s',_0xd34c10,_0x55e2('0xe'));logger[_0x55e2('0xf')](_0x55e2('0x10'),_0xd34c10,'request\x20sent',JSON[_0x55e2('0x11')](_0x5dd12e));if(_0x5dd12e[_0x55e2('0x12')]){if(_0x5dd12e['error']['code']===0x1f4){logger[_0x55e2('0x12')](_0x55e2('0x13'),_0xd34c10,_0x5dd12e[_0x55e2('0x12')][_0x55e2('0x14')]);return _0x586d75(_0x5dd12e[_0x55e2('0x12')][_0x55e2('0x14')]);}logger[_0x55e2('0x12')](_0x55e2('0x13'),_0xd34c10,_0x5dd12e[_0x55e2('0x12')][_0x55e2('0x14')]);return _0x26af4a(_0x5dd12e[_0x55e2('0x12')][_0x55e2('0x14')]);}else{logger[_0x55e2('0xd')](_0x55e2('0x13'),_0xd34c10,'request\x20sent');_0x26af4a(_0x5dd12e[_0x55e2('0x15')][_0x55e2('0x14')]);}})['catch'](function(_0x59b33f){logger['error']('MailServerOut,\x20%s,\x20%s',_0xd34c10,_0x59b33f);_0x586d75(_0x59b33f);});});}
\ No newline at end of file
+var _0x1fed=['util','moment','bluebird','randomstring','ioredis','../../mysqldb','rpc','../../config/environment','http','request','info','request\x20sent','debug','MailServerOut,\x20%s,\x20%s,\x20%s','error','code','MailServerOut,\x20%s,\x20%s','message','result','catch','lodash'];(function(_0x308f09,_0x9c9367){var _0x2b58fd=function(_0x51b231){while(--_0x51b231){_0x308f09['push'](_0x308f09['shift']());}};_0x2b58fd(++_0x9c9367);}(_0x1fed,0x7d));var _0xd1fe=function(_0x5b3b6a,_0x906f49){_0x5b3b6a=_0x5b3b6a-0x0;var _0x4a9af7=_0x1fed[_0x5b3b6a];return _0x4a9af7;};'use strict';var _=require(_0xd1fe('0x0'));var util=require(_0xd1fe('0x1'));var moment=require(_0xd1fe('0x2'));var BPromise=require(_0xd1fe('0x3'));var rs=require(_0xd1fe('0x4'));var fs=require('fs');var Redis=require(_0xd1fe('0x5'));var db=require(_0xd1fe('0x6'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xd1fe('0x7'));var config=require(_0xd1fe('0x8'));var jayson=require('jayson/promise');var client=jayson['client'][_0xd1fe('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x54aa9f,_0x676ebf,_0x59a0e5){return new BPromise(function(_0x181b34,_0x56b87e){return client[_0xd1fe('0xa')](_0x54aa9f,_0x59a0e5)['then'](function(_0x3e54a4){logger[_0xd1fe('0xb')]('MailServerOut,\x20%s,\x20%s',_0x676ebf,_0xd1fe('0xc'));logger[_0xd1fe('0xd')](_0xd1fe('0xe'),_0x676ebf,_0xd1fe('0xc'),JSON['stringify'](_0x3e54a4));if(_0x3e54a4[_0xd1fe('0xf')]){if(_0x3e54a4[_0xd1fe('0xf')][_0xd1fe('0x10')]===0x1f4){logger[_0xd1fe('0xf')](_0xd1fe('0x11'),_0x676ebf,_0x3e54a4[_0xd1fe('0xf')][_0xd1fe('0x12')]);return _0x56b87e(_0x3e54a4['error']['message']);}logger[_0xd1fe('0xf')]('MailServerOut,\x20%s,\x20%s',_0x676ebf,_0x3e54a4['error'][_0xd1fe('0x12')]);return _0x181b34(_0x3e54a4[_0xd1fe('0xf')][_0xd1fe('0x12')]);}else{logger[_0xd1fe('0xb')](_0xd1fe('0x11'),_0x676ebf,_0xd1fe('0xc'));_0x181b34(_0x3e54a4[_0xd1fe('0x13')][_0xd1fe('0x12')]);}})[_0xd1fe('0x14')](function(_0x29531a){logger['error'](_0xd1fe('0x11'),_0x676ebf,_0x29531a);_0x56b87e(_0x29531a);});});}
\ No newline at end of file
index 78ec0eb..75f2f33 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2ebf=['post','create','put','/:id','update','delete','destroy','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../config/environment','get','index','/describe','isAuthenticated','describe','show'];(function(_0x40124e,_0x47920b){var _0x2e8dc2=function(_0x3a6674){while(--_0x3a6674){_0x40124e['push'](_0x40124e['shift']());}};_0x2e8dc2(++_0x47920b);}(_0x2ebf,0x1ac));var _0xf2eb=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x2ebf[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0xf2eb('0x0'));var util=require(_0xf2eb('0x1'));var path=require(_0xf2eb('0x2'));var timeout=require(_0xf2eb('0x3'));var express=require(_0xf2eb('0x4'));var router=express['Router']();var auth=require(_0xf2eb('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xf2eb('0x6'));var controller=require('./mailSubstatus.controller');router[_0xf2eb('0x7')]('/',auth['isAuthenticated'](),controller[_0xf2eb('0x8')]);router[_0xf2eb('0x7')](_0xf2eb('0x9'),auth[_0xf2eb('0xa')](),controller[_0xf2eb('0xb')]);router[_0xf2eb('0x7')]('/:id',auth[_0xf2eb('0xa')](),controller[_0xf2eb('0xc')]);router[_0xf2eb('0xd')]('/',auth[_0xf2eb('0xa')](),controller[_0xf2eb('0xe')]);router[_0xf2eb('0xf')](_0xf2eb('0x10'),auth[_0xf2eb('0xa')](),controller[_0xf2eb('0x11')]);router[_0xf2eb('0x12')](_0xf2eb('0x10'),auth[_0xf2eb('0xa')](),controller[_0xf2eb('0x13')]);module[_0xf2eb('0x14')]=router;
\ No newline at end of file
+var _0x9996=['get','isAuthenticated','/describe','describe','show','post','create','put','/:id','update','destroy','exports','util','path','../../components/auth/service','../../components/interaction/service','./mailSubstatus.controller'];(function(_0x54840e,_0x8d4b40){var _0x4dccf7=function(_0x215063){while(--_0x215063){_0x54840e['push'](_0x54840e['shift']());}};_0x4dccf7(++_0x8d4b40);}(_0x9996,0xc7));var _0x6999=function(_0x253dfd,_0x39c169){_0x253dfd=_0x253dfd-0x0;var _0x1ec44d=_0x9996[_0x253dfd];return _0x1ec44d;};'use strict';var multer=require('multer');var util=require(_0x6999('0x0'));var path=require(_0x6999('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require(_0x6999('0x2'));var interaction=require(_0x6999('0x3'));var config=require('../../config/environment');var controller=require(_0x6999('0x4'));router[_0x6999('0x5')]('/',auth[_0x6999('0x6')](),controller['index']);router['get'](_0x6999('0x7'),auth[_0x6999('0x6')](),controller[_0x6999('0x8')]);router[_0x6999('0x5')]('/:id',auth['isAuthenticated'](),controller[_0x6999('0x9')]);router[_0x6999('0xa')]('/',auth[_0x6999('0x6')](),controller[_0x6999('0xb')]);router[_0x6999('0xc')](_0x6999('0xd'),auth[_0x6999('0x6')](),controller[_0x6999('0xe')]);router['delete']('/:id',auth['isAuthenticated'](),controller[_0x6999('0xf')]);module[_0x6999('0x10')]=router;
\ No newline at end of file
index 719dff3..f0022e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb62e=['STRING','name','sequelize','exports'];(function(_0x25e5c9,_0x5c814c){var _0x2ab475=function(_0xea35b9){while(--_0xea35b9){_0x25e5c9['push'](_0x25e5c9['shift']());}};_0x2ab475(++_0x5c814c);}(_0xb62e,0x1de));var _0xeb62=function(_0x3bf83f,_0x181cac){_0x3bf83f=_0x3bf83f-0x0;var _0x22c4a9=_0xb62e[_0x3bf83f];return _0x22c4a9;};'use strict';var Sequelize=require(_0xeb62('0x0'));module[_0xeb62('0x1')]={'name':{'type':Sequelize[_0xeb62('0x2')],'unique':_0xeb62('0x3'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xea28=['STRING','name','sequelize','exports'];(function(_0x1e34e1,_0x13c6ee){var _0x186098=function(_0x2f8c3f){while(--_0x2f8c3f){_0x1e34e1['push'](_0x1e34e1['shift']());}};_0x186098(++_0x13c6ee);}(_0xea28,0x13a));var _0x8ea2=function(_0x1300e0,_0x570dfb){_0x1300e0=_0x1300e0-0x0;var _0x5ad48e=_0xea28[_0x1300e0];return _0x5ad48e;};'use strict';var Sequelize=require(_0x8ea2('0x0'));module[_0x8ea2('0x1')]={'name':{'type':Sequelize[_0x8ea2('0x2')],'unique':_0x8ea2('0x3'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0x8ea2('0x2')]}};
\ No newline at end of file
index eac31ab..00d7410 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x643b=['destroy','then','error','stack','name','send','index','rawAttributes','model','query','keys','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','sort','pick','filter','where','merge','type','VIRTUAL','MailSubstatus','include','findAll','rows','catch','show','params','includeAll','options','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x643b,0xbd));var _0xb643=function(_0x4b369d,_0x265eb8){_0x4b369d=_0x4b369d-0x0;var _0x571a98=_0x643b[_0x4b369d];return _0x571a98;};'use strict';var pdf=require(_0xb643('0x0'));var emlformat=require(_0xb643('0x1'));var rimraf=require(_0xb643('0x2'));var zipdir=require(_0xb643('0x3'));var jsonpatch=require(_0xb643('0x4'));var rp=require(_0xb643('0x5'));var moment=require(_0xb643('0x6'));var BPromise=require('bluebird');var Mustache=require(_0xb643('0x7'));var util=require(_0xb643('0x8'));var path=require('path');var sox=require(_0xb643('0x9'));var csv=require(_0xb643('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xb643('0xb'));var squel=require(_0xb643('0xc'));var crypto=require(_0xb643('0xd'));var jsforce=require(_0xb643('0xe'));var deskjs=require(_0xb643('0xf'));var toCsv=require(_0xb643('0xa'));var querystring=require(_0xb643('0x10'));var Papa=require(_0xb643('0x11'));var Redis=require(_0xb643('0x12'));var authService=require('../../components/auth/service');var qs=require(_0xb643('0x13'));var hardwareService=require(_0xb643('0x14'));var logger=require(_0xb643('0x15'))(_0xb643('0x16'));var utils=require(_0xb643('0x17'));var config=require(_0xb643('0x18'));var db=require(_0xb643('0x19'))['db'];function respondWithStatusCode(_0x413e68,_0x5e6935){_0x5e6935=_0x5e6935||0xcc;return function(_0x3c4128){if(_0x3c4128){return _0x413e68[_0xb643('0x1a')](_0x5e6935);}return _0x413e68[_0xb643('0x1b')](_0x5e6935)[_0xb643('0x1c')]();};}function respondWithResult(_0x1da95a,_0x2d72d0){_0x2d72d0=_0x2d72d0||0xc8;return function(_0x5bed20){if(_0x5bed20){return _0x1da95a[_0xb643('0x1b')](_0x2d72d0)[_0xb643('0x1d')](_0x5bed20);}};}function respondWithFilteredResult(_0x315551,_0x47dbd1){return function(_0x543245){if(_0x543245){var _0x5c260b=_0x543245[_0xb643('0x1e')],_0x11b4be=_0x47dbd1[_0xb643('0x1f')],_0x16462a=_0x47dbd1['offset']+_0x47dbd1[_0xb643('0x20')],_0x579937;if(_0x16462a>=_0x5c260b){_0x16462a=_0x5c260b;_0x579937=0xc8;}else{_0x579937=0xce;}_0x315551[_0xb643('0x1b')](_0x579937);return _0x315551[_0xb643('0x21')](_0xb643('0x22'),_0x11b4be+'-'+_0x16462a+'/'+_0x5c260b)[_0xb643('0x1d')](_0x543245);}return null;};}function patchUpdates(_0x311495){return function(_0x2511a5){try{jsonpatch[_0xb643('0x23')](_0x2511a5,_0x311495,!![]);}catch(_0x23dd16){return BPromise[_0xb643('0x24')](_0x23dd16);}return _0x2511a5[_0xb643('0x25')]();};}function saveUpdates(_0x1812e0,_0x1e46c0){return function(_0x204aaa){if(_0x204aaa){return _0x204aaa[_0xb643('0x26')](_0x1812e0)['then'](function(_0x40bced){return _0x40bced;});}return null;};}function removeEntity(_0x412b43,_0x5d83f7){return function(_0x55b7df){if(_0x55b7df){return _0x55b7df[_0xb643('0x27')]()[_0xb643('0x28')](function(){_0x412b43[_0xb643('0x1b')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3d6ba3,_0x4137e4){return function(_0x461ca5){if(!_0x461ca5){_0x3d6ba3[_0xb643('0x1a')](0x194);}return _0x461ca5;};}function handleError(_0x2c3ddc,_0x16ac29){_0x16ac29=_0x16ac29||0x1f4;return function(_0x48c821){logger[_0xb643('0x29')](_0x48c821[_0xb643('0x2a')]);if(_0x48c821[_0xb643('0x2b')]){delete _0x48c821['name'];}_0x2c3ddc[_0xb643('0x1b')](_0x16ac29)[_0xb643('0x2c')](_0x48c821);};}exports[_0xb643('0x2d')]=function(_0x634bc2,_0x4f3f40){var _0x3cad17={},_0x18b5b1={},_0x34a301={'count':0x0,'rows':[]};var _0x227709=db['MailSubstatus'][_0xb643('0x2e')];_0x18b5b1[_0xb643('0x2f')]=_['keys'](_0x227709);_0x18b5b1[_0xb643('0x30')]=_[_0xb643('0x31')](_0x634bc2['query']);_0x18b5b1[_0xb643('0x32')]=_[_0xb643('0x33')](_0x18b5b1[_0xb643('0x2f')],_0x18b5b1[_0xb643('0x30')]);_0x3cad17['attributes']=_[_0xb643('0x33')](_0x18b5b1[_0xb643('0x2f')],qs[_0xb643('0x34')](_0x634bc2['query']['fields']));_0x3cad17[_0xb643('0x35')]=_0x3cad17[_0xb643('0x35')][_0xb643('0x36')]?_0x3cad17[_0xb643('0x35')]:_0x18b5b1[_0xb643('0x2f')];if(!_0x634bc2[_0xb643('0x30')][_0xb643('0x37')](_0xb643('0x38'))){_0x3cad17['limit']=qs[_0xb643('0x20')](_0x634bc2[_0xb643('0x30')]['limit']);_0x3cad17[_0xb643('0x1f')]=qs[_0xb643('0x1f')](_0x634bc2[_0xb643('0x30')]['offset']);}_0x3cad17['order']=qs[_0xb643('0x39')](_0x634bc2['query']['sort']);_0x3cad17['where']=qs[_0xb643('0x32')](_[_0xb643('0x3a')](_0x634bc2['query'],_0x18b5b1[_0xb643('0x32')]));if(_0x634bc2[_0xb643('0x30')][_0xb643('0x3b')]){_0x3cad17[_0xb643('0x3c')]=_[_0xb643('0x3d')](_0x3cad17[_0xb643('0x3c')],{'$or':_['map'](_0x227709,function(_0x256711){if(_0x256711[_0xb643('0x3e')]['key']!==_0xb643('0x3f')){var _0x3c50fa={};_0x3c50fa[_0x256711['field']]={'$like':'%'+_0x634bc2[_0xb643('0x30')][_0xb643('0x3b')]+'%'};return _0x3c50fa;}})});}_0x3cad17=_[_0xb643('0x3d')]({},_0x3cad17,_0x634bc2['options']);var _0x4385e9={'where':_0x3cad17[_0xb643('0x3c')]};return db[_0xb643('0x40')][_0xb643('0x1e')](_0x4385e9)[_0xb643('0x28')](function(_0x2ff98f){_0x34a301[_0xb643('0x1e')]=_0x2ff98f;if(_0x634bc2[_0xb643('0x30')]['includeAll']){_0x3cad17[_0xb643('0x41')]=[{'all':!![]}];}return db[_0xb643('0x40')][_0xb643('0x42')](_0x3cad17);})[_0xb643('0x28')](function(_0x1c5424){_0x34a301[_0xb643('0x43')]=_0x1c5424;return _0x34a301;})['then'](respondWithFilteredResult(_0x4f3f40,_0x3cad17))[_0xb643('0x44')](handleError(_0x4f3f40,null));};exports[_0xb643('0x45')]=function(_0x50ccf5,_0x323a1a){var _0x4a9e53={'raw':!![],'where':{'id':_0x50ccf5[_0xb643('0x46')]['id']}},_0x50e3bd={};_0x50e3bd[_0xb643('0x2f')]=_[_0xb643('0x31')](db[_0xb643('0x40')][_0xb643('0x2e')]);_0x50e3bd['query']=_[_0xb643('0x31')](_0x50ccf5[_0xb643('0x30')]);_0x50e3bd[_0xb643('0x32')]=_[_0xb643('0x33')](_0x50e3bd[_0xb643('0x2f')],_0x50e3bd[_0xb643('0x30')]);_0x4a9e53[_0xb643('0x35')]=_['intersection'](_0x50e3bd[_0xb643('0x2f')],qs[_0xb643('0x34')](_0x50ccf5[_0xb643('0x30')][_0xb643('0x34')]));_0x4a9e53[_0xb643('0x35')]=_0x4a9e53['attributes'][_0xb643('0x36')]?_0x4a9e53[_0xb643('0x35')]:_0x50e3bd['model'];if(_0x50ccf5['query'][_0xb643('0x47')]){_0x4a9e53[_0xb643('0x41')]=[{'all':!![]}];}_0x4a9e53=_['merge']({},_0x4a9e53,_0x50ccf5[_0xb643('0x48')]);return db['MailSubstatus']['find'](_0x4a9e53)['then'](handleEntityNotFound(_0x323a1a,null))[_0xb643('0x28')](respondWithResult(_0x323a1a,null))[_0xb643('0x44')](handleError(_0x323a1a,null));};exports[_0xb643('0x49')]=function(_0x48d48c,_0x2c193b){return db[_0xb643('0x40')][_0xb643('0x49')](_0x48d48c['body'],{})[_0xb643('0x28')](respondWithResult(_0x2c193b,0xc9))[_0xb643('0x44')](handleError(_0x2c193b,null));};exports[_0xb643('0x26')]=function(_0x26b777,_0x484148){if(_0x26b777[_0xb643('0x4a')]['id']){delete _0x26b777[_0xb643('0x4a')]['id'];}return db[_0xb643('0x40')]['find']({'where':{'id':_0x26b777[_0xb643('0x46')]['id']}})[_0xb643('0x28')](handleEntityNotFound(_0x484148,null))[_0xb643('0x28')](saveUpdates(_0x26b777[_0xb643('0x4a')],null))[_0xb643('0x28')](respondWithResult(_0x484148,null))[_0xb643('0x44')](handleError(_0x484148,null));};exports[_0xb643('0x27')]=function(_0x582452,_0x226c93){return db[_0xb643('0x40')]['find']({'where':{'id':_0x582452[_0xb643('0x46')]['id']}})[_0xb643('0x28')](handleEntityNotFound(_0x226c93,null))['then'](removeEntity(_0x226c93,null))[_0xb643('0x44')](handleError(_0x226c93,null));};exports[_0xb643('0x4b')]=function(_0x56e5ff,_0x3c2009){return db[_0xb643('0x40')]['describe']()[_0xb643('0x28')](respondWithResult(_0x3c2009,null))[_0xb643('0x44')](handleError(_0x3c2009,null));};
\ No newline at end of file
+var _0x9283=['request-promise','moment','bluebird','mustache','path','to-csv','lodash','squel','crypto','desk.js','querystring','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','set','Content-Range','then','stack','name','send','index','MailSubstatus','rawAttributes','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','pick','filter','where','map','type','field','merge','include','findAll','catch','length','includeAll','options','find','create','update','body','destroy','params','describe','html-pdf','eml-format','zip-dir'];(function(_0x3d5d87,_0x194058){var _0x4541e2=function(_0x20ef2c){while(--_0x20ef2c){_0x3d5d87['push'](_0x3d5d87['shift']());}};_0x4541e2(++_0x194058);}(_0x9283,0x10d));var _0x3928=function(_0xd5c2e1,_0x3ace14){_0xd5c2e1=_0xd5c2e1-0x0;var _0x3d799d=_0x9283[_0xd5c2e1];return _0x3d799d;};'use strict';var pdf=require(_0x3928('0x0'));var emlformat=require(_0x3928('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x3928('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x3928('0x3'));var moment=require(_0x3928('0x4'));var BPromise=require(_0x3928('0x5'));var Mustache=require(_0x3928('0x6'));var util=require('util');var path=require(_0x3928('0x7'));var sox=require('sox');var csv=require(_0x3928('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x3928('0x9'));var squel=require(_0x3928('0xa'));var crypto=require(_0x3928('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x3928('0xc'));var toCsv=require(_0x3928('0x8'));var querystring=require(_0x3928('0xd'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x3928('0xe'));var qs=require(_0x3928('0xf'));var hardwareService=require(_0x3928('0x10'));var logger=require(_0x3928('0x11'))(_0x3928('0x12'));var utils=require(_0x3928('0x13'));var config=require(_0x3928('0x14'));var db=require(_0x3928('0x15'))['db'];function respondWithStatusCode(_0x322ef0,_0x1dc61c){_0x1dc61c=_0x1dc61c||0xcc;return function(_0x2567ba){if(_0x2567ba){return _0x322ef0[_0x3928('0x16')](_0x1dc61c);}return _0x322ef0[_0x3928('0x17')](_0x1dc61c)[_0x3928('0x18')]();};}function respondWithResult(_0x53fde8,_0x3f33f3){_0x3f33f3=_0x3f33f3||0xc8;return function(_0x3e6f14){if(_0x3e6f14){return _0x53fde8['status'](_0x3f33f3)['json'](_0x3e6f14);}};}function respondWithFilteredResult(_0x33934d,_0x573430){return function(_0x474924){if(_0x474924){var _0x3c98bb=_0x474924[_0x3928('0x19')],_0x383697=_0x573430['offset'],_0x550053=_0x573430[_0x3928('0x1a')]+_0x573430[_0x3928('0x1b')],_0x243649;if(_0x550053>=_0x3c98bb){_0x550053=_0x3c98bb;_0x243649=0xc8;}else{_0x243649=0xce;}_0x33934d[_0x3928('0x17')](_0x243649);return _0x33934d[_0x3928('0x1c')](_0x3928('0x1d'),_0x383697+'-'+_0x550053+'/'+_0x3c98bb)['json'](_0x474924);}return null;};}function patchUpdates(_0x42048f){return function(_0x13b8b6){try{jsonpatch['apply'](_0x13b8b6,_0x42048f,!![]);}catch(_0x268fcb){return BPromise['reject'](_0x268fcb);}return _0x13b8b6['save']();};}function saveUpdates(_0x23d375,_0x37db71){return function(_0x408c2b){if(_0x408c2b){return _0x408c2b['update'](_0x23d375)['then'](function(_0x2e5d76){return _0x2e5d76;});}return null;};}function removeEntity(_0x12df31,_0x2be52e){return function(_0x42b190){if(_0x42b190){return _0x42b190['destroy']()[_0x3928('0x1e')](function(){_0x12df31[_0x3928('0x17')](0xcc)[_0x3928('0x18')]();});}};}function handleEntityNotFound(_0x4136f5,_0x416d62){return function(_0x133d67){if(!_0x133d67){_0x4136f5[_0x3928('0x16')](0x194);}return _0x133d67;};}function handleError(_0x5e653c,_0x590b11){_0x590b11=_0x590b11||0x1f4;return function(_0x3d16d5){logger['error'](_0x3d16d5[_0x3928('0x1f')]);if(_0x3d16d5[_0x3928('0x20')]){delete _0x3d16d5[_0x3928('0x20')];}_0x5e653c[_0x3928('0x17')](_0x590b11)[_0x3928('0x21')](_0x3d16d5);};}exports[_0x3928('0x22')]=function(_0x5b3c09,_0x3e873c){var _0x5d40fc={},_0x18d442={},_0x987119={'count':0x0,'rows':[]};var _0x117497=db[_0x3928('0x23')][_0x3928('0x24')];_0x18d442[_0x3928('0x25')]=_[_0x3928('0x26')](_0x117497);_0x18d442[_0x3928('0x27')]=_[_0x3928('0x26')](_0x5b3c09[_0x3928('0x27')]);_0x18d442[_0x3928('0x28')]=_[_0x3928('0x29')](_0x18d442[_0x3928('0x25')],_0x18d442[_0x3928('0x27')]);_0x5d40fc['attributes']=_[_0x3928('0x29')](_0x18d442[_0x3928('0x25')],qs[_0x3928('0x2a')](_0x5b3c09[_0x3928('0x27')][_0x3928('0x2a')]));_0x5d40fc[_0x3928('0x2b')]=_0x5d40fc['attributes']['length']?_0x5d40fc[_0x3928('0x2b')]:_0x18d442[_0x3928('0x25')];if(!_0x5b3c09[_0x3928('0x27')][_0x3928('0x2c')](_0x3928('0x2d'))){_0x5d40fc['limit']=qs[_0x3928('0x1b')](_0x5b3c09[_0x3928('0x27')][_0x3928('0x1b')]);_0x5d40fc[_0x3928('0x1a')]=qs[_0x3928('0x1a')](_0x5b3c09['query'][_0x3928('0x1a')]);}_0x5d40fc[_0x3928('0x2e')]=qs[_0x3928('0x2f')](_0x5b3c09['query'][_0x3928('0x2f')]);_0x5d40fc['where']=qs[_0x3928('0x28')](_[_0x3928('0x30')](_0x5b3c09['query'],_0x18d442[_0x3928('0x28')]));if(_0x5b3c09[_0x3928('0x27')][_0x3928('0x31')]){_0x5d40fc['where']=_['merge'](_0x5d40fc[_0x3928('0x32')],{'$or':_[_0x3928('0x33')](_0x117497,function(_0x584444){if(_0x584444[_0x3928('0x34')]['key']!=='VIRTUAL'){var _0x8bfdd8={};_0x8bfdd8[_0x584444[_0x3928('0x35')]]={'$like':'%'+_0x5b3c09[_0x3928('0x27')][_0x3928('0x31')]+'%'};return _0x8bfdd8;}})});}_0x5d40fc=_[_0x3928('0x36')]({},_0x5d40fc,_0x5b3c09['options']);var _0x3d2966={'where':_0x5d40fc[_0x3928('0x32')]};return db[_0x3928('0x23')][_0x3928('0x19')](_0x3d2966)['then'](function(_0x449fdf){_0x987119[_0x3928('0x19')]=_0x449fdf;if(_0x5b3c09[_0x3928('0x27')]['includeAll']){_0x5d40fc[_0x3928('0x37')]=[{'all':!![]}];}return db[_0x3928('0x23')][_0x3928('0x38')](_0x5d40fc);})[_0x3928('0x1e')](function(_0x4e6c0c){_0x987119['rows']=_0x4e6c0c;return _0x987119;})[_0x3928('0x1e')](respondWithFilteredResult(_0x3e873c,_0x5d40fc))[_0x3928('0x39')](handleError(_0x3e873c,null));};exports['show']=function(_0x4585d4,_0x38f308){var _0x1e133b={'raw':!![],'where':{'id':_0x4585d4['params']['id']}},_0x4d5f02={};_0x4d5f02['model']=_[_0x3928('0x26')](db[_0x3928('0x23')]['rawAttributes']);_0x4d5f02['query']=_[_0x3928('0x26')](_0x4585d4['query']);_0x4d5f02[_0x3928('0x28')]=_['intersection'](_0x4d5f02[_0x3928('0x25')],_0x4d5f02[_0x3928('0x27')]);_0x1e133b[_0x3928('0x2b')]=_[_0x3928('0x29')](_0x4d5f02[_0x3928('0x25')],qs[_0x3928('0x2a')](_0x4585d4['query'][_0x3928('0x2a')]));_0x1e133b['attributes']=_0x1e133b[_0x3928('0x2b')][_0x3928('0x3a')]?_0x1e133b[_0x3928('0x2b')]:_0x4d5f02[_0x3928('0x25')];if(_0x4585d4[_0x3928('0x27')][_0x3928('0x3b')]){_0x1e133b[_0x3928('0x37')]=[{'all':!![]}];}_0x1e133b=_['merge']({},_0x1e133b,_0x4585d4[_0x3928('0x3c')]);return db[_0x3928('0x23')][_0x3928('0x3d')](_0x1e133b)[_0x3928('0x1e')](handleEntityNotFound(_0x38f308,null))['then'](respondWithResult(_0x38f308,null))[_0x3928('0x39')](handleError(_0x38f308,null));};exports['create']=function(_0x179381,_0x5d5b6c){return db[_0x3928('0x23')][_0x3928('0x3e')](_0x179381['body'],{})[_0x3928('0x1e')](respondWithResult(_0x5d5b6c,0xc9))[_0x3928('0x39')](handleError(_0x5d5b6c,null));};exports[_0x3928('0x3f')]=function(_0x4d2946,_0xedb4ec){if(_0x4d2946[_0x3928('0x40')]['id']){delete _0x4d2946['body']['id'];}return db['MailSubstatus']['find']({'where':{'id':_0x4d2946['params']['id']}})[_0x3928('0x1e')](handleEntityNotFound(_0xedb4ec,null))[_0x3928('0x1e')](saveUpdates(_0x4d2946[_0x3928('0x40')],null))[_0x3928('0x1e')](respondWithResult(_0xedb4ec,null))[_0x3928('0x39')](handleError(_0xedb4ec,null));};exports[_0x3928('0x41')]=function(_0x1eb017,_0x11a986){return db[_0x3928('0x23')][_0x3928('0x3d')]({'where':{'id':_0x1eb017[_0x3928('0x42')]['id']}})[_0x3928('0x1e')](handleEntityNotFound(_0x11a986,null))[_0x3928('0x1e')](removeEntity(_0x11a986,null))[_0x3928('0x39')](handleError(_0x11a986,null));};exports[_0x3928('0x43')]=function(_0x4bf704,_0x3e9bc8){return db[_0x3928('0x23')][_0x3928('0x43')]()[_0x3928('0x1e')](respondWithResult(_0x3e9bc8,null))[_0x3928('0x39')](handleError(_0x3e9bc8,null));};
\ No newline at end of file
index 4a4cc13..638120e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7e3a=['mail_substatuses','moment','path','rimraf','../../config/environment','exports','define','MailSubstatus'];(function(_0x5dea5e,_0x47689c){var _0xbc20a2=function(_0x22ab16){while(--_0x22ab16){_0x5dea5e['push'](_0x5dea5e['shift']());}};_0xbc20a2(++_0x47689c);}(_0x7e3a,0xc9));var _0xa7e3=function(_0x3bf83f,_0x181cac){_0x3bf83f=_0x3bf83f-0x0;var _0x22c4a9=_0x7e3a[_0x3bf83f];return _0x22c4a9;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0xa7e3('0x0'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0xa7e3('0x1'));var rimraf=require(_0xa7e3('0x2'));var config=require(_0xa7e3('0x3'));var attributes=require('./mailSubstatus.attributes');module[_0xa7e3('0x4')]=function(_0x3fdd48,_0x539744){return _0x3fdd48[_0xa7e3('0x5')](_0xa7e3('0x6'),attributes,{'tableName':_0xa7e3('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x53ff=['exports','define','MailSubstatus','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','../../config/environment','./mailSubstatus.attributes'];(function(_0x3b96e5,_0x124abe){var _0x8facbe=function(_0x5a95ac){while(--_0x5a95ac){_0x3b96e5['push'](_0x3b96e5['shift']());}};_0x8facbe(++_0x124abe);}(_0x53ff,0x1f1));var _0xf53f=function(_0x368eb4,_0x1512b3){_0x368eb4=_0x368eb4-0x0;var _0x398603=_0x53ff[_0x368eb4];return _0x398603;};'use strict';var _=require(_0xf53f('0x0'));var util=require(_0xf53f('0x1'));var logger=require(_0xf53f('0x2'))(_0xf53f('0x3'));var moment=require(_0xf53f('0x4'));var BPromise=require(_0xf53f('0x5'));var rp=require(_0xf53f('0x6'));var fs=require('fs');var path=require(_0xf53f('0x7'));var rimraf=require('rimraf');var config=require(_0xf53f('0x8'));var attributes=require(_0xf53f('0x9'));module[_0xf53f('0xa')]=function(_0x2d9838,_0x558583){return _0x2d9838[_0xf53f('0xb')](_0xf53f('0xc'),attributes,{'tableName':'mail_substatuses','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index cde59cb..6337123 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4c37=['debug','MailSubstatus,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','client','http','request','then','info','MailSubstatus,\x20%s,\x20%s','request\x20sent'];(function(_0x3ea998,_0x29ea59){var _0x2b7559=function(_0x117ca2){while(--_0x117ca2){_0x3ea998['push'](_0x3ea998['shift']());}};_0x2b7559(++_0x29ea59);}(_0x4c37,0x1bd));var _0x74c3=function(_0x226ec4,_0xb0d69d){_0x226ec4=_0x226ec4-0x0;var _0x484e1c=_0x4c37[_0x226ec4];return _0x484e1c;};'use strict';var _=require('lodash');var util=require(_0x74c3('0x0'));var moment=require(_0x74c3('0x1'));var BPromise=require(_0x74c3('0x2'));var rs=require(_0x74c3('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x74c3('0x4'))['db'];var utils=require(_0x74c3('0x5'));var logger=require('../../config/logger')(_0x74c3('0x6'));var config=require(_0x74c3('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x74c3('0x8')][_0x74c3('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x1eb1cd,_0x359025,_0x2d481e){return new BPromise(function(_0x3baf9c,_0x2fe248){return client[_0x74c3('0xa')](_0x1eb1cd,_0x2d481e)[_0x74c3('0xb')](function(_0x55b4fc){logger[_0x74c3('0xc')](_0x74c3('0xd'),_0x359025,_0x74c3('0xe'));logger[_0x74c3('0xf')](_0x74c3('0x10'),_0x359025,_0x74c3('0xe'),JSON[_0x74c3('0x11')](_0x55b4fc));if(_0x55b4fc[_0x74c3('0x12')]){if(_0x55b4fc['error'][_0x74c3('0x13')]===0x1f4){logger[_0x74c3('0x12')](_0x74c3('0xd'),_0x359025,_0x55b4fc[_0x74c3('0x12')][_0x74c3('0x14')]);return _0x2fe248(_0x55b4fc['error'][_0x74c3('0x14')]);}logger[_0x74c3('0x12')](_0x74c3('0xd'),_0x359025,_0x55b4fc[_0x74c3('0x12')][_0x74c3('0x14')]);return _0x3baf9c(_0x55b4fc[_0x74c3('0x12')][_0x74c3('0x14')]);}else{logger[_0x74c3('0xc')](_0x74c3('0xd'),_0x359025,'request\x20sent');_0x3baf9c(_0x55b4fc[_0x74c3('0x15')][_0x74c3('0x14')]);}})[_0x74c3('0x16')](function(_0xa93572){logger[_0x74c3('0x12')](_0x74c3('0xd'),_0x359025,_0xa93572);_0x2fe248(_0xa93572);});});}
\ No newline at end of file
+var _0xbf52=['http','request','info','MailSubstatus,\x20%s,\x20%s','request\x20sent','debug','MailSubstatus,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client'];(function(_0x315b7c,_0x19ff8e){var _0x3a99eb=function(_0x21afc2){while(--_0x21afc2){_0x315b7c['push'](_0x315b7c['shift']());}};_0x3a99eb(++_0x19ff8e);}(_0xbf52,0x109));var _0x2bf5=function(_0x89c8c1,_0x5c023f){_0x89c8c1=_0x89c8c1-0x0;var _0x5ce0ad=_0xbf52[_0x89c8c1];return _0x5ce0ad;};'use strict';var _=require(_0x2bf5('0x0'));var util=require(_0x2bf5('0x1'));var moment=require(_0x2bf5('0x2'));var BPromise=require(_0x2bf5('0x3'));var rs=require(_0x2bf5('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x2bf5('0x5'))['db'];var utils=require(_0x2bf5('0x6'));var logger=require(_0x2bf5('0x7'))(_0x2bf5('0x8'));var config=require('../../config/environment');var jayson=require(_0x2bf5('0x9'));var client=jayson[_0x2bf5('0xa')][_0x2bf5('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x102b32,_0x47cd16,_0x2d6c53){return new BPromise(function(_0x39c1e4,_0x5b22b3){return client[_0x2bf5('0xc')](_0x102b32,_0x2d6c53)['then'](function(_0xef2b6e){logger[_0x2bf5('0xd')](_0x2bf5('0xe'),_0x47cd16,_0x2bf5('0xf'));logger[_0x2bf5('0x10')](_0x2bf5('0x11'),_0x47cd16,_0x2bf5('0xf'),JSON[_0x2bf5('0x12')](_0xef2b6e));if(_0xef2b6e[_0x2bf5('0x13')]){if(_0xef2b6e[_0x2bf5('0x13')]['code']===0x1f4){logger[_0x2bf5('0x13')](_0x2bf5('0xe'),_0x47cd16,_0xef2b6e['error'][_0x2bf5('0x14')]);return _0x5b22b3(_0xef2b6e[_0x2bf5('0x13')][_0x2bf5('0x14')]);}logger['error'](_0x2bf5('0xe'),_0x47cd16,_0xef2b6e[_0x2bf5('0x13')]['message']);return _0x39c1e4(_0xef2b6e[_0x2bf5('0x13')]['message']);}else{logger[_0x2bf5('0xd')](_0x2bf5('0xe'),_0x47cd16,_0x2bf5('0xf'));_0x39c1e4(_0xef2b6e[_0x2bf5('0x15')][_0x2bf5('0x14')]);}})[_0x2bf5('0x16')](function(_0x4b9b68){logger[_0x2bf5('0x13')]('MailSubstatus,\x20%s,\x20%s',_0x47cd16,_0x4b9b68);_0x5b22b3(_0x4b9b68);});});}
\ No newline at end of file
index 3c2e3c7..7ca33ce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4351=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailTransferReport.controller','get','isAuthenticated','index','/describe','describe','show','post','create','/:id','destroy','multer','util','path'];(function(_0x486f4a,_0x478dc7){var _0x135d99=function(_0x434008){while(--_0x434008){_0x486f4a['push'](_0x486f4a['shift']());}};_0x135d99(++_0x478dc7);}(_0x4351,0x1b5));var _0x1435=function(_0x1ac595,_0x5d2081){_0x1ac595=_0x1ac595-0x0;var _0x455fff=_0x4351[_0x1ac595];return _0x455fff;};'use strict';var multer=require(_0x1435('0x0'));var util=require(_0x1435('0x1'));var path=require(_0x1435('0x2'));var timeout=require(_0x1435('0x3'));var express=require(_0x1435('0x4'));var router=express[_0x1435('0x5')]();var auth=require(_0x1435('0x6'));var interaction=require(_0x1435('0x7'));var config=require(_0x1435('0x8'));var controller=require(_0x1435('0x9'));router[_0x1435('0xa')]('/',auth[_0x1435('0xb')](),controller[_0x1435('0xc')]);router[_0x1435('0xa')](_0x1435('0xd'),auth['isAuthenticated'](),controller[_0x1435('0xe')]);router['get']('/:id',auth[_0x1435('0xb')](),controller[_0x1435('0xf')]);router[_0x1435('0x10')]('/',auth[_0x1435('0xb')](),controller[_0x1435('0x11')]);router['put'](_0x1435('0x12'),auth[_0x1435('0xb')](),controller['update']);router['delete'](_0x1435('0x12'),auth['isAuthenticated'](),controller[_0x1435('0x13')]);module['exports']=router;
\ No newline at end of file
+var _0x3e24=['path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','./mailTransferReport.controller','get','isAuthenticated','index','/describe','/:id','show','post','create','put','destroy','exports','multer','util'];(function(_0xfd9b19,_0x21d75f){var _0x514918=function(_0x52e212){while(--_0x52e212){_0xfd9b19['push'](_0xfd9b19['shift']());}};_0x514918(++_0x21d75f);}(_0x3e24,0x167));var _0x43e2=function(_0x402950,_0x52d699){_0x402950=_0x402950-0x0;var _0x643b00=_0x3e24[_0x402950];return _0x643b00;};'use strict';var multer=require(_0x43e2('0x0'));var util=require(_0x43e2('0x1'));var path=require(_0x43e2('0x2'));var timeout=require(_0x43e2('0x3'));var express=require(_0x43e2('0x4'));var router=express['Router']();var auth=require(_0x43e2('0x5'));var interaction=require(_0x43e2('0x6'));var config=require('../../config/environment');var controller=require(_0x43e2('0x7'));router[_0x43e2('0x8')]('/',auth[_0x43e2('0x9')](),controller[_0x43e2('0xa')]);router[_0x43e2('0x8')](_0x43e2('0xb'),auth[_0x43e2('0x9')](),controller['describe']);router[_0x43e2('0x8')](_0x43e2('0xc'),auth['isAuthenticated'](),controller[_0x43e2('0xd')]);router[_0x43e2('0xe')]('/',auth['isAuthenticated'](),controller[_0x43e2('0xf')]);router[_0x43e2('0x10')]('/:id',auth[_0x43e2('0x9')](),controller['update']);router['delete']('/:id',auth[_0x43e2('0x9')](),controller[_0x43e2('0x11')]);module[_0x43e2('0x12')]=router;
\ No newline at end of file
index d7d4aa3..25ad01c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaef3=['moment','STRING','ENUM','account','agent','queue','DATE'];(function(_0xbe200f,_0x4b50eb){var _0x192597=function(_0x106cfd){while(--_0x106cfd){_0xbe200f['push'](_0xbe200f['shift']());}};_0x192597(++_0x4b50eb);}(_0xaef3,0x77));var _0x3aef=function(_0x305486,_0x24acd4){_0x305486=_0x305486-0x0;var _0xa04940=_0xaef3[_0x305486];return _0xa04940;};'use strict';var moment=require(_0x3aef('0x0'));var Sequelize=require('sequelize');module['exports']={'uniqueid':{'type':Sequelize[_0x3aef('0x1')],'allowNull':![]},'type':{'type':Sequelize[_0x3aef('0x2')](_0x3aef('0x3'),_0x3aef('0x4'),_0x3aef('0x5')),'allowNull':![],'defaultValue':'queue'},'transferredAt':{'type':Sequelize[_0x3aef('0x6')],'allowNull':![],'defaultValue':Sequelize['NOW']}};
\ No newline at end of file
+var _0x6853=['STRING','ENUM','queue','DATE','NOW','sequelize'];(function(_0x3e45d6,_0x4f9118){var _0xaca519=function(_0x466e19){while(--_0x466e19){_0x3e45d6['push'](_0x3e45d6['shift']());}};_0xaca519(++_0x4f9118);}(_0x6853,0x77));var _0x3685=function(_0x41ded9,_0x50cec9){_0x41ded9=_0x41ded9-0x0;var _0x46743d=_0x6853[_0x41ded9];return _0x46743d;};'use strict';var moment=require('moment');var Sequelize=require(_0x3685('0x0'));module['exports']={'uniqueid':{'type':Sequelize[_0x3685('0x1')],'allowNull':![]},'type':{'type':Sequelize[_0x3685('0x2')]('account','agent',_0x3685('0x3')),'allowNull':![],'defaultValue':_0x3685('0x3')},'transferredAt':{'type':Sequelize[_0x3685('0x4')],'allowNull':![],'defaultValue':Sequelize[_0x3685('0x5')]}};
\ No newline at end of file
index 1328770..ab4c578 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xda55=['update','destroy','then','error','stack','send','rawAttributes','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','sort','where','pick','filter','merge','map','key','field','options','includeAll','include','MailTransferReport','findAll','rows','catch','show','params','length','find','create','body','describe','html-pdf','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','path','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','reject','save'];(function(_0x2668c6,_0x4ec566){var _0x34e23f=function(_0x2077e8){while(--_0x2077e8){_0x2668c6['push'](_0x2668c6['shift']());}};_0x34e23f(++_0x4ec566);}(_0xda55,0x6d));var _0x5da5=function(_0x9641f8,_0x5c2372){_0x9641f8=_0x9641f8-0x0;var _0x3881b4=_0xda55[_0x9641f8];return _0x3881b4;};'use strict';var pdf=require(_0x5da5('0x0'));var emlformat=require(_0x5da5('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x5da5('0x2'));var rp=require(_0x5da5('0x3'));var moment=require(_0x5da5('0x4'));var BPromise=require(_0x5da5('0x5'));var Mustache=require(_0x5da5('0x6'));var util=require('util');var path=require(_0x5da5('0x7'));var sox=require('sox');var csv=require(_0x5da5('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x5da5('0x9'));var squel=require(_0x5da5('0xa'));var crypto=require(_0x5da5('0xb'));var jsforce=require(_0x5da5('0xc'));var deskjs=require(_0x5da5('0xd'));var toCsv=require(_0x5da5('0x8'));var querystring=require(_0x5da5('0xe'));var Papa=require(_0x5da5('0xf'));var Redis=require('ioredis');var authService=require(_0x5da5('0x10'));var qs=require(_0x5da5('0x11'));var hardwareService=require(_0x5da5('0x12'));var logger=require(_0x5da5('0x13'))(_0x5da5('0x14'));var utils=require(_0x5da5('0x15'));var config=require(_0x5da5('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2f4e4b,_0x3b5ff9){_0x3b5ff9=_0x3b5ff9||0xcc;return function(_0x4f813b){if(_0x4f813b){return _0x2f4e4b[_0x5da5('0x17')](_0x3b5ff9);}return _0x2f4e4b[_0x5da5('0x18')](_0x3b5ff9)[_0x5da5('0x19')]();};}function respondWithResult(_0x43d526,_0x1877d4){_0x1877d4=_0x1877d4||0xc8;return function(_0x440b8f){if(_0x440b8f){return _0x43d526['status'](_0x1877d4)['json'](_0x440b8f);}};}function respondWithFilteredResult(_0x4fa4b5,_0x4267cd){return function(_0x126fc8){if(_0x126fc8){var _0x13c701=_0x126fc8[_0x5da5('0x1a')],_0x665ce8=_0x4267cd['offset'],_0x11bd3=_0x4267cd[_0x5da5('0x1b')]+_0x4267cd[_0x5da5('0x1c')],_0x134afa;if(_0x11bd3>=_0x13c701){_0x11bd3=_0x13c701;_0x134afa=0xc8;}else{_0x134afa=0xce;}_0x4fa4b5[_0x5da5('0x18')](_0x134afa);return _0x4fa4b5[_0x5da5('0x1d')](_0x5da5('0x1e'),_0x665ce8+'-'+_0x11bd3+'/'+_0x13c701)[_0x5da5('0x1f')](_0x126fc8);}return null;};}function patchUpdates(_0x547c58){return function(_0x1920e2){try{jsonpatch[_0x5da5('0x20')](_0x1920e2,_0x547c58,!![]);}catch(_0x3d3d26){return BPromise[_0x5da5('0x21')](_0x3d3d26);}return _0x1920e2[_0x5da5('0x22')]();};}function saveUpdates(_0x513a34,_0x4393d7){return function(_0x3372fc){if(_0x3372fc){return _0x3372fc[_0x5da5('0x23')](_0x513a34)['then'](function(_0x3e0b28){return _0x3e0b28;});}return null;};}function removeEntity(_0x15aa62,_0x20c8a6){return function(_0x2e68d5){if(_0x2e68d5){return _0x2e68d5[_0x5da5('0x24')]()[_0x5da5('0x25')](function(){_0x15aa62['status'](0xcc)[_0x5da5('0x19')]();});}};}function handleEntityNotFound(_0x568ddf,_0x1b67c4){return function(_0x716ab7){if(!_0x716ab7){_0x568ddf[_0x5da5('0x17')](0x194);}return _0x716ab7;};}function handleError(_0x5d983c,_0x31c6ed){_0x31c6ed=_0x31c6ed||0x1f4;return function(_0x236bf3){logger[_0x5da5('0x26')](_0x236bf3[_0x5da5('0x27')]);if(_0x236bf3['name']){delete _0x236bf3['name'];}_0x5d983c['status'](_0x31c6ed)[_0x5da5('0x28')](_0x236bf3);};}exports['index']=function(_0x4e8890,_0x1f75f3){var _0x3974d8={},_0x5740a7={},_0x1798ae={'count':0x0,'rows':[]};var _0x1ab83e=db['MailTransferReport'][_0x5da5('0x29')];_0x5740a7[_0x5da5('0x2a')]=_[_0x5da5('0x2b')](_0x1ab83e);_0x5740a7[_0x5da5('0x2c')]=_[_0x5da5('0x2b')](_0x4e8890['query']);_0x5740a7[_0x5da5('0x2d')]=_[_0x5da5('0x2e')](_0x5740a7[_0x5da5('0x2a')],_0x5740a7[_0x5da5('0x2c')]);_0x3974d8['attributes']=_['intersection'](_0x5740a7['model'],qs[_0x5da5('0x2f')](_0x4e8890[_0x5da5('0x2c')][_0x5da5('0x2f')]));_0x3974d8[_0x5da5('0x30')]=_0x3974d8['attributes']['length']?_0x3974d8[_0x5da5('0x30')]:_0x5740a7['model'];if(!_0x4e8890['query'][_0x5da5('0x31')]('nolimit')){_0x3974d8[_0x5da5('0x1c')]=qs[_0x5da5('0x1c')](_0x4e8890[_0x5da5('0x2c')][_0x5da5('0x1c')]);_0x3974d8[_0x5da5('0x1b')]=qs[_0x5da5('0x1b')](_0x4e8890[_0x5da5('0x2c')][_0x5da5('0x1b')]);}_0x3974d8['order']=qs[_0x5da5('0x32')](_0x4e8890['query'][_0x5da5('0x32')]);_0x3974d8[_0x5da5('0x33')]=qs[_0x5da5('0x2d')](_[_0x5da5('0x34')](_0x4e8890[_0x5da5('0x2c')],_0x5740a7[_0x5da5('0x2d')]));if(_0x4e8890[_0x5da5('0x2c')][_0x5da5('0x35')]){_0x3974d8[_0x5da5('0x33')]=_[_0x5da5('0x36')](_0x3974d8[_0x5da5('0x33')],{'$or':_[_0x5da5('0x37')](_0x1ab83e,function(_0x3ba804){if(_0x3ba804['type'][_0x5da5('0x38')]!=='VIRTUAL'){var _0x2d6280={};_0x2d6280[_0x3ba804[_0x5da5('0x39')]]={'$like':'%'+_0x4e8890[_0x5da5('0x2c')][_0x5da5('0x35')]+'%'};return _0x2d6280;}})});}_0x3974d8=_['merge']({},_0x3974d8,_0x4e8890[_0x5da5('0x3a')]);var _0x2f2596={'where':_0x3974d8[_0x5da5('0x33')]};return db['MailTransferReport'][_0x5da5('0x1a')](_0x2f2596)[_0x5da5('0x25')](function(_0x4b8464){_0x1798ae[_0x5da5('0x1a')]=_0x4b8464;if(_0x4e8890[_0x5da5('0x2c')][_0x5da5('0x3b')]){_0x3974d8[_0x5da5('0x3c')]=[{'all':!![]}];}return db[_0x5da5('0x3d')][_0x5da5('0x3e')](_0x3974d8);})['then'](function(_0x1ab02){_0x1798ae[_0x5da5('0x3f')]=_0x1ab02;return _0x1798ae;})[_0x5da5('0x25')](respondWithFilteredResult(_0x1f75f3,_0x3974d8))[_0x5da5('0x40')](handleError(_0x1f75f3,null));};exports[_0x5da5('0x41')]=function(_0x53e540,_0x472e9f){var _0x21ffa1={'raw':!![],'where':{'id':_0x53e540[_0x5da5('0x42')]['id']}},_0x5a189e={};_0x5a189e['model']=_['keys'](db[_0x5da5('0x3d')][_0x5da5('0x29')]);_0x5a189e[_0x5da5('0x2c')]=_[_0x5da5('0x2b')](_0x53e540[_0x5da5('0x2c')]);_0x5a189e[_0x5da5('0x2d')]=_[_0x5da5('0x2e')](_0x5a189e[_0x5da5('0x2a')],_0x5a189e[_0x5da5('0x2c')]);_0x21ffa1[_0x5da5('0x30')]=_[_0x5da5('0x2e')](_0x5a189e[_0x5da5('0x2a')],qs[_0x5da5('0x2f')](_0x53e540[_0x5da5('0x2c')][_0x5da5('0x2f')]));_0x21ffa1[_0x5da5('0x30')]=_0x21ffa1[_0x5da5('0x30')][_0x5da5('0x43')]?_0x21ffa1[_0x5da5('0x30')]:_0x5a189e[_0x5da5('0x2a')];if(_0x53e540['query']['includeAll']){_0x21ffa1[_0x5da5('0x3c')]=[{'all':!![]}];}_0x21ffa1=_[_0x5da5('0x36')]({},_0x21ffa1,_0x53e540['options']);return db[_0x5da5('0x3d')][_0x5da5('0x44')](_0x21ffa1)[_0x5da5('0x25')](handleEntityNotFound(_0x472e9f,null))[_0x5da5('0x25')](respondWithResult(_0x472e9f,null))[_0x5da5('0x40')](handleError(_0x472e9f,null));};exports[_0x5da5('0x45')]=function(_0x2775da,_0x362028){return db[_0x5da5('0x3d')][_0x5da5('0x45')](_0x2775da['body'],{})[_0x5da5('0x25')](respondWithResult(_0x362028,0xc9))['catch'](handleError(_0x362028,null));};exports['update']=function(_0x2a0fb6,_0x167bde){if(_0x2a0fb6[_0x5da5('0x46')]['id']){delete _0x2a0fb6[_0x5da5('0x46')]['id'];}return db[_0x5da5('0x3d')][_0x5da5('0x44')]({'where':{'id':_0x2a0fb6['params']['id']}})[_0x5da5('0x25')](handleEntityNotFound(_0x167bde,null))['then'](saveUpdates(_0x2a0fb6['body'],null))[_0x5da5('0x25')](respondWithResult(_0x167bde,null))[_0x5da5('0x40')](handleError(_0x167bde,null));};exports['destroy']=function(_0x419d74,_0x322b08){return db[_0x5da5('0x3d')][_0x5da5('0x44')]({'where':{'id':_0x419d74[_0x5da5('0x42')]['id']}})['then'](handleEntityNotFound(_0x322b08,null))[_0x5da5('0x25')](removeEntity(_0x322b08,null))['catch'](handleError(_0x322b08,null));};exports['describe']=function(_0x361f5f,_0x57eca7){return db[_0x5da5('0x3d')][_0x5da5('0x47')]()[_0x5da5('0x25')](respondWithResult(_0x57eca7,null))[_0x5da5('0x40')](handleError(_0x57eca7,null));};
\ No newline at end of file
+var _0xe5b5=['findAll','catch','params','find','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','set','reject','update','then','error','name','index','MailTransferReport','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','type','key','field','options','includeAll','include'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0xe5b5,0x12b));var _0x5e5b=function(_0x1b2422,_0x1e98d4){_0x1b2422=_0x1b2422-0x0;var _0x376573=_0xe5b5[_0x1b2422];return _0x376573;};'use strict';var pdf=require(_0x5e5b('0x0'));var emlformat=require(_0x5e5b('0x1'));var rimraf=require(_0x5e5b('0x2'));var zipdir=require(_0x5e5b('0x3'));var jsonpatch=require(_0x5e5b('0x4'));var rp=require(_0x5e5b('0x5'));var moment=require(_0x5e5b('0x6'));var BPromise=require(_0x5e5b('0x7'));var Mustache=require(_0x5e5b('0x8'));var util=require(_0x5e5b('0x9'));var path=require(_0x5e5b('0xa'));var sox=require(_0x5e5b('0xb'));var csv=require(_0x5e5b('0xc'));var ejs=require(_0x5e5b('0xd'));var fs=require('fs');var _=require(_0x5e5b('0xe'));var squel=require(_0x5e5b('0xf'));var crypto=require(_0x5e5b('0x10'));var jsforce=require(_0x5e5b('0x11'));var deskjs=require(_0x5e5b('0x12'));var toCsv=require(_0x5e5b('0xc'));var querystring=require(_0x5e5b('0x13'));var Papa=require(_0x5e5b('0x14'));var Redis=require(_0x5e5b('0x15'));var authService=require('../../components/auth/service');var qs=require(_0x5e5b('0x16'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x5e5b('0x17'))(_0x5e5b('0x18'));var utils=require(_0x5e5b('0x19'));var config=require(_0x5e5b('0x1a'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4a1424,_0x5ebf65){_0x5ebf65=_0x5ebf65||0xcc;return function(_0x310f71){if(_0x310f71){return _0x4a1424[_0x5e5b('0x1b')](_0x5ebf65);}return _0x4a1424[_0x5e5b('0x1c')](_0x5ebf65)[_0x5e5b('0x1d')]();};}function respondWithResult(_0x13a01e,_0x1e3483){_0x1e3483=_0x1e3483||0xc8;return function(_0x2e331d){if(_0x2e331d){return _0x13a01e['status'](_0x1e3483)[_0x5e5b('0x1e')](_0x2e331d);}};}function respondWithFilteredResult(_0x2e92c3,_0x4ff37b){return function(_0x227417){if(_0x227417){var _0x578c14=_0x227417[_0x5e5b('0x1f')],_0x4e9509=_0x4ff37b['offset'],_0x13a1cb=_0x4ff37b[_0x5e5b('0x20')]+_0x4ff37b['limit'],_0x444435;if(_0x13a1cb>=_0x578c14){_0x13a1cb=_0x578c14;_0x444435=0xc8;}else{_0x444435=0xce;}_0x2e92c3[_0x5e5b('0x1c')](_0x444435);return _0x2e92c3[_0x5e5b('0x21')]('Content-Range',_0x4e9509+'-'+_0x13a1cb+'/'+_0x578c14)[_0x5e5b('0x1e')](_0x227417);}return null;};}function patchUpdates(_0x1560e1){return function(_0x2281c8){try{jsonpatch['apply'](_0x2281c8,_0x1560e1,!![]);}catch(_0x2bf0b7){return BPromise[_0x5e5b('0x22')](_0x2bf0b7);}return _0x2281c8['save']();};}function saveUpdates(_0x2fdc38,_0x1aa0c2){return function(_0x3c488e){if(_0x3c488e){return _0x3c488e[_0x5e5b('0x23')](_0x2fdc38)[_0x5e5b('0x24')](function(_0x33d61b){return _0x33d61b;});}return null;};}function removeEntity(_0x93df5c,_0x37552c){return function(_0x4a78e3){if(_0x4a78e3){return _0x4a78e3['destroy']()[_0x5e5b('0x24')](function(){_0x93df5c[_0x5e5b('0x1c')](0xcc)[_0x5e5b('0x1d')]();});}};}function handleEntityNotFound(_0xe1c268,_0x2e38ed){return function(_0x28cd95){if(!_0x28cd95){_0xe1c268[_0x5e5b('0x1b')](0x194);}return _0x28cd95;};}function handleError(_0x18903e,_0x161599){_0x161599=_0x161599||0x1f4;return function(_0x26bc02){logger[_0x5e5b('0x25')](_0x26bc02['stack']);if(_0x26bc02[_0x5e5b('0x26')]){delete _0x26bc02[_0x5e5b('0x26')];}_0x18903e[_0x5e5b('0x1c')](_0x161599)['send'](_0x26bc02);};}exports[_0x5e5b('0x27')]=function(_0xdb2863,_0x5ee866){var _0x13ff91={},_0x21c74b={},_0x39ce16={'count':0x0,'rows':[]};var _0x36b595=db[_0x5e5b('0x28')][_0x5e5b('0x29')];_0x21c74b[_0x5e5b('0x2a')]=_[_0x5e5b('0x2b')](_0x36b595);_0x21c74b[_0x5e5b('0x2c')]=_[_0x5e5b('0x2b')](_0xdb2863[_0x5e5b('0x2c')]);_0x21c74b[_0x5e5b('0x2d')]=_['intersection'](_0x21c74b['model'],_0x21c74b[_0x5e5b('0x2c')]);_0x13ff91[_0x5e5b('0x2e')]=_[_0x5e5b('0x2f')](_0x21c74b[_0x5e5b('0x2a')],qs[_0x5e5b('0x30')](_0xdb2863['query'][_0x5e5b('0x30')]));_0x13ff91['attributes']=_0x13ff91[_0x5e5b('0x2e')][_0x5e5b('0x31')]?_0x13ff91[_0x5e5b('0x2e')]:_0x21c74b[_0x5e5b('0x2a')];if(!_0xdb2863['query'][_0x5e5b('0x32')](_0x5e5b('0x33'))){_0x13ff91['limit']=qs[_0x5e5b('0x34')](_0xdb2863[_0x5e5b('0x2c')][_0x5e5b('0x34')]);_0x13ff91[_0x5e5b('0x20')]=qs[_0x5e5b('0x20')](_0xdb2863[_0x5e5b('0x2c')][_0x5e5b('0x20')]);}_0x13ff91[_0x5e5b('0x35')]=qs['sort'](_0xdb2863[_0x5e5b('0x2c')][_0x5e5b('0x36')]);_0x13ff91[_0x5e5b('0x37')]=qs[_0x5e5b('0x2d')](_[_0x5e5b('0x38')](_0xdb2863[_0x5e5b('0x2c')],_0x21c74b['filters']));if(_0xdb2863['query'][_0x5e5b('0x39')]){_0x13ff91[_0x5e5b('0x37')]=_[_0x5e5b('0x3a')](_0x13ff91['where'],{'$or':_[_0x5e5b('0x3b')](_0x36b595,function(_0x14bf53){if(_0x14bf53[_0x5e5b('0x3c')][_0x5e5b('0x3d')]!=='VIRTUAL'){var _0x5b3e0d={};_0x5b3e0d[_0x14bf53[_0x5e5b('0x3e')]]={'$like':'%'+_0xdb2863['query']['filter']+'%'};return _0x5b3e0d;}})});}_0x13ff91=_[_0x5e5b('0x3a')]({},_0x13ff91,_0xdb2863[_0x5e5b('0x3f')]);var _0xee3e6f={'where':_0x13ff91['where']};return db[_0x5e5b('0x28')]['count'](_0xee3e6f)['then'](function(_0x261057){_0x39ce16[_0x5e5b('0x1f')]=_0x261057;if(_0xdb2863[_0x5e5b('0x2c')][_0x5e5b('0x40')]){_0x13ff91[_0x5e5b('0x41')]=[{'all':!![]}];}return db[_0x5e5b('0x28')][_0x5e5b('0x42')](_0x13ff91);})[_0x5e5b('0x24')](function(_0x1034fa){_0x39ce16['rows']=_0x1034fa;return _0x39ce16;})[_0x5e5b('0x24')](respondWithFilteredResult(_0x5ee866,_0x13ff91))[_0x5e5b('0x43')](handleError(_0x5ee866,null));};exports['show']=function(_0x204487,_0x4b54b0){var _0x125f95={'raw':!![],'where':{'id':_0x204487[_0x5e5b('0x44')]['id']}},_0x14b152={};_0x14b152[_0x5e5b('0x2a')]=_[_0x5e5b('0x2b')](db[_0x5e5b('0x28')][_0x5e5b('0x29')]);_0x14b152[_0x5e5b('0x2c')]=_[_0x5e5b('0x2b')](_0x204487[_0x5e5b('0x2c')]);_0x14b152[_0x5e5b('0x2d')]=_['intersection'](_0x14b152[_0x5e5b('0x2a')],_0x14b152[_0x5e5b('0x2c')]);_0x125f95[_0x5e5b('0x2e')]=_['intersection'](_0x14b152[_0x5e5b('0x2a')],qs[_0x5e5b('0x30')](_0x204487['query'][_0x5e5b('0x30')]));_0x125f95[_0x5e5b('0x2e')]=_0x125f95['attributes'][_0x5e5b('0x31')]?_0x125f95['attributes']:_0x14b152['model'];if(_0x204487['query'][_0x5e5b('0x40')]){_0x125f95['include']=[{'all':!![]}];}_0x125f95=_[_0x5e5b('0x3a')]({},_0x125f95,_0x204487['options']);return db[_0x5e5b('0x28')][_0x5e5b('0x45')](_0x125f95)[_0x5e5b('0x24')](handleEntityNotFound(_0x4b54b0,null))[_0x5e5b('0x24')](respondWithResult(_0x4b54b0,null))[_0x5e5b('0x43')](handleError(_0x4b54b0,null));};exports[_0x5e5b('0x46')]=function(_0x8b03f2,_0x4e4d03){return db['MailTransferReport'][_0x5e5b('0x46')](_0x8b03f2['body'],{})['then'](respondWithResult(_0x4e4d03,0xc9))['catch'](handleError(_0x4e4d03,null));};exports[_0x5e5b('0x23')]=function(_0x5d63cc,_0x42f42d){if(_0x5d63cc[_0x5e5b('0x47')]['id']){delete _0x5d63cc[_0x5e5b('0x47')]['id'];}return db[_0x5e5b('0x28')][_0x5e5b('0x45')]({'where':{'id':_0x5d63cc[_0x5e5b('0x44')]['id']}})['then'](handleEntityNotFound(_0x42f42d,null))[_0x5e5b('0x24')](saveUpdates(_0x5d63cc[_0x5e5b('0x47')],null))['then'](respondWithResult(_0x42f42d,null))[_0x5e5b('0x43')](handleError(_0x42f42d,null));};exports['destroy']=function(_0x41e4b3,_0x36d8fa){return db[_0x5e5b('0x28')][_0x5e5b('0x45')]({'where':{'id':_0x41e4b3['params']['id']}})[_0x5e5b('0x24')](handleEntityNotFound(_0x36d8fa,null))[_0x5e5b('0x24')](removeEntity(_0x36d8fa,null))['catch'](handleError(_0x36d8fa,null));};exports[_0x5e5b('0x48')]=function(_0x18844c,_0x1a1437){return db[_0x5e5b('0x28')][_0x5e5b('0x48')]()[_0x5e5b('0x24')](respondWithResult(_0x1a1437,null))['catch'](handleError(_0x1a1437,null));};
\ No newline at end of file
index f273054..633ce6c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x53ec=['path','../../config/environment','./mailTransferReport.attributes','define','MailTransferReport','uniqueid','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0x2f7cb2,_0x359014){var _0x3aba69=function(_0x17b85e){while(--_0x17b85e){_0x2f7cb2['push'](_0x2f7cb2['shift']());}};_0x3aba69(++_0x359014);}(_0x53ec,0x192));var _0xc53e=function(_0x2a40b3,_0xe1c253){_0x2a40b3=_0x2a40b3-0x0;var _0x4ac6cb=_0x53ec[_0x2a40b3];return _0x4ac6cb;};'use strict';var _=require(_0xc53e('0x0'));var util=require(_0xc53e('0x1'));var logger=require(_0xc53e('0x2'))(_0xc53e('0x3'));var moment=require(_0xc53e('0x4'));var BPromise=require(_0xc53e('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xc53e('0x6'));var rimraf=require('rimraf');var config=require(_0xc53e('0x7'));var attributes=require(_0xc53e('0x8'));module['exports']=function(_0x2f1414,_0x4f989b){return _0x2f1414[_0xc53e('0x9')](_0xc53e('0xa'),attributes,{'tableName':'report_mail_transfer','paranoid':![],'indexes':[{'name':_0xc53e('0xb'),'fields':[_0xc53e('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x31f0=['request-promise','path','../../config/environment','./mailTransferReport.attributes','define','report_mail_transfer','uniqueid','lodash','../../config/logger','moment','bluebird'];(function(_0x31a26b,_0x54081e){var _0x2d7ac1=function(_0x7510d2){while(--_0x7510d2){_0x31a26b['push'](_0x31a26b['shift']());}};_0x2d7ac1(++_0x54081e);}(_0x31f0,0xb7));var _0x031f=function(_0x4bdc34,_0x8f749){_0x4bdc34=_0x4bdc34-0x0;var _0x211486=_0x31f0[_0x4bdc34];return _0x211486;};'use strict';var _=require(_0x031f('0x0'));var util=require('util');var logger=require(_0x031f('0x1'))('api');var moment=require(_0x031f('0x2'));var BPromise=require(_0x031f('0x3'));var rp=require(_0x031f('0x4'));var fs=require('fs');var path=require(_0x031f('0x5'));var rimraf=require('rimraf');var config=require(_0x031f('0x6'));var attributes=require(_0x031f('0x7'));module['exports']=function(_0x4c0f94,_0x56328c){return _0x4c0f94[_0x031f('0x8')]('MailTransferReport',attributes,{'tableName':_0x031f('0x9'),'paranoid':![],'indexes':[{'name':_0x031f('0xa'),'fields':[_0x031f('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
index 0120597..fba5170 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x81df=['../../config/logger','../../config/environment','jayson/promise','http','request','then','info','MailTransferReport,\x20%s,\x20%s','request\x20sent','debug','stringify','code','error','message','catch','lodash','util','moment','ioredis','../../mysqldb','../../config/utils'];(function(_0x3c007e,_0x2e6adc){var _0x851f31=function(_0x12bf84){while(--_0x12bf84){_0x3c007e['push'](_0x3c007e['shift']());}};_0x851f31(++_0x2e6adc);}(_0x81df,0x174));var _0xf81d=function(_0x1b6178,_0x292eca){_0x1b6178=_0x1b6178-0x0;var _0x36c5f0=_0x81df[_0x1b6178];return _0x36c5f0;};'use strict';var _=require(_0xf81d('0x0'));var util=require(_0xf81d('0x1'));var moment=require(_0xf81d('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xf81d('0x3'));var db=require(_0xf81d('0x4'))['db'];var utils=require(_0xf81d('0x5'));var logger=require(_0xf81d('0x6'))('rpc');var config=require(_0xf81d('0x7'));var jayson=require(_0xf81d('0x8'));var client=jayson['client'][_0xf81d('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x314b33,_0x202dfd,_0x851145){return new BPromise(function(_0x17234e,_0x218a44){return client[_0xf81d('0xa')](_0x314b33,_0x851145)[_0xf81d('0xb')](function(_0x239f73){logger[_0xf81d('0xc')](_0xf81d('0xd'),_0x202dfd,_0xf81d('0xe'));logger[_0xf81d('0xf')]('MailTransferReport,\x20%s,\x20%s,\x20%s',_0x202dfd,_0xf81d('0xe'),JSON[_0xf81d('0x10')](_0x239f73));if(_0x239f73['error']){if(_0x239f73['error'][_0xf81d('0x11')]===0x1f4){logger[_0xf81d('0x12')](_0xf81d('0xd'),_0x202dfd,_0x239f73[_0xf81d('0x12')]['message']);return _0x218a44(_0x239f73['error'][_0xf81d('0x13')]);}logger[_0xf81d('0x12')](_0xf81d('0xd'),_0x202dfd,_0x239f73['error']['message']);return _0x17234e(_0x239f73['error'][_0xf81d('0x13')]);}else{logger[_0xf81d('0xc')]('MailTransferReport,\x20%s,\x20%s',_0x202dfd,_0xf81d('0xe'));_0x17234e(_0x239f73['result'][_0xf81d('0x13')]);}})[_0xf81d('0x14')](function(_0xd732cc){logger['error'](_0xf81d('0xd'),_0x202dfd,_0xd732cc);_0x218a44(_0xd732cc);});});}
\ No newline at end of file
+var _0x070f=['error','code','message','result','catch','lodash','util','bluebird','ioredis','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','info','MailTransferReport,\x20%s,\x20%s','debug','MailTransferReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify'];(function(_0x5dce85,_0x1a5102){var _0xf20074=function(_0x2ed09b){while(--_0x2ed09b){_0x5dce85['push'](_0x5dce85['shift']());}};_0xf20074(++_0x1a5102);}(_0x070f,0x73));var _0xf070=function(_0x5b08ac,_0x2f2af7){_0x5b08ac=_0x5b08ac-0x0;var _0x4a8e61=_0x070f[_0x5b08ac];return _0x4a8e61;};'use strict';var _=require(_0xf070('0x0'));var util=require(_0xf070('0x1'));var moment=require('moment');var BPromise=require(_0xf070('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xf070('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xf070('0x4'));var logger=require(_0xf070('0x5'))(_0xf070('0x6'));var config=require('../../config/environment');var jayson=require(_0xf070('0x7'));var client=jayson[_0xf070('0x8')][_0xf070('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x5a329e,_0x14a011,_0x23e492){return new BPromise(function(_0x490b2c,_0x179e13){return client[_0xf070('0xa')](_0x5a329e,_0x23e492)['then'](function(_0x3dfc6f){logger[_0xf070('0xb')](_0xf070('0xc'),_0x14a011,'request\x20sent');logger[_0xf070('0xd')](_0xf070('0xe'),_0x14a011,_0xf070('0xf'),JSON[_0xf070('0x10')](_0x3dfc6f));if(_0x3dfc6f['error']){if(_0x3dfc6f[_0xf070('0x11')][_0xf070('0x12')]===0x1f4){logger[_0xf070('0x11')]('MailTransferReport,\x20%s,\x20%s',_0x14a011,_0x3dfc6f[_0xf070('0x11')][_0xf070('0x13')]);return _0x179e13(_0x3dfc6f[_0xf070('0x11')][_0xf070('0x13')]);}logger[_0xf070('0x11')](_0xf070('0xc'),_0x14a011,_0x3dfc6f[_0xf070('0x11')][_0xf070('0x13')]);return _0x490b2c(_0x3dfc6f[_0xf070('0x11')][_0xf070('0x13')]);}else{logger[_0xf070('0xb')](_0xf070('0xc'),_0x14a011,'request\x20sent');_0x490b2c(_0x3dfc6f[_0xf070('0x14')][_0xf070('0x13')]);}})[_0xf070('0x15')](function(_0x36d0f5){logger[_0xf070('0x11')]('MailTransferReport,\x20%s,\x20%s',_0x14a011,_0x36d0f5);_0x179e13(_0x36d0f5);});});}
\ No newline at end of file
index dbdb986..53687e3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3206=['show','post','create','put','update','delete','destroy','exports','multer','express','Router','../../components/auth/service','../../components/interaction/service','./memberReport.controller','get','index','/describe','isAuthenticated','describe','/:id'];(function(_0x49404d,_0x20bd51){var _0x5a93f0=function(_0xd5d3fc){while(--_0xd5d3fc){_0x49404d['push'](_0x49404d['shift']());}};_0x5a93f0(++_0x20bd51);}(_0x3206,0xa8));var _0x6320=function(_0x58ca7d,_0x27f5ea){_0x58ca7d=_0x58ca7d-0x0;var _0x152c4c=_0x3206[_0x58ca7d];return _0x152c4c;};'use strict';var multer=require(_0x6320('0x0'));var util=require('util');var path=require('path');var timeout=require('connect-timeout');var express=require(_0x6320('0x1'));var router=express[_0x6320('0x2')]();var auth=require(_0x6320('0x3'));var interaction=require(_0x6320('0x4'));var config=require('../../config/environment');var controller=require(_0x6320('0x5'));router[_0x6320('0x6')]('/',auth['isAuthenticated'](),controller[_0x6320('0x7')]);router[_0x6320('0x6')](_0x6320('0x8'),auth[_0x6320('0x9')](),controller[_0x6320('0xa')]);router[_0x6320('0x6')](_0x6320('0xb'),auth['isAuthenticated'](),controller[_0x6320('0xc')]);router[_0x6320('0xd')]('/',auth[_0x6320('0x9')](),controller[_0x6320('0xe')]);router[_0x6320('0xf')]('/:id',auth[_0x6320('0x9')](),controller[_0x6320('0x10')]);router[_0x6320('0x11')](_0x6320('0xb'),auth['isAuthenticated'](),controller[_0x6320('0x12')]);module[_0x6320('0x13')]=router;
\ No newline at end of file
+var _0xf2cd=['/:id','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','describe','show','put'];(function(_0x2d8bb7,_0x569738){var _0x44e852=function(_0x527d7b){while(--_0x527d7b){_0x2d8bb7['push'](_0x2d8bb7['shift']());}};_0x44e852(++_0x569738);}(_0xf2cd,0x1bc));var _0xdf2c=function(_0x344adc,_0x183c37){_0x344adc=_0x344adc-0x0;var _0x4014b2=_0xf2cd[_0x344adc];return _0x4014b2;};'use strict';var multer=require(_0xdf2c('0x0'));var util=require(_0xdf2c('0x1'));var path=require(_0xdf2c('0x2'));var timeout=require(_0xdf2c('0x3'));var express=require(_0xdf2c('0x4'));var router=express[_0xdf2c('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0xdf2c('0x6'));var config=require(_0xdf2c('0x7'));var controller=require('./memberReport.controller');router[_0xdf2c('0x8')]('/',auth[_0xdf2c('0x9')](),controller[_0xdf2c('0xa')]);router[_0xdf2c('0x8')](_0xdf2c('0xb'),auth['isAuthenticated'](),controller[_0xdf2c('0xc')]);router[_0xdf2c('0x8')]('/:id',auth[_0xdf2c('0x9')](),controller[_0xdf2c('0xd')]);router['post']('/',auth[_0xdf2c('0x9')](),controller['create']);router[_0xdf2c('0xe')]('/:id',auth[_0xdf2c('0x9')](),controller['update']);router['delete'](_0xdf2c('0xf'),auth[_0xdf2c('0x9')](),controller['destroy']);module[_0xdf2c('0x10')]=router;
\ No newline at end of file
index 5ef9e30..5449170 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdbf4=['STRING','LOGIN,\x20PAUSE,\x20TALKING','DATE','getDataValue','enterAt','setDataValue','exitAt','talk:[inbound,\x20outbound],\x20pause:[reason]','talk:[destination]','talk:[dial\x20string]','talk:[queue]','INTEGER','sequelize','moment'];(function(_0x184632,_0x392ed8){var _0x296457=function(_0x53cfff){while(--_0x53cfff){_0x184632['push'](_0x184632['shift']());}};_0x296457(++_0x392ed8);}(_0xdbf4,0x1be));var _0x4dbf=function(_0x557b48,_0x338f2e){_0x557b48=_0x557b48-0x0;var _0x51aad5=_0xdbf4[_0x557b48];return _0x51aad5;};'use strict';var Sequelize=require(_0x4dbf('0x0'));var moment=require(_0x4dbf('0x1'));module['exports']={'channel':{'type':Sequelize[_0x4dbf('0x2')]},'membername':{'type':Sequelize[_0x4dbf('0x2')]},'interface':{'type':Sequelize['STRING']},'type':{'type':Sequelize['STRING'],'defaultValue':'DEFAULT\x20PAUSE','comment':_0x4dbf('0x3')},'duration':{'type':Sequelize['INTEGER']},'enterAt':{'type':Sequelize[_0x4dbf('0x4')]},'exitAt':{'type':Sequelize[_0x4dbf('0x4')],'set':function(_0x1c29cc){var _0x43972b=moment(_0x1c29cc);var _0x13316f=moment(this[_0x4dbf('0x5')](_0x4dbf('0x6')));var _0x4752e5=_0x43972b['diff'](_0x13316f,'seconds');this[_0x4dbf('0x7')](_0x4dbf('0x8'),_0x1c29cc);this[_0x4dbf('0x7')]('duration',_0x4752e5||null);}},'data1':{'type':Sequelize[_0x4dbf('0x2')],'comment':_0x4dbf('0x9')},'data2':{'type':Sequelize[_0x4dbf('0x2')],'comment':'talk:[start]'},'data3':{'type':Sequelize[_0x4dbf('0x2')],'comment':_0x4dbf('0xa')},'data4':{'type':Sequelize[_0x4dbf('0x2')],'comment':_0x4dbf('0xb')},'data5':{'type':Sequelize[_0x4dbf('0x2')],'comment':_0x4dbf('0xc')},'role':{'type':Sequelize[_0x4dbf('0x2')]},'internal':{'type':Sequelize[_0x4dbf('0xd')]},'uniqueid':{'type':Sequelize[_0x4dbf('0x2')]}};
\ No newline at end of file
+var _0x5836=['seconds','setDataValue','exitAt','duration','talk:[inbound,\x20outbound],\x20pause:[reason]','talk:[start]','talk:[destination]','talk:[queue]','sequelize','exports','STRING','DEFAULT\x20PAUSE','INTEGER','enterAt','diff'];(function(_0x5445a1,_0x1ba385){var _0x3bf175=function(_0x3e999a){while(--_0x3e999a){_0x5445a1['push'](_0x5445a1['shift']());}};_0x3bf175(++_0x1ba385);}(_0x5836,0xbc));var _0x6583=function(_0x53915d,_0x1daa70){_0x53915d=_0x53915d-0x0;var _0x11e040=_0x5836[_0x53915d];return _0x11e040;};'use strict';var Sequelize=require(_0x6583('0x0'));var moment=require('moment');module[_0x6583('0x1')]={'channel':{'type':Sequelize[_0x6583('0x2')]},'membername':{'type':Sequelize[_0x6583('0x2')]},'interface':{'type':Sequelize[_0x6583('0x2')]},'type':{'type':Sequelize[_0x6583('0x2')],'defaultValue':_0x6583('0x3'),'comment':'LOGIN,\x20PAUSE,\x20TALKING'},'duration':{'type':Sequelize[_0x6583('0x4')]},'enterAt':{'type':Sequelize['DATE']},'exitAt':{'type':Sequelize['DATE'],'set':function(_0x5135b4){var _0x5067ff=moment(_0x5135b4);var _0x390eb7=moment(this['getDataValue'](_0x6583('0x5')));var _0x8b2ef9=_0x5067ff[_0x6583('0x6')](_0x390eb7,_0x6583('0x7'));this[_0x6583('0x8')](_0x6583('0x9'),_0x5135b4);this[_0x6583('0x8')](_0x6583('0xa'),_0x8b2ef9||null);}},'data1':{'type':Sequelize[_0x6583('0x2')],'comment':_0x6583('0xb')},'data2':{'type':Sequelize[_0x6583('0x2')],'comment':_0x6583('0xc')},'data3':{'type':Sequelize[_0x6583('0x2')],'comment':_0x6583('0xd')},'data4':{'type':Sequelize[_0x6583('0x2')],'comment':'talk:[dial\x20string]'},'data5':{'type':Sequelize[_0x6583('0x2')],'comment':_0x6583('0xe')},'role':{'type':Sequelize['STRING']},'internal':{'type':Sequelize['INTEGER']},'uniqueid':{'type':Sequelize[_0x6583('0x2')]}};
\ No newline at end of file
index 4d8d8c1..80601d2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7238=['bluebird','util','path','to-csv','ejs','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','count','offset','limit','set','Content-Range','json','apply','reject','update','then','end','error','name','send','index','query','keys','filters','intersection','attributes','fields','length','model','hasOwnProperty','nolimit','sort','where','pick','filter','merge','map','key','VIRTUAL','options','MemberReport','includeAll','include','rows','catch','show','params','rawAttributes','find','create','body','destroy','describe','eml-format','zip-dir','fast-json-patch','request-promise','moment'];(function(_0x119cd8,_0x556b73){var _0x7072a3=function(_0x5908d1){while(--_0x5908d1){_0x119cd8['push'](_0x119cd8['shift']());}};_0x7072a3(++_0x556b73);}(_0x7238,0x8b));var _0x8723=function(_0x41d184,_0x328e05){_0x41d184=_0x41d184-0x0;var _0x4a16df=_0x7238[_0x41d184];return _0x4a16df;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x8723('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x8723('0x1'));var jsonpatch=require(_0x8723('0x2'));var rp=require(_0x8723('0x3'));var moment=require(_0x8723('0x4'));var BPromise=require(_0x8723('0x5'));var Mustache=require('mustache');var util=require(_0x8723('0x6'));var path=require(_0x8723('0x7'));var sox=require('sox');var csv=require(_0x8723('0x8'));var ejs=require(_0x8723('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x8723('0xa'));var crypto=require('crypto');var jsforce=require(_0x8723('0xb'));var deskjs=require(_0x8723('0xc'));var toCsv=require(_0x8723('0x8'));var querystring=require(_0x8723('0xd'));var Papa=require(_0x8723('0xe'));var Redis=require(_0x8723('0xf'));var authService=require(_0x8723('0x10'));var qs=require(_0x8723('0x11'));var hardwareService=require(_0x8723('0x12'));var logger=require(_0x8723('0x13'))(_0x8723('0x14'));var utils=require(_0x8723('0x15'));var config=require(_0x8723('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x241f89,_0x4ed485){_0x4ed485=_0x4ed485||0xcc;return function(_0x2941ed){if(_0x2941ed){return _0x241f89[_0x8723('0x17')](_0x4ed485);}return _0x241f89[_0x8723('0x18')](_0x4ed485)['end']();};}function respondWithResult(_0xf32692,_0x3bae3b){_0x3bae3b=_0x3bae3b||0xc8;return function(_0x1d1a07){if(_0x1d1a07){return _0xf32692['status'](_0x3bae3b)['json'](_0x1d1a07);}};}function respondWithFilteredResult(_0xbc4903,_0x32225a){return function(_0x4c9fdb){if(_0x4c9fdb){var _0x48ae11=_0x4c9fdb[_0x8723('0x19')],_0x527260=_0x32225a[_0x8723('0x1a')],_0x441f08=_0x32225a[_0x8723('0x1a')]+_0x32225a[_0x8723('0x1b')],_0x858ef9;if(_0x441f08>=_0x48ae11){_0x441f08=_0x48ae11;_0x858ef9=0xc8;}else{_0x858ef9=0xce;}_0xbc4903[_0x8723('0x18')](_0x858ef9);return _0xbc4903[_0x8723('0x1c')](_0x8723('0x1d'),_0x527260+'-'+_0x441f08+'/'+_0x48ae11)[_0x8723('0x1e')](_0x4c9fdb);}return null;};}function patchUpdates(_0xb99874){return function(_0x24bbac){try{jsonpatch[_0x8723('0x1f')](_0x24bbac,_0xb99874,!![]);}catch(_0x2a9368){return BPromise[_0x8723('0x20')](_0x2a9368);}return _0x24bbac['save']();};}function saveUpdates(_0x2c8294,_0x3700d5){return function(_0x396c93){if(_0x396c93){return _0x396c93[_0x8723('0x21')](_0x2c8294)[_0x8723('0x22')](function(_0x1129e9){return _0x1129e9;});}return null;};}function removeEntity(_0x3b9047,_0x12aa17){return function(_0x58321b){if(_0x58321b){return _0x58321b['destroy']()[_0x8723('0x22')](function(){_0x3b9047[_0x8723('0x18')](0xcc)[_0x8723('0x23')]();});}};}function handleEntityNotFound(_0x4b6622,_0x168635){return function(_0x559690){if(!_0x559690){_0x4b6622[_0x8723('0x17')](0x194);}return _0x559690;};}function handleError(_0x464ead,_0x1be8e4){_0x1be8e4=_0x1be8e4||0x1f4;return function(_0x56f48){logger[_0x8723('0x24')](_0x56f48['stack']);if(_0x56f48[_0x8723('0x25')]){delete _0x56f48['name'];}_0x464ead['status'](_0x1be8e4)[_0x8723('0x26')](_0x56f48);};}exports[_0x8723('0x27')]=function(_0x4ee01c,_0x19023d){var _0x315c59={},_0x3d5041={},_0x4d160b={'count':0x0,'rows':[]};var _0xf81d49=db['MemberReport']['rawAttributes'];_0x3d5041['model']=_['keys'](_0xf81d49);_0x3d5041[_0x8723('0x28')]=_[_0x8723('0x29')](_0x4ee01c[_0x8723('0x28')]);_0x3d5041[_0x8723('0x2a')]=_[_0x8723('0x2b')](_0x3d5041['model'],_0x3d5041['query']);_0x315c59[_0x8723('0x2c')]=_[_0x8723('0x2b')](_0x3d5041['model'],qs['fields'](_0x4ee01c[_0x8723('0x28')][_0x8723('0x2d')]));_0x315c59['attributes']=_0x315c59[_0x8723('0x2c')][_0x8723('0x2e')]?_0x315c59[_0x8723('0x2c')]:_0x3d5041[_0x8723('0x2f')];if(!_0x4ee01c['query'][_0x8723('0x30')](_0x8723('0x31'))){_0x315c59[_0x8723('0x1b')]=qs[_0x8723('0x1b')](_0x4ee01c[_0x8723('0x28')][_0x8723('0x1b')]);_0x315c59[_0x8723('0x1a')]=qs[_0x8723('0x1a')](_0x4ee01c[_0x8723('0x28')]['offset']);}_0x315c59['order']=qs[_0x8723('0x32')](_0x4ee01c[_0x8723('0x28')][_0x8723('0x32')]);_0x315c59[_0x8723('0x33')]=qs[_0x8723('0x2a')](_[_0x8723('0x34')](_0x4ee01c[_0x8723('0x28')],_0x3d5041[_0x8723('0x2a')]));if(_0x4ee01c[_0x8723('0x28')][_0x8723('0x35')]){_0x315c59['where']=_[_0x8723('0x36')](_0x315c59[_0x8723('0x33')],{'$or':_[_0x8723('0x37')](_0xf81d49,function(_0x1e91a6){if(_0x1e91a6['type'][_0x8723('0x38')]!==_0x8723('0x39')){var _0x43dd9e={};_0x43dd9e[_0x1e91a6['field']]={'$like':'%'+_0x4ee01c['query'][_0x8723('0x35')]+'%'};return _0x43dd9e;}})});}_0x315c59=_['merge']({},_0x315c59,_0x4ee01c[_0x8723('0x3a')]);var _0x424aa3={'where':_0x315c59[_0x8723('0x33')]};return db[_0x8723('0x3b')][_0x8723('0x19')](_0x424aa3)[_0x8723('0x22')](function(_0x42af01){_0x4d160b[_0x8723('0x19')]=_0x42af01;if(_0x4ee01c['query'][_0x8723('0x3c')]){_0x315c59[_0x8723('0x3d')]=[{'all':!![]}];}return db['MemberReport']['findAll'](_0x315c59);})['then'](function(_0x501fe7){_0x4d160b[_0x8723('0x3e')]=_0x501fe7;return _0x4d160b;})[_0x8723('0x22')](respondWithFilteredResult(_0x19023d,_0x315c59))[_0x8723('0x3f')](handleError(_0x19023d,null));};exports[_0x8723('0x40')]=function(_0x329778,_0x13c105){var _0x5f3eac={'raw':!![],'where':{'id':_0x329778[_0x8723('0x41')]['id']}},_0x2a5d63={};_0x2a5d63['model']=_[_0x8723('0x29')](db[_0x8723('0x3b')][_0x8723('0x42')]);_0x2a5d63[_0x8723('0x28')]=_[_0x8723('0x29')](_0x329778['query']);_0x2a5d63[_0x8723('0x2a')]=_['intersection'](_0x2a5d63['model'],_0x2a5d63[_0x8723('0x28')]);_0x5f3eac[_0x8723('0x2c')]=_[_0x8723('0x2b')](_0x2a5d63[_0x8723('0x2f')],qs['fields'](_0x329778[_0x8723('0x28')]['fields']));_0x5f3eac[_0x8723('0x2c')]=_0x5f3eac['attributes'][_0x8723('0x2e')]?_0x5f3eac[_0x8723('0x2c')]:_0x2a5d63['model'];if(_0x329778[_0x8723('0x28')]['includeAll']){_0x5f3eac['include']=[{'all':!![]}];}_0x5f3eac=_[_0x8723('0x36')]({},_0x5f3eac,_0x329778['options']);return db['MemberReport'][_0x8723('0x43')](_0x5f3eac)['then'](handleEntityNotFound(_0x13c105,null))[_0x8723('0x22')](respondWithResult(_0x13c105,null))[_0x8723('0x3f')](handleError(_0x13c105,null));};exports[_0x8723('0x44')]=function(_0x568be6,_0x24656f){return db['MemberReport'][_0x8723('0x44')](_0x568be6[_0x8723('0x45')],{})[_0x8723('0x22')](respondWithResult(_0x24656f,0xc9))[_0x8723('0x3f')](handleError(_0x24656f,null));};exports[_0x8723('0x21')]=function(_0x5f179b,_0x397c6b){if(_0x5f179b[_0x8723('0x45')]['id']){delete _0x5f179b['body']['id'];}return db[_0x8723('0x3b')][_0x8723('0x43')]({'where':{'id':_0x5f179b[_0x8723('0x41')]['id']}})['then'](handleEntityNotFound(_0x397c6b,null))[_0x8723('0x22')](saveUpdates(_0x5f179b[_0x8723('0x45')],null))[_0x8723('0x22')](respondWithResult(_0x397c6b,null))[_0x8723('0x3f')](handleError(_0x397c6b,null));};exports[_0x8723('0x46')]=function(_0x434a16,_0x15c3d7){return db['MemberReport'][_0x8723('0x43')]({'where':{'id':_0x434a16[_0x8723('0x41')]['id']}})[_0x8723('0x22')](handleEntityNotFound(_0x15c3d7,null))[_0x8723('0x22')](removeEntity(_0x15c3d7,null))[_0x8723('0x3f')](handleError(_0x15c3d7,null));};exports[_0x8723('0x47')]=function(_0x5580ee,_0x59017a){return db[_0x8723('0x3b')][_0x8723('0x47')]()[_0x8723('0x22')](respondWithResult(_0x59017a,null))[_0x8723('0x3f')](handleError(_0x59017a,null));};
\ No newline at end of file
+var _0xbc09=['show','params','rawAttributes','length','includeAll','find','create','body','update','describe','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/utils','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','save','destroy','then','stack','name','MemberReport','model','query','keys','intersection','fields','attributes','order','sort','where','filters','pick','merge','type','key','VIRTUAL','field','filter','options','include','findAll','rows','catch'];(function(_0x50aacb,_0x3a0e0a){var _0x4d142c=function(_0x46ee8b){while(--_0x46ee8b){_0x50aacb['push'](_0x50aacb['shift']());}};_0x4d142c(++_0x3a0e0a);}(_0xbc09,0x11e));var _0x9bc0=function(_0x162bf7,_0x38549b){_0x162bf7=_0x162bf7-0x0;var _0x30232d=_0xbc09[_0x162bf7];return _0x30232d;};'use strict';var pdf=require(_0x9bc0('0x0'));var emlformat=require(_0x9bc0('0x1'));var rimraf=require(_0x9bc0('0x2'));var zipdir=require(_0x9bc0('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x9bc0('0x4'));var moment=require(_0x9bc0('0x5'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0x9bc0('0x6'));var sox=require(_0x9bc0('0x7'));var csv=require(_0x9bc0('0x8'));var ejs=require(_0x9bc0('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x9bc0('0xa'));var crypto=require(_0x9bc0('0xb'));var jsforce=require(_0x9bc0('0xc'));var deskjs=require(_0x9bc0('0xd'));var toCsv=require(_0x9bc0('0x8'));var querystring=require(_0x9bc0('0xe'));var Papa=require(_0x9bc0('0xf'));var Redis=require(_0x9bc0('0x10'));var authService=require(_0x9bc0('0x11'));var qs=require(_0x9bc0('0x12'));var hardwareService=require(_0x9bc0('0x13'));var logger=require('../../config/logger')('api');var utils=require(_0x9bc0('0x14'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x420986,_0x5ead64){_0x5ead64=_0x5ead64||0xcc;return function(_0x2196b8){if(_0x2196b8){return _0x420986[_0x9bc0('0x15')](_0x5ead64);}return _0x420986[_0x9bc0('0x16')](_0x5ead64)[_0x9bc0('0x17')]();};}function respondWithResult(_0x5ab2ab,_0x442d62){_0x442d62=_0x442d62||0xc8;return function(_0x165c2b){if(_0x165c2b){return _0x5ab2ab['status'](_0x442d62)[_0x9bc0('0x18')](_0x165c2b);}};}function respondWithFilteredResult(_0x196e8a,_0x11abfc){return function(_0x3ad0bb){if(_0x3ad0bb){var _0x38905f=_0x3ad0bb[_0x9bc0('0x19')],_0x576cfb=_0x11abfc[_0x9bc0('0x1a')],_0x22e976=_0x11abfc[_0x9bc0('0x1a')]+_0x11abfc[_0x9bc0('0x1b')],_0x9d9623;if(_0x22e976>=_0x38905f){_0x22e976=_0x38905f;_0x9d9623=0xc8;}else{_0x9d9623=0xce;}_0x196e8a['status'](_0x9d9623);return _0x196e8a[_0x9bc0('0x1c')](_0x9bc0('0x1d'),_0x576cfb+'-'+_0x22e976+'/'+_0x38905f)[_0x9bc0('0x18')](_0x3ad0bb);}return null;};}function patchUpdates(_0x26d796){return function(_0x139cf4){try{jsonpatch[_0x9bc0('0x1e')](_0x139cf4,_0x26d796,!![]);}catch(_0x2b2c1a){return BPromise['reject'](_0x2b2c1a);}return _0x139cf4[_0x9bc0('0x1f')]();};}function saveUpdates(_0x11ee0b,_0x4fa2df){return function(_0x1c1a22){if(_0x1c1a22){return _0x1c1a22['update'](_0x11ee0b)['then'](function(_0x20fae9){return _0x20fae9;});}return null;};}function removeEntity(_0x2f888f,_0x460885){return function(_0x456839){if(_0x456839){return _0x456839[_0x9bc0('0x20')]()[_0x9bc0('0x21')](function(){_0x2f888f[_0x9bc0('0x16')](0xcc)[_0x9bc0('0x17')]();});}};}function handleEntityNotFound(_0x2079c9,_0x312e97){return function(_0xb0a8ad){if(!_0xb0a8ad){_0x2079c9[_0x9bc0('0x15')](0x194);}return _0xb0a8ad;};}function handleError(_0x4b15e0,_0x1dc87a){_0x1dc87a=_0x1dc87a||0x1f4;return function(_0x4297f4){logger['error'](_0x4297f4[_0x9bc0('0x22')]);if(_0x4297f4[_0x9bc0('0x23')]){delete _0x4297f4[_0x9bc0('0x23')];}_0x4b15e0[_0x9bc0('0x16')](_0x1dc87a)['send'](_0x4297f4);};}exports['index']=function(_0x2b63ad,_0x4c7620){var _0x25871c={},_0x5651cf={},_0x35fb35={'count':0x0,'rows':[]};var _0x2546c1=db[_0x9bc0('0x24')]['rawAttributes'];_0x5651cf[_0x9bc0('0x25')]=_['keys'](_0x2546c1);_0x5651cf[_0x9bc0('0x26')]=_[_0x9bc0('0x27')](_0x2b63ad['query']);_0x5651cf['filters']=_[_0x9bc0('0x28')](_0x5651cf['model'],_0x5651cf['query']);_0x25871c['attributes']=_[_0x9bc0('0x28')](_0x5651cf[_0x9bc0('0x25')],qs[_0x9bc0('0x29')](_0x2b63ad['query'][_0x9bc0('0x29')]));_0x25871c[_0x9bc0('0x2a')]=_0x25871c[_0x9bc0('0x2a')]['length']?_0x25871c[_0x9bc0('0x2a')]:_0x5651cf['model'];if(!_0x2b63ad[_0x9bc0('0x26')]['hasOwnProperty']('nolimit')){_0x25871c[_0x9bc0('0x1b')]=qs[_0x9bc0('0x1b')](_0x2b63ad['query']['limit']);_0x25871c['offset']=qs['offset'](_0x2b63ad[_0x9bc0('0x26')][_0x9bc0('0x1a')]);}_0x25871c[_0x9bc0('0x2b')]=qs[_0x9bc0('0x2c')](_0x2b63ad[_0x9bc0('0x26')][_0x9bc0('0x2c')]);_0x25871c[_0x9bc0('0x2d')]=qs[_0x9bc0('0x2e')](_[_0x9bc0('0x2f')](_0x2b63ad[_0x9bc0('0x26')],_0x5651cf[_0x9bc0('0x2e')]));if(_0x2b63ad[_0x9bc0('0x26')]['filter']){_0x25871c[_0x9bc0('0x2d')]=_[_0x9bc0('0x30')](_0x25871c[_0x9bc0('0x2d')],{'$or':_['map'](_0x2546c1,function(_0xb06916){if(_0xb06916[_0x9bc0('0x31')][_0x9bc0('0x32')]!==_0x9bc0('0x33')){var _0x529e8d={};_0x529e8d[_0xb06916[_0x9bc0('0x34')]]={'$like':'%'+_0x2b63ad[_0x9bc0('0x26')][_0x9bc0('0x35')]+'%'};return _0x529e8d;}})});}_0x25871c=_[_0x9bc0('0x30')]({},_0x25871c,_0x2b63ad[_0x9bc0('0x36')]);var _0x4af45e={'where':_0x25871c[_0x9bc0('0x2d')]};return db[_0x9bc0('0x24')]['count'](_0x4af45e)['then'](function(_0x5c2b5b){_0x35fb35['count']=_0x5c2b5b;if(_0x2b63ad[_0x9bc0('0x26')]['includeAll']){_0x25871c[_0x9bc0('0x37')]=[{'all':!![]}];}return db['MemberReport'][_0x9bc0('0x38')](_0x25871c);})[_0x9bc0('0x21')](function(_0x3eb407){_0x35fb35[_0x9bc0('0x39')]=_0x3eb407;return _0x35fb35;})[_0x9bc0('0x21')](respondWithFilteredResult(_0x4c7620,_0x25871c))[_0x9bc0('0x3a')](handleError(_0x4c7620,null));};exports[_0x9bc0('0x3b')]=function(_0x4fc494,_0x39381f){var _0x139ede={'raw':!![],'where':{'id':_0x4fc494[_0x9bc0('0x3c')]['id']}},_0x26b5bd={};_0x26b5bd[_0x9bc0('0x25')]=_['keys'](db[_0x9bc0('0x24')][_0x9bc0('0x3d')]);_0x26b5bd['query']=_[_0x9bc0('0x27')](_0x4fc494[_0x9bc0('0x26')]);_0x26b5bd[_0x9bc0('0x2e')]=_[_0x9bc0('0x28')](_0x26b5bd[_0x9bc0('0x25')],_0x26b5bd[_0x9bc0('0x26')]);_0x139ede[_0x9bc0('0x2a')]=_[_0x9bc0('0x28')](_0x26b5bd[_0x9bc0('0x25')],qs[_0x9bc0('0x29')](_0x4fc494[_0x9bc0('0x26')][_0x9bc0('0x29')]));_0x139ede[_0x9bc0('0x2a')]=_0x139ede[_0x9bc0('0x2a')][_0x9bc0('0x3e')]?_0x139ede[_0x9bc0('0x2a')]:_0x26b5bd[_0x9bc0('0x25')];if(_0x4fc494[_0x9bc0('0x26')][_0x9bc0('0x3f')]){_0x139ede[_0x9bc0('0x37')]=[{'all':!![]}];}_0x139ede=_[_0x9bc0('0x30')]({},_0x139ede,_0x4fc494[_0x9bc0('0x36')]);return db['MemberReport'][_0x9bc0('0x40')](_0x139ede)['then'](handleEntityNotFound(_0x39381f,null))[_0x9bc0('0x21')](respondWithResult(_0x39381f,null))['catch'](handleError(_0x39381f,null));};exports['create']=function(_0x33cc56,_0x2ad8ba){return db['MemberReport'][_0x9bc0('0x41')](_0x33cc56[_0x9bc0('0x42')],{})[_0x9bc0('0x21')](respondWithResult(_0x2ad8ba,0xc9))[_0x9bc0('0x3a')](handleError(_0x2ad8ba,null));};exports[_0x9bc0('0x43')]=function(_0x45802d,_0x456aa7){if(_0x45802d[_0x9bc0('0x42')]['id']){delete _0x45802d[_0x9bc0('0x42')]['id'];}return db[_0x9bc0('0x24')][_0x9bc0('0x40')]({'where':{'id':_0x45802d[_0x9bc0('0x3c')]['id']}})[_0x9bc0('0x21')](handleEntityNotFound(_0x456aa7,null))[_0x9bc0('0x21')](saveUpdates(_0x45802d[_0x9bc0('0x42')],null))[_0x9bc0('0x21')](respondWithResult(_0x456aa7,null))['catch'](handleError(_0x456aa7,null));};exports[_0x9bc0('0x20')]=function(_0x2f420e,_0x5b9bc0){return db[_0x9bc0('0x24')][_0x9bc0('0x40')]({'where':{'id':_0x2f420e['params']['id']}})['then'](handleEntityNotFound(_0x5b9bc0,null))['then'](removeEntity(_0x5b9bc0,null))[_0x9bc0('0x3a')](handleError(_0x5b9bc0,null));};exports[_0x9bc0('0x44')]=function(_0x215f2a,_0x4d445c){return db[_0x9bc0('0x24')]['describe']()[_0x9bc0('0x21')](respondWithResult(_0x4d445c,null))['catch'](handleError(_0x4d445c,null));};
\ No newline at end of file
index b5abd33..b2d2bc0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x98e9=['request-promise','path','rimraf','../../config/environment','exports','report_member','membername_interface','lodash','util','api','bluebird'];(function(_0x1170a1,_0x389d8e){var _0x111343=function(_0x25339c){while(--_0x25339c){_0x1170a1['push'](_0x1170a1['shift']());}};_0x111343(++_0x389d8e);}(_0x98e9,0xcd));var _0x998e=function(_0x248f55,_0x98f01d){_0x248f55=_0x248f55-0x0;var _0x18ad43=_0x98e9[_0x248f55];return _0x18ad43;};'use strict';var _=require(_0x998e('0x0'));var util=require(_0x998e('0x1'));var logger=require('../../config/logger')(_0x998e('0x2'));var moment=require('moment');var BPromise=require(_0x998e('0x3'));var rp=require(_0x998e('0x4'));var fs=require('fs');var path=require(_0x998e('0x5'));var rimraf=require(_0x998e('0x6'));var config=require(_0x998e('0x7'));var attributes=require('./memberReport.attributes');module[_0x998e('0x8')]=function(_0x1b684f,_0x1d879f){return _0x1b684f['define']('MemberReport',attributes,{'tableName':_0x998e('0x9'),'paranoid':![],'indexes':[{'name':_0x998e('0xa'),'fields':['membername','interface']}],'timestamps':!![]});};
\ No newline at end of file
+var _0xbde9=['exports','define','MemberReport','report_member','membername','interface','lodash','../../config/logger','api','moment','request-promise','path','rimraf','../../config/environment','./memberReport.attributes'];(function(_0x39a792,_0x5b6ec9){var _0x31c1af=function(_0xdbb04e){while(--_0xdbb04e){_0x39a792['push'](_0x39a792['shift']());}};_0x31c1af(++_0x5b6ec9);}(_0xbde9,0x17d));var _0x9bde=function(_0x408b34,_0xb7d872){_0x408b34=_0x408b34-0x0;var _0x1182aa=_0xbde9[_0x408b34];return _0x1182aa;};'use strict';var _=require(_0x9bde('0x0'));var util=require('util');var logger=require(_0x9bde('0x1'))(_0x9bde('0x2'));var moment=require(_0x9bde('0x3'));var BPromise=require('bluebird');var rp=require(_0x9bde('0x4'));var fs=require('fs');var path=require(_0x9bde('0x5'));var rimraf=require(_0x9bde('0x6'));var config=require(_0x9bde('0x7'));var attributes=require(_0x9bde('0x8'));module[_0x9bde('0x9')]=function(_0x373112,_0x13d97d){return _0x373112[_0x9bde('0xa')](_0x9bde('0xb'),attributes,{'tableName':_0x9bde('0xc'),'paranoid':![],'indexes':[{'name':'membername_interface','fields':[_0x9bde('0xd'),_0x9bde('0xe')]}],'timestamps':!![]});};
\ No newline at end of file
index 072fdde..fbfc5b8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcff7=['options','raw','where','attributes','limit','include','map','model','then','catch','create','body','CreateMemberReport','UpdateMemberReport','update','moment','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','MemberReport,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','GetMemberReport','MemberReport'];(function(_0x8c43de,_0x90ff31){var _0xa6591b=function(_0x469716){while(--_0x469716){_0x8c43de['push'](_0x8c43de['shift']());}};_0xa6591b(++_0x90ff31);}(_0xcff7,0x1a6));var _0x7cff=function(_0x539c6f,_0x3e658e){_0x539c6f=_0x539c6f-0x0;var _0x4fc09d=_0xcff7[_0x539c6f];return _0x4fc09d;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x7cff('0x0'));var BPromise=require('bluebird');var rs=require(_0x7cff('0x1'));var fs=require('fs');var Redis=require(_0x7cff('0x2'));var db=require(_0x7cff('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x7cff('0x4'))(_0x7cff('0x5'));var config=require(_0x7cff('0x6'));var jayson=require(_0x7cff('0x7'));var client=jayson[_0x7cff('0x8')][_0x7cff('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x427acc,_0x54758a,_0xc14cf1){return new BPromise(function(_0x4f5bf1,_0x31a3c0){return client[_0x7cff('0xa')](_0x427acc,_0xc14cf1)['then'](function(_0x8d96e2){logger[_0x7cff('0xb')](_0x7cff('0xc'),_0x54758a,_0x7cff('0xd'));logger[_0x7cff('0xe')]('MemberReport,\x20%s,\x20%s,\x20%s',_0x54758a,'request\x20sent',JSON[_0x7cff('0xf')](_0x8d96e2));if(_0x8d96e2['error']){if(_0x8d96e2[_0x7cff('0x10')][_0x7cff('0x11')]===0x1f4){logger[_0x7cff('0x10')]('MemberReport,\x20%s,\x20%s',_0x54758a,_0x8d96e2[_0x7cff('0x10')][_0x7cff('0x12')]);return _0x31a3c0(_0x8d96e2[_0x7cff('0x10')]['message']);}logger[_0x7cff('0x10')](_0x7cff('0xc'),_0x54758a,_0x8d96e2[_0x7cff('0x10')][_0x7cff('0x12')]);return _0x4f5bf1(_0x8d96e2['error'][_0x7cff('0x12')]);}else{logger[_0x7cff('0xb')]('MemberReport,\x20%s,\x20%s',_0x54758a,_0x7cff('0xd'));_0x4f5bf1(_0x8d96e2[_0x7cff('0x13')]['message']);}})['catch'](function(_0x8adaaf){logger[_0x7cff('0x10')](_0x7cff('0xc'),_0x54758a,_0x8adaaf);_0x31a3c0(_0x8adaaf);});});}exports[_0x7cff('0x14')]=function(_0x21eede){var _0x41cc12=this;return new Promise(function(_0xda3e47,_0x56e92d){return db[_0x7cff('0x15')]['findAll']({'raw':_0x21eede[_0x7cff('0x16')]?_0x21eede[_0x7cff('0x16')][_0x7cff('0x17')]===undefined?!![]:![]:!![],'where':_0x21eede[_0x7cff('0x16')]?_0x21eede[_0x7cff('0x16')][_0x7cff('0x18')]||null:null,'attributes':_0x21eede[_0x7cff('0x16')]?_0x21eede[_0x7cff('0x16')][_0x7cff('0x19')]||null:null,'limit':_0x21eede[_0x7cff('0x16')]?_0x21eede[_0x7cff('0x16')][_0x7cff('0x1a')]||null:null,'include':_0x21eede[_0x7cff('0x16')]?_0x21eede[_0x7cff('0x16')][_0x7cff('0x1b')]?_[_0x7cff('0x1c')](_0x21eede[_0x7cff('0x16')]['include'],function(_0x1213a9){return{'model':db[_0x1213a9['model']],'as':_0x1213a9['as'],'attributes':_0x1213a9[_0x7cff('0x19')],'include':_0x1213a9['include']?_[_0x7cff('0x1c')](_0x1213a9[_0x7cff('0x1b')],function(_0x38a8c){return{'model':db[_0x38a8c[_0x7cff('0x1d')]],'as':_0x38a8c['as'],'attributes':_0x38a8c[_0x7cff('0x19')],'include':_0x38a8c[_0x7cff('0x1b')]?_[_0x7cff('0x1c')](_0x38a8c[_0x7cff('0x1b')],function(_0x2a8242){return{'model':db[_0x2a8242[_0x7cff('0x1d')]],'as':_0x2a8242['as'],'attributes':_0x2a8242[_0x7cff('0x19')]};}):[]};}):[]};}):[]:[]})[_0x7cff('0x1e')](function(_0x26a78e){logger[_0x7cff('0xb')](_0x7cff('0x14'),_0x21eede);logger[_0x7cff('0xe')](_0x7cff('0x14'),_0x21eede,JSON[_0x7cff('0xf')](_0x26a78e));_0xda3e47(_0x26a78e);})[_0x7cff('0x1f')](function(_0x4bd728){logger[_0x7cff('0x10')](_0x7cff('0x14'),_0x4bd728[_0x7cff('0x12')],_0x21eede);_0x56e92d(_0x41cc12[_0x7cff('0x10')](0x1f4,_0x4bd728['message']));});});};exports['CreateMemberReport']=function(_0xd983e1){var _0x4138d8=this;return new Promise(function(_0x2bcd80,_0x28ab7d){return db['MemberReport'][_0x7cff('0x20')](_0xd983e1[_0x7cff('0x21')],{'raw':_0xd983e1[_0x7cff('0x16')]?_0xd983e1[_0x7cff('0x16')][_0x7cff('0x17')]===undefined?!![]:![]:!![]})[_0x7cff('0x1e')](function(_0x3e1ab9){logger['info']('CreateMemberReport',_0xd983e1);logger['debug'](_0x7cff('0x22'),_0xd983e1,JSON[_0x7cff('0xf')](_0x3e1ab9));_0x2bcd80(_0x3e1ab9);})[_0x7cff('0x1f')](function(_0xa4dd87){logger['error']('CreateMemberReport',_0xa4dd87[_0x7cff('0x12')],_0xd983e1);_0x28ab7d(_0x4138d8[_0x7cff('0x10')](0x1f4,_0xa4dd87[_0x7cff('0x12')]));});});};exports[_0x7cff('0x23')]=function(_0xf63f20){var _0x2a8718=this;return new Promise(function(_0x2be2f8,_0x2f0fc6){return db[_0x7cff('0x15')][_0x7cff('0x24')](_0xf63f20[_0x7cff('0x21')],{'raw':_0xf63f20[_0x7cff('0x16')]?_0xf63f20['options'][_0x7cff('0x17')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0xf63f20[_0x7cff('0x16')]?_0xf63f20[_0x7cff('0x16')][_0x7cff('0x18')]||null:null,'attributes':_0xf63f20[_0x7cff('0x16')]?_0xf63f20['options'][_0x7cff('0x19')]||null:null,'limit':_0xf63f20['options']?_0xf63f20['options'][_0x7cff('0x1a')]||null:null})[_0x7cff('0x1e')](function(_0x153eb3){logger['info'](_0x7cff('0x23'),_0xf63f20);logger['debug'](_0x7cff('0x23'),_0xf63f20,JSON[_0x7cff('0xf')](_0x153eb3));_0x2be2f8(_0x153eb3);})['catch'](function(_0x34fd36){logger['error'](_0x7cff('0x23'),_0x34fd36['message'],_0xf63f20);_0x2f0fc6(_0x2a8718['error'](0x1f4,_0x34fd36[_0x7cff('0x12')]));});});};
\ No newline at end of file
+var _0x6669=['limit','map','include','model','attributes','info','stringify','create','body','CreateMemberReport','UpdateMemberReport','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','MemberReport,\x20%s,\x20%s','debug','MemberReport,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','GetMemberReport','MemberReport','findAll','options','raw','where'];(function(_0x5b644e,_0x2e5e07){var _0x49c6bf=function(_0x3032d9){while(--_0x3032d9){_0x5b644e['push'](_0x5b644e['shift']());}};_0x49c6bf(++_0x2e5e07);}(_0x6669,0x1eb));var _0x9666=function(_0xd0b415,_0x149675){_0xd0b415=_0xd0b415-0x0;var _0x2bdf2c=_0x6669[_0xd0b415];return _0x2bdf2c;};'use strict';var _=require(_0x9666('0x0'));var util=require(_0x9666('0x1'));var moment=require(_0x9666('0x2'));var BPromise=require(_0x9666('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x9666('0x4'));var db=require(_0x9666('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x9666('0x6'))(_0x9666('0x7'));var config=require(_0x9666('0x8'));var jayson=require(_0x9666('0x9'));var client=jayson[_0x9666('0xa')][_0x9666('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x4993e6,_0x4a8dd8,_0x56d449){return new BPromise(function(_0x247606,_0x3d6132){return client[_0x9666('0xc')](_0x4993e6,_0x56d449)[_0x9666('0xd')](function(_0x2d11b2){logger['info'](_0x9666('0xe'),_0x4a8dd8,'request\x20sent');logger[_0x9666('0xf')](_0x9666('0x10'),_0x4a8dd8,_0x9666('0x11'),JSON['stringify'](_0x2d11b2));if(_0x2d11b2['error']){if(_0x2d11b2[_0x9666('0x12')][_0x9666('0x13')]===0x1f4){logger[_0x9666('0x12')]('MemberReport,\x20%s,\x20%s',_0x4a8dd8,_0x2d11b2[_0x9666('0x12')]['message']);return _0x3d6132(_0x2d11b2['error'][_0x9666('0x14')]);}logger[_0x9666('0x12')](_0x9666('0xe'),_0x4a8dd8,_0x2d11b2[_0x9666('0x12')][_0x9666('0x14')]);return _0x247606(_0x2d11b2[_0x9666('0x12')]['message']);}else{logger['info'](_0x9666('0xe'),_0x4a8dd8,_0x9666('0x11'));_0x247606(_0x2d11b2[_0x9666('0x15')][_0x9666('0x14')]);}})[_0x9666('0x16')](function(_0x2eea11){logger[_0x9666('0x12')](_0x9666('0xe'),_0x4a8dd8,_0x2eea11);_0x3d6132(_0x2eea11);});});}exports[_0x9666('0x17')]=function(_0x4737f8){var _0xe266e6=this;return new Promise(function(_0x281758,_0x13a20d){return db[_0x9666('0x18')][_0x9666('0x19')]({'raw':_0x4737f8['options']?_0x4737f8[_0x9666('0x1a')][_0x9666('0x1b')]===undefined?!![]:![]:!![],'where':_0x4737f8[_0x9666('0x1a')]?_0x4737f8[_0x9666('0x1a')][_0x9666('0x1c')]||null:null,'attributes':_0x4737f8[_0x9666('0x1a')]?_0x4737f8[_0x9666('0x1a')]['attributes']||null:null,'limit':_0x4737f8[_0x9666('0x1a')]?_0x4737f8[_0x9666('0x1a')][_0x9666('0x1d')]||null:null,'include':_0x4737f8[_0x9666('0x1a')]?_0x4737f8[_0x9666('0x1a')]['include']?_[_0x9666('0x1e')](_0x4737f8[_0x9666('0x1a')][_0x9666('0x1f')],function(_0x106b17){return{'model':db[_0x106b17[_0x9666('0x20')]],'as':_0x106b17['as'],'attributes':_0x106b17[_0x9666('0x21')],'include':_0x106b17[_0x9666('0x1f')]?_[_0x9666('0x1e')](_0x106b17['include'],function(_0x2640a7){return{'model':db[_0x2640a7[_0x9666('0x20')]],'as':_0x2640a7['as'],'attributes':_0x2640a7[_0x9666('0x21')],'include':_0x2640a7[_0x9666('0x1f')]?_[_0x9666('0x1e')](_0x2640a7[_0x9666('0x1f')],function(_0x411187){return{'model':db[_0x411187['model']],'as':_0x411187['as'],'attributes':_0x411187[_0x9666('0x21')]};}):[]};}):[]};}):[]:[]})[_0x9666('0xd')](function(_0x4465f3){logger[_0x9666('0x22')](_0x9666('0x17'),_0x4737f8);logger['debug'](_0x9666('0x17'),_0x4737f8,JSON[_0x9666('0x23')](_0x4465f3));_0x281758(_0x4465f3);})['catch'](function(_0x6327bc){logger['error']('GetMemberReport',_0x6327bc['message'],_0x4737f8);_0x13a20d(_0xe266e6[_0x9666('0x12')](0x1f4,_0x6327bc[_0x9666('0x14')]));});});};exports['CreateMemberReport']=function(_0x53f2ac){var _0x30d84c=this;return new Promise(function(_0x30dacc,_0x262805){return db[_0x9666('0x18')][_0x9666('0x24')](_0x53f2ac[_0x9666('0x25')],{'raw':_0x53f2ac[_0x9666('0x1a')]?_0x53f2ac[_0x9666('0x1a')][_0x9666('0x1b')]===undefined?!![]:![]:!![]})['then'](function(_0x14ac3b){logger[_0x9666('0x22')]('CreateMemberReport',_0x53f2ac);logger[_0x9666('0xf')](_0x9666('0x26'),_0x53f2ac,JSON[_0x9666('0x23')](_0x14ac3b));_0x30dacc(_0x14ac3b);})['catch'](function(_0x1b30ba){logger[_0x9666('0x12')](_0x9666('0x26'),_0x1b30ba[_0x9666('0x14')],_0x53f2ac);_0x262805(_0x30d84c[_0x9666('0x12')](0x1f4,_0x1b30ba['message']));});});};exports[_0x9666('0x27')]=function(_0xb66781){var _0x51f32f=this;return new Promise(function(_0x55802a,_0x2d4e41){return db[_0x9666('0x18')]['update'](_0xb66781[_0x9666('0x25')],{'raw':_0xb66781[_0x9666('0x1a')]?_0xb66781[_0x9666('0x1a')][_0x9666('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0xb66781['options']?_0xb66781['options']['where']||null:null,'attributes':_0xb66781[_0x9666('0x1a')]?_0xb66781[_0x9666('0x1a')][_0x9666('0x21')]||null:null,'limit':_0xb66781['options']?_0xb66781[_0x9666('0x1a')][_0x9666('0x1d')]||null:null})['then'](function(_0x5d3516){logger[_0x9666('0x22')](_0x9666('0x27'),_0xb66781);logger[_0x9666('0xf')](_0x9666('0x27'),_0xb66781,JSON[_0x9666('0x23')](_0x5d3516));_0x55802a(_0x5d3516);})['catch'](function(_0x51f558){logger['error'](_0x9666('0x27'),_0x51f558[_0x9666('0x14')],_0xb66781);_0x2d4e41(_0x51f32f[_0x9666('0x12')](0x1f4,_0x51f558[_0x9666('0x14')]));});});};
\ No newline at end of file
index 91763e1..0ff7d11 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3fcc=['util','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./migration.controller','get','index','exports','multer'];(function(_0x281d80,_0xa7bec2){var _0x35c8eb=function(_0x1195c7){while(--_0x1195c7){_0x281d80['push'](_0x281d80['shift']());}};_0x35c8eb(++_0xa7bec2);}(_0x3fcc,0x83));var _0xc3fc=function(_0x2f18cb,_0x4e14ed){_0x2f18cb=_0x2f18cb-0x0;var _0x1408a3=_0x3fcc[_0x2f18cb];return _0x1408a3;};'use strict';var multer=require(_0xc3fc('0x0'));var util=require(_0xc3fc('0x1'));var path=require('path');var timeout=require(_0xc3fc('0x2'));var express=require(_0xc3fc('0x3'));var router=express['Router']();var auth=require(_0xc3fc('0x4'));var interaction=require(_0xc3fc('0x5'));var config=require(_0xc3fc('0x6'));var controller=require(_0xc3fc('0x7'));router[_0xc3fc('0x8')]('/',controller[_0xc3fc('0x9')]);module[_0xc3fc('0xa')]=router;
\ No newline at end of file
+var _0xa015=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./migration.controller','index','exports','multer','path'];(function(_0x11e30d,_0x5584aa){var _0x2d4e29=function(_0x2486ce){while(--_0x2486ce){_0x11e30d['push'](_0x11e30d['shift']());}};_0x2d4e29(++_0x5584aa);}(_0xa015,0x15e));var _0x5a01=function(_0x5185b9,_0xb4c5ed){_0x5185b9=_0x5185b9-0x0;var _0x434d12=_0xa015[_0x5185b9];return _0x434d12;};'use strict';var multer=require(_0x5a01('0x0'));var util=require('util');var path=require(_0x5a01('0x1'));var timeout=require(_0x5a01('0x2'));var express=require(_0x5a01('0x3'));var router=express[_0x5a01('0x4')]();var auth=require(_0x5a01('0x5'));var interaction=require(_0x5a01('0x6'));var config=require(_0x5a01('0x7'));var controller=require(_0x5a01('0x8'));router['get']('/',controller[_0x5a01('0x9')]);module[_0x5a01('0xa')]=router;
\ No newline at end of file
index c548906..1f7d503 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbf27=['version'];(function(_0x62c958,_0x2bfdbc){var _0x57ec61=function(_0x5c0094){while(--_0x5c0094){_0x62c958['push'](_0x62c958['shift']());}};_0x57ec61(++_0x2bfdbc);}(_0xbf27,0xe4));var _0x7bf2=function(_0x5bb1c1,_0x3add78){_0x5bb1c1=_0x5bb1c1-0x0;var _0x5dbcf7=_0xbf27[_0x5bb1c1];return _0x5dbcf7;};'use strict';var Sequelize=require('sequelize');module['exports']={'version':{'type':Sequelize['STRING'],'unique':_0x7bf2('0x0')}};
\ No newline at end of file
+var _0x867b=['exports','STRING','sequelize'];(function(_0x18ab0e,_0xbcd94d){var _0x1f6c97=function(_0x415887){while(--_0x415887){_0x18ab0e['push'](_0x18ab0e['shift']());}};_0x1f6c97(++_0xbcd94d);}(_0x867b,0x6b));var _0xb867=function(_0x179bd8,_0x1c4c33){_0x179bd8=_0x179bd8-0x0;var _0x49f1c8=_0x867b[_0x179bd8];return _0x49f1c8;};'use strict';var Sequelize=require(_0xb867('0x0'));module[_0xb867('0x1')]={'version':{'type':Sequelize[_0xb867('0x2')],'unique':'version'}};
\ No newline at end of file
index 7197850..1bfd42a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5c67=['VIRTUAL','field','filter','includeAll','include','findAll','rows','catch','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','squel','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','reject','save','update','then','destroy','error','stack','name','send','index','Migration','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','merge','map','type','key'];(function(_0x1dc29a,_0x1b2913){var _0x2bb784=function(_0x42334f){while(--_0x42334f){_0x1dc29a['push'](_0x1dc29a['shift']());}};_0x2bb784(++_0x1b2913);}(_0x5c67,0x1a6));var _0x75c6=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0x5c67[_0x5b644e];return _0x49c6bf;};'use strict';var pdf=require(_0x75c6('0x0'));var emlformat=require(_0x75c6('0x1'));var rimraf=require(_0x75c6('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x75c6('0x3'));var rp=require(_0x75c6('0x4'));var moment=require(_0x75c6('0x5'));var BPromise=require(_0x75c6('0x6'));var Mustache=require(_0x75c6('0x7'));var util=require(_0x75c6('0x8'));var path=require(_0x75c6('0x9'));var sox=require('sox');var csv=require(_0x75c6('0xa'));var ejs=require(_0x75c6('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x75c6('0xc'));var crypto=require(_0x75c6('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x75c6('0xe'));var toCsv=require(_0x75c6('0xa'));var querystring=require(_0x75c6('0xf'));var Papa=require(_0x75c6('0x10'));var Redis=require('ioredis');var authService=require(_0x75c6('0x11'));var qs=require(_0x75c6('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x75c6('0x13'))('api');var utils=require(_0x75c6('0x14'));var config=require(_0x75c6('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x19f55f,_0x504ea5){_0x504ea5=_0x504ea5||0xcc;return function(_0x245f0c){if(_0x245f0c){return _0x19f55f[_0x75c6('0x16')](_0x504ea5);}return _0x19f55f[_0x75c6('0x17')](_0x504ea5)[_0x75c6('0x18')]();};}function respondWithResult(_0x46447d,_0x29dc5a){_0x29dc5a=_0x29dc5a||0xc8;return function(_0x358ed5){if(_0x358ed5){return _0x46447d[_0x75c6('0x17')](_0x29dc5a)['json'](_0x358ed5);}};}function respondWithFilteredResult(_0x289bf8,_0x92a28f){return function(_0x2de31b){if(_0x2de31b){var _0x1c0a85=_0x2de31b[_0x75c6('0x19')],_0x2fd923=_0x92a28f[_0x75c6('0x1a')],_0x2ee2bc=_0x92a28f[_0x75c6('0x1a')]+_0x92a28f[_0x75c6('0x1b')],_0x5ded8d;if(_0x2ee2bc>=_0x1c0a85){_0x2ee2bc=_0x1c0a85;_0x5ded8d=0xc8;}else{_0x5ded8d=0xce;}_0x289bf8[_0x75c6('0x17')](_0x5ded8d);return _0x289bf8[_0x75c6('0x1c')](_0x75c6('0x1d'),_0x2fd923+'-'+_0x2ee2bc+'/'+_0x1c0a85)[_0x75c6('0x1e')](_0x2de31b);}return null;};}function patchUpdates(_0x1dbf4f){return function(_0x1ebf01){try{jsonpatch[_0x75c6('0x1f')](_0x1ebf01,_0x1dbf4f,!![]);}catch(_0x3024cb){return BPromise[_0x75c6('0x20')](_0x3024cb);}return _0x1ebf01[_0x75c6('0x21')]();};}function saveUpdates(_0x189a46,_0x4eef01){return function(_0x389c7b){if(_0x389c7b){return _0x389c7b[_0x75c6('0x22')](_0x189a46)[_0x75c6('0x23')](function(_0x3aad28){return _0x3aad28;});}return null;};}function removeEntity(_0x27f2cb,_0xeb6a24){return function(_0x1c83d3){if(_0x1c83d3){return _0x1c83d3[_0x75c6('0x24')]()['then'](function(){_0x27f2cb[_0x75c6('0x17')](0xcc)['end']();});}};}function handleEntityNotFound(_0xb236ed,_0x5ae3fe){return function(_0x172d75){if(!_0x172d75){_0xb236ed[_0x75c6('0x16')](0x194);}return _0x172d75;};}function handleError(_0x40dd2f,_0x26416c){_0x26416c=_0x26416c||0x1f4;return function(_0x4e07d2){logger[_0x75c6('0x25')](_0x4e07d2[_0x75c6('0x26')]);if(_0x4e07d2[_0x75c6('0x27')]){delete _0x4e07d2[_0x75c6('0x27')];}_0x40dd2f[_0x75c6('0x17')](_0x26416c)[_0x75c6('0x28')](_0x4e07d2);};}exports[_0x75c6('0x29')]=function(_0x3bbffa,_0x351f8f){var _0x21be4f={},_0x5cadb6={},_0x24fd6e={'count':0x0,'rows':[]};var _0x3134be=db[_0x75c6('0x2a')][_0x75c6('0x2b')];_0x5cadb6[_0x75c6('0x2c')]=_[_0x75c6('0x2d')](_0x3134be);_0x5cadb6[_0x75c6('0x2e')]=_[_0x75c6('0x2d')](_0x3bbffa[_0x75c6('0x2e')]);_0x5cadb6[_0x75c6('0x2f')]=_['intersection'](_0x5cadb6[_0x75c6('0x2c')],_0x5cadb6[_0x75c6('0x2e')]);_0x21be4f[_0x75c6('0x30')]=_[_0x75c6('0x31')](_0x5cadb6[_0x75c6('0x2c')],qs[_0x75c6('0x32')](_0x3bbffa[_0x75c6('0x2e')][_0x75c6('0x32')]));_0x21be4f[_0x75c6('0x30')]=_0x21be4f[_0x75c6('0x30')][_0x75c6('0x33')]?_0x21be4f[_0x75c6('0x30')]:_0x5cadb6['model'];if(!_0x3bbffa['query'][_0x75c6('0x34')](_0x75c6('0x35'))){_0x21be4f[_0x75c6('0x1b')]=qs[_0x75c6('0x1b')](_0x3bbffa[_0x75c6('0x2e')][_0x75c6('0x1b')]);_0x21be4f[_0x75c6('0x1a')]=qs[_0x75c6('0x1a')](_0x3bbffa[_0x75c6('0x2e')]['offset']);}_0x21be4f[_0x75c6('0x36')]=qs['sort'](_0x3bbffa[_0x75c6('0x2e')][_0x75c6('0x37')]);_0x21be4f['where']=qs[_0x75c6('0x2f')](_['pick'](_0x3bbffa[_0x75c6('0x2e')],_0x5cadb6[_0x75c6('0x2f')]));if(_0x3bbffa[_0x75c6('0x2e')]['filter']){_0x21be4f[_0x75c6('0x38')]=_[_0x75c6('0x39')](_0x21be4f[_0x75c6('0x38')],{'$or':_[_0x75c6('0x3a')](_0x3134be,function(_0x62745c){if(_0x62745c[_0x75c6('0x3b')][_0x75c6('0x3c')]!==_0x75c6('0x3d')){var _0xc8179d={};_0xc8179d[_0x62745c[_0x75c6('0x3e')]]={'$like':'%'+_0x3bbffa[_0x75c6('0x2e')][_0x75c6('0x3f')]+'%'};return _0xc8179d;}})});}_0x21be4f=_[_0x75c6('0x39')]({},_0x21be4f,_0x3bbffa['options']);var _0x31052b={'where':_0x21be4f[_0x75c6('0x38')]};return db[_0x75c6('0x2a')][_0x75c6('0x19')](_0x31052b)[_0x75c6('0x23')](function(_0x57e5a1){_0x24fd6e[_0x75c6('0x19')]=_0x57e5a1;if(_0x3bbffa['query'][_0x75c6('0x40')]){_0x21be4f[_0x75c6('0x41')]=[{'all':!![]}];}return db[_0x75c6('0x2a')][_0x75c6('0x42')](_0x21be4f);})[_0x75c6('0x23')](function(_0x366d66){_0x24fd6e[_0x75c6('0x43')]=_0x366d66;return _0x24fd6e;})[_0x75c6('0x23')](respondWithFilteredResult(_0x351f8f,_0x21be4f))[_0x75c6('0x44')](handleError(_0x351f8f,null));};
\ No newline at end of file
+var _0x71e8=['lodash','crypto','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','sendStatus','status','end','json','offset','set','reject','save','then','destroy','error','stack','name','index','Migration','rawAttributes','keys','intersection','model','query','attributes','fields','length','hasOwnProperty','limit','order','sort','where','filters','pick','filter','merge','type','field','count','include','findAll','rows','catch','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs'];(function(_0x3b085,_0x250543){var _0x476a57=function(_0x480941){while(--_0x480941){_0x3b085['push'](_0x3b085['shift']());}};_0x476a57(++_0x250543);}(_0x71e8,0x1e3));var _0x871e=function(_0x502c7d,_0x2f1285){_0x502c7d=_0x502c7d-0x0;var _0x30b7ed=_0x71e8[_0x502c7d];return _0x30b7ed;};'use strict';var pdf=require(_0x871e('0x0'));var emlformat=require(_0x871e('0x1'));var rimraf=require(_0x871e('0x2'));var zipdir=require(_0x871e('0x3'));var jsonpatch=require(_0x871e('0x4'));var rp=require(_0x871e('0x5'));var moment=require(_0x871e('0x6'));var BPromise=require(_0x871e('0x7'));var Mustache=require(_0x871e('0x8'));var util=require(_0x871e('0x9'));var path=require(_0x871e('0xa'));var sox=require('sox');var csv=require(_0x871e('0xb'));var ejs=require(_0x871e('0xc'));var fs=require('fs');var _=require(_0x871e('0xd'));var squel=require('squel');var crypto=require(_0x871e('0xe'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x871e('0xb'));var querystring=require(_0x871e('0xf'));var Papa=require(_0x871e('0x10'));var Redis=require(_0x871e('0x11'));var authService=require(_0x871e('0x12'));var qs=require(_0x871e('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x871e('0x14'))(_0x871e('0x15'));var utils=require(_0x871e('0x16'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4bd9b2,_0x189d04){_0x189d04=_0x189d04||0xcc;return function(_0x533403){if(_0x533403){return _0x4bd9b2[_0x871e('0x17')](_0x189d04);}return _0x4bd9b2[_0x871e('0x18')](_0x189d04)[_0x871e('0x19')]();};}function respondWithResult(_0x2106db,_0xdeda0b){_0xdeda0b=_0xdeda0b||0xc8;return function(_0x6c041f){if(_0x6c041f){return _0x2106db[_0x871e('0x18')](_0xdeda0b)[_0x871e('0x1a')](_0x6c041f);}};}function respondWithFilteredResult(_0x5dc73b,_0x41d18e){return function(_0x5227cd){if(_0x5227cd){var _0x512b36=_0x5227cd['count'],_0x42efdc=_0x41d18e[_0x871e('0x1b')],_0x17e989=_0x41d18e[_0x871e('0x1b')]+_0x41d18e['limit'],_0x29d532;if(_0x17e989>=_0x512b36){_0x17e989=_0x512b36;_0x29d532=0xc8;}else{_0x29d532=0xce;}_0x5dc73b[_0x871e('0x18')](_0x29d532);return _0x5dc73b[_0x871e('0x1c')]('Content-Range',_0x42efdc+'-'+_0x17e989+'/'+_0x512b36)[_0x871e('0x1a')](_0x5227cd);}return null;};}function patchUpdates(_0x3d10a6){return function(_0x5a90d0){try{jsonpatch['apply'](_0x5a90d0,_0x3d10a6,!![]);}catch(_0x267aae){return BPromise[_0x871e('0x1d')](_0x267aae);}return _0x5a90d0[_0x871e('0x1e')]();};}function saveUpdates(_0x18c490,_0x1ab483){return function(_0x350dd1){if(_0x350dd1){return _0x350dd1['update'](_0x18c490)[_0x871e('0x1f')](function(_0xe616d){return _0xe616d;});}return null;};}function removeEntity(_0x32b4df,_0x2345ca){return function(_0x9fd2e2){if(_0x9fd2e2){return _0x9fd2e2[_0x871e('0x20')]()[_0x871e('0x1f')](function(){_0x32b4df[_0x871e('0x18')](0xcc)[_0x871e('0x19')]();});}};}function handleEntityNotFound(_0x46bbc1,_0x146276){return function(_0x205053){if(!_0x205053){_0x46bbc1[_0x871e('0x17')](0x194);}return _0x205053;};}function handleError(_0x32fa67,_0x395fc5){_0x395fc5=_0x395fc5||0x1f4;return function(_0x4d307f){logger[_0x871e('0x21')](_0x4d307f[_0x871e('0x22')]);if(_0x4d307f['name']){delete _0x4d307f[_0x871e('0x23')];}_0x32fa67[_0x871e('0x18')](_0x395fc5)['send'](_0x4d307f);};}exports[_0x871e('0x24')]=function(_0x529b51,_0x1caede){var _0x16937e={},_0x5bf42e={},_0x3f3865={'count':0x0,'rows':[]};var _0x1d961d=db[_0x871e('0x25')][_0x871e('0x26')];_0x5bf42e['model']=_[_0x871e('0x27')](_0x1d961d);_0x5bf42e['query']=_[_0x871e('0x27')](_0x529b51['query']);_0x5bf42e['filters']=_[_0x871e('0x28')](_0x5bf42e[_0x871e('0x29')],_0x5bf42e[_0x871e('0x2a')]);_0x16937e[_0x871e('0x2b')]=_[_0x871e('0x28')](_0x5bf42e['model'],qs[_0x871e('0x2c')](_0x529b51[_0x871e('0x2a')][_0x871e('0x2c')]));_0x16937e['attributes']=_0x16937e[_0x871e('0x2b')][_0x871e('0x2d')]?_0x16937e[_0x871e('0x2b')]:_0x5bf42e[_0x871e('0x29')];if(!_0x529b51[_0x871e('0x2a')][_0x871e('0x2e')]('nolimit')){_0x16937e[_0x871e('0x2f')]=qs[_0x871e('0x2f')](_0x529b51[_0x871e('0x2a')][_0x871e('0x2f')]);_0x16937e[_0x871e('0x1b')]=qs[_0x871e('0x1b')](_0x529b51[_0x871e('0x2a')]['offset']);}_0x16937e[_0x871e('0x30')]=qs[_0x871e('0x31')](_0x529b51[_0x871e('0x2a')][_0x871e('0x31')]);_0x16937e[_0x871e('0x32')]=qs[_0x871e('0x33')](_[_0x871e('0x34')](_0x529b51[_0x871e('0x2a')],_0x5bf42e[_0x871e('0x33')]));if(_0x529b51[_0x871e('0x2a')][_0x871e('0x35')]){_0x16937e[_0x871e('0x32')]=_[_0x871e('0x36')](_0x16937e['where'],{'$or':_['map'](_0x1d961d,function(_0x17ccd6){if(_0x17ccd6[_0x871e('0x37')]['key']!=='VIRTUAL'){var _0x403eb9={};_0x403eb9[_0x17ccd6[_0x871e('0x38')]]={'$like':'%'+_0x529b51['query']['filter']+'%'};return _0x403eb9;}})});}_0x16937e=_['merge']({},_0x16937e,_0x529b51['options']);var _0x5b99aa={'where':_0x16937e[_0x871e('0x32')]};return db[_0x871e('0x25')]['count'](_0x5b99aa)[_0x871e('0x1f')](function(_0x423da0){_0x3f3865[_0x871e('0x39')]=_0x423da0;if(_0x529b51['query']['includeAll']){_0x16937e[_0x871e('0x3a')]=[{'all':!![]}];}return db['Migration'][_0x871e('0x3b')](_0x16937e);})[_0x871e('0x1f')](function(_0x56a5fa){_0x3f3865[_0x871e('0x3c')]=_0x56a5fa;return _0x3f3865;})[_0x871e('0x1f')](respondWithFilteredResult(_0x1caede,_0x16937e))[_0x871e('0x3d')](handleError(_0x1caede,null));};
\ No newline at end of file
index d5fe83e..98eefb2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6277=['rimraf','../../config/environment','./migration.attributes','define','Migration','migrations','lodash','util','../../config/logger','api','moment','path'];(function(_0x1fc4b3,_0xdf5436){var _0x28271b=function(_0x48644b){while(--_0x48644b){_0x1fc4b3['push'](_0x1fc4b3['shift']());}};_0x28271b(++_0xdf5436);}(_0x6277,0x10e));var _0x7627=function(_0x4aea3a,_0x3839f9){_0x4aea3a=_0x4aea3a-0x0;var _0x5a349e=_0x6277[_0x4aea3a];return _0x5a349e;};'use strict';var _=require(_0x7627('0x0'));var util=require(_0x7627('0x1'));var logger=require(_0x7627('0x2'))(_0x7627('0x3'));var moment=require(_0x7627('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x7627('0x5'));var rimraf=require(_0x7627('0x6'));var config=require(_0x7627('0x7'));var attributes=require(_0x7627('0x8'));module['exports']=function(_0x4967dc,_0x36cfc2){return _0x4967dc[_0x7627('0x9')](_0x7627('0xa'),attributes,{'tableName':_0x7627('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x062c=['../../config/logger','api','moment','request-promise','path','rimraf','./migration.attributes','exports','define','Migration','migrations','lodash','util'];(function(_0x516615,_0x357a73){var _0x399faa=function(_0x1c73d4){while(--_0x1c73d4){_0x516615['push'](_0x516615['shift']());}};_0x399faa(++_0x357a73);}(_0x062c,0xdb));var _0xc062=function(_0x4a7440,_0x26d8a8){_0x4a7440=_0x4a7440-0x0;var _0x1d950c=_0x062c[_0x4a7440];return _0x1d950c;};'use strict';var _=require(_0xc062('0x0'));var util=require(_0xc062('0x1'));var logger=require(_0xc062('0x2'))(_0xc062('0x3'));var moment=require(_0xc062('0x4'));var BPromise=require('bluebird');var rp=require(_0xc062('0x5'));var fs=require('fs');var path=require(_0xc062('0x6'));var rimraf=require(_0xc062('0x7'));var config=require('../../config/environment');var attributes=require(_0xc062('0x8'));module[_0xc062('0x9')]=function(_0x205bf7,_0x42a7e6){return _0x205bf7[_0xc062('0xa')](_0xc062('0xb'),attributes,{'tableName':_0xc062('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 01a608a..ac65780 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0e85=['bluebird','randomstring','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','Migration,\x20%s,\x20%s','request\x20sent','debug','Migration,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','util'];(function(_0x515fd2,_0x266467){var _0x3f03d2=function(_0x5f402a){while(--_0x5f402a){_0x515fd2['push'](_0x515fd2['shift']());}};_0x3f03d2(++_0x266467);}(_0x0e85,0x7c));var _0x50e8=function(_0x3740fe,_0x6c543c){_0x3740fe=_0x3740fe-0x0;var _0x55492b=_0x0e85[_0x3740fe];return _0x55492b;};'use strict';var _=require(_0x50e8('0x0'));var util=require(_0x50e8('0x1'));var moment=require('moment');var BPromise=require(_0x50e8('0x2'));var rs=require(_0x50e8('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x50e8('0x4'))('rpc');var config=require(_0x50e8('0x5'));var jayson=require(_0x50e8('0x6'));var client=jayson[_0x50e8('0x7')][_0x50e8('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x5e8b01,_0x3ce904,_0x108edc){return new BPromise(function(_0x42665e,_0x988da0){return client[_0x50e8('0x9')](_0x5e8b01,_0x108edc)[_0x50e8('0xa')](function(_0x5825f5){logger[_0x50e8('0xb')](_0x50e8('0xc'),_0x3ce904,_0x50e8('0xd'));logger[_0x50e8('0xe')](_0x50e8('0xf'),_0x3ce904,_0x50e8('0xd'),JSON[_0x50e8('0x10')](_0x5825f5));if(_0x5825f5[_0x50e8('0x11')]){if(_0x5825f5['error']['code']===0x1f4){logger[_0x50e8('0x11')](_0x50e8('0xc'),_0x3ce904,_0x5825f5['error']['message']);return _0x988da0(_0x5825f5[_0x50e8('0x11')][_0x50e8('0x12')]);}logger[_0x50e8('0x11')](_0x50e8('0xc'),_0x3ce904,_0x5825f5['error'][_0x50e8('0x12')]);return _0x42665e(_0x5825f5[_0x50e8('0x11')][_0x50e8('0x12')]);}else{logger['info']('Migration,\x20%s,\x20%s',_0x3ce904,_0x50e8('0xd'));_0x42665e(_0x5825f5[_0x50e8('0x13')][_0x50e8('0x12')]);}})[_0x50e8('0x14')](function(_0x211731){logger[_0x50e8('0x11')]('Migration,\x20%s,\x20%s',_0x3ce904,_0x211731);_0x988da0(_0x211731);});});}
\ No newline at end of file
+var _0x44e8=['Migration,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','info','Migration,\x20%s,\x20%s','debug'];(function(_0x5717c8,_0x5df216){var _0x38c3ab=function(_0x4c06cc){while(--_0x4c06cc){_0x5717c8['push'](_0x5717c8['shift']());}};_0x38c3ab(++_0x5df216);}(_0x44e8,0xd7));var _0x844e=function(_0x43b892,_0x5f27f9){_0x43b892=_0x43b892-0x0;var _0x205d36=_0x44e8[_0x43b892];return _0x205d36;};'use strict';var _=require(_0x844e('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x844e('0x1'));var rs=require(_0x844e('0x2'));var fs=require('fs');var Redis=require(_0x844e('0x3'));var db=require(_0x844e('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x844e('0x5'))(_0x844e('0x6'));var config=require(_0x844e('0x7'));var jayson=require(_0x844e('0x8'));var client=jayson['client'][_0x844e('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x238796,_0x1706b3,_0x11cbd6){return new BPromise(function(_0x571b91,_0x31ab50){return client[_0x844e('0xa')](_0x238796,_0x11cbd6)[_0x844e('0xb')](function(_0x134672){logger[_0x844e('0xc')](_0x844e('0xd'),_0x1706b3,'request\x20sent');logger[_0x844e('0xe')](_0x844e('0xf'),_0x1706b3,_0x844e('0x10'),JSON[_0x844e('0x11')](_0x134672));if(_0x134672[_0x844e('0x12')]){if(_0x134672[_0x844e('0x12')][_0x844e('0x13')]===0x1f4){logger['error'](_0x844e('0xd'),_0x1706b3,_0x134672[_0x844e('0x12')]['message']);return _0x31ab50(_0x134672[_0x844e('0x12')][_0x844e('0x14')]);}logger['error'](_0x844e('0xd'),_0x1706b3,_0x134672[_0x844e('0x12')][_0x844e('0x14')]);return _0x571b91(_0x134672['error'][_0x844e('0x14')]);}else{logger[_0x844e('0xc')](_0x844e('0xd'),_0x1706b3,_0x844e('0x10'));_0x571b91(_0x134672[_0x844e('0x15')][_0x844e('0x14')]);}})[_0x844e('0x16')](function(_0x5506ef){logger['error'](_0x844e('0xd'),_0x1706b3,_0x5506ef);_0x31ab50(_0x5506ef);});});}
\ No newline at end of file
index daae51b..5664121 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5bd3=['Router','../../components/auth/service','../../components/interaction/service','./network.controller','get','/:id','isAuthenticated','post','create','put','update','delete','destroy','exports','connect-timeout'];(function(_0x1a9204,_0x1c9e00){var _0x17ca68=function(_0x1f4399){while(--_0x1f4399){_0x1a9204['push'](_0x1a9204['shift']());}};_0x17ca68(++_0x1c9e00);}(_0x5bd3,0x1a3));var _0x35bd=function(_0x88cd7b,_0x4c884c){_0x88cd7b=_0x88cd7b-0x0;var _0x56fcc8=_0x5bd3[_0x88cd7b];return _0x56fcc8;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var timeout=require(_0x35bd('0x0'));var express=require('express');var router=express[_0x35bd('0x1')]();var auth=require(_0x35bd('0x2'));var interaction=require(_0x35bd('0x3'));var config=require('../../config/environment');var controller=require(_0x35bd('0x4'));router[_0x35bd('0x5')]('/',auth['isAuthenticated'](),controller['index']);router[_0x35bd('0x5')](_0x35bd('0x6'),auth[_0x35bd('0x7')](),controller['show']);router[_0x35bd('0x8')]('/',auth[_0x35bd('0x7')](),controller[_0x35bd('0x9')]);router[_0x35bd('0xa')](_0x35bd('0x6'),auth['isAuthenticated'](),controller[_0x35bd('0xb')]);router[_0x35bd('0xc')]('/:id',auth[_0x35bd('0x7')](),controller[_0x35bd('0xd')]);module[_0x35bd('0xe')]=router;
\ No newline at end of file
+var _0x4daa=['post','isAuthenticated','create','put','update','multer','util','path','connect-timeout','Router','../../components/auth/service','../../config/environment','get','/:id','show'];(function(_0xc3f277,_0x558de3){var _0x40f938=function(_0x3787af){while(--_0x3787af){_0xc3f277['push'](_0xc3f277['shift']());}};_0x40f938(++_0x558de3);}(_0x4daa,0x8c));var _0xa4da=function(_0x512550,_0x6a8b6f){_0x512550=_0x512550-0x0;var _0x19f661=_0x4daa[_0x512550];return _0x19f661;};'use strict';var multer=require(_0xa4da('0x0'));var util=require(_0xa4da('0x1'));var path=require(_0xa4da('0x2'));var timeout=require(_0xa4da('0x3'));var express=require('express');var router=express[_0xa4da('0x4')]();var auth=require(_0xa4da('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xa4da('0x6'));var controller=require('./network.controller');router[_0xa4da('0x7')]('/',auth['isAuthenticated'](),controller['index']);router[_0xa4da('0x7')](_0xa4da('0x8'),auth['isAuthenticated'](),controller[_0xa4da('0x9')]);router[_0xa4da('0xa')]('/',auth[_0xa4da('0xb')](),controller[_0xa4da('0xc')]);router[_0xa4da('0xd')](_0xa4da('0x8'),auth[_0xa4da('0xb')](),controller[_0xa4da('0xe')]);router['delete'](_0xa4da('0x8'),auth[_0xa4da('0xb')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index ca7946e..d1292e2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf100=['STRING','sequelize','exports','ENUM'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xf100,0x7d));var _0x0f10=function(_0x371605,_0x1d4a35){_0x371605=_0x371605-0x0;var _0x493097=_0xf100[_0x371605];return _0x493097;};'use strict';var Sequelize=require(_0x0f10('0x0'));module[_0x0f10('0x1')]={'type':{'type':Sequelize[_0x0f10('0x2')]('localnet','externip')},'value':{'type':Sequelize[_0x0f10('0x3')]}};
\ No newline at end of file
+var _0xc772=['exports','ENUM','externip','sequelize'];(function(_0x7aeae5,_0x2e8333){var _0x5aec8f=function(_0x1b81ed){while(--_0x1b81ed){_0x7aeae5['push'](_0x7aeae5['shift']());}};_0x5aec8f(++_0x2e8333);}(_0xc772,0x167));var _0x2c77=function(_0x4b1e47,_0x4f1c17){_0x4b1e47=_0x4b1e47-0x0;var _0x1f697e=_0xc772[_0x4b1e47];return _0x1f697e;};'use strict';var Sequelize=require(_0x2c77('0x0'));module[_0x2c77('0x1')]={'type':{'type':Sequelize[_0x2c77('0x2')]('localnet',_0x2c77('0x3'))},'value':{'type':Sequelize['STRING']}};
\ No newline at end of file
index fd9f963..ca4e94b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','request\x20sent','stringify','error','code','Network,\x20%s,\x20%s','message','info','result','catch','sendStatus','json','count','offset','limit','status','Content-Range','apply','reject','save','destroy','stack','name','index','Network','rawAttributes','model','keys','query','filters','intersection','attributes','fields','nolimit','order','sort','pick','filter','key','VIRTUAL','includeAll','include','findAll','rows','show','length','merge','options','create','sequelize','transaction','body','type','readFileSync','join','server/files/templates/network.ejs','utf8','format','/etc/asterisk/sip_xcally_%s.conf','toLowerCase','Reload','update','find','params','render','root','writeFileSync','chan_sip.so','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','ejs','squel','crypto','desk.js','ioredis','../../components/auth/service','../../config/license/hardware','../../config/utils','../../config/environment','../../mysqldb'];(function(_0xcd07c,_0x8f566c){var _0xb99e27=function(_0x2d19d2){while(--_0x2d19d2){_0xcd07c['push'](_0xcd07c['shift']());}};_0xb99e27(++_0x8f566c);}(_0x7a54,0x106));var _0x47a5=function(_0xbc5a4f,_0x58211e){_0xbc5a4f=_0xbc5a4f-0x0;var _0x3dc318=_0x7a54[_0xbc5a4f];return _0x3dc318;};'use strict';var pdf=require(_0x47a5('0x0'));var emlformat=require(_0x47a5('0x1'));var rimraf=require(_0x47a5('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x47a5('0x3'));var rp=require(_0x47a5('0x4'));var moment=require('moment');var BPromise=require(_0x47a5('0x5'));var Mustache=require(_0x47a5('0x6'));var util=require(_0x47a5('0x7'));var path=require(_0x47a5('0x8'));var sox=require(_0x47a5('0x9'));var csv=require('to-csv');var ejs=require(_0x47a5('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x47a5('0xb'));var crypto=require(_0x47a5('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x47a5('0xd'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0x47a5('0xe'));var authService=require(_0x47a5('0xf'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x47a5('0x10'));var logger=require('../../config/logger')('api');var utils=require(_0x47a5('0x11'));var config=require(_0x47a5('0x12'));var db=require(_0x47a5('0x13'))['db'];var jayson=require(_0x47a5('0x14'));var client=jayson[_0x47a5('0x15')][_0x47a5('0x16')]({'port':0x232a});function checkPasswordPattern(_0x1eae59,_0x5beb89,_0x44bd3e){if(_0x44bd3e){var _0x221b54=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x221b54[_0x47a5('0x17')](_0x5beb89)){return _0x1eae59;}else{throw new Error(_0x47a5('0x18'));}}else{return _0x1eae59;}}function respondWithRpcPromise(_0x139f25,_0x620ee9,_0x3c6c46,_0x190faa){return new BPromise(function(_0x4e99a8,_0x362359){var _0x11faf5=_0x190faa||client;return _0x11faf5[_0x47a5('0x19')](_0x139f25,_0x3c6c46)[_0x47a5('0x1a')](function(_0x1ef44c){logger['info']('Network,\x20%s,\x20%s',_0x620ee9,_0x47a5('0x1b'));logger['debug']('Network,\x20%s,\x20%s,\x20%s',_0x620ee9,_0x47a5('0x1b'),JSON[_0x47a5('0x1c')](_0x1ef44c));if(_0x1ef44c[_0x47a5('0x1d')]){if(_0x1ef44c[_0x47a5('0x1d')][_0x47a5('0x1e')]===0x1f4){logger[_0x47a5('0x1d')](_0x47a5('0x1f'),_0x620ee9,_0x1ef44c[_0x47a5('0x1d')][_0x47a5('0x20')]);return _0x362359(_0x1ef44c['error'][_0x47a5('0x20')]);}logger[_0x47a5('0x1d')]('Network,\x20%s,\x20%s',_0x620ee9,_0x1ef44c[_0x47a5('0x1d')][_0x47a5('0x20')]);return _0x4e99a8(_0x1ef44c[_0x47a5('0x1d')]['message']);}else{logger[_0x47a5('0x21')](_0x47a5('0x1f'),_0x620ee9,_0x47a5('0x1b'));_0x4e99a8(_0x1ef44c[_0x47a5('0x22')]['message']);}})[_0x47a5('0x23')](function(_0x385687){logger['error'](_0x47a5('0x1f'),_0x620ee9,_0x385687);_0x362359(_0x385687);});});}function respondWithStatusCode(_0xc4cd63,_0x4437f1){_0x4437f1=_0x4437f1||0xcc;return function(_0x129ce5){if(_0x129ce5){return _0xc4cd63[_0x47a5('0x24')](_0x4437f1);}return _0xc4cd63['status'](_0x4437f1)['end']();};}function respondWithResult(_0x136745,_0x5686db){_0x5686db=_0x5686db||0xc8;return function(_0x1ea9c8){if(_0x1ea9c8){return _0x136745['status'](_0x5686db)[_0x47a5('0x25')](_0x1ea9c8);}};}function respondWithFilteredResult(_0x378208,_0x36ad34){return function(_0x1dac65){if(_0x1dac65){var _0x21f296=_0x1dac65[_0x47a5('0x26')],_0x3ba0b7=_0x36ad34[_0x47a5('0x27')],_0x24b162=_0x36ad34[_0x47a5('0x27')]+_0x36ad34[_0x47a5('0x28')],_0x136b14;if(_0x24b162>=_0x21f296){_0x24b162=_0x21f296;_0x136b14=0xc8;}else{_0x136b14=0xce;}_0x378208[_0x47a5('0x29')](_0x136b14);return _0x378208['set'](_0x47a5('0x2a'),_0x3ba0b7+'-'+_0x24b162+'/'+_0x21f296)['json'](_0x1dac65);}return null;};}function patchUpdates(_0x2ef875){return function(_0x9ac908){try{jsonpatch[_0x47a5('0x2b')](_0x9ac908,_0x2ef875,!![]);}catch(_0x4d6b57){return BPromise[_0x47a5('0x2c')](_0x4d6b57);}return _0x9ac908[_0x47a5('0x2d')]();};}function saveUpdates(_0x39b50b,_0x1f1c68){return function(_0x51cc81){if(_0x51cc81){return _0x51cc81['update'](_0x39b50b)[_0x47a5('0x1a')](function(_0xfb5ddb){return _0xfb5ddb;});}return null;};}function removeEntity(_0x5bd7eb,_0x4e1006){return function(_0x836303){if(_0x836303){return _0x836303[_0x47a5('0x2e')]()['then'](function(){_0x5bd7eb[_0x47a5('0x29')](0xcc)['end']();});}};}function handleEntityNotFound(_0x122ed6,_0xd972c){return function(_0x5c5162){if(!_0x5c5162){_0x122ed6['sendStatus'](0x194);}return _0x5c5162;};}function handleError(_0x274e34,_0x5910bb){_0x5910bb=_0x5910bb||0x1f4;return function(_0x403028){logger[_0x47a5('0x1d')](_0x403028[_0x47a5('0x2f')]);if(_0x403028['name']){delete _0x403028[_0x47a5('0x30')];}_0x274e34['status'](_0x5910bb)['send'](_0x403028);};}exports[_0x47a5('0x31')]=function(_0x5a8a7c,_0x25cce0){var _0x5ef577={},_0x21ad34={},_0x3534cb={'count':0x0,'rows':[]};var _0x38c8d4=db[_0x47a5('0x32')][_0x47a5('0x33')];_0x21ad34[_0x47a5('0x34')]=_[_0x47a5('0x35')](_0x38c8d4);_0x21ad34[_0x47a5('0x36')]=_[_0x47a5('0x35')](_0x5a8a7c['query']);_0x21ad34[_0x47a5('0x37')]=_[_0x47a5('0x38')](_0x21ad34['model'],_0x21ad34[_0x47a5('0x36')]);_0x5ef577[_0x47a5('0x39')]=_[_0x47a5('0x38')](_0x21ad34['model'],qs[_0x47a5('0x3a')](_0x5a8a7c[_0x47a5('0x36')]['fields']));_0x5ef577[_0x47a5('0x39')]=_0x5ef577[_0x47a5('0x39')]['length']?_0x5ef577['attributes']:_0x21ad34['model'];if(!_0x5a8a7c[_0x47a5('0x36')]['hasOwnProperty'](_0x47a5('0x3b'))){_0x5ef577[_0x47a5('0x28')]=qs[_0x47a5('0x28')](_0x5a8a7c[_0x47a5('0x36')][_0x47a5('0x28')]);_0x5ef577[_0x47a5('0x27')]=qs[_0x47a5('0x27')](_0x5a8a7c[_0x47a5('0x36')][_0x47a5('0x27')]);}_0x5ef577[_0x47a5('0x3c')]=qs[_0x47a5('0x3d')](_0x5a8a7c[_0x47a5('0x36')][_0x47a5('0x3d')]);_0x5ef577['where']=qs[_0x47a5('0x37')](_[_0x47a5('0x3e')](_0x5a8a7c[_0x47a5('0x36')],_0x21ad34[_0x47a5('0x37')]));if(_0x5a8a7c['query'][_0x47a5('0x3f')]){_0x5ef577['where']=_['merge'](_0x5ef577['where'],{'$or':_['map'](_0x38c8d4,function(_0x27dd5d){if(_0x27dd5d['type'][_0x47a5('0x40')]!==_0x47a5('0x41')){var _0x448610={};_0x448610[_0x27dd5d['field']]={'$like':'%'+_0x5a8a7c[_0x47a5('0x36')][_0x47a5('0x3f')]+'%'};return _0x448610;}})});}_0x5ef577=_['merge']({},_0x5ef577,_0x5a8a7c['options']);var _0xbe21d9={'where':_0x5ef577['where']};return db[_0x47a5('0x32')][_0x47a5('0x26')](_0xbe21d9)[_0x47a5('0x1a')](function(_0xd75ca3){_0x3534cb[_0x47a5('0x26')]=_0xd75ca3;if(_0x5a8a7c[_0x47a5('0x36')][_0x47a5('0x42')]){_0x5ef577[_0x47a5('0x43')]=[{'all':!![]}];}return db[_0x47a5('0x32')][_0x47a5('0x44')](_0x5ef577);})[_0x47a5('0x1a')](function(_0x3c3ebf){_0x3534cb[_0x47a5('0x45')]=_0x3c3ebf;return _0x3534cb;})[_0x47a5('0x1a')](respondWithFilteredResult(_0x25cce0,_0x5ef577))[_0x47a5('0x23')](handleError(_0x25cce0,null));};exports[_0x47a5('0x46')]=function(_0x512e65,_0x2d38de){var _0x23bb04={'raw':!![],'where':{'id':_0x512e65['params']['id']}},_0x49eab1={};_0x49eab1[_0x47a5('0x34')]=_['keys'](db[_0x47a5('0x32')][_0x47a5('0x33')]);_0x49eab1['query']=_['keys'](_0x512e65[_0x47a5('0x36')]);_0x49eab1['filters']=_[_0x47a5('0x38')](_0x49eab1[_0x47a5('0x34')],_0x49eab1[_0x47a5('0x36')]);_0x23bb04[_0x47a5('0x39')]=_[_0x47a5('0x38')](_0x49eab1[_0x47a5('0x34')],qs[_0x47a5('0x3a')](_0x512e65['query']['fields']));_0x23bb04[_0x47a5('0x39')]=_0x23bb04[_0x47a5('0x39')][_0x47a5('0x47')]?_0x23bb04[_0x47a5('0x39')]:_0x49eab1[_0x47a5('0x34')];if(_0x512e65[_0x47a5('0x36')][_0x47a5('0x42')]){_0x23bb04['include']=[{'all':!![]}];}_0x23bb04=_[_0x47a5('0x48')]({},_0x23bb04,_0x512e65[_0x47a5('0x49')]);return db[_0x47a5('0x32')]['find'](_0x23bb04)[_0x47a5('0x1a')](handleEntityNotFound(_0x2d38de,null))['then'](respondWithResult(_0x2d38de,null))[_0x47a5('0x23')](handleError(_0x2d38de,null));};exports[_0x47a5('0x4a')]=function(_0x46e90b,_0xf03bd5,_0x588551){var _0x3adf14;return db[_0x47a5('0x4b')][_0x47a5('0x4c')](function(_0x3a2de4){return db[_0x47a5('0x32')][_0x47a5('0x4a')](_0x46e90b[_0x47a5('0x4d')],{'raw':!![]})['then'](function(_0x2a0aa2){_0x3adf14=_0x2a0aa2;return db[_0x47a5('0x32')][_0x47a5('0x44')]({'where':{'type':_0x46e90b[_0x47a5('0x4d')][_0x47a5('0x4e')]},'raw':!![]});})[_0x47a5('0x1a')](function(_0x572233){var _0x1ad6a9=fs[_0x47a5('0x4f')](path[_0x47a5('0x50')](config['root'],_0x47a5('0x51')),_0x47a5('0x52'));var _0x183b3c=ejs['render'](_0x1ad6a9,{'networks':_0x572233||[]});fs['writeFileSync'](util[_0x47a5('0x53')](_0x47a5('0x54'),_0x46e90b['body']['type'][_0x47a5('0x55')]()),_0x183b3c);})['then'](function(){return respondWithRpcPromise(_0x47a5('0x56'),'create',{'module':'chan_sip.so'});})[_0x47a5('0x1a')](function(){return _0x3adf14;});})[_0x47a5('0x1a')](respondWithResult(_0xf03bd5,0xc9))['catch'](handleError(_0xf03bd5,null));};exports[_0x47a5('0x57')]=function(_0x72fe,_0x4b706a,_0x5b6127){var _0x16b4fd;return db[_0x47a5('0x4b')][_0x47a5('0x4c')](function(_0x2931e4){return db['Network'][_0x47a5('0x58')]({'where':{'id':_0x72fe[_0x47a5('0x59')]['id']}})[_0x47a5('0x1a')](handleEntityNotFound(_0x4b706a,null))['then'](saveUpdates(_0x72fe[_0x47a5('0x4d')],null))['then'](function(_0x485e3c){if(_0x485e3c){_0x16b4fd=_0x485e3c;return db[_0x47a5('0x32')][_0x47a5('0x44')]({'where':{'type':_0x16b4fd[_0x47a5('0x4e')]},'raw':!![]});}return null;})[_0x47a5('0x1a')](function(_0x4966af){if(_0x4966af){var _0x144af9=fs['readFileSync'](path['join'](config['root'],'server/files/templates/network.ejs'),_0x47a5('0x52'));var _0x6cd4ea=ejs[_0x47a5('0x5a')](_0x144af9,{'networks':_0x4966af||[]});fs['writeFileSync'](util['format'](_0x47a5('0x54'),_0x16b4fd[_0x47a5('0x4e')][_0x47a5('0x55')]()),_0x6cd4ea);return respondWithRpcPromise(_0x47a5('0x56'),_0x47a5('0x57'),{'module':'chan_sip.so'});}return null;})[_0x47a5('0x1a')](function(_0x519e9e){if(_0x519e9e){return _0x16b4fd;}return null;});})[_0x47a5('0x1a')](respondWithResult(_0x4b706a,null))[_0x47a5('0x23')](handleError(_0x4b706a,null));};exports['destroy']=function(_0x32b4de,_0x345104,_0x132854){var _0x3e8274;return db[_0x47a5('0x32')][_0x47a5('0x58')]({'where':{'id':_0x32b4de[_0x47a5('0x59')]['id']}})[_0x47a5('0x1a')](function(_0x57ed0a){_0x3e8274=_0x57ed0a;return _0x57ed0a;})[_0x47a5('0x1a')](handleEntityNotFound(_0x345104,null))[_0x47a5('0x1a')](removeEntity(_0x345104,null))[_0x47a5('0x1a')](function(){if(_0x3e8274){return db[_0x47a5('0x32')][_0x47a5('0x44')]({'where':{'type':_0x3e8274['type']},'raw':!![]});}})[_0x47a5('0x1a')](function(_0xdfcecc){if(_0xdfcecc){var _0x1224bc=fs[_0x47a5('0x4f')](path[_0x47a5('0x50')](config[_0x47a5('0x5b')],_0x47a5('0x51')),_0x47a5('0x52'));var _0x350af8=ejs[_0x47a5('0x5a')](_0x1224bc,{'networks':_0xdfcecc||[]});fs[_0x47a5('0x5c')](util[_0x47a5('0x53')](_0x47a5('0x54'),_0x3e8274[_0x47a5('0x4e')][_0x47a5('0x55')]()),_0x350af8);return respondWithRpcPromise('Reload',_0x47a5('0x2e'),{'module':_0x47a5('0x5d')});}})[_0x47a5('0x23')](handleError(_0x345104,null));};
\ No newline at end of file
+var _0xadb5=['squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','jayson/promise','http','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','Network,\x20%s,\x20%s','request\x20sent','debug','error','code','message','result','catch','status','end','offset','limit','set','Content-Range','apply','reject','save','update','stack','name','index','rawAttributes','keys','filters','intersection','query','model','fields','attributes','length','where','pick','filter','map','type','key','VIRTUAL','field','Network','count','includeAll','include','show','params','options','find','create','sequelize','transaction','body','findAll','readFileSync','join','server/files/templates/network.ejs','utf8','/etc/asterisk/sip_xcally_%s.conf','toLowerCase','Reload','chan_sip.so','root','render','writeFileSync','destroy','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','sox','to-csv','ejs','lodash'];(function(_0x5bd426,_0x4878e5){var _0x23a7eb=function(_0x594b42){while(--_0x594b42){_0x5bd426['push'](_0x5bd426['shift']());}};_0x23a7eb(++_0x4878e5);}(_0xadb5,0xad));var _0x5adb=function(_0x5c566f,_0x296792){_0x5c566f=_0x5c566f-0x0;var _0x269e79=_0xadb5[_0x5c566f];return _0x269e79;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x5adb('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x5adb('0x1'));var jsonpatch=require(_0x5adb('0x2'));var rp=require(_0x5adb('0x3'));var moment=require('moment');var BPromise=require(_0x5adb('0x4'));var Mustache=require(_0x5adb('0x5'));var util=require(_0x5adb('0x6'));var path=require('path');var sox=require(_0x5adb('0x7'));var csv=require(_0x5adb('0x8'));var ejs=require(_0x5adb('0x9'));var fs=require('fs');var _=require(_0x5adb('0xa'));var squel=require(_0x5adb('0xb'));var crypto=require(_0x5adb('0xc'));var jsforce=require(_0x5adb('0xd'));var deskjs=require(_0x5adb('0xe'));var toCsv=require(_0x5adb('0x8'));var querystring=require(_0x5adb('0xf'));var Papa=require(_0x5adb('0x10'));var Redis=require(_0x5adb('0x11'));var authService=require(_0x5adb('0x12'));var qs=require(_0x5adb('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0x5adb('0x14'));var utils=require(_0x5adb('0x15'));var config=require(_0x5adb('0x16'));var db=require('../../mysqldb')['db'];var jayson=require(_0x5adb('0x17'));var client=jayson['client'][_0x5adb('0x18')]({'port':0x232a});function checkPasswordPattern(_0x5433bf,_0x8cfcc6,_0x39a0b3){if(_0x39a0b3){var _0x44abe3=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x44abe3['test'](_0x8cfcc6)){return _0x5433bf;}else{throw new Error(_0x5adb('0x19'));}}else{return _0x5433bf;}}function respondWithRpcPromise(_0x34af2c,_0xf82f72,_0x5263ec,_0x2312de){return new BPromise(function(_0x518823,_0x367d82){var _0x42a482=_0x2312de||client;return _0x42a482[_0x5adb('0x1a')](_0x34af2c,_0x5263ec)[_0x5adb('0x1b')](function(_0x1c0f97){logger[_0x5adb('0x1c')](_0x5adb('0x1d'),_0xf82f72,_0x5adb('0x1e'));logger[_0x5adb('0x1f')]('Network,\x20%s,\x20%s,\x20%s',_0xf82f72,_0x5adb('0x1e'),JSON['stringify'](_0x1c0f97));if(_0x1c0f97[_0x5adb('0x20')]){if(_0x1c0f97['error'][_0x5adb('0x21')]===0x1f4){logger['error']('Network,\x20%s,\x20%s',_0xf82f72,_0x1c0f97[_0x5adb('0x20')][_0x5adb('0x22')]);return _0x367d82(_0x1c0f97[_0x5adb('0x20')][_0x5adb('0x22')]);}logger[_0x5adb('0x20')]('Network,\x20%s,\x20%s',_0xf82f72,_0x1c0f97[_0x5adb('0x20')]['message']);return _0x518823(_0x1c0f97['error'][_0x5adb('0x22')]);}else{logger[_0x5adb('0x1c')](_0x5adb('0x1d'),_0xf82f72,_0x5adb('0x1e'));_0x518823(_0x1c0f97[_0x5adb('0x23')][_0x5adb('0x22')]);}})[_0x5adb('0x24')](function(_0x4ca150){logger[_0x5adb('0x20')](_0x5adb('0x1d'),_0xf82f72,_0x4ca150);_0x367d82(_0x4ca150);});});}function respondWithStatusCode(_0x3220cd,_0x3839fb){_0x3839fb=_0x3839fb||0xcc;return function(_0xeb556c){if(_0xeb556c){return _0x3220cd['sendStatus'](_0x3839fb);}return _0x3220cd[_0x5adb('0x25')](_0x3839fb)[_0x5adb('0x26')]();};}function respondWithResult(_0x5aed76,_0x1feecf){_0x1feecf=_0x1feecf||0xc8;return function(_0x1ded9f){if(_0x1ded9f){return _0x5aed76[_0x5adb('0x25')](_0x1feecf)['json'](_0x1ded9f);}};}function respondWithFilteredResult(_0x13ad1d,_0xbe21b1){return function(_0x3a4fca){if(_0x3a4fca){var _0x2c64a3=_0x3a4fca['count'],_0x36459b=_0xbe21b1['offset'],_0x1c06c4=_0xbe21b1[_0x5adb('0x27')]+_0xbe21b1[_0x5adb('0x28')],_0x4a5d46;if(_0x1c06c4>=_0x2c64a3){_0x1c06c4=_0x2c64a3;_0x4a5d46=0xc8;}else{_0x4a5d46=0xce;}_0x13ad1d[_0x5adb('0x25')](_0x4a5d46);return _0x13ad1d[_0x5adb('0x29')](_0x5adb('0x2a'),_0x36459b+'-'+_0x1c06c4+'/'+_0x2c64a3)['json'](_0x3a4fca);}return null;};}function patchUpdates(_0x11ec2a){return function(_0x34b793){try{jsonpatch[_0x5adb('0x2b')](_0x34b793,_0x11ec2a,!![]);}catch(_0x3b1fed){return BPromise[_0x5adb('0x2c')](_0x3b1fed);}return _0x34b793[_0x5adb('0x2d')]();};}function saveUpdates(_0x28190d,_0x28bf1f){return function(_0x138bf6){if(_0x138bf6){return _0x138bf6[_0x5adb('0x2e')](_0x28190d)['then'](function(_0x2e46ce){return _0x2e46ce;});}return null;};}function removeEntity(_0x4c8b2e,_0x12424d){return function(_0x20cde6){if(_0x20cde6){return _0x20cde6['destroy']()[_0x5adb('0x1b')](function(){_0x4c8b2e[_0x5adb('0x25')](0xcc)[_0x5adb('0x26')]();});}};}function handleEntityNotFound(_0x4a3661,_0x173789){return function(_0x14cf00){if(!_0x14cf00){_0x4a3661['sendStatus'](0x194);}return _0x14cf00;};}function handleError(_0x5bb227,_0x1ed9ea){_0x1ed9ea=_0x1ed9ea||0x1f4;return function(_0x49dd03){logger[_0x5adb('0x20')](_0x49dd03[_0x5adb('0x2f')]);if(_0x49dd03[_0x5adb('0x30')]){delete _0x49dd03[_0x5adb('0x30')];}_0x5bb227[_0x5adb('0x25')](_0x1ed9ea)['send'](_0x49dd03);};}exports[_0x5adb('0x31')]=function(_0x215b88,_0x1c3a5c){var _0x54851b={},_0x4c8870={},_0x32eb69={'count':0x0,'rows':[]};var _0x5d1baa=db['Network'][_0x5adb('0x32')];_0x4c8870['model']=_[_0x5adb('0x33')](_0x5d1baa);_0x4c8870['query']=_[_0x5adb('0x33')](_0x215b88['query']);_0x4c8870[_0x5adb('0x34')]=_[_0x5adb('0x35')](_0x4c8870['model'],_0x4c8870[_0x5adb('0x36')]);_0x54851b['attributes']=_[_0x5adb('0x35')](_0x4c8870[_0x5adb('0x37')],qs[_0x5adb('0x38')](_0x215b88['query'][_0x5adb('0x38')]));_0x54851b[_0x5adb('0x39')]=_0x54851b[_0x5adb('0x39')][_0x5adb('0x3a')]?_0x54851b[_0x5adb('0x39')]:_0x4c8870['model'];if(!_0x215b88['query']['hasOwnProperty']('nolimit')){_0x54851b[_0x5adb('0x28')]=qs[_0x5adb('0x28')](_0x215b88[_0x5adb('0x36')][_0x5adb('0x28')]);_0x54851b[_0x5adb('0x27')]=qs[_0x5adb('0x27')](_0x215b88[_0x5adb('0x36')][_0x5adb('0x27')]);}_0x54851b['order']=qs['sort'](_0x215b88[_0x5adb('0x36')]['sort']);_0x54851b[_0x5adb('0x3b')]=qs[_0x5adb('0x34')](_[_0x5adb('0x3c')](_0x215b88[_0x5adb('0x36')],_0x4c8870[_0x5adb('0x34')]));if(_0x215b88['query'][_0x5adb('0x3d')]){_0x54851b[_0x5adb('0x3b')]=_['merge'](_0x54851b[_0x5adb('0x3b')],{'$or':_[_0x5adb('0x3e')](_0x5d1baa,function(_0x5833c8){if(_0x5833c8[_0x5adb('0x3f')][_0x5adb('0x40')]!==_0x5adb('0x41')){var _0x35c379={};_0x35c379[_0x5833c8[_0x5adb('0x42')]]={'$like':'%'+_0x215b88[_0x5adb('0x36')][_0x5adb('0x3d')]+'%'};return _0x35c379;}})});}_0x54851b=_['merge']({},_0x54851b,_0x215b88['options']);var _0x26a656={'where':_0x54851b[_0x5adb('0x3b')]};return db[_0x5adb('0x43')][_0x5adb('0x44')](_0x26a656)['then'](function(_0x507e48){_0x32eb69[_0x5adb('0x44')]=_0x507e48;if(_0x215b88[_0x5adb('0x36')][_0x5adb('0x45')]){_0x54851b[_0x5adb('0x46')]=[{'all':!![]}];}return db[_0x5adb('0x43')]['findAll'](_0x54851b);})[_0x5adb('0x1b')](function(_0x437f52){_0x32eb69['rows']=_0x437f52;return _0x32eb69;})[_0x5adb('0x1b')](respondWithFilteredResult(_0x1c3a5c,_0x54851b))[_0x5adb('0x24')](handleError(_0x1c3a5c,null));};exports[_0x5adb('0x47')]=function(_0x24758f,_0x186bd2){var _0x3a5409={'raw':!![],'where':{'id':_0x24758f[_0x5adb('0x48')]['id']}},_0x39840e={};_0x39840e['model']=_[_0x5adb('0x33')](db['Network']['rawAttributes']);_0x39840e['query']=_[_0x5adb('0x33')](_0x24758f[_0x5adb('0x36')]);_0x39840e[_0x5adb('0x34')]=_['intersection'](_0x39840e[_0x5adb('0x37')],_0x39840e['query']);_0x3a5409[_0x5adb('0x39')]=_[_0x5adb('0x35')](_0x39840e[_0x5adb('0x37')],qs['fields'](_0x24758f[_0x5adb('0x36')]['fields']));_0x3a5409[_0x5adb('0x39')]=_0x3a5409[_0x5adb('0x39')]['length']?_0x3a5409[_0x5adb('0x39')]:_0x39840e[_0x5adb('0x37')];if(_0x24758f[_0x5adb('0x36')][_0x5adb('0x45')]){_0x3a5409[_0x5adb('0x46')]=[{'all':!![]}];}_0x3a5409=_['merge']({},_0x3a5409,_0x24758f[_0x5adb('0x49')]);return db[_0x5adb('0x43')][_0x5adb('0x4a')](_0x3a5409)[_0x5adb('0x1b')](handleEntityNotFound(_0x186bd2,null))['then'](respondWithResult(_0x186bd2,null))[_0x5adb('0x24')](handleError(_0x186bd2,null));};exports[_0x5adb('0x4b')]=function(_0x3b4794,_0x4d98d0,_0x2b34a8){var _0xd0e5b7;return db[_0x5adb('0x4c')][_0x5adb('0x4d')](function(_0x4f2da9){return db[_0x5adb('0x43')][_0x5adb('0x4b')](_0x3b4794[_0x5adb('0x4e')],{'raw':!![]})[_0x5adb('0x1b')](function(_0xa25ac3){_0xd0e5b7=_0xa25ac3;return db['Network'][_0x5adb('0x4f')]({'where':{'type':_0x3b4794['body'][_0x5adb('0x3f')]},'raw':!![]});})['then'](function(_0x31ae72){var _0x35df22=fs[_0x5adb('0x50')](path[_0x5adb('0x51')](config['root'],_0x5adb('0x52')),_0x5adb('0x53'));var _0x24b1f1=ejs['render'](_0x35df22,{'networks':_0x31ae72||[]});fs['writeFileSync'](util['format'](_0x5adb('0x54'),_0x3b4794[_0x5adb('0x4e')][_0x5adb('0x3f')][_0x5adb('0x55')]()),_0x24b1f1);})[_0x5adb('0x1b')](function(){return respondWithRpcPromise(_0x5adb('0x56'),_0x5adb('0x4b'),{'module':_0x5adb('0x57')});})[_0x5adb('0x1b')](function(){return _0xd0e5b7;});})[_0x5adb('0x1b')](respondWithResult(_0x4d98d0,0xc9))[_0x5adb('0x24')](handleError(_0x4d98d0,null));};exports[_0x5adb('0x2e')]=function(_0x2c2357,_0x511746,_0x49f4c8){var _0x3d55c2;return db[_0x5adb('0x4c')][_0x5adb('0x4d')](function(_0xdb7d8f){return db['Network'][_0x5adb('0x4a')]({'where':{'id':_0x2c2357[_0x5adb('0x48')]['id']}})['then'](handleEntityNotFound(_0x511746,null))[_0x5adb('0x1b')](saveUpdates(_0x2c2357[_0x5adb('0x4e')],null))[_0x5adb('0x1b')](function(_0x5edd60){if(_0x5edd60){_0x3d55c2=_0x5edd60;return db[_0x5adb('0x43')][_0x5adb('0x4f')]({'where':{'type':_0x3d55c2[_0x5adb('0x3f')]},'raw':!![]});}return null;})[_0x5adb('0x1b')](function(_0x330290){if(_0x330290){var _0x428019=fs['readFileSync'](path[_0x5adb('0x51')](config[_0x5adb('0x58')],_0x5adb('0x52')),'utf8');var _0xcd71d2=ejs[_0x5adb('0x59')](_0x428019,{'networks':_0x330290||[]});fs[_0x5adb('0x5a')](util['format'](_0x5adb('0x54'),_0x3d55c2['type'][_0x5adb('0x55')]()),_0xcd71d2);return respondWithRpcPromise(_0x5adb('0x56'),_0x5adb('0x2e'),{'module':'chan_sip.so'});}return null;})[_0x5adb('0x1b')](function(_0x3627d1){if(_0x3627d1){return _0x3d55c2;}return null;});})['then'](respondWithResult(_0x511746,null))[_0x5adb('0x24')](handleError(_0x511746,null));};exports[_0x5adb('0x5b')]=function(_0x248739,_0x3fcad5,_0x55cd0a){var _0x4290bb;return db[_0x5adb('0x43')][_0x5adb('0x4a')]({'where':{'id':_0x248739[_0x5adb('0x48')]['id']}})['then'](function(_0x53a4bc){_0x4290bb=_0x53a4bc;return _0x53a4bc;})[_0x5adb('0x1b')](handleEntityNotFound(_0x3fcad5,null))['then'](removeEntity(_0x3fcad5,null))['then'](function(){if(_0x4290bb){return db['Network'][_0x5adb('0x4f')]({'where':{'type':_0x4290bb[_0x5adb('0x3f')]},'raw':!![]});}})['then'](function(_0x395350){if(_0x395350){var _0x91e023=fs[_0x5adb('0x50')](path[_0x5adb('0x51')](config[_0x5adb('0x58')],_0x5adb('0x52')),_0x5adb('0x53'));var _0x1ffcd3=ejs['render'](_0x91e023,{'networks':_0x395350||[]});fs['writeFileSync'](util['format'](_0x5adb('0x54'),_0x4290bb[_0x5adb('0x3f')][_0x5adb('0x55')]()),_0x1ffcd3);return respondWithRpcPromise(_0x5adb('0x56'),_0x5adb('0x5b'),{'module':_0x5adb('0x57')});}})[_0x5adb('0x24')](handleError(_0x3fcad5,null));};
\ No newline at end of file
index 3c8611c..d6be3cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0318=['lodash','moment','bluebird','request-promise','path','rimraf','./network.attributes','exports','define','Network','network'];(function(_0x74e915,_0x5afa18){var _0x48bb75=function(_0x231f06){while(--_0x231f06){_0x74e915['push'](_0x74e915['shift']());}};_0x48bb75(++_0x5afa18);}(_0x0318,0xb0));var _0x8031=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x0318[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x8031('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0x8031('0x1'));var BPromise=require(_0x8031('0x2'));var rp=require(_0x8031('0x3'));var fs=require('fs');var path=require(_0x8031('0x4'));var rimraf=require(_0x8031('0x5'));var config=require('../../config/environment');var attributes=require(_0x8031('0x6'));module[_0x8031('0x7')]=function(_0x138174,_0x3d44a7){return _0x138174[_0x8031('0x8')](_0x8031('0x9'),attributes,{'tableName':_0x8031('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8bb3=['util','../../config/logger','api','request-promise','path','rimraf','./network.attributes','exports','define','Network','lodash'];(function(_0x371bc2,_0x1636d4){var _0x47a744=function(_0x26bca5){while(--_0x26bca5){_0x371bc2['push'](_0x371bc2['shift']());}};_0x47a744(++_0x1636d4);}(_0x8bb3,0x180));var _0x38bb=function(_0x1f2673,_0x310af8){_0x1f2673=_0x1f2673-0x0;var _0x2f2712=_0x8bb3[_0x1f2673];return _0x2f2712;};'use strict';var _=require(_0x38bb('0x0'));var util=require(_0x38bb('0x1'));var logger=require(_0x38bb('0x2'))(_0x38bb('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x38bb('0x4'));var fs=require('fs');var path=require(_0x38bb('0x5'));var rimraf=require(_0x38bb('0x6'));var config=require('../../config/environment');var attributes=require(_0x38bb('0x7'));module[_0x38bb('0x8')]=function(_0x226401,_0x5093a8){return _0x226401[_0x38bb('0x9')](_0x38bb('0xa'),attributes,{'tableName':'network','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 784514d..6fb91c5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xca9e=['moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','Network,\x20%s,\x20%s','request\x20sent','debug','Network,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','catch','lodash','util'];(function(_0x4882dc,_0x1a6680){var _0x45257f=function(_0x4f1768){while(--_0x4f1768){_0x4882dc['push'](_0x4882dc['shift']());}};_0x45257f(++_0x1a6680);}(_0xca9e,0x136));var _0xeca9=function(_0x3d5291,_0x4eb75b){_0x3d5291=_0x3d5291-0x0;var _0x2719b3=_0xca9e[_0x3d5291];return _0x2719b3;};'use strict';var _=require(_0xeca9('0x0'));var util=require(_0xeca9('0x1'));var moment=require(_0xeca9('0x2'));var BPromise=require(_0xeca9('0x3'));var rs=require(_0xeca9('0x4'));var fs=require('fs');var Redis=require(_0xeca9('0x5'));var db=require(_0xeca9('0x6'))['db'];var utils=require(_0xeca9('0x7'));var logger=require(_0xeca9('0x8'))(_0xeca9('0x9'));var config=require(_0xeca9('0xa'));var jayson=require(_0xeca9('0xb'));var client=jayson[_0xeca9('0xc')][_0xeca9('0xd')]({'port':0x232a});function respondWithRpcPromise(_0x483e41,_0x369f5e,_0x1774f3){return new BPromise(function(_0x4d57ee,_0x4eaf49){return client[_0xeca9('0xe')](_0x483e41,_0x1774f3)[_0xeca9('0xf')](function(_0x1673b6){logger['info'](_0xeca9('0x10'),_0x369f5e,_0xeca9('0x11'));logger[_0xeca9('0x12')](_0xeca9('0x13'),_0x369f5e,_0xeca9('0x11'),JSON[_0xeca9('0x14')](_0x1673b6));if(_0x1673b6['error']){if(_0x1673b6[_0xeca9('0x15')][_0xeca9('0x16')]===0x1f4){logger['error'](_0xeca9('0x10'),_0x369f5e,_0x1673b6['error'][_0xeca9('0x17')]);return _0x4eaf49(_0x1673b6[_0xeca9('0x15')]['message']);}logger[_0xeca9('0x15')](_0xeca9('0x10'),_0x369f5e,_0x1673b6[_0xeca9('0x15')]['message']);return _0x4d57ee(_0x1673b6[_0xeca9('0x15')][_0xeca9('0x17')]);}else{logger[_0xeca9('0x18')](_0xeca9('0x10'),_0x369f5e,'request\x20sent');_0x4d57ee(_0x1673b6['result'][_0xeca9('0x17')]);}})[_0xeca9('0x19')](function(_0x553965){logger[_0xeca9('0x15')](_0xeca9('0x10'),_0x369f5e,_0x553965);_0x4eaf49(_0x553965);});});}
\ No newline at end of file
+var _0x1261=['then','info','Network,\x20%s,\x20%s','request\x20sent','Network,\x20%s,\x20%s,\x20%s','error','code','message','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','http','request'];(function(_0x11be11,_0x210411){var _0x46103a=function(_0xaa613b){while(--_0xaa613b){_0x11be11['push'](_0x11be11['shift']());}};_0x46103a(++_0x210411);}(_0x1261,0x144));var _0x1126=function(_0x50ac27,_0x1306e3){_0x50ac27=_0x50ac27-0x0;var _0x45f86a=_0x1261[_0x50ac27];return _0x45f86a;};'use strict';var _=require('lodash');var util=require(_0x1126('0x0'));var moment=require(_0x1126('0x1'));var BPromise=require(_0x1126('0x2'));var rs=require(_0x1126('0x3'));var fs=require('fs');var Redis=require(_0x1126('0x4'));var db=require(_0x1126('0x5'))['db'];var utils=require(_0x1126('0x6'));var logger=require(_0x1126('0x7'))(_0x1126('0x8'));var config=require(_0x1126('0x9'));var jayson=require('jayson/promise');var client=jayson['client'][_0x1126('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x907180,_0x4f239c,_0x17e5f0){return new BPromise(function(_0x28772d,_0x245be9){return client[_0x1126('0xb')](_0x907180,_0x17e5f0)[_0x1126('0xc')](function(_0x59cfa1){logger[_0x1126('0xd')](_0x1126('0xe'),_0x4f239c,_0x1126('0xf'));logger['debug'](_0x1126('0x10'),_0x4f239c,'request\x20sent',JSON['stringify'](_0x59cfa1));if(_0x59cfa1[_0x1126('0x11')]){if(_0x59cfa1['error'][_0x1126('0x12')]===0x1f4){logger[_0x1126('0x11')](_0x1126('0xe'),_0x4f239c,_0x59cfa1[_0x1126('0x11')][_0x1126('0x13')]);return _0x245be9(_0x59cfa1[_0x1126('0x11')][_0x1126('0x13')]);}logger[_0x1126('0x11')](_0x1126('0xe'),_0x4f239c,_0x59cfa1['error']['message']);return _0x28772d(_0x59cfa1[_0x1126('0x11')][_0x1126('0x13')]);}else{logger[_0x1126('0xd')]('Network,\x20%s,\x20%s',_0x4f239c,_0x1126('0xf'));_0x28772d(_0x59cfa1['result'][_0x1126('0x13')]);}})[_0x1126('0x14')](function(_0x257b5f){logger['error'](_0x1126('0xe'),_0x4f239c,_0x257b5f);_0x245be9(_0x257b5f);});});}
\ No newline at end of file
index 7c3a8d5..2d367fc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x63c9=['/describe','isAuthenticated','describe','/:id','show','/:id/canned_answers','/:id/applications','getApplications','getInteractions','/:id/users','getAgents','post','create','/:id/dispositions','addDisposition','addAnswer','/:id/notify','notify','addApplications','addAgents','/:id/send','send','update','delete','removeDispositions','removeAnswers','removeAgents','exports','multer','util','connect-timeout','express','./openchannelAccount.controller','index','get'];(function(_0x3e2fcf,_0x579110){var _0x497db7=function(_0x2f713d){while(--_0x2f713d){_0x3e2fcf['push'](_0x3e2fcf['shift']());}};_0x497db7(++_0x579110);}(_0x63c9,0x111));var _0x963c=function(_0x36ed48,_0x1ee0d4){_0x36ed48=_0x36ed48-0x0;var _0x51c63a=_0x63c9[_0x36ed48];return _0x51c63a;};'use strict';var multer=require(_0x963c('0x0'));var util=require(_0x963c('0x1'));var path=require('path');var timeout=require(_0x963c('0x2'));var express=require(_0x963c('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x963c('0x4'));router['get']('/',auth['isAuthenticated'](),controller[_0x963c('0x5')]);router[_0x963c('0x6')](_0x963c('0x7'),auth[_0x963c('0x8')](),controller[_0x963c('0x9')]);router[_0x963c('0x6')](_0x963c('0xa'),auth[_0x963c('0x8')](),controller[_0x963c('0xb')]);router[_0x963c('0x6')]('/:id/dispositions',auth[_0x963c('0x8')](),controller['getDispositions']);router[_0x963c('0x6')](_0x963c('0xc'),auth[_0x963c('0x8')](),controller['getAnswers']);router['get'](_0x963c('0xd'),auth[_0x963c('0x8')](),controller[_0x963c('0xe')]);router[_0x963c('0x6')]('/:id/interactions',auth[_0x963c('0x8')](),controller[_0x963c('0xf')]);router[_0x963c('0x6')](_0x963c('0x10'),auth[_0x963c('0x8')](),controller[_0x963c('0x11')]);router[_0x963c('0x12')]('/',auth['isAuthenticated'](),controller[_0x963c('0x13')]);router[_0x963c('0x12')](_0x963c('0x14'),auth[_0x963c('0x8')](),controller[_0x963c('0x15')]);router[_0x963c('0x12')](_0x963c('0xc'),auth['isAuthenticated'](),controller[_0x963c('0x16')]);router[_0x963c('0x12')](_0x963c('0x17'),controller[_0x963c('0x18')]);router[_0x963c('0x12')](_0x963c('0xd'),auth[_0x963c('0x8')](),controller[_0x963c('0x19')]);router[_0x963c('0x12')](_0x963c('0x10'),auth[_0x963c('0x8')](),controller[_0x963c('0x1a')]);router[_0x963c('0x12')](_0x963c('0x1b'),auth[_0x963c('0x8')](),controller[_0x963c('0x1c')]);router['put']('/:id',auth[_0x963c('0x8')](),controller[_0x963c('0x1d')]);router[_0x963c('0x1e')](_0x963c('0xa'),auth['isAuthenticated'](),controller['destroy']);router[_0x963c('0x1e')]('/:id/dispositions',auth[_0x963c('0x8')](),controller[_0x963c('0x1f')]);router[_0x963c('0x1e')](_0x963c('0xc'),auth[_0x963c('0x8')](),controller[_0x963c('0x20')]);router[_0x963c('0x1e')](_0x963c('0x10'),auth[_0x963c('0x8')](),controller[_0x963c('0x21')]);module[_0x963c('0x22')]=router;
\ No newline at end of file
+var _0x6244=['update','delete','destroy','removeAnswers','exports','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelAccount.controller','get','isAuthenticated','describe','/:id','show','getDispositions','/:id/canned_answers','getAnswers','getApplications','/:id/interactions','getInteractions','/:id/users','getAgents','post','create','/:id/dispositions','addDisposition','addAnswer','/:id/notify','notify','/:id/applications','addApplications','addAgents','send'];(function(_0x1b60b0,_0x477ab4){var _0x5200e8=function(_0x2d0d06){while(--_0x2d0d06){_0x1b60b0['push'](_0x1b60b0['shift']());}};_0x5200e8(++_0x477ab4);}(_0x6244,0x177));var _0x4624=function(_0x4dadc3,_0x537281){_0x4dadc3=_0x4dadc3-0x0;var _0x2dac50=_0x6244[_0x4dadc3];return _0x2dac50;};'use strict';var multer=require('multer');var util=require(_0x4624('0x0'));var path=require(_0x4624('0x1'));var timeout=require('connect-timeout');var express=require(_0x4624('0x2'));var router=express[_0x4624('0x3')]();var auth=require(_0x4624('0x4'));var interaction=require(_0x4624('0x5'));var config=require(_0x4624('0x6'));var controller=require(_0x4624('0x7'));router[_0x4624('0x8')]('/',auth[_0x4624('0x9')](),controller['index']);router[_0x4624('0x8')]('/describe',auth['isAuthenticated'](),controller[_0x4624('0xa')]);router[_0x4624('0x8')](_0x4624('0xb'),auth['isAuthenticated'](),controller[_0x4624('0xc')]);router[_0x4624('0x8')]('/:id/dispositions',auth[_0x4624('0x9')](),controller[_0x4624('0xd')]);router['get'](_0x4624('0xe'),auth['isAuthenticated'](),controller[_0x4624('0xf')]);router[_0x4624('0x8')]('/:id/applications',auth['isAuthenticated'](),controller[_0x4624('0x10')]);router[_0x4624('0x8')](_0x4624('0x11'),auth[_0x4624('0x9')](),controller[_0x4624('0x12')]);router[_0x4624('0x8')](_0x4624('0x13'),auth[_0x4624('0x9')](),controller[_0x4624('0x14')]);router[_0x4624('0x15')]('/',auth[_0x4624('0x9')](),controller[_0x4624('0x16')]);router[_0x4624('0x15')](_0x4624('0x17'),auth[_0x4624('0x9')](),controller[_0x4624('0x18')]);router[_0x4624('0x15')]('/:id/canned_answers',auth[_0x4624('0x9')](),controller[_0x4624('0x19')]);router[_0x4624('0x15')](_0x4624('0x1a'),controller[_0x4624('0x1b')]);router['post'](_0x4624('0x1c'),auth[_0x4624('0x9')](),controller[_0x4624('0x1d')]);router[_0x4624('0x15')](_0x4624('0x13'),auth['isAuthenticated'](),controller[_0x4624('0x1e')]);router[_0x4624('0x15')]('/:id/send',auth[_0x4624('0x9')](),controller[_0x4624('0x1f')]);router['put']('/:id',auth[_0x4624('0x9')](),controller[_0x4624('0x20')]);router[_0x4624('0x21')](_0x4624('0xb'),auth[_0x4624('0x9')](),controller[_0x4624('0x22')]);router[_0x4624('0x21')](_0x4624('0x17'),auth['isAuthenticated'](),controller['removeDispositions']);router[_0x4624('0x21')](_0x4624('0xe'),auth[_0x4624('0x9')](),controller[_0x4624('0x23')]);router[_0x4624('0x21')](_0x4624('0x13'),auth['isAuthenticated'](),controller['removeAgents']);module[_0x4624('0x24')]=router;
\ No newline at end of file
index 5382c36..92965bf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6806=['setDataValue','mandatoryDispositionPauseId','mandatoryDisposition','randomstring','exports','STRING','name','TEXT','BOOLEAN','INTEGER','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue'];(function(_0x263a74,_0xc31414){var _0x2aa86c=function(_0x382896){while(--_0x382896){_0x263a74['push'](_0x263a74['shift']());}};_0x2aa86c(++_0xc31414);}(_0x6806,0xff));var _0x6680=function(_0x2da1d1,_0x2f44eb){_0x2da1d1=_0x2da1d1-0x0;var _0x3d534e=_0x6806[_0x2da1d1];return _0x3d534e;};'use strict';var Sequelize=require('sequelize');var rs=require(_0x6680('0x0'));module[_0x6680('0x1')]={'name':{'type':Sequelize[_0x6680('0x2')],'unique':_0x6680('0x3'),'allowNull':![]},'description':{'type':Sequelize['STRING']},'token':{'type':Sequelize[_0x6680('0x2')],'defaultValue':function(){return rs['generate']();}},'replyUri':{'type':Sequelize[_0x6680('0x2')],'validate':{'isUrl':!![]}},'key':{'type':Sequelize['STRING'],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0x6680('0x4')],'defaultValue':function(){return'Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}';}},'notificationSound':{'type':Sequelize[_0x6680('0x5')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x6680('0x5')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x6680('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'mapKey':{'type':Sequelize[_0x6680('0x2')]},'queueTransfer':{'type':Sequelize[_0x6680('0x5')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0x6680('0x5')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x6680('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0x6680('0x6')],'allowNull':!![],'defaultValue':null,'comment':_0x6680('0x7')},'mandatoryDisposition':{'type':Sequelize['BOOLEAN'],'defaultValue':![],'comment':_0x6680('0x8'),'set':function(_0x9fe1a0){if(!_0x9fe1a0)this[_0x6680('0x9')](_0x6680('0xa'),null);this[_0x6680('0x9')](_0x6680('0xb'),_0x9fe1a0);}}};
\ No newline at end of file
+var _0x22e8=['exports','STRING','generate','TEXT','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','BOOLEAN','INTEGER','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','setDataValue','mandatoryDispositionPauseId','mandatoryDisposition'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x22e8,0xb0));var _0x822e=function(_0x3fec10,_0x247da6){_0x3fec10=_0x3fec10-0x0;var _0x19c398=_0x22e8[_0x3fec10];return _0x19c398;};'use strict';var Sequelize=require('sequelize');var rs=require('randomstring');module[_0x822e('0x0')]={'name':{'type':Sequelize[_0x822e('0x1')],'unique':'name','allowNull':![]},'description':{'type':Sequelize[_0x822e('0x1')]},'token':{'type':Sequelize[_0x822e('0x1')],'defaultValue':function(){return rs[_0x822e('0x2')]();}},'replyUri':{'type':Sequelize[_0x822e('0x1')],'validate':{'isUrl':!![]}},'key':{'type':Sequelize[_0x822e('0x1')],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0x822e('0x3')],'defaultValue':function(){return _0x822e('0x4');}},'notificationSound':{'type':Sequelize[_0x822e('0x5')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x822e('0x5')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'mapKey':{'type':Sequelize[_0x822e('0x1')]},'queueTransfer':{'type':Sequelize[_0x822e('0x5')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x822e('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0x822e('0x5')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x822e('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0x822e('0x6')],'allowNull':!![],'defaultValue':null,'comment':_0x822e('0x7')},'mandatoryDisposition':{'type':Sequelize[_0x822e('0x5')],'defaultValue':![],'comment':'Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','set':function(_0x1dac8f){if(!_0x1dac8f)this[_0x822e('0x8')](_0x822e('0x9'),null);this[_0x822e('0x8')](_0x822e('0xa'),_0x1dac8f);}}};
\ No newline at end of file
index 246d5a8..d940c1e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6c0a=['filters','pick','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','catch','show','params','intersection','create','body','user','role','find','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','mandatoryDispositionPause','describe','addDisposition','OpnechannelAccountId','Disposition','getDispositions','findOne','OpenchannelAccountId','filter','rows','removeDispositions','ids','addAnswer','CannedAnswer','getAnswers','removeAnswers','openchannel','CmContact','ValidationError','no\x20available\x20attributes','updatedAt','difference','CompanyId','isNil','from','from\x20is\x20mandatory','Sequelize','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','CmList','List','DESC','OpenchannelApplication','Applications','account','list','applications','orderBy','priority','asc','Contacts','contact','firstName','lastName','threadId','externalUrl','OpenchannelInteraction','spread','messageId','interaction','created','unmanaged','*,*,*,*','OpenchannelMessage','AttachmentId','UserId','User','unshift','agent','waitForTheAssignedAgent','forcedOwnership','Start','startRouting','notify','addApplications','sequelize','bulkCreate','findAndCountAll','getApplications','getInteractions','Contact','Owner','fullname','internal','Tags','color','tag','addAgents','omit','emit','userOpenchannelAccount:remove','getAgents','ListId','out','Messages','dataValues','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','path','ejs','lodash','crypto','jsforce','desk.js','to-csv','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','redis','defaults','socket.io-emitter','./openchannelAccount.socket','jayson/promise','client','http','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','OpenchannelAccount,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','info','result','sendStatus','status','json','count','offset','Content-Range','apply','update','destroy','get','OpenchannelAccounts','UserProfileResource','then','end','stack','name','send','Pause','OpenchannelAccount','rawAttributes','model','query','keys','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where'];(function(_0x5e1c85,_0x500a3a){var _0x38e78c=function(_0x1bd3b9){while(--_0x1bd3b9){_0x5e1c85['push'](_0x5e1c85['shift']());}};_0x38e78c(++_0x500a3a);}(_0x6c0a,0x1df));var _0xa6c0=function(_0x27bf1b,_0x1e398b){_0x27bf1b=_0x27bf1b-0x0;var _0x5f2dd9=_0x6c0a[_0x27bf1b];return _0x5f2dd9;};'use strict';var pdf=require(_0xa6c0('0x0'));var emlformat=require(_0xa6c0('0x1'));var rimraf=require(_0xa6c0('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xa6c0('0x3'));var rp=require(_0xa6c0('0x4'));var moment=require('moment');var BPromise=require(_0xa6c0('0x5'));var Mustache=require(_0xa6c0('0x6'));var util=require(_0xa6c0('0x7'));var path=require(_0xa6c0('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xa6c0('0x9'));var fs=require('fs');var _=require(_0xa6c0('0xa'));var squel=require('squel');var crypto=require(_0xa6c0('0xb'));var jsforce=require(_0xa6c0('0xc'));var deskjs=require(_0xa6c0('0xd'));var toCsv=require(_0xa6c0('0xe'));var querystring=require('querystring');var Papa=require(_0xa6c0('0xf'));var Redis=require(_0xa6c0('0x10'));var authService=require(_0xa6c0('0x11'));var qs=require(_0xa6c0('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xa6c0('0x13'))(_0xa6c0('0x14'));var utils=require(_0xa6c0('0x15'));var config=require(_0xa6c0('0x16'));var db=require('../../mysqldb')['db'];config[_0xa6c0('0x17')]=_[_0xa6c0('0x18')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0xa6c0('0x19'))(new Redis(config[_0xa6c0('0x17')]));require(_0xa6c0('0x1a'))['register'](socket);var jayson=require(_0xa6c0('0x1b'));var client=jayson[_0xa6c0('0x1c')][_0xa6c0('0x1d')]({'port':0x232c});var client9002=jayson[_0xa6c0('0x1c')]['http']({'port':0x232a});function checkPasswordPattern(_0x5ca173,_0x275f51,_0x3c8dec){if(_0x3c8dec){var _0x5749bc=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x5749bc['test'](_0x275f51)){return _0x5ca173;}else{throw new Error(_0xa6c0('0x1e'));}}else{return _0x5ca173;}}function respondWithRpcPromise(_0x6bddaa,_0x676bd2,_0x58ee23,_0x48fd91){return new BPromise(function(_0x10de13,_0x1bcb0c){var _0x170818=_0x48fd91||client;return _0x170818[_0xa6c0('0x1f')](_0x6bddaa,_0x58ee23)['then'](function(_0xd62e95){logger['info'](_0xa6c0('0x20'),_0x676bd2,'request\x20sent');logger[_0xa6c0('0x21')]('OpenchannelAccount,\x20%s,\x20%s,\x20%s',_0x676bd2,_0xa6c0('0x22'),JSON[_0xa6c0('0x23')](_0xd62e95));if(_0xd62e95['error']){if(_0xd62e95[_0xa6c0('0x24')][_0xa6c0('0x25')]===0x1f4){logger['error'](_0xa6c0('0x20'),_0x676bd2,_0xd62e95[_0xa6c0('0x24')][_0xa6c0('0x26')]);return _0x1bcb0c(_0xd62e95[_0xa6c0('0x24')][_0xa6c0('0x26')]);}logger[_0xa6c0('0x24')](_0xa6c0('0x20'),_0x676bd2,_0xd62e95[_0xa6c0('0x24')][_0xa6c0('0x26')]);return _0x10de13(_0xd62e95['error'][_0xa6c0('0x26')]);}else{logger[_0xa6c0('0x27')](_0xa6c0('0x20'),_0x676bd2,'request\x20sent');_0x10de13(_0xd62e95[_0xa6c0('0x28')][_0xa6c0('0x26')]);}})['catch'](function(_0x2b4d42){logger[_0xa6c0('0x24')]('OpenchannelAccount,\x20%s,\x20%s',_0x676bd2,_0x2b4d42);_0x1bcb0c(_0x2b4d42);});});}function respondWithStatusCode(_0x58ed59,_0x2cccf7){_0x2cccf7=_0x2cccf7||0xcc;return function(_0x23ca5d){if(_0x23ca5d){return _0x58ed59[_0xa6c0('0x29')](_0x2cccf7);}return _0x58ed59['status'](_0x2cccf7)['end']();};}function respondWithResult(_0xb71a09,_0x5ef56d){_0x5ef56d=_0x5ef56d||0xc8;return function(_0x95b666){if(_0x95b666){return _0xb71a09[_0xa6c0('0x2a')](_0x5ef56d)[_0xa6c0('0x2b')](_0x95b666);}};}function respondWithFilteredResult(_0x4c0462,_0x245472){return function(_0x4c3402){if(_0x4c3402){var _0xe01626=_0x4c3402[_0xa6c0('0x2c')],_0x1bf64b=_0x245472[_0xa6c0('0x2d')],_0x4a81a3=_0x245472[_0xa6c0('0x2d')]+_0x245472['limit'],_0x47c82d;if(_0x4a81a3>=_0xe01626){_0x4a81a3=_0xe01626;_0x47c82d=0xc8;}else{_0x47c82d=0xce;}_0x4c0462['status'](_0x47c82d);return _0x4c0462['set'](_0xa6c0('0x2e'),_0x1bf64b+'-'+_0x4a81a3+'/'+_0xe01626)[_0xa6c0('0x2b')](_0x4c3402);}return null;};}function patchUpdates(_0x1fb2dc){return function(_0x293a12){try{jsonpatch[_0xa6c0('0x2f')](_0x293a12,_0x1fb2dc,!![]);}catch(_0x55cbd3){return BPromise['reject'](_0x55cbd3);}return _0x293a12['save']();};}function saveUpdates(_0x17cf00,_0x2dcd11){return function(_0x255371){if(_0x255371){return _0x255371[_0xa6c0('0x30')](_0x17cf00)['then'](function(_0x2a1a99){return _0x2a1a99;});}return null;};}function removeEntity(_0x477012,_0x141f39){return function(_0x74dcc6){if(_0x74dcc6){return _0x74dcc6[_0xa6c0('0x31')]()['then'](function(){var _0xd40163=_0x74dcc6[_0xa6c0('0x32')]({'plain':!![]});var _0x271957=_0xa6c0('0x33');return db[_0xa6c0('0x34')][_0xa6c0('0x31')]({'where':{'type':_0x271957,'resourceId':_0xd40163['id']}})[_0xa6c0('0x35')](function(){return _0x74dcc6;});})['then'](function(){_0x477012[_0xa6c0('0x2a')](0xcc)[_0xa6c0('0x36')]();});}};}function handleEntityNotFound(_0x371db4,_0xd61752){return function(_0x4a25b3){if(!_0x4a25b3){_0x371db4[_0xa6c0('0x29')](0x194);}return _0x4a25b3;};}function handleError(_0x2a460c,_0x205b3f){_0x205b3f=_0x205b3f||0x1f4;return function(_0x5bf4a1){logger[_0xa6c0('0x24')](_0x5bf4a1[_0xa6c0('0x37')]);if(_0x5bf4a1[_0xa6c0('0x38')]){delete _0x5bf4a1[_0xa6c0('0x38')];}_0x2a460c[_0xa6c0('0x2a')](_0x205b3f)[_0xa6c0('0x39')](_0x5bf4a1);};}exports['index']=function(_0x4e14a7,_0x3dd2a9){var _0x1e447c={'include':[{'model':db[_0xa6c0('0x3a')],'as':'mandatoryDispositionPause'}]},_0x1b0b41={},_0x46c456={'count':0x0,'rows':[]};var _0x38cbcd=db[_0xa6c0('0x3b')][_0xa6c0('0x3c')];_0x1b0b41[_0xa6c0('0x3d')]=_['keys'](_0x38cbcd);_0x1b0b41[_0xa6c0('0x3e')]=_[_0xa6c0('0x3f')](_0x4e14a7['query']);_0x1b0b41['filters']=_['intersection'](_0x1b0b41[_0xa6c0('0x3d')],_0x1b0b41[_0xa6c0('0x3e')]);_0x1e447c[_0xa6c0('0x40')]=_['intersection'](_0x1b0b41[_0xa6c0('0x3d')],qs['fields'](_0x4e14a7[_0xa6c0('0x3e')][_0xa6c0('0x41')]));_0x1e447c[_0xa6c0('0x40')]=_0x1e447c['attributes'][_0xa6c0('0x42')]?_0x1e447c['attributes']:_0x1b0b41[_0xa6c0('0x3d')];if(!_0x4e14a7[_0xa6c0('0x3e')][_0xa6c0('0x43')](_0xa6c0('0x44'))){_0x1e447c[_0xa6c0('0x45')]=qs[_0xa6c0('0x45')](_0x4e14a7[_0xa6c0('0x3e')]['limit']);_0x1e447c['offset']=qs[_0xa6c0('0x2d')](_0x4e14a7[_0xa6c0('0x3e')][_0xa6c0('0x2d')]);}_0x1e447c[_0xa6c0('0x46')]=qs[_0xa6c0('0x47')](_0x4e14a7[_0xa6c0('0x3e')][_0xa6c0('0x47')]);_0x1e447c[_0xa6c0('0x48')]=qs[_0xa6c0('0x49')](_[_0xa6c0('0x4a')](_0x4e14a7[_0xa6c0('0x3e')],_0x1b0b41['filters']));if(_0x4e14a7[_0xa6c0('0x3e')]['filter']){_0x1e447c[_0xa6c0('0x48')]=_[_0xa6c0('0x4b')](_0x1e447c[_0xa6c0('0x48')],{'$or':_[_0xa6c0('0x4c')](_0x38cbcd,function(_0x18ae08){if(_0x18ae08[_0xa6c0('0x4d')][_0xa6c0('0x4e')]!==_0xa6c0('0x4f')){var _0x5ebb72={};_0x5ebb72[_0x18ae08[_0xa6c0('0x50')]]={'$like':'%'+_0x4e14a7[_0xa6c0('0x3e')]['filter']+'%'};return _0x5ebb72;}})});}_0x1e447c=_['merge']({},_0x1e447c,_0x4e14a7[_0xa6c0('0x51')]);var _0x363857={'where':_0x1e447c[_0xa6c0('0x48')]};return db[_0xa6c0('0x3b')][_0xa6c0('0x2c')](_0x363857)['then'](function(_0x374b38){_0x46c456[_0xa6c0('0x2c')]=_0x374b38;if(_0x4e14a7[_0xa6c0('0x3e')][_0xa6c0('0x52')]){_0x1e447c[_0xa6c0('0x53')]=[{'all':!![]}];}return db[_0xa6c0('0x3b')][_0xa6c0('0x54')](_0x1e447c);})[_0xa6c0('0x35')](function(_0xd8bc3c){_0x46c456['rows']=_0xd8bc3c;return _0x46c456;})[_0xa6c0('0x35')](respondWithFilteredResult(_0x3dd2a9,_0x1e447c))[_0xa6c0('0x55')](handleError(_0x3dd2a9,null));};exports[_0xa6c0('0x56')]=function(_0x587163,_0x1d06b4){var _0x2c84ac={'raw':![],'where':{'id':_0x587163[_0xa6c0('0x57')]['id']},'include':[{'model':db[_0xa6c0('0x3a')],'as':'mandatoryDispositionPause'}]},_0xabef25={};_0xabef25[_0xa6c0('0x3d')]=_['keys'](db[_0xa6c0('0x3b')][_0xa6c0('0x3c')]);_0xabef25[_0xa6c0('0x3e')]=_[_0xa6c0('0x3f')](_0x587163[_0xa6c0('0x3e')]);_0xabef25[_0xa6c0('0x49')]=_['intersection'](_0xabef25['model'],_0xabef25['query']);_0x2c84ac['attributes']=_[_0xa6c0('0x58')](_0xabef25['model'],qs[_0xa6c0('0x41')](_0x587163['query'][_0xa6c0('0x41')]));_0x2c84ac[_0xa6c0('0x40')]=_0x2c84ac['attributes'][_0xa6c0('0x42')]?_0x2c84ac[_0xa6c0('0x40')]:_0xabef25[_0xa6c0('0x3d')];if(_0x587163[_0xa6c0('0x3e')][_0xa6c0('0x52')]){_0x2c84ac[_0xa6c0('0x53')]=[{'all':!![]}];}_0x2c84ac=_[_0xa6c0('0x4b')]({},_0x2c84ac,_0x587163['options']);return db[_0xa6c0('0x3b')]['find'](_0x2c84ac)[_0xa6c0('0x35')](handleEntityNotFound(_0x1d06b4,null))[_0xa6c0('0x35')](respondWithResult(_0x1d06b4,null))[_0xa6c0('0x55')](handleError(_0x1d06b4,null));};exports[_0xa6c0('0x59')]=function(_0x2f15d6,_0x29ea79){return db[_0xa6c0('0x3b')][_0xa6c0('0x59')](_0x2f15d6[_0xa6c0('0x5a')],{})[_0xa6c0('0x35')](function(_0x5f38a2){var _0x50c6cf=_0x2f15d6[_0xa6c0('0x5b')][_0xa6c0('0x32')]({'plain':!![]});if(!_0x50c6cf)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x50c6cf[_0xa6c0('0x5c')]===_0xa6c0('0x5b')){var _0xbb4b17=_0x5f38a2[_0xa6c0('0x32')]({'plain':!![]});var _0x1b6dd5='OpenchannelAccounts';return db['UserProfileSection'][_0xa6c0('0x5d')]({'where':{'name':_0x1b6dd5,'userProfileId':_0x50c6cf[_0xa6c0('0x5e')]},'raw':!![]})[_0xa6c0('0x35')](function(_0x5164df){if(_0x5164df&&_0x5164df[_0xa6c0('0x5f')]===0x0){return db['UserProfileResource'][_0xa6c0('0x59')]({'name':_0xbb4b17[_0xa6c0('0x38')],'resourceId':_0xbb4b17['id'],'type':_0x5164df['name'],'sectionId':_0x5164df['id']},{})[_0xa6c0('0x35')](function(){return _0x5f38a2;});}else{return _0x5f38a2;}})['catch'](function(_0x1922b5){logger[_0xa6c0('0x24')](_0xa6c0('0x60'),_0x1922b5);throw _0x1922b5;});}return _0x5f38a2;})[_0xa6c0('0x35')](respondWithResult(_0x29ea79,0xc9))[_0xa6c0('0x55')](handleError(_0x29ea79,null));};exports['update']=function(_0x147fce,_0x13db62){if(_0x147fce[_0xa6c0('0x5a')]['id']){delete _0x147fce['body']['id'];}return db[_0xa6c0('0x3b')][_0xa6c0('0x5d')]({'where':{'id':_0x147fce['params']['id']},'include':[{'model':db[_0xa6c0('0x3a')],'as':_0xa6c0('0x61')}]})[_0xa6c0('0x35')](handleEntityNotFound(_0x13db62,null))[_0xa6c0('0x35')](saveUpdates(_0x147fce[_0xa6c0('0x5a')],null))[_0xa6c0('0x35')](respondWithResult(_0x13db62,null))[_0xa6c0('0x55')](handleError(_0x13db62,null));};exports[_0xa6c0('0x31')]=function(_0x30ff70,_0x1932db){return db[_0xa6c0('0x3b')][_0xa6c0('0x5d')]({'where':{'id':_0x30ff70[_0xa6c0('0x57')]['id']}})[_0xa6c0('0x35')](handleEntityNotFound(_0x1932db,null))[_0xa6c0('0x35')](removeEntity(_0x1932db,null))['catch'](handleError(_0x1932db,null));};exports['describe']=function(_0x1b5dec,_0x5245ca){return db[_0xa6c0('0x3b')][_0xa6c0('0x62')]()[_0xa6c0('0x35')](respondWithResult(_0x5245ca,null))[_0xa6c0('0x55')](handleError(_0x5245ca,null));};exports[_0xa6c0('0x63')]=function(_0x49a1da,_0x30f2b4,_0x58868e){if(_0x49a1da[_0xa6c0('0x5a')]['id']){delete _0x49a1da[_0xa6c0('0x5a')]['id'];}return db[_0xa6c0('0x3b')][_0xa6c0('0x5d')]({'where':{'id':_0x49a1da[_0xa6c0('0x57')]['id']}})[_0xa6c0('0x35')](handleEntityNotFound(_0x30f2b4,null))[_0xa6c0('0x35')](function(_0x3194a7){if(_0x3194a7){_0x49a1da[_0xa6c0('0x5a')][_0xa6c0('0x64')]=_0x3194a7['id'];return db[_0xa6c0('0x65')]['create'](_0x49a1da[_0xa6c0('0x5a')]);}})['then'](respondWithResult(_0x30f2b4,null))[_0xa6c0('0x55')](handleError(_0x30f2b4,null));};exports[_0xa6c0('0x66')]=function(_0x3b37f4,_0x47220c,_0x14a0fc){var _0x4990df={'raw':![],'where':{}};var _0x2ca153={};var _0x35e094={'count':0x0,'rows':[]};return db[_0xa6c0('0x3b')][_0xa6c0('0x67')]({'where':{'id':_0x3b37f4[_0xa6c0('0x57')]['id']}})[_0xa6c0('0x35')](handleEntityNotFound(_0x47220c,null))[_0xa6c0('0x35')](function(_0x262910){if(_0x262910){_0x2ca153[_0xa6c0('0x3d')]=_['keys'](db[_0xa6c0('0x65')][_0xa6c0('0x3c')]);_0x2ca153['query']=_[_0xa6c0('0x3f')](_0x3b37f4['query']);_0x2ca153[_0xa6c0('0x49')]=_[_0xa6c0('0x58')](_0x2ca153['model'],_0x2ca153[_0xa6c0('0x3e')]);_0x4990df[_0xa6c0('0x40')]=_[_0xa6c0('0x58')](_0x2ca153['model'],qs[_0xa6c0('0x41')](_0x3b37f4[_0xa6c0('0x3e')][_0xa6c0('0x41')]));_0x4990df[_0xa6c0('0x40')]=_0x4990df[_0xa6c0('0x40')][_0xa6c0('0x42')]?_0x4990df[_0xa6c0('0x40')]:_0x2ca153[_0xa6c0('0x3d')];if(!_0x3b37f4['query']['hasOwnProperty'](_0xa6c0('0x44'))){_0x4990df[_0xa6c0('0x45')]=qs[_0xa6c0('0x45')](_0x3b37f4[_0xa6c0('0x3e')]['limit']);_0x4990df[_0xa6c0('0x2d')]=qs['offset'](_0x3b37f4[_0xa6c0('0x3e')]['offset']);}_0x4990df[_0xa6c0('0x46')]=qs[_0xa6c0('0x47')](_0x3b37f4[_0xa6c0('0x3e')][_0xa6c0('0x47')]);_0x4990df[_0xa6c0('0x48')]=qs[_0xa6c0('0x49')](_[_0xa6c0('0x4a')](_0x3b37f4[_0xa6c0('0x3e')],_0x2ca153[_0xa6c0('0x49')]));_0x4990df[_0xa6c0('0x48')][_0xa6c0('0x68')]=_0x262910['id'];if(_0x3b37f4[_0xa6c0('0x3e')][_0xa6c0('0x69')]){_0x4990df[_0xa6c0('0x48')]=_[_0xa6c0('0x4b')](_0x4990df['where'],{'$or':_[_0xa6c0('0x4c')](_0x4990df['attributes'],function(_0x496b6f){var _0x442140={};_0x442140[_0x496b6f]={'$like':'%'+_0x3b37f4['query'][_0xa6c0('0x69')]+'%'};return _0x442140;})});}_0x4990df=_[_0xa6c0('0x4b')]({},_0x4990df,_0x3b37f4[_0xa6c0('0x51')]);return db[_0xa6c0('0x65')]['count']({'where':_0x4990df['where']})[_0xa6c0('0x35')](function(_0x2f1309){_0x35e094[_0xa6c0('0x2c')]=_0x2f1309;if(_0x3b37f4['query'][_0xa6c0('0x52')]){_0x4990df[_0xa6c0('0x53')]=[{'all':!![]}];}return db[_0xa6c0('0x65')]['findAll'](_0x4990df);})['then'](function(_0x488b2b){_0x35e094[_0xa6c0('0x6a')]=_0x488b2b;return _0x35e094;});}})['then'](respondWithFilteredResult(_0x47220c,_0x4990df))['catch'](handleError(_0x47220c,null));};exports[_0xa6c0('0x6b')]=function(_0xa2359b,_0x553e9c,_0x4ea18d){return db['OpenchannelAccount']['find']({'where':{'id':_0xa2359b['params']['id']}})[_0xa6c0('0x35')](handleEntityNotFound(_0x553e9c,null))['then'](function(_0x222fdb){if(_0x222fdb){return _0x222fdb[_0xa6c0('0x6b')](_0xa2359b['query'][_0xa6c0('0x6c')]);}})[_0xa6c0('0x35')](respondWithStatusCode(_0x553e9c,null))['catch'](handleError(_0x553e9c,null));};exports[_0xa6c0('0x6d')]=function(_0x3ff835,_0x2d9233,_0x5ad8d2){if(_0x3ff835['body']['id']){delete _0x3ff835[_0xa6c0('0x5a')]['id'];}return db[_0xa6c0('0x3b')][_0xa6c0('0x5d')]({'where':{'id':_0x3ff835[_0xa6c0('0x57')]['id']}})[_0xa6c0('0x35')](handleEntityNotFound(_0x2d9233,null))[_0xa6c0('0x35')](function(_0x36e4b0){if(_0x36e4b0){_0x3ff835['body'][_0xa6c0('0x68')]=_0x36e4b0['id'];return db[_0xa6c0('0x6e')][_0xa6c0('0x59')](_0x3ff835[_0xa6c0('0x5a')]);}})['then'](respondWithResult(_0x2d9233,null))[_0xa6c0('0x55')](handleError(_0x2d9233,null));};exports[_0xa6c0('0x6f')]=function(_0x1dbb7e,_0x443ea9,_0x268e53){var _0x8175ca={'raw':![],'where':{}};var _0x1e650a={};var _0xfc9cf1={'count':0x0,'rows':[]};return db[_0xa6c0('0x3b')][_0xa6c0('0x67')]({'where':{'id':_0x1dbb7e[_0xa6c0('0x57')]['id']}})[_0xa6c0('0x35')](handleEntityNotFound(_0x443ea9,null))[_0xa6c0('0x35')](function(_0x47c91c){if(_0x47c91c){_0x1e650a[_0xa6c0('0x3d')]=_[_0xa6c0('0x3f')](db[_0xa6c0('0x6e')][_0xa6c0('0x3c')]);_0x1e650a[_0xa6c0('0x3e')]=_[_0xa6c0('0x3f')](_0x1dbb7e[_0xa6c0('0x3e')]);_0x1e650a[_0xa6c0('0x49')]=_[_0xa6c0('0x58')](_0x1e650a[_0xa6c0('0x3d')],_0x1e650a[_0xa6c0('0x3e')]);_0x8175ca[_0xa6c0('0x40')]=_['intersection'](_0x1e650a[_0xa6c0('0x3d')],qs[_0xa6c0('0x41')](_0x1dbb7e[_0xa6c0('0x3e')][_0xa6c0('0x41')]));_0x8175ca['attributes']=_0x8175ca[_0xa6c0('0x40')][_0xa6c0('0x42')]?_0x8175ca['attributes']:_0x1e650a[_0xa6c0('0x3d')];if(!_0x1dbb7e[_0xa6c0('0x3e')][_0xa6c0('0x43')](_0xa6c0('0x44'))){_0x8175ca[_0xa6c0('0x45')]=qs[_0xa6c0('0x45')](_0x1dbb7e[_0xa6c0('0x3e')]['limit']);_0x8175ca[_0xa6c0('0x2d')]=qs[_0xa6c0('0x2d')](_0x1dbb7e[_0xa6c0('0x3e')]['offset']);}_0x8175ca['order']=qs[_0xa6c0('0x47')](_0x1dbb7e[_0xa6c0('0x3e')]['sort']);_0x8175ca['where']=qs['filters'](_[_0xa6c0('0x4a')](_0x1dbb7e[_0xa6c0('0x3e')],_0x1e650a['filters']));_0x8175ca[_0xa6c0('0x48')][_0xa6c0('0x68')]=_0x47c91c['id'];if(_0x1dbb7e[_0xa6c0('0x3e')][_0xa6c0('0x69')]){_0x8175ca[_0xa6c0('0x48')]=_[_0xa6c0('0x4b')](_0x8175ca[_0xa6c0('0x48')],{'$or':_[_0xa6c0('0x4c')](_0x8175ca[_0xa6c0('0x40')],function(_0x208fac){var _0xef0c10={};_0xef0c10[_0x208fac]={'$like':'%'+_0x1dbb7e[_0xa6c0('0x3e')][_0xa6c0('0x69')]+'%'};return _0xef0c10;})});}_0x8175ca=_[_0xa6c0('0x4b')]({},_0x8175ca,_0x1dbb7e[_0xa6c0('0x51')]);return db[_0xa6c0('0x6e')]['count']({'where':_0x8175ca[_0xa6c0('0x48')]})['then'](function(_0x47bc85){_0xfc9cf1[_0xa6c0('0x2c')]=_0x47bc85;if(_0x1dbb7e[_0xa6c0('0x3e')]['includeAll']){_0x8175ca['include']=[{'all':!![]}];}return db['CannedAnswer'][_0xa6c0('0x54')](_0x8175ca);})[_0xa6c0('0x35')](function(_0x487cbd){_0xfc9cf1[_0xa6c0('0x6a')]=_0x487cbd;return _0xfc9cf1;});}})['then'](respondWithFilteredResult(_0x443ea9,_0x8175ca))[_0xa6c0('0x55')](handleError(_0x443ea9,null));};exports[_0xa6c0('0x70')]=function(_0x593c06,_0x58b563,_0x4af3d2){return db[_0xa6c0('0x3b')][_0xa6c0('0x5d')]({'where':{'id':_0x593c06[_0xa6c0('0x57')]['id']}})[_0xa6c0('0x35')](handleEntityNotFound(_0x58b563,null))['then'](function(_0x3a4021){if(_0x3a4021){return _0x3a4021[_0xa6c0('0x70')](_0x593c06[_0xa6c0('0x3e')]['ids']);}})[_0xa6c0('0x35')](respondWithStatusCode(_0x58b563,null))['catch'](handleError(_0x58b563,null));};exports['notify']=function(_0x2cb380,_0x1096f6,_0x452ea8){var _0x439347={'body':_0x2cb380[_0xa6c0('0x5a')],'channel':_0xa6c0('0x71')};var _0x12066a=[];var _0x552330=[];var _0x3addd9={};var _0x2be10e=![];return db[_0xa6c0('0x72')][_0xa6c0('0x62')]()[_0xa6c0('0x35')](function(_0x4d5bd6){if(!_0x4d5bd6){throw new db['Sequelize'][(_0xa6c0('0x73'))](_0xa6c0('0x74'));}_0x12066a=_['difference'](_[_0xa6c0('0x3f')](_0x4d5bd6),['createdAt',_0xa6c0('0x75')]);_0x552330=_[_0xa6c0('0x76')](_[_0xa6c0('0x3f')](_0x4d5bd6),['createdAt','updatedAt',_0xa6c0('0x77'),'ListId']);if(_0x2cb380[_0xa6c0('0x5a')]['id']){delete _0x2cb380[_0xa6c0('0x5a')]['id'];}if(_[_0xa6c0('0x78')](_0x2cb380[_0xa6c0('0x5a')][_0xa6c0('0x79')])){throw new db['Sequelize'][(_0xa6c0('0x73'))](_0xa6c0('0x7a'));}if(_[_0xa6c0('0x78')](_0x2cb380['body'][_0xa6c0('0x5a')])||_0x2cb380[_0xa6c0('0x5a')][_0xa6c0('0x5a')]===''){throw new db[(_0xa6c0('0x7b'))]['ValidationError'](_0xa6c0('0x7c'));}if(_[_0xa6c0('0x78')](_0x2cb380['body']['mapKey'])){throw new db[(_0xa6c0('0x7b'))][(_0xa6c0('0x73'))]('mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x552330);}if(!_['includes'](_0x552330,_0x2cb380[_0xa6c0('0x5a')][_0xa6c0('0x7d')])){throw new db['Sequelize']['ValidationError'](_0xa6c0('0x7e')+_0x552330);}_0x3addd9[_0x2cb380['body'][_0xa6c0('0x7d')]]=_0x2cb380[_0xa6c0('0x5a')][_0xa6c0('0x79')];})['then'](function(){return db[_0xa6c0('0x3b')][_0xa6c0('0x5d')]({'where':{'id':_0x2cb380['params']['id']},'include':[{'model':db[_0xa6c0('0x7f')],'as':_0xa6c0('0x80'),'include':[{'model':db[_0xa6c0('0x72')],'as':'Contacts','where':_0x3addd9,'limit':0x1,'order':[[_0xa6c0('0x75'),_0xa6c0('0x81')]]}]},{'model':db[_0xa6c0('0x82')],'as':_0xa6c0('0x83')}]});})[_0xa6c0('0x35')](handleEntityNotFound(_0x1096f6,null))[_0xa6c0('0x35')](function(_0x59a38d){if(_0x59a38d&&_0x59a38d['List']){_0x439347[_0xa6c0('0x84')]=_0x59a38d;_0x439347['applications']=_0x59a38d['Applications'];_0x439347[_0xa6c0('0x85')]=_0x59a38d['List'];_0x439347[_0xa6c0('0x86')]=_[_0xa6c0('0x87')](_0x439347[_0xa6c0('0x86')],[_0xa6c0('0x88')],[_0xa6c0('0x89')]);if(_0x439347[_0xa6c0('0x84')][_0xa6c0('0x83')]){delete _0x439347[_0xa6c0('0x84')][_0xa6c0('0x83')];}if(_0x439347[_0xa6c0('0x84')]['List']&&_0x439347['account']['List']['Contacts']['length']){return _0x439347[_0xa6c0('0x84')][_0xa6c0('0x80')][_0xa6c0('0x8a')][0x0];}var _0x269f8f=_[_0xa6c0('0x18')](_0x2cb380[_0xa6c0('0x5a')],{'firstName':_0x2cb380['body']['from'],'ListId':_0x59a38d['ListId']});_0x269f8f[_0x2cb380[_0xa6c0('0x5a')][_0xa6c0('0x7d')]]=_0x2cb380['body'][_0xa6c0('0x79')];return db[_0xa6c0('0x72')][_0xa6c0('0x59')](_0x269f8f,{'fields':_0x12066a,'raw':!![]});}})[_0xa6c0('0x35')](handleEntityNotFound(_0x1096f6,null))[_0xa6c0('0x35')](function(_0x5ad4a1){_0x439347[_0xa6c0('0x8b')]=_0x5ad4a1;if(_0x5ad4a1){var _0x19f201={'ContactId':_0x5ad4a1['id'],'OpenchannelAccountId':_0x2cb380[_0xa6c0('0x57')]['id'],'from':(_0x5ad4a1[_0xa6c0('0x8c')]||'')+'\x20'+(_0x5ad4a1[_0xa6c0('0x8d')]||'')};var _0x258533={'OpenchannelAccountId':_0x2cb380[_0xa6c0('0x57')]['id'],'closed':![]};if(_0x2cb380[_0xa6c0('0x5a')]['threadId']){_0x258533[_0xa6c0('0x8e')]=_0x2cb380[_0xa6c0('0x5a')][_0xa6c0('0x8e')];return db['OpenchannelInteraction'][_0xa6c0('0x5d')]({'where':_0x258533})[_0xa6c0('0x35')](function(_0x1eea17){if(_0x1eea17){return[_0x1eea17,![]];}_0x19f201[_0xa6c0('0x8e')]=_0x2cb380[_0xa6c0('0x5a')]['threadId'];_0x19f201[_0xa6c0('0x8f')]=_0x2cb380['body'][_0xa6c0('0x8f')];return db[_0xa6c0('0x90')][_0xa6c0('0x59')](_0x19f201)['then'](function(_0x1e6b91){return[_0x1e6b91,!![]];});});}else{_0x258533[_0xa6c0('0x8e')]=null;}_0x258533['ContactId']=_0x5ad4a1['id'];return db['OpenchannelInteraction'][_0xa6c0('0x5d')]({'where':_0x258533})[_0xa6c0('0x35')](function(_0x519852){if(_0x519852){return[_0x519852,![]];}return db[_0xa6c0('0x90')][_0xa6c0('0x59')](_0x19f201)[_0xa6c0('0x35')](function(_0x562526){return[_0x562526,!![]];});});}})[_0xa6c0('0x91')](function(_0x5a3239,_0x3ec83c){if(_0x5a3239){_0x2be10e=_0x3ec83c;if(!_0x3ec83c){var _0x377e1c={'from':(_0x439347['contact'][_0xa6c0('0x8c')]||'')+'\x20'+(_0x439347['contact'][_0xa6c0('0x8d')]||'')};if(_0x2cb380[_0xa6c0('0x5a')][_0xa6c0('0x8e')]&&_0x2cb380[_0xa6c0('0x5a')][_0xa6c0('0x92')]&&_0x2cb380[_0xa6c0('0x5a')]['threadId']!=_0x2cb380[_0xa6c0('0x5a')][_0xa6c0('0x92')]){_0x377e1c[_0xa6c0('0x8e')]=_0x2cb380[_0xa6c0('0x5a')][_0xa6c0('0x92')];}return _0x5a3239[_0xa6c0('0x30')](_0x377e1c);}else{return _0x5a3239;}}})[_0xa6c0('0x35')](function(_0x12186f){_0x439347[_0xa6c0('0x93')]=_0x12186f[_0xa6c0('0x32')]({'plain':!![]});_0x439347[_0xa6c0('0x93')][_0xa6c0('0x94')]=_0x2be10e;if(_0x439347[_0xa6c0('0x93')][_0xa6c0('0x94')]){if(_0x439347[_0xa6c0('0x84')]['autoclose']){_0x439347[_0xa6c0('0x86')]['push']({'id':0x0,'priority':_0x439347[_0xa6c0('0x86')][_0xa6c0('0x42')]+0x1,'app':'close','appdata':_0xa6c0('0x95'),'interval':_0xa6c0('0x96')});}}return db[_0xa6c0('0x97')][_0xa6c0('0x59')]({'body':_0x2cb380[_0xa6c0('0x5a')][_0xa6c0('0x5a')],'OpenchannelAccountId':_0x2cb380['params']['id'],'OpenchannelInteractionId':_0x12186f['id'],'direction':'in','ContactId':_0x439347['contact']['id'],'AttachmentId':_0x2cb380[_0xa6c0('0x5a')][_0xa6c0('0x98')]});})[_0xa6c0('0x35')](function(_0x8e3d61){_0x439347['message']=_0x8e3d61;if(_0x439347[_0xa6c0('0x93')][_0xa6c0('0x99')]){return db[_0xa6c0('0x9a')][_0xa6c0('0x5d')]({'attributes':['id',_0xa6c0('0x38')],'where':{'id':_0x439347[_0xa6c0('0x93')]['UserId']}})[_0xa6c0('0x35')](function(_0x46848b){if(_0x46848b){_0x439347['applications'][_0xa6c0('0x9b')]({'id':0x0,'priority':0x0,'app':_0xa6c0('0x9c'),'appdata':_0x46848b[_0xa6c0('0x38')]+','+(_0x439347[_0xa6c0('0x84')][_0xa6c0('0x9d')]||0xa),'interval':'*,*,*,*'});_0x439347[_0xa6c0('0x9e')]=![];}return respondWithRpcPromise(_0xa6c0('0x9f'),_0xa6c0('0xa0'),_0x439347);});}return respondWithRpcPromise(_0xa6c0('0x9f'),_0xa6c0('0xa0'),_0x439347);})['then'](function(_0x5ef85f){respondWithRpcPromise('EventManager','EventManager',{'event':_0xa6c0('0xa1'),'message':_0x5ef85f},client9002);return _0x5ef85f;})['then'](respondWithResult(_0x1096f6,null))[_0xa6c0('0x55')](handleError(_0x1096f6,null));};exports[_0xa6c0('0xa2')]=function(_0x3d8803,_0x5468be,_0x28e5d6){return db[_0xa6c0('0x3b')]['findOne']({'where':{'id':_0x3d8803[_0xa6c0('0x57')]['id']}})[_0xa6c0('0x35')](handleEntityNotFound(_0x5468be,null))['then'](function(_0x2ea5ac){if(_0x2ea5ac){return db[_0xa6c0('0xa3')]['transaction'](function(_0x41a7fe){return db[_0xa6c0('0x82')][_0xa6c0('0x31')]({'where':{'OpenchannelAccountId':_0x3d8803[_0xa6c0('0x57')]['id']},'transaction':_0x41a7fe})[_0xa6c0('0x35')](function(_0x3b4ae1){var _0x4f64f7=_[_0xa6c0('0x4c')](_0x3d8803[_0xa6c0('0x5a')],function(_0x49a42d){_0x49a42d[_0xa6c0('0x68')]=_0x3d8803[_0xa6c0('0x57')]['id'];return _0x49a42d;});return db[_0xa6c0('0x82')][_0xa6c0('0xa4')](_0x4f64f7,{'transaction':_0x41a7fe});});})[_0xa6c0('0x35')](function(){return db[_0xa6c0('0x82')][_0xa6c0('0xa5')]({'where':{'OpenchannelAccountId':_0x3d8803[_0xa6c0('0x57')]['id']},'order':_0xa6c0('0x88')});});}})['then'](respondWithResult(_0x5468be,null))['catch'](handleError(_0x5468be,null));};exports[_0xa6c0('0xa6')]=function(_0x302767,_0x7443f9,_0x1925ca){var _0x4bba3f={};var _0x32b7b6={};var _0x14aa19;var _0x1f717d;return db[_0xa6c0('0x3b')][_0xa6c0('0x67')]({'where':{'id':_0x302767[_0xa6c0('0x57')]['id']}})[_0xa6c0('0x35')](handleEntityNotFound(_0x7443f9,null))[_0xa6c0('0x35')](function(_0x453f06){if(_0x453f06){_0x14aa19=_0x453f06;_0x32b7b6[_0xa6c0('0x3d')]=_[_0xa6c0('0x3f')](db[_0xa6c0('0x82')][_0xa6c0('0x3c')]);_0x32b7b6['query']=_[_0xa6c0('0x3f')](_0x302767[_0xa6c0('0x3e')]);_0x32b7b6[_0xa6c0('0x49')]=_[_0xa6c0('0x58')](_0x32b7b6['model'],_0x32b7b6[_0xa6c0('0x3e')]);_0x4bba3f[_0xa6c0('0x40')]=_[_0xa6c0('0x58')](_0x32b7b6['model'],qs[_0xa6c0('0x41')](_0x302767[_0xa6c0('0x3e')][_0xa6c0('0x41')]));_0x4bba3f[_0xa6c0('0x40')]=_0x4bba3f[_0xa6c0('0x40')][_0xa6c0('0x42')]?_0x4bba3f['attributes']:_0x32b7b6[_0xa6c0('0x3d')];_0x4bba3f[_0xa6c0('0x46')]=qs['sort'](_0x302767[_0xa6c0('0x3e')][_0xa6c0('0x47')]);_0x4bba3f[_0xa6c0('0x48')]=qs[_0xa6c0('0x49')](_[_0xa6c0('0x4a')](_0x302767[_0xa6c0('0x3e')],_0x32b7b6['filters']));if(_0x302767[_0xa6c0('0x3e')][_0xa6c0('0x69')]){_0x4bba3f[_0xa6c0('0x48')]=_['merge'](_0x4bba3f[_0xa6c0('0x48')],{'$or':_[_0xa6c0('0x4c')](_0x4bba3f[_0xa6c0('0x40')],function(_0x4c2eb4){var _0x4bca1e={};_0x4bca1e[_0x4c2eb4]={'$like':'%'+_0x302767[_0xa6c0('0x3e')][_0xa6c0('0x69')]+'%'};return _0x4bca1e;})});}_0x4bba3f=_['merge']({},_0x4bba3f,_0x302767['options']);return _0x14aa19['getApplications'](_0x4bba3f);}})['then'](function(_0x50a9cb){if(_0x50a9cb){_0x1f717d=_0x50a9cb[_0xa6c0('0x42')];if(!_0x302767['query'][_0xa6c0('0x43')]('nolimit')){_0x4bba3f['limit']=qs[_0xa6c0('0x45')](_0x302767[_0xa6c0('0x3e')][_0xa6c0('0x45')]);_0x4bba3f[_0xa6c0('0x2d')]=qs[_0xa6c0('0x2d')](_0x302767[_0xa6c0('0x3e')]['offset']);}return _0x14aa19[_0xa6c0('0xa6')](_0x4bba3f);}})[_0xa6c0('0x35')](function(_0x34f44d){if(_0x34f44d){return _0x34f44d?{'count':_0x1f717d,'rows':_0x34f44d}:null;}})['then'](respondWithResult(_0x7443f9,null))[_0xa6c0('0x55')](handleError(_0x7443f9,null));};exports[_0xa6c0('0xa7')]=function(_0xf81622,_0xd0ce5d,_0xc8407f){var _0x487120={'raw':![],'where':{}};var _0x18b61b={};var _0x5a993e={'count':0x0,'rows':[]};return db[_0xa6c0('0x3b')][_0xa6c0('0x67')]({'where':{'id':_0xf81622[_0xa6c0('0x57')]['id']}})['then'](handleEntityNotFound(_0xd0ce5d,null))[_0xa6c0('0x35')](function(_0x433dd5){if(_0x433dd5){_0x18b61b[_0xa6c0('0x3d')]=_[_0xa6c0('0x3f')](db[_0xa6c0('0x90')][_0xa6c0('0x3c')]);_0x18b61b['query']=_[_0xa6c0('0x3f')](_0xf81622[_0xa6c0('0x3e')]);_0x18b61b['filters']=_[_0xa6c0('0x58')](_0x18b61b['model'],_0x18b61b[_0xa6c0('0x3e')]);_0x487120[_0xa6c0('0x40')]=_['intersection'](_0x18b61b['model'],qs[_0xa6c0('0x41')](_0xf81622['query']['fields']));_0x487120[_0xa6c0('0x40')]=_0x487120[_0xa6c0('0x40')]['length']?_0x487120[_0xa6c0('0x40')]:_0x18b61b[_0xa6c0('0x3d')];if(!_0xf81622[_0xa6c0('0x3e')]['hasOwnProperty'](_0xa6c0('0x44'))){_0x487120[_0xa6c0('0x45')]=qs[_0xa6c0('0x45')](_0xf81622[_0xa6c0('0x3e')]['limit']);_0x487120[_0xa6c0('0x2d')]=qs[_0xa6c0('0x2d')](_0xf81622[_0xa6c0('0x3e')][_0xa6c0('0x2d')]);}_0x487120[_0xa6c0('0x46')]=qs[_0xa6c0('0x47')](_0xf81622[_0xa6c0('0x3e')]['sort']);_0x487120[_0xa6c0('0x48')]=qs[_0xa6c0('0x49')](_[_0xa6c0('0x4a')](_0xf81622[_0xa6c0('0x3e')],_0x18b61b[_0xa6c0('0x49')]));_0x487120[_0xa6c0('0x48')][_0xa6c0('0x68')]=_0x433dd5['id'];if(_0xf81622['query'][_0xa6c0('0x69')]){_0x487120['where']=_[_0xa6c0('0x4b')](_0x487120[_0xa6c0('0x48')],{'$or':_[_0xa6c0('0x4c')](_0x487120[_0xa6c0('0x40')],function(_0x28abd2){var _0x6badca={};_0x6badca[_0x28abd2]={'$like':'%'+_0xf81622[_0xa6c0('0x3e')]['filter']+'%'};return _0x6badca;})});}_0x487120=_[_0xa6c0('0x4b')]({},_0x487120,_0xf81622[_0xa6c0('0x51')]);return db[_0xa6c0('0x90')][_0xa6c0('0x2c')]({'where':_0x487120[_0xa6c0('0x48')]})[_0xa6c0('0x35')](function(_0x15f40){_0x5a993e[_0xa6c0('0x2c')]=_0x15f40;if(_0xf81622[_0xa6c0('0x3e')][_0xa6c0('0x52')]){_0x487120[_0xa6c0('0x53')]=[{'model':db[_0xa6c0('0x72')],'as':_0xa6c0('0xa8'),'required':![]},{'model':db[_0xa6c0('0x9a')],'as':_0xa6c0('0xa9'),'attributes':[_0xa6c0('0x38'),_0xa6c0('0xaa'),_0xa6c0('0xab')],'required':![]},{'model':db['Tag'],'as':_0xa6c0('0xac'),'attributes':['id','name',_0xa6c0('0xad')],'where':_0xf81622[_0xa6c0('0x3e')][_0xa6c0('0xae')]?{'id':_0xf81622[_0xa6c0('0x3e')][_0xa6c0('0xae')]}:undefined,'required':_0xf81622[_0xa6c0('0x3e')][_0xa6c0('0xae')]?!![]:![]}];}return db['OpenchannelInteraction']['findAll'](_0x487120);})['then'](function(_0x346d6a){_0x5a993e[_0xa6c0('0x6a')]=_0x346d6a;return _0x5a993e;});}})[_0xa6c0('0x35')](respondWithFilteredResult(_0xd0ce5d,_0x487120))[_0xa6c0('0x55')](handleError(_0xd0ce5d,null));};exports[_0xa6c0('0xaf')]=function(_0xc4c2ff,_0x634295,_0x4931c7){return db[_0xa6c0('0x3b')][_0xa6c0('0x5d')]({'where':{'id':_0xc4c2ff[_0xa6c0('0x57')]['id']}})[_0xa6c0('0x35')](handleEntityNotFound(_0x634295,null))[_0xa6c0('0x35')](function(_0x53f086){if(_0x53f086){return _0x53f086[_0xa6c0('0xaf')](_0xc4c2ff[_0xa6c0('0x5a')][_0xa6c0('0x6c')],_[_0xa6c0('0xb0')](_0xc4c2ff[_0xa6c0('0x5a')],[_0xa6c0('0x6c'),'id'])||{})[_0xa6c0('0x91')](function(_0x4f2db3){for(var _0x3372e6=0x0;_0x3372e6<_0xc4c2ff[_0xa6c0('0x5a')][_0xa6c0('0x6c')][_0xa6c0('0x42')];_0x3372e6+=0x1){socket[_0xa6c0('0xb1')]('userOpenchannelAccount:save',{'UserId':_0xc4c2ff[_0xa6c0('0x5a')][_0xa6c0('0x6c')][_0x3372e6],'OpenchannelAccountId':_0xc4c2ff[_0xa6c0('0x57')]['id']});}return _0x4f2db3;});}})[_0xa6c0('0x35')](respondWithResult(_0x634295,null))['catch'](handleError(_0x634295,null));};exports['removeAgents']=function(_0x54acd6,_0x282a9e,_0xfa48fc){return db[_0xa6c0('0x3b')][_0xa6c0('0x5d')]({'where':{'id':_0x54acd6[_0xa6c0('0x57')]['id']}})['then'](handleEntityNotFound(_0x282a9e,null))['then'](function(_0x1ea7a0){if(_0x1ea7a0){return _0x1ea7a0['removeAgents'](_0x54acd6['query']['ids'])[_0xa6c0('0x35')](function(){if(_['isArray'](_0x54acd6[_0xa6c0('0x3e')][_0xa6c0('0x6c')])){for(var _0x395d02=0x0;_0x395d02<_0x54acd6[_0xa6c0('0x3e')]['ids']['length'];_0x395d02+=0x1){socket['emit'](_0xa6c0('0xb2'),{'UserId':Number(_0x54acd6['query'][_0xa6c0('0x6c')][_0x395d02]),'OpenchannelAccountId':Number(_0x54acd6[_0xa6c0('0x57')]['id'])});}}else{socket[_0xa6c0('0xb1')](_0xa6c0('0xb2'),{'UserId':Number(_0x54acd6[_0xa6c0('0x3e')][_0xa6c0('0x6c')]),'OpenchannelAccountId':Number(_0x54acd6[_0xa6c0('0x57')]['id'])});}});}})[_0xa6c0('0x35')](respondWithStatusCode(_0x282a9e,null))[_0xa6c0('0x55')](handleError(_0x282a9e,null));};exports['getAgents']=function(_0x1d1f75,_0x32c2ae,_0xcbdd32){var _0x4d11eb={};var _0x5d73cb={};var _0x214350;var _0x3db6bf;return db['OpenchannelAccount']['findOne']({'where':{'id':_0x1d1f75[_0xa6c0('0x57')]['id']}})[_0xa6c0('0x35')](handleEntityNotFound(_0x32c2ae,null))['then'](function(_0x22077f){if(_0x22077f){_0x214350=_0x22077f;_0x5d73cb['model']=_[_0xa6c0('0x3f')](db[_0xa6c0('0x9a')]['rawAttributes']);_0x5d73cb[_0xa6c0('0x3e')]=_[_0xa6c0('0x3f')](_0x1d1f75[_0xa6c0('0x3e')]);_0x5d73cb[_0xa6c0('0x49')]=_[_0xa6c0('0x58')](_0x5d73cb[_0xa6c0('0x3d')],_0x5d73cb[_0xa6c0('0x3e')]);_0x4d11eb[_0xa6c0('0x40')]=_[_0xa6c0('0x58')](_0x5d73cb[_0xa6c0('0x3d')],qs[_0xa6c0('0x41')](_0x1d1f75[_0xa6c0('0x3e')]['fields']));_0x4d11eb[_0xa6c0('0x40')]=_0x4d11eb['attributes']['length']?_0x4d11eb[_0xa6c0('0x40')]:_0x5d73cb['model'];_0x4d11eb[_0xa6c0('0x46')]=qs[_0xa6c0('0x47')](_0x1d1f75['query'][_0xa6c0('0x47')]);_0x4d11eb[_0xa6c0('0x48')]=qs[_0xa6c0('0x49')](_[_0xa6c0('0x4a')](_0x1d1f75[_0xa6c0('0x3e')],_0x5d73cb['filters']));if(_0x1d1f75[_0xa6c0('0x3e')][_0xa6c0('0x69')]){_0x4d11eb['where']=_[_0xa6c0('0x4b')](_0x4d11eb[_0xa6c0('0x48')],{'$or':_[_0xa6c0('0x4c')](_0x4d11eb['attributes'],function(_0x4d1614){var _0x365068={};_0x365068[_0x4d1614]={'$like':'%'+_0x1d1f75[_0xa6c0('0x3e')]['filter']+'%'};return _0x365068;})});}_0x4d11eb=_['merge']({},_0x4d11eb,_0x1d1f75[_0xa6c0('0x51')]);return _0x214350['getAgents'](_0x4d11eb);}})[_0xa6c0('0x35')](function(_0x44e88e){if(_0x44e88e){_0x3db6bf=_0x44e88e['length'];if(!_0x1d1f75['query'][_0xa6c0('0x43')](_0xa6c0('0x44'))){_0x4d11eb['limit']=qs['limit'](_0x1d1f75['query'][_0xa6c0('0x45')]);_0x4d11eb[_0xa6c0('0x2d')]=qs[_0xa6c0('0x2d')](_0x1d1f75[_0xa6c0('0x3e')][_0xa6c0('0x2d')]);}return _0x214350[_0xa6c0('0xb3')](_0x4d11eb);}})['then'](function(_0x5608a2){if(_0x5608a2){return _0x5608a2?{'count':_0x3db6bf,'rows':_0x5608a2}:null;}})[_0xa6c0('0x35')](respondWithResult(_0x32c2ae,null))['catch'](handleError(_0x32c2ae,null));};exports[_0xa6c0('0x39')]=function(_0xfa997b,_0xb22a09,_0x2aa683){var _0x4ce640,_0x22789b,_0x4e39c0;if(_[_0xa6c0('0x78')](_0xfa997b[_0xa6c0('0x5a')]['body'])||_0xfa997b['body']['body']===''){throw new db[(_0xa6c0('0x7b'))]['ValidationError']('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_[_0xa6c0('0x78')](_0xfa997b[_0xa6c0('0x5a')]['to'])){}_0x4ce640=_0xfa997b[_0xa6c0('0x5a')]['to'];return db[_0xa6c0('0x3b')]['findOne']({'where':{'id':_0xfa997b['params']['id']}})[_0xa6c0('0x35')](handleEntityNotFound(_0xb22a09,null))['then'](function(_0x19bffc){if(_0x19bffc){return db['OpenchannelAccount'][_0xa6c0('0x5d')]({'where':{'id':_0x19bffc['id']},'include':[{'model':db[_0xa6c0('0x7f')],'as':_0xa6c0('0x80'),'include':[{'model':db[_0xa6c0('0x72')],'as':_0xa6c0('0x8a'),'where':{[_0x19bffc[_0xa6c0('0x7d')]]:_0x4ce640},'limit':0x1,'order':[[_0xa6c0('0x75'),'DESC']]}]}]})[_0xa6c0('0x35')](handleEntityNotFound(_0xb22a09,null))[_0xa6c0('0x35')](function(_0x352620){if(_0x352620&&_0x352620[_0xa6c0('0x80')]){_0x22789b=_0x352620[_0xa6c0('0x32')]({'plain':!![]});if(_0x22789b[_0xa6c0('0x80')]&&_0x22789b['List'][_0xa6c0('0x8a')][_0xa6c0('0x42')]){return _0x22789b[_0xa6c0('0x80')]['Contacts'][0x0];}return db['CmContact'][_0xa6c0('0x59')](_[_0xa6c0('0x18')](_0xfa997b[_0xa6c0('0x5a')],{'firstName':_0x4ce640,[_0x352620[_0xa6c0('0x7d')]]:_0x4ce640,'phone':_0x4ce640,'ListId':_0x22789b[_0xa6c0('0xb4')]}));}})[_0xa6c0('0x35')](handleEntityNotFound(_0xb22a09,null))['then'](function(_0x5db7fa){if(_0x5db7fa){_0x4e39c0=_0x5db7fa;return db[_0xa6c0('0x90')][_0xa6c0('0x5d')]({'where':{'ContactId':_0x4e39c0['id'],'closed':![],'OpenchannelAccountId':_0x22789b['id']}})[_0xa6c0('0x35')](function(_0x339307){if(_0x339307){return[_0x339307,![]];}return db[_0xa6c0('0x90')]['create']({'UserId':_0xfa997b[_0xa6c0('0x5b')]['id'],'ContactId':_0x4e39c0['id'],'OpenchannelAccountId':_0x22789b['id'],'lastMsgDirection':_0xa6c0('0xb5'),'Messages':[_[_0xa6c0('0x4b')](_0xfa997b[_0xa6c0('0x5a')],{'read':![],'body':_0xfa997b[_0xa6c0('0x5a')]['body'],'OpenchannelAccountId':_0x22789b['id'],'UserId':_0xfa997b[_0xa6c0('0x5b')]['id'],'ContactId':_0x4e39c0['id']})]},{'include':[{'model':db[_0xa6c0('0x97')],'as':_0xa6c0('0xb6')}]})[_0xa6c0('0x35')](function(_0x2d6c16){return[_0x2d6c16,!![]];});});}})[_0xa6c0('0x91')](function(_0x4bab71,_0x2a348e){if(_0x2a348e){return _0x4bab71;}return db[_0xa6c0('0x97')][_0xa6c0('0x59')](_[_0xa6c0('0x4b')](_0xfa997b[_0xa6c0('0x5a')],{'read':![],'body':_0xfa997b[_0xa6c0('0x5a')][_0xa6c0('0x5a')],'OpenchannelAccountId':_0x22789b['id'],'OpenchannelInteractionId':_0x4bab71['id'],'UserId':_0xfa997b[_0xa6c0('0x5b')]['id'],'ContactId':_0x4e39c0['id']}))[_0xa6c0('0x35')](function(_0x27a273){_0x4bab71[_0xa6c0('0xb7')]['Messages']=[];_0x4bab71['dataValues']['Messages']['push'](_0x27a273['dataValues']);return _0x4bab71;});});}})[_0xa6c0('0x35')](respondWithResult(_0xb22a09,null))['catch'](handleError(_0xb22a09,null));};
\ No newline at end of file
+var _0x7824=['params','create','user','role','OpenchannelAccounts','find','autoAssociation','body','describe','OpnechannelAccountId','Disposition','findOne','hasOwnProperty','pick','include','removeDispositions','addAnswer','OpenchannelAccountId','CannedAnswer','getAnswers','removeAnswers','ids','notify','CmContact','ValidationError','no\x20available\x20attributes','difference','updatedAt','createdAt','CompanyId','ListId','from','Sequelize','from\x20is\x20mandatory','isNil','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','CmList','List','Contacts','OpenchannelApplication','Applications','applications','list','orderBy','priority','asc','account','contact','threadId','OpenchannelInteraction','externalUrl','ContactId','spread','lastName','messageId','interaction','created','autoclose','push','close','unmanaged','*,*,*,*','OpenchannelMessage','AttachmentId','UserId','User','agent','forcedOwnership','Start','startRouting','EventManager','transaction','map','bulkCreate','findAndCountAll','getApplications','getInteractions','Contact','fullname','internal','Tags','color','tag','rows','addAgents','omit','emit','userOpenchannelAccount:save','removeAgents','isArray','userOpenchannelAccount:remove','getAgents','out','Messages','dataValues','html-pdf','eml-format','zip-dir','fast-json-patch','moment','mustache','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','redis','defaults','localhost','socket.io-emitter','register','http','client','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','request\x20sent','debug','OpenchannelAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','OpenchannelAccount,\x20%s,\x20%s','message','info','result','catch','status','end','json','offset','limit','set','apply','reject','save','update','get','UserProfileResource','destroy','sendStatus','stack','name','send','Pause','mandatoryDispositionPause','OpenchannelAccount','rawAttributes','model','keys','query','intersection','attributes','fields','length','nolimit','order','sort','where','filters','merge','key','VIRTUAL','field','filter','options','count','includeAll','findAll','show'];(function(_0x335144,_0xd20c9c){var _0x38fbe7=function(_0x457415){while(--_0x457415){_0x335144['push'](_0x335144['shift']());}};_0x38fbe7(++_0xd20c9c);}(_0x7824,0x1d7));var _0x4782=function(_0x4c0561,_0x511a52){_0x4c0561=_0x4c0561-0x0;var _0x46ceb7=_0x7824[_0x4c0561];return _0x46ceb7;};'use strict';var pdf=require(_0x4782('0x0'));var emlformat=require(_0x4782('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x4782('0x2'));var jsonpatch=require(_0x4782('0x3'));var rp=require('request-promise');var moment=require(_0x4782('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x4782('0x5'));var util=require(_0x4782('0x6'));var path=require('path');var sox=require(_0x4782('0x7'));var csv=require(_0x4782('0x8'));var ejs=require(_0x4782('0x9'));var fs=require('fs');var _=require(_0x4782('0xa'));var squel=require(_0x4782('0xb'));var crypto=require('crypto');var jsforce=require(_0x4782('0xc'));var deskjs=require(_0x4782('0xd'));var toCsv=require('to-csv');var querystring=require(_0x4782('0xe'));var Papa=require(_0x4782('0xf'));var Redis=require('ioredis');var authService=require(_0x4782('0x10'));var qs=require(_0x4782('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x4782('0x12'))(_0x4782('0x13'));var utils=require(_0x4782('0x14'));var config=require('../../config/environment');var db=require(_0x4782('0x15'))['db'];config[_0x4782('0x16')]=_[_0x4782('0x17')](config['redis'],{'host':_0x4782('0x18'),'port':0x18eb});var socket=require(_0x4782('0x19'))(new Redis(config[_0x4782('0x16')]));require('./openchannelAccount.socket')[_0x4782('0x1a')](socket);var jayson=require('jayson/promise');var client=jayson['client'][_0x4782('0x1b')]({'port':0x232c});var client9002=jayson[_0x4782('0x1c')][_0x4782('0x1b')]({'port':0x232a});function checkPasswordPattern(_0x558fcf,_0x108233,_0x3cdb4c){if(_0x3cdb4c){var _0x3528a0=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3528a0[_0x4782('0x1d')](_0x108233)){return _0x558fcf;}else{throw new Error(_0x4782('0x1e'));}}else{return _0x558fcf;}}function respondWithRpcPromise(_0x778bf5,_0x3fc09e,_0x2ace5a,_0x43d550){return new BPromise(function(_0x25d8ea,_0x5e4115){var _0x59944e=_0x43d550||client;return _0x59944e[_0x4782('0x1f')](_0x778bf5,_0x2ace5a)[_0x4782('0x20')](function(_0x1b4747){logger['info']('OpenchannelAccount,\x20%s,\x20%s',_0x3fc09e,_0x4782('0x21'));logger[_0x4782('0x22')](_0x4782('0x23'),_0x3fc09e,_0x4782('0x21'),JSON[_0x4782('0x24')](_0x1b4747));if(_0x1b4747[_0x4782('0x25')]){if(_0x1b4747[_0x4782('0x25')][_0x4782('0x26')]===0x1f4){logger[_0x4782('0x25')](_0x4782('0x27'),_0x3fc09e,_0x1b4747['error']['message']);return _0x5e4115(_0x1b4747[_0x4782('0x25')][_0x4782('0x28')]);}logger[_0x4782('0x25')](_0x4782('0x27'),_0x3fc09e,_0x1b4747['error']['message']);return _0x25d8ea(_0x1b4747[_0x4782('0x25')][_0x4782('0x28')]);}else{logger[_0x4782('0x29')](_0x4782('0x27'),_0x3fc09e,_0x4782('0x21'));_0x25d8ea(_0x1b4747[_0x4782('0x2a')][_0x4782('0x28')]);}})[_0x4782('0x2b')](function(_0x1fad8d){logger[_0x4782('0x25')](_0x4782('0x27'),_0x3fc09e,_0x1fad8d);_0x5e4115(_0x1fad8d);});});}function respondWithStatusCode(_0x5cdc86,_0x517f6a){_0x517f6a=_0x517f6a||0xcc;return function(_0x20fa37){if(_0x20fa37){return _0x5cdc86['sendStatus'](_0x517f6a);}return _0x5cdc86[_0x4782('0x2c')](_0x517f6a)[_0x4782('0x2d')]();};}function respondWithResult(_0x581fb3,_0x3a60bd){_0x3a60bd=_0x3a60bd||0xc8;return function(_0x153cae){if(_0x153cae){return _0x581fb3[_0x4782('0x2c')](_0x3a60bd)[_0x4782('0x2e')](_0x153cae);}};}function respondWithFilteredResult(_0x4d3bcb,_0x53b936){return function(_0x3c197c){if(_0x3c197c){var _0x791931=_0x3c197c['count'],_0x237eac=_0x53b936[_0x4782('0x2f')],_0x2a71f7=_0x53b936['offset']+_0x53b936[_0x4782('0x30')],_0x4da50a;if(_0x2a71f7>=_0x791931){_0x2a71f7=_0x791931;_0x4da50a=0xc8;}else{_0x4da50a=0xce;}_0x4d3bcb[_0x4782('0x2c')](_0x4da50a);return _0x4d3bcb[_0x4782('0x31')]('Content-Range',_0x237eac+'-'+_0x2a71f7+'/'+_0x791931)[_0x4782('0x2e')](_0x3c197c);}return null;};}function patchUpdates(_0x364ae2){return function(_0x59b7d9){try{jsonpatch[_0x4782('0x32')](_0x59b7d9,_0x364ae2,!![]);}catch(_0x597c72){return BPromise[_0x4782('0x33')](_0x597c72);}return _0x59b7d9[_0x4782('0x34')]();};}function saveUpdates(_0x376740,_0x15009a){return function(_0x5b2002){if(_0x5b2002){return _0x5b2002[_0x4782('0x35')](_0x376740)[_0x4782('0x20')](function(_0x471542){return _0x471542;});}return null;};}function removeEntity(_0x49505b,_0x50730b){return function(_0x3f5747){if(_0x3f5747){return _0x3f5747['destroy']()[_0x4782('0x20')](function(){var _0x2af0d2=_0x3f5747[_0x4782('0x36')]({'plain':!![]});var _0x4eefd8='OpenchannelAccounts';return db[_0x4782('0x37')][_0x4782('0x38')]({'where':{'type':_0x4eefd8,'resourceId':_0x2af0d2['id']}})[_0x4782('0x20')](function(){return _0x3f5747;});})[_0x4782('0x20')](function(){_0x49505b[_0x4782('0x2c')](0xcc)[_0x4782('0x2d')]();});}};}function handleEntityNotFound(_0x2923f9,_0x18184d){return function(_0x46556c){if(!_0x46556c){_0x2923f9[_0x4782('0x39')](0x194);}return _0x46556c;};}function handleError(_0x2ebce7,_0x28bba4){_0x28bba4=_0x28bba4||0x1f4;return function(_0x27ce82){logger['error'](_0x27ce82[_0x4782('0x3a')]);if(_0x27ce82[_0x4782('0x3b')]){delete _0x27ce82['name'];}_0x2ebce7[_0x4782('0x2c')](_0x28bba4)[_0x4782('0x3c')](_0x27ce82);};}exports['index']=function(_0x5dc629,_0x1f2e01){var _0x3678dc={'include':[{'model':db[_0x4782('0x3d')],'as':_0x4782('0x3e')}]},_0x23e62a={},_0x30e2d7={'count':0x0,'rows':[]};var _0x3febd8=db[_0x4782('0x3f')][_0x4782('0x40')];_0x23e62a[_0x4782('0x41')]=_[_0x4782('0x42')](_0x3febd8);_0x23e62a[_0x4782('0x43')]=_['keys'](_0x5dc629[_0x4782('0x43')]);_0x23e62a['filters']=_[_0x4782('0x44')](_0x23e62a[_0x4782('0x41')],_0x23e62a[_0x4782('0x43')]);_0x3678dc[_0x4782('0x45')]=_[_0x4782('0x44')](_0x23e62a[_0x4782('0x41')],qs[_0x4782('0x46')](_0x5dc629[_0x4782('0x43')][_0x4782('0x46')]));_0x3678dc[_0x4782('0x45')]=_0x3678dc[_0x4782('0x45')][_0x4782('0x47')]?_0x3678dc['attributes']:_0x23e62a[_0x4782('0x41')];if(!_0x5dc629['query']['hasOwnProperty'](_0x4782('0x48'))){_0x3678dc[_0x4782('0x30')]=qs[_0x4782('0x30')](_0x5dc629[_0x4782('0x43')][_0x4782('0x30')]);_0x3678dc[_0x4782('0x2f')]=qs[_0x4782('0x2f')](_0x5dc629[_0x4782('0x43')]['offset']);}_0x3678dc[_0x4782('0x49')]=qs[_0x4782('0x4a')](_0x5dc629['query'][_0x4782('0x4a')]);_0x3678dc[_0x4782('0x4b')]=qs[_0x4782('0x4c')](_['pick'](_0x5dc629[_0x4782('0x43')],_0x23e62a[_0x4782('0x4c')]));if(_0x5dc629[_0x4782('0x43')]['filter']){_0x3678dc['where']=_[_0x4782('0x4d')](_0x3678dc[_0x4782('0x4b')],{'$or':_['map'](_0x3febd8,function(_0x585c77){if(_0x585c77['type'][_0x4782('0x4e')]!==_0x4782('0x4f')){var _0x387d6e={};_0x387d6e[_0x585c77[_0x4782('0x50')]]={'$like':'%'+_0x5dc629[_0x4782('0x43')][_0x4782('0x51')]+'%'};return _0x387d6e;}})});}_0x3678dc=_['merge']({},_0x3678dc,_0x5dc629[_0x4782('0x52')]);var _0x17781={'where':_0x3678dc['where']};return db[_0x4782('0x3f')][_0x4782('0x53')](_0x17781)['then'](function(_0x61bbe2){_0x30e2d7[_0x4782('0x53')]=_0x61bbe2;if(_0x5dc629[_0x4782('0x43')][_0x4782('0x54')]){_0x3678dc['include']=[{'all':!![]}];}return db[_0x4782('0x3f')][_0x4782('0x55')](_0x3678dc);})[_0x4782('0x20')](function(_0x4cc80c){_0x30e2d7['rows']=_0x4cc80c;return _0x30e2d7;})[_0x4782('0x20')](respondWithFilteredResult(_0x1f2e01,_0x3678dc))[_0x4782('0x2b')](handleError(_0x1f2e01,null));};exports[_0x4782('0x56')]=function(_0x523636,_0x481288){var _0x5ac0d7={'raw':![],'where':{'id':_0x523636[_0x4782('0x57')]['id']},'include':[{'model':db[_0x4782('0x3d')],'as':'mandatoryDispositionPause'}]},_0x3a3a94={};_0x3a3a94['model']=_[_0x4782('0x42')](db[_0x4782('0x3f')][_0x4782('0x40')]);_0x3a3a94[_0x4782('0x43')]=_[_0x4782('0x42')](_0x523636[_0x4782('0x43')]);_0x3a3a94[_0x4782('0x4c')]=_[_0x4782('0x44')](_0x3a3a94[_0x4782('0x41')],_0x3a3a94[_0x4782('0x43')]);_0x5ac0d7[_0x4782('0x45')]=_[_0x4782('0x44')](_0x3a3a94[_0x4782('0x41')],qs[_0x4782('0x46')](_0x523636[_0x4782('0x43')][_0x4782('0x46')]));_0x5ac0d7[_0x4782('0x45')]=_0x5ac0d7[_0x4782('0x45')][_0x4782('0x47')]?_0x5ac0d7[_0x4782('0x45')]:_0x3a3a94['model'];if(_0x523636['query'][_0x4782('0x54')]){_0x5ac0d7['include']=[{'all':!![]}];}_0x5ac0d7=_[_0x4782('0x4d')]({},_0x5ac0d7,_0x523636[_0x4782('0x52')]);return db[_0x4782('0x3f')]['find'](_0x5ac0d7)['then'](handleEntityNotFound(_0x481288,null))['then'](respondWithResult(_0x481288,null))[_0x4782('0x2b')](handleError(_0x481288,null));};exports['create']=function(_0x15b6dc,_0x83d721){return db['OpenchannelAccount'][_0x4782('0x58')](_0x15b6dc['body'],{})[_0x4782('0x20')](function(_0x31c43c){var _0x1b6cbd=_0x15b6dc[_0x4782('0x59')][_0x4782('0x36')]({'plain':!![]});if(!_0x1b6cbd)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x1b6cbd[_0x4782('0x5a')]==='user'){var _0x5caf3c=_0x31c43c['get']({'plain':!![]});var _0x22ebe9=_0x4782('0x5b');return db['UserProfileSection'][_0x4782('0x5c')]({'where':{'name':_0x22ebe9,'userProfileId':_0x1b6cbd['userProfileId']},'raw':!![]})[_0x4782('0x20')](function(_0x17402a){if(_0x17402a&&_0x17402a[_0x4782('0x5d')]===0x0){return db[_0x4782('0x37')][_0x4782('0x58')]({'name':_0x5caf3c[_0x4782('0x3b')],'resourceId':_0x5caf3c['id'],'type':_0x17402a[_0x4782('0x3b')],'sectionId':_0x17402a['id']},{})['then'](function(){return _0x31c43c;});}else{return _0x31c43c;}})[_0x4782('0x2b')](function(_0x387146){logger[_0x4782('0x25')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x387146);throw _0x387146;});}return _0x31c43c;})['then'](respondWithResult(_0x83d721,0xc9))[_0x4782('0x2b')](handleError(_0x83d721,null));};exports[_0x4782('0x35')]=function(_0xd1db0b,_0x598b4){if(_0xd1db0b['body']['id']){delete _0xd1db0b[_0x4782('0x5e')]['id'];}return db[_0x4782('0x3f')]['find']({'where':{'id':_0xd1db0b[_0x4782('0x57')]['id']},'include':[{'model':db[_0x4782('0x3d')],'as':_0x4782('0x3e')}]})[_0x4782('0x20')](handleEntityNotFound(_0x598b4,null))['then'](saveUpdates(_0xd1db0b[_0x4782('0x5e')],null))['then'](respondWithResult(_0x598b4,null))[_0x4782('0x2b')](handleError(_0x598b4,null));};exports[_0x4782('0x38')]=function(_0x59ca51,_0x184cfc){return db[_0x4782('0x3f')][_0x4782('0x5c')]({'where':{'id':_0x59ca51[_0x4782('0x57')]['id']}})['then'](handleEntityNotFound(_0x184cfc,null))[_0x4782('0x20')](removeEntity(_0x184cfc,null))['catch'](handleError(_0x184cfc,null));};exports[_0x4782('0x5f')]=function(_0x2dfe6,_0x398ba2){return db[_0x4782('0x3f')]['describe']()[_0x4782('0x20')](respondWithResult(_0x398ba2,null))[_0x4782('0x2b')](handleError(_0x398ba2,null));};exports['addDisposition']=function(_0x42b1a0,_0x5ed854,_0x5d013a){if(_0x42b1a0[_0x4782('0x5e')]['id']){delete _0x42b1a0[_0x4782('0x5e')]['id'];}return db['OpenchannelAccount'][_0x4782('0x5c')]({'where':{'id':_0x42b1a0[_0x4782('0x57')]['id']}})[_0x4782('0x20')](handleEntityNotFound(_0x5ed854,null))[_0x4782('0x20')](function(_0x325474){if(_0x325474){_0x42b1a0['body'][_0x4782('0x60')]=_0x325474['id'];return db[_0x4782('0x61')][_0x4782('0x58')](_0x42b1a0[_0x4782('0x5e')]);}})[_0x4782('0x20')](respondWithResult(_0x5ed854,null))[_0x4782('0x2b')](handleError(_0x5ed854,null));};exports['getDispositions']=function(_0xc2458d,_0x46c807,_0x44a9f8){var _0x198e0d={'raw':![],'where':{}};var _0x300cdd={};var _0x50c86c={'count':0x0,'rows':[]};return db[_0x4782('0x3f')][_0x4782('0x62')]({'where':{'id':_0xc2458d[_0x4782('0x57')]['id']}})[_0x4782('0x20')](handleEntityNotFound(_0x46c807,null))[_0x4782('0x20')](function(_0x38741b){if(_0x38741b){_0x300cdd[_0x4782('0x41')]=_[_0x4782('0x42')](db[_0x4782('0x61')][_0x4782('0x40')]);_0x300cdd[_0x4782('0x43')]=_[_0x4782('0x42')](_0xc2458d[_0x4782('0x43')]);_0x300cdd[_0x4782('0x4c')]=_['intersection'](_0x300cdd['model'],_0x300cdd['query']);_0x198e0d['attributes']=_[_0x4782('0x44')](_0x300cdd[_0x4782('0x41')],qs[_0x4782('0x46')](_0xc2458d['query'][_0x4782('0x46')]));_0x198e0d[_0x4782('0x45')]=_0x198e0d[_0x4782('0x45')][_0x4782('0x47')]?_0x198e0d[_0x4782('0x45')]:_0x300cdd[_0x4782('0x41')];if(!_0xc2458d['query'][_0x4782('0x63')](_0x4782('0x48'))){_0x198e0d[_0x4782('0x30')]=qs[_0x4782('0x30')](_0xc2458d['query']['limit']);_0x198e0d['offset']=qs[_0x4782('0x2f')](_0xc2458d[_0x4782('0x43')]['offset']);}_0x198e0d['order']=qs[_0x4782('0x4a')](_0xc2458d[_0x4782('0x43')][_0x4782('0x4a')]);_0x198e0d[_0x4782('0x4b')]=qs[_0x4782('0x4c')](_[_0x4782('0x64')](_0xc2458d[_0x4782('0x43')],_0x300cdd[_0x4782('0x4c')]));_0x198e0d[_0x4782('0x4b')]['OpenchannelAccountId']=_0x38741b['id'];if(_0xc2458d['query'][_0x4782('0x51')]){_0x198e0d[_0x4782('0x4b')]=_[_0x4782('0x4d')](_0x198e0d['where'],{'$or':_['map'](_0x198e0d[_0x4782('0x45')],function(_0x1951a5){var _0x24c0be={};_0x24c0be[_0x1951a5]={'$like':'%'+_0xc2458d[_0x4782('0x43')][_0x4782('0x51')]+'%'};return _0x24c0be;})});}_0x198e0d=_['merge']({},_0x198e0d,_0xc2458d[_0x4782('0x52')]);return db['Disposition'][_0x4782('0x53')]({'where':_0x198e0d[_0x4782('0x4b')]})[_0x4782('0x20')](function(_0xe97bf0){_0x50c86c[_0x4782('0x53')]=_0xe97bf0;if(_0xc2458d[_0x4782('0x43')][_0x4782('0x54')]){_0x198e0d[_0x4782('0x65')]=[{'all':!![]}];}return db['Disposition'][_0x4782('0x55')](_0x198e0d);})[_0x4782('0x20')](function(_0x2792b9){_0x50c86c['rows']=_0x2792b9;return _0x50c86c;});}})[_0x4782('0x20')](respondWithFilteredResult(_0x46c807,_0x198e0d))[_0x4782('0x2b')](handleError(_0x46c807,null));};exports['removeDispositions']=function(_0x54f19c,_0x207d0f,_0x3a548f){return db[_0x4782('0x3f')][_0x4782('0x5c')]({'where':{'id':_0x54f19c[_0x4782('0x57')]['id']}})[_0x4782('0x20')](handleEntityNotFound(_0x207d0f,null))[_0x4782('0x20')](function(_0x43b122){if(_0x43b122){return _0x43b122[_0x4782('0x66')](_0x54f19c['query']['ids']);}})[_0x4782('0x20')](respondWithStatusCode(_0x207d0f,null))[_0x4782('0x2b')](handleError(_0x207d0f,null));};exports[_0x4782('0x67')]=function(_0x50ec0a,_0x4fcf2e,_0x2129df){if(_0x50ec0a[_0x4782('0x5e')]['id']){delete _0x50ec0a[_0x4782('0x5e')]['id'];}return db[_0x4782('0x3f')][_0x4782('0x5c')]({'where':{'id':_0x50ec0a[_0x4782('0x57')]['id']}})[_0x4782('0x20')](handleEntityNotFound(_0x4fcf2e,null))[_0x4782('0x20')](function(_0x5ed1bd){if(_0x5ed1bd){_0x50ec0a['body'][_0x4782('0x68')]=_0x5ed1bd['id'];return db[_0x4782('0x69')][_0x4782('0x58')](_0x50ec0a[_0x4782('0x5e')]);}})[_0x4782('0x20')](respondWithResult(_0x4fcf2e,null))['catch'](handleError(_0x4fcf2e,null));};exports[_0x4782('0x6a')]=function(_0x13fc21,_0x4939ad,_0x46bcf0){var _0x8b1880={'raw':![],'where':{}};var _0x3b3cd0={};var _0x27b8f0={'count':0x0,'rows':[]};return db[_0x4782('0x3f')][_0x4782('0x62')]({'where':{'id':_0x13fc21[_0x4782('0x57')]['id']}})[_0x4782('0x20')](handleEntityNotFound(_0x4939ad,null))[_0x4782('0x20')](function(_0x5f3ceb){if(_0x5f3ceb){_0x3b3cd0[_0x4782('0x41')]=_['keys'](db['CannedAnswer'][_0x4782('0x40')]);_0x3b3cd0[_0x4782('0x43')]=_[_0x4782('0x42')](_0x13fc21['query']);_0x3b3cd0['filters']=_[_0x4782('0x44')](_0x3b3cd0[_0x4782('0x41')],_0x3b3cd0['query']);_0x8b1880[_0x4782('0x45')]=_[_0x4782('0x44')](_0x3b3cd0['model'],qs[_0x4782('0x46')](_0x13fc21['query'][_0x4782('0x46')]));_0x8b1880[_0x4782('0x45')]=_0x8b1880[_0x4782('0x45')][_0x4782('0x47')]?_0x8b1880[_0x4782('0x45')]:_0x3b3cd0['model'];if(!_0x13fc21[_0x4782('0x43')]['hasOwnProperty'](_0x4782('0x48'))){_0x8b1880[_0x4782('0x30')]=qs[_0x4782('0x30')](_0x13fc21[_0x4782('0x43')]['limit']);_0x8b1880[_0x4782('0x2f')]=qs[_0x4782('0x2f')](_0x13fc21[_0x4782('0x43')][_0x4782('0x2f')]);}_0x8b1880[_0x4782('0x49')]=qs[_0x4782('0x4a')](_0x13fc21[_0x4782('0x43')][_0x4782('0x4a')]);_0x8b1880[_0x4782('0x4b')]=qs[_0x4782('0x4c')](_[_0x4782('0x64')](_0x13fc21['query'],_0x3b3cd0[_0x4782('0x4c')]));_0x8b1880[_0x4782('0x4b')][_0x4782('0x68')]=_0x5f3ceb['id'];if(_0x13fc21[_0x4782('0x43')][_0x4782('0x51')]){_0x8b1880[_0x4782('0x4b')]=_[_0x4782('0x4d')](_0x8b1880[_0x4782('0x4b')],{'$or':_['map'](_0x8b1880[_0x4782('0x45')],function(_0x187424){var _0x244eea={};_0x244eea[_0x187424]={'$like':'%'+_0x13fc21['query']['filter']+'%'};return _0x244eea;})});}_0x8b1880=_[_0x4782('0x4d')]({},_0x8b1880,_0x13fc21['options']);return db[_0x4782('0x69')][_0x4782('0x53')]({'where':_0x8b1880[_0x4782('0x4b')]})['then'](function(_0x4fdde5){_0x27b8f0[_0x4782('0x53')]=_0x4fdde5;if(_0x13fc21[_0x4782('0x43')]['includeAll']){_0x8b1880['include']=[{'all':!![]}];}return db['CannedAnswer'][_0x4782('0x55')](_0x8b1880);})[_0x4782('0x20')](function(_0x14b599){_0x27b8f0['rows']=_0x14b599;return _0x27b8f0;});}})[_0x4782('0x20')](respondWithFilteredResult(_0x4939ad,_0x8b1880))['catch'](handleError(_0x4939ad,null));};exports['removeAnswers']=function(_0x3647fb,_0x2b4833,_0x1b16fa){return db[_0x4782('0x3f')][_0x4782('0x5c')]({'where':{'id':_0x3647fb['params']['id']}})[_0x4782('0x20')](handleEntityNotFound(_0x2b4833,null))[_0x4782('0x20')](function(_0x45fa59){if(_0x45fa59){return _0x45fa59[_0x4782('0x6b')](_0x3647fb[_0x4782('0x43')][_0x4782('0x6c')]);}})[_0x4782('0x20')](respondWithStatusCode(_0x2b4833,null))[_0x4782('0x2b')](handleError(_0x2b4833,null));};exports[_0x4782('0x6d')]=function(_0x341f5c,_0x27e9af,_0x8fa15e){var _0x180f06={'body':_0x341f5c[_0x4782('0x5e')],'channel':'openchannel'};var _0x25a9a7=[];var _0x11f8f3=[];var _0x301595={};var _0x1ddaaa=![];return db[_0x4782('0x6e')][_0x4782('0x5f')]()[_0x4782('0x20')](function(_0x272848){if(!_0x272848){throw new db['Sequelize'][(_0x4782('0x6f'))](_0x4782('0x70'));}_0x25a9a7=_[_0x4782('0x71')](_[_0x4782('0x42')](_0x272848),['createdAt',_0x4782('0x72')]);_0x11f8f3=_[_0x4782('0x71')](_[_0x4782('0x42')](_0x272848),[_0x4782('0x73'),_0x4782('0x72'),_0x4782('0x74'),_0x4782('0x75')]);if(_0x341f5c['body']['id']){delete _0x341f5c['body']['id'];}if(_['isNil'](_0x341f5c['body'][_0x4782('0x76')])){throw new db[(_0x4782('0x77'))]['ValidationError'](_0x4782('0x78'));}if(_[_0x4782('0x79')](_0x341f5c[_0x4782('0x5e')][_0x4782('0x5e')])||_0x341f5c['body']['body']===''){throw new db[(_0x4782('0x77'))]['ValidationError'](_0x4782('0x7a'));}if(_['isNil'](_0x341f5c[_0x4782('0x5e')][_0x4782('0x7b')])){throw new db[(_0x4782('0x77'))][(_0x4782('0x6f'))](_0x4782('0x7c')+_0x11f8f3);}if(!_[_0x4782('0x7d')](_0x11f8f3,_0x341f5c['body']['mapKey'])){throw new db[(_0x4782('0x77'))][(_0x4782('0x6f'))](_0x4782('0x7e')+_0x11f8f3);}_0x301595[_0x341f5c[_0x4782('0x5e')][_0x4782('0x7b')]]=_0x341f5c[_0x4782('0x5e')]['from'];})[_0x4782('0x20')](function(){return db[_0x4782('0x3f')]['find']({'where':{'id':_0x341f5c['params']['id']},'include':[{'model':db[_0x4782('0x7f')],'as':_0x4782('0x80'),'include':[{'model':db[_0x4782('0x6e')],'as':_0x4782('0x81'),'where':_0x301595,'limit':0x1,'order':[[_0x4782('0x72'),'DESC']]}]},{'model':db[_0x4782('0x82')],'as':_0x4782('0x83')}]});})['then'](handleEntityNotFound(_0x27e9af,null))['then'](function(_0xe05309){if(_0xe05309&&_0xe05309['List']){_0x180f06['account']=_0xe05309;_0x180f06[_0x4782('0x84')]=_0xe05309[_0x4782('0x83')];_0x180f06[_0x4782('0x85')]=_0xe05309['List'];_0x180f06[_0x4782('0x84')]=_[_0x4782('0x86')](_0x180f06[_0x4782('0x84')],[_0x4782('0x87')],[_0x4782('0x88')]);if(_0x180f06[_0x4782('0x89')][_0x4782('0x83')]){delete _0x180f06['account'][_0x4782('0x83')];}if(_0x180f06['account'][_0x4782('0x80')]&&_0x180f06[_0x4782('0x89')][_0x4782('0x80')][_0x4782('0x81')][_0x4782('0x47')]){return _0x180f06[_0x4782('0x89')]['List']['Contacts'][0x0];}var _0x2e43cf=_[_0x4782('0x17')](_0x341f5c[_0x4782('0x5e')],{'firstName':_0x341f5c['body'][_0x4782('0x76')],'ListId':_0xe05309[_0x4782('0x75')]});_0x2e43cf[_0x341f5c[_0x4782('0x5e')][_0x4782('0x7b')]]=_0x341f5c['body'][_0x4782('0x76')];return db[_0x4782('0x6e')][_0x4782('0x58')](_0x2e43cf,{'fields':_0x25a9a7,'raw':!![]});}})[_0x4782('0x20')](handleEntityNotFound(_0x27e9af,null))[_0x4782('0x20')](function(_0x4da986){_0x180f06[_0x4782('0x8a')]=_0x4da986;if(_0x4da986){var _0x3f8a3c={'ContactId':_0x4da986['id'],'OpenchannelAccountId':_0x341f5c[_0x4782('0x57')]['id'],'from':(_0x4da986['firstName']||'')+'\x20'+(_0x4da986['lastName']||'')};var _0x1215b0={'OpenchannelAccountId':_0x341f5c[_0x4782('0x57')]['id'],'closed':![]};if(_0x341f5c['body'][_0x4782('0x8b')]){_0x1215b0[_0x4782('0x8b')]=_0x341f5c[_0x4782('0x5e')]['threadId'];return db[_0x4782('0x8c')][_0x4782('0x5c')]({'where':_0x1215b0})[_0x4782('0x20')](function(_0x3ba50f){if(_0x3ba50f){return[_0x3ba50f,![]];}_0x3f8a3c['threadId']=_0x341f5c[_0x4782('0x5e')]['threadId'];_0x3f8a3c[_0x4782('0x8d')]=_0x341f5c[_0x4782('0x5e')][_0x4782('0x8d')];return db['OpenchannelInteraction'][_0x4782('0x58')](_0x3f8a3c)[_0x4782('0x20')](function(_0x29b800){return[_0x29b800,!![]];});});}else{_0x1215b0[_0x4782('0x8b')]=null;}_0x1215b0[_0x4782('0x8e')]=_0x4da986['id'];return db[_0x4782('0x8c')][_0x4782('0x5c')]({'where':_0x1215b0})['then'](function(_0x45128e){if(_0x45128e){return[_0x45128e,![]];}return db[_0x4782('0x8c')]['create'](_0x3f8a3c)[_0x4782('0x20')](function(_0x202759){return[_0x202759,!![]];});});}})[_0x4782('0x8f')](function(_0x5152b1,_0x5f4de1){if(_0x5152b1){_0x1ddaaa=_0x5f4de1;if(!_0x5f4de1){var _0x5d4449={'from':(_0x180f06[_0x4782('0x8a')]['firstName']||'')+'\x20'+(_0x180f06[_0x4782('0x8a')][_0x4782('0x90')]||'')};if(_0x341f5c[_0x4782('0x5e')][_0x4782('0x8b')]&&_0x341f5c[_0x4782('0x5e')]['messageId']&&_0x341f5c[_0x4782('0x5e')]['threadId']!=_0x341f5c[_0x4782('0x5e')][_0x4782('0x91')]){_0x5d4449['threadId']=_0x341f5c[_0x4782('0x5e')][_0x4782('0x91')];}return _0x5152b1[_0x4782('0x35')](_0x5d4449);}else{return _0x5152b1;}}})[_0x4782('0x20')](function(_0x375b09){_0x180f06[_0x4782('0x92')]=_0x375b09[_0x4782('0x36')]({'plain':!![]});_0x180f06['interaction'][_0x4782('0x93')]=_0x1ddaaa;if(_0x180f06[_0x4782('0x92')][_0x4782('0x93')]){if(_0x180f06[_0x4782('0x89')][_0x4782('0x94')]){_0x180f06[_0x4782('0x84')][_0x4782('0x95')]({'id':0x0,'priority':_0x180f06[_0x4782('0x84')][_0x4782('0x47')]+0x1,'app':_0x4782('0x96'),'appdata':_0x4782('0x97'),'interval':_0x4782('0x98')});}}return db[_0x4782('0x99')][_0x4782('0x58')]({'body':_0x341f5c[_0x4782('0x5e')][_0x4782('0x5e')],'OpenchannelAccountId':_0x341f5c[_0x4782('0x57')]['id'],'OpenchannelInteractionId':_0x375b09['id'],'direction':'in','ContactId':_0x180f06[_0x4782('0x8a')]['id'],'AttachmentId':_0x341f5c[_0x4782('0x5e')][_0x4782('0x9a')]});})[_0x4782('0x20')](function(_0x13407c){_0x180f06[_0x4782('0x28')]=_0x13407c;if(_0x180f06[_0x4782('0x92')][_0x4782('0x9b')]){return db[_0x4782('0x9c')]['find']({'attributes':['id',_0x4782('0x3b')],'where':{'id':_0x180f06[_0x4782('0x92')][_0x4782('0x9b')]}})['then'](function(_0x1176ea){if(_0x1176ea){_0x180f06[_0x4782('0x84')]['unshift']({'id':0x0,'priority':0x0,'app':_0x4782('0x9d'),'appdata':_0x1176ea['name']+','+(_0x180f06[_0x4782('0x89')]['waitForTheAssignedAgent']||0xa),'interval':_0x4782('0x98')});_0x180f06[_0x4782('0x9e')]=![];}return respondWithRpcPromise(_0x4782('0x9f'),_0x4782('0xa0'),_0x180f06);});}return respondWithRpcPromise(_0x4782('0x9f'),_0x4782('0xa0'),_0x180f06);})['then'](function(_0x4d4ec5){respondWithRpcPromise('EventManager',_0x4782('0xa1'),{'event':'notify','message':_0x4d4ec5},client9002);return _0x4d4ec5;})['then'](respondWithResult(_0x27e9af,null))[_0x4782('0x2b')](handleError(_0x27e9af,null));};exports['addApplications']=function(_0x42d13b,_0x38653a,_0xa4097e){return db[_0x4782('0x3f')][_0x4782('0x62')]({'where':{'id':_0x42d13b[_0x4782('0x57')]['id']}})['then'](handleEntityNotFound(_0x38653a,null))[_0x4782('0x20')](function(_0x461c17){if(_0x461c17){return db['sequelize'][_0x4782('0xa2')](function(_0x31ccc1){return db['OpenchannelApplication'][_0x4782('0x38')]({'where':{'OpenchannelAccountId':_0x42d13b[_0x4782('0x57')]['id']},'transaction':_0x31ccc1})[_0x4782('0x20')](function(_0x48db8e){var _0x32c82b=_[_0x4782('0xa3')](_0x42d13b['body'],function(_0x4a4f17){_0x4a4f17[_0x4782('0x68')]=_0x42d13b[_0x4782('0x57')]['id'];return _0x4a4f17;});return db[_0x4782('0x82')][_0x4782('0xa4')](_0x32c82b,{'transaction':_0x31ccc1});});})[_0x4782('0x20')](function(){return db[_0x4782('0x82')][_0x4782('0xa5')]({'where':{'OpenchannelAccountId':_0x42d13b[_0x4782('0x57')]['id']},'order':_0x4782('0x87')});});}})['then'](respondWithResult(_0x38653a,null))['catch'](handleError(_0x38653a,null));};exports[_0x4782('0xa6')]=function(_0x10a1a5,_0x5729c6,_0x46e0d4){var _0x48d989={};var _0x396521={};var _0x1ae8f4;var _0x20efd0;return db[_0x4782('0x3f')][_0x4782('0x62')]({'where':{'id':_0x10a1a5[_0x4782('0x57')]['id']}})['then'](handleEntityNotFound(_0x5729c6,null))[_0x4782('0x20')](function(_0x43166b){if(_0x43166b){_0x1ae8f4=_0x43166b;_0x396521[_0x4782('0x41')]=_['keys'](db[_0x4782('0x82')][_0x4782('0x40')]);_0x396521['query']=_[_0x4782('0x42')](_0x10a1a5[_0x4782('0x43')]);_0x396521[_0x4782('0x4c')]=_['intersection'](_0x396521[_0x4782('0x41')],_0x396521[_0x4782('0x43')]);_0x48d989[_0x4782('0x45')]=_[_0x4782('0x44')](_0x396521[_0x4782('0x41')],qs[_0x4782('0x46')](_0x10a1a5[_0x4782('0x43')][_0x4782('0x46')]));_0x48d989[_0x4782('0x45')]=_0x48d989[_0x4782('0x45')][_0x4782('0x47')]?_0x48d989['attributes']:_0x396521['model'];_0x48d989[_0x4782('0x49')]=qs[_0x4782('0x4a')](_0x10a1a5[_0x4782('0x43')][_0x4782('0x4a')]);_0x48d989[_0x4782('0x4b')]=qs['filters'](_['pick'](_0x10a1a5[_0x4782('0x43')],_0x396521[_0x4782('0x4c')]));if(_0x10a1a5[_0x4782('0x43')][_0x4782('0x51')]){_0x48d989[_0x4782('0x4b')]=_[_0x4782('0x4d')](_0x48d989[_0x4782('0x4b')],{'$or':_[_0x4782('0xa3')](_0x48d989[_0x4782('0x45')],function(_0x36e903){var _0x51c642={};_0x51c642[_0x36e903]={'$like':'%'+_0x10a1a5[_0x4782('0x43')]['filter']+'%'};return _0x51c642;})});}_0x48d989=_['merge']({},_0x48d989,_0x10a1a5['options']);return _0x1ae8f4[_0x4782('0xa6')](_0x48d989);}})[_0x4782('0x20')](function(_0x509b07){if(_0x509b07){_0x20efd0=_0x509b07[_0x4782('0x47')];if(!_0x10a1a5[_0x4782('0x43')][_0x4782('0x63')]('nolimit')){_0x48d989[_0x4782('0x30')]=qs[_0x4782('0x30')](_0x10a1a5[_0x4782('0x43')][_0x4782('0x30')]);_0x48d989['offset']=qs[_0x4782('0x2f')](_0x10a1a5['query'][_0x4782('0x2f')]);}return _0x1ae8f4[_0x4782('0xa6')](_0x48d989);}})['then'](function(_0x12fefd){if(_0x12fefd){return _0x12fefd?{'count':_0x20efd0,'rows':_0x12fefd}:null;}})['then'](respondWithResult(_0x5729c6,null))['catch'](handleError(_0x5729c6,null));};exports[_0x4782('0xa7')]=function(_0x5641f0,_0xb99e91,_0x3fe142){var _0x24858e={'raw':![],'where':{}};var _0x33cdd4={};var _0xd6a288={'count':0x0,'rows':[]};return db['OpenchannelAccount'][_0x4782('0x62')]({'where':{'id':_0x5641f0['params']['id']}})['then'](handleEntityNotFound(_0xb99e91,null))[_0x4782('0x20')](function(_0x23a939){if(_0x23a939){_0x33cdd4['model']=_[_0x4782('0x42')](db['OpenchannelInteraction'][_0x4782('0x40')]);_0x33cdd4[_0x4782('0x43')]=_[_0x4782('0x42')](_0x5641f0[_0x4782('0x43')]);_0x33cdd4[_0x4782('0x4c')]=_['intersection'](_0x33cdd4[_0x4782('0x41')],_0x33cdd4[_0x4782('0x43')]);_0x24858e[_0x4782('0x45')]=_['intersection'](_0x33cdd4[_0x4782('0x41')],qs['fields'](_0x5641f0['query'][_0x4782('0x46')]));_0x24858e[_0x4782('0x45')]=_0x24858e[_0x4782('0x45')][_0x4782('0x47')]?_0x24858e[_0x4782('0x45')]:_0x33cdd4[_0x4782('0x41')];if(!_0x5641f0['query']['hasOwnProperty'](_0x4782('0x48'))){_0x24858e[_0x4782('0x30')]=qs['limit'](_0x5641f0['query'][_0x4782('0x30')]);_0x24858e[_0x4782('0x2f')]=qs[_0x4782('0x2f')](_0x5641f0[_0x4782('0x43')]['offset']);}_0x24858e[_0x4782('0x49')]=qs[_0x4782('0x4a')](_0x5641f0[_0x4782('0x43')]['sort']);_0x24858e[_0x4782('0x4b')]=qs[_0x4782('0x4c')](_['pick'](_0x5641f0[_0x4782('0x43')],_0x33cdd4[_0x4782('0x4c')]));_0x24858e[_0x4782('0x4b')][_0x4782('0x68')]=_0x23a939['id'];if(_0x5641f0['query']['filter']){_0x24858e['where']=_[_0x4782('0x4d')](_0x24858e['where'],{'$or':_[_0x4782('0xa3')](_0x24858e['attributes'],function(_0x54d2e1){var _0x378f7e={};_0x378f7e[_0x54d2e1]={'$like':'%'+_0x5641f0['query']['filter']+'%'};return _0x378f7e;})});}_0x24858e=_[_0x4782('0x4d')]({},_0x24858e,_0x5641f0[_0x4782('0x52')]);return db['OpenchannelInteraction']['count']({'where':_0x24858e[_0x4782('0x4b')]})[_0x4782('0x20')](function(_0x29476e){_0xd6a288[_0x4782('0x53')]=_0x29476e;if(_0x5641f0[_0x4782('0x43')][_0x4782('0x54')]){_0x24858e[_0x4782('0x65')]=[{'model':db[_0x4782('0x6e')],'as':_0x4782('0xa8'),'required':![]},{'model':db[_0x4782('0x9c')],'as':'Owner','attributes':['name',_0x4782('0xa9'),_0x4782('0xaa')],'required':![]},{'model':db['Tag'],'as':_0x4782('0xab'),'attributes':['id',_0x4782('0x3b'),_0x4782('0xac')],'where':_0x5641f0[_0x4782('0x43')]['tag']?{'id':_0x5641f0['query'][_0x4782('0xad')]}:undefined,'required':_0x5641f0['query'][_0x4782('0xad')]?!![]:![]}];}return db[_0x4782('0x8c')][_0x4782('0x55')](_0x24858e);})[_0x4782('0x20')](function(_0x2ee421){_0xd6a288[_0x4782('0xae')]=_0x2ee421;return _0xd6a288;});}})[_0x4782('0x20')](respondWithFilteredResult(_0xb99e91,_0x24858e))[_0x4782('0x2b')](handleError(_0xb99e91,null));};exports[_0x4782('0xaf')]=function(_0x35d75d,_0x5cbc86,_0x59371c){return db[_0x4782('0x3f')][_0x4782('0x5c')]({'where':{'id':_0x35d75d[_0x4782('0x57')]['id']}})[_0x4782('0x20')](handleEntityNotFound(_0x5cbc86,null))['then'](function(_0x5bab9a){if(_0x5bab9a){return _0x5bab9a[_0x4782('0xaf')](_0x35d75d[_0x4782('0x5e')][_0x4782('0x6c')],_[_0x4782('0xb0')](_0x35d75d['body'],[_0x4782('0x6c'),'id'])||{})['spread'](function(_0x360c4c){for(var _0x140579=0x0;_0x140579<_0x35d75d[_0x4782('0x5e')][_0x4782('0x6c')]['length'];_0x140579+=0x1){socket[_0x4782('0xb1')](_0x4782('0xb2'),{'UserId':_0x35d75d[_0x4782('0x5e')][_0x4782('0x6c')][_0x140579],'OpenchannelAccountId':_0x35d75d[_0x4782('0x57')]['id']});}return _0x360c4c;});}})[_0x4782('0x20')](respondWithResult(_0x5cbc86,null))[_0x4782('0x2b')](handleError(_0x5cbc86,null));};exports['removeAgents']=function(_0x387603,_0x2c86c0,_0x5ca183){return db[_0x4782('0x3f')]['find']({'where':{'id':_0x387603[_0x4782('0x57')]['id']}})[_0x4782('0x20')](handleEntityNotFound(_0x2c86c0,null))['then'](function(_0x2c4b76){if(_0x2c4b76){return _0x2c4b76[_0x4782('0xb3')](_0x387603[_0x4782('0x43')]['ids'])[_0x4782('0x20')](function(){if(_[_0x4782('0xb4')](_0x387603[_0x4782('0x43')][_0x4782('0x6c')])){for(var _0x2914f2=0x0;_0x2914f2<_0x387603[_0x4782('0x43')]['ids'][_0x4782('0x47')];_0x2914f2+=0x1){socket['emit'](_0x4782('0xb5'),{'UserId':Number(_0x387603['query'][_0x4782('0x6c')][_0x2914f2]),'OpenchannelAccountId':Number(_0x387603[_0x4782('0x57')]['id'])});}}else{socket[_0x4782('0xb1')](_0x4782('0xb5'),{'UserId':Number(_0x387603[_0x4782('0x43')]['ids']),'OpenchannelAccountId':Number(_0x387603[_0x4782('0x57')]['id'])});}});}})[_0x4782('0x20')](respondWithStatusCode(_0x2c86c0,null))[_0x4782('0x2b')](handleError(_0x2c86c0,null));};exports['getAgents']=function(_0x4d0650,_0x18de3d,_0xe86548){var _0x12d94c={};var _0x495a98={};var _0x555a75;var _0xa6d0c7;return db[_0x4782('0x3f')][_0x4782('0x62')]({'where':{'id':_0x4d0650[_0x4782('0x57')]['id']}})['then'](handleEntityNotFound(_0x18de3d,null))[_0x4782('0x20')](function(_0x591515){if(_0x591515){_0x555a75=_0x591515;_0x495a98[_0x4782('0x41')]=_[_0x4782('0x42')](db['User'][_0x4782('0x40')]);_0x495a98[_0x4782('0x43')]=_[_0x4782('0x42')](_0x4d0650[_0x4782('0x43')]);_0x495a98[_0x4782('0x4c')]=_[_0x4782('0x44')](_0x495a98[_0x4782('0x41')],_0x495a98[_0x4782('0x43')]);_0x12d94c[_0x4782('0x45')]=_[_0x4782('0x44')](_0x495a98['model'],qs[_0x4782('0x46')](_0x4d0650[_0x4782('0x43')][_0x4782('0x46')]));_0x12d94c['attributes']=_0x12d94c[_0x4782('0x45')][_0x4782('0x47')]?_0x12d94c['attributes']:_0x495a98[_0x4782('0x41')];_0x12d94c[_0x4782('0x49')]=qs[_0x4782('0x4a')](_0x4d0650[_0x4782('0x43')][_0x4782('0x4a')]);_0x12d94c[_0x4782('0x4b')]=qs[_0x4782('0x4c')](_[_0x4782('0x64')](_0x4d0650[_0x4782('0x43')],_0x495a98[_0x4782('0x4c')]));if(_0x4d0650[_0x4782('0x43')]['filter']){_0x12d94c[_0x4782('0x4b')]=_['merge'](_0x12d94c['where'],{'$or':_[_0x4782('0xa3')](_0x12d94c[_0x4782('0x45')],function(_0x2767e7){var _0x2ce84d={};_0x2ce84d[_0x2767e7]={'$like':'%'+_0x4d0650[_0x4782('0x43')][_0x4782('0x51')]+'%'};return _0x2ce84d;})});}_0x12d94c=_['merge']({},_0x12d94c,_0x4d0650[_0x4782('0x52')]);return _0x555a75[_0x4782('0xb6')](_0x12d94c);}})[_0x4782('0x20')](function(_0x4e5c6a){if(_0x4e5c6a){_0xa6d0c7=_0x4e5c6a[_0x4782('0x47')];if(!_0x4d0650[_0x4782('0x43')]['hasOwnProperty']('nolimit')){_0x12d94c[_0x4782('0x30')]=qs[_0x4782('0x30')](_0x4d0650[_0x4782('0x43')][_0x4782('0x30')]);_0x12d94c['offset']=qs[_0x4782('0x2f')](_0x4d0650[_0x4782('0x43')][_0x4782('0x2f')]);}return _0x555a75['getAgents'](_0x12d94c);}})[_0x4782('0x20')](function(_0x3b3d62){if(_0x3b3d62){return _0x3b3d62?{'count':_0xa6d0c7,'rows':_0x3b3d62}:null;}})[_0x4782('0x20')](respondWithResult(_0x18de3d,null))[_0x4782('0x2b')](handleError(_0x18de3d,null));};exports[_0x4782('0x3c')]=function(_0x396a4e,_0x236511,_0x401028){var _0x43fcdb,_0xfea81a,_0x492393;if(_[_0x4782('0x79')](_0x396a4e['body'][_0x4782('0x5e')])||_0x396a4e[_0x4782('0x5e')][_0x4782('0x5e')]===''){throw new db[(_0x4782('0x77'))][(_0x4782('0x6f'))](_0x4782('0x7a'));}if(_['isNil'](_0x396a4e[_0x4782('0x5e')]['to'])){}_0x43fcdb=_0x396a4e[_0x4782('0x5e')]['to'];return db[_0x4782('0x3f')][_0x4782('0x62')]({'where':{'id':_0x396a4e[_0x4782('0x57')]['id']}})[_0x4782('0x20')](handleEntityNotFound(_0x236511,null))[_0x4782('0x20')](function(_0x2171df){if(_0x2171df){return db[_0x4782('0x3f')][_0x4782('0x5c')]({'where':{'id':_0x2171df['id']},'include':[{'model':db[_0x4782('0x7f')],'as':_0x4782('0x80'),'include':[{'model':db[_0x4782('0x6e')],'as':_0x4782('0x81'),'where':{[_0x2171df[_0x4782('0x7b')]]:_0x43fcdb},'limit':0x1,'order':[[_0x4782('0x72'),'DESC']]}]}]})[_0x4782('0x20')](handleEntityNotFound(_0x236511,null))[_0x4782('0x20')](function(_0x4ac2e4){if(_0x4ac2e4&&_0x4ac2e4['List']){_0xfea81a=_0x4ac2e4[_0x4782('0x36')]({'plain':!![]});if(_0xfea81a['List']&&_0xfea81a[_0x4782('0x80')]['Contacts'][_0x4782('0x47')]){return _0xfea81a[_0x4782('0x80')][_0x4782('0x81')][0x0];}return db[_0x4782('0x6e')][_0x4782('0x58')](_[_0x4782('0x17')](_0x396a4e[_0x4782('0x5e')],{'firstName':_0x43fcdb,[_0x4ac2e4[_0x4782('0x7b')]]:_0x43fcdb,'phone':_0x43fcdb,'ListId':_0xfea81a[_0x4782('0x75')]}));}})[_0x4782('0x20')](handleEntityNotFound(_0x236511,null))[_0x4782('0x20')](function(_0x2a1fba){if(_0x2a1fba){_0x492393=_0x2a1fba;return db[_0x4782('0x8c')][_0x4782('0x5c')]({'where':{'ContactId':_0x492393['id'],'closed':![],'OpenchannelAccountId':_0xfea81a['id']}})[_0x4782('0x20')](function(_0x596177){if(_0x596177){return[_0x596177,![]];}return db[_0x4782('0x8c')]['create']({'UserId':_0x396a4e[_0x4782('0x59')]['id'],'ContactId':_0x492393['id'],'OpenchannelAccountId':_0xfea81a['id'],'lastMsgDirection':_0x4782('0xb7'),'Messages':[_[_0x4782('0x4d')](_0x396a4e[_0x4782('0x5e')],{'read':![],'body':_0x396a4e['body'][_0x4782('0x5e')],'OpenchannelAccountId':_0xfea81a['id'],'UserId':_0x396a4e[_0x4782('0x59')]['id'],'ContactId':_0x492393['id']})]},{'include':[{'model':db[_0x4782('0x99')],'as':_0x4782('0xb8')}]})[_0x4782('0x20')](function(_0x2815f7){return[_0x2815f7,!![]];});});}})[_0x4782('0x8f')](function(_0xa2f6ff,_0x1fe3f2){if(_0x1fe3f2){return _0xa2f6ff;}return db[_0x4782('0x99')][_0x4782('0x58')](_[_0x4782('0x4d')](_0x396a4e[_0x4782('0x5e')],{'read':![],'body':_0x396a4e['body'][_0x4782('0x5e')],'OpenchannelAccountId':_0xfea81a['id'],'OpenchannelInteractionId':_0xa2f6ff['id'],'UserId':_0x396a4e[_0x4782('0x59')]['id'],'ContactId':_0x492393['id']}))[_0x4782('0x20')](function(_0x17b69b){_0xa2f6ff['dataValues'][_0x4782('0xb8')]=[];_0xa2f6ff[_0x4782('0xb9')][_0x4782('0xb8')][_0x4782('0x95')](_0x17b69b[_0x4782('0xb9')]);return _0xa2f6ff;});});}})[_0x4782('0x20')](respondWithResult(_0x236511,null))[_0x4782('0x2b')](handleError(_0x236511,null));};
\ No newline at end of file
index 2f9c2e6..98d1088 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4fdd=['OpenchannelAccount','update','remove','emit','hasOwnProperty','hook','exports','../../mysqldb'];(function(_0x563abb,_0x45249a){var _0x27a9db=function(_0x4cad81){while(--_0x4cad81){_0x563abb['push'](_0x563abb['shift']());}};_0x27a9db(++_0x45249a);}(_0x4fdd,0x17f));var _0xd4fd=function(_0x4565bf,_0x5ad9d6){_0x4565bf=_0x4565bf-0x0;var _0x5610ba=_0x4fdd[_0x4565bf];return _0x5610ba;};'use strict';var EventEmitter=require('events');var OpenchannelAccount=require(_0xd4fd('0x0'))['db'][_0xd4fd('0x1')];var OpenchannelAccountEvents=new EventEmitter();OpenchannelAccountEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0xd4fd('0x2'),'afterDestroy':_0xd4fd('0x3')};function emitEvent(_0x10769b){return function(_0x1fc11c,_0x2f254d,_0x2f2caf){OpenchannelAccountEvents[_0xd4fd('0x4')](_0x10769b+':'+_0x1fc11c['id'],_0x1fc11c);OpenchannelAccountEvents[_0xd4fd('0x4')](_0x10769b,_0x1fc11c);_0x2f2caf(null);};}for(var e in events){if(events[_0xd4fd('0x5')](e)){var event=events[e];OpenchannelAccount[_0xd4fd('0x6')](e,emitEvent(event));}}module[_0xd4fd('0x7')]=OpenchannelAccountEvents;
\ No newline at end of file
+var _0x78e7=['remove','emit','hasOwnProperty','hook','exports','../../mysqldb','OpenchannelAccount','save'];(function(_0x5b09d6,_0x2d9bfc){var _0x40c556=function(_0x1ffc22){while(--_0x1ffc22){_0x5b09d6['push'](_0x5b09d6['shift']());}};_0x40c556(++_0x2d9bfc);}(_0x78e7,0x17d));var _0x778e=function(_0x316611,_0x4bcacb){_0x316611=_0x316611-0x0;var _0x6e396c=_0x78e7[_0x316611];return _0x6e396c;};'use strict';var EventEmitter=require('events');var OpenchannelAccount=require(_0x778e('0x0'))['db'][_0x778e('0x1')];var OpenchannelAccountEvents=new EventEmitter();OpenchannelAccountEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x778e('0x2'),'afterUpdate':'update','afterDestroy':_0x778e('0x3')};function emitEvent(_0x4894ea){return function(_0x45d4ff,_0x1f89ac,_0x5338cd){OpenchannelAccountEvents[_0x778e('0x4')](_0x4894ea+':'+_0x45d4ff['id'],_0x45d4ff);OpenchannelAccountEvents[_0x778e('0x4')](_0x4894ea,_0x45d4ff);_0x5338cd(null);};}for(var e in events){if(events[_0x778e('0x5')](e)){var event=events[e];OpenchannelAccount[_0x778e('0x6')](e,emitEvent(event));}}module[_0x778e('0x7')]=OpenchannelAccountEvents;
\ No newline at end of file
index 19c9781..e8738c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3ab0=['lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','exports','define','OpenchannelAccount','openchannel_accounts'];(function(_0x5f1391,_0x19c132){var _0x50ebe3=function(_0x3d00a3){while(--_0x3d00a3){_0x5f1391['push'](_0x5f1391['shift']());}};_0x50ebe3(++_0x19c132);}(_0x3ab0,0xb6));var _0x03ab=function(_0x292e1e,_0x56466f){_0x292e1e=_0x292e1e-0x0;var _0x56f51b=_0x3ab0[_0x292e1e];return _0x56f51b;};'use strict';var _=require(_0x03ab('0x0'));var util=require(_0x03ab('0x1'));var logger=require(_0x03ab('0x2'))(_0x03ab('0x3'));var moment=require(_0x03ab('0x4'));var BPromise=require(_0x03ab('0x5'));var rp=require(_0x03ab('0x6'));var fs=require('fs');var path=require(_0x03ab('0x7'));var rimraf=require(_0x03ab('0x8'));var config=require(_0x03ab('0x9'));var attributes=require('./openchannelAccount.attributes');module[_0x03ab('0xa')]=function(_0x24e6fb,_0x367129){return _0x24e6fb[_0x03ab('0xb')](_0x03ab('0xc'),attributes,{'tableName':_0x03ab('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xaa46=['../../config/logger','moment','bluebird','request-promise','path','rimraf','../../config/environment','./openchannelAccount.attributes','exports','define','OpenchannelAccount','openchannel_accounts','lodash','util'];(function(_0x19cc92,_0x4df512){var _0x4c88d4=function(_0x40bf46){while(--_0x40bf46){_0x19cc92['push'](_0x19cc92['shift']());}};_0x4c88d4(++_0x4df512);}(_0xaa46,0x1da));var _0x6aa4=function(_0x21cf80,_0x1fb0a1){_0x21cf80=_0x21cf80-0x0;var _0x5c6bed=_0xaa46[_0x21cf80];return _0x5c6bed;};'use strict';var _=require(_0x6aa4('0x0'));var util=require(_0x6aa4('0x1'));var logger=require(_0x6aa4('0x2'))('api');var moment=require(_0x6aa4('0x3'));var BPromise=require(_0x6aa4('0x4'));var rp=require(_0x6aa4('0x5'));var fs=require('fs');var path=require(_0x6aa4('0x6'));var rimraf=require(_0x6aa4('0x7'));var config=require(_0x6aa4('0x8'));var attributes=require(_0x6aa4('0x9'));module[_0x6aa4('0xa')]=function(_0x30c992,_0x2b6614){return _0x30c992[_0x6aa4('0xb')](_0x6aa4('0xc'),attributes,{'tableName':_0x6aa4('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index c0d4add..4ace1bc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe14b=['ioredis','../../config/utils','../../config/environment','jayson/promise','client','http','redis','defaults','./openchannelAccount.socket','register','request','info','OpenchannelAccount,\x20%s,\x20%s','request\x20sent','debug','OpenchannelAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','randomstring'];(function(_0x1d79a1,_0x1c4bac){var _0x5e5ed1=function(_0xd39dd8){while(--_0xd39dd8){_0x1d79a1['push'](_0x1d79a1['shift']());}};_0x5e5ed1(++_0x1c4bac);}(_0xe14b,0x93));var _0xbe14=function(_0x2d74e4,_0x4543c4){_0x2d74e4=_0x2d74e4-0x0;var _0x4868cb=_0xe14b[_0x2d74e4];return _0x4868cb;};'use strict';var _=require(_0xbe14('0x0'));var util=require(_0xbe14('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xbe14('0x2'));var fs=require('fs');var Redis=require(_0xbe14('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xbe14('0x4'));var logger=require('../../config/logger')('rpc');var config=require(_0xbe14('0x5'));var jayson=require(_0xbe14('0x6'));var client=jayson[_0xbe14('0x7')][_0xbe14('0x8')]({'port':0x232a});config[_0xbe14('0x9')]=_[_0xbe14('0xa')](config[_0xbe14('0x9')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0xbe14('0xb'))[_0xbe14('0xc')](socket);function respondWithRpcPromise(_0xd68cd7,_0x90b4f,_0x53c7ea){return new BPromise(function(_0x5b9fc6,_0x113243){return client[_0xbe14('0xd')](_0xd68cd7,_0x53c7ea)['then'](function(_0x254c3b){logger[_0xbe14('0xe')](_0xbe14('0xf'),_0x90b4f,_0xbe14('0x10'));logger[_0xbe14('0x11')](_0xbe14('0x12'),_0x90b4f,_0xbe14('0x10'),JSON[_0xbe14('0x13')](_0x254c3b));if(_0x254c3b[_0xbe14('0x14')]){if(_0x254c3b[_0xbe14('0x14')][_0xbe14('0x15')]===0x1f4){logger[_0xbe14('0x14')](_0xbe14('0xf'),_0x90b4f,_0x254c3b['error']['message']);return _0x113243(_0x254c3b[_0xbe14('0x14')][_0xbe14('0x16')]);}logger[_0xbe14('0x14')](_0xbe14('0xf'),_0x90b4f,_0x254c3b['error'][_0xbe14('0x16')]);return _0x5b9fc6(_0x254c3b[_0xbe14('0x14')][_0xbe14('0x16')]);}else{logger[_0xbe14('0xe')](_0xbe14('0xf'),_0x90b4f,_0xbe14('0x10'));_0x5b9fc6(_0x254c3b[_0xbe14('0x17')]['message']);}})[_0xbe14('0x18')](function(_0x456ca8){logger[_0xbe14('0x14')](_0xbe14('0xf'),_0x90b4f,_0x456ca8);_0x113243(_0x456ca8);});});}
\ No newline at end of file
+var _0x814b=['moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','redis','defaults','localhost','socket.io-emitter','./openchannelAccount.socket','register','request','OpenchannelAccount,\x20%s,\x20%s','request\x20sent','debug','OpenchannelAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','lodash','util'];(function(_0x5db206,_0x2402c3){var _0x241b33=function(_0x43f2cd){while(--_0x43f2cd){_0x5db206['push'](_0x5db206['shift']());}};_0x241b33(++_0x2402c3);}(_0x814b,0x1a2));var _0xb814=function(_0x161ac3,_0x142e49){_0x161ac3=_0x161ac3-0x0;var _0x3bb837=_0x814b[_0x161ac3];return _0x3bb837;};'use strict';var _=require(_0xb814('0x0'));var util=require(_0xb814('0x1'));var moment=require(_0xb814('0x2'));var BPromise=require(_0xb814('0x3'));var rs=require(_0xb814('0x4'));var fs=require('fs');var Redis=require(_0xb814('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xb814('0x6'));var logger=require(_0xb814('0x7'))(_0xb814('0x8'));var config=require(_0xb814('0x9'));var jayson=require(_0xb814('0xa'));var client=jayson[_0xb814('0xb')]['http']({'port':0x232a});config[_0xb814('0xc')]=_[_0xb814('0xd')](config['redis'],{'host':_0xb814('0xe'),'port':0x18eb});var socket=require(_0xb814('0xf'))(new Redis(config[_0xb814('0xc')]));require(_0xb814('0x10'))[_0xb814('0x11')](socket);function respondWithRpcPromise(_0x21d4a5,_0x1086f8,_0x19aad8){return new BPromise(function(_0x207dbc,_0x3450f2){return client[_0xb814('0x12')](_0x21d4a5,_0x19aad8)['then'](function(_0x43dfe6){logger['info'](_0xb814('0x13'),_0x1086f8,_0xb814('0x14'));logger[_0xb814('0x15')](_0xb814('0x16'),_0x1086f8,_0xb814('0x14'),JSON[_0xb814('0x17')](_0x43dfe6));if(_0x43dfe6[_0xb814('0x18')]){if(_0x43dfe6[_0xb814('0x18')][_0xb814('0x19')]===0x1f4){logger[_0xb814('0x18')](_0xb814('0x13'),_0x1086f8,_0x43dfe6[_0xb814('0x18')][_0xb814('0x1a')]);return _0x3450f2(_0x43dfe6[_0xb814('0x18')][_0xb814('0x1a')]);}logger[_0xb814('0x18')](_0xb814('0x13'),_0x1086f8,_0x43dfe6[_0xb814('0x18')][_0xb814('0x1a')]);return _0x207dbc(_0x43dfe6[_0xb814('0x18')][_0xb814('0x1a')]);}else{logger['info'](_0xb814('0x13'),_0x1086f8,'request\x20sent');_0x207dbc(_0x43dfe6[_0xb814('0x1b')][_0xb814('0x1a')]);}})['catch'](function(_0x4b55a7){logger['error'](_0xb814('0x13'),_0x1086f8,_0x4b55a7);_0x3450f2(_0x4b55a7);});});}
\ No newline at end of file
index c63364d..2da5ea1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5e62=['register','length','openchannelAccount:','./openchannelAccount.events','save','remove','update','emit','removeListener'];(function(_0x144311,_0x144892){var _0x17f0be=function(_0x256dc7){while(--_0x256dc7){_0x144311['push'](_0x144311['shift']());}};_0x17f0be(++_0x144892);}(_0x5e62,0xc0));var _0x25e6=function(_0x1d1779,_0x284147){_0x1d1779=_0x1d1779-0x0;var _0x2377e9=_0x5e62[_0x1d1779];return _0x2377e9;};'use strict';var OpenchannelAccountEvents=require(_0x25e6('0x0'));var events=[_0x25e6('0x1'),_0x25e6('0x2'),_0x25e6('0x3')];function createListener(_0x48f673,_0x4fba20){return function(_0x54e0a2){_0x4fba20[_0x25e6('0x4')](_0x48f673,_0x54e0a2);};}function removeListener(_0x5d3c00,_0x30a80f){return function(){OpenchannelAccountEvents[_0x25e6('0x5')](_0x5d3c00,_0x30a80f);};}exports[_0x25e6('0x6')]=function(_0x100f90){for(var _0x5cce7a=0x0,_0x4bcf48=events[_0x25e6('0x7')];_0x5cce7a<_0x4bcf48;_0x5cce7a++){var _0x54a19e=events[_0x5cce7a];var _0x586b62=createListener(_0x25e6('0x8')+_0x54a19e,_0x100f90);OpenchannelAccountEvents['on'](_0x54a19e,_0x586b62);}};
\ No newline at end of file
+var _0x71ac=['length','openchannelAccount:','./openchannelAccount.events','removeListener','register'];(function(_0x42bdad,_0x12836c){var _0x122626=function(_0x2eb29c){while(--_0x2eb29c){_0x42bdad['push'](_0x42bdad['shift']());}};_0x122626(++_0x12836c);}(_0x71ac,0x151));var _0xc71a=function(_0x11a220,_0x4e470a){_0x11a220=_0x11a220-0x0;var _0x20d8fe=_0x71ac[_0x11a220];return _0x20d8fe;};'use strict';var OpenchannelAccountEvents=require(_0xc71a('0x0'));var events=['save','remove','update'];function createListener(_0x5309a9,_0x5612d7){return function(_0x351ce7){_0x5612d7['emit'](_0x5309a9,_0x351ce7);};}function removeListener(_0x5e29a8,_0x33e2cc){return function(){OpenchannelAccountEvents[_0xc71a('0x1')](_0x5e29a8,_0x33e2cc);};}exports[_0xc71a('0x2')]=function(_0x3d9d36){for(var _0x12f2cf=0x0,_0xa58ddc=events[_0xc71a('0x3')];_0x12f2cf<_0xa58ddc;_0x12f2cf++){var _0x455f53=events[_0x12f2cf];var _0x469336=createListener(_0xc71a('0x4')+_0x455f53,_0x3d9d36);OpenchannelAccountEvents['on'](_0x455f53,_0x469336);}};
\ No newline at end of file
index b359860..79bc454 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xba01=['util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./openchannelApplication.controller','get','index','/:id','isAuthenticated','show','create','update','delete','destroy','exports','multer'];(function(_0x127f9e,_0x4512f6){var _0x1131db=function(_0x38ac11){while(--_0x38ac11){_0x127f9e['push'](_0x127f9e['shift']());}};_0x1131db(++_0x4512f6);}(_0xba01,0x109));var _0x1ba0=function(_0x7618c3,_0x3330d8){_0x7618c3=_0x7618c3-0x0;var _0x10d8dd=_0xba01[_0x7618c3];return _0x10d8dd;};'use strict';var multer=require(_0x1ba0('0x0'));var util=require(_0x1ba0('0x1'));var path=require(_0x1ba0('0x2'));var timeout=require(_0x1ba0('0x3'));var express=require(_0x1ba0('0x4'));var router=express[_0x1ba0('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x1ba0('0x6'));var config=require(_0x1ba0('0x7'));var controller=require(_0x1ba0('0x8'));router[_0x1ba0('0x9')]('/',auth['isAuthenticated'](),controller[_0x1ba0('0xa')]);router[_0x1ba0('0x9')](_0x1ba0('0xb'),auth[_0x1ba0('0xc')](),controller[_0x1ba0('0xd')]);router['post']('/',auth[_0x1ba0('0xc')](),controller[_0x1ba0('0xe')]);router['put'](_0x1ba0('0xb'),auth[_0x1ba0('0xc')](),controller[_0x1ba0('0xf')]);router[_0x1ba0('0x10')]('/:id',auth[_0x1ba0('0xc')](),controller[_0x1ba0('0x11')]);module[_0x1ba0('0x12')]=router;
\ No newline at end of file
+var _0xe67d=['destroy','exports','util','connect-timeout','../../components/auth/service','../../components/interaction/service','./openchannelApplication.controller','get','isAuthenticated','show','post','put','/:id','update','delete'];(function(_0x4cc20c,_0x356acd){var _0x2700cb=function(_0x22ff6b){while(--_0x22ff6b){_0x4cc20c['push'](_0x4cc20c['shift']());}};_0x2700cb(++_0x356acd);}(_0xe67d,0x179));var _0xde67=function(_0x7d6eca,_0x59d54a){_0x7d6eca=_0x7d6eca-0x0;var _0x128263=_0xe67d[_0x7d6eca];return _0x128263;};'use strict';var multer=require('multer');var util=require(_0xde67('0x0'));var path=require('path');var timeout=require(_0xde67('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0xde67('0x2'));var interaction=require(_0xde67('0x3'));var config=require('../../config/environment');var controller=require(_0xde67('0x4'));router[_0xde67('0x5')]('/',auth['isAuthenticated'](),controller['index']);router[_0xde67('0x5')]('/:id',auth[_0xde67('0x6')](),controller[_0xde67('0x7')]);router[_0xde67('0x8')]('/',auth[_0xde67('0x6')](),controller['create']);router[_0xde67('0x9')](_0xde67('0xa'),auth['isAuthenticated'](),controller[_0xde67('0xb')]);router[_0xde67('0xc')](_0xde67('0xa'),auth[_0xde67('0x6')](),controller[_0xde67('0xd')]);module[_0xde67('0xe')]=router;
\ No newline at end of file
index dbfae8e..e22ec0d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x199c=['noop','TEXT','STRING','sequelize','exports','INTEGER'];(function(_0x374d39,_0x4328c4){var _0x50c9ad=function(_0x3f3b19){while(--_0x3f3b19){_0x374d39['push'](_0x374d39['shift']());}};_0x50c9ad(++_0x4328c4);}(_0x199c,0x7b));var _0xc199=function(_0x205476,_0xa57f7c){_0x205476=_0x205476-0x0;var _0x1237da=_0x199c[_0x205476];return _0x1237da;};'use strict';var Sequelize=require(_0xc199('0x0'));module[_0xc199('0x1')]={'priority':{'type':Sequelize[_0xc199('0x2')],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xc199('0x3')},'appdata':{'type':Sequelize[_0xc199('0x4')]()},'description':{'type':Sequelize[_0xc199('0x5')]},'interval':{'type':Sequelize['STRING'],'defaultValue':'*,*,*,*'}};
\ No newline at end of file
+var _0x6f75=['*,*,*,*','sequelize','exports','INTEGER','STRING','noop','TEXT'];(function(_0x5a11ac,_0x170eae){var _0x53c416=function(_0x49cc95){while(--_0x49cc95){_0x5a11ac['push'](_0x5a11ac['shift']());}};_0x53c416(++_0x170eae);}(_0x6f75,0x71));var _0x56f7=function(_0x86e678,_0x11bdd8){_0x86e678=_0x86e678-0x0;var _0xc34f63=_0x6f75[_0x86e678];return _0xc34f63;};'use strict';var Sequelize=require(_0x56f7('0x0'));module[_0x56f7('0x1')]={'priority':{'type':Sequelize[_0x56f7('0x2')],'allowNull':![]},'app':{'type':Sequelize[_0x56f7('0x3')],'allowNull':![],'defaultValue':_0x56f7('0x4')},'appdata':{'type':Sequelize[_0x56f7('0x5')]()},'description':{'type':Sequelize[_0x56f7('0x3')]},'interval':{'type':Sequelize['STRING'],'defaultValue':_0x56f7('0x6')}};
\ No newline at end of file
index 8280135..0658c98 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5694=['stack','name','send','OpenchannelApplication','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','order','sort','filter','merge','type','key','field','options','where','findAll','catch','show','params','rawAttributes','length','includeAll','include','find','create','body','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','Content-Range','apply','reject','save','update','then','destroy','sendStatus','error'];(function(_0x452f32,_0x4523a6){var _0xe6ceab=function(_0xb28b90){while(--_0xb28b90){_0x452f32['push'](_0x452f32['shift']());}};_0xe6ceab(++_0x4523a6);}(_0x5694,0x1ca));var _0x4569=function(_0x27da19,_0x13e778){_0x27da19=_0x27da19-0x0;var _0x1be481=_0x5694[_0x27da19];return _0x1be481;};'use strict';var pdf=require(_0x4569('0x0'));var emlformat=require(_0x4569('0x1'));var rimraf=require(_0x4569('0x2'));var zipdir=require(_0x4569('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x4569('0x4'));var moment=require(_0x4569('0x5'));var BPromise=require(_0x4569('0x6'));var Mustache=require('mustache');var util=require(_0x4569('0x7'));var path=require('path');var sox=require(_0x4569('0x8'));var csv=require(_0x4569('0x9'));var ejs=require(_0x4569('0xa'));var fs=require('fs');var _=require(_0x4569('0xb'));var squel=require(_0x4569('0xc'));var crypto=require(_0x4569('0xd'));var jsforce=require(_0x4569('0xe'));var deskjs=require(_0x4569('0xf'));var toCsv=require(_0x4569('0x9'));var querystring=require(_0x4569('0x10'));var Papa=require('papaparse');var Redis=require(_0x4569('0x11'));var authService=require(_0x4569('0x12'));var qs=require(_0x4569('0x13'));var hardwareService=require(_0x4569('0x14'));var logger=require('../../config/logger')('api');var utils=require(_0x4569('0x15'));var config=require(_0x4569('0x16'));var db=require(_0x4569('0x17'))['db'];function respondWithStatusCode(_0x47c5a6,_0x39ada9){_0x39ada9=_0x39ada9||0xcc;return function(_0xa19a12){if(_0xa19a12){return _0x47c5a6['sendStatus'](_0x39ada9);}return _0x47c5a6[_0x4569('0x18')](_0x39ada9)[_0x4569('0x19')]();};}function respondWithResult(_0x33793e,_0x1f54e7){_0x1f54e7=_0x1f54e7||0xc8;return function(_0x502168){if(_0x502168){return _0x33793e[_0x4569('0x18')](_0x1f54e7)[_0x4569('0x1a')](_0x502168);}};}function respondWithFilteredResult(_0x12750a,_0xaf7037){return function(_0x510d57){if(_0x510d57){var _0x2c6011=_0x510d57[_0x4569('0x1b')],_0x53cfeb=_0xaf7037['offset'],_0xc94f95=_0xaf7037[_0x4569('0x1c')]+_0xaf7037[_0x4569('0x1d')],_0x1c4766;if(_0xc94f95>=_0x2c6011){_0xc94f95=_0x2c6011;_0x1c4766=0xc8;}else{_0x1c4766=0xce;}_0x12750a[_0x4569('0x18')](_0x1c4766);return _0x12750a['set'](_0x4569('0x1e'),_0x53cfeb+'-'+_0xc94f95+'/'+_0x2c6011)[_0x4569('0x1a')](_0x510d57);}return null;};}function patchUpdates(_0x366f1c){return function(_0x5db7ba){try{jsonpatch[_0x4569('0x1f')](_0x5db7ba,_0x366f1c,!![]);}catch(_0x1e31a2){return BPromise[_0x4569('0x20')](_0x1e31a2);}return _0x5db7ba[_0x4569('0x21')]();};}function saveUpdates(_0xe541e6,_0x5e649f){return function(_0x1b8a00){if(_0x1b8a00){return _0x1b8a00[_0x4569('0x22')](_0xe541e6)[_0x4569('0x23')](function(_0x2df1f1){return _0x2df1f1;});}return null;};}function removeEntity(_0x58b7b6,_0x376c8f){return function(_0x5618f0){if(_0x5618f0){return _0x5618f0[_0x4569('0x24')]()[_0x4569('0x23')](function(){_0x58b7b6[_0x4569('0x18')](0xcc)[_0x4569('0x19')]();});}};}function handleEntityNotFound(_0x3100fd,_0x3a9166){return function(_0x12eab4){if(!_0x12eab4){_0x3100fd[_0x4569('0x25')](0x194);}return _0x12eab4;};}function handleError(_0x409e3e,_0x6a139f){_0x6a139f=_0x6a139f||0x1f4;return function(_0x282c12){logger[_0x4569('0x26')](_0x282c12[_0x4569('0x27')]);if(_0x282c12['name']){delete _0x282c12[_0x4569('0x28')];}_0x409e3e[_0x4569('0x18')](_0x6a139f)[_0x4569('0x29')](_0x282c12);};}exports['index']=function(_0x510df6,_0x85c8d3){var _0x3b3af9={},_0x55821b={},_0x37a210={'count':0x0,'rows':[]};var _0x50200b=db[_0x4569('0x2a')]['rawAttributes'];_0x55821b[_0x4569('0x2b')]=_[_0x4569('0x2c')](_0x50200b);_0x55821b[_0x4569('0x2d')]=_[_0x4569('0x2c')](_0x510df6[_0x4569('0x2d')]);_0x55821b[_0x4569('0x2e')]=_[_0x4569('0x2f')](_0x55821b['model'],_0x55821b[_0x4569('0x2d')]);_0x3b3af9[_0x4569('0x30')]=_[_0x4569('0x2f')](_0x55821b[_0x4569('0x2b')],qs[_0x4569('0x31')](_0x510df6[_0x4569('0x2d')]['fields']));_0x3b3af9[_0x4569('0x30')]=_0x3b3af9['attributes']['length']?_0x3b3af9[_0x4569('0x30')]:_0x55821b['model'];if(!_0x510df6[_0x4569('0x2d')][_0x4569('0x32')]('nolimit')){_0x3b3af9[_0x4569('0x1d')]=qs[_0x4569('0x1d')](_0x510df6[_0x4569('0x2d')][_0x4569('0x1d')]);_0x3b3af9['offset']=qs[_0x4569('0x1c')](_0x510df6['query'][_0x4569('0x1c')]);}_0x3b3af9[_0x4569('0x33')]=qs[_0x4569('0x34')](_0x510df6[_0x4569('0x2d')][_0x4569('0x34')]);_0x3b3af9['where']=qs[_0x4569('0x2e')](_['pick'](_0x510df6['query'],_0x55821b['filters']));if(_0x510df6[_0x4569('0x2d')][_0x4569('0x35')]){_0x3b3af9['where']=_[_0x4569('0x36')](_0x3b3af9['where'],{'$or':_['map'](_0x50200b,function(_0x256eb7){if(_0x256eb7[_0x4569('0x37')][_0x4569('0x38')]!=='VIRTUAL'){var _0x2535d4={};_0x2535d4[_0x256eb7[_0x4569('0x39')]]={'$like':'%'+_0x510df6[_0x4569('0x2d')][_0x4569('0x35')]+'%'};return _0x2535d4;}})});}_0x3b3af9=_[_0x4569('0x36')]({},_0x3b3af9,_0x510df6[_0x4569('0x3a')]);var _0x4a54f0={'where':_0x3b3af9[_0x4569('0x3b')]};return db[_0x4569('0x2a')][_0x4569('0x1b')](_0x4a54f0)[_0x4569('0x23')](function(_0x5c7fd5){_0x37a210[_0x4569('0x1b')]=_0x5c7fd5;if(_0x510df6['query']['includeAll']){_0x3b3af9['include']=[{'all':!![]}];}return db[_0x4569('0x2a')][_0x4569('0x3c')](_0x3b3af9);})[_0x4569('0x23')](function(_0x2a8f95){_0x37a210['rows']=_0x2a8f95;return _0x37a210;})[_0x4569('0x23')](respondWithFilteredResult(_0x85c8d3,_0x3b3af9))[_0x4569('0x3d')](handleError(_0x85c8d3,null));};exports[_0x4569('0x3e')]=function(_0x4b73b0,_0x5161e4){var _0x43e9de={'raw':!![],'where':{'id':_0x4b73b0[_0x4569('0x3f')]['id']}},_0x4ca5ae={};_0x4ca5ae[_0x4569('0x2b')]=_[_0x4569('0x2c')](db[_0x4569('0x2a')][_0x4569('0x40')]);_0x4ca5ae[_0x4569('0x2d')]=_[_0x4569('0x2c')](_0x4b73b0[_0x4569('0x2d')]);_0x4ca5ae[_0x4569('0x2e')]=_[_0x4569('0x2f')](_0x4ca5ae['model'],_0x4ca5ae[_0x4569('0x2d')]);_0x43e9de[_0x4569('0x30')]=_[_0x4569('0x2f')](_0x4ca5ae[_0x4569('0x2b')],qs['fields'](_0x4b73b0[_0x4569('0x2d')][_0x4569('0x31')]));_0x43e9de[_0x4569('0x30')]=_0x43e9de['attributes'][_0x4569('0x41')]?_0x43e9de[_0x4569('0x30')]:_0x4ca5ae[_0x4569('0x2b')];if(_0x4b73b0[_0x4569('0x2d')][_0x4569('0x42')]){_0x43e9de[_0x4569('0x43')]=[{'all':!![]}];}_0x43e9de=_[_0x4569('0x36')]({},_0x43e9de,_0x4b73b0[_0x4569('0x3a')]);return db[_0x4569('0x2a')][_0x4569('0x44')](_0x43e9de)[_0x4569('0x23')](handleEntityNotFound(_0x5161e4,null))['then'](respondWithResult(_0x5161e4,null))[_0x4569('0x3d')](handleError(_0x5161e4,null));};exports[_0x4569('0x45')]=function(_0xb21a51,_0x19a645){return db[_0x4569('0x2a')][_0x4569('0x45')](_0xb21a51[_0x4569('0x46')],{})[_0x4569('0x23')](respondWithResult(_0x19a645,0xc9))['catch'](handleError(_0x19a645,null));};exports[_0x4569('0x22')]=function(_0x2f469f,_0x2cc031){if(_0x2f469f[_0x4569('0x46')]['id']){delete _0x2f469f[_0x4569('0x46')]['id'];}return db[_0x4569('0x2a')]['find']({'where':{'id':_0x2f469f[_0x4569('0x3f')]['id']}})[_0x4569('0x23')](handleEntityNotFound(_0x2cc031,null))[_0x4569('0x23')](saveUpdates(_0x2f469f[_0x4569('0x46')],null))['then'](respondWithResult(_0x2cc031,null))['catch'](handleError(_0x2cc031,null));};exports[_0x4569('0x24')]=function(_0x1ef032,_0x4639cd){return db[_0x4569('0x2a')]['find']({'where':{'id':_0x1ef032[_0x4569('0x3f')]['id']}})[_0x4569('0x23')](handleEntityNotFound(_0x4639cd,null))[_0x4569('0x23')](removeEntity(_0x4639cd,null))['catch'](handleError(_0x4639cd,null));};
\ No newline at end of file
+var _0x9491=['intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','key','VIRTUAL','includeAll','include','findAll','rows','params','keys','rawAttributes','options','find','catch','create','body','update','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','status','count','offset','limit','set','Content-Range','json','apply','reject','save','then','destroy','end','sendStatus','error','stack','name','send','index','OpenchannelApplication','query','filters'];(function(_0x3728c8,_0x22f76f){var _0x2ec7f0=function(_0x316e2b){while(--_0x316e2b){_0x3728c8['push'](_0x3728c8['shift']());}};_0x2ec7f0(++_0x22f76f);}(_0x9491,0xb6));var _0x1949=function(_0xc360dc,_0x2974b5){_0xc360dc=_0xc360dc-0x0;var _0x1506cc=_0x9491[_0xc360dc];return _0x1506cc;};'use strict';var pdf=require(_0x1949('0x0'));var emlformat=require(_0x1949('0x1'));var rimraf=require(_0x1949('0x2'));var zipdir=require(_0x1949('0x3'));var jsonpatch=require(_0x1949('0x4'));var rp=require(_0x1949('0x5'));var moment=require(_0x1949('0x6'));var BPromise=require(_0x1949('0x7'));var Mustache=require(_0x1949('0x8'));var util=require(_0x1949('0x9'));var path=require('path');var sox=require(_0x1949('0xa'));var csv=require('to-csv');var ejs=require(_0x1949('0xb'));var fs=require('fs');var _=require(_0x1949('0xc'));var squel=require('squel');var crypto=require(_0x1949('0xd'));var jsforce=require(_0x1949('0xe'));var deskjs=require(_0x1949('0xf'));var toCsv=require(_0x1949('0x10'));var querystring=require(_0x1949('0x11'));var Papa=require(_0x1949('0x12'));var Redis=require(_0x1949('0x13'));var authService=require(_0x1949('0x14'));var qs=require(_0x1949('0x15'));var hardwareService=require(_0x1949('0x16'));var logger=require(_0x1949('0x17'))('api');var utils=require(_0x1949('0x18'));var config=require(_0x1949('0x19'));var db=require(_0x1949('0x1a'))['db'];function respondWithStatusCode(_0x1cfff9,_0xa02415){_0xa02415=_0xa02415||0xcc;return function(_0x6d5828){if(_0x6d5828){return _0x1cfff9['sendStatus'](_0xa02415);}return _0x1cfff9[_0x1949('0x1b')](_0xa02415)['end']();};}function respondWithResult(_0x574713,_0x1716fe){_0x1716fe=_0x1716fe||0xc8;return function(_0x2b374d){if(_0x2b374d){return _0x574713[_0x1949('0x1b')](_0x1716fe)['json'](_0x2b374d);}};}function respondWithFilteredResult(_0x2726f7,_0x421e52){return function(_0xb65a56){if(_0xb65a56){var _0x5356ae=_0xb65a56[_0x1949('0x1c')],_0x55784f=_0x421e52['offset'],_0x2de909=_0x421e52[_0x1949('0x1d')]+_0x421e52[_0x1949('0x1e')],_0x376090;if(_0x2de909>=_0x5356ae){_0x2de909=_0x5356ae;_0x376090=0xc8;}else{_0x376090=0xce;}_0x2726f7['status'](_0x376090);return _0x2726f7[_0x1949('0x1f')](_0x1949('0x20'),_0x55784f+'-'+_0x2de909+'/'+_0x5356ae)[_0x1949('0x21')](_0xb65a56);}return null;};}function patchUpdates(_0x705c90){return function(_0x32b91f){try{jsonpatch[_0x1949('0x22')](_0x32b91f,_0x705c90,!![]);}catch(_0x3d0d8f){return BPromise[_0x1949('0x23')](_0x3d0d8f);}return _0x32b91f[_0x1949('0x24')]();};}function saveUpdates(_0x5702fc,_0x1e0478){return function(_0x50e662){if(_0x50e662){return _0x50e662['update'](_0x5702fc)[_0x1949('0x25')](function(_0x4a3a9d){return _0x4a3a9d;});}return null;};}function removeEntity(_0x121b44,_0x2b6ae0){return function(_0x5d58b7){if(_0x5d58b7){return _0x5d58b7[_0x1949('0x26')]()['then'](function(){_0x121b44[_0x1949('0x1b')](0xcc)[_0x1949('0x27')]();});}};}function handleEntityNotFound(_0x109c00,_0x1314ca){return function(_0x4d4d13){if(!_0x4d4d13){_0x109c00[_0x1949('0x28')](0x194);}return _0x4d4d13;};}function handleError(_0x58e225,_0x4035cc){_0x4035cc=_0x4035cc||0x1f4;return function(_0x5ae4f3){logger[_0x1949('0x29')](_0x5ae4f3[_0x1949('0x2a')]);if(_0x5ae4f3['name']){delete _0x5ae4f3[_0x1949('0x2b')];}_0x58e225['status'](_0x4035cc)[_0x1949('0x2c')](_0x5ae4f3);};}exports[_0x1949('0x2d')]=function(_0x34ac62,_0x26257e){var _0x54495e={},_0x4c6557={},_0xd585c2={'count':0x0,'rows':[]};var _0x25497f=db[_0x1949('0x2e')]['rawAttributes'];_0x4c6557['model']=_['keys'](_0x25497f);_0x4c6557[_0x1949('0x2f')]=_['keys'](_0x34ac62['query']);_0x4c6557[_0x1949('0x30')]=_[_0x1949('0x31')](_0x4c6557[_0x1949('0x32')],_0x4c6557[_0x1949('0x2f')]);_0x54495e[_0x1949('0x33')]=_[_0x1949('0x31')](_0x4c6557[_0x1949('0x32')],qs[_0x1949('0x34')](_0x34ac62['query'][_0x1949('0x34')]));_0x54495e['attributes']=_0x54495e[_0x1949('0x33')][_0x1949('0x35')]?_0x54495e['attributes']:_0x4c6557[_0x1949('0x32')];if(!_0x34ac62[_0x1949('0x2f')][_0x1949('0x36')](_0x1949('0x37'))){_0x54495e[_0x1949('0x1e')]=qs[_0x1949('0x1e')](_0x34ac62[_0x1949('0x2f')][_0x1949('0x1e')]);_0x54495e['offset']=qs[_0x1949('0x1d')](_0x34ac62['query']['offset']);}_0x54495e[_0x1949('0x38')]=qs[_0x1949('0x39')](_0x34ac62[_0x1949('0x2f')][_0x1949('0x39')]);_0x54495e[_0x1949('0x3a')]=qs[_0x1949('0x30')](_[_0x1949('0x3b')](_0x34ac62[_0x1949('0x2f')],_0x4c6557[_0x1949('0x30')]));if(_0x34ac62[_0x1949('0x2f')][_0x1949('0x3c')]){_0x54495e[_0x1949('0x3a')]=_[_0x1949('0x3d')](_0x54495e[_0x1949('0x3a')],{'$or':_['map'](_0x25497f,function(_0x901373){if(_0x901373['type'][_0x1949('0x3e')]!==_0x1949('0x3f')){var _0x23f956={};_0x23f956[_0x901373['field']]={'$like':'%'+_0x34ac62[_0x1949('0x2f')][_0x1949('0x3c')]+'%'};return _0x23f956;}})});}_0x54495e=_['merge']({},_0x54495e,_0x34ac62['options']);var _0x1a0d67={'where':_0x54495e[_0x1949('0x3a')]};return db[_0x1949('0x2e')][_0x1949('0x1c')](_0x1a0d67)[_0x1949('0x25')](function(_0x1c777a){_0xd585c2[_0x1949('0x1c')]=_0x1c777a;if(_0x34ac62[_0x1949('0x2f')][_0x1949('0x40')]){_0x54495e[_0x1949('0x41')]=[{'all':!![]}];}return db[_0x1949('0x2e')][_0x1949('0x42')](_0x54495e);})[_0x1949('0x25')](function(_0x4242d1){_0xd585c2[_0x1949('0x43')]=_0x4242d1;return _0xd585c2;})[_0x1949('0x25')](respondWithFilteredResult(_0x26257e,_0x54495e))['catch'](handleError(_0x26257e,null));};exports['show']=function(_0x1f524d,_0x4573ef){var _0xd21c26={'raw':!![],'where':{'id':_0x1f524d[_0x1949('0x44')]['id']}},_0x2ac1e9={};_0x2ac1e9[_0x1949('0x32')]=_[_0x1949('0x45')](db[_0x1949('0x2e')][_0x1949('0x46')]);_0x2ac1e9['query']=_['keys'](_0x1f524d['query']);_0x2ac1e9[_0x1949('0x30')]=_[_0x1949('0x31')](_0x2ac1e9[_0x1949('0x32')],_0x2ac1e9[_0x1949('0x2f')]);_0xd21c26[_0x1949('0x33')]=_[_0x1949('0x31')](_0x2ac1e9[_0x1949('0x32')],qs[_0x1949('0x34')](_0x1f524d[_0x1949('0x2f')]['fields']));_0xd21c26[_0x1949('0x33')]=_0xd21c26['attributes'][_0x1949('0x35')]?_0xd21c26['attributes']:_0x2ac1e9['model'];if(_0x1f524d[_0x1949('0x2f')][_0x1949('0x40')]){_0xd21c26[_0x1949('0x41')]=[{'all':!![]}];}_0xd21c26=_['merge']({},_0xd21c26,_0x1f524d[_0x1949('0x47')]);return db[_0x1949('0x2e')][_0x1949('0x48')](_0xd21c26)['then'](handleEntityNotFound(_0x4573ef,null))['then'](respondWithResult(_0x4573ef,null))[_0x1949('0x49')](handleError(_0x4573ef,null));};exports['create']=function(_0x57d01d,_0x46767e){return db[_0x1949('0x2e')][_0x1949('0x4a')](_0x57d01d[_0x1949('0x4b')],{})['then'](respondWithResult(_0x46767e,0xc9))['catch'](handleError(_0x46767e,null));};exports[_0x1949('0x4c')]=function(_0x517862,_0x2e6325){if(_0x517862['body']['id']){delete _0x517862['body']['id'];}return db[_0x1949('0x2e')][_0x1949('0x48')]({'where':{'id':_0x517862[_0x1949('0x44')]['id']}})['then'](handleEntityNotFound(_0x2e6325,null))['then'](saveUpdates(_0x517862[_0x1949('0x4b')],null))[_0x1949('0x25')](respondWithResult(_0x2e6325,null))['catch'](handleError(_0x2e6325,null));};exports['destroy']=function(_0x141d90,_0x3e9b03){return db[_0x1949('0x2e')][_0x1949('0x48')]({'where':{'id':_0x141d90[_0x1949('0x44')]['id']}})[_0x1949('0x25')](handleEntityNotFound(_0x3e9b03,null))[_0x1949('0x25')](removeEntity(_0x3e9b03,null))[_0x1949('0x49')](handleError(_0x3e9b03,null));};
\ No newline at end of file
index a636f68..ce9fde1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd19f=['rimraf','../../config/environment','./openchannelApplication.attributes','exports','define','OpenchannelApplication','openchannel_applications','utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path'];(function(_0x38cf5b,_0x798a80){var _0x22f4b0=function(_0x1597c3){while(--_0x1597c3){_0x38cf5b['push'](_0x38cf5b['shift']());}};_0x22f4b0(++_0x798a80);}(_0xd19f,0x16e));var _0xfd19=function(_0x1c7889,_0x24cd26){_0x1c7889=_0x1c7889-0x0;var _0x2f14e5=_0xd19f[_0x1c7889];return _0x2f14e5;};'use strict';var _=require(_0xfd19('0x0'));var util=require(_0xfd19('0x1'));var logger=require(_0xfd19('0x2'))(_0xfd19('0x3'));var moment=require(_0xfd19('0x4'));var BPromise=require(_0xfd19('0x5'));var rp=require(_0xfd19('0x6'));var fs=require('fs');var path=require(_0xfd19('0x7'));var rimraf=require(_0xfd19('0x8'));var config=require(_0xfd19('0x9'));var attributes=require(_0xfd19('0xa'));module[_0xfd19('0xb')]=function(_0x521c1d,_0x6652e2){return _0x521c1d[_0xfd19('0xc')](_0xfd19('0xd'),attributes,{'tableName':_0xfd19('0xe'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0xfd19('0xf'),'collate':_0xfd19('0x10')});};
\ No newline at end of file
+var _0xa25b=['request-promise','path','rimraf','./openchannelApplication.attributes','exports','define','OpenchannelApplication','openchannel_applications','lodash','util','api','bluebird'];(function(_0x36bbbb,_0x3f6709){var _0x3ca0eb=function(_0x299763){while(--_0x299763){_0x36bbbb['push'](_0x36bbbb['shift']());}};_0x3ca0eb(++_0x3f6709);}(_0xa25b,0x170));var _0xba25=function(_0x443eaa,_0xa01741){_0x443eaa=_0x443eaa-0x0;var _0x3aade7=_0xa25b[_0x443eaa];return _0x3aade7;};'use strict';var _=require(_0xba25('0x0'));var util=require(_0xba25('0x1'));var logger=require('../../config/logger')(_0xba25('0x2'));var moment=require('moment');var BPromise=require(_0xba25('0x3'));var rp=require(_0xba25('0x4'));var fs=require('fs');var path=require(_0xba25('0x5'));var rimraf=require(_0xba25('0x6'));var config=require('../../config/environment');var attributes=require(_0xba25('0x7'));module[_0xba25('0x8')]=function(_0x55b5a7,_0xa2c83b){return _0x55b5a7[_0xba25('0x9')](_0xba25('0xa'),attributes,{'tableName':_0xba25('0xb'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':'utf8mb4','collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index f872746..f242436 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x089d=['debug','stringify','error','message','catch','UpdateOpenchannelApplication','OpenchannelApplication','update','body','options','raw','attributes','util','bluebird','randomstring','../../config/logger','../../config/environment','jayson/promise','http','then','info','OpenchannelApplication,\x20%s,\x20%s','request\x20sent'];(function(_0x31bbcd,_0x482f75){var _0x512490=function(_0x39126a){while(--_0x39126a){_0x31bbcd['push'](_0x31bbcd['shift']());}};_0x512490(++_0x482f75);}(_0x089d,0x137));var _0xd089=function(_0x6cf19c,_0x2f3f02){_0x6cf19c=_0x6cf19c-0x0;var _0xce14f3=_0x089d[_0x6cf19c];return _0xce14f3;};'use strict';var _=require('lodash');var util=require(_0xd089('0x0'));var moment=require('moment');var BPromise=require(_0xd089('0x1'));var rs=require(_0xd089('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xd089('0x3'))('rpc');var config=require(_0xd089('0x4'));var jayson=require(_0xd089('0x5'));var client=jayson['client'][_0xd089('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x400583,_0x16128e,_0x17bc1d){return new BPromise(function(_0x2c8f4e,_0x3bf227){return client['request'](_0x400583,_0x17bc1d)[_0xd089('0x7')](function(_0x5e4fb7){logger[_0xd089('0x8')](_0xd089('0x9'),_0x16128e,_0xd089('0xa'));logger[_0xd089('0xb')]('OpenchannelApplication,\x20%s,\x20%s,\x20%s',_0x16128e,_0xd089('0xa'),JSON[_0xd089('0xc')](_0x5e4fb7));if(_0x5e4fb7[_0xd089('0xd')]){if(_0x5e4fb7[_0xd089('0xd')]['code']===0x1f4){logger[_0xd089('0xd')](_0xd089('0x9'),_0x16128e,_0x5e4fb7[_0xd089('0xd')][_0xd089('0xe')]);return _0x3bf227(_0x5e4fb7[_0xd089('0xd')][_0xd089('0xe')]);}logger[_0xd089('0xd')](_0xd089('0x9'),_0x16128e,_0x5e4fb7[_0xd089('0xd')][_0xd089('0xe')]);return _0x2c8f4e(_0x5e4fb7[_0xd089('0xd')][_0xd089('0xe')]);}else{logger[_0xd089('0x8')](_0xd089('0x9'),_0x16128e,'request\x20sent');_0x2c8f4e(_0x5e4fb7['result'][_0xd089('0xe')]);}})[_0xd089('0xf')](function(_0x110575){logger['error'](_0xd089('0x9'),_0x16128e,_0x110575);_0x3bf227(_0x110575);});});}exports[_0xd089('0x10')]=function(_0xa6b43b){var _0x32dd48=this;return new Promise(function(_0x2394f7,_0x530c41){return db[_0xd089('0x11')][_0xd089('0x12')](_0xa6b43b[_0xd089('0x13')],{'raw':_0xa6b43b[_0xd089('0x14')]?_0xa6b43b[_0xd089('0x14')][_0xd089('0x15')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0xa6b43b[_0xd089('0x14')]?_0xa6b43b[_0xd089('0x14')]['where']||null:null,'attributes':_0xa6b43b[_0xd089('0x14')]?_0xa6b43b[_0xd089('0x14')][_0xd089('0x16')]||null:null,'limit':_0xa6b43b[_0xd089('0x14')]?_0xa6b43b[_0xd089('0x14')]['limit']||null:null})[_0xd089('0x7')](function(_0x4ff49a){logger[_0xd089('0x8')]('UpdateOpenchannelApplication',_0xa6b43b);logger['debug'](_0xd089('0x10'),_0xa6b43b,JSON[_0xd089('0xc')](_0x4ff49a));_0x2394f7(_0x4ff49a);})[_0xd089('0xf')](function(_0x1ede2f){logger[_0xd089('0xd')]('UpdateOpenchannelApplication',_0x1ede2f['message'],_0xa6b43b);_0x530c41(_0x32dd48['error'](0x1f4,_0x1ede2f[_0xd089('0xe')]));});});};
\ No newline at end of file
+var _0x8c21=['result','catch','UpdateOpenchannelApplication','OpenchannelApplication','update','body','options','raw','where','attributes','limit','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','jayson/promise','http','request','then','info','OpenchannelApplication,\x20%s,\x20%s','request\x20sent','debug','OpenchannelApplication,\x20%s,\x20%s,\x20%s','stringify','error','code','message'];(function(_0x4c5708,_0x34b1f9){var _0x37fa9b=function(_0x534dc4){while(--_0x534dc4){_0x4c5708['push'](_0x4c5708['shift']());}};_0x37fa9b(++_0x34b1f9);}(_0x8c21,0x18b));var _0x18c2=function(_0x21c7e4,_0x2d61be){_0x21c7e4=_0x21c7e4-0x0;var _0x310cd2=_0x8c21[_0x21c7e4];return _0x310cd2;};'use strict';var _=require(_0x18c2('0x0'));var util=require(_0x18c2('0x1'));var moment=require(_0x18c2('0x2'));var BPromise=require(_0x18c2('0x3'));var rs=require(_0x18c2('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x18c2('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x18c2('0x6'))(_0x18c2('0x7'));var config=require('../../config/environment');var jayson=require(_0x18c2('0x8'));var client=jayson['client'][_0x18c2('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2a2af6,_0x3528a8,_0x127123){return new BPromise(function(_0x2c43bb,_0x4fb320){return client[_0x18c2('0xa')](_0x2a2af6,_0x127123)[_0x18c2('0xb')](function(_0x4b5d2a){logger[_0x18c2('0xc')](_0x18c2('0xd'),_0x3528a8,_0x18c2('0xe'));logger[_0x18c2('0xf')](_0x18c2('0x10'),_0x3528a8,_0x18c2('0xe'),JSON[_0x18c2('0x11')](_0x4b5d2a));if(_0x4b5d2a[_0x18c2('0x12')]){if(_0x4b5d2a[_0x18c2('0x12')][_0x18c2('0x13')]===0x1f4){logger[_0x18c2('0x12')](_0x18c2('0xd'),_0x3528a8,_0x4b5d2a['error'][_0x18c2('0x14')]);return _0x4fb320(_0x4b5d2a[_0x18c2('0x12')][_0x18c2('0x14')]);}logger['error'](_0x18c2('0xd'),_0x3528a8,_0x4b5d2a[_0x18c2('0x12')][_0x18c2('0x14')]);return _0x2c43bb(_0x4b5d2a[_0x18c2('0x12')][_0x18c2('0x14')]);}else{logger['info']('OpenchannelApplication,\x20%s,\x20%s',_0x3528a8,_0x18c2('0xe'));_0x2c43bb(_0x4b5d2a[_0x18c2('0x15')][_0x18c2('0x14')]);}})[_0x18c2('0x16')](function(_0x2ed9ff){logger['error'](_0x18c2('0xd'),_0x3528a8,_0x2ed9ff);_0x4fb320(_0x2ed9ff);});});}exports[_0x18c2('0x17')]=function(_0x4b3e33){var _0x423c25=this;return new Promise(function(_0x3ea63d,_0x47731c){return db[_0x18c2('0x18')][_0x18c2('0x19')](_0x4b3e33[_0x18c2('0x1a')],{'raw':_0x4b3e33[_0x18c2('0x1b')]?_0x4b3e33[_0x18c2('0x1b')][_0x18c2('0x1c')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x4b3e33[_0x18c2('0x1b')]?_0x4b3e33[_0x18c2('0x1b')][_0x18c2('0x1d')]||null:null,'attributes':_0x4b3e33[_0x18c2('0x1b')]?_0x4b3e33[_0x18c2('0x1b')][_0x18c2('0x1e')]||null:null,'limit':_0x4b3e33[_0x18c2('0x1b')]?_0x4b3e33[_0x18c2('0x1b')][_0x18c2('0x1f')]||null:null})[_0x18c2('0xb')](function(_0x95a8e5){logger[_0x18c2('0xc')]('UpdateOpenchannelApplication',_0x4b3e33);logger[_0x18c2('0xf')]('UpdateOpenchannelApplication',_0x4b3e33,JSON[_0x18c2('0x11')](_0x95a8e5));_0x3ea63d(_0x95a8e5);})['catch'](function(_0x121f3f){logger[_0x18c2('0x12')](_0x18c2('0x17'),_0x121f3f[_0x18c2('0x14')],_0x4b3e33);_0x47731c(_0x423c25[_0x18c2('0x12')](0x1f4,_0x121f3f[_0x18c2('0x14')]));});});};
\ No newline at end of file
index 599dbb2..31e7dcc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf064=['index','/describe','/:id','show','/:id/messages','download','post','/:id/tags','tracked','openchannel','openchannelinteraction:destroy','destroy','delete','removeTags','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./openchannelInteraction.controller','get','isAuthenticated'];(function(_0x6a4fe7,_0x40a337){var _0x5e467d=function(_0x24eb0b){while(--_0x24eb0b){_0x6a4fe7['push'](_0x6a4fe7['shift']());}};_0x5e467d(++_0x40a337);}(_0xf064,0x17b));var _0x4f06=function(_0x3d9176,_0x399d6f){_0x3d9176=_0x3d9176-0x0;var _0x12adc5=_0xf064[_0x3d9176];return _0x12adc5;};'use strict';var multer=require(_0x4f06('0x0'));var util=require(_0x4f06('0x1'));var path=require(_0x4f06('0x2'));var timeout=require(_0x4f06('0x3'));var express=require(_0x4f06('0x4'));var router=express[_0x4f06('0x5')]();var auth=require(_0x4f06('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x4f06('0x7'));var controller=require(_0x4f06('0x8'));router[_0x4f06('0x9')]('/',auth[_0x4f06('0xa')](),controller[_0x4f06('0xb')]);router[_0x4f06('0x9')](_0x4f06('0xc'),auth[_0x4f06('0xa')](),controller['describe']);router[_0x4f06('0x9')](_0x4f06('0xd'),auth['isAuthenticated'](),controller[_0x4f06('0xe')]);router[_0x4f06('0x9')](_0x4f06('0xf'),auth[_0x4f06('0xa')](),controller['getMessages']);router['get']('/:id/download',auth[_0x4f06('0xa')](),controller[_0x4f06('0x10')]);router[_0x4f06('0x11')]('/',auth[_0x4f06('0xa')](),controller['create']);router[_0x4f06('0x11')](_0x4f06('0xf'),auth['isAuthenticated'](),controller['addMessage']);router[_0x4f06('0x11')](_0x4f06('0x12'),auth[_0x4f06('0xa')](),interaction[_0x4f06('0x13')](_0x4f06('0x14'),'openchannelinteraction:addtags'),controller['addTags']);router['put'](_0x4f06('0xd'),auth['isAuthenticated'](),interaction['tracked']('openchannel','openchannelinteraction:update'),controller['update']);router['delete']('/:id',auth['isAuthenticated'](),interaction[_0x4f06('0x13')]('openchannel',_0x4f06('0x15')),controller[_0x4f06('0x16')]);router[_0x4f06('0x17')](_0x4f06('0x12'),auth[_0x4f06('0xa')](),controller[_0x4f06('0x18')]);module[_0x4f06('0x19')]=router;
\ No newline at end of file
+var _0xefee=['multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelInteraction.controller','isAuthenticated','index','describe','get','/:id/messages','getMessages','/:id/download','download','post','create','addMessage','/:id/tags','openchannel','openchannelinteraction:addtags','addTags','put','tracked','openchannelinteraction:update','update','delete','/:id','openchannelinteraction:destroy','destroy','removeTags','exports'];(function(_0x1ecdc0,_0x34f114){var _0x51b18f=function(_0x3bbab6){while(--_0x3bbab6){_0x1ecdc0['push'](_0x1ecdc0['shift']());}};_0x51b18f(++_0x34f114);}(_0xefee,0x118));var _0xeefe=function(_0x4232c6,_0x174fd3){_0x4232c6=_0x4232c6-0x0;var _0x41efd0=_0xefee[_0x4232c6];return _0x41efd0;};'use strict';var multer=require(_0xeefe('0x0'));var util=require(_0xeefe('0x1'));var path=require(_0xeefe('0x2'));var timeout=require(_0xeefe('0x3'));var express=require(_0xeefe('0x4'));var router=express[_0xeefe('0x5')]();var auth=require(_0xeefe('0x6'));var interaction=require(_0xeefe('0x7'));var config=require(_0xeefe('0x8'));var controller=require(_0xeefe('0x9'));router['get']('/',auth[_0xeefe('0xa')](),controller[_0xeefe('0xb')]);router['get']('/describe',auth[_0xeefe('0xa')](),controller[_0xeefe('0xc')]);router[_0xeefe('0xd')]('/:id',auth['isAuthenticated'](),controller['show']);router['get'](_0xeefe('0xe'),auth[_0xeefe('0xa')](),controller[_0xeefe('0xf')]);router[_0xeefe('0xd')](_0xeefe('0x10'),auth[_0xeefe('0xa')](),controller[_0xeefe('0x11')]);router[_0xeefe('0x12')]('/',auth['isAuthenticated'](),controller[_0xeefe('0x13')]);router[_0xeefe('0x12')]('/:id/messages',auth[_0xeefe('0xa')](),controller[_0xeefe('0x14')]);router[_0xeefe('0x12')](_0xeefe('0x15'),auth[_0xeefe('0xa')](),interaction['tracked'](_0xeefe('0x16'),_0xeefe('0x17')),controller[_0xeefe('0x18')]);router[_0xeefe('0x19')]('/:id',auth[_0xeefe('0xa')](),interaction[_0xeefe('0x1a')]('openchannel',_0xeefe('0x1b')),controller[_0xeefe('0x1c')]);router[_0xeefe('0x1d')](_0xeefe('0x1e'),auth['isAuthenticated'](),interaction[_0xeefe('0x1a')](_0xeefe('0x16'),_0xeefe('0x1f')),controller[_0xeefe('0x20')]);router[_0xeefe('0x1d')](_0xeefe('0x15'),auth[_0xeefe('0xa')](),controller[_0xeefe('0x21')]);module[_0xeefe('0x22')]=router;
\ No newline at end of file
index e09832f..c491ee1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xff96=['exports','BOOLEAN','DATE','STRING','ENUM','out','sequelize'];(function(_0x2c69a1,_0x201903){var _0x24bb91=function(_0x3131ac){while(--_0x3131ac){_0x2c69a1['push'](_0x2c69a1['shift']());}};_0x24bb91(++_0x201903);}(_0xff96,0x179));var _0x6ff9=function(_0x334651,_0x6e99f6){_0x334651=_0x334651-0x0;var _0x29657c=_0xff96[_0x334651];return _0x29657c;};'use strict';var Sequelize=require(_0x6ff9('0x0'));module[_0x6ff9('0x1')]={'closed':{'type':Sequelize[_0x6ff9('0x2')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0x6ff9('0x3')]},'disposition':{'type':Sequelize[_0x6ff9('0x4')]},'note':{'type':Sequelize[_0x6ff9('0x4')]},'read1stAt':{'type':Sequelize[_0x6ff9('0x3')]},'threadId':{'type':Sequelize[_0x6ff9('0x4')]},'externalUrl':{'type':Sequelize[_0x6ff9('0x4')]},'lastMsgAt':{'type':Sequelize[_0x6ff9('0x3')]},'lastMsgDirection':{'type':Sequelize[_0x6ff9('0x5')]('in',_0x6ff9('0x6')),'defaultValue':'in','allowNull':![]},'from':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xcac6=['out','exports','BOOLEAN','DATE','STRING','ENUM'];(function(_0x5b9095,_0x37b4ce){var _0x22daa1=function(_0x40aa57){while(--_0x40aa57){_0x5b9095['push'](_0x5b9095['shift']());}};_0x22daa1(++_0x37b4ce);}(_0xcac6,0xa3));var _0x6cac=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xcac6[_0x20a584];return _0x4b41a8;};'use strict';var Sequelize=require('sequelize');module[_0x6cac('0x0')]={'closed':{'type':Sequelize[_0x6cac('0x1')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0x6cac('0x2')]},'disposition':{'type':Sequelize[_0x6cac('0x3')]},'note':{'type':Sequelize['STRING']},'read1stAt':{'type':Sequelize['DATE']},'threadId':{'type':Sequelize[_0x6cac('0x3')]},'externalUrl':{'type':Sequelize[_0x6cac('0x3')]},'lastMsgAt':{'type':Sequelize[_0x6cac('0x2')]},'lastMsgDirection':{'type':Sequelize[_0x6cac('0x4')]('in',_0x6cac('0x5')),'defaultValue':'in','allowNull':![]},'from':{'type':Sequelize[_0x6cac('0x3')]}};
\ No newline at end of file
index 93263aa..323e74d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d60=['isEmpty','OpenchannelAccountId','i.OpenchannelAccountId\x20IN\x20?','concat','createdAt','$gte','$lte','null','\x20IS\x20NULL','filter','replace','i.id\x20LIKE\x20?','split','join','i.from\x20LIKE\x20?','CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?','DESC','group','i.id','Sequelize','QueryTypes','SELECT','clone','read','%s\x20=\x200','toString','having','`Messages.count`\x20=\x200','%s\x20>\x200','`Messages.count`\x20>\x200','tag','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','openchannel_interaction_has_tags','t.id\x20=\x20it.TagId','t.id\x20IN\x20?','TagId','mail_interaction_has_tags','sequelize','merge','Account.key','i.*','Contact.firstName','Contact.lastName','Contact.email','c.phone','Contact.phone','c.mobile','Contact.mobile','c.fax','Contact.fax','GROUP_CONCAT(DISTINCT\x20t.id)','ui.OpenchannelInteractionId\x20IN\x20?','groupBy','OpenchannelInteractionId','all','rows','catch','show','params','includeAll','include','options','create','body','find','describe','addMessage','ids','omit','findOne','YYYY-MM-DD\x20HH:mm:ss','findAll','addTags','spread','Tag','openchannelInteractionTags:save','removeTags','download','unix','root','server','files','attachments','transcript-%d-%s.zip','Messages','direction','secret','fullname','CmContact','Contact','lastName','Attachment','OpenchannelAccount','Account','User','Owner','10px','<div\x20class=\x22header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h5>Interaction\x20Transcript</h5>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>','<hr\x20class=\x22separator\x22/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22footer\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22left\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>%s</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>{{page}}/{{pages}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22right\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>%s</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>','Openchannel','YYYY-MM-DD','mkdirSync','closedAt','threadId','basename','existsSync','createReadStream','pipe','createWriteStream','out','System','firstName','renderFile','views','toFile','transcript-','.pdf','log','err','unlinkSync','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','defaults','localhost','socket.io-emitter','redis','./openchannelInteraction.socket','sendStatus','end','json','offset','limit','status','set','Content-Range','apply','save','update','destroy','then','error','stack','name','send','closed','unreadMessages','OpenchannelMessage','count','Tags','TagIds','forEach','push','index','OpenchannelInteraction','rawAttributes','model','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','select','field','color','from','tools_tags','COUNT(*)','openchannel_messages','me.direction\x20=\x20\x27in\x27','me.read\x20=\x20false','u.id','user_has_openchannel_interactions','left_join','users','openchannel_interactions','cm_contacts','openchannel_accounts','a.id\x20=\x20i.OpenchannelAccountId','me.OpenchannelInteractionId\x20=\x20i.id','expr','parse','advancedFilter','keys','value','dateStart','startOf','day','format','utc','endOf','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','isArray','condition','Messages.count','and','tableAlias','\x20IN\x20?','\x20=\x20?','c.firstName','\x20LIKE\x20?','c.email','\x20>\x20?','\x20<\x20?','LIKE','ContactId','c.lastName','map','isNil'];(function(_0x4c5227,_0x5da181){var _0x3f03fa=function(_0x55e910){while(--_0x55e910){_0x4c5227['push'](_0x4c5227['shift']());}};_0x3f03fa(++_0x5da181);}(_0x5d60,0x165));var _0x05d6=function(_0x3ef314,_0x511c51){_0x3ef314=_0x3ef314-0x0;var _0x39fafe=_0x5d60[_0x3ef314];return _0x39fafe;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x05d6('0x0'));var rimraf=require(_0x05d6('0x1'));var zipdir=require(_0x05d6('0x2'));var jsonpatch=require(_0x05d6('0x3'));var rp=require(_0x05d6('0x4'));var moment=require(_0x05d6('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x05d6('0x6'));var util=require(_0x05d6('0x7'));var path=require(_0x05d6('0x8'));var sox=require(_0x05d6('0x9'));var csv=require(_0x05d6('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x05d6('0xb'));var crypto=require(_0x05d6('0xc'));var jsforce=require(_0x05d6('0xd'));var deskjs=require(_0x05d6('0xe'));var toCsv=require(_0x05d6('0xa'));var querystring=require(_0x05d6('0xf'));var Papa=require(_0x05d6('0x10'));var Redis=require('ioredis');var authService=require(_0x05d6('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x05d6('0x12'));var logger=require(_0x05d6('0x13'))(_0x05d6('0x14'));var utils=require(_0x05d6('0x15'));var config=require(_0x05d6('0x16'));var db=require(_0x05d6('0x17'))['db'];config['redis']=_[_0x05d6('0x18')](config['redis'],{'host':_0x05d6('0x19'),'port':0x18eb});var socket=require(_0x05d6('0x1a'))(new Redis(config[_0x05d6('0x1b')]));require(_0x05d6('0x1c'))['register'](socket);function respondWithStatusCode(_0x3815f7,_0x4db694){_0x4db694=_0x4db694||0xcc;return function(_0x22a180){if(_0x22a180){return _0x3815f7[_0x05d6('0x1d')](_0x4db694);}return _0x3815f7['status'](_0x4db694)[_0x05d6('0x1e')]();};}function respondWithResult(_0x590ee0,_0x25734e){_0x25734e=_0x25734e||0xc8;return function(_0x3d8606){if(_0x3d8606){return _0x590ee0['status'](_0x25734e)[_0x05d6('0x1f')](_0x3d8606);}};}function respondWithFilteredResult(_0x47d955,_0x4870e1){return function(_0x40f027){if(_0x40f027){var _0x94ec1c=_0x40f027['count'],_0xc7ffd0=_0x4870e1[_0x05d6('0x20')],_0x530f60=_0x4870e1[_0x05d6('0x20')]+_0x4870e1[_0x05d6('0x21')],_0x25e5b7;if(_0x530f60>=_0x94ec1c){_0x530f60=_0x94ec1c;_0x25e5b7=0xc8;}else{_0x25e5b7=0xce;}_0x47d955[_0x05d6('0x22')](_0x25e5b7);return _0x47d955[_0x05d6('0x23')](_0x05d6('0x24'),_0xc7ffd0+'-'+_0x530f60+'/'+_0x94ec1c)['json'](_0x40f027);}return null;};}function patchUpdates(_0x59f0c9){return function(_0x3c46bd){try{jsonpatch[_0x05d6('0x25')](_0x3c46bd,_0x59f0c9,!![]);}catch(_0x24fb3f){return BPromise['reject'](_0x24fb3f);}return _0x3c46bd[_0x05d6('0x26')]();};}function saveUpdates(_0x537323,_0x5d0f4a){return function(_0x11bb78){if(_0x11bb78){return _0x11bb78[_0x05d6('0x27')](_0x537323)['then'](function(_0x1c973b){return _0x1c973b;});}return null;};}function removeEntity(_0x2d092a,_0x4119c2){return function(_0x1726e2){if(_0x1726e2){return _0x1726e2[_0x05d6('0x28')]()[_0x05d6('0x29')](function(){_0x2d092a[_0x05d6('0x22')](0xcc)[_0x05d6('0x1e')]();});}};}function handleEntityNotFound(_0x656d39,_0x155aa4){return function(_0x52b8fb){if(!_0x52b8fb){_0x656d39[_0x05d6('0x1d')](0x194);}return _0x52b8fb;};}function handleError(_0x32f8ad,_0xe0600c){_0xe0600c=_0xe0600c||0x1f4;return function(_0x143193){logger[_0x05d6('0x2a')](_0x143193[_0x05d6('0x2b')]);if(_0x143193[_0x05d6('0x2c')]){delete _0x143193['name'];}_0x32f8ad[_0x05d6('0x22')](_0xe0600c)[_0x05d6('0x2d')](_0x143193);};}function getInteractionUnreadMessages(_0x16b9c4){return new BPromise(function(_0x459f47,_0x3681a4){try{if(_0x16b9c4[_0x05d6('0x2e')]){_0x16b9c4[_0x05d6('0x2f')]=0x0;_0x459f47(_0x16b9c4);}else{return db[_0x05d6('0x30')][_0x05d6('0x31')]({'where':{'OpenchannelInteractionId':_0x16b9c4['id'],'direction':'in','read':![]}})[_0x05d6('0x29')](function(_0x39ba68){_0x16b9c4['unreadMessages']=_0x39ba68;_0x459f47(_0x16b9c4);});}}catch(_0x2ce170){_0x3681a4(_0x2ce170);}});}function getInteractionUsers(_0x4966fd,_0x25c9d4){return new BPromise(function(_0x356f89,_0x24f7df){try{if(_0x25c9d4[_0x4966fd['id']]){_0x4966fd['Users']=_['map'](_0x25c9d4[_0x4966fd['id']],function(_0x51b913){return{'id':_0x51b913['id']};});}}catch(_0x33c3b7){_0x24f7df(_0x33c3b7);}_0x356f89(_0x4966fd);});}function getInteractionTags(_0xa232e1,_0x47a55a){return new BPromise(function(_0x2cad37,_0x10bb83){try{if(_0xa232e1['TagIds']){_0xa232e1[_0x05d6('0x32')]=[];_0xa232e1[_0x05d6('0x33')]['split'](',')[_0x05d6('0x34')](function(_0x14c48c){_0xa232e1[_0x05d6('0x32')][_0x05d6('0x35')](_0x47a55a[_0x14c48c]);});}delete _0xa232e1[_0x05d6('0x33')];}catch(_0x44f964){_0x10bb83(_0x44f964);}_0x2cad37(_0xa232e1);});}function updateOpenchannelInteraction(_0x3fff29,_0x20c73e,_0x29434c){return new BPromise(function(_0x50bdfc,_0x1b62a1){return getInteractionUnreadMessages(_0x3fff29)[_0x05d6('0x29')](function(_0x26cc72){return getInteractionUsers(_0x26cc72,_0x29434c);})[_0x05d6('0x29')](function(_0x1f4bae){return getInteractionTags(_0x1f4bae,_0x20c73e);})['then'](function(_0x39751d){_0x50bdfc(_0x39751d);})['catch'](function(_0x13fc08){_0x1b62a1(_0x13fc08);});});}exports[_0x05d6('0x36')]=function(_0x5a2f78,_0x52a16d){var _0x285c1c={},_0x4dfd65={},_0x518991={'count':0x0,'rows':[]};var _0x158ba2=db[_0x05d6('0x37')][_0x05d6('0x38')];_0x4dfd65[_0x05d6('0x39')]=_['keys'](_0x158ba2);_0x4dfd65[_0x05d6('0x3a')]=_['keys'](_0x5a2f78[_0x05d6('0x3a')]);_0x4dfd65[_0x05d6('0x3b')]=_[_0x05d6('0x3c')](_0x4dfd65[_0x05d6('0x39')],_0x4dfd65[_0x05d6('0x3a')]);_0x285c1c[_0x05d6('0x3d')]=_[_0x05d6('0x3c')](_0x4dfd65[_0x05d6('0x39')],qs[_0x05d6('0x3e')](_0x5a2f78[_0x05d6('0x3a')][_0x05d6('0x3e')]));_0x285c1c['attributes']=_0x285c1c[_0x05d6('0x3d')][_0x05d6('0x3f')]?_0x285c1c['attributes']:_0x4dfd65[_0x05d6('0x39')];if(!_0x5a2f78[_0x05d6('0x3a')][_0x05d6('0x40')](_0x05d6('0x41'))){_0x285c1c[_0x05d6('0x21')]=qs[_0x05d6('0x21')](_0x5a2f78['query'][_0x05d6('0x21')]);_0x285c1c[_0x05d6('0x20')]=qs[_0x05d6('0x20')](_0x5a2f78[_0x05d6('0x3a')][_0x05d6('0x20')]);}_0x285c1c[_0x05d6('0x42')]=qs['sort'](_0x5a2f78[_0x05d6('0x3a')][_0x05d6('0x43')]);_0x285c1c[_0x05d6('0x44')]=qs[_0x05d6('0x3b')](_[_0x05d6('0x45')](_0x5a2f78[_0x05d6('0x3a')],_0x4dfd65['filters']));var _0x4ff840=[];var _0x22a1bd=squel[_0x05d6('0x46')]()[_0x05d6('0x47')]('id')['field'](_0x05d6('0x2c'))[_0x05d6('0x47')](_0x05d6('0x48'))[_0x05d6('0x49')](_0x05d6('0x4a'));var _0x39dbac=squel['select']()[_0x05d6('0x47')](_0x05d6('0x4b'))[_0x05d6('0x49')](_0x05d6('0x4c'),'me')['where']('me.OpenchannelInteractionId\x20=\x20i.id')[_0x05d6('0x44')](_0x05d6('0x4d'))[_0x05d6('0x44')](_0x05d6('0x4e'));var _0x33fcbd=squel[_0x05d6('0x46')]()[_0x05d6('0x47')](_0x05d6('0x4f'))[_0x05d6('0x47')]('ui.OpenchannelInteractionId')[_0x05d6('0x49')](_0x05d6('0x50'),'ui')[_0x05d6('0x51')](_0x05d6('0x52'),'u','u.id\x20=\x20ui.UserId');var _0x1106aa=squel[_0x05d6('0x46')]()['from'](_0x05d6('0x53'),'i')[_0x05d6('0x51')](_0x05d6('0x54'),'c','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL')[_0x05d6('0x51')](_0x05d6('0x52'),'o','o.id\x20=\x20i.UserId')['left_join'](_0x05d6('0x55'),'a',_0x05d6('0x56'))[_0x05d6('0x51')](_0x05d6('0x4c'),'me',_0x05d6('0x57'));var _0xe59344=squel[_0x05d6('0x58')]();if(_0x5a2f78[_0x05d6('0x3a')]['advancedFilter']){var _0x262771=JSON[_0x05d6('0x59')](_0x5a2f78[_0x05d6('0x3a')][_0x05d6('0x5a')]);_[_0x05d6('0x5b')](_0x262771)['forEach'](function(_0x4ef238){var _0x3d477b=_0x262771[_0x4ef238];if(_0x4ef238==='createdAt'){var _0x26c02e=moment(_0x3d477b[_0x05d6('0x5c')][_0x05d6('0x5d')])[_0x05d6('0x5e')](_0x05d6('0x5f'))['utc']()[_0x05d6('0x60')]();var _0x2e4bc7=moment(_0x2e4bc7)[_0x05d6('0x61')]()[_0x05d6('0x62')]('day')[_0x05d6('0x60')]();_0xe59344['and'](_0x05d6('0x63'),_0x26c02e,_0x2e4bc7);}else{if(_[_0x05d6('0x64')](_0x3d477b[_0x05d6('0x65')])){_0x3d477b[_0x05d6('0x65')]['forEach'](function(_0x452e90){switch(_0x3d477b['condition'][_0x05d6('0x5c')]){case'IS':if(_0x4ef238!=='TagId'&&_0x4ef238!==_0x05d6('0x66')){if(_[_0x05d6('0x64')](_0x3d477b['value'])&&_0x3d477b['value'][_0x05d6('0x3f')]>0x1){_0xe59344[_0x05d6('0x67')](_0x3d477b[_0x05d6('0x68')]+'.'+_0x4ef238+_0x05d6('0x69'),_0x3d477b['value']);}else{_0xe59344['and'](_0x3d477b[_0x05d6('0x68')]+'.'+_0x4ef238+_0x05d6('0x6a'),_0x3d477b[_0x05d6('0x5c')][0x0]);}}break;case'=':_0xe59344[_0x05d6('0x67')](_0x3d477b[_0x05d6('0x68')]+'.'+_0x4ef238+'\x20=\x20?',_0x3d477b[_0x05d6('0x5c')]);break;case'LIKE':if(_0x4ef238==='ContactId'){_0xe59344[_0x05d6('0x67')](_0x05d6('0x6b')+'\x20LIKE\x20?','%'+_0x3d477b[_0x05d6('0x5c')]+'%');_0xe59344['or']('c.lastName'+_0x05d6('0x6c'),'%'+_0x3d477b[_0x05d6('0x5c')]+'%');_0xe59344['or'](_0x05d6('0x6d')+_0x05d6('0x6c'),'%'+_0x3d477b['value']+'%');}else{_0xe59344[_0x05d6('0x67')](_0x3d477b['tableAlias']+'.'+_0x4ef238+_0x05d6('0x6c'),'%'+_0x3d477b[_0x05d6('0x5c')]+'%');}break;case'>':_0xe59344[_0x05d6('0x67')](_0x3d477b[_0x05d6('0x68')]+'.'+_0x4ef238+_0x05d6('0x6e'),_0x3d477b[_0x05d6('0x5c')]);break;case'<':_0xe59344[_0x05d6('0x67')](_0x3d477b[_0x05d6('0x68')]+'.'+_0x4ef238+_0x05d6('0x6f'),_0x3d477b['value']);break;}});}else{switch(_0x3d477b[_0x05d6('0x65')][_0x05d6('0x5c')]){case'IS':if(_0x4ef238!=='TagId'&&_0x4ef238!==_0x05d6('0x66')){if(_['isArray'](_0x3d477b[_0x05d6('0x5c')])&&_0x3d477b['value'][_0x05d6('0x3f')]>0x1){_0xe59344['and'](_0x3d477b[_0x05d6('0x68')]+'.'+_0x4ef238+_0x05d6('0x69'),_0x3d477b[_0x05d6('0x5c')]);}else{_0xe59344[_0x05d6('0x67')](_0x3d477b[_0x05d6('0x68')]+'.'+_0x4ef238+'\x20=\x20?',_0x3d477b[_0x05d6('0x5c')][0x0]);}}break;case'=':_0xe59344['and'](_0x3d477b[_0x05d6('0x68')]+'.'+_0x4ef238+_0x05d6('0x6a'),_0x3d477b[_0x05d6('0x5c')]);break;case _0x05d6('0x70'):if(_0x4ef238===_0x05d6('0x71')){_0xe59344['and'](_0x05d6('0x6b')+'\x20LIKE\x20?','%'+_0x3d477b[_0x05d6('0x5c')]+'%');_0xe59344['or'](_0x05d6('0x72')+_0x05d6('0x6c'),'%'+_0x3d477b[_0x05d6('0x5c')]+'%');_0xe59344['or']('c.email'+_0x05d6('0x6c'),'%'+_0x3d477b[_0x05d6('0x5c')]+'%');}else{_0xe59344['and'](_0x3d477b['tableAlias']+'.'+_0x4ef238+_0x05d6('0x6c'),'%'+_0x3d477b[_0x05d6('0x5c')]+'%');}break;case'>':_0xe59344[_0x05d6('0x67')](_0x3d477b[_0x05d6('0x68')]+'.'+_0x4ef238+_0x05d6('0x6e'),_0x3d477b[_0x05d6('0x5c')]);break;case'<':_0xe59344[_0x05d6('0x67')](_0x3d477b[_0x05d6('0x68')]+'.'+_0x4ef238+_0x05d6('0x6f'),_0x3d477b[_0x05d6('0x5c')]);break;}}}});}else{var _0xc4d5bd=_(Object['keys'](_0x5a2f78[_0x05d6('0x3a')]))[_0x05d6('0x73')](function(_0x4dc571){return _0x158ba2[_0x05d6('0x40')](_0x4dc571)?_0x4dc571:undefined;})['filter'](function(_0xf6efe9){return!_[_0x05d6('0x74')](_0xf6efe9);})[_0x05d6('0x5c')]();if(!_[_0x05d6('0x75')](_0xc4d5bd)){_0xc4d5bd[_0x05d6('0x34')](function(_0x5b0c15){if(_0x5b0c15===_0x05d6('0x76')){_0x1106aa['where'](_0x05d6('0x77'),[][_0x05d6('0x78')](_0x5a2f78[_0x05d6('0x3a')][_0x5b0c15]));}else if(_0x5b0c15===_0x05d6('0x79')){var _0x5c5583=JSON[_0x05d6('0x59')](_0x5a2f78[_0x05d6('0x3a')][_0x5b0c15])[_0x05d6('0x7a')];var _0x3370b8=JSON[_0x05d6('0x59')](_0x5a2f78[_0x05d6('0x3a')][_0x5b0c15])[_0x05d6('0x7b')];_0x1106aa[_0x05d6('0x44')](_0x05d6('0x63'),_0x5c5583,_0x3370b8);}else{if(_0x5a2f78['query'][_0x5b0c15]===_0x05d6('0x7c')){_0x1106aa[_0x05d6('0x44')]('i.'+_0x5b0c15+_0x05d6('0x7d'));}else{_0x1106aa['where']('i.'+_0x5b0c15+'\x20=\x20?',_0x5a2f78['query'][_0x5b0c15]);}}});}if(_0x5a2f78['query'][_0x05d6('0x7e')]){var _0x2a130c=_0x5a2f78[_0x05d6('0x3a')][_0x05d6('0x7e')][_0x05d6('0x7f')]('\x5c','\x5c\x5c')[_0x05d6('0x7f')]('\x27\x27','\x27\x27\x27\x27');if(qs['isNumeric'](_0x2a130c)){_0xe59344['or'](_0x05d6('0x80'),_0x2a130c+'%');}else{var _0x4671f6=[];_0x2a130c[_0x05d6('0x81')]('\x20')['forEach'](function(_0x558046){_0x4671f6[_0x05d6('0x35')]('+'+_0x558046['toString']());});var _0x40867d=_0x4671f6[_0x05d6('0x82')]('\x20');_0xe59344['or']('MATCH\x20(me.body)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)',_0x40867d)['or'](_0x05d6('0x83'),_0x2a130c+'%')['or'](_0x05d6('0x84'),_0x2a130c+'%');}}}_0x1106aa[_0x05d6('0x44')](_0xe59344);if(_0x285c1c[_0x05d6('0x42')]){_0x285c1c[_0x05d6('0x42')]['forEach'](function(_0x269cf0){_0x1106aa[_0x05d6('0x42')]('i.'+_0x269cf0[0x0],_0x269cf0[0x1]===_0x05d6('0x85')?![]:!![]);});}_0x1106aa[_0x05d6('0x86')](_0x05d6('0x87'));var _0x1abf83={'type':db[_0x05d6('0x88')][_0x05d6('0x89')][_0x05d6('0x8a')],'raw':!![]};var _0x1d1989=_0x1106aa[_0x05d6('0x8b')]()[_0x05d6('0x47')](_0x05d6('0x4b'));if(!_0x5a2f78['query'][_0x05d6('0x5a')]){if(_0x5a2f78['query']['read']){if(_0x5a2f78[_0x05d6('0x3a')][_0x05d6('0x8c')]==0x1){_0x1d1989[_0x05d6('0x44')](util[_0x05d6('0x60')](_0x05d6('0x8d'),_0x39dbac[_0x05d6('0x8e')]()));_0x1106aa[_0x05d6('0x8f')](_0x05d6('0x90'));}else{_0x1d1989[_0x05d6('0x44')](util[_0x05d6('0x60')](_0x05d6('0x91'),_0x39dbac[_0x05d6('0x8e')]()));_0x1106aa['having'](_0x05d6('0x92'));}}if(_0x5a2f78[_0x05d6('0x3a')][_0x05d6('0x93')]){var _0x59c80e=_['isArray'](_0x5a2f78[_0x05d6('0x3a')][_0x05d6('0x93')])?_0x5a2f78[_0x05d6('0x3a')][_0x05d6('0x93')]:new Array(_0x5a2f78[_0x05d6('0x3a')]['tag']);var _0x42a584=squel[_0x05d6('0x58')]();_0x59c80e['forEach'](function(_0x19920e){_0x42a584['or'](_0x05d6('0x94'),'%,'+_0x19920e+',%');});_0x1106aa[_0x05d6('0x8f')](_0x42a584);_0x1d1989[_0x05d6('0x51')](_0x05d6('0x95'),'it','it.OpenchannelInteractionId\x20=\x20i.id');_0x1d1989[_0x05d6('0x51')](_0x05d6('0x4a'),'t',_0x05d6('0x96'));_0x1d1989[_0x05d6('0x44')](_0x05d6('0x97'),_0x59c80e);}}else{var _0x262771=JSON[_0x05d6('0x59')](_0x5a2f78[_0x05d6('0x3a')][_0x05d6('0x5a')]);_[_0x05d6('0x5b')](_0x262771)['forEach'](function(_0xe8393e){var _0x3be8a9=_0x262771[_0xe8393e];if(_0xe8393e===_0x05d6('0x98')){var _0x3c3ed8=_0x3be8a9[_0x05d6('0x5c')];var _0x269ed2=squel[_0x05d6('0x58')]();_0x3c3ed8[_0x05d6('0x34')](function(_0x13c23e){_0x269ed2['or'](_0x05d6('0x94'),'%,'+_0x13c23e+',%');});_0x1106aa[_0x05d6('0x8f')](_0x269ed2);_0x1d1989[_0x05d6('0x51')](_0x05d6('0x99'),'it','it.MailInteractionId\x20=\x20i.id');_0x1d1989[_0x05d6('0x51')](_0x05d6('0x4a'),'t',_0x05d6('0x96'));_0x1d1989[_0x05d6('0x44')]('t.id\x20IN\x20?',_0x3c3ed8);}else if(_0xe8393e===_0x05d6('0x66')){if(_0x3be8a9[_0x05d6('0x5c')][_0x05d6('0x3f')]===0x1){if(_0x3be8a9[_0x05d6('0x5c')][0x0]===0x1){_0x1d1989[_0x05d6('0x44')](util[_0x05d6('0x60')](_0x05d6('0x8d'),_0x39dbac[_0x05d6('0x8e')]()));_0x1106aa[_0x05d6('0x8f')](_0x05d6('0x90'));}else{_0x1d1989['where'](util[_0x05d6('0x60')](_0x05d6('0x91'),_0x39dbac['toString']()));_0x1106aa[_0x05d6('0x8f')](_0x05d6('0x92'));}}}});}db[_0x05d6('0x9a')][_0x05d6('0x3a')](_0x1d1989[_0x05d6('0x8e')](),_0x1abf83)[_0x05d6('0x29')](function(_0x322197){_0x518991['count']=_0x322197[_0x05d6('0x3f')];if(_0x518991[_0x05d6('0x31')]===0x0)return[];return db['sequelize']['query'](_0x22a1bd[_0x05d6('0x8e')](),_0x1abf83)[_0x05d6('0x29')](function(_0x29932e){_0x4ff840=_['keyBy'](_0x29932e,'id');_0x1abf83=_[_0x05d6('0x9b')](_0x1abf83,{'model':db['OpenchannelInteraction'],'mapToModel':!![],'raw':!![],'nest':!![]});_0x1106aa[_0x05d6('0x47')]('a.key',_0x05d6('0x9c'));_0x1106aa['field'](_0x05d6('0x9d'));_0x1106aa[_0x05d6('0x47')](_0x05d6('0x6b'),_0x05d6('0x9e'));_0x1106aa[_0x05d6('0x47')](_0x05d6('0x72'),_0x05d6('0x9f'));_0x1106aa[_0x05d6('0x47')](_0x05d6('0x6d'),_0x05d6('0xa0'));_0x1106aa[_0x05d6('0x47')](_0x05d6('0xa1'),_0x05d6('0xa2'));_0x1106aa[_0x05d6('0x47')](_0x05d6('0xa3'),_0x05d6('0xa4'));_0x1106aa[_0x05d6('0x47')](_0x05d6('0xa5'),_0x05d6('0xa6'));_0x1106aa[_0x05d6('0x47')](_0x05d6('0xa7'),_0x05d6('0x33'));_0x1106aa['left_join']('openchannel_interaction_has_tags','it','it.OpenchannelInteractionId\x20=\x20i.id');_0x1106aa['left_join'](_0x05d6('0x4a'),'t',_0x05d6('0x96'));_0x1106aa[_0x05d6('0x21')](_0x285c1c[_0x05d6('0x21')]);_0x1106aa[_0x05d6('0x20')](_0x285c1c[_0x05d6('0x20')]);return db['sequelize'][_0x05d6('0x3a')](_0x1106aa[_0x05d6('0x8e')](),_0x1abf83);})[_0x05d6('0x29')](function(_0x54d3fc){_0x33fcbd['where'](_0x05d6('0xa8'),_['map'](_0x54d3fc,'id'));return db[_0x05d6('0x9a')][_0x05d6('0x3a')](_0x33fcbd[_0x05d6('0x8e')](),_0x1abf83)[_0x05d6('0x29')](function(_0x420bfa){var _0x16c07b=_[_0x05d6('0xa9')](_0x420bfa,_0x05d6('0xaa'));var _0x13eb49=[];_0x54d3fc[_0x05d6('0x34')](function(_0x28c874){_0x13eb49[_0x05d6('0x35')](updateOpenchannelInteraction(_0x28c874,_0x4ff840,_0x16c07b));});return BPromise[_0x05d6('0xab')](_0x13eb49);});});})[_0x05d6('0x29')](function(_0x153717){_0x518991[_0x05d6('0xac')]=_0x153717;return _0x518991;})[_0x05d6('0x29')](respondWithFilteredResult(_0x52a16d,_0x285c1c))[_0x05d6('0xad')](handleError(_0x52a16d,null));};exports[_0x05d6('0xae')]=function(_0x2c4ad2,_0x2b7521){var _0x3547c5={'raw':![],'where':{'id':_0x2c4ad2[_0x05d6('0xaf')]['id']}},_0x5412e5={};_0x5412e5[_0x05d6('0x39')]=_[_0x05d6('0x5b')](db[_0x05d6('0x37')][_0x05d6('0x38')]);_0x5412e5[_0x05d6('0x3a')]=_[_0x05d6('0x5b')](_0x2c4ad2[_0x05d6('0x3a')]);_0x5412e5[_0x05d6('0x3b')]=_[_0x05d6('0x3c')](_0x5412e5[_0x05d6('0x39')],_0x5412e5['query']);_0x3547c5[_0x05d6('0x3d')]=_[_0x05d6('0x3c')](_0x5412e5[_0x05d6('0x39')],qs[_0x05d6('0x3e')](_0x2c4ad2['query'][_0x05d6('0x3e')]));_0x3547c5[_0x05d6('0x3d')]=_0x3547c5[_0x05d6('0x3d')][_0x05d6('0x3f')]?_0x3547c5[_0x05d6('0x3d')]:_0x5412e5[_0x05d6('0x39')];if(_0x2c4ad2[_0x05d6('0x3a')][_0x05d6('0xb0')]){_0x3547c5[_0x05d6('0xb1')]=[{'all':!![]}];}_0x3547c5=_[_0x05d6('0x9b')]({},_0x3547c5,_0x2c4ad2[_0x05d6('0xb2')]);return db[_0x05d6('0x37')]['find'](_0x3547c5)['then'](handleEntityNotFound(_0x2b7521,null))['then'](respondWithResult(_0x2b7521,null))[_0x05d6('0xad')](handleError(_0x2b7521,null));};exports[_0x05d6('0xb3')]=function(_0x3caa3a,_0x25afae){return db[_0x05d6('0x37')][_0x05d6('0xb3')](_0x3caa3a['body'],{})[_0x05d6('0x29')](respondWithResult(_0x25afae,0xc9))['catch'](handleError(_0x25afae,null));};exports['update']=function(_0x158d59,_0x5a82ab){if(_0x158d59[_0x05d6('0xb4')]['id']){delete _0x158d59[_0x05d6('0xb4')]['id'];}return db[_0x05d6('0x37')][_0x05d6('0xb5')]({'where':{'id':_0x158d59[_0x05d6('0xaf')]['id']}})[_0x05d6('0x29')](handleEntityNotFound(_0x5a82ab,null))[_0x05d6('0x29')](saveUpdates(_0x158d59[_0x05d6('0xb4')],null))['then'](respondWithResult(_0x5a82ab,null))[_0x05d6('0xad')](handleError(_0x5a82ab,null));};exports[_0x05d6('0x28')]=function(_0x1e5b68,_0x25c09f){return db[_0x05d6('0x37')][_0x05d6('0xb5')]({'where':{'id':_0x1e5b68[_0x05d6('0xaf')]['id']}})['then'](handleEntityNotFound(_0x25c09f,null))[_0x05d6('0x29')](removeEntity(_0x25c09f,null))[_0x05d6('0xad')](handleError(_0x25c09f,null));};exports[_0x05d6('0xb6')]=function(_0x1fb108,_0x9e5a52){return db[_0x05d6('0x37')][_0x05d6('0xb6')]()[_0x05d6('0x29')](respondWithResult(_0x9e5a52,null))['catch'](handleError(_0x9e5a52,null));};exports['addMessage']=function(_0x1a5379,_0x324889,_0x25b672){return db['OpenchannelMessage']['find']({'where':{'id':_0x1a5379[_0x05d6('0xaf')]['id']}})[_0x05d6('0x29')](handleEntityNotFound(_0x324889,null))[_0x05d6('0x29')](function(_0x34a902){if(_0x34a902){return _0x34a902[_0x05d6('0xb7')](_0x1a5379[_0x05d6('0xb4')][_0x05d6('0xb8')],_[_0x05d6('0xb9')](_0x1a5379['body'],['ids','id'])||{});}})[_0x05d6('0x29')](respondWithResult(_0x324889,null))[_0x05d6('0xad')](handleError(_0x324889,null));};exports['getMessages']=function(_0x385644,_0x5e8443,_0x418dc4){var _0x3dc858={'raw':![],'where':{}};var _0x1798f9={};var _0x3082d3={'count':0x0,'rows':[]};return db[_0x05d6('0x37')][_0x05d6('0xba')]({'where':{'id':_0x385644['params']['id']}})[_0x05d6('0x29')](handleEntityNotFound(_0x5e8443,null))[_0x05d6('0x29')](function(_0x2ef51f){if(_0x2ef51f){_0x1798f9['model']=_[_0x05d6('0x5b')](db[_0x05d6('0x30')]['rawAttributes']);_0x1798f9[_0x05d6('0x3a')]=_[_0x05d6('0x5b')](_0x385644[_0x05d6('0x3a')]);_0x1798f9[_0x05d6('0x3b')]=_['intersection'](_0x1798f9['model'],_0x1798f9[_0x05d6('0x3a')]);_0x3dc858[_0x05d6('0x3d')]=_[_0x05d6('0x3c')](_0x1798f9[_0x05d6('0x39')],qs[_0x05d6('0x3e')](_0x385644[_0x05d6('0x3a')][_0x05d6('0x3e')]));_0x3dc858['attributes']=_0x3dc858[_0x05d6('0x3d')][_0x05d6('0x3f')]?_0x3dc858[_0x05d6('0x3d')]:_0x1798f9[_0x05d6('0x39')];if(!_0x385644[_0x05d6('0x3a')][_0x05d6('0x40')](_0x05d6('0x41'))){_0x3dc858[_0x05d6('0x21')]=qs[_0x05d6('0x21')](_0x385644['query'][_0x05d6('0x21')]);_0x3dc858[_0x05d6('0x20')]=qs[_0x05d6('0x20')](_0x385644['query'][_0x05d6('0x20')]);}_0x3dc858[_0x05d6('0x42')]=qs[_0x05d6('0x43')](_0x385644[_0x05d6('0x3a')][_0x05d6('0x43')]);_0x3dc858[_0x05d6('0x44')]=qs[_0x05d6('0x3b')](_['pick'](_0x385644[_0x05d6('0x3a')],_0x1798f9[_0x05d6('0x3b')]));_0x3dc858['where'][_0x05d6('0xaa')]=_0x2ef51f['id'];if(_0x385644[_0x05d6('0x3a')]['filter']){_0x3dc858[_0x05d6('0x44')]=_[_0x05d6('0x9b')](_0x3dc858[_0x05d6('0x44')],{'$or':_[_0x05d6('0x73')](_0x3dc858[_0x05d6('0x3d')],function(_0xae39a6){var _0x36d777={};_0x36d777[_0xae39a6]={'$like':'%'+_0x385644[_0x05d6('0x3a')][_0x05d6('0x7e')]+'%'};return _0x36d777;})});}if(_0x385644[_0x05d6('0x3a')][_0x05d6('0x7a')]){var _0x194ef5=_0x385644[_0x05d6('0x3a')][_0x05d6('0x7a')][_0x05d6('0x81')](',');var _0x268dcf={};_0x268dcf[_0x194ef5[0x0]]={'$gte':moment(_0x194ef5[0x1])[_0x05d6('0x60')](_0x05d6('0xbb'))};_0x3dc858[_0x05d6('0x44')]=_[_0x05d6('0x9b')](_0x3dc858[_0x05d6('0x44')],_0x268dcf);}_0x3dc858=_['merge']({},_0x3dc858,_0x385644[_0x05d6('0xb2')]);return db[_0x05d6('0x30')][_0x05d6('0x31')]({'where':_0x3dc858[_0x05d6('0x44')]})['then'](function(_0x1629dd){_0x3082d3['count']=_0x1629dd;if(_0x385644[_0x05d6('0x3a')][_0x05d6('0xb0')]){_0x3dc858[_0x05d6('0xb1')]=[{'all':!![]}];}return db[_0x05d6('0x30')][_0x05d6('0xbc')](_0x3dc858);})[_0x05d6('0x29')](function(_0x1536e0){_0x3082d3[_0x05d6('0xac')]=_0x1536e0;return _0x3082d3;});}})[_0x05d6('0x29')](respondWithFilteredResult(_0x5e8443,_0x3dc858))[_0x05d6('0xad')](handleError(_0x5e8443,null));};exports[_0x05d6('0xbd')]=function(_0x14efec,_0x4fa3e2,_0x446e76){return db['OpenchannelInteraction'][_0x05d6('0xb5')]({'where':{'id':_0x14efec[_0x05d6('0xaf')]['id']}})['then'](handleEntityNotFound(_0x4fa3e2,null))[_0x05d6('0x29')](function(_0x68d96d){if(_0x68d96d){return _0x68d96d['setTags'](_0x14efec[_0x05d6('0xb4')][_0x05d6('0xb8')],_[_0x05d6('0xb9')](_0x14efec[_0x05d6('0xb4')],['ids','id'])||{})[_0x05d6('0xbe')](function(){return db[_0x05d6('0xbf')][_0x05d6('0xbc')]({'attributes':['id',_0x05d6('0x2c'),_0x05d6('0x48')],'where':{'id':_0x14efec[_0x05d6('0xb4')][_0x05d6('0xb8')]}});})[_0x05d6('0x29')](function(_0x27c828){socket['emit'](_0x05d6('0xc0'),{'id':Number(_0x14efec[_0x05d6('0xaf')]['id']),'tags':_0x27c828||[]});return{'id':Number(_0x14efec['params']['id']),'tags':_0x27c828||[]};});}})[_0x05d6('0x29')](respondWithResult(_0x4fa3e2,null))[_0x05d6('0xad')](handleError(_0x4fa3e2,null));};exports[_0x05d6('0xc1')]=function(_0x3bc285,_0x3c2f35,_0x2e53bf){return db[_0x05d6('0x37')][_0x05d6('0xb5')]({'where':{'id':_0x3bc285[_0x05d6('0xaf')]['id']}})[_0x05d6('0x29')](handleEntityNotFound(_0x3c2f35,null))[_0x05d6('0x29')](function(_0x5d30f9){if(_0x5d30f9){return _0x5d30f9[_0x05d6('0xc1')](_0x3bc285[_0x05d6('0x3a')][_0x05d6('0xb8')]);}})[_0x05d6('0x29')](respondWithStatusCode(_0x3c2f35,null))[_0x05d6('0xad')](handleError(_0x3c2f35,null));};exports[_0x05d6('0xc2')]=function(_0x45554d,_0x12d335){var _0x25a3ac=moment()[_0x05d6('0xc3')]()[_0x05d6('0x8e')]();var _0x21ff6b=path[_0x05d6('0x82')](config[_0x05d6('0xc4')],_0x05d6('0xc5'),_0x05d6('0xc6'),'tmp');var _0xb52c88=path['join'](config[_0x05d6('0xc4')],_0x05d6('0xc5'),_0x05d6('0xc6'),_0x05d6('0xc7'));var _0x55c813=path[_0x05d6('0x82')](_0x21ff6b,_0x25a3ac);var _0x1ba9aa=util[_0x05d6('0x60')](_0x05d6('0xc8'),_0x45554d[_0x05d6('0xaf')]['id'],_0x25a3ac);var _0x544155=path['join'](_0x21ff6b,_0x1ba9aa);var _0x345753=![];return db[_0x05d6('0x37')][_0x05d6('0xb5')]({'where':{'id':_0x45554d[_0x05d6('0xaf')]['id']},'include':[{'model':db['OpenchannelMessage'],'as':_0x05d6('0xc9'),'attributes':['id',_0x05d6('0xb4'),_0x05d6('0x79'),_0x05d6('0xca'),_0x05d6('0xcb')],'include':[{'model':db['User'],'as':'User','attributes':['id',_0x05d6('0xcc')],'raw':!![]},{'model':db[_0x05d6('0xcd')],'as':_0x05d6('0xce'),'attributes':['id','firstName',_0x05d6('0xcf')],'raw':!![]},{'model':db[_0x05d6('0xd0')],'as':_0x05d6('0xd0'),'raw':!![]}]},{'model':db[_0x05d6('0xd1')],'as':_0x05d6('0xd2'),'attributes':['id',_0x05d6('0x2c')]},{'model':db[_0x05d6('0xd3')],'as':_0x05d6('0xd4'),'attributes':['id','fullname']}]})['then'](handleEntityNotFound(_0x12d335,null))[_0x05d6('0x29')](function(_0x46dd7d){if(_0x46dd7d){var _0x1dc946=_0x46dd7d['get']({'plain':!![]});_0x345753=!![];var _0x4442d6={'format':'A4','border':_0x05d6('0xd5'),'header':{'height':'40px','contents':{'first':_0x05d6('0xd6')}},'footer':{'height':'30px','contents':{'default':util['format'](_0x05d6('0xd7'),util['format']('%s\x20#%d',_0x05d6('0xd8'),_0x1dc946['id']),moment()[_0x05d6('0x60')](_0x05d6('0xd9'))['toString']())}}};fs[_0x05d6('0xda')](_0x55c813);var _0x29e7fc={'channel':'Openchannel','account':_0x1dc946['Account'][_0x05d6('0x2c')],'agent':_0x1dc946[_0x05d6('0xd4')]?_0x1dc946[_0x05d6('0xd4')][_0x05d6('0xcc')]:'N.A.','createdAt':moment(_0x1dc946[_0x05d6('0x79')])[_0x05d6('0x60')](_0x05d6('0xbb'))['toString'](),'closedAt':_0x1dc946[_0x05d6('0x2e')]?moment(_0x1dc946[_0x05d6('0xdb')])[_0x05d6('0x60')](_0x05d6('0xbb'))[_0x05d6('0x8e')]():'','disposition':_0x1dc946['disposition'],'visibility':_0x1dc946[_0x05d6('0xdc')]?'Public':'Private','messages':_(_0x1dc946[_0x05d6('0xc9')])['filter']({'secret':![]})['map'](function(_0x1c5dcc){if(_0x1c5dcc[_0x05d6('0xd0')]){var _0x2d17c7=path[_0x05d6('0x82')](_0xb52c88,_0x1c5dcc['Attachment'][_0x05d6('0xdd')]);if(fs[_0x05d6('0xde')](_0x2d17c7)){fs[_0x05d6('0xdf')](_0x2d17c7)[_0x05d6('0xe0')](fs[_0x05d6('0xe1')](path[_0x05d6('0x82')](_0x55c813,_0x1c5dcc[_0x05d6('0xd0')][_0x05d6('0xdd')])));}}return{'date':moment(_0x1c5dcc[_0x05d6('0x79')])[_0x05d6('0x60')]('YYYY-MM-DD\x20HH:mm:ss')[_0x05d6('0x8e')](),'sender':_0x1c5dcc[_0x05d6('0xca')]===_0x05d6('0xe2')?_0x1c5dcc['User']?_0x1c5dcc[_0x05d6('0xd3')][_0x05d6('0xcc')]:_0x05d6('0xe3'):_0x1c5dcc[_0x05d6('0xce')][_0x05d6('0xe4')]+(_0x1c5dcc[_0x05d6('0xce')][_0x05d6('0xcf')]?'\x20'+_0x1c5dcc[_0x05d6('0xce')][_0x05d6('0xcf')]:''),'body':_0x1c5dcc[_0x05d6('0xd0')]?_0x1c5dcc[_0x05d6('0xd0')][_0x05d6('0xdd')]:_0x1c5dcc[_0x05d6('0xb4')],'direction':_0x1c5dcc[_0x05d6('0xca')]===_0x05d6('0xe2')?'A':'C','secret':_0x1c5dcc[_0x05d6('0xcb')],'attachment':_0x1c5dcc[_0x05d6('0xd0')]};})[_0x05d6('0x5c')]()};return ejs[_0x05d6('0xe5')](path['join'](config[_0x05d6('0xc4')],_0x05d6('0xc5'),_0x05d6('0xe6'),'downloadInteraction.html'),{'interaction':_0x29e7fc})[_0x05d6('0x29')](function(_0x52bdc6){return new BPromise(function(_0x3a55b8,_0x500827){pdf[_0x05d6('0xb3')](_0x52bdc6,_0x4442d6)[_0x05d6('0xe7')](path['join'](_0x55c813,_0x05d6('0xe8')+_0x1dc946['id']+'-'+_0x25a3ac+_0x05d6('0xe9')),function(_0x48e153,_0x352195){if(_0x48e153)return _0x500827(_0x48e153);_0x3a55b8(_0x352195);});});});}})['then'](function(){if(_0x345753){return new BPromise(function(_0x531364,_0x190441){zipdir(_0x55c813,{'saveTo':_0x544155},function(_0x53ab6f,_0x220ea4){if(_0x53ab6f)return _0x190441(_0x53ab6f);return _0x531364(_0x220ea4);});})[_0x05d6('0x29')](function(){return new BPromise(function(_0x4feb91,_0x4b9dd2){rimraf(_0x55c813,function(_0x2c0278){if(_0x2c0278)_0x4b9dd2(_0x2c0278);return _0x4feb91();});});})[_0x05d6('0x29')](function(){return _0x12d335[_0x05d6('0xc2')](_0x544155,_0x1ba9aa,function(_0x497e27){if(_0x497e27){console[_0x05d6('0xea')](_0x05d6('0xeb'),_0x497e27);}else{fs[_0x05d6('0xec')](_0x544155);}});});}else{return _0x12d335[_0x05d6('0x1d')](0xc8);}})['catch'](handleError(_0x12d335,null));};
\ No newline at end of file
+var _0x416d=['show','params','includeAll','options','body','find','describe','addMessage','OpenchannelMessage','omit','ids','merge','$gte','YYYY-MM-DD\x20HH:mm:ss','include','findAll','addTags','setTags','spread','Tag','emit','openchannelInteractionTags:save','removeTags','download','unix','root','server','tmp','transcript-%d-%s.zip','User','fullname','Contact','firstName','lastName','Attachment','Owner','get','10px','40px','<div\x20class=\x22header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h5>Interaction\x20Transcript</h5>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>','30px','%s\x20#%d','Openchannel','YYYY-MM-DD','mkdirSync','N.A.','closed','closedAt','disposition','threadId','Messages','basename','existsSync','createReadStream','pipe','out','System','direction','renderFile','views','create','toFile','log','err','unlinkSync','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','ejs','lodash','squel','crypto','jsforce','querystring','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./openchannelInteraction.socket','sendStatus','status','end','offset','limit','set','Content-Range','json','reject','save','update','then','destroy','error','name','send','Tags','TagIds','split','forEach','catch','OpenchannelInteraction','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','select','field','color','from','tools_tags','COUNT(*)','openchannel_messages','me.OpenchannelInteractionId\x20=\x20i.id','me.direction\x20=\x20\x27in\x27','me.read\x20=\x20false','ui.OpenchannelInteractionId','left_join','cm_contacts','users','o.id\x20=\x20i.UserId','openchannel_accounts','a.id\x20=\x20i.OpenchannelAccountId','me.OpenchannelInteractionId\x20=\x20i.id\x20AND\x20me.direction\x20=\x20\x27in\x27\x20AND\x20me.read\x20=\x20false','expr','advancedFilter','createdAt','value','dateStart','startOf','day','utc','format','endOf','and','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','isArray','condition','TagId','tableAlias','\x20=\x20?','LIKE','ContactId','c.firstName','\x20LIKE\x20?','c.lastName','c.email','\x20>\x20?','\x20<\x20?','unreadMessages','\x20IN\x20?','map','filter','OpenchannelAccountId','parse','$lte','null','\x20IS\x20NULL','replace','isNumeric','i.id\x20LIKE\x20?','toString','join','MATCH\x20(me.body)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?','DESC','SELECT','clone','COUNT(me.id)','read','having','`unreadMessages`\x20=\x200','`unreadMessages`\x20>\x200','tag','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','openchannel_interaction_has_tags','t.id\x20=\x20it.TagId','t.id\x20IN\x20?','mail_interaction_has_tags','it.MailInteractionId\x20=\x20i.id','sequelize','count','a.key','Account.key','i.*','Contact.firstName','Contact.lastName','Contact.email','c.phone','Contact.phone','c.mobile','Contact.mobile','c.fax','Contact.fax','it.OpenchannelInteractionId\x20=\x20i.id','ui.OpenchannelInteractionId\x20IN\x20?','groupBy','OpenchannelInteractionId','all','rows'];(function(_0x37b6eb,_0x3837f1){var _0x5a8c45=function(_0x4bd225){while(--_0x4bd225){_0x37b6eb['push'](_0x37b6eb['shift']());}};_0x5a8c45(++_0x3837f1);}(_0x416d,0x120));var _0xd416=function(_0x46a634,_0x439b70){_0x46a634=_0x46a634-0x0;var _0x42007a=_0x416d[_0x46a634];return _0x42007a;};'use strict';var pdf=require(_0xd416('0x0'));var emlformat=require(_0xd416('0x1'));var rimraf=require(_0xd416('0x2'));var zipdir=require(_0xd416('0x3'));var jsonpatch=require(_0xd416('0x4'));var rp=require(_0xd416('0x5'));var moment=require(_0xd416('0x6'));var BPromise=require(_0xd416('0x7'));var Mustache=require('mustache');var util=require(_0xd416('0x8'));var path=require(_0xd416('0x9'));var sox=require(_0xd416('0xa'));var csv=require('to-csv');var ejs=require(_0xd416('0xb'));var fs=require('fs');var _=require(_0xd416('0xc'));var squel=require(_0xd416('0xd'));var crypto=require(_0xd416('0xe'));var jsforce=require(_0xd416('0xf'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xd416('0x10'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0xd416('0x11'));var logger=require(_0xd416('0x12'))('api');var utils=require(_0xd416('0x13'));var config=require(_0xd416('0x14'));var db=require(_0xd416('0x15'))['db'];config[_0xd416('0x16')]=_[_0xd416('0x17')](config[_0xd416('0x16')],{'host':_0xd416('0x18'),'port':0x18eb});var socket=require(_0xd416('0x19'))(new Redis(config[_0xd416('0x16')]));require(_0xd416('0x1a'))['register'](socket);function respondWithStatusCode(_0x5945f0,_0x3f4926){_0x3f4926=_0x3f4926||0xcc;return function(_0x4c1469){if(_0x4c1469){return _0x5945f0[_0xd416('0x1b')](_0x3f4926);}return _0x5945f0[_0xd416('0x1c')](_0x3f4926)[_0xd416('0x1d')]();};}function respondWithResult(_0x4caffe,_0x590ff6){_0x590ff6=_0x590ff6||0xc8;return function(_0x5c076b){if(_0x5c076b){return _0x4caffe[_0xd416('0x1c')](_0x590ff6)['json'](_0x5c076b);}};}function respondWithFilteredResult(_0x1687f6,_0x2cb7b4){return function(_0x3b0ea1){if(_0x3b0ea1){var _0x5848=_0x3b0ea1['count'],_0x5b9833=_0x2cb7b4['offset'],_0x368790=_0x2cb7b4[_0xd416('0x1e')]+_0x2cb7b4[_0xd416('0x1f')],_0x3ba4d0;if(_0x368790>=_0x5848){_0x368790=_0x5848;_0x3ba4d0=0xc8;}else{_0x3ba4d0=0xce;}_0x1687f6[_0xd416('0x1c')](_0x3ba4d0);return _0x1687f6[_0xd416('0x20')](_0xd416('0x21'),_0x5b9833+'-'+_0x368790+'/'+_0x5848)[_0xd416('0x22')](_0x3b0ea1);}return null;};}function patchUpdates(_0x52b6fc){return function(_0x5312e1){try{jsonpatch['apply'](_0x5312e1,_0x52b6fc,!![]);}catch(_0x46e0de){return BPromise[_0xd416('0x23')](_0x46e0de);}return _0x5312e1[_0xd416('0x24')]();};}function saveUpdates(_0x5c09e8,_0x10f320){return function(_0x512981){if(_0x512981){return _0x512981[_0xd416('0x25')](_0x5c09e8)[_0xd416('0x26')](function(_0x47550e){return _0x47550e;});}return null;};}function removeEntity(_0x5bbda2,_0x548da5){return function(_0x2e3668){if(_0x2e3668){return _0x2e3668[_0xd416('0x27')]()['then'](function(){_0x5bbda2['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x4eb03b,_0x19a0cd){return function(_0x7087b3){if(!_0x7087b3){_0x4eb03b[_0xd416('0x1b')](0x194);}return _0x7087b3;};}function handleError(_0x28d2ad,_0x1ef056){_0x1ef056=_0x1ef056||0x1f4;return function(_0x5719b3){logger[_0xd416('0x28')](_0x5719b3['stack']);if(_0x5719b3[_0xd416('0x29')]){delete _0x5719b3[_0xd416('0x29')];}_0x28d2ad[_0xd416('0x1c')](_0x1ef056)[_0xd416('0x2a')](_0x5719b3);};}function getInteractionUsers(_0x5901f1,_0x5b17a2){return new BPromise(function(_0x2e4b8f,_0x31014b){try{if(_0x5b17a2[_0x5901f1['id']]){_0x5901f1['Users']=_['map'](_0x5b17a2[_0x5901f1['id']],function(_0x4e83b7){return{'id':_0x4e83b7['id']};});}}catch(_0x459d1c){_0x31014b(_0x459d1c);}_0x2e4b8f(_0x5901f1);});}function getInteractionTags(_0x57ff4f,_0x2f57ca){return new BPromise(function(_0x249e8c,_0x4548d2){try{if(_0x57ff4f['TagIds']){_0x57ff4f[_0xd416('0x2b')]=[];_0x57ff4f[_0xd416('0x2c')][_0xd416('0x2d')](',')[_0xd416('0x2e')](function(_0x389793){_0x57ff4f[_0xd416('0x2b')]['push'](_0x2f57ca[_0x389793]);});}delete _0x57ff4f['TagIds'];}catch(_0x2c03c0){_0x4548d2(_0x2c03c0);}_0x249e8c(_0x57ff4f);});}function updateOpenchannelInteraction(_0xb9d071,_0x234b74,_0x1e8abe){return new BPromise(function(_0x3ee3eb,_0x36c79d){return getInteractionUsers(_0xb9d071,_0x1e8abe)[_0xd416('0x26')](function(_0x299ca3){return getInteractionTags(_0x299ca3,_0x234b74);})[_0xd416('0x26')](function(_0x2f43be){_0x3ee3eb(_0x2f43be);})[_0xd416('0x2f')](function(_0x7326be){_0x36c79d(_0x7326be);});});}exports['index']=function(_0x511811,_0x16bf28){var _0x3bc610={},_0x2bc5d6={},_0x245987={'count':0x0,'rows':[]};var _0x1c9db7=db[_0xd416('0x30')][_0xd416('0x31')];_0x2bc5d6['model']=_[_0xd416('0x32')](_0x1c9db7);_0x2bc5d6['query']=_[_0xd416('0x32')](_0x511811[_0xd416('0x33')]);_0x2bc5d6[_0xd416('0x34')]=_[_0xd416('0x35')](_0x2bc5d6[_0xd416('0x36')],_0x2bc5d6[_0xd416('0x33')]);_0x3bc610[_0xd416('0x37')]=_[_0xd416('0x35')](_0x2bc5d6['model'],qs[_0xd416('0x38')](_0x511811['query'][_0xd416('0x38')]));_0x3bc610[_0xd416('0x37')]=_0x3bc610[_0xd416('0x37')][_0xd416('0x39')]?_0x3bc610[_0xd416('0x37')]:_0x2bc5d6[_0xd416('0x36')];if(!_0x511811['query'][_0xd416('0x3a')](_0xd416('0x3b'))){_0x3bc610[_0xd416('0x1f')]=qs[_0xd416('0x1f')](_0x511811[_0xd416('0x33')]['limit']);_0x3bc610[_0xd416('0x1e')]=qs['offset'](_0x511811[_0xd416('0x33')][_0xd416('0x1e')]);}_0x3bc610[_0xd416('0x3c')]=qs[_0xd416('0x3d')](_0x511811['query'][_0xd416('0x3d')]);_0x3bc610[_0xd416('0x3e')]=qs[_0xd416('0x34')](_[_0xd416('0x3f')](_0x511811[_0xd416('0x33')],_0x2bc5d6['filters']));var _0x553e31=[];var _0x46a00d=squel[_0xd416('0x40')]()[_0xd416('0x41')]('id')[_0xd416('0x41')]('name')[_0xd416('0x41')](_0xd416('0x42'))[_0xd416('0x43')](_0xd416('0x44'));var _0x2cf7f0=squel[_0xd416('0x40')]()[_0xd416('0x41')](_0xd416('0x45'))[_0xd416('0x43')](_0xd416('0x46'),'me')[_0xd416('0x3e')](_0xd416('0x47'))['where'](_0xd416('0x48'))[_0xd416('0x3e')](_0xd416('0x49'));var _0x5ce99f=squel[_0xd416('0x40')]()[_0xd416('0x41')]('u.id')['field'](_0xd416('0x4a'))[_0xd416('0x43')]('user_has_openchannel_interactions','ui')['left_join']('users','u','u.id\x20=\x20ui.UserId');var _0x41a931=squel['select']()[_0xd416('0x43')]('openchannel_interactions','i')[_0xd416('0x4b')](_0xd416('0x4c'),'c','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL')[_0xd416('0x4b')](_0xd416('0x4d'),'o',_0xd416('0x4e'))[_0xd416('0x4b')](_0xd416('0x4f'),'a',_0xd416('0x50'))['left_join'](_0xd416('0x46'),'me',_0xd416('0x51'));var _0x24d6f4=squel[_0xd416('0x52')]();if(_0x511811[_0xd416('0x33')]['advancedFilter']){var _0x25299f=JSON['parse'](_0x511811[_0xd416('0x33')][_0xd416('0x53')]);_[_0xd416('0x32')](_0x25299f)[_0xd416('0x2e')](function(_0x1c6886){var _0x5cd003=_0x25299f[_0x1c6886];if(_0x1c6886===_0xd416('0x54')){var _0xbd0838=moment(_0x5cd003[_0xd416('0x55')][_0xd416('0x56')])[_0xd416('0x57')](_0xd416('0x58'))[_0xd416('0x59')]()[_0xd416('0x5a')]();var _0x43aba3=moment(_0x43aba3)[_0xd416('0x59')]()[_0xd416('0x5b')](_0xd416('0x58'))[_0xd416('0x5a')]();_0x24d6f4[_0xd416('0x5c')](_0xd416('0x5d'),_0xbd0838,_0x43aba3);}else{if(_[_0xd416('0x5e')](_0x5cd003[_0xd416('0x5f')])){_0x5cd003[_0xd416('0x5f')][_0xd416('0x2e')](function(_0x37299c){switch(_0x5cd003['condition'][_0xd416('0x55')]){case'IS':if(_0x1c6886!==_0xd416('0x60')&&_0x1c6886!=='unreadMessages'){if(_[_0xd416('0x5e')](_0x5cd003['value'])&&_0x5cd003['value'][_0xd416('0x39')]>0x1){_0x24d6f4['and'](_0x5cd003[_0xd416('0x61')]+'.'+_0x1c6886+'\x20IN\x20?',_0x5cd003['value']);}else{_0x24d6f4[_0xd416('0x5c')](_0x5cd003['tableAlias']+'.'+_0x1c6886+_0xd416('0x62'),_0x5cd003[_0xd416('0x55')][0x0]);}}break;case'=':_0x24d6f4[_0xd416('0x5c')](_0x5cd003[_0xd416('0x61')]+'.'+_0x1c6886+_0xd416('0x62'),_0x5cd003[_0xd416('0x55')]);break;case _0xd416('0x63'):if(_0x1c6886===_0xd416('0x64')){_0x24d6f4[_0xd416('0x5c')](_0xd416('0x65')+_0xd416('0x66'),'%'+_0x5cd003[_0xd416('0x55')]+'%');_0x24d6f4['or'](_0xd416('0x67')+_0xd416('0x66'),'%'+_0x5cd003[_0xd416('0x55')]+'%');_0x24d6f4['or'](_0xd416('0x68')+_0xd416('0x66'),'%'+_0x5cd003[_0xd416('0x55')]+'%');}else{_0x24d6f4[_0xd416('0x5c')](_0x5cd003[_0xd416('0x61')]+'.'+_0x1c6886+'\x20LIKE\x20?','%'+_0x5cd003[_0xd416('0x55')]+'%');}break;case'>':_0x24d6f4['and'](_0x5cd003['tableAlias']+'.'+_0x1c6886+_0xd416('0x69'),_0x5cd003['value']);break;case'<':_0x24d6f4[_0xd416('0x5c')](_0x5cd003['tableAlias']+'.'+_0x1c6886+_0xd416('0x6a'),_0x5cd003[_0xd416('0x55')]);break;}});}else{switch(_0x5cd003[_0xd416('0x5f')][_0xd416('0x55')]){case'IS':if(_0x1c6886!==_0xd416('0x60')&&_0x1c6886!==_0xd416('0x6b')){if(_['isArray'](_0x5cd003[_0xd416('0x55')])&&_0x5cd003[_0xd416('0x55')][_0xd416('0x39')]>0x1){_0x24d6f4[_0xd416('0x5c')](_0x5cd003['tableAlias']+'.'+_0x1c6886+_0xd416('0x6c'),_0x5cd003[_0xd416('0x55')]);}else{_0x24d6f4[_0xd416('0x5c')](_0x5cd003[_0xd416('0x61')]+'.'+_0x1c6886+_0xd416('0x62'),_0x5cd003[_0xd416('0x55')][0x0]);}}break;case'=':_0x24d6f4[_0xd416('0x5c')](_0x5cd003['tableAlias']+'.'+_0x1c6886+_0xd416('0x62'),_0x5cd003['value']);break;case _0xd416('0x63'):if(_0x1c6886===_0xd416('0x64')){_0x24d6f4[_0xd416('0x5c')]('c.firstName'+'\x20LIKE\x20?','%'+_0x5cd003[_0xd416('0x55')]+'%');_0x24d6f4['or']('c.lastName'+'\x20LIKE\x20?','%'+_0x5cd003[_0xd416('0x55')]+'%');_0x24d6f4['or'](_0xd416('0x68')+_0xd416('0x66'),'%'+_0x5cd003['value']+'%');}else{_0x24d6f4[_0xd416('0x5c')](_0x5cd003[_0xd416('0x61')]+'.'+_0x1c6886+'\x20LIKE\x20?','%'+_0x5cd003[_0xd416('0x55')]+'%');}break;case'>':_0x24d6f4[_0xd416('0x5c')](_0x5cd003[_0xd416('0x61')]+'.'+_0x1c6886+_0xd416('0x69'),_0x5cd003[_0xd416('0x55')]);break;case'<':_0x24d6f4[_0xd416('0x5c')](_0x5cd003['tableAlias']+'.'+_0x1c6886+_0xd416('0x6a'),_0x5cd003['value']);break;}}}});}else{var _0x3d3f81=_(Object[_0xd416('0x32')](_0x511811[_0xd416('0x33')]))[_0xd416('0x6d')](function(_0x5c71bd){return _0x1c9db7[_0xd416('0x3a')](_0x5c71bd)?_0x5c71bd:undefined;})[_0xd416('0x6e')](function(_0x359f9d){return!_['isNil'](_0x359f9d);})[_0xd416('0x55')]();if(!_['isEmpty'](_0x3d3f81)){_0x3d3f81[_0xd416('0x2e')](function(_0x15d28a){if(_0x15d28a===_0xd416('0x6f')){_0x41a931['where']('i.OpenchannelAccountId\x20IN\x20?',[]['concat'](_0x511811['query'][_0x15d28a]));}else if(_0x15d28a===_0xd416('0x54')){var _0x25fc95=JSON[_0xd416('0x70')](_0x511811[_0xd416('0x33')][_0x15d28a])['$gte'];var _0x3bb4ec=JSON[_0xd416('0x70')](_0x511811[_0xd416('0x33')][_0x15d28a])[_0xd416('0x71')];_0x41a931[_0xd416('0x3e')](_0xd416('0x5d'),_0x25fc95,_0x3bb4ec);}else{if(_0x511811[_0xd416('0x33')][_0x15d28a]===_0xd416('0x72')){_0x41a931[_0xd416('0x3e')]('i.'+_0x15d28a+_0xd416('0x73'));}else{_0x41a931[_0xd416('0x3e')]('i.'+_0x15d28a+_0xd416('0x62'),_0x511811['query'][_0x15d28a]);}}});}if(_0x511811[_0xd416('0x33')]['filter']){var _0x3bc23f=_0x511811[_0xd416('0x33')][_0xd416('0x6e')][_0xd416('0x74')]('\x5c','\x5c\x5c')[_0xd416('0x74')]('\x27\x27','\x27\x27\x27\x27');if(qs[_0xd416('0x75')](_0x3bc23f)){_0x24d6f4['or'](_0xd416('0x76'),_0x3bc23f+'%');}else{var _0x1f8656=[];_0x3bc23f[_0xd416('0x2d')]('\x20')['forEach'](function(_0xfefcb7){_0x1f8656['push']('+'+_0xfefcb7[_0xd416('0x77')]());});var _0xb96b7f=_0x1f8656[_0xd416('0x78')]('\x20');_0x24d6f4['or'](_0xd416('0x79'),_0xb96b7f)['or']('i.from\x20LIKE\x20?',_0x3bc23f+'%')['or'](_0xd416('0x7a'),_0x3bc23f+'%');}}}_0x41a931[_0xd416('0x3e')](_0x24d6f4);if(_0x3bc610['order']){_0x3bc610['order'][_0xd416('0x2e')](function(_0xb87d7c){_0x41a931[_0xd416('0x3c')]('i.'+_0xb87d7c[0x0],_0xb87d7c[0x1]===_0xd416('0x7b')?![]:!![]);});}_0x41a931['group']('i.id');var _0x5d6542={'type':db['Sequelize']['QueryTypes'][_0xd416('0x7c')],'raw':!![]};var _0x221f36=_0x41a931[_0xd416('0x7d')]()[_0xd416('0x41')](_0xd416('0x45'))[_0xd416('0x41')](_0xd416('0x7e'),'unreadMessages');if(!_0x511811[_0xd416('0x33')][_0xd416('0x53')]){if(_0x511811[_0xd416('0x33')][_0xd416('0x7f')]){if(_0x511811[_0xd416('0x33')][_0xd416('0x7f')]==0x1){_0x221f36[_0xd416('0x80')](_0xd416('0x81'));_0x41a931['having'](_0xd416('0x81'));}else{_0x221f36[_0xd416('0x80')](_0xd416('0x82'));_0x41a931[_0xd416('0x80')](_0xd416('0x82'));}}if(_0x511811[_0xd416('0x33')][_0xd416('0x83')]){var _0x2cbf96=_[_0xd416('0x5e')](_0x511811[_0xd416('0x33')][_0xd416('0x83')])?_0x511811[_0xd416('0x33')][_0xd416('0x83')]:new Array(_0x511811[_0xd416('0x33')][_0xd416('0x83')]);var _0x24fd48=squel['expr']();_0x2cbf96[_0xd416('0x2e')](function(_0x5c23fe){_0x24fd48['or'](_0xd416('0x84'),'%,'+_0x5c23fe+',%');});_0x41a931[_0xd416('0x80')](_0x24fd48);_0x221f36[_0xd416('0x4b')](_0xd416('0x85'),'it','it.OpenchannelInteractionId\x20=\x20i.id');_0x221f36[_0xd416('0x4b')]('tools_tags','t',_0xd416('0x86'));_0x221f36[_0xd416('0x3e')](_0xd416('0x87'),_0x2cbf96);}}else{var _0x25299f=JSON[_0xd416('0x70')](_0x511811[_0xd416('0x33')][_0xd416('0x53')]);_['keys'](_0x25299f)[_0xd416('0x2e')](function(_0x325b11){var _0x3623bc=_0x25299f[_0x325b11];if(_0x325b11==='TagId'){var _0x16a8da=_0x3623bc[_0xd416('0x55')];var _0x44a466=squel[_0xd416('0x52')]();_0x16a8da['forEach'](function(_0x119448){_0x44a466['or'](_0xd416('0x84'),'%,'+_0x119448+',%');});_0x41a931[_0xd416('0x80')](_0x44a466);_0x221f36[_0xd416('0x4b')](_0xd416('0x88'),'it',_0xd416('0x89'));_0x221f36['left_join']('tools_tags','t','t.id\x20=\x20it.TagId');_0x221f36[_0xd416('0x3e')](_0xd416('0x87'),_0x16a8da);}else if(_0x325b11===_0xd416('0x6b')){if(_0x3623bc['value'][_0xd416('0x39')]===0x1){if(_0x3623bc[_0xd416('0x55')][0x0]===0x1){_0x221f36['having'](_0xd416('0x81'));_0x41a931[_0xd416('0x80')](_0xd416('0x81'));}else{_0x221f36['having'](_0xd416('0x82'));_0x41a931[_0xd416('0x80')](_0xd416('0x82'));}}}});}db[_0xd416('0x8a')][_0xd416('0x33')](_0x221f36['toString'](),_0x5d6542)['then'](function(_0x539398){_0x245987[_0xd416('0x8b')]=_0x539398[_0xd416('0x39')];if(_0x245987[_0xd416('0x8b')]===0x0)return[];return db[_0xd416('0x8a')][_0xd416('0x33')](_0x46a00d[_0xd416('0x77')](),_0x5d6542)[_0xd416('0x26')](function(_0x503313){_0x553e31=_['keyBy'](_0x503313,'id');_0x5d6542=_['merge'](_0x5d6542,{'model':db[_0xd416('0x30')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x41a931[_0xd416('0x41')](_0xd416('0x7e'),_0xd416('0x6b'));_0x41a931[_0xd416('0x41')](_0xd416('0x8c'),_0xd416('0x8d'));_0x41a931[_0xd416('0x41')](_0xd416('0x8e'));_0x41a931['field'](_0xd416('0x65'),_0xd416('0x8f'));_0x41a931['field'](_0xd416('0x67'),_0xd416('0x90'));_0x41a931[_0xd416('0x41')](_0xd416('0x68'),_0xd416('0x91'));_0x41a931['field'](_0xd416('0x92'),_0xd416('0x93'));_0x41a931['field'](_0xd416('0x94'),_0xd416('0x95'));_0x41a931[_0xd416('0x41')](_0xd416('0x96'),_0xd416('0x97'));_0x41a931[_0xd416('0x41')]('GROUP_CONCAT(DISTINCT\x20t.id)',_0xd416('0x2c'));_0x41a931[_0xd416('0x4b')](_0xd416('0x85'),'it',_0xd416('0x98'));_0x41a931[_0xd416('0x4b')](_0xd416('0x44'),'t',_0xd416('0x86'));_0x41a931[_0xd416('0x1f')](_0x3bc610[_0xd416('0x1f')]);_0x41a931[_0xd416('0x1e')](_0x3bc610['offset']);return db[_0xd416('0x8a')][_0xd416('0x33')](_0x41a931['toString'](),_0x5d6542);})['then'](function(_0x4e9f8d){_0x5ce99f[_0xd416('0x3e')](_0xd416('0x99'),_[_0xd416('0x6d')](_0x4e9f8d,'id'));return db[_0xd416('0x8a')][_0xd416('0x33')](_0x5ce99f[_0xd416('0x77')](),_0x5d6542)[_0xd416('0x26')](function(_0x548ebb){var _0x375329=_[_0xd416('0x9a')](_0x548ebb,_0xd416('0x9b'));var _0x446a28=[];_0x4e9f8d[_0xd416('0x2e')](function(_0x505aa4){_0x446a28['push'](updateOpenchannelInteraction(_0x505aa4,_0x553e31,_0x375329));});return BPromise[_0xd416('0x9c')](_0x446a28);});});})[_0xd416('0x26')](function(_0x3ba696){_0x245987[_0xd416('0x9d')]=_0x3ba696;return _0x245987;})[_0xd416('0x26')](respondWithFilteredResult(_0x16bf28,_0x3bc610))[_0xd416('0x2f')](handleError(_0x16bf28,null));};exports[_0xd416('0x9e')]=function(_0x575273,_0xd50152){var _0x1ac3ed={'raw':![],'where':{'id':_0x575273[_0xd416('0x9f')]['id']}},_0x358a0e={};_0x358a0e[_0xd416('0x36')]=_[_0xd416('0x32')](db['OpenchannelInteraction'][_0xd416('0x31')]);_0x358a0e['query']=_[_0xd416('0x32')](_0x575273[_0xd416('0x33')]);_0x358a0e[_0xd416('0x34')]=_[_0xd416('0x35')](_0x358a0e[_0xd416('0x36')],_0x358a0e[_0xd416('0x33')]);_0x1ac3ed[_0xd416('0x37')]=_[_0xd416('0x35')](_0x358a0e['model'],qs[_0xd416('0x38')](_0x575273[_0xd416('0x33')]['fields']));_0x1ac3ed[_0xd416('0x37')]=_0x1ac3ed[_0xd416('0x37')][_0xd416('0x39')]?_0x1ac3ed['attributes']:_0x358a0e[_0xd416('0x36')];if(_0x575273[_0xd416('0x33')][_0xd416('0xa0')]){_0x1ac3ed['include']=[{'all':!![]}];}_0x1ac3ed=_['merge']({},_0x1ac3ed,_0x575273[_0xd416('0xa1')]);return db['OpenchannelInteraction']['find'](_0x1ac3ed)[_0xd416('0x26')](handleEntityNotFound(_0xd50152,null))[_0xd416('0x26')](respondWithResult(_0xd50152,null))[_0xd416('0x2f')](handleError(_0xd50152,null));};exports['create']=function(_0x110cac,_0x186010){return db[_0xd416('0x30')]['create'](_0x110cac[_0xd416('0xa2')],{})[_0xd416('0x26')](respondWithResult(_0x186010,0xc9))[_0xd416('0x2f')](handleError(_0x186010,null));};exports[_0xd416('0x25')]=function(_0x5cdf00,_0x5e0d3a){if(_0x5cdf00['body']['id']){delete _0x5cdf00[_0xd416('0xa2')]['id'];}return db[_0xd416('0x30')][_0xd416('0xa3')]({'where':{'id':_0x5cdf00['params']['id']}})[_0xd416('0x26')](handleEntityNotFound(_0x5e0d3a,null))[_0xd416('0x26')](saveUpdates(_0x5cdf00[_0xd416('0xa2')],null))[_0xd416('0x26')](respondWithResult(_0x5e0d3a,null))[_0xd416('0x2f')](handleError(_0x5e0d3a,null));};exports[_0xd416('0x27')]=function(_0x3edcb5,_0x2847c9){return db[_0xd416('0x30')][_0xd416('0xa3')]({'where':{'id':_0x3edcb5[_0xd416('0x9f')]['id']}})[_0xd416('0x26')](handleEntityNotFound(_0x2847c9,null))[_0xd416('0x26')](removeEntity(_0x2847c9,null))[_0xd416('0x2f')](handleError(_0x2847c9,null));};exports['describe']=function(_0x42fcf1,_0x3bcb5f){return db[_0xd416('0x30')][_0xd416('0xa4')]()['then'](respondWithResult(_0x3bcb5f,null))[_0xd416('0x2f')](handleError(_0x3bcb5f,null));};exports[_0xd416('0xa5')]=function(_0x59877c,_0x4ea254,_0x95162e){return db[_0xd416('0xa6')][_0xd416('0xa3')]({'where':{'id':_0x59877c['params']['id']}})['then'](handleEntityNotFound(_0x4ea254,null))[_0xd416('0x26')](function(_0x26a16c){if(_0x26a16c){return _0x26a16c[_0xd416('0xa5')](_0x59877c['body']['ids'],_[_0xd416('0xa7')](_0x59877c[_0xd416('0xa2')],[_0xd416('0xa8'),'id'])||{});}})[_0xd416('0x26')](respondWithResult(_0x4ea254,null))[_0xd416('0x2f')](handleError(_0x4ea254,null));};exports['getMessages']=function(_0x4d29b4,_0x3d006a,_0x1051ab){var _0x2ea43d={'raw':![],'where':{}};var _0x164289={};var _0x4f5d82={'count':0x0,'rows':[]};return db[_0xd416('0x30')]['findOne']({'where':{'id':_0x4d29b4['params']['id']}})['then'](handleEntityNotFound(_0x3d006a,null))[_0xd416('0x26')](function(_0x1467e9){if(_0x1467e9){_0x164289[_0xd416('0x36')]=_['keys'](db[_0xd416('0xa6')]['rawAttributes']);_0x164289[_0xd416('0x33')]=_[_0xd416('0x32')](_0x4d29b4[_0xd416('0x33')]);_0x164289[_0xd416('0x34')]=_[_0xd416('0x35')](_0x164289[_0xd416('0x36')],_0x164289['query']);_0x2ea43d['attributes']=_[_0xd416('0x35')](_0x164289['model'],qs[_0xd416('0x38')](_0x4d29b4[_0xd416('0x33')][_0xd416('0x38')]));_0x2ea43d['attributes']=_0x2ea43d[_0xd416('0x37')]['length']?_0x2ea43d[_0xd416('0x37')]:_0x164289[_0xd416('0x36')];if(!_0x4d29b4[_0xd416('0x33')][_0xd416('0x3a')](_0xd416('0x3b'))){_0x2ea43d[_0xd416('0x1f')]=qs['limit'](_0x4d29b4[_0xd416('0x33')][_0xd416('0x1f')]);_0x2ea43d[_0xd416('0x1e')]=qs[_0xd416('0x1e')](_0x4d29b4['query'][_0xd416('0x1e')]);}_0x2ea43d[_0xd416('0x3c')]=qs['sort'](_0x4d29b4[_0xd416('0x33')][_0xd416('0x3d')]);_0x2ea43d[_0xd416('0x3e')]=qs[_0xd416('0x34')](_[_0xd416('0x3f')](_0x4d29b4[_0xd416('0x33')],_0x164289[_0xd416('0x34')]));_0x2ea43d[_0xd416('0x3e')][_0xd416('0x9b')]=_0x1467e9['id'];if(_0x4d29b4[_0xd416('0x33')][_0xd416('0x6e')]){_0x2ea43d['where']=_[_0xd416('0xa9')](_0x2ea43d[_0xd416('0x3e')],{'$or':_[_0xd416('0x6d')](_0x2ea43d['attributes'],function(_0x1a05fa){var _0x3a0b80={};_0x3a0b80[_0x1a05fa]={'$like':'%'+_0x4d29b4[_0xd416('0x33')][_0xd416('0x6e')]+'%'};return _0x3a0b80;})});}if(_0x4d29b4['query'][_0xd416('0xaa')]){var _0x289e2e=_0x4d29b4['query'][_0xd416('0xaa')]['split'](',');var _0x59a63e={};_0x59a63e[_0x289e2e[0x0]]={'$gte':moment(_0x289e2e[0x1])[_0xd416('0x5a')](_0xd416('0xab'))};_0x2ea43d[_0xd416('0x3e')]=_[_0xd416('0xa9')](_0x2ea43d[_0xd416('0x3e')],_0x59a63e);}_0x2ea43d=_['merge']({},_0x2ea43d,_0x4d29b4[_0xd416('0xa1')]);return db[_0xd416('0xa6')][_0xd416('0x8b')]({'where':_0x2ea43d[_0xd416('0x3e')]})[_0xd416('0x26')](function(_0x2039a0){_0x4f5d82[_0xd416('0x8b')]=_0x2039a0;if(_0x4d29b4[_0xd416('0x33')][_0xd416('0xa0')]){_0x2ea43d[_0xd416('0xac')]=[{'all':!![]}];}return db['OpenchannelMessage'][_0xd416('0xad')](_0x2ea43d);})[_0xd416('0x26')](function(_0x24b749){_0x4f5d82[_0xd416('0x9d')]=_0x24b749;return _0x4f5d82;});}})[_0xd416('0x26')](respondWithFilteredResult(_0x3d006a,_0x2ea43d))[_0xd416('0x2f')](handleError(_0x3d006a,null));};exports[_0xd416('0xae')]=function(_0x939421,_0x228e1c,_0x4827cf){return db[_0xd416('0x30')]['find']({'where':{'id':_0x939421[_0xd416('0x9f')]['id']}})['then'](handleEntityNotFound(_0x228e1c,null))[_0xd416('0x26')](function(_0x1f5538){if(_0x1f5538){return _0x1f5538[_0xd416('0xaf')](_0x939421[_0xd416('0xa2')][_0xd416('0xa8')],_[_0xd416('0xa7')](_0x939421[_0xd416('0xa2')],['ids','id'])||{})[_0xd416('0xb0')](function(){return db[_0xd416('0xb1')][_0xd416('0xad')]({'attributes':['id','name',_0xd416('0x42')],'where':{'id':_0x939421[_0xd416('0xa2')][_0xd416('0xa8')]}});})[_0xd416('0x26')](function(_0x2c65f8){socket[_0xd416('0xb2')](_0xd416('0xb3'),{'id':Number(_0x939421[_0xd416('0x9f')]['id']),'tags':_0x2c65f8||[]});return{'id':Number(_0x939421[_0xd416('0x9f')]['id']),'tags':_0x2c65f8||[]};});}})[_0xd416('0x26')](respondWithResult(_0x228e1c,null))[_0xd416('0x2f')](handleError(_0x228e1c,null));};exports['removeTags']=function(_0x2319ed,_0x16ed49,_0x35d49c){return db[_0xd416('0x30')]['find']({'where':{'id':_0x2319ed[_0xd416('0x9f')]['id']}})[_0xd416('0x26')](handleEntityNotFound(_0x16ed49,null))[_0xd416('0x26')](function(_0x11aa0c){if(_0x11aa0c){return _0x11aa0c[_0xd416('0xb4')](_0x2319ed['query']['ids']);}})['then'](respondWithStatusCode(_0x16ed49,null))[_0xd416('0x2f')](handleError(_0x16ed49,null));};exports[_0xd416('0xb5')]=function(_0x33e803,_0x439f13){var _0x585f59=moment()[_0xd416('0xb6')]()[_0xd416('0x77')]();var _0x3a1d3a=path['join'](config[_0xd416('0xb7')],_0xd416('0xb8'),'files',_0xd416('0xb9'));var _0x11a4c0=path['join'](config[_0xd416('0xb7')],_0xd416('0xb8'),'files','attachments');var _0x4b98ee=path['join'](_0x3a1d3a,_0x585f59);var _0x4d05dd=util['format'](_0xd416('0xba'),_0x33e803['params']['id'],_0x585f59);var _0x13b00e=path[_0xd416('0x78')](_0x3a1d3a,_0x4d05dd);var _0x1eea06=![];return db[_0xd416('0x30')][_0xd416('0xa3')]({'where':{'id':_0x33e803[_0xd416('0x9f')]['id']},'include':[{'model':db[_0xd416('0xa6')],'as':'Messages','attributes':['id',_0xd416('0xa2'),_0xd416('0x54'),'direction','secret'],'include':[{'model':db[_0xd416('0xbb')],'as':_0xd416('0xbb'),'attributes':['id',_0xd416('0xbc')],'raw':!![]},{'model':db['CmContact'],'as':_0xd416('0xbd'),'attributes':['id',_0xd416('0xbe'),_0xd416('0xbf')],'raw':!![]},{'model':db[_0xd416('0xc0')],'as':_0xd416('0xc0'),'raw':!![]}]},{'model':db['OpenchannelAccount'],'as':'Account','attributes':['id',_0xd416('0x29')]},{'model':db[_0xd416('0xbb')],'as':_0xd416('0xc1'),'attributes':['id','fullname']}]})[_0xd416('0x26')](handleEntityNotFound(_0x439f13,null))['then'](function(_0x482171){if(_0x482171){var _0x52360c=_0x482171[_0xd416('0xc2')]({'plain':!![]});_0x1eea06=!![];var _0x18d777={'format':'A4','border':_0xd416('0xc3'),'header':{'height':_0xd416('0xc4'),'contents':{'first':_0xd416('0xc5')}},'footer':{'height':_0xd416('0xc6'),'contents':{'default':util[_0xd416('0x5a')]('<hr\x20class=\x22separator\x22/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22footer\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22left\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>%s</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>{{page}}/{{pages}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22right\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>%s</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>',util['format'](_0xd416('0xc7'),_0xd416('0xc8'),_0x52360c['id']),moment()['format'](_0xd416('0xc9'))['toString']())}}};fs[_0xd416('0xca')](_0x4b98ee);var _0x4bba2c={'channel':'Openchannel','account':_0x52360c['Account'][_0xd416('0x29')],'agent':_0x52360c[_0xd416('0xc1')]?_0x52360c[_0xd416('0xc1')][_0xd416('0xbc')]:_0xd416('0xcb'),'createdAt':moment(_0x52360c[_0xd416('0x54')])[_0xd416('0x5a')](_0xd416('0xab'))[_0xd416('0x77')](),'closedAt':_0x52360c[_0xd416('0xcc')]?moment(_0x52360c[_0xd416('0xcd')])[_0xd416('0x5a')](_0xd416('0xab'))['toString']():'','disposition':_0x52360c[_0xd416('0xce')],'visibility':_0x52360c[_0xd416('0xcf')]?'Public':'Private','messages':_(_0x52360c[_0xd416('0xd0')])[_0xd416('0x6e')]({'secret':![]})[_0xd416('0x6d')](function(_0x4aa88b){if(_0x4aa88b[_0xd416('0xc0')]){var _0x12f025=path[_0xd416('0x78')](_0x11a4c0,_0x4aa88b['Attachment'][_0xd416('0xd1')]);if(fs[_0xd416('0xd2')](_0x12f025)){fs[_0xd416('0xd3')](_0x12f025)[_0xd416('0xd4')](fs['createWriteStream'](path[_0xd416('0x78')](_0x4b98ee,_0x4aa88b[_0xd416('0xc0')][_0xd416('0xd1')])));}}return{'date':moment(_0x4aa88b['createdAt'])[_0xd416('0x5a')](_0xd416('0xab'))['toString'](),'sender':_0x4aa88b['direction']===_0xd416('0xd5')?_0x4aa88b[_0xd416('0xbb')]?_0x4aa88b['User'][_0xd416('0xbc')]:_0xd416('0xd6'):_0x4aa88b[_0xd416('0xbd')][_0xd416('0xbe')]+(_0x4aa88b[_0xd416('0xbd')][_0xd416('0xbf')]?'\x20'+_0x4aa88b[_0xd416('0xbd')][_0xd416('0xbf')]:''),'body':_0x4aa88b['Attachment']?_0x4aa88b[_0xd416('0xc0')][_0xd416('0xd1')]:_0x4aa88b[_0xd416('0xa2')],'direction':_0x4aa88b[_0xd416('0xd7')]==='out'?'A':'C','secret':_0x4aa88b['secret'],'attachment':_0x4aa88b[_0xd416('0xc0')]};})[_0xd416('0x55')]()};return ejs[_0xd416('0xd8')](path[_0xd416('0x78')](config[_0xd416('0xb7')],'server',_0xd416('0xd9'),'downloadInteraction.html'),{'interaction':_0x4bba2c})[_0xd416('0x26')](function(_0x27c323){return new BPromise(function(_0x5d4a19,_0x28ba57){pdf[_0xd416('0xda')](_0x27c323,_0x18d777)[_0xd416('0xdb')](path[_0xd416('0x78')](_0x4b98ee,'transcript-'+_0x52360c['id']+'-'+_0x585f59+'.pdf'),function(_0x6aea60,_0x460eed){if(_0x6aea60)return _0x28ba57(_0x6aea60);_0x5d4a19(_0x460eed);});});});}})[_0xd416('0x26')](function(){if(_0x1eea06){return new BPromise(function(_0x3cb29d,_0x31de5c){zipdir(_0x4b98ee,{'saveTo':_0x13b00e},function(_0xda56e6,_0x573384){if(_0xda56e6)return _0x31de5c(_0xda56e6);return _0x3cb29d(_0x573384);});})['then'](function(){return new BPromise(function(_0x5382f6,_0xb7f1d7){rimraf(_0x4b98ee,function(_0x16cce2){if(_0x16cce2)_0xb7f1d7(_0x16cce2);return _0x5382f6();});});})[_0xd416('0x26')](function(){return _0x439f13['download'](_0x13b00e,_0x4d05dd,function(_0x301a86){if(_0x301a86){console[_0xd416('0xdc')](_0xd416('0xdd'),_0x301a86);}else{fs[_0xd416('0xde')](_0x13b00e);}});});}else{return _0x439f13[_0xd416('0x1b')](0xc8);}})[_0xd416('0x2f')](handleError(_0x439f13,null));};
\ No newline at end of file
index 7804bf3..650a872 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6a67=['../../mysqldb','OpenchannelMessage','setMaxListeners','save','update','remove','getUsers','setDataValue','map','findAll','unreadMessages','length','emit','catch','hasOwnProperty','hook','exports','events','OpenchannelInteraction'];(function(_0x2ec461,_0x5f588a){var _0x28603d=function(_0x21114b){while(--_0x21114b){_0x2ec461['push'](_0x2ec461['shift']());}};_0x28603d(++_0x5f588a);}(_0x6a67,0x1d9));var _0x76a6=function(_0x514835,_0x95fcdf){_0x514835=_0x514835-0x0;var _0x44c151=_0x6a67[_0x514835];return _0x44c151;};'use strict';var EventEmitter=require(_0x76a6('0x0'));var OpenchannelInteraction=require('../../mysqldb')['db'][_0x76a6('0x1')];var OpenchannelMessage=require(_0x76a6('0x2'))['db'][_0x76a6('0x3')];var OpenchannelInteractionEvents=new EventEmitter();OpenchannelInteractionEvents[_0x76a6('0x4')](0x0);var events={'afterCreate':_0x76a6('0x5'),'afterUpdate':_0x76a6('0x6'),'afterDestroy':_0x76a6('0x7')};function emitEvent(_0x2e7530){return function(_0x53e223,_0x5ae0c0,_0x1267ab){_0x53e223[_0x76a6('0x8')]({'attributes':['id'],'raw':!![]})['then'](function(_0x5307a5){_0x53e223[_0x76a6('0x9')]('Users',_0x5307a5[_0x76a6('0xa')](function(_0xe3237c){return{'id':_0xe3237c['id']};}));return OpenchannelMessage[_0x76a6('0xb')]({'where':{'OpenchannelInteractionId':_0x53e223['id'],'direction':'in','read':![]},'raw':!![]});})['then'](function(_0x5e64b1){_0x53e223[_0x76a6('0x9')](_0x76a6('0xc'),_0x5e64b1[_0x76a6('0xd')]);OpenchannelInteractionEvents['emit'](_0x2e7530+':'+_0x53e223['id'],_0x53e223);OpenchannelInteractionEvents[_0x76a6('0xe')](_0x2e7530,_0x53e223);_0x1267ab(null);})[_0x76a6('0xf')](_0x1267ab(null));};}for(var e in events){if(events[_0x76a6('0x10')](e)){var event=events[e];OpenchannelInteraction[_0x76a6('0x11')](e,emitEvent(event));}}module[_0x76a6('0x12')]=OpenchannelInteractionEvents;
\ No newline at end of file
+var _0xec1d=['hasOwnProperty','exports','events','../../mysqldb','OpenchannelInteraction','OpenchannelMessage','setMaxListeners','getUsers','setDataValue','map','findAll','then','unreadMessages','length','emit'];(function(_0x3a84c1,_0x5d2169){var _0x3bd6aa=function(_0x13ff43){while(--_0x13ff43){_0x3a84c1['push'](_0x3a84c1['shift']());}};_0x3bd6aa(++_0x5d2169);}(_0xec1d,0xf2));var _0xdec1=function(_0x2e9767,_0x1f1a15){_0x2e9767=_0x2e9767-0x0;var _0x1b0e32=_0xec1d[_0x2e9767];return _0x1b0e32;};'use strict';var EventEmitter=require(_0xdec1('0x0'));var OpenchannelInteraction=require(_0xdec1('0x1'))['db'][_0xdec1('0x2')];var OpenchannelMessage=require(_0xdec1('0x1'))['db'][_0xdec1('0x3')];var OpenchannelInteractionEvents=new EventEmitter();OpenchannelInteractionEvents[_0xdec1('0x4')](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':'remove'};function emitEvent(_0x1cb5be){return function(_0xca3728,_0x2fdc65,_0x418188){_0xca3728[_0xdec1('0x5')]({'attributes':['id'],'raw':!![]})['then'](function(_0x501492){_0xca3728[_0xdec1('0x6')]('Users',_0x501492[_0xdec1('0x7')](function(_0x428d43){return{'id':_0x428d43['id']};}));return OpenchannelMessage[_0xdec1('0x8')]({'where':{'OpenchannelInteractionId':_0xca3728['id'],'direction':'in','read':![]},'raw':!![]});})[_0xdec1('0x9')](function(_0x4c0853){_0xca3728[_0xdec1('0x6')](_0xdec1('0xa'),_0x4c0853[_0xdec1('0xb')]);OpenchannelInteractionEvents[_0xdec1('0xc')](_0x1cb5be+':'+_0xca3728['id'],_0xca3728);OpenchannelInteractionEvents[_0xdec1('0xc')](_0x1cb5be,_0xca3728);_0x418188(null);})['catch'](_0x418188(null));};}for(var e in events){if(events[_0xdec1('0xd')](e)){var event=events[e];OpenchannelInteraction['hook'](e,emitEvent(event));}}module[_0xdec1('0xe')]=OpenchannelInteractionEvents;
\ No newline at end of file
index f309f65..9b7873b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd67b=['api','moment','bluebird','path','../../config/environment','exports','define','OpenchannelInteraction','openchannel_interactions','changed','closed','closedAt','format','util'];(function(_0x523adf,_0x3e1620){var _0x283870=function(_0xa0e816){while(--_0xa0e816){_0x523adf['push'](_0x523adf['shift']());}};_0x283870(++_0x3e1620);}(_0xd67b,0x133));var _0xbd67=function(_0x4a9e35,_0x4ca9a2){_0x4a9e35=_0x4a9e35-0x0;var _0x2c7bae=_0xd67b[_0x4a9e35];return _0x2c7bae;};'use strict';var _=require('lodash');var util=require(_0xbd67('0x0'));var logger=require('../../config/logger')(_0xbd67('0x1'));var moment=require(_0xbd67('0x2'));var BPromise=require(_0xbd67('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xbd67('0x4'));var rimraf=require('rimraf');var config=require(_0xbd67('0x5'));var attributes=require('./openchannelInteraction.attributes');module[_0xbd67('0x6')]=function(_0xa5c384,_0x2ad142){return _0xa5c384[_0xbd67('0x7')](_0xbd67('0x8'),attributes,{'tableName':_0xbd67('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x2d4af6,_0xfad775,_0x1da7f1){if(_0x2d4af6[_0xbd67('0xa')](_0xbd67('0xb'))){_0x2d4af6[_0xbd67('0xc')]=moment()[_0xbd67('0xd')]('YYYY-MM-DD\x20HH:mm:ss');}_0x1da7f1(null,_0x2d4af6);}}});};
\ No newline at end of file
+var _0xe015=['changed','closed','format','lodash','util','../../config/logger','bluebird','path','rimraf','../../config/environment','./openchannelInteraction.attributes','openchannel_interactions'];(function(_0x40f30e,_0x4729dc){var _0x2ea85a=function(_0x5e43e6){while(--_0x5e43e6){_0x40f30e['push'](_0x40f30e['shift']());}};_0x2ea85a(++_0x4729dc);}(_0xe015,0x13b));var _0x5e01=function(_0x465028,_0x4570ac){_0x465028=_0x465028-0x0;var _0xb783d4=_0xe015[_0x465028];return _0xb783d4;};'use strict';var _=require(_0x5e01('0x0'));var util=require(_0x5e01('0x1'));var logger=require(_0x5e01('0x2'))('api');var moment=require('moment');var BPromise=require(_0x5e01('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x5e01('0x4'));var rimraf=require(_0x5e01('0x5'));var config=require(_0x5e01('0x6'));var attributes=require(_0x5e01('0x7'));module['exports']=function(_0x1814cb,_0x3d2da2){return _0x1814cb['define']('OpenchannelInteraction',attributes,{'tableName':_0x5e01('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x3aeaef,_0x1420c2,_0x40d31f){if(_0x3aeaef[_0x5e01('0x9')](_0x5e01('0xa'))){_0x3aeaef['closedAt']=moment()[_0x5e01('0xb')]('YYYY-MM-DD\x20HH:mm:ss');}_0x40d31f(null,_0x3aeaef);}}});};
\ No newline at end of file
index a7b9a2f..15fc391 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c5a=['OpenchannelInteraction','update','options','raw','where','AddTagsToOpenchannelInteraction','find','addTags','body','ids','AddTags','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','jayson/promise','http','redis','localhost','socket.io-emitter','./openchannelInteraction.socket','register','request','then','info','OpenchannelInteraction,\x20%s,\x20%s','request\x20sent','debug','OpenchannelInteraction,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','UpdateOpenchannelInteraction'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0x9c5a,0x1c3));var _0xa9c5=function(_0x160ccb,_0x1da4cb){_0x160ccb=_0x160ccb-0x0;var _0x1f3d2a=_0x9c5a[_0x160ccb];return _0x1f3d2a;};'use strict';var _=require(_0xa9c5('0x0'));var util=require(_0xa9c5('0x1'));var moment=require('moment');var BPromise=require(_0xa9c5('0x2'));var rs=require(_0xa9c5('0x3'));var fs=require('fs');var Redis=require(_0xa9c5('0x4'));var db=require(_0xa9c5('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xa9c5('0x6'))(_0xa9c5('0x7'));var config=require('../../config/environment');var jayson=require(_0xa9c5('0x8'));var client=jayson['client'][_0xa9c5('0x9')]({'port':0x232a});config[_0xa9c5('0xa')]=_['defaults'](config['redis'],{'host':_0xa9c5('0xb'),'port':0x18eb});var socket=require(_0xa9c5('0xc'))(new Redis(config['redis']));require(_0xa9c5('0xd'))[_0xa9c5('0xe')](socket);function respondWithRpcPromise(_0x51c14c,_0x2e4f45,_0x40a79d){return new BPromise(function(_0x4a19c0,_0x4c55e9){return client[_0xa9c5('0xf')](_0x51c14c,_0x40a79d)[_0xa9c5('0x10')](function(_0x45f8d8){logger[_0xa9c5('0x11')](_0xa9c5('0x12'),_0x2e4f45,_0xa9c5('0x13'));logger[_0xa9c5('0x14')](_0xa9c5('0x15'),_0x2e4f45,_0xa9c5('0x13'),JSON[_0xa9c5('0x16')](_0x45f8d8));if(_0x45f8d8['error']){if(_0x45f8d8[_0xa9c5('0x17')][_0xa9c5('0x18')]===0x1f4){logger[_0xa9c5('0x17')](_0xa9c5('0x12'),_0x2e4f45,_0x45f8d8[_0xa9c5('0x17')][_0xa9c5('0x19')]);return _0x4c55e9(_0x45f8d8[_0xa9c5('0x17')][_0xa9c5('0x19')]);}logger[_0xa9c5('0x17')](_0xa9c5('0x12'),_0x2e4f45,_0x45f8d8['error'][_0xa9c5('0x19')]);return _0x4a19c0(_0x45f8d8[_0xa9c5('0x17')][_0xa9c5('0x19')]);}else{logger['info'](_0xa9c5('0x12'),_0x2e4f45,_0xa9c5('0x13'));_0x4a19c0(_0x45f8d8[_0xa9c5('0x1a')][_0xa9c5('0x19')]);}})[_0xa9c5('0x1b')](function(_0x349f27){logger[_0xa9c5('0x17')](_0xa9c5('0x12'),_0x2e4f45,_0x349f27);_0x4c55e9(_0x349f27);});});}exports[_0xa9c5('0x1c')]=function(_0x36c486){var _0x113c8f=this;return new Promise(function(_0x2d95f8,_0x54f8b9){return db[_0xa9c5('0x1d')][_0xa9c5('0x1e')](_0x36c486['body'],{'raw':_0x36c486['options']?_0x36c486[_0xa9c5('0x1f')][_0xa9c5('0x20')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x36c486[_0xa9c5('0x1f')]?_0x36c486[_0xa9c5('0x1f')][_0xa9c5('0x21')]||null:null,'attributes':_0x36c486[_0xa9c5('0x1f')]?_0x36c486['options']['attributes']||null:null,'limit':_0x36c486[_0xa9c5('0x1f')]?_0x36c486[_0xa9c5('0x1f')]['limit']||null:null})[_0xa9c5('0x10')](function(_0x424b4c){logger[_0xa9c5('0x11')](_0xa9c5('0x1c'),_0x36c486);logger[_0xa9c5('0x14')](_0xa9c5('0x1c'),_0x36c486,JSON[_0xa9c5('0x16')](_0x424b4c));_0x2d95f8(_0x424b4c);})['catch'](function(_0x4e8a7f){logger[_0xa9c5('0x17')]('UpdateOpenchannelInteraction',_0x4e8a7f[_0xa9c5('0x19')],_0x36c486);_0x54f8b9(_0x113c8f[_0xa9c5('0x17')](0x1f4,_0x4e8a7f['message']));});});};exports[_0xa9c5('0x22')]=function(_0x320dc0){return new Promise(function(_0x5f468b,_0x413edf){return db[_0xa9c5('0x1d')][_0xa9c5('0x23')]({'where':_0x320dc0[_0xa9c5('0x1f')]?_0x320dc0[_0xa9c5('0x1f')]['where']||null:null})[_0xa9c5('0x10')](function(_0x4cee90){if(_0x4cee90){return _0x4cee90[_0xa9c5('0x24')](_0x320dc0[_0xa9c5('0x25')][_0xa9c5('0x26')],_['omit'](_0x320dc0[_0xa9c5('0x25')],[_0xa9c5('0x26'),'id'])||{});}})['spread'](function(_0x3f11a9){logger[_0xa9c5('0x11')](_0xa9c5('0x27'),_0x320dc0);logger[_0xa9c5('0x14')](_0xa9c5('0x27'),_0x320dc0,JSON[_0xa9c5('0x16')](_0x3f11a9));_0x5f468b(_0x3f11a9);})[_0xa9c5('0x1b')](function(_0x4b9104){logger[_0xa9c5('0x17')](_0xa9c5('0x27'),_0x4b9104[_0xa9c5('0x19')],_0x320dc0);_0x413edf(_this[_0xa9c5('0x17')](0x1f4,_0x4b9104[_0xa9c5('0x19')]));});});};
\ No newline at end of file
+var _0x7da7=['options','where','attributes','limit','info','AddTagsToOpenchannelInteraction','ids','omit','spread','AddTags','lodash','util','moment','ioredis','../../mysqldb','../../config/logger','rpc','jayson/promise','client','redis','localhost','socket.io-emitter','./openchannelInteraction.socket','request','then','OpenchannelInteraction,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','UpdateOpenchannelInteraction','update','body'];(function(_0x354c01,_0x28a7f1){var _0x3a8262=function(_0x2896f9){while(--_0x2896f9){_0x354c01['push'](_0x354c01['shift']());}};_0x3a8262(++_0x28a7f1);}(_0x7da7,0x10d));var _0x77da=function(_0x366388,_0x4595a6){_0x366388=_0x366388-0x0;var _0x41c97e=_0x7da7[_0x366388];return _0x41c97e;};'use strict';var _=require(_0x77da('0x0'));var util=require(_0x77da('0x1'));var moment=require(_0x77da('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x77da('0x3'));var db=require(_0x77da('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x77da('0x5'))(_0x77da('0x6'));var config=require('../../config/environment');var jayson=require(_0x77da('0x7'));var client=jayson[_0x77da('0x8')]['http']({'port':0x232a});config[_0x77da('0x9')]=_['defaults'](config[_0x77da('0x9')],{'host':_0x77da('0xa'),'port':0x18eb});var socket=require(_0x77da('0xb'))(new Redis(config[_0x77da('0x9')]));require(_0x77da('0xc'))['register'](socket);function respondWithRpcPromise(_0x40c86e,_0xb55827,_0x172d7f){return new BPromise(function(_0x5ea12f,_0x35d06e){return client[_0x77da('0xd')](_0x40c86e,_0x172d7f)[_0x77da('0xe')](function(_0x2a675a){logger['info'](_0x77da('0xf'),_0xb55827,_0x77da('0x10'));logger[_0x77da('0x11')]('OpenchannelInteraction,\x20%s,\x20%s,\x20%s',_0xb55827,'request\x20sent',JSON[_0x77da('0x12')](_0x2a675a));if(_0x2a675a[_0x77da('0x13')]){if(_0x2a675a['error'][_0x77da('0x14')]===0x1f4){logger[_0x77da('0x13')](_0x77da('0xf'),_0xb55827,_0x2a675a[_0x77da('0x13')]['message']);return _0x35d06e(_0x2a675a[_0x77da('0x13')]['message']);}logger[_0x77da('0x13')](_0x77da('0xf'),_0xb55827,_0x2a675a[_0x77da('0x13')][_0x77da('0x15')]);return _0x5ea12f(_0x2a675a['error']['message']);}else{logger['info']('OpenchannelInteraction,\x20%s,\x20%s',_0xb55827,_0x77da('0x10'));_0x5ea12f(_0x2a675a[_0x77da('0x16')][_0x77da('0x15')]);}})[_0x77da('0x17')](function(_0x19a00c){logger[_0x77da('0x13')](_0x77da('0xf'),_0xb55827,_0x19a00c);_0x35d06e(_0x19a00c);});});}exports[_0x77da('0x18')]=function(_0x544104){var _0x492063=this;return new Promise(function(_0xd5a809,_0x4d1512){return db['OpenchannelInteraction'][_0x77da('0x19')](_0x544104[_0x77da('0x1a')],{'raw':_0x544104[_0x77da('0x1b')]?_0x544104['options']['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x544104[_0x77da('0x1b')]?_0x544104['options'][_0x77da('0x1c')]||null:null,'attributes':_0x544104[_0x77da('0x1b')]?_0x544104[_0x77da('0x1b')][_0x77da('0x1d')]||null:null,'limit':_0x544104[_0x77da('0x1b')]?_0x544104[_0x77da('0x1b')][_0x77da('0x1e')]||null:null})['then'](function(_0x4885ec){logger[_0x77da('0x1f')](_0x77da('0x18'),_0x544104);logger[_0x77da('0x11')](_0x77da('0x18'),_0x544104,JSON['stringify'](_0x4885ec));_0xd5a809(_0x4885ec);})[_0x77da('0x17')](function(_0x167240){logger[_0x77da('0x13')](_0x77da('0x18'),_0x167240[_0x77da('0x15')],_0x544104);_0x4d1512(_0x492063['error'](0x1f4,_0x167240[_0x77da('0x15')]));});});};exports[_0x77da('0x20')]=function(_0x1f2279){return new Promise(function(_0x2913f7,_0x496ecd){return db['OpenchannelInteraction']['find']({'where':_0x1f2279[_0x77da('0x1b')]?_0x1f2279[_0x77da('0x1b')][_0x77da('0x1c')]||null:null})[_0x77da('0xe')](function(_0x34228f){if(_0x34228f){return _0x34228f['addTags'](_0x1f2279[_0x77da('0x1a')][_0x77da('0x21')],_[_0x77da('0x22')](_0x1f2279[_0x77da('0x1a')],[_0x77da('0x21'),'id'])||{});}})[_0x77da('0x23')](function(_0x52c5be){logger[_0x77da('0x1f')](_0x77da('0x24'),_0x1f2279);logger[_0x77da('0x11')](_0x77da('0x24'),_0x1f2279,JSON[_0x77da('0x12')](_0x52c5be));_0x2913f7(_0x52c5be);})[_0x77da('0x17')](function(_0x3343b4){logger[_0x77da('0x13')]('AddTags',_0x3343b4['message'],_0x1f2279);_0x496ecd(_this[_0x77da('0x13')](0x1f4,_0x3343b4[_0x77da('0x15')]));});});};
\ No newline at end of file
index a2e4e19..5fbd8cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc589=['remove','emit','removeListener','register','length','save'];(function(_0x118733,_0x2bd820){var _0x4777af=function(_0x52886a){while(--_0x52886a){_0x118733['push'](_0x118733['shift']());}};_0x4777af(++_0x2bd820);}(_0xc589,0x83));var _0x9c58=function(_0x169abe,_0x52e6e9){_0x169abe=_0x169abe-0x0;var _0x4506c3=_0xc589[_0x169abe];return _0x4506c3;};'use strict';var OpenchannelInteractionEvents=require('./openchannelInteraction.events');var events=[_0x9c58('0x0'),_0x9c58('0x1'),'update'];function createListener(_0x2af677,_0x1f3edc){return function(_0x1b88e1){_0x1f3edc[_0x9c58('0x2')](_0x2af677,_0x1b88e1);};}function removeListener(_0x2fed35,_0x3186d9){return function(){OpenchannelInteractionEvents[_0x9c58('0x3')](_0x2fed35,_0x3186d9);};}exports[_0x9c58('0x4')]=function(_0x59d499){for(var _0x3b9350=0x0,_0x1daee8=events[_0x9c58('0x5')];_0x3b9350<_0x1daee8;_0x3b9350++){var _0x5f3316=events[_0x3b9350];var _0x6a3dbf=createListener('openchannelInteraction:'+_0x5f3316,_0x59d499);OpenchannelInteractionEvents['on'](_0x5f3316,_0x6a3dbf);}};
\ No newline at end of file
+var _0xefef=['update','emit','removeListener','length','openchannelInteraction:','./openchannelInteraction.events','save'];(function(_0x1313a2,_0x4e7c9f){var _0x246438=function(_0x3d0a79){while(--_0x3d0a79){_0x1313a2['push'](_0x1313a2['shift']());}};_0x246438(++_0x4e7c9f);}(_0xefef,0xa6));var _0xfefe=function(_0x32b993,_0x1c5989){_0x32b993=_0x32b993-0x0;var _0x482780=_0xefef[_0x32b993];return _0x482780;};'use strict';var OpenchannelInteractionEvents=require(_0xfefe('0x0'));var events=[_0xfefe('0x1'),'remove',_0xfefe('0x2')];function createListener(_0x4a235b,_0x14faff){return function(_0xdfbbcc){_0x14faff[_0xfefe('0x3')](_0x4a235b,_0xdfbbcc);};}function removeListener(_0x4af9f1,_0x2f4367){return function(){OpenchannelInteractionEvents[_0xfefe('0x4')](_0x4af9f1,_0x2f4367);};}exports['register']=function(_0x4c39ab){for(var _0x58dfa3=0x0,_0x3c354e=events[_0xfefe('0x5')];_0x58dfa3<_0x3c354e;_0x58dfa3++){var _0x221a65=events[_0x58dfa3];var _0x3a9731=createListener(_0xfefe('0x6')+_0x221a65,_0x4c39ab);OpenchannelInteractionEvents['on'](_0x221a65,_0x3a9731);}};
\ No newline at end of file
index e34196c..8b2edf5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd944=['destroy','util','path','express','Router','../../components/interaction/service','index','get','/describe','isAuthenticated','/:id','show','post','tracked','openchannel','create','put','delete'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xd944,0x145));var _0x4d94=function(_0x170522,_0x273df0){_0x170522=_0x170522-0x0;var _0x2a0a7b=_0xd944[_0x170522];return _0x2a0a7b;};'use strict';var multer=require('multer');var util=require(_0x4d94('0x0'));var path=require(_0x4d94('0x1'));var timeout=require('connect-timeout');var express=require(_0x4d94('0x2'));var router=express[_0x4d94('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x4d94('0x4'));var config=require('../../config/environment');var controller=require('./openchannelMessage.controller');router['get']('/',auth['isAuthenticated'](),controller[_0x4d94('0x5')]);router[_0x4d94('0x6')](_0x4d94('0x7'),auth[_0x4d94('0x8')](),controller['describe']);router['get'](_0x4d94('0x9'),auth[_0x4d94('0x8')](),controller[_0x4d94('0xa')]);router[_0x4d94('0xb')]('/',auth['isAuthenticated'](),interaction[_0x4d94('0xc')](_0x4d94('0xd'),'openchannelmessage:create'),controller[_0x4d94('0xe')]);router[_0x4d94('0xf')](_0x4d94('0x9'),auth['isAuthenticated'](),controller['update']);router['put']('/:id/accept',auth['isAuthenticated'](),controller['accept']);router[_0x4d94('0xf')]('/:id/reject',auth[_0x4d94('0x8')](),controller['reject']);router[_0x4d94('0x10')](_0x4d94('0x9'),auth['isAuthenticated'](),controller[_0x4d94('0x11')]);module['exports']=router;
\ No newline at end of file
+var _0x4a06=['accept','reject','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./openchannelMessage.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','tracked','openchannel','create','put','update'];(function(_0x480bc8,_0x1fac40){var _0x28c245=function(_0x22a049){while(--_0x22a049){_0x480bc8['push'](_0x480bc8['shift']());}};_0x28c245(++_0x1fac40);}(_0x4a06,0x1f2));var _0x64a0=function(_0x1b4f10,_0x5440cf){_0x1b4f10=_0x1b4f10-0x0;var _0x19b8ef=_0x4a06[_0x1b4f10];return _0x19b8ef;};'use strict';var multer=require(_0x64a0('0x0'));var util=require(_0x64a0('0x1'));var path=require(_0x64a0('0x2'));var timeout=require(_0x64a0('0x3'));var express=require(_0x64a0('0x4'));var router=express[_0x64a0('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x64a0('0x6'));var config=require(_0x64a0('0x7'));var controller=require(_0x64a0('0x8'));router[_0x64a0('0x9')]('/',auth[_0x64a0('0xa')](),controller[_0x64a0('0xb')]);router[_0x64a0('0x9')](_0x64a0('0xc'),auth[_0x64a0('0xa')](),controller[_0x64a0('0xd')]);router[_0x64a0('0x9')](_0x64a0('0xe'),auth[_0x64a0('0xa')](),controller[_0x64a0('0xf')]);router[_0x64a0('0x10')]('/',auth['isAuthenticated'](),interaction[_0x64a0('0x11')](_0x64a0('0x12'),'openchannelmessage:create'),controller[_0x64a0('0x13')]);router[_0x64a0('0x14')](_0x64a0('0xe'),auth[_0x64a0('0xa')](),controller[_0x64a0('0x15')]);router[_0x64a0('0x14')]('/:id/accept',auth[_0x64a0('0xa')](),controller[_0x64a0('0x16')]);router[_0x64a0('0x14')]('/:id/reject',auth[_0x64a0('0xa')](),controller[_0x64a0('0x17')]);router['delete'](_0x64a0('0xe'),auth[_0x64a0('0xa')](),controller[_0x64a0('0x18')]);module[_0x64a0('0x19')]=router;
\ No newline at end of file
index 5043f92..716c92f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2e86=['medium','BOOLEAN','ENUM','out','sequelize','exports'];(function(_0x1b5693,_0x2d04a7){var _0x3b629c=function(_0x45e651){while(--_0x45e651){_0x1b5693['push'](_0x1b5693['shift']());}};_0x3b629c(++_0x2d04a7);}(_0x2e86,0x1c0));var _0x62e8=function(_0x51ca86,_0x5d0ba1){_0x51ca86=_0x51ca86-0x0;var _0x2816aa=_0x2e86[_0x51ca86];return _0x2816aa;};'use strict';var Sequelize=require(_0x62e8('0x0'));module[_0x62e8('0x1')]={'body':{'type':Sequelize['TEXT'](_0x62e8('0x2')),'allowNull':![]},'read':{'type':Sequelize[_0x62e8('0x3')],'defaultValue':![]},'secret':{'type':Sequelize[_0x62e8('0x3')],'defaultValue':![]},'direction':{'type':Sequelize[_0x62e8('0x4')]('in',_0x62e8('0x5')),'defaultValue':_0x62e8('0x5'),'allowNull':![]},'readAt':{'type':Sequelize['DATE']}};
\ No newline at end of file
+var _0x6677=['DATE','sequelize','exports','TEXT','medium','BOOLEAN','ENUM','out'];(function(_0x2a41d5,_0x2f69d9){var _0x3e844c=function(_0x23ddce){while(--_0x23ddce){_0x2a41d5['push'](_0x2a41d5['shift']());}};_0x3e844c(++_0x2f69d9);}(_0x6677,0x171));var _0x7667=function(_0x4d3e27,_0x4032ba){_0x4d3e27=_0x4d3e27-0x0;var _0x4f67b9=_0x6677[_0x4d3e27];return _0x4f67b9;};'use strict';var Sequelize=require(_0x7667('0x0'));module[_0x7667('0x1')]={'body':{'type':Sequelize[_0x7667('0x2')](_0x7667('0x3')),'allowNull':![]},'read':{'type':Sequelize[_0x7667('0x4')],'defaultValue':![]},'secret':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'direction':{'type':Sequelize[_0x7667('0x5')]('in','out'),'defaultValue':_0x7667('0x6'),'allowNull':![]},'readAt':{'type':Sequelize[_0x7667('0x7')]}};
\ No newline at end of file
index cb8a4f0..0245057 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc852=['null','AcceptMessage','manual','event','EventManager','acceptmessage','reject','openchannel','interaction','RejectMessage','interface','SIP/%s','channel','rejectmessage','rimraf','fast-json-patch','request-promise','moment','mustache','path','to-csv','ejs','squel','crypto','jsforce','desk.js','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','defaults','redis','localhost','socket.io-emitter','./openchannelMessage.socket','register','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','then','OpenchannelMessage,\x20%s,\x20%s','debug','OpenchannelMessage,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','info','result','catch','sendStatus','status','end','json','count','offset','set','Content-Range','save','update','destroy','stack','name','send','keys','query','filters','model','intersection','attributes','nolimit','limit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','field','options','OpenchannelMessage','includeAll','include','findAll','rows','show','params','rawAttributes','fields','length','find','create','body','describe','openchannel-interactions','accept','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','get','OpenchannelInteraction','OpenchannelInteractionId','read1stAt','user','role','stringify'];(function(_0x1069d8,_0x7c831b){var _0x1f74a8=function(_0x3dfa3b){while(--_0x3dfa3b){_0x1069d8['push'](_0x1069d8['shift']());}};_0x1f74a8(++_0x7c831b);}(_0xc852,0x1da));var _0x2c85=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xc852[_0x20a584];return _0x4b41a8;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x2c85('0x0'));var zipdir=require('zip-dir');var jsonpatch=require(_0x2c85('0x1'));var rp=require(_0x2c85('0x2'));var moment=require(_0x2c85('0x3'));var BPromise=require('bluebird');var Mustache=require(_0x2c85('0x4'));var util=require('util');var path=require(_0x2c85('0x5'));var sox=require('sox');var csv=require(_0x2c85('0x6'));var ejs=require(_0x2c85('0x7'));var fs=require('fs');var _=require('lodash');var squel=require(_0x2c85('0x8'));var crypto=require(_0x2c85('0x9'));var jsforce=require(_0x2c85('0xa'));var deskjs=require(_0x2c85('0xb'));var toCsv=require(_0x2c85('0x6'));var querystring=require('querystring');var Papa=require(_0x2c85('0xc'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x2c85('0xd'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x2c85('0xe'))(_0x2c85('0xf'));var utils=require(_0x2c85('0x10'));var config=require('../../config/environment');var db=require(_0x2c85('0x11'))['db'];config['redis']=_[_0x2c85('0x12')](config[_0x2c85('0x13')],{'host':_0x2c85('0x14'),'port':0x18eb});var socket=require(_0x2c85('0x15'))(new Redis(config[_0x2c85('0x13')]));require(_0x2c85('0x16'))[_0x2c85('0x17')](socket);var jayson=require(_0x2c85('0x18'));var client=jayson[_0x2c85('0x19')]['http']({'port':0x232c});var client9002=jayson['client'][_0x2c85('0x1a')]({'port':0x232a});function checkPasswordPattern(_0xbe7492,_0x539119,_0x461bc4){if(_0x461bc4){var _0x4d9193=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x4d9193[_0x2c85('0x1b')](_0x539119)){return _0xbe7492;}else{throw new Error(_0x2c85('0x1c'));}}else{return _0xbe7492;}}function respondWithRpcPromise(_0x293ecb,_0xd1ee9d,_0x190b4c,_0x5ef13c){return new BPromise(function(_0xa6cfd2,_0x38c572){var _0x14fcd9=_0x5ef13c||client;return _0x14fcd9['request'](_0x293ecb,_0x190b4c)[_0x2c85('0x1d')](function(_0x1f1d14){logger['info'](_0x2c85('0x1e'),_0xd1ee9d,'request\x20sent');logger[_0x2c85('0x1f')](_0x2c85('0x20'),_0xd1ee9d,_0x2c85('0x21'),JSON['stringify'](_0x1f1d14));if(_0x1f1d14[_0x2c85('0x22')]){if(_0x1f1d14['error'][_0x2c85('0x23')]===0x1f4){logger['error']('OpenchannelMessage,\x20%s,\x20%s',_0xd1ee9d,_0x1f1d14[_0x2c85('0x22')][_0x2c85('0x24')]);return _0x38c572(_0x1f1d14[_0x2c85('0x22')][_0x2c85('0x24')]);}logger[_0x2c85('0x22')]('OpenchannelMessage,\x20%s,\x20%s',_0xd1ee9d,_0x1f1d14[_0x2c85('0x22')][_0x2c85('0x24')]);return _0xa6cfd2(_0x1f1d14[_0x2c85('0x22')]['message']);}else{logger[_0x2c85('0x25')](_0x2c85('0x1e'),_0xd1ee9d,_0x2c85('0x21'));_0xa6cfd2(_0x1f1d14[_0x2c85('0x26')][_0x2c85('0x24')]);}})[_0x2c85('0x27')](function(_0x359526){logger['error']('OpenchannelMessage,\x20%s,\x20%s',_0xd1ee9d,_0x359526);_0x38c572(_0x359526);});});}function respondWithStatusCode(_0x470836,_0x4ab4bc){_0x4ab4bc=_0x4ab4bc||0xcc;return function(_0x4c6ee8){if(_0x4c6ee8){return _0x470836[_0x2c85('0x28')](_0x4ab4bc);}return _0x470836[_0x2c85('0x29')](_0x4ab4bc)[_0x2c85('0x2a')]();};}function respondWithResult(_0x53b72f,_0x38cbd4){_0x38cbd4=_0x38cbd4||0xc8;return function(_0xb0fbe4){if(_0xb0fbe4){return _0x53b72f[_0x2c85('0x29')](_0x38cbd4)[_0x2c85('0x2b')](_0xb0fbe4);}};}function respondWithFilteredResult(_0x350aa3,_0x15d8be){return function(_0xb21bde){if(_0xb21bde){var _0x38c655=_0xb21bde[_0x2c85('0x2c')],_0x2b0393=_0x15d8be[_0x2c85('0x2d')],_0x485eaa=_0x15d8be['offset']+_0x15d8be['limit'],_0x57cd51;if(_0x485eaa>=_0x38c655){_0x485eaa=_0x38c655;_0x57cd51=0xc8;}else{_0x57cd51=0xce;}_0x350aa3['status'](_0x57cd51);return _0x350aa3[_0x2c85('0x2e')](_0x2c85('0x2f'),_0x2b0393+'-'+_0x485eaa+'/'+_0x38c655)[_0x2c85('0x2b')](_0xb21bde);}return null;};}function patchUpdates(_0x1435f2){return function(_0x35b295){try{jsonpatch['apply'](_0x35b295,_0x1435f2,!![]);}catch(_0x33e008){return BPromise['reject'](_0x33e008);}return _0x35b295[_0x2c85('0x30')]();};}function saveUpdates(_0x2f93c4,_0x2f99e5){return function(_0x4836a4){if(_0x4836a4){return _0x4836a4[_0x2c85('0x31')](_0x2f93c4)[_0x2c85('0x1d')](function(_0x5bd70d){return _0x5bd70d;});}return null;};}function removeEntity(_0x1ced22,_0x1a6efb){return function(_0xd62038){if(_0xd62038){return _0xd62038[_0x2c85('0x32')]()[_0x2c85('0x1d')](function(){_0x1ced22['status'](0xcc)[_0x2c85('0x2a')]();});}};}function handleEntityNotFound(_0x2122f5,_0x26801a){return function(_0x375a09){if(!_0x375a09){_0x2122f5[_0x2c85('0x28')](0x194);}return _0x375a09;};}function handleError(_0x463635,_0x2f6740){_0x2f6740=_0x2f6740||0x1f4;return function(_0x5bbdbd){logger[_0x2c85('0x22')](_0x5bbdbd[_0x2c85('0x33')]);if(_0x5bbdbd['name']){delete _0x5bbdbd[_0x2c85('0x34')];}_0x463635['status'](_0x2f6740)[_0x2c85('0x35')](_0x5bbdbd);};}exports['index']=function(_0x370d04,_0x33dd00){var _0x44272c={},_0x255c91={},_0x2b0a4c={'count':0x0,'rows':[]};var _0x14561a=db['OpenchannelMessage']['rawAttributes'];_0x255c91['model']=_[_0x2c85('0x36')](_0x14561a);_0x255c91[_0x2c85('0x37')]=_['keys'](_0x370d04[_0x2c85('0x37')]);_0x255c91[_0x2c85('0x38')]=_['intersection'](_0x255c91[_0x2c85('0x39')],_0x255c91['query']);_0x44272c['attributes']=_[_0x2c85('0x3a')](_0x255c91[_0x2c85('0x39')],qs['fields'](_0x370d04[_0x2c85('0x37')]['fields']));_0x44272c[_0x2c85('0x3b')]=_0x44272c[_0x2c85('0x3b')]['length']?_0x44272c[_0x2c85('0x3b')]:_0x255c91[_0x2c85('0x39')];if(!_0x370d04[_0x2c85('0x37')]['hasOwnProperty'](_0x2c85('0x3c'))){_0x44272c[_0x2c85('0x3d')]=qs[_0x2c85('0x3d')](_0x370d04[_0x2c85('0x37')][_0x2c85('0x3d')]);_0x44272c[_0x2c85('0x2d')]=qs[_0x2c85('0x2d')](_0x370d04['query'][_0x2c85('0x2d')]);}_0x44272c[_0x2c85('0x3e')]=qs[_0x2c85('0x3f')](_0x370d04[_0x2c85('0x37')][_0x2c85('0x3f')]);_0x44272c[_0x2c85('0x40')]=qs[_0x2c85('0x38')](_[_0x2c85('0x41')](_0x370d04['query'],_0x255c91[_0x2c85('0x38')]));if(_0x370d04[_0x2c85('0x37')][_0x2c85('0x42')]){_0x44272c[_0x2c85('0x40')]=_[_0x2c85('0x43')](_0x44272c['where'],{'$or':_['map'](_0x14561a,function(_0x39ff6f){if(_0x39ff6f[_0x2c85('0x44')][_0x2c85('0x45')]!==_0x2c85('0x46')){var _0x4384d4={};_0x4384d4[_0x39ff6f[_0x2c85('0x47')]]={'$like':'%'+_0x370d04[_0x2c85('0x37')][_0x2c85('0x42')]+'%'};return _0x4384d4;}})});}_0x44272c=_[_0x2c85('0x43')]({},_0x44272c,_0x370d04[_0x2c85('0x48')]);var _0x5650a1={'where':_0x44272c[_0x2c85('0x40')]};return db[_0x2c85('0x49')][_0x2c85('0x2c')](_0x5650a1)[_0x2c85('0x1d')](function(_0xe4c6a4){_0x2b0a4c[_0x2c85('0x2c')]=_0xe4c6a4;if(_0x370d04[_0x2c85('0x37')][_0x2c85('0x4a')]){_0x44272c[_0x2c85('0x4b')]=[{'all':!![]}];}return db[_0x2c85('0x49')][_0x2c85('0x4c')](_0x44272c);})['then'](function(_0x1fcf1f){_0x2b0a4c[_0x2c85('0x4d')]=_0x1fcf1f;return _0x2b0a4c;})[_0x2c85('0x1d')](respondWithFilteredResult(_0x33dd00,_0x44272c))['catch'](handleError(_0x33dd00,null));};exports[_0x2c85('0x4e')]=function(_0x4fd7c1,_0x1e091f){var _0x2708a5={'raw':!![],'where':{'id':_0x4fd7c1[_0x2c85('0x4f')]['id']}},_0x1a8d25={};_0x1a8d25[_0x2c85('0x39')]=_[_0x2c85('0x36')](db['OpenchannelMessage'][_0x2c85('0x50')]);_0x1a8d25[_0x2c85('0x37')]=_[_0x2c85('0x36')](_0x4fd7c1['query']);_0x1a8d25[_0x2c85('0x38')]=_[_0x2c85('0x3a')](_0x1a8d25[_0x2c85('0x39')],_0x1a8d25[_0x2c85('0x37')]);_0x2708a5[_0x2c85('0x3b')]=_[_0x2c85('0x3a')](_0x1a8d25[_0x2c85('0x39')],qs[_0x2c85('0x51')](_0x4fd7c1[_0x2c85('0x37')][_0x2c85('0x51')]));_0x2708a5[_0x2c85('0x3b')]=_0x2708a5['attributes'][_0x2c85('0x52')]?_0x2708a5[_0x2c85('0x3b')]:_0x1a8d25[_0x2c85('0x39')];if(_0x4fd7c1[_0x2c85('0x37')][_0x2c85('0x4a')]){_0x2708a5[_0x2c85('0x4b')]=[{'all':!![]}];}_0x2708a5=_[_0x2c85('0x43')]({},_0x2708a5,_0x4fd7c1[_0x2c85('0x48')]);return db[_0x2c85('0x49')][_0x2c85('0x53')](_0x2708a5)[_0x2c85('0x1d')](handleEntityNotFound(_0x1e091f,null))[_0x2c85('0x1d')](respondWithResult(_0x1e091f,null))[_0x2c85('0x27')](handleError(_0x1e091f,null));};exports[_0x2c85('0x54')]=function(_0x4b676b,_0x29b20e){return db[_0x2c85('0x49')][_0x2c85('0x54')](_0x4b676b[_0x2c85('0x55')],{})['then'](respondWithResult(_0x29b20e,0xc9))['catch'](handleError(_0x29b20e,null));};exports[_0x2c85('0x31')]=function(_0x37a26e,_0x383b81){if(_0x37a26e['body']['id']){delete _0x37a26e[_0x2c85('0x55')]['id'];}return db['OpenchannelMessage']['find']({'where':{'id':_0x37a26e[_0x2c85('0x4f')]['id']}})['then'](handleEntityNotFound(_0x383b81,null))['then'](saveUpdates(_0x37a26e[_0x2c85('0x55')],null))['then'](respondWithResult(_0x383b81,null))[_0x2c85('0x27')](handleError(_0x383b81,null));};exports[_0x2c85('0x32')]=function(_0x26309d,_0x292e29){return db[_0x2c85('0x49')][_0x2c85('0x53')]({'where':{'id':_0x26309d[_0x2c85('0x4f')]['id']}})[_0x2c85('0x1d')](handleEntityNotFound(_0x292e29,null))[_0x2c85('0x1d')](removeEntity(_0x292e29,null))['catch'](handleError(_0x292e29,null));};exports[_0x2c85('0x56')]=function(_0xb419f6,_0xd010fd){return db[_0x2c85('0x49')][_0x2c85('0x56')]()[_0x2c85('0x1d')](respondWithResult(_0xd010fd,null))[_0x2c85('0x27')](handleError(_0xd010fd,null));};var interaction_log=require(_0x2c85('0xe'))(_0x2c85('0x57'));exports[_0x2c85('0x58')]=function(_0x2cc838,_0x5645c6,_0x5d2ff8){var _0x57af99={'channel':'openchannel'};if(_0x2cc838['body']['id']){delete _0x2cc838[_0x2c85('0x55')]['id'];}_0x2cc838['body'][_0x2c85('0x59')]=!![];_0x2cc838[_0x2c85('0x55')][_0x2c85('0x5a')]=moment()[_0x2c85('0x5b')](_0x2c85('0x5c'));_0x2cc838[_0x2c85('0x55')]['UserId']=_0x2cc838[_0x2c85('0x55')][_0x2c85('0x5d')]||_0x2cc838['user']['id'];return db[_0x2c85('0x49')][_0x2c85('0x53')]({'where':{'id':_0x2cc838[_0x2c85('0x4f')]['id'],'UserId':null},'include':[{'model':db['CmContact'],'as':'Contact'}]})[_0x2c85('0x1d')](handleEntityNotFound(_0x5645c6,null))[_0x2c85('0x1d')](saveUpdates(_0x2cc838[_0x2c85('0x55')],null))[_0x2c85('0x1d')](function(_0xfdba47){if(_0xfdba47){_0x57af99[_0x2c85('0x24')]=_0xfdba47[_0x2c85('0x5e')]({'plain':!![]});return db[_0x2c85('0x5f')]['find']({'where':{'id':_0xfdba47[_0x2c85('0x60')]}});}return null;})[_0x2c85('0x1d')](handleEntityNotFound(_0x5645c6,null))[_0x2c85('0x1d')](function(_0x1ff03c){if(_0x1ff03c){return _0x1ff03c['update']({'UserId':_0x2cc838[_0x2c85('0x55')]['UserId'],'read1stAt':_['isNil'](_0x1ff03c[_0x2c85('0x61')])?moment()[_0x2c85('0x5b')](_0x2c85('0x5c')):undefined});}return null;})[_0x2c85('0x1d')](function(_0x2f3fae){if(_0x2f3fae){_0x57af99['interaction']=_0x2f3fae[_0x2c85('0x5e')]({'plain':!![]});interaction_log[_0x2c85('0x25')]('[OPENCHANNELMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x2cc838[_0x2c85('0x62')]['id'],_0x2cc838[_0x2c85('0x62')][_0x2c85('0x34')],_0x2cc838[_0x2c85('0x62')][_0x2c85('0x63')],_0x57af99['interaction']['id'],_0x2cc838[_0x2c85('0x55')]?JSON[_0x2c85('0x64')](_0x2cc838[_0x2c85('0x55')]):_0x2c85('0x65'));return respondWithRpcPromise(_0x2c85('0x66'),'acceptMessage',_0x57af99);}return null;})[_0x2c85('0x1d')](function(_0x464dba){if(_0x464dba){if(_0x2cc838[_0x2c85('0x55')][_0x2c85('0x67')]){_0x57af99[_0x2c85('0x24')]['interface']=util[_0x2c85('0x5b')]('SIP/%s',_0x2cc838[_0x2c85('0x62')][_0x2c85('0x34')]);_0x57af99[_0x2c85('0x24')]['channel']=_0x57af99['channel'];_0x57af99[_0x2c85('0x24')][_0x2c85('0x68')]=_0x2c85('0x58');return respondWithRpcPromise(_0x2c85('0x69'),_0x2c85('0x69'),{'event':_0x2c85('0x6a'),'message':_0x57af99['message']},client9002)[_0x2c85('0x1d')](function(){return _0x57af99;});}return _0x57af99;}return null;})['then'](respondWithResult(_0x5645c6,null))[_0x2c85('0x27')](handleError(_0x5645c6,null));};var interaction_log=require(_0x2c85('0xe'))(_0x2c85('0x57'));exports[_0x2c85('0x6b')]=function(_0x2bd1e8,_0x422feb,_0x4910b3){var _0x24b693={'agent':{},'channel':_0x2c85('0x6c')};if(_0x2bd1e8[_0x2c85('0x55')]['id']){delete _0x2bd1e8[_0x2c85('0x55')]['id'];}_0x2bd1e8[_0x2c85('0x55')][_0x2c85('0x5d')]=_0x2bd1e8[_0x2c85('0x55')]['UserId']||_0x2bd1e8[_0x2c85('0x62')]['id'];_0x24b693['agent']['id']=_0x2bd1e8[_0x2c85('0x55')][_0x2c85('0x5d')];return db[_0x2c85('0x49')][_0x2c85('0x53')]({'where':{'id':_0x2bd1e8[_0x2c85('0x4f')]['id'],'UserId':null}})[_0x2c85('0x1d')](handleEntityNotFound(_0x422feb,null))[_0x2c85('0x1d')](function(_0x4464a3){if(_0x4464a3){_0x24b693[_0x2c85('0x24')]=_0x4464a3['get']({'plain':!![]});return db[_0x2c85('0x5f')][_0x2c85('0x53')]({'where':{'id':_0x4464a3[_0x2c85('0x60')]}});}return null;})[_0x2c85('0x1d')](handleEntityNotFound(_0x422feb,null))[_0x2c85('0x1d')](function(_0x1a0733){if(_0x1a0733){_0x24b693[_0x2c85('0x6d')]=_0x1a0733[_0x2c85('0x5e')]({'plain':!![]});interaction_log[_0x2c85('0x25')]('[OPENCHANNELMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x2bd1e8['user']['id'],_0x2bd1e8['user'][_0x2c85('0x34')],_0x2bd1e8[_0x2c85('0x62')][_0x2c85('0x63')],_0x24b693['interaction']['id'],_0x2bd1e8[_0x2c85('0x55')]?JSON[_0x2c85('0x64')](_0x2bd1e8[_0x2c85('0x55')]):_0x2c85('0x65'));return respondWithRpcPromise(_0x2c85('0x6e'),'rejectMessage',_0x24b693);}return null;})[_0x2c85('0x1d')](function(_0x26dfca){if(_0x26dfca){_0x26dfca[_0x2c85('0x24')][_0x2c85('0x6f')]=util[_0x2c85('0x5b')](_0x2c85('0x70'),_0x2bd1e8['user']['name']);_0x26dfca[_0x2c85('0x24')]['channel']=_0x24b693[_0x2c85('0x71')];_0x26dfca[_0x2c85('0x24')]['event']=_0x2c85('0x6b');respondWithRpcPromise(_0x2c85('0x69'),'EventManager',{'event':_0x2c85('0x72'),'message':_0x26dfca['message']},client9002);return _0x24b693;}return null;})['then'](respondWithResult(_0x422feb,null))[_0x2c85('0x27')](handleError(_0x422feb,null));};
\ No newline at end of file
+var _0x8b91=['options','includeAll','include','findAll','rows','show','params','find','create','body','describe','openchannel','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','Contact','get','OpenchannelInteraction','OpenchannelInteractionId','isNil','read1stAt','interaction','[OPENCHANNELMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','AcceptMessage','acceptMessage','manual','interface','channel','event','accept','EventManager','acceptmessage','[OPENCHANNELMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','null','RejectMessage','rejectMessage','SIP/%s','rejectmessage','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./openchannelMessage.socket','register','jayson/promise','http','client','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','OpenchannelMessage,\x20%s,\x20%s','request\x20sent','OpenchannelMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','catch','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','then','destroy','name','send','index','OpenchannelMessage','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','limit','order','sort','where','pick','filter','map','key','VIRTUAL','merge'];(function(_0x1f6bcc,_0x2f7916){var _0x35c7ae=function(_0x57ac83){while(--_0x57ac83){_0x1f6bcc['push'](_0x1f6bcc['shift']());}};_0x35c7ae(++_0x2f7916);}(_0x8b91,0x19e));var _0x18b9=function(_0x3146d9,_0x5b21c0){_0x3146d9=_0x3146d9-0x0;var _0x3c043f=_0x8b91[_0x3146d9];return _0x3c043f;};'use strict';var pdf=require(_0x18b9('0x0'));var emlformat=require(_0x18b9('0x1'));var rimraf=require(_0x18b9('0x2'));var zipdir=require(_0x18b9('0x3'));var jsonpatch=require(_0x18b9('0x4'));var rp=require(_0x18b9('0x5'));var moment=require('moment');var BPromise=require(_0x18b9('0x6'));var Mustache=require('mustache');var util=require('util');var path=require(_0x18b9('0x7'));var sox=require(_0x18b9('0x8'));var csv=require(_0x18b9('0x9'));var ejs=require(_0x18b9('0xa'));var fs=require('fs');var _=require(_0x18b9('0xb'));var squel=require(_0x18b9('0xc'));var crypto=require(_0x18b9('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x18b9('0xe'));var toCsv=require('to-csv');var querystring=require(_0x18b9('0xf'));var Papa=require('papaparse');var Redis=require(_0x18b9('0x10'));var authService=require('../../components/auth/service');var qs=require(_0x18b9('0x11'));var hardwareService=require(_0x18b9('0x12'));var logger=require(_0x18b9('0x13'))(_0x18b9('0x14'));var utils=require(_0x18b9('0x15'));var config=require(_0x18b9('0x16'));var db=require(_0x18b9('0x17'))['db'];config[_0x18b9('0x18')]=_[_0x18b9('0x19')](config[_0x18b9('0x18')],{'host':_0x18b9('0x1a'),'port':0x18eb});var socket=require(_0x18b9('0x1b'))(new Redis(config[_0x18b9('0x18')]));require(_0x18b9('0x1c'))[_0x18b9('0x1d')](socket);var jayson=require(_0x18b9('0x1e'));var client=jayson['client'][_0x18b9('0x1f')]({'port':0x232c});var client9002=jayson[_0x18b9('0x20')][_0x18b9('0x1f')]({'port':0x232a});function checkPasswordPattern(_0x14570e,_0x5d8cd8,_0x4b9b27){if(_0x4b9b27){var _0x30348f=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x30348f[_0x18b9('0x21')](_0x5d8cd8)){return _0x14570e;}else{throw new Error(_0x18b9('0x22'));}}else{return _0x14570e;}}function respondWithRpcPromise(_0x1835d3,_0x56d7a6,_0x5bb6a9,_0x6edee2){return new BPromise(function(_0x1b5acf,_0x56b847){var _0xb03aac=_0x6edee2||client;return _0xb03aac[_0x18b9('0x23')](_0x1835d3,_0x5bb6a9)['then'](function(_0x20b211){logger['info'](_0x18b9('0x24'),_0x56d7a6,_0x18b9('0x25'));logger['debug'](_0x18b9('0x26'),_0x56d7a6,_0x18b9('0x25'),JSON[_0x18b9('0x27')](_0x20b211));if(_0x20b211[_0x18b9('0x28')]){if(_0x20b211[_0x18b9('0x28')][_0x18b9('0x29')]===0x1f4){logger[_0x18b9('0x28')](_0x18b9('0x24'),_0x56d7a6,_0x20b211[_0x18b9('0x28')]['message']);return _0x56b847(_0x20b211[_0x18b9('0x28')][_0x18b9('0x2a')]);}logger['error'](_0x18b9('0x24'),_0x56d7a6,_0x20b211[_0x18b9('0x28')][_0x18b9('0x2a')]);return _0x1b5acf(_0x20b211[_0x18b9('0x28')][_0x18b9('0x2a')]);}else{logger[_0x18b9('0x2b')](_0x18b9('0x24'),_0x56d7a6,_0x18b9('0x25'));_0x1b5acf(_0x20b211['result'][_0x18b9('0x2a')]);}})[_0x18b9('0x2c')](function(_0x13ca80){logger['error'](_0x18b9('0x24'),_0x56d7a6,_0x13ca80);_0x56b847(_0x13ca80);});});}function respondWithStatusCode(_0x5f42f8,_0x36089e){_0x36089e=_0x36089e||0xcc;return function(_0x154f60){if(_0x154f60){return _0x5f42f8[_0x18b9('0x2d')](_0x36089e);}return _0x5f42f8[_0x18b9('0x2e')](_0x36089e)[_0x18b9('0x2f')]();};}function respondWithResult(_0x5ab965,_0x339087){_0x339087=_0x339087||0xc8;return function(_0x223bce){if(_0x223bce){return _0x5ab965[_0x18b9('0x2e')](_0x339087)[_0x18b9('0x30')](_0x223bce);}};}function respondWithFilteredResult(_0x176ac5,_0x54c81e){return function(_0x44d897){if(_0x44d897){var _0x388b13=_0x44d897[_0x18b9('0x31')],_0x914cda=_0x54c81e[_0x18b9('0x32')],_0xbd16b1=_0x54c81e[_0x18b9('0x32')]+_0x54c81e['limit'],_0x137dfb;if(_0xbd16b1>=_0x388b13){_0xbd16b1=_0x388b13;_0x137dfb=0xc8;}else{_0x137dfb=0xce;}_0x176ac5[_0x18b9('0x2e')](_0x137dfb);return _0x176ac5[_0x18b9('0x33')](_0x18b9('0x34'),_0x914cda+'-'+_0xbd16b1+'/'+_0x388b13)[_0x18b9('0x30')](_0x44d897);}return null;};}function patchUpdates(_0xbf01f3){return function(_0x26c4d7){try{jsonpatch[_0x18b9('0x35')](_0x26c4d7,_0xbf01f3,!![]);}catch(_0xd13ada){return BPromise[_0x18b9('0x36')](_0xd13ada);}return _0x26c4d7[_0x18b9('0x37')]();};}function saveUpdates(_0x439db9,_0x785934){return function(_0x3e3f54){if(_0x3e3f54){return _0x3e3f54[_0x18b9('0x38')](_0x439db9)[_0x18b9('0x39')](function(_0x579cd4){return _0x579cd4;});}return null;};}function removeEntity(_0x44389c,_0x5f56b3){return function(_0x22c978){if(_0x22c978){return _0x22c978[_0x18b9('0x3a')]()['then'](function(){_0x44389c[_0x18b9('0x2e')](0xcc)[_0x18b9('0x2f')]();});}};}function handleEntityNotFound(_0xcb3dd1,_0x27f3c7){return function(_0xa68146){if(!_0xa68146){_0xcb3dd1['sendStatus'](0x194);}return _0xa68146;};}function handleError(_0x15ee76,_0x26c477){_0x26c477=_0x26c477||0x1f4;return function(_0x29c4b){logger[_0x18b9('0x28')](_0x29c4b['stack']);if(_0x29c4b[_0x18b9('0x3b')]){delete _0x29c4b['name'];}_0x15ee76[_0x18b9('0x2e')](_0x26c477)[_0x18b9('0x3c')](_0x29c4b);};}exports[_0x18b9('0x3d')]=function(_0x1c76b8,_0x244a2e){var _0x39362d={},_0x28571b={},_0x5b442d={'count':0x0,'rows':[]};var _0x1aeb60=db[_0x18b9('0x3e')][_0x18b9('0x3f')];_0x28571b[_0x18b9('0x40')]=_[_0x18b9('0x41')](_0x1aeb60);_0x28571b[_0x18b9('0x42')]=_['keys'](_0x1c76b8[_0x18b9('0x42')]);_0x28571b[_0x18b9('0x43')]=_[_0x18b9('0x44')](_0x28571b[_0x18b9('0x40')],_0x28571b[_0x18b9('0x42')]);_0x39362d[_0x18b9('0x45')]=_[_0x18b9('0x44')](_0x28571b[_0x18b9('0x40')],qs['fields'](_0x1c76b8[_0x18b9('0x42')][_0x18b9('0x46')]));_0x39362d[_0x18b9('0x45')]=_0x39362d['attributes'][_0x18b9('0x47')]?_0x39362d[_0x18b9('0x45')]:_0x28571b[_0x18b9('0x40')];if(!_0x1c76b8[_0x18b9('0x42')]['hasOwnProperty']('nolimit')){_0x39362d[_0x18b9('0x48')]=qs[_0x18b9('0x48')](_0x1c76b8[_0x18b9('0x42')][_0x18b9('0x48')]);_0x39362d['offset']=qs[_0x18b9('0x32')](_0x1c76b8[_0x18b9('0x42')][_0x18b9('0x32')]);}_0x39362d[_0x18b9('0x49')]=qs[_0x18b9('0x4a')](_0x1c76b8['query'][_0x18b9('0x4a')]);_0x39362d[_0x18b9('0x4b')]=qs['filters'](_[_0x18b9('0x4c')](_0x1c76b8['query'],_0x28571b[_0x18b9('0x43')]));if(_0x1c76b8[_0x18b9('0x42')][_0x18b9('0x4d')]){_0x39362d[_0x18b9('0x4b')]=_['merge'](_0x39362d['where'],{'$or':_[_0x18b9('0x4e')](_0x1aeb60,function(_0x32ec1d){if(_0x32ec1d['type'][_0x18b9('0x4f')]!==_0x18b9('0x50')){var _0x30e386={};_0x30e386[_0x32ec1d['field']]={'$like':'%'+_0x1c76b8['query'][_0x18b9('0x4d')]+'%'};return _0x30e386;}})});}_0x39362d=_[_0x18b9('0x51')]({},_0x39362d,_0x1c76b8[_0x18b9('0x52')]);var _0x1ea31d={'where':_0x39362d['where']};return db[_0x18b9('0x3e')][_0x18b9('0x31')](_0x1ea31d)[_0x18b9('0x39')](function(_0x3adb30){_0x5b442d[_0x18b9('0x31')]=_0x3adb30;if(_0x1c76b8[_0x18b9('0x42')][_0x18b9('0x53')]){_0x39362d[_0x18b9('0x54')]=[{'all':!![]}];}return db[_0x18b9('0x3e')][_0x18b9('0x55')](_0x39362d);})[_0x18b9('0x39')](function(_0x568eac){_0x5b442d[_0x18b9('0x56')]=_0x568eac;return _0x5b442d;})[_0x18b9('0x39')](respondWithFilteredResult(_0x244a2e,_0x39362d))[_0x18b9('0x2c')](handleError(_0x244a2e,null));};exports[_0x18b9('0x57')]=function(_0x30f3fa,_0x3a81a0){var _0x3a9c37={'raw':!![],'where':{'id':_0x30f3fa[_0x18b9('0x58')]['id']}},_0x4d5180={};_0x4d5180[_0x18b9('0x40')]=_[_0x18b9('0x41')](db[_0x18b9('0x3e')][_0x18b9('0x3f')]);_0x4d5180['query']=_[_0x18b9('0x41')](_0x30f3fa['query']);_0x4d5180[_0x18b9('0x43')]=_[_0x18b9('0x44')](_0x4d5180[_0x18b9('0x40')],_0x4d5180[_0x18b9('0x42')]);_0x3a9c37[_0x18b9('0x45')]=_[_0x18b9('0x44')](_0x4d5180[_0x18b9('0x40')],qs[_0x18b9('0x46')](_0x30f3fa[_0x18b9('0x42')][_0x18b9('0x46')]));_0x3a9c37[_0x18b9('0x45')]=_0x3a9c37[_0x18b9('0x45')]['length']?_0x3a9c37[_0x18b9('0x45')]:_0x4d5180[_0x18b9('0x40')];if(_0x30f3fa[_0x18b9('0x42')][_0x18b9('0x53')]){_0x3a9c37[_0x18b9('0x54')]=[{'all':!![]}];}_0x3a9c37=_[_0x18b9('0x51')]({},_0x3a9c37,_0x30f3fa[_0x18b9('0x52')]);return db[_0x18b9('0x3e')][_0x18b9('0x59')](_0x3a9c37)[_0x18b9('0x39')](handleEntityNotFound(_0x3a81a0,null))[_0x18b9('0x39')](respondWithResult(_0x3a81a0,null))[_0x18b9('0x2c')](handleError(_0x3a81a0,null));};exports['create']=function(_0x50051a,_0x3c7b80){return db[_0x18b9('0x3e')][_0x18b9('0x5a')](_0x50051a[_0x18b9('0x5b')],{})[_0x18b9('0x39')](respondWithResult(_0x3c7b80,0xc9))[_0x18b9('0x2c')](handleError(_0x3c7b80,null));};exports['update']=function(_0xaef4a8,_0x2ebcd4){if(_0xaef4a8[_0x18b9('0x5b')]['id']){delete _0xaef4a8[_0x18b9('0x5b')]['id'];}return db['OpenchannelMessage'][_0x18b9('0x59')]({'where':{'id':_0xaef4a8[_0x18b9('0x58')]['id']}})[_0x18b9('0x39')](handleEntityNotFound(_0x2ebcd4,null))[_0x18b9('0x39')](saveUpdates(_0xaef4a8[_0x18b9('0x5b')],null))[_0x18b9('0x39')](respondWithResult(_0x2ebcd4,null))[_0x18b9('0x2c')](handleError(_0x2ebcd4,null));};exports[_0x18b9('0x3a')]=function(_0x2013f7,_0x5936ba){return db[_0x18b9('0x3e')][_0x18b9('0x59')]({'where':{'id':_0x2013f7[_0x18b9('0x58')]['id']}})['then'](handleEntityNotFound(_0x5936ba,null))[_0x18b9('0x39')](removeEntity(_0x5936ba,null))['catch'](handleError(_0x5936ba,null));};exports[_0x18b9('0x5c')]=function(_0x1596b8,_0x4ab46d){return db[_0x18b9('0x3e')][_0x18b9('0x5c')]()[_0x18b9('0x39')](respondWithResult(_0x4ab46d,null))[_0x18b9('0x2c')](handleError(_0x4ab46d,null));};var interaction_log=require(_0x18b9('0x13'))('openchannel-interactions');exports['accept']=function(_0x8a9c44,_0x5763c0,_0x4204f9){var _0x5abd07={'channel':_0x18b9('0x5d')};if(_0x8a9c44[_0x18b9('0x5b')]['id']){delete _0x8a9c44['body']['id'];}_0x8a9c44[_0x18b9('0x5b')][_0x18b9('0x5e')]=!![];_0x8a9c44[_0x18b9('0x5b')][_0x18b9('0x5f')]=moment()[_0x18b9('0x60')](_0x18b9('0x61'));_0x8a9c44[_0x18b9('0x5b')][_0x18b9('0x62')]=_0x8a9c44[_0x18b9('0x5b')][_0x18b9('0x62')]||_0x8a9c44[_0x18b9('0x63')]['id'];return db[_0x18b9('0x3e')][_0x18b9('0x59')]({'where':{'id':_0x8a9c44[_0x18b9('0x58')]['id'],'UserId':null},'include':[{'model':db['CmContact'],'as':_0x18b9('0x64')}]})[_0x18b9('0x39')](handleEntityNotFound(_0x5763c0,null))[_0x18b9('0x39')](saveUpdates(_0x8a9c44[_0x18b9('0x5b')],null))[_0x18b9('0x39')](function(_0x453ea7){if(_0x453ea7){_0x5abd07[_0x18b9('0x2a')]=_0x453ea7[_0x18b9('0x65')]({'plain':!![]});return db[_0x18b9('0x66')][_0x18b9('0x59')]({'where':{'id':_0x453ea7[_0x18b9('0x67')]}});}return null;})['then'](handleEntityNotFound(_0x5763c0,null))[_0x18b9('0x39')](function(_0x574113){if(_0x574113){return _0x574113[_0x18b9('0x38')]({'UserId':_0x8a9c44['body'][_0x18b9('0x62')],'read1stAt':_[_0x18b9('0x68')](_0x574113[_0x18b9('0x69')])?moment()[_0x18b9('0x60')]('YYYY-MM-DD\x20HH:mm:ss'):undefined});}return null;})[_0x18b9('0x39')](function(_0x28bb59){if(_0x28bb59){_0x5abd07[_0x18b9('0x6a')]=_0x28bb59[_0x18b9('0x65')]({'plain':!![]});interaction_log[_0x18b9('0x2b')](_0x18b9('0x6b'),_0x8a9c44[_0x18b9('0x63')]['id'],_0x8a9c44['user'][_0x18b9('0x3b')],_0x8a9c44[_0x18b9('0x63')][_0x18b9('0x6c')],_0x5abd07[_0x18b9('0x6a')]['id'],_0x8a9c44[_0x18b9('0x5b')]?JSON[_0x18b9('0x27')](_0x8a9c44[_0x18b9('0x5b')]):'null');return respondWithRpcPromise(_0x18b9('0x6d'),_0x18b9('0x6e'),_0x5abd07);}return null;})[_0x18b9('0x39')](function(_0x36272e){if(_0x36272e){if(_0x8a9c44['body'][_0x18b9('0x6f')]){_0x5abd07[_0x18b9('0x2a')][_0x18b9('0x70')]=util['format']('SIP/%s',_0x8a9c44[_0x18b9('0x63')][_0x18b9('0x3b')]);_0x5abd07[_0x18b9('0x2a')][_0x18b9('0x71')]=_0x5abd07[_0x18b9('0x71')];_0x5abd07['message'][_0x18b9('0x72')]=_0x18b9('0x73');return respondWithRpcPromise(_0x18b9('0x74'),'EventManager',{'event':_0x18b9('0x75'),'message':_0x5abd07[_0x18b9('0x2a')]},client9002)[_0x18b9('0x39')](function(){return _0x5abd07;});}return _0x5abd07;}return null;})['then'](respondWithResult(_0x5763c0,null))[_0x18b9('0x2c')](handleError(_0x5763c0,null));};var interaction_log=require('../../config/logger')('openchannel-interactions');exports[_0x18b9('0x36')]=function(_0x3298c8,_0x362c99,_0x57c53c){var _0x3bca56={'agent':{},'channel':_0x18b9('0x5d')};if(_0x3298c8[_0x18b9('0x5b')]['id']){delete _0x3298c8['body']['id'];}_0x3298c8['body']['UserId']=_0x3298c8[_0x18b9('0x5b')][_0x18b9('0x62')]||_0x3298c8[_0x18b9('0x63')]['id'];_0x3bca56['agent']['id']=_0x3298c8[_0x18b9('0x5b')]['UserId'];return db[_0x18b9('0x3e')][_0x18b9('0x59')]({'where':{'id':_0x3298c8['params']['id'],'UserId':null}})[_0x18b9('0x39')](handleEntityNotFound(_0x362c99,null))[_0x18b9('0x39')](function(_0x47c121){if(_0x47c121){_0x3bca56[_0x18b9('0x2a')]=_0x47c121['get']({'plain':!![]});return db[_0x18b9('0x66')]['find']({'where':{'id':_0x47c121['OpenchannelInteractionId']}});}return null;})[_0x18b9('0x39')](handleEntityNotFound(_0x362c99,null))[_0x18b9('0x39')](function(_0x273114){if(_0x273114){_0x3bca56[_0x18b9('0x6a')]=_0x273114[_0x18b9('0x65')]({'plain':!![]});interaction_log[_0x18b9('0x2b')](_0x18b9('0x76'),_0x3298c8['user']['id'],_0x3298c8[_0x18b9('0x63')][_0x18b9('0x3b')],_0x3298c8[_0x18b9('0x63')][_0x18b9('0x6c')],_0x3bca56[_0x18b9('0x6a')]['id'],_0x3298c8['body']?JSON[_0x18b9('0x27')](_0x3298c8['body']):_0x18b9('0x77'));return respondWithRpcPromise(_0x18b9('0x78'),_0x18b9('0x79'),_0x3bca56);}return null;})[_0x18b9('0x39')](function(_0x416bd4){if(_0x416bd4){_0x416bd4[_0x18b9('0x2a')][_0x18b9('0x70')]=util['format'](_0x18b9('0x7a'),_0x3298c8[_0x18b9('0x63')][_0x18b9('0x3b')]);_0x416bd4[_0x18b9('0x2a')][_0x18b9('0x71')]=_0x3bca56[_0x18b9('0x71')];_0x416bd4[_0x18b9('0x2a')][_0x18b9('0x72')]='reject';respondWithRpcPromise(_0x18b9('0x74'),_0x18b9('0x74'),{'event':_0x18b9('0x7b'),'message':_0x416bd4[_0x18b9('0x2a')]},client9002);return _0x3bca56;}return null;})[_0x18b9('0x39')](respondWithResult(_0x362c99,null))[_0x18b9('0x2c')](handleError(_0x362c99,null));};
\ No newline at end of file
index 14d6a61..84e68b9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeeb7=['save','remove','emit','hook','exports','events','OpenchannelMessage','setMaxListeners'];(function(_0x432682,_0x253044){var _0x463d05=function(_0xa73403){while(--_0xa73403){_0x432682['push'](_0x432682['shift']());}};_0x463d05(++_0x253044);}(_0xeeb7,0x14d));var _0x7eeb=function(_0x590b61,_0x4c4335){_0x590b61=_0x590b61-0x0;var _0x1a14dc=_0xeeb7[_0x590b61];return _0x1a14dc;};'use strict';var EventEmitter=require(_0x7eeb('0x0'));var OpenchannelMessage=require('../../mysqldb')['db'][_0x7eeb('0x1')];var OpenchannelMessageEvents=new EventEmitter();OpenchannelMessageEvents[_0x7eeb('0x2')](0x0);var events={'afterCreate':_0x7eeb('0x3'),'afterUpdate':'update','afterDestroy':_0x7eeb('0x4')};function emitEvent(_0x5b6a68){return function(_0x376165,_0x383ff8,_0x951c4){OpenchannelMessageEvents[_0x7eeb('0x5')](_0x5b6a68+':'+_0x376165['id'],_0x376165);OpenchannelMessageEvents[_0x7eeb('0x5')](_0x5b6a68,_0x376165);_0x951c4(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];OpenchannelMessage[_0x7eeb('0x6')](e,emitEvent(event));}}module[_0x7eeb('0x7')]=OpenchannelMessageEvents;
\ No newline at end of file
+var _0xf12e=['exports','events','../../mysqldb','OpenchannelMessage','setMaxListeners','update','remove','emit','hook'];(function(_0x21aec3,_0x5c97e9){var _0x288bbc=function(_0x2283fe){while(--_0x2283fe){_0x21aec3['push'](_0x21aec3['shift']());}};_0x288bbc(++_0x5c97e9);}(_0xf12e,0x169));var _0xef12=function(_0x1efa5c,_0x4deafb){_0x1efa5c=_0x1efa5c-0x0;var _0x4f8376=_0xf12e[_0x1efa5c];return _0x4f8376;};'use strict';var EventEmitter=require(_0xef12('0x0'));var OpenchannelMessage=require(_0xef12('0x1'))['db'][_0xef12('0x2')];var OpenchannelMessageEvents=new EventEmitter();OpenchannelMessageEvents[_0xef12('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0xef12('0x4'),'afterDestroy':_0xef12('0x5')};function emitEvent(_0x1329c9){return function(_0x2c3a11,_0x71fdfe,_0xfd7db4){OpenchannelMessageEvents[_0xef12('0x6')](_0x1329c9+':'+_0x2c3a11['id'],_0x2c3a11);OpenchannelMessageEvents[_0xef12('0x6')](_0x1329c9,_0x2c3a11);_0xfd7db4(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];OpenchannelMessage[_0xef12('0x7')](e,emitEvent(event));}}module[_0xef12('0x8')]=OpenchannelMessageEvents;
\ No newline at end of file
index ae1c14e..e6690c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf0b3=['Interaction','error','inspect','finally','utf8mb4','lodash','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','./openchannelMessage.attributes','exports','OpenchannelMessage','openchannel_messages','fti_openchannel_messages','body','get','direction','toLowerCase','out','secret','isNil','UserId','OpenchannelInteraction','findOne','OpenchannelInteractionId','update','createdAt','catch','CmContact','then','OpenchannelAccount','find','OpenchannelAccountId','Interactions','Contact','keys','replyUri','info','OpenchannelMessage,\x20%s,\x20%s','afterCreate','format','length','omit','POST','method','GET','Message\x20%d\x20forwarded\x20to\x20%s','threadId'];(function(_0x25248b,_0x3c8491){var _0x509939=function(_0x457a27){while(--_0x457a27){_0x25248b['push'](_0x25248b['shift']());}};_0x509939(++_0x3c8491);}(_0xf0b3,0x109));var _0x3f0b=function(_0x48a96f,_0x530059){_0x48a96f=_0x48a96f-0x0;var _0x3ff3ef=_0xf0b3[_0x48a96f];return _0x3ff3ef;};'use strict';var _=require(_0x3f0b('0x0'));var util=require('util');var logger=require(_0x3f0b('0x1'))(_0x3f0b('0x2'));var moment=require(_0x3f0b('0x3'));var BPromise=require(_0x3f0b('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x3f0b('0x5'));var rimraf=require(_0x3f0b('0x6'));var config=require(_0x3f0b('0x7'));var attributes=require(_0x3f0b('0x8'));module[_0x3f0b('0x9')]=function(_0x147fd5,_0x2b7d5f){return _0x147fd5['define'](_0x3f0b('0xa'),attributes,{'tableName':_0x3f0b('0xb'),'paranoid':![],'indexes':[{'name':_0x3f0b('0xc'),'fields':[_0x3f0b('0xd')],'type':'FULLTEXT'}],'timestamps':!![],'hooks':{'afterCreate':function(_0x359c9e,_0x507f82,_0x422fd1){var _0x3629f5=_0x147fd5['models'];var _0x494a9d=_0x359c9e[_0x3f0b('0xe')]({'plain':!![]});if(_0x494a9d[_0x3f0b('0xf')][_0x3f0b('0x10')]()==='in'||_0x494a9d[_0x3f0b('0xf')][_0x3f0b('0x10')]()===_0x3f0b('0x11')&&!_0x494a9d[_0x3f0b('0x12')]&&!_[_0x3f0b('0x13')](_0x494a9d[_0x3f0b('0x14')])){_0x3629f5[_0x3f0b('0x15')][_0x3f0b('0x16')]({'where':{'id':_0x494a9d[_0x3f0b('0x17')]}})['then'](function(_0x35b5b6){if(_0x35b5b6){_0x35b5b6[_0x3f0b('0x18')]({'lastMsgAt':_0x494a9d[_0x3f0b('0x19')],'lastMsgDirection':_0x494a9d['direction'][_0x3f0b('0x10')]()});}})[_0x3f0b('0x1a')](function(_0x17e739){console['error'](_0x17e739);});}if(_0x494a9d['direction']===_0x3f0b('0x11')&&!_0x494a9d['secret']){var _0x2afe75;_0x3629f5[_0x3f0b('0x1b')]['describe']()[_0x3f0b('0x1c')](function(_0x178308){return _0x3629f5[_0x3f0b('0x1d')][_0x3f0b('0x1e')]({'where':{'id':_0x494a9d[_0x3f0b('0x1f')]},'include':[{'model':_0x3629f5['OpenchannelInteraction'],'as':_0x3f0b('0x20'),'where':{'id':_0x494a9d[_0x3f0b('0x17')]},'limit':0x1,'include':[{'model':_0x3629f5[_0x3f0b('0x1b')],'as':_0x3f0b('0x21'),'attributes':_[_0x3f0b('0x22')](_0x178308)}]}]});})[_0x3f0b('0x1c')](function(_0xf796b8){_0x2afe75=_0xf796b8[_0x3f0b('0xe')]({'plain':!![]});if(_0x2afe75&&_0x2afe75[_0x3f0b('0x23')]){logger[_0x3f0b('0x24')](_0x3f0b('0x25'),_0x3f0b('0x26'),util[_0x3f0b('0x27')]('Forwarding\x20message\x20%d\x20to\x20%s',_0x494a9d['id'],_0x2afe75[_0x3f0b('0x23')]));if(_0x2afe75[_0x3f0b('0x20')]&&_0x2afe75[_0x3f0b('0x20')][_0x3f0b('0x28')]){_0x494a9d['Interaction']=_[_0x3f0b('0x29')](_0x2afe75[_0x3f0b('0x20')][0x0],_0x3f0b('0x21'));_0x494a9d[_0x3f0b('0x21')]=_0x2afe75['Interactions'][0x0][_0x3f0b('0x21')];}var _0x507f82={'method':_0x3f0b('0x2a'),'uri':encodeURI(_0x2afe75['replyUri']),'json':!![],'resolveWithFullResponse':!![]};switch(_0x507f82[_0x3f0b('0x2b')]){case _0x3f0b('0x2c'):_0x507f82['qs']=_0x494a9d;break;case _0x3f0b('0x2a'):_0x507f82[_0x3f0b('0xd')]=_0x494a9d;break;}return rp(_0x507f82)['then'](function(_0x40a626){logger['info']('OpenchannelMessage,\x20%s,\x20%s',_0x3f0b('0x26'),util[_0x3f0b('0x27')](_0x3f0b('0x2d'),_0x494a9d['id'],_0x2afe75[_0x3f0b('0x23')]));if(_0x40a626[_0x3f0b('0xd')][_0x3f0b('0x2e')]&&_0x40a626['body'][_0x3f0b('0x2e')]!=_0x494a9d[_0x3f0b('0x2f')][_0x3f0b('0x2e')]){return _0x3629f5['OpenchannelInteraction'][_0x3f0b('0x18')]({'threadId':_0x40a626[_0x3f0b('0xd')][_0x3f0b('0x2e')]},{'logging':!![],'where':{'id':_0x494a9d[_0x3f0b('0x2f')]['id']}});}else{return;}})['then'](function(){return _0x359c9e[_0x3f0b('0x18')]({'read':!![]});})['catch'](function(_0x2412f7){logger[_0x3f0b('0x30')](_0x3f0b('0x25'),'afterCreate',util[_0x3f0b('0x31')](_0x2412f7,{'showHidden':![],'depth':null}));_0x422fd1();});}else{_0x422fd1();}})[_0x3f0b('0x32')](function(){_0x422fd1();});}else{_0x422fd1();}}},'charset':_0x3f0b('0x33'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
+var _0xd9bd=['UserId','OpenchannelInteraction','findOne','OpenchannelInteractionId','then','update','createdAt','catch','error','out','CmContact','describe','OpenchannelAccount','find','OpenchannelAccountId','Interactions','Contact','info','OpenchannelMessage,\x20%s,\x20%s','format','Forwarding\x20message\x20%d\x20to\x20%s','replyUri','length','POST','method','GET','Message\x20%d\x20forwarded\x20to\x20%s','body','threadId','Interaction','afterCreate','inspect','finally','utf8mb4_unicode_ci','lodash','util','../../config/logger','moment','path','rimraf','../../config/environment','./openchannelMessage.attributes','exports','OpenchannelMessage','openchannel_messages','fti_openchannel_messages','models','get','direction','toLowerCase','secret','isNil'];(function(_0x1cf97e,_0x60691b){var _0x1ab316=function(_0x4067e2){while(--_0x4067e2){_0x1cf97e['push'](_0x1cf97e['shift']());}};_0x1ab316(++_0x60691b);}(_0xd9bd,0x18e));var _0xdd9b=function(_0x1f7ad9,_0x57c2d2){_0x1f7ad9=_0x1f7ad9-0x0;var _0x574696=_0xd9bd[_0x1f7ad9];return _0x574696;};'use strict';var _=require(_0xdd9b('0x0'));var util=require(_0xdd9b('0x1'));var logger=require(_0xdd9b('0x2'))('api');var moment=require(_0xdd9b('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0xdd9b('0x4'));var rimraf=require(_0xdd9b('0x5'));var config=require(_0xdd9b('0x6'));var attributes=require(_0xdd9b('0x7'));module[_0xdd9b('0x8')]=function(_0x1c8c7f,_0x2d9408){return _0x1c8c7f['define'](_0xdd9b('0x9'),attributes,{'tableName':_0xdd9b('0xa'),'paranoid':![],'indexes':[{'name':_0xdd9b('0xb'),'fields':['body'],'type':'FULLTEXT'}],'timestamps':!![],'hooks':{'afterCreate':function(_0x47d6ab,_0x2b25c2,_0x38ef33){var _0x1553ed=_0x1c8c7f[_0xdd9b('0xc')];var _0x2b5123=_0x47d6ab[_0xdd9b('0xd')]({'plain':!![]});if(_0x2b5123[_0xdd9b('0xe')][_0xdd9b('0xf')]()==='in'||_0x2b5123[_0xdd9b('0xe')][_0xdd9b('0xf')]()==='out'&&!_0x2b5123[_0xdd9b('0x10')]&&!_[_0xdd9b('0x11')](_0x2b5123[_0xdd9b('0x12')])){_0x1553ed[_0xdd9b('0x13')][_0xdd9b('0x14')]({'where':{'id':_0x2b5123[_0xdd9b('0x15')]}})[_0xdd9b('0x16')](function(_0x535e36){if(_0x535e36){_0x535e36[_0xdd9b('0x17')]({'lastMsgAt':_0x2b5123[_0xdd9b('0x18')],'lastMsgDirection':_0x2b5123['direction'][_0xdd9b('0xf')]()});}})[_0xdd9b('0x19')](function(_0x1b96a9){console[_0xdd9b('0x1a')](_0x1b96a9);});}if(_0x2b5123[_0xdd9b('0xe')]===_0xdd9b('0x1b')&&!_0x2b5123['secret']){var _0x3c3199;_0x1553ed[_0xdd9b('0x1c')][_0xdd9b('0x1d')]()[_0xdd9b('0x16')](function(_0x3fd7f6){return _0x1553ed[_0xdd9b('0x1e')][_0xdd9b('0x1f')]({'where':{'id':_0x2b5123[_0xdd9b('0x20')]},'include':[{'model':_0x1553ed[_0xdd9b('0x13')],'as':_0xdd9b('0x21'),'where':{'id':_0x2b5123[_0xdd9b('0x15')]},'limit':0x1,'include':[{'model':_0x1553ed[_0xdd9b('0x1c')],'as':_0xdd9b('0x22'),'attributes':_['keys'](_0x3fd7f6)}]}]});})[_0xdd9b('0x16')](function(_0x17afeb){_0x3c3199=_0x17afeb[_0xdd9b('0xd')]({'plain':!![]});if(_0x3c3199&&_0x3c3199['replyUri']){logger[_0xdd9b('0x23')](_0xdd9b('0x24'),'afterCreate',util[_0xdd9b('0x25')](_0xdd9b('0x26'),_0x2b5123['id'],_0x3c3199[_0xdd9b('0x27')]));if(_0x3c3199['Interactions']&&_0x3c3199[_0xdd9b('0x21')][_0xdd9b('0x28')]){_0x2b5123['Interaction']=_['omit'](_0x3c3199[_0xdd9b('0x21')][0x0],_0xdd9b('0x22'));_0x2b5123['Contact']=_0x3c3199[_0xdd9b('0x21')][0x0][_0xdd9b('0x22')];}var _0x2b25c2={'method':_0xdd9b('0x29'),'uri':encodeURI(_0x3c3199[_0xdd9b('0x27')]),'json':!![],'resolveWithFullResponse':!![]};switch(_0x2b25c2[_0xdd9b('0x2a')]){case _0xdd9b('0x2b'):_0x2b25c2['qs']=_0x2b5123;break;case _0xdd9b('0x29'):_0x2b25c2['body']=_0x2b5123;break;}return rp(_0x2b25c2)[_0xdd9b('0x16')](function(_0x46e3f1){logger['info'](_0xdd9b('0x24'),'afterCreate',util[_0xdd9b('0x25')](_0xdd9b('0x2c'),_0x2b5123['id'],_0x3c3199['replyUri']));if(_0x46e3f1[_0xdd9b('0x2d')][_0xdd9b('0x2e')]&&_0x46e3f1[_0xdd9b('0x2d')]['threadId']!=_0x2b5123[_0xdd9b('0x2f')]['threadId']){return _0x1553ed[_0xdd9b('0x13')]['update']({'threadId':_0x46e3f1[_0xdd9b('0x2d')][_0xdd9b('0x2e')]},{'logging':!![],'where':{'id':_0x2b5123[_0xdd9b('0x2f')]['id']}});}else{return;}})['then'](function(){return _0x47d6ab[_0xdd9b('0x17')]({'read':!![]});})[_0xdd9b('0x19')](function(_0x387e79){logger[_0xdd9b('0x1a')](_0xdd9b('0x24'),_0xdd9b('0x30'),util[_0xdd9b('0x31')](_0x387e79,{'showHidden':![],'depth':null}));_0x38ef33();});}else{_0x38ef33();}})[_0xdd9b('0x32')](function(){_0x38ef33();});}else{_0x38ef33();}}},'charset':'utf8mb4','collate':_0xdd9b('0x33')});};
\ No newline at end of file
index fb57081..24dcba5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x75fc=['defaults','./openchannelMessage.socket','register','then','info','OpenchannelMessage,\x20%s,\x20%s','request\x20sent','debug','error','code','message','catch','CreateOpenchannelMessage','create','body','options','raw','stringify','lodash','util','moment','randomstring','ioredis','../../mysqldb','rpc','../../config/environment','jayson/promise','client','http','redis'];(function(_0x3cb663,_0x417bdc){var _0x2e0788=function(_0x5470fd){while(--_0x5470fd){_0x3cb663['push'](_0x3cb663['shift']());}};_0x2e0788(++_0x417bdc);}(_0x75fc,0x8a));var _0xc75f=function(_0x481a56,_0x56499b){_0x481a56=_0x481a56-0x0;var _0x52558a=_0x75fc[_0x481a56];return _0x52558a;};'use strict';var _=require(_0xc75f('0x0'));var util=require(_0xc75f('0x1'));var moment=require(_0xc75f('0x2'));var BPromise=require('bluebird');var rs=require(_0xc75f('0x3'));var fs=require('fs');var Redis=require(_0xc75f('0x4'));var db=require(_0xc75f('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xc75f('0x6'));var config=require(_0xc75f('0x7'));var jayson=require(_0xc75f('0x8'));var client=jayson[_0xc75f('0x9')][_0xc75f('0xa')]({'port':0x232a});config[_0xc75f('0xb')]=_[_0xc75f('0xc')](config[_0xc75f('0xb')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xc75f('0xb')]));require(_0xc75f('0xd'))[_0xc75f('0xe')](socket);function respondWithRpcPromise(_0x4d6fd8,_0x409a5d,_0x5761f6){return new BPromise(function(_0x38630c,_0x3ecfba){return client['request'](_0x4d6fd8,_0x5761f6)[_0xc75f('0xf')](function(_0x5ca52c){logger[_0xc75f('0x10')](_0xc75f('0x11'),_0x409a5d,_0xc75f('0x12'));logger[_0xc75f('0x13')]('OpenchannelMessage,\x20%s,\x20%s,\x20%s',_0x409a5d,_0xc75f('0x12'),JSON['stringify'](_0x5ca52c));if(_0x5ca52c[_0xc75f('0x14')]){if(_0x5ca52c['error'][_0xc75f('0x15')]===0x1f4){logger[_0xc75f('0x14')](_0xc75f('0x11'),_0x409a5d,_0x5ca52c['error'][_0xc75f('0x16')]);return _0x3ecfba(_0x5ca52c[_0xc75f('0x14')][_0xc75f('0x16')]);}logger[_0xc75f('0x14')](_0xc75f('0x11'),_0x409a5d,_0x5ca52c[_0xc75f('0x14')]['message']);return _0x38630c(_0x5ca52c[_0xc75f('0x14')][_0xc75f('0x16')]);}else{logger['info'](_0xc75f('0x11'),_0x409a5d,_0xc75f('0x12'));_0x38630c(_0x5ca52c['result'][_0xc75f('0x16')]);}})[_0xc75f('0x17')](function(_0x4d7059){logger[_0xc75f('0x14')](_0xc75f('0x11'),_0x409a5d,_0x4d7059);_0x3ecfba(_0x4d7059);});});}exports[_0xc75f('0x18')]=function(_0x1e846c){var _0x5c1d81=this;return new Promise(function(_0x5061ab,_0x50320f){return db['OpenchannelMessage'][_0xc75f('0x19')](_0x1e846c[_0xc75f('0x1a')],{'raw':_0x1e846c[_0xc75f('0x1b')]?_0x1e846c[_0xc75f('0x1b')][_0xc75f('0x1c')]===undefined?!![]:![]:!![]})[_0xc75f('0xf')](function(_0x4314ce){logger[_0xc75f('0x10')](_0xc75f('0x18'),_0x1e846c);logger[_0xc75f('0x13')]('CreateOpenchannelMessage',_0x1e846c,JSON[_0xc75f('0x1d')](_0x4314ce));_0x5061ab(_0x4314ce);})[_0xc75f('0x17')](function(_0x16da64){logger['error'](_0xc75f('0x18'),_0x16da64[_0xc75f('0x16')],_0x1e846c);_0x50320f(_0x5c1d81[_0xc75f('0x14')](0x1f4,_0x16da64[_0xc75f('0x16')]));});});};
\ No newline at end of file
+var _0x982f=['raw','then','CreateOpenchannelMessage','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','http','redis','defaults','localhost','socket.io-emitter','./openchannelMessage.socket','register','request','info','OpenchannelMessage,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','result','catch','OpenchannelMessage','create','options'];(function(_0x2b7d40,_0xbe4d33){var _0x46d1ea=function(_0x1403ef){while(--_0x1403ef){_0x2b7d40['push'](_0x2b7d40['shift']());}};_0x46d1ea(++_0xbe4d33);}(_0x982f,0x1b5));var _0xf982=function(_0x25cdff,_0x3820a5){_0x25cdff=_0x25cdff-0x0;var _0x49624a=_0x982f[_0x25cdff];return _0x49624a;};'use strict';var _=require('lodash');var util=require(_0xf982('0x0'));var moment=require(_0xf982('0x1'));var BPromise=require(_0xf982('0x2'));var rs=require(_0xf982('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xf982('0x4'))['db'];var utils=require(_0xf982('0x5'));var logger=require(_0xf982('0x6'))(_0xf982('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson['client'][_0xf982('0x8')]({'port':0x232a});config[_0xf982('0x9')]=_[_0xf982('0xa')](config['redis'],{'host':_0xf982('0xb'),'port':0x18eb});var socket=require(_0xf982('0xc'))(new Redis(config[_0xf982('0x9')]));require(_0xf982('0xd'))[_0xf982('0xe')](socket);function respondWithRpcPromise(_0x17997d,_0x417f2c,_0x463baf){return new BPromise(function(_0x296b05,_0x287cbc){return client[_0xf982('0xf')](_0x17997d,_0x463baf)['then'](function(_0x4cabf5){logger[_0xf982('0x10')](_0xf982('0x11'),_0x417f2c,_0xf982('0x12'));logger[_0xf982('0x13')]('OpenchannelMessage,\x20%s,\x20%s,\x20%s',_0x417f2c,'request\x20sent',JSON[_0xf982('0x14')](_0x4cabf5));if(_0x4cabf5[_0xf982('0x15')]){if(_0x4cabf5['error']['code']===0x1f4){logger[_0xf982('0x15')](_0xf982('0x11'),_0x417f2c,_0x4cabf5[_0xf982('0x15')][_0xf982('0x16')]);return _0x287cbc(_0x4cabf5[_0xf982('0x15')][_0xf982('0x16')]);}logger[_0xf982('0x15')](_0xf982('0x11'),_0x417f2c,_0x4cabf5['error'][_0xf982('0x16')]);return _0x296b05(_0x4cabf5[_0xf982('0x15')][_0xf982('0x16')]);}else{logger[_0xf982('0x10')](_0xf982('0x11'),_0x417f2c,'request\x20sent');_0x296b05(_0x4cabf5[_0xf982('0x17')]['message']);}})[_0xf982('0x18')](function(_0x1e17bd){logger[_0xf982('0x15')]('OpenchannelMessage,\x20%s,\x20%s',_0x417f2c,_0x1e17bd);_0x287cbc(_0x1e17bd);});});}exports['CreateOpenchannelMessage']=function(_0xf8832d){var _0x137b83=this;return new Promise(function(_0x1a42af,_0x3a0796){return db[_0xf982('0x19')][_0xf982('0x1a')](_0xf8832d['body'],{'raw':_0xf8832d[_0xf982('0x1b')]?_0xf8832d['options'][_0xf982('0x1c')]===undefined?!![]:![]:!![]})[_0xf982('0x1d')](function(_0x57cd34){logger[_0xf982('0x10')]('CreateOpenchannelMessage',_0xf8832d);logger[_0xf982('0x13')](_0xf982('0x1e'),_0xf8832d,JSON[_0xf982('0x14')](_0x57cd34));_0x1a42af(_0x57cd34);})[_0xf982('0x18')](function(_0x738794){logger['error'](_0xf982('0x1e'),_0x738794[_0xf982('0x16')],_0xf8832d);_0x3a0796(_0x137b83[_0xf982('0x15')](0x1f4,_0x738794[_0xf982('0x16')]));});});};
\ No newline at end of file
index b04c154..485eec5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x98a8=['save','remove','update','removeListener','register','openchannelMessage:','./openchannelMessage.events'];(function(_0x306a95,_0x184bc1){var _0x3a6a2a=function(_0x11ce5b){while(--_0x11ce5b){_0x306a95['push'](_0x306a95['shift']());}};_0x3a6a2a(++_0x184bc1);}(_0x98a8,0x12c));var _0x898a=function(_0x37dd46,_0x2e10bf){_0x37dd46=_0x37dd46-0x0;var _0x170bcf=_0x98a8[_0x37dd46];return _0x170bcf;};'use strict';var OpenchannelMessageEvents=require(_0x898a('0x0'));var events=[_0x898a('0x1'),_0x898a('0x2'),_0x898a('0x3')];function createListener(_0x213c5d,_0x226db7){return function(_0x69c61f){_0x226db7['emit'](_0x213c5d,_0x69c61f);};}function removeListener(_0x2bb3e2,_0xf84a19){return function(){OpenchannelMessageEvents[_0x898a('0x4')](_0x2bb3e2,_0xf84a19);};}exports[_0x898a('0x5')]=function(_0x3e7ddd){for(var _0x5d7e59=0x0,_0x3aadc2=events['length'];_0x5d7e59<_0x3aadc2;_0x5d7e59++){var _0xfa8c50=events[_0x5d7e59];var _0x4fbce5=createListener(_0x898a('0x6')+_0xfa8c50,_0x3e7ddd);OpenchannelMessageEvents['on'](_0xfa8c50,_0x4fbce5);}};
\ No newline at end of file
+var _0x72b1=['register','length','./openchannelMessage.events','remove','update','emit','removeListener'];(function(_0x5783f4,_0x4a9e0a){var _0x28e380=function(_0x1ffc49){while(--_0x1ffc49){_0x5783f4['push'](_0x5783f4['shift']());}};_0x28e380(++_0x4a9e0a);}(_0x72b1,0x16e));var _0x172b=function(_0x464245,_0x8e8237){_0x464245=_0x464245-0x0;var _0x5368a5=_0x72b1[_0x464245];return _0x5368a5;};'use strict';var OpenchannelMessageEvents=require(_0x172b('0x0'));var events=['save',_0x172b('0x1'),_0x172b('0x2')];function createListener(_0x42b795,_0x18fd16){return function(_0x23bc7a){_0x18fd16[_0x172b('0x3')](_0x42b795,_0x23bc7a);};}function removeListener(_0x2c1d6e,_0x558038){return function(){OpenchannelMessageEvents[_0x172b('0x4')](_0x2c1d6e,_0x558038);};}exports[_0x172b('0x5')]=function(_0x475fd6){for(var _0x222624=0x0,_0x571994=events[_0x172b('0x6')];_0x222624<_0x571994;_0x222624++){var _0x517363=events[_0x222624];var _0x1f98e9=createListener('openchannelMessage:'+_0x517363,_0x475fd6);OpenchannelMessageEvents['on'](_0x517363,_0x1f98e9);}};
\ No newline at end of file
index 5550165..43233d2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x56ff=['delete','destroy','removeTeams','removeAgents','exports','multer','util','path','express','Router','../../components/interaction/service','../../config/environment','./openchannelQueue.controller','isAuthenticated','index','get','/describe','describe','/:id','show','/:id/members','getMembers','getTeams','getAgents','post','create','/:id/teams','addTeams','/:id/users','addAgents','update'];(function(_0xbc0e56,_0x237dfa){var _0x504608=function(_0x244f37){while(--_0x244f37){_0xbc0e56['push'](_0xbc0e56['shift']());}};_0x504608(++_0x237dfa);}(_0x56ff,0x81));var _0xf56f=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x56ff[_0x321bb2];return _0x9c12ed;};'use strict';var multer=require(_0xf56f('0x0'));var util=require(_0xf56f('0x1'));var path=require(_0xf56f('0x2'));var timeout=require('connect-timeout');var express=require(_0xf56f('0x3'));var router=express[_0xf56f('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xf56f('0x5'));var config=require(_0xf56f('0x6'));var controller=require(_0xf56f('0x7'));router['get']('/',auth[_0xf56f('0x8')](),controller[_0xf56f('0x9')]);router[_0xf56f('0xa')](_0xf56f('0xb'),auth['isAuthenticated'](),controller[_0xf56f('0xc')]);router[_0xf56f('0xa')](_0xf56f('0xd'),auth[_0xf56f('0x8')](),controller[_0xf56f('0xe')]);router[_0xf56f('0xa')](_0xf56f('0xf'),auth['isAuthenticated'](),controller[_0xf56f('0x10')]);router[_0xf56f('0xa')]('/:id/teams',auth[_0xf56f('0x8')](),controller[_0xf56f('0x11')]);router['get']('/:id/users',auth[_0xf56f('0x8')](),controller[_0xf56f('0x12')]);router[_0xf56f('0x13')]('/',auth[_0xf56f('0x8')](),controller[_0xf56f('0x14')]);router['post'](_0xf56f('0x15'),auth[_0xf56f('0x8')](),controller[_0xf56f('0x16')]);router[_0xf56f('0x13')](_0xf56f('0x17'),auth[_0xf56f('0x8')](),controller[_0xf56f('0x18')]);router['put'](_0xf56f('0xd'),auth[_0xf56f('0x8')](),controller[_0xf56f('0x19')]);router[_0xf56f('0x1a')](_0xf56f('0xd'),auth[_0xf56f('0x8')](),controller[_0xf56f('0x1b')]);router[_0xf56f('0x1a')]('/:id/teams',auth[_0xf56f('0x8')](),controller[_0xf56f('0x1c')]);router['delete'](_0xf56f('0x17'),auth[_0xf56f('0x8')](),controller[_0xf56f('0x1d')]);module[_0xf56f('0x1e')]=router;
\ No newline at end of file
+var _0x342f=['/:id/members','getMembers','/:id/teams','getTeams','/:id/users','getAgents','post','create','addTeams','addAgents','put','delete','destroy','removeTeams','removeAgents','exports','multer','util','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./openchannelQueue.controller','get','index','/describe','isAuthenticated','describe','/:id','show'];(function(_0x144a14,_0x33d227){var _0x2ae606=function(_0x339880){while(--_0x339880){_0x144a14['push'](_0x144a14['shift']());}};_0x2ae606(++_0x33d227);}(_0x342f,0x184));var _0xf342=function(_0x35726f,_0x69be51){_0x35726f=_0x35726f-0x0;var _0x3595fc=_0x342f[_0x35726f];return _0x3595fc;};'use strict';var multer=require(_0xf342('0x0'));var util=require(_0xf342('0x1'));var path=require('path');var timeout=require(_0xf342('0x2'));var express=require(_0xf342('0x3'));var router=express[_0xf342('0x4')]();var auth=require(_0xf342('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xf342('0x6'));var controller=require(_0xf342('0x7'));router[_0xf342('0x8')]('/',auth['isAuthenticated'](),controller[_0xf342('0x9')]);router[_0xf342('0x8')](_0xf342('0xa'),auth[_0xf342('0xb')](),controller[_0xf342('0xc')]);router['get'](_0xf342('0xd'),auth[_0xf342('0xb')](),controller[_0xf342('0xe')]);router[_0xf342('0x8')](_0xf342('0xf'),auth[_0xf342('0xb')](),controller[_0xf342('0x10')]);router[_0xf342('0x8')](_0xf342('0x11'),auth['isAuthenticated'](),controller[_0xf342('0x12')]);router[_0xf342('0x8')](_0xf342('0x13'),auth[_0xf342('0xb')](),controller[_0xf342('0x14')]);router[_0xf342('0x15')]('/',auth['isAuthenticated'](),controller[_0xf342('0x16')]);router[_0xf342('0x15')](_0xf342('0x11'),auth[_0xf342('0xb')](),controller[_0xf342('0x17')]);router[_0xf342('0x15')](_0xf342('0x13'),auth['isAuthenticated'](),controller[_0xf342('0x18')]);router[_0xf342('0x19')](_0xf342('0xd'),auth[_0xf342('0xb')](),controller['update']);router[_0xf342('0x1a')]('/:id',auth[_0xf342('0xb')](),controller[_0xf342('0x1b')]);router[_0xf342('0x1a')](_0xf342('0x11'),auth['isAuthenticated'](),controller[_0xf342('0x1c')]);router[_0xf342('0x1a')](_0xf342('0x13'),auth[_0xf342('0xb')](),controller[_0xf342('0x1d')]);module[_0xf342('0x1e')]=router;
\ No newline at end of file
index b3ad9b7..3a237d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1f77=['roundrobin','sequelize','exports','STRING','name','INTEGER','ENUM','beepall'];(function(_0x35e917,_0xd429b4){var _0x500ce6=function(_0x27d4b3){while(--_0x27d4b3){_0x35e917['push'](_0x35e917['shift']());}};_0x500ce6(++_0xd429b4);}(_0x1f77,0x131));var _0x71f7=function(_0x30e742,_0x292c9d){_0x30e742=_0x30e742-0x0;var _0x34da02=_0x1f77[_0x30e742];return _0x34da02;};'use strict';var Sequelize=require(_0x71f7('0x0'));module[_0x71f7('0x1')]={'name':{'type':Sequelize[_0x71f7('0x2')],'unique':_0x71f7('0x3'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x71f7('0x2')]},'timeout':{'type':Sequelize[_0x71f7('0x4')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x71f7('0x5')]('rrmemory',_0x71f7('0x6'),_0x71f7('0x7'))}};
\ No newline at end of file
+var _0x7163=['sequelize','exports','STRING','name','INTEGER','rrmemory','roundrobin'];(function(_0x13b02f,_0x462a53){var _0x12e9a6=function(_0x187d57){while(--_0x187d57){_0x13b02f['push'](_0x13b02f['shift']());}};_0x12e9a6(++_0x462a53);}(_0x7163,0x1ab));var _0x3716=function(_0x1928c9,_0x13a6d1){_0x1928c9=_0x1928c9-0x0;var _0x51b5fb=_0x7163[_0x1928c9];return _0x51b5fb;};'use strict';var Sequelize=require(_0x3716('0x0'));module[_0x3716('0x1')]={'name':{'type':Sequelize[_0x3716('0x2')],'unique':_0x3716('0x3'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x3716('0x2')]},'timeout':{'type':Sequelize[_0x3716('0x4')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM'](_0x3716('0x5'),'beepall',_0x3716('0x6'))}};
\ No newline at end of file
index 16ee361..e8c3659 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc7c6=['describe','getMembers','findOne','UserOpenchannelQueue','OpenchannelQueueId','findAll','User','findAndCountAll','UserId','openchannelPause','updatedAt','createdAt','format','%s/%s','SIP','Team','getTeams','addTeams','teams','Agents','online','voicePause','interface','sequelize','transaction','each','findOrCreate','forEach','emit','userOpenchannelQueue:save','removeTeams','ids','tq.TeamId','from','team_has_openchannel_queues','join','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','OpenchannelQueueId\x20=\x20?','clone','ut.UserId\x20=\x20?','push','toString','QueryTypes','SELECT','every','TeamId','all','union','compact','value','isEmpty','removeAgents','userOpenchannelQueue:remove','addAgents','spread','isArray','getAgents','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','bluebird','mustache','util','sox','to-csv','ejs','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','redis','defaults','localhost','status','end','json','count','offset','set','apply','save','update','OpenchannelQueues','destroy','then','sendStatus','stack','name','send','index','OpenchannelQueue','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','map','type','key','VIRTUAL','field','options','include','rows','show','includeAll','merge','find','catch','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','get','userProfileId','autoAssociation','UserProfileResource','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params'];(function(_0xbe9d71,_0x187fc5){var _0x32614f=function(_0x119879){while(--_0x119879){_0xbe9d71['push'](_0xbe9d71['shift']());}};_0x32614f(++_0x187fc5);}(_0xc7c6,0xc9));var _0x6c7c=function(_0x5ef9ff,_0x44d7f3){_0x5ef9ff=_0x5ef9ff-0x0;var _0x6c88b8=_0xc7c6[_0x5ef9ff];return _0x6c88b8;};'use strict';var pdf=require(_0x6c7c('0x0'));var emlformat=require(_0x6c7c('0x1'));var rimraf=require(_0x6c7c('0x2'));var zipdir=require(_0x6c7c('0x3'));var jsonpatch=require(_0x6c7c('0x4'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x6c7c('0x5'));var Mustache=require(_0x6c7c('0x6'));var util=require(_0x6c7c('0x7'));var path=require('path');var sox=require(_0x6c7c('0x8'));var csv=require(_0x6c7c('0x9'));var ejs=require(_0x6c7c('0xa'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x6c7c('0xb'));var deskjs=require(_0x6c7c('0xc'));var toCsv=require(_0x6c7c('0x9'));var querystring=require('querystring');var Papa=require(_0x6c7c('0xd'));var Redis=require(_0x6c7c('0xe'));var authService=require(_0x6c7c('0xf'));var qs=require(_0x6c7c('0x10'));var hardwareService=require(_0x6c7c('0x11'));var logger=require(_0x6c7c('0x12'))(_0x6c7c('0x13'));var utils=require(_0x6c7c('0x14'));var config=require(_0x6c7c('0x15'));var db=require('../../mysqldb')['db'];config[_0x6c7c('0x16')]=_[_0x6c7c('0x17')](config['redis'],{'host':_0x6c7c('0x18'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x6c7c('0x16')]));require('./openchannelQueue.socket')['register'](socket);function respondWithStatusCode(_0x49f2dd,_0x4ff157){_0x4ff157=_0x4ff157||0xcc;return function(_0x5d36ef){if(_0x5d36ef){return _0x49f2dd['sendStatus'](_0x4ff157);}return _0x49f2dd[_0x6c7c('0x19')](_0x4ff157)[_0x6c7c('0x1a')]();};}function respondWithResult(_0x335564,_0x19b350){_0x19b350=_0x19b350||0xc8;return function(_0x23f911){if(_0x23f911){return _0x335564[_0x6c7c('0x19')](_0x19b350)[_0x6c7c('0x1b')](_0x23f911);}};}function respondWithFilteredResult(_0x5652f1,_0x287c46){return function(_0x2a33dd){if(_0x2a33dd){var _0x4e77f4=_0x2a33dd[_0x6c7c('0x1c')],_0x57d3a4=_0x287c46[_0x6c7c('0x1d')],_0x28e383=_0x287c46[_0x6c7c('0x1d')]+_0x287c46['limit'],_0xa162ab;if(_0x28e383>=_0x4e77f4){_0x28e383=_0x4e77f4;_0xa162ab=0xc8;}else{_0xa162ab=0xce;}_0x5652f1['status'](_0xa162ab);return _0x5652f1[_0x6c7c('0x1e')]('Content-Range',_0x57d3a4+'-'+_0x28e383+'/'+_0x4e77f4)['json'](_0x2a33dd);}return null;};}function patchUpdates(_0x2fd21e){return function(_0x825351){try{jsonpatch[_0x6c7c('0x1f')](_0x825351,_0x2fd21e,!![]);}catch(_0x4793b2){return BPromise['reject'](_0x4793b2);}return _0x825351[_0x6c7c('0x20')]();};}function saveUpdates(_0x1bfeef,_0x3df266){return function(_0x1d38e8){if(_0x1d38e8){return _0x1d38e8[_0x6c7c('0x21')](_0x1bfeef)['then'](function(_0x14a316){return _0x14a316;});}return null;};}function removeEntity(_0x19d768,_0x27f416){return function(_0x18ac94){if(_0x18ac94){return _0x18ac94['destroy']()['then'](function(){var _0x653edb=_0x18ac94['get']({'plain':!![]});var _0x4525e9=_0x6c7c('0x22');return db['UserProfileResource'][_0x6c7c('0x23')]({'where':{'type':_0x4525e9,'resourceId':_0x653edb['id']}})[_0x6c7c('0x24')](function(){return _0x18ac94;});})[_0x6c7c('0x24')](function(){_0x19d768[_0x6c7c('0x19')](0xcc)[_0x6c7c('0x1a')]();});}};}function handleEntityNotFound(_0x4c91aa,_0x4cb3d1){return function(_0x2e0dcb){if(!_0x2e0dcb){_0x4c91aa[_0x6c7c('0x25')](0x194);}return _0x2e0dcb;};}function handleError(_0x31918f,_0x853fa5){_0x853fa5=_0x853fa5||0x1f4;return function(_0x3591e8){logger['error'](_0x3591e8[_0x6c7c('0x26')]);if(_0x3591e8[_0x6c7c('0x27')]){delete _0x3591e8['name'];}_0x31918f[_0x6c7c('0x19')](_0x853fa5)[_0x6c7c('0x28')](_0x3591e8);};}exports[_0x6c7c('0x29')]=function(_0x3c09f4,_0x1409c1){var _0x426c5b={},_0x320bd7={},_0x32f0d9={'count':0x0,'rows':[]};var _0x3e810c=db[_0x6c7c('0x2a')][_0x6c7c('0x2b')];_0x320bd7[_0x6c7c('0x2c')]=_[_0x6c7c('0x2d')](_0x3e810c);_0x320bd7['query']=_[_0x6c7c('0x2d')](_0x3c09f4[_0x6c7c('0x2e')]);_0x320bd7[_0x6c7c('0x2f')]=_[_0x6c7c('0x30')](_0x320bd7[_0x6c7c('0x2c')],_0x320bd7[_0x6c7c('0x2e')]);_0x426c5b[_0x6c7c('0x31')]=_['intersection'](_0x320bd7['model'],qs[_0x6c7c('0x32')](_0x3c09f4['query'][_0x6c7c('0x32')]));_0x426c5b[_0x6c7c('0x31')]=_0x426c5b[_0x6c7c('0x31')][_0x6c7c('0x33')]?_0x426c5b[_0x6c7c('0x31')]:_0x320bd7[_0x6c7c('0x2c')];if(!_0x3c09f4[_0x6c7c('0x2e')][_0x6c7c('0x34')](_0x6c7c('0x35'))){_0x426c5b['limit']=qs[_0x6c7c('0x36')](_0x3c09f4[_0x6c7c('0x2e')][_0x6c7c('0x36')]);_0x426c5b[_0x6c7c('0x1d')]=qs[_0x6c7c('0x1d')](_0x3c09f4['query'][_0x6c7c('0x1d')]);}_0x426c5b[_0x6c7c('0x37')]=qs[_0x6c7c('0x38')](_0x3c09f4[_0x6c7c('0x2e')][_0x6c7c('0x38')]);_0x426c5b[_0x6c7c('0x39')]=qs[_0x6c7c('0x2f')](_[_0x6c7c('0x3a')](_0x3c09f4[_0x6c7c('0x2e')],_0x320bd7['filters']));if(_0x3c09f4['query'][_0x6c7c('0x3b')]){_0x426c5b[_0x6c7c('0x39')]=_['merge'](_0x426c5b[_0x6c7c('0x39')],{'$or':_[_0x6c7c('0x3c')](_0x3e810c,function(_0x6efdc6){if(_0x6efdc6[_0x6c7c('0x3d')][_0x6c7c('0x3e')]!==_0x6c7c('0x3f')){var _0x13ceba={};_0x13ceba[_0x6efdc6[_0x6c7c('0x40')]]={'$like':'%'+_0x3c09f4[_0x6c7c('0x2e')][_0x6c7c('0x3b')]+'%'};return _0x13ceba;}})});}_0x426c5b=_['merge']({},_0x426c5b,_0x3c09f4[_0x6c7c('0x41')]);var _0x90e240={'where':_0x426c5b[_0x6c7c('0x39')]};return db[_0x6c7c('0x2a')]['count'](_0x90e240)['then'](function(_0x44350d){_0x32f0d9[_0x6c7c('0x1c')]=_0x44350d;if(_0x3c09f4[_0x6c7c('0x2e')]['includeAll']){_0x426c5b[_0x6c7c('0x42')]=[{'all':!![]}];}return db[_0x6c7c('0x2a')]['findAll'](_0x426c5b);})[_0x6c7c('0x24')](function(_0x262897){_0x32f0d9[_0x6c7c('0x43')]=_0x262897;return _0x32f0d9;})['then'](respondWithFilteredResult(_0x1409c1,_0x426c5b))['catch'](handleError(_0x1409c1,null));};exports[_0x6c7c('0x44')]=function(_0x1f08a8,_0x19a6a3){var _0x1848f9={'raw':!![],'where':{'id':_0x1f08a8['params']['id']}},_0x440dae={};_0x440dae[_0x6c7c('0x2c')]=_[_0x6c7c('0x2d')](db[_0x6c7c('0x2a')][_0x6c7c('0x2b')]);_0x440dae[_0x6c7c('0x2e')]=_[_0x6c7c('0x2d')](_0x1f08a8[_0x6c7c('0x2e')]);_0x440dae[_0x6c7c('0x2f')]=_[_0x6c7c('0x30')](_0x440dae[_0x6c7c('0x2c')],_0x440dae[_0x6c7c('0x2e')]);_0x1848f9[_0x6c7c('0x31')]=_[_0x6c7c('0x30')](_0x440dae[_0x6c7c('0x2c')],qs['fields'](_0x1f08a8[_0x6c7c('0x2e')][_0x6c7c('0x32')]));_0x1848f9[_0x6c7c('0x31')]=_0x1848f9['attributes'][_0x6c7c('0x33')]?_0x1848f9['attributes']:_0x440dae[_0x6c7c('0x2c')];if(_0x1f08a8[_0x6c7c('0x2e')][_0x6c7c('0x45')]){_0x1848f9[_0x6c7c('0x42')]=[{'all':!![]}];}_0x1848f9=_[_0x6c7c('0x46')]({},_0x1848f9,_0x1f08a8[_0x6c7c('0x41')]);return db['OpenchannelQueue'][_0x6c7c('0x47')](_0x1848f9)[_0x6c7c('0x24')](handleEntityNotFound(_0x19a6a3,null))['then'](respondWithResult(_0x19a6a3,null))[_0x6c7c('0x48')](handleError(_0x19a6a3,null));};exports[_0x6c7c('0x49')]=function(_0x2c2a8e,_0x10ae74){return db[_0x6c7c('0x2a')][_0x6c7c('0x49')](_0x2c2a8e[_0x6c7c('0x4a')],{})['then'](function(_0x9b97a4){var _0x33463c=_0x2c2a8e[_0x6c7c('0x4b')]['get']({'plain':!![]});if(!_0x33463c)throw new Error(_0x6c7c('0x4c'));if(_0x33463c[_0x6c7c('0x4d')]===_0x6c7c('0x4b')){var _0x14a7f0=_0x9b97a4[_0x6c7c('0x4e')]({'plain':!![]});var _0x4210aa=_0x6c7c('0x22');return db['UserProfileSection'][_0x6c7c('0x47')]({'where':{'name':_0x4210aa,'userProfileId':_0x33463c[_0x6c7c('0x4f')]},'raw':!![]})[_0x6c7c('0x24')](function(_0x370745){if(_0x370745&&_0x370745[_0x6c7c('0x50')]===0x0){return db[_0x6c7c('0x51')][_0x6c7c('0x49')]({'name':_0x14a7f0[_0x6c7c('0x27')],'resourceId':_0x14a7f0['id'],'type':_0x370745[_0x6c7c('0x27')],'sectionId':_0x370745['id']},{})[_0x6c7c('0x24')](function(){return _0x9b97a4;});}else{return _0x9b97a4;}})[_0x6c7c('0x48')](function(_0x536e20){logger[_0x6c7c('0x52')](_0x6c7c('0x53'),_0x536e20);throw _0x536e20;});}return _0x9b97a4;})[_0x6c7c('0x24')](respondWithResult(_0x10ae74,0xc9))[_0x6c7c('0x48')](handleError(_0x10ae74,null));};exports[_0x6c7c('0x21')]=function(_0x184fa9,_0x3c85d2){if(_0x184fa9[_0x6c7c('0x4a')]['id']){delete _0x184fa9[_0x6c7c('0x4a')]['id'];}return db[_0x6c7c('0x2a')]['find']({'where':{'id':_0x184fa9['params']['id']}})[_0x6c7c('0x24')](handleEntityNotFound(_0x3c85d2,null))[_0x6c7c('0x24')](saveUpdates(_0x184fa9['body'],null))[_0x6c7c('0x24')](respondWithResult(_0x3c85d2,null))['catch'](handleError(_0x3c85d2,null));};exports[_0x6c7c('0x23')]=function(_0x39dcbc,_0x56e526){return db[_0x6c7c('0x2a')]['find']({'where':{'id':_0x39dcbc[_0x6c7c('0x54')]['id']}})['then'](handleEntityNotFound(_0x56e526,null))[_0x6c7c('0x24')](removeEntity(_0x56e526,null))['catch'](handleError(_0x56e526,null));};exports[_0x6c7c('0x55')]=function(_0x107eb2,_0x28e2fc){return db[_0x6c7c('0x2a')][_0x6c7c('0x55')]()[_0x6c7c('0x24')](respondWithResult(_0x28e2fc,null))[_0x6c7c('0x48')](handleError(_0x28e2fc,null));};exports[_0x6c7c('0x56')]=function(_0x20e848,_0x319e61,_0x431c4b){var _0xd35a99={'raw':!![],'where':{}},_0x36eead={},_0x527e1b;return db[_0x6c7c('0x2a')][_0x6c7c('0x57')]({'where':{'id':_0x20e848['params']['id']}})[_0x6c7c('0x24')](handleEntityNotFound(_0x319e61,null))[_0x6c7c('0x24')](function(_0x42a077){if(_0x42a077){_0x527e1b=_0x42a077[_0x6c7c('0x4e')]({'plain':!![]});_0x36eead[_0x6c7c('0x2c')]=_[_0x6c7c('0x2d')](db[_0x6c7c('0x58')][_0x6c7c('0x2b')]);_0x36eead[_0x6c7c('0x2e')]=_[_0x6c7c('0x2d')](_0x20e848['query']);_0x36eead[_0x6c7c('0x2f')]=_[_0x6c7c('0x30')](_0x36eead[_0x6c7c('0x2c')],_0x36eead[_0x6c7c('0x2e')]);_0xd35a99[_0x6c7c('0x31')]=_['intersection'](_0x36eead[_0x6c7c('0x2c')],qs['fields'](_0x20e848[_0x6c7c('0x2e')][_0x6c7c('0x32')]));_0xd35a99[_0x6c7c('0x31')]=_0xd35a99[_0x6c7c('0x31')][_0x6c7c('0x33')]?_0xd35a99['attributes']:_0x36eead[_0x6c7c('0x2c')];if(!_0x20e848['query'][_0x6c7c('0x34')](_0x6c7c('0x35'))){_0xd35a99[_0x6c7c('0x36')]=qs[_0x6c7c('0x36')](_0x20e848[_0x6c7c('0x2e')][_0x6c7c('0x36')]);_0xd35a99['offset']=qs['offset'](_0x20e848[_0x6c7c('0x2e')][_0x6c7c('0x1d')]);}_0xd35a99['order']=qs[_0x6c7c('0x38')](_0x20e848['query']['sort']);_0xd35a99[_0x6c7c('0x39')]=qs[_0x6c7c('0x2f')](_[_0x6c7c('0x3a')](_0x20e848[_0x6c7c('0x2e')],_0x36eead[_0x6c7c('0x2f')]));_0xd35a99[_0x6c7c('0x39')][_0x6c7c('0x59')]=_0x42a077['id'];if(_0x20e848[_0x6c7c('0x2e')][_0x6c7c('0x3b')]){_0xd35a99[_0x6c7c('0x39')]=_[_0x6c7c('0x46')](_0xd35a99[_0x6c7c('0x39')],{'$or':_[_0x6c7c('0x3c')](_0xd35a99[_0x6c7c('0x31')],function(_0x157e79){var _0x3ca00c={};_0x3ca00c[_0x157e79]={'$like':'%'+_0x20e848[_0x6c7c('0x2e')][_0x6c7c('0x3b')]+'%'};return _0x3ca00c;})});}_0xd35a99=_[_0x6c7c('0x46')]({},_0xd35a99,_0x20e848['options']);return db[_0x6c7c('0x58')][_0x6c7c('0x5a')](_0xd35a99);}})[_0x6c7c('0x24')](function(_0xf9d64b){if(_0xf9d64b){return db[_0x6c7c('0x5b')][_0x6c7c('0x5c')]({'where':{'id':_[_0x6c7c('0x3c')](_0xf9d64b,_0x6c7c('0x5d')),'role':'agent'},'attributes':['id',_0x6c7c('0x27'),_0x6c7c('0x5e'),_0x6c7c('0x5f'),_0x6c7c('0x60')]});}})[_0x6c7c('0x24')](function(_0x5969f6){if(_0x5969f6){return{'count':_0x5969f6[_0x6c7c('0x1c')],'rows':_[_0x6c7c('0x3c')](_0x5969f6['rows'],function(_0x11e3e6){return{'membername':_0x11e3e6['name'],'UserId':_0x11e3e6['id'],'queue_name':_0x527e1b[_0x6c7c('0x27')],'OpenchannelQueueId':_0x527e1b['id'],'interface':util[_0x6c7c('0x61')](_0x6c7c('0x62'),_0x6c7c('0x63'),_0x11e3e6['name']),'penalty':0x0,'paused':_0x11e3e6[_0x6c7c('0x5e')],'createdAt':_0x11e3e6[_0x6c7c('0x60')],'updatedAt':_0x11e3e6['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0x319e61,_0xd35a99))[_0x6c7c('0x48')](handleError(_0x319e61,null));};exports['getTeams']=function(_0x5ca4b8,_0x54aaf1,_0x423461){var _0x3e0086={};var _0x5c1a6d={};var _0x44602c;var _0x2a5226;return db[_0x6c7c('0x2a')][_0x6c7c('0x57')]({'where':{'id':_0x5ca4b8[_0x6c7c('0x54')]['id']}})['then'](handleEntityNotFound(_0x54aaf1,null))[_0x6c7c('0x24')](function(_0x4bf18d){if(_0x4bf18d){_0x44602c=_0x4bf18d;_0x5c1a6d[_0x6c7c('0x2c')]=_[_0x6c7c('0x2d')](db[_0x6c7c('0x64')]['rawAttributes']);_0x5c1a6d[_0x6c7c('0x2e')]=_[_0x6c7c('0x2d')](_0x5ca4b8[_0x6c7c('0x2e')]);_0x5c1a6d[_0x6c7c('0x2f')]=_[_0x6c7c('0x30')](_0x5c1a6d[_0x6c7c('0x2c')],_0x5c1a6d['query']);_0x3e0086[_0x6c7c('0x31')]=_[_0x6c7c('0x30')](_0x5c1a6d['model'],qs[_0x6c7c('0x32')](_0x5ca4b8['query'][_0x6c7c('0x32')]));_0x3e0086[_0x6c7c('0x31')]=_0x3e0086[_0x6c7c('0x31')]['length']?_0x3e0086[_0x6c7c('0x31')]:_0x5c1a6d[_0x6c7c('0x2c')];_0x3e0086['order']=qs[_0x6c7c('0x38')](_0x5ca4b8[_0x6c7c('0x2e')]['sort']);_0x3e0086[_0x6c7c('0x39')]=qs['filters'](_[_0x6c7c('0x3a')](_0x5ca4b8[_0x6c7c('0x2e')],_0x5c1a6d['filters']));if(_0x5ca4b8[_0x6c7c('0x2e')][_0x6c7c('0x3b')]){_0x3e0086[_0x6c7c('0x39')]=_['merge'](_0x3e0086[_0x6c7c('0x39')],{'$or':_['map'](_0x3e0086[_0x6c7c('0x31')],function(_0x8c3aa2){var _0x2248ea={};_0x2248ea[_0x8c3aa2]={'$like':'%'+_0x5ca4b8[_0x6c7c('0x2e')][_0x6c7c('0x3b')]+'%'};return _0x2248ea;})});}_0x3e0086=_[_0x6c7c('0x46')]({},_0x3e0086,_0x5ca4b8[_0x6c7c('0x41')]);return _0x44602c[_0x6c7c('0x65')](_0x3e0086);}})[_0x6c7c('0x24')](function(_0x2ad932){if(_0x2ad932){_0x2a5226=_0x2ad932[_0x6c7c('0x33')];if(!_0x5ca4b8[_0x6c7c('0x2e')][_0x6c7c('0x34')](_0x6c7c('0x35'))){_0x3e0086[_0x6c7c('0x36')]=qs[_0x6c7c('0x36')](_0x5ca4b8[_0x6c7c('0x2e')][_0x6c7c('0x36')]);_0x3e0086[_0x6c7c('0x1d')]=qs[_0x6c7c('0x1d')](_0x5ca4b8['query'][_0x6c7c('0x1d')]);}return _0x44602c[_0x6c7c('0x65')](_0x3e0086);}})[_0x6c7c('0x24')](function(_0xe61f9d){if(_0xe61f9d){return _0xe61f9d?{'count':_0x2a5226,'rows':_0xe61f9d}:null;}})['then'](respondWithResult(_0x54aaf1,null))[_0x6c7c('0x48')](handleError(_0x54aaf1,null));};exports[_0x6c7c('0x66')]=function(_0x368acc,_0x45ad1c,_0x5aa0d0){var _0x57558c=_0x368acc[_0x6c7c('0x4a')][_0x6c7c('0x67')];return db['Team']['findAll']({'where':{'id':_['map'](_0x57558c,'id')},'attributes':['id'],'include':[{'model':db[_0x6c7c('0x5b')],'as':_0x6c7c('0x68'),'attributes':['id',_0x6c7c('0x27'),_0x6c7c('0x69'),_0x6c7c('0x6a'),_0x6c7c('0x6b')],'raw':!![]}]})[_0x6c7c('0x24')](function(_0x55a687){if(_0x55a687){var _0xca8ff4=_['flatMap'](_0x55a687,function(_0x295f43){var _0x271fd0=_0x295f43[_0x6c7c('0x4e')]({'plain':!![]});return _0x271fd0[_0x6c7c('0x68')];});return db[_0x6c7c('0x2a')][_0x6c7c('0x47')]({'where':{'id':_0x368acc[_0x6c7c('0x54')]['id']}})[_0x6c7c('0x24')](function(_0x374e3d){return db[_0x6c7c('0x6c')][_0x6c7c('0x6d')](function(_0x3856ff){return _0x374e3d[_0x6c7c('0x66')](_[_0x6c7c('0x3c')](_0x57558c,'id'),{'transaction':_0x3856ff})[_0x6c7c('0x24')](function(){return BPromise[_0x6c7c('0x6e')](_0xca8ff4,function(_0x10c42a){return db['UserOpenchannelQueue'][_0x6c7c('0x6f')]({'where':{'UserId':_0x10c42a['id'],'OpenchannelQueueId':_0x368acc['params']['id']},'transaction':_0x3856ff});});})['then'](function(){_0xca8ff4[_0x6c7c('0x70')](function(_0x3d2f87){socket[_0x6c7c('0x71')](_0x6c7c('0x72'),{'UserId':_0x3d2f87['id'],'OpenchannelQueueId':_0x374e3d['id']});});});});});}})['then'](respondWithStatusCode(_0x45ad1c,null))[_0x6c7c('0x48')](handleError(_0x45ad1c,null));};exports[_0x6c7c('0x73')]=function(_0x3d184c,_0x3d12d9,_0x236aa5){return db[_0x6c7c('0x64')]['findAll']({'where':{'id':_0x3d184c[_0x6c7c('0x2e')][_0x6c7c('0x74')]},'attributes':['id'],'include':[{'model':db[_0x6c7c('0x5b')],'as':'Agents','attributes':['id'],'raw':!![]}]})['then'](handleEntityNotFound(_0x3d12d9,null))[_0x6c7c('0x24')](function(_0x1862e9){var _0x534caa=_[_0x6c7c('0x3c')](_0x1862e9,'id');var _0xf205ff=[];var _0x29bf25=[];var _0x177b86=squel['select']();_0x177b86[_0x6c7c('0x40')](_0x6c7c('0x75'))[_0x6c7c('0x76')](_0x6c7c('0x77'),'tq')[_0x6c7c('0x78')](_0x6c7c('0x79'),'ut',_0x6c7c('0x7a'))[_0x6c7c('0x39')](_0x6c7c('0x7b'),_0x3d184c[_0x6c7c('0x54')]['id']);for(var _0x3abd1b=0x0;_0x3abd1b<_0x1862e9[_0x6c7c('0x33')];_0x3abd1b+=0x1){let _0xc030b9=_0x1862e9[_0x3abd1b];for(var _0x4be91c=0x0;_0x4be91c<_0xc030b9[_0x6c7c('0x68')][_0x6c7c('0x33')];_0x4be91c+=0x1){let _0x3608cb=_0xc030b9[_0x6c7c('0x68')][_0x4be91c];var _0x538253=_0x177b86[_0x6c7c('0x7c')]();_0x538253['where'](_0x6c7c('0x7d'),_0x3608cb['id']);_0x29bf25[_0x6c7c('0x7e')](db[_0x6c7c('0x6c')][_0x6c7c('0x2e')](_0x538253[_0x6c7c('0x7f')](),{'type':db[_0x6c7c('0x6c')][_0x6c7c('0x80')][_0x6c7c('0x81')]})[_0x6c7c('0x24')](function(_0x186973){if(_0x186973[_0x6c7c('0x33')]===0x1){return _0x3608cb['id'];}else{var _0x2d5c55=_[_0x6c7c('0x82')](_[_0x6c7c('0x3c')](_0x186973,_0x6c7c('0x83')),function(_0x21134e){return _['includes'](_0x534caa,_0x21134e);});if(_0x2d5c55){return _0x3608cb['id'];}}}));}}return BPromise[_0x6c7c('0x84')](_0x29bf25)[_0x6c7c('0x24')](function(_0x42c0b1){_0xf205ff=_(_0xf205ff)[_0x6c7c('0x85')](_0x42c0b1)[_0x6c7c('0x86')]()[_0x6c7c('0x87')]();return db[_0x6c7c('0x2a')]['find']({'where':{'id':_0x3d184c[_0x6c7c('0x54')]['id']}})[_0x6c7c('0x24')](function(_0x163300){return db['sequelize'][_0x6c7c('0x6d')](function(_0x49feff){return _0x163300['removeTeams'](_0x3d184c[_0x6c7c('0x2e')][_0x6c7c('0x74')],{'transaction':_0x49feff})[_0x6c7c('0x24')](function(){if(!_[_0x6c7c('0x88')](_0xf205ff)){return _0x163300[_0x6c7c('0x89')](_0xf205ff,{'transaction':_0x49feff});}})['then'](function(){_0xf205ff['forEach'](function(_0xa4bf2a){socket[_0x6c7c('0x71')](_0x6c7c('0x8a'),{'UserId':_0xa4bf2a,'OpenchannelQueueId':_0x163300['id']});});});});});});})[_0x6c7c('0x24')](respondWithStatusCode(_0x3d12d9,null))['catch'](handleError(_0x3d12d9,null));};exports['addAgents']=function(_0x1ad1c3,_0x59196d,_0x219e70){return db[_0x6c7c('0x2a')]['find']({'where':{'id':_0x1ad1c3[_0x6c7c('0x54')]['id']}})[_0x6c7c('0x24')](handleEntityNotFound(_0x59196d,null))[_0x6c7c('0x24')](function(_0x3b9b9e){if(_0x3b9b9e){return _0x3b9b9e[_0x6c7c('0x8b')](_0x1ad1c3['body'][_0x6c7c('0x74')],_['omit'](_0x1ad1c3[_0x6c7c('0x4a')],['ids','id'])||{})[_0x6c7c('0x8c')](function(_0x44d3bc){for(var _0xaed193=0x0;_0xaed193<_0x1ad1c3[_0x6c7c('0x4a')][_0x6c7c('0x74')][_0x6c7c('0x33')];_0xaed193+=0x1){socket[_0x6c7c('0x71')](_0x6c7c('0x72'),{'UserId':_0x1ad1c3[_0x6c7c('0x4a')][_0x6c7c('0x74')][_0xaed193],'OpenchannelQueueId':_0x1ad1c3[_0x6c7c('0x54')]['id']});}return _0x44d3bc;});}})[_0x6c7c('0x24')](respondWithResult(_0x59196d,null))[_0x6c7c('0x48')](handleError(_0x59196d,null));};exports[_0x6c7c('0x89')]=function(_0x5b5445,_0x4f2643,_0x52a9ff){return db[_0x6c7c('0x2a')][_0x6c7c('0x47')]({'where':{'id':_0x5b5445['params']['id']}})[_0x6c7c('0x24')](handleEntityNotFound(_0x4f2643,null))[_0x6c7c('0x24')](function(_0xdb01cd){if(_0xdb01cd){return _0xdb01cd[_0x6c7c('0x89')](_0x5b5445[_0x6c7c('0x2e')][_0x6c7c('0x74')])[_0x6c7c('0x24')](function(){if(_[_0x6c7c('0x8d')](_0x5b5445[_0x6c7c('0x2e')][_0x6c7c('0x74')])){for(var _0x492738=0x0;_0x492738<_0x5b5445[_0x6c7c('0x2e')][_0x6c7c('0x74')]['length'];_0x492738+=0x1){socket['emit']('userOpenchannelQueue:remove',{'UserId':Number(_0x5b5445[_0x6c7c('0x2e')]['ids'][_0x492738]),'OpenchannelQueueId':Number(_0x5b5445[_0x6c7c('0x54')]['id'])});}}else{socket[_0x6c7c('0x71')](_0x6c7c('0x8a'),{'UserId':Number(_0x5b5445[_0x6c7c('0x2e')][_0x6c7c('0x74')]),'OpenchannelQueueId':Number(_0x5b5445['params']['id'])});}});}})[_0x6c7c('0x24')](respondWithStatusCode(_0x4f2643,null))[_0x6c7c('0x48')](handleError(_0x4f2643,null));};exports[_0x6c7c('0x8e')]=function(_0x4bc65d,_0x16c25b,_0x22a5cf){var _0x3d0a11={};var _0x1da29d={};var _0x320a62;var _0xc9c7c9;return db[_0x6c7c('0x2a')][_0x6c7c('0x57')]({'where':{'id':_0x4bc65d['params']['id']}})[_0x6c7c('0x24')](handleEntityNotFound(_0x16c25b,null))[_0x6c7c('0x24')](function(_0x3bb72d){if(_0x3bb72d){_0x320a62=_0x3bb72d;_0x1da29d['model']=_[_0x6c7c('0x2d')](db[_0x6c7c('0x5b')][_0x6c7c('0x2b')]);_0x1da29d[_0x6c7c('0x2e')]=_[_0x6c7c('0x2d')](_0x4bc65d['query']);_0x1da29d[_0x6c7c('0x2f')]=_[_0x6c7c('0x30')](_0x1da29d['model'],_0x1da29d[_0x6c7c('0x2e')]);_0x3d0a11[_0x6c7c('0x31')]=_['intersection'](_0x1da29d[_0x6c7c('0x2c')],qs['fields'](_0x4bc65d['query'][_0x6c7c('0x32')]));_0x3d0a11[_0x6c7c('0x31')]=_0x3d0a11[_0x6c7c('0x31')][_0x6c7c('0x33')]?_0x3d0a11[_0x6c7c('0x31')]:_0x1da29d[_0x6c7c('0x2c')];_0x3d0a11[_0x6c7c('0x37')]=qs['sort'](_0x4bc65d['query']['sort']);_0x3d0a11[_0x6c7c('0x39')]=qs[_0x6c7c('0x2f')](_[_0x6c7c('0x3a')](_0x4bc65d[_0x6c7c('0x2e')],_0x1da29d[_0x6c7c('0x2f')]));if(_0x4bc65d[_0x6c7c('0x2e')]['filter']){_0x3d0a11[_0x6c7c('0x39')]=_[_0x6c7c('0x46')](_0x3d0a11[_0x6c7c('0x39')],{'$or':_[_0x6c7c('0x3c')](_0x3d0a11[_0x6c7c('0x31')],function(_0x23b4e0){var _0x3e5a75={};_0x3e5a75[_0x23b4e0]={'$like':'%'+_0x4bc65d[_0x6c7c('0x2e')][_0x6c7c('0x3b')]+'%'};return _0x3e5a75;})});}_0x3d0a11=_[_0x6c7c('0x46')]({},_0x3d0a11,_0x4bc65d['options']);return _0x320a62[_0x6c7c('0x8e')](_0x3d0a11);}})[_0x6c7c('0x24')](function(_0x121851){if(_0x121851){_0xc9c7c9=_0x121851[_0x6c7c('0x33')];if(!_0x4bc65d['query'][_0x6c7c('0x34')]('nolimit')){_0x3d0a11[_0x6c7c('0x36')]=qs[_0x6c7c('0x36')](_0x4bc65d[_0x6c7c('0x2e')][_0x6c7c('0x36')]);_0x3d0a11[_0x6c7c('0x1d')]=qs['offset'](_0x4bc65d[_0x6c7c('0x2e')][_0x6c7c('0x1d')]);}return _0x320a62['getAgents'](_0x3d0a11);}})[_0x6c7c('0x24')](function(_0x4d44bc){if(_0x4d44bc){return _0x4d44bc?{'count':_0xc9c7c9,'rows':_0x4d44bc}:null;}})[_0x6c7c('0x24')](respondWithResult(_0x16c25b,null))[_0x6c7c('0x48')](handleError(_0x16c25b,null));};
\ No newline at end of file
+var _0xa2e4=['localhost','socket.io-emitter','register','sendStatus','status','end','json','offset','limit','Content-Range','apply','reject','update','then','get','OpenchannelQueues','UserProfileResource','error','stack','name','send','OpenchannelQueue','rawAttributes','model','keys','query','filters','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','map','type','key','VIRTUAL','merge','options','count','includeAll','include','findAll','catch','params','intersection','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','destroy','describe','UserOpenchannelQueue','findAndCountAll','UserId','openchannelPause','createdAt','rows','%s/%s','updatedAt','getTeams','findOne','Team','addTeams','teams','User','Agents','online','voicePause','flatMap','sequelize','transaction','each','findOrCreate','forEach','userOpenchannelQueue:save','removeTeams','field','tq.TeamId','from','team_has_openchannel_queues','join','user_has_teams','clone','ut.UserId\x20=\x20?','push','QueryTypes','SELECT','every','includes','union','compact','ids','isEmpty','removeAgents','emit','userOpenchannelQueue:remove','spread','isArray','pick','getAgents','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','ejs','lodash','squel','crypto','jsforce','to-csv','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','redis','defaults'];(function(_0x245f1f,_0x3eaca4){var _0x561b1b=function(_0x440244){while(--_0x440244){_0x245f1f['push'](_0x245f1f['shift']());}};_0x561b1b(++_0x3eaca4);}(_0xa2e4,0xee));var _0x4a2e=function(_0x3dac2c,_0x2ad312){_0x3dac2c=_0x3dac2c-0x0;var _0x23f73a=_0xa2e4[_0x3dac2c];return _0x23f73a;};'use strict';var pdf=require(_0x4a2e('0x0'));var emlformat=require(_0x4a2e('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x4a2e('0x2'));var jsonpatch=require(_0x4a2e('0x3'));var rp=require(_0x4a2e('0x4'));var moment=require(_0x4a2e('0x5'));var BPromise=require(_0x4a2e('0x6'));var Mustache=require('mustache');var util=require(_0x4a2e('0x7'));var path=require(_0x4a2e('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x4a2e('0x9'));var fs=require('fs');var _=require(_0x4a2e('0xa'));var squel=require(_0x4a2e('0xb'));var crypto=require(_0x4a2e('0xc'));var jsforce=require(_0x4a2e('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x4a2e('0xe'));var querystring=require(_0x4a2e('0xf'));var Papa=require(_0x4a2e('0x10'));var Redis=require('ioredis');var authService=require(_0x4a2e('0x11'));var qs=require(_0x4a2e('0x12'));var hardwareService=require(_0x4a2e('0x13'));var logger=require(_0x4a2e('0x14'))(_0x4a2e('0x15'));var utils=require(_0x4a2e('0x16'));var config=require('../../config/environment');var db=require(_0x4a2e('0x17'))['db'];config[_0x4a2e('0x18')]=_[_0x4a2e('0x19')](config[_0x4a2e('0x18')],{'host':_0x4a2e('0x1a'),'port':0x18eb});var socket=require(_0x4a2e('0x1b'))(new Redis(config[_0x4a2e('0x18')]));require('./openchannelQueue.socket')[_0x4a2e('0x1c')](socket);function respondWithStatusCode(_0x153d3c,_0x3908c2){_0x3908c2=_0x3908c2||0xcc;return function(_0x1e2acb){if(_0x1e2acb){return _0x153d3c[_0x4a2e('0x1d')](_0x3908c2);}return _0x153d3c[_0x4a2e('0x1e')](_0x3908c2)[_0x4a2e('0x1f')]();};}function respondWithResult(_0x526b99,_0x425e9c){_0x425e9c=_0x425e9c||0xc8;return function(_0x27bc2b){if(_0x27bc2b){return _0x526b99['status'](_0x425e9c)[_0x4a2e('0x20')](_0x27bc2b);}};}function respondWithFilteredResult(_0x516ee4,_0x36dca9){return function(_0xc1ad80){if(_0xc1ad80){var _0x482d4b=_0xc1ad80['count'],_0x90b20=_0x36dca9[_0x4a2e('0x21')],_0x3a0ba2=_0x36dca9['offset']+_0x36dca9[_0x4a2e('0x22')],_0x51fe3a;if(_0x3a0ba2>=_0x482d4b){_0x3a0ba2=_0x482d4b;_0x51fe3a=0xc8;}else{_0x51fe3a=0xce;}_0x516ee4[_0x4a2e('0x1e')](_0x51fe3a);return _0x516ee4['set'](_0x4a2e('0x23'),_0x90b20+'-'+_0x3a0ba2+'/'+_0x482d4b)[_0x4a2e('0x20')](_0xc1ad80);}return null;};}function patchUpdates(_0x392ebf){return function(_0x7dd9e6){try{jsonpatch[_0x4a2e('0x24')](_0x7dd9e6,_0x392ebf,!![]);}catch(_0x47fe83){return BPromise[_0x4a2e('0x25')](_0x47fe83);}return _0x7dd9e6['save']();};}function saveUpdates(_0x40fa0d,_0x442a43){return function(_0x139e17){if(_0x139e17){return _0x139e17[_0x4a2e('0x26')](_0x40fa0d)[_0x4a2e('0x27')](function(_0x5c7fcd){return _0x5c7fcd;});}return null;};}function removeEntity(_0x556931,_0x1fdb9e){return function(_0x469859){if(_0x469859){return _0x469859['destroy']()['then'](function(){var _0x40a41c=_0x469859[_0x4a2e('0x28')]({'plain':!![]});var _0x5d85af=_0x4a2e('0x29');return db[_0x4a2e('0x2a')]['destroy']({'where':{'type':_0x5d85af,'resourceId':_0x40a41c['id']}})[_0x4a2e('0x27')](function(){return _0x469859;});})[_0x4a2e('0x27')](function(){_0x556931[_0x4a2e('0x1e')](0xcc)['end']();});}};}function handleEntityNotFound(_0x45491f,_0x1ece10){return function(_0x3afff3){if(!_0x3afff3){_0x45491f[_0x4a2e('0x1d')](0x194);}return _0x3afff3;};}function handleError(_0x19cdb3,_0x3f080d){_0x3f080d=_0x3f080d||0x1f4;return function(_0x42b3e9){logger[_0x4a2e('0x2b')](_0x42b3e9[_0x4a2e('0x2c')]);if(_0x42b3e9['name']){delete _0x42b3e9[_0x4a2e('0x2d')];}_0x19cdb3['status'](_0x3f080d)[_0x4a2e('0x2e')](_0x42b3e9);};}exports['index']=function(_0x1f1dd4,_0x2ccfd0){var _0x3d6cb1={},_0x45965c={},_0x1d83d0={'count':0x0,'rows':[]};var _0x15517f=db[_0x4a2e('0x2f')][_0x4a2e('0x30')];_0x45965c[_0x4a2e('0x31')]=_[_0x4a2e('0x32')](_0x15517f);_0x45965c['query']=_[_0x4a2e('0x32')](_0x1f1dd4[_0x4a2e('0x33')]);_0x45965c[_0x4a2e('0x34')]=_['intersection'](_0x45965c['model'],_0x45965c[_0x4a2e('0x33')]);_0x3d6cb1[_0x4a2e('0x35')]=_['intersection'](_0x45965c[_0x4a2e('0x31')],qs[_0x4a2e('0x36')](_0x1f1dd4[_0x4a2e('0x33')]['fields']));_0x3d6cb1['attributes']=_0x3d6cb1[_0x4a2e('0x35')][_0x4a2e('0x37')]?_0x3d6cb1[_0x4a2e('0x35')]:_0x45965c[_0x4a2e('0x31')];if(!_0x1f1dd4[_0x4a2e('0x33')][_0x4a2e('0x38')](_0x4a2e('0x39'))){_0x3d6cb1[_0x4a2e('0x22')]=qs[_0x4a2e('0x22')](_0x1f1dd4[_0x4a2e('0x33')][_0x4a2e('0x22')]);_0x3d6cb1[_0x4a2e('0x21')]=qs[_0x4a2e('0x21')](_0x1f1dd4[_0x4a2e('0x33')][_0x4a2e('0x21')]);}_0x3d6cb1[_0x4a2e('0x3a')]=qs['sort'](_0x1f1dd4['query'][_0x4a2e('0x3b')]);_0x3d6cb1[_0x4a2e('0x3c')]=qs[_0x4a2e('0x34')](_['pick'](_0x1f1dd4[_0x4a2e('0x33')],_0x45965c[_0x4a2e('0x34')]));if(_0x1f1dd4[_0x4a2e('0x33')][_0x4a2e('0x3d')]){_0x3d6cb1[_0x4a2e('0x3c')]=_['merge'](_0x3d6cb1[_0x4a2e('0x3c')],{'$or':_[_0x4a2e('0x3e')](_0x15517f,function(_0x381a73){if(_0x381a73[_0x4a2e('0x3f')][_0x4a2e('0x40')]!==_0x4a2e('0x41')){var _0x271930={};_0x271930[_0x381a73['field']]={'$like':'%'+_0x1f1dd4[_0x4a2e('0x33')][_0x4a2e('0x3d')]+'%'};return _0x271930;}})});}_0x3d6cb1=_[_0x4a2e('0x42')]({},_0x3d6cb1,_0x1f1dd4[_0x4a2e('0x43')]);var _0x3370c0={'where':_0x3d6cb1[_0x4a2e('0x3c')]};return db[_0x4a2e('0x2f')][_0x4a2e('0x44')](_0x3370c0)[_0x4a2e('0x27')](function(_0x429533){_0x1d83d0[_0x4a2e('0x44')]=_0x429533;if(_0x1f1dd4[_0x4a2e('0x33')][_0x4a2e('0x45')]){_0x3d6cb1[_0x4a2e('0x46')]=[{'all':!![]}];}return db['OpenchannelQueue'][_0x4a2e('0x47')](_0x3d6cb1);})['then'](function(_0x583677){_0x1d83d0['rows']=_0x583677;return _0x1d83d0;})['then'](respondWithFilteredResult(_0x2ccfd0,_0x3d6cb1))[_0x4a2e('0x48')](handleError(_0x2ccfd0,null));};exports['show']=function(_0x2c2074,_0x1d4123){var _0x4dc111={'raw':!![],'where':{'id':_0x2c2074[_0x4a2e('0x49')]['id']}},_0x5a13a5={};_0x5a13a5[_0x4a2e('0x31')]=_['keys'](db[_0x4a2e('0x2f')]['rawAttributes']);_0x5a13a5['query']=_['keys'](_0x2c2074['query']);_0x5a13a5[_0x4a2e('0x34')]=_[_0x4a2e('0x4a')](_0x5a13a5[_0x4a2e('0x31')],_0x5a13a5[_0x4a2e('0x33')]);_0x4dc111[_0x4a2e('0x35')]=_[_0x4a2e('0x4a')](_0x5a13a5['model'],qs[_0x4a2e('0x36')](_0x2c2074['query'][_0x4a2e('0x36')]));_0x4dc111[_0x4a2e('0x35')]=_0x4dc111[_0x4a2e('0x35')][_0x4a2e('0x37')]?_0x4dc111[_0x4a2e('0x35')]:_0x5a13a5[_0x4a2e('0x31')];if(_0x2c2074[_0x4a2e('0x33')][_0x4a2e('0x45')]){_0x4dc111[_0x4a2e('0x46')]=[{'all':!![]}];}_0x4dc111=_['merge']({},_0x4dc111,_0x2c2074[_0x4a2e('0x43')]);return db[_0x4a2e('0x2f')][_0x4a2e('0x4b')](_0x4dc111)[_0x4a2e('0x27')](handleEntityNotFound(_0x1d4123,null))[_0x4a2e('0x27')](respondWithResult(_0x1d4123,null))[_0x4a2e('0x48')](handleError(_0x1d4123,null));};exports['create']=function(_0x4f2c96,_0x15483a){return db[_0x4a2e('0x2f')][_0x4a2e('0x4c')](_0x4f2c96[_0x4a2e('0x4d')],{})['then'](function(_0x33a792){var _0x1250df=_0x4f2c96[_0x4a2e('0x4e')][_0x4a2e('0x28')]({'plain':!![]});if(!_0x1250df)throw new Error(_0x4a2e('0x4f'));if(_0x1250df['role']==='user'){var _0x5af79e=_0x33a792['get']({'plain':!![]});var _0x1c0ddd=_0x4a2e('0x29');return db[_0x4a2e('0x50')][_0x4a2e('0x4b')]({'where':{'name':_0x1c0ddd,'userProfileId':_0x1250df['userProfileId']},'raw':!![]})['then'](function(_0x3e27b8){if(_0x3e27b8&&_0x3e27b8['autoAssociation']===0x0){return db[_0x4a2e('0x2a')][_0x4a2e('0x4c')]({'name':_0x5af79e[_0x4a2e('0x2d')],'resourceId':_0x5af79e['id'],'type':_0x3e27b8['name'],'sectionId':_0x3e27b8['id']},{})[_0x4a2e('0x27')](function(){return _0x33a792;});}else{return _0x33a792;}})['catch'](function(_0x3fcd51){logger[_0x4a2e('0x2b')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x3fcd51);throw _0x3fcd51;});}return _0x33a792;})[_0x4a2e('0x27')](respondWithResult(_0x15483a,0xc9))[_0x4a2e('0x48')](handleError(_0x15483a,null));};exports[_0x4a2e('0x26')]=function(_0xdef90d,_0x15c748){if(_0xdef90d['body']['id']){delete _0xdef90d[_0x4a2e('0x4d')]['id'];}return db['OpenchannelQueue'][_0x4a2e('0x4b')]({'where':{'id':_0xdef90d[_0x4a2e('0x49')]['id']}})['then'](handleEntityNotFound(_0x15c748,null))[_0x4a2e('0x27')](saveUpdates(_0xdef90d[_0x4a2e('0x4d')],null))[_0x4a2e('0x27')](respondWithResult(_0x15c748,null))[_0x4a2e('0x48')](handleError(_0x15c748,null));};exports[_0x4a2e('0x51')]=function(_0x4a64e2,_0x133344){return db[_0x4a2e('0x2f')][_0x4a2e('0x4b')]({'where':{'id':_0x4a64e2[_0x4a2e('0x49')]['id']}})[_0x4a2e('0x27')](handleEntityNotFound(_0x133344,null))[_0x4a2e('0x27')](removeEntity(_0x133344,null))[_0x4a2e('0x48')](handleError(_0x133344,null));};exports['describe']=function(_0x1057f1,_0x4bce67){return db['OpenchannelQueue'][_0x4a2e('0x52')]()[_0x4a2e('0x27')](respondWithResult(_0x4bce67,null))[_0x4a2e('0x48')](handleError(_0x4bce67,null));};exports['getMembers']=function(_0x4fb65f,_0x4d7040,_0x339e26){var _0x2dae91={'raw':!![],'where':{}},_0xeb282e={},_0x302c18;return db['OpenchannelQueue']['findOne']({'where':{'id':_0x4fb65f[_0x4a2e('0x49')]['id']}})[_0x4a2e('0x27')](handleEntityNotFound(_0x4d7040,null))['then'](function(_0x59f59a){if(_0x59f59a){_0x302c18=_0x59f59a['get']({'plain':!![]});_0xeb282e['model']=_[_0x4a2e('0x32')](db[_0x4a2e('0x53')][_0x4a2e('0x30')]);_0xeb282e['query']=_[_0x4a2e('0x32')](_0x4fb65f[_0x4a2e('0x33')]);_0xeb282e['filters']=_[_0x4a2e('0x4a')](_0xeb282e[_0x4a2e('0x31')],_0xeb282e[_0x4a2e('0x33')]);_0x2dae91[_0x4a2e('0x35')]=_['intersection'](_0xeb282e[_0x4a2e('0x31')],qs[_0x4a2e('0x36')](_0x4fb65f[_0x4a2e('0x33')][_0x4a2e('0x36')]));_0x2dae91[_0x4a2e('0x35')]=_0x2dae91[_0x4a2e('0x35')][_0x4a2e('0x37')]?_0x2dae91['attributes']:_0xeb282e[_0x4a2e('0x31')];if(!_0x4fb65f['query'][_0x4a2e('0x38')]('nolimit')){_0x2dae91['limit']=qs[_0x4a2e('0x22')](_0x4fb65f[_0x4a2e('0x33')]['limit']);_0x2dae91[_0x4a2e('0x21')]=qs['offset'](_0x4fb65f[_0x4a2e('0x33')]['offset']);}_0x2dae91[_0x4a2e('0x3a')]=qs[_0x4a2e('0x3b')](_0x4fb65f[_0x4a2e('0x33')]['sort']);_0x2dae91[_0x4a2e('0x3c')]=qs[_0x4a2e('0x34')](_['pick'](_0x4fb65f['query'],_0xeb282e[_0x4a2e('0x34')]));_0x2dae91['where']['OpenchannelQueueId']=_0x59f59a['id'];if(_0x4fb65f['query'][_0x4a2e('0x3d')]){_0x2dae91[_0x4a2e('0x3c')]=_[_0x4a2e('0x42')](_0x2dae91[_0x4a2e('0x3c')],{'$or':_[_0x4a2e('0x3e')](_0x2dae91[_0x4a2e('0x35')],function(_0x390ee8){var _0x5af023={};_0x5af023[_0x390ee8]={'$like':'%'+_0x4fb65f['query']['filter']+'%'};return _0x5af023;})});}_0x2dae91=_[_0x4a2e('0x42')]({},_0x2dae91,_0x4fb65f['options']);return db[_0x4a2e('0x53')][_0x4a2e('0x47')](_0x2dae91);}})[_0x4a2e('0x27')](function(_0x143d3e){if(_0x143d3e){return db['User'][_0x4a2e('0x54')]({'where':{'id':_['map'](_0x143d3e,_0x4a2e('0x55')),'role':'agent'},'attributes':['id',_0x4a2e('0x2d'),_0x4a2e('0x56'),'updatedAt',_0x4a2e('0x57')]});}})[_0x4a2e('0x27')](function(_0x14814a){if(_0x14814a){return{'count':_0x14814a['count'],'rows':_[_0x4a2e('0x3e')](_0x14814a[_0x4a2e('0x58')],function(_0x172216){return{'membername':_0x172216[_0x4a2e('0x2d')],'UserId':_0x172216['id'],'queue_name':_0x302c18[_0x4a2e('0x2d')],'OpenchannelQueueId':_0x302c18['id'],'interface':util['format'](_0x4a2e('0x59'),'SIP',_0x172216['name']),'penalty':0x0,'paused':_0x172216[_0x4a2e('0x56')],'createdAt':_0x172216[_0x4a2e('0x57')],'updatedAt':_0x172216[_0x4a2e('0x5a')]};})};}else{return{'count':0x0,'rows':[]};}})[_0x4a2e('0x27')](respondWithFilteredResult(_0x4d7040,_0x2dae91))['catch'](handleError(_0x4d7040,null));};exports[_0x4a2e('0x5b')]=function(_0x173976,_0x2fa484,_0x413bb1){var _0x4a88b4={};var _0x45327a={};var _0x486abc;var _0x4d774d;return db[_0x4a2e('0x2f')][_0x4a2e('0x5c')]({'where':{'id':_0x173976[_0x4a2e('0x49')]['id']}})[_0x4a2e('0x27')](handleEntityNotFound(_0x2fa484,null))[_0x4a2e('0x27')](function(_0x520e18){if(_0x520e18){_0x486abc=_0x520e18;_0x45327a[_0x4a2e('0x31')]=_['keys'](db[_0x4a2e('0x5d')][_0x4a2e('0x30')]);_0x45327a[_0x4a2e('0x33')]=_['keys'](_0x173976['query']);_0x45327a[_0x4a2e('0x34')]=_[_0x4a2e('0x4a')](_0x45327a['model'],_0x45327a[_0x4a2e('0x33')]);_0x4a88b4[_0x4a2e('0x35')]=_[_0x4a2e('0x4a')](_0x45327a[_0x4a2e('0x31')],qs[_0x4a2e('0x36')](_0x173976[_0x4a2e('0x33')][_0x4a2e('0x36')]));_0x4a88b4[_0x4a2e('0x35')]=_0x4a88b4[_0x4a2e('0x35')][_0x4a2e('0x37')]?_0x4a88b4[_0x4a2e('0x35')]:_0x45327a[_0x4a2e('0x31')];_0x4a88b4[_0x4a2e('0x3a')]=qs[_0x4a2e('0x3b')](_0x173976[_0x4a2e('0x33')][_0x4a2e('0x3b')]);_0x4a88b4['where']=qs['filters'](_['pick'](_0x173976[_0x4a2e('0x33')],_0x45327a[_0x4a2e('0x34')]));if(_0x173976['query'][_0x4a2e('0x3d')]){_0x4a88b4[_0x4a2e('0x3c')]=_['merge'](_0x4a88b4[_0x4a2e('0x3c')],{'$or':_[_0x4a2e('0x3e')](_0x4a88b4[_0x4a2e('0x35')],function(_0x105962){var _0x4c2b34={};_0x4c2b34[_0x105962]={'$like':'%'+_0x173976[_0x4a2e('0x33')]['filter']+'%'};return _0x4c2b34;})});}_0x4a88b4=_[_0x4a2e('0x42')]({},_0x4a88b4,_0x173976['options']);return _0x486abc[_0x4a2e('0x5b')](_0x4a88b4);}})[_0x4a2e('0x27')](function(_0x676d6e){if(_0x676d6e){_0x4d774d=_0x676d6e[_0x4a2e('0x37')];if(!_0x173976[_0x4a2e('0x33')][_0x4a2e('0x38')](_0x4a2e('0x39'))){_0x4a88b4['limit']=qs[_0x4a2e('0x22')](_0x173976[_0x4a2e('0x33')][_0x4a2e('0x22')]);_0x4a88b4[_0x4a2e('0x21')]=qs[_0x4a2e('0x21')](_0x173976[_0x4a2e('0x33')][_0x4a2e('0x21')]);}return _0x486abc[_0x4a2e('0x5b')](_0x4a88b4);}})['then'](function(_0x4d48c6){if(_0x4d48c6){return _0x4d48c6?{'count':_0x4d774d,'rows':_0x4d48c6}:null;}})[_0x4a2e('0x27')](respondWithResult(_0x2fa484,null))[_0x4a2e('0x48')](handleError(_0x2fa484,null));};exports[_0x4a2e('0x5e')]=function(_0x1553bf,_0x29f4f8,_0x286d3c){var _0x2303f1=_0x1553bf[_0x4a2e('0x4d')][_0x4a2e('0x5f')];return db['Team'][_0x4a2e('0x47')]({'where':{'id':_[_0x4a2e('0x3e')](_0x2303f1,'id')},'attributes':['id'],'include':[{'model':db[_0x4a2e('0x60')],'as':_0x4a2e('0x61'),'attributes':['id','name',_0x4a2e('0x62'),_0x4a2e('0x63'),'interface'],'raw':!![]}]})[_0x4a2e('0x27')](function(_0x491a2a){if(_0x491a2a){var _0x76cd3b=_[_0x4a2e('0x64')](_0x491a2a,function(_0x41208d){var _0x586409=_0x41208d[_0x4a2e('0x28')]({'plain':!![]});return _0x586409[_0x4a2e('0x61')];});return db['OpenchannelQueue'][_0x4a2e('0x4b')]({'where':{'id':_0x1553bf[_0x4a2e('0x49')]['id']}})[_0x4a2e('0x27')](function(_0x56d244){return db[_0x4a2e('0x65')][_0x4a2e('0x66')](function(_0x3ab8d9){return _0x56d244[_0x4a2e('0x5e')](_[_0x4a2e('0x3e')](_0x2303f1,'id'),{'transaction':_0x3ab8d9})[_0x4a2e('0x27')](function(){return BPromise[_0x4a2e('0x67')](_0x76cd3b,function(_0x3a8ad1){return db['UserOpenchannelQueue'][_0x4a2e('0x68')]({'where':{'UserId':_0x3a8ad1['id'],'OpenchannelQueueId':_0x1553bf[_0x4a2e('0x49')]['id']},'transaction':_0x3ab8d9});});})[_0x4a2e('0x27')](function(){_0x76cd3b[_0x4a2e('0x69')](function(_0x5ccd47){socket['emit'](_0x4a2e('0x6a'),{'UserId':_0x5ccd47['id'],'OpenchannelQueueId':_0x56d244['id']});});});});});}})[_0x4a2e('0x27')](respondWithStatusCode(_0x29f4f8,null))[_0x4a2e('0x48')](handleError(_0x29f4f8,null));};exports[_0x4a2e('0x6b')]=function(_0x3eeb6e,_0x1586e0,_0x2a3e29){return db[_0x4a2e('0x5d')][_0x4a2e('0x47')]({'where':{'id':_0x3eeb6e['query']['ids']},'attributes':['id'],'include':[{'model':db[_0x4a2e('0x60')],'as':_0x4a2e('0x61'),'attributes':['id'],'raw':!![]}]})[_0x4a2e('0x27')](handleEntityNotFound(_0x1586e0,null))[_0x4a2e('0x27')](function(_0x3f7afd){var _0x3170ee=_[_0x4a2e('0x3e')](_0x3f7afd,'id');var _0x303fc0=[];var _0x40bbdb=[];var _0x14025f=squel['select']();_0x14025f[_0x4a2e('0x6c')](_0x4a2e('0x6d'))[_0x4a2e('0x6e')](_0x4a2e('0x6f'),'tq')[_0x4a2e('0x70')](_0x4a2e('0x71'),'ut','ut.TeamId\x20=\x20tq.TeamId')[_0x4a2e('0x3c')]('OpenchannelQueueId\x20=\x20?',_0x3eeb6e[_0x4a2e('0x49')]['id']);for(var _0x51663f=0x0;_0x51663f<_0x3f7afd[_0x4a2e('0x37')];_0x51663f+=0x1){let _0x4d3b9e=_0x3f7afd[_0x51663f];for(var _0x29f05c=0x0;_0x29f05c<_0x4d3b9e[_0x4a2e('0x61')]['length'];_0x29f05c+=0x1){let _0x545a44=_0x4d3b9e[_0x4a2e('0x61')][_0x29f05c];var _0x37a55f=_0x14025f[_0x4a2e('0x72')]();_0x37a55f[_0x4a2e('0x3c')](_0x4a2e('0x73'),_0x545a44['id']);_0x40bbdb[_0x4a2e('0x74')](db[_0x4a2e('0x65')]['query'](_0x37a55f['toString'](),{'type':db[_0x4a2e('0x65')][_0x4a2e('0x75')][_0x4a2e('0x76')]})[_0x4a2e('0x27')](function(_0x183667){if(_0x183667[_0x4a2e('0x37')]===0x1){return _0x545a44['id'];}else{var _0x3c76f2=_[_0x4a2e('0x77')](_['map'](_0x183667,'TeamId'),function(_0x2f0d12){return _[_0x4a2e('0x78')](_0x3170ee,_0x2f0d12);});if(_0x3c76f2){return _0x545a44['id'];}}}));}}return BPromise['all'](_0x40bbdb)['then'](function(_0xd59af){_0x303fc0=_(_0x303fc0)[_0x4a2e('0x79')](_0xd59af)[_0x4a2e('0x7a')]()['value']();return db['OpenchannelQueue'][_0x4a2e('0x4b')]({'where':{'id':_0x3eeb6e[_0x4a2e('0x49')]['id']}})[_0x4a2e('0x27')](function(_0x50e828){return db[_0x4a2e('0x65')][_0x4a2e('0x66')](function(_0x35fe20){return _0x50e828[_0x4a2e('0x6b')](_0x3eeb6e[_0x4a2e('0x33')][_0x4a2e('0x7b')],{'transaction':_0x35fe20})[_0x4a2e('0x27')](function(){if(!_[_0x4a2e('0x7c')](_0x303fc0)){return _0x50e828[_0x4a2e('0x7d')](_0x303fc0,{'transaction':_0x35fe20});}})[_0x4a2e('0x27')](function(){_0x303fc0[_0x4a2e('0x69')](function(_0x84e968){socket[_0x4a2e('0x7e')](_0x4a2e('0x7f'),{'UserId':_0x84e968,'OpenchannelQueueId':_0x50e828['id']});});});});});});})['then'](respondWithStatusCode(_0x1586e0,null))[_0x4a2e('0x48')](handleError(_0x1586e0,null));};exports['addAgents']=function(_0x5b13dd,_0x542b12,_0x116c21){return db[_0x4a2e('0x2f')]['find']({'where':{'id':_0x5b13dd[_0x4a2e('0x49')]['id']}})[_0x4a2e('0x27')](handleEntityNotFound(_0x542b12,null))[_0x4a2e('0x27')](function(_0x5f1982){if(_0x5f1982){return _0x5f1982['addAgents'](_0x5b13dd[_0x4a2e('0x4d')]['ids'],_['omit'](_0x5b13dd['body'],[_0x4a2e('0x7b'),'id'])||{})[_0x4a2e('0x80')](function(_0x49ed52){for(var _0x1e7c6c=0x0;_0x1e7c6c<_0x5b13dd[_0x4a2e('0x4d')][_0x4a2e('0x7b')][_0x4a2e('0x37')];_0x1e7c6c+=0x1){socket[_0x4a2e('0x7e')](_0x4a2e('0x6a'),{'UserId':_0x5b13dd[_0x4a2e('0x4d')][_0x4a2e('0x7b')][_0x1e7c6c],'OpenchannelQueueId':_0x5b13dd[_0x4a2e('0x49')]['id']});}return _0x49ed52;});}})[_0x4a2e('0x27')](respondWithResult(_0x542b12,null))[_0x4a2e('0x48')](handleError(_0x542b12,null));};exports[_0x4a2e('0x7d')]=function(_0x1cef07,_0x3dd15d,_0x5a9ebd){return db[_0x4a2e('0x2f')][_0x4a2e('0x4b')]({'where':{'id':_0x1cef07['params']['id']}})[_0x4a2e('0x27')](handleEntityNotFound(_0x3dd15d,null))[_0x4a2e('0x27')](function(_0xda6cfb){if(_0xda6cfb){return _0xda6cfb[_0x4a2e('0x7d')](_0x1cef07[_0x4a2e('0x33')][_0x4a2e('0x7b')])[_0x4a2e('0x27')](function(){if(_[_0x4a2e('0x81')](_0x1cef07[_0x4a2e('0x33')][_0x4a2e('0x7b')])){for(var _0xfad5d0=0x0;_0xfad5d0<_0x1cef07['query'][_0x4a2e('0x7b')][_0x4a2e('0x37')];_0xfad5d0+=0x1){socket[_0x4a2e('0x7e')]('userOpenchannelQueue:remove',{'UserId':Number(_0x1cef07['query']['ids'][_0xfad5d0]),'OpenchannelQueueId':Number(_0x1cef07[_0x4a2e('0x49')]['id'])});}}else{socket[_0x4a2e('0x7e')]('userOpenchannelQueue:remove',{'UserId':Number(_0x1cef07[_0x4a2e('0x33')]['ids']),'OpenchannelQueueId':Number(_0x1cef07[_0x4a2e('0x49')]['id'])});}});}})[_0x4a2e('0x27')](respondWithStatusCode(_0x3dd15d,null))['catch'](handleError(_0x3dd15d,null));};exports['getAgents']=function(_0x22dafb,_0x4310a8,_0x1f7b5c){var _0x1f8941={};var _0x363bef={};var _0x12359a;var _0x1bb972;return db[_0x4a2e('0x2f')]['findOne']({'where':{'id':_0x22dafb['params']['id']}})['then'](handleEntityNotFound(_0x4310a8,null))['then'](function(_0x17b362){if(_0x17b362){_0x12359a=_0x17b362;_0x363bef['model']=_['keys'](db[_0x4a2e('0x60')][_0x4a2e('0x30')]);_0x363bef['query']=_[_0x4a2e('0x32')](_0x22dafb[_0x4a2e('0x33')]);_0x363bef[_0x4a2e('0x34')]=_[_0x4a2e('0x4a')](_0x363bef['model'],_0x363bef['query']);_0x1f8941[_0x4a2e('0x35')]=_['intersection'](_0x363bef[_0x4a2e('0x31')],qs[_0x4a2e('0x36')](_0x22dafb[_0x4a2e('0x33')][_0x4a2e('0x36')]));_0x1f8941[_0x4a2e('0x35')]=_0x1f8941[_0x4a2e('0x35')]['length']?_0x1f8941[_0x4a2e('0x35')]:_0x363bef[_0x4a2e('0x31')];_0x1f8941[_0x4a2e('0x3a')]=qs['sort'](_0x22dafb[_0x4a2e('0x33')][_0x4a2e('0x3b')]);_0x1f8941['where']=qs[_0x4a2e('0x34')](_[_0x4a2e('0x82')](_0x22dafb[_0x4a2e('0x33')],_0x363bef[_0x4a2e('0x34')]));if(_0x22dafb[_0x4a2e('0x33')]['filter']){_0x1f8941['where']=_[_0x4a2e('0x42')](_0x1f8941[_0x4a2e('0x3c')],{'$or':_['map'](_0x1f8941[_0x4a2e('0x35')],function(_0x1d7abe){var _0x20b483={};_0x20b483[_0x1d7abe]={'$like':'%'+_0x22dafb[_0x4a2e('0x33')][_0x4a2e('0x3d')]+'%'};return _0x20b483;})});}_0x1f8941=_['merge']({},_0x1f8941,_0x22dafb[_0x4a2e('0x43')]);return _0x12359a['getAgents'](_0x1f8941);}})['then'](function(_0x5d4ff6){if(_0x5d4ff6){_0x1bb972=_0x5d4ff6[_0x4a2e('0x37')];if(!_0x22dafb[_0x4a2e('0x33')][_0x4a2e('0x38')]('nolimit')){_0x1f8941[_0x4a2e('0x22')]=qs[_0x4a2e('0x22')](_0x22dafb[_0x4a2e('0x33')]['limit']);_0x1f8941['offset']=qs[_0x4a2e('0x21')](_0x22dafb[_0x4a2e('0x33')][_0x4a2e('0x21')]);}return _0x12359a[_0x4a2e('0x83')](_0x1f8941);}})[_0x4a2e('0x27')](function(_0x28ce5a){if(_0x28ce5a){return _0x28ce5a?{'count':_0x1bb972,'rows':_0x28ce5a}:null;}})[_0x4a2e('0x27')](respondWithResult(_0x4310a8,null))[_0x4a2e('0x48')](handleError(_0x4310a8,null));};
\ No newline at end of file
index 9050a77..be88e36 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x48f0=['hasOwnProperty','hook','exports','events','../../mysqldb','OpenchannelQueue','save','emit'];(function(_0x1694f5,_0x49b7c3){var _0x5b4321=function(_0x58c183){while(--_0x58c183){_0x1694f5['push'](_0x1694f5['shift']());}};_0x5b4321(++_0x49b7c3);}(_0x48f0,0x1ab));var _0x048f=function(_0x2143dc,_0x2bad8c){_0x2143dc=_0x2143dc-0x0;var _0xaa7197=_0x48f0[_0x2143dc];return _0xaa7197;};'use strict';var EventEmitter=require(_0x048f('0x0'));var OpenchannelQueue=require(_0x048f('0x1'))['db'][_0x048f('0x2')];var OpenchannelQueueEvents=new EventEmitter();OpenchannelQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x048f('0x3'),'afterUpdate':'update','afterDestroy':'remove'};function emitEvent(_0x13000f){return function(_0x33c097,_0x2525c3,_0x1ab647){OpenchannelQueueEvents[_0x048f('0x4')](_0x13000f+':'+_0x33c097['id'],_0x33c097);OpenchannelQueueEvents[_0x048f('0x4')](_0x13000f,_0x33c097);_0x1ab647(null);};}for(var e in events){if(events[_0x048f('0x5')](e)){var event=events[e];OpenchannelQueue[_0x048f('0x6')](e,emitEvent(event));}}module[_0x048f('0x7')]=OpenchannelQueueEvents;
\ No newline at end of file
+var _0x5a9b=['hasOwnProperty','hook','exports','events','../../mysqldb','setMaxListeners','remove','emit'];(function(_0x318508,_0x2cef7c){var _0x1c2ca4=function(_0x5bca4c){while(--_0x5bca4c){_0x318508['push'](_0x318508['shift']());}};_0x1c2ca4(++_0x2cef7c);}(_0x5a9b,0x1e3));var _0xb5a9=function(_0x1361a4,_0x32c15f){_0x1361a4=_0x1361a4-0x0;var _0x266cc0=_0x5a9b[_0x1361a4];return _0x266cc0;};'use strict';var EventEmitter=require(_0xb5a9('0x0'));var OpenchannelQueue=require(_0xb5a9('0x1'))['db']['OpenchannelQueue'];var OpenchannelQueueEvents=new EventEmitter();OpenchannelQueueEvents[_0xb5a9('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0xb5a9('0x3')};function emitEvent(_0x25ed60){return function(_0x1de609,_0x2b5b6a,_0x29ae56){OpenchannelQueueEvents[_0xb5a9('0x4')](_0x25ed60+':'+_0x1de609['id'],_0x1de609);OpenchannelQueueEvents['emit'](_0x25ed60,_0x1de609);_0x29ae56(null);};}for(var e in events){if(events[_0xb5a9('0x5')](e)){var event=events[e];OpenchannelQueue[_0xb5a9('0x6')](e,emitEvent(event));}}module[_0xb5a9('0x7')]=OpenchannelQueueEvents;
\ No newline at end of file
index 2526249..73e6974 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xffe3=['define','lodash','util','../../config/logger','request-promise','path','../../config/environment','./openchannelQueue.attributes','exports'];(function(_0x533e08,_0x1749ec){var _0x3901c3=function(_0x5e96e0){while(--_0x5e96e0){_0x533e08['push'](_0x533e08['shift']());}};_0x3901c3(++_0x1749ec);}(_0xffe3,0x18d));var _0x3ffe=function(_0x57e48d,_0x159839){_0x57e48d=_0x57e48d-0x0;var _0x2ef7d2=_0xffe3[_0x57e48d];return _0x2ef7d2;};'use strict';var _=require(_0x3ffe('0x0'));var util=require(_0x3ffe('0x1'));var logger=require(_0x3ffe('0x2'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x3ffe('0x3'));var fs=require('fs');var path=require(_0x3ffe('0x4'));var rimraf=require('rimraf');var config=require(_0x3ffe('0x5'));var attributes=require(_0x3ffe('0x6'));module[_0x3ffe('0x7')]=function(_0x21ed27,_0x191b31){return _0x21ed27[_0x3ffe('0x8')]('OpenchannelQueue',attributes,{'tableName':'openchannel_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xa2cb=['openchannel_queues','lodash','util','../../config/logger','api','bluebird','rimraf','define','OpenchannelQueue'];(function(_0x15e0a3,_0x3da4b5){var _0x261c01=function(_0x427cff){while(--_0x427cff){_0x15e0a3['push'](_0x15e0a3['shift']());}};_0x261c01(++_0x3da4b5);}(_0xa2cb,0x106));var _0xba2c=function(_0x4ba92b,_0x35f350){_0x4ba92b=_0x4ba92b-0x0;var _0x38bf8c=_0xa2cb[_0x4ba92b];return _0x38bf8c;};'use strict';var _=require(_0xba2c('0x0'));var util=require(_0xba2c('0x1'));var logger=require(_0xba2c('0x2'))(_0xba2c('0x3'));var moment=require('moment');var BPromise=require(_0xba2c('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0xba2c('0x5'));var config=require('../../config/environment');var attributes=require('./openchannelQueue.attributes');module['exports']=function(_0xe477a8,_0x35ba99){return _0xe477a8[_0xba2c('0x6')](_0xba2c('0x7'),attributes,{'tableName':_0xba2c('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 370394f..73338d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa8eb=['ioredis','../../mysqldb','../../config/logger','rpc','jayson/promise','http','defaults','redis','./openchannelQueue.socket','register','request','info','OpenchannelQueue,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','GetOpenchannelQueue','OpenchannelQueue','findAll','options','raw','attributes','limit','map','include','model','then','ShowOpenchannelQueue','find','where','lodash','moment','randomstring'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xa8eb,0x179));var _0xba8e=function(_0x13c96f,_0x322e9d){_0x13c96f=_0x13c96f-0x0;var _0x4176c9=_0xa8eb[_0x13c96f];return _0x4176c9;};'use strict';var _=require(_0xba8e('0x0'));var util=require('util');var moment=require(_0xba8e('0x1'));var BPromise=require('bluebird');var rs=require(_0xba8e('0x2'));var fs=require('fs');var Redis=require(_0xba8e('0x3'));var db=require(_0xba8e('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xba8e('0x5'))(_0xba8e('0x6'));var config=require('../../config/environment');var jayson=require(_0xba8e('0x7'));var client=jayson['client'][_0xba8e('0x8')]({'port':0x232a});config['redis']=_[_0xba8e('0x9')](config[_0xba8e('0xa')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xba8e('0xa')]));require(_0xba8e('0xb'))[_0xba8e('0xc')](socket);function respondWithRpcPromise(_0x876db9,_0x441bc3,_0x4c93d9){return new BPromise(function(_0x374d03,_0x2fb45c){return client[_0xba8e('0xd')](_0x876db9,_0x4c93d9)['then'](function(_0x1ee232){logger[_0xba8e('0xe')](_0xba8e('0xf'),_0x441bc3,_0xba8e('0x10'));logger[_0xba8e('0x11')]('OpenchannelQueue,\x20%s,\x20%s,\x20%s',_0x441bc3,'request\x20sent',JSON[_0xba8e('0x12')](_0x1ee232));if(_0x1ee232[_0xba8e('0x13')]){if(_0x1ee232[_0xba8e('0x13')][_0xba8e('0x14')]===0x1f4){logger[_0xba8e('0x13')](_0xba8e('0xf'),_0x441bc3,_0x1ee232[_0xba8e('0x13')][_0xba8e('0x15')]);return _0x2fb45c(_0x1ee232[_0xba8e('0x13')][_0xba8e('0x15')]);}logger[_0xba8e('0x13')]('OpenchannelQueue,\x20%s,\x20%s',_0x441bc3,_0x1ee232[_0xba8e('0x13')]['message']);return _0x374d03(_0x1ee232[_0xba8e('0x13')][_0xba8e('0x15')]);}else{logger[_0xba8e('0xe')]('OpenchannelQueue,\x20%s,\x20%s',_0x441bc3,_0xba8e('0x10'));_0x374d03(_0x1ee232[_0xba8e('0x16')][_0xba8e('0x15')]);}})[_0xba8e('0x17')](function(_0x1d98c9){logger[_0xba8e('0x13')](_0xba8e('0xf'),_0x441bc3,_0x1d98c9);_0x2fb45c(_0x1d98c9);});});}exports[_0xba8e('0x18')]=function(_0x1e1822){var _0x30c403=this;return new Promise(function(_0x469f21,_0x9c93d3){return db[_0xba8e('0x19')][_0xba8e('0x1a')]({'raw':_0x1e1822[_0xba8e('0x1b')]?_0x1e1822[_0xba8e('0x1b')][_0xba8e('0x1c')]===undefined?!![]:![]:!![],'where':_0x1e1822[_0xba8e('0x1b')]?_0x1e1822[_0xba8e('0x1b')]['where']||null:null,'attributes':_0x1e1822['options']?_0x1e1822['options'][_0xba8e('0x1d')]||null:null,'limit':_0x1e1822[_0xba8e('0x1b')]?_0x1e1822['options'][_0xba8e('0x1e')]||null:null,'include':_0x1e1822[_0xba8e('0x1b')]?_0x1e1822[_0xba8e('0x1b')]['include']?_[_0xba8e('0x1f')](_0x1e1822[_0xba8e('0x1b')][_0xba8e('0x20')],function(_0x57f4a2){return{'model':db[_0x57f4a2[_0xba8e('0x21')]],'as':_0x57f4a2['as'],'attributes':_0x57f4a2[_0xba8e('0x1d')],'include':_0x57f4a2['include']?_[_0xba8e('0x1f')](_0x57f4a2[_0xba8e('0x20')],function(_0x330346){return{'model':db[_0x330346[_0xba8e('0x21')]],'as':_0x330346['as'],'attributes':_0x330346[_0xba8e('0x1d')],'include':_0x330346[_0xba8e('0x20')]?_[_0xba8e('0x1f')](_0x330346[_0xba8e('0x20')],function(_0x264520){return{'model':db[_0x264520[_0xba8e('0x21')]],'as':_0x264520['as'],'attributes':_0x264520[_0xba8e('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xba8e('0x22')](function(_0x1baffd){logger['info'](_0xba8e('0x18'),_0x1e1822);logger['debug']('GetOpenchannelQueue',_0x1e1822,JSON[_0xba8e('0x12')](_0x1baffd));_0x469f21(_0x1baffd);})[_0xba8e('0x17')](function(_0x112415){logger['error'](_0xba8e('0x18'),_0x112415[_0xba8e('0x15')],_0x1e1822);_0x9c93d3(_0x30c403[_0xba8e('0x13')](0x1f4,_0x112415[_0xba8e('0x15')]));});});};exports[_0xba8e('0x23')]=function(_0x1b6be5){var _0x44dfb5=this;return new Promise(function(_0x3504fd,_0x55ae4b){return db['OpenchannelQueue'][_0xba8e('0x24')]({'raw':_0x1b6be5[_0xba8e('0x1b')]?_0x1b6be5['options'][_0xba8e('0x1c')]===undefined?!![]:![]:!![],'where':_0x1b6be5['options']?_0x1b6be5[_0xba8e('0x1b')][_0xba8e('0x25')]||null:null,'attributes':_0x1b6be5['options']?_0x1b6be5[_0xba8e('0x1b')][_0xba8e('0x1d')]||null:null,'include':_0x1b6be5['options']?_0x1b6be5[_0xba8e('0x1b')][_0xba8e('0x20')]?_[_0xba8e('0x1f')](_0x1b6be5[_0xba8e('0x1b')][_0xba8e('0x20')],function(_0x249b8){return{'model':db[_0x249b8[_0xba8e('0x21')]],'as':_0x249b8['as'],'attributes':_0x249b8['attributes'],'include':_0x249b8[_0xba8e('0x20')]?_[_0xba8e('0x1f')](_0x249b8['include'],function(_0xe9a0cf){return{'model':db[_0xe9a0cf['model']],'as':_0xe9a0cf['as'],'attributes':_0xe9a0cf['attributes'],'include':_0xe9a0cf[_0xba8e('0x20')]?_[_0xba8e('0x1f')](_0xe9a0cf['include'],function(_0x415824){return{'model':db[_0x415824[_0xba8e('0x21')]],'as':_0x415824['as'],'attributes':_0x415824['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x36a6e3){logger['info'](_0xba8e('0x23'),_0x1b6be5);logger[_0xba8e('0x11')](_0xba8e('0x23'),_0x1b6be5,JSON[_0xba8e('0x12')](_0x36a6e3));_0x3504fd(_0x36a6e3);})[_0xba8e('0x17')](function(_0x145dfd){logger['error'](_0xba8e('0x23'),_0x145dfd[_0xba8e('0x15')],_0x1b6be5);_0x55ae4b(_0x44dfb5[_0xba8e('0x13')](0x1f4,_0x145dfd[_0xba8e('0x15')]));});});};
\ No newline at end of file
+var _0xf3be=['lodash','util','moment','bluebird','ioredis','../../config/environment','jayson/promise','http','redis','defaults','localhost','socket.io-emitter','register','request','info','OpenchannelQueue,\x20%s,\x20%s','request\x20sent','debug','OpenchannelQueue,\x20%s,\x20%s,\x20%s','stringify','error','message','GetOpenchannelQueue','OpenchannelQueue','findAll','options','raw','where','attributes','limit','include','map','model','then','catch','ShowOpenchannelQueue','find'];(function(_0x2a67fe,_0x295c09){var _0x57e726=function(_0x280573){while(--_0x280573){_0x2a67fe['push'](_0x2a67fe['shift']());}};_0x57e726(++_0x295c09);}(_0xf3be,0x1e1));var _0xef3b=function(_0xf499ca,_0xe0e565){_0xf499ca=_0xf499ca-0x0;var _0x36e0aa=_0xf3be[_0xf499ca];return _0x36e0aa;};'use strict';var _=require(_0xef3b('0x0'));var util=require(_0xef3b('0x1'));var moment=require(_0xef3b('0x2'));var BPromise=require(_0xef3b('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xef3b('0x4'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require(_0xef3b('0x5'));var jayson=require(_0xef3b('0x6'));var client=jayson['client'][_0xef3b('0x7')]({'port':0x232a});config[_0xef3b('0x8')]=_[_0xef3b('0x9')](config[_0xef3b('0x8')],{'host':_0xef3b('0xa'),'port':0x18eb});var socket=require(_0xef3b('0xb'))(new Redis(config['redis']));require('./openchannelQueue.socket')[_0xef3b('0xc')](socket);function respondWithRpcPromise(_0x5d7b56,_0xecdace,_0x3f5562){return new BPromise(function(_0x2589d4,_0x5b7ea8){return client[_0xef3b('0xd')](_0x5d7b56,_0x3f5562)['then'](function(_0x11e926){logger[_0xef3b('0xe')](_0xef3b('0xf'),_0xecdace,_0xef3b('0x10'));logger[_0xef3b('0x11')](_0xef3b('0x12'),_0xecdace,_0xef3b('0x10'),JSON[_0xef3b('0x13')](_0x11e926));if(_0x11e926[_0xef3b('0x14')]){if(_0x11e926[_0xef3b('0x14')]['code']===0x1f4){logger['error'](_0xef3b('0xf'),_0xecdace,_0x11e926[_0xef3b('0x14')][_0xef3b('0x15')]);return _0x5b7ea8(_0x11e926[_0xef3b('0x14')][_0xef3b('0x15')]);}logger['error'](_0xef3b('0xf'),_0xecdace,_0x11e926[_0xef3b('0x14')][_0xef3b('0x15')]);return _0x2589d4(_0x11e926[_0xef3b('0x14')][_0xef3b('0x15')]);}else{logger['info'](_0xef3b('0xf'),_0xecdace,_0xef3b('0x10'));_0x2589d4(_0x11e926['result'][_0xef3b('0x15')]);}})['catch'](function(_0x30b2d8){logger['error'](_0xef3b('0xf'),_0xecdace,_0x30b2d8);_0x5b7ea8(_0x30b2d8);});});}exports[_0xef3b('0x16')]=function(_0x164b15){var _0x1a7498=this;return new Promise(function(_0x2a5145,_0x3d18ef){return db[_0xef3b('0x17')][_0xef3b('0x18')]({'raw':_0x164b15['options']?_0x164b15[_0xef3b('0x19')][_0xef3b('0x1a')]===undefined?!![]:![]:!![],'where':_0x164b15[_0xef3b('0x19')]?_0x164b15[_0xef3b('0x19')][_0xef3b('0x1b')]||null:null,'attributes':_0x164b15[_0xef3b('0x19')]?_0x164b15['options'][_0xef3b('0x1c')]||null:null,'limit':_0x164b15['options']?_0x164b15['options'][_0xef3b('0x1d')]||null:null,'include':_0x164b15[_0xef3b('0x19')]?_0x164b15[_0xef3b('0x19')][_0xef3b('0x1e')]?_[_0xef3b('0x1f')](_0x164b15[_0xef3b('0x19')]['include'],function(_0x487ae6){return{'model':db[_0x487ae6[_0xef3b('0x20')]],'as':_0x487ae6['as'],'attributes':_0x487ae6['attributes'],'include':_0x487ae6['include']?_[_0xef3b('0x1f')](_0x487ae6[_0xef3b('0x1e')],function(_0x273fb5){return{'model':db[_0x273fb5[_0xef3b('0x20')]],'as':_0x273fb5['as'],'attributes':_0x273fb5[_0xef3b('0x1c')],'include':_0x273fb5[_0xef3b('0x1e')]?_[_0xef3b('0x1f')](_0x273fb5[_0xef3b('0x1e')],function(_0x556c5c){return{'model':db[_0x556c5c[_0xef3b('0x20')]],'as':_0x556c5c['as'],'attributes':_0x556c5c[_0xef3b('0x1c')]};}):[]};}):[]};}):[]:[]})[_0xef3b('0x21')](function(_0x187d1b){logger[_0xef3b('0xe')](_0xef3b('0x16'),_0x164b15);logger[_0xef3b('0x11')]('GetOpenchannelQueue',_0x164b15,JSON['stringify'](_0x187d1b));_0x2a5145(_0x187d1b);})[_0xef3b('0x22')](function(_0x31d802){logger[_0xef3b('0x14')]('GetOpenchannelQueue',_0x31d802[_0xef3b('0x15')],_0x164b15);_0x3d18ef(_0x1a7498[_0xef3b('0x14')](0x1f4,_0x31d802[_0xef3b('0x15')]));});});};exports[_0xef3b('0x23')]=function(_0x285c52){var _0x56369e=this;return new Promise(function(_0xf5f1e6,_0x537752){return db[_0xef3b('0x17')][_0xef3b('0x24')]({'raw':_0x285c52[_0xef3b('0x19')]?_0x285c52['options'][_0xef3b('0x1a')]===undefined?!![]:![]:!![],'where':_0x285c52[_0xef3b('0x19')]?_0x285c52[_0xef3b('0x19')]['where']||null:null,'attributes':_0x285c52[_0xef3b('0x19')]?_0x285c52['options'][_0xef3b('0x1c')]||null:null,'include':_0x285c52[_0xef3b('0x19')]?_0x285c52['options']['include']?_[_0xef3b('0x1f')](_0x285c52[_0xef3b('0x19')][_0xef3b('0x1e')],function(_0x4de915){return{'model':db[_0x4de915[_0xef3b('0x20')]],'as':_0x4de915['as'],'attributes':_0x4de915[_0xef3b('0x1c')],'include':_0x4de915[_0xef3b('0x1e')]?_[_0xef3b('0x1f')](_0x4de915[_0xef3b('0x1e')],function(_0x12fd8c){return{'model':db[_0x12fd8c['model']],'as':_0x12fd8c['as'],'attributes':_0x12fd8c['attributes'],'include':_0x12fd8c[_0xef3b('0x1e')]?_[_0xef3b('0x1f')](_0x12fd8c[_0xef3b('0x1e')],function(_0x3b6d01){return{'model':db[_0x3b6d01[_0xef3b('0x20')]],'as':_0x3b6d01['as'],'attributes':_0x3b6d01[_0xef3b('0x1c')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x3787f4){logger[_0xef3b('0xe')](_0xef3b('0x23'),_0x285c52);logger['debug'](_0xef3b('0x23'),_0x285c52,JSON['stringify'](_0x3787f4));_0xf5f1e6(_0x3787f4);})[_0xef3b('0x22')](function(_0x5e621e){logger[_0xef3b('0x14')]('ShowOpenchannelQueue',_0x5e621e[_0xef3b('0x15')],_0x285c52);_0x537752(_0x56369e['error'](0x1f4,_0x5e621e[_0xef3b('0x15')]));});});};
\ No newline at end of file
index 7f73e64..3b84346 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['register','length','openchannelQueue:','./openchannelQueue.events','save','remove','emit','removeListener'];(function(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0xa9e0[_0x3947c9];return _0x2e7871;};'use strict';var OpenchannelQueueEvents=require(_0x0a9e('0x0'));var events=[_0x0a9e('0x1'),_0x0a9e('0x2'),'update'];function createListener(_0x550fbc,_0x18d5c9){return function(_0x4ce2f1){_0x18d5c9[_0x0a9e('0x3')](_0x550fbc,_0x4ce2f1);};}function removeListener(_0x432180,_0x2ab90b){return function(){OpenchannelQueueEvents[_0x0a9e('0x4')](_0x432180,_0x2ab90b);};}exports[_0x0a9e('0x5')]=function(_0x57b080){for(var _0x219af0=0x0,_0x441e3a=events[_0x0a9e('0x6')];_0x219af0<_0x441e3a;_0x219af0++){var _0x5f41ea=events[_0x219af0];var _0x503809=createListener(_0x0a9e('0x7')+_0x5f41ea,_0x57b080);OpenchannelQueueEvents['on'](_0x5f41ea,_0x503809);}};
\ No newline at end of file
+var _0xa9e0=['register','length','openchannelQueue:','./openchannelQueue.events','save','remove','emit','removeListener'];(function(_0x40a045,_0x516f0e){var _0x1a687c=function(_0x48c9fe){while(--_0x48c9fe){_0x40a045['push'](_0x40a045['shift']());}};_0x1a687c(++_0x516f0e);}(_0xa9e0,0x123));var _0x0a9e=function(_0x139a3c,_0x4fc883){_0x139a3c=_0x139a3c-0x0;var _0x2b375b=_0xa9e0[_0x139a3c];return _0x2b375b;};'use strict';var OpenchannelQueueEvents=require(_0x0a9e('0x0'));var events=[_0x0a9e('0x1'),_0x0a9e('0x2'),'update'];function createListener(_0x550fbc,_0x18d5c9){return function(_0x4ce2f1){_0x18d5c9[_0x0a9e('0x3')](_0x550fbc,_0x4ce2f1);};}function removeListener(_0x432180,_0x2ab90b){return function(){OpenchannelQueueEvents[_0x0a9e('0x4')](_0x432180,_0x2ab90b);};}exports[_0x0a9e('0x5')]=function(_0x57b080){for(var _0x219af0=0x0,_0x441e3a=events[_0x0a9e('0x6')];_0x219af0<_0x441e3a;_0x219af0++){var _0x5f41ea=events[_0x219af0];var _0x503809=createListener(_0x0a9e('0x7')+_0x5f41ea,_0x57b080);OpenchannelQueueEvents['on'](_0x5f41ea,_0x503809);}};
\ No newline at end of file
index 38bf0e1..ac1778e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb10b=['../../config/environment','./openchannelQueueReport.controller','get','isAuthenticated','/describe','describe','/:id','show','post','create','update','delete','exports','multer','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service'];(function(_0x37d4dd,_0x297bca){var _0xf37b53=function(_0x10b99a){while(--_0x10b99a){_0x37d4dd['push'](_0x37d4dd['shift']());}};_0xf37b53(++_0x297bca);}(_0xb10b,0x12a));var _0xbb10=function(_0x51227e,_0x21f277){_0x51227e=_0x51227e-0x0;var _0x457194=_0xb10b[_0x51227e];return _0x457194;};'use strict';var multer=require(_0xbb10('0x0'));var util=require('util');var path=require(_0xbb10('0x1'));var timeout=require(_0xbb10('0x2'));var express=require(_0xbb10('0x3'));var router=express['Router']();var auth=require(_0xbb10('0x4'));var interaction=require(_0xbb10('0x5'));var config=require(_0xbb10('0x6'));var controller=require(_0xbb10('0x7'));router[_0xbb10('0x8')]('/',auth[_0xbb10('0x9')](),controller['index']);router[_0xbb10('0x8')](_0xbb10('0xa'),auth['isAuthenticated'](),controller[_0xbb10('0xb')]);router[_0xbb10('0x8')](_0xbb10('0xc'),auth[_0xbb10('0x9')](),controller[_0xbb10('0xd')]);router[_0xbb10('0xe')]('/',auth[_0xbb10('0x9')](),controller[_0xbb10('0xf')]);router['put']('/:id',auth[_0xbb10('0x9')](),controller[_0xbb10('0x10')]);router[_0xbb10('0x11')]('/:id',auth[_0xbb10('0x9')](),controller['destroy']);module[_0xbb10('0x12')]=router;
\ No newline at end of file
+var _0xb10b=['../../config/environment','./openchannelQueueReport.controller','get','isAuthenticated','/describe','describe','/:id','show','post','create','update','delete','exports','multer','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service'];(function(_0x11fd35,_0x259295){var _0x3792de=function(_0x5c099c){while(--_0x5c099c){_0x11fd35['push'](_0x11fd35['shift']());}};_0x3792de(++_0x259295);}(_0xb10b,0x12a));var _0xbb10=function(_0xc4376d,_0x2e6841){_0xc4376d=_0xc4376d-0x0;var _0x291524=_0xb10b[_0xc4376d];return _0x291524;};'use strict';var multer=require(_0xbb10('0x0'));var util=require('util');var path=require(_0xbb10('0x1'));var timeout=require(_0xbb10('0x2'));var express=require(_0xbb10('0x3'));var router=express['Router']();var auth=require(_0xbb10('0x4'));var interaction=require(_0xbb10('0x5'));var config=require(_0xbb10('0x6'));var controller=require(_0xbb10('0x7'));router[_0xbb10('0x8')]('/',auth[_0xbb10('0x9')](),controller['index']);router[_0xbb10('0x8')](_0xbb10('0xa'),auth['isAuthenticated'](),controller[_0xbb10('0xb')]);router[_0xbb10('0x8')](_0xbb10('0xc'),auth[_0xbb10('0x9')](),controller[_0xbb10('0xd')]);router[_0xbb10('0xe')]('/',auth[_0xbb10('0x9')](),controller[_0xbb10('0xf')]);router['put']('/:id',auth[_0xbb10('0x9')](),controller[_0xbb10('0x10')]);router[_0xbb10('0x11')]('/:id',auth[_0xbb10('0x9')](),controller['destroy']);module[_0xbb10('0x12')]=router;
\ No newline at end of file
index fa8182e..2823224 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb8bf=['DATE','moment','sequelize','STRING'];(function(_0x5b9896,_0x43df63){var _0x56d91f=function(_0x51c1a9){while(--_0x51c1a9){_0x5b9896['push'](_0x5b9896['shift']());}};_0x56d91f(++_0x43df63);}(_0xb8bf,0x1a5));var _0xfb8b=function(_0x502c7d,_0x2f1285){_0x502c7d=_0x502c7d-0x0;var _0x30b7ed=_0xb8bf[_0x502c7d];return _0x30b7ed;};'use strict';var moment=require(_0xfb8b('0x0'));var Sequelize=require(_0xfb8b('0x1'));module['exports']={'uniqueid':{'type':Sequelize[_0xfb8b('0x2')],'allowNull':![]},'from':{'type':Sequelize['STRING']},'joinAt':{'type':Sequelize['DATE']},'leaveAt':{'type':Sequelize[_0xfb8b('0x3')]},'acceptAt':{'type':Sequelize['DATE']},'exitAt':{'type':Sequelize[_0xfb8b('0x3')]},'reason':{'type':Sequelize[_0xfb8b('0x2')]}};
\ No newline at end of file
+var _0x31ab=['sequelize','STRING','DATE','moment'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x31ab,0x113));var _0xb31a=function(_0x298ff5,_0xea0386){_0x298ff5=_0x298ff5-0x0;var _0x3a0224=_0x31ab[_0x298ff5];return _0x3a0224;};'use strict';var moment=require(_0xb31a('0x0'));var Sequelize=require(_0xb31a('0x1'));module['exports']={'uniqueid':{'type':Sequelize[_0xb31a('0x2')],'allowNull':![]},'from':{'type':Sequelize[_0xb31a('0x2')]},'joinAt':{'type':Sequelize[_0xb31a('0x3')]},'leaveAt':{'type':Sequelize[_0xb31a('0x3')]},'acceptAt':{'type':Sequelize[_0xb31a('0x3')]},'exitAt':{'type':Sequelize['DATE']},'reason':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 32edee9..5cabfbe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x59bb=['params','describe','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','querystring','../../components/auth/service','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','Content-Range','apply','reject','update','destroy','then','end','sendStatus','error','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','sort','where','map','type','key','field','options','include','findAll','rows','catch','show','OpenchannelQueueReport','merge','create','body','find'];(function(_0x36d4a7,_0x7ebba1){var _0x3396d6=function(_0x5338f4){while(--_0x5338f4){_0x36d4a7['push'](_0x36d4a7['shift']());}};_0x3396d6(++_0x7ebba1);}(_0x59bb,0x1a6));var _0xb59b=function(_0x13d07a,_0x41efc3){_0x13d07a=_0x13d07a-0x0;var _0x5ee0ee=_0x59bb[_0x13d07a];return _0x5ee0ee;};'use strict';var pdf=require(_0xb59b('0x0'));var emlformat=require(_0xb59b('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xb59b('0x2'));var jsonpatch=require(_0xb59b('0x3'));var rp=require(_0xb59b('0x4'));var moment=require(_0xb59b('0x5'));var BPromise=require(_0xb59b('0x6'));var Mustache=require('mustache');var util=require(_0xb59b('0x7'));var path=require(_0xb59b('0x8'));var sox=require(_0xb59b('0x9'));var csv=require(_0xb59b('0xa'));var ejs=require(_0xb59b('0xb'));var fs=require('fs');var _=require(_0xb59b('0xc'));var squel=require('squel');var crypto=require(_0xb59b('0xd'));var jsforce=require(_0xb59b('0xe'));var deskjs=require('desk.js');var toCsv=require(_0xb59b('0xa'));var querystring=require(_0xb59b('0xf'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xb59b('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xb59b('0x11'))(_0xb59b('0x12'));var utils=require(_0xb59b('0x13'));var config=require(_0xb59b('0x14'));var db=require(_0xb59b('0x15'))['db'];function respondWithStatusCode(_0x5cd513,_0x2e5e6b){_0x2e5e6b=_0x2e5e6b||0xcc;return function(_0x2dd77f){if(_0x2dd77f){return _0x5cd513['sendStatus'](_0x2e5e6b);}return _0x5cd513[_0xb59b('0x16')](_0x2e5e6b)['end']();};}function respondWithResult(_0x3d1ac9,_0x515893){_0x515893=_0x515893||0xc8;return function(_0x426549){if(_0x426549){return _0x3d1ac9[_0xb59b('0x16')](_0x515893)[_0xb59b('0x17')](_0x426549);}};}function respondWithFilteredResult(_0x3dcc15,_0x35db68){return function(_0x3472ef){if(_0x3472ef){var _0x25f9ac=_0x3472ef[_0xb59b('0x18')],_0x5b9bd6=_0x35db68[_0xb59b('0x19')],_0x8a7a4d=_0x35db68[_0xb59b('0x19')]+_0x35db68[_0xb59b('0x1a')],_0x2d7880;if(_0x8a7a4d>=_0x25f9ac){_0x8a7a4d=_0x25f9ac;_0x2d7880=0xc8;}else{_0x2d7880=0xce;}_0x3dcc15['status'](_0x2d7880);return _0x3dcc15[_0xb59b('0x1b')](_0xb59b('0x1c'),_0x5b9bd6+'-'+_0x8a7a4d+'/'+_0x25f9ac)['json'](_0x3472ef);}return null;};}function patchUpdates(_0x3832cf){return function(_0xd87553){try{jsonpatch[_0xb59b('0x1d')](_0xd87553,_0x3832cf,!![]);}catch(_0x1b590f){return BPromise[_0xb59b('0x1e')](_0x1b590f);}return _0xd87553['save']();};}function saveUpdates(_0x31acda,_0x2a3eee){return function(_0x2c8c5d){if(_0x2c8c5d){return _0x2c8c5d[_0xb59b('0x1f')](_0x31acda)['then'](function(_0x106596){return _0x106596;});}return null;};}function removeEntity(_0x272f1c,_0x6c9b81){return function(_0x55307d){if(_0x55307d){return _0x55307d[_0xb59b('0x20')]()[_0xb59b('0x21')](function(){_0x272f1c[_0xb59b('0x16')](0xcc)[_0xb59b('0x22')]();});}};}function handleEntityNotFound(_0x5ef2bc,_0x8f20d9){return function(_0x404891){if(!_0x404891){_0x5ef2bc[_0xb59b('0x23')](0x194);}return _0x404891;};}function handleError(_0x5d1ba1,_0x2d3578){_0x2d3578=_0x2d3578||0x1f4;return function(_0x8de324){logger[_0xb59b('0x24')](_0x8de324[_0xb59b('0x25')]);if(_0x8de324[_0xb59b('0x26')]){delete _0x8de324[_0xb59b('0x26')];}_0x5d1ba1[_0xb59b('0x16')](_0x2d3578)[_0xb59b('0x27')](_0x8de324);};}exports[_0xb59b('0x28')]=function(_0x418e2a,_0x37fc8c){var _0x181a4a={},_0x39f9d3={},_0x436518={'count':0x0,'rows':[]};var _0x5d8b1b=db['OpenchannelQueueReport'][_0xb59b('0x29')];_0x39f9d3[_0xb59b('0x2a')]=_[_0xb59b('0x2b')](_0x5d8b1b);_0x39f9d3[_0xb59b('0x2c')]=_['keys'](_0x418e2a[_0xb59b('0x2c')]);_0x39f9d3[_0xb59b('0x2d')]=_[_0xb59b('0x2e')](_0x39f9d3[_0xb59b('0x2a')],_0x39f9d3[_0xb59b('0x2c')]);_0x181a4a[_0xb59b('0x2f')]=_[_0xb59b('0x2e')](_0x39f9d3['model'],qs[_0xb59b('0x30')](_0x418e2a[_0xb59b('0x2c')]['fields']));_0x181a4a[_0xb59b('0x2f')]=_0x181a4a[_0xb59b('0x2f')][_0xb59b('0x31')]?_0x181a4a[_0xb59b('0x2f')]:_0x39f9d3[_0xb59b('0x2a')];if(!_0x418e2a[_0xb59b('0x2c')][_0xb59b('0x32')]('nolimit')){_0x181a4a[_0xb59b('0x1a')]=qs['limit'](_0x418e2a[_0xb59b('0x2c')][_0xb59b('0x1a')]);_0x181a4a[_0xb59b('0x19')]=qs['offset'](_0x418e2a[_0xb59b('0x2c')]['offset']);}_0x181a4a['order']=qs[_0xb59b('0x33')](_0x418e2a[_0xb59b('0x2c')][_0xb59b('0x33')]);_0x181a4a['where']=qs[_0xb59b('0x2d')](_['pick'](_0x418e2a[_0xb59b('0x2c')],_0x39f9d3[_0xb59b('0x2d')]));if(_0x418e2a[_0xb59b('0x2c')]['filter']){_0x181a4a[_0xb59b('0x34')]=_['merge'](_0x181a4a[_0xb59b('0x34')],{'$or':_[_0xb59b('0x35')](_0x5d8b1b,function(_0x3905d2){if(_0x3905d2[_0xb59b('0x36')][_0xb59b('0x37')]!=='VIRTUAL'){var _0x3da5c6={};_0x3da5c6[_0x3905d2[_0xb59b('0x38')]]={'$like':'%'+_0x418e2a['query']['filter']+'%'};return _0x3da5c6;}})});}_0x181a4a=_['merge']({},_0x181a4a,_0x418e2a[_0xb59b('0x39')]);var _0x2ca422={'where':_0x181a4a[_0xb59b('0x34')]};return db['OpenchannelQueueReport'][_0xb59b('0x18')](_0x2ca422)[_0xb59b('0x21')](function(_0x35e481){_0x436518[_0xb59b('0x18')]=_0x35e481;if(_0x418e2a['query']['includeAll']){_0x181a4a[_0xb59b('0x3a')]=[{'all':!![]}];}return db['OpenchannelQueueReport'][_0xb59b('0x3b')](_0x181a4a);})[_0xb59b('0x21')](function(_0x38d9ab){_0x436518[_0xb59b('0x3c')]=_0x38d9ab;return _0x436518;})['then'](respondWithFilteredResult(_0x37fc8c,_0x181a4a))[_0xb59b('0x3d')](handleError(_0x37fc8c,null));};exports[_0xb59b('0x3e')]=function(_0x122060,_0x3ba075){var _0x2e5f50={'raw':!![],'where':{'id':_0x122060['params']['id']}},_0x1539fc={};_0x1539fc[_0xb59b('0x2a')]=_[_0xb59b('0x2b')](db[_0xb59b('0x3f')][_0xb59b('0x29')]);_0x1539fc[_0xb59b('0x2c')]=_[_0xb59b('0x2b')](_0x122060['query']);_0x1539fc[_0xb59b('0x2d')]=_[_0xb59b('0x2e')](_0x1539fc[_0xb59b('0x2a')],_0x1539fc[_0xb59b('0x2c')]);_0x2e5f50[_0xb59b('0x2f')]=_['intersection'](_0x1539fc['model'],qs[_0xb59b('0x30')](_0x122060[_0xb59b('0x2c')]['fields']));_0x2e5f50[_0xb59b('0x2f')]=_0x2e5f50[_0xb59b('0x2f')][_0xb59b('0x31')]?_0x2e5f50['attributes']:_0x1539fc[_0xb59b('0x2a')];if(_0x122060[_0xb59b('0x2c')]['includeAll']){_0x2e5f50['include']=[{'all':!![]}];}_0x2e5f50=_[_0xb59b('0x40')]({},_0x2e5f50,_0x122060[_0xb59b('0x39')]);return db[_0xb59b('0x3f')]['find'](_0x2e5f50)[_0xb59b('0x21')](handleEntityNotFound(_0x3ba075,null))[_0xb59b('0x21')](respondWithResult(_0x3ba075,null))['catch'](handleError(_0x3ba075,null));};exports['create']=function(_0x17e071,_0x4ed040){return db['OpenchannelQueueReport'][_0xb59b('0x41')](_0x17e071[_0xb59b('0x42')],{})['then'](respondWithResult(_0x4ed040,0xc9))[_0xb59b('0x3d')](handleError(_0x4ed040,null));};exports[_0xb59b('0x1f')]=function(_0x581738,_0x5eb66b){if(_0x581738[_0xb59b('0x42')]['id']){delete _0x581738[_0xb59b('0x42')]['id'];}return db[_0xb59b('0x3f')][_0xb59b('0x43')]({'where':{'id':_0x581738['params']['id']}})[_0xb59b('0x21')](handleEntityNotFound(_0x5eb66b,null))[_0xb59b('0x21')](saveUpdates(_0x581738[_0xb59b('0x42')],null))['then'](respondWithResult(_0x5eb66b,null))[_0xb59b('0x3d')](handleError(_0x5eb66b,null));};exports['destroy']=function(_0x2c3e7a,_0x102d43){return db[_0xb59b('0x3f')][_0xb59b('0x43')]({'where':{'id':_0x2c3e7a[_0xb59b('0x44')]['id']}})[_0xb59b('0x21')](handleEntityNotFound(_0x102d43,null))['then'](removeEntity(_0x102d43,null))[_0xb59b('0x3d')](handleError(_0x102d43,null));};exports[_0xb59b('0x45')]=function(_0x59bc55,_0x24fdec){return db[_0xb59b('0x3f')][_0xb59b('0x45')]()['then'](respondWithResult(_0x24fdec,null))['catch'](handleError(_0x24fdec,null));};
\ No newline at end of file
+var _0xf6de=['sox','ejs','lodash','squel','crypto','jsforce','to-csv','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','count','offset','limit','status','set','json','apply','reject','save','update','then','destroy','name','send','OpenchannelQueueReport','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','map','key','VIRTUAL','field','merge','options','includeAll','include','findAll','catch','rawAttributes','create','body','find','params','describe','eml-format','rimraf','zip-dir','fast-json-patch','moment','mustache','path'];(function(_0x4b2863,_0x494899){var _0x567d67=function(_0x751f03){while(--_0x751f03){_0x4b2863['push'](_0x4b2863['shift']());}};_0x567d67(++_0x494899);}(_0xf6de,0x152));var _0xef6d=function(_0x47568e,_0x5ccdaf){_0x47568e=_0x47568e-0x0;var _0x33815b=_0xf6de[_0x47568e];return _0x33815b;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xef6d('0x0'));var rimraf=require(_0xef6d('0x1'));var zipdir=require(_0xef6d('0x2'));var jsonpatch=require(_0xef6d('0x3'));var rp=require('request-promise');var moment=require(_0xef6d('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xef6d('0x5'));var util=require('util');var path=require(_0xef6d('0x6'));var sox=require(_0xef6d('0x7'));var csv=require('to-csv');var ejs=require(_0xef6d('0x8'));var fs=require('fs');var _=require(_0xef6d('0x9'));var squel=require(_0xef6d('0xa'));var crypto=require(_0xef6d('0xb'));var jsforce=require(_0xef6d('0xc'));var deskjs=require('desk.js');var toCsv=require(_0xef6d('0xd'));var querystring=require(_0xef6d('0xe'));var Papa=require(_0xef6d('0xf'));var Redis=require(_0xef6d('0x10'));var authService=require('../../components/auth/service');var qs=require(_0xef6d('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xef6d('0x12'))(_0xef6d('0x13'));var utils=require(_0xef6d('0x14'));var config=require(_0xef6d('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x28d0b1,_0x4f0230){_0x4f0230=_0x4f0230||0xcc;return function(_0x2f2267){if(_0x2f2267){return _0x28d0b1[_0xef6d('0x16')](_0x4f0230);}return _0x28d0b1['status'](_0x4f0230)[_0xef6d('0x17')]();};}function respondWithResult(_0x1591bf,_0x2e5485){_0x2e5485=_0x2e5485||0xc8;return function(_0x375ed2){if(_0x375ed2){return _0x1591bf['status'](_0x2e5485)['json'](_0x375ed2);}};}function respondWithFilteredResult(_0x35f3a6,_0x400f2c){return function(_0x1fbf67){if(_0x1fbf67){var _0x5861f1=_0x1fbf67[_0xef6d('0x18')],_0x1c0207=_0x400f2c[_0xef6d('0x19')],_0x2a343b=_0x400f2c[_0xef6d('0x19')]+_0x400f2c[_0xef6d('0x1a')],_0x200bcf;if(_0x2a343b>=_0x5861f1){_0x2a343b=_0x5861f1;_0x200bcf=0xc8;}else{_0x200bcf=0xce;}_0x35f3a6[_0xef6d('0x1b')](_0x200bcf);return _0x35f3a6[_0xef6d('0x1c')]('Content-Range',_0x1c0207+'-'+_0x2a343b+'/'+_0x5861f1)[_0xef6d('0x1d')](_0x1fbf67);}return null;};}function patchUpdates(_0x12decd){return function(_0x28f909){try{jsonpatch[_0xef6d('0x1e')](_0x28f909,_0x12decd,!![]);}catch(_0x3698fd){return BPromise[_0xef6d('0x1f')](_0x3698fd);}return _0x28f909[_0xef6d('0x20')]();};}function saveUpdates(_0x1c6254,_0x3fdb6d){return function(_0x4f6273){if(_0x4f6273){return _0x4f6273[_0xef6d('0x21')](_0x1c6254)[_0xef6d('0x22')](function(_0x280b96){return _0x280b96;});}return null;};}function removeEntity(_0x44ff27,_0x47917a){return function(_0x349a00){if(_0x349a00){return _0x349a00[_0xef6d('0x23')]()['then'](function(){_0x44ff27[_0xef6d('0x1b')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3413da,_0x4784e5){return function(_0x1b8064){if(!_0x1b8064){_0x3413da[_0xef6d('0x16')](0x194);}return _0x1b8064;};}function handleError(_0x4f9429,_0x13e690){_0x13e690=_0x13e690||0x1f4;return function(_0x469848){logger['error'](_0x469848['stack']);if(_0x469848[_0xef6d('0x24')]){delete _0x469848[_0xef6d('0x24')];}_0x4f9429[_0xef6d('0x1b')](_0x13e690)[_0xef6d('0x25')](_0x469848);};}exports['index']=function(_0x262351,_0x4c2471){var _0x53f477={},_0x646f01={},_0x5c783e={'count':0x0,'rows':[]};var _0x498a57=db[_0xef6d('0x26')]['rawAttributes'];_0x646f01[_0xef6d('0x27')]=_[_0xef6d('0x28')](_0x498a57);_0x646f01[_0xef6d('0x29')]=_[_0xef6d('0x28')](_0x262351[_0xef6d('0x29')]);_0x646f01[_0xef6d('0x2a')]=_[_0xef6d('0x2b')](_0x646f01[_0xef6d('0x27')],_0x646f01[_0xef6d('0x29')]);_0x53f477[_0xef6d('0x2c')]=_[_0xef6d('0x2b')](_0x646f01[_0xef6d('0x27')],qs[_0xef6d('0x2d')](_0x262351[_0xef6d('0x29')][_0xef6d('0x2d')]));_0x53f477['attributes']=_0x53f477[_0xef6d('0x2c')][_0xef6d('0x2e')]?_0x53f477[_0xef6d('0x2c')]:_0x646f01[_0xef6d('0x27')];if(!_0x262351[_0xef6d('0x29')][_0xef6d('0x2f')](_0xef6d('0x30'))){_0x53f477[_0xef6d('0x1a')]=qs[_0xef6d('0x1a')](_0x262351[_0xef6d('0x29')]['limit']);_0x53f477[_0xef6d('0x19')]=qs[_0xef6d('0x19')](_0x262351[_0xef6d('0x29')][_0xef6d('0x19')]);}_0x53f477[_0xef6d('0x31')]=qs[_0xef6d('0x32')](_0x262351['query'][_0xef6d('0x32')]);_0x53f477[_0xef6d('0x33')]=qs[_0xef6d('0x2a')](_['pick'](_0x262351[_0xef6d('0x29')],_0x646f01[_0xef6d('0x2a')]));if(_0x262351[_0xef6d('0x29')][_0xef6d('0x34')]){_0x53f477[_0xef6d('0x33')]=_['merge'](_0x53f477['where'],{'$or':_[_0xef6d('0x35')](_0x498a57,function(_0x491ba3){if(_0x491ba3['type'][_0xef6d('0x36')]!==_0xef6d('0x37')){var _0x8d95af={};_0x8d95af[_0x491ba3[_0xef6d('0x38')]]={'$like':'%'+_0x262351[_0xef6d('0x29')]['filter']+'%'};return _0x8d95af;}})});}_0x53f477=_[_0xef6d('0x39')]({},_0x53f477,_0x262351[_0xef6d('0x3a')]);var _0x51c196={'where':_0x53f477[_0xef6d('0x33')]};return db['OpenchannelQueueReport'][_0xef6d('0x18')](_0x51c196)[_0xef6d('0x22')](function(_0x5aff89){_0x5c783e[_0xef6d('0x18')]=_0x5aff89;if(_0x262351['query'][_0xef6d('0x3b')]){_0x53f477[_0xef6d('0x3c')]=[{'all':!![]}];}return db[_0xef6d('0x26')][_0xef6d('0x3d')](_0x53f477);})[_0xef6d('0x22')](function(_0x3a7dc9){_0x5c783e['rows']=_0x3a7dc9;return _0x5c783e;})[_0xef6d('0x22')](respondWithFilteredResult(_0x4c2471,_0x53f477))[_0xef6d('0x3e')](handleError(_0x4c2471,null));};exports['show']=function(_0x4ed5d9,_0x4fb7f8){var _0x5f5301={'raw':!![],'where':{'id':_0x4ed5d9['params']['id']}},_0x31f6d9={};_0x31f6d9[_0xef6d('0x27')]=_[_0xef6d('0x28')](db[_0xef6d('0x26')][_0xef6d('0x3f')]);_0x31f6d9[_0xef6d('0x29')]=_['keys'](_0x4ed5d9[_0xef6d('0x29')]);_0x31f6d9[_0xef6d('0x2a')]=_['intersection'](_0x31f6d9[_0xef6d('0x27')],_0x31f6d9[_0xef6d('0x29')]);_0x5f5301[_0xef6d('0x2c')]=_[_0xef6d('0x2b')](_0x31f6d9[_0xef6d('0x27')],qs[_0xef6d('0x2d')](_0x4ed5d9[_0xef6d('0x29')][_0xef6d('0x2d')]));_0x5f5301['attributes']=_0x5f5301[_0xef6d('0x2c')][_0xef6d('0x2e')]?_0x5f5301['attributes']:_0x31f6d9[_0xef6d('0x27')];if(_0x4ed5d9[_0xef6d('0x29')][_0xef6d('0x3b')]){_0x5f5301[_0xef6d('0x3c')]=[{'all':!![]}];}_0x5f5301=_['merge']({},_0x5f5301,_0x4ed5d9[_0xef6d('0x3a')]);return db['OpenchannelQueueReport']['find'](_0x5f5301)[_0xef6d('0x22')](handleEntityNotFound(_0x4fb7f8,null))[_0xef6d('0x22')](respondWithResult(_0x4fb7f8,null))['catch'](handleError(_0x4fb7f8,null));};exports['create']=function(_0x24cb1d,_0x5dced1){return db['OpenchannelQueueReport'][_0xef6d('0x40')](_0x24cb1d[_0xef6d('0x41')],{})[_0xef6d('0x22')](respondWithResult(_0x5dced1,0xc9))[_0xef6d('0x3e')](handleError(_0x5dced1,null));};exports[_0xef6d('0x21')]=function(_0xe7a3d8,_0x55e7f3){if(_0xe7a3d8[_0xef6d('0x41')]['id']){delete _0xe7a3d8[_0xef6d('0x41')]['id'];}return db[_0xef6d('0x26')][_0xef6d('0x42')]({'where':{'id':_0xe7a3d8['params']['id']}})['then'](handleEntityNotFound(_0x55e7f3,null))[_0xef6d('0x22')](saveUpdates(_0xe7a3d8['body'],null))[_0xef6d('0x22')](respondWithResult(_0x55e7f3,null))[_0xef6d('0x3e')](handleError(_0x55e7f3,null));};exports[_0xef6d('0x23')]=function(_0x578d2e,_0x557d2e){return db[_0xef6d('0x26')][_0xef6d('0x42')]({'where':{'id':_0x578d2e[_0xef6d('0x43')]['id']}})[_0xef6d('0x22')](handleEntityNotFound(_0x557d2e,null))[_0xef6d('0x22')](removeEntity(_0x557d2e,null))[_0xef6d('0x3e')](handleError(_0x557d2e,null));};exports['describe']=function(_0x332eac,_0x43d837){return db[_0xef6d('0x26')][_0xef6d('0x44')]()[_0xef6d('0x22')](respondWithResult(_0x43d837,null))[_0xef6d('0x3e')](handleError(_0x43d837,null));};
\ No newline at end of file
index 014e0b2..69e280d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa3e6=['define','report_openchannel_queue','uniqueid','lodash','../../config/logger','moment','bluebird','request-promise','rimraf','./openchannelQueueReport.attributes','exports'];(function(_0x503ffd,_0x8ecde){var _0x160437=function(_0x2d45dd){while(--_0x2d45dd){_0x503ffd['push'](_0x503ffd['shift']());}};_0x160437(++_0x8ecde);}(_0xa3e6,0xbe));var _0x6a3e=function(_0x194c7a,_0x1aad76){_0x194c7a=_0x194c7a-0x0;var _0x311ba4=_0xa3e6[_0x194c7a];return _0x311ba4;};'use strict';var _=require(_0x6a3e('0x0'));var util=require('util');var logger=require(_0x6a3e('0x1'))('api');var moment=require(_0x6a3e('0x2'));var BPromise=require(_0x6a3e('0x3'));var rp=require(_0x6a3e('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x6a3e('0x5'));var config=require('../../config/environment');var attributes=require(_0x6a3e('0x6'));module[_0x6a3e('0x7')]=function(_0x1c7709,_0x315ed8){return _0x1c7709[_0x6a3e('0x8')]('OpenchannelQueueReport',attributes,{'tableName':_0x6a3e('0x9'),'paranoid':![],'indexes':[{'name':_0x6a3e('0xa'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x524a=['./openchannelQueueReport.attributes','exports','define','report_openchannel_queue','uniqueid','lodash','util','../../config/logger','api','bluebird','request-promise','path'];(function(_0x312113,_0x15d9fa){var _0x21d246=function(_0x26b6ba){while(--_0x26b6ba){_0x312113['push'](_0x312113['shift']());}};_0x21d246(++_0x15d9fa);}(_0x524a,0xf5));var _0xa524=function(_0x2f6025,_0x2e06b8){_0x2f6025=_0x2f6025-0x0;var _0x45865c=_0x524a[_0x2f6025];return _0x45865c;};'use strict';var _=require(_0xa524('0x0'));var util=require(_0xa524('0x1'));var logger=require(_0xa524('0x2'))(_0xa524('0x3'));var moment=require('moment');var BPromise=require(_0xa524('0x4'));var rp=require(_0xa524('0x5'));var fs=require('fs');var path=require(_0xa524('0x6'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0xa524('0x7'));module[_0xa524('0x8')]=function(_0x16227b,_0x5f472f){return _0x16227b[_0xa524('0x9')]('OpenchannelQueueReport',attributes,{'tableName':_0xa524('0xa'),'paranoid':![],'indexes':[{'name':_0xa524('0xb'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
index 7ba80d6..321cdda 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc053=['debug','OpenchannelQueueReport,\x20%s,\x20%s,\x20%s','error','code','message','CreateOpenchannelQueueReport','create','body','options','stringify','catch','UpdateOpenchannelQueueReport','OpenchannelQueueReport','where','util','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','OpenchannelQueueReport,\x20%s,\x20%s','request\x20sent'];(function(_0x4623d8,_0x297475){var _0x46f3a1=function(_0x5d67c7){while(--_0x5d67c7){_0x4623d8['push'](_0x4623d8['shift']());}};_0x46f3a1(++_0x297475);}(_0xc053,0xbc));var _0x3c05=function(_0x1875af,_0x333049){_0x1875af=_0x1875af-0x0;var _0x1583af=_0xc053[_0x1875af];return _0x1583af;};'use strict';var _=require('lodash');var util=require(_0x3c05('0x0'));var moment=require('moment');var BPromise=require(_0x3c05('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x3c05('0x2'));var db=require(_0x3c05('0x3'))['db'];var utils=require(_0x3c05('0x4'));var logger=require(_0x3c05('0x5'))(_0x3c05('0x6'));var config=require(_0x3c05('0x7'));var jayson=require(_0x3c05('0x8'));var client=jayson[_0x3c05('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2fcb31,_0x41479a,_0xa12ca){return new BPromise(function(_0x34c2f1,_0x15c505){return client[_0x3c05('0xa')](_0x2fcb31,_0xa12ca)[_0x3c05('0xb')](function(_0x35539e){logger[_0x3c05('0xc')](_0x3c05('0xd'),_0x41479a,_0x3c05('0xe'));logger[_0x3c05('0xf')](_0x3c05('0x10'),_0x41479a,'request\x20sent',JSON['stringify'](_0x35539e));if(_0x35539e[_0x3c05('0x11')]){if(_0x35539e[_0x3c05('0x11')][_0x3c05('0x12')]===0x1f4){logger[_0x3c05('0x11')](_0x3c05('0xd'),_0x41479a,_0x35539e['error'][_0x3c05('0x13')]);return _0x15c505(_0x35539e[_0x3c05('0x11')][_0x3c05('0x13')]);}logger[_0x3c05('0x11')](_0x3c05('0xd'),_0x41479a,_0x35539e[_0x3c05('0x11')][_0x3c05('0x13')]);return _0x34c2f1(_0x35539e['error']['message']);}else{logger[_0x3c05('0xc')]('OpenchannelQueueReport,\x20%s,\x20%s',_0x41479a,_0x3c05('0xe'));_0x34c2f1(_0x35539e['result'][_0x3c05('0x13')]);}})['catch'](function(_0x4cb4af){logger[_0x3c05('0x11')]('OpenchannelQueueReport,\x20%s,\x20%s',_0x41479a,_0x4cb4af);_0x15c505(_0x4cb4af);});});}exports[_0x3c05('0x14')]=function(_0x9a0d30){var _0x8f356e=this;return new Promise(function(_0x35ca02,_0x561697){return db['OpenchannelQueueReport'][_0x3c05('0x15')](_0x9a0d30[_0x3c05('0x16')],{'raw':_0x9a0d30[_0x3c05('0x17')]?_0x9a0d30[_0x3c05('0x17')]['raw']===undefined?!![]:![]:!![]})[_0x3c05('0xb')](function(_0x1f709c){logger['info']('CreateOpenchannelQueueReport',_0x9a0d30);logger['debug'](_0x3c05('0x14'),_0x9a0d30,JSON[_0x3c05('0x18')](_0x1f709c));_0x35ca02(_0x1f709c);})[_0x3c05('0x19')](function(_0x4e584c){logger[_0x3c05('0x11')](_0x3c05('0x14'),_0x4e584c[_0x3c05('0x13')],_0x9a0d30);_0x561697(_0x8f356e[_0x3c05('0x11')](0x1f4,_0x4e584c['message']));});});};exports[_0x3c05('0x1a')]=function(_0x594a67){var _0x31d909=this;return new Promise(function(_0x7fc7a9,_0x47d514){return db[_0x3c05('0x1b')]['update'](_0x594a67[_0x3c05('0x16')],{'raw':_0x594a67[_0x3c05('0x17')]?_0x594a67[_0x3c05('0x17')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x594a67[_0x3c05('0x17')]?_0x594a67[_0x3c05('0x17')][_0x3c05('0x1c')]||null:null,'attributes':_0x594a67[_0x3c05('0x17')]?_0x594a67[_0x3c05('0x17')]['attributes']||null:null,'limit':_0x594a67[_0x3c05('0x17')]?_0x594a67[_0x3c05('0x17')]['limit']||null:null})[_0x3c05('0xb')](function(_0x419fd2){logger[_0x3c05('0xc')](_0x3c05('0x1a'),_0x594a67);logger[_0x3c05('0xf')]('UpdateOpenchannelQueueReport',_0x594a67,JSON[_0x3c05('0x18')](_0x419fd2));_0x7fc7a9(_0x419fd2);})[_0x3c05('0x19')](function(_0x1919a){logger[_0x3c05('0x11')](_0x3c05('0x1a'),_0x1919a[_0x3c05('0x13')],_0x594a67);_0x47d514(_0x31d909[_0x3c05('0x11')](0x1f4,_0x1919a[_0x3c05('0x13')]));});});};
\ No newline at end of file
+var _0x6d20=['OpenchannelQueueReport','update','where','limit','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','rpc','../../config/environment','jayson/promise','client','http','request','info','OpenchannelQueueReport,\x20%s,\x20%s','debug','OpenchannelQueueReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','catch','CreateOpenchannelQueueReport','body','options','raw','then','UpdateOpenchannelQueueReport'];(function(_0x4c7061,_0x4a232c){var _0x1a119d=function(_0x476f7a){while(--_0x476f7a){_0x4c7061['push'](_0x4c7061['shift']());}};_0x1a119d(++_0x4a232c);}(_0x6d20,0x164));var _0x06d2=function(_0x3a5df2,_0x2b5517){_0x3a5df2=_0x3a5df2-0x0;var _0x3a65b6=_0x6d20[_0x3a5df2];return _0x3a65b6;};'use strict';var _=require(_0x06d2('0x0'));var util=require('util');var moment=require(_0x06d2('0x1'));var BPromise=require(_0x06d2('0x2'));var rs=require(_0x06d2('0x3'));var fs=require('fs');var Redis=require(_0x06d2('0x4'));var db=require(_0x06d2('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x06d2('0x6'));var config=require(_0x06d2('0x7'));var jayson=require(_0x06d2('0x8'));var client=jayson[_0x06d2('0x9')][_0x06d2('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x5418f3,_0x2fc61e,_0x4be363){return new BPromise(function(_0x49547c,_0xd1f0e7){return client[_0x06d2('0xb')](_0x5418f3,_0x4be363)['then'](function(_0x58599b){logger[_0x06d2('0xc')](_0x06d2('0xd'),_0x2fc61e,'request\x20sent');logger[_0x06d2('0xe')](_0x06d2('0xf'),_0x2fc61e,_0x06d2('0x10'),JSON[_0x06d2('0x11')](_0x58599b));if(_0x58599b['error']){if(_0x58599b[_0x06d2('0x12')][_0x06d2('0x13')]===0x1f4){logger['error'](_0x06d2('0xd'),_0x2fc61e,_0x58599b['error'][_0x06d2('0x14')]);return _0xd1f0e7(_0x58599b['error'][_0x06d2('0x14')]);}logger[_0x06d2('0x12')](_0x06d2('0xd'),_0x2fc61e,_0x58599b[_0x06d2('0x12')]['message']);return _0x49547c(_0x58599b[_0x06d2('0x12')][_0x06d2('0x14')]);}else{logger[_0x06d2('0xc')](_0x06d2('0xd'),_0x2fc61e,_0x06d2('0x10'));_0x49547c(_0x58599b['result'][_0x06d2('0x14')]);}})[_0x06d2('0x15')](function(_0x5b5a0d){logger['error'](_0x06d2('0xd'),_0x2fc61e,_0x5b5a0d);_0xd1f0e7(_0x5b5a0d);});});}exports[_0x06d2('0x16')]=function(_0x210954){var _0x364b37=this;return new Promise(function(_0x8db351,_0x439b04){return db['OpenchannelQueueReport']['create'](_0x210954[_0x06d2('0x17')],{'raw':_0x210954[_0x06d2('0x18')]?_0x210954['options'][_0x06d2('0x19')]===undefined?!![]:![]:!![]})[_0x06d2('0x1a')](function(_0x1791b7){logger['info'](_0x06d2('0x16'),_0x210954);logger['debug']('CreateOpenchannelQueueReport',_0x210954,JSON[_0x06d2('0x11')](_0x1791b7));_0x8db351(_0x1791b7);})[_0x06d2('0x15')](function(_0x5eb0ca){logger['error'](_0x06d2('0x16'),_0x5eb0ca[_0x06d2('0x14')],_0x210954);_0x439b04(_0x364b37[_0x06d2('0x12')](0x1f4,_0x5eb0ca['message']));});});};exports[_0x06d2('0x1b')]=function(_0x3c7826){var _0x441972=this;return new Promise(function(_0xf87b37,_0x481711){return db[_0x06d2('0x1c')][_0x06d2('0x1d')](_0x3c7826[_0x06d2('0x17')],{'raw':_0x3c7826[_0x06d2('0x18')]?_0x3c7826[_0x06d2('0x18')][_0x06d2('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3c7826[_0x06d2('0x18')]?_0x3c7826[_0x06d2('0x18')][_0x06d2('0x1e')]||null:null,'attributes':_0x3c7826[_0x06d2('0x18')]?_0x3c7826[_0x06d2('0x18')]['attributes']||null:null,'limit':_0x3c7826['options']?_0x3c7826['options'][_0x06d2('0x1f')]||null:null})[_0x06d2('0x1a')](function(_0x754803){logger['info']('UpdateOpenchannelQueueReport',_0x3c7826);logger[_0x06d2('0xe')](_0x06d2('0x1b'),_0x3c7826,JSON[_0x06d2('0x11')](_0x754803));_0xf87b37(_0x754803);})[_0x06d2('0x15')](function(_0x252004){logger[_0x06d2('0x12')](_0x06d2('0x1b'),_0x252004[_0x06d2('0x14')],_0x3c7826);_0x481711(_0x441972['error'](0x1f4,_0x252004[_0x06d2('0x14')]));});});};
\ No newline at end of file
index d830c1c..b397848 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xadd5=['exports','multer','util','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./openchannelTransferReport.controller','get','/describe','describe','/:id','isAuthenticated','show','post','put','update'];(function(_0x285f36,_0x231cd5){var _0x214328=function(_0x253d67){while(--_0x253d67){_0x285f36['push'](_0x285f36['shift']());}};_0x214328(++_0x231cd5);}(_0xadd5,0x19f));var _0x5add=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xadd5[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0x5add('0x0'));var util=require(_0x5add('0x1'));var path=require('path');var timeout=require(_0x5add('0x2'));var express=require(_0x5add('0x3'));var router=express[_0x5add('0x4')]();var auth=require(_0x5add('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x5add('0x6'));var controller=require(_0x5add('0x7'));router[_0x5add('0x8')]('/',auth['isAuthenticated'](),controller['index']);router[_0x5add('0x8')](_0x5add('0x9'),auth['isAuthenticated'](),controller[_0x5add('0xa')]);router['get'](_0x5add('0xb'),auth[_0x5add('0xc')](),controller[_0x5add('0xd')]);router[_0x5add('0xe')]('/',auth[_0x5add('0xc')](),controller['create']);router[_0x5add('0xf')](_0x5add('0xb'),auth[_0x5add('0xc')](),controller[_0x5add('0x10')]);router['delete'](_0x5add('0xb'),auth[_0x5add('0xc')](),controller['destroy']);module[_0x5add('0x11')]=router;
\ No newline at end of file
+var _0x23d1=['update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./openchannelTransferReport.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','create','put'];(function(_0xf71120,_0x25b7f9){var _0xbe2fd3=function(_0x1acbdd){while(--_0x1acbdd){_0xf71120['push'](_0xf71120['shift']());}};_0xbe2fd3(++_0x25b7f9);}(_0x23d1,0x1e7));var _0x123d=function(_0x48b068,_0x57fd5f){_0x48b068=_0x48b068-0x0;var _0xe90c67=_0x23d1[_0x48b068];return _0xe90c67;};'use strict';var multer=require(_0x123d('0x0'));var util=require(_0x123d('0x1'));var path=require(_0x123d('0x2'));var timeout=require(_0x123d('0x3'));var express=require(_0x123d('0x4'));var router=express[_0x123d('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x123d('0x6'));var config=require(_0x123d('0x7'));var controller=require(_0x123d('0x8'));router[_0x123d('0x9')]('/',auth[_0x123d('0xa')](),controller[_0x123d('0xb')]);router['get'](_0x123d('0xc'),auth[_0x123d('0xa')](),controller[_0x123d('0xd')]);router[_0x123d('0x9')](_0x123d('0xe'),auth['isAuthenticated'](),controller[_0x123d('0xf')]);router[_0x123d('0x10')]('/',auth[_0x123d('0xa')](),controller[_0x123d('0x11')]);router[_0x123d('0x12')](_0x123d('0xe'),auth['isAuthenticated'](),controller[_0x123d('0x13')]);router[_0x123d('0x14')]('/:id',auth[_0x123d('0xa')](),controller[_0x123d('0x15')]);module[_0x123d('0x16')]=router;
\ No newline at end of file
index 56ebe0d..e122d20 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7358=['account','agent','queue','DATE','moment','sequelize','exports','STRING','ENUM'];(function(_0x3bbb9e,_0x3e8089){var _0x43fe65=function(_0x5f2f1d){while(--_0x5f2f1d){_0x3bbb9e['push'](_0x3bbb9e['shift']());}};_0x43fe65(++_0x3e8089);}(_0x7358,0x67));var _0x8735=function(_0x33d6c5,_0x3ea6b7){_0x33d6c5=_0x33d6c5-0x0;var _0x27c272=_0x7358[_0x33d6c5];return _0x27c272;};'use strict';var moment=require(_0x8735('0x0'));var Sequelize=require(_0x8735('0x1'));module[_0x8735('0x2')]={'uniqueid':{'type':Sequelize[_0x8735('0x3')],'allowNull':![]},'type':{'type':Sequelize[_0x8735('0x4')](_0x8735('0x5'),_0x8735('0x6'),_0x8735('0x7')),'allowNull':![],'defaultValue':'queue'},'transferredAt':{'type':Sequelize[_0x8735('0x8')],'allowNull':![],'defaultValue':Sequelize['NOW']}};
\ No newline at end of file
+var _0xb1ee=['queue','DATE','moment','sequelize','STRING','ENUM','account'];(function(_0x157120,_0x2189a6){var _0x57271f=function(_0xabc724){while(--_0xabc724){_0x157120['push'](_0x157120['shift']());}};_0x57271f(++_0x2189a6);}(_0xb1ee,0x11a));var _0xeb1e=function(_0x13ac10,_0x46e79e){_0x13ac10=_0x13ac10-0x0;var _0x28eda2=_0xb1ee[_0x13ac10];return _0x28eda2;};'use strict';var moment=require(_0xeb1e('0x0'));var Sequelize=require(_0xeb1e('0x1'));module['exports']={'uniqueid':{'type':Sequelize[_0xeb1e('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0xeb1e('0x3')](_0xeb1e('0x4'),'agent','queue'),'allowNull':![],'defaultValue':_0xeb1e('0x5')},'transferredAt':{'type':Sequelize[_0xeb1e('0x6')],'allowNull':![],'defaultValue':Sequelize['NOW']}};
\ No newline at end of file
index 6c82c41..7442428 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x160d=['api','../../mysqldb','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','sendStatus','error','stack','name','send','index','model','keys','query','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','filter','merge','type','key','VIRTUAL','field','OpenchannelTransferReport','includeAll','include','findAll','catch','params','filters','length','options','create','body','find','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','desk.js','ioredis','../../config/license/hardware','../../config/logger'];(function(_0x9501a,_0x15ae9b){var _0x9642fa=function(_0x5f14f1){while(--_0x5f14f1){_0x9501a['push'](_0x9501a['shift']());}};_0x9642fa(++_0x15ae9b);}(_0x160d,0x14f));var _0xd160=function(_0x4d063e,_0x38eb23){_0x4d063e=_0x4d063e-0x0;var _0x56de68=_0x160d[_0x4d063e];return _0x56de68;};'use strict';var pdf=require(_0xd160('0x0'));var emlformat=require(_0xd160('0x1'));var rimraf=require(_0xd160('0x2'));var zipdir=require(_0xd160('0x3'));var jsonpatch=require(_0xd160('0x4'));var rp=require(_0xd160('0x5'));var moment=require(_0xd160('0x6'));var BPromise=require(_0xd160('0x7'));var Mustache=require(_0xd160('0x8'));var util=require(_0xd160('0x9'));var path=require(_0xd160('0xa'));var sox=require(_0xd160('0xb'));var csv=require(_0xd160('0xc'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xd160('0xd'));var squel=require(_0xd160('0xe'));var crypto=require(_0xd160('0xf'));var jsforce=require('jsforce');var deskjs=require(_0xd160('0x10'));var toCsv=require(_0xd160('0xc'));var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0xd160('0x11'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0xd160('0x12'));var logger=require(_0xd160('0x13'))(_0xd160('0x14'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xd160('0x15'))['db'];function respondWithStatusCode(_0x37fbeb,_0x580a40){_0x580a40=_0x580a40||0xcc;return function(_0x191afd){if(_0x191afd){return _0x37fbeb['sendStatus'](_0x580a40);}return _0x37fbeb[_0xd160('0x16')](_0x580a40)[_0xd160('0x17')]();};}function respondWithResult(_0x4548b7,_0x5f04b5){_0x5f04b5=_0x5f04b5||0xc8;return function(_0x462ed0){if(_0x462ed0){return _0x4548b7['status'](_0x5f04b5)[_0xd160('0x18')](_0x462ed0);}};}function respondWithFilteredResult(_0x13c5f4,_0x3ba818){return function(_0x5f4e98){if(_0x5f4e98){var _0x2e7757=_0x5f4e98[_0xd160('0x19')],_0x2c6bb1=_0x3ba818[_0xd160('0x1a')],_0x1c018c=_0x3ba818[_0xd160('0x1a')]+_0x3ba818[_0xd160('0x1b')],_0xd13898;if(_0x1c018c>=_0x2e7757){_0x1c018c=_0x2e7757;_0xd13898=0xc8;}else{_0xd13898=0xce;}_0x13c5f4[_0xd160('0x16')](_0xd13898);return _0x13c5f4[_0xd160('0x1c')](_0xd160('0x1d'),_0x2c6bb1+'-'+_0x1c018c+'/'+_0x2e7757)[_0xd160('0x18')](_0x5f4e98);}return null;};}function patchUpdates(_0x32ee83){return function(_0x22b596){try{jsonpatch[_0xd160('0x1e')](_0x22b596,_0x32ee83,!![]);}catch(_0x5edaaf){return BPromise[_0xd160('0x1f')](_0x5edaaf);}return _0x22b596['save']();};}function saveUpdates(_0x27b729,_0x4ea078){return function(_0x167c65){if(_0x167c65){return _0x167c65[_0xd160('0x20')](_0x27b729)[_0xd160('0x21')](function(_0x53f236){return _0x53f236;});}return null;};}function removeEntity(_0x59aab3,_0x5e2f70){return function(_0x4e25b3){if(_0x4e25b3){return _0x4e25b3[_0xd160('0x22')]()[_0xd160('0x21')](function(){_0x59aab3[_0xd160('0x16')](0xcc)[_0xd160('0x17')]();});}};}function handleEntityNotFound(_0x234ad7,_0x2a5fe8){return function(_0x284d95){if(!_0x284d95){_0x234ad7[_0xd160('0x23')](0x194);}return _0x284d95;};}function handleError(_0x113f17,_0x120ef5){_0x120ef5=_0x120ef5||0x1f4;return function(_0x5d82e5){logger[_0xd160('0x24')](_0x5d82e5[_0xd160('0x25')]);if(_0x5d82e5['name']){delete _0x5d82e5[_0xd160('0x26')];}_0x113f17['status'](_0x120ef5)[_0xd160('0x27')](_0x5d82e5);};}exports[_0xd160('0x28')]=function(_0x5f8e65,_0x4196cc){var _0x4da0e3={},_0x13c3f9={},_0x345486={'count':0x0,'rows':[]};var _0x3ebee1=db['OpenchannelTransferReport']['rawAttributes'];_0x13c3f9[_0xd160('0x29')]=_[_0xd160('0x2a')](_0x3ebee1);_0x13c3f9[_0xd160('0x2b')]=_['keys'](_0x5f8e65[_0xd160('0x2b')]);_0x13c3f9['filters']=_[_0xd160('0x2c')](_0x13c3f9[_0xd160('0x29')],_0x13c3f9[_0xd160('0x2b')]);_0x4da0e3[_0xd160('0x2d')]=_['intersection'](_0x13c3f9[_0xd160('0x29')],qs['fields'](_0x5f8e65[_0xd160('0x2b')][_0xd160('0x2e')]));_0x4da0e3[_0xd160('0x2d')]=_0x4da0e3[_0xd160('0x2d')]['length']?_0x4da0e3['attributes']:_0x13c3f9['model'];if(!_0x5f8e65[_0xd160('0x2b')][_0xd160('0x2f')](_0xd160('0x30'))){_0x4da0e3[_0xd160('0x1b')]=qs['limit'](_0x5f8e65['query']['limit']);_0x4da0e3[_0xd160('0x1a')]=qs['offset'](_0x5f8e65['query'][_0xd160('0x1a')]);}_0x4da0e3[_0xd160('0x31')]=qs['sort'](_0x5f8e65['query'][_0xd160('0x32')]);_0x4da0e3[_0xd160('0x33')]=qs['filters'](_['pick'](_0x5f8e65['query'],_0x13c3f9['filters']));if(_0x5f8e65[_0xd160('0x2b')][_0xd160('0x34')]){_0x4da0e3[_0xd160('0x33')]=_[_0xd160('0x35')](_0x4da0e3['where'],{'$or':_['map'](_0x3ebee1,function(_0x1e6bb2){if(_0x1e6bb2[_0xd160('0x36')][_0xd160('0x37')]!==_0xd160('0x38')){var _0x14353c={};_0x14353c[_0x1e6bb2[_0xd160('0x39')]]={'$like':'%'+_0x5f8e65[_0xd160('0x2b')][_0xd160('0x34')]+'%'};return _0x14353c;}})});}_0x4da0e3=_[_0xd160('0x35')]({},_0x4da0e3,_0x5f8e65['options']);var _0x2c0c94={'where':_0x4da0e3[_0xd160('0x33')]};return db[_0xd160('0x3a')][_0xd160('0x19')](_0x2c0c94)[_0xd160('0x21')](function(_0x14c62f){_0x345486[_0xd160('0x19')]=_0x14c62f;if(_0x5f8e65['query'][_0xd160('0x3b')]){_0x4da0e3[_0xd160('0x3c')]=[{'all':!![]}];}return db[_0xd160('0x3a')][_0xd160('0x3d')](_0x4da0e3);})[_0xd160('0x21')](function(_0x54a6b9){_0x345486['rows']=_0x54a6b9;return _0x345486;})['then'](respondWithFilteredResult(_0x4196cc,_0x4da0e3))[_0xd160('0x3e')](handleError(_0x4196cc,null));};exports['show']=function(_0x11adb4,_0x31aa7b){var _0x1b9c75={'raw':!![],'where':{'id':_0x11adb4[_0xd160('0x3f')]['id']}},_0x28a894={};_0x28a894[_0xd160('0x29')]=_[_0xd160('0x2a')](db['OpenchannelTransferReport']['rawAttributes']);_0x28a894[_0xd160('0x2b')]=_['keys'](_0x11adb4[_0xd160('0x2b')]);_0x28a894[_0xd160('0x40')]=_[_0xd160('0x2c')](_0x28a894[_0xd160('0x29')],_0x28a894[_0xd160('0x2b')]);_0x1b9c75[_0xd160('0x2d')]=_['intersection'](_0x28a894['model'],qs[_0xd160('0x2e')](_0x11adb4[_0xd160('0x2b')][_0xd160('0x2e')]));_0x1b9c75['attributes']=_0x1b9c75[_0xd160('0x2d')][_0xd160('0x41')]?_0x1b9c75[_0xd160('0x2d')]:_0x28a894['model'];if(_0x11adb4[_0xd160('0x2b')][_0xd160('0x3b')]){_0x1b9c75[_0xd160('0x3c')]=[{'all':!![]}];}_0x1b9c75=_[_0xd160('0x35')]({},_0x1b9c75,_0x11adb4[_0xd160('0x42')]);return db[_0xd160('0x3a')]['find'](_0x1b9c75)[_0xd160('0x21')](handleEntityNotFound(_0x31aa7b,null))[_0xd160('0x21')](respondWithResult(_0x31aa7b,null))[_0xd160('0x3e')](handleError(_0x31aa7b,null));};exports[_0xd160('0x43')]=function(_0x3677b4,_0x3b6774){return db[_0xd160('0x3a')]['create'](_0x3677b4[_0xd160('0x44')],{})[_0xd160('0x21')](respondWithResult(_0x3b6774,0xc9))['catch'](handleError(_0x3b6774,null));};exports[_0xd160('0x20')]=function(_0x17de85,_0x2569dc){if(_0x17de85[_0xd160('0x44')]['id']){delete _0x17de85[_0xd160('0x44')]['id'];}return db[_0xd160('0x3a')]['find']({'where':{'id':_0x17de85[_0xd160('0x3f')]['id']}})[_0xd160('0x21')](handleEntityNotFound(_0x2569dc,null))[_0xd160('0x21')](saveUpdates(_0x17de85[_0xd160('0x44')],null))[_0xd160('0x21')](respondWithResult(_0x2569dc,null))[_0xd160('0x3e')](handleError(_0x2569dc,null));};exports[_0xd160('0x22')]=function(_0x391f9b,_0x47fc6c){return db['OpenchannelTransferReport'][_0xd160('0x45')]({'where':{'id':_0x391f9b['params']['id']}})['then'](handleEntityNotFound(_0x47fc6c,null))['then'](removeEntity(_0x47fc6c,null))[_0xd160('0x3e')](handleError(_0x47fc6c,null));};exports[_0xd160('0x46')]=function(_0x136fb1,_0xea0339){return db['OpenchannelTransferReport'][_0xd160('0x46')]()[_0xd160('0x21')](respondWithResult(_0xea0339,null))['catch'](handleError(_0xea0339,null));};
\ No newline at end of file
+var _0xda67=['stack','name','send','index','OpenchannelTransferReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','sort','where','pick','filter','merge','map','key','field','options','includeAll','findAll','catch','show','include','find','create','body','params','describe','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','api','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy'];(function(_0x18f64a,_0x1c8248){var _0x44687f=function(_0x1234ad){while(--_0x1234ad){_0x18f64a['push'](_0x18f64a['shift']());}};_0x44687f(++_0x1c8248);}(_0xda67,0xb1));var _0x7da6=function(_0x36c5b7,_0x4a8b1b){_0x36c5b7=_0x36c5b7-0x0;var _0x4736b0=_0xda67[_0x36c5b7];return _0x4736b0;};'use strict';var pdf=require(_0x7da6('0x0'));var emlformat=require(_0x7da6('0x1'));var rimraf=require(_0x7da6('0x2'));var zipdir=require(_0x7da6('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x7da6('0x4'));var moment=require(_0x7da6('0x5'));var BPromise=require(_0x7da6('0x6'));var Mustache=require(_0x7da6('0x7'));var util=require(_0x7da6('0x8'));var path=require(_0x7da6('0x9'));var sox=require(_0x7da6('0xa'));var csv=require(_0x7da6('0xb'));var ejs=require(_0x7da6('0xc'));var fs=require('fs');var _=require(_0x7da6('0xd'));var squel=require(_0x7da6('0xe'));var crypto=require('crypto');var jsforce=require(_0x7da6('0xf'));var deskjs=require(_0x7da6('0x10'));var toCsv=require(_0x7da6('0xb'));var querystring=require('querystring');var Papa=require(_0x7da6('0x11'));var Redis=require(_0x7da6('0x12'));var authService=require('../../components/auth/service');var qs=require(_0x7da6('0x13'));var hardwareService=require(_0x7da6('0x14'));var logger=require('../../config/logger')(_0x7da6('0x15'));var utils=require('../../config/utils');var config=require(_0x7da6('0x16'));var db=require(_0x7da6('0x17'))['db'];function respondWithStatusCode(_0x12824c,_0x3f7150){_0x3f7150=_0x3f7150||0xcc;return function(_0x2310f0){if(_0x2310f0){return _0x12824c[_0x7da6('0x18')](_0x3f7150);}return _0x12824c['status'](_0x3f7150)[_0x7da6('0x19')]();};}function respondWithResult(_0x312777,_0x2d67d1){_0x2d67d1=_0x2d67d1||0xc8;return function(_0x2a13b2){if(_0x2a13b2){return _0x312777[_0x7da6('0x1a')](_0x2d67d1)[_0x7da6('0x1b')](_0x2a13b2);}};}function respondWithFilteredResult(_0x4f048e,_0x55279d){return function(_0x29ef4a){if(_0x29ef4a){var _0x21d5e8=_0x29ef4a[_0x7da6('0x1c')],_0x271be9=_0x55279d[_0x7da6('0x1d')],_0x101e99=_0x55279d[_0x7da6('0x1d')]+_0x55279d[_0x7da6('0x1e')],_0x57c552;if(_0x101e99>=_0x21d5e8){_0x101e99=_0x21d5e8;_0x57c552=0xc8;}else{_0x57c552=0xce;}_0x4f048e[_0x7da6('0x1a')](_0x57c552);return _0x4f048e[_0x7da6('0x1f')](_0x7da6('0x20'),_0x271be9+'-'+_0x101e99+'/'+_0x21d5e8)[_0x7da6('0x1b')](_0x29ef4a);}return null;};}function patchUpdates(_0x280402){return function(_0x266085){try{jsonpatch[_0x7da6('0x21')](_0x266085,_0x280402,!![]);}catch(_0x4037a3){return BPromise[_0x7da6('0x22')](_0x4037a3);}return _0x266085[_0x7da6('0x23')]();};}function saveUpdates(_0x276a3a,_0x3ff057){return function(_0x487c1a){if(_0x487c1a){return _0x487c1a[_0x7da6('0x24')](_0x276a3a)[_0x7da6('0x25')](function(_0x417e6c){return _0x417e6c;});}return null;};}function removeEntity(_0x4344b4,_0x3224b1){return function(_0x300f78){if(_0x300f78){return _0x300f78[_0x7da6('0x26')]()['then'](function(){_0x4344b4['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x400b16,_0x415d89){return function(_0x593032){if(!_0x593032){_0x400b16['sendStatus'](0x194);}return _0x593032;};}function handleError(_0x305315,_0x47b3a9){_0x47b3a9=_0x47b3a9||0x1f4;return function(_0x345c0c){logger['error'](_0x345c0c[_0x7da6('0x27')]);if(_0x345c0c['name']){delete _0x345c0c[_0x7da6('0x28')];}_0x305315['status'](_0x47b3a9)[_0x7da6('0x29')](_0x345c0c);};}exports[_0x7da6('0x2a')]=function(_0x27a21e,_0x197997){var _0x506c1f={},_0x5ee33b={},_0x2455a2={'count':0x0,'rows':[]};var _0x15882d=db[_0x7da6('0x2b')][_0x7da6('0x2c')];_0x5ee33b[_0x7da6('0x2d')]=_[_0x7da6('0x2e')](_0x15882d);_0x5ee33b[_0x7da6('0x2f')]=_[_0x7da6('0x2e')](_0x27a21e[_0x7da6('0x2f')]);_0x5ee33b[_0x7da6('0x30')]=_[_0x7da6('0x31')](_0x5ee33b['model'],_0x5ee33b[_0x7da6('0x2f')]);_0x506c1f[_0x7da6('0x32')]=_[_0x7da6('0x31')](_0x5ee33b[_0x7da6('0x2d')],qs[_0x7da6('0x33')](_0x27a21e[_0x7da6('0x2f')][_0x7da6('0x33')]));_0x506c1f[_0x7da6('0x32')]=_0x506c1f[_0x7da6('0x32')][_0x7da6('0x34')]?_0x506c1f[_0x7da6('0x32')]:_0x5ee33b[_0x7da6('0x2d')];if(!_0x27a21e[_0x7da6('0x2f')]['hasOwnProperty']('nolimit')){_0x506c1f[_0x7da6('0x1e')]=qs[_0x7da6('0x1e')](_0x27a21e[_0x7da6('0x2f')][_0x7da6('0x1e')]);_0x506c1f[_0x7da6('0x1d')]=qs[_0x7da6('0x1d')](_0x27a21e[_0x7da6('0x2f')][_0x7da6('0x1d')]);}_0x506c1f['order']=qs[_0x7da6('0x35')](_0x27a21e[_0x7da6('0x2f')][_0x7da6('0x35')]);_0x506c1f[_0x7da6('0x36')]=qs['filters'](_[_0x7da6('0x37')](_0x27a21e['query'],_0x5ee33b['filters']));if(_0x27a21e[_0x7da6('0x2f')][_0x7da6('0x38')]){_0x506c1f[_0x7da6('0x36')]=_[_0x7da6('0x39')](_0x506c1f[_0x7da6('0x36')],{'$or':_[_0x7da6('0x3a')](_0x15882d,function(_0x4b1fc3){if(_0x4b1fc3['type'][_0x7da6('0x3b')]!=='VIRTUAL'){var _0x1d544b={};_0x1d544b[_0x4b1fc3[_0x7da6('0x3c')]]={'$like':'%'+_0x27a21e['query'][_0x7da6('0x38')]+'%'};return _0x1d544b;}})});}_0x506c1f=_[_0x7da6('0x39')]({},_0x506c1f,_0x27a21e[_0x7da6('0x3d')]);var _0x3d81e0={'where':_0x506c1f[_0x7da6('0x36')]};return db[_0x7da6('0x2b')][_0x7da6('0x1c')](_0x3d81e0)[_0x7da6('0x25')](function(_0x4cbf23){_0x2455a2[_0x7da6('0x1c')]=_0x4cbf23;if(_0x27a21e[_0x7da6('0x2f')][_0x7da6('0x3e')]){_0x506c1f['include']=[{'all':!![]}];}return db[_0x7da6('0x2b')][_0x7da6('0x3f')](_0x506c1f);})[_0x7da6('0x25')](function(_0x2bddb2){_0x2455a2['rows']=_0x2bddb2;return _0x2455a2;})[_0x7da6('0x25')](respondWithFilteredResult(_0x197997,_0x506c1f))[_0x7da6('0x40')](handleError(_0x197997,null));};exports[_0x7da6('0x41')]=function(_0xc0054d,_0x1985de){var _0x56047c={'raw':!![],'where':{'id':_0xc0054d['params']['id']}},_0x2b6a0a={};_0x2b6a0a[_0x7da6('0x2d')]=_['keys'](db[_0x7da6('0x2b')]['rawAttributes']);_0x2b6a0a['query']=_[_0x7da6('0x2e')](_0xc0054d[_0x7da6('0x2f')]);_0x2b6a0a[_0x7da6('0x30')]=_[_0x7da6('0x31')](_0x2b6a0a[_0x7da6('0x2d')],_0x2b6a0a['query']);_0x56047c[_0x7da6('0x32')]=_['intersection'](_0x2b6a0a[_0x7da6('0x2d')],qs[_0x7da6('0x33')](_0xc0054d[_0x7da6('0x2f')][_0x7da6('0x33')]));_0x56047c[_0x7da6('0x32')]=_0x56047c[_0x7da6('0x32')]['length']?_0x56047c[_0x7da6('0x32')]:_0x2b6a0a[_0x7da6('0x2d')];if(_0xc0054d[_0x7da6('0x2f')][_0x7da6('0x3e')]){_0x56047c[_0x7da6('0x42')]=[{'all':!![]}];}_0x56047c=_['merge']({},_0x56047c,_0xc0054d[_0x7da6('0x3d')]);return db['OpenchannelTransferReport'][_0x7da6('0x43')](_0x56047c)[_0x7da6('0x25')](handleEntityNotFound(_0x1985de,null))[_0x7da6('0x25')](respondWithResult(_0x1985de,null))['catch'](handleError(_0x1985de,null));};exports[_0x7da6('0x44')]=function(_0x58fffd,_0x16f610){return db[_0x7da6('0x2b')][_0x7da6('0x44')](_0x58fffd[_0x7da6('0x45')],{})[_0x7da6('0x25')](respondWithResult(_0x16f610,0xc9))[_0x7da6('0x40')](handleError(_0x16f610,null));};exports[_0x7da6('0x24')]=function(_0x1ce4c5,_0x1f612c){if(_0x1ce4c5[_0x7da6('0x45')]['id']){delete _0x1ce4c5['body']['id'];}return db[_0x7da6('0x2b')]['find']({'where':{'id':_0x1ce4c5[_0x7da6('0x46')]['id']}})['then'](handleEntityNotFound(_0x1f612c,null))[_0x7da6('0x25')](saveUpdates(_0x1ce4c5[_0x7da6('0x45')],null))['then'](respondWithResult(_0x1f612c,null))[_0x7da6('0x40')](handleError(_0x1f612c,null));};exports[_0x7da6('0x26')]=function(_0x23d898,_0x2ca308){return db[_0x7da6('0x2b')][_0x7da6('0x43')]({'where':{'id':_0x23d898['params']['id']}})[_0x7da6('0x25')](handleEntityNotFound(_0x2ca308,null))[_0x7da6('0x25')](removeEntity(_0x2ca308,null))[_0x7da6('0x40')](handleError(_0x2ca308,null));};exports[_0x7da6('0x47')]=function(_0x5953ae,_0x1fa572){return db[_0x7da6('0x2b')][_0x7da6('0x47')]()[_0x7da6('0x25')](respondWithResult(_0x1fa572,null))[_0x7da6('0x40')](handleError(_0x1fa572,null));};
\ No newline at end of file
index 31183ee..f2cdb08 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x02b2=['util','../../config/logger','request-promise','path','rimraf','../../config/environment','./openchannelTransferReport.attributes','exports','define','uniqueid','lodash'];(function(_0x32d01c,_0x26c32d){var _0x15f85d=function(_0x4da77b){while(--_0x4da77b){_0x32d01c['push'](_0x32d01c['shift']());}};_0x15f85d(++_0x26c32d);}(_0x02b2,0x13e));var _0x202b=function(_0x1af04a,_0x5aea9d){_0x1af04a=_0x1af04a-0x0;var _0x10b71d=_0x02b2[_0x1af04a];return _0x10b71d;};'use strict';var _=require(_0x202b('0x0'));var util=require(_0x202b('0x1'));var logger=require(_0x202b('0x2'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x202b('0x3'));var fs=require('fs');var path=require(_0x202b('0x4'));var rimraf=require(_0x202b('0x5'));var config=require(_0x202b('0x6'));var attributes=require(_0x202b('0x7'));module[_0x202b('0x8')]=function(_0x24706f,_0x46f7b4){return _0x24706f[_0x202b('0x9')]('OpenchannelTransferReport',attributes,{'tableName':'report_openchannel_transfer','paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x202b('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x6970=['api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./openchannelTransferReport.attributes','exports','define','OpenchannelTransferReport','report_openchannel_transfer','uniqueid','lodash'];(function(_0x169e53,_0x46be55){var _0x252bb3=function(_0x521e7a){while(--_0x521e7a){_0x169e53['push'](_0x169e53['shift']());}};_0x252bb3(++_0x46be55);}(_0x6970,0xc3));var _0x0697=function(_0x54fef2,_0x515370){_0x54fef2=_0x54fef2-0x0;var _0x4270dd=_0x6970[_0x54fef2];return _0x4270dd;};'use strict';var _=require(_0x0697('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x0697('0x1'));var moment=require(_0x0697('0x2'));var BPromise=require(_0x0697('0x3'));var rp=require(_0x0697('0x4'));var fs=require('fs');var path=require(_0x0697('0x5'));var rimraf=require(_0x0697('0x6'));var config=require(_0x0697('0x7'));var attributes=require(_0x0697('0x8'));module[_0x0697('0x9')]=function(_0x2b817d,_0x5e08fe){return _0x2b817d[_0x0697('0xa')](_0x0697('0xb'),attributes,{'tableName':_0x0697('0xc'),'paranoid':![],'indexes':[{'name':_0x0697('0xd'),'fields':[_0x0697('0xd')]}],'timestamps':!![]});};
\ No newline at end of file
index 4f1c896..01a3ac3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0560=['jayson/promise','client','http','then','info','OpenchannelTransferReport,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','result','catch','lodash','moment','bluebird','../../config/logger'];(function(_0x3e5d16,_0x5dfe46){var _0x651d93=function(_0x4f9e9f){while(--_0x4f9e9f){_0x3e5d16['push'](_0x3e5d16['shift']());}};_0x651d93(++_0x5dfe46);}(_0x0560,0x95));var _0x0056=function(_0x18fa05,_0x6c1259){_0x18fa05=_0x18fa05-0x0;var _0xbf04f3=_0x0560[_0x18fa05];return _0xbf04f3;};'use strict';var _=require(_0x0056('0x0'));var util=require('util');var moment=require(_0x0056('0x1'));var BPromise=require(_0x0056('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x0056('0x3'))('rpc');var config=require('../../config/environment');var jayson=require(_0x0056('0x4'));var client=jayson[_0x0056('0x5')][_0x0056('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x59ae13,_0xfb0b6c,_0x28830c){return new BPromise(function(_0x98cce9,_0xd1dce){return client['request'](_0x59ae13,_0x28830c)[_0x0056('0x7')](function(_0x3196ce){logger[_0x0056('0x8')](_0x0056('0x9'),_0xfb0b6c,_0x0056('0xa'));logger[_0x0056('0xb')]('OpenchannelTransferReport,\x20%s,\x20%s,\x20%s',_0xfb0b6c,_0x0056('0xa'),JSON[_0x0056('0xc')](_0x3196ce));if(_0x3196ce[_0x0056('0xd')]){if(_0x3196ce[_0x0056('0xd')]['code']===0x1f4){logger[_0x0056('0xd')](_0x0056('0x9'),_0xfb0b6c,_0x3196ce[_0x0056('0xd')][_0x0056('0xe')]);return _0xd1dce(_0x3196ce[_0x0056('0xd')][_0x0056('0xe')]);}logger[_0x0056('0xd')](_0x0056('0x9'),_0xfb0b6c,_0x3196ce['error']['message']);return _0x98cce9(_0x3196ce['error'][_0x0056('0xe')]);}else{logger[_0x0056('0x8')](_0x0056('0x9'),_0xfb0b6c,_0x0056('0xa'));_0x98cce9(_0x3196ce[_0x0056('0xf')][_0x0056('0xe')]);}})[_0x0056('0x10')](function(_0x16176d){logger['error'](_0x0056('0x9'),_0xfb0b6c,_0x16176d);_0xd1dce(_0x16176d);});});}
\ No newline at end of file
+var _0xc012=['OpenchannelTransferReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','OpenchannelTransferReport,\x20%s,\x20%s','request\x20sent','debug'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xc012,0x97));var _0x2c01=function(_0x1168c2,_0x1ed2ce){_0x1168c2=_0x1168c2-0x0;var _0x5ab8b5=_0xc012[_0x1168c2];return _0x5ab8b5;};'use strict';var _=require(_0x2c01('0x0'));var util=require(_0x2c01('0x1'));var moment=require('moment');var BPromise=require(_0x2c01('0x2'));var rs=require(_0x2c01('0x3'));var fs=require('fs');var Redis=require(_0x2c01('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x2c01('0x5'));var logger=require(_0x2c01('0x6'))(_0x2c01('0x7'));var config=require(_0x2c01('0x8'));var jayson=require(_0x2c01('0x9'));var client=jayson[_0x2c01('0xa')][_0x2c01('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x3dcb89,_0x1ae5a9,_0x281bf4){return new BPromise(function(_0x1f37ea,_0x4ddef8){return client['request'](_0x3dcb89,_0x281bf4)[_0x2c01('0xc')](function(_0x2b85cb){logger[_0x2c01('0xd')](_0x2c01('0xe'),_0x1ae5a9,_0x2c01('0xf'));logger[_0x2c01('0x10')](_0x2c01('0x11'),_0x1ae5a9,_0x2c01('0xf'),JSON[_0x2c01('0x12')](_0x2b85cb));if(_0x2b85cb[_0x2c01('0x13')]){if(_0x2b85cb[_0x2c01('0x13')][_0x2c01('0x14')]===0x1f4){logger[_0x2c01('0x13')](_0x2c01('0xe'),_0x1ae5a9,_0x2b85cb[_0x2c01('0x13')][_0x2c01('0x15')]);return _0x4ddef8(_0x2b85cb[_0x2c01('0x13')][_0x2c01('0x15')]);}logger[_0x2c01('0x13')](_0x2c01('0xe'),_0x1ae5a9,_0x2b85cb[_0x2c01('0x13')][_0x2c01('0x15')]);return _0x1f37ea(_0x2b85cb[_0x2c01('0x13')][_0x2c01('0x15')]);}else{logger['info'](_0x2c01('0xe'),_0x1ae5a9,_0x2c01('0xf'));_0x1f37ea(_0x2b85cb[_0x2c01('0x16')][_0x2c01('0x15')]);}})[_0x2c01('0x17')](function(_0x36b23a){logger[_0x2c01('0x13')](_0x2c01('0xe'),_0x1ae5a9,_0x36b23a);_0x4ddef8(_0x36b23a);});});}
\ No newline at end of file
index ebf7b73..4be14bc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x876b=['isAuthenticated','/:id','show','post','create','update','delete','exports','path','connect-timeout','../../components/auth/service','../../components/interaction/service','./pause.controller','get'];(function(_0x21a469,_0x1335c0){var _0x2b173a=function(_0x1c1f65){while(--_0x1c1f65){_0x21a469['push'](_0x21a469['shift']());}};_0x2b173a(++_0x1335c0);}(_0x876b,0x1ba));var _0xb876=function(_0x2fa739,_0x5414de){_0x2fa739=_0x2fa739-0x0;var _0x3bd746=_0x876b[_0x2fa739];return _0x3bd746;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xb876('0x0'));var timeout=require(_0xb876('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0xb876('0x2'));var interaction=require(_0xb876('0x3'));var config=require('../../config/environment');var controller=require(_0xb876('0x4'));router[_0xb876('0x5')]('/',auth[_0xb876('0x6')](),controller['index']);router[_0xb876('0x5')](_0xb876('0x7'),auth['isAuthenticated'](),controller[_0xb876('0x8')]);router[_0xb876('0x9')]('/',auth[_0xb876('0x6')](),controller[_0xb876('0xa')]);router['put'](_0xb876('0x7'),auth['isAuthenticated'](),controller[_0xb876('0xb')]);router[_0xb876('0xc')]('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0xb876('0xd')]=router;
\ No newline at end of file
+var _0x50c1=['../../components/interaction/service','../../config/environment','./pause.controller','get','index','isAuthenticated','show','post','put','/:id','update','delete','exports','multer','path','express','Router'];(function(_0x4b5ac3,_0x44ceb7){var _0x41d9c1=function(_0x429173){while(--_0x429173){_0x4b5ac3['push'](_0x4b5ac3['shift']());}};_0x41d9c1(++_0x44ceb7);}(_0x50c1,0x1b6));var _0x150c=function(_0x2d3671,_0x12939e){_0x2d3671=_0x2d3671-0x0;var _0x5b7f98=_0x50c1[_0x2d3671];return _0x5b7f98;};'use strict';var multer=require(_0x150c('0x0'));var util=require('util');var path=require(_0x150c('0x1'));var timeout=require('connect-timeout');var express=require(_0x150c('0x2'));var router=express[_0x150c('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x150c('0x4'));var config=require(_0x150c('0x5'));var controller=require(_0x150c('0x6'));router[_0x150c('0x7')]('/',auth['isAuthenticated'](),controller[_0x150c('0x8')]);router[_0x150c('0x7')]('/:id',auth[_0x150c('0x9')](),controller[_0x150c('0xa')]);router[_0x150c('0xb')]('/',auth[_0x150c('0x9')](),controller['create']);router[_0x150c('0xc')](_0x150c('0xd'),auth[_0x150c('0x9')](),controller[_0x150c('0xe')]);router[_0x150c('0xf')](_0x150c('0xd'),auth[_0x150c('0x9')](),controller['destroy']);module[_0x150c('0x10')]=router;
\ No newline at end of file
index 210547f..2d97530 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb57c=['sequelize','exports','STRING','name'];(function(_0x56d146,_0x4ed855){var _0x931a6f=function(_0x4daad8){while(--_0x4daad8){_0x56d146['push'](_0x56d146['shift']());}};_0x931a6f(++_0x4ed855);}(_0xb57c,0x14c));var _0xcb57=function(_0x38e88d,_0x50f15f){_0x38e88d=_0x38e88d-0x0;var _0x373f38=_0xb57c[_0x38e88d];return _0x373f38;};'use strict';var Sequelize=require(_0xcb57('0x0'));module[_0xcb57('0x1')]={'name':{'type':Sequelize[_0xcb57('0x2')],'unique':_0xcb57('0x3'),'allowNull':![]},'description':{'type':Sequelize[_0xcb57('0x2')]}};
\ No newline at end of file
+var _0x18ee=['STRING','sequelize','exports'];(function(_0x2a0009,_0x1eba7c){var _0x177807=function(_0x196742){while(--_0x196742){_0x2a0009['push'](_0x2a0009['shift']());}};_0x177807(++_0x1eba7c);}(_0x18ee,0x1d2));var _0xe18e=function(_0x716a15,_0x50363a){_0x716a15=_0x716a15-0x0;var _0x1a0ea9=_0x18ee[_0x716a15];return _0x1a0ea9;};'use strict';var Sequelize=require(_0xe18e('0x0'));module[_0xe18e('0x1')]={'name':{'type':Sequelize['STRING'],'unique':'name','allowNull':![]},'description':{'type':Sequelize[_0xe18e('0x2')]}};
\ No newline at end of file
index df8b38e..8f2b747 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','then','get','UserProfileResource','destroy','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','order','sort','where','filter','type','key','VIRTUAL','field','options','includeAll','include','Pause','rows','catch','show','params','merge','find','create','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','UserProfileSection','userProfileId','autoAssociation','update','body','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js'];(function(_0x33f477,_0x52c51c){var _0x43e3ac=function(_0x3e0cb5){while(--_0x3e0cb5){_0x33f477['push'](_0x33f477['shift']());}};_0x43e3ac(++_0x52c51c);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2d8fc2,_0x1c461d){_0x2d8fc2=_0x2d8fc2-0x0;var _0x3a9e53=_0xa9e0[_0x2d8fc2];return _0x3a9e53;};'use strict';var pdf=require(_0x0a9e('0x0'));var emlformat=require(_0x0a9e('0x1'));var rimraf=require(_0x0a9e('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x0a9e('0x3'));var moment=require('moment');var BPromise=require(_0x0a9e('0x4'));var Mustache=require(_0x0a9e('0x5'));var util=require(_0x0a9e('0x6'));var path=require(_0x0a9e('0x7'));var sox=require(_0x0a9e('0x8'));var csv=require('to-csv');var ejs=require(_0x0a9e('0x9'));var fs=require('fs');var _=require(_0x0a9e('0xa'));var squel=require(_0x0a9e('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x0a9e('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x0a9e('0xd'));var Redis=require(_0x0a9e('0xe'));var authService=require(_0x0a9e('0xf'));var qs=require(_0x0a9e('0x10'));var hardwareService=require(_0x0a9e('0x11'));var logger=require(_0x0a9e('0x12'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x273d4d,_0x36471c){_0x36471c=_0x36471c||0xcc;return function(_0xd5b662){if(_0xd5b662){return _0x273d4d[_0x0a9e('0x13')](_0x36471c);}return _0x273d4d[_0x0a9e('0x14')](_0x36471c)[_0x0a9e('0x15')]();};}function respondWithResult(_0x5db4b0,_0x4283ce){_0x4283ce=_0x4283ce||0xc8;return function(_0x239b12){if(_0x239b12){return _0x5db4b0[_0x0a9e('0x14')](_0x4283ce)[_0x0a9e('0x16')](_0x239b12);}};}function respondWithFilteredResult(_0x44dcfd,_0x4d5611){return function(_0x52a03d){if(_0x52a03d){var _0x22dccb=_0x52a03d[_0x0a9e('0x17')],_0x5d0880=_0x4d5611[_0x0a9e('0x18')],_0x1985b6=_0x4d5611['offset']+_0x4d5611[_0x0a9e('0x19')],_0x519dfd;if(_0x1985b6>=_0x22dccb){_0x1985b6=_0x22dccb;_0x519dfd=0xc8;}else{_0x519dfd=0xce;}_0x44dcfd['status'](_0x519dfd);return _0x44dcfd[_0x0a9e('0x1a')](_0x0a9e('0x1b'),_0x5d0880+'-'+_0x1985b6+'/'+_0x22dccb)[_0x0a9e('0x16')](_0x52a03d);}return null;};}function patchUpdates(_0x205fd6){return function(_0x31b1ca){try{jsonpatch[_0x0a9e('0x1c')](_0x31b1ca,_0x205fd6,!![]);}catch(_0x530eb7){return BPromise[_0x0a9e('0x1d')](_0x530eb7);}return _0x31b1ca[_0x0a9e('0x1e')]();};}function saveUpdates(_0x112016,_0x1c696a){return function(_0x105080){if(_0x105080){return _0x105080['update'](_0x112016)[_0x0a9e('0x1f')](function(_0x155cce){return _0x155cce;});}return null;};}function removeEntity(_0x53682f,_0x20f109){return function(_0x5a09ef){if(_0x5a09ef){return _0x5a09ef['destroy']()[_0x0a9e('0x1f')](function(){var _0x432e56=_0x5a09ef[_0x0a9e('0x20')]({'plain':!![]});var _0x30bae6='Pauses';return db[_0x0a9e('0x21')][_0x0a9e('0x22')]({'where':{'type':_0x30bae6,'resourceId':_0x432e56['id']}})[_0x0a9e('0x1f')](function(){return _0x5a09ef;});})[_0x0a9e('0x1f')](function(){_0x53682f[_0x0a9e('0x14')](0xcc)[_0x0a9e('0x15')]();});}};}function handleEntityNotFound(_0x16b1ca,_0x5ea472){return function(_0x59181e){if(!_0x59181e){_0x16b1ca[_0x0a9e('0x13')](0x194);}return _0x59181e;};}function handleError(_0x3a8e58,_0x40c424){_0x40c424=_0x40c424||0x1f4;return function(_0x33161b){logger['error'](_0x33161b[_0x0a9e('0x23')]);if(_0x33161b['name']){delete _0x33161b[_0x0a9e('0x24')];}_0x3a8e58['status'](_0x40c424)[_0x0a9e('0x25')](_0x33161b);};}exports[_0x0a9e('0x26')]=function(_0x25fba9,_0x14433c){var _0x140511={},_0x1538a4={},_0x11c3b6={'count':0x0,'rows':[]};var _0x14de77=db['Pause'][_0x0a9e('0x27')];_0x1538a4[_0x0a9e('0x28')]=_[_0x0a9e('0x29')](_0x14de77);_0x1538a4[_0x0a9e('0x2a')]=_['keys'](_0x25fba9[_0x0a9e('0x2a')]);_0x1538a4[_0x0a9e('0x2b')]=_[_0x0a9e('0x2c')](_0x1538a4[_0x0a9e('0x28')],_0x1538a4[_0x0a9e('0x2a')]);_0x140511[_0x0a9e('0x2d')]=_[_0x0a9e('0x2c')](_0x1538a4[_0x0a9e('0x28')],qs[_0x0a9e('0x2e')](_0x25fba9['query'][_0x0a9e('0x2e')]));_0x140511['attributes']=_0x140511[_0x0a9e('0x2d')][_0x0a9e('0x2f')]?_0x140511[_0x0a9e('0x2d')]:_0x1538a4[_0x0a9e('0x28')];if(!_0x25fba9[_0x0a9e('0x2a')]['hasOwnProperty'](_0x0a9e('0x30'))){_0x140511[_0x0a9e('0x19')]=qs[_0x0a9e('0x19')](_0x25fba9[_0x0a9e('0x2a')][_0x0a9e('0x19')]);_0x140511[_0x0a9e('0x18')]=qs[_0x0a9e('0x18')](_0x25fba9[_0x0a9e('0x2a')]['offset']);}_0x140511[_0x0a9e('0x31')]=qs['sort'](_0x25fba9[_0x0a9e('0x2a')][_0x0a9e('0x32')]);_0x140511[_0x0a9e('0x33')]=qs[_0x0a9e('0x2b')](_['pick'](_0x25fba9[_0x0a9e('0x2a')],_0x1538a4[_0x0a9e('0x2b')]));if(_0x25fba9[_0x0a9e('0x2a')][_0x0a9e('0x34')]){_0x140511['where']=_['merge'](_0x140511[_0x0a9e('0x33')],{'$or':_['map'](_0x14de77,function(_0x24936a){if(_0x24936a[_0x0a9e('0x35')][_0x0a9e('0x36')]!==_0x0a9e('0x37')){var _0x4f41ae={};_0x4f41ae[_0x24936a[_0x0a9e('0x38')]]={'$like':'%'+_0x25fba9[_0x0a9e('0x2a')][_0x0a9e('0x34')]+'%'};return _0x4f41ae;}})});}_0x140511=_['merge']({},_0x140511,_0x25fba9[_0x0a9e('0x39')]);var _0x1a180b={'where':_0x140511[_0x0a9e('0x33')]};return db['Pause']['count'](_0x1a180b)[_0x0a9e('0x1f')](function(_0x40d766){_0x11c3b6['count']=_0x40d766;if(_0x25fba9[_0x0a9e('0x2a')][_0x0a9e('0x3a')]){_0x140511[_0x0a9e('0x3b')]=[{'all':!![]}];}return db[_0x0a9e('0x3c')]['findAll'](_0x140511);})['then'](function(_0x15e37d){_0x11c3b6[_0x0a9e('0x3d')]=_0x15e37d;return _0x11c3b6;})['then'](respondWithFilteredResult(_0x14433c,_0x140511))[_0x0a9e('0x3e')](handleError(_0x14433c,null));};exports[_0x0a9e('0x3f')]=function(_0x1459bb,_0x5b4f5e){var _0x316c8f={'raw':!![],'where':{'id':_0x1459bb[_0x0a9e('0x40')]['id']}},_0x2cfea9={};_0x2cfea9[_0x0a9e('0x28')]=_[_0x0a9e('0x29')](db[_0x0a9e('0x3c')][_0x0a9e('0x27')]);_0x2cfea9[_0x0a9e('0x2a')]=_[_0x0a9e('0x29')](_0x1459bb[_0x0a9e('0x2a')]);_0x2cfea9[_0x0a9e('0x2b')]=_[_0x0a9e('0x2c')](_0x2cfea9[_0x0a9e('0x28')],_0x2cfea9[_0x0a9e('0x2a')]);_0x316c8f[_0x0a9e('0x2d')]=_['intersection'](_0x2cfea9['model'],qs[_0x0a9e('0x2e')](_0x1459bb[_0x0a9e('0x2a')][_0x0a9e('0x2e')]));_0x316c8f[_0x0a9e('0x2d')]=_0x316c8f[_0x0a9e('0x2d')][_0x0a9e('0x2f')]?_0x316c8f[_0x0a9e('0x2d')]:_0x2cfea9[_0x0a9e('0x28')];if(_0x1459bb[_0x0a9e('0x2a')][_0x0a9e('0x3a')]){_0x316c8f[_0x0a9e('0x3b')]=[{'all':!![]}];}_0x316c8f=_[_0x0a9e('0x41')]({},_0x316c8f,_0x1459bb['options']);return db[_0x0a9e('0x3c')][_0x0a9e('0x42')](_0x316c8f)[_0x0a9e('0x1f')](handleEntityNotFound(_0x5b4f5e,null))[_0x0a9e('0x1f')](respondWithResult(_0x5b4f5e,null))[_0x0a9e('0x3e')](handleError(_0x5b4f5e,null));};exports[_0x0a9e('0x43')]=function(_0x21eb86,_0x44dd99){return db['Pause'][_0x0a9e('0x43')](_0x21eb86['body'],{})[_0x0a9e('0x1f')](function(_0x476688){var _0x8d6dd1=_0x21eb86['user'][_0x0a9e('0x20')]({'plain':!![]});if(!_0x8d6dd1)throw new Error(_0x0a9e('0x44'));if(_0x8d6dd1[_0x0a9e('0x45')]===_0x0a9e('0x46')){var _0x45c845=_0x476688[_0x0a9e('0x20')]({'plain':!![]});var _0x45bf7f='Pauses';return db[_0x0a9e('0x47')][_0x0a9e('0x42')]({'where':{'name':_0x45bf7f,'userProfileId':_0x8d6dd1[_0x0a9e('0x48')]},'raw':!![]})[_0x0a9e('0x1f')](function(_0x409789){if(_0x409789&&_0x409789[_0x0a9e('0x49')]===0x0){return db[_0x0a9e('0x21')][_0x0a9e('0x43')]({'name':_0x45c845[_0x0a9e('0x24')],'resourceId':_0x45c845['id'],'type':_0x409789['name'],'sectionId':_0x409789['id']},{})[_0x0a9e('0x1f')](function(){return _0x476688;});}else{return _0x476688;}})[_0x0a9e('0x3e')](function(_0x4f7240){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x4f7240);throw _0x4f7240;});}return _0x476688;})[_0x0a9e('0x1f')](respondWithResult(_0x44dd99,0xc9))[_0x0a9e('0x3e')](handleError(_0x44dd99,null));};exports[_0x0a9e('0x4a')]=function(_0x11545a,_0x61bb17){if(_0x11545a[_0x0a9e('0x4b')]['id']){delete _0x11545a[_0x0a9e('0x4b')]['id'];}return db[_0x0a9e('0x3c')]['find']({'where':{'id':_0x11545a['params']['id']}})['then'](handleEntityNotFound(_0x61bb17,null))[_0x0a9e('0x1f')](saveUpdates(_0x11545a[_0x0a9e('0x4b')],null))[_0x0a9e('0x1f')](respondWithResult(_0x61bb17,null))['catch'](handleError(_0x61bb17,null));};exports[_0x0a9e('0x22')]=function(_0x161aa7,_0x53d113){return db['Pause'][_0x0a9e('0x42')]({'where':{'id':_0x161aa7['params']['id']}})[_0x0a9e('0x1f')](handleEntityNotFound(_0x53d113,null))['then'](removeEntity(_0x53d113,null))[_0x0a9e('0x3e')](handleError(_0x53d113,null));};
\ No newline at end of file
+var _0xa9e0=['papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','then','get','UserProfileResource','destroy','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','order','sort','where','filter','type','key','VIRTUAL','field','options','includeAll','include','Pause','rows','catch','show','params','merge','find','create','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','UserProfileSection','userProfileId','autoAssociation','update','body','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js'];(function(_0xf3f44a,_0x2632f7){var _0x4b576d=function(_0x16666f){while(--_0x16666f){_0xf3f44a['push'](_0xf3f44a['shift']());}};_0x4b576d(++_0x2632f7);}(_0xa9e0,0x123));var _0x0a9e=function(_0x138f59,_0x1b53fb){_0x138f59=_0x138f59-0x0;var _0x3d114d=_0xa9e0[_0x138f59];return _0x3d114d;};'use strict';var pdf=require(_0x0a9e('0x0'));var emlformat=require(_0x0a9e('0x1'));var rimraf=require(_0x0a9e('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x0a9e('0x3'));var moment=require('moment');var BPromise=require(_0x0a9e('0x4'));var Mustache=require(_0x0a9e('0x5'));var util=require(_0x0a9e('0x6'));var path=require(_0x0a9e('0x7'));var sox=require(_0x0a9e('0x8'));var csv=require('to-csv');var ejs=require(_0x0a9e('0x9'));var fs=require('fs');var _=require(_0x0a9e('0xa'));var squel=require(_0x0a9e('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x0a9e('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x0a9e('0xd'));var Redis=require(_0x0a9e('0xe'));var authService=require(_0x0a9e('0xf'));var qs=require(_0x0a9e('0x10'));var hardwareService=require(_0x0a9e('0x11'));var logger=require(_0x0a9e('0x12'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x273d4d,_0x36471c){_0x36471c=_0x36471c||0xcc;return function(_0xd5b662){if(_0xd5b662){return _0x273d4d[_0x0a9e('0x13')](_0x36471c);}return _0x273d4d[_0x0a9e('0x14')](_0x36471c)[_0x0a9e('0x15')]();};}function respondWithResult(_0x5db4b0,_0x4283ce){_0x4283ce=_0x4283ce||0xc8;return function(_0x239b12){if(_0x239b12){return _0x5db4b0[_0x0a9e('0x14')](_0x4283ce)[_0x0a9e('0x16')](_0x239b12);}};}function respondWithFilteredResult(_0x44dcfd,_0x4d5611){return function(_0x52a03d){if(_0x52a03d){var _0x22dccb=_0x52a03d[_0x0a9e('0x17')],_0x5d0880=_0x4d5611[_0x0a9e('0x18')],_0x1985b6=_0x4d5611['offset']+_0x4d5611[_0x0a9e('0x19')],_0x519dfd;if(_0x1985b6>=_0x22dccb){_0x1985b6=_0x22dccb;_0x519dfd=0xc8;}else{_0x519dfd=0xce;}_0x44dcfd['status'](_0x519dfd);return _0x44dcfd[_0x0a9e('0x1a')](_0x0a9e('0x1b'),_0x5d0880+'-'+_0x1985b6+'/'+_0x22dccb)[_0x0a9e('0x16')](_0x52a03d);}return null;};}function patchUpdates(_0x205fd6){return function(_0x31b1ca){try{jsonpatch[_0x0a9e('0x1c')](_0x31b1ca,_0x205fd6,!![]);}catch(_0x530eb7){return BPromise[_0x0a9e('0x1d')](_0x530eb7);}return _0x31b1ca[_0x0a9e('0x1e')]();};}function saveUpdates(_0x112016,_0x1c696a){return function(_0x105080){if(_0x105080){return _0x105080['update'](_0x112016)[_0x0a9e('0x1f')](function(_0x155cce){return _0x155cce;});}return null;};}function removeEntity(_0x53682f,_0x20f109){return function(_0x5a09ef){if(_0x5a09ef){return _0x5a09ef['destroy']()[_0x0a9e('0x1f')](function(){var _0x432e56=_0x5a09ef[_0x0a9e('0x20')]({'plain':!![]});var _0x30bae6='Pauses';return db[_0x0a9e('0x21')][_0x0a9e('0x22')]({'where':{'type':_0x30bae6,'resourceId':_0x432e56['id']}})[_0x0a9e('0x1f')](function(){return _0x5a09ef;});})[_0x0a9e('0x1f')](function(){_0x53682f[_0x0a9e('0x14')](0xcc)[_0x0a9e('0x15')]();});}};}function handleEntityNotFound(_0x16b1ca,_0x5ea472){return function(_0x59181e){if(!_0x59181e){_0x16b1ca[_0x0a9e('0x13')](0x194);}return _0x59181e;};}function handleError(_0x3a8e58,_0x40c424){_0x40c424=_0x40c424||0x1f4;return function(_0x33161b){logger['error'](_0x33161b[_0x0a9e('0x23')]);if(_0x33161b['name']){delete _0x33161b[_0x0a9e('0x24')];}_0x3a8e58['status'](_0x40c424)[_0x0a9e('0x25')](_0x33161b);};}exports[_0x0a9e('0x26')]=function(_0x25fba9,_0x14433c){var _0x140511={},_0x1538a4={},_0x11c3b6={'count':0x0,'rows':[]};var _0x14de77=db['Pause'][_0x0a9e('0x27')];_0x1538a4[_0x0a9e('0x28')]=_[_0x0a9e('0x29')](_0x14de77);_0x1538a4[_0x0a9e('0x2a')]=_['keys'](_0x25fba9[_0x0a9e('0x2a')]);_0x1538a4[_0x0a9e('0x2b')]=_[_0x0a9e('0x2c')](_0x1538a4[_0x0a9e('0x28')],_0x1538a4[_0x0a9e('0x2a')]);_0x140511[_0x0a9e('0x2d')]=_[_0x0a9e('0x2c')](_0x1538a4[_0x0a9e('0x28')],qs[_0x0a9e('0x2e')](_0x25fba9['query'][_0x0a9e('0x2e')]));_0x140511['attributes']=_0x140511[_0x0a9e('0x2d')][_0x0a9e('0x2f')]?_0x140511[_0x0a9e('0x2d')]:_0x1538a4[_0x0a9e('0x28')];if(!_0x25fba9[_0x0a9e('0x2a')]['hasOwnProperty'](_0x0a9e('0x30'))){_0x140511[_0x0a9e('0x19')]=qs[_0x0a9e('0x19')](_0x25fba9[_0x0a9e('0x2a')][_0x0a9e('0x19')]);_0x140511[_0x0a9e('0x18')]=qs[_0x0a9e('0x18')](_0x25fba9[_0x0a9e('0x2a')]['offset']);}_0x140511[_0x0a9e('0x31')]=qs['sort'](_0x25fba9[_0x0a9e('0x2a')][_0x0a9e('0x32')]);_0x140511[_0x0a9e('0x33')]=qs[_0x0a9e('0x2b')](_['pick'](_0x25fba9[_0x0a9e('0x2a')],_0x1538a4[_0x0a9e('0x2b')]));if(_0x25fba9[_0x0a9e('0x2a')][_0x0a9e('0x34')]){_0x140511['where']=_['merge'](_0x140511[_0x0a9e('0x33')],{'$or':_['map'](_0x14de77,function(_0x24936a){if(_0x24936a[_0x0a9e('0x35')][_0x0a9e('0x36')]!==_0x0a9e('0x37')){var _0x4f41ae={};_0x4f41ae[_0x24936a[_0x0a9e('0x38')]]={'$like':'%'+_0x25fba9[_0x0a9e('0x2a')][_0x0a9e('0x34')]+'%'};return _0x4f41ae;}})});}_0x140511=_['merge']({},_0x140511,_0x25fba9[_0x0a9e('0x39')]);var _0x1a180b={'where':_0x140511[_0x0a9e('0x33')]};return db['Pause']['count'](_0x1a180b)[_0x0a9e('0x1f')](function(_0x40d766){_0x11c3b6['count']=_0x40d766;if(_0x25fba9[_0x0a9e('0x2a')][_0x0a9e('0x3a')]){_0x140511[_0x0a9e('0x3b')]=[{'all':!![]}];}return db[_0x0a9e('0x3c')]['findAll'](_0x140511);})['then'](function(_0x15e37d){_0x11c3b6[_0x0a9e('0x3d')]=_0x15e37d;return _0x11c3b6;})['then'](respondWithFilteredResult(_0x14433c,_0x140511))[_0x0a9e('0x3e')](handleError(_0x14433c,null));};exports[_0x0a9e('0x3f')]=function(_0x1459bb,_0x5b4f5e){var _0x316c8f={'raw':!![],'where':{'id':_0x1459bb[_0x0a9e('0x40')]['id']}},_0x2cfea9={};_0x2cfea9[_0x0a9e('0x28')]=_[_0x0a9e('0x29')](db[_0x0a9e('0x3c')][_0x0a9e('0x27')]);_0x2cfea9[_0x0a9e('0x2a')]=_[_0x0a9e('0x29')](_0x1459bb[_0x0a9e('0x2a')]);_0x2cfea9[_0x0a9e('0x2b')]=_[_0x0a9e('0x2c')](_0x2cfea9[_0x0a9e('0x28')],_0x2cfea9[_0x0a9e('0x2a')]);_0x316c8f[_0x0a9e('0x2d')]=_['intersection'](_0x2cfea9['model'],qs[_0x0a9e('0x2e')](_0x1459bb[_0x0a9e('0x2a')][_0x0a9e('0x2e')]));_0x316c8f[_0x0a9e('0x2d')]=_0x316c8f[_0x0a9e('0x2d')][_0x0a9e('0x2f')]?_0x316c8f[_0x0a9e('0x2d')]:_0x2cfea9[_0x0a9e('0x28')];if(_0x1459bb[_0x0a9e('0x2a')][_0x0a9e('0x3a')]){_0x316c8f[_0x0a9e('0x3b')]=[{'all':!![]}];}_0x316c8f=_[_0x0a9e('0x41')]({},_0x316c8f,_0x1459bb['options']);return db[_0x0a9e('0x3c')][_0x0a9e('0x42')](_0x316c8f)[_0x0a9e('0x1f')](handleEntityNotFound(_0x5b4f5e,null))[_0x0a9e('0x1f')](respondWithResult(_0x5b4f5e,null))[_0x0a9e('0x3e')](handleError(_0x5b4f5e,null));};exports[_0x0a9e('0x43')]=function(_0x21eb86,_0x44dd99){return db['Pause'][_0x0a9e('0x43')](_0x21eb86['body'],{})[_0x0a9e('0x1f')](function(_0x476688){var _0x8d6dd1=_0x21eb86['user'][_0x0a9e('0x20')]({'plain':!![]});if(!_0x8d6dd1)throw new Error(_0x0a9e('0x44'));if(_0x8d6dd1[_0x0a9e('0x45')]===_0x0a9e('0x46')){var _0x45c845=_0x476688[_0x0a9e('0x20')]({'plain':!![]});var _0x45bf7f='Pauses';return db[_0x0a9e('0x47')][_0x0a9e('0x42')]({'where':{'name':_0x45bf7f,'userProfileId':_0x8d6dd1[_0x0a9e('0x48')]},'raw':!![]})[_0x0a9e('0x1f')](function(_0x409789){if(_0x409789&&_0x409789[_0x0a9e('0x49')]===0x0){return db[_0x0a9e('0x21')][_0x0a9e('0x43')]({'name':_0x45c845[_0x0a9e('0x24')],'resourceId':_0x45c845['id'],'type':_0x409789['name'],'sectionId':_0x409789['id']},{})[_0x0a9e('0x1f')](function(){return _0x476688;});}else{return _0x476688;}})[_0x0a9e('0x3e')](function(_0x4f7240){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x4f7240);throw _0x4f7240;});}return _0x476688;})[_0x0a9e('0x1f')](respondWithResult(_0x44dd99,0xc9))[_0x0a9e('0x3e')](handleError(_0x44dd99,null));};exports[_0x0a9e('0x4a')]=function(_0x11545a,_0x61bb17){if(_0x11545a[_0x0a9e('0x4b')]['id']){delete _0x11545a[_0x0a9e('0x4b')]['id'];}return db[_0x0a9e('0x3c')]['find']({'where':{'id':_0x11545a['params']['id']}})['then'](handleEntityNotFound(_0x61bb17,null))[_0x0a9e('0x1f')](saveUpdates(_0x11545a[_0x0a9e('0x4b')],null))[_0x0a9e('0x1f')](respondWithResult(_0x61bb17,null))['catch'](handleError(_0x61bb17,null));};exports[_0x0a9e('0x22')]=function(_0x161aa7,_0x53d113){return db['Pause'][_0x0a9e('0x42')]({'where':{'id':_0x161aa7['params']['id']}})[_0x0a9e('0x1f')](handleEntityNotFound(_0x53d113,null))['then'](removeEntity(_0x53d113,null))[_0x0a9e('0x3e')](handleError(_0x53d113,null));};
\ No newline at end of file
index 6b57d2e..f4e485b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb1c3=['./pause.attributes','exports','tools_pauses','lodash','api','moment','bluebird','request-promise','path','rimraf','../../config/environment'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xb1c3,0x14d));var _0x3b1c=function(_0x2b48a0,_0x173153){_0x2b48a0=_0x2b48a0-0x0;var _0x5c1015=_0xb1c3[_0x2b48a0];return _0x5c1015;};'use strict';var _=require(_0x3b1c('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x3b1c('0x1'));var moment=require(_0x3b1c('0x2'));var BPromise=require(_0x3b1c('0x3'));var rp=require(_0x3b1c('0x4'));var fs=require('fs');var path=require(_0x3b1c('0x5'));var rimraf=require(_0x3b1c('0x6'));var config=require(_0x3b1c('0x7'));var attributes=require(_0x3b1c('0x8'));module[_0x3b1c('0x9')]=function(_0x246c66,_0xb43c8d){return _0x246c66['define']('Pause',attributes,{'tableName':_0x3b1c('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6e2d=['../../config/logger','moment','request-promise','../../config/environment','exports','define','Pause','tools_pauses','lodash','util'];(function(_0x42cae2,_0x284ef8){var _0x5f256f=function(_0x41abc8){while(--_0x41abc8){_0x42cae2['push'](_0x42cae2['shift']());}};_0x5f256f(++_0x284ef8);}(_0x6e2d,0x8a));var _0xd6e2=function(_0x19157f,_0x18bb14){_0x19157f=_0x19157f-0x0;var _0x56eaf8=_0x6e2d[_0x19157f];return _0x56eaf8;};'use strict';var _=require(_0xd6e2('0x0'));var util=require(_0xd6e2('0x1'));var logger=require(_0xd6e2('0x2'))('api');var moment=require(_0xd6e2('0x3'));var BPromise=require('bluebird');var rp=require(_0xd6e2('0x4'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0xd6e2('0x5'));var attributes=require('./pause.attributes');module[_0xd6e2('0x6')]=function(_0x390464,_0x3f2561){return _0x390464[_0xd6e2('0x7')](_0xd6e2('0x8'),attributes,{'tableName':_0xd6e2('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 231919a..66c3828 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa1f1=['moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','Pause,\x20%s,\x20%s','request\x20sent','Pause,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','ShowPause','options','raw','where','attributes','include','model','map','then','util'];(function(_0xc3d6c5,_0x7bd8b3){var _0x104925=function(_0x5f198e){while(--_0x5f198e){_0xc3d6c5['push'](_0xc3d6c5['shift']());}};_0x104925(++_0x7bd8b3);}(_0xa1f1,0x7b));var _0x1a1f=function(_0xe39824,_0xbdf61f){_0xe39824=_0xe39824-0x0;var _0x4bc31e=_0xa1f1[_0xe39824];return _0x4bc31e;};'use strict';var _=require('lodash');var util=require(_0x1a1f('0x0'));var moment=require(_0x1a1f('0x1'));var BPromise=require(_0x1a1f('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x1a1f('0x3'))['db'];var utils=require(_0x1a1f('0x4'));var logger=require(_0x1a1f('0x5'))(_0x1a1f('0x6'));var config=require(_0x1a1f('0x7'));var jayson=require(_0x1a1f('0x8'));var client=jayson[_0x1a1f('0x9')][_0x1a1f('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x187398,_0x3ec84e,_0x536442){return new BPromise(function(_0x1e608b,_0x8ecdd3){return client[_0x1a1f('0xb')](_0x187398,_0x536442)['then'](function(_0x42c485){logger[_0x1a1f('0xc')](_0x1a1f('0xd'),_0x3ec84e,_0x1a1f('0xe'));logger['debug'](_0x1a1f('0xf'),_0x3ec84e,_0x1a1f('0xe'),JSON[_0x1a1f('0x10')](_0x42c485));if(_0x42c485[_0x1a1f('0x11')]){if(_0x42c485[_0x1a1f('0x11')][_0x1a1f('0x12')]===0x1f4){logger[_0x1a1f('0x11')]('Pause,\x20%s,\x20%s',_0x3ec84e,_0x42c485[_0x1a1f('0x11')][_0x1a1f('0x13')]);return _0x8ecdd3(_0x42c485[_0x1a1f('0x11')][_0x1a1f('0x13')]);}logger[_0x1a1f('0x11')](_0x1a1f('0xd'),_0x3ec84e,_0x42c485[_0x1a1f('0x11')][_0x1a1f('0x13')]);return _0x1e608b(_0x42c485[_0x1a1f('0x11')][_0x1a1f('0x13')]);}else{logger['info'](_0x1a1f('0xd'),_0x3ec84e,_0x1a1f('0xe'));_0x1e608b(_0x42c485[_0x1a1f('0x14')][_0x1a1f('0x13')]);}})[_0x1a1f('0x15')](function(_0x1f878d){logger['error']('Pause,\x20%s,\x20%s',_0x3ec84e,_0x1f878d);_0x8ecdd3(_0x1f878d);});});}exports[_0x1a1f('0x16')]=function(_0x44d4b8){var _0x593d42=this;return new Promise(function(_0x65398b,_0x1a0bb9){return db['Pause']['find']({'raw':_0x44d4b8[_0x1a1f('0x17')]?_0x44d4b8[_0x1a1f('0x17')][_0x1a1f('0x18')]===undefined?!![]:![]:!![],'where':_0x44d4b8[_0x1a1f('0x17')]?_0x44d4b8['options'][_0x1a1f('0x19')]||null:null,'attributes':_0x44d4b8[_0x1a1f('0x17')]?_0x44d4b8[_0x1a1f('0x17')][_0x1a1f('0x1a')]||null:null,'include':_0x44d4b8['options']?_0x44d4b8[_0x1a1f('0x17')][_0x1a1f('0x1b')]?_['map'](_0x44d4b8[_0x1a1f('0x17')][_0x1a1f('0x1b')],function(_0x469176){return{'model':db[_0x469176[_0x1a1f('0x1c')]],'as':_0x469176['as'],'attributes':_0x469176['attributes'],'include':_0x469176[_0x1a1f('0x1b')]?_['map'](_0x469176[_0x1a1f('0x1b')],function(_0x39c629){return{'model':db[_0x39c629[_0x1a1f('0x1c')]],'as':_0x39c629['as'],'attributes':_0x39c629[_0x1a1f('0x1a')],'include':_0x39c629[_0x1a1f('0x1b')]?_[_0x1a1f('0x1d')](_0x39c629['include'],function(_0x418e71){return{'model':db[_0x418e71[_0x1a1f('0x1c')]],'as':_0x418e71['as'],'attributes':_0x418e71[_0x1a1f('0x1a')]};}):[]};}):[]};}):[]:[]})[_0x1a1f('0x1e')](function(_0x21f5ba){logger[_0x1a1f('0xc')]('ShowPause',_0x44d4b8);logger['debug'](_0x1a1f('0x16'),_0x44d4b8,JSON[_0x1a1f('0x10')](_0x21f5ba));_0x65398b(_0x21f5ba);})[_0x1a1f('0x15')](function(_0x4e1012){logger[_0x1a1f('0x11')](_0x1a1f('0x16'),_0x4e1012['message'],_0x44d4b8);_0x1a0bb9(_0x593d42['error'](0x1f4,_0x4e1012[_0x1a1f('0x13')]));});});};
\ No newline at end of file
+var _0x0096=['debug','Pause,\x20%s,\x20%s,\x20%s','error','message','result','catch','Pause','find','options','raw','where','map','include','model','attributes','ShowPause','stringify','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','client','http','then','info','Pause,\x20%s,\x20%s','request\x20sent'];(function(_0x452c08,_0x54dbd2){var _0xcffae=function(_0x497855){while(--_0x497855){_0x452c08['push'](_0x452c08['shift']());}};_0xcffae(++_0x54dbd2);}(_0x0096,0xd1));var _0x6009=function(_0x3f8743,_0x33973f){_0x3f8743=_0x3f8743-0x0;var _0x1f844c=_0x0096[_0x3f8743];return _0x1f844c;};'use strict';var _=require(_0x6009('0x0'));var util=require(_0x6009('0x1'));var moment=require(_0x6009('0x2'));var BPromise=require(_0x6009('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x6009('0x4'));var db=require(_0x6009('0x5'))['db'];var utils=require(_0x6009('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0x6009('0x7'));var jayson=require(_0x6009('0x8'));var client=jayson[_0x6009('0x9')][_0x6009('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x48aa56,_0x58b1c4,_0x50a06f){return new BPromise(function(_0x20b8a8,_0x315a11){return client['request'](_0x48aa56,_0x50a06f)[_0x6009('0xb')](function(_0x5b6f1a){logger[_0x6009('0xc')](_0x6009('0xd'),_0x58b1c4,_0x6009('0xe'));logger[_0x6009('0xf')](_0x6009('0x10'),_0x58b1c4,_0x6009('0xe'),JSON['stringify'](_0x5b6f1a));if(_0x5b6f1a[_0x6009('0x11')]){if(_0x5b6f1a[_0x6009('0x11')]['code']===0x1f4){logger[_0x6009('0x11')](_0x6009('0xd'),_0x58b1c4,_0x5b6f1a[_0x6009('0x11')][_0x6009('0x12')]);return _0x315a11(_0x5b6f1a[_0x6009('0x11')][_0x6009('0x12')]);}logger['error']('Pause,\x20%s,\x20%s',_0x58b1c4,_0x5b6f1a['error'][_0x6009('0x12')]);return _0x20b8a8(_0x5b6f1a[_0x6009('0x11')]['message']);}else{logger[_0x6009('0xc')](_0x6009('0xd'),_0x58b1c4,'request\x20sent');_0x20b8a8(_0x5b6f1a[_0x6009('0x13')][_0x6009('0x12')]);}})[_0x6009('0x14')](function(_0xc784e4){logger[_0x6009('0x11')](_0x6009('0xd'),_0x58b1c4,_0xc784e4);_0x315a11(_0xc784e4);});});}exports['ShowPause']=function(_0x5e8c8c){var _0x46abaf=this;return new Promise(function(_0x3e38ed,_0x9fa0ca){return db[_0x6009('0x15')][_0x6009('0x16')]({'raw':_0x5e8c8c[_0x6009('0x17')]?_0x5e8c8c[_0x6009('0x17')][_0x6009('0x18')]===undefined?!![]:![]:!![],'where':_0x5e8c8c[_0x6009('0x17')]?_0x5e8c8c[_0x6009('0x17')][_0x6009('0x19')]||null:null,'attributes':_0x5e8c8c['options']?_0x5e8c8c[_0x6009('0x17')]['attributes']||null:null,'include':_0x5e8c8c['options']?_0x5e8c8c['options']['include']?_[_0x6009('0x1a')](_0x5e8c8c[_0x6009('0x17')][_0x6009('0x1b')],function(_0x1e76d4){return{'model':db[_0x1e76d4['model']],'as':_0x1e76d4['as'],'attributes':_0x1e76d4['attributes'],'include':_0x1e76d4['include']?_[_0x6009('0x1a')](_0x1e76d4['include'],function(_0x5f2923){return{'model':db[_0x5f2923[_0x6009('0x1c')]],'as':_0x5f2923['as'],'attributes':_0x5f2923['attributes'],'include':_0x5f2923[_0x6009('0x1b')]?_[_0x6009('0x1a')](_0x5f2923[_0x6009('0x1b')],function(_0x2b09df){return{'model':db[_0x2b09df[_0x6009('0x1c')]],'as':_0x2b09df['as'],'attributes':_0x2b09df[_0x6009('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x6009('0xb')](function(_0xc83bad){logger[_0x6009('0xc')](_0x6009('0x1e'),_0x5e8c8c);logger[_0x6009('0xf')](_0x6009('0x1e'),_0x5e8c8c,JSON[_0x6009('0x1f')](_0xc83bad));_0x3e38ed(_0xc83bad);})[_0x6009('0x14')](function(_0x21dcc5){logger['error'](_0x6009('0x1e'),_0x21dcc5[_0x6009('0x12')],_0x5e8c8c);_0x9fa0ca(_0x46abaf[_0x6009('0x11')](0x1f4,_0x21dcc5[_0x6009('0x12')]));});});};
\ No newline at end of file
index c77e9aa..dd22282 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe151=['webhookGet','isAuthenticated','download','diskStorage','root','server/files/plugins','replace','format','basename','originalname','extname','now','post','single','file','upload','/webhook','put','/:id','update','delete','multer','util','connect-timeout','express','../../components/auth/service','../../components/interaction/service','./plugin.controller','get'];(function(_0x189d3c,_0x5efebf){var _0x485959=function(_0x1161da){while(--_0x1161da){_0x189d3c['push'](_0x189d3c['shift']());}};_0x485959(++_0x5efebf);}(_0xe151,0x154));var _0x1e15=function(_0x4df7be,_0x174cea){_0x4df7be=_0x4df7be-0x0;var _0x3c15a4=_0xe151[_0x4df7be];return _0x3c15a4;};'use strict';var multer=require(_0x1e15('0x0'));var util=require(_0x1e15('0x1'));var path=require('path');var timeout=require(_0x1e15('0x2'));var express=require(_0x1e15('0x3'));var router=express['Router']();var auth=require(_0x1e15('0x4'));var interaction=require(_0x1e15('0x5'));var config=require('../../config/environment');var controller=require(_0x1e15('0x6'));router[_0x1e15('0x7')]('/',auth['isAuthenticated'](),controller['index']);router[_0x1e15('0x7')]('/webhook',controller[_0x1e15('0x8')]);router[_0x1e15('0x7')]('/:id',auth[_0x1e15('0x9')](),controller['show']);router['get']('/:id/download',auth['isAuthenticated'](),controller[_0x1e15('0xa')]);var upload=multer({'storage':multer[_0x1e15('0xb')]({'destination':function(_0x35cd21,_0x36e83a,_0x4b8e0e){_0x4b8e0e(null,path['join'](config[_0x1e15('0xc')],_0x1e15('0xd')));},'filename':function(_0x1a06a3,_0x351f87,_0x5974e8){_0x351f87['originalname']=_0x351f87['originalname'][_0x1e15('0xe')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x5974e8(null,util[_0x1e15('0xf')]('%s-%s%s',path[_0x1e15('0x10')](_0x351f87[_0x1e15('0x11')],path[_0x1e15('0x12')](_0x351f87[_0x1e15('0x11')])),Date[_0x1e15('0x13')](),path[_0x1e15('0x12')](_0x351f87[_0x1e15('0x11')])));}})});router[_0x1e15('0x14')]('/',upload[_0x1e15('0x15')](_0x1e15('0x16')),controller[_0x1e15('0x17')]);router[_0x1e15('0x14')](_0x1e15('0x18'),controller['webhookPost']);router[_0x1e15('0x19')](_0x1e15('0x1a'),auth['isAuthenticated'](),controller[_0x1e15('0x1b')]);router[_0x1e15('0x1c')](_0x1e15('0x1a'),auth[_0x1e15('0x9')](),controller[_0x1e15('0x1c')]);module['exports']=router;
\ No newline at end of file
+var _0x632c=['basename','extname','now','single','upload','post','/webhook','webhookPost','put','/:id','update','delete','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','isAuthenticated','get','show','/:id/download','download','diskStorage','join','root','server/files/plugins','originalname','replace','format','%s-%s%s'];(function(_0x4670cb,_0x3ed3b8){var _0x2af1e6=function(_0x5376f6){while(--_0x5376f6){_0x4670cb['push'](_0x4670cb['shift']());}};_0x2af1e6(++_0x3ed3b8);}(_0x632c,0x13f));var _0xc632=function(_0x2c6b66,_0x4d126a){_0x2c6b66=_0x2c6b66-0x0;var _0x2c77f4=_0x632c[_0x2c6b66];return _0x2c77f4;};'use strict';var multer=require(_0xc632('0x0'));var util=require('util');var path=require(_0xc632('0x1'));var timeout=require(_0xc632('0x2'));var express=require(_0xc632('0x3'));var router=express[_0xc632('0x4')]();var auth=require(_0xc632('0x5'));var interaction=require(_0xc632('0x6'));var config=require(_0xc632('0x7'));var controller=require('./plugin.controller');router['get']('/',auth[_0xc632('0x8')](),controller['index']);router[_0xc632('0x9')]('/webhook',controller['webhookGet']);router[_0xc632('0x9')]('/:id',auth[_0xc632('0x8')](),controller[_0xc632('0xa')]);router[_0xc632('0x9')](_0xc632('0xb'),auth[_0xc632('0x8')](),controller[_0xc632('0xc')]);var upload=multer({'storage':multer[_0xc632('0xd')]({'destination':function(_0x14d52e,_0x178421,_0x2cb908){_0x2cb908(null,path[_0xc632('0xe')](config[_0xc632('0xf')],_0xc632('0x10')));},'filename':function(_0x9bb63e,_0x273a19,_0x429462){_0x273a19[_0xc632('0x11')]=_0x273a19[_0xc632('0x11')][_0xc632('0x12')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x429462(null,util[_0xc632('0x13')](_0xc632('0x14'),path[_0xc632('0x15')](_0x273a19[_0xc632('0x11')],path[_0xc632('0x16')](_0x273a19[_0xc632('0x11')])),Date[_0xc632('0x17')](),path['extname'](_0x273a19[_0xc632('0x11')])));}})});router['post']('/',upload[_0xc632('0x18')]('file'),controller[_0xc632('0x19')]);router[_0xc632('0x1a')](_0xc632('0x1b'),controller[_0xc632('0x1c')]);router[_0xc632('0x1d')](_0xc632('0x1e'),auth[_0xc632('0x8')](),controller[_0xc632('0x1f')]);router['delete'](_0xc632('0x1e'),auth[_0xc632('0x8')](),controller[_0xc632('0x20')]);module[_0xc632('0x21')]=router;
\ No newline at end of file
index 42efe4a..b8f9037 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x23b4=['always','never','Indicates\x20whether\x20to\x20display\x20the\x20plugin\x20in\x20the\x20sidebar.','exports','STRING','script','TEXT','The\x20physical\x20path\x20where\x20the\x20plugin\x20is\x20stored.','BOOLEAN','Indicates\x20whether\x20the\x20plugin\x20is\x20installed.\x20Updated\x20when\x20the\x20plugin\x20is\x20installed/uninstalled.','adminOnly'];(function(_0x344f01,_0x2815ee){var _0x92719a=function(_0xf2560c){while(--_0xf2560c){_0x344f01['push'](_0x344f01['shift']());}};_0x92719a(++_0x2815ee);}(_0x23b4,0x16e));var _0x423b=function(_0x57b740,_0x3a8814){_0x57b740=_0x57b740-0x0;var _0x576e93=_0x23b4[_0x57b740];return _0x576e93;};'use strict';var Sequelize=require('sequelize');module[_0x423b('0x0')]={'name':{'type':Sequelize[_0x423b('0x1')]},'type':{'type':Sequelize['ENUM']('html',_0x423b('0x2'))},'description':{'type':Sequelize[_0x423b('0x3')]},'version':{'type':Sequelize[_0x423b('0x3')]},'path':{'type':Sequelize[_0x423b('0x1')],'comment':_0x423b('0x4')},'active':{'type':Sequelize[_0x423b('0x5')],'defaultValue':0x0,'comment':_0x423b('0x6')},'sidebar':{'type':Sequelize['ENUM'](_0x423b('0x7'),'agentOnly',_0x423b('0x8'),_0x423b('0x9')),'defaultValue':_0x423b('0x8'),'comment':_0x423b('0xa')},'icon':{'type':Sequelize['STRING']},'adminUrl':{'type':Sequelize[_0x423b('0x1')]},'agentUrl':{'type':Sequelize['STRING']},'scriptName':{'type':Sequelize[_0x423b('0x1')]},'scriptPath':{'type':Sequelize[_0x423b('0x1')]}};
\ No newline at end of file
+var _0x4252=['The\x20physical\x20path\x20where\x20the\x20plugin\x20is\x20stored.','BOOLEAN','Indicates\x20whether\x20the\x20plugin\x20is\x20installed.\x20Updated\x20when\x20the\x20plugin\x20is\x20installed/uninstalled.','adminOnly','agentOnly','always','never','sequelize','exports','STRING','ENUM','html','TEXT'];(function(_0x4034f7,_0x1a5567){var _0x466788=function(_0x47db8e){while(--_0x47db8e){_0x4034f7['push'](_0x4034f7['shift']());}};_0x466788(++_0x1a5567);}(_0x4252,0x89));var _0x2425=function(_0x384aa2,_0x1513ed){_0x384aa2=_0x384aa2-0x0;var _0x2d6184=_0x4252[_0x384aa2];return _0x2d6184;};'use strict';var Sequelize=require(_0x2425('0x0'));module[_0x2425('0x1')]={'name':{'type':Sequelize[_0x2425('0x2')]},'type':{'type':Sequelize[_0x2425('0x3')](_0x2425('0x4'),'script')},'description':{'type':Sequelize['TEXT']},'version':{'type':Sequelize[_0x2425('0x5')]},'path':{'type':Sequelize[_0x2425('0x2')],'comment':_0x2425('0x6')},'active':{'type':Sequelize[_0x2425('0x7')],'defaultValue':0x0,'comment':_0x2425('0x8')},'sidebar':{'type':Sequelize['ENUM'](_0x2425('0x9'),_0x2425('0xa'),_0x2425('0xb'),_0x2425('0xc')),'defaultValue':'always','comment':'Indicates\x20whether\x20to\x20display\x20the\x20plugin\x20in\x20the\x20sidebar.'},'icon':{'type':Sequelize[_0x2425('0x2')]},'adminUrl':{'type':Sequelize[_0x2425('0x2')]},'agentUrl':{'type':Sequelize[_0x2425('0x2')]},'scriptName':{'type':Sequelize['STRING']},'scriptPath':{'type':Sequelize[_0x2425('0x2')]}};
\ No newline at end of file
index d5a9715..f90a8e1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ffe=['offset','set','Content-Range','reject','save','update','then','destroy','get','sendStatus','stack','name','send','Plugin','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','filter','merge','type','key','VIRTUAL','field','count','includeAll','include','findAll','rows','catch','show','params','options','find','root','server/files/plugins','format','basename','createWriteStream','zip','warning','code','ENOENT','Sequelize','Error\x20while\x20generating\x20the\x20zip\x20archive','error','pipe','glob','**/*','join','dirname','node_modules/**/*','attachments/**/*','close','existsSync','Error','Plugin\x20not\x20found','%s.zip','Error\x20while\x20downloading\x20the\x20plugin','info','Download\x20completed','Temporary\x20file\x20removed','upload','file','filename','chmodSync','0777','readdirSync','Invalid\x20plugin\x20structure','isFile','isDirectory','some','manifest.json','Plugin\x20manifest\x20missing','readFileSync','parse','undefined','Invalid\x20manifest:\x20name\x20missing','version','Invalid\x20manifest:\x20version\x20not\x20specified','parameters','Invalid\x20manifest:\x20parameters\x20missing','html','views','admin','agent','Invalid\x20manifest:\x20no\x20view\x20specified','Invalid\x20manifest:\x20invalid\x20type','description','sidebar','always','icon','icon-apps','test','plugins','Warning:\x20agent\x20view\x20not\x20specified','script','create','body','userProfileId','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','UserProfileSection','Plugins','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','unlinkSync','Zip\x20archive\x20removed','Extracted\x20folder\x20removed','delete','webhookGet','port','hostname','encoding','method','%s%s','headers','content-length','content-type','endsWith','download','statusCode','webhookPost','resolve','\x27PATH\x27\x20parameter\x20not\x20specified','\x27PORT\x27\x20parameter\x20not\x20specified','html-pdf','eml-format','rimraf','zip-dir','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','papaparse','extract-zip','archiver','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./plugin.socket','register','status','end','json'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0x4ffe,0x135));var _0xe4ff=function(_0x221ba2,_0x79208){_0x221ba2=_0x221ba2-0x0;var _0x47d08e=_0x4ffe[_0x221ba2];return _0x47d08e;};'use strict';var pdf=require(_0xe4ff('0x0'));var emlformat=require(_0xe4ff('0x1'));var rimraf=require(_0xe4ff('0x2'));var zipdir=require(_0xe4ff('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xe4ff('0x4'));var Mustache=require('mustache');var util=require(_0xe4ff('0x5'));var path=require(_0xe4ff('0x6'));var sox=require(_0xe4ff('0x7'));var csv=require(_0xe4ff('0x8'));var ejs=require(_0xe4ff('0x9'));var fs=require('fs');var _=require(_0xe4ff('0xa'));var squel=require(_0xe4ff('0xb'));var crypto=require(_0xe4ff('0xc'));var jsforce=require(_0xe4ff('0xd'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xe4ff('0xe'));var extract=require(_0xe4ff('0xf'));var rimraf=require('rimraf');var archiver=require(_0xe4ff('0x10'));var Redis=require(_0xe4ff('0x11'));var authService=require(_0xe4ff('0x12'));var qs=require(_0xe4ff('0x13'));var hardwareService=require(_0xe4ff('0x14'));var logger=require(_0xe4ff('0x15'))(_0xe4ff('0x16'));var utils=require(_0xe4ff('0x17'));var config=require(_0xe4ff('0x18'));var db=require(_0xe4ff('0x19'))['db'];config[_0xe4ff('0x1a')]=_[_0xe4ff('0x1b')](config[_0xe4ff('0x1a')],{'host':_0xe4ff('0x1c'),'port':0x18eb});var socket=require(_0xe4ff('0x1d'))(new Redis(config[_0xe4ff('0x1a')]));require(_0xe4ff('0x1e'))[_0xe4ff('0x1f')](socket);function respondWithStatusCode(_0x5a288a,_0x5751c8){_0x5751c8=_0x5751c8||0xcc;return function(_0x36523f){if(_0x36523f){return _0x5a288a['sendStatus'](_0x5751c8);}return _0x5a288a[_0xe4ff('0x20')](_0x5751c8)[_0xe4ff('0x21')]();};}function respondWithResult(_0x4d1d88,_0x3d738d){_0x3d738d=_0x3d738d||0xc8;return function(_0x42a08c){if(_0x42a08c){return _0x4d1d88['status'](_0x3d738d)[_0xe4ff('0x22')](_0x42a08c);}};}function respondWithFilteredResult(_0x407351,_0x22c0c6){return function(_0x2b05dd){if(_0x2b05dd){var _0x537699=_0x2b05dd['count'],_0x53a1f5=_0x22c0c6[_0xe4ff('0x23')],_0x261928=_0x22c0c6['offset']+_0x22c0c6['limit'],_0x5a784f;if(_0x261928>=_0x537699){_0x261928=_0x537699;_0x5a784f=0xc8;}else{_0x5a784f=0xce;}_0x407351['status'](_0x5a784f);return _0x407351[_0xe4ff('0x24')](_0xe4ff('0x25'),_0x53a1f5+'-'+_0x261928+'/'+_0x537699)['json'](_0x2b05dd);}return null;};}function patchUpdates(_0x5ecfe8){return function(_0x36689c){try{jsonpatch['apply'](_0x36689c,_0x5ecfe8,!![]);}catch(_0x5d654e){return BPromise[_0xe4ff('0x26')](_0x5d654e);}return _0x36689c[_0xe4ff('0x27')]();};}function saveUpdates(_0x4cd45e,_0x2046fe){return function(_0x357d09){if(_0x357d09){return _0x357d09[_0xe4ff('0x28')](_0x4cd45e)[_0xe4ff('0x29')](function(_0x3d31d6){return _0x3d31d6;});}return null;};}function removeEntity(_0x23063f,_0x26e213){return function(_0x42f9c0){if(_0x42f9c0){return _0x42f9c0[_0xe4ff('0x2a')]()[_0xe4ff('0x29')](function(){var _0xa1f49b=_0x42f9c0[_0xe4ff('0x2b')]({'plain':!![]});var _0x154d66='Plugins';return db['UserProfileResource'][_0xe4ff('0x2a')]({'where':{'type':_0x154d66,'resourceId':_0xa1f49b['id']}})[_0xe4ff('0x29')](function(){return _0x42f9c0;});})[_0xe4ff('0x29')](function(){_0x23063f['status'](0xcc)[_0xe4ff('0x21')]();});}};}function handleEntityNotFound(_0x5d36d4,_0x3c37d7){return function(_0x38010a){if(!_0x38010a){_0x5d36d4[_0xe4ff('0x2c')](0x194);}return _0x38010a;};}function handleError(_0x100f89,_0x233bb8){_0x233bb8=_0x233bb8||0x1f4;return function(_0x1be9ad){logger['error'](_0x1be9ad[_0xe4ff('0x2d')]);if(_0x1be9ad[_0xe4ff('0x2e')]){delete _0x1be9ad[_0xe4ff('0x2e')];}_0x100f89[_0xe4ff('0x20')](_0x233bb8)[_0xe4ff('0x2f')](_0x1be9ad);};}exports['index']=function(_0x2e1623,_0x4543aa){var _0x39471b={},_0xa4d424={},_0x52510c={'count':0x0,'rows':[]};var _0x2cb386=db[_0xe4ff('0x30')][_0xe4ff('0x31')];_0xa4d424[_0xe4ff('0x32')]=_[_0xe4ff('0x33')](_0x2cb386);_0xa4d424[_0xe4ff('0x34')]=_[_0xe4ff('0x33')](_0x2e1623['query']);_0xa4d424[_0xe4ff('0x35')]=_[_0xe4ff('0x36')](_0xa4d424[_0xe4ff('0x32')],_0xa4d424[_0xe4ff('0x34')]);_0x39471b[_0xe4ff('0x37')]=_[_0xe4ff('0x36')](_0xa4d424[_0xe4ff('0x32')],qs[_0xe4ff('0x38')](_0x2e1623[_0xe4ff('0x34')][_0xe4ff('0x38')]));_0x39471b[_0xe4ff('0x37')]=_0x39471b['attributes'][_0xe4ff('0x39')]?_0x39471b[_0xe4ff('0x37')]:_0xa4d424[_0xe4ff('0x32')];if(!_0x2e1623[_0xe4ff('0x34')][_0xe4ff('0x3a')](_0xe4ff('0x3b'))){_0x39471b[_0xe4ff('0x3c')]=qs['limit'](_0x2e1623['query'][_0xe4ff('0x3c')]);_0x39471b[_0xe4ff('0x23')]=qs[_0xe4ff('0x23')](_0x2e1623[_0xe4ff('0x34')][_0xe4ff('0x23')]);}_0x39471b['order']=qs[_0xe4ff('0x3d')](_0x2e1623[_0xe4ff('0x34')][_0xe4ff('0x3d')]);_0x39471b[_0xe4ff('0x3e')]=qs[_0xe4ff('0x35')](_['pick'](_0x2e1623[_0xe4ff('0x34')],_0xa4d424['filters']));if(_0x2e1623[_0xe4ff('0x34')][_0xe4ff('0x3f')]){_0x39471b[_0xe4ff('0x3e')]=_[_0xe4ff('0x40')](_0x39471b[_0xe4ff('0x3e')],{'$or':_['map'](_0x2cb386,function(_0x43a65b){if(_0x43a65b[_0xe4ff('0x41')][_0xe4ff('0x42')]!==_0xe4ff('0x43')){var _0x542f4a={};_0x542f4a[_0x43a65b[_0xe4ff('0x44')]]={'$like':'%'+_0x2e1623[_0xe4ff('0x34')][_0xe4ff('0x3f')]+'%'};return _0x542f4a;}})});}_0x39471b=_[_0xe4ff('0x40')]({},_0x39471b,_0x2e1623['options']);var _0x95f1fc={'where':_0x39471b[_0xe4ff('0x3e')]};return db[_0xe4ff('0x30')][_0xe4ff('0x45')](_0x95f1fc)[_0xe4ff('0x29')](function(_0x5927f0){_0x52510c['count']=_0x5927f0;if(_0x2e1623[_0xe4ff('0x34')][_0xe4ff('0x46')]){_0x39471b[_0xe4ff('0x47')]=[{'all':!![]}];}return db['Plugin'][_0xe4ff('0x48')](_0x39471b);})[_0xe4ff('0x29')](function(_0x71f3da){_0x52510c[_0xe4ff('0x49')]=_0x71f3da;return _0x52510c;})[_0xe4ff('0x29')](respondWithFilteredResult(_0x4543aa,_0x39471b))[_0xe4ff('0x4a')](handleError(_0x4543aa,null));};exports[_0xe4ff('0x4b')]=function(_0x96b394,_0x4de2c1){var _0x172fe7={'raw':!![],'where':{'id':_0x96b394[_0xe4ff('0x4c')]['id']}},_0x4fafff={};_0x4fafff['model']=_[_0xe4ff('0x33')](db['Plugin'][_0xe4ff('0x31')]);_0x4fafff['query']=_[_0xe4ff('0x33')](_0x96b394[_0xe4ff('0x34')]);_0x4fafff[_0xe4ff('0x35')]=_['intersection'](_0x4fafff[_0xe4ff('0x32')],_0x4fafff['query']);_0x172fe7['attributes']=_['intersection'](_0x4fafff[_0xe4ff('0x32')],qs['fields'](_0x96b394[_0xe4ff('0x34')][_0xe4ff('0x38')]));_0x172fe7['attributes']=_0x172fe7[_0xe4ff('0x37')][_0xe4ff('0x39')]?_0x172fe7[_0xe4ff('0x37')]:_0x4fafff['model'];if(_0x96b394[_0xe4ff('0x34')]['includeAll']){_0x172fe7[_0xe4ff('0x47')]=[{'all':!![]}];}_0x172fe7=_['merge']({},_0x172fe7,_0x96b394[_0xe4ff('0x4d')]);return db[_0xe4ff('0x30')]['find'](_0x172fe7)['then'](handleEntityNotFound(_0x4de2c1,null))[_0xe4ff('0x29')](respondWithResult(_0x4de2c1,null))[_0xe4ff('0x4a')](handleError(_0x4de2c1,null));};exports['download']=function(_0x1cb03c,_0x335f0f,_0x10867f){return db[_0xe4ff('0x30')][_0xe4ff('0x4e')]({'where':{'id':_0x1cb03c[_0xe4ff('0x4c')]['id']},'attributes':[_0xe4ff('0x2e'),_0xe4ff('0x6')],'raw':!![]})['then'](handleEntityNotFound(_0x335f0f,null))[_0xe4ff('0x29')](function(_0x247ee5){if(_0x247ee5){var _0x117215=path['join'](config[_0xe4ff('0x4f')],_0xe4ff('0x50'),util[_0xe4ff('0x51')]('%s.zip',path[_0xe4ff('0x52')](_0x247ee5[_0xe4ff('0x6')])));var _0x90283c=fs[_0xe4ff('0x53')](_0x117215);var _0x41b9f2=archiver(_0xe4ff('0x54'),{'zlib':{'level':0x9}});_0x41b9f2['on'](_0xe4ff('0x55'),function(_0x2ce7e2){if(_0x2ce7e2[_0xe4ff('0x56')]===_0xe4ff('0x57')){logger['error'](_0x2ce7e2);}else{throw new db[(_0xe4ff('0x58'))]['Error'](_0xe4ff('0x59'));}});_0x41b9f2['on'](_0xe4ff('0x5a'),function(_0x20e8b1){throw new db[(_0xe4ff('0x58'))]['Error']('Error\x20while\x20generating\x20the\x20zip\x20archive');});_0x41b9f2[_0xe4ff('0x5b')](_0x90283c);_0x41b9f2[_0xe4ff('0x5c')](_0xe4ff('0x5d'),{'cwd':path[_0xe4ff('0x5e')](config[_0xe4ff('0x4f')],_0xe4ff('0x50'),path[_0xe4ff('0x5f')](_0x247ee5['path'])),'ignore':[path[_0xe4ff('0x5e')](path[_0xe4ff('0x52')](_0x247ee5[_0xe4ff('0x6')]),_0xe4ff('0x60')),path[_0xe4ff('0x5e')](path['basename'](_0x247ee5[_0xe4ff('0x6')]),_0xe4ff('0x61'))],'nodir':!![]})['finalize']();_0x90283c['on'](_0xe4ff('0x62'),function(){if(!fs[_0xe4ff('0x63')](_0x117215)){throw new db[(_0xe4ff('0x58'))][(_0xe4ff('0x64'))](_0xe4ff('0x65'));}return _0x335f0f['download'](_0x117215,util[_0xe4ff('0x51')](_0xe4ff('0x66'),path[_0xe4ff('0x52')](_0x247ee5['path'])),function(_0x4dc0d1){if(_0x4dc0d1){throw new db[(_0xe4ff('0x58'))][(_0xe4ff('0x64'))](_0xe4ff('0x67'));}fs['unlinkSync'](_0x117215);logger[_0xe4ff('0x68')](_0xe4ff('0x69'));logger[_0xe4ff('0x68')](_0xe4ff('0x6a'));});});}return null;})[_0xe4ff('0x4a')](handleError(_0x335f0f,null));};exports[_0xe4ff('0x6b')]=function(_0x20089b,_0x6e72d,_0x27b88b){var _0x2efd1c=path[_0xe4ff('0x52')](_0x20089b[_0xe4ff('0x6c')]['filename'],path['extname'](_0x20089b['file']['filename']));var _0x446bf4=path[_0xe4ff('0x5e')](config[_0xe4ff('0x4f')],_0xe4ff('0x50'),_0x20089b[_0xe4ff('0x6c')][_0xe4ff('0x6d')]);var _0x176aaa=path[_0xe4ff('0x5e')](config[_0xe4ff('0x4f')],_0xe4ff('0x50'),_0x2efd1c);logger[_0xe4ff('0x68')]('Plugin\x20upload\x20filepath:\x20%s',_0x446bf4);logger[_0xe4ff('0x68')]('Plugin\x20upload\x20destination:\x20%s',_0x176aaa);try{fs[_0xe4ff('0x6e')](_0x446bf4,parseInt(_0xe4ff('0x6f'),0x8));extract(_0x446bf4,{'dir':_0x176aaa},function(_0x357a6f){if(_0x357a6f){logger[_0xe4ff('0x5a')](_0x357a6f);handleError(_0x357a6f,!![]);};var _0x23b84f=fs[_0xe4ff('0x70')](_0x176aaa);if(_0x23b84f[_0xe4ff('0x39')]>0x1){removeReferences(_0x446bf4,_0x176aaa);logger[_0xe4ff('0x5a')](_0xe4ff('0x71'));return _0x27b88b(new Error(_0xe4ff('0x71')));}var _0x5169f0=fs['lstatSync'](path[_0xe4ff('0x5e')](_0x176aaa,_0x23b84f[0x0]));if(_0x5169f0[_0xe4ff('0x72')]()){removeReferences(_0x446bf4,_0x176aaa);logger[_0xe4ff('0x5a')]('Invalid\x20plugin\x20structure');return _0x27b88b(new Error(_0xe4ff('0x71')));}if(_0x5169f0[_0xe4ff('0x73')]()){var _0x5e5485=fs[_0xe4ff('0x70')](path[_0xe4ff('0x5e')](_0x176aaa,_0x23b84f[0x0]));if(_0x5e5485['length']===0x0){removeReferences(_0x446bf4,_0x176aaa);logger[_0xe4ff('0x5a')]('Invalid\x20plugin\x20structure');return _0x27b88b(new Error('Invalid\x20plugin\x20structure'));}var _0x430f37=_0x5e5485[_0xe4ff('0x74')](function(_0x1cd931){return _0x1cd931===_0xe4ff('0x75');});if(!_0x430f37){return _0x27b88b(new Error(_0xe4ff('0x76')));}var _0x3b71bd=fs[_0xe4ff('0x77')](path['join'](_0x176aaa,_0x23b84f[0x0],_0xe4ff('0x75')));var _0xcf0423=JSON[_0xe4ff('0x78')](_0x3b71bd);if(_0xe4ff('0x79')==typeof _0xcf0423[_0xe4ff('0x2e')]){return _0x27b88b(new Error(_0xe4ff('0x7a')));}if(_0xe4ff('0x79')==typeof _0xcf0423['type']){return _0x27b88b(new Error('Invalid\x20manifest:\x20type\x20missing'));}if('undefined'==typeof _0xcf0423[_0xe4ff('0x7b')]){return _0x27b88b(new Error(_0xe4ff('0x7c')));}if('undefined'==typeof _0xcf0423[_0xe4ff('0x7d')]){return _0x27b88b(new Error(_0xe4ff('0x7e')));}if(_0xcf0423[_0xe4ff('0x41')]===_0xe4ff('0x7f')){if(_0xe4ff('0x79')==typeof _0xcf0423['parameters'][_0xe4ff('0x80')]){return _0x27b88b(new Error('Invalid\x20manifest:\x20views\x20missing'));}if(_0xe4ff('0x79')==typeof _0xcf0423[_0xe4ff('0x7d')][_0xe4ff('0x80')][_0xe4ff('0x81')]&&'undefined'==typeof _0xcf0423[_0xe4ff('0x7d')][_0xe4ff('0x80')][_0xe4ff('0x82')]){return _0x27b88b(new Error(_0xe4ff('0x83')));}}else if(_0xcf0423[_0xe4ff('0x41')]==='script'){if('undefined'==typeof _0xcf0423['parameters']['scriptName']){return _0x27b88b(new Error('Invalid\x20manifest:\x20script\x20name\x20missing'));}if(_0xe4ff('0x79')==typeof _0xcf0423[_0xe4ff('0x7d')]['scriptPath']){return _0x27b88b(new Error('Invalid\x20manifest:\x20script\x20path\x20missing'));}}else{return _0x27b88b(new Error(_0xe4ff('0x84')));}var _0x58a67e=_0xcf0423[_0xe4ff('0x2e')];var _0x1406fc=_0xcf0423[_0xe4ff('0x85')];var _0x5112ba=_0xcf0423[_0xe4ff('0x41')];var _0xb82417=_0xcf0423[_0xe4ff('0x86')]?_0xcf0423[_0xe4ff('0x86')]:_0xe4ff('0x87');var _0x47bd30=_0xcf0423[_0xe4ff('0x88')]?_0xcf0423[_0xe4ff('0x88')]:_0xe4ff('0x89');var _0x231ebc='';var _0x166d6d='';var _0x5f4e62='';var _0x22b52a='';var _0x490bc3=_0xcf0423[_0xe4ff('0x7b')];if(_0x5112ba===_0xe4ff('0x7f')){if(_0xe4ff('0x79')!=typeof _0xcf0423[_0xe4ff('0x7d')][_0xe4ff('0x80')][_0xe4ff('0x81')]){var _0x377aca=_0xcf0423['parameters'][_0xe4ff('0x80')][_0xe4ff('0x81')];if(!/^(f|ht)tps?:\/\//i[_0xe4ff('0x8a')](_0x377aca)){_0x231ebc=path['join'](_0xe4ff('0x8b'),_0x2efd1c,_0x23b84f[0x0],_0x377aca);}else{_0x231ebc=_0x377aca;}}else{logger[_0xe4ff('0x68')]('Warning:\x20admin\x20view\x20not\x20specified');}if(_0xe4ff('0x79')!=typeof _0xcf0423[_0xe4ff('0x7d')][_0xe4ff('0x80')]['agent']){var _0x55c0d4=_0xcf0423[_0xe4ff('0x7d')][_0xe4ff('0x80')][_0xe4ff('0x82')];if(!/^(f|ht)tps?:\/\//i[_0xe4ff('0x8a')](_0x55c0d4)){_0x166d6d=path['join'](_0xe4ff('0x8b'),_0x2efd1c,_0x23b84f[0x0],_0x55c0d4);}else{_0x166d6d=_0x55c0d4;}}else{logger[_0xe4ff('0x68')](_0xe4ff('0x8c'));}}else if(_0x5112ba===_0xe4ff('0x8d')){_0x5f4e62=_0xcf0423['parameters']['scriptName'];_0x22b52a=_0xcf0423[_0xe4ff('0x7d')]['scriptPath'];if(_0xe4ff('0x79')!=typeof _0xcf0423[_0xe4ff('0x7d')][_0xe4ff('0x80')]){if(_0xe4ff('0x79')!=typeof _0xcf0423[_0xe4ff('0x7d')][_0xe4ff('0x80')][_0xe4ff('0x81')]){var _0x377aca=_0xcf0423['parameters']['views'][_0xe4ff('0x81')];if(!/^(f|ht)tps?:\/\//i[_0xe4ff('0x8a')](_0x377aca)){_0x231ebc=path['join']('plugins',_0x2efd1c,_0x23b84f[0x0],_0x377aca);}else{_0x231ebc=_0x377aca;}}if('undefined'!=typeof _0xcf0423['parameters'][_0xe4ff('0x80')]['agent']){var _0x55c0d4=_0xcf0423[_0xe4ff('0x7d')][_0xe4ff('0x80')][_0xe4ff('0x82')];if(!/^(f|ht)tps?:\/\//i['test'](_0x55c0d4)){_0x166d6d=path[_0xe4ff('0x5e')]('plugins',_0x2efd1c,_0x23b84f[0x0],_0x55c0d4);}else{_0x166d6d=_0x55c0d4;}}}}var _0xf54909={'name':_0x58a67e,'description':_0x1406fc,'path':path[_0xe4ff('0x5e')](_0x2efd1c,_0x23b84f[0x0]),'type':_0x5112ba,'sidebar':_0xb82417,'icon':_0x47bd30,'adminUrl':_0x231ebc,'agentUrl':_0x166d6d,'scriptName':_0x5f4e62,'scriptPath':_0x22b52a,'version':_0x490bc3};removeReferences(_0x446bf4,null);return db[_0xe4ff('0x30')][_0xe4ff('0x8e')](_0xf54909)['then'](function(_0x42348d){var _0x3fd832={'role':_0x20089b[_0xe4ff('0x8f')]['role'],'userProfileId':_0x20089b[_0xe4ff('0x8f')][_0xe4ff('0x90')]};if(!_0x3fd832)throw new Error(_0xe4ff('0x91'));if(_0x3fd832[_0xe4ff('0x92')]===_0xe4ff('0x93')){var _0x17d1e3=_0x42348d[_0xe4ff('0x2b')]({'plain':!![]});return db[_0xe4ff('0x94')][_0xe4ff('0x4e')]({'where':{'name':_0xe4ff('0x95'),'userProfileId':_0x3fd832[_0xe4ff('0x90')]},'raw':!![]})['then'](function(_0x57df1c){if(_0x57df1c&&_0x57df1c[_0xe4ff('0x96')]===0x0){return db['UserProfileResource'][_0xe4ff('0x8e')]({'name':_0x17d1e3[_0xe4ff('0x2e')],'resourceId':_0x17d1e3['id'],'type':_0x57df1c[_0xe4ff('0x2e')],'sectionId':_0x57df1c['id']},{})[_0xe4ff('0x29')](function(){return _0x42348d;});}else{return _0x42348d;}})[_0xe4ff('0x4a')](function(_0x43fc06){logger[_0xe4ff('0x5a')](_0xe4ff('0x97'),_0x43fc06);throw _0x43fc06;});}return _0x42348d;})[_0xe4ff('0x29')](respondWithResult(_0x6e72d,null))[_0xe4ff('0x4a')](handleError(_0x6e72d,null));}});}catch(_0x1a136d){_0x6e72d[_0xe4ff('0x20')](0x1f4)[_0xe4ff('0x2f')](_0x1a136d);}};function removeReferences(_0x3fb594,_0x2324eb){try{if(_0x3fb594){fs[_0xe4ff('0x98')](_0x3fb594);logger['info'](_0xe4ff('0x99'));}if(_0x2324eb){rimraf(_0x2324eb,function(){});logger[_0xe4ff('0x68')](_0xe4ff('0x9a'));}}catch(_0xa340e){logger['error'](_0xa340e);}}exports[_0xe4ff('0x28')]=function(_0x1e1a19,_0x28531a,_0xb6660a){return db[_0xe4ff('0x30')][_0xe4ff('0x4e')]({'where':{'id':_0x1e1a19[_0xe4ff('0x4c')]['id']}})[_0xe4ff('0x29')](handleEntityNotFound(_0x28531a,null))[_0xe4ff('0x29')](saveUpdates(_0x1e1a19[_0xe4ff('0x8f')],null))[_0xe4ff('0x29')](respondWithResult(_0x28531a,null))[_0xe4ff('0x4a')](handleError(_0x28531a,null));};exports[_0xe4ff('0x9b')]=function(_0xf3e76f,_0x600ce5,_0x15be11){return db[_0xe4ff('0x30')][_0xe4ff('0x4e')]({'where':{'id':_0xf3e76f['params']['id']}})[_0xe4ff('0x29')](function(_0x4a38e4){if(_0x4a38e4){return _0x4a38e4[_0xe4ff('0x2a')]();}})[_0xe4ff('0x29')](function(_0xd5fa8f){rimraf(path[_0xe4ff('0x5e')](config[_0xe4ff('0x4f')],_0xe4ff('0x50'),path['dirname'](_0xd5fa8f['path'])),function(){});return _0xd5fa8f;})[_0xe4ff('0x29')](handleEntityNotFound(_0x600ce5,null))[_0xe4ff('0x29')](respondWithStatusCode(_0x600ce5,null))[_0xe4ff('0x4a')](handleError(_0x600ce5,null));};exports[_0xe4ff('0x9c')]=function(_0x5562e6,_0x4136e5,_0x202f87){return BPromise['resolve']()[_0xe4ff('0x29')](function(){if(!_0x5562e6[_0xe4ff('0x34')][_0xe4ff('0x6')]){throw new Error('\x27PATH\x27\x20parameter\x20not\x20specified');}if(!_0x5562e6[_0xe4ff('0x34')][_0xe4ff('0x9d')]){throw new Error('\x27PORT\x27\x20parameter\x20not\x20specified');}var _0x22cb45=_0x5562e6[_0xe4ff('0x34')][_0xe4ff('0x9e')]?_0x5562e6[_0xe4ff('0x34')][_0xe4ff('0x9e')]+':'+_0x5562e6[_0xe4ff('0x34')][_0xe4ff('0x9d')]:'http://localhost:'+_0x5562e6['query'][_0xe4ff('0x9d')];var _0x576e02=_0x5562e6[_0xe4ff('0x34')]['json']?_0x5562e6[_0xe4ff('0x34')][_0xe4ff('0x22')]:!![];var _0x1fd5b5=_0x5562e6[_0xe4ff('0x34')][_0xe4ff('0x9f')]?_0x5562e6[_0xe4ff('0x34')][_0xe4ff('0x9f')]:null;var _0x31fc29={'method':_0x5562e6[_0xe4ff('0xa0')],'uri':util[_0xe4ff('0x51')](_0xe4ff('0xa1'),_0x22cb45,_0x5562e6[_0xe4ff('0x34')][_0xe4ff('0x6')]),'json':_0x576e02,'resolveWithFullResponse':!![],'encoding':_0x1fd5b5,'qs':_0x5562e6['query']};if(_0x5562e6[_0xe4ff('0xa2')]){_0x31fc29['headers']=_0x5562e6[_0xe4ff('0xa2')];if(_0x31fc29[_0xe4ff('0xa2')][_0xe4ff('0xa3')]){delete _0x31fc29[_0xe4ff('0xa2')][_0xe4ff('0xa3')];}}if(_0x31fc29['headers'][_0xe4ff('0xa4')]){delete _0x31fc29[_0xe4ff('0xa2')]['content-type'];}return rp(_0x31fc29);})[_0xe4ff('0x29')](function(_0x2127c3){if(_0x2127c3){_0x4136e5[_0xe4ff('0x24')](_0x2127c3[_0xe4ff('0xa2')]);logger[_0xe4ff('0x68')](_0x2127c3[_0xe4ff('0x8f')]);if(_[_0xe4ff('0xa5')](_0x5562e6['query']['path'],_0xe4ff('0xa6'))&&_0x2127c3[_0xe4ff('0xa7')]==0x1f4){return _0x4136e5[_0xe4ff('0x2c')](_0x2127c3[_0xe4ff('0xa7')]);}else{return _0x4136e5[_0xe4ff('0x20')](_0x2127c3[_0xe4ff('0xa7')])[_0xe4ff('0x2f')](_0x2127c3[_0xe4ff('0x8f')]);}}else{return _0x4136e5[_0xe4ff('0x2c')](0xc8);}})[_0xe4ff('0x4a')](handleError(_0x4136e5,null));};exports[_0xe4ff('0xa8')]=function(_0x4962cd,_0xd5244f,_0x270664){return BPromise[_0xe4ff('0xa9')]()[_0xe4ff('0x29')](function(){if(!_0x4962cd[_0xe4ff('0x34')]['path']){throw new Error(_0xe4ff('0xaa'));}if(!_0x4962cd['query'][_0xe4ff('0x9d')]){throw new Error(_0xe4ff('0xab'));}var _0x32f4cc=_0x4962cd[_0xe4ff('0x34')][_0xe4ff('0x9e')]?_0x4962cd['query'][_0xe4ff('0x9e')]+':'+_0x4962cd[_0xe4ff('0x34')][_0xe4ff('0x9d')]:'http://localhost:'+_0x4962cd[_0xe4ff('0x34')][_0xe4ff('0x9d')];var _0x535742=_0x4962cd[_0xe4ff('0x34')][_0xe4ff('0x22')]?_0x4962cd['query'][_0xe4ff('0x22')]:!![];var _0x29d98b=_0x4962cd[_0xe4ff('0x34')][_0xe4ff('0x9f')]?_0x4962cd[_0xe4ff('0x34')]['encoding']:null;var _0xd469a2={'method':_0x4962cd[_0xe4ff('0xa0')],'uri':util['format'](_0xe4ff('0xa1'),_0x32f4cc,_0x4962cd[_0xe4ff('0x34')]['path']),'json':_0x535742,'resolveWithFullResponse':!![],'encoding':_0x29d98b,'body':_0x4962cd[_0xe4ff('0x8f')]};if(_0x4962cd[_0xe4ff('0xa2')]){_0xd469a2['headers']=_0x4962cd[_0xe4ff('0xa2')];if(_0xd469a2[_0xe4ff('0xa2')][_0xe4ff('0xa3')]){delete _0xd469a2[_0xe4ff('0xa2')][_0xe4ff('0xa3')];}}if(_0xd469a2[_0xe4ff('0xa2')]['content-type']){delete _0xd469a2[_0xe4ff('0xa2')][_0xe4ff('0xa4')];}return rp(_0xd469a2);})['then'](function(_0x2f069e){if(_0x2f069e){_0xd5244f[_0xe4ff('0x24')](_0x2f069e['headers']);logger[_0xe4ff('0x68')](_0x2f069e[_0xe4ff('0x8f')]);return _0xd5244f[_0xe4ff('0x20')](_0x2f069e[_0xe4ff('0xa7')])[_0xe4ff('0x2f')](_0x2f069e['body']);}else{return _0xd5244f[_0xe4ff('0x2c')](0xc8);}})['catch'](handleError(_0xd5244f,null));};
\ No newline at end of file
+var _0xbc90=['filters','intersection','attributes','fields','length','hasOwnProperty','limit','order','sort','where','filter','merge','map','type','key','options','findAll','rows','catch','show','params','include','find','download','path','root','server/files/plugins','format','%s.zip','basename','createWriteStream','zip','warning','code','ENOENT','Sequelize','Error','Error\x20while\x20generating\x20the\x20zip\x20archive','glob','**/*','join','node_modules/**/*','attachments/**/*','finalize','close','existsSync','Error\x20while\x20downloading\x20the\x20plugin','info','Download\x20completed','Temporary\x20file\x20removed','upload','file','filename','Plugin\x20upload\x20destination:\x20%s','chmodSync','0777','Invalid\x20plugin\x20structure','lstatSync','isFile','isDirectory','readdirSync','some','manifest.json','Plugin\x20manifest\x20missing','readFileSync','parse','undefined','Invalid\x20manifest:\x20name\x20missing','Invalid\x20manifest:\x20type\x20missing','version','Invalid\x20manifest:\x20version\x20not\x20specified','parameters','Invalid\x20manifest:\x20parameters\x20missing','html','views','Invalid\x20manifest:\x20views\x20missing','agent','Invalid\x20manifest:\x20no\x20view\x20specified','script','scriptName','Invalid\x20manifest:\x20script\x20name\x20missing','scriptPath','Invalid\x20manifest:\x20script\x20path\x20missing','sidebar','always','icon','admin','test','plugins','Warning:\x20admin\x20view\x20not\x20specified','Warning:\x20agent\x20view\x20not\x20specified','create','body','role','userProfileId','Unable\x20to\x20retrieve\x20the\x20current\x20user','user','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','Zip\x20archive\x20removed','Extracted\x20folder\x20removed','delete','dirname','webhookGet','resolve','\x27PATH\x27\x20parameter\x20not\x20specified','port','\x27PORT\x27\x20parameter\x20not\x20specified','hostname','encoding','method','headers','content-length','content-type','statusCode','http://localhost:','%s%s','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','desk.js','papaparse','extract-zip','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','redis','localhost','socket.io-emitter','./plugin.socket','register','sendStatus','status','end','json','count','offset','set','reject','update','then','destroy','get','Plugins','UserProfileResource','error','stack','name','send','index','Plugin','rawAttributes','model','keys','query'];(function(_0x56dc69,_0x58b16b){var _0x3f7fde=function(_0x514f0b){while(--_0x514f0b){_0x56dc69['push'](_0x56dc69['shift']());}};_0x3f7fde(++_0x58b16b);}(_0xbc90,0x76));var _0x0bc9=function(_0x2b4411,_0x2625ed){_0x2b4411=_0x2b4411-0x0;var _0x8e41ef=_0xbc90[_0x2b4411];return _0x8e41ef;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x0bc9('0x0'));var rimraf=require(_0x0bc9('0x1'));var zipdir=require(_0x0bc9('0x2'));var jsonpatch=require(_0x0bc9('0x3'));var rp=require('request-promise');var moment=require(_0x0bc9('0x4'));var BPromise=require(_0x0bc9('0x5'));var Mustache=require(_0x0bc9('0x6'));var util=require(_0x0bc9('0x7'));var path=require('path');var sox=require(_0x0bc9('0x8'));var csv=require(_0x0bc9('0x9'));var ejs=require(_0x0bc9('0xa'));var fs=require('fs');var _=require(_0x0bc9('0xb'));var squel=require(_0x0bc9('0xc'));var crypto=require(_0x0bc9('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x0bc9('0xe'));var toCsv=require(_0x0bc9('0x9'));var querystring=require('querystring');var Papa=require(_0x0bc9('0xf'));var extract=require(_0x0bc9('0x10'));var rimraf=require('rimraf');var archiver=require('archiver');var Redis=require('ioredis');var authService=require(_0x0bc9('0x11'));var qs=require(_0x0bc9('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0x0bc9('0x13'));var utils=require(_0x0bc9('0x14'));var config=require(_0x0bc9('0x15'));var db=require(_0x0bc9('0x16'))['db'];config[_0x0bc9('0x17')]=_['defaults'](config[_0x0bc9('0x17')],{'host':_0x0bc9('0x18'),'port':0x18eb});var socket=require(_0x0bc9('0x19'))(new Redis(config['redis']));require(_0x0bc9('0x1a'))[_0x0bc9('0x1b')](socket);function respondWithStatusCode(_0x389eb2,_0x3304cd){_0x3304cd=_0x3304cd||0xcc;return function(_0x5c2af1){if(_0x5c2af1){return _0x389eb2[_0x0bc9('0x1c')](_0x3304cd);}return _0x389eb2[_0x0bc9('0x1d')](_0x3304cd)[_0x0bc9('0x1e')]();};}function respondWithResult(_0x4fc5e1,_0x36100a){_0x36100a=_0x36100a||0xc8;return function(_0x419ea6){if(_0x419ea6){return _0x4fc5e1[_0x0bc9('0x1d')](_0x36100a)[_0x0bc9('0x1f')](_0x419ea6);}};}function respondWithFilteredResult(_0x42dd92,_0x1a112c){return function(_0x378cbb){if(_0x378cbb){var _0x2090c4=_0x378cbb[_0x0bc9('0x20')],_0xc5b138=_0x1a112c[_0x0bc9('0x21')],_0x19842c=_0x1a112c[_0x0bc9('0x21')]+_0x1a112c['limit'],_0x12037c;if(_0x19842c>=_0x2090c4){_0x19842c=_0x2090c4;_0x12037c=0xc8;}else{_0x12037c=0xce;}_0x42dd92[_0x0bc9('0x1d')](_0x12037c);return _0x42dd92[_0x0bc9('0x22')]('Content-Range',_0xc5b138+'-'+_0x19842c+'/'+_0x2090c4)[_0x0bc9('0x1f')](_0x378cbb);}return null;};}function patchUpdates(_0x2ac7dc){return function(_0x5ad8e3){try{jsonpatch['apply'](_0x5ad8e3,_0x2ac7dc,!![]);}catch(_0x3fbf5a){return BPromise[_0x0bc9('0x23')](_0x3fbf5a);}return _0x5ad8e3['save']();};}function saveUpdates(_0x28081a,_0x3680e8){return function(_0x380151){if(_0x380151){return _0x380151[_0x0bc9('0x24')](_0x28081a)[_0x0bc9('0x25')](function(_0x3992ae){return _0x3992ae;});}return null;};}function removeEntity(_0x4a8b2a,_0x5e6257){return function(_0x2b2ca9){if(_0x2b2ca9){return _0x2b2ca9[_0x0bc9('0x26')]()[_0x0bc9('0x25')](function(){var _0x5535e7=_0x2b2ca9[_0x0bc9('0x27')]({'plain':!![]});var _0x6f415c=_0x0bc9('0x28');return db[_0x0bc9('0x29')][_0x0bc9('0x26')]({'where':{'type':_0x6f415c,'resourceId':_0x5535e7['id']}})[_0x0bc9('0x25')](function(){return _0x2b2ca9;});})[_0x0bc9('0x25')](function(){_0x4a8b2a[_0x0bc9('0x1d')](0xcc)[_0x0bc9('0x1e')]();});}};}function handleEntityNotFound(_0x24145a,_0x35622c){return function(_0x21891b){if(!_0x21891b){_0x24145a['sendStatus'](0x194);}return _0x21891b;};}function handleError(_0x2157e2,_0x49435c){_0x49435c=_0x49435c||0x1f4;return function(_0x28d978){logger[_0x0bc9('0x2a')](_0x28d978[_0x0bc9('0x2b')]);if(_0x28d978[_0x0bc9('0x2c')]){delete _0x28d978[_0x0bc9('0x2c')];}_0x2157e2[_0x0bc9('0x1d')](_0x49435c)[_0x0bc9('0x2d')](_0x28d978);};}exports[_0x0bc9('0x2e')]=function(_0x5c7285,_0x3138a6){var _0x1414bc={},_0x3ac5e9={},_0x52da38={'count':0x0,'rows':[]};var _0xc8a23d=db[_0x0bc9('0x2f')][_0x0bc9('0x30')];_0x3ac5e9[_0x0bc9('0x31')]=_[_0x0bc9('0x32')](_0xc8a23d);_0x3ac5e9[_0x0bc9('0x33')]=_['keys'](_0x5c7285[_0x0bc9('0x33')]);_0x3ac5e9[_0x0bc9('0x34')]=_[_0x0bc9('0x35')](_0x3ac5e9['model'],_0x3ac5e9[_0x0bc9('0x33')]);_0x1414bc[_0x0bc9('0x36')]=_[_0x0bc9('0x35')](_0x3ac5e9[_0x0bc9('0x31')],qs[_0x0bc9('0x37')](_0x5c7285[_0x0bc9('0x33')][_0x0bc9('0x37')]));_0x1414bc[_0x0bc9('0x36')]=_0x1414bc[_0x0bc9('0x36')][_0x0bc9('0x38')]?_0x1414bc['attributes']:_0x3ac5e9['model'];if(!_0x5c7285[_0x0bc9('0x33')][_0x0bc9('0x39')]('nolimit')){_0x1414bc[_0x0bc9('0x3a')]=qs['limit'](_0x5c7285[_0x0bc9('0x33')]['limit']);_0x1414bc[_0x0bc9('0x21')]=qs[_0x0bc9('0x21')](_0x5c7285[_0x0bc9('0x33')][_0x0bc9('0x21')]);}_0x1414bc[_0x0bc9('0x3b')]=qs[_0x0bc9('0x3c')](_0x5c7285[_0x0bc9('0x33')][_0x0bc9('0x3c')]);_0x1414bc[_0x0bc9('0x3d')]=qs[_0x0bc9('0x34')](_['pick'](_0x5c7285['query'],_0x3ac5e9[_0x0bc9('0x34')]));if(_0x5c7285[_0x0bc9('0x33')][_0x0bc9('0x3e')]){_0x1414bc[_0x0bc9('0x3d')]=_[_0x0bc9('0x3f')](_0x1414bc[_0x0bc9('0x3d')],{'$or':_[_0x0bc9('0x40')](_0xc8a23d,function(_0x536b2d){if(_0x536b2d[_0x0bc9('0x41')][_0x0bc9('0x42')]!=='VIRTUAL'){var _0x35935a={};_0x35935a[_0x536b2d['field']]={'$like':'%'+_0x5c7285[_0x0bc9('0x33')]['filter']+'%'};return _0x35935a;}})});}_0x1414bc=_['merge']({},_0x1414bc,_0x5c7285[_0x0bc9('0x43')]);var _0x5c5db8={'where':_0x1414bc['where']};return db[_0x0bc9('0x2f')][_0x0bc9('0x20')](_0x5c5db8)[_0x0bc9('0x25')](function(_0x3184b8){_0x52da38[_0x0bc9('0x20')]=_0x3184b8;if(_0x5c7285[_0x0bc9('0x33')]['includeAll']){_0x1414bc['include']=[{'all':!![]}];}return db[_0x0bc9('0x2f')][_0x0bc9('0x44')](_0x1414bc);})[_0x0bc9('0x25')](function(_0x299837){_0x52da38[_0x0bc9('0x45')]=_0x299837;return _0x52da38;})[_0x0bc9('0x25')](respondWithFilteredResult(_0x3138a6,_0x1414bc))[_0x0bc9('0x46')](handleError(_0x3138a6,null));};exports[_0x0bc9('0x47')]=function(_0x2e4801,_0x29d8b8){var _0x1fa9cb={'raw':!![],'where':{'id':_0x2e4801[_0x0bc9('0x48')]['id']}},_0xe3526a={};_0xe3526a[_0x0bc9('0x31')]=_[_0x0bc9('0x32')](db[_0x0bc9('0x2f')][_0x0bc9('0x30')]);_0xe3526a[_0x0bc9('0x33')]=_[_0x0bc9('0x32')](_0x2e4801['query']);_0xe3526a[_0x0bc9('0x34')]=_[_0x0bc9('0x35')](_0xe3526a['model'],_0xe3526a['query']);_0x1fa9cb['attributes']=_['intersection'](_0xe3526a[_0x0bc9('0x31')],qs[_0x0bc9('0x37')](_0x2e4801['query'][_0x0bc9('0x37')]));_0x1fa9cb[_0x0bc9('0x36')]=_0x1fa9cb[_0x0bc9('0x36')]['length']?_0x1fa9cb['attributes']:_0xe3526a[_0x0bc9('0x31')];if(_0x2e4801[_0x0bc9('0x33')]['includeAll']){_0x1fa9cb[_0x0bc9('0x49')]=[{'all':!![]}];}_0x1fa9cb=_[_0x0bc9('0x3f')]({},_0x1fa9cb,_0x2e4801[_0x0bc9('0x43')]);return db[_0x0bc9('0x2f')][_0x0bc9('0x4a')](_0x1fa9cb)[_0x0bc9('0x25')](handleEntityNotFound(_0x29d8b8,null))['then'](respondWithResult(_0x29d8b8,null))[_0x0bc9('0x46')](handleError(_0x29d8b8,null));};exports[_0x0bc9('0x4b')]=function(_0x31ad03,_0x17a3e6,_0x310f7a){return db['Plugin'][_0x0bc9('0x4a')]({'where':{'id':_0x31ad03[_0x0bc9('0x48')]['id']},'attributes':[_0x0bc9('0x2c'),_0x0bc9('0x4c')],'raw':!![]})[_0x0bc9('0x25')](handleEntityNotFound(_0x17a3e6,null))[_0x0bc9('0x25')](function(_0x380e46){if(_0x380e46){var _0x34b5f7=path['join'](config[_0x0bc9('0x4d')],_0x0bc9('0x4e'),util[_0x0bc9('0x4f')](_0x0bc9('0x50'),path[_0x0bc9('0x51')](_0x380e46[_0x0bc9('0x4c')])));var _0x133d81=fs[_0x0bc9('0x52')](_0x34b5f7);var _0xbf16c=archiver(_0x0bc9('0x53'),{'zlib':{'level':0x9}});_0xbf16c['on'](_0x0bc9('0x54'),function(_0x2876bd){if(_0x2876bd[_0x0bc9('0x55')]===_0x0bc9('0x56')){logger[_0x0bc9('0x2a')](_0x2876bd);}else{throw new db[(_0x0bc9('0x57'))][(_0x0bc9('0x58'))]('Error\x20while\x20generating\x20the\x20zip\x20archive');}});_0xbf16c['on'](_0x0bc9('0x2a'),function(_0x23182c){throw new db['Sequelize'][(_0x0bc9('0x58'))](_0x0bc9('0x59'));});_0xbf16c['pipe'](_0x133d81);_0xbf16c[_0x0bc9('0x5a')](_0x0bc9('0x5b'),{'cwd':path[_0x0bc9('0x5c')](config[_0x0bc9('0x4d')],_0x0bc9('0x4e'),path['dirname'](_0x380e46['path'])),'ignore':[path[_0x0bc9('0x5c')](path['basename'](_0x380e46[_0x0bc9('0x4c')]),_0x0bc9('0x5d')),path['join'](path[_0x0bc9('0x51')](_0x380e46[_0x0bc9('0x4c')]),_0x0bc9('0x5e'))],'nodir':!![]})[_0x0bc9('0x5f')]();_0x133d81['on'](_0x0bc9('0x60'),function(){if(!fs[_0x0bc9('0x61')](_0x34b5f7)){throw new db[(_0x0bc9('0x57'))][(_0x0bc9('0x58'))]('Plugin\x20not\x20found');}return _0x17a3e6[_0x0bc9('0x4b')](_0x34b5f7,util[_0x0bc9('0x4f')]('%s.zip',path[_0x0bc9('0x51')](_0x380e46['path'])),function(_0x10ac88){if(_0x10ac88){throw new db[(_0x0bc9('0x57'))][(_0x0bc9('0x58'))](_0x0bc9('0x62'));}fs['unlinkSync'](_0x34b5f7);logger[_0x0bc9('0x63')](_0x0bc9('0x64'));logger[_0x0bc9('0x63')](_0x0bc9('0x65'));});});}return null;})[_0x0bc9('0x46')](handleError(_0x17a3e6,null));};exports[_0x0bc9('0x66')]=function(_0x378d82,_0x20d01d,_0x2da209){var _0x162626=path[_0x0bc9('0x51')](_0x378d82[_0x0bc9('0x67')][_0x0bc9('0x68')],path['extname'](_0x378d82[_0x0bc9('0x67')][_0x0bc9('0x68')]));var _0x5c42c0=path['join'](config[_0x0bc9('0x4d')],_0x0bc9('0x4e'),_0x378d82['file'][_0x0bc9('0x68')]);var _0xa6af2f=path['join'](config[_0x0bc9('0x4d')],_0x0bc9('0x4e'),_0x162626);logger[_0x0bc9('0x63')]('Plugin\x20upload\x20filepath:\x20%s',_0x5c42c0);logger[_0x0bc9('0x63')](_0x0bc9('0x69'),_0xa6af2f);try{fs[_0x0bc9('0x6a')](_0x5c42c0,parseInt(_0x0bc9('0x6b'),0x8));extract(_0x5c42c0,{'dir':_0xa6af2f},function(_0x350883){if(_0x350883){logger[_0x0bc9('0x2a')](_0x350883);handleError(_0x350883,!![]);};var _0x3336eb=fs['readdirSync'](_0xa6af2f);if(_0x3336eb[_0x0bc9('0x38')]>0x1){removeReferences(_0x5c42c0,_0xa6af2f);logger[_0x0bc9('0x2a')](_0x0bc9('0x6c'));return _0x2da209(new Error(_0x0bc9('0x6c')));}var _0x46adb6=fs[_0x0bc9('0x6d')](path['join'](_0xa6af2f,_0x3336eb[0x0]));if(_0x46adb6[_0x0bc9('0x6e')]()){removeReferences(_0x5c42c0,_0xa6af2f);logger[_0x0bc9('0x2a')](_0x0bc9('0x6c'));return _0x2da209(new Error(_0x0bc9('0x6c')));}if(_0x46adb6[_0x0bc9('0x6f')]()){var _0x380cc6=fs[_0x0bc9('0x70')](path['join'](_0xa6af2f,_0x3336eb[0x0]));if(_0x380cc6[_0x0bc9('0x38')]===0x0){removeReferences(_0x5c42c0,_0xa6af2f);logger['error']('Invalid\x20plugin\x20structure');return _0x2da209(new Error(_0x0bc9('0x6c')));}var _0x4dc0f1=_0x380cc6[_0x0bc9('0x71')](function(_0x3bb589){return _0x3bb589===_0x0bc9('0x72');});if(!_0x4dc0f1){return _0x2da209(new Error(_0x0bc9('0x73')));}var _0x58f083=fs[_0x0bc9('0x74')](path[_0x0bc9('0x5c')](_0xa6af2f,_0x3336eb[0x0],_0x0bc9('0x72')));var _0x27a458=JSON[_0x0bc9('0x75')](_0x58f083);if(_0x0bc9('0x76')==typeof _0x27a458[_0x0bc9('0x2c')]){return _0x2da209(new Error(_0x0bc9('0x77')));}if(_0x0bc9('0x76')==typeof _0x27a458[_0x0bc9('0x41')]){return _0x2da209(new Error(_0x0bc9('0x78')));}if(_0x0bc9('0x76')==typeof _0x27a458[_0x0bc9('0x79')]){return _0x2da209(new Error(_0x0bc9('0x7a')));}if(_0x0bc9('0x76')==typeof _0x27a458[_0x0bc9('0x7b')]){return _0x2da209(new Error(_0x0bc9('0x7c')));}if(_0x27a458[_0x0bc9('0x41')]===_0x0bc9('0x7d')){if(_0x0bc9('0x76')==typeof _0x27a458[_0x0bc9('0x7b')][_0x0bc9('0x7e')]){return _0x2da209(new Error(_0x0bc9('0x7f')));}if(_0x0bc9('0x76')==typeof _0x27a458['parameters'][_0x0bc9('0x7e')]['admin']&&_0x0bc9('0x76')==typeof _0x27a458[_0x0bc9('0x7b')][_0x0bc9('0x7e')][_0x0bc9('0x80')]){return _0x2da209(new Error(_0x0bc9('0x81')));}}else if(_0x27a458[_0x0bc9('0x41')]===_0x0bc9('0x82')){if('undefined'==typeof _0x27a458['parameters'][_0x0bc9('0x83')]){return _0x2da209(new Error(_0x0bc9('0x84')));}if(_0x0bc9('0x76')==typeof _0x27a458[_0x0bc9('0x7b')][_0x0bc9('0x85')]){return _0x2da209(new Error(_0x0bc9('0x86')));}}else{return _0x2da209(new Error('Invalid\x20manifest:\x20invalid\x20type'));}var _0x5a7ae0=_0x27a458['name'];var _0x1d378a=_0x27a458['description'];var _0xc27b0d=_0x27a458[_0x0bc9('0x41')];var _0x53c8c6=_0x27a458[_0x0bc9('0x87')]?_0x27a458[_0x0bc9('0x87')]:_0x0bc9('0x88');var _0x5129d2=_0x27a458[_0x0bc9('0x89')]?_0x27a458[_0x0bc9('0x89')]:'icon-apps';var _0x10fb16='';var _0x203963='';var _0x2a222f='';var _0x3d0d8d='';var _0x1552b0=_0x27a458[_0x0bc9('0x79')];if(_0xc27b0d==='html'){if(_0x0bc9('0x76')!=typeof _0x27a458[_0x0bc9('0x7b')][_0x0bc9('0x7e')][_0x0bc9('0x8a')]){var _0x20cac3=_0x27a458['parameters'][_0x0bc9('0x7e')][_0x0bc9('0x8a')];if(!/^(f|ht)tps?:\/\//i[_0x0bc9('0x8b')](_0x20cac3)){_0x10fb16=path[_0x0bc9('0x5c')](_0x0bc9('0x8c'),_0x162626,_0x3336eb[0x0],_0x20cac3);}else{_0x10fb16=_0x20cac3;}}else{logger[_0x0bc9('0x63')](_0x0bc9('0x8d'));}if(_0x0bc9('0x76')!=typeof _0x27a458['parameters'][_0x0bc9('0x7e')]['agent']){var _0x4ee193=_0x27a458[_0x0bc9('0x7b')][_0x0bc9('0x7e')][_0x0bc9('0x80')];if(!/^(f|ht)tps?:\/\//i['test'](_0x4ee193)){_0x203963=path[_0x0bc9('0x5c')](_0x0bc9('0x8c'),_0x162626,_0x3336eb[0x0],_0x4ee193);}else{_0x203963=_0x4ee193;}}else{logger[_0x0bc9('0x63')](_0x0bc9('0x8e'));}}else if(_0xc27b0d===_0x0bc9('0x82')){_0x2a222f=_0x27a458[_0x0bc9('0x7b')]['scriptName'];_0x3d0d8d=_0x27a458[_0x0bc9('0x7b')][_0x0bc9('0x85')];if(_0x0bc9('0x76')!=typeof _0x27a458['parameters']['views']){if(_0x0bc9('0x76')!=typeof _0x27a458[_0x0bc9('0x7b')][_0x0bc9('0x7e')][_0x0bc9('0x8a')]){var _0x20cac3=_0x27a458[_0x0bc9('0x7b')]['views']['admin'];if(!/^(f|ht)tps?:\/\//i[_0x0bc9('0x8b')](_0x20cac3)){_0x10fb16=path[_0x0bc9('0x5c')]('plugins',_0x162626,_0x3336eb[0x0],_0x20cac3);}else{_0x10fb16=_0x20cac3;}}if('undefined'!=typeof _0x27a458[_0x0bc9('0x7b')][_0x0bc9('0x7e')][_0x0bc9('0x80')]){var _0x4ee193=_0x27a458['parameters'][_0x0bc9('0x7e')][_0x0bc9('0x80')];if(!/^(f|ht)tps?:\/\//i['test'](_0x4ee193)){_0x203963=path[_0x0bc9('0x5c')]('plugins',_0x162626,_0x3336eb[0x0],_0x4ee193);}else{_0x203963=_0x4ee193;}}}}var _0x2d717e={'name':_0x5a7ae0,'description':_0x1d378a,'path':path['join'](_0x162626,_0x3336eb[0x0]),'type':_0xc27b0d,'sidebar':_0x53c8c6,'icon':_0x5129d2,'adminUrl':_0x10fb16,'agentUrl':_0x203963,'scriptName':_0x2a222f,'scriptPath':_0x3d0d8d,'version':_0x1552b0};removeReferences(_0x5c42c0,null);return db[_0x0bc9('0x2f')][_0x0bc9('0x8f')](_0x2d717e)[_0x0bc9('0x25')](function(_0x2674fd){var _0x17d226={'role':_0x378d82[_0x0bc9('0x90')][_0x0bc9('0x91')],'userProfileId':_0x378d82[_0x0bc9('0x90')][_0x0bc9('0x92')]};if(!_0x17d226)throw new Error(_0x0bc9('0x93'));if(_0x17d226[_0x0bc9('0x91')]===_0x0bc9('0x94')){var _0x563c49=_0x2674fd[_0x0bc9('0x27')]({'plain':!![]});return db[_0x0bc9('0x95')][_0x0bc9('0x4a')]({'where':{'name':_0x0bc9('0x28'),'userProfileId':_0x17d226[_0x0bc9('0x92')]},'raw':!![]})[_0x0bc9('0x25')](function(_0x2bf997){if(_0x2bf997&&_0x2bf997[_0x0bc9('0x96')]===0x0){return db[_0x0bc9('0x29')][_0x0bc9('0x8f')]({'name':_0x563c49['name'],'resourceId':_0x563c49['id'],'type':_0x2bf997['name'],'sectionId':_0x2bf997['id']},{})[_0x0bc9('0x25')](function(){return _0x2674fd;});}else{return _0x2674fd;}})[_0x0bc9('0x46')](function(_0x16632e){logger['error'](_0x0bc9('0x97'),_0x16632e);throw _0x16632e;});}return _0x2674fd;})['then'](respondWithResult(_0x20d01d,null))[_0x0bc9('0x46')](handleError(_0x20d01d,null));}});}catch(_0x5199cc){_0x20d01d['status'](0x1f4)[_0x0bc9('0x2d')](_0x5199cc);}};function removeReferences(_0x529ab2,_0x11129f){try{if(_0x529ab2){fs['unlinkSync'](_0x529ab2);logger[_0x0bc9('0x63')](_0x0bc9('0x98'));}if(_0x11129f){rimraf(_0x11129f,function(){});logger['info'](_0x0bc9('0x99'));}}catch(_0x539b29){logger['error'](_0x539b29);}}exports[_0x0bc9('0x24')]=function(_0x528161,_0x263090,_0xd14cb5){return db[_0x0bc9('0x2f')][_0x0bc9('0x4a')]({'where':{'id':_0x528161[_0x0bc9('0x48')]['id']}})[_0x0bc9('0x25')](handleEntityNotFound(_0x263090,null))['then'](saveUpdates(_0x528161['body'],null))['then'](respondWithResult(_0x263090,null))[_0x0bc9('0x46')](handleError(_0x263090,null));};exports[_0x0bc9('0x9a')]=function(_0x522b55,_0x3098b8,_0x1553d0){return db['Plugin'][_0x0bc9('0x4a')]({'where':{'id':_0x522b55['params']['id']}})[_0x0bc9('0x25')](function(_0x155509){if(_0x155509){return _0x155509['destroy']();}})['then'](function(_0x1e7267){rimraf(path['join'](config[_0x0bc9('0x4d')],'server/files/plugins',path[_0x0bc9('0x9b')](_0x1e7267[_0x0bc9('0x4c')])),function(){});return _0x1e7267;})[_0x0bc9('0x25')](handleEntityNotFound(_0x3098b8,null))[_0x0bc9('0x25')](respondWithStatusCode(_0x3098b8,null))[_0x0bc9('0x46')](handleError(_0x3098b8,null));};exports[_0x0bc9('0x9c')]=function(_0x637aac,_0x40d684,_0x1f4af2){return BPromise[_0x0bc9('0x9d')]()[_0x0bc9('0x25')](function(){if(!_0x637aac['query'][_0x0bc9('0x4c')]){throw new Error(_0x0bc9('0x9e'));}if(!_0x637aac[_0x0bc9('0x33')][_0x0bc9('0x9f')]){throw new Error(_0x0bc9('0xa0'));}var _0x25ac49=_0x637aac[_0x0bc9('0x33')][_0x0bc9('0xa1')]?_0x637aac[_0x0bc9('0x33')][_0x0bc9('0xa1')]+':'+_0x637aac[_0x0bc9('0x33')][_0x0bc9('0x9f')]:'http://localhost:'+_0x637aac[_0x0bc9('0x33')][_0x0bc9('0x9f')];var _0x3e56a3=_0x637aac['query'][_0x0bc9('0x1f')]?_0x637aac[_0x0bc9('0x33')][_0x0bc9('0x1f')]:!![];var _0x416faa=_0x637aac['query']['encoding']?_0x637aac[_0x0bc9('0x33')][_0x0bc9('0xa2')]:null;var _0x3222ef={'method':_0x637aac[_0x0bc9('0xa3')],'uri':util[_0x0bc9('0x4f')]('%s%s',_0x25ac49,_0x637aac[_0x0bc9('0x33')]['path']),'json':_0x3e56a3,'resolveWithFullResponse':!![],'encoding':_0x416faa,'qs':_0x637aac[_0x0bc9('0x33')]};if(_0x637aac[_0x0bc9('0xa4')]){_0x3222ef['headers']=_0x637aac[_0x0bc9('0xa4')];if(_0x3222ef[_0x0bc9('0xa4')][_0x0bc9('0xa5')]){delete _0x3222ef[_0x0bc9('0xa4')][_0x0bc9('0xa5')];}}if(_0x3222ef[_0x0bc9('0xa4')][_0x0bc9('0xa6')]){delete _0x3222ef[_0x0bc9('0xa4')]['content-type'];}return rp(_0x3222ef);})[_0x0bc9('0x25')](function(_0x93e388){if(_0x93e388){_0x40d684[_0x0bc9('0x22')](_0x93e388[_0x0bc9('0xa4')]);logger[_0x0bc9('0x63')](_0x93e388['body']);if(_['endsWith'](_0x637aac[_0x0bc9('0x33')][_0x0bc9('0x4c')],_0x0bc9('0x4b'))&&_0x93e388[_0x0bc9('0xa7')]==0x1f4){return _0x40d684[_0x0bc9('0x1c')](_0x93e388[_0x0bc9('0xa7')]);}else{return _0x40d684['status'](_0x93e388[_0x0bc9('0xa7')])[_0x0bc9('0x2d')](_0x93e388[_0x0bc9('0x90')]);}}else{return _0x40d684[_0x0bc9('0x1c')](0xc8);}})[_0x0bc9('0x46')](handleError(_0x40d684,null));};exports['webhookPost']=function(_0x390043,_0x11f6e3,_0x135957){return BPromise[_0x0bc9('0x9d')]()[_0x0bc9('0x25')](function(){if(!_0x390043[_0x0bc9('0x33')]['path']){throw new Error(_0x0bc9('0x9e'));}if(!_0x390043[_0x0bc9('0x33')]['port']){throw new Error(_0x0bc9('0xa0'));}var _0x2611e4=_0x390043[_0x0bc9('0x33')][_0x0bc9('0xa1')]?_0x390043[_0x0bc9('0x33')]['hostname']+':'+_0x390043['query'][_0x0bc9('0x9f')]:_0x0bc9('0xa8')+_0x390043['query'][_0x0bc9('0x9f')];var _0x925951=_0x390043[_0x0bc9('0x33')][_0x0bc9('0x1f')]?_0x390043['query']['json']:!![];var _0xc1851c=_0x390043[_0x0bc9('0x33')][_0x0bc9('0xa2')]?_0x390043['query'][_0x0bc9('0xa2')]:null;var _0x58f45a={'method':_0x390043[_0x0bc9('0xa3')],'uri':util['format'](_0x0bc9('0xa9'),_0x2611e4,_0x390043[_0x0bc9('0x33')][_0x0bc9('0x4c')]),'json':_0x925951,'resolveWithFullResponse':!![],'encoding':_0xc1851c,'body':_0x390043['body']};if(_0x390043['headers']){_0x58f45a[_0x0bc9('0xa4')]=_0x390043[_0x0bc9('0xa4')];if(_0x58f45a[_0x0bc9('0xa4')][_0x0bc9('0xa5')]){delete _0x58f45a['headers'][_0x0bc9('0xa5')];}}if(_0x58f45a['headers'][_0x0bc9('0xa6')]){delete _0x58f45a['headers'][_0x0bc9('0xa6')];}return rp(_0x58f45a);})[_0x0bc9('0x25')](function(_0x390634){if(_0x390634){_0x11f6e3['set'](_0x390634[_0x0bc9('0xa4')]);logger[_0x0bc9('0x63')](_0x390634[_0x0bc9('0x90')]);return _0x11f6e3[_0x0bc9('0x1d')](_0x390634[_0x0bc9('0xa7')])[_0x0bc9('0x2d')](_0x390634[_0x0bc9('0x90')]);}else{return _0x11f6e3[_0x0bc9('0x1c')](0xc8);}})['catch'](handleError(_0x11f6e3,null));};
\ No newline at end of file
index 2008f07..474c474 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7355=['events','../../mysqldb','Plugin','save','update','remove','hasOwnProperty','hook','exports'];(function(_0x5cfc47,_0x87746b){var _0x3a5114=function(_0x2b4ff4){while(--_0x2b4ff4){_0x5cfc47['push'](_0x5cfc47['shift']());}};_0x3a5114(++_0x87746b);}(_0x7355,0x7e));var _0x5735=function(_0x37afaa,_0x5f1ec7){_0x37afaa=_0x37afaa-0x0;var _0x49c4c0=_0x7355[_0x37afaa];return _0x49c4c0;};'use strict';var EventEmitter=require(_0x5735('0x0'));var Plugin=require(_0x5735('0x1'))['db'][_0x5735('0x2')];var PluginEvents=new EventEmitter();PluginEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x5735('0x3'),'afterUpdate':_0x5735('0x4'),'afterDestroy':_0x5735('0x5')};function emitEvent(_0x550e0f){return function(_0x3e1028,_0x379b5,_0x18d8ed){PluginEvents['emit'](_0x550e0f+':'+_0x3e1028['id'],_0x3e1028);PluginEvents['emit'](_0x550e0f,_0x3e1028);_0x18d8ed(null);};}for(var e in events){if(events[_0x5735('0x6')](e)){var event=events[e];Plugin[_0x5735('0x7')](e,emitEvent(event));}}module[_0x5735('0x8')]=PluginEvents;
\ No newline at end of file
+var _0x59da=['../../mysqldb','setMaxListeners','save','update','remove','emit','exports','events'];(function(_0x3ecf3f,_0x1709c9){var _0x1c6c85=function(_0x576ff8){while(--_0x576ff8){_0x3ecf3f['push'](_0x3ecf3f['shift']());}};_0x1c6c85(++_0x1709c9);}(_0x59da,0x10f));var _0xa59d=function(_0xfbc17a,_0x2b0c35){_0xfbc17a=_0xfbc17a-0x0;var _0x21b618=_0x59da[_0xfbc17a];return _0x21b618;};'use strict';var EventEmitter=require(_0xa59d('0x0'));var Plugin=require(_0xa59d('0x1'))['db']['Plugin'];var PluginEvents=new EventEmitter();PluginEvents[_0xa59d('0x2')](0x0);var events={'afterCreate':_0xa59d('0x3'),'afterUpdate':_0xa59d('0x4'),'afterDestroy':_0xa59d('0x5')};function emitEvent(_0x13d1f){return function(_0x597729,_0x4c3c09,_0x22f300){PluginEvents[_0xa59d('0x6')](_0x13d1f+':'+_0x597729['id'],_0x597729);PluginEvents['emit'](_0x13d1f,_0x597729);_0x22f300(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];Plugin['hook'](e,emitEvent(event));}}module[_0xa59d('0x7')]=PluginEvents;
\ No newline at end of file
index e3f7ce2..966cc6e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf194=['define','Plugin','plugins','util','../../config/logger','api','moment','bluebird','path','rimraf','./plugin.attributes','exports'];(function(_0x279522,_0x497270){var _0xc6071d=function(_0x505793){while(--_0x505793){_0x279522['push'](_0x279522['shift']());}};_0xc6071d(++_0x497270);}(_0xf194,0x19b));var _0x4f19=function(_0x411275,_0x16ec18){_0x411275=_0x411275-0x0;var _0x21286b=_0xf194[_0x411275];return _0x21286b;};'use strict';var _=require('lodash');var util=require(_0x4f19('0x0'));var logger=require(_0x4f19('0x1'))(_0x4f19('0x2'));var moment=require(_0x4f19('0x3'));var BPromise=require(_0x4f19('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x4f19('0x5'));var rimraf=require(_0x4f19('0x6'));var config=require('../../config/environment');var attributes=require(_0x4f19('0x7'));module[_0x4f19('0x8')]=function(_0x109d9a,_0x21b9cb){return _0x109d9a[_0x4f19('0x9')](_0x4f19('0xa'),attributes,{'tableName':_0x4f19('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb796=['Plugin','plugins','lodash','util','../../config/logger','bluebird','request-promise','path','rimraf','../../config/environment','./plugin.attributes','exports','define'];(function(_0x49f795,_0x89dea1){var _0x5a4d7d=function(_0x547b0d){while(--_0x547b0d){_0x49f795['push'](_0x49f795['shift']());}};_0x5a4d7d(++_0x89dea1);}(_0xb796,0xd2));var _0x6b79=function(_0x35241f,_0x4889e7){_0x35241f=_0x35241f-0x0;var _0x246a08=_0xb796[_0x35241f];return _0x246a08;};'use strict';var _=require(_0x6b79('0x0'));var util=require(_0x6b79('0x1'));var logger=require(_0x6b79('0x2'))('api');var moment=require('moment');var BPromise=require(_0x6b79('0x3'));var rp=require(_0x6b79('0x4'));var fs=require('fs');var path=require(_0x6b79('0x5'));var rimraf=require(_0x6b79('0x6'));var config=require(_0x6b79('0x7'));var attributes=require(_0x6b79('0x8'));module[_0x6b79('0x9')]=function(_0x47d07f,_0x4d4478){return _0x47d07f[_0x6b79('0xa')](_0x6b79('0xb'),attributes,{'tableName':_0x6b79('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index c7762b2..c981bb6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1be6=['info','Plugin,\x20%s,\x20%s','request\x20sent','debug','Plugin,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','CreatePlugin','create','body','options','stringify','lodash','util','moment','bluebird','ioredis','../../mysqldb','rpc','../../config/environment','client','http','defaults','localhost','socket.io-emitter','redis','./plugin.socket','register','request'];(function(_0x556c96,_0x3c6ec0){var _0x1e9f84=function(_0x2496f1){while(--_0x2496f1){_0x556c96['push'](_0x556c96['shift']());}};_0x1e9f84(++_0x3c6ec0);}(_0x1be6,0x8f));var _0x61be=function(_0x5135f9,_0x26dd96){_0x5135f9=_0x5135f9-0x0;var _0x41ac1c=_0x1be6[_0x5135f9];return _0x41ac1c;};'use strict';var _=require(_0x61be('0x0'));var util=require(_0x61be('0x1'));var moment=require(_0x61be('0x2'));var BPromise=require(_0x61be('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x61be('0x4'));var db=require(_0x61be('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x61be('0x6'));var config=require(_0x61be('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x61be('0x8')][_0x61be('0x9')]({'port':0x232a});config['redis']=_[_0x61be('0xa')](config['redis'],{'host':_0x61be('0xb'),'port':0x18eb});var socket=require(_0x61be('0xc'))(new Redis(config[_0x61be('0xd')]));require(_0x61be('0xe'))[_0x61be('0xf')](socket);function respondWithRpcPromise(_0x2fe6af,_0x219536,_0x4329cf){return new BPromise(function(_0x227bb3,_0x3d4430){return client[_0x61be('0x10')](_0x2fe6af,_0x4329cf)['then'](function(_0x53a52e){logger[_0x61be('0x11')](_0x61be('0x12'),_0x219536,_0x61be('0x13'));logger[_0x61be('0x14')](_0x61be('0x15'),_0x219536,_0x61be('0x13'),JSON['stringify'](_0x53a52e));if(_0x53a52e['error']){if(_0x53a52e[_0x61be('0x16')][_0x61be('0x17')]===0x1f4){logger[_0x61be('0x16')]('Plugin,\x20%s,\x20%s',_0x219536,_0x53a52e[_0x61be('0x16')][_0x61be('0x18')]);return _0x3d4430(_0x53a52e[_0x61be('0x16')][_0x61be('0x18')]);}logger[_0x61be('0x16')](_0x61be('0x12'),_0x219536,_0x53a52e[_0x61be('0x16')][_0x61be('0x18')]);return _0x227bb3(_0x53a52e['error'][_0x61be('0x18')]);}else{logger[_0x61be('0x11')]('Plugin,\x20%s,\x20%s',_0x219536,'request\x20sent');_0x227bb3(_0x53a52e[_0x61be('0x19')][_0x61be('0x18')]);}})[_0x61be('0x1a')](function(_0x129c88){logger['error'](_0x61be('0x12'),_0x219536,_0x129c88);_0x3d4430(_0x129c88);});});}exports[_0x61be('0x1b')]=function(_0x36a828){var _0x2b737d=this;return new Promise(function(_0x131563,_0x4f5c69){return db['Plugin'][_0x61be('0x1c')](_0x36a828[_0x61be('0x1d')],{'raw':_0x36a828[_0x61be('0x1e')]?_0x36a828[_0x61be('0x1e')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x35ba){logger['info'](_0x61be('0x1b'),_0x36a828);logger[_0x61be('0x14')]('CreatePlugin',_0x36a828,JSON[_0x61be('0x1f')](_0x35ba));_0x131563(_0x35ba);})[_0x61be('0x1a')](function(_0x4b7f56){logger[_0x61be('0x16')](_0x61be('0x1b'),_0x4b7f56['message'],_0x36a828);_0x4f5c69(_0x2b737d[_0x61be('0x16')](0x1f4,_0x4b7f56[_0x61be('0x18')]));});});};
\ No newline at end of file
+var _0x287a=['../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','redis','defaults','localhost','socket.io-emitter','./plugin.socket','request','info','Plugin,\x20%s,\x20%s','request\x20sent','debug','Plugin,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','Plugin','create','body','options','raw','then','CreatePlugin','util','moment','bluebird','ioredis'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0x287a,0xc8));var _0xa287=function(_0x375825,_0x482175){_0x375825=_0x375825-0x0;var _0x5e664c=_0x287a[_0x375825];return _0x5e664c;};'use strict';var _=require('lodash');var util=require(_0xa287('0x0'));var moment=require(_0xa287('0x1'));var BPromise=require(_0xa287('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xa287('0x3'));var db=require(_0xa287('0x4'))['db'];var utils=require(_0xa287('0x5'));var logger=require(_0xa287('0x6'))(_0xa287('0x7'));var config=require(_0xa287('0x8'));var jayson=require(_0xa287('0x9'));var client=jayson['client'][_0xa287('0xa')]({'port':0x232a});config[_0xa287('0xb')]=_[_0xa287('0xc')](config[_0xa287('0xb')],{'host':_0xa287('0xd'),'port':0x18eb});var socket=require(_0xa287('0xe'))(new Redis(config[_0xa287('0xb')]));require(_0xa287('0xf'))['register'](socket);function respondWithRpcPromise(_0x25c3fc,_0x3b0d2e,_0x367dbc){return new BPromise(function(_0x195ab6,_0x1cbbb8){return client[_0xa287('0x10')](_0x25c3fc,_0x367dbc)['then'](function(_0x389af4){logger[_0xa287('0x11')](_0xa287('0x12'),_0x3b0d2e,_0xa287('0x13'));logger[_0xa287('0x14')](_0xa287('0x15'),_0x3b0d2e,'request\x20sent',JSON[_0xa287('0x16')](_0x389af4));if(_0x389af4[_0xa287('0x17')]){if(_0x389af4[_0xa287('0x17')][_0xa287('0x18')]===0x1f4){logger['error']('Plugin,\x20%s,\x20%s',_0x3b0d2e,_0x389af4[_0xa287('0x17')][_0xa287('0x19')]);return _0x1cbbb8(_0x389af4[_0xa287('0x17')][_0xa287('0x19')]);}logger[_0xa287('0x17')](_0xa287('0x12'),_0x3b0d2e,_0x389af4['error'][_0xa287('0x19')]);return _0x195ab6(_0x389af4[_0xa287('0x17')]['message']);}else{logger['info'](_0xa287('0x12'),_0x3b0d2e,_0xa287('0x13'));_0x195ab6(_0x389af4[_0xa287('0x1a')][_0xa287('0x19')]);}})['catch'](function(_0x174327){logger['error']('Plugin,\x20%s,\x20%s',_0x3b0d2e,_0x174327);_0x1cbbb8(_0x174327);});});}exports['CreatePlugin']=function(_0x3d8927){var _0xf6d467=this;return new Promise(function(_0x525826,_0x4ac4e4){return db[_0xa287('0x1b')][_0xa287('0x1c')](_0x3d8927[_0xa287('0x1d')],{'raw':_0x3d8927[_0xa287('0x1e')]?_0x3d8927[_0xa287('0x1e')][_0xa287('0x1f')]===undefined?!![]:![]:!![]})[_0xa287('0x20')](function(_0x523cfc){logger[_0xa287('0x11')]('CreatePlugin',_0x3d8927);logger['debug']('CreatePlugin',_0x3d8927,JSON['stringify'](_0x523cfc));_0x525826(_0x523cfc);})['catch'](function(_0x54bbcb){logger[_0xa287('0x17')](_0xa287('0x21'),_0x54bbcb[_0xa287('0x19')],_0x3d8927);_0x4ac4e4(_0xf6d467[_0xa287('0x17')](0x1f4,_0x54bbcb['message']));});});};
\ No newline at end of file
index 1713027..536fdb1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6091=['removeListener','register','length','plugin:','./plugin.events','save','remove','update','emit'];(function(_0x42b557,_0x4134c9){var _0x3f0440=function(_0x2a2b9f){while(--_0x2a2b9f){_0x42b557['push'](_0x42b557['shift']());}};_0x3f0440(++_0x4134c9);}(_0x6091,0x1ab));var _0x1609=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0x6091[_0x4cf98e];return _0x1623ac;};'use strict';var PluginEvents=require(_0x1609('0x0'));var events=[_0x1609('0x1'),_0x1609('0x2'),_0x1609('0x3')];function createListener(_0x3a8a15,_0x2784f8){return function(_0x3e93e4){_0x2784f8[_0x1609('0x4')](_0x3a8a15,_0x3e93e4);};}function removeListener(_0xe478c7,_0x26b16b){return function(){PluginEvents[_0x1609('0x5')](_0xe478c7,_0x26b16b);};}exports[_0x1609('0x6')]=function(_0x439561){for(var _0x2bd14d=0x0,_0x2758cf=events[_0x1609('0x7')];_0x2bd14d<_0x2758cf;_0x2bd14d++){var _0x55b450=events[_0x2bd14d];var _0x33aebe=createListener(_0x1609('0x8')+_0x55b450,_0x439561);PluginEvents['on'](_0x55b450,_0x33aebe);}};
\ No newline at end of file
+var _0xa929=['register','plugin:','./plugin.events','remove','update'];(function(_0x3f7598,_0x212e37){var _0x51fb16=function(_0x4a5c0b){while(--_0x4a5c0b){_0x3f7598['push'](_0x3f7598['shift']());}};_0x51fb16(++_0x212e37);}(_0xa929,0x70));var _0x9a92=function(_0x2c7720,_0x4b4c66){_0x2c7720=_0x2c7720-0x0;var _0x18b6b0=_0xa929[_0x2c7720];return _0x18b6b0;};'use strict';var PluginEvents=require(_0x9a92('0x0'));var events=['save',_0x9a92('0x1'),_0x9a92('0x2')];function createListener(_0x5eac48,_0x2b8b28){return function(_0xfc230e){_0x2b8b28['emit'](_0x5eac48,_0xfc230e);};}function removeListener(_0x4d09aa,_0x2d76ed){return function(){PluginEvents['removeListener'](_0x4d09aa,_0x2d76ed);};}exports[_0x9a92('0x3')]=function(_0x578b71){for(var _0x4cbe42=0x0,_0x21865c=events['length'];_0x4cbe42<_0x21865c;_0x4cbe42++){var _0x46b70a=events[_0x4cbe42];var _0x4d174d=createListener(_0x9a92('0x4')+_0x46b70a,_0x578b71);PluginEvents['on'](_0x46b70a,_0x4d174d);}};
\ No newline at end of file
index 1014d3c..eb24703 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['create','put','delete','destroy','exports','express','Router','../../components/auth/service','isAuthenticated','get','/:id','show','post'];(function(_0x5f7412,_0x51ce32){var _0x4674c1=function(_0x1e77a8){while(--_0x1e77a8){_0x5f7412['push'](_0x5f7412['shift']());}};_0x4674c1(++_0x51ce32);}(_0xa9e0,0x123));var _0x0a9e=function(_0x21aec3,_0x5c97e9){_0x21aec3=_0x21aec3-0x0;var _0x288bbc=_0xa9e0[_0x21aec3];return _0x288bbc;};'use strict';var express=require(_0x0a9e('0x0'));var router=express[_0x0a9e('0x1')]();var auth=require(_0x0a9e('0x2'));var controller=require('./pm2.controller');router['get']('/',auth[_0x0a9e('0x3')](),controller['index']);router[_0x0a9e('0x4')](_0x0a9e('0x5'),auth[_0x0a9e('0x3')](),controller[_0x0a9e('0x6')]);router[_0x0a9e('0x7')]('/',auth['isAuthenticated'](),controller[_0x0a9e('0x8')]);router[_0x0a9e('0x9')](_0x0a9e('0x5'),auth['isAuthenticated'](),controller['update']);router[_0x0a9e('0xa')]('/:id',auth['isAuthenticated'](),controller[_0x0a9e('0xb')]);module[_0x0a9e('0xc')]=router;
\ No newline at end of file
+var _0xa9e0=['create','put','delete','destroy','exports','express','Router','../../components/auth/service','isAuthenticated','get','/:id','show','post'];(function(_0x3dd6cc,_0x203488){var _0x45c035=function(_0x58871e){while(--_0x58871e){_0x3dd6cc['push'](_0x3dd6cc['shift']());}};_0x45c035(++_0x203488);}(_0xa9e0,0x123));var _0x0a9e=function(_0x5e3b04,_0xbb6795){_0x5e3b04=_0x5e3b04-0x0;var _0x1fc44d=_0xa9e0[_0x5e3b04];return _0x1fc44d;};'use strict';var express=require(_0x0a9e('0x0'));var router=express[_0x0a9e('0x1')]();var auth=require(_0x0a9e('0x2'));var controller=require('./pm2.controller');router['get']('/',auth[_0x0a9e('0x3')](),controller['index']);router[_0x0a9e('0x4')](_0x0a9e('0x5'),auth[_0x0a9e('0x3')](),controller[_0x0a9e('0x6')]);router[_0x0a9e('0x7')]('/',auth['isAuthenticated'](),controller[_0x0a9e('0x8')]);router[_0x0a9e('0x9')](_0x0a9e('0x5'),auth['isAuthenticated'](),controller['update']);router[_0x0a9e('0xa')]('/:id',auth['isAuthenticated'](),controller[_0x0a9e('0xb')]);module[_0x0a9e('0xc')]=router;
\ No newline at end of file
index fbc5347..22e33b1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x556c=['info','index','list','then','reject','express','length','catch','show','body','script','join','chdir','dirname','start','Missing\x20name\x20and/or\x20path','update','restart','hasOwnProperty','params','Unknown\x20status','dump','Unknown\x20id','../../config/pm2','../../config/logger','path','child_process','exec','sendStatus','status','json','error','stack','name','send','npm\x20install'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x556c,0xa7));var _0xc556=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x556c[_0x20a584];return _0x4b41a8;};'use strict';var _=require('lodash');var pm2=require(_0xc556('0x0'));var logger=require(_0xc556('0x1'))('api');var path=require(_0xc556('0x2'));var exec=require(_0xc556('0x3'))[_0xc556('0x4')];var BPromise=require('bluebird');function handleEntityNotFound(_0x5c702d,_0x113ce8){return function(_0x33a522){if(!_0x33a522){_0x5c702d[_0xc556('0x5')](0x194);;}return _0x33a522;};}function respondWithResult(_0x1dab9e,_0xff5fc){_0xff5fc=_0xff5fc||0xc8;return function(_0x478de2){if(_0x478de2){return _0x1dab9e[_0xc556('0x6')](_0xff5fc)[_0xc556('0x7')](_0x478de2);}return null;};}function handleError(_0x41c829,_0x4c68ee){_0x4c68ee=_0x4c68ee||0x1f4;return function(_0x56bdfc){logger[_0xc556('0x8')](_0x56bdfc[_0xc556('0x9')]);if(_0x56bdfc['name']){delete _0x56bdfc[_0xc556('0xa')];}_0x41c829[_0xc556('0x6')](_0x4c68ee)[_0xc556('0xb')](_0x56bdfc);};}function execChildProcess(){return new BPromise(function(_0x209b1b,_0x476f30){exec(_0xc556('0xc'),function(_0x3fc735,_0x5e4ad3,_0x2ce1e2){logger[_0xc556('0xd')](_0x5e4ad3);logger[_0xc556('0xd')](_0x2ce1e2);if(_0x3fc735){logger[_0xc556('0x8')](_0x3fc735);return _0x476f30(_0x3fc735);}return _0x209b1b(_0x5e4ad3);});});}exports[_0xc556('0xe')]=function(_0x2861ad,_0x1cd23c){return pm2[_0xc556('0xf')]()[_0xc556('0x10')](function(_0x5a4f58){if(_0x5a4f58){var _0x37268c=_[_0xc556('0x11')](_0x5a4f58,function(_0x1ba416){return _0x1ba416[_0xc556('0xa')]===_0xc556('0x12')||_0x1ba416[_0xc556('0xa')]==='motion2';});return{'rows':_0x37268c,'count':_0x37268c[_0xc556('0x13')]};}return null;})['then'](respondWithResult(_0x1cd23c,null))[_0xc556('0x14')](handleError(_0x1cd23c,null));};exports[_0xc556('0x15')]=function(_0x4d8d93,_0x376254){return pm2['describe'](_0x4d8d93['params']['id'])[_0xc556('0x10')](respondWithResult(_0x376254,null))[_0xc556('0x10')](handleEntityNotFound(_0x376254,null))['catch'](handleError(_0x376254,null));};exports['create']=function(_0x449905,_0x3a1134){if(_0x449905[_0xc556('0x16')][_0xc556('0xa')]&&_0x449905[_0xc556('0x16')][_0xc556('0x17')]){var _0x58f7d1=path[_0xc556('0x18')](__dirname,'../../files/plugins',_0x449905[_0xc556('0x16')][_0xc556('0x17')]);var _0xd24557=process['cwd']();process[_0xc556('0x19')](path[_0xc556('0x1a')](_0x58f7d1));return execChildProcess()['then'](function(_0x56ec1c){process[_0xc556('0x19')](_0xd24557);return pm2[_0xc556('0x1b')]({'name':_0x449905[_0xc556('0x16')]['name'],'script':_0x58f7d1});})[_0xc556('0x10')](function(_0x1a1541){pm2['dump']();return _0x1a1541[0x0];})[_0xc556('0x10')](respondWithResult(_0x3a1134,0xc9))[_0xc556('0x14')](handleError(_0x3a1134,null));}else{return _0x3a1134[_0xc556('0x6')](0x1f4)[_0xc556('0xb')]({'message':_0xc556('0x1c')});}};exports[_0xc556('0x1d')]=function(_0x1a6a4d,_0x42484d){if(_0x1a6a4d[_0xc556('0x16')]['id']){delete _0x1a6a4d['body']['id'];}var _0x2ed954={'online':_0xc556('0x1e'),'stopped':'stop'};if(_0x2ed954[_0xc556('0x1f')](_0x1a6a4d[_0xc556('0x16')][_0xc556('0x6')])){return pm2[_0x2ed954[_0x1a6a4d[_0xc556('0x16')][_0xc556('0x6')]]](_0x1a6a4d[_0xc556('0x20')]['id'])[_0xc556('0x10')](respondWithResult(_0x42484d,0xc8))[_0xc556('0x14')](handleError(_0x42484d,null));}else{return _0x42484d[_0xc556('0x6')](0x1f4)[_0xc556('0xb')]({'message':_0xc556('0x21')});}};exports['destroy']=function(_0x2f1044,_0x3d4d30){if(_0x2f1044[_0xc556('0x16')]['id']){delete _0x2f1044['body']['id'];}if(_0x2f1044[_0xc556('0x20')]['id']){return pm2['delete'](_0x2f1044[_0xc556('0x20')]['id'])['then'](function(_0x3e91d1){pm2[_0xc556('0x22')]();return _0x3e91d1[0x0];})[_0xc556('0x10')](respondWithResult(_0x3d4d30,null))[_0xc556('0x14')](handleError(_0x3d4d30,null));}else{return _0x3d4d30[_0xc556('0x6')](0x1f4)[_0xc556('0xb')]({'message':_0xc556('0x23')});}};
\ No newline at end of file
+var _0xfa23=['dirname','chdir','start','send','Missing\x20name\x20and/or\x20path','update','restart','stop','params','Unknown\x20status','delete','dump','Unknown\x20id','lodash','../../config/logger','api','path','child_process','exec','bluebird','sendStatus','status','error','name','npm\x20install','info','index','reject','express','motion2','then','catch','describe','create','body','script','../../files/plugins','cwd'];(function(_0x50a0c2,_0x4befab){var _0x5ebadd=function(_0x3a3342){while(--_0x3a3342){_0x50a0c2['push'](_0x50a0c2['shift']());}};_0x5ebadd(++_0x4befab);}(_0xfa23,0x1d5));var _0x3fa2=function(_0x247e76,_0x404f2b){_0x247e76=_0x247e76-0x0;var _0x4aaac1=_0xfa23[_0x247e76];return _0x4aaac1;};'use strict';var _=require(_0x3fa2('0x0'));var pm2=require('../../config/pm2');var logger=require(_0x3fa2('0x1'))(_0x3fa2('0x2'));var path=require(_0x3fa2('0x3'));var exec=require(_0x3fa2('0x4'))[_0x3fa2('0x5')];var BPromise=require(_0x3fa2('0x6'));function handleEntityNotFound(_0x2457b6,_0x586e64){return function(_0xdba7bc){if(!_0xdba7bc){_0x2457b6[_0x3fa2('0x7')](0x194);;}return _0xdba7bc;};}function respondWithResult(_0x745841,_0x45c1b1){_0x45c1b1=_0x45c1b1||0xc8;return function(_0x3b4278){if(_0x3b4278){return _0x745841[_0x3fa2('0x8')](_0x45c1b1)['json'](_0x3b4278);}return null;};}function handleError(_0x381dbe,_0x273474){_0x273474=_0x273474||0x1f4;return function(_0x5d648c){logger[_0x3fa2('0x9')](_0x5d648c['stack']);if(_0x5d648c[_0x3fa2('0xa')]){delete _0x5d648c['name'];}_0x381dbe[_0x3fa2('0x8')](_0x273474)['send'](_0x5d648c);};}function execChildProcess(){return new BPromise(function(_0x2ca97e,_0x3869b3){exec(_0x3fa2('0xb'),function(_0x293b1f,_0x44feda,_0x13b465){logger[_0x3fa2('0xc')](_0x44feda);logger[_0x3fa2('0xc')](_0x13b465);if(_0x293b1f){logger['error'](_0x293b1f);return _0x3869b3(_0x293b1f);}return _0x2ca97e(_0x44feda);});});}exports[_0x3fa2('0xd')]=function(_0x4df352,_0x181758){return pm2['list']()['then'](function(_0x579bf0){if(_0x579bf0){var _0x4a6e15=_[_0x3fa2('0xe')](_0x579bf0,function(_0x1d0a73){return _0x1d0a73['name']===_0x3fa2('0xf')||_0x1d0a73[_0x3fa2('0xa')]===_0x3fa2('0x10');});return{'rows':_0x4a6e15,'count':_0x4a6e15['length']};}return null;})[_0x3fa2('0x11')](respondWithResult(_0x181758,null))[_0x3fa2('0x12')](handleError(_0x181758,null));};exports['show']=function(_0x19fc1d,_0x40f673){return pm2[_0x3fa2('0x13')](_0x19fc1d['params']['id'])[_0x3fa2('0x11')](respondWithResult(_0x40f673,null))['then'](handleEntityNotFound(_0x40f673,null))[_0x3fa2('0x12')](handleError(_0x40f673,null));};exports[_0x3fa2('0x14')]=function(_0x33d85c,_0x43680a){if(_0x33d85c[_0x3fa2('0x15')]['name']&&_0x33d85c['body'][_0x3fa2('0x16')]){var _0x59d350=path['join'](__dirname,_0x3fa2('0x17'),_0x33d85c['body'][_0x3fa2('0x16')]);var _0x54385a=process[_0x3fa2('0x18')]();process['chdir'](path[_0x3fa2('0x19')](_0x59d350));return execChildProcess()[_0x3fa2('0x11')](function(_0x1ad56f){process[_0x3fa2('0x1a')](_0x54385a);return pm2[_0x3fa2('0x1b')]({'name':_0x33d85c[_0x3fa2('0x15')][_0x3fa2('0xa')],'script':_0x59d350});})['then'](function(_0x4f0e9e){pm2['dump']();return _0x4f0e9e[0x0];})['then'](respondWithResult(_0x43680a,0xc9))[_0x3fa2('0x12')](handleError(_0x43680a,null));}else{return _0x43680a['status'](0x1f4)[_0x3fa2('0x1c')]({'message':_0x3fa2('0x1d')});}};exports[_0x3fa2('0x1e')]=function(_0x486754,_0x401446){if(_0x486754['body']['id']){delete _0x486754[_0x3fa2('0x15')]['id'];}var _0x4b431e={'online':_0x3fa2('0x1f'),'stopped':_0x3fa2('0x20')};if(_0x4b431e['hasOwnProperty'](_0x486754[_0x3fa2('0x15')][_0x3fa2('0x8')])){return pm2[_0x4b431e[_0x486754['body'][_0x3fa2('0x8')]]](_0x486754[_0x3fa2('0x21')]['id'])[_0x3fa2('0x11')](respondWithResult(_0x401446,0xc8))[_0x3fa2('0x12')](handleError(_0x401446,null));}else{return _0x401446[_0x3fa2('0x8')](0x1f4)['send']({'message':_0x3fa2('0x22')});}};exports['destroy']=function(_0x49b744,_0x3b8ef7){if(_0x49b744[_0x3fa2('0x15')]['id']){delete _0x49b744['body']['id'];}if(_0x49b744[_0x3fa2('0x21')]['id']){return pm2[_0x3fa2('0x23')](_0x49b744[_0x3fa2('0x21')]['id'])[_0x3fa2('0x11')](function(_0x46256c){pm2[_0x3fa2('0x24')]();return _0x46256c[0x0];})[_0x3fa2('0x11')](respondWithResult(_0x3b8ef7,null))[_0x3fa2('0x12')](handleError(_0x3b8ef7,null));}else{return _0x3b8ef7['status'](0x1f4)[_0x3fa2('0x1c')]({'message':_0x3fa2('0x25')});}};
\ No newline at end of file
index 7a4e0b8..850d32b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7eff=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','util','path','connect-timeout'];(function(_0x3ba924,_0x3b99f0){var _0x4cc1df=function(_0x15bf28){while(--_0x15bf28){_0x3ba924['push'](_0x3ba924['shift']());}};_0x4cc1df(++_0x3b99f0);}(_0x7eff,0x162));var _0xf7ef=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x7eff[_0x321bb2];return _0x9c12ed;};'use strict';var multer=require('multer');var util=require(_0xf7ef('0x0'));var path=require(_0xf7ef('0x1'));var timeout=require(_0xf7ef('0x2'));var express=require('express');var router=express[_0xf7ef('0x3')]();var auth=require(_0xf7ef('0x4'));var interaction=require(_0xf7ef('0x5'));var config=require(_0xf7ef('0x6'));module['exports']=router;
\ No newline at end of file
+var _0x83d0=['../../components/interaction/service','multer','util','path','connect-timeout','express','Router'];(function(_0x59b07b,_0x441915){var _0x187631=function(_0x199c30){while(--_0x199c30){_0x59b07b['push'](_0x59b07b['shift']());}};_0x187631(++_0x441915);}(_0x83d0,0xb7));var _0x083d=function(_0x3d987d,_0x522e0e){_0x3d987d=_0x3d987d-0x0;var _0x21f68a=_0x83d0[_0x3d987d];return _0x21f68a;};'use strict';var multer=require(_0x083d('0x0'));var util=require(_0x083d('0x1'));var path=require(_0x083d('0x2'));var timeout=require(_0x083d('0x3'));var express=require(_0x083d('0x4'));var router=express[_0x083d('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x083d('0x6'));var config=require('../../config/environment');module['exports']=router;
\ No newline at end of file
index b8d043c..1f2270f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x53dc=['INTEGER','STRING','DATE','sequelize','exports'];(function(_0x18894b,_0xb20093){var _0x4b3230=function(_0x434091){while(--_0x434091){_0x18894b['push'](_0x18894b['shift']());}};_0x4b3230(++_0xb20093);}(_0x53dc,0x12f));var _0xc53d=function(_0x3c074f,_0x3634ec){_0x3c074f=_0x3c074f-0x0;var _0x12e266=_0x53dc[_0x3c074f];return _0x12e266;};'use strict';var Sequelize=require(_0xc53d('0x0'));module[_0xc53d('0x1')]={'state':{'type':Sequelize[_0xc53d('0x2')](0x2)},'statedesc':{'type':Sequelize[_0xc53d('0x3')]},'scheduledat':{'type':Sequelize[_0xc53d('0x4')]},'uniqueid':{'type':Sequelize['STRING']},'starttime':{'type':Sequelize[_0xc53d('0x4')]},'responsetime':{'type':Sequelize[_0xc53d('0x4')]},'ringtime':{'type':Sequelize[_0xc53d('0x2')],'defaultValue':0x0},'campaign':{'type':Sequelize[_0xc53d('0x3')]},'campaigntype':{'type':Sequelize[_0xc53d('0x3')]},'membername':{'type':Sequelize[_0xc53d('0x3')]}};
\ No newline at end of file
+var _0xeab4=['sequelize','exports','INTEGER','DATE','STRING'];(function(_0x4e8947,_0x5ca04d){var _0x29abde=function(_0x4c5158){while(--_0x4c5158){_0x4e8947['push'](_0x4e8947['shift']());}};_0x29abde(++_0x5ca04d);}(_0xeab4,0x1ae));var _0x4eab=function(_0x5b4359,_0x319ac7){_0x5b4359=_0x5b4359-0x0;var _0x1ecdd7=_0xeab4[_0x5b4359];return _0x1ecdd7;};'use strict';var Sequelize=require(_0x4eab('0x0'));module[_0x4eab('0x1')]={'state':{'type':Sequelize[_0x4eab('0x2')](0x2)},'statedesc':{'type':Sequelize['STRING']},'scheduledat':{'type':Sequelize[_0x4eab('0x3')]},'uniqueid':{'type':Sequelize[_0x4eab('0x4')]},'starttime':{'type':Sequelize['DATE']},'responsetime':{'type':Sequelize[_0x4eab('0x3')]},'ringtime':{'type':Sequelize[_0x4eab('0x2')],'defaultValue':0x0},'campaign':{'type':Sequelize[_0x4eab('0x4')]},'campaigntype':{'type':Sequelize[_0x4eab('0x4')]},'membername':{'type':Sequelize[_0x4eab('0x4')]}};
\ No newline at end of file
index 3f2519c..01bc9d2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x10db=['path','rimraf','../../config/environment','./reportAgentPreview.attributes','exports','define','ReportAgentPreview','report_agent_preview','lodash','util','../../config/logger','moment','bluebird','request-promise'];(function(_0x470e67,_0x4a596d){var _0x28bbde=function(_0x1bbf56){while(--_0x1bbf56){_0x470e67['push'](_0x470e67['shift']());}};_0x28bbde(++_0x4a596d);}(_0x10db,0x104));var _0xb10d=function(_0x22fd9b,_0x462500){_0x22fd9b=_0x22fd9b-0x0;var _0x42f120=_0x10db[_0x22fd9b];return _0x42f120;};'use strict';var _=require(_0xb10d('0x0'));var util=require(_0xb10d('0x1'));var logger=require(_0xb10d('0x2'))('api');var moment=require(_0xb10d('0x3'));var BPromise=require(_0xb10d('0x4'));var rp=require(_0xb10d('0x5'));var fs=require('fs');var path=require(_0xb10d('0x6'));var rimraf=require(_0xb10d('0x7'));var config=require(_0xb10d('0x8'));var attributes=require(_0xb10d('0x9'));module[_0xb10d('0xa')]=function(_0x20304c,_0x5ef839){return _0x20304c[_0xb10d('0xb')](_0xb10d('0xc'),attributes,{'tableName':_0xb10d('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6aac=['../../config/environment','exports','define','ReportAgentPreview','util','../../config/logger','api','moment','bluebird'];(function(_0x53ecfa,_0x1a1a01){var _0x302607=function(_0x1435c7){while(--_0x1435c7){_0x53ecfa['push'](_0x53ecfa['shift']());}};_0x302607(++_0x1a1a01);}(_0x6aac,0x13f));var _0xc6aa=function(_0x4cc5a9,_0x198cd3){_0x4cc5a9=_0x4cc5a9-0x0;var _0x14c452=_0x6aac[_0x4cc5a9];return _0x14c452;};'use strict';var _=require('lodash');var util=require(_0xc6aa('0x0'));var logger=require(_0xc6aa('0x1'))(_0xc6aa('0x2'));var moment=require(_0xc6aa('0x3'));var BPromise=require(_0xc6aa('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0xc6aa('0x5'));var attributes=require('./reportAgentPreview.attributes');module[_0xc6aa('0x6')]=function(_0x5a1149,_0x440eec){return _0x5a1149[_0xc6aa('0x7')](_0xc6aa('0x8'),attributes,{'tableName':'report_agent_preview','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 7482a9c..6f30f88 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x966b=['http','request','then','info','request\x20sent','debug','ReportAgentPreview,\x20%s,\x20%s,\x20%s','stringify','error','ReportAgentPreview,\x20%s,\x20%s','message','result','catch','CreateReportAgentPreview','ReportAgentPreview','create','body','options','raw','lodash','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client'];(function(_0x3b5ad9,_0x223867){var _0x611ae9=function(_0x1c5e28){while(--_0x1c5e28){_0x3b5ad9['push'](_0x3b5ad9['shift']());}};_0x611ae9(++_0x223867);}(_0x966b,0x19b));var _0xb966=function(_0x3b0358,_0x33128f){_0x3b0358=_0x3b0358-0x0;var _0x4361fa=_0x966b[_0x3b0358];return _0x4361fa;};'use strict';var _=require(_0xb966('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xb966('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xb966('0x2'));var db=require(_0xb966('0x3'))['db'];var utils=require(_0xb966('0x4'));var logger=require(_0xb966('0x5'))(_0xb966('0x6'));var config=require(_0xb966('0x7'));var jayson=require('jayson/promise');var client=jayson[_0xb966('0x8')][_0xb966('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x1dc24c,_0x238d24,_0x994c02){return new BPromise(function(_0x29a2ea,_0x5ab7bf){return client[_0xb966('0xa')](_0x1dc24c,_0x994c02)[_0xb966('0xb')](function(_0x1da9e5){logger[_0xb966('0xc')]('ReportAgentPreview,\x20%s,\x20%s',_0x238d24,_0xb966('0xd'));logger[_0xb966('0xe')](_0xb966('0xf'),_0x238d24,_0xb966('0xd'),JSON[_0xb966('0x10')](_0x1da9e5));if(_0x1da9e5[_0xb966('0x11')]){if(_0x1da9e5[_0xb966('0x11')]['code']===0x1f4){logger[_0xb966('0x11')](_0xb966('0x12'),_0x238d24,_0x1da9e5[_0xb966('0x11')][_0xb966('0x13')]);return _0x5ab7bf(_0x1da9e5[_0xb966('0x11')][_0xb966('0x13')]);}logger[_0xb966('0x11')]('ReportAgentPreview,\x20%s,\x20%s',_0x238d24,_0x1da9e5[_0xb966('0x11')][_0xb966('0x13')]);return _0x29a2ea(_0x1da9e5[_0xb966('0x11')][_0xb966('0x13')]);}else{logger[_0xb966('0xc')](_0xb966('0x12'),_0x238d24,_0xb966('0xd'));_0x29a2ea(_0x1da9e5[_0xb966('0x14')][_0xb966('0x13')]);}})[_0xb966('0x15')](function(_0x561058){logger['error'](_0xb966('0x12'),_0x238d24,_0x561058);_0x5ab7bf(_0x561058);});});}exports[_0xb966('0x16')]=function(_0x8ec5e5){var _0x140d76=this;return new Promise(function(_0x1d0fe1,_0x28ea60){return db[_0xb966('0x17')][_0xb966('0x18')](_0x8ec5e5[_0xb966('0x19')],{'raw':_0x8ec5e5['options']?_0x8ec5e5[_0xb966('0x1a')][_0xb966('0x1b')]===undefined?!![]:![]:!![]})['then'](function(_0x1367ee){logger[_0xb966('0xc')](_0xb966('0x16'),_0x8ec5e5);logger[_0xb966('0xe')](_0xb966('0x16'),_0x8ec5e5,JSON[_0xb966('0x10')](_0x1367ee));_0x1d0fe1(_0x1367ee);})[_0xb966('0x15')](function(_0xc3cf3c){logger[_0xb966('0x11')](_0xb966('0x16'),_0xc3cf3c[_0xb966('0x13')],_0x8ec5e5);_0x28ea60(_0x140d76[_0xb966('0x11')](0x1f4,_0xc3cf3c[_0xb966('0x13')]));});});};
\ No newline at end of file
+var _0x93c8=['../../config/logger','rpc','../../config/environment','jayson/promise','client','then','ReportAgentPreview,\x20%s,\x20%s','request\x20sent','debug','ReportAgentPreview,\x20%s,\x20%s,\x20%s','error','message','info','result','catch','CreateReportAgentPreview','ReportAgentPreview','create','options','raw','stringify','lodash','bluebird','randomstring','ioredis','../../mysqldb'];(function(_0x20a6b5,_0x4695fd){var _0x5eeead=function(_0x1df9c9){while(--_0x1df9c9){_0x20a6b5['push'](_0x20a6b5['shift']());}};_0x5eeead(++_0x4695fd);}(_0x93c8,0x119));var _0x893c=function(_0x465028,_0x4570ac){_0x465028=_0x465028-0x0;var _0xb783d4=_0x93c8[_0x465028];return _0xb783d4;};'use strict';var _=require(_0x893c('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x893c('0x1'));var rs=require(_0x893c('0x2'));var fs=require('fs');var Redis=require(_0x893c('0x3'));var db=require(_0x893c('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x893c('0x5'))(_0x893c('0x6'));var config=require(_0x893c('0x7'));var jayson=require(_0x893c('0x8'));var client=jayson[_0x893c('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x949a9c,_0x53a511,_0x223a8d){return new BPromise(function(_0x11f1a5,_0x41921e){return client['request'](_0x949a9c,_0x223a8d)[_0x893c('0xa')](function(_0x4b853f){logger['info'](_0x893c('0xb'),_0x53a511,_0x893c('0xc'));logger[_0x893c('0xd')](_0x893c('0xe'),_0x53a511,_0x893c('0xc'),JSON['stringify'](_0x4b853f));if(_0x4b853f['error']){if(_0x4b853f['error']['code']===0x1f4){logger[_0x893c('0xf')](_0x893c('0xb'),_0x53a511,_0x4b853f[_0x893c('0xf')][_0x893c('0x10')]);return _0x41921e(_0x4b853f[_0x893c('0xf')]['message']);}logger[_0x893c('0xf')](_0x893c('0xb'),_0x53a511,_0x4b853f[_0x893c('0xf')][_0x893c('0x10')]);return _0x11f1a5(_0x4b853f[_0x893c('0xf')][_0x893c('0x10')]);}else{logger[_0x893c('0x11')](_0x893c('0xb'),_0x53a511,_0x893c('0xc'));_0x11f1a5(_0x4b853f[_0x893c('0x12')][_0x893c('0x10')]);}})[_0x893c('0x13')](function(_0x42ef18){logger[_0x893c('0xf')](_0x893c('0xb'),_0x53a511,_0x42ef18);_0x41921e(_0x42ef18);});});}exports[_0x893c('0x14')]=function(_0x5b316c){var _0x5079fb=this;return new Promise(function(_0x13e61c,_0x2cefe2){return db[_0x893c('0x15')][_0x893c('0x16')](_0x5b316c['body'],{'raw':_0x5b316c[_0x893c('0x17')]?_0x5b316c[_0x893c('0x17')][_0x893c('0x18')]===undefined?!![]:![]:!![]})[_0x893c('0xa')](function(_0x341e45){logger[_0x893c('0x11')]('CreateReportAgentPreview',_0x5b316c);logger[_0x893c('0xd')](_0x893c('0x14'),_0x5b316c,JSON[_0x893c('0x19')](_0x341e45));_0x13e61c(_0x341e45);})[_0x893c('0x13')](function(_0x336b0e){logger[_0x893c('0xf')]('CreateReportAgentPreview',_0x336b0e[_0x893c('0x10')],_0x5b316c);_0x2cefe2(_0x5079fb[_0x893c('0xf')](0x1f4,_0x336b0e['message']));});});};
\ No newline at end of file
index 5af3a6d..788a540 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbfc6=['/outbound','agents','put','/agents/:id/capacity','telephones','/trunks','/campaigns','campaigns','faxAccounts','/chat/queues/waitinginteractions','mailQueuesWaitingInteractions','/openchannel/queues/waitinginteractions','openchannelQueuesWaitingInteractions','/fax/queues/waitinginteractions','faxQueuesWaitingInteractions','post','mail','/mail/queues/:id','showMailQueues','/chat/queues/:id/notify','queueNotify','/chat/queues/:id','fax','/fax/queues/:id','showFaxQueues','openchannel','/openchannel/queues/:id','showOpenchannelQueues','/sms/queues/:id/notify','sms','showSmsQueues','/agents/:id/notify','exports','multer','util','path','express','Router','../../components/auth/service','./rpc.controller','isAuthenticated','voiceChannels','get','/voice/channels/:uniqueid/mixmonitor','voiceChannelMixMonitor','/voice/channels/:uniqueid/stopmixmonitor','voiceChannelStopMixMonitor','voiceQueues','/chat/queues','chatQueues','mailQueues','/mail/accounts','mailAccounts','/openchannel/queues','openchannelQueues','/sms/queues','smsQueues','/fax/queues','faxQueues','/voice/queues/preview/:id','voiceQueuesChannels','/voice/queues/channels/:uniqueid','voiceQueuesChannel','/voice/queues/channels/:uniqueid/hangup','voiceQueuesChannelRedirect','/voice/queues/:id','showVoiceQueues'];(function(_0x6f6f18,_0x406aee){var _0x57c18c=function(_0x289369){while(--_0x289369){_0x6f6f18['push'](_0x6f6f18['shift']());}};_0x57c18c(++_0x406aee);}(_0xbfc6,0xea));var _0x6bfc=function(_0x1f01a4,_0x114239){_0x1f01a4=_0x1f01a4-0x0;var _0xd9dfac=_0xbfc6[_0x1f01a4];return _0xd9dfac;};'use strict';var multer=require(_0x6bfc('0x0'));var util=require(_0x6bfc('0x1'));var path=require(_0x6bfc('0x2'));var express=require(_0x6bfc('0x3'));var router=express[_0x6bfc('0x4')]();var auth=require(_0x6bfc('0x5'));var controller=require(_0x6bfc('0x6'));router['get']('/voice/channels',auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x8')]);router[_0x6bfc('0x9')](_0x6bfc('0xa'),auth[_0x6bfc('0x7')](),controller[_0x6bfc('0xb')]);router[_0x6bfc('0x9')](_0x6bfc('0xc'),auth[_0x6bfc('0x7')](),controller[_0x6bfc('0xd')]);router[_0x6bfc('0x9')]('/voice/queues',auth[_0x6bfc('0x7')](),controller[_0x6bfc('0xe')]);router['get'](_0x6bfc('0xf'),auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x10')]);router[_0x6bfc('0x9')]('/mail/queues',auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x11')]);router[_0x6bfc('0x9')](_0x6bfc('0x12'),auth['isAuthenticated'](),controller[_0x6bfc('0x13')]);router[_0x6bfc('0x9')](_0x6bfc('0x14'),auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x15')]);router[_0x6bfc('0x9')](_0x6bfc('0x16'),auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x17')]);router[_0x6bfc('0x9')](_0x6bfc('0x18'),auth['isAuthenticated'](),controller[_0x6bfc('0x19')]);router[_0x6bfc('0x9')](_0x6bfc('0x1a'),auth[_0x6bfc('0x7')](),controller['voiceQueuesPreview']);router[_0x6bfc('0x9')]('/voice/queues/channels',auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x1b')]);router['get'](_0x6bfc('0x1c'),auth['isAuthenticated'](),controller[_0x6bfc('0x1d')]);router[_0x6bfc('0x9')](_0x6bfc('0x1e'),auth[_0x6bfc('0x7')](),controller['voiceQueuesChannelHangup']);router[_0x6bfc('0x9')]('/voice/queues/channels/:uniqueid/redirect/:exten',auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x1f')]);router['get'](_0x6bfc('0x20'),auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x21')]);router[_0x6bfc('0x9')](_0x6bfc('0x22'),auth[_0x6bfc('0x7')](),controller['outbound']);router['get']('/outbound/channels',auth[_0x6bfc('0x7')](),controller['outboundChannels']);router[_0x6bfc('0x9')]('/agents',auth['isAuthenticated'](),controller[_0x6bfc('0x23')]);router[_0x6bfc('0x24')](_0x6bfc('0x25'),auth[_0x6bfc('0x7')](),controller['agentCapacity']);router['get']('/telephones',auth['isAuthenticated'](),controller[_0x6bfc('0x26')]);router['get'](_0x6bfc('0x27'),auth[_0x6bfc('0x7')](),controller['trunks']);router[_0x6bfc('0x9')](_0x6bfc('0x28'),auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x29')]);router[_0x6bfc('0x9')]('/fax/accounts',auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x2a')]);router[_0x6bfc('0x9')](_0x6bfc('0x2b'),auth['isAuthenticated'](),controller['chatQueuesWaitingInteractions']);router['get']('/mail/queues/waitinginteractions',auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x2c')]);router[_0x6bfc('0x9')](_0x6bfc('0x2d'),auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x2e')]);router[_0x6bfc('0x9')]('/sms/queues/waitinginteractions',auth['isAuthenticated'](),controller['smsQueuesWaitingInteractions']);router[_0x6bfc('0x9')](_0x6bfc('0x2f'),auth['isAuthenticated'](),controller[_0x6bfc('0x30')]);router[_0x6bfc('0x31')]('/mail/queues/:id/notify',auth['isAuthenticated'](),controller['queueNotify'](_0x6bfc('0x32')));router['get'](_0x6bfc('0x33'),auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x34')]);router[_0x6bfc('0x31')](_0x6bfc('0x35'),auth['isAuthenticated'](),controller[_0x6bfc('0x36')]('chat'));router[_0x6bfc('0x9')](_0x6bfc('0x37'),auth['isAuthenticated'](),controller['showChatQueues']);router[_0x6bfc('0x31')]('/fax/queues/:id/notify',auth['isAuthenticated'](),controller['queueNotify'](_0x6bfc('0x38')));router[_0x6bfc('0x9')](_0x6bfc('0x39'),auth['isAuthenticated'](),controller[_0x6bfc('0x3a')]);router['post']('/openchannel/queues/:id/notify',auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x36')](_0x6bfc('0x3b')));router[_0x6bfc('0x9')](_0x6bfc('0x3c'),auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x3d')]);router[_0x6bfc('0x31')](_0x6bfc('0x3e'),auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x36')](_0x6bfc('0x3f')));router[_0x6bfc('0x9')]('/sms/queues/:id',auth[_0x6bfc('0x7')](),controller[_0x6bfc('0x40')]);router[_0x6bfc('0x31')](_0x6bfc('0x41'),auth[_0x6bfc('0x7')](),controller['agentNotify']);module[_0x6bfc('0x42')]=router;
\ No newline at end of file
+var _0x18b8=['/mail/queues/waitinginteractions','openchannelQueuesWaitingInteractions','/sms/queues/waitinginteractions','smsQueuesWaitingInteractions','/fax/queues/waitinginteractions','post','/mail/queues/:id/notify','mail','/mail/queues/:id','showMailQueues','/chat/queues/:id/notify','queueNotify','chat','/chat/queues/:id','showChatQueues','/fax/queues/:id/notify','fax','/fax/queues/:id','/openchannel/queues/:id/notify','openchannel','/openchannel/queues/:id','/sms/queues/:id/notify','sms','showSmsQueues','/agents/:id/notify','agentNotify','exports','multer','path','express','Router','./rpc.controller','get','isAuthenticated','voiceChannels','/voice/channels/:uniqueid/mixmonitor','voiceChannelMixMonitor','/voice/channels/:uniqueid/stopmixmonitor','voiceChannelStopMixMonitor','/voice/queues','voiceQueues','chatQueues','/mail/accounts','mailAccounts','/sms/queues','smsQueues','/fax/queues','faxQueues','/voice/queues/preview/:id','/voice/queues/channels/:uniqueid','voiceQueuesChannel','/voice/queues/channels/:uniqueid/hangup','/voice/queues/channels/:uniqueid/redirect/:exten','/voice/queues/:id','showVoiceQueues','/outbound','outbound','/outbound/channels','outboundChannels','agents','agentCapacity','/telephones','telephones','/trunks','trunks','/campaigns','campaigns','/fax/accounts','faxAccounts','chatQueuesWaitingInteractions'];(function(_0x57a594,_0x4df523){var _0x34428c=function(_0x1fc32e){while(--_0x1fc32e){_0x57a594['push'](_0x57a594['shift']());}};_0x34428c(++_0x4df523);}(_0x18b8,0x1bf));var _0x818b=function(_0xcf9bae,_0x1c6852){_0xcf9bae=_0xcf9bae-0x0;var _0x5212a5=_0x18b8[_0xcf9bae];return _0x5212a5;};'use strict';var multer=require(_0x818b('0x0'));var util=require('util');var path=require(_0x818b('0x1'));var express=require(_0x818b('0x2'));var router=express[_0x818b('0x3')]();var auth=require('../../components/auth/service');var controller=require(_0x818b('0x4'));router[_0x818b('0x5')]('/voice/channels',auth[_0x818b('0x6')](),controller[_0x818b('0x7')]);router[_0x818b('0x5')](_0x818b('0x8'),auth[_0x818b('0x6')](),controller[_0x818b('0x9')]);router[_0x818b('0x5')](_0x818b('0xa'),auth[_0x818b('0x6')](),controller[_0x818b('0xb')]);router[_0x818b('0x5')](_0x818b('0xc'),auth[_0x818b('0x6')](),controller[_0x818b('0xd')]);router[_0x818b('0x5')]('/chat/queues',auth[_0x818b('0x6')](),controller[_0x818b('0xe')]);router['get']('/mail/queues',auth[_0x818b('0x6')](),controller['mailQueues']);router[_0x818b('0x5')](_0x818b('0xf'),auth[_0x818b('0x6')](),controller[_0x818b('0x10')]);router[_0x818b('0x5')]('/openchannel/queues',auth[_0x818b('0x6')](),controller['openchannelQueues']);router[_0x818b('0x5')](_0x818b('0x11'),auth[_0x818b('0x6')](),controller[_0x818b('0x12')]);router[_0x818b('0x5')](_0x818b('0x13'),auth['isAuthenticated'](),controller[_0x818b('0x14')]);router[_0x818b('0x5')](_0x818b('0x15'),auth[_0x818b('0x6')](),controller['voiceQueuesPreview']);router['get']('/voice/queues/channels',auth[_0x818b('0x6')](),controller['voiceQueuesChannels']);router[_0x818b('0x5')](_0x818b('0x16'),auth[_0x818b('0x6')](),controller[_0x818b('0x17')]);router['get'](_0x818b('0x18'),auth['isAuthenticated'](),controller['voiceQueuesChannelHangup']);router[_0x818b('0x5')](_0x818b('0x19'),auth['isAuthenticated'](),controller['voiceQueuesChannelRedirect']);router[_0x818b('0x5')](_0x818b('0x1a'),auth['isAuthenticated'](),controller[_0x818b('0x1b')]);router[_0x818b('0x5')](_0x818b('0x1c'),auth[_0x818b('0x6')](),controller[_0x818b('0x1d')]);router[_0x818b('0x5')](_0x818b('0x1e'),auth[_0x818b('0x6')](),controller[_0x818b('0x1f')]);router[_0x818b('0x5')]('/agents',auth['isAuthenticated'](),controller[_0x818b('0x20')]);router['put']('/agents/:id/capacity',auth[_0x818b('0x6')](),controller[_0x818b('0x21')]);router['get'](_0x818b('0x22'),auth['isAuthenticated'](),controller[_0x818b('0x23')]);router[_0x818b('0x5')](_0x818b('0x24'),auth[_0x818b('0x6')](),controller[_0x818b('0x25')]);router[_0x818b('0x5')](_0x818b('0x26'),auth[_0x818b('0x6')](),controller[_0x818b('0x27')]);router[_0x818b('0x5')](_0x818b('0x28'),auth['isAuthenticated'](),controller[_0x818b('0x29')]);router[_0x818b('0x5')]('/chat/queues/waitinginteractions',auth['isAuthenticated'](),controller[_0x818b('0x2a')]);router[_0x818b('0x5')](_0x818b('0x2b'),auth[_0x818b('0x6')](),controller['mailQueuesWaitingInteractions']);router[_0x818b('0x5')]('/openchannel/queues/waitinginteractions',auth['isAuthenticated'](),controller[_0x818b('0x2c')]);router['get'](_0x818b('0x2d'),auth['isAuthenticated'](),controller[_0x818b('0x2e')]);router['get'](_0x818b('0x2f'),auth[_0x818b('0x6')](),controller['faxQueuesWaitingInteractions']);router[_0x818b('0x30')](_0x818b('0x31'),auth['isAuthenticated'](),controller['queueNotify'](_0x818b('0x32')));router[_0x818b('0x5')](_0x818b('0x33'),auth[_0x818b('0x6')](),controller[_0x818b('0x34')]);router[_0x818b('0x30')](_0x818b('0x35'),auth[_0x818b('0x6')](),controller[_0x818b('0x36')](_0x818b('0x37')));router[_0x818b('0x5')](_0x818b('0x38'),auth[_0x818b('0x6')](),controller[_0x818b('0x39')]);router[_0x818b('0x30')](_0x818b('0x3a'),auth['isAuthenticated'](),controller[_0x818b('0x36')](_0x818b('0x3b')));router[_0x818b('0x5')](_0x818b('0x3c'),auth['isAuthenticated'](),controller['showFaxQueues']);router[_0x818b('0x30')](_0x818b('0x3d'),auth[_0x818b('0x6')](),controller['queueNotify'](_0x818b('0x3e')));router[_0x818b('0x5')](_0x818b('0x3f'),auth[_0x818b('0x6')](),controller['showOpenchannelQueues']);router[_0x818b('0x30')](_0x818b('0x40'),auth['isAuthenticated'](),controller[_0x818b('0x36')](_0x818b('0x41')));router[_0x818b('0x5')]('/sms/queues/:id',auth[_0x818b('0x6')](),controller[_0x818b('0x42')]);router['post'](_0x818b('0x43'),auth[_0x818b('0x6')](),controller[_0x818b('0x44')]);module[_0x818b('0x45')]=router;
\ No newline at end of file
index 86b2a7c..051f1ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xce53=['\x20Message\x20not\x20found','update','Interaction','MessageId','InteractionId','TransferReport','create','Start','queue','agentNotify','isNil','channel','Channel\x20field\x20is\x20mandatory','Agent\x20not\x20found','From','agentTransferTimeout','*,*,*,*','lodash','util','../../mysqldb','api','jayson/promise','client','http','request','then','error','code','message','status','json','sendStatus','stack','name','rows','find','voiceChannels','query','VoiceChannelMixMonitor','merge','params','catch','VoiceChannelStopMixMonitor','voiceQueues','showVoiceQueues','VoiceQueues','voiceQueuesPreview','voiceQueuesChannels','voiceQueuesChannel','voiceQueuesChannelHangup','voiceQueuesChannelRedirect','VoiceQueuesChannelRedirect','Outbound','OutboundChannels','Agents','agentCapacity','body','interaction','user','hasOwnProperty','MemberReport','findAll','INTERACTION','format','YYYY-MM-DD\x20HH:mm:ss','length','updateAttributes','findOrCreate','interface','SIP/%s','agent','internal','AgentCapacity','capacity','telephones','trunks','Trunks','Campaigns','chatQueues','showChatQueues','ChatQueues','mailQueues','MailQueues','showMailQueues','MailAccounts','openchannelQueues','showOpenchannelQueues','OpenchannelQueues','smsQueues','SmsQueues','faxQueues','FaxQueues','showFaxQueues','FaxAccounts','chatQueuesWaitingInteractions','ChatQueuesWaitingInteractions','mailQueuesWaitingInteractions','MailQueuesWaitingInteractions','OpenchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions','SmsQueuesWaitingInteractions','faxQueuesWaitingInteractions','FaxQueuesWaitingInteractions','queueNotify','capitalize','chat','Website','\x20Queue\x20not\x20found','Message','findOne','messageId','Account'];(function(_0x4c4e59,_0x37c255){var _0x32aed1=function(_0x236969){while(--_0x236969){_0x4c4e59['push'](_0x4c4e59['shift']());}};_0x32aed1(++_0x37c255);}(_0xce53,0x81));var _0x3ce5=function(_0x50c36b,_0x210552){_0x50c36b=_0x50c36b-0x0;var _0x3c861c=_0xce53[_0x50c36b];return _0x3c861c;};'use strict';var BPromise=require('bluebird');var moment=require('moment');var _=require(_0x3ce5('0x0'));var util=require(_0x3ce5('0x1'));var db=require(_0x3ce5('0x2'))['db'];var logger=require('../../config/logger')(_0x3ce5('0x3'));var jayson=require(_0x3ce5('0x4'));var amiClient=jayson[_0x3ce5('0x5')][_0x3ce5('0x6')]({'port':0x232a});var mailClient=jayson[_0x3ce5('0x5')]['http']({'port':0x232b});var routingClient=jayson[_0x3ce5('0x5')][_0x3ce5('0x6')]({'port':0x232c});function respondWithRpcPromise(_0x7f66c1,_0x59559a,_0x3d05f8){return new BPromise(function(_0x142d82,_0x5af0d9){var _0x1f2b5f=_0x3d05f8?_0x3d05f8:amiClient;return _0x1f2b5f[_0x3ce5('0x7')](_0x7f66c1,_0x59559a)[_0x3ce5('0x8')](function(_0x37cc6a){if(_0x37cc6a[_0x3ce5('0x9')]){if(_0x37cc6a['error'][_0x3ce5('0xa')]===0x1f4){return _0x5af0d9(_0x37cc6a[_0x3ce5('0x9')][_0x3ce5('0xb')]);}return _0x142d82(_0x37cc6a[_0x3ce5('0x9')][_0x3ce5('0xb')]);}else{_0x142d82(_0x37cc6a['result']);}})['catch'](function(_0x2bf2df){_0x5af0d9(_0x2bf2df);});});}function respondWithResult(_0x54cf16,_0x367536){_0x367536=_0x367536||0xc8;return function(_0x375c2c){if(_0x375c2c){return _0x54cf16[_0x3ce5('0xc')](_0x367536)[_0x3ce5('0xd')](_0x375c2c);}return _0x54cf16[_0x3ce5('0xe')](0x194);};}function handleError(_0x3a8811,_0x501851){_0x501851=_0x501851||0x1f4;return function(_0x418ae6){logger[_0x3ce5('0x9')](_0x418ae6[_0x3ce5('0xf')]);if(_0x418ae6[_0x3ce5('0x10')]){delete _0x418ae6[_0x3ce5('0x10')];}_0x3a8811[_0x3ce5('0xc')](_0x501851)['send'](_0x418ae6);};}function findById(_0x84ca3e){return function(_0x4b5598){if(!_['isNil'](_0x84ca3e)&&!_['isNil'](_0x4b5598)&&!_['isNil'](_0x4b5598[_0x3ce5('0x11')])){return _[_0x3ce5('0x12')](_0x4b5598[_0x3ce5('0x11')],function(_0x1a3536){return _0x1a3536['id']==_0x84ca3e;});}return null;};}exports[_0x3ce5('0x13')]=function(_0x4d159c,_0x244f8e){return respondWithRpcPromise('VoiceChannels',_0x4d159c[_0x3ce5('0x14')])[_0x3ce5('0x8')](respondWithResult(_0x244f8e,null))['catch'](handleError(_0x244f8e,null));};exports['voiceChannelMixMonitor']=function(_0x5790e0,_0x384c34){return respondWithRpcPromise(_0x3ce5('0x15'),_[_0x3ce5('0x16')](_0x5790e0[_0x3ce5('0x14')],_0x5790e0[_0x3ce5('0x17')]))[_0x3ce5('0x8')](respondWithResult(_0x384c34,null))[_0x3ce5('0x18')](handleError(_0x384c34,null));};exports['voiceChannelStopMixMonitor']=function(_0x3d9b75,_0x1d5124){return respondWithRpcPromise(_0x3ce5('0x19'),_['merge'](_0x3d9b75[_0x3ce5('0x14')],_0x3d9b75['params']))['then'](respondWithResult(_0x1d5124,null))[_0x3ce5('0x18')](handleError(_0x1d5124,null));};exports[_0x3ce5('0x1a')]=function(_0x1db87a,_0xca66b5){return respondWithRpcPromise('VoiceQueues',_0x1db87a['query'])[_0x3ce5('0x8')](respondWithResult(_0xca66b5,null))[_0x3ce5('0x18')](handleError(_0xca66b5,null));};exports[_0x3ce5('0x1b')]=function(_0x56e871,_0x14421a){return respondWithRpcPromise(_0x3ce5('0x1c'),_0x56e871[_0x3ce5('0x14')])[_0x3ce5('0x8')](findById(_0x56e871[_0x3ce5('0x17')]['id']))[_0x3ce5('0x8')](respondWithResult(_0x14421a,null))[_0x3ce5('0x18')](handleError(_0x14421a,null));};exports[_0x3ce5('0x1d')]=function(_0x422f53,_0x168f69){return respondWithRpcPromise('VoiceQueuesPreview',_['merge'](_0x422f53['query'],_0x422f53[_0x3ce5('0x17')]))['then'](respondWithResult(_0x168f69,null))[_0x3ce5('0x18')](handleError(_0x168f69,null));};exports[_0x3ce5('0x1e')]=function(_0x2c6301,_0x14f596){return respondWithRpcPromise('VoiceQueuesChannels',_0x2c6301['query'])[_0x3ce5('0x8')](respondWithResult(_0x14f596,null))[_0x3ce5('0x18')](handleError(_0x14f596,null));};exports[_0x3ce5('0x1f')]=function(_0x348324,_0x523510){return respondWithRpcPromise('VoiceQueuesChannel',_[_0x3ce5('0x16')](_0x348324[_0x3ce5('0x14')],_0x348324[_0x3ce5('0x17')]))[_0x3ce5('0x8')](respondWithResult(_0x523510,null))[_0x3ce5('0x18')](handleError(_0x523510,null));};exports[_0x3ce5('0x20')]=function(_0x52487e,_0x219eb7){return respondWithRpcPromise('VoiceQueuesChannelHangup',_['merge'](_0x52487e[_0x3ce5('0x14')],_0x52487e[_0x3ce5('0x17')]))['then'](respondWithResult(_0x219eb7,null))[_0x3ce5('0x18')](handleError(_0x219eb7,null));};exports[_0x3ce5('0x21')]=function(_0x1b3b36,_0x1bc695){return respondWithRpcPromise(_0x3ce5('0x22'),_[_0x3ce5('0x16')](_0x1b3b36[_0x3ce5('0x14')],_0x1b3b36['params']))[_0x3ce5('0x8')](respondWithResult(_0x1bc695,null))['catch'](handleError(_0x1bc695,null));};exports['outbound']=function(_0x2846e9,_0x4ed3c3){return respondWithRpcPromise(_0x3ce5('0x23'),_0x2846e9[_0x3ce5('0x14')])[_0x3ce5('0x8')](respondWithResult(_0x4ed3c3,null))[_0x3ce5('0x18')](handleError(_0x4ed3c3,null));};exports['outboundChannels']=function(_0x41cf37,_0x5a7d01){return respondWithRpcPromise(_0x3ce5('0x24'),_0x41cf37[_0x3ce5('0x14')])[_0x3ce5('0x8')](respondWithResult(_0x5a7d01,null))[_0x3ce5('0x18')](handleError(_0x5a7d01,null));};exports['agents']=function(_0x48c88d,_0x1424b3){var _0x27faf1;return respondWithRpcPromise('Agents',_0x48c88d['query'])['then'](function(_0x251878){_0x27faf1=_0x251878;return respondWithRpcPromise(_0x3ce5('0x25'),_0x48c88d[_0x3ce5('0x14')],routingClient);})[_0x3ce5('0x8')](function(_0x1f00c0){return _[_0x3ce5('0x16')]({},_0x1f00c0,_0x27faf1);})['then'](respondWithResult(_0x1424b3,null))['catch'](handleError(_0x1424b3,null));};exports[_0x3ce5('0x26')]=function(_0x15462f,_0x1fcb9b){if(_0x15462f[_0x3ce5('0x27')]&&_0x15462f['body'][_0x3ce5('0x28')]&&_0x15462f[_0x3ce5('0x29')]&&_0x15462f['user'][_0x3ce5('0x10')]){for(var _0x2dd067 in _0x15462f['body'][_0x3ce5('0x28')]){if(_0x15462f[_0x3ce5('0x27')][_0x3ce5('0x28')][_0x3ce5('0x2a')](_0x2dd067)){db[_0x3ce5('0x2b')][_0x3ce5('0x2c')]({'where':{'channel':_0x2dd067,'membername':_0x15462f[_0x3ce5('0x29')][_0x3ce5('0x10')],'type':_0x3ce5('0x2d'),'exitAt':null,'uniqueid':_0x15462f['body'][_0x3ce5('0x28')][_0x2dd067]&&_0x15462f[_0x3ce5('0x27')][_0x3ce5('0x28')][_0x2dd067]['length']?{'$notIn':_0x15462f['body'][_0x3ce5('0x28')][_0x2dd067]}:{'$ne':null}}})[_0x3ce5('0x8')](function(_0x154cab){var _0x350c08=moment()[_0x3ce5('0x2e')](_0x3ce5('0x2f'));for(var _0x5f4190=0x0,_0x59fe87=_0x154cab[_0x3ce5('0x30')];_0x5f4190<_0x59fe87;_0x5f4190+=0x1){_0x154cab[_0x5f4190][_0x3ce5('0x31')]({'exitAt':_0x350c08});}});for(var _0x311aca=0x0;_0x311aca<_0x15462f['body']['interaction'][_0x2dd067][_0x3ce5('0x30')];_0x311aca+=0x1){db[_0x3ce5('0x2b')][_0x3ce5('0x32')]({'where':{'channel':_0x2dd067,'membername':_0x15462f[_0x3ce5('0x29')][_0x3ce5('0x10')],'type':_0x3ce5('0x2d'),'uniqueid':_0x15462f['body']['interaction'][_0x2dd067][_0x311aca],'exitAt':null},'defaults':{'channel':_0x2dd067,'membername':_0x15462f[_0x3ce5('0x29')][_0x3ce5('0x10')],'interface':_['isNil'](_0x15462f['user'][_0x3ce5('0x33')])?util[_0x3ce5('0x2e')](_0x3ce5('0x34'),_0x15462f['user'][_0x3ce5('0x10')]):_0x15462f[_0x3ce5('0x29')]['interface'],'type':_0x3ce5('0x2d'),'enterAt':moment()[_0x3ce5('0x2e')](_0x3ce5('0x2f')),'role':_0x3ce5('0x35'),'internal':_0x15462f[_0x3ce5('0x29')][_0x3ce5('0x36')],'uniqueid':_0x15462f['body'][_0x3ce5('0x28')][_0x2dd067][_0x311aca]}});}}}}return respondWithRpcPromise(_0x3ce5('0x37'),{'id':_0x15462f[_0x3ce5('0x17')]['id'],'capacity':_0x15462f[_0x3ce5('0x27')][_0x3ce5('0x38')]},routingClient)['then'](respondWithResult(_0x1fcb9b,null))[_0x3ce5('0x18')](handleError(_0x1fcb9b,null));};exports[_0x3ce5('0x39')]=function(_0x505144,_0x4c6815){return respondWithRpcPromise('Telephones',_0x505144['query'])['then'](respondWithResult(_0x4c6815,null))[_0x3ce5('0x18')](handleError(_0x4c6815,null));};exports[_0x3ce5('0x3a')]=function(_0x367df1,_0xaca20){return respondWithRpcPromise(_0x3ce5('0x3b'),_0x367df1['query'])[_0x3ce5('0x8')](respondWithResult(_0xaca20,null))['catch'](handleError(_0xaca20,null));};exports['campaigns']=function(_0x568f3d,_0x2e1a90){return respondWithRpcPromise(_0x3ce5('0x3c'),_0x568f3d[_0x3ce5('0x14')])[_0x3ce5('0x8')](respondWithResult(_0x2e1a90,null))[_0x3ce5('0x18')](handleError(_0x2e1a90,null));};exports[_0x3ce5('0x3d')]=function(_0x50a487,_0x3dbda5){return respondWithRpcPromise('ChatQueues',_0x50a487[_0x3ce5('0x14')],routingClient)[_0x3ce5('0x8')](respondWithResult(_0x3dbda5,null))[_0x3ce5('0x18')](handleError(_0x3dbda5,null));};exports[_0x3ce5('0x3e')]=function(_0x1bb721,_0x2daa55){return respondWithRpcPromise(_0x3ce5('0x3f'),_0x1bb721[_0x3ce5('0x14')],routingClient)[_0x3ce5('0x8')](findById(_0x1bb721['params']['id']))[_0x3ce5('0x8')](respondWithResult(_0x2daa55,null))[_0x3ce5('0x18')](handleError(_0x2daa55,null));};exports[_0x3ce5('0x40')]=function(_0x48f71a,_0x98ba2f){return respondWithRpcPromise(_0x3ce5('0x41'),_0x48f71a[_0x3ce5('0x14')],routingClient)[_0x3ce5('0x8')](respondWithResult(_0x98ba2f,null))[_0x3ce5('0x18')](handleError(_0x98ba2f,null));};exports[_0x3ce5('0x42')]=function(_0x43aec2,_0x3aebc5){return respondWithRpcPromise(_0x3ce5('0x41'),_0x43aec2[_0x3ce5('0x14')],routingClient)[_0x3ce5('0x8')](findById(_0x43aec2['params']['id']))['then'](respondWithResult(_0x3aebc5,null))['catch'](handleError(_0x3aebc5,null));};exports['mailAccounts']=function(_0x99d2e6,_0x157b5b){return respondWithRpcPromise(_0x3ce5('0x43'),_0x99d2e6[_0x3ce5('0x14')],mailClient)[_0x3ce5('0x8')](respondWithResult(_0x157b5b,null))[_0x3ce5('0x18')](handleError(_0x157b5b,null));};exports[_0x3ce5('0x44')]=function(_0x4bfc62,_0x344e49){return respondWithRpcPromise('OpenchannelQueues',_0x4bfc62[_0x3ce5('0x14')],routingClient)[_0x3ce5('0x8')](respondWithResult(_0x344e49,null))['catch'](handleError(_0x344e49,null));};exports[_0x3ce5('0x45')]=function(_0xd96ce3,_0x1f0709){return respondWithRpcPromise(_0x3ce5('0x46'),_0xd96ce3[_0x3ce5('0x14')],routingClient)[_0x3ce5('0x8')](findById(_0xd96ce3['params']['id']))[_0x3ce5('0x8')](respondWithResult(_0x1f0709,null))[_0x3ce5('0x18')](handleError(_0x1f0709,null));};exports[_0x3ce5('0x47')]=function(_0x18bdd2,_0x3f8ab6){return respondWithRpcPromise(_0x3ce5('0x48'),_0x18bdd2[_0x3ce5('0x14')],routingClient)[_0x3ce5('0x8')](respondWithResult(_0x3f8ab6,null))[_0x3ce5('0x18')](handleError(_0x3f8ab6,null));};exports['showSmsQueues']=function(_0x1801df,_0x37ca9f){return respondWithRpcPromise(_0x3ce5('0x48'),_0x1801df[_0x3ce5('0x14')],routingClient)['then'](findById(_0x1801df[_0x3ce5('0x17')]['id']))[_0x3ce5('0x8')](respondWithResult(_0x37ca9f,null))[_0x3ce5('0x18')](handleError(_0x37ca9f,null));};exports[_0x3ce5('0x49')]=function(_0x4d1984,_0x1f893a){return respondWithRpcPromise(_0x3ce5('0x4a'),_0x4d1984[_0x3ce5('0x14')],routingClient)[_0x3ce5('0x8')](respondWithResult(_0x1f893a,null))['catch'](handleError(_0x1f893a,null));};exports[_0x3ce5('0x4b')]=function(_0x269a81,_0x26ed2c){return respondWithRpcPromise(_0x3ce5('0x4a'),_0x269a81[_0x3ce5('0x14')],routingClient)[_0x3ce5('0x8')](findById(_0x269a81[_0x3ce5('0x17')]['id']))[_0x3ce5('0x8')](respondWithResult(_0x26ed2c,null))[_0x3ce5('0x18')](handleError(_0x26ed2c,null));};exports['faxAccounts']=function(_0x4f3c64,_0x16ee38){return respondWithRpcPromise(_0x3ce5('0x4c'),_0x4f3c64[_0x3ce5('0x14')])['then'](respondWithResult(_0x16ee38,null))[_0x3ce5('0x18')](handleError(_0x16ee38,null));};exports[_0x3ce5('0x4d')]=function(_0x3ec888,_0x352c5a){return respondWithRpcPromise(_0x3ce5('0x4e'),_0x3ec888[_0x3ce5('0x14')],routingClient)[_0x3ce5('0x8')](respondWithResult(_0x352c5a,null))[_0x3ce5('0x18')](handleError(_0x352c5a,null));};exports[_0x3ce5('0x4f')]=function(_0x25fcbb,_0x3208df){return respondWithRpcPromise(_0x3ce5('0x50'),_0x25fcbb[_0x3ce5('0x14')],routingClient)[_0x3ce5('0x8')](respondWithResult(_0x3208df,null))[_0x3ce5('0x18')](handleError(_0x3208df,null));};exports['openchannelQueuesWaitingInteractions']=function(_0x50ba34,_0x41f656){return respondWithRpcPromise(_0x3ce5('0x51'),_0x50ba34['query'],routingClient)[_0x3ce5('0x8')](respondWithResult(_0x41f656,null))['catch'](handleError(_0x41f656,null));};exports[_0x3ce5('0x52')]=function(_0x45cbe4,_0x25e108){return respondWithRpcPromise(_0x3ce5('0x53'),_0x45cbe4[_0x3ce5('0x14')],routingClient)[_0x3ce5('0x8')](respondWithResult(_0x25e108,null))['catch'](handleError(_0x25e108,null));};exports[_0x3ce5('0x54')]=function(_0x4ea488,_0x2f50d3){return respondWithRpcPromise(_0x3ce5('0x55'),_0x4ea488[_0x3ce5('0x14')],routingClient)[_0x3ce5('0x8')](respondWithResult(_0x2f50d3,null))['catch'](handleError(_0x2f50d3,null));};exports[_0x3ce5('0x56')]=function(_0x51b99c){return function(_0x179e57,_0xc9b63c){var _0x3055e1,_0x5ac03a;var _0x2b8508=_[_0x3ce5('0x57')](_0x51b99c);var _0x4a0a7d=_0x51b99c===_0x3ce5('0x58')?_0x3ce5('0x59'):'Account';return db[_0x2b8508+'Queue']['findOne']({'raw':!![],'where':{'id':_0x179e57[_0x3ce5('0x17')]['id']}})[_0x3ce5('0x8')](function(_0x3c679b){if(_['isNil'](_0x3c679b)){throw new Error(_0x2b8508+_0x3ce5('0x5a'));}_0x3055e1=_0x3c679b;return db[_0x2b8508+_0x3ce5('0x5b')][_0x3ce5('0x5c')]({'where':{'id':_0x179e57[_0x3ce5('0x27')][_0x3ce5('0x5d')]},'include':[{'model':db[_0x2b8508+'Interaction'],'as':'Interaction'},{'model':db[_0x2b8508+_0x4a0a7d],'as':_0x3ce5('0x5e')}]});})[_0x3ce5('0x8')](function(_0x277fc6){if(_['isNil'](_0x277fc6)){throw new Error(_0x2b8508+_0x3ce5('0x5f'));}_0x5ac03a=_0x277fc6;return _0x277fc6[_0x3ce5('0x60')]({'read':0x0,'readAt':null,'UserId':null});})['then'](function(){var _0x38199e={'uniqueid':_0x51b99c+'.'+_0x5ac03a['id']+'.'+_0x5ac03a[_0x3ce5('0x61')]['id'],'FromUserId':_0x179e57['user']['id'],'type':'queue'};_0x38199e[_0x2b8508+_0x3ce5('0x62')]=_0x5ac03a['id'];_0x38199e[_0x2b8508+_0x3ce5('0x63')]=_0x5ac03a[_0x3ce5('0x61')]['id'];_0x38199e['From'+_0x2b8508+_0x4a0a7d+'Id']=_0x5ac03a[_0x3ce5('0x5e')]['id'];_0x38199e['To'+_0x2b8508+'QueueId']=_0x3055e1['id'];return db[_0x2b8508+_0x3ce5('0x64')][_0x3ce5('0x65')](_0x38199e);})[_0x3ce5('0x8')](function(){return respondWithRpcPromise(_0x3ce5('0x66'),{'channel':_0x51b99c,'interaction':_0x5ac03a[_0x3ce5('0x61')],'message':_0x5ac03a,'account':_0x5ac03a['Account'],'applications':[{'id':0x0,'priority':0x1,'app':_0x3ce5('0x67'),'appdata':_0x3055e1[_0x3ce5('0x10')]+','+(_0x5ac03a[_0x3ce5('0x5e')]['queueTransferTimeout']||0x12c),'interval':'*,*,*,*'}]},routingClient);})[_0x3ce5('0x8')](respondWithResult(_0xc9b63c,null))[_0x3ce5('0x18')](handleError(_0xc9b63c,null));};};exports[_0x3ce5('0x68')]=function(_0xe66eea,_0x2fa6f0){var _0xa62bab,_0x41fcc4;if(_[_0x3ce5('0x69')](_0xe66eea[_0x3ce5('0x27')][_0x3ce5('0x6a')])){throw new Error(_0x3ce5('0x6b'));}var _0x39d1c1=_0xe66eea[_0x3ce5('0x27')][_0x3ce5('0x6a')];var _0x8cbb53=_[_0x3ce5('0x57')](_0x39d1c1);var _0x16b295=_0x39d1c1==='chat'?_0x3ce5('0x59'):_0x3ce5('0x5e');return db['User'][_0x3ce5('0x5c')]({'raw':!![],'where':{'id':_0xe66eea[_0x3ce5('0x17')]['id'],'role':'agent'}})[_0x3ce5('0x8')](function(_0x587df1){if(_[_0x3ce5('0x69')](_0x587df1)){throw new Error(_0x3ce5('0x6c'));}_0xa62bab=_0x587df1;return db[_0x8cbb53+'Message']['findOne']({'where':{'id':_0xe66eea[_0x3ce5('0x27')]['messageId']},'include':[{'model':db[_0x8cbb53+_0x3ce5('0x61')],'as':_0x3ce5('0x61')},{'model':db[_0x8cbb53+_0x16b295],'as':'Account'}]});})['then'](function(_0x5299fa){if(_['isNil'](_0x5299fa)){throw new Error(_0x8cbb53+_0x3ce5('0x5f'));}_0x41fcc4=_0x5299fa;return _0x5299fa[_0x3ce5('0x60')]({'read':0x0,'readAt':null,'UserId':null});})[_0x3ce5('0x8')](function(){var _0x270cd9={'uniqueid':_0x39d1c1+'.'+_0x41fcc4['id']+'.'+_0x41fcc4['Interaction']['id'],'FromUserId':_0xe66eea[_0x3ce5('0x29')]['id'],'type':_0x3ce5('0x67'),'ToUserId':_0xa62bab['id']};_0x270cd9[_0x8cbb53+_0x3ce5('0x62')]=_0x41fcc4['id'];_0x270cd9[_0x8cbb53+_0x3ce5('0x63')]=_0x41fcc4['Interaction']['id'];_0x270cd9[_0x3ce5('0x6d')+_0x8cbb53+_0x16b295+'Id']=_0x41fcc4[_0x3ce5('0x5e')]['id'];return db[_0x8cbb53+_0x3ce5('0x64')][_0x3ce5('0x65')](_0x270cd9);})[_0x3ce5('0x8')](function(){return respondWithRpcPromise(_0x3ce5('0x66'),{'channel':_0x39d1c1,'interaction':_0x41fcc4['Interaction'],'message':_0x41fcc4,'account':_0x41fcc4[_0x3ce5('0x5e')],'applications':[{'id':0x0,'priority':0x1,'app':'agent','appdata':_0xa62bab[_0x3ce5('0x10')]+','+(_0x41fcc4[_0x3ce5('0x5e')][_0x3ce5('0x6e')]||0x12c),'interval':_0x3ce5('0x6f')}]},routingClient);})['then'](respondWithResult(_0x2fa6f0,null))[_0x3ce5('0x18')](handleError(_0x2fa6f0,null));};
\ No newline at end of file
+var _0x50c4=['FaxAccounts','chatQueuesWaitingInteractions','ChatQueuesWaitingInteractions','mailQueuesWaitingInteractions','smsQueuesWaitingInteractions','SmsQueuesWaitingInteractions','faxQueuesWaitingInteractions','FaxQueuesWaitingInteractions','queueNotify','capitalize','chat','Website','Queue','findOne','\x20Queue\x20not\x20found','Message','Interaction','Account','\x20Message\x20not\x20found','update','MessageId','QueueId','TransferReport','create','Start','queue','queueTransferTimeout','*,*,*,*','channel','User','messageId','InteractionId','From','agent','agentTransferTimeout','bluebird','moment','lodash','util','../../config/logger','api','client','http','request','error','status','sendStatus','name','send','isNil','rows','find','voiceChannels','VoiceChannels','query','catch','voiceChannelMixMonitor','VoiceChannelMixMonitor','merge','params','voiceChannelStopMixMonitor','then','VoiceQueues','showVoiceQueues','voiceQueuesPreview','VoiceQueuesPreview','VoiceQueuesChannels','voiceQueuesChannel','VoiceQueuesChannel','voiceQueuesChannelHangup','VoiceQueuesChannelHangup','VoiceQueuesChannelRedirect','outbound','Outbound','outboundChannels','OutboundChannels','agents','Agents','agentCapacity','body','user','hasOwnProperty','MemberReport','findAll','interaction','format','length','updateAttributes','findOrCreate','INTERACTION','interface','SIP/%s','YYYY-MM-DD\x20HH:mm:ss','AgentCapacity','capacity','Telephones','trunks','Trunks','campaigns','Campaigns','chatQueues','ChatQueues','showChatQueues','mailQueues','MailQueues','mailAccounts','MailAccounts','openchannelQueues','OpenchannelQueues','showOpenchannelQueues','smsQueues','SmsQueues','faxQueues','FaxQueues','faxAccounts'];(function(_0x19d1a5,_0x58e1b2){var _0x5458be=function(_0x12c2d9){while(--_0x12c2d9){_0x19d1a5['push'](_0x19d1a5['shift']());}};_0x5458be(++_0x58e1b2);}(_0x50c4,0x109));var _0x450c=function(_0xd02923,_0x7d3515){_0xd02923=_0xd02923-0x0;var _0x10ff2f=_0x50c4[_0xd02923];return _0x10ff2f;};'use strict';var BPromise=require(_0x450c('0x0'));var moment=require(_0x450c('0x1'));var _=require(_0x450c('0x2'));var util=require(_0x450c('0x3'));var db=require('../../mysqldb')['db'];var logger=require(_0x450c('0x4'))(_0x450c('0x5'));var jayson=require('jayson/promise');var amiClient=jayson[_0x450c('0x6')]['http']({'port':0x232a});var mailClient=jayson[_0x450c('0x6')][_0x450c('0x7')]({'port':0x232b});var routingClient=jayson[_0x450c('0x6')][_0x450c('0x7')]({'port':0x232c});function respondWithRpcPromise(_0x182f5a,_0x1b04ef,_0x5dc55b){return new BPromise(function(_0x1936fe,_0xc85e2b){var _0x35305c=_0x5dc55b?_0x5dc55b:amiClient;return _0x35305c[_0x450c('0x8')](_0x182f5a,_0x1b04ef)['then'](function(_0x379f8a){if(_0x379f8a['error']){if(_0x379f8a[_0x450c('0x9')]['code']===0x1f4){return _0xc85e2b(_0x379f8a[_0x450c('0x9')]['message']);}return _0x1936fe(_0x379f8a[_0x450c('0x9')]['message']);}else{_0x1936fe(_0x379f8a['result']);}})['catch'](function(_0x181ba2){_0xc85e2b(_0x181ba2);});});}function respondWithResult(_0x490edf,_0x19b201){_0x19b201=_0x19b201||0xc8;return function(_0xc8d277){if(_0xc8d277){return _0x490edf[_0x450c('0xa')](_0x19b201)['json'](_0xc8d277);}return _0x490edf[_0x450c('0xb')](0x194);};}function handleError(_0x536483,_0x9d5d64){_0x9d5d64=_0x9d5d64||0x1f4;return function(_0x2df86d){logger[_0x450c('0x9')](_0x2df86d['stack']);if(_0x2df86d[_0x450c('0xc')]){delete _0x2df86d[_0x450c('0xc')];}_0x536483[_0x450c('0xa')](_0x9d5d64)[_0x450c('0xd')](_0x2df86d);};}function findById(_0x33944e){return function(_0x25b8fd){if(!_[_0x450c('0xe')](_0x33944e)&&!_[_0x450c('0xe')](_0x25b8fd)&&!_[_0x450c('0xe')](_0x25b8fd[_0x450c('0xf')])){return _[_0x450c('0x10')](_0x25b8fd[_0x450c('0xf')],function(_0x3a3df2){return _0x3a3df2['id']==_0x33944e;});}return null;};}exports[_0x450c('0x11')]=function(_0xfca19a,_0x579417){return respondWithRpcPromise(_0x450c('0x12'),_0xfca19a[_0x450c('0x13')])['then'](respondWithResult(_0x579417,null))[_0x450c('0x14')](handleError(_0x579417,null));};exports[_0x450c('0x15')]=function(_0x2f1383,_0x27b10c){return respondWithRpcPromise(_0x450c('0x16'),_[_0x450c('0x17')](_0x2f1383[_0x450c('0x13')],_0x2f1383[_0x450c('0x18')]))['then'](respondWithResult(_0x27b10c,null))[_0x450c('0x14')](handleError(_0x27b10c,null));};exports[_0x450c('0x19')]=function(_0x2ae10f,_0x8c7c43){return respondWithRpcPromise('VoiceChannelStopMixMonitor',_['merge'](_0x2ae10f[_0x450c('0x13')],_0x2ae10f[_0x450c('0x18')]))[_0x450c('0x1a')](respondWithResult(_0x8c7c43,null))['catch'](handleError(_0x8c7c43,null));};exports['voiceQueues']=function(_0x13c3c2,_0x347133){return respondWithRpcPromise(_0x450c('0x1b'),_0x13c3c2[_0x450c('0x13')])[_0x450c('0x1a')](respondWithResult(_0x347133,null))[_0x450c('0x14')](handleError(_0x347133,null));};exports[_0x450c('0x1c')]=function(_0x30a528,_0x248066){return respondWithRpcPromise(_0x450c('0x1b'),_0x30a528['query'])[_0x450c('0x1a')](findById(_0x30a528[_0x450c('0x18')]['id']))[_0x450c('0x1a')](respondWithResult(_0x248066,null))[_0x450c('0x14')](handleError(_0x248066,null));};exports[_0x450c('0x1d')]=function(_0x204692,_0x209d2a){return respondWithRpcPromise(_0x450c('0x1e'),_[_0x450c('0x17')](_0x204692[_0x450c('0x13')],_0x204692[_0x450c('0x18')]))[_0x450c('0x1a')](respondWithResult(_0x209d2a,null))[_0x450c('0x14')](handleError(_0x209d2a,null));};exports['voiceQueuesChannels']=function(_0x1ef679,_0xfe42f8){return respondWithRpcPromise(_0x450c('0x1f'),_0x1ef679[_0x450c('0x13')])[_0x450c('0x1a')](respondWithResult(_0xfe42f8,null))[_0x450c('0x14')](handleError(_0xfe42f8,null));};exports[_0x450c('0x20')]=function(_0x4e9d9f,_0x5235a1){return respondWithRpcPromise(_0x450c('0x21'),_[_0x450c('0x17')](_0x4e9d9f[_0x450c('0x13')],_0x4e9d9f[_0x450c('0x18')]))[_0x450c('0x1a')](respondWithResult(_0x5235a1,null))[_0x450c('0x14')](handleError(_0x5235a1,null));};exports[_0x450c('0x22')]=function(_0x5940b3,_0x5b08ba){return respondWithRpcPromise(_0x450c('0x23'),_[_0x450c('0x17')](_0x5940b3['query'],_0x5940b3['params']))[_0x450c('0x1a')](respondWithResult(_0x5b08ba,null))['catch'](handleError(_0x5b08ba,null));};exports['voiceQueuesChannelRedirect']=function(_0xec06f0,_0x207bc3){return respondWithRpcPromise(_0x450c('0x24'),_['merge'](_0xec06f0[_0x450c('0x13')],_0xec06f0[_0x450c('0x18')]))[_0x450c('0x1a')](respondWithResult(_0x207bc3,null))[_0x450c('0x14')](handleError(_0x207bc3,null));};exports[_0x450c('0x25')]=function(_0x5d5fd2,_0xe0d07c){return respondWithRpcPromise(_0x450c('0x26'),_0x5d5fd2['query'])[_0x450c('0x1a')](respondWithResult(_0xe0d07c,null))[_0x450c('0x14')](handleError(_0xe0d07c,null));};exports[_0x450c('0x27')]=function(_0x1fb394,_0x18ee93){return respondWithRpcPromise(_0x450c('0x28'),_0x1fb394[_0x450c('0x13')])[_0x450c('0x1a')](respondWithResult(_0x18ee93,null))[_0x450c('0x14')](handleError(_0x18ee93,null));};exports[_0x450c('0x29')]=function(_0x29a44e,_0x5d55e0){var _0x3564d1;return respondWithRpcPromise(_0x450c('0x2a'),_0x29a44e[_0x450c('0x13')])[_0x450c('0x1a')](function(_0x2a54ed){_0x3564d1=_0x2a54ed;return respondWithRpcPromise(_0x450c('0x2a'),_0x29a44e['query'],routingClient);})[_0x450c('0x1a')](function(_0x1b88bf){return _[_0x450c('0x17')]({},_0x1b88bf,_0x3564d1);})[_0x450c('0x1a')](respondWithResult(_0x5d55e0,null))[_0x450c('0x14')](handleError(_0x5d55e0,null));};exports[_0x450c('0x2b')]=function(_0xdccd2d,_0x1c575a){if(_0xdccd2d[_0x450c('0x2c')]&&_0xdccd2d['body']['interaction']&&_0xdccd2d[_0x450c('0x2d')]&&_0xdccd2d[_0x450c('0x2d')]['name']){for(var _0xa9f9f3 in _0xdccd2d['body']['interaction']){if(_0xdccd2d[_0x450c('0x2c')]['interaction'][_0x450c('0x2e')](_0xa9f9f3)){db[_0x450c('0x2f')][_0x450c('0x30')]({'where':{'channel':_0xa9f9f3,'membername':_0xdccd2d[_0x450c('0x2d')][_0x450c('0xc')],'type':'INTERACTION','exitAt':null,'uniqueid':_0xdccd2d['body'][_0x450c('0x31')][_0xa9f9f3]&&_0xdccd2d[_0x450c('0x2c')][_0x450c('0x31')][_0xa9f9f3]['length']?{'$notIn':_0xdccd2d['body']['interaction'][_0xa9f9f3]}:{'$ne':null}}})['then'](function(_0x123ebc){var _0x4232e6=moment()[_0x450c('0x32')]('YYYY-MM-DD\x20HH:mm:ss');for(var _0x2d4e62=0x0,_0x217eb6=_0x123ebc[_0x450c('0x33')];_0x2d4e62<_0x217eb6;_0x2d4e62+=0x1){_0x123ebc[_0x2d4e62][_0x450c('0x34')]({'exitAt':_0x4232e6});}});for(var _0x2a0794=0x0;_0x2a0794<_0xdccd2d[_0x450c('0x2c')][_0x450c('0x31')][_0xa9f9f3]['length'];_0x2a0794+=0x1){db[_0x450c('0x2f')][_0x450c('0x35')]({'where':{'channel':_0xa9f9f3,'membername':_0xdccd2d[_0x450c('0x2d')][_0x450c('0xc')],'type':_0x450c('0x36'),'uniqueid':_0xdccd2d[_0x450c('0x2c')][_0x450c('0x31')][_0xa9f9f3][_0x2a0794],'exitAt':null},'defaults':{'channel':_0xa9f9f3,'membername':_0xdccd2d[_0x450c('0x2d')][_0x450c('0xc')],'interface':_[_0x450c('0xe')](_0xdccd2d[_0x450c('0x2d')][_0x450c('0x37')])?util['format'](_0x450c('0x38'),_0xdccd2d['user'][_0x450c('0xc')]):_0xdccd2d[_0x450c('0x2d')][_0x450c('0x37')],'type':_0x450c('0x36'),'enterAt':moment()[_0x450c('0x32')](_0x450c('0x39')),'role':'agent','internal':_0xdccd2d[_0x450c('0x2d')]['internal'],'uniqueid':_0xdccd2d['body'][_0x450c('0x31')][_0xa9f9f3][_0x2a0794]}});}}}}return respondWithRpcPromise(_0x450c('0x3a'),{'id':_0xdccd2d[_0x450c('0x18')]['id'],'capacity':_0xdccd2d[_0x450c('0x2c')][_0x450c('0x3b')]},routingClient)[_0x450c('0x1a')](respondWithResult(_0x1c575a,null))[_0x450c('0x14')](handleError(_0x1c575a,null));};exports['telephones']=function(_0x390c13,_0x39b8eb){return respondWithRpcPromise(_0x450c('0x3c'),_0x390c13[_0x450c('0x13')])[_0x450c('0x1a')](respondWithResult(_0x39b8eb,null))['catch'](handleError(_0x39b8eb,null));};exports[_0x450c('0x3d')]=function(_0x3b7ac9,_0x3dddbb){return respondWithRpcPromise(_0x450c('0x3e'),_0x3b7ac9[_0x450c('0x13')])[_0x450c('0x1a')](respondWithResult(_0x3dddbb,null))[_0x450c('0x14')](handleError(_0x3dddbb,null));};exports[_0x450c('0x3f')]=function(_0x53a93b,_0x20c7b7){return respondWithRpcPromise(_0x450c('0x40'),_0x53a93b[_0x450c('0x13')])[_0x450c('0x1a')](respondWithResult(_0x20c7b7,null))[_0x450c('0x14')](handleError(_0x20c7b7,null));};exports[_0x450c('0x41')]=function(_0x5bff34,_0x15c909){return respondWithRpcPromise(_0x450c('0x42'),_0x5bff34['query'],routingClient)['then'](respondWithResult(_0x15c909,null))[_0x450c('0x14')](handleError(_0x15c909,null));};exports[_0x450c('0x43')]=function(_0x37b58c,_0x3bad67){return respondWithRpcPromise(_0x450c('0x42'),_0x37b58c[_0x450c('0x13')],routingClient)[_0x450c('0x1a')](findById(_0x37b58c['params']['id']))[_0x450c('0x1a')](respondWithResult(_0x3bad67,null))['catch'](handleError(_0x3bad67,null));};exports[_0x450c('0x44')]=function(_0x3c22fe,_0x1ee085){return respondWithRpcPromise(_0x450c('0x45'),_0x3c22fe['query'],routingClient)[_0x450c('0x1a')](respondWithResult(_0x1ee085,null))[_0x450c('0x14')](handleError(_0x1ee085,null));};exports['showMailQueues']=function(_0x1343c8,_0x4ec579){return respondWithRpcPromise(_0x450c('0x45'),_0x1343c8[_0x450c('0x13')],routingClient)[_0x450c('0x1a')](findById(_0x1343c8[_0x450c('0x18')]['id']))[_0x450c('0x1a')](respondWithResult(_0x4ec579,null))[_0x450c('0x14')](handleError(_0x4ec579,null));};exports[_0x450c('0x46')]=function(_0x36297a,_0x22cf64){return respondWithRpcPromise(_0x450c('0x47'),_0x36297a[_0x450c('0x13')],mailClient)['then'](respondWithResult(_0x22cf64,null))[_0x450c('0x14')](handleError(_0x22cf64,null));};exports[_0x450c('0x48')]=function(_0x950922,_0x11e527){return respondWithRpcPromise(_0x450c('0x49'),_0x950922['query'],routingClient)[_0x450c('0x1a')](respondWithResult(_0x11e527,null))[_0x450c('0x14')](handleError(_0x11e527,null));};exports[_0x450c('0x4a')]=function(_0x5811e9,_0x27163d){return respondWithRpcPromise(_0x450c('0x49'),_0x5811e9[_0x450c('0x13')],routingClient)['then'](findById(_0x5811e9[_0x450c('0x18')]['id']))[_0x450c('0x1a')](respondWithResult(_0x27163d,null))[_0x450c('0x14')](handleError(_0x27163d,null));};exports[_0x450c('0x4b')]=function(_0x301bea,_0x571094){return respondWithRpcPromise(_0x450c('0x4c'),_0x301bea[_0x450c('0x13')],routingClient)[_0x450c('0x1a')](respondWithResult(_0x571094,null))[_0x450c('0x14')](handleError(_0x571094,null));};exports['showSmsQueues']=function(_0x25b29b,_0x56e08c){return respondWithRpcPromise('SmsQueues',_0x25b29b[_0x450c('0x13')],routingClient)[_0x450c('0x1a')](findById(_0x25b29b[_0x450c('0x18')]['id']))[_0x450c('0x1a')](respondWithResult(_0x56e08c,null))['catch'](handleError(_0x56e08c,null));};exports[_0x450c('0x4d')]=function(_0x16ce3b,_0x4e6806){return respondWithRpcPromise(_0x450c('0x4e'),_0x16ce3b['query'],routingClient)[_0x450c('0x1a')](respondWithResult(_0x4e6806,null))['catch'](handleError(_0x4e6806,null));};exports['showFaxQueues']=function(_0x3828e4,_0x791f08){return respondWithRpcPromise(_0x450c('0x4e'),_0x3828e4['query'],routingClient)[_0x450c('0x1a')](findById(_0x3828e4[_0x450c('0x18')]['id']))[_0x450c('0x1a')](respondWithResult(_0x791f08,null))[_0x450c('0x14')](handleError(_0x791f08,null));};exports[_0x450c('0x4f')]=function(_0x599b52,_0x429cbe){return respondWithRpcPromise(_0x450c('0x50'),_0x599b52[_0x450c('0x13')])['then'](respondWithResult(_0x429cbe,null))[_0x450c('0x14')](handleError(_0x429cbe,null));};exports[_0x450c('0x51')]=function(_0x1fac6c,_0x24055e){return respondWithRpcPromise(_0x450c('0x52'),_0x1fac6c[_0x450c('0x13')],routingClient)['then'](respondWithResult(_0x24055e,null))[_0x450c('0x14')](handleError(_0x24055e,null));};exports[_0x450c('0x53')]=function(_0x1ada1f,_0x57a24e){return respondWithRpcPromise('MailQueuesWaitingInteractions',_0x1ada1f[_0x450c('0x13')],routingClient)[_0x450c('0x1a')](respondWithResult(_0x57a24e,null))['catch'](handleError(_0x57a24e,null));};exports['openchannelQueuesWaitingInteractions']=function(_0x14c719,_0x48d661){return respondWithRpcPromise('OpenchannelQueuesWaitingInteractions',_0x14c719[_0x450c('0x13')],routingClient)[_0x450c('0x1a')](respondWithResult(_0x48d661,null))[_0x450c('0x14')](handleError(_0x48d661,null));};exports[_0x450c('0x54')]=function(_0x33c581,_0x3e7cbc){return respondWithRpcPromise(_0x450c('0x55'),_0x33c581[_0x450c('0x13')],routingClient)['then'](respondWithResult(_0x3e7cbc,null))[_0x450c('0x14')](handleError(_0x3e7cbc,null));};exports[_0x450c('0x56')]=function(_0x325241,_0x1f7c10){return respondWithRpcPromise(_0x450c('0x57'),_0x325241[_0x450c('0x13')],routingClient)[_0x450c('0x1a')](respondWithResult(_0x1f7c10,null))['catch'](handleError(_0x1f7c10,null));};exports[_0x450c('0x58')]=function(_0x98b454){return function(_0x2cdaf1,_0x2963d7){var _0x274991,_0x165eff;var _0x3f7ec5=_[_0x450c('0x59')](_0x98b454);var _0x143bcf=_0x98b454===_0x450c('0x5a')?_0x450c('0x5b'):'Account';return db[_0x3f7ec5+_0x450c('0x5c')][_0x450c('0x5d')]({'raw':!![],'where':{'id':_0x2cdaf1['params']['id']}})[_0x450c('0x1a')](function(_0xcfcee){if(_['isNil'](_0xcfcee)){throw new Error(_0x3f7ec5+_0x450c('0x5e'));}_0x274991=_0xcfcee;return db[_0x3f7ec5+_0x450c('0x5f')][_0x450c('0x5d')]({'where':{'id':_0x2cdaf1[_0x450c('0x2c')]['messageId']},'include':[{'model':db[_0x3f7ec5+_0x450c('0x60')],'as':_0x450c('0x60')},{'model':db[_0x3f7ec5+_0x143bcf],'as':_0x450c('0x61')}]});})['then'](function(_0x90904a){if(_['isNil'](_0x90904a)){throw new Error(_0x3f7ec5+_0x450c('0x62'));}_0x165eff=_0x90904a;return _0x90904a[_0x450c('0x63')]({'read':0x0,'readAt':null,'UserId':null});})[_0x450c('0x1a')](function(){var _0x4933fa={'uniqueid':_0x98b454+'.'+_0x165eff['id']+'.'+_0x165eff['Interaction']['id'],'FromUserId':_0x2cdaf1['user']['id'],'type':'queue'};_0x4933fa[_0x3f7ec5+_0x450c('0x64')]=_0x165eff['id'];_0x4933fa[_0x3f7ec5+'InteractionId']=_0x165eff[_0x450c('0x60')]['id'];_0x4933fa['From'+_0x3f7ec5+_0x143bcf+'Id']=_0x165eff[_0x450c('0x61')]['id'];_0x4933fa['To'+_0x3f7ec5+_0x450c('0x65')]=_0x274991['id'];return db[_0x3f7ec5+_0x450c('0x66')][_0x450c('0x67')](_0x4933fa);})['then'](function(){return respondWithRpcPromise(_0x450c('0x68'),{'channel':_0x98b454,'interaction':_0x165eff[_0x450c('0x60')],'message':_0x165eff,'account':_0x165eff['Account'],'applications':[{'id':0x0,'priority':0x1,'app':_0x450c('0x69'),'appdata':_0x274991[_0x450c('0xc')]+','+(_0x165eff[_0x450c('0x61')][_0x450c('0x6a')]||0x12c),'interval':_0x450c('0x6b')}]},routingClient);})[_0x450c('0x1a')](respondWithResult(_0x2963d7,null))[_0x450c('0x14')](handleError(_0x2963d7,null));};};exports['agentNotify']=function(_0x16101b,_0x519df1){var _0x3fd3b7,_0x4cebb9;if(_[_0x450c('0xe')](_0x16101b[_0x450c('0x2c')][_0x450c('0x6c')])){throw new Error('Channel\x20field\x20is\x20mandatory');}var _0x564e28=_0x16101b[_0x450c('0x2c')][_0x450c('0x6c')];var _0x23617d=_['capitalize'](_0x564e28);var _0x47eecc=_0x564e28==='chat'?_0x450c('0x5b'):'Account';return db[_0x450c('0x6d')][_0x450c('0x5d')]({'raw':!![],'where':{'id':_0x16101b['params']['id'],'role':'agent'}})['then'](function(_0x2dcf2f){if(_['isNil'](_0x2dcf2f)){throw new Error('Agent\x20not\x20found');}_0x3fd3b7=_0x2dcf2f;return db[_0x23617d+'Message']['findOne']({'where':{'id':_0x16101b[_0x450c('0x2c')][_0x450c('0x6e')]},'include':[{'model':db[_0x23617d+_0x450c('0x60')],'as':_0x450c('0x60')},{'model':db[_0x23617d+_0x47eecc],'as':_0x450c('0x61')}]});})[_0x450c('0x1a')](function(_0x5c6d77){if(_[_0x450c('0xe')](_0x5c6d77)){throw new Error(_0x23617d+_0x450c('0x62'));}_0x4cebb9=_0x5c6d77;return _0x5c6d77[_0x450c('0x63')]({'read':0x0,'readAt':null,'UserId':null});})['then'](function(){var _0x242b4e={'uniqueid':_0x564e28+'.'+_0x4cebb9['id']+'.'+_0x4cebb9['Interaction']['id'],'FromUserId':_0x16101b[_0x450c('0x2d')]['id'],'type':_0x450c('0x69'),'ToUserId':_0x3fd3b7['id']};_0x242b4e[_0x23617d+_0x450c('0x64')]=_0x4cebb9['id'];_0x242b4e[_0x23617d+_0x450c('0x6f')]=_0x4cebb9[_0x450c('0x60')]['id'];_0x242b4e[_0x450c('0x70')+_0x23617d+_0x47eecc+'Id']=_0x4cebb9[_0x450c('0x61')]['id'];return db[_0x23617d+'TransferReport'][_0x450c('0x67')](_0x242b4e);})[_0x450c('0x1a')](function(){return respondWithRpcPromise(_0x450c('0x68'),{'channel':_0x564e28,'interaction':_0x4cebb9['Interaction'],'message':_0x4cebb9,'account':_0x4cebb9[_0x450c('0x61')],'applications':[{'id':0x0,'priority':0x1,'app':_0x450c('0x71'),'appdata':_0x3fd3b7[_0x450c('0xc')]+','+(_0x4cebb9[_0x450c('0x61')][_0x450c('0x72')]||0x12c),'interval':_0x450c('0x6b')}]},routingClient);})['then'](respondWithResult(_0x519df1,null))[_0x450c('0x14')](handleError(_0x519df1,null));};
\ No newline at end of file
index 7dd3c32..5c93d75 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5b26=['put','/:id','update','delete','destroy','exports','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./schedule.controller','isAuthenticated','index','get','show','/:id/run','run','post','create'];(function(_0x331037,_0x1909fc){var _0x149f39=function(_0x1f0575){while(--_0x1f0575){_0x331037['push'](_0x331037['shift']());}};_0x149f39(++_0x1909fc);}(_0x5b26,0x1ea));var _0x65b2=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0x5b26[_0x57b54c];return _0x59cc19;};'use strict';var multer=require('multer');var util=require(_0x65b2('0x0'));var path=require('path');var timeout=require(_0x65b2('0x1'));var express=require(_0x65b2('0x2'));var router=express[_0x65b2('0x3')]();var auth=require(_0x65b2('0x4'));var interaction=require(_0x65b2('0x5'));var config=require(_0x65b2('0x6'));var controller=require(_0x65b2('0x7'));router['get']('/',auth[_0x65b2('0x8')](),controller[_0x65b2('0x9')]);router[_0x65b2('0xa')]('/:id',auth[_0x65b2('0x8')](),controller[_0x65b2('0xb')]);router['get'](_0x65b2('0xc'),auth[_0x65b2('0x8')](),controller[_0x65b2('0xd')]);router[_0x65b2('0xe')]('/',auth[_0x65b2('0x8')](),controller[_0x65b2('0xf')]);router[_0x65b2('0x10')](_0x65b2('0x11'),auth[_0x65b2('0x8')](),controller[_0x65b2('0x12')]);router[_0x65b2('0x13')]('/:id',auth['isAuthenticated'](),controller[_0x65b2('0x14')]);module[_0x65b2('0x15')]=router;
\ No newline at end of file
+var _0x6620=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./schedule.controller','get','isAuthenticated','index','show','/:id/run','run','post','create','put','/:id','update','delete','destroy','multer','util','path'];(function(_0x4cd646,_0x17d4f7){var _0x2e0ec8=function(_0x145103){while(--_0x145103){_0x4cd646['push'](_0x4cd646['shift']());}};_0x2e0ec8(++_0x17d4f7);}(_0x6620,0x1e0));var _0x0662=function(_0x55f43e,_0x52e211){_0x55f43e=_0x55f43e-0x0;var _0x337754=_0x6620[_0x55f43e];return _0x337754;};'use strict';var multer=require(_0x0662('0x0'));var util=require(_0x0662('0x1'));var path=require(_0x0662('0x2'));var timeout=require(_0x0662('0x3'));var express=require(_0x0662('0x4'));var router=express[_0x0662('0x5')]();var auth=require(_0x0662('0x6'));var interaction=require(_0x0662('0x7'));var config=require(_0x0662('0x8'));var controller=require(_0x0662('0x9'));router[_0x0662('0xa')]('/',auth[_0x0662('0xb')](),controller[_0x0662('0xc')]);router['get']('/:id',auth[_0x0662('0xb')](),controller[_0x0662('0xd')]);router[_0x0662('0xa')](_0x0662('0xe'),auth['isAuthenticated'](),controller[_0x0662('0xf')]);router[_0x0662('0x10')]('/',auth['isAuthenticated'](),controller[_0x0662('0x11')]);router[_0x0662('0x12')](_0x0662('0x13'),auth[_0x0662('0xb')](),controller[_0x0662('0x14')]);router[_0x0662('0x15')](_0x0662('0x13'),auth['isAuthenticated'](),controller[_0x0662('0x16')]);module['exports']=router;
\ No newline at end of file
index 59d6411..6e31262 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x132b=['BOOLEAN','TEXT','sequelize','STRING','0\x200\x20*\x20*\x20*','DATE','ENUM','quarters','months','days','hours','minutes','pdf','xlsx','custom','default'];(function(_0x406ca0,_0x33a99f){var _0x54d57d=function(_0x8e6df4){while(--_0x8e6df4){_0x406ca0['push'](_0x406ca0['shift']());}};_0x54d57d(++_0x33a99f);}(_0x132b,0x82));var _0xb132=function(_0x22a232,_0x2a5b5e){_0x22a232=_0x22a232-0x0;var _0x3309c9=_0x132b[_0x22a232];return _0x3309c9;};'use strict';var Sequelize=require(_0xb132('0x0'));module['exports']={'name':{'type':Sequelize[_0xb132('0x1')],'allowNull':![]},'description':{'type':Sequelize['STRING']},'active':{'type':Sequelize['BOOLEAN'],'allowNull':![],'defaultValue':![]},'cron':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xb132('0x2')},'startAt':{'type':Sequelize[_0xb132('0x3')],'allowNull':![]},'endAt':{'type':Sequelize[_0xb132('0x3')],'allowNull':![]},'subtractNumber':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x1,'validate':{'min':0x1}},'subtractUnit':{'type':Sequelize[_0xb132('0x4')]('years',_0xb132('0x5'),_0xb132('0x6'),'weeks',_0xb132('0x7'),_0xb132('0x8'),_0xb132('0x9')),'allowNull':![],'defaultValue':'days'},'output':{'type':Sequelize[_0xb132('0x4')]('csv',_0xb132('0xa'),_0xb132('0xb')),'allowNull':![],'defaultValue':'csv'},'type':{'type':Sequelize[_0xb132('0x4')](_0xb132('0xc'),_0xb132('0xd')),'allowNull':![],'defaultValue':_0xb132('0xc')},'sendMail':{'type':Sequelize[_0xb132('0xe')],'defaultValue':![]},'email':{'type':Sequelize[_0xb132('0x1')]},'cc':{'type':Sequelize[_0xb132('0xf')]},'bcc':{'type':Sequelize['TEXT']},'sendIfEmpty':{'type':Sequelize[_0xb132('0xe')],'defaultValue':!![]}};
\ No newline at end of file
+var _0xb0a2=['weeks','days','minutes','csv','pdf','custom','default','TEXT','STRING','BOOLEAN','DATE','ENUM','years','quarters','months'];(function(_0xdacb70,_0x3b7315){var _0x53fbc5=function(_0x34f645){while(--_0x34f645){_0xdacb70['push'](_0xdacb70['shift']());}};_0x53fbc5(++_0x3b7315);}(_0xb0a2,0x9e));var _0x2b0a=function(_0x4fbd7c,_0x4b42c1){_0x4fbd7c=_0x4fbd7c-0x0;var _0x5a2b63=_0xb0a2[_0x4fbd7c];return _0x5a2b63;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize['STRING'],'allowNull':![]},'description':{'type':Sequelize[_0x2b0a('0x0')]},'active':{'type':Sequelize[_0x2b0a('0x1')],'allowNull':![],'defaultValue':![]},'cron':{'type':Sequelize[_0x2b0a('0x0')],'allowNull':![],'defaultValue':'0\x200\x20*\x20*\x20*'},'startAt':{'type':Sequelize['DATE'],'allowNull':![]},'endAt':{'type':Sequelize[_0x2b0a('0x2')],'allowNull':![]},'subtractNumber':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x1,'validate':{'min':0x1}},'subtractUnit':{'type':Sequelize[_0x2b0a('0x3')](_0x2b0a('0x4'),_0x2b0a('0x5'),_0x2b0a('0x6'),_0x2b0a('0x7'),_0x2b0a('0x8'),'hours',_0x2b0a('0x9')),'allowNull':![],'defaultValue':_0x2b0a('0x8')},'output':{'type':Sequelize[_0x2b0a('0x3')](_0x2b0a('0xa'),_0x2b0a('0xb'),'xlsx'),'allowNull':![],'defaultValue':_0x2b0a('0xa')},'type':{'type':Sequelize[_0x2b0a('0x3')](_0x2b0a('0xc'),_0x2b0a('0xd')),'allowNull':![],'defaultValue':_0x2b0a('0xc')},'sendMail':{'type':Sequelize[_0x2b0a('0x1')],'defaultValue':![]},'email':{'type':Sequelize[_0x2b0a('0x0')]},'cc':{'type':Sequelize[_0x2b0a('0xe')]},'bcc':{'type':Sequelize[_0x2b0a('0xe')]},'sendIfEmpty':{'type':Sequelize[_0x2b0a('0x1')],'defaultValue':!![]}};
\ No newline at end of file
index 3394048..661bb3d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1686=['api','../../config/utils','../../config/environment','status','end','count','offset','limit','set','Content-Range','apply','save','update','get','Scheduler','UserProfileResource','then','sendStatus','error','stack','name','send','Schedule','rawAttributes','keys','query','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','type','VIRTUAL','options','includeAll','include','findAll','rows','catch','show','params','length','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','destroy','run','html-pdf','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','jsforce','desk.js','to-csv','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger'];(function(_0x1bbeae,_0x3d9324){var _0x5cf435=function(_0x3d1b19){while(--_0x3d1b19){_0x1bbeae['push'](_0x1bbeae['shift']());}};_0x5cf435(++_0x3d9324);}(_0x1686,0x90));var _0x6168=function(_0x17f006,_0x4221ee){_0x17f006=_0x17f006-0x0;var _0x531496=_0x1686[_0x17f006];return _0x531496;};'use strict';var pdf=require(_0x6168('0x0'));var emlformat=require(_0x6168('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x6168('0x2'));var rp=require(_0x6168('0x3'));var moment=require(_0x6168('0x4'));var BPromise=require(_0x6168('0x5'));var Mustache=require(_0x6168('0x6'));var util=require(_0x6168('0x7'));var path=require(_0x6168('0x8'));var sox=require(_0x6168('0x9'));var csv=require('to-csv');var ejs=require(_0x6168('0xa'));var fs=require('fs');var _=require(_0x6168('0xb'));var squel=require(_0x6168('0xc'));var crypto=require('crypto');var jsforce=require(_0x6168('0xd'));var deskjs=require(_0x6168('0xe'));var toCsv=require(_0x6168('0xf'));var querystring=require(_0x6168('0x10'));var Papa=require('papaparse');var Redis=require(_0x6168('0x11'));var authService=require(_0x6168('0x12'));var qs=require(_0x6168('0x13'));var hardwareService=require(_0x6168('0x14'));var logger=require(_0x6168('0x15'))(_0x6168('0x16'));var utils=require(_0x6168('0x17'));var config=require(_0x6168('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1e7936,_0x44acfd){_0x44acfd=_0x44acfd||0xcc;return function(_0x323e70){if(_0x323e70){return _0x1e7936['sendStatus'](_0x44acfd);}return _0x1e7936[_0x6168('0x19')](_0x44acfd)[_0x6168('0x1a')]();};}function respondWithResult(_0x25e1d8,_0x20592d){_0x20592d=_0x20592d||0xc8;return function(_0x1e36dd){if(_0x1e36dd){return _0x25e1d8[_0x6168('0x19')](_0x20592d)['json'](_0x1e36dd);}};}function respondWithFilteredResult(_0x5b2b38,_0x577e20){return function(_0x47fe03){if(_0x47fe03){var _0x560423=_0x47fe03[_0x6168('0x1b')],_0x31b198=_0x577e20['offset'],_0xf17dbd=_0x577e20[_0x6168('0x1c')]+_0x577e20[_0x6168('0x1d')],_0x43149c;if(_0xf17dbd>=_0x560423){_0xf17dbd=_0x560423;_0x43149c=0xc8;}else{_0x43149c=0xce;}_0x5b2b38[_0x6168('0x19')](_0x43149c);return _0x5b2b38[_0x6168('0x1e')](_0x6168('0x1f'),_0x31b198+'-'+_0xf17dbd+'/'+_0x560423)['json'](_0x47fe03);}return null;};}function patchUpdates(_0x267513){return function(_0x34ffa3){try{jsonpatch[_0x6168('0x20')](_0x34ffa3,_0x267513,!![]);}catch(_0x363afe){return BPromise['reject'](_0x363afe);}return _0x34ffa3[_0x6168('0x21')]();};}function saveUpdates(_0x1594ca,_0x202449){return function(_0x21b864){if(_0x21b864){return _0x21b864[_0x6168('0x22')](_0x1594ca)['then'](function(_0x1ed821){return _0x1ed821;});}return null;};}function removeEntity(_0x5d80a4,_0x1d90d7){return function(_0x11fd05){if(_0x11fd05){return _0x11fd05['destroy']()['then'](function(){var _0x48f87c=_0x11fd05[_0x6168('0x23')]({'plain':!![]});var _0x5a5ac0=_0x6168('0x24');return db[_0x6168('0x25')]['destroy']({'where':{'type':_0x5a5ac0,'resourceId':_0x48f87c['id']}})[_0x6168('0x26')](function(){return _0x11fd05;});})['then'](function(){_0x5d80a4['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x4bbfd4,_0x5e6db2){return function(_0x32ee69){if(!_0x32ee69){_0x4bbfd4[_0x6168('0x27')](0x194);}return _0x32ee69;};}function handleError(_0x4fc472,_0xa1226f){_0xa1226f=_0xa1226f||0x1f4;return function(_0x3125a8){logger[_0x6168('0x28')](_0x3125a8[_0x6168('0x29')]);if(_0x3125a8[_0x6168('0x2a')]){delete _0x3125a8[_0x6168('0x2a')];}_0x4fc472['status'](_0xa1226f)[_0x6168('0x2b')](_0x3125a8);};}exports['index']=function(_0x369d3f,_0x26cae9){var _0x23685d={},_0x120bc2={},_0x546e34={'count':0x0,'rows':[]};var _0x92ee60=db[_0x6168('0x2c')][_0x6168('0x2d')];_0x120bc2['model']=_[_0x6168('0x2e')](_0x92ee60);_0x120bc2[_0x6168('0x2f')]=_[_0x6168('0x2e')](_0x369d3f[_0x6168('0x2f')]);_0x120bc2[_0x6168('0x30')]=_[_0x6168('0x31')](_0x120bc2[_0x6168('0x32')],_0x120bc2[_0x6168('0x2f')]);_0x23685d[_0x6168('0x33')]=_[_0x6168('0x31')](_0x120bc2[_0x6168('0x32')],qs[_0x6168('0x34')](_0x369d3f[_0x6168('0x2f')]['fields']));_0x23685d['attributes']=_0x23685d[_0x6168('0x33')]['length']?_0x23685d[_0x6168('0x33')]:_0x120bc2[_0x6168('0x32')];if(!_0x369d3f[_0x6168('0x2f')][_0x6168('0x35')](_0x6168('0x36'))){_0x23685d[_0x6168('0x1d')]=qs[_0x6168('0x1d')](_0x369d3f[_0x6168('0x2f')][_0x6168('0x1d')]);_0x23685d['offset']=qs['offset'](_0x369d3f[_0x6168('0x2f')][_0x6168('0x1c')]);}_0x23685d[_0x6168('0x37')]=qs[_0x6168('0x38')](_0x369d3f['query'][_0x6168('0x38')]);_0x23685d[_0x6168('0x39')]=qs[_0x6168('0x30')](_['pick'](_0x369d3f['query'],_0x120bc2[_0x6168('0x30')]));if(_0x369d3f[_0x6168('0x2f')][_0x6168('0x3a')]){_0x23685d[_0x6168('0x39')]=_[_0x6168('0x3b')](_0x23685d[_0x6168('0x39')],{'$or':_[_0x6168('0x3c')](_0x92ee60,function(_0x16dd10){if(_0x16dd10[_0x6168('0x3d')]['key']!==_0x6168('0x3e')){var _0x279739={};_0x279739[_0x16dd10['field']]={'$like':'%'+_0x369d3f[_0x6168('0x2f')]['filter']+'%'};return _0x279739;}})});}_0x23685d=_[_0x6168('0x3b')]({},_0x23685d,_0x369d3f[_0x6168('0x3f')]);var _0x40a336={'where':_0x23685d[_0x6168('0x39')]};return db[_0x6168('0x2c')]['count'](_0x40a336)['then'](function(_0x3e858e){_0x546e34[_0x6168('0x1b')]=_0x3e858e;if(_0x369d3f['query'][_0x6168('0x40')]){_0x23685d[_0x6168('0x41')]=[{'all':!![]}];}return db[_0x6168('0x2c')][_0x6168('0x42')](_0x23685d);})['then'](function(_0x12be4f){_0x546e34[_0x6168('0x43')]=_0x12be4f;return _0x546e34;})['then'](respondWithFilteredResult(_0x26cae9,_0x23685d))[_0x6168('0x44')](handleError(_0x26cae9,null));};exports[_0x6168('0x45')]=function(_0x234c03,_0x19f4b9){var _0x2d809d={'raw':![],'where':{'id':_0x234c03[_0x6168('0x46')]['id']}},_0x262f88={};_0x262f88[_0x6168('0x32')]=_['keys'](db[_0x6168('0x2c')]['rawAttributes']);_0x262f88[_0x6168('0x2f')]=_[_0x6168('0x2e')](_0x234c03['query']);_0x262f88[_0x6168('0x30')]=_[_0x6168('0x31')](_0x262f88[_0x6168('0x32')],_0x262f88[_0x6168('0x2f')]);_0x2d809d[_0x6168('0x33')]=_[_0x6168('0x31')](_0x262f88[_0x6168('0x32')],qs[_0x6168('0x34')](_0x234c03[_0x6168('0x2f')][_0x6168('0x34')]));_0x2d809d[_0x6168('0x33')]=_0x2d809d[_0x6168('0x33')][_0x6168('0x47')]?_0x2d809d[_0x6168('0x33')]:_0x262f88[_0x6168('0x32')];if(_0x234c03[_0x6168('0x2f')][_0x6168('0x40')]){_0x2d809d['include']=[{'all':!![]}];}_0x2d809d=_['merge']({},_0x2d809d,_0x234c03[_0x6168('0x3f')]);return db[_0x6168('0x2c')][_0x6168('0x48')](_0x2d809d)[_0x6168('0x26')](handleEntityNotFound(_0x19f4b9,null))['then'](respondWithResult(_0x19f4b9,null))['catch'](handleError(_0x19f4b9,null));};exports[_0x6168('0x49')]=function(_0x49df8e,_0x4775ac){return db[_0x6168('0x2c')][_0x6168('0x49')](_0x49df8e['body'],{})[_0x6168('0x26')](function(_0x722e26){var _0x2a50e6=_0x49df8e[_0x6168('0x4a')][_0x6168('0x23')]({'plain':!![]});if(!_0x2a50e6)throw new Error(_0x6168('0x4b'));if(_0x2a50e6[_0x6168('0x4c')]===_0x6168('0x4a')){var _0x2cf0e9=_0x722e26[_0x6168('0x23')]({'plain':!![]});var _0x349df9=_0x6168('0x24');return db[_0x6168('0x4d')][_0x6168('0x48')]({'where':{'name':_0x349df9,'userProfileId':_0x2a50e6[_0x6168('0x4e')]},'raw':!![]})[_0x6168('0x26')](function(_0x4ea893){if(_0x4ea893&&_0x4ea893[_0x6168('0x4f')]===0x0){return db[_0x6168('0x25')][_0x6168('0x49')]({'name':_0x2cf0e9[_0x6168('0x2a')],'resourceId':_0x2cf0e9['id'],'type':_0x4ea893[_0x6168('0x2a')],'sectionId':_0x4ea893['id']},{})[_0x6168('0x26')](function(){return _0x722e26;});}else{return _0x722e26;}})[_0x6168('0x44')](function(_0xaa0a82){logger[_0x6168('0x28')](_0x6168('0x50'),_0xaa0a82);throw _0xaa0a82;});}return _0x722e26;})[_0x6168('0x26')](respondWithResult(_0x4775ac,0xc9))[_0x6168('0x44')](handleError(_0x4775ac,null));};exports[_0x6168('0x22')]=function(_0x54e018,_0x34ba78){if(_0x54e018['body']['id']){delete _0x54e018['body']['id'];}return db['Schedule'][_0x6168('0x48')]({'where':{'id':_0x54e018[_0x6168('0x46')]['id']}})[_0x6168('0x26')](handleEntityNotFound(_0x34ba78,null))['then'](saveUpdates(_0x54e018['body'],null))[_0x6168('0x26')](respondWithResult(_0x34ba78,null))[_0x6168('0x44')](handleError(_0x34ba78,null));};exports[_0x6168('0x51')]=function(_0x4c2754,_0x281f4d){return db[_0x6168('0x2c')][_0x6168('0x48')]({'where':{'id':_0x4c2754[_0x6168('0x46')]['id']}})[_0x6168('0x26')](handleEntityNotFound(_0x281f4d,null))[_0x6168('0x26')](removeEntity(_0x281f4d,null))[_0x6168('0x44')](handleError(_0x281f4d,null));};exports[_0x6168('0x52')]=function(_0x36dfb8,_0x21a652,_0xc5daf0){var _0x51fd8b=require('../../config/schedule');return db['Schedule']['find']({'where':{'id':_0x36dfb8[_0x6168('0x46')]['id']},'raw':!![]})[_0x6168('0x26')](handleEntityNotFound(_0x21a652,null))[_0x6168('0x26')](function(){_0x51fd8b[_0x6168('0x52')](_0x36dfb8[_0x6168('0x46')]['id']);})[_0x6168('0x26')](respondWithStatusCode(_0x21a652,null))[_0x6168('0x44')](handleError(_0x21a652,null));};
\ No newline at end of file
+var _0x6a5d=['api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','set','Content-Range','apply','save','then','destroy','get','UserProfileResource','error','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','Schedule','includeAll','include','findAll','rows','catch','show','params','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','Scheduler','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','run','../../config/schedule','zip-dir','fast-json-patch','request-promise','moment','bluebird','path','to-csv','lodash','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware'];(function(_0x854f20,_0x253ec2){var _0x3389c0=function(_0x274715){while(--_0x274715){_0x854f20['push'](_0x854f20['shift']());}};_0x3389c0(++_0x253ec2);}(_0x6a5d,0x91));var _0xd6a5=function(_0x3583c8,_0x114e2c){_0x3583c8=_0x3583c8-0x0;var _0x29385b=_0x6a5d[_0x3583c8];return _0x29385b;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xd6a5('0x0'));var jsonpatch=require(_0xd6a5('0x1'));var rp=require(_0xd6a5('0x2'));var moment=require(_0xd6a5('0x3'));var BPromise=require(_0xd6a5('0x4'));var Mustache=require('mustache');var util=require('util');var path=require(_0xd6a5('0x5'));var sox=require('sox');var csv=require(_0xd6a5('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xd6a5('0x7'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xd6a5('0x8'));var deskjs=require(_0xd6a5('0x9'));var toCsv=require(_0xd6a5('0x6'));var querystring=require('querystring');var Papa=require(_0xd6a5('0xa'));var Redis=require(_0xd6a5('0xb'));var authService=require(_0xd6a5('0xc'));var qs=require(_0xd6a5('0xd'));var hardwareService=require(_0xd6a5('0xe'));var logger=require('../../config/logger')(_0xd6a5('0xf'));var utils=require(_0xd6a5('0x10'));var config=require(_0xd6a5('0x11'));var db=require(_0xd6a5('0x12'))['db'];function respondWithStatusCode(_0x190979,_0x405ddd){_0x405ddd=_0x405ddd||0xcc;return function(_0x457ffd){if(_0x457ffd){return _0x190979[_0xd6a5('0x13')](_0x405ddd);}return _0x190979['status'](_0x405ddd)[_0xd6a5('0x14')]();};}function respondWithResult(_0x1c51e1,_0x246723){_0x246723=_0x246723||0xc8;return function(_0x54b758){if(_0x54b758){return _0x1c51e1[_0xd6a5('0x15')](_0x246723)[_0xd6a5('0x16')](_0x54b758);}};}function respondWithFilteredResult(_0x57fec5,_0x425b62){return function(_0x1f58dd){if(_0x1f58dd){var _0x4614a5=_0x1f58dd[_0xd6a5('0x17')],_0x3d0ed1=_0x425b62['offset'],_0x541fde=_0x425b62[_0xd6a5('0x18')]+_0x425b62['limit'],_0x2a5f6a;if(_0x541fde>=_0x4614a5){_0x541fde=_0x4614a5;_0x2a5f6a=0xc8;}else{_0x2a5f6a=0xce;}_0x57fec5[_0xd6a5('0x15')](_0x2a5f6a);return _0x57fec5[_0xd6a5('0x19')](_0xd6a5('0x1a'),_0x3d0ed1+'-'+_0x541fde+'/'+_0x4614a5)['json'](_0x1f58dd);}return null;};}function patchUpdates(_0x105e09){return function(_0x442c63){try{jsonpatch[_0xd6a5('0x1b')](_0x442c63,_0x105e09,!![]);}catch(_0x1004f3){return BPromise['reject'](_0x1004f3);}return _0x442c63[_0xd6a5('0x1c')]();};}function saveUpdates(_0x3bae64,_0x16d04a){return function(_0xb707b){if(_0xb707b){return _0xb707b['update'](_0x3bae64)[_0xd6a5('0x1d')](function(_0x199d98){return _0x199d98;});}return null;};}function removeEntity(_0x34d543,_0x486e08){return function(_0x215c47){if(_0x215c47){return _0x215c47[_0xd6a5('0x1e')]()[_0xd6a5('0x1d')](function(){var _0x31baa4=_0x215c47[_0xd6a5('0x1f')]({'plain':!![]});var _0x542587='Scheduler';return db[_0xd6a5('0x20')][_0xd6a5('0x1e')]({'where':{'type':_0x542587,'resourceId':_0x31baa4['id']}})[_0xd6a5('0x1d')](function(){return _0x215c47;});})[_0xd6a5('0x1d')](function(){_0x34d543[_0xd6a5('0x15')](0xcc)[_0xd6a5('0x14')]();});}};}function handleEntityNotFound(_0x243ebe,_0x3c25c7){return function(_0x5c881a){if(!_0x5c881a){_0x243ebe['sendStatus'](0x194);}return _0x5c881a;};}function handleError(_0x480387,_0x40dc50){_0x40dc50=_0x40dc50||0x1f4;return function(_0x1da94d){logger[_0xd6a5('0x21')](_0x1da94d[_0xd6a5('0x22')]);if(_0x1da94d[_0xd6a5('0x23')]){delete _0x1da94d['name'];}_0x480387[_0xd6a5('0x15')](_0x40dc50)[_0xd6a5('0x24')](_0x1da94d);};}exports[_0xd6a5('0x25')]=function(_0x4c0ab1,_0x5d7fe1){var _0xdc5ac5={},_0xb89087={},_0x47c9b3={'count':0x0,'rows':[]};var _0x4011be=db['Schedule'][_0xd6a5('0x26')];_0xb89087[_0xd6a5('0x27')]=_[_0xd6a5('0x28')](_0x4011be);_0xb89087[_0xd6a5('0x29')]=_[_0xd6a5('0x28')](_0x4c0ab1[_0xd6a5('0x29')]);_0xb89087[_0xd6a5('0x2a')]=_[_0xd6a5('0x2b')](_0xb89087['model'],_0xb89087[_0xd6a5('0x29')]);_0xdc5ac5['attributes']=_[_0xd6a5('0x2b')](_0xb89087['model'],qs[_0xd6a5('0x2c')](_0x4c0ab1[_0xd6a5('0x29')][_0xd6a5('0x2c')]));_0xdc5ac5[_0xd6a5('0x2d')]=_0xdc5ac5[_0xd6a5('0x2d')][_0xd6a5('0x2e')]?_0xdc5ac5[_0xd6a5('0x2d')]:_0xb89087[_0xd6a5('0x27')];if(!_0x4c0ab1['query'][_0xd6a5('0x2f')](_0xd6a5('0x30'))){_0xdc5ac5[_0xd6a5('0x31')]=qs[_0xd6a5('0x31')](_0x4c0ab1[_0xd6a5('0x29')][_0xd6a5('0x31')]);_0xdc5ac5[_0xd6a5('0x18')]=qs['offset'](_0x4c0ab1[_0xd6a5('0x29')][_0xd6a5('0x18')]);}_0xdc5ac5['order']=qs[_0xd6a5('0x32')](_0x4c0ab1[_0xd6a5('0x29')][_0xd6a5('0x32')]);_0xdc5ac5[_0xd6a5('0x33')]=qs[_0xd6a5('0x2a')](_['pick'](_0x4c0ab1[_0xd6a5('0x29')],_0xb89087[_0xd6a5('0x2a')]));if(_0x4c0ab1['query'][_0xd6a5('0x34')]){_0xdc5ac5[_0xd6a5('0x33')]=_[_0xd6a5('0x35')](_0xdc5ac5[_0xd6a5('0x33')],{'$or':_[_0xd6a5('0x36')](_0x4011be,function(_0x2c15dd){if(_0x2c15dd[_0xd6a5('0x37')][_0xd6a5('0x38')]!==_0xd6a5('0x39')){var _0x5f1004={};_0x5f1004[_0x2c15dd[_0xd6a5('0x3a')]]={'$like':'%'+_0x4c0ab1[_0xd6a5('0x29')][_0xd6a5('0x34')]+'%'};return _0x5f1004;}})});}_0xdc5ac5=_[_0xd6a5('0x35')]({},_0xdc5ac5,_0x4c0ab1[_0xd6a5('0x3b')]);var _0x41d00b={'where':_0xdc5ac5[_0xd6a5('0x33')]};return db[_0xd6a5('0x3c')][_0xd6a5('0x17')](_0x41d00b)[_0xd6a5('0x1d')](function(_0x229ab0){_0x47c9b3['count']=_0x229ab0;if(_0x4c0ab1[_0xd6a5('0x29')][_0xd6a5('0x3d')]){_0xdc5ac5[_0xd6a5('0x3e')]=[{'all':!![]}];}return db[_0xd6a5('0x3c')][_0xd6a5('0x3f')](_0xdc5ac5);})[_0xd6a5('0x1d')](function(_0x1db4d8){_0x47c9b3[_0xd6a5('0x40')]=_0x1db4d8;return _0x47c9b3;})['then'](respondWithFilteredResult(_0x5d7fe1,_0xdc5ac5))[_0xd6a5('0x41')](handleError(_0x5d7fe1,null));};exports[_0xd6a5('0x42')]=function(_0x56babe,_0x540f28){var _0x3768f4={'raw':![],'where':{'id':_0x56babe[_0xd6a5('0x43')]['id']}},_0x373238={};_0x373238[_0xd6a5('0x27')]=_[_0xd6a5('0x28')](db[_0xd6a5('0x3c')][_0xd6a5('0x26')]);_0x373238['query']=_[_0xd6a5('0x28')](_0x56babe[_0xd6a5('0x29')]);_0x373238['filters']=_[_0xd6a5('0x2b')](_0x373238[_0xd6a5('0x27')],_0x373238[_0xd6a5('0x29')]);_0x3768f4[_0xd6a5('0x2d')]=_[_0xd6a5('0x2b')](_0x373238['model'],qs['fields'](_0x56babe[_0xd6a5('0x29')]['fields']));_0x3768f4[_0xd6a5('0x2d')]=_0x3768f4['attributes'][_0xd6a5('0x2e')]?_0x3768f4[_0xd6a5('0x2d')]:_0x373238[_0xd6a5('0x27')];if(_0x56babe[_0xd6a5('0x29')][_0xd6a5('0x3d')]){_0x3768f4[_0xd6a5('0x3e')]=[{'all':!![]}];}_0x3768f4=_[_0xd6a5('0x35')]({},_0x3768f4,_0x56babe[_0xd6a5('0x3b')]);return db[_0xd6a5('0x3c')][_0xd6a5('0x44')](_0x3768f4)[_0xd6a5('0x1d')](handleEntityNotFound(_0x540f28,null))[_0xd6a5('0x1d')](respondWithResult(_0x540f28,null))[_0xd6a5('0x41')](handleError(_0x540f28,null));};exports[_0xd6a5('0x45')]=function(_0x2d16fc,_0x3b9b3f){return db[_0xd6a5('0x3c')]['create'](_0x2d16fc[_0xd6a5('0x46')],{})['then'](function(_0x2ac99c){var _0x50a3bf=_0x2d16fc[_0xd6a5('0x47')]['get']({'plain':!![]});if(!_0x50a3bf)throw new Error(_0xd6a5('0x48'));if(_0x50a3bf['role']===_0xd6a5('0x47')){var _0x34b661=_0x2ac99c[_0xd6a5('0x1f')]({'plain':!![]});var _0x1afc06=_0xd6a5('0x49');return db[_0xd6a5('0x4a')][_0xd6a5('0x44')]({'where':{'name':_0x1afc06,'userProfileId':_0x50a3bf[_0xd6a5('0x4b')]},'raw':!![]})[_0xd6a5('0x1d')](function(_0x2ea2f8){if(_0x2ea2f8&&_0x2ea2f8['autoAssociation']===0x0){return db[_0xd6a5('0x20')][_0xd6a5('0x45')]({'name':_0x34b661[_0xd6a5('0x23')],'resourceId':_0x34b661['id'],'type':_0x2ea2f8[_0xd6a5('0x23')],'sectionId':_0x2ea2f8['id']},{})[_0xd6a5('0x1d')](function(){return _0x2ac99c;});}else{return _0x2ac99c;}})[_0xd6a5('0x41')](function(_0x4952d5){logger[_0xd6a5('0x21')](_0xd6a5('0x4c'),_0x4952d5);throw _0x4952d5;});}return _0x2ac99c;})[_0xd6a5('0x1d')](respondWithResult(_0x3b9b3f,0xc9))[_0xd6a5('0x41')](handleError(_0x3b9b3f,null));};exports[_0xd6a5('0x4d')]=function(_0x540e8c,_0x27a8b2){if(_0x540e8c['body']['id']){delete _0x540e8c[_0xd6a5('0x46')]['id'];}return db[_0xd6a5('0x3c')][_0xd6a5('0x44')]({'where':{'id':_0x540e8c[_0xd6a5('0x43')]['id']}})[_0xd6a5('0x1d')](handleEntityNotFound(_0x27a8b2,null))[_0xd6a5('0x1d')](saveUpdates(_0x540e8c['body'],null))[_0xd6a5('0x1d')](respondWithResult(_0x27a8b2,null))[_0xd6a5('0x41')](handleError(_0x27a8b2,null));};exports[_0xd6a5('0x1e')]=function(_0x3923ba,_0x6bd7dd){return db[_0xd6a5('0x3c')][_0xd6a5('0x44')]({'where':{'id':_0x3923ba[_0xd6a5('0x43')]['id']}})[_0xd6a5('0x1d')](handleEntityNotFound(_0x6bd7dd,null))[_0xd6a5('0x1d')](removeEntity(_0x6bd7dd,null))['catch'](handleError(_0x6bd7dd,null));};exports[_0xd6a5('0x4e')]=function(_0x12cd69,_0x2f89d3,_0x46f74c){var _0x30ecbb=require(_0xd6a5('0x4f'));return db[_0xd6a5('0x3c')][_0xd6a5('0x44')]({'where':{'id':_0x12cd69[_0xd6a5('0x43')]['id']},'raw':!![]})[_0xd6a5('0x1d')](handleEntityNotFound(_0x2f89d3,null))['then'](function(){_0x30ecbb['run'](_0x12cd69[_0xd6a5('0x43')]['id']);})[_0xd6a5('0x1d')](respondWithStatusCode(_0x2f89d3,null))[_0xd6a5('0x41')](handleError(_0x2f89d3,null));};
\ No newline at end of file
index ed941a6..174f303 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5a5f=['exports','define','Schedule','lodash','../../config/logger','bluebird','request-promise','path','rimraf','./schedule.attributes'];(function(_0x4a5c2f,_0x15bcdd){var _0x43651d=function(_0x317042){while(--_0x317042){_0x4a5c2f['push'](_0x4a5c2f['shift']());}};_0x43651d(++_0x15bcdd);}(_0x5a5f,0x85));var _0xf5a5=function(_0x212dad,_0xb862ef){_0x212dad=_0x212dad-0x0;var _0x4fea3f=_0x5a5f[_0x212dad];return _0x4fea3f;};'use strict';var _=require(_0xf5a5('0x0'));var util=require('util');var logger=require(_0xf5a5('0x1'))('api');var moment=require('moment');var BPromise=require(_0xf5a5('0x2'));var rp=require(_0xf5a5('0x3'));var fs=require('fs');var path=require(_0xf5a5('0x4'));var rimraf=require(_0xf5a5('0x5'));var config=require('../../config/environment');var attributes=require(_0xf5a5('0x6'));module[_0xf5a5('0x7')]=function(_0x58a8c6,_0x4efdde){return _0x58a8c6[_0xf5a5('0x8')](_0xf5a5('0x9'),attributes,{'tableName':'tools_schedules','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x24f0=['define','Schedule','lodash','../../config/logger','api','request-promise','path','../../config/environment','exports'];(function(_0x50fd8a,_0x26ca95){var _0x1f8176=function(_0x48eb0c){while(--_0x48eb0c){_0x50fd8a['push'](_0x50fd8a['shift']());}};_0x1f8176(++_0x26ca95);}(_0x24f0,0x77));var _0x024f=function(_0x56470b,_0x4cc236){_0x56470b=_0x56470b-0x0;var _0x3decd4=_0x24f0[_0x56470b];return _0x3decd4;};'use strict';var _=require(_0x024f('0x0'));var util=require('util');var logger=require(_0x024f('0x1'))(_0x024f('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x024f('0x3'));var fs=require('fs');var path=require(_0x024f('0x4'));var rimraf=require('rimraf');var config=require(_0x024f('0x5'));var attributes=require('./schedule.attributes');module[_0x024f('0x6')]=function(_0x4fa0f8,_0x4c3211){return _0x4fa0f8[_0x024f('0x7')](_0x024f('0x8'),attributes,{'tableName':'tools_schedules','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index bf0bc82..ee360ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x523a=['code','error','message','result','catch','lodash','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','Schedule,\x20%s,\x20%s','request\x20sent','Schedule,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x47f72e,_0x252010){var _0x4eed08=function(_0x116c9f){while(--_0x116c9f){_0x47f72e['push'](_0x47f72e['shift']());}};_0x4eed08(++_0x252010);}(_0x523a,0x175));var _0xa523=function(_0x18abd2,_0x22d4b3){_0x18abd2=_0x18abd2-0x0;var _0x1dcad6=_0x523a[_0x18abd2];return _0x1dcad6;};'use strict';var _=require(_0xa523('0x0'));var util=require('util');var moment=require(_0xa523('0x1'));var BPromise=require(_0xa523('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xa523('0x3'));var db=require(_0xa523('0x4'))['db'];var utils=require(_0xa523('0x5'));var logger=require(_0xa523('0x6'))(_0xa523('0x7'));var config=require(_0xa523('0x8'));var jayson=require(_0xa523('0x9'));var client=jayson[_0xa523('0xa')][_0xa523('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x584d25,_0x85c5f6,_0x5635cc){return new BPromise(function(_0x129477,_0x447708){return client[_0xa523('0xc')](_0x584d25,_0x5635cc)['then'](function(_0x142131){logger[_0xa523('0xd')](_0xa523('0xe'),_0x85c5f6,_0xa523('0xf'));logger['debug'](_0xa523('0x10'),_0x85c5f6,_0xa523('0xf'),JSON[_0xa523('0x11')](_0x142131));if(_0x142131['error']){if(_0x142131['error'][_0xa523('0x12')]===0x1f4){logger[_0xa523('0x13')](_0xa523('0xe'),_0x85c5f6,_0x142131[_0xa523('0x13')]['message']);return _0x447708(_0x142131[_0xa523('0x13')]['message']);}logger[_0xa523('0x13')]('Schedule,\x20%s,\x20%s',_0x85c5f6,_0x142131[_0xa523('0x13')][_0xa523('0x14')]);return _0x129477(_0x142131['error']['message']);}else{logger[_0xa523('0xd')](_0xa523('0xe'),_0x85c5f6,_0xa523('0xf'));_0x129477(_0x142131[_0xa523('0x15')][_0xa523('0x14')]);}})[_0xa523('0x16')](function(_0x40ed36){logger[_0xa523('0x13')](_0xa523('0xe'),_0x85c5f6,_0x40ed36);_0x447708(_0x40ed36);});});}
\ No newline at end of file
+var _0x710c=['catch','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','http','request','then','info','Schedule,\x20%s,\x20%s','Schedule,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result'];(function(_0xdbe5e8,_0x4fd94a){var _0x3e2a79=function(_0x45cd35){while(--_0x45cd35){_0xdbe5e8['push'](_0xdbe5e8['shift']());}};_0x3e2a79(++_0x4fd94a);}(_0x710c,0x190));var _0xc710=function(_0x280f4a,_0x2ed8d6){_0x280f4a=_0x280f4a-0x0;var _0x1bb157=_0x710c[_0x280f4a];return _0x1bb157;};'use strict';var _=require(_0xc710('0x0'));var util=require(_0xc710('0x1'));var moment=require('moment');var BPromise=require(_0xc710('0x2'));var rs=require(_0xc710('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xc710('0x4'))['db'];var utils=require(_0xc710('0x5'));var logger=require('../../config/logger')(_0xc710('0x6'));var config=require(_0xc710('0x7'));var jayson=require('jayson/promise');var client=jayson['client'][_0xc710('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x3efef9,_0x1dad5e,_0x40cc88){return new BPromise(function(_0x232c5f,_0xb5fab0){return client[_0xc710('0x9')](_0x3efef9,_0x40cc88)[_0xc710('0xa')](function(_0x57b5cf){logger[_0xc710('0xb')](_0xc710('0xc'),_0x1dad5e,'request\x20sent');logger['debug'](_0xc710('0xd'),_0x1dad5e,_0xc710('0xe'),JSON[_0xc710('0xf')](_0x57b5cf));if(_0x57b5cf[_0xc710('0x10')]){if(_0x57b5cf[_0xc710('0x10')][_0xc710('0x11')]===0x1f4){logger['error']('Schedule,\x20%s,\x20%s',_0x1dad5e,_0x57b5cf[_0xc710('0x10')][_0xc710('0x12')]);return _0xb5fab0(_0x57b5cf[_0xc710('0x10')]['message']);}logger[_0xc710('0x10')](_0xc710('0xc'),_0x1dad5e,_0x57b5cf[_0xc710('0x10')][_0xc710('0x12')]);return _0x232c5f(_0x57b5cf[_0xc710('0x10')][_0xc710('0x12')]);}else{logger['info']('Schedule,\x20%s,\x20%s',_0x1dad5e,'request\x20sent');_0x232c5f(_0x57b5cf[_0xc710('0x13')]['message']);}})[_0xc710('0x14')](function(_0x23d628){logger[_0xc710('0x10')](_0xc710('0xc'),_0x1dad5e,_0x23d628);_0xb5fab0(_0x23d628);});});}
\ No newline at end of file
index fd5b430..ee10db7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5322=['destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','./screenRecording.controller','get','isAuthenticated','index','/describe','describe','/:id','show','download','post','create','put','update','delete'];(function(_0x4477e1,_0x21bdc1){var _0x1db42a=function(_0x2fb79e){while(--_0x2fb79e){_0x4477e1['push'](_0x4477e1['shift']());}};_0x1db42a(++_0x21bdc1);}(_0x5322,0xff));var _0x2532=function(_0x549278,_0x450754){_0x549278=_0x549278-0x0;var _0x1ea9a1=_0x5322[_0x549278];return _0x1ea9a1;};'use strict';var multer=require(_0x2532('0x0'));var util=require(_0x2532('0x1'));var path=require(_0x2532('0x2'));var timeout=require('connect-timeout');var express=require(_0x2532('0x3'));var router=express[_0x2532('0x4')]();var auth=require(_0x2532('0x5'));var interaction=require(_0x2532('0x6'));var config=require('../../config/environment');var controller=require(_0x2532('0x7'));router[_0x2532('0x8')]('/',auth[_0x2532('0x9')](),controller[_0x2532('0xa')]);router[_0x2532('0x8')](_0x2532('0xb'),auth['isAuthenticated'](),controller[_0x2532('0xc')]);router[_0x2532('0x8')](_0x2532('0xd'),auth[_0x2532('0x9')](),controller[_0x2532('0xe')]);router[_0x2532('0x8')]('/:id/download',auth[_0x2532('0x9')](),controller[_0x2532('0xf')]);router[_0x2532('0x10')]('/',auth['isAuthenticated'](),controller[_0x2532('0x11')]);router[_0x2532('0x12')](_0x2532('0xd'),auth[_0x2532('0x9')](),controller[_0x2532('0x13')]);router[_0x2532('0x14')](_0x2532('0xd'),auth[_0x2532('0x9')](),controller[_0x2532('0x15')]);module[_0x2532('0x16')]=router;
\ No newline at end of file
+var _0x51f2=['put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','describe','/:id','/:id/download','download','create'];(function(_0x8bb935,_0x2eb788){var _0x17696c=function(_0x6ad288){while(--_0x6ad288){_0x8bb935['push'](_0x8bb935['shift']());}};_0x17696c(++_0x2eb788);}(_0x51f2,0xeb));var _0x251f=function(_0x348e92,_0x17ddd5){_0x348e92=_0x348e92-0x0;var _0x140b2c=_0x51f2[_0x348e92];return _0x140b2c;};'use strict';var multer=require(_0x251f('0x0'));var util=require(_0x251f('0x1'));var path=require(_0x251f('0x2'));var timeout=require(_0x251f('0x3'));var express=require(_0x251f('0x4'));var router=express[_0x251f('0x5')]();var auth=require(_0x251f('0x6'));var interaction=require(_0x251f('0x7'));var config=require(_0x251f('0x8'));var controller=require('./screenRecording.controller');router[_0x251f('0x9')]('/',auth[_0x251f('0xa')](),controller[_0x251f('0xb')]);router[_0x251f('0x9')](_0x251f('0xc'),auth['isAuthenticated'](),controller[_0x251f('0xd')]);router[_0x251f('0x9')](_0x251f('0xe'),auth[_0x251f('0xa')](),controller['show']);router[_0x251f('0x9')](_0x251f('0xf'),auth[_0x251f('0xa')](),controller[_0x251f('0x10')]);router['post']('/',auth[_0x251f('0xa')](),controller[_0x251f('0x11')]);router[_0x251f('0x12')](_0x251f('0xe'),auth['isAuthenticated'](),controller[_0x251f('0x13')]);router[_0x251f('0x14')](_0x251f('0xe'),auth[_0x251f('0xa')](),controller[_0x251f('0x15')]);module[_0x251f('0x16')]=router;
\ No newline at end of file
index af43efc..a5cae4f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc6aa=['VIRTUAL','getDataValue','value','extname','STRING','replace','setDataValue','INTEGER','startedAt','subtract','closedAt','format','MM-DD-YYYY\x20HH:mm','toString','DATE','sequelize','../../config/environment'];(function(_0xde07d3,_0x36f465){var _0x1f5b93=function(_0xf31be2){while(--_0xf31be2){_0xde07d3['push'](_0xde07d3['shift']());}};_0x1f5b93(++_0x36f465);}(_0xc6aa,0x75));var _0xac6a=function(_0x5da089,_0x229a34){_0x5da089=_0x5da089-0x0;var _0x4391e8=_0xc6aa[_0x5da089];return _0x4391e8;};'use strict';var Sequelize=require(_0xac6a('0x0'));var moment=require('moment');var path=require('path');var config=require(_0xac6a('0x1'));module['exports']={'format':{'type':Sequelize[_0xac6a('0x2')],'get':function(){return this[_0xac6a('0x3')](_0xac6a('0x4'))?path[_0xac6a('0x5')](this[_0xac6a('0x3')](_0xac6a('0x4'))):undefined;}},'interactionid':{'type':Sequelize[_0xac6a('0x6')]},'channel':{'type':Sequelize[_0xac6a('0x6')]},'value':{'type':Sequelize['STRING'],'set':function(_0x5b58d0){var _0x4612c6=_0x5b58d0[_0xac6a('0x7')](/\\/g,'/');this[_0xac6a('0x8')](_0xac6a('0x4'),_0x4612c6);}},'rating':{'type':Sequelize[_0xac6a('0x9')],'validate':{'max':0x5,'min':0x0}},'duration':{'type':Sequelize[_0xac6a('0x9')],'set':function(_0x447531){this[_0xac6a('0x8')](_0xac6a('0xa'),moment()[_0xac6a('0xb')](_0x447531,'ms'));this[_0xac6a('0x8')](_0xac6a('0xc'),moment());this[_0xac6a('0x8')]('duration',_0x447531);}},'startedAt':{'type':Sequelize['DATE'],'get':function(){return moment(this[_0xac6a('0x3')](_0xac6a('0xa')))[_0xac6a('0xd')](_0xac6a('0xe'))[_0xac6a('0xf')]();}},'closedAt':{'type':Sequelize[_0xac6a('0x10')],'get':function(){return moment(this[_0xac6a('0x3')](_0xac6a('0xc')))[_0xac6a('0xd')]('MM-DD-YYYY\x20HH:mm')[_0xac6a('0xf')]();}},'createdAt':{'type':Sequelize['DATE'],'get':function(){return moment(this[_0xac6a('0x3')]('createdAt'))['format']('MM-DD-YYYY\x20HH:mm')[_0xac6a('0xf')]();}},'updatedAt':{'type':Sequelize['DATE'],'get':function(){return moment(this[_0xac6a('0x3')]('updatedAt'))[_0xac6a('0xd')]('MM-DD-YYYY\x20HH:mm')[_0xac6a('0xf')]();}}};
\ No newline at end of file
+var _0x0e12=['startedAt','subtract','closedAt','duration','DATE','format','MM-DD-YYYY\x20HH:mm','toString','createdAt','updatedAt','sequelize','moment','path','../../config/environment','exports','VIRTUAL','getDataValue','extname','value','STRING','setDataValue','INTEGER'];(function(_0x53b7c2,_0x4b8b49){var _0x2a682a=function(_0x3a1a80){while(--_0x3a1a80){_0x53b7c2['push'](_0x53b7c2['shift']());}};_0x2a682a(++_0x4b8b49);}(_0x0e12,0x180));var _0x20e1=function(_0x3f88bc,_0xe38cf5){_0x3f88bc=_0x3f88bc-0x0;var _0x4df1c4=_0x0e12[_0x3f88bc];return _0x4df1c4;};'use strict';var Sequelize=require(_0x20e1('0x0'));var moment=require(_0x20e1('0x1'));var path=require(_0x20e1('0x2'));var config=require(_0x20e1('0x3'));module[_0x20e1('0x4')]={'format':{'type':Sequelize[_0x20e1('0x5')],'get':function(){return this[_0x20e1('0x6')]('value')?path[_0x20e1('0x7')](this[_0x20e1('0x6')](_0x20e1('0x8'))):undefined;}},'interactionid':{'type':Sequelize['STRING']},'channel':{'type':Sequelize[_0x20e1('0x9')]},'value':{'type':Sequelize[_0x20e1('0x9')],'set':function(_0x51499b){var _0x33efe6=_0x51499b['replace'](/\\/g,'/');this[_0x20e1('0xa')]('value',_0x33efe6);}},'rating':{'type':Sequelize[_0x20e1('0xb')],'validate':{'max':0x5,'min':0x0}},'duration':{'type':Sequelize[_0x20e1('0xb')],'set':function(_0x4e9e99){this[_0x20e1('0xa')](_0x20e1('0xc'),moment()[_0x20e1('0xd')](_0x4e9e99,'ms'));this[_0x20e1('0xa')](_0x20e1('0xe'),moment());this[_0x20e1('0xa')](_0x20e1('0xf'),_0x4e9e99);}},'startedAt':{'type':Sequelize[_0x20e1('0x10')],'get':function(){return moment(this[_0x20e1('0x6')]('startedAt'))[_0x20e1('0x11')](_0x20e1('0x12'))['toString']();}},'closedAt':{'type':Sequelize['DATE'],'get':function(){return moment(this[_0x20e1('0x6')](_0x20e1('0xe')))[_0x20e1('0x11')](_0x20e1('0x12'))[_0x20e1('0x13')]();}},'createdAt':{'type':Sequelize[_0x20e1('0x10')],'get':function(){return moment(this[_0x20e1('0x6')](_0x20e1('0x14')))['format'](_0x20e1('0x12'))[_0x20e1('0x13')]();}},'updatedAt':{'type':Sequelize[_0x20e1('0x10')],'get':function(){return moment(this[_0x20e1('0x6')](_0x20e1('0x15')))['format'](_0x20e1('0x12'))['toString']();}}};
\ No newline at end of file
index 0e4961d..625ad48 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4bad=['moment','bluebird','path','sox','to-csv','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','api','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','save','update','then','end','error','name','send','index','ScreenRecording','model','format','query','keys','intersection','fields','attributes','length','hasOwnProperty','nolimit','sort','pick','filter','where','map','type','key','VIRTUAL','field','merge','options','includeAll','include','catch','show','params','rawAttributes','filters','find','create','body','createdAt','value','describe','download','../../components/encryptor','uniqueid','join','root','server/files/screen_recordings','%s.cypher','existsSync','decryptFile','ValidationError','filename','unlink','ScreenRecording\x20not\x20found','Not\x20found','eml-format','zip-dir','fast-json-patch','request-promise'];(function(_0x16c2c5,_0x59f42b){var _0x1f2414=function(_0x7d9362){while(--_0x7d9362){_0x16c2c5['push'](_0x16c2c5['shift']());}};_0x1f2414(++_0x59f42b);}(_0x4bad,0xa8));var _0xd4ba=function(_0x2dfb67,_0x1cf249){_0x2dfb67=_0x2dfb67-0x0;var _0x1db9e3=_0x4bad[_0x2dfb67];return _0x1db9e3;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xd4ba('0x0'));var rimraf=require('rimraf');var zipdir=require(_0xd4ba('0x1'));var jsonpatch=require(_0xd4ba('0x2'));var rp=require(_0xd4ba('0x3'));var moment=require(_0xd4ba('0x4'));var BPromise=require(_0xd4ba('0x5'));var Mustache=require('mustache');var util=require('util');var path=require(_0xd4ba('0x6'));var sox=require(_0xd4ba('0x7'));var csv=require(_0xd4ba('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xd4ba('0x9'));var squel=require(_0xd4ba('0xa'));var crypto=require(_0xd4ba('0xb'));var jsforce=require(_0xd4ba('0xc'));var deskjs=require('desk.js');var toCsv=require(_0xd4ba('0x8'));var querystring=require(_0xd4ba('0xd'));var Papa=require(_0xd4ba('0xe'));var Redis=require('ioredis');var authService=require(_0xd4ba('0xf'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xd4ba('0x10'));var logger=require('../../config/logger')(_0xd4ba('0x11'));var utils=require('../../config/utils');var config=require(_0xd4ba('0x12'));var db=require(_0xd4ba('0x13'))['db'];function respondWithStatusCode(_0x441f5f,_0x119ae7){_0x119ae7=_0x119ae7||0xcc;return function(_0x26c037){if(_0x26c037){return _0x441f5f[_0xd4ba('0x14')](_0x119ae7);}return _0x441f5f[_0xd4ba('0x15')](_0x119ae7)['end']();};}function respondWithResult(_0x5af6e2,_0xd08cf1){_0xd08cf1=_0xd08cf1||0xc8;return function(_0x1e9f03){if(_0x1e9f03){return _0x5af6e2[_0xd4ba('0x15')](_0xd08cf1)[_0xd4ba('0x16')](_0x1e9f03);}};}function respondWithFilteredResult(_0x57e0e3,_0xe4fae5){return function(_0x5a4699){if(_0x5a4699){var _0xcc2d22=_0x5a4699[_0xd4ba('0x17')],_0x62efac=_0xe4fae5[_0xd4ba('0x18')],_0x318d34=_0xe4fae5['offset']+_0xe4fae5[_0xd4ba('0x19')],_0x388c2c;if(_0x318d34>=_0xcc2d22){_0x318d34=_0xcc2d22;_0x388c2c=0xc8;}else{_0x388c2c=0xce;}_0x57e0e3[_0xd4ba('0x15')](_0x388c2c);return _0x57e0e3[_0xd4ba('0x1a')](_0xd4ba('0x1b'),_0x62efac+'-'+_0x318d34+'/'+_0xcc2d22)['json'](_0x5a4699);}return null;};}function patchUpdates(_0x5dad03){return function(_0xbcda28){try{jsonpatch[_0xd4ba('0x1c')](_0xbcda28,_0x5dad03,!![]);}catch(_0x1a3baf){return BPromise['reject'](_0x1a3baf);}return _0xbcda28[_0xd4ba('0x1d')]();};}function saveUpdates(_0x3bba33,_0x276dfc){return function(_0x12cf8e){if(_0x12cf8e){return _0x12cf8e[_0xd4ba('0x1e')](_0x3bba33)[_0xd4ba('0x1f')](function(_0x2aac5b){return _0x2aac5b;});}return null;};}function removeEntity(_0x20d9c3,_0x44e698){return function(_0x35b1cc){if(_0x35b1cc){return _0x35b1cc['destroy']()[_0xd4ba('0x1f')](function(){_0x20d9c3[_0xd4ba('0x15')](0xcc)[_0xd4ba('0x20')]();});}};}function handleEntityNotFound(_0x543338,_0x3d8b57){return function(_0x5e6b6c){if(!_0x5e6b6c){_0x543338[_0xd4ba('0x14')](0x194);}return _0x5e6b6c;};}function handleError(_0x2bb8d0,_0x496cb4){_0x496cb4=_0x496cb4||0x1f4;return function(_0x434a94){logger[_0xd4ba('0x21')](_0x434a94['stack']);if(_0x434a94[_0xd4ba('0x22')]){delete _0x434a94['name'];}_0x2bb8d0['status'](_0x496cb4)[_0xd4ba('0x23')](_0x434a94);};}exports[_0xd4ba('0x24')]=function(_0x291152,_0x4951dd){var _0x23d175={},_0x34f75f={},_0x6eba38={'count':0x0,'rows':[]};var _0x59b227=db[_0xd4ba('0x25')]['rawAttributes'];_0x34f75f[_0xd4ba('0x26')]=_['differenceBy'](_['keys'](_0x59b227),[_0xd4ba('0x27')]);_0x34f75f[_0xd4ba('0x28')]=_[_0xd4ba('0x29')](_0x291152['query']);_0x34f75f['filters']=_[_0xd4ba('0x2a')](_0x34f75f[_0xd4ba('0x26')],_0x34f75f[_0xd4ba('0x28')]);_0x23d175['attributes']=_[_0xd4ba('0x2a')](_0x34f75f[_0xd4ba('0x26')],qs[_0xd4ba('0x2b')](_0x291152[_0xd4ba('0x28')][_0xd4ba('0x2b')]));_0x23d175[_0xd4ba('0x2c')]=_0x23d175[_0xd4ba('0x2c')][_0xd4ba('0x2d')]?_0x23d175[_0xd4ba('0x2c')]:_0x34f75f[_0xd4ba('0x26')];if(!_0x291152[_0xd4ba('0x28')][_0xd4ba('0x2e')](_0xd4ba('0x2f'))){_0x23d175[_0xd4ba('0x19')]=qs[_0xd4ba('0x19')](_0x291152[_0xd4ba('0x28')][_0xd4ba('0x19')]);_0x23d175[_0xd4ba('0x18')]=qs[_0xd4ba('0x18')](_0x291152['query'][_0xd4ba('0x18')]);}_0x23d175['order']=qs[_0xd4ba('0x30')](_0x291152[_0xd4ba('0x28')]['sort']);_0x23d175['where']=qs['filters'](_[_0xd4ba('0x31')](_0x291152[_0xd4ba('0x28')],_0x34f75f['filters']));if(_0x291152[_0xd4ba('0x28')][_0xd4ba('0x32')]){_0x23d175[_0xd4ba('0x33')]=_['merge'](_0x23d175[_0xd4ba('0x33')],{'$or':_[_0xd4ba('0x34')](_0x59b227,function(_0x18530a){if(_0x18530a[_0xd4ba('0x35')][_0xd4ba('0x36')]!==_0xd4ba('0x37')){var _0x29c1ad={};_0x29c1ad[_0x18530a[_0xd4ba('0x38')]]={'$like':'%'+_0x291152[_0xd4ba('0x28')][_0xd4ba('0x32')]+'%'};return _0x29c1ad;}})});}_0x23d175=_[_0xd4ba('0x39')]({},_0x23d175,_0x291152[_0xd4ba('0x3a')]);var _0x42b33c={'where':_0x23d175['where']};return db[_0xd4ba('0x25')][_0xd4ba('0x17')](_0x42b33c)[_0xd4ba('0x1f')](function(_0x26f988){_0x6eba38['count']=_0x26f988;if(_0x291152['query'][_0xd4ba('0x3b')]){_0x23d175[_0xd4ba('0x3c')]=[{'all':!![]}];}return db[_0xd4ba('0x25')]['findAll'](_0x23d175);})[_0xd4ba('0x1f')](function(_0x1642e0){_0x6eba38['rows']=_0x1642e0;return _0x6eba38;})[_0xd4ba('0x1f')](respondWithFilteredResult(_0x4951dd,_0x23d175))[_0xd4ba('0x3d')](handleError(_0x4951dd,null));};exports[_0xd4ba('0x3e')]=function(_0x23c9ba,_0x2fd1c2){var _0x505c0b={'raw':![],'where':{'id':_0x23c9ba[_0xd4ba('0x3f')]['id']}},_0x36f8d1={};_0x36f8d1[_0xd4ba('0x26')]=_[_0xd4ba('0x29')](db['ScreenRecording'][_0xd4ba('0x40')]);_0x36f8d1[_0xd4ba('0x28')]=_[_0xd4ba('0x29')](_0x23c9ba[_0xd4ba('0x28')]);_0x36f8d1[_0xd4ba('0x41')]=_[_0xd4ba('0x2a')](_0x36f8d1['model'],_0x36f8d1[_0xd4ba('0x28')]);_0x505c0b['attributes']=_[_0xd4ba('0x2a')](_0x36f8d1[_0xd4ba('0x26')],qs['fields'](_0x23c9ba[_0xd4ba('0x28')][_0xd4ba('0x2b')]));_0x505c0b['attributes']=_0x505c0b['attributes']['length']?_0x505c0b[_0xd4ba('0x2c')]:_0x36f8d1[_0xd4ba('0x26')];if(_0x23c9ba[_0xd4ba('0x28')][_0xd4ba('0x3b')]){_0x505c0b[_0xd4ba('0x3c')]=[{'all':!![]}];}_0x505c0b=_[_0xd4ba('0x39')]({},_0x505c0b,_0x23c9ba[_0xd4ba('0x3a')]);return db[_0xd4ba('0x25')][_0xd4ba('0x42')](_0x505c0b)[_0xd4ba('0x1f')](handleEntityNotFound(_0x2fd1c2,null))[_0xd4ba('0x1f')](respondWithResult(_0x2fd1c2,null))[_0xd4ba('0x3d')](handleError(_0x2fd1c2,null));};exports[_0xd4ba('0x43')]=function(_0x313e25,_0x13f950){return db[_0xd4ba('0x25')][_0xd4ba('0x43')](_0x313e25[_0xd4ba('0x44')],{})[_0xd4ba('0x1f')](respondWithResult(_0x13f950,0xc9))[_0xd4ba('0x3d')](handleError(_0x13f950,null));};exports['update']=function(_0x377720,_0x2c4b7d){if(_0x377720[_0xd4ba('0x44')]['id']){delete _0x377720['body']['id'];}delete _0x377720['body']['duration'];delete _0x377720['body'][_0xd4ba('0x45')];delete _0x377720[_0xd4ba('0x44')]['closedAt'];delete _0x377720['body'][_0xd4ba('0x46')];return db[_0xd4ba('0x25')]['find']({'where':{'id':_0x377720[_0xd4ba('0x3f')]['id']}})[_0xd4ba('0x1f')](handleEntityNotFound(_0x2c4b7d,null))['then'](saveUpdates(_0x377720[_0xd4ba('0x44')],null))['then'](respondWithResult(_0x2c4b7d,null))[_0xd4ba('0x3d')](handleError(_0x2c4b7d,null));};exports['destroy']=function(_0xd77895,_0x9135f4){return db[_0xd4ba('0x25')][_0xd4ba('0x42')]({'where':{'id':_0xd77895[_0xd4ba('0x3f')]['id']}})['then'](handleEntityNotFound(_0x9135f4,null))[_0xd4ba('0x1f')](removeEntity(_0x9135f4,null))['catch'](handleError(_0x9135f4,null));};exports[_0xd4ba('0x47')]=function(_0x5717e1,_0x3e7946){return db['ScreenRecording']['describe']()['then'](respondWithResult(_0x3e7946,null))['catch'](handleError(_0x3e7946,null));};exports[_0xd4ba('0x48')]=function(_0x30f41f,_0x3a3918,_0x5d6960){var _0x57a793=require(_0xd4ba('0x49'));var _0x257b22=![];var _0x24a52f={};if(_0x30f41f[_0xd4ba('0x28')][_0xd4ba('0x35')]&&_0x30f41f['query']['type']==='uniqueid'){_0x24a52f[_0xd4ba('0x4a')]=_0x30f41f['params']['id'];}else{_0x24a52f['id']=_0x30f41f['params']['id'];}return db[_0xd4ba('0x25')][_0xd4ba('0x42')]({'where':_0x24a52f,'attributes':['id','value'],'raw':!![]})[_0xd4ba('0x1f')](handleEntityNotFound(_0x3a3918,null))[_0xd4ba('0x1f')](function(_0x4bdfb){if(_0x4bdfb){var _0x253574=path[_0xd4ba('0x4b')](config[_0xd4ba('0x4c')],_0xd4ba('0x4d'),_0x4bdfb['value']);var _0x4fd01c=util['format'](_0xd4ba('0x4e'),_0x253574);if(fs[_0xd4ba('0x4f')](_0x4fd01c)){_0x257b22=!![];return _0x57a793[_0xd4ba('0x50')](_0x4fd01c,_0x253574,config['secrets']['recording'])[_0xd4ba('0x1f')](function(){return _0x4bdfb;});}return _0x4bdfb;}})[_0xd4ba('0x1f')](function(_0x42f599){if(_0x42f599){var _0x4a10ca=path['join'](config['root'],_0xd4ba('0x4d'),_0x42f599['value']);if(!fs[_0xd4ba('0x4f')](_0x4a10ca)){throw new db['Sequelize'][(_0xd4ba('0x51'))]('ScreenRecording\x20not\x20found');}if(_0x42f599['filename']){return _0x3a3918['download'](_0x4a10ca,_0x42f599[_0xd4ba('0x52')]+path['extname'](_0x4a10ca),function(){if(_0x257b22){fs[_0xd4ba('0x53')](_0x4a10ca);}});}else{return _0x3a3918[_0xd4ba('0x48')](_0x4a10ca,function(_0x2b9b9f){if(_0x257b22){fs[_0xd4ba('0x53')](_0x4a10ca);}});}}})[_0xd4ba('0x3d')](function(_0x1f406f){if(_0x1f406f['message']===_0xd4ba('0x54')){_0x3a3918['status'](0x194)[_0xd4ba('0x23')](_0xd4ba('0x55'));}else{return handleError(_0x3a3918,null);}});};
\ No newline at end of file
+var _0xdc1e=['squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','apply','reject','save','then','destroy','error','name','send','ScreenRecording','rawAttributes','model','differenceBy','format','query','filters','intersection','attributes','fields','order','sort','where','pick','filter','map','type','VIRTUAL','field','merge','options','includeAll','include','findAll','rows','catch','show','params','length','body','update','createdAt','closedAt','value','find','describe','download','../../components/encryptor','uniqueid','join','root','server/files/screen_recordings','%s.cypher','existsSync','secrets','Sequelize','ScreenRecording\x20not\x20found','filename','extname','unlink','message','Not\x20found','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','util','path','sox','to-csv','ejs'];(function(_0x543a4f,_0x2c629f){var _0x8a1aaf=function(_0xe38c40){while(--_0xe38c40){_0x543a4f['push'](_0x543a4f['shift']());}};_0x8a1aaf(++_0x2c629f);}(_0xdc1e,0x1bd));var _0xedc1=function(_0x17d497,_0x28f378){_0x17d497=_0x17d497-0x0;var _0x210de8=_0xdc1e[_0x17d497];return _0x210de8;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xedc1('0x0'));var rimraf=require(_0xedc1('0x1'));var zipdir=require(_0xedc1('0x2'));var jsonpatch=require(_0xedc1('0x3'));var rp=require(_0xedc1('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0xedc1('0x5'));var path=require(_0xedc1('0x6'));var sox=require(_0xedc1('0x7'));var csv=require(_0xedc1('0x8'));var ejs=require(_0xedc1('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0xedc1('0xa'));var crypto=require('crypto');var jsforce=require(_0xedc1('0xb'));var deskjs=require(_0xedc1('0xc'));var toCsv=require(_0xedc1('0x8'));var querystring=require(_0xedc1('0xd'));var Papa=require(_0xedc1('0xe'));var Redis=require(_0xedc1('0xf'));var authService=require(_0xedc1('0x10'));var qs=require(_0xedc1('0x11'));var hardwareService=require(_0xedc1('0x12'));var logger=require('../../config/logger')(_0xedc1('0x13'));var utils=require(_0xedc1('0x14'));var config=require(_0xedc1('0x15'));var db=require(_0xedc1('0x16'))['db'];function respondWithStatusCode(_0x35679a,_0x5ea687){_0x5ea687=_0x5ea687||0xcc;return function(_0x2fbd68){if(_0x2fbd68){return _0x35679a[_0xedc1('0x17')](_0x5ea687);}return _0x35679a['status'](_0x5ea687)[_0xedc1('0x18')]();};}function respondWithResult(_0x972216,_0x38c94d){_0x38c94d=_0x38c94d||0xc8;return function(_0x641629){if(_0x641629){return _0x972216[_0xedc1('0x19')](_0x38c94d)[_0xedc1('0x1a')](_0x641629);}};}function respondWithFilteredResult(_0x63adef,_0x390eca){return function(_0x16af00){if(_0x16af00){var _0x5ae9ad=_0x16af00[_0xedc1('0x1b')],_0x1b0a3a=_0x390eca[_0xedc1('0x1c')],_0x2a4ce4=_0x390eca['offset']+_0x390eca[_0xedc1('0x1d')],_0x38d4ce;if(_0x2a4ce4>=_0x5ae9ad){_0x2a4ce4=_0x5ae9ad;_0x38d4ce=0xc8;}else{_0x38d4ce=0xce;}_0x63adef[_0xedc1('0x19')](_0x38d4ce);return _0x63adef[_0xedc1('0x1e')]('Content-Range',_0x1b0a3a+'-'+_0x2a4ce4+'/'+_0x5ae9ad)[_0xedc1('0x1a')](_0x16af00);}return null;};}function patchUpdates(_0x20a14b){return function(_0x531671){try{jsonpatch[_0xedc1('0x1f')](_0x531671,_0x20a14b,!![]);}catch(_0x394658){return BPromise[_0xedc1('0x20')](_0x394658);}return _0x531671[_0xedc1('0x21')]();};}function saveUpdates(_0x54cd95,_0x54832d){return function(_0x1981f8){if(_0x1981f8){return _0x1981f8['update'](_0x54cd95)[_0xedc1('0x22')](function(_0x298d22){return _0x298d22;});}return null;};}function removeEntity(_0x3e1501,_0x4b8878){return function(_0x2cafbd){if(_0x2cafbd){return _0x2cafbd[_0xedc1('0x23')]()[_0xedc1('0x22')](function(){_0x3e1501[_0xedc1('0x19')](0xcc)[_0xedc1('0x18')]();});}};}function handleEntityNotFound(_0x1e6c8b,_0x15c5aa){return function(_0x3019f6){if(!_0x3019f6){_0x1e6c8b[_0xedc1('0x17')](0x194);}return _0x3019f6;};}function handleError(_0x6e66ee,_0x47d87a){_0x47d87a=_0x47d87a||0x1f4;return function(_0x478dc1){logger[_0xedc1('0x24')](_0x478dc1['stack']);if(_0x478dc1[_0xedc1('0x25')]){delete _0x478dc1[_0xedc1('0x25')];}_0x6e66ee[_0xedc1('0x19')](_0x47d87a)[_0xedc1('0x26')](_0x478dc1);};}exports['index']=function(_0x141ffc,_0x7dab1e){var _0x5972ec={},_0x154e1c={},_0x384bab={'count':0x0,'rows':[]};var _0x79d2f8=db[_0xedc1('0x27')][_0xedc1('0x28')];_0x154e1c[_0xedc1('0x29')]=_[_0xedc1('0x2a')](_['keys'](_0x79d2f8),[_0xedc1('0x2b')]);_0x154e1c[_0xedc1('0x2c')]=_['keys'](_0x141ffc[_0xedc1('0x2c')]);_0x154e1c[_0xedc1('0x2d')]=_[_0xedc1('0x2e')](_0x154e1c['model'],_0x154e1c[_0xedc1('0x2c')]);_0x5972ec[_0xedc1('0x2f')]=_[_0xedc1('0x2e')](_0x154e1c[_0xedc1('0x29')],qs[_0xedc1('0x30')](_0x141ffc[_0xedc1('0x2c')]['fields']));_0x5972ec[_0xedc1('0x2f')]=_0x5972ec['attributes']['length']?_0x5972ec[_0xedc1('0x2f')]:_0x154e1c[_0xedc1('0x29')];if(!_0x141ffc[_0xedc1('0x2c')]['hasOwnProperty']('nolimit')){_0x5972ec['limit']=qs[_0xedc1('0x1d')](_0x141ffc[_0xedc1('0x2c')][_0xedc1('0x1d')]);_0x5972ec[_0xedc1('0x1c')]=qs[_0xedc1('0x1c')](_0x141ffc['query'][_0xedc1('0x1c')]);}_0x5972ec[_0xedc1('0x31')]=qs[_0xedc1('0x32')](_0x141ffc['query'][_0xedc1('0x32')]);_0x5972ec[_0xedc1('0x33')]=qs[_0xedc1('0x2d')](_[_0xedc1('0x34')](_0x141ffc[_0xedc1('0x2c')],_0x154e1c[_0xedc1('0x2d')]));if(_0x141ffc[_0xedc1('0x2c')][_0xedc1('0x35')]){_0x5972ec[_0xedc1('0x33')]=_['merge'](_0x5972ec[_0xedc1('0x33')],{'$or':_[_0xedc1('0x36')](_0x79d2f8,function(_0x25af5e){if(_0x25af5e[_0xedc1('0x37')]['key']!==_0xedc1('0x38')){var _0x4c273c={};_0x4c273c[_0x25af5e[_0xedc1('0x39')]]={'$like':'%'+_0x141ffc[_0xedc1('0x2c')]['filter']+'%'};return _0x4c273c;}})});}_0x5972ec=_[_0xedc1('0x3a')]({},_0x5972ec,_0x141ffc[_0xedc1('0x3b')]);var _0x39b825={'where':_0x5972ec['where']};return db[_0xedc1('0x27')][_0xedc1('0x1b')](_0x39b825)[_0xedc1('0x22')](function(_0x3156a4){_0x384bab[_0xedc1('0x1b')]=_0x3156a4;if(_0x141ffc[_0xedc1('0x2c')][_0xedc1('0x3c')]){_0x5972ec[_0xedc1('0x3d')]=[{'all':!![]}];}return db[_0xedc1('0x27')][_0xedc1('0x3e')](_0x5972ec);})[_0xedc1('0x22')](function(_0x2e1af0){_0x384bab[_0xedc1('0x3f')]=_0x2e1af0;return _0x384bab;})[_0xedc1('0x22')](respondWithFilteredResult(_0x7dab1e,_0x5972ec))[_0xedc1('0x40')](handleError(_0x7dab1e,null));};exports[_0xedc1('0x41')]=function(_0x341728,_0x2d2252){var _0xc4c42a={'raw':![],'where':{'id':_0x341728[_0xedc1('0x42')]['id']}},_0x2c5298={};_0x2c5298[_0xedc1('0x29')]=_['keys'](db[_0xedc1('0x27')][_0xedc1('0x28')]);_0x2c5298[_0xedc1('0x2c')]=_['keys'](_0x341728['query']);_0x2c5298[_0xedc1('0x2d')]=_[_0xedc1('0x2e')](_0x2c5298[_0xedc1('0x29')],_0x2c5298['query']);_0xc4c42a[_0xedc1('0x2f')]=_['intersection'](_0x2c5298[_0xedc1('0x29')],qs[_0xedc1('0x30')](_0x341728[_0xedc1('0x2c')][_0xedc1('0x30')]));_0xc4c42a[_0xedc1('0x2f')]=_0xc4c42a[_0xedc1('0x2f')][_0xedc1('0x43')]?_0xc4c42a[_0xedc1('0x2f')]:_0x2c5298[_0xedc1('0x29')];if(_0x341728['query']['includeAll']){_0xc4c42a['include']=[{'all':!![]}];}_0xc4c42a=_['merge']({},_0xc4c42a,_0x341728['options']);return db['ScreenRecording']['find'](_0xc4c42a)[_0xedc1('0x22')](handleEntityNotFound(_0x2d2252,null))[_0xedc1('0x22')](respondWithResult(_0x2d2252,null))[_0xedc1('0x40')](handleError(_0x2d2252,null));};exports['create']=function(_0x42373e,_0x2aa339){return db['ScreenRecording']['create'](_0x42373e[_0xedc1('0x44')],{})[_0xedc1('0x22')](respondWithResult(_0x2aa339,0xc9))[_0xedc1('0x40')](handleError(_0x2aa339,null));};exports[_0xedc1('0x45')]=function(_0x2b8742,_0x4dc42e){if(_0x2b8742[_0xedc1('0x44')]['id']){delete _0x2b8742['body']['id'];}delete _0x2b8742[_0xedc1('0x44')]['duration'];delete _0x2b8742[_0xedc1('0x44')][_0xedc1('0x46')];delete _0x2b8742[_0xedc1('0x44')][_0xedc1('0x47')];delete _0x2b8742[_0xedc1('0x44')][_0xedc1('0x48')];return db['ScreenRecording']['find']({'where':{'id':_0x2b8742[_0xedc1('0x42')]['id']}})[_0xedc1('0x22')](handleEntityNotFound(_0x4dc42e,null))[_0xedc1('0x22')](saveUpdates(_0x2b8742[_0xedc1('0x44')],null))[_0xedc1('0x22')](respondWithResult(_0x4dc42e,null))['catch'](handleError(_0x4dc42e,null));};exports[_0xedc1('0x23')]=function(_0x21b1a9,_0x361069){return db[_0xedc1('0x27')][_0xedc1('0x49')]({'where':{'id':_0x21b1a9['params']['id']}})['then'](handleEntityNotFound(_0x361069,null))[_0xedc1('0x22')](removeEntity(_0x361069,null))[_0xedc1('0x40')](handleError(_0x361069,null));};exports[_0xedc1('0x4a')]=function(_0x193a23,_0x56f0ab){return db['ScreenRecording'][_0xedc1('0x4a')]()[_0xedc1('0x22')](respondWithResult(_0x56f0ab,null))[_0xedc1('0x40')](handleError(_0x56f0ab,null));};exports[_0xedc1('0x4b')]=function(_0x23c9e4,_0x131750,_0x2b143f){var _0x4e83c7=require(_0xedc1('0x4c'));var _0x4efd3f=![];var _0x413ebe={};if(_0x23c9e4['query']['type']&&_0x23c9e4[_0xedc1('0x2c')]['type']==='uniqueid'){_0x413ebe[_0xedc1('0x4d')]=_0x23c9e4[_0xedc1('0x42')]['id'];}else{_0x413ebe['id']=_0x23c9e4[_0xedc1('0x42')]['id'];}return db[_0xedc1('0x27')][_0xedc1('0x49')]({'where':_0x413ebe,'attributes':['id',_0xedc1('0x48')],'raw':!![]})[_0xedc1('0x22')](handleEntityNotFound(_0x131750,null))[_0xedc1('0x22')](function(_0x46eef3){if(_0x46eef3){var _0x27d807=path[_0xedc1('0x4e')](config[_0xedc1('0x4f')],_0xedc1('0x50'),_0x46eef3[_0xedc1('0x48')]);var _0x444db7=util[_0xedc1('0x2b')](_0xedc1('0x51'),_0x27d807);if(fs[_0xedc1('0x52')](_0x444db7)){_0x4efd3f=!![];return _0x4e83c7['decryptFile'](_0x444db7,_0x27d807,config[_0xedc1('0x53')]['recording'])[_0xedc1('0x22')](function(){return _0x46eef3;});}return _0x46eef3;}})[_0xedc1('0x22')](function(_0x338074){if(_0x338074){var _0x3cad78=path[_0xedc1('0x4e')](config['root'],_0xedc1('0x50'),_0x338074['value']);if(!fs[_0xedc1('0x52')](_0x3cad78)){throw new db[(_0xedc1('0x54'))]['ValidationError'](_0xedc1('0x55'));}if(_0x338074[_0xedc1('0x56')]){return _0x131750['download'](_0x3cad78,_0x338074[_0xedc1('0x56')]+path[_0xedc1('0x57')](_0x3cad78),function(){if(_0x4efd3f){fs[_0xedc1('0x58')](_0x3cad78);}});}else{return _0x131750[_0xedc1('0x4b')](_0x3cad78,function(_0x1ee33f){if(_0x4efd3f){fs[_0xedc1('0x58')](_0x3cad78);}});}}})[_0xedc1('0x40')](function(_0x3df9e6){if(_0x3df9e6[_0xedc1('0x59')]==='ScreenRecording\x20not\x20found'){_0x131750['status'](0x194)[_0xedc1('0x26')](_0xedc1('0x5a'));}else{return handleError(_0x131750,null);}});};
\ No newline at end of file
index c69405e..b781c50 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x99e9=['bluebird','request-promise','rimraf','../../config/environment','define','ScreenRecording','screen_recordings','interactionid','isNil','value','join','server','existsSync','log','catch','resolve','finally','lodash','util','../../config/logger','moment'];(function(_0x510d8a,_0x4853f5){var _0x100381=function(_0x3080d0){while(--_0x3080d0){_0x510d8a['push'](_0x510d8a['shift']());}};_0x100381(++_0x4853f5);}(_0x99e9,0x137));var _0x999e=function(_0x571c00,_0x3ae028){_0x571c00=_0x571c00-0x0;var _0x2887df=_0x99e9[_0x571c00];return _0x2887df;};'use strict';var _=require(_0x999e('0x0'));var util=require(_0x999e('0x1'));var logger=require(_0x999e('0x2'))('api');var moment=require(_0x999e('0x3'));var BPromise=require(_0x999e('0x4'));var rp=require(_0x999e('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x999e('0x6'));var config=require(_0x999e('0x7'));var attributes=require('./screenRecording.attributes');module['exports']=function(_0x5af0d0,_0x166058){return _0x5af0d0[_0x999e('0x8')](_0x999e('0x9'),attributes,{'tableName':_0x999e('0xa'),'paranoid':![],'indexes':[{'name':_0x999e('0xb'),'fields':[_0x999e('0xb')]}],'timestamps':!![],'hooks':{'afterDestroy':function(_0x526de9,_0xe5074e,_0x475716){return new BPromise(function(_0x4683f7,_0x508842){if(!_[_0x999e('0xc')](_0x526de9[_0x999e('0xd')])){var _0x7e9230=path[_0x999e('0xe')](config['root'],_0x999e('0xf'),'files','screen_recordings',_0x526de9[_0x999e('0xd')]);if(fs[_0x999e('0x10')](_0x7e9230)){rimraf(_0x7e9230,function(_0x33da17){if(_0x33da17){console[_0x999e('0x11')](_0x33da17);}});}}_0x4683f7();})[_0x999e('0x12')](function(_0x153eeb){BPromise[_0x999e('0x13')]();})[_0x999e('0x14')](function(){_0x475716();});}}});};
\ No newline at end of file
+var _0xe245=['isNil','value','join','root','server','files','existsSync','log','catch','resolve','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','../../config/environment','define','screen_recordings','interactionid'];(function(_0xe33206,_0x403068){var _0x10b8b5=function(_0x7108c2){while(--_0x7108c2){_0xe33206['push'](_0xe33206['shift']());}};_0x10b8b5(++_0x403068);}(_0xe245,0x78));var _0x5e24=function(_0x111a7b,_0x26fa89){_0x111a7b=_0x111a7b-0x0;var _0x255ffe=_0xe245[_0x111a7b];return _0x255ffe;};'use strict';var _=require(_0x5e24('0x0'));var util=require(_0x5e24('0x1'));var logger=require(_0x5e24('0x2'))(_0x5e24('0x3'));var moment=require(_0x5e24('0x4'));var BPromise=require(_0x5e24('0x5'));var rp=require(_0x5e24('0x6'));var fs=require('fs');var path=require(_0x5e24('0x7'));var rimraf=require('rimraf');var config=require(_0x5e24('0x8'));var attributes=require('./screenRecording.attributes');module['exports']=function(_0x13da80,_0x4fefe5){return _0x13da80[_0x5e24('0x9')]('ScreenRecording',attributes,{'tableName':_0x5e24('0xa'),'paranoid':![],'indexes':[{'name':'interactionid','fields':[_0x5e24('0xb')]}],'timestamps':!![],'hooks':{'afterDestroy':function(_0x4a58e0,_0x3ed866,_0x1af901){return new BPromise(function(_0x1c4181,_0x17a761){if(!_[_0x5e24('0xc')](_0x4a58e0[_0x5e24('0xd')])){var _0x5d5f1f=path[_0x5e24('0xe')](config[_0x5e24('0xf')],_0x5e24('0x10'),_0x5e24('0x11'),_0x5e24('0xa'),_0x4a58e0[_0x5e24('0xd')]);if(fs[_0x5e24('0x12')](_0x5d5f1f)){rimraf(_0x5d5f1f,function(_0x424a64){if(_0x424a64){console[_0x5e24('0x13')](_0x424a64);}});}}_0x1c4181();})[_0x5e24('0x14')](function(_0xc7b572){BPromise[_0x5e24('0x15')]();})['finally'](function(){_0x1af901();});}}});};
\ No newline at end of file
index 6b42fc5..04a3a30 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['message','result','catch','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','then','info','ScreenRecording,\x20%s,\x20%s','request\x20sent','debug','ScreenRecording,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x521822,_0x5ea21c){var _0x21d4f9=function(_0x3c33bc){while(--_0x3c33bc){_0x521822['push'](_0x521822['shift']());}};_0x21d4f9(++_0x5ea21c);}(_0x9957,0x93));var _0x7995=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0x9957[_0x5b644e];return _0x49c6bf;};'use strict';var _=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));var BPromise=require(_0x7995('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7995('0x4'));var db=require(_0x7995('0x5'))['db'];var utils=require(_0x7995('0x6'));var logger=require(_0x7995('0x7'))('rpc');var config=require(_0x7995('0x8'));var jayson=require(_0x7995('0x9'));var client=jayson[_0x7995('0xa')][_0x7995('0xb')]({'port':0x232a});function respondWithRpcPromise(_0xbda126,_0x326741,_0x4996ca){return new BPromise(function(_0x465276,_0x1cad37){return client['request'](_0xbda126,_0x4996ca)[_0x7995('0xc')](function(_0x3116fb){logger[_0x7995('0xd')](_0x7995('0xe'),_0x326741,_0x7995('0xf'));logger[_0x7995('0x10')](_0x7995('0x11'),_0x326741,'request\x20sent',JSON[_0x7995('0x12')](_0x3116fb));if(_0x3116fb[_0x7995('0x13')]){if(_0x3116fb['error'][_0x7995('0x14')]===0x1f4){logger[_0x7995('0x13')](_0x7995('0xe'),_0x326741,_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);return _0x1cad37(_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);}logger['error']('ScreenRecording,\x20%s,\x20%s',_0x326741,_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);return _0x465276(_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);}else{logger[_0x7995('0xd')](_0x7995('0xe'),_0x326741,_0x7995('0xf'));_0x465276(_0x3116fb[_0x7995('0x16')]['message']);}})[_0x7995('0x17')](function(_0x565d97){logger[_0x7995('0x13')](_0x7995('0xe'),_0x326741,_0x565d97);_0x1cad37(_0x565d97);});});}
\ No newline at end of file
+var _0x8958=['client','http','request','then','info','ScreenRecording,\x20%s,\x20%s','request\x20sent','debug','ScreenRecording,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','util','../../mysqldb','../../config/logger','rpc','../../config/environment'];(function(_0x46a3ff,_0x470b9a){var _0x404bc2=function(_0x20f25f){while(--_0x20f25f){_0x46a3ff['push'](_0x46a3ff['shift']());}};_0x404bc2(++_0x470b9a);}(_0x8958,0x93));var _0x8895=function(_0x1082b1,_0x25400d){_0x1082b1=_0x1082b1-0x0;var _0x1bd9ea=_0x8958[_0x1082b1];return _0x1bd9ea;};'use strict';var _=require('lodash');var util=require(_0x8895('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x8895('0x1'))['db'];var utils=require('../../config/utils');var logger=require(_0x8895('0x2'))(_0x8895('0x3'));var config=require(_0x8895('0x4'));var jayson=require('jayson/promise');var client=jayson[_0x8895('0x5')][_0x8895('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x124e1e,_0x40cec6,_0x33013a){return new BPromise(function(_0x51376b,_0xe018b8){return client[_0x8895('0x7')](_0x124e1e,_0x33013a)[_0x8895('0x8')](function(_0x24fe49){logger[_0x8895('0x9')](_0x8895('0xa'),_0x40cec6,_0x8895('0xb'));logger[_0x8895('0xc')](_0x8895('0xd'),_0x40cec6,_0x8895('0xb'),JSON['stringify'](_0x24fe49));if(_0x24fe49[_0x8895('0xe')]){if(_0x24fe49[_0x8895('0xe')][_0x8895('0xf')]===0x1f4){logger[_0x8895('0xe')](_0x8895('0xa'),_0x40cec6,_0x24fe49[_0x8895('0xe')]['message']);return _0xe018b8(_0x24fe49[_0x8895('0xe')][_0x8895('0x10')]);}logger[_0x8895('0xe')]('ScreenRecording,\x20%s,\x20%s',_0x40cec6,_0x24fe49['error'][_0x8895('0x10')]);return _0x51376b(_0x24fe49['error'][_0x8895('0x10')]);}else{logger[_0x8895('0x9')](_0x8895('0xa'),_0x40cec6,_0x8895('0xb'));_0x51376b(_0x24fe49[_0x8895('0x11')]['message']);}})[_0x8895('0x12')](function(_0x100fc8){logger[_0x8895('0xe')](_0x8895('0xa'),_0x40cec6,_0x100fc8);_0xe018b8(_0x100fc8);});});}
\ No newline at end of file
index aa2148c..d563a4d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf7a1=['util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./setting.controller','get','isAuthenticated','index','/:id','/:id/logo','getLogo','/:id/logo_login','/:id/gdpr','gdpr','/:id/preferred','getPreferred','diskStorage','root','server/files/images/logos/','format','%s%s','logo','extname','originalname','file','addLogo','join','logologin','post','addLogoLogin','single','addPreferred','put','update','exports','multer'];(function(_0x565c49,_0x54acd0){var _0x20ca34=function(_0x42f7e1){while(--_0x42f7e1){_0x565c49['push'](_0x565c49['shift']());}};_0x20ca34(++_0x54acd0);}(_0xf7a1,0x74));var _0x1f7a=function(_0x5d610d,_0x834f90){_0x5d610d=_0x5d610d-0x0;var _0x392836=_0xf7a1[_0x5d610d];return _0x392836;};'use strict';var multer=require(_0x1f7a('0x0'));var util=require(_0x1f7a('0x1'));var path=require(_0x1f7a('0x2'));var timeout=require(_0x1f7a('0x3'));var express=require(_0x1f7a('0x4'));var router=express['Router']();var auth=require(_0x1f7a('0x5'));var interaction=require(_0x1f7a('0x6'));var config=require(_0x1f7a('0x7'));var controller=require(_0x1f7a('0x8'));router[_0x1f7a('0x9')]('/',auth[_0x1f7a('0xa')](),controller[_0x1f7a('0xb')]);router[_0x1f7a('0x9')](_0x1f7a('0xc'),controller['show']);router[_0x1f7a('0x9')](_0x1f7a('0xd'),controller[_0x1f7a('0xe')]);router[_0x1f7a('0x9')](_0x1f7a('0xf'),controller['getLogoLogin']);router[_0x1f7a('0x9')](_0x1f7a('0x10'),controller[_0x1f7a('0x11')]);router[_0x1f7a('0x9')](_0x1f7a('0x12'),controller[_0x1f7a('0x13')]);var upload=multer({'storage':multer[_0x1f7a('0x14')]({'destination':function(_0x1de80d,_0x154030,_0x2a6be3){_0x2a6be3(null,path['join'](config[_0x1f7a('0x15')],_0x1f7a('0x16')));},'filename':function(_0x390af2,_0x32e0d0,_0x46632d){_0x46632d(null,util[_0x1f7a('0x17')](_0x1f7a('0x18'),_0x1f7a('0x19'),path[_0x1f7a('0x1a')](_0x32e0d0[_0x1f7a('0x1b')])));}})});router['post'](_0x1f7a('0xd'),upload['single'](_0x1f7a('0x1c')),controller[_0x1f7a('0x1d')]);var upload=multer({'storage':multer[_0x1f7a('0x14')]({'destination':function(_0x156413,_0x35bc60,_0x893aaf){_0x893aaf(null,path[_0x1f7a('0x1e')](config[_0x1f7a('0x15')],_0x1f7a('0x16')));},'filename':function(_0x3740c4,_0x2383d3,_0x5ecaa3){_0x5ecaa3(null,util[_0x1f7a('0x17')](_0x1f7a('0x18'),_0x1f7a('0x1f'),path[_0x1f7a('0x1a')](_0x2383d3[_0x1f7a('0x1b')])));}})});router[_0x1f7a('0x20')]('/:id/logo_login',upload['single'](_0x1f7a('0x1c')),controller[_0x1f7a('0x21')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x4c8b6b,_0x596deb,_0x1054ba){_0x1054ba(null,path[_0x1f7a('0x1e')](config[_0x1f7a('0x15')],'server/files/images/logos/'));},'filename':function(_0x1b2f19,_0x14b423,_0x39bec0){_0x39bec0(null,util[_0x1f7a('0x17')](_0x1f7a('0x18'),'preferred',path['extname'](_0x14b423['originalname'])));}})});router[_0x1f7a('0x20')]('/:id/preferred',upload[_0x1f7a('0x22')](_0x1f7a('0x1c')),controller[_0x1f7a('0x23')]);router[_0x1f7a('0x24')](_0x1f7a('0xc'),auth[_0x1f7a('0xa')](),controller[_0x1f7a('0x25')]);module[_0x1f7a('0x26')]=router;
\ No newline at end of file
+var _0xce0a=['format','logo','extname','originalname','post','/:id/logo','single','file','addLogo','%s%s','logologin','/:id/logo_login','addLogoLogin','preferred','/:id/preferred','addPreferred','put','update','exports','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./setting.controller','get','isAuthenticated','index','show','getLogo','getLogoLogin','/:id/gdpr','diskStorage','join','root','server/files/images/logos/'];(function(_0x5d738f,_0x1531ee){var _0x57e0fd=function(_0x3bcc08){while(--_0x3bcc08){_0x5d738f['push'](_0x5d738f['shift']());}};_0x57e0fd(++_0x1531ee);}(_0xce0a,0xf7));var _0xace0=function(_0x2986fb,_0x9482a0){_0x2986fb=_0x2986fb-0x0;var _0xb3c156=_0xce0a[_0x2986fb];return _0xb3c156;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xace0('0x0'));var timeout=require(_0xace0('0x1'));var express=require(_0xace0('0x2'));var router=express[_0xace0('0x3')]();var auth=require(_0xace0('0x4'));var interaction=require(_0xace0('0x5'));var config=require(_0xace0('0x6'));var controller=require(_0xace0('0x7'));router[_0xace0('0x8')]('/',auth[_0xace0('0x9')](),controller[_0xace0('0xa')]);router[_0xace0('0x8')]('/:id',controller[_0xace0('0xb')]);router[_0xace0('0x8')]('/:id/logo',controller[_0xace0('0xc')]);router[_0xace0('0x8')]('/:id/logo_login',controller[_0xace0('0xd')]);router[_0xace0('0x8')](_0xace0('0xe'),controller['gdpr']);router['get']('/:id/preferred',controller['getPreferred']);var upload=multer({'storage':multer[_0xace0('0xf')]({'destination':function(_0x3f2d52,_0x250034,_0x17673b){_0x17673b(null,path[_0xace0('0x10')](config[_0xace0('0x11')],_0xace0('0x12')));},'filename':function(_0x4786c8,_0x24de45,_0x325f5d){_0x325f5d(null,util[_0xace0('0x13')]('%s%s',_0xace0('0x14'),path[_0xace0('0x15')](_0x24de45[_0xace0('0x16')])));}})});router[_0xace0('0x17')](_0xace0('0x18'),upload[_0xace0('0x19')](_0xace0('0x1a')),controller[_0xace0('0x1b')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x2e1c35,_0x8f0c37,_0x4df7dd){_0x4df7dd(null,path[_0xace0('0x10')](config[_0xace0('0x11')],'server/files/images/logos/'));},'filename':function(_0xb1c1ab,_0x26dce,_0x307a0e){_0x307a0e(null,util['format'](_0xace0('0x1c'),_0xace0('0x1d'),path['extname'](_0x26dce['originalname'])));}})});router[_0xace0('0x17')](_0xace0('0x1e'),upload['single'](_0xace0('0x1a')),controller[_0xace0('0x1f')]);var upload=multer({'storage':multer[_0xace0('0xf')]({'destination':function(_0x41768e,_0x5cd2d1,_0x51eaa){_0x51eaa(null,path['join'](config['root'],_0xace0('0x12')));},'filename':function(_0x1b6af6,_0x49f93a,_0xf3d1d){_0xf3d1d(null,util[_0xace0('0x13')]('%s%s',_0xace0('0x20'),path[_0xace0('0x15')](_0x49f93a[_0xace0('0x16')])));}})});router[_0xace0('0x17')](_0xace0('0x21'),upload[_0xace0('0x19')](_0xace0('0x1a')),controller[_0xace0('0x22')]);router[_0xace0('0x23')]('/:id',auth[_0xace0('0x9')](),controller[_0xace0('0x24')]);module[_0xace0('0x25')]=router;
\ No newline at end of file
index 0921583..ba769bc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9086=['INTEGER','min_mailbox','STRING','/var/opt/motion2/server/files/sounds/converted','BOOLEAN','https://www.xcally.com/bar/phonebar/autoupdater.xml','alternate','sequelize','exports','min_internal'];(function(_0xb875ee,_0x583042){var _0x4c7f3a=function(_0x1f6661){while(--_0x1f6661){_0xb875ee['push'](_0xb875ee['shift']());}};_0x4c7f3a(++_0x583042);}(_0x9086,0x10b));var _0x6908=function(_0x593cbd,_0x141c5b){_0x593cbd=_0x593cbd-0x0;var _0x1ea4aa=_0x9086[_0x593cbd];return _0x1ea4aa;};'use strict';var Sequelize=require(_0x6908('0x0'));module[_0x6908('0x1')]={'min_internal':{'type':Sequelize['INTEGER'](0xb),'unique':_0x6908('0x2'),'defaultValue':0x3e8},'min_mailbox':{'type':Sequelize[_0x6908('0x3')](0xb),'unique':_0x6908('0x4'),'defaultValue':0x3e8},'agi_port':{'type':Sequelize[_0x6908('0x3')](0xb),'defaultValue':0x11dd},'soundPath':{'type':Sequelize[_0x6908('0x5')],'defaultValue':_0x6908('0x6')},'logo':{'type':Sequelize['STRING']},'defaultLogo':{'type':Sequelize[_0x6908('0x7')],'defaultValue':!![]},'loginLogo':{'type':Sequelize['STRING']},'defaultLoginLogo':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'headerWhiteLabel':{'type':Sequelize[_0x6908('0x5')]},'defaultHeaderWhiteLabel':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'securePassword':{'type':Sequelize[_0x6908('0x7')],'defaultValue':!![]},'firstSetup':{'type':Sequelize[_0x6908('0x7')],'defaultValue':!![]},'stunaddr':{'type':Sequelize[_0x6908('0x5')]},'turnaddr':{'type':Sequelize['STRING']},'turnusername':{'type':Sequelize[_0x6908('0x5')]},'turnpassword':{'type':Sequelize['STRING']},'pageTitle':{'type':Sequelize[_0x6908('0x5')]},'defaultPageTitle':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'callRecordingEncryption':{'type':Sequelize[_0x6908('0x7')],'defaultValue':![]},'passwordExpiresDays':{'type':Sequelize[_0x6908('0x3')](0xb),'defaultValue':0x5a},'phoneBarAutoUpdater':{'type':Sequelize[_0x6908('0x7')],'defaultValue':!![]},'phoneBarAutoUpdaterUrl':{'type':Sequelize[_0x6908('0x5')],'defaultValue':_0x6908('0x8')},'enableEmailPreview':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'split':{'type':Sequelize[_0x6908('0x7')],'defaultValue':!![]},'splitSizeCsv':{'type':Sequelize[_0x6908('0x3')],'defaultValue':0x1388},'splitSizePdf':{'type':Sequelize[_0x6908('0x3')],'defaultValue':0x1388},'splitSizeXlsx':{'type':Sequelize[_0x6908('0x3')],'defaultValue':0x1388},'messagesAlignment':{'type':Sequelize[_0x6908('0x5')],'defaultValue':_0x6908('0x9')},'chatTimeout':{'type':Sequelize[_0x6908('0x3')],'defaultValue':0x1e},'phoneBarRememberMeEnabled':{'type':Sequelize[_0x6908('0x7')],'defaultValue':!![]},'preferred':{'type':Sequelize[_0x6908('0x5')]},'defaultPreferred':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'rtlSupport':{'type':Sequelize[_0x6908('0x7')],'defaultValue':![]},'defaultScreenRecordingPath':{'type':Sequelize['STRING']},'allowedLoginAttempts':{'type':Sequelize[_0x6908('0x3')],'defaultValue':0x5},'blockDuration':{'type':Sequelize[_0x6908('0x3')],'defaultValue':0xa}};
\ No newline at end of file
+var _0x152f=['sequelize','exports','INTEGER','min_internal','STRING','/var/opt/motion2/server/files/sounds/converted','BOOLEAN','https://www.xcally.com/bar/phonebar/autoupdater.xml','alternate'];(function(_0x5d3985,_0x495d9e){var _0x329bfe=function(_0x1f7ddc){while(--_0x1f7ddc){_0x5d3985['push'](_0x5d3985['shift']());}};_0x329bfe(++_0x495d9e);}(_0x152f,0x144));var _0xf152=function(_0x397e5f,_0x454c8f){_0x397e5f=_0x397e5f-0x0;var _0x5302b8=_0x152f[_0x397e5f];return _0x5302b8;};'use strict';var Sequelize=require(_0xf152('0x0'));module[_0xf152('0x1')]={'min_internal':{'type':Sequelize[_0xf152('0x2')](0xb),'unique':_0xf152('0x3'),'defaultValue':0x3e8},'min_mailbox':{'type':Sequelize[_0xf152('0x2')](0xb),'unique':'min_mailbox','defaultValue':0x3e8},'agi_port':{'type':Sequelize[_0xf152('0x2')](0xb),'defaultValue':0x11dd},'soundPath':{'type':Sequelize[_0xf152('0x4')],'defaultValue':_0xf152('0x5')},'logo':{'type':Sequelize[_0xf152('0x4')]},'defaultLogo':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'loginLogo':{'type':Sequelize[_0xf152('0x4')]},'defaultLoginLogo':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'headerWhiteLabel':{'type':Sequelize[_0xf152('0x4')]},'defaultHeaderWhiteLabel':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'securePassword':{'type':Sequelize[_0xf152('0x6')],'defaultValue':!![]},'firstSetup':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'stunaddr':{'type':Sequelize['STRING']},'turnaddr':{'type':Sequelize[_0xf152('0x4')]},'turnusername':{'type':Sequelize[_0xf152('0x4')]},'turnpassword':{'type':Sequelize['STRING']},'pageTitle':{'type':Sequelize[_0xf152('0x4')]},'defaultPageTitle':{'type':Sequelize[_0xf152('0x6')],'defaultValue':!![]},'callRecordingEncryption':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'passwordExpiresDays':{'type':Sequelize[_0xf152('0x2')](0xb),'defaultValue':0x5a},'phoneBarAutoUpdater':{'type':Sequelize[_0xf152('0x6')],'defaultValue':!![]},'phoneBarAutoUpdaterUrl':{'type':Sequelize[_0xf152('0x4')],'defaultValue':_0xf152('0x7')},'enableEmailPreview':{'type':Sequelize[_0xf152('0x6')],'defaultValue':![]},'split':{'type':Sequelize[_0xf152('0x6')],'defaultValue':!![]},'splitSizeCsv':{'type':Sequelize[_0xf152('0x2')],'defaultValue':0x1388},'splitSizePdf':{'type':Sequelize[_0xf152('0x2')],'defaultValue':0x1388},'splitSizeXlsx':{'type':Sequelize[_0xf152('0x2')],'defaultValue':0x1388},'messagesAlignment':{'type':Sequelize[_0xf152('0x4')],'defaultValue':_0xf152('0x8')},'chatTimeout':{'type':Sequelize[_0xf152('0x2')],'defaultValue':0x1e},'phoneBarRememberMeEnabled':{'type':Sequelize[_0xf152('0x6')],'defaultValue':!![]},'preferred':{'type':Sequelize[_0xf152('0x4')]},'defaultPreferred':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'rtlSupport':{'type':Sequelize[_0xf152('0x6')],'defaultValue':![]},'defaultScreenRecordingPath':{'type':Sequelize[_0xf152('0x4')]},'allowedLoginAttempts':{'type':Sequelize['INTEGER'],'defaultValue':0x5},'blockDuration':{'type':Sequelize[_0xf152('0x2')],'defaultValue':0xa}};
\ No newline at end of file
index f94ef92..2ff0f79 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['find','params','body','readFileSync','join','server/files/templates/stun.ejs','utf8','root','render','/etc/asterisk/turn_xcally.conf','res_stun_monitor.so','Reload','res_rtp_asterisk.so','addLogo','file','logo','filename','catch','addLogoLogin','loginLogo','getLogo','getLicense','preferred','defaultLogo','defaultLoginLogo','defaultPreferred','existsSync','toLower','default_logo.png','upperFirst','custom','Sequelize','ValidationError','Logo\x20not\x20found','download','../../config/license/util','getLogoLogin','server/files/images/logos','default_loginLogo.png','default','gdpr','securePassword','addPreferred','getPreferred','default_preferred.png','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','info','request\x20sent','Setting,\x20%s,\x20%s,\x20%s','stringify','error','code','Setting,\x20%s,\x20%s','message','result','sendStatus','status','count','offset','limit','Content-Range','json','reject','save','update','then','destroy','end','stack','name','index','Setting','rawAttributes','query','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','field','options','includeAll','include','findAll','rows','show','keys','length'];(function(_0x22cbc8,_0x77054a){var _0x19189c=function(_0x405464){while(--_0x405464){_0x22cbc8['push'](_0x22cbc8['shift']());}};_0x19189c(++_0x77054a);}(_0xa9e0,0x123));var _0x0a9e=function(_0x4c7fb5,_0x2548ef){_0x4c7fb5=_0x4c7fb5-0x0;var _0x2e10ac=_0xa9e0[_0x4c7fb5];return _0x2e10ac;};'use strict';var pdf=require(_0x0a9e('0x0'));var emlformat=require(_0x0a9e('0x1'));var rimraf=require(_0x0a9e('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x0a9e('0x3'));var moment=require('moment');var BPromise=require(_0x0a9e('0x4'));var Mustache=require(_0x0a9e('0x5'));var util=require(_0x0a9e('0x6'));var path=require(_0x0a9e('0x7'));var sox=require(_0x0a9e('0x8'));var csv=require('to-csv');var ejs=require(_0x0a9e('0x9'));var fs=require('fs');var _=require(_0x0a9e('0xa'));var squel=require(_0x0a9e('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x0a9e('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x0a9e('0xd'));var Redis=require(_0x0a9e('0xe'));var authService=require(_0x0a9e('0xf'));var qs=require(_0x0a9e('0x10'));var hardwareService=require(_0x0a9e('0x11'));var logger=require(_0x0a9e('0x12'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var jayson=require(_0x0a9e('0x13'));var client=jayson[_0x0a9e('0x14')][_0x0a9e('0x15')]({'port':0x232a});function checkPasswordPattern(_0x26d672,_0x32d742,_0x69aeb7){if(_0x69aeb7){var _0x5db4b0=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x5db4b0[_0x0a9e('0x16')](_0x32d742)){return _0x26d672;}else{throw new Error(_0x0a9e('0x17'));}}else{return _0x26d672;}}function respondWithRpcPromise(_0x2b4227,_0x281129,_0x44dcfd,_0x4d5611){return new BPromise(function(_0x52a03d,_0x22dccb){var _0x5d0880=_0x4d5611||client;return _0x5d0880[_0x0a9e('0x18')](_0x2b4227,_0x44dcfd)['then'](function(_0x16033c){logger[_0x0a9e('0x19')]('Setting,\x20%s,\x20%s',_0x281129,_0x0a9e('0x1a'));logger['debug'](_0x0a9e('0x1b'),_0x281129,_0x0a9e('0x1a'),JSON[_0x0a9e('0x1c')](_0x16033c));if(_0x16033c[_0x0a9e('0x1d')]){if(_0x16033c[_0x0a9e('0x1d')][_0x0a9e('0x1e')]===0x1f4){logger[_0x0a9e('0x1d')](_0x0a9e('0x1f'),_0x281129,_0x16033c[_0x0a9e('0x1d')][_0x0a9e('0x20')]);return _0x22dccb(_0x16033c[_0x0a9e('0x1d')][_0x0a9e('0x20')]);}logger['error'](_0x0a9e('0x1f'),_0x281129,_0x16033c[_0x0a9e('0x1d')]['message']);return _0x52a03d(_0x16033c[_0x0a9e('0x1d')]['message']);}else{logger['info'](_0x0a9e('0x1f'),_0x281129,_0x0a9e('0x1a'));_0x52a03d(_0x16033c[_0x0a9e('0x21')][_0x0a9e('0x20')]);}})['catch'](function(_0xfb6e48){logger[_0x0a9e('0x1d')](_0x0a9e('0x1f'),_0x281129,_0xfb6e48);_0x22dccb(_0xfb6e48);});});}function respondWithStatusCode(_0x4d00e6,_0x370d86){_0x370d86=_0x370d86||0xcc;return function(_0x42ac8f){if(_0x42ac8f){return _0x4d00e6[_0x0a9e('0x22')](_0x370d86);}return _0x4d00e6['status'](_0x370d86)['end']();};}function respondWithResult(_0x197ec0,_0x3a8e58){_0x3a8e58=_0x3a8e58||0xc8;return function(_0x40c424){if(_0x40c424){return _0x197ec0[_0x0a9e('0x23')](_0x3a8e58)['json'](_0x40c424);}};}function respondWithFilteredResult(_0x384319,_0x479bc4){return function(_0x45a1e7){if(_0x45a1e7){var _0x5bfb33=_0x45a1e7[_0x0a9e('0x24')],_0x1dc186=_0x479bc4[_0x0a9e('0x25')],_0x34dc65=_0x479bc4[_0x0a9e('0x25')]+_0x479bc4[_0x0a9e('0x26')],_0x25fba9;if(_0x34dc65>=_0x5bfb33){_0x34dc65=_0x5bfb33;_0x25fba9=0xc8;}else{_0x25fba9=0xce;}_0x384319[_0x0a9e('0x23')](_0x25fba9);return _0x384319['set'](_0x0a9e('0x27'),_0x1dc186+'-'+_0x34dc65+'/'+_0x5bfb33)[_0x0a9e('0x28')](_0x45a1e7);}return null;};}function patchUpdates(_0x2b1f27){return function(_0x2ec755){try{jsonpatch['apply'](_0x2ec755,_0x2b1f27,!![]);}catch(_0x15b200){return BPromise[_0x0a9e('0x29')](_0x15b200);}return _0x2ec755[_0x0a9e('0x2a')]();};}function saveUpdates(_0x824a4f,_0x58b06f){return function(_0x563b45){if(_0x563b45){return _0x563b45[_0x0a9e('0x2b')](_0x824a4f)[_0x0a9e('0x2c')](function(_0x1dbde2){return _0x1dbde2;});}return null;};}function removeEntity(_0x540530,_0x426950){return function(_0x5d1e0e){if(_0x5d1e0e){return _0x5d1e0e[_0x0a9e('0x2d')]()[_0x0a9e('0x2c')](function(){_0x540530[_0x0a9e('0x23')](0xcc)[_0x0a9e('0x2e')]();});}};}function handleEntityNotFound(_0x25ce3a,_0x5180f1){return function(_0x66c1d2){if(!_0x66c1d2){_0x25ce3a[_0x0a9e('0x22')](0x194);}return _0x66c1d2;};}function handleError(_0x40cb85,_0x2da5c0){_0x2da5c0=_0x2da5c0||0x1f4;return function(_0x2b45ea){logger[_0x0a9e('0x1d')](_0x2b45ea[_0x0a9e('0x2f')]);if(_0x2b45ea[_0x0a9e('0x30')]){delete _0x2b45ea['name'];}_0x40cb85[_0x0a9e('0x23')](_0x2da5c0)['send'](_0x2b45ea);};}exports[_0x0a9e('0x31')]=function(_0x14b13f,_0x2b7e7f){var _0x3f3d41={},_0x567193={},_0x191e91={'count':0x0,'rows':[]};var _0xd1836d=db[_0x0a9e('0x32')][_0x0a9e('0x33')];_0x567193['model']=_['keys'](_0xd1836d);_0x567193[_0x0a9e('0x34')]=_['keys'](_0x14b13f[_0x0a9e('0x34')]);_0x567193[_0x0a9e('0x35')]=_[_0x0a9e('0x36')](_0x567193[_0x0a9e('0x37')],_0x567193['query']);_0x3f3d41[_0x0a9e('0x38')]=_[_0x0a9e('0x36')](_0x567193[_0x0a9e('0x37')],qs['fields'](_0x14b13f[_0x0a9e('0x34')][_0x0a9e('0x39')]));_0x3f3d41[_0x0a9e('0x38')]=_0x3f3d41['attributes']['length']?_0x3f3d41[_0x0a9e('0x38')]:_0x567193[_0x0a9e('0x37')];if(!_0x14b13f['query'][_0x0a9e('0x3a')](_0x0a9e('0x3b'))){_0x3f3d41[_0x0a9e('0x26')]=qs[_0x0a9e('0x26')](_0x14b13f['query']['limit']);_0x3f3d41[_0x0a9e('0x25')]=qs[_0x0a9e('0x25')](_0x14b13f['query'][_0x0a9e('0x25')]);}_0x3f3d41[_0x0a9e('0x3c')]=qs[_0x0a9e('0x3d')](_0x14b13f['query'][_0x0a9e('0x3d')]);_0x3f3d41[_0x0a9e('0x3e')]=qs[_0x0a9e('0x35')](_[_0x0a9e('0x3f')](_0x14b13f[_0x0a9e('0x34')],_0x567193[_0x0a9e('0x35')]));if(_0x14b13f[_0x0a9e('0x34')][_0x0a9e('0x40')]){_0x3f3d41[_0x0a9e('0x3e')]=_[_0x0a9e('0x41')](_0x3f3d41[_0x0a9e('0x3e')],{'$or':_[_0x0a9e('0x42')](_0xd1836d,function(_0x1a7bce){if(_0x1a7bce[_0x0a9e('0x43')][_0x0a9e('0x44')]!=='VIRTUAL'){var _0x52628e={};_0x52628e[_0x1a7bce[_0x0a9e('0x45')]]={'$like':'%'+_0x14b13f[_0x0a9e('0x34')][_0x0a9e('0x40')]+'%'};return _0x52628e;}})});}_0x3f3d41=_[_0x0a9e('0x41')]({},_0x3f3d41,_0x14b13f[_0x0a9e('0x46')]);var _0xc9a702={'where':_0x3f3d41[_0x0a9e('0x3e')]};return db[_0x0a9e('0x32')][_0x0a9e('0x24')](_0xc9a702)[_0x0a9e('0x2c')](function(_0x2c2cb0){_0x191e91[_0x0a9e('0x24')]=_0x2c2cb0;if(_0x14b13f['query'][_0x0a9e('0x47')]){_0x3f3d41[_0x0a9e('0x48')]=[{'all':!![]}];}return db[_0x0a9e('0x32')][_0x0a9e('0x49')](_0x3f3d41);})[_0x0a9e('0x2c')](function(_0xbe9d19){_0x191e91[_0x0a9e('0x4a')]=_0xbe9d19;return _0x191e91;})[_0x0a9e('0x2c')](respondWithFilteredResult(_0x2b7e7f,_0x3f3d41))['catch'](handleError(_0x2b7e7f,null));};exports[_0x0a9e('0x4b')]=function(_0x48fd45,_0x473dc8){var _0x476688={'raw':![],'where':{'id':_0x48fd45['params']['id']}},_0x8d6dd1={};_0x8d6dd1[_0x0a9e('0x37')]=_[_0x0a9e('0x4c')](db[_0x0a9e('0x32')][_0x0a9e('0x33')]);_0x8d6dd1[_0x0a9e('0x34')]=_[_0x0a9e('0x4c')](_0x48fd45[_0x0a9e('0x34')]);_0x8d6dd1['filters']=_[_0x0a9e('0x36')](_0x8d6dd1[_0x0a9e('0x37')],_0x8d6dd1[_0x0a9e('0x34')]);_0x476688[_0x0a9e('0x38')]=_[_0x0a9e('0x36')](_0x8d6dd1[_0x0a9e('0x37')],qs[_0x0a9e('0x39')](_0x48fd45[_0x0a9e('0x34')][_0x0a9e('0x39')]));_0x476688['attributes']=_0x476688[_0x0a9e('0x38')][_0x0a9e('0x4d')]?_0x476688['attributes']:_0x8d6dd1['model'];if(_0x48fd45['query'][_0x0a9e('0x47')]){_0x476688[_0x0a9e('0x48')]=[{'all':!![]}];}_0x476688=_[_0x0a9e('0x41')]({},_0x476688,_0x48fd45[_0x0a9e('0x46')]);return db[_0x0a9e('0x32')][_0x0a9e('0x4e')](_0x476688)[_0x0a9e('0x2c')](handleEntityNotFound(_0x473dc8,null))[_0x0a9e('0x2c')](respondWithResult(_0x473dc8,null))['catch'](handleError(_0x473dc8,null));};exports['update']=function(_0x53975a,_0x39d77d,_0x204173){var _0x14d602;return db['Setting'][_0x0a9e('0x4e')]({'where':{'id':_0x53975a[_0x0a9e('0x4f')]['id']}})['then'](handleEntityNotFound(_0x39d77d,null))['then'](saveUpdates(_0x53975a[_0x0a9e('0x50')],null))['then'](function(_0x443e72){if(_0x443e72){_0x14d602=_0x443e72['get']({'plain':!![]});var _0x2e5e62=fs[_0x0a9e('0x51')](path[_0x0a9e('0x52')](config['root'],_0x0a9e('0x53')),_0x0a9e('0x54'));var _0x508b47=ejs['render'](_0x2e5e62,_0x14d602);var _0x128aa6=fs[_0x0a9e('0x51')](path['join'](config[_0x0a9e('0x55')],'server/files/templates/turn.ejs'),_0x0a9e('0x54'));var _0x523cd2=ejs[_0x0a9e('0x56')](_0x128aa6,_0x14d602);fs['writeFileSync']('/etc/asterisk/stun_xcally.conf',_0x508b47);fs['writeFileSync'](_0x0a9e('0x57'),_0x523cd2);return respondWithRpcPromise('Reload',_0x0a9e('0x2b'),{'module':_0x0a9e('0x58')});}})[_0x0a9e('0x2c')](function(){return respondWithRpcPromise(_0x0a9e('0x59'),_0x0a9e('0x2b'),{'module':_0x0a9e('0x5a')});})[_0x0a9e('0x2c')](function(){return _0x14d602||null;})[_0x0a9e('0x2c')](respondWithResult(_0x39d77d,null))['catch'](handleError(_0x39d77d,null));};exports[_0x0a9e('0x5b')]=function(_0x121cef,_0x2642bb,_0x30c491){if(_0x121cef[_0x0a9e('0x5c')]&&_0x121cef[_0x0a9e('0x5c')]['filename']){_0x121cef[_0x0a9e('0x50')][_0x0a9e('0x5d')]=_0x121cef['file'][_0x0a9e('0x5e')];}return db['Setting'][_0x0a9e('0x4e')]({'where':{'id':_0x121cef['params']['id']}})['then'](handleEntityNotFound(_0x2642bb,null))['then'](saveUpdates(_0x121cef[_0x0a9e('0x50')],null))['then'](respondWithResult(_0x2642bb,null))[_0x0a9e('0x5f')](handleError(_0x2642bb,null));};exports[_0x0a9e('0x60')]=function(_0x261adb,_0x7be420,_0x1cca9f){if(_0x261adb[_0x0a9e('0x5c')]&&_0x261adb['file'][_0x0a9e('0x5e')]){_0x261adb['body'][_0x0a9e('0x61')]=_0x261adb[_0x0a9e('0x5c')][_0x0a9e('0x5e')];}return db['Setting'][_0x0a9e('0x4e')]({'where':{'id':_0x261adb[_0x0a9e('0x4f')]['id']}})[_0x0a9e('0x2c')](handleEntityNotFound(_0x7be420,null))[_0x0a9e('0x2c')](saveUpdates(_0x261adb['body'],null))[_0x0a9e('0x2c')](respondWithResult(_0x7be420,null))[_0x0a9e('0x5f')](handleError(_0x7be420,null));};var utilLicense=require('../../config/license/util');exports[_0x0a9e('0x62')]=function(_0x17e88c,_0x88dcbf,_0x409b29){var _0x401837='server/files/images/logos';var _0x176840={'custom':![]};return utilLicense[_0x0a9e('0x63')]()[_0x0a9e('0x2c')](function(_0x47bb43){if(_0x47bb43){_0x176840=_0x47bb43;}return db[_0x0a9e('0x32')]['find']({'where':{'id':_0x17e88c['params']['id']},'attributes':[_0x0a9e('0x5d'),_0x0a9e('0x61'),_0x0a9e('0x64'),_0x0a9e('0x65'),_0x0a9e('0x66'),_0x0a9e('0x67')],'raw':!![]});})[_0x0a9e('0x2c')](handleEntityNotFound(_0x88dcbf,null))[_0x0a9e('0x2c')](function(_0x2d7205){if(_0x2d7205){var _0x1cc4f3=_0x2d7205[_0x0a9e('0x5d')]&&fs[_0x0a9e('0x68')](path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x401837,_[_0x0a9e('0x69')](_0x2d7205[_0x0a9e('0x5d')])))?path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x401837,_['toLower'](_0x2d7205[_0x0a9e('0x5d')])):path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x401837,_['toLower'](_0x0a9e('0x6a')));var _0x30944e='default'+_[_0x0a9e('0x6b')](_0x0a9e('0x5d'));if(_0x2d7205[_0x30944e]||!_0x176840[_0x0a9e('0x6c')]){_0x1cc4f3=path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x401837,_['toLower']('default_logo.png'));}if(!fs['existsSync'](_0x1cc4f3)){throw new db[(_0x0a9e('0x6d'))][(_0x0a9e('0x6e'))](_0x0a9e('0x6f'));}return _0x88dcbf[_0x0a9e('0x70')](_0x1cc4f3);}})[_0x0a9e('0x5f')](handleError(_0x88dcbf,null));};var utilLicense=require(_0x0a9e('0x71'));exports[_0x0a9e('0x72')]=function(_0x1a0677,_0x5512d1,_0x235f8f){var _0xcbc8b2=_0x0a9e('0x73');var _0x4a4fc7={'custom':![]};return utilLicense[_0x0a9e('0x63')]()['then'](function(_0x4437ff){if(_0x4437ff){_0x4a4fc7=_0x4437ff;}return db[_0x0a9e('0x32')]['find']({'where':{'id':_0x1a0677[_0x0a9e('0x4f')]['id']},'attributes':[_0x0a9e('0x5d'),_0x0a9e('0x61'),_0x0a9e('0x64'),'defaultLogo',_0x0a9e('0x66'),_0x0a9e('0x67')],'raw':!![]});})[_0x0a9e('0x2c')](handleEntityNotFound(_0x5512d1,null))[_0x0a9e('0x2c')](function(_0x5b7fc3){if(_0x5b7fc3){var _0x109ccb=_0x5b7fc3[_0x0a9e('0x61')]&&fs[_0x0a9e('0x68')](path[_0x0a9e('0x52')](config['root'],_0xcbc8b2,_[_0x0a9e('0x69')](_0x5b7fc3[_0x0a9e('0x61')])))?path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0xcbc8b2,_[_0x0a9e('0x69')](_0x5b7fc3[_0x0a9e('0x61')])):path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0xcbc8b2,_[_0x0a9e('0x69')](_0x0a9e('0x74')));var _0xc4c230=_0x0a9e('0x75')+_[_0x0a9e('0x6b')](_0x0a9e('0x61'));if(_0x5b7fc3[_0xc4c230]||!_0x4a4fc7['custom']){_0x109ccb=path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0xcbc8b2,_[_0x0a9e('0x69')]('default_loginLogo.png'));}if(!fs[_0x0a9e('0x68')](_0x109ccb)){throw new db[(_0x0a9e('0x6d'))][(_0x0a9e('0x6e'))](_0x0a9e('0x6f'));}return _0x5512d1['download'](_0x109ccb);}})['catch'](handleError(_0x5512d1,null));};exports[_0x0a9e('0x76')]=function(_0x2bbdb5,_0x4c54fa){return db[_0x0a9e('0x32')]['find']({'where':{'id':_0x2bbdb5[_0x0a9e('0x4f')]['id']},'attributes':[_0x0a9e('0x77')]})['then'](respondWithResult(_0x4c54fa,null))[_0x0a9e('0x5f')](handleError(_0x4c54fa,null));};exports[_0x0a9e('0x78')]=function(_0x2d2286,_0x42b959,_0x3755fe){if(_0x2d2286[_0x0a9e('0x5c')]&&_0x2d2286[_0x0a9e('0x5c')]['filename']){_0x2d2286[_0x0a9e('0x50')][_0x0a9e('0x64')]=_0x2d2286[_0x0a9e('0x5c')][_0x0a9e('0x5e')];}return db['Setting'][_0x0a9e('0x4e')]({'where':{'id':_0x2d2286[_0x0a9e('0x4f')]['id']}})['then'](handleEntityNotFound(_0x42b959,null))[_0x0a9e('0x2c')](saveUpdates(_0x2d2286['body'],null))[_0x0a9e('0x2c')](respondWithResult(_0x42b959,null))[_0x0a9e('0x5f')](handleError(_0x42b959,null));};var utilLicense=require(_0x0a9e('0x71'));exports[_0x0a9e('0x79')]=function(_0x5af453,_0x51ccd7,_0x353384){var _0x2b9c01=_0x0a9e('0x73');var _0x5ac73d={'custom':![]};return utilLicense[_0x0a9e('0x63')]()[_0x0a9e('0x2c')](function(_0x524e38){if(_0x524e38){_0x5ac73d=_0x524e38;}return db['Setting'][_0x0a9e('0x4e')]({'where':{'id':_0x5af453['params']['id']},'attributes':['logo','loginLogo',_0x0a9e('0x64'),_0x0a9e('0x65'),_0x0a9e('0x66'),_0x0a9e('0x67')],'raw':!![]});})[_0x0a9e('0x2c')](handleEntityNotFound(_0x51ccd7,null))[_0x0a9e('0x2c')](function(_0x5a8854){if(_0x5a8854){var _0x5fd5db=_0x5a8854['preferred']&&fs[_0x0a9e('0x68')](path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x2b9c01,_[_0x0a9e('0x69')](_0x5a8854['preferred'])))?path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x2b9c01,_[_0x0a9e('0x69')](_0x5a8854['preferred'])):path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x2b9c01,_[_0x0a9e('0x69')](_0x0a9e('0x7a')));var _0x255e49=_0x0a9e('0x75')+_[_0x0a9e('0x6b')](_0x0a9e('0x64'));if(_0x5a8854[_0x255e49]||!_0x5ac73d['custom']||!_0x5ac73d[_0x0a9e('0x64')]){_0x5fd5db=path[_0x0a9e('0x52')](config['root'],_0x2b9c01,_[_0x0a9e('0x69')](_0x0a9e('0x7a')));}if(!fs[_0x0a9e('0x68')](_0x5fd5db)){throw new db['Sequelize'][(_0x0a9e('0x6e'))]('Logo\x20not\x20found');}return _0x51ccd7[_0x0a9e('0x70')](_0x5fd5db);}})[_0x0a9e('0x5f')](handleError(_0x51ccd7,null));};
\ No newline at end of file
+var _0xa9e0=['find','params','body','readFileSync','join','server/files/templates/stun.ejs','utf8','root','render','/etc/asterisk/turn_xcally.conf','res_stun_monitor.so','Reload','res_rtp_asterisk.so','addLogo','file','logo','filename','catch','addLogoLogin','loginLogo','getLogo','getLicense','preferred','defaultLogo','defaultLoginLogo','defaultPreferred','existsSync','toLower','default_logo.png','upperFirst','custom','Sequelize','ValidationError','Logo\x20not\x20found','download','../../config/license/util','getLogoLogin','server/files/images/logos','default_loginLogo.png','default','gdpr','securePassword','addPreferred','getPreferred','default_preferred.png','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','info','request\x20sent','Setting,\x20%s,\x20%s,\x20%s','stringify','error','code','Setting,\x20%s,\x20%s','message','result','sendStatus','status','count','offset','limit','Content-Range','json','reject','save','update','then','destroy','end','stack','name','index','Setting','rawAttributes','query','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','field','options','includeAll','include','findAll','rows','show','keys','length'];(function(_0x2db473,_0x5a2489){var _0x12a803=function(_0x5884bd){while(--_0x5884bd){_0x2db473['push'](_0x2db473['shift']());}};_0x12a803(++_0x5a2489);}(_0xa9e0,0x123));var _0x0a9e=function(_0xf0bcac,_0x531755){_0xf0bcac=_0xf0bcac-0x0;var _0x4e4c65=_0xa9e0[_0xf0bcac];return _0x4e4c65;};'use strict';var pdf=require(_0x0a9e('0x0'));var emlformat=require(_0x0a9e('0x1'));var rimraf=require(_0x0a9e('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x0a9e('0x3'));var moment=require('moment');var BPromise=require(_0x0a9e('0x4'));var Mustache=require(_0x0a9e('0x5'));var util=require(_0x0a9e('0x6'));var path=require(_0x0a9e('0x7'));var sox=require(_0x0a9e('0x8'));var csv=require('to-csv');var ejs=require(_0x0a9e('0x9'));var fs=require('fs');var _=require(_0x0a9e('0xa'));var squel=require(_0x0a9e('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x0a9e('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x0a9e('0xd'));var Redis=require(_0x0a9e('0xe'));var authService=require(_0x0a9e('0xf'));var qs=require(_0x0a9e('0x10'));var hardwareService=require(_0x0a9e('0x11'));var logger=require(_0x0a9e('0x12'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var jayson=require(_0x0a9e('0x13'));var client=jayson[_0x0a9e('0x14')][_0x0a9e('0x15')]({'port':0x232a});function checkPasswordPattern(_0x26d672,_0x32d742,_0x69aeb7){if(_0x69aeb7){var _0x5db4b0=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x5db4b0[_0x0a9e('0x16')](_0x32d742)){return _0x26d672;}else{throw new Error(_0x0a9e('0x17'));}}else{return _0x26d672;}}function respondWithRpcPromise(_0x2b4227,_0x281129,_0x44dcfd,_0x4d5611){return new BPromise(function(_0x52a03d,_0x22dccb){var _0x5d0880=_0x4d5611||client;return _0x5d0880[_0x0a9e('0x18')](_0x2b4227,_0x44dcfd)['then'](function(_0x16033c){logger[_0x0a9e('0x19')]('Setting,\x20%s,\x20%s',_0x281129,_0x0a9e('0x1a'));logger['debug'](_0x0a9e('0x1b'),_0x281129,_0x0a9e('0x1a'),JSON[_0x0a9e('0x1c')](_0x16033c));if(_0x16033c[_0x0a9e('0x1d')]){if(_0x16033c[_0x0a9e('0x1d')][_0x0a9e('0x1e')]===0x1f4){logger[_0x0a9e('0x1d')](_0x0a9e('0x1f'),_0x281129,_0x16033c[_0x0a9e('0x1d')][_0x0a9e('0x20')]);return _0x22dccb(_0x16033c[_0x0a9e('0x1d')][_0x0a9e('0x20')]);}logger['error'](_0x0a9e('0x1f'),_0x281129,_0x16033c[_0x0a9e('0x1d')]['message']);return _0x52a03d(_0x16033c[_0x0a9e('0x1d')]['message']);}else{logger['info'](_0x0a9e('0x1f'),_0x281129,_0x0a9e('0x1a'));_0x52a03d(_0x16033c[_0x0a9e('0x21')][_0x0a9e('0x20')]);}})['catch'](function(_0xfb6e48){logger[_0x0a9e('0x1d')](_0x0a9e('0x1f'),_0x281129,_0xfb6e48);_0x22dccb(_0xfb6e48);});});}function respondWithStatusCode(_0x4d00e6,_0x370d86){_0x370d86=_0x370d86||0xcc;return function(_0x42ac8f){if(_0x42ac8f){return _0x4d00e6[_0x0a9e('0x22')](_0x370d86);}return _0x4d00e6['status'](_0x370d86)['end']();};}function respondWithResult(_0x197ec0,_0x3a8e58){_0x3a8e58=_0x3a8e58||0xc8;return function(_0x40c424){if(_0x40c424){return _0x197ec0[_0x0a9e('0x23')](_0x3a8e58)['json'](_0x40c424);}};}function respondWithFilteredResult(_0x384319,_0x479bc4){return function(_0x45a1e7){if(_0x45a1e7){var _0x5bfb33=_0x45a1e7[_0x0a9e('0x24')],_0x1dc186=_0x479bc4[_0x0a9e('0x25')],_0x34dc65=_0x479bc4[_0x0a9e('0x25')]+_0x479bc4[_0x0a9e('0x26')],_0x25fba9;if(_0x34dc65>=_0x5bfb33){_0x34dc65=_0x5bfb33;_0x25fba9=0xc8;}else{_0x25fba9=0xce;}_0x384319[_0x0a9e('0x23')](_0x25fba9);return _0x384319['set'](_0x0a9e('0x27'),_0x1dc186+'-'+_0x34dc65+'/'+_0x5bfb33)[_0x0a9e('0x28')](_0x45a1e7);}return null;};}function patchUpdates(_0x2b1f27){return function(_0x2ec755){try{jsonpatch['apply'](_0x2ec755,_0x2b1f27,!![]);}catch(_0x15b200){return BPromise[_0x0a9e('0x29')](_0x15b200);}return _0x2ec755[_0x0a9e('0x2a')]();};}function saveUpdates(_0x824a4f,_0x58b06f){return function(_0x563b45){if(_0x563b45){return _0x563b45[_0x0a9e('0x2b')](_0x824a4f)[_0x0a9e('0x2c')](function(_0x1dbde2){return _0x1dbde2;});}return null;};}function removeEntity(_0x540530,_0x426950){return function(_0x5d1e0e){if(_0x5d1e0e){return _0x5d1e0e[_0x0a9e('0x2d')]()[_0x0a9e('0x2c')](function(){_0x540530[_0x0a9e('0x23')](0xcc)[_0x0a9e('0x2e')]();});}};}function handleEntityNotFound(_0x25ce3a,_0x5180f1){return function(_0x66c1d2){if(!_0x66c1d2){_0x25ce3a[_0x0a9e('0x22')](0x194);}return _0x66c1d2;};}function handleError(_0x40cb85,_0x2da5c0){_0x2da5c0=_0x2da5c0||0x1f4;return function(_0x2b45ea){logger[_0x0a9e('0x1d')](_0x2b45ea[_0x0a9e('0x2f')]);if(_0x2b45ea[_0x0a9e('0x30')]){delete _0x2b45ea['name'];}_0x40cb85[_0x0a9e('0x23')](_0x2da5c0)['send'](_0x2b45ea);};}exports[_0x0a9e('0x31')]=function(_0x14b13f,_0x2b7e7f){var _0x3f3d41={},_0x567193={},_0x191e91={'count':0x0,'rows':[]};var _0xd1836d=db[_0x0a9e('0x32')][_0x0a9e('0x33')];_0x567193['model']=_['keys'](_0xd1836d);_0x567193[_0x0a9e('0x34')]=_['keys'](_0x14b13f[_0x0a9e('0x34')]);_0x567193[_0x0a9e('0x35')]=_[_0x0a9e('0x36')](_0x567193[_0x0a9e('0x37')],_0x567193['query']);_0x3f3d41[_0x0a9e('0x38')]=_[_0x0a9e('0x36')](_0x567193[_0x0a9e('0x37')],qs['fields'](_0x14b13f[_0x0a9e('0x34')][_0x0a9e('0x39')]));_0x3f3d41[_0x0a9e('0x38')]=_0x3f3d41['attributes']['length']?_0x3f3d41[_0x0a9e('0x38')]:_0x567193[_0x0a9e('0x37')];if(!_0x14b13f['query'][_0x0a9e('0x3a')](_0x0a9e('0x3b'))){_0x3f3d41[_0x0a9e('0x26')]=qs[_0x0a9e('0x26')](_0x14b13f['query']['limit']);_0x3f3d41[_0x0a9e('0x25')]=qs[_0x0a9e('0x25')](_0x14b13f['query'][_0x0a9e('0x25')]);}_0x3f3d41[_0x0a9e('0x3c')]=qs[_0x0a9e('0x3d')](_0x14b13f['query'][_0x0a9e('0x3d')]);_0x3f3d41[_0x0a9e('0x3e')]=qs[_0x0a9e('0x35')](_[_0x0a9e('0x3f')](_0x14b13f[_0x0a9e('0x34')],_0x567193[_0x0a9e('0x35')]));if(_0x14b13f[_0x0a9e('0x34')][_0x0a9e('0x40')]){_0x3f3d41[_0x0a9e('0x3e')]=_[_0x0a9e('0x41')](_0x3f3d41[_0x0a9e('0x3e')],{'$or':_[_0x0a9e('0x42')](_0xd1836d,function(_0x1a7bce){if(_0x1a7bce[_0x0a9e('0x43')][_0x0a9e('0x44')]!=='VIRTUAL'){var _0x52628e={};_0x52628e[_0x1a7bce[_0x0a9e('0x45')]]={'$like':'%'+_0x14b13f[_0x0a9e('0x34')][_0x0a9e('0x40')]+'%'};return _0x52628e;}})});}_0x3f3d41=_[_0x0a9e('0x41')]({},_0x3f3d41,_0x14b13f[_0x0a9e('0x46')]);var _0xc9a702={'where':_0x3f3d41[_0x0a9e('0x3e')]};return db[_0x0a9e('0x32')][_0x0a9e('0x24')](_0xc9a702)[_0x0a9e('0x2c')](function(_0x2c2cb0){_0x191e91[_0x0a9e('0x24')]=_0x2c2cb0;if(_0x14b13f['query'][_0x0a9e('0x47')]){_0x3f3d41[_0x0a9e('0x48')]=[{'all':!![]}];}return db[_0x0a9e('0x32')][_0x0a9e('0x49')](_0x3f3d41);})[_0x0a9e('0x2c')](function(_0xbe9d19){_0x191e91[_0x0a9e('0x4a')]=_0xbe9d19;return _0x191e91;})[_0x0a9e('0x2c')](respondWithFilteredResult(_0x2b7e7f,_0x3f3d41))['catch'](handleError(_0x2b7e7f,null));};exports[_0x0a9e('0x4b')]=function(_0x48fd45,_0x473dc8){var _0x476688={'raw':![],'where':{'id':_0x48fd45['params']['id']}},_0x8d6dd1={};_0x8d6dd1[_0x0a9e('0x37')]=_[_0x0a9e('0x4c')](db[_0x0a9e('0x32')][_0x0a9e('0x33')]);_0x8d6dd1[_0x0a9e('0x34')]=_[_0x0a9e('0x4c')](_0x48fd45[_0x0a9e('0x34')]);_0x8d6dd1['filters']=_[_0x0a9e('0x36')](_0x8d6dd1[_0x0a9e('0x37')],_0x8d6dd1[_0x0a9e('0x34')]);_0x476688[_0x0a9e('0x38')]=_[_0x0a9e('0x36')](_0x8d6dd1[_0x0a9e('0x37')],qs[_0x0a9e('0x39')](_0x48fd45[_0x0a9e('0x34')][_0x0a9e('0x39')]));_0x476688['attributes']=_0x476688[_0x0a9e('0x38')][_0x0a9e('0x4d')]?_0x476688['attributes']:_0x8d6dd1['model'];if(_0x48fd45['query'][_0x0a9e('0x47')]){_0x476688[_0x0a9e('0x48')]=[{'all':!![]}];}_0x476688=_[_0x0a9e('0x41')]({},_0x476688,_0x48fd45[_0x0a9e('0x46')]);return db[_0x0a9e('0x32')][_0x0a9e('0x4e')](_0x476688)[_0x0a9e('0x2c')](handleEntityNotFound(_0x473dc8,null))[_0x0a9e('0x2c')](respondWithResult(_0x473dc8,null))['catch'](handleError(_0x473dc8,null));};exports['update']=function(_0x53975a,_0x39d77d,_0x204173){var _0x14d602;return db['Setting'][_0x0a9e('0x4e')]({'where':{'id':_0x53975a[_0x0a9e('0x4f')]['id']}})['then'](handleEntityNotFound(_0x39d77d,null))['then'](saveUpdates(_0x53975a[_0x0a9e('0x50')],null))['then'](function(_0x443e72){if(_0x443e72){_0x14d602=_0x443e72['get']({'plain':!![]});var _0x2e5e62=fs[_0x0a9e('0x51')](path[_0x0a9e('0x52')](config['root'],_0x0a9e('0x53')),_0x0a9e('0x54'));var _0x508b47=ejs['render'](_0x2e5e62,_0x14d602);var _0x128aa6=fs[_0x0a9e('0x51')](path['join'](config[_0x0a9e('0x55')],'server/files/templates/turn.ejs'),_0x0a9e('0x54'));var _0x523cd2=ejs[_0x0a9e('0x56')](_0x128aa6,_0x14d602);fs['writeFileSync']('/etc/asterisk/stun_xcally.conf',_0x508b47);fs['writeFileSync'](_0x0a9e('0x57'),_0x523cd2);return respondWithRpcPromise('Reload',_0x0a9e('0x2b'),{'module':_0x0a9e('0x58')});}})[_0x0a9e('0x2c')](function(){return respondWithRpcPromise(_0x0a9e('0x59'),_0x0a9e('0x2b'),{'module':_0x0a9e('0x5a')});})[_0x0a9e('0x2c')](function(){return _0x14d602||null;})[_0x0a9e('0x2c')](respondWithResult(_0x39d77d,null))['catch'](handleError(_0x39d77d,null));};exports[_0x0a9e('0x5b')]=function(_0x121cef,_0x2642bb,_0x30c491){if(_0x121cef[_0x0a9e('0x5c')]&&_0x121cef[_0x0a9e('0x5c')]['filename']){_0x121cef[_0x0a9e('0x50')][_0x0a9e('0x5d')]=_0x121cef['file'][_0x0a9e('0x5e')];}return db['Setting'][_0x0a9e('0x4e')]({'where':{'id':_0x121cef['params']['id']}})['then'](handleEntityNotFound(_0x2642bb,null))['then'](saveUpdates(_0x121cef[_0x0a9e('0x50')],null))['then'](respondWithResult(_0x2642bb,null))[_0x0a9e('0x5f')](handleError(_0x2642bb,null));};exports[_0x0a9e('0x60')]=function(_0x261adb,_0x7be420,_0x1cca9f){if(_0x261adb[_0x0a9e('0x5c')]&&_0x261adb['file'][_0x0a9e('0x5e')]){_0x261adb['body'][_0x0a9e('0x61')]=_0x261adb[_0x0a9e('0x5c')][_0x0a9e('0x5e')];}return db['Setting'][_0x0a9e('0x4e')]({'where':{'id':_0x261adb[_0x0a9e('0x4f')]['id']}})[_0x0a9e('0x2c')](handleEntityNotFound(_0x7be420,null))[_0x0a9e('0x2c')](saveUpdates(_0x261adb['body'],null))[_0x0a9e('0x2c')](respondWithResult(_0x7be420,null))[_0x0a9e('0x5f')](handleError(_0x7be420,null));};var utilLicense=require('../../config/license/util');exports[_0x0a9e('0x62')]=function(_0x17e88c,_0x88dcbf,_0x409b29){var _0x401837='server/files/images/logos';var _0x176840={'custom':![]};return utilLicense[_0x0a9e('0x63')]()[_0x0a9e('0x2c')](function(_0x47bb43){if(_0x47bb43){_0x176840=_0x47bb43;}return db[_0x0a9e('0x32')]['find']({'where':{'id':_0x17e88c['params']['id']},'attributes':[_0x0a9e('0x5d'),_0x0a9e('0x61'),_0x0a9e('0x64'),_0x0a9e('0x65'),_0x0a9e('0x66'),_0x0a9e('0x67')],'raw':!![]});})[_0x0a9e('0x2c')](handleEntityNotFound(_0x88dcbf,null))[_0x0a9e('0x2c')](function(_0x2d7205){if(_0x2d7205){var _0x1cc4f3=_0x2d7205[_0x0a9e('0x5d')]&&fs[_0x0a9e('0x68')](path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x401837,_[_0x0a9e('0x69')](_0x2d7205[_0x0a9e('0x5d')])))?path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x401837,_['toLower'](_0x2d7205[_0x0a9e('0x5d')])):path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x401837,_['toLower'](_0x0a9e('0x6a')));var _0x30944e='default'+_[_0x0a9e('0x6b')](_0x0a9e('0x5d'));if(_0x2d7205[_0x30944e]||!_0x176840[_0x0a9e('0x6c')]){_0x1cc4f3=path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x401837,_['toLower']('default_logo.png'));}if(!fs['existsSync'](_0x1cc4f3)){throw new db[(_0x0a9e('0x6d'))][(_0x0a9e('0x6e'))](_0x0a9e('0x6f'));}return _0x88dcbf[_0x0a9e('0x70')](_0x1cc4f3);}})[_0x0a9e('0x5f')](handleError(_0x88dcbf,null));};var utilLicense=require(_0x0a9e('0x71'));exports[_0x0a9e('0x72')]=function(_0x1a0677,_0x5512d1,_0x235f8f){var _0xcbc8b2=_0x0a9e('0x73');var _0x4a4fc7={'custom':![]};return utilLicense[_0x0a9e('0x63')]()['then'](function(_0x4437ff){if(_0x4437ff){_0x4a4fc7=_0x4437ff;}return db[_0x0a9e('0x32')]['find']({'where':{'id':_0x1a0677[_0x0a9e('0x4f')]['id']},'attributes':[_0x0a9e('0x5d'),_0x0a9e('0x61'),_0x0a9e('0x64'),'defaultLogo',_0x0a9e('0x66'),_0x0a9e('0x67')],'raw':!![]});})[_0x0a9e('0x2c')](handleEntityNotFound(_0x5512d1,null))[_0x0a9e('0x2c')](function(_0x5b7fc3){if(_0x5b7fc3){var _0x109ccb=_0x5b7fc3[_0x0a9e('0x61')]&&fs[_0x0a9e('0x68')](path[_0x0a9e('0x52')](config['root'],_0xcbc8b2,_[_0x0a9e('0x69')](_0x5b7fc3[_0x0a9e('0x61')])))?path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0xcbc8b2,_[_0x0a9e('0x69')](_0x5b7fc3[_0x0a9e('0x61')])):path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0xcbc8b2,_[_0x0a9e('0x69')](_0x0a9e('0x74')));var _0xc4c230=_0x0a9e('0x75')+_[_0x0a9e('0x6b')](_0x0a9e('0x61'));if(_0x5b7fc3[_0xc4c230]||!_0x4a4fc7['custom']){_0x109ccb=path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0xcbc8b2,_[_0x0a9e('0x69')]('default_loginLogo.png'));}if(!fs[_0x0a9e('0x68')](_0x109ccb)){throw new db[(_0x0a9e('0x6d'))][(_0x0a9e('0x6e'))](_0x0a9e('0x6f'));}return _0x5512d1['download'](_0x109ccb);}})['catch'](handleError(_0x5512d1,null));};exports[_0x0a9e('0x76')]=function(_0x2bbdb5,_0x4c54fa){return db[_0x0a9e('0x32')]['find']({'where':{'id':_0x2bbdb5[_0x0a9e('0x4f')]['id']},'attributes':[_0x0a9e('0x77')]})['then'](respondWithResult(_0x4c54fa,null))[_0x0a9e('0x5f')](handleError(_0x4c54fa,null));};exports[_0x0a9e('0x78')]=function(_0x2d2286,_0x42b959,_0x3755fe){if(_0x2d2286[_0x0a9e('0x5c')]&&_0x2d2286[_0x0a9e('0x5c')]['filename']){_0x2d2286[_0x0a9e('0x50')][_0x0a9e('0x64')]=_0x2d2286[_0x0a9e('0x5c')][_0x0a9e('0x5e')];}return db['Setting'][_0x0a9e('0x4e')]({'where':{'id':_0x2d2286[_0x0a9e('0x4f')]['id']}})['then'](handleEntityNotFound(_0x42b959,null))[_0x0a9e('0x2c')](saveUpdates(_0x2d2286['body'],null))[_0x0a9e('0x2c')](respondWithResult(_0x42b959,null))[_0x0a9e('0x5f')](handleError(_0x42b959,null));};var utilLicense=require(_0x0a9e('0x71'));exports[_0x0a9e('0x79')]=function(_0x5af453,_0x51ccd7,_0x353384){var _0x2b9c01=_0x0a9e('0x73');var _0x5ac73d={'custom':![]};return utilLicense[_0x0a9e('0x63')]()[_0x0a9e('0x2c')](function(_0x524e38){if(_0x524e38){_0x5ac73d=_0x524e38;}return db['Setting'][_0x0a9e('0x4e')]({'where':{'id':_0x5af453['params']['id']},'attributes':['logo','loginLogo',_0x0a9e('0x64'),_0x0a9e('0x65'),_0x0a9e('0x66'),_0x0a9e('0x67')],'raw':!![]});})[_0x0a9e('0x2c')](handleEntityNotFound(_0x51ccd7,null))[_0x0a9e('0x2c')](function(_0x5a8854){if(_0x5a8854){var _0x5fd5db=_0x5a8854['preferred']&&fs[_0x0a9e('0x68')](path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x2b9c01,_[_0x0a9e('0x69')](_0x5a8854['preferred'])))?path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x2b9c01,_[_0x0a9e('0x69')](_0x5a8854['preferred'])):path[_0x0a9e('0x52')](config[_0x0a9e('0x55')],_0x2b9c01,_[_0x0a9e('0x69')](_0x0a9e('0x7a')));var _0x255e49=_0x0a9e('0x75')+_[_0x0a9e('0x6b')](_0x0a9e('0x64'));if(_0x5a8854[_0x255e49]||!_0x5ac73d['custom']||!_0x5ac73d[_0x0a9e('0x64')]){_0x5fd5db=path[_0x0a9e('0x52')](config['root'],_0x2b9c01,_[_0x0a9e('0x69')](_0x0a9e('0x7a')));}if(!fs[_0x0a9e('0x68')](_0x5fd5db)){throw new db['Sequelize'][(_0x0a9e('0x6e'))]('Logo\x20not\x20found');}return _0x51ccd7[_0x0a9e('0x70')](_0x5fd5db);}})[_0x0a9e('0x5f')](handleError(_0x51ccd7,null));};
\ No newline at end of file
index 6aca875..581b01a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0125=['../../config/environment','./setting.attributes','exports','define','lodash','util','../../config/logger','api','bluebird','request-promise','path','rimraf'];(function(_0x5223fd,_0x44e438){var _0x338a97=function(_0x1e151e){while(--_0x1e151e){_0x5223fd['push'](_0x5223fd['shift']());}};_0x338a97(++_0x44e438);}(_0x0125,0x94));var _0x5012=function(_0x5179a5,_0x419746){_0x5179a5=_0x5179a5-0x0;var _0x15c8ce=_0x0125[_0x5179a5];return _0x15c8ce;};'use strict';var _=require(_0x5012('0x0'));var util=require(_0x5012('0x1'));var logger=require(_0x5012('0x2'))(_0x5012('0x3'));var moment=require('moment');var BPromise=require(_0x5012('0x4'));var rp=require(_0x5012('0x5'));var fs=require('fs');var path=require(_0x5012('0x6'));var rimraf=require(_0x5012('0x7'));var config=require(_0x5012('0x8'));var attributes=require(_0x5012('0x9'));module[_0x5012('0xa')]=function(_0x5ad436,_0x223ca7){return _0x5ad436[_0x5012('0xb')]('Setting',attributes,{'tableName':'settings','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x3f98=['settings','util','../../config/logger','api','moment','bluebird','request-promise','rimraf','../../config/environment','./setting.attributes','exports','define'];(function(_0x4c4d06,_0x20636a){var _0x2d0df3=function(_0xc844f9){while(--_0xc844f9){_0x4c4d06['push'](_0x4c4d06['shift']());}};_0x2d0df3(++_0x20636a);}(_0x3f98,0x1bd));var _0x83f9=function(_0x28c931,_0x671902){_0x28c931=_0x28c931-0x0;var _0x422faf=_0x3f98[_0x28c931];return _0x422faf;};'use strict';var _=require('lodash');var util=require(_0x83f9('0x0'));var logger=require(_0x83f9('0x1'))(_0x83f9('0x2'));var moment=require(_0x83f9('0x3'));var BPromise=require(_0x83f9('0x4'));var rp=require(_0x83f9('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x83f9('0x6'));var config=require(_0x83f9('0x7'));var attributes=require(_0x83f9('0x8'));module[_0x83f9('0x9')]=function(_0x3bc358,_0x47160c){return _0x3bc358[_0x83f9('0xa')]('Setting',attributes,{'tableName':_0x83f9('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index bf84e62..358bd2e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x71bd=['request\x20sent','debug','Setting,\x20%s,\x20%s,\x20%s','error','code','message','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','client','request','info','Setting,\x20%s,\x20%s'];(function(_0x1cdc12,_0x48dc76){var _0x48fc34=function(_0x3a54ed){while(--_0x3a54ed){_0x1cdc12['push'](_0x1cdc12['shift']());}};_0x48fc34(++_0x48dc76);}(_0x71bd,0xd9));var _0xd71b=function(_0x1174bc,_0x37eb16){_0x1174bc=_0x1174bc-0x0;var _0x162a66=_0x71bd[_0x1174bc];return _0x162a66;};'use strict';var _=require(_0xd71b('0x0'));var util=require(_0xd71b('0x1'));var moment=require(_0xd71b('0x2'));var BPromise=require(_0xd71b('0x3'));var rs=require(_0xd71b('0x4'));var fs=require('fs');var Redis=require(_0xd71b('0x5'));var db=require(_0xd71b('0x6'))['db'];var utils=require(_0xd71b('0x7'));var logger=require('../../config/logger')(_0xd71b('0x8'));var config=require(_0xd71b('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xd71b('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x318de9,_0x5f543f,_0x35c76e){return new BPromise(function(_0x28592f,_0x24cb24){return client[_0xd71b('0xb')](_0x318de9,_0x35c76e)['then'](function(_0x5228b1){logger[_0xd71b('0xc')](_0xd71b('0xd'),_0x5f543f,_0xd71b('0xe'));logger[_0xd71b('0xf')](_0xd71b('0x10'),_0x5f543f,_0xd71b('0xe'),JSON['stringify'](_0x5228b1));if(_0x5228b1[_0xd71b('0x11')]){if(_0x5228b1['error'][_0xd71b('0x12')]===0x1f4){logger[_0xd71b('0x11')](_0xd71b('0xd'),_0x5f543f,_0x5228b1[_0xd71b('0x11')][_0xd71b('0x13')]);return _0x24cb24(_0x5228b1['error'][_0xd71b('0x13')]);}logger[_0xd71b('0x11')](_0xd71b('0xd'),_0x5f543f,_0x5228b1['error'][_0xd71b('0x13')]);return _0x28592f(_0x5228b1[_0xd71b('0x11')][_0xd71b('0x13')]);}else{logger[_0xd71b('0xc')](_0xd71b('0xd'),_0x5f543f,'request\x20sent');_0x28592f(_0x5228b1['result'][_0xd71b('0x13')]);}})[_0xd71b('0x14')](function(_0x4dc43d){logger[_0xd71b('0x11')](_0xd71b('0xd'),_0x5f543f,_0x4dc43d);_0x24cb24(_0x4dc43d);});});}
\ No newline at end of file
+var _0xbcb7=['http','request','then','info','Setting,\x20%s,\x20%s','request\x20sent','debug','Setting,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client'];(function(_0x2f5ac5,_0x1ee939){var _0x37c9a8=function(_0x15031f){while(--_0x15031f){_0x2f5ac5['push'](_0x2f5ac5['shift']());}};_0x37c9a8(++_0x1ee939);}(_0xbcb7,0x1ab));var _0x7bcb=function(_0x4fecf3,_0x17fdb0){_0x4fecf3=_0x4fecf3-0x0;var _0x50161f=_0xbcb7[_0x4fecf3];return _0x50161f;};'use strict';var _=require(_0x7bcb('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x7bcb('0x1'));var rs=require(_0x7bcb('0x2'));var fs=require('fs');var Redis=require(_0x7bcb('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x7bcb('0x4'));var logger=require(_0x7bcb('0x5'))(_0x7bcb('0x6'));var config=require(_0x7bcb('0x7'));var jayson=require(_0x7bcb('0x8'));var client=jayson[_0x7bcb('0x9')][_0x7bcb('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x33fe81,_0xd0f34e,_0x6f610d){return new BPromise(function(_0xc701de,_0x20fc87){return client[_0x7bcb('0xb')](_0x33fe81,_0x6f610d)[_0x7bcb('0xc')](function(_0x5070b5){logger[_0x7bcb('0xd')](_0x7bcb('0xe'),_0xd0f34e,_0x7bcb('0xf'));logger[_0x7bcb('0x10')](_0x7bcb('0x11'),_0xd0f34e,_0x7bcb('0xf'),JSON['stringify'](_0x5070b5));if(_0x5070b5[_0x7bcb('0x12')]){if(_0x5070b5[_0x7bcb('0x12')][_0x7bcb('0x13')]===0x1f4){logger[_0x7bcb('0x12')]('Setting,\x20%s,\x20%s',_0xd0f34e,_0x5070b5[_0x7bcb('0x12')]['message']);return _0x20fc87(_0x5070b5[_0x7bcb('0x12')][_0x7bcb('0x14')]);}logger[_0x7bcb('0x12')](_0x7bcb('0xe'),_0xd0f34e,_0x5070b5[_0x7bcb('0x12')]['message']);return _0xc701de(_0x5070b5['error'][_0x7bcb('0x14')]);}else{logger[_0x7bcb('0xd')](_0x7bcb('0xe'),_0xd0f34e,_0x7bcb('0xf'));_0xc701de(_0x5070b5[_0x7bcb('0x15')]['message']);}})[_0x7bcb('0x16')](function(_0x4b4298){logger['error'](_0x7bcb('0xe'),_0xd0f34e,_0x4b4298);_0x20fc87(_0x4b4298);});});}
\ No newline at end of file
index d61046b..92512eb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x018f=['get','isAuthenticated','/describe','describe','/:id','/:id/canned_answers','getAnswers','getApplications','/:id/interactions','getInteractions','/:id/status','getAgents','post','create','addDisposition','addAnswer','/:id/applications','addApplications','/:id/send','status','addAgents','put','update','destroy','delete','/:id/dispositions','removeDispositions','removeAnswers','removeAgents','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsAccount.controller'];(function(_0x2e60fc,_0x31458d){var _0x1165e7=function(_0x3360b7){while(--_0x3360b7){_0x2e60fc['push'](_0x2e60fc['shift']());}};_0x1165e7(++_0x31458d);}(_0x018f,0x93));var _0xf018=function(_0x13e300,_0x1bcb41){_0x13e300=_0x13e300-0x0;var _0x5a3eea=_0x018f[_0x13e300];return _0x5a3eea;};'use strict';var multer=require(_0xf018('0x0'));var util=require(_0xf018('0x1'));var path=require(_0xf018('0x2'));var timeout=require(_0xf018('0x3'));var express=require(_0xf018('0x4'));var router=express['Router']();var auth=require(_0xf018('0x5'));var interaction=require(_0xf018('0x6'));var config=require(_0xf018('0x7'));var controller=require(_0xf018('0x8'));router[_0xf018('0x9')]('/',auth[_0xf018('0xa')](),controller['index']);router[_0xf018('0x9')](_0xf018('0xb'),auth[_0xf018('0xa')](),controller[_0xf018('0xc')]);router[_0xf018('0x9')](_0xf018('0xd'),auth['isAuthenticated'](),controller['show']);router[_0xf018('0x9')]('/:id/dispositions',auth[_0xf018('0xa')](),controller['getDispositions']);router[_0xf018('0x9')](_0xf018('0xe'),auth[_0xf018('0xa')](),controller[_0xf018('0xf')]);router[_0xf018('0x9')]('/:id/applications',auth[_0xf018('0xa')](),controller[_0xf018('0x10')]);router['get'](_0xf018('0x11'),auth[_0xf018('0xa')](),controller[_0xf018('0x12')]);router['get'](_0xf018('0x13'),controller['statusGet']);router[_0xf018('0x9')]('/:id/users',auth[_0xf018('0xa')](),controller[_0xf018('0x14')]);router[_0xf018('0x15')]('/',auth['isAuthenticated'](),controller[_0xf018('0x16')]);router[_0xf018('0x15')]('/:id/dispositions',auth[_0xf018('0xa')](),controller[_0xf018('0x17')]);router['post'](_0xf018('0xe'),auth[_0xf018('0xa')](),controller[_0xf018('0x18')]);router[_0xf018('0x15')]('/:id/notify',controller['notify']);router['post'](_0xf018('0x19'),auth[_0xf018('0xa')](),controller[_0xf018('0x1a')]);router['post'](_0xf018('0x1b'),auth[_0xf018('0xa')](),controller['send']);router[_0xf018('0x15')](_0xf018('0x13'),controller[_0xf018('0x1c')]);router[_0xf018('0x15')]('/:id/users',auth[_0xf018('0xa')](),controller[_0xf018('0x1d')]);router[_0xf018('0x1e')](_0xf018('0xd'),auth[_0xf018('0xa')](),controller[_0xf018('0x1f')]);router['delete'](_0xf018('0xd'),auth[_0xf018('0xa')](),controller[_0xf018('0x20')]);router[_0xf018('0x21')](_0xf018('0x22'),auth['isAuthenticated'](),controller[_0xf018('0x23')]);router[_0xf018('0x21')](_0xf018('0xe'),auth[_0xf018('0xa')](),controller[_0xf018('0x24')]);router[_0xf018('0x21')]('/:id/users',auth[_0xf018('0xa')](),controller[_0xf018('0x25')]);module[_0xf018('0x26')]=router;
\ No newline at end of file
+var _0xfbdd=['update','delete','destroy','removeDispositions','removeAgents','exports','multer','path','connect-timeout','express','../../components/interaction/service','../../config/environment','./smsAccount.controller','get','index','/describe','describe','isAuthenticated','/:id/dispositions','getDispositions','/:id/canned_answers','getAnswers','/:id/applications','getApplications','/:id/interactions','getInteractions','statusGet','/:id/users','post','addAnswer','/:id/notify','notify','addApplications','send'];(function(_0x282b8c,_0x31287f){var _0x510585=function(_0x4fad87){while(--_0x4fad87){_0x282b8c['push'](_0x282b8c['shift']());}};_0x510585(++_0x31287f);}(_0xfbdd,0x17c));var _0xdfbd=function(_0x2eeae8,_0x36a615){_0x2eeae8=_0x2eeae8-0x0;var _0x36a303=_0xfbdd[_0x2eeae8];return _0x36a303;};'use strict';var multer=require(_0xdfbd('0x0'));var util=require('util');var path=require(_0xdfbd('0x1'));var timeout=require(_0xdfbd('0x2'));var express=require(_0xdfbd('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xdfbd('0x4'));var config=require(_0xdfbd('0x5'));var controller=require(_0xdfbd('0x6'));router[_0xdfbd('0x7')]('/',auth['isAuthenticated'](),controller[_0xdfbd('0x8')]);router[_0xdfbd('0x7')](_0xdfbd('0x9'),auth['isAuthenticated'](),controller[_0xdfbd('0xa')]);router[_0xdfbd('0x7')]('/:id',auth[_0xdfbd('0xb')](),controller['show']);router[_0xdfbd('0x7')](_0xdfbd('0xc'),auth[_0xdfbd('0xb')](),controller[_0xdfbd('0xd')]);router[_0xdfbd('0x7')](_0xdfbd('0xe'),auth[_0xdfbd('0xb')](),controller[_0xdfbd('0xf')]);router['get'](_0xdfbd('0x10'),auth['isAuthenticated'](),controller[_0xdfbd('0x11')]);router['get'](_0xdfbd('0x12'),auth[_0xdfbd('0xb')](),controller[_0xdfbd('0x13')]);router[_0xdfbd('0x7')]('/:id/status',controller[_0xdfbd('0x14')]);router[_0xdfbd('0x7')](_0xdfbd('0x15'),auth[_0xdfbd('0xb')](),controller['getAgents']);router['post']('/',auth[_0xdfbd('0xb')](),controller['create']);router[_0xdfbd('0x16')](_0xdfbd('0xc'),auth[_0xdfbd('0xb')](),controller['addDisposition']);router['post'](_0xdfbd('0xe'),auth['isAuthenticated'](),controller[_0xdfbd('0x17')]);router['post'](_0xdfbd('0x18'),controller[_0xdfbd('0x19')]);router[_0xdfbd('0x16')](_0xdfbd('0x10'),auth[_0xdfbd('0xb')](),controller[_0xdfbd('0x1a')]);router[_0xdfbd('0x16')]('/:id/send',auth['isAuthenticated'](),controller[_0xdfbd('0x1b')]);router[_0xdfbd('0x16')]('/:id/status',controller['status']);router[_0xdfbd('0x16')](_0xdfbd('0x15'),auth[_0xdfbd('0xb')](),controller['addAgents']);router['put']('/:id',auth[_0xdfbd('0xb')](),controller[_0xdfbd('0x1c')]);router[_0xdfbd('0x1d')]('/:id',auth[_0xdfbd('0xb')](),controller[_0xdfbd('0x1e')]);router[_0xdfbd('0x1d')]('/:id/dispositions',auth['isAuthenticated'](),controller[_0xdfbd('0x1f')]);router[_0xdfbd('0x1d')](_0xdfbd('0xe'),auth[_0xdfbd('0xb')](),controller['removeAnswers']);router[_0xdfbd('0x1d')](_0xdfbd('0x15'),auth[_0xdfbd('0xb')](),controller[_0xdfbd('0x20')]);module[_0xdfbd('0x21')]=router;
\ No newline at end of file
index eccf541..2cea1da 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3fab=['clickatell','csc','intelepeer','TEXT','BOOLEAN','INTEGER','setDataValue','mandatoryDisposition','sequelize','name','STRING','generate','ENUM','twilio','skebby','connectel','clicksend','plivo'];(function(_0x5397eb,_0x50317e){var _0x5ea583=function(_0x51bf8){while(--_0x51bf8){_0x5397eb['push'](_0x5397eb['shift']());}};_0x5ea583(++_0x50317e);}(_0x3fab,0x1b8));var _0xb3fa=function(_0x46ebde,_0x299acd){_0x46ebde=_0x46ebde-0x0;var _0x1e3bf9=_0x3fab[_0x46ebde];return _0x1e3bf9;};'use strict';var Sequelize=require(_0xb3fa('0x0'));var rs=require('randomstring');module['exports']={'name':{'type':Sequelize['STRING'],'unique':_0xb3fa('0x1'),'allowNull':![]},'key':{'type':Sequelize[_0xb3fa('0x2')],'allowNull':![]},'remote':{'type':Sequelize[_0xb3fa('0x2')],'allowNull':![]},'token':{'type':Sequelize[_0xb3fa('0x2')],'defaultValue':function(){return rs[_0xb3fa('0x3')]();}},'phone':{'type':Sequelize[_0xb3fa('0x2')]},'type':{'type':Sequelize[_0xb3fa('0x4')](_0xb3fa('0x5'),_0xb3fa('0x6'),_0xb3fa('0x7'),_0xb3fa('0x8'),_0xb3fa('0x9'),_0xb3fa('0xa'),_0xb3fa('0xb'),'infobip',_0xb3fa('0xc'))},'accountSid':{'type':Sequelize['STRING']},'authId':{'type':Sequelize[_0xb3fa('0x2')]},'authToken':{'type':Sequelize['STRING']},'smsMethod':{'type':Sequelize[_0xb3fa('0x4')]('SI','TI','GP')},'username':{'type':Sequelize['STRING']},'password':{'type':Sequelize[_0xb3fa('0x2')]},'apiKey':{'type':Sequelize[_0xb3fa('0x2')]},'senderString':{'type':Sequelize[_0xb3fa('0x2')]},'deliveryReport':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'description':{'type':Sequelize[_0xb3fa('0x2')]},'notificationTemplate':{'type':Sequelize[_0xb3fa('0xd')],'defaultValue':function(){return'Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}';}},'notificationSound':{'type':Sequelize[_0xb3fa('0xe')],'defaultValue':!![]},'notificationShake':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0xb3fa('0xf')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0xb3fa('0xe')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xb3fa('0xf')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0xb3fa('0xe')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xb3fa('0xf')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'baseUrl':{'type':Sequelize[_0xb3fa('0x2')]},'mandatoryDispositionPauseId':{'type':Sequelize[_0xb3fa('0xf')],'comment':'Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled'},'mandatoryDisposition':{'type':Sequelize[_0xb3fa('0xe')],'defaultValue':![],'comment':'Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','set':function(_0x2ce6fd){if(!_0x2ce6fd)this[_0xb3fa('0x10')]('mandatoryDispositionPauseId',null);this['setDataValue'](_0xb3fa('0x11'),_0x2ce6fd);}}};
\ No newline at end of file
+var _0xc31a=['sequelize','randomstring','exports','name','STRING','generate','ENUM','twilio','skebby','clicksend','plivo','clickatell','BOOLEAN','TEXT','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','INTEGER','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','setDataValue','mandatoryDisposition'];(function(_0x1c695f,_0x300782){var _0x174067=function(_0x17c9fa){while(--_0x17c9fa){_0x1c695f['push'](_0x1c695f['shift']());}};_0x174067(++_0x300782);}(_0xc31a,0x154));var _0xac31=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xc31a[_0x14add3];return _0x4a174f;};'use strict';var Sequelize=require(_0xac31('0x0'));var rs=require(_0xac31('0x1'));module[_0xac31('0x2')]={'name':{'type':Sequelize['STRING'],'unique':_0xac31('0x3'),'allowNull':![]},'key':{'type':Sequelize[_0xac31('0x4')],'allowNull':![]},'remote':{'type':Sequelize[_0xac31('0x4')],'allowNull':![]},'token':{'type':Sequelize['STRING'],'defaultValue':function(){return rs[_0xac31('0x5')]();}},'phone':{'type':Sequelize[_0xac31('0x4')]},'type':{'type':Sequelize[_0xac31('0x6')](_0xac31('0x7'),_0xac31('0x8'),'connectel',_0xac31('0x9'),_0xac31('0xa'),_0xac31('0xb'),'csc','infobip','intelepeer')},'accountSid':{'type':Sequelize[_0xac31('0x4')]},'authId':{'type':Sequelize[_0xac31('0x4')]},'authToken':{'type':Sequelize['STRING']},'smsMethod':{'type':Sequelize[_0xac31('0x6')]('SI','TI','GP')},'username':{'type':Sequelize[_0xac31('0x4')]},'password':{'type':Sequelize['STRING']},'apiKey':{'type':Sequelize[_0xac31('0x4')]},'senderString':{'type':Sequelize[_0xac31('0x4')]},'deliveryReport':{'type':Sequelize[_0xac31('0xc')],'defaultValue':![]},'description':{'type':Sequelize[_0xac31('0x4')]},'notificationTemplate':{'type':Sequelize[_0xac31('0xd')],'defaultValue':function(){return _0xac31('0xe');}},'notificationSound':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xac31('0xc')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0xac31('0xf')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0xac31('0xc')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xac31('0xf')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0xac31('0xc')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'baseUrl':{'type':Sequelize[_0xac31('0x4')]},'mandatoryDispositionPauseId':{'type':Sequelize['INTEGER'],'comment':_0xac31('0x10')},'mandatoryDisposition':{'type':Sequelize[_0xac31('0xc')],'defaultValue':![],'comment':_0xac31('0x11'),'set':function(_0x444a8c){if(!_0x444a8c)this[_0xac31('0x12')]('mandatoryDispositionPauseId',null);this['setDataValue'](_0xac31('0x13'),_0x444a8c);}}};
\ No newline at end of file
index 3cba3fb..164b96d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2bf1=['localhost','socket.io-emitter','redis','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','info','SmsAccount,\x20%s,\x20%s','request\x20sent','debug','SmsAccount,\x20%s,\x20%s,\x20%s','error','code','message','result','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','then','destroy','SmsAccounts','name','send','index','Pause','mandatoryDispositionPause','SmsAccount','rawAttributes','keys','query','filters','intersection','attributes','model','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','includeAll','include','findAll','rows','catch','show','params','options','find','create','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','describe','addDisposition','SmsAccountId','Disposition','getDispositions','findOne','removeDispositions','addAnswer','CannedAnswer','getAnswers','removeAnswers','ids','notify','Applications','account','applications','orderBy','priority','asc','CmContact','Sequelize','ValidationError','no\x20available\x20attributes','difference','createdAt','updatedAt','CompanyId','ListId','mobile','from','From','Body','messageId','MessageSid','skebby','text','connectel','clicksend','message_id','plivo','Text','MessageUUID','infobip','results','segmentedMessage','clickatell','fromNumber','replyMessageId','intelepeer','refid','isNil','from\x20is\x20mandatory','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','Contacts','DESC','list','SmsInteraction','spread','interaction','autoclose','push','unmanaged','*,*,*,*','created','ContactId','UserId','User','unshift','agent','waitForTheAssignedAgent','Start','startRouting','receiveMessage','entity\x20found','SmsAccount,\x20%s,\x20%s,\x20%s,\x20%s','stringify','twilio','text/xml','addApplications','sequelize','transaction','SmsApplication','bulkCreate','findAndCountAll','getApplications','getInteractions','fullname','internal','Tag','color','tag','to\x20is\x20mandatory','List','out','SmsMessage','Messages','dataValues','log','received\x20delivery\x20report\x20from','inspect','skebby_dispatch_id','requestid','statusInt','status_code','groupName','redif','DELIVERED','DELIVERED_TO_GATEWAY','DELIVRD','statusGet','csc','message-id','state','addAgents','omit','userSmsAccount:save','removeAgents','isArray','emit','userSmsAccount:remove','getAgents','html-pdf','fast-json-patch','request-promise','moment','mustache','path','sox','to-csv','ejs','lodash','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/environment','../../mysqldb','defaults'];(function(_0x48f1bf,_0x303e56){var _0x17b3ed=function(_0x14cac1){while(--_0x14cac1){_0x48f1bf['push'](_0x48f1bf['shift']());}};_0x17b3ed(++_0x303e56);}(_0x2bf1,0xcb));var _0x12bf=function(_0x2b10c6,_0x185590){_0x2b10c6=_0x2b10c6-0x0;var _0x3789d2=_0x2bf1[_0x2b10c6];return _0x3789d2;};'use strict';var pdf=require(_0x12bf('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x12bf('0x1'));var rp=require(_0x12bf('0x2'));var moment=require(_0x12bf('0x3'));var BPromise=require('bluebird');var Mustache=require(_0x12bf('0x4'));var util=require('util');var path=require(_0x12bf('0x5'));var sox=require(_0x12bf('0x6'));var csv=require(_0x12bf('0x7'));var ejs=require(_0x12bf('0x8'));var fs=require('fs');var _=require(_0x12bf('0x9'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x12bf('0xa'));var toCsv=require(_0x12bf('0x7'));var querystring=require(_0x12bf('0xb'));var Papa=require(_0x12bf('0xc'));var Redis=require(_0x12bf('0xd'));var authService=require(_0x12bf('0xe'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x12bf('0xf'));var logger=require(_0x12bf('0x10'))('api');var utils=require('../../config/utils');var config=require(_0x12bf('0x11'));var db=require(_0x12bf('0x12'))['db'];config['redis']=_[_0x12bf('0x13')](config['redis'],{'host':_0x12bf('0x14'),'port':0x18eb});var socket=require(_0x12bf('0x15'))(new Redis(config[_0x12bf('0x16')]));require('./smsAccount.socket')['register'](socket);var jayson=require(_0x12bf('0x17'));var client=jayson[_0x12bf('0x18')][_0x12bf('0x19')]({'port':0x232c});function checkPasswordPattern(_0x4eb38c,_0x529e31,_0x2ff916){if(_0x2ff916){var _0x2b6b37=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x2b6b37[_0x12bf('0x1a')](_0x529e31)){return _0x4eb38c;}else{throw new Error(_0x12bf('0x1b'));}}else{return _0x4eb38c;}}function respondWithRpcPromise(_0x47fa05,_0x99c49,_0x324a66,_0x5ef067){return new BPromise(function(_0x2a70c3,_0x5ea25f){var _0x2ec694=_0x5ef067||client;return _0x2ec694[_0x12bf('0x1c')](_0x47fa05,_0x324a66)['then'](function(_0x443135){logger[_0x12bf('0x1d')](_0x12bf('0x1e'),_0x99c49,_0x12bf('0x1f'));logger[_0x12bf('0x20')](_0x12bf('0x21'),_0x99c49,_0x12bf('0x1f'),JSON['stringify'](_0x443135));if(_0x443135[_0x12bf('0x22')]){if(_0x443135[_0x12bf('0x22')][_0x12bf('0x23')]===0x1f4){logger[_0x12bf('0x22')](_0x12bf('0x1e'),_0x99c49,_0x443135['error'][_0x12bf('0x24')]);return _0x5ea25f(_0x443135['error'][_0x12bf('0x24')]);}logger['error'](_0x12bf('0x1e'),_0x99c49,_0x443135[_0x12bf('0x22')][_0x12bf('0x24')]);return _0x2a70c3(_0x443135[_0x12bf('0x22')][_0x12bf('0x24')]);}else{logger[_0x12bf('0x1d')](_0x12bf('0x1e'),_0x99c49,_0x12bf('0x1f'));_0x2a70c3(_0x443135[_0x12bf('0x25')]['message']);}})['catch'](function(_0x2d580f){logger[_0x12bf('0x22')]('SmsAccount,\x20%s,\x20%s',_0x99c49,_0x2d580f);_0x5ea25f(_0x2d580f);});});}function respondWithStatusCode(_0x191af7,_0x546d26){_0x546d26=_0x546d26||0xcc;return function(_0x19d648){if(_0x19d648){return _0x191af7[_0x12bf('0x26')](_0x546d26);}return _0x191af7[_0x12bf('0x27')](_0x546d26)[_0x12bf('0x28')]();};}function respondWithResult(_0x3a4989,_0xe4425e){_0xe4425e=_0xe4425e||0xc8;return function(_0x4f1d03){if(_0x4f1d03){return _0x3a4989[_0x12bf('0x27')](_0xe4425e)[_0x12bf('0x29')](_0x4f1d03);}};}function respondWithFilteredResult(_0x1127c8,_0x5c3d01){return function(_0x3421d0){if(_0x3421d0){var _0x1a9dfd=_0x3421d0[_0x12bf('0x2a')],_0x563e8d=_0x5c3d01[_0x12bf('0x2b')],_0x43de2a=_0x5c3d01[_0x12bf('0x2b')]+_0x5c3d01[_0x12bf('0x2c')],_0x3c4a07;if(_0x43de2a>=_0x1a9dfd){_0x43de2a=_0x1a9dfd;_0x3c4a07=0xc8;}else{_0x3c4a07=0xce;}_0x1127c8[_0x12bf('0x27')](_0x3c4a07);return _0x1127c8[_0x12bf('0x2d')](_0x12bf('0x2e'),_0x563e8d+'-'+_0x43de2a+'/'+_0x1a9dfd)[_0x12bf('0x29')](_0x3421d0);}return null;};}function patchUpdates(_0x3bebb6){return function(_0x53064c){try{jsonpatch['apply'](_0x53064c,_0x3bebb6,!![]);}catch(_0x4055dc){return BPromise[_0x12bf('0x2f')](_0x4055dc);}return _0x53064c[_0x12bf('0x30')]();};}function saveUpdates(_0x3ec027,_0x1e6b23){return function(_0xeebcae){if(_0xeebcae){return _0xeebcae[_0x12bf('0x31')](_0x3ec027)[_0x12bf('0x32')](function(_0x387a58){return _0x387a58;});}return null;};}function removeEntity(_0x377938,_0x2ad717){return function(_0xb713b0){if(_0xb713b0){return _0xb713b0[_0x12bf('0x33')]()[_0x12bf('0x32')](function(){var _0x5edd5c=_0xb713b0['get']({'plain':!![]});var _0x382552=_0x12bf('0x34');return db['UserProfileResource'][_0x12bf('0x33')]({'where':{'type':_0x382552,'resourceId':_0x5edd5c['id']}})[_0x12bf('0x32')](function(){return _0xb713b0;});})[_0x12bf('0x32')](function(){_0x377938[_0x12bf('0x27')](0xcc)[_0x12bf('0x28')]();});}};}function handleEntityNotFound(_0x16f35d,_0x5a190a){return function(_0xaac509){if(!_0xaac509){_0x16f35d[_0x12bf('0x26')](0x194);}return _0xaac509;};}function handleError(_0x39bf49,_0x2372f2){_0x2372f2=_0x2372f2||0x1f4;return function(_0x5a45b9){logger['error'](_0x5a45b9['stack']);if(_0x5a45b9['name']){delete _0x5a45b9[_0x12bf('0x35')];}_0x39bf49[_0x12bf('0x27')](_0x2372f2)[_0x12bf('0x36')](_0x5a45b9);};}exports[_0x12bf('0x37')]=function(_0xe76631,_0x24ac90){var _0x50474e={'include':[{'model':db[_0x12bf('0x38')],'as':_0x12bf('0x39')}]},_0x309d2e={},_0x9fb45e={'count':0x0,'rows':[]};var _0x19f052=db[_0x12bf('0x3a')][_0x12bf('0x3b')];_0x309d2e['model']=_[_0x12bf('0x3c')](_0x19f052);_0x309d2e[_0x12bf('0x3d')]=_[_0x12bf('0x3c')](_0xe76631[_0x12bf('0x3d')]);_0x309d2e[_0x12bf('0x3e')]=_[_0x12bf('0x3f')](_0x309d2e['model'],_0x309d2e['query']);_0x50474e[_0x12bf('0x40')]=_['intersection'](_0x309d2e[_0x12bf('0x41')],qs[_0x12bf('0x42')](_0xe76631['query']['fields']));_0x50474e[_0x12bf('0x40')]=_0x50474e['attributes'][_0x12bf('0x43')]?_0x50474e[_0x12bf('0x40')]:_0x309d2e['model'];if(!_0xe76631[_0x12bf('0x3d')][_0x12bf('0x44')](_0x12bf('0x45'))){_0x50474e[_0x12bf('0x2c')]=qs['limit'](_0xe76631['query'][_0x12bf('0x2c')]);_0x50474e['offset']=qs['offset'](_0xe76631[_0x12bf('0x3d')]['offset']);}_0x50474e[_0x12bf('0x46')]=qs[_0x12bf('0x47')](_0xe76631['query'][_0x12bf('0x47')]);_0x50474e[_0x12bf('0x48')]=qs['filters'](_[_0x12bf('0x49')](_0xe76631[_0x12bf('0x3d')],_0x309d2e[_0x12bf('0x3e')]));if(_0xe76631[_0x12bf('0x3d')][_0x12bf('0x4a')]){_0x50474e[_0x12bf('0x48')]=_[_0x12bf('0x4b')](_0x50474e[_0x12bf('0x48')],{'$or':_[_0x12bf('0x4c')](_0x19f052,function(_0x237ab2){if(_0x237ab2[_0x12bf('0x4d')][_0x12bf('0x4e')]!==_0x12bf('0x4f')){var _0x2f535b={};_0x2f535b[_0x237ab2[_0x12bf('0x50')]]={'$like':'%'+_0xe76631[_0x12bf('0x3d')][_0x12bf('0x4a')]+'%'};return _0x2f535b;}})});}_0x50474e=_[_0x12bf('0x4b')]({},_0x50474e,_0xe76631['options']);var _0x522939={'where':_0x50474e[_0x12bf('0x48')]};return db[_0x12bf('0x3a')][_0x12bf('0x2a')](_0x522939)['then'](function(_0x378527){_0x9fb45e[_0x12bf('0x2a')]=_0x378527;if(_0xe76631[_0x12bf('0x3d')][_0x12bf('0x51')]){_0x50474e[_0x12bf('0x52')]=[{'all':!![]}];}return db[_0x12bf('0x3a')][_0x12bf('0x53')](_0x50474e);})['then'](function(_0x258190){_0x9fb45e[_0x12bf('0x54')]=_0x258190;return _0x9fb45e;})['then'](respondWithFilteredResult(_0x24ac90,_0x50474e))[_0x12bf('0x55')](handleError(_0x24ac90,null));};exports[_0x12bf('0x56')]=function(_0x18a208,_0x442ce8){var _0x2fd58d={'raw':![],'where':{'id':_0x18a208[_0x12bf('0x57')]['id']},'include':[{'model':db[_0x12bf('0x38')],'as':_0x12bf('0x39')}]},_0x4126d2={};_0x4126d2[_0x12bf('0x41')]=_[_0x12bf('0x3c')](db[_0x12bf('0x3a')]['rawAttributes']);_0x4126d2['query']=_[_0x12bf('0x3c')](_0x18a208[_0x12bf('0x3d')]);_0x4126d2['filters']=_[_0x12bf('0x3f')](_0x4126d2[_0x12bf('0x41')],_0x4126d2[_0x12bf('0x3d')]);_0x2fd58d[_0x12bf('0x40')]=_[_0x12bf('0x3f')](_0x4126d2[_0x12bf('0x41')],qs[_0x12bf('0x42')](_0x18a208[_0x12bf('0x3d')]['fields']));_0x2fd58d[_0x12bf('0x40')]=_0x2fd58d[_0x12bf('0x40')]['length']?_0x2fd58d[_0x12bf('0x40')]:_0x4126d2[_0x12bf('0x41')];if(_0x18a208['query'][_0x12bf('0x51')]){_0x2fd58d[_0x12bf('0x52')]=[{'all':!![]}];}_0x2fd58d=_[_0x12bf('0x4b')]({},_0x2fd58d,_0x18a208[_0x12bf('0x58')]);return db[_0x12bf('0x3a')][_0x12bf('0x59')](_0x2fd58d)[_0x12bf('0x32')](handleEntityNotFound(_0x442ce8,null))['then'](respondWithResult(_0x442ce8,null))[_0x12bf('0x55')](handleError(_0x442ce8,null));};exports[_0x12bf('0x5a')]=function(_0x50c04b,_0x312e0e){return db['SmsAccount'][_0x12bf('0x5a')](_0x50c04b['body'],{})[_0x12bf('0x32')](function(_0x45d28b){var _0x2fb6c8=_0x50c04b[_0x12bf('0x5b')][_0x12bf('0x5c')]({'plain':!![]});if(!_0x2fb6c8)throw new Error(_0x12bf('0x5d'));if(_0x2fb6c8[_0x12bf('0x5e')]===_0x12bf('0x5b')){var _0x58335b=_0x45d28b[_0x12bf('0x5c')]({'plain':!![]});var _0x3256c4='SmsAccounts';return db[_0x12bf('0x5f')][_0x12bf('0x59')]({'where':{'name':_0x3256c4,'userProfileId':_0x2fb6c8[_0x12bf('0x60')]},'raw':!![]})[_0x12bf('0x32')](function(_0x108598){if(_0x108598&&_0x108598['autoAssociation']===0x0){return db['UserProfileResource'][_0x12bf('0x5a')]({'name':_0x58335b['name'],'resourceId':_0x58335b['id'],'type':_0x108598[_0x12bf('0x35')],'sectionId':_0x108598['id']},{})[_0x12bf('0x32')](function(){return _0x45d28b;});}else{return _0x45d28b;}})[_0x12bf('0x55')](function(_0x1f081a){logger[_0x12bf('0x22')](_0x12bf('0x61'),_0x1f081a);throw _0x1f081a;});}return _0x45d28b;})[_0x12bf('0x32')](respondWithResult(_0x312e0e,0xc9))[_0x12bf('0x55')](handleError(_0x312e0e,null));};exports['update']=function(_0x2c9da5,_0x2a7954){if(_0x2c9da5['body']['id']){delete _0x2c9da5[_0x12bf('0x62')]['id'];}return db[_0x12bf('0x3a')][_0x12bf('0x59')]({'where':{'id':_0x2c9da5[_0x12bf('0x57')]['id']},'include':[{'model':db[_0x12bf('0x38')],'as':_0x12bf('0x39')}]})[_0x12bf('0x32')](handleEntityNotFound(_0x2a7954,null))[_0x12bf('0x32')](saveUpdates(_0x2c9da5[_0x12bf('0x62')],null))[_0x12bf('0x32')](respondWithResult(_0x2a7954,null))[_0x12bf('0x55')](handleError(_0x2a7954,null));};exports[_0x12bf('0x33')]=function(_0x33efbb,_0x10df76){return db[_0x12bf('0x3a')][_0x12bf('0x59')]({'where':{'id':_0x33efbb[_0x12bf('0x57')]['id']}})[_0x12bf('0x32')](handleEntityNotFound(_0x10df76,null))[_0x12bf('0x32')](removeEntity(_0x10df76,null))['catch'](handleError(_0x10df76,null));};exports[_0x12bf('0x63')]=function(_0x3fb42f,_0x56a0b4){return db[_0x12bf('0x3a')][_0x12bf('0x63')]()[_0x12bf('0x32')](respondWithResult(_0x56a0b4,null))['catch'](handleError(_0x56a0b4,null));};exports[_0x12bf('0x64')]=function(_0x501305,_0x482645,_0x1ebcbe){if(_0x501305['body']['id']){delete _0x501305[_0x12bf('0x62')]['id'];}return db[_0x12bf('0x3a')][_0x12bf('0x59')]({'where':{'id':_0x501305[_0x12bf('0x57')]['id']}})[_0x12bf('0x32')](handleEntityNotFound(_0x482645,null))['then'](function(_0x387b57){if(_0x387b57){_0x501305[_0x12bf('0x62')][_0x12bf('0x65')]=_0x387b57['id'];return db[_0x12bf('0x66')][_0x12bf('0x5a')](_0x501305['body']);}})[_0x12bf('0x32')](respondWithResult(_0x482645,null))[_0x12bf('0x55')](handleError(_0x482645,null));};exports[_0x12bf('0x67')]=function(_0xf25c4e,_0x208f66,_0x351d57){var _0x5a8a27={'raw':![],'where':{}};var _0x5b1f07={};var _0x6fa567={'count':0x0,'rows':[]};return db[_0x12bf('0x3a')][_0x12bf('0x68')]({'where':{'id':_0xf25c4e[_0x12bf('0x57')]['id']}})['then'](handleEntityNotFound(_0x208f66,null))[_0x12bf('0x32')](function(_0x537b13){if(_0x537b13){_0x5b1f07[_0x12bf('0x41')]=_[_0x12bf('0x3c')](db[_0x12bf('0x66')][_0x12bf('0x3b')]);_0x5b1f07[_0x12bf('0x3d')]=_['keys'](_0xf25c4e['query']);_0x5b1f07['filters']=_[_0x12bf('0x3f')](_0x5b1f07[_0x12bf('0x41')],_0x5b1f07[_0x12bf('0x3d')]);_0x5a8a27['attributes']=_[_0x12bf('0x3f')](_0x5b1f07['model'],qs[_0x12bf('0x42')](_0xf25c4e['query'][_0x12bf('0x42')]));_0x5a8a27[_0x12bf('0x40')]=_0x5a8a27['attributes'][_0x12bf('0x43')]?_0x5a8a27['attributes']:_0x5b1f07[_0x12bf('0x41')];if(!_0xf25c4e[_0x12bf('0x3d')]['hasOwnProperty'](_0x12bf('0x45'))){_0x5a8a27[_0x12bf('0x2c')]=qs[_0x12bf('0x2c')](_0xf25c4e[_0x12bf('0x3d')][_0x12bf('0x2c')]);_0x5a8a27[_0x12bf('0x2b')]=qs[_0x12bf('0x2b')](_0xf25c4e['query'][_0x12bf('0x2b')]);}_0x5a8a27[_0x12bf('0x46')]=qs[_0x12bf('0x47')](_0xf25c4e['query'][_0x12bf('0x47')]);_0x5a8a27[_0x12bf('0x48')]=qs[_0x12bf('0x3e')](_[_0x12bf('0x49')](_0xf25c4e['query'],_0x5b1f07['filters']));_0x5a8a27['where'][_0x12bf('0x65')]=_0x537b13['id'];if(_0xf25c4e[_0x12bf('0x3d')]['filter']){_0x5a8a27['where']=_[_0x12bf('0x4b')](_0x5a8a27[_0x12bf('0x48')],{'$or':_[_0x12bf('0x4c')](_0x5a8a27['attributes'],function(_0x2250b2){var _0x4dbda4={};_0x4dbda4[_0x2250b2]={'$like':'%'+_0xf25c4e['query'][_0x12bf('0x4a')]+'%'};return _0x4dbda4;})});}_0x5a8a27=_[_0x12bf('0x4b')]({},_0x5a8a27,_0xf25c4e[_0x12bf('0x58')]);return db['Disposition']['count']({'where':_0x5a8a27[_0x12bf('0x48')]})[_0x12bf('0x32')](function(_0x14a48f){_0x6fa567['count']=_0x14a48f;if(_0xf25c4e[_0x12bf('0x3d')][_0x12bf('0x51')]){_0x5a8a27[_0x12bf('0x52')]=[{'all':!![]}];}return db['Disposition'][_0x12bf('0x53')](_0x5a8a27);})['then'](function(_0x2ade5a){_0x6fa567[_0x12bf('0x54')]=_0x2ade5a;return _0x6fa567;});}})['then'](respondWithFilteredResult(_0x208f66,_0x5a8a27))[_0x12bf('0x55')](handleError(_0x208f66,null));};exports['removeDispositions']=function(_0x960d8b,_0x5e8efb,_0x1a92a1){return db[_0x12bf('0x3a')]['find']({'where':{'id':_0x960d8b[_0x12bf('0x57')]['id']}})[_0x12bf('0x32')](handleEntityNotFound(_0x5e8efb,null))[_0x12bf('0x32')](function(_0xc0fbba){if(_0xc0fbba){return _0xc0fbba[_0x12bf('0x69')](_0x960d8b['query']['ids']);}})[_0x12bf('0x32')](respondWithStatusCode(_0x5e8efb,null))['catch'](handleError(_0x5e8efb,null));};exports[_0x12bf('0x6a')]=function(_0x676973,_0x41ff18,_0x2ed5f2){if(_0x676973['body']['id']){delete _0x676973['body']['id'];}return db[_0x12bf('0x3a')]['find']({'where':{'id':_0x676973[_0x12bf('0x57')]['id']}})[_0x12bf('0x32')](handleEntityNotFound(_0x41ff18,null))[_0x12bf('0x32')](function(_0x1a5567){if(_0x1a5567){_0x676973[_0x12bf('0x62')]['SmsAccountId']=_0x1a5567['id'];return db[_0x12bf('0x6b')]['create'](_0x676973[_0x12bf('0x62')]);}})[_0x12bf('0x32')](respondWithResult(_0x41ff18,null))[_0x12bf('0x55')](handleError(_0x41ff18,null));};exports[_0x12bf('0x6c')]=function(_0x5e1160,_0x1a4113,_0x1bd3ef){var _0x1c4271={'raw':![],'where':{}};var _0x4f909f={};var _0x1df757={'count':0x0,'rows':[]};return db[_0x12bf('0x3a')][_0x12bf('0x68')]({'where':{'id':_0x5e1160[_0x12bf('0x57')]['id']}})[_0x12bf('0x32')](handleEntityNotFound(_0x1a4113,null))[_0x12bf('0x32')](function(_0x44d000){if(_0x44d000){_0x4f909f[_0x12bf('0x41')]=_['keys'](db[_0x12bf('0x6b')][_0x12bf('0x3b')]);_0x4f909f[_0x12bf('0x3d')]=_[_0x12bf('0x3c')](_0x5e1160[_0x12bf('0x3d')]);_0x4f909f[_0x12bf('0x3e')]=_['intersection'](_0x4f909f['model'],_0x4f909f[_0x12bf('0x3d')]);_0x1c4271['attributes']=_[_0x12bf('0x3f')](_0x4f909f['model'],qs[_0x12bf('0x42')](_0x5e1160[_0x12bf('0x3d')]['fields']));_0x1c4271[_0x12bf('0x40')]=_0x1c4271['attributes'][_0x12bf('0x43')]?_0x1c4271[_0x12bf('0x40')]:_0x4f909f[_0x12bf('0x41')];if(!_0x5e1160[_0x12bf('0x3d')]['hasOwnProperty']('nolimit')){_0x1c4271['limit']=qs['limit'](_0x5e1160['query'][_0x12bf('0x2c')]);_0x1c4271[_0x12bf('0x2b')]=qs[_0x12bf('0x2b')](_0x5e1160[_0x12bf('0x3d')]['offset']);}_0x1c4271[_0x12bf('0x46')]=qs[_0x12bf('0x47')](_0x5e1160[_0x12bf('0x3d')][_0x12bf('0x47')]);_0x1c4271['where']=qs[_0x12bf('0x3e')](_[_0x12bf('0x49')](_0x5e1160[_0x12bf('0x3d')],_0x4f909f[_0x12bf('0x3e')]));_0x1c4271[_0x12bf('0x48')][_0x12bf('0x65')]=_0x44d000['id'];if(_0x5e1160[_0x12bf('0x3d')][_0x12bf('0x4a')]){_0x1c4271[_0x12bf('0x48')]=_[_0x12bf('0x4b')](_0x1c4271[_0x12bf('0x48')],{'$or':_['map'](_0x1c4271[_0x12bf('0x40')],function(_0xa02295){var _0x2c177e={};_0x2c177e[_0xa02295]={'$like':'%'+_0x5e1160[_0x12bf('0x3d')][_0x12bf('0x4a')]+'%'};return _0x2c177e;})});}_0x1c4271=_['merge']({},_0x1c4271,_0x5e1160[_0x12bf('0x58')]);return db[_0x12bf('0x6b')][_0x12bf('0x2a')]({'where':_0x1c4271[_0x12bf('0x48')]})[_0x12bf('0x32')](function(_0x589750){_0x1df757['count']=_0x589750;if(_0x5e1160[_0x12bf('0x3d')][_0x12bf('0x51')]){_0x1c4271[_0x12bf('0x52')]=[{'all':!![]}];}return db[_0x12bf('0x6b')][_0x12bf('0x53')](_0x1c4271);})[_0x12bf('0x32')](function(_0x4ce372){_0x1df757[_0x12bf('0x54')]=_0x4ce372;return _0x1df757;});}})['then'](respondWithFilteredResult(_0x1a4113,_0x1c4271))[_0x12bf('0x55')](handleError(_0x1a4113,null));};exports[_0x12bf('0x6d')]=function(_0x23e44c,_0x516b74,_0x48964e){return db[_0x12bf('0x3a')][_0x12bf('0x59')]({'where':{'id':_0x23e44c['params']['id']}})['then'](handleEntityNotFound(_0x516b74,null))[_0x12bf('0x32')](function(_0x2befd5){if(_0x2befd5){return _0x2befd5[_0x12bf('0x6d')](_0x23e44c[_0x12bf('0x3d')][_0x12bf('0x6e')]);}})['then'](respondWithStatusCode(_0x516b74,null))[_0x12bf('0x55')](handleError(_0x516b74,null));};exports[_0x12bf('0x6f')]=function(_0x139e29,_0x24d249,_0x939007){var _0x5874e2={'channel':'sms'};var _0x3e010e=[];var _0x3dcdf1=[];var _0xd3560b={};return db['SmsAccount'][_0x12bf('0x59')]({'where':{'id':_0x139e29[_0x12bf('0x57')]['id']},'include':[{'model':db['SmsApplication'],'as':_0x12bf('0x70')}]})[_0x12bf('0x32')](handleEntityNotFound(_0x24d249,null))[_0x12bf('0x32')](function(_0x51e766){_0x5874e2[_0x12bf('0x71')]=_0x51e766;_0x5874e2[_0x12bf('0x72')]=_[_0x12bf('0x73')](_0x51e766[_0x12bf('0x70')],[_0x12bf('0x74')],[_0x12bf('0x75')]);if(_0x5874e2[_0x12bf('0x71')][_0x12bf('0x70')]){delete _0x5874e2['account'][_0x12bf('0x70')];}return db[_0x12bf('0x76')][_0x12bf('0x63')]();})[_0x12bf('0x32')](function(_0x21f4ee){if(!_0x21f4ee){throw new db[(_0x12bf('0x77'))][(_0x12bf('0x78'))](_0x12bf('0x79'));}_0x3e010e=_[_0x12bf('0x7a')](_[_0x12bf('0x3c')](_0x21f4ee),[_0x12bf('0x7b'),_0x12bf('0x7c')]);_0x3dcdf1=_[_0x12bf('0x7a')](_[_0x12bf('0x3c')](_0x21f4ee),[_0x12bf('0x7b'),_0x12bf('0x7c'),_0x12bf('0x7d'),_0x12bf('0x7e')]);_0x5874e2[_0x12bf('0x62')]={'mapKey':_0x12bf('0x7f')};if(_0x5874e2[_0x12bf('0x71')][_0x12bf('0x4d')]){switch(_0x5874e2[_0x12bf('0x71')][_0x12bf('0x4d')]){case'twilio':_0x5874e2[_0x12bf('0x62')][_0x12bf('0x80')]=_0x139e29[_0x12bf('0x62')][_0x12bf('0x81')];_0x5874e2[_0x12bf('0x62')][_0x12bf('0x62')]=_0x139e29['body'][_0x12bf('0x82')];_0x5874e2[_0x12bf('0x62')][_0x12bf('0x83')]=_0x139e29[_0x12bf('0x62')][_0x12bf('0x84')];break;case _0x12bf('0x85'):_0x5874e2[_0x12bf('0x62')][_0x12bf('0x80')]='+'+_0x139e29[_0x12bf('0x62')]['sender'];_0x5874e2[_0x12bf('0x62')][_0x12bf('0x62')]=_0x139e29[_0x12bf('0x62')][_0x12bf('0x86')];break;case _0x12bf('0x87'):_0x5874e2['body']['from']=_0x139e29['body'][_0x12bf('0x80')];_0x5874e2[_0x12bf('0x62')][_0x12bf('0x62')]=_0x139e29[_0x12bf('0x62')][_0x12bf('0x24')];break;case _0x12bf('0x88'):_0x5874e2[_0x12bf('0x62')][_0x12bf('0x80')]=_0x139e29[_0x12bf('0x62')][_0x12bf('0x80')];_0x5874e2[_0x12bf('0x62')][_0x12bf('0x62')]=_0x139e29[_0x12bf('0x62')][_0x12bf('0x62')];_0x5874e2['body'][_0x12bf('0x83')]=_0x139e29['body'][_0x12bf('0x89')];break;case _0x12bf('0x8a'):_0x5874e2[_0x12bf('0x62')][_0x12bf('0x80')]=_0x139e29[_0x12bf('0x62')]['From'];_0x5874e2[_0x12bf('0x62')][_0x12bf('0x62')]=_0x139e29[_0x12bf('0x62')][_0x12bf('0x8b')];_0x5874e2[_0x12bf('0x62')][_0x12bf('0x83')]=_0x139e29[_0x12bf('0x62')][_0x12bf('0x8c')];break;case _0x12bf('0x8d'):_0x5874e2[_0x12bf('0x62')][_0x12bf('0x80')]='+'+_0x139e29['body'][_0x12bf('0x8e')][0x0]['from'];_0x5874e2['body'][_0x12bf('0x62')]=_0x139e29['body'][_0x12bf('0x8e')][0x0]['text'];_0x5874e2['body'][_0x12bf('0x83')]=_0x139e29[_0x12bf('0x62')][_0x12bf('0x8e')][0x0][_0x12bf('0x83')];break;case'csc':_0x5874e2[_0x12bf('0x62')][_0x12bf('0x80')]=_0x139e29[_0x12bf('0x62')]['originatingAddress'];_0x5874e2[_0x12bf('0x62')]['body']=_0x139e29[_0x12bf('0x62')][_0x12bf('0x8f')][_0x12bf('0x24')];break;case _0x12bf('0x90'):_0x5874e2[_0x12bf('0x62')]['from']=_0x139e29[_0x12bf('0x62')][_0x12bf('0x91')];_0x5874e2[_0x12bf('0x62')][_0x12bf('0x62')]=_0x139e29[_0x12bf('0x62')][_0x12bf('0x86')];_0x5874e2[_0x12bf('0x62')][_0x12bf('0x83')]=_0x139e29[_0x12bf('0x62')][_0x12bf('0x92')];break;case _0x12bf('0x93'):_0x5874e2['body'][_0x12bf('0x80')]=_0x139e29[_0x12bf('0x62')][_0x12bf('0x80')];_0x5874e2[_0x12bf('0x62')]['body']=_0x139e29['body'][_0x12bf('0x24')];_0x5874e2['body'][_0x12bf('0x83')]=_0x139e29[_0x12bf('0x62')][_0x12bf('0x94')];break;}}if(_0x5874e2[_0x12bf('0x62')]['id']){delete _0x5874e2['body']['id'];}if(_[_0x12bf('0x95')](_0x5874e2[_0x12bf('0x62')]['from'])){throw new db[(_0x12bf('0x77'))][(_0x12bf('0x78'))](_0x12bf('0x96'));}if(_[_0x12bf('0x95')](_0x5874e2[_0x12bf('0x62')][_0x12bf('0x62')])||_0x5874e2[_0x12bf('0x62')][_0x12bf('0x62')]===''){throw new db[(_0x12bf('0x77'))][(_0x12bf('0x78'))]('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_[_0x12bf('0x95')](_0x5874e2[_0x12bf('0x62')][_0x12bf('0x97')])){throw new db[(_0x12bf('0x77'))][(_0x12bf('0x78'))](_0x12bf('0x98')+_0x3dcdf1);}if(!_[_0x12bf('0x99')](_0x3dcdf1,_0x5874e2[_0x12bf('0x62')][_0x12bf('0x97')])){throw new db[(_0x12bf('0x77'))][(_0x12bf('0x78'))](_0x12bf('0x9a')+_0x3dcdf1);}_0xd3560b[_0x5874e2[_0x12bf('0x62')]['mapKey']]=_0x5874e2[_0x12bf('0x62')][_0x12bf('0x80')];return db['CmList'][_0x12bf('0x59')]({'where':{'id':_0x5874e2['account'][_0x12bf('0x7e')]},'include':[{'model':db[_0x12bf('0x76')],'as':_0x12bf('0x9b'),'where':_0xd3560b,'limit':0x1,'order':[[_0x12bf('0x7c'),_0x12bf('0x9c')]]}]});})[_0x12bf('0x32')](handleEntityNotFound(_0x24d249,null))[_0x12bf('0x32')](function(_0x3b9688){if(_0x3b9688){_0x5874e2[_0x12bf('0x9d')]=_['omit'](_0x3b9688,[_0x12bf('0x9b')]);if(_0x3b9688[_0x12bf('0x9b')][_0x12bf('0x43')]){return _0x3b9688[_0x12bf('0x9b')][0x0];}var _0x58ea93=_[_0x12bf('0x13')](_0x5874e2['body'],{'firstName':_0x5874e2[_0x12bf('0x62')][_0x12bf('0x80')],'ListId':_0x3b9688['id']});_0x58ea93[_0x5874e2[_0x12bf('0x62')][_0x12bf('0x97')]]=_0x5874e2[_0x12bf('0x62')]['from'];return db[_0x12bf('0x76')][_0x12bf('0x5a')](_0x58ea93,{'fields':_0x3e010e,'raw':!![]});}})[_0x12bf('0x32')](handleEntityNotFound(_0x24d249,null))[_0x12bf('0x32')](function(_0x8e6b34){if(_0x8e6b34){_0x5874e2['contact']=_0x8e6b34;var _0x5e01d2={'ContactId':_0x8e6b34['id'],'phone':_0x5874e2['body'][_0x12bf('0x80')],'SmsAccountId':_0x139e29[_0x12bf('0x57')]['id']};var _0x39a86a={'ContactId':_0x8e6b34['id'],'SmsAccountId':_0x139e29['params']['id'],'closed':![]};return db[_0x12bf('0x9e')][_0x12bf('0x59')]({'where':_0x39a86a})['then'](function(_0xfaaf2b){if(_0xfaaf2b){return[_0xfaaf2b,![]];}return db[_0x12bf('0x9e')][_0x12bf('0x5a')](_0x5e01d2)[_0x12bf('0x32')](function(_0x3ab947){return[_0x3ab947,!![]];});});}})[_0x12bf('0x9f')](function(_0x57edf9,_0x18e16a){_0x5874e2[_0x12bf('0xa0')]=_0x57edf9[_0x12bf('0x5c')]({'plain':!![]});_0x5874e2[_0x12bf('0xa0')]['created']=![];if(_0x18e16a){if(_0x5874e2[_0x12bf('0x71')][_0x12bf('0xa1')]){_0x5874e2[_0x12bf('0x72')][_0x12bf('0xa2')]({'id':0x0,'priority':_0x5874e2[_0x12bf('0x72')][_0x12bf('0x43')]+0x1,'app':'close','appdata':_0x12bf('0xa3'),'interval':_0x12bf('0xa4')});}_0x5874e2[_0x12bf('0xa0')][_0x12bf('0xa5')]=!![];}return db['SmsMessage'][_0x12bf('0x5a')]({'phone':_0x5874e2[_0x12bf('0x62')][_0x12bf('0x80')],'messageId':_0x5874e2[_0x12bf('0x62')][_0x12bf('0x83')],'body':_0x5874e2[_0x12bf('0x62')][_0x12bf('0x62')],'SmsAccountId':_0x139e29['params']['id'],'SmsInteractionId':_0x57edf9['id'],'direction':'in','ContactId':_0x57edf9[_0x12bf('0xa6')],'AttachmentId':_0x5874e2[_0x12bf('0x62')]['AttachmentId']});})[_0x12bf('0x32')](function(_0x300b5f){_0x5874e2[_0x12bf('0x24')]=_0x300b5f;if(_0x5874e2[_0x12bf('0xa0')][_0x12bf('0xa7')]){return db[_0x12bf('0xa8')]['find']({'attributes':['id',_0x12bf('0x35')],'where':{'id':_0x5874e2[_0x12bf('0xa0')]['UserId']}})['then'](function(_0x999cb3){if(_0x999cb3){_0x5874e2[_0x12bf('0x72')][_0x12bf('0xa9')]({'id':0x0,'priority':0x0,'app':_0x12bf('0xaa'),'appdata':_0x999cb3[_0x12bf('0x35')]+','+(_0x5874e2[_0x12bf('0x71')][_0x12bf('0xab')]||0xa),'interval':_0x12bf('0xa4')});}return respondWithRpcPromise(_0x12bf('0xac'),_0x12bf('0xad'),_0x5874e2);});}return respondWithRpcPromise(_0x12bf('0xac'),_0x12bf('0xad'),_0x5874e2);})['then'](function(_0x51ef87){if(_0x51ef87){var _0x3cd88c=0xc8;var _0x28b99f=_0x12bf('0xae');logger[_0x12bf('0x1d')](_0x12bf('0x21'),_0x28b99f,_0x3cd88c,_0x12bf('0xaf'));logger[_0x12bf('0x20')](_0x12bf('0xb0'),_0x28b99f,_0x3cd88c,_0x12bf('0xaf'),JSON[_0x12bf('0xb1')](_0x51ef87));if(_0x5874e2[_0x12bf('0x71')][_0x12bf('0x4d')]===_0x12bf('0xb2')){return _0x24d249[_0x12bf('0x27')](_0x3cd88c)['set']('Content-Type',_0x12bf('0xb3'))[_0x12bf('0x36')]('<?xml\x20version=\x221.0\x22\x20encoding=\x22UTF-8\x22?>\x0a<Response></Response>');}else{return _0x24d249[_0x12bf('0x27')](_0x3cd88c)[_0x12bf('0x29')](_0x51ef87);}}})[_0x12bf('0x55')](handleError(_0x24d249,null));};exports[_0x12bf('0xb4')]=function(_0x44a219,_0x238ccd,_0x5e9b3b){return db[_0x12bf('0x3a')][_0x12bf('0x68')]({'where':{'id':_0x44a219[_0x12bf('0x57')]['id']}})[_0x12bf('0x32')](handleEntityNotFound(_0x238ccd,null))['then'](function(_0x311c45){if(_0x311c45){return db[_0x12bf('0xb5')][_0x12bf('0xb6')](function(_0x2f4544){return db[_0x12bf('0xb7')]['destroy']({'where':{'SmsAccountId':_0x44a219['params']['id']},'transaction':_0x2f4544})['then'](function(_0x316148){var _0x146b13=_[_0x12bf('0x4c')](_0x44a219[_0x12bf('0x62')],function(_0x1fc1d0){_0x1fc1d0[_0x12bf('0x65')]=_0x44a219['params']['id'];return _0x1fc1d0;});return db[_0x12bf('0xb7')][_0x12bf('0xb8')](_0x146b13,{'transaction':_0x2f4544});});})['then'](function(){return db[_0x12bf('0xb7')][_0x12bf('0xb9')]({'where':{'SmsAccountId':_0x44a219[_0x12bf('0x57')]['id']},'order':_0x12bf('0x74')});});}})[_0x12bf('0x32')](respondWithResult(_0x238ccd,null))[_0x12bf('0x55')](handleError(_0x238ccd,null));};exports['getApplications']=function(_0x393290,_0x416ffb,_0x550dc7){var _0x34bea8={};var _0x2f0bb6={};var _0x4474d7;var _0x4cc453;return db[_0x12bf('0x3a')][_0x12bf('0x68')]({'where':{'id':_0x393290[_0x12bf('0x57')]['id']}})[_0x12bf('0x32')](handleEntityNotFound(_0x416ffb,null))[_0x12bf('0x32')](function(_0x666202){if(_0x666202){_0x4474d7=_0x666202;_0x2f0bb6['model']=_['keys'](db[_0x12bf('0xb7')][_0x12bf('0x3b')]);_0x2f0bb6[_0x12bf('0x3d')]=_[_0x12bf('0x3c')](_0x393290['query']);_0x2f0bb6['filters']=_[_0x12bf('0x3f')](_0x2f0bb6[_0x12bf('0x41')],_0x2f0bb6[_0x12bf('0x3d')]);_0x34bea8[_0x12bf('0x40')]=_['intersection'](_0x2f0bb6[_0x12bf('0x41')],qs[_0x12bf('0x42')](_0x393290[_0x12bf('0x3d')][_0x12bf('0x42')]));_0x34bea8[_0x12bf('0x40')]=_0x34bea8[_0x12bf('0x40')]['length']?_0x34bea8['attributes']:_0x2f0bb6[_0x12bf('0x41')];_0x34bea8[_0x12bf('0x46')]=qs[_0x12bf('0x47')](_0x393290[_0x12bf('0x3d')][_0x12bf('0x47')]);_0x34bea8[_0x12bf('0x48')]=qs['filters'](_[_0x12bf('0x49')](_0x393290[_0x12bf('0x3d')],_0x2f0bb6[_0x12bf('0x3e')]));if(_0x393290['query'][_0x12bf('0x4a')]){_0x34bea8['where']=_['merge'](_0x34bea8[_0x12bf('0x48')],{'$or':_[_0x12bf('0x4c')](_0x34bea8[_0x12bf('0x40')],function(_0x35a9f6){var _0x594fc2={};_0x594fc2[_0x35a9f6]={'$like':'%'+_0x393290[_0x12bf('0x3d')]['filter']+'%'};return _0x594fc2;})});}_0x34bea8=_[_0x12bf('0x4b')]({},_0x34bea8,_0x393290[_0x12bf('0x58')]);return _0x4474d7['getApplications'](_0x34bea8);}})[_0x12bf('0x32')](function(_0x26e537){if(_0x26e537){_0x4cc453=_0x26e537[_0x12bf('0x43')];if(!_0x393290['query']['hasOwnProperty']('nolimit')){_0x34bea8[_0x12bf('0x2c')]=qs[_0x12bf('0x2c')](_0x393290[_0x12bf('0x3d')]['limit']);_0x34bea8[_0x12bf('0x2b')]=qs['offset'](_0x393290['query'][_0x12bf('0x2b')]);}return _0x4474d7[_0x12bf('0xba')](_0x34bea8);}})[_0x12bf('0x32')](function(_0x5cc582){if(_0x5cc582){return _0x5cc582?{'count':_0x4cc453,'rows':_0x5cc582}:null;}})[_0x12bf('0x32')](respondWithResult(_0x416ffb,null))[_0x12bf('0x55')](handleError(_0x416ffb,null));};exports[_0x12bf('0xbb')]=function(_0x2befde,_0x523167,_0x1a2b00){var _0x1af353={'raw':![],'where':{}};var _0x49e3e4={};var _0x4cdd0a={'count':0x0,'rows':[]};return db[_0x12bf('0x3a')][_0x12bf('0x68')]({'where':{'id':_0x2befde[_0x12bf('0x57')]['id']}})['then'](handleEntityNotFound(_0x523167,null))[_0x12bf('0x32')](function(_0x3523a8){if(_0x3523a8){_0x49e3e4[_0x12bf('0x41')]=_['keys'](db['SmsInteraction']['rawAttributes']);_0x49e3e4[_0x12bf('0x3d')]=_[_0x12bf('0x3c')](_0x2befde[_0x12bf('0x3d')]);_0x49e3e4[_0x12bf('0x3e')]=_[_0x12bf('0x3f')](_0x49e3e4[_0x12bf('0x41')],_0x49e3e4['query']);_0x1af353['attributes']=_[_0x12bf('0x3f')](_0x49e3e4[_0x12bf('0x41')],qs[_0x12bf('0x42')](_0x2befde[_0x12bf('0x3d')][_0x12bf('0x42')]));_0x1af353[_0x12bf('0x40')]=_0x1af353[_0x12bf('0x40')][_0x12bf('0x43')]?_0x1af353[_0x12bf('0x40')]:_0x49e3e4[_0x12bf('0x41')];if(!_0x2befde['query'][_0x12bf('0x44')](_0x12bf('0x45'))){_0x1af353['limit']=qs[_0x12bf('0x2c')](_0x2befde['query'][_0x12bf('0x2c')]);_0x1af353[_0x12bf('0x2b')]=qs[_0x12bf('0x2b')](_0x2befde['query']['offset']);}_0x1af353[_0x12bf('0x46')]=qs['sort'](_0x2befde[_0x12bf('0x3d')][_0x12bf('0x47')]);_0x1af353[_0x12bf('0x48')]=qs[_0x12bf('0x3e')](_[_0x12bf('0x49')](_0x2befde['query'],_0x49e3e4['filters']));_0x1af353['where'][_0x12bf('0x65')]=_0x3523a8['id'];if(_0x2befde[_0x12bf('0x3d')][_0x12bf('0x4a')]){_0x1af353[_0x12bf('0x48')]=_[_0x12bf('0x4b')](_0x1af353[_0x12bf('0x48')],{'$or':_[_0x12bf('0x4c')](_0x1af353['attributes'],function(_0x3a543c){var _0x4664af={};_0x4664af[_0x3a543c]={'$like':'%'+_0x2befde[_0x12bf('0x3d')]['filter']+'%'};return _0x4664af;})});}_0x1af353=_[_0x12bf('0x4b')]({},_0x1af353,_0x2befde['options']);return db[_0x12bf('0x9e')][_0x12bf('0x2a')]({'where':_0x1af353['where']})[_0x12bf('0x32')](function(_0x3e7490){_0x4cdd0a[_0x12bf('0x2a')]=_0x3e7490;if(_0x2befde[_0x12bf('0x3d')][_0x12bf('0x51')]){_0x1af353['include']=[{'model':db['CmContact'],'as':'Contact','required':![]},{'model':db['User'],'as':'Owner','attributes':[_0x12bf('0x35'),_0x12bf('0xbc'),_0x12bf('0xbd')],'required':![]},{'model':db[_0x12bf('0xbe')],'as':'Tags','attributes':['id',_0x12bf('0x35'),_0x12bf('0xbf')],'where':_0x2befde[_0x12bf('0x3d')][_0x12bf('0xc0')]?{'id':_0x2befde['query'][_0x12bf('0xc0')]}:undefined,'required':_0x2befde['query'][_0x12bf('0xc0')]?!![]:![]}];}return db[_0x12bf('0x9e')][_0x12bf('0x53')](_0x1af353);})[_0x12bf('0x32')](function(_0x18e66e){_0x4cdd0a[_0x12bf('0x54')]=_0x18e66e;return _0x4cdd0a;});}})[_0x12bf('0x32')](respondWithFilteredResult(_0x523167,_0x1af353))[_0x12bf('0x55')](handleError(_0x523167,null));};exports[_0x12bf('0x36')]=function(_0x1c50c7,_0x23b3a1,_0x1893d9){var _0x333200,_0x1188bf,_0x5b4972;if(_[_0x12bf('0x95')](_0x1c50c7[_0x12bf('0x62')][_0x12bf('0x62')])||_0x1c50c7[_0x12bf('0x62')][_0x12bf('0x62')]===''){throw new db[(_0x12bf('0x77'))]['ValidationError']('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_[_0x12bf('0x95')](_0x1c50c7['body']['to'])){throw new db[(_0x12bf('0x77'))][(_0x12bf('0x78'))](_0x12bf('0xc1'));}_0x333200=_0x1c50c7[_0x12bf('0x62')]['to'];return db[_0x12bf('0x3a')]['find']({'where':{'id':_0x1c50c7[_0x12bf('0x57')]['id']},'include':[{'model':db['CmList'],'as':_0x12bf('0xc2'),'include':[{'model':db[_0x12bf('0x76')],'as':_0x12bf('0x9b'),'where':{'mobile':_0x333200},'limit':0x1,'order':[['updatedAt','DESC']]}]}]})[_0x12bf('0x32')](handleEntityNotFound(_0x23b3a1,null))['then'](function(_0x59a9a8){if(_0x59a9a8&&_0x59a9a8[_0x12bf('0xc2')]){_0x1188bf=_0x59a9a8[_0x12bf('0x5c')]({'plain':!![]});if(_0x1188bf['List']&&_0x1188bf[_0x12bf('0xc2')][_0x12bf('0x9b')][_0x12bf('0x43')]){return _0x1188bf[_0x12bf('0xc2')]['Contacts'][0x0];}return db[_0x12bf('0x76')][_0x12bf('0x5a')](_['defaults'](_0x1c50c7[_0x12bf('0x62')],{'firstName':_0x333200,'mobile':_0x333200,'phone':_0x333200,'ListId':_0x1188bf[_0x12bf('0x7e')]}));}})['then'](handleEntityNotFound(_0x23b3a1,null))[_0x12bf('0x32')](function(_0x433225){if(_0x433225){_0x5b4972=_0x433225;return db[_0x12bf('0x9e')][_0x12bf('0x59')]({'where':{'ContactId':_0x5b4972['id'],'closed':![],'SmsAccountId':_0x1188bf['id']}})[_0x12bf('0x32')](function(_0x25f0db){if(_0x25f0db){return[_0x25f0db,![]];}return db[_0x12bf('0x9e')]['create']({'UserId':_0x1c50c7[_0x12bf('0x5b')]['id'],'ContactId':_0x5b4972['id'],'SmsAccountId':_0x1188bf['id'],'phone':_0x333200,'firstMsgDirection':_0x12bf('0xc3'),'Messages':[_[_0x12bf('0x4b')](_0x1c50c7[_0x12bf('0x62')],{'read':![],'body':_0x1c50c7[_0x12bf('0x62')][_0x12bf('0x62')],'phone':_0x333200,'SmsAccountId':_0x1188bf['id'],'UserId':_0x1c50c7[_0x12bf('0x5b')]['id'],'ContactId':_0x5b4972['id']})]},{'include':[{'model':db[_0x12bf('0xc4')],'as':_0x12bf('0xc5')}]})[_0x12bf('0x32')](function(_0x5ecb44){return[_0x5ecb44,!![]];});});}})[_0x12bf('0x9f')](function(_0x2a18ac,_0x52a5d7){if(_0x52a5d7){return _0x2a18ac;}return db[_0x12bf('0xc4')][_0x12bf('0x5a')](_[_0x12bf('0x4b')](_0x1c50c7[_0x12bf('0x62')],{'read':![],'body':_0x1c50c7[_0x12bf('0x62')][_0x12bf('0x62')],'phone':_0x333200,'SmsAccountId':_0x1188bf['id'],'SmsInteractionId':_0x2a18ac['id'],'UserId':_0x1c50c7['user']['id'],'ContactId':_0x5b4972['id']}))[_0x12bf('0x32')](function(_0x476265){_0x2a18ac[_0x12bf('0xc6')][_0x12bf('0xc5')]=[];_0x2a18ac[_0x12bf('0xc6')][_0x12bf('0xc5')]['push'](_0x476265['dataValues']);return _0x2a18ac;});})[_0x12bf('0x32')](respondWithResult(_0x23b3a1,null))['catch'](handleError(_0x23b3a1,null));};exports[_0x12bf('0x27')]=function(_0x5ade2e,_0x4a6698,_0x236e46){if(_0x5ade2e['body']['id']){delete _0x5ade2e[_0x12bf('0x62')]['id'];}console[_0x12bf('0xc7')]('endpoint\x20/status\x20POST\x20/',_0x5ade2e['body']);var _0xde5a4b,_0x8d64fb,_0x30c849;return db[_0x12bf('0x3a')][_0x12bf('0x59')]({'where':{'id':_0x5ade2e['params']['id']}})['then'](handleEntityNotFound(_0x4a6698,null))[_0x12bf('0x32')](function(_0x4d0f7a){if(_0x4d0f7a){_0x30c849=_0x4d0f7a;logger['debug'](_0x12bf('0x21'),_0x12bf('0x27'),_0x12bf('0xc8'),_0x4d0f7a[_0x12bf('0x4d')],util[_0x12bf('0xc9')](_0x5ade2e[_0x12bf('0x62')],{'showHidden':![],'depth':null}));switch(_0x4d0f7a[_0x12bf('0x4d')]){case _0x12bf('0x85'):if(_0x5ade2e['body'][_0x12bf('0xca')]&&_0x5ade2e['body'][_0x12bf('0x27')]){_0x8d64fb=_0x5ade2e[_0x12bf('0x62')]['status'];return db['SmsMessage']['find']({'where':{'messageId':_0x5ade2e[_0x12bf('0x62')][_0x12bf('0xca')]}});}break;case'connectel':if(_0x5ade2e[_0x12bf('0x62')][_0x12bf('0xcb')]&&_0x5ade2e[_0x12bf('0x62')][_0x12bf('0xcc')]){_0x8d64fb=_0x5ade2e[_0x12bf('0x62')][_0x12bf('0xcc')];return db['SmsMessage'][_0x12bf('0x59')]({'where':{'messageId':_0x5ade2e['body'][_0x12bf('0xcb')]}});}break;case'clicksend':if(_0x5ade2e[_0x12bf('0x62')][_0x12bf('0x89')]&&_0x5ade2e[_0x12bf('0x62')]['status_code']){_0x8d64fb=_0x5ade2e[_0x12bf('0x62')][_0x12bf('0xcd')];return db[_0x12bf('0xc4')]['find']({'where':{'messageId':_0x5ade2e[_0x12bf('0x62')]['message_id']}});}break;case'infobip':var _0x403a15=_0x5ade2e[_0x12bf('0x62')][_0x12bf('0x8e')][0x0];if(_0x403a15[_0x12bf('0x83')]&&_0x403a15[_0x12bf('0x27')][_0x12bf('0xce')]==='DELIVERED'){_0x8d64fb=_0x403a15[_0x12bf('0x27')][_0x12bf('0xce')];return db['SmsMessage']['find']({'where':{'messageId':_0x403a15[_0x12bf('0x83')]}});}break;case _0x12bf('0x90'):if(_0x5ade2e['body'][_0x12bf('0x83')]&&_0x5ade2e['body'][_0x12bf('0x27')]){_0x8d64fb=_0x5ade2e[_0x12bf('0x62')][_0x12bf('0x27')];return db[_0x12bf('0xc4')][_0x12bf('0x59')]({'where':{'messageId':_0x5ade2e[_0x12bf('0x62')][_0x12bf('0x83')]}});}break;case'intelepeer':if(_0x5ade2e[_0x12bf('0x62')][_0x12bf('0xcf')]&&_0x5ade2e['body'][_0x12bf('0x27')]){_0x8d64fb=_0x5ade2e[_0x12bf('0x62')][_0x12bf('0x27')];return db[_0x12bf('0xc4')]['find']({'where':{'messageId':_0x5ade2e['body'][_0x12bf('0xcf')]}});}break;}}})[_0x12bf('0x32')](handleEntityNotFound(_0x4a6698,null))[_0x12bf('0x32')](function(_0x5656ad){if(_0x5656ad){_0xde5a4b=_0x5656ad;switch(_0x30c849[_0x12bf('0x4d')]){case _0x12bf('0x85'):if(_0x8d64fb===_0x12bf('0xd0')){return _0xde5a4b['update']({'read':!![]});}else{logger['error'](_0x12bf('0x21'),_0x12bf('0x27'),'skebby',util[_0x12bf('0xc9')](_0x5ade2e[_0x12bf('0x62')],{'showHidden':![],'depth':null}));}break;case'connectel':if(_0x8d64fb==='1'){return _0xde5a4b[_0x12bf('0x31')]({'read':!![]});}else{logger[_0x12bf('0x22')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0x12bf('0x27'),_0x12bf('0x85'),util[_0x12bf('0xc9')](_0x5ade2e[_0x12bf('0x62')],{'showHidden':![],'depth':null}));}break;case _0x12bf('0x88'):if(!_0x5ade2e[_0x12bf('0x62')]['error_code']&&_0x8d64fb>=0xc8&&_0x8d64fb<=0xce){return _0xde5a4b[_0x12bf('0x31')]({'read':!![]});}else{logger[_0x12bf('0x22')](_0x12bf('0x21'),_0x12bf('0x27'),_0x12bf('0x88'),util[_0x12bf('0xc9')](_0x5ade2e[_0x12bf('0x62')],{'showHidden':![],'depth':null}));}break;case _0x12bf('0x8d'):var _0x44bcf8=_0x5ade2e[_0x12bf('0x62')][_0x12bf('0x8e')][0x0];if(_0x44bcf8[_0x12bf('0x27')][_0x12bf('0xce')]===_0x12bf('0xd0')){return _0xde5a4b[_0x12bf('0x31')]({'read':!![]});}else{logger[_0x12bf('0x22')](_0x12bf('0x21'),_0x12bf('0x27'),_0x12bf('0x8d'),util[_0x12bf('0xc9')](_0x5ade2e[_0x12bf('0x62')],{'showHidden':![],'depth':null}));}break;case _0x12bf('0x90'):if(_0x8d64fb==_0x12bf('0xd1')||_0x8d64fb=='RECEIVED_BY_RECIPIENT'){return _0xde5a4b[_0x12bf('0x31')]({'read':!![]});}else{logger[_0x12bf('0x22')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0x12bf('0x27'),_0x12bf('0x90'),util[_0x12bf('0xc9')](_0x5ade2e[_0x12bf('0x62')],{'showHidden':![],'depth':null}));}break;case'intelepeer':if(_0x8d64fb===_0x12bf('0xd2')||_0x8d64fb==='ACCEPTD'){return _0xde5a4b[_0x12bf('0x31')]({'read':!![]});}else{logger[_0x12bf('0x22')](_0x12bf('0x21'),_0x12bf('0x27'),_0x12bf('0x93'),util[_0x12bf('0xc9')](_0x5ade2e[_0x12bf('0x62')],{'showHidden':![],'depth':null}));}break;}return _0xde5a4b;}})[_0x12bf('0x32')](respondWithResult(_0x4a6698,null))[_0x12bf('0x55')](handleError(_0x4a6698,null));};exports[_0x12bf('0xd3')]=function(_0x1f1b78,_0x28ec3a,_0x1faeb6){var _0x448c10,_0x556fac,_0x30e83e;return db[_0x12bf('0x3a')]['find']({'where':{'id':_0x1f1b78[_0x12bf('0x57')]['id']}})[_0x12bf('0x32')](handleEntityNotFound(_0x28ec3a,null))[_0x12bf('0x32')](function(_0x1b80ed){if(_0x1b80ed){_0x30e83e=_0x1b80ed;logger[_0x12bf('0x20')](_0x12bf('0x21'),_0x12bf('0x27'),_0x12bf('0xc8'),_0x1b80ed[_0x12bf('0x4d')],util[_0x12bf('0xc9')](_0x1f1b78[_0x12bf('0x3d')],{'showHidden':![],'depth':null}));switch(_0x1b80ed[_0x12bf('0x4d')]){case _0x12bf('0xd4'):if(_0x1f1b78[_0x12bf('0x3d')][_0x12bf('0xd5')]&&_0x1f1b78[_0x12bf('0x3d')][_0x12bf('0xd6')]){_0x556fac=_0x1f1b78[_0x12bf('0x3d')][_0x12bf('0xd6')];return db['SmsMessage'][_0x12bf('0x59')]({'where':{'messageId':_0x1f1b78[_0x12bf('0x3d')]['message-id']}});}break;}}})['then'](handleEntityNotFound(_0x28ec3a,null))['then'](function(_0x5f52e0){if(_0x5f52e0){_0x448c10=_0x5f52e0;switch(_0x30e83e[_0x12bf('0x4d')]){case'csc':if(_0x556fac==='2'||_0x556fac==='6'){return _0x448c10[_0x12bf('0x31')]({'read':!![]});}else{logger['error']('SmsAccount,\x20%s,\x20%s,\x20%s',_0x12bf('0x27'),_0x12bf('0xd4'),util['inspect'](_0x1f1b78['query'],{'showHidden':![],'depth':null}));};break;}return _0x448c10;}})[_0x12bf('0x32')](respondWithResult(_0x28ec3a,null))[_0x12bf('0x55')](handleError(_0x28ec3a,null));};exports['addAgents']=function(_0x4fe313,_0x4ecad3,_0x1faedc){return db['SmsAccount'][_0x12bf('0x59')]({'where':{'id':_0x4fe313['params']['id']}})['then'](handleEntityNotFound(_0x4ecad3,null))[_0x12bf('0x32')](function(_0x5e2104){if(_0x5e2104){return _0x5e2104[_0x12bf('0xd7')](_0x4fe313[_0x12bf('0x62')][_0x12bf('0x6e')],_[_0x12bf('0xd8')](_0x4fe313[_0x12bf('0x62')],[_0x12bf('0x6e'),'id'])||{})['spread'](function(_0x5d4ff1){for(var _0xc40de4=0x0;_0xc40de4<_0x4fe313[_0x12bf('0x62')][_0x12bf('0x6e')][_0x12bf('0x43')];_0xc40de4+=0x1){socket['emit'](_0x12bf('0xd9'),{'UserId':_0x4fe313[_0x12bf('0x62')]['ids'][_0xc40de4],'SmsAccountId':_0x4fe313[_0x12bf('0x57')]['id']});}return _0x5d4ff1;});}})[_0x12bf('0x32')](respondWithResult(_0x4ecad3,null))[_0x12bf('0x55')](handleError(_0x4ecad3,null));};exports[_0x12bf('0xda')]=function(_0x5e12da,_0x228c79,_0x51fa5f){return db[_0x12bf('0x3a')][_0x12bf('0x59')]({'where':{'id':_0x5e12da[_0x12bf('0x57')]['id']}})[_0x12bf('0x32')](handleEntityNotFound(_0x228c79,null))[_0x12bf('0x32')](function(_0x2cdd72){if(_0x2cdd72){return _0x2cdd72[_0x12bf('0xda')](_0x5e12da['query']['ids'])[_0x12bf('0x32')](function(){if(_[_0x12bf('0xdb')](_0x5e12da[_0x12bf('0x3d')]['ids'])){for(var _0x136702=0x0;_0x136702<_0x5e12da[_0x12bf('0x3d')][_0x12bf('0x6e')]['length'];_0x136702+=0x1){socket[_0x12bf('0xdc')](_0x12bf('0xdd'),{'UserId':Number(_0x5e12da[_0x12bf('0x3d')][_0x12bf('0x6e')][_0x136702]),'SmsAccountId':Number(_0x5e12da[_0x12bf('0x57')]['id'])});}}else{socket[_0x12bf('0xdc')](_0x12bf('0xdd'),{'UserId':Number(_0x5e12da['query']['ids']),'SmsAccountId':Number(_0x5e12da[_0x12bf('0x57')]['id'])});}});}})[_0x12bf('0x32')](respondWithStatusCode(_0x228c79,null))[_0x12bf('0x55')](handleError(_0x228c79,null));};exports['getAgents']=function(_0x200285,_0x2a622b,_0x111bc9){var _0x5f2a43={};var _0xe2f02c={};var _0x35f55a;var _0x363296;return db[_0x12bf('0x3a')][_0x12bf('0x68')]({'where':{'id':_0x200285[_0x12bf('0x57')]['id']}})[_0x12bf('0x32')](handleEntityNotFound(_0x2a622b,null))['then'](function(_0x1ff069){if(_0x1ff069){_0x35f55a=_0x1ff069;_0xe2f02c[_0x12bf('0x41')]=_['keys'](db[_0x12bf('0xa8')][_0x12bf('0x3b')]);_0xe2f02c[_0x12bf('0x3d')]=_[_0x12bf('0x3c')](_0x200285[_0x12bf('0x3d')]);_0xe2f02c[_0x12bf('0x3e')]=_[_0x12bf('0x3f')](_0xe2f02c[_0x12bf('0x41')],_0xe2f02c['query']);_0x5f2a43[_0x12bf('0x40')]=_[_0x12bf('0x3f')](_0xe2f02c['model'],qs['fields'](_0x200285[_0x12bf('0x3d')][_0x12bf('0x42')]));_0x5f2a43[_0x12bf('0x40')]=_0x5f2a43['attributes'][_0x12bf('0x43')]?_0x5f2a43[_0x12bf('0x40')]:_0xe2f02c[_0x12bf('0x41')];_0x5f2a43[_0x12bf('0x46')]=qs[_0x12bf('0x47')](_0x200285[_0x12bf('0x3d')][_0x12bf('0x47')]);_0x5f2a43[_0x12bf('0x48')]=qs[_0x12bf('0x3e')](_['pick'](_0x200285[_0x12bf('0x3d')],_0xe2f02c[_0x12bf('0x3e')]));if(_0x200285[_0x12bf('0x3d')]['filter']){_0x5f2a43['where']=_['merge'](_0x5f2a43[_0x12bf('0x48')],{'$or':_[_0x12bf('0x4c')](_0x5f2a43[_0x12bf('0x40')],function(_0x93944b){var _0x4f927f={};_0x4f927f[_0x93944b]={'$like':'%'+_0x200285[_0x12bf('0x3d')][_0x12bf('0x4a')]+'%'};return _0x4f927f;})});}_0x5f2a43=_[_0x12bf('0x4b')]({},_0x5f2a43,_0x200285[_0x12bf('0x58')]);return _0x35f55a[_0x12bf('0xde')](_0x5f2a43);}})[_0x12bf('0x32')](function(_0x2bc2e9){if(_0x2bc2e9){_0x363296=_0x2bc2e9['length'];if(!_0x200285[_0x12bf('0x3d')][_0x12bf('0x44')]('nolimit')){_0x5f2a43['limit']=qs[_0x12bf('0x2c')](_0x200285[_0x12bf('0x3d')][_0x12bf('0x2c')]);_0x5f2a43['offset']=qs[_0x12bf('0x2b')](_0x200285[_0x12bf('0x3d')]['offset']);}return _0x35f55a[_0x12bf('0xde')](_0x5f2a43);}})['then'](function(_0x1491fb){if(_0x1491fb){return _0x1491fb?{'count':_0x363296,'rows':_0x1491fb}:null;}})['then'](respondWithResult(_0x2a622b,null))[_0x12bf('0x55')](handleError(_0x2a622b,null));};
\ No newline at end of file
+var _0xfb83=['statusGet','message-id','state','addAgents','omit','emit','userSmsAccount:save','removeAgents','userSmsAccount:remove','getAgents','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','sox','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','redis','defaults','socket.io-emitter','./smsAccount.socket','register','jayson/promise','client','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','then','SmsAccount,\x20%s,\x20%s','debug','SmsAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','result','catch','sendStatus','status','json','count','offset','limit','set','reject','update','destroy','get','SmsAccounts','UserProfileResource','end','name','index','mandatoryDispositionPause','SmsAccount','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','filter','merge','map','type','key','VIRTUAL','field','includeAll','include','findAll','rows','Pause','options','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','params','describe','SmsAccountId','Disposition','getDispositions','findOne','pick','removeDispositions','ids','addAnswer','CannedAnswer','removeAnswers','sms','Applications','account','applications','CmContact','Sequelize','no\x20available\x20attributes','difference','updatedAt','ListId','mobile','twilio','From','Body','messageId','skebby','from','sender','text','connectel','message_id','plivo','Text','MessageUUID','infobip','results','csc','originatingAddress','segmentedMessage','clickatell','fromNumber','replyMessageId','isNil','ValidationError','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','CmList','Contacts','DESC','list','SmsInteraction','spread','interaction','created','autoclose','push','close','*,*,*,*','SmsMessage','ContactId','AttachmentId','UserId','User','agent','Start','startRouting','receiveMessage','entity\x20found','Content-Type','text/xml','send','<?xml\x20version=\x221.0\x22\x20encoding=\x22UTF-8\x22?>\x0a<Response></Response>','addApplications','sequelize','transaction','SmsApplication','bulkCreate','findAndCountAll','priority','getApplications','getInteractions','Contact','Owner','fullname','internal','Tag','Tags','color','tag','to\x20is\x20mandatory','List','out','dataValues','Messages','log','endpoint\x20/status\x20POST\x20/','received\x20delivery\x20report\x20from','inspect','skebby_dispatch_id','requestid','statusInt','clicksend','status_code','groupName','intelepeer','redif','error_code','DELIVERED_TO_GATEWAY','RECEIVED_BY_RECIPIENT','DELIVRD'];(function(_0xc12103,_0x2ab16b){var _0x2d2db6=function(_0x50032a){while(--_0x50032a){_0xc12103['push'](_0xc12103['shift']());}};_0x2d2db6(++_0x2ab16b);}(_0xfb83,0xe9));var _0x3fb8=function(_0x506172,_0xbc3a3){_0x506172=_0x506172-0x0;var _0x2723c0=_0xfb83[_0x506172];return _0x2723c0;};'use strict';var pdf=require(_0x3fb8('0x0'));var emlformat=require(_0x3fb8('0x1'));var rimraf=require(_0x3fb8('0x2'));var zipdir=require(_0x3fb8('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x3fb8('0x4'));var moment=require(_0x3fb8('0x5'));var BPromise=require(_0x3fb8('0x6'));var Mustache=require(_0x3fb8('0x7'));var util=require(_0x3fb8('0x8'));var path=require('path');var sox=require(_0x3fb8('0x9'));var csv=require('to-csv');var ejs=require(_0x3fb8('0xa'));var fs=require('fs');var _=require(_0x3fb8('0xb'));var squel=require(_0x3fb8('0xc'));var crypto=require(_0x3fb8('0xd'));var jsforce=require(_0x3fb8('0xe'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x3fb8('0xf'));var Papa=require(_0x3fb8('0x10'));var Redis=require(_0x3fb8('0x11'));var authService=require(_0x3fb8('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x3fb8('0x13'));var logger=require(_0x3fb8('0x14'))(_0x3fb8('0x15'));var utils=require(_0x3fb8('0x16'));var config=require(_0x3fb8('0x17'));var db=require('../../mysqldb')['db'];config[_0x3fb8('0x18')]=_[_0x3fb8('0x19')](config[_0x3fb8('0x18')],{'host':'localhost','port':0x18eb});var socket=require(_0x3fb8('0x1a'))(new Redis(config[_0x3fb8('0x18')]));require(_0x3fb8('0x1b'))[_0x3fb8('0x1c')](socket);var jayson=require(_0x3fb8('0x1d'));var client=jayson[_0x3fb8('0x1e')]['http']({'port':0x232c});function checkPasswordPattern(_0x59a5e5,_0x3a3baa,_0x1e2371){if(_0x1e2371){var _0x556b88=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x556b88['test'](_0x3a3baa)){return _0x59a5e5;}else{throw new Error(_0x3fb8('0x1f'));}}else{return _0x59a5e5;}}function respondWithRpcPromise(_0x8129a8,_0x3bb9f5,_0x2b57cd,_0x1c06f9){return new BPromise(function(_0x5499a7,_0x438585){var _0xba7b90=_0x1c06f9||client;return _0xba7b90['request'](_0x8129a8,_0x2b57cd)[_0x3fb8('0x20')](function(_0x43003f){logger['info'](_0x3fb8('0x21'),_0x3bb9f5,'request\x20sent');logger[_0x3fb8('0x22')](_0x3fb8('0x23'),_0x3bb9f5,_0x3fb8('0x24'),JSON[_0x3fb8('0x25')](_0x43003f));if(_0x43003f[_0x3fb8('0x26')]){if(_0x43003f[_0x3fb8('0x26')][_0x3fb8('0x27')]===0x1f4){logger[_0x3fb8('0x26')](_0x3fb8('0x21'),_0x3bb9f5,_0x43003f[_0x3fb8('0x26')]['message']);return _0x438585(_0x43003f['error']['message']);}logger[_0x3fb8('0x26')](_0x3fb8('0x21'),_0x3bb9f5,_0x43003f['error']['message']);return _0x5499a7(_0x43003f['error'][_0x3fb8('0x28')]);}else{logger[_0x3fb8('0x29')](_0x3fb8('0x21'),_0x3bb9f5,_0x3fb8('0x24'));_0x5499a7(_0x43003f[_0x3fb8('0x2a')][_0x3fb8('0x28')]);}})[_0x3fb8('0x2b')](function(_0x3f2403){logger[_0x3fb8('0x26')](_0x3fb8('0x21'),_0x3bb9f5,_0x3f2403);_0x438585(_0x3f2403);});});}function respondWithStatusCode(_0x4d1905,_0x2cb9f2){_0x2cb9f2=_0x2cb9f2||0xcc;return function(_0x5b2901){if(_0x5b2901){return _0x4d1905[_0x3fb8('0x2c')](_0x2cb9f2);}return _0x4d1905[_0x3fb8('0x2d')](_0x2cb9f2)['end']();};}function respondWithResult(_0x18eda7,_0x2cd5a8){_0x2cd5a8=_0x2cd5a8||0xc8;return function(_0x336e85){if(_0x336e85){return _0x18eda7['status'](_0x2cd5a8)[_0x3fb8('0x2e')](_0x336e85);}};}function respondWithFilteredResult(_0x480184,_0xbc2875){return function(_0x1fbc36){if(_0x1fbc36){var _0x22b235=_0x1fbc36[_0x3fb8('0x2f')],_0x36dc1c=_0xbc2875[_0x3fb8('0x30')],_0x505511=_0xbc2875[_0x3fb8('0x30')]+_0xbc2875[_0x3fb8('0x31')],_0x2093da;if(_0x505511>=_0x22b235){_0x505511=_0x22b235;_0x2093da=0xc8;}else{_0x2093da=0xce;}_0x480184[_0x3fb8('0x2d')](_0x2093da);return _0x480184[_0x3fb8('0x32')]('Content-Range',_0x36dc1c+'-'+_0x505511+'/'+_0x22b235)[_0x3fb8('0x2e')](_0x1fbc36);}return null;};}function patchUpdates(_0x5743fd){return function(_0x559c44){try{jsonpatch['apply'](_0x559c44,_0x5743fd,!![]);}catch(_0x91ed9b){return BPromise[_0x3fb8('0x33')](_0x91ed9b);}return _0x559c44['save']();};}function saveUpdates(_0x45f3ce,_0x15f3cd){return function(_0x4b894f){if(_0x4b894f){return _0x4b894f[_0x3fb8('0x34')](_0x45f3ce)[_0x3fb8('0x20')](function(_0x40b4a1){return _0x40b4a1;});}return null;};}function removeEntity(_0xcc9972,_0x258727){return function(_0x2403f3){if(_0x2403f3){return _0x2403f3[_0x3fb8('0x35')]()[_0x3fb8('0x20')](function(){var _0x6e8a6d=_0x2403f3[_0x3fb8('0x36')]({'plain':!![]});var _0xf8b054=_0x3fb8('0x37');return db[_0x3fb8('0x38')]['destroy']({'where':{'type':_0xf8b054,'resourceId':_0x6e8a6d['id']}})[_0x3fb8('0x20')](function(){return _0x2403f3;});})['then'](function(){_0xcc9972[_0x3fb8('0x2d')](0xcc)[_0x3fb8('0x39')]();});}};}function handleEntityNotFound(_0x2dde2a,_0x3ab186){return function(_0x378e73){if(!_0x378e73){_0x2dde2a[_0x3fb8('0x2c')](0x194);}return _0x378e73;};}function handleError(_0x598298,_0x47bb2b){_0x47bb2b=_0x47bb2b||0x1f4;return function(_0x2c6776){logger[_0x3fb8('0x26')](_0x2c6776['stack']);if(_0x2c6776[_0x3fb8('0x3a')]){delete _0x2c6776[_0x3fb8('0x3a')];}_0x598298[_0x3fb8('0x2d')](_0x47bb2b)['send'](_0x2c6776);};}exports[_0x3fb8('0x3b')]=function(_0x4bba91,_0x5db3c5){var _0x20566d={'include':[{'model':db['Pause'],'as':_0x3fb8('0x3c')}]},_0x5d162e={},_0x282132={'count':0x0,'rows':[]};var _0x1aec80=db[_0x3fb8('0x3d')][_0x3fb8('0x3e')];_0x5d162e[_0x3fb8('0x3f')]=_[_0x3fb8('0x40')](_0x1aec80);_0x5d162e[_0x3fb8('0x41')]=_[_0x3fb8('0x40')](_0x4bba91[_0x3fb8('0x41')]);_0x5d162e['filters']=_[_0x3fb8('0x42')](_0x5d162e[_0x3fb8('0x3f')],_0x5d162e[_0x3fb8('0x41')]);_0x20566d[_0x3fb8('0x43')]=_[_0x3fb8('0x42')](_0x5d162e[_0x3fb8('0x3f')],qs[_0x3fb8('0x44')](_0x4bba91[_0x3fb8('0x41')]['fields']));_0x20566d[_0x3fb8('0x43')]=_0x20566d[_0x3fb8('0x43')][_0x3fb8('0x45')]?_0x20566d[_0x3fb8('0x43')]:_0x5d162e[_0x3fb8('0x3f')];if(!_0x4bba91[_0x3fb8('0x41')][_0x3fb8('0x46')](_0x3fb8('0x47'))){_0x20566d[_0x3fb8('0x31')]=qs['limit'](_0x4bba91[_0x3fb8('0x41')][_0x3fb8('0x31')]);_0x20566d[_0x3fb8('0x30')]=qs[_0x3fb8('0x30')](_0x4bba91[_0x3fb8('0x41')][_0x3fb8('0x30')]);}_0x20566d[_0x3fb8('0x48')]=qs[_0x3fb8('0x49')](_0x4bba91[_0x3fb8('0x41')]['sort']);_0x20566d[_0x3fb8('0x4a')]=qs[_0x3fb8('0x4b')](_['pick'](_0x4bba91['query'],_0x5d162e[_0x3fb8('0x4b')]));if(_0x4bba91[_0x3fb8('0x41')][_0x3fb8('0x4c')]){_0x20566d[_0x3fb8('0x4a')]=_[_0x3fb8('0x4d')](_0x20566d[_0x3fb8('0x4a')],{'$or':_[_0x3fb8('0x4e')](_0x1aec80,function(_0x12cae5){if(_0x12cae5[_0x3fb8('0x4f')][_0x3fb8('0x50')]!==_0x3fb8('0x51')){var _0x546e8f={};_0x546e8f[_0x12cae5[_0x3fb8('0x52')]]={'$like':'%'+_0x4bba91[_0x3fb8('0x41')][_0x3fb8('0x4c')]+'%'};return _0x546e8f;}})});}_0x20566d=_['merge']({},_0x20566d,_0x4bba91['options']);var _0x31936d={'where':_0x20566d['where']};return db['SmsAccount'][_0x3fb8('0x2f')](_0x31936d)[_0x3fb8('0x20')](function(_0x607ea7){_0x282132[_0x3fb8('0x2f')]=_0x607ea7;if(_0x4bba91[_0x3fb8('0x41')][_0x3fb8('0x53')]){_0x20566d[_0x3fb8('0x54')]=[{'all':!![]}];}return db[_0x3fb8('0x3d')][_0x3fb8('0x55')](_0x20566d);})[_0x3fb8('0x20')](function(_0x4c8bd0){_0x282132[_0x3fb8('0x56')]=_0x4c8bd0;return _0x282132;})[_0x3fb8('0x20')](respondWithFilteredResult(_0x5db3c5,_0x20566d))[_0x3fb8('0x2b')](handleError(_0x5db3c5,null));};exports['show']=function(_0x19d874,_0x585418){var _0x3058ca={'raw':![],'where':{'id':_0x19d874['params']['id']},'include':[{'model':db[_0x3fb8('0x57')],'as':_0x3fb8('0x3c')}]},_0x2cb547={};_0x2cb547['model']=_[_0x3fb8('0x40')](db[_0x3fb8('0x3d')][_0x3fb8('0x3e')]);_0x2cb547[_0x3fb8('0x41')]=_['keys'](_0x19d874[_0x3fb8('0x41')]);_0x2cb547['filters']=_['intersection'](_0x2cb547[_0x3fb8('0x3f')],_0x2cb547[_0x3fb8('0x41')]);_0x3058ca[_0x3fb8('0x43')]=_[_0x3fb8('0x42')](_0x2cb547[_0x3fb8('0x3f')],qs[_0x3fb8('0x44')](_0x19d874['query']['fields']));_0x3058ca['attributes']=_0x3058ca[_0x3fb8('0x43')][_0x3fb8('0x45')]?_0x3058ca['attributes']:_0x2cb547[_0x3fb8('0x3f')];if(_0x19d874['query'][_0x3fb8('0x53')]){_0x3058ca['include']=[{'all':!![]}];}_0x3058ca=_[_0x3fb8('0x4d')]({},_0x3058ca,_0x19d874[_0x3fb8('0x58')]);return db['SmsAccount'][_0x3fb8('0x59')](_0x3058ca)['then'](handleEntityNotFound(_0x585418,null))['then'](respondWithResult(_0x585418,null))[_0x3fb8('0x2b')](handleError(_0x585418,null));};exports[_0x3fb8('0x5a')]=function(_0xc64252,_0xd97228){return db[_0x3fb8('0x3d')][_0x3fb8('0x5a')](_0xc64252[_0x3fb8('0x5b')],{})[_0x3fb8('0x20')](function(_0xb7a22d){var _0x47b73b=_0xc64252[_0x3fb8('0x5c')]['get']({'plain':!![]});if(!_0x47b73b)throw new Error(_0x3fb8('0x5d'));if(_0x47b73b[_0x3fb8('0x5e')]===_0x3fb8('0x5c')){var _0x5dcf31=_0xb7a22d['get']({'plain':!![]});var _0x2752fb='SmsAccounts';return db[_0x3fb8('0x5f')]['find']({'where':{'name':_0x2752fb,'userProfileId':_0x47b73b[_0x3fb8('0x60')]},'raw':!![]})['then'](function(_0x2e11e8){if(_0x2e11e8&&_0x2e11e8[_0x3fb8('0x61')]===0x0){return db[_0x3fb8('0x38')][_0x3fb8('0x5a')]({'name':_0x5dcf31[_0x3fb8('0x3a')],'resourceId':_0x5dcf31['id'],'type':_0x2e11e8[_0x3fb8('0x3a')],'sectionId':_0x2e11e8['id']},{})['then'](function(){return _0xb7a22d;});}else{return _0xb7a22d;}})[_0x3fb8('0x2b')](function(_0x4f76c6){logger[_0x3fb8('0x26')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x4f76c6);throw _0x4f76c6;});}return _0xb7a22d;})['then'](respondWithResult(_0xd97228,0xc9))[_0x3fb8('0x2b')](handleError(_0xd97228,null));};exports[_0x3fb8('0x34')]=function(_0x1b2ae3,_0x1bfe46){if(_0x1b2ae3[_0x3fb8('0x5b')]['id']){delete _0x1b2ae3[_0x3fb8('0x5b')]['id'];}return db['SmsAccount']['find']({'where':{'id':_0x1b2ae3[_0x3fb8('0x62')]['id']},'include':[{'model':db[_0x3fb8('0x57')],'as':_0x3fb8('0x3c')}]})['then'](handleEntityNotFound(_0x1bfe46,null))[_0x3fb8('0x20')](saveUpdates(_0x1b2ae3[_0x3fb8('0x5b')],null))[_0x3fb8('0x20')](respondWithResult(_0x1bfe46,null))[_0x3fb8('0x2b')](handleError(_0x1bfe46,null));};exports[_0x3fb8('0x35')]=function(_0x1363dd,_0x1754b3){return db[_0x3fb8('0x3d')][_0x3fb8('0x59')]({'where':{'id':_0x1363dd[_0x3fb8('0x62')]['id']}})[_0x3fb8('0x20')](handleEntityNotFound(_0x1754b3,null))['then'](removeEntity(_0x1754b3,null))[_0x3fb8('0x2b')](handleError(_0x1754b3,null));};exports[_0x3fb8('0x63')]=function(_0x4fb142,_0xaac140){return db['SmsAccount'][_0x3fb8('0x63')]()['then'](respondWithResult(_0xaac140,null))[_0x3fb8('0x2b')](handleError(_0xaac140,null));};exports['addDisposition']=function(_0x199f21,_0xf44b9a,_0xb87413){if(_0x199f21[_0x3fb8('0x5b')]['id']){delete _0x199f21[_0x3fb8('0x5b')]['id'];}return db[_0x3fb8('0x3d')][_0x3fb8('0x59')]({'where':{'id':_0x199f21[_0x3fb8('0x62')]['id']}})[_0x3fb8('0x20')](handleEntityNotFound(_0xf44b9a,null))[_0x3fb8('0x20')](function(_0x28c8d5){if(_0x28c8d5){_0x199f21[_0x3fb8('0x5b')][_0x3fb8('0x64')]=_0x28c8d5['id'];return db[_0x3fb8('0x65')][_0x3fb8('0x5a')](_0x199f21[_0x3fb8('0x5b')]);}})['then'](respondWithResult(_0xf44b9a,null))[_0x3fb8('0x2b')](handleError(_0xf44b9a,null));};exports[_0x3fb8('0x66')]=function(_0x233114,_0x1ada7b,_0x42dd0d){var _0x557d7c={'raw':![],'where':{}};var _0x3a22f2={};var _0x1b4870={'count':0x0,'rows':[]};return db['SmsAccount'][_0x3fb8('0x67')]({'where':{'id':_0x233114[_0x3fb8('0x62')]['id']}})['then'](handleEntityNotFound(_0x1ada7b,null))['then'](function(_0x1f1c1a){if(_0x1f1c1a){_0x3a22f2[_0x3fb8('0x3f')]=_[_0x3fb8('0x40')](db[_0x3fb8('0x65')][_0x3fb8('0x3e')]);_0x3a22f2['query']=_[_0x3fb8('0x40')](_0x233114[_0x3fb8('0x41')]);_0x3a22f2[_0x3fb8('0x4b')]=_['intersection'](_0x3a22f2[_0x3fb8('0x3f')],_0x3a22f2[_0x3fb8('0x41')]);_0x557d7c[_0x3fb8('0x43')]=_[_0x3fb8('0x42')](_0x3a22f2[_0x3fb8('0x3f')],qs[_0x3fb8('0x44')](_0x233114[_0x3fb8('0x41')]['fields']));_0x557d7c[_0x3fb8('0x43')]=_0x557d7c[_0x3fb8('0x43')][_0x3fb8('0x45')]?_0x557d7c['attributes']:_0x3a22f2[_0x3fb8('0x3f')];if(!_0x233114[_0x3fb8('0x41')][_0x3fb8('0x46')](_0x3fb8('0x47'))){_0x557d7c[_0x3fb8('0x31')]=qs[_0x3fb8('0x31')](_0x233114[_0x3fb8('0x41')]['limit']);_0x557d7c[_0x3fb8('0x30')]=qs[_0x3fb8('0x30')](_0x233114[_0x3fb8('0x41')][_0x3fb8('0x30')]);}_0x557d7c[_0x3fb8('0x48')]=qs[_0x3fb8('0x49')](_0x233114['query'][_0x3fb8('0x49')]);_0x557d7c['where']=qs['filters'](_[_0x3fb8('0x68')](_0x233114[_0x3fb8('0x41')],_0x3a22f2[_0x3fb8('0x4b')]));_0x557d7c[_0x3fb8('0x4a')][_0x3fb8('0x64')]=_0x1f1c1a['id'];if(_0x233114[_0x3fb8('0x41')][_0x3fb8('0x4c')]){_0x557d7c[_0x3fb8('0x4a')]=_[_0x3fb8('0x4d')](_0x557d7c[_0x3fb8('0x4a')],{'$or':_[_0x3fb8('0x4e')](_0x557d7c[_0x3fb8('0x43')],function(_0x24fb4e){var _0x1ace9b={};_0x1ace9b[_0x24fb4e]={'$like':'%'+_0x233114[_0x3fb8('0x41')][_0x3fb8('0x4c')]+'%'};return _0x1ace9b;})});}_0x557d7c=_[_0x3fb8('0x4d')]({},_0x557d7c,_0x233114[_0x3fb8('0x58')]);return db[_0x3fb8('0x65')][_0x3fb8('0x2f')]({'where':_0x557d7c[_0x3fb8('0x4a')]})[_0x3fb8('0x20')](function(_0x373c5c){_0x1b4870[_0x3fb8('0x2f')]=_0x373c5c;if(_0x233114[_0x3fb8('0x41')][_0x3fb8('0x53')]){_0x557d7c[_0x3fb8('0x54')]=[{'all':!![]}];}return db[_0x3fb8('0x65')][_0x3fb8('0x55')](_0x557d7c);})[_0x3fb8('0x20')](function(_0x23a63c){_0x1b4870[_0x3fb8('0x56')]=_0x23a63c;return _0x1b4870;});}})['then'](respondWithFilteredResult(_0x1ada7b,_0x557d7c))[_0x3fb8('0x2b')](handleError(_0x1ada7b,null));};exports[_0x3fb8('0x69')]=function(_0x3b9eec,_0x5a6f36,_0x881d09){return db[_0x3fb8('0x3d')][_0x3fb8('0x59')]({'where':{'id':_0x3b9eec['params']['id']}})[_0x3fb8('0x20')](handleEntityNotFound(_0x5a6f36,null))[_0x3fb8('0x20')](function(_0x30f7f0){if(_0x30f7f0){return _0x30f7f0[_0x3fb8('0x69')](_0x3b9eec[_0x3fb8('0x41')][_0x3fb8('0x6a')]);}})[_0x3fb8('0x20')](respondWithStatusCode(_0x5a6f36,null))[_0x3fb8('0x2b')](handleError(_0x5a6f36,null));};exports[_0x3fb8('0x6b')]=function(_0x4bfdc0,_0x4bf6f1,_0x29bade){if(_0x4bfdc0[_0x3fb8('0x5b')]['id']){delete _0x4bfdc0['body']['id'];}return db['SmsAccount']['find']({'where':{'id':_0x4bfdc0[_0x3fb8('0x62')]['id']}})[_0x3fb8('0x20')](handleEntityNotFound(_0x4bf6f1,null))[_0x3fb8('0x20')](function(_0x466fbd){if(_0x466fbd){_0x4bfdc0[_0x3fb8('0x5b')][_0x3fb8('0x64')]=_0x466fbd['id'];return db[_0x3fb8('0x6c')]['create'](_0x4bfdc0['body']);}})[_0x3fb8('0x20')](respondWithResult(_0x4bf6f1,null))['catch'](handleError(_0x4bf6f1,null));};exports['getAnswers']=function(_0xf578d2,_0x533f90,_0x377eea){var _0x29221b={'raw':![],'where':{}};var _0x30837f={};var _0x550c8d={'count':0x0,'rows':[]};return db[_0x3fb8('0x3d')]['findOne']({'where':{'id':_0xf578d2[_0x3fb8('0x62')]['id']}})[_0x3fb8('0x20')](handleEntityNotFound(_0x533f90,null))[_0x3fb8('0x20')](function(_0xcd4fa0){if(_0xcd4fa0){_0x30837f[_0x3fb8('0x3f')]=_['keys'](db[_0x3fb8('0x6c')][_0x3fb8('0x3e')]);_0x30837f[_0x3fb8('0x41')]=_[_0x3fb8('0x40')](_0xf578d2[_0x3fb8('0x41')]);_0x30837f[_0x3fb8('0x4b')]=_[_0x3fb8('0x42')](_0x30837f[_0x3fb8('0x3f')],_0x30837f[_0x3fb8('0x41')]);_0x29221b[_0x3fb8('0x43')]=_['intersection'](_0x30837f[_0x3fb8('0x3f')],qs['fields'](_0xf578d2[_0x3fb8('0x41')][_0x3fb8('0x44')]));_0x29221b['attributes']=_0x29221b[_0x3fb8('0x43')][_0x3fb8('0x45')]?_0x29221b[_0x3fb8('0x43')]:_0x30837f['model'];if(!_0xf578d2[_0x3fb8('0x41')]['hasOwnProperty'](_0x3fb8('0x47'))){_0x29221b[_0x3fb8('0x31')]=qs[_0x3fb8('0x31')](_0xf578d2[_0x3fb8('0x41')][_0x3fb8('0x31')]);_0x29221b[_0x3fb8('0x30')]=qs[_0x3fb8('0x30')](_0xf578d2['query'][_0x3fb8('0x30')]);}_0x29221b[_0x3fb8('0x48')]=qs['sort'](_0xf578d2[_0x3fb8('0x41')]['sort']);_0x29221b[_0x3fb8('0x4a')]=qs[_0x3fb8('0x4b')](_[_0x3fb8('0x68')](_0xf578d2['query'],_0x30837f[_0x3fb8('0x4b')]));_0x29221b['where'][_0x3fb8('0x64')]=_0xcd4fa0['id'];if(_0xf578d2[_0x3fb8('0x41')]['filter']){_0x29221b[_0x3fb8('0x4a')]=_[_0x3fb8('0x4d')](_0x29221b[_0x3fb8('0x4a')],{'$or':_['map'](_0x29221b[_0x3fb8('0x43')],function(_0x2b8b40){var _0x5a86e5={};_0x5a86e5[_0x2b8b40]={'$like':'%'+_0xf578d2['query']['filter']+'%'};return _0x5a86e5;})});}_0x29221b=_[_0x3fb8('0x4d')]({},_0x29221b,_0xf578d2[_0x3fb8('0x58')]);return db['CannedAnswer']['count']({'where':_0x29221b[_0x3fb8('0x4a')]})[_0x3fb8('0x20')](function(_0x39ba33){_0x550c8d[_0x3fb8('0x2f')]=_0x39ba33;if(_0xf578d2['query'][_0x3fb8('0x53')]){_0x29221b['include']=[{'all':!![]}];}return db[_0x3fb8('0x6c')][_0x3fb8('0x55')](_0x29221b);})[_0x3fb8('0x20')](function(_0x4132c7){_0x550c8d['rows']=_0x4132c7;return _0x550c8d;});}})[_0x3fb8('0x20')](respondWithFilteredResult(_0x533f90,_0x29221b))[_0x3fb8('0x2b')](handleError(_0x533f90,null));};exports['removeAnswers']=function(_0x583610,_0x53005a,_0x2bc845){return db[_0x3fb8('0x3d')][_0x3fb8('0x59')]({'where':{'id':_0x583610[_0x3fb8('0x62')]['id']}})['then'](handleEntityNotFound(_0x53005a,null))[_0x3fb8('0x20')](function(_0x174b2a){if(_0x174b2a){return _0x174b2a[_0x3fb8('0x6d')](_0x583610[_0x3fb8('0x41')][_0x3fb8('0x6a')]);}})['then'](respondWithStatusCode(_0x53005a,null))[_0x3fb8('0x2b')](handleError(_0x53005a,null));};exports['notify']=function(_0x536494,_0x58367e,_0x55df38){var _0x575d59={'channel':_0x3fb8('0x6e')};var _0x3c55f1=[];var _0x349e70=[];var _0x2524c8={};return db[_0x3fb8('0x3d')][_0x3fb8('0x59')]({'where':{'id':_0x536494[_0x3fb8('0x62')]['id']},'include':[{'model':db['SmsApplication'],'as':_0x3fb8('0x6f')}]})[_0x3fb8('0x20')](handleEntityNotFound(_0x58367e,null))['then'](function(_0x44f063){_0x575d59[_0x3fb8('0x70')]=_0x44f063;_0x575d59[_0x3fb8('0x71')]=_['orderBy'](_0x44f063['Applications'],['priority'],['asc']);if(_0x575d59['account'][_0x3fb8('0x6f')]){delete _0x575d59[_0x3fb8('0x70')]['Applications'];}return db[_0x3fb8('0x72')][_0x3fb8('0x63')]();})[_0x3fb8('0x20')](function(_0x507496){if(!_0x507496){throw new db[(_0x3fb8('0x73'))]['ValidationError'](_0x3fb8('0x74'));}_0x3c55f1=_[_0x3fb8('0x75')](_[_0x3fb8('0x40')](_0x507496),['createdAt',_0x3fb8('0x76')]);_0x349e70=_[_0x3fb8('0x75')](_[_0x3fb8('0x40')](_0x507496),['createdAt','updatedAt','CompanyId',_0x3fb8('0x77')]);_0x575d59['body']={'mapKey':_0x3fb8('0x78')};if(_0x575d59['account'][_0x3fb8('0x4f')]){switch(_0x575d59[_0x3fb8('0x70')]['type']){case _0x3fb8('0x79'):_0x575d59[_0x3fb8('0x5b')]['from']=_0x536494['body'][_0x3fb8('0x7a')];_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x5b')]=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x7b')];_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7c')]=_0x536494[_0x3fb8('0x5b')]['MessageSid'];break;case _0x3fb8('0x7d'):_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7e')]='+'+_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x7f')];_0x575d59['body'][_0x3fb8('0x5b')]=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x80')];break;case _0x3fb8('0x81'):_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7e')]=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x7e')];_0x575d59[_0x3fb8('0x5b')]['body']=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x28')];break;case'clicksend':_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7e')]=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x7e')];_0x575d59[_0x3fb8('0x5b')]['body']=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x5b')];_0x575d59[_0x3fb8('0x5b')]['messageId']=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x82')];break;case _0x3fb8('0x83'):_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7e')]=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x7a')];_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x5b')]=_0x536494['body'][_0x3fb8('0x84')];_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7c')]=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x85')];break;case _0x3fb8('0x86'):_0x575d59[_0x3fb8('0x5b')]['from']='+'+_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x87')][0x0]['from'];_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x5b')]=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x87')][0x0][_0x3fb8('0x80')];_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7c')]=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x87')][0x0]['messageId'];break;case _0x3fb8('0x88'):_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7e')]=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x89')];_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x5b')]=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x8a')][_0x3fb8('0x28')];break;case _0x3fb8('0x8b'):_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7e')]=_0x536494['body'][_0x3fb8('0x8c')];_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x5b')]=_0x536494[_0x3fb8('0x5b')]['text'];_0x575d59['body'][_0x3fb8('0x7c')]=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x8d')];break;case'intelepeer':_0x575d59['body'][_0x3fb8('0x7e')]=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x7e')];_0x575d59['body'][_0x3fb8('0x5b')]=_0x536494[_0x3fb8('0x5b')][_0x3fb8('0x28')];_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7c')]=_0x536494[_0x3fb8('0x5b')]['refid'];break;}}if(_0x575d59[_0x3fb8('0x5b')]['id']){delete _0x575d59[_0x3fb8('0x5b')]['id'];}if(_[_0x3fb8('0x8e')](_0x575d59[_0x3fb8('0x5b')]['from'])){throw new db[(_0x3fb8('0x73'))][(_0x3fb8('0x8f'))]('from\x20is\x20mandatory');}if(_[_0x3fb8('0x8e')](_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x5b')])||_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x5b')]===''){throw new db[(_0x3fb8('0x73'))]['ValidationError'](_0x3fb8('0x90'));}if(_[_0x3fb8('0x8e')](_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x91')])){throw new db[(_0x3fb8('0x73'))][(_0x3fb8('0x8f'))](_0x3fb8('0x92')+_0x349e70);}if(!_[_0x3fb8('0x93')](_0x349e70,_0x575d59['body'][_0x3fb8('0x91')])){throw new db[(_0x3fb8('0x73'))][(_0x3fb8('0x8f'))](_0x3fb8('0x94')+_0x349e70);}_0x2524c8[_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x91')]]=_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7e')];return db[_0x3fb8('0x95')][_0x3fb8('0x59')]({'where':{'id':_0x575d59[_0x3fb8('0x70')][_0x3fb8('0x77')]},'include':[{'model':db[_0x3fb8('0x72')],'as':_0x3fb8('0x96'),'where':_0x2524c8,'limit':0x1,'order':[[_0x3fb8('0x76'),_0x3fb8('0x97')]]}]});})[_0x3fb8('0x20')](handleEntityNotFound(_0x58367e,null))['then'](function(_0x37525b){if(_0x37525b){_0x575d59[_0x3fb8('0x98')]=_['omit'](_0x37525b,[_0x3fb8('0x96')]);if(_0x37525b[_0x3fb8('0x96')][_0x3fb8('0x45')]){return _0x37525b[_0x3fb8('0x96')][0x0];}var _0x27503b=_[_0x3fb8('0x19')](_0x575d59[_0x3fb8('0x5b')],{'firstName':_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7e')],'ListId':_0x37525b['id']});_0x27503b[_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x91')]]=_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7e')];return db[_0x3fb8('0x72')][_0x3fb8('0x5a')](_0x27503b,{'fields':_0x3c55f1,'raw':!![]});}})[_0x3fb8('0x20')](handleEntityNotFound(_0x58367e,null))['then'](function(_0x59c979){if(_0x59c979){_0x575d59['contact']=_0x59c979;var _0x581140={'ContactId':_0x59c979['id'],'phone':_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7e')],'SmsAccountId':_0x536494[_0x3fb8('0x62')]['id']};var _0x297b49={'ContactId':_0x59c979['id'],'SmsAccountId':_0x536494['params']['id'],'closed':![]};return db[_0x3fb8('0x99')][_0x3fb8('0x59')]({'where':_0x297b49})[_0x3fb8('0x20')](function(_0x732bd8){if(_0x732bd8){return[_0x732bd8,![]];}return db[_0x3fb8('0x99')][_0x3fb8('0x5a')](_0x581140)[_0x3fb8('0x20')](function(_0x5a8f22){return[_0x5a8f22,!![]];});});}})[_0x3fb8('0x9a')](function(_0x5270c8,_0x14457d){_0x575d59[_0x3fb8('0x9b')]=_0x5270c8['get']({'plain':!![]});_0x575d59[_0x3fb8('0x9b')][_0x3fb8('0x9c')]=![];if(_0x14457d){if(_0x575d59[_0x3fb8('0x70')][_0x3fb8('0x9d')]){_0x575d59[_0x3fb8('0x71')][_0x3fb8('0x9e')]({'id':0x0,'priority':_0x575d59[_0x3fb8('0x71')][_0x3fb8('0x45')]+0x1,'app':_0x3fb8('0x9f'),'appdata':'unmanaged','interval':_0x3fb8('0xa0')});}_0x575d59[_0x3fb8('0x9b')][_0x3fb8('0x9c')]=!![];}return db[_0x3fb8('0xa1')][_0x3fb8('0x5a')]({'phone':_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0x7e')],'messageId':_0x575d59[_0x3fb8('0x5b')]['messageId'],'body':_0x575d59['body'][_0x3fb8('0x5b')],'SmsAccountId':_0x536494['params']['id'],'SmsInteractionId':_0x5270c8['id'],'direction':'in','ContactId':_0x5270c8[_0x3fb8('0xa2')],'AttachmentId':_0x575d59[_0x3fb8('0x5b')][_0x3fb8('0xa3')]});})['then'](function(_0x4c0baf){_0x575d59[_0x3fb8('0x28')]=_0x4c0baf;if(_0x575d59['interaction'][_0x3fb8('0xa4')]){return db[_0x3fb8('0xa5')][_0x3fb8('0x59')]({'attributes':['id','name'],'where':{'id':_0x575d59[_0x3fb8('0x9b')][_0x3fb8('0xa4')]}})[_0x3fb8('0x20')](function(_0x1980bb){if(_0x1980bb){_0x575d59['applications']['unshift']({'id':0x0,'priority':0x0,'app':_0x3fb8('0xa6'),'appdata':_0x1980bb['name']+','+(_0x575d59[_0x3fb8('0x70')]['waitForTheAssignedAgent']||0xa),'interval':'*,*,*,*'});}return respondWithRpcPromise(_0x3fb8('0xa7'),_0x3fb8('0xa8'),_0x575d59);});}return respondWithRpcPromise(_0x3fb8('0xa7'),_0x3fb8('0xa8'),_0x575d59);})[_0x3fb8('0x20')](function(_0x1ed648){if(_0x1ed648){var _0x237f71=0xc8;var _0x22c988=_0x3fb8('0xa9');logger[_0x3fb8('0x29')](_0x3fb8('0x23'),_0x22c988,_0x237f71,_0x3fb8('0xaa'));logger['debug']('SmsAccount,\x20%s,\x20%s,\x20%s,\x20%s',_0x22c988,_0x237f71,_0x3fb8('0xaa'),JSON[_0x3fb8('0x25')](_0x1ed648));if(_0x575d59[_0x3fb8('0x70')][_0x3fb8('0x4f')]===_0x3fb8('0x79')){return _0x58367e['status'](_0x237f71)[_0x3fb8('0x32')](_0x3fb8('0xab'),_0x3fb8('0xac'))[_0x3fb8('0xad')](_0x3fb8('0xae'));}else{return _0x58367e['status'](_0x237f71)[_0x3fb8('0x2e')](_0x1ed648);}}})['catch'](handleError(_0x58367e,null));};exports[_0x3fb8('0xaf')]=function(_0x4e3e96,_0x260aa0,_0x4c3b91){return db[_0x3fb8('0x3d')]['findOne']({'where':{'id':_0x4e3e96[_0x3fb8('0x62')]['id']}})[_0x3fb8('0x20')](handleEntityNotFound(_0x260aa0,null))[_0x3fb8('0x20')](function(_0x1a72d6){if(_0x1a72d6){return db[_0x3fb8('0xb0')][_0x3fb8('0xb1')](function(_0x3a8a96){return db[_0x3fb8('0xb2')][_0x3fb8('0x35')]({'where':{'SmsAccountId':_0x4e3e96[_0x3fb8('0x62')]['id']},'transaction':_0x3a8a96})[_0x3fb8('0x20')](function(_0x13ce76){var _0x2cf14f=_[_0x3fb8('0x4e')](_0x4e3e96['body'],function(_0x4101b1){_0x4101b1[_0x3fb8('0x64')]=_0x4e3e96['params']['id'];return _0x4101b1;});return db['SmsApplication'][_0x3fb8('0xb3')](_0x2cf14f,{'transaction':_0x3a8a96});});})['then'](function(){return db[_0x3fb8('0xb2')][_0x3fb8('0xb4')]({'where':{'SmsAccountId':_0x4e3e96[_0x3fb8('0x62')]['id']},'order':_0x3fb8('0xb5')});});}})[_0x3fb8('0x20')](respondWithResult(_0x260aa0,null))['catch'](handleError(_0x260aa0,null));};exports['getApplications']=function(_0x5ba202,_0x467227,_0x16110a){var _0x31c7de={};var _0x2b5b73={};var _0x36b1f9;var _0x583b61;return db[_0x3fb8('0x3d')][_0x3fb8('0x67')]({'where':{'id':_0x5ba202[_0x3fb8('0x62')]['id']}})[_0x3fb8('0x20')](handleEntityNotFound(_0x467227,null))[_0x3fb8('0x20')](function(_0x1abe30){if(_0x1abe30){_0x36b1f9=_0x1abe30;_0x2b5b73[_0x3fb8('0x3f')]=_[_0x3fb8('0x40')](db[_0x3fb8('0xb2')]['rawAttributes']);_0x2b5b73[_0x3fb8('0x41')]=_['keys'](_0x5ba202['query']);_0x2b5b73['filters']=_[_0x3fb8('0x42')](_0x2b5b73['model'],_0x2b5b73['query']);_0x31c7de[_0x3fb8('0x43')]=_[_0x3fb8('0x42')](_0x2b5b73[_0x3fb8('0x3f')],qs['fields'](_0x5ba202[_0x3fb8('0x41')][_0x3fb8('0x44')]));_0x31c7de[_0x3fb8('0x43')]=_0x31c7de[_0x3fb8('0x43')][_0x3fb8('0x45')]?_0x31c7de[_0x3fb8('0x43')]:_0x2b5b73[_0x3fb8('0x3f')];_0x31c7de[_0x3fb8('0x48')]=qs[_0x3fb8('0x49')](_0x5ba202['query'][_0x3fb8('0x49')]);_0x31c7de[_0x3fb8('0x4a')]=qs['filters'](_[_0x3fb8('0x68')](_0x5ba202[_0x3fb8('0x41')],_0x2b5b73[_0x3fb8('0x4b')]));if(_0x5ba202[_0x3fb8('0x41')][_0x3fb8('0x4c')]){_0x31c7de[_0x3fb8('0x4a')]=_[_0x3fb8('0x4d')](_0x31c7de[_0x3fb8('0x4a')],{'$or':_[_0x3fb8('0x4e')](_0x31c7de[_0x3fb8('0x43')],function(_0x19087b){var _0x5774e5={};_0x5774e5[_0x19087b]={'$like':'%'+_0x5ba202[_0x3fb8('0x41')]['filter']+'%'};return _0x5774e5;})});}_0x31c7de=_[_0x3fb8('0x4d')]({},_0x31c7de,_0x5ba202[_0x3fb8('0x58')]);return _0x36b1f9[_0x3fb8('0xb6')](_0x31c7de);}})[_0x3fb8('0x20')](function(_0x421059){if(_0x421059){_0x583b61=_0x421059[_0x3fb8('0x45')];if(!_0x5ba202[_0x3fb8('0x41')][_0x3fb8('0x46')](_0x3fb8('0x47'))){_0x31c7de[_0x3fb8('0x31')]=qs[_0x3fb8('0x31')](_0x5ba202[_0x3fb8('0x41')][_0x3fb8('0x31')]);_0x31c7de[_0x3fb8('0x30')]=qs['offset'](_0x5ba202['query'][_0x3fb8('0x30')]);}return _0x36b1f9[_0x3fb8('0xb6')](_0x31c7de);}})[_0x3fb8('0x20')](function(_0x45da84){if(_0x45da84){return _0x45da84?{'count':_0x583b61,'rows':_0x45da84}:null;}})[_0x3fb8('0x20')](respondWithResult(_0x467227,null))[_0x3fb8('0x2b')](handleError(_0x467227,null));};exports[_0x3fb8('0xb7')]=function(_0x1975e9,_0x38f124,_0x4785b0){var _0x338195={'raw':![],'where':{}};var _0x3a809b={};var _0x45a9d4={'count':0x0,'rows':[]};return db[_0x3fb8('0x3d')][_0x3fb8('0x67')]({'where':{'id':_0x1975e9[_0x3fb8('0x62')]['id']}})[_0x3fb8('0x20')](handleEntityNotFound(_0x38f124,null))['then'](function(_0x3a39b1){if(_0x3a39b1){_0x3a809b[_0x3fb8('0x3f')]=_[_0x3fb8('0x40')](db['SmsInteraction'][_0x3fb8('0x3e')]);_0x3a809b[_0x3fb8('0x41')]=_[_0x3fb8('0x40')](_0x1975e9[_0x3fb8('0x41')]);_0x3a809b['filters']=_[_0x3fb8('0x42')](_0x3a809b[_0x3fb8('0x3f')],_0x3a809b[_0x3fb8('0x41')]);_0x338195['attributes']=_[_0x3fb8('0x42')](_0x3a809b['model'],qs[_0x3fb8('0x44')](_0x1975e9[_0x3fb8('0x41')]['fields']));_0x338195[_0x3fb8('0x43')]=_0x338195[_0x3fb8('0x43')][_0x3fb8('0x45')]?_0x338195[_0x3fb8('0x43')]:_0x3a809b[_0x3fb8('0x3f')];if(!_0x1975e9[_0x3fb8('0x41')]['hasOwnProperty']('nolimit')){_0x338195[_0x3fb8('0x31')]=qs['limit'](_0x1975e9[_0x3fb8('0x41')][_0x3fb8('0x31')]);_0x338195[_0x3fb8('0x30')]=qs[_0x3fb8('0x30')](_0x1975e9[_0x3fb8('0x41')][_0x3fb8('0x30')]);}_0x338195[_0x3fb8('0x48')]=qs[_0x3fb8('0x49')](_0x1975e9[_0x3fb8('0x41')][_0x3fb8('0x49')]);_0x338195[_0x3fb8('0x4a')]=qs['filters'](_['pick'](_0x1975e9[_0x3fb8('0x41')],_0x3a809b[_0x3fb8('0x4b')]));_0x338195['where'][_0x3fb8('0x64')]=_0x3a39b1['id'];if(_0x1975e9[_0x3fb8('0x41')][_0x3fb8('0x4c')]){_0x338195[_0x3fb8('0x4a')]=_[_0x3fb8('0x4d')](_0x338195[_0x3fb8('0x4a')],{'$or':_['map'](_0x338195[_0x3fb8('0x43')],function(_0x398d29){var _0x15cd51={};_0x15cd51[_0x398d29]={'$like':'%'+_0x1975e9[_0x3fb8('0x41')][_0x3fb8('0x4c')]+'%'};return _0x15cd51;})});}_0x338195=_['merge']({},_0x338195,_0x1975e9[_0x3fb8('0x58')]);return db[_0x3fb8('0x99')]['count']({'where':_0x338195[_0x3fb8('0x4a')]})['then'](function(_0x5d4776){_0x45a9d4['count']=_0x5d4776;if(_0x1975e9[_0x3fb8('0x41')]['includeAll']){_0x338195[_0x3fb8('0x54')]=[{'model':db[_0x3fb8('0x72')],'as':_0x3fb8('0xb8'),'required':![]},{'model':db[_0x3fb8('0xa5')],'as':_0x3fb8('0xb9'),'attributes':['name',_0x3fb8('0xba'),_0x3fb8('0xbb')],'required':![]},{'model':db[_0x3fb8('0xbc')],'as':_0x3fb8('0xbd'),'attributes':['id',_0x3fb8('0x3a'),_0x3fb8('0xbe')],'where':_0x1975e9[_0x3fb8('0x41')][_0x3fb8('0xbf')]?{'id':_0x1975e9['query']['tag']}:undefined,'required':_0x1975e9['query'][_0x3fb8('0xbf')]?!![]:![]}];}return db['SmsInteraction'][_0x3fb8('0x55')](_0x338195);})[_0x3fb8('0x20')](function(_0xefb2b3){_0x45a9d4[_0x3fb8('0x56')]=_0xefb2b3;return _0x45a9d4;});}})['then'](respondWithFilteredResult(_0x38f124,_0x338195))[_0x3fb8('0x2b')](handleError(_0x38f124,null));};exports['send']=function(_0x4181ed,_0x365825,_0x516b3c){var _0x232cc4,_0x242643,_0xa6e748;if(_[_0x3fb8('0x8e')](_0x4181ed['body'][_0x3fb8('0x5b')])||_0x4181ed[_0x3fb8('0x5b')]['body']===''){throw new db['Sequelize']['ValidationError'](_0x3fb8('0x90'));}if(_['isNil'](_0x4181ed[_0x3fb8('0x5b')]['to'])){throw new db['Sequelize'][(_0x3fb8('0x8f'))](_0x3fb8('0xc0'));}_0x232cc4=_0x4181ed['body']['to'];return db[_0x3fb8('0x3d')][_0x3fb8('0x59')]({'where':{'id':_0x4181ed[_0x3fb8('0x62')]['id']},'include':[{'model':db[_0x3fb8('0x95')],'as':_0x3fb8('0xc1'),'include':[{'model':db[_0x3fb8('0x72')],'as':_0x3fb8('0x96'),'where':{'mobile':_0x232cc4},'limit':0x1,'order':[[_0x3fb8('0x76'),'DESC']]}]}]})[_0x3fb8('0x20')](handleEntityNotFound(_0x365825,null))[_0x3fb8('0x20')](function(_0x9773de){if(_0x9773de&&_0x9773de[_0x3fb8('0xc1')]){_0x242643=_0x9773de[_0x3fb8('0x36')]({'plain':!![]});if(_0x242643[_0x3fb8('0xc1')]&&_0x242643[_0x3fb8('0xc1')][_0x3fb8('0x96')][_0x3fb8('0x45')]){return _0x242643['List']['Contacts'][0x0];}return db[_0x3fb8('0x72')][_0x3fb8('0x5a')](_[_0x3fb8('0x19')](_0x4181ed[_0x3fb8('0x5b')],{'firstName':_0x232cc4,'mobile':_0x232cc4,'phone':_0x232cc4,'ListId':_0x242643['ListId']}));}})[_0x3fb8('0x20')](handleEntityNotFound(_0x365825,null))[_0x3fb8('0x20')](function(_0x2c3dbf){if(_0x2c3dbf){_0xa6e748=_0x2c3dbf;return db[_0x3fb8('0x99')][_0x3fb8('0x59')]({'where':{'ContactId':_0xa6e748['id'],'closed':![],'SmsAccountId':_0x242643['id']}})[_0x3fb8('0x20')](function(_0x7712f2){if(_0x7712f2){return[_0x7712f2,![]];}return db[_0x3fb8('0x99')][_0x3fb8('0x5a')]({'UserId':_0x4181ed[_0x3fb8('0x5c')]['id'],'ContactId':_0xa6e748['id'],'SmsAccountId':_0x242643['id'],'phone':_0x232cc4,'firstMsgDirection':_0x3fb8('0xc2'),'Messages':[_[_0x3fb8('0x4d')](_0x4181ed[_0x3fb8('0x5b')],{'read':![],'body':_0x4181ed[_0x3fb8('0x5b')]['body'],'phone':_0x232cc4,'SmsAccountId':_0x242643['id'],'UserId':_0x4181ed['user']['id'],'ContactId':_0xa6e748['id']})]},{'include':[{'model':db[_0x3fb8('0xa1')],'as':'Messages'}]})['then'](function(_0x37a358){return[_0x37a358,!![]];});});}})[_0x3fb8('0x9a')](function(_0x4eded2,_0x19cc75){if(_0x19cc75){return _0x4eded2;}return db[_0x3fb8('0xa1')][_0x3fb8('0x5a')](_['merge'](_0x4181ed['body'],{'read':![],'body':_0x4181ed[_0x3fb8('0x5b')][_0x3fb8('0x5b')],'phone':_0x232cc4,'SmsAccountId':_0x242643['id'],'SmsInteractionId':_0x4eded2['id'],'UserId':_0x4181ed[_0x3fb8('0x5c')]['id'],'ContactId':_0xa6e748['id']}))['then'](function(_0x356d6e){_0x4eded2[_0x3fb8('0xc3')][_0x3fb8('0xc4')]=[];_0x4eded2[_0x3fb8('0xc3')][_0x3fb8('0xc4')][_0x3fb8('0x9e')](_0x356d6e[_0x3fb8('0xc3')]);return _0x4eded2;});})['then'](respondWithResult(_0x365825,null))[_0x3fb8('0x2b')](handleError(_0x365825,null));};exports[_0x3fb8('0x2d')]=function(_0x363a76,_0x39c6df,_0x515ca5){if(_0x363a76['body']['id']){delete _0x363a76['body']['id'];}console[_0x3fb8('0xc5')](_0x3fb8('0xc6'),_0x363a76[_0x3fb8('0x5b')]);var _0x53a508,_0x14775d,_0x2fa748;return db[_0x3fb8('0x3d')]['find']({'where':{'id':_0x363a76[_0x3fb8('0x62')]['id']}})[_0x3fb8('0x20')](handleEntityNotFound(_0x39c6df,null))[_0x3fb8('0x20')](function(_0x375fe2){if(_0x375fe2){_0x2fa748=_0x375fe2;logger[_0x3fb8('0x22')](_0x3fb8('0x23'),_0x3fb8('0x2d'),_0x3fb8('0xc7'),_0x375fe2['type'],util[_0x3fb8('0xc8')](_0x363a76[_0x3fb8('0x5b')],{'showHidden':![],'depth':null}));switch(_0x375fe2['type']){case _0x3fb8('0x7d'):if(_0x363a76[_0x3fb8('0x5b')][_0x3fb8('0xc9')]&&_0x363a76[_0x3fb8('0x5b')][_0x3fb8('0x2d')]){_0x14775d=_0x363a76[_0x3fb8('0x5b')][_0x3fb8('0x2d')];return db[_0x3fb8('0xa1')][_0x3fb8('0x59')]({'where':{'messageId':_0x363a76[_0x3fb8('0x5b')]['skebby_dispatch_id']}});}break;case _0x3fb8('0x81'):if(_0x363a76[_0x3fb8('0x5b')][_0x3fb8('0xca')]&&_0x363a76[_0x3fb8('0x5b')][_0x3fb8('0xcb')]){_0x14775d=_0x363a76['body']['statusInt'];return db[_0x3fb8('0xa1')]['find']({'where':{'messageId':_0x363a76[_0x3fb8('0x5b')]['requestid']}});}break;case _0x3fb8('0xcc'):if(_0x363a76[_0x3fb8('0x5b')][_0x3fb8('0x82')]&&_0x363a76['body'][_0x3fb8('0xcd')]){_0x14775d=_0x363a76['body'][_0x3fb8('0xcd')];return db['SmsMessage'][_0x3fb8('0x59')]({'where':{'messageId':_0x363a76[_0x3fb8('0x5b')]['message_id']}});}break;case _0x3fb8('0x86'):var _0x3c1b0e=_0x363a76[_0x3fb8('0x5b')][_0x3fb8('0x87')][0x0];if(_0x3c1b0e[_0x3fb8('0x7c')]&&_0x3c1b0e[_0x3fb8('0x2d')][_0x3fb8('0xce')]==='DELIVERED'){_0x14775d=_0x3c1b0e[_0x3fb8('0x2d')][_0x3fb8('0xce')];return db[_0x3fb8('0xa1')][_0x3fb8('0x59')]({'where':{'messageId':_0x3c1b0e[_0x3fb8('0x7c')]}});}break;case _0x3fb8('0x8b'):if(_0x363a76['body'][_0x3fb8('0x7c')]&&_0x363a76[_0x3fb8('0x5b')][_0x3fb8('0x2d')]){_0x14775d=_0x363a76[_0x3fb8('0x5b')][_0x3fb8('0x2d')];return db[_0x3fb8('0xa1')][_0x3fb8('0x59')]({'where':{'messageId':_0x363a76[_0x3fb8('0x5b')][_0x3fb8('0x7c')]}});}break;case _0x3fb8('0xcf'):if(_0x363a76['body']['redif']&&_0x363a76['body'][_0x3fb8('0x2d')]){_0x14775d=_0x363a76[_0x3fb8('0x5b')]['status'];return db[_0x3fb8('0xa1')][_0x3fb8('0x59')]({'where':{'messageId':_0x363a76['body'][_0x3fb8('0xd0')]}});}break;}}})[_0x3fb8('0x20')](handleEntityNotFound(_0x39c6df,null))[_0x3fb8('0x20')](function(_0x3a2583){if(_0x3a2583){_0x53a508=_0x3a2583;switch(_0x2fa748[_0x3fb8('0x4f')]){case _0x3fb8('0x7d'):if(_0x14775d==='DELIVERED'){return _0x53a508[_0x3fb8('0x34')]({'read':!![]});}else{logger[_0x3fb8('0x26')](_0x3fb8('0x23'),_0x3fb8('0x2d'),_0x3fb8('0x7d'),util['inspect'](_0x363a76['body'],{'showHidden':![],'depth':null}));}break;case'connectel':if(_0x14775d==='1'){return _0x53a508[_0x3fb8('0x34')]({'read':!![]});}else{logger['error']('SmsAccount,\x20%s,\x20%s,\x20%s',_0x3fb8('0x2d'),_0x3fb8('0x7d'),util[_0x3fb8('0xc8')](_0x363a76[_0x3fb8('0x5b')],{'showHidden':![],'depth':null}));}break;case _0x3fb8('0xcc'):if(!_0x363a76[_0x3fb8('0x5b')][_0x3fb8('0xd1')]&&_0x14775d>=0xc8&&_0x14775d<=0xce){return _0x53a508['update']({'read':!![]});}else{logger['error'](_0x3fb8('0x23'),_0x3fb8('0x2d'),_0x3fb8('0xcc'),util[_0x3fb8('0xc8')](_0x363a76[_0x3fb8('0x5b')],{'showHidden':![],'depth':null}));}break;case'infobip':var _0x4e354e=_0x363a76[_0x3fb8('0x5b')][_0x3fb8('0x87')][0x0];if(_0x4e354e[_0x3fb8('0x2d')]['groupName']==='DELIVERED'){return _0x53a508[_0x3fb8('0x34')]({'read':!![]});}else{logger[_0x3fb8('0x26')](_0x3fb8('0x23'),_0x3fb8('0x2d'),_0x3fb8('0x86'),util[_0x3fb8('0xc8')](_0x363a76[_0x3fb8('0x5b')],{'showHidden':![],'depth':null}));}break;case _0x3fb8('0x8b'):if(_0x14775d==_0x3fb8('0xd2')||_0x14775d==_0x3fb8('0xd3')){return _0x53a508[_0x3fb8('0x34')]({'read':!![]});}else{logger[_0x3fb8('0x26')](_0x3fb8('0x23'),_0x3fb8('0x2d'),_0x3fb8('0x8b'),util[_0x3fb8('0xc8')](_0x363a76[_0x3fb8('0x5b')],{'showHidden':![],'depth':null}));}break;case _0x3fb8('0xcf'):if(_0x14775d===_0x3fb8('0xd4')||_0x14775d==='ACCEPTD'){return _0x53a508[_0x3fb8('0x34')]({'read':!![]});}else{logger[_0x3fb8('0x26')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0x3fb8('0x2d'),'intelepeer',util[_0x3fb8('0xc8')](_0x363a76['body'],{'showHidden':![],'depth':null}));}break;}return _0x53a508;}})[_0x3fb8('0x20')](respondWithResult(_0x39c6df,null))[_0x3fb8('0x2b')](handleError(_0x39c6df,null));};exports[_0x3fb8('0xd5')]=function(_0x3e2216,_0x2f1d7e,_0x1d18da){var _0x5d4445,_0x10d11b,_0x31f369;return db[_0x3fb8('0x3d')]['find']({'where':{'id':_0x3e2216[_0x3fb8('0x62')]['id']}})[_0x3fb8('0x20')](handleEntityNotFound(_0x2f1d7e,null))['then'](function(_0x5b9445){if(_0x5b9445){_0x31f369=_0x5b9445;logger[_0x3fb8('0x22')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0x3fb8('0x2d'),'received\x20delivery\x20report\x20from',_0x5b9445[_0x3fb8('0x4f')],util[_0x3fb8('0xc8')](_0x3e2216[_0x3fb8('0x41')],{'showHidden':![],'depth':null}));switch(_0x5b9445[_0x3fb8('0x4f')]){case _0x3fb8('0x88'):if(_0x3e2216[_0x3fb8('0x41')][_0x3fb8('0xd6')]&&_0x3e2216[_0x3fb8('0x41')][_0x3fb8('0xd7')]){_0x10d11b=_0x3e2216[_0x3fb8('0x41')][_0x3fb8('0xd7')];return db['SmsMessage'][_0x3fb8('0x59')]({'where':{'messageId':_0x3e2216[_0x3fb8('0x41')][_0x3fb8('0xd6')]}});}break;}}})[_0x3fb8('0x20')](handleEntityNotFound(_0x2f1d7e,null))['then'](function(_0x119985){if(_0x119985){_0x5d4445=_0x119985;switch(_0x31f369[_0x3fb8('0x4f')]){case _0x3fb8('0x88'):if(_0x10d11b==='2'||_0x10d11b==='6'){return _0x5d4445[_0x3fb8('0x34')]({'read':!![]});}else{logger[_0x3fb8('0x26')](_0x3fb8('0x23'),'status','csc',util[_0x3fb8('0xc8')](_0x3e2216['query'],{'showHidden':![],'depth':null}));};break;}return _0x5d4445;}})[_0x3fb8('0x20')](respondWithResult(_0x2f1d7e,null))['catch'](handleError(_0x2f1d7e,null));};exports[_0x3fb8('0xd8')]=function(_0x4b9742,_0x4d3f4d,_0x449a8c){return db[_0x3fb8('0x3d')]['find']({'where':{'id':_0x4b9742['params']['id']}})[_0x3fb8('0x20')](handleEntityNotFound(_0x4d3f4d,null))[_0x3fb8('0x20')](function(_0x5cfb0f){if(_0x5cfb0f){return _0x5cfb0f['addAgents'](_0x4b9742['body']['ids'],_[_0x3fb8('0xd9')](_0x4b9742['body'],[_0x3fb8('0x6a'),'id'])||{})[_0x3fb8('0x9a')](function(_0x787906){for(var _0xfdc05d=0x0;_0xfdc05d<_0x4b9742[_0x3fb8('0x5b')]['ids']['length'];_0xfdc05d+=0x1){socket[_0x3fb8('0xda')](_0x3fb8('0xdb'),{'UserId':_0x4b9742[_0x3fb8('0x5b')][_0x3fb8('0x6a')][_0xfdc05d],'SmsAccountId':_0x4b9742[_0x3fb8('0x62')]['id']});}return _0x787906;});}})['then'](respondWithResult(_0x4d3f4d,null))[_0x3fb8('0x2b')](handleError(_0x4d3f4d,null));};exports[_0x3fb8('0xdc')]=function(_0x23a3a0,_0x491be7,_0xec0e4b){return db[_0x3fb8('0x3d')][_0x3fb8('0x59')]({'where':{'id':_0x23a3a0[_0x3fb8('0x62')]['id']}})[_0x3fb8('0x20')](handleEntityNotFound(_0x491be7,null))[_0x3fb8('0x20')](function(_0x37f032){if(_0x37f032){return _0x37f032[_0x3fb8('0xdc')](_0x23a3a0[_0x3fb8('0x41')]['ids'])[_0x3fb8('0x20')](function(){if(_['isArray'](_0x23a3a0['query'][_0x3fb8('0x6a')])){for(var _0xfddcad=0x0;_0xfddcad<_0x23a3a0[_0x3fb8('0x41')]['ids'][_0x3fb8('0x45')];_0xfddcad+=0x1){socket[_0x3fb8('0xda')]('userSmsAccount:remove',{'UserId':Number(_0x23a3a0[_0x3fb8('0x41')][_0x3fb8('0x6a')][_0xfddcad]),'SmsAccountId':Number(_0x23a3a0['params']['id'])});}}else{socket[_0x3fb8('0xda')](_0x3fb8('0xdd'),{'UserId':Number(_0x23a3a0[_0x3fb8('0x41')][_0x3fb8('0x6a')]),'SmsAccountId':Number(_0x23a3a0[_0x3fb8('0x62')]['id'])});}});}})[_0x3fb8('0x20')](respondWithStatusCode(_0x491be7,null))[_0x3fb8('0x2b')](handleError(_0x491be7,null));};exports['getAgents']=function(_0x503128,_0x509121,_0x50bf00){var _0x5ca5c6={};var _0x28b62a={};var _0x31eb31;var _0x2c31ba;return db[_0x3fb8('0x3d')][_0x3fb8('0x67')]({'where':{'id':_0x503128[_0x3fb8('0x62')]['id']}})[_0x3fb8('0x20')](handleEntityNotFound(_0x509121,null))['then'](function(_0x1f5576){if(_0x1f5576){_0x31eb31=_0x1f5576;_0x28b62a[_0x3fb8('0x3f')]=_[_0x3fb8('0x40')](db[_0x3fb8('0xa5')][_0x3fb8('0x3e')]);_0x28b62a['query']=_[_0x3fb8('0x40')](_0x503128[_0x3fb8('0x41')]);_0x28b62a[_0x3fb8('0x4b')]=_['intersection'](_0x28b62a['model'],_0x28b62a['query']);_0x5ca5c6[_0x3fb8('0x43')]=_[_0x3fb8('0x42')](_0x28b62a['model'],qs[_0x3fb8('0x44')](_0x503128[_0x3fb8('0x41')][_0x3fb8('0x44')]));_0x5ca5c6[_0x3fb8('0x43')]=_0x5ca5c6[_0x3fb8('0x43')][_0x3fb8('0x45')]?_0x5ca5c6[_0x3fb8('0x43')]:_0x28b62a[_0x3fb8('0x3f')];_0x5ca5c6['order']=qs[_0x3fb8('0x49')](_0x503128[_0x3fb8('0x41')][_0x3fb8('0x49')]);_0x5ca5c6[_0x3fb8('0x4a')]=qs[_0x3fb8('0x4b')](_[_0x3fb8('0x68')](_0x503128[_0x3fb8('0x41')],_0x28b62a['filters']));if(_0x503128[_0x3fb8('0x41')][_0x3fb8('0x4c')]){_0x5ca5c6[_0x3fb8('0x4a')]=_[_0x3fb8('0x4d')](_0x5ca5c6['where'],{'$or':_[_0x3fb8('0x4e')](_0x5ca5c6[_0x3fb8('0x43')],function(_0x5e916c){var _0x45c13c={};_0x45c13c[_0x5e916c]={'$like':'%'+_0x503128['query'][_0x3fb8('0x4c')]+'%'};return _0x45c13c;})});}_0x5ca5c6=_['merge']({},_0x5ca5c6,_0x503128[_0x3fb8('0x58')]);return _0x31eb31[_0x3fb8('0xde')](_0x5ca5c6);}})['then'](function(_0x39fd0d){if(_0x39fd0d){_0x2c31ba=_0x39fd0d['length'];if(!_0x503128[_0x3fb8('0x41')]['hasOwnProperty']('nolimit')){_0x5ca5c6[_0x3fb8('0x31')]=qs['limit'](_0x503128['query'][_0x3fb8('0x31')]);_0x5ca5c6['offset']=qs['offset'](_0x503128[_0x3fb8('0x41')]['offset']);}return _0x31eb31['getAgents'](_0x5ca5c6);}})[_0x3fb8('0x20')](function(_0x59f58d){if(_0x59f58d){return _0x59f58d?{'count':_0x2c31ba,'rows':_0x59f58d}:null;}})[_0x3fb8('0x20')](respondWithResult(_0x509121,null))[_0x3fb8('0x2b')](handleError(_0x509121,null));};
\ No newline at end of file
index 6a053e1..8843e76 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6737=['emit','hasOwnProperty','../../mysqldb','SmsAccount','save','update','remove'];(function(_0x4f49a9,_0x4ffff1){var _0x1fb629=function(_0x5be8ec){while(--_0x5be8ec){_0x4f49a9['push'](_0x4f49a9['shift']());}};_0x1fb629(++_0x4ffff1);}(_0x6737,0xe2));var _0x7673=function(_0x259d29,_0x32ca6d){_0x259d29=_0x259d29-0x0;var _0x32834f=_0x6737[_0x259d29];return _0x32834f;};'use strict';var EventEmitter=require('events');var SmsAccount=require(_0x7673('0x0'))['db'][_0x7673('0x1')];var SmsAccountEvents=new EventEmitter();SmsAccountEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x7673('0x2'),'afterUpdate':_0x7673('0x3'),'afterDestroy':_0x7673('0x4')};function emitEvent(_0x12efff){return function(_0x54002e,_0x32e6f2,_0x22ce8d){SmsAccountEvents['emit'](_0x12efff+':'+_0x54002e['id'],_0x54002e);SmsAccountEvents[_0x7673('0x5')](_0x12efff,_0x54002e);_0x22ce8d(null);};}for(var e in events){if(events[_0x7673('0x6')](e)){var event=events[e];SmsAccount['hook'](e,emitEvent(event));}}module['exports']=SmsAccountEvents;
\ No newline at end of file
+var _0x44e8=['setMaxListeners','save','update','remove','emit','hasOwnProperty','hook','exports','events'];(function(_0x275fa3,_0x47511f){var _0x30ec99=function(_0x179d4e){while(--_0x179d4e){_0x275fa3['push'](_0x275fa3['shift']());}};_0x30ec99(++_0x47511f);}(_0x44e8,0xd7));var _0x844e=function(_0x1fee50,_0x526624){_0x1fee50=_0x1fee50-0x0;var _0x5bb3e4=_0x44e8[_0x1fee50];return _0x5bb3e4;};'use strict';var EventEmitter=require(_0x844e('0x0'));var SmsAccount=require('../../mysqldb')['db']['SmsAccount'];var SmsAccountEvents=new EventEmitter();SmsAccountEvents[_0x844e('0x1')](0x0);var events={'afterCreate':_0x844e('0x2'),'afterUpdate':_0x844e('0x3'),'afterDestroy':_0x844e('0x4')};function emitEvent(_0x49ce1b){return function(_0x3a8b3c,_0x167368,_0x2c8b9e){SmsAccountEvents[_0x844e('0x5')](_0x49ce1b+':'+_0x3a8b3c['id'],_0x3a8b3c);SmsAccountEvents['emit'](_0x49ce1b,_0x3a8b3c);_0x2c8b9e(null);};}for(var e in events){if(events[_0x844e('0x6')](e)){var event=events[e];SmsAccount[_0x844e('0x7')](e,emitEvent(event));}}module[_0x844e('0x8')]=SmsAccountEvents;
\ No newline at end of file
index 684fe9d..614b9be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x00eb=['lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','exports','SmsAccount','sms_accounts'];(function(_0x297fd3,_0x115406){var _0x2af381=function(_0x1dd31b){while(--_0x1dd31b){_0x297fd3['push'](_0x297fd3['shift']());}};_0x2af381(++_0x115406);}(_0x00eb,0x138));var _0xb00e=function(_0x23c07c,_0x4564f9){_0x23c07c=_0x23c07c-0x0;var _0x2c70e1=_0x00eb[_0x23c07c];return _0x2c70e1;};'use strict';var _=require(_0xb00e('0x0'));var util=require(_0xb00e('0x1'));var logger=require(_0xb00e('0x2'))(_0xb00e('0x3'));var moment=require(_0xb00e('0x4'));var BPromise=require(_0xb00e('0x5'));var rp=require(_0xb00e('0x6'));var fs=require('fs');var path=require(_0xb00e('0x7'));var rimraf=require(_0xb00e('0x8'));var config=require(_0xb00e('0x9'));var attributes=require('./smsAccount.attributes');module[_0xb00e('0xa')]=function(_0x274b4e,_0x25534c){return _0x274b4e['define'](_0xb00e('0xb'),attributes,{'tableName':_0xb00e('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xf5bf=['rimraf','../../config/environment','./smsAccount.attributes','exports','define','SmsAccount','sms_accounts','util','../../config/logger','api','moment','bluebird','path'];(function(_0x1130bc,_0x38b6db){var _0x1488d6=function(_0x3c14f1){while(--_0x3c14f1){_0x1130bc['push'](_0x1130bc['shift']());}};_0x1488d6(++_0x38b6db);}(_0xf5bf,0x173));var _0xff5b=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xf5bf[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require(_0xff5b('0x0'));var logger=require(_0xff5b('0x1'))(_0xff5b('0x2'));var moment=require(_0xff5b('0x3'));var BPromise=require(_0xff5b('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xff5b('0x5'));var rimraf=require(_0xff5b('0x6'));var config=require(_0xff5b('0x7'));var attributes=require(_0xff5b('0x8'));module[_0xff5b('0x9')]=function(_0x13ae69,_0x24659a){return _0x13ae69[_0xff5b('0xa')](_0xff5b('0xb'),attributes,{'tableName':_0xff5b('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 7979929..c2cdad1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb2bd=['options','where','attributes','include','map','model','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http','redis','defaults','localhost','socket.io-emitter','./smsAccount.socket','register','request','then','info','SmsAccount,\x20%s,\x20%s','request\x20sent','debug','SmsAccount,\x20%s,\x20%s,\x20%s','stringify','error','message','catch','ShowSmsAccount','SmsAccount','find'];(function(_0x4b9978,_0x58eb71){var _0x42f0e5=function(_0x4ff5dc){while(--_0x4ff5dc){_0x4b9978['push'](_0x4b9978['shift']());}};_0x42f0e5(++_0x58eb71);}(_0xb2bd,0x1e7));var _0xdb2b=function(_0x5c6fd7,_0x22042a){_0x5c6fd7=_0x5c6fd7-0x0;var _0x194362=_0xb2bd[_0x5c6fd7];return _0x194362;};'use strict';var _=require(_0xdb2b('0x0'));var util=require(_0xdb2b('0x1'));var moment=require(_0xdb2b('0x2'));var BPromise=require('bluebird');var rs=require(_0xdb2b('0x3'));var fs=require('fs');var Redis=require(_0xdb2b('0x4'));var db=require(_0xdb2b('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xdb2b('0x6'))(_0xdb2b('0x7'));var config=require(_0xdb2b('0x8'));var jayson=require(_0xdb2b('0x9'));var client=jayson['client'][_0xdb2b('0xa')]({'port':0x232a});config[_0xdb2b('0xb')]=_[_0xdb2b('0xc')](config['redis'],{'host':_0xdb2b('0xd'),'port':0x18eb});var socket=require(_0xdb2b('0xe'))(new Redis(config[_0xdb2b('0xb')]));require(_0xdb2b('0xf'))[_0xdb2b('0x10')](socket);function respondWithRpcPromise(_0x9e1f89,_0x5103d1,_0x2186a3){return new BPromise(function(_0x2c5f05,_0xc196f0){return client[_0xdb2b('0x11')](_0x9e1f89,_0x2186a3)[_0xdb2b('0x12')](function(_0x1f3977){logger[_0xdb2b('0x13')](_0xdb2b('0x14'),_0x5103d1,_0xdb2b('0x15'));logger[_0xdb2b('0x16')](_0xdb2b('0x17'),_0x5103d1,_0xdb2b('0x15'),JSON[_0xdb2b('0x18')](_0x1f3977));if(_0x1f3977['error']){if(_0x1f3977['error']['code']===0x1f4){logger[_0xdb2b('0x19')]('SmsAccount,\x20%s,\x20%s',_0x5103d1,_0x1f3977[_0xdb2b('0x19')][_0xdb2b('0x1a')]);return _0xc196f0(_0x1f3977[_0xdb2b('0x19')][_0xdb2b('0x1a')]);}logger[_0xdb2b('0x19')](_0xdb2b('0x14'),_0x5103d1,_0x1f3977['error'][_0xdb2b('0x1a')]);return _0x2c5f05(_0x1f3977[_0xdb2b('0x19')][_0xdb2b('0x1a')]);}else{logger[_0xdb2b('0x13')](_0xdb2b('0x14'),_0x5103d1,_0xdb2b('0x15'));_0x2c5f05(_0x1f3977['result'][_0xdb2b('0x1a')]);}})[_0xdb2b('0x1b')](function(_0x287d07){logger[_0xdb2b('0x19')](_0xdb2b('0x14'),_0x5103d1,_0x287d07);_0xc196f0(_0x287d07);});});}exports[_0xdb2b('0x1c')]=function(_0x166e7f){var _0x337fa1=this;return new Promise(function(_0x481454,_0x50524a){return db[_0xdb2b('0x1d')][_0xdb2b('0x1e')]({'raw':_0x166e7f[_0xdb2b('0x1f')]?_0x166e7f[_0xdb2b('0x1f')]['raw']===undefined?!![]:![]:!![],'where':_0x166e7f['options']?_0x166e7f['options'][_0xdb2b('0x20')]||null:null,'attributes':_0x166e7f[_0xdb2b('0x1f')]?_0x166e7f[_0xdb2b('0x1f')][_0xdb2b('0x21')]||null:null,'include':_0x166e7f[_0xdb2b('0x1f')]?_0x166e7f['options'][_0xdb2b('0x22')]?_[_0xdb2b('0x23')](_0x166e7f[_0xdb2b('0x1f')]['include'],function(_0x5f5529){return{'model':db[_0x5f5529['model']],'as':_0x5f5529['as'],'attributes':_0x5f5529['attributes'],'include':_0x5f5529['include']?_['map'](_0x5f5529[_0xdb2b('0x22')],function(_0x199229){return{'model':db[_0x199229[_0xdb2b('0x24')]],'as':_0x199229['as'],'attributes':_0x199229[_0xdb2b('0x21')],'include':_0x199229[_0xdb2b('0x22')]?_['map'](_0x199229[_0xdb2b('0x22')],function(_0x90999b){return{'model':db[_0x90999b[_0xdb2b('0x24')]],'as':_0x90999b['as'],'attributes':_0x90999b[_0xdb2b('0x21')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x173587){logger[_0xdb2b('0x13')](_0xdb2b('0x1c'),_0x166e7f);logger[_0xdb2b('0x16')](_0xdb2b('0x1c'),_0x166e7f,JSON[_0xdb2b('0x18')](_0x173587));_0x481454(_0x173587);})[_0xdb2b('0x1b')](function(_0x125985){logger['error'](_0xdb2b('0x1c'),_0x125985['message'],_0x166e7f);_0x50524a(_0x337fa1[_0xdb2b('0x19')](0x1f4,_0x125985['message']));});});};
\ No newline at end of file
+var _0xe470=['find','options','raw','where','attributes','map','model','include','catch','lodash','util','randomstring','../../mysqldb','../../config/utils','rpc','jayson/promise','client','redis','localhost','./smsAccount.socket','register','info','SmsAccount,\x20%s,\x20%s','debug','SmsAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','ShowSmsAccount','SmsAccount'];(function(_0x1fca80,_0x527187){var _0x5ab676=function(_0x1af7c6){while(--_0x1af7c6){_0x1fca80['push'](_0x1fca80['shift']());}};_0x5ab676(++_0x527187);}(_0xe470,0x149));var _0x0e47=function(_0x2a975a,_0x168282){_0x2a975a=_0x2a975a-0x0;var _0xc2fa09=_0xe470[_0x2a975a];return _0xc2fa09;};'use strict';var _=require(_0x0e47('0x0'));var util=require(_0x0e47('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x0e47('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x0e47('0x3'))['db'];var utils=require(_0x0e47('0x4'));var logger=require('../../config/logger')(_0x0e47('0x5'));var config=require('../../config/environment');var jayson=require(_0x0e47('0x6'));var client=jayson[_0x0e47('0x7')]['http']({'port':0x232a});config['redis']=_['defaults'](config[_0x0e47('0x8')],{'host':_0x0e47('0x9'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x0e47('0xa'))[_0x0e47('0xb')](socket);function respondWithRpcPromise(_0x429f05,_0x4413e9,_0x9bfd59){return new BPromise(function(_0x5dfe7c,_0x2ea675){return client['request'](_0x429f05,_0x9bfd59)['then'](function(_0x46acae){logger[_0x0e47('0xc')](_0x0e47('0xd'),_0x4413e9,'request\x20sent');logger[_0x0e47('0xe')](_0x0e47('0xf'),_0x4413e9,_0x0e47('0x10'),JSON[_0x0e47('0x11')](_0x46acae));if(_0x46acae[_0x0e47('0x12')]){if(_0x46acae[_0x0e47('0x12')][_0x0e47('0x13')]===0x1f4){logger[_0x0e47('0x12')](_0x0e47('0xd'),_0x4413e9,_0x46acae[_0x0e47('0x12')][_0x0e47('0x14')]);return _0x2ea675(_0x46acae[_0x0e47('0x12')][_0x0e47('0x14')]);}logger['error'](_0x0e47('0xd'),_0x4413e9,_0x46acae[_0x0e47('0x12')][_0x0e47('0x14')]);return _0x5dfe7c(_0x46acae[_0x0e47('0x12')][_0x0e47('0x14')]);}else{logger[_0x0e47('0xc')](_0x0e47('0xd'),_0x4413e9,_0x0e47('0x10'));_0x5dfe7c(_0x46acae['result'][_0x0e47('0x14')]);}})['catch'](function(_0x196d57){logger[_0x0e47('0x12')](_0x0e47('0xd'),_0x4413e9,_0x196d57);_0x2ea675(_0x196d57);});});}exports[_0x0e47('0x15')]=function(_0xcb065b){var _0x17db8f=this;return new Promise(function(_0x3f7936,_0x3a48d4){return db[_0x0e47('0x16')][_0x0e47('0x17')]({'raw':_0xcb065b[_0x0e47('0x18')]?_0xcb065b[_0x0e47('0x18')][_0x0e47('0x19')]===undefined?!![]:![]:!![],'where':_0xcb065b['options']?_0xcb065b[_0x0e47('0x18')][_0x0e47('0x1a')]||null:null,'attributes':_0xcb065b[_0x0e47('0x18')]?_0xcb065b[_0x0e47('0x18')][_0x0e47('0x1b')]||null:null,'include':_0xcb065b['options']?_0xcb065b['options']['include']?_[_0x0e47('0x1c')](_0xcb065b[_0x0e47('0x18')]['include'],function(_0x5742e7){return{'model':db[_0x5742e7[_0x0e47('0x1d')]],'as':_0x5742e7['as'],'attributes':_0x5742e7[_0x0e47('0x1b')],'include':_0x5742e7['include']?_['map'](_0x5742e7[_0x0e47('0x1e')],function(_0x3c2ae6){return{'model':db[_0x3c2ae6[_0x0e47('0x1d')]],'as':_0x3c2ae6['as'],'attributes':_0x3c2ae6[_0x0e47('0x1b')],'include':_0x3c2ae6[_0x0e47('0x1e')]?_[_0x0e47('0x1c')](_0x3c2ae6['include'],function(_0x1f1a8e){return{'model':db[_0x1f1a8e[_0x0e47('0x1d')]],'as':_0x1f1a8e['as'],'attributes':_0x1f1a8e[_0x0e47('0x1b')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x42563b){logger['info'](_0x0e47('0x15'),_0xcb065b);logger[_0x0e47('0xe')](_0x0e47('0x15'),_0xcb065b,JSON['stringify'](_0x42563b));_0x3f7936(_0x42563b);})[_0x0e47('0x1f')](function(_0x35991d){logger[_0x0e47('0x12')]('ShowSmsAccount',_0x35991d[_0x0e47('0x14')],_0xcb065b);_0x3a48d4(_0x17db8f[_0x0e47('0x12')](0x1f4,_0x35991d[_0x0e47('0x14')]));});});};
\ No newline at end of file
index e225317..e880453 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x702d=['removeListener','register','smsAccount:','./smsAccount.events','save','remove','emit'];(function(_0x137255,_0x34572a){var _0x15da63=function(_0x4d54c6){while(--_0x4d54c6){_0x137255['push'](_0x137255['shift']());}};_0x15da63(++_0x34572a);}(_0x702d,0x129));var _0xd702=function(_0x21e1e5,_0x5e4810){_0x21e1e5=_0x21e1e5-0x0;var _0x1d0582=_0x702d[_0x21e1e5];return _0x1d0582;};'use strict';var SmsAccountEvents=require(_0xd702('0x0'));var events=[_0xd702('0x1'),_0xd702('0x2'),'update'];function createListener(_0x328f96,_0x42c66d){return function(_0x33a842){_0x42c66d[_0xd702('0x3')](_0x328f96,_0x33a842);};}function removeListener(_0x14d0e7,_0x166317){return function(){SmsAccountEvents[_0xd702('0x4')](_0x14d0e7,_0x166317);};}exports[_0xd702('0x5')]=function(_0x4feea2){for(var _0x22e59e=0x0,_0x1e4915=events['length'];_0x22e59e<_0x1e4915;_0x22e59e++){var _0x4168ce=events[_0x22e59e];var _0x1b4c2c=createListener(_0xd702('0x6')+_0x4168ce,_0x4feea2);SmsAccountEvents['on'](_0x4168ce,_0x1b4c2c);}};
\ No newline at end of file
+var _0x7b4a=['./smsAccount.events','save','remove','update','emit','removeListener','length','smsAccount:'];(function(_0x48bd95,_0x294e92){var _0x5e5b16=function(_0x3a69d5){while(--_0x3a69d5){_0x48bd95['push'](_0x48bd95['shift']());}};_0x5e5b16(++_0x294e92);}(_0x7b4a,0x68));var _0xa7b4=function(_0x14eb24,_0x592e97){_0x14eb24=_0x14eb24-0x0;var _0x30aa1e=_0x7b4a[_0x14eb24];return _0x30aa1e;};'use strict';var SmsAccountEvents=require(_0xa7b4('0x0'));var events=[_0xa7b4('0x1'),_0xa7b4('0x2'),_0xa7b4('0x3')];function createListener(_0x38e4eb,_0x43189b){return function(_0x5bfab9){_0x43189b[_0xa7b4('0x4')](_0x38e4eb,_0x5bfab9);};}function removeListener(_0x508edc,_0x315000){return function(){SmsAccountEvents[_0xa7b4('0x5')](_0x508edc,_0x315000);};}exports['register']=function(_0x43da65){for(var _0x26f1a1=0x0,_0x501f6e=events[_0xa7b4('0x6')];_0x26f1a1<_0x501f6e;_0x26f1a1++){var _0x3cd9c7=events[_0x26f1a1];var _0x478f57=createListener(_0xa7b4('0x7')+_0x3cd9c7,_0x43da65);SmsAccountEvents['on'](_0x3cd9c7,_0x478f57);}};
\ No newline at end of file
index 1470edf..b4b6123 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x68bc=['show','post','create','put','update','delete','destroy','exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service','./smsApplication.controller','get','isAuthenticated','index','/:id'];(function(_0x30302a,_0x22da3d){var _0x5153e8=function(_0x2ae84f){while(--_0x2ae84f){_0x30302a['push'](_0x30302a['shift']());}};_0x5153e8(++_0x22da3d);}(_0x68bc,0x15e));var _0xc68b=function(_0x19d48b,_0x4d018c){_0x19d48b=_0x19d48b-0x0;var _0x59b0fe=_0x68bc[_0x19d48b];return _0x59b0fe;};'use strict';var multer=require(_0xc68b('0x0'));var util=require(_0xc68b('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0xc68b('0x2'));var router=express[_0xc68b('0x3')]();var auth=require(_0xc68b('0x4'));var interaction=require(_0xc68b('0x5'));var config=require('../../config/environment');var controller=require(_0xc68b('0x6'));router[_0xc68b('0x7')]('/',auth[_0xc68b('0x8')](),controller[_0xc68b('0x9')]);router['get'](_0xc68b('0xa'),auth[_0xc68b('0x8')](),controller[_0xc68b('0xb')]);router[_0xc68b('0xc')]('/',auth['isAuthenticated'](),controller[_0xc68b('0xd')]);router[_0xc68b('0xe')](_0xc68b('0xa'),auth[_0xc68b('0x8')](),controller[_0xc68b('0xf')]);router[_0xc68b('0x10')]('/:id',auth[_0xc68b('0x8')](),controller[_0xc68b('0x11')]);module[_0xc68b('0x12')]=router;
\ No newline at end of file
+var _0x1ccd=['util','path','connect-timeout','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','post','put','update','destroy','exports','multer'];(function(_0x447982,_0xa8e73a){var _0x3838e7=function(_0x59a77e){while(--_0x59a77e){_0x447982['push'](_0x447982['shift']());}};_0x3838e7(++_0xa8e73a);}(_0x1ccd,0xd1));var _0xd1cc=function(_0x2f5a22,_0x5e9f03){_0x2f5a22=_0x2f5a22-0x0;var _0x326b70=_0x1ccd[_0x2f5a22];return _0x326b70;};'use strict';var multer=require(_0xd1cc('0x0'));var util=require(_0xd1cc('0x1'));var path=require(_0xd1cc('0x2'));var timeout=require(_0xd1cc('0x3'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xd1cc('0x4'));var config=require(_0xd1cc('0x5'));var controller=require('./smsApplication.controller');router[_0xd1cc('0x6')]('/',auth[_0xd1cc('0x7')](),controller[_0xd1cc('0x8')]);router[_0xd1cc('0x6')](_0xd1cc('0x9'),auth[_0xd1cc('0x7')](),controller['show']);router[_0xd1cc('0xa')]('/',auth['isAuthenticated'](),controller['create']);router[_0xd1cc('0xb')](_0xd1cc('0x9'),auth[_0xd1cc('0x7')](),controller[_0xd1cc('0xc')]);router['delete']('/:id',auth[_0xd1cc('0x7')](),controller[_0xd1cc('0xd')]);module[_0xd1cc('0xe')]=router;
\ No newline at end of file
index 26b9d19..ad014f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6c99=['INTEGER','*,*,*,*','sequelize'];(function(_0x14fa92,_0x2d1011){var _0x2f8e6c=function(_0x523a70){while(--_0x523a70){_0x14fa92['push'](_0x14fa92['shift']());}};_0x2f8e6c(++_0x2d1011);}(_0x6c99,0x9b));var _0x96c9=function(_0x4c12ec,_0x2e9103){_0x4c12ec=_0x4c12ec-0x0;var _0x3ae42c=_0x6c99[_0x4c12ec];return _0x3ae42c;};'use strict';var Sequelize=require(_0x96c9('0x0'));module['exports']={'priority':{'type':Sequelize[_0x96c9('0x1')],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'noop'},'appdata':{'type':Sequelize['TEXT']()},'description':{'type':Sequelize['STRING']},'interval':{'type':Sequelize['STRING'],'defaultValue':_0x96c9('0x2')}};
\ No newline at end of file
+var _0x3cae=['exports','INTEGER','STRING','noop','TEXT','*,*,*,*','sequelize'];(function(_0x40f53f,_0x59032d){var _0x56b219=function(_0x423eba){while(--_0x423eba){_0x40f53f['push'](_0x40f53f['shift']());}};_0x56b219(++_0x59032d);}(_0x3cae,0x117));var _0xe3ca=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0x3cae[_0x4cf98e];return _0x1623ac;};'use strict';var Sequelize=require(_0xe3ca('0x0'));module[_0xe3ca('0x1')]={'priority':{'type':Sequelize[_0xe3ca('0x2')],'allowNull':![]},'app':{'type':Sequelize[_0xe3ca('0x3')],'allowNull':![],'defaultValue':_0xe3ca('0x4')},'appdata':{'type':Sequelize[_0xe3ca('0x5')]()},'description':{'type':Sequelize[_0xe3ca('0x3')]},'interval':{'type':Sequelize['STRING'],'defaultValue':_0xe3ca('0x6')}};
\ No newline at end of file
index 28661d7..fa8f062 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe45b=['findAll','rows','catch','show','keys','rawAttributes','include','merge','create','body','update','find','params','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','mustache','sox','to-csv','ejs','lodash','squel','crypto','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','end','status','count','offset','limit','set','apply','reject','save','then','destroy','error','stack','name','send','index','SmsApplication','model','query','filters','intersection','attributes','fields','length','nolimit','order','sort','where','filter','map','type','key','VIRTUAL','field','options','includeAll'];(function(_0x46aff0,_0x122890){var _0x9d78cf=function(_0x3f14cb){while(--_0x3f14cb){_0x46aff0['push'](_0x46aff0['shift']());}};_0x9d78cf(++_0x122890);}(_0xe45b,0xe5));var _0xbe45=function(_0x14e5e5,_0x481c11){_0x14e5e5=_0x14e5e5-0x0;var _0x2bee68=_0xe45b[_0x14e5e5];return _0x2bee68;};'use strict';var pdf=require(_0xbe45('0x0'));var emlformat=require(_0xbe45('0x1'));var rimraf=require(_0xbe45('0x2'));var zipdir=require(_0xbe45('0x3'));var jsonpatch=require(_0xbe45('0x4'));var rp=require(_0xbe45('0x5'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xbe45('0x6'));var util=require('util');var path=require('path');var sox=require(_0xbe45('0x7'));var csv=require(_0xbe45('0x8'));var ejs=require(_0xbe45('0x9'));var fs=require('fs');var _=require(_0xbe45('0xa'));var squel=require(_0xbe45('0xb'));var crypto=require(_0xbe45('0xc'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xbe45('0x8'));var querystring=require(_0xbe45('0xd'));var Papa=require('papaparse');var Redis=require(_0xbe45('0xe'));var authService=require(_0xbe45('0xf'));var qs=require(_0xbe45('0x10'));var hardwareService=require(_0xbe45('0x11'));var logger=require(_0xbe45('0x12'))(_0xbe45('0x13'));var utils=require(_0xbe45('0x14'));var config=require('../../config/environment');var db=require(_0xbe45('0x15'))['db'];function respondWithStatusCode(_0x557514,_0x107996){_0x107996=_0x107996||0xcc;return function(_0x4a5c36){if(_0x4a5c36){return _0x557514[_0xbe45('0x16')](_0x107996);}return _0x557514['status'](_0x107996)[_0xbe45('0x17')]();};}function respondWithResult(_0x529ac5,_0x49e435){_0x49e435=_0x49e435||0xc8;return function(_0x2f632f){if(_0x2f632f){return _0x529ac5[_0xbe45('0x18')](_0x49e435)['json'](_0x2f632f);}};}function respondWithFilteredResult(_0x1cb0b2,_0x2732ff){return function(_0x18d5a0){if(_0x18d5a0){var _0x4e2691=_0x18d5a0[_0xbe45('0x19')],_0xa1bf3f=_0x2732ff[_0xbe45('0x1a')],_0x3da47f=_0x2732ff[_0xbe45('0x1a')]+_0x2732ff[_0xbe45('0x1b')],_0x2a2ac1;if(_0x3da47f>=_0x4e2691){_0x3da47f=_0x4e2691;_0x2a2ac1=0xc8;}else{_0x2a2ac1=0xce;}_0x1cb0b2[_0xbe45('0x18')](_0x2a2ac1);return _0x1cb0b2[_0xbe45('0x1c')]('Content-Range',_0xa1bf3f+'-'+_0x3da47f+'/'+_0x4e2691)['json'](_0x18d5a0);}return null;};}function patchUpdates(_0x3e3891){return function(_0x3dd36a){try{jsonpatch[_0xbe45('0x1d')](_0x3dd36a,_0x3e3891,!![]);}catch(_0x520c58){return BPromise[_0xbe45('0x1e')](_0x520c58);}return _0x3dd36a[_0xbe45('0x1f')]();};}function saveUpdates(_0x206486,_0xeb1acb){return function(_0x2ece5f){if(_0x2ece5f){return _0x2ece5f['update'](_0x206486)[_0xbe45('0x20')](function(_0x4c00f8){return _0x4c00f8;});}return null;};}function removeEntity(_0x418f4f,_0xe86bcb){return function(_0x29b6c4){if(_0x29b6c4){return _0x29b6c4[_0xbe45('0x21')]()[_0xbe45('0x20')](function(){_0x418f4f['status'](0xcc)[_0xbe45('0x17')]();});}};}function handleEntityNotFound(_0x52eb79,_0x19c25a){return function(_0x199b8d){if(!_0x199b8d){_0x52eb79[_0xbe45('0x16')](0x194);}return _0x199b8d;};}function handleError(_0x1572b4,_0xae1a54){_0xae1a54=_0xae1a54||0x1f4;return function(_0x44c190){logger[_0xbe45('0x22')](_0x44c190[_0xbe45('0x23')]);if(_0x44c190[_0xbe45('0x24')]){delete _0x44c190['name'];}_0x1572b4[_0xbe45('0x18')](_0xae1a54)[_0xbe45('0x25')](_0x44c190);};}exports[_0xbe45('0x26')]=function(_0x2ea914,_0x1a133d){var _0x51922f={},_0x551ae3={},_0x18024a={'count':0x0,'rows':[]};var _0x2c83f4=db[_0xbe45('0x27')]['rawAttributes'];_0x551ae3[_0xbe45('0x28')]=_['keys'](_0x2c83f4);_0x551ae3[_0xbe45('0x29')]=_['keys'](_0x2ea914[_0xbe45('0x29')]);_0x551ae3[_0xbe45('0x2a')]=_[_0xbe45('0x2b')](_0x551ae3[_0xbe45('0x28')],_0x551ae3[_0xbe45('0x29')]);_0x51922f[_0xbe45('0x2c')]=_[_0xbe45('0x2b')](_0x551ae3[_0xbe45('0x28')],qs[_0xbe45('0x2d')](_0x2ea914[_0xbe45('0x29')][_0xbe45('0x2d')]));_0x51922f[_0xbe45('0x2c')]=_0x51922f[_0xbe45('0x2c')][_0xbe45('0x2e')]?_0x51922f[_0xbe45('0x2c')]:_0x551ae3[_0xbe45('0x28')];if(!_0x2ea914[_0xbe45('0x29')]['hasOwnProperty'](_0xbe45('0x2f'))){_0x51922f[_0xbe45('0x1b')]=qs[_0xbe45('0x1b')](_0x2ea914[_0xbe45('0x29')][_0xbe45('0x1b')]);_0x51922f[_0xbe45('0x1a')]=qs[_0xbe45('0x1a')](_0x2ea914[_0xbe45('0x29')][_0xbe45('0x1a')]);}_0x51922f[_0xbe45('0x30')]=qs[_0xbe45('0x31')](_0x2ea914[_0xbe45('0x29')]['sort']);_0x51922f[_0xbe45('0x32')]=qs[_0xbe45('0x2a')](_['pick'](_0x2ea914[_0xbe45('0x29')],_0x551ae3[_0xbe45('0x2a')]));if(_0x2ea914['query'][_0xbe45('0x33')]){_0x51922f[_0xbe45('0x32')]=_['merge'](_0x51922f[_0xbe45('0x32')],{'$or':_[_0xbe45('0x34')](_0x2c83f4,function(_0x578815){if(_0x578815[_0xbe45('0x35')][_0xbe45('0x36')]!==_0xbe45('0x37')){var _0x29d08b={};_0x29d08b[_0x578815[_0xbe45('0x38')]]={'$like':'%'+_0x2ea914[_0xbe45('0x29')][_0xbe45('0x33')]+'%'};return _0x29d08b;}})});}_0x51922f=_['merge']({},_0x51922f,_0x2ea914[_0xbe45('0x39')]);var _0x45cf34={'where':_0x51922f[_0xbe45('0x32')]};return db['SmsApplication']['count'](_0x45cf34)['then'](function(_0x99cbfb){_0x18024a['count']=_0x99cbfb;if(_0x2ea914[_0xbe45('0x29')][_0xbe45('0x3a')]){_0x51922f['include']=[{'all':!![]}];}return db['SmsApplication'][_0xbe45('0x3b')](_0x51922f);})['then'](function(_0x5a9842){_0x18024a[_0xbe45('0x3c')]=_0x5a9842;return _0x18024a;})[_0xbe45('0x20')](respondWithFilteredResult(_0x1a133d,_0x51922f))[_0xbe45('0x3d')](handleError(_0x1a133d,null));};exports[_0xbe45('0x3e')]=function(_0x7efdec,_0x1de341){var _0x3e9a27={'raw':!![],'where':{'id':_0x7efdec['params']['id']}},_0x2a255f={};_0x2a255f[_0xbe45('0x28')]=_[_0xbe45('0x3f')](db[_0xbe45('0x27')][_0xbe45('0x40')]);_0x2a255f['query']=_['keys'](_0x7efdec['query']);_0x2a255f['filters']=_[_0xbe45('0x2b')](_0x2a255f[_0xbe45('0x28')],_0x2a255f[_0xbe45('0x29')]);_0x3e9a27[_0xbe45('0x2c')]=_[_0xbe45('0x2b')](_0x2a255f[_0xbe45('0x28')],qs[_0xbe45('0x2d')](_0x7efdec[_0xbe45('0x29')][_0xbe45('0x2d')]));_0x3e9a27[_0xbe45('0x2c')]=_0x3e9a27[_0xbe45('0x2c')][_0xbe45('0x2e')]?_0x3e9a27['attributes']:_0x2a255f[_0xbe45('0x28')];if(_0x7efdec[_0xbe45('0x29')]['includeAll']){_0x3e9a27[_0xbe45('0x41')]=[{'all':!![]}];}_0x3e9a27=_[_0xbe45('0x42')]({},_0x3e9a27,_0x7efdec['options']);return db[_0xbe45('0x27')]['find'](_0x3e9a27)[_0xbe45('0x20')](handleEntityNotFound(_0x1de341,null))[_0xbe45('0x20')](respondWithResult(_0x1de341,null))[_0xbe45('0x3d')](handleError(_0x1de341,null));};exports[_0xbe45('0x43')]=function(_0x202052,_0x39c91b){return db[_0xbe45('0x27')][_0xbe45('0x43')](_0x202052[_0xbe45('0x44')],{})['then'](respondWithResult(_0x39c91b,0xc9))[_0xbe45('0x3d')](handleError(_0x39c91b,null));};exports[_0xbe45('0x45')]=function(_0x3b8ca2,_0x2eab99){if(_0x3b8ca2[_0xbe45('0x44')]['id']){delete _0x3b8ca2['body']['id'];}return db[_0xbe45('0x27')][_0xbe45('0x46')]({'where':{'id':_0x3b8ca2[_0xbe45('0x47')]['id']}})['then'](handleEntityNotFound(_0x2eab99,null))[_0xbe45('0x20')](saveUpdates(_0x3b8ca2['body'],null))['then'](respondWithResult(_0x2eab99,null))['catch'](handleError(_0x2eab99,null));};exports['destroy']=function(_0x30ede7,_0x5c54a3){return db[_0xbe45('0x27')][_0xbe45('0x46')]({'where':{'id':_0x30ede7[_0xbe45('0x47')]['id']}})[_0xbe45('0x20')](handleEntityNotFound(_0x5c54a3,null))['then'](removeEntity(_0x5c54a3,null))[_0xbe45('0x3d')](handleError(_0x5c54a3,null));};
\ No newline at end of file
+var _0xa7c0=['filter','type','key','field','merge','options','includeAll','include','findAll','rows','show','params','keys','find','catch','create','body','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','path','sox','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','Content-Range','json','apply','save','update','destroy','then','error','stack','name','send','index','SmsApplication','rawAttributes','model','query','filters','intersection','fields','length','attributes','hasOwnProperty','nolimit','order','sort','where','pick'];(function(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0xa7c0,0xe6));var _0x0a7c=function(_0x23305f,_0xf2ef72){_0x23305f=_0x23305f-0x0;var _0x5a5e26=_0xa7c0[_0x23305f];return _0x5a5e26;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x0a7c('0x0'));var rimraf=require(_0x0a7c('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x0a7c('0x2'));var rp=require(_0x0a7c('0x3'));var moment=require('moment');var BPromise=require(_0x0a7c('0x4'));var Mustache=require(_0x0a7c('0x5'));var util=require('util');var path=require(_0x0a7c('0x6'));var sox=require(_0x0a7c('0x7'));var csv=require('to-csv');var ejs=require(_0x0a7c('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x0a7c('0x9'));var crypto=require(_0x0a7c('0xa'));var jsforce=require(_0x0a7c('0xb'));var deskjs=require(_0x0a7c('0xc'));var toCsv=require('to-csv');var querystring=require(_0x0a7c('0xd'));var Papa=require(_0x0a7c('0xe'));var Redis=require(_0x0a7c('0xf'));var authService=require(_0x0a7c('0x10'));var qs=require(_0x0a7c('0x11'));var hardwareService=require(_0x0a7c('0x12'));var logger=require('../../config/logger')(_0x0a7c('0x13'));var utils=require('../../config/utils');var config=require(_0x0a7c('0x14'));var db=require(_0x0a7c('0x15'))['db'];function respondWithStatusCode(_0x485a8f,_0x2bacce){_0x2bacce=_0x2bacce||0xcc;return function(_0x172166){if(_0x172166){return _0x485a8f[_0x0a7c('0x16')](_0x2bacce);}return _0x485a8f[_0x0a7c('0x17')](_0x2bacce)[_0x0a7c('0x18')]();};}function respondWithResult(_0x725565,_0x401d57){_0x401d57=_0x401d57||0xc8;return function(_0x474fca){if(_0x474fca){return _0x725565[_0x0a7c('0x17')](_0x401d57)['json'](_0x474fca);}};}function respondWithFilteredResult(_0x1daba9,_0x23eb70){return function(_0x314c8f){if(_0x314c8f){var _0x2dfbb6=_0x314c8f[_0x0a7c('0x19')],_0x50494a=_0x23eb70[_0x0a7c('0x1a')],_0x50eb53=_0x23eb70['offset']+_0x23eb70['limit'],_0x13f9e2;if(_0x50eb53>=_0x2dfbb6){_0x50eb53=_0x2dfbb6;_0x13f9e2=0xc8;}else{_0x13f9e2=0xce;}_0x1daba9[_0x0a7c('0x17')](_0x13f9e2);return _0x1daba9['set'](_0x0a7c('0x1b'),_0x50494a+'-'+_0x50eb53+'/'+_0x2dfbb6)[_0x0a7c('0x1c')](_0x314c8f);}return null;};}function patchUpdates(_0x4e7021){return function(_0x88bdc3){try{jsonpatch[_0x0a7c('0x1d')](_0x88bdc3,_0x4e7021,!![]);}catch(_0xe475bc){return BPromise['reject'](_0xe475bc);}return _0x88bdc3[_0x0a7c('0x1e')]();};}function saveUpdates(_0x1ac2c2,_0x404ac1){return function(_0x5ee862){if(_0x5ee862){return _0x5ee862[_0x0a7c('0x1f')](_0x1ac2c2)['then'](function(_0x570d9d){return _0x570d9d;});}return null;};}function removeEntity(_0x316fd6,_0x227935){return function(_0xac3065){if(_0xac3065){return _0xac3065[_0x0a7c('0x20')]()[_0x0a7c('0x21')](function(){_0x316fd6[_0x0a7c('0x17')](0xcc)[_0x0a7c('0x18')]();});}};}function handleEntityNotFound(_0x78d54d,_0x55f33d){return function(_0x459e1c){if(!_0x459e1c){_0x78d54d[_0x0a7c('0x16')](0x194);}return _0x459e1c;};}function handleError(_0x52adff,_0x53d127){_0x53d127=_0x53d127||0x1f4;return function(_0x2c61c5){logger[_0x0a7c('0x22')](_0x2c61c5[_0x0a7c('0x23')]);if(_0x2c61c5[_0x0a7c('0x24')]){delete _0x2c61c5[_0x0a7c('0x24')];}_0x52adff[_0x0a7c('0x17')](_0x53d127)[_0x0a7c('0x25')](_0x2c61c5);};}exports[_0x0a7c('0x26')]=function(_0x493416,_0x3e93ed){var _0x50244f={},_0x2f77b6={},_0x5341e={'count':0x0,'rows':[]};var _0x545b5b=db[_0x0a7c('0x27')][_0x0a7c('0x28')];_0x2f77b6[_0x0a7c('0x29')]=_['keys'](_0x545b5b);_0x2f77b6[_0x0a7c('0x2a')]=_['keys'](_0x493416[_0x0a7c('0x2a')]);_0x2f77b6[_0x0a7c('0x2b')]=_[_0x0a7c('0x2c')](_0x2f77b6[_0x0a7c('0x29')],_0x2f77b6[_0x0a7c('0x2a')]);_0x50244f['attributes']=_[_0x0a7c('0x2c')](_0x2f77b6['model'],qs[_0x0a7c('0x2d')](_0x493416['query'][_0x0a7c('0x2d')]));_0x50244f['attributes']=_0x50244f['attributes'][_0x0a7c('0x2e')]?_0x50244f[_0x0a7c('0x2f')]:_0x2f77b6['model'];if(!_0x493416['query'][_0x0a7c('0x30')](_0x0a7c('0x31'))){_0x50244f['limit']=qs['limit'](_0x493416[_0x0a7c('0x2a')]['limit']);_0x50244f[_0x0a7c('0x1a')]=qs['offset'](_0x493416['query'][_0x0a7c('0x1a')]);}_0x50244f[_0x0a7c('0x32')]=qs[_0x0a7c('0x33')](_0x493416[_0x0a7c('0x2a')][_0x0a7c('0x33')]);_0x50244f[_0x0a7c('0x34')]=qs[_0x0a7c('0x2b')](_[_0x0a7c('0x35')](_0x493416[_0x0a7c('0x2a')],_0x2f77b6['filters']));if(_0x493416[_0x0a7c('0x2a')][_0x0a7c('0x36')]){_0x50244f[_0x0a7c('0x34')]=_['merge'](_0x50244f[_0x0a7c('0x34')],{'$or':_['map'](_0x545b5b,function(_0x47d317){if(_0x47d317[_0x0a7c('0x37')][_0x0a7c('0x38')]!=='VIRTUAL'){var _0x55dbd7={};_0x55dbd7[_0x47d317[_0x0a7c('0x39')]]={'$like':'%'+_0x493416['query']['filter']+'%'};return _0x55dbd7;}})});}_0x50244f=_[_0x0a7c('0x3a')]({},_0x50244f,_0x493416[_0x0a7c('0x3b')]);var _0x1c7b93={'where':_0x50244f['where']};return db[_0x0a7c('0x27')][_0x0a7c('0x19')](_0x1c7b93)[_0x0a7c('0x21')](function(_0x578acb){_0x5341e['count']=_0x578acb;if(_0x493416[_0x0a7c('0x2a')][_0x0a7c('0x3c')]){_0x50244f[_0x0a7c('0x3d')]=[{'all':!![]}];}return db[_0x0a7c('0x27')][_0x0a7c('0x3e')](_0x50244f);})[_0x0a7c('0x21')](function(_0x17de30){_0x5341e[_0x0a7c('0x3f')]=_0x17de30;return _0x5341e;})[_0x0a7c('0x21')](respondWithFilteredResult(_0x3e93ed,_0x50244f))['catch'](handleError(_0x3e93ed,null));};exports[_0x0a7c('0x40')]=function(_0x8f8d31,_0x3cb447){var _0x2f55ea={'raw':!![],'where':{'id':_0x8f8d31[_0x0a7c('0x41')]['id']}},_0x58bdf0={};_0x58bdf0[_0x0a7c('0x29')]=_[_0x0a7c('0x42')](db[_0x0a7c('0x27')][_0x0a7c('0x28')]);_0x58bdf0[_0x0a7c('0x2a')]=_[_0x0a7c('0x42')](_0x8f8d31['query']);_0x58bdf0['filters']=_['intersection'](_0x58bdf0['model'],_0x58bdf0[_0x0a7c('0x2a')]);_0x2f55ea['attributes']=_[_0x0a7c('0x2c')](_0x58bdf0['model'],qs[_0x0a7c('0x2d')](_0x8f8d31[_0x0a7c('0x2a')]['fields']));_0x2f55ea[_0x0a7c('0x2f')]=_0x2f55ea[_0x0a7c('0x2f')]['length']?_0x2f55ea['attributes']:_0x58bdf0[_0x0a7c('0x29')];if(_0x8f8d31[_0x0a7c('0x2a')][_0x0a7c('0x3c')]){_0x2f55ea[_0x0a7c('0x3d')]=[{'all':!![]}];}_0x2f55ea=_['merge']({},_0x2f55ea,_0x8f8d31[_0x0a7c('0x3b')]);return db[_0x0a7c('0x27')][_0x0a7c('0x43')](_0x2f55ea)[_0x0a7c('0x21')](handleEntityNotFound(_0x3cb447,null))[_0x0a7c('0x21')](respondWithResult(_0x3cb447,null))[_0x0a7c('0x44')](handleError(_0x3cb447,null));};exports[_0x0a7c('0x45')]=function(_0x538a1b,_0x22b67f){return db[_0x0a7c('0x27')][_0x0a7c('0x45')](_0x538a1b['body'],{})[_0x0a7c('0x21')](respondWithResult(_0x22b67f,0xc9))[_0x0a7c('0x44')](handleError(_0x22b67f,null));};exports[_0x0a7c('0x1f')]=function(_0x3af800,_0x55bc9a){if(_0x3af800[_0x0a7c('0x46')]['id']){delete _0x3af800[_0x0a7c('0x46')]['id'];}return db[_0x0a7c('0x27')][_0x0a7c('0x43')]({'where':{'id':_0x3af800[_0x0a7c('0x41')]['id']}})[_0x0a7c('0x21')](handleEntityNotFound(_0x55bc9a,null))[_0x0a7c('0x21')](saveUpdates(_0x3af800['body'],null))[_0x0a7c('0x21')](respondWithResult(_0x55bc9a,null))['catch'](handleError(_0x55bc9a,null));};exports[_0x0a7c('0x20')]=function(_0x46adcd,_0x10ee33){return db[_0x0a7c('0x27')]['find']({'where':{'id':_0x46adcd[_0x0a7c('0x41')]['id']}})[_0x0a7c('0x21')](handleEntityNotFound(_0x10ee33,null))[_0x0a7c('0x21')](removeEntity(_0x10ee33,null))[_0x0a7c('0x44')](handleError(_0x10ee33,null));};
\ No newline at end of file
index b3e2d33..393c13a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4975=['path','rimraf','../../config/environment','./smsApplication.attributes','exports','SmsApplication','sms_applications','utf8mb4','lodash','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x419956,_0x320f04){var _0x275c62=function(_0x24afe0){while(--_0x24afe0){_0x419956['push'](_0x419956['shift']());}};_0x275c62(++_0x320f04);}(_0x4975,0x86));var _0x5497=function(_0xe3f79d,_0x2c3431){_0xe3f79d=_0xe3f79d-0x0;var _0x5aeab5=_0x4975[_0xe3f79d];return _0x5aeab5;};'use strict';var _=require(_0x5497('0x0'));var util=require('util');var logger=require(_0x5497('0x1'))(_0x5497('0x2'));var moment=require(_0x5497('0x3'));var BPromise=require(_0x5497('0x4'));var rp=require(_0x5497('0x5'));var fs=require('fs');var path=require(_0x5497('0x6'));var rimraf=require(_0x5497('0x7'));var config=require(_0x5497('0x8'));var attributes=require(_0x5497('0x9'));module[_0x5497('0xa')]=function(_0x539a27,_0x37e48d){return _0x539a27['define'](_0x5497('0xb'),attributes,{'tableName':_0x5497('0xc'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x5497('0xd'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
+var _0x5fab=['moment','bluebird','request-promise','path','rimraf','../../config/environment','./smsApplication.attributes','exports','SmsApplication','sms_applications','utf8mb4','lodash','util','api'];(function(_0x17b37d,_0x2f5796){var _0x4772d1=function(_0x2acd0d){while(--_0x2acd0d){_0x17b37d['push'](_0x17b37d['shift']());}};_0x4772d1(++_0x2f5796);}(_0x5fab,0x177));var _0xb5fa=function(_0x46c1f5,_0x505b91){_0x46c1f5=_0x46c1f5-0x0;var _0x1a044d=_0x5fab[_0x46c1f5];return _0x1a044d;};'use strict';var _=require(_0xb5fa('0x0'));var util=require(_0xb5fa('0x1'));var logger=require('../../config/logger')(_0xb5fa('0x2'));var moment=require(_0xb5fa('0x3'));var BPromise=require(_0xb5fa('0x4'));var rp=require(_0xb5fa('0x5'));var fs=require('fs');var path=require(_0xb5fa('0x6'));var rimraf=require(_0xb5fa('0x7'));var config=require(_0xb5fa('0x8'));var attributes=require(_0xb5fa('0x9'));module[_0xb5fa('0xa')]=function(_0x44df89,_0x4a0249){return _0x44df89['define'](_0xb5fa('0xb'),attributes,{'tableName':_0xb5fa('0xc'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0xb5fa('0xd'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index 5a1062b..380489d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3ad6=['util','moment','bluebird','ioredis','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','SmsApplication,\x20%s,\x20%s','request\x20sent','debug','SmsApplication,\x20%s,\x20%s,\x20%s','error','message','result','catch','lodash'];(function(_0x2b0f81,_0x3917f0){var _0x5ce74c=function(_0x12dc0d){while(--_0x12dc0d){_0x2b0f81['push'](_0x2b0f81['shift']());}};_0x5ce74c(++_0x3917f0);}(_0x3ad6,0xc5));var _0x63ad=function(_0xd1e9df,_0x5cd235){_0xd1e9df=_0xd1e9df-0x0;var _0x1b33a9=_0x3ad6[_0xd1e9df];return _0x1b33a9;};'use strict';var _=require(_0x63ad('0x0'));var util=require(_0x63ad('0x1'));var moment=require(_0x63ad('0x2'));var BPromise=require(_0x63ad('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x63ad('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x63ad('0x5'));var logger=require(_0x63ad('0x6'))(_0x63ad('0x7'));var config=require('../../config/environment');var jayson=require(_0x63ad('0x8'));var client=jayson[_0x63ad('0x9')][_0x63ad('0xa')]({'port':0x232a});function respondWithRpcPromise(_0xf34bed,_0x5ba585,_0x3088f5){return new BPromise(function(_0x23eca5,_0x215f1c){return client[_0x63ad('0xb')](_0xf34bed,_0x3088f5)[_0x63ad('0xc')](function(_0x20178b){logger[_0x63ad('0xd')](_0x63ad('0xe'),_0x5ba585,_0x63ad('0xf'));logger[_0x63ad('0x10')](_0x63ad('0x11'),_0x5ba585,_0x63ad('0xf'),JSON['stringify'](_0x20178b));if(_0x20178b[_0x63ad('0x12')]){if(_0x20178b['error']['code']===0x1f4){logger['error'](_0x63ad('0xe'),_0x5ba585,_0x20178b[_0x63ad('0x12')][_0x63ad('0x13')]);return _0x215f1c(_0x20178b['error']['message']);}logger[_0x63ad('0x12')](_0x63ad('0xe'),_0x5ba585,_0x20178b['error']['message']);return _0x23eca5(_0x20178b[_0x63ad('0x12')][_0x63ad('0x13')]);}else{logger[_0x63ad('0xd')](_0x63ad('0xe'),_0x5ba585,_0x63ad('0xf'));_0x23eca5(_0x20178b[_0x63ad('0x14')]['message']);}})[_0x63ad('0x15')](function(_0x3d9eae){logger[_0x63ad('0x12')](_0x63ad('0xe'),_0x5ba585,_0x3d9eae);_0x215f1c(_0x3d9eae);});});}
\ No newline at end of file
+var _0xd2f3=['../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','info','SmsApplication,\x20%s,\x20%s','request\x20sent','debug','SmsApplication,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','bluebird','randomstring','ioredis','../../mysqldb'];(function(_0x1c5064,_0x4cebe9){var _0x34740f=function(_0x4f7090){while(--_0x4f7090){_0x1c5064['push'](_0x1c5064['shift']());}};_0x34740f(++_0x4cebe9);}(_0xd2f3,0x103));var _0x3d2f=function(_0x341573,_0x442f1a){_0x341573=_0x341573-0x0;var _0x9ba59=_0xd2f3[_0x341573];return _0x9ba59;};'use strict';var _=require(_0x3d2f('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x3d2f('0x1'));var rs=require(_0x3d2f('0x2'));var fs=require('fs');var Redis=require(_0x3d2f('0x3'));var db=require(_0x3d2f('0x4'))['db'];var utils=require(_0x3d2f('0x5'));var logger=require(_0x3d2f('0x6'))(_0x3d2f('0x7'));var config=require(_0x3d2f('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x3d2f('0x9')][_0x3d2f('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x25e090,_0x398267,_0x1f3f80){return new BPromise(function(_0x1b5749,_0x1c73ac){return client[_0x3d2f('0xb')](_0x25e090,_0x1f3f80)['then'](function(_0x2c2e25){logger[_0x3d2f('0xc')](_0x3d2f('0xd'),_0x398267,_0x3d2f('0xe'));logger[_0x3d2f('0xf')](_0x3d2f('0x10'),_0x398267,_0x3d2f('0xe'),JSON[_0x3d2f('0x11')](_0x2c2e25));if(_0x2c2e25[_0x3d2f('0x12')]){if(_0x2c2e25[_0x3d2f('0x12')]['code']===0x1f4){logger['error'](_0x3d2f('0xd'),_0x398267,_0x2c2e25[_0x3d2f('0x12')][_0x3d2f('0x13')]);return _0x1c73ac(_0x2c2e25[_0x3d2f('0x12')][_0x3d2f('0x13')]);}logger['error'](_0x3d2f('0xd'),_0x398267,_0x2c2e25[_0x3d2f('0x12')]['message']);return _0x1b5749(_0x2c2e25['error']['message']);}else{logger[_0x3d2f('0xc')]('SmsApplication,\x20%s,\x20%s',_0x398267,_0x3d2f('0xe'));_0x1b5749(_0x2c2e25[_0x3d2f('0x14')][_0x3d2f('0x13')]);}})[_0x3d2f('0x15')](function(_0xb35535){logger[_0x3d2f('0x12')](_0x3d2f('0xd'),_0x398267,_0xb35535);_0x1c73ac(_0xb35535);});});}
\ No newline at end of file
index 8c58686..3623ec3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x47d2=['/:id/tags','tracked','sms','smsinteraction:addtags','addTags','put','smsinteraction:update','update','delete','smsinteraction:destroy','destroy','removeTags','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/messages','/:id/download','download','post','create','addMessage'];(function(_0xf10840,_0xad3916){var _0x1fdf7e=function(_0x463be3){while(--_0x463be3){_0xf10840['push'](_0xf10840['shift']());}};_0x1fdf7e(++_0xad3916);}(_0x47d2,0x12c));var _0x247d=function(_0x100b7b,_0x3ecafe){_0x100b7b=_0x100b7b-0x0;var _0x121458=_0x47d2[_0x100b7b];return _0x121458;};'use strict';var multer=require(_0x247d('0x0'));var util=require('util');var path=require(_0x247d('0x1'));var timeout=require(_0x247d('0x2'));var express=require(_0x247d('0x3'));var router=express[_0x247d('0x4')]();var auth=require(_0x247d('0x5'));var interaction=require(_0x247d('0x6'));var config=require('../../config/environment');var controller=require('./smsInteraction.controller');router[_0x247d('0x7')]('/',auth[_0x247d('0x8')](),controller[_0x247d('0x9')]);router[_0x247d('0x7')](_0x247d('0xa'),auth[_0x247d('0x8')](),controller[_0x247d('0xb')]);router[_0x247d('0x7')](_0x247d('0xc'),auth[_0x247d('0x8')](),controller[_0x247d('0xd')]);router['get'](_0x247d('0xe'),auth[_0x247d('0x8')](),controller['getMessages']);router[_0x247d('0x7')](_0x247d('0xf'),auth[_0x247d('0x8')](),controller[_0x247d('0x10')]);router[_0x247d('0x11')]('/',auth[_0x247d('0x8')](),controller[_0x247d('0x12')]);router[_0x247d('0x11')](_0x247d('0xe'),auth[_0x247d('0x8')](),controller[_0x247d('0x13')]);router['post'](_0x247d('0x14'),auth[_0x247d('0x8')](),interaction[_0x247d('0x15')](_0x247d('0x16'),_0x247d('0x17')),controller[_0x247d('0x18')]);router[_0x247d('0x19')]('/:id',auth['isAuthenticated'](),interaction['tracked']('sms',_0x247d('0x1a')),controller[_0x247d('0x1b')]);router[_0x247d('0x1c')](_0x247d('0xc'),auth[_0x247d('0x8')](),interaction['tracked'](_0x247d('0x16'),_0x247d('0x1d')),controller[_0x247d('0x1e')]);router['delete'](_0x247d('0x14'),auth[_0x247d('0x8')](),controller[_0x247d('0x1f')]);module['exports']=router;
\ No newline at end of file
+var _0x76cc=['isAuthenticated','index','/describe','/:id','show','/:id/messages','/:id/download','post','create','addMessage','/:id/tags','sms','smsinteraction:addtags','put','tracked','smsinteraction:update','update','delete','smsinteraction:destroy','destroy','removeTags','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./smsInteraction.controller','get'];(function(_0x1db5e3,_0x520aff){var _0x54cd75=function(_0x38a844){while(--_0x38a844){_0x1db5e3['push'](_0x1db5e3['shift']());}};_0x54cd75(++_0x520aff);}(_0x76cc,0x1b9));var _0xc76c=function(_0x535645,_0x475c49){_0x535645=_0x535645-0x0;var _0x3e2f1e=_0x76cc[_0x535645];return _0x3e2f1e;};'use strict';var multer=require('multer');var util=require(_0xc76c('0x0'));var path=require(_0xc76c('0x1'));var timeout=require(_0xc76c('0x2'));var express=require(_0xc76c('0x3'));var router=express[_0xc76c('0x4')]();var auth=require(_0xc76c('0x5'));var interaction=require(_0xc76c('0x6'));var config=require('../../config/environment');var controller=require(_0xc76c('0x7'));router[_0xc76c('0x8')]('/',auth[_0xc76c('0x9')](),controller[_0xc76c('0xa')]);router[_0xc76c('0x8')](_0xc76c('0xb'),auth[_0xc76c('0x9')](),controller['describe']);router[_0xc76c('0x8')](_0xc76c('0xc'),auth['isAuthenticated'](),controller[_0xc76c('0xd')]);router[_0xc76c('0x8')](_0xc76c('0xe'),auth['isAuthenticated'](),controller['getMessages']);router[_0xc76c('0x8')](_0xc76c('0xf'),auth['isAuthenticated'](),controller['download']);router[_0xc76c('0x10')]('/',auth[_0xc76c('0x9')](),controller[_0xc76c('0x11')]);router['post'](_0xc76c('0xe'),auth[_0xc76c('0x9')](),controller[_0xc76c('0x12')]);router[_0xc76c('0x10')](_0xc76c('0x13'),auth[_0xc76c('0x9')](),interaction['tracked'](_0xc76c('0x14'),_0xc76c('0x15')),controller['addTags']);router[_0xc76c('0x16')](_0xc76c('0xc'),auth[_0xc76c('0x9')](),interaction[_0xc76c('0x17')]('sms',_0xc76c('0x18')),controller[_0xc76c('0x19')]);router[_0xc76c('0x1a')](_0xc76c('0xc'),auth[_0xc76c('0x9')](),interaction[_0xc76c('0x17')](_0xc76c('0x14'),_0xc76c('0x1b')),controller[_0xc76c('0x1c')]);router[_0xc76c('0x1a')]('/:id/tags',auth[_0xc76c('0x9')](),controller[_0xc76c('0x1d')]);module['exports']=router;
\ No newline at end of file
index d5cc762..386ed4e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1c8d=['exports','STRING','DATE','out','ENUM','sequelize','moment'];(function(_0x56e469,_0x134f1f){var _0x459c64=function(_0x5ad2f0){while(--_0x5ad2f0){_0x56e469['push'](_0x56e469['shift']());}};_0x459c64(++_0x134f1f);}(_0x1c8d,0x155));var _0xd1c8=function(_0x6c993a,_0x5ea3ab){_0x6c993a=_0x6c993a-0x0;var _0x27f547=_0x1c8d[_0x6c993a];return _0x27f547;};'use strict';var Sequelize=require(_0xd1c8('0x0'));var moment=require(_0xd1c8('0x1'));module[_0xd1c8('0x2')]={'closed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'closedAt':{'type':Sequelize['DATE']},'disposition':{'type':Sequelize[_0xd1c8('0x3')]},'note':{'type':Sequelize[_0xd1c8('0x3')]},'phone':{'type':Sequelize[_0xd1c8('0x3')]},'read1stAt':{'type':Sequelize[_0xd1c8('0x4')]},'firstMsgDirection':{'type':Sequelize['ENUM']('in',_0xd1c8('0x5')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0xd1c8('0x4')]},'lastMsgDirection':{'type':Sequelize[_0xd1c8('0x6')]('in',_0xd1c8('0x5')),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
+var _0xf6ec=['ENUM','out','sequelize','moment','exports','BOOLEAN','STRING','DATE'];(function(_0x29445e,_0x38cdab){var _0x4e3d1e=function(_0x42c513){while(--_0x42c513){_0x29445e['push'](_0x29445e['shift']());}};_0x4e3d1e(++_0x38cdab);}(_0xf6ec,0x1da));var _0xcf6e=function(_0x35d29f,_0x41813e){_0x35d29f=_0x35d29f-0x0;var _0x1bae4a=_0xf6ec[_0x35d29f];return _0x1bae4a;};'use strict';var Sequelize=require(_0xcf6e('0x0'));var moment=require(_0xcf6e('0x1'));module[_0xcf6e('0x2')]={'closed':{'type':Sequelize[_0xcf6e('0x3')],'defaultValue':![]},'closedAt':{'type':Sequelize['DATE']},'disposition':{'type':Sequelize[_0xcf6e('0x4')]},'note':{'type':Sequelize[_0xcf6e('0x4')]},'phone':{'type':Sequelize[_0xcf6e('0x4')]},'read1stAt':{'type':Sequelize[_0xcf6e('0x5')]},'firstMsgDirection':{'type':Sequelize[_0xcf6e('0x6')]('in',_0xcf6e('0x7')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0xcf6e('0x5')]},'lastMsgDirection':{'type':Sequelize[_0xcf6e('0x6')]('in','out'),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
index f1c2e0b..ad4e03c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf15e=['then','error','name','send','closed','unreadMessages','SmsMessage','Users','map','Tags','TagIds','split','push','catch','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','select','field','color','from','tools_tags','me.SmsInteractionId\x20=\x20i.id','me.direction\x20=\x20\x27in\x27','u.id','user_has_sms_interactions','left_join','users','sms_interactions','cm_contacts','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL','a.id\x20=\x20i.SmsAccountId','sms_messages','expr','parse','advancedFilter','forEach','createdAt','value','dateStart','startOf','day','utc','format','endOf','and','isArray','condition','Messages.count','tableAlias','\x20IN\x20?','\x20=\x20?','LIKE','ContactId','c.firstName','\x20LIKE\x20?','c.lastName','c.email','\x20>\x20?','\x20<\x20?','TagId','filter','isNil','SmsAccountId','i.SmsAccountId\x20IN\x20?','concat','$gte','$lte','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','\x20IS\x20NULL','replace','\x27\x27\x27\x27','i.id\x20LIKE\x20?','i.phone\x20LIKE\x20?','join','MATCH\x20(me.body)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','DESC','group','i.id','Sequelize','QueryTypes','SELECT','clone','COUNT(*)','read','%s\x20=\x200','toString','having','`Messages.count`\x20=\x200','`Messages.count`\x20>\x200','tag','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','it.SmsInteractionId\x20=\x20i.id','t.id\x20=\x20it.TagId','mail_interaction_has_tags','t.id\x20IN\x20?','%s\x20>\x200','keyBy','SmsInteraction','a.key','Account.key','i.*','Contact.firstName','Contact.lastName','Contact.email','c.phone','Contact.phone','c.mobile','Contact.mobile','c.fax','GROUP_CONCAT(DISTINCT\x20t.id)','sms_interaction_has_tags','sequelize','ui.SmsInteractionId\x20IN\x20?','groupBy','all','rows','includeAll','include','merge','options','find','create','body','params','describe','addMessage','ids','findOne','SmsInteractionId','findAll','addTags','setTags','omit','spread','emit','removeTags','download','root','tmp','files','attachments','direction','secret','User','CmContact','Contact','firstName','lastName','SmsAccount','Account','get','<div\x20class=\x22header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h5>Interaction\x20Transcript</h5>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>','30px','<hr\x20class=\x22separator\x22/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22footer\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22left\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>%s</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>{{page}}/{{pages}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22right\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>%s</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>','%s\x20#%d','Sms','YYYY-MM-DD','Owner','N.A.','YYYY-MM-DD\x20HH:mm:ss','closedAt','disposition','Messages','out','fullname','System','toFile','transcript-','.pdf','log','err','unlinkSync','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','redis','localhost','socket.io-emitter','register','sendStatus','end','json','count','offset','limit','status','Content-Range','reject','save','update','destroy'];(function(_0x4b1032,_0x36952e){var _0x5a1d55=function(_0x282e9b){while(--_0x282e9b){_0x4b1032['push'](_0x4b1032['shift']());}};_0x5a1d55(++_0x36952e);}(_0xf15e,0xb9));var _0xef15=function(_0x326462,_0x45f1c3){_0x326462=_0x326462-0x0;var _0x4cc34b=_0xf15e[_0x326462];return _0x4cc34b;};'use strict';var pdf=require(_0xef15('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xef15('0x1'));var zipdir=require(_0xef15('0x2'));var jsonpatch=require(_0xef15('0x3'));var rp=require(_0xef15('0x4'));var moment=require(_0xef15('0x5'));var BPromise=require(_0xef15('0x6'));var Mustache=require('mustache');var util=require(_0xef15('0x7'));var path=require(_0xef15('0x8'));var sox=require(_0xef15('0x9'));var csv=require(_0xef15('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xef15('0xb'));var squel=require(_0xef15('0xc'));var crypto=require(_0xef15('0xd'));var jsforce=require('jsforce');var deskjs=require(_0xef15('0xe'));var toCsv=require(_0xef15('0xa'));var querystring=require(_0xef15('0xf'));var Papa=require(_0xef15('0x10'));var Redis=require('ioredis');var authService=require(_0xef15('0x11'));var qs=require(_0xef15('0x12'));var hardwareService=require(_0xef15('0x13'));var logger=require('../../config/logger')(_0xef15('0x14'));var utils=require(_0xef15('0x15'));var config=require(_0xef15('0x16'));var db=require(_0xef15('0x17'))['db'];config[_0xef15('0x18')]=_['defaults'](config['redis'],{'host':_0xef15('0x19'),'port':0x18eb});var socket=require(_0xef15('0x1a'))(new Redis(config[_0xef15('0x18')]));require('./smsInteraction.socket')[_0xef15('0x1b')](socket);function respondWithStatusCode(_0x536148,_0x1ee1fc){_0x1ee1fc=_0x1ee1fc||0xcc;return function(_0x28896d){if(_0x28896d){return _0x536148[_0xef15('0x1c')](_0x1ee1fc);}return _0x536148['status'](_0x1ee1fc)[_0xef15('0x1d')]();};}function respondWithResult(_0x5de063,_0x5b526f){_0x5b526f=_0x5b526f||0xc8;return function(_0x3122ee){if(_0x3122ee){return _0x5de063['status'](_0x5b526f)[_0xef15('0x1e')](_0x3122ee);}};}function respondWithFilteredResult(_0x153ca2,_0x3bf2ff){return function(_0x2454a9){if(_0x2454a9){var _0x437843=_0x2454a9[_0xef15('0x1f')],_0x4c086a=_0x3bf2ff[_0xef15('0x20')],_0x393047=_0x3bf2ff['offset']+_0x3bf2ff[_0xef15('0x21')],_0x2ea603;if(_0x393047>=_0x437843){_0x393047=_0x437843;_0x2ea603=0xc8;}else{_0x2ea603=0xce;}_0x153ca2[_0xef15('0x22')](_0x2ea603);return _0x153ca2['set'](_0xef15('0x23'),_0x4c086a+'-'+_0x393047+'/'+_0x437843)[_0xef15('0x1e')](_0x2454a9);}return null;};}function patchUpdates(_0x47f78c){return function(_0x57bea0){try{jsonpatch['apply'](_0x57bea0,_0x47f78c,!![]);}catch(_0x4280e3){return BPromise[_0xef15('0x24')](_0x4280e3);}return _0x57bea0[_0xef15('0x25')]();};}function saveUpdates(_0x564a5f,_0x33f8de){return function(_0x592ec5){if(_0x592ec5){return _0x592ec5[_0xef15('0x26')](_0x564a5f)['then'](function(_0x539709){return _0x539709;});}return null;};}function removeEntity(_0x23c6a8,_0x10c887){return function(_0x54163e){if(_0x54163e){return _0x54163e[_0xef15('0x27')]()[_0xef15('0x28')](function(){_0x23c6a8['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x220b6d,_0x172f5b){return function(_0x165bec){if(!_0x165bec){_0x220b6d[_0xef15('0x1c')](0x194);}return _0x165bec;};}function handleError(_0xc91dd3,_0x14e1bc){_0x14e1bc=_0x14e1bc||0x1f4;return function(_0x418d77){logger[_0xef15('0x29')](_0x418d77['stack']);if(_0x418d77[_0xef15('0x2a')]){delete _0x418d77['name'];}_0xc91dd3['status'](_0x14e1bc)[_0xef15('0x2b')](_0x418d77);};}function getInteractionUnreadMessages(_0x464612){return new BPromise(function(_0x41aab5,_0x144d72){try{if(_0x464612[_0xef15('0x2c')]){_0x464612[_0xef15('0x2d')]=0x0;_0x41aab5(_0x464612);}else{return db[_0xef15('0x2e')][_0xef15('0x1f')]({'where':{'SmsInteractionId':_0x464612['id'],'direction':'in','read':![]}})['then'](function(_0x826a0d){_0x464612[_0xef15('0x2d')]=_0x826a0d;_0x41aab5(_0x464612);});}}catch(_0x5ab7fd){_0x144d72(_0x5ab7fd);}});}function getInteractionUsers(_0x40cd9e,_0x170c50){return new BPromise(function(_0x4b894f,_0x2ee2b3){try{if(_0x170c50[_0x40cd9e['id']]){_0x40cd9e[_0xef15('0x2f')]=_[_0xef15('0x30')](_0x170c50[_0x40cd9e['id']],function(_0x1fa054){return{'id':_0x1fa054['id']};});}}catch(_0xbe1723){_0x2ee2b3(_0xbe1723);}_0x4b894f(_0x40cd9e);});}function getInteractionTags(_0x318c29,_0x44e07d){return new BPromise(function(_0x234739,_0x2f2eee){try{if(_0x318c29['TagIds']){_0x318c29[_0xef15('0x31')]=[];_0x318c29[_0xef15('0x32')][_0xef15('0x33')](',')['forEach'](function(_0x3db124){_0x318c29[_0xef15('0x31')][_0xef15('0x34')](_0x44e07d[_0x3db124]);});}delete _0x318c29[_0xef15('0x32')];}catch(_0x5123ab){_0x2f2eee(_0x5123ab);}_0x234739(_0x318c29);});}function updateSmsInteraction(_0x200311,_0x1575cb,_0x228d3d){return new BPromise(function(_0x1d6a6b,_0x4f94bb){return getInteractionUnreadMessages(_0x200311)[_0xef15('0x28')](function(_0x2c2c34){return getInteractionUsers(_0x2c2c34,_0x228d3d);})['then'](function(_0x49535b){return getInteractionTags(_0x49535b,_0x1575cb);})[_0xef15('0x28')](function(_0x1044ac){_0x1d6a6b(_0x1044ac);})[_0xef15('0x35')](function(_0x5b8126){_0x4f94bb(_0x5b8126);});});}exports[_0xef15('0x36')]=function(_0x3ee1e7,_0x2ed023){var _0x28e92d={},_0x18e607={},_0x194f8f={'count':0x0,'rows':[]};var _0xc0e1e=db['SmsInteraction'][_0xef15('0x37')];_0x18e607[_0xef15('0x38')]=_[_0xef15('0x39')](_0xc0e1e);_0x18e607[_0xef15('0x3a')]=_['keys'](_0x3ee1e7[_0xef15('0x3a')]);_0x18e607[_0xef15('0x3b')]=_[_0xef15('0x3c')](_0x18e607['model'],_0x18e607[_0xef15('0x3a')]);_0x28e92d[_0xef15('0x3d')]=_[_0xef15('0x3c')](_0x18e607[_0xef15('0x38')],qs[_0xef15('0x3e')](_0x3ee1e7['query'][_0xef15('0x3e')]));_0x28e92d[_0xef15('0x3d')]=_0x28e92d[_0xef15('0x3d')][_0xef15('0x3f')]?_0x28e92d[_0xef15('0x3d')]:_0x18e607[_0xef15('0x38')];if(!_0x3ee1e7['query'][_0xef15('0x40')](_0xef15('0x41'))){_0x28e92d['limit']=qs[_0xef15('0x21')](_0x3ee1e7[_0xef15('0x3a')][_0xef15('0x21')]);_0x28e92d[_0xef15('0x20')]=qs['offset'](_0x3ee1e7[_0xef15('0x3a')][_0xef15('0x20')]);}_0x28e92d[_0xef15('0x42')]=qs['sort'](_0x3ee1e7[_0xef15('0x3a')][_0xef15('0x43')]);_0x28e92d[_0xef15('0x44')]=qs['filters'](_['pick'](_0x3ee1e7['query'],_0x18e607[_0xef15('0x3b')]));var _0x219416=[];var _0x4cad03=squel[_0xef15('0x45')]()[_0xef15('0x46')]('id')[_0xef15('0x46')](_0xef15('0x2a'))[_0xef15('0x46')](_0xef15('0x47'))[_0xef15('0x48')](_0xef15('0x49'));var _0x35c72c=squel[_0xef15('0x45')]()[_0xef15('0x46')]('COUNT(*)')[_0xef15('0x48')]('sms_messages','me')[_0xef15('0x44')](_0xef15('0x4a'))[_0xef15('0x44')](_0xef15('0x4b'))[_0xef15('0x44')]('me.read\x20=\x20false');var _0x2b9f6d=squel[_0xef15('0x45')]()[_0xef15('0x46')](_0xef15('0x4c'))[_0xef15('0x46')]('ui.SmsInteractionId')['from'](_0xef15('0x4d'),'ui')[_0xef15('0x4e')](_0xef15('0x4f'),'u','u.id\x20=\x20ui.UserId');var _0x439d85=squel[_0xef15('0x45')]()[_0xef15('0x48')](_0xef15('0x50'),'i')[_0xef15('0x4e')](_0xef15('0x51'),'c',_0xef15('0x52'))[_0xef15('0x4e')](_0xef15('0x4f'),'o','o.id\x20=\x20i.UserId')[_0xef15('0x4e')]('sms_accounts','a',_0xef15('0x53'))[_0xef15('0x4e')](_0xef15('0x54'),'me','me.SmsInteractionId\x20=\x20i.id');var _0x5f2e2c=squel[_0xef15('0x55')]();if(_0x3ee1e7['query']['advancedFilter']){var _0x5f4831=JSON[_0xef15('0x56')](_0x3ee1e7[_0xef15('0x3a')][_0xef15('0x57')]);_['keys'](_0x5f4831)[_0xef15('0x58')](function(_0x4f38a4){var _0x53bbd3=_0x5f4831[_0x4f38a4];if(_0x4f38a4===_0xef15('0x59')){var _0x1575a4=moment(_0x53bbd3[_0xef15('0x5a')][_0xef15('0x5b')])[_0xef15('0x5c')](_0xef15('0x5d'))[_0xef15('0x5e')]()[_0xef15('0x5f')]();var _0x1ede91=moment(_0x1ede91)[_0xef15('0x5e')]()[_0xef15('0x60')](_0xef15('0x5d'))['format']();_0x5f2e2c[_0xef15('0x61')]('i.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x1575a4,_0x1ede91);}else{if(_[_0xef15('0x62')](_0x53bbd3[_0xef15('0x63')])){_0x53bbd3[_0xef15('0x63')][_0xef15('0x58')](function(_0x478fa8){switch(_0x53bbd3[_0xef15('0x63')]['value']){case'IS':if(_0x4f38a4!=='TagId'&&_0x4f38a4!==_0xef15('0x64')){if(_[_0xef15('0x62')](_0x53bbd3['value'])&&_0x53bbd3[_0xef15('0x5a')]['length']>0x1){_0x5f2e2c[_0xef15('0x61')](_0x53bbd3[_0xef15('0x65')]+'.'+_0x4f38a4+_0xef15('0x66'),_0x53bbd3[_0xef15('0x5a')]);}else{_0x5f2e2c['and'](_0x53bbd3[_0xef15('0x65')]+'.'+_0x4f38a4+_0xef15('0x67'),_0x53bbd3[_0xef15('0x5a')][0x0]);}}break;case'=':_0x5f2e2c[_0xef15('0x61')](_0x53bbd3[_0xef15('0x65')]+'.'+_0x4f38a4+'\x20=\x20?',_0x53bbd3[_0xef15('0x5a')]);break;case _0xef15('0x68'):if(_0x4f38a4===_0xef15('0x69')){_0x5f2e2c[_0xef15('0x61')](_0xef15('0x6a')+_0xef15('0x6b'),'%'+_0x53bbd3[_0xef15('0x5a')]+'%');_0x5f2e2c['or'](_0xef15('0x6c')+'\x20LIKE\x20?','%'+_0x53bbd3['value']+'%');_0x5f2e2c['or'](_0xef15('0x6d')+'\x20LIKE\x20?','%'+_0x53bbd3[_0xef15('0x5a')]+'%');}else{_0x5f2e2c[_0xef15('0x61')](_0x53bbd3[_0xef15('0x65')]+'.'+_0x4f38a4+_0xef15('0x6b'),'%'+_0x53bbd3[_0xef15('0x5a')]+'%');}break;case'>':_0x5f2e2c[_0xef15('0x61')](_0x53bbd3['tableAlias']+'.'+_0x4f38a4+_0xef15('0x6e'),_0x53bbd3[_0xef15('0x5a')]);break;case'<':_0x5f2e2c[_0xef15('0x61')](_0x53bbd3[_0xef15('0x65')]+'.'+_0x4f38a4+_0xef15('0x6f'),_0x53bbd3['value']);break;}});}else{switch(_0x53bbd3[_0xef15('0x63')]['value']){case'IS':if(_0x4f38a4!==_0xef15('0x70')&&_0x4f38a4!=='Messages.count'){if(_['isArray'](_0x53bbd3['value'])&&_0x53bbd3[_0xef15('0x5a')][_0xef15('0x3f')]>0x1){_0x5f2e2c[_0xef15('0x61')](_0x53bbd3['tableAlias']+'.'+_0x4f38a4+_0xef15('0x66'),_0x53bbd3['value']);}else{_0x5f2e2c[_0xef15('0x61')](_0x53bbd3['tableAlias']+'.'+_0x4f38a4+_0xef15('0x67'),_0x53bbd3[_0xef15('0x5a')][0x0]);}}break;case'=':_0x5f2e2c[_0xef15('0x61')](_0x53bbd3[_0xef15('0x65')]+'.'+_0x4f38a4+_0xef15('0x67'),_0x53bbd3[_0xef15('0x5a')]);break;case _0xef15('0x68'):if(_0x4f38a4===_0xef15('0x69')){_0x5f2e2c['and'](_0xef15('0x6a')+_0xef15('0x6b'),'%'+_0x53bbd3['value']+'%');_0x5f2e2c['or'](_0xef15('0x6c')+_0xef15('0x6b'),'%'+_0x53bbd3[_0xef15('0x5a')]+'%');_0x5f2e2c['or'](_0xef15('0x6d')+'\x20LIKE\x20?','%'+_0x53bbd3[_0xef15('0x5a')]+'%');}else{_0x5f2e2c[_0xef15('0x61')](_0x53bbd3['tableAlias']+'.'+_0x4f38a4+_0xef15('0x6b'),'%'+_0x53bbd3[_0xef15('0x5a')]+'%');}break;case'>':_0x5f2e2c['and'](_0x53bbd3[_0xef15('0x65')]+'.'+_0x4f38a4+_0xef15('0x6e'),_0x53bbd3['value']);break;case'<':_0x5f2e2c[_0xef15('0x61')](_0x53bbd3[_0xef15('0x65')]+'.'+_0x4f38a4+_0xef15('0x6f'),_0x53bbd3[_0xef15('0x5a')]);break;}}}});}else{var _0x3e0032=_(Object['keys'](_0x3ee1e7[_0xef15('0x3a')]))[_0xef15('0x30')](function(_0x247ce6){return _0xc0e1e[_0xef15('0x40')](_0x247ce6)?_0x247ce6:undefined;})[_0xef15('0x71')](function(_0x5b66b6){return!_[_0xef15('0x72')](_0x5b66b6);})[_0xef15('0x5a')]();if(!_['isEmpty'](_0x3e0032)){_0x3e0032[_0xef15('0x58')](function(_0x4a233e){if(_0x4a233e===_0xef15('0x73')){_0x439d85[_0xef15('0x44')](_0xef15('0x74'),[][_0xef15('0x75')](_0x3ee1e7[_0xef15('0x3a')][_0x4a233e]));}else if(_0x4a233e===_0xef15('0x59')){var _0x44ab40=JSON[_0xef15('0x56')](_0x3ee1e7['query'][_0x4a233e])[_0xef15('0x76')];var _0x3ee014=JSON['parse'](_0x3ee1e7[_0xef15('0x3a')][_0x4a233e])[_0xef15('0x77')];_0x439d85['where'](_0xef15('0x78'),_0x44ab40,_0x3ee014);}else{if(_0x3ee1e7[_0xef15('0x3a')][_0x4a233e]==='null'){_0x439d85[_0xef15('0x44')]('i.'+_0x4a233e+_0xef15('0x79'));}else{_0x439d85[_0xef15('0x44')]('i.'+_0x4a233e+_0xef15('0x67'),_0x3ee1e7[_0xef15('0x3a')][_0x4a233e]);}}});}if(_0x3ee1e7[_0xef15('0x3a')]['filter']){var _0x130613=_0x3ee1e7[_0xef15('0x3a')][_0xef15('0x71')][_0xef15('0x7a')]('\x5c','\x5c\x5c')[_0xef15('0x7a')]('\x27\x27',_0xef15('0x7b'));if(qs['isNumeric'](_0x130613)){_0x5f2e2c['or'](_0xef15('0x7c'),_0x130613+'%')['or'](_0xef15('0x7d'),_0x130613+'%');}else{var _0x5b0ccc=[];_0x130613[_0xef15('0x33')]('\x20')[_0xef15('0x58')](function(_0x1f4610){_0x5b0ccc[_0xef15('0x34')]('+'+_0x1f4610['toString']());});var _0x511a79=_0x5b0ccc[_0xef15('0x7e')]('\x20');_0x5f2e2c['or'](_0xef15('0x7f'),_0x511a79)['or']('CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?',_0x130613+'%');}}}_0x439d85['where'](_0x5f2e2c);if(_0x28e92d[_0xef15('0x42')]){_0x28e92d[_0xef15('0x42')]['forEach'](function(_0x497ca1){_0x439d85[_0xef15('0x42')]('i.'+_0x497ca1[0x0],_0x497ca1[0x1]===_0xef15('0x80')?![]:!![]);});}_0x439d85[_0xef15('0x81')](_0xef15('0x82'));var _0x1c52c7={'type':db[_0xef15('0x83')][_0xef15('0x84')][_0xef15('0x85')],'raw':!![]};var _0x44f924=_0x439d85[_0xef15('0x86')]()[_0xef15('0x46')](_0xef15('0x87'));if(!_0x3ee1e7[_0xef15('0x3a')][_0xef15('0x57')]){if(_0x3ee1e7[_0xef15('0x3a')][_0xef15('0x88')]){if(_0x3ee1e7['query'][_0xef15('0x88')]==0x1){_0x44f924[_0xef15('0x44')](util['format'](_0xef15('0x89'),_0x35c72c[_0xef15('0x8a')]()));_0x439d85[_0xef15('0x8b')](_0xef15('0x8c'));}else{_0x44f924['where'](util[_0xef15('0x5f')]('%s\x20>\x200',_0x35c72c[_0xef15('0x8a')]()));_0x439d85[_0xef15('0x8b')](_0xef15('0x8d'));}}if(_0x3ee1e7[_0xef15('0x3a')]['tag']){var _0x350f76=_[_0xef15('0x62')](_0x3ee1e7[_0xef15('0x3a')][_0xef15('0x8e')])?_0x3ee1e7[_0xef15('0x3a')][_0xef15('0x8e')]:new Array(_0x3ee1e7[_0xef15('0x3a')][_0xef15('0x8e')]);var _0x4f3aeb=squel[_0xef15('0x55')]();_0x350f76[_0xef15('0x58')](function(_0x418810){_0x4f3aeb['or'](_0xef15('0x8f'),'%,'+_0x418810+',%');});_0x439d85[_0xef15('0x8b')](_0x4f3aeb);_0x44f924[_0xef15('0x4e')]('sms_interaction_has_tags','it',_0xef15('0x90'));_0x44f924['left_join']('tools_tags','t',_0xef15('0x91'));_0x44f924[_0xef15('0x44')]('t.id\x20IN\x20?',_0x350f76);}}else{var _0x5f4831=JSON['parse'](_0x3ee1e7['query'][_0xef15('0x57')]);_[_0xef15('0x39')](_0x5f4831)[_0xef15('0x58')](function(_0x16ad2a){var _0x2d8700=_0x5f4831[_0x16ad2a];if(_0x16ad2a==='TagId'){var _0x23768a=_0x2d8700[_0xef15('0x5a')];var _0x17b551=squel[_0xef15('0x55')]();_0x23768a[_0xef15('0x58')](function(_0x5f267d){_0x17b551['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x5f267d+',%');});_0x439d85[_0xef15('0x8b')](_0x17b551);_0x44f924[_0xef15('0x4e')](_0xef15('0x92'),'it','it.MailInteractionId\x20=\x20i.id');_0x44f924[_0xef15('0x4e')](_0xef15('0x49'),'t','t.id\x20=\x20it.TagId');_0x44f924[_0xef15('0x44')](_0xef15('0x93'),_0x23768a);}else if(_0x16ad2a===_0xef15('0x64')){if(_0x2d8700[_0xef15('0x5a')][_0xef15('0x3f')]===0x1){if(_0x2d8700[_0xef15('0x5a')][0x0]===0x1){_0x44f924[_0xef15('0x44')](util[_0xef15('0x5f')](_0xef15('0x89'),_0x35c72c[_0xef15('0x8a')]()));_0x439d85['having'](_0xef15('0x8c'));}else{_0x44f924[_0xef15('0x44')](util[_0xef15('0x5f')](_0xef15('0x94'),_0x35c72c[_0xef15('0x8a')]()));_0x439d85['having'](_0xef15('0x8d'));}}}});}db['sequelize'][_0xef15('0x3a')](_0x44f924['toString'](),_0x1c52c7)[_0xef15('0x28')](function(_0x5c29ad){_0x194f8f[_0xef15('0x1f')]=_0x5c29ad[_0xef15('0x3f')];if(_0x194f8f[_0xef15('0x1f')]===0x0)return[];return db['sequelize'][_0xef15('0x3a')](_0x4cad03['toString'](),_0x1c52c7)[_0xef15('0x28')](function(_0x3385b8){_0x219416=_[_0xef15('0x95')](_0x3385b8,'id');_0x1c52c7=_['merge'](_0x1c52c7,{'model':db[_0xef15('0x96')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x439d85[_0xef15('0x46')](_0xef15('0x97'),_0xef15('0x98'));_0x439d85[_0xef15('0x46')](_0xef15('0x99'));_0x439d85['field']('c.firstName',_0xef15('0x9a'));_0x439d85[_0xef15('0x46')](_0xef15('0x6c'),_0xef15('0x9b'));_0x439d85[_0xef15('0x46')]('c.email',_0xef15('0x9c'));_0x439d85[_0xef15('0x46')](_0xef15('0x9d'),_0xef15('0x9e'));_0x439d85[_0xef15('0x46')](_0xef15('0x9f'),_0xef15('0xa0'));_0x439d85[_0xef15('0x46')](_0xef15('0xa1'),'Contact.fax');_0x439d85['field'](_0xef15('0xa2'),'TagIds');_0x439d85[_0xef15('0x4e')](_0xef15('0xa3'),'it','it.SmsInteractionId\x20=\x20i.id');_0x439d85['left_join'](_0xef15('0x49'),'t',_0xef15('0x91'));_0x439d85['limit'](_0x28e92d[_0xef15('0x21')]);_0x439d85[_0xef15('0x20')](_0x28e92d[_0xef15('0x20')]);return db[_0xef15('0xa4')][_0xef15('0x3a')](_0x439d85[_0xef15('0x8a')](),_0x1c52c7);})[_0xef15('0x28')](function(_0x4e7a48){_0x2b9f6d['where'](_0xef15('0xa5'),_[_0xef15('0x30')](_0x4e7a48,'id'));return db[_0xef15('0xa4')][_0xef15('0x3a')](_0x2b9f6d[_0xef15('0x8a')](),_0x1c52c7)['then'](function(_0x154fac){var _0x24d2ef=_[_0xef15('0xa6')](_0x154fac,'SmsInteractionId');var _0x1de597=[];_0x4e7a48[_0xef15('0x58')](function(_0x11a409){_0x1de597[_0xef15('0x34')](updateSmsInteraction(_0x11a409,_0x219416,_0x24d2ef));});return BPromise[_0xef15('0xa7')](_0x1de597);});});})['then'](function(_0x50224e){_0x194f8f[_0xef15('0xa8')]=_0x50224e;return _0x194f8f;})[_0xef15('0x28')](respondWithFilteredResult(_0x2ed023,_0x28e92d))[_0xef15('0x35')](handleError(_0x2ed023,null));};exports['show']=function(_0x16ad71,_0x4826e0){var _0x3d951a={'raw':![],'where':{'id':_0x16ad71['params']['id']}},_0x32b9ba={};_0x32b9ba[_0xef15('0x38')]=_[_0xef15('0x39')](db[_0xef15('0x96')][_0xef15('0x37')]);_0x32b9ba[_0xef15('0x3a')]=_['keys'](_0x16ad71[_0xef15('0x3a')]);_0x32b9ba[_0xef15('0x3b')]=_[_0xef15('0x3c')](_0x32b9ba[_0xef15('0x38')],_0x32b9ba[_0xef15('0x3a')]);_0x3d951a['attributes']=_[_0xef15('0x3c')](_0x32b9ba[_0xef15('0x38')],qs['fields'](_0x16ad71[_0xef15('0x3a')][_0xef15('0x3e')]));_0x3d951a[_0xef15('0x3d')]=_0x3d951a[_0xef15('0x3d')][_0xef15('0x3f')]?_0x3d951a[_0xef15('0x3d')]:_0x32b9ba['model'];if(_0x16ad71[_0xef15('0x3a')][_0xef15('0xa9')]){_0x3d951a[_0xef15('0xaa')]=[{'all':!![]}];}_0x3d951a=_[_0xef15('0xab')]({},_0x3d951a,_0x16ad71[_0xef15('0xac')]);return db[_0xef15('0x96')][_0xef15('0xad')](_0x3d951a)['then'](handleEntityNotFound(_0x4826e0,null))[_0xef15('0x28')](respondWithResult(_0x4826e0,null))[_0xef15('0x35')](handleError(_0x4826e0,null));};exports[_0xef15('0xae')]=function(_0x11f002,_0x36d743){return db['SmsInteraction'][_0xef15('0xae')](_0x11f002[_0xef15('0xaf')],{})[_0xef15('0x28')](respondWithResult(_0x36d743,0xc9))[_0xef15('0x35')](handleError(_0x36d743,null));};exports[_0xef15('0x26')]=function(_0x32a929,_0x49e17a){if(_0x32a929[_0xef15('0xaf')]['id']){delete _0x32a929[_0xef15('0xaf')]['id'];}return db['SmsInteraction']['find']({'where':{'id':_0x32a929[_0xef15('0xb0')]['id']}})['then'](handleEntityNotFound(_0x49e17a,null))[_0xef15('0x28')](saveUpdates(_0x32a929[_0xef15('0xaf')],null))['then'](respondWithResult(_0x49e17a,null))[_0xef15('0x35')](handleError(_0x49e17a,null));};exports['destroy']=function(_0xa33eb9,_0x15cc09){return db[_0xef15('0x96')][_0xef15('0xad')]({'where':{'id':_0xa33eb9['params']['id']}})[_0xef15('0x28')](handleEntityNotFound(_0x15cc09,null))['then'](removeEntity(_0x15cc09,null))[_0xef15('0x35')](handleError(_0x15cc09,null));};exports[_0xef15('0xb1')]=function(_0x3406e2,_0x261413){return db[_0xef15('0x96')]['describe']()[_0xef15('0x28')](respondWithResult(_0x261413,null))[_0xef15('0x35')](handleError(_0x261413,null));};exports[_0xef15('0xb2')]=function(_0x5d08ae,_0xb72f89,_0x587794){return db[_0xef15('0x2e')][_0xef15('0xad')]({'where':{'id':_0x5d08ae[_0xef15('0xb0')]['id']}})[_0xef15('0x28')](handleEntityNotFound(_0xb72f89,null))['then'](function(_0x4a72de){if(_0x4a72de){return _0x4a72de[_0xef15('0xb2')](_0x5d08ae[_0xef15('0xaf')][_0xef15('0xb3')],_['omit'](_0x5d08ae[_0xef15('0xaf')],[_0xef15('0xb3'),'id'])||{});}})[_0xef15('0x28')](respondWithResult(_0xb72f89,null))['catch'](handleError(_0xb72f89,null));};exports['getMessages']=function(_0x4c881f,_0x1551aa,_0x24e676){var _0x1a0f99={'raw':![],'where':{}};var _0x43c20e={};var _0x42d954={'count':0x0,'rows':[]};return db[_0xef15('0x96')][_0xef15('0xb4')]({'where':{'id':_0x4c881f[_0xef15('0xb0')]['id']}})['then'](handleEntityNotFound(_0x1551aa,null))[_0xef15('0x28')](function(_0x2e969c){if(_0x2e969c){_0x43c20e['model']=_[_0xef15('0x39')](db[_0xef15('0x2e')][_0xef15('0x37')]);_0x43c20e[_0xef15('0x3a')]=_['keys'](_0x4c881f['query']);_0x43c20e[_0xef15('0x3b')]=_[_0xef15('0x3c')](_0x43c20e['model'],_0x43c20e[_0xef15('0x3a')]);_0x1a0f99[_0xef15('0x3d')]=_[_0xef15('0x3c')](_0x43c20e[_0xef15('0x38')],qs[_0xef15('0x3e')](_0x4c881f['query']['fields']));_0x1a0f99['attributes']=_0x1a0f99[_0xef15('0x3d')][_0xef15('0x3f')]?_0x1a0f99[_0xef15('0x3d')]:_0x43c20e[_0xef15('0x38')];if(!_0x4c881f['query'][_0xef15('0x40')](_0xef15('0x41'))){_0x1a0f99[_0xef15('0x21')]=qs[_0xef15('0x21')](_0x4c881f['query'][_0xef15('0x21')]);_0x1a0f99['offset']=qs[_0xef15('0x20')](_0x4c881f['query'][_0xef15('0x20')]);}_0x1a0f99['order']=qs['sort'](_0x4c881f[_0xef15('0x3a')][_0xef15('0x43')]);_0x1a0f99['where']=qs['filters'](_['pick'](_0x4c881f[_0xef15('0x3a')],_0x43c20e[_0xef15('0x3b')]));_0x1a0f99[_0xef15('0x44')][_0xef15('0xb5')]=_0x2e969c['id'];if(_0x4c881f[_0xef15('0x3a')][_0xef15('0x71')]){_0x1a0f99['where']=_['merge'](_0x1a0f99[_0xef15('0x44')],{'$or':_['map'](_0x1a0f99[_0xef15('0x3d')],function(_0x18588a){var _0x3fdae6={};_0x3fdae6[_0x18588a]={'$like':'%'+_0x4c881f[_0xef15('0x3a')][_0xef15('0x71')]+'%'};return _0x3fdae6;})});}if(_0x4c881f['query']['$gte']){var _0x78cfd=_0x4c881f['query'][_0xef15('0x76')][_0xef15('0x33')](',');var _0x18f333={};_0x18f333[_0x78cfd[0x0]]={'$gte':moment(_0x78cfd[0x1])[_0xef15('0x5f')]('YYYY-MM-DD\x20HH:mm:ss')};_0x1a0f99[_0xef15('0x44')]=_[_0xef15('0xab')](_0x1a0f99['where'],_0x18f333);}_0x1a0f99=_[_0xef15('0xab')]({},_0x1a0f99,_0x4c881f[_0xef15('0xac')]);return db[_0xef15('0x2e')][_0xef15('0x1f')]({'where':_0x1a0f99['where']})[_0xef15('0x28')](function(_0x47c6fa){_0x42d954[_0xef15('0x1f')]=_0x47c6fa;if(_0x4c881f[_0xef15('0x3a')][_0xef15('0xa9')]){_0x1a0f99['include']=[{'all':!![]}];}return db[_0xef15('0x2e')][_0xef15('0xb6')](_0x1a0f99);})['then'](function(_0xea4de9){_0x42d954[_0xef15('0xa8')]=_0xea4de9;return _0x42d954;});}})[_0xef15('0x28')](respondWithFilteredResult(_0x1551aa,_0x1a0f99))[_0xef15('0x35')](handleError(_0x1551aa,null));};exports[_0xef15('0xb7')]=function(_0x4dbcb3,_0x359309,_0xd6335c){return db[_0xef15('0x96')]['find']({'where':{'id':_0x4dbcb3[_0xef15('0xb0')]['id']}})[_0xef15('0x28')](handleEntityNotFound(_0x359309,null))[_0xef15('0x28')](function(_0x14f09f){if(_0x14f09f){return _0x14f09f[_0xef15('0xb8')](_0x4dbcb3[_0xef15('0xaf')][_0xef15('0xb3')],_[_0xef15('0xb9')](_0x4dbcb3['body'],[_0xef15('0xb3'),'id'])||{})[_0xef15('0xba')](function(){return db['Tag'][_0xef15('0xb6')]({'attributes':['id','name',_0xef15('0x47')],'where':{'id':_0x4dbcb3[_0xef15('0xaf')][_0xef15('0xb3')]}});})[_0xef15('0x28')](function(_0x280ddd){socket[_0xef15('0xbb')]('smsInteractionTags:save',{'id':Number(_0x4dbcb3[_0xef15('0xb0')]['id']),'tags':_0x280ddd||[]});return{'id':Number(_0x4dbcb3[_0xef15('0xb0')]['id']),'tags':_0x280ddd||[]};});}})[_0xef15('0x28')](respondWithResult(_0x359309,null))[_0xef15('0x35')](handleError(_0x359309,null));};exports[_0xef15('0xbc')]=function(_0x3ae5ac,_0x3ce011,_0x205daa){return db[_0xef15('0x96')][_0xef15('0xad')]({'where':{'id':_0x3ae5ac[_0xef15('0xb0')]['id']}})[_0xef15('0x28')](handleEntityNotFound(_0x3ce011,null))['then'](function(_0x23dacd){if(_0x23dacd){return _0x23dacd[_0xef15('0xbc')](_0x3ae5ac[_0xef15('0x3a')][_0xef15('0xb3')]);}})[_0xef15('0x28')](respondWithStatusCode(_0x3ce011,null))[_0xef15('0x35')](handleError(_0x3ce011,null));};exports[_0xef15('0xbd')]=function(_0x4d1e3a,_0xfc8384){var _0x830303=moment()['unix']()[_0xef15('0x8a')]();var _0x487717=path[_0xef15('0x7e')](config[_0xef15('0xbe')],'server','files',_0xef15('0xbf'));var _0x182d1c=path[_0xef15('0x7e')](config[_0xef15('0xbe')],'server',_0xef15('0xc0'),_0xef15('0xc1'));var _0x2410b0=path[_0xef15('0x7e')](_0x487717,_0x830303);var _0x1406db=util[_0xef15('0x5f')]('transcript-%d-%s.zip',_0x4d1e3a['params']['id'],_0x830303);var _0x4ddf79=path[_0xef15('0x7e')](_0x487717,_0x1406db);var _0x29b47f=![];return db[_0xef15('0x96')][_0xef15('0xad')]({'where':{'id':_0x4d1e3a[_0xef15('0xb0')]['id']},'include':[{'model':db[_0xef15('0x2e')],'as':'Messages','attributes':['id',_0xef15('0xaf'),_0xef15('0x59'),_0xef15('0xc2'),_0xef15('0xc3')],'include':[{'model':db[_0xef15('0xc4')],'as':_0xef15('0xc4'),'attributes':['id','fullname'],'raw':!![]},{'model':db[_0xef15('0xc5')],'as':_0xef15('0xc6'),'attributes':['id',_0xef15('0xc7'),_0xef15('0xc8')],'raw':!![]}]},{'model':db[_0xef15('0xc9')],'as':_0xef15('0xca'),'attributes':['id',_0xef15('0x2a')]},{'model':db[_0xef15('0xc4')],'as':'Owner','attributes':['id','fullname']}]})[_0xef15('0x28')](handleEntityNotFound(_0xfc8384,null))['then'](function(_0x4efee7){if(_0x4efee7){var _0x221e27=_0x4efee7[_0xef15('0xcb')]({'plain':!![]});_0x29b47f=!![];var _0x37d00d={'format':'A4','border':'10px','header':{'height':'40px','contents':{'first':_0xef15('0xcc')}},'footer':{'height':_0xef15('0xcd'),'contents':{'default':util[_0xef15('0x5f')](_0xef15('0xce'),util['format'](_0xef15('0xcf'),_0xef15('0xd0'),_0x221e27['id']),moment()[_0xef15('0x5f')](_0xef15('0xd1'))[_0xef15('0x8a')]())}}};fs['mkdirSync'](_0x2410b0);var _0x3ec47a={'channel':_0xef15('0xd0'),'account':_0x221e27['Account'][_0xef15('0x2a')],'agent':_0x221e27[_0xef15('0xd2')]?_0x221e27[_0xef15('0xd2')]['fullname']:_0xef15('0xd3'),'createdAt':moment(_0x221e27[_0xef15('0x59')])['format'](_0xef15('0xd4'))[_0xef15('0x8a')](),'closedAt':_0x221e27[_0xef15('0x2c')]?moment(_0x221e27[_0xef15('0xd5')])[_0xef15('0x5f')]('YYYY-MM-DD\x20HH:mm:ss')[_0xef15('0x8a')]():'','disposition':_0x221e27[_0xef15('0xd6')],'messages':_(_0x221e27[_0xef15('0xd7')])[_0xef15('0x71')]({'secret':![]})[_0xef15('0x30')](function(_0x5179d7){return{'date':moment(_0x5179d7[_0xef15('0x59')])[_0xef15('0x5f')](_0xef15('0xd4'))[_0xef15('0x8a')](),'sender':_0x5179d7[_0xef15('0xc2')]===_0xef15('0xd8')?_0x5179d7[_0xef15('0xc4')]?_0x5179d7[_0xef15('0xc4')][_0xef15('0xd9')]:_0xef15('0xda'):_0x5179d7[_0xef15('0xc6')][_0xef15('0xc7')]+(_0x5179d7['Contact']['lastName']?'\x20'+_0x5179d7[_0xef15('0xc6')]['lastName']:''),'body':_0x5179d7[_0xef15('0xaf')],'direction':_0x5179d7[_0xef15('0xc2')]===_0xef15('0xd8')?'A':'C','secret':_0x5179d7[_0xef15('0xc3')]};})[_0xef15('0x5a')]()};return ejs['renderFile'](path[_0xef15('0x7e')](config[_0xef15('0xbe')],'server','views','downloadInteraction.html'),{'interaction':_0x3ec47a})[_0xef15('0x28')](function(_0x595852){return new BPromise(function(_0x492470,_0x29c1c6){pdf['create'](_0x595852,_0x37d00d)[_0xef15('0xdb')](path[_0xef15('0x7e')](_0x2410b0,_0xef15('0xdc')+_0x221e27['id']+'-'+_0x830303+_0xef15('0xdd')),function(_0x4687c3,_0x172308){if(_0x4687c3)return _0x29c1c6(_0x4687c3);_0x492470(_0x172308);});});});}})[_0xef15('0x28')](function(){if(_0x29b47f){return new BPromise(function(_0x369ff3,_0x4d886d){zipdir(_0x2410b0,{'saveTo':_0x4ddf79},function(_0x37b072,_0x3d6184){if(_0x37b072)return _0x4d886d(_0x37b072);return _0x369ff3(_0x3d6184);});})[_0xef15('0x28')](function(){return new BPromise(function(_0x437c9f,_0x4ed36a){rimraf(_0x2410b0,function(_0x1b32a3){if(_0x1b32a3)_0x4ed36a(_0x1b32a3);return _0x437c9f();});});})[_0xef15('0x28')](function(){return _0xfc8384[_0xef15('0xbd')](_0x4ddf79,_0x1406db,function(_0x1dc3a6){if(_0x1dc3a6){console[_0xef15('0xde')](_0xef15('0xdf'),_0x1dc3a6);}else{fs[_0xef15('0xe0')](_0x4ddf79);}});});}else{return _0xfc8384[_0xef15('0x1c')](0xc8);}})[_0xef15('0x35')](handleError(_0xfc8384,null));};
\ No newline at end of file
+var _0x5926=['rimraf','fast-json-patch','request-promise','util','path','sox','to-csv','lodash','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../mysqldb','redis','localhost','socket.io-emitter','./smsInteraction.socket','register','sendStatus','status','end','json','offset','limit','set','apply','reject','update','then','destroy','stack','name','send','Users','map','Tags','TagIds','split','forEach','push','catch','index','rawAttributes','model','keys','query','filters','attributes','intersection','fields','hasOwnProperty','order','sort','where','pick','select','field','color','from','tools_tags','sms_messages','me.SmsInteractionId\x20=\x20i.id','me.read\x20=\x20false','u.id','ui.SmsInteractionId','user_has_sms_interactions','users','u.id\x20=\x20ui.UserId','sms_interactions','left_join','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL','o.id\x20=\x20i.UserId','sms_accounts','expr','advancedFilter','createdAt','value','dateStart','startOf','utc','format','endOf','day','isArray','condition','TagId','unreadMessages','length','tableAlias','\x20IN\x20?','\x20=\x20?','ContactId','and','c.firstName','\x20LIKE\x20?','c.lastName','c.email','\x20>\x20?','\x20<\x20?','LIKE','filter','isNil','concat','parse','$gte','$lte','null','\x20IS\x20NULL','replace','\x27\x27\x27\x27','isNumeric','i.id\x20LIKE\x20?','toString','join','MATCH\x20(me.body)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?','DESC','group','Sequelize','QueryTypes','clone','COUNT(*)','COUNT(me.id)','read','`unreadMessages`\x20=\x200','having','`unreadMessages`\x20>\x200','tag','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','sms_interaction_has_tags','it.SmsInteractionId\x20=\x20i.id','t.id\x20=\x20it.TagId','mail_interaction_has_tags','t.id\x20IN\x20?','sequelize','count','keyBy','merge','SmsInteraction','a.key','Account.key','i.*','Contact.firstName','Contact.lastName','Contact.email','Contact.phone','c.mobile','Contact.mobile','c.fax','GROUP_CONCAT(DISTINCT\x20t.id)','ui.SmsInteractionId\x20IN\x20?','groupBy','SmsInteractionId','all','rows','show','params','options','find','create','body','describe','addMessage','ids','getMessages','SmsMessage','nolimit','YYYY-MM-DD\x20HH:mm:ss','includeAll','include','addTags','Tag','findAll','emit','smsInteractionTags:save','unix','root','server','files','tmp','attachments','direction','secret','User','fullname','CmContact','Contact','lastName','SmsAccount','Account','Owner','10px','40px','30px','<hr\x20class=\x22separator\x22/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22footer\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22left\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>%s</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>{{page}}/{{pages}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22right\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>%s</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>','%s\x20#%d','YYYY-MM-DD','mkdirSync','Sms','N.A.','closed','closedAt','disposition','out','System','renderFile','downloadInteraction.html','toFile','transcript-','.pdf','download','log','unlinkSync','html-pdf','eml-format'];(function(_0x4bb976,_0x321b34){var _0x27eb4d=function(_0xdbdff9){while(--_0xdbdff9){_0x4bb976['push'](_0x4bb976['shift']());}};_0x27eb4d(++_0x321b34);}(_0x5926,0xdb));var _0x6592=function(_0x5b9e11,_0x11c5bf){_0x5b9e11=_0x5b9e11-0x0;var _0x532573=_0x5926[_0x5b9e11];return _0x532573;};'use strict';var pdf=require(_0x6592('0x0'));var emlformat=require(_0x6592('0x1'));var rimraf=require(_0x6592('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x6592('0x3'));var rp=require(_0x6592('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x6592('0x5'));var path=require(_0x6592('0x6'));var sox=require(_0x6592('0x7'));var csv=require(_0x6592('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x6592('0x9'));var squel=require('squel');var crypto=require(_0x6592('0xa'));var jsforce=require(_0x6592('0xb'));var deskjs=require(_0x6592('0xc'));var toCsv=require(_0x6592('0x8'));var querystring=require(_0x6592('0xd'));var Papa=require('papaparse');var Redis=require(_0x6592('0xe'));var authService=require(_0x6592('0xf'));var qs=require(_0x6592('0x10'));var hardwareService=require(_0x6592('0x11'));var logger=require('../../config/logger')(_0x6592('0x12'));var utils=require(_0x6592('0x13'));var config=require('../../config/environment');var db=require(_0x6592('0x14'))['db'];config['redis']=_['defaults'](config[_0x6592('0x15')],{'host':_0x6592('0x16'),'port':0x18eb});var socket=require(_0x6592('0x17'))(new Redis(config[_0x6592('0x15')]));require(_0x6592('0x18'))[_0x6592('0x19')](socket);function respondWithStatusCode(_0x22386d,_0x449216){_0x449216=_0x449216||0xcc;return function(_0x167d5a){if(_0x167d5a){return _0x22386d[_0x6592('0x1a')](_0x449216);}return _0x22386d[_0x6592('0x1b')](_0x449216)[_0x6592('0x1c')]();};}function respondWithResult(_0x19854d,_0x534f8d){_0x534f8d=_0x534f8d||0xc8;return function(_0x1610c7){if(_0x1610c7){return _0x19854d[_0x6592('0x1b')](_0x534f8d)[_0x6592('0x1d')](_0x1610c7);}};}function respondWithFilteredResult(_0x35ae11,_0xb1ef94){return function(_0x2eedb9){if(_0x2eedb9){var _0x713e86=_0x2eedb9['count'],_0x2b0029=_0xb1ef94['offset'],_0x3d3b96=_0xb1ef94[_0x6592('0x1e')]+_0xb1ef94[_0x6592('0x1f')],_0x5e742c;if(_0x3d3b96>=_0x713e86){_0x3d3b96=_0x713e86;_0x5e742c=0xc8;}else{_0x5e742c=0xce;}_0x35ae11[_0x6592('0x1b')](_0x5e742c);return _0x35ae11[_0x6592('0x20')]('Content-Range',_0x2b0029+'-'+_0x3d3b96+'/'+_0x713e86)[_0x6592('0x1d')](_0x2eedb9);}return null;};}function patchUpdates(_0x4484e9){return function(_0x554cfd){try{jsonpatch[_0x6592('0x21')](_0x554cfd,_0x4484e9,!![]);}catch(_0x4b3e97){return BPromise[_0x6592('0x22')](_0x4b3e97);}return _0x554cfd['save']();};}function saveUpdates(_0xb9935e,_0x3bc8de){return function(_0x2f2970){if(_0x2f2970){return _0x2f2970[_0x6592('0x23')](_0xb9935e)[_0x6592('0x24')](function(_0x9442e9){return _0x9442e9;});}return null;};}function removeEntity(_0x3a8c55,_0x1849b7){return function(_0x5967c3){if(_0x5967c3){return _0x5967c3[_0x6592('0x25')]()[_0x6592('0x24')](function(){_0x3a8c55[_0x6592('0x1b')](0xcc)[_0x6592('0x1c')]();});}};}function handleEntityNotFound(_0x29758c,_0x4efdb4){return function(_0x234b12){if(!_0x234b12){_0x29758c['sendStatus'](0x194);}return _0x234b12;};}function handleError(_0x182d48,_0x44a9af){_0x44a9af=_0x44a9af||0x1f4;return function(_0x1c1122){logger['error'](_0x1c1122[_0x6592('0x26')]);if(_0x1c1122[_0x6592('0x27')]){delete _0x1c1122[_0x6592('0x27')];}_0x182d48['status'](_0x44a9af)[_0x6592('0x28')](_0x1c1122);};}function getInteractionUsers(_0xbce25a,_0x23e480){return new BPromise(function(_0x376411,_0x4be9ae){try{if(_0x23e480[_0xbce25a['id']]){_0xbce25a[_0x6592('0x29')]=_[_0x6592('0x2a')](_0x23e480[_0xbce25a['id']],function(_0x2b9e79){return{'id':_0x2b9e79['id']};});}}catch(_0x40f7f7){_0x4be9ae(_0x40f7f7);}_0x376411(_0xbce25a);});}function getInteractionTags(_0x3c91bc,_0x217882){return new BPromise(function(_0x543f49,_0x28e1d6){try{if(_0x3c91bc['TagIds']){_0x3c91bc[_0x6592('0x2b')]=[];_0x3c91bc[_0x6592('0x2c')][_0x6592('0x2d')](',')[_0x6592('0x2e')](function(_0xddbe93){_0x3c91bc[_0x6592('0x2b')][_0x6592('0x2f')](_0x217882[_0xddbe93]);});}delete _0x3c91bc[_0x6592('0x2c')];}catch(_0x8aef78){_0x28e1d6(_0x8aef78);}_0x543f49(_0x3c91bc);});}function updateSmsInteraction(_0x4a9ade,_0x548aaa,_0xe39ecc){return new BPromise(function(_0x1c2898,_0xffd491){return getInteractionUsers(_0x4a9ade,_0xe39ecc)[_0x6592('0x24')](function(_0x1b46d9){return getInteractionTags(_0x1b46d9,_0x548aaa);})['then'](function(_0x588cdb){_0x1c2898(_0x588cdb);})[_0x6592('0x30')](function(_0x10f970){_0xffd491(_0x10f970);});});}exports[_0x6592('0x31')]=function(_0x21cf0e,_0x4fc20c){var _0x42ad64={},_0x28fe77={},_0x52119c={'count':0x0,'rows':[]};var _0x39ee28=db['SmsInteraction'][_0x6592('0x32')];_0x28fe77[_0x6592('0x33')]=_[_0x6592('0x34')](_0x39ee28);_0x28fe77[_0x6592('0x35')]=_[_0x6592('0x34')](_0x21cf0e['query']);_0x28fe77[_0x6592('0x36')]=_['intersection'](_0x28fe77[_0x6592('0x33')],_0x28fe77[_0x6592('0x35')]);_0x42ad64[_0x6592('0x37')]=_[_0x6592('0x38')](_0x28fe77[_0x6592('0x33')],qs[_0x6592('0x39')](_0x21cf0e['query'][_0x6592('0x39')]));_0x42ad64[_0x6592('0x37')]=_0x42ad64[_0x6592('0x37')]['length']?_0x42ad64[_0x6592('0x37')]:_0x28fe77[_0x6592('0x33')];if(!_0x21cf0e[_0x6592('0x35')][_0x6592('0x3a')]('nolimit')){_0x42ad64[_0x6592('0x1f')]=qs['limit'](_0x21cf0e[_0x6592('0x35')][_0x6592('0x1f')]);_0x42ad64[_0x6592('0x1e')]=qs['offset'](_0x21cf0e['query'][_0x6592('0x1e')]);}_0x42ad64[_0x6592('0x3b')]=qs[_0x6592('0x3c')](_0x21cf0e[_0x6592('0x35')][_0x6592('0x3c')]);_0x42ad64[_0x6592('0x3d')]=qs['filters'](_[_0x6592('0x3e')](_0x21cf0e[_0x6592('0x35')],_0x28fe77[_0x6592('0x36')]));var _0xd7f4c0=[];var _0x500bd1=squel[_0x6592('0x3f')]()['field']('id')[_0x6592('0x40')](_0x6592('0x27'))['field'](_0x6592('0x41'))[_0x6592('0x42')](_0x6592('0x43'));var _0x81027d=squel[_0x6592('0x3f')]()[_0x6592('0x40')]('COUNT(*)')[_0x6592('0x42')](_0x6592('0x44'),'me')[_0x6592('0x3d')](_0x6592('0x45'))['where']('me.direction\x20=\x20\x27in\x27')[_0x6592('0x3d')](_0x6592('0x46'));var _0x418851=squel['select']()['field'](_0x6592('0x47'))['field'](_0x6592('0x48'))[_0x6592('0x42')](_0x6592('0x49'),'ui')['left_join'](_0x6592('0x4a'),'u',_0x6592('0x4b'));var _0x44ec5e=squel['select']()[_0x6592('0x42')](_0x6592('0x4c'),'i')[_0x6592('0x4d')]('cm_contacts','c',_0x6592('0x4e'))[_0x6592('0x4d')](_0x6592('0x4a'),'o',_0x6592('0x4f'))[_0x6592('0x4d')](_0x6592('0x50'),'a','a.id\x20=\x20i.SmsAccountId')[_0x6592('0x4d')](_0x6592('0x44'),'me','me.SmsInteractionId\x20=\x20i.id\x20AND\x20me.direction\x20=\x20\x27in\x27\x20AND\x20me.read\x20=\x20false');var _0x2862a1=squel[_0x6592('0x51')]();if(_0x21cf0e[_0x6592('0x35')][_0x6592('0x52')]){var _0x3a1414=JSON['parse'](_0x21cf0e[_0x6592('0x35')][_0x6592('0x52')]);_[_0x6592('0x34')](_0x3a1414)[_0x6592('0x2e')](function(_0x4d8414){var _0x2ff90a=_0x3a1414[_0x4d8414];if(_0x4d8414===_0x6592('0x53')){var _0xc45f92=moment(_0x2ff90a[_0x6592('0x54')][_0x6592('0x55')])[_0x6592('0x56')]('day')[_0x6592('0x57')]()[_0x6592('0x58')]();var _0x394795=moment(_0x394795)[_0x6592('0x57')]()[_0x6592('0x59')](_0x6592('0x5a'))[_0x6592('0x58')]();_0x2862a1['and']('i.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0xc45f92,_0x394795);}else{if(_[_0x6592('0x5b')](_0x2ff90a[_0x6592('0x5c')])){_0x2ff90a[_0x6592('0x5c')][_0x6592('0x2e')](function(_0x5cf1ba){switch(_0x2ff90a['condition'][_0x6592('0x54')]){case'IS':if(_0x4d8414!==_0x6592('0x5d')&&_0x4d8414!==_0x6592('0x5e')){if(_[_0x6592('0x5b')](_0x2ff90a[_0x6592('0x54')])&&_0x2ff90a['value'][_0x6592('0x5f')]>0x1){_0x2862a1['and'](_0x2ff90a[_0x6592('0x60')]+'.'+_0x4d8414+_0x6592('0x61'),_0x2ff90a[_0x6592('0x54')]);}else{_0x2862a1['and'](_0x2ff90a[_0x6592('0x60')]+'.'+_0x4d8414+'\x20=\x20?',_0x2ff90a[_0x6592('0x54')][0x0]);}}break;case'=':_0x2862a1['and'](_0x2ff90a[_0x6592('0x60')]+'.'+_0x4d8414+_0x6592('0x62'),_0x2ff90a['value']);break;case'LIKE':if(_0x4d8414===_0x6592('0x63')){_0x2862a1[_0x6592('0x64')](_0x6592('0x65')+_0x6592('0x66'),'%'+_0x2ff90a['value']+'%');_0x2862a1['or'](_0x6592('0x67')+'\x20LIKE\x20?','%'+_0x2ff90a[_0x6592('0x54')]+'%');_0x2862a1['or'](_0x6592('0x68')+_0x6592('0x66'),'%'+_0x2ff90a[_0x6592('0x54')]+'%');}else{_0x2862a1['and'](_0x2ff90a[_0x6592('0x60')]+'.'+_0x4d8414+_0x6592('0x66'),'%'+_0x2ff90a['value']+'%');}break;case'>':_0x2862a1[_0x6592('0x64')](_0x2ff90a[_0x6592('0x60')]+'.'+_0x4d8414+_0x6592('0x69'),_0x2ff90a['value']);break;case'<':_0x2862a1[_0x6592('0x64')](_0x2ff90a['tableAlias']+'.'+_0x4d8414+_0x6592('0x6a'),_0x2ff90a[_0x6592('0x54')]);break;}});}else{switch(_0x2ff90a[_0x6592('0x5c')][_0x6592('0x54')]){case'IS':if(_0x4d8414!==_0x6592('0x5d')&&_0x4d8414!==_0x6592('0x5e')){if(_[_0x6592('0x5b')](_0x2ff90a['value'])&&_0x2ff90a['value'][_0x6592('0x5f')]>0x1){_0x2862a1[_0x6592('0x64')](_0x2ff90a[_0x6592('0x60')]+'.'+_0x4d8414+_0x6592('0x61'),_0x2ff90a[_0x6592('0x54')]);}else{_0x2862a1[_0x6592('0x64')](_0x2ff90a[_0x6592('0x60')]+'.'+_0x4d8414+_0x6592('0x62'),_0x2ff90a[_0x6592('0x54')][0x0]);}}break;case'=':_0x2862a1[_0x6592('0x64')](_0x2ff90a[_0x6592('0x60')]+'.'+_0x4d8414+_0x6592('0x62'),_0x2ff90a[_0x6592('0x54')]);break;case _0x6592('0x6b'):if(_0x4d8414===_0x6592('0x63')){_0x2862a1[_0x6592('0x64')](_0x6592('0x65')+_0x6592('0x66'),'%'+_0x2ff90a['value']+'%');_0x2862a1['or'](_0x6592('0x67')+'\x20LIKE\x20?','%'+_0x2ff90a[_0x6592('0x54')]+'%');_0x2862a1['or'](_0x6592('0x68')+_0x6592('0x66'),'%'+_0x2ff90a[_0x6592('0x54')]+'%');}else{_0x2862a1['and'](_0x2ff90a[_0x6592('0x60')]+'.'+_0x4d8414+_0x6592('0x66'),'%'+_0x2ff90a[_0x6592('0x54')]+'%');}break;case'>':_0x2862a1['and'](_0x2ff90a['tableAlias']+'.'+_0x4d8414+_0x6592('0x69'),_0x2ff90a[_0x6592('0x54')]);break;case'<':_0x2862a1[_0x6592('0x64')](_0x2ff90a[_0x6592('0x60')]+'.'+_0x4d8414+_0x6592('0x6a'),_0x2ff90a['value']);break;}}}});}else{var _0x299bbb=_(Object[_0x6592('0x34')](_0x21cf0e[_0x6592('0x35')]))[_0x6592('0x2a')](function(_0x45ba4f){return _0x39ee28[_0x6592('0x3a')](_0x45ba4f)?_0x45ba4f:undefined;})[_0x6592('0x6c')](function(_0x533df4){return!_[_0x6592('0x6d')](_0x533df4);})['value']();if(!_['isEmpty'](_0x299bbb)){_0x299bbb[_0x6592('0x2e')](function(_0x54fd2e){if(_0x54fd2e==='SmsAccountId'){_0x44ec5e[_0x6592('0x3d')]('i.SmsAccountId\x20IN\x20?',[][_0x6592('0x6e')](_0x21cf0e[_0x6592('0x35')][_0x54fd2e]));}else if(_0x54fd2e===_0x6592('0x53')){var _0x20e252=JSON[_0x6592('0x6f')](_0x21cf0e[_0x6592('0x35')][_0x54fd2e])[_0x6592('0x70')];var _0x27a83b=JSON[_0x6592('0x6f')](_0x21cf0e[_0x6592('0x35')][_0x54fd2e])[_0x6592('0x71')];_0x44ec5e[_0x6592('0x3d')]('i.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x20e252,_0x27a83b);}else{if(_0x21cf0e['query'][_0x54fd2e]===_0x6592('0x72')){_0x44ec5e[_0x6592('0x3d')]('i.'+_0x54fd2e+_0x6592('0x73'));}else{_0x44ec5e[_0x6592('0x3d')]('i.'+_0x54fd2e+_0x6592('0x62'),_0x21cf0e[_0x6592('0x35')][_0x54fd2e]);}}});}if(_0x21cf0e['query'][_0x6592('0x6c')]){var _0x5a6927=_0x21cf0e[_0x6592('0x35')]['filter'][_0x6592('0x74')]('\x5c','\x5c\x5c')[_0x6592('0x74')]('\x27\x27',_0x6592('0x75'));if(qs[_0x6592('0x76')](_0x5a6927)){_0x2862a1['or'](_0x6592('0x77'),_0x5a6927+'%')['or']('i.phone\x20LIKE\x20?',_0x5a6927+'%');}else{var _0x24eb44=[];_0x5a6927[_0x6592('0x2d')]('\x20')[_0x6592('0x2e')](function(_0x48c1fc){_0x24eb44[_0x6592('0x2f')]('+'+_0x48c1fc[_0x6592('0x78')]());});var _0x4acdeb=_0x24eb44[_0x6592('0x79')]('\x20');_0x2862a1['or'](_0x6592('0x7a'),_0x4acdeb)['or'](_0x6592('0x7b'),_0x5a6927+'%');}}}_0x44ec5e[_0x6592('0x3d')](_0x2862a1);if(_0x42ad64[_0x6592('0x3b')]){_0x42ad64[_0x6592('0x3b')]['forEach'](function(_0x131f66){_0x44ec5e['order']('i.'+_0x131f66[0x0],_0x131f66[0x1]===_0x6592('0x7c')?![]:!![]);});}_0x44ec5e[_0x6592('0x7d')]('i.id');var _0x482f4f={'type':db[_0x6592('0x7e')][_0x6592('0x7f')]['SELECT'],'raw':!![]};var _0x3aa81b=_0x44ec5e[_0x6592('0x80')]()[_0x6592('0x40')](_0x6592('0x81'))[_0x6592('0x40')](_0x6592('0x82'),_0x6592('0x5e'));if(!_0x21cf0e[_0x6592('0x35')][_0x6592('0x52')]){if(_0x21cf0e[_0x6592('0x35')][_0x6592('0x83')]){if(_0x21cf0e[_0x6592('0x35')][_0x6592('0x83')]==0x1){_0x3aa81b['having'](_0x6592('0x84'));_0x44ec5e[_0x6592('0x85')](_0x6592('0x84'));}else{_0x3aa81b[_0x6592('0x85')](_0x6592('0x86'));_0x44ec5e[_0x6592('0x85')]('`unreadMessages`\x20>\x200');}}if(_0x21cf0e[_0x6592('0x35')][_0x6592('0x87')]){var _0x2315c4=_[_0x6592('0x5b')](_0x21cf0e[_0x6592('0x35')][_0x6592('0x87')])?_0x21cf0e[_0x6592('0x35')]['tag']:new Array(_0x21cf0e[_0x6592('0x35')][_0x6592('0x87')]);var _0x317a15=squel[_0x6592('0x51')]();_0x2315c4[_0x6592('0x2e')](function(_0x3105b5){_0x317a15['or'](_0x6592('0x88'),'%,'+_0x3105b5+',%');});_0x44ec5e[_0x6592('0x85')](_0x317a15);_0x3aa81b[_0x6592('0x4d')](_0x6592('0x89'),'it',_0x6592('0x8a'));_0x3aa81b[_0x6592('0x4d')](_0x6592('0x43'),'t',_0x6592('0x8b'));_0x3aa81b[_0x6592('0x3d')]('t.id\x20IN\x20?',_0x2315c4);}}else{var _0x3a1414=JSON[_0x6592('0x6f')](_0x21cf0e['query']['advancedFilter']);_[_0x6592('0x34')](_0x3a1414)[_0x6592('0x2e')](function(_0x40d83f){var _0x4d36ff=_0x3a1414[_0x40d83f];if(_0x40d83f===_0x6592('0x5d')){var _0x28aebb=_0x4d36ff[_0x6592('0x54')];var _0x36356d=squel[_0x6592('0x51')]();_0x28aebb[_0x6592('0x2e')](function(_0x477b89){_0x36356d['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x477b89+',%');});_0x44ec5e[_0x6592('0x85')](_0x36356d);_0x3aa81b[_0x6592('0x4d')](_0x6592('0x8c'),'it','it.MailInteractionId\x20=\x20i.id');_0x3aa81b['left_join'](_0x6592('0x43'),'t','t.id\x20=\x20it.TagId');_0x3aa81b[_0x6592('0x3d')](_0x6592('0x8d'),_0x28aebb);}else if(_0x40d83f==='unreadMessages'){if(_0x4d36ff['value']['length']===0x1){if(_0x4d36ff[_0x6592('0x54')][0x0]===0x1){_0x3aa81b[_0x6592('0x85')](_0x6592('0x84'));_0x44ec5e[_0x6592('0x85')](_0x6592('0x84'));}else{_0x3aa81b[_0x6592('0x85')](_0x6592('0x86'));_0x44ec5e['having']('`unreadMessages`\x20>\x200');}}}});}db[_0x6592('0x8e')][_0x6592('0x35')](_0x3aa81b[_0x6592('0x78')](),_0x482f4f)[_0x6592('0x24')](function(_0xe3d8cb){_0x52119c[_0x6592('0x8f')]=_0xe3d8cb[_0x6592('0x5f')];if(_0x52119c['count']===0x0)return[];return db[_0x6592('0x8e')]['query'](_0x500bd1[_0x6592('0x78')](),_0x482f4f)['then'](function(_0x397b66){_0xd7f4c0=_[_0x6592('0x90')](_0x397b66,'id');_0x482f4f=_[_0x6592('0x91')](_0x482f4f,{'model':db[_0x6592('0x92')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x44ec5e[_0x6592('0x40')](_0x6592('0x82'),'unreadMessages');_0x44ec5e[_0x6592('0x40')](_0x6592('0x93'),_0x6592('0x94'));_0x44ec5e[_0x6592('0x40')](_0x6592('0x95'));_0x44ec5e[_0x6592('0x40')](_0x6592('0x65'),_0x6592('0x96'));_0x44ec5e[_0x6592('0x40')](_0x6592('0x67'),_0x6592('0x97'));_0x44ec5e[_0x6592('0x40')](_0x6592('0x68'),_0x6592('0x98'));_0x44ec5e[_0x6592('0x40')]('c.phone',_0x6592('0x99'));_0x44ec5e[_0x6592('0x40')](_0x6592('0x9a'),_0x6592('0x9b'));_0x44ec5e['field'](_0x6592('0x9c'),'Contact.fax');_0x44ec5e['field'](_0x6592('0x9d'),_0x6592('0x2c'));_0x44ec5e[_0x6592('0x4d')](_0x6592('0x89'),'it',_0x6592('0x8a'));_0x44ec5e[_0x6592('0x4d')](_0x6592('0x43'),'t',_0x6592('0x8b'));_0x44ec5e[_0x6592('0x1f')](_0x42ad64['limit']);_0x44ec5e[_0x6592('0x1e')](_0x42ad64[_0x6592('0x1e')]);return db[_0x6592('0x8e')]['query'](_0x44ec5e[_0x6592('0x78')](),_0x482f4f);})['then'](function(_0x31b98e){_0x418851[_0x6592('0x3d')](_0x6592('0x9e'),_[_0x6592('0x2a')](_0x31b98e,'id'));return db[_0x6592('0x8e')][_0x6592('0x35')](_0x418851['toString'](),_0x482f4f)['then'](function(_0x41fe37){var _0x262bec=_[_0x6592('0x9f')](_0x41fe37,_0x6592('0xa0'));var _0x1f51c3=[];_0x31b98e[_0x6592('0x2e')](function(_0x5435c6){_0x1f51c3[_0x6592('0x2f')](updateSmsInteraction(_0x5435c6,_0xd7f4c0,_0x262bec));});return BPromise[_0x6592('0xa1')](_0x1f51c3);});});})[_0x6592('0x24')](function(_0x196ff7){_0x52119c[_0x6592('0xa2')]=_0x196ff7;return _0x52119c;})[_0x6592('0x24')](respondWithFilteredResult(_0x4fc20c,_0x42ad64))[_0x6592('0x30')](handleError(_0x4fc20c,null));};exports[_0x6592('0xa3')]=function(_0x2b8aec,_0x477040){var _0x4f7b29={'raw':![],'where':{'id':_0x2b8aec[_0x6592('0xa4')]['id']}},_0x2df9bd={};_0x2df9bd[_0x6592('0x33')]=_[_0x6592('0x34')](db['SmsInteraction'][_0x6592('0x32')]);_0x2df9bd[_0x6592('0x35')]=_[_0x6592('0x34')](_0x2b8aec[_0x6592('0x35')]);_0x2df9bd[_0x6592('0x36')]=_[_0x6592('0x38')](_0x2df9bd[_0x6592('0x33')],_0x2df9bd[_0x6592('0x35')]);_0x4f7b29[_0x6592('0x37')]=_[_0x6592('0x38')](_0x2df9bd[_0x6592('0x33')],qs[_0x6592('0x39')](_0x2b8aec[_0x6592('0x35')][_0x6592('0x39')]));_0x4f7b29['attributes']=_0x4f7b29[_0x6592('0x37')][_0x6592('0x5f')]?_0x4f7b29['attributes']:_0x2df9bd[_0x6592('0x33')];if(_0x2b8aec['query']['includeAll']){_0x4f7b29['include']=[{'all':!![]}];}_0x4f7b29=_[_0x6592('0x91')]({},_0x4f7b29,_0x2b8aec[_0x6592('0xa5')]);return db['SmsInteraction'][_0x6592('0xa6')](_0x4f7b29)[_0x6592('0x24')](handleEntityNotFound(_0x477040,null))['then'](respondWithResult(_0x477040,null))['catch'](handleError(_0x477040,null));};exports['create']=function(_0x52f5a9,_0x444bdf){return db[_0x6592('0x92')][_0x6592('0xa7')](_0x52f5a9[_0x6592('0xa8')],{})['then'](respondWithResult(_0x444bdf,0xc9))[_0x6592('0x30')](handleError(_0x444bdf,null));};exports[_0x6592('0x23')]=function(_0x9285ca,_0x3e79c7){if(_0x9285ca[_0x6592('0xa8')]['id']){delete _0x9285ca['body']['id'];}return db[_0x6592('0x92')][_0x6592('0xa6')]({'where':{'id':_0x9285ca[_0x6592('0xa4')]['id']}})[_0x6592('0x24')](handleEntityNotFound(_0x3e79c7,null))[_0x6592('0x24')](saveUpdates(_0x9285ca[_0x6592('0xa8')],null))[_0x6592('0x24')](respondWithResult(_0x3e79c7,null))['catch'](handleError(_0x3e79c7,null));};exports['destroy']=function(_0xe1297f,_0x29da56){return db[_0x6592('0x92')][_0x6592('0xa6')]({'where':{'id':_0xe1297f['params']['id']}})['then'](handleEntityNotFound(_0x29da56,null))[_0x6592('0x24')](removeEntity(_0x29da56,null))[_0x6592('0x30')](handleError(_0x29da56,null));};exports['describe']=function(_0x52fbfd,_0x2033f4){return db[_0x6592('0x92')][_0x6592('0xa9')]()['then'](respondWithResult(_0x2033f4,null))['catch'](handleError(_0x2033f4,null));};exports[_0x6592('0xaa')]=function(_0x460b3f,_0x55d065,_0x70c7f7){return db['SmsMessage'][_0x6592('0xa6')]({'where':{'id':_0x460b3f[_0x6592('0xa4')]['id']}})['then'](handleEntityNotFound(_0x55d065,null))[_0x6592('0x24')](function(_0x17b627){if(_0x17b627){return _0x17b627[_0x6592('0xaa')](_0x460b3f[_0x6592('0xa8')][_0x6592('0xab')],_['omit'](_0x460b3f['body'],[_0x6592('0xab'),'id'])||{});}})[_0x6592('0x24')](respondWithResult(_0x55d065,null))[_0x6592('0x30')](handleError(_0x55d065,null));};exports[_0x6592('0xac')]=function(_0x50b172,_0x5cef50,_0x92a893){var _0x389a09={'raw':![],'where':{}};var _0x533582={};var _0x5224d8={'count':0x0,'rows':[]};return db[_0x6592('0x92')]['findOne']({'where':{'id':_0x50b172[_0x6592('0xa4')]['id']}})[_0x6592('0x24')](handleEntityNotFound(_0x5cef50,null))['then'](function(_0x2c184b){if(_0x2c184b){_0x533582[_0x6592('0x33')]=_[_0x6592('0x34')](db[_0x6592('0xad')][_0x6592('0x32')]);_0x533582[_0x6592('0x35')]=_[_0x6592('0x34')](_0x50b172['query']);_0x533582['filters']=_[_0x6592('0x38')](_0x533582[_0x6592('0x33')],_0x533582[_0x6592('0x35')]);_0x389a09['attributes']=_['intersection'](_0x533582[_0x6592('0x33')],qs['fields'](_0x50b172[_0x6592('0x35')]['fields']));_0x389a09[_0x6592('0x37')]=_0x389a09[_0x6592('0x37')][_0x6592('0x5f')]?_0x389a09[_0x6592('0x37')]:_0x533582['model'];if(!_0x50b172[_0x6592('0x35')][_0x6592('0x3a')](_0x6592('0xae'))){_0x389a09[_0x6592('0x1f')]=qs[_0x6592('0x1f')](_0x50b172[_0x6592('0x35')][_0x6592('0x1f')]);_0x389a09[_0x6592('0x1e')]=qs[_0x6592('0x1e')](_0x50b172[_0x6592('0x35')][_0x6592('0x1e')]);}_0x389a09[_0x6592('0x3b')]=qs['sort'](_0x50b172[_0x6592('0x35')][_0x6592('0x3c')]);_0x389a09[_0x6592('0x3d')]=qs[_0x6592('0x36')](_[_0x6592('0x3e')](_0x50b172[_0x6592('0x35')],_0x533582[_0x6592('0x36')]));_0x389a09['where'][_0x6592('0xa0')]=_0x2c184b['id'];if(_0x50b172[_0x6592('0x35')][_0x6592('0x6c')]){_0x389a09['where']=_[_0x6592('0x91')](_0x389a09[_0x6592('0x3d')],{'$or':_['map'](_0x389a09[_0x6592('0x37')],function(_0x35baaf){var _0x2be1f1={};_0x2be1f1[_0x35baaf]={'$like':'%'+_0x50b172[_0x6592('0x35')][_0x6592('0x6c')]+'%'};return _0x2be1f1;})});}if(_0x50b172[_0x6592('0x35')][_0x6592('0x70')]){var _0x4a9436=_0x50b172['query'][_0x6592('0x70')][_0x6592('0x2d')](',');var _0x328728={};_0x328728[_0x4a9436[0x0]]={'$gte':moment(_0x4a9436[0x1])[_0x6592('0x58')](_0x6592('0xaf'))};_0x389a09['where']=_[_0x6592('0x91')](_0x389a09[_0x6592('0x3d')],_0x328728);}_0x389a09=_[_0x6592('0x91')]({},_0x389a09,_0x50b172[_0x6592('0xa5')]);return db[_0x6592('0xad')][_0x6592('0x8f')]({'where':_0x389a09[_0x6592('0x3d')]})[_0x6592('0x24')](function(_0x28d6ee){_0x5224d8[_0x6592('0x8f')]=_0x28d6ee;if(_0x50b172[_0x6592('0x35')][_0x6592('0xb0')]){_0x389a09[_0x6592('0xb1')]=[{'all':!![]}];}return db[_0x6592('0xad')]['findAll'](_0x389a09);})['then'](function(_0x5de773){_0x5224d8[_0x6592('0xa2')]=_0x5de773;return _0x5224d8;});}})[_0x6592('0x24')](respondWithFilteredResult(_0x5cef50,_0x389a09))[_0x6592('0x30')](handleError(_0x5cef50,null));};exports[_0x6592('0xb2')]=function(_0x45c999,_0x1a99d7,_0x5edb39){return db[_0x6592('0x92')][_0x6592('0xa6')]({'where':{'id':_0x45c999[_0x6592('0xa4')]['id']}})[_0x6592('0x24')](handleEntityNotFound(_0x1a99d7,null))[_0x6592('0x24')](function(_0x511ef9){if(_0x511ef9){return _0x511ef9['setTags'](_0x45c999[_0x6592('0xa8')][_0x6592('0xab')],_['omit'](_0x45c999[_0x6592('0xa8')],[_0x6592('0xab'),'id'])||{})['spread'](function(){return db[_0x6592('0xb3')][_0x6592('0xb4')]({'attributes':['id','name',_0x6592('0x41')],'where':{'id':_0x45c999[_0x6592('0xa8')][_0x6592('0xab')]}});})[_0x6592('0x24')](function(_0x46ed60){socket[_0x6592('0xb5')](_0x6592('0xb6'),{'id':Number(_0x45c999[_0x6592('0xa4')]['id']),'tags':_0x46ed60||[]});return{'id':Number(_0x45c999[_0x6592('0xa4')]['id']),'tags':_0x46ed60||[]};});}})['then'](respondWithResult(_0x1a99d7,null))[_0x6592('0x30')](handleError(_0x1a99d7,null));};exports['removeTags']=function(_0x31a47b,_0x47e23a,_0xe82b1d){return db[_0x6592('0x92')]['find']({'where':{'id':_0x31a47b[_0x6592('0xa4')]['id']}})[_0x6592('0x24')](handleEntityNotFound(_0x47e23a,null))[_0x6592('0x24')](function(_0x3a8f7a){if(_0x3a8f7a){return _0x3a8f7a['removeTags'](_0x31a47b[_0x6592('0x35')][_0x6592('0xab')]);}})[_0x6592('0x24')](respondWithStatusCode(_0x47e23a,null))[_0x6592('0x30')](handleError(_0x47e23a,null));};exports['download']=function(_0x3e307c,_0x241131){var _0x1a49a9=moment()[_0x6592('0xb7')]()[_0x6592('0x78')]();var _0x5ad584=path['join'](config[_0x6592('0xb8')],_0x6592('0xb9'),_0x6592('0xba'),_0x6592('0xbb'));var _0x207a45=path['join'](config[_0x6592('0xb8')],_0x6592('0xb9'),_0x6592('0xba'),_0x6592('0xbc'));var _0x3029f4=path[_0x6592('0x79')](_0x5ad584,_0x1a49a9);var _0x23b36d=util[_0x6592('0x58')]('transcript-%d-%s.zip',_0x3e307c[_0x6592('0xa4')]['id'],_0x1a49a9);var _0x4e5be9=path[_0x6592('0x79')](_0x5ad584,_0x23b36d);var _0x4086a9=![];return db[_0x6592('0x92')][_0x6592('0xa6')]({'where':{'id':_0x3e307c[_0x6592('0xa4')]['id']},'include':[{'model':db[_0x6592('0xad')],'as':'Messages','attributes':['id','body',_0x6592('0x53'),_0x6592('0xbd'),_0x6592('0xbe')],'include':[{'model':db['User'],'as':_0x6592('0xbf'),'attributes':['id',_0x6592('0xc0')],'raw':!![]},{'model':db[_0x6592('0xc1')],'as':_0x6592('0xc2'),'attributes':['id','firstName',_0x6592('0xc3')],'raw':!![]}]},{'model':db[_0x6592('0xc4')],'as':_0x6592('0xc5'),'attributes':['id',_0x6592('0x27')]},{'model':db[_0x6592('0xbf')],'as':_0x6592('0xc6'),'attributes':['id',_0x6592('0xc0')]}]})[_0x6592('0x24')](handleEntityNotFound(_0x241131,null))['then'](function(_0x569342){if(_0x569342){var _0x50b954=_0x569342['get']({'plain':!![]});_0x4086a9=!![];var _0x428c02={'format':'A4','border':_0x6592('0xc7'),'header':{'height':_0x6592('0xc8'),'contents':{'first':'<div\x20class=\x22header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h5>Interaction\x20Transcript</h5>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>'}},'footer':{'height':_0x6592('0xc9'),'contents':{'default':util[_0x6592('0x58')](_0x6592('0xca'),util[_0x6592('0x58')](_0x6592('0xcb'),'Sms',_0x50b954['id']),moment()[_0x6592('0x58')](_0x6592('0xcc'))[_0x6592('0x78')]())}}};fs[_0x6592('0xcd')](_0x3029f4);var _0x1ad1a2={'channel':_0x6592('0xce'),'account':_0x50b954[_0x6592('0xc5')][_0x6592('0x27')],'agent':_0x50b954[_0x6592('0xc6')]?_0x50b954[_0x6592('0xc6')]['fullname']:_0x6592('0xcf'),'createdAt':moment(_0x50b954[_0x6592('0x53')])['format']('YYYY-MM-DD\x20HH:mm:ss')[_0x6592('0x78')](),'closedAt':_0x50b954[_0x6592('0xd0')]?moment(_0x50b954[_0x6592('0xd1')])[_0x6592('0x58')](_0x6592('0xaf'))[_0x6592('0x78')]():'','disposition':_0x50b954[_0x6592('0xd2')],'messages':_(_0x50b954['Messages'])['filter']({'secret':![]})[_0x6592('0x2a')](function(_0x44ae51){return{'date':moment(_0x44ae51[_0x6592('0x53')])[_0x6592('0x58')]('YYYY-MM-DD\x20HH:mm:ss')['toString'](),'sender':_0x44ae51[_0x6592('0xbd')]===_0x6592('0xd3')?_0x44ae51['User']?_0x44ae51[_0x6592('0xbf')]['fullname']:_0x6592('0xd4'):_0x44ae51['Contact']['firstName']+(_0x44ae51[_0x6592('0xc2')]['lastName']?'\x20'+_0x44ae51[_0x6592('0xc2')][_0x6592('0xc3')]:''),'body':_0x44ae51[_0x6592('0xa8')],'direction':_0x44ae51[_0x6592('0xbd')]===_0x6592('0xd3')?'A':'C','secret':_0x44ae51[_0x6592('0xbe')]};})[_0x6592('0x54')]()};return ejs[_0x6592('0xd5')](path[_0x6592('0x79')](config[_0x6592('0xb8')],_0x6592('0xb9'),'views',_0x6592('0xd6')),{'interaction':_0x1ad1a2})['then'](function(_0x56164a){return new BPromise(function(_0x27fc77,_0xbf1670){pdf[_0x6592('0xa7')](_0x56164a,_0x428c02)[_0x6592('0xd7')](path[_0x6592('0x79')](_0x3029f4,_0x6592('0xd8')+_0x50b954['id']+'-'+_0x1a49a9+_0x6592('0xd9')),function(_0x274b5c,_0x273466){if(_0x274b5c)return _0xbf1670(_0x274b5c);_0x27fc77(_0x273466);});});});}})['then'](function(){if(_0x4086a9){return new BPromise(function(_0x53df64,_0x3df60a){zipdir(_0x3029f4,{'saveTo':_0x4e5be9},function(_0x2e4d7f,_0x413933){if(_0x2e4d7f)return _0x3df60a(_0x2e4d7f);return _0x53df64(_0x413933);});})[_0x6592('0x24')](function(){return new BPromise(function(_0x3f3f54,_0x1cf74a){rimraf(_0x3029f4,function(_0x54b35d){if(_0x54b35d)_0x1cf74a(_0x54b35d);return _0x3f3f54();});});})[_0x6592('0x24')](function(){return _0x241131[_0x6592('0xda')](_0x4e5be9,_0x23b36d,function(_0xf807b2){if(_0xf807b2){console[_0x6592('0xdb')]('err',_0xf807b2);}else{fs[_0x6592('0xdc')](_0x4e5be9);}});});}else{return _0x241131[_0x6592('0x1a')](0xc8);}})[_0x6592('0x30')](handleError(_0x241131,null));};
\ No newline at end of file
index b281be0..fc71ae5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6050=['events','../../mysqldb','SmsInteraction','SmsMessage','save','remove','getUsers','setDataValue','Users','map','findAll','then','unreadMessages','length','emit','hasOwnProperty','hook','exports'];(function(_0x2ebbbb,_0x2eb4b8){var _0xd3481b=function(_0x3c3163){while(--_0x3c3163){_0x2ebbbb['push'](_0x2ebbbb['shift']());}};_0xd3481b(++_0x2eb4b8);}(_0x6050,0x18c));var _0x0605=function(_0x1db828,_0x9af4d9){_0x1db828=_0x1db828-0x0;var _0x4de543=_0x6050[_0x1db828];return _0x4de543;};'use strict';var EventEmitter=require(_0x0605('0x0'));var SmsInteraction=require(_0x0605('0x1'))['db'][_0x0605('0x2')];var SmsMessage=require(_0x0605('0x1'))['db'][_0x0605('0x3')];var SmsInteractionEvents=new EventEmitter();SmsInteractionEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x0605('0x4'),'afterUpdate':'update','afterDestroy':_0x0605('0x5')};function emitEvent(_0x310ded){return function(_0xd5f452,_0x3a5383,_0x5eec99){_0xd5f452[_0x0605('0x6')]({'attributes':['id'],'raw':!![]})['then'](function(_0x2feecb){_0xd5f452[_0x0605('0x7')](_0x0605('0x8'),_0x2feecb[_0x0605('0x9')](function(_0x447f52){return{'id':_0x447f52['id']};}));return SmsMessage[_0x0605('0xa')]({'where':{'SmsInteractionId':_0xd5f452['id'],'direction':'in','read':![]},'raw':!![]});})[_0x0605('0xb')](function(_0x40ca07){_0xd5f452[_0x0605('0x7')](_0x0605('0xc'),_0x40ca07[_0x0605('0xd')]);SmsInteractionEvents[_0x0605('0xe')](_0x310ded+':'+_0xd5f452['id'],_0xd5f452);SmsInteractionEvents[_0x0605('0xe')](_0x310ded,_0xd5f452);_0x5eec99(null);})['catch'](_0x5eec99(null));};}for(var e in events){if(events[_0x0605('0xf')](e)){var event=events[e];SmsInteraction[_0x0605('0x10')](e,emitEvent(event));}}module[_0x0605('0x11')]=SmsInteractionEvents;
\ No newline at end of file
+var _0xa022=['unreadMessages','length','emit','catch','hook','exports','events','../../mysqldb','SmsInteraction','setMaxListeners','save','remove','getUsers','then','setDataValue','Users','map','findAll'];(function(_0x5b34c0,_0x3ad403){var _0x242bd3=function(_0x51d0ce){while(--_0x51d0ce){_0x5b34c0['push'](_0x5b34c0['shift']());}};_0x242bd3(++_0x3ad403);}(_0xa022,0xf0));var _0x2a02=function(_0x16bf90,_0x2082c2){_0x16bf90=_0x16bf90-0x0;var _0x46dcf8=_0xa022[_0x16bf90];return _0x46dcf8;};'use strict';var EventEmitter=require(_0x2a02('0x0'));var SmsInteraction=require(_0x2a02('0x1'))['db'][_0x2a02('0x2')];var SmsMessage=require('../../mysqldb')['db']['SmsMessage'];var SmsInteractionEvents=new EventEmitter();SmsInteractionEvents[_0x2a02('0x3')](0x0);var events={'afterCreate':_0x2a02('0x4'),'afterUpdate':'update','afterDestroy':_0x2a02('0x5')};function emitEvent(_0x24ddd2){return function(_0x2ad029,_0x35f972,_0x18eed5){_0x2ad029[_0x2a02('0x6')]({'attributes':['id'],'raw':!![]})[_0x2a02('0x7')](function(_0x522e19){_0x2ad029[_0x2a02('0x8')](_0x2a02('0x9'),_0x522e19[_0x2a02('0xa')](function(_0x5020cd){return{'id':_0x5020cd['id']};}));return SmsMessage[_0x2a02('0xb')]({'where':{'SmsInteractionId':_0x2ad029['id'],'direction':'in','read':![]},'raw':!![]});})[_0x2a02('0x7')](function(_0x867f3){_0x2ad029[_0x2a02('0x8')](_0x2a02('0xc'),_0x867f3[_0x2a02('0xd')]);SmsInteractionEvents[_0x2a02('0xe')](_0x24ddd2+':'+_0x2ad029['id'],_0x2ad029);SmsInteractionEvents[_0x2a02('0xe')](_0x24ddd2,_0x2ad029);_0x18eed5(null);})[_0x2a02('0xf')](_0x18eed5(null));};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];SmsInteraction[_0x2a02('0x10')](e,emitEvent(event));}}module[_0x2a02('0x11')]=SmsInteractionEvents;
\ No newline at end of file
index ef1ba4b..deca7d3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe7d1=['bluebird','request-promise','path','../../config/environment','define','SmsInteraction','sms_interactions','changed','closed','closedAt','format','YYYY-MM-DD\x20HH:mm:ss','util','api','moment'];(function(_0x67f30a,_0x2e62de){var _0x59b41e=function(_0x1716a5){while(--_0x1716a5){_0x67f30a['push'](_0x67f30a['shift']());}};_0x59b41e(++_0x2e62de);}(_0xe7d1,0x1dd));var _0x1e7d=function(_0x157ce1,_0x2c1928){_0x157ce1=_0x157ce1-0x0;var _0x49d683=_0xe7d1[_0x157ce1];return _0x49d683;};'use strict';var _=require('lodash');var util=require(_0x1e7d('0x0'));var logger=require('../../config/logger')(_0x1e7d('0x1'));var moment=require(_0x1e7d('0x2'));var BPromise=require(_0x1e7d('0x3'));var rp=require(_0x1e7d('0x4'));var fs=require('fs');var path=require(_0x1e7d('0x5'));var rimraf=require('rimraf');var config=require(_0x1e7d('0x6'));var attributes=require('./smsInteraction.attributes');module['exports']=function(_0x5ba3d0,_0x4a34ae){return _0x5ba3d0[_0x1e7d('0x7')](_0x1e7d('0x8'),attributes,{'tableName':_0x1e7d('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x4a0a7c,_0x707bba,_0x255091){if(_0x4a0a7c[_0x1e7d('0xa')](_0x1e7d('0xb'))){_0x4a0a7c[_0x1e7d('0xc')]=moment()[_0x1e7d('0xd')](_0x1e7d('0xe'));}_0x255091(null,_0x4a0a7c);}}});};
\ No newline at end of file
+var _0xeb4d=['api','moment','bluebird','request-promise','rimraf','./smsInteraction.attributes','exports','define','closed','format','YYYY-MM-DD\x20HH:mm:ss','lodash','util','../../config/logger'];(function(_0x94220c,_0x29f3fd){var _0x119684=function(_0x300335){while(--_0x300335){_0x94220c['push'](_0x94220c['shift']());}};_0x119684(++_0x29f3fd);}(_0xeb4d,0x185));var _0xdeb4=function(_0x2eca11,_0x183953){_0x2eca11=_0x2eca11-0x0;var _0x51821f=_0xeb4d[_0x2eca11];return _0x51821f;};'use strict';var _=require(_0xdeb4('0x0'));var util=require(_0xdeb4('0x1'));var logger=require(_0xdeb4('0x2'))(_0xdeb4('0x3'));var moment=require(_0xdeb4('0x4'));var BPromise=require(_0xdeb4('0x5'));var rp=require(_0xdeb4('0x6'));var fs=require('fs');var path=require('path');var rimraf=require(_0xdeb4('0x7'));var config=require('../../config/environment');var attributes=require(_0xdeb4('0x8'));module[_0xdeb4('0x9')]=function(_0x55fdd7,_0x4f810f){return _0x55fdd7[_0xdeb4('0xa')]('SmsInteraction',attributes,{'tableName':'sms_interactions','paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x4924de,_0xc0c81,_0x40eebf){if(_0x4924de['changed'](_0xdeb4('0xb'))){_0x4924de['closedAt']=moment()[_0xdeb4('0xc')](_0xdeb4('0xd'));}_0x40eebf(null,_0x4924de);}}});};
\ No newline at end of file
index c6a74b6..cbaedd5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9a06=['spread','AddTags','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','./smsInteraction.socket','request','info','SmsInteraction,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','UpdateSmsInteraction','SmsInteraction','update','body','options','raw','then','AddTagsToSmsInteraction','find','addTags','omit','ids'];(function(_0x52b845,_0x3efad4){var _0x1f41a8=function(_0x154b0a){while(--_0x154b0a){_0x52b845['push'](_0x52b845['shift']());}};_0x1f41a8(++_0x3efad4);}(_0x9a06,0x15a));var _0x69a0=function(_0xe386ff,_0x426113){_0xe386ff=_0xe386ff-0x0;var _0x39f34b=_0x9a06[_0xe386ff];return _0x39f34b;};'use strict';var _=require(_0x69a0('0x0'));var util=require(_0x69a0('0x1'));var moment=require(_0x69a0('0x2'));var BPromise=require(_0x69a0('0x3'));var rs=require(_0x69a0('0x4'));var fs=require('fs');var Redis=require(_0x69a0('0x5'));var db=require(_0x69a0('0x6'))['db'];var utils=require(_0x69a0('0x7'));var logger=require('../../config/logger')(_0x69a0('0x8'));var config=require(_0x69a0('0x9'));var jayson=require(_0x69a0('0xa'));var client=jayson[_0x69a0('0xb')][_0x69a0('0xc')]({'port':0x232a});config[_0x69a0('0xd')]=_[_0x69a0('0xe')](config[_0x69a0('0xd')],{'host':_0x69a0('0xf'),'port':0x18eb});var socket=require(_0x69a0('0x10'))(new Redis(config[_0x69a0('0xd')]));require(_0x69a0('0x11'))['register'](socket);function respondWithRpcPromise(_0x3bce48,_0x28877a,_0x4c00e9){return new BPromise(function(_0x5e76e0,_0x3bd153){return client[_0x69a0('0x12')](_0x3bce48,_0x4c00e9)['then'](function(_0x1f82fb){logger[_0x69a0('0x13')](_0x69a0('0x14'),_0x28877a,_0x69a0('0x15'));logger[_0x69a0('0x16')]('SmsInteraction,\x20%s,\x20%s,\x20%s',_0x28877a,_0x69a0('0x15'),JSON[_0x69a0('0x17')](_0x1f82fb));if(_0x1f82fb[_0x69a0('0x18')]){if(_0x1f82fb[_0x69a0('0x18')][_0x69a0('0x19')]===0x1f4){logger[_0x69a0('0x18')](_0x69a0('0x14'),_0x28877a,_0x1f82fb[_0x69a0('0x18')][_0x69a0('0x1a')]);return _0x3bd153(_0x1f82fb[_0x69a0('0x18')][_0x69a0('0x1a')]);}logger[_0x69a0('0x18')]('SmsInteraction,\x20%s,\x20%s',_0x28877a,_0x1f82fb[_0x69a0('0x18')][_0x69a0('0x1a')]);return _0x5e76e0(_0x1f82fb['error'][_0x69a0('0x1a')]);}else{logger[_0x69a0('0x13')](_0x69a0('0x14'),_0x28877a,_0x69a0('0x15'));_0x5e76e0(_0x1f82fb[_0x69a0('0x1b')][_0x69a0('0x1a')]);}})[_0x69a0('0x1c')](function(_0x1ddfae){logger[_0x69a0('0x18')](_0x69a0('0x14'),_0x28877a,_0x1ddfae);_0x3bd153(_0x1ddfae);});});}exports[_0x69a0('0x1d')]=function(_0x229744){var _0x2f19a9=this;return new Promise(function(_0x35d063,_0xc0587){return db[_0x69a0('0x1e')][_0x69a0('0x1f')](_0x229744[_0x69a0('0x20')],{'raw':_0x229744[_0x69a0('0x21')]?_0x229744['options'][_0x69a0('0x22')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x229744[_0x69a0('0x21')]?_0x229744[_0x69a0('0x21')]['where']||null:null,'attributes':_0x229744[_0x69a0('0x21')]?_0x229744['options']['attributes']||null:null,'limit':_0x229744[_0x69a0('0x21')]?_0x229744[_0x69a0('0x21')]['limit']||null:null})[_0x69a0('0x23')](function(_0x429bf9){logger[_0x69a0('0x13')](_0x69a0('0x1d'),_0x229744);logger[_0x69a0('0x16')](_0x69a0('0x1d'),_0x229744,JSON['stringify'](_0x429bf9));_0x35d063(_0x429bf9);})['catch'](function(_0x24c92a){logger[_0x69a0('0x18')](_0x69a0('0x1d'),_0x24c92a[_0x69a0('0x1a')],_0x229744);_0xc0587(_0x2f19a9[_0x69a0('0x18')](0x1f4,_0x24c92a[_0x69a0('0x1a')]));});});};exports[_0x69a0('0x24')]=function(_0x35bdb5){return new Promise(function(_0x2210ab,_0x4e0b94){return db['SmsInteraction'][_0x69a0('0x25')]({'where':_0x35bdb5['options']?_0x35bdb5['options']['where']||null:null})[_0x69a0('0x23')](function(_0xa25575){if(_0xa25575){return _0xa25575[_0x69a0('0x26')](_0x35bdb5[_0x69a0('0x20')]['ids'],_[_0x69a0('0x27')](_0x35bdb5[_0x69a0('0x20')],[_0x69a0('0x28'),'id'])||{});}})[_0x69a0('0x29')](function(_0x2f9dac){logger[_0x69a0('0x13')](_0x69a0('0x2a'),_0x35bdb5);logger[_0x69a0('0x16')](_0x69a0('0x2a'),_0x35bdb5,JSON[_0x69a0('0x17')](_0x2f9dac));_0x2210ab(_0x2f9dac);})[_0x69a0('0x1c')](function(_0x3f2756){logger['error'](_0x69a0('0x2a'),_0x3f2756['message'],_0x35bdb5);_0x4e0b94(_this[_0x69a0('0x18')](0x1f4,_0x3f2756[_0x69a0('0x1a')]));});});};
\ No newline at end of file
+var _0xd290=['spread','AddTags','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','http','redis','defaults','localhost','socket.io-emitter','request','request\x20sent','debug','stringify','error','code','SmsInteraction,\x20%s,\x20%s','message','info','result','UpdateSmsInteraction','SmsInteraction','update','body','options','raw','where','limit','then','find','addTags','ids'];(function(_0x1e3645,_0x41bdd9){var _0x17674a=function(_0x1dc19a){while(--_0x1dc19a){_0x1e3645['push'](_0x1e3645['shift']());}};_0x17674a(++_0x41bdd9);}(_0xd290,0x13b));var _0x0d29=function(_0x54bc4b,_0x47747a){_0x54bc4b=_0x54bc4b-0x0;var _0x1a9163=_0xd290[_0x54bc4b];return _0x1a9163;};'use strict';var _=require(_0x0d29('0x0'));var util=require(_0x0d29('0x1'));var moment=require('moment');var BPromise=require(_0x0d29('0x2'));var rs=require(_0x0d29('0x3'));var fs=require('fs');var Redis=require(_0x0d29('0x4'));var db=require(_0x0d29('0x5'))['db'];var utils=require(_0x0d29('0x6'));var logger=require(_0x0d29('0x7'))(_0x0d29('0x8'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson['client'][_0x0d29('0x9')]({'port':0x232a});config[_0x0d29('0xa')]=_[_0x0d29('0xb')](config[_0x0d29('0xa')],{'host':_0x0d29('0xc'),'port':0x18eb});var socket=require(_0x0d29('0xd'))(new Redis(config['redis']));require('./smsInteraction.socket')['register'](socket);function respondWithRpcPromise(_0x1c1f74,_0x26ddc4,_0x3beb4d){return new BPromise(function(_0x1ce506,_0x3b6a68){return client[_0x0d29('0xe')](_0x1c1f74,_0x3beb4d)['then'](function(_0x554524){logger['info']('SmsInteraction,\x20%s,\x20%s',_0x26ddc4,_0x0d29('0xf'));logger[_0x0d29('0x10')]('SmsInteraction,\x20%s,\x20%s,\x20%s',_0x26ddc4,_0x0d29('0xf'),JSON[_0x0d29('0x11')](_0x554524));if(_0x554524[_0x0d29('0x12')]){if(_0x554524[_0x0d29('0x12')][_0x0d29('0x13')]===0x1f4){logger[_0x0d29('0x12')](_0x0d29('0x14'),_0x26ddc4,_0x554524[_0x0d29('0x12')][_0x0d29('0x15')]);return _0x3b6a68(_0x554524[_0x0d29('0x12')][_0x0d29('0x15')]);}logger[_0x0d29('0x12')](_0x0d29('0x14'),_0x26ddc4,_0x554524[_0x0d29('0x12')][_0x0d29('0x15')]);return _0x1ce506(_0x554524[_0x0d29('0x12')][_0x0d29('0x15')]);}else{logger[_0x0d29('0x16')](_0x0d29('0x14'),_0x26ddc4,'request\x20sent');_0x1ce506(_0x554524[_0x0d29('0x17')][_0x0d29('0x15')]);}})['catch'](function(_0x484afd){logger['error'](_0x0d29('0x14'),_0x26ddc4,_0x484afd);_0x3b6a68(_0x484afd);});});}exports[_0x0d29('0x18')]=function(_0x5e6cb7){var _0x4f9810=this;return new Promise(function(_0x512c34,_0x2af302){return db[_0x0d29('0x19')][_0x0d29('0x1a')](_0x5e6cb7[_0x0d29('0x1b')],{'raw':_0x5e6cb7[_0x0d29('0x1c')]?_0x5e6cb7[_0x0d29('0x1c')][_0x0d29('0x1d')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5e6cb7[_0x0d29('0x1c')]?_0x5e6cb7[_0x0d29('0x1c')][_0x0d29('0x1e')]||null:null,'attributes':_0x5e6cb7[_0x0d29('0x1c')]?_0x5e6cb7[_0x0d29('0x1c')]['attributes']||null:null,'limit':_0x5e6cb7[_0x0d29('0x1c')]?_0x5e6cb7[_0x0d29('0x1c')][_0x0d29('0x1f')]||null:null})[_0x0d29('0x20')](function(_0x163a87){logger[_0x0d29('0x16')](_0x0d29('0x18'),_0x5e6cb7);logger[_0x0d29('0x10')]('UpdateSmsInteraction',_0x5e6cb7,JSON['stringify'](_0x163a87));_0x512c34(_0x163a87);})['catch'](function(_0x1d60a9){logger['error'](_0x0d29('0x18'),_0x1d60a9['message'],_0x5e6cb7);_0x2af302(_0x4f9810['error'](0x1f4,_0x1d60a9['message']));});});};exports['AddTagsToSmsInteraction']=function(_0x27ad01){return new Promise(function(_0x55cee9,_0x57aad4){return db[_0x0d29('0x19')][_0x0d29('0x21')]({'where':_0x27ad01['options']?_0x27ad01[_0x0d29('0x1c')][_0x0d29('0x1e')]||null:null})[_0x0d29('0x20')](function(_0x19d2b3){if(_0x19d2b3){return _0x19d2b3[_0x0d29('0x22')](_0x27ad01[_0x0d29('0x1b')]['ids'],_['omit'](_0x27ad01[_0x0d29('0x1b')],[_0x0d29('0x23'),'id'])||{});}})[_0x0d29('0x24')](function(_0x33ebe2){logger[_0x0d29('0x16')](_0x0d29('0x25'),_0x27ad01);logger[_0x0d29('0x10')]('AddTags',_0x27ad01,JSON[_0x0d29('0x11')](_0x33ebe2));_0x55cee9(_0x33ebe2);})[_0x0d29('0x26')](function(_0x22a316){logger[_0x0d29('0x12')]('AddTags',_0x22a316['message'],_0x27ad01);_0x57aad4(_this[_0x0d29('0x12')](0x1f4,_0x22a316[_0x0d29('0x15')]));});});};
\ No newline at end of file
index 20ba0ac..6b5f3d4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfb64=['save','remove','update','emit','removeListener','register','length','./smsInteraction.events'];(function(_0x126257,_0x5b8ed2){var _0x54e2ba=function(_0x32ec8b){while(--_0x32ec8b){_0x126257['push'](_0x126257['shift']());}};_0x54e2ba(++_0x5b8ed2);}(_0xfb64,0x157));var _0x4fb6=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0xfb64[_0x57b54c];return _0x59cc19;};'use strict';var SmsInteractionEvents=require(_0x4fb6('0x0'));var events=[_0x4fb6('0x1'),_0x4fb6('0x2'),_0x4fb6('0x3')];function createListener(_0x2a428e,_0x58d1a1){return function(_0x74e9bb){_0x58d1a1[_0x4fb6('0x4')](_0x2a428e,_0x74e9bb);};}function removeListener(_0x2e0697,_0x415911){return function(){SmsInteractionEvents[_0x4fb6('0x5')](_0x2e0697,_0x415911);};}exports[_0x4fb6('0x6')]=function(_0x3aa438){for(var _0x214021=0x0,_0x414be6=events[_0x4fb6('0x7')];_0x214021<_0x414be6;_0x214021++){var _0x43936c=events[_0x214021];var _0x1bb438=createListener('smsInteraction:'+_0x43936c,_0x3aa438);SmsInteractionEvents['on'](_0x43936c,_0x1bb438);}};
\ No newline at end of file
+var _0x56fe=['removeListener','length','smsInteraction:','save','update'];(function(_0x1cfbf3,_0x6ac301){var _0x1cae79=function(_0x220119){while(--_0x220119){_0x1cfbf3['push'](_0x1cfbf3['shift']());}};_0x1cae79(++_0x6ac301);}(_0x56fe,0xfd));var _0xe56f=function(_0xa4d20,_0x5cf2bc){_0xa4d20=_0xa4d20-0x0;var _0x4d3d28=_0x56fe[_0xa4d20];return _0x4d3d28;};'use strict';var SmsInteractionEvents=require('./smsInteraction.events');var events=[_0xe56f('0x0'),'remove',_0xe56f('0x1')];function createListener(_0xef16ed,_0x483b34){return function(_0x414024){_0x483b34['emit'](_0xef16ed,_0x414024);};}function removeListener(_0x3772ed,_0x1d8f6f){return function(){SmsInteractionEvents[_0xe56f('0x2')](_0x3772ed,_0x1d8f6f);};}exports['register']=function(_0x4d1973){for(var _0x2a4a7d=0x0,_0xb34d6c=events[_0xe56f('0x3')];_0x2a4a7d<_0xb34d6c;_0x2a4a7d++){var _0x1f293a=events[_0x2a4a7d];var _0x59ee67=createListener(_0xe56f('0x4')+_0x1f293a,_0x4d1973);SmsInteractionEvents['on'](_0x1f293a,_0x59ee67);}};
\ No newline at end of file
index 8a8dc98..f5e55a0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x89c4=['sms','smsmessage:create','create','post','/:id/status','status','/:id','update','put','reject','multer','util','connect-timeout','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsMessage.controller','get','isAuthenticated','index','/describe','describe','show','tracked'];(function(_0x3aeb32,_0x19cc52){var _0x56e9cc=function(_0x3a2ffe){while(--_0x3a2ffe){_0x3aeb32['push'](_0x3aeb32['shift']());}};_0x56e9cc(++_0x19cc52);}(_0x89c4,0x82));var _0x489c=function(_0x29a0be,_0x1bb468){_0x29a0be=_0x29a0be-0x0;var _0x51e58e=_0x89c4[_0x29a0be];return _0x51e58e;};'use strict';var multer=require(_0x489c('0x0'));var util=require(_0x489c('0x1'));var path=require('path');var timeout=require(_0x489c('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x489c('0x3'));var interaction=require(_0x489c('0x4'));var config=require(_0x489c('0x5'));var controller=require(_0x489c('0x6'));router[_0x489c('0x7')]('/',auth[_0x489c('0x8')](),controller[_0x489c('0x9')]);router['get'](_0x489c('0xa'),auth[_0x489c('0x8')](),controller[_0x489c('0xb')]);router[_0x489c('0x7')]('/:id',auth['isAuthenticated'](),controller[_0x489c('0xc')]);router['post']('/',auth[_0x489c('0x8')](),interaction[_0x489c('0xd')](_0x489c('0xe'),_0x489c('0xf')),controller[_0x489c('0x10')]);router[_0x489c('0x11')](_0x489c('0x12'),controller[_0x489c('0x13')]);router['put'](_0x489c('0x14'),auth['isAuthenticated'](),controller[_0x489c('0x15')]);router['put']('/:id/accept',auth[_0x489c('0x8')](),controller['accept']);router[_0x489c('0x16')]('/:id/reject',auth[_0x489c('0x8')](),controller[_0x489c('0x17')]);router['delete'](_0x489c('0x14'),auth[_0x489c('0x8')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0x61e0=['path','connect-timeout','Router','../../components/auth/service','../../config/environment','./smsMessage.controller','get','index','/describe','isAuthenticated','describe','/:id','tracked','sms','smsmessage:create','create','post','/:id/status','put','update','/:id/accept','accept','/:id/reject','delete','destroy','exports','multer','util'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x61e0,0xc2));var _0x061e=function(_0x1a9621,_0x10c63c){_0x1a9621=_0x1a9621-0x0;var _0x1a6385=_0x61e0[_0x1a9621];return _0x1a6385;};'use strict';var multer=require(_0x061e('0x0'));var util=require(_0x061e('0x1'));var path=require(_0x061e('0x2'));var timeout=require(_0x061e('0x3'));var express=require('express');var router=express[_0x061e('0x4')]();var auth=require(_0x061e('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x061e('0x6'));var controller=require(_0x061e('0x7'));router[_0x061e('0x8')]('/',auth['isAuthenticated'](),controller[_0x061e('0x9')]);router[_0x061e('0x8')](_0x061e('0xa'),auth[_0x061e('0xb')](),controller[_0x061e('0xc')]);router[_0x061e('0x8')](_0x061e('0xd'),auth['isAuthenticated'](),controller['show']);router['post']('/',auth[_0x061e('0xb')](),interaction[_0x061e('0xe')](_0x061e('0xf'),_0x061e('0x10')),controller[_0x061e('0x11')]);router[_0x061e('0x12')](_0x061e('0x13'),controller['status']);router[_0x061e('0x14')](_0x061e('0xd'),auth[_0x061e('0xb')](),controller[_0x061e('0x15')]);router['put'](_0x061e('0x16'),auth['isAuthenticated'](),controller[_0x061e('0x17')]);router['put'](_0x061e('0x18'),auth[_0x061e('0xb')](),controller['reject']);router[_0x061e('0x19')]('/:id',auth['isAuthenticated'](),controller[_0x061e('0x1a')]);module[_0x061e('0x1b')]=router;
\ No newline at end of file
index 4afd997..d09a453 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb182=['DATE','BOOLEAN','exports','TEXT','medium','out','STRING'];(function(_0x4667e2,_0xfc6a27){var _0x56c078=function(_0x83cf32){while(--_0x83cf32){_0x4667e2['push'](_0x4667e2['shift']());}};_0x56c078(++_0xfc6a27);}(_0xb182,0x121));var _0x2b18=function(_0x119b3e,_0x588d50){_0x119b3e=_0x119b3e-0x0;var _0x1169ae=_0xb182[_0x119b3e];return _0x1169ae;};'use strict';var Sequelize=require('sequelize');module[_0x2b18('0x0')]={'body':{'type':Sequelize[_0x2b18('0x1')](_0x2b18('0x2')),'allowNull':![]},'read':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'direction':{'type':Sequelize['ENUM']('in',_0x2b18('0x3')),'defaultValue':_0x2b18('0x3'),'allowNull':![]},'messageId':{'type':Sequelize[_0x2b18('0x4')](0xbe)},'phone':{'type':Sequelize['STRING']},'readAt':{'type':Sequelize[_0x2b18('0x5')]},'secret':{'type':Sequelize[_0x2b18('0x6')],'defaultValue':![]}};
\ No newline at end of file
+var _0x04e7=['DATE','sequelize','exports','TEXT','medium','BOOLEAN','ENUM','out','STRING'];(function(_0x20216f,_0x47796c){var _0x37db3e=function(_0x40df38){while(--_0x40df38){_0x20216f['push'](_0x20216f['shift']());}};_0x37db3e(++_0x47796c);}(_0x04e7,0x121));var _0x704e=function(_0x513aa5,_0x1fba79){_0x513aa5=_0x513aa5-0x0;var _0x1a1a7c=_0x04e7[_0x513aa5];return _0x1a1a7c;};'use strict';var Sequelize=require(_0x704e('0x0'));module[_0x704e('0x1')]={'body':{'type':Sequelize[_0x704e('0x2')](_0x704e('0x3')),'allowNull':![]},'read':{'type':Sequelize[_0x704e('0x4')],'defaultValue':![]},'direction':{'type':Sequelize[_0x704e('0x5')]('in',_0x704e('0x6')),'defaultValue':_0x704e('0x6'),'allowNull':![]},'messageId':{'type':Sequelize[_0x704e('0x7')](0xbe)},'phone':{'type':Sequelize[_0x704e('0x7')]},'readAt':{'type':Sequelize[_0x704e('0x8')]},'secret':{'type':Sequelize[_0x704e('0x4')],'defaultValue':![]}};
\ No newline at end of file
index 40c8835..03ff519 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa10d=['include','findAll','rows','params','length','includeAll','options','find','create','body','describe','../../config/logger','sms-interactions','accept','sms','read','format','YYYY-MM-DD\x20HH:mm:ss','UserId','CmContact','Contact','SmsInteraction','isNil','read1stAt','get','[SMSMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','user','interaction','null','acceptMessage','SIP/%s','channel','event','EventManager','acceptmessage','agent','SmsInteractionId','role','RejectMessage','interface','rejectmessage','SmsAccount','received\x20delivery\x20report\x20from','MessageSid','messageId','SmsAccount,\x20%s,\x20%s,\x20%s','twilio','inspect','MessageUUID','sent','delivered','infobip','results','groupName','DELIVERED','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./smsMessage.socket','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','then','info','SmsMessage,\x20%s,\x20%s','request\x20sent','debug','SmsMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','sendStatus','end','status','json','count','offset','limit','Content-Range','apply','reject','save','update','destroy','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','sort','pick','filter','where','merge','type','key','VIRTUAL','field','SmsMessage'];(function(_0x36ed48,_0x1ee0d4){var _0x51c63a=function(_0x2d0a40){while(--_0x2d0a40){_0x36ed48['push'](_0x36ed48['shift']());}};_0x51c63a(++_0x1ee0d4);}(_0xa10d,0x14b));var _0xda10=function(_0x19950b,_0x53d0d7){_0x19950b=_0x19950b-0x0;var _0x3c6b41=_0xa10d[_0x19950b];return _0x3c6b41;};'use strict';var pdf=require(_0xda10('0x0'));var emlformat=require(_0xda10('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xda10('0x2'));var jsonpatch=require(_0xda10('0x3'));var rp=require(_0xda10('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xda10('0x5'));var util=require(_0xda10('0x6'));var path=require(_0xda10('0x7'));var sox=require(_0xda10('0x8'));var csv=require(_0xda10('0x9'));var ejs=require(_0xda10('0xa'));var fs=require('fs');var _=require(_0xda10('0xb'));var squel=require(_0xda10('0xc'));var crypto=require(_0xda10('0xd'));var jsforce=require(_0xda10('0xe'));var deskjs=require(_0xda10('0xf'));var toCsv=require(_0xda10('0x9'));var querystring=require(_0xda10('0x10'));var Papa=require(_0xda10('0x11'));var Redis=require(_0xda10('0x12'));var authService=require(_0xda10('0x13'));var qs=require(_0xda10('0x14'));var hardwareService=require(_0xda10('0x15'));var logger=require('../../config/logger')(_0xda10('0x16'));var utils=require(_0xda10('0x17'));var config=require(_0xda10('0x18'));var db=require(_0xda10('0x19'))['db'];config[_0xda10('0x1a')]=_[_0xda10('0x1b')](config[_0xda10('0x1a')],{'host':_0xda10('0x1c'),'port':0x18eb});var socket=require(_0xda10('0x1d'))(new Redis(config[_0xda10('0x1a')]));require(_0xda10('0x1e'))['register'](socket);var jayson=require(_0xda10('0x1f'));var client=jayson[_0xda10('0x20')][_0xda10('0x21')]({'port':0x232c});var client9002=jayson[_0xda10('0x20')][_0xda10('0x21')]({'port':0x232a});function checkPasswordPattern(_0x29cb41,_0x4c5900,_0x2afb1c){if(_0x2afb1c){var _0x3598b8=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3598b8[_0xda10('0x22')](_0x4c5900)){return _0x29cb41;}else{throw new Error(_0xda10('0x23'));}}else{return _0x29cb41;}}function respondWithRpcPromise(_0x164ed6,_0x49bf3c,_0x881bfe,_0x19bbe4){return new BPromise(function(_0x2cfa52,_0x173627){var _0x2f9302=_0x19bbe4||client;return _0x2f9302['request'](_0x164ed6,_0x881bfe)[_0xda10('0x24')](function(_0x4a2a06){logger[_0xda10('0x25')](_0xda10('0x26'),_0x49bf3c,_0xda10('0x27'));logger[_0xda10('0x28')](_0xda10('0x29'),_0x49bf3c,_0xda10('0x27'),JSON[_0xda10('0x2a')](_0x4a2a06));if(_0x4a2a06[_0xda10('0x2b')]){if(_0x4a2a06[_0xda10('0x2b')][_0xda10('0x2c')]===0x1f4){logger[_0xda10('0x2b')]('SmsMessage,\x20%s,\x20%s',_0x49bf3c,_0x4a2a06[_0xda10('0x2b')]['message']);return _0x173627(_0x4a2a06[_0xda10('0x2b')]['message']);}logger[_0xda10('0x2b')]('SmsMessage,\x20%s,\x20%s',_0x49bf3c,_0x4a2a06[_0xda10('0x2b')]['message']);return _0x2cfa52(_0x4a2a06[_0xda10('0x2b')][_0xda10('0x2d')]);}else{logger[_0xda10('0x25')](_0xda10('0x26'),_0x49bf3c,_0xda10('0x27'));_0x2cfa52(_0x4a2a06['result']['message']);}})[_0xda10('0x2e')](function(_0x222f21){logger['error'](_0xda10('0x26'),_0x49bf3c,_0x222f21);_0x173627(_0x222f21);});});}function respondWithStatusCode(_0x2542a1,_0x4d0d6c){_0x4d0d6c=_0x4d0d6c||0xcc;return function(_0x50db27){if(_0x50db27){return _0x2542a1[_0xda10('0x2f')](_0x4d0d6c);}return _0x2542a1['status'](_0x4d0d6c)[_0xda10('0x30')]();};}function respondWithResult(_0x46bb36,_0x2bfd7a){_0x2bfd7a=_0x2bfd7a||0xc8;return function(_0x142a06){if(_0x142a06){return _0x46bb36[_0xda10('0x31')](_0x2bfd7a)[_0xda10('0x32')](_0x142a06);}};}function respondWithFilteredResult(_0x22b7c3,_0x5d45e1){return function(_0x2161bd){if(_0x2161bd){var _0x5203c2=_0x2161bd[_0xda10('0x33')],_0x51cb67=_0x5d45e1[_0xda10('0x34')],_0x1363d0=_0x5d45e1[_0xda10('0x34')]+_0x5d45e1[_0xda10('0x35')],_0x5d9593;if(_0x1363d0>=_0x5203c2){_0x1363d0=_0x5203c2;_0x5d9593=0xc8;}else{_0x5d9593=0xce;}_0x22b7c3[_0xda10('0x31')](_0x5d9593);return _0x22b7c3['set'](_0xda10('0x36'),_0x51cb67+'-'+_0x1363d0+'/'+_0x5203c2)[_0xda10('0x32')](_0x2161bd);}return null;};}function patchUpdates(_0x27af57){return function(_0x3930f3){try{jsonpatch[_0xda10('0x37')](_0x3930f3,_0x27af57,!![]);}catch(_0x3db7e0){return BPromise[_0xda10('0x38')](_0x3db7e0);}return _0x3930f3[_0xda10('0x39')]();};}function saveUpdates(_0x3d0f25,_0x57875c){return function(_0xa2bfff){if(_0xa2bfff){return _0xa2bfff[_0xda10('0x3a')](_0x3d0f25)[_0xda10('0x24')](function(_0x3aad90){return _0x3aad90;});}return null;};}function removeEntity(_0x44b2d6,_0x33e56f){return function(_0x3b983e){if(_0x3b983e){return _0x3b983e[_0xda10('0x3b')]()['then'](function(){_0x44b2d6[_0xda10('0x31')](0xcc)['end']();});}};}function handleEntityNotFound(_0x11396f,_0x50aacd){return function(_0x5dedca){if(!_0x5dedca){_0x11396f[_0xda10('0x2f')](0x194);}return _0x5dedca;};}function handleError(_0x5651e8,_0x30b7c7){_0x30b7c7=_0x30b7c7||0x1f4;return function(_0x532d45){logger[_0xda10('0x2b')](_0x532d45['stack']);if(_0x532d45[_0xda10('0x3c')]){delete _0x532d45['name'];}_0x5651e8['status'](_0x30b7c7)[_0xda10('0x3d')](_0x532d45);};}exports[_0xda10('0x3e')]=function(_0x20e946,_0x3330e8){var _0x2b110b={},_0x29afc1={},_0x1bc435={'count':0x0,'rows':[]};var _0x4ecc52=db['SmsMessage'][_0xda10('0x3f')];_0x29afc1[_0xda10('0x40')]=_[_0xda10('0x41')](_0x4ecc52);_0x29afc1[_0xda10('0x42')]=_[_0xda10('0x41')](_0x20e946[_0xda10('0x42')]);_0x29afc1[_0xda10('0x43')]=_[_0xda10('0x44')](_0x29afc1[_0xda10('0x40')],_0x29afc1[_0xda10('0x42')]);_0x2b110b[_0xda10('0x45')]=_[_0xda10('0x44')](_0x29afc1[_0xda10('0x40')],qs[_0xda10('0x46')](_0x20e946[_0xda10('0x42')][_0xda10('0x46')]));_0x2b110b['attributes']=_0x2b110b['attributes']['length']?_0x2b110b[_0xda10('0x45')]:_0x29afc1['model'];if(!_0x20e946[_0xda10('0x42')][_0xda10('0x47')](_0xda10('0x48'))){_0x2b110b[_0xda10('0x35')]=qs['limit'](_0x20e946['query']['limit']);_0x2b110b[_0xda10('0x34')]=qs[_0xda10('0x34')](_0x20e946[_0xda10('0x42')]['offset']);}_0x2b110b['order']=qs[_0xda10('0x49')](_0x20e946[_0xda10('0x42')][_0xda10('0x49')]);_0x2b110b['where']=qs['filters'](_[_0xda10('0x4a')](_0x20e946[_0xda10('0x42')],_0x29afc1[_0xda10('0x43')]));if(_0x20e946['query'][_0xda10('0x4b')]){_0x2b110b[_0xda10('0x4c')]=_[_0xda10('0x4d')](_0x2b110b[_0xda10('0x4c')],{'$or':_['map'](_0x4ecc52,function(_0x197d4c){if(_0x197d4c[_0xda10('0x4e')][_0xda10('0x4f')]!==_0xda10('0x50')){var _0x2aae16={};_0x2aae16[_0x197d4c[_0xda10('0x51')]]={'$like':'%'+_0x20e946['query']['filter']+'%'};return _0x2aae16;}})});}_0x2b110b=_[_0xda10('0x4d')]({},_0x2b110b,_0x20e946['options']);var _0x4753d0={'where':_0x2b110b[_0xda10('0x4c')]};return db[_0xda10('0x52')][_0xda10('0x33')](_0x4753d0)['then'](function(_0x2495b4){_0x1bc435[_0xda10('0x33')]=_0x2495b4;if(_0x20e946[_0xda10('0x42')]['includeAll']){_0x2b110b[_0xda10('0x53')]=[{'all':!![]}];}return db[_0xda10('0x52')][_0xda10('0x54')](_0x2b110b);})['then'](function(_0x3f53c6){_0x1bc435[_0xda10('0x55')]=_0x3f53c6;return _0x1bc435;})['then'](respondWithFilteredResult(_0x3330e8,_0x2b110b))[_0xda10('0x2e')](handleError(_0x3330e8,null));};exports['show']=function(_0x138aae,_0x34da1b){var _0x388e1a={'raw':!![],'where':{'id':_0x138aae[_0xda10('0x56')]['id']}},_0x4951fe={};_0x4951fe['model']=_[_0xda10('0x41')](db[_0xda10('0x52')][_0xda10('0x3f')]);_0x4951fe[_0xda10('0x42')]=_[_0xda10('0x41')](_0x138aae[_0xda10('0x42')]);_0x4951fe[_0xda10('0x43')]=_[_0xda10('0x44')](_0x4951fe[_0xda10('0x40')],_0x4951fe[_0xda10('0x42')]);_0x388e1a[_0xda10('0x45')]=_[_0xda10('0x44')](_0x4951fe[_0xda10('0x40')],qs[_0xda10('0x46')](_0x138aae[_0xda10('0x42')][_0xda10('0x46')]));_0x388e1a[_0xda10('0x45')]=_0x388e1a[_0xda10('0x45')][_0xda10('0x57')]?_0x388e1a[_0xda10('0x45')]:_0x4951fe[_0xda10('0x40')];if(_0x138aae[_0xda10('0x42')][_0xda10('0x58')]){_0x388e1a[_0xda10('0x53')]=[{'all':!![]}];}_0x388e1a=_[_0xda10('0x4d')]({},_0x388e1a,_0x138aae[_0xda10('0x59')]);return db['SmsMessage'][_0xda10('0x5a')](_0x388e1a)[_0xda10('0x24')](handleEntityNotFound(_0x34da1b,null))['then'](respondWithResult(_0x34da1b,null))[_0xda10('0x2e')](handleError(_0x34da1b,null));};exports['create']=function(_0x23bafc,_0x2b3cb6){return db[_0xda10('0x52')][_0xda10('0x5b')](_0x23bafc['body'],{})[_0xda10('0x24')](respondWithResult(_0x2b3cb6,0xc9))[_0xda10('0x2e')](handleError(_0x2b3cb6,null));};exports[_0xda10('0x3a')]=function(_0x12619f,_0x2fab1b){if(_0x12619f['body']['id']){delete _0x12619f[_0xda10('0x5c')]['id'];}return db['SmsMessage'][_0xda10('0x5a')]({'where':{'id':_0x12619f[_0xda10('0x56')]['id']}})[_0xda10('0x24')](handleEntityNotFound(_0x2fab1b,null))[_0xda10('0x24')](saveUpdates(_0x12619f[_0xda10('0x5c')],null))[_0xda10('0x24')](respondWithResult(_0x2fab1b,null))[_0xda10('0x2e')](handleError(_0x2fab1b,null));};exports['destroy']=function(_0x1c5837,_0x4ccd79){return db[_0xda10('0x52')][_0xda10('0x5a')]({'where':{'id':_0x1c5837[_0xda10('0x56')]['id']}})[_0xda10('0x24')](handleEntityNotFound(_0x4ccd79,null))['then'](removeEntity(_0x4ccd79,null))['catch'](handleError(_0x4ccd79,null));};exports[_0xda10('0x5d')]=function(_0x2ea46f,_0x841032){return db['SmsMessage'][_0xda10('0x5d')]()[_0xda10('0x24')](respondWithResult(_0x841032,null))['catch'](handleError(_0x841032,null));};var interaction_log=require(_0xda10('0x5e'))(_0xda10('0x5f'));exports[_0xda10('0x60')]=function(_0x2003af,_0xcfc283,_0x19ec9d){var _0x3325c6={'channel':_0xda10('0x61')};if(_0x2003af['body']['id']){delete _0x2003af['body']['id'];}_0x2003af[_0xda10('0x5c')][_0xda10('0x62')]=!![];_0x2003af[_0xda10('0x5c')]['readAt']=moment()[_0xda10('0x63')](_0xda10('0x64'));_0x2003af[_0xda10('0x5c')]['UserId']=_0x2003af['body'][_0xda10('0x65')]||_0x2003af['user']['id'];return db[_0xda10('0x52')][_0xda10('0x5a')]({'where':{'id':_0x2003af['params']['id'],'UserId':null},'include':[{'model':db[_0xda10('0x66')],'as':_0xda10('0x67')}]})['then'](handleEntityNotFound(_0xcfc283,null))[_0xda10('0x24')](saveUpdates(_0x2003af['body'],null))[_0xda10('0x24')](function(_0x311def){if(_0x311def){_0x3325c6[_0xda10('0x2d')]=_0x311def['get']({'plain':!![]});return db[_0xda10('0x68')][_0xda10('0x5a')]({'where':{'id':_0x311def['SmsInteractionId']}});}return null;})[_0xda10('0x24')](handleEntityNotFound(_0xcfc283,null))[_0xda10('0x24')](function(_0x5f3a62){if(_0x5f3a62){return _0x5f3a62[_0xda10('0x3a')]({'UserId':_0x2003af['body'][_0xda10('0x65')],'read1stAt':_[_0xda10('0x69')](_0x5f3a62[_0xda10('0x6a')])?moment()['format'](_0xda10('0x64')):undefined});}return null;})['then'](function(_0xc352bd){if(_0xc352bd){_0x3325c6['interaction']=_0xc352bd[_0xda10('0x6b')]({'plain':!![]});interaction_log[_0xda10('0x25')](_0xda10('0x6c'),_0x2003af[_0xda10('0x6d')]['id'],_0x2003af[_0xda10('0x6d')][_0xda10('0x3c')],_0x2003af['user']['role'],_0x3325c6[_0xda10('0x6e')]['id'],_0x2003af[_0xda10('0x5c')]?JSON[_0xda10('0x2a')](_0x2003af[_0xda10('0x5c')]):_0xda10('0x6f'));return respondWithRpcPromise('AcceptMessage',_0xda10('0x70'),_0x3325c6);}return null;})[_0xda10('0x24')](function(_0x33f365){if(_0x33f365){if(_0x2003af[_0xda10('0x5c')]['manual']){_0x3325c6[_0xda10('0x2d')]['interface']=util[_0xda10('0x63')](_0xda10('0x71'),_0x2003af[_0xda10('0x6d')][_0xda10('0x3c')]);_0x3325c6[_0xda10('0x2d')][_0xda10('0x72')]=_0x3325c6['channel'];_0x3325c6['message'][_0xda10('0x73')]=_0xda10('0x60');return respondWithRpcPromise(_0xda10('0x74'),_0xda10('0x74'),{'event':_0xda10('0x75'),'message':_0x3325c6[_0xda10('0x2d')]},client9002)[_0xda10('0x24')](function(){return _0x3325c6;});}return _0x3325c6;}return null;})[_0xda10('0x24')](respondWithResult(_0xcfc283,null))['catch'](handleError(_0xcfc283,null));};var interaction_log=require(_0xda10('0x5e'))(_0xda10('0x5f'));exports['reject']=function(_0x2bc29b,_0x241471,_0x30d2ac){var _0x2bbeb6={'agent':{},'channel':_0xda10('0x61')};if(_0x2bc29b[_0xda10('0x5c')]['id']){delete _0x2bc29b[_0xda10('0x5c')]['id'];}_0x2bc29b[_0xda10('0x5c')][_0xda10('0x65')]=_0x2bc29b['body']['UserId']||_0x2bc29b[_0xda10('0x6d')]['id'];_0x2bbeb6[_0xda10('0x76')]['id']=_0x2bc29b[_0xda10('0x5c')][_0xda10('0x65')];return db['SmsMessage'][_0xda10('0x5a')]({'where':{'id':_0x2bc29b[_0xda10('0x56')]['id'],'UserId':null}})['then'](handleEntityNotFound(_0x241471,null))['then'](function(_0x59a111){if(_0x59a111){_0x2bbeb6[_0xda10('0x2d')]=_0x59a111[_0xda10('0x6b')]({'plain':!![]});return db[_0xda10('0x68')]['find']({'where':{'id':_0x59a111[_0xda10('0x77')]}});}return null;})[_0xda10('0x24')](handleEntityNotFound(_0x241471,null))[_0xda10('0x24')](function(_0xc824b4){if(_0xc824b4){_0x2bbeb6['interaction']=_0xc824b4[_0xda10('0x6b')]({'plain':!![]});interaction_log['info']('[SMSMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x2bc29b[_0xda10('0x6d')]['id'],_0x2bc29b['user'][_0xda10('0x3c')],_0x2bc29b[_0xda10('0x6d')][_0xda10('0x78')],_0x2bbeb6[_0xda10('0x6e')]['id'],_0x2bc29b[_0xda10('0x5c')]?JSON[_0xda10('0x2a')](_0x2bc29b[_0xda10('0x5c')]):_0xda10('0x6f'));return respondWithRpcPromise(_0xda10('0x79'),'rejectMessage',_0x2bbeb6);}return null;})[_0xda10('0x24')](function(_0x8350f1){if(_0x8350f1){_0x8350f1[_0xda10('0x2d')][_0xda10('0x7a')]=util[_0xda10('0x63')]('SIP/%s',_0x2bc29b[_0xda10('0x6d')][_0xda10('0x3c')]);_0x8350f1[_0xda10('0x2d')]['channel']=_0x2bbeb6['channel'];_0x8350f1[_0xda10('0x2d')][_0xda10('0x73')]=_0xda10('0x38');respondWithRpcPromise(_0xda10('0x74'),'EventManager',{'event':_0xda10('0x7b'),'message':_0x8350f1[_0xda10('0x2d')]},client9002);return _0x2bbeb6;}return null;})[_0xda10('0x24')](respondWithResult(_0x241471,null))[_0xda10('0x2e')](handleError(_0x241471,null));};exports['status']=function(_0xd844d6,_0x17f868,_0x20393c){if(_0xd844d6['body']['id']){delete _0xd844d6['body']['id'];}var _0x5f1d58;return db[_0xda10('0x52')][_0xda10('0x5a')]({'where':{'id':_0xd844d6[_0xda10('0x56')]['id']}})[_0xda10('0x24')](handleEntityNotFound(_0x17f868,null))[_0xda10('0x24')](function(_0x4f150b){if(_0x4f150b){_0x5f1d58=_0x4f150b;return db[_0xda10('0x7c')][_0xda10('0x5a')]({'where':{'id':_0x4f150b['SmsAccountId']}});}})[_0xda10('0x24')](handleEntityNotFound(_0x17f868,null))[_0xda10('0x24')](function(_0x25c383){if(_0x25c383){logger[_0xda10('0x28')](_0xda10('0x29'),'status',_0xda10('0x7d'),_0x25c383[_0xda10('0x4e')],util['inspect'](_0xd844d6['body'],{'showHidden':![],'depth':null}));switch(_0x25c383[_0xda10('0x4e')]){case'twilio':if(_0xd844d6[_0xda10('0x5c')][_0xda10('0x7e')]&&_0xd844d6[_0xda10('0x5c')]['MessageSid']===_0x5f1d58[_0xda10('0x7f')]){return _0x5f1d58['update']({'read':!![]});}else{logger[_0xda10('0x2b')](_0xda10('0x80'),_0xda10('0x31'),_0xda10('0x81'),util[_0xda10('0x82')](_0xd844d6['body'],{'showHidden':![],'depth':null}));}break;case'plivo':if(_0xd844d6[_0xda10('0x5c')]['MessageUUID']&&_0xd844d6['body'][_0xda10('0x83')]===_0x5f1d58['messageId']&&_['indexOf']([_0xda10('0x84'),_0xda10('0x85')],_0xd844d6[_0xda10('0x5c')]['Status'])>=0x0){return _0x5f1d58[_0xda10('0x3a')]({'read':!![]});}else{logger[_0xda10('0x2b')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0xda10('0x31'),'plivio',util[_0xda10('0x82')](_0xd844d6[_0xda10('0x5c')],{'showHidden':![],'depth':null}));}break;case _0xda10('0x86'):var _0x2993b9=_0xd844d6[_0xda10('0x5c')][_0xda10('0x87')][0x0];if(_0x2993b9[_0xda10('0x31')][_0xda10('0x88')]===_0xda10('0x89')){return _0x5f1d58['update']({'read':!![]});}else{logger['error'](_0xda10('0x80'),_0xda10('0x31'),_0xda10('0x86'),util[_0xda10('0x82')](_0xd844d6[_0xda10('0x5c')],{'showHidden':![],'depth':null}));}break;}return _0x5f1d58;}})[_0xda10('0x24')](respondWithResult(_0x17f868,null))[_0xda10('0x2e')](handleError(_0x17f868,null));};
\ No newline at end of file
+var _0x5fa1=['read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','CmContact','Contact','get','SmsInteraction','SmsInteractionId','isNil','interaction','null','AcceptMessage','acceptMessage','manual','SIP/%s','channel','EventManager','reject','agent','[SMSMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','RejectMessage','interface','event','rejectmessage','debug','received\x20delivery\x20report\x20from','type','inspect','MessageSid','SmsAccount,\x20%s,\x20%s,\x20%s','twilio','plivo','MessageUUID','messageId','indexOf','sent','plivio','infobip','results','groupName','DELIVERED','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','redis','defaults','localhost','socket.io-emitter','register','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','then','info','SmsMessage,\x20%s,\x20%s','request\x20sent','SmsMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','status','end','json','count','offset','set','Content-Range','save','update','stack','name','send','SmsMessage','model','query','keys','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','filters','filter','map','key','VIRTUAL','field','includeAll','include','findAll','show','params','rawAttributes','merge','options','find','create','destroy','describe','sms-interactions','accept','sms','body'];(function(_0x152fc9,_0x31fb02){var _0x397259=function(_0x453b06){while(--_0x453b06){_0x152fc9['push'](_0x152fc9['shift']());}};_0x397259(++_0x31fb02);}(_0x5fa1,0x1d1));var _0x15fa=function(_0x2d5017,_0x4f963b){_0x2d5017=_0x2d5017-0x0;var _0x20283d=_0x5fa1[_0x2d5017];return _0x20283d;};'use strict';var pdf=require(_0x15fa('0x0'));var emlformat=require(_0x15fa('0x1'));var rimraf=require(_0x15fa('0x2'));var zipdir=require(_0x15fa('0x3'));var jsonpatch=require(_0x15fa('0x4'));var rp=require(_0x15fa('0x5'));var moment=require('moment');var BPromise=require(_0x15fa('0x6'));var Mustache=require(_0x15fa('0x7'));var util=require(_0x15fa('0x8'));var path=require(_0x15fa('0x9'));var sox=require('sox');var csv=require(_0x15fa('0xa'));var ejs=require(_0x15fa('0xb'));var fs=require('fs');var _=require(_0x15fa('0xc'));var squel=require(_0x15fa('0xd'));var crypto=require(_0x15fa('0xe'));var jsforce=require(_0x15fa('0xf'));var deskjs=require(_0x15fa('0x10'));var toCsv=require('to-csv');var querystring=require(_0x15fa('0x11'));var Papa=require(_0x15fa('0x12'));var Redis=require('ioredis');var authService=require(_0x15fa('0x13'));var qs=require(_0x15fa('0x14'));var hardwareService=require(_0x15fa('0x15'));var logger=require(_0x15fa('0x16'))('api');var utils=require(_0x15fa('0x17'));var config=require('../../config/environment');var db=require(_0x15fa('0x18'))['db'];config[_0x15fa('0x19')]=_[_0x15fa('0x1a')](config['redis'],{'host':_0x15fa('0x1b'),'port':0x18eb});var socket=require(_0x15fa('0x1c'))(new Redis(config[_0x15fa('0x19')]));require('./smsMessage.socket')[_0x15fa('0x1d')](socket);var jayson=require(_0x15fa('0x1e'));var client=jayson[_0x15fa('0x1f')][_0x15fa('0x20')]({'port':0x232c});var client9002=jayson['client'][_0x15fa('0x20')]({'port':0x232a});function checkPasswordPattern(_0x3e715d,_0x1d5187,_0x187703){if(_0x187703){var _0x5469a0=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x5469a0[_0x15fa('0x21')](_0x1d5187)){return _0x3e715d;}else{throw new Error(_0x15fa('0x22'));}}else{return _0x3e715d;}}function respondWithRpcPromise(_0x39ff58,_0x47ea94,_0xdc4a64,_0x4bc3af){return new BPromise(function(_0x460f8f,_0x3c2422){var _0x5927ea=_0x4bc3af||client;return _0x5927ea['request'](_0x39ff58,_0xdc4a64)[_0x15fa('0x23')](function(_0x6d9b4c){logger[_0x15fa('0x24')](_0x15fa('0x25'),_0x47ea94,_0x15fa('0x26'));logger['debug'](_0x15fa('0x27'),_0x47ea94,'request\x20sent',JSON[_0x15fa('0x28')](_0x6d9b4c));if(_0x6d9b4c[_0x15fa('0x29')]){if(_0x6d9b4c['error'][_0x15fa('0x2a')]===0x1f4){logger[_0x15fa('0x29')](_0x15fa('0x25'),_0x47ea94,_0x6d9b4c[_0x15fa('0x29')][_0x15fa('0x2b')]);return _0x3c2422(_0x6d9b4c[_0x15fa('0x29')][_0x15fa('0x2b')]);}logger[_0x15fa('0x29')]('SmsMessage,\x20%s,\x20%s',_0x47ea94,_0x6d9b4c['error'][_0x15fa('0x2b')]);return _0x460f8f(_0x6d9b4c[_0x15fa('0x29')][_0x15fa('0x2b')]);}else{logger['info']('SmsMessage,\x20%s,\x20%s',_0x47ea94,_0x15fa('0x26'));_0x460f8f(_0x6d9b4c[_0x15fa('0x2c')][_0x15fa('0x2b')]);}})[_0x15fa('0x2d')](function(_0x21ae56){logger[_0x15fa('0x29')](_0x15fa('0x25'),_0x47ea94,_0x21ae56);_0x3c2422(_0x21ae56);});});}function respondWithStatusCode(_0x373ab6,_0x557a07){_0x557a07=_0x557a07||0xcc;return function(_0x105a07){if(_0x105a07){return _0x373ab6[_0x15fa('0x2e')](_0x557a07);}return _0x373ab6[_0x15fa('0x2f')](_0x557a07)[_0x15fa('0x30')]();};}function respondWithResult(_0xaa5e5,_0x3b84c2){_0x3b84c2=_0x3b84c2||0xc8;return function(_0x136b51){if(_0x136b51){return _0xaa5e5['status'](_0x3b84c2)[_0x15fa('0x31')](_0x136b51);}};}function respondWithFilteredResult(_0x18ca41,_0x854af){return function(_0x45618b){if(_0x45618b){var _0x3ecd73=_0x45618b[_0x15fa('0x32')],_0xe63b62=_0x854af[_0x15fa('0x33')],_0x285a81=_0x854af['offset']+_0x854af['limit'],_0x2e2c48;if(_0x285a81>=_0x3ecd73){_0x285a81=_0x3ecd73;_0x2e2c48=0xc8;}else{_0x2e2c48=0xce;}_0x18ca41[_0x15fa('0x2f')](_0x2e2c48);return _0x18ca41[_0x15fa('0x34')](_0x15fa('0x35'),_0xe63b62+'-'+_0x285a81+'/'+_0x3ecd73)[_0x15fa('0x31')](_0x45618b);}return null;};}function patchUpdates(_0x37eabe){return function(_0x28aae3){try{jsonpatch['apply'](_0x28aae3,_0x37eabe,!![]);}catch(_0x40b841){return BPromise['reject'](_0x40b841);}return _0x28aae3[_0x15fa('0x36')]();};}function saveUpdates(_0x21537f,_0x2e9526){return function(_0x533b4b){if(_0x533b4b){return _0x533b4b[_0x15fa('0x37')](_0x21537f)['then'](function(_0x229b68){return _0x229b68;});}return null;};}function removeEntity(_0x2d3b2e,_0x2e6cbc){return function(_0x3403a6){if(_0x3403a6){return _0x3403a6['destroy']()[_0x15fa('0x23')](function(){_0x2d3b2e[_0x15fa('0x2f')](0xcc)['end']();});}};}function handleEntityNotFound(_0x203bec,_0x1e18f9){return function(_0x2c88e3){if(!_0x2c88e3){_0x203bec[_0x15fa('0x2e')](0x194);}return _0x2c88e3;};}function handleError(_0xab8a76,_0x352425){_0x352425=_0x352425||0x1f4;return function(_0x302d61){logger[_0x15fa('0x29')](_0x302d61[_0x15fa('0x38')]);if(_0x302d61[_0x15fa('0x39')]){delete _0x302d61[_0x15fa('0x39')];}_0xab8a76[_0x15fa('0x2f')](_0x352425)[_0x15fa('0x3a')](_0x302d61);};}exports['index']=function(_0x17dd0b,_0x2038bd){var _0x10980e={},_0x424fbe={},_0x195d6a={'count':0x0,'rows':[]};var _0x57bf80=db[_0x15fa('0x3b')]['rawAttributes'];_0x424fbe[_0x15fa('0x3c')]=_['keys'](_0x57bf80);_0x424fbe[_0x15fa('0x3d')]=_[_0x15fa('0x3e')](_0x17dd0b['query']);_0x424fbe['filters']=_['intersection'](_0x424fbe[_0x15fa('0x3c')],_0x424fbe['query']);_0x10980e['attributes']=_[_0x15fa('0x3f')](_0x424fbe[_0x15fa('0x3c')],qs[_0x15fa('0x40')](_0x17dd0b['query'][_0x15fa('0x40')]));_0x10980e[_0x15fa('0x41')]=_0x10980e['attributes'][_0x15fa('0x42')]?_0x10980e['attributes']:_0x424fbe['model'];if(!_0x17dd0b['query'][_0x15fa('0x43')](_0x15fa('0x44'))){_0x10980e[_0x15fa('0x45')]=qs[_0x15fa('0x45')](_0x17dd0b[_0x15fa('0x3d')]['limit']);_0x10980e[_0x15fa('0x33')]=qs[_0x15fa('0x33')](_0x17dd0b['query'][_0x15fa('0x33')]);}_0x10980e[_0x15fa('0x46')]=qs[_0x15fa('0x47')](_0x17dd0b[_0x15fa('0x3d')][_0x15fa('0x47')]);_0x10980e[_0x15fa('0x48')]=qs[_0x15fa('0x49')](_['pick'](_0x17dd0b[_0x15fa('0x3d')],_0x424fbe[_0x15fa('0x49')]));if(_0x17dd0b[_0x15fa('0x3d')][_0x15fa('0x4a')]){_0x10980e['where']=_['merge'](_0x10980e['where'],{'$or':_[_0x15fa('0x4b')](_0x57bf80,function(_0x4ef3c9){if(_0x4ef3c9['type'][_0x15fa('0x4c')]!==_0x15fa('0x4d')){var _0x54acc4={};_0x54acc4[_0x4ef3c9[_0x15fa('0x4e')]]={'$like':'%'+_0x17dd0b[_0x15fa('0x3d')][_0x15fa('0x4a')]+'%'};return _0x54acc4;}})});}_0x10980e=_['merge']({},_0x10980e,_0x17dd0b['options']);var _0x18f0bc={'where':_0x10980e[_0x15fa('0x48')]};return db[_0x15fa('0x3b')][_0x15fa('0x32')](_0x18f0bc)[_0x15fa('0x23')](function(_0x192333){_0x195d6a[_0x15fa('0x32')]=_0x192333;if(_0x17dd0b[_0x15fa('0x3d')][_0x15fa('0x4f')]){_0x10980e[_0x15fa('0x50')]=[{'all':!![]}];}return db[_0x15fa('0x3b')][_0x15fa('0x51')](_0x10980e);})[_0x15fa('0x23')](function(_0x4f0bd5){_0x195d6a['rows']=_0x4f0bd5;return _0x195d6a;})[_0x15fa('0x23')](respondWithFilteredResult(_0x2038bd,_0x10980e))[_0x15fa('0x2d')](handleError(_0x2038bd,null));};exports[_0x15fa('0x52')]=function(_0x3aa5af,_0x58e237){var _0x205a7b={'raw':!![],'where':{'id':_0x3aa5af[_0x15fa('0x53')]['id']}},_0x1c14d4={};_0x1c14d4[_0x15fa('0x3c')]=_[_0x15fa('0x3e')](db['SmsMessage'][_0x15fa('0x54')]);_0x1c14d4[_0x15fa('0x3d')]=_[_0x15fa('0x3e')](_0x3aa5af[_0x15fa('0x3d')]);_0x1c14d4['filters']=_['intersection'](_0x1c14d4[_0x15fa('0x3c')],_0x1c14d4[_0x15fa('0x3d')]);_0x205a7b[_0x15fa('0x41')]=_[_0x15fa('0x3f')](_0x1c14d4[_0x15fa('0x3c')],qs[_0x15fa('0x40')](_0x3aa5af[_0x15fa('0x3d')][_0x15fa('0x40')]));_0x205a7b[_0x15fa('0x41')]=_0x205a7b['attributes'][_0x15fa('0x42')]?_0x205a7b[_0x15fa('0x41')]:_0x1c14d4[_0x15fa('0x3c')];if(_0x3aa5af[_0x15fa('0x3d')][_0x15fa('0x4f')]){_0x205a7b[_0x15fa('0x50')]=[{'all':!![]}];}_0x205a7b=_[_0x15fa('0x55')]({},_0x205a7b,_0x3aa5af[_0x15fa('0x56')]);return db['SmsMessage'][_0x15fa('0x57')](_0x205a7b)[_0x15fa('0x23')](handleEntityNotFound(_0x58e237,null))[_0x15fa('0x23')](respondWithResult(_0x58e237,null))['catch'](handleError(_0x58e237,null));};exports[_0x15fa('0x58')]=function(_0x43bf94,_0xe265f8){return db[_0x15fa('0x3b')][_0x15fa('0x58')](_0x43bf94['body'],{})[_0x15fa('0x23')](respondWithResult(_0xe265f8,0xc9))[_0x15fa('0x2d')](handleError(_0xe265f8,null));};exports[_0x15fa('0x37')]=function(_0x3d1fa3,_0x2a7222){if(_0x3d1fa3['body']['id']){delete _0x3d1fa3['body']['id'];}return db[_0x15fa('0x3b')]['find']({'where':{'id':_0x3d1fa3[_0x15fa('0x53')]['id']}})['then'](handleEntityNotFound(_0x2a7222,null))['then'](saveUpdates(_0x3d1fa3['body'],null))['then'](respondWithResult(_0x2a7222,null))['catch'](handleError(_0x2a7222,null));};exports[_0x15fa('0x59')]=function(_0x4ecdce,_0x5b3137){return db[_0x15fa('0x3b')][_0x15fa('0x57')]({'where':{'id':_0x4ecdce[_0x15fa('0x53')]['id']}})[_0x15fa('0x23')](handleEntityNotFound(_0x5b3137,null))[_0x15fa('0x23')](removeEntity(_0x5b3137,null))['catch'](handleError(_0x5b3137,null));};exports[_0x15fa('0x5a')]=function(_0x339724,_0x578c34){return db[_0x15fa('0x3b')][_0x15fa('0x5a')]()[_0x15fa('0x23')](respondWithResult(_0x578c34,null))['catch'](handleError(_0x578c34,null));};var interaction_log=require(_0x15fa('0x16'))(_0x15fa('0x5b'));exports[_0x15fa('0x5c')]=function(_0x382770,_0x2fe050,_0x173d57){var _0xe9661d={'channel':_0x15fa('0x5d')};if(_0x382770['body']['id']){delete _0x382770[_0x15fa('0x5e')]['id'];}_0x382770[_0x15fa('0x5e')][_0x15fa('0x5f')]=!![];_0x382770[_0x15fa('0x5e')][_0x15fa('0x60')]=moment()[_0x15fa('0x61')](_0x15fa('0x62'));_0x382770[_0x15fa('0x5e')][_0x15fa('0x63')]=_0x382770['body'][_0x15fa('0x63')]||_0x382770[_0x15fa('0x64')]['id'];return db['SmsMessage'][_0x15fa('0x57')]({'where':{'id':_0x382770[_0x15fa('0x53')]['id'],'UserId':null},'include':[{'model':db[_0x15fa('0x65')],'as':_0x15fa('0x66')}]})[_0x15fa('0x23')](handleEntityNotFound(_0x2fe050,null))[_0x15fa('0x23')](saveUpdates(_0x382770['body'],null))['then'](function(_0x2f73f2){if(_0x2f73f2){_0xe9661d['message']=_0x2f73f2[_0x15fa('0x67')]({'plain':!![]});return db[_0x15fa('0x68')][_0x15fa('0x57')]({'where':{'id':_0x2f73f2[_0x15fa('0x69')]}});}return null;})[_0x15fa('0x23')](handleEntityNotFound(_0x2fe050,null))[_0x15fa('0x23')](function(_0x2a13db){if(_0x2a13db){return _0x2a13db[_0x15fa('0x37')]({'UserId':_0x382770[_0x15fa('0x5e')]['UserId'],'read1stAt':_[_0x15fa('0x6a')](_0x2a13db['read1stAt'])?moment()[_0x15fa('0x61')](_0x15fa('0x62')):undefined});}return null;})['then'](function(_0x2dfc37){if(_0x2dfc37){_0xe9661d[_0x15fa('0x6b')]=_0x2dfc37['get']({'plain':!![]});interaction_log[_0x15fa('0x24')]('[SMSMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x382770['user']['id'],_0x382770[_0x15fa('0x64')][_0x15fa('0x39')],_0x382770['user']['role'],_0xe9661d['interaction']['id'],_0x382770[_0x15fa('0x5e')]?JSON[_0x15fa('0x28')](_0x382770[_0x15fa('0x5e')]):_0x15fa('0x6c'));return respondWithRpcPromise(_0x15fa('0x6d'),_0x15fa('0x6e'),_0xe9661d);}return null;})[_0x15fa('0x23')](function(_0x219a61){if(_0x219a61){if(_0x382770[_0x15fa('0x5e')][_0x15fa('0x6f')]){_0xe9661d[_0x15fa('0x2b')]['interface']=util[_0x15fa('0x61')](_0x15fa('0x70'),_0x382770[_0x15fa('0x64')][_0x15fa('0x39')]);_0xe9661d[_0x15fa('0x2b')][_0x15fa('0x71')]=_0xe9661d['channel'];_0xe9661d[_0x15fa('0x2b')]['event']='accept';return respondWithRpcPromise(_0x15fa('0x72'),_0x15fa('0x72'),{'event':'acceptmessage','message':_0xe9661d[_0x15fa('0x2b')]},client9002)['then'](function(){return _0xe9661d;});}return _0xe9661d;}return null;})['then'](respondWithResult(_0x2fe050,null))[_0x15fa('0x2d')](handleError(_0x2fe050,null));};var interaction_log=require(_0x15fa('0x16'))(_0x15fa('0x5b'));exports[_0x15fa('0x73')]=function(_0x3f01b1,_0x4564a5,_0x3a0a7d){var _0x273934={'agent':{},'channel':_0x15fa('0x5d')};if(_0x3f01b1[_0x15fa('0x5e')]['id']){delete _0x3f01b1[_0x15fa('0x5e')]['id'];}_0x3f01b1[_0x15fa('0x5e')][_0x15fa('0x63')]=_0x3f01b1['body'][_0x15fa('0x63')]||_0x3f01b1[_0x15fa('0x64')]['id'];_0x273934[_0x15fa('0x74')]['id']=_0x3f01b1['body'][_0x15fa('0x63')];return db[_0x15fa('0x3b')][_0x15fa('0x57')]({'where':{'id':_0x3f01b1[_0x15fa('0x53')]['id'],'UserId':null}})['then'](handleEntityNotFound(_0x4564a5,null))[_0x15fa('0x23')](function(_0x2952c0){if(_0x2952c0){_0x273934[_0x15fa('0x2b')]=_0x2952c0['get']({'plain':!![]});return db['SmsInteraction'][_0x15fa('0x57')]({'where':{'id':_0x2952c0[_0x15fa('0x69')]}});}return null;})[_0x15fa('0x23')](handleEntityNotFound(_0x4564a5,null))[_0x15fa('0x23')](function(_0xe114cc){if(_0xe114cc){_0x273934[_0x15fa('0x6b')]=_0xe114cc[_0x15fa('0x67')]({'plain':!![]});interaction_log[_0x15fa('0x24')](_0x15fa('0x75'),_0x3f01b1['user']['id'],_0x3f01b1[_0x15fa('0x64')][_0x15fa('0x39')],_0x3f01b1[_0x15fa('0x64')][_0x15fa('0x76')],_0x273934[_0x15fa('0x6b')]['id'],_0x3f01b1['body']?JSON[_0x15fa('0x28')](_0x3f01b1[_0x15fa('0x5e')]):_0x15fa('0x6c'));return respondWithRpcPromise(_0x15fa('0x77'),'rejectMessage',_0x273934);}return null;})[_0x15fa('0x23')](function(_0x329112){if(_0x329112){_0x329112[_0x15fa('0x2b')][_0x15fa('0x78')]=util[_0x15fa('0x61')]('SIP/%s',_0x3f01b1[_0x15fa('0x64')][_0x15fa('0x39')]);_0x329112[_0x15fa('0x2b')][_0x15fa('0x71')]=_0x273934['channel'];_0x329112[_0x15fa('0x2b')][_0x15fa('0x79')]=_0x15fa('0x73');respondWithRpcPromise(_0x15fa('0x72'),'EventManager',{'event':_0x15fa('0x7a'),'message':_0x329112[_0x15fa('0x2b')]},client9002);return _0x273934;}return null;})['then'](respondWithResult(_0x4564a5,null))['catch'](handleError(_0x4564a5,null));};exports['status']=function(_0x3d193d,_0x4ef50a,_0xe28f22){if(_0x3d193d['body']['id']){delete _0x3d193d['body']['id'];}var _0x1db403;return db['SmsMessage'][_0x15fa('0x57')]({'where':{'id':_0x3d193d[_0x15fa('0x53')]['id']}})['then'](handleEntityNotFound(_0x4ef50a,null))[_0x15fa('0x23')](function(_0x1db637){if(_0x1db637){_0x1db403=_0x1db637;return db['SmsAccount'][_0x15fa('0x57')]({'where':{'id':_0x1db637['SmsAccountId']}});}})[_0x15fa('0x23')](handleEntityNotFound(_0x4ef50a,null))[_0x15fa('0x23')](function(_0x429d53){if(_0x429d53){logger[_0x15fa('0x7b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x15fa('0x2f'),_0x15fa('0x7c'),_0x429d53[_0x15fa('0x7d')],util[_0x15fa('0x7e')](_0x3d193d['body'],{'showHidden':![],'depth':null}));switch(_0x429d53[_0x15fa('0x7d')]){case'twilio':if(_0x3d193d['body']['MessageSid']&&_0x3d193d[_0x15fa('0x5e')][_0x15fa('0x7f')]===_0x1db403['messageId']){return _0x1db403['update']({'read':!![]});}else{logger[_0x15fa('0x29')](_0x15fa('0x80'),'status',_0x15fa('0x81'),util[_0x15fa('0x7e')](_0x3d193d[_0x15fa('0x5e')],{'showHidden':![],'depth':null}));}break;case _0x15fa('0x82'):if(_0x3d193d['body'][_0x15fa('0x83')]&&_0x3d193d[_0x15fa('0x5e')]['MessageUUID']===_0x1db403[_0x15fa('0x84')]&&_[_0x15fa('0x85')]([_0x15fa('0x86'),'delivered'],_0x3d193d['body']['Status'])>=0x0){return _0x1db403[_0x15fa('0x37')]({'read':!![]});}else{logger['error'](_0x15fa('0x80'),_0x15fa('0x2f'),_0x15fa('0x87'),util['inspect'](_0x3d193d[_0x15fa('0x5e')],{'showHidden':![],'depth':null}));}break;case _0x15fa('0x88'):var _0x4d5206=_0x3d193d[_0x15fa('0x5e')][_0x15fa('0x89')][0x0];if(_0x4d5206[_0x15fa('0x2f')][_0x15fa('0x8a')]===_0x15fa('0x8b')){return _0x1db403[_0x15fa('0x37')]({'read':!![]});}else{logger['error'](_0x15fa('0x80'),_0x15fa('0x2f'),_0x15fa('0x88'),util[_0x15fa('0x7e')](_0x3d193d[_0x15fa('0x5e')],{'showHidden':![],'depth':null}));}break;}return _0x1db403;}})['then'](respondWithResult(_0x4ef50a,null))[_0x15fa('0x2d')](handleError(_0x4ef50a,null));};
\ No newline at end of file
index 48b9737..2288340 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd139=['save','update','remove','emit','hasOwnProperty','exports','events','../../mysqldb'];(function(_0x13fbb6,_0x22b508){var _0x26fe48=function(_0x458c42){while(--_0x458c42){_0x13fbb6['push'](_0x13fbb6['shift']());}};_0x26fe48(++_0x22b508);}(_0xd139,0x14e));var _0x9d13=function(_0x1fac75,_0x2f233b){_0x1fac75=_0x1fac75-0x0;var _0x13abd7=_0xd139[_0x1fac75];return _0x13abd7;};'use strict';var EventEmitter=require(_0x9d13('0x0'));var SmsMessage=require(_0x9d13('0x1'))['db']['SmsMessage'];var SmsMessageEvents=new EventEmitter();SmsMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x9d13('0x2'),'afterUpdate':_0x9d13('0x3'),'afterDestroy':_0x9d13('0x4')};function emitEvent(_0x1994e8){return function(_0x1d39f0,_0xdeacf6,_0x16b9f2){SmsMessageEvents['emit'](_0x1994e8+':'+_0x1d39f0['id'],_0x1d39f0);SmsMessageEvents[_0x9d13('0x5')](_0x1994e8,_0x1d39f0);_0x16b9f2(null);};}for(var e in events){if(events[_0x9d13('0x6')](e)){var event=events[e];SmsMessage['hook'](e,emitEvent(event));}}module[_0x9d13('0x7')]=SmsMessageEvents;
\ No newline at end of file
+var _0x0427=['setMaxListeners','update','remove','emit','hasOwnProperty','hook','exports','SmsMessage'];(function(_0x2cd10f,_0x4cd9d9){var _0x554d04=function(_0xa85f52){while(--_0xa85f52){_0x2cd10f['push'](_0x2cd10f['shift']());}};_0x554d04(++_0x4cd9d9);}(_0x0427,0x137));var _0x7042=function(_0x3c8aae,_0x2406ce){_0x3c8aae=_0x3c8aae-0x0;var _0x1e4e40=_0x0427[_0x3c8aae];return _0x1e4e40;};'use strict';var EventEmitter=require('events');var SmsMessage=require('../../mysqldb')['db'][_0x7042('0x0')];var SmsMessageEvents=new EventEmitter();SmsMessageEvents[_0x7042('0x1')](0x0);var events={'afterCreate':'save','afterUpdate':_0x7042('0x2'),'afterDestroy':_0x7042('0x3')};function emitEvent(_0xae8bc2){return function(_0x1db1f3,_0xa72963,_0x343a69){SmsMessageEvents[_0x7042('0x4')](_0xae8bc2+':'+_0x1db1f3['id'],_0x1db1f3);SmsMessageEvents['emit'](_0xae8bc2,_0x1db1f3);_0x343a69(null);};}for(var e in events){if(events[_0x7042('0x5')](e)){var event=events[e];SmsMessage[_0x7042('0x6')](e,emitEvent(event));}}module[_0x7042('0x7')]=SmsMessageEvents;
\ No newline at end of file
index 988824a..152cb26 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe9e9=['bluebird','path','rimraf','../../config/environment','./smsMessage.attributes','exports','define','SmsMessage','sms_messages','messageId','fti_sms_messages','body','get','direction','toLowerCase','out','secret','isNil','UserId','SmsInteraction','then','update','createdAt','catch','error','SmsAccount','find','SmsAccountId','type','twilio','accountSid','authToken','phone','messages','create','remote','/api/sms/messages/','sid','SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate','Missing\x20parameters:\x20phone,\x20accountSid\x20or\x20authToken','skebby','https://api.skebby.it/API/v1.0/REST/','username','password','smsMethod','sender','login?username=','sms','POST','user_key','session_key','total_sent','deliveryReport','read','inspect','Missing\x20parameters:\x20username,\x20password','connectel','Missing\x20parameters:\x20authToken','xCALLY\x20Motion','senderString','format','%s:%s','https://rest.clicksend.com/v3/sms/send','Basic\x20%s','toString','http_code','data','queued_count','head','message_id','clickSend','plivo','authId','message_uuid','Missing\x20parameters:\x20authId,\x20authToken','baseUrl','/auth/1/session','/sms/2/text/advanced','/status?token=','token','application/json','IBSSO\x20','infobip','Missing\x20parameters:\x20base_url','csc','apiKey','login','text','timestamp','keys','sort','length','md5','digest','hex','https://sms.csc.lv/external/get/send.php?','Missing\x20parameters:\x20apiKey','uuid','UTF-8','apiMessageId','clickatell','https://api.intelepeer.com/_rest/v4/app/sms/send','code','message','https://api.intelepeer.com/_rest/v4/app/sms/mdr','refid','status','intelepeer','Token\x20not\x20received','finally','utf8mb4_unicode_ci','lodash','util','../../config/logger','api'];(function(_0x445e66,_0x56b365){var _0x4a1436=function(_0x53b6b5){while(--_0x53b6b5){_0x445e66['push'](_0x445e66['shift']());}};_0x4a1436(++_0x56b365);}(_0xe9e9,0xe4));var _0x9e9e=function(_0x461af8,_0x14f1e8){_0x461af8=_0x461af8-0x0;var _0x5d877b=_0xe9e9[_0x461af8];return _0x5d877b;};'use strict';var _=require(_0x9e9e('0x0'));var util=require(_0x9e9e('0x1'));var logger=require(_0x9e9e('0x2'))(_0x9e9e('0x3'));var moment=require('moment');var BPromise=require(_0x9e9e('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x9e9e('0x5'));var rimraf=require(_0x9e9e('0x6'));var config=require(_0x9e9e('0x7'));var attributes=require(_0x9e9e('0x8'));module[_0x9e9e('0x9')]=function(_0x3faec2,_0x34196c){return _0x3faec2[_0x9e9e('0xa')](_0x9e9e('0xb'),attributes,{'tableName':_0x9e9e('0xc'),'paranoid':![],'indexes':[{'name':'messageId','fields':[_0x9e9e('0xd')]},{'name':_0x9e9e('0xe'),'fields':[_0x9e9e('0xf')],'type':'FULLTEXT'}],'timestamps':!![],'hooks':{'afterCreate':function(_0x311b15,_0x5207ea,_0x4b637d){var _0x4be820=_0x3faec2['models'];var _0x177999=_0x311b15[_0x9e9e('0x10')]({'plain':!![]});if(_0x177999[_0x9e9e('0x11')]['toLowerCase']()==='in'||_0x177999['direction'][_0x9e9e('0x12')]()===_0x9e9e('0x13')&&!_0x177999[_0x9e9e('0x14')]&&!_[_0x9e9e('0x15')](_0x177999[_0x9e9e('0x16')])){_0x4be820[_0x9e9e('0x17')]['findOne']({'where':{'id':_0x177999['SmsInteractionId']}})[_0x9e9e('0x18')](function(_0x262237){if(_0x262237){_0x262237[_0x9e9e('0x19')]({'lastMsgAt':_0x177999[_0x9e9e('0x1a')],'lastMsgDirection':_0x177999['direction']['toLowerCase']()});}})[_0x9e9e('0x1b')](function(_0x3babb5){console[_0x9e9e('0x1c')](_0x3babb5);});}if(_0x177999[_0x9e9e('0x11')]===_0x9e9e('0x13')&&!_0x177999[_0x9e9e('0x14')]){var _0x328783;_0x4be820[_0x9e9e('0x1d')][_0x9e9e('0x1e')]({'where':{'id':_0x177999[_0x9e9e('0x1f')]},'raw':!![]})[_0x9e9e('0x18')](function(_0x5c5e4c){_0x328783=_0x5c5e4c;if(_0x328783&&_0x328783[_0x9e9e('0x20')]){switch(_0x328783[_0x9e9e('0x20')]){case _0x9e9e('0x21'):var _0x5cbc16=require(_0x9e9e('0x21'));if(_0x328783[_0x9e9e('0x22')]&&_0x328783[_0x9e9e('0x23')]&&_0x328783[_0x9e9e('0x24')]){var _0x2d00b9=new _0x5cbc16(_0x328783[_0x9e9e('0x22')],_0x328783[_0x9e9e('0x23')]);_0x2d00b9[_0x9e9e('0x25')][_0x9e9e('0x26')]({'body':_0x177999['body'],'to':_0x177999[_0x9e9e('0x24')],'from':_0x328783['phone'],'statusCallback':_0x328783[_0x9e9e('0x27')]+_0x9e9e('0x28')+_0x177999['id']+'/status?token='+_0x328783['token']})[_0x9e9e('0x18')](function(_0x4625e9){if(_0x4625e9[_0x9e9e('0x29')]){return _0x311b15['update']({'messageId':_0x4625e9[_0x9e9e('0x29')]});}})[_0x9e9e('0x1b')](function(_0x249bcd){logger['error'](_0x9e9e('0x2a'),'afterCreate',_0x9e9e('0x21'),util['inspect'](_0x249bcd,{'showHidden':![],'depth':null}));});}else{logger[_0x9e9e('0x1c')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x9e9e('0x2b'),_0x9e9e('0x21'),_0x9e9e('0x2c'));}break;case _0x9e9e('0x2d'):var _0x20fdc6=_0x9e9e('0x2e');if(_0x328783[_0x9e9e('0x2f')]&&_0x328783[_0x9e9e('0x30')]){var _0x5d341d={'recipient':[_0x177999[_0x9e9e('0x24')]],'message':_0x177999['body'],'message_type':_0x328783[_0x9e9e('0x31')]};if(_0x328783[_0x9e9e('0x31')]&&_0x328783[_0x9e9e('0x31')]!=='SI'){_0x5d341d[_0x9e9e('0x32')]=_0x328783[_0x9e9e('0x24')];}var _0x38fcf8={'url':_0x20fdc6+_0x9e9e('0x33')+_0x328783['username']+'&password='+_0x328783['password'],'method':'GET'};rp(_0x38fcf8)['then'](function(_0xfb5d9d){var _0x203b4e=_0xfb5d9d['split'](';');var _0x312d24={'user_key':_0x203b4e[0x0],'session_key':_0x203b4e[0x1]};_0x38fcf8={'url':_0x20fdc6+_0x9e9e('0x34'),'method':_0x9e9e('0x35'),'headers':{'user_key':_0x312d24[_0x9e9e('0x36')],'Session_key':_0x312d24[_0x9e9e('0x37')]},'json':!![],'body':_0x5d341d};return rp(_0x38fcf8);})[_0x9e9e('0x18')](function(_0xdaede9){if(_0xdaede9[_0x9e9e('0x38')]>=0x1){var _0x46a416={'messageId':_0xdaede9['internal_order_id']};if(_0x328783[_0x9e9e('0x31')]!=='GP'||!_0x328783[_0x9e9e('0x39')]){_0x46a416[_0x9e9e('0x3a')]=!![];}return _0x311b15[_0x9e9e('0x19')](_0x46a416);}else{return logger[_0x9e9e('0x1c')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x9e9e('0x2b'),'skebby',util[_0x9e9e('0x3b')](_0xdaede9,{'showHidden':![],'depth':null}));}})[_0x9e9e('0x1b')](function(_0x2f7e7e){return logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),_0x9e9e('0x2b'),_0x9e9e('0x2d'),util[_0x9e9e('0x3b')](_0x2f7e7e,{'showHidden':![],'depth':null}));});}else{logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),_0x9e9e('0x2b'),_0x9e9e('0x2d'),_0x9e9e('0x3c'));}break;case _0x9e9e('0x3d'):if(_0x328783[_0x9e9e('0x23')]){var _0x65f2fc={'recipient':_0x177999[_0x9e9e('0x24')],'message':_0x177999[_0x9e9e('0xf')],'sender':_0x328783['senderString']||_0x328783[_0x9e9e('0x24')],'authorization':_0x328783[_0x9e9e('0x23')]};var _0x5207ea={'method':'POST','uri':'https://smsapi.connectel.se/api/send/','body':_0x65f2fc,'json':!![]};rp(_0x5207ea)[_0x9e9e('0x18')](function(_0x477b5d){var _0x1e5d62={'messageId':_0x477b5d['requestid']};if(!_0x328783[_0x9e9e('0x39')]){_0x1e5d62[_0x9e9e('0x3a')]=!![];}return _0x311b15['update'](_0x1e5d62);})[_0x9e9e('0x1b')](function(_0x4ca35f){logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),_0x9e9e('0x2b'),'connectel',util['inspect'](_0x4ca35f,{'showHidden':![],'depth':null}));});}else{logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),_0x9e9e('0x2b'),_0x9e9e('0x3d'),_0x9e9e('0x3e'));}break;case'clicksend':if(_0x328783[_0x9e9e('0x2f')]&&_0x328783[_0x9e9e('0x30')]){var _0x65f2fc={'messages':[{'source':_0x9e9e('0x3f'),'to':_0x177999[_0x9e9e('0x24')],'body':_0x177999[_0x9e9e('0xf')],'from':_0x328783[_0x9e9e('0x40')]||_0x328783['phone']}]};var _0x2a4bc9=util[_0x9e9e('0x41')](_0x9e9e('0x42'),_0x328783['username'],_0x328783[_0x9e9e('0x30')]);var _0x5207ea={'method':_0x9e9e('0x35'),'uri':_0x9e9e('0x43'),'body':_0x65f2fc,'headers':{'Authorization':util[_0x9e9e('0x41')](_0x9e9e('0x44'),new Buffer(_0x2a4bc9)[_0x9e9e('0x45')]('base64'))},'json':!![]};rp(_0x5207ea)[_0x9e9e('0x18')](function(_0x3a1f04){if(_0x3a1f04[_0x9e9e('0x46')]>=0xc8&&_0x3a1f04['http_code']<=0xce){if(_0x3a1f04[_0x9e9e('0x47')]&&_0x3a1f04[_0x9e9e('0x47')][_0x9e9e('0x48')]>0x0){var _0x361014=_[_0x9e9e('0x49')](_0x3a1f04['data']['messages']);var _0x2db9df={'messageId':_0x361014[_0x9e9e('0x4a')]};if(!_0x328783['deliveryReport']){_0x2db9df[_0x9e9e('0x3a')]=!![];}return _0x311b15[_0x9e9e('0x19')](_0x2db9df);}else{logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),_0x9e9e('0x2b'),_0x9e9e('0x4b'),util[_0x9e9e('0x3b')](_0x3a1f04,{'showHidden':![],'depth':null}));}}else{logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),_0x9e9e('0x2b'),_0x9e9e('0x4b'),util[_0x9e9e('0x3b')](_0x3a1f04,{'showHidden':![],'depth':null}));}})[_0x9e9e('0x1b')](function(_0x2ccbe9){logger['error'](_0x9e9e('0x2a'),_0x9e9e('0x2b'),'clickSend',util[_0x9e9e('0x3b')](_0x2ccbe9,{'showHidden':![],'depth':null}));});}else{logger[_0x9e9e('0x1c')]('SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate',_0x9e9e('0x4b'),_0x9e9e('0x3c'));}break;case _0x9e9e('0x4c'):if(_0x328783[_0x9e9e('0x4d')]&&_0x328783[_0x9e9e('0x23')]){var _0x65f2fc={'dst':_0x177999[_0x9e9e('0x24')],'text':_0x177999[_0x9e9e('0xf')],'src':_0x328783[_0x9e9e('0x40')]||_0x328783[_0x9e9e('0x24')],'url':_0x328783[_0x9e9e('0x27')]+_0x9e9e('0x28')+_0x177999['id']+'/status?token='+_0x328783['token']};var _0x2a4bc9=util[_0x9e9e('0x41')](_0x9e9e('0x42'),_0x328783[_0x9e9e('0x4d')],_0x328783[_0x9e9e('0x23')]);var _0x5207ea={'method':_0x9e9e('0x35'),'uri':util[_0x9e9e('0x41')]('https://api.plivo.com/v1/Account/%s/Message/',_0x328783[_0x9e9e('0x4d')]),'body':_0x65f2fc,'headers':{'Authorization':util['format'](_0x9e9e('0x44'),new Buffer(_0x2a4bc9)['toString']('base64'))},'json':!![]};rp(_0x5207ea)[_0x9e9e('0x18')](function(_0x36d912){var _0x3d2244={'messageId':_0x36d912[_0x9e9e('0x4e')][0x0]};return _0x311b15['update'](_0x3d2244);})[_0x9e9e('0x1b')](function(_0xff48f2){logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),_0x9e9e('0x2b'),'plivo',util[_0x9e9e('0x3b')](_0xff48f2,{'showHidden':![],'depth':null}));});}else{logger['error'](_0x9e9e('0x2a'),_0x9e9e('0x2b'),_0x9e9e('0x4c'),_0x9e9e('0x4f'));}break;case'infobip':if(_0x328783[_0x9e9e('0x2f')]&&_0x328783[_0x9e9e('0x30')]){if(_0x328783[_0x9e9e('0x50')]){var _0x1d6e91={'method':_0x9e9e('0x35'),'uri':_0x328783['baseUrl']+_0x9e9e('0x51'),'body':{'username':_0x328783[_0x9e9e('0x2f')],'password':_0x328783[_0x9e9e('0x30')]},'json':!![]};return rp(_0x1d6e91)['then'](function(_0x4f48d1){var _0x584e3f={'method':_0x9e9e('0x35'),'uri':_0x328783[_0x9e9e('0x50')]+_0x9e9e('0x52'),'body':{'messages':[{'from':_0x328783[_0x9e9e('0x24')],'destinations':[{'to':_0x177999[_0x9e9e('0x24')]}],'text':_0x177999['body'],'notifyUrl':_0x328783[_0x9e9e('0x27')]+_0x9e9e('0x28')+_0x177999['id']+_0x9e9e('0x53')+_0x328783[_0x9e9e('0x54')],'notifyContentType':_0x9e9e('0x55'),'callbackData':_0x328783[_0x9e9e('0x24')]+';'+_0x177999['body']}]},'headers':{'Authorization':_0x9e9e('0x56')+_0x4f48d1[_0x9e9e('0x54')]},'json':!![]};return rp(_0x584e3f)[_0x9e9e('0x18')](function(_0x2b9309){if(_0x2b9309[_0x9e9e('0x25')]){var _0x17a3c0={'messageId':_0x2b9309[_0x9e9e('0x25')][0x0][_0x9e9e('0xd')]};if(!_0x328783[_0x9e9e('0x39')]){_0x17a3c0[_0x9e9e('0x3a')]=!![];}return _0x311b15[_0x9e9e('0x19')](_0x17a3c0);}else{return logger[_0x9e9e('0x1c')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x9e9e('0x2b'),_0x9e9e('0x57'),util[_0x9e9e('0x3b')](_0x2b9309,{'showHidden':![],'depth':null}));}});})[_0x9e9e('0x1b')](function(_0x43065c){return logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),_0x9e9e('0x2b'),'infobip',util[_0x9e9e('0x3b')](_0x43065c,{'showHidden':![],'depth':null}));});}else{logger[_0x9e9e('0x1c')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x9e9e('0x2b'),_0x9e9e('0x57'),_0x9e9e('0x58'));}}else{logger[_0x9e9e('0x1c')]('SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate','infobip',_0x9e9e('0x3c'));}break;case _0x9e9e('0x59'):var _0x16e18e=require('crypto');if(_0x328783[_0x9e9e('0x5a')]){var _0x4b03e6={};_0x4b03e6[_0x9e9e('0x5b')]=_0x328783[_0x9e9e('0x2f')];_0x4b03e6[_0x9e9e('0x24')]=_0x177999[_0x9e9e('0x24')];_0x4b03e6['sender']=_0x328783[_0x9e9e('0x24')];_0x4b03e6[_0x9e9e('0x5c')]=_0x177999[_0x9e9e('0xf')];_0x4b03e6[_0x9e9e('0x5d')]=+new Date();var _0x2ddcda='';var _0x3e1680='';var _0x351ce1=Object[_0x9e9e('0x5e')](_0x4b03e6);_0x351ce1[_0x9e9e('0x5f')]();for(var _0x971c4f=0x0;_0x971c4f<_0x351ce1[_0x9e9e('0x60')];_0x971c4f++){if(_0x2ddcda!=''){_0x2ddcda+='&';}_0x2ddcda+=_0x351ce1[_0x971c4f]+'='+encodeURIComponent(_0x4b03e6[_0x351ce1[_0x971c4f]]);_0x3e1680+=_0x4b03e6[_0x351ce1[_0x971c4f]];}_0x3e1680+=_0x328783[_0x9e9e('0x5a')];_0x3e1680=_0x16e18e['createHash'](_0x9e9e('0x61'))[_0x9e9e('0x19')](_0x3e1680)[_0x9e9e('0x62')](_0x9e9e('0x63'));if(_0x2ddcda!==''){_0x2ddcda+='&';}_0x2ddcda+='signature='+_0x3e1680;var _0x38fcf8={'method':'GET','uri':_0x9e9e('0x64')+_0x2ddcda,'json':!![]};return rp(_0x38fcf8)[_0x9e9e('0x18')](function(_0x43b167){var _0x59f233=Object['keys'](_0x43b167);if(_0x43b167[_0x59f233[0x0]]['error']&&parseInt(_0x43b167[_0x59f233[0x0]]['error'])===0x0){var _0x2d810e={'messageId':_0x43b167[_0x59f233[0x0]]['id_sms']};if(!_0x328783[_0x9e9e('0x39')]){_0x2d810e[_0x9e9e('0x3a')]=!![];}return _0x311b15[_0x9e9e('0x19')](_0x2d810e);}else{return logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),_0x9e9e('0x2b'),_0x9e9e('0x59'),util[_0x9e9e('0x3b')](_0x43b167[_0x9e9e('0x1c')],{'showHidden':![],'depth':null}));}})[_0x9e9e('0x1b')](function(_0x575727){return logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),_0x9e9e('0x2b'),'csc',util[_0x9e9e('0x3b')](_0x575727,{'showHidden':![],'depth':null}));});}else{logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),_0x9e9e('0x2b'),_0x9e9e('0x59'),_0x9e9e('0x65'));}break;case'clickatell':if(_0x328783[_0x9e9e('0x5a')]){var _0x48c28={'method':_0x9e9e('0x35'),'uri':'https://platform.clickatell.com/messages','headers':{'Authorization':_0x328783[_0x9e9e('0x5a')]},'body':{'content':_0x177999[_0x9e9e('0xf')],'to':[_0x177999['phone']],'from':_0x328783[_0x9e9e('0x24')],'binary':![],'clientMessageId':_0x9e9e('0x66'),'charset':_0x9e9e('0x67')},'json':!![]};rp(_0x48c28)[_0x9e9e('0x18')](function(_0x49d067){if(!_0x49d067[_0x9e9e('0x1c')]){var _0x589ed0={'messageId':_0x49d067[_0x9e9e('0x25')][0x0][_0x9e9e('0x68')]};if(!_0x328783[_0x9e9e('0x39')]){_0x589ed0[_0x9e9e('0x3a')]=!![];}return _0x311b15[_0x9e9e('0x19')](_0x589ed0);}else{return logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),'afterCreate',_0x9e9e('0x69'),util[_0x9e9e('0x3b')](_0x49d067[_0x9e9e('0x1c')],{'showHidden':![],'depth':null}));}})[_0x9e9e('0x1b')](function(_0x9b6c75){return logger['error'](_0x9e9e('0x2a'),_0x9e9e('0x2b'),_0x9e9e('0x69'),util['inspect'](_0x9b6c75,{'showHidden':![],'depth':null}));});}else{logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),'afterCreate',_0x9e9e('0x69'),_0x9e9e('0x65'));}break;case'intelepeer':if(_0x328783[_0x9e9e('0x5a')]){var _0x450c60={};var _0x38fcf8={'method':_0x9e9e('0x35'),'uri':_0x9e9e('0x6a'),'headers':{'Authorization':'Bearer\x20'+_0x328783[_0x9e9e('0x5a')],'Content-Type':_0x9e9e('0x55')},'body':{'from':_0x328783['phone'],'to':_0x177999[_0x9e9e('0x24')],'text':_0x177999[_0x9e9e('0xf')]},'json':!![]};return rp(_0x38fcf8)[_0x9e9e('0x18')](function(_0x5a4d48){if(_0x5a4d48[_0x9e9e('0x6b')]==0xca){_0x450c60[_0x9e9e('0x6c')]=_0x5a4d48;var _0x4a9222={'method':_0x9e9e('0x35'),'uri':_0x9e9e('0x6d'),'headers':{'Authorization':'Bearer\x20'+_0x328783['apiKey'],'Content-Type':_0x9e9e('0x55')},'body':{'refid':_0x450c60[_0x9e9e('0x6c')][_0x9e9e('0x6e')]},'json':!![]};return rp(_0x4a9222)[_0x9e9e('0x18')](function(_0x325bf2){_0x450c60[_0x9e9e('0x6f')]=_0x325bf2;var _0x3bc2bb={'messageId':_0x450c60[_0x9e9e('0x6c')]['refid'],'read':!![]};return _0x311b15['update'](_0x3bc2bb);});}else{return logger['error'](_0x9e9e('0x2a'),_0x9e9e('0x2b'),_0x9e9e('0x70'),util[_0x9e9e('0x3b')](_0x5a4d48,{'showHidden':![],'depth':null}));}})['catch'](function(_0x28dc86){return logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),'afterCreate',_0x9e9e('0x70'),util[_0x9e9e('0x3b')](_0x28dc86,{'showHidden':![],'depth':null}));});}else{return logger[_0x9e9e('0x1c')](_0x9e9e('0x2a'),_0x9e9e('0x2b'),_0x9e9e('0x70'),_0x9e9e('0x71'));}break;}}})[_0x9e9e('0x72')](function(){_0x4b637d();});}else{_0x4b637d();}}},'charset':'utf8mb4','collate':_0x9e9e('0x73')});};
\ No newline at end of file
+var _0x7034=['senderString','https://smsapi.connectel.se/api/send/','deliveryReport','connectel','Missing\x20parameters:\x20authToken','clicksend','format','%s:%s','https://rest.clicksend.com/v3/sms/send','base64','http_code','data','head','message_id','clickSend','plivo','authId','https://api.plivo.com/v1/Account/%s/Message/','Basic\x20%s','toString','message_uuid','Missing\x20parameters:\x20authId,\x20authToken','infobip','baseUrl','/auth/1/session','/sms/2/text/advanced','IBSSO\x20','csc','crypto','apiKey','login','text','timestamp','sort','length','createHash','md5','hex','https://sms.csc.lv/external/get/send.php?','keys','Missing\x20parameters:\x20apiKey','clickatell','https://platform.clickatell.com/messages','uuid','UTF-8','intelepeer','https://api.intelepeer.com/_rest/v4/app/sms/send','Bearer\x20','application/json','code','message','https://api.intelepeer.com/_rest/v4/app/sms/mdr','refid','utf8mb4','utf8mb4_unicode_ci','lodash','../../config/logger','api','moment','bluebird','request-promise','rimraf','../../config/environment','./smsMessage.attributes','define','SmsMessage','messageId','body','FULLTEXT','models','toLowerCase','direction','out','secret','UserId','SmsInteraction','findOne','then','update','catch','error','SmsAccount','type','twilio','accountSid','authToken','phone','messages','remote','/api/sms/messages/','/status?token=','token','sid','afterCreate','inspect','Missing\x20parameters:\x20phone,\x20accountSid\x20or\x20authToken','skebby','https://api.skebby.it/API/v1.0/REST/','username','password','smsMethod','login?username=','&password=','GET','split','sms','POST','user_key','total_sent','internal_order_id','read','SmsMessage,\x20%s,\x20%s,\x20%s','Missing\x20parameters:\x20username,\x20password'];(function(_0x1d3b2e,_0x3d03f8){var _0x3a6a83=function(_0x19dac2){while(--_0x19dac2){_0x1d3b2e['push'](_0x1d3b2e['shift']());}};_0x3a6a83(++_0x3d03f8);}(_0x7034,0xa8));var _0x4703=function(_0x2070da,_0x45e586){_0x2070da=_0x2070da-0x0;var _0x4f9fe1=_0x7034[_0x2070da];return _0x4f9fe1;};'use strict';var _=require(_0x4703('0x0'));var util=require('util');var logger=require(_0x4703('0x1'))(_0x4703('0x2'));var moment=require(_0x4703('0x3'));var BPromise=require(_0x4703('0x4'));var rp=require(_0x4703('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x4703('0x6'));var config=require(_0x4703('0x7'));var attributes=require(_0x4703('0x8'));module['exports']=function(_0x546e6e,_0x49624a){return _0x546e6e[_0x4703('0x9')](_0x4703('0xa'),attributes,{'tableName':'sms_messages','paranoid':![],'indexes':[{'name':_0x4703('0xb'),'fields':['messageId']},{'name':'fti_sms_messages','fields':[_0x4703('0xc')],'type':_0x4703('0xd')}],'timestamps':!![],'hooks':{'afterCreate':function(_0x22fec6,_0x598efa,_0xba966a){var _0x59f346=_0x546e6e[_0x4703('0xe')];var _0x490f0e=_0x22fec6['get']({'plain':!![]});if(_0x490f0e['direction'][_0x4703('0xf')]()==='in'||_0x490f0e[_0x4703('0x10')][_0x4703('0xf')]()===_0x4703('0x11')&&!_0x490f0e[_0x4703('0x12')]&&!_['isNil'](_0x490f0e[_0x4703('0x13')])){_0x59f346[_0x4703('0x14')][_0x4703('0x15')]({'where':{'id':_0x490f0e['SmsInteractionId']}})[_0x4703('0x16')](function(_0x3ae02f){if(_0x3ae02f){_0x3ae02f[_0x4703('0x17')]({'lastMsgAt':_0x490f0e['createdAt'],'lastMsgDirection':_0x490f0e[_0x4703('0x10')][_0x4703('0xf')]()});}})[_0x4703('0x18')](function(_0x20dc99){console[_0x4703('0x19')](_0x20dc99);});}if(_0x490f0e['direction']==='out'&&!_0x490f0e[_0x4703('0x12')]){var _0x29ddee;_0x59f346[_0x4703('0x1a')]['find']({'where':{'id':_0x490f0e['SmsAccountId']},'raw':!![]})[_0x4703('0x16')](function(_0x135403){_0x29ddee=_0x135403;if(_0x29ddee&&_0x29ddee[_0x4703('0x1b')]){switch(_0x29ddee[_0x4703('0x1b')]){case _0x4703('0x1c'):var _0x10393f=require(_0x4703('0x1c'));if(_0x29ddee[_0x4703('0x1d')]&&_0x29ddee[_0x4703('0x1e')]&&_0x29ddee[_0x4703('0x1f')]){var _0x4edc06=new _0x10393f(_0x29ddee[_0x4703('0x1d')],_0x29ddee['authToken']);_0x4edc06[_0x4703('0x20')]['create']({'body':_0x490f0e[_0x4703('0xc')],'to':_0x490f0e[_0x4703('0x1f')],'from':_0x29ddee['phone'],'statusCallback':_0x29ddee[_0x4703('0x21')]+_0x4703('0x22')+_0x490f0e['id']+_0x4703('0x23')+_0x29ddee[_0x4703('0x24')]})['then'](function(_0x52e67c){if(_0x52e67c[_0x4703('0x25')]){return _0x22fec6[_0x4703('0x17')]({'messageId':_0x52e67c['sid']});}})[_0x4703('0x18')](function(_0x2ded69){logger[_0x4703('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x4703('0x26'),'twilio',util[_0x4703('0x27')](_0x2ded69,{'showHidden':![],'depth':null}));});}else{logger['error']('SmsMessage,\x20%s,\x20%s,\x20%s',_0x4703('0x26'),_0x4703('0x1c'),_0x4703('0x28'));}break;case _0x4703('0x29'):var _0x44a4fa=_0x4703('0x2a');if(_0x29ddee[_0x4703('0x2b')]&&_0x29ddee[_0x4703('0x2c')]){var _0x3078d6={'recipient':[_0x490f0e[_0x4703('0x1f')]],'message':_0x490f0e[_0x4703('0xc')],'message_type':_0x29ddee['smsMethod']};if(_0x29ddee[_0x4703('0x2d')]&&_0x29ddee[_0x4703('0x2d')]!=='SI'){_0x3078d6['sender']=_0x29ddee[_0x4703('0x1f')];}var _0x2b7de2={'url':_0x44a4fa+_0x4703('0x2e')+_0x29ddee[_0x4703('0x2b')]+_0x4703('0x2f')+_0x29ddee[_0x4703('0x2c')],'method':_0x4703('0x30')};rp(_0x2b7de2)[_0x4703('0x16')](function(_0x4629b0){var _0x1611ae=_0x4629b0[_0x4703('0x31')](';');var _0xa9c13c={'user_key':_0x1611ae[0x0],'session_key':_0x1611ae[0x1]};_0x2b7de2={'url':_0x44a4fa+_0x4703('0x32'),'method':_0x4703('0x33'),'headers':{'user_key':_0xa9c13c[_0x4703('0x34')],'Session_key':_0xa9c13c['session_key']},'json':!![],'body':_0x3078d6};return rp(_0x2b7de2);})[_0x4703('0x16')](function(_0x9217a3){if(_0x9217a3[_0x4703('0x35')]>=0x1){var _0x2950ff={'messageId':_0x9217a3[_0x4703('0x36')]};if(_0x29ddee[_0x4703('0x2d')]!=='GP'||!_0x29ddee['deliveryReport']){_0x2950ff[_0x4703('0x37')]=!![];}return _0x22fec6[_0x4703('0x17')](_0x2950ff);}else{return logger[_0x4703('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x4703('0x26'),'skebby',util[_0x4703('0x27')](_0x9217a3,{'showHidden':![],'depth':null}));}})['catch'](function(_0x2882c6){return logger[_0x4703('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x4703('0x26'),_0x4703('0x29'),util[_0x4703('0x27')](_0x2882c6,{'showHidden':![],'depth':null}));});}else{logger[_0x4703('0x19')](_0x4703('0x38'),_0x4703('0x26'),_0x4703('0x29'),_0x4703('0x39'));}break;case'connectel':if(_0x29ddee[_0x4703('0x1e')]){var _0x4a5bda={'recipient':_0x490f0e[_0x4703('0x1f')],'message':_0x490f0e[_0x4703('0xc')],'sender':_0x29ddee[_0x4703('0x3a')]||_0x29ddee[_0x4703('0x1f')],'authorization':_0x29ddee[_0x4703('0x1e')]};var _0x598efa={'method':_0x4703('0x33'),'uri':_0x4703('0x3b'),'body':_0x4a5bda,'json':!![]};rp(_0x598efa)['then'](function(_0x8563aa){var _0x497907={'messageId':_0x8563aa['requestid']};if(!_0x29ddee[_0x4703('0x3c')]){_0x497907[_0x4703('0x37')]=!![];}return _0x22fec6['update'](_0x497907);})['catch'](function(_0x40a684){logger[_0x4703('0x19')](_0x4703('0x38'),'afterCreate',_0x4703('0x3d'),util[_0x4703('0x27')](_0x40a684,{'showHidden':![],'depth':null}));});}else{logger[_0x4703('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x4703('0x26'),_0x4703('0x3d'),_0x4703('0x3e'));}break;case _0x4703('0x3f'):if(_0x29ddee[_0x4703('0x2b')]&&_0x29ddee[_0x4703('0x2c')]){var _0x4a5bda={'messages':[{'source':'xCALLY\x20Motion','to':_0x490f0e['phone'],'body':_0x490f0e[_0x4703('0xc')],'from':_0x29ddee[_0x4703('0x3a')]||_0x29ddee[_0x4703('0x1f')]}]};var _0x2fdfff=util[_0x4703('0x40')](_0x4703('0x41'),_0x29ddee[_0x4703('0x2b')],_0x29ddee[_0x4703('0x2c')]);var _0x598efa={'method':_0x4703('0x33'),'uri':_0x4703('0x42'),'body':_0x4a5bda,'headers':{'Authorization':util[_0x4703('0x40')]('Basic\x20%s',new Buffer(_0x2fdfff)['toString'](_0x4703('0x43')))},'json':!![]};rp(_0x598efa)[_0x4703('0x16')](function(_0x42b86b){if(_0x42b86b[_0x4703('0x44')]>=0xc8&&_0x42b86b[_0x4703('0x44')]<=0xce){if(_0x42b86b['data']&&_0x42b86b[_0x4703('0x45')]['queued_count']>0x0){var _0x5e4359=_[_0x4703('0x46')](_0x42b86b[_0x4703('0x45')][_0x4703('0x20')]);var _0x2f2436={'messageId':_0x5e4359[_0x4703('0x47')]};if(!_0x29ddee[_0x4703('0x3c')]){_0x2f2436[_0x4703('0x37')]=!![];}return _0x22fec6[_0x4703('0x17')](_0x2f2436);}else{logger[_0x4703('0x19')](_0x4703('0x38'),'afterCreate',_0x4703('0x48'),util[_0x4703('0x27')](_0x42b86b,{'showHidden':![],'depth':null}));}}else{logger[_0x4703('0x19')](_0x4703('0x38'),_0x4703('0x26'),'clickSend',util[_0x4703('0x27')](_0x42b86b,{'showHidden':![],'depth':null}));}})[_0x4703('0x18')](function(_0x1b7044){logger['error'](_0x4703('0x38'),_0x4703('0x26'),_0x4703('0x48'),util[_0x4703('0x27')](_0x1b7044,{'showHidden':![],'depth':null}));});}else{logger[_0x4703('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x4703('0x26'),'clickSend',_0x4703('0x39'));}break;case _0x4703('0x49'):if(_0x29ddee[_0x4703('0x4a')]&&_0x29ddee[_0x4703('0x1e')]){var _0x4a5bda={'dst':_0x490f0e[_0x4703('0x1f')],'text':_0x490f0e[_0x4703('0xc')],'src':_0x29ddee[_0x4703('0x3a')]||_0x29ddee[_0x4703('0x1f')],'url':_0x29ddee['remote']+_0x4703('0x22')+_0x490f0e['id']+_0x4703('0x23')+_0x29ddee[_0x4703('0x24')]};var _0x2fdfff=util[_0x4703('0x40')](_0x4703('0x41'),_0x29ddee[_0x4703('0x4a')],_0x29ddee['authToken']);var _0x598efa={'method':_0x4703('0x33'),'uri':util['format'](_0x4703('0x4b'),_0x29ddee[_0x4703('0x4a')]),'body':_0x4a5bda,'headers':{'Authorization':util['format'](_0x4703('0x4c'),new Buffer(_0x2fdfff)[_0x4703('0x4d')](_0x4703('0x43')))},'json':!![]};rp(_0x598efa)[_0x4703('0x16')](function(_0x3cfb36){var _0x216eab={'messageId':_0x3cfb36[_0x4703('0x4e')][0x0]};return _0x22fec6[_0x4703('0x17')](_0x216eab);})[_0x4703('0x18')](function(_0x57e57c){logger[_0x4703('0x19')](_0x4703('0x38'),_0x4703('0x26'),_0x4703('0x49'),util[_0x4703('0x27')](_0x57e57c,{'showHidden':![],'depth':null}));});}else{logger[_0x4703('0x19')](_0x4703('0x38'),_0x4703('0x26'),_0x4703('0x49'),_0x4703('0x4f'));}break;case _0x4703('0x50'):if(_0x29ddee[_0x4703('0x2b')]&&_0x29ddee[_0x4703('0x2c')]){if(_0x29ddee['baseUrl']){var _0x477a60={'method':_0x4703('0x33'),'uri':_0x29ddee[_0x4703('0x51')]+_0x4703('0x52'),'body':{'username':_0x29ddee[_0x4703('0x2b')],'password':_0x29ddee[_0x4703('0x2c')]},'json':!![]};return rp(_0x477a60)[_0x4703('0x16')](function(_0x44dbc6){var _0x502dd3={'method':_0x4703('0x33'),'uri':_0x29ddee[_0x4703('0x51')]+_0x4703('0x53'),'body':{'messages':[{'from':_0x29ddee[_0x4703('0x1f')],'destinations':[{'to':_0x490f0e[_0x4703('0x1f')]}],'text':_0x490f0e[_0x4703('0xc')],'notifyUrl':_0x29ddee[_0x4703('0x21')]+_0x4703('0x22')+_0x490f0e['id']+'/status?token='+_0x29ddee['token'],'notifyContentType':'application/json','callbackData':_0x29ddee[_0x4703('0x1f')]+';'+_0x490f0e['body']}]},'headers':{'Authorization':_0x4703('0x54')+_0x44dbc6[_0x4703('0x24')]},'json':!![]};return rp(_0x502dd3)['then'](function(_0x51891e){if(_0x51891e[_0x4703('0x20')]){var _0x1748df={'messageId':_0x51891e[_0x4703('0x20')][0x0]['messageId']};if(!_0x29ddee[_0x4703('0x3c')]){_0x1748df[_0x4703('0x37')]=!![];}return _0x22fec6['update'](_0x1748df);}else{return logger[_0x4703('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate',_0x4703('0x50'),util[_0x4703('0x27')](_0x51891e,{'showHidden':![],'depth':null}));}});})[_0x4703('0x18')](function(_0x2f9b91){return logger[_0x4703('0x19')](_0x4703('0x38'),_0x4703('0x26'),_0x4703('0x50'),util['inspect'](_0x2f9b91,{'showHidden':![],'depth':null}));});}else{logger[_0x4703('0x19')](_0x4703('0x38'),_0x4703('0x26'),_0x4703('0x50'),'Missing\x20parameters:\x20base_url');}}else{logger['error'](_0x4703('0x38'),_0x4703('0x26'),_0x4703('0x50'),_0x4703('0x39'));}break;case _0x4703('0x55'):var _0x1cfc61=require(_0x4703('0x56'));if(_0x29ddee[_0x4703('0x57')]){var _0x30de4c={};_0x30de4c[_0x4703('0x58')]=_0x29ddee[_0x4703('0x2b')];_0x30de4c[_0x4703('0x1f')]=_0x490f0e[_0x4703('0x1f')];_0x30de4c['sender']=_0x29ddee[_0x4703('0x1f')];_0x30de4c[_0x4703('0x59')]=_0x490f0e[_0x4703('0xc')];_0x30de4c[_0x4703('0x5a')]=+new Date();var _0xc68d4a='';var _0x399859='';var _0x2d3dc3=Object['keys'](_0x30de4c);_0x2d3dc3[_0x4703('0x5b')]();for(var _0xecc63e=0x0;_0xecc63e<_0x2d3dc3[_0x4703('0x5c')];_0xecc63e++){if(_0xc68d4a!=''){_0xc68d4a+='&';}_0xc68d4a+=_0x2d3dc3[_0xecc63e]+'='+encodeURIComponent(_0x30de4c[_0x2d3dc3[_0xecc63e]]);_0x399859+=_0x30de4c[_0x2d3dc3[_0xecc63e]];}_0x399859+=_0x29ddee['apiKey'];_0x399859=_0x1cfc61[_0x4703('0x5d')](_0x4703('0x5e'))['update'](_0x399859)['digest'](_0x4703('0x5f'));if(_0xc68d4a!==''){_0xc68d4a+='&';}_0xc68d4a+='signature='+_0x399859;var _0x2b7de2={'method':_0x4703('0x30'),'uri':_0x4703('0x60')+_0xc68d4a,'json':!![]};return rp(_0x2b7de2)[_0x4703('0x16')](function(_0x5e8fde){var _0x58bf4f=Object[_0x4703('0x61')](_0x5e8fde);if(_0x5e8fde[_0x58bf4f[0x0]][_0x4703('0x19')]&&parseInt(_0x5e8fde[_0x58bf4f[0x0]][_0x4703('0x19')])===0x0){var _0x5042dd={'messageId':_0x5e8fde[_0x58bf4f[0x0]]['id_sms']};if(!_0x29ddee[_0x4703('0x3c')]){_0x5042dd[_0x4703('0x37')]=!![];}return _0x22fec6[_0x4703('0x17')](_0x5042dd);}else{return logger[_0x4703('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate',_0x4703('0x55'),util[_0x4703('0x27')](_0x5e8fde[_0x4703('0x19')],{'showHidden':![],'depth':null}));}})['catch'](function(_0x1f4260){return logger[_0x4703('0x19')](_0x4703('0x38'),_0x4703('0x26'),_0x4703('0x55'),util[_0x4703('0x27')](_0x1f4260,{'showHidden':![],'depth':null}));});}else{logger[_0x4703('0x19')](_0x4703('0x38'),_0x4703('0x26'),_0x4703('0x55'),_0x4703('0x62'));}break;case _0x4703('0x63'):if(_0x29ddee[_0x4703('0x57')]){var _0x36ced6={'method':'POST','uri':_0x4703('0x64'),'headers':{'Authorization':_0x29ddee[_0x4703('0x57')]},'body':{'content':_0x490f0e[_0x4703('0xc')],'to':[_0x490f0e[_0x4703('0x1f')]],'from':_0x29ddee['phone'],'binary':![],'clientMessageId':_0x4703('0x65'),'charset':_0x4703('0x66')},'json':!![]};rp(_0x36ced6)['then'](function(_0x758681){if(!_0x758681[_0x4703('0x19')]){var _0xa85699={'messageId':_0x758681[_0x4703('0x20')][0x0]['apiMessageId']};if(!_0x29ddee['deliveryReport']){_0xa85699[_0x4703('0x37')]=!![];}return _0x22fec6[_0x4703('0x17')](_0xa85699);}else{return logger[_0x4703('0x19')](_0x4703('0x38'),'afterCreate',_0x4703('0x63'),util[_0x4703('0x27')](_0x758681[_0x4703('0x19')],{'showHidden':![],'depth':null}));}})[_0x4703('0x18')](function(_0x220487){return logger[_0x4703('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate',_0x4703('0x63'),util[_0x4703('0x27')](_0x220487,{'showHidden':![],'depth':null}));});}else{logger['error']('SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate',_0x4703('0x63'),_0x4703('0x62'));}break;case _0x4703('0x67'):if(_0x29ddee['apiKey']){var _0x14b6ce={};var _0x2b7de2={'method':_0x4703('0x33'),'uri':_0x4703('0x68'),'headers':{'Authorization':_0x4703('0x69')+_0x29ddee[_0x4703('0x57')],'Content-Type':_0x4703('0x6a')},'body':{'from':_0x29ddee[_0x4703('0x1f')],'to':_0x490f0e[_0x4703('0x1f')],'text':_0x490f0e[_0x4703('0xc')]},'json':!![]};return rp(_0x2b7de2)[_0x4703('0x16')](function(_0x11da37){if(_0x11da37[_0x4703('0x6b')]==0xca){_0x14b6ce[_0x4703('0x6c')]=_0x11da37;var _0x370546={'method':'POST','uri':_0x4703('0x6d'),'headers':{'Authorization':_0x4703('0x69')+_0x29ddee['apiKey'],'Content-Type':'application/json'},'body':{'refid':_0x14b6ce[_0x4703('0x6c')][_0x4703('0x6e')]},'json':!![]};return rp(_0x370546)['then'](function(_0x117762){_0x14b6ce['status']=_0x117762;var _0x1415dd={'messageId':_0x14b6ce[_0x4703('0x6c')][_0x4703('0x6e')],'read':!![]};return _0x22fec6['update'](_0x1415dd);});}else{return logger['error'](_0x4703('0x38'),_0x4703('0x26'),_0x4703('0x67'),util[_0x4703('0x27')](_0x11da37,{'showHidden':![],'depth':null}));}})[_0x4703('0x18')](function(_0x40bac1){return logger[_0x4703('0x19')](_0x4703('0x38'),_0x4703('0x26'),_0x4703('0x67'),util[_0x4703('0x27')](_0x40bac1,{'showHidden':![],'depth':null}));});}else{return logger[_0x4703('0x19')](_0x4703('0x38'),_0x4703('0x26'),_0x4703('0x67'),'Token\x20not\x20received');}break;}}})['finally'](function(){_0xba966a();});}else{_0xba966a();}}},'charset':_0x4703('0x6f'),'collate':_0x4703('0x70')});};
\ No newline at end of file
index bdb9d84..3a2a0c5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdfea=['./smsMessage.socket','register','request','SmsMessage,\x20%s,\x20%s','request\x20sent','SmsMessage,\x20%s,\x20%s,\x20%s','error','code','message','info','catch','SmsMessage','create','body','options','raw','CreateSmsMessage','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','http','redis','defaults','socket.io-emitter'];(function(_0x125ff8,_0x41925f){var _0x2d9ef=function(_0x4ef34c){while(--_0x4ef34c){_0x125ff8['push'](_0x125ff8['shift']());}};_0x2d9ef(++_0x41925f);}(_0xdfea,0x1a4));var _0xadfe=function(_0x126e42,_0x10d4c8){_0x126e42=_0x126e42-0x0;var _0x199795=_0xdfea[_0x126e42];return _0x199795;};'use strict';var _=require(_0xadfe('0x0'));var util=require(_0xadfe('0x1'));var moment=require('moment');var BPromise=require(_0xadfe('0x2'));var rs=require(_0xadfe('0x3'));var fs=require('fs');var Redis=require(_0xadfe('0x4'));var db=require(_0xadfe('0x5'))['db'];var utils=require(_0xadfe('0x6'));var logger=require('../../config/logger')(_0xadfe('0x7'));var config=require(_0xadfe('0x8'));var jayson=require(_0xadfe('0x9'));var client=jayson['client'][_0xadfe('0xa')]({'port':0x232a});config[_0xadfe('0xb')]=_[_0xadfe('0xc')](config[_0xadfe('0xb')],{'host':'localhost','port':0x18eb});var socket=require(_0xadfe('0xd'))(new Redis(config[_0xadfe('0xb')]));require(_0xadfe('0xe'))[_0xadfe('0xf')](socket);function respondWithRpcPromise(_0x4cdfc4,_0x9ce075,_0x2b2f97){return new BPromise(function(_0x14c418,_0x51271d){return client[_0xadfe('0x10')](_0x4cdfc4,_0x2b2f97)['then'](function(_0x83ecf6){logger['info'](_0xadfe('0x11'),_0x9ce075,_0xadfe('0x12'));logger['debug'](_0xadfe('0x13'),_0x9ce075,_0xadfe('0x12'),JSON['stringify'](_0x83ecf6));if(_0x83ecf6['error']){if(_0x83ecf6[_0xadfe('0x14')][_0xadfe('0x15')]===0x1f4){logger[_0xadfe('0x14')](_0xadfe('0x11'),_0x9ce075,_0x83ecf6[_0xadfe('0x14')][_0xadfe('0x16')]);return _0x51271d(_0x83ecf6[_0xadfe('0x14')]['message']);}logger[_0xadfe('0x14')](_0xadfe('0x11'),_0x9ce075,_0x83ecf6[_0xadfe('0x14')]['message']);return _0x14c418(_0x83ecf6[_0xadfe('0x14')][_0xadfe('0x16')]);}else{logger[_0xadfe('0x17')](_0xadfe('0x11'),_0x9ce075,'request\x20sent');_0x14c418(_0x83ecf6['result']['message']);}})[_0xadfe('0x18')](function(_0x563705){logger[_0xadfe('0x14')](_0xadfe('0x11'),_0x9ce075,_0x563705);_0x51271d(_0x563705);});});}exports['CreateSmsMessage']=function(_0xbd0b9d){var _0x4701e7=this;return new Promise(function(_0x15888a,_0x3a4031){return db[_0xadfe('0x19')][_0xadfe('0x1a')](_0xbd0b9d[_0xadfe('0x1b')],{'raw':_0xbd0b9d[_0xadfe('0x1c')]?_0xbd0b9d[_0xadfe('0x1c')][_0xadfe('0x1d')]===undefined?!![]:![]:!![]})['then'](function(_0x38979d){logger[_0xadfe('0x17')](_0xadfe('0x1e'),_0xbd0b9d);logger['debug'](_0xadfe('0x1e'),_0xbd0b9d,JSON['stringify'](_0x38979d));_0x15888a(_0x38979d);})[_0xadfe('0x18')](function(_0x3d3eaf){logger[_0xadfe('0x14')](_0xadfe('0x1e'),_0x3d3eaf[_0xadfe('0x16')],_0xbd0b9d);_0x3a4031(_0x4701e7['error'](0x1f4,_0x3d3eaf[_0xadfe('0x16')]));});});};
\ No newline at end of file
+var _0xdc77=['defaults','./smsMessage.socket','request','then','request\x20sent','SmsMessage,\x20%s,\x20%s,\x20%s','stringify','error','SmsMessage,\x20%s,\x20%s','message','info','catch','SmsMessage','options','raw','debug','CreateSmsMessage','lodash','moment','../../config/logger','../../config/environment','jayson/promise'];(function(_0x313d59,_0x4e3579){var _0x48f6e2=function(_0x2f69c4){while(--_0x2f69c4){_0x313d59['push'](_0x313d59['shift']());}};_0x48f6e2(++_0x4e3579);}(_0xdc77,0xab));var _0x7dc7=function(_0x5f50bb,_0x1ef4ce){_0x5f50bb=_0x5f50bb-0x0;var _0xe38d4f=_0xdc77[_0x5f50bb];return _0xe38d4f;};'use strict';var _=require(_0x7dc7('0x0'));var util=require('util');var moment=require(_0x7dc7('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x7dc7('0x2'))('rpc');var config=require(_0x7dc7('0x3'));var jayson=require(_0x7dc7('0x4'));var client=jayson['client']['http']({'port':0x232a});config['redis']=_[_0x7dc7('0x5')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x7dc7('0x6'))['register'](socket);function respondWithRpcPromise(_0x541238,_0x571440,_0x451a07){return new BPromise(function(_0x59ae60,_0x324a44){return client[_0x7dc7('0x7')](_0x541238,_0x451a07)[_0x7dc7('0x8')](function(_0x3efd26){logger['info']('SmsMessage,\x20%s,\x20%s',_0x571440,_0x7dc7('0x9'));logger['debug'](_0x7dc7('0xa'),_0x571440,_0x7dc7('0x9'),JSON[_0x7dc7('0xb')](_0x3efd26));if(_0x3efd26['error']){if(_0x3efd26[_0x7dc7('0xc')]['code']===0x1f4){logger[_0x7dc7('0xc')](_0x7dc7('0xd'),_0x571440,_0x3efd26[_0x7dc7('0xc')][_0x7dc7('0xe')]);return _0x324a44(_0x3efd26[_0x7dc7('0xc')][_0x7dc7('0xe')]);}logger['error']('SmsMessage,\x20%s,\x20%s',_0x571440,_0x3efd26[_0x7dc7('0xc')]['message']);return _0x59ae60(_0x3efd26[_0x7dc7('0xc')][_0x7dc7('0xe')]);}else{logger[_0x7dc7('0xf')](_0x7dc7('0xd'),_0x571440,'request\x20sent');_0x59ae60(_0x3efd26['result'][_0x7dc7('0xe')]);}})[_0x7dc7('0x10')](function(_0x49276a){logger[_0x7dc7('0xc')](_0x7dc7('0xd'),_0x571440,_0x49276a);_0x324a44(_0x49276a);});});}exports['CreateSmsMessage']=function(_0x968262){var _0x354f5b=this;return new Promise(function(_0x4e9c2f,_0x34179c){return db[_0x7dc7('0x11')]['create'](_0x968262['body'],{'raw':_0x968262[_0x7dc7('0x12')]?_0x968262[_0x7dc7('0x12')][_0x7dc7('0x13')]===undefined?!![]:![]:!![]})[_0x7dc7('0x8')](function(_0xd9c3){logger[_0x7dc7('0xf')]('CreateSmsMessage',_0x968262);logger[_0x7dc7('0x14')]('CreateSmsMessage',_0x968262,JSON[_0x7dc7('0xb')](_0xd9c3));_0x4e9c2f(_0xd9c3);})[_0x7dc7('0x10')](function(_0x25a903){logger['error'](_0x7dc7('0x15'),_0x25a903['message'],_0x968262);_0x34179c(_0x354f5b[_0x7dc7('0xc')](0x1f4,_0x25a903[_0x7dc7('0xe')]));});});};
\ No newline at end of file
index 6df654d..d731b7c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf998=['length','./smsMessage.events','save','emit','removeListener','register'];(function(_0x40ac85,_0x5e2d7e){var _0x34fe27=function(_0x50c68d){while(--_0x50c68d){_0x40ac85['push'](_0x40ac85['shift']());}};_0x34fe27(++_0x5e2d7e);}(_0xf998,0x10f));var _0x8f99=function(_0x2f90d0,_0x1d9ec1){_0x2f90d0=_0x2f90d0-0x0;var _0x25ed4b=_0xf998[_0x2f90d0];return _0x25ed4b;};'use strict';var SmsMessageEvents=require(_0x8f99('0x0'));var events=[_0x8f99('0x1'),'remove','update'];function createListener(_0x592d07,_0x4af5db){return function(_0x2c90e3){_0x4af5db[_0x8f99('0x2')](_0x592d07,_0x2c90e3);};}function removeListener(_0x112a2d,_0x4c7394){return function(){SmsMessageEvents[_0x8f99('0x3')](_0x112a2d,_0x4c7394);};}exports[_0x8f99('0x4')]=function(_0x53ba17){for(var _0x4fdb79=0x0,_0x5dbe34=events[_0x8f99('0x5')];_0x4fdb79<_0x5dbe34;_0x4fdb79++){var _0x6ff24=events[_0x4fdb79];var _0x50480c=createListener('smsMessage:'+_0x6ff24,_0x53ba17);SmsMessageEvents['on'](_0x6ff24,_0x50480c);}};
\ No newline at end of file
+var _0x66cb=['./smsMessage.events','save','remove','emit','removeListener','smsMessage:'];(function(_0x1d0fe1,_0x452dbb){var _0x228558=function(_0x356baf){while(--_0x356baf){_0x1d0fe1['push'](_0x1d0fe1['shift']());}};_0x228558(++_0x452dbb);}(_0x66cb,0x120));var _0xb66c=function(_0x2bd332,_0xbbe585){_0x2bd332=_0x2bd332-0x0;var _0x27c0be=_0x66cb[_0x2bd332];return _0x27c0be;};'use strict';var SmsMessageEvents=require(_0xb66c('0x0'));var events=[_0xb66c('0x1'),_0xb66c('0x2'),'update'];function createListener(_0xd1582f,_0x345754){return function(_0x176e80){_0x345754[_0xb66c('0x3')](_0xd1582f,_0x176e80);};}function removeListener(_0x3e3c5e,_0x31bbee){return function(){SmsMessageEvents[_0xb66c('0x4')](_0x3e3c5e,_0x31bbee);};}exports['register']=function(_0x393109){for(var _0x382057=0x0,_0x3ef223=events['length'];_0x382057<_0x3ef223;_0x382057++){var _0x1ed2fe=events[_0x382057];var _0x27dbed=createListener(_0xb66c('0x5')+_0x1ed2fe,_0x393109);SmsMessageEvents['on'](_0x1ed2fe,_0x27dbed);}};
\ No newline at end of file
index 0575a97..5f9bc8f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0ea7=['/:id/teams','getTeams','/:id/users','getAgents','post','create','addTeams','addAgents','put','update','delete','destroy','removeAgents','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/members','getMembers'];(function(_0x5b1c48,_0x128a7f){var _0x5ab9aa=function(_0x20fed6){while(--_0x20fed6){_0x5b1c48['push'](_0x5b1c48['shift']());}};_0x5ab9aa(++_0x128a7f);}(_0x0ea7,0xc8));var _0x70ea=function(_0x3be65b,_0x54d4ee){_0x3be65b=_0x3be65b-0x0;var _0x314196=_0x0ea7[_0x3be65b];return _0x314196;};'use strict';var multer=require('multer');var util=require(_0x70ea('0x0'));var path=require(_0x70ea('0x1'));var timeout=require(_0x70ea('0x2'));var express=require(_0x70ea('0x3'));var router=express[_0x70ea('0x4')]();var auth=require(_0x70ea('0x5'));var interaction=require(_0x70ea('0x6'));var config=require(_0x70ea('0x7'));var controller=require('./smsQueue.controller');router[_0x70ea('0x8')]('/',auth[_0x70ea('0x9')](),controller[_0x70ea('0xa')]);router[_0x70ea('0x8')](_0x70ea('0xb'),auth[_0x70ea('0x9')](),controller[_0x70ea('0xc')]);router[_0x70ea('0x8')](_0x70ea('0xd'),auth['isAuthenticated'](),controller[_0x70ea('0xe')]);router['get'](_0x70ea('0xf'),auth[_0x70ea('0x9')](),controller[_0x70ea('0x10')]);router['get'](_0x70ea('0x11'),auth[_0x70ea('0x9')](),controller[_0x70ea('0x12')]);router[_0x70ea('0x8')](_0x70ea('0x13'),auth['isAuthenticated'](),controller[_0x70ea('0x14')]);router[_0x70ea('0x15')]('/',auth[_0x70ea('0x9')](),controller[_0x70ea('0x16')]);router[_0x70ea('0x15')]('/:id/teams',auth['isAuthenticated'](),controller[_0x70ea('0x17')]);router[_0x70ea('0x15')](_0x70ea('0x13'),auth[_0x70ea('0x9')](),controller[_0x70ea('0x18')]);router[_0x70ea('0x19')](_0x70ea('0xd'),auth['isAuthenticated'](),controller[_0x70ea('0x1a')]);router[_0x70ea('0x1b')](_0x70ea('0xd'),auth[_0x70ea('0x9')](),controller[_0x70ea('0x1c')]);router[_0x70ea('0x1b')]('/:id/teams',auth[_0x70ea('0x9')](),controller['removeTeams']);router[_0x70ea('0x1b')](_0x70ea('0x13'),auth[_0x70ea('0x9')](),controller[_0x70ea('0x1d')]);module[_0x70ea('0x1e')]=router;
\ No newline at end of file
+var _0xb92c=['getTeams','/:id/users','post','addTeams','put','update','delete','removeTeams','removeAgents','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','./smsQueue.controller','get','index','/describe','/:id','isAuthenticated','/:id/teams'];(function(_0x3341f7,_0x8faa15){var _0x2b25cd=function(_0x3c70fa){while(--_0x3c70fa){_0x3341f7['push'](_0x3341f7['shift']());}};_0x2b25cd(++_0x8faa15);}(_0xb92c,0x1ea));var _0xcb92=function(_0x20c942,_0x1d2f4d){_0x20c942=_0x20c942-0x0;var _0x49b605=_0xb92c[_0x20c942];return _0x49b605;};'use strict';var multer=require(_0xcb92('0x0'));var util=require(_0xcb92('0x1'));var path=require(_0xcb92('0x2'));var timeout=require(_0xcb92('0x3'));var express=require(_0xcb92('0x4'));var router=express[_0xcb92('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0xcb92('0x6'));var config=require('../../config/environment');var controller=require(_0xcb92('0x7'));router[_0xcb92('0x8')]('/',auth['isAuthenticated'](),controller[_0xcb92('0x9')]);router[_0xcb92('0x8')](_0xcb92('0xa'),auth['isAuthenticated'](),controller['describe']);router[_0xcb92('0x8')](_0xcb92('0xb'),auth[_0xcb92('0xc')](),controller['show']);router[_0xcb92('0x8')]('/:id/members',auth[_0xcb92('0xc')](),controller['getMembers']);router[_0xcb92('0x8')](_0xcb92('0xd'),auth['isAuthenticated'](),controller[_0xcb92('0xe')]);router[_0xcb92('0x8')](_0xcb92('0xf'),auth[_0xcb92('0xc')](),controller['getAgents']);router[_0xcb92('0x10')]('/',auth[_0xcb92('0xc')](),controller['create']);router[_0xcb92('0x10')](_0xcb92('0xd'),auth[_0xcb92('0xc')](),controller[_0xcb92('0x11')]);router[_0xcb92('0x10')](_0xcb92('0xf'),auth[_0xcb92('0xc')](),controller['addAgents']);router[_0xcb92('0x12')](_0xcb92('0xb'),auth[_0xcb92('0xc')](),controller[_0xcb92('0x13')]);router[_0xcb92('0x14')](_0xcb92('0xb'),auth[_0xcb92('0xc')](),controller['destroy']);router[_0xcb92('0x14')](_0xcb92('0xd'),auth[_0xcb92('0xc')](),controller[_0xcb92('0x15')]);router[_0xcb92('0x14')](_0xcb92('0xf'),auth[_0xcb92('0xc')](),controller[_0xcb92('0x16')]);module[_0xcb92('0x17')]=router;
\ No newline at end of file
index 5275b8b..c9ac449 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3705=['roundrobin','sequelize','exports','STRING','name','ENUM','rrmemory','beepall'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0x3705,0xe9));var _0x5370=function(_0x178e48,_0x3c9509){_0x178e48=_0x178e48-0x0;var _0x440d7e=_0x3705[_0x178e48];return _0x440d7e;};'use strict';var Sequelize=require(_0x5370('0x0'));module[_0x5370('0x1')]={'name':{'type':Sequelize[_0x5370('0x2')],'unique':_0x5370('0x3'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x5370('0x2')]},'timeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x5370('0x4')](_0x5370('0x5'),_0x5370('0x6'),_0x5370('0x7'))}};
\ No newline at end of file
+var _0x4b0a=['INTEGER','rrmemory','beepall','exports','STRING'];(function(_0xc0111c,_0x19f112){var _0x72c416=function(_0x4154a0){while(--_0x4154a0){_0xc0111c['push'](_0xc0111c['shift']());}};_0x72c416(++_0x19f112);}(_0x4b0a,0xad));var _0xa4b0=function(_0x44e6ab,_0x412922){_0x44e6ab=_0x44e6ab-0x0;var _0x4b9d9c=_0x4b0a[_0x44e6ab];return _0x4b9d9c;};'use strict';var Sequelize=require('sequelize');module[_0xa4b0('0x0')]={'name':{'type':Sequelize['STRING'],'unique':'name','validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0xa4b0('0x1')]},'timeout':{'type':Sequelize[_0xa4b0('0x2')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM'](_0xa4b0('0x3'),_0xa4b0('0x4'),'roundrobin')}};
\ No newline at end of file
index bff2153..06cd753 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc7ba=['../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','redis','defaults','./smsQueue.socket','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','save','update','then','destroy','get','SmsQueues','UserProfileResource','stack','name','send','index','SmsQueue','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','type','key','VIRTUAL','field','merge','includeAll','findAll','rows','catch','show','params','include','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','describe','getMembers','findOne','UserSmsQueue','map','User','findAndCountAll','agent','smsPause','createdAt','format','%s/%s','SIP','updatedAt','getTeams','Team','addTeams','teams','Agents','online','voicePause','interface','transaction','findOrCreate','forEach','emit','userSmsQueue:save','removeTeams','from','join','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','clone','ut.UserId\x20=\x20?','push','sequelize','toString','QueryTypes','SELECT','TeamId','all','union','value','ids','isEmpty','removeAgents','addAgents','omit','spread','userSmsQueue:remove','options','getAgents','html-pdf','eml-format','rimraf','request-promise','moment','bluebird','util','path','sox','to-csv','lodash','squel','desk.js','querystring','papaparse'];(function(_0x197481,_0x43d5fd){var _0x34655b=function(_0x1a8434){while(--_0x1a8434){_0x197481['push'](_0x197481['shift']());}};_0x34655b(++_0x43d5fd);}(_0xc7ba,0x78));var _0xac7b=function(_0x42342a,_0x766a6){_0x42342a=_0x42342a-0x0;var _0x17912c=_0xc7ba[_0x42342a];return _0x17912c;};'use strict';var pdf=require(_0xac7b('0x0'));var emlformat=require(_0xac7b('0x1'));var rimraf=require(_0xac7b('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0xac7b('0x3'));var moment=require(_0xac7b('0x4'));var BPromise=require(_0xac7b('0x5'));var Mustache=require('mustache');var util=require(_0xac7b('0x6'));var path=require(_0xac7b('0x7'));var sox=require(_0xac7b('0x8'));var csv=require(_0xac7b('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xac7b('0xa'));var squel=require(_0xac7b('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0xac7b('0xc'));var toCsv=require('to-csv');var querystring=require(_0xac7b('0xd'));var Papa=require(_0xac7b('0xe'));var Redis=require('ioredis');var authService=require(_0xac7b('0xf'));var qs=require(_0xac7b('0x10'));var hardwareService=require(_0xac7b('0x11'));var logger=require(_0xac7b('0x12'))(_0xac7b('0x13'));var utils=require(_0xac7b('0x14'));var config=require('../../config/environment');var db=require(_0xac7b('0x15'))['db'];config[_0xac7b('0x16')]=_[_0xac7b('0x17')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0xac7b('0x18'))['register'](socket);function respondWithStatusCode(_0x15feed,_0x19aa5b){_0x19aa5b=_0x19aa5b||0xcc;return function(_0x1a4531){if(_0x1a4531){return _0x15feed[_0xac7b('0x19')](_0x19aa5b);}return _0x15feed[_0xac7b('0x1a')](_0x19aa5b)[_0xac7b('0x1b')]();};}function respondWithResult(_0x4c70c0,_0x13cb4f){_0x13cb4f=_0x13cb4f||0xc8;return function(_0x2efa9c){if(_0x2efa9c){return _0x4c70c0['status'](_0x13cb4f)['json'](_0x2efa9c);}};}function respondWithFilteredResult(_0x572795,_0x56821c){return function(_0x321424){if(_0x321424){var _0x5b56a3=_0x321424[_0xac7b('0x1c')],_0x43f1a0=_0x56821c['offset'],_0x52ebaf=_0x56821c[_0xac7b('0x1d')]+_0x56821c[_0xac7b('0x1e')],_0x534bbf;if(_0x52ebaf>=_0x5b56a3){_0x52ebaf=_0x5b56a3;_0x534bbf=0xc8;}else{_0x534bbf=0xce;}_0x572795[_0xac7b('0x1a')](_0x534bbf);return _0x572795[_0xac7b('0x1f')](_0xac7b('0x20'),_0x43f1a0+'-'+_0x52ebaf+'/'+_0x5b56a3)[_0xac7b('0x21')](_0x321424);}return null;};}function patchUpdates(_0x5a4b77){return function(_0x2a4d7b){try{jsonpatch[_0xac7b('0x22')](_0x2a4d7b,_0x5a4b77,!![]);}catch(_0x2429b2){return BPromise['reject'](_0x2429b2);}return _0x2a4d7b[_0xac7b('0x23')]();};}function saveUpdates(_0xe7f875,_0x25b16c){return function(_0x3aca7b){if(_0x3aca7b){return _0x3aca7b[_0xac7b('0x24')](_0xe7f875)[_0xac7b('0x25')](function(_0x289a18){return _0x289a18;});}return null;};}function removeEntity(_0x3d2c4f,_0x1181ab){return function(_0x583918){if(_0x583918){return _0x583918[_0xac7b('0x26')]()['then'](function(){var _0x5b1346=_0x583918[_0xac7b('0x27')]({'plain':!![]});var _0x418d16=_0xac7b('0x28');return db[_0xac7b('0x29')][_0xac7b('0x26')]({'where':{'type':_0x418d16,'resourceId':_0x5b1346['id']}})[_0xac7b('0x25')](function(){return _0x583918;});})['then'](function(){_0x3d2c4f[_0xac7b('0x1a')](0xcc)[_0xac7b('0x1b')]();});}};}function handleEntityNotFound(_0xe290da,_0x3c0fa9){return function(_0x4c73ff){if(!_0x4c73ff){_0xe290da[_0xac7b('0x19')](0x194);}return _0x4c73ff;};}function handleError(_0x476014,_0x4197f7){_0x4197f7=_0x4197f7||0x1f4;return function(_0x184c0b){logger['error'](_0x184c0b[_0xac7b('0x2a')]);if(_0x184c0b[_0xac7b('0x2b')]){delete _0x184c0b[_0xac7b('0x2b')];}_0x476014['status'](_0x4197f7)[_0xac7b('0x2c')](_0x184c0b);};}exports[_0xac7b('0x2d')]=function(_0x5cea44,_0x3c38da){var _0xf1af0a={},_0x206787={},_0x4ff3ae={'count':0x0,'rows':[]};var _0x455c76=db[_0xac7b('0x2e')][_0xac7b('0x2f')];_0x206787[_0xac7b('0x30')]=_[_0xac7b('0x31')](_0x455c76);_0x206787[_0xac7b('0x32')]=_[_0xac7b('0x31')](_0x5cea44[_0xac7b('0x32')]);_0x206787[_0xac7b('0x33')]=_['intersection'](_0x206787[_0xac7b('0x30')],_0x206787['query']);_0xf1af0a['attributes']=_[_0xac7b('0x34')](_0x206787[_0xac7b('0x30')],qs[_0xac7b('0x35')](_0x5cea44[_0xac7b('0x32')][_0xac7b('0x35')]));_0xf1af0a[_0xac7b('0x36')]=_0xf1af0a[_0xac7b('0x36')][_0xac7b('0x37')]?_0xf1af0a['attributes']:_0x206787[_0xac7b('0x30')];if(!_0x5cea44[_0xac7b('0x32')][_0xac7b('0x38')](_0xac7b('0x39'))){_0xf1af0a['limit']=qs[_0xac7b('0x1e')](_0x5cea44['query']['limit']);_0xf1af0a[_0xac7b('0x1d')]=qs[_0xac7b('0x1d')](_0x5cea44['query'][_0xac7b('0x1d')]);}_0xf1af0a[_0xac7b('0x3a')]=qs[_0xac7b('0x3b')](_0x5cea44['query'][_0xac7b('0x3b')]);_0xf1af0a[_0xac7b('0x3c')]=qs[_0xac7b('0x33')](_[_0xac7b('0x3d')](_0x5cea44[_0xac7b('0x32')],_0x206787[_0xac7b('0x33')]));if(_0x5cea44[_0xac7b('0x32')][_0xac7b('0x3e')]){_0xf1af0a['where']=_['merge'](_0xf1af0a[_0xac7b('0x3c')],{'$or':_['map'](_0x455c76,function(_0x4df8f4){if(_0x4df8f4[_0xac7b('0x3f')][_0xac7b('0x40')]!==_0xac7b('0x41')){var _0x341daf={};_0x341daf[_0x4df8f4[_0xac7b('0x42')]]={'$like':'%'+_0x5cea44[_0xac7b('0x32')][_0xac7b('0x3e')]+'%'};return _0x341daf;}})});}_0xf1af0a=_[_0xac7b('0x43')]({},_0xf1af0a,_0x5cea44['options']);var _0x2f068a={'where':_0xf1af0a['where']};return db[_0xac7b('0x2e')][_0xac7b('0x1c')](_0x2f068a)[_0xac7b('0x25')](function(_0x5c5cd6){_0x4ff3ae[_0xac7b('0x1c')]=_0x5c5cd6;if(_0x5cea44[_0xac7b('0x32')][_0xac7b('0x44')]){_0xf1af0a['include']=[{'all':!![]}];}return db[_0xac7b('0x2e')][_0xac7b('0x45')](_0xf1af0a);})[_0xac7b('0x25')](function(_0x17005d){_0x4ff3ae[_0xac7b('0x46')]=_0x17005d;return _0x4ff3ae;})[_0xac7b('0x25')](respondWithFilteredResult(_0x3c38da,_0xf1af0a))[_0xac7b('0x47')](handleError(_0x3c38da,null));};exports[_0xac7b('0x48')]=function(_0x40d7e2,_0x3ff3cb){var _0x2bb6bf={'raw':!![],'where':{'id':_0x40d7e2[_0xac7b('0x49')]['id']}},_0xe5f210={};_0xe5f210[_0xac7b('0x30')]=_[_0xac7b('0x31')](db[_0xac7b('0x2e')]['rawAttributes']);_0xe5f210['query']=_[_0xac7b('0x31')](_0x40d7e2[_0xac7b('0x32')]);_0xe5f210[_0xac7b('0x33')]=_[_0xac7b('0x34')](_0xe5f210['model'],_0xe5f210[_0xac7b('0x32')]);_0x2bb6bf[_0xac7b('0x36')]=_[_0xac7b('0x34')](_0xe5f210[_0xac7b('0x30')],qs[_0xac7b('0x35')](_0x40d7e2[_0xac7b('0x32')]['fields']));_0x2bb6bf[_0xac7b('0x36')]=_0x2bb6bf[_0xac7b('0x36')][_0xac7b('0x37')]?_0x2bb6bf[_0xac7b('0x36')]:_0xe5f210['model'];if(_0x40d7e2[_0xac7b('0x32')][_0xac7b('0x44')]){_0x2bb6bf[_0xac7b('0x4a')]=[{'all':!![]}];}_0x2bb6bf=_[_0xac7b('0x43')]({},_0x2bb6bf,_0x40d7e2['options']);return db['SmsQueue'][_0xac7b('0x4b')](_0x2bb6bf)[_0xac7b('0x25')](handleEntityNotFound(_0x3ff3cb,null))[_0xac7b('0x25')](respondWithResult(_0x3ff3cb,null))[_0xac7b('0x47')](handleError(_0x3ff3cb,null));};exports[_0xac7b('0x4c')]=function(_0x1550e1,_0x564f0a){return db['SmsQueue'][_0xac7b('0x4c')](_0x1550e1['body'],{})['then'](function(_0x172751){var _0x4ecf38=_0x1550e1[_0xac7b('0x4d')][_0xac7b('0x27')]({'plain':!![]});if(!_0x4ecf38)throw new Error(_0xac7b('0x4e'));if(_0x4ecf38['role']===_0xac7b('0x4d')){var _0x5c119b=_0x172751[_0xac7b('0x27')]({'plain':!![]});var _0x558cc1=_0xac7b('0x28');return db[_0xac7b('0x4f')]['find']({'where':{'name':_0x558cc1,'userProfileId':_0x4ecf38['userProfileId']},'raw':!![]})[_0xac7b('0x25')](function(_0x36bdc5){if(_0x36bdc5&&_0x36bdc5['autoAssociation']===0x0){return db[_0xac7b('0x29')][_0xac7b('0x4c')]({'name':_0x5c119b['name'],'resourceId':_0x5c119b['id'],'type':_0x36bdc5[_0xac7b('0x2b')],'sectionId':_0x36bdc5['id']},{})[_0xac7b('0x25')](function(){return _0x172751;});}else{return _0x172751;}})[_0xac7b('0x47')](function(_0x506a8c){logger[_0xac7b('0x50')](_0xac7b('0x51'),_0x506a8c);throw _0x506a8c;});}return _0x172751;})[_0xac7b('0x25')](respondWithResult(_0x564f0a,0xc9))[_0xac7b('0x47')](handleError(_0x564f0a,null));};exports[_0xac7b('0x24')]=function(_0x4d35c3,_0xc31c2a){if(_0x4d35c3[_0xac7b('0x52')]['id']){delete _0x4d35c3[_0xac7b('0x52')]['id'];}return db[_0xac7b('0x2e')][_0xac7b('0x4b')]({'where':{'id':_0x4d35c3[_0xac7b('0x49')]['id']}})[_0xac7b('0x25')](handleEntityNotFound(_0xc31c2a,null))[_0xac7b('0x25')](saveUpdates(_0x4d35c3[_0xac7b('0x52')],null))['then'](respondWithResult(_0xc31c2a,null))[_0xac7b('0x47')](handleError(_0xc31c2a,null));};exports['destroy']=function(_0x451366,_0x4db27b){return db[_0xac7b('0x2e')][_0xac7b('0x4b')]({'where':{'id':_0x451366[_0xac7b('0x49')]['id']}})[_0xac7b('0x25')](handleEntityNotFound(_0x4db27b,null))[_0xac7b('0x25')](removeEntity(_0x4db27b,null))[_0xac7b('0x47')](handleError(_0x4db27b,null));};exports[_0xac7b('0x53')]=function(_0x3a98e4,_0x525cf6){return db[_0xac7b('0x2e')][_0xac7b('0x53')]()[_0xac7b('0x25')](respondWithResult(_0x525cf6,null))['catch'](handleError(_0x525cf6,null));};exports[_0xac7b('0x54')]=function(_0xd7e369,_0x5206bf,_0x5f27ec){var _0x80ee3={'raw':!![],'where':{}},_0x14fdde={},_0x4dc917;return db[_0xac7b('0x2e')][_0xac7b('0x55')]({'where':{'id':_0xd7e369[_0xac7b('0x49')]['id']}})['then'](handleEntityNotFound(_0x5206bf,null))[_0xac7b('0x25')](function(_0xd2adf1){if(_0xd2adf1){_0x4dc917=_0xd2adf1['get']({'plain':!![]});_0x14fdde[_0xac7b('0x30')]=_['keys'](db[_0xac7b('0x56')][_0xac7b('0x2f')]);_0x14fdde[_0xac7b('0x32')]=_[_0xac7b('0x31')](_0xd7e369['query']);_0x14fdde[_0xac7b('0x33')]=_['intersection'](_0x14fdde['model'],_0x14fdde[_0xac7b('0x32')]);_0x80ee3[_0xac7b('0x36')]=_[_0xac7b('0x34')](_0x14fdde['model'],qs[_0xac7b('0x35')](_0xd7e369[_0xac7b('0x32')]['fields']));_0x80ee3[_0xac7b('0x36')]=_0x80ee3['attributes']['length']?_0x80ee3[_0xac7b('0x36')]:_0x14fdde['model'];if(!_0xd7e369[_0xac7b('0x32')]['hasOwnProperty'](_0xac7b('0x39'))){_0x80ee3[_0xac7b('0x1e')]=qs[_0xac7b('0x1e')](_0xd7e369['query']['limit']);_0x80ee3[_0xac7b('0x1d')]=qs['offset'](_0xd7e369[_0xac7b('0x32')][_0xac7b('0x1d')]);}_0x80ee3[_0xac7b('0x3a')]=qs[_0xac7b('0x3b')](_0xd7e369['query'][_0xac7b('0x3b')]);_0x80ee3['where']=qs['filters'](_[_0xac7b('0x3d')](_0xd7e369['query'],_0x14fdde[_0xac7b('0x33')]));_0x80ee3[_0xac7b('0x3c')]['SmsQueueId']=_0xd2adf1['id'];if(_0xd7e369['query'][_0xac7b('0x3e')]){_0x80ee3[_0xac7b('0x3c')]=_[_0xac7b('0x43')](_0x80ee3[_0xac7b('0x3c')],{'$or':_[_0xac7b('0x57')](_0x80ee3[_0xac7b('0x36')],function(_0x307f04){var _0xeab98b={};_0xeab98b[_0x307f04]={'$like':'%'+_0xd7e369[_0xac7b('0x32')][_0xac7b('0x3e')]+'%'};return _0xeab98b;})});}_0x80ee3=_[_0xac7b('0x43')]({},_0x80ee3,_0xd7e369['options']);return db[_0xac7b('0x56')][_0xac7b('0x45')](_0x80ee3);}})[_0xac7b('0x25')](function(_0x1949ee){if(_0x1949ee){return db[_0xac7b('0x58')][_0xac7b('0x59')]({'where':{'id':_[_0xac7b('0x57')](_0x1949ee,'UserId'),'role':_0xac7b('0x5a')},'attributes':['id',_0xac7b('0x2b'),_0xac7b('0x5b'),'updatedAt',_0xac7b('0x5c')]});}})['then'](function(_0x3fbf56){if(_0x3fbf56){return{'count':_0x3fbf56[_0xac7b('0x1c')],'rows':_[_0xac7b('0x57')](_0x3fbf56['rows'],function(_0x25833b){return{'membername':_0x25833b['name'],'UserId':_0x25833b['id'],'queue_name':_0x4dc917['name'],'SmsQueueId':_0x4dc917['id'],'interface':util[_0xac7b('0x5d')](_0xac7b('0x5e'),_0xac7b('0x5f'),_0x25833b[_0xac7b('0x2b')]),'penalty':0x0,'paused':_0x25833b[_0xac7b('0x5b')],'createdAt':_0x25833b[_0xac7b('0x5c')],'updatedAt':_0x25833b[_0xac7b('0x60')]};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0x5206bf,_0x80ee3))[_0xac7b('0x47')](handleError(_0x5206bf,null));};exports[_0xac7b('0x61')]=function(_0x5c7ed7,_0x5b9818,_0x455cc1){var _0x4d4d0e={};var _0x4bc6e5={};var _0x96f101;var _0x2e26b2;return db[_0xac7b('0x2e')]['findOne']({'where':{'id':_0x5c7ed7['params']['id']}})[_0xac7b('0x25')](handleEntityNotFound(_0x5b9818,null))[_0xac7b('0x25')](function(_0x253942){if(_0x253942){_0x96f101=_0x253942;_0x4bc6e5['model']=_[_0xac7b('0x31')](db[_0xac7b('0x62')][_0xac7b('0x2f')]);_0x4bc6e5['query']=_[_0xac7b('0x31')](_0x5c7ed7[_0xac7b('0x32')]);_0x4bc6e5['filters']=_[_0xac7b('0x34')](_0x4bc6e5[_0xac7b('0x30')],_0x4bc6e5[_0xac7b('0x32')]);_0x4d4d0e[_0xac7b('0x36')]=_[_0xac7b('0x34')](_0x4bc6e5['model'],qs[_0xac7b('0x35')](_0x5c7ed7[_0xac7b('0x32')][_0xac7b('0x35')]));_0x4d4d0e[_0xac7b('0x36')]=_0x4d4d0e[_0xac7b('0x36')][_0xac7b('0x37')]?_0x4d4d0e[_0xac7b('0x36')]:_0x4bc6e5[_0xac7b('0x30')];_0x4d4d0e[_0xac7b('0x3a')]=qs['sort'](_0x5c7ed7[_0xac7b('0x32')][_0xac7b('0x3b')]);_0x4d4d0e['where']=qs[_0xac7b('0x33')](_['pick'](_0x5c7ed7[_0xac7b('0x32')],_0x4bc6e5['filters']));if(_0x5c7ed7[_0xac7b('0x32')][_0xac7b('0x3e')]){_0x4d4d0e[_0xac7b('0x3c')]=_[_0xac7b('0x43')](_0x4d4d0e[_0xac7b('0x3c')],{'$or':_[_0xac7b('0x57')](_0x4d4d0e[_0xac7b('0x36')],function(_0x51c67e){var _0x4475ff={};_0x4475ff[_0x51c67e]={'$like':'%'+_0x5c7ed7[_0xac7b('0x32')][_0xac7b('0x3e')]+'%'};return _0x4475ff;})});}_0x4d4d0e=_[_0xac7b('0x43')]({},_0x4d4d0e,_0x5c7ed7['options']);return _0x96f101[_0xac7b('0x61')](_0x4d4d0e);}})[_0xac7b('0x25')](function(_0x1f3c00){if(_0x1f3c00){_0x2e26b2=_0x1f3c00[_0xac7b('0x37')];if(!_0x5c7ed7[_0xac7b('0x32')][_0xac7b('0x38')](_0xac7b('0x39'))){_0x4d4d0e[_0xac7b('0x1e')]=qs[_0xac7b('0x1e')](_0x5c7ed7['query'][_0xac7b('0x1e')]);_0x4d4d0e[_0xac7b('0x1d')]=qs[_0xac7b('0x1d')](_0x5c7ed7[_0xac7b('0x32')][_0xac7b('0x1d')]);}return _0x96f101['getTeams'](_0x4d4d0e);}})[_0xac7b('0x25')](function(_0x2872db){if(_0x2872db){return _0x2872db?{'count':_0x2e26b2,'rows':_0x2872db}:null;}})[_0xac7b('0x25')](respondWithResult(_0x5b9818,null))[_0xac7b('0x47')](handleError(_0x5b9818,null));};exports[_0xac7b('0x63')]=function(_0x5757af,_0x5149d5,_0x94ff36){var _0x4dcb8b=_0x5757af[_0xac7b('0x52')][_0xac7b('0x64')];return db['Team'][_0xac7b('0x45')]({'where':{'id':_[_0xac7b('0x57')](_0x4dcb8b,'id')},'attributes':['id'],'include':[{'model':db[_0xac7b('0x58')],'as':_0xac7b('0x65'),'attributes':['id',_0xac7b('0x2b'),_0xac7b('0x66'),_0xac7b('0x67'),_0xac7b('0x68')],'raw':!![]}]})[_0xac7b('0x25')](function(_0x48d34a){if(_0x48d34a){var _0x1d678f=_['flatMap'](_0x48d34a,function(_0x3c6a20){var _0x13bcda=_0x3c6a20[_0xac7b('0x27')]({'plain':!![]});return _0x13bcda[_0xac7b('0x65')];});return db[_0xac7b('0x2e')][_0xac7b('0x4b')]({'where':{'id':_0x5757af[_0xac7b('0x49')]['id']}})[_0xac7b('0x25')](function(_0x5f42d1){return db['sequelize'][_0xac7b('0x69')](function(_0x166b71){return _0x5f42d1['addTeams'](_[_0xac7b('0x57')](_0x4dcb8b,'id'),{'transaction':_0x166b71})['then'](function(){return BPromise['each'](_0x1d678f,function(_0x2b1735){return db[_0xac7b('0x56')][_0xac7b('0x6a')]({'where':{'UserId':_0x2b1735['id'],'SmsQueueId':_0x5757af[_0xac7b('0x49')]['id']},'transaction':_0x166b71});});})[_0xac7b('0x25')](function(){_0x1d678f[_0xac7b('0x6b')](function(_0x54cac){socket[_0xac7b('0x6c')](_0xac7b('0x6d'),{'UserId':_0x54cac['id'],'SmsQueueId':_0x5f42d1['id']});});});});});}})[_0xac7b('0x25')](respondWithStatusCode(_0x5149d5,null))[_0xac7b('0x47')](handleError(_0x5149d5,null));};exports[_0xac7b('0x6e')]=function(_0x5dfd25,_0x15a078,_0x51a596){return db[_0xac7b('0x62')][_0xac7b('0x45')]({'where':{'id':_0x5dfd25[_0xac7b('0x32')]['ids']},'attributes':['id'],'include':[{'model':db['User'],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0xac7b('0x25')](handleEntityNotFound(_0x15a078,null))['then'](function(_0x5ec90a){var _0x4aba9d=_['map'](_0x5ec90a,'id');var _0x56a494=[];var _0x35b97c=[];var _0x4826fb=squel['select']();_0x4826fb[_0xac7b('0x42')]('tq.TeamId')[_0xac7b('0x6f')]('team_has_sms_queues','tq')[_0xac7b('0x70')](_0xac7b('0x71'),'ut',_0xac7b('0x72'))['where']('SmsQueueId\x20=\x20?',_0x5dfd25[_0xac7b('0x49')]['id']);for(var _0x1acee0=0x0;_0x1acee0<_0x5ec90a[_0xac7b('0x37')];_0x1acee0+=0x1){let _0x4e17d3=_0x5ec90a[_0x1acee0];for(var _0x18a9ad=0x0;_0x18a9ad<_0x4e17d3[_0xac7b('0x65')][_0xac7b('0x37')];_0x18a9ad+=0x1){let _0x424d05=_0x4e17d3['Agents'][_0x18a9ad];var _0x50f48e=_0x4826fb[_0xac7b('0x73')]();_0x50f48e[_0xac7b('0x3c')](_0xac7b('0x74'),_0x424d05['id']);_0x35b97c[_0xac7b('0x75')](db[_0xac7b('0x76')][_0xac7b('0x32')](_0x50f48e[_0xac7b('0x77')](),{'type':db[_0xac7b('0x76')][_0xac7b('0x78')][_0xac7b('0x79')]})[_0xac7b('0x25')](function(_0x338e89){if(_0x338e89[_0xac7b('0x37')]===0x1){return _0x424d05['id'];}else{var _0x5c7759=_['every'](_['map'](_0x338e89,_0xac7b('0x7a')),function(_0xeb4edc){return _['includes'](_0x4aba9d,_0xeb4edc);});if(_0x5c7759){return _0x424d05['id'];}}}));}}return BPromise[_0xac7b('0x7b')](_0x35b97c)['then'](function(_0xa81e42){_0x56a494=_(_0x56a494)[_0xac7b('0x7c')](_0xa81e42)['compact']()[_0xac7b('0x7d')]();return db[_0xac7b('0x2e')][_0xac7b('0x4b')]({'where':{'id':_0x5dfd25[_0xac7b('0x49')]['id']}})[_0xac7b('0x25')](function(_0x2cc392){return db[_0xac7b('0x76')][_0xac7b('0x69')](function(_0x6687){return _0x2cc392[_0xac7b('0x6e')](_0x5dfd25[_0xac7b('0x32')][_0xac7b('0x7e')],{'transaction':_0x6687})[_0xac7b('0x25')](function(){if(!_[_0xac7b('0x7f')](_0x56a494)){return _0x2cc392[_0xac7b('0x80')](_0x56a494,{'transaction':_0x6687});}})[_0xac7b('0x25')](function(){_0x56a494[_0xac7b('0x6b')](function(_0x1c19b7){socket[_0xac7b('0x6c')]('userSmsQueue:remove',{'UserId':_0x1c19b7,'SmsQueueId':_0x2cc392['id']});});});});});});})[_0xac7b('0x25')](respondWithStatusCode(_0x15a078,null))[_0xac7b('0x47')](handleError(_0x15a078,null));};exports[_0xac7b('0x81')]=function(_0x58451d,_0x4ae7e4,_0x4d9447){return db[_0xac7b('0x2e')][_0xac7b('0x4b')]({'where':{'id':_0x58451d['params']['id']}})['then'](handleEntityNotFound(_0x4ae7e4,null))[_0xac7b('0x25')](function(_0x3b3286){if(_0x3b3286){return _0x3b3286[_0xac7b('0x81')](_0x58451d[_0xac7b('0x52')]['ids'],_[_0xac7b('0x82')](_0x58451d[_0xac7b('0x52')],[_0xac7b('0x7e'),'id'])||{})[_0xac7b('0x83')](function(_0x48f41e){for(var _0x54348f=0x0;_0x54348f<_0x58451d[_0xac7b('0x52')][_0xac7b('0x7e')][_0xac7b('0x37')];_0x54348f+=0x1){socket[_0xac7b('0x6c')]('userSmsQueue:save',{'UserId':_0x58451d['body'][_0xac7b('0x7e')][_0x54348f],'SmsQueueId':_0x58451d['params']['id']});}return _0x48f41e;});}})[_0xac7b('0x25')](respondWithResult(_0x4ae7e4,null))[_0xac7b('0x47')](handleError(_0x4ae7e4,null));};exports['removeAgents']=function(_0x4c5f2c,_0x4af427,_0x12882b){return db['SmsQueue']['find']({'where':{'id':_0x4c5f2c[_0xac7b('0x49')]['id']}})['then'](handleEntityNotFound(_0x4af427,null))[_0xac7b('0x25')](function(_0x4c4f1d){if(_0x4c4f1d){return _0x4c4f1d['removeAgents'](_0x4c5f2c[_0xac7b('0x32')][_0xac7b('0x7e')])[_0xac7b('0x25')](function(){if(_['isArray'](_0x4c5f2c[_0xac7b('0x32')][_0xac7b('0x7e')])){for(var _0x2e04bf=0x0;_0x2e04bf<_0x4c5f2c['query'][_0xac7b('0x7e')][_0xac7b('0x37')];_0x2e04bf+=0x1){socket['emit'](_0xac7b('0x84'),{'UserId':Number(_0x4c5f2c['query']['ids'][_0x2e04bf]),'SmsQueueId':Number(_0x4c5f2c[_0xac7b('0x49')]['id'])});}}else{socket['emit'](_0xac7b('0x84'),{'UserId':Number(_0x4c5f2c[_0xac7b('0x32')][_0xac7b('0x7e')]),'SmsQueueId':Number(_0x4c5f2c[_0xac7b('0x49')]['id'])});}});}})[_0xac7b('0x25')](respondWithStatusCode(_0x4af427,null))['catch'](handleError(_0x4af427,null));};exports['getAgents']=function(_0x24ceab,_0x1e2a11,_0x45c503){var _0x4bc085={};var _0x5bb491={};var _0x5ad153;var _0x1a525a;return db[_0xac7b('0x2e')][_0xac7b('0x55')]({'where':{'id':_0x24ceab['params']['id']}})[_0xac7b('0x25')](handleEntityNotFound(_0x1e2a11,null))[_0xac7b('0x25')](function(_0x395562){if(_0x395562){_0x5ad153=_0x395562;_0x5bb491[_0xac7b('0x30')]=_[_0xac7b('0x31')](db[_0xac7b('0x58')][_0xac7b('0x2f')]);_0x5bb491[_0xac7b('0x32')]=_[_0xac7b('0x31')](_0x24ceab[_0xac7b('0x32')]);_0x5bb491[_0xac7b('0x33')]=_[_0xac7b('0x34')](_0x5bb491[_0xac7b('0x30')],_0x5bb491['query']);_0x4bc085['attributes']=_['intersection'](_0x5bb491[_0xac7b('0x30')],qs[_0xac7b('0x35')](_0x24ceab['query'][_0xac7b('0x35')]));_0x4bc085[_0xac7b('0x36')]=_0x4bc085['attributes'][_0xac7b('0x37')]?_0x4bc085[_0xac7b('0x36')]:_0x5bb491[_0xac7b('0x30')];_0x4bc085['order']=qs[_0xac7b('0x3b')](_0x24ceab[_0xac7b('0x32')][_0xac7b('0x3b')]);_0x4bc085['where']=qs[_0xac7b('0x33')](_['pick'](_0x24ceab[_0xac7b('0x32')],_0x5bb491['filters']));if(_0x24ceab[_0xac7b('0x32')][_0xac7b('0x3e')]){_0x4bc085[_0xac7b('0x3c')]=_['merge'](_0x4bc085[_0xac7b('0x3c')],{'$or':_[_0xac7b('0x57')](_0x4bc085[_0xac7b('0x36')],function(_0x338704){var _0x67306d={};_0x67306d[_0x338704]={'$like':'%'+_0x24ceab[_0xac7b('0x32')][_0xac7b('0x3e')]+'%'};return _0x67306d;})});}_0x4bc085=_[_0xac7b('0x43')]({},_0x4bc085,_0x24ceab[_0xac7b('0x85')]);return _0x5ad153[_0xac7b('0x86')](_0x4bc085);}})[_0xac7b('0x25')](function(_0x507b7d){if(_0x507b7d){_0x1a525a=_0x507b7d[_0xac7b('0x37')];if(!_0x24ceab['query'][_0xac7b('0x38')](_0xac7b('0x39'))){_0x4bc085['limit']=qs[_0xac7b('0x1e')](_0x24ceab['query'][_0xac7b('0x1e')]);_0x4bc085['offset']=qs['offset'](_0x24ceab[_0xac7b('0x32')][_0xac7b('0x1d')]);}return _0x5ad153['getAgents'](_0x4bc085);}})[_0xac7b('0x25')](function(_0x366c78){if(_0x366c78){return _0x366c78?{'count':_0x1a525a,'rows':_0x366c78}:null;}})[_0xac7b('0x25')](respondWithResult(_0x1e2a11,null))[_0xac7b('0x47')](handleError(_0x1e2a11,null));};
\ No newline at end of file
+var _0xb140=['union','removeAgents','userSmsQueue:remove','addAgents','spread','userSmsQueue:save','getAgents','html-pdf','eml-format','rimraf','zip-dir','bluebird','mustache','util','sox','to-csv','lodash','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','redis','localhost','sendStatus','end','status','count','offset','limit','set','Content-Range','json','reject','save','update','destroy','then','get','UserProfileResource','name','index','SmsQueue','rawAttributes','model','query','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','where','filters','pick','filter','type','key','field','merge','options','includeAll','include','findAll','show','keys','find','catch','create','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','SmsQueues','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','params','describe','getMembers','UserSmsQueue','sort','map','User','UserId','agent','smsPause','updatedAt','rows','%s/%s','createdAt','getTeams','findOne','Team','addTeams','teams','Agents','voicePause','interface','flatMap','transaction','findOrCreate','emit','removeTeams','ids','select','tq.TeamId','from','team_has_sms_queues','join','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','SmsQueueId\x20=\x20?','clone','ut.UserId\x20=\x20?','sequelize','toString','QueryTypes','every','TeamId','includes','all'];(function(_0x258e85,_0x4b77e5){var _0x5dc74a=function(_0x213ede){while(--_0x213ede){_0x258e85['push'](_0x258e85['shift']());}};_0x5dc74a(++_0x4b77e5);}(_0xb140,0x187));var _0x0b14=function(_0x42f3a5,_0x3a4470){_0x42f3a5=_0x42f3a5-0x0;var _0x1a7d74=_0xb140[_0x42f3a5];return _0x1a7d74;};'use strict';var pdf=require(_0x0b14('0x0'));var emlformat=require(_0x0b14('0x1'));var rimraf=require(_0x0b14('0x2'));var zipdir=require(_0x0b14('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x0b14('0x4'));var Mustache=require(_0x0b14('0x5'));var util=require(_0x0b14('0x6'));var path=require('path');var sox=require(_0x0b14('0x7'));var csv=require(_0x0b14('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x0b14('0x9'));var squel=require('squel');var crypto=require(_0x0b14('0xa'));var jsforce=require(_0x0b14('0xb'));var deskjs=require(_0x0b14('0xc'));var toCsv=require(_0x0b14('0x8'));var querystring=require(_0x0b14('0xd'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x0b14('0xe'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x0b14('0xf'))(_0x0b14('0x10'));var utils=require(_0x0b14('0x11'));var config=require(_0x0b14('0x12'));var db=require('../../mysqldb')['db'];config[_0x0b14('0x13')]=_['defaults'](config[_0x0b14('0x13')],{'host':_0x0b14('0x14'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x0b14('0x13')]));require('./smsQueue.socket')['register'](socket);function respondWithStatusCode(_0x1d2a65,_0x5789df){_0x5789df=_0x5789df||0xcc;return function(_0x48933c){if(_0x48933c){return _0x1d2a65[_0x0b14('0x15')](_0x5789df);}return _0x1d2a65['status'](_0x5789df)[_0x0b14('0x16')]();};}function respondWithResult(_0x4ae249,_0x29f814){_0x29f814=_0x29f814||0xc8;return function(_0x34f1f9){if(_0x34f1f9){return _0x4ae249[_0x0b14('0x17')](_0x29f814)['json'](_0x34f1f9);}};}function respondWithFilteredResult(_0x4285a3,_0x104fc6){return function(_0x49aa88){if(_0x49aa88){var _0x5a4f64=_0x49aa88[_0x0b14('0x18')],_0x1004db=_0x104fc6['offset'],_0x2efd87=_0x104fc6[_0x0b14('0x19')]+_0x104fc6[_0x0b14('0x1a')],_0x1205ea;if(_0x2efd87>=_0x5a4f64){_0x2efd87=_0x5a4f64;_0x1205ea=0xc8;}else{_0x1205ea=0xce;}_0x4285a3['status'](_0x1205ea);return _0x4285a3[_0x0b14('0x1b')](_0x0b14('0x1c'),_0x1004db+'-'+_0x2efd87+'/'+_0x5a4f64)[_0x0b14('0x1d')](_0x49aa88);}return null;};}function patchUpdates(_0x2efc05){return function(_0xfb7c3b){try{jsonpatch['apply'](_0xfb7c3b,_0x2efc05,!![]);}catch(_0x5764b2){return BPromise[_0x0b14('0x1e')](_0x5764b2);}return _0xfb7c3b[_0x0b14('0x1f')]();};}function saveUpdates(_0xdf0c04,_0x428823){return function(_0xaaad06){if(_0xaaad06){return _0xaaad06[_0x0b14('0x20')](_0xdf0c04)['then'](function(_0x5baf18){return _0x5baf18;});}return null;};}function removeEntity(_0x1ab4fc,_0xf98d13){return function(_0x5dc67b){if(_0x5dc67b){return _0x5dc67b[_0x0b14('0x21')]()[_0x0b14('0x22')](function(){var _0x26a737=_0x5dc67b[_0x0b14('0x23')]({'plain':!![]});var _0x37485b='SmsQueues';return db[_0x0b14('0x24')][_0x0b14('0x21')]({'where':{'type':_0x37485b,'resourceId':_0x26a737['id']}})[_0x0b14('0x22')](function(){return _0x5dc67b;});})[_0x0b14('0x22')](function(){_0x1ab4fc['status'](0xcc)[_0x0b14('0x16')]();});}};}function handleEntityNotFound(_0x224977,_0x23c18d){return function(_0x4f601d){if(!_0x4f601d){_0x224977[_0x0b14('0x15')](0x194);}return _0x4f601d;};}function handleError(_0xdce501,_0x5c3e3e){_0x5c3e3e=_0x5c3e3e||0x1f4;return function(_0x20b3a8){logger['error'](_0x20b3a8['stack']);if(_0x20b3a8[_0x0b14('0x25')]){delete _0x20b3a8[_0x0b14('0x25')];}_0xdce501['status'](_0x5c3e3e)['send'](_0x20b3a8);};}exports[_0x0b14('0x26')]=function(_0x2564cd,_0x55e01d){var _0x194745={},_0x495e5c={},_0x29839c={'count':0x0,'rows':[]};var _0x3104cd=db[_0x0b14('0x27')][_0x0b14('0x28')];_0x495e5c[_0x0b14('0x29')]=_['keys'](_0x3104cd);_0x495e5c[_0x0b14('0x2a')]=_['keys'](_0x2564cd[_0x0b14('0x2a')]);_0x495e5c['filters']=_['intersection'](_0x495e5c[_0x0b14('0x29')],_0x495e5c['query']);_0x194745[_0x0b14('0x2b')]=_[_0x0b14('0x2c')](_0x495e5c[_0x0b14('0x29')],qs[_0x0b14('0x2d')](_0x2564cd['query'][_0x0b14('0x2d')]));_0x194745['attributes']=_0x194745['attributes'][_0x0b14('0x2e')]?_0x194745[_0x0b14('0x2b')]:_0x495e5c[_0x0b14('0x29')];if(!_0x2564cd['query'][_0x0b14('0x2f')](_0x0b14('0x30'))){_0x194745[_0x0b14('0x1a')]=qs[_0x0b14('0x1a')](_0x2564cd[_0x0b14('0x2a')][_0x0b14('0x1a')]);_0x194745[_0x0b14('0x19')]=qs[_0x0b14('0x19')](_0x2564cd[_0x0b14('0x2a')][_0x0b14('0x19')]);}_0x194745[_0x0b14('0x31')]=qs['sort'](_0x2564cd['query']['sort']);_0x194745[_0x0b14('0x32')]=qs[_0x0b14('0x33')](_[_0x0b14('0x34')](_0x2564cd[_0x0b14('0x2a')],_0x495e5c[_0x0b14('0x33')]));if(_0x2564cd[_0x0b14('0x2a')][_0x0b14('0x35')]){_0x194745[_0x0b14('0x32')]=_['merge'](_0x194745['where'],{'$or':_['map'](_0x3104cd,function(_0x436c45){if(_0x436c45[_0x0b14('0x36')][_0x0b14('0x37')]!=='VIRTUAL'){var _0x2501a9={};_0x2501a9[_0x436c45[_0x0b14('0x38')]]={'$like':'%'+_0x2564cd[_0x0b14('0x2a')][_0x0b14('0x35')]+'%'};return _0x2501a9;}})});}_0x194745=_[_0x0b14('0x39')]({},_0x194745,_0x2564cd[_0x0b14('0x3a')]);var _0x2e14de={'where':_0x194745[_0x0b14('0x32')]};return db[_0x0b14('0x27')]['count'](_0x2e14de)[_0x0b14('0x22')](function(_0x17192e){_0x29839c['count']=_0x17192e;if(_0x2564cd[_0x0b14('0x2a')][_0x0b14('0x3b')]){_0x194745[_0x0b14('0x3c')]=[{'all':!![]}];}return db[_0x0b14('0x27')][_0x0b14('0x3d')](_0x194745);})[_0x0b14('0x22')](function(_0x3330da){_0x29839c['rows']=_0x3330da;return _0x29839c;})[_0x0b14('0x22')](respondWithFilteredResult(_0x55e01d,_0x194745))['catch'](handleError(_0x55e01d,null));};exports[_0x0b14('0x3e')]=function(_0x3ca9aa,_0x1b5846){var _0x3edfeb={'raw':!![],'where':{'id':_0x3ca9aa['params']['id']}},_0x9d2612={};_0x9d2612[_0x0b14('0x29')]=_[_0x0b14('0x3f')](db[_0x0b14('0x27')][_0x0b14('0x28')]);_0x9d2612['query']=_[_0x0b14('0x3f')](_0x3ca9aa[_0x0b14('0x2a')]);_0x9d2612['filters']=_[_0x0b14('0x2c')](_0x9d2612[_0x0b14('0x29')],_0x9d2612[_0x0b14('0x2a')]);_0x3edfeb[_0x0b14('0x2b')]=_[_0x0b14('0x2c')](_0x9d2612['model'],qs[_0x0b14('0x2d')](_0x3ca9aa[_0x0b14('0x2a')][_0x0b14('0x2d')]));_0x3edfeb[_0x0b14('0x2b')]=_0x3edfeb['attributes'][_0x0b14('0x2e')]?_0x3edfeb[_0x0b14('0x2b')]:_0x9d2612[_0x0b14('0x29')];if(_0x3ca9aa[_0x0b14('0x2a')][_0x0b14('0x3b')]){_0x3edfeb[_0x0b14('0x3c')]=[{'all':!![]}];}_0x3edfeb=_[_0x0b14('0x39')]({},_0x3edfeb,_0x3ca9aa[_0x0b14('0x3a')]);return db[_0x0b14('0x27')][_0x0b14('0x40')](_0x3edfeb)['then'](handleEntityNotFound(_0x1b5846,null))['then'](respondWithResult(_0x1b5846,null))[_0x0b14('0x41')](handleError(_0x1b5846,null));};exports[_0x0b14('0x42')]=function(_0x306e00,_0x5450f6){return db['SmsQueue']['create'](_0x306e00['body'],{})[_0x0b14('0x22')](function(_0x5750a4){var _0x12bc1e=_0x306e00['user'][_0x0b14('0x23')]({'plain':!![]});if(!_0x12bc1e)throw new Error(_0x0b14('0x43'));if(_0x12bc1e[_0x0b14('0x44')]===_0x0b14('0x45')){var _0x41c69b=_0x5750a4[_0x0b14('0x23')]({'plain':!![]});var _0xae0d9c=_0x0b14('0x46');return db[_0x0b14('0x47')][_0x0b14('0x40')]({'where':{'name':_0xae0d9c,'userProfileId':_0x12bc1e[_0x0b14('0x48')]},'raw':!![]})[_0x0b14('0x22')](function(_0x25f585){if(_0x25f585&&_0x25f585[_0x0b14('0x49')]===0x0){return db[_0x0b14('0x24')][_0x0b14('0x42')]({'name':_0x41c69b[_0x0b14('0x25')],'resourceId':_0x41c69b['id'],'type':_0x25f585['name'],'sectionId':_0x25f585['id']},{})['then'](function(){return _0x5750a4;});}else{return _0x5750a4;}})['catch'](function(_0x564227){logger['error'](_0x0b14('0x4a'),_0x564227);throw _0x564227;});}return _0x5750a4;})['then'](respondWithResult(_0x5450f6,0xc9))[_0x0b14('0x41')](handleError(_0x5450f6,null));};exports[_0x0b14('0x20')]=function(_0x44ed10,_0x40a1df){if(_0x44ed10[_0x0b14('0x4b')]['id']){delete _0x44ed10[_0x0b14('0x4b')]['id'];}return db[_0x0b14('0x27')]['find']({'where':{'id':_0x44ed10[_0x0b14('0x4c')]['id']}})[_0x0b14('0x22')](handleEntityNotFound(_0x40a1df,null))['then'](saveUpdates(_0x44ed10[_0x0b14('0x4b')],null))[_0x0b14('0x22')](respondWithResult(_0x40a1df,null))[_0x0b14('0x41')](handleError(_0x40a1df,null));};exports[_0x0b14('0x21')]=function(_0x4caae9,_0x493929){return db['SmsQueue'][_0x0b14('0x40')]({'where':{'id':_0x4caae9[_0x0b14('0x4c')]['id']}})[_0x0b14('0x22')](handleEntityNotFound(_0x493929,null))[_0x0b14('0x22')](removeEntity(_0x493929,null))[_0x0b14('0x41')](handleError(_0x493929,null));};exports[_0x0b14('0x4d')]=function(_0x34742a,_0x46b173){return db[_0x0b14('0x27')][_0x0b14('0x4d')]()[_0x0b14('0x22')](respondWithResult(_0x46b173,null))[_0x0b14('0x41')](handleError(_0x46b173,null));};exports[_0x0b14('0x4e')]=function(_0xf623ee,_0x4d61c5,_0x205dd0){var _0x6319c8={'raw':!![],'where':{}},_0x5bf8d8={},_0x39d465;return db['SmsQueue']['findOne']({'where':{'id':_0xf623ee['params']['id']}})[_0x0b14('0x22')](handleEntityNotFound(_0x4d61c5,null))[_0x0b14('0x22')](function(_0x24d48f){if(_0x24d48f){_0x39d465=_0x24d48f[_0x0b14('0x23')]({'plain':!![]});_0x5bf8d8[_0x0b14('0x29')]=_['keys'](db[_0x0b14('0x4f')][_0x0b14('0x28')]);_0x5bf8d8[_0x0b14('0x2a')]=_[_0x0b14('0x3f')](_0xf623ee[_0x0b14('0x2a')]);_0x5bf8d8['filters']=_[_0x0b14('0x2c')](_0x5bf8d8[_0x0b14('0x29')],_0x5bf8d8[_0x0b14('0x2a')]);_0x6319c8[_0x0b14('0x2b')]=_[_0x0b14('0x2c')](_0x5bf8d8['model'],qs['fields'](_0xf623ee['query'][_0x0b14('0x2d')]));_0x6319c8['attributes']=_0x6319c8[_0x0b14('0x2b')]['length']?_0x6319c8[_0x0b14('0x2b')]:_0x5bf8d8[_0x0b14('0x29')];if(!_0xf623ee[_0x0b14('0x2a')][_0x0b14('0x2f')](_0x0b14('0x30'))){_0x6319c8[_0x0b14('0x1a')]=qs[_0x0b14('0x1a')](_0xf623ee[_0x0b14('0x2a')][_0x0b14('0x1a')]);_0x6319c8[_0x0b14('0x19')]=qs[_0x0b14('0x19')](_0xf623ee[_0x0b14('0x2a')]['offset']);}_0x6319c8[_0x0b14('0x31')]=qs['sort'](_0xf623ee[_0x0b14('0x2a')][_0x0b14('0x50')]);_0x6319c8['where']=qs[_0x0b14('0x33')](_[_0x0b14('0x34')](_0xf623ee[_0x0b14('0x2a')],_0x5bf8d8[_0x0b14('0x33')]));_0x6319c8[_0x0b14('0x32')]['SmsQueueId']=_0x24d48f['id'];if(_0xf623ee[_0x0b14('0x2a')][_0x0b14('0x35')]){_0x6319c8[_0x0b14('0x32')]=_[_0x0b14('0x39')](_0x6319c8['where'],{'$or':_[_0x0b14('0x51')](_0x6319c8[_0x0b14('0x2b')],function(_0x4eff6a){var _0x129fb2={};_0x129fb2[_0x4eff6a]={'$like':'%'+_0xf623ee['query'][_0x0b14('0x35')]+'%'};return _0x129fb2;})});}_0x6319c8=_[_0x0b14('0x39')]({},_0x6319c8,_0xf623ee['options']);return db[_0x0b14('0x4f')]['findAll'](_0x6319c8);}})[_0x0b14('0x22')](function(_0x1b12d6){if(_0x1b12d6){return db[_0x0b14('0x52')]['findAndCountAll']({'where':{'id':_[_0x0b14('0x51')](_0x1b12d6,_0x0b14('0x53')),'role':_0x0b14('0x54')},'attributes':['id',_0x0b14('0x25'),_0x0b14('0x55'),_0x0b14('0x56'),'createdAt']});}})['then'](function(_0x1be23c){if(_0x1be23c){return{'count':_0x1be23c['count'],'rows':_[_0x0b14('0x51')](_0x1be23c[_0x0b14('0x57')],function(_0x151cf2){return{'membername':_0x151cf2[_0x0b14('0x25')],'UserId':_0x151cf2['id'],'queue_name':_0x39d465['name'],'SmsQueueId':_0x39d465['id'],'interface':util['format'](_0x0b14('0x58'),'SIP',_0x151cf2[_0x0b14('0x25')]),'penalty':0x0,'paused':_0x151cf2[_0x0b14('0x55')],'createdAt':_0x151cf2[_0x0b14('0x59')],'updatedAt':_0x151cf2[_0x0b14('0x56')]};})};}else{return{'count':0x0,'rows':[]};}})[_0x0b14('0x22')](respondWithFilteredResult(_0x4d61c5,_0x6319c8))[_0x0b14('0x41')](handleError(_0x4d61c5,null));};exports[_0x0b14('0x5a')]=function(_0x6c784d,_0x59d165,_0x21e025){var _0x43a307={};var _0x40d662={};var _0x9532b3;var _0x2e7477;return db[_0x0b14('0x27')][_0x0b14('0x5b')]({'where':{'id':_0x6c784d['params']['id']}})[_0x0b14('0x22')](handleEntityNotFound(_0x59d165,null))[_0x0b14('0x22')](function(_0x1bc70c){if(_0x1bc70c){_0x9532b3=_0x1bc70c;_0x40d662[_0x0b14('0x29')]=_[_0x0b14('0x3f')](db[_0x0b14('0x5c')][_0x0b14('0x28')]);_0x40d662['query']=_[_0x0b14('0x3f')](_0x6c784d[_0x0b14('0x2a')]);_0x40d662[_0x0b14('0x33')]=_[_0x0b14('0x2c')](_0x40d662[_0x0b14('0x29')],_0x40d662[_0x0b14('0x2a')]);_0x43a307['attributes']=_[_0x0b14('0x2c')](_0x40d662[_0x0b14('0x29')],qs[_0x0b14('0x2d')](_0x6c784d[_0x0b14('0x2a')]['fields']));_0x43a307[_0x0b14('0x2b')]=_0x43a307[_0x0b14('0x2b')]['length']?_0x43a307[_0x0b14('0x2b')]:_0x40d662[_0x0b14('0x29')];_0x43a307[_0x0b14('0x31')]=qs['sort'](_0x6c784d[_0x0b14('0x2a')][_0x0b14('0x50')]);_0x43a307['where']=qs[_0x0b14('0x33')](_['pick'](_0x6c784d[_0x0b14('0x2a')],_0x40d662[_0x0b14('0x33')]));if(_0x6c784d[_0x0b14('0x2a')]['filter']){_0x43a307['where']=_[_0x0b14('0x39')](_0x43a307[_0x0b14('0x32')],{'$or':_[_0x0b14('0x51')](_0x43a307[_0x0b14('0x2b')],function(_0x2490a4){var _0xcea155={};_0xcea155[_0x2490a4]={'$like':'%'+_0x6c784d['query'][_0x0b14('0x35')]+'%'};return _0xcea155;})});}_0x43a307=_[_0x0b14('0x39')]({},_0x43a307,_0x6c784d['options']);return _0x9532b3[_0x0b14('0x5a')](_0x43a307);}})[_0x0b14('0x22')](function(_0xa69f4d){if(_0xa69f4d){_0x2e7477=_0xa69f4d[_0x0b14('0x2e')];if(!_0x6c784d[_0x0b14('0x2a')]['hasOwnProperty']('nolimit')){_0x43a307[_0x0b14('0x1a')]=qs[_0x0b14('0x1a')](_0x6c784d[_0x0b14('0x2a')][_0x0b14('0x1a')]);_0x43a307[_0x0b14('0x19')]=qs['offset'](_0x6c784d[_0x0b14('0x2a')][_0x0b14('0x19')]);}return _0x9532b3[_0x0b14('0x5a')](_0x43a307);}})['then'](function(_0xc59489){if(_0xc59489){return _0xc59489?{'count':_0x2e7477,'rows':_0xc59489}:null;}})[_0x0b14('0x22')](respondWithResult(_0x59d165,null))[_0x0b14('0x41')](handleError(_0x59d165,null));};exports[_0x0b14('0x5d')]=function(_0x3d8060,_0x20287a,_0xd7365c){var _0xa8b013=_0x3d8060[_0x0b14('0x4b')][_0x0b14('0x5e')];return db[_0x0b14('0x5c')][_0x0b14('0x3d')]({'where':{'id':_[_0x0b14('0x51')](_0xa8b013,'id')},'attributes':['id'],'include':[{'model':db['User'],'as':_0x0b14('0x5f'),'attributes':['id','name','online',_0x0b14('0x60'),_0x0b14('0x61')],'raw':!![]}]})[_0x0b14('0x22')](function(_0x319c0a){if(_0x319c0a){var _0x488c69=_[_0x0b14('0x62')](_0x319c0a,function(_0x485688){var _0x4bab90=_0x485688[_0x0b14('0x23')]({'plain':!![]});return _0x4bab90[_0x0b14('0x5f')];});return db['SmsQueue'][_0x0b14('0x40')]({'where':{'id':_0x3d8060[_0x0b14('0x4c')]['id']}})[_0x0b14('0x22')](function(_0x3e36f2){return db['sequelize'][_0x0b14('0x63')](function(_0x25ce23){return _0x3e36f2[_0x0b14('0x5d')](_[_0x0b14('0x51')](_0xa8b013,'id'),{'transaction':_0x25ce23})[_0x0b14('0x22')](function(){return BPromise['each'](_0x488c69,function(_0x176799){return db[_0x0b14('0x4f')][_0x0b14('0x64')]({'where':{'UserId':_0x176799['id'],'SmsQueueId':_0x3d8060['params']['id']},'transaction':_0x25ce23});});})[_0x0b14('0x22')](function(){_0x488c69['forEach'](function(_0x1669af){socket[_0x0b14('0x65')]('userSmsQueue:save',{'UserId':_0x1669af['id'],'SmsQueueId':_0x3e36f2['id']});});});});});}})[_0x0b14('0x22')](respondWithStatusCode(_0x20287a,null))[_0x0b14('0x41')](handleError(_0x20287a,null));};exports[_0x0b14('0x66')]=function(_0x2128c9,_0x3eb63e,_0x3b9976){return db[_0x0b14('0x5c')][_0x0b14('0x3d')]({'where':{'id':_0x2128c9[_0x0b14('0x2a')][_0x0b14('0x67')]},'attributes':['id'],'include':[{'model':db[_0x0b14('0x52')],'as':_0x0b14('0x5f'),'attributes':['id'],'raw':!![]}]})['then'](handleEntityNotFound(_0x3eb63e,null))[_0x0b14('0x22')](function(_0x3acaa9){var _0x5588f7=_[_0x0b14('0x51')](_0x3acaa9,'id');var _0x5460e1=[];var _0x18ab40=[];var _0x3d4b93=squel[_0x0b14('0x68')]();_0x3d4b93[_0x0b14('0x38')](_0x0b14('0x69'))[_0x0b14('0x6a')](_0x0b14('0x6b'),'tq')[_0x0b14('0x6c')](_0x0b14('0x6d'),'ut',_0x0b14('0x6e'))[_0x0b14('0x32')](_0x0b14('0x6f'),_0x2128c9['params']['id']);for(var _0x3cbb93=0x0;_0x3cbb93<_0x3acaa9[_0x0b14('0x2e')];_0x3cbb93+=0x1){let _0x3fdcce=_0x3acaa9[_0x3cbb93];for(var _0x152d88=0x0;_0x152d88<_0x3fdcce[_0x0b14('0x5f')][_0x0b14('0x2e')];_0x152d88+=0x1){let _0x418bcb=_0x3fdcce[_0x0b14('0x5f')][_0x152d88];var _0x413963=_0x3d4b93[_0x0b14('0x70')]();_0x413963[_0x0b14('0x32')](_0x0b14('0x71'),_0x418bcb['id']);_0x18ab40['push'](db[_0x0b14('0x72')]['query'](_0x413963[_0x0b14('0x73')](),{'type':db[_0x0b14('0x72')][_0x0b14('0x74')]['SELECT']})['then'](function(_0x2efdc0){if(_0x2efdc0[_0x0b14('0x2e')]===0x1){return _0x418bcb['id'];}else{var _0xefbaa6=_[_0x0b14('0x75')](_[_0x0b14('0x51')](_0x2efdc0,_0x0b14('0x76')),function(_0x431d26){return _[_0x0b14('0x77')](_0x5588f7,_0x431d26);});if(_0xefbaa6){return _0x418bcb['id'];}}}));}}return BPromise[_0x0b14('0x78')](_0x18ab40)[_0x0b14('0x22')](function(_0x595d20){_0x5460e1=_(_0x5460e1)[_0x0b14('0x79')](_0x595d20)['compact']()['value']();return db[_0x0b14('0x27')]['find']({'where':{'id':_0x2128c9[_0x0b14('0x4c')]['id']}})['then'](function(_0x41d062){return db[_0x0b14('0x72')][_0x0b14('0x63')](function(_0x28289c){return _0x41d062['removeTeams'](_0x2128c9[_0x0b14('0x2a')][_0x0b14('0x67')],{'transaction':_0x28289c})['then'](function(){if(!_['isEmpty'](_0x5460e1)){return _0x41d062[_0x0b14('0x7a')](_0x5460e1,{'transaction':_0x28289c});}})[_0x0b14('0x22')](function(){_0x5460e1['forEach'](function(_0x5601ca){socket['emit'](_0x0b14('0x7b'),{'UserId':_0x5601ca,'SmsQueueId':_0x41d062['id']});});});});});});})[_0x0b14('0x22')](respondWithStatusCode(_0x3eb63e,null))[_0x0b14('0x41')](handleError(_0x3eb63e,null));};exports['addAgents']=function(_0x530163,_0x409a39,_0x51671d){return db[_0x0b14('0x27')][_0x0b14('0x40')]({'where':{'id':_0x530163[_0x0b14('0x4c')]['id']}})[_0x0b14('0x22')](handleEntityNotFound(_0x409a39,null))[_0x0b14('0x22')](function(_0x5c5182){if(_0x5c5182){return _0x5c5182[_0x0b14('0x7c')](_0x530163[_0x0b14('0x4b')][_0x0b14('0x67')],_['omit'](_0x530163[_0x0b14('0x4b')],[_0x0b14('0x67'),'id'])||{})[_0x0b14('0x7d')](function(_0x4ff5fc){for(var _0x16b8e6=0x0;_0x16b8e6<_0x530163[_0x0b14('0x4b')][_0x0b14('0x67')][_0x0b14('0x2e')];_0x16b8e6+=0x1){socket[_0x0b14('0x65')](_0x0b14('0x7e'),{'UserId':_0x530163[_0x0b14('0x4b')][_0x0b14('0x67')][_0x16b8e6],'SmsQueueId':_0x530163[_0x0b14('0x4c')]['id']});}return _0x4ff5fc;});}})[_0x0b14('0x22')](respondWithResult(_0x409a39,null))[_0x0b14('0x41')](handleError(_0x409a39,null));};exports['removeAgents']=function(_0x8045d4,_0x4a98a7,_0x4be9f2){return db['SmsQueue'][_0x0b14('0x40')]({'where':{'id':_0x8045d4[_0x0b14('0x4c')]['id']}})[_0x0b14('0x22')](handleEntityNotFound(_0x4a98a7,null))[_0x0b14('0x22')](function(_0x8d50df){if(_0x8d50df){return _0x8d50df[_0x0b14('0x7a')](_0x8045d4[_0x0b14('0x2a')][_0x0b14('0x67')])[_0x0b14('0x22')](function(){if(_['isArray'](_0x8045d4[_0x0b14('0x2a')][_0x0b14('0x67')])){for(var _0x4e1a17=0x0;_0x4e1a17<_0x8045d4[_0x0b14('0x2a')]['ids']['length'];_0x4e1a17+=0x1){socket[_0x0b14('0x65')]('userSmsQueue:remove',{'UserId':Number(_0x8045d4[_0x0b14('0x2a')]['ids'][_0x4e1a17]),'SmsQueueId':Number(_0x8045d4[_0x0b14('0x4c')]['id'])});}}else{socket['emit']('userSmsQueue:remove',{'UserId':Number(_0x8045d4[_0x0b14('0x2a')]['ids']),'SmsQueueId':Number(_0x8045d4['params']['id'])});}});}})[_0x0b14('0x22')](respondWithStatusCode(_0x4a98a7,null))[_0x0b14('0x41')](handleError(_0x4a98a7,null));};exports['getAgents']=function(_0x4f4154,_0x4982f7,_0x2c78ca){var _0x2014c3={};var _0x2186f6={};var _0x1abd58;var _0x1c2709;return db[_0x0b14('0x27')][_0x0b14('0x5b')]({'where':{'id':_0x4f4154[_0x0b14('0x4c')]['id']}})[_0x0b14('0x22')](handleEntityNotFound(_0x4982f7,null))['then'](function(_0x14836e){if(_0x14836e){_0x1abd58=_0x14836e;_0x2186f6['model']=_[_0x0b14('0x3f')](db['User'][_0x0b14('0x28')]);_0x2186f6[_0x0b14('0x2a')]=_['keys'](_0x4f4154[_0x0b14('0x2a')]);_0x2186f6[_0x0b14('0x33')]=_['intersection'](_0x2186f6[_0x0b14('0x29')],_0x2186f6['query']);_0x2014c3[_0x0b14('0x2b')]=_['intersection'](_0x2186f6[_0x0b14('0x29')],qs[_0x0b14('0x2d')](_0x4f4154[_0x0b14('0x2a')][_0x0b14('0x2d')]));_0x2014c3['attributes']=_0x2014c3[_0x0b14('0x2b')][_0x0b14('0x2e')]?_0x2014c3[_0x0b14('0x2b')]:_0x2186f6['model'];_0x2014c3[_0x0b14('0x31')]=qs[_0x0b14('0x50')](_0x4f4154[_0x0b14('0x2a')]['sort']);_0x2014c3[_0x0b14('0x32')]=qs[_0x0b14('0x33')](_[_0x0b14('0x34')](_0x4f4154[_0x0b14('0x2a')],_0x2186f6['filters']));if(_0x4f4154[_0x0b14('0x2a')][_0x0b14('0x35')]){_0x2014c3[_0x0b14('0x32')]=_[_0x0b14('0x39')](_0x2014c3[_0x0b14('0x32')],{'$or':_[_0x0b14('0x51')](_0x2014c3[_0x0b14('0x2b')],function(_0x3d40c5){var _0x4b0f2c={};_0x4b0f2c[_0x3d40c5]={'$like':'%'+_0x4f4154['query'][_0x0b14('0x35')]+'%'};return _0x4b0f2c;})});}_0x2014c3=_[_0x0b14('0x39')]({},_0x2014c3,_0x4f4154[_0x0b14('0x3a')]);return _0x1abd58[_0x0b14('0x7f')](_0x2014c3);}})[_0x0b14('0x22')](function(_0x57d5ef){if(_0x57d5ef){_0x1c2709=_0x57d5ef[_0x0b14('0x2e')];if(!_0x4f4154[_0x0b14('0x2a')][_0x0b14('0x2f')]('nolimit')){_0x2014c3['limit']=qs['limit'](_0x4f4154[_0x0b14('0x2a')][_0x0b14('0x1a')]);_0x2014c3['offset']=qs[_0x0b14('0x19')](_0x4f4154[_0x0b14('0x2a')][_0x0b14('0x19')]);}return _0x1abd58[_0x0b14('0x7f')](_0x2014c3);}})['then'](function(_0x53beca){if(_0x53beca){return _0x53beca?{'count':_0x1c2709,'rows':_0x53beca}:null;}})['then'](respondWithResult(_0x4982f7,null))[_0x0b14('0x41')](handleError(_0x4982f7,null));};
\ No newline at end of file
index 2ad9e19..eefd972 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaec3=['hook','exports','events','../../mysqldb','SmsQueue','setMaxListeners','update','remove','emit','hasOwnProperty'];(function(_0x332be8,_0x45c577){var _0x2fc5fd=function(_0x18cdf2){while(--_0x18cdf2){_0x332be8['push'](_0x332be8['shift']());}};_0x2fc5fd(++_0x45c577);}(_0xaec3,0x7a));var _0x3aec=function(_0xb52ff,_0x4b77ee){_0xb52ff=_0xb52ff-0x0;var _0x36de52=_0xaec3[_0xb52ff];return _0x36de52;};'use strict';var EventEmitter=require(_0x3aec('0x0'));var SmsQueue=require(_0x3aec('0x1'))['db'][_0x3aec('0x2')];var SmsQueueEvents=new EventEmitter();SmsQueueEvents[_0x3aec('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x3aec('0x4'),'afterDestroy':_0x3aec('0x5')};function emitEvent(_0x166acb){return function(_0x27a520,_0xd478d5,_0x43d547){SmsQueueEvents[_0x3aec('0x6')](_0x166acb+':'+_0x27a520['id'],_0x27a520);SmsQueueEvents[_0x3aec('0x6')](_0x166acb,_0x27a520);_0x43d547(null);};}for(var e in events){if(events[_0x3aec('0x7')](e)){var event=events[e];SmsQueue[_0x3aec('0x8')](e,emitEvent(event));}}module[_0x3aec('0x9')]=SmsQueueEvents;
\ No newline at end of file
+var _0x83ac=['save','update','remove','emit','hasOwnProperty','hook','events','SmsQueue','setMaxListeners'];(function(_0x25d777,_0x25902d){var _0x4e2005=function(_0x269eb1){while(--_0x269eb1){_0x25d777['push'](_0x25d777['shift']());}};_0x4e2005(++_0x25902d);}(_0x83ac,0x14a));var _0xc83a=function(_0x361e69,_0x53399e){_0x361e69=_0x361e69-0x0;var _0x1e50bd=_0x83ac[_0x361e69];return _0x1e50bd;};'use strict';var EventEmitter=require(_0xc83a('0x0'));var SmsQueue=require('../../mysqldb')['db'][_0xc83a('0x1')];var SmsQueueEvents=new EventEmitter();SmsQueueEvents[_0xc83a('0x2')](0x0);var events={'afterCreate':_0xc83a('0x3'),'afterUpdate':_0xc83a('0x4'),'afterDestroy':_0xc83a('0x5')};function emitEvent(_0x5aea38){return function(_0x2505ec,_0xac6730,_0x26bacf){SmsQueueEvents[_0xc83a('0x6')](_0x5aea38+':'+_0x2505ec['id'],_0x2505ec);SmsQueueEvents['emit'](_0x5aea38,_0x2505ec);_0x26bacf(null);};}for(var e in events){if(events[_0xc83a('0x7')](e)){var event=events[e];SmsQueue[_0xc83a('0x8')](e,emitEvent(event));}}module['exports']=SmsQueueEvents;
\ No newline at end of file
index 8a1e859..6d97ca9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6eed=['request-promise','path','./smsQueue.attributes','exports','define','lodash','util','../../config/logger','api','moment'];(function(_0x57350d,_0x44d9df){var _0x704b27=function(_0x2b03ac){while(--_0x2b03ac){_0x57350d['push'](_0x57350d['shift']());}};_0x704b27(++_0x44d9df);}(_0x6eed,0xff));var _0xd6ee=function(_0x240b84,_0x1990e6){_0x240b84=_0x240b84-0x0;var _0x502ab7=_0x6eed[_0x240b84];return _0x502ab7;};'use strict';var _=require(_0xd6ee('0x0'));var util=require(_0xd6ee('0x1'));var logger=require(_0xd6ee('0x2'))(_0xd6ee('0x3'));var moment=require(_0xd6ee('0x4'));var BPromise=require('bluebird');var rp=require(_0xd6ee('0x5'));var fs=require('fs');var path=require(_0xd6ee('0x6'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0xd6ee('0x7'));module[_0xd6ee('0x8')]=function(_0x1c4f36,_0x37abca){return _0x1c4f36[_0xd6ee('0x9')]('SmsQueue',attributes,{'tableName':'sms_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x31c2=['api','moment','bluebird','request-promise','path','./smsQueue.attributes','exports','SmsQueue','lodash','util','../../config/logger'];(function(_0x4c05da,_0x414720){var _0x1614db=function(_0xa19cf6){while(--_0xa19cf6){_0x4c05da['push'](_0x4c05da['shift']());}};_0x1614db(++_0x414720);}(_0x31c2,0x1e1));var _0x231c=function(_0x7943de,_0x5d9d60){_0x7943de=_0x7943de-0x0;var _0x11e4dc=_0x31c2[_0x7943de];return _0x11e4dc;};'use strict';var _=require(_0x231c('0x0'));var util=require(_0x231c('0x1'));var logger=require(_0x231c('0x2'))(_0x231c('0x3'));var moment=require(_0x231c('0x4'));var BPromise=require(_0x231c('0x5'));var rp=require(_0x231c('0x6'));var fs=require('fs');var path=require(_0x231c('0x7'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x231c('0x8'));module[_0x231c('0x9')]=function(_0x1f3f7d,_0x219c3f){return _0x1f3f7d['define'](_0x231c('0xa'),attributes,{'tableName':'sms_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2ca1312..94c9cc8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1175=['ShowSmsQueue','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','redis','localhost','socket.io-emitter','register','request','then','info','SmsQueue,\x20%s,\x20%s','request\x20sent','debug','SmsQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetSmsQueue','SmsQueue','findAll','options','raw','where','attributes','include','map','model'];(function(_0x505a5c,_0x5a8f6f){var _0x3d14fc=function(_0x32dc7e){while(--_0x32dc7e){_0x505a5c['push'](_0x505a5c['shift']());}};_0x3d14fc(++_0x5a8f6f);}(_0x1175,0x139));var _0x5117=function(_0x354160,_0xf0d4b9){_0x354160=_0x354160-0x0;var _0x31bd97=_0x1175[_0x354160];return _0x31bd97;};'use strict';var _=require('lodash');var util=require(_0x5117('0x0'));var moment=require(_0x5117('0x1'));var BPromise=require(_0x5117('0x2'));var rs=require(_0x5117('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x5117('0x4'))['db'];var utils=require(_0x5117('0x5'));var logger=require(_0x5117('0x6'))(_0x5117('0x7'));var config=require(_0x5117('0x8'));var jayson=require(_0x5117('0x9'));var client=jayson[_0x5117('0xa')]['http']({'port':0x232a});config[_0x5117('0xb')]=_['defaults'](config[_0x5117('0xb')],{'host':_0x5117('0xc'),'port':0x18eb});var socket=require(_0x5117('0xd'))(new Redis(config[_0x5117('0xb')]));require('./smsQueue.socket')[_0x5117('0xe')](socket);function respondWithRpcPromise(_0x38c55a,_0x154ae9,_0x5dd522){return new BPromise(function(_0x57f3a2,_0x3e41cc){return client[_0x5117('0xf')](_0x38c55a,_0x5dd522)[_0x5117('0x10')](function(_0x531481){logger[_0x5117('0x11')](_0x5117('0x12'),_0x154ae9,_0x5117('0x13'));logger[_0x5117('0x14')](_0x5117('0x15'),_0x154ae9,'request\x20sent',JSON[_0x5117('0x16')](_0x531481));if(_0x531481[_0x5117('0x17')]){if(_0x531481['error'][_0x5117('0x18')]===0x1f4){logger[_0x5117('0x17')](_0x5117('0x12'),_0x154ae9,_0x531481[_0x5117('0x17')]['message']);return _0x3e41cc(_0x531481[_0x5117('0x17')]['message']);}logger['error'](_0x5117('0x12'),_0x154ae9,_0x531481[_0x5117('0x17')][_0x5117('0x19')]);return _0x57f3a2(_0x531481[_0x5117('0x17')][_0x5117('0x19')]);}else{logger[_0x5117('0x11')]('SmsQueue,\x20%s,\x20%s',_0x154ae9,_0x5117('0x13'));_0x57f3a2(_0x531481[_0x5117('0x1a')]['message']);}})[_0x5117('0x1b')](function(_0x300852){logger[_0x5117('0x17')](_0x5117('0x12'),_0x154ae9,_0x300852);_0x3e41cc(_0x300852);});});}exports[_0x5117('0x1c')]=function(_0x3bd091){var _0x3b30db=this;return new Promise(function(_0x101516,_0x1e25ea){return db[_0x5117('0x1d')][_0x5117('0x1e')]({'raw':_0x3bd091[_0x5117('0x1f')]?_0x3bd091[_0x5117('0x1f')][_0x5117('0x20')]===undefined?!![]:![]:!![],'where':_0x3bd091['options']?_0x3bd091[_0x5117('0x1f')][_0x5117('0x21')]||null:null,'attributes':_0x3bd091['options']?_0x3bd091['options'][_0x5117('0x22')]||null:null,'limit':_0x3bd091['options']?_0x3bd091['options']['limit']||null:null,'include':_0x3bd091['options']?_0x3bd091[_0x5117('0x1f')][_0x5117('0x23')]?_[_0x5117('0x24')](_0x3bd091['options'][_0x5117('0x23')],function(_0x3d3997){return{'model':db[_0x3d3997[_0x5117('0x25')]],'as':_0x3d3997['as'],'attributes':_0x3d3997[_0x5117('0x22')],'include':_0x3d3997[_0x5117('0x23')]?_[_0x5117('0x24')](_0x3d3997[_0x5117('0x23')],function(_0x86fcb){return{'model':db[_0x86fcb['model']],'as':_0x86fcb['as'],'attributes':_0x86fcb[_0x5117('0x22')],'include':_0x86fcb[_0x5117('0x23')]?_['map'](_0x86fcb[_0x5117('0x23')],function(_0x47336b){return{'model':db[_0x47336b['model']],'as':_0x47336b['as'],'attributes':_0x47336b[_0x5117('0x22')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x3c6e9e){logger[_0x5117('0x11')]('GetSmsQueue',_0x3bd091);logger[_0x5117('0x14')]('GetSmsQueue',_0x3bd091,JSON[_0x5117('0x16')](_0x3c6e9e));_0x101516(_0x3c6e9e);})['catch'](function(_0x37fe99){logger[_0x5117('0x17')](_0x5117('0x1c'),_0x37fe99[_0x5117('0x19')],_0x3bd091);_0x1e25ea(_0x3b30db[_0x5117('0x17')](0x1f4,_0x37fe99[_0x5117('0x19')]));});});};exports[_0x5117('0x26')]=function(_0x542aa7){var _0x2d75fa=this;return new Promise(function(_0x52d487,_0x44b078){return db[_0x5117('0x1d')]['find']({'raw':_0x542aa7[_0x5117('0x1f')]?_0x542aa7[_0x5117('0x1f')][_0x5117('0x20')]===undefined?!![]:![]:!![],'where':_0x542aa7['options']?_0x542aa7['options'][_0x5117('0x21')]||null:null,'attributes':_0x542aa7[_0x5117('0x1f')]?_0x542aa7[_0x5117('0x1f')]['attributes']||null:null,'include':_0x542aa7[_0x5117('0x1f')]?_0x542aa7['options'][_0x5117('0x23')]?_[_0x5117('0x24')](_0x542aa7[_0x5117('0x1f')][_0x5117('0x23')],function(_0x49e667){return{'model':db[_0x49e667[_0x5117('0x25')]],'as':_0x49e667['as'],'attributes':_0x49e667[_0x5117('0x22')],'include':_0x49e667[_0x5117('0x23')]?_[_0x5117('0x24')](_0x49e667['include'],function(_0x18b9ca){return{'model':db[_0x18b9ca[_0x5117('0x25')]],'as':_0x18b9ca['as'],'attributes':_0x18b9ca[_0x5117('0x22')],'include':_0x18b9ca['include']?_[_0x5117('0x24')](_0x18b9ca[_0x5117('0x23')],function(_0x575b37){return{'model':db[_0x575b37['model']],'as':_0x575b37['as'],'attributes':_0x575b37[_0x5117('0x22')]};}):[]};}):[]};}):[]:[]})[_0x5117('0x10')](function(_0x2d8a11){logger[_0x5117('0x11')](_0x5117('0x26'),_0x542aa7);logger['debug'](_0x5117('0x26'),_0x542aa7,JSON[_0x5117('0x16')](_0x2d8a11));_0x52d487(_0x2d8a11);})['catch'](function(_0x1043b5){logger['error']('ShowSmsQueue',_0x1043b5[_0x5117('0x19')],_0x542aa7);_0x44b078(_0x2d75fa[_0x5117('0x17')](0x1f4,_0x1043b5['message']));});});};
\ No newline at end of file
+var _0x436b=['map','model','attributes','GetSmsQueue','ShowSmsQueue','find','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','redis','defaults','socket.io-emitter','./smsQueue.socket','register','request','then','request\x20sent','debug','SmsQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','SmsQueue,\x20%s,\x20%s','message','info','catch','SmsQueue','options','raw','where','limit','include'];(function(_0x50aa2e,_0xfbd6f0){var _0x5e07f0=function(_0x3ed540){while(--_0x3ed540){_0x50aa2e['push'](_0x50aa2e['shift']());}};_0x5e07f0(++_0xfbd6f0);}(_0x436b,0x9a));var _0xb436=function(_0x4ffa12,_0x5d6ba2){_0x4ffa12=_0x4ffa12-0x0;var _0x41a832=_0x436b[_0x4ffa12];return _0x41a832;};'use strict';var _=require('lodash');var util=require(_0xb436('0x0'));var moment=require(_0xb436('0x1'));var BPromise=require(_0xb436('0x2'));var rs=require(_0xb436('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xb436('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xb436('0x5'))(_0xb436('0x6'));var config=require(_0xb436('0x7'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});config[_0xb436('0x8')]=_[_0xb436('0x9')](config[_0xb436('0x8')],{'host':'localhost','port':0x18eb});var socket=require(_0xb436('0xa'))(new Redis(config['redis']));require(_0xb436('0xb'))[_0xb436('0xc')](socket);function respondWithRpcPromise(_0x2ef940,_0x392ef3,_0x24c3d3){return new BPromise(function(_0x57911e,_0x7081e3){return client[_0xb436('0xd')](_0x2ef940,_0x24c3d3)[_0xb436('0xe')](function(_0x1fbe10){logger['info']('SmsQueue,\x20%s,\x20%s',_0x392ef3,_0xb436('0xf'));logger[_0xb436('0x10')](_0xb436('0x11'),_0x392ef3,'request\x20sent',JSON[_0xb436('0x12')](_0x1fbe10));if(_0x1fbe10[_0xb436('0x13')]){if(_0x1fbe10[_0xb436('0x13')][_0xb436('0x14')]===0x1f4){logger['error'](_0xb436('0x15'),_0x392ef3,_0x1fbe10[_0xb436('0x13')]['message']);return _0x7081e3(_0x1fbe10[_0xb436('0x13')][_0xb436('0x16')]);}logger[_0xb436('0x13')](_0xb436('0x15'),_0x392ef3,_0x1fbe10[_0xb436('0x13')][_0xb436('0x16')]);return _0x57911e(_0x1fbe10[_0xb436('0x13')][_0xb436('0x16')]);}else{logger[_0xb436('0x17')](_0xb436('0x15'),_0x392ef3,_0xb436('0xf'));_0x57911e(_0x1fbe10['result'][_0xb436('0x16')]);}})[_0xb436('0x18')](function(_0x5d4a31){logger[_0xb436('0x13')](_0xb436('0x15'),_0x392ef3,_0x5d4a31);_0x7081e3(_0x5d4a31);});});}exports['GetSmsQueue']=function(_0xbee1ee){var _0x18b999=this;return new Promise(function(_0x225506,_0x30fe5f){return db[_0xb436('0x19')]['findAll']({'raw':_0xbee1ee['options']?_0xbee1ee[_0xb436('0x1a')][_0xb436('0x1b')]===undefined?!![]:![]:!![],'where':_0xbee1ee[_0xb436('0x1a')]?_0xbee1ee['options'][_0xb436('0x1c')]||null:null,'attributes':_0xbee1ee[_0xb436('0x1a')]?_0xbee1ee[_0xb436('0x1a')]['attributes']||null:null,'limit':_0xbee1ee[_0xb436('0x1a')]?_0xbee1ee[_0xb436('0x1a')][_0xb436('0x1d')]||null:null,'include':_0xbee1ee[_0xb436('0x1a')]?_0xbee1ee[_0xb436('0x1a')][_0xb436('0x1e')]?_[_0xb436('0x1f')](_0xbee1ee['options']['include'],function(_0x3a9cd7){return{'model':db[_0x3a9cd7[_0xb436('0x20')]],'as':_0x3a9cd7['as'],'attributes':_0x3a9cd7['attributes'],'include':_0x3a9cd7[_0xb436('0x1e')]?_[_0xb436('0x1f')](_0x3a9cd7[_0xb436('0x1e')],function(_0x5f4592){return{'model':db[_0x5f4592[_0xb436('0x20')]],'as':_0x5f4592['as'],'attributes':_0x5f4592[_0xb436('0x21')],'include':_0x5f4592['include']?_[_0xb436('0x1f')](_0x5f4592[_0xb436('0x1e')],function(_0x1de4d3){return{'model':db[_0x1de4d3[_0xb436('0x20')]],'as':_0x1de4d3['as'],'attributes':_0x1de4d3['attributes']};}):[]};}):[]};}):[]:[]})[_0xb436('0xe')](function(_0x17ec73){logger[_0xb436('0x17')](_0xb436('0x22'),_0xbee1ee);logger[_0xb436('0x10')](_0xb436('0x22'),_0xbee1ee,JSON[_0xb436('0x12')](_0x17ec73));_0x225506(_0x17ec73);})[_0xb436('0x18')](function(_0xcfc634){logger[_0xb436('0x13')](_0xb436('0x22'),_0xcfc634[_0xb436('0x16')],_0xbee1ee);_0x30fe5f(_0x18b999[_0xb436('0x13')](0x1f4,_0xcfc634['message']));});});};exports[_0xb436('0x23')]=function(_0x1d6afd){var _0xc25f75=this;return new Promise(function(_0x5da5dc,_0xf724ef){return db['SmsQueue'][_0xb436('0x24')]({'raw':_0x1d6afd[_0xb436('0x1a')]?_0x1d6afd[_0xb436('0x1a')][_0xb436('0x1b')]===undefined?!![]:![]:!![],'where':_0x1d6afd[_0xb436('0x1a')]?_0x1d6afd[_0xb436('0x1a')][_0xb436('0x1c')]||null:null,'attributes':_0x1d6afd[_0xb436('0x1a')]?_0x1d6afd[_0xb436('0x1a')]['attributes']||null:null,'include':_0x1d6afd[_0xb436('0x1a')]?_0x1d6afd[_0xb436('0x1a')][_0xb436('0x1e')]?_['map'](_0x1d6afd[_0xb436('0x1a')][_0xb436('0x1e')],function(_0x5835b3){return{'model':db[_0x5835b3['model']],'as':_0x5835b3['as'],'attributes':_0x5835b3[_0xb436('0x21')],'include':_0x5835b3[_0xb436('0x1e')]?_[_0xb436('0x1f')](_0x5835b3[_0xb436('0x1e')],function(_0x3ed646){return{'model':db[_0x3ed646[_0xb436('0x20')]],'as':_0x3ed646['as'],'attributes':_0x3ed646[_0xb436('0x21')],'include':_0x3ed646[_0xb436('0x1e')]?_[_0xb436('0x1f')](_0x3ed646[_0xb436('0x1e')],function(_0x4bf53d){return{'model':db[_0x4bf53d[_0xb436('0x20')]],'as':_0x4bf53d['as'],'attributes':_0x4bf53d[_0xb436('0x21')]};}):[]};}):[]};}):[]:[]})[_0xb436('0xe')](function(_0x4c822e){logger['info'](_0xb436('0x23'),_0x1d6afd);logger['debug'](_0xb436('0x23'),_0x1d6afd,JSON[_0xb436('0x12')](_0x4c822e));_0x5da5dc(_0x4c822e);})[_0xb436('0x18')](function(_0x338349){logger[_0xb436('0x13')](_0xb436('0x23'),_0x338349['message'],_0x1d6afd);_0xf724ef(_0xc25f75[_0xb436('0x13')](0x1f4,_0x338349[_0xb436('0x16')]));});});};
\ No newline at end of file
index 000023a..16ac579 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x06f1=['register','smsQueue:','./smsQueue.events','save','remove','removeListener'];(function(_0x23c791,_0xa8bee3){var _0x57b777=function(_0x25f8c4){while(--_0x25f8c4){_0x23c791['push'](_0x23c791['shift']());}};_0x57b777(++_0xa8bee3);}(_0x06f1,0x6e));var _0x106f=function(_0x473520,_0x4afe80){_0x473520=_0x473520-0x0;var _0x2ef302=_0x06f1[_0x473520];return _0x2ef302;};'use strict';var SmsQueueEvents=require(_0x106f('0x0'));var events=[_0x106f('0x1'),_0x106f('0x2'),'update'];function createListener(_0x183aa2,_0x583c5f){return function(_0x409456){_0x583c5f['emit'](_0x183aa2,_0x409456);};}function removeListener(_0x48ef1c,_0x11ebc2){return function(){SmsQueueEvents[_0x106f('0x3')](_0x48ef1c,_0x11ebc2);};}exports[_0x106f('0x4')]=function(_0x24f34d){for(var _0x1d7e96=0x0,_0x1e7fb4=events['length'];_0x1d7e96<_0x1e7fb4;_0x1d7e96++){var _0x1c517e=events[_0x1d7e96];var _0x55d45b=createListener(_0x106f('0x5')+_0x1c517e,_0x24f34d);SmsQueueEvents['on'](_0x1c517e,_0x55d45b);}};
\ No newline at end of file
+var _0x4d07=['remove','emit','removeListener','register','length','smsQueue:','./smsQueue.events'];(function(_0x520e16,_0x545cb6){var _0x4771b5=function(_0x5e3a50){while(--_0x5e3a50){_0x520e16['push'](_0x520e16['shift']());}};_0x4771b5(++_0x545cb6);}(_0x4d07,0x18e));var _0x74d0=function(_0x5de133,_0x575ae4){_0x5de133=_0x5de133-0x0;var _0x5d4684=_0x4d07[_0x5de133];return _0x5d4684;};'use strict';var SmsQueueEvents=require(_0x74d0('0x0'));var events=['save',_0x74d0('0x1'),'update'];function createListener(_0x553c84,_0x4ee27c){return function(_0x5d6bc0){_0x4ee27c[_0x74d0('0x2')](_0x553c84,_0x5d6bc0);};}function removeListener(_0x464dbf,_0x28dc64){return function(){SmsQueueEvents[_0x74d0('0x3')](_0x464dbf,_0x28dc64);};}exports[_0x74d0('0x4')]=function(_0x32e893){for(var _0x2d3541=0x0,_0x2dd3a4=events[_0x74d0('0x5')];_0x2d3541<_0x2dd3a4;_0x2d3541++){var _0x42e083=events[_0x2d3541];var _0x2b1067=createListener(_0x74d0('0x6')+_0x42e083,_0x32e893);SmsQueueEvents['on'](_0x42e083,_0x2b1067);}};
\ No newline at end of file
index 69f8193..6d84b81 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x553a=['Router','../../config/environment','isAuthenticated','/describe','describe','/:id','show','post','update','delete','destroy','exports','util','connect-timeout','express'];(function(_0x495c53,_0x5dd58b){var _0x20abe0=function(_0x29db0f){while(--_0x29db0f){_0x495c53['push'](_0x495c53['shift']());}};_0x20abe0(++_0x5dd58b);}(_0x553a,0x192));var _0xa553=function(_0x2125f0,_0x2f23b9){_0x2125f0=_0x2125f0-0x0;var _0x12d6eb=_0x553a[_0x2125f0];return _0x12d6eb;};'use strict';var multer=require('multer');var util=require(_0xa553('0x0'));var path=require('path');var timeout=require(_0xa553('0x1'));var express=require(_0xa553('0x2'));var router=express[_0xa553('0x3')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xa553('0x4'));var controller=require('./smsQueueReport.controller');router['get']('/',auth[_0xa553('0x5')](),controller['index']);router['get'](_0xa553('0x6'),auth[_0xa553('0x5')](),controller[_0xa553('0x7')]);router['get'](_0xa553('0x8'),auth['isAuthenticated'](),controller[_0xa553('0x9')]);router[_0xa553('0xa')]('/',auth[_0xa553('0x5')](),controller['create']);router['put'](_0xa553('0x8'),auth['isAuthenticated'](),controller[_0xa553('0xb')]);router[_0xa553('0xc')](_0xa553('0x8'),auth['isAuthenticated'](),controller[_0xa553('0xd')]);module[_0xa553('0xe')]=router;
\ No newline at end of file
+var _0x36bb=['util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsQueueReport.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','put','delete','destroy','exports','multer'];(function(_0x413727,_0x17adb1){var _0x5f46d7=function(_0xbb668e){while(--_0xbb668e){_0x413727['push'](_0x413727['shift']());}};_0x5f46d7(++_0x17adb1);}(_0x36bb,0xe6));var _0xb36b=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x36bb[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0xb36b('0x0'));var util=require(_0xb36b('0x1'));var path=require(_0xb36b('0x2'));var timeout=require('connect-timeout');var express=require(_0xb36b('0x3'));var router=express[_0xb36b('0x4')]();var auth=require(_0xb36b('0x5'));var interaction=require(_0xb36b('0x6'));var config=require(_0xb36b('0x7'));var controller=require(_0xb36b('0x8'));router[_0xb36b('0x9')]('/',auth[_0xb36b('0xa')](),controller[_0xb36b('0xb')]);router[_0xb36b('0x9')](_0xb36b('0xc'),auth[_0xb36b('0xa')](),controller[_0xb36b('0xd')]);router[_0xb36b('0x9')](_0xb36b('0xe'),auth[_0xb36b('0xa')](),controller[_0xb36b('0xf')]);router[_0xb36b('0x10')]('/',auth[_0xb36b('0xa')](),controller['create']);router[_0xb36b('0x11')](_0xb36b('0xe'),auth[_0xb36b('0xa')](),controller['update']);router[_0xb36b('0x12')](_0xb36b('0xe'),auth[_0xb36b('0xa')](),controller[_0xb36b('0x13')]);module[_0xb36b('0x14')]=router;
\ No newline at end of file
index b80515d..5f16e69 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1a7b=['sequelize','exports','STRING','DATE','moment'];(function(_0x5e1af8,_0xd5227e){var _0x4cbf83=function(_0x56c0c8){while(--_0x56c0c8){_0x5e1af8['push'](_0x5e1af8['shift']());}};_0x4cbf83(++_0xd5227e);}(_0x1a7b,0xea));var _0xb1a7=function(_0x4a2718,_0x2b8edb){_0x4a2718=_0x4a2718-0x0;var _0x41cddf=_0x1a7b[_0x4a2718];return _0x41cddf;};'use strict';var moment=require(_0xb1a7('0x0'));var Sequelize=require(_0xb1a7('0x1'));module[_0xb1a7('0x2')]={'uniqueid':{'type':Sequelize[_0xb1a7('0x3')],'allowNull':![]},'from':{'type':Sequelize['STRING']},'joinAt':{'type':Sequelize[_0xb1a7('0x4')]},'leaveAt':{'type':Sequelize[_0xb1a7('0x4')]},'acceptAt':{'type':Sequelize['DATE']},'exitAt':{'type':Sequelize['DATE']},'reason':{'type':Sequelize[_0xb1a7('0x3')]}};
\ No newline at end of file
+var _0xc92a=['STRING','DATE','sequelize','exports'];(function(_0x48a4e4,_0x3fd072){var _0x581e47=function(_0xde31f7){while(--_0xde31f7){_0x48a4e4['push'](_0x48a4e4['shift']());}};_0x581e47(++_0x3fd072);}(_0xc92a,0xc6));var _0xac92=function(_0x397e5f,_0x454c8f){_0x397e5f=_0x397e5f-0x0;var _0x5302b8=_0xc92a[_0x397e5f];return _0x5302b8;};'use strict';var moment=require('moment');var Sequelize=require(_0xac92('0x0'));module[_0xac92('0x1')]={'uniqueid':{'type':Sequelize[_0xac92('0x2')],'allowNull':![]},'from':{'type':Sequelize[_0xac92('0x2')]},'joinAt':{'type':Sequelize[_0xac92('0x3')]},'leaveAt':{'type':Sequelize['DATE']},'acceptAt':{'type':Sequelize[_0xac92('0x3')]},'exitAt':{'type':Sequelize['DATE']},'reason':{'type':Sequelize[_0xac92('0x2')]}};
\ No newline at end of file
index 2c7bdc5..91c11c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed5e=['catch','show','params','includeAll','include','options','find','create','body','destroy','describe','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','mustache','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','limit','set','json','apply','reject','save','update','then','end','stack','name','send','index','SmsQueueReport','rawAttributes','query','keys','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','offset','order','sort','where','filters','pick','filter','merge','map','type','key','field','count','findAll','rows'];(function(_0x22a33a,_0x4a7487){var _0x2d0a92=function(_0x4c27e2){while(--_0x4c27e2){_0x22a33a['push'](_0x22a33a['shift']());}};_0x2d0a92(++_0x4a7487);}(_0xed5e,0xec));var _0xeed5=function(_0x2bdc9d,_0x5ef92b){_0x2bdc9d=_0x2bdc9d-0x0;var _0x1ac0ba=_0xed5e[_0x2bdc9d];return _0x1ac0ba;};'use strict';var pdf=require(_0xeed5('0x0'));var emlformat=require(_0xeed5('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xeed5('0x2'));var jsonpatch=require(_0xeed5('0x3'));var rp=require(_0xeed5('0x4'));var moment=require(_0xeed5('0x5'));var BPromise=require('bluebird');var Mustache=require(_0xeed5('0x6'));var util=require('util');var path=require(_0xeed5('0x7'));var sox=require(_0xeed5('0x8'));var csv=require(_0xeed5('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xeed5('0xa'));var squel=require(_0xeed5('0xb'));var crypto=require(_0xeed5('0xc'));var jsforce=require(_0xeed5('0xd'));var deskjs=require(_0xeed5('0xe'));var toCsv=require('to-csv');var querystring=require(_0xeed5('0xf'));var Papa=require(_0xeed5('0x10'));var Redis=require(_0xeed5('0x11'));var authService=require(_0xeed5('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xeed5('0x13'))(_0xeed5('0x14'));var utils=require(_0xeed5('0x15'));var config=require(_0xeed5('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5cf145,_0x3ad41c){_0x3ad41c=_0x3ad41c||0xcc;return function(_0x3b4ce2){if(_0x3b4ce2){return _0x5cf145[_0xeed5('0x17')](_0x3ad41c);}return _0x5cf145['status'](_0x3ad41c)['end']();};}function respondWithResult(_0x3f65e0,_0x9e23cf){_0x9e23cf=_0x9e23cf||0xc8;return function(_0x81a1bc){if(_0x81a1bc){return _0x3f65e0[_0xeed5('0x18')](_0x9e23cf)['json'](_0x81a1bc);}};}function respondWithFilteredResult(_0x253e42,_0x325af3){return function(_0x2145da){if(_0x2145da){var _0x28893d=_0x2145da['count'],_0x32cf64=_0x325af3['offset'],_0x5afdf6=_0x325af3['offset']+_0x325af3[_0xeed5('0x19')],_0x53727f;if(_0x5afdf6>=_0x28893d){_0x5afdf6=_0x28893d;_0x53727f=0xc8;}else{_0x53727f=0xce;}_0x253e42[_0xeed5('0x18')](_0x53727f);return _0x253e42[_0xeed5('0x1a')]('Content-Range',_0x32cf64+'-'+_0x5afdf6+'/'+_0x28893d)[_0xeed5('0x1b')](_0x2145da);}return null;};}function patchUpdates(_0x1eaddd){return function(_0xb2af45){try{jsonpatch[_0xeed5('0x1c')](_0xb2af45,_0x1eaddd,!![]);}catch(_0x47211f){return BPromise[_0xeed5('0x1d')](_0x47211f);}return _0xb2af45[_0xeed5('0x1e')]();};}function saveUpdates(_0x410632,_0x1000a7){return function(_0x1a308e){if(_0x1a308e){return _0x1a308e[_0xeed5('0x1f')](_0x410632)[_0xeed5('0x20')](function(_0x17f0ea){return _0x17f0ea;});}return null;};}function removeEntity(_0x403f61,_0x133e91){return function(_0x54544e){if(_0x54544e){return _0x54544e['destroy']()['then'](function(){_0x403f61[_0xeed5('0x18')](0xcc)[_0xeed5('0x21')]();});}};}function handleEntityNotFound(_0xfd36da,_0x2168c1){return function(_0x4b7ce0){if(!_0x4b7ce0){_0xfd36da['sendStatus'](0x194);}return _0x4b7ce0;};}function handleError(_0x1eb54b,_0x38ca2f){_0x38ca2f=_0x38ca2f||0x1f4;return function(_0x48bd7b){logger['error'](_0x48bd7b[_0xeed5('0x22')]);if(_0x48bd7b[_0xeed5('0x23')]){delete _0x48bd7b[_0xeed5('0x23')];}_0x1eb54b['status'](_0x38ca2f)[_0xeed5('0x24')](_0x48bd7b);};}exports[_0xeed5('0x25')]=function(_0x52a69e,_0x198bd7){var _0x597131={},_0x2f6d20={},_0x8b6558={'count':0x0,'rows':[]};var _0x15b6fa=db[_0xeed5('0x26')][_0xeed5('0x27')];_0x2f6d20['model']=_['keys'](_0x15b6fa);_0x2f6d20[_0xeed5('0x28')]=_[_0xeed5('0x29')](_0x52a69e[_0xeed5('0x28')]);_0x2f6d20['filters']=_[_0xeed5('0x2a')](_0x2f6d20[_0xeed5('0x2b')],_0x2f6d20[_0xeed5('0x28')]);_0x597131[_0xeed5('0x2c')]=_[_0xeed5('0x2a')](_0x2f6d20['model'],qs[_0xeed5('0x2d')](_0x52a69e[_0xeed5('0x28')][_0xeed5('0x2d')]));_0x597131[_0xeed5('0x2c')]=_0x597131[_0xeed5('0x2c')][_0xeed5('0x2e')]?_0x597131[_0xeed5('0x2c')]:_0x2f6d20['model'];if(!_0x52a69e[_0xeed5('0x28')][_0xeed5('0x2f')](_0xeed5('0x30'))){_0x597131[_0xeed5('0x19')]=qs[_0xeed5('0x19')](_0x52a69e[_0xeed5('0x28')]['limit']);_0x597131[_0xeed5('0x31')]=qs[_0xeed5('0x31')](_0x52a69e[_0xeed5('0x28')][_0xeed5('0x31')]);}_0x597131[_0xeed5('0x32')]=qs[_0xeed5('0x33')](_0x52a69e[_0xeed5('0x28')][_0xeed5('0x33')]);_0x597131[_0xeed5('0x34')]=qs[_0xeed5('0x35')](_[_0xeed5('0x36')](_0x52a69e[_0xeed5('0x28')],_0x2f6d20[_0xeed5('0x35')]));if(_0x52a69e[_0xeed5('0x28')][_0xeed5('0x37')]){_0x597131[_0xeed5('0x34')]=_[_0xeed5('0x38')](_0x597131[_0xeed5('0x34')],{'$or':_[_0xeed5('0x39')](_0x15b6fa,function(_0x4a2770){if(_0x4a2770[_0xeed5('0x3a')][_0xeed5('0x3b')]!=='VIRTUAL'){var _0x2ffac8={};_0x2ffac8[_0x4a2770[_0xeed5('0x3c')]]={'$like':'%'+_0x52a69e[_0xeed5('0x28')][_0xeed5('0x37')]+'%'};return _0x2ffac8;}})});}_0x597131=_['merge']({},_0x597131,_0x52a69e['options']);var _0xabbe3d={'where':_0x597131[_0xeed5('0x34')]};return db['SmsQueueReport'][_0xeed5('0x3d')](_0xabbe3d)[_0xeed5('0x20')](function(_0x5a9f4f){_0x8b6558['count']=_0x5a9f4f;if(_0x52a69e[_0xeed5('0x28')]['includeAll']){_0x597131['include']=[{'all':!![]}];}return db[_0xeed5('0x26')][_0xeed5('0x3e')](_0x597131);})[_0xeed5('0x20')](function(_0x4217d4){_0x8b6558[_0xeed5('0x3f')]=_0x4217d4;return _0x8b6558;})['then'](respondWithFilteredResult(_0x198bd7,_0x597131))[_0xeed5('0x40')](handleError(_0x198bd7,null));};exports[_0xeed5('0x41')]=function(_0x460547,_0x52e24e){var _0x5416ee={'raw':!![],'where':{'id':_0x460547[_0xeed5('0x42')]['id']}},_0x5cd95e={};_0x5cd95e[_0xeed5('0x2b')]=_[_0xeed5('0x29')](db['SmsQueueReport'][_0xeed5('0x27')]);_0x5cd95e['query']=_[_0xeed5('0x29')](_0x460547[_0xeed5('0x28')]);_0x5cd95e[_0xeed5('0x35')]=_[_0xeed5('0x2a')](_0x5cd95e[_0xeed5('0x2b')],_0x5cd95e['query']);_0x5416ee['attributes']=_['intersection'](_0x5cd95e[_0xeed5('0x2b')],qs[_0xeed5('0x2d')](_0x460547[_0xeed5('0x28')][_0xeed5('0x2d')]));_0x5416ee[_0xeed5('0x2c')]=_0x5416ee[_0xeed5('0x2c')][_0xeed5('0x2e')]?_0x5416ee[_0xeed5('0x2c')]:_0x5cd95e['model'];if(_0x460547[_0xeed5('0x28')][_0xeed5('0x43')]){_0x5416ee[_0xeed5('0x44')]=[{'all':!![]}];}_0x5416ee=_[_0xeed5('0x38')]({},_0x5416ee,_0x460547[_0xeed5('0x45')]);return db[_0xeed5('0x26')][_0xeed5('0x46')](_0x5416ee)[_0xeed5('0x20')](handleEntityNotFound(_0x52e24e,null))['then'](respondWithResult(_0x52e24e,null))[_0xeed5('0x40')](handleError(_0x52e24e,null));};exports[_0xeed5('0x47')]=function(_0x4682b0,_0x234e9d){return db['SmsQueueReport'][_0xeed5('0x47')](_0x4682b0[_0xeed5('0x48')],{})[_0xeed5('0x20')](respondWithResult(_0x234e9d,0xc9))[_0xeed5('0x40')](handleError(_0x234e9d,null));};exports['update']=function(_0x38ef1e,_0x416f47){if(_0x38ef1e[_0xeed5('0x48')]['id']){delete _0x38ef1e[_0xeed5('0x48')]['id'];}return db[_0xeed5('0x26')][_0xeed5('0x46')]({'where':{'id':_0x38ef1e['params']['id']}})[_0xeed5('0x20')](handleEntityNotFound(_0x416f47,null))[_0xeed5('0x20')](saveUpdates(_0x38ef1e[_0xeed5('0x48')],null))[_0xeed5('0x20')](respondWithResult(_0x416f47,null))['catch'](handleError(_0x416f47,null));};exports[_0xeed5('0x49')]=function(_0x3fcab9,_0x2eaaa8){return db['SmsQueueReport'][_0xeed5('0x46')]({'where':{'id':_0x3fcab9[_0xeed5('0x42')]['id']}})[_0xeed5('0x20')](handleEntityNotFound(_0x2eaaa8,null))[_0xeed5('0x20')](removeEntity(_0x2eaaa8,null))[_0xeed5('0x40')](handleError(_0x2eaaa8,null));};exports[_0xeed5('0x4a')]=function(_0x2e6f9e,_0xd81348){return db[_0xeed5('0x26')][_0xeed5('0x4a')]()[_0xeed5('0x20')](respondWithResult(_0xd81348,null))['catch'](handleError(_0xd81348,null));};
\ No newline at end of file
+var _0x2a03=['SmsQueueReport','model','keys','query','filters','intersection','attributes','nolimit','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','include','findAll','rows','catch','show','params','rawAttributes','fields','includeAll','create','body','find','destroy','describe','html-pdf','rimraf','zip-dir','request-promise','moment','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','Content-Range','apply','reject','save','update','then','error','stack','name','send','index'];(function(_0x14ad6f,_0x434da8){var _0x1245ad=function(_0x297db5){while(--_0x297db5){_0x14ad6f['push'](_0x14ad6f['shift']());}};_0x1245ad(++_0x434da8);}(_0x2a03,0x6c));var _0x32a0=function(_0x3776b4,_0x19a1e3){_0x3776b4=_0x3776b4-0x0;var _0x1636d9=_0x2a03[_0x3776b4];return _0x1636d9;};'use strict';var pdf=require(_0x32a0('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x32a0('0x1'));var zipdir=require(_0x32a0('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x32a0('0x3'));var moment=require(_0x32a0('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x32a0('0x5'));var util=require(_0x32a0('0x6'));var path=require(_0x32a0('0x7'));var sox=require('sox');var csv=require(_0x32a0('0x8'));var ejs=require(_0x32a0('0x9'));var fs=require('fs');var _=require(_0x32a0('0xa'));var squel=require(_0x32a0('0xb'));var crypto=require(_0x32a0('0xc'));var jsforce=require(_0x32a0('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x32a0('0x8'));var querystring=require('querystring');var Papa=require(_0x32a0('0xe'));var Redis=require(_0x32a0('0xf'));var authService=require(_0x32a0('0x10'));var qs=require(_0x32a0('0x11'));var hardwareService=require(_0x32a0('0x12'));var logger=require(_0x32a0('0x13'))(_0x32a0('0x14'));var utils=require(_0x32a0('0x15'));var config=require(_0x32a0('0x16'));var db=require(_0x32a0('0x17'))['db'];function respondWithStatusCode(_0x38997c,_0x5a619c){_0x5a619c=_0x5a619c||0xcc;return function(_0x3c07a4){if(_0x3c07a4){return _0x38997c[_0x32a0('0x18')](_0x5a619c);}return _0x38997c[_0x32a0('0x19')](_0x5a619c)[_0x32a0('0x1a')]();};}function respondWithResult(_0x48c733,_0xf81288){_0xf81288=_0xf81288||0xc8;return function(_0x5bca4f){if(_0x5bca4f){return _0x48c733[_0x32a0('0x19')](_0xf81288)[_0x32a0('0x1b')](_0x5bca4f);}};}function respondWithFilteredResult(_0x49c7f9,_0x323fc7){return function(_0x797301){if(_0x797301){var _0x136f3c=_0x797301[_0x32a0('0x1c')],_0x2fc163=_0x323fc7[_0x32a0('0x1d')],_0x42c01c=_0x323fc7['offset']+_0x323fc7[_0x32a0('0x1e')],_0x5727e0;if(_0x42c01c>=_0x136f3c){_0x42c01c=_0x136f3c;_0x5727e0=0xc8;}else{_0x5727e0=0xce;}_0x49c7f9[_0x32a0('0x19')](_0x5727e0);return _0x49c7f9['set'](_0x32a0('0x1f'),_0x2fc163+'-'+_0x42c01c+'/'+_0x136f3c)['json'](_0x797301);}return null;};}function patchUpdates(_0x143f3b){return function(_0x29b4cb){try{jsonpatch[_0x32a0('0x20')](_0x29b4cb,_0x143f3b,!![]);}catch(_0x3ca06b){return BPromise[_0x32a0('0x21')](_0x3ca06b);}return _0x29b4cb[_0x32a0('0x22')]();};}function saveUpdates(_0x5dfbb4,_0x46d417){return function(_0x4af175){if(_0x4af175){return _0x4af175[_0x32a0('0x23')](_0x5dfbb4)[_0x32a0('0x24')](function(_0x57fd7c){return _0x57fd7c;});}return null;};}function removeEntity(_0x3fb94a,_0x3a4289){return function(_0x671857){if(_0x671857){return _0x671857['destroy']()[_0x32a0('0x24')](function(){_0x3fb94a[_0x32a0('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1fb678,_0x6d348f){return function(_0x63655a){if(!_0x63655a){_0x1fb678[_0x32a0('0x18')](0x194);}return _0x63655a;};}function handleError(_0x3f0846,_0x3734e9){_0x3734e9=_0x3734e9||0x1f4;return function(_0x194799){logger[_0x32a0('0x25')](_0x194799[_0x32a0('0x26')]);if(_0x194799['name']){delete _0x194799[_0x32a0('0x27')];}_0x3f0846[_0x32a0('0x19')](_0x3734e9)[_0x32a0('0x28')](_0x194799);};}exports[_0x32a0('0x29')]=function(_0xf36f79,_0x1bb5e9){var _0x4d858d={},_0x51c721={},_0x1f344c={'count':0x0,'rows':[]};var _0x50d94d=db[_0x32a0('0x2a')]['rawAttributes'];_0x51c721[_0x32a0('0x2b')]=_[_0x32a0('0x2c')](_0x50d94d);_0x51c721[_0x32a0('0x2d')]=_[_0x32a0('0x2c')](_0xf36f79['query']);_0x51c721[_0x32a0('0x2e')]=_[_0x32a0('0x2f')](_0x51c721[_0x32a0('0x2b')],_0x51c721[_0x32a0('0x2d')]);_0x4d858d[_0x32a0('0x30')]=_[_0x32a0('0x2f')](_0x51c721[_0x32a0('0x2b')],qs['fields'](_0xf36f79[_0x32a0('0x2d')]['fields']));_0x4d858d['attributes']=_0x4d858d[_0x32a0('0x30')]['length']?_0x4d858d[_0x32a0('0x30')]:_0x51c721[_0x32a0('0x2b')];if(!_0xf36f79[_0x32a0('0x2d')]['hasOwnProperty'](_0x32a0('0x31'))){_0x4d858d[_0x32a0('0x1e')]=qs[_0x32a0('0x1e')](_0xf36f79['query'][_0x32a0('0x1e')]);_0x4d858d[_0x32a0('0x1d')]=qs[_0x32a0('0x1d')](_0xf36f79[_0x32a0('0x2d')][_0x32a0('0x1d')]);}_0x4d858d['order']=qs[_0x32a0('0x32')](_0xf36f79[_0x32a0('0x2d')][_0x32a0('0x32')]);_0x4d858d[_0x32a0('0x33')]=qs['filters'](_[_0x32a0('0x34')](_0xf36f79[_0x32a0('0x2d')],_0x51c721[_0x32a0('0x2e')]));if(_0xf36f79[_0x32a0('0x2d')][_0x32a0('0x35')]){_0x4d858d[_0x32a0('0x33')]=_[_0x32a0('0x36')](_0x4d858d[_0x32a0('0x33')],{'$or':_[_0x32a0('0x37')](_0x50d94d,function(_0x45c21d){if(_0x45c21d[_0x32a0('0x38')][_0x32a0('0x39')]!==_0x32a0('0x3a')){var _0x58d525={};_0x58d525[_0x45c21d[_0x32a0('0x3b')]]={'$like':'%'+_0xf36f79[_0x32a0('0x2d')][_0x32a0('0x35')]+'%'};return _0x58d525;}})});}_0x4d858d=_[_0x32a0('0x36')]({},_0x4d858d,_0xf36f79[_0x32a0('0x3c')]);var _0x514e02={'where':_0x4d858d[_0x32a0('0x33')]};return db['SmsQueueReport']['count'](_0x514e02)['then'](function(_0x29bce7){_0x1f344c[_0x32a0('0x1c')]=_0x29bce7;if(_0xf36f79[_0x32a0('0x2d')]['includeAll']){_0x4d858d[_0x32a0('0x3d')]=[{'all':!![]}];}return db[_0x32a0('0x2a')][_0x32a0('0x3e')](_0x4d858d);})[_0x32a0('0x24')](function(_0x4326b8){_0x1f344c[_0x32a0('0x3f')]=_0x4326b8;return _0x1f344c;})[_0x32a0('0x24')](respondWithFilteredResult(_0x1bb5e9,_0x4d858d))[_0x32a0('0x40')](handleError(_0x1bb5e9,null));};exports[_0x32a0('0x41')]=function(_0x648f38,_0x32361c){var _0x120fa4={'raw':!![],'where':{'id':_0x648f38[_0x32a0('0x42')]['id']}},_0xdf5ef7={};_0xdf5ef7[_0x32a0('0x2b')]=_[_0x32a0('0x2c')](db['SmsQueueReport'][_0x32a0('0x43')]);_0xdf5ef7[_0x32a0('0x2d')]=_[_0x32a0('0x2c')](_0x648f38['query']);_0xdf5ef7[_0x32a0('0x2e')]=_[_0x32a0('0x2f')](_0xdf5ef7['model'],_0xdf5ef7[_0x32a0('0x2d')]);_0x120fa4[_0x32a0('0x30')]=_[_0x32a0('0x2f')](_0xdf5ef7[_0x32a0('0x2b')],qs[_0x32a0('0x44')](_0x648f38[_0x32a0('0x2d')][_0x32a0('0x44')]));_0x120fa4['attributes']=_0x120fa4['attributes']['length']?_0x120fa4[_0x32a0('0x30')]:_0xdf5ef7[_0x32a0('0x2b')];if(_0x648f38[_0x32a0('0x2d')][_0x32a0('0x45')]){_0x120fa4[_0x32a0('0x3d')]=[{'all':!![]}];}_0x120fa4=_[_0x32a0('0x36')]({},_0x120fa4,_0x648f38[_0x32a0('0x3c')]);return db['SmsQueueReport']['find'](_0x120fa4)[_0x32a0('0x24')](handleEntityNotFound(_0x32361c,null))[_0x32a0('0x24')](respondWithResult(_0x32361c,null))[_0x32a0('0x40')](handleError(_0x32361c,null));};exports['create']=function(_0x5a5254,_0x41ef43){return db['SmsQueueReport'][_0x32a0('0x46')](_0x5a5254[_0x32a0('0x47')],{})[_0x32a0('0x24')](respondWithResult(_0x41ef43,0xc9))[_0x32a0('0x40')](handleError(_0x41ef43,null));};exports['update']=function(_0x1de45e,_0x4aaa60){if(_0x1de45e['body']['id']){delete _0x1de45e[_0x32a0('0x47')]['id'];}return db[_0x32a0('0x2a')][_0x32a0('0x48')]({'where':{'id':_0x1de45e['params']['id']}})[_0x32a0('0x24')](handleEntityNotFound(_0x4aaa60,null))[_0x32a0('0x24')](saveUpdates(_0x1de45e[_0x32a0('0x47')],null))[_0x32a0('0x24')](respondWithResult(_0x4aaa60,null))['catch'](handleError(_0x4aaa60,null));};exports[_0x32a0('0x49')]=function(_0x4f0a53,_0x364374){return db['SmsQueueReport']['find']({'where':{'id':_0x4f0a53[_0x32a0('0x42')]['id']}})['then'](handleEntityNotFound(_0x364374,null))[_0x32a0('0x24')](removeEntity(_0x364374,null))['catch'](handleError(_0x364374,null));};exports[_0x32a0('0x4a')]=function(_0xfd0234,_0x500f08){return db[_0x32a0('0x2a')][_0x32a0('0x4a')]()['then'](respondWithResult(_0x500f08,null))[_0x32a0('0x40')](handleError(_0x500f08,null));};
\ No newline at end of file
index 1d8281a..3dbf2f6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd5cc=['../../config/logger','api','moment','bluebird','path','./smsQueueReport.attributes','exports','define','SmsQueueReport','report_sms_queue','uniqueid','lodash','util'];(function(_0x4c105c,_0x495f0a){var _0x375b1d=function(_0x5206f5){while(--_0x5206f5){_0x4c105c['push'](_0x4c105c['shift']());}};_0x375b1d(++_0x495f0a);}(_0xd5cc,0x129));var _0xcd5c=function(_0x40e370,_0x4f7ecb){_0x40e370=_0x40e370-0x0;var _0x5971f2=_0xd5cc[_0x40e370];return _0x5971f2;};'use strict';var _=require(_0xcd5c('0x0'));var util=require(_0xcd5c('0x1'));var logger=require(_0xcd5c('0x2'))(_0xcd5c('0x3'));var moment=require(_0xcd5c('0x4'));var BPromise=require(_0xcd5c('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xcd5c('0x6'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0xcd5c('0x7'));module[_0xcd5c('0x8')]=function(_0x358330,_0x342686){return _0x358330[_0xcd5c('0x9')](_0xcd5c('0xa'),attributes,{'tableName':_0xcd5c('0xb'),'paranoid':![],'indexes':[{'name':_0xcd5c('0xc'),'fields':[_0xcd5c('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x5c5d=['./smsQueueReport.attributes','SmsQueueReport','uniqueid','lodash','util','../../config/logger','api','moment','request-promise','path','rimraf','../../config/environment'];(function(_0x38b45e,_0x513671){var _0x5a1eb9=function(_0x900920){while(--_0x900920){_0x38b45e['push'](_0x38b45e['shift']());}};_0x5a1eb9(++_0x513671);}(_0x5c5d,0xb7));var _0xd5c5=function(_0x3ff085,_0x27c92e){_0x3ff085=_0x3ff085-0x0;var _0x2b68c3=_0x5c5d[_0x3ff085];return _0x2b68c3;};'use strict';var _=require(_0xd5c5('0x0'));var util=require(_0xd5c5('0x1'));var logger=require(_0xd5c5('0x2'))(_0xd5c5('0x3'));var moment=require(_0xd5c5('0x4'));var BPromise=require('bluebird');var rp=require(_0xd5c5('0x5'));var fs=require('fs');var path=require(_0xd5c5('0x6'));var rimraf=require(_0xd5c5('0x7'));var config=require(_0xd5c5('0x8'));var attributes=require(_0xd5c5('0x9'));module['exports']=function(_0x485566,_0x5694fa){return _0x485566['define'](_0xd5c5('0xa'),attributes,{'tableName':'report_sms_queue','paranoid':![],'indexes':[{'name':_0xd5c5('0xb'),'fields':[_0xd5c5('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index 7b06c0d..96ef4d2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c9f=['body','options','debug','UpdateSmsQueueReport','update','raw','where','attributes','limit','stringify','catch','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','SmsQueueReport,\x20%s,\x20%s','request\x20sent','SmsQueueReport,\x20%s,\x20%s,\x20%s','error','message','result','CreateSmsQueueReport','SmsQueueReport','create'];(function(_0x3d62fa,_0x39022c){var _0x521629=function(_0x512234){while(--_0x512234){_0x3d62fa['push'](_0x3d62fa['shift']());}};_0x521629(++_0x39022c);}(_0x9c9f,0xd1));var _0xf9c9=function(_0x36b503,_0x31364a){_0x36b503=_0x36b503-0x0;var _0x1c2c30=_0x9c9f[_0x36b503];return _0x1c2c30;};'use strict';var _=require(_0xf9c9('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xf9c9('0x1'));var rs=require(_0xf9c9('0x2'));var fs=require('fs');var Redis=require(_0xf9c9('0x3'));var db=require(_0xf9c9('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xf9c9('0x5'))(_0xf9c9('0x6'));var config=require(_0xf9c9('0x7'));var jayson=require(_0xf9c9('0x8'));var client=jayson[_0xf9c9('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1cada1,_0x16b032,_0x8ea905){return new BPromise(function(_0x13e2b9,_0x7dc248){return client[_0xf9c9('0xa')](_0x1cada1,_0x8ea905)[_0xf9c9('0xb')](function(_0x1fca0c){logger[_0xf9c9('0xc')](_0xf9c9('0xd'),_0x16b032,_0xf9c9('0xe'));logger['debug'](_0xf9c9('0xf'),_0x16b032,_0xf9c9('0xe'),JSON['stringify'](_0x1fca0c));if(_0x1fca0c['error']){if(_0x1fca0c[_0xf9c9('0x10')]['code']===0x1f4){logger[_0xf9c9('0x10')]('SmsQueueReport,\x20%s,\x20%s',_0x16b032,_0x1fca0c['error']['message']);return _0x7dc248(_0x1fca0c['error'][_0xf9c9('0x11')]);}logger['error']('SmsQueueReport,\x20%s,\x20%s',_0x16b032,_0x1fca0c[_0xf9c9('0x10')]['message']);return _0x13e2b9(_0x1fca0c[_0xf9c9('0x10')][_0xf9c9('0x11')]);}else{logger[_0xf9c9('0xc')](_0xf9c9('0xd'),_0x16b032,_0xf9c9('0xe'));_0x13e2b9(_0x1fca0c[_0xf9c9('0x12')][_0xf9c9('0x11')]);}})['catch'](function(_0x108f1e){logger[_0xf9c9('0x10')](_0xf9c9('0xd'),_0x16b032,_0x108f1e);_0x7dc248(_0x108f1e);});});}exports[_0xf9c9('0x13')]=function(_0x478458){var _0x2b54ec=this;return new Promise(function(_0x10aa4d,_0x4e3760){return db[_0xf9c9('0x14')][_0xf9c9('0x15')](_0x478458[_0xf9c9('0x16')],{'raw':_0x478458[_0xf9c9('0x17')]?_0x478458[_0xf9c9('0x17')]['raw']===undefined?!![]:![]:!![]})[_0xf9c9('0xb')](function(_0xbc3969){logger['info'](_0xf9c9('0x13'),_0x478458);logger[_0xf9c9('0x18')](_0xf9c9('0x13'),_0x478458,JSON['stringify'](_0xbc3969));_0x10aa4d(_0xbc3969);})['catch'](function(_0x33e44f){logger[_0xf9c9('0x10')](_0xf9c9('0x13'),_0x33e44f['message'],_0x478458);_0x4e3760(_0x2b54ec[_0xf9c9('0x10')](0x1f4,_0x33e44f[_0xf9c9('0x11')]));});});};exports[_0xf9c9('0x19')]=function(_0xda99b7){var _0x3604ea=this;return new Promise(function(_0x16dcd7,_0x4c9843){return db[_0xf9c9('0x14')][_0xf9c9('0x1a')](_0xda99b7[_0xf9c9('0x16')],{'raw':_0xda99b7[_0xf9c9('0x17')]?_0xda99b7['options'][_0xf9c9('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0xda99b7['options']?_0xda99b7[_0xf9c9('0x17')][_0xf9c9('0x1c')]||null:null,'attributes':_0xda99b7['options']?_0xda99b7[_0xf9c9('0x17')][_0xf9c9('0x1d')]||null:null,'limit':_0xda99b7[_0xf9c9('0x17')]?_0xda99b7[_0xf9c9('0x17')][_0xf9c9('0x1e')]||null:null})[_0xf9c9('0xb')](function(_0x4c41be){logger[_0xf9c9('0xc')](_0xf9c9('0x19'),_0xda99b7);logger[_0xf9c9('0x18')](_0xf9c9('0x19'),_0xda99b7,JSON[_0xf9c9('0x1f')](_0x4c41be));_0x16dcd7(_0x4c41be);})[_0xf9c9('0x20')](function(_0x3f52d3){logger[_0xf9c9('0x10')](_0xf9c9('0x19'),_0x3f52d3[_0xf9c9('0x11')],_0xda99b7);_0x4c9843(_0x3604ea[_0xf9c9('0x10')](0x1f4,_0x3f52d3[_0xf9c9('0x11')]));});});};
\ No newline at end of file
+var _0x9c07=['catch','UpdateSmsQueueReport','update','options','where','attributes','limit','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','request','then','info','request\x20sent','debug','SmsQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','SmsQueueReport,\x20%s,\x20%s','message','CreateSmsQueueReport','SmsQueueReport','create','body'];(function(_0x2a6147,_0x28c1ac){var _0xbc97a7=function(_0x4f4f1b){while(--_0x4f4f1b){_0x2a6147['push'](_0x2a6147['shift']());}};_0xbc97a7(++_0x28c1ac);}(_0x9c07,0x8b));var _0x79c0=function(_0x5263f2,_0x38a8d5){_0x5263f2=_0x5263f2-0x0;var _0x51c392=_0x9c07[_0x5263f2];return _0x51c392;};'use strict';var _=require(_0x79c0('0x0'));var util=require(_0x79c0('0x1'));var moment=require(_0x79c0('0x2'));var BPromise=require('bluebird');var rs=require(_0x79c0('0x3'));var fs=require('fs');var Redis=require(_0x79c0('0x4'));var db=require(_0x79c0('0x5'))['db'];var utils=require(_0x79c0('0x6'));var logger=require(_0x79c0('0x7'))(_0x79c0('0x8'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x79c0('0x9')][_0x79c0('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x24bc41,_0x5261b2,_0x4b9795){return new BPromise(function(_0x123ebe,_0x25c8b5){return client[_0x79c0('0xb')](_0x24bc41,_0x4b9795)[_0x79c0('0xc')](function(_0x9febc4){logger[_0x79c0('0xd')]('SmsQueueReport,\x20%s,\x20%s',_0x5261b2,_0x79c0('0xe'));logger[_0x79c0('0xf')](_0x79c0('0x10'),_0x5261b2,_0x79c0('0xe'),JSON[_0x79c0('0x11')](_0x9febc4));if(_0x9febc4[_0x79c0('0x12')]){if(_0x9febc4[_0x79c0('0x12')][_0x79c0('0x13')]===0x1f4){logger[_0x79c0('0x12')](_0x79c0('0x14'),_0x5261b2,_0x9febc4[_0x79c0('0x12')][_0x79c0('0x15')]);return _0x25c8b5(_0x9febc4[_0x79c0('0x12')][_0x79c0('0x15')]);}logger[_0x79c0('0x12')](_0x79c0('0x14'),_0x5261b2,_0x9febc4['error']['message']);return _0x123ebe(_0x9febc4[_0x79c0('0x12')][_0x79c0('0x15')]);}else{logger[_0x79c0('0xd')](_0x79c0('0x14'),_0x5261b2,'request\x20sent');_0x123ebe(_0x9febc4['result']['message']);}})['catch'](function(_0x49e001){logger[_0x79c0('0x12')](_0x79c0('0x14'),_0x5261b2,_0x49e001);_0x25c8b5(_0x49e001);});});}exports[_0x79c0('0x16')]=function(_0xb3dc9e){var _0x2aae1a=this;return new Promise(function(_0x200279,_0x4a8cdc){return db[_0x79c0('0x17')][_0x79c0('0x18')](_0xb3dc9e[_0x79c0('0x19')],{'raw':_0xb3dc9e['options']?_0xb3dc9e['options']['raw']===undefined?!![]:![]:!![]})['then'](function(_0xeebeda){logger[_0x79c0('0xd')](_0x79c0('0x16'),_0xb3dc9e);logger[_0x79c0('0xf')](_0x79c0('0x16'),_0xb3dc9e,JSON[_0x79c0('0x11')](_0xeebeda));_0x200279(_0xeebeda);})[_0x79c0('0x1a')](function(_0x48c57d){logger['error'](_0x79c0('0x16'),_0x48c57d[_0x79c0('0x15')],_0xb3dc9e);_0x4a8cdc(_0x2aae1a[_0x79c0('0x12')](0x1f4,_0x48c57d[_0x79c0('0x15')]));});});};exports[_0x79c0('0x1b')]=function(_0x36c1b4){var _0x37449f=this;return new Promise(function(_0x411630,_0x3dbaf6){return db['SmsQueueReport'][_0x79c0('0x1c')](_0x36c1b4[_0x79c0('0x19')],{'raw':_0x36c1b4[_0x79c0('0x1d')]?_0x36c1b4['options']['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x36c1b4['options']?_0x36c1b4['options'][_0x79c0('0x1e')]||null:null,'attributes':_0x36c1b4[_0x79c0('0x1d')]?_0x36c1b4['options'][_0x79c0('0x1f')]||null:null,'limit':_0x36c1b4[_0x79c0('0x1d')]?_0x36c1b4[_0x79c0('0x1d')][_0x79c0('0x20')]||null:null})[_0x79c0('0xc')](function(_0x5f50a1){logger[_0x79c0('0xd')](_0x79c0('0x1b'),_0x36c1b4);logger[_0x79c0('0xf')]('UpdateSmsQueueReport',_0x36c1b4,JSON['stringify'](_0x5f50a1));_0x411630(_0x5f50a1);})[_0x79c0('0x1a')](function(_0x55691d){logger[_0x79c0('0x12')](_0x79c0('0x1b'),_0x55691d[_0x79c0('0x15')],_0x36c1b4);_0x3dbaf6(_0x37449f[_0x79c0('0x12')](0x1f4,_0x55691d[_0x79c0('0x15')]));});});};
\ No newline at end of file
index b61bdc2..aec71ec 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9b97=['exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','index','/describe','/:id','show','post','put','update','delete','destroy'];(function(_0x2a3d1f,_0x15ae1e){var _0x4ccd89=function(_0x43a17c){while(--_0x43a17c){_0x2a3d1f['push'](_0x2a3d1f['shift']());}};_0x4ccd89(++_0x15ae1e);}(_0x9b97,0x11e));var _0x79b9=function(_0x24fd40,_0x4d05ac){_0x24fd40=_0x24fd40-0x0;var _0x164173=_0x9b97[_0x24fd40];return _0x164173;};'use strict';var multer=require(_0x79b9('0x0'));var util=require('util');var path=require(_0x79b9('0x1'));var timeout=require(_0x79b9('0x2'));var express=require(_0x79b9('0x3'));var router=express[_0x79b9('0x4')]();var auth=require(_0x79b9('0x5'));var interaction=require(_0x79b9('0x6'));var config=require('../../config/environment');var controller=require('./smsTransferReport.controller');router[_0x79b9('0x7')]('/',auth[_0x79b9('0x8')](),controller[_0x79b9('0x9')]);router['get'](_0x79b9('0xa'),auth[_0x79b9('0x8')](),controller['describe']);router[_0x79b9('0x7')](_0x79b9('0xb'),auth[_0x79b9('0x8')](),controller[_0x79b9('0xc')]);router[_0x79b9('0xd')]('/',auth['isAuthenticated'](),controller['create']);router[_0x79b9('0xe')](_0x79b9('0xb'),auth[_0x79b9('0x8')](),controller[_0x79b9('0xf')]);router[_0x79b9('0x10')](_0x79b9('0xb'),auth[_0x79b9('0x8')](),controller[_0x79b9('0x11')]);module[_0x79b9('0x12')]=router;
\ No newline at end of file
+var _0x5a71=['update','destroy','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','describe','show','create','put','/:id'];(function(_0x2153fa,_0x183920){var _0x53ce89=function(_0x4a3eb0){while(--_0x4a3eb0){_0x2153fa['push'](_0x2153fa['shift']());}};_0x53ce89(++_0x183920);}(_0x5a71,0x8e));var _0x15a7=function(_0x565eae,_0x176003){_0x565eae=_0x565eae-0x0;var _0x38744d=_0x5a71[_0x565eae];return _0x38744d;};'use strict';var multer=require(_0x15a7('0x0'));var util=require(_0x15a7('0x1'));var path=require(_0x15a7('0x2'));var timeout=require(_0x15a7('0x3'));var express=require(_0x15a7('0x4'));var router=express[_0x15a7('0x5')]();var auth=require(_0x15a7('0x6'));var interaction=require(_0x15a7('0x7'));var config=require(_0x15a7('0x8'));var controller=require('./smsTransferReport.controller');router[_0x15a7('0x9')]('/',auth[_0x15a7('0xa')](),controller[_0x15a7('0xb')]);router['get'](_0x15a7('0xc'),auth[_0x15a7('0xa')](),controller[_0x15a7('0xd')]);router[_0x15a7('0x9')]('/:id',auth[_0x15a7('0xa')](),controller[_0x15a7('0xe')]);router['post']('/',auth[_0x15a7('0xa')](),controller[_0x15a7('0xf')]);router[_0x15a7('0x10')](_0x15a7('0x11'),auth[_0x15a7('0xa')](),controller[_0x15a7('0x12')]);router['delete']('/:id',auth['isAuthenticated'](),controller[_0x15a7('0x13')]);module['exports']=router;
\ No newline at end of file
index d7e1ac8..840bf6a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5cc5=['exports','ENUM','account','DATE','NOW','moment','sequelize'];(function(_0x3c5e8b,_0x17513d){var _0x1784b6=function(_0x31cb23){while(--_0x31cb23){_0x3c5e8b['push'](_0x3c5e8b['shift']());}};_0x1784b6(++_0x17513d);}(_0x5cc5,0xfa));var _0x55cc=function(_0x2601b4,_0x315e78){_0x2601b4=_0x2601b4-0x0;var _0x3e3661=_0x5cc5[_0x2601b4];return _0x3e3661;};'use strict';var moment=require(_0x55cc('0x0'));var Sequelize=require(_0x55cc('0x1'));module[_0x55cc('0x2')]={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'type':{'type':Sequelize[_0x55cc('0x3')](_0x55cc('0x4'),'agent','queue'),'allowNull':![],'defaultValue':'queue'},'transferredAt':{'type':Sequelize[_0x55cc('0x5')],'allowNull':![],'defaultValue':Sequelize[_0x55cc('0x6')]}};
\ No newline at end of file
+var _0xfd3e=['account','queue','DATE','NOW','moment','STRING','ENUM'];(function(_0x5ac42d,_0x32e66d){var _0x382d90=function(_0x37b22d){while(--_0x37b22d){_0x5ac42d['push'](_0x5ac42d['shift']());}};_0x382d90(++_0x32e66d);}(_0xfd3e,0x11c));var _0xefd3=function(_0x52bcdd,_0x4b218e){_0x52bcdd=_0x52bcdd-0x0;var _0x5a1985=_0xfd3e[_0x52bcdd];return _0x5a1985;};'use strict';var moment=require(_0xefd3('0x0'));var Sequelize=require('sequelize');module['exports']={'uniqueid':{'type':Sequelize[_0xefd3('0x1')],'allowNull':![]},'type':{'type':Sequelize[_0xefd3('0x2')](_0xefd3('0x3'),'agent',_0xefd3('0x4')),'allowNull':![],'defaultValue':'queue'},'transferredAt':{'type':Sequelize[_0xefd3('0x5')],'allowNull':![],'defaultValue':Sequelize[_0xefd3('0x6')]}};
\ No newline at end of file
index a48538b..19a0bdf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5162=['Content-Range','apply','reject','save','update','then','sendStatus','error','stack','name','send','index','SmsTransferReport','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','pick','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','destroy','describe','html-pdf','request-promise','moment','bluebird','mustache','util','path','sox','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../mysqldb','status','end','json','count','offset','limit'];(function(_0x5f3309,_0x37871b){var _0xea65ec=function(_0x4fbe43){while(--_0x4fbe43){_0x5f3309['push'](_0x5f3309['shift']());}};_0xea65ec(++_0x37871b);}(_0x5162,0x103));var _0x2516=function(_0x11c221,_0x65c6a5){_0x11c221=_0x11c221-0x0;var _0x26deef=_0x5162[_0x11c221];return _0x26deef;};'use strict';var pdf=require(_0x2516('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x2516('0x1'));var moment=require(_0x2516('0x2'));var BPromise=require(_0x2516('0x3'));var Mustache=require(_0x2516('0x4'));var util=require(_0x2516('0x5'));var path=require(_0x2516('0x6'));var sox=require(_0x2516('0x7'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x2516('0x8'));var crypto=require(_0x2516('0x9'));var jsforce=require(_0x2516('0xa'));var deskjs=require(_0x2516('0xb'));var toCsv=require(_0x2516('0xc'));var querystring=require(_0x2516('0xd'));var Papa=require(_0x2516('0xe'));var Redis=require('ioredis');var authService=require(_0x2516('0xf'));var qs=require(_0x2516('0x10'));var hardwareService=require(_0x2516('0x11'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x2516('0x12'))['db'];function respondWithStatusCode(_0x3c7762,_0x310d1a){_0x310d1a=_0x310d1a||0xcc;return function(_0x3ef6ff){if(_0x3ef6ff){return _0x3c7762['sendStatus'](_0x310d1a);}return _0x3c7762[_0x2516('0x13')](_0x310d1a)[_0x2516('0x14')]();};}function respondWithResult(_0x171da2,_0xb28714){_0xb28714=_0xb28714||0xc8;return function(_0x42c771){if(_0x42c771){return _0x171da2[_0x2516('0x13')](_0xb28714)[_0x2516('0x15')](_0x42c771);}};}function respondWithFilteredResult(_0x2edb47,_0x1b3c7e){return function(_0x181a28){if(_0x181a28){var _0x2637e8=_0x181a28[_0x2516('0x16')],_0x2ec31f=_0x1b3c7e['offset'],_0x19aacb=_0x1b3c7e[_0x2516('0x17')]+_0x1b3c7e[_0x2516('0x18')],_0x5dee15;if(_0x19aacb>=_0x2637e8){_0x19aacb=_0x2637e8;_0x5dee15=0xc8;}else{_0x5dee15=0xce;}_0x2edb47[_0x2516('0x13')](_0x5dee15);return _0x2edb47['set'](_0x2516('0x19'),_0x2ec31f+'-'+_0x19aacb+'/'+_0x2637e8)['json'](_0x181a28);}return null;};}function patchUpdates(_0x532d46){return function(_0x31a817){try{jsonpatch[_0x2516('0x1a')](_0x31a817,_0x532d46,!![]);}catch(_0x151168){return BPromise[_0x2516('0x1b')](_0x151168);}return _0x31a817[_0x2516('0x1c')]();};}function saveUpdates(_0x42ba50,_0x2bf0ee){return function(_0x113616){if(_0x113616){return _0x113616[_0x2516('0x1d')](_0x42ba50)[_0x2516('0x1e')](function(_0x39ba5b){return _0x39ba5b;});}return null;};}function removeEntity(_0x11e78b,_0x1b0831){return function(_0x4fb7d9){if(_0x4fb7d9){return _0x4fb7d9['destroy']()[_0x2516('0x1e')](function(){_0x11e78b[_0x2516('0x13')](0xcc)[_0x2516('0x14')]();});}};}function handleEntityNotFound(_0x2d5b1b,_0x3ffb6d){return function(_0x32de7a){if(!_0x32de7a){_0x2d5b1b[_0x2516('0x1f')](0x194);}return _0x32de7a;};}function handleError(_0x950477,_0x4b1d4f){_0x4b1d4f=_0x4b1d4f||0x1f4;return function(_0xa4538d){logger[_0x2516('0x20')](_0xa4538d[_0x2516('0x21')]);if(_0xa4538d[_0x2516('0x22')]){delete _0xa4538d['name'];}_0x950477[_0x2516('0x13')](_0x4b1d4f)[_0x2516('0x23')](_0xa4538d);};}exports[_0x2516('0x24')]=function(_0x3d728a,_0xd84b29){var _0x4a3dc8={},_0x3c5c3c={},_0x1750e7={'count':0x0,'rows':[]};var _0x935035=db[_0x2516('0x25')][_0x2516('0x26')];_0x3c5c3c[_0x2516('0x27')]=_['keys'](_0x935035);_0x3c5c3c[_0x2516('0x28')]=_[_0x2516('0x29')](_0x3d728a['query']);_0x3c5c3c[_0x2516('0x2a')]=_[_0x2516('0x2b')](_0x3c5c3c[_0x2516('0x27')],_0x3c5c3c[_0x2516('0x28')]);_0x4a3dc8[_0x2516('0x2c')]=_[_0x2516('0x2b')](_0x3c5c3c[_0x2516('0x27')],qs[_0x2516('0x2d')](_0x3d728a[_0x2516('0x28')][_0x2516('0x2d')]));_0x4a3dc8[_0x2516('0x2c')]=_0x4a3dc8[_0x2516('0x2c')][_0x2516('0x2e')]?_0x4a3dc8[_0x2516('0x2c')]:_0x3c5c3c[_0x2516('0x27')];if(!_0x3d728a['query'][_0x2516('0x2f')]('nolimit')){_0x4a3dc8[_0x2516('0x18')]=qs['limit'](_0x3d728a[_0x2516('0x28')]['limit']);_0x4a3dc8[_0x2516('0x17')]=qs[_0x2516('0x17')](_0x3d728a[_0x2516('0x28')][_0x2516('0x17')]);}_0x4a3dc8[_0x2516('0x30')]=qs[_0x2516('0x31')](_0x3d728a[_0x2516('0x28')][_0x2516('0x31')]);_0x4a3dc8[_0x2516('0x32')]=qs['filters'](_[_0x2516('0x33')](_0x3d728a[_0x2516('0x28')],_0x3c5c3c[_0x2516('0x2a')]));if(_0x3d728a[_0x2516('0x28')]['filter']){_0x4a3dc8['where']=_[_0x2516('0x34')](_0x4a3dc8[_0x2516('0x32')],{'$or':_[_0x2516('0x35')](_0x935035,function(_0x1d9b16){if(_0x1d9b16[_0x2516('0x36')][_0x2516('0x37')]!==_0x2516('0x38')){var _0x1bc9ee={};_0x1bc9ee[_0x1d9b16[_0x2516('0x39')]]={'$like':'%'+_0x3d728a[_0x2516('0x28')]['filter']+'%'};return _0x1bc9ee;}})});}_0x4a3dc8=_['merge']({},_0x4a3dc8,_0x3d728a[_0x2516('0x3a')]);var _0x322021={'where':_0x4a3dc8['where']};return db['SmsTransferReport'][_0x2516('0x16')](_0x322021)[_0x2516('0x1e')](function(_0x47cf10){_0x1750e7[_0x2516('0x16')]=_0x47cf10;if(_0x3d728a['query'][_0x2516('0x3b')]){_0x4a3dc8[_0x2516('0x3c')]=[{'all':!![]}];}return db['SmsTransferReport'][_0x2516('0x3d')](_0x4a3dc8);})[_0x2516('0x1e')](function(_0x155cf7){_0x1750e7[_0x2516('0x3e')]=_0x155cf7;return _0x1750e7;})[_0x2516('0x1e')](respondWithFilteredResult(_0xd84b29,_0x4a3dc8))[_0x2516('0x3f')](handleError(_0xd84b29,null));};exports[_0x2516('0x40')]=function(_0x2371a8,_0x346e31){var _0xc1c0fb={'raw':!![],'where':{'id':_0x2371a8[_0x2516('0x41')]['id']}},_0x38ca2e={};_0x38ca2e[_0x2516('0x27')]=_['keys'](db[_0x2516('0x25')][_0x2516('0x26')]);_0x38ca2e['query']=_[_0x2516('0x29')](_0x2371a8[_0x2516('0x28')]);_0x38ca2e[_0x2516('0x2a')]=_[_0x2516('0x2b')](_0x38ca2e[_0x2516('0x27')],_0x38ca2e['query']);_0xc1c0fb[_0x2516('0x2c')]=_[_0x2516('0x2b')](_0x38ca2e[_0x2516('0x27')],qs[_0x2516('0x2d')](_0x2371a8[_0x2516('0x28')][_0x2516('0x2d')]));_0xc1c0fb['attributes']=_0xc1c0fb[_0x2516('0x2c')][_0x2516('0x2e')]?_0xc1c0fb[_0x2516('0x2c')]:_0x38ca2e[_0x2516('0x27')];if(_0x2371a8[_0x2516('0x28')][_0x2516('0x3b')]){_0xc1c0fb[_0x2516('0x3c')]=[{'all':!![]}];}_0xc1c0fb=_['merge']({},_0xc1c0fb,_0x2371a8[_0x2516('0x3a')]);return db['SmsTransferReport'][_0x2516('0x42')](_0xc1c0fb)['then'](handleEntityNotFound(_0x346e31,null))[_0x2516('0x1e')](respondWithResult(_0x346e31,null))[_0x2516('0x3f')](handleError(_0x346e31,null));};exports[_0x2516('0x43')]=function(_0x47f9a0,_0x4a2de3){return db[_0x2516('0x25')][_0x2516('0x43')](_0x47f9a0['body'],{})['then'](respondWithResult(_0x4a2de3,0xc9))[_0x2516('0x3f')](handleError(_0x4a2de3,null));};exports[_0x2516('0x1d')]=function(_0x34f3d5,_0x53e61c){if(_0x34f3d5[_0x2516('0x44')]['id']){delete _0x34f3d5['body']['id'];}return db[_0x2516('0x25')][_0x2516('0x42')]({'where':{'id':_0x34f3d5[_0x2516('0x41')]['id']}})[_0x2516('0x1e')](handleEntityNotFound(_0x53e61c,null))['then'](saveUpdates(_0x34f3d5[_0x2516('0x44')],null))[_0x2516('0x1e')](respondWithResult(_0x53e61c,null))[_0x2516('0x3f')](handleError(_0x53e61c,null));};exports[_0x2516('0x45')]=function(_0x43874c,_0x482883){return db[_0x2516('0x25')][_0x2516('0x42')]({'where':{'id':_0x43874c[_0x2516('0x41')]['id']}})[_0x2516('0x1e')](handleEntityNotFound(_0x482883,null))['then'](removeEntity(_0x482883,null))[_0x2516('0x3f')](handleError(_0x482883,null));};exports[_0x2516('0x46')]=function(_0x19b57a,_0x41b716){return db[_0x2516('0x25')]['describe']()[_0x2516('0x1e')](respondWithResult(_0x41b716,null))[_0x2516('0x3f')](handleError(_0x41b716,null));};
\ No newline at end of file
+var _0x24ca=['bluebird','util','path','sox','squel','crypto','jsforce','desk.js','to-csv','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','end','status','count','offset','limit','set','Content-Range','json','apply','reject','update','then','destroy','sendStatus','error','stack','name','send','index','SmsTransferReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','merge','map','type','VIRTUAL','field','filter','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','describe','html-pdf','zip-dir','request-promise','moment'];(function(_0x3b567d,_0xbb094a){var _0xa0382=function(_0x3b2fbd){while(--_0x3b2fbd){_0x3b567d['push'](_0x3b567d['shift']());}};_0xa0382(++_0xbb094a);}(_0x24ca,0x8c));var _0xa24c=function(_0x118653,_0x50ef26){_0x118653=_0x118653-0x0;var _0xc11fa6=_0x24ca[_0x118653];return _0xc11fa6;};'use strict';var pdf=require(_0xa24c('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xa24c('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0xa24c('0x2'));var moment=require(_0xa24c('0x3'));var BPromise=require(_0xa24c('0x4'));var Mustache=require('mustache');var util=require(_0xa24c('0x5'));var path=require(_0xa24c('0x6'));var sox=require(_0xa24c('0x7'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xa24c('0x8'));var crypto=require(_0xa24c('0x9'));var jsforce=require(_0xa24c('0xa'));var deskjs=require(_0xa24c('0xb'));var toCsv=require(_0xa24c('0xc'));var querystring=require(_0xa24c('0xd'));var Papa=require('papaparse');var Redis=require(_0xa24c('0xe'));var authService=require(_0xa24c('0xf'));var qs=require(_0xa24c('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xa24c('0x11'));var utils=require(_0xa24c('0x12'));var config=require(_0xa24c('0x13'));var db=require(_0xa24c('0x14'))['db'];function respondWithStatusCode(_0xbaf0be,_0x1d06da){_0x1d06da=_0x1d06da||0xcc;return function(_0x566313){if(_0x566313){return _0xbaf0be['sendStatus'](_0x1d06da);}return _0xbaf0be['status'](_0x1d06da)[_0xa24c('0x15')]();};}function respondWithResult(_0x23bd58,_0x337c8a){_0x337c8a=_0x337c8a||0xc8;return function(_0x9fe9e3){if(_0x9fe9e3){return _0x23bd58[_0xa24c('0x16')](_0x337c8a)['json'](_0x9fe9e3);}};}function respondWithFilteredResult(_0x13076d,_0x488a78){return function(_0x493bcb){if(_0x493bcb){var _0x588acf=_0x493bcb[_0xa24c('0x17')],_0x2e8dc9=_0x488a78[_0xa24c('0x18')],_0x2a4270=_0x488a78[_0xa24c('0x18')]+_0x488a78[_0xa24c('0x19')],_0x3f762e;if(_0x2a4270>=_0x588acf){_0x2a4270=_0x588acf;_0x3f762e=0xc8;}else{_0x3f762e=0xce;}_0x13076d[_0xa24c('0x16')](_0x3f762e);return _0x13076d[_0xa24c('0x1a')](_0xa24c('0x1b'),_0x2e8dc9+'-'+_0x2a4270+'/'+_0x588acf)[_0xa24c('0x1c')](_0x493bcb);}return null;};}function patchUpdates(_0x1a667b){return function(_0x278cce){try{jsonpatch[_0xa24c('0x1d')](_0x278cce,_0x1a667b,!![]);}catch(_0x5276b6){return BPromise[_0xa24c('0x1e')](_0x5276b6);}return _0x278cce['save']();};}function saveUpdates(_0x98802d,_0xf9f8bd){return function(_0x8c3949){if(_0x8c3949){return _0x8c3949[_0xa24c('0x1f')](_0x98802d)[_0xa24c('0x20')](function(_0x416dea){return _0x416dea;});}return null;};}function removeEntity(_0x38dfdc,_0x432c15){return function(_0xba710){if(_0xba710){return _0xba710[_0xa24c('0x21')]()[_0xa24c('0x20')](function(){_0x38dfdc['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x10fa25,_0xdd32a8){return function(_0x316a68){if(!_0x316a68){_0x10fa25[_0xa24c('0x22')](0x194);}return _0x316a68;};}function handleError(_0x375c83,_0xfb13c0){_0xfb13c0=_0xfb13c0||0x1f4;return function(_0x16bd20){logger[_0xa24c('0x23')](_0x16bd20[_0xa24c('0x24')]);if(_0x16bd20['name']){delete _0x16bd20[_0xa24c('0x25')];}_0x375c83['status'](_0xfb13c0)[_0xa24c('0x26')](_0x16bd20);};}exports[_0xa24c('0x27')]=function(_0x471421,_0x1a0769){var _0x54b8a6={},_0x58ff62={},_0x4c86c6={'count':0x0,'rows':[]};var _0x4e5d2c=db[_0xa24c('0x28')][_0xa24c('0x29')];_0x58ff62[_0xa24c('0x2a')]=_[_0xa24c('0x2b')](_0x4e5d2c);_0x58ff62[_0xa24c('0x2c')]=_['keys'](_0x471421['query']);_0x58ff62[_0xa24c('0x2d')]=_[_0xa24c('0x2e')](_0x58ff62[_0xa24c('0x2a')],_0x58ff62[_0xa24c('0x2c')]);_0x54b8a6[_0xa24c('0x2f')]=_[_0xa24c('0x2e')](_0x58ff62[_0xa24c('0x2a')],qs[_0xa24c('0x30')](_0x471421[_0xa24c('0x2c')][_0xa24c('0x30')]));_0x54b8a6['attributes']=_0x54b8a6[_0xa24c('0x2f')][_0xa24c('0x31')]?_0x54b8a6['attributes']:_0x58ff62[_0xa24c('0x2a')];if(!_0x471421[_0xa24c('0x2c')][_0xa24c('0x32')](_0xa24c('0x33'))){_0x54b8a6[_0xa24c('0x19')]=qs[_0xa24c('0x19')](_0x471421[_0xa24c('0x2c')][_0xa24c('0x19')]);_0x54b8a6[_0xa24c('0x18')]=qs[_0xa24c('0x18')](_0x471421['query']['offset']);}_0x54b8a6['order']=qs[_0xa24c('0x34')](_0x471421['query'][_0xa24c('0x34')]);_0x54b8a6[_0xa24c('0x35')]=qs[_0xa24c('0x2d')](_['pick'](_0x471421[_0xa24c('0x2c')],_0x58ff62[_0xa24c('0x2d')]));if(_0x471421[_0xa24c('0x2c')]['filter']){_0x54b8a6[_0xa24c('0x35')]=_[_0xa24c('0x36')](_0x54b8a6['where'],{'$or':_[_0xa24c('0x37')](_0x4e5d2c,function(_0x22fd0f){if(_0x22fd0f[_0xa24c('0x38')]['key']!==_0xa24c('0x39')){var _0x2c63da={};_0x2c63da[_0x22fd0f[_0xa24c('0x3a')]]={'$like':'%'+_0x471421[_0xa24c('0x2c')][_0xa24c('0x3b')]+'%'};return _0x2c63da;}})});}_0x54b8a6=_['merge']({},_0x54b8a6,_0x471421[_0xa24c('0x3c')]);var _0x29d1d0={'where':_0x54b8a6['where']};return db[_0xa24c('0x28')][_0xa24c('0x17')](_0x29d1d0)[_0xa24c('0x20')](function(_0x56fc29){_0x4c86c6['count']=_0x56fc29;if(_0x471421[_0xa24c('0x2c')][_0xa24c('0x3d')]){_0x54b8a6[_0xa24c('0x3e')]=[{'all':!![]}];}return db[_0xa24c('0x28')][_0xa24c('0x3f')](_0x54b8a6);})[_0xa24c('0x20')](function(_0x54ea40){_0x4c86c6[_0xa24c('0x40')]=_0x54ea40;return _0x4c86c6;})[_0xa24c('0x20')](respondWithFilteredResult(_0x1a0769,_0x54b8a6))[_0xa24c('0x41')](handleError(_0x1a0769,null));};exports[_0xa24c('0x42')]=function(_0x5f3cd4,_0x34026c){var _0x190dfc={'raw':!![],'where':{'id':_0x5f3cd4[_0xa24c('0x43')]['id']}},_0x20390c={};_0x20390c[_0xa24c('0x2a')]=_[_0xa24c('0x2b')](db[_0xa24c('0x28')]['rawAttributes']);_0x20390c['query']=_[_0xa24c('0x2b')](_0x5f3cd4['query']);_0x20390c[_0xa24c('0x2d')]=_['intersection'](_0x20390c[_0xa24c('0x2a')],_0x20390c[_0xa24c('0x2c')]);_0x190dfc[_0xa24c('0x2f')]=_[_0xa24c('0x2e')](_0x20390c[_0xa24c('0x2a')],qs[_0xa24c('0x30')](_0x5f3cd4[_0xa24c('0x2c')][_0xa24c('0x30')]));_0x190dfc[_0xa24c('0x2f')]=_0x190dfc[_0xa24c('0x2f')][_0xa24c('0x31')]?_0x190dfc[_0xa24c('0x2f')]:_0x20390c[_0xa24c('0x2a')];if(_0x5f3cd4[_0xa24c('0x2c')][_0xa24c('0x3d')]){_0x190dfc[_0xa24c('0x3e')]=[{'all':!![]}];}_0x190dfc=_['merge']({},_0x190dfc,_0x5f3cd4[_0xa24c('0x3c')]);return db[_0xa24c('0x28')][_0xa24c('0x44')](_0x190dfc)['then'](handleEntityNotFound(_0x34026c,null))[_0xa24c('0x20')](respondWithResult(_0x34026c,null))[_0xa24c('0x41')](handleError(_0x34026c,null));};exports[_0xa24c('0x45')]=function(_0x3bba45,_0x4d8b8e){return db[_0xa24c('0x28')][_0xa24c('0x45')](_0x3bba45[_0xa24c('0x46')],{})[_0xa24c('0x20')](respondWithResult(_0x4d8b8e,0xc9))[_0xa24c('0x41')](handleError(_0x4d8b8e,null));};exports[_0xa24c('0x1f')]=function(_0x3a72ea,_0x11580f){if(_0x3a72ea[_0xa24c('0x46')]['id']){delete _0x3a72ea[_0xa24c('0x46')]['id'];}return db[_0xa24c('0x28')][_0xa24c('0x44')]({'where':{'id':_0x3a72ea[_0xa24c('0x43')]['id']}})['then'](handleEntityNotFound(_0x11580f,null))[_0xa24c('0x20')](saveUpdates(_0x3a72ea['body'],null))[_0xa24c('0x20')](respondWithResult(_0x11580f,null))[_0xa24c('0x41')](handleError(_0x11580f,null));};exports[_0xa24c('0x21')]=function(_0x1641b8,_0xd4761e){return db[_0xa24c('0x28')][_0xa24c('0x44')]({'where':{'id':_0x1641b8[_0xa24c('0x43')]['id']}})[_0xa24c('0x20')](handleEntityNotFound(_0xd4761e,null))[_0xa24c('0x20')](removeEntity(_0xd4761e,null))[_0xa24c('0x41')](handleError(_0xd4761e,null));};exports[_0xa24c('0x47')]=function(_0x14c813,_0x5974b3){return db[_0xa24c('0x28')][_0xa24c('0x47')]()[_0xa24c('0x20')](respondWithResult(_0x5974b3,null))[_0xa24c('0x41')](handleError(_0x5974b3,null));};
\ No newline at end of file
index 4fef517..65ddabb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2a89=['rimraf','../../config/environment','exports','SmsTransferReport','report_sms_transfer','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x174b7a,_0x264194){var _0x5afe3d=function(_0x49e308){while(--_0x49e308){_0x174b7a['push'](_0x174b7a['shift']());}};_0x5afe3d(++_0x264194);}(_0x2a89,0x13d));var _0x92a8=function(_0xd83772,_0x36e2bd){_0xd83772=_0xd83772-0x0;var _0x1dfcb2=_0x2a89[_0xd83772];return _0x1dfcb2;};'use strict';var _=require(_0x92a8('0x0'));var util=require(_0x92a8('0x1'));var logger=require(_0x92a8('0x2'))(_0x92a8('0x3'));var moment=require(_0x92a8('0x4'));var BPromise=require(_0x92a8('0x5'));var rp=require(_0x92a8('0x6'));var fs=require('fs');var path=require('path');var rimraf=require(_0x92a8('0x7'));var config=require(_0x92a8('0x8'));var attributes=require('./smsTransferReport.attributes');module[_0x92a8('0x9')]=function(_0x4b756b,_0x123d94){return _0x4b756b['define'](_0x92a8('0xa'),attributes,{'tableName':_0x92a8('0xb'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0xd124=['../../config/environment','./smsTransferReport.attributes','define','SmsTransferReport','report_sms_transfer','uniqueid','lodash','util','bluebird','request-promise','path','rimraf'];(function(_0x23a673,_0x31e4bc){var _0x2213b7=function(_0x3c5dcc){while(--_0x3c5dcc){_0x23a673['push'](_0x23a673['shift']());}};_0x2213b7(++_0x31e4bc);}(_0xd124,0x126));var _0x4d12=function(_0x1cc0a9,_0x42e77b){_0x1cc0a9=_0x1cc0a9-0x0;var _0x32e4f0=_0xd124[_0x1cc0a9];return _0x32e4f0;};'use strict';var _=require(_0x4d12('0x0'));var util=require(_0x4d12('0x1'));var logger=require('../../config/logger')('api');var moment=require('moment');var BPromise=require(_0x4d12('0x2'));var rp=require(_0x4d12('0x3'));var fs=require('fs');var path=require(_0x4d12('0x4'));var rimraf=require(_0x4d12('0x5'));var config=require(_0x4d12('0x6'));var attributes=require(_0x4d12('0x7'));module['exports']=function(_0x4cd9fc,_0x44a0b2){return _0x4cd9fc[_0x4d12('0x8')](_0x4d12('0x9'),attributes,{'tableName':_0x4d12('0xa'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x4d12('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index c25ce7d..f13bf2f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeca8=['../../config/environment','jayson/promise','http','then','info','SmsTransferReport,\x20%s,\x20%s','request\x20sent','debug','SmsTransferReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','rpc'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xeca8,0x1f2));var _0x8eca=function(_0x45d082,_0x372701){_0x45d082=_0x45d082-0x0;var _0x43b70d=_0xeca8[_0x45d082];return _0x43b70d;};'use strict';var _=require(_0x8eca('0x0'));var util=require(_0x8eca('0x1'));var moment=require(_0x8eca('0x2'));var BPromise=require(_0x8eca('0x3'));var rs=require(_0x8eca('0x4'));var fs=require('fs');var Redis=require(_0x8eca('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x8eca('0x6'));var logger=require('../../config/logger')(_0x8eca('0x7'));var config=require(_0x8eca('0x8'));var jayson=require(_0x8eca('0x9'));var client=jayson['client'][_0x8eca('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x12c679,_0xe6e3f2,_0x39f40a){return new BPromise(function(_0xedaeca,_0x3b901f){return client['request'](_0x12c679,_0x39f40a)[_0x8eca('0xb')](function(_0x19208c){logger[_0x8eca('0xc')](_0x8eca('0xd'),_0xe6e3f2,_0x8eca('0xe'));logger[_0x8eca('0xf')](_0x8eca('0x10'),_0xe6e3f2,_0x8eca('0xe'),JSON[_0x8eca('0x11')](_0x19208c));if(_0x19208c[_0x8eca('0x12')]){if(_0x19208c['error'][_0x8eca('0x13')]===0x1f4){logger['error'](_0x8eca('0xd'),_0xe6e3f2,_0x19208c[_0x8eca('0x12')]['message']);return _0x3b901f(_0x19208c[_0x8eca('0x12')]['message']);}logger['error']('SmsTransferReport,\x20%s,\x20%s',_0xe6e3f2,_0x19208c[_0x8eca('0x12')][_0x8eca('0x14')]);return _0xedaeca(_0x19208c[_0x8eca('0x12')][_0x8eca('0x14')]);}else{logger[_0x8eca('0xc')](_0x8eca('0xd'),_0xe6e3f2,_0x8eca('0xe'));_0xedaeca(_0x19208c['result'][_0x8eca('0x14')]);}})[_0x8eca('0x15')](function(_0x4b8c67){logger[_0x8eca('0x12')](_0x8eca('0xd'),_0xe6e3f2,_0x4b8c67);_0x3b901f(_0x4b8c67);});});}
\ No newline at end of file
+var _0x5ed9=['stringify','error','code','message','result','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','client','request','info','SmsTransferReport,\x20%s,\x20%s','debug','request\x20sent'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x5ed9,0x1e9));var _0x95ed=function(_0x297fd3,_0x115406){_0x297fd3=_0x297fd3-0x0;var _0x2af381=_0x5ed9[_0x297fd3];return _0x2af381;};'use strict';var _=require(_0x95ed('0x0'));var util=require(_0x95ed('0x1'));var moment=require('moment');var BPromise=require(_0x95ed('0x2'));var rs=require(_0x95ed('0x3'));var fs=require('fs');var Redis=require(_0x95ed('0x4'));var db=require(_0x95ed('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x95ed('0x6'))(_0x95ed('0x7'));var config=require(_0x95ed('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x95ed('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x32bf25,_0xaa1eb1,_0x3753b5){return new BPromise(function(_0x1df51f,_0x46ed43){return client[_0x95ed('0xa')](_0x32bf25,_0x3753b5)['then'](function(_0x2b59f5){logger[_0x95ed('0xb')](_0x95ed('0xc'),_0xaa1eb1,'request\x20sent');logger[_0x95ed('0xd')]('SmsTransferReport,\x20%s,\x20%s,\x20%s',_0xaa1eb1,_0x95ed('0xe'),JSON[_0x95ed('0xf')](_0x2b59f5));if(_0x2b59f5[_0x95ed('0x10')]){if(_0x2b59f5[_0x95ed('0x10')][_0x95ed('0x11')]===0x1f4){logger['error']('SmsTransferReport,\x20%s,\x20%s',_0xaa1eb1,_0x2b59f5[_0x95ed('0x10')][_0x95ed('0x12')]);return _0x46ed43(_0x2b59f5['error']['message']);}logger[_0x95ed('0x10')](_0x95ed('0xc'),_0xaa1eb1,_0x2b59f5[_0x95ed('0x10')][_0x95ed('0x12')]);return _0x1df51f(_0x2b59f5['error'][_0x95ed('0x12')]);}else{logger[_0x95ed('0xb')](_0x95ed('0xc'),_0xaa1eb1,_0x95ed('0xe'));_0x1df51f(_0x2b59f5[_0x95ed('0x13')]['message']);}})[_0x95ed('0x14')](function(_0x54ad78){logger['error']('SmsTransferReport,\x20%s,\x20%s',_0xaa1eb1,_0x54ad78);_0x46ed43(_0x54ad78);});});}
\ No newline at end of file
index 3509847..47c00be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbc15=['../../components/auth/service','../../components/interaction/service','get','isAuthenticated','/:id','show','/:id/download','download','diskStorage','join','root','server/files/sounds/original/','originalname','replace','format','%s-%s%s','basename','extname','now','single','file','create','put','delete','exports','multer','util','path','connect-timeout','express','Router'];(function(_0x49de53,_0x37026f){var _0x1951a5=function(_0x476a27){while(--_0x476a27){_0x49de53['push'](_0x49de53['shift']());}};_0x1951a5(++_0x37026f);}(_0xbc15,0x1cb));var _0x5bc1=function(_0x5ce40c,_0x141492){_0x5ce40c=_0x5ce40c-0x0;var _0xfd84a2=_0xbc15[_0x5ce40c];return _0xfd84a2;};'use strict';var multer=require(_0x5bc1('0x0'));var util=require(_0x5bc1('0x1'));var path=require(_0x5bc1('0x2'));var timeout=require(_0x5bc1('0x3'));var express=require(_0x5bc1('0x4'));var router=express[_0x5bc1('0x5')]();var auth=require(_0x5bc1('0x6'));var interaction=require(_0x5bc1('0x7'));var config=require('../../config/environment');var controller=require('./sound.controller');router[_0x5bc1('0x8')]('/',auth[_0x5bc1('0x9')](),controller['index']);router['get'](_0x5bc1('0xa'),auth[_0x5bc1('0x9')](),controller[_0x5bc1('0xb')]);router[_0x5bc1('0x8')](_0x5bc1('0xc'),auth[_0x5bc1('0x9')](),controller[_0x5bc1('0xd')]);var upload=multer({'storage':multer[_0x5bc1('0xe')]({'destination':function(_0x40e550,_0x3d06e7,_0x598961){_0x598961(null,path[_0x5bc1('0xf')](config[_0x5bc1('0x10')],_0x5bc1('0x11')));},'filename':function(_0x55450c,_0x430f74,_0x10f617){_0x430f74[_0x5bc1('0x12')]=_0x430f74['originalname'][_0x5bc1('0x13')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x10f617(null,util[_0x5bc1('0x14')](_0x5bc1('0x15'),path[_0x5bc1('0x16')](_0x430f74[_0x5bc1('0x12')],path[_0x5bc1('0x17')](_0x430f74[_0x5bc1('0x12')])),Date[_0x5bc1('0x18')](),path[_0x5bc1('0x17')](_0x430f74[_0x5bc1('0x12')])));}})});router['post']('/',upload[_0x5bc1('0x19')](_0x5bc1('0x1a')),controller[_0x5bc1('0x1b')]);router[_0x5bc1('0x1c')](_0x5bc1('0xa'),auth['isAuthenticated'](),controller['update']);router[_0x5bc1('0x1d')]('/:id',auth['isAuthenticated'](),controller[_0x5bc1('0x1d')]);module[_0x5bc1('0x1e')]=router;
\ No newline at end of file
+var _0xe775=['./sound.controller','isAuthenticated','index','get','/:id','show','/:id/download','download','diskStorage','join','root','server/files/sounds/original/','originalname','format','basename','extname','now','post','single','create','put','update','delete','util','path','connect-timeout','express','Router','../../components/auth/service'];(function(_0x335f5d,_0x1bc893){var _0x43c9e4=function(_0x160903){while(--_0x160903){_0x335f5d['push'](_0x335f5d['shift']());}};_0x43c9e4(++_0x1bc893);}(_0xe775,0xff));var _0x5e77=function(_0x44b3bd,_0x44c97d){_0x44b3bd=_0x44b3bd-0x0;var _0x1efc4a=_0xe775[_0x44b3bd];return _0x1efc4a;};'use strict';var multer=require('multer');var util=require(_0x5e77('0x0'));var path=require(_0x5e77('0x1'));var timeout=require(_0x5e77('0x2'));var express=require(_0x5e77('0x3'));var router=express[_0x5e77('0x4')]();var auth=require(_0x5e77('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x5e77('0x6'));router['get']('/',auth[_0x5e77('0x7')](),controller[_0x5e77('0x8')]);router[_0x5e77('0x9')](_0x5e77('0xa'),auth[_0x5e77('0x7')](),controller[_0x5e77('0xb')]);router[_0x5e77('0x9')](_0x5e77('0xc'),auth[_0x5e77('0x7')](),controller[_0x5e77('0xd')]);var upload=multer({'storage':multer[_0x5e77('0xe')]({'destination':function(_0x3f4a08,_0x5f5cb7,_0x37e139){_0x37e139(null,path[_0x5e77('0xf')](config[_0x5e77('0x10')],_0x5e77('0x11')));},'filename':function(_0x3eed6e,_0x4a4193,_0x3cef84){_0x4a4193[_0x5e77('0x12')]=_0x4a4193[_0x5e77('0x12')]['replace'](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x3cef84(null,util[_0x5e77('0x13')]('%s-%s%s',path[_0x5e77('0x14')](_0x4a4193[_0x5e77('0x12')],path[_0x5e77('0x15')](_0x4a4193[_0x5e77('0x12')])),Date[_0x5e77('0x16')](),path[_0x5e77('0x15')](_0x4a4193[_0x5e77('0x12')])));}})});router[_0x5e77('0x17')]('/',upload[_0x5e77('0x18')]('file'),controller[_0x5e77('0x19')]);router[_0x5e77('0x1a')](_0x5e77('0xa'),auth[_0x5e77('0x7')](),controller[_0x5e77('0x1b')]);router[_0x5e77('0x1c')](_0x5e77('0xa'),auth[_0x5e77('0x7')](),controller[_0x5e77('0x1c')]);module['exports']=router;
\ No newline at end of file
index 5aaaf51..99bb3e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc94c=['BIGINT','INTEGER','exports','name','STRING','FLOAT'];(function(_0x15d5ae,_0x38dea2){var _0x3f65c7=function(_0x4eb7f9){while(--_0x4eb7f9){_0x15d5ae['push'](_0x15d5ae['shift']());}};_0x3f65c7(++_0x38dea2);}(_0xc94c,0x194));var _0xcc94=function(_0x5c2d9e,_0x4d9364){_0x5c2d9e=_0x5c2d9e-0x0;var _0x43ea71=_0xc94c[_0x5c2d9e];return _0x43ea71;};'use strict';var Sequelize=require('sequelize');module[_0xcc94('0x0')]={'name':{'type':Sequelize['STRING'],'unique':_0xcc94('0x1'),'allowNull':![]},'save_name':{'type':Sequelize[_0xcc94('0x2')]},'display_name':{'type':Sequelize[_0xcc94('0x2')],'defaultValue':''},'description':{'type':Sequelize[_0xcc94('0x2')]},'original_format':{'type':Sequelize[_0xcc94('0x2')]},'original_duration':{'type':Sequelize[_0xcc94('0x3')]},'original_sampleCount':{'type':Sequelize[_0xcc94('0x4')]},'original_channelCount':{'type':Sequelize[_0xcc94('0x5')]},'original_bitRate':{'type':Sequelize['BIGINT']},'original_sampleRate':{'type':Sequelize['INTEGER']},'converted_format':{'type':Sequelize[_0xcc94('0x2')]},'converted_duration':{'type':Sequelize[_0xcc94('0x3')]},'converted_sampleCount':{'type':Sequelize['BIGINT']},'converted_channelCount':{'type':Sequelize[_0xcc94('0x5')]},'converted_bitRate':{'type':Sequelize[_0xcc94('0x4')]},'converted_sampleRate':{'type':Sequelize[_0xcc94('0x5')]}};
\ No newline at end of file
+var _0x0f06=['exports','STRING','name','FLOAT','BIGINT','INTEGER','sequelize'];(function(_0x2642cb,_0x4b917f){var _0xe6e41=function(_0x281676){while(--_0x281676){_0x2642cb['push'](_0x2642cb['shift']());}};_0xe6e41(++_0x4b917f);}(_0x0f06,0x172));var _0x60f0=function(_0x31b5b2,_0x5ab927){_0x31b5b2=_0x31b5b2-0x0;var _0x364f13=_0x0f06[_0x31b5b2];return _0x364f13;};'use strict';var Sequelize=require(_0x60f0('0x0'));module[_0x60f0('0x1')]={'name':{'type':Sequelize[_0x60f0('0x2')],'unique':_0x60f0('0x3'),'allowNull':![]},'save_name':{'type':Sequelize['STRING']},'display_name':{'type':Sequelize[_0x60f0('0x2')],'defaultValue':''},'description':{'type':Sequelize[_0x60f0('0x2')]},'original_format':{'type':Sequelize[_0x60f0('0x2')]},'original_duration':{'type':Sequelize[_0x60f0('0x4')]},'original_sampleCount':{'type':Sequelize[_0x60f0('0x5')]},'original_channelCount':{'type':Sequelize[_0x60f0('0x6')]},'original_bitRate':{'type':Sequelize['BIGINT']},'original_sampleRate':{'type':Sequelize[_0x60f0('0x6')]},'converted_format':{'type':Sequelize[_0x60f0('0x2')]},'converted_duration':{'type':Sequelize[_0x60f0('0x4')]},'converted_sampleCount':{'type':Sequelize[_0x60f0('0x5')]},'converted_channelCount':{'type':Sequelize[_0x60f0('0x6')]},'converted_bitRate':{'type':Sequelize[_0x60f0('0x5')]},'converted_sampleRate':{'type':Sequelize[_0x60f0('0x6')]}};
\ No newline at end of file
index e3c10bf..94cdfac 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcd47=['original_bitRate','bitRate','sampleRate','dest','converted_duration','converted_sampleCount','converted_channelCount','converted_bitRate','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','start','description','delete','html-pdf','eml-format','rimraf','request-promise','moment','path','to-csv','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','end','status','json','count','offset','set','apply','reject','save','update','then','destroy','get','Sounds','UserProfileResource','sendStatus','name','send','index','Sound','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','limit','order','sort','where','pick','filter','merge','map','key','VIRTUAL','field','options','include','findAll','rows','catch','show','params','find','download','save_name','existsSync','root','server/files/sounds/converted','converted_format','Sequelize','Sound\x20not\x20found','join','format','%s.%s','basename','file','extname','filename','originalname','server/files/sounds/original','info','Sound\x20upload\x20filepath:\x20%s','chmodSync','0777','transcode','wav','unlinkSync','src','duration','original_sampleCount','sampleCount','original_channelCount','channelCount'];(function(_0x3d2b78,_0x5272fd){var _0x3d474a=function(_0x391fdc){while(--_0x391fdc){_0x3d2b78['push'](_0x3d2b78['shift']());}};_0x3d474a(++_0x5272fd);}(_0xcd47,0x179));var _0x7cd4=function(_0x38e247,_0x2cd7b5){_0x38e247=_0x38e247-0x0;var _0x1be41b=_0xcd47[_0x38e247];return _0x1be41b;};'use strict';var pdf=require(_0x7cd4('0x0'));var emlformat=require(_0x7cd4('0x1'));var rimraf=require(_0x7cd4('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x7cd4('0x3'));var moment=require(_0x7cd4('0x4'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0x7cd4('0x5'));var sox=require('sox');var csv=require(_0x7cd4('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x7cd4('0x7'));var squel=require('squel');var crypto=require(_0x7cd4('0x8'));var jsforce=require(_0x7cd4('0x9'));var deskjs=require(_0x7cd4('0xa'));var toCsv=require(_0x7cd4('0x6'));var querystring=require(_0x7cd4('0xb'));var Papa=require(_0x7cd4('0xc'));var Redis=require('ioredis');var authService=require(_0x7cd4('0xd'));var qs=require(_0x7cd4('0xe'));var hardwareService=require(_0x7cd4('0xf'));var logger=require(_0x7cd4('0x10'))(_0x7cd4('0x11'));var utils=require(_0x7cd4('0x12'));var config=require('../../config/environment');var db=require(_0x7cd4('0x13'))['db'];function respondWithStatusCode(_0x680fe,_0x45e337){_0x45e337=_0x45e337||0xcc;return function(_0x24b644){if(_0x24b644){return _0x680fe['sendStatus'](_0x45e337);}return _0x680fe['status'](_0x45e337)[_0x7cd4('0x14')]();};}function respondWithResult(_0x1d6938,_0x42c840){_0x42c840=_0x42c840||0xc8;return function(_0x644153){if(_0x644153){return _0x1d6938[_0x7cd4('0x15')](_0x42c840)[_0x7cd4('0x16')](_0x644153);}};}function respondWithFilteredResult(_0x5ab4b8,_0x2b2cb2){return function(_0x271c92){if(_0x271c92){var _0x308110=_0x271c92[_0x7cd4('0x17')],_0x19222d=_0x2b2cb2['offset'],_0x2163ba=_0x2b2cb2[_0x7cd4('0x18')]+_0x2b2cb2['limit'],_0x2de7f1;if(_0x2163ba>=_0x308110){_0x2163ba=_0x308110;_0x2de7f1=0xc8;}else{_0x2de7f1=0xce;}_0x5ab4b8[_0x7cd4('0x15')](_0x2de7f1);return _0x5ab4b8[_0x7cd4('0x19')]('Content-Range',_0x19222d+'-'+_0x2163ba+'/'+_0x308110)[_0x7cd4('0x16')](_0x271c92);}return null;};}function patchUpdates(_0x483c5d){return function(_0x204c0a){try{jsonpatch[_0x7cd4('0x1a')](_0x204c0a,_0x483c5d,!![]);}catch(_0xea9e6e){return BPromise[_0x7cd4('0x1b')](_0xea9e6e);}return _0x204c0a[_0x7cd4('0x1c')]();};}function saveUpdates(_0x2c311b,_0x4648e7){return function(_0x16ae96){if(_0x16ae96){return _0x16ae96[_0x7cd4('0x1d')](_0x2c311b)[_0x7cd4('0x1e')](function(_0x31c07c){return _0x31c07c;});}return null;};}function removeEntity(_0x1a8396,_0x1062b4){return function(_0x58c1c6){if(_0x58c1c6){return _0x58c1c6[_0x7cd4('0x1f')]()[_0x7cd4('0x1e')](function(){var _0x47f76f=_0x58c1c6[_0x7cd4('0x20')]({'plain':!![]});var _0x4c14c5=_0x7cd4('0x21');return db[_0x7cd4('0x22')][_0x7cd4('0x1f')]({'where':{'type':_0x4c14c5,'resourceId':_0x47f76f['id']}})[_0x7cd4('0x1e')](function(){return _0x58c1c6;});})[_0x7cd4('0x1e')](function(){_0x1a8396[_0x7cd4('0x15')](0xcc)[_0x7cd4('0x14')]();});}};}function handleEntityNotFound(_0x7d2e64,_0x215721){return function(_0x3df316){if(!_0x3df316){_0x7d2e64[_0x7cd4('0x23')](0x194);}return _0x3df316;};}function handleError(_0x15db8b,_0x68eb25){_0x68eb25=_0x68eb25||0x1f4;return function(_0x4cc8f0){logger['error'](_0x4cc8f0['stack']);if(_0x4cc8f0[_0x7cd4('0x24')]){delete _0x4cc8f0[_0x7cd4('0x24')];}_0x15db8b['status'](_0x68eb25)[_0x7cd4('0x25')](_0x4cc8f0);};}exports[_0x7cd4('0x26')]=function(_0x5dbe39,_0x5c8620){var _0x642e95={},_0x5ed5e6={},_0x369d06={'count':0x0,'rows':[]};var _0x3dba05=db[_0x7cd4('0x27')][_0x7cd4('0x28')];_0x5ed5e6[_0x7cd4('0x29')]=_[_0x7cd4('0x2a')](_0x3dba05);_0x5ed5e6[_0x7cd4('0x2b')]=_['keys'](_0x5dbe39['query']);_0x5ed5e6[_0x7cd4('0x2c')]=_[_0x7cd4('0x2d')](_0x5ed5e6[_0x7cd4('0x29')],_0x5ed5e6[_0x7cd4('0x2b')]);_0x642e95[_0x7cd4('0x2e')]=_[_0x7cd4('0x2d')](_0x5ed5e6[_0x7cd4('0x29')],qs[_0x7cd4('0x2f')](_0x5dbe39[_0x7cd4('0x2b')][_0x7cd4('0x2f')]));_0x642e95['attributes']=_0x642e95[_0x7cd4('0x2e')][_0x7cd4('0x30')]?_0x642e95[_0x7cd4('0x2e')]:_0x5ed5e6[_0x7cd4('0x29')];if(!_0x5dbe39['query'][_0x7cd4('0x31')]('nolimit')){_0x642e95[_0x7cd4('0x32')]=qs['limit'](_0x5dbe39[_0x7cd4('0x2b')][_0x7cd4('0x32')]);_0x642e95[_0x7cd4('0x18')]=qs[_0x7cd4('0x18')](_0x5dbe39[_0x7cd4('0x2b')][_0x7cd4('0x18')]);}_0x642e95[_0x7cd4('0x33')]=qs[_0x7cd4('0x34')](_0x5dbe39[_0x7cd4('0x2b')][_0x7cd4('0x34')]);_0x642e95[_0x7cd4('0x35')]=qs[_0x7cd4('0x2c')](_[_0x7cd4('0x36')](_0x5dbe39['query'],_0x5ed5e6['filters']));if(_0x5dbe39['query'][_0x7cd4('0x37')]){_0x642e95[_0x7cd4('0x35')]=_[_0x7cd4('0x38')](_0x642e95['where'],{'$or':_[_0x7cd4('0x39')](_0x3dba05,function(_0x43da28){if(_0x43da28['type'][_0x7cd4('0x3a')]!==_0x7cd4('0x3b')){var _0x2fc9dd={};_0x2fc9dd[_0x43da28[_0x7cd4('0x3c')]]={'$like':'%'+_0x5dbe39[_0x7cd4('0x2b')][_0x7cd4('0x37')]+'%'};return _0x2fc9dd;}})});}_0x642e95=_[_0x7cd4('0x38')]({},_0x642e95,_0x5dbe39[_0x7cd4('0x3d')]);var _0x992cd2={'where':_0x642e95[_0x7cd4('0x35')]};return db['Sound'][_0x7cd4('0x17')](_0x992cd2)[_0x7cd4('0x1e')](function(_0x141353){_0x369d06[_0x7cd4('0x17')]=_0x141353;if(_0x5dbe39['query']['includeAll']){_0x642e95[_0x7cd4('0x3e')]=[{'all':!![]}];}return db[_0x7cd4('0x27')][_0x7cd4('0x3f')](_0x642e95);})['then'](function(_0x53797b){_0x369d06[_0x7cd4('0x40')]=_0x53797b;return _0x369d06;})[_0x7cd4('0x1e')](respondWithFilteredResult(_0x5c8620,_0x642e95))[_0x7cd4('0x41')](handleError(_0x5c8620,null));};exports[_0x7cd4('0x42')]=function(_0x17de7c,_0x22e50c){var _0x5a67fe={'raw':!![],'where':{'id':_0x17de7c[_0x7cd4('0x43')]['id']}},_0x3f6316={};_0x3f6316[_0x7cd4('0x29')]=_[_0x7cd4('0x2a')](db[_0x7cd4('0x27')]['rawAttributes']);_0x3f6316[_0x7cd4('0x2b')]=_[_0x7cd4('0x2a')](_0x17de7c[_0x7cd4('0x2b')]);_0x3f6316[_0x7cd4('0x2c')]=_['intersection'](_0x3f6316['model'],_0x3f6316[_0x7cd4('0x2b')]);_0x5a67fe[_0x7cd4('0x2e')]=_['intersection'](_0x3f6316['model'],qs[_0x7cd4('0x2f')](_0x17de7c[_0x7cd4('0x2b')][_0x7cd4('0x2f')]));_0x5a67fe[_0x7cd4('0x2e')]=_0x5a67fe[_0x7cd4('0x2e')]['length']?_0x5a67fe[_0x7cd4('0x2e')]:_0x3f6316['model'];if(_0x17de7c['query']['includeAll']){_0x5a67fe[_0x7cd4('0x3e')]=[{'all':!![]}];}_0x5a67fe=_[_0x7cd4('0x38')]({},_0x5a67fe,_0x17de7c[_0x7cd4('0x3d')]);return db['Sound'][_0x7cd4('0x44')](_0x5a67fe)['then'](handleEntityNotFound(_0x22e50c,null))[_0x7cd4('0x1e')](respondWithResult(_0x22e50c,null))[_0x7cd4('0x41')](handleError(_0x22e50c,null));};exports[_0x7cd4('0x45')]=function(_0x2f1946,_0x35ad03,_0x3034d1){return db[_0x7cd4('0x27')][_0x7cd4('0x44')]({'where':{'id':_0x2f1946[_0x7cd4('0x43')]['id']},'attributes':[_0x7cd4('0x24'),_0x7cd4('0x46'),'converted_format'],'raw':!![]})[_0x7cd4('0x1e')](handleEntityNotFound(_0x35ad03,null))[_0x7cd4('0x1e')](function(_0x5aa4ff){if(_0x5aa4ff){if(!fs[_0x7cd4('0x47')](path['join'](config[_0x7cd4('0x48')],_0x7cd4('0x49'),_0x5aa4ff[_0x7cd4('0x46')]+'.'+_0x5aa4ff[_0x7cd4('0x4a')]))){throw new db[(_0x7cd4('0x4b'))]['ValidationError'](_0x7cd4('0x4c'));}return _0x35ad03[_0x7cd4('0x45')](path[_0x7cd4('0x4d')](config[_0x7cd4('0x48')],_0x7cd4('0x49'),util[_0x7cd4('0x4e')]('%s.%s',_0x5aa4ff['save_name'],_0x5aa4ff[_0x7cd4('0x4a')])),util[_0x7cd4('0x4e')](_0x7cd4('0x4f'),_0x5aa4ff[_0x7cd4('0x24')],_0x5aa4ff[_0x7cd4('0x4a')]));}return null;})[_0x7cd4('0x41')](handleError(_0x35ad03,null));};exports['create']=function(_0x367713,_0x38d958,_0x5b8451){var _0x502f75={'name':path[_0x7cd4('0x50')](_0x367713[_0x7cd4('0x51')]['originalname'],path[_0x7cd4('0x52')](_0x367713[_0x7cd4('0x51')]['originalname'])),'save_name':path['basename'](_0x367713[_0x7cd4('0x51')][_0x7cd4('0x53')],path['extname'](_0x367713[_0x7cd4('0x51')][_0x7cd4('0x53')])),'original_format':path[_0x7cd4('0x52')](_0x367713[_0x7cd4('0x51')][_0x7cd4('0x54')])['substring'](0x1),'converted_format':'wav'};var _0x221322=path[_0x7cd4('0x4d')](config[_0x7cd4('0x48')],_0x7cd4('0x55'),_0x367713[_0x7cd4('0x51')][_0x7cd4('0x53')]);var _0x2998a9=path[_0x7cd4('0x4d')](config[_0x7cd4('0x48')],_0x7cd4('0x49'),util[_0x7cd4('0x4e')](_0x7cd4('0x4f'),path[_0x7cd4('0x50')](_0x367713[_0x7cd4('0x51')][_0x7cd4('0x53')],path[_0x7cd4('0x52')](_0x367713[_0x7cd4('0x51')]['filename'])),_0x502f75['converted_format']));logger[_0x7cd4('0x56')](_0x7cd4('0x57'),_0x221322);logger[_0x7cd4('0x56')]('Sound\x20upload\x20destination:\x20%s',_0x2998a9);try{fs[_0x7cd4('0x58')](_0x221322,parseInt(_0x7cd4('0x59'),0x8));var _0x503db1=sox[_0x7cd4('0x5a')](_0x221322,_0x2998a9,{'sampleRate':0x1f40,'format':_0x7cd4('0x5b'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x503db1['on']('error',function(_0x4be3b3){fs[_0x7cd4('0x5c')](_0x221322);_0x38d958['status'](0x1f4)['send'](_0x4be3b3);});_0x503db1['on'](_0x7cd4('0x5d'),function(_0x4d2f30){_0x502f75['original_duration']=isNaN(_0x4d2f30[_0x7cd4('0x5e')])?null:_0x4d2f30[_0x7cd4('0x5e')]*0x3e8;_0x502f75[_0x7cd4('0x5f')]=isNaN(_0x4d2f30['sampleCount'])?null:_0x4d2f30[_0x7cd4('0x60')];_0x502f75[_0x7cd4('0x61')]=isNaN(_0x4d2f30['channelCount'])?null:_0x4d2f30[_0x7cd4('0x62')];_0x502f75[_0x7cd4('0x63')]=isNaN(_0x4d2f30[_0x7cd4('0x64')])?null:_0x4d2f30[_0x7cd4('0x64')];_0x502f75['original_sampleRate']=isNaN(_0x4d2f30[_0x7cd4('0x65')])?null:_0x4d2f30[_0x7cd4('0x65')];});_0x503db1['on'](_0x7cd4('0x66'),function(_0x1cb4f1){_0x502f75[_0x7cd4('0x67')]=isNaN(_0x1cb4f1[_0x7cd4('0x5e')])?null:_0x1cb4f1[_0x7cd4('0x5e')]*0x3e8;_0x502f75[_0x7cd4('0x68')]=isNaN(_0x1cb4f1['sampleCount'])?null:_0x1cb4f1[_0x7cd4('0x60')];_0x502f75[_0x7cd4('0x69')]=isNaN(_0x1cb4f1[_0x7cd4('0x62')])?null:_0x1cb4f1[_0x7cd4('0x62')];_0x502f75[_0x7cd4('0x6a')]=isNaN(_0x1cb4f1[_0x7cd4('0x64')])?null:_0x1cb4f1[_0x7cd4('0x64')];_0x502f75['converted_sampleRate']=isNaN(_0x1cb4f1[_0x7cd4('0x65')])?null:_0x1cb4f1[_0x7cd4('0x65')];});_0x503db1['on'](_0x7cd4('0x14'),function(){fs['chmodSync'](_0x2998a9,parseInt(_0x7cd4('0x59'),0x8));return db['Sound'][_0x7cd4('0x6b')](_0x502f75)[_0x7cd4('0x1e')](function(_0x1f2a90){var _0x4b3b9f={'role':_0x367713[_0x7cd4('0x6c')]['role'],'userProfileId':_0x367713[_0x7cd4('0x6c')]['userProfileId']};if(!_0x4b3b9f)throw new Error(_0x7cd4('0x6d'));if(_0x4b3b9f[_0x7cd4('0x6e')]==='user'){var _0xcc87c1=_0x1f2a90[_0x7cd4('0x20')]({'plain':!![]});return db[_0x7cd4('0x6f')][_0x7cd4('0x44')]({'where':{'name':_0x7cd4('0x21'),'userProfileId':_0x4b3b9f[_0x7cd4('0x70')]},'raw':!![]})[_0x7cd4('0x1e')](function(_0x32a6bd){if(_0x32a6bd&&_0x32a6bd[_0x7cd4('0x71')]===0x0){return db[_0x7cd4('0x22')][_0x7cd4('0x6b')]({'name':_0xcc87c1['name'],'resourceId':_0xcc87c1['id'],'type':_0x32a6bd[_0x7cd4('0x24')],'sectionId':_0x32a6bd['id']},{})['then'](function(){return _0x1f2a90;});}else{return _0x1f2a90;}})['catch'](function(_0x361585){logger[_0x7cd4('0x72')](_0x7cd4('0x73'),_0x361585);throw _0x361585;});}return _0x1f2a90;})[_0x7cd4('0x1e')](respondWithResult(_0x38d958,null))[_0x7cd4('0x41')](handleError(_0x38d958,null));});_0x503db1[_0x7cd4('0x74')]();}catch(_0x310f4f){_0x38d958[_0x7cd4('0x15')](0x1f4)[_0x7cd4('0x25')](_0x310f4f);}};exports[_0x7cd4('0x1d')]=function(_0x4c11e0,_0x45080d,_0xc27774){return db[_0x7cd4('0x27')][_0x7cd4('0x44')]({'where':{'id':_0x4c11e0[_0x7cd4('0x43')]['id']}})['then'](handleEntityNotFound(_0x45080d,null))['then'](saveUpdates(_[_0x7cd4('0x36')](_0x4c11e0[_0x7cd4('0x6c')],[_0x7cd4('0x24'),_0x7cd4('0x75')]),null))['then'](respondWithResult(_0x45080d,null))['catch'](handleError(_0x45080d,null));};exports[_0x7cd4('0x76')]=function(_0x3efeb3,_0xf5db28,_0x523e72){return db[_0x7cd4('0x27')][_0x7cd4('0x44')]({'where':{'id':_0x3efeb3[_0x7cd4('0x43')]['id']}})[_0x7cd4('0x1e')](function(_0x652225){if(_0x652225){return _0x652225[_0x7cd4('0x1f')]();}})[_0x7cd4('0x1e')](function(_0x388f66){var _0x2ba792=path['join'](config[_0x7cd4('0x48')],_0x7cd4('0x55'),util[_0x7cd4('0x4e')](_0x7cd4('0x4f'),_0x388f66[_0x7cd4('0x46')],_0x388f66['original_format']));var _0x1480a5=path[_0x7cd4('0x4d')](config[_0x7cd4('0x48')],'server/files/sounds/converted',util['format'](_0x7cd4('0x4f'),_0x388f66[_0x7cd4('0x46')],_0x388f66[_0x7cd4('0x4a')]));fs[_0x7cd4('0x5c')](_0x2ba792);fs[_0x7cd4('0x5c')](_0x1480a5);return _0x388f66;})[_0x7cd4('0x1e')](function(_0x4cc883){if(_0x4cc883){return _0xf5db28[_0x7cd4('0x15')](0xcc)[_0x7cd4('0x14')]();}})[_0x7cd4('0x1e')](handleEntityNotFound(_0xf5db28,null))[_0x7cd4('0x41')](handleError(_0xf5db28,null));};
\ No newline at end of file
+var _0x3e42=['../../config/logger','../../config/utils','../../config/environment','../../mysqldb','status','end','json','offset','limit','set','apply','reject','save','update','then','destroy','get','UserProfileResource','stack','index','Sound','rawAttributes','query','keys','filters','intersection','model','attributes','fields','length','hasOwnProperty','sort','where','pick','merge','map','type','key','VIRTUAL','field','filter','options','count','includeAll','findAll','rows','show','params','include','catch','download','find','name','save_name','converted_format','existsSync','join','root','Sequelize','ValidationError','Sound\x20not\x20found','server/files/sounds/converted','%s.%s','format','create','file','extname','originalname','basename','filename','server/files/sounds/original','info','Sound\x20upload\x20filepath:\x20%s','chmodSync','0777','wav','error','unlinkSync','src','original_duration','duration','original_sampleCount','sampleCount','original_channelCount','channelCount','original_bitRate','bitRate','dest','converted_duration','converted_sampleCount','converted_channelCount','converted_bitRate','converted_sampleRate','sampleRate','body','role','userProfileId','Unable\x20to\x20retrieve\x20the\x20current\x20user','user','UserProfileSection','Sounds','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','send','description','delete','html-pdf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','to-csv','squel','crypto','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware'];(function(_0x19b3f9,_0xade753){var _0x18c3f6=function(_0x21439f){while(--_0x21439f){_0x19b3f9['push'](_0x19b3f9['shift']());}};_0x18c3f6(++_0xade753);}(_0x3e42,0x6a));var _0x23e4=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x3e42[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require(_0x23e4('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x23e4('0x1'));var jsonpatch=require(_0x23e4('0x2'));var rp=require('request-promise');var moment=require(_0x23e4('0x3'));var BPromise=require(_0x23e4('0x4'));var Mustache=require(_0x23e4('0x5'));var util=require(_0x23e4('0x6'));var path=require(_0x23e4('0x7'));var sox=require('sox');var csv=require(_0x23e4('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x23e4('0x9'));var crypto=require(_0x23e4('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x23e4('0xb'));var toCsv=require(_0x23e4('0x8'));var querystring=require('querystring');var Papa=require(_0x23e4('0xc'));var Redis=require(_0x23e4('0xd'));var authService=require(_0x23e4('0xe'));var qs=require(_0x23e4('0xf'));var hardwareService=require(_0x23e4('0x10'));var logger=require(_0x23e4('0x11'))('api');var utils=require(_0x23e4('0x12'));var config=require(_0x23e4('0x13'));var db=require(_0x23e4('0x14'))['db'];function respondWithStatusCode(_0x85e1df,_0x1bcc81){_0x1bcc81=_0x1bcc81||0xcc;return function(_0x25e5d7){if(_0x25e5d7){return _0x85e1df['sendStatus'](_0x1bcc81);}return _0x85e1df[_0x23e4('0x15')](_0x1bcc81)[_0x23e4('0x16')]();};}function respondWithResult(_0xa2d41a,_0x268894){_0x268894=_0x268894||0xc8;return function(_0x3b1090){if(_0x3b1090){return _0xa2d41a[_0x23e4('0x15')](_0x268894)[_0x23e4('0x17')](_0x3b1090);}};}function respondWithFilteredResult(_0x54d849,_0x26286f){return function(_0x4e0b13){if(_0x4e0b13){var _0x11130b=_0x4e0b13['count'],_0x4d9cd1=_0x26286f[_0x23e4('0x18')],_0x50c35f=_0x26286f[_0x23e4('0x18')]+_0x26286f[_0x23e4('0x19')],_0x1b500b;if(_0x50c35f>=_0x11130b){_0x50c35f=_0x11130b;_0x1b500b=0xc8;}else{_0x1b500b=0xce;}_0x54d849['status'](_0x1b500b);return _0x54d849[_0x23e4('0x1a')]('Content-Range',_0x4d9cd1+'-'+_0x50c35f+'/'+_0x11130b)[_0x23e4('0x17')](_0x4e0b13);}return null;};}function patchUpdates(_0x1a5f1f){return function(_0x37900d){try{jsonpatch[_0x23e4('0x1b')](_0x37900d,_0x1a5f1f,!![]);}catch(_0x10c6fd){return BPromise[_0x23e4('0x1c')](_0x10c6fd);}return _0x37900d[_0x23e4('0x1d')]();};}function saveUpdates(_0xc3aec7,_0x281acd){return function(_0x1560a6){if(_0x1560a6){return _0x1560a6[_0x23e4('0x1e')](_0xc3aec7)[_0x23e4('0x1f')](function(_0x59bd70){return _0x59bd70;});}return null;};}function removeEntity(_0x23b0e0,_0x4b6dbe){return function(_0x3532d7){if(_0x3532d7){return _0x3532d7[_0x23e4('0x20')]()[_0x23e4('0x1f')](function(){var _0x555d27=_0x3532d7[_0x23e4('0x21')]({'plain':!![]});var _0x53ff84='Sounds';return db[_0x23e4('0x22')]['destroy']({'where':{'type':_0x53ff84,'resourceId':_0x555d27['id']}})[_0x23e4('0x1f')](function(){return _0x3532d7;});})[_0x23e4('0x1f')](function(){_0x23b0e0[_0x23e4('0x15')](0xcc)[_0x23e4('0x16')]();});}};}function handleEntityNotFound(_0x447d72,_0x462e7d){return function(_0x448c6a){if(!_0x448c6a){_0x447d72['sendStatus'](0x194);}return _0x448c6a;};}function handleError(_0x5d995a,_0x2cf291){_0x2cf291=_0x2cf291||0x1f4;return function(_0x2eb5c8){logger['error'](_0x2eb5c8[_0x23e4('0x23')]);if(_0x2eb5c8['name']){delete _0x2eb5c8['name'];}_0x5d995a[_0x23e4('0x15')](_0x2cf291)['send'](_0x2eb5c8);};}exports[_0x23e4('0x24')]=function(_0x5804be,_0x375a7c){var _0x3a355a={},_0x297803={},_0x1afffa={'count':0x0,'rows':[]};var _0x38f1fe=db[_0x23e4('0x25')][_0x23e4('0x26')];_0x297803['model']=_['keys'](_0x38f1fe);_0x297803[_0x23e4('0x27')]=_[_0x23e4('0x28')](_0x5804be[_0x23e4('0x27')]);_0x297803[_0x23e4('0x29')]=_[_0x23e4('0x2a')](_0x297803[_0x23e4('0x2b')],_0x297803['query']);_0x3a355a[_0x23e4('0x2c')]=_[_0x23e4('0x2a')](_0x297803[_0x23e4('0x2b')],qs['fields'](_0x5804be[_0x23e4('0x27')][_0x23e4('0x2d')]));_0x3a355a[_0x23e4('0x2c')]=_0x3a355a[_0x23e4('0x2c')][_0x23e4('0x2e')]?_0x3a355a['attributes']:_0x297803['model'];if(!_0x5804be[_0x23e4('0x27')][_0x23e4('0x2f')]('nolimit')){_0x3a355a['limit']=qs['limit'](_0x5804be[_0x23e4('0x27')][_0x23e4('0x19')]);_0x3a355a[_0x23e4('0x18')]=qs[_0x23e4('0x18')](_0x5804be[_0x23e4('0x27')][_0x23e4('0x18')]);}_0x3a355a['order']=qs['sort'](_0x5804be['query'][_0x23e4('0x30')]);_0x3a355a[_0x23e4('0x31')]=qs[_0x23e4('0x29')](_[_0x23e4('0x32')](_0x5804be['query'],_0x297803['filters']));if(_0x5804be[_0x23e4('0x27')]['filter']){_0x3a355a['where']=_[_0x23e4('0x33')](_0x3a355a[_0x23e4('0x31')],{'$or':_[_0x23e4('0x34')](_0x38f1fe,function(_0x11706c){if(_0x11706c[_0x23e4('0x35')][_0x23e4('0x36')]!==_0x23e4('0x37')){var _0x338b78={};_0x338b78[_0x11706c[_0x23e4('0x38')]]={'$like':'%'+_0x5804be[_0x23e4('0x27')][_0x23e4('0x39')]+'%'};return _0x338b78;}})});}_0x3a355a=_['merge']({},_0x3a355a,_0x5804be[_0x23e4('0x3a')]);var _0x231778={'where':_0x3a355a[_0x23e4('0x31')]};return db['Sound'][_0x23e4('0x3b')](_0x231778)[_0x23e4('0x1f')](function(_0x3572a5){_0x1afffa[_0x23e4('0x3b')]=_0x3572a5;if(_0x5804be['query'][_0x23e4('0x3c')]){_0x3a355a['include']=[{'all':!![]}];}return db[_0x23e4('0x25')][_0x23e4('0x3d')](_0x3a355a);})[_0x23e4('0x1f')](function(_0x50f8b7){_0x1afffa[_0x23e4('0x3e')]=_0x50f8b7;return _0x1afffa;})[_0x23e4('0x1f')](respondWithFilteredResult(_0x375a7c,_0x3a355a))['catch'](handleError(_0x375a7c,null));};exports[_0x23e4('0x3f')]=function(_0x2dbf39,_0x336d3d){var _0x562898={'raw':!![],'where':{'id':_0x2dbf39[_0x23e4('0x40')]['id']}},_0x34a5ec={};_0x34a5ec[_0x23e4('0x2b')]=_[_0x23e4('0x28')](db[_0x23e4('0x25')]['rawAttributes']);_0x34a5ec[_0x23e4('0x27')]=_[_0x23e4('0x28')](_0x2dbf39[_0x23e4('0x27')]);_0x34a5ec[_0x23e4('0x29')]=_[_0x23e4('0x2a')](_0x34a5ec[_0x23e4('0x2b')],_0x34a5ec[_0x23e4('0x27')]);_0x562898['attributes']=_[_0x23e4('0x2a')](_0x34a5ec[_0x23e4('0x2b')],qs['fields'](_0x2dbf39[_0x23e4('0x27')][_0x23e4('0x2d')]));_0x562898[_0x23e4('0x2c')]=_0x562898[_0x23e4('0x2c')][_0x23e4('0x2e')]?_0x562898['attributes']:_0x34a5ec[_0x23e4('0x2b')];if(_0x2dbf39[_0x23e4('0x27')]['includeAll']){_0x562898[_0x23e4('0x41')]=[{'all':!![]}];}_0x562898=_['merge']({},_0x562898,_0x2dbf39[_0x23e4('0x3a')]);return db['Sound']['find'](_0x562898)[_0x23e4('0x1f')](handleEntityNotFound(_0x336d3d,null))[_0x23e4('0x1f')](respondWithResult(_0x336d3d,null))[_0x23e4('0x42')](handleError(_0x336d3d,null));};exports[_0x23e4('0x43')]=function(_0x21b289,_0x17b6c9,_0x16d443){return db[_0x23e4('0x25')][_0x23e4('0x44')]({'where':{'id':_0x21b289[_0x23e4('0x40')]['id']},'attributes':[_0x23e4('0x45'),_0x23e4('0x46'),_0x23e4('0x47')],'raw':!![]})[_0x23e4('0x1f')](handleEntityNotFound(_0x17b6c9,null))[_0x23e4('0x1f')](function(_0x2be2cc){if(_0x2be2cc){if(!fs[_0x23e4('0x48')](path[_0x23e4('0x49')](config[_0x23e4('0x4a')],'server/files/sounds/converted',_0x2be2cc[_0x23e4('0x46')]+'.'+_0x2be2cc[_0x23e4('0x47')]))){throw new db[(_0x23e4('0x4b'))][(_0x23e4('0x4c'))](_0x23e4('0x4d'));}return _0x17b6c9[_0x23e4('0x43')](path[_0x23e4('0x49')](config[_0x23e4('0x4a')],_0x23e4('0x4e'),util['format'](_0x23e4('0x4f'),_0x2be2cc[_0x23e4('0x46')],_0x2be2cc[_0x23e4('0x47')])),util[_0x23e4('0x50')]('%s.%s',_0x2be2cc[_0x23e4('0x45')],_0x2be2cc[_0x23e4('0x47')]));}return null;})[_0x23e4('0x42')](handleError(_0x17b6c9,null));};exports[_0x23e4('0x51')]=function(_0x2cd353,_0x561417,_0x4cf676){var _0x3b707e={'name':path['basename'](_0x2cd353[_0x23e4('0x52')]['originalname'],path[_0x23e4('0x53')](_0x2cd353['file'][_0x23e4('0x54')])),'save_name':path[_0x23e4('0x55')](_0x2cd353['file']['filename'],path[_0x23e4('0x53')](_0x2cd353[_0x23e4('0x52')][_0x23e4('0x56')])),'original_format':path['extname'](_0x2cd353['file'][_0x23e4('0x54')])['substring'](0x1),'converted_format':'wav'};var _0x431a16=path['join'](config[_0x23e4('0x4a')],_0x23e4('0x57'),_0x2cd353['file']['filename']);var _0x3144ba=path[_0x23e4('0x49')](config[_0x23e4('0x4a')],'server/files/sounds/converted',util[_0x23e4('0x50')](_0x23e4('0x4f'),path[_0x23e4('0x55')](_0x2cd353['file']['filename'],path[_0x23e4('0x53')](_0x2cd353[_0x23e4('0x52')][_0x23e4('0x56')])),_0x3b707e[_0x23e4('0x47')]));logger[_0x23e4('0x58')](_0x23e4('0x59'),_0x431a16);logger['info']('Sound\x20upload\x20destination:\x20%s',_0x3144ba);try{fs[_0x23e4('0x5a')](_0x431a16,parseInt(_0x23e4('0x5b'),0x8));var _0xa54789=sox['transcode'](_0x431a16,_0x3144ba,{'sampleRate':0x1f40,'format':_0x23e4('0x5c'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0xa54789['on'](_0x23e4('0x5d'),function(_0x48dd73){fs[_0x23e4('0x5e')](_0x431a16);_0x561417['status'](0x1f4)['send'](_0x48dd73);});_0xa54789['on'](_0x23e4('0x5f'),function(_0x2dd211){_0x3b707e[_0x23e4('0x60')]=isNaN(_0x2dd211[_0x23e4('0x61')])?null:_0x2dd211['duration']*0x3e8;_0x3b707e[_0x23e4('0x62')]=isNaN(_0x2dd211[_0x23e4('0x63')])?null:_0x2dd211[_0x23e4('0x63')];_0x3b707e[_0x23e4('0x64')]=isNaN(_0x2dd211['channelCount'])?null:_0x2dd211[_0x23e4('0x65')];_0x3b707e[_0x23e4('0x66')]=isNaN(_0x2dd211[_0x23e4('0x67')])?null:_0x2dd211['bitRate'];_0x3b707e['original_sampleRate']=isNaN(_0x2dd211['sampleRate'])?null:_0x2dd211['sampleRate'];});_0xa54789['on'](_0x23e4('0x68'),function(_0x37418e){_0x3b707e[_0x23e4('0x69')]=isNaN(_0x37418e[_0x23e4('0x61')])?null:_0x37418e[_0x23e4('0x61')]*0x3e8;_0x3b707e[_0x23e4('0x6a')]=isNaN(_0x37418e[_0x23e4('0x63')])?null:_0x37418e[_0x23e4('0x63')];_0x3b707e[_0x23e4('0x6b')]=isNaN(_0x37418e[_0x23e4('0x65')])?null:_0x37418e[_0x23e4('0x65')];_0x3b707e[_0x23e4('0x6c')]=isNaN(_0x37418e[_0x23e4('0x67')])?null:_0x37418e['bitRate'];_0x3b707e[_0x23e4('0x6d')]=isNaN(_0x37418e['sampleRate'])?null:_0x37418e[_0x23e4('0x6e')];});_0xa54789['on'](_0x23e4('0x16'),function(){fs[_0x23e4('0x5a')](_0x3144ba,parseInt('0777',0x8));return db[_0x23e4('0x25')][_0x23e4('0x51')](_0x3b707e)[_0x23e4('0x1f')](function(_0xb52f87){var _0x3a97a3={'role':_0x2cd353[_0x23e4('0x6f')][_0x23e4('0x70')],'userProfileId':_0x2cd353['body'][_0x23e4('0x71')]};if(!_0x3a97a3)throw new Error(_0x23e4('0x72'));if(_0x3a97a3[_0x23e4('0x70')]===_0x23e4('0x73')){var _0x32c3c7=_0xb52f87['get']({'plain':!![]});return db[_0x23e4('0x74')]['find']({'where':{'name':_0x23e4('0x75'),'userProfileId':_0x3a97a3[_0x23e4('0x71')]},'raw':!![]})['then'](function(_0xfbc799){if(_0xfbc799&&_0xfbc799[_0x23e4('0x76')]===0x0){return db[_0x23e4('0x22')][_0x23e4('0x51')]({'name':_0x32c3c7[_0x23e4('0x45')],'resourceId':_0x32c3c7['id'],'type':_0xfbc799[_0x23e4('0x45')],'sectionId':_0xfbc799['id']},{})[_0x23e4('0x1f')](function(){return _0xb52f87;});}else{return _0xb52f87;}})['catch'](function(_0xa281d8){logger['error'](_0x23e4('0x77'),_0xa281d8);throw _0xa281d8;});}return _0xb52f87;})[_0x23e4('0x1f')](respondWithResult(_0x561417,null))['catch'](handleError(_0x561417,null));});_0xa54789['start']();}catch(_0x28d020){_0x561417[_0x23e4('0x15')](0x1f4)[_0x23e4('0x78')](_0x28d020);}};exports[_0x23e4('0x1e')]=function(_0x14f54f,_0x4574ac,_0x2274c0){return db[_0x23e4('0x25')][_0x23e4('0x44')]({'where':{'id':_0x14f54f[_0x23e4('0x40')]['id']}})['then'](handleEntityNotFound(_0x4574ac,null))[_0x23e4('0x1f')](saveUpdates(_['pick'](_0x14f54f[_0x23e4('0x6f')],[_0x23e4('0x45'),_0x23e4('0x79')]),null))[_0x23e4('0x1f')](respondWithResult(_0x4574ac,null))[_0x23e4('0x42')](handleError(_0x4574ac,null));};exports[_0x23e4('0x7a')]=function(_0x578eab,_0x1cc888,_0x300d99){return db[_0x23e4('0x25')][_0x23e4('0x44')]({'where':{'id':_0x578eab[_0x23e4('0x40')]['id']}})[_0x23e4('0x1f')](function(_0x135920){if(_0x135920){return _0x135920[_0x23e4('0x20')]();}})['then'](function(_0x3a31fd){var _0x23266b=path[_0x23e4('0x49')](config[_0x23e4('0x4a')],_0x23e4('0x57'),util[_0x23e4('0x50')](_0x23e4('0x4f'),_0x3a31fd[_0x23e4('0x46')],_0x3a31fd['original_format']));var _0x31db22=path[_0x23e4('0x49')](config['root'],'server/files/sounds/converted',util[_0x23e4('0x50')](_0x23e4('0x4f'),_0x3a31fd['save_name'],_0x3a31fd[_0x23e4('0x47')]));fs['unlinkSync'](_0x23266b);fs['unlinkSync'](_0x31db22);return _0x3a31fd;})['then'](function(_0x533f5a){if(_0x533f5a){return _0x1cc888[_0x23e4('0x15')](0xcc)[_0x23e4('0x16')]();}})['then'](handleEntityNotFound(_0x1cc888,null))['catch'](handleError(_0x1cc888,null));};
\ No newline at end of file
index 4d0bd23..c4eb751 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xff14=['util','../../config/logger','moment','bluebird','../../config/environment','define','Sound','tools_sounds'];(function(_0x278cb8,_0xe0d7f1){var _0x3bfbea=function(_0x317b46){while(--_0x317b46){_0x278cb8['push'](_0x278cb8['shift']());}};_0x3bfbea(++_0xe0d7f1);}(_0xff14,0x1a8));var _0x4ff1=function(_0x15d913,_0x51cf7a){_0x15d913=_0x15d913-0x0;var _0x4ae65e=_0xff14[_0x15d913];return _0x4ae65e;};'use strict';var _=require('lodash');var util=require(_0x4ff1('0x0'));var logger=require(_0x4ff1('0x1'))('api');var moment=require(_0x4ff1('0x2'));var BPromise=require(_0x4ff1('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x4ff1('0x4'));var attributes=require('./sound.attributes');module['exports']=function(_0x510f33,_0x2e4c6f){return _0x510f33[_0x4ff1('0x5')](_0x4ff1('0x6'),attributes,{'tableName':_0x4ff1('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x3824=['api','moment','request-promise','path','rimraf','define','Sound','tools_sounds','util'];(function(_0x4cce65,_0x40021e){var _0x4d1b45=function(_0x54d290){while(--_0x54d290){_0x4cce65['push'](_0x4cce65['shift']());}};_0x4d1b45(++_0x40021e);}(_0x3824,0xfb));var _0x4382=function(_0x34843e,_0x4c4224){_0x34843e=_0x34843e-0x0;var _0x598f7f=_0x3824[_0x34843e];return _0x598f7f;};'use strict';var _=require('lodash');var util=require(_0x4382('0x0'));var logger=require('../../config/logger')(_0x4382('0x1'));var moment=require(_0x4382('0x2'));var BPromise=require('bluebird');var rp=require(_0x4382('0x3'));var fs=require('fs');var path=require(_0x4382('0x4'));var rimraf=require(_0x4382('0x5'));var config=require('../../config/environment');var attributes=require('./sound.attributes');module['exports']=function(_0x4b2066,_0x5337cf){return _0x4b2066[_0x4382('0x6')](_0x4382('0x7'),attributes,{'tableName':_0x4382('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 99e8a85..16baeb8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8b0=['request\x20sent','debug','Sound,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','ShowSound','Sound','options','raw','where','include','model','attributes','map','lodash','util','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','request','then','info','Sound,\x20%s,\x20%s'];(function(_0x4ae4be,_0x3d6348){var _0x3aa438=function(_0x1c2420){while(--_0x1c2420){_0x4ae4be['push'](_0x4ae4be['shift']());}};_0x3aa438(++_0x3d6348);}(_0xd8b0,0xad));var _0x0d8b=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0xd8b0[_0x122ef9];return _0x42fba0;};'use strict';var _=require(_0x0d8b('0x0'));var util=require(_0x0d8b('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x0d8b('0x2'));var db=require(_0x0d8b('0x3'))['db'];var utils=require(_0x0d8b('0x4'));var logger=require(_0x0d8b('0x5'))(_0x0d8b('0x6'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x0d8b('0x7')][_0x0d8b('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x39f43a,_0x4a4470,_0x413284){return new BPromise(function(_0x284169,_0x58e4e2){return client[_0x0d8b('0x9')](_0x39f43a,_0x413284)[_0x0d8b('0xa')](function(_0x3b027f){logger[_0x0d8b('0xb')](_0x0d8b('0xc'),_0x4a4470,_0x0d8b('0xd'));logger[_0x0d8b('0xe')](_0x0d8b('0xf'),_0x4a4470,'request\x20sent',JSON[_0x0d8b('0x10')](_0x3b027f));if(_0x3b027f['error']){if(_0x3b027f[_0x0d8b('0x11')][_0x0d8b('0x12')]===0x1f4){logger[_0x0d8b('0x11')](_0x0d8b('0xc'),_0x4a4470,_0x3b027f[_0x0d8b('0x11')][_0x0d8b('0x13')]);return _0x58e4e2(_0x3b027f[_0x0d8b('0x11')][_0x0d8b('0x13')]);}logger[_0x0d8b('0x11')](_0x0d8b('0xc'),_0x4a4470,_0x3b027f[_0x0d8b('0x11')][_0x0d8b('0x13')]);return _0x284169(_0x3b027f[_0x0d8b('0x11')][_0x0d8b('0x13')]);}else{logger['info'](_0x0d8b('0xc'),_0x4a4470,_0x0d8b('0xd'));_0x284169(_0x3b027f[_0x0d8b('0x14')][_0x0d8b('0x13')]);}})[_0x0d8b('0x15')](function(_0x5cd485){logger[_0x0d8b('0x11')](_0x0d8b('0xc'),_0x4a4470,_0x5cd485);_0x58e4e2(_0x5cd485);});});}exports[_0x0d8b('0x16')]=function(_0x5fecbd){var _0x333674=this;return new Promise(function(_0x18dd2d,_0x264b39){return db[_0x0d8b('0x17')]['find']({'raw':_0x5fecbd[_0x0d8b('0x18')]?_0x5fecbd[_0x0d8b('0x18')][_0x0d8b('0x19')]===undefined?!![]:![]:!![],'where':_0x5fecbd[_0x0d8b('0x18')]?_0x5fecbd[_0x0d8b('0x18')][_0x0d8b('0x1a')]||null:null,'attributes':_0x5fecbd[_0x0d8b('0x18')]?_0x5fecbd[_0x0d8b('0x18')]['attributes']||null:null,'include':_0x5fecbd['options']?_0x5fecbd[_0x0d8b('0x18')]['include']?_['map'](_0x5fecbd['options'][_0x0d8b('0x1b')],function(_0x2b924f){return{'model':db[_0x2b924f[_0x0d8b('0x1c')]],'as':_0x2b924f['as'],'attributes':_0x2b924f[_0x0d8b('0x1d')],'include':_0x2b924f[_0x0d8b('0x1b')]?_[_0x0d8b('0x1e')](_0x2b924f[_0x0d8b('0x1b')],function(_0x4562cb){return{'model':db[_0x4562cb[_0x0d8b('0x1c')]],'as':_0x4562cb['as'],'attributes':_0x4562cb['attributes'],'include':_0x4562cb[_0x0d8b('0x1b')]?_[_0x0d8b('0x1e')](_0x4562cb['include'],function(_0xe1ef20){return{'model':db[_0xe1ef20['model']],'as':_0xe1ef20['as'],'attributes':_0xe1ef20[_0x0d8b('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x0d8b('0xa')](function(_0xa2af02){logger['info']('ShowSound',_0x5fecbd);logger[_0x0d8b('0xe')](_0x0d8b('0x16'),_0x5fecbd,JSON['stringify'](_0xa2af02));_0x18dd2d(_0xa2af02);})[_0x0d8b('0x15')](function(_0x59aa83){logger[_0x0d8b('0x11')]('ShowSound',_0x59aa83[_0x0d8b('0x13')],_0x5fecbd);_0x264b39(_0x333674['error'](0x1f4,_0x59aa83[_0x0d8b('0x13')]));});});};
\ No newline at end of file
+var _0xd8b0=['request\x20sent','debug','Sound,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','ShowSound','Sound','options','raw','where','include','model','attributes','map','lodash','util','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','request','then','info','Sound,\x20%s,\x20%s'];(function(_0xed4f27,_0x52ec52){var _0xc00718=function(_0x43d1ca){while(--_0x43d1ca){_0xed4f27['push'](_0xed4f27['shift']());}};_0xc00718(++_0x52ec52);}(_0xd8b0,0xad));var _0x0d8b=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xd8b0[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x0d8b('0x0'));var util=require(_0x0d8b('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x0d8b('0x2'));var db=require(_0x0d8b('0x3'))['db'];var utils=require(_0x0d8b('0x4'));var logger=require(_0x0d8b('0x5'))(_0x0d8b('0x6'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x0d8b('0x7')][_0x0d8b('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x39f43a,_0x4a4470,_0x413284){return new BPromise(function(_0x284169,_0x58e4e2){return client[_0x0d8b('0x9')](_0x39f43a,_0x413284)[_0x0d8b('0xa')](function(_0x3b027f){logger[_0x0d8b('0xb')](_0x0d8b('0xc'),_0x4a4470,_0x0d8b('0xd'));logger[_0x0d8b('0xe')](_0x0d8b('0xf'),_0x4a4470,'request\x20sent',JSON[_0x0d8b('0x10')](_0x3b027f));if(_0x3b027f['error']){if(_0x3b027f[_0x0d8b('0x11')][_0x0d8b('0x12')]===0x1f4){logger[_0x0d8b('0x11')](_0x0d8b('0xc'),_0x4a4470,_0x3b027f[_0x0d8b('0x11')][_0x0d8b('0x13')]);return _0x58e4e2(_0x3b027f[_0x0d8b('0x11')][_0x0d8b('0x13')]);}logger[_0x0d8b('0x11')](_0x0d8b('0xc'),_0x4a4470,_0x3b027f[_0x0d8b('0x11')][_0x0d8b('0x13')]);return _0x284169(_0x3b027f[_0x0d8b('0x11')][_0x0d8b('0x13')]);}else{logger['info'](_0x0d8b('0xc'),_0x4a4470,_0x0d8b('0xd'));_0x284169(_0x3b027f[_0x0d8b('0x14')][_0x0d8b('0x13')]);}})[_0x0d8b('0x15')](function(_0x5cd485){logger[_0x0d8b('0x11')](_0x0d8b('0xc'),_0x4a4470,_0x5cd485);_0x58e4e2(_0x5cd485);});});}exports[_0x0d8b('0x16')]=function(_0x5fecbd){var _0x333674=this;return new Promise(function(_0x18dd2d,_0x264b39){return db[_0x0d8b('0x17')]['find']({'raw':_0x5fecbd[_0x0d8b('0x18')]?_0x5fecbd[_0x0d8b('0x18')][_0x0d8b('0x19')]===undefined?!![]:![]:!![],'where':_0x5fecbd[_0x0d8b('0x18')]?_0x5fecbd[_0x0d8b('0x18')][_0x0d8b('0x1a')]||null:null,'attributes':_0x5fecbd[_0x0d8b('0x18')]?_0x5fecbd[_0x0d8b('0x18')]['attributes']||null:null,'include':_0x5fecbd['options']?_0x5fecbd[_0x0d8b('0x18')]['include']?_['map'](_0x5fecbd['options'][_0x0d8b('0x1b')],function(_0x2b924f){return{'model':db[_0x2b924f[_0x0d8b('0x1c')]],'as':_0x2b924f['as'],'attributes':_0x2b924f[_0x0d8b('0x1d')],'include':_0x2b924f[_0x0d8b('0x1b')]?_[_0x0d8b('0x1e')](_0x2b924f[_0x0d8b('0x1b')],function(_0x4562cb){return{'model':db[_0x4562cb[_0x0d8b('0x1c')]],'as':_0x4562cb['as'],'attributes':_0x4562cb['attributes'],'include':_0x4562cb[_0x0d8b('0x1b')]?_[_0x0d8b('0x1e')](_0x4562cb['include'],function(_0xe1ef20){return{'model':db[_0xe1ef20['model']],'as':_0xe1ef20['as'],'attributes':_0xe1ef20[_0x0d8b('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x0d8b('0xa')](function(_0xa2af02){logger['info']('ShowSound',_0x5fecbd);logger[_0x0d8b('0xe')](_0x0d8b('0x16'),_0x5fecbd,JSON['stringify'](_0xa2af02));_0x18dd2d(_0xa2af02);})[_0x0d8b('0x15')](function(_0x59aa83){logger[_0x0d8b('0x11')]('ShowSound',_0x59aa83[_0x0d8b('0x13')],_0x5fecbd);_0x264b39(_0x333674['error'](0x1f4,_0x59aa83[_0x0d8b('0x13')]));});});};
\ No newline at end of file
index 224ebd4..fdd1bc6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x44a3=['multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./squareMessage.controller','get','isAuthenticated','index','create','put','/:id','delete','destroy'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x44a3,0x1a9));var _0x344a=function(_0x385b70,_0x52974f){_0x385b70=_0x385b70-0x0;var _0x33e2ef=_0x44a3[_0x385b70];return _0x33e2ef;};'use strict';var multer=require(_0x344a('0x0'));var util=require(_0x344a('0x1'));var path=require(_0x344a('0x2'));var timeout=require(_0x344a('0x3'));var express=require(_0x344a('0x4'));var router=express[_0x344a('0x5')]();var auth=require(_0x344a('0x6'));var interaction=require(_0x344a('0x7'));var config=require('../../config/environment');var controller=require(_0x344a('0x8'));router[_0x344a('0x9')]('/',auth[_0x344a('0xa')](),controller[_0x344a('0xb')]);router[_0x344a('0x9')]('/:id',auth['isAuthenticated'](),controller['show']);router['post']('/',auth[_0x344a('0xa')](),controller[_0x344a('0xc')]);router[_0x344a('0xd')](_0x344a('0xe'),auth[_0x344a('0xa')](),controller['update']);router[_0x344a('0xf')](_0x344a('0xe'),auth['isAuthenticated'](),controller[_0x344a('0x10')]);module['exports']=router;
\ No newline at end of file
+var _0x2d6d=['../../config/environment','./squareMessage.controller','get','isAuthenticated','index','/:id','post','create','update','delete','destroy','exports','multer','util','path','connect-timeout','express','../../components/interaction/service'];(function(_0x2dea24,_0x2fc021){var _0x309d58=function(_0x2eb89f){while(--_0x2eb89f){_0x2dea24['push'](_0x2dea24['shift']());}};_0x309d58(++_0x2fc021);}(_0x2d6d,0x66));var _0xd2d6=function(_0x559a80,_0x3d193d){_0x559a80=_0x559a80-0x0;var _0x42f555=_0x2d6d[_0x559a80];return _0x42f555;};'use strict';var multer=require(_0xd2d6('0x0'));var util=require(_0xd2d6('0x1'));var path=require(_0xd2d6('0x2'));var timeout=require(_0xd2d6('0x3'));var express=require(_0xd2d6('0x4'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xd2d6('0x5'));var config=require(_0xd2d6('0x6'));var controller=require(_0xd2d6('0x7'));router[_0xd2d6('0x8')]('/',auth[_0xd2d6('0x9')](),controller[_0xd2d6('0xa')]);router[_0xd2d6('0x8')](_0xd2d6('0xb'),auth[_0xd2d6('0x9')](),controller['show']);router[_0xd2d6('0xc')]('/',auth['isAuthenticated'](),controller[_0xd2d6('0xd')]);router['put']('/:id',auth[_0xd2d6('0x9')](),controller[_0xd2d6('0xe')]);router[_0xd2d6('0xf')](_0xd2d6('0xb'),auth[_0xd2d6('0x9')](),controller[_0xd2d6('0x10')]);module[_0xd2d6('0x11')]=router;
\ No newline at end of file
index 964169c..1ca5633 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1c82=['STRING','TEXT','medium','ENUM','out','sequelize','exports'];(function(_0x35da42,_0x5c2610){var _0x370035=function(_0x546db5){while(--_0x546db5){_0x35da42['push'](_0x35da42['shift']());}};_0x370035(++_0x5c2610);}(_0x1c82,0x171));var _0x21c8=function(_0x6cbf86,_0x30b9cd){_0x6cbf86=_0x6cbf86-0x0;var _0x3e3924=_0x1c82[_0x6cbf86];return _0x3e3924;};'use strict';var Sequelize=require(_0x21c8('0x0'));module[_0x21c8('0x1')]={'uniqueid':{'type':Sequelize[_0x21c8('0x2')]},'body':{'type':Sequelize[_0x21c8('0x3')](_0x21c8('0x4')),'allowNull':![]},'direction':{'type':Sequelize[_0x21c8('0x5')]('in',_0x21c8('0x6')),'defaultValue':'out','allowNull':![]}};
\ No newline at end of file
+var _0x7cdd=['sequelize','exports','STRING','TEXT','medium','ENUM','out'];(function(_0x59ef81,_0x5d95b8){var _0x3b0f6b=function(_0xaccf47){while(--_0xaccf47){_0x59ef81['push'](_0x59ef81['shift']());}};_0x3b0f6b(++_0x5d95b8);}(_0x7cdd,0x188));var _0xd7cd=function(_0x3917da,_0x4d8bb8){_0x3917da=_0x3917da-0x0;var _0x4d891a=_0x7cdd[_0x3917da];return _0x4d891a;};'use strict';var Sequelize=require(_0xd7cd('0x0'));module[_0xd7cd('0x1')]={'uniqueid':{'type':Sequelize[_0xd7cd('0x2')]},'body':{'type':Sequelize[_0xd7cd('0x3')](_0xd7cd('0x4')),'allowNull':![]},'direction':{'type':Sequelize[_0xd7cd('0x5')]('in',_0xd7cd('0x6')),'defaultValue':_0xd7cd('0x6'),'allowNull':![]}};
\ No newline at end of file
index e0b58e9..b389f43 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb7fc=['sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','end','error','name','index','SquareMessage','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','filter','where','type','VIRTUAL','field','merge','options','includeAll','findAll','catch','show','find','create','body','params','html-pdf','rimraf','zip-dir','fast-json-patch','moment','mustache','util','path','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment'];(function(_0x4b81be,_0x3469ca){var _0x57b0c2=function(_0x2a5608){while(--_0x2a5608){_0x4b81be['push'](_0x4b81be['shift']());}};_0x57b0c2(++_0x3469ca);}(_0xb7fc,0x193));var _0xcb7f=function(_0x179d86,_0x139c2c){_0x179d86=_0x179d86-0x0;var _0x437ec7=_0xb7fc[_0x179d86];return _0x437ec7;};'use strict';var pdf=require(_0xcb7f('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xcb7f('0x1'));var zipdir=require(_0xcb7f('0x2'));var jsonpatch=require(_0xcb7f('0x3'));var rp=require('request-promise');var moment=require(_0xcb7f('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xcb7f('0x5'));var util=require(_0xcb7f('0x6'));var path=require(_0xcb7f('0x7'));var sox=require(_0xcb7f('0x8'));var csv=require('to-csv');var ejs=require(_0xcb7f('0x9'));var fs=require('fs');var _=require(_0xcb7f('0xa'));var squel=require('squel');var crypto=require(_0xcb7f('0xb'));var jsforce=require(_0xcb7f('0xc'));var deskjs=require(_0xcb7f('0xd'));var toCsv=require(_0xcb7f('0xe'));var querystring=require(_0xcb7f('0xf'));var Papa=require('papaparse');var Redis=require(_0xcb7f('0x10'));var authService=require(_0xcb7f('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xcb7f('0x12'));var logger=require(_0xcb7f('0x13'))(_0xcb7f('0x14'));var utils=require(_0xcb7f('0x15'));var config=require(_0xcb7f('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x26ab7d,_0x1d5811){_0x1d5811=_0x1d5811||0xcc;return function(_0x2f24af){if(_0x2f24af){return _0x26ab7d[_0xcb7f('0x17')](_0x1d5811);}return _0x26ab7d[_0xcb7f('0x18')](_0x1d5811)['end']();};}function respondWithResult(_0x344273,_0x5b77ae){_0x5b77ae=_0x5b77ae||0xc8;return function(_0x4c8934){if(_0x4c8934){return _0x344273[_0xcb7f('0x18')](_0x5b77ae)[_0xcb7f('0x19')](_0x4c8934);}};}function respondWithFilteredResult(_0x1cb0cf,_0x56f678){return function(_0x3a7419){if(_0x3a7419){var _0x53871a=_0x3a7419[_0xcb7f('0x1a')],_0x1a4763=_0x56f678['offset'],_0xef694f=_0x56f678[_0xcb7f('0x1b')]+_0x56f678[_0xcb7f('0x1c')],_0x202a3a;if(_0xef694f>=_0x53871a){_0xef694f=_0x53871a;_0x202a3a=0xc8;}else{_0x202a3a=0xce;}_0x1cb0cf['status'](_0x202a3a);return _0x1cb0cf[_0xcb7f('0x1d')](_0xcb7f('0x1e'),_0x1a4763+'-'+_0xef694f+'/'+_0x53871a)[_0xcb7f('0x19')](_0x3a7419);}return null;};}function patchUpdates(_0x462ac6){return function(_0x54bc13){try{jsonpatch[_0xcb7f('0x1f')](_0x54bc13,_0x462ac6,!![]);}catch(_0x4a577e){return BPromise[_0xcb7f('0x20')](_0x4a577e);}return _0x54bc13[_0xcb7f('0x21')]();};}function saveUpdates(_0x55c01d,_0x496cfa){return function(_0x4f8b9f){if(_0x4f8b9f){return _0x4f8b9f[_0xcb7f('0x22')](_0x55c01d)[_0xcb7f('0x23')](function(_0x5d5c8a){return _0x5d5c8a;});}return null;};}function removeEntity(_0x508fb9,_0x5dfbfa){return function(_0x584046){if(_0x584046){return _0x584046[_0xcb7f('0x24')]()[_0xcb7f('0x23')](function(){_0x508fb9['status'](0xcc)[_0xcb7f('0x25')]();});}};}function handleEntityNotFound(_0x56719b,_0x31e351){return function(_0x16c21f){if(!_0x16c21f){_0x56719b['sendStatus'](0x194);}return _0x16c21f;};}function handleError(_0x447188,_0x98a0ba){_0x98a0ba=_0x98a0ba||0x1f4;return function(_0x801502){logger[_0xcb7f('0x26')](_0x801502['stack']);if(_0x801502[_0xcb7f('0x27')]){delete _0x801502[_0xcb7f('0x27')];}_0x447188[_0xcb7f('0x18')](_0x98a0ba)['send'](_0x801502);};}exports[_0xcb7f('0x28')]=function(_0x41e2aa,_0x3895f8){var _0x17ee54={},_0xc689b4={},_0x4706b7={'count':0x0,'rows':[]};var _0x5e6e22=db[_0xcb7f('0x29')][_0xcb7f('0x2a')];_0xc689b4[_0xcb7f('0x2b')]=_[_0xcb7f('0x2c')](_0x5e6e22);_0xc689b4[_0xcb7f('0x2d')]=_['keys'](_0x41e2aa[_0xcb7f('0x2d')]);_0xc689b4[_0xcb7f('0x2e')]=_[_0xcb7f('0x2f')](_0xc689b4['model'],_0xc689b4[_0xcb7f('0x2d')]);_0x17ee54[_0xcb7f('0x30')]=_[_0xcb7f('0x2f')](_0xc689b4[_0xcb7f('0x2b')],qs[_0xcb7f('0x31')](_0x41e2aa[_0xcb7f('0x2d')][_0xcb7f('0x31')]));_0x17ee54['attributes']=_0x17ee54[_0xcb7f('0x30')][_0xcb7f('0x32')]?_0x17ee54[_0xcb7f('0x30')]:_0xc689b4[_0xcb7f('0x2b')];if(!_0x41e2aa[_0xcb7f('0x2d')][_0xcb7f('0x33')](_0xcb7f('0x34'))){_0x17ee54[_0xcb7f('0x1c')]=qs[_0xcb7f('0x1c')](_0x41e2aa['query']['limit']);_0x17ee54[_0xcb7f('0x1b')]=qs[_0xcb7f('0x1b')](_0x41e2aa[_0xcb7f('0x2d')][_0xcb7f('0x1b')]);}_0x17ee54[_0xcb7f('0x35')]=qs[_0xcb7f('0x36')](_0x41e2aa[_0xcb7f('0x2d')]['sort']);_0x17ee54['where']=qs[_0xcb7f('0x2e')](_[_0xcb7f('0x37')](_0x41e2aa['query'],_0xc689b4[_0xcb7f('0x2e')]));if(_0x41e2aa[_0xcb7f('0x2d')][_0xcb7f('0x38')]){_0x17ee54[_0xcb7f('0x39')]=_['merge'](_0x17ee54[_0xcb7f('0x39')],{'$or':_['map'](_0x5e6e22,function(_0x15073b){if(_0x15073b[_0xcb7f('0x3a')]['key']!==_0xcb7f('0x3b')){var _0x2b1e38={};_0x2b1e38[_0x15073b[_0xcb7f('0x3c')]]={'$like':'%'+_0x41e2aa[_0xcb7f('0x2d')]['filter']+'%'};return _0x2b1e38;}})});}_0x17ee54=_[_0xcb7f('0x3d')]({},_0x17ee54,_0x41e2aa[_0xcb7f('0x3e')]);var _0x2bbfec={'where':_0x17ee54[_0xcb7f('0x39')]};return db['SquareMessage'][_0xcb7f('0x1a')](_0x2bbfec)[_0xcb7f('0x23')](function(_0x51b908){_0x4706b7['count']=_0x51b908;if(_0x41e2aa[_0xcb7f('0x2d')][_0xcb7f('0x3f')]){_0x17ee54['include']=[{'all':!![]}];}return db[_0xcb7f('0x29')][_0xcb7f('0x40')](_0x17ee54);})['then'](function(_0x27de83){_0x4706b7['rows']=_0x27de83;return _0x4706b7;})[_0xcb7f('0x23')](respondWithFilteredResult(_0x3895f8,_0x17ee54))[_0xcb7f('0x41')](handleError(_0x3895f8,null));};exports[_0xcb7f('0x42')]=function(_0x5c83be,_0x4bc2cc){var _0x30ea3b={'raw':!![],'where':{'id':_0x5c83be['params']['id']}},_0x278921={};_0x278921[_0xcb7f('0x2b')]=_['keys'](db[_0xcb7f('0x29')][_0xcb7f('0x2a')]);_0x278921[_0xcb7f('0x2d')]=_[_0xcb7f('0x2c')](_0x5c83be[_0xcb7f('0x2d')]);_0x278921[_0xcb7f('0x2e')]=_[_0xcb7f('0x2f')](_0x278921['model'],_0x278921[_0xcb7f('0x2d')]);_0x30ea3b[_0xcb7f('0x30')]=_[_0xcb7f('0x2f')](_0x278921[_0xcb7f('0x2b')],qs['fields'](_0x5c83be[_0xcb7f('0x2d')]['fields']));_0x30ea3b[_0xcb7f('0x30')]=_0x30ea3b[_0xcb7f('0x30')]['length']?_0x30ea3b[_0xcb7f('0x30')]:_0x278921[_0xcb7f('0x2b')];if(_0x5c83be[_0xcb7f('0x2d')][_0xcb7f('0x3f')]){_0x30ea3b['include']=[{'all':!![]}];}_0x30ea3b=_[_0xcb7f('0x3d')]({},_0x30ea3b,_0x5c83be['options']);return db[_0xcb7f('0x29')][_0xcb7f('0x43')](_0x30ea3b)[_0xcb7f('0x23')](handleEntityNotFound(_0x4bc2cc,null))[_0xcb7f('0x23')](respondWithResult(_0x4bc2cc,null))[_0xcb7f('0x41')](handleError(_0x4bc2cc,null));};exports[_0xcb7f('0x44')]=function(_0x126279,_0xabc1e){return db[_0xcb7f('0x29')][_0xcb7f('0x44')](_0x126279[_0xcb7f('0x45')],{})[_0xcb7f('0x23')](respondWithResult(_0xabc1e,0xc9))[_0xcb7f('0x41')](handleError(_0xabc1e,null));};exports[_0xcb7f('0x22')]=function(_0x14c516,_0xb4ae44){if(_0x14c516[_0xcb7f('0x45')]['id']){delete _0x14c516['body']['id'];}return db['SquareMessage']['find']({'where':{'id':_0x14c516[_0xcb7f('0x46')]['id']}})[_0xcb7f('0x23')](handleEntityNotFound(_0xb4ae44,null))[_0xcb7f('0x23')](saveUpdates(_0x14c516[_0xcb7f('0x45')],null))[_0xcb7f('0x23')](respondWithResult(_0xb4ae44,null))[_0xcb7f('0x41')](handleError(_0xb4ae44,null));};exports[_0xcb7f('0x24')]=function(_0x8ea93e,_0x47faa6){return db['SquareMessage'][_0xcb7f('0x43')]({'where':{'id':_0x8ea93e[_0xcb7f('0x46')]['id']}})[_0xcb7f('0x23')](handleEntityNotFound(_0x47faa6,null))[_0xcb7f('0x23')](removeEntity(_0x47faa6,null))[_0xcb7f('0x41')](handleError(_0x47faa6,null));};
\ No newline at end of file
+var _0x29ea=['sort','where','pick','filter','merge','map','type','key','VIRTUAL','includeAll','include','SquareMessage','findAll','rows','catch','show','params','options','create','body','find','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','limit','apply','reject','save','update','destroy','then','error','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','order'];(function(_0x797438,_0x48db3e){var _0x272b18=function(_0x4c407d){while(--_0x4c407d){_0x797438['push'](_0x797438['shift']());}};_0x272b18(++_0x48db3e);}(_0x29ea,0xf6));var _0xa29e=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x29ea[_0x14add3];return _0x4a174f;};'use strict';var pdf=require(_0xa29e('0x0'));var emlformat=require(_0xa29e('0x1'));var rimraf=require(_0xa29e('0x2'));var zipdir=require(_0xa29e('0x3'));var jsonpatch=require(_0xa29e('0x4'));var rp=require('request-promise');var moment=require(_0xa29e('0x5'));var BPromise=require(_0xa29e('0x6'));var Mustache=require(_0xa29e('0x7'));var util=require(_0xa29e('0x8'));var path=require(_0xa29e('0x9'));var sox=require(_0xa29e('0xa'));var csv=require(_0xa29e('0xb'));var ejs=require(_0xa29e('0xc'));var fs=require('fs');var _=require(_0xa29e('0xd'));var squel=require(_0xa29e('0xe'));var crypto=require(_0xa29e('0xf'));var jsforce=require(_0xa29e('0x10'));var deskjs=require('desk.js');var toCsv=require(_0xa29e('0xb'));var querystring=require(_0xa29e('0x11'));var Papa=require(_0xa29e('0x12'));var Redis=require(_0xa29e('0x13'));var authService=require(_0xa29e('0x14'));var qs=require(_0xa29e('0x15'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xa29e('0x16'));var utils=require(_0xa29e('0x17'));var config=require(_0xa29e('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2a88c0,_0x182ebd){_0x182ebd=_0x182ebd||0xcc;return function(_0xcb6379){if(_0xcb6379){return _0x2a88c0[_0xa29e('0x19')](_0x182ebd);}return _0x2a88c0[_0xa29e('0x1a')](_0x182ebd)[_0xa29e('0x1b')]();};}function respondWithResult(_0x44509e,_0x3ec15b){_0x3ec15b=_0x3ec15b||0xc8;return function(_0x122db5){if(_0x122db5){return _0x44509e[_0xa29e('0x1a')](_0x3ec15b)[_0xa29e('0x1c')](_0x122db5);}};}function respondWithFilteredResult(_0x2a1e9d,_0x49b4b9){return function(_0x35bed0){if(_0x35bed0){var _0x35084f=_0x35bed0[_0xa29e('0x1d')],_0x413f12=_0x49b4b9[_0xa29e('0x1e')],_0x444228=_0x49b4b9[_0xa29e('0x1e')]+_0x49b4b9[_0xa29e('0x1f')],_0x38f442;if(_0x444228>=_0x35084f){_0x444228=_0x35084f;_0x38f442=0xc8;}else{_0x38f442=0xce;}_0x2a1e9d[_0xa29e('0x1a')](_0x38f442);return _0x2a1e9d['set']('Content-Range',_0x413f12+'-'+_0x444228+'/'+_0x35084f)[_0xa29e('0x1c')](_0x35bed0);}return null;};}function patchUpdates(_0x45442d){return function(_0x264ade){try{jsonpatch[_0xa29e('0x20')](_0x264ade,_0x45442d,!![]);}catch(_0x20369b){return BPromise[_0xa29e('0x21')](_0x20369b);}return _0x264ade[_0xa29e('0x22')]();};}function saveUpdates(_0x493e61,_0x4efad9){return function(_0x2c772b){if(_0x2c772b){return _0x2c772b[_0xa29e('0x23')](_0x493e61)['then'](function(_0x3a43fc){return _0x3a43fc;});}return null;};}function removeEntity(_0x3672a6,_0x427dca){return function(_0x43b52e){if(_0x43b52e){return _0x43b52e[_0xa29e('0x24')]()[_0xa29e('0x25')](function(){_0x3672a6[_0xa29e('0x1a')](0xcc)[_0xa29e('0x1b')]();});}};}function handleEntityNotFound(_0xee32db,_0x3df4a1){return function(_0x262cac){if(!_0x262cac){_0xee32db['sendStatus'](0x194);}return _0x262cac;};}function handleError(_0x174347,_0x382306){_0x382306=_0x382306||0x1f4;return function(_0x4911df){logger[_0xa29e('0x26')](_0x4911df[_0xa29e('0x27')]);if(_0x4911df[_0xa29e('0x28')]){delete _0x4911df['name'];}_0x174347[_0xa29e('0x1a')](_0x382306)[_0xa29e('0x29')](_0x4911df);};}exports[_0xa29e('0x2a')]=function(_0x191fb7,_0x2f8185){var _0x196938={},_0x22ef97={},_0x3c5700={'count':0x0,'rows':[]};var _0x21b012=db['SquareMessage'][_0xa29e('0x2b')];_0x22ef97[_0xa29e('0x2c')]=_[_0xa29e('0x2d')](_0x21b012);_0x22ef97[_0xa29e('0x2e')]=_[_0xa29e('0x2d')](_0x191fb7[_0xa29e('0x2e')]);_0x22ef97[_0xa29e('0x2f')]=_[_0xa29e('0x30')](_0x22ef97[_0xa29e('0x2c')],_0x22ef97['query']);_0x196938[_0xa29e('0x31')]=_['intersection'](_0x22ef97['model'],qs['fields'](_0x191fb7[_0xa29e('0x2e')][_0xa29e('0x32')]));_0x196938[_0xa29e('0x31')]=_0x196938['attributes'][_0xa29e('0x33')]?_0x196938[_0xa29e('0x31')]:_0x22ef97[_0xa29e('0x2c')];if(!_0x191fb7[_0xa29e('0x2e')][_0xa29e('0x34')]('nolimit')){_0x196938[_0xa29e('0x1f')]=qs[_0xa29e('0x1f')](_0x191fb7[_0xa29e('0x2e')][_0xa29e('0x1f')]);_0x196938[_0xa29e('0x1e')]=qs[_0xa29e('0x1e')](_0x191fb7[_0xa29e('0x2e')]['offset']);}_0x196938[_0xa29e('0x35')]=qs[_0xa29e('0x36')](_0x191fb7[_0xa29e('0x2e')][_0xa29e('0x36')]);_0x196938[_0xa29e('0x37')]=qs[_0xa29e('0x2f')](_[_0xa29e('0x38')](_0x191fb7['query'],_0x22ef97[_0xa29e('0x2f')]));if(_0x191fb7[_0xa29e('0x2e')][_0xa29e('0x39')]){_0x196938[_0xa29e('0x37')]=_[_0xa29e('0x3a')](_0x196938['where'],{'$or':_[_0xa29e('0x3b')](_0x21b012,function(_0x2008bc){if(_0x2008bc[_0xa29e('0x3c')][_0xa29e('0x3d')]!==_0xa29e('0x3e')){var _0x78f8e6={};_0x78f8e6[_0x2008bc['field']]={'$like':'%'+_0x191fb7[_0xa29e('0x2e')][_0xa29e('0x39')]+'%'};return _0x78f8e6;}})});}_0x196938=_[_0xa29e('0x3a')]({},_0x196938,_0x191fb7['options']);var _0x6463d8={'where':_0x196938['where']};return db['SquareMessage'][_0xa29e('0x1d')](_0x6463d8)['then'](function(_0x5527ca){_0x3c5700[_0xa29e('0x1d')]=_0x5527ca;if(_0x191fb7['query'][_0xa29e('0x3f')]){_0x196938[_0xa29e('0x40')]=[{'all':!![]}];}return db[_0xa29e('0x41')][_0xa29e('0x42')](_0x196938);})[_0xa29e('0x25')](function(_0x420965){_0x3c5700[_0xa29e('0x43')]=_0x420965;return _0x3c5700;})[_0xa29e('0x25')](respondWithFilteredResult(_0x2f8185,_0x196938))[_0xa29e('0x44')](handleError(_0x2f8185,null));};exports[_0xa29e('0x45')]=function(_0x26acb6,_0x458469){var _0x1e08ae={'raw':!![],'where':{'id':_0x26acb6[_0xa29e('0x46')]['id']}},_0x3d6d56={};_0x3d6d56['model']=_[_0xa29e('0x2d')](db[_0xa29e('0x41')][_0xa29e('0x2b')]);_0x3d6d56[_0xa29e('0x2e')]=_['keys'](_0x26acb6[_0xa29e('0x2e')]);_0x3d6d56[_0xa29e('0x2f')]=_['intersection'](_0x3d6d56['model'],_0x3d6d56['query']);_0x1e08ae['attributes']=_[_0xa29e('0x30')](_0x3d6d56[_0xa29e('0x2c')],qs[_0xa29e('0x32')](_0x26acb6[_0xa29e('0x2e')][_0xa29e('0x32')]));_0x1e08ae['attributes']=_0x1e08ae[_0xa29e('0x31')]['length']?_0x1e08ae[_0xa29e('0x31')]:_0x3d6d56[_0xa29e('0x2c')];if(_0x26acb6[_0xa29e('0x2e')]['includeAll']){_0x1e08ae['include']=[{'all':!![]}];}_0x1e08ae=_[_0xa29e('0x3a')]({},_0x1e08ae,_0x26acb6[_0xa29e('0x47')]);return db[_0xa29e('0x41')]['find'](_0x1e08ae)[_0xa29e('0x25')](handleEntityNotFound(_0x458469,null))[_0xa29e('0x25')](respondWithResult(_0x458469,null))[_0xa29e('0x44')](handleError(_0x458469,null));};exports['create']=function(_0x254f7f,_0xd143da){return db[_0xa29e('0x41')][_0xa29e('0x48')](_0x254f7f[_0xa29e('0x49')],{})[_0xa29e('0x25')](respondWithResult(_0xd143da,0xc9))[_0xa29e('0x44')](handleError(_0xd143da,null));};exports[_0xa29e('0x23')]=function(_0x179cb9,_0x56049e){if(_0x179cb9['body']['id']){delete _0x179cb9[_0xa29e('0x49')]['id'];}return db[_0xa29e('0x41')]['find']({'where':{'id':_0x179cb9['params']['id']}})['then'](handleEntityNotFound(_0x56049e,null))[_0xa29e('0x25')](saveUpdates(_0x179cb9[_0xa29e('0x49')],null))['then'](respondWithResult(_0x56049e,null))['catch'](handleError(_0x56049e,null));};exports[_0xa29e('0x24')]=function(_0x563dba,_0x12e642){return db[_0xa29e('0x41')][_0xa29e('0x4a')]({'where':{'id':_0x563dba[_0xa29e('0x46')]['id']}})[_0xa29e('0x25')](handleEntityNotFound(_0x12e642,null))['then'](removeEntity(_0x12e642,null))['catch'](handleError(_0x12e642,null));};
\ No newline at end of file
index d5cacda..20bea71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x02fb=['square_messages','lodash','../../config/logger','api','moment','bluebird','request-promise','path','../../config/environment','exports','SquareMessage'];(function(_0x39db05,_0x747f45){var _0x2e7ce5=function(_0x4470d1){while(--_0x4470d1){_0x39db05['push'](_0x39db05['shift']());}};_0x2e7ce5(++_0x747f45);}(_0x02fb,0x109));var _0xb02f=function(_0x4bc79b,_0x19e9e8){_0x4bc79b=_0x4bc79b-0x0;var _0x32d49a=_0x02fb[_0x4bc79b];return _0x32d49a;};'use strict';var _=require(_0xb02f('0x0'));var util=require('util');var logger=require(_0xb02f('0x1'))(_0xb02f('0x2'));var moment=require(_0xb02f('0x3'));var BPromise=require(_0xb02f('0x4'));var rp=require(_0xb02f('0x5'));var fs=require('fs');var path=require(_0xb02f('0x6'));var rimraf=require('rimraf');var config=require(_0xb02f('0x7'));var attributes=require('./squareMessage.attributes');module[_0xb02f('0x8')]=function(_0x461acc,_0x317f60){return _0x461acc['define'](_0xb02f('0x9'),attributes,{'tableName':_0xb02f('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xdad7=['util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','exports','SquareMessage','square_messages','lodash'];(function(_0x56cbb4,_0x4adb66){var _0x13ae49=function(_0x599e68){while(--_0x599e68){_0x56cbb4['push'](_0x56cbb4['shift']());}};_0x13ae49(++_0x4adb66);}(_0xdad7,0x1e0));var _0x7dad=function(_0x37bd26,_0x5ad346){_0x37bd26=_0x37bd26-0x0;var _0xe83dc4=_0xdad7[_0x37bd26];return _0xe83dc4;};'use strict';var _=require(_0x7dad('0x0'));var util=require(_0x7dad('0x1'));var logger=require(_0x7dad('0x2'))(_0x7dad('0x3'));var moment=require(_0x7dad('0x4'));var BPromise=require(_0x7dad('0x5'));var rp=require(_0x7dad('0x6'));var fs=require('fs');var path=require(_0x7dad('0x7'));var rimraf=require(_0x7dad('0x8'));var config=require(_0x7dad('0x9'));var attributes=require('./squareMessage.attributes');module[_0x7dad('0xa')]=function(_0x26420c,_0x24dc7c){return _0x26420c['define'](_0x7dad('0xb'),attributes,{'tableName':_0x7dad('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index b1589c9..2a0b090 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd1e0=['../../config/environment','jayson/promise','http','request','then','info','SquareMessage,\x20%s,\x20%s','request\x20sent','debug','SquareMessage,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','CreateSquareMessage','SquareMessage','create','body','options','raw','stringify','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc'];(function(_0x3f3f40,_0x4c71f4){var _0x403b7a=function(_0x509014){while(--_0x509014){_0x3f3f40['push'](_0x3f3f40['shift']());}};_0x403b7a(++_0x4c71f4);}(_0xd1e0,0x1ac));var _0x0d1e=function(_0x18ab2a,_0x4debcd){_0x18ab2a=_0x18ab2a-0x0;var _0x16dcee=_0xd1e0[_0x18ab2a];return _0x16dcee;};'use strict';var _=require(_0x0d1e('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x0d1e('0x1'));var rs=require(_0x0d1e('0x2'));var fs=require('fs');var Redis=require(_0x0d1e('0x3'));var db=require(_0x0d1e('0x4'))['db'];var utils=require(_0x0d1e('0x5'));var logger=require('../../config/logger')(_0x0d1e('0x6'));var config=require(_0x0d1e('0x7'));var jayson=require(_0x0d1e('0x8'));var client=jayson['client'][_0x0d1e('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x8f0585,_0x3ba6a1,_0x31d6c0){return new BPromise(function(_0x232734,_0x249bbe){return client[_0x0d1e('0xa')](_0x8f0585,_0x31d6c0)[_0x0d1e('0xb')](function(_0x41ae36){logger[_0x0d1e('0xc')](_0x0d1e('0xd'),_0x3ba6a1,_0x0d1e('0xe'));logger[_0x0d1e('0xf')](_0x0d1e('0x10'),_0x3ba6a1,_0x0d1e('0xe'),JSON['stringify'](_0x41ae36));if(_0x41ae36['error']){if(_0x41ae36[_0x0d1e('0x11')][_0x0d1e('0x12')]===0x1f4){logger[_0x0d1e('0x11')](_0x0d1e('0xd'),_0x3ba6a1,_0x41ae36[_0x0d1e('0x11')]['message']);return _0x249bbe(_0x41ae36['error']['message']);}logger[_0x0d1e('0x11')](_0x0d1e('0xd'),_0x3ba6a1,_0x41ae36[_0x0d1e('0x11')]['message']);return _0x232734(_0x41ae36[_0x0d1e('0x11')][_0x0d1e('0x13')]);}else{logger[_0x0d1e('0xc')](_0x0d1e('0xd'),_0x3ba6a1,_0x0d1e('0xe'));_0x232734(_0x41ae36[_0x0d1e('0x14')]['message']);}})[_0x0d1e('0x15')](function(_0x3b3f0e){logger['error'](_0x0d1e('0xd'),_0x3ba6a1,_0x3b3f0e);_0x249bbe(_0x3b3f0e);});});}exports[_0x0d1e('0x16')]=function(_0x13de3f){var _0x2e9101=this;return new Promise(function(_0x53c37a,_0x3f8c85){return db[_0x0d1e('0x17')][_0x0d1e('0x18')](_0x13de3f[_0x0d1e('0x19')],{'raw':_0x13de3f[_0x0d1e('0x1a')]?_0x13de3f['options'][_0x0d1e('0x1b')]===undefined?!![]:![]:!![]})[_0x0d1e('0xb')](function(_0x34b17b){logger[_0x0d1e('0xc')](_0x0d1e('0x16'),_0x13de3f);logger['debug'](_0x0d1e('0x16'),_0x13de3f,JSON[_0x0d1e('0x1c')](_0x34b17b));_0x53c37a(_0x34b17b);})[_0x0d1e('0x15')](function(_0x3cbcce){logger[_0x0d1e('0x11')]('CreateSquareMessage',_0x3cbcce['message'],_0x13de3f);_0x3f8c85(_0x2e9101[_0x0d1e('0x11')](0x1f4,_0x3cbcce[_0x0d1e('0x13')]));});});};
\ No newline at end of file
+var _0x2a21=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','SquareMessage,\x20%s,\x20%s','debug','SquareMessage,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','catch','CreateSquareMessage','SquareMessage','options','lodash','moment','bluebird','ioredis','../../mysqldb'];(function(_0xe1f1d4,_0x1d6e42){var _0x5af46f=function(_0x4ac0a6){while(--_0x4ac0a6){_0xe1f1d4['push'](_0xe1f1d4['shift']());}};_0x5af46f(++_0x1d6e42);}(_0x2a21,0x78));var _0x12a2=function(_0x312e52,_0x7b6a6e){_0x312e52=_0x312e52-0x0;var _0x245994=_0x2a21[_0x312e52];return _0x245994;};'use strict';var _=require(_0x12a2('0x0'));var util=require('util');var moment=require(_0x12a2('0x1'));var BPromise=require(_0x12a2('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x12a2('0x3'));var db=require(_0x12a2('0x4'))['db'];var utils=require(_0x12a2('0x5'));var logger=require(_0x12a2('0x6'))(_0x12a2('0x7'));var config=require(_0x12a2('0x8'));var jayson=require(_0x12a2('0x9'));var client=jayson[_0x12a2('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x52c0c8,_0x5134b9,_0x2691a8){return new BPromise(function(_0x4981a2,_0x209274){return client[_0x12a2('0xb')](_0x52c0c8,_0x2691a8)[_0x12a2('0xc')](function(_0x590322){logger[_0x12a2('0xd')](_0x12a2('0xe'),_0x5134b9,'request\x20sent');logger[_0x12a2('0xf')](_0x12a2('0x10'),_0x5134b9,_0x12a2('0x11'),JSON[_0x12a2('0x12')](_0x590322));if(_0x590322[_0x12a2('0x13')]){if(_0x590322[_0x12a2('0x13')]['code']===0x1f4){logger[_0x12a2('0x13')](_0x12a2('0xe'),_0x5134b9,_0x590322[_0x12a2('0x13')][_0x12a2('0x14')]);return _0x209274(_0x590322[_0x12a2('0x13')][_0x12a2('0x14')]);}logger[_0x12a2('0x13')](_0x12a2('0xe'),_0x5134b9,_0x590322[_0x12a2('0x13')][_0x12a2('0x14')]);return _0x4981a2(_0x590322['error'][_0x12a2('0x14')]);}else{logger[_0x12a2('0xd')](_0x12a2('0xe'),_0x5134b9,_0x12a2('0x11'));_0x4981a2(_0x590322['result'][_0x12a2('0x14')]);}})[_0x12a2('0x15')](function(_0x1bad16){logger[_0x12a2('0x13')]('SquareMessage,\x20%s,\x20%s',_0x5134b9,_0x1bad16);_0x209274(_0x1bad16);});});}exports[_0x12a2('0x16')]=function(_0x14e0a1){var _0x2cee1f=this;return new Promise(function(_0x24bd35,_0x5d9e6f){return db[_0x12a2('0x17')]['create'](_0x14e0a1['body'],{'raw':_0x14e0a1[_0x12a2('0x18')]?_0x14e0a1[_0x12a2('0x18')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x1fd7d3){logger['info']('CreateSquareMessage',_0x14e0a1);logger[_0x12a2('0xf')]('CreateSquareMessage',_0x14e0a1,JSON[_0x12a2('0x12')](_0x1fd7d3));_0x24bd35(_0x1fd7d3);})[_0x12a2('0x15')](function(_0x5763c7){logger['error'](_0x12a2('0x16'),_0x5763c7[_0x12a2('0x14')],_0x14e0a1);_0x5d9e6f(_0x2cee1f[_0x12a2('0x13')](0x1f4,_0x5763c7['message']));});});};
\ No newline at end of file
index 1b27572..1b25abd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a9a=['get','isAuthenticated','index','/:id','/:id/test','15s','test','post','put','delete','destroy','exports','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service'];(function(_0x574617,_0x42eccc){var _0x29de90=function(_0x367aff){while(--_0x367aff){_0x574617['push'](_0x574617['shift']());}};_0x29de90(++_0x42eccc);}(_0x8a9a,0x193));var _0xa8a9=function(_0x2d7f0e,_0x3e6fbd){_0x2d7f0e=_0x2d7f0e-0x0;var _0x110b07=_0x8a9a[_0x2d7f0e];return _0x110b07;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xa8a9('0x0'));var timeout=require(_0xa8a9('0x1'));var express=require(_0xa8a9('0x2'));var router=express['Router']();var auth=require(_0xa8a9('0x3'));var interaction=require(_0xa8a9('0x4'));var config=require('../../config/environment');var controller=require('./squareOdbc.controller');router[_0xa8a9('0x5')]('/',auth[_0xa8a9('0x6')](),controller[_0xa8a9('0x7')]);router[_0xa8a9('0x5')](_0xa8a9('0x8'),auth['isAuthenticated'](),controller['show']);router[_0xa8a9('0x5')](_0xa8a9('0x9'),auth[_0xa8a9('0x6')](),timeout(_0xa8a9('0xa')),controller[_0xa8a9('0xb')]);router[_0xa8a9('0xc')]('/',auth[_0xa8a9('0x6')](),controller['create']);router[_0xa8a9('0xd')]('/:id',auth[_0xa8a9('0x6')](),controller['update']);router[_0xa8a9('0xe')](_0xa8a9('0x8'),auth[_0xa8a9('0x6')](),controller[_0xa8a9('0xf')]);module[_0xa8a9('0x10')]=router;
\ No newline at end of file
+var _0xd353=['/:id/test','15s','test','post','create','put','update','multer','util','connect-timeout','express','../../components/interaction/service','./squareOdbc.controller','get','isAuthenticated','index','/:id'];(function(_0x53f800,_0x1e96c4){var _0x12eba4=function(_0x2737ee){while(--_0x2737ee){_0x53f800['push'](_0x53f800['shift']());}};_0x12eba4(++_0x1e96c4);}(_0xd353,0x7e));var _0x3d35=function(_0x3ea961,_0x6b803b){_0x3ea961=_0x3ea961-0x0;var _0xda6a39=_0xd353[_0x3ea961];return _0xda6a39;};'use strict';var multer=require(_0x3d35('0x0'));var util=require(_0x3d35('0x1'));var path=require('path');var timeout=require(_0x3d35('0x2'));var express=require(_0x3d35('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x3d35('0x4'));var config=require('../../config/environment');var controller=require(_0x3d35('0x5'));router[_0x3d35('0x6')]('/',auth[_0x3d35('0x7')](),controller[_0x3d35('0x8')]);router[_0x3d35('0x6')](_0x3d35('0x9'),auth[_0x3d35('0x7')](),controller['show']);router[_0x3d35('0x6')](_0x3d35('0xa'),auth[_0x3d35('0x7')](),timeout(_0x3d35('0xb')),controller[_0x3d35('0xc')]);router[_0x3d35('0xd')]('/',auth[_0x3d35('0x7')](),controller[_0x3d35('0xe')]);router[_0x3d35('0xf')]('/:id',auth['isAuthenticated'](),controller[_0x3d35('0x10')]);router['delete']('/:id',auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 83faaa1..7e51a15 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3a5e=['STRING','name','sequelize'];(function(_0x2f88bf,_0x761a0e){var _0x1b451e=function(_0x1116fa){while(--_0x1116fa){_0x2f88bf['push'](_0x2f88bf['shift']());}};_0x1b451e(++_0x761a0e);}(_0x3a5e,0xaa));var _0xe3a5=function(_0x1f995a,_0x4b94b0){_0x1f995a=_0x1f995a-0x0;var _0x374bb2=_0x3a5e[_0x1f995a];return _0x374bb2;};'use strict';var Sequelize=require(_0xe3a5('0x0'));module['exports']={'name':{'type':Sequelize[_0xe3a5('0x1')],'unique':_0xe3a5('0x2'),'allowNull':![]},'dsn':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xe3a5('0x1')]}};
\ No newline at end of file
+var _0xacce=['STRING','name','exports'];(function(_0x14a516,_0x5dee29){var _0x51a308=function(_0x326394){while(--_0x326394){_0x14a516['push'](_0x14a516['shift']());}};_0x51a308(++_0x5dee29);}(_0xacce,0x71));var _0xeacc=function(_0x77add,_0x2016b8){_0x77add=_0x77add-0x0;var _0xa1b62d=_0xacce[_0x77add];return _0xa1b62d;};'use strict';var Sequelize=require('sequelize');module[_0xeacc('0x0')]={'name':{'type':Sequelize[_0xeacc('0x1')],'unique':_0xeacc('0x2'),'allowNull':![]},'dsn':{'type':Sequelize[_0xeacc('0x1')]},'description':{'type':Sequelize[_0xeacc('0x1')]}};
\ No newline at end of file
index 24c67d1..499c8c0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x32ad=['desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','limit','set','Content-Range','save','update','then','destroy','get','ODBC','UserProfileResource','error','name','send','SquareOdbc','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','filters','filter','merge','map','type','VIRTUAL','field','options','includeAll','include','findAll','catch','show','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','test','dsn','odbc','openSync','html-pdf','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce'];(function(_0x175a34,_0x29eadf){var _0x3afdf8=function(_0xd7c9dd){while(--_0xd7c9dd){_0x175a34['push'](_0x175a34['shift']());}};_0x3afdf8(++_0x29eadf);}(_0x32ad,0x99));var _0xd32a=function(_0x2118b3,_0x596128){_0x2118b3=_0x2118b3-0x0;var _0x10bb6b=_0x32ad[_0x2118b3];return _0x10bb6b;};'use strict';var pdf=require(_0xd32a('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xd32a('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xd32a('0x2'));var rp=require(_0xd32a('0x3'));var moment=require(_0xd32a('0x4'));var BPromise=require(_0xd32a('0x5'));var Mustache=require(_0xd32a('0x6'));var util=require(_0xd32a('0x7'));var path=require(_0xd32a('0x8'));var sox=require('sox');var csv=require(_0xd32a('0x9'));var ejs=require(_0xd32a('0xa'));var fs=require('fs');var _=require(_0xd32a('0xb'));var squel=require(_0xd32a('0xc'));var crypto=require(_0xd32a('0xd'));var jsforce=require(_0xd32a('0xe'));var deskjs=require(_0xd32a('0xf'));var toCsv=require(_0xd32a('0x9'));var querystring=require(_0xd32a('0x10'));var Papa=require(_0xd32a('0x11'));var Redis=require('ioredis');var authService=require(_0xd32a('0x12'));var qs=require(_0xd32a('0x13'));var hardwareService=require(_0xd32a('0x14'));var logger=require(_0xd32a('0x15'))(_0xd32a('0x16'));var utils=require(_0xd32a('0x17'));var config=require(_0xd32a('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xde6345,_0xd76e7b){_0xd76e7b=_0xd76e7b||0xcc;return function(_0x1d83ac){if(_0x1d83ac){return _0xde6345[_0xd32a('0x19')](_0xd76e7b);}return _0xde6345['status'](_0xd76e7b)[_0xd32a('0x1a')]();};}function respondWithResult(_0x1febe6,_0x1dc386){_0x1dc386=_0x1dc386||0xc8;return function(_0x1feef3){if(_0x1feef3){return _0x1febe6[_0xd32a('0x1b')](_0x1dc386)[_0xd32a('0x1c')](_0x1feef3);}};}function respondWithFilteredResult(_0x2e3d16,_0xa5dd2){return function(_0x2be815){if(_0x2be815){var _0x43b50e=_0x2be815[_0xd32a('0x1d')],_0x2ab5f5=_0xa5dd2[_0xd32a('0x1e')],_0x4c34e4=_0xa5dd2['offset']+_0xa5dd2[_0xd32a('0x1f')],_0x54d945;if(_0x4c34e4>=_0x43b50e){_0x4c34e4=_0x43b50e;_0x54d945=0xc8;}else{_0x54d945=0xce;}_0x2e3d16[_0xd32a('0x1b')](_0x54d945);return _0x2e3d16[_0xd32a('0x20')](_0xd32a('0x21'),_0x2ab5f5+'-'+_0x4c34e4+'/'+_0x43b50e)[_0xd32a('0x1c')](_0x2be815);}return null;};}function patchUpdates(_0x22512b){return function(_0x466f2a){try{jsonpatch['apply'](_0x466f2a,_0x22512b,!![]);}catch(_0x1a3314){return BPromise['reject'](_0x1a3314);}return _0x466f2a[_0xd32a('0x22')]();};}function saveUpdates(_0x153144,_0x29db45){return function(_0x524494){if(_0x524494){return _0x524494[_0xd32a('0x23')](_0x153144)[_0xd32a('0x24')](function(_0x30bc87){return _0x30bc87;});}return null;};}function removeEntity(_0x113457,_0x5d3349){return function(_0x5d79f2){if(_0x5d79f2){return _0x5d79f2[_0xd32a('0x25')]()['then'](function(){var _0x146235=_0x5d79f2[_0xd32a('0x26')]({'plain':!![]});var _0x2ec9f0=_0xd32a('0x27');return db[_0xd32a('0x28')]['destroy']({'where':{'type':_0x2ec9f0,'resourceId':_0x146235['id']}})['then'](function(){return _0x5d79f2;});})[_0xd32a('0x24')](function(){_0x113457[_0xd32a('0x1b')](0xcc)[_0xd32a('0x1a')]();});}};}function handleEntityNotFound(_0x35fdd5,_0x36d05f){return function(_0x298b63){if(!_0x298b63){_0x35fdd5['sendStatus'](0x194);}return _0x298b63;};}function handleError(_0x5f4c11,_0x579d98){_0x579d98=_0x579d98||0x1f4;return function(_0x4d5a2e){logger[_0xd32a('0x29')](_0x4d5a2e['stack']);if(_0x4d5a2e[_0xd32a('0x2a')]){delete _0x4d5a2e[_0xd32a('0x2a')];}_0x5f4c11[_0xd32a('0x1b')](_0x579d98)[_0xd32a('0x2b')](_0x4d5a2e);};}exports['index']=function(_0x95bfe0,_0x3f7f31){var _0x4a097b={},_0x400c21={},_0x46af49={'count':0x0,'rows':[]};var _0x89c278=db[_0xd32a('0x2c')][_0xd32a('0x2d')];_0x400c21[_0xd32a('0x2e')]=_[_0xd32a('0x2f')](_0x89c278);_0x400c21[_0xd32a('0x30')]=_[_0xd32a('0x2f')](_0x95bfe0['query']);_0x400c21['filters']=_[_0xd32a('0x31')](_0x400c21['model'],_0x400c21['query']);_0x4a097b[_0xd32a('0x32')]=_[_0xd32a('0x31')](_0x400c21['model'],qs['fields'](_0x95bfe0[_0xd32a('0x30')][_0xd32a('0x33')]));_0x4a097b['attributes']=_0x4a097b[_0xd32a('0x32')][_0xd32a('0x34')]?_0x4a097b[_0xd32a('0x32')]:_0x400c21['model'];if(!_0x95bfe0['query'][_0xd32a('0x35')]('nolimit')){_0x4a097b[_0xd32a('0x1f')]=qs[_0xd32a('0x1f')](_0x95bfe0['query'][_0xd32a('0x1f')]);_0x4a097b['offset']=qs[_0xd32a('0x1e')](_0x95bfe0[_0xd32a('0x30')][_0xd32a('0x1e')]);}_0x4a097b[_0xd32a('0x36')]=qs[_0xd32a('0x37')](_0x95bfe0['query'][_0xd32a('0x37')]);_0x4a097b[_0xd32a('0x38')]=qs[_0xd32a('0x39')](_['pick'](_0x95bfe0[_0xd32a('0x30')],_0x400c21[_0xd32a('0x39')]));if(_0x95bfe0[_0xd32a('0x30')][_0xd32a('0x3a')]){_0x4a097b[_0xd32a('0x38')]=_[_0xd32a('0x3b')](_0x4a097b[_0xd32a('0x38')],{'$or':_[_0xd32a('0x3c')](_0x89c278,function(_0x411b32){if(_0x411b32[_0xd32a('0x3d')]['key']!==_0xd32a('0x3e')){var _0x4d297c={};_0x4d297c[_0x411b32[_0xd32a('0x3f')]]={'$like':'%'+_0x95bfe0[_0xd32a('0x30')]['filter']+'%'};return _0x4d297c;}})});}_0x4a097b=_[_0xd32a('0x3b')]({},_0x4a097b,_0x95bfe0[_0xd32a('0x40')]);var _0x1bde7c={'where':_0x4a097b[_0xd32a('0x38')]};return db[_0xd32a('0x2c')]['count'](_0x1bde7c)[_0xd32a('0x24')](function(_0x4d406a){_0x46af49['count']=_0x4d406a;if(_0x95bfe0[_0xd32a('0x30')][_0xd32a('0x41')]){_0x4a097b[_0xd32a('0x42')]=[{'all':!![]}];}return db[_0xd32a('0x2c')][_0xd32a('0x43')](_0x4a097b);})[_0xd32a('0x24')](function(_0xf290de){_0x46af49['rows']=_0xf290de;return _0x46af49;})['then'](respondWithFilteredResult(_0x3f7f31,_0x4a097b))[_0xd32a('0x44')](handleError(_0x3f7f31,null));};exports[_0xd32a('0x45')]=function(_0x56be61,_0x379ec9){var _0x39d144={'raw':!![],'where':{'id':_0x56be61['params']['id']}},_0x23a7bc={};_0x23a7bc[_0xd32a('0x2e')]=_[_0xd32a('0x2f')](db[_0xd32a('0x2c')][_0xd32a('0x2d')]);_0x23a7bc['query']=_[_0xd32a('0x2f')](_0x56be61['query']);_0x23a7bc[_0xd32a('0x39')]=_[_0xd32a('0x31')](_0x23a7bc[_0xd32a('0x2e')],_0x23a7bc['query']);_0x39d144[_0xd32a('0x32')]=_[_0xd32a('0x31')](_0x23a7bc[_0xd32a('0x2e')],qs['fields'](_0x56be61[_0xd32a('0x30')][_0xd32a('0x33')]));_0x39d144[_0xd32a('0x32')]=_0x39d144[_0xd32a('0x32')][_0xd32a('0x34')]?_0x39d144['attributes']:_0x23a7bc['model'];if(_0x56be61[_0xd32a('0x30')]['includeAll']){_0x39d144[_0xd32a('0x42')]=[{'all':!![]}];}_0x39d144=_[_0xd32a('0x3b')]({},_0x39d144,_0x56be61[_0xd32a('0x40')]);return db['SquareOdbc'][_0xd32a('0x46')](_0x39d144)[_0xd32a('0x24')](handleEntityNotFound(_0x379ec9,null))[_0xd32a('0x24')](respondWithResult(_0x379ec9,null))['catch'](handleError(_0x379ec9,null));};exports[_0xd32a('0x47')]=function(_0x548135,_0x5071b4){return db[_0xd32a('0x2c')][_0xd32a('0x47')](_0x548135[_0xd32a('0x48')],{})['then'](function(_0x5692dd){var _0x593fbe=_0x548135[_0xd32a('0x49')][_0xd32a('0x26')]({'plain':!![]});if(!_0x593fbe)throw new Error(_0xd32a('0x4a'));if(_0x593fbe[_0xd32a('0x4b')]===_0xd32a('0x49')){var _0x45ed45=_0x5692dd[_0xd32a('0x26')]({'plain':!![]});var _0x2830bc=_0xd32a('0x27');return db['UserProfileSection']['find']({'where':{'name':_0x2830bc,'userProfileId':_0x593fbe[_0xd32a('0x4c')]},'raw':!![]})[_0xd32a('0x24')](function(_0x32e100){if(_0x32e100&&_0x32e100[_0xd32a('0x4d')]===0x0){return db['UserProfileResource'][_0xd32a('0x47')]({'name':_0x45ed45[_0xd32a('0x2a')],'resourceId':_0x45ed45['id'],'type':_0x32e100[_0xd32a('0x2a')],'sectionId':_0x32e100['id']},{})[_0xd32a('0x24')](function(){return _0x5692dd;});}else{return _0x5692dd;}})[_0xd32a('0x44')](function(_0x1967d1){logger[_0xd32a('0x29')](_0xd32a('0x4e'),_0x1967d1);throw _0x1967d1;});}return _0x5692dd;})['then'](respondWithResult(_0x5071b4,0xc9))[_0xd32a('0x44')](handleError(_0x5071b4,null));};exports[_0xd32a('0x23')]=function(_0x6271f7,_0x41f80f){if(_0x6271f7[_0xd32a('0x48')]['id']){delete _0x6271f7[_0xd32a('0x48')]['id'];}return db[_0xd32a('0x2c')][_0xd32a('0x46')]({'where':{'id':_0x6271f7[_0xd32a('0x4f')]['id']}})['then'](handleEntityNotFound(_0x41f80f,null))['then'](saveUpdates(_0x6271f7[_0xd32a('0x48')],null))[_0xd32a('0x24')](respondWithResult(_0x41f80f,null))['catch'](handleError(_0x41f80f,null));};exports[_0xd32a('0x25')]=function(_0x4e7a16,_0x3d8656){return db[_0xd32a('0x2c')][_0xd32a('0x46')]({'where':{'id':_0x4e7a16['params']['id']}})[_0xd32a('0x24')](handleEntityNotFound(_0x3d8656,null))[_0xd32a('0x24')](removeEntity(_0x3d8656,null))['catch'](handleError(_0x3d8656,null));};exports[_0xd32a('0x50')]=function(_0x90ecf7,_0x2584ab,_0x5ec120){var _0x2a3170;return db[_0xd32a('0x2c')][_0xd32a('0x46')]({'where':{'id':_0x90ecf7[_0xd32a('0x4f')]['id']},'attributes':['id',_0xd32a('0x51')]})[_0xd32a('0x24')](handleEntityNotFound(_0x2584ab,null))[_0xd32a('0x24')](function(_0x1a13d4){if(_0x1a13d4){var _0x210dd4=require(_0xd32a('0x52'))();_0x210dd4[_0xd32a('0x53')](_0x1a13d4[_0xd32a('0x51')]);_0x210dd4['closeSync']();return _0x1a13d4;}})[_0xd32a('0x24')](respondWithResult(_0x2584ab,null))['catch'](handleError(_0x2584ab,null));};
\ No newline at end of file
+var _0x986e=['moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','set','save','update','then','destroy','UserProfileResource','error','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','SquareOdbc','includeAll','findAll','show','params','length','include','find','catch','create','get','user','ODBC','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','test','odbc','dsn','closeSync','rimraf','zip-dir','fast-json-patch','request-promise'];(function(_0x3feb27,_0x11b912){var _0x5e4cd4=function(_0x2d4698){while(--_0x2d4698){_0x3feb27['push'](_0x3feb27['shift']());}};_0x5e4cd4(++_0x11b912);}(_0x986e,0xfb));var _0xe986=function(_0x37c981,_0x22a780){_0x37c981=_0x37c981-0x0;var _0x4deca9=_0x986e[_0x37c981];return _0x4deca9;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xe986('0x0'));var zipdir=require(_0xe986('0x1'));var jsonpatch=require(_0xe986('0x2'));var rp=require(_0xe986('0x3'));var moment=require(_0xe986('0x4'));var BPromise=require(_0xe986('0x5'));var Mustache=require(_0xe986('0x6'));var util=require(_0xe986('0x7'));var path=require('path');var sox=require(_0xe986('0x8'));var csv=require(_0xe986('0x9'));var ejs=require(_0xe986('0xa'));var fs=require('fs');var _=require(_0xe986('0xb'));var squel=require(_0xe986('0xc'));var crypto=require(_0xe986('0xd'));var jsforce=require(_0xe986('0xe'));var deskjs=require(_0xe986('0xf'));var toCsv=require(_0xe986('0x9'));var querystring=require(_0xe986('0x10'));var Papa=require(_0xe986('0x11'));var Redis=require(_0xe986('0x12'));var authService=require(_0xe986('0x13'));var qs=require(_0xe986('0x14'));var hardwareService=require(_0xe986('0x15'));var logger=require(_0xe986('0x16'))(_0xe986('0x17'));var utils=require(_0xe986('0x18'));var config=require(_0xe986('0x19'));var db=require(_0xe986('0x1a'))['db'];function respondWithStatusCode(_0x40a5cd,_0xfa56e2){_0xfa56e2=_0xfa56e2||0xcc;return function(_0x492a87){if(_0x492a87){return _0x40a5cd['sendStatus'](_0xfa56e2);}return _0x40a5cd[_0xe986('0x1b')](_0xfa56e2)[_0xe986('0x1c')]();};}function respondWithResult(_0x5c3468,_0x56ae18){_0x56ae18=_0x56ae18||0xc8;return function(_0x3af9bf){if(_0x3af9bf){return _0x5c3468[_0xe986('0x1b')](_0x56ae18)[_0xe986('0x1d')](_0x3af9bf);}};}function respondWithFilteredResult(_0x381ebf,_0x1a5435){return function(_0x553154){if(_0x553154){var _0x261265=_0x553154[_0xe986('0x1e')],_0xde6bf5=_0x1a5435[_0xe986('0x1f')],_0x4e7f0b=_0x1a5435[_0xe986('0x1f')]+_0x1a5435[_0xe986('0x20')],_0x25747d;if(_0x4e7f0b>=_0x261265){_0x4e7f0b=_0x261265;_0x25747d=0xc8;}else{_0x25747d=0xce;}_0x381ebf[_0xe986('0x1b')](_0x25747d);return _0x381ebf[_0xe986('0x21')]('Content-Range',_0xde6bf5+'-'+_0x4e7f0b+'/'+_0x261265)[_0xe986('0x1d')](_0x553154);}return null;};}function patchUpdates(_0x219a00){return function(_0x1c9d94){try{jsonpatch['apply'](_0x1c9d94,_0x219a00,!![]);}catch(_0x1fc31c){return BPromise['reject'](_0x1fc31c);}return _0x1c9d94[_0xe986('0x22')]();};}function saveUpdates(_0x4bc61d,_0x5df8bb){return function(_0x548cdb){if(_0x548cdb){return _0x548cdb[_0xe986('0x23')](_0x4bc61d)[_0xe986('0x24')](function(_0x5a45ae){return _0x5a45ae;});}return null;};}function removeEntity(_0x162474,_0x4f83aa){return function(_0x25d475){if(_0x25d475){return _0x25d475[_0xe986('0x25')]()[_0xe986('0x24')](function(){var _0x1303a7=_0x25d475['get']({'plain':!![]});var _0x5c8af6='ODBC';return db[_0xe986('0x26')][_0xe986('0x25')]({'where':{'type':_0x5c8af6,'resourceId':_0x1303a7['id']}})[_0xe986('0x24')](function(){return _0x25d475;});})[_0xe986('0x24')](function(){_0x162474['status'](0xcc)[_0xe986('0x1c')]();});}};}function handleEntityNotFound(_0x19ed80,_0x450513){return function(_0x2d4e0b){if(!_0x2d4e0b){_0x19ed80['sendStatus'](0x194);}return _0x2d4e0b;};}function handleError(_0x437077,_0x11b6d7){_0x11b6d7=_0x11b6d7||0x1f4;return function(_0xe5906a){logger[_0xe986('0x27')](_0xe5906a[_0xe986('0x28')]);if(_0xe5906a[_0xe986('0x29')]){delete _0xe5906a[_0xe986('0x29')];}_0x437077[_0xe986('0x1b')](_0x11b6d7)[_0xe986('0x2a')](_0xe5906a);};}exports[_0xe986('0x2b')]=function(_0x7b5a8c,_0xa1e8e3){var _0x2e17d9={},_0x486f0d={},_0x4a1dcd={'count':0x0,'rows':[]};var _0x5c8899=db['SquareOdbc'][_0xe986('0x2c')];_0x486f0d[_0xe986('0x2d')]=_[_0xe986('0x2e')](_0x5c8899);_0x486f0d[_0xe986('0x2f')]=_[_0xe986('0x2e')](_0x7b5a8c[_0xe986('0x2f')]);_0x486f0d[_0xe986('0x30')]=_[_0xe986('0x31')](_0x486f0d[_0xe986('0x2d')],_0x486f0d['query']);_0x2e17d9['attributes']=_[_0xe986('0x31')](_0x486f0d['model'],qs[_0xe986('0x32')](_0x7b5a8c[_0xe986('0x2f')]['fields']));_0x2e17d9['attributes']=_0x2e17d9[_0xe986('0x33')]['length']?_0x2e17d9[_0xe986('0x33')]:_0x486f0d[_0xe986('0x2d')];if(!_0x7b5a8c[_0xe986('0x2f')][_0xe986('0x34')]('nolimit')){_0x2e17d9[_0xe986('0x20')]=qs[_0xe986('0x20')](_0x7b5a8c[_0xe986('0x2f')][_0xe986('0x20')]);_0x2e17d9['offset']=qs[_0xe986('0x1f')](_0x7b5a8c[_0xe986('0x2f')][_0xe986('0x1f')]);}_0x2e17d9[_0xe986('0x35')]=qs['sort'](_0x7b5a8c[_0xe986('0x2f')][_0xe986('0x36')]);_0x2e17d9[_0xe986('0x37')]=qs['filters'](_['pick'](_0x7b5a8c[_0xe986('0x2f')],_0x486f0d[_0xe986('0x30')]));if(_0x7b5a8c[_0xe986('0x2f')][_0xe986('0x38')]){_0x2e17d9[_0xe986('0x37')]=_[_0xe986('0x39')](_0x2e17d9[_0xe986('0x37')],{'$or':_[_0xe986('0x3a')](_0x5c8899,function(_0x59c3b1){if(_0x59c3b1[_0xe986('0x3b')][_0xe986('0x3c')]!==_0xe986('0x3d')){var _0x2cd416={};_0x2cd416[_0x59c3b1[_0xe986('0x3e')]]={'$like':'%'+_0x7b5a8c['query']['filter']+'%'};return _0x2cd416;}})});}_0x2e17d9=_[_0xe986('0x39')]({},_0x2e17d9,_0x7b5a8c[_0xe986('0x3f')]);var _0x446c85={'where':_0x2e17d9[_0xe986('0x37')]};return db[_0xe986('0x40')]['count'](_0x446c85)[_0xe986('0x24')](function(_0x126ac7){_0x4a1dcd[_0xe986('0x1e')]=_0x126ac7;if(_0x7b5a8c[_0xe986('0x2f')][_0xe986('0x41')]){_0x2e17d9['include']=[{'all':!![]}];}return db[_0xe986('0x40')][_0xe986('0x42')](_0x2e17d9);})[_0xe986('0x24')](function(_0x1ba0f2){_0x4a1dcd['rows']=_0x1ba0f2;return _0x4a1dcd;})[_0xe986('0x24')](respondWithFilteredResult(_0xa1e8e3,_0x2e17d9))['catch'](handleError(_0xa1e8e3,null));};exports[_0xe986('0x43')]=function(_0x21368b,_0x390e5e){var _0x4bdf55={'raw':!![],'where':{'id':_0x21368b[_0xe986('0x44')]['id']}},_0x4d1562={};_0x4d1562[_0xe986('0x2d')]=_[_0xe986('0x2e')](db[_0xe986('0x40')][_0xe986('0x2c')]);_0x4d1562[_0xe986('0x2f')]=_[_0xe986('0x2e')](_0x21368b['query']);_0x4d1562['filters']=_[_0xe986('0x31')](_0x4d1562[_0xe986('0x2d')],_0x4d1562['query']);_0x4bdf55[_0xe986('0x33')]=_[_0xe986('0x31')](_0x4d1562[_0xe986('0x2d')],qs[_0xe986('0x32')](_0x21368b[_0xe986('0x2f')][_0xe986('0x32')]));_0x4bdf55[_0xe986('0x33')]=_0x4bdf55[_0xe986('0x33')][_0xe986('0x45')]?_0x4bdf55[_0xe986('0x33')]:_0x4d1562[_0xe986('0x2d')];if(_0x21368b['query'][_0xe986('0x41')]){_0x4bdf55[_0xe986('0x46')]=[{'all':!![]}];}_0x4bdf55=_['merge']({},_0x4bdf55,_0x21368b[_0xe986('0x3f')]);return db['SquareOdbc'][_0xe986('0x47')](_0x4bdf55)['then'](handleEntityNotFound(_0x390e5e,null))['then'](respondWithResult(_0x390e5e,null))[_0xe986('0x48')](handleError(_0x390e5e,null));};exports['create']=function(_0x1a6bc3,_0x5ede67){return db[_0xe986('0x40')][_0xe986('0x49')](_0x1a6bc3['body'],{})[_0xe986('0x24')](function(_0x19355f){var _0x1afa44=_0x1a6bc3['user'][_0xe986('0x4a')]({'plain':!![]});if(!_0x1afa44)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x1afa44['role']===_0xe986('0x4b')){var _0x573de1=_0x19355f['get']({'plain':!![]});var _0x1cb69a=_0xe986('0x4c');return db[_0xe986('0x4d')][_0xe986('0x47')]({'where':{'name':_0x1cb69a,'userProfileId':_0x1afa44['userProfileId']},'raw':!![]})[_0xe986('0x24')](function(_0x30d55e){if(_0x30d55e&&_0x30d55e[_0xe986('0x4e')]===0x0){return db[_0xe986('0x26')][_0xe986('0x49')]({'name':_0x573de1[_0xe986('0x29')],'resourceId':_0x573de1['id'],'type':_0x30d55e['name'],'sectionId':_0x30d55e['id']},{})[_0xe986('0x24')](function(){return _0x19355f;});}else{return _0x19355f;}})[_0xe986('0x48')](function(_0x1b709c){logger[_0xe986('0x27')](_0xe986('0x4f'),_0x1b709c);throw _0x1b709c;});}return _0x19355f;})[_0xe986('0x24')](respondWithResult(_0x5ede67,0xc9))[_0xe986('0x48')](handleError(_0x5ede67,null));};exports[_0xe986('0x23')]=function(_0x120831,_0x459863){if(_0x120831[_0xe986('0x50')]['id']){delete _0x120831[_0xe986('0x50')]['id'];}return db['SquareOdbc'][_0xe986('0x47')]({'where':{'id':_0x120831['params']['id']}})[_0xe986('0x24')](handleEntityNotFound(_0x459863,null))[_0xe986('0x24')](saveUpdates(_0x120831[_0xe986('0x50')],null))[_0xe986('0x24')](respondWithResult(_0x459863,null))['catch'](handleError(_0x459863,null));};exports[_0xe986('0x25')]=function(_0x5ce756,_0x2ec386){return db[_0xe986('0x40')][_0xe986('0x47')]({'where':{'id':_0x5ce756['params']['id']}})[_0xe986('0x24')](handleEntityNotFound(_0x2ec386,null))[_0xe986('0x24')](removeEntity(_0x2ec386,null))['catch'](handleError(_0x2ec386,null));};exports[_0xe986('0x51')]=function(_0x3da90a,_0xf9df50,_0x20d695){var _0x1b79f5;return db[_0xe986('0x40')]['find']({'where':{'id':_0x3da90a['params']['id']},'attributes':['id','dsn']})[_0xe986('0x24')](handleEntityNotFound(_0xf9df50,null))['then'](function(_0x3243b3){if(_0x3243b3){var _0x295608=require(_0xe986('0x52'))();_0x295608['openSync'](_0x3243b3[_0xe986('0x53')]);_0x295608[_0xe986('0x54')]();return _0x3243b3;}})['then'](respondWithResult(_0xf9df50,null))['catch'](handleError(_0xf9df50,null));};
\ No newline at end of file
index d95902f..e9307fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdad8=['request-promise','path','rimraf','../../config/environment','./squareOdbc.attributes','exports','square_odbc','lodash','../../config/logger','api','moment','bluebird'];(function(_0x1965c7,_0x47ec37){var _0x373770=function(_0x417c87){while(--_0x417c87){_0x1965c7['push'](_0x1965c7['shift']());}};_0x373770(++_0x47ec37);}(_0xdad8,0x73));var _0x8dad=function(_0x63f723,_0xa4aadd){_0x63f723=_0x63f723-0x0;var _0x165fad=_0xdad8[_0x63f723];return _0x165fad;};'use strict';var _=require(_0x8dad('0x0'));var util=require('util');var logger=require(_0x8dad('0x1'))(_0x8dad('0x2'));var moment=require(_0x8dad('0x3'));var BPromise=require(_0x8dad('0x4'));var rp=require(_0x8dad('0x5'));var fs=require('fs');var path=require(_0x8dad('0x6'));var rimraf=require(_0x8dad('0x7'));var config=require(_0x8dad('0x8'));var attributes=require(_0x8dad('0x9'));module[_0x8dad('0xa')]=function(_0x60b343,_0x232965){return _0x60b343['define']('SquareOdbc',attributes,{'tableName':_0x8dad('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8849=['request-promise','path','rimraf','../../config/environment','./squareOdbc.attributes','SquareOdbc','square_odbc','util','../../config/logger','api','moment'];(function(_0x476dde,_0x2a5929){var _0x633179=function(_0x5524fc){while(--_0x5524fc){_0x476dde['push'](_0x476dde['shift']());}};_0x633179(++_0x2a5929);}(_0x8849,0x96));var _0x9884=function(_0x31487e,_0x37a977){_0x31487e=_0x31487e-0x0;var _0x307bcb=_0x8849[_0x31487e];return _0x307bcb;};'use strict';var _=require('lodash');var util=require(_0x9884('0x0'));var logger=require(_0x9884('0x1'))(_0x9884('0x2'));var moment=require(_0x9884('0x3'));var BPromise=require('bluebird');var rp=require(_0x9884('0x4'));var fs=require('fs');var path=require(_0x9884('0x5'));var rimraf=require(_0x9884('0x6'));var config=require(_0x9884('0x7'));var attributes=require(_0x9884('0x8'));module['exports']=function(_0x3266fd,_0x561a5c){return _0x3266fd['define'](_0x9884('0x9'),attributes,{'tableName':_0x9884('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 15ad285..7c25e45 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xea6e=['find','options','where','attributes','include','model','lodash','bluebird','randomstring','ioredis','../../mysqldb','rpc','../../config/environment','jayson/promise','client','http','request','then','info','SquareOdbc,\x20%s,\x20%s','debug','SquareOdbc,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','ShowSquareOdbc'];(function(_0x564702,_0x5239fd){var _0x1b76e6=function(_0xfd59a6){while(--_0xfd59a6){_0x564702['push'](_0x564702['shift']());}};_0x1b76e6(++_0x5239fd);}(_0xea6e,0x1c8));var _0xeea6=function(_0x490a5d,_0x22b24a){_0x490a5d=_0x490a5d-0x0;var _0x3a5c35=_0xea6e[_0x490a5d];return _0x3a5c35;};'use strict';var _=require(_0xeea6('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xeea6('0x1'));var rs=require(_0xeea6('0x2'));var fs=require('fs');var Redis=require(_0xeea6('0x3'));var db=require(_0xeea6('0x4'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xeea6('0x5'));var config=require(_0xeea6('0x6'));var jayson=require(_0xeea6('0x7'));var client=jayson[_0xeea6('0x8')][_0xeea6('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x472894,_0x4448cb,_0x43135c){return new BPromise(function(_0x2fd276,_0x274265){return client[_0xeea6('0xa')](_0x472894,_0x43135c)[_0xeea6('0xb')](function(_0x131879){logger[_0xeea6('0xc')](_0xeea6('0xd'),_0x4448cb,'request\x20sent');logger[_0xeea6('0xe')](_0xeea6('0xf'),_0x4448cb,_0xeea6('0x10'),JSON[_0xeea6('0x11')](_0x131879));if(_0x131879[_0xeea6('0x12')]){if(_0x131879[_0xeea6('0x12')][_0xeea6('0x13')]===0x1f4){logger[_0xeea6('0x12')](_0xeea6('0xd'),_0x4448cb,_0x131879[_0xeea6('0x12')][_0xeea6('0x14')]);return _0x274265(_0x131879['error']['message']);}logger[_0xeea6('0x12')](_0xeea6('0xd'),_0x4448cb,_0x131879[_0xeea6('0x12')][_0xeea6('0x14')]);return _0x2fd276(_0x131879[_0xeea6('0x12')]['message']);}else{logger[_0xeea6('0xc')]('SquareOdbc,\x20%s,\x20%s',_0x4448cb,_0xeea6('0x10'));_0x2fd276(_0x131879[_0xeea6('0x15')][_0xeea6('0x14')]);}})[_0xeea6('0x16')](function(_0x1a4ea4){logger[_0xeea6('0x12')]('SquareOdbc,\x20%s,\x20%s',_0x4448cb,_0x1a4ea4);_0x274265(_0x1a4ea4);});});}exports[_0xeea6('0x17')]=function(_0x522ee8){var _0x105c1f=this;return new Promise(function(_0x224290,_0x298ffa){return db['SquareOdbc'][_0xeea6('0x18')]({'raw':_0x522ee8['options']?_0x522ee8[_0xeea6('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x522ee8[_0xeea6('0x19')]?_0x522ee8['options'][_0xeea6('0x1a')]||null:null,'attributes':_0x522ee8[_0xeea6('0x19')]?_0x522ee8[_0xeea6('0x19')][_0xeea6('0x1b')]||null:null,'include':_0x522ee8['options']?_0x522ee8[_0xeea6('0x19')][_0xeea6('0x1c')]?_['map'](_0x522ee8['options'][_0xeea6('0x1c')],function(_0x1ebeef){return{'model':db[_0x1ebeef[_0xeea6('0x1d')]],'as':_0x1ebeef['as'],'attributes':_0x1ebeef[_0xeea6('0x1b')],'include':_0x1ebeef[_0xeea6('0x1c')]?_['map'](_0x1ebeef[_0xeea6('0x1c')],function(_0x1920e0){return{'model':db[_0x1920e0[_0xeea6('0x1d')]],'as':_0x1920e0['as'],'attributes':_0x1920e0['attributes'],'include':_0x1920e0[_0xeea6('0x1c')]?_['map'](_0x1920e0[_0xeea6('0x1c')],function(_0x1dfdd6){return{'model':db[_0x1dfdd6['model']],'as':_0x1dfdd6['as'],'attributes':_0x1dfdd6[_0xeea6('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xeea6('0xb')](function(_0x257ef9){logger[_0xeea6('0xc')](_0xeea6('0x17'),_0x522ee8);logger[_0xeea6('0xe')](_0xeea6('0x17'),_0x522ee8,JSON['stringify'](_0x257ef9));_0x224290(_0x257ef9);})[_0xeea6('0x16')](function(_0x4d8578){logger[_0xeea6('0x12')]('ShowSquareOdbc',_0x4d8578[_0xeea6('0x14')],_0x522ee8);_0x298ffa(_0x105c1f[_0xeea6('0x12')](0x1f4,_0x4d8578[_0xeea6('0x14')]));});});};
\ No newline at end of file
+var _0xc663=['options','raw','attributes','include','model','map','ShowSquareOdbc','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','request','then','info','request\x20sent','debug','SquareOdbc,\x20%s,\x20%s,\x20%s','stringify','error','code','message','SquareOdbc,\x20%s,\x20%s','result','catch','SquareOdbc','find'];(function(_0x237d52,_0x17a8af){var _0xbeda6e=function(_0x773dc8){while(--_0x773dc8){_0x237d52['push'](_0x237d52['shift']());}};_0xbeda6e(++_0x17a8af);}(_0xc663,0x17b));var _0x3c66=function(_0x382868,_0xb5acfd){_0x382868=_0x382868-0x0;var _0x43e191=_0xc663[_0x382868];return _0x43e191;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x3c66('0x0'));var BPromise=require(_0x3c66('0x1'));var rs=require(_0x3c66('0x2'));var fs=require('fs');var Redis=require(_0x3c66('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x3c66('0x4'));var logger=require(_0x3c66('0x5'))('rpc');var config=require(_0x3c66('0x6'));var jayson=require(_0x3c66('0x7'));var client=jayson[_0x3c66('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2d2b3b,_0x5bde22,_0x33a983){return new BPromise(function(_0x17a36f,_0x25efc0){return client[_0x3c66('0x9')](_0x2d2b3b,_0x33a983)[_0x3c66('0xa')](function(_0x4c864d){logger[_0x3c66('0xb')]('SquareOdbc,\x20%s,\x20%s',_0x5bde22,_0x3c66('0xc'));logger[_0x3c66('0xd')](_0x3c66('0xe'),_0x5bde22,_0x3c66('0xc'),JSON[_0x3c66('0xf')](_0x4c864d));if(_0x4c864d[_0x3c66('0x10')]){if(_0x4c864d[_0x3c66('0x10')][_0x3c66('0x11')]===0x1f4){logger[_0x3c66('0x10')]('SquareOdbc,\x20%s,\x20%s',_0x5bde22,_0x4c864d['error']['message']);return _0x25efc0(_0x4c864d[_0x3c66('0x10')][_0x3c66('0x12')]);}logger['error'](_0x3c66('0x13'),_0x5bde22,_0x4c864d[_0x3c66('0x10')]['message']);return _0x17a36f(_0x4c864d[_0x3c66('0x10')]['message']);}else{logger[_0x3c66('0xb')](_0x3c66('0x13'),_0x5bde22,'request\x20sent');_0x17a36f(_0x4c864d[_0x3c66('0x14')][_0x3c66('0x12')]);}})[_0x3c66('0x15')](function(_0x172774){logger[_0x3c66('0x10')](_0x3c66('0x13'),_0x5bde22,_0x172774);_0x25efc0(_0x172774);});});}exports['ShowSquareOdbc']=function(_0x27d793){var _0x4e6c82=this;return new Promise(function(_0x38b35a,_0x16321a){return db[_0x3c66('0x16')][_0x3c66('0x17')]({'raw':_0x27d793[_0x3c66('0x18')]?_0x27d793[_0x3c66('0x18')][_0x3c66('0x19')]===undefined?!![]:![]:!![],'where':_0x27d793[_0x3c66('0x18')]?_0x27d793['options']['where']||null:null,'attributes':_0x27d793['options']?_0x27d793[_0x3c66('0x18')][_0x3c66('0x1a')]||null:null,'include':_0x27d793[_0x3c66('0x18')]?_0x27d793['options'][_0x3c66('0x1b')]?_['map'](_0x27d793['options'][_0x3c66('0x1b')],function(_0x3ffcde){return{'model':db[_0x3ffcde[_0x3c66('0x1c')]],'as':_0x3ffcde['as'],'attributes':_0x3ffcde[_0x3c66('0x1a')],'include':_0x3ffcde['include']?_[_0x3c66('0x1d')](_0x3ffcde[_0x3c66('0x1b')],function(_0x2e9163){return{'model':db[_0x2e9163[_0x3c66('0x1c')]],'as':_0x2e9163['as'],'attributes':_0x2e9163[_0x3c66('0x1a')],'include':_0x2e9163[_0x3c66('0x1b')]?_[_0x3c66('0x1d')](_0x2e9163[_0x3c66('0x1b')],function(_0x380c82){return{'model':db[_0x380c82[_0x3c66('0x1c')]],'as':_0x380c82['as'],'attributes':_0x380c82['attributes']};}):[]};}):[]};}):[]:[]})[_0x3c66('0xa')](function(_0x314d6b){logger[_0x3c66('0xb')](_0x3c66('0x1e'),_0x27d793);logger[_0x3c66('0xd')](_0x3c66('0x1e'),_0x27d793,JSON['stringify'](_0x314d6b));_0x38b35a(_0x314d6b);})[_0x3c66('0x15')](function(_0x17f4de){logger[_0x3c66('0x10')](_0x3c66('0x1e'),_0x17f4de[_0x3c66('0x12')],_0x27d793);_0x16321a(_0x4e6c82['error'](0x1f4,_0x17f4de[_0x3c66('0x12')]));});});};
\ No newline at end of file
index 43dde6b..98c3ade 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x33c1=['express','Router','../../components/interaction/service','../../config/environment','./squareProject.controller','get','isAuthenticated','index','/:id','show','/:id/users','getUsers','post','addUsers','update','delete','removeUsers','exports','multer','util','connect-timeout'];(function(_0x9bc4cc,_0x5ee99f){var _0x514972=function(_0x313935){while(--_0x313935){_0x9bc4cc['push'](_0x9bc4cc['shift']());}};_0x514972(++_0x5ee99f);}(_0x33c1,0x90));var _0x133c=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x33c1[_0x321bb2];return _0x9c12ed;};'use strict';var multer=require(_0x133c('0x0'));var util=require(_0x133c('0x1'));var path=require('path');var timeout=require(_0x133c('0x2'));var express=require(_0x133c('0x3'));var router=express[_0x133c('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x133c('0x5'));var config=require(_0x133c('0x6'));var controller=require(_0x133c('0x7'));router[_0x133c('0x8')]('/',auth[_0x133c('0x9')](),controller[_0x133c('0xa')]);router[_0x133c('0x8')](_0x133c('0xb'),auth['isAuthenticated'](),controller[_0x133c('0xc')]);router[_0x133c('0x8')](_0x133c('0xd'),auth[_0x133c('0x9')](),controller[_0x133c('0xe')]);router[_0x133c('0xf')]('/',auth[_0x133c('0x9')](),controller['create']);router[_0x133c('0xf')](_0x133c('0xd'),auth[_0x133c('0x9')](),controller[_0x133c('0x10')]);router['put'](_0x133c('0xb'),auth[_0x133c('0x9')](),controller[_0x133c('0x11')]);router[_0x133c('0x12')](_0x133c('0xb'),auth[_0x133c('0x9')](),controller['destroy']);router[_0x133c('0x12')](_0x133c('0xd'),auth[_0x133c('0x9')](),controller[_0x133c('0x13')]);module[_0x133c('0x14')]=router;
\ No newline at end of file
+var _0xd17f=['../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','show','/:id/users','post','addUsers','put','update','delete','destroy','removeUsers','exports','path','express','Router','../../components/auth/service'];(function(_0x55d842,_0xea4a4e){var _0x29d837=function(_0x5722d6){while(--_0x5722d6){_0x55d842['push'](_0x55d842['shift']());}};_0x29d837(++_0xea4a4e);}(_0xd17f,0x13c));var _0xfd17=function(_0x5ddb1c,_0x5ea4df){_0x5ddb1c=_0x5ddb1c-0x0;var _0x354adc=_0xd17f[_0x5ddb1c];return _0x354adc;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xfd17('0x0'));var timeout=require('connect-timeout');var express=require(_0xfd17('0x1'));var router=express[_0xfd17('0x2')]();var auth=require(_0xfd17('0x3'));var interaction=require(_0xfd17('0x4'));var config=require(_0xfd17('0x5'));var controller=require('./squareProject.controller');router[_0xfd17('0x6')]('/',auth[_0xfd17('0x7')](),controller[_0xfd17('0x8')]);router['get'](_0xfd17('0x9'),auth[_0xfd17('0x7')](),controller[_0xfd17('0xa')]);router[_0xfd17('0x6')](_0xfd17('0xb'),auth[_0xfd17('0x7')](),controller['getUsers']);router[_0xfd17('0xc')]('/',auth['isAuthenticated'](),controller['create']);router['post'](_0xfd17('0xb'),auth[_0xfd17('0x7')](),controller[_0xfd17('0xd')]);router[_0xfd17('0xe')](_0xfd17('0x9'),auth[_0xfd17('0x7')](),controller[_0xfd17('0xf')]);router[_0xfd17('0x10')](_0xfd17('0x9'),auth[_0xfd17('0x7')](),controller[_0xfd17('0x11')]);router[_0xfd17('0x10')](_0xfd17('0xb'),auth[_0xfd17('0x7')](),controller[_0xfd17('0x12')]);module[_0xfd17('0x13')]=router;
\ No newline at end of file
index cf9e20f..faf573e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8784=['name','STRING','TEXT','BLOB','long','getDataValue','preproduction','toString','utf8','production','sequelize','exports'];(function(_0x4d830c,_0x459112){var _0x5913a4=function(_0x559421){while(--_0x559421){_0x4d830c['push'](_0x4d830c['shift']());}};_0x5913a4(++_0x459112);}(_0x8784,0x172));var _0x4878=function(_0x16771d,_0x224c60){_0x16771d=_0x16771d-0x0;var _0x386f11=_0x8784[_0x16771d];return _0x386f11;};'use strict';var Sequelize=require(_0x4878('0x0'));module[_0x4878('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0x4878('0x2'),'allowNull':![]},'description':{'type':Sequelize[_0x4878('0x3')]},'notes':{'type':Sequelize[_0x4878('0x4')]},'preproduction':{'type':Sequelize[_0x4878('0x5')](_0x4878('0x6')),'get':function(){if(this['getDataValue']('preproduction')){return this[_0x4878('0x7')](_0x4878('0x8'))[_0x4878('0x9')](_0x4878('0xa'));}}},'production':{'type':Sequelize[_0x4878('0x5')](_0x4878('0x6')),'get':function(){if(this[_0x4878('0x7')](_0x4878('0xb'))){return this[_0x4878('0x7')]('production')[_0x4878('0x9')](_0x4878('0xa'));}}}};
\ No newline at end of file
+var _0x482d=['preproduction','getDataValue','utf8','production','STRING','name','TEXT','BLOB','long'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0x482d,0x16c));var _0xd482=function(_0x44647f,_0x273ba0){_0x44647f=_0x44647f-0x0;var _0x461701=_0x482d[_0x44647f];return _0x461701;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0xd482('0x0')],'unique':_0xd482('0x1'),'allowNull':![]},'description':{'type':Sequelize[_0xd482('0x0')]},'notes':{'type':Sequelize[_0xd482('0x2')]},'preproduction':{'type':Sequelize[_0xd482('0x3')](_0xd482('0x4')),'get':function(){if(this['getDataValue'](_0xd482('0x5'))){return this[_0xd482('0x6')](_0xd482('0x5'))['toString'](_0xd482('0x7'));}}},'production':{'type':Sequelize['BLOB']('long'),'get':function(){if(this['getDataValue'](_0xd482('0x8'))){return this[_0xd482('0x6')](_0xd482('0x8'))['toString'](_0xd482('0x7'));}}}};
\ No newline at end of file
index 9057169..d2b7b2a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x958a=['isArray','emit','userSquareProject:remove','getUsers','hasOwnProperty','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','./squareProject.socket','register','end','status','json','offset','limit','set','Content-Range','apply','save','update','destroy','then','get','SquareProjects','sendStatus','name','send','rawAttributes','query','keys','filters','intersection','model','attributes','fields','length','nolimit','order','sort','where','pick','filter','merge','map','type','key','field','options','SquareProject','count','includeAll','include','findAll','rows','show','find','catch','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','addUsers','ids','omit','removeUsers'];(function(_0x155900,_0x90c7a5){var _0x3a0004=function(_0x99393b){while(--_0x99393b){_0x155900['push'](_0x155900['shift']());}};_0x3a0004(++_0x90c7a5);}(_0x958a,0x128));var _0xa958=function(_0x34c322,_0x36d359){_0x34c322=_0x34c322-0x0;var _0xd78f67=_0x958a[_0x34c322];return _0xd78f67;};'use strict';var pdf=require(_0xa958('0x0'));var emlformat=require(_0xa958('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xa958('0x2'));var jsonpatch=require(_0xa958('0x3'));var rp=require(_0xa958('0x4'));var moment=require(_0xa958('0x5'));var BPromise=require(_0xa958('0x6'));var Mustache=require('mustache');var util=require(_0xa958('0x7'));var path=require('path');var sox=require(_0xa958('0x8'));var csv=require(_0xa958('0x9'));var ejs=require(_0xa958('0xa'));var fs=require('fs');var _=require(_0xa958('0xb'));var squel=require(_0xa958('0xc'));var crypto=require(_0xa958('0xd'));var jsforce=require(_0xa958('0xe'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xa958('0xf'));var Papa=require(_0xa958('0x10'));var Redis=require(_0xa958('0x11'));var authService=require(_0xa958('0x12'));var qs=require(_0xa958('0x13'));var hardwareService=require(_0xa958('0x14'));var logger=require(_0xa958('0x15'))(_0xa958('0x16'));var utils=require(_0xa958('0x17'));var config=require(_0xa958('0x18'));var db=require(_0xa958('0x19'))['db'];config[_0xa958('0x1a')]=_[_0xa958('0x1b')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xa958('0x1a')]));require(_0xa958('0x1c'))[_0xa958('0x1d')](socket);function respondWithStatusCode(_0x591d4d,_0x3ebc66){_0x3ebc66=_0x3ebc66||0xcc;return function(_0x54c439){if(_0x54c439){return _0x591d4d['sendStatus'](_0x3ebc66);}return _0x591d4d['status'](_0x3ebc66)[_0xa958('0x1e')]();};}function respondWithResult(_0x15fca8,_0xb90ac6){_0xb90ac6=_0xb90ac6||0xc8;return function(_0x6a81c7){if(_0x6a81c7){return _0x15fca8[_0xa958('0x1f')](_0xb90ac6)[_0xa958('0x20')](_0x6a81c7);}};}function respondWithFilteredResult(_0x23736f,_0x21e366){return function(_0x4d836f){if(_0x4d836f){var _0x39af49=_0x4d836f['count'],_0x4eadc9=_0x21e366[_0xa958('0x21')],_0x3a053f=_0x21e366[_0xa958('0x21')]+_0x21e366[_0xa958('0x22')],_0x70d13e;if(_0x3a053f>=_0x39af49){_0x3a053f=_0x39af49;_0x70d13e=0xc8;}else{_0x70d13e=0xce;}_0x23736f[_0xa958('0x1f')](_0x70d13e);return _0x23736f[_0xa958('0x23')](_0xa958('0x24'),_0x4eadc9+'-'+_0x3a053f+'/'+_0x39af49)['json'](_0x4d836f);}return null;};}function patchUpdates(_0x4a90c2){return function(_0x373661){try{jsonpatch[_0xa958('0x25')](_0x373661,_0x4a90c2,!![]);}catch(_0x16c0be){return BPromise['reject'](_0x16c0be);}return _0x373661[_0xa958('0x26')]();};}function saveUpdates(_0x383aa3,_0x5c091a){return function(_0x28cf12){if(_0x28cf12){return _0x28cf12[_0xa958('0x27')](_0x383aa3)['then'](function(_0x5c5a2b){return _0x5c5a2b;});}return null;};}function removeEntity(_0x201ed3,_0x40b51e){return function(_0x50b3c3){if(_0x50b3c3){return _0x50b3c3[_0xa958('0x28')]()[_0xa958('0x29')](function(){var _0x2f03df=_0x50b3c3[_0xa958('0x2a')]({'plain':!![]});var _0x16b04a=_0xa958('0x2b');return db['UserProfileResource'][_0xa958('0x28')]({'where':{'type':_0x16b04a,'resourceId':_0x2f03df['id']}})['then'](function(){return _0x50b3c3;});})[_0xa958('0x29')](function(){_0x201ed3[_0xa958('0x1f')](0xcc)[_0xa958('0x1e')]();});}};}function handleEntityNotFound(_0x18f600,_0x21541f){return function(_0xddc7f6){if(!_0xddc7f6){_0x18f600[_0xa958('0x2c')](0x194);}return _0xddc7f6;};}function handleError(_0xc75ae9,_0x12cfde){_0x12cfde=_0x12cfde||0x1f4;return function(_0x404d07){logger['error'](_0x404d07['stack']);if(_0x404d07[_0xa958('0x2d')]){delete _0x404d07['name'];}_0xc75ae9[_0xa958('0x1f')](_0x12cfde)[_0xa958('0x2e')](_0x404d07);};}exports['index']=function(_0x23bdbf,_0x3d4711){var _0x179bc2={},_0x374c77={},_0x283452={'count':0x0,'rows':[]};var _0x54ad35=db['SquareProject'][_0xa958('0x2f')];_0x374c77['model']=_['keys'](_0x54ad35);_0x374c77[_0xa958('0x30')]=_[_0xa958('0x31')](_0x23bdbf[_0xa958('0x30')]);_0x374c77[_0xa958('0x32')]=_[_0xa958('0x33')](_0x374c77[_0xa958('0x34')],_0x374c77['query']);_0x179bc2[_0xa958('0x35')]=_['intersection'](_0x374c77['model'],qs[_0xa958('0x36')](_0x23bdbf[_0xa958('0x30')][_0xa958('0x36')]));_0x179bc2[_0xa958('0x35')]=_0x179bc2[_0xa958('0x35')][_0xa958('0x37')]?_0x179bc2[_0xa958('0x35')]:_0x374c77[_0xa958('0x34')];if(!_0x23bdbf['query']['hasOwnProperty'](_0xa958('0x38'))){_0x179bc2[_0xa958('0x22')]=qs[_0xa958('0x22')](_0x23bdbf[_0xa958('0x30')][_0xa958('0x22')]);_0x179bc2['offset']=qs[_0xa958('0x21')](_0x23bdbf[_0xa958('0x30')][_0xa958('0x21')]);}_0x179bc2[_0xa958('0x39')]=qs['sort'](_0x23bdbf[_0xa958('0x30')][_0xa958('0x3a')]);_0x179bc2[_0xa958('0x3b')]=qs[_0xa958('0x32')](_[_0xa958('0x3c')](_0x23bdbf['query'],_0x374c77[_0xa958('0x32')]));if(_0x23bdbf[_0xa958('0x30')][_0xa958('0x3d')]){_0x179bc2[_0xa958('0x3b')]=_[_0xa958('0x3e')](_0x179bc2[_0xa958('0x3b')],{'$or':_[_0xa958('0x3f')](_0x54ad35,function(_0x452ded){if(_0x452ded[_0xa958('0x40')][_0xa958('0x41')]!=='VIRTUAL'){var _0x34ff45={};_0x34ff45[_0x452ded[_0xa958('0x42')]]={'$like':'%'+_0x23bdbf[_0xa958('0x30')]['filter']+'%'};return _0x34ff45;}})});}_0x179bc2=_[_0xa958('0x3e')]({},_0x179bc2,_0x23bdbf[_0xa958('0x43')]);var _0x53df5d={'where':_0x179bc2['where']};return db[_0xa958('0x44')]['count'](_0x53df5d)[_0xa958('0x29')](function(_0x5b6251){_0x283452[_0xa958('0x45')]=_0x5b6251;if(_0x23bdbf['query'][_0xa958('0x46')]){_0x179bc2[_0xa958('0x47')]=[{'all':!![]}];}return db[_0xa958('0x44')][_0xa958('0x48')](_0x179bc2);})[_0xa958('0x29')](function(_0x45b383){_0x283452[_0xa958('0x49')]=_0x45b383;return _0x283452;})[_0xa958('0x29')](respondWithFilteredResult(_0x3d4711,_0x179bc2))['catch'](handleError(_0x3d4711,null));};exports[_0xa958('0x4a')]=function(_0x38dfb4,_0x2720c3){var _0x5ab319={'raw':![],'where':{'id':_0x38dfb4['params']['id']}},_0x585b19={};_0x585b19[_0xa958('0x34')]=_[_0xa958('0x31')](db[_0xa958('0x44')][_0xa958('0x2f')]);_0x585b19[_0xa958('0x30')]=_['keys'](_0x38dfb4[_0xa958('0x30')]);_0x585b19[_0xa958('0x32')]=_[_0xa958('0x33')](_0x585b19[_0xa958('0x34')],_0x585b19[_0xa958('0x30')]);_0x5ab319[_0xa958('0x35')]=_[_0xa958('0x33')](_0x585b19[_0xa958('0x34')],qs[_0xa958('0x36')](_0x38dfb4[_0xa958('0x30')][_0xa958('0x36')]));_0x5ab319[_0xa958('0x35')]=_0x5ab319[_0xa958('0x35')][_0xa958('0x37')]?_0x5ab319[_0xa958('0x35')]:_0x585b19[_0xa958('0x34')];if(_0x38dfb4[_0xa958('0x30')]['includeAll']){_0x5ab319['include']=[{'all':!![]}];}_0x5ab319=_['merge']({},_0x5ab319,_0x38dfb4[_0xa958('0x43')]);return db[_0xa958('0x44')][_0xa958('0x4b')](_0x5ab319)[_0xa958('0x29')](handleEntityNotFound(_0x2720c3,null))['then'](respondWithResult(_0x2720c3,null))[_0xa958('0x4c')](handleError(_0x2720c3,null));};exports[_0xa958('0x4d')]=function(_0xa07b67,_0x439eb7){return db[_0xa958('0x44')]['create'](_0xa07b67[_0xa958('0x4e')],{})[_0xa958('0x29')](function(_0x3f8407){var _0x5eb8ab=_0xa07b67[_0xa958('0x4f')]['get']({'plain':!![]});if(!_0x5eb8ab)throw new Error(_0xa958('0x50'));if(_0x5eb8ab[_0xa958('0x51')]===_0xa958('0x4f')){var _0x4e0740=_0x3f8407[_0xa958('0x2a')]({'plain':!![]});var _0x5a0794=_0xa958('0x2b');return db[_0xa958('0x52')][_0xa958('0x4b')]({'where':{'name':_0x5a0794,'userProfileId':_0x5eb8ab[_0xa958('0x53')]},'raw':!![]})[_0xa958('0x29')](function(_0x4fbbcf){if(_0x4fbbcf&&_0x4fbbcf[_0xa958('0x54')]===0x0){return db['UserProfileResource'][_0xa958('0x4d')]({'name':_0x4e0740[_0xa958('0x2d')],'resourceId':_0x4e0740['id'],'type':_0x4fbbcf['name'],'sectionId':_0x4fbbcf['id']},{})[_0xa958('0x29')](function(){return _0x3f8407;});}else{return _0x3f8407;}})['catch'](function(_0x317059){logger[_0xa958('0x55')](_0xa958('0x56'),_0x317059);throw _0x317059;});}return _0x3f8407;})[_0xa958('0x29')](respondWithResult(_0x439eb7,0xc9))[_0xa958('0x4c')](handleError(_0x439eb7,null));};exports[_0xa958('0x27')]=function(_0x1928b7,_0x4060ba){if(_0x1928b7[_0xa958('0x4e')]['id']){delete _0x1928b7['body']['id'];}return db[_0xa958('0x44')]['find']({'where':{'id':_0x1928b7[_0xa958('0x57')]['id']}})[_0xa958('0x29')](handleEntityNotFound(_0x4060ba,null))[_0xa958('0x29')](saveUpdates(_0x1928b7['body'],null))['then'](respondWithResult(_0x4060ba,null))[_0xa958('0x4c')](handleError(_0x4060ba,null));};exports[_0xa958('0x28')]=function(_0x108df9,_0x307127){return db['SquareProject'][_0xa958('0x4b')]({'where':{'id':_0x108df9[_0xa958('0x57')]['id']}})['then'](handleEntityNotFound(_0x307127,null))[_0xa958('0x29')](removeEntity(_0x307127,null))[_0xa958('0x4c')](handleError(_0x307127,null));};exports['addUsers']=function(_0x386fb7,_0x541ba2,_0x5629c4){return db['SquareProject'][_0xa958('0x4b')]({'where':{'id':_0x386fb7[_0xa958('0x57')]['id']}})[_0xa958('0x29')](handleEntityNotFound(_0x541ba2,null))[_0xa958('0x29')](function(_0x5001ec){if(_0x5001ec){return _0x5001ec[_0xa958('0x58')](_0x386fb7['body'][_0xa958('0x59')],_[_0xa958('0x5a')](_0x386fb7[_0xa958('0x4e')],[_0xa958('0x59'),'id'])||{});}})[_0xa958('0x29')](respondWithResult(_0x541ba2,null))[_0xa958('0x4c')](handleError(_0x541ba2,null));};exports['removeUsers']=function(_0x4937a5,_0x317637,_0x377e71){return db[_0xa958('0x44')][_0xa958('0x4b')]({'where':{'id':_0x4937a5[_0xa958('0x57')]['id']}})['then'](handleEntityNotFound(_0x317637,null))[_0xa958('0x29')](function(_0x35d885){if(_0x35d885){return _0x35d885[_0xa958('0x5b')](_0x4937a5['query'][_0xa958('0x59')])[_0xa958('0x29')](function(){if(_[_0xa958('0x5c')](_0x4937a5[_0xa958('0x30')][_0xa958('0x59')])){for(var _0x2d40b1=0x0;_0x2d40b1<_0x4937a5[_0xa958('0x30')]['ids']['length'];_0x2d40b1+=0x1){socket[_0xa958('0x5d')]('userSquareProject:remove',{'UserId':Number(_0x4937a5[_0xa958('0x30')][_0xa958('0x59')][_0x2d40b1]),'SquareProjectId':Number(_0x4937a5[_0xa958('0x57')]['id'])});}}else{socket[_0xa958('0x5d')](_0xa958('0x5e'),{'UserId':Number(_0x4937a5[_0xa958('0x30')][_0xa958('0x59')]),'SquareProjectId':Number(_0x4937a5[_0xa958('0x57')]['id'])});}});}})[_0xa958('0x29')](respondWithStatusCode(_0x317637,null))['catch'](handleError(_0x317637,null));};exports[_0xa958('0x5f')]=function(_0x1d1729,_0x4f9358,_0x53a26d){var _0x2c913d={};var _0x43877f={};var _0xa769e0;var _0x36d3cd;return db[_0xa958('0x44')]['findOne']({'where':{'id':_0x1d1729[_0xa958('0x57')]['id']}})['then'](handleEntityNotFound(_0x4f9358,null))[_0xa958('0x29')](function(_0x59957d){if(_0x59957d){_0xa769e0=_0x59957d;_0x43877f[_0xa958('0x34')]=_[_0xa958('0x31')](db['User'][_0xa958('0x2f')]);_0x43877f[_0xa958('0x30')]=_[_0xa958('0x31')](_0x1d1729[_0xa958('0x30')]);_0x43877f[_0xa958('0x32')]=_[_0xa958('0x33')](_0x43877f[_0xa958('0x34')],_0x43877f[_0xa958('0x30')]);_0x2c913d['attributes']=_['intersection'](_0x43877f['model'],qs[_0xa958('0x36')](_0x1d1729['query'][_0xa958('0x36')]));_0x2c913d[_0xa958('0x35')]=_0x2c913d['attributes']['length']?_0x2c913d[_0xa958('0x35')]:_0x43877f[_0xa958('0x34')];_0x2c913d[_0xa958('0x39')]=qs[_0xa958('0x3a')](_0x1d1729[_0xa958('0x30')]['sort']);_0x2c913d[_0xa958('0x3b')]=qs['filters'](_[_0xa958('0x3c')](_0x1d1729[_0xa958('0x30')],_0x43877f[_0xa958('0x32')]));if(_0x1d1729['query'][_0xa958('0x3d')]){_0x2c913d[_0xa958('0x3b')]=_['merge'](_0x2c913d[_0xa958('0x3b')],{'$or':_[_0xa958('0x3f')](_0x2c913d[_0xa958('0x35')],function(_0xb57878){var _0x1cd29c={};_0x1cd29c[_0xb57878]={'$like':'%'+_0x1d1729['query'][_0xa958('0x3d')]+'%'};return _0x1cd29c;})});}_0x2c913d=_['merge']({},_0x2c913d,_0x1d1729[_0xa958('0x43')]);return _0xa769e0['getUsers'](_0x2c913d);}})[_0xa958('0x29')](function(_0x436369){if(_0x436369){_0x36d3cd=_0x436369[_0xa958('0x37')];if(!_0x1d1729[_0xa958('0x30')][_0xa958('0x60')](_0xa958('0x38'))){_0x2c913d[_0xa958('0x22')]=qs['limit'](_0x1d1729['query'][_0xa958('0x22')]);_0x2c913d['offset']=qs[_0xa958('0x21')](_0x1d1729[_0xa958('0x30')][_0xa958('0x21')]);}return _0xa769e0[_0xa958('0x5f')](_0x2c913d);}})[_0xa958('0x29')](function(_0x1ef99d){if(_0x1ef99d){return _0x1ef99d?{'count':_0x36d3cd,'rows':_0x1ef99d}:null;}})[_0xa958('0x29')](respondWithResult(_0x4f9358,null))[_0xa958('0x4c')](handleError(_0x4f9358,null));};
\ No newline at end of file
+var _0x1a85=['mustache','util','sox','ejs','squel','crypto','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./squareProject.socket','status','json','count','offset','limit','set','Content-Range','apply','reject','update','then','get','SquareProjects','UserProfileResource','destroy','end','sendStatus','error','stack','name','index','rawAttributes','model','keys','filters','intersection','query','attributes','fields','length','hasOwnProperty','order','sort','where','merge','type','key','VIRTUAL','field','filter','options','SquareProject','includeAll','include','findAll','rows','catch','show','params','find','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','addUsers','ids','removeUsers','isArray','emit','userSquareProject:remove','findOne','User','pick','getUsers','nolimit','rimraf','zip-dir','fast-json-patch','bluebird'];(function(_0x12d05a,_0x553c3a){var _0x5d2a2c=function(_0x210c1a){while(--_0x210c1a){_0x12d05a['push'](_0x12d05a['shift']());}};_0x5d2a2c(++_0x553c3a);}(_0x1a85,0x178));var _0x51a8=function(_0x4a6e77,_0x4a677c){_0x4a6e77=_0x4a6e77-0x0;var _0x1c137e=_0x1a85[_0x4a6e77];return _0x1c137e;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x51a8('0x0'));var zipdir=require(_0x51a8('0x1'));var jsonpatch=require(_0x51a8('0x2'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x51a8('0x3'));var Mustache=require(_0x51a8('0x4'));var util=require(_0x51a8('0x5'));var path=require('path');var sox=require(_0x51a8('0x6'));var csv=require('to-csv');var ejs=require(_0x51a8('0x7'));var fs=require('fs');var _=require('lodash');var squel=require(_0x51a8('0x8'));var crypto=require(_0x51a8('0x9'));var jsforce=require('jsforce');var deskjs=require(_0x51a8('0xa'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x51a8('0xb'));var Redis=require(_0x51a8('0xc'));var authService=require(_0x51a8('0xd'));var qs=require(_0x51a8('0xe'));var hardwareService=require(_0x51a8('0xf'));var logger=require(_0x51a8('0x10'))(_0x51a8('0x11'));var utils=require(_0x51a8('0x12'));var config=require(_0x51a8('0x13'));var db=require(_0x51a8('0x14'))['db'];config[_0x51a8('0x15')]=_[_0x51a8('0x16')](config[_0x51a8('0x15')],{'host':_0x51a8('0x17'),'port':0x18eb});var socket=require(_0x51a8('0x18'))(new Redis(config[_0x51a8('0x15')]));require(_0x51a8('0x19'))['register'](socket);function respondWithStatusCode(_0x461f5c,_0x7a4c36){_0x7a4c36=_0x7a4c36||0xcc;return function(_0xaec066){if(_0xaec066){return _0x461f5c['sendStatus'](_0x7a4c36);}return _0x461f5c[_0x51a8('0x1a')](_0x7a4c36)['end']();};}function respondWithResult(_0x10584b,_0x2b8d37){_0x2b8d37=_0x2b8d37||0xc8;return function(_0x39cd45){if(_0x39cd45){return _0x10584b[_0x51a8('0x1a')](_0x2b8d37)[_0x51a8('0x1b')](_0x39cd45);}};}function respondWithFilteredResult(_0x3e0603,_0x1f49ee){return function(_0x516abc){if(_0x516abc){var _0x1c2f25=_0x516abc[_0x51a8('0x1c')],_0x45a433=_0x1f49ee[_0x51a8('0x1d')],_0xd52230=_0x1f49ee['offset']+_0x1f49ee[_0x51a8('0x1e')],_0x23539e;if(_0xd52230>=_0x1c2f25){_0xd52230=_0x1c2f25;_0x23539e=0xc8;}else{_0x23539e=0xce;}_0x3e0603[_0x51a8('0x1a')](_0x23539e);return _0x3e0603[_0x51a8('0x1f')](_0x51a8('0x20'),_0x45a433+'-'+_0xd52230+'/'+_0x1c2f25)[_0x51a8('0x1b')](_0x516abc);}return null;};}function patchUpdates(_0x3bc044){return function(_0x28aea0){try{jsonpatch[_0x51a8('0x21')](_0x28aea0,_0x3bc044,!![]);}catch(_0x5ac1c0){return BPromise[_0x51a8('0x22')](_0x5ac1c0);}return _0x28aea0['save']();};}function saveUpdates(_0xfe0ddb,_0x12c029){return function(_0x8bda40){if(_0x8bda40){return _0x8bda40[_0x51a8('0x23')](_0xfe0ddb)['then'](function(_0xae3588){return _0xae3588;});}return null;};}function removeEntity(_0x4b9cdd,_0x47f063){return function(_0x23d26a){if(_0x23d26a){return _0x23d26a['destroy']()[_0x51a8('0x24')](function(){var _0x78d3d6=_0x23d26a[_0x51a8('0x25')]({'plain':!![]});var _0x18e2f3=_0x51a8('0x26');return db[_0x51a8('0x27')][_0x51a8('0x28')]({'where':{'type':_0x18e2f3,'resourceId':_0x78d3d6['id']}})[_0x51a8('0x24')](function(){return _0x23d26a;});})['then'](function(){_0x4b9cdd[_0x51a8('0x1a')](0xcc)[_0x51a8('0x29')]();});}};}function handleEntityNotFound(_0xca5746,_0x3da187){return function(_0x1c150d){if(!_0x1c150d){_0xca5746[_0x51a8('0x2a')](0x194);}return _0x1c150d;};}function handleError(_0x1a886f,_0x2742f5){_0x2742f5=_0x2742f5||0x1f4;return function(_0xec08ae){logger[_0x51a8('0x2b')](_0xec08ae[_0x51a8('0x2c')]);if(_0xec08ae[_0x51a8('0x2d')]){delete _0xec08ae['name'];}_0x1a886f[_0x51a8('0x1a')](_0x2742f5)['send'](_0xec08ae);};}exports[_0x51a8('0x2e')]=function(_0x3bc19a,_0x143f46){var _0x41df56={},_0x2136b4={},_0x4ea271={'count':0x0,'rows':[]};var _0x10c19b=db['SquareProject'][_0x51a8('0x2f')];_0x2136b4[_0x51a8('0x30')]=_[_0x51a8('0x31')](_0x10c19b);_0x2136b4['query']=_[_0x51a8('0x31')](_0x3bc19a['query']);_0x2136b4[_0x51a8('0x32')]=_[_0x51a8('0x33')](_0x2136b4[_0x51a8('0x30')],_0x2136b4[_0x51a8('0x34')]);_0x41df56[_0x51a8('0x35')]=_['intersection'](_0x2136b4[_0x51a8('0x30')],qs['fields'](_0x3bc19a[_0x51a8('0x34')][_0x51a8('0x36')]));_0x41df56[_0x51a8('0x35')]=_0x41df56['attributes'][_0x51a8('0x37')]?_0x41df56[_0x51a8('0x35')]:_0x2136b4[_0x51a8('0x30')];if(!_0x3bc19a[_0x51a8('0x34')][_0x51a8('0x38')]('nolimit')){_0x41df56['limit']=qs['limit'](_0x3bc19a[_0x51a8('0x34')][_0x51a8('0x1e')]);_0x41df56['offset']=qs[_0x51a8('0x1d')](_0x3bc19a['query'][_0x51a8('0x1d')]);}_0x41df56[_0x51a8('0x39')]=qs[_0x51a8('0x3a')](_0x3bc19a[_0x51a8('0x34')][_0x51a8('0x3a')]);_0x41df56[_0x51a8('0x3b')]=qs['filters'](_['pick'](_0x3bc19a[_0x51a8('0x34')],_0x2136b4['filters']));if(_0x3bc19a['query']['filter']){_0x41df56[_0x51a8('0x3b')]=_[_0x51a8('0x3c')](_0x41df56[_0x51a8('0x3b')],{'$or':_['map'](_0x10c19b,function(_0x728638){if(_0x728638[_0x51a8('0x3d')][_0x51a8('0x3e')]!==_0x51a8('0x3f')){var _0x5d3983={};_0x5d3983[_0x728638[_0x51a8('0x40')]]={'$like':'%'+_0x3bc19a[_0x51a8('0x34')][_0x51a8('0x41')]+'%'};return _0x5d3983;}})});}_0x41df56=_['merge']({},_0x41df56,_0x3bc19a[_0x51a8('0x42')]);var _0x51d7bd={'where':_0x41df56[_0x51a8('0x3b')]};return db[_0x51a8('0x43')][_0x51a8('0x1c')](_0x51d7bd)[_0x51a8('0x24')](function(_0x5c44a9){_0x4ea271[_0x51a8('0x1c')]=_0x5c44a9;if(_0x3bc19a[_0x51a8('0x34')][_0x51a8('0x44')]){_0x41df56[_0x51a8('0x45')]=[{'all':!![]}];}return db[_0x51a8('0x43')][_0x51a8('0x46')](_0x41df56);})[_0x51a8('0x24')](function(_0x1cdec6){_0x4ea271[_0x51a8('0x47')]=_0x1cdec6;return _0x4ea271;})['then'](respondWithFilteredResult(_0x143f46,_0x41df56))[_0x51a8('0x48')](handleError(_0x143f46,null));};exports[_0x51a8('0x49')]=function(_0x4c7c67,_0x53409d){var _0x2173af={'raw':![],'where':{'id':_0x4c7c67[_0x51a8('0x4a')]['id']}},_0x19a57c={};_0x19a57c[_0x51a8('0x30')]=_[_0x51a8('0x31')](db[_0x51a8('0x43')][_0x51a8('0x2f')]);_0x19a57c[_0x51a8('0x34')]=_[_0x51a8('0x31')](_0x4c7c67[_0x51a8('0x34')]);_0x19a57c['filters']=_[_0x51a8('0x33')](_0x19a57c[_0x51a8('0x30')],_0x19a57c[_0x51a8('0x34')]);_0x2173af[_0x51a8('0x35')]=_[_0x51a8('0x33')](_0x19a57c[_0x51a8('0x30')],qs['fields'](_0x4c7c67[_0x51a8('0x34')]['fields']));_0x2173af[_0x51a8('0x35')]=_0x2173af[_0x51a8('0x35')][_0x51a8('0x37')]?_0x2173af[_0x51a8('0x35')]:_0x19a57c[_0x51a8('0x30')];if(_0x4c7c67['query']['includeAll']){_0x2173af[_0x51a8('0x45')]=[{'all':!![]}];}_0x2173af=_[_0x51a8('0x3c')]({},_0x2173af,_0x4c7c67[_0x51a8('0x42')]);return db[_0x51a8('0x43')][_0x51a8('0x4b')](_0x2173af)['then'](handleEntityNotFound(_0x53409d,null))['then'](respondWithResult(_0x53409d,null))[_0x51a8('0x48')](handleError(_0x53409d,null));};exports[_0x51a8('0x4c')]=function(_0x24b205,_0x419863){return db[_0x51a8('0x43')][_0x51a8('0x4c')](_0x24b205[_0x51a8('0x4d')],{})[_0x51a8('0x24')](function(_0x301578){var _0x4d29ab=_0x24b205['user']['get']({'plain':!![]});if(!_0x4d29ab)throw new Error(_0x51a8('0x4e'));if(_0x4d29ab[_0x51a8('0x4f')]===_0x51a8('0x50')){var _0x5259f3=_0x301578[_0x51a8('0x25')]({'plain':!![]});var _0x3d6cd7='SquareProjects';return db[_0x51a8('0x51')]['find']({'where':{'name':_0x3d6cd7,'userProfileId':_0x4d29ab['userProfileId']},'raw':!![]})[_0x51a8('0x24')](function(_0x4393c9){if(_0x4393c9&&_0x4393c9[_0x51a8('0x52')]===0x0){return db['UserProfileResource']['create']({'name':_0x5259f3[_0x51a8('0x2d')],'resourceId':_0x5259f3['id'],'type':_0x4393c9['name'],'sectionId':_0x4393c9['id']},{})[_0x51a8('0x24')](function(){return _0x301578;});}else{return _0x301578;}})[_0x51a8('0x48')](function(_0x3623d4){logger[_0x51a8('0x2b')](_0x51a8('0x53'),_0x3623d4);throw _0x3623d4;});}return _0x301578;})[_0x51a8('0x24')](respondWithResult(_0x419863,0xc9))[_0x51a8('0x48')](handleError(_0x419863,null));};exports[_0x51a8('0x23')]=function(_0x29d31e,_0x530ad0){if(_0x29d31e[_0x51a8('0x4d')]['id']){delete _0x29d31e[_0x51a8('0x4d')]['id'];}return db[_0x51a8('0x43')][_0x51a8('0x4b')]({'where':{'id':_0x29d31e['params']['id']}})[_0x51a8('0x24')](handleEntityNotFound(_0x530ad0,null))['then'](saveUpdates(_0x29d31e[_0x51a8('0x4d')],null))[_0x51a8('0x24')](respondWithResult(_0x530ad0,null))['catch'](handleError(_0x530ad0,null));};exports['destroy']=function(_0x2628d4,_0x16f124){return db[_0x51a8('0x43')][_0x51a8('0x4b')]({'where':{'id':_0x2628d4[_0x51a8('0x4a')]['id']}})['then'](handleEntityNotFound(_0x16f124,null))[_0x51a8('0x24')](removeEntity(_0x16f124,null))[_0x51a8('0x48')](handleError(_0x16f124,null));};exports[_0x51a8('0x54')]=function(_0x308d40,_0x531bc2,_0x5d44fe){return db[_0x51a8('0x43')][_0x51a8('0x4b')]({'where':{'id':_0x308d40[_0x51a8('0x4a')]['id']}})[_0x51a8('0x24')](handleEntityNotFound(_0x531bc2,null))[_0x51a8('0x24')](function(_0x352af8){if(_0x352af8){return _0x352af8['addUsers'](_0x308d40['body']['ids'],_['omit'](_0x308d40[_0x51a8('0x4d')],[_0x51a8('0x55'),'id'])||{});}})['then'](respondWithResult(_0x531bc2,null))[_0x51a8('0x48')](handleError(_0x531bc2,null));};exports['removeUsers']=function(_0x41cc00,_0x54f626,_0x3947e1){return db[_0x51a8('0x43')]['find']({'where':{'id':_0x41cc00['params']['id']}})['then'](handleEntityNotFound(_0x54f626,null))[_0x51a8('0x24')](function(_0x1ead77){if(_0x1ead77){return _0x1ead77[_0x51a8('0x56')](_0x41cc00[_0x51a8('0x34')][_0x51a8('0x55')])[_0x51a8('0x24')](function(){if(_[_0x51a8('0x57')](_0x41cc00[_0x51a8('0x34')]['ids'])){for(var _0x43c2ad=0x0;_0x43c2ad<_0x41cc00[_0x51a8('0x34')]['ids'][_0x51a8('0x37')];_0x43c2ad+=0x1){socket[_0x51a8('0x58')](_0x51a8('0x59'),{'UserId':Number(_0x41cc00[_0x51a8('0x34')][_0x51a8('0x55')][_0x43c2ad]),'SquareProjectId':Number(_0x41cc00[_0x51a8('0x4a')]['id'])});}}else{socket['emit']('userSquareProject:remove',{'UserId':Number(_0x41cc00[_0x51a8('0x34')]['ids']),'SquareProjectId':Number(_0x41cc00['params']['id'])});}});}})['then'](respondWithStatusCode(_0x54f626,null))['catch'](handleError(_0x54f626,null));};exports['getUsers']=function(_0x426aec,_0x529b2f,_0x1477af){var _0x4772cd={};var _0x1e7135={};var _0x2d3d37;var _0xf05c1a;return db[_0x51a8('0x43')][_0x51a8('0x5a')]({'where':{'id':_0x426aec[_0x51a8('0x4a')]['id']}})[_0x51a8('0x24')](handleEntityNotFound(_0x529b2f,null))[_0x51a8('0x24')](function(_0x48affc){if(_0x48affc){_0x2d3d37=_0x48affc;_0x1e7135[_0x51a8('0x30')]=_[_0x51a8('0x31')](db[_0x51a8('0x5b')]['rawAttributes']);_0x1e7135['query']=_['keys'](_0x426aec[_0x51a8('0x34')]);_0x1e7135[_0x51a8('0x32')]=_[_0x51a8('0x33')](_0x1e7135[_0x51a8('0x30')],_0x1e7135[_0x51a8('0x34')]);_0x4772cd[_0x51a8('0x35')]=_[_0x51a8('0x33')](_0x1e7135[_0x51a8('0x30')],qs[_0x51a8('0x36')](_0x426aec[_0x51a8('0x34')][_0x51a8('0x36')]));_0x4772cd[_0x51a8('0x35')]=_0x4772cd[_0x51a8('0x35')]['length']?_0x4772cd[_0x51a8('0x35')]:_0x1e7135[_0x51a8('0x30')];_0x4772cd['order']=qs[_0x51a8('0x3a')](_0x426aec['query']['sort']);_0x4772cd['where']=qs[_0x51a8('0x32')](_[_0x51a8('0x5c')](_0x426aec[_0x51a8('0x34')],_0x1e7135[_0x51a8('0x32')]));if(_0x426aec[_0x51a8('0x34')][_0x51a8('0x41')]){_0x4772cd[_0x51a8('0x3b')]=_['merge'](_0x4772cd['where'],{'$or':_['map'](_0x4772cd[_0x51a8('0x35')],function(_0x1fed32){var _0x238074={};_0x238074[_0x1fed32]={'$like':'%'+_0x426aec[_0x51a8('0x34')][_0x51a8('0x41')]+'%'};return _0x238074;})});}_0x4772cd=_[_0x51a8('0x3c')]({},_0x4772cd,_0x426aec['options']);return _0x2d3d37[_0x51a8('0x5d')](_0x4772cd);}})['then'](function(_0x1c11d5){if(_0x1c11d5){_0xf05c1a=_0x1c11d5[_0x51a8('0x37')];if(!_0x426aec[_0x51a8('0x34')][_0x51a8('0x38')](_0x51a8('0x5e'))){_0x4772cd[_0x51a8('0x1e')]=qs[_0x51a8('0x1e')](_0x426aec[_0x51a8('0x34')][_0x51a8('0x1e')]);_0x4772cd[_0x51a8('0x1d')]=qs[_0x51a8('0x1d')](_0x426aec['query']['offset']);}return _0x2d3d37[_0x51a8('0x5d')](_0x4772cd);}})[_0x51a8('0x24')](function(_0x156b0c){if(_0x156b0c){return _0x156b0c?{'count':_0xf05c1a,'rows':_0x156b0c}:null;}})[_0x51a8('0x24')](respondWithResult(_0x529b2f,null))['catch'](handleError(_0x529b2f,null));};
\ No newline at end of file
index 95471af..a8ef5d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcbcd=['../../mysqldb','SquareProject','setMaxListeners','update','remove','emit','hasOwnProperty','exports','events'];(function(_0x1f7d6c,_0x512583){var _0x5e0321=function(_0x40cfb9){while(--_0x40cfb9){_0x1f7d6c['push'](_0x1f7d6c['shift']());}};_0x5e0321(++_0x512583);}(_0xcbcd,0x1c1));var _0xdcbc=function(_0xd0b415,_0x149675){_0xd0b415=_0xd0b415-0x0;var _0x2bdf2c=_0xcbcd[_0xd0b415];return _0x2bdf2c;};'use strict';var EventEmitter=require(_0xdcbc('0x0'));var SquareProject=require(_0xdcbc('0x1'))['db'][_0xdcbc('0x2')];var SquareProjectEvents=new EventEmitter();SquareProjectEvents[_0xdcbc('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0xdcbc('0x4'),'afterDestroy':_0xdcbc('0x5')};function emitEvent(_0x56e7b7){return function(_0x56880a,_0x80128f,_0x1e260c){SquareProjectEvents[_0xdcbc('0x6')](_0x56e7b7+':'+_0x56880a['id'],_0x56880a);SquareProjectEvents[_0xdcbc('0x6')](_0x56e7b7,_0x56880a);_0x1e260c(null);};}for(var e in events){if(events[_0xdcbc('0x7')](e)){var event=events[e];SquareProject['hook'](e,emitEvent(event));}}module[_0xdcbc('0x8')]=SquareProjectEvents;
\ No newline at end of file
+var _0xd140=['events','../../mysqldb','setMaxListeners','save','update','remove','emit','hasOwnProperty','exports'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xd140,0x18c));var _0x0d14=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xd140[_0x321bb2];return _0x9c12ed;};'use strict';var EventEmitter=require(_0x0d14('0x0'));var SquareProject=require(_0x0d14('0x1'))['db']['SquareProject'];var SquareProjectEvents=new EventEmitter();SquareProjectEvents[_0x0d14('0x2')](0x0);var events={'afterCreate':_0x0d14('0x3'),'afterUpdate':_0x0d14('0x4'),'afterDestroy':_0x0d14('0x5')};function emitEvent(_0x2522e8){return function(_0x335e19,_0x5cb8bc,_0x24a48f){SquareProjectEvents['emit'](_0x2522e8+':'+_0x335e19['id'],_0x335e19);SquareProjectEvents[_0x0d14('0x6')](_0x2522e8,_0x335e19);_0x24a48f(null);};}for(var e in events){if(events[_0x0d14('0x7')](e)){var event=events[e];SquareProject['hook'](e,emitEvent(event));}}module[_0x0d14('0x8')]=SquareProjectEvents;
\ No newline at end of file
index 32a4864..224c5b1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x53c8=['SquareProject','square_projects','lodash','../../config/logger','moment','request-promise','rimraf','../../config/environment','./squareProject.attributes','exports','define'];(function(_0x33c9f8,_0x5aedbb){var _0x2d7004=function(_0x4f4f43){while(--_0x4f4f43){_0x33c9f8['push'](_0x33c9f8['shift']());}};_0x2d7004(++_0x5aedbb);}(_0x53c8,0x1af));var _0x853c=function(_0x25701b,_0x2a6976){_0x25701b=_0x25701b-0x0;var _0x3a8a2c=_0x53c8[_0x25701b];return _0x3a8a2c;};'use strict';var _=require(_0x853c('0x0'));var util=require('util');var logger=require(_0x853c('0x1'))('api');var moment=require(_0x853c('0x2'));var BPromise=require('bluebird');var rp=require(_0x853c('0x3'));var fs=require('fs');var path=require('path');var rimraf=require(_0x853c('0x4'));var config=require(_0x853c('0x5'));var attributes=require(_0x853c('0x6'));module[_0x853c('0x7')]=function(_0x55f027,_0xa780db){return _0x55f027[_0x853c('0x8')](_0x853c('0x9'),attributes,{'tableName':_0x853c('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xf449=['bluebird','request-promise','path','rimraf','../../config/environment','exports','SquareProject','square_projects','../../config/logger'];(function(_0x1a7846,_0x59723e){var _0x48049=function(_0x203ff6){while(--_0x203ff6){_0x1a7846['push'](_0x1a7846['shift']());}};_0x48049(++_0x59723e);}(_0xf449,0x86));var _0x9f44=function(_0x2ae014,_0x63650){_0x2ae014=_0x2ae014-0x0;var _0x2c73d3=_0xf449[_0x2ae014];return _0x2c73d3;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x9f44('0x0'))('api');var moment=require('moment');var BPromise=require(_0x9f44('0x1'));var rp=require(_0x9f44('0x2'));var fs=require('fs');var path=require(_0x9f44('0x3'));var rimraf=require(_0x9f44('0x4'));var config=require(_0x9f44('0x5'));var attributes=require('./squareProject.attributes');module[_0x9f44('0x6')]=function(_0x4f82ac,_0x3dfd08){return _0x4f82ac['define'](_0x9f44('0x7'),attributes,{'tableName':_0x9f44('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index e1660d0..8e3a2ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['catch','ShowSquareProject','find','options','raw','where','attributes','include','map','model','then','lodash','util','moment','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','redis','defaults','socket.io-emitter','register','SquareProject,\x20%s,\x20%s','request\x20sent','debug','SquareProject,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result'];(function(_0x18d8e9,_0x2d9568){var _0x1b9102=function(_0x4ecf17){while(--_0x4ecf17){_0x18d8e9['push'](_0x18d8e9['shift']());}};_0x1b9102(++_0x2d9568);}(_0xa9e0,0x123));var _0x0a9e=function(_0x36dfbd,_0x5bfe2d){_0x36dfbd=_0x36dfbd-0x0;var _0x4ecad9=_0xa9e0[_0x36dfbd];return _0x4ecad9;};'use strict';var _=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x0a9e('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x0a9e('0x4'));var logger=require(_0x0a9e('0x5'))(_0x0a9e('0x6'));var config=require(_0x0a9e('0x7'));var jayson=require(_0x0a9e('0x8'));var client=jayson['client'][_0x0a9e('0x9')]({'port':0x232a});config[_0x0a9e('0xa')]=_[_0x0a9e('0xb')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0x0a9e('0xc'))(new Redis(config['redis']));require('./squareProject.socket')[_0x0a9e('0xd')](socket);function respondWithRpcPromise(_0xf81284,_0x307b3e,_0x3ab53f){return new BPromise(function(_0xfeb75b,_0xbd1168){return client['request'](_0xf81284,_0x3ab53f)['then'](function(_0x527cdd){logger['info'](_0x0a9e('0xe'),_0x307b3e,_0x0a9e('0xf'));logger[_0x0a9e('0x10')](_0x0a9e('0x11'),_0x307b3e,_0x0a9e('0xf'),JSON[_0x0a9e('0x12')](_0x527cdd));if(_0x527cdd['error']){if(_0x527cdd[_0x0a9e('0x13')][_0x0a9e('0x14')]===0x1f4){logger[_0x0a9e('0x13')](_0x0a9e('0xe'),_0x307b3e,_0x527cdd[_0x0a9e('0x13')][_0x0a9e('0x15')]);return _0xbd1168(_0x527cdd['error'][_0x0a9e('0x15')]);}logger['error'](_0x0a9e('0xe'),_0x307b3e,_0x527cdd['error'][_0x0a9e('0x15')]);return _0xfeb75b(_0x527cdd[_0x0a9e('0x13')]['message']);}else{logger[_0x0a9e('0x16')]('SquareProject,\x20%s,\x20%s',_0x307b3e,_0x0a9e('0xf'));_0xfeb75b(_0x527cdd[_0x0a9e('0x17')][_0x0a9e('0x15')]);}})[_0x0a9e('0x18')](function(_0x31b1ca){logger[_0x0a9e('0x13')](_0x0a9e('0xe'),_0x307b3e,_0x31b1ca);_0xbd1168(_0x31b1ca);});});}exports[_0x0a9e('0x19')]=function(_0x1314ae){var _0x112016=this;return new Promise(function(_0x1c696a,_0x105080){return db['SquareProject'][_0x0a9e('0x1a')]({'raw':_0x1314ae[_0x0a9e('0x1b')]?_0x1314ae['options'][_0x0a9e('0x1c')]===undefined?!![]:![]:!![],'where':_0x1314ae['options']?_0x1314ae['options'][_0x0a9e('0x1d')]||null:null,'attributes':_0x1314ae[_0x0a9e('0x1b')]?_0x1314ae[_0x0a9e('0x1b')][_0x0a9e('0x1e')]||null:null,'include':_0x1314ae['options']?_0x1314ae[_0x0a9e('0x1b')][_0x0a9e('0x1f')]?_[_0x0a9e('0x20')](_0x1314ae[_0x0a9e('0x1b')][_0x0a9e('0x1f')],function(_0x42ac8f){return{'model':db[_0x42ac8f[_0x0a9e('0x21')]],'as':_0x42ac8f['as'],'attributes':_0x42ac8f['attributes'],'include':_0x42ac8f['include']?_[_0x0a9e('0x20')](_0x42ac8f[_0x0a9e('0x1f')],function(_0x40c424){return{'model':db[_0x40c424[_0x0a9e('0x21')]],'as':_0x40c424['as'],'attributes':_0x40c424['attributes'],'include':_0x40c424[_0x0a9e('0x1f')]?_['map'](_0x40c424[_0x0a9e('0x1f')],function(_0x5bfb33){return{'model':db[_0x5bfb33[_0x0a9e('0x21')]],'as':_0x5bfb33['as'],'attributes':_0x5bfb33[_0x0a9e('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x0a9e('0x22')](function(_0x14433c){logger[_0x0a9e('0x16')](_0x0a9e('0x19'),_0x1314ae);logger[_0x0a9e('0x10')](_0x0a9e('0x19'),_0x1314ae,JSON['stringify'](_0x14433c));_0x1c696a(_0x14433c);})[_0x0a9e('0x18')](function(_0x468813){logger[_0x0a9e('0x13')](_0x0a9e('0x19'),_0x468813['message'],_0x1314ae);_0x105080(_0x112016[_0x0a9e('0x13')](0x1f4,_0x468813[_0x0a9e('0x15')]));});});};
\ No newline at end of file
+var _0xa9e0=['catch','ShowSquareProject','find','options','raw','where','attributes','include','map','model','then','lodash','util','moment','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','redis','defaults','socket.io-emitter','register','SquareProject,\x20%s,\x20%s','request\x20sent','debug','SquareProject,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result'];(function(_0x33cb0a,_0x8201cc){var _0x23c94d=function(_0x8f293b){while(--_0x8f293b){_0x33cb0a['push'](_0x33cb0a['shift']());}};_0x23c94d(++_0x8201cc);}(_0xa9e0,0x123));var _0x0a9e=function(_0xbe200f,_0x4b50eb){_0xbe200f=_0xbe200f-0x0;var _0x192597=_0xa9e0[_0xbe200f];return _0x192597;};'use strict';var _=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x0a9e('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x0a9e('0x4'));var logger=require(_0x0a9e('0x5'))(_0x0a9e('0x6'));var config=require(_0x0a9e('0x7'));var jayson=require(_0x0a9e('0x8'));var client=jayson['client'][_0x0a9e('0x9')]({'port':0x232a});config[_0x0a9e('0xa')]=_[_0x0a9e('0xb')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0x0a9e('0xc'))(new Redis(config['redis']));require('./squareProject.socket')[_0x0a9e('0xd')](socket);function respondWithRpcPromise(_0xf81284,_0x307b3e,_0x3ab53f){return new BPromise(function(_0xfeb75b,_0xbd1168){return client['request'](_0xf81284,_0x3ab53f)['then'](function(_0x527cdd){logger['info'](_0x0a9e('0xe'),_0x307b3e,_0x0a9e('0xf'));logger[_0x0a9e('0x10')](_0x0a9e('0x11'),_0x307b3e,_0x0a9e('0xf'),JSON[_0x0a9e('0x12')](_0x527cdd));if(_0x527cdd['error']){if(_0x527cdd[_0x0a9e('0x13')][_0x0a9e('0x14')]===0x1f4){logger[_0x0a9e('0x13')](_0x0a9e('0xe'),_0x307b3e,_0x527cdd[_0x0a9e('0x13')][_0x0a9e('0x15')]);return _0xbd1168(_0x527cdd['error'][_0x0a9e('0x15')]);}logger['error'](_0x0a9e('0xe'),_0x307b3e,_0x527cdd['error'][_0x0a9e('0x15')]);return _0xfeb75b(_0x527cdd[_0x0a9e('0x13')]['message']);}else{logger[_0x0a9e('0x16')]('SquareProject,\x20%s,\x20%s',_0x307b3e,_0x0a9e('0xf'));_0xfeb75b(_0x527cdd[_0x0a9e('0x17')][_0x0a9e('0x15')]);}})[_0x0a9e('0x18')](function(_0x31b1ca){logger[_0x0a9e('0x13')](_0x0a9e('0xe'),_0x307b3e,_0x31b1ca);_0xbd1168(_0x31b1ca);});});}exports[_0x0a9e('0x19')]=function(_0x1314ae){var _0x112016=this;return new Promise(function(_0x1c696a,_0x105080){return db['SquareProject'][_0x0a9e('0x1a')]({'raw':_0x1314ae[_0x0a9e('0x1b')]?_0x1314ae['options'][_0x0a9e('0x1c')]===undefined?!![]:![]:!![],'where':_0x1314ae['options']?_0x1314ae['options'][_0x0a9e('0x1d')]||null:null,'attributes':_0x1314ae[_0x0a9e('0x1b')]?_0x1314ae[_0x0a9e('0x1b')][_0x0a9e('0x1e')]||null:null,'include':_0x1314ae['options']?_0x1314ae[_0x0a9e('0x1b')][_0x0a9e('0x1f')]?_[_0x0a9e('0x20')](_0x1314ae[_0x0a9e('0x1b')][_0x0a9e('0x1f')],function(_0x42ac8f){return{'model':db[_0x42ac8f[_0x0a9e('0x21')]],'as':_0x42ac8f['as'],'attributes':_0x42ac8f['attributes'],'include':_0x42ac8f['include']?_[_0x0a9e('0x20')](_0x42ac8f[_0x0a9e('0x1f')],function(_0x40c424){return{'model':db[_0x40c424[_0x0a9e('0x21')]],'as':_0x40c424['as'],'attributes':_0x40c424['attributes'],'include':_0x40c424[_0x0a9e('0x1f')]?_['map'](_0x40c424[_0x0a9e('0x1f')],function(_0x5bfb33){return{'model':db[_0x5bfb33[_0x0a9e('0x21')]],'as':_0x5bfb33['as'],'attributes':_0x5bfb33[_0x0a9e('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x0a9e('0x22')](function(_0x14433c){logger[_0x0a9e('0x16')](_0x0a9e('0x19'),_0x1314ae);logger[_0x0a9e('0x10')](_0x0a9e('0x19'),_0x1314ae,JSON['stringify'](_0x14433c));_0x1c696a(_0x14433c);})[_0x0a9e('0x18')](function(_0x468813){logger[_0x0a9e('0x13')](_0x0a9e('0x19'),_0x468813['message'],_0x1314ae);_0x105080(_0x112016[_0x0a9e('0x13')](0x1f4,_0x468813[_0x0a9e('0x15')]));});});};
\ No newline at end of file
index e9afc7e..579bd19 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2e31=['./squareProject.events','save','remove','removeListener','squareProject:'];(function(_0x5f09c5,_0x2bfca0){var _0x426ad9=function(_0x18fe5f){while(--_0x18fe5f){_0x5f09c5['push'](_0x5f09c5['shift']());}};_0x426ad9(++_0x2bfca0);}(_0x2e31,0x145));var _0x12e3=function(_0x558a12,_0x4ba8ac){_0x558a12=_0x558a12-0x0;var _0xf2a9f5=_0x2e31[_0x558a12];return _0xf2a9f5;};'use strict';var SquareProjectEvents=require(_0x12e3('0x0'));var events=[_0x12e3('0x1'),_0x12e3('0x2'),'update'];function createListener(_0x152c5f,_0x217ada){return function(_0x503380){_0x217ada['emit'](_0x152c5f,_0x503380);};}function removeListener(_0x146b6b,_0x3d2ac0){return function(){SquareProjectEvents[_0x12e3('0x3')](_0x146b6b,_0x3d2ac0);};}exports['register']=function(_0x3173f9){for(var _0x16ed6b=0x0,_0x5aefcf=events['length'];_0x16ed6b<_0x5aefcf;_0x16ed6b++){var _0x37f287=events[_0x16ed6b];var _0x403cc5=createListener(_0x12e3('0x4')+_0x37f287,_0x3173f9);SquareProjectEvents['on'](_0x37f287,_0x403cc5);}};
\ No newline at end of file
+var _0x8fed=['remove','update','removeListener','register','length'];(function(_0x208947,_0x505f4d){var _0x52ccb5=function(_0x2286f6){while(--_0x2286f6){_0x208947['push'](_0x208947['shift']());}};_0x52ccb5(++_0x505f4d);}(_0x8fed,0xf5));var _0xd8fe=function(_0x58b6e7,_0x39d960){_0x58b6e7=_0x58b6e7-0x0;var _0x20b4e8=_0x8fed[_0x58b6e7];return _0x20b4e8;};'use strict';var SquareProjectEvents=require('./squareProject.events');var events=['save',_0xd8fe('0x0'),_0xd8fe('0x1')];function createListener(_0xc37b78,_0x1d0781){return function(_0x25ebcb){_0x1d0781['emit'](_0xc37b78,_0x25ebcb);};}function removeListener(_0x2af646,_0x3e93f3){return function(){SquareProjectEvents[_0xd8fe('0x2')](_0x2af646,_0x3e93f3);};}exports[_0xd8fe('0x3')]=function(_0x2b4285){for(var _0x54b0c9=0x0,_0x7e3b94=events[_0xd8fe('0x4')];_0x54b0c9<_0x7e3b94;_0x54b0c9++){var _0xa33e22=events[_0x54b0c9];var _0x26d33d=createListener('squareProject:'+_0xa33e22,_0x2b4285);SquareProjectEvents['on'](_0xa33e22,_0x26d33d);}};
\ No newline at end of file
index 15fb381..cbfb6b2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0238=['destroy','multer','util','path','connect-timeout','../../components/auth/service','./squareRecording.controller','get','isAuthenticated','/:id','/:id/download','post','create','delete'];(function(_0x5da946,_0x5996d9){var _0x6587b5=function(_0x2a6034){while(--_0x2a6034){_0x5da946['push'](_0x5da946['shift']());}};_0x6587b5(++_0x5996d9);}(_0x0238,0x1cf));var _0x8023=function(_0x810025,_0x34bb04){_0x810025=_0x810025-0x0;var _0x4dbc81=_0x0238[_0x810025];return _0x4dbc81;};'use strict';var multer=require(_0x8023('0x0'));var util=require(_0x8023('0x1'));var path=require(_0x8023('0x2'));var timeout=require(_0x8023('0x3'));var express=require('express');var router=express['Router']();var auth=require(_0x8023('0x4'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x8023('0x5'));router[_0x8023('0x6')]('/',auth[_0x8023('0x7')](),controller['index']);router[_0x8023('0x6')](_0x8023('0x8'),auth[_0x8023('0x7')](),controller['show']);router[_0x8023('0x6')](_0x8023('0x9'),auth[_0x8023('0x7')](),controller['download']);router[_0x8023('0xa')]('/',auth['isAuthenticated'](),controller[_0x8023('0xb')]);router['put']('/:id',auth[_0x8023('0x7')](),controller['update']);router[_0x8023('0xc')](_0x8023('0x8'),auth[_0x8023('0x7')](),controller[_0x8023('0xd')]);module['exports']=router;
\ No newline at end of file
+var _0x975f=['get','index','/:id','isAuthenticated','/:id/download','post','put','update','delete','exports','multer','util','express','Router','../../components/interaction/service','../../config/environment','./squareRecording.controller'];(function(_0x3e2ea8,_0x521abc){var _0x478e55=function(_0x96279){while(--_0x96279){_0x3e2ea8['push'](_0x3e2ea8['shift']());}};_0x478e55(++_0x521abc);}(_0x975f,0x109));var _0xf975=function(_0x435fa1,_0x58550a){_0x435fa1=_0x435fa1-0x0;var _0x845f9f=_0x975f[_0x435fa1];return _0x845f9f;};'use strict';var multer=require(_0xf975('0x0'));var util=require(_0xf975('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0xf975('0x2'));var router=express[_0xf975('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xf975('0x4'));var config=require(_0xf975('0x5'));var controller=require(_0xf975('0x6'));router[_0xf975('0x7')]('/',auth['isAuthenticated'](),controller[_0xf975('0x8')]);router[_0xf975('0x7')](_0xf975('0x9'),auth[_0xf975('0xa')](),controller['show']);router[_0xf975('0x7')](_0xf975('0xb'),auth[_0xf975('0xa')](),controller['download']);router[_0xf975('0xc')]('/',auth[_0xf975('0xa')](),controller['create']);router[_0xf975('0xd')](_0xf975('0x9'),auth[_0xf975('0xa')](),controller[_0xf975('0xe')]);router[_0xf975('0xf')](_0xf975('0x9'),auth[_0xf975('0xa')](),controller['destroy']);module[_0xf975('0x10')]=router;
\ No newline at end of file
index 605727e..7149edc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6b68=['exports','STRING','sequelize'];(function(_0x24e0c9,_0x284109){var _0x4448f0=function(_0x576980){while(--_0x576980){_0x24e0c9['push'](_0x24e0c9['shift']());}};_0x4448f0(++_0x284109);}(_0x6b68,0x1f4));var _0x86b6=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x6b68[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0x86b6('0x0'));module[_0x86b6('0x1')]={'uniqueid':{'type':Sequelize[_0x86b6('0x2')]},'callerid':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x86b6('0x2')]},'context':{'type':Sequelize['STRING']},'extension':{'type':Sequelize[_0x86b6('0x2')]},'priority':{'type':Sequelize[_0x86b6('0x2')]},'accountcode':{'type':Sequelize[_0x86b6('0x2')]},'dnid':{'type':Sequelize[_0x86b6('0x2')]},'projectName':{'type':Sequelize[_0x86b6('0x2')]},'saveName':{'type':Sequelize[_0x86b6('0x2')]},'filename':{'type':Sequelize['STRING']},'savePath':{'type':Sequelize[_0x86b6('0x2')]}};
\ No newline at end of file
+var _0x98a2=['sequelize','STRING'];(function(_0x40a045,_0x516f0e){var _0x1a687c=function(_0x48c9fe){while(--_0x48c9fe){_0x40a045['push'](_0x40a045['shift']());}};_0x1a687c(++_0x516f0e);}(_0x98a2,0x17c));var _0x298a=function(_0x1abddc,_0x2ef766){_0x1abddc=_0x1abddc-0x0;var _0x45c02a=_0x98a2[_0x1abddc];return _0x45c02a;};'use strict';var Sequelize=require(_0x298a('0x0'));module['exports']={'uniqueid':{'type':Sequelize[_0x298a('0x1')]},'callerid':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x298a('0x1')]},'context':{'type':Sequelize[_0x298a('0x1')]},'extension':{'type':Sequelize['STRING']},'priority':{'type':Sequelize[_0x298a('0x1')]},'accountcode':{'type':Sequelize[_0x298a('0x1')]},'dnid':{'type':Sequelize[_0x298a('0x1')]},'projectName':{'type':Sequelize['STRING']},'saveName':{'type':Sequelize['STRING']},'filename':{'type':Sequelize[_0x298a('0x1')]},'savePath':{'type':Sequelize[_0x298a('0x1')]}};
\ No newline at end of file
index e7401d1..5c6d5c4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa26e=['Not\x20found','html-pdf','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','path','to-csv','ejs','lodash','crypto','desk.js','querystring','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','sendStatus','end','status','offset','limit','json','apply','save','update','then','destroy','error','name','send','index','model','keys','filters','query','attributes','intersection','fields','hasOwnProperty','nolimit','order','sort','pick','filter','merge','type','key','VIRTUAL','field','where','SquareRecording','count','includeAll','include','findAll','rows','catch','show','params','length','find','create','body','download','../../components/encryptor','uniqueid','savePath','filename','existsSync','decryptFile','secrets','recording','Sequelize','ValidationError','SquareRecording\x20not\x20found','extname','unlink','message'];(function(_0x3cdf76,_0x63322b){var _0x1f1bdb=function(_0x6e3bd1){while(--_0x6e3bd1){_0x3cdf76['push'](_0x3cdf76['shift']());}};_0x1f1bdb(++_0x63322b);}(_0xa26e,0x14d));var _0xea26=function(_0x1e1645,_0x44100f){_0x1e1645=_0x1e1645-0x0;var _0x511e70=_0xa26e[_0x1e1645];return _0x511e70;};'use strict';var pdf=require(_0xea26('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xea26('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xea26('0x2'));var rp=require(_0xea26('0x3'));var moment=require('moment');var BPromise=require(_0xea26('0x4'));var Mustache=require(_0xea26('0x5'));var util=require(_0xea26('0x6'));var path=require(_0xea26('0x7'));var sox=require('sox');var csv=require(_0xea26('0x8'));var ejs=require(_0xea26('0x9'));var fs=require('fs');var _=require(_0xea26('0xa'));var squel=require('squel');var crypto=require(_0xea26('0xb'));var jsforce=require('jsforce');var deskjs=require(_0xea26('0xc'));var toCsv=require(_0xea26('0x8'));var querystring=require(_0xea26('0xd'));var Papa=require('papaparse');var Redis=require(_0xea26('0xe'));var authService=require(_0xea26('0xf'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xea26('0x10'));var logger=require(_0xea26('0x11'))('api');var utils=require(_0xea26('0x12'));var config=require(_0xea26('0x13'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3ac186,_0x1b3b6b){_0x1b3b6b=_0x1b3b6b||0xcc;return function(_0x207394){if(_0x207394){return _0x3ac186[_0xea26('0x14')](_0x1b3b6b);}return _0x3ac186['status'](_0x1b3b6b)[_0xea26('0x15')]();};}function respondWithResult(_0x4c7919,_0x582f3b){_0x582f3b=_0x582f3b||0xc8;return function(_0x3eb318){if(_0x3eb318){return _0x4c7919[_0xea26('0x16')](_0x582f3b)['json'](_0x3eb318);}};}function respondWithFilteredResult(_0x12f0bc,_0x5a4b9c){return function(_0x16813f){if(_0x16813f){var _0x445806=_0x16813f['count'],_0x10533c=_0x5a4b9c[_0xea26('0x17')],_0x4383ad=_0x5a4b9c[_0xea26('0x17')]+_0x5a4b9c[_0xea26('0x18')],_0x5bca30;if(_0x4383ad>=_0x445806){_0x4383ad=_0x445806;_0x5bca30=0xc8;}else{_0x5bca30=0xce;}_0x12f0bc[_0xea26('0x16')](_0x5bca30);return _0x12f0bc['set']('Content-Range',_0x10533c+'-'+_0x4383ad+'/'+_0x445806)[_0xea26('0x19')](_0x16813f);}return null;};}function patchUpdates(_0xb91a6b){return function(_0xd3396c){try{jsonpatch[_0xea26('0x1a')](_0xd3396c,_0xb91a6b,!![]);}catch(_0x45f5f4){return BPromise['reject'](_0x45f5f4);}return _0xd3396c[_0xea26('0x1b')]();};}function saveUpdates(_0x647ea5,_0xed1d5a){return function(_0x5b6b5f){if(_0x5b6b5f){return _0x5b6b5f[_0xea26('0x1c')](_0x647ea5)[_0xea26('0x1d')](function(_0x16e512){return _0x16e512;});}return null;};}function removeEntity(_0x38037e,_0xe35b49){return function(_0x4415a5){if(_0x4415a5){return _0x4415a5[_0xea26('0x1e')]()[_0xea26('0x1d')](function(){_0x38037e[_0xea26('0x16')](0xcc)[_0xea26('0x15')]();});}};}function handleEntityNotFound(_0x509fac,_0x37abf4){return function(_0x122a16){if(!_0x122a16){_0x509fac[_0xea26('0x14')](0x194);}return _0x122a16;};}function handleError(_0x14c65a,_0x2e03c5){_0x2e03c5=_0x2e03c5||0x1f4;return function(_0x42d8ac){logger[_0xea26('0x1f')](_0x42d8ac['stack']);if(_0x42d8ac[_0xea26('0x20')]){delete _0x42d8ac[_0xea26('0x20')];}_0x14c65a[_0xea26('0x16')](_0x2e03c5)[_0xea26('0x21')](_0x42d8ac);};}exports[_0xea26('0x22')]=function(_0x204153,_0x1c8724){var _0x3e59b6={},_0x251048={},_0xd3dff3={'count':0x0,'rows':[]};var _0x1bf93d=db['SquareRecording']['rawAttributes'];_0x251048[_0xea26('0x23')]=_[_0xea26('0x24')](_0x1bf93d);_0x251048['query']=_[_0xea26('0x24')](_0x204153['query']);_0x251048[_0xea26('0x25')]=_['intersection'](_0x251048[_0xea26('0x23')],_0x251048[_0xea26('0x26')]);_0x3e59b6[_0xea26('0x27')]=_[_0xea26('0x28')](_0x251048[_0xea26('0x23')],qs['fields'](_0x204153['query'][_0xea26('0x29')]));_0x3e59b6['attributes']=_0x3e59b6[_0xea26('0x27')]['length']?_0x3e59b6[_0xea26('0x27')]:_0x251048[_0xea26('0x23')];if(!_0x204153['query'][_0xea26('0x2a')](_0xea26('0x2b'))){_0x3e59b6[_0xea26('0x18')]=qs[_0xea26('0x18')](_0x204153[_0xea26('0x26')][_0xea26('0x18')]);_0x3e59b6[_0xea26('0x17')]=qs[_0xea26('0x17')](_0x204153[_0xea26('0x26')][_0xea26('0x17')]);}_0x3e59b6[_0xea26('0x2c')]=qs[_0xea26('0x2d')](_0x204153['query'][_0xea26('0x2d')]);_0x3e59b6['where']=qs[_0xea26('0x25')](_[_0xea26('0x2e')](_0x204153[_0xea26('0x26')],_0x251048[_0xea26('0x25')]));if(_0x204153['query'][_0xea26('0x2f')]){_0x3e59b6['where']=_[_0xea26('0x30')](_0x3e59b6['where'],{'$or':_['map'](_0x1bf93d,function(_0x582a11){if(_0x582a11[_0xea26('0x31')][_0xea26('0x32')]!==_0xea26('0x33')){var _0x1641db={};_0x1641db[_0x582a11[_0xea26('0x34')]]={'$like':'%'+_0x204153[_0xea26('0x26')]['filter']+'%'};return _0x1641db;}})});}_0x3e59b6=_[_0xea26('0x30')]({},_0x3e59b6,_0x204153['options']);var _0x2b4854={'where':_0x3e59b6[_0xea26('0x35')]};return db[_0xea26('0x36')]['count'](_0x2b4854)[_0xea26('0x1d')](function(_0x188e6a){_0xd3dff3[_0xea26('0x37')]=_0x188e6a;if(_0x204153[_0xea26('0x26')][_0xea26('0x38')]){_0x3e59b6[_0xea26('0x39')]=[{'all':!![]}];}return db[_0xea26('0x36')][_0xea26('0x3a')](_0x3e59b6);})['then'](function(_0x4e9ea4){_0xd3dff3[_0xea26('0x3b')]=_0x4e9ea4;return _0xd3dff3;})[_0xea26('0x1d')](respondWithFilteredResult(_0x1c8724,_0x3e59b6))[_0xea26('0x3c')](handleError(_0x1c8724,null));};exports[_0xea26('0x3d')]=function(_0x100bac,_0x415985){var _0x275e44={'raw':!![],'where':{'id':_0x100bac[_0xea26('0x3e')]['id']}},_0x4b12d5={};_0x4b12d5[_0xea26('0x23')]=_[_0xea26('0x24')](db[_0xea26('0x36')]['rawAttributes']);_0x4b12d5[_0xea26('0x26')]=_['keys'](_0x100bac['query']);_0x4b12d5[_0xea26('0x25')]=_['intersection'](_0x4b12d5[_0xea26('0x23')],_0x4b12d5[_0xea26('0x26')]);_0x275e44[_0xea26('0x27')]=_[_0xea26('0x28')](_0x4b12d5[_0xea26('0x23')],qs['fields'](_0x100bac[_0xea26('0x26')]['fields']));_0x275e44[_0xea26('0x27')]=_0x275e44[_0xea26('0x27')][_0xea26('0x3f')]?_0x275e44[_0xea26('0x27')]:_0x4b12d5[_0xea26('0x23')];if(_0x100bac[_0xea26('0x26')][_0xea26('0x38')]){_0x275e44[_0xea26('0x39')]=[{'all':!![]}];}_0x275e44=_[_0xea26('0x30')]({},_0x275e44,_0x100bac['options']);return db[_0xea26('0x36')][_0xea26('0x40')](_0x275e44)[_0xea26('0x1d')](handleEntityNotFound(_0x415985,null))[_0xea26('0x1d')](respondWithResult(_0x415985,null))['catch'](handleError(_0x415985,null));};exports[_0xea26('0x41')]=function(_0x2c477f,_0x5b5c23){return db[_0xea26('0x36')][_0xea26('0x41')](_0x2c477f[_0xea26('0x42')],{})[_0xea26('0x1d')](respondWithResult(_0x5b5c23,0xc9))[_0xea26('0x3c')](handleError(_0x5b5c23,null));};exports['update']=function(_0x3b4397,_0x210f3e){if(_0x3b4397[_0xea26('0x42')]['id']){delete _0x3b4397[_0xea26('0x42')]['id'];}return db['SquareRecording'][_0xea26('0x40')]({'where':{'id':_0x3b4397[_0xea26('0x3e')]['id']}})[_0xea26('0x1d')](handleEntityNotFound(_0x210f3e,null))[_0xea26('0x1d')](saveUpdates(_0x3b4397[_0xea26('0x42')],null))[_0xea26('0x1d')](respondWithResult(_0x210f3e,null))[_0xea26('0x3c')](handleError(_0x210f3e,null));};exports['destroy']=function(_0x521c14,_0x558df5){return db[_0xea26('0x36')][_0xea26('0x40')]({'where':{'id':_0x521c14[_0xea26('0x3e')]['id']}})[_0xea26('0x1d')](handleEntityNotFound(_0x558df5,null))[_0xea26('0x1d')](removeEntity(_0x558df5,null))[_0xea26('0x3c')](handleError(_0x558df5,null));};exports[_0xea26('0x43')]=function(_0x2c8c3b,_0x17aa6e,_0xfb1998){var _0x23c292=require(_0xea26('0x44'));var _0xdf69df=![];var _0x53d2e8={};if(_0x2c8c3b[_0xea26('0x26')]['type']&&_0x2c8c3b['query'][_0xea26('0x31')]===_0xea26('0x45')){_0x53d2e8[_0xea26('0x45')]=_0x2c8c3b[_0xea26('0x3e')]['id'];}else{_0x53d2e8['id']=_0x2c8c3b['params']['id'];}return db[_0xea26('0x36')][_0xea26('0x40')]({'where':_0x53d2e8,'attributes':['id',_0xea26('0x46'),_0xea26('0x47')],'raw':!![]})['then'](handleEntityNotFound(_0x17aa6e,null))[_0xea26('0x1d')](function(_0xbef8e0){if(_0xbef8e0){var _0xc0b897=_0xbef8e0[_0xea26('0x46')];var _0x5f1008=util['format']('%s.cypher',_0xc0b897);if(fs[_0xea26('0x48')](_0x5f1008)){_0xdf69df=!![];return _0x23c292[_0xea26('0x49')](_0x5f1008,_0xc0b897,config[_0xea26('0x4a')][_0xea26('0x4b')])[_0xea26('0x1d')](function(){return _0xbef8e0;});}return _0xbef8e0;}})[_0xea26('0x1d')](function(_0xb2d1c6){if(_0xb2d1c6){var _0x188939=_0xb2d1c6[_0xea26('0x46')];if(!fs[_0xea26('0x48')](_0x188939)){throw new db[(_0xea26('0x4c'))][(_0xea26('0x4d'))](_0xea26('0x4e'));}if(_0xb2d1c6['filename']){return _0x17aa6e[_0xea26('0x43')](_0x188939,_0xb2d1c6[_0xea26('0x47')]+path[_0xea26('0x4f')](_0x188939),function(){if(_0xdf69df){fs[_0xea26('0x50')](_0x188939);}});}else{return _0x17aa6e[_0xea26('0x43')](_0x188939,function(_0x5b695b){if(_0xdf69df){fs[_0xea26('0x50')](_0x188939);}});}}})[_0xea26('0x3c')](function(_0x58c13f){if(_0x58c13f[_0xea26('0x51')]===_0xea26('0x4e')){_0x17aa6e[_0xea26('0x16')](0x194)[_0xea26('0x21')](_0xea26('0x52'));}else{return handleError(_0x17aa6e,null);}});};
\ No newline at end of file
+var _0x1eb0=['status','json','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','error','stack','name','send','index','SquareRecording','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','VIRTUAL','field','options','count','include','findAll','rows','catch','show','params','includeAll','find','body','download','type','uniqueid','filename','savePath','%s.cypher','existsSync','decryptFile','secrets','recording','Sequelize','SquareRecording\x20not\x20found','extname','unlink','message','Not\x20found','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus'];(function(_0x5da63e,_0x4d3503){var _0x442aca=function(_0x6d5bca){while(--_0x6d5bca){_0x5da63e['push'](_0x5da63e['shift']());}};_0x442aca(++_0x4d3503);}(_0x1eb0,0x1b1));var _0x01eb=function(_0x2ac53c,_0x4a1647){_0x2ac53c=_0x2ac53c-0x0;var _0x4175b7=_0x1eb0[_0x2ac53c];return _0x4175b7;};'use strict';var pdf=require(_0x01eb('0x0'));var emlformat=require(_0x01eb('0x1'));var rimraf=require(_0x01eb('0x2'));var zipdir=require(_0x01eb('0x3'));var jsonpatch=require(_0x01eb('0x4'));var rp=require(_0x01eb('0x5'));var moment=require(_0x01eb('0x6'));var BPromise=require(_0x01eb('0x7'));var Mustache=require(_0x01eb('0x8'));var util=require(_0x01eb('0x9'));var path=require(_0x01eb('0xa'));var sox=require(_0x01eb('0xb'));var csv=require(_0x01eb('0xc'));var ejs=require(_0x01eb('0xd'));var fs=require('fs');var _=require(_0x01eb('0xe'));var squel=require('squel');var crypto=require(_0x01eb('0xf'));var jsforce=require(_0x01eb('0x10'));var deskjs=require(_0x01eb('0x11'));var toCsv=require(_0x01eb('0xc'));var querystring=require(_0x01eb('0x12'));var Papa=require(_0x01eb('0x13'));var Redis=require(_0x01eb('0x14'));var authService=require('../../components/auth/service');var qs=require(_0x01eb('0x15'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x01eb('0x16'))(_0x01eb('0x17'));var utils=require(_0x01eb('0x18'));var config=require(_0x01eb('0x19'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x8a5596,_0x2a2233){_0x2a2233=_0x2a2233||0xcc;return function(_0x2d3a85){if(_0x2d3a85){return _0x8a5596[_0x01eb('0x1a')](_0x2a2233);}return _0x8a5596[_0x01eb('0x1b')](_0x2a2233)['end']();};}function respondWithResult(_0xa5abc2,_0xfc2669){_0xfc2669=_0xfc2669||0xc8;return function(_0x10c7ed){if(_0x10c7ed){return _0xa5abc2['status'](_0xfc2669)[_0x01eb('0x1c')](_0x10c7ed);}};}function respondWithFilteredResult(_0x4e5e0d,_0x135ff){return function(_0x2dd85e){if(_0x2dd85e){var _0x38c260=_0x2dd85e['count'],_0x2fb518=_0x135ff[_0x01eb('0x1d')],_0x221217=_0x135ff[_0x01eb('0x1d')]+_0x135ff[_0x01eb('0x1e')],_0x36e592;if(_0x221217>=_0x38c260){_0x221217=_0x38c260;_0x36e592=0xc8;}else{_0x36e592=0xce;}_0x4e5e0d['status'](_0x36e592);return _0x4e5e0d[_0x01eb('0x1f')](_0x01eb('0x20'),_0x2fb518+'-'+_0x221217+'/'+_0x38c260)[_0x01eb('0x1c')](_0x2dd85e);}return null;};}function patchUpdates(_0x34d801){return function(_0x4134c3){try{jsonpatch[_0x01eb('0x21')](_0x4134c3,_0x34d801,!![]);}catch(_0x3c0668){return BPromise[_0x01eb('0x22')](_0x3c0668);}return _0x4134c3[_0x01eb('0x23')]();};}function saveUpdates(_0x47cf99,_0x56115e){return function(_0x14fa91){if(_0x14fa91){return _0x14fa91[_0x01eb('0x24')](_0x47cf99)['then'](function(_0x375182){return _0x375182;});}return null;};}function removeEntity(_0x364e97,_0x46e35e){return function(_0x3e66ea){if(_0x3e66ea){return _0x3e66ea[_0x01eb('0x25')]()[_0x01eb('0x26')](function(){_0x364e97['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x5ad904,_0x4a6283){return function(_0x1ff490){if(!_0x1ff490){_0x5ad904['sendStatus'](0x194);}return _0x1ff490;};}function handleError(_0x14123b,_0x3464ac){_0x3464ac=_0x3464ac||0x1f4;return function(_0x503063){logger[_0x01eb('0x27')](_0x503063[_0x01eb('0x28')]);if(_0x503063[_0x01eb('0x29')]){delete _0x503063['name'];}_0x14123b[_0x01eb('0x1b')](_0x3464ac)[_0x01eb('0x2a')](_0x503063);};}exports[_0x01eb('0x2b')]=function(_0x1c518d,_0x5e5415){var _0x4e0382={},_0x33dbb5={},_0x118462={'count':0x0,'rows':[]};var _0xe69ea8=db[_0x01eb('0x2c')][_0x01eb('0x2d')];_0x33dbb5['model']=_[_0x01eb('0x2e')](_0xe69ea8);_0x33dbb5[_0x01eb('0x2f')]=_['keys'](_0x1c518d[_0x01eb('0x2f')]);_0x33dbb5[_0x01eb('0x30')]=_[_0x01eb('0x31')](_0x33dbb5[_0x01eb('0x32')],_0x33dbb5['query']);_0x4e0382[_0x01eb('0x33')]=_[_0x01eb('0x31')](_0x33dbb5[_0x01eb('0x32')],qs[_0x01eb('0x34')](_0x1c518d['query'][_0x01eb('0x34')]));_0x4e0382[_0x01eb('0x33')]=_0x4e0382['attributes'][_0x01eb('0x35')]?_0x4e0382[_0x01eb('0x33')]:_0x33dbb5['model'];if(!_0x1c518d[_0x01eb('0x2f')][_0x01eb('0x36')](_0x01eb('0x37'))){_0x4e0382['limit']=qs[_0x01eb('0x1e')](_0x1c518d[_0x01eb('0x2f')][_0x01eb('0x1e')]);_0x4e0382[_0x01eb('0x1d')]=qs[_0x01eb('0x1d')](_0x1c518d[_0x01eb('0x2f')][_0x01eb('0x1d')]);}_0x4e0382[_0x01eb('0x38')]=qs['sort'](_0x1c518d[_0x01eb('0x2f')][_0x01eb('0x39')]);_0x4e0382[_0x01eb('0x3a')]=qs['filters'](_[_0x01eb('0x3b')](_0x1c518d['query'],_0x33dbb5[_0x01eb('0x30')]));if(_0x1c518d['query'][_0x01eb('0x3c')]){_0x4e0382[_0x01eb('0x3a')]=_[_0x01eb('0x3d')](_0x4e0382[_0x01eb('0x3a')],{'$or':_[_0x01eb('0x3e')](_0xe69ea8,function(_0x304202){if(_0x304202['type']['key']!==_0x01eb('0x3f')){var _0x13833c={};_0x13833c[_0x304202[_0x01eb('0x40')]]={'$like':'%'+_0x1c518d[_0x01eb('0x2f')][_0x01eb('0x3c')]+'%'};return _0x13833c;}})});}_0x4e0382=_['merge']({},_0x4e0382,_0x1c518d[_0x01eb('0x41')]);var _0xaec7c1={'where':_0x4e0382[_0x01eb('0x3a')]};return db[_0x01eb('0x2c')][_0x01eb('0x42')](_0xaec7c1)[_0x01eb('0x26')](function(_0x13b489){_0x118462['count']=_0x13b489;if(_0x1c518d[_0x01eb('0x2f')]['includeAll']){_0x4e0382[_0x01eb('0x43')]=[{'all':!![]}];}return db[_0x01eb('0x2c')][_0x01eb('0x44')](_0x4e0382);})[_0x01eb('0x26')](function(_0x438f4b){_0x118462[_0x01eb('0x45')]=_0x438f4b;return _0x118462;})[_0x01eb('0x26')](respondWithFilteredResult(_0x5e5415,_0x4e0382))[_0x01eb('0x46')](handleError(_0x5e5415,null));};exports[_0x01eb('0x47')]=function(_0x335e5f,_0x33e229){var _0x9d1dbd={'raw':!![],'where':{'id':_0x335e5f[_0x01eb('0x48')]['id']}},_0x5377ab={};_0x5377ab[_0x01eb('0x32')]=_['keys'](db[_0x01eb('0x2c')][_0x01eb('0x2d')]);_0x5377ab[_0x01eb('0x2f')]=_['keys'](_0x335e5f[_0x01eb('0x2f')]);_0x5377ab[_0x01eb('0x30')]=_[_0x01eb('0x31')](_0x5377ab[_0x01eb('0x32')],_0x5377ab['query']);_0x9d1dbd[_0x01eb('0x33')]=_[_0x01eb('0x31')](_0x5377ab[_0x01eb('0x32')],qs[_0x01eb('0x34')](_0x335e5f[_0x01eb('0x2f')]['fields']));_0x9d1dbd['attributes']=_0x9d1dbd['attributes'][_0x01eb('0x35')]?_0x9d1dbd['attributes']:_0x5377ab['model'];if(_0x335e5f[_0x01eb('0x2f')][_0x01eb('0x49')]){_0x9d1dbd[_0x01eb('0x43')]=[{'all':!![]}];}_0x9d1dbd=_[_0x01eb('0x3d')]({},_0x9d1dbd,_0x335e5f['options']);return db['SquareRecording'][_0x01eb('0x4a')](_0x9d1dbd)[_0x01eb('0x26')](handleEntityNotFound(_0x33e229,null))['then'](respondWithResult(_0x33e229,null))[_0x01eb('0x46')](handleError(_0x33e229,null));};exports['create']=function(_0x17ab7d,_0x31ee72){return db[_0x01eb('0x2c')]['create'](_0x17ab7d[_0x01eb('0x4b')],{})['then'](respondWithResult(_0x31ee72,0xc9))[_0x01eb('0x46')](handleError(_0x31ee72,null));};exports[_0x01eb('0x24')]=function(_0x26a18f,_0x43317a){if(_0x26a18f[_0x01eb('0x4b')]['id']){delete _0x26a18f[_0x01eb('0x4b')]['id'];}return db['SquareRecording'][_0x01eb('0x4a')]({'where':{'id':_0x26a18f[_0x01eb('0x48')]['id']}})[_0x01eb('0x26')](handleEntityNotFound(_0x43317a,null))['then'](saveUpdates(_0x26a18f['body'],null))[_0x01eb('0x26')](respondWithResult(_0x43317a,null))[_0x01eb('0x46')](handleError(_0x43317a,null));};exports['destroy']=function(_0x4f406e,_0x3b4ce1){return db[_0x01eb('0x2c')][_0x01eb('0x4a')]({'where':{'id':_0x4f406e[_0x01eb('0x48')]['id']}})[_0x01eb('0x26')](handleEntityNotFound(_0x3b4ce1,null))[_0x01eb('0x26')](removeEntity(_0x3b4ce1,null))['catch'](handleError(_0x3b4ce1,null));};exports[_0x01eb('0x4c')]=function(_0x1e3cf2,_0x177202,_0x126aab){var _0x5cc96d=require('../../components/encryptor');var _0x2fae0a=![];var _0x2ecb07={};if(_0x1e3cf2[_0x01eb('0x2f')][_0x01eb('0x4d')]&&_0x1e3cf2[_0x01eb('0x2f')]['type']===_0x01eb('0x4e')){_0x2ecb07[_0x01eb('0x4e')]=_0x1e3cf2['params']['id'];}else{_0x2ecb07['id']=_0x1e3cf2[_0x01eb('0x48')]['id'];}return db[_0x01eb('0x2c')][_0x01eb('0x4a')]({'where':_0x2ecb07,'attributes':['id','savePath',_0x01eb('0x4f')],'raw':!![]})[_0x01eb('0x26')](handleEntityNotFound(_0x177202,null))[_0x01eb('0x26')](function(_0x54970f){if(_0x54970f){var _0xa23b95=_0x54970f[_0x01eb('0x50')];var _0x1fb71b=util['format'](_0x01eb('0x51'),_0xa23b95);if(fs[_0x01eb('0x52')](_0x1fb71b)){_0x2fae0a=!![];return _0x5cc96d[_0x01eb('0x53')](_0x1fb71b,_0xa23b95,config[_0x01eb('0x54')][_0x01eb('0x55')])[_0x01eb('0x26')](function(){return _0x54970f;});}return _0x54970f;}})[_0x01eb('0x26')](function(_0x2a033a){if(_0x2a033a){var _0x4c5182=_0x2a033a['savePath'];if(!fs[_0x01eb('0x52')](_0x4c5182)){throw new db[(_0x01eb('0x56'))]['ValidationError'](_0x01eb('0x57'));}if(_0x2a033a['filename']){return _0x177202[_0x01eb('0x4c')](_0x4c5182,_0x2a033a['filename']+path[_0x01eb('0x58')](_0x4c5182),function(){if(_0x2fae0a){fs[_0x01eb('0x59')](_0x4c5182);}});}else{return _0x177202[_0x01eb('0x4c')](_0x4c5182,function(_0x2ae02d){if(_0x2fae0a){fs['unlink'](_0x4c5182);}});}}})[_0x01eb('0x46')](function(_0x16d9d0){if(_0x16d9d0[_0x01eb('0x5a')]==='SquareRecording\x20not\x20found'){_0x177202[_0x01eb('0x1b')](0x194)[_0x01eb('0x2a')](_0x01eb('0x5b'));}else{return handleError(_0x177202,null);}});};
\ No newline at end of file
index 570007f..1342bdc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9281=['define','SquareRecording','../../config/logger','api','bluebird','request-promise','path','../../config/environment','./squareRecording.attributes','exports'];(function(_0xd70515,_0x50cfb3){var _0x1e9a3a=function(_0xbb7d0c){while(--_0xbb7d0c){_0xd70515['push'](_0xd70515['shift']());}};_0x1e9a3a(++_0x50cfb3);}(_0x9281,0x110));var _0x1928=function(_0x1ddc22,_0x1b0f22){_0x1ddc22=_0x1ddc22-0x0;var _0x3aef2e=_0x9281[_0x1ddc22];return _0x3aef2e;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x1928('0x0'))(_0x1928('0x1'));var moment=require('moment');var BPromise=require(_0x1928('0x2'));var rp=require(_0x1928('0x3'));var fs=require('fs');var path=require(_0x1928('0x4'));var rimraf=require('rimraf');var config=require(_0x1928('0x5'));var attributes=require(_0x1928('0x6'));module[_0x1928('0x7')]=function(_0x279e45,_0x371d2d){return _0x279e45[_0x1928('0x8')](_0x1928('0x9'),attributes,{'tableName':'square_recordings','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xcd34=['api','moment','bluebird','request-promise','../../config/environment','./squareRecording.attributes','exports','define','SquareRecording','square_recordings','lodash'];(function(_0x3e6729,_0x16d4af){var _0x535bcd=function(_0x5e6c5f){while(--_0x5e6c5f){_0x3e6729['push'](_0x3e6729['shift']());}};_0x535bcd(++_0x16d4af);}(_0xcd34,0x1d8));var _0x4cd3=function(_0x27f647,_0x15afa6){_0x27f647=_0x27f647-0x0;var _0x1048e1=_0xcd34[_0x27f647];return _0x1048e1;};'use strict';var _=require(_0x4cd3('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x4cd3('0x1'));var moment=require(_0x4cd3('0x2'));var BPromise=require(_0x4cd3('0x3'));var rp=require(_0x4cd3('0x4'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x4cd3('0x5'));var attributes=require(_0x4cd3('0x6'));module[_0x4cd3('0x7')]=function(_0x279bb7,_0x179b5d){return _0x279bb7[_0x4cd3('0x8')](_0x4cd3('0x9'),attributes,{'tableName':_0x4cd3('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d5a1a9a..cc5e950 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6945=['catch','lodash','util','bluebird','randomstring','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','SquareRecording,\x20%s,\x20%s','request\x20sent','SquareRecording,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','SquareRecording','options','CreateSquareRecording','debug'];(function(_0x2f3319,_0x724b5b){var _0xb226c5=function(_0x57759a){while(--_0x57759a){_0x2f3319['push'](_0x2f3319['shift']());}};_0xb226c5(++_0x724b5b);}(_0x6945,0x139));var _0x5694=function(_0x4268a3,_0x120185){_0x4268a3=_0x4268a3-0x0;var _0xd9f763=_0x6945[_0x4268a3];return _0xd9f763;};'use strict';var _=require(_0x5694('0x0'));var util=require(_0x5694('0x1'));var moment=require('moment');var BPromise=require(_0x5694('0x2'));var rs=require(_0x5694('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x5694('0x4'));var logger=require('../../config/logger')(_0x5694('0x5'));var config=require(_0x5694('0x6'));var jayson=require(_0x5694('0x7'));var client=jayson[_0x5694('0x8')][_0x5694('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x11fc8f,_0x535019,_0x1ac787){return new BPromise(function(_0x3c546f,_0x8b0df2){return client[_0x5694('0xa')](_0x11fc8f,_0x1ac787)[_0x5694('0xb')](function(_0x55b03f){logger['info'](_0x5694('0xc'),_0x535019,_0x5694('0xd'));logger['debug'](_0x5694('0xe'),_0x535019,_0x5694('0xd'),JSON[_0x5694('0xf')](_0x55b03f));if(_0x55b03f['error']){if(_0x55b03f[_0x5694('0x10')][_0x5694('0x11')]===0x1f4){logger['error']('SquareRecording,\x20%s,\x20%s',_0x535019,_0x55b03f['error'][_0x5694('0x12')]);return _0x8b0df2(_0x55b03f[_0x5694('0x10')][_0x5694('0x12')]);}logger[_0x5694('0x10')](_0x5694('0xc'),_0x535019,_0x55b03f[_0x5694('0x10')][_0x5694('0x12')]);return _0x3c546f(_0x55b03f[_0x5694('0x10')]['message']);}else{logger[_0x5694('0x13')](_0x5694('0xc'),_0x535019,_0x5694('0xd'));_0x3c546f(_0x55b03f[_0x5694('0x14')][_0x5694('0x12')]);}})['catch'](function(_0x268815){logger['error'](_0x5694('0xc'),_0x535019,_0x268815);_0x8b0df2(_0x268815);});});}exports['CreateSquareRecording']=function(_0x28d469){var _0x6ae7c3=this;return new Promise(function(_0x464df9,_0x449bcc){return db[_0x5694('0x15')]['create'](_0x28d469['body'],{'raw':_0x28d469[_0x5694('0x16')]?_0x28d469[_0x5694('0x16')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x168560){logger[_0x5694('0x13')](_0x5694('0x17'),_0x28d469);logger[_0x5694('0x18')](_0x5694('0x17'),_0x28d469,JSON['stringify'](_0x168560));_0x464df9(_0x168560);})[_0x5694('0x19')](function(_0x41750a){logger[_0x5694('0x10')](_0x5694('0x17'),_0x41750a['message'],_0x28d469);_0x449bcc(_0x6ae7c3['error'](0x1f4,_0x41750a[_0x5694('0x12')]));});});};
\ No newline at end of file
+var _0x5e8d=['../../config/utils','../../config/logger','rpc','jayson/promise','http','request','then','info','SquareRecording,\x20%s,\x20%s','request\x20sent','debug','SquareRecording,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','CreateSquareRecording','SquareRecording','create','body','options','raw','catch','util','bluebird','randomstring','ioredis','../../mysqldb'];(function(_0x33b86c,_0x260f65){var _0x7c0ba=function(_0x345962){while(--_0x345962){_0x33b86c['push'](_0x33b86c['shift']());}};_0x7c0ba(++_0x260f65);}(_0x5e8d,0xc6));var _0xd5e8=function(_0xa19618,_0x35ef65){_0xa19618=_0xa19618-0x0;var _0x2d45ee=_0x5e8d[_0xa19618];return _0x2d45ee;};'use strict';var _=require('lodash');var util=require(_0xd5e8('0x0'));var moment=require('moment');var BPromise=require(_0xd5e8('0x1'));var rs=require(_0xd5e8('0x2'));var fs=require('fs');var Redis=require(_0xd5e8('0x3'));var db=require(_0xd5e8('0x4'))['db'];var utils=require(_0xd5e8('0x5'));var logger=require(_0xd5e8('0x6'))(_0xd5e8('0x7'));var config=require('../../config/environment');var jayson=require(_0xd5e8('0x8'));var client=jayson['client'][_0xd5e8('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x1b677d,_0x5e9312,_0x4e8231){return new BPromise(function(_0x300530,_0xa53126){return client[_0xd5e8('0xa')](_0x1b677d,_0x4e8231)[_0xd5e8('0xb')](function(_0x550120){logger[_0xd5e8('0xc')](_0xd5e8('0xd'),_0x5e9312,_0xd5e8('0xe'));logger[_0xd5e8('0xf')](_0xd5e8('0x10'),_0x5e9312,_0xd5e8('0xe'),JSON[_0xd5e8('0x11')](_0x550120));if(_0x550120[_0xd5e8('0x12')]){if(_0x550120[_0xd5e8('0x12')][_0xd5e8('0x13')]===0x1f4){logger[_0xd5e8('0x12')]('SquareRecording,\x20%s,\x20%s',_0x5e9312,_0x550120[_0xd5e8('0x12')][_0xd5e8('0x14')]);return _0xa53126(_0x550120['error'][_0xd5e8('0x14')]);}logger[_0xd5e8('0x12')](_0xd5e8('0xd'),_0x5e9312,_0x550120['error'][_0xd5e8('0x14')]);return _0x300530(_0x550120[_0xd5e8('0x12')][_0xd5e8('0x14')]);}else{logger[_0xd5e8('0xc')]('SquareRecording,\x20%s,\x20%s',_0x5e9312,_0xd5e8('0xe'));_0x300530(_0x550120[_0xd5e8('0x15')][_0xd5e8('0x14')]);}})['catch'](function(_0x30e9c8){logger['error'](_0xd5e8('0xd'),_0x5e9312,_0x30e9c8);_0xa53126(_0x30e9c8);});});}exports[_0xd5e8('0x16')]=function(_0x37fddf){var _0x5fc89b=this;return new Promise(function(_0x3737e9,_0x9de0d4){return db[_0xd5e8('0x17')][_0xd5e8('0x18')](_0x37fddf[_0xd5e8('0x19')],{'raw':_0x37fddf[_0xd5e8('0x1a')]?_0x37fddf['options'][_0xd5e8('0x1b')]===undefined?!![]:![]:!![]})['then'](function(_0x5ec3cc){logger[_0xd5e8('0xc')](_0xd5e8('0x16'),_0x37fddf);logger['debug']('CreateSquareRecording',_0x37fddf,JSON['stringify'](_0x5ec3cc));_0x3737e9(_0x5ec3cc);})[_0xd5e8('0x1c')](function(_0x2614f8){logger['error'](_0xd5e8('0x16'),_0x2614f8[_0xd5e8('0x14')],_0x37fddf);_0x9de0d4(_0x5fc89b[_0xd5e8('0x12')](0x1f4,_0x2614f8[_0xd5e8('0x14')]));});});};
\ No newline at end of file
index 49bbddc..b7ceefc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x54e8=['put','delete','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareReport.controller','get','isAuthenticated','/describe','/:id','show','post','create'];(function(_0x32be56,_0x162a53){var _0x46eedc=function(_0x97180){while(--_0x97180){_0x32be56['push'](_0x32be56['shift']());}};_0x46eedc(++_0x162a53);}(_0x54e8,0x158));var _0x854e=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x54e8[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0x854e('0x0'));var util=require(_0x854e('0x1'));var path=require(_0x854e('0x2'));var timeout=require(_0x854e('0x3'));var express=require('express');var router=express[_0x854e('0x4')]();var auth=require(_0x854e('0x5'));var interaction=require(_0x854e('0x6'));var config=require(_0x854e('0x7'));var controller=require(_0x854e('0x8'));router[_0x854e('0x9')]('/',auth[_0x854e('0xa')](),controller['index']);router[_0x854e('0x9')](_0x854e('0xb'),auth['isAuthenticated'](),controller['describe']);router[_0x854e('0x9')](_0x854e('0xc'),auth['isAuthenticated'](),controller[_0x854e('0xd')]);router[_0x854e('0xe')]('/',auth[_0x854e('0xa')](),controller[_0x854e('0xf')]);router[_0x854e('0x10')](_0x854e('0xc'),auth[_0x854e('0xa')](),controller['update']);router[_0x854e('0x11')](_0x854e('0xc'),auth['isAuthenticated'](),controller[_0x854e('0x12')]);module[_0x854e('0x13')]=router;
\ No newline at end of file
+var _0x4534=['post','create','put','update','delete','destroy','exports','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./squareReport.controller','get','isAuthenticated','describe','/:id'];(function(_0x5b45dc,_0x5ef090){var _0x211e70=function(_0x4200b3){while(--_0x4200b3){_0x5b45dc['push'](_0x5b45dc['shift']());}};_0x211e70(++_0x5ef090);}(_0x4534,0xbb));var _0x4453=function(_0x47ae29,_0x1e78e1){_0x47ae29=_0x47ae29-0x0;var _0x339cb4=_0x4534[_0x47ae29];return _0x339cb4;};'use strict';var multer=require('multer');var util=require(_0x4453('0x0'));var path=require('path');var timeout=require(_0x4453('0x1'));var express=require(_0x4453('0x2'));var router=express[_0x4453('0x3')]();var auth=require(_0x4453('0x4'));var interaction=require(_0x4453('0x5'));var config=require('../../config/environment');var controller=require(_0x4453('0x6'));router[_0x4453('0x7')]('/',auth[_0x4453('0x8')](),controller['index']);router[_0x4453('0x7')]('/describe',auth[_0x4453('0x8')](),controller[_0x4453('0x9')]);router[_0x4453('0x7')](_0x4453('0xa'),auth[_0x4453('0x8')](),controller['show']);router[_0x4453('0xb')]('/',auth['isAuthenticated'](),controller[_0x4453('0xc')]);router[_0x4453('0xd')]('/:id',auth[_0x4453('0x8')](),controller[_0x4453('0xe')]);router[_0x4453('0xf')]('/:id',auth['isAuthenticated'](),controller[_0x4453('0x10')]);module[_0x4453('0x11')]=router;
\ No newline at end of file
index 0a7d06b..df6445d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e83=['exports','STRING','DATE','BOOLEAN'];(function(_0x1507d3,_0x2bdf04){var _0x76770a=function(_0x5a33bb){while(--_0x5a33bb){_0x1507d3['push'](_0x1507d3['shift']());}};_0x76770a(++_0x2bdf04);}(_0x4e83,0x88));var _0x34e8=function(_0x131090,_0x4b5e43){_0x131090=_0x131090-0x0;var _0x1e10cf=_0x4e83[_0x131090];return _0x1e10cf;};'use strict';var Sequelize=require('sequelize');module[_0x34e8('0x0')]={'network':{'type':Sequelize[_0x34e8('0x1')]},'network_script':{'type':Sequelize[_0x34e8('0x1')]},'request':{'type':Sequelize[_0x34e8('0x1')]},'channel':{'type':Sequelize['STRING']},'language':{'type':Sequelize[_0x34e8('0x1')]},'type':{'type':Sequelize[_0x34e8('0x1')]},'uniqueid':{'type':Sequelize[_0x34e8('0x1')]},'version':{'type':Sequelize[_0x34e8('0x1')]},'callerid':{'type':Sequelize[_0x34e8('0x1')]},'calleridname':{'type':Sequelize[_0x34e8('0x1')]},'callingpres':{'type':Sequelize[_0x34e8('0x1')]},'callingani2':{'type':Sequelize[_0x34e8('0x1')]},'callington':{'type':Sequelize[_0x34e8('0x1')]},'callingtns':{'type':Sequelize[_0x34e8('0x1')]},'dnid':{'type':Sequelize[_0x34e8('0x1')]},'rdnis':{'type':Sequelize[_0x34e8('0x1')]},'context':{'type':Sequelize[_0x34e8('0x1')]},'extension':{'type':Sequelize['STRING']},'priority':{'type':Sequelize[_0x34e8('0x1')]},'enhanced':{'type':Sequelize[_0x34e8('0x1')]},'accountcode':{'type':Sequelize[_0x34e8('0x1')]},'threadid':{'type':Sequelize['STRING']},'project_name':{'type':Sequelize[_0x34e8('0x1')]},'joinAt':{'type':Sequelize[_0x34e8('0x2')]},'leaveAt':{'type':Sequelize[_0x34e8('0x2')]},'bot':{'type':Sequelize[_0x34e8('0x3')],'defaultValue':![]}};
\ No newline at end of file
+var _0xe3c5=['BOOLEAN','sequelize','exports','STRING','DATE'];(function(_0x4f1540,_0x105a46){var _0x43a728=function(_0x5c436a){while(--_0x5c436a){_0x4f1540['push'](_0x4f1540['shift']());}};_0x43a728(++_0x105a46);}(_0xe3c5,0x17d));var _0x5e3c=function(_0x252ef1,_0x2e0041){_0x252ef1=_0x252ef1-0x0;var _0x25817c=_0xe3c5[_0x252ef1];return _0x25817c;};'use strict';var Sequelize=require(_0x5e3c('0x0'));module[_0x5e3c('0x1')]={'network':{'type':Sequelize[_0x5e3c('0x2')]},'network_script':{'type':Sequelize[_0x5e3c('0x2')]},'request':{'type':Sequelize[_0x5e3c('0x2')]},'channel':{'type':Sequelize[_0x5e3c('0x2')]},'language':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0x5e3c('0x2')]},'uniqueid':{'type':Sequelize[_0x5e3c('0x2')]},'version':{'type':Sequelize[_0x5e3c('0x2')]},'callerid':{'type':Sequelize[_0x5e3c('0x2')]},'calleridname':{'type':Sequelize[_0x5e3c('0x2')]},'callingpres':{'type':Sequelize[_0x5e3c('0x2')]},'callingani2':{'type':Sequelize[_0x5e3c('0x2')]},'callington':{'type':Sequelize[_0x5e3c('0x2')]},'callingtns':{'type':Sequelize[_0x5e3c('0x2')]},'dnid':{'type':Sequelize[_0x5e3c('0x2')]},'rdnis':{'type':Sequelize[_0x5e3c('0x2')]},'context':{'type':Sequelize[_0x5e3c('0x2')]},'extension':{'type':Sequelize['STRING']},'priority':{'type':Sequelize['STRING']},'enhanced':{'type':Sequelize[_0x5e3c('0x2')]},'accountcode':{'type':Sequelize[_0x5e3c('0x2')]},'threadid':{'type':Sequelize[_0x5e3c('0x2')]},'project_name':{'type':Sequelize[_0x5e3c('0x2')]},'joinAt':{'type':Sequelize[_0x5e3c('0x3')]},'leaveAt':{'type':Sequelize['DATE']},'bot':{'type':Sequelize[_0x5e3c('0x4')],'defaultValue':![]}};
\ No newline at end of file
index 160f9f8..d59b735 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3cd3=['attributes','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','key','field','options','includeAll','include','findAll','show','fields','length','find','create','body','catch','params','describe','html-pdf','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','sendStatus','status','count','offset','limit','json','apply','reject','update','then','destroy','stack','name','send','SquareReport','rawAttributes','model','query','keys','filters','intersection'];(function(_0x66072d,_0xc339fb){var _0xbaca20=function(_0x485eba){while(--_0x485eba){_0x66072d['push'](_0x66072d['shift']());}};_0xbaca20(++_0xc339fb);}(_0x3cd3,0x131));var _0x33cd=function(_0x2e8b60,_0x17fb10){_0x2e8b60=_0x2e8b60-0x0;var _0x45fcb4=_0x3cd3[_0x2e8b60];return _0x45fcb4;};'use strict';var pdf=require(_0x33cd('0x0'));var emlformat=require(_0x33cd('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x33cd('0x2'));var rp=require(_0x33cd('0x3'));var moment=require(_0x33cd('0x4'));var BPromise=require(_0x33cd('0x5'));var Mustache=require(_0x33cd('0x6'));var util=require(_0x33cd('0x7'));var path=require(_0x33cd('0x8'));var sox=require(_0x33cd('0x9'));var csv=require(_0x33cd('0xa'));var ejs=require(_0x33cd('0xb'));var fs=require('fs');var _=require(_0x33cd('0xc'));var squel=require('squel');var crypto=require(_0x33cd('0xd'));var jsforce=require(_0x33cd('0xe'));var deskjs=require(_0x33cd('0xf'));var toCsv=require('to-csv');var querystring=require(_0x33cd('0x10'));var Papa=require('papaparse');var Redis=require(_0x33cd('0x11'));var authService=require(_0x33cd('0x12'));var qs=require(_0x33cd('0x13'));var hardwareService=require(_0x33cd('0x14'));var logger=require(_0x33cd('0x15'))(_0x33cd('0x16'));var utils=require(_0x33cd('0x17'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x12c426,_0x5c7424){_0x5c7424=_0x5c7424||0xcc;return function(_0x4950d8){if(_0x4950d8){return _0x12c426[_0x33cd('0x18')](_0x5c7424);}return _0x12c426['status'](_0x5c7424)['end']();};}function respondWithResult(_0x51c02c,_0x55eadc){_0x55eadc=_0x55eadc||0xc8;return function(_0x23c81b){if(_0x23c81b){return _0x51c02c[_0x33cd('0x19')](_0x55eadc)['json'](_0x23c81b);}};}function respondWithFilteredResult(_0x83228d,_0x63ab24){return function(_0x459040){if(_0x459040){var _0x3a2529=_0x459040[_0x33cd('0x1a')],_0xefb978=_0x63ab24['offset'],_0x593661=_0x63ab24[_0x33cd('0x1b')]+_0x63ab24[_0x33cd('0x1c')],_0x4c95e5;if(_0x593661>=_0x3a2529){_0x593661=_0x3a2529;_0x4c95e5=0xc8;}else{_0x4c95e5=0xce;}_0x83228d[_0x33cd('0x19')](_0x4c95e5);return _0x83228d['set']('Content-Range',_0xefb978+'-'+_0x593661+'/'+_0x3a2529)[_0x33cd('0x1d')](_0x459040);}return null;};}function patchUpdates(_0x312fef){return function(_0x51e798){try{jsonpatch[_0x33cd('0x1e')](_0x51e798,_0x312fef,!![]);}catch(_0x17b6d1){return BPromise[_0x33cd('0x1f')](_0x17b6d1);}return _0x51e798['save']();};}function saveUpdates(_0x1fad1e,_0x5bd29b){return function(_0x235603){if(_0x235603){return _0x235603[_0x33cd('0x20')](_0x1fad1e)[_0x33cd('0x21')](function(_0x50ab23){return _0x50ab23;});}return null;};}function removeEntity(_0x1db1cd,_0x477584){return function(_0x1e28dc){if(_0x1e28dc){return _0x1e28dc[_0x33cd('0x22')]()[_0x33cd('0x21')](function(){_0x1db1cd['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x4befee,_0x426de4){return function(_0x324d3f){if(!_0x324d3f){_0x4befee['sendStatus'](0x194);}return _0x324d3f;};}function handleError(_0x2d14d1,_0x4980e8){_0x4980e8=_0x4980e8||0x1f4;return function(_0x241e8d){logger['error'](_0x241e8d[_0x33cd('0x23')]);if(_0x241e8d['name']){delete _0x241e8d[_0x33cd('0x24')];}_0x2d14d1[_0x33cd('0x19')](_0x4980e8)[_0x33cd('0x25')](_0x241e8d);};}exports['index']=function(_0x5c60a8,_0x39c5dc){var _0x528d09={},_0x18f01f={},_0x32949c={'count':0x0,'rows':[]};var _0x362cf6=db[_0x33cd('0x26')][_0x33cd('0x27')];_0x18f01f[_0x33cd('0x28')]=_['keys'](_0x362cf6);_0x18f01f[_0x33cd('0x29')]=_[_0x33cd('0x2a')](_0x5c60a8[_0x33cd('0x29')]);_0x18f01f[_0x33cd('0x2b')]=_[_0x33cd('0x2c')](_0x18f01f[_0x33cd('0x28')],_0x18f01f[_0x33cd('0x29')]);_0x528d09[_0x33cd('0x2d')]=_[_0x33cd('0x2c')](_0x18f01f[_0x33cd('0x28')],qs['fields'](_0x5c60a8['query']['fields']));_0x528d09[_0x33cd('0x2d')]=_0x528d09[_0x33cd('0x2d')]['length']?_0x528d09[_0x33cd('0x2d')]:_0x18f01f[_0x33cd('0x28')];if(!_0x5c60a8[_0x33cd('0x29')][_0x33cd('0x2e')](_0x33cd('0x2f'))){_0x528d09[_0x33cd('0x1c')]=qs[_0x33cd('0x1c')](_0x5c60a8[_0x33cd('0x29')][_0x33cd('0x1c')]);_0x528d09[_0x33cd('0x1b')]=qs['offset'](_0x5c60a8[_0x33cd('0x29')][_0x33cd('0x1b')]);}_0x528d09[_0x33cd('0x30')]=qs[_0x33cd('0x31')](_0x5c60a8[_0x33cd('0x29')]['sort']);_0x528d09[_0x33cd('0x32')]=qs[_0x33cd('0x2b')](_[_0x33cd('0x33')](_0x5c60a8[_0x33cd('0x29')],_0x18f01f[_0x33cd('0x2b')]));if(_0x5c60a8[_0x33cd('0x29')][_0x33cd('0x34')]){_0x528d09[_0x33cd('0x32')]=_[_0x33cd('0x35')](_0x528d09['where'],{'$or':_[_0x33cd('0x36')](_0x362cf6,function(_0x59b14a){if(_0x59b14a['type'][_0x33cd('0x37')]!=='VIRTUAL'){var _0x5e1c12={};_0x5e1c12[_0x59b14a[_0x33cd('0x38')]]={'$like':'%'+_0x5c60a8[_0x33cd('0x29')][_0x33cd('0x34')]+'%'};return _0x5e1c12;}})});}_0x528d09=_[_0x33cd('0x35')]({},_0x528d09,_0x5c60a8[_0x33cd('0x39')]);var _0x160d77={'where':_0x528d09[_0x33cd('0x32')]};return db['SquareReport']['count'](_0x160d77)[_0x33cd('0x21')](function(_0x4e82ce){_0x32949c[_0x33cd('0x1a')]=_0x4e82ce;if(_0x5c60a8[_0x33cd('0x29')][_0x33cd('0x3a')]){_0x528d09[_0x33cd('0x3b')]=[{'all':!![]}];}return db[_0x33cd('0x26')][_0x33cd('0x3c')](_0x528d09);})[_0x33cd('0x21')](function(_0x5d0255){_0x32949c['rows']=_0x5d0255;return _0x32949c;})[_0x33cd('0x21')](respondWithFilteredResult(_0x39c5dc,_0x528d09))['catch'](handleError(_0x39c5dc,null));};exports[_0x33cd('0x3d')]=function(_0x121f74,_0x5ca0a9){var _0x344639={'raw':!![],'where':{'id':_0x121f74['params']['id']}},_0x302c5f={};_0x302c5f[_0x33cd('0x28')]=_[_0x33cd('0x2a')](db['SquareReport'][_0x33cd('0x27')]);_0x302c5f['query']=_[_0x33cd('0x2a')](_0x121f74[_0x33cd('0x29')]);_0x302c5f[_0x33cd('0x2b')]=_['intersection'](_0x302c5f[_0x33cd('0x28')],_0x302c5f[_0x33cd('0x29')]);_0x344639[_0x33cd('0x2d')]=_[_0x33cd('0x2c')](_0x302c5f[_0x33cd('0x28')],qs[_0x33cd('0x3e')](_0x121f74[_0x33cd('0x29')]['fields']));_0x344639[_0x33cd('0x2d')]=_0x344639[_0x33cd('0x2d')][_0x33cd('0x3f')]?_0x344639[_0x33cd('0x2d')]:_0x302c5f['model'];if(_0x121f74[_0x33cd('0x29')]['includeAll']){_0x344639[_0x33cd('0x3b')]=[{'all':!![]}];}_0x344639=_[_0x33cd('0x35')]({},_0x344639,_0x121f74['options']);return db[_0x33cd('0x26')][_0x33cd('0x40')](_0x344639)[_0x33cd('0x21')](handleEntityNotFound(_0x5ca0a9,null))[_0x33cd('0x21')](respondWithResult(_0x5ca0a9,null))['catch'](handleError(_0x5ca0a9,null));};exports[_0x33cd('0x41')]=function(_0x3fdb7b,_0x3f71f4){return db[_0x33cd('0x26')][_0x33cd('0x41')](_0x3fdb7b[_0x33cd('0x42')],{})[_0x33cd('0x21')](respondWithResult(_0x3f71f4,0xc9))[_0x33cd('0x43')](handleError(_0x3f71f4,null));};exports['update']=function(_0x4ffc04,_0x49bcdb){if(_0x4ffc04[_0x33cd('0x42')]['id']){delete _0x4ffc04[_0x33cd('0x42')]['id'];}return db['SquareReport'][_0x33cd('0x40')]({'where':{'id':_0x4ffc04[_0x33cd('0x44')]['id']}})[_0x33cd('0x21')](handleEntityNotFound(_0x49bcdb,null))[_0x33cd('0x21')](saveUpdates(_0x4ffc04['body'],null))[_0x33cd('0x21')](respondWithResult(_0x49bcdb,null))['catch'](handleError(_0x49bcdb,null));};exports['destroy']=function(_0x2d3694,_0x5ef741){return db[_0x33cd('0x26')]['find']({'where':{'id':_0x2d3694[_0x33cd('0x44')]['id']}})[_0x33cd('0x21')](handleEntityNotFound(_0x5ef741,null))['then'](removeEntity(_0x5ef741,null))['catch'](handleError(_0x5ef741,null));};exports[_0x33cd('0x45')]=function(_0x5747eb,_0x55e6f8){return db['SquareReport'][_0x33cd('0x45')]()[_0x33cd('0x21')](respondWithResult(_0x55e6f8,null))[_0x33cd('0x43')](handleError(_0x55e6f8,null));};
\ No newline at end of file
+var _0x9901=['../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','json','count','offset','limit','status','set','Content-Range','apply','reject','then','destroy','error','name','send','index','SquareReport','rawAttributes','model','query','keys','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','type','key','field','options','findAll','catch','show','params','length','includeAll','merge','create','body','find','describe','rimraf','fast-json-patch','bluebird','mustache','util','path','sox','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../config/license/hardware','../../config/logger'];(function(_0x2f1816,_0x3943d3){var _0x1601b9=function(_0x10c303){while(--_0x10c303){_0x2f1816['push'](_0x2f1816['shift']());}};_0x1601b9(++_0x3943d3);}(_0x9901,0x17d));var _0x1990=function(_0x19d920,_0x4300b4){_0x19d920=_0x19d920-0x0;var _0x7ad1d5=_0x9901[_0x19d920];return _0x7ad1d5;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x1990('0x0'));var zipdir=require('zip-dir');var jsonpatch=require(_0x1990('0x1'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x1990('0x2'));var Mustache=require(_0x1990('0x3'));var util=require(_0x1990('0x4'));var path=require(_0x1990('0x5'));var sox=require(_0x1990('0x6'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x1990('0x7'));var jsforce=require(_0x1990('0x8'));var deskjs=require(_0x1990('0x9'));var toCsv=require('to-csv');var querystring=require(_0x1990('0xa'));var Papa=require(_0x1990('0xb'));var Redis=require(_0x1990('0xc'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0x1990('0xd'));var logger=require(_0x1990('0xe'))('api');var utils=require(_0x1990('0xf'));var config=require(_0x1990('0x10'));var db=require(_0x1990('0x11'))['db'];function respondWithStatusCode(_0x13f0b7,_0xe1e395){_0xe1e395=_0xe1e395||0xcc;return function(_0x24bc7){if(_0x24bc7){return _0x13f0b7[_0x1990('0x12')](_0xe1e395);}return _0x13f0b7['status'](_0xe1e395)[_0x1990('0x13')]();};}function respondWithResult(_0x317eed,_0x27da88){_0x27da88=_0x27da88||0xc8;return function(_0x52357a){if(_0x52357a){return _0x317eed['status'](_0x27da88)[_0x1990('0x14')](_0x52357a);}};}function respondWithFilteredResult(_0x577160,_0x46b322){return function(_0x17fa2d){if(_0x17fa2d){var _0x4fd45c=_0x17fa2d[_0x1990('0x15')],_0x2c6627=_0x46b322[_0x1990('0x16')],_0x181c97=_0x46b322['offset']+_0x46b322[_0x1990('0x17')],_0xed2581;if(_0x181c97>=_0x4fd45c){_0x181c97=_0x4fd45c;_0xed2581=0xc8;}else{_0xed2581=0xce;}_0x577160[_0x1990('0x18')](_0xed2581);return _0x577160[_0x1990('0x19')](_0x1990('0x1a'),_0x2c6627+'-'+_0x181c97+'/'+_0x4fd45c)[_0x1990('0x14')](_0x17fa2d);}return null;};}function patchUpdates(_0x4f46b9){return function(_0x24620a){try{jsonpatch[_0x1990('0x1b')](_0x24620a,_0x4f46b9,!![]);}catch(_0x3e4fe2){return BPromise[_0x1990('0x1c')](_0x3e4fe2);}return _0x24620a['save']();};}function saveUpdates(_0xf2d652,_0x43ec11){return function(_0x2db879){if(_0x2db879){return _0x2db879['update'](_0xf2d652)[_0x1990('0x1d')](function(_0x1a5425){return _0x1a5425;});}return null;};}function removeEntity(_0x6fc096,_0x4daba6){return function(_0x2b4fc8){if(_0x2b4fc8){return _0x2b4fc8[_0x1990('0x1e')]()[_0x1990('0x1d')](function(){_0x6fc096[_0x1990('0x18')](0xcc)[_0x1990('0x13')]();});}};}function handleEntityNotFound(_0x1cd261,_0x14993e){return function(_0x246dcd){if(!_0x246dcd){_0x1cd261[_0x1990('0x12')](0x194);}return _0x246dcd;};}function handleError(_0x409659,_0x31b0f0){_0x31b0f0=_0x31b0f0||0x1f4;return function(_0x4cb48e){logger[_0x1990('0x1f')](_0x4cb48e['stack']);if(_0x4cb48e[_0x1990('0x20')]){delete _0x4cb48e[_0x1990('0x20')];}_0x409659[_0x1990('0x18')](_0x31b0f0)[_0x1990('0x21')](_0x4cb48e);};}exports[_0x1990('0x22')]=function(_0x2ae55a,_0x4cbc52){var _0x11c317={},_0xf06f53={},_0x2319df={'count':0x0,'rows':[]};var _0x35c63f=db[_0x1990('0x23')][_0x1990('0x24')];_0xf06f53[_0x1990('0x25')]=_['keys'](_0x35c63f);_0xf06f53[_0x1990('0x26')]=_[_0x1990('0x27')](_0x2ae55a[_0x1990('0x26')]);_0xf06f53[_0x1990('0x28')]=_[_0x1990('0x29')](_0xf06f53['model'],_0xf06f53['query']);_0x11c317[_0x1990('0x2a')]=_[_0x1990('0x29')](_0xf06f53[_0x1990('0x25')],qs['fields'](_0x2ae55a[_0x1990('0x26')][_0x1990('0x2b')]));_0x11c317[_0x1990('0x2a')]=_0x11c317[_0x1990('0x2a')]['length']?_0x11c317[_0x1990('0x2a')]:_0xf06f53[_0x1990('0x25')];if(!_0x2ae55a[_0x1990('0x26')][_0x1990('0x2c')](_0x1990('0x2d'))){_0x11c317[_0x1990('0x17')]=qs[_0x1990('0x17')](_0x2ae55a[_0x1990('0x26')]['limit']);_0x11c317[_0x1990('0x16')]=qs[_0x1990('0x16')](_0x2ae55a[_0x1990('0x26')]['offset']);}_0x11c317[_0x1990('0x2e')]=qs['sort'](_0x2ae55a[_0x1990('0x26')][_0x1990('0x2f')]);_0x11c317[_0x1990('0x30')]=qs['filters'](_[_0x1990('0x31')](_0x2ae55a[_0x1990('0x26')],_0xf06f53['filters']));if(_0x2ae55a[_0x1990('0x26')][_0x1990('0x32')]){_0x11c317[_0x1990('0x30')]=_['merge'](_0x11c317[_0x1990('0x30')],{'$or':_['map'](_0x35c63f,function(_0x10f93b){if(_0x10f93b[_0x1990('0x33')][_0x1990('0x34')]!=='VIRTUAL'){var _0x327799={};_0x327799[_0x10f93b[_0x1990('0x35')]]={'$like':'%'+_0x2ae55a[_0x1990('0x26')][_0x1990('0x32')]+'%'};return _0x327799;}})});}_0x11c317=_['merge']({},_0x11c317,_0x2ae55a[_0x1990('0x36')]);var _0x5dd69d={'where':_0x11c317[_0x1990('0x30')]};return db[_0x1990('0x23')][_0x1990('0x15')](_0x5dd69d)[_0x1990('0x1d')](function(_0x31e693){_0x2319df[_0x1990('0x15')]=_0x31e693;if(_0x2ae55a[_0x1990('0x26')]['includeAll']){_0x11c317['include']=[{'all':!![]}];}return db['SquareReport'][_0x1990('0x37')](_0x11c317);})[_0x1990('0x1d')](function(_0x3be91f){_0x2319df['rows']=_0x3be91f;return _0x2319df;})[_0x1990('0x1d')](respondWithFilteredResult(_0x4cbc52,_0x11c317))[_0x1990('0x38')](handleError(_0x4cbc52,null));};exports[_0x1990('0x39')]=function(_0x53acf4,_0x403b53){var _0x4fde97={'raw':!![],'where':{'id':_0x53acf4[_0x1990('0x3a')]['id']}},_0x1f45fc={};_0x1f45fc[_0x1990('0x25')]=_[_0x1990('0x27')](db[_0x1990('0x23')][_0x1990('0x24')]);_0x1f45fc['query']=_[_0x1990('0x27')](_0x53acf4[_0x1990('0x26')]);_0x1f45fc['filters']=_[_0x1990('0x29')](_0x1f45fc[_0x1990('0x25')],_0x1f45fc[_0x1990('0x26')]);_0x4fde97[_0x1990('0x2a')]=_[_0x1990('0x29')](_0x1f45fc['model'],qs[_0x1990('0x2b')](_0x53acf4[_0x1990('0x26')][_0x1990('0x2b')]));_0x4fde97[_0x1990('0x2a')]=_0x4fde97[_0x1990('0x2a')][_0x1990('0x3b')]?_0x4fde97[_0x1990('0x2a')]:_0x1f45fc[_0x1990('0x25')];if(_0x53acf4[_0x1990('0x26')][_0x1990('0x3c')]){_0x4fde97['include']=[{'all':!![]}];}_0x4fde97=_[_0x1990('0x3d')]({},_0x4fde97,_0x53acf4[_0x1990('0x36')]);return db[_0x1990('0x23')]['find'](_0x4fde97)[_0x1990('0x1d')](handleEntityNotFound(_0x403b53,null))['then'](respondWithResult(_0x403b53,null))[_0x1990('0x38')](handleError(_0x403b53,null));};exports['create']=function(_0x2d8c54,_0x26da99){return db[_0x1990('0x23')][_0x1990('0x3e')](_0x2d8c54[_0x1990('0x3f')],{})['then'](respondWithResult(_0x26da99,0xc9))[_0x1990('0x38')](handleError(_0x26da99,null));};exports['update']=function(_0x57aa17,_0xe5a2d1){if(_0x57aa17['body']['id']){delete _0x57aa17[_0x1990('0x3f')]['id'];}return db['SquareReport'][_0x1990('0x40')]({'where':{'id':_0x57aa17[_0x1990('0x3a')]['id']}})['then'](handleEntityNotFound(_0xe5a2d1,null))['then'](saveUpdates(_0x57aa17[_0x1990('0x3f')],null))[_0x1990('0x1d')](respondWithResult(_0xe5a2d1,null))[_0x1990('0x38')](handleError(_0xe5a2d1,null));};exports[_0x1990('0x1e')]=function(_0x177310,_0x3c3a2b){return db[_0x1990('0x23')][_0x1990('0x40')]({'where':{'id':_0x177310[_0x1990('0x3a')]['id']}})[_0x1990('0x1d')](handleEntityNotFound(_0x3c3a2b,null))[_0x1990('0x1d')](removeEntity(_0x3c3a2b,null))[_0x1990('0x38')](handleError(_0x3c3a2b,null));};exports[_0x1990('0x41')]=function(_0x6b78c3,_0x4c644b){return db[_0x1990('0x23')]['describe']()['then'](respondWithResult(_0x4c644b,null))['catch'](handleError(_0x4c644b,null));};
\ No newline at end of file
index a40c53c..bea78f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['api','bluebird','request-promise','path','rimraf','./squareReport.attributes','exports','define','SquareReport','uid_pname','uniqueid','leaveAt','lodash','util','../../config/logger'];(function(_0x5540cb,_0x1af47e){var _0x22e2db=function(_0x16ad6e){while(--_0x16ad6e){_0x5540cb['push'](_0x5540cb['shift']());}};_0x22e2db(++_0x1af47e);}(_0x9957,0x93));var _0x7995=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x9957[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var logger=require(_0x7995('0x2'))(_0x7995('0x3'));var moment=require('moment');var BPromise=require(_0x7995('0x4'));var rp=require(_0x7995('0x5'));var fs=require('fs');var path=require(_0x7995('0x6'));var rimraf=require(_0x7995('0x7'));var config=require('../../config/environment');var attributes=require(_0x7995('0x8'));module[_0x7995('0x9')]=function(_0x137b6b,_0x219534){return _0x137b6b[_0x7995('0xa')](_0x7995('0xb'),attributes,{'tableName':'report_square','paranoid':![],'indexes':[{'name':_0x7995('0xc'),'fields':[_0x7995('0xd'),'project_name']},{'name':_0x7995('0xe'),'fields':[_0x7995('0xe')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x9957=['api','bluebird','request-promise','path','rimraf','./squareReport.attributes','exports','define','SquareReport','uid_pname','uniqueid','leaveAt','lodash','util','../../config/logger'];(function(_0x2ae71f,_0x455162){var _0x2e0d9b=function(_0x143753){while(--_0x143753){_0x2ae71f['push'](_0x2ae71f['shift']());}};_0x2e0d9b(++_0x455162);}(_0x9957,0x93));var _0x7995=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x9957[_0x19e35c];return _0x3e1fe8;};'use strict';var _=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var logger=require(_0x7995('0x2'))(_0x7995('0x3'));var moment=require('moment');var BPromise=require(_0x7995('0x4'));var rp=require(_0x7995('0x5'));var fs=require('fs');var path=require(_0x7995('0x6'));var rimraf=require(_0x7995('0x7'));var config=require('../../config/environment');var attributes=require(_0x7995('0x8'));module[_0x7995('0x9')]=function(_0x137b6b,_0x219534){return _0x137b6b[_0x7995('0xa')](_0x7995('0xb'),attributes,{'tableName':'report_square','paranoid':![],'indexes':[{'name':_0x7995('0xc'),'fields':[_0x7995('0xd'),'project_name']},{'name':_0x7995('0xe'),'fields':[_0x7995('0xe')]}],'timestamps':!![]});};
\ No newline at end of file
index 20d351c..af0f970 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4b3f=['lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','client','http','request','then','info','request\x20sent','debug','SquareReport,\x20%s,\x20%s,\x20%s','stringify','error','code','SquareReport,\x20%s,\x20%s','message','result','catch','SquareReport','create','body','options','raw','CreateSquareReport','UpdateSquareReport','update','attributes','limit'];(function(_0x465a0c,_0x19d4d5){var _0x1e202e=function(_0x27bd8a){while(--_0x27bd8a){_0x465a0c['push'](_0x465a0c['shift']());}};_0x1e202e(++_0x19d4d5);}(_0x4b3f,0x1ef));var _0xf4b3=function(_0x1aa0cb,_0xdfb6a0){_0x1aa0cb=_0x1aa0cb-0x0;var _0x101050=_0x4b3f[_0x1aa0cb];return _0x101050;};'use strict';var _=require(_0xf4b3('0x0'));var util=require(_0xf4b3('0x1'));var moment=require('moment');var BPromise=require(_0xf4b3('0x2'));var rs=require(_0xf4b3('0x3'));var fs=require('fs');var Redis=require(_0xf4b3('0x4'));var db=require(_0xf4b3('0x5'))['db'];var utils=require(_0xf4b3('0x6'));var logger=require(_0xf4b3('0x7'))('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xf4b3('0x8')][_0xf4b3('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2ce59d,_0x545677,_0x5a2247){return new BPromise(function(_0x4b33f2,_0x23a603){return client[_0xf4b3('0xa')](_0x2ce59d,_0x5a2247)[_0xf4b3('0xb')](function(_0x29f30c){logger[_0xf4b3('0xc')]('SquareReport,\x20%s,\x20%s',_0x545677,_0xf4b3('0xd'));logger[_0xf4b3('0xe')](_0xf4b3('0xf'),_0x545677,'request\x20sent',JSON[_0xf4b3('0x10')](_0x29f30c));if(_0x29f30c[_0xf4b3('0x11')]){if(_0x29f30c[_0xf4b3('0x11')][_0xf4b3('0x12')]===0x1f4){logger[_0xf4b3('0x11')](_0xf4b3('0x13'),_0x545677,_0x29f30c[_0xf4b3('0x11')][_0xf4b3('0x14')]);return _0x23a603(_0x29f30c[_0xf4b3('0x11')][_0xf4b3('0x14')]);}logger[_0xf4b3('0x11')](_0xf4b3('0x13'),_0x545677,_0x29f30c[_0xf4b3('0x11')][_0xf4b3('0x14')]);return _0x4b33f2(_0x29f30c[_0xf4b3('0x11')][_0xf4b3('0x14')]);}else{logger['info'](_0xf4b3('0x13'),_0x545677,_0xf4b3('0xd'));_0x4b33f2(_0x29f30c[_0xf4b3('0x15')]['message']);}})[_0xf4b3('0x16')](function(_0x27954f){logger['error'](_0xf4b3('0x13'),_0x545677,_0x27954f);_0x23a603(_0x27954f);});});}exports['CreateSquareReport']=function(_0x8624aa){var _0x47557a=this;return new Promise(function(_0x267aa5,_0x178e27){return db[_0xf4b3('0x17')][_0xf4b3('0x18')](_0x8624aa[_0xf4b3('0x19')],{'raw':_0x8624aa[_0xf4b3('0x1a')]?_0x8624aa['options'][_0xf4b3('0x1b')]===undefined?!![]:![]:!![]})[_0xf4b3('0xb')](function(_0x2af4e3){logger[_0xf4b3('0xc')](_0xf4b3('0x1c'),_0x8624aa);logger[_0xf4b3('0xe')](_0xf4b3('0x1c'),_0x8624aa,JSON[_0xf4b3('0x10')](_0x2af4e3));_0x267aa5(_0x2af4e3);})[_0xf4b3('0x16')](function(_0x292807){logger[_0xf4b3('0x11')](_0xf4b3('0x1c'),_0x292807[_0xf4b3('0x14')],_0x8624aa);_0x178e27(_0x47557a[_0xf4b3('0x11')](0x1f4,_0x292807[_0xf4b3('0x14')]));});});};exports[_0xf4b3('0x1d')]=function(_0x128c0c){var _0x2612fa=this;return new Promise(function(_0x3b9a84,_0x525295){return db[_0xf4b3('0x17')][_0xf4b3('0x1e')](_0x128c0c[_0xf4b3('0x19')],{'raw':_0x128c0c[_0xf4b3('0x1a')]?_0x128c0c[_0xf4b3('0x1a')][_0xf4b3('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x128c0c['options']?_0x128c0c[_0xf4b3('0x1a')]['where']||null:null,'attributes':_0x128c0c[_0xf4b3('0x1a')]?_0x128c0c[_0xf4b3('0x1a')][_0xf4b3('0x1f')]||null:null,'limit':_0x128c0c['options']?_0x128c0c[_0xf4b3('0x1a')][_0xf4b3('0x20')]||null:null})['then'](function(_0x195fbf){logger[_0xf4b3('0xc')](_0xf4b3('0x1d'),_0x128c0c);logger[_0xf4b3('0xe')](_0xf4b3('0x1d'),_0x128c0c,JSON[_0xf4b3('0x10')](_0x195fbf));_0x3b9a84(_0x195fbf);})[_0xf4b3('0x16')](function(_0x5b83a9){logger[_0xf4b3('0x11')](_0xf4b3('0x1d'),_0x5b83a9['message'],_0x128c0c);_0x525295(_0x2612fa[_0xf4b3('0x11')](0x1f4,_0x5b83a9[_0xf4b3('0x14')]));});});};
\ No newline at end of file
+var _0x0ee6=['bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','SquareReport,\x20%s,\x20%s','request\x20sent','debug','SquareReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','CreateSquareReport','SquareReport','create','options','catch','UpdateSquareReport','body','raw','where','attributes','limit','lodash','util'];(function(_0x34784d,_0x4524d2){var _0xeb40ea=function(_0x534537){while(--_0x534537){_0x34784d['push'](_0x34784d['shift']());}};_0xeb40ea(++_0x4524d2);}(_0x0ee6,0x106));var _0x60ee=function(_0xa6d636,_0x25ba07){_0xa6d636=_0xa6d636-0x0;var _0x21cf4f=_0x0ee6[_0xa6d636];return _0x21cf4f;};'use strict';var _=require(_0x60ee('0x0'));var util=require(_0x60ee('0x1'));var moment=require('moment');var BPromise=require(_0x60ee('0x2'));var rs=require(_0x60ee('0x3'));var fs=require('fs');var Redis=require(_0x60ee('0x4'));var db=require(_0x60ee('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x60ee('0x6'))(_0x60ee('0x7'));var config=require(_0x60ee('0x8'));var jayson=require(_0x60ee('0x9'));var client=jayson[_0x60ee('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x568e89,_0x2a4312,_0x234bd9){return new BPromise(function(_0x46c6e4,_0x2c76b0){return client[_0x60ee('0xb')](_0x568e89,_0x234bd9)[_0x60ee('0xc')](function(_0x2d5610){logger[_0x60ee('0xd')](_0x60ee('0xe'),_0x2a4312,_0x60ee('0xf'));logger[_0x60ee('0x10')](_0x60ee('0x11'),_0x2a4312,_0x60ee('0xf'),JSON[_0x60ee('0x12')](_0x2d5610));if(_0x2d5610['error']){if(_0x2d5610[_0x60ee('0x13')][_0x60ee('0x14')]===0x1f4){logger['error']('SquareReport,\x20%s,\x20%s',_0x2a4312,_0x2d5610[_0x60ee('0x13')][_0x60ee('0x15')]);return _0x2c76b0(_0x2d5610[_0x60ee('0x13')]['message']);}logger['error'](_0x60ee('0xe'),_0x2a4312,_0x2d5610[_0x60ee('0x13')][_0x60ee('0x15')]);return _0x46c6e4(_0x2d5610[_0x60ee('0x13')][_0x60ee('0x15')]);}else{logger[_0x60ee('0xd')](_0x60ee('0xe'),_0x2a4312,'request\x20sent');_0x46c6e4(_0x2d5610['result'][_0x60ee('0x15')]);}})['catch'](function(_0x56c047){logger['error'](_0x60ee('0xe'),_0x2a4312,_0x56c047);_0x2c76b0(_0x56c047);});});}exports[_0x60ee('0x16')]=function(_0x1ce021){var _0x1d5688=this;return new Promise(function(_0x2ca858,_0x4c6cb9){return db[_0x60ee('0x17')][_0x60ee('0x18')](_0x1ce021['body'],{'raw':_0x1ce021[_0x60ee('0x19')]?_0x1ce021[_0x60ee('0x19')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x1787a4){logger[_0x60ee('0xd')](_0x60ee('0x16'),_0x1ce021);logger[_0x60ee('0x10')](_0x60ee('0x16'),_0x1ce021,JSON[_0x60ee('0x12')](_0x1787a4));_0x2ca858(_0x1787a4);})[_0x60ee('0x1a')](function(_0x5191f7){logger[_0x60ee('0x13')]('CreateSquareReport',_0x5191f7[_0x60ee('0x15')],_0x1ce021);_0x4c6cb9(_0x1d5688['error'](0x1f4,_0x5191f7['message']));});});};exports[_0x60ee('0x1b')]=function(_0x2d55ab){var _0x137aa4=this;return new Promise(function(_0x18d1c1,_0x54d8ad){return db[_0x60ee('0x17')]['update'](_0x2d55ab[_0x60ee('0x1c')],{'raw':_0x2d55ab[_0x60ee('0x19')]?_0x2d55ab[_0x60ee('0x19')][_0x60ee('0x1d')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2d55ab[_0x60ee('0x19')]?_0x2d55ab[_0x60ee('0x19')][_0x60ee('0x1e')]||null:null,'attributes':_0x2d55ab[_0x60ee('0x19')]?_0x2d55ab['options'][_0x60ee('0x1f')]||null:null,'limit':_0x2d55ab[_0x60ee('0x19')]?_0x2d55ab['options'][_0x60ee('0x20')]||null:null})[_0x60ee('0xc')](function(_0x3d719e){logger[_0x60ee('0xd')](_0x60ee('0x1b'),_0x2d55ab);logger['debug'](_0x60ee('0x1b'),_0x2d55ab,JSON['stringify'](_0x3d719e));_0x18d1c1(_0x3d719e);})[_0x60ee('0x1a')](function(_0x3c3658){logger['error'](_0x60ee('0x1b'),_0x3c3658[_0x60ee('0x15')],_0x2d55ab);_0x54d8ad(_0x137aa4[_0x60ee('0x13')](0x1f4,_0x3c3658[_0x60ee('0x15')]));});});};
\ No newline at end of file
index a43888a..b80d861 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfb91=['isAuthenticated','index','/:id','show','post','create','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./squareReportDetail.controller','get'];(function(_0x4a33d0,_0x5a061c){var _0x523923=function(_0x41a3bb){while(--_0x41a3bb){_0x4a33d0['push'](_0x4a33d0['shift']());}};_0x523923(++_0x5a061c);}(_0xfb91,0x122));var _0x1fb9=function(_0x51e43d,_0x47f638){_0x51e43d=_0x51e43d-0x0;var _0x14aeab=_0xfb91[_0x51e43d];return _0x14aeab;};'use strict';var multer=require(_0x1fb9('0x0'));var util=require(_0x1fb9('0x1'));var path=require(_0x1fb9('0x2'));var timeout=require(_0x1fb9('0x3'));var express=require(_0x1fb9('0x4'));var router=express[_0x1fb9('0x5')]();var auth=require(_0x1fb9('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x1fb9('0x7'));var controller=require(_0x1fb9('0x8'));router[_0x1fb9('0x9')]('/',auth[_0x1fb9('0xa')](),controller[_0x1fb9('0xb')]);router[_0x1fb9('0x9')]('/describe',auth[_0x1fb9('0xa')](),controller['describe']);router[_0x1fb9('0x9')](_0x1fb9('0xc'),auth['isAuthenticated'](),controller[_0x1fb9('0xd')]);router[_0x1fb9('0xe')]('/',auth[_0x1fb9('0xa')](),controller[_0x1fb9('0xf')]);router['put']('/:id',auth[_0x1fb9('0xa')](),controller[_0x1fb9('0x10')]);router[_0x1fb9('0x11')](_0x1fb9('0xc'),auth['isAuthenticated'](),controller[_0x1fb9('0x12')]);module[_0x1fb9('0x13')]=router;
\ No newline at end of file
+var _0x7ad2=['update','delete','destroy','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./squareReportDetail.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','create','put'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x7ad2,0x153));var _0x27ad=function(_0x1b349a,_0x22222c){_0x1b349a=_0x1b349a-0x0;var _0x5d1f7c=_0x7ad2[_0x1b349a];return _0x5d1f7c;};'use strict';var multer=require(_0x27ad('0x0'));var util=require('util');var path=require(_0x27ad('0x1'));var timeout=require(_0x27ad('0x2'));var express=require(_0x27ad('0x3'));var router=express[_0x27ad('0x4')]();var auth=require(_0x27ad('0x5'));var interaction=require(_0x27ad('0x6'));var config=require('../../config/environment');var controller=require(_0x27ad('0x7'));router[_0x27ad('0x8')]('/',auth[_0x27ad('0x9')](),controller[_0x27ad('0xa')]);router['get'](_0x27ad('0xb'),auth['isAuthenticated'](),controller[_0x27ad('0xc')]);router['get'](_0x27ad('0xd'),auth[_0x27ad('0x9')](),controller[_0x27ad('0xe')]);router[_0x27ad('0xf')]('/',auth[_0x27ad('0x9')](),controller[_0x27ad('0x10')]);router[_0x27ad('0x11')](_0x27ad('0xd'),auth[_0x27ad('0x9')](),controller[_0x27ad('0x12')]);router[_0x27ad('0x13')](_0x27ad('0xd'),auth[_0x27ad('0x9')](),controller[_0x27ad('0x14')]);module['exports']=router;
\ No newline at end of file
index e202c30..2a19b21 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9a39=['exports','STRING','TEXT','sequelize'];(function(_0x1ae31c,_0x8dcd2d){var _0x19519d=function(_0x22b8cd){while(--_0x22b8cd){_0x1ae31c['push'](_0x1ae31c['shift']());}};_0x19519d(++_0x8dcd2d);}(_0x9a39,0x1bf));var _0x99a3=function(_0x4b8b93,_0x40ac11){_0x4b8b93=_0x4b8b93-0x0;var _0x4851ba=_0x9a39[_0x4b8b93];return _0x4851ba;};'use strict';var Sequelize=require(_0x99a3('0x0'));module[_0x99a3('0x1')]={'uniqueid':{'type':Sequelize[_0x99a3('0x2')]},'node':{'type':Sequelize['STRING']},'application':{'type':Sequelize[_0x99a3('0x2')]},'data':{'type':Sequelize[_0x99a3('0x3')]},'project_name':{'type':Sequelize['STRING']},'callerid':{'type':Sequelize[_0x99a3('0x2')]}};
\ No newline at end of file
+var _0xe50b=['STRING','sequelize','exports'];(function(_0x1cbd2e,_0x218a03){var _0x11e5b9=function(_0xca2061){while(--_0xca2061){_0x1cbd2e['push'](_0x1cbd2e['shift']());}};_0x11e5b9(++_0x218a03);}(_0xe50b,0x169));var _0xbe50=function(_0x161934,_0x25376f){_0x161934=_0x161934-0x0;var _0x22c8d5=_0xe50b[_0x161934];return _0x22c8d5;};'use strict';var Sequelize=require(_0xbe50('0x0'));module[_0xbe50('0x1')]={'uniqueid':{'type':Sequelize['STRING']},'node':{'type':Sequelize[_0xbe50('0x2')]},'application':{'type':Sequelize[_0xbe50('0x2')]},'data':{'type':Sequelize['TEXT']},'project_name':{'type':Sequelize[_0xbe50('0x2')]},'callerid':{'type':Sequelize[_0xbe50('0x2')]}};
\ No newline at end of file
index 81a8e70..219e6a0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa750=['save','update','then','sendStatus','error','send','index','SquareDetailsReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','pick','merge','map','type','key','VIRTUAL','field','filter','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','destroy','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','set','Content-Range','apply','reject'];(function(_0x282999,_0x4df660){var _0x30681f=function(_0x50e926){while(--_0x50e926){_0x282999['push'](_0x282999['shift']());}};_0x30681f(++_0x4df660);}(_0xa750,0x169));var _0x0a75=function(_0x5dd7e3,_0x45ffe8){_0x5dd7e3=_0x5dd7e3-0x0;var _0x2c680e=_0xa750[_0x5dd7e3];return _0x2c680e;};'use strict';var pdf=require(_0x0a75('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x0a75('0x1'));var zipdir=require(_0x0a75('0x2'));var jsonpatch=require(_0x0a75('0x3'));var rp=require(_0x0a75('0x4'));var moment=require(_0x0a75('0x5'));var BPromise=require(_0x0a75('0x6'));var Mustache=require(_0x0a75('0x7'));var util=require(_0x0a75('0x8'));var path=require(_0x0a75('0x9'));var sox=require(_0x0a75('0xa'));var csv=require(_0x0a75('0xb'));var ejs=require(_0x0a75('0xc'));var fs=require('fs');var _=require(_0x0a75('0xd'));var squel=require(_0x0a75('0xe'));var crypto=require(_0x0a75('0xf'));var jsforce=require(_0x0a75('0x10'));var deskjs=require(_0x0a75('0x11'));var toCsv=require(_0x0a75('0xb'));var querystring=require(_0x0a75('0x12'));var Papa=require(_0x0a75('0x13'));var Redis=require(_0x0a75('0x14'));var authService=require(_0x0a75('0x15'));var qs=require(_0x0a75('0x16'));var hardwareService=require(_0x0a75('0x17'));var logger=require(_0x0a75('0x18'))(_0x0a75('0x19'));var utils=require(_0x0a75('0x1a'));var config=require(_0x0a75('0x1b'));var db=require(_0x0a75('0x1c'))['db'];function respondWithStatusCode(_0x494263,_0x5f40f6){_0x5f40f6=_0x5f40f6||0xcc;return function(_0x50a383){if(_0x50a383){return _0x494263['sendStatus'](_0x5f40f6);}return _0x494263[_0x0a75('0x1d')](_0x5f40f6)[_0x0a75('0x1e')]();};}function respondWithResult(_0x41782d,_0x4fb1ee){_0x4fb1ee=_0x4fb1ee||0xc8;return function(_0x2fcc61){if(_0x2fcc61){return _0x41782d[_0x0a75('0x1d')](_0x4fb1ee)[_0x0a75('0x1f')](_0x2fcc61);}};}function respondWithFilteredResult(_0x3471ab,_0x33e403){return function(_0x2c1e8e){if(_0x2c1e8e){var _0xd0be7=_0x2c1e8e[_0x0a75('0x20')],_0x47732a=_0x33e403[_0x0a75('0x21')],_0x579196=_0x33e403[_0x0a75('0x21')]+_0x33e403[_0x0a75('0x22')],_0x2bc04f;if(_0x579196>=_0xd0be7){_0x579196=_0xd0be7;_0x2bc04f=0xc8;}else{_0x2bc04f=0xce;}_0x3471ab[_0x0a75('0x1d')](_0x2bc04f);return _0x3471ab[_0x0a75('0x23')](_0x0a75('0x24'),_0x47732a+'-'+_0x579196+'/'+_0xd0be7)['json'](_0x2c1e8e);}return null;};}function patchUpdates(_0x3bdb19){return function(_0x2e1f69){try{jsonpatch[_0x0a75('0x25')](_0x2e1f69,_0x3bdb19,!![]);}catch(_0x30f264){return BPromise[_0x0a75('0x26')](_0x30f264);}return _0x2e1f69[_0x0a75('0x27')]();};}function saveUpdates(_0x5292a6,_0x472bd9){return function(_0x1b98bc){if(_0x1b98bc){return _0x1b98bc[_0x0a75('0x28')](_0x5292a6)[_0x0a75('0x29')](function(_0x13f2da){return _0x13f2da;});}return null;};}function removeEntity(_0x236688,_0x34df09){return function(_0x256713){if(_0x256713){return _0x256713['destroy']()[_0x0a75('0x29')](function(){_0x236688[_0x0a75('0x1d')](0xcc)['end']();});}};}function handleEntityNotFound(_0x568f42,_0x4cb701){return function(_0x52e073){if(!_0x52e073){_0x568f42[_0x0a75('0x2a')](0x194);}return _0x52e073;};}function handleError(_0x5d598b,_0x22b55f){_0x22b55f=_0x22b55f||0x1f4;return function(_0x1869fa){logger[_0x0a75('0x2b')](_0x1869fa['stack']);if(_0x1869fa['name']){delete _0x1869fa['name'];}_0x5d598b['status'](_0x22b55f)[_0x0a75('0x2c')](_0x1869fa);};}exports[_0x0a75('0x2d')]=function(_0x5a60ad,_0x2b46f6){var _0x30567f={},_0x5722aa={},_0x845645={'count':0x0,'rows':[]};var _0xcb54b5=db[_0x0a75('0x2e')][_0x0a75('0x2f')];_0x5722aa[_0x0a75('0x30')]=_[_0x0a75('0x31')](_0xcb54b5);_0x5722aa['query']=_[_0x0a75('0x31')](_0x5a60ad[_0x0a75('0x32')]);_0x5722aa[_0x0a75('0x33')]=_[_0x0a75('0x34')](_0x5722aa[_0x0a75('0x30')],_0x5722aa[_0x0a75('0x32')]);_0x30567f[_0x0a75('0x35')]=_[_0x0a75('0x34')](_0x5722aa['model'],qs[_0x0a75('0x36')](_0x5a60ad[_0x0a75('0x32')][_0x0a75('0x36')]));_0x30567f[_0x0a75('0x35')]=_0x30567f['attributes'][_0x0a75('0x37')]?_0x30567f[_0x0a75('0x35')]:_0x5722aa[_0x0a75('0x30')];if(!_0x5a60ad[_0x0a75('0x32')][_0x0a75('0x38')]('nolimit')){_0x30567f[_0x0a75('0x22')]=qs['limit'](_0x5a60ad[_0x0a75('0x32')][_0x0a75('0x22')]);_0x30567f['offset']=qs[_0x0a75('0x21')](_0x5a60ad[_0x0a75('0x32')]['offset']);}_0x30567f[_0x0a75('0x39')]=qs[_0x0a75('0x3a')](_0x5a60ad[_0x0a75('0x32')][_0x0a75('0x3a')]);_0x30567f[_0x0a75('0x3b')]=qs['filters'](_[_0x0a75('0x3c')](_0x5a60ad[_0x0a75('0x32')],_0x5722aa[_0x0a75('0x33')]));if(_0x5a60ad[_0x0a75('0x32')]['filter']){_0x30567f['where']=_[_0x0a75('0x3d')](_0x30567f[_0x0a75('0x3b')],{'$or':_[_0x0a75('0x3e')](_0xcb54b5,function(_0x1ebdaa){if(_0x1ebdaa[_0x0a75('0x3f')][_0x0a75('0x40')]!==_0x0a75('0x41')){var _0x1676d4={};_0x1676d4[_0x1ebdaa[_0x0a75('0x42')]]={'$like':'%'+_0x5a60ad[_0x0a75('0x32')][_0x0a75('0x43')]+'%'};return _0x1676d4;}})});}_0x30567f=_[_0x0a75('0x3d')]({},_0x30567f,_0x5a60ad[_0x0a75('0x44')]);var _0x4d0abb={'where':_0x30567f[_0x0a75('0x3b')]};return db[_0x0a75('0x2e')][_0x0a75('0x20')](_0x4d0abb)[_0x0a75('0x29')](function(_0x4621a3){_0x845645[_0x0a75('0x20')]=_0x4621a3;if(_0x5a60ad[_0x0a75('0x32')][_0x0a75('0x45')]){_0x30567f[_0x0a75('0x46')]=[{'all':!![]}];}return db[_0x0a75('0x2e')][_0x0a75('0x47')](_0x30567f);})[_0x0a75('0x29')](function(_0x5caa38){_0x845645[_0x0a75('0x48')]=_0x5caa38;return _0x845645;})[_0x0a75('0x29')](respondWithFilteredResult(_0x2b46f6,_0x30567f))[_0x0a75('0x49')](handleError(_0x2b46f6,null));};exports[_0x0a75('0x4a')]=function(_0x19e727,_0x42177d){var _0x356df5={'raw':!![],'where':{'id':_0x19e727[_0x0a75('0x4b')]['id']}},_0xebb33={};_0xebb33[_0x0a75('0x30')]=_[_0x0a75('0x31')](db[_0x0a75('0x2e')][_0x0a75('0x2f')]);_0xebb33[_0x0a75('0x32')]=_[_0x0a75('0x31')](_0x19e727[_0x0a75('0x32')]);_0xebb33['filters']=_['intersection'](_0xebb33['model'],_0xebb33['query']);_0x356df5[_0x0a75('0x35')]=_['intersection'](_0xebb33[_0x0a75('0x30')],qs[_0x0a75('0x36')](_0x19e727['query'][_0x0a75('0x36')]));_0x356df5[_0x0a75('0x35')]=_0x356df5['attributes'][_0x0a75('0x37')]?_0x356df5[_0x0a75('0x35')]:_0xebb33[_0x0a75('0x30')];if(_0x19e727[_0x0a75('0x32')]['includeAll']){_0x356df5['include']=[{'all':!![]}];}_0x356df5=_[_0x0a75('0x3d')]({},_0x356df5,_0x19e727[_0x0a75('0x44')]);return db[_0x0a75('0x2e')][_0x0a75('0x4c')](_0x356df5)[_0x0a75('0x29')](handleEntityNotFound(_0x42177d,null))[_0x0a75('0x29')](respondWithResult(_0x42177d,null))[_0x0a75('0x49')](handleError(_0x42177d,null));};exports[_0x0a75('0x4d')]=function(_0x3e914e,_0x3810d3){return db[_0x0a75('0x2e')]['create'](_0x3e914e['body'],{})['then'](respondWithResult(_0x3810d3,0xc9))[_0x0a75('0x49')](handleError(_0x3810d3,null));};exports[_0x0a75('0x28')]=function(_0x145bf7,_0x1b6240){if(_0x145bf7[_0x0a75('0x4e')]['id']){delete _0x145bf7['body']['id'];}return db[_0x0a75('0x2e')]['find']({'where':{'id':_0x145bf7['params']['id']}})[_0x0a75('0x29')](handleEntityNotFound(_0x1b6240,null))[_0x0a75('0x29')](saveUpdates(_0x145bf7[_0x0a75('0x4e')],null))[_0x0a75('0x29')](respondWithResult(_0x1b6240,null))['catch'](handleError(_0x1b6240,null));};exports[_0x0a75('0x4f')]=function(_0x3a96e4,_0x4f4946){return db[_0x0a75('0x2e')][_0x0a75('0x4c')]({'where':{'id':_0x3a96e4['params']['id']}})[_0x0a75('0x29')](handleEntityNotFound(_0x4f4946,null))[_0x0a75('0x29')](removeEntity(_0x4f4946,null))[_0x0a75('0x49')](handleError(_0x4f4946,null));};exports['describe']=function(_0x4d3939,_0x33f6c8){return db[_0x0a75('0x2e')]['describe']()[_0x0a75('0x29')](respondWithResult(_0x33f6c8,null))[_0x0a75('0x49')](handleError(_0x33f6c8,null));};
\ No newline at end of file
+var _0x9018=['merge','options','include','findAll','catch','show','params','intersection','includeAll','create','body','find','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','to-csv','ejs','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../mysqldb','sendStatus','status','end','json','count','offset','limit','Content-Range','apply','reject','save','update','destroy','then','error','send','index','SquareDetailsReport','rawAttributes','model','keys','query','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','filters','filter','type','key','field'];(function(_0x42cae2,_0x284ef8){var _0x5f256f=function(_0x41abc8){while(--_0x41abc8){_0x42cae2['push'](_0x42cae2['shift']());}};_0x5f256f(++_0x284ef8);}(_0x9018,0x129));var _0x8901=function(_0xda91c9,_0x2c912f){_0xda91c9=_0xda91c9-0x0;var _0x628cc4=_0x9018[_0xda91c9];return _0x628cc4;};'use strict';var pdf=require(_0x8901('0x0'));var emlformat=require(_0x8901('0x1'));var rimraf=require(_0x8901('0x2'));var zipdir=require(_0x8901('0x3'));var jsonpatch=require(_0x8901('0x4'));var rp=require('request-promise');var moment=require(_0x8901('0x5'));var BPromise=require(_0x8901('0x6'));var Mustache=require(_0x8901('0x7'));var util=require(_0x8901('0x8'));var path=require(_0x8901('0x9'));var sox=require('sox');var csv=require(_0x8901('0xa'));var ejs=require(_0x8901('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x8901('0xc'));var crypto=require(_0x8901('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x8901('0xe'));var toCsv=require(_0x8901('0xa'));var querystring=require(_0x8901('0xf'));var Papa=require(_0x8901('0x10'));var Redis=require(_0x8901('0x11'));var authService=require('../../components/auth/service');var qs=require(_0x8901('0x12'));var hardwareService=require(_0x8901('0x13'));var logger=require(_0x8901('0x14'))(_0x8901('0x15'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x8901('0x16'))['db'];function respondWithStatusCode(_0x290b64,_0x4228fc){_0x4228fc=_0x4228fc||0xcc;return function(_0x29a140){if(_0x29a140){return _0x290b64[_0x8901('0x17')](_0x4228fc);}return _0x290b64[_0x8901('0x18')](_0x4228fc)[_0x8901('0x19')]();};}function respondWithResult(_0x22335e,_0x2c371b){_0x2c371b=_0x2c371b||0xc8;return function(_0x55201e){if(_0x55201e){return _0x22335e[_0x8901('0x18')](_0x2c371b)[_0x8901('0x1a')](_0x55201e);}};}function respondWithFilteredResult(_0xa576f,_0x243d06){return function(_0x3148a5){if(_0x3148a5){var _0xf13cae=_0x3148a5[_0x8901('0x1b')],_0x11c5ac=_0x243d06[_0x8901('0x1c')],_0x2cc9c9=_0x243d06[_0x8901('0x1c')]+_0x243d06[_0x8901('0x1d')],_0x3ab14c;if(_0x2cc9c9>=_0xf13cae){_0x2cc9c9=_0xf13cae;_0x3ab14c=0xc8;}else{_0x3ab14c=0xce;}_0xa576f['status'](_0x3ab14c);return _0xa576f['set'](_0x8901('0x1e'),_0x11c5ac+'-'+_0x2cc9c9+'/'+_0xf13cae)['json'](_0x3148a5);}return null;};}function patchUpdates(_0x5645e1){return function(_0x14a890){try{jsonpatch[_0x8901('0x1f')](_0x14a890,_0x5645e1,!![]);}catch(_0x5affb1){return BPromise[_0x8901('0x20')](_0x5affb1);}return _0x14a890[_0x8901('0x21')]();};}function saveUpdates(_0x2a03fb,_0x22cbcb){return function(_0x27e0db){if(_0x27e0db){return _0x27e0db[_0x8901('0x22')](_0x2a03fb)['then'](function(_0x3e78d2){return _0x3e78d2;});}return null;};}function removeEntity(_0x3fad9e,_0xc62910){return function(_0x3d0d07){if(_0x3d0d07){return _0x3d0d07[_0x8901('0x23')]()[_0x8901('0x24')](function(){_0x3fad9e[_0x8901('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0x2b7a79,_0x11fdce){return function(_0x1c167f){if(!_0x1c167f){_0x2b7a79['sendStatus'](0x194);}return _0x1c167f;};}function handleError(_0x5a640b,_0x184299){_0x184299=_0x184299||0x1f4;return function(_0x4aeb60){logger[_0x8901('0x25')](_0x4aeb60['stack']);if(_0x4aeb60['name']){delete _0x4aeb60['name'];}_0x5a640b[_0x8901('0x18')](_0x184299)[_0x8901('0x26')](_0x4aeb60);};}exports[_0x8901('0x27')]=function(_0x1998ea,_0xa420bf){var _0x24cbe2={},_0x579ccb={},_0x4337ee={'count':0x0,'rows':[]};var _0x3e1a22=db[_0x8901('0x28')][_0x8901('0x29')];_0x579ccb[_0x8901('0x2a')]=_[_0x8901('0x2b')](_0x3e1a22);_0x579ccb[_0x8901('0x2c')]=_[_0x8901('0x2b')](_0x1998ea[_0x8901('0x2c')]);_0x579ccb['filters']=_['intersection'](_0x579ccb['model'],_0x579ccb[_0x8901('0x2c')]);_0x24cbe2['attributes']=_['intersection'](_0x579ccb[_0x8901('0x2a')],qs['fields'](_0x1998ea['query'][_0x8901('0x2d')]));_0x24cbe2[_0x8901('0x2e')]=_0x24cbe2[_0x8901('0x2e')][_0x8901('0x2f')]?_0x24cbe2['attributes']:_0x579ccb['model'];if(!_0x1998ea[_0x8901('0x2c')][_0x8901('0x30')](_0x8901('0x31'))){_0x24cbe2['limit']=qs[_0x8901('0x1d')](_0x1998ea[_0x8901('0x2c')]['limit']);_0x24cbe2[_0x8901('0x1c')]=qs[_0x8901('0x1c')](_0x1998ea[_0x8901('0x2c')][_0x8901('0x1c')]);}_0x24cbe2[_0x8901('0x32')]=qs['sort'](_0x1998ea[_0x8901('0x2c')][_0x8901('0x33')]);_0x24cbe2[_0x8901('0x34')]=qs[_0x8901('0x35')](_['pick'](_0x1998ea[_0x8901('0x2c')],_0x579ccb[_0x8901('0x35')]));if(_0x1998ea[_0x8901('0x2c')][_0x8901('0x36')]){_0x24cbe2[_0x8901('0x34')]=_['merge'](_0x24cbe2[_0x8901('0x34')],{'$or':_['map'](_0x3e1a22,function(_0x14d9e6){if(_0x14d9e6[_0x8901('0x37')][_0x8901('0x38')]!=='VIRTUAL'){var _0x4d165c={};_0x4d165c[_0x14d9e6[_0x8901('0x39')]]={'$like':'%'+_0x1998ea[_0x8901('0x2c')]['filter']+'%'};return _0x4d165c;}})});}_0x24cbe2=_[_0x8901('0x3a')]({},_0x24cbe2,_0x1998ea[_0x8901('0x3b')]);var _0x2a6cfa={'where':_0x24cbe2['where']};return db[_0x8901('0x28')][_0x8901('0x1b')](_0x2a6cfa)['then'](function(_0x36b6b8){_0x4337ee['count']=_0x36b6b8;if(_0x1998ea[_0x8901('0x2c')]['includeAll']){_0x24cbe2[_0x8901('0x3c')]=[{'all':!![]}];}return db['SquareDetailsReport'][_0x8901('0x3d')](_0x24cbe2);})[_0x8901('0x24')](function(_0x18b785){_0x4337ee['rows']=_0x18b785;return _0x4337ee;})[_0x8901('0x24')](respondWithFilteredResult(_0xa420bf,_0x24cbe2))[_0x8901('0x3e')](handleError(_0xa420bf,null));};exports[_0x8901('0x3f')]=function(_0x110846,_0x213eb9){var _0x13752b={'raw':!![],'where':{'id':_0x110846[_0x8901('0x40')]['id']}},_0x49788f={};_0x49788f[_0x8901('0x2a')]=_[_0x8901('0x2b')](db['SquareDetailsReport'][_0x8901('0x29')]);_0x49788f[_0x8901('0x2c')]=_[_0x8901('0x2b')](_0x110846[_0x8901('0x2c')]);_0x49788f[_0x8901('0x35')]=_[_0x8901('0x41')](_0x49788f[_0x8901('0x2a')],_0x49788f['query']);_0x13752b['attributes']=_[_0x8901('0x41')](_0x49788f['model'],qs[_0x8901('0x2d')](_0x110846[_0x8901('0x2c')][_0x8901('0x2d')]));_0x13752b[_0x8901('0x2e')]=_0x13752b[_0x8901('0x2e')][_0x8901('0x2f')]?_0x13752b[_0x8901('0x2e')]:_0x49788f['model'];if(_0x110846['query'][_0x8901('0x42')]){_0x13752b[_0x8901('0x3c')]=[{'all':!![]}];}_0x13752b=_[_0x8901('0x3a')]({},_0x13752b,_0x110846[_0x8901('0x3b')]);return db['SquareDetailsReport']['find'](_0x13752b)[_0x8901('0x24')](handleEntityNotFound(_0x213eb9,null))['then'](respondWithResult(_0x213eb9,null))[_0x8901('0x3e')](handleError(_0x213eb9,null));};exports[_0x8901('0x43')]=function(_0x35a56f,_0x43cfb9){return db['SquareDetailsReport'][_0x8901('0x43')](_0x35a56f[_0x8901('0x44')],{})[_0x8901('0x24')](respondWithResult(_0x43cfb9,0xc9))[_0x8901('0x3e')](handleError(_0x43cfb9,null));};exports[_0x8901('0x22')]=function(_0x153435,_0x1c660f){if(_0x153435[_0x8901('0x44')]['id']){delete _0x153435[_0x8901('0x44')]['id'];}return db[_0x8901('0x28')][_0x8901('0x45')]({'where':{'id':_0x153435[_0x8901('0x40')]['id']}})['then'](handleEntityNotFound(_0x1c660f,null))['then'](saveUpdates(_0x153435[_0x8901('0x44')],null))[_0x8901('0x24')](respondWithResult(_0x1c660f,null))[_0x8901('0x3e')](handleError(_0x1c660f,null));};exports[_0x8901('0x23')]=function(_0x25ada3,_0xaa3eae){return db[_0x8901('0x28')][_0x8901('0x45')]({'where':{'id':_0x25ada3[_0x8901('0x40')]['id']}})[_0x8901('0x24')](handleEntityNotFound(_0xaa3eae,null))[_0x8901('0x24')](removeEntity(_0xaa3eae,null))[_0x8901('0x3e')](handleError(_0xaa3eae,null));};exports['describe']=function(_0x48ae61,_0x4ceacc){return db[_0x8901('0x28')][_0x8901('0x46')]()[_0x8901('0x24')](respondWithResult(_0x4ceacc,null))[_0x8901('0x3e')](handleError(_0x4ceacc,null));};
\ No newline at end of file
index 42fe018..2c00bc0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdbfa=['../../config/environment','./squareReportDetail.attributes','exports','define','SquareDetailsReport','report_square_details','api','bluebird','request-promise','rimraf'];(function(_0x34f3a4,_0x3a7243){var _0x37b21b=function(_0x3995b3){while(--_0x3995b3){_0x34f3a4['push'](_0x34f3a4['shift']());}};_0x37b21b(++_0x3a7243);}(_0xdbfa,0x128));var _0xadbf=function(_0x5cff31,_0x5d5b03){_0x5cff31=_0x5cff31-0x0;var _0x5a1495=_0xdbfa[_0x5cff31];return _0x5a1495;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')(_0xadbf('0x0'));var moment=require('moment');var BPromise=require(_0xadbf('0x1'));var rp=require(_0xadbf('0x2'));var fs=require('fs');var path=require('path');var rimraf=require(_0xadbf('0x3'));var config=require(_0xadbf('0x4'));var attributes=require(_0xadbf('0x5'));module[_0xadbf('0x6')]=function(_0xd2abca,_0x5bad41){return _0xd2abca[_0xadbf('0x7')](_0xadbf('0x8'),attributes,{'tableName':_0xadbf('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xda19=['exports','define','SquareDetailsReport','report_square_details','util','../../config/logger','moment','request-promise','rimraf','../../config/environment','./squareReportDetail.attributes'];(function(_0x36af63,_0x451edb){var _0x1d4656=function(_0xd72d9a){while(--_0xd72d9a){_0x36af63['push'](_0x36af63['shift']());}};_0x1d4656(++_0x451edb);}(_0xda19,0xd5));var _0x9da1=function(_0x43a737,_0x449230){_0x43a737=_0x43a737-0x0;var _0x2257cc=_0xda19[_0x43a737];return _0x2257cc;};'use strict';var _=require('lodash');var util=require(_0x9da1('0x0'));var logger=require(_0x9da1('0x1'))('api');var moment=require(_0x9da1('0x2'));var BPromise=require('bluebird');var rp=require(_0x9da1('0x3'));var fs=require('fs');var path=require('path');var rimraf=require(_0x9da1('0x4'));var config=require(_0x9da1('0x5'));var attributes=require(_0x9da1('0x6'));module[_0x9da1('0x7')]=function(_0x156faf,_0x2dcbc6){return _0x156faf[_0x9da1('0x8')](_0x9da1('0x9'),attributes,{'tableName':_0x9da1('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 00596fa..a163a77 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc4a1=['debug','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','SquareDetailsReport,\x20%s,\x20%s','SquareDetailsReport,\x20%s,\x20%s,\x20%s','request\x20sent','error','message','info','catch','create','body','options','raw','CreateSquareDetailsReport'];(function(_0x1067d3,_0x5d511e){var _0x1ba21c=function(_0x2c410d){while(--_0x2c410d){_0x1067d3['push'](_0x1067d3['shift']());}};_0x1ba21c(++_0x5d511e);}(_0xc4a1,0x1ef));var _0x1c4a=function(_0x207e81,_0x4090a9){_0x207e81=_0x207e81-0x0;var _0x5ae947=_0xc4a1[_0x207e81];return _0x5ae947;};'use strict';var _=require(_0x1c4a('0x0'));var util=require('util');var moment=require(_0x1c4a('0x1'));var BPromise=require(_0x1c4a('0x2'));var rs=require(_0x1c4a('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x1c4a('0x4'))['db'];var utils=require(_0x1c4a('0x5'));var logger=require(_0x1c4a('0x6'))(_0x1c4a('0x7'));var config=require(_0x1c4a('0x8'));var jayson=require(_0x1c4a('0x9'));var client=jayson[_0x1c4a('0xa')][_0x1c4a('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x46e47d,_0x420058,_0x2f84b0){return new BPromise(function(_0xef9b92,_0x456e39){return client['request'](_0x46e47d,_0x2f84b0)[_0x1c4a('0xc')](function(_0x4272ec){logger['info'](_0x1c4a('0xd'),_0x420058,'request\x20sent');logger['debug'](_0x1c4a('0xe'),_0x420058,_0x1c4a('0xf'),JSON['stringify'](_0x4272ec));if(_0x4272ec[_0x1c4a('0x10')]){if(_0x4272ec[_0x1c4a('0x10')]['code']===0x1f4){logger['error'](_0x1c4a('0xd'),_0x420058,_0x4272ec[_0x1c4a('0x10')]['message']);return _0x456e39(_0x4272ec['error'][_0x1c4a('0x11')]);}logger[_0x1c4a('0x10')](_0x1c4a('0xd'),_0x420058,_0x4272ec[_0x1c4a('0x10')][_0x1c4a('0x11')]);return _0xef9b92(_0x4272ec[_0x1c4a('0x10')][_0x1c4a('0x11')]);}else{logger[_0x1c4a('0x12')](_0x1c4a('0xd'),_0x420058,_0x1c4a('0xf'));_0xef9b92(_0x4272ec['result'][_0x1c4a('0x11')]);}})[_0x1c4a('0x13')](function(_0x1b1358){logger[_0x1c4a('0x10')]('SquareDetailsReport,\x20%s,\x20%s',_0x420058,_0x1b1358);_0x456e39(_0x1b1358);});});}exports['CreateSquareDetailsReport']=function(_0x460dbb){var _0x2f1cf0=this;return new Promise(function(_0x1f59da,_0x5f4cac){return db['SquareDetailsReport'][_0x1c4a('0x14')](_0x460dbb[_0x1c4a('0x15')],{'raw':_0x460dbb['options']?_0x460dbb[_0x1c4a('0x16')][_0x1c4a('0x17')]===undefined?!![]:![]:!![]})[_0x1c4a('0xc')](function(_0x5324a9){logger['info'](_0x1c4a('0x18'),_0x460dbb);logger[_0x1c4a('0x19')]('CreateSquareDetailsReport',_0x460dbb,JSON['stringify'](_0x5324a9));_0x1f59da(_0x5324a9);})[_0x1c4a('0x13')](function(_0x473ef3){logger[_0x1c4a('0x10')](_0x1c4a('0x18'),_0x473ef3['message'],_0x460dbb);_0x5f4cac(_0x2f1cf0[_0x1c4a('0x10')](0x1f4,_0x473ef3[_0x1c4a('0x11')]));});});};
\ No newline at end of file
+var _0x1d25=['bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','info','SquareDetailsReport,\x20%s,\x20%s','request\x20sent','SquareDetailsReport,\x20%s,\x20%s,\x20%s','stringify','error','message','catch','CreateSquareDetailsReport','SquareDetailsReport','create','body','options','raw','then','lodash','util','moment'];(function(_0x3559c4,_0x47580b){var _0x124053=function(_0x2edf1){while(--_0x2edf1){_0x3559c4['push'](_0x3559c4['shift']());}};_0x124053(++_0x47580b);}(_0x1d25,0xba));var _0x51d2=function(_0x50a004,_0x193d84){_0x50a004=_0x50a004-0x0;var _0x5e9992=_0x1d25[_0x50a004];return _0x5e9992;};'use strict';var _=require(_0x51d2('0x0'));var util=require(_0x51d2('0x1'));var moment=require(_0x51d2('0x2'));var BPromise=require(_0x51d2('0x3'));var rs=require(_0x51d2('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x51d2('0x5'))['db'];var utils=require(_0x51d2('0x6'));var logger=require('../../config/logger')(_0x51d2('0x7'));var config=require(_0x51d2('0x8'));var jayson=require(_0x51d2('0x9'));var client=jayson[_0x51d2('0xa')][_0x51d2('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x2e6956,_0x56edda,_0x18e8a9){return new BPromise(function(_0x5a6b5f,_0x419156){return client['request'](_0x2e6956,_0x18e8a9)['then'](function(_0x30d7d0){logger[_0x51d2('0xc')](_0x51d2('0xd'),_0x56edda,_0x51d2('0xe'));logger['debug'](_0x51d2('0xf'),_0x56edda,_0x51d2('0xe'),JSON[_0x51d2('0x10')](_0x30d7d0));if(_0x30d7d0[_0x51d2('0x11')]){if(_0x30d7d0[_0x51d2('0x11')]['code']===0x1f4){logger[_0x51d2('0x11')](_0x51d2('0xd'),_0x56edda,_0x30d7d0['error']['message']);return _0x419156(_0x30d7d0[_0x51d2('0x11')][_0x51d2('0x12')]);}logger[_0x51d2('0x11')](_0x51d2('0xd'),_0x56edda,_0x30d7d0[_0x51d2('0x11')]['message']);return _0x5a6b5f(_0x30d7d0[_0x51d2('0x11')]['message']);}else{logger[_0x51d2('0xc')](_0x51d2('0xd'),_0x56edda,_0x51d2('0xe'));_0x5a6b5f(_0x30d7d0['result'][_0x51d2('0x12')]);}})[_0x51d2('0x13')](function(_0x14a682){logger[_0x51d2('0x11')](_0x51d2('0xd'),_0x56edda,_0x14a682);_0x419156(_0x14a682);});});}exports[_0x51d2('0x14')]=function(_0x131528){var _0x2349df=this;return new Promise(function(_0x48437e,_0x2d40ed){return db[_0x51d2('0x15')][_0x51d2('0x16')](_0x131528[_0x51d2('0x17')],{'raw':_0x131528[_0x51d2('0x18')]?_0x131528[_0x51d2('0x18')][_0x51d2('0x19')]===undefined?!![]:![]:!![]})[_0x51d2('0x1a')](function(_0x2413fe){logger['info'](_0x51d2('0x14'),_0x131528);logger['debug'](_0x51d2('0x14'),_0x131528,JSON[_0x51d2('0x10')](_0x2413fe));_0x48437e(_0x2413fe);})[_0x51d2('0x13')](function(_0x28b889){logger[_0x51d2('0x11')](_0x51d2('0x14'),_0x28b889[_0x51d2('0x12')],_0x131528);_0x2d40ed(_0x2349df[_0x51d2('0x11')](0x1f4,_0x28b889['message']));});});};
\ No newline at end of file
index a4397c2..e22b996 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xde2e=['./system.controller','get','isAuthenticated','index','/process/:pid/kill','killProcess','express','Router','../../components/auth/service'];(function(_0xa8883,_0x1f107f){var _0x479426=function(_0x4e56b9){while(--_0x4e56b9){_0xa8883['push'](_0xa8883['shift']());}};_0x479426(++_0x1f107f);}(_0xde2e,0x69));var _0xede2=function(_0x40bffc,_0x3a45d7){_0x40bffc=_0x40bffc-0x0;var _0x3007e9=_0xde2e[_0x40bffc];return _0x3007e9;};'use strict';var express=require(_0xede2('0x0'));var router=express[_0xede2('0x1')]();var auth=require(_0xede2('0x2'));var controller=require(_0xede2('0x3'));router[_0xede2('0x4')]('/',auth[_0xede2('0x5')](),controller[_0xede2('0x6')]);router['get'](_0xede2('0x7'),auth['isAuthenticated'](),controller[_0xede2('0x8')]);module['exports']=router;
\ No newline at end of file
+var _0x8bf3=['../../components/auth/service','get','isAuthenticated','index','/process/:pid/kill','exports','express','Router'];(function(_0x4cef58,_0x531aa7){var _0x5326ed=function(_0x3ad509){while(--_0x3ad509){_0x4cef58['push'](_0x4cef58['shift']());}};_0x5326ed(++_0x531aa7);}(_0x8bf3,0x1e6));var _0x38bf=function(_0x45aeb1,_0x5a8907){_0x45aeb1=_0x45aeb1-0x0;var _0x17d4ca=_0x8bf3[_0x45aeb1];return _0x17d4ca;};'use strict';var express=require(_0x38bf('0x0'));var router=express[_0x38bf('0x1')]();var auth=require(_0x38bf('0x2'));var controller=require('./system.controller');router[_0x38bf('0x3')]('/',auth[_0x38bf('0x4')](),controller[_0x38bf('0x5')]);router[_0x38bf('0x3')](_0x38bf('0x6'),auth[_0x38bf('0x4')](),controller['killProcess']);module[_0x38bf('0x7')]=router;
\ No newline at end of file
index f4659f9..209fb6b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbec4=['../../config/logger','api','util','bluebird','lodash','error','<%-\x20name\x20%>,\x20%s,\x20%s,\x20%s','inspect','status','send','index','getAllData','json','catch','killProcess','components/import/cm','format','ps\x20-p\x20%s\x20-ww\x20-o\x20args','params','pid','then','split','length','indexOf','Process\x20with\x20pid\x20%s\x20not\x20found!','kill','systeminformation','child_process','exec'];(function(_0x1daaa3,_0x18048f){var _0x386391=function(_0x4c1ef1){while(--_0x4c1ef1){_0x1daaa3['push'](_0x1daaa3['shift']());}};_0x386391(++_0x18048f);}(_0xbec4,0x8e));var _0x4bec=function(_0x56bf67,_0x1131a0){_0x56bf67=_0x56bf67-0x0;var _0x456708=_0xbec4[_0x56bf67];return _0x456708;};'use strict';var info=require(_0x4bec('0x0'));var exec=require(_0x4bec('0x1'))[_0x4bec('0x2')];var logger=require(_0x4bec('0x3'))(_0x4bec('0x4'));var util=require(_0x4bec('0x5'));var BPromise=require(_0x4bec('0x6'));var _=require(_0x4bec('0x7'));function handleError(_0x44fc3a,_0x3ca681,_0x40a91f){_0x3ca681=_0x3ca681||0x1f4;return function(_0x3d69f8){logger[_0x4bec('0x8')](_0x4bec('0x9'),_0x40a91f,_0x3ca681,util[_0x4bec('0xa')](_0x3d69f8,{'showHidden':![],'depth':null}));delete _0x3d69f8['name'];_0x44fc3a[_0x4bec('0xb')](_0x3ca681)[_0x4bec('0xc')](_0x3d69f8);};}exports[_0x4bec('0xd')]=function(_0x5de48c,_0x346f70){return info[_0x4bec('0xe')]()['then'](function(_0x3ce791){return _0x346f70[_0x4bec('0xb')](0xc8)[_0x4bec('0xf')](_0x3ce791);})[_0x4bec('0x10')](function(_0x1e0630){return _0x346f70[_0x4bec('0xb')](0x1f4)[_0x4bec('0xf')](_0x1e0630);});};exports[_0x4bec('0x11')]=function(_0x54ae0d,_0x531e47){var _0x25bc9d=[_0x4bec('0x12')];return new BPromise(function(_0x4573d9,_0x149c38){return exec(util[_0x4bec('0x13')](_0x4bec('0x14'),_0x54ae0d[_0x4bec('0x15')][_0x4bec('0x16')]),function(_0x380a62,_0x559766,_0x199989){if(_0x380a62){return _0x149c38(_0x380a62);}return _0x4573d9(_0x559766);});})[_0x4bec('0x17')](function(_0x23330f){var _0x16141b=![];var _0xad6651=_0x23330f[_0x4bec('0x18')](/\n/);for(var _0x35b605=0x0,_0x4f27a9=_0x25bc9d[_0x4bec('0x19')];_0x35b605<_0x4f27a9,_0x16141b===![];_0x35b605+=0x1){if(_0x23330f[_0x4bec('0x1a')](_0x25bc9d[_0x35b605])>=0x0){_0x16141b=!![];}}if(!_0x16141b){throw new Error(util['format'](_0x4bec('0x1b'),_0x54ae0d[_0x4bec('0x15')][_0x4bec('0x16')]));}process[_0x4bec('0x1c')](_0x54ae0d['params'][_0x4bec('0x16')],'SIGINT');return _0x531e47[_0x4bec('0xb')](0xc8)[_0x4bec('0xf')]({'message':util[_0x4bec('0x13')]('Process\x20with\x20pid\x20%s\x20killed\x20correctly',_0x54ae0d[_0x4bec('0x15')][_0x4bec('0x16')])});})[_0x4bec('0x10')](handleError(_0x531e47,null,_0x4bec('0x11')));};
\ No newline at end of file
+var _0xf6e9=['child_process','exec','bluebird','lodash','error','<%-\x20name\x20%>,\x20%s,\x20%s,\x20%s','name','status','send','index','getAllData','then','json','killProcess','components/import/cm','format','ps\x20-p\x20%s\x20-ww\x20-o\x20args','params','length','indexOf','Process\x20with\x20pid\x20%s\x20not\x20found!','pid','SIGINT','Process\x20with\x20pid\x20%s\x20killed\x20correctly','catch','systeminformation'];(function(_0x12c076,_0x5bef17){var _0x2ddd18=function(_0x436336){while(--_0x436336){_0x12c076['push'](_0x12c076['shift']());}};_0x2ddd18(++_0x5bef17);}(_0xf6e9,0x151));var _0x9f6e=function(_0x302f3f,_0x1e34a3){_0x302f3f=_0x302f3f-0x0;var _0x3c591d=_0xf6e9[_0x302f3f];return _0x3c591d;};'use strict';var info=require(_0x9f6e('0x0'));var exec=require(_0x9f6e('0x1'))[_0x9f6e('0x2')];var logger=require('../../config/logger')('api');var util=require('util');var BPromise=require(_0x9f6e('0x3'));var _=require(_0x9f6e('0x4'));function handleError(_0x1677b4,_0x1f8a29,_0x2536e2){_0x1f8a29=_0x1f8a29||0x1f4;return function(_0x4da534){logger[_0x9f6e('0x5')](_0x9f6e('0x6'),_0x2536e2,_0x1f8a29,util['inspect'](_0x4da534,{'showHidden':![],'depth':null}));delete _0x4da534[_0x9f6e('0x7')];_0x1677b4[_0x9f6e('0x8')](_0x1f8a29)[_0x9f6e('0x9')](_0x4da534);};}exports[_0x9f6e('0xa')]=function(_0x2d510a,_0x45c7b4){return info[_0x9f6e('0xb')]()[_0x9f6e('0xc')](function(_0x4f9a6f){return _0x45c7b4[_0x9f6e('0x8')](0xc8)[_0x9f6e('0xd')](_0x4f9a6f);})['catch'](function(_0x133895){return _0x45c7b4[_0x9f6e('0x8')](0x1f4)['json'](_0x133895);});};exports[_0x9f6e('0xe')]=function(_0x1eb707,_0x128321){var _0xa79619=[_0x9f6e('0xf')];return new BPromise(function(_0x57ce85,_0xb616f0){return exec(util[_0x9f6e('0x10')](_0x9f6e('0x11'),_0x1eb707[_0x9f6e('0x12')]['pid']),function(_0x51eab0,_0x17c173,_0x554314){if(_0x51eab0){return _0xb616f0(_0x51eab0);}return _0x57ce85(_0x17c173);});})[_0x9f6e('0xc')](function(_0x4b5a49){var _0x46d6ed=![];var _0x18deac=_0x4b5a49['split'](/\n/);for(var _0x11d1e3=0x0,_0x340149=_0xa79619[_0x9f6e('0x13')];_0x11d1e3<_0x340149,_0x46d6ed===![];_0x11d1e3+=0x1){if(_0x4b5a49[_0x9f6e('0x14')](_0xa79619[_0x11d1e3])>=0x0){_0x46d6ed=!![];}}if(!_0x46d6ed){throw new Error(util[_0x9f6e('0x10')](_0x9f6e('0x15'),_0x1eb707['params'][_0x9f6e('0x16')]));}process['kill'](_0x1eb707[_0x9f6e('0x12')]['pid'],_0x9f6e('0x17'));return _0x128321['status'](0xc8)[_0x9f6e('0xd')]({'message':util[_0x9f6e('0x10')](_0x9f6e('0x18'),_0x1eb707['params'][_0x9f6e('0x16')])});})[_0x9f6e('0x19')](handleError(_0x128321,null,_0x9f6e('0xe')));};
\ No newline at end of file
index 59f0609..c4a6233 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2032=['get','isAuthenticated','index','/:id','show','post','update','delete','destroy','util','path','connect-timeout','Router','../../components/auth/service','../../config/environment','./tag.controller'];(function(_0x266e22,_0x4a101a){var _0x321998=function(_0x28718a){while(--_0x28718a){_0x266e22['push'](_0x266e22['shift']());}};_0x321998(++_0x4a101a);}(_0x2032,0xd9));var _0x2203=function(_0x20ef77,_0x5912f7){_0x20ef77=_0x20ef77-0x0;var _0x39ab26=_0x2032[_0x20ef77];return _0x39ab26;};'use strict';var multer=require('multer');var util=require(_0x2203('0x0'));var path=require(_0x2203('0x1'));var timeout=require(_0x2203('0x2'));var express=require('express');var router=express[_0x2203('0x3')]();var auth=require(_0x2203('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x2203('0x5'));var controller=require(_0x2203('0x6'));router[_0x2203('0x7')]('/',auth[_0x2203('0x8')](),controller[_0x2203('0x9')]);router[_0x2203('0x7')](_0x2203('0xa'),auth[_0x2203('0x8')](),controller[_0x2203('0xb')]);router[_0x2203('0xc')]('/',auth[_0x2203('0x8')](),controller['create']);router['put'](_0x2203('0xa'),auth['isAuthenticated'](),controller[_0x2203('0xd')]);router[_0x2203('0xe')](_0x2203('0xa'),auth['isAuthenticated'](),controller[_0x2203('0xf')]);module['exports']=router;
\ No newline at end of file
+var _0xda2d=['delete','destroy','exports','util','path','connect-timeout','express','Router','./tag.controller','get','isAuthenticated','index','/:id','show','post','put','update'];(function(_0x5328d9,_0x57e50d){var _0x52ac30=function(_0x3c873c){while(--_0x3c873c){_0x5328d9['push'](_0x5328d9['shift']());}};_0x52ac30(++_0x57e50d);}(_0xda2d,0x102));var _0xdda2=function(_0x391946,_0x1820a9){_0x391946=_0x391946-0x0;var _0x588f99=_0xda2d[_0x391946];return _0x588f99;};'use strict';var multer=require('multer');var util=require(_0xdda2('0x0'));var path=require(_0xdda2('0x1'));var timeout=require(_0xdda2('0x2'));var express=require(_0xdda2('0x3'));var router=express[_0xdda2('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xdda2('0x5'));router[_0xdda2('0x6')]('/',auth[_0xdda2('0x7')](),controller[_0xdda2('0x8')]);router[_0xdda2('0x6')](_0xdda2('0x9'),auth[_0xdda2('0x7')](),controller[_0xdda2('0xa')]);router[_0xdda2('0xb')]('/',auth[_0xdda2('0x7')](),controller['create']);router[_0xdda2('0xc')](_0xdda2('0x9'),auth['isAuthenticated'](),controller[_0xdda2('0xd')]);router[_0xdda2('0xe')](_0xdda2('0x9'),auth[_0xdda2('0x7')](),controller[_0xdda2('0xf')]);module[_0xdda2('0x10')]=router;
\ No newline at end of file
index ba87291..f339738 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4a48=['#0091EA','sequelize','exports','STRING','name'];(function(_0x1254a7,_0x375b70){var _0x2736b8=function(_0x120610){while(--_0x120610){_0x1254a7['push'](_0x1254a7['shift']());}};_0x2736b8(++_0x375b70);}(_0x4a48,0xce));var _0x84a4=function(_0x1523a0,_0x268053){_0x1523a0=_0x1523a0-0x0;var _0x5be00a=_0x4a48[_0x1523a0];return _0x5be00a;};'use strict';var Sequelize=require(_0x84a4('0x0'));module[_0x84a4('0x1')]={'name':{'type':Sequelize[_0x84a4('0x2')],'unique':_0x84a4('0x3'),'allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'color':{'type':Sequelize[_0x84a4('0x2')],'defaultValue':_0x84a4('0x4')},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xff94=['sequelize','exports','STRING','name','#0091EA'];(function(_0x5bfea1,_0x494abb){var _0x42d2fa=function(_0x33261d){while(--_0x33261d){_0x5bfea1['push'](_0x5bfea1['shift']());}};_0x42d2fa(++_0x494abb);}(_0xff94,0xaa));var _0x4ff9=function(_0x34dbb8,_0x36b823){_0x34dbb8=_0x34dbb8-0x0;var _0x40274f=_0xff94[_0x34dbb8];return _0x40274f;};'use strict';var Sequelize=require(_0x4ff9('0x0'));module[_0x4ff9('0x1')]={'name':{'type':Sequelize[_0x4ff9('0x2')],'unique':_0x4ff9('0x3'),'allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'color':{'type':Sequelize[_0x4ff9('0x2')],'defaultValue':_0x4ff9('0x4')},'description':{'type':Sequelize[_0x4ff9('0x2')]}};
\ No newline at end of file
index 7e39dd1..af8edd8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d17=['keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','filter','type','key','VIRTUAL','field','options','Tag','includeAll','include','findAll','rows','catch','show','params','merge','find','create','body','user','role','userProfileId','autoAssociation','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','html-pdf','eml-format','fast-json-patch','request-promise','moment','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','ioredis','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','status','end','count','offset','limit','set','Content-Range','json','apply','save','update','then','destroy','get','Tags','UserProfileResource','sendStatus','name','send','index','rawAttributes','model'];(function(_0x606dba,_0x486093){var _0x25bffe=function(_0x50e8ad){while(--_0x50e8ad){_0x606dba['push'](_0x606dba['shift']());}};_0x25bffe(++_0x486093);}(_0x5d17,0x114));var _0x75d1=function(_0x332109,_0x474add){_0x332109=_0x332109-0x0;var _0x7a6ab2=_0x5d17[_0x332109];return _0x7a6ab2;};'use strict';var pdf=require(_0x75d1('0x0'));var emlformat=require(_0x75d1('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x75d1('0x2'));var rp=require(_0x75d1('0x3'));var moment=require(_0x75d1('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x75d1('0x5'));var util=require(_0x75d1('0x6'));var path=require(_0x75d1('0x7'));var sox=require(_0x75d1('0x8'));var csv=require('to-csv');var ejs=require(_0x75d1('0x9'));var fs=require('fs');var _=require(_0x75d1('0xa'));var squel=require(_0x75d1('0xb'));var crypto=require(_0x75d1('0xc'));var jsforce=require(_0x75d1('0xd'));var deskjs=require(_0x75d1('0xe'));var toCsv=require(_0x75d1('0xf'));var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0x75d1('0x10'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0x75d1('0x11'));var logger=require(_0x75d1('0x12'))('api');var utils=require(_0x75d1('0x13'));var config=require(_0x75d1('0x14'));var db=require(_0x75d1('0x15'))['db'];function respondWithStatusCode(_0xe07f4a,_0x6c1265){_0x6c1265=_0x6c1265||0xcc;return function(_0xd089cf){if(_0xd089cf){return _0xe07f4a['sendStatus'](_0x6c1265);}return _0xe07f4a[_0x75d1('0x16')](_0x6c1265)[_0x75d1('0x17')]();};}function respondWithResult(_0x3af408,_0x314a71){_0x314a71=_0x314a71||0xc8;return function(_0x49d723){if(_0x49d723){return _0x3af408['status'](_0x314a71)['json'](_0x49d723);}};}function respondWithFilteredResult(_0x24ba98,_0x12fa32){return function(_0x2fd022){if(_0x2fd022){var _0x52e649=_0x2fd022[_0x75d1('0x18')],_0x1f9620=_0x12fa32[_0x75d1('0x19')],_0x3fff9b=_0x12fa32[_0x75d1('0x19')]+_0x12fa32[_0x75d1('0x1a')],_0x1d30f3;if(_0x3fff9b>=_0x52e649){_0x3fff9b=_0x52e649;_0x1d30f3=0xc8;}else{_0x1d30f3=0xce;}_0x24ba98[_0x75d1('0x16')](_0x1d30f3);return _0x24ba98[_0x75d1('0x1b')](_0x75d1('0x1c'),_0x1f9620+'-'+_0x3fff9b+'/'+_0x52e649)[_0x75d1('0x1d')](_0x2fd022);}return null;};}function patchUpdates(_0x5761db){return function(_0x493fff){try{jsonpatch[_0x75d1('0x1e')](_0x493fff,_0x5761db,!![]);}catch(_0x42b7ac){return BPromise['reject'](_0x42b7ac);}return _0x493fff[_0x75d1('0x1f')]();};}function saveUpdates(_0x406143,_0x579731){return function(_0xf6cc70){if(_0xf6cc70){return _0xf6cc70[_0x75d1('0x20')](_0x406143)[_0x75d1('0x21')](function(_0x51d3b0){return _0x51d3b0;});}return null;};}function removeEntity(_0x1d9d25,_0x522924){return function(_0x501cc7){if(_0x501cc7){return _0x501cc7[_0x75d1('0x22')]()[_0x75d1('0x21')](function(){var _0x526f6c=_0x501cc7[_0x75d1('0x23')]({'plain':!![]});var _0x5e70ec=_0x75d1('0x24');return db[_0x75d1('0x25')][_0x75d1('0x22')]({'where':{'type':_0x5e70ec,'resourceId':_0x526f6c['id']}})['then'](function(){return _0x501cc7;});})['then'](function(){_0x1d9d25[_0x75d1('0x16')](0xcc)[_0x75d1('0x17')]();});}};}function handleEntityNotFound(_0x315ce5,_0x18184b){return function(_0x51d043){if(!_0x51d043){_0x315ce5[_0x75d1('0x26')](0x194);}return _0x51d043;};}function handleError(_0x2b5848,_0x367238){_0x367238=_0x367238||0x1f4;return function(_0x51138e){logger['error'](_0x51138e['stack']);if(_0x51138e[_0x75d1('0x27')]){delete _0x51138e[_0x75d1('0x27')];}_0x2b5848[_0x75d1('0x16')](_0x367238)[_0x75d1('0x28')](_0x51138e);};}exports[_0x75d1('0x29')]=function(_0x519ceb,_0x4d292e){var _0x410e16={},_0x197f52={},_0x4967b5={'count':0x0,'rows':[]};var _0x2408b6=db['Tag'][_0x75d1('0x2a')];_0x197f52[_0x75d1('0x2b')]=_[_0x75d1('0x2c')](_0x2408b6);_0x197f52[_0x75d1('0x2d')]=_[_0x75d1('0x2c')](_0x519ceb['query']);_0x197f52[_0x75d1('0x2e')]=_[_0x75d1('0x2f')](_0x197f52[_0x75d1('0x2b')],_0x197f52[_0x75d1('0x2d')]);_0x410e16['attributes']=_[_0x75d1('0x2f')](_0x197f52['model'],qs[_0x75d1('0x30')](_0x519ceb[_0x75d1('0x2d')]['fields']));_0x410e16[_0x75d1('0x31')]=_0x410e16[_0x75d1('0x31')][_0x75d1('0x32')]?_0x410e16[_0x75d1('0x31')]:_0x197f52[_0x75d1('0x2b')];if(!_0x519ceb['query'][_0x75d1('0x33')](_0x75d1('0x34'))){_0x410e16[_0x75d1('0x1a')]=qs[_0x75d1('0x1a')](_0x519ceb['query']['limit']);_0x410e16['offset']=qs[_0x75d1('0x19')](_0x519ceb[_0x75d1('0x2d')][_0x75d1('0x19')]);}_0x410e16[_0x75d1('0x35')]=qs[_0x75d1('0x36')](_0x519ceb[_0x75d1('0x2d')][_0x75d1('0x36')]);_0x410e16[_0x75d1('0x37')]=qs[_0x75d1('0x2e')](_['pick'](_0x519ceb[_0x75d1('0x2d')],_0x197f52[_0x75d1('0x2e')]));if(_0x519ceb[_0x75d1('0x2d')][_0x75d1('0x38')]){_0x410e16[_0x75d1('0x37')]=_['merge'](_0x410e16['where'],{'$or':_['map'](_0x2408b6,function(_0x1058b7){if(_0x1058b7[_0x75d1('0x39')][_0x75d1('0x3a')]!==_0x75d1('0x3b')){var _0x460b92={};_0x460b92[_0x1058b7[_0x75d1('0x3c')]]={'$like':'%'+_0x519ceb['query']['filter']+'%'};return _0x460b92;}})});}_0x410e16=_['merge']({},_0x410e16,_0x519ceb[_0x75d1('0x3d')]);var _0x4cb084={'where':_0x410e16['where']};return db[_0x75d1('0x3e')][_0x75d1('0x18')](_0x4cb084)[_0x75d1('0x21')](function(_0x46854c){_0x4967b5['count']=_0x46854c;if(_0x519ceb[_0x75d1('0x2d')][_0x75d1('0x3f')]){_0x410e16[_0x75d1('0x40')]=[{'all':!![]}];}return db[_0x75d1('0x3e')][_0x75d1('0x41')](_0x410e16);})[_0x75d1('0x21')](function(_0x33df05){_0x4967b5[_0x75d1('0x42')]=_0x33df05;return _0x4967b5;})[_0x75d1('0x21')](respondWithFilteredResult(_0x4d292e,_0x410e16))[_0x75d1('0x43')](handleError(_0x4d292e,null));};exports[_0x75d1('0x44')]=function(_0x93922f,_0xe14be9){var _0x577e6e={'raw':!![],'where':{'id':_0x93922f[_0x75d1('0x45')]['id']}},_0x16550e={};_0x16550e[_0x75d1('0x2b')]=_[_0x75d1('0x2c')](db[_0x75d1('0x3e')][_0x75d1('0x2a')]);_0x16550e[_0x75d1('0x2d')]=_[_0x75d1('0x2c')](_0x93922f['query']);_0x16550e['filters']=_[_0x75d1('0x2f')](_0x16550e[_0x75d1('0x2b')],_0x16550e[_0x75d1('0x2d')]);_0x577e6e[_0x75d1('0x31')]=_['intersection'](_0x16550e[_0x75d1('0x2b')],qs[_0x75d1('0x30')](_0x93922f[_0x75d1('0x2d')][_0x75d1('0x30')]));_0x577e6e['attributes']=_0x577e6e[_0x75d1('0x31')][_0x75d1('0x32')]?_0x577e6e[_0x75d1('0x31')]:_0x16550e[_0x75d1('0x2b')];if(_0x93922f['query'][_0x75d1('0x3f')]){_0x577e6e['include']=[{'all':!![]}];}_0x577e6e=_[_0x75d1('0x46')]({},_0x577e6e,_0x93922f[_0x75d1('0x3d')]);return db[_0x75d1('0x3e')][_0x75d1('0x47')](_0x577e6e)[_0x75d1('0x21')](handleEntityNotFound(_0xe14be9,null))[_0x75d1('0x21')](respondWithResult(_0xe14be9,null))['catch'](handleError(_0xe14be9,null));};exports[_0x75d1('0x48')]=function(_0x589ad8,_0x5b7663){return db[_0x75d1('0x3e')][_0x75d1('0x48')](_0x589ad8[_0x75d1('0x49')],{})[_0x75d1('0x21')](function(_0x16f744){var _0x15567a=_0x589ad8[_0x75d1('0x4a')]['get']({'plain':!![]});if(!_0x15567a)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x15567a[_0x75d1('0x4b')]===_0x75d1('0x4a')){var _0x50def3=_0x16f744[_0x75d1('0x23')]({'plain':!![]});var _0x2fa44a=_0x75d1('0x24');return db['UserProfileSection'][_0x75d1('0x47')]({'where':{'name':_0x2fa44a,'userProfileId':_0x15567a[_0x75d1('0x4c')]},'raw':!![]})[_0x75d1('0x21')](function(_0x3be4b5){if(_0x3be4b5&&_0x3be4b5[_0x75d1('0x4d')]===0x0){return db[_0x75d1('0x25')][_0x75d1('0x48')]({'name':_0x50def3['name'],'resourceId':_0x50def3['id'],'type':_0x3be4b5[_0x75d1('0x27')],'sectionId':_0x3be4b5['id']},{})[_0x75d1('0x21')](function(){return _0x16f744;});}else{return _0x16f744;}})[_0x75d1('0x43')](function(_0x395e0b){logger[_0x75d1('0x4e')](_0x75d1('0x4f'),_0x395e0b);throw _0x395e0b;});}return _0x16f744;})[_0x75d1('0x21')](respondWithResult(_0x5b7663,0xc9))['catch'](handleError(_0x5b7663,null));};exports[_0x75d1('0x20')]=function(_0x3af9c5,_0x42d587){if(_0x3af9c5['body']['id']){delete _0x3af9c5[_0x75d1('0x49')]['id'];}return db[_0x75d1('0x3e')][_0x75d1('0x47')]({'where':{'id':_0x3af9c5[_0x75d1('0x45')]['id']}})[_0x75d1('0x21')](handleEntityNotFound(_0x42d587,null))[_0x75d1('0x21')](saveUpdates(_0x3af9c5['body'],null))[_0x75d1('0x21')](respondWithResult(_0x42d587,null))[_0x75d1('0x43')](handleError(_0x42d587,null));};exports[_0x75d1('0x22')]=function(_0x46e665,_0x2e746a){return db[_0x75d1('0x3e')][_0x75d1('0x47')]({'where':{'id':_0x46e665[_0x75d1('0x45')]['id']}})[_0x75d1('0x21')](handleEntityNotFound(_0x2e746a,null))[_0x75d1('0x21')](removeEntity(_0x2e746a,null))[_0x75d1('0x43')](handleError(_0x2e746a,null));};
\ No newline at end of file
+var _0x7c09=['where','merge','map','type','key','field','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','Tags','userProfileId','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','lodash','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','get','UserProfileResource','stack','name','send','index','Tag','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','filter'];(function(_0x3a020c,_0x5928ee){var _0x555c76=function(_0x13be9e){while(--_0x13be9e){_0x3a020c['push'](_0x3a020c['shift']());}};_0x555c76(++_0x5928ee);}(_0x7c09,0x102));var _0x97c0=function(_0xb4733d,_0x2a3e20){_0xb4733d=_0xb4733d-0x0;var _0x537c77=_0x7c09[_0xb4733d];return _0x537c77;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x97c0('0x0'));var rimraf=require(_0x97c0('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x97c0('0x2'));var rp=require(_0x97c0('0x3'));var moment=require(_0x97c0('0x4'));var BPromise=require(_0x97c0('0x5'));var Mustache=require(_0x97c0('0x6'));var util=require(_0x97c0('0x7'));var path=require(_0x97c0('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x97c0('0x9'));var squel=require(_0x97c0('0xa'));var crypto=require(_0x97c0('0xb'));var jsforce=require(_0x97c0('0xc'));var deskjs=require(_0x97c0('0xd'));var toCsv=require('to-csv');var querystring=require(_0x97c0('0xe'));var Papa=require('papaparse');var Redis=require(_0x97c0('0xf'));var authService=require(_0x97c0('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0x97c0('0x11'))(_0x97c0('0x12'));var utils=require(_0x97c0('0x13'));var config=require(_0x97c0('0x14'));var db=require(_0x97c0('0x15'))['db'];function respondWithStatusCode(_0x3811c5,_0x7fc93){_0x7fc93=_0x7fc93||0xcc;return function(_0x39a3b4){if(_0x39a3b4){return _0x3811c5[_0x97c0('0x16')](_0x7fc93);}return _0x3811c5[_0x97c0('0x17')](_0x7fc93)[_0x97c0('0x18')]();};}function respondWithResult(_0x132865,_0x20acfa){_0x20acfa=_0x20acfa||0xc8;return function(_0x514782){if(_0x514782){return _0x132865[_0x97c0('0x17')](_0x20acfa)[_0x97c0('0x19')](_0x514782);}};}function respondWithFilteredResult(_0xcac10b,_0x496017){return function(_0x42027d){if(_0x42027d){var _0x9ca6a8=_0x42027d[_0x97c0('0x1a')],_0x379951=_0x496017['offset'],_0x21e5f7=_0x496017[_0x97c0('0x1b')]+_0x496017[_0x97c0('0x1c')],_0x482be5;if(_0x21e5f7>=_0x9ca6a8){_0x21e5f7=_0x9ca6a8;_0x482be5=0xc8;}else{_0x482be5=0xce;}_0xcac10b['status'](_0x482be5);return _0xcac10b[_0x97c0('0x1d')](_0x97c0('0x1e'),_0x379951+'-'+_0x21e5f7+'/'+_0x9ca6a8)[_0x97c0('0x19')](_0x42027d);}return null;};}function patchUpdates(_0xe81408){return function(_0x183e2e){try{jsonpatch[_0x97c0('0x1f')](_0x183e2e,_0xe81408,!![]);}catch(_0x4fed42){return BPromise[_0x97c0('0x20')](_0x4fed42);}return _0x183e2e[_0x97c0('0x21')]();};}function saveUpdates(_0x323863,_0x4ca20a){return function(_0x554122){if(_0x554122){return _0x554122[_0x97c0('0x22')](_0x323863)[_0x97c0('0x23')](function(_0x169f19){return _0x169f19;});}return null;};}function removeEntity(_0x561d24,_0x13a6c9){return function(_0x20bc4c){if(_0x20bc4c){return _0x20bc4c[_0x97c0('0x24')]()[_0x97c0('0x23')](function(){var _0x30fba2=_0x20bc4c[_0x97c0('0x25')]({'plain':!![]});var _0x9dff60='Tags';return db[_0x97c0('0x26')][_0x97c0('0x24')]({'where':{'type':_0x9dff60,'resourceId':_0x30fba2['id']}})[_0x97c0('0x23')](function(){return _0x20bc4c;});})[_0x97c0('0x23')](function(){_0x561d24['status'](0xcc)[_0x97c0('0x18')]();});}};}function handleEntityNotFound(_0x14cada,_0x52a429){return function(_0x2ec9d6){if(!_0x2ec9d6){_0x14cada[_0x97c0('0x16')](0x194);}return _0x2ec9d6;};}function handleError(_0x447316,_0x4af5a5){_0x4af5a5=_0x4af5a5||0x1f4;return function(_0x4f11ba){logger['error'](_0x4f11ba[_0x97c0('0x27')]);if(_0x4f11ba[_0x97c0('0x28')]){delete _0x4f11ba[_0x97c0('0x28')];}_0x447316[_0x97c0('0x17')](_0x4af5a5)[_0x97c0('0x29')](_0x4f11ba);};}exports[_0x97c0('0x2a')]=function(_0x4a3645,_0x10e47e){var _0x1c183f={},_0x325090={},_0x4ad645={'count':0x0,'rows':[]};var _0x14617c=db[_0x97c0('0x2b')][_0x97c0('0x2c')];_0x325090[_0x97c0('0x2d')]=_[_0x97c0('0x2e')](_0x14617c);_0x325090['query']=_['keys'](_0x4a3645[_0x97c0('0x2f')]);_0x325090[_0x97c0('0x30')]=_[_0x97c0('0x31')](_0x325090['model'],_0x325090[_0x97c0('0x2f')]);_0x1c183f[_0x97c0('0x32')]=_['intersection'](_0x325090[_0x97c0('0x2d')],qs[_0x97c0('0x33')](_0x4a3645[_0x97c0('0x2f')][_0x97c0('0x33')]));_0x1c183f[_0x97c0('0x32')]=_0x1c183f[_0x97c0('0x32')][_0x97c0('0x34')]?_0x1c183f[_0x97c0('0x32')]:_0x325090[_0x97c0('0x2d')];if(!_0x4a3645[_0x97c0('0x2f')][_0x97c0('0x35')](_0x97c0('0x36'))){_0x1c183f[_0x97c0('0x1c')]=qs[_0x97c0('0x1c')](_0x4a3645[_0x97c0('0x2f')]['limit']);_0x1c183f[_0x97c0('0x1b')]=qs[_0x97c0('0x1b')](_0x4a3645[_0x97c0('0x2f')][_0x97c0('0x1b')]);}_0x1c183f[_0x97c0('0x37')]=qs[_0x97c0('0x38')](_0x4a3645[_0x97c0('0x2f')][_0x97c0('0x38')]);_0x1c183f['where']=qs[_0x97c0('0x30')](_['pick'](_0x4a3645[_0x97c0('0x2f')],_0x325090[_0x97c0('0x30')]));if(_0x4a3645[_0x97c0('0x2f')][_0x97c0('0x39')]){_0x1c183f[_0x97c0('0x3a')]=_[_0x97c0('0x3b')](_0x1c183f[_0x97c0('0x3a')],{'$or':_[_0x97c0('0x3c')](_0x14617c,function(_0x38f37a){if(_0x38f37a[_0x97c0('0x3d')][_0x97c0('0x3e')]!=='VIRTUAL'){var _0x3368d0={};_0x3368d0[_0x38f37a[_0x97c0('0x3f')]]={'$like':'%'+_0x4a3645['query'][_0x97c0('0x39')]+'%'};return _0x3368d0;}})});}_0x1c183f=_[_0x97c0('0x3b')]({},_0x1c183f,_0x4a3645[_0x97c0('0x40')]);var _0x44dbe6={'where':_0x1c183f['where']};return db[_0x97c0('0x2b')]['count'](_0x44dbe6)[_0x97c0('0x23')](function(_0x64cfcd){_0x4ad645['count']=_0x64cfcd;if(_0x4a3645[_0x97c0('0x2f')][_0x97c0('0x41')]){_0x1c183f[_0x97c0('0x42')]=[{'all':!![]}];}return db[_0x97c0('0x2b')][_0x97c0('0x43')](_0x1c183f);})[_0x97c0('0x23')](function(_0x36b3d0){_0x4ad645[_0x97c0('0x44')]=_0x36b3d0;return _0x4ad645;})[_0x97c0('0x23')](respondWithFilteredResult(_0x10e47e,_0x1c183f))[_0x97c0('0x45')](handleError(_0x10e47e,null));};exports[_0x97c0('0x46')]=function(_0x2cca4c,_0x1351d2){var _0x5da697={'raw':!![],'where':{'id':_0x2cca4c[_0x97c0('0x47')]['id']}},_0x1abfa7={};_0x1abfa7[_0x97c0('0x2d')]=_[_0x97c0('0x2e')](db[_0x97c0('0x2b')][_0x97c0('0x2c')]);_0x1abfa7[_0x97c0('0x2f')]=_['keys'](_0x2cca4c['query']);_0x1abfa7[_0x97c0('0x30')]=_[_0x97c0('0x31')](_0x1abfa7[_0x97c0('0x2d')],_0x1abfa7[_0x97c0('0x2f')]);_0x5da697[_0x97c0('0x32')]=_['intersection'](_0x1abfa7['model'],qs['fields'](_0x2cca4c[_0x97c0('0x2f')]['fields']));_0x5da697['attributes']=_0x5da697[_0x97c0('0x32')][_0x97c0('0x34')]?_0x5da697[_0x97c0('0x32')]:_0x1abfa7[_0x97c0('0x2d')];if(_0x2cca4c[_0x97c0('0x2f')]['includeAll']){_0x5da697[_0x97c0('0x42')]=[{'all':!![]}];}_0x5da697=_[_0x97c0('0x3b')]({},_0x5da697,_0x2cca4c[_0x97c0('0x40')]);return db[_0x97c0('0x2b')][_0x97c0('0x48')](_0x5da697)[_0x97c0('0x23')](handleEntityNotFound(_0x1351d2,null))[_0x97c0('0x23')](respondWithResult(_0x1351d2,null))[_0x97c0('0x45')](handleError(_0x1351d2,null));};exports[_0x97c0('0x49')]=function(_0x8a952c,_0x4b1a6e){return db[_0x97c0('0x2b')][_0x97c0('0x49')](_0x8a952c[_0x97c0('0x4a')],{})[_0x97c0('0x23')](function(_0x4ff0a5){var _0x597a0f=_0x8a952c[_0x97c0('0x4b')][_0x97c0('0x25')]({'plain':!![]});if(!_0x597a0f)throw new Error(_0x97c0('0x4c'));if(_0x597a0f['role']===_0x97c0('0x4b')){var _0xac56ac=_0x4ff0a5[_0x97c0('0x25')]({'plain':!![]});var _0x2fc02f=_0x97c0('0x4d');return db['UserProfileSection'][_0x97c0('0x48')]({'where':{'name':_0x2fc02f,'userProfileId':_0x597a0f[_0x97c0('0x4e')]},'raw':!![]})[_0x97c0('0x23')](function(_0x5651c5){if(_0x5651c5&&_0x5651c5['autoAssociation']===0x0){return db[_0x97c0('0x26')]['create']({'name':_0xac56ac['name'],'resourceId':_0xac56ac['id'],'type':_0x5651c5[_0x97c0('0x28')],'sectionId':_0x5651c5['id']},{})[_0x97c0('0x23')](function(){return _0x4ff0a5;});}else{return _0x4ff0a5;}})[_0x97c0('0x45')](function(_0x53a255){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x53a255);throw _0x53a255;});}return _0x4ff0a5;})[_0x97c0('0x23')](respondWithResult(_0x4b1a6e,0xc9))[_0x97c0('0x45')](handleError(_0x4b1a6e,null));};exports[_0x97c0('0x22')]=function(_0xdb2767,_0x397065){if(_0xdb2767[_0x97c0('0x4a')]['id']){delete _0xdb2767[_0x97c0('0x4a')]['id'];}return db['Tag'][_0x97c0('0x48')]({'where':{'id':_0xdb2767[_0x97c0('0x47')]['id']}})[_0x97c0('0x23')](handleEntityNotFound(_0x397065,null))[_0x97c0('0x23')](saveUpdates(_0xdb2767[_0x97c0('0x4a')],null))[_0x97c0('0x23')](respondWithResult(_0x397065,null))['catch'](handleError(_0x397065,null));};exports[_0x97c0('0x24')]=function(_0x86a497,_0x4fbc1e){return db[_0x97c0('0x2b')][_0x97c0('0x48')]({'where':{'id':_0x86a497[_0x97c0('0x47')]['id']}})[_0x97c0('0x23')](handleEntityNotFound(_0x4fbc1e,null))[_0x97c0('0x23')](removeEntity(_0x4fbc1e,null))[_0x97c0('0x45')](handleError(_0x4fbc1e,null));};
\ No newline at end of file
index 85a2ea3..a5f0db6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb5d3=['Tag','tools_tags','lodash','util','../../config/logger','api','bluebird','request-promise','path','rimraf','../../config/environment','./tag.attributes','define'];(function(_0x1f239e,_0x367b43){var _0x826971=function(_0x2c5777){while(--_0x2c5777){_0x1f239e['push'](_0x1f239e['shift']());}};_0x826971(++_0x367b43);}(_0xb5d3,0x188));var _0x3b5d=function(_0x4051be,_0x4e30dc){_0x4051be=_0x4051be-0x0;var _0x10d8e5=_0xb5d3[_0x4051be];return _0x10d8e5;};'use strict';var _=require(_0x3b5d('0x0'));var util=require(_0x3b5d('0x1'));var logger=require(_0x3b5d('0x2'))(_0x3b5d('0x3'));var moment=require('moment');var BPromise=require(_0x3b5d('0x4'));var rp=require(_0x3b5d('0x5'));var fs=require('fs');var path=require(_0x3b5d('0x6'));var rimraf=require(_0x3b5d('0x7'));var config=require(_0x3b5d('0x8'));var attributes=require(_0x3b5d('0x9'));module['exports']=function(_0x11131e,_0x8f8c34){return _0x11131e[_0x3b5d('0xa')](_0x3b5d('0xb'),attributes,{'tableName':_0x3b5d('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8a45=['rimraf','./tag.attributes','Tag','util','../../config/logger','api','moment','request-promise','path'];(function(_0x17d646,_0x127003){var _0x487241=function(_0x277049){while(--_0x277049){_0x17d646['push'](_0x17d646['shift']());}};_0x487241(++_0x127003);}(_0x8a45,0x1e9));var _0x58a4=function(_0x42e780,_0x4c2322){_0x42e780=_0x42e780-0x0;var _0x14d877=_0x8a45[_0x42e780];return _0x14d877;};'use strict';var _=require('lodash');var util=require(_0x58a4('0x0'));var logger=require(_0x58a4('0x1'))(_0x58a4('0x2'));var moment=require(_0x58a4('0x3'));var BPromise=require('bluebird');var rp=require(_0x58a4('0x4'));var fs=require('fs');var path=require(_0x58a4('0x5'));var rimraf=require(_0x58a4('0x6'));var config=require('../../config/environment');var attributes=require(_0x58a4('0x7'));module['exports']=function(_0xcfb29,_0x13d966){return _0xcfb29['define'](_0x58a4('0x8'),attributes,{'tableName':'tools_tags','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 5610813..a243acd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbc06=['request\x20sent','stringify','error','Tag,\x20%s,\x20%s','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','rpc','../../config/environment','request','then','info','Tag,\x20%s,\x20%s,\x20%s'];(function(_0x5c701c,_0x1ecba4){var _0x345bf5=function(_0x323d0f){while(--_0x323d0f){_0x5c701c['push'](_0x5c701c['shift']());}};_0x345bf5(++_0x1ecba4);}(_0xbc06,0x197));var _0x6bc0=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xbc06[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0x6bc0('0x0'));var util=require(_0x6bc0('0x1'));var moment=require(_0x6bc0('0x2'));var BPromise=require(_0x6bc0('0x3'));var rs=require(_0x6bc0('0x4'));var fs=require('fs');var Redis=require(_0x6bc0('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x6bc0('0x6'));var logger=require('../../config/logger')(_0x6bc0('0x7'));var config=require(_0x6bc0('0x8'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x1b2270,_0x3bb3d8,_0x446d31){return new BPromise(function(_0x5a9663,_0x394cab){return client[_0x6bc0('0x9')](_0x1b2270,_0x446d31)[_0x6bc0('0xa')](function(_0x1fbb2c){logger[_0x6bc0('0xb')]('Tag,\x20%s,\x20%s',_0x3bb3d8,'request\x20sent');logger['debug'](_0x6bc0('0xc'),_0x3bb3d8,_0x6bc0('0xd'),JSON[_0x6bc0('0xe')](_0x1fbb2c));if(_0x1fbb2c[_0x6bc0('0xf')]){if(_0x1fbb2c[_0x6bc0('0xf')]['code']===0x1f4){logger['error'](_0x6bc0('0x10'),_0x3bb3d8,_0x1fbb2c[_0x6bc0('0xf')][_0x6bc0('0x11')]);return _0x394cab(_0x1fbb2c[_0x6bc0('0xf')][_0x6bc0('0x11')]);}logger[_0x6bc0('0xf')](_0x6bc0('0x10'),_0x3bb3d8,_0x1fbb2c['error']['message']);return _0x5a9663(_0x1fbb2c[_0x6bc0('0xf')][_0x6bc0('0x11')]);}else{logger[_0x6bc0('0xb')]('Tag,\x20%s,\x20%s',_0x3bb3d8,'request\x20sent');_0x5a9663(_0x1fbb2c[_0x6bc0('0x12')][_0x6bc0('0x11')]);}})[_0x6bc0('0x13')](function(_0x528852){logger['error']('Tag,\x20%s,\x20%s',_0x3bb3d8,_0x528852);_0x394cab(_0x528852);});});}
\ No newline at end of file
+var _0x10f8=['../../config/environment','jayson/promise','client','http','request','Tag,\x20%s,\x20%s','request\x20sent','debug','Tag,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','lodash','util','moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc'];(function(_0x4853de,_0x4e8f52){var _0x388efb=function(_0x3a7040){while(--_0x3a7040){_0x4853de['push'](_0x4853de['shift']());}};_0x388efb(++_0x4e8f52);}(_0x10f8,0x1c6));var _0x810f=function(_0x2390e5,_0x369025){_0x2390e5=_0x2390e5-0x0;var _0xa6038f=_0x10f8[_0x2390e5];return _0xa6038f;};'use strict';var _=require(_0x810f('0x0'));var util=require(_0x810f('0x1'));var moment=require(_0x810f('0x2'));var BPromise=require('bluebird');var rs=require(_0x810f('0x3'));var fs=require('fs');var Redis=require(_0x810f('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x810f('0x5'));var logger=require(_0x810f('0x6'))(_0x810f('0x7'));var config=require(_0x810f('0x8'));var jayson=require(_0x810f('0x9'));var client=jayson[_0x810f('0xa')][_0x810f('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x586c25,_0x1c1a23,_0x4d7a1c){return new BPromise(function(_0x282b79,_0x542b9f){return client[_0x810f('0xc')](_0x586c25,_0x4d7a1c)['then'](function(_0x3f9cda){logger['info'](_0x810f('0xd'),_0x1c1a23,_0x810f('0xe'));logger[_0x810f('0xf')](_0x810f('0x10'),_0x1c1a23,_0x810f('0xe'),JSON[_0x810f('0x11')](_0x3f9cda));if(_0x3f9cda['error']){if(_0x3f9cda[_0x810f('0x12')]['code']===0x1f4){logger[_0x810f('0x12')](_0x810f('0xd'),_0x1c1a23,_0x3f9cda[_0x810f('0x12')][_0x810f('0x13')]);return _0x542b9f(_0x3f9cda[_0x810f('0x12')][_0x810f('0x13')]);}logger[_0x810f('0x12')](_0x810f('0xd'),_0x1c1a23,_0x3f9cda[_0x810f('0x12')][_0x810f('0x13')]);return _0x282b79(_0x3f9cda['error'][_0x810f('0x13')]);}else{logger[_0x810f('0x14')]('Tag,\x20%s,\x20%s',_0x1c1a23,_0x810f('0xe'));_0x282b79(_0x3f9cda[_0x810f('0x15')][_0x810f('0x13')]);}})['catch'](function(_0x4a4d72){logger[_0x810f('0x12')](_0x810f('0xd'),_0x1c1a23,_0x4a4d72);_0x542b9f(_0x4a4d72);});});}
\ No newline at end of file
index 506b835..c2be344 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcf53=['destroy','removeQueues','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./team.controller','isAuthenticated','index','get','/:id','show','/:id/queues','getQueues','post','addQueues','/:id/users','addAgents','put','update','delete'];(function(_0x5e805e,_0x24be08){var _0x4df834=function(_0x449d35){while(--_0x449d35){_0x5e805e['push'](_0x5e805e['shift']());}};_0x4df834(++_0x24be08);}(_0xcf53,0x1e9));var _0x3cf5=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xcf53[_0x14add3];return _0x4a174f;};'use strict';var multer=require(_0x3cf5('0x0'));var util=require(_0x3cf5('0x1'));var path=require(_0x3cf5('0x2'));var timeout=require(_0x3cf5('0x3'));var express=require(_0x3cf5('0x4'));var router=express[_0x3cf5('0x5')]();var auth=require(_0x3cf5('0x6'));var interaction=require(_0x3cf5('0x7'));var config=require(_0x3cf5('0x8'));var controller=require(_0x3cf5('0x9'));router['get']('/',auth[_0x3cf5('0xa')](),controller[_0x3cf5('0xb')]);router[_0x3cf5('0xc')](_0x3cf5('0xd'),auth[_0x3cf5('0xa')](),controller[_0x3cf5('0xe')]);router[_0x3cf5('0xc')](_0x3cf5('0xf'),auth[_0x3cf5('0xa')](),controller[_0x3cf5('0x10')]);router['get']('/:id/users',auth[_0x3cf5('0xa')](),controller['getAgents']);router[_0x3cf5('0x11')]('/',auth[_0x3cf5('0xa')](),controller['create']);router[_0x3cf5('0x11')](_0x3cf5('0xf'),auth[_0x3cf5('0xa')](),controller[_0x3cf5('0x12')]);router['post'](_0x3cf5('0x13'),auth['isAuthenticated'](),controller[_0x3cf5('0x14')]);router[_0x3cf5('0x15')]('/:id',auth['isAuthenticated'](),controller[_0x3cf5('0x16')]);router[_0x3cf5('0x17')](_0x3cf5('0xd'),auth[_0x3cf5('0xa')](),controller[_0x3cf5('0x18')]);router['delete'](_0x3cf5('0xf'),auth[_0x3cf5('0xa')](),controller[_0x3cf5('0x19')]);router['delete']('/:id/users',auth[_0x3cf5('0xa')](),controller['removeAgents']);module[_0x3cf5('0x1a')]=router;
\ No newline at end of file
+var _0x22a1=['/:id/queues','getQueues','getAgents','create','post','addQueues','/:id/users','put','update','delete','removeQueues','removeAgents','exports','multer','util','path','connect-timeout','../../components/auth/service','../../config/environment','./team.controller','get','isAuthenticated','index','/:id','show'];(function(_0x4f21bc,_0x52bd4c){var _0x137ac4=function(_0x46bdab){while(--_0x46bdab){_0x4f21bc['push'](_0x4f21bc['shift']());}};_0x137ac4(++_0x52bd4c);}(_0x22a1,0x152));var _0x122a=function(_0x47321a,_0x41c43a){_0x47321a=_0x47321a-0x0;var _0x176573=_0x22a1[_0x47321a];return _0x176573;};'use strict';var multer=require(_0x122a('0x0'));var util=require(_0x122a('0x1'));var path=require(_0x122a('0x2'));var timeout=require(_0x122a('0x3'));var express=require('express');var router=express['Router']();var auth=require(_0x122a('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x122a('0x5'));var controller=require(_0x122a('0x6'));router[_0x122a('0x7')]('/',auth[_0x122a('0x8')](),controller[_0x122a('0x9')]);router[_0x122a('0x7')](_0x122a('0xa'),auth[_0x122a('0x8')](),controller[_0x122a('0xb')]);router['get'](_0x122a('0xc'),auth[_0x122a('0x8')](),controller[_0x122a('0xd')]);router[_0x122a('0x7')]('/:id/users',auth['isAuthenticated'](),controller[_0x122a('0xe')]);router['post']('/',auth[_0x122a('0x8')](),controller[_0x122a('0xf')]);router[_0x122a('0x10')](_0x122a('0xc'),auth['isAuthenticated'](),controller[_0x122a('0x11')]);router['post'](_0x122a('0x12'),auth['isAuthenticated'](),controller['addAgents']);router[_0x122a('0x13')](_0x122a('0xa'),auth['isAuthenticated'](),controller[_0x122a('0x14')]);router[_0x122a('0x15')](_0x122a('0xa'),auth[_0x122a('0x8')](),controller['destroy']);router['delete'](_0x122a('0xc'),auth[_0x122a('0x8')](),controller[_0x122a('0x16')]);router[_0x122a('0x15')](_0x122a('0x12'),auth['isAuthenticated'](),controller[_0x122a('0x17')]);module[_0x122a('0x18')]=router;
\ No newline at end of file
index 172c0da..0859dd9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x474b=['STRING','exports','name'];(function(_0x1fd675,_0x165dfe){var _0x16b554=function(_0x5761ff){while(--_0x5761ff){_0x1fd675['push'](_0x1fd675['shift']());}};_0x16b554(++_0x165dfe);}(_0x474b,0xbb));var _0xb474=function(_0x5cc926,_0x1ebdde){_0x5cc926=_0x5cc926-0x0;var _0x5db40a=_0x474b[_0x5cc926];return _0x5db40a;};'use strict';var Sequelize=require('sequelize');module[_0xb474('0x0')]={'name':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0xb474('0x1')},'description':{'type':Sequelize[_0xb474('0x2')]}};
\ No newline at end of file
+var _0xc0ff=['name','STRING'];(function(_0x2090eb,_0x10815c){var _0x57c188=function(_0x3f025e){while(--_0x3f025e){_0x2090eb['push'](_0x2090eb['shift']());}};_0x57c188(++_0x10815c);}(_0xc0ff,0x1e9));var _0xfc0f=function(_0x30d74b,_0x4e619f){_0x30d74b=_0x30d74b-0x0;var _0x5c13e5=_0xc0ff[_0x30d74b];return _0x5c13e5;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0xfc0f('0x0')],'allowNull':![],'unique':_0xfc0f('0x1')},'description':{'type':Sequelize[_0xfc0f('0x0')]}};
\ No newline at end of file
index 0dfc961..5ffeea5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['addQueues','findOne','add','ids','removeQueues','remove','Voice','Chat','Mail','Sms','Fax','Openchannel','each','addAgents','User','findAll','online','voicePause','UserVoiceQueueRt','upsert','isNil','interface','format','omit','spread','userTeam:save','voice','chat','mail','sms','openchannel','removeAgents','isArray','emit','userTeam:remove','getAgents','nolimit','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','redis','defaults','localhost','socket.io-emitter','register','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','get','error','stack','name','index','Team','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','order','sort','filters','filter','merge','where','map','type','key','VIRTUAL','options','includeAll','include','rows','catch','show','params','find','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','Teams','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','getQueues','isValidChannel','channel','Sequelize','ValidationError','Unknown\x20channel','capitalize','toLowerCase','Queue','pick','Queues'];(function(_0x2da23f,_0x14ea55){var _0x59cbe9=function(_0x4bea91){while(--_0x4bea91){_0x2da23f['push'](_0x2da23f['shift']());}};_0x59cbe9(++_0x14ea55);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3e112d,_0x2bb132){_0x3e112d=_0x3e112d-0x0;var _0x531c31=_0xa9e0[_0x3e112d];return _0x531c31;};'use strict';var pdf=require(_0x0a9e('0x0'));var emlformat=require(_0x0a9e('0x1'));var rimraf=require(_0x0a9e('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x0a9e('0x3'));var moment=require('moment');var BPromise=require(_0x0a9e('0x4'));var Mustache=require(_0x0a9e('0x5'));var util=require(_0x0a9e('0x6'));var path=require(_0x0a9e('0x7'));var sox=require(_0x0a9e('0x8'));var csv=require('to-csv');var ejs=require(_0x0a9e('0x9'));var fs=require('fs');var _=require(_0x0a9e('0xa'));var squel=require(_0x0a9e('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x0a9e('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x0a9e('0xd'));var Redis=require(_0x0a9e('0xe'));var authService=require(_0x0a9e('0xf'));var qs=require(_0x0a9e('0x10'));var hardwareService=require(_0x0a9e('0x11'));var logger=require(_0x0a9e('0x12'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config[_0x0a9e('0x13')]=_[_0x0a9e('0x14')](config[_0x0a9e('0x13')],{'host':_0x0a9e('0x15'),'port':0x18eb});var socket=require(_0x0a9e('0x16'))(new Redis(config[_0x0a9e('0x13')]));require('./team.socket')[_0x0a9e('0x17')](socket);function respondWithStatusCode(_0x239b12,_0x2b4227){_0x2b4227=_0x2b4227||0xcc;return function(_0x281129){if(_0x281129){return _0x239b12[_0x0a9e('0x18')](_0x2b4227);}return _0x239b12[_0x0a9e('0x19')](_0x2b4227)['end']();};}function respondWithResult(_0x22dccb,_0x5d0880){_0x5d0880=_0x5d0880||0xc8;return function(_0x1985b6){if(_0x1985b6){return _0x22dccb['status'](_0x5d0880)[_0x0a9e('0x1a')](_0x1985b6);}};}function respondWithFilteredResult(_0x12066b,_0x48f32d){return function(_0x225616){if(_0x225616){var _0x5a0a06=_0x225616[_0x0a9e('0x1b')],_0x459eb1=_0x48f32d[_0x0a9e('0x1c')],_0x478723=_0x48f32d[_0x0a9e('0x1c')]+_0x48f32d[_0x0a9e('0x1d')],_0x106033;if(_0x478723>=_0x5a0a06){_0x478723=_0x5a0a06;_0x106033=0xc8;}else{_0x106033=0xce;}_0x12066b[_0x0a9e('0x19')](_0x106033);return _0x12066b[_0x0a9e('0x1e')](_0x0a9e('0x1f'),_0x459eb1+'-'+_0x478723+'/'+_0x5a0a06)[_0x0a9e('0x1a')](_0x225616);}return null;};}function patchUpdates(_0x105080){return function(_0x4bb1e3){try{jsonpatch[_0x0a9e('0x20')](_0x4bb1e3,_0x105080,!![]);}catch(_0x155cce){return BPromise['reject'](_0x155cce);}return _0x4bb1e3[_0x0a9e('0x21')]();};}function saveUpdates(_0x5a09ef,_0x588269){return function(_0x3a02e1){if(_0x3a02e1){return _0x3a02e1[_0x0a9e('0x22')](_0x5a09ef)[_0x0a9e('0x23')](function(_0x30bae6){return _0x30bae6;});}return null;};}function removeEntity(_0x4abc77,_0xfb6e48){return function(_0x2fb0e4){if(_0x2fb0e4){return _0x2fb0e4[_0x0a9e('0x24')]()[_0x0a9e('0x23')](function(){var _0x370d86=_0x2fb0e4[_0x0a9e('0x25')]({'plain':!![]});var _0x16b1ca='Teams';return db['UserProfileResource'][_0x0a9e('0x24')]({'where':{'type':_0x16b1ca,'resourceId':_0x370d86['id']}})[_0x0a9e('0x23')](function(){return _0x2fb0e4;});})[_0x0a9e('0x23')](function(){_0x4abc77[_0x0a9e('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x384319,_0x479bc4){return function(_0x45a1e7){if(!_0x45a1e7){_0x384319['sendStatus'](0x194);}return _0x45a1e7;};}function handleError(_0x1dc186,_0x34dc65){_0x34dc65=_0x34dc65||0x1f4;return function(_0x25fba9){logger[_0x0a9e('0x26')](_0x25fba9[_0x0a9e('0x27')]);if(_0x25fba9[_0x0a9e('0x28')]){delete _0x25fba9[_0x0a9e('0x28')];}_0x1dc186[_0x0a9e('0x19')](_0x34dc65)['send'](_0x25fba9);};}exports[_0x0a9e('0x29')]=function(_0x468813,_0x2b1f27){var _0x2ec755={},_0x5c877d={},_0x15b200={'count':0x0,'rows':[]};var _0x40e7a3=db[_0x0a9e('0x2a')][_0x0a9e('0x2b')];_0x5c877d[_0x0a9e('0x2c')]=_[_0x0a9e('0x2d')](_0x40e7a3);_0x5c877d[_0x0a9e('0x2e')]=_[_0x0a9e('0x2d')](_0x468813[_0x0a9e('0x2e')]);_0x5c877d['filters']=_[_0x0a9e('0x2f')](_0x5c877d['model'],_0x5c877d[_0x0a9e('0x2e')]);_0x2ec755[_0x0a9e('0x30')]=_[_0x0a9e('0x2f')](_0x5c877d[_0x0a9e('0x2c')],qs[_0x0a9e('0x31')](_0x468813['query'][_0x0a9e('0x31')]));_0x2ec755[_0x0a9e('0x30')]=_0x2ec755[_0x0a9e('0x30')][_0x0a9e('0x32')]?_0x2ec755[_0x0a9e('0x30')]:_0x5c877d[_0x0a9e('0x2c')];if(!_0x468813[_0x0a9e('0x2e')][_0x0a9e('0x33')]('nolimit')){_0x2ec755[_0x0a9e('0x1d')]=qs['limit'](_0x468813[_0x0a9e('0x2e')][_0x0a9e('0x1d')]);_0x2ec755[_0x0a9e('0x1c')]=qs[_0x0a9e('0x1c')](_0x468813['query'][_0x0a9e('0x1c')]);}_0x2ec755[_0x0a9e('0x34')]=qs[_0x0a9e('0x35')](_0x468813[_0x0a9e('0x2e')]['sort']);_0x2ec755['where']=qs[_0x0a9e('0x36')](_['pick'](_0x468813[_0x0a9e('0x2e')],_0x5c877d[_0x0a9e('0x36')]));if(_0x468813[_0x0a9e('0x2e')][_0x0a9e('0x37')]){_0x2ec755['where']=_[_0x0a9e('0x38')](_0x2ec755[_0x0a9e('0x39')],{'$or':_[_0x0a9e('0x3a')](_0x40e7a3,function(_0x533942){if(_0x533942[_0x0a9e('0x3b')][_0x0a9e('0x3c')]!==_0x0a9e('0x3d')){var _0x4c1c0e={};_0x4c1c0e[_0x533942['field']]={'$like':'%'+_0x468813[_0x0a9e('0x2e')][_0x0a9e('0x37')]+'%'};return _0x4c1c0e;}})});}_0x2ec755=_['merge']({},_0x2ec755,_0x468813[_0x0a9e('0x3e')]);var _0x419125={'where':_0x2ec755[_0x0a9e('0x39')]};return db[_0x0a9e('0x2a')]['count'](_0x419125)['then'](function(_0x15e37d){_0x15b200[_0x0a9e('0x1b')]=_0x15e37d;if(_0x468813['query'][_0x0a9e('0x3f')]){_0x2ec755[_0x0a9e('0x40')]=[{'all':!![]}];}return db[_0x0a9e('0x2a')]['findAll'](_0x2ec755);})[_0x0a9e('0x23')](function(_0x2cfea9){_0x15b200[_0x0a9e('0x41')]=_0x2cfea9;return _0x15b200;})[_0x0a9e('0x23')](respondWithFilteredResult(_0x2b1f27,_0x2ec755))[_0x0a9e('0x42')](handleError(_0x2b1f27,null));};exports[_0x0a9e('0x43')]=function(_0x2881b3,_0x45a9b8){var _0x23b089={'raw':![],'where':{'id':_0x2881b3[_0x0a9e('0x44')]['id']}},_0x3da2cd={};_0x3da2cd[_0x0a9e('0x2c')]=_[_0x0a9e('0x2d')](db[_0x0a9e('0x2a')][_0x0a9e('0x2b')]);_0x3da2cd['query']=_['keys'](_0x2881b3[_0x0a9e('0x2e')]);_0x3da2cd[_0x0a9e('0x36')]=_[_0x0a9e('0x2f')](_0x3da2cd[_0x0a9e('0x2c')],_0x3da2cd[_0x0a9e('0x2e')]);_0x23b089[_0x0a9e('0x30')]=_[_0x0a9e('0x2f')](_0x3da2cd[_0x0a9e('0x2c')],qs[_0x0a9e('0x31')](_0x2881b3[_0x0a9e('0x2e')][_0x0a9e('0x31')]));_0x23b089[_0x0a9e('0x30')]=_0x23b089['attributes'][_0x0a9e('0x32')]?_0x23b089[_0x0a9e('0x30')]:_0x3da2cd[_0x0a9e('0x2c')];if(_0x2881b3[_0x0a9e('0x2e')][_0x0a9e('0x3f')]){_0x23b089[_0x0a9e('0x40')]=[{'all':!![]}];}_0x23b089=_[_0x0a9e('0x38')]({},_0x23b089,_0x2881b3[_0x0a9e('0x3e')]);return db['Team'][_0x0a9e('0x45')](_0x23b089)['then'](handleEntityNotFound(_0x45a9b8,null))[_0x0a9e('0x23')](respondWithResult(_0x45a9b8,null))[_0x0a9e('0x42')](handleError(_0x45a9b8,null));};exports[_0x0a9e('0x46')]=function(_0x562fb4,_0x14bec2){return db[_0x0a9e('0x2a')][_0x0a9e('0x46')](_0x562fb4[_0x0a9e('0x47')],{})[_0x0a9e('0x23')](function(_0x37be73){var _0x45bf7f=_0x562fb4['user'][_0x0a9e('0x25')]({'plain':!![]});if(!_0x45bf7f)throw new Error(_0x0a9e('0x48'));if(_0x45bf7f[_0x0a9e('0x49')]===_0x0a9e('0x4a')){var _0x409789=_0x37be73[_0x0a9e('0x25')]({'plain':!![]});var _0x6054ee=_0x0a9e('0x4b');return db[_0x0a9e('0x4c')]['find']({'where':{'name':_0x6054ee,'userProfileId':_0x45bf7f[_0x0a9e('0x4d')]},'raw':!![]})[_0x0a9e('0x23')](function(_0x4f7240){if(_0x4f7240&&_0x4f7240['autoAssociation']===0x0){return db['UserProfileResource'][_0x0a9e('0x46')]({'name':_0x409789[_0x0a9e('0x28')],'resourceId':_0x409789['id'],'type':_0x4f7240[_0x0a9e('0x28')],'sectionId':_0x4f7240['id']},{})[_0x0a9e('0x23')](function(){return _0x37be73;});}else{return _0x37be73;}})[_0x0a9e('0x42')](function(_0x30decb){logger[_0x0a9e('0x26')](_0x0a9e('0x4e'),_0x30decb);throw _0x30decb;});}return _0x37be73;})['then'](respondWithResult(_0x14bec2,0xc9))['catch'](handleError(_0x14bec2,null));};exports['update']=function(_0x39d77d,_0x204173){if(_0x39d77d[_0x0a9e('0x47')]['id']){delete _0x39d77d['body']['id'];}return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x39d77d['params']['id']}})['then'](handleEntityNotFound(_0x204173,null))[_0x0a9e('0x23')](saveUpdates(_0x39d77d['body'],null))[_0x0a9e('0x23')](respondWithResult(_0x204173,null))['catch'](handleError(_0x204173,null));};exports[_0x0a9e('0x24')]=function(_0x3c20b2,_0x439340){return db['Team'][_0x0a9e('0x45')]({'where':{'id':_0x3c20b2[_0x0a9e('0x44')]['id']}})['then'](handleEntityNotFound(_0x439340,null))['then'](removeEntity(_0x439340,null))[_0x0a9e('0x42')](handleError(_0x439340,null));};exports[_0x0a9e('0x4f')]=function(_0x49c095,_0x145931,_0x5ce9ac){return db[_0x0a9e('0x2a')]['findOne']({'where':{'id':_0x49c095[_0x0a9e('0x44')]['id']}})['then'](handleEntityNotFound(_0x145931,null))['then'](function(_0x5df0ad){if(!_0x49c095[_0x0a9e('0x2e')]['channel']||!utils[_0x0a9e('0x50')](_0x49c095[_0x0a9e('0x2e')][_0x0a9e('0x51')])){throw new db[(_0x0a9e('0x52'))][(_0x0a9e('0x53'))](_0x0a9e('0x54'));}var _0xd10662={};var _0x28d814={};_0x28d814['model']=_[_0x0a9e('0x2d')](db[_[_0x0a9e('0x55')](_0x49c095[_0x0a9e('0x2e')][_0x0a9e('0x51')][_0x0a9e('0x56')]())+_0x0a9e('0x57')]['rawAttributes']);_0x28d814[_0x0a9e('0x2e')]=_[_0x0a9e('0x2d')](_0x49c095['query']);_0x28d814[_0x0a9e('0x36')]=_['intersection'](_0x28d814[_0x0a9e('0x2c')],_0x28d814['query']);_0xd10662['attributes']=_['intersection'](_0x28d814[_0x0a9e('0x2c')],qs['fields'](_0x49c095[_0x0a9e('0x2e')][_0x0a9e('0x31')]));_0xd10662[_0x0a9e('0x30')]=_0xd10662[_0x0a9e('0x30')][_0x0a9e('0x32')]?_0xd10662[_0x0a9e('0x30')]:_0x28d814['model'];_0xd10662[_0x0a9e('0x1d')]=qs['limit'](_0x49c095[_0x0a9e('0x2e')][_0x0a9e('0x1d')]);_0xd10662[_0x0a9e('0x1c')]=qs['offset'](_0x49c095[_0x0a9e('0x2e')][_0x0a9e('0x1c')]);_0xd10662[_0x0a9e('0x34')]=qs[_0x0a9e('0x35')](_0x49c095['query'][_0x0a9e('0x35')]);_0xd10662[_0x0a9e('0x39')]=qs['filters'](_[_0x0a9e('0x58')](_0x49c095[_0x0a9e('0x2e')],_0x28d814[_0x0a9e('0x36')]));_0xd10662=_[_0x0a9e('0x38')]({},_0xd10662,_0x49c095[_0x0a9e('0x3e')]);return _0x5df0ad['get'+_[_0x0a9e('0x55')](_0x49c095[_0x0a9e('0x2e')][_0x0a9e('0x51')]['toLowerCase']())+_0x0a9e('0x59')](_0xd10662);})['then'](respondWithResult(_0x145931,null))['catch'](handleError(_0x145931,null));};exports[_0x0a9e('0x5a')]=function(_0x4556c5,_0x9375fb,_0x19c995){return db[_0x0a9e('0x2a')][_0x0a9e('0x5b')]({'where':{'id':_0x4556c5[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](function(_0x2d7205){if(_0x2d7205){if(!_0x4556c5[_0x0a9e('0x47')][_0x0a9e('0x51')]||!utils[_0x0a9e('0x50')](_0x4556c5[_0x0a9e('0x47')][_0x0a9e('0x51')])){throw new db[(_0x0a9e('0x52'))][(_0x0a9e('0x53'))](_0x0a9e('0x54'));}return _0x2d7205[_0x0a9e('0x5c')+_['capitalize'](_0x4556c5[_0x0a9e('0x47')][_0x0a9e('0x51')][_0x0a9e('0x56')]())+'Queues'](_0x4556c5[_0x0a9e('0x47')][_0x0a9e('0x5d')]);}return null;})['then'](handleEntityNotFound(_0x9375fb,null))[_0x0a9e('0x23')](respondWithStatusCode(_0x9375fb,null))[_0x0a9e('0x42')](handleError(_0x9375fb,null));};exports[_0x0a9e('0x5e')]=function(_0x427946,_0x13b5c0,_0x4a43a8){return db['Team']['findOne']({'where':{'id':_0x427946[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](function(_0x1104ad){if(_0x1104ad){if(!_0x427946[_0x0a9e('0x2e')][_0x0a9e('0x51')]||!utils[_0x0a9e('0x50')](_0x427946[_0x0a9e('0x2e')][_0x0a9e('0x51')])){throw new db['Sequelize'][(_0x0a9e('0x53'))](_0x0a9e('0x54'));}return _0x1104ad[_0x0a9e('0x5f')+_['capitalize'](_0x427946[_0x0a9e('0x2e')]['channel'][_0x0a9e('0x56')]())+_0x0a9e('0x59')](_0x427946['query'][_0x0a9e('0x5d')]);}return null;})[_0x0a9e('0x23')](handleEntityNotFound(_0x13b5c0,null))[_0x0a9e('0x23')](respondWithStatusCode(_0x13b5c0,null))[_0x0a9e('0x42')](handleError(_0x13b5c0,null));};exports['addAgents']=function(_0x1d442c,_0x2e9552,_0x371533){return db[_0x0a9e('0x2a')]['find']({'where':{'id':_0x1d442c[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x2e9552,null))[_0x0a9e('0x23')](function(_0x361b21){if(_0x361b21){var _0x4abc8f=[_0x0a9e('0x60'),_0x0a9e('0x61'),_0x0a9e('0x62'),_0x0a9e('0x63'),_0x0a9e('0x64'),_0x0a9e('0x65')];return BPromise[_0x0a9e('0x66')](_0x4abc8f,function(_0x3df0e3){return _0x361b21[_0x0a9e('0x25')+_0x3df0e3+_0x0a9e('0x59')]({'attributes':['id',_0x0a9e('0x28')]})[_0x0a9e('0x23')](function(_0x25744a){return BPromise[_0x0a9e('0x66')](_0x25744a,function(_0x5b35db){return _0x5b35db[_0x0a9e('0x67')](_0x1d442c[_0x0a9e('0x47')][_0x0a9e('0x5d')])['then'](function(){if(_0x3df0e3===_0x0a9e('0x60')){return db[_0x0a9e('0x68')][_0x0a9e('0x69')]({'where':{'id':_0x1d442c[_0x0a9e('0x47')]['ids']},'attributes':['id','name',_0x0a9e('0x6a'),_0x0a9e('0x6b'),'interface'],'raw':!![]})[_0x0a9e('0x23')](function(_0x53a6a1){return BPromise[_0x0a9e('0x66')](_[_0x0a9e('0x37')](_0x53a6a1,{'online':0x1}),function(_0x5637a1){return db[_0x0a9e('0x6c')][_0x0a9e('0x6d')]({'membername':_0x5637a1[_0x0a9e('0x28')],'UserId':_0x5637a1['id'],'queue_name':_0x5b35db[_0x0a9e('0x28')],'VoiceQueueId':_0x5b35db['id'],'interface':_[_0x0a9e('0x6e')](_0x5637a1[_0x0a9e('0x6f')])?util[_0x0a9e('0x70')]('SIP/%s',_0x5637a1[_0x0a9e('0x28')]):_0x5637a1[_0x0a9e('0x6f')],'paused':_0x5637a1[_0x0a9e('0x6b')]||![],'penalty':0x0});});});}});});})[_0x0a9e('0x23')](function(){return _0x361b21;});})['then'](function(){return _0x361b21;});}})[_0x0a9e('0x23')](function(_0xf0db1){if(_0xf0db1){return _0xf0db1['addAgents'](_0x1d442c[_0x0a9e('0x47')]['ids'],_[_0x0a9e('0x71')](_0x1d442c[_0x0a9e('0x47')],[_0x0a9e('0x5d'),'id'])||{})[_0x0a9e('0x72')](function(_0x5af453){for(var _0x51ccd7=0x0;_0x51ccd7<_0x1d442c[_0x0a9e('0x47')][_0x0a9e('0x5d')][_0x0a9e('0x32')];_0x51ccd7+=0x1){socket['emit'](_0x0a9e('0x73'),{'UserId':_0x1d442c[_0x0a9e('0x47')]['ids'][_0x51ccd7],'TeamId':_0x1d442c['params']['id']});}return _0x5af453;});}})[_0x0a9e('0x23')](respondWithResult(_0x2e9552,null))['catch'](handleError(_0x2e9552,null));};exports['removeAgents']=function(_0x4dc6b3,_0x81d748,_0xf3601c){return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x4dc6b3[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x81d748,null))['then'](function(_0x5fd5db){if(_0x5fd5db){return BPromise['each']([_0x0a9e('0x74'),_0x0a9e('0x75'),_0x0a9e('0x76'),_0x0a9e('0x77'),'fax',_0x0a9e('0x78')],function(_0x32f761){return _0x5fd5db[_0x0a9e('0x25')+_['capitalize'](_0x32f761)+_0x0a9e('0x59')]({'attributes':['id',_0x0a9e('0x28')]})[_0x0a9e('0x23')](function(_0x22063c){return BPromise[_0x0a9e('0x66')](_0x22063c,function(_0x1910bf){return _0x1910bf[_0x0a9e('0x79')](_0x4dc6b3[_0x0a9e('0x2e')]['ids'])[_0x0a9e('0x23')](function(){if(_0x32f761===_0x0a9e('0x74')){return db['UserVoiceQueueRt'][_0x0a9e('0x24')]({'where':{'VoiceQueueId':_0x1910bf['id'],'UserId':_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')]}});}});});})['then'](function(){return _0x5fd5db;});})[_0x0a9e('0x23')](function(){return _0x5fd5db;});}})['then'](function(_0x8c8fbe){if(_0x8c8fbe){return _0x8c8fbe[_0x0a9e('0x79')](_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')])[_0x0a9e('0x23')](function(){if(_[_0x0a9e('0x7a')](_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')])){for(var _0x501050=0x0;_0x501050<_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')][_0x0a9e('0x32')];_0x501050+=0x1){socket[_0x0a9e('0x7b')](_0x0a9e('0x7c'),{'UserId':Number(_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')][_0x501050]),'TeamId':Number(_0x4dc6b3[_0x0a9e('0x44')]['id'])});}}else{socket[_0x0a9e('0x7b')](_0x0a9e('0x7c'),{'UserId':Number(_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')]),'TeamId':Number(_0x4dc6b3[_0x0a9e('0x44')]['id'])});}});}})['then'](respondWithStatusCode(_0x81d748,null))[_0x0a9e('0x42')](handleError(_0x81d748,null));};exports[_0x0a9e('0x7d')]=function(_0x12843d,_0x2ed526,_0xb0599a){var _0x5d9ddb={};var _0x3afc8c={};var _0x1756c7;var _0x5ce99d;return db[_0x0a9e('0x2a')]['findOne']({'where':{'id':_0x12843d[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x2ed526,null))[_0x0a9e('0x23')](function(_0xf8c6c4){if(_0xf8c6c4){_0x1756c7=_0xf8c6c4;_0x3afc8c['model']=_[_0x0a9e('0x2d')](db['User'][_0x0a9e('0x2b')]);_0x3afc8c[_0x0a9e('0x2e')]=_['keys'](_0x12843d[_0x0a9e('0x2e')]);_0x3afc8c[_0x0a9e('0x36')]=_[_0x0a9e('0x2f')](_0x3afc8c['model'],_0x3afc8c['query']);_0x5d9ddb[_0x0a9e('0x30')]=_[_0x0a9e('0x2f')](_0x3afc8c[_0x0a9e('0x2c')],qs[_0x0a9e('0x31')](_0x12843d[_0x0a9e('0x2e')][_0x0a9e('0x31')]));_0x5d9ddb[_0x0a9e('0x30')]=_0x5d9ddb[_0x0a9e('0x30')][_0x0a9e('0x32')]?_0x5d9ddb['attributes']:_0x3afc8c[_0x0a9e('0x2c')];_0x5d9ddb['order']=qs[_0x0a9e('0x35')](_0x12843d[_0x0a9e('0x2e')][_0x0a9e('0x35')]);_0x5d9ddb[_0x0a9e('0x39')]=qs[_0x0a9e('0x36')](_['pick'](_0x12843d[_0x0a9e('0x2e')],_0x3afc8c[_0x0a9e('0x36')]));if(_0x12843d[_0x0a9e('0x2e')][_0x0a9e('0x37')]){_0x5d9ddb[_0x0a9e('0x39')]=_['merge'](_0x5d9ddb['where'],{'$or':_[_0x0a9e('0x3a')](_0x5d9ddb['attributes'],function(_0x25eae0){var _0x4658df={};_0x4658df[_0x25eae0]={'$like':'%'+_0x12843d[_0x0a9e('0x2e')][_0x0a9e('0x37')]+'%'};return _0x4658df;})});}_0x5d9ddb=_[_0x0a9e('0x38')]({},_0x5d9ddb,_0x12843d[_0x0a9e('0x3e')]);return _0x1756c7['getAgents'](_0x5d9ddb);}})['then'](function(_0x1889ed){if(_0x1889ed){_0x5ce99d=_0x1889ed['length'];if(!_0x12843d[_0x0a9e('0x2e')]['hasOwnProperty'](_0x0a9e('0x7e'))){_0x5d9ddb['limit']=qs['limit'](_0x12843d[_0x0a9e('0x2e')][_0x0a9e('0x1d')]);_0x5d9ddb['offset']=qs[_0x0a9e('0x1c')](_0x12843d[_0x0a9e('0x2e')][_0x0a9e('0x1c')]);}return _0x1756c7[_0x0a9e('0x7d')](_0x5d9ddb);}})[_0x0a9e('0x23')](function(_0x5ab0bc){if(_0x5ab0bc){return _0x5ab0bc?{'count':_0x5ce99d,'rows':_0x5ab0bc}:null;}})['then'](respondWithResult(_0x2ed526,null))[_0x0a9e('0x42')](handleError(_0x2ed526,null));};
\ No newline at end of file
+var _0xa9e0=['addQueues','findOne','add','ids','removeQueues','remove','Voice','Chat','Mail','Sms','Fax','Openchannel','each','addAgents','User','findAll','online','voicePause','UserVoiceQueueRt','upsert','isNil','interface','format','omit','spread','userTeam:save','voice','chat','mail','sms','openchannel','removeAgents','isArray','emit','userTeam:remove','getAgents','nolimit','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','redis','defaults','localhost','socket.io-emitter','register','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','get','error','stack','name','index','Team','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','order','sort','filters','filter','merge','where','map','type','key','VIRTUAL','options','includeAll','include','rows','catch','show','params','find','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','Teams','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','getQueues','isValidChannel','channel','Sequelize','ValidationError','Unknown\x20channel','capitalize','toLowerCase','Queue','pick','Queues'];(function(_0x18bc00,_0x47ec22){var _0x43078c=function(_0x2844f9){while(--_0x2844f9){_0x18bc00['push'](_0x18bc00['shift']());}};_0x43078c(++_0x47ec22);}(_0xa9e0,0x123));var _0x0a9e=function(_0x934425,_0x5af72f){_0x934425=_0x934425-0x0;var _0x31d596=_0xa9e0[_0x934425];return _0x31d596;};'use strict';var pdf=require(_0x0a9e('0x0'));var emlformat=require(_0x0a9e('0x1'));var rimraf=require(_0x0a9e('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x0a9e('0x3'));var moment=require('moment');var BPromise=require(_0x0a9e('0x4'));var Mustache=require(_0x0a9e('0x5'));var util=require(_0x0a9e('0x6'));var path=require(_0x0a9e('0x7'));var sox=require(_0x0a9e('0x8'));var csv=require('to-csv');var ejs=require(_0x0a9e('0x9'));var fs=require('fs');var _=require(_0x0a9e('0xa'));var squel=require(_0x0a9e('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x0a9e('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x0a9e('0xd'));var Redis=require(_0x0a9e('0xe'));var authService=require(_0x0a9e('0xf'));var qs=require(_0x0a9e('0x10'));var hardwareService=require(_0x0a9e('0x11'));var logger=require(_0x0a9e('0x12'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config[_0x0a9e('0x13')]=_[_0x0a9e('0x14')](config[_0x0a9e('0x13')],{'host':_0x0a9e('0x15'),'port':0x18eb});var socket=require(_0x0a9e('0x16'))(new Redis(config[_0x0a9e('0x13')]));require('./team.socket')[_0x0a9e('0x17')](socket);function respondWithStatusCode(_0x239b12,_0x2b4227){_0x2b4227=_0x2b4227||0xcc;return function(_0x281129){if(_0x281129){return _0x239b12[_0x0a9e('0x18')](_0x2b4227);}return _0x239b12[_0x0a9e('0x19')](_0x2b4227)['end']();};}function respondWithResult(_0x22dccb,_0x5d0880){_0x5d0880=_0x5d0880||0xc8;return function(_0x1985b6){if(_0x1985b6){return _0x22dccb['status'](_0x5d0880)[_0x0a9e('0x1a')](_0x1985b6);}};}function respondWithFilteredResult(_0x12066b,_0x48f32d){return function(_0x225616){if(_0x225616){var _0x5a0a06=_0x225616[_0x0a9e('0x1b')],_0x459eb1=_0x48f32d[_0x0a9e('0x1c')],_0x478723=_0x48f32d[_0x0a9e('0x1c')]+_0x48f32d[_0x0a9e('0x1d')],_0x106033;if(_0x478723>=_0x5a0a06){_0x478723=_0x5a0a06;_0x106033=0xc8;}else{_0x106033=0xce;}_0x12066b[_0x0a9e('0x19')](_0x106033);return _0x12066b[_0x0a9e('0x1e')](_0x0a9e('0x1f'),_0x459eb1+'-'+_0x478723+'/'+_0x5a0a06)[_0x0a9e('0x1a')](_0x225616);}return null;};}function patchUpdates(_0x105080){return function(_0x4bb1e3){try{jsonpatch[_0x0a9e('0x20')](_0x4bb1e3,_0x105080,!![]);}catch(_0x155cce){return BPromise['reject'](_0x155cce);}return _0x4bb1e3[_0x0a9e('0x21')]();};}function saveUpdates(_0x5a09ef,_0x588269){return function(_0x3a02e1){if(_0x3a02e1){return _0x3a02e1[_0x0a9e('0x22')](_0x5a09ef)[_0x0a9e('0x23')](function(_0x30bae6){return _0x30bae6;});}return null;};}function removeEntity(_0x4abc77,_0xfb6e48){return function(_0x2fb0e4){if(_0x2fb0e4){return _0x2fb0e4[_0x0a9e('0x24')]()[_0x0a9e('0x23')](function(){var _0x370d86=_0x2fb0e4[_0x0a9e('0x25')]({'plain':!![]});var _0x16b1ca='Teams';return db['UserProfileResource'][_0x0a9e('0x24')]({'where':{'type':_0x16b1ca,'resourceId':_0x370d86['id']}})[_0x0a9e('0x23')](function(){return _0x2fb0e4;});})[_0x0a9e('0x23')](function(){_0x4abc77[_0x0a9e('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x384319,_0x479bc4){return function(_0x45a1e7){if(!_0x45a1e7){_0x384319['sendStatus'](0x194);}return _0x45a1e7;};}function handleError(_0x1dc186,_0x34dc65){_0x34dc65=_0x34dc65||0x1f4;return function(_0x25fba9){logger[_0x0a9e('0x26')](_0x25fba9[_0x0a9e('0x27')]);if(_0x25fba9[_0x0a9e('0x28')]){delete _0x25fba9[_0x0a9e('0x28')];}_0x1dc186[_0x0a9e('0x19')](_0x34dc65)['send'](_0x25fba9);};}exports[_0x0a9e('0x29')]=function(_0x468813,_0x2b1f27){var _0x2ec755={},_0x5c877d={},_0x15b200={'count':0x0,'rows':[]};var _0x40e7a3=db[_0x0a9e('0x2a')][_0x0a9e('0x2b')];_0x5c877d[_0x0a9e('0x2c')]=_[_0x0a9e('0x2d')](_0x40e7a3);_0x5c877d[_0x0a9e('0x2e')]=_[_0x0a9e('0x2d')](_0x468813[_0x0a9e('0x2e')]);_0x5c877d['filters']=_[_0x0a9e('0x2f')](_0x5c877d['model'],_0x5c877d[_0x0a9e('0x2e')]);_0x2ec755[_0x0a9e('0x30')]=_[_0x0a9e('0x2f')](_0x5c877d[_0x0a9e('0x2c')],qs[_0x0a9e('0x31')](_0x468813['query'][_0x0a9e('0x31')]));_0x2ec755[_0x0a9e('0x30')]=_0x2ec755[_0x0a9e('0x30')][_0x0a9e('0x32')]?_0x2ec755[_0x0a9e('0x30')]:_0x5c877d[_0x0a9e('0x2c')];if(!_0x468813[_0x0a9e('0x2e')][_0x0a9e('0x33')]('nolimit')){_0x2ec755[_0x0a9e('0x1d')]=qs['limit'](_0x468813[_0x0a9e('0x2e')][_0x0a9e('0x1d')]);_0x2ec755[_0x0a9e('0x1c')]=qs[_0x0a9e('0x1c')](_0x468813['query'][_0x0a9e('0x1c')]);}_0x2ec755[_0x0a9e('0x34')]=qs[_0x0a9e('0x35')](_0x468813[_0x0a9e('0x2e')]['sort']);_0x2ec755['where']=qs[_0x0a9e('0x36')](_['pick'](_0x468813[_0x0a9e('0x2e')],_0x5c877d[_0x0a9e('0x36')]));if(_0x468813[_0x0a9e('0x2e')][_0x0a9e('0x37')]){_0x2ec755['where']=_[_0x0a9e('0x38')](_0x2ec755[_0x0a9e('0x39')],{'$or':_[_0x0a9e('0x3a')](_0x40e7a3,function(_0x533942){if(_0x533942[_0x0a9e('0x3b')][_0x0a9e('0x3c')]!==_0x0a9e('0x3d')){var _0x4c1c0e={};_0x4c1c0e[_0x533942['field']]={'$like':'%'+_0x468813[_0x0a9e('0x2e')][_0x0a9e('0x37')]+'%'};return _0x4c1c0e;}})});}_0x2ec755=_['merge']({},_0x2ec755,_0x468813[_0x0a9e('0x3e')]);var _0x419125={'where':_0x2ec755[_0x0a9e('0x39')]};return db[_0x0a9e('0x2a')]['count'](_0x419125)['then'](function(_0x15e37d){_0x15b200[_0x0a9e('0x1b')]=_0x15e37d;if(_0x468813['query'][_0x0a9e('0x3f')]){_0x2ec755[_0x0a9e('0x40')]=[{'all':!![]}];}return db[_0x0a9e('0x2a')]['findAll'](_0x2ec755);})[_0x0a9e('0x23')](function(_0x2cfea9){_0x15b200[_0x0a9e('0x41')]=_0x2cfea9;return _0x15b200;})[_0x0a9e('0x23')](respondWithFilteredResult(_0x2b1f27,_0x2ec755))[_0x0a9e('0x42')](handleError(_0x2b1f27,null));};exports[_0x0a9e('0x43')]=function(_0x2881b3,_0x45a9b8){var _0x23b089={'raw':![],'where':{'id':_0x2881b3[_0x0a9e('0x44')]['id']}},_0x3da2cd={};_0x3da2cd[_0x0a9e('0x2c')]=_[_0x0a9e('0x2d')](db[_0x0a9e('0x2a')][_0x0a9e('0x2b')]);_0x3da2cd['query']=_['keys'](_0x2881b3[_0x0a9e('0x2e')]);_0x3da2cd[_0x0a9e('0x36')]=_[_0x0a9e('0x2f')](_0x3da2cd[_0x0a9e('0x2c')],_0x3da2cd[_0x0a9e('0x2e')]);_0x23b089[_0x0a9e('0x30')]=_[_0x0a9e('0x2f')](_0x3da2cd[_0x0a9e('0x2c')],qs[_0x0a9e('0x31')](_0x2881b3[_0x0a9e('0x2e')][_0x0a9e('0x31')]));_0x23b089[_0x0a9e('0x30')]=_0x23b089['attributes'][_0x0a9e('0x32')]?_0x23b089[_0x0a9e('0x30')]:_0x3da2cd[_0x0a9e('0x2c')];if(_0x2881b3[_0x0a9e('0x2e')][_0x0a9e('0x3f')]){_0x23b089[_0x0a9e('0x40')]=[{'all':!![]}];}_0x23b089=_[_0x0a9e('0x38')]({},_0x23b089,_0x2881b3[_0x0a9e('0x3e')]);return db['Team'][_0x0a9e('0x45')](_0x23b089)['then'](handleEntityNotFound(_0x45a9b8,null))[_0x0a9e('0x23')](respondWithResult(_0x45a9b8,null))[_0x0a9e('0x42')](handleError(_0x45a9b8,null));};exports[_0x0a9e('0x46')]=function(_0x562fb4,_0x14bec2){return db[_0x0a9e('0x2a')][_0x0a9e('0x46')](_0x562fb4[_0x0a9e('0x47')],{})[_0x0a9e('0x23')](function(_0x37be73){var _0x45bf7f=_0x562fb4['user'][_0x0a9e('0x25')]({'plain':!![]});if(!_0x45bf7f)throw new Error(_0x0a9e('0x48'));if(_0x45bf7f[_0x0a9e('0x49')]===_0x0a9e('0x4a')){var _0x409789=_0x37be73[_0x0a9e('0x25')]({'plain':!![]});var _0x6054ee=_0x0a9e('0x4b');return db[_0x0a9e('0x4c')]['find']({'where':{'name':_0x6054ee,'userProfileId':_0x45bf7f[_0x0a9e('0x4d')]},'raw':!![]})[_0x0a9e('0x23')](function(_0x4f7240){if(_0x4f7240&&_0x4f7240['autoAssociation']===0x0){return db['UserProfileResource'][_0x0a9e('0x46')]({'name':_0x409789[_0x0a9e('0x28')],'resourceId':_0x409789['id'],'type':_0x4f7240[_0x0a9e('0x28')],'sectionId':_0x4f7240['id']},{})[_0x0a9e('0x23')](function(){return _0x37be73;});}else{return _0x37be73;}})[_0x0a9e('0x42')](function(_0x30decb){logger[_0x0a9e('0x26')](_0x0a9e('0x4e'),_0x30decb);throw _0x30decb;});}return _0x37be73;})['then'](respondWithResult(_0x14bec2,0xc9))['catch'](handleError(_0x14bec2,null));};exports['update']=function(_0x39d77d,_0x204173){if(_0x39d77d[_0x0a9e('0x47')]['id']){delete _0x39d77d['body']['id'];}return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x39d77d['params']['id']}})['then'](handleEntityNotFound(_0x204173,null))[_0x0a9e('0x23')](saveUpdates(_0x39d77d['body'],null))[_0x0a9e('0x23')](respondWithResult(_0x204173,null))['catch'](handleError(_0x204173,null));};exports[_0x0a9e('0x24')]=function(_0x3c20b2,_0x439340){return db['Team'][_0x0a9e('0x45')]({'where':{'id':_0x3c20b2[_0x0a9e('0x44')]['id']}})['then'](handleEntityNotFound(_0x439340,null))['then'](removeEntity(_0x439340,null))[_0x0a9e('0x42')](handleError(_0x439340,null));};exports[_0x0a9e('0x4f')]=function(_0x49c095,_0x145931,_0x5ce9ac){return db[_0x0a9e('0x2a')]['findOne']({'where':{'id':_0x49c095[_0x0a9e('0x44')]['id']}})['then'](handleEntityNotFound(_0x145931,null))['then'](function(_0x5df0ad){if(!_0x49c095[_0x0a9e('0x2e')]['channel']||!utils[_0x0a9e('0x50')](_0x49c095[_0x0a9e('0x2e')][_0x0a9e('0x51')])){throw new db[(_0x0a9e('0x52'))][(_0x0a9e('0x53'))](_0x0a9e('0x54'));}var _0xd10662={};var _0x28d814={};_0x28d814['model']=_[_0x0a9e('0x2d')](db[_[_0x0a9e('0x55')](_0x49c095[_0x0a9e('0x2e')][_0x0a9e('0x51')][_0x0a9e('0x56')]())+_0x0a9e('0x57')]['rawAttributes']);_0x28d814[_0x0a9e('0x2e')]=_[_0x0a9e('0x2d')](_0x49c095['query']);_0x28d814[_0x0a9e('0x36')]=_['intersection'](_0x28d814[_0x0a9e('0x2c')],_0x28d814['query']);_0xd10662['attributes']=_['intersection'](_0x28d814[_0x0a9e('0x2c')],qs['fields'](_0x49c095[_0x0a9e('0x2e')][_0x0a9e('0x31')]));_0xd10662[_0x0a9e('0x30')]=_0xd10662[_0x0a9e('0x30')][_0x0a9e('0x32')]?_0xd10662[_0x0a9e('0x30')]:_0x28d814['model'];_0xd10662[_0x0a9e('0x1d')]=qs['limit'](_0x49c095[_0x0a9e('0x2e')][_0x0a9e('0x1d')]);_0xd10662[_0x0a9e('0x1c')]=qs['offset'](_0x49c095[_0x0a9e('0x2e')][_0x0a9e('0x1c')]);_0xd10662[_0x0a9e('0x34')]=qs[_0x0a9e('0x35')](_0x49c095['query'][_0x0a9e('0x35')]);_0xd10662[_0x0a9e('0x39')]=qs['filters'](_[_0x0a9e('0x58')](_0x49c095[_0x0a9e('0x2e')],_0x28d814[_0x0a9e('0x36')]));_0xd10662=_[_0x0a9e('0x38')]({},_0xd10662,_0x49c095[_0x0a9e('0x3e')]);return _0x5df0ad['get'+_[_0x0a9e('0x55')](_0x49c095[_0x0a9e('0x2e')][_0x0a9e('0x51')]['toLowerCase']())+_0x0a9e('0x59')](_0xd10662);})['then'](respondWithResult(_0x145931,null))['catch'](handleError(_0x145931,null));};exports[_0x0a9e('0x5a')]=function(_0x4556c5,_0x9375fb,_0x19c995){return db[_0x0a9e('0x2a')][_0x0a9e('0x5b')]({'where':{'id':_0x4556c5[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](function(_0x2d7205){if(_0x2d7205){if(!_0x4556c5[_0x0a9e('0x47')][_0x0a9e('0x51')]||!utils[_0x0a9e('0x50')](_0x4556c5[_0x0a9e('0x47')][_0x0a9e('0x51')])){throw new db[(_0x0a9e('0x52'))][(_0x0a9e('0x53'))](_0x0a9e('0x54'));}return _0x2d7205[_0x0a9e('0x5c')+_['capitalize'](_0x4556c5[_0x0a9e('0x47')][_0x0a9e('0x51')][_0x0a9e('0x56')]())+'Queues'](_0x4556c5[_0x0a9e('0x47')][_0x0a9e('0x5d')]);}return null;})['then'](handleEntityNotFound(_0x9375fb,null))[_0x0a9e('0x23')](respondWithStatusCode(_0x9375fb,null))[_0x0a9e('0x42')](handleError(_0x9375fb,null));};exports[_0x0a9e('0x5e')]=function(_0x427946,_0x13b5c0,_0x4a43a8){return db['Team']['findOne']({'where':{'id':_0x427946[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](function(_0x1104ad){if(_0x1104ad){if(!_0x427946[_0x0a9e('0x2e')][_0x0a9e('0x51')]||!utils[_0x0a9e('0x50')](_0x427946[_0x0a9e('0x2e')][_0x0a9e('0x51')])){throw new db['Sequelize'][(_0x0a9e('0x53'))](_0x0a9e('0x54'));}return _0x1104ad[_0x0a9e('0x5f')+_['capitalize'](_0x427946[_0x0a9e('0x2e')]['channel'][_0x0a9e('0x56')]())+_0x0a9e('0x59')](_0x427946['query'][_0x0a9e('0x5d')]);}return null;})[_0x0a9e('0x23')](handleEntityNotFound(_0x13b5c0,null))[_0x0a9e('0x23')](respondWithStatusCode(_0x13b5c0,null))[_0x0a9e('0x42')](handleError(_0x13b5c0,null));};exports['addAgents']=function(_0x1d442c,_0x2e9552,_0x371533){return db[_0x0a9e('0x2a')]['find']({'where':{'id':_0x1d442c[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x2e9552,null))[_0x0a9e('0x23')](function(_0x361b21){if(_0x361b21){var _0x4abc8f=[_0x0a9e('0x60'),_0x0a9e('0x61'),_0x0a9e('0x62'),_0x0a9e('0x63'),_0x0a9e('0x64'),_0x0a9e('0x65')];return BPromise[_0x0a9e('0x66')](_0x4abc8f,function(_0x3df0e3){return _0x361b21[_0x0a9e('0x25')+_0x3df0e3+_0x0a9e('0x59')]({'attributes':['id',_0x0a9e('0x28')]})[_0x0a9e('0x23')](function(_0x25744a){return BPromise[_0x0a9e('0x66')](_0x25744a,function(_0x5b35db){return _0x5b35db[_0x0a9e('0x67')](_0x1d442c[_0x0a9e('0x47')][_0x0a9e('0x5d')])['then'](function(){if(_0x3df0e3===_0x0a9e('0x60')){return db[_0x0a9e('0x68')][_0x0a9e('0x69')]({'where':{'id':_0x1d442c[_0x0a9e('0x47')]['ids']},'attributes':['id','name',_0x0a9e('0x6a'),_0x0a9e('0x6b'),'interface'],'raw':!![]})[_0x0a9e('0x23')](function(_0x53a6a1){return BPromise[_0x0a9e('0x66')](_[_0x0a9e('0x37')](_0x53a6a1,{'online':0x1}),function(_0x5637a1){return db[_0x0a9e('0x6c')][_0x0a9e('0x6d')]({'membername':_0x5637a1[_0x0a9e('0x28')],'UserId':_0x5637a1['id'],'queue_name':_0x5b35db[_0x0a9e('0x28')],'VoiceQueueId':_0x5b35db['id'],'interface':_[_0x0a9e('0x6e')](_0x5637a1[_0x0a9e('0x6f')])?util[_0x0a9e('0x70')]('SIP/%s',_0x5637a1[_0x0a9e('0x28')]):_0x5637a1[_0x0a9e('0x6f')],'paused':_0x5637a1[_0x0a9e('0x6b')]||![],'penalty':0x0});});});}});});})[_0x0a9e('0x23')](function(){return _0x361b21;});})['then'](function(){return _0x361b21;});}})[_0x0a9e('0x23')](function(_0xf0db1){if(_0xf0db1){return _0xf0db1['addAgents'](_0x1d442c[_0x0a9e('0x47')]['ids'],_[_0x0a9e('0x71')](_0x1d442c[_0x0a9e('0x47')],[_0x0a9e('0x5d'),'id'])||{})[_0x0a9e('0x72')](function(_0x5af453){for(var _0x51ccd7=0x0;_0x51ccd7<_0x1d442c[_0x0a9e('0x47')][_0x0a9e('0x5d')][_0x0a9e('0x32')];_0x51ccd7+=0x1){socket['emit'](_0x0a9e('0x73'),{'UserId':_0x1d442c[_0x0a9e('0x47')]['ids'][_0x51ccd7],'TeamId':_0x1d442c['params']['id']});}return _0x5af453;});}})[_0x0a9e('0x23')](respondWithResult(_0x2e9552,null))['catch'](handleError(_0x2e9552,null));};exports['removeAgents']=function(_0x4dc6b3,_0x81d748,_0xf3601c){return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x4dc6b3[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x81d748,null))['then'](function(_0x5fd5db){if(_0x5fd5db){return BPromise['each']([_0x0a9e('0x74'),_0x0a9e('0x75'),_0x0a9e('0x76'),_0x0a9e('0x77'),'fax',_0x0a9e('0x78')],function(_0x32f761){return _0x5fd5db[_0x0a9e('0x25')+_['capitalize'](_0x32f761)+_0x0a9e('0x59')]({'attributes':['id',_0x0a9e('0x28')]})[_0x0a9e('0x23')](function(_0x22063c){return BPromise[_0x0a9e('0x66')](_0x22063c,function(_0x1910bf){return _0x1910bf[_0x0a9e('0x79')](_0x4dc6b3[_0x0a9e('0x2e')]['ids'])[_0x0a9e('0x23')](function(){if(_0x32f761===_0x0a9e('0x74')){return db['UserVoiceQueueRt'][_0x0a9e('0x24')]({'where':{'VoiceQueueId':_0x1910bf['id'],'UserId':_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')]}});}});});})['then'](function(){return _0x5fd5db;});})[_0x0a9e('0x23')](function(){return _0x5fd5db;});}})['then'](function(_0x8c8fbe){if(_0x8c8fbe){return _0x8c8fbe[_0x0a9e('0x79')](_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')])[_0x0a9e('0x23')](function(){if(_[_0x0a9e('0x7a')](_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')])){for(var _0x501050=0x0;_0x501050<_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')][_0x0a9e('0x32')];_0x501050+=0x1){socket[_0x0a9e('0x7b')](_0x0a9e('0x7c'),{'UserId':Number(_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')][_0x501050]),'TeamId':Number(_0x4dc6b3[_0x0a9e('0x44')]['id'])});}}else{socket[_0x0a9e('0x7b')](_0x0a9e('0x7c'),{'UserId':Number(_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')]),'TeamId':Number(_0x4dc6b3[_0x0a9e('0x44')]['id'])});}});}})['then'](respondWithStatusCode(_0x81d748,null))[_0x0a9e('0x42')](handleError(_0x81d748,null));};exports[_0x0a9e('0x7d')]=function(_0x12843d,_0x2ed526,_0xb0599a){var _0x5d9ddb={};var _0x3afc8c={};var _0x1756c7;var _0x5ce99d;return db[_0x0a9e('0x2a')]['findOne']({'where':{'id':_0x12843d[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x2ed526,null))[_0x0a9e('0x23')](function(_0xf8c6c4){if(_0xf8c6c4){_0x1756c7=_0xf8c6c4;_0x3afc8c['model']=_[_0x0a9e('0x2d')](db['User'][_0x0a9e('0x2b')]);_0x3afc8c[_0x0a9e('0x2e')]=_['keys'](_0x12843d[_0x0a9e('0x2e')]);_0x3afc8c[_0x0a9e('0x36')]=_[_0x0a9e('0x2f')](_0x3afc8c['model'],_0x3afc8c['query']);_0x5d9ddb[_0x0a9e('0x30')]=_[_0x0a9e('0x2f')](_0x3afc8c[_0x0a9e('0x2c')],qs[_0x0a9e('0x31')](_0x12843d[_0x0a9e('0x2e')][_0x0a9e('0x31')]));_0x5d9ddb[_0x0a9e('0x30')]=_0x5d9ddb[_0x0a9e('0x30')][_0x0a9e('0x32')]?_0x5d9ddb['attributes']:_0x3afc8c[_0x0a9e('0x2c')];_0x5d9ddb['order']=qs[_0x0a9e('0x35')](_0x12843d[_0x0a9e('0x2e')][_0x0a9e('0x35')]);_0x5d9ddb[_0x0a9e('0x39')]=qs[_0x0a9e('0x36')](_['pick'](_0x12843d[_0x0a9e('0x2e')],_0x3afc8c[_0x0a9e('0x36')]));if(_0x12843d[_0x0a9e('0x2e')][_0x0a9e('0x37')]){_0x5d9ddb[_0x0a9e('0x39')]=_['merge'](_0x5d9ddb['where'],{'$or':_[_0x0a9e('0x3a')](_0x5d9ddb['attributes'],function(_0x25eae0){var _0x4658df={};_0x4658df[_0x25eae0]={'$like':'%'+_0x12843d[_0x0a9e('0x2e')][_0x0a9e('0x37')]+'%'};return _0x4658df;})});}_0x5d9ddb=_[_0x0a9e('0x38')]({},_0x5d9ddb,_0x12843d[_0x0a9e('0x3e')]);return _0x1756c7['getAgents'](_0x5d9ddb);}})['then'](function(_0x1889ed){if(_0x1889ed){_0x5ce99d=_0x1889ed['length'];if(!_0x12843d[_0x0a9e('0x2e')]['hasOwnProperty'](_0x0a9e('0x7e'))){_0x5d9ddb['limit']=qs['limit'](_0x12843d[_0x0a9e('0x2e')][_0x0a9e('0x1d')]);_0x5d9ddb['offset']=qs[_0x0a9e('0x1c')](_0x12843d[_0x0a9e('0x2e')][_0x0a9e('0x1c')]);}return _0x1756c7[_0x0a9e('0x7d')](_0x5d9ddb);}})[_0x0a9e('0x23')](function(_0x5ab0bc){if(_0x5ab0bc){return _0x5ab0bc?{'count':_0x5ce99d,'rows':_0x5ab0bc}:null;}})['then'](respondWithResult(_0x2ed526,null))[_0x0a9e('0x42')](handleError(_0x2ed526,null));};
\ No newline at end of file
index 3111f78..e2f5d8b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7046=['events','../../mysqldb','Team','setMaxListeners','update','remove','emit','hasOwnProperty','exports'];(function(_0x4542e1,_0x49de90){var _0x4591cf=function(_0x2ae33c){while(--_0x2ae33c){_0x4542e1['push'](_0x4542e1['shift']());}};_0x4591cf(++_0x49de90);}(_0x7046,0x144));var _0x6704=function(_0x5d6456,_0x58ecc7){_0x5d6456=_0x5d6456-0x0;var _0x4d66c1=_0x7046[_0x5d6456];return _0x4d66c1;};'use strict';var EventEmitter=require(_0x6704('0x0'));var Team=require(_0x6704('0x1'))['db'][_0x6704('0x2')];var TeamEvents=new EventEmitter();TeamEvents[_0x6704('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x6704('0x4'),'afterDestroy':_0x6704('0x5')};function emitEvent(_0x2899c5){return function(_0x5258e7,_0x1e9b2a,_0x35bcc6){TeamEvents[_0x6704('0x6')](_0x2899c5+':'+_0x5258e7['id'],_0x5258e7);TeamEvents[_0x6704('0x6')](_0x2899c5,_0x5258e7);_0x35bcc6(null);};}for(var e in events){if(events[_0x6704('0x7')](e)){var event=events[e];Team['hook'](e,emitEvent(event));}}module[_0x6704('0x8')]=TeamEvents;
\ No newline at end of file
+var _0x57ca=['hasOwnProperty','hook','exports','../../mysqldb','Team','save','update','remove','emit'];(function(_0x4d72a6,_0x2279a0){var _0x34997b=function(_0x17adbe){while(--_0x17adbe){_0x4d72a6['push'](_0x4d72a6['shift']());}};_0x34997b(++_0x2279a0);}(_0x57ca,0x108));var _0xa57c=function(_0x463744,_0x30b9b6){_0x463744=_0x463744-0x0;var _0x5e9772=_0x57ca[_0x463744];return _0x5e9772;};'use strict';var EventEmitter=require('events');var Team=require(_0xa57c('0x0'))['db'][_0xa57c('0x1')];var TeamEvents=new EventEmitter();TeamEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xa57c('0x2'),'afterUpdate':_0xa57c('0x3'),'afterDestroy':_0xa57c('0x4')};function emitEvent(_0x15e330){return function(_0x1da469,_0x48be2d,_0x40ba22){TeamEvents[_0xa57c('0x5')](_0x15e330+':'+_0x1da469['id'],_0x1da469);TeamEvents[_0xa57c('0x5')](_0x15e330,_0x1da469);_0x40ba22(null);};}for(var e in events){if(events[_0xa57c('0x6')](e)){var event=events[e];Team[_0xa57c('0x7')](e,emitEvent(event));}}module[_0xa57c('0x8')]=TeamEvents;
\ No newline at end of file
index 59ee51d..ca11ab8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1608=['util','moment','bluebird','request-promise','path','rimraf','../../config/environment','./team.attributes','exports','define','teams','lodash'];(function(_0x4c05b1,_0x1c7660){var _0x206ae9=function(_0x3e3642){while(--_0x3e3642){_0x4c05b1['push'](_0x4c05b1['shift']());}};_0x206ae9(++_0x1c7660);}(_0x1608,0x1d3));var _0x8160=function(_0x1b116e,_0x1f698b){_0x1b116e=_0x1b116e-0x0;var _0x42bfae=_0x1608[_0x1b116e];return _0x42bfae;};'use strict';var _=require(_0x8160('0x0'));var util=require(_0x8160('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x8160('0x2'));var BPromise=require(_0x8160('0x3'));var rp=require(_0x8160('0x4'));var fs=require('fs');var path=require(_0x8160('0x5'));var rimraf=require(_0x8160('0x6'));var config=require(_0x8160('0x7'));var attributes=require(_0x8160('0x8'));module[_0x8160('0x9')]=function(_0x298fe8,_0x4fa8be){return _0x298fe8[_0x8160('0xa')]('Team',attributes,{'tableName':_0x8160('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x018c=['moment','bluebird','request-promise','path','rimraf','../../config/environment','./team.attributes','exports','Team','teams','../../config/logger'];(function(_0x2a1dd1,_0x3794df){var _0x132c45=function(_0x42b666){while(--_0x42b666){_0x2a1dd1['push'](_0x2a1dd1['shift']());}};_0x132c45(++_0x3794df);}(_0x018c,0xaf));var _0xc018=function(_0x8f01df,_0x51a8b0){_0x8f01df=_0x8f01df-0x0;var _0x312783=_0x018c[_0x8f01df];return _0x312783;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xc018('0x0'))('api');var moment=require(_0xc018('0x1'));var BPromise=require(_0xc018('0x2'));var rp=require(_0xc018('0x3'));var fs=require('fs');var path=require(_0xc018('0x4'));var rimraf=require(_0xc018('0x5'));var config=require(_0xc018('0x6'));var attributes=require(_0xc018('0x7'));module[_0xc018('0x8')]=function(_0x23eaaa,_0x812afd){return _0x23eaaa['define'](_0xc018('0x9'),attributes,{'tableName':_0xc018('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 0d7aa7c..9fff7ba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb1d9=['./team.socket','register','request','info','request\x20sent','Team,\x20%s,\x20%s,\x20%s','stringify','error','Team,\x20%s,\x20%s','message','result','lodash','util','moment','bluebird','ioredis','../../mysqldb','rpc','../../config/environment','jayson/promise','client','http','redis','localhost','socket.io-emitter'];(function(_0x2bbfb9,_0x5cc756){var _0x2bd33f=function(_0x23388f){while(--_0x23388f){_0x2bbfb9['push'](_0x2bbfb9['shift']());}};_0x2bd33f(++_0x5cc756);}(_0xb1d9,0x1cd));var _0x9b1d=function(_0x24ade1,_0x1eedd1){_0x24ade1=_0x24ade1-0x0;var _0x3cd702=_0xb1d9[_0x24ade1];return _0x3cd702;};'use strict';var _=require(_0x9b1d('0x0'));var util=require(_0x9b1d('0x1'));var moment=require(_0x9b1d('0x2'));var BPromise=require(_0x9b1d('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x9b1d('0x4'));var db=require(_0x9b1d('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x9b1d('0x6'));var config=require(_0x9b1d('0x7'));var jayson=require(_0x9b1d('0x8'));var client=jayson[_0x9b1d('0x9')][_0x9b1d('0xa')]({'port':0x232a});config['redis']=_['defaults'](config[_0x9b1d('0xb')],{'host':_0x9b1d('0xc'),'port':0x18eb});var socket=require(_0x9b1d('0xd'))(new Redis(config[_0x9b1d('0xb')]));require(_0x9b1d('0xe'))[_0x9b1d('0xf')](socket);function respondWithRpcPromise(_0x22e774,_0x3fabd4,_0x2386a3){return new BPromise(function(_0x446a19,_0x3edbe0){return client[_0x9b1d('0x10')](_0x22e774,_0x2386a3)['then'](function(_0x47ef89){logger[_0x9b1d('0x11')]('Team,\x20%s,\x20%s',_0x3fabd4,_0x9b1d('0x12'));logger['debug'](_0x9b1d('0x13'),_0x3fabd4,_0x9b1d('0x12'),JSON[_0x9b1d('0x14')](_0x47ef89));if(_0x47ef89[_0x9b1d('0x15')]){if(_0x47ef89[_0x9b1d('0x15')]['code']===0x1f4){logger[_0x9b1d('0x15')](_0x9b1d('0x16'),_0x3fabd4,_0x47ef89['error'][_0x9b1d('0x17')]);return _0x3edbe0(_0x47ef89[_0x9b1d('0x15')]['message']);}logger['error'](_0x9b1d('0x16'),_0x3fabd4,_0x47ef89['error'][_0x9b1d('0x17')]);return _0x446a19(_0x47ef89[_0x9b1d('0x15')]['message']);}else{logger[_0x9b1d('0x11')]('Team,\x20%s,\x20%s',_0x3fabd4,_0x9b1d('0x12'));_0x446a19(_0x47ef89[_0x9b1d('0x18')][_0x9b1d('0x17')]);}})['catch'](function(_0x37bcc9){logger[_0x9b1d('0x15')](_0x9b1d('0x16'),_0x3fabd4,_0x37bcc9);_0x3edbe0(_0x37bcc9);});});}
\ No newline at end of file
+var _0x58af=['lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','http','localhost','socket.io-emitter','./team.socket','register','then','info','request\x20sent','debug','Team,\x20%s,\x20%s,\x20%s','error','Team,\x20%s,\x20%s','message','result','catch'];(function(_0x5bfda7,_0x1692e4){var _0x1e4757=function(_0x58ad24){while(--_0x58ad24){_0x5bfda7['push'](_0x5bfda7['shift']());}};_0x1e4757(++_0x1692e4);}(_0x58af,0x12b));var _0xf58a=function(_0x397e5f,_0x454c8f){_0x397e5f=_0x397e5f-0x0;var _0x5302b8=_0x58af[_0x397e5f];return _0x5302b8;};'use strict';var _=require(_0xf58a('0x0'));var util=require(_0xf58a('0x1'));var moment=require(_0xf58a('0x2'));var BPromise=require('bluebird');var rs=require(_0xf58a('0x3'));var fs=require('fs');var Redis=require(_0xf58a('0x4'));var db=require(_0xf58a('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xf58a('0x6'))(_0xf58a('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson['client'][_0xf58a('0x8')]({'port':0x232a});config['redis']=_['defaults'](config['redis'],{'host':_0xf58a('0x9'),'port':0x18eb});var socket=require(_0xf58a('0xa'))(new Redis(config['redis']));require(_0xf58a('0xb'))[_0xf58a('0xc')](socket);function respondWithRpcPromise(_0x2a33e8,_0x114020,_0x33cb44){return new BPromise(function(_0x589193,_0xfbb3c9){return client['request'](_0x2a33e8,_0x33cb44)[_0xf58a('0xd')](function(_0x451b52){logger[_0xf58a('0xe')]('Team,\x20%s,\x20%s',_0x114020,_0xf58a('0xf'));logger[_0xf58a('0x10')](_0xf58a('0x11'),_0x114020,'request\x20sent',JSON['stringify'](_0x451b52));if(_0x451b52[_0xf58a('0x12')]){if(_0x451b52[_0xf58a('0x12')]['code']===0x1f4){logger[_0xf58a('0x12')](_0xf58a('0x13'),_0x114020,_0x451b52[_0xf58a('0x12')][_0xf58a('0x14')]);return _0xfbb3c9(_0x451b52[_0xf58a('0x12')][_0xf58a('0x14')]);}logger['error'](_0xf58a('0x13'),_0x114020,_0x451b52[_0xf58a('0x12')][_0xf58a('0x14')]);return _0x589193(_0x451b52['error'][_0xf58a('0x14')]);}else{logger['info'](_0xf58a('0x13'),_0x114020,_0xf58a('0xf'));_0x589193(_0x451b52[_0xf58a('0x15')][_0xf58a('0x14')]);}})[_0xf58a('0x16')](function(_0x217399){logger[_0xf58a('0x12')]('Team,\x20%s,\x20%s',_0x114020,_0x217399);_0xfbb3c9(_0x217399);});});}
\ No newline at end of file
index 7f5f0c5..11b9f9a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x38b1=['removeListener','register','length','team:','./team.events','remove'];(function(_0x54d4a8,_0x585a59){var _0x3b321b=function(_0x245c6a){while(--_0x245c6a){_0x54d4a8['push'](_0x54d4a8['shift']());}};_0x3b321b(++_0x585a59);}(_0x38b1,0x190));var _0x138b=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x38b1[_0x3b380d];return _0x54502b;};'use strict';var TeamEvents=require(_0x138b('0x0'));var events=['save',_0x138b('0x1'),'update'];function createListener(_0x8d21fd,_0x27c750){return function(_0x34b8bf){_0x27c750['emit'](_0x8d21fd,_0x34b8bf);};}function removeListener(_0x278ec0,_0x3adc48){return function(){TeamEvents[_0x138b('0x2')](_0x278ec0,_0x3adc48);};}exports[_0x138b('0x3')]=function(_0x1b5ccd){for(var _0x209f27=0x0,_0x4486be=events[_0x138b('0x4')];_0x209f27<_0x4486be;_0x209f27++){var _0x3f2d97=events[_0x209f27];var _0x310f42=createListener(_0x138b('0x5')+_0x3f2d97,_0x1b5ccd);TeamEvents['on'](_0x3f2d97,_0x310f42);}};
\ No newline at end of file
+var _0x4fd3=['team:','./team.events','save','update','emit','removeListener','register'];(function(_0x4ae77f,_0x3f1f6f){var _0x28e9a2=function(_0x3a0b64){while(--_0x3a0b64){_0x4ae77f['push'](_0x4ae77f['shift']());}};_0x28e9a2(++_0x3f1f6f);}(_0x4fd3,0x8d));var _0x34fd=function(_0x1e9763,_0x1b53fd){_0x1e9763=_0x1e9763-0x0;var _0x3397c0=_0x4fd3[_0x1e9763];return _0x3397c0;};'use strict';var TeamEvents=require(_0x34fd('0x0'));var events=[_0x34fd('0x1'),'remove',_0x34fd('0x2')];function createListener(_0x17ec47,_0x277424){return function(_0xe98b3){_0x277424[_0x34fd('0x3')](_0x17ec47,_0xe98b3);};}function removeListener(_0x41ba0d,_0x5dba5a){return function(){TeamEvents[_0x34fd('0x4')](_0x41ba0d,_0x5dba5a);};}exports[_0x34fd('0x5')]=function(_0x127efa){for(var _0x558e71=0x0,_0x2a3c7e=events['length'];_0x558e71<_0x2a3c7e;_0x558e71++){var _0x3675f9=events[_0x558e71];var _0x5461b6=createListener(_0x34fd('0x6')+_0x3675f9,_0x127efa);TeamEvents['on'](_0x3675f9,_0x5461b6);}};
\ No newline at end of file
index f6b2490..8b00ffc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d1a=['../../components/auth/service','../../components/interaction/service','../../config/environment','./template.controller','get','isAuthenticated','index','/:id','show','post','create','put','update','delete','destroy','exports','multer','path','connect-timeout','express'];(function(_0x1827ed,_0x4af0ee){var _0x14fe55=function(_0x4197aa){while(--_0x4197aa){_0x1827ed['push'](_0x1827ed['shift']());}};_0x14fe55(++_0x4af0ee);}(_0x4d1a,0x100));var _0xa4d1=function(_0x1f1cb6,_0x502f2b){_0x1f1cb6=_0x1f1cb6-0x0;var _0x3c8415=_0x4d1a[_0x1f1cb6];return _0x3c8415;};'use strict';var multer=require(_0xa4d1('0x0'));var util=require('util');var path=require(_0xa4d1('0x1'));var timeout=require(_0xa4d1('0x2'));var express=require(_0xa4d1('0x3'));var router=express['Router']();var auth=require(_0xa4d1('0x4'));var interaction=require(_0xa4d1('0x5'));var config=require(_0xa4d1('0x6'));var controller=require(_0xa4d1('0x7'));router[_0xa4d1('0x8')]('/',auth[_0xa4d1('0x9')](),controller[_0xa4d1('0xa')]);router[_0xa4d1('0x8')](_0xa4d1('0xb'),auth['isAuthenticated'](),controller[_0xa4d1('0xc')]);router[_0xa4d1('0xd')]('/',auth['isAuthenticated'](),controller[_0xa4d1('0xe')]);router[_0xa4d1('0xf')](_0xa4d1('0xb'),auth[_0xa4d1('0x9')](),controller[_0xa4d1('0x10')]);router[_0xa4d1('0x11')]('/:id',auth[_0xa4d1('0x9')](),controller[_0xa4d1('0x12')]);module[_0xa4d1('0x13')]=router;
\ No newline at end of file
+var _0x6e3f=['put','exports','util','path','express','Router','../../components/interaction/service','../../config/environment','./template.controller','get','/:id','isAuthenticated','show','post','create'];(function(_0x190417,_0x54dc0d){var _0x110e9c=function(_0x517b86){while(--_0x517b86){_0x190417['push'](_0x190417['shift']());}};_0x110e9c(++_0x54dc0d);}(_0x6e3f,0x101));var _0xf6e3=function(_0x44c1d3,_0x200b50){_0x44c1d3=_0x44c1d3-0x0;var _0x34ef1e=_0x6e3f[_0x44c1d3];return _0x34ef1e;};'use strict';var multer=require('multer');var util=require(_0xf6e3('0x0'));var path=require(_0xf6e3('0x1'));var timeout=require('connect-timeout');var express=require(_0xf6e3('0x2'));var router=express[_0xf6e3('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xf6e3('0x4'));var config=require(_0xf6e3('0x5'));var controller=require(_0xf6e3('0x6'));router[_0xf6e3('0x7')]('/',auth['isAuthenticated'](),controller['index']);router[_0xf6e3('0x7')](_0xf6e3('0x8'),auth[_0xf6e3('0x9')](),controller[_0xf6e3('0xa')]);router[_0xf6e3('0xb')]('/',auth[_0xf6e3('0x9')](),controller[_0xf6e3('0xc')]);router[_0xf6e3('0xd')]('/:id',auth[_0xf6e3('0x9')](),controller['update']);router['delete']('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0xf6e3('0xe')]=router;
\ No newline at end of file
index 9c016f7..0769cc7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x515d=['exports','STRING','TEXT'];(function(_0x4efcc5,_0x1d0c44){var _0x38e25f=function(_0x301cad){while(--_0x301cad){_0x4efcc5['push'](_0x4efcc5['shift']());}};_0x38e25f(++_0x1d0c44);}(_0x515d,0x1e0));var _0xd515=function(_0xaa7a59,_0x5c644e){_0xaa7a59=_0xaa7a59-0x0;var _0x3c3a52=_0x515d[_0xaa7a59];return _0x3c3a52;};'use strict';var Sequelize=require('sequelize');module[_0xd515('0x0')]={'name':{'type':Sequelize[_0xd515('0x1')]},'description':{'type':Sequelize[_0xd515('0x1')]},'html':{'type':Sequelize[_0xd515('0x2')]}};
\ No newline at end of file
+var _0x7ec3=['TEXT','exports','STRING'];(function(_0x1ceb73,_0x41baf4){var _0x13fdae=function(_0x4d6611){while(--_0x4d6611){_0x1ceb73['push'](_0x1ceb73['shift']());}};_0x13fdae(++_0x41baf4);}(_0x7ec3,0x184));var _0x37ec=function(_0x28bf07,_0x28cd61){_0x28bf07=_0x28bf07-0x0;var _0x53dfe7=_0x7ec3[_0x28bf07];return _0x53dfe7;};'use strict';var Sequelize=require('sequelize');module[_0x37ec('0x0')]={'name':{'type':Sequelize[_0x37ec('0x1')]},'description':{'type':Sequelize[_0x37ec('0x1')]},'html':{'type':Sequelize[_0x37ec('0x2')]}};
\ No newline at end of file
index c5ef596..6867bfd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb3a8=['ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','count','offset','limit','set','Content-Range','json','reject','save','update','then','destroy','get','UserProfileResource','error','stack','name','send','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','pick','where','merge','map','type','key','field','options','Template','include','findAll','catch','show','params','includeAll','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','Templates','UserProfileSection','find','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','html-pdf','rimraf','request-promise','mustache','sox','to-csv','ejs','squel','crypto','desk.js','papaparse'];(function(_0x2eda62,_0x50fc2d){var _0x3733cf=function(_0x1be610){while(--_0x1be610){_0x2eda62['push'](_0x2eda62['shift']());}};_0x3733cf(++_0x50fc2d);}(_0xb3a8,0xd3));var _0x8b3a=function(_0x43d16c,_0x2b5447){_0x43d16c=_0x43d16c-0x0;var _0x208cce=_0xb3a8[_0x43d16c];return _0x208cce;};'use strict';var pdf=require(_0x8b3a('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x8b3a('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x8b3a('0x2'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x8b3a('0x3'));var util=require('util');var path=require('path');var sox=require(_0x8b3a('0x4'));var csv=require(_0x8b3a('0x5'));var ejs=require(_0x8b3a('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x8b3a('0x7'));var crypto=require(_0x8b3a('0x8'));var jsforce=require('jsforce');var deskjs=require(_0x8b3a('0x9'));var toCsv=require(_0x8b3a('0x5'));var querystring=require('querystring');var Papa=require(_0x8b3a('0xa'));var Redis=require(_0x8b3a('0xb'));var authService=require(_0x8b3a('0xc'));var qs=require(_0x8b3a('0xd'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x8b3a('0xe'))(_0x8b3a('0xf'));var utils=require(_0x8b3a('0x10'));var config=require(_0x8b3a('0x11'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x597d9f,_0x343bf4){_0x343bf4=_0x343bf4||0xcc;return function(_0x2c998e){if(_0x2c998e){return _0x597d9f[_0x8b3a('0x12')](_0x343bf4);}return _0x597d9f[_0x8b3a('0x13')](_0x343bf4)[_0x8b3a('0x14')]();};}function respondWithResult(_0x2d2b14,_0xca5d63){_0xca5d63=_0xca5d63||0xc8;return function(_0x144180){if(_0x144180){return _0x2d2b14[_0x8b3a('0x13')](_0xca5d63)['json'](_0x144180);}};}function respondWithFilteredResult(_0x445b60,_0x37860f){return function(_0x5c8c11){if(_0x5c8c11){var _0x289e47=_0x5c8c11[_0x8b3a('0x15')],_0x58fa21=_0x37860f['offset'],_0x522c86=_0x37860f[_0x8b3a('0x16')]+_0x37860f[_0x8b3a('0x17')],_0x36a557;if(_0x522c86>=_0x289e47){_0x522c86=_0x289e47;_0x36a557=0xc8;}else{_0x36a557=0xce;}_0x445b60['status'](_0x36a557);return _0x445b60[_0x8b3a('0x18')](_0x8b3a('0x19'),_0x58fa21+'-'+_0x522c86+'/'+_0x289e47)[_0x8b3a('0x1a')](_0x5c8c11);}return null;};}function patchUpdates(_0x422c7f){return function(_0x20f97e){try{jsonpatch['apply'](_0x20f97e,_0x422c7f,!![]);}catch(_0x1dc4df){return BPromise[_0x8b3a('0x1b')](_0x1dc4df);}return _0x20f97e[_0x8b3a('0x1c')]();};}function saveUpdates(_0x4da834,_0x23a10b){return function(_0x4a99fe){if(_0x4a99fe){return _0x4a99fe[_0x8b3a('0x1d')](_0x4da834)[_0x8b3a('0x1e')](function(_0x41e62d){return _0x41e62d;});}return null;};}function removeEntity(_0x27862d,_0x4e4858){return function(_0x560d24){if(_0x560d24){return _0x560d24[_0x8b3a('0x1f')]()['then'](function(){var _0x1eef81=_0x560d24[_0x8b3a('0x20')]({'plain':!![]});var _0xf89cd0='Templates';return db[_0x8b3a('0x21')]['destroy']({'where':{'type':_0xf89cd0,'resourceId':_0x1eef81['id']}})[_0x8b3a('0x1e')](function(){return _0x560d24;});})[_0x8b3a('0x1e')](function(){_0x27862d[_0x8b3a('0x13')](0xcc)[_0x8b3a('0x14')]();});}};}function handleEntityNotFound(_0x5b5ce2,_0x1dd413){return function(_0x5f5db1){if(!_0x5f5db1){_0x5b5ce2[_0x8b3a('0x12')](0x194);}return _0x5f5db1;};}function handleError(_0x44f878,_0x328d39){_0x328d39=_0x328d39||0x1f4;return function(_0x5a711c){logger[_0x8b3a('0x22')](_0x5a711c[_0x8b3a('0x23')]);if(_0x5a711c[_0x8b3a('0x24')]){delete _0x5a711c[_0x8b3a('0x24')];}_0x44f878[_0x8b3a('0x13')](_0x328d39)[_0x8b3a('0x25')](_0x5a711c);};}exports['index']=function(_0x11e833,_0x39a4d8){var _0x498af8={},_0x57ac60={},_0x462712={'count':0x0,'rows':[]};var _0x251e78=db['Template'][_0x8b3a('0x26')];_0x57ac60[_0x8b3a('0x27')]=_['keys'](_0x251e78);_0x57ac60['query']=_[_0x8b3a('0x28')](_0x11e833[_0x8b3a('0x29')]);_0x57ac60[_0x8b3a('0x2a')]=_[_0x8b3a('0x2b')](_0x57ac60['model'],_0x57ac60[_0x8b3a('0x29')]);_0x498af8[_0x8b3a('0x2c')]=_[_0x8b3a('0x2b')](_0x57ac60['model'],qs[_0x8b3a('0x2d')](_0x11e833[_0x8b3a('0x29')][_0x8b3a('0x2d')]));_0x498af8['attributes']=_0x498af8['attributes'][_0x8b3a('0x2e')]?_0x498af8[_0x8b3a('0x2c')]:_0x57ac60[_0x8b3a('0x27')];if(!_0x11e833[_0x8b3a('0x29')][_0x8b3a('0x2f')]('nolimit')){_0x498af8['limit']=qs[_0x8b3a('0x17')](_0x11e833[_0x8b3a('0x29')][_0x8b3a('0x17')]);_0x498af8[_0x8b3a('0x16')]=qs[_0x8b3a('0x16')](_0x11e833[_0x8b3a('0x29')][_0x8b3a('0x16')]);}_0x498af8[_0x8b3a('0x30')]=qs['sort'](_0x11e833[_0x8b3a('0x29')][_0x8b3a('0x31')]);_0x498af8['where']=qs[_0x8b3a('0x2a')](_[_0x8b3a('0x32')](_0x11e833[_0x8b3a('0x29')],_0x57ac60[_0x8b3a('0x2a')]));if(_0x11e833['query']['filter']){_0x498af8[_0x8b3a('0x33')]=_[_0x8b3a('0x34')](_0x498af8['where'],{'$or':_[_0x8b3a('0x35')](_0x251e78,function(_0x5ed24e){if(_0x5ed24e[_0x8b3a('0x36')][_0x8b3a('0x37')]!=='VIRTUAL'){var _0x56445d={};_0x56445d[_0x5ed24e[_0x8b3a('0x38')]]={'$like':'%'+_0x11e833[_0x8b3a('0x29')]['filter']+'%'};return _0x56445d;}})});}_0x498af8=_[_0x8b3a('0x34')]({},_0x498af8,_0x11e833[_0x8b3a('0x39')]);var _0x462f91={'where':_0x498af8['where']};return db[_0x8b3a('0x3a')][_0x8b3a('0x15')](_0x462f91)[_0x8b3a('0x1e')](function(_0x26c279){_0x462712['count']=_0x26c279;if(_0x11e833[_0x8b3a('0x29')]['includeAll']){_0x498af8[_0x8b3a('0x3b')]=[{'all':!![]}];}return db[_0x8b3a('0x3a')][_0x8b3a('0x3c')](_0x498af8);})[_0x8b3a('0x1e')](function(_0x913f5f){_0x462712['rows']=_0x913f5f;return _0x462712;})['then'](respondWithFilteredResult(_0x39a4d8,_0x498af8))[_0x8b3a('0x3d')](handleError(_0x39a4d8,null));};exports[_0x8b3a('0x3e')]=function(_0x1ed8e9,_0x40303d){var _0x16ec96={'raw':!![],'where':{'id':_0x1ed8e9[_0x8b3a('0x3f')]['id']}},_0x1eda21={};_0x1eda21[_0x8b3a('0x27')]=_[_0x8b3a('0x28')](db['Template']['rawAttributes']);_0x1eda21[_0x8b3a('0x29')]=_['keys'](_0x1ed8e9[_0x8b3a('0x29')]);_0x1eda21[_0x8b3a('0x2a')]=_['intersection'](_0x1eda21['model'],_0x1eda21[_0x8b3a('0x29')]);_0x16ec96['attributes']=_[_0x8b3a('0x2b')](_0x1eda21[_0x8b3a('0x27')],qs[_0x8b3a('0x2d')](_0x1ed8e9[_0x8b3a('0x29')][_0x8b3a('0x2d')]));_0x16ec96[_0x8b3a('0x2c')]=_0x16ec96[_0x8b3a('0x2c')][_0x8b3a('0x2e')]?_0x16ec96[_0x8b3a('0x2c')]:_0x1eda21['model'];if(_0x1ed8e9[_0x8b3a('0x29')][_0x8b3a('0x40')]){_0x16ec96[_0x8b3a('0x3b')]=[{'all':!![]}];}_0x16ec96=_[_0x8b3a('0x34')]({},_0x16ec96,_0x1ed8e9['options']);return db[_0x8b3a('0x3a')]['find'](_0x16ec96)[_0x8b3a('0x1e')](handleEntityNotFound(_0x40303d,null))[_0x8b3a('0x1e')](respondWithResult(_0x40303d,null))['catch'](handleError(_0x40303d,null));};exports[_0x8b3a('0x41')]=function(_0x4d02e8,_0xad29a){return db['Template'][_0x8b3a('0x41')](_0x4d02e8[_0x8b3a('0x42')],{})['then'](function(_0x4b79f2){var _0x3fd1bb=_0x4d02e8[_0x8b3a('0x43')][_0x8b3a('0x20')]({'plain':!![]});if(!_0x3fd1bb)throw new Error(_0x8b3a('0x44'));if(_0x3fd1bb[_0x8b3a('0x45')]==='user'){var _0x48c54f=_0x4b79f2[_0x8b3a('0x20')]({'plain':!![]});var _0x498c8c=_0x8b3a('0x46');return db[_0x8b3a('0x47')][_0x8b3a('0x48')]({'where':{'name':_0x498c8c,'userProfileId':_0x3fd1bb['userProfileId']},'raw':!![]})[_0x8b3a('0x1e')](function(_0x3507f2){if(_0x3507f2&&_0x3507f2['autoAssociation']===0x0){return db[_0x8b3a('0x21')][_0x8b3a('0x41')]({'name':_0x48c54f[_0x8b3a('0x24')],'resourceId':_0x48c54f['id'],'type':_0x3507f2[_0x8b3a('0x24')],'sectionId':_0x3507f2['id']},{})[_0x8b3a('0x1e')](function(){return _0x4b79f2;});}else{return _0x4b79f2;}})[_0x8b3a('0x3d')](function(_0x44360a){logger[_0x8b3a('0x22')](_0x8b3a('0x49'),_0x44360a);throw _0x44360a;});}return _0x4b79f2;})[_0x8b3a('0x1e')](respondWithResult(_0xad29a,0xc9))[_0x8b3a('0x3d')](handleError(_0xad29a,null));};exports[_0x8b3a('0x1d')]=function(_0x2be5cb,_0x14ecb6){if(_0x2be5cb['body']['id']){delete _0x2be5cb[_0x8b3a('0x42')]['id'];}return db[_0x8b3a('0x3a')][_0x8b3a('0x48')]({'where':{'id':_0x2be5cb['params']['id']}})[_0x8b3a('0x1e')](handleEntityNotFound(_0x14ecb6,null))['then'](saveUpdates(_0x2be5cb[_0x8b3a('0x42')],null))[_0x8b3a('0x1e')](respondWithResult(_0x14ecb6,null))[_0x8b3a('0x3d')](handleError(_0x14ecb6,null));};exports[_0x8b3a('0x1f')]=function(_0x36be32,_0x7950d7){return db[_0x8b3a('0x3a')][_0x8b3a('0x48')]({'where':{'id':_0x36be32['params']['id']}})[_0x8b3a('0x1e')](handleEntityNotFound(_0x7950d7,null))[_0x8b3a('0x1e')](removeEntity(_0x7950d7,null))[_0x8b3a('0x3d')](handleError(_0x7950d7,null));};
\ No newline at end of file
+var _0x2b21=['reject','save','update','destroy','then','Templates','UserProfileResource','end','error','stack','name','send','index','Template','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','filter','merge','map','type','VIRTUAL','field','options','include','findAll','show','params','rawAttributes','includeAll','find','body','user','get','role','UserProfileSection','userProfileId','autoAssociation','create','catch','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/environment','sendStatus','status','json','count','offset','limit','set','Content-Range'];(function(_0x6f0933,_0x296c8b){var _0x42f786=function(_0x41f53b){while(--_0x41f53b){_0x6f0933['push'](_0x6f0933['shift']());}};_0x42f786(++_0x296c8b);}(_0x2b21,0x17b));var _0x12b2=function(_0x17ebae,_0x7da3){_0x17ebae=_0x17ebae-0x0;var _0x8cbe7d=_0x2b21[_0x17ebae];return _0x8cbe7d;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x12b2('0x0'));var rimraf=require(_0x12b2('0x1'));var zipdir=require(_0x12b2('0x2'));var jsonpatch=require(_0x12b2('0x3'));var rp=require('request-promise');var moment=require(_0x12b2('0x4'));var BPromise=require(_0x12b2('0x5'));var Mustache=require('mustache');var util=require(_0x12b2('0x6'));var path=require(_0x12b2('0x7'));var sox=require(_0x12b2('0x8'));var csv=require(_0x12b2('0x9'));var ejs=require(_0x12b2('0xa'));var fs=require('fs');var _=require(_0x12b2('0xb'));var squel=require(_0x12b2('0xc'));var crypto=require('crypto');var jsforce=require(_0x12b2('0xd'));var deskjs=require(_0x12b2('0xe'));var toCsv=require('to-csv');var querystring=require(_0x12b2('0xf'));var Papa=require(_0x12b2('0x10'));var Redis=require(_0x12b2('0x11'));var authService=require(_0x12b2('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x12b2('0x13'));var logger=require(_0x12b2('0x14'))(_0x12b2('0x15'));var utils=require('../../config/utils');var config=require(_0x12b2('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x594e0c,_0x45b95d){_0x45b95d=_0x45b95d||0xcc;return function(_0x5550d2){if(_0x5550d2){return _0x594e0c[_0x12b2('0x17')](_0x45b95d);}return _0x594e0c[_0x12b2('0x18')](_0x45b95d)['end']();};}function respondWithResult(_0x266459,_0x3e92d0){_0x3e92d0=_0x3e92d0||0xc8;return function(_0x5c0d07){if(_0x5c0d07){return _0x266459[_0x12b2('0x18')](_0x3e92d0)[_0x12b2('0x19')](_0x5c0d07);}};}function respondWithFilteredResult(_0x53f7cf,_0x178ea9){return function(_0x587df9){if(_0x587df9){var _0x14bc46=_0x587df9[_0x12b2('0x1a')],_0x259050=_0x178ea9[_0x12b2('0x1b')],_0x5e25cc=_0x178ea9[_0x12b2('0x1b')]+_0x178ea9[_0x12b2('0x1c')],_0xcf5d60;if(_0x5e25cc>=_0x14bc46){_0x5e25cc=_0x14bc46;_0xcf5d60=0xc8;}else{_0xcf5d60=0xce;}_0x53f7cf['status'](_0xcf5d60);return _0x53f7cf[_0x12b2('0x1d')](_0x12b2('0x1e'),_0x259050+'-'+_0x5e25cc+'/'+_0x14bc46)[_0x12b2('0x19')](_0x587df9);}return null;};}function patchUpdates(_0x405e55){return function(_0x34c366){try{jsonpatch['apply'](_0x34c366,_0x405e55,!![]);}catch(_0x54cbac){return BPromise[_0x12b2('0x1f')](_0x54cbac);}return _0x34c366[_0x12b2('0x20')]();};}function saveUpdates(_0x3acdc2,_0x52d48f){return function(_0x4358d2){if(_0x4358d2){return _0x4358d2[_0x12b2('0x21')](_0x3acdc2)['then'](function(_0x1e49bb){return _0x1e49bb;});}return null;};}function removeEntity(_0xc0af0e,_0x2f67cc){return function(_0x479c2a){if(_0x479c2a){return _0x479c2a[_0x12b2('0x22')]()[_0x12b2('0x23')](function(){var _0xa6fad7=_0x479c2a['get']({'plain':!![]});var _0x2b115d=_0x12b2('0x24');return db[_0x12b2('0x25')]['destroy']({'where':{'type':_0x2b115d,'resourceId':_0xa6fad7['id']}})[_0x12b2('0x23')](function(){return _0x479c2a;});})['then'](function(){_0xc0af0e[_0x12b2('0x18')](0xcc)[_0x12b2('0x26')]();});}};}function handleEntityNotFound(_0x1501a3,_0x47e95f){return function(_0x7d450b){if(!_0x7d450b){_0x1501a3[_0x12b2('0x17')](0x194);}return _0x7d450b;};}function handleError(_0x5a32ef,_0x23c5b0){_0x23c5b0=_0x23c5b0||0x1f4;return function(_0x30793a){logger[_0x12b2('0x27')](_0x30793a[_0x12b2('0x28')]);if(_0x30793a['name']){delete _0x30793a[_0x12b2('0x29')];}_0x5a32ef[_0x12b2('0x18')](_0x23c5b0)[_0x12b2('0x2a')](_0x30793a);};}exports[_0x12b2('0x2b')]=function(_0x5e0c99,_0xa0f8fd){var _0x355bca={},_0x4236b8={},_0x4e8d83={'count':0x0,'rows':[]};var _0x5d8b7f=db[_0x12b2('0x2c')]['rawAttributes'];_0x4236b8[_0x12b2('0x2d')]=_[_0x12b2('0x2e')](_0x5d8b7f);_0x4236b8[_0x12b2('0x2f')]=_[_0x12b2('0x2e')](_0x5e0c99[_0x12b2('0x2f')]);_0x4236b8[_0x12b2('0x30')]=_[_0x12b2('0x31')](_0x4236b8[_0x12b2('0x2d')],_0x4236b8[_0x12b2('0x2f')]);_0x355bca[_0x12b2('0x32')]=_[_0x12b2('0x31')](_0x4236b8[_0x12b2('0x2d')],qs['fields'](_0x5e0c99['query'][_0x12b2('0x33')]));_0x355bca[_0x12b2('0x32')]=_0x355bca[_0x12b2('0x32')][_0x12b2('0x34')]?_0x355bca[_0x12b2('0x32')]:_0x4236b8['model'];if(!_0x5e0c99[_0x12b2('0x2f')][_0x12b2('0x35')](_0x12b2('0x36'))){_0x355bca[_0x12b2('0x1c')]=qs['limit'](_0x5e0c99[_0x12b2('0x2f')]['limit']);_0x355bca[_0x12b2('0x1b')]=qs['offset'](_0x5e0c99['query'][_0x12b2('0x1b')]);}_0x355bca['order']=qs[_0x12b2('0x37')](_0x5e0c99[_0x12b2('0x2f')][_0x12b2('0x37')]);_0x355bca[_0x12b2('0x38')]=qs[_0x12b2('0x30')](_[_0x12b2('0x39')](_0x5e0c99['query'],_0x4236b8[_0x12b2('0x30')]));if(_0x5e0c99[_0x12b2('0x2f')][_0x12b2('0x3a')]){_0x355bca['where']=_[_0x12b2('0x3b')](_0x355bca['where'],{'$or':_[_0x12b2('0x3c')](_0x5d8b7f,function(_0x11ebd5){if(_0x11ebd5[_0x12b2('0x3d')]['key']!==_0x12b2('0x3e')){var _0x3324cd={};_0x3324cd[_0x11ebd5[_0x12b2('0x3f')]]={'$like':'%'+_0x5e0c99['query'][_0x12b2('0x3a')]+'%'};return _0x3324cd;}})});}_0x355bca=_[_0x12b2('0x3b')]({},_0x355bca,_0x5e0c99[_0x12b2('0x40')]);var _0x443fe0={'where':_0x355bca[_0x12b2('0x38')]};return db[_0x12b2('0x2c')][_0x12b2('0x1a')](_0x443fe0)[_0x12b2('0x23')](function(_0x18de38){_0x4e8d83[_0x12b2('0x1a')]=_0x18de38;if(_0x5e0c99[_0x12b2('0x2f')]['includeAll']){_0x355bca[_0x12b2('0x41')]=[{'all':!![]}];}return db[_0x12b2('0x2c')][_0x12b2('0x42')](_0x355bca);})[_0x12b2('0x23')](function(_0x33ace5){_0x4e8d83['rows']=_0x33ace5;return _0x4e8d83;})['then'](respondWithFilteredResult(_0xa0f8fd,_0x355bca))['catch'](handleError(_0xa0f8fd,null));};exports[_0x12b2('0x43')]=function(_0x43a2e1,_0x21d773){var _0x5946a4={'raw':!![],'where':{'id':_0x43a2e1[_0x12b2('0x44')]['id']}},_0x36adb6={};_0x36adb6[_0x12b2('0x2d')]=_[_0x12b2('0x2e')](db['Template'][_0x12b2('0x45')]);_0x36adb6['query']=_['keys'](_0x43a2e1[_0x12b2('0x2f')]);_0x36adb6[_0x12b2('0x30')]=_['intersection'](_0x36adb6['model'],_0x36adb6['query']);_0x5946a4['attributes']=_[_0x12b2('0x31')](_0x36adb6[_0x12b2('0x2d')],qs[_0x12b2('0x33')](_0x43a2e1['query'][_0x12b2('0x33')]));_0x5946a4[_0x12b2('0x32')]=_0x5946a4['attributes'][_0x12b2('0x34')]?_0x5946a4[_0x12b2('0x32')]:_0x36adb6[_0x12b2('0x2d')];if(_0x43a2e1['query'][_0x12b2('0x46')]){_0x5946a4[_0x12b2('0x41')]=[{'all':!![]}];}_0x5946a4=_[_0x12b2('0x3b')]({},_0x5946a4,_0x43a2e1[_0x12b2('0x40')]);return db[_0x12b2('0x2c')][_0x12b2('0x47')](_0x5946a4)['then'](handleEntityNotFound(_0x21d773,null))[_0x12b2('0x23')](respondWithResult(_0x21d773,null))['catch'](handleError(_0x21d773,null));};exports['create']=function(_0x4e7d43,_0x1ba19c){return db[_0x12b2('0x2c')]['create'](_0x4e7d43[_0x12b2('0x48')],{})[_0x12b2('0x23')](function(_0x345bd3){var _0x55e0c1=_0x4e7d43[_0x12b2('0x49')][_0x12b2('0x4a')]({'plain':!![]});if(!_0x55e0c1)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x55e0c1[_0x12b2('0x4b')]===_0x12b2('0x49')){var _0x569115=_0x345bd3['get']({'plain':!![]});var _0x3f9fe7=_0x12b2('0x24');return db[_0x12b2('0x4c')][_0x12b2('0x47')]({'where':{'name':_0x3f9fe7,'userProfileId':_0x55e0c1[_0x12b2('0x4d')]},'raw':!![]})[_0x12b2('0x23')](function(_0x4bf6be){if(_0x4bf6be&&_0x4bf6be[_0x12b2('0x4e')]===0x0){return db[_0x12b2('0x25')][_0x12b2('0x4f')]({'name':_0x569115[_0x12b2('0x29')],'resourceId':_0x569115['id'],'type':_0x4bf6be[_0x12b2('0x29')],'sectionId':_0x4bf6be['id']},{})['then'](function(){return _0x345bd3;});}else{return _0x345bd3;}})[_0x12b2('0x50')](function(_0x214d47){logger[_0x12b2('0x27')](_0x12b2('0x51'),_0x214d47);throw _0x214d47;});}return _0x345bd3;})[_0x12b2('0x23')](respondWithResult(_0x1ba19c,0xc9))[_0x12b2('0x50')](handleError(_0x1ba19c,null));};exports[_0x12b2('0x21')]=function(_0xea2d40,_0x418c69){if(_0xea2d40['body']['id']){delete _0xea2d40['body']['id'];}return db[_0x12b2('0x2c')]['find']({'where':{'id':_0xea2d40[_0x12b2('0x44')]['id']}})[_0x12b2('0x23')](handleEntityNotFound(_0x418c69,null))['then'](saveUpdates(_0xea2d40[_0x12b2('0x48')],null))['then'](respondWithResult(_0x418c69,null))[_0x12b2('0x50')](handleError(_0x418c69,null));};exports['destroy']=function(_0x3210aa,_0x4fdda0){return db[_0x12b2('0x2c')][_0x12b2('0x47')]({'where':{'id':_0x3210aa[_0x12b2('0x44')]['id']}})[_0x12b2('0x23')](handleEntityNotFound(_0x4fdda0,null))[_0x12b2('0x23')](removeEntity(_0x4fdda0,null))[_0x12b2('0x50')](handleError(_0x4fdda0,null));};
\ No newline at end of file
index 5401919..066e6c7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9354=['../../config/environment','./template.attributes','exports','define','Template','tools_templates','util','../../config/logger','moment','bluebird','request-promise','path'];(function(_0x602ca8,_0x568e82){var _0x26e8ab=function(_0x3fb700){while(--_0x3fb700){_0x602ca8['push'](_0x602ca8['shift']());}};_0x26e8ab(++_0x568e82);}(_0x9354,0x96));var _0x4935=function(_0x4c1ad8,_0x55e28d){_0x4c1ad8=_0x4c1ad8-0x0;var _0x2c617b=_0x9354[_0x4c1ad8];return _0x2c617b;};'use strict';var _=require('lodash');var util=require(_0x4935('0x0'));var logger=require(_0x4935('0x1'))('api');var moment=require(_0x4935('0x2'));var BPromise=require(_0x4935('0x3'));var rp=require(_0x4935('0x4'));var fs=require('fs');var path=require(_0x4935('0x5'));var rimraf=require('rimraf');var config=require(_0x4935('0x6'));var attributes=require(_0x4935('0x7'));module[_0x4935('0x8')]=function(_0x2d518a,_0x263864){return _0x2d518a[_0x4935('0x9')](_0x4935('0xa'),attributes,{'tableName':_0x4935('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xed3c=['util','../../config/logger','api','bluebird','request-promise','path','./template.attributes','exports','lodash'];(function(_0xe03ef4,_0x380f64){var _0x2b2bc2=function(_0xaaa556){while(--_0xaaa556){_0xe03ef4['push'](_0xe03ef4['shift']());}};_0x2b2bc2(++_0x380f64);}(_0xed3c,0x1a6));var _0xced3=function(_0x4544d3,_0x149a72){_0x4544d3=_0x4544d3-0x0;var _0x36aeca=_0xed3c[_0x4544d3];return _0x36aeca;};'use strict';var _=require(_0xced3('0x0'));var util=require(_0xced3('0x1'));var logger=require(_0xced3('0x2'))(_0xced3('0x3'));var moment=require('moment');var BPromise=require(_0xced3('0x4'));var rp=require(_0xced3('0x5'));var fs=require('fs');var path=require(_0xced3('0x6'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0xced3('0x7'));module[_0xced3('0x8')]=function(_0x2f92f8,_0x1cd694){return _0x2f92f8['define']('Template',attributes,{'tableName':'tools_templates','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index c0aab76..e58acac 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x691a=['include','map','model','debug','GetTemplate','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info','Template,\x20%s,\x20%s','request\x20sent','Template,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','findAll','options','where','attributes'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0x691a,0x1a5));var _0xa691=function(_0x5ddf8e,_0x3e318d){_0x5ddf8e=_0x5ddf8e-0x0;var _0x26dfba=_0x691a[_0x5ddf8e];return _0x26dfba;};'use strict';var _=require(_0xa691('0x0'));var util=require(_0xa691('0x1'));var moment=require(_0xa691('0x2'));var BPromise=require(_0xa691('0x3'));var rs=require(_0xa691('0x4'));var fs=require('fs');var Redis=require(_0xa691('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xa691('0x6'));var logger=require('../../config/logger')(_0xa691('0x7'));var config=require(_0xa691('0x8'));var jayson=require(_0xa691('0x9'));var client=jayson[_0xa691('0xa')][_0xa691('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x4d8b22,_0x11e631,_0x54d8a3){return new BPromise(function(_0x22079c,_0x1b1131){return client[_0xa691('0xc')](_0x4d8b22,_0x54d8a3)[_0xa691('0xd')](function(_0x35795e){logger[_0xa691('0xe')](_0xa691('0xf'),_0x11e631,_0xa691('0x10'));logger['debug'](_0xa691('0x11'),_0x11e631,_0xa691('0x10'),JSON[_0xa691('0x12')](_0x35795e));if(_0x35795e[_0xa691('0x13')]){if(_0x35795e[_0xa691('0x13')][_0xa691('0x14')]===0x1f4){logger[_0xa691('0x13')](_0xa691('0xf'),_0x11e631,_0x35795e['error'][_0xa691('0x15')]);return _0x1b1131(_0x35795e['error'][_0xa691('0x15')]);}logger['error'](_0xa691('0xf'),_0x11e631,_0x35795e['error'][_0xa691('0x15')]);return _0x22079c(_0x35795e['error'][_0xa691('0x15')]);}else{logger[_0xa691('0xe')]('Template,\x20%s,\x20%s',_0x11e631,_0xa691('0x10'));_0x22079c(_0x35795e['result'][_0xa691('0x15')]);}})[_0xa691('0x16')](function(_0x51acaa){logger[_0xa691('0x13')](_0xa691('0xf'),_0x11e631,_0x51acaa);_0x1b1131(_0x51acaa);});});}exports['GetTemplate']=function(_0x9a663e){var _0x4fcdfa=this;return new Promise(function(_0x2d5a40,_0xdc2a3f){return db['Template'][_0xa691('0x17')]({'raw':_0x9a663e[_0xa691('0x18')]?_0x9a663e['options']['raw']===undefined?!![]:![]:!![],'where':_0x9a663e[_0xa691('0x18')]?_0x9a663e['options'][_0xa691('0x19')]||null:null,'attributes':_0x9a663e[_0xa691('0x18')]?_0x9a663e[_0xa691('0x18')][_0xa691('0x1a')]||null:null,'limit':_0x9a663e['options']?_0x9a663e['options']['limit']||null:null,'include':_0x9a663e['options']?_0x9a663e[_0xa691('0x18')][_0xa691('0x1b')]?_[_0xa691('0x1c')](_0x9a663e[_0xa691('0x18')][_0xa691('0x1b')],function(_0x345ed7){return{'model':db[_0x345ed7[_0xa691('0x1d')]],'as':_0x345ed7['as'],'attributes':_0x345ed7[_0xa691('0x1a')],'include':_0x345ed7[_0xa691('0x1b')]?_[_0xa691('0x1c')](_0x345ed7[_0xa691('0x1b')],function(_0x359281){return{'model':db[_0x359281[_0xa691('0x1d')]],'as':_0x359281['as'],'attributes':_0x359281['attributes'],'include':_0x359281[_0xa691('0x1b')]?_[_0xa691('0x1c')](_0x359281['include'],function(_0x2271da){return{'model':db[_0x2271da[_0xa691('0x1d')]],'as':_0x2271da['as'],'attributes':_0x2271da[_0xa691('0x1a')]};}):[]};}):[]};}):[]:[]})[_0xa691('0xd')](function(_0x1046a1){logger[_0xa691('0xe')]('GetTemplate',_0x9a663e);logger[_0xa691('0x1e')](_0xa691('0x1f'),_0x9a663e,JSON[_0xa691('0x12')](_0x1046a1));_0x2d5a40(_0x1046a1);})[_0xa691('0x16')](function(_0x5218df){logger[_0xa691('0x13')](_0xa691('0x1f'),_0x5218df[_0xa691('0x15')],_0x9a663e);_0xdc2a3f(_0x4fcdfa[_0xa691('0x13')](0x1f4,_0x5218df[_0xa691('0x15')]));});});};
\ No newline at end of file
+var _0x923d=['moment','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','Template,\x20%s,\x20%s','debug','Template,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','result','GetTemplate','Template','findAll','options','raw','limit','include','map','model','attributes','catch','lodash','util'];(function(_0x47a88a,_0x47e7ab){var _0x36fdb0=function(_0x3d30ca){while(--_0x3d30ca){_0x47a88a['push'](_0x47a88a['shift']());}};_0x36fdb0(++_0x47e7ab);}(_0x923d,0x9e));var _0xd923=function(_0x1dcbcc,_0x53ca16){_0x1dcbcc=_0x1dcbcc-0x0;var _0x25bd6c=_0x923d[_0x1dcbcc];return _0x25bd6c;};'use strict';var _=require(_0xd923('0x0'));var util=require(_0xd923('0x1'));var moment=require(_0xd923('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xd923('0x3'));var db=require(_0xd923('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xd923('0x5'))(_0xd923('0x6'));var config=require(_0xd923('0x7'));var jayson=require(_0xd923('0x8'));var client=jayson[_0xd923('0x9')][_0xd923('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x265c8c,_0x47f6cd,_0x439744){return new BPromise(function(_0x37696d,_0x3e7f0e){return client['request'](_0x265c8c,_0x439744)[_0xd923('0xb')](function(_0xc8e12f){logger[_0xd923('0xc')](_0xd923('0xd'),_0x47f6cd,'request\x20sent');logger[_0xd923('0xe')](_0xd923('0xf'),_0x47f6cd,_0xd923('0x10'),JSON[_0xd923('0x11')](_0xc8e12f));if(_0xc8e12f['error']){if(_0xc8e12f[_0xd923('0x12')]['code']===0x1f4){logger[_0xd923('0x12')]('Template,\x20%s,\x20%s',_0x47f6cd,_0xc8e12f[_0xd923('0x12')][_0xd923('0x13')]);return _0x3e7f0e(_0xc8e12f[_0xd923('0x12')][_0xd923('0x13')]);}logger[_0xd923('0x12')]('Template,\x20%s,\x20%s',_0x47f6cd,_0xc8e12f['error'][_0xd923('0x13')]);return _0x37696d(_0xc8e12f[_0xd923('0x12')][_0xd923('0x13')]);}else{logger[_0xd923('0xc')](_0xd923('0xd'),_0x47f6cd,_0xd923('0x10'));_0x37696d(_0xc8e12f[_0xd923('0x14')]['message']);}})['catch'](function(_0x5c3530){logger[_0xd923('0x12')](_0xd923('0xd'),_0x47f6cd,_0x5c3530);_0x3e7f0e(_0x5c3530);});});}exports[_0xd923('0x15')]=function(_0x5b1fe6){var _0xe991a5=this;return new Promise(function(_0x119386,_0x12ed06){return db[_0xd923('0x16')][_0xd923('0x17')]({'raw':_0x5b1fe6[_0xd923('0x18')]?_0x5b1fe6[_0xd923('0x18')][_0xd923('0x19')]===undefined?!![]:![]:!![],'where':_0x5b1fe6[_0xd923('0x18')]?_0x5b1fe6['options']['where']||null:null,'attributes':_0x5b1fe6[_0xd923('0x18')]?_0x5b1fe6[_0xd923('0x18')]['attributes']||null:null,'limit':_0x5b1fe6['options']?_0x5b1fe6['options'][_0xd923('0x1a')]||null:null,'include':_0x5b1fe6[_0xd923('0x18')]?_0x5b1fe6[_0xd923('0x18')][_0xd923('0x1b')]?_[_0xd923('0x1c')](_0x5b1fe6[_0xd923('0x18')][_0xd923('0x1b')],function(_0x12535b){return{'model':db[_0x12535b[_0xd923('0x1d')]],'as':_0x12535b['as'],'attributes':_0x12535b[_0xd923('0x1e')],'include':_0x12535b[_0xd923('0x1b')]?_[_0xd923('0x1c')](_0x12535b['include'],function(_0x2287f5){return{'model':db[_0x2287f5[_0xd923('0x1d')]],'as':_0x2287f5['as'],'attributes':_0x2287f5[_0xd923('0x1e')],'include':_0x2287f5['include']?_[_0xd923('0x1c')](_0x2287f5[_0xd923('0x1b')],function(_0x4bbb4f){return{'model':db[_0x4bbb4f['model']],'as':_0x4bbb4f['as'],'attributes':_0x4bbb4f[_0xd923('0x1e')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x1f08a0){logger[_0xd923('0xc')]('GetTemplate',_0x5b1fe6);logger[_0xd923('0xe')](_0xd923('0x15'),_0x5b1fe6,JSON['stringify'](_0x1f08a0));_0x119386(_0x1f08a0);})[_0xd923('0x1f')](function(_0x463af2){logger[_0xd923('0x12')]('GetTemplate',_0x463af2[_0xd923('0x13')],_0x5b1fe6);_0x12ed06(_0xe991a5[_0xd923('0x12')](0x1f4,_0x463af2[_0xd923('0x13')]));});});};
\ No newline at end of file
index a6bbfde..f7bb35c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['Router','../../components/interaction/service','../../config/environment','./trigger.controller','get','isAuthenticated','/:id','/:id/all_conditions','/:id/any_conditions','getAnyConditions','/:id/actions','create','post','addAllCondition','addAnyCondition','addAction','update','exports','multer','util','path'];(function(_0x483ab2,_0x16f6cb){var _0x5b84af=function(_0x295492){while(--_0x295492){_0x483ab2['push'](_0x483ab2['shift']());}};_0x5b84af(++_0x16f6cb);}(_0xa9e0,0x123));var _0x0a9e=function(_0x187ee1,_0x3fd1e6){_0x187ee1=_0x187ee1-0x0;var _0x388160=_0xa9e0[_0x187ee1];return _0x388160;};'use strict';var multer=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var path=require(_0x0a9e('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x0a9e('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x0a9e('0x4'));var config=require(_0x0a9e('0x5'));var controller=require(_0x0a9e('0x6'));router[_0x0a9e('0x7')]('/',auth[_0x0a9e('0x8')](),controller['index']);router[_0x0a9e('0x7')](_0x0a9e('0x9'),auth[_0x0a9e('0x8')](),controller['show']);router['get'](_0x0a9e('0xa'),auth['isAuthenticated'](),controller['getAllConditions']);router[_0x0a9e('0x7')](_0x0a9e('0xb'),auth[_0x0a9e('0x8')](),controller[_0x0a9e('0xc')]);router[_0x0a9e('0x7')](_0x0a9e('0xd'),auth['isAuthenticated'](),controller['getActions']);router['post']('/',auth['isAuthenticated'](),controller[_0x0a9e('0xe')]);router[_0x0a9e('0xf')](_0x0a9e('0xa'),auth[_0x0a9e('0x8')](),controller[_0x0a9e('0x10')]);router[_0x0a9e('0xf')]('/:id/any_conditions',auth[_0x0a9e('0x8')](),controller[_0x0a9e('0x11')]);router[_0x0a9e('0xf')](_0x0a9e('0xd'),auth[_0x0a9e('0x8')](),controller[_0x0a9e('0x12')]);router['put'](_0x0a9e('0x9'),auth['isAuthenticated'](),controller[_0x0a9e('0x13')]);router['delete'](_0x0a9e('0x9'),auth[_0x0a9e('0x8')](),controller['destroy']);module[_0x0a9e('0x14')]=router;
\ No newline at end of file
+var _0xa9e0=['Router','../../components/interaction/service','../../config/environment','./trigger.controller','get','isAuthenticated','/:id','/:id/all_conditions','/:id/any_conditions','getAnyConditions','/:id/actions','create','post','addAllCondition','addAnyCondition','addAction','update','exports','multer','util','path'];(function(_0x5823a4,_0x430d17){var _0x50bc3c=function(_0x5a69a2){while(--_0x5a69a2){_0x5823a4['push'](_0x5823a4['shift']());}};_0x50bc3c(++_0x430d17);}(_0xa9e0,0x123));var _0x0a9e=function(_0x9aada2,_0xd2d349){_0x9aada2=_0x9aada2-0x0;var _0x196dff=_0xa9e0[_0x9aada2];return _0x196dff;};'use strict';var multer=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var path=require(_0x0a9e('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x0a9e('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x0a9e('0x4'));var config=require(_0x0a9e('0x5'));var controller=require(_0x0a9e('0x6'));router[_0x0a9e('0x7')]('/',auth[_0x0a9e('0x8')](),controller['index']);router[_0x0a9e('0x7')](_0x0a9e('0x9'),auth[_0x0a9e('0x8')](),controller['show']);router['get'](_0x0a9e('0xa'),auth['isAuthenticated'](),controller['getAllConditions']);router[_0x0a9e('0x7')](_0x0a9e('0xb'),auth[_0x0a9e('0x8')](),controller[_0x0a9e('0xc')]);router[_0x0a9e('0x7')](_0x0a9e('0xd'),auth['isAuthenticated'](),controller['getActions']);router['post']('/',auth['isAuthenticated'](),controller[_0x0a9e('0xe')]);router[_0x0a9e('0xf')](_0x0a9e('0xa'),auth[_0x0a9e('0x8')](),controller[_0x0a9e('0x10')]);router[_0x0a9e('0xf')]('/:id/any_conditions',auth[_0x0a9e('0x8')](),controller[_0x0a9e('0x11')]);router[_0x0a9e('0xf')](_0x0a9e('0xd'),auth[_0x0a9e('0x8')](),controller[_0x0a9e('0x12')]);router['put'](_0x0a9e('0x9'),auth['isAuthenticated'](),controller[_0x0a9e('0x13')]);router['delete'](_0x0a9e('0x9'),auth[_0x0a9e('0x8')](),controller['destroy']);module[_0x0a9e('0x14')]=router;
\ No newline at end of file
index 8ca1825..0d9fa4b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7e59=['STRING','BOOLEAN','sequelize','exports'];(function(_0x4c2f17,_0x5c6821){var _0x20919e=function(_0x31eef7){while(--_0x31eef7){_0x4c2f17['push'](_0x4c2f17['shift']());}};_0x20919e(++_0x5c6821);}(_0x7e59,0x146));var _0x97e5=function(_0x55593f,_0x4a39d9){_0x55593f=_0x55593f-0x0;var _0x159e06=_0x7e59[_0x55593f];return _0x159e06;};'use strict';var Sequelize=require(_0x97e5('0x0'));module[_0x97e5('0x1')]={'name':{'type':Sequelize['STRING']},'channel':{'type':Sequelize[_0x97e5('0x2')]},'description':{'type':Sequelize[_0x97e5('0x2')]},'status':{'type':Sequelize[_0x97e5('0x3')],'defaultValue':![]}};
\ No newline at end of file
+var _0xedfa=['STRING','BOOLEAN','sequelize','exports'];(function(_0x44d902,_0x376b4e){var _0x27aa72=function(_0x5059fd){while(--_0x5059fd){_0x44d902['push'](_0x44d902['shift']());}};_0x27aa72(++_0x376b4e);}(_0xedfa,0x9a));var _0xaedf=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xedfa[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0xaedf('0x0'));module[_0xaedf('0x1')]={'name':{'type':Sequelize[_0xaedf('0x2')]},'channel':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xaedf('0x2')]},'status':{'type':Sequelize[_0xaedf('0x3')],'defaultValue':![]}};
\ No newline at end of file
index 3fbc80b..d18d49a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2917=['where','filter','merge','type','key','VIRTUAL','options','Trigger','includeAll','include','findAll','catch','show','params','length','find','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','user','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','addAllCondition','TriggerAllId','Condition','TriggerAnyId','getAllConditions','findOne','pick','getAnyConditions','addAction','TriggerId','Action','map','getActions','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','then','destroy','get','Triggers','stack','name','send','rawAttributes','query','keys','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','limit','order','sort'];(function(_0x8585ff,_0x9232d){var _0x3ff111=function(_0x1c40bc){while(--_0x1c40bc){_0x8585ff['push'](_0x8585ff['shift']());}};_0x3ff111(++_0x9232d);}(_0x2917,0x142));var _0x7291=function(_0xaf25ae,_0x2001c1){_0xaf25ae=_0xaf25ae-0x0;var _0x49732d=_0x2917[_0xaf25ae];return _0x49732d;};'use strict';var pdf=require(_0x7291('0x0'));var emlformat=require(_0x7291('0x1'));var rimraf=require(_0x7291('0x2'));var zipdir=require(_0x7291('0x3'));var jsonpatch=require(_0x7291('0x4'));var rp=require(_0x7291('0x5'));var moment=require(_0x7291('0x6'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x7291('0x7'));var path=require(_0x7291('0x8'));var sox=require(_0x7291('0x9'));var csv=require(_0x7291('0xa'));var ejs=require(_0x7291('0xb'));var fs=require('fs');var _=require(_0x7291('0xc'));var squel=require(_0x7291('0xd'));var crypto=require(_0x7291('0xe'));var jsforce=require(_0x7291('0xf'));var deskjs=require(_0x7291('0x10'));var toCsv=require(_0x7291('0xa'));var querystring=require(_0x7291('0x11'));var Papa=require(_0x7291('0x12'));var Redis=require(_0x7291('0x13'));var authService=require(_0x7291('0x14'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x7291('0x15'));var logger=require(_0x7291('0x16'))(_0x7291('0x17'));var utils=require(_0x7291('0x18'));var config=require(_0x7291('0x19'));var db=require(_0x7291('0x1a'))['db'];function respondWithStatusCode(_0x4cba88,_0x4fd701){_0x4fd701=_0x4fd701||0xcc;return function(_0x1834fa){if(_0x1834fa){return _0x4cba88[_0x7291('0x1b')](_0x4fd701);}return _0x4cba88[_0x7291('0x1c')](_0x4fd701)[_0x7291('0x1d')]();};}function respondWithResult(_0x51eb17,_0xc32b1d){_0xc32b1d=_0xc32b1d||0xc8;return function(_0xc3166b){if(_0xc3166b){return _0x51eb17['status'](_0xc32b1d)[_0x7291('0x1e')](_0xc3166b);}};}function respondWithFilteredResult(_0x1b48d2,_0x1777e1){return function(_0x51d353){if(_0x51d353){var _0x55cca6=_0x51d353[_0x7291('0x1f')],_0x34808c=_0x1777e1[_0x7291('0x20')],_0x304a33=_0x1777e1[_0x7291('0x20')]+_0x1777e1['limit'],_0x431ccd;if(_0x304a33>=_0x55cca6){_0x304a33=_0x55cca6;_0x431ccd=0xc8;}else{_0x431ccd=0xce;}_0x1b48d2[_0x7291('0x1c')](_0x431ccd);return _0x1b48d2[_0x7291('0x21')](_0x7291('0x22'),_0x34808c+'-'+_0x304a33+'/'+_0x55cca6)[_0x7291('0x1e')](_0x51d353);}return null;};}function patchUpdates(_0x1634c1){return function(_0x4f6fea){try{jsonpatch[_0x7291('0x23')](_0x4f6fea,_0x1634c1,!![]);}catch(_0x52d5a7){return BPromise[_0x7291('0x24')](_0x52d5a7);}return _0x4f6fea[_0x7291('0x25')]();};}function saveUpdates(_0x382134,_0x5229d6){return function(_0x53ba59){if(_0x53ba59){return _0x53ba59['update'](_0x382134)[_0x7291('0x26')](function(_0x1aa349){return _0x1aa349;});}return null;};}function removeEntity(_0x4ef5e2,_0x483279){return function(_0x56bf5f){if(_0x56bf5f){return _0x56bf5f[_0x7291('0x27')]()['then'](function(){var _0x17839a=_0x56bf5f[_0x7291('0x28')]({'plain':!![]});var _0x5d7fd8=_0x7291('0x29');return db['UserProfileResource'][_0x7291('0x27')]({'where':{'type':_0x5d7fd8,'resourceId':_0x17839a['id']}})[_0x7291('0x26')](function(){return _0x56bf5f;});})['then'](function(){_0x4ef5e2[_0x7291('0x1c')](0xcc)[_0x7291('0x1d')]();});}};}function handleEntityNotFound(_0x32169c,_0xa6f1eb){return function(_0x1dfa36){if(!_0x1dfa36){_0x32169c[_0x7291('0x1b')](0x194);}return _0x1dfa36;};}function handleError(_0x3b099f,_0x110d11){_0x110d11=_0x110d11||0x1f4;return function(_0x3fd1d2){logger['error'](_0x3fd1d2[_0x7291('0x2a')]);if(_0x3fd1d2[_0x7291('0x2b')]){delete _0x3fd1d2['name'];}_0x3b099f[_0x7291('0x1c')](_0x110d11)[_0x7291('0x2c')](_0x3fd1d2);};}exports['index']=function(_0x386667,_0x45762f){var _0x522ef7={},_0x31207c={},_0x10e006={'count':0x0,'rows':[]};var _0xf32830=db['Trigger'][_0x7291('0x2d')];_0x31207c['model']=_['keys'](_0xf32830);_0x31207c[_0x7291('0x2e')]=_[_0x7291('0x2f')](_0x386667[_0x7291('0x2e')]);_0x31207c[_0x7291('0x30')]=_[_0x7291('0x31')](_0x31207c[_0x7291('0x32')],_0x31207c[_0x7291('0x2e')]);_0x522ef7[_0x7291('0x33')]=_[_0x7291('0x31')](_0x31207c[_0x7291('0x32')],qs[_0x7291('0x34')](_0x386667[_0x7291('0x2e')][_0x7291('0x34')]));_0x522ef7['attributes']=_0x522ef7[_0x7291('0x33')]['length']?_0x522ef7['attributes']:_0x31207c['model'];if(!_0x386667[_0x7291('0x2e')][_0x7291('0x35')](_0x7291('0x36'))){_0x522ef7[_0x7291('0x37')]=qs[_0x7291('0x37')](_0x386667['query'][_0x7291('0x37')]);_0x522ef7[_0x7291('0x20')]=qs['offset'](_0x386667[_0x7291('0x2e')][_0x7291('0x20')]);}_0x522ef7[_0x7291('0x38')]=qs[_0x7291('0x39')](_0x386667['query']['sort']);_0x522ef7[_0x7291('0x3a')]=qs[_0x7291('0x30')](_['pick'](_0x386667['query'],_0x31207c[_0x7291('0x30')]));if(_0x386667[_0x7291('0x2e')][_0x7291('0x3b')]){_0x522ef7[_0x7291('0x3a')]=_[_0x7291('0x3c')](_0x522ef7['where'],{'$or':_['map'](_0xf32830,function(_0x123107){if(_0x123107[_0x7291('0x3d')][_0x7291('0x3e')]!==_0x7291('0x3f')){var _0x1103d2={};_0x1103d2[_0x123107['field']]={'$like':'%'+_0x386667[_0x7291('0x2e')]['filter']+'%'};return _0x1103d2;}})});}_0x522ef7=_[_0x7291('0x3c')]({},_0x522ef7,_0x386667[_0x7291('0x40')]);var _0x4d8387={'where':_0x522ef7['where']};return db[_0x7291('0x41')][_0x7291('0x1f')](_0x4d8387)[_0x7291('0x26')](function(_0x46ea9b){_0x10e006[_0x7291('0x1f')]=_0x46ea9b;if(_0x386667[_0x7291('0x2e')][_0x7291('0x42')]){_0x522ef7[_0x7291('0x43')]=[{'all':!![]}];}return db[_0x7291('0x41')][_0x7291('0x44')](_0x522ef7);})[_0x7291('0x26')](function(_0x11885a){_0x10e006['rows']=_0x11885a;return _0x10e006;})[_0x7291('0x26')](respondWithFilteredResult(_0x45762f,_0x522ef7))[_0x7291('0x45')](handleError(_0x45762f,null));};exports[_0x7291('0x46')]=function(_0x42dff8,_0x34ad6){var _0x263815={'raw':![],'where':{'id':_0x42dff8[_0x7291('0x47')]['id']}},_0x5c60cd={};_0x5c60cd[_0x7291('0x32')]=_[_0x7291('0x2f')](db[_0x7291('0x41')]['rawAttributes']);_0x5c60cd[_0x7291('0x2e')]=_[_0x7291('0x2f')](_0x42dff8[_0x7291('0x2e')]);_0x5c60cd[_0x7291('0x30')]=_[_0x7291('0x31')](_0x5c60cd[_0x7291('0x32')],_0x5c60cd[_0x7291('0x2e')]);_0x263815[_0x7291('0x33')]=_[_0x7291('0x31')](_0x5c60cd['model'],qs[_0x7291('0x34')](_0x42dff8['query'][_0x7291('0x34')]));_0x263815[_0x7291('0x33')]=_0x263815[_0x7291('0x33')][_0x7291('0x48')]?_0x263815[_0x7291('0x33')]:_0x5c60cd[_0x7291('0x32')];if(_0x42dff8[_0x7291('0x2e')][_0x7291('0x42')]){_0x263815['include']=[{'all':!![]}];}_0x263815=_[_0x7291('0x3c')]({},_0x263815,_0x42dff8[_0x7291('0x40')]);return db[_0x7291('0x41')][_0x7291('0x49')](_0x263815)[_0x7291('0x26')](handleEntityNotFound(_0x34ad6,null))[_0x7291('0x26')](respondWithResult(_0x34ad6,null))[_0x7291('0x45')](handleError(_0x34ad6,null));};exports[_0x7291('0x4a')]=function(_0x2a408e,_0x1a3c15){return db[_0x7291('0x41')][_0x7291('0x4a')](_0x2a408e[_0x7291('0x4b')],{})[_0x7291('0x26')](function(_0xf728a9){var _0x22df4c=_0x2a408e['user'][_0x7291('0x28')]({'plain':!![]});if(!_0x22df4c)throw new Error(_0x7291('0x4c'));if(_0x22df4c['role']===_0x7291('0x4d')){var _0x108c0d=_0xf728a9[_0x7291('0x28')]({'plain':!![]});var _0x48566a='Triggers';return db[_0x7291('0x4e')]['find']({'where':{'name':_0x48566a,'userProfileId':_0x22df4c['userProfileId']},'raw':!![]})[_0x7291('0x26')](function(_0x1ae3fd){if(_0x1ae3fd&&_0x1ae3fd[_0x7291('0x4f')]===0x0){return db['UserProfileResource'][_0x7291('0x4a')]({'name':_0x108c0d[_0x7291('0x2b')],'resourceId':_0x108c0d['id'],'type':_0x1ae3fd[_0x7291('0x2b')],'sectionId':_0x1ae3fd['id']},{})[_0x7291('0x26')](function(){return _0xf728a9;});}else{return _0xf728a9;}})['catch'](function(_0x2a6081){logger['error'](_0x7291('0x50'),_0x2a6081);throw _0x2a6081;});}return _0xf728a9;})[_0x7291('0x26')](respondWithResult(_0x1a3c15,0xc9))[_0x7291('0x45')](handleError(_0x1a3c15,null));};exports[_0x7291('0x51')]=function(_0x1b93b9,_0x3cb537){if(_0x1b93b9[_0x7291('0x4b')]['id']){delete _0x1b93b9[_0x7291('0x4b')]['id'];}return db[_0x7291('0x41')][_0x7291('0x49')]({'where':{'id':_0x1b93b9['params']['id']}})[_0x7291('0x26')](handleEntityNotFound(_0x3cb537,null))[_0x7291('0x26')](saveUpdates(_0x1b93b9['body'],null))[_0x7291('0x26')](respondWithResult(_0x3cb537,null))[_0x7291('0x45')](handleError(_0x3cb537,null));};exports['destroy']=function(_0x5047ac,_0xb1e3d2){return db['Trigger'][_0x7291('0x49')]({'where':{'id':_0x5047ac[_0x7291('0x47')]['id']}})['then'](handleEntityNotFound(_0xb1e3d2,null))[_0x7291('0x26')](removeEntity(_0xb1e3d2,null))[_0x7291('0x45')](handleError(_0xb1e3d2,null));};exports[_0x7291('0x52')]=function(_0x326794,_0x50a4fb,_0x51ff3c){if(_0x326794['body']['id']){delete _0x326794[_0x7291('0x4b')]['id'];}return db[_0x7291('0x41')][_0x7291('0x49')]({'where':{'id':_0x326794[_0x7291('0x47')]['id']}})[_0x7291('0x26')](handleEntityNotFound(_0x50a4fb,null))['then'](function(_0x21a1cb){if(_0x21a1cb){_0x326794[_0x7291('0x4b')][_0x7291('0x53')]=_0x21a1cb['id'];return db[_0x7291('0x54')]['create'](_0x326794[_0x7291('0x4b')]);}})[_0x7291('0x26')](respondWithResult(_0x50a4fb,null))[_0x7291('0x45')](handleError(_0x50a4fb,null));};exports['addAnyCondition']=function(_0x28cfee,_0xd348b4,_0x5b24a3){if(_0x28cfee[_0x7291('0x4b')]['id']){delete _0x28cfee[_0x7291('0x4b')]['id'];}return db[_0x7291('0x41')][_0x7291('0x49')]({'where':{'id':_0x28cfee[_0x7291('0x47')]['id']}})['then'](handleEntityNotFound(_0xd348b4,null))[_0x7291('0x26')](function(_0x3498d6){if(_0x3498d6){_0x28cfee['body'][_0x7291('0x55')]=_0x3498d6['id'];return db[_0x7291('0x54')][_0x7291('0x4a')](_0x28cfee[_0x7291('0x4b')]);}})[_0x7291('0x26')](respondWithResult(_0xd348b4,null))[_0x7291('0x45')](handleError(_0xd348b4,null));};exports[_0x7291('0x56')]=function(_0x5098ed,_0x879b22,_0x1cac3e){var _0x4f8320={};var _0x595cb0={};var _0xf28521;var _0x1a6ac1;return db[_0x7291('0x41')][_0x7291('0x57')]({'where':{'id':_0x5098ed[_0x7291('0x47')]['id']}})[_0x7291('0x26')](handleEntityNotFound(_0x879b22,null))[_0x7291('0x26')](function(_0x53b8b8){if(_0x53b8b8){_0xf28521=_0x53b8b8;_0x595cb0[_0x7291('0x32')]=_[_0x7291('0x2f')](db[_0x7291('0x54')]['rawAttributes']);_0x595cb0[_0x7291('0x2e')]=_[_0x7291('0x2f')](_0x5098ed[_0x7291('0x2e')]);_0x595cb0[_0x7291('0x30')]=_['intersection'](_0x595cb0[_0x7291('0x32')],_0x595cb0[_0x7291('0x2e')]);_0x4f8320['attributes']=_[_0x7291('0x31')](_0x595cb0['model'],qs['fields'](_0x5098ed[_0x7291('0x2e')][_0x7291('0x34')]));_0x4f8320[_0x7291('0x33')]=_0x4f8320[_0x7291('0x33')]['length']?_0x4f8320[_0x7291('0x33')]:_0x595cb0[_0x7291('0x32')];_0x4f8320[_0x7291('0x38')]=qs[_0x7291('0x39')](_0x5098ed[_0x7291('0x2e')][_0x7291('0x39')]);_0x4f8320['where']=qs['filters'](_[_0x7291('0x58')](_0x5098ed[_0x7291('0x2e')],_0x595cb0['filters']));if(_0x5098ed[_0x7291('0x2e')][_0x7291('0x3b')]){_0x4f8320['where']=_[_0x7291('0x3c')](_0x4f8320[_0x7291('0x3a')],{'$or':_['map'](_0x4f8320[_0x7291('0x33')],function(_0x2f2a40){var _0x461f0d={};_0x461f0d[_0x2f2a40]={'$like':'%'+_0x5098ed['query'][_0x7291('0x3b')]+'%'};return _0x461f0d;})});}_0x4f8320=_[_0x7291('0x3c')]({},_0x4f8320,_0x5098ed[_0x7291('0x40')]);return _0xf28521[_0x7291('0x56')](_0x4f8320);}})[_0x7291('0x26')](function(_0x3ee410){if(_0x3ee410){_0x1a6ac1=_0x3ee410['length'];if(!_0x5098ed['query'][_0x7291('0x35')](_0x7291('0x36'))){_0x4f8320[_0x7291('0x37')]=qs[_0x7291('0x37')](_0x5098ed[_0x7291('0x2e')][_0x7291('0x37')]);_0x4f8320[_0x7291('0x20')]=qs[_0x7291('0x20')](_0x5098ed['query'][_0x7291('0x20')]);}return _0xf28521[_0x7291('0x56')](_0x4f8320);}})[_0x7291('0x26')](function(_0x57346d){if(_0x57346d){return _0x57346d?{'count':_0x1a6ac1,'rows':_0x57346d}:null;}})[_0x7291('0x26')](respondWithResult(_0x879b22,null))['catch'](handleError(_0x879b22,null));};exports['getAnyConditions']=function(_0x1bcab3,_0xd3acf1,_0x24b9c3){var _0x32f814={};var _0x2e321b={};var _0x383b9a;var _0x7713aa;return db['Trigger'][_0x7291('0x57')]({'where':{'id':_0x1bcab3[_0x7291('0x47')]['id']}})[_0x7291('0x26')](handleEntityNotFound(_0xd3acf1,null))[_0x7291('0x26')](function(_0x30ae4b){if(_0x30ae4b){_0x383b9a=_0x30ae4b;_0x2e321b[_0x7291('0x32')]=_[_0x7291('0x2f')](db[_0x7291('0x54')]['rawAttributes']);_0x2e321b[_0x7291('0x2e')]=_[_0x7291('0x2f')](_0x1bcab3[_0x7291('0x2e')]);_0x2e321b[_0x7291('0x30')]=_[_0x7291('0x31')](_0x2e321b[_0x7291('0x32')],_0x2e321b[_0x7291('0x2e')]);_0x32f814[_0x7291('0x33')]=_[_0x7291('0x31')](_0x2e321b[_0x7291('0x32')],qs[_0x7291('0x34')](_0x1bcab3['query'][_0x7291('0x34')]));_0x32f814[_0x7291('0x33')]=_0x32f814[_0x7291('0x33')][_0x7291('0x48')]?_0x32f814[_0x7291('0x33')]:_0x2e321b[_0x7291('0x32')];_0x32f814[_0x7291('0x38')]=qs[_0x7291('0x39')](_0x1bcab3[_0x7291('0x2e')]['sort']);_0x32f814[_0x7291('0x3a')]=qs[_0x7291('0x30')](_[_0x7291('0x58')](_0x1bcab3[_0x7291('0x2e')],_0x2e321b[_0x7291('0x30')]));if(_0x1bcab3[_0x7291('0x2e')][_0x7291('0x3b')]){_0x32f814[_0x7291('0x3a')]=_[_0x7291('0x3c')](_0x32f814['where'],{'$or':_['map'](_0x32f814[_0x7291('0x33')],function(_0x25632d){var _0x343fa9={};_0x343fa9[_0x25632d]={'$like':'%'+_0x1bcab3[_0x7291('0x2e')][_0x7291('0x3b')]+'%'};return _0x343fa9;})});}_0x32f814=_[_0x7291('0x3c')]({},_0x32f814,_0x1bcab3[_0x7291('0x40')]);return _0x383b9a[_0x7291('0x59')](_0x32f814);}})['then'](function(_0x546591){if(_0x546591){_0x7713aa=_0x546591[_0x7291('0x48')];if(!_0x1bcab3[_0x7291('0x2e')][_0x7291('0x35')](_0x7291('0x36'))){_0x32f814['limit']=qs[_0x7291('0x37')](_0x1bcab3[_0x7291('0x2e')][_0x7291('0x37')]);_0x32f814[_0x7291('0x20')]=qs[_0x7291('0x20')](_0x1bcab3['query']['offset']);}return _0x383b9a[_0x7291('0x59')](_0x32f814);}})[_0x7291('0x26')](function(_0x5843ce){if(_0x5843ce){return _0x5843ce?{'count':_0x7713aa,'rows':_0x5843ce}:null;}})['then'](respondWithResult(_0xd3acf1,null))['catch'](handleError(_0xd3acf1,null));};exports[_0x7291('0x5a')]=function(_0x1790dc,_0x2598e6,_0x33d540){if(_0x1790dc[_0x7291('0x4b')]['id']){delete _0x1790dc[_0x7291('0x4b')]['id'];}return db[_0x7291('0x41')][_0x7291('0x49')]({'where':{'id':_0x1790dc[_0x7291('0x47')]['id']}})[_0x7291('0x26')](handleEntityNotFound(_0x2598e6,null))[_0x7291('0x26')](function(_0x137742){if(_0x137742){_0x1790dc[_0x7291('0x4b')][_0x7291('0x5b')]=_0x137742['id'];return db[_0x7291('0x5c')][_0x7291('0x4a')](_0x1790dc[_0x7291('0x4b')]);}})[_0x7291('0x26')](respondWithResult(_0x2598e6,null))[_0x7291('0x45')](handleError(_0x2598e6,null));};exports['getActions']=function(_0x5853c0,_0x15e3c7,_0x2bde72){var _0x1e4b0d={};var _0x33c5d0={};var _0x40699e;var _0x583a6b;return db[_0x7291('0x41')][_0x7291('0x57')]({'where':{'id':_0x5853c0[_0x7291('0x47')]['id']}})['then'](handleEntityNotFound(_0x15e3c7,null))[_0x7291('0x26')](function(_0xcc6f93){if(_0xcc6f93){_0x40699e=_0xcc6f93;_0x33c5d0[_0x7291('0x32')]=_[_0x7291('0x2f')](db[_0x7291('0x5c')][_0x7291('0x2d')]);_0x33c5d0[_0x7291('0x2e')]=_[_0x7291('0x2f')](_0x5853c0[_0x7291('0x2e')]);_0x33c5d0[_0x7291('0x30')]=_['intersection'](_0x33c5d0[_0x7291('0x32')],_0x33c5d0['query']);_0x1e4b0d['attributes']=_[_0x7291('0x31')](_0x33c5d0[_0x7291('0x32')],qs[_0x7291('0x34')](_0x5853c0[_0x7291('0x2e')][_0x7291('0x34')]));_0x1e4b0d[_0x7291('0x33')]=_0x1e4b0d[_0x7291('0x33')][_0x7291('0x48')]?_0x1e4b0d['attributes']:_0x33c5d0[_0x7291('0x32')];_0x1e4b0d[_0x7291('0x38')]=qs[_0x7291('0x39')](_0x5853c0['query']['sort']);_0x1e4b0d[_0x7291('0x3a')]=qs[_0x7291('0x30')](_[_0x7291('0x58')](_0x5853c0[_0x7291('0x2e')],_0x33c5d0[_0x7291('0x30')]));if(_0x5853c0['query']['filter']){_0x1e4b0d[_0x7291('0x3a')]=_[_0x7291('0x3c')](_0x1e4b0d[_0x7291('0x3a')],{'$or':_[_0x7291('0x5d')](_0x1e4b0d[_0x7291('0x33')],function(_0xaaa99d){var _0x118911={};_0x118911[_0xaaa99d]={'$like':'%'+_0x5853c0[_0x7291('0x2e')][_0x7291('0x3b')]+'%'};return _0x118911;})});}_0x1e4b0d=_[_0x7291('0x3c')]({},_0x1e4b0d,_0x5853c0[_0x7291('0x40')]);return _0x40699e[_0x7291('0x5e')](_0x1e4b0d);}})[_0x7291('0x26')](function(_0xf0a7e2){if(_0xf0a7e2){_0x583a6b=_0xf0a7e2[_0x7291('0x48')];if(!_0x5853c0['query'][_0x7291('0x35')]('nolimit')){_0x1e4b0d[_0x7291('0x37')]=qs[_0x7291('0x37')](_0x5853c0[_0x7291('0x2e')]['limit']);_0x1e4b0d[_0x7291('0x20')]=qs['offset'](_0x5853c0[_0x7291('0x2e')]['offset']);}return _0x40699e[_0x7291('0x5e')](_0x1e4b0d);}})['then'](function(_0x327d51){if(_0x327d51){return _0x327d51?{'count':_0x583a6b,'rows':_0x327d51}:null;}})['then'](respondWithResult(_0x15e3c7,null))[_0x7291('0x45')](handleError(_0x15e3c7,null));};
\ No newline at end of file
+var _0x39aa=['TriggerAllId','Condition','addAnyCondition','TriggerAnyId','getAllConditions','findOne','getAnyConditions','addAction','Action','getActions','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','count','offset','set','Content-Range','json','apply','reject','save','update','then','get','Triggers','destroy','end','error','stack','name','send','index','Trigger','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','where','merge','map','type','VIRTUAL','field','filter','options','includeAll','include','rows','rawAttributes','find','catch','create','body','user','role','userProfileId','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params'];(function(_0x28d225,_0x43be18){var _0x1f79e1=function(_0x362c23){while(--_0x362c23){_0x28d225['push'](_0x28d225['shift']());}};_0x1f79e1(++_0x43be18);}(_0x39aa,0x11b));var _0xa39a=function(_0x3e9030,_0x16c384){_0x3e9030=_0x3e9030-0x0;var _0x526b49=_0x39aa[_0x3e9030];return _0x526b49;};'use strict';var pdf=require(_0xa39a('0x0'));var emlformat=require(_0xa39a('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xa39a('0x2'));var jsonpatch=require(_0xa39a('0x3'));var rp=require(_0xa39a('0x4'));var moment=require(_0xa39a('0x5'));var BPromise=require(_0xa39a('0x6'));var Mustache=require(_0xa39a('0x7'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0xa39a('0x8'));var ejs=require(_0xa39a('0x9'));var fs=require('fs');var _=require(_0xa39a('0xa'));var squel=require(_0xa39a('0xb'));var crypto=require(_0xa39a('0xc'));var jsforce=require(_0xa39a('0xd'));var deskjs=require(_0xa39a('0xe'));var toCsv=require('to-csv');var querystring=require(_0xa39a('0xf'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xa39a('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xa39a('0x11'))(_0xa39a('0x12'));var utils=require(_0xa39a('0x13'));var config=require(_0xa39a('0x14'));var db=require(_0xa39a('0x15'))['db'];function respondWithStatusCode(_0x1f72f7,_0x2f7468){_0x2f7468=_0x2f7468||0xcc;return function(_0x322920){if(_0x322920){return _0x1f72f7[_0xa39a('0x16')](_0x2f7468);}return _0x1f72f7['status'](_0x2f7468)['end']();};}function respondWithResult(_0x917676,_0x23262d){_0x23262d=_0x23262d||0xc8;return function(_0x5dae72){if(_0x5dae72){return _0x917676[_0xa39a('0x17')](_0x23262d)['json'](_0x5dae72);}};}function respondWithFilteredResult(_0x3d858f,_0x4fd8dd){return function(_0x901e2a){if(_0x901e2a){var _0x4a94d2=_0x901e2a[_0xa39a('0x18')],_0x1e1015=_0x4fd8dd[_0xa39a('0x19')],_0x13c972=_0x4fd8dd[_0xa39a('0x19')]+_0x4fd8dd['limit'],_0x441222;if(_0x13c972>=_0x4a94d2){_0x13c972=_0x4a94d2;_0x441222=0xc8;}else{_0x441222=0xce;}_0x3d858f[_0xa39a('0x17')](_0x441222);return _0x3d858f[_0xa39a('0x1a')](_0xa39a('0x1b'),_0x1e1015+'-'+_0x13c972+'/'+_0x4a94d2)[_0xa39a('0x1c')](_0x901e2a);}return null;};}function patchUpdates(_0x2a8658){return function(_0x461657){try{jsonpatch[_0xa39a('0x1d')](_0x461657,_0x2a8658,!![]);}catch(_0x38a7e9){return BPromise[_0xa39a('0x1e')](_0x38a7e9);}return _0x461657[_0xa39a('0x1f')]();};}function saveUpdates(_0x12681b,_0x4638a2){return function(_0x5ac99f){if(_0x5ac99f){return _0x5ac99f[_0xa39a('0x20')](_0x12681b)[_0xa39a('0x21')](function(_0x562316){return _0x562316;});}return null;};}function removeEntity(_0x1b1976,_0x1ef8e8){return function(_0x549967){if(_0x549967){return _0x549967['destroy']()[_0xa39a('0x21')](function(){var _0x988b40=_0x549967[_0xa39a('0x22')]({'plain':!![]});var _0x58cf77=_0xa39a('0x23');return db['UserProfileResource'][_0xa39a('0x24')]({'where':{'type':_0x58cf77,'resourceId':_0x988b40['id']}})[_0xa39a('0x21')](function(){return _0x549967;});})[_0xa39a('0x21')](function(){_0x1b1976[_0xa39a('0x17')](0xcc)[_0xa39a('0x25')]();});}};}function handleEntityNotFound(_0x4e2117,_0x3cd3ca){return function(_0x17bcbe){if(!_0x17bcbe){_0x4e2117[_0xa39a('0x16')](0x194);}return _0x17bcbe;};}function handleError(_0xebd768,_0x4dd3ca){_0x4dd3ca=_0x4dd3ca||0x1f4;return function(_0x528cba){logger[_0xa39a('0x26')](_0x528cba[_0xa39a('0x27')]);if(_0x528cba['name']){delete _0x528cba[_0xa39a('0x28')];}_0xebd768['status'](_0x4dd3ca)[_0xa39a('0x29')](_0x528cba);};}exports[_0xa39a('0x2a')]=function(_0x4ad695,_0x7d8d01){var _0x1a9efb={},_0x3d7733={},_0x15189d={'count':0x0,'rows':[]};var _0x521cf1=db[_0xa39a('0x2b')]['rawAttributes'];_0x3d7733[_0xa39a('0x2c')]=_[_0xa39a('0x2d')](_0x521cf1);_0x3d7733[_0xa39a('0x2e')]=_[_0xa39a('0x2d')](_0x4ad695['query']);_0x3d7733[_0xa39a('0x2f')]=_[_0xa39a('0x30')](_0x3d7733['model'],_0x3d7733[_0xa39a('0x2e')]);_0x1a9efb[_0xa39a('0x31')]=_['intersection'](_0x3d7733['model'],qs[_0xa39a('0x32')](_0x4ad695['query'][_0xa39a('0x32')]));_0x1a9efb[_0xa39a('0x31')]=_0x1a9efb['attributes'][_0xa39a('0x33')]?_0x1a9efb[_0xa39a('0x31')]:_0x3d7733[_0xa39a('0x2c')];if(!_0x4ad695[_0xa39a('0x2e')][_0xa39a('0x34')](_0xa39a('0x35'))){_0x1a9efb[_0xa39a('0x36')]=qs[_0xa39a('0x36')](_0x4ad695[_0xa39a('0x2e')][_0xa39a('0x36')]);_0x1a9efb[_0xa39a('0x19')]=qs[_0xa39a('0x19')](_0x4ad695[_0xa39a('0x2e')][_0xa39a('0x19')]);}_0x1a9efb[_0xa39a('0x37')]=qs['sort'](_0x4ad695['query'][_0xa39a('0x38')]);_0x1a9efb['where']=qs[_0xa39a('0x2f')](_[_0xa39a('0x39')](_0x4ad695['query'],_0x3d7733[_0xa39a('0x2f')]));if(_0x4ad695[_0xa39a('0x2e')]['filter']){_0x1a9efb[_0xa39a('0x3a')]=_[_0xa39a('0x3b')](_0x1a9efb[_0xa39a('0x3a')],{'$or':_[_0xa39a('0x3c')](_0x521cf1,function(_0x736134){if(_0x736134[_0xa39a('0x3d')]['key']!==_0xa39a('0x3e')){var _0x55b4dc={};_0x55b4dc[_0x736134[_0xa39a('0x3f')]]={'$like':'%'+_0x4ad695['query'][_0xa39a('0x40')]+'%'};return _0x55b4dc;}})});}_0x1a9efb=_[_0xa39a('0x3b')]({},_0x1a9efb,_0x4ad695[_0xa39a('0x41')]);var _0x102075={'where':_0x1a9efb['where']};return db[_0xa39a('0x2b')]['count'](_0x102075)['then'](function(_0x63c09a){_0x15189d[_0xa39a('0x18')]=_0x63c09a;if(_0x4ad695[_0xa39a('0x2e')][_0xa39a('0x42')]){_0x1a9efb[_0xa39a('0x43')]=[{'all':!![]}];}return db[_0xa39a('0x2b')]['findAll'](_0x1a9efb);})[_0xa39a('0x21')](function(_0x4677a4){_0x15189d[_0xa39a('0x44')]=_0x4677a4;return _0x15189d;})[_0xa39a('0x21')](respondWithFilteredResult(_0x7d8d01,_0x1a9efb))['catch'](handleError(_0x7d8d01,null));};exports['show']=function(_0x132f8e,_0xc6db1d){var _0x3911ad={'raw':![],'where':{'id':_0x132f8e['params']['id']}},_0x4e1311={};_0x4e1311[_0xa39a('0x2c')]=_[_0xa39a('0x2d')](db[_0xa39a('0x2b')][_0xa39a('0x45')]);_0x4e1311[_0xa39a('0x2e')]=_[_0xa39a('0x2d')](_0x132f8e[_0xa39a('0x2e')]);_0x4e1311[_0xa39a('0x2f')]=_[_0xa39a('0x30')](_0x4e1311[_0xa39a('0x2c')],_0x4e1311[_0xa39a('0x2e')]);_0x3911ad[_0xa39a('0x31')]=_[_0xa39a('0x30')](_0x4e1311[_0xa39a('0x2c')],qs[_0xa39a('0x32')](_0x132f8e[_0xa39a('0x2e')]['fields']));_0x3911ad[_0xa39a('0x31')]=_0x3911ad['attributes'][_0xa39a('0x33')]?_0x3911ad['attributes']:_0x4e1311['model'];if(_0x132f8e['query'][_0xa39a('0x42')]){_0x3911ad[_0xa39a('0x43')]=[{'all':!![]}];}_0x3911ad=_[_0xa39a('0x3b')]({},_0x3911ad,_0x132f8e[_0xa39a('0x41')]);return db[_0xa39a('0x2b')][_0xa39a('0x46')](_0x3911ad)['then'](handleEntityNotFound(_0xc6db1d,null))[_0xa39a('0x21')](respondWithResult(_0xc6db1d,null))[_0xa39a('0x47')](handleError(_0xc6db1d,null));};exports[_0xa39a('0x48')]=function(_0x395786,_0x40172d){return db[_0xa39a('0x2b')]['create'](_0x395786[_0xa39a('0x49')],{})[_0xa39a('0x21')](function(_0x50fe66){var _0x3ba31e=_0x395786[_0xa39a('0x4a')][_0xa39a('0x22')]({'plain':!![]});if(!_0x3ba31e)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x3ba31e[_0xa39a('0x4b')]===_0xa39a('0x4a')){var _0xd77c77=_0x50fe66[_0xa39a('0x22')]({'plain':!![]});var _0x221e8c=_0xa39a('0x23');return db['UserProfileSection']['find']({'where':{'name':_0x221e8c,'userProfileId':_0x3ba31e[_0xa39a('0x4c')]},'raw':!![]})[_0xa39a('0x21')](function(_0x1b5c0b){if(_0x1b5c0b&&_0x1b5c0b[_0xa39a('0x4d')]===0x0){return db[_0xa39a('0x4e')][_0xa39a('0x48')]({'name':_0xd77c77['name'],'resourceId':_0xd77c77['id'],'type':_0x1b5c0b[_0xa39a('0x28')],'sectionId':_0x1b5c0b['id']},{})[_0xa39a('0x21')](function(){return _0x50fe66;});}else{return _0x50fe66;}})['catch'](function(_0x1a8a78){logger[_0xa39a('0x26')](_0xa39a('0x4f'),_0x1a8a78);throw _0x1a8a78;});}return _0x50fe66;})[_0xa39a('0x21')](respondWithResult(_0x40172d,0xc9))[_0xa39a('0x47')](handleError(_0x40172d,null));};exports[_0xa39a('0x20')]=function(_0x3b7960,_0x243c7c){if(_0x3b7960[_0xa39a('0x49')]['id']){delete _0x3b7960['body']['id'];}return db[_0xa39a('0x2b')][_0xa39a('0x46')]({'where':{'id':_0x3b7960['params']['id']}})[_0xa39a('0x21')](handleEntityNotFound(_0x243c7c,null))[_0xa39a('0x21')](saveUpdates(_0x3b7960[_0xa39a('0x49')],null))[_0xa39a('0x21')](respondWithResult(_0x243c7c,null))[_0xa39a('0x47')](handleError(_0x243c7c,null));};exports[_0xa39a('0x24')]=function(_0x3ed777,_0x2afbd0){return db[_0xa39a('0x2b')][_0xa39a('0x46')]({'where':{'id':_0x3ed777[_0xa39a('0x50')]['id']}})[_0xa39a('0x21')](handleEntityNotFound(_0x2afbd0,null))[_0xa39a('0x21')](removeEntity(_0x2afbd0,null))[_0xa39a('0x47')](handleError(_0x2afbd0,null));};exports['addAllCondition']=function(_0x482b6a,_0x54a827,_0x1b3f56){if(_0x482b6a[_0xa39a('0x49')]['id']){delete _0x482b6a[_0xa39a('0x49')]['id'];}return db[_0xa39a('0x2b')]['find']({'where':{'id':_0x482b6a[_0xa39a('0x50')]['id']}})['then'](handleEntityNotFound(_0x54a827,null))[_0xa39a('0x21')](function(_0xb58911){if(_0xb58911){_0x482b6a[_0xa39a('0x49')][_0xa39a('0x51')]=_0xb58911['id'];return db[_0xa39a('0x52')][_0xa39a('0x48')](_0x482b6a[_0xa39a('0x49')]);}})[_0xa39a('0x21')](respondWithResult(_0x54a827,null))[_0xa39a('0x47')](handleError(_0x54a827,null));};exports[_0xa39a('0x53')]=function(_0x31dcb4,_0x5d99de,_0x43cced){if(_0x31dcb4[_0xa39a('0x49')]['id']){delete _0x31dcb4[_0xa39a('0x49')]['id'];}return db[_0xa39a('0x2b')]['find']({'where':{'id':_0x31dcb4[_0xa39a('0x50')]['id']}})['then'](handleEntityNotFound(_0x5d99de,null))[_0xa39a('0x21')](function(_0x16f952){if(_0x16f952){_0x31dcb4[_0xa39a('0x49')][_0xa39a('0x54')]=_0x16f952['id'];return db['Condition'][_0xa39a('0x48')](_0x31dcb4[_0xa39a('0x49')]);}})[_0xa39a('0x21')](respondWithResult(_0x5d99de,null))[_0xa39a('0x47')](handleError(_0x5d99de,null));};exports[_0xa39a('0x55')]=function(_0x2a207d,_0x3ad002,_0xeaaebb){var _0x1340f1={};var _0x140cd1={};var _0x3f2a06;var _0x3af15f;return db[_0xa39a('0x2b')][_0xa39a('0x56')]({'where':{'id':_0x2a207d[_0xa39a('0x50')]['id']}})[_0xa39a('0x21')](handleEntityNotFound(_0x3ad002,null))[_0xa39a('0x21')](function(_0x46ec7b){if(_0x46ec7b){_0x3f2a06=_0x46ec7b;_0x140cd1[_0xa39a('0x2c')]=_[_0xa39a('0x2d')](db[_0xa39a('0x52')][_0xa39a('0x45')]);_0x140cd1[_0xa39a('0x2e')]=_[_0xa39a('0x2d')](_0x2a207d[_0xa39a('0x2e')]);_0x140cd1[_0xa39a('0x2f')]=_[_0xa39a('0x30')](_0x140cd1[_0xa39a('0x2c')],_0x140cd1[_0xa39a('0x2e')]);_0x1340f1[_0xa39a('0x31')]=_[_0xa39a('0x30')](_0x140cd1['model'],qs[_0xa39a('0x32')](_0x2a207d[_0xa39a('0x2e')][_0xa39a('0x32')]));_0x1340f1[_0xa39a('0x31')]=_0x1340f1[_0xa39a('0x31')]['length']?_0x1340f1['attributes']:_0x140cd1['model'];_0x1340f1[_0xa39a('0x37')]=qs[_0xa39a('0x38')](_0x2a207d[_0xa39a('0x2e')][_0xa39a('0x38')]);_0x1340f1['where']=qs['filters'](_[_0xa39a('0x39')](_0x2a207d[_0xa39a('0x2e')],_0x140cd1[_0xa39a('0x2f')]));if(_0x2a207d['query'][_0xa39a('0x40')]){_0x1340f1[_0xa39a('0x3a')]=_['merge'](_0x1340f1['where'],{'$or':_[_0xa39a('0x3c')](_0x1340f1[_0xa39a('0x31')],function(_0x4ef0ef){var _0x383cde={};_0x383cde[_0x4ef0ef]={'$like':'%'+_0x2a207d[_0xa39a('0x2e')][_0xa39a('0x40')]+'%'};return _0x383cde;})});}_0x1340f1=_[_0xa39a('0x3b')]({},_0x1340f1,_0x2a207d[_0xa39a('0x41')]);return _0x3f2a06[_0xa39a('0x55')](_0x1340f1);}})[_0xa39a('0x21')](function(_0x3e468f){if(_0x3e468f){_0x3af15f=_0x3e468f[_0xa39a('0x33')];if(!_0x2a207d[_0xa39a('0x2e')]['hasOwnProperty'](_0xa39a('0x35'))){_0x1340f1[_0xa39a('0x36')]=qs[_0xa39a('0x36')](_0x2a207d[_0xa39a('0x2e')][_0xa39a('0x36')]);_0x1340f1['offset']=qs[_0xa39a('0x19')](_0x2a207d[_0xa39a('0x2e')]['offset']);}return _0x3f2a06[_0xa39a('0x55')](_0x1340f1);}})[_0xa39a('0x21')](function(_0x1798cb){if(_0x1798cb){return _0x1798cb?{'count':_0x3af15f,'rows':_0x1798cb}:null;}})['then'](respondWithResult(_0x3ad002,null))[_0xa39a('0x47')](handleError(_0x3ad002,null));};exports[_0xa39a('0x57')]=function(_0x1640c1,_0x1701dd,_0x29b464){var _0x262206={};var _0x49a366={};var _0x516a44;var _0x44e6f5;return db[_0xa39a('0x2b')]['findOne']({'where':{'id':_0x1640c1[_0xa39a('0x50')]['id']}})[_0xa39a('0x21')](handleEntityNotFound(_0x1701dd,null))[_0xa39a('0x21')](function(_0x4a2858){if(_0x4a2858){_0x516a44=_0x4a2858;_0x49a366['model']=_[_0xa39a('0x2d')](db[_0xa39a('0x52')][_0xa39a('0x45')]);_0x49a366[_0xa39a('0x2e')]=_[_0xa39a('0x2d')](_0x1640c1[_0xa39a('0x2e')]);_0x49a366[_0xa39a('0x2f')]=_[_0xa39a('0x30')](_0x49a366[_0xa39a('0x2c')],_0x49a366[_0xa39a('0x2e')]);_0x262206[_0xa39a('0x31')]=_[_0xa39a('0x30')](_0x49a366[_0xa39a('0x2c')],qs[_0xa39a('0x32')](_0x1640c1['query'][_0xa39a('0x32')]));_0x262206[_0xa39a('0x31')]=_0x262206['attributes'][_0xa39a('0x33')]?_0x262206[_0xa39a('0x31')]:_0x49a366[_0xa39a('0x2c')];_0x262206[_0xa39a('0x37')]=qs[_0xa39a('0x38')](_0x1640c1[_0xa39a('0x2e')][_0xa39a('0x38')]);_0x262206[_0xa39a('0x3a')]=qs[_0xa39a('0x2f')](_[_0xa39a('0x39')](_0x1640c1[_0xa39a('0x2e')],_0x49a366[_0xa39a('0x2f')]));if(_0x1640c1[_0xa39a('0x2e')][_0xa39a('0x40')]){_0x262206[_0xa39a('0x3a')]=_[_0xa39a('0x3b')](_0x262206[_0xa39a('0x3a')],{'$or':_['map'](_0x262206[_0xa39a('0x31')],function(_0x2b5ef1){var _0x3c6aad={};_0x3c6aad[_0x2b5ef1]={'$like':'%'+_0x1640c1['query'][_0xa39a('0x40')]+'%'};return _0x3c6aad;})});}_0x262206=_['merge']({},_0x262206,_0x1640c1[_0xa39a('0x41')]);return _0x516a44['getAnyConditions'](_0x262206);}})[_0xa39a('0x21')](function(_0x5626ea){if(_0x5626ea){_0x44e6f5=_0x5626ea['length'];if(!_0x1640c1[_0xa39a('0x2e')]['hasOwnProperty'](_0xa39a('0x35'))){_0x262206[_0xa39a('0x36')]=qs[_0xa39a('0x36')](_0x1640c1['query'][_0xa39a('0x36')]);_0x262206[_0xa39a('0x19')]=qs[_0xa39a('0x19')](_0x1640c1['query'][_0xa39a('0x19')]);}return _0x516a44[_0xa39a('0x57')](_0x262206);}})[_0xa39a('0x21')](function(_0x265f70){if(_0x265f70){return _0x265f70?{'count':_0x44e6f5,'rows':_0x265f70}:null;}})[_0xa39a('0x21')](respondWithResult(_0x1701dd,null))[_0xa39a('0x47')](handleError(_0x1701dd,null));};exports[_0xa39a('0x58')]=function(_0x19afb2,_0x2b40b6,_0x160c8f){if(_0x19afb2[_0xa39a('0x49')]['id']){delete _0x19afb2[_0xa39a('0x49')]['id'];}return db['Trigger'][_0xa39a('0x46')]({'where':{'id':_0x19afb2[_0xa39a('0x50')]['id']}})[_0xa39a('0x21')](handleEntityNotFound(_0x2b40b6,null))['then'](function(_0x398564){if(_0x398564){_0x19afb2[_0xa39a('0x49')]['TriggerId']=_0x398564['id'];return db[_0xa39a('0x59')]['create'](_0x19afb2[_0xa39a('0x49')]);}})['then'](respondWithResult(_0x2b40b6,null))[_0xa39a('0x47')](handleError(_0x2b40b6,null));};exports['getActions']=function(_0x1fbb84,_0x3f0b08,_0x314dc1){var _0x138d82={};var _0x3f4fcf={};var _0xd682b4;var _0x109242;return db['Trigger'][_0xa39a('0x56')]({'where':{'id':_0x1fbb84[_0xa39a('0x50')]['id']}})[_0xa39a('0x21')](handleEntityNotFound(_0x3f0b08,null))[_0xa39a('0x21')](function(_0x10fa4e){if(_0x10fa4e){_0xd682b4=_0x10fa4e;_0x3f4fcf[_0xa39a('0x2c')]=_[_0xa39a('0x2d')](db[_0xa39a('0x59')][_0xa39a('0x45')]);_0x3f4fcf['query']=_[_0xa39a('0x2d')](_0x1fbb84['query']);_0x3f4fcf[_0xa39a('0x2f')]=_['intersection'](_0x3f4fcf[_0xa39a('0x2c')],_0x3f4fcf[_0xa39a('0x2e')]);_0x138d82[_0xa39a('0x31')]=_['intersection'](_0x3f4fcf[_0xa39a('0x2c')],qs[_0xa39a('0x32')](_0x1fbb84[_0xa39a('0x2e')]['fields']));_0x138d82[_0xa39a('0x31')]=_0x138d82[_0xa39a('0x31')]['length']?_0x138d82[_0xa39a('0x31')]:_0x3f4fcf[_0xa39a('0x2c')];_0x138d82['order']=qs[_0xa39a('0x38')](_0x1fbb84['query'][_0xa39a('0x38')]);_0x138d82[_0xa39a('0x3a')]=qs['filters'](_['pick'](_0x1fbb84[_0xa39a('0x2e')],_0x3f4fcf[_0xa39a('0x2f')]));if(_0x1fbb84[_0xa39a('0x2e')]['filter']){_0x138d82['where']=_[_0xa39a('0x3b')](_0x138d82[_0xa39a('0x3a')],{'$or':_[_0xa39a('0x3c')](_0x138d82[_0xa39a('0x31')],function(_0x284fc7){var _0x2b21e1={};_0x2b21e1[_0x284fc7]={'$like':'%'+_0x1fbb84[_0xa39a('0x2e')][_0xa39a('0x40')]+'%'};return _0x2b21e1;})});}_0x138d82=_[_0xa39a('0x3b')]({},_0x138d82,_0x1fbb84['options']);return _0xd682b4[_0xa39a('0x5a')](_0x138d82);}})[_0xa39a('0x21')](function(_0x22d2cb){if(_0x22d2cb){_0x109242=_0x22d2cb[_0xa39a('0x33')];if(!_0x1fbb84[_0xa39a('0x2e')][_0xa39a('0x34')](_0xa39a('0x35'))){_0x138d82[_0xa39a('0x36')]=qs['limit'](_0x1fbb84[_0xa39a('0x2e')][_0xa39a('0x36')]);_0x138d82[_0xa39a('0x19')]=qs[_0xa39a('0x19')](_0x1fbb84[_0xa39a('0x2e')][_0xa39a('0x19')]);}return _0xd682b4[_0xa39a('0x5a')](_0x138d82);}})[_0xa39a('0x21')](function(_0x4221a9){if(_0x4221a9){return _0x4221a9?{'count':_0x109242,'rows':_0x4221a9}:null;}})['then'](respondWithResult(_0x3f0b08,null))[_0xa39a('0x47')](handleError(_0x3f0b08,null));};
\ No newline at end of file
index ae8e92b..572bd19 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0713=['moment','bluebird','request-promise','rimraf','../../config/environment','./trigger.attributes','exports','define','Trigger','tools_triggers','../../config/logger','api'];(function(_0x4d1c6b,_0x2b5236){var _0x249475=function(_0xab55e4){while(--_0xab55e4){_0x4d1c6b['push'](_0x4d1c6b['shift']());}};_0x249475(++_0x2b5236);}(_0x0713,0x1ba));var _0x3071=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0713[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x3071('0x0'))(_0x3071('0x1'));var moment=require(_0x3071('0x2'));var BPromise=require(_0x3071('0x3'));var rp=require(_0x3071('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x3071('0x5'));var config=require(_0x3071('0x6'));var attributes=require(_0x3071('0x7'));module[_0x3071('0x8')]=function(_0xabd7b6,_0x41cf76){return _0xabd7b6[_0x3071('0x9')](_0x3071('0xa'),attributes,{'tableName':_0x3071('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb7e7=['Trigger','lodash','../../config/logger','moment','request-promise','rimraf','../../config/environment','./trigger.attributes','define'];(function(_0x21c001,_0xb01b9c){var _0x2ee97b=function(_0xb26016){while(--_0xb26016){_0x21c001['push'](_0x21c001['shift']());}};_0x2ee97b(++_0xb01b9c);}(_0xb7e7,0x121));var _0x7b7e=function(_0x4b2863,_0x494899){_0x4b2863=_0x4b2863-0x0;var _0x567d67=_0xb7e7[_0x4b2863];return _0x567d67;};'use strict';var _=require(_0x7b7e('0x0'));var util=require('util');var logger=require(_0x7b7e('0x1'))('api');var moment=require(_0x7b7e('0x2'));var BPromise=require('bluebird');var rp=require(_0x7b7e('0x3'));var fs=require('fs');var path=require('path');var rimraf=require(_0x7b7e('0x4'));var config=require(_0x7b7e('0x5'));var attributes=require(_0x7b7e('0x6'));module['exports']=function(_0x53ed64,_0x333fa4){return _0x53ed64[_0x7b7e('0x7')](_0x7b7e('0x8'),attributes,{'tableName':'tools_triggers','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index f4668f5..3e5b636 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa2c8=['catch','ShowTrigger','lodash','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','info','request\x20sent','debug','Trigger,\x20%s,\x20%s,\x20%s','stringify','code','error','message','Trigger,\x20%s,\x20%s','result','GetTrigger','Trigger','findAll','options','raw','where','attributes','include','map','model','then'];(function(_0x846918,_0x20d1fa){var _0x29a40c=function(_0xd79323){while(--_0xd79323){_0x846918['push'](_0x846918['shift']());}};_0x29a40c(++_0x20d1fa);}(_0xa2c8,0x11a));var _0x8a2c=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xa2c8[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0x8a2c('0x0'));var util=require(_0x8a2c('0x1'));var moment=require(_0x8a2c('0x2'));var BPromise=require(_0x8a2c('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x8a2c('0x4'))['db'];var utils=require(_0x8a2c('0x5'));var logger=require(_0x8a2c('0x6'))(_0x8a2c('0x7'));var config=require(_0x8a2c('0x8'));var jayson=require(_0x8a2c('0x9'));var client=jayson['client'][_0x8a2c('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x74e652,_0x4d0490,_0x118f69){return new BPromise(function(_0x132494,_0x32b0d6){return client[_0x8a2c('0xb')](_0x74e652,_0x118f69)['then'](function(_0x3b3969){logger[_0x8a2c('0xc')]('Trigger,\x20%s,\x20%s',_0x4d0490,_0x8a2c('0xd'));logger[_0x8a2c('0xe')](_0x8a2c('0xf'),_0x4d0490,_0x8a2c('0xd'),JSON[_0x8a2c('0x10')](_0x3b3969));if(_0x3b3969['error']){if(_0x3b3969['error'][_0x8a2c('0x11')]===0x1f4){logger[_0x8a2c('0x12')]('Trigger,\x20%s,\x20%s',_0x4d0490,_0x3b3969[_0x8a2c('0x12')][_0x8a2c('0x13')]);return _0x32b0d6(_0x3b3969[_0x8a2c('0x12')][_0x8a2c('0x13')]);}logger[_0x8a2c('0x12')](_0x8a2c('0x14'),_0x4d0490,_0x3b3969[_0x8a2c('0x12')]['message']);return _0x132494(_0x3b3969['error'][_0x8a2c('0x13')]);}else{logger['info']('Trigger,\x20%s,\x20%s',_0x4d0490,_0x8a2c('0xd'));_0x132494(_0x3b3969[_0x8a2c('0x15')]['message']);}})['catch'](function(_0xa05e33){logger[_0x8a2c('0x12')](_0x8a2c('0x14'),_0x4d0490,_0xa05e33);_0x32b0d6(_0xa05e33);});});}exports[_0x8a2c('0x16')]=function(_0x4c04d5){var _0x231fdc=this;return new Promise(function(_0x4d7654,_0x5ccdd5){return db[_0x8a2c('0x17')][_0x8a2c('0x18')]({'raw':_0x4c04d5[_0x8a2c('0x19')]?_0x4c04d5[_0x8a2c('0x19')][_0x8a2c('0x1a')]===undefined?!![]:![]:!![],'where':_0x4c04d5[_0x8a2c('0x19')]?_0x4c04d5[_0x8a2c('0x19')][_0x8a2c('0x1b')]||null:null,'attributes':_0x4c04d5['options']?_0x4c04d5[_0x8a2c('0x19')][_0x8a2c('0x1c')]||null:null,'limit':_0x4c04d5[_0x8a2c('0x19')]?_0x4c04d5[_0x8a2c('0x19')]['limit']||null:null,'include':_0x4c04d5[_0x8a2c('0x19')]?_0x4c04d5[_0x8a2c('0x19')][_0x8a2c('0x1d')]?_[_0x8a2c('0x1e')](_0x4c04d5[_0x8a2c('0x19')][_0x8a2c('0x1d')],function(_0x1418a3){return{'model':db[_0x1418a3['model']],'as':_0x1418a3['as'],'attributes':_0x1418a3['attributes'],'include':_0x1418a3[_0x8a2c('0x1d')]?_[_0x8a2c('0x1e')](_0x1418a3['include'],function(_0x45c8d6){return{'model':db[_0x45c8d6[_0x8a2c('0x1f')]],'as':_0x45c8d6['as'],'attributes':_0x45c8d6[_0x8a2c('0x1c')],'include':_0x45c8d6[_0x8a2c('0x1d')]?_[_0x8a2c('0x1e')](_0x45c8d6[_0x8a2c('0x1d')],function(_0x15bb6e){return{'model':db[_0x15bb6e['model']],'as':_0x15bb6e['as'],'attributes':_0x15bb6e[_0x8a2c('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x8a2c('0x20')](function(_0x3abdf1){logger[_0x8a2c('0xc')]('GetTrigger',_0x4c04d5);logger[_0x8a2c('0xe')]('GetTrigger',_0x4c04d5,JSON[_0x8a2c('0x10')](_0x3abdf1));_0x4d7654(_0x3abdf1);})[_0x8a2c('0x21')](function(_0x3d39c6){logger['error']('GetTrigger',_0x3d39c6[_0x8a2c('0x13')],_0x4c04d5);_0x5ccdd5(_0x231fdc[_0x8a2c('0x12')](0x1f4,_0x3d39c6[_0x8a2c('0x13')]));});});};exports[_0x8a2c('0x22')]=function(_0x46bc6b){var _0x22cc0b=this;return new Promise(function(_0x531dbe,_0x3a1a32){return db['Trigger']['find']({'raw':_0x46bc6b[_0x8a2c('0x19')]?_0x46bc6b[_0x8a2c('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x46bc6b[_0x8a2c('0x19')]?_0x46bc6b[_0x8a2c('0x19')][_0x8a2c('0x1b')]||null:null,'attributes':_0x46bc6b[_0x8a2c('0x19')]?_0x46bc6b[_0x8a2c('0x19')][_0x8a2c('0x1c')]||null:null,'include':_0x46bc6b[_0x8a2c('0x19')]?_0x46bc6b[_0x8a2c('0x19')][_0x8a2c('0x1d')]?_[_0x8a2c('0x1e')](_0x46bc6b['options'][_0x8a2c('0x1d')],function(_0x2013b6){return{'model':db[_0x2013b6['model']],'as':_0x2013b6['as'],'attributes':_0x2013b6[_0x8a2c('0x1c')],'include':_0x2013b6['include']?_['map'](_0x2013b6[_0x8a2c('0x1d')],function(_0x136acc){return{'model':db[_0x136acc[_0x8a2c('0x1f')]],'as':_0x136acc['as'],'attributes':_0x136acc[_0x8a2c('0x1c')],'include':_0x136acc[_0x8a2c('0x1d')]?_[_0x8a2c('0x1e')](_0x136acc[_0x8a2c('0x1d')],function(_0xe5d32a){return{'model':db[_0xe5d32a[_0x8a2c('0x1f')]],'as':_0xe5d32a['as'],'attributes':_0xe5d32a[_0x8a2c('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x8a2c('0x20')](function(_0x51e699){logger['info'](_0x8a2c('0x22'),_0x46bc6b);logger[_0x8a2c('0xe')](_0x8a2c('0x22'),_0x46bc6b,JSON[_0x8a2c('0x10')](_0x51e699));_0x531dbe(_0x51e699);})[_0x8a2c('0x21')](function(_0xa1e827){logger['error']('ShowTrigger',_0xa1e827[_0x8a2c('0x13')],_0x46bc6b);_0x3a1a32(_0x22cc0b['error'](0x1f4,_0xa1e827[_0x8a2c('0x13')]));});});};
\ No newline at end of file
+var _0xc3fb=['request\x20sent','debug','Trigger,\x20%s,\x20%s,\x20%s','stringify','error','code','Trigger,\x20%s,\x20%s','result','message','catch','GetTrigger','findAll','options','raw','where','attributes','limit','include','map','model','Trigger','find','ShowTrigger','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info'];(function(_0x2ffc7d,_0x36d425){var _0x456b3f=function(_0x26e237){while(--_0x26e237){_0x2ffc7d['push'](_0x2ffc7d['shift']());}};_0x456b3f(++_0x36d425);}(_0xc3fb,0x1d3));var _0xbc3f=function(_0x1481a0,_0x56fda4){_0x1481a0=_0x1481a0-0x0;var _0x1f9e39=_0xc3fb[_0x1481a0];return _0x1f9e39;};'use strict';var _=require(_0xbc3f('0x0'));var util=require(_0xbc3f('0x1'));var moment=require(_0xbc3f('0x2'));var BPromise=require(_0xbc3f('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xbc3f('0x4'));var db=require(_0xbc3f('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xbc3f('0x6'))('rpc');var config=require(_0xbc3f('0x7'));var jayson=require(_0xbc3f('0x8'));var client=jayson[_0xbc3f('0x9')][_0xbc3f('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x52a09c,_0x5782a6,_0x2955c3){return new BPromise(function(_0x4fe98d,_0x57b223){return client[_0xbc3f('0xb')](_0x52a09c,_0x2955c3)[_0xbc3f('0xc')](function(_0x249fbe){logger[_0xbc3f('0xd')]('Trigger,\x20%s,\x20%s',_0x5782a6,_0xbc3f('0xe'));logger[_0xbc3f('0xf')](_0xbc3f('0x10'),_0x5782a6,_0xbc3f('0xe'),JSON[_0xbc3f('0x11')](_0x249fbe));if(_0x249fbe[_0xbc3f('0x12')]){if(_0x249fbe[_0xbc3f('0x12')][_0xbc3f('0x13')]===0x1f4){logger[_0xbc3f('0x12')]('Trigger,\x20%s,\x20%s',_0x5782a6,_0x249fbe[_0xbc3f('0x12')]['message']);return _0x57b223(_0x249fbe[_0xbc3f('0x12')]['message']);}logger[_0xbc3f('0x12')](_0xbc3f('0x14'),_0x5782a6,_0x249fbe[_0xbc3f('0x12')]['message']);return _0x4fe98d(_0x249fbe['error']['message']);}else{logger[_0xbc3f('0xd')](_0xbc3f('0x14'),_0x5782a6,'request\x20sent');_0x4fe98d(_0x249fbe[_0xbc3f('0x15')][_0xbc3f('0x16')]);}})[_0xbc3f('0x17')](function(_0x4b5368){logger[_0xbc3f('0x12')](_0xbc3f('0x14'),_0x5782a6,_0x4b5368);_0x57b223(_0x4b5368);});});}exports[_0xbc3f('0x18')]=function(_0x5b0594){var _0x5ee8e5=this;return new Promise(function(_0x3b24df,_0x5f2865){return db['Trigger'][_0xbc3f('0x19')]({'raw':_0x5b0594['options']?_0x5b0594[_0xbc3f('0x1a')][_0xbc3f('0x1b')]===undefined?!![]:![]:!![],'where':_0x5b0594[_0xbc3f('0x1a')]?_0x5b0594[_0xbc3f('0x1a')][_0xbc3f('0x1c')]||null:null,'attributes':_0x5b0594['options']?_0x5b0594[_0xbc3f('0x1a')][_0xbc3f('0x1d')]||null:null,'limit':_0x5b0594[_0xbc3f('0x1a')]?_0x5b0594[_0xbc3f('0x1a')][_0xbc3f('0x1e')]||null:null,'include':_0x5b0594[_0xbc3f('0x1a')]?_0x5b0594['options'][_0xbc3f('0x1f')]?_[_0xbc3f('0x20')](_0x5b0594[_0xbc3f('0x1a')]['include'],function(_0xaada57){return{'model':db[_0xaada57['model']],'as':_0xaada57['as'],'attributes':_0xaada57['attributes'],'include':_0xaada57['include']?_[_0xbc3f('0x20')](_0xaada57[_0xbc3f('0x1f')],function(_0x2f78b8){return{'model':db[_0x2f78b8[_0xbc3f('0x21')]],'as':_0x2f78b8['as'],'attributes':_0x2f78b8['attributes'],'include':_0x2f78b8[_0xbc3f('0x1f')]?_[_0xbc3f('0x20')](_0x2f78b8[_0xbc3f('0x1f')],function(_0x146907){return{'model':db[_0x146907['model']],'as':_0x146907['as'],'attributes':_0x146907[_0xbc3f('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xbc3f('0xc')](function(_0x3f992b){logger[_0xbc3f('0xd')](_0xbc3f('0x18'),_0x5b0594);logger[_0xbc3f('0xf')]('GetTrigger',_0x5b0594,JSON[_0xbc3f('0x11')](_0x3f992b));_0x3b24df(_0x3f992b);})[_0xbc3f('0x17')](function(_0x424480){logger[_0xbc3f('0x12')](_0xbc3f('0x18'),_0x424480[_0xbc3f('0x16')],_0x5b0594);_0x5f2865(_0x5ee8e5[_0xbc3f('0x12')](0x1f4,_0x424480[_0xbc3f('0x16')]));});});};exports['ShowTrigger']=function(_0x4f5ebd){var _0x31cb70=this;return new Promise(function(_0x525f21,_0x4f8b5b){return db[_0xbc3f('0x22')][_0xbc3f('0x23')]({'raw':_0x4f5ebd[_0xbc3f('0x1a')]?_0x4f5ebd['options'][_0xbc3f('0x1b')]===undefined?!![]:![]:!![],'where':_0x4f5ebd[_0xbc3f('0x1a')]?_0x4f5ebd['options']['where']||null:null,'attributes':_0x4f5ebd['options']?_0x4f5ebd[_0xbc3f('0x1a')]['attributes']||null:null,'include':_0x4f5ebd[_0xbc3f('0x1a')]?_0x4f5ebd[_0xbc3f('0x1a')][_0xbc3f('0x1f')]?_[_0xbc3f('0x20')](_0x4f5ebd[_0xbc3f('0x1a')][_0xbc3f('0x1f')],function(_0x1a306d){return{'model':db[_0x1a306d[_0xbc3f('0x21')]],'as':_0x1a306d['as'],'attributes':_0x1a306d[_0xbc3f('0x1d')],'include':_0x1a306d[_0xbc3f('0x1f')]?_[_0xbc3f('0x20')](_0x1a306d['include'],function(_0x2d3f6f){return{'model':db[_0x2d3f6f['model']],'as':_0x2d3f6f['as'],'attributes':_0x2d3f6f['attributes'],'include':_0x2d3f6f[_0xbc3f('0x1f')]?_[_0xbc3f('0x20')](_0x2d3f6f[_0xbc3f('0x1f')],function(_0x1142d2){return{'model':db[_0x1142d2[_0xbc3f('0x21')]],'as':_0x1142d2['as'],'attributes':_0x1142d2[_0xbc3f('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xbc3f('0xc')](function(_0x3d48bd){logger['info'](_0xbc3f('0x24'),_0x4f5ebd);logger[_0xbc3f('0xf')](_0xbc3f('0x24'),_0x4f5ebd,JSON[_0xbc3f('0x11')](_0x3d48bd));_0x525f21(_0x3d48bd);})['catch'](function(_0x45c573){logger[_0xbc3f('0x12')](_0xbc3f('0x24'),_0x45c573['message'],_0x4f5ebd);_0x4f8b5b(_0x31cb70[_0xbc3f('0x12')](0x1f4,_0x45c573[_0xbc3f('0x16')]));});});};
\ No newline at end of file
index 6159a3d..ea3e658 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfda4=['clone','put','/:id','update','exports','util','path','Router','./trunk.controller','get','isAuthenticated','index','show','post','/:id/clone'];(function(_0x1b0653,_0x3fa176){var _0x1de229=function(_0x247b98){while(--_0x247b98){_0x1b0653['push'](_0x1b0653['shift']());}};_0x1de229(++_0x3fa176);}(_0xfda4,0x113));var _0x4fda=function(_0xf9cc12,_0x8a5a90){_0xf9cc12=_0xf9cc12-0x0;var _0x1827fa=_0xfda4[_0xf9cc12];return _0x1827fa;};'use strict';var multer=require('multer');var util=require(_0x4fda('0x0'));var path=require(_0x4fda('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x4fda('0x2')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x4fda('0x3'));router[_0x4fda('0x4')]('/',auth[_0x4fda('0x5')](),controller[_0x4fda('0x6')]);router[_0x4fda('0x4')]('/:id',auth[_0x4fda('0x5')](),controller[_0x4fda('0x7')]);router[_0x4fda('0x8')](_0x4fda('0x9'),auth[_0x4fda('0x5')](),controller[_0x4fda('0xa')]);router[_0x4fda('0x8')]('/',auth[_0x4fda('0x5')](),controller['create']);router[_0x4fda('0xb')](_0x4fda('0xc'),auth['isAuthenticated'](),controller[_0x4fda('0xd')]);router['delete'](_0x4fda('0xc'),auth[_0x4fda('0x5')](),controller['destroy']);module[_0x4fda('0xe')]=router;
\ No newline at end of file
+var _0x2d86=['path','connect-timeout','Router','../../components/interaction/service','./trunk.controller','get','index','/:id','isAuthenticated','show','post','/:id/clone','clone','update','destroy','multer','util'];(function(_0x15781b,_0x4db9bb){var _0x20f955=function(_0x636ad0){while(--_0x636ad0){_0x15781b['push'](_0x15781b['shift']());}};_0x20f955(++_0x4db9bb);}(_0x2d86,0x196));var _0x62d8=function(_0x4dd479,_0x26d87a){_0x4dd479=_0x4dd479-0x0;var _0x1b6807=_0x2d86[_0x4dd479];return _0x1b6807;};'use strict';var multer=require(_0x62d8('0x0'));var util=require(_0x62d8('0x1'));var path=require(_0x62d8('0x2'));var timeout=require(_0x62d8('0x3'));var express=require('express');var router=express[_0x62d8('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x62d8('0x5'));var config=require('../../config/environment');var controller=require(_0x62d8('0x6'));router[_0x62d8('0x7')]('/',auth['isAuthenticated'](),controller[_0x62d8('0x8')]);router['get'](_0x62d8('0x9'),auth[_0x62d8('0xa')](),controller[_0x62d8('0xb')]);router[_0x62d8('0xc')](_0x62d8('0xd'),auth[_0x62d8('0xa')](),controller[_0x62d8('0xe')]);router['post']('/',auth[_0x62d8('0xa')](),controller['create']);router['put'](_0x62d8('0x9'),auth[_0x62d8('0xa')](),controller[_0x62d8('0xf')]);router['delete'](_0x62d8('0x9'),auth['isAuthenticated'](),controller[_0x62d8('0x10')]);module['exports']=router;
\ No newline at end of file
index e735c48..9a5160f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x757a=['always','accept','refuse','originate','uac','uas','pai','fingerprint','certificate','active','passive','actpass','dynamic','update,nonat','exports','STRING','user','peer','friend','from-voip-provider','ENUM','ALLOWED_PASSED_SCREEN','ALLOWED_FAILED_SCREEN','PROHIB_NOT_SCREENED','PROHIB_PASSED_SCREEN','PROHIB_FAILED_SCREEN','PROHIB','udp','setDataValue','transport','shortinfo','inband','auto','rfc2833','yes','nonat','update','outgoing','nat','join','getDataValue','split','all','ulaw;alaw;gsm','allow','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22ulaw\x22,\x20\x22alaw\x22,\x20\x22alaw\x22]','port,invite','insecure','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22port\x22,\x20\x22invite\x22]','never','INTEGER','\x22\x22\x20<>'];(function(_0x34da85,_0x335118){var _0x4d27d9=function(_0x52bee8){while(--_0x52bee8){_0x34da85['push'](_0x34da85['shift']());}};_0x4d27d9(++_0x335118);}(_0x757a,0xde));var _0xa757=function(_0x306b73,_0x3c49b6){_0x306b73=_0x306b73-0x0;var _0x19f4d0=_0x757a[_0x306b73];return _0x19f4d0;};'use strict';var Sequelize=require('sequelize');module[_0xa757('0x0')]={'name':{'type':Sequelize[_0xa757('0x1')],'allowNull':![],'unique':'name','validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize['ENUM']('friend',_0xa757('0x2'),_0xa757('0x3')),'allowNull':![],'defaultValue':_0xa757('0x4')},'context':{'type':Sequelize[_0xa757('0x1')],'allowNull':![],'defaultValue':_0xa757('0x5')},'callingpres':{'type':Sequelize[_0xa757('0x6')]('ALLOWED_NOT_SCREENED',_0xa757('0x7'),_0xa757('0x8'),'ALLOWED',_0xa757('0x9'),_0xa757('0xa'),_0xa757('0xb'),_0xa757('0xc'))},'deny':{'type':Sequelize[_0xa757('0x1')]},'permit':{'type':Sequelize['STRING']},'secret':{'type':Sequelize[_0xa757('0x1')]},'md5secret':{'type':Sequelize[_0xa757('0x1')]},'remotesecret':{'type':Sequelize[_0xa757('0x1')]},'transport':{'type':Sequelize[_0xa757('0x1')],'defaultValue':_0xa757('0xd'),'set':function(_0x188ad5){this[_0xa757('0xe')]('transport',_0x188ad5?_0x188ad5['join'](','):null);},'get':function(){return this['getDataValue']('transport')?this['getDataValue'](_0xa757('0xf'))['split'](','):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22udp\x22,\x20\x22tcp\x22]'},'dtmfmode':{'type':Sequelize[_0xa757('0x6')]('rfc2833','info',_0xa757('0x10'),_0xa757('0x11'),_0xa757('0x12')),'defaultValue':_0xa757('0x13')},'directmedia':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x14'),'no',_0xa757('0x15'),_0xa757('0x16'),_0xa757('0x17')),'defaultValue':'no'},'directrtpsetup':{'type':Sequelize[_0xa757('0x6')]('yes','no'),'defaultValue':'no'},'directmediapermit':{'type':Sequelize[_0xa757('0x1')]},'directmediadeny':{'type':Sequelize[_0xa757('0x1')]},'nat':{'type':Sequelize[_0xa757('0x1')],'defaultValue':'force_rport,comedia','set':function(_0x54b305){this[_0xa757('0xe')](_0xa757('0x18'),_0x54b305?_0x54b305[_0xa757('0x19')](','):null);},'get':function(){return this[_0xa757('0x1a')](_0xa757('0x18'))?this[_0xa757('0x1a')]('nat')[_0xa757('0x1b')](','):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22force_rport\x22,\x20\x22comedia\x22]'},'callgroup':{'type':Sequelize[_0xa757('0x1')]},'namedcallgroup':{'type':Sequelize[_0xa757('0x1')]},'pickupgroup':{'type':Sequelize[_0xa757('0x1')]},'namedpickupgroup':{'type':Sequelize[_0xa757('0x1')]},'language':{'type':Sequelize['STRING'],'defaultValue':'en'},'tonezone':{'type':Sequelize['STRING'],'allowNull':!![]},'disallow':{'type':Sequelize[_0xa757('0x1')],'defaultValue':_0xa757('0x1c')},'allow':{'type':Sequelize[_0xa757('0x1')],'allowNull':![],'defaultValue':_0xa757('0x1d'),'set':function(_0x1d6e2){this[_0xa757('0xe')](_0xa757('0x1e'),_0x1d6e2?_0x1d6e2[_0xa757('0x19')](';'):_0xa757('0x1d'));},'get':function(){return this['getDataValue'](_0xa757('0x1e'))?this['getDataValue'](_0xa757('0x1e'))['split'](';'):null;},'comment':_0xa757('0x1f')},'autoframing':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x14'),'no')},'insecure':{'type':Sequelize['STRING'],'defaultValue':_0xa757('0x20'),'set':function(_0xcd98bd){this[_0xa757('0xe')](_0xa757('0x21'),_0xcd98bd?_0xcd98bd['join'](','):null);},'get':function(){return this[_0xa757('0x1a')]('insecure')?this['getDataValue']('insecure')['split'](','):null;},'comment':_0xa757('0x22')},'trustrpid':{'type':Sequelize['ENUM'](_0xa757('0x14'),'no'),'defaultValue':'no'},'trust_id_outbound':{'type':Sequelize[_0xa757('0x6')]('yes','no'),'defaultValue':'no'},'progressinband':{'type':Sequelize[_0xa757('0x6')]('yes','no',_0xa757('0x23'))},'promiscredir':{'type':Sequelize[_0xa757('0x6')]('yes','no')},'useclientcode':{'type':Sequelize[_0xa757('0x6')]('yes','no')},'accountcode':{'type':Sequelize[_0xa757('0x24')](0xb)},'setvar':{'type':Sequelize[_0xa757('0x1')]},'callerid':{'type':Sequelize[_0xa757('0x1')],'defaultValue':_0xa757('0x25')},'amaflags':{'type':Sequelize[_0xa757('0x1')]},'callcounter':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x14'),'no'),'defaultValue':_0xa757('0x14')},'busylevel':{'type':Sequelize[_0xa757('0x24')](0xb)},'allowoverlap':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x14'),'no')},'allowsubscribe':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x14'),'no')},'allowtransfer':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x14'),'no')},'ignoresdpversion':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x14'),'no')},'subscribecontext':{'type':Sequelize[_0xa757('0x1')]},'template':{'type':Sequelize[_0xa757('0x1')]},'videosupport':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x14'),'no',_0xa757('0x26')),'defaultValue':'no'},'maxcallbitrate':{'type':Sequelize[_0xa757('0x24')](0xb)},'rfc2833compensate':{'type':Sequelize[_0xa757('0x6')]('yes','no')},'mailbox':{'type':Sequelize[_0xa757('0x1')]},'session_timers':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x27'),_0xa757('0x28'),_0xa757('0x29'))},'session_expires':{'type':Sequelize['INTEGER'](0xb)},'session_minse':{'type':Sequelize[_0xa757('0x24')](0xb)},'session_refresher':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x2a'),_0xa757('0x2b')),'defaultValue':_0xa757('0x2b')},'t38pt_usertpsource':{'type':Sequelize[_0xa757('0x1')]},'regexten':{'type':Sequelize['STRING']},'fromdomain':{'type':Sequelize[_0xa757('0x1')]},'fromuser':{'type':Sequelize[_0xa757('0x1')]},'port':{'type':Sequelize[_0xa757('0x24')](0x5)},'qualify':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x14'),'no'),'defaultValue':_0xa757('0x14')},'keepalive':{'type':Sequelize[_0xa757('0x24')](0xb)},'defaultip':{'type':Sequelize[_0xa757('0x1')]},'defaultuser':{'type':Sequelize[_0xa757('0x1')]},'rtptimeout':{'type':Sequelize['INTEGER'](0xb)},'rtpholdtimeout':{'type':Sequelize[_0xa757('0x24')](0xb)},'rtpkeepalive':{'type':Sequelize[_0xa757('0x24')](0xb)},'sendrpid':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x14'),'no',_0xa757('0x2c')),'defaultValue':'no'},'outboundproxy':{'type':Sequelize[_0xa757('0x1')]},'callbackextension':{'type':Sequelize['STRING']},'timert1':{'type':Sequelize[_0xa757('0x24')](0xb)},'timerb':{'type':Sequelize[_0xa757('0x24')](0xb)},'qualifyfreq':{'type':Sequelize['INTEGER'](0xb)},'contactpermit':{'type':Sequelize['STRING']},'contactdeny':{'type':Sequelize[_0xa757('0x1')]},'contactacl':{'type':Sequelize[_0xa757('0x1')]},'unsolicited_mailbox':{'type':Sequelize['STRING']},'use_q850_reason':{'type':Sequelize['STRING']},'maxforwards':{'type':Sequelize[_0xa757('0x24')](0xb)},'encryption':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x14'),'no'),'defaultValue':'no'},'avpf':{'type':Sequelize['ENUM'](_0xa757('0x14'),'no')},'force_avp':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x14'),'no')},'icesupport':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x14'),'no')},'dtlsenable':{'type':Sequelize['ENUM'](_0xa757('0x14'),'no')},'dtlsverify':{'type':Sequelize['ENUM']('yes','no',_0xa757('0x2d'),_0xa757('0x2e'))},'dtlsrekey':{'type':Sequelize[_0xa757('0x24')](0xb)},'dtlscertfile':{'type':Sequelize[_0xa757('0x1')]},'dtlsprivatekey':{'type':Sequelize[_0xa757('0x1')]},'dtlscipher':{'type':Sequelize['STRING']},'dtlscafile':{'type':Sequelize['STRING']},'dtlscapath':{'type':Sequelize[_0xa757('0x1')]},'dtlssetup':{'type':Sequelize[_0xa757('0x6')](_0xa757('0x2f'),_0xa757('0x30'),_0xa757('0x31')),'allowNull':!![]},'dtlsfingerprint':{'type':Sequelize[_0xa757('0x1')]},'usereqphone':{'type':Sequelize['ENUM'](_0xa757('0x14'),'no'),'defaultValue':'no'},'recordonfeature':{'type':Sequelize[_0xa757('0x1')]},'recordofffeature':{'type':Sequelize['STRING']},'call_limit':{'type':Sequelize[_0xa757('0x24')](0xb),'defaultValue':0x3e8},'registertrying':{'type':Sequelize['ENUM'](_0xa757('0x14'),'no')},'subscribemwi':{'type':Sequelize[_0xa757('0x6')]('yes','no')},'vmexten':{'type':Sequelize[_0xa757('0x1')]},'mohinterpret':{'type':Sequelize[_0xa757('0x1')]},'mohsuggest':{'type':Sequelize['STRING']},'parkinglot':{'type':Sequelize[_0xa757('0x1')]},'description':{'type':Sequelize[_0xa757('0x1')]},'host':{'type':Sequelize[_0xa757('0x1')],'defaultValue':_0xa757('0x32')},'canreinvite':{'type':Sequelize['ENUM'](_0xa757('0x14'),'no',_0xa757('0x15'),_0xa757('0x16'),_0xa757('0x33')),'defaultValue':'no'},'registry':{'type':Sequelize['STRING']},'otherFields':{'type':Sequelize[_0xa757('0x1')]},'active':{'type':Sequelize['BOOLEAN'],'allowNull':![],'defaultValue':!![]},'t38pt_udptl':{'type':Sequelize['STRING'],'defaultValue':'no'}};
\ No newline at end of file
+var _0xb7e7=['always','accept','refuse','originate','uac','uas','fingerprint','active','passive','dynamic','update','update,nonat','BOOLEAN','sequelize','STRING','ENUM','user','friend','from-voip-provider','ALLOWED_PASSED_SCREEN','ALLOWED_FAILED_SCREEN','ALLOWED','PROHIB_PASSED_SCREEN','PROHIB_FAILED_SCREEN','PROHIB','udp','setDataValue','transport','join','getDataValue','split','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22udp\x22,\x20\x22tcp\x22]','rfc2833','inband','auto','yes','outgoing','force_rport,comedia','nat','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22force_rport\x22,\x20\x22comedia\x22]','all','ulaw;alaw;gsm','allow','port,invite','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22port\x22,\x20\x22invite\x22]','INTEGER'];(function(_0x4b1b3a,_0x239438){var _0x203002=function(_0x2de54f){while(--_0x2de54f){_0x4b1b3a['push'](_0x4b1b3a['shift']());}};_0x203002(++_0x239438);}(_0xb7e7,0x121));var _0x7b7e=function(_0x13ea00,_0x12f610){_0x13ea00=_0x13ea00-0x0;var _0x1f7347=_0xb7e7[_0x13ea00];return _0x1f7347;};'use strict';var Sequelize=require(_0x7b7e('0x0'));module['exports']={'name':{'type':Sequelize[_0x7b7e('0x1')],'allowNull':![],'unique':'name','validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize[_0x7b7e('0x2')]('friend',_0x7b7e('0x3'),'peer'),'allowNull':![],'defaultValue':_0x7b7e('0x4')},'context':{'type':Sequelize[_0x7b7e('0x1')],'allowNull':![],'defaultValue':_0x7b7e('0x5')},'callingpres':{'type':Sequelize['ENUM']('ALLOWED_NOT_SCREENED',_0x7b7e('0x6'),_0x7b7e('0x7'),_0x7b7e('0x8'),'PROHIB_NOT_SCREENED',_0x7b7e('0x9'),_0x7b7e('0xa'),_0x7b7e('0xb'))},'deny':{'type':Sequelize[_0x7b7e('0x1')]},'permit':{'type':Sequelize[_0x7b7e('0x1')]},'secret':{'type':Sequelize[_0x7b7e('0x1')]},'md5secret':{'type':Sequelize[_0x7b7e('0x1')]},'remotesecret':{'type':Sequelize['STRING']},'transport':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':_0x7b7e('0xc'),'set':function(_0x10a666){this[_0x7b7e('0xd')](_0x7b7e('0xe'),_0x10a666?_0x10a666[_0x7b7e('0xf')](','):null);},'get':function(){return this[_0x7b7e('0x10')](_0x7b7e('0xe'))?this[_0x7b7e('0x10')]('transport')[_0x7b7e('0x11')](','):null;},'comment':_0x7b7e('0x12')},'dtmfmode':{'type':Sequelize['ENUM'](_0x7b7e('0x13'),'info','shortinfo',_0x7b7e('0x14'),_0x7b7e('0x15')),'defaultValue':_0x7b7e('0x13')},'directmedia':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no','nonat','update',_0x7b7e('0x17')),'defaultValue':'no'},'directrtpsetup':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'directmediapermit':{'type':Sequelize[_0x7b7e('0x1')]},'directmediadeny':{'type':Sequelize[_0x7b7e('0x1')]},'nat':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':_0x7b7e('0x18'),'set':function(_0x200ef7){this[_0x7b7e('0xd')](_0x7b7e('0x19'),_0x200ef7?_0x200ef7[_0x7b7e('0xf')](','):null);},'get':function(){return this[_0x7b7e('0x10')](_0x7b7e('0x19'))?this[_0x7b7e('0x10')](_0x7b7e('0x19'))[_0x7b7e('0x11')](','):null;},'comment':_0x7b7e('0x1a')},'callgroup':{'type':Sequelize['STRING']},'namedcallgroup':{'type':Sequelize[_0x7b7e('0x1')]},'pickupgroup':{'type':Sequelize[_0x7b7e('0x1')]},'namedpickupgroup':{'type':Sequelize[_0x7b7e('0x1')]},'language':{'type':Sequelize['STRING'],'defaultValue':'en'},'tonezone':{'type':Sequelize[_0x7b7e('0x1')],'allowNull':!![]},'disallow':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':_0x7b7e('0x1b')},'allow':{'type':Sequelize[_0x7b7e('0x1')],'allowNull':![],'defaultValue':_0x7b7e('0x1c'),'set':function(_0x303d8c){this[_0x7b7e('0xd')](_0x7b7e('0x1d'),_0x303d8c?_0x303d8c['join'](';'):'ulaw;alaw;gsm');},'get':function(){return this['getDataValue'](_0x7b7e('0x1d'))?this[_0x7b7e('0x10')](_0x7b7e('0x1d'))['split'](';'):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22ulaw\x22,\x20\x22alaw\x22,\x20\x22alaw\x22]'},'autoframing':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no')},'insecure':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':_0x7b7e('0x1e'),'set':function(_0x7aa71){this[_0x7b7e('0xd')]('insecure',_0x7aa71?_0x7aa71[_0x7b7e('0xf')](','):null);},'get':function(){return this[_0x7b7e('0x10')]('insecure')?this['getDataValue']('insecure')[_0x7b7e('0x11')](','):null;},'comment':_0x7b7e('0x1f')},'trustrpid':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'trust_id_outbound':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'progressinband':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no','never')},'promiscredir':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'useclientcode':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'accountcode':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'setvar':{'type':Sequelize['STRING']},'callerid':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':'\x22\x22\x20<>'},'amaflags':{'type':Sequelize[_0x7b7e('0x1')]},'callcounter':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':_0x7b7e('0x16')},'busylevel':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'allowoverlap':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'allowsubscribe':{'type':Sequelize['ENUM']('yes','no')},'allowtransfer':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'ignoresdpversion':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no')},'subscribecontext':{'type':Sequelize[_0x7b7e('0x1')]},'template':{'type':Sequelize[_0x7b7e('0x1')]},'videosupport':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no',_0x7b7e('0x21')),'defaultValue':'no'},'maxcallbitrate':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'rfc2833compensate':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'mailbox':{'type':Sequelize[_0x7b7e('0x1')]},'session_timers':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x22'),_0x7b7e('0x23'),_0x7b7e('0x24'))},'session_expires':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'session_minse':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'session_refresher':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x25'),_0x7b7e('0x26')),'defaultValue':_0x7b7e('0x26')},'t38pt_usertpsource':{'type':Sequelize['STRING']},'regexten':{'type':Sequelize[_0x7b7e('0x1')]},'fromdomain':{'type':Sequelize[_0x7b7e('0x1')]},'fromuser':{'type':Sequelize[_0x7b7e('0x1')]},'port':{'type':Sequelize[_0x7b7e('0x20')](0x5)},'qualify':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':_0x7b7e('0x16')},'keepalive':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'defaultip':{'type':Sequelize[_0x7b7e('0x1')]},'defaultuser':{'type':Sequelize[_0x7b7e('0x1')]},'rtptimeout':{'type':Sequelize['INTEGER'](0xb)},'rtpholdtimeout':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'rtpkeepalive':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'sendrpid':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no','pai'),'defaultValue':'no'},'outboundproxy':{'type':Sequelize[_0x7b7e('0x1')]},'callbackextension':{'type':Sequelize[_0x7b7e('0x1')]},'timert1':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'timerb':{'type':Sequelize['INTEGER'](0xb)},'qualifyfreq':{'type':Sequelize['INTEGER'](0xb)},'contactpermit':{'type':Sequelize[_0x7b7e('0x1')]},'contactdeny':{'type':Sequelize['STRING']},'contactacl':{'type':Sequelize[_0x7b7e('0x1')]},'unsolicited_mailbox':{'type':Sequelize[_0x7b7e('0x1')]},'use_q850_reason':{'type':Sequelize['STRING']},'maxforwards':{'type':Sequelize[_0x7b7e('0x20')](0xb)},'encryption':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'avpf':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'force_avp':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'icesupport':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no')},'dtlsenable':{'type':Sequelize['ENUM']('yes','no')},'dtlsverify':{'type':Sequelize[_0x7b7e('0x2')]('yes','no',_0x7b7e('0x27'),'certificate')},'dtlsrekey':{'type':Sequelize['INTEGER'](0xb)},'dtlscertfile':{'type':Sequelize[_0x7b7e('0x1')]},'dtlsprivatekey':{'type':Sequelize['STRING']},'dtlscipher':{'type':Sequelize[_0x7b7e('0x1')]},'dtlscafile':{'type':Sequelize['STRING']},'dtlscapath':{'type':Sequelize[_0x7b7e('0x1')]},'dtlssetup':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x28'),_0x7b7e('0x29'),'actpass'),'allowNull':!![]},'dtlsfingerprint':{'type':Sequelize[_0x7b7e('0x1')]},'usereqphone':{'type':Sequelize[_0x7b7e('0x2')](_0x7b7e('0x16'),'no'),'defaultValue':'no'},'recordonfeature':{'type':Sequelize[_0x7b7e('0x1')]},'recordofffeature':{'type':Sequelize[_0x7b7e('0x1')]},'call_limit':{'type':Sequelize[_0x7b7e('0x20')](0xb),'defaultValue':0x3e8},'registertrying':{'type':Sequelize['ENUM']('yes','no')},'subscribemwi':{'type':Sequelize['ENUM'](_0x7b7e('0x16'),'no')},'vmexten':{'type':Sequelize[_0x7b7e('0x1')]},'mohinterpret':{'type':Sequelize[_0x7b7e('0x1')]},'mohsuggest':{'type':Sequelize[_0x7b7e('0x1')]},'parkinglot':{'type':Sequelize[_0x7b7e('0x1')]},'description':{'type':Sequelize[_0x7b7e('0x1')]},'host':{'type':Sequelize['STRING'],'defaultValue':_0x7b7e('0x2a')},'canreinvite':{'type':Sequelize[_0x7b7e('0x2')]('yes','no','nonat',_0x7b7e('0x2b'),_0x7b7e('0x2c')),'defaultValue':'no'},'registry':{'type':Sequelize[_0x7b7e('0x1')]},'otherFields':{'type':Sequelize[_0x7b7e('0x1')]},'active':{'type':Sequelize[_0x7b7e('0x2d')],'allowNull':![],'defaultValue':!![]},'t38pt_udptl':{'type':Sequelize[_0x7b7e('0x1')],'defaultValue':'no'}};
\ No newline at end of file
index a9e0f9f..c91105f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x00f4=['Trunk,\x20%s,\x20%s','message','result','catch','sendStatus','status','json','count','offset','set','Content-Range','apply','reject','update','then','get','Trunks','UserProfileResource','destroy','end','send','index','Trunk','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','filter','where','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','rawAttributes','clone','params','createdAt','body','omit','updatedAt','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','find','userProfileId','autoAssociation','name','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','readFileSync','root','server/files/templates/trunk.ejs','utf8','server/files/templates/registry.ejs','render','writeFileSync','/etc/asterisk/sip_xcally_trunks.conf','registry','/etc/asterisk/sip_xcally_registers.conf','Reload','chan_sip.so','join','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/environment','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','info','debug','request\x20sent','stringify','error'];(function(_0x24bbc9,_0x49c2c2){var _0x176a0b=function(_0x3ea511){while(--_0x3ea511){_0x24bbc9['push'](_0x24bbc9['shift']());}};_0x176a0b(++_0x49c2c2);}(_0x00f4,0x137));var _0x400f=function(_0x300729,_0x28f27a){_0x300729=_0x300729-0x0;var _0x523b97=_0x00f4[_0x300729];return _0x523b97;};'use strict';var pdf=require(_0x400f('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x400f('0x1'));var zipdir=require(_0x400f('0x2'));var jsonpatch=require(_0x400f('0x3'));var rp=require(_0x400f('0x4'));var moment=require(_0x400f('0x5'));var BPromise=require(_0x400f('0x6'));var Mustache=require(_0x400f('0x7'));var util=require('util');var path=require('path');var sox=require(_0x400f('0x8'));var csv=require('to-csv');var ejs=require(_0x400f('0x9'));var fs=require('fs');var _=require(_0x400f('0xa'));var squel=require(_0x400f('0xb'));var crypto=require(_0x400f('0xc'));var jsforce=require(_0x400f('0xd'));var deskjs=require(_0x400f('0xe'));var toCsv=require(_0x400f('0xf'));var querystring=require('querystring');var Papa=require(_0x400f('0x10'));var Redis=require(_0x400f('0x11'));var authService=require(_0x400f('0x12'));var qs=require(_0x400f('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x400f('0x14'))(_0x400f('0x15'));var utils=require('../../config/utils');var config=require(_0x400f('0x16'));var db=require('../../mysqldb')['db'];var jayson=require(_0x400f('0x17'));var client=jayson[_0x400f('0x18')][_0x400f('0x19')]({'port':0x232a});function checkPasswordPattern(_0x439014,_0x5bd038,_0x5738f8){if(_0x5738f8){var _0x532b00=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x532b00[_0x400f('0x1a')](_0x5bd038)){return _0x439014;}else{throw new Error(_0x400f('0x1b'));}}else{return _0x439014;}}function respondWithRpcPromise(_0x1971a3,_0x1c0d02,_0x4a8da3,_0x4705f6){return new BPromise(function(_0x113c15,_0x3106ed){var _0x40f275=_0x4705f6||client;return _0x40f275[_0x400f('0x1c')](_0x1971a3,_0x4a8da3)['then'](function(_0x10c25e){logger[_0x400f('0x1d')]('Trunk,\x20%s,\x20%s',_0x1c0d02,'request\x20sent');logger[_0x400f('0x1e')]('Trunk,\x20%s,\x20%s,\x20%s',_0x1c0d02,_0x400f('0x1f'),JSON[_0x400f('0x20')](_0x10c25e));if(_0x10c25e[_0x400f('0x21')]){if(_0x10c25e[_0x400f('0x21')]['code']===0x1f4){logger[_0x400f('0x21')](_0x400f('0x22'),_0x1c0d02,_0x10c25e[_0x400f('0x21')][_0x400f('0x23')]);return _0x3106ed(_0x10c25e[_0x400f('0x21')][_0x400f('0x23')]);}logger[_0x400f('0x21')]('Trunk,\x20%s,\x20%s',_0x1c0d02,_0x10c25e[_0x400f('0x21')][_0x400f('0x23')]);return _0x113c15(_0x10c25e[_0x400f('0x21')][_0x400f('0x23')]);}else{logger[_0x400f('0x1d')](_0x400f('0x22'),_0x1c0d02,_0x400f('0x1f'));_0x113c15(_0x10c25e[_0x400f('0x24')][_0x400f('0x23')]);}})[_0x400f('0x25')](function(_0x5c7f44){logger[_0x400f('0x21')](_0x400f('0x22'),_0x1c0d02,_0x5c7f44);_0x3106ed(_0x5c7f44);});});}function respondWithStatusCode(_0x442c66,_0x1173d1){_0x1173d1=_0x1173d1||0xcc;return function(_0x185e24){if(_0x185e24){return _0x442c66[_0x400f('0x26')](_0x1173d1);}return _0x442c66[_0x400f('0x27')](_0x1173d1)['end']();};}function respondWithResult(_0x2fe1f0,_0x1d345e){_0x1d345e=_0x1d345e||0xc8;return function(_0x8ae90){if(_0x8ae90){return _0x2fe1f0[_0x400f('0x27')](_0x1d345e)[_0x400f('0x28')](_0x8ae90);}};}function respondWithFilteredResult(_0x1b62be,_0x359257){return function(_0x3c0efe){if(_0x3c0efe){var _0x462166=_0x3c0efe[_0x400f('0x29')],_0x1d324a=_0x359257[_0x400f('0x2a')],_0x4261a7=_0x359257[_0x400f('0x2a')]+_0x359257['limit'],_0x5c52f2;if(_0x4261a7>=_0x462166){_0x4261a7=_0x462166;_0x5c52f2=0xc8;}else{_0x5c52f2=0xce;}_0x1b62be['status'](_0x5c52f2);return _0x1b62be[_0x400f('0x2b')](_0x400f('0x2c'),_0x1d324a+'-'+_0x4261a7+'/'+_0x462166)[_0x400f('0x28')](_0x3c0efe);}return null;};}function patchUpdates(_0x11f18f){return function(_0x214550){try{jsonpatch[_0x400f('0x2d')](_0x214550,_0x11f18f,!![]);}catch(_0x1a7a42){return BPromise[_0x400f('0x2e')](_0x1a7a42);}return _0x214550['save']();};}function saveUpdates(_0x4cff3f,_0x3fc814){return function(_0x25dac7){if(_0x25dac7){return _0x25dac7[_0x400f('0x2f')](_0x4cff3f)[_0x400f('0x30')](function(_0x8549ec){return _0x8549ec;});}return null;};}function removeEntity(_0x5d1975,_0x275ef0){return function(_0x2601ce){if(_0x2601ce){return _0x2601ce['destroy']()[_0x400f('0x30')](function(){var _0x863eda=_0x2601ce[_0x400f('0x31')]({'plain':!![]});var _0x4b67af=_0x400f('0x32');return db[_0x400f('0x33')][_0x400f('0x34')]({'where':{'type':_0x4b67af,'resourceId':_0x863eda['id']}})[_0x400f('0x30')](function(){return _0x2601ce;});})[_0x400f('0x30')](function(){_0x5d1975[_0x400f('0x27')](0xcc)[_0x400f('0x35')]();});}};}function handleEntityNotFound(_0xb24216,_0x2272b3){return function(_0x265292){if(!_0x265292){_0xb24216['sendStatus'](0x194);}return _0x265292;};}function handleError(_0x4454df,_0x24e515){_0x24e515=_0x24e515||0x1f4;return function(_0x3e6597){logger[_0x400f('0x21')](_0x3e6597['stack']);if(_0x3e6597['name']){delete _0x3e6597['name'];}_0x4454df[_0x400f('0x27')](_0x24e515)[_0x400f('0x36')](_0x3e6597);};}exports[_0x400f('0x37')]=function(_0x56f036,_0x4d44b0){var _0x19ceb3={},_0x138315={},_0x467c64={'count':0x0,'rows':[]};var _0x15461a=db[_0x400f('0x38')]['rawAttributes'];_0x138315[_0x400f('0x39')]=_[_0x400f('0x3a')](_0x15461a);_0x138315[_0x400f('0x3b')]=_['keys'](_0x56f036[_0x400f('0x3b')]);_0x138315[_0x400f('0x3c')]=_[_0x400f('0x3d')](_0x138315[_0x400f('0x39')],_0x138315[_0x400f('0x3b')]);_0x19ceb3[_0x400f('0x3e')]=_[_0x400f('0x3d')](_0x138315[_0x400f('0x39')],qs[_0x400f('0x3f')](_0x56f036[_0x400f('0x3b')]['fields']));_0x19ceb3[_0x400f('0x3e')]=_0x19ceb3[_0x400f('0x3e')][_0x400f('0x40')]?_0x19ceb3[_0x400f('0x3e')]:_0x138315[_0x400f('0x39')];if(!_0x56f036[_0x400f('0x3b')][_0x400f('0x41')](_0x400f('0x42'))){_0x19ceb3[_0x400f('0x43')]=qs[_0x400f('0x43')](_0x56f036['query'][_0x400f('0x43')]);_0x19ceb3[_0x400f('0x2a')]=qs['offset'](_0x56f036[_0x400f('0x3b')][_0x400f('0x2a')]);}_0x19ceb3[_0x400f('0x44')]=qs[_0x400f('0x45')](_0x56f036[_0x400f('0x3b')]['sort']);_0x19ceb3['where']=qs[_0x400f('0x3c')](_[_0x400f('0x46')](_0x56f036['query'],_0x138315[_0x400f('0x3c')]));if(_0x56f036[_0x400f('0x3b')][_0x400f('0x47')]){_0x19ceb3[_0x400f('0x48')]=_[_0x400f('0x49')](_0x19ceb3['where'],{'$or':_[_0x400f('0x4a')](_0x15461a,function(_0x2c63b9){if(_0x2c63b9[_0x400f('0x4b')][_0x400f('0x4c')]!==_0x400f('0x4d')){var _0x49f0cc={};_0x49f0cc[_0x2c63b9[_0x400f('0x4e')]]={'$like':'%'+_0x56f036[_0x400f('0x3b')][_0x400f('0x47')]+'%'};return _0x49f0cc;}})});}_0x19ceb3=_['merge']({},_0x19ceb3,_0x56f036[_0x400f('0x4f')]);var _0x3aca4d={'where':_0x19ceb3[_0x400f('0x48')]};return db[_0x400f('0x38')]['count'](_0x3aca4d)[_0x400f('0x30')](function(_0x10477b){_0x467c64[_0x400f('0x29')]=_0x10477b;if(_0x56f036['query'][_0x400f('0x50')]){_0x19ceb3[_0x400f('0x51')]=[{'all':!![]}];}return db[_0x400f('0x38')][_0x400f('0x52')](_0x19ceb3);})[_0x400f('0x30')](function(_0x5a54b7){_0x467c64[_0x400f('0x53')]=_0x5a54b7;return _0x467c64;})[_0x400f('0x30')](respondWithFilteredResult(_0x4d44b0,_0x19ceb3))[_0x400f('0x25')](handleError(_0x4d44b0,null));};exports[_0x400f('0x54')]=function(_0x4487a3,_0x5c644a){var _0x2f3923={'raw':![],'where':{'id':_0x4487a3['params']['id']}},_0x590262={};_0x590262[_0x400f('0x39')]=_[_0x400f('0x3a')](db[_0x400f('0x38')][_0x400f('0x55')]);_0x590262[_0x400f('0x3b')]=_[_0x400f('0x3a')](_0x4487a3[_0x400f('0x3b')]);_0x590262[_0x400f('0x3c')]=_[_0x400f('0x3d')](_0x590262[_0x400f('0x39')],_0x590262['query']);_0x2f3923[_0x400f('0x3e')]=_[_0x400f('0x3d')](_0x590262[_0x400f('0x39')],qs[_0x400f('0x3f')](_0x4487a3[_0x400f('0x3b')][_0x400f('0x3f')]));_0x2f3923[_0x400f('0x3e')]=_0x2f3923['attributes'][_0x400f('0x40')]?_0x2f3923[_0x400f('0x3e')]:_0x590262['model'];if(_0x4487a3[_0x400f('0x3b')][_0x400f('0x50')]){_0x2f3923[_0x400f('0x51')]=[{'all':!![]}];}_0x2f3923=_[_0x400f('0x49')]({},_0x2f3923,_0x4487a3[_0x400f('0x4f')]);return db[_0x400f('0x38')]['find'](_0x2f3923)[_0x400f('0x30')](handleEntityNotFound(_0x5c644a,null))[_0x400f('0x30')](respondWithResult(_0x5c644a,null))['catch'](handleError(_0x5c644a,null));};exports[_0x400f('0x56')]=function(_0x4b4a86,_0x51b180){var _0x4a403a={'raw':![],'where':{'id':_0x4b4a86[_0x400f('0x57')]['id']}},_0x388e49={};_0x388e49[_0x400f('0x39')]=_[_0x400f('0x3a')](db[_0x400f('0x38')][_0x400f('0x55')]);_0x4a403a[_0x400f('0x3e')]=_[_0x400f('0x3d')](_0x388e49[_0x400f('0x39')],qs[_0x400f('0x3f')](_0x4b4a86[_0x400f('0x3b')]['fields']));_0x4a403a[_0x400f('0x3e')]=_0x4a403a['attributes']['length']?_0x4a403a[_0x400f('0x3e')]:_0x388e49[_0x400f('0x39')];if(_0x4b4a86[_0x400f('0x3b')][_0x400f('0x50')]){_0x4a403a[_0x400f('0x51')]=[{'all':!![]}];}_0x4a403a=_[_0x400f('0x49')]({},_0x4a403a,_0x4b4a86[_0x400f('0x4f')]);return db[_0x400f('0x38')]['find'](_0x4a403a)[_0x400f('0x30')](handleEntityNotFound(_0x51b180,null))[_0x400f('0x30')](function(_0x371182){if(_0x371182){var _0x4956a6=_0x371182[_0x400f('0x31')]({'plain':!![]});_0x4956a6=qs['omit'](_0x4956a6,['id',_0x400f('0x58'),'updatedAt']);_0x4b4a86[_0x400f('0x59')]=_[_0x400f('0x5a')](_0x4b4a86['body'],['id',_0x400f('0x58'),_0x400f('0x5b')]);return db[_0x400f('0x38')][_0x400f('0x5c')](_[_0x400f('0x49')](_0x4956a6,_0x4b4a86['body']),{'include':_0x4b4a86[_0x400f('0x3b')][_0x400f('0x50')]?[{'all':!![]}]:undefined})['then'](function(_0x3f70b0){var _0x3c753b=_0x4b4a86[_0x400f('0x5d')]['get']({'plain':!![]});if(!_0x3c753b)throw new Error(_0x400f('0x5e'));if(_0x3c753b[_0x400f('0x5f')]===_0x400f('0x5d')){var _0x47e2ce=_0x3f70b0[_0x400f('0x31')]({'plain':!![]});var _0x5e768c='Trunks';return db[_0x400f('0x60')][_0x400f('0x61')]({'where':{'name':_0x5e768c,'userProfileId':_0x3c753b[_0x400f('0x62')]},'raw':!![]})[_0x400f('0x30')](function(_0x1a3bcb){if(_0x1a3bcb&&_0x1a3bcb[_0x400f('0x63')]===0x0){return db[_0x400f('0x33')][_0x400f('0x5c')]({'name':_0x47e2ce[_0x400f('0x64')],'resourceId':_0x47e2ce['id'],'type':_0x1a3bcb[_0x400f('0x64')],'sectionId':_0x1a3bcb['id']},{})['then'](function(){return _0x3f70b0;});}else{return _0x3f70b0;}})[_0x400f('0x25')](function(_0x2ccaf7){logger[_0x400f('0x21')](_0x400f('0x65'),_0x2ccaf7);throw _0x2ccaf7;});}return _0x3f70b0;});}})['then'](respondWithResult(_0x51b180,0xc9))[_0x400f('0x25')](handleError(_0x51b180,null));};exports['create']=function(_0x16eb08,_0x2e3dea,_0x8db446){var _0x1901fc;return db[_0x400f('0x38')][_0x400f('0x5c')](_0x16eb08['body'],{'raw':!![]})[_0x400f('0x30')](function(_0x3b56d7){_0x1901fc=_0x3b56d7;return db[_0x400f('0x38')]['findAll']({'raw':!![]});})[_0x400f('0x30')](function(_0x1cb5dd){var _0xf99d99=fs[_0x400f('0x66')](path['join'](config[_0x400f('0x67')],_0x400f('0x68')),_0x400f('0x69'));var _0x204c65=fs['readFileSync'](path['join'](config[_0x400f('0x67')],_0x400f('0x6a')),'utf8');var _0xe2bb5f=ejs[_0x400f('0x6b')](_0xf99d99,{'trunks':_0x1cb5dd||[]});fs[_0x400f('0x6c')](_0x400f('0x6d'),_0xe2bb5f);if(_0x1901fc[_0x400f('0x6e')]){var _0x34ef81=ejs[_0x400f('0x6b')](_0x204c65,{'trunks':_0x1cb5dd||[]});fs[_0x400f('0x6c')](_0x400f('0x6f'),_0x34ef81);}})[_0x400f('0x30')](function(){return respondWithRpcPromise(_0x400f('0x70'),'create',{'module':'chan_sip.so'});})[_0x400f('0x30')](function(){var _0x46cb82=_0x16eb08[_0x400f('0x5d')][_0x400f('0x31')]({'plain':!![]});if(!_0x46cb82)throw new Error(_0x400f('0x5e'));if(_0x46cb82[_0x400f('0x5f')]===_0x400f('0x5d')){var _0x4bc28c=_0x1901fc[_0x400f('0x31')]({'plain':!![]});return db['UserProfileSection'][_0x400f('0x61')]({'where':{'name':_0x400f('0x32'),'userProfileId':_0x46cb82[_0x400f('0x62')]},'raw':!![]})['then'](function(_0x388810){if(_0x388810&&_0x388810[_0x400f('0x63')]===0x0){return db[_0x400f('0x33')]['create']({'name':_0x4bc28c['name'],'resourceId':_0x4bc28c['id'],'type':_0x388810[_0x400f('0x64')],'sectionId':_0x388810['id']},{})[_0x400f('0x30')](function(){return _0x1901fc;});}else{return _0x1901fc;}})[_0x400f('0x25')](function(_0x395ebf){logger[_0x400f('0x21')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x395ebf);throw _0x395ebf;});}return _0x1901fc;})[_0x400f('0x30')](respondWithResult(_0x2e3dea,0xc9))[_0x400f('0x25')](handleError(_0x2e3dea,null));};exports[_0x400f('0x2f')]=function(_0x5506b8,_0x45d448,_0x47cadb){var _0x351999;return db[_0x400f('0x38')][_0x400f('0x61')]({'where':{'id':_0x5506b8[_0x400f('0x57')]['id']}})['then'](handleEntityNotFound(_0x45d448,null))[_0x400f('0x30')](saveUpdates(_0x5506b8['body'],null))[_0x400f('0x30')](function(_0x4453c4){if(_0x4453c4){_0x351999=_0x4453c4;return db[_0x400f('0x38')][_0x400f('0x52')]({'raw':!![]});}})[_0x400f('0x30')](function(_0x4ae71f){if(_0x4ae71f){var _0xd9defa=fs[_0x400f('0x66')](path['join'](config['root'],_0x400f('0x68')),_0x400f('0x69'));var _0xaf32dc=fs[_0x400f('0x66')](path['join'](config['root'],_0x400f('0x6a')),_0x400f('0x69'));var _0x13da60=ejs['render'](_0xd9defa,{'trunks':_0x4ae71f||[]});fs['writeFileSync']('/etc/asterisk/sip_xcally_trunks.conf',_0x13da60);var _0x4ea721=ejs[_0x400f('0x6b')](_0xaf32dc,{'trunks':_0x4ae71f||[]});fs[_0x400f('0x6c')](_0x400f('0x6f'),_0x4ea721);return respondWithRpcPromise(_0x400f('0x70'),_0x400f('0x2f'),{'module':_0x400f('0x71')});}return null;})[_0x400f('0x30')](function(_0x2f9162){if(_0x2f9162){return _0x351999;}})[_0x400f('0x30')](respondWithResult(_0x45d448,null))['catch'](handleError(_0x45d448,null));};exports['destroy']=function(_0x518e7e,_0x17ed94,_0x1050b9){var _0x291388;return db[_0x400f('0x38')][_0x400f('0x61')]({'where':{'id':_0x518e7e[_0x400f('0x57')]['id']}})['then'](handleEntityNotFound(_0x17ed94,null))[_0x400f('0x30')](removeEntity(_0x17ed94,null))[_0x400f('0x30')](function(){return db['Trunk'][_0x400f('0x52')]({'raw':!![]});})[_0x400f('0x30')](function(_0x125010){var _0x3fff06=fs[_0x400f('0x66')](path[_0x400f('0x72')](config[_0x400f('0x67')],'server/files/templates/trunk.ejs'),'utf8');var _0xa30cc8=fs[_0x400f('0x66')](path[_0x400f('0x72')](config[_0x400f('0x67')],'server/files/templates/registry.ejs'),'utf8');var _0x4443a3=ejs[_0x400f('0x6b')](_0x3fff06,{'trunks':_0x125010});var _0x336cc1=ejs[_0x400f('0x6b')](_0xa30cc8,{'trunks':_0x125010});fs['writeFileSync'](_0x400f('0x6d'),_0x4443a3);fs[_0x400f('0x6c')](_0x400f('0x6f'),_0x336cc1);return respondWithRpcPromise(_0x400f('0x70'),_0x400f('0x34'),{'module':_0x400f('0x71')});})[_0x400f('0x25')](handleError(_0x17ed94,null));};
\ No newline at end of file
+var _0xf29f=['end','stack','name','send','index','Trunk','rawAttributes','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where','merge','type','key','filter','options','includeAll','include','rows','show','params','find','clone','length','omit','createdAt','updatedAt','body','create','user','UserProfileSection','autoAssociation','findAll','join','root','server/files/templates/trunk.ejs','readFileSync','server/files/templates/registry.ejs','utf8','render','writeFileSync','registry','/etc/asterisk/sip_xcally_registers.conf','Reload','chan_sip.so','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','/etc/asterisk/sip_xcally_trunks.conf','eml-format','rimraf','zip-dir','request-promise','moment','mustache','util','sox','to-csv','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','Trunk,\x20%s,\x20%s','request\x20sent','debug','Trunk,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','get','Trunks','UserProfileResource'];(function(_0x4564f1,_0x34af52){var _0x27f9b9=function(_0x15bcb9){while(--_0x15bcb9){_0x4564f1['push'](_0x4564f1['shift']());}};_0x27f9b9(++_0x34af52);}(_0xf29f,0x18d));var _0xff29=function(_0x5722f3,_0x5e0d0d){_0x5722f3=_0x5722f3-0x0;var _0x1bca9f=_0xf29f[_0x5722f3];return _0x1bca9f;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xff29('0x0'));var rimraf=require(_0xff29('0x1'));var zipdir=require(_0xff29('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xff29('0x3'));var moment=require(_0xff29('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xff29('0x5'));var util=require(_0xff29('0x6'));var path=require('path');var sox=require(_0xff29('0x7'));var csv=require(_0xff29('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xff29('0x9'));var crypto=require('crypto');var jsforce=require(_0xff29('0xa'));var deskjs=require(_0xff29('0xb'));var toCsv=require(_0xff29('0x8'));var querystring=require(_0xff29('0xc'));var Papa=require(_0xff29('0xd'));var Redis=require(_0xff29('0xe'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0xff29('0xf'));var logger=require(_0xff29('0x10'))(_0xff29('0x11'));var utils=require(_0xff29('0x12'));var config=require(_0xff29('0x13'));var db=require(_0xff29('0x14'))['db'];var jayson=require(_0xff29('0x15'));var client=jayson[_0xff29('0x16')][_0xff29('0x17')]({'port':0x232a});function checkPasswordPattern(_0x1f4a9c,_0xf67040,_0x425fe9){if(_0x425fe9){var _0xd453c3=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0xd453c3[_0xff29('0x18')](_0xf67040)){return _0x1f4a9c;}else{throw new Error(_0xff29('0x19'));}}else{return _0x1f4a9c;}}function respondWithRpcPromise(_0x518c75,_0x1ff15e,_0x270f36,_0x4c458c){return new BPromise(function(_0x2228fb,_0xbd98f5){var _0x24567d=_0x4c458c||client;return _0x24567d[_0xff29('0x1a')](_0x518c75,_0x270f36)[_0xff29('0x1b')](function(_0x438518){logger[_0xff29('0x1c')](_0xff29('0x1d'),_0x1ff15e,_0xff29('0x1e'));logger[_0xff29('0x1f')](_0xff29('0x20'),_0x1ff15e,'request\x20sent',JSON[_0xff29('0x21')](_0x438518));if(_0x438518[_0xff29('0x22')]){if(_0x438518[_0xff29('0x22')][_0xff29('0x23')]===0x1f4){logger[_0xff29('0x22')](_0xff29('0x1d'),_0x1ff15e,_0x438518['error'][_0xff29('0x24')]);return _0xbd98f5(_0x438518[_0xff29('0x22')][_0xff29('0x24')]);}logger[_0xff29('0x22')](_0xff29('0x1d'),_0x1ff15e,_0x438518[_0xff29('0x22')][_0xff29('0x24')]);return _0x2228fb(_0x438518[_0xff29('0x22')][_0xff29('0x24')]);}else{logger[_0xff29('0x1c')](_0xff29('0x1d'),_0x1ff15e,_0xff29('0x1e'));_0x2228fb(_0x438518[_0xff29('0x25')][_0xff29('0x24')]);}})[_0xff29('0x26')](function(_0x331de6){logger[_0xff29('0x22')]('Trunk,\x20%s,\x20%s',_0x1ff15e,_0x331de6);_0xbd98f5(_0x331de6);});});}function respondWithStatusCode(_0x21b7f3,_0x15cd08){_0x15cd08=_0x15cd08||0xcc;return function(_0x597ebb){if(_0x597ebb){return _0x21b7f3[_0xff29('0x27')](_0x15cd08);}return _0x21b7f3['status'](_0x15cd08)['end']();};}function respondWithResult(_0x54cc3a,_0x51fbc9){_0x51fbc9=_0x51fbc9||0xc8;return function(_0x13b237){if(_0x13b237){return _0x54cc3a[_0xff29('0x28')](_0x51fbc9)[_0xff29('0x29')](_0x13b237);}};}function respondWithFilteredResult(_0xdbe40b,_0x15d626){return function(_0x50570a){if(_0x50570a){var _0x81ddb9=_0x50570a[_0xff29('0x2a')],_0x27c9bf=_0x15d626[_0xff29('0x2b')],_0x1dc67e=_0x15d626[_0xff29('0x2b')]+_0x15d626[_0xff29('0x2c')],_0x132682;if(_0x1dc67e>=_0x81ddb9){_0x1dc67e=_0x81ddb9;_0x132682=0xc8;}else{_0x132682=0xce;}_0xdbe40b[_0xff29('0x28')](_0x132682);return _0xdbe40b[_0xff29('0x2d')](_0xff29('0x2e'),_0x27c9bf+'-'+_0x1dc67e+'/'+_0x81ddb9)[_0xff29('0x29')](_0x50570a);}return null;};}function patchUpdates(_0xafccf2){return function(_0x4d3732){try{jsonpatch[_0xff29('0x2f')](_0x4d3732,_0xafccf2,!![]);}catch(_0x2c2a7d){return BPromise[_0xff29('0x30')](_0x2c2a7d);}return _0x4d3732[_0xff29('0x31')]();};}function saveUpdates(_0x4b0586,_0x4783f0){return function(_0x28175e){if(_0x28175e){return _0x28175e[_0xff29('0x32')](_0x4b0586)['then'](function(_0x1673ca){return _0x1673ca;});}return null;};}function removeEntity(_0x4f87f6,_0x5bafa2){return function(_0x5b359e){if(_0x5b359e){return _0x5b359e[_0xff29('0x33')]()[_0xff29('0x1b')](function(){var _0x1b3c43=_0x5b359e[_0xff29('0x34')]({'plain':!![]});var _0x17c254=_0xff29('0x35');return db[_0xff29('0x36')][_0xff29('0x33')]({'where':{'type':_0x17c254,'resourceId':_0x1b3c43['id']}})[_0xff29('0x1b')](function(){return _0x5b359e;});})[_0xff29('0x1b')](function(){_0x4f87f6[_0xff29('0x28')](0xcc)[_0xff29('0x37')]();});}};}function handleEntityNotFound(_0x1fada6,_0x29f1cf){return function(_0x2832bc){if(!_0x2832bc){_0x1fada6[_0xff29('0x27')](0x194);}return _0x2832bc;};}function handleError(_0x49ff59,_0x13ff3d){_0x13ff3d=_0x13ff3d||0x1f4;return function(_0xfc48ce){logger['error'](_0xfc48ce[_0xff29('0x38')]);if(_0xfc48ce[_0xff29('0x39')]){delete _0xfc48ce[_0xff29('0x39')];}_0x49ff59[_0xff29('0x28')](_0x13ff3d)[_0xff29('0x3a')](_0xfc48ce);};}exports[_0xff29('0x3b')]=function(_0x1768b6,_0xf11b20){var _0x4a2d57={},_0x1fd4e6={},_0xed2929={'count':0x0,'rows':[]};var _0x43d561=db[_0xff29('0x3c')][_0xff29('0x3d')];_0x1fd4e6[_0xff29('0x3e')]=_[_0xff29('0x3f')](_0x43d561);_0x1fd4e6[_0xff29('0x40')]=_[_0xff29('0x3f')](_0x1768b6[_0xff29('0x40')]);_0x1fd4e6[_0xff29('0x41')]=_[_0xff29('0x42')](_0x1fd4e6[_0xff29('0x3e')],_0x1fd4e6[_0xff29('0x40')]);_0x4a2d57['attributes']=_[_0xff29('0x42')](_0x1fd4e6[_0xff29('0x3e')],qs['fields'](_0x1768b6[_0xff29('0x40')][_0xff29('0x43')]));_0x4a2d57[_0xff29('0x44')]=_0x4a2d57['attributes']['length']?_0x4a2d57[_0xff29('0x44')]:_0x1fd4e6[_0xff29('0x3e')];if(!_0x1768b6[_0xff29('0x40')][_0xff29('0x45')](_0xff29('0x46'))){_0x4a2d57[_0xff29('0x2c')]=qs[_0xff29('0x2c')](_0x1768b6['query']['limit']);_0x4a2d57['offset']=qs[_0xff29('0x2b')](_0x1768b6[_0xff29('0x40')][_0xff29('0x2b')]);}_0x4a2d57[_0xff29('0x47')]=qs[_0xff29('0x48')](_0x1768b6[_0xff29('0x40')][_0xff29('0x48')]);_0x4a2d57[_0xff29('0x49')]=qs[_0xff29('0x41')](_['pick'](_0x1768b6[_0xff29('0x40')],_0x1fd4e6[_0xff29('0x41')]));if(_0x1768b6[_0xff29('0x40')]['filter']){_0x4a2d57['where']=_[_0xff29('0x4a')](_0x4a2d57['where'],{'$or':_['map'](_0x43d561,function(_0x3d32e0){if(_0x3d32e0[_0xff29('0x4b')][_0xff29('0x4c')]!=='VIRTUAL'){var _0x325601={};_0x325601[_0x3d32e0['field']]={'$like':'%'+_0x1768b6[_0xff29('0x40')][_0xff29('0x4d')]+'%'};return _0x325601;}})});}_0x4a2d57=_[_0xff29('0x4a')]({},_0x4a2d57,_0x1768b6[_0xff29('0x4e')]);var _0x47bdb7={'where':_0x4a2d57[_0xff29('0x49')]};return db[_0xff29('0x3c')][_0xff29('0x2a')](_0x47bdb7)[_0xff29('0x1b')](function(_0x478870){_0xed2929[_0xff29('0x2a')]=_0x478870;if(_0x1768b6[_0xff29('0x40')][_0xff29('0x4f')]){_0x4a2d57[_0xff29('0x50')]=[{'all':!![]}];}return db['Trunk']['findAll'](_0x4a2d57);})[_0xff29('0x1b')](function(_0x2596e4){_0xed2929[_0xff29('0x51')]=_0x2596e4;return _0xed2929;})[_0xff29('0x1b')](respondWithFilteredResult(_0xf11b20,_0x4a2d57))[_0xff29('0x26')](handleError(_0xf11b20,null));};exports[_0xff29('0x52')]=function(_0xd52016,_0x45bdcd){var _0xeae254={'raw':![],'where':{'id':_0xd52016[_0xff29('0x53')]['id']}},_0x573a50={};_0x573a50[_0xff29('0x3e')]=_[_0xff29('0x3f')](db[_0xff29('0x3c')][_0xff29('0x3d')]);_0x573a50['query']=_[_0xff29('0x3f')](_0xd52016[_0xff29('0x40')]);_0x573a50[_0xff29('0x41')]=_[_0xff29('0x42')](_0x573a50['model'],_0x573a50['query']);_0xeae254[_0xff29('0x44')]=_[_0xff29('0x42')](_0x573a50[_0xff29('0x3e')],qs['fields'](_0xd52016[_0xff29('0x40')]['fields']));_0xeae254['attributes']=_0xeae254['attributes']['length']?_0xeae254[_0xff29('0x44')]:_0x573a50[_0xff29('0x3e')];if(_0xd52016[_0xff29('0x40')][_0xff29('0x4f')]){_0xeae254[_0xff29('0x50')]=[{'all':!![]}];}_0xeae254=_['merge']({},_0xeae254,_0xd52016['options']);return db[_0xff29('0x3c')][_0xff29('0x54')](_0xeae254)[_0xff29('0x1b')](handleEntityNotFound(_0x45bdcd,null))[_0xff29('0x1b')](respondWithResult(_0x45bdcd,null))[_0xff29('0x26')](handleError(_0x45bdcd,null));};exports[_0xff29('0x55')]=function(_0x2da4a6,_0xd6e904){var _0x3ccbec={'raw':![],'where':{'id':_0x2da4a6[_0xff29('0x53')]['id']}},_0x516944={};_0x516944['model']=_[_0xff29('0x3f')](db[_0xff29('0x3c')]['rawAttributes']);_0x3ccbec['attributes']=_['intersection'](_0x516944[_0xff29('0x3e')],qs['fields'](_0x2da4a6[_0xff29('0x40')][_0xff29('0x43')]));_0x3ccbec[_0xff29('0x44')]=_0x3ccbec[_0xff29('0x44')][_0xff29('0x56')]?_0x3ccbec[_0xff29('0x44')]:_0x516944[_0xff29('0x3e')];if(_0x2da4a6['query'][_0xff29('0x4f')]){_0x3ccbec[_0xff29('0x50')]=[{'all':!![]}];}_0x3ccbec=_[_0xff29('0x4a')]({},_0x3ccbec,_0x2da4a6[_0xff29('0x4e')]);return db['Trunk']['find'](_0x3ccbec)[_0xff29('0x1b')](handleEntityNotFound(_0xd6e904,null))['then'](function(_0x5264ca){if(_0x5264ca){var _0xca515b=_0x5264ca[_0xff29('0x34')]({'plain':!![]});_0xca515b=qs[_0xff29('0x57')](_0xca515b,['id',_0xff29('0x58'),_0xff29('0x59')]);_0x2da4a6[_0xff29('0x5a')]=_[_0xff29('0x57')](_0x2da4a6[_0xff29('0x5a')],['id','createdAt',_0xff29('0x59')]);return db[_0xff29('0x3c')][_0xff29('0x5b')](_[_0xff29('0x4a')](_0xca515b,_0x2da4a6[_0xff29('0x5a')]),{'include':_0x2da4a6[_0xff29('0x40')][_0xff29('0x4f')]?[{'all':!![]}]:undefined})['then'](function(_0x29e145){var _0x2e8f93=_0x2da4a6[_0xff29('0x5c')][_0xff29('0x34')]({'plain':!![]});if(!_0x2e8f93)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x2e8f93['role']==='user'){var _0x1c0632=_0x29e145['get']({'plain':!![]});var _0x609a6a=_0xff29('0x35');return db[_0xff29('0x5d')][_0xff29('0x54')]({'where':{'name':_0x609a6a,'userProfileId':_0x2e8f93['userProfileId']},'raw':!![]})['then'](function(_0x20ca4f){if(_0x20ca4f&&_0x20ca4f[_0xff29('0x5e')]===0x0){return db[_0xff29('0x36')][_0xff29('0x5b')]({'name':_0x1c0632[_0xff29('0x39')],'resourceId':_0x1c0632['id'],'type':_0x20ca4f[_0xff29('0x39')],'sectionId':_0x20ca4f['id']},{})['then'](function(){return _0x29e145;});}else{return _0x29e145;}})[_0xff29('0x26')](function(_0x4a5abc){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x4a5abc);throw _0x4a5abc;});}return _0x29e145;});}})[_0xff29('0x1b')](respondWithResult(_0xd6e904,0xc9))[_0xff29('0x26')](handleError(_0xd6e904,null));};exports['create']=function(_0x58d5fe,_0x188b5d,_0x320fd1){var _0x11a462;return db[_0xff29('0x3c')][_0xff29('0x5b')](_0x58d5fe[_0xff29('0x5a')],{'raw':!![]})['then'](function(_0x45ad6a){_0x11a462=_0x45ad6a;return db[_0xff29('0x3c')][_0xff29('0x5f')]({'raw':!![]});})[_0xff29('0x1b')](function(_0x20ca18){var _0x1135fe=fs['readFileSync'](path[_0xff29('0x60')](config[_0xff29('0x61')],_0xff29('0x62')),'utf8');var _0x29b5dc=fs[_0xff29('0x63')](path[_0xff29('0x60')](config[_0xff29('0x61')],_0xff29('0x64')),_0xff29('0x65'));var _0x562b09=ejs[_0xff29('0x66')](_0x1135fe,{'trunks':_0x20ca18||[]});fs[_0xff29('0x67')]('/etc/asterisk/sip_xcally_trunks.conf',_0x562b09);if(_0x11a462[_0xff29('0x68')]){var _0x184734=ejs[_0xff29('0x66')](_0x29b5dc,{'trunks':_0x20ca18||[]});fs[_0xff29('0x67')](_0xff29('0x69'),_0x184734);}})['then'](function(){return respondWithRpcPromise(_0xff29('0x6a'),_0xff29('0x5b'),{'module':_0xff29('0x6b')});})[_0xff29('0x1b')](function(){var _0x52615c=_0x58d5fe['user'][_0xff29('0x34')]({'plain':!![]});if(!_0x52615c)throw new Error(_0xff29('0x6c'));if(_0x52615c[_0xff29('0x6d')]===_0xff29('0x5c')){var _0x3aeb3b=_0x11a462['get']({'plain':!![]});return db['UserProfileSection'][_0xff29('0x54')]({'where':{'name':_0xff29('0x35'),'userProfileId':_0x52615c[_0xff29('0x6e')]},'raw':!![]})[_0xff29('0x1b')](function(_0xe00b1a){if(_0xe00b1a&&_0xe00b1a['autoAssociation']===0x0){return db[_0xff29('0x36')]['create']({'name':_0x3aeb3b[_0xff29('0x39')],'resourceId':_0x3aeb3b['id'],'type':_0xe00b1a[_0xff29('0x39')],'sectionId':_0xe00b1a['id']},{})[_0xff29('0x1b')](function(){return _0x11a462;});}else{return _0x11a462;}})[_0xff29('0x26')](function(_0x5bc0df){logger[_0xff29('0x22')](_0xff29('0x6f'),_0x5bc0df);throw _0x5bc0df;});}return _0x11a462;})['then'](respondWithResult(_0x188b5d,0xc9))[_0xff29('0x26')](handleError(_0x188b5d,null));};exports['update']=function(_0x3c64c9,_0x4f37cb,_0x31b3c3){var _0x21df6f;return db[_0xff29('0x3c')][_0xff29('0x54')]({'where':{'id':_0x3c64c9[_0xff29('0x53')]['id']}})['then'](handleEntityNotFound(_0x4f37cb,null))[_0xff29('0x1b')](saveUpdates(_0x3c64c9['body'],null))['then'](function(_0x6db8b){if(_0x6db8b){_0x21df6f=_0x6db8b;return db['Trunk'][_0xff29('0x5f')]({'raw':!![]});}})[_0xff29('0x1b')](function(_0x44a0f7){if(_0x44a0f7){var _0x38465b=fs['readFileSync'](path[_0xff29('0x60')](config['root'],_0xff29('0x62')),_0xff29('0x65'));var _0x276b98=fs[_0xff29('0x63')](path['join'](config[_0xff29('0x61')],_0xff29('0x64')),_0xff29('0x65'));var _0x313498=ejs[_0xff29('0x66')](_0x38465b,{'trunks':_0x44a0f7||[]});fs[_0xff29('0x67')]('/etc/asterisk/sip_xcally_trunks.conf',_0x313498);var _0x5271c7=ejs[_0xff29('0x66')](_0x276b98,{'trunks':_0x44a0f7||[]});fs[_0xff29('0x67')](_0xff29('0x69'),_0x5271c7);return respondWithRpcPromise('Reload','update',{'module':_0xff29('0x6b')});}return null;})['then'](function(_0x392ae4){if(_0x392ae4){return _0x21df6f;}})['then'](respondWithResult(_0x4f37cb,null))[_0xff29('0x26')](handleError(_0x4f37cb,null));};exports[_0xff29('0x33')]=function(_0x1be9d1,_0x28ac21,_0x32a38d){var _0x4ee521;return db[_0xff29('0x3c')][_0xff29('0x54')]({'where':{'id':_0x1be9d1[_0xff29('0x53')]['id']}})[_0xff29('0x1b')](handleEntityNotFound(_0x28ac21,null))[_0xff29('0x1b')](removeEntity(_0x28ac21,null))['then'](function(){return db['Trunk'][_0xff29('0x5f')]({'raw':!![]});})[_0xff29('0x1b')](function(_0x2764cd){var _0x384ad4=fs[_0xff29('0x63')](path[_0xff29('0x60')](config[_0xff29('0x61')],_0xff29('0x62')),_0xff29('0x65'));var _0x3b15dc=fs[_0xff29('0x63')](path['join'](config[_0xff29('0x61')],_0xff29('0x64')),_0xff29('0x65'));var _0x208962=ejs[_0xff29('0x66')](_0x384ad4,{'trunks':_0x2764cd});var _0x3e69f0=ejs['render'](_0x3b15dc,{'trunks':_0x2764cd});fs['writeFileSync'](_0xff29('0x70'),_0x208962);fs['writeFileSync'](_0xff29('0x69'),_0x3e69f0);return respondWithRpcPromise('Reload',_0xff29('0x33'),{'module':_0xff29('0x6b')});})[_0xff29('0x26')](handleError(_0x28ac21,null));};
\ No newline at end of file
index 7117c9d..00de8db 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8c32=['exports','define','Trunk','tools_trunks','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./trunk.attributes'];(function(_0x3cb30b,_0x504b3e){var _0x2ca717=function(_0x32a3d9){while(--_0x32a3d9){_0x3cb30b['push'](_0x3cb30b['shift']());}};_0x2ca717(++_0x504b3e);}(_0x8c32,0x130));var _0x28c3=function(_0x2c7618,_0x26be9c){_0x2c7618=_0x2c7618-0x0;var _0x5ce3f0=_0x8c32[_0x2c7618];return _0x5ce3f0;};'use strict';var _=require(_0x28c3('0x0'));var util=require(_0x28c3('0x1'));var logger=require(_0x28c3('0x2'))(_0x28c3('0x3'));var moment=require(_0x28c3('0x4'));var BPromise=require(_0x28c3('0x5'));var rp=require(_0x28c3('0x6'));var fs=require('fs');var path=require(_0x28c3('0x7'));var rimraf=require(_0x28c3('0x8'));var config=require(_0x28c3('0x9'));var attributes=require(_0x28c3('0xa'));module[_0x28c3('0xb')]=function(_0x537b4f,_0x2861c9){return _0x537b4f[_0x28c3('0xc')](_0x28c3('0xd'),attributes,{'tableName':_0x28c3('0xe'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x3561=['../../config/environment','./trunk.attributes','exports','define','tools_trunks','lodash','../../config/logger','api','moment','bluebird','request-promise','path','rimraf'];(function(_0x10f95f,_0xe0a31b){var _0x191874=function(_0x50b95a){while(--_0x50b95a){_0x10f95f['push'](_0x10f95f['shift']());}};_0x191874(++_0xe0a31b);}(_0x3561,0x94));var _0x1356=function(_0x3ee9b6,_0x47db19){_0x3ee9b6=_0x3ee9b6-0x0;var _0xcc8440=_0x3561[_0x3ee9b6];return _0xcc8440;};'use strict';var _=require(_0x1356('0x0'));var util=require('util');var logger=require(_0x1356('0x1'))(_0x1356('0x2'));var moment=require(_0x1356('0x3'));var BPromise=require(_0x1356('0x4'));var rp=require(_0x1356('0x5'));var fs=require('fs');var path=require(_0x1356('0x6'));var rimraf=require(_0x1356('0x7'));var config=require(_0x1356('0x8'));var attributes=require(_0x1356('0x9'));module[_0x1356('0xa')]=function(_0x417d11,_0x36e81f){return _0x417d11[_0x1356('0xb')]('Trunk',attributes,{'tableName':_0x1356('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index dcc592d..3633966 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x836c=['Trunk','findAll','options','raw','where','attributes','include','map','model','debug','ShowTrunk','find','stringify','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','http','then','info','Trunk,\x20%s,\x20%s','request\x20sent','Trunk,\x20%s,\x20%s,\x20%s','error','message','result','catch','GetTrunk'];(function(_0x5e282c,_0x11fe10){var _0x7efe5e=function(_0x460164){while(--_0x460164){_0x5e282c['push'](_0x5e282c['shift']());}};_0x7efe5e(++_0x11fe10);}(_0x836c,0x11d));var _0xc836=function(_0x19fc7f,_0x3056f9){_0x19fc7f=_0x19fc7f-0x0;var _0x151e5c=_0x836c[_0x19fc7f];return _0x151e5c;};'use strict';var _=require(_0xc836('0x0'));var util=require(_0xc836('0x1'));var moment=require(_0xc836('0x2'));var BPromise=require(_0xc836('0x3'));var rs=require(_0xc836('0x4'));var fs=require('fs');var Redis=require(_0xc836('0x5'));var db=require(_0xc836('0x6'))['db'];var utils=require(_0xc836('0x7'));var logger=require(_0xc836('0x8'))('rpc');var config=require('../../config/environment');var jayson=require(_0xc836('0x9'));var client=jayson['client'][_0xc836('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x47ad14,_0x5438af,_0x2eb5a2){return new BPromise(function(_0x4f385a,_0x44ee31){return client['request'](_0x47ad14,_0x2eb5a2)[_0xc836('0xb')](function(_0x323844){logger[_0xc836('0xc')](_0xc836('0xd'),_0x5438af,_0xc836('0xe'));logger['debug'](_0xc836('0xf'),_0x5438af,_0xc836('0xe'),JSON['stringify'](_0x323844));if(_0x323844[_0xc836('0x10')]){if(_0x323844[_0xc836('0x10')]['code']===0x1f4){logger['error']('Trunk,\x20%s,\x20%s',_0x5438af,_0x323844['error']['message']);return _0x44ee31(_0x323844[_0xc836('0x10')][_0xc836('0x11')]);}logger['error'](_0xc836('0xd'),_0x5438af,_0x323844[_0xc836('0x10')][_0xc836('0x11')]);return _0x4f385a(_0x323844[_0xc836('0x10')][_0xc836('0x11')]);}else{logger['info'](_0xc836('0xd'),_0x5438af,_0xc836('0xe'));_0x4f385a(_0x323844[_0xc836('0x12')][_0xc836('0x11')]);}})[_0xc836('0x13')](function(_0x21f10b){logger['error'](_0xc836('0xd'),_0x5438af,_0x21f10b);_0x44ee31(_0x21f10b);});});}exports[_0xc836('0x14')]=function(_0x25f741){var _0x39a8a4=this;return new Promise(function(_0x1dba50,_0x345774){return db[_0xc836('0x15')][_0xc836('0x16')]({'raw':_0x25f741[_0xc836('0x17')]?_0x25f741[_0xc836('0x17')][_0xc836('0x18')]===undefined?!![]:![]:!![],'where':_0x25f741[_0xc836('0x17')]?_0x25f741[_0xc836('0x17')][_0xc836('0x19')]||null:null,'attributes':_0x25f741[_0xc836('0x17')]?_0x25f741['options'][_0xc836('0x1a')]||null:null,'limit':_0x25f741[_0xc836('0x17')]?_0x25f741[_0xc836('0x17')]['limit']||null:null,'include':_0x25f741['options']?_0x25f741[_0xc836('0x17')][_0xc836('0x1b')]?_[_0xc836('0x1c')](_0x25f741[_0xc836('0x17')][_0xc836('0x1b')],function(_0x4971b2){return{'model':db[_0x4971b2[_0xc836('0x1d')]],'as':_0x4971b2['as'],'attributes':_0x4971b2['attributes'],'include':_0x4971b2[_0xc836('0x1b')]?_[_0xc836('0x1c')](_0x4971b2['include'],function(_0x13d0d3){return{'model':db[_0x13d0d3[_0xc836('0x1d')]],'as':_0x13d0d3['as'],'attributes':_0x13d0d3['attributes'],'include':_0x13d0d3[_0xc836('0x1b')]?_['map'](_0x13d0d3[_0xc836('0x1b')],function(_0x1d3943){return{'model':db[_0x1d3943[_0xc836('0x1d')]],'as':_0x1d3943['as'],'attributes':_0x1d3943['attributes']};}):[]};}):[]};}):[]:[]})[_0xc836('0xb')](function(_0x31bb21){logger[_0xc836('0xc')](_0xc836('0x14'),_0x25f741);logger[_0xc836('0x1e')](_0xc836('0x14'),_0x25f741,JSON['stringify'](_0x31bb21));_0x1dba50(_0x31bb21);})[_0xc836('0x13')](function(_0x93444c){logger['error']('GetTrunk',_0x93444c[_0xc836('0x11')],_0x25f741);_0x345774(_0x39a8a4[_0xc836('0x10')](0x1f4,_0x93444c[_0xc836('0x11')]));});});};exports[_0xc836('0x1f')]=function(_0x6ad87){var _0x3b7e30=this;return new Promise(function(_0x4a82bd,_0x2e0a73){return db['Trunk'][_0xc836('0x20')]({'raw':_0x6ad87[_0xc836('0x17')]?_0x6ad87['options'][_0xc836('0x18')]===undefined?!![]:![]:!![],'where':_0x6ad87['options']?_0x6ad87[_0xc836('0x17')][_0xc836('0x19')]||null:null,'attributes':_0x6ad87['options']?_0x6ad87[_0xc836('0x17')][_0xc836('0x1a')]||null:null,'include':_0x6ad87[_0xc836('0x17')]?_0x6ad87['options'][_0xc836('0x1b')]?_[_0xc836('0x1c')](_0x6ad87['options']['include'],function(_0x210d1c){return{'model':db[_0x210d1c['model']],'as':_0x210d1c['as'],'attributes':_0x210d1c['attributes'],'include':_0x210d1c[_0xc836('0x1b')]?_[_0xc836('0x1c')](_0x210d1c[_0xc836('0x1b')],function(_0x2c6bc9){return{'model':db[_0x2c6bc9[_0xc836('0x1d')]],'as':_0x2c6bc9['as'],'attributes':_0x2c6bc9[_0xc836('0x1a')],'include':_0x2c6bc9[_0xc836('0x1b')]?_[_0xc836('0x1c')](_0x2c6bc9[_0xc836('0x1b')],function(_0x276955){return{'model':db[_0x276955[_0xc836('0x1d')]],'as':_0x276955['as'],'attributes':_0x276955[_0xc836('0x1a')]};}):[]};}):[]};}):[]:[]})['then'](function(_0xf10587){logger[_0xc836('0xc')](_0xc836('0x1f'),_0x6ad87);logger[_0xc836('0x1e')](_0xc836('0x1f'),_0x6ad87,JSON[_0xc836('0x21')](_0xf10587));_0x4a82bd(_0xf10587);})['catch'](function(_0x1462b3){logger['error']('ShowTrunk',_0x1462b3[_0xc836('0x11')],_0x6ad87);_0x2e0a73(_0x3b7e30[_0xc836('0x10')](0x1f4,_0x1462b3[_0xc836('0x11')]));});});};
\ No newline at end of file
+var _0x74b7=['../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','Trunk,\x20%s,\x20%s','request\x20sent','debug','Trunk,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','GetTrunk','Trunk','options','raw','limit','include','map','model','attributes','ShowTrunk','find','lodash','util','moment','bluebird','randomstring'];(function(_0x2016bb,_0x1ea54d){var _0x78113b=function(_0x70ae0b){while(--_0x70ae0b){_0x2016bb['push'](_0x2016bb['shift']());}};_0x78113b(++_0x1ea54d);}(_0x74b7,0x12d));var _0x774b=function(_0x1d6014,_0x41b4ed){_0x1d6014=_0x1d6014-0x0;var _0x56d86d=_0x74b7[_0x1d6014];return _0x56d86d;};'use strict';var _=require(_0x774b('0x0'));var util=require(_0x774b('0x1'));var moment=require(_0x774b('0x2'));var BPromise=require(_0x774b('0x3'));var rs=require(_0x774b('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x774b('0x5'))['db'];var utils=require(_0x774b('0x6'));var logger=require(_0x774b('0x7'))('rpc');var config=require(_0x774b('0x8'));var jayson=require(_0x774b('0x9'));var client=jayson[_0x774b('0xa')][_0x774b('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x29c95f,_0x1bfe50,_0x565e88){return new BPromise(function(_0xebd772,_0x4597e1){return client[_0x774b('0xc')](_0x29c95f,_0x565e88)[_0x774b('0xd')](function(_0x8a385){logger['info'](_0x774b('0xe'),_0x1bfe50,_0x774b('0xf'));logger[_0x774b('0x10')](_0x774b('0x11'),_0x1bfe50,_0x774b('0xf'),JSON[_0x774b('0x12')](_0x8a385));if(_0x8a385[_0x774b('0x13')]){if(_0x8a385[_0x774b('0x13')]['code']===0x1f4){logger['error'](_0x774b('0xe'),_0x1bfe50,_0x8a385[_0x774b('0x13')][_0x774b('0x14')]);return _0x4597e1(_0x8a385[_0x774b('0x13')]['message']);}logger[_0x774b('0x13')](_0x774b('0xe'),_0x1bfe50,_0x8a385[_0x774b('0x13')][_0x774b('0x14')]);return _0xebd772(_0x8a385[_0x774b('0x13')]['message']);}else{logger['info'](_0x774b('0xe'),_0x1bfe50,_0x774b('0xf'));_0xebd772(_0x8a385[_0x774b('0x15')][_0x774b('0x14')]);}})[_0x774b('0x16')](function(_0x20dc82){logger[_0x774b('0x13')]('Trunk,\x20%s,\x20%s',_0x1bfe50,_0x20dc82);_0x4597e1(_0x20dc82);});});}exports[_0x774b('0x17')]=function(_0x136e88){var _0x2ca34b=this;return new Promise(function(_0x356e38,_0x27f7b7){return db[_0x774b('0x18')]['findAll']({'raw':_0x136e88[_0x774b('0x19')]?_0x136e88[_0x774b('0x19')][_0x774b('0x1a')]===undefined?!![]:![]:!![],'where':_0x136e88[_0x774b('0x19')]?_0x136e88[_0x774b('0x19')]['where']||null:null,'attributes':_0x136e88['options']?_0x136e88['options']['attributes']||null:null,'limit':_0x136e88[_0x774b('0x19')]?_0x136e88[_0x774b('0x19')][_0x774b('0x1b')]||null:null,'include':_0x136e88['options']?_0x136e88['options'][_0x774b('0x1c')]?_[_0x774b('0x1d')](_0x136e88[_0x774b('0x19')]['include'],function(_0x4fe258){return{'model':db[_0x4fe258[_0x774b('0x1e')]],'as':_0x4fe258['as'],'attributes':_0x4fe258[_0x774b('0x1f')],'include':_0x4fe258['include']?_['map'](_0x4fe258[_0x774b('0x1c')],function(_0x2d06ab){return{'model':db[_0x2d06ab['model']],'as':_0x2d06ab['as'],'attributes':_0x2d06ab[_0x774b('0x1f')],'include':_0x2d06ab[_0x774b('0x1c')]?_[_0x774b('0x1d')](_0x2d06ab[_0x774b('0x1c')],function(_0x5e5819){return{'model':db[_0x5e5819[_0x774b('0x1e')]],'as':_0x5e5819['as'],'attributes':_0x5e5819['attributes']};}):[]};}):[]};}):[]:[]})[_0x774b('0xd')](function(_0x297858){logger['info'](_0x774b('0x17'),_0x136e88);logger[_0x774b('0x10')](_0x774b('0x17'),_0x136e88,JSON[_0x774b('0x12')](_0x297858));_0x356e38(_0x297858);})[_0x774b('0x16')](function(_0x449aa8){logger[_0x774b('0x13')](_0x774b('0x17'),_0x449aa8[_0x774b('0x14')],_0x136e88);_0x27f7b7(_0x2ca34b[_0x774b('0x13')](0x1f4,_0x449aa8['message']));});});};exports[_0x774b('0x20')]=function(_0x3293fe){var _0x33762d=this;return new Promise(function(_0x441c88,_0x137ffe){return db[_0x774b('0x18')][_0x774b('0x21')]({'raw':_0x3293fe[_0x774b('0x19')]?_0x3293fe[_0x774b('0x19')][_0x774b('0x1a')]===undefined?!![]:![]:!![],'where':_0x3293fe['options']?_0x3293fe[_0x774b('0x19')]['where']||null:null,'attributes':_0x3293fe['options']?_0x3293fe[_0x774b('0x19')][_0x774b('0x1f')]||null:null,'include':_0x3293fe[_0x774b('0x19')]?_0x3293fe['options'][_0x774b('0x1c')]?_['map'](_0x3293fe[_0x774b('0x19')]['include'],function(_0x3e8039){return{'model':db[_0x3e8039[_0x774b('0x1e')]],'as':_0x3e8039['as'],'attributes':_0x3e8039['attributes'],'include':_0x3e8039[_0x774b('0x1c')]?_[_0x774b('0x1d')](_0x3e8039[_0x774b('0x1c')],function(_0x580b7c){return{'model':db[_0x580b7c['model']],'as':_0x580b7c['as'],'attributes':_0x580b7c[_0x774b('0x1f')],'include':_0x580b7c[_0x774b('0x1c')]?_['map'](_0x580b7c[_0x774b('0x1c')],function(_0x413153){return{'model':db[_0x413153[_0x774b('0x1e')]],'as':_0x413153['as'],'attributes':_0x413153[_0x774b('0x1f')]};}):[]};}):[]};}):[]:[]})[_0x774b('0xd')](function(_0x80db3){logger['info']('ShowTrunk',_0x3293fe);logger[_0x774b('0x10')](_0x774b('0x20'),_0x3293fe,JSON['stringify'](_0x80db3));_0x441c88(_0x80db3);})[_0x774b('0x16')](function(_0x78bdd5){logger[_0x774b('0x13')](_0x774b('0x20'),_0x78bdd5[_0x774b('0x14')],_0x3293fe);_0x137ffe(_0x33762d[_0x774b('0x13')](0x1f4,_0x78bdd5['message']));});});};
\ No newline at end of file
index ceef5a6..2cf6975 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd523=['join','server/files/images/','format','now','single','/:id/login','/:id/logout','logout','/:id/pause','addTeams','addChatInteractions','/:id/mail_interactions','addMailInteractions','/:id/fax_interactions','addFaxInteractions','/:id/openchannel_interactions','addOpenchannelInteractions','addFaxAccounts','addMailAccounts','/:id/openchannel_accounts','addOpenchannelAccounts','/:id/sms_accounts','addChatWebsites','/:id/api_key','createApiKey','put','/:id/password','changePassword','delete','removeTeams','destroy','/:id/chat_interactions','removeChatInteractions','removeMailInteractions','/:id/sms_interactions','removeFaxAccounts','removeMailAccounts','removeOpenchannelAccounts','removeSmsAccounts','removeChatWebsites','removeApiKey','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','./user.controller','get','isAuthenticated','index','describe','/:id','show','/:id/avatar','getAvatar','/:id/contacts','getContacts','/:id/queues','getQueues','getVoiceQueuesRt','getGroups','/:id/recordings','getRecordings','/:id/screen_recordings','getScreenRecordings','/:id/chat/interactions','getChatInteractions','/:id/openchannel/interactions','getOpenchannelInteractions','/:id/mail/interactions','getMailInteractions','/:id/sms/interactions','getSmsInteractions','/:id/fax/interactions','getFaxInteractions','/:id/teams','/:id/lists','/:id/agents','getAgents','/:id/prefixes','getVoicePrefixes','/:id/fax_accounts','/:id/mail_accounts','getMailAccounts','getOpenchannelAccounts','getSmsAccounts','/:id/chat_websites','getChatWebsites','/:id/square_projects','getScheduledCalls','post','bulkCreate','addContacts','create','addQueues','diskStorage'];(function(_0x2fa773,_0x435c1b){var _0x13831f=function(_0x1fe51b){while(--_0x1fe51b){_0x2fa773['push'](_0x2fa773['shift']());}};_0x13831f(++_0x435c1b);}(_0xd523,0x153));var _0x3d52=function(_0x5dc760,_0x35a3b1){_0x5dc760=_0x5dc760-0x0;var _0x2e49e4=_0xd523[_0x5dc760];return _0x2e49e4;};'use strict';var multer=require(_0x3d52('0x0'));var util=require(_0x3d52('0x1'));var path=require(_0x3d52('0x2'));var timeout=require(_0x3d52('0x3'));var express=require('express');var router=express[_0x3d52('0x4')]();var auth=require(_0x3d52('0x5'));var interaction=require(_0x3d52('0x6'));var config=require('../../config/environment');var controller=require(_0x3d52('0x7'));router[_0x3d52('0x8')]('/',auth[_0x3d52('0x9')](),controller[_0x3d52('0xa')]);router['get']('/describe',auth[_0x3d52('0x9')](),controller[_0x3d52('0xb')]);router[_0x3d52('0x8')](_0x3d52('0xc'),auth[_0x3d52('0x9')](),controller[_0x3d52('0xd')]);router[_0x3d52('0x8')](_0x3d52('0xe'),controller[_0x3d52('0xf')]);router['get'](_0x3d52('0x10'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x11')]);router[_0x3d52('0x8')](_0x3d52('0x12'),auth['isAuthenticated'](),controller[_0x3d52('0x13')]);router['get']('/:id/queues_rt',auth[_0x3d52('0x9')](),controller[_0x3d52('0x14')]);router['get']('/:id/groups',auth['isAuthenticated'](),controller[_0x3d52('0x15')]);router[_0x3d52('0x8')](_0x3d52('0x16'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x17')]);router[_0x3d52('0x8')](_0x3d52('0x18'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x19')]);router[_0x3d52('0x8')](_0x3d52('0x1a'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x1b')]);router[_0x3d52('0x8')](_0x3d52('0x1c'),auth['isAuthenticated'](),controller[_0x3d52('0x1d')]);router[_0x3d52('0x8')](_0x3d52('0x1e'),auth['isAuthenticated'](),controller[_0x3d52('0x1f')]);router[_0x3d52('0x8')](_0x3d52('0x20'),auth['isAuthenticated'](),controller[_0x3d52('0x21')]);router[_0x3d52('0x8')](_0x3d52('0x22'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x23')]);router[_0x3d52('0x8')](_0x3d52('0x24'),auth[_0x3d52('0x9')](),controller['getTeams']);router[_0x3d52('0x8')](_0x3d52('0x25'),auth[_0x3d52('0x9')](),controller['getLists']);router[_0x3d52('0x8')](_0x3d52('0x26'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x27')]);router[_0x3d52('0x8')](_0x3d52('0x28'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x29')]);router[_0x3d52('0x8')](_0x3d52('0x2a'),auth[_0x3d52('0x9')](),controller['getFaxAccounts']);router[_0x3d52('0x8')](_0x3d52('0x2b'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x2c')]);router['get']('/:id/openchannel_accounts',auth[_0x3d52('0x9')](),controller[_0x3d52('0x2d')]);router[_0x3d52('0x8')]('/:id/sms_accounts',auth[_0x3d52('0x9')](),controller[_0x3d52('0x2e')]);router[_0x3d52('0x8')](_0x3d52('0x2f'),auth['isAuthenticated'](),controller[_0x3d52('0x30')]);router[_0x3d52('0x8')](_0x3d52('0x31'),auth[_0x3d52('0x9')](),controller['getSquareProjects']);router[_0x3d52('0x8')]('/:id/scheduled_calls',auth[_0x3d52('0x9')](),controller[_0x3d52('0x32')]);router[_0x3d52('0x8')]('/:id/api_key',auth[_0x3d52('0x9')](),controller['getApiKey']);router[_0x3d52('0x33')]('/create_many',auth['isAuthenticated'](),controller[_0x3d52('0x34')]);router[_0x3d52('0x33')](_0x3d52('0x10'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x35')]);router[_0x3d52('0x33')]('/',auth[_0x3d52('0x9')](),controller[_0x3d52('0x36')]);router[_0x3d52('0x33')]('/:id/queues',auth[_0x3d52('0x9')](),controller[_0x3d52('0x37')]);var upload=multer({'storage':multer[_0x3d52('0x38')]({'destination':function(_0x44cd83,_0x4c78bb,_0x1696f5){_0x1696f5(null,path[_0x3d52('0x39')](config['root'],_0x3d52('0x3a')));},'filename':function(_0x4fdb9c,_0x464764,_0x1be7ca){_0x1be7ca(null,util[_0x3d52('0x3b')]('%s-%s',Date[_0x3d52('0x3c')](),_0x464764['originalname']));}})});router[_0x3d52('0x33')](_0x3d52('0xe'),upload[_0x3d52('0x3d')]('file'),controller['addAvatar']);router[_0x3d52('0x33')](_0x3d52('0x3e'),auth[_0x3d52('0x9')](),controller['login']);router[_0x3d52('0x33')](_0x3d52('0x3f'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x40')]);router['post'](_0x3d52('0x41'),auth['isAuthenticated'](),controller['pause']);router[_0x3d52('0x33')]('/:id/unpause',auth[_0x3d52('0x9')](),controller['unpause']);router[_0x3d52('0x33')]('/:id/teams',auth[_0x3d52('0x9')](),controller[_0x3d52('0x42')]);router[_0x3d52('0x33')]('/:id/chat_interactions',auth[_0x3d52('0x9')](),controller[_0x3d52('0x43')]);router['post'](_0x3d52('0x44'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x45')]);router[_0x3d52('0x33')](_0x3d52('0x46'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x47')]);router[_0x3d52('0x33')]('/:id/sms_interactions',auth['isAuthenticated'](),controller['addSmsInteractions']);router['post'](_0x3d52('0x48'),auth['isAuthenticated'](),controller[_0x3d52('0x49')]);router['post'](_0x3d52('0x2a'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x4a')]);router[_0x3d52('0x33')]('/:id/mail_accounts',auth[_0x3d52('0x9')](),controller[_0x3d52('0x4b')]);router['post'](_0x3d52('0x4c'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x4d')]);router['post'](_0x3d52('0x4e'),auth['isAuthenticated'](),controller['addSmsAccounts']);router['post']('/:id/chat_websites',auth[_0x3d52('0x9')](),controller[_0x3d52('0x4f')]);router[_0x3d52('0x33')]('/:id/square_projects',auth[_0x3d52('0x9')](),controller['addSquareProjects']);router[_0x3d52('0x33')](_0x3d52('0x50'),auth['isAuthenticated'](),controller[_0x3d52('0x51')]);router[_0x3d52('0x52')](_0x3d52('0xc'),auth[_0x3d52('0x9')](),controller['update']);router['put'](_0x3d52('0x53'),auth['isAuthenticated'](),controller[_0x3d52('0x54')]);router[_0x3d52('0x55')](_0x3d52('0x12'),auth[_0x3d52('0x9')](),controller['removeQueues']);router[_0x3d52('0x55')]('/:id/teams',auth[_0x3d52('0x9')](),controller[_0x3d52('0x56')]);router['delete'](_0x3d52('0xc'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x57')]);router[_0x3d52('0x55')](_0x3d52('0x58'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x59')]);router[_0x3d52('0x55')](_0x3d52('0x44'),auth['isAuthenticated'](),controller[_0x3d52('0x5a')]);router[_0x3d52('0x55')]('/:id/fax_interactions',auth[_0x3d52('0x9')](),controller['removeFaxInteractions']);router[_0x3d52('0x55')](_0x3d52('0x5b'),auth[_0x3d52('0x9')](),controller['removeSmsInteractions']);router[_0x3d52('0x55')](_0x3d52('0x48'),auth['isAuthenticated'](),controller['removeOpenchannelInteractions']);router[_0x3d52('0x55')](_0x3d52('0x2a'),auth['isAuthenticated'](),controller[_0x3d52('0x5c')]);router[_0x3d52('0x55')](_0x3d52('0x2b'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x5d')]);router[_0x3d52('0x55')]('/:id/openchannel_accounts',auth[_0x3d52('0x9')](),controller[_0x3d52('0x5e')]);router[_0x3d52('0x55')](_0x3d52('0x4e'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x5f')]);router[_0x3d52('0x55')](_0x3d52('0x2f'),auth['isAuthenticated'](),controller[_0x3d52('0x60')]);router['delete'](_0x3d52('0x31'),auth[_0x3d52('0x9')](),controller['removeSquareProjects']);router['delete'](_0x3d52('0x50'),auth[_0x3d52('0x9')](),controller[_0x3d52('0x61')]);module[_0x3d52('0x62')]=router;
\ No newline at end of file
+var _0xc15c=['/:id/fax/interactions','getFaxInteractions','/:id/teams','getTeams','/:id/lists','/:id/agents','getAgents','/:id/prefixes','/:id/fax_accounts','getFaxAccounts','getMailAccounts','/:id/openchannel_accounts','getSmsAccounts','/:id/chat_websites','getChatWebsites','/:id/square_projects','getSquareProjects','/:id/scheduled_calls','getScheduledCalls','/:id/api_key','/create_many','bulkCreate','post','create','addQueues','diskStorage','join','server/files/images/','format','now','originalname','file','addAvatar','/:id/login','login','/:id/logout','/:id/pause','pause','/:id/unpause','unpause','addTeams','/:id/chat_interactions','/:id/mail_interactions','addMailInteractions','/:id/fax_interactions','addFaxInteractions','/:id/sms_interactions','addSmsInteractions','/:id/openchannel_interactions','addFaxAccounts','addMailAccounts','addOpenchannelAccounts','/:id/sms_accounts','addSmsAccounts','addSquareProjects','createApiKey','put','update','changePassword','removeQueues','delete','removeTeams','destroy','removeChatInteractions','removeMailInteractions','removeSmsInteractions','removeOpenchannelInteractions','removeFaxAccounts','/:id/mail_accounts','removeMailAccounts','removeOpenchannelAccounts','removeChatWebsites','removeSquareProjects','removeApiKey','exports','path','connect-timeout','express','../../components/auth/service','./user.controller','index','get','describe','/:id','isAuthenticated','show','/:id/avatar','getAvatar','/:id/contacts','getContacts','/:id/queues','/:id/recordings','getRecordings','/:id/chat/interactions','/:id/openchannel/interactions','getOpenchannelInteractions','/:id/mail/interactions','/:id/sms/interactions','getSmsInteractions'];(function(_0xa1b538,_0x4528bc){var _0x1384b3=function(_0x4a4c96){while(--_0x4a4c96){_0xa1b538['push'](_0xa1b538['shift']());}};_0x1384b3(++_0x4528bc);}(_0xc15c,0xae));var _0xcc15=function(_0x55ad2c,_0x630df5){_0x55ad2c=_0x55ad2c-0x0;var _0x54b4b9=_0xc15c[_0x55ad2c];return _0x54b4b9;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xcc15('0x0'));var timeout=require(_0xcc15('0x1'));var express=require(_0xcc15('0x2'));var router=express['Router']();var auth=require(_0xcc15('0x3'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xcc15('0x4'));router['get']('/',auth['isAuthenticated'](),controller[_0xcc15('0x5')]);router[_0xcc15('0x6')]('/describe',auth['isAuthenticated'](),controller[_0xcc15('0x7')]);router[_0xcc15('0x6')](_0xcc15('0x8'),auth[_0xcc15('0x9')](),controller[_0xcc15('0xa')]);router['get'](_0xcc15('0xb'),controller[_0xcc15('0xc')]);router[_0xcc15('0x6')](_0xcc15('0xd'),auth['isAuthenticated'](),controller[_0xcc15('0xe')]);router[_0xcc15('0x6')](_0xcc15('0xf'),auth['isAuthenticated'](),controller['getQueues']);router[_0xcc15('0x6')]('/:id/queues_rt',auth[_0xcc15('0x9')](),controller['getVoiceQueuesRt']);router[_0xcc15('0x6')]('/:id/groups',auth[_0xcc15('0x9')](),controller['getGroups']);router[_0xcc15('0x6')](_0xcc15('0x10'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x11')]);router['get']('/:id/screen_recordings',auth['isAuthenticated'](),controller['getScreenRecordings']);router[_0xcc15('0x6')](_0xcc15('0x12'),auth[_0xcc15('0x9')](),controller['getChatInteractions']);router['get'](_0xcc15('0x13'),auth['isAuthenticated'](),controller[_0xcc15('0x14')]);router[_0xcc15('0x6')](_0xcc15('0x15'),auth['isAuthenticated'](),controller['getMailInteractions']);router[_0xcc15('0x6')](_0xcc15('0x16'),auth['isAuthenticated'](),controller[_0xcc15('0x17')]);router[_0xcc15('0x6')](_0xcc15('0x18'),auth['isAuthenticated'](),controller[_0xcc15('0x19')]);router['get'](_0xcc15('0x1a'),auth['isAuthenticated'](),controller[_0xcc15('0x1b')]);router[_0xcc15('0x6')](_0xcc15('0x1c'),auth[_0xcc15('0x9')](),controller['getLists']);router[_0xcc15('0x6')](_0xcc15('0x1d'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x1e')]);router['get'](_0xcc15('0x1f'),auth[_0xcc15('0x9')](),controller['getVoicePrefixes']);router['get'](_0xcc15('0x20'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x21')]);router[_0xcc15('0x6')]('/:id/mail_accounts',auth[_0xcc15('0x9')](),controller[_0xcc15('0x22')]);router['get'](_0xcc15('0x23'),auth['isAuthenticated'](),controller['getOpenchannelAccounts']);router[_0xcc15('0x6')]('/:id/sms_accounts',auth['isAuthenticated'](),controller[_0xcc15('0x24')]);router[_0xcc15('0x6')](_0xcc15('0x25'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x26')]);router['get'](_0xcc15('0x27'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x28')]);router[_0xcc15('0x6')](_0xcc15('0x29'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x2a')]);router[_0xcc15('0x6')](_0xcc15('0x2b'),auth[_0xcc15('0x9')](),controller['getApiKey']);router['post'](_0xcc15('0x2c'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x2d')]);router[_0xcc15('0x2e')](_0xcc15('0xd'),auth[_0xcc15('0x9')](),controller['addContacts']);router[_0xcc15('0x2e')]('/',auth['isAuthenticated'](),controller[_0xcc15('0x2f')]);router[_0xcc15('0x2e')](_0xcc15('0xf'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x30')]);var upload=multer({'storage':multer[_0xcc15('0x31')]({'destination':function(_0x422b97,_0x1ac2aa,_0x2926f4){_0x2926f4(null,path[_0xcc15('0x32')](config['root'],_0xcc15('0x33')));},'filename':function(_0x2b6702,_0x36a190,_0x1494f1){_0x1494f1(null,util[_0xcc15('0x34')]('%s-%s',Date[_0xcc15('0x35')](),_0x36a190[_0xcc15('0x36')]));}})});router[_0xcc15('0x2e')]('/:id/avatar',upload['single'](_0xcc15('0x37')),controller[_0xcc15('0x38')]);router['post'](_0xcc15('0x39'),auth['isAuthenticated'](),controller[_0xcc15('0x3a')]);router[_0xcc15('0x2e')](_0xcc15('0x3b'),auth[_0xcc15('0x9')](),controller['logout']);router[_0xcc15('0x2e')](_0xcc15('0x3c'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x3d')]);router[_0xcc15('0x2e')](_0xcc15('0x3e'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x3f')]);router[_0xcc15('0x2e')](_0xcc15('0x1a'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x40')]);router[_0xcc15('0x2e')](_0xcc15('0x41'),auth[_0xcc15('0x9')](),controller['addChatInteractions']);router[_0xcc15('0x2e')](_0xcc15('0x42'),auth['isAuthenticated'](),controller[_0xcc15('0x43')]);router[_0xcc15('0x2e')](_0xcc15('0x44'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x45')]);router[_0xcc15('0x2e')](_0xcc15('0x46'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x47')]);router[_0xcc15('0x2e')](_0xcc15('0x48'),auth[_0xcc15('0x9')](),controller['addOpenchannelInteractions']);router['post'](_0xcc15('0x20'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x49')]);router[_0xcc15('0x2e')]('/:id/mail_accounts',auth[_0xcc15('0x9')](),controller[_0xcc15('0x4a')]);router['post']('/:id/openchannel_accounts',auth[_0xcc15('0x9')](),controller[_0xcc15('0x4b')]);router[_0xcc15('0x2e')](_0xcc15('0x4c'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x4d')]);router['post'](_0xcc15('0x25'),auth[_0xcc15('0x9')](),controller['addChatWebsites']);router[_0xcc15('0x2e')]('/:id/square_projects',auth['isAuthenticated'](),controller[_0xcc15('0x4e')]);router['post'](_0xcc15('0x2b'),auth['isAuthenticated'](),controller[_0xcc15('0x4f')]);router[_0xcc15('0x50')](_0xcc15('0x8'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x51')]);router[_0xcc15('0x50')]('/:id/password',auth[_0xcc15('0x9')](),controller[_0xcc15('0x52')]);router['delete'](_0xcc15('0xf'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x53')]);router[_0xcc15('0x54')]('/:id/teams',auth[_0xcc15('0x9')](),controller[_0xcc15('0x55')]);router[_0xcc15('0x54')](_0xcc15('0x8'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x56')]);router[_0xcc15('0x54')](_0xcc15('0x41'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x57')]);router[_0xcc15('0x54')](_0xcc15('0x42'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x58')]);router[_0xcc15('0x54')](_0xcc15('0x44'),auth['isAuthenticated'](),controller['removeFaxInteractions']);router['delete']('/:id/sms_interactions',auth[_0xcc15('0x9')](),controller[_0xcc15('0x59')]);router[_0xcc15('0x54')](_0xcc15('0x48'),auth['isAuthenticated'](),controller[_0xcc15('0x5a')]);router[_0xcc15('0x54')](_0xcc15('0x20'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x5b')]);router[_0xcc15('0x54')](_0xcc15('0x5c'),auth['isAuthenticated'](),controller[_0xcc15('0x5d')]);router[_0xcc15('0x54')](_0xcc15('0x23'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x5e')]);router['delete'](_0xcc15('0x4c'),auth[_0xcc15('0x9')](),controller['removeSmsAccounts']);router[_0xcc15('0x54')]('/:id/chat_websites',auth[_0xcc15('0x9')](),controller[_0xcc15('0x5f')]);router[_0xcc15('0x54')](_0xcc15('0x27'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x60')]);router[_0xcc15('0x54')](_0xcc15('0x2b'),auth[_0xcc15('0x9')](),controller[_0xcc15('0x61')]);module[_0xcc15('0x62')]=router;
\ No newline at end of file
index 3732d52..c9c6cea 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe706=['ALLOWED_FAILED_SCREEN','ALLOWED','PROHIB_NOT_SCREENED','PROHIB_PASSED_SCREEN','PROHIB_FAILED_SCREEN','udp','transport','split','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22udp\x22,\x20\x22tcp\x22]','rfc2833','info','shortinfo','inband','auto','yes','update','outgoing','force_rport,comedia','nat','join','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22force_rport\x22,\x20\x22comedia\x22]','all','ulaw;alaw;gsm','allow','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22ulaw\x22,\x20\x22alaw\x22,\x20\x22gsm\x22]','insecure','never','\x22\x22\x20<>','always','accept','refuse','originate','uac','uas','fingerprint','certificate','active','passive','actpass','nonat','get','isArray','wss','avpf','dtlsenable','dtlsverify','dtlssetup','dtlscertfile','dtlsprivatekey','rtcp_mux','force_avp','icesupport','/etc/pki/tls/certs/motion.crt','/etc/pki/tls/private/motion.key','TEXT','permissions','map','VIRTUAL','phoneBarEnableScreenRecordingByAgent','string','false','screenrecording','blocked','blockedAt','loginAttempts','sequelize','moment','util','exports','STRING','name','setDataValue','defaultuser','The\x20name\x20of\x20the\x20user','fullname','callerid','format','\x22%s\x22\x20<%s>','getDataValue','internal','email','ENUM','admin','user','agent','telephone','local','accountcode','BOOLEAN','DATE','DEFAULT\x20PAUSE','INTEGER','dynamic','friend','peer','from-sip','ALLOWED_NOT_SCREENED','ALLOWED_PASSED_SCREEN'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xe706,0xa3));var _0x6e70=function(_0x3d4e74,_0x21b4e5){_0x3d4e74=_0x3d4e74-0x0;var _0x57613d=_0xe706[_0x3d4e74];return _0x57613d;};'use strict';var Sequelize=require(_0x6e70('0x0'));var moment=require(_0x6e70('0x1'));var util=require(_0x6e70('0x2'));var _=require('lodash');module[_0x6e70('0x3')]={'name':{'type':Sequelize[_0x6e70('0x4')],'allowNull':![],'unique':_0x6e70('0x5'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i},'set':function(_0x7dfbc3){this[_0x6e70('0x6')](_0x6e70('0x5'),_0x7dfbc3);this[_0x6e70('0x6')](_0x6e70('0x7'),_0x7dfbc3);},'comment':_0x6e70('0x8')},'fullname':{'type':Sequelize[_0x6e70('0x4')],'allowNull':![],'set':function(_0x36357b){this[_0x6e70('0x6')](_0x6e70('0x9'),_0x36357b);this[_0x6e70('0x6')](_0x6e70('0xa'),util[_0x6e70('0xb')](_0x6e70('0xc'),_0x36357b,this[_0x6e70('0xd')](_0x6e70('0xe'))));}},'alias':{'type':Sequelize[_0x6e70('0x4')]},'email':{'type':Sequelize[_0x6e70('0x4')],'allowNull':![],'unique':_0x6e70('0xf'),'validate':{'isEmail':!![]},'set':function(_0x37b3e0){if(_0x37b3e0){this[_0x6e70('0x6')]('email',_0x37b3e0['toLowerCase']());}}},'role':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x11'),_0x6e70('0x12'),_0x6e70('0x13'),_0x6e70('0x14')),'allowNull':![]},'password':{'type':Sequelize[_0x6e70('0x4')],'allowNull':![],'validate':{'notEmpty':!![]}},'provider':{'type':Sequelize[_0x6e70('0x4')],'defaultValue':_0x6e70('0x15')},'internal':{'type':Sequelize['INTEGER'](0xb),'allowNull':![],'unique':'internal','set':function(_0x48bc72){this[_0x6e70('0x6')]('internal',_0x48bc72);this['setDataValue'](_0x6e70('0x16'),_0x48bc72);this[_0x6e70('0x6')]('callerid',util[_0x6e70('0xb')]('\x22%s\x22\x20<%s>',this[_0x6e70('0xd')](_0x6e70('0x9')),_0x48bc72));}},'salt':{'type':Sequelize['STRING']},'phone':{'type':Sequelize['STRING']},'mobile':{'type':Sequelize[_0x6e70('0x4')]},'address':{'type':Sequelize['STRING']},'zipcode':{'type':Sequelize[_0x6e70('0x4')]},'userpic':{'type':Sequelize[_0x6e70('0x4')]},'city':{'type':Sequelize['STRING']},'country':{'type':Sequelize['STRING']},'online':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'lastLoginAt':{'type':Sequelize[_0x6e70('0x18')]},'voicePause':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'chatPause':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'mailPause':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'faxPause':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'smsPause':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'openchannelPause':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'pauseType':{'type':Sequelize[_0x6e70('0x4')],'defaultValue':_0x6e70('0x19')},'lastPauseAt':{'type':Sequelize['DATE']},'chatCapacity':{'type':Sequelize[_0x6e70('0x1a')],'defaultValue':0x0},'mailCapacity':{'type':Sequelize[_0x6e70('0x1a')],'defaultValue':0x0},'faxCapacity':{'type':Sequelize[_0x6e70('0x1a')],'defaultValue':0x0},'smsCapacity':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'openchannelCapacity':{'type':Sequelize[_0x6e70('0x1a')],'defaultValue':0x0},'phoneBarAutoAnswer':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'phoneBarEnableSettings':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':!![]},'phoneBarListenPort':{'type':Sequelize['INTEGER'](0x5),'defaultValue':0x1428},'phoneBarExpires':{'type':Sequelize[_0x6e70('0x1a')](0x5),'defaultValue':0x78},'phoneBarRemoteControl':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarRemoteControlPort':{'type':Sequelize['INTEGER'],'defaultValue':0x26a0},'phoneBarEnableRecording':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarRingInUse':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'chanspy':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'description':{'type':Sequelize['STRING'],'allowNull':!![]},'host':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![],'defaultValue':_0x6e70('0x1b')},'ipaddr':{'type':Sequelize['STRING'],'allowNull':!![]},'port':{'type':Sequelize[_0x6e70('0x1a')](0x5),'allowNull':!![]},'regseconds':{'type':Sequelize[_0x6e70('0x1a')](0xb),'allowNull':!![]},'fullcontact':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'regserver':{'type':Sequelize['STRING'],'allowNull':!![]},'useragent':{'type':Sequelize['STRING'],'allowNull':!![]},'lastms':{'type':Sequelize[_0x6e70('0x1a')](0xb),'allowNull':!![]},'type':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x1c'),_0x6e70('0x12'),_0x6e70('0x1d')),'allowNull':!![],'defaultValue':'friend'},'context':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![],'defaultValue':_0x6e70('0x1e')},'callingpres':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x1f'),_0x6e70('0x20'),_0x6e70('0x21'),_0x6e70('0x22'),_0x6e70('0x23'),_0x6e70('0x24'),_0x6e70('0x25'),'PROHIB'),'allowNull':!![]},'deny':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'permit':{'type':Sequelize['STRING'],'allowNull':!![]},'secret':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'md5secret':{'type':Sequelize['STRING'],'allowNull':!![]},'remotesecret':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'transport':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![],'defaultValue':_0x6e70('0x26'),'set':function(_0x56f6f7){this[_0x6e70('0x6')](_0x6e70('0x27'),_0x56f6f7?_0x56f6f7['join'](','):null);},'get':function(){return this[_0x6e70('0xd')](_0x6e70('0x27'))?this['getDataValue'](_0x6e70('0x27'))[_0x6e70('0x28')](','):null;},'comment':_0x6e70('0x29')},'dtmfmode':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2a'),_0x6e70('0x2b'),_0x6e70('0x2c'),_0x6e70('0x2d'),_0x6e70('0x2e')),'allowNull':!![],'defaultValue':_0x6e70('0x2a')},'directmedia':{'type':Sequelize['ENUM'](_0x6e70('0x2f'),'no','nonat',_0x6e70('0x30'),_0x6e70('0x31')),'allowNull':!![],'defaultValue':'no'},'directrtpsetup':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'allowNull':!![],'defaultValue':'no'},'directmediapermit':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'directmediadeny':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'nat':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![],'defaultValue':_0x6e70('0x32'),'set':function(_0x80bebb){this[_0x6e70('0x6')](_0x6e70('0x33'),_0x80bebb?_0x80bebb[_0x6e70('0x34')](','):null);},'get':function(){return this[_0x6e70('0xd')]('nat')?this['getDataValue']('nat')[_0x6e70('0x28')](','):null;},'comment':_0x6e70('0x35')},'callgroup':{'type':Sequelize[_0x6e70('0x4')]},'namedcallgroup':{'type':Sequelize[_0x6e70('0x4')]},'pickupgroup':{'type':Sequelize[_0x6e70('0x4')]},'namedpickupgroup':{'type':Sequelize[_0x6e70('0x4')]},'language':{'type':Sequelize['STRING'],'defaultValue':'en'},'tonezone':{'type':Sequelize[_0x6e70('0x4')]},'disallow':{'type':Sequelize[_0x6e70('0x4')],'allowNull':![],'defaultValue':_0x6e70('0x36')},'allow':{'type':Sequelize[_0x6e70('0x4')],'allowNull':![],'defaultValue':_0x6e70('0x37'),'set':function(_0x37bf46){this[_0x6e70('0x6')](_0x6e70('0x38'),_0x37bf46?_0x37bf46['join'](';'):_0x6e70('0x37'));},'get':function(){return this[_0x6e70('0xd')](_0x6e70('0x38'))?this[_0x6e70('0xd')](_0x6e70('0x38'))[_0x6e70('0x28')](';'):null;},'comment':_0x6e70('0x39')},'autoframing':{'type':Sequelize['ENUM']('yes','no'),'allowNull':!![]},'insecure':{'type':Sequelize['STRING'],'allowNull':!![],'set':function(_0x154e0c){this[_0x6e70('0x6')](_0x6e70('0x3a'),_0x154e0c?_0x154e0c[_0x6e70('0x34')](','):null);},'get':function(){return this[_0x6e70('0xd')]('insecure')?this[_0x6e70('0xd')](_0x6e70('0x3a'))[_0x6e70('0x28')](','):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22port\x22,\x20\x22invite\x22]'},'trustrpid':{'type':Sequelize['ENUM']('yes','no'),'allowNull':!![],'defaultValue':'no'},'trust_id_outbound':{'type':Sequelize[_0x6e70('0x10')]('yes','no'),'allowNull':!![],'defaultValue':'no'},'progressinband':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no',_0x6e70('0x3b')),'allowNull':!![]},'promiscredir':{'type':Sequelize[_0x6e70('0x10')]('yes','no'),'allowNull':!![]},'useclientcode':{'type':Sequelize[_0x6e70('0x10')]('yes','no'),'allowNull':!![]},'accountcode':{'type':Sequelize[_0x6e70('0x1a')](0xb),'allowNull':!![]},'setvar':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'callerid':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![],'defaultValue':_0x6e70('0x3c')},'amaflags':{'type':Sequelize['STRING'],'allowNull':!![]},'callcounter':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'allowNull':!![],'defaultValue':_0x6e70('0x2f')},'busylevel':{'type':Sequelize[_0x6e70('0x1a')](0xb),'allowNull':!![]},'allowoverlap':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'allowNull':!![]},'allowsubscribe':{'type':Sequelize[_0x6e70('0x10')]('yes','no'),'allowNull':!![]},'allowtransfer':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'allowNull':!![]},'ignoresdpversion':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'allowNull':!![]},'subscribecontext':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'template':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'videosupport':{'type':Sequelize[_0x6e70('0x10')]('yes','no',_0x6e70('0x3d')),'allowNull':!![],'defaultValue':'no'},'maxcallbitrate':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'rfc2833compensate':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'allowNull':!![]},'mailbox':{'type':Sequelize['STRING'],'allowNull':!![]},'session_timers':{'type':Sequelize['ENUM'](_0x6e70('0x3e'),_0x6e70('0x3f'),_0x6e70('0x40')),'allowNull':!![]},'session_expires':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'session_minse':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'session_refresher':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x41'),_0x6e70('0x42')),'allowNull':!![],'defaultValue':_0x6e70('0x42')},'t38pt_usertpsource':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'regexten':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'fromdomain':{'type':Sequelize['STRING'],'allowNull':!![]},'fromuser':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'qualify':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'allowNull':!![],'defaultValue':_0x6e70('0x2f')},'keepalive':{'type':Sequelize[_0x6e70('0x1a')](0xb),'allowNull':!![]},'defaultip':{'type':Sequelize['STRING'],'allowNull':!![]},'defaultuser':{'type':Sequelize['STRING'],'allowNull':!![]},'rtptimeout':{'type':Sequelize[_0x6e70('0x1a')](0xb),'allowNull':!![]},'rtpholdtimeout':{'type':Sequelize[_0x6e70('0x1a')](0xb),'allowNull':!![]},'rtpkeepalive':{'type':Sequelize[_0x6e70('0x1a')](0xb),'allowNull':!![]},'sendrpid':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'allowNull':!![],'defaultValue':'no'},'outboundproxy':{'type':Sequelize['STRING'],'allowNull':!![]},'callbackextension':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'timert1':{'type':Sequelize[_0x6e70('0x1a')](0xb),'allowNull':!![]},'timerb':{'type':Sequelize[_0x6e70('0x1a')](0xb),'allowNull':!![]},'qualifyfreq':{'type':Sequelize[_0x6e70('0x1a')](0xb),'allowNull':!![]},'contactpermit':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'contactdeny':{'type':Sequelize['STRING'],'allowNull':!![]},'contactacl':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'unsolicited_mailbox':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'use_q850_reason':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'maxforwards':{'type':Sequelize[_0x6e70('0x1a')](0xb),'allowNull':!![]},'encryption':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'allowNull':!![],'defaultValue':'no'},'avpf':{'type':Sequelize['ENUM'](_0x6e70('0x2f'),'no'),'allowNull':!![]},'force_avp':{'type':Sequelize[_0x6e70('0x10')]('yes','no'),'allowNull':!![]},'icesupport':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'allowNull':!![]},'dtlsenable':{'type':Sequelize['ENUM'](_0x6e70('0x2f'),'no'),'allowNull':!![]},'dtlsverify':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no',_0x6e70('0x43'),_0x6e70('0x44')),'allowNull':!![]},'dtlsrekey':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'dtlscertfile':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'dtlsprivatekey':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'dtlscipher':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'dtlscafile':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'dtlscapath':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'dtlssetup':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x45'),_0x6e70('0x46'),_0x6e70('0x47')),'allowNull':!![]},'dtlsfingerprint':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'usereqphone':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'allowNull':!![],'defaultValue':'no'},'recordonfeature':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'recordofffeature':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'call_limit':{'type':Sequelize[_0x6e70('0x1a')](0xb),'allowNull':!![],'defaultValue':0xa},'registertrying':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'allowNull':!![]},'subscribemwi':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'allowNull':!![]},'vmexten':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'mohinterpret':{'type':Sequelize['STRING'],'allowNull':!![]},'mohsuggest':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'parkinglot':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'canreinvite':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no',_0x6e70('0x48'),_0x6e70('0x30'),'update,nonat'),'allowNull':!![],'defaultValue':'no'},'loginInPause':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'resetPasswordToken':{'type':Sequelize[_0x6e70('0x4')]},'resetPasswordExpires':{'type':Sequelize['DATE']},'showWebBar':{'type':Sequelize[_0x6e70('0x1a')],'defaultValue':0x0,'set':function(_0x692205){this[_0x6e70('0x6')]('showWebBar',_0x692205);var _0x51f268=this[_0x6e70('0x49')]({'plain':!![]});switch(_0x692205){case 0x0:case 0x1:var _0xd6bccd=_0x51f268[_0x6e70('0x27')]?_[_0x6e70('0x4a')](_0x51f268[_0x6e70('0x27')])?_0x51f268[_0x6e70('0x27')][_0x6e70('0x34')]():_0x51f268['transport']:'udp';if(_0xd6bccd===_0x6e70('0x4b')){_0xd6bccd=_0x6e70('0x26');}this[_0x6e70('0x6')](_0x6e70('0x27'),_0xd6bccd);this['setDataValue']('encryption','no');this[_0x6e70('0x6')](_0x6e70('0x4c'),null);this['setDataValue']('force_avp',null);this[_0x6e70('0x6')]('icesupport',null);this[_0x6e70('0x6')](_0x6e70('0x4d'),null);this[_0x6e70('0x6')](_0x6e70('0x4e'),null);this[_0x6e70('0x6')](_0x6e70('0x4f'),null);this[_0x6e70('0x6')](_0x6e70('0x50'),null);this['setDataValue'](_0x6e70('0x51'),null);this[_0x6e70('0x6')](_0x6e70('0x52'),'no');break;case 0x2:this[_0x6e70('0x6')](_0x6e70('0x27'),'wss');this['setDataValue']('encryption',_0x6e70('0x2f'));this[_0x6e70('0x6')](_0x6e70('0x4c'),'yes');this['setDataValue'](_0x6e70('0x53'),_0x6e70('0x2f'));this[_0x6e70('0x6')](_0x6e70('0x54'),_0x6e70('0x2f'));this[_0x6e70('0x6')]('dtlsenable',_0x6e70('0x2f'));this[_0x6e70('0x6')](_0x6e70('0x4e'),'no');this[_0x6e70('0x6')]('dtlssetup',_0x6e70('0x47'));this['setDataValue']('dtlscertfile',_0x51f268[_0x6e70('0x50')]||_0x6e70('0x55'));this[_0x6e70('0x6')](_0x6e70('0x51'),_0x51f268[_0x6e70('0x51')]||_0x6e70('0x56'));this['setDataValue'](_0x6e70('0x52'),_0x6e70('0x2f'));break;default:}}},'permissions':{'type':Sequelize[_0x6e70('0x57')],'set':function(_0x18e64c){this[_0x6e70('0x6')](_0x6e70('0x58'),_0x18e64c?_0x18e64c[_0x6e70('0x34')](','):[]);},'get':function(){return this[_0x6e70('0xd')](_0x6e70('0x58'))?_[_0x6e70('0x59')](this['getDataValue'](_0x6e70('0x58'))[_0x6e70('0x28')](','),function(_0x577c3b){return parseInt(_0x577c3b,0xa);}):[];}},'phoneBarUnconditionalNumber':{'type':Sequelize['STRING']},'phoneBarNoReplyNumber':{'type':Sequelize['STRING']},'phoneBarBusyNumber':{'type':Sequelize[_0x6e70('0x4')]},'phoneBarUnconditional':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'phoneBarNoReply':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'phoneBarBusy':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'phoneBarDnd':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':!![]},'phoneBarUnansweredCallBadge':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'phoneBarEnableDtmfTone':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarAutoAnswerDelay':{'type':Sequelize[_0x6e70('0x1a')],'defaultValue':0x0},'extensionMonitor':{'type':Sequelize[_0x6e70('0x4')],'defaultValue':''},'crudPermissions':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'rtcp_mux':{'type':Sequelize[_0x6e70('0x10')](_0x6e70('0x2f'),'no'),'defaultValue':'no'},'allowmessenger':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':!![]},'phoneBarOutboundProxy':{'type':Sequelize[_0x6e70('0x4')]},'passwordResetAt':{'type':Sequelize[_0x6e70('0x18')],'defaultValue':null},'phoneBarEnableJaws':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'phoneBarEnableScreenRecordingByAgent':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'phoneBarEnableVideoRecording':{'type':Sequelize[_0x6e70('0x5a')],'get':function(){return this[_0x6e70('0xd')](_0x6e70('0x5b'))?this[_0x6e70('0xd')](_0x6e70('0x5b')):![];}},'phoneBarEnableAutomaticScreenRecording':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'phoneBarPrefixRequired':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'hotdesk':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'interface':{'type':Sequelize['STRING'],'defaultValue':null},'privacyEnabled':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]},'apiKeyNonce':{'type':Sequelize['STRING'],'allowNull':!![]},'apiKeyIat':{'type':Sequelize[_0x6e70('0x4')],'allowNull':!![]},'screenrecording':{'type':Sequelize['BOOLEAN'],'defaultValue':![],'set':function(_0x5b5471){if(typeof _0x5b5471===_0x6e70('0x5c')){var _0x48e04b=_0x5b5471==='1'?!![]:_0x5b5471==='0'?![]:_0x5b5471==='true'?!![]:_0x5b5471===_0x6e70('0x5d')?![]:![];this[_0x6e70('0x6')](_0x6e70('0x5e'),_0x48e04b);}else{this['setDataValue']('screenrecording',_0x5b5471);}}},'blocked':{'type':Sequelize['BOOLEAN'],'defaultValue':![],'set':function(_0x3e7be7){this['setDataValue'](_0x6e70('0x5f'),_0x3e7be7);if(_0x3e7be7===!![]){this[_0x6e70('0x6')](_0x6e70('0x60'),moment());this[_0x6e70('0x6')](_0x6e70('0x61'),0x0);}else{this[_0x6e70('0x6')](_0x6e70('0x60'),null);}}},'blockedAt':{'type':Sequelize['DATE'],'defaultValue':null},'loginAttempts':{'type':Sequelize[_0x6e70('0x1a')],'defaultValue':0x0},'disabled':{'type':Sequelize[_0x6e70('0x17')],'defaultValue':![]}};
\ No newline at end of file
+var _0xd8b0=['map','phoneBarEnableScreenRecordingByAgent','string','false','screenrecording','blockedAt','loginAttempts','sequelize','moment','STRING','name','setDataValue','The\x20name\x20of\x20the\x20user','fullname','format','\x22%s\x22\x20<%s>','getDataValue','internal','email','ENUM','admin','user','agent','telephone','local','INTEGER','callerid','DATE','BOOLEAN','friend','peer','ALLOWED_PASSED_SCREEN','ALLOWED','PROHIB_PASSED_SCREEN','PROHIB_FAILED_SCREEN','PROHIB','transport','join','split','rfc2833','shortinfo','inband','auto','yes','nonat','update','outgoing','force_rport,comedia','nat','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22force_rport\x22,\x20\x22comedia\x22]','all','ulaw;alaw;gsm','allow','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22ulaw\x22,\x20\x22alaw\x22,\x20\x22gsm\x22]','insecure','never','\x22\x22\x20<>','always','accept','refuse','originate','uac','uas','fingerprint','actpass','update,nonat','showWebBar','isArray','udp','wss','encryption','icesupport','dtlsenable','dtlsverify','dtlssetup','dtlscertfile','dtlsprivatekey','avpf','/etc/pki/tls/certs/motion.crt','/etc/pki/tls/private/motion.key','rtcp_mux','TEXT','permissions'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xd8b0,0xad));var _0x0d8b=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0xd8b0[_0x122ef9];return _0x42fba0;};'use strict';var Sequelize=require(_0x0d8b('0x0'));var moment=require(_0x0d8b('0x1'));var util=require('util');var _=require('lodash');module['exports']={'name':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':![],'unique':_0x0d8b('0x3'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i},'set':function(_0x43bca1){this[_0x0d8b('0x4')](_0x0d8b('0x3'),_0x43bca1);this['setDataValue']('defaultuser',_0x43bca1);},'comment':_0x0d8b('0x5')},'fullname':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':![],'set':function(_0x39f43a){this['setDataValue'](_0x0d8b('0x6'),_0x39f43a);this[_0x0d8b('0x4')]('callerid',util[_0x0d8b('0x7')](_0x0d8b('0x8'),_0x39f43a,this[_0x0d8b('0x9')](_0x0d8b('0xa'))));}},'alias':{'type':Sequelize[_0x0d8b('0x2')]},'email':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':![],'unique':_0x0d8b('0xb'),'validate':{'isEmail':!![]},'set':function(_0x28f87c){if(_0x28f87c){this['setDataValue'](_0x0d8b('0xb'),_0x28f87c['toLowerCase']());}}},'role':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0xd'),_0x0d8b('0xe'),_0x0d8b('0xf'),_0x0d8b('0x10')),'allowNull':![]},'password':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':![],'validate':{'notEmpty':!![]}},'provider':{'type':Sequelize[_0x0d8b('0x2')],'defaultValue':_0x0d8b('0x11')},'internal':{'type':Sequelize[_0x0d8b('0x12')](0xb),'allowNull':![],'unique':_0x0d8b('0xa'),'set':function(_0x5ad086){this[_0x0d8b('0x4')](_0x0d8b('0xa'),_0x5ad086);this[_0x0d8b('0x4')]('accountcode',_0x5ad086);this[_0x0d8b('0x4')](_0x0d8b('0x13'),util[_0x0d8b('0x7')](_0x0d8b('0x8'),this[_0x0d8b('0x9')]('fullname'),_0x5ad086));}},'salt':{'type':Sequelize[_0x0d8b('0x2')]},'phone':{'type':Sequelize[_0x0d8b('0x2')]},'mobile':{'type':Sequelize[_0x0d8b('0x2')]},'address':{'type':Sequelize[_0x0d8b('0x2')]},'zipcode':{'type':Sequelize[_0x0d8b('0x2')]},'userpic':{'type':Sequelize[_0x0d8b('0x2')]},'city':{'type':Sequelize[_0x0d8b('0x2')]},'country':{'type':Sequelize[_0x0d8b('0x2')]},'online':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'lastLoginAt':{'type':Sequelize[_0x0d8b('0x14')]},'voicePause':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'chatPause':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'mailPause':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'faxPause':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'smsPause':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'openchannelPause':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'pauseType':{'type':Sequelize[_0x0d8b('0x2')],'defaultValue':'DEFAULT\x20PAUSE'},'lastPauseAt':{'type':Sequelize['DATE']},'chatCapacity':{'type':Sequelize[_0x0d8b('0x12')],'defaultValue':0x0},'mailCapacity':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'faxCapacity':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'smsCapacity':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'openchannelCapacity':{'type':Sequelize[_0x0d8b('0x12')],'defaultValue':0x0},'phoneBarAutoAnswer':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'phoneBarEnableSettings':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':!![]},'phoneBarListenPort':{'type':Sequelize[_0x0d8b('0x12')](0x5),'defaultValue':0x1428},'phoneBarExpires':{'type':Sequelize[_0x0d8b('0x12')](0x5),'defaultValue':0x78},'phoneBarRemoteControl':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'phoneBarRemoteControlPort':{'type':Sequelize[_0x0d8b('0x12')],'defaultValue':0x26a0},'phoneBarEnableRecording':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'phoneBarRingInUse':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'chanspy':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'description':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'host':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![],'defaultValue':'dynamic'},'ipaddr':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'port':{'type':Sequelize['INTEGER'](0x5),'allowNull':!![]},'regseconds':{'type':Sequelize[_0x0d8b('0x12')](0xb),'allowNull':!![]},'fullcontact':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'regserver':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'useragent':{'type':Sequelize['STRING'],'allowNull':!![]},'lastms':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'type':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x16'),'user',_0x0d8b('0x17')),'allowNull':!![],'defaultValue':'friend'},'context':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![],'defaultValue':'from-sip'},'callingpres':{'type':Sequelize[_0x0d8b('0xc')]('ALLOWED_NOT_SCREENED',_0x0d8b('0x18'),'ALLOWED_FAILED_SCREEN',_0x0d8b('0x19'),'PROHIB_NOT_SCREENED',_0x0d8b('0x1a'),_0x0d8b('0x1b'),_0x0d8b('0x1c')),'allowNull':!![]},'deny':{'type':Sequelize['STRING'],'allowNull':!![]},'permit':{'type':Sequelize['STRING'],'allowNull':!![]},'secret':{'type':Sequelize['STRING'],'allowNull':!![]},'md5secret':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'remotesecret':{'type':Sequelize['STRING'],'allowNull':!![]},'transport':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![],'defaultValue':'udp','set':function(_0x5d05fc){this[_0x0d8b('0x4')](_0x0d8b('0x1d'),_0x5d05fc?_0x5d05fc[_0x0d8b('0x1e')](','):null);},'get':function(){return this[_0x0d8b('0x9')](_0x0d8b('0x1d'))?this[_0x0d8b('0x9')](_0x0d8b('0x1d'))[_0x0d8b('0x1f')](','):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22udp\x22,\x20\x22tcp\x22]'},'dtmfmode':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x20'),'info',_0x0d8b('0x21'),_0x0d8b('0x22'),_0x0d8b('0x23')),'allowNull':!![],'defaultValue':'rfc2833'},'directmedia':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no',_0x0d8b('0x25'),_0x0d8b('0x26'),_0x0d8b('0x27')),'allowNull':!![],'defaultValue':'no'},'directrtpsetup':{'type':Sequelize['ENUM'](_0x0d8b('0x24'),'no'),'allowNull':!![],'defaultValue':'no'},'directmediapermit':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'directmediadeny':{'type':Sequelize['STRING'],'allowNull':!![]},'nat':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![],'defaultValue':_0x0d8b('0x28'),'set':function(_0x188af2){this[_0x0d8b('0x4')](_0x0d8b('0x29'),_0x188af2?_0x188af2['join'](','):null);},'get':function(){return this['getDataValue'](_0x0d8b('0x29'))?this['getDataValue']('nat')[_0x0d8b('0x1f')](','):null;},'comment':_0x0d8b('0x2a')},'callgroup':{'type':Sequelize[_0x0d8b('0x2')]},'namedcallgroup':{'type':Sequelize[_0x0d8b('0x2')]},'pickupgroup':{'type':Sequelize[_0x0d8b('0x2')]},'namedpickupgroup':{'type':Sequelize[_0x0d8b('0x2')]},'language':{'type':Sequelize['STRING'],'defaultValue':'en'},'tonezone':{'type':Sequelize[_0x0d8b('0x2')]},'disallow':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':![],'defaultValue':_0x0d8b('0x2b')},'allow':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':![],'defaultValue':_0x0d8b('0x2c'),'set':function(_0x1a39ad){this[_0x0d8b('0x4')]('allow',_0x1a39ad?_0x1a39ad[_0x0d8b('0x1e')](';'):_0x0d8b('0x2c'));},'get':function(){return this[_0x0d8b('0x9')](_0x0d8b('0x2d'))?this['getDataValue'](_0x0d8b('0x2d'))['split'](';'):null;},'comment':_0x0d8b('0x2e')},'autoframing':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no'),'allowNull':!![]},'insecure':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![],'set':function(_0x35fa7e){this[_0x0d8b('0x4')](_0x0d8b('0x2f'),_0x35fa7e?_0x35fa7e[_0x0d8b('0x1e')](','):null);},'get':function(){return this[_0x0d8b('0x9')](_0x0d8b('0x2f'))?this['getDataValue']('insecure')['split'](','):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22port\x22,\x20\x22invite\x22]'},'trustrpid':{'type':Sequelize['ENUM'](_0x0d8b('0x24'),'no'),'allowNull':!![],'defaultValue':'no'},'trust_id_outbound':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no'),'allowNull':!![],'defaultValue':'no'},'progressinband':{'type':Sequelize['ENUM']('yes','no',_0x0d8b('0x30')),'allowNull':!![]},'promiscredir':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no'),'allowNull':!![]},'useclientcode':{'type':Sequelize['ENUM'](_0x0d8b('0x24'),'no'),'allowNull':!![]},'accountcode':{'type':Sequelize[_0x0d8b('0x12')](0xb),'allowNull':!![]},'setvar':{'type':Sequelize['STRING'],'allowNull':!![]},'callerid':{'type':Sequelize['STRING'],'allowNull':!![],'defaultValue':_0x0d8b('0x31')},'amaflags':{'type':Sequelize['STRING'],'allowNull':!![]},'callcounter':{'type':Sequelize[_0x0d8b('0xc')]('yes','no'),'allowNull':!![],'defaultValue':'yes'},'busylevel':{'type':Sequelize[_0x0d8b('0x12')](0xb),'allowNull':!![]},'allowoverlap':{'type':Sequelize[_0x0d8b('0xc')]('yes','no'),'allowNull':!![]},'allowsubscribe':{'type':Sequelize['ENUM']('yes','no'),'allowNull':!![]},'allowtransfer':{'type':Sequelize['ENUM'](_0x0d8b('0x24'),'no'),'allowNull':!![]},'ignoresdpversion':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no'),'allowNull':!![]},'subscribecontext':{'type':Sequelize['STRING'],'allowNull':!![]},'template':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'videosupport':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no',_0x0d8b('0x32')),'allowNull':!![],'defaultValue':'no'},'maxcallbitrate':{'type':Sequelize[_0x0d8b('0x12')](0xb),'allowNull':!![]},'rfc2833compensate':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no'),'allowNull':!![]},'mailbox':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'session_timers':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x33'),_0x0d8b('0x34'),_0x0d8b('0x35')),'allowNull':!![]},'session_expires':{'type':Sequelize[_0x0d8b('0x12')](0xb),'allowNull':!![]},'session_minse':{'type':Sequelize[_0x0d8b('0x12')](0xb),'allowNull':!![]},'session_refresher':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x36'),_0x0d8b('0x37')),'allowNull':!![],'defaultValue':_0x0d8b('0x37')},'t38pt_usertpsource':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'regexten':{'type':Sequelize['STRING'],'allowNull':!![]},'fromdomain':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'fromuser':{'type':Sequelize['STRING'],'allowNull':!![]},'qualify':{'type':Sequelize['ENUM'](_0x0d8b('0x24'),'no'),'allowNull':!![],'defaultValue':_0x0d8b('0x24')},'keepalive':{'type':Sequelize[_0x0d8b('0x12')](0xb),'allowNull':!![]},'defaultip':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'defaultuser':{'type':Sequelize['STRING'],'allowNull':!![]},'rtptimeout':{'type':Sequelize[_0x0d8b('0x12')](0xb),'allowNull':!![]},'rtpholdtimeout':{'type':Sequelize[_0x0d8b('0x12')](0xb),'allowNull':!![]},'rtpkeepalive':{'type':Sequelize[_0x0d8b('0x12')](0xb),'allowNull':!![]},'sendrpid':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no'),'allowNull':!![],'defaultValue':'no'},'outboundproxy':{'type':Sequelize['STRING'],'allowNull':!![]},'callbackextension':{'type':Sequelize['STRING'],'allowNull':!![]},'timert1':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'timerb':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'qualifyfreq':{'type':Sequelize[_0x0d8b('0x12')](0xb),'allowNull':!![]},'contactpermit':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'contactdeny':{'type':Sequelize['STRING'],'allowNull':!![]},'contactacl':{'type':Sequelize['STRING'],'allowNull':!![]},'unsolicited_mailbox':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'use_q850_reason':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'maxforwards':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'encryption':{'type':Sequelize['ENUM'](_0x0d8b('0x24'),'no'),'allowNull':!![],'defaultValue':'no'},'avpf':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no'),'allowNull':!![]},'force_avp':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no'),'allowNull':!![]},'icesupport':{'type':Sequelize['ENUM'](_0x0d8b('0x24'),'no'),'allowNull':!![]},'dtlsenable':{'type':Sequelize[_0x0d8b('0xc')]('yes','no'),'allowNull':!![]},'dtlsverify':{'type':Sequelize['ENUM'](_0x0d8b('0x24'),'no',_0x0d8b('0x38'),'certificate'),'allowNull':!![]},'dtlsrekey':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'dtlscertfile':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'dtlsprivatekey':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'dtlscipher':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'dtlscafile':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'dtlscapath':{'type':Sequelize['STRING'],'allowNull':!![]},'dtlssetup':{'type':Sequelize[_0x0d8b('0xc')]('active','passive',_0x0d8b('0x39')),'allowNull':!![]},'dtlsfingerprint':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'usereqphone':{'type':Sequelize['ENUM']('yes','no'),'allowNull':!![],'defaultValue':'no'},'recordonfeature':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'recordofffeature':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'call_limit':{'type':Sequelize[_0x0d8b('0x12')](0xb),'allowNull':!![],'defaultValue':0xa},'registertrying':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no'),'allowNull':!![]},'subscribemwi':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no'),'allowNull':!![]},'vmexten':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'mohinterpret':{'type':Sequelize['STRING'],'allowNull':!![]},'mohsuggest':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'parkinglot':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'canreinvite':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no',_0x0d8b('0x25'),_0x0d8b('0x26'),_0x0d8b('0x3a')),'allowNull':!![],'defaultValue':'no'},'loginInPause':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'resetPasswordToken':{'type':Sequelize[_0x0d8b('0x2')]},'resetPasswordExpires':{'type':Sequelize['DATE']},'showWebBar':{'type':Sequelize[_0x0d8b('0x12')],'defaultValue':0x0,'set':function(_0x451940){this[_0x0d8b('0x4')](_0x0d8b('0x3b'),_0x451940);var _0x43ad22=this['get']({'plain':!![]});switch(_0x451940){case 0x0:case 0x1:var _0x1e1dce=_0x43ad22[_0x0d8b('0x1d')]?_[_0x0d8b('0x3c')](_0x43ad22[_0x0d8b('0x1d')])?_0x43ad22[_0x0d8b('0x1d')]['join']():_0x43ad22['transport']:_0x0d8b('0x3d');if(_0x1e1dce===_0x0d8b('0x3e')){_0x1e1dce=_0x0d8b('0x3d');}this[_0x0d8b('0x4')]('transport',_0x1e1dce);this[_0x0d8b('0x4')](_0x0d8b('0x3f'),'no');this[_0x0d8b('0x4')]('avpf',null);this[_0x0d8b('0x4')]('force_avp',null);this[_0x0d8b('0x4')](_0x0d8b('0x40'),null);this[_0x0d8b('0x4')](_0x0d8b('0x41'),null);this[_0x0d8b('0x4')](_0x0d8b('0x42'),null);this['setDataValue'](_0x0d8b('0x43'),null);this['setDataValue'](_0x0d8b('0x44'),null);this[_0x0d8b('0x4')](_0x0d8b('0x45'),null);this[_0x0d8b('0x4')]('rtcp_mux','no');break;case 0x2:this[_0x0d8b('0x4')](_0x0d8b('0x1d'),_0x0d8b('0x3e'));this[_0x0d8b('0x4')](_0x0d8b('0x3f'),_0x0d8b('0x24'));this[_0x0d8b('0x4')](_0x0d8b('0x46'),_0x0d8b('0x24'));this[_0x0d8b('0x4')]('force_avp','yes');this[_0x0d8b('0x4')](_0x0d8b('0x40'),'yes');this[_0x0d8b('0x4')]('dtlsenable','yes');this[_0x0d8b('0x4')](_0x0d8b('0x42'),'no');this['setDataValue']('dtlssetup',_0x0d8b('0x39'));this[_0x0d8b('0x4')](_0x0d8b('0x44'),_0x43ad22[_0x0d8b('0x44')]||_0x0d8b('0x47'));this[_0x0d8b('0x4')](_0x0d8b('0x45'),_0x43ad22['dtlsprivatekey']||_0x0d8b('0x48'));this['setDataValue'](_0x0d8b('0x49'),_0x0d8b('0x24'));break;default:}}},'permissions':{'type':Sequelize[_0x0d8b('0x4a')],'set':function(_0x14a34b){this['setDataValue'](_0x0d8b('0x4b'),_0x14a34b?_0x14a34b['join'](','):[]);},'get':function(){return this[_0x0d8b('0x9')](_0x0d8b('0x4b'))?_[_0x0d8b('0x4c')](this[_0x0d8b('0x9')](_0x0d8b('0x4b'))[_0x0d8b('0x1f')](','),function(_0x3e927c){return parseInt(_0x3e927c,0xa);}):[];}},'phoneBarUnconditionalNumber':{'type':Sequelize[_0x0d8b('0x2')]},'phoneBarNoReplyNumber':{'type':Sequelize[_0x0d8b('0x2')]},'phoneBarBusyNumber':{'type':Sequelize[_0x0d8b('0x2')]},'phoneBarUnconditional':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarNoReply':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'phoneBarBusy':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarDnd':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':!![]},'phoneBarUnansweredCallBadge':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':!![]},'phoneBarEnableDtmfTone':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarAutoAnswerDelay':{'type':Sequelize[_0x0d8b('0x12')],'defaultValue':0x0},'extensionMonitor':{'type':Sequelize['STRING'],'defaultValue':''},'crudPermissions':{'type':Sequelize[_0x0d8b('0x12')],'defaultValue':0x0},'rtcp_mux':{'type':Sequelize[_0x0d8b('0xc')](_0x0d8b('0x24'),'no'),'defaultValue':'no'},'allowmessenger':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':!![]},'phoneBarOutboundProxy':{'type':Sequelize[_0x0d8b('0x2')]},'passwordResetAt':{'type':Sequelize[_0x0d8b('0x14')],'defaultValue':null},'phoneBarEnableJaws':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'phoneBarEnableScreenRecordingByAgent':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'phoneBarEnableVideoRecording':{'type':Sequelize['VIRTUAL'],'get':function(){return this[_0x0d8b('0x9')](_0x0d8b('0x4d'))?this['getDataValue'](_0x0d8b('0x4d')):![];}},'phoneBarEnableAutomaticScreenRecording':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'phoneBarPrefixRequired':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'hotdesk':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'interface':{'type':Sequelize[_0x0d8b('0x2')],'defaultValue':null},'privacyEnabled':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]},'apiKeyNonce':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'apiKeyIat':{'type':Sequelize[_0x0d8b('0x2')],'allowNull':!![]},'screenrecording':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![],'set':function(_0x5007c0){if(typeof _0x5007c0===_0x0d8b('0x4e')){var _0x16df83=_0x5007c0==='1'?!![]:_0x5007c0==='0'?![]:_0x5007c0==='true'?!![]:_0x5007c0===_0x0d8b('0x4f')?![]:![];this[_0x0d8b('0x4')](_0x0d8b('0x50'),_0x16df83);}else{this['setDataValue']('screenrecording',_0x5007c0);}}},'blocked':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![],'set':function(_0x3aeb45){this[_0x0d8b('0x4')]('blocked',_0x3aeb45);if(_0x3aeb45===!![]){this['setDataValue'](_0x0d8b('0x51'),moment());this[_0x0d8b('0x4')](_0x0d8b('0x52'),0x0);}else{this[_0x0d8b('0x4')](_0x0d8b('0x51'),null);}}},'blockedAt':{'type':Sequelize[_0x0d8b('0x14')],'defaultValue':null},'loginAttempts':{'type':Sequelize[_0x0d8b('0x12')],'defaultValue':0x0},'disabled':{'type':Sequelize[_0x0d8b('0x15')],'defaultValue':![]}};
\ No newline at end of file
index c5c3e92..2fb035f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3152=['removeFaxAccounts','getMailAccounts','MailAccount','addMailAccounts','removeMailAccounts','getOpenchannelAccounts','OpenchannelAccount','addOpenchannelAccounts','removeOpenchannelAccounts','getSmsAccounts','removeSmsAccounts','getChatWebsites','ChatWebsite','addChatWebsites','removeChatWebsites','getSquareProjects','SquareProject','addSquareProjects','removeSquareProjects','getScheduledCalls','CmHopper','concat','$and','$or','$gt','$gte','$lt','$eq','$not','$between','$notBetween','$in','$notIn','$like','$notLike','$iLike','$notILike','$overlap','$contains','$contained','$any','firstName','lastName','phone','CmContact','Contact','dialActive','retrieveApiKey','No\x20API\x20access\x20key\x20found!','You\x20don\x27t\x20have\x20sufficient\x20privelages\x20to\x20access\x20this\x20resource.','createApiKey','generateApiKey','apiKeyIat','removeApiKey','apiKeyNonce','API\x20key\x20not\x20available','fast-json-patch','request-promise','moment','mustache','util','sox','to-csv','ejs','lodash','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','redis','localhost','socket.io-emitter','register','jayson/promise','client','http','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','request\x20sent','debug','User,\x20%s,\x20%s,\x20%s','stringify','error','code','message','User,\x20%s,\x20%s','info','result','catch','sendStatus','status','count','offset','set','Content-Range','json','reject','save','update','get','Users','user','Agents','agent','Telephones','telephone','filter','map','value','includes','role','find','name','UserProfileResource','destroy','end','stack','send','index','model','differenceBy','keys','password','query','filters','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','merge','key','VIRTUAL','sequelize','col','field','lower','options','User','includeAll','include','rows','rawAttributes','salt','intersection','bulkCreate','body','params','describe','addContacts','agent\x20role','admin','../../config/license/util','users','count\x20%s:\x20%s','internal','findById','securePassword','max','isNil','select\x20(select\x20IFNULL(max(internal)+1,1)\x20from\x20users\x20where\x20internal\x20<\x20md.internal)\x20as\x20\x27from\x27,\x20md.internal\x20-\x201\x20as\x20\x27to\x27\x20from\x20users\x20md\x20where\x20md.internal\x20!=\x201\x20and\x20not\x20exists\x20(select\x201\x20from\x20users\x20md2\x20where\x20md2.internal\x20=\x20md.internal\x20-\x201)','SELECT','from','voicemail','mailbox','VoiceMail','fullname','email','permissions','101','102','103','110','104','105','107','108','109','100','Unable\x20to\x20retrieve\x20the\x20current\x20user','userProfileId','autoAssociation','create','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','changePassword','oldPassword','newPassword','authenticate','Sequelize','ValidationError','Wrong\x20credentials','New\x20password\x20must\x20be\x20different\x20from\x20old\x20password','Invalid\x20body\x20format.\x20Use\x20newPassword','Unauthorized','Setting','findOne','addQueues','channel','online','loginInPause','voicePause','interface','isValidChannel','add','capitalize','toLowerCase','ids','penalty','spread','emit','voice','VoiceQueue','findAll','push','format','SIP/%s','each','UserVoiceQueueRt','upsert','removeQueues','remove','QueueId','Queue:remove','addAvatar','getAvatar','join','root','server/files/images/logos/default_profile.png','userpic','existsSync','server/files/images/','download','CmList','List','Tag','Tags','color','tag','getContacts','Unknown\x20channel','Queue','pick','Unknown\x20role','Queues','getVoiceQueuesRt','getGroups','ChatGroup','getRecordings','VoiceRecording','UserId','getScreenRecordings','ScreenRecording','getChatInteractions','ChatInteraction','getOpenchannelInteractions','OpenchannelInteraction','getMailInteractions','MailInteraction','getSmsInteractions','getFaxInteractions','FaxInteraction','login','LOCAL/%s@from-sip/n','intrf','user:%s','user:forcelogout','headers','x-forwarded-for','connection','remoteAddress','socket','getVoiceQueues','MemberReport','YYYY-MM-DD\x20HH:mm:ss','all','forEach','LOGIN','device','LOGININPAUSE','isMiddleware','resolve','logout','pause','QueuePause','PAUSE','updateAttributes','type','DEFAULT\x20PAUSE','mailPause','chatPause','faxPause','openchannelPause','smsPause','pauseType','unpause','mail','sms','openchannel','Pause','manual','getTeams','Team','addTeams','removeTeams','getLists','getAgents','You\x20can\x27t\x20delete\x20yourself','addChatInteractions','user_has_chat_interactions:save','removeChatInteractions','isArray','user_has_chat_interactions:remove','addMailInteractions','omit','user_has_mail_interactions:save','removeMailInteractions','user_has_mail_interactions:remove','addFaxInteractions','removeFaxInteractions','user_has_fax_interactions:remove','addSmsInteractions','user_has_sms_interactions:save','removeSmsInteractions','user_has_sms_interactions:remove','addOpenchannelInteractions','removeOpenchannelInteractions','user_has_openchannel_interactions:remove','VoicePrefix','getVoicePrefixes','getFaxAccounts','FaxAccount','addFaxAccounts'];(function(_0x13f0f2,_0x2b3566){var _0xe733ed=function(_0x2c64e4){while(--_0x2c64e4){_0x13f0f2['push'](_0x13f0f2['shift']());}};_0xe733ed(++_0x2b3566);}(_0x3152,0x191));var _0x2315=function(_0x45d55e,_0x2fede3){_0x45d55e=_0x45d55e-0x0;var _0x29812a=_0x3152[_0x45d55e];return _0x29812a;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x2315('0x0'));var rp=require(_0x2315('0x1'));var moment=require(_0x2315('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x2315('0x3'));var util=require(_0x2315('0x4'));var path=require('path');var sox=require(_0x2315('0x5'));var csv=require(_0x2315('0x6'));var ejs=require(_0x2315('0x7'));var fs=require('fs');var _=require(_0x2315('0x8'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x2315('0x9'));var toCsv=require(_0x2315('0x6'));var querystring=require(_0x2315('0xa'));var Papa=require(_0x2315('0xb'));var Redis=require(_0x2315('0xc'));var authService=require(_0x2315('0xd'));var qs=require(_0x2315('0xe'));var hardwareService=require(_0x2315('0xf'));var logger=require(_0x2315('0x10'))(_0x2315('0x11'));var utils=require('../../config/utils');var config=require(_0x2315('0x12'));var db=require(_0x2315('0x13'))['db'];config[_0x2315('0x14')]=_['defaults'](config['redis'],{'host':_0x2315('0x15'),'port':0x18eb});var socket=require(_0x2315('0x16'))(new Redis(config['redis']));require('./user.socket')[_0x2315('0x17')](socket);var jayson=require(_0x2315('0x18'));var client=jayson[_0x2315('0x19')][_0x2315('0x1a')]({'port':0x232a});function checkPasswordPattern(_0x3ba584,_0x406302,_0x37b4b5){if(_0x37b4b5){var _0x42c96d=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x42c96d[_0x2315('0x1b')](_0x406302)){return _0x3ba584;}else{throw new Error(_0x2315('0x1c'));}}else{return _0x3ba584;}}function respondWithRpcPromise(_0x291baa,_0x1060ad,_0x56fc6e,_0x5b8f80){return new BPromise(function(_0x5d9fac,_0xfe67b7){var _0x422bcc=_0x5b8f80||client;return _0x422bcc[_0x2315('0x1d')](_0x291baa,_0x56fc6e)[_0x2315('0x1e')](function(_0x587019){logger['info']('User,\x20%s,\x20%s',_0x1060ad,_0x2315('0x1f'));logger[_0x2315('0x20')](_0x2315('0x21'),_0x1060ad,_0x2315('0x1f'),JSON[_0x2315('0x22')](_0x587019));if(_0x587019['error']){if(_0x587019[_0x2315('0x23')][_0x2315('0x24')]===0x1f4){logger[_0x2315('0x23')]('User,\x20%s,\x20%s',_0x1060ad,_0x587019['error']['message']);return _0xfe67b7(_0x587019[_0x2315('0x23')][_0x2315('0x25')]);}logger['error'](_0x2315('0x26'),_0x1060ad,_0x587019[_0x2315('0x23')]['message']);return _0x5d9fac(_0x587019[_0x2315('0x23')][_0x2315('0x25')]);}else{logger[_0x2315('0x27')](_0x2315('0x26'),_0x1060ad,_0x2315('0x1f'));_0x5d9fac(_0x587019[_0x2315('0x28')][_0x2315('0x25')]);}})[_0x2315('0x29')](function(_0x397cba){logger[_0x2315('0x23')](_0x2315('0x26'),_0x1060ad,_0x397cba);_0xfe67b7(_0x397cba);});});}function respondWithStatusCode(_0x372186,_0x5a2fc8){_0x5a2fc8=_0x5a2fc8||0xcc;return function(_0x201591){if(_0x201591){return _0x372186[_0x2315('0x2a')](_0x5a2fc8);}return _0x372186[_0x2315('0x2b')](_0x5a2fc8)['end']();};}function respondWithResult(_0x5b0b93,_0x58c795){_0x58c795=_0x58c795||0xc8;return function(_0x528589){if(_0x528589){return _0x5b0b93['status'](_0x58c795)['json'](_0x528589);}};}function respondWithFilteredResult(_0x18607e,_0x523c6){return function(_0x528ed7){if(_0x528ed7){var _0x331174=_0x528ed7[_0x2315('0x2c')],_0x43fb51=_0x523c6['offset'],_0x1be6d6=_0x523c6[_0x2315('0x2d')]+_0x523c6['limit'],_0x19c5c0;if(_0x1be6d6>=_0x331174){_0x1be6d6=_0x331174;_0x19c5c0=0xc8;}else{_0x19c5c0=0xce;}_0x18607e[_0x2315('0x2b')](_0x19c5c0);return _0x18607e[_0x2315('0x2e')](_0x2315('0x2f'),_0x43fb51+'-'+_0x1be6d6+'/'+_0x331174)[_0x2315('0x30')](_0x528ed7);}return null;};}function patchUpdates(_0x3ca460){return function(_0x314adb){try{jsonpatch['apply'](_0x314adb,_0x3ca460,!![]);}catch(_0x1e8602){return BPromise[_0x2315('0x31')](_0x1e8602);}return _0x314adb[_0x2315('0x32')]();};}function saveUpdates(_0x4ebc75,_0x419e98){return function(_0x5d42fb){if(_0x5d42fb){return _0x5d42fb[_0x2315('0x33')](_0x4ebc75)['then'](function(_0x5c8bcf){return _0x5c8bcf;});}return null;};}function removeEntity(_0x263c7b,_0x216fea){return function(_0x440f39){if(_0x440f39){return _0x440f39['destroy']()[_0x2315('0x1e')](function(){var _0x2c0c10=_0x440f39[_0x2315('0x34')]({'plain':!![]});var _0x5a0f8f=[{'name':_0x2315('0x35'),'value':_0x2315('0x36'),'ignore':!![]},{'name':_0x2315('0x37'),'value':_0x2315('0x38'),'ignore':![]},{'name':_0x2315('0x39'),'value':_0x2315('0x3a'),'ignore':![]}];var _0x26c1ec=_(_0x5a0f8f)[_0x2315('0x3b')]('ignore')[_0x2315('0x3c')](_0x2315('0x3d'))[_0x2315('0x3d')]();if(_[_0x2315('0x3e')](_0x26c1ec,_0x2c0c10[_0x2315('0x3f')])){return;}var _0x459c48=_[_0x2315('0x40')](_0x5a0f8f,[_0x2315('0x3d'),_0x2c0c10[_0x2315('0x3f')]])[_0x2315('0x41')];return db[_0x2315('0x42')][_0x2315('0x43')]({'where':{'type':_0x459c48,'resourceId':_0x2c0c10['id']}})[_0x2315('0x1e')](function(){return _0x440f39;});})[_0x2315('0x1e')](function(){_0x263c7b[_0x2315('0x2b')](0xcc)[_0x2315('0x44')]();});}};}function handleEntityNotFound(_0x3a126c,_0x24da92){return function(_0x3af6e6){if(!_0x3af6e6){_0x3a126c['sendStatus'](0x194);}return _0x3af6e6;};}function handleError(_0x54bf9f,_0x351abe){_0x351abe=_0x351abe||0x1f4;return function(_0x1fba4e){logger[_0x2315('0x23')](_0x1fba4e[_0x2315('0x45')]);if(_0x1fba4e['name']){delete _0x1fba4e['name'];}_0x54bf9f[_0x2315('0x2b')](_0x351abe)[_0x2315('0x46')](_0x1fba4e);};}exports[_0x2315('0x47')]=function(_0x327781,_0x5a7956){var _0x4de122={},_0x5d993c={},_0xbcd40e={'count':0x0,'rows':[]};var _0x38eac0=db['User']['rawAttributes'];_0x5d993c[_0x2315('0x48')]=_[_0x2315('0x49')](_[_0x2315('0x4a')](_0x38eac0),[_0x2315('0x4b'),'salt']);_0x5d993c[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x327781[_0x2315('0x4c')]);_0x5d993c[_0x2315('0x4d')]=_['intersection'](_0x5d993c[_0x2315('0x48')],_0x5d993c[_0x2315('0x4c')]);_0x4de122[_0x2315('0x4e')]=_['intersection'](_0x5d993c[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x327781[_0x2315('0x4c')]['fields']));_0x4de122['attributes']=_0x4de122[_0x2315('0x4e')][_0x2315('0x50')]?_0x4de122[_0x2315('0x4e')]:_0x5d993c['model'];if(!_0x327781[_0x2315('0x4c')][_0x2315('0x51')](_0x2315('0x52'))){_0x4de122[_0x2315('0x53')]=qs[_0x2315('0x53')](_0x327781['query'][_0x2315('0x53')]);_0x4de122['offset']=qs[_0x2315('0x2d')](_0x327781[_0x2315('0x4c')][_0x2315('0x2d')]);}_0x4de122[_0x2315('0x54')]=qs[_0x2315('0x55')](_0x327781[_0x2315('0x4c')][_0x2315('0x55')]);_0x4de122[_0x2315('0x56')]=qs[_0x2315('0x4d')](_['pick'](_0x327781[_0x2315('0x4c')],_0x5d993c['filters']));if(_0x327781['query']['filter']){_0x4de122[_0x2315('0x56')]=_[_0x2315('0x57')](_0x4de122['where'],{'$or':_[_0x2315('0x3c')](_0x38eac0,function(_0x4bcfde){if(_0x4bcfde['type'][_0x2315('0x58')]!==_0x2315('0x59')){return db[_0x2315('0x5a')][_0x2315('0x56')](db['sequelize']['fn']('lower',db[_0x2315('0x5a')][_0x2315('0x5b')](_0x4bcfde[_0x2315('0x5c')])),{'$like':db[_0x2315('0x5a')]['fn'](_0x2315('0x5d'),'%'+_0x327781[_0x2315('0x4c')][_0x2315('0x3b')]+'%')});}})});}_0x4de122=_['merge']({},_0x4de122,_0x327781[_0x2315('0x5e')]);var _0x198a7d={'where':_0x4de122[_0x2315('0x56')]};return db[_0x2315('0x5f')][_0x2315('0x2c')](_0x198a7d)[_0x2315('0x1e')](function(_0x243b0c){_0xbcd40e['count']=_0x243b0c;if(_0x327781[_0x2315('0x4c')][_0x2315('0x60')]){_0x4de122[_0x2315('0x61')]=[{'all':!![]}];}return db[_0x2315('0x5f')]['findAll'](_0x4de122);})[_0x2315('0x1e')](function(_0xa9edad){_0xbcd40e[_0x2315('0x62')]=_0xa9edad;return _0xbcd40e;})[_0x2315('0x1e')](respondWithFilteredResult(_0x5a7956,_0x4de122))[_0x2315('0x29')](handleError(_0x5a7956,null));};exports['show']=function(_0x1cddaf,_0x4856ae){var _0x312f87={'raw':![],'where':{'id':_0x1cddaf['params']['id']}},_0x59215c={};_0x59215c[_0x2315('0x48')]=_['differenceBy'](_[_0x2315('0x4a')](db[_0x2315('0x5f')][_0x2315('0x63')]),[_0x2315('0x4b'),_0x2315('0x64')]);_0x59215c[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x1cddaf[_0x2315('0x4c')]);_0x59215c['filters']=_[_0x2315('0x65')](_0x59215c[_0x2315('0x48')],_0x59215c[_0x2315('0x4c')]);_0x312f87[_0x2315('0x4e')]=_[_0x2315('0x65')](_0x59215c[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x1cddaf[_0x2315('0x4c')][_0x2315('0x4f')]));_0x312f87[_0x2315('0x4e')]=_0x312f87[_0x2315('0x4e')][_0x2315('0x50')]?_0x312f87[_0x2315('0x4e')]:_0x59215c['model'];if(_0x1cddaf[_0x2315('0x4c')]['includeAll']){_0x312f87[_0x2315('0x61')]=[{'all':!![]}];}_0x312f87=_['merge']({},_0x312f87,_0x1cddaf['options']);return db[_0x2315('0x5f')][_0x2315('0x40')](_0x312f87)[_0x2315('0x1e')](handleEntityNotFound(_0x4856ae,null))[_0x2315('0x1e')](respondWithResult(_0x4856ae,null))[_0x2315('0x29')](handleError(_0x4856ae,null));};exports['bulkCreate']=function(_0x5273e5,_0x232161){return db[_0x2315('0x5f')][_0x2315('0x66')](_0x5273e5[_0x2315('0x67')],{'raw':![],'individualHooks':!![]})['then'](respondWithResult(_0x232161,0xc9))[_0x2315('0x29')](handleError(_0x232161,null));};exports[_0x2315('0x33')]=function(_0x391f80,_0x55db8b){if(_0x391f80['body']['id']){delete _0x391f80[_0x2315('0x67')]['id'];}delete _0x391f80[_0x2315('0x67')][_0x2315('0x3f')];return db['User']['find']({'where':{'id':_0x391f80[_0x2315('0x68')]['id']}})['then'](handleEntityNotFound(_0x55db8b,null))[_0x2315('0x1e')](saveUpdates(_0x391f80[_0x2315('0x67')],null))[_0x2315('0x1e')](respondWithResult(_0x55db8b,null))[_0x2315('0x29')](handleError(_0x55db8b,null));};exports['describe']=function(_0x8539dc,_0x332018){return db[_0x2315('0x5f')][_0x2315('0x69')]()['then'](respondWithResult(_0x332018,null))['catch'](handleError(_0x332018,null));};exports[_0x2315('0x6a')]=function(_0x4670c7,_0x482da5,_0x4b4557){return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x4670c7[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x482da5,null))[_0x2315('0x1e')](function(_0x368f6e){if(_0x368f6e){return _0x368f6e[_0x2315('0x6a')](_0x4670c7[_0x2315('0x67')]['ids'],_['omit'](_0x4670c7[_0x2315('0x67')],['ids','id'])||{});}})[_0x2315('0x1e')](respondWithResult(_0x482da5,null))[_0x2315('0x29')](handleError(_0x482da5,null));};var getLicense=function(_0x3d4796){return new BPromise(function(_0x1a2051,_0x227f0f){var _0x18f95e=0x0;_0x3d4796[_0x2315('0x67')][_0x2315('0x3f')]===_0x2315('0x38')&&_0x1a2051(_0x2315('0x6b'));return db[_0x2315('0x5f')][_0x2315('0x2c')]({'where':{'$or':[{'role':_0x3d4796[_0x2315('0x67')]['role']==='telephone'?_0x2315('0x3a'):[_0x2315('0x6c'),_0x2315('0x36')]}]}})[_0x2315('0x1e')](function(_0x4ff1f7){_0x18f95e=_0x4ff1f7;return require(_0x2315('0x6d'))['getLicense']();})[_0x2315('0x1e')](function(_0xbd95c1){var _0x7a07a4=_0x3d4796[_0x2315('0x67')][_0x2315('0x3f')]===_0x2315('0x3a')?'telephones':_0x2315('0x6e');if(!_['isNil'](_0xbd95c1[_0x7a07a4])&&_0x18f95e>=_0xbd95c1[_0x7a07a4]){return _0x227f0f({'message':'License\x20limit\x20reached'});}return _0x1a2051(util['format'](_0x2315('0x6f'),_0x7a07a4,_0x18f95e));})[_0x2315('0x29')](function(_0x46111e){return _0x227f0f(_0x46111e);});});};exports['create']=function(_0x15ccc8,_0x5b5805){return getLicense(_0x15ccc8)[_0x2315('0x1e')](function(_0x4883ef){if(!_0x15ccc8['body'][_0x2315('0x70')]){var _0x5cd46a;return db['Setting'][_0x2315('0x71')](0x1)[_0x2315('0x1e')](function(_0x3ad2b1){_0x3ad2b1[_0x2315('0x72')]=!![];return checkPasswordPattern(_0x3ad2b1,_0x15ccc8[_0x2315('0x67')]['password'],_0x3ad2b1[_0x2315('0x72')]);})[_0x2315('0x1e')](function(_0x41cdc5){_0x5cd46a=_0x41cdc5['min_internal'];return db[_0x2315('0x5f')][_0x2315('0x73')](_0x2315('0x70'));})[_0x2315('0x1e')](function(_0x123c87){if(_[_0x2315('0x74')](_0x123c87)){if(_0x5cd46a){_0x15ccc8[_0x2315('0x67')][_0x2315('0x70')]=_0x5cd46a;}else{_0x15ccc8['body'][_0x2315('0x70')]=0x1;}}else{if(_[_0x2315('0x74')](_0x5cd46a)||_0x5cd46a==_0x123c87){_0x15ccc8[_0x2315('0x67')][_0x2315('0x70')]=_0x123c87+0x1;}else if(_0x5cd46a>_0x123c87){_0x15ccc8['body'][_0x2315('0x70')]=_0x5cd46a;}else{return db[_0x2315('0x5a')][_0x2315('0x4c')](_0x2315('0x75'),{'type':db[_0x2315('0x5a')]['QueryTypes'][_0x2315('0x76')]})['then'](function(_0x395569){if(_0x395569&&_0x395569[_0x2315('0x50')]){for(var _0x32d49d=0x0,_0x31975f=_0x395569[_0x2315('0x50')];_0x32d49d<_0x31975f&&_[_0x2315('0x74')](_0x15ccc8[_0x2315('0x67')]['internal']);_0x32d49d++){if(_0x5cd46a<=_0x395569[_0x32d49d][_0x2315('0x77')]){_0x15ccc8[_0x2315('0x67')][_0x2315('0x70')]=_0x395569[_0x32d49d][_0x2315('0x77')];}else if(_0x5cd46a>_0x395569[_0x32d49d][_0x2315('0x77')]&&_0x5cd46a<=_0x395569[_0x32d49d]['to']){_0x15ccc8['body'][_0x2315('0x70')]=_0x5cd46a;}}}if(_['isNil'](_0x15ccc8[_0x2315('0x67')]['internal'])){_0x15ccc8[_0x2315('0x67')][_0x2315('0x70')]=_0x123c87+0x1;}});}}});}})[_0x2315('0x1e')](function(){if(_0x15ccc8[_0x2315('0x67')][_0x2315('0x78')]){_0x15ccc8['body'][_0x2315('0x79')]=_0x15ccc8['body'][_0x2315('0x70')];_0x15ccc8[_0x2315('0x67')][_0x2315('0x7a')]={'mailbox':_0x15ccc8['body'][_0x2315('0x70')],'password':_0x15ccc8[_0x2315('0x67')][_0x2315('0x4b')],'fullname':_0x15ccc8['body'][_0x2315('0x7b')],'email':_0x15ccc8[_0x2315('0x67')][_0x2315('0x7c')]};}if(_0x15ccc8[_0x2315('0x67')]&&_0x15ccc8['body'][_0x2315('0x3f')]===_0x2315('0x38')){_0x15ccc8['body'][_0x2315('0x7d')]=[_0x2315('0x7e'),_0x2315('0x7f'),_0x2315('0x80'),_0x2315('0x81'),_0x2315('0x82'),_0x2315('0x83'),'106',_0x2315('0x84'),_0x2315('0x85'),_0x2315('0x86'),_0x2315('0x87'),'111'];}return db['User']['create'](_0x15ccc8[_0x2315('0x67')],{'include':[{'model':db[_0x2315('0x7a')],'as':_0x2315('0x7a')}]});})[_0x2315('0x1e')](function(_0x3dc5a8){if(_0x15ccc8[_0x2315('0x67')][_0x2315('0x3f')]==='user')return _0x3dc5a8;var _0x486dbf=_0x15ccc8['user']['get']({'plain':!![]});if(!_0x486dbf)throw new Error(_0x2315('0x88'));if(_0x486dbf['role']===_0x2315('0x36')){var _0x5bbcaf=_0x3dc5a8[_0x2315('0x34')]({'plain':!![]});var _0x41b05e=[{'name':_0x2315('0x37'),'value':_0x2315('0x38')},{'name':'Telephones','value':_0x2315('0x3a')}];var _0x193a06=_['find'](_0x41b05e,[_0x2315('0x3d'),_0x5bbcaf[_0x2315('0x3f')]])[_0x2315('0x41')];return db['UserProfileSection'][_0x2315('0x40')]({'where':{'name':_0x193a06,'userProfileId':_0x486dbf[_0x2315('0x89')]},'raw':!![]})['then'](function(_0x31337d){if(_0x31337d&&_0x31337d[_0x2315('0x8a')]===0x0){return db['UserProfileResource'][_0x2315('0x8b')]({'name':_0x5bbcaf[_0x2315('0x41')],'resourceId':_0x5bbcaf['id'],'type':_0x31337d[_0x2315('0x41')],'sectionId':_0x31337d['id']},{})[_0x2315('0x1e')](function(){return _0x3dc5a8;});}else{return _0x3dc5a8;}})[_0x2315('0x29')](function(_0x569b39){logger[_0x2315('0x23')](_0x2315('0x8c'),_0x569b39);throw _0x569b39;});}return _0x3dc5a8;})[_0x2315('0x1e')](respondWithResult(_0x5b5805,0xc9))[_0x2315('0x29')](handleError(_0x5b5805,null));};exports[_0x2315('0x8d')]=function(_0x3f0aee,_0x359ea0,_0x3ca229){var _0xc3f03e=![];if(_0x3f0aee['body']['id']){delete _0x3f0aee[_0x2315('0x67')]['id'];}if(!_['isNil'](_0x3f0aee['body']['oldPassword'])){if(_0x3f0aee['body'][_0x2315('0x8e')]===_0x3f0aee['body']['newPassword']){throw new Error('New\x20password\x20must\x20be\x20different\x20from\x20old\x20one');}}return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x3f0aee[_0x2315('0x68')]['id']}})['then'](function(_0x549295){if(_0x549295){if(_0x549295['id']==_0x3f0aee[_0x2315('0x36')]['id']){if(!_0x3f0aee['body'][_0x2315('0x8e')]||!_0x3f0aee[_0x2315('0x67')][_0x2315('0x8f')]){throw new db['Sequelize']['ValidationError']('Invalid\x20body\x20format.\x20Use\x20oldPassord\x20and\x20newPassword');}if(!_0x549295[_0x2315('0x90')](_0x3f0aee['body']['oldPassword'])){throw new db[(_0x2315('0x91'))][(_0x2315('0x92'))](_0x2315('0x93'));}if(_0x3f0aee['body']['oldPassword']==_0x3f0aee[_0x2315('0x67')][_0x2315('0x8f')]){throw new db['Sequelize']['ValidationError'](_0x2315('0x94'));}return _0x549295;}else if(_0x3f0aee[_0x2315('0x36')][_0x2315('0x3f')]=='admin'){if(!_0x3f0aee[_0x2315('0x67')][_0x2315('0x8f')]){throw new db['Sequelize']['ValidationError'](_0x2315('0x95'));}return _0x549295;}else if(_0x3f0aee['user']['role']==_0x2315('0x36')){if(!_0x3f0aee[_0x2315('0x67')][_0x2315('0x8f')]){throw new db[(_0x2315('0x91'))]['ValidationError']('Invalid\x20body\x20format.\x20Use\x20newPassword');}if(_0x549295[_0x2315('0x3f')]!=_0x2315('0x38')){throw new db['Sequelize'][(_0x2315('0x92'))](_0x2315('0x96'));}return _0x549295;}else{throw new db[(_0x2315('0x91'))][(_0x2315('0x92'))](_0x2315('0x96'));}}return null;})[_0x2315('0x1e')](handleEntityNotFound(_0x359ea0,null))[_0x2315('0x1e')](function(_0x712c48){return db[_0x2315('0x97')][_0x2315('0x98')]({'attributes':['id',_0x2315('0x72')]})[_0x2315('0x1e')](function(_0x44894a){_0xc3f03e=_0x44894a[_0x2315('0x72')];return checkPasswordPattern(_0x712c48,_0x3f0aee['body'][_0x2315('0x8f')],_0xc3f03e);});})['then'](saveUpdates({'password':_0x3f0aee[_0x2315('0x67')]['newPassword'],'passwordResetAt':_0x3f0aee[_0x2315('0x36')]['id']==_0x3f0aee[_0x2315('0x68')]['id']?moment():null},null))[_0x2315('0x1e')](respondWithResult(_0x359ea0,null))[_0x2315('0x29')](handleError(_0x359ea0,null));};exports[_0x2315('0x99')]=function(_0x2b764f,_0x26eafb,_0x44c384){var _0x5a3548=_0x2b764f[_0x2315('0x67')][_0x2315('0x9a')];return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x2b764f[_0x2315('0x68')]['id']},'attributes':['id','name',_0x2315('0x3f'),_0x2315('0x9b'),_0x2315('0x9c'),_0x2315('0x9d'),_0x2315('0x9e')]})['then'](handleEntityNotFound(_0x26eafb,null))[_0x2315('0x1e')](function(_0x43bb5d){if(_0x43bb5d){if(!utils[_0x2315('0x9f')](_0x5a3548)){throw new db['Sequelize'][(_0x2315('0x92'))]('Unknown\x20channel');}return _0x43bb5d[_0x2315('0xa0')+_[_0x2315('0xa1')](_0x5a3548[_0x2315('0xa2')]())+'Queues'](_0x2b764f[_0x2315('0x67')][_0x2315('0xa3')],{'penalty':_0x2b764f[_0x2315('0x67')][_0x2315('0xa4')]||0x0})[_0x2315('0xa5')](function(_0x9be351){for(var _0x2d68fa=0x0;_0x2d68fa<_0x2b764f['body'][_0x2315('0xa3')][_0x2315('0x50')];_0x2d68fa+=0x1){var _0x80ba6a={'UserId':_0x2b764f[_0x2315('0x68')]['id']};_0x80ba6a[_['capitalize'](_0x5a3548['toLowerCase']())+'QueueId']=_0x2b764f[_0x2315('0x67')][_0x2315('0xa3')][_0x2d68fa];socket[_0x2315('0xa6')]('user'+_[_0x2315('0xa1')](_0x5a3548[_0x2315('0xa2')]())+'Queue:save',_0x80ba6a);}return _0x9be351;})[_0x2315('0x1e')](function(){if(_0x5a3548===_0x2315('0xa7')){return db[_0x2315('0xa8')][_0x2315('0xa9')]({'where':{'id':_0x2b764f[_0x2315('0x67')]['ids']||[]},'raw':!![],'attributes':['id',_0x2315('0x41')]});}})[_0x2315('0x1e')](function(_0x3bc7fe){var _0x5c770e=_0x43bb5d[_0x2315('0x34')]({'plain':!![]});var _0x2bf743=[];if(_0x5a3548===_0x2315('0xa7')&&_0x5c770e[_0x2315('0x3f')]===_0x2315('0x38')&&_0x5c770e[_0x2315('0x9b')]){for(var _0x37013a=0x0;_0x37013a<_0x3bc7fe['length'];_0x37013a+=0x1){_0x2bf743[_0x2315('0xaa')]({'membername':_0x5c770e[_0x2315('0x41')],'UserId':_0x5c770e['id'],'queue_name':_0x3bc7fe[_0x37013a][_0x2315('0x41')],'VoiceQueueId':_0x3bc7fe[_0x37013a]['id'],'interface':_[_0x2315('0x74')](_0x5c770e[_0x2315('0x9e')])?util[_0x2315('0xab')](_0x2315('0xac'),_0x5c770e[_0x2315('0x41')]):_0x5c770e['interface'],'paused':_0x5c770e['voicePause']||![],'penalty':_0x2b764f[_0x2315('0x67')]['penalty']||0x0});}return BPromise[_0x2315('0xad')](_0x2bf743,function(_0x1064d0){return db[_0x2315('0xae')][_0x2315('0xaf')](_0x1064d0);});}return _0x43bb5d;});}})[_0x2315('0x1e')](respondWithStatusCode(_0x26eafb,null))['catch'](handleError(_0x26eafb,null));};exports[_0x2315('0xb0')]=function(_0x4a8596,_0xd2fa25,_0x1fd69e){var _0x45a68b;return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x4a8596[_0x2315('0x68')]['id']},'attributes':['id','name','role']})[_0x2315('0x1e')](handleEntityNotFound(_0xd2fa25,null))[_0x2315('0x1e')](function(_0x470e89){if(_0x470e89){_0x45a68b=_0x470e89;if(!_0x4a8596[_0x2315('0x4c')]['channel']||!utils[_0x2315('0x9f')](_0x4a8596[_0x2315('0x4c')]['channel'])){throw new db[(_0x2315('0x91'))][(_0x2315('0x92'))]('Unknown\x20channel');}return _0x470e89[_0x2315('0xb1')+_['capitalize'](_0x4a8596[_0x2315('0x4c')]['channel'][_0x2315('0xa2')]())+'Queues'](_0x4a8596[_0x2315('0x4c')][_0x2315('0xa3')]);}})[_0x2315('0x1e')](function(_0x1c2d13){for(var _0x4ced65=0x0;_0x4ced65<_0x4a8596[_0x2315('0x4c')]['ids']['length'];_0x4ced65+=0x1){var _0x347cb5={'UserId':_0x4a8596[_0x2315('0x68')]['id']};_0x347cb5[_[_0x2315('0xa1')](_0x4a8596['query'][_0x2315('0x9a')][_0x2315('0xa2')]())+_0x2315('0xb2')]=_0x4a8596[_0x2315('0x4c')][_0x2315('0xa3')][_0x4ced65];socket[_0x2315('0xa6')](_0x2315('0x36')+_['capitalize'](_0x4a8596['query'][_0x2315('0x9a')][_0x2315('0xa2')]())+_0x2315('0xb3'),_0x347cb5);}return _0x1c2d13;})[_0x2315('0x1e')](function(){if(_0x4a8596[_0x2315('0x4c')]['channel']===_0x2315('0xa7')){return db[_0x2315('0xae')][_0x2315('0x43')]({'where':{'UserId':_0x4a8596[_0x2315('0x68')]['id'],'VoiceQueueId':_0x4a8596[_0x2315('0x4c')][_0x2315('0xa3')]},'individualHooks':!![]})['then'](function(){return _0x45a68b;});}return _0x45a68b;})[_0x2315('0x1e')](respondWithStatusCode(_0xd2fa25,null))[_0x2315('0x29')](handleError(_0xd2fa25,null));};exports[_0x2315('0xb4')]=function(_0x863658,_0x18b38b,_0x3b8338){_0x863658['body']['userpic']=_0x863658['file']['filename'];return db['User']['find']({'where':{'id':_0x863658[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x18b38b,null))[_0x2315('0x1e')](saveUpdates(_0x863658[_0x2315('0x67')],null))['then'](respondWithResult(_0x18b38b,null))['catch'](handleError(_0x18b38b,null));};exports[_0x2315('0xb5')]=function(_0x7e1af1,_0x33b8d0,_0x3a3d51){var _0x31fe26=path[_0x2315('0xb6')](config[_0x2315('0xb7')],_0x2315('0xb8'));return db['User'][_0x2315('0x40')]({'where':{'id':_0x7e1af1[_0x2315('0x68')]['id']},'attributes':['id',_0x2315('0xb9')],'raw':!![]})['then'](handleEntityNotFound(_0x33b8d0,null))[_0x2315('0x1e')](function(_0x51e7c3){if(_0x51e7c3){if(_[_0x2315('0x74')](_0x51e7c3[_0x2315('0xb9')])){return _0x33b8d0['download'](_0x31fe26);}else{if(!fs[_0x2315('0xba')](path['join'](config[_0x2315('0xb7')],_0x2315('0xbb'),_0x51e7c3['userpic']))){return _0x33b8d0[_0x2315('0xbc')](_0x31fe26);}return _0x33b8d0[_0x2315('0xbc')](path[_0x2315('0xb6')](config[_0x2315('0xb7')],'server/files/images/',_0x51e7c3[_0x2315('0xb9')]));}}})[_0x2315('0x29')](handleError(_0x33b8d0,null));};exports['getContacts']=function(_0x259d69,_0x4537ed,_0x43dc43){var _0x56702b={};var _0x41c883={};var _0x517ae9;var _0x3de62e;return db[_0x2315('0x5f')][_0x2315('0x98')]({'where':{'id':_0x259d69['params']['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x4537ed,null))[_0x2315('0x1e')](function(_0x5f3763){if(_0x5f3763){_0x517ae9=_0x5f3763;_0x41c883['model']=_[_0x2315('0x4a')](db['CmContact'][_0x2315('0x63')]);_0x41c883[_0x2315('0x4c')]=_['keys'](_0x259d69['query']);_0x41c883[_0x2315('0x4d')]=_[_0x2315('0x65')](_0x41c883[_0x2315('0x48')],_0x41c883['query']);_0x56702b[_0x2315('0x4e')]=_[_0x2315('0x65')](_0x41c883[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x259d69[_0x2315('0x4c')][_0x2315('0x4f')]));_0x56702b[_0x2315('0x4e')]=_0x56702b['attributes'][_0x2315('0x50')]?_0x56702b['attributes']:_0x41c883[_0x2315('0x48')];_0x56702b['order']=qs['sort'](_0x259d69['query'][_0x2315('0x55')]);_0x56702b[_0x2315('0x56')]=qs[_0x2315('0x4d')](_['pick'](_0x259d69[_0x2315('0x4c')],_0x41c883['filters']));if(_0x259d69['query'][_0x2315('0x3b')]){_0x56702b[_0x2315('0x56')]=_[_0x2315('0x57')](_0x56702b[_0x2315('0x56')],{'$or':_[_0x2315('0x3c')](_0x56702b[_0x2315('0x4e')],function(_0x42c72b){var _0x405820={};_0x405820[_0x42c72b]={'$like':'%'+_0x259d69[_0x2315('0x4c')][_0x2315('0x3b')]+'%'};return _0x405820;})});}_0x56702b=_['merge']({},_0x56702b,_0x259d69['options']);return _0x517ae9['getContacts'](_0x56702b);}})[_0x2315('0x1e')](function(_0x345ec3){if(_0x345ec3){_0x3de62e=_0x345ec3['length'];if(_0x259d69[_0x2315('0x4c')][_0x2315('0x51')](_0x2315('0x60'))){_0x56702b['include']=[{'model':db[_0x2315('0xbd')],'as':_0x2315('0xbe'),'required':![]},{'model':db[_0x2315('0xbf')],'as':_0x2315('0xc0'),'attributes':['id',_0x2315('0x41'),_0x2315('0xc1')],'where':_0x259d69[_0x2315('0x4c')][_0x2315('0xc2')]?{'id':_0x259d69[_0x2315('0x4c')][_0x2315('0xc2')]}:undefined,'required':_0x259d69[_0x2315('0x4c')][_0x2315('0xc2')]?!![]:![]}];}if(!_0x259d69[_0x2315('0x4c')][_0x2315('0x51')](_0x2315('0x52'))){_0x56702b[_0x2315('0x53')]=qs['limit'](_0x259d69[_0x2315('0x4c')][_0x2315('0x53')]);_0x56702b[_0x2315('0x2d')]=qs[_0x2315('0x2d')](_0x259d69[_0x2315('0x4c')][_0x2315('0x2d')]);}return _0x517ae9[_0x2315('0xc3')](_0x56702b);}})[_0x2315('0x1e')](function(_0x1a6032){if(_0x1a6032){return _0x1a6032?{'count':_0x3de62e,'rows':_0x1a6032}:null;}})[_0x2315('0x1e')](respondWithResult(_0x4537ed,null))['catch'](handleError(_0x4537ed,null));};exports['getQueues']=function(_0x433a24,_0x4972ef,_0x53b572){var _0xe73061;var _0x4a1bfb;var _0x2b5ab4={};var _0x345057;return db[_0x2315('0x5f')][_0x2315('0x98')]({'where':{'id':_0x433a24[_0x2315('0x68')]['id']},'attributes':['id',_0x2315('0x41'),_0x2315('0x3f')]})[_0x2315('0x1e')](handleEntityNotFound(_0x4972ef,null))[_0x2315('0x1e')](function(_0x3e2e9a){if(!utils['isValidChannel'](_0x433a24[_0x2315('0x4c')][_0x2315('0x9a')])){throw new db[(_0x2315('0x91'))][(_0x2315('0x92'))](_0x2315('0xc4'));}_0xe73061=_0x3e2e9a;var _0x4dcfe7={};_0x4dcfe7[_0x2315('0x48')]=_['keys'](db[_[_0x2315('0xa1')](_0x433a24['query'][_0x2315('0x9a')])+_0x2315('0xc5')]['rawAttributes']);_0x4dcfe7[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x433a24[_0x2315('0x4c')]);_0x4dcfe7[_0x2315('0x4d')]=_[_0x2315('0x65')](_0x4dcfe7[_0x2315('0x48')],_0x4dcfe7[_0x2315('0x4c')]);_0x2b5ab4['attributes']=_[_0x2315('0x65')](_0x4dcfe7['model'],qs[_0x2315('0x4f')](_0x433a24[_0x2315('0x4c')][_0x2315('0x4f')]));_0x2b5ab4[_0x2315('0x4e')]=_0x2b5ab4[_0x2315('0x4e')]['length']?_0x2b5ab4[_0x2315('0x4e')]:_0x4dcfe7[_0x2315('0x48')];_0x2b5ab4[_0x2315('0x54')]=qs['sort'](_0x433a24[_0x2315('0x4c')][_0x2315('0x55')]);_0x2b5ab4[_0x2315('0x56')]=qs[_0x2315('0x4d')](_[_0x2315('0xc6')](_0x433a24[_0x2315('0x4c')],_0x4dcfe7['filters']));if(_0x433a24[_0x2315('0x4c')][_0x2315('0x3b')]){_0x2b5ab4[_0x2315('0x56')]=_[_0x2315('0x57')](_0x2b5ab4[_0x2315('0x56')],{'$or':_[_0x2315('0x3c')](_0x2b5ab4[_0x2315('0x4e')],function(_0xb7b490){var _0x1b1e0b={};_0x1b1e0b[_0xb7b490]={'$like':'%'+_0x433a24[_0x2315('0x4c')]['filter']+'%'};return _0x1b1e0b;})});}_0x2b5ab4=_[_0x2315('0x57')]({},_0x2b5ab4,_0x433a24[_0x2315('0x5e')]);switch(_0xe73061[_0x2315('0x3f')]){case _0x2315('0x6c'):return db[_['capitalize'](_0x433a24[_0x2315('0x4c')][_0x2315('0x9a')])+'Queue'][_0x2315('0xa9')](_0x2b5ab4);case'user':case'agent':return _0xe73061['get'+_['capitalize'](_0x433a24[_0x2315('0x4c')][_0x2315('0x9a')])+'Queues'](_0x2b5ab4);default:throw new db[(_0x2315('0x91'))][(_0x2315('0x92'))](_0x2315('0xc7'));}})[_0x2315('0x1e')](function(_0x13911c){_0x345057=_0x13911c[_0x2315('0x50')];if(!_0x433a24['query'][_0x2315('0x51')](_0x2315('0x52'))){_0x2b5ab4[_0x2315('0x53')]=qs[_0x2315('0x53')](_0x433a24['query'][_0x2315('0x53')]);_0x2b5ab4['offset']=qs[_0x2315('0x2d')](_0x433a24[_0x2315('0x4c')][_0x2315('0x2d')]);}switch(_0xe73061[_0x2315('0x3f')]){case _0x2315('0x6c'):return db[_['capitalize'](_0x433a24[_0x2315('0x4c')]['channel'])+_0x2315('0xc5')][_0x2315('0xa9')](_0x2b5ab4);case _0x2315('0x36'):case _0x2315('0x38'):return _0xe73061[_0x2315('0x34')+_[_0x2315('0xa1')](_0x433a24['query']['channel'])+_0x2315('0xc8')](_0x2b5ab4);}})[_0x2315('0x1e')](function(_0xa67629){return{'count':_0x345057,'rows':_0xa67629};})[_0x2315('0x1e')](respondWithResult(_0x4972ef,null))[_0x2315('0x29')](handleError(_0x4972ef,null));};exports[_0x2315('0xc9')]=function(_0x2f9ac1,_0x16d8f9,_0x360e31){var _0x97cd27={};var _0x12dba3={};var _0x7d7204;var _0x301184;return db[_0x2315('0x5f')]['findOne']({'where':{'id':_0x2f9ac1['params']['id']}})['then'](handleEntityNotFound(_0x16d8f9,null))[_0x2315('0x1e')](function(_0xcc9fa4){if(_0xcc9fa4){_0x7d7204=_0xcc9fa4;_0x12dba3['model']=_[_0x2315('0x4a')](db['UserVoiceQueueRt'][_0x2315('0x63')]);_0x12dba3[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x2f9ac1[_0x2315('0x4c')]);_0x12dba3['filters']=_[_0x2315('0x65')](_0x12dba3['model'],_0x12dba3['query']);_0x97cd27[_0x2315('0x4e')]=_[_0x2315('0x65')](_0x12dba3[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x2f9ac1[_0x2315('0x4c')][_0x2315('0x4f')]));_0x97cd27['attributes']=_0x97cd27['attributes'][_0x2315('0x50')]?_0x97cd27[_0x2315('0x4e')]:_0x12dba3[_0x2315('0x48')];_0x97cd27['order']=qs[_0x2315('0x55')](_0x2f9ac1['query']['sort']);_0x97cd27['where']=qs[_0x2315('0x4d')](_[_0x2315('0xc6')](_0x2f9ac1[_0x2315('0x4c')],_0x12dba3['filters']));if(_0x2f9ac1['query']['filter']){_0x97cd27['where']=_[_0x2315('0x57')](_0x97cd27[_0x2315('0x56')],{'$or':_['map'](_0x97cd27[_0x2315('0x4e')],function(_0xb198e0){var _0x919b98={};_0x919b98[_0xb198e0]={'$like':'%'+_0x2f9ac1['query'][_0x2315('0x3b')]+'%'};return _0x919b98;})});}_0x97cd27=_[_0x2315('0x57')]({},_0x97cd27,_0x2f9ac1[_0x2315('0x5e')]);return _0x7d7204[_0x2315('0xc9')](_0x97cd27);}})[_0x2315('0x1e')](function(_0x92137a){if(_0x92137a){_0x301184=_0x92137a[_0x2315('0x50')];if(!_0x2f9ac1[_0x2315('0x4c')]['hasOwnProperty'](_0x2315('0x52'))){_0x97cd27['limit']=qs['limit'](_0x2f9ac1['query'][_0x2315('0x53')]);_0x97cd27['offset']=qs['offset'](_0x2f9ac1[_0x2315('0x4c')][_0x2315('0x2d')]);}return _0x7d7204[_0x2315('0xc9')](_0x97cd27);}})[_0x2315('0x1e')](function(_0x350734){if(_0x350734){return _0x350734?{'count':_0x301184,'rows':_0x350734}:null;}})[_0x2315('0x1e')](respondWithResult(_0x16d8f9,null))[_0x2315('0x29')](handleError(_0x16d8f9,null));};exports[_0x2315('0xca')]=function(_0x45e0f7,_0x151de8,_0x110440){var _0x36fe9b={};var _0x180921={};var _0x3f0c18;var _0x1b90cb;return db[_0x2315('0x5f')]['findOne']({'where':{'id':_0x45e0f7[_0x2315('0x68')]['id']}})['then'](handleEntityNotFound(_0x151de8,null))['then'](function(_0x321fa1){if(_0x321fa1){_0x3f0c18=_0x321fa1;_0x180921[_0x2315('0x48')]=_[_0x2315('0x4a')](db[_0x2315('0xcb')][_0x2315('0x63')]);_0x180921[_0x2315('0x4c')]=_['keys'](_0x45e0f7[_0x2315('0x4c')]);_0x180921[_0x2315('0x4d')]=_[_0x2315('0x65')](_0x180921[_0x2315('0x48')],_0x180921[_0x2315('0x4c')]);_0x36fe9b[_0x2315('0x4e')]=_[_0x2315('0x65')](_0x180921[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x45e0f7[_0x2315('0x4c')][_0x2315('0x4f')]));_0x36fe9b[_0x2315('0x4e')]=_0x36fe9b['attributes'][_0x2315('0x50')]?_0x36fe9b[_0x2315('0x4e')]:_0x180921[_0x2315('0x48')];_0x36fe9b['order']=qs['sort'](_0x45e0f7[_0x2315('0x4c')]['sort']);_0x36fe9b[_0x2315('0x56')]=qs[_0x2315('0x4d')](_[_0x2315('0xc6')](_0x45e0f7[_0x2315('0x4c')],_0x180921['filters']));if(_0x45e0f7[_0x2315('0x4c')][_0x2315('0x3b')]){_0x36fe9b[_0x2315('0x56')]=_[_0x2315('0x57')](_0x36fe9b[_0x2315('0x56')],{'$or':_['map'](_0x36fe9b[_0x2315('0x4e')],function(_0x58eae8){var _0x3b65ef={};_0x3b65ef[_0x58eae8]={'$like':'%'+_0x45e0f7[_0x2315('0x4c')]['filter']+'%'};return _0x3b65ef;})});}_0x36fe9b=_[_0x2315('0x57')]({},_0x36fe9b,_0x45e0f7[_0x2315('0x5e')]);return _0x3f0c18[_0x2315('0xca')](_0x36fe9b);}})[_0x2315('0x1e')](function(_0x25e75e){if(_0x25e75e){_0x1b90cb=_0x25e75e[_0x2315('0x50')];if(!_0x45e0f7['query']['hasOwnProperty'](_0x2315('0x52'))){_0x36fe9b[_0x2315('0x53')]=qs[_0x2315('0x53')](_0x45e0f7[_0x2315('0x4c')][_0x2315('0x53')]);_0x36fe9b[_0x2315('0x2d')]=qs[_0x2315('0x2d')](_0x45e0f7[_0x2315('0x4c')][_0x2315('0x2d')]);}return _0x3f0c18[_0x2315('0xca')](_0x36fe9b);}})[_0x2315('0x1e')](function(_0x598677){if(_0x598677){return _0x598677?{'count':_0x1b90cb,'rows':_0x598677}:null;}})[_0x2315('0x1e')](respondWithResult(_0x151de8,null))['catch'](handleError(_0x151de8,null));};exports[_0x2315('0xcc')]=function(_0x10e11e,_0xc20a,_0x58f9eb){var _0x328d43={'raw':!![],'where':{}};var _0x2a469d={};var _0x38a8d0={'count':0x0,'rows':[]};return db[_0x2315('0x5f')][_0x2315('0x98')]({'where':{'id':_0x10e11e['params']['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0xc20a,null))[_0x2315('0x1e')](function(_0x46ebc5){if(_0x46ebc5){_0x2a469d[_0x2315('0x48')]=_['keys'](db[_0x2315('0xcd')][_0x2315('0x63')]);_0x2a469d['query']=_[_0x2315('0x4a')](_0x10e11e[_0x2315('0x4c')]);_0x2a469d[_0x2315('0x4d')]=_['intersection'](_0x2a469d['model'],_0x2a469d[_0x2315('0x4c')]);_0x328d43[_0x2315('0x4e')]=_[_0x2315('0x65')](_0x2a469d[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x10e11e[_0x2315('0x4c')][_0x2315('0x4f')]));_0x328d43[_0x2315('0x4e')]=_0x328d43[_0x2315('0x4e')][_0x2315('0x50')]?_0x328d43[_0x2315('0x4e')]:_0x2a469d[_0x2315('0x48')];if(!_0x10e11e[_0x2315('0x4c')][_0x2315('0x51')](_0x2315('0x52'))){_0x328d43['limit']=qs[_0x2315('0x53')](_0x10e11e[_0x2315('0x4c')]['limit']);_0x328d43[_0x2315('0x2d')]=qs[_0x2315('0x2d')](_0x10e11e[_0x2315('0x4c')]['offset']);}_0x328d43[_0x2315('0x54')]=qs['sort'](_0x10e11e['query'][_0x2315('0x55')]);_0x328d43[_0x2315('0x56')]=qs[_0x2315('0x4d')](_['pick'](_0x10e11e[_0x2315('0x4c')],_0x2a469d[_0x2315('0x4d')]));_0x328d43[_0x2315('0x56')][_0x2315('0xce')]=_0x46ebc5['id'];if(_0x10e11e['query'][_0x2315('0x3b')]){_0x328d43['where']=_[_0x2315('0x57')](_0x328d43[_0x2315('0x56')],{'$or':_[_0x2315('0x3c')](_0x328d43['attributes'],function(_0x3204c5){var _0x59d427={};_0x59d427[_0x3204c5]={'$like':'%'+_0x10e11e['query']['filter']+'%'};return _0x59d427;})});}_0x328d43=_[_0x2315('0x57')]({},_0x328d43,_0x10e11e['options']);return db[_0x2315('0xcd')][_0x2315('0x2c')]({'where':_0x328d43['where']})['then'](function(_0x202de7){_0x38a8d0['count']=_0x202de7;if(_0x10e11e[_0x2315('0x4c')][_0x2315('0x60')]){_0x328d43['include']=[{'all':!![]}];}return db[_0x2315('0xcd')][_0x2315('0xa9')](_0x328d43);})[_0x2315('0x1e')](function(_0x2dea04){_0x38a8d0[_0x2315('0x62')]=_0x2dea04;return _0x38a8d0;});}})['then'](respondWithFilteredResult(_0xc20a,_0x328d43))[_0x2315('0x29')](handleError(_0xc20a,null));};exports[_0x2315('0xcf')]=function(_0x3f1a42,_0x124893,_0x417740){var _0xc7b816={'raw':!![],'where':{}};var _0x1d9209={};var _0x145877={'count':0x0,'rows':[]};return db['User'][_0x2315('0x98')]({'where':{'id':_0x3f1a42[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x124893,null))[_0x2315('0x1e')](function(_0x882387){if(_0x882387){_0x1d9209[_0x2315('0x48')]=_['keys'](db[_0x2315('0xd0')]['rawAttributes']);_0x1d9209['query']=_[_0x2315('0x4a')](_0x3f1a42[_0x2315('0x4c')]);_0x1d9209['filters']=_[_0x2315('0x65')](_0x1d9209['model'],_0x1d9209[_0x2315('0x4c')]);_0xc7b816[_0x2315('0x4e')]=_['intersection'](_0x1d9209[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x3f1a42[_0x2315('0x4c')][_0x2315('0x4f')]));_0xc7b816['attributes']=_0xc7b816['attributes'][_0x2315('0x50')]?_0xc7b816[_0x2315('0x4e')]:_0x1d9209[_0x2315('0x48')];if(!_0x3f1a42['query'][_0x2315('0x51')](_0x2315('0x52'))){_0xc7b816[_0x2315('0x53')]=qs['limit'](_0x3f1a42['query'][_0x2315('0x53')]);_0xc7b816['offset']=qs[_0x2315('0x2d')](_0x3f1a42['query'][_0x2315('0x2d')]);}_0xc7b816[_0x2315('0x54')]=qs['sort'](_0x3f1a42[_0x2315('0x4c')][_0x2315('0x55')]);_0xc7b816['where']=qs['filters'](_[_0x2315('0xc6')](_0x3f1a42[_0x2315('0x4c')],_0x1d9209['filters']));_0xc7b816[_0x2315('0x56')]['UserId']=_0x882387['id'];if(_0x3f1a42['query'][_0x2315('0x3b')]){_0xc7b816[_0x2315('0x56')]=_['merge'](_0xc7b816[_0x2315('0x56')],{'$or':_['map'](_0xc7b816[_0x2315('0x4e')],function(_0x2d0b6e){var _0x199006={};_0x199006[_0x2d0b6e]={'$like':'%'+_0x3f1a42[_0x2315('0x4c')][_0x2315('0x3b')]+'%'};return _0x199006;})});}_0xc7b816=_[_0x2315('0x57')]({},_0xc7b816,_0x3f1a42['options']);return db[_0x2315('0xd0')]['count']({'where':_0xc7b816[_0x2315('0x56')]})[_0x2315('0x1e')](function(_0x2a1f8b){_0x145877['count']=_0x2a1f8b;if(_0x3f1a42['query']['includeAll']){_0xc7b816[_0x2315('0x61')]=[{'all':!![]}];}return db[_0x2315('0xd0')][_0x2315('0xa9')](_0xc7b816);})[_0x2315('0x1e')](function(_0x4f4a16){_0x145877[_0x2315('0x62')]=_0x4f4a16;return _0x145877;});}})[_0x2315('0x1e')](respondWithFilteredResult(_0x124893,_0xc7b816))[_0x2315('0x29')](handleError(_0x124893,null));};exports[_0x2315('0xd1')]=function(_0x34cb98,_0x3b18c9,_0x564785){var _0x7e33a5={};var _0xacc818={};var _0x2e8311;var _0x352c1e;return db[_0x2315('0x5f')][_0x2315('0x98')]({'where':{'id':_0x34cb98[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x3b18c9,null))['then'](function(_0x5d09c1){if(_0x5d09c1){_0x2e8311=_0x5d09c1;_0xacc818['model']=_[_0x2315('0x4a')](db[_0x2315('0xd2')][_0x2315('0x63')]);_0xacc818[_0x2315('0x4c')]=_['keys'](_0x34cb98[_0x2315('0x4c')]);_0xacc818[_0x2315('0x4d')]=_[_0x2315('0x65')](_0xacc818[_0x2315('0x48')],_0xacc818[_0x2315('0x4c')]);_0x7e33a5[_0x2315('0x4e')]=_[_0x2315('0x65')](_0xacc818[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x34cb98[_0x2315('0x4c')][_0x2315('0x4f')]));_0x7e33a5[_0x2315('0x4e')]=_0x7e33a5[_0x2315('0x4e')][_0x2315('0x50')]?_0x7e33a5[_0x2315('0x4e')]:_0xacc818[_0x2315('0x48')];_0x7e33a5[_0x2315('0x54')]=qs[_0x2315('0x55')](_0x34cb98[_0x2315('0x4c')][_0x2315('0x55')]);_0x7e33a5[_0x2315('0x56')]=qs[_0x2315('0x4d')](_[_0x2315('0xc6')](_0x34cb98[_0x2315('0x4c')],_0xacc818['filters']));if(_0x34cb98[_0x2315('0x4c')][_0x2315('0x3b')]){_0x7e33a5[_0x2315('0x56')]=_[_0x2315('0x57')](_0x7e33a5[_0x2315('0x56')],{'$or':_[_0x2315('0x3c')](_0x7e33a5[_0x2315('0x4e')],function(_0x5d4482){var _0x4a54e3={};_0x4a54e3[_0x5d4482]={'$like':'%'+_0x34cb98[_0x2315('0x4c')][_0x2315('0x3b')]+'%'};return _0x4a54e3;})});}_0x7e33a5=_['merge']({},_0x7e33a5,_0x34cb98[_0x2315('0x5e')]);return _0x2e8311[_0x2315('0xd1')](_0x7e33a5);}})[_0x2315('0x1e')](function(_0x3b15c3){if(_0x3b15c3){_0x352c1e=_0x3b15c3[_0x2315('0x50')];if(!_0x34cb98[_0x2315('0x4c')][_0x2315('0x51')](_0x2315('0x52'))){_0x7e33a5[_0x2315('0x53')]=qs['limit'](_0x34cb98[_0x2315('0x4c')][_0x2315('0x53')]);_0x7e33a5['offset']=qs['offset'](_0x34cb98[_0x2315('0x4c')][_0x2315('0x2d')]);}return _0x2e8311[_0x2315('0xd1')](_0x7e33a5);}})[_0x2315('0x1e')](function(_0x3b2e4c){if(_0x3b2e4c){return _0x3b2e4c?{'count':_0x352c1e,'rows':_0x3b2e4c}:null;}})[_0x2315('0x1e')](respondWithResult(_0x3b18c9,null))[_0x2315('0x29')](handleError(_0x3b18c9,null));};exports[_0x2315('0xd3')]=function(_0x4ef3f4,_0x28e1f9,_0x26653e){var _0x2cda0c={};var _0x48aefd={};var _0x42f10d;var _0x2f41d7;return db['User']['findOne']({'where':{'id':_0x4ef3f4[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x28e1f9,null))[_0x2315('0x1e')](function(_0x29dba4){if(_0x29dba4){_0x42f10d=_0x29dba4;_0x48aefd[_0x2315('0x48')]=_[_0x2315('0x4a')](db[_0x2315('0xd4')]['rawAttributes']);_0x48aefd['query']=_[_0x2315('0x4a')](_0x4ef3f4['query']);_0x48aefd[_0x2315('0x4d')]=_[_0x2315('0x65')](_0x48aefd['model'],_0x48aefd['query']);_0x2cda0c[_0x2315('0x4e')]=_['intersection'](_0x48aefd['model'],qs['fields'](_0x4ef3f4['query'][_0x2315('0x4f')]));_0x2cda0c[_0x2315('0x4e')]=_0x2cda0c[_0x2315('0x4e')]['length']?_0x2cda0c[_0x2315('0x4e')]:_0x48aefd[_0x2315('0x48')];_0x2cda0c[_0x2315('0x54')]=qs[_0x2315('0x55')](_0x4ef3f4[_0x2315('0x4c')][_0x2315('0x55')]);_0x2cda0c[_0x2315('0x56')]=qs[_0x2315('0x4d')](_[_0x2315('0xc6')](_0x4ef3f4['query'],_0x48aefd[_0x2315('0x4d')]));if(_0x4ef3f4[_0x2315('0x4c')][_0x2315('0x3b')]){_0x2cda0c[_0x2315('0x56')]=_['merge'](_0x2cda0c[_0x2315('0x56')],{'$or':_['map'](_0x2cda0c[_0x2315('0x4e')],function(_0x155bfe){var _0x1a3cf7={};_0x1a3cf7[_0x155bfe]={'$like':'%'+_0x4ef3f4[_0x2315('0x4c')]['filter']+'%'};return _0x1a3cf7;})});}_0x2cda0c=_[_0x2315('0x57')]({},_0x2cda0c,_0x4ef3f4[_0x2315('0x5e')]);return _0x42f10d[_0x2315('0xd3')](_0x2cda0c);}})[_0x2315('0x1e')](function(_0x26ee3d){if(_0x26ee3d){_0x2f41d7=_0x26ee3d[_0x2315('0x50')];if(!_0x4ef3f4[_0x2315('0x4c')][_0x2315('0x51')](_0x2315('0x52'))){_0x2cda0c[_0x2315('0x53')]=qs[_0x2315('0x53')](_0x4ef3f4[_0x2315('0x4c')][_0x2315('0x53')]);_0x2cda0c[_0x2315('0x2d')]=qs[_0x2315('0x2d')](_0x4ef3f4[_0x2315('0x4c')][_0x2315('0x2d')]);}return _0x42f10d[_0x2315('0xd3')](_0x2cda0c);}})[_0x2315('0x1e')](function(_0x2c5f4b){if(_0x2c5f4b){return _0x2c5f4b?{'count':_0x2f41d7,'rows':_0x2c5f4b}:null;}})[_0x2315('0x1e')](respondWithResult(_0x28e1f9,null))[_0x2315('0x29')](handleError(_0x28e1f9,null));};exports[_0x2315('0xd5')]=function(_0xb1bec4,_0x395f87,_0x359071){var _0x2ac5d6={'raw':!![],'where':{}};var _0x522acc={};var _0x2643ca={'count':0x0,'rows':[]};return db['User'][_0x2315('0x98')]({'where':{'id':_0xb1bec4[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x395f87,null))[_0x2315('0x1e')](function(_0x537f91){if(_0x537f91){_0x522acc[_0x2315('0x48')]=_['keys'](db[_0x2315('0xd6')][_0x2315('0x63')]);_0x522acc[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0xb1bec4[_0x2315('0x4c')]);_0x522acc['filters']=_[_0x2315('0x65')](_0x522acc[_0x2315('0x48')],_0x522acc[_0x2315('0x4c')]);_0x2ac5d6[_0x2315('0x4e')]=_[_0x2315('0x65')](_0x522acc[_0x2315('0x48')],qs['fields'](_0xb1bec4['query'][_0x2315('0x4f')]));_0x2ac5d6[_0x2315('0x4e')]=_0x2ac5d6[_0x2315('0x4e')][_0x2315('0x50')]?_0x2ac5d6[_0x2315('0x4e')]:_0x522acc[_0x2315('0x48')];if(!_0xb1bec4[_0x2315('0x4c')][_0x2315('0x51')](_0x2315('0x52'))){_0x2ac5d6[_0x2315('0x53')]=qs[_0x2315('0x53')](_0xb1bec4['query'][_0x2315('0x53')]);_0x2ac5d6[_0x2315('0x2d')]=qs[_0x2315('0x2d')](_0xb1bec4['query'][_0x2315('0x2d')]);}_0x2ac5d6[_0x2315('0x54')]=qs[_0x2315('0x55')](_0xb1bec4[_0x2315('0x4c')][_0x2315('0x55')]);_0x2ac5d6[_0x2315('0x56')]=qs[_0x2315('0x4d')](_[_0x2315('0xc6')](_0xb1bec4[_0x2315('0x4c')],_0x522acc[_0x2315('0x4d')]));_0x2ac5d6[_0x2315('0x56')][_0x2315('0xce')]=_0x537f91['id'];if(_0xb1bec4[_0x2315('0x4c')][_0x2315('0x3b')]){_0x2ac5d6[_0x2315('0x56')]=_[_0x2315('0x57')](_0x2ac5d6[_0x2315('0x56')],{'$or':_[_0x2315('0x3c')](_0x2ac5d6['attributes'],function(_0x270d6f){var _0x370add={};_0x370add[_0x270d6f]={'$like':'%'+_0xb1bec4[_0x2315('0x4c')][_0x2315('0x3b')]+'%'};return _0x370add;})});}_0x2ac5d6=_[_0x2315('0x57')]({},_0x2ac5d6,_0xb1bec4[_0x2315('0x5e')]);return db[_0x2315('0xd6')][_0x2315('0x2c')]({'where':_0x2ac5d6[_0x2315('0x56')]})['then'](function(_0x3e6f92){_0x2643ca[_0x2315('0x2c')]=_0x3e6f92;if(_0xb1bec4[_0x2315('0x4c')][_0x2315('0x60')]){_0x2ac5d6[_0x2315('0x61')]=[{'all':!![]}];}return db[_0x2315('0xd6')][_0x2315('0xa9')](_0x2ac5d6);})[_0x2315('0x1e')](function(_0x527360){_0x2643ca[_0x2315('0x62')]=_0x527360;return _0x2643ca;});}})[_0x2315('0x1e')](respondWithFilteredResult(_0x395f87,_0x2ac5d6))[_0x2315('0x29')](handleError(_0x395f87,null));};exports[_0x2315('0xd7')]=function(_0x20f504,_0xaa1c02,_0x141d93){var _0xbd1c7e={};var _0x5c9713={};var _0x286378;var _0x9874ae;return db[_0x2315('0x5f')][_0x2315('0x98')]({'where':{'id':_0x20f504[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0xaa1c02,null))[_0x2315('0x1e')](function(_0x2488ed){if(_0x2488ed){_0x286378=_0x2488ed;_0x5c9713[_0x2315('0x48')]=_[_0x2315('0x4a')](db['SmsInteraction']['rawAttributes']);_0x5c9713[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x20f504[_0x2315('0x4c')]);_0x5c9713['filters']=_[_0x2315('0x65')](_0x5c9713['model'],_0x5c9713[_0x2315('0x4c')]);_0xbd1c7e[_0x2315('0x4e')]=_[_0x2315('0x65')](_0x5c9713[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x20f504[_0x2315('0x4c')][_0x2315('0x4f')]));_0xbd1c7e[_0x2315('0x4e')]=_0xbd1c7e[_0x2315('0x4e')]['length']?_0xbd1c7e['attributes']:_0x5c9713[_0x2315('0x48')];_0xbd1c7e[_0x2315('0x54')]=qs[_0x2315('0x55')](_0x20f504[_0x2315('0x4c')][_0x2315('0x55')]);_0xbd1c7e[_0x2315('0x56')]=qs[_0x2315('0x4d')](_[_0x2315('0xc6')](_0x20f504['query'],_0x5c9713[_0x2315('0x4d')]));if(_0x20f504[_0x2315('0x4c')][_0x2315('0x3b')]){_0xbd1c7e['where']=_[_0x2315('0x57')](_0xbd1c7e[_0x2315('0x56')],{'$or':_[_0x2315('0x3c')](_0xbd1c7e[_0x2315('0x4e')],function(_0xfabf29){var _0x86f690={};_0x86f690[_0xfabf29]={'$like':'%'+_0x20f504['query'][_0x2315('0x3b')]+'%'};return _0x86f690;})});}_0xbd1c7e=_['merge']({},_0xbd1c7e,_0x20f504[_0x2315('0x5e')]);return _0x286378[_0x2315('0xd7')](_0xbd1c7e);}})[_0x2315('0x1e')](function(_0x2b2e87){if(_0x2b2e87){_0x9874ae=_0x2b2e87[_0x2315('0x50')];if(!_0x20f504[_0x2315('0x4c')][_0x2315('0x51')]('nolimit')){_0xbd1c7e[_0x2315('0x53')]=qs[_0x2315('0x53')](_0x20f504['query']['limit']);_0xbd1c7e['offset']=qs[_0x2315('0x2d')](_0x20f504[_0x2315('0x4c')][_0x2315('0x2d')]);}return _0x286378['getSmsInteractions'](_0xbd1c7e);}})[_0x2315('0x1e')](function(_0x1f632a){if(_0x1f632a){return _0x1f632a?{'count':_0x9874ae,'rows':_0x1f632a}:null;}})['then'](respondWithResult(_0xaa1c02,null))[_0x2315('0x29')](handleError(_0xaa1c02,null));};exports[_0x2315('0xd8')]=function(_0x1c3f00,_0x564125,_0x994931){var _0x57f87b={};var _0x23f897={};var _0x1cb1c9;var _0x8e880;return db[_0x2315('0x5f')]['findOne']({'where':{'id':_0x1c3f00['params']['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x564125,null))[_0x2315('0x1e')](function(_0x4352a4){if(_0x4352a4){_0x1cb1c9=_0x4352a4;_0x23f897[_0x2315('0x48')]=_[_0x2315('0x4a')](db[_0x2315('0xd9')][_0x2315('0x63')]);_0x23f897[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x1c3f00['query']);_0x23f897['filters']=_[_0x2315('0x65')](_0x23f897[_0x2315('0x48')],_0x23f897[_0x2315('0x4c')]);_0x57f87b[_0x2315('0x4e')]=_[_0x2315('0x65')](_0x23f897[_0x2315('0x48')],qs['fields'](_0x1c3f00[_0x2315('0x4c')][_0x2315('0x4f')]));_0x57f87b[_0x2315('0x4e')]=_0x57f87b['attributes'][_0x2315('0x50')]?_0x57f87b[_0x2315('0x4e')]:_0x23f897[_0x2315('0x48')];_0x57f87b['order']=qs[_0x2315('0x55')](_0x1c3f00['query'][_0x2315('0x55')]);_0x57f87b['where']=qs[_0x2315('0x4d')](_[_0x2315('0xc6')](_0x1c3f00[_0x2315('0x4c')],_0x23f897['filters']));if(_0x1c3f00[_0x2315('0x4c')][_0x2315('0x3b')]){_0x57f87b['where']=_[_0x2315('0x57')](_0x57f87b['where'],{'$or':_[_0x2315('0x3c')](_0x57f87b[_0x2315('0x4e')],function(_0x3a6e20){var _0x1aaa09={};_0x1aaa09[_0x3a6e20]={'$like':'%'+_0x1c3f00[_0x2315('0x4c')]['filter']+'%'};return _0x1aaa09;})});}_0x57f87b=_[_0x2315('0x57')]({},_0x57f87b,_0x1c3f00[_0x2315('0x5e')]);return _0x1cb1c9[_0x2315('0xd8')](_0x57f87b);}})[_0x2315('0x1e')](function(_0x3bdf31){if(_0x3bdf31){_0x8e880=_0x3bdf31['length'];if(!_0x1c3f00[_0x2315('0x4c')][_0x2315('0x51')](_0x2315('0x52'))){_0x57f87b['limit']=qs[_0x2315('0x53')](_0x1c3f00['query'][_0x2315('0x53')]);_0x57f87b[_0x2315('0x2d')]=qs[_0x2315('0x2d')](_0x1c3f00[_0x2315('0x4c')][_0x2315('0x2d')]);}return _0x1cb1c9[_0x2315('0xd8')](_0x57f87b);}})[_0x2315('0x1e')](function(_0x5115e2){if(_0x5115e2){return _0x5115e2?{'count':_0x8e880,'rows':_0x5115e2}:null;}})['then'](respondWithResult(_0x564125,null))[_0x2315('0x29')](handleError(_0x564125,null));};exports[_0x2315('0xda')]=function(_0x1dca06,_0x3684f5,_0x113096){var _0x3b0d58;var _0x44865e;var _0x26b6aa;var _0x2f9a59=!_['isNil'](_0x1dca06[_0x2315('0x68')]['id'])?_0x1dca06['params']['id']:!_[_0x2315('0x74')](_0x1dca06[_0x2315('0x36')]['id'])?_0x1dca06[_0x2315('0x36')]['id']:null;return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x2f9a59,'role':_0x2315('0x38')},'attributes':['id',_0x2315('0x41'),'phone','mobile','role','internal','loginInPause']})['then'](handleEntityNotFound(_0x3684f5,null))['then'](function(_0x5d1818){if(_0x5d1818){_0x3b0d58=_0x5d1818;if(_0x1dca06[_0x2315('0x67')][_0x2315('0x9e')]){_0x26b6aa=util[_0x2315('0xab')](_0x2315('0xdb'),_0x3b0d58[_0x1dca06[_0x2315('0x67')]['interface']]);}else if(_0x1dca06[_0x2315('0x67')][_0x2315('0xdc')]){_0x26b6aa=util[_0x2315('0xab')](_0x2315('0xac'),_0x1dca06['body'][_0x2315('0xdc')]);}else{_0x26b6aa=util['format']('SIP/%s',_0x3b0d58[_0x2315('0x41')]);}socket['to'](util[_0x2315('0xab')](_0x2315('0xdd'),_0x3b0d58['name']))[_0x2315('0xa6')](_0x2315('0xde'),{'ip':_0x1dca06[_0x2315('0xdf')][_0x2315('0xe0')]||_0x1dca06[_0x2315('0xe1')][_0x2315('0xe2')]||_0x1dca06[_0x2315('0xe3')][_0x2315('0xe2')]||_0x1dca06[_0x2315('0xe1')][_0x2315('0xe3')][_0x2315('0xe2')]});return db[_0x2315('0xae')][_0x2315('0x43')]({'where':{'membername':_0x3b0d58['name']},'individualHooks':!![]});}})[_0x2315('0x1e')](function(_0x4b386c){if(_0x3b0d58){return _0x3b0d58[_0x2315('0xe4')]({'raw':!![]});}})['then'](function(_0x4e5597){var _0x2db3af=[];if(_0x4e5597){_0x44865e=_0x4e5597;if(_0x44865e[_0x2315('0x50')]){for(var _0x3846c8=0x0;_0x3846c8<_0x44865e[_0x2315('0x50')];_0x3846c8++){_0x2db3af[_0x2315('0xaa')]({'membername':_0x3b0d58[_0x2315('0x41')],'UserId':_0x3b0d58['id'],'queue_name':_0x44865e[_0x3846c8][_0x2315('0x41')],'VoiceQueueId':_0x44865e[_0x3846c8]['id'],'interface':_0x26b6aa,'paused':_0x3b0d58[_0x2315('0x9c')]||![],'penalty':_0x44865e[_0x3846c8]['UserVoiceQueue.penalty']||0x0});}return BPromise['each'](_0x2db3af,function(_0x43be2b){return db['UserVoiceQueueRt']['upsert'](_0x43be2b);});}}})['then'](function(){return db[_0x2315('0xe5')][_0x2315('0xa9')]({'where':{'membername':_0x3b0d58[_0x2315('0x41')],'exitAt':null}});})['then'](function(_0x323625){var _0x4c1504=[];_0x323625['forEach'](function(_0x37630f){_0x4c1504['push'](_0x37630f[_0x2315('0x33')]({'exitAt':moment()[_0x2315('0xab')](_0x2315('0xe6'))}));});return BPromise[_0x2315('0xe7')](_0x4c1504);})[_0x2315('0x1e')](function(){var _0x4f0899=[];var _0x2a0ee7=[];var _0x2abf37=utils['getChannels']();var _0x246764={'membername':_0x3b0d58['name'],'interface':_0x26b6aa,'enterAt':moment()[_0x2315('0xab')](_0x2315('0xe6')),'role':_0x3b0d58[_0x2315('0x3f')],'internal':_0x3b0d58[_0x2315('0x70')]};_0x2abf37[_0x2315('0xe8')](function(_0x7b03e9){_0x4f0899['push'](_[_0x2315('0x57')]({'channel':_0x7b03e9,'type':_0x2315('0xe9'),'data1':_0x1dca06[_0x2315('0x67')][_0x2315('0xea')],'data2':_0x26b6aa},_0x246764));if(_0x3b0d58['loginInPause']){_0x2a0ee7[_0x2315('0xaa')](_[_0x2315('0x57')]({'channel':_0x7b03e9,'type':'PAUSE','data1':'LOGININPAUSE'},_0x246764));}});return db[_0x2315('0xe5')][_0x2315('0x66')](_0x4f0899['concat'](_0x2a0ee7),{'individualHooks':!![]});})[_0x2315('0x1e')](function(){return _0x3b0d58[_0x2315('0x33')]({'online':!![],'lastLoginAt':moment()[_0x2315('0xab')]('YYYY-MM-DD\x20HH:mm:ss'),'voicePause':_0x3b0d58[_0x2315('0x9c')]||![],'mailPause':_0x3b0d58['loginInPause']||![],'chatPause':_0x3b0d58[_0x2315('0x9c')]||![],'faxPause':_0x3b0d58[_0x2315('0x9c')]||![],'smsPause':_0x3b0d58[_0x2315('0x9c')]||![],'openchannelPause':_0x3b0d58['loginInPause']||![],'pauseType':_0x3b0d58[_0x2315('0x9c')]?_0x2315('0xeb'):null,'interface':_0x26b6aa,'lastPauseAt':moment()['format'](_0x2315('0xe6'))});})['then'](function(_0x4791d1){if(_0x1dca06[_0x2315('0xec')]){return _0x113096();}else{return BPromise[_0x2315('0xed')](_0x4791d1)[_0x2315('0x1e')](respondWithResult(_0x3684f5,null));}})[_0x2315('0x29')](handleError(_0x3684f5,null));};exports[_0x2315('0xee')]=function(_0x3d8b3a,_0x1771e9,_0x45f7c4){var _0x3ad85c;return db['User'][_0x2315('0x40')]({'where':{'id':_0x3d8b3a[_0x2315('0x68')]['id'],'role':'agent'},'attributes':['id',_0x2315('0x41'),_0x2315('0x3f')]})['then'](handleEntityNotFound(_0x1771e9,null))[_0x2315('0x1e')](function(_0x426e60){if(_0x426e60){_0x3ad85c=_0x426e60;return db[_0x2315('0xae')][_0x2315('0x43')]({'where':{'membername':_0x3ad85c[_0x2315('0x41')]},'individualHooks':!![]});}})[_0x2315('0x1e')](function(){return db[_0x2315('0xe5')]['findAll']({'where':{'membername':_0x3ad85c[_0x2315('0x41')],'exitAt':null}});})[_0x2315('0x1e')](function(_0x2b6299){var _0x9dea22=[];_0x2b6299['forEach'](function(_0x2080fc){_0x9dea22[_0x2315('0xaa')](_0x2080fc[_0x2315('0x33')]({'exitAt':moment()[_0x2315('0xab')]('YYYY-MM-DD\x20HH:mm:ss')}));});return BPromise[_0x2315('0xe7')](_0x9dea22);})[_0x2315('0x1e')](function(){return _0x3ad85c[_0x2315('0x33')]({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![],'interface':null});})[_0x2315('0x1e')](respondWithResult(_0x1771e9,null))[_0x2315('0x29')](handleError(_0x1771e9,null));};exports[_0x2315('0xef')]=function(_0x5c8655,_0x16fb3b,_0x9c84d3){var _0x3bded1;return db[_0x2315('0xae')][_0x2315('0x33')]({'paused':0x1},{'where':{'UserId':_0x5c8655[_0x2315('0x68')]['id']},'individualHooks':!![]})['then'](function(){return db[_0x2315('0x5f')]['find']({'where':{'id':_0x5c8655['params']['id'],'role':'agent'},'attributes':['id','name',_0x2315('0x3f'),_0x2315('0x70'),_0x2315('0x9e')]});})['then'](handleEntityNotFound(_0x16fb3b,null))[_0x2315('0x1e')](function(_0x1edacb){if(_0x1edacb){_0x3bded1=_0x1edacb;return respondWithRpcPromise(_0x2315('0xf0'),'pause',{'id':_0x3bded1['id'],'name':_0x3bded1[_0x2315('0x41')],'pause':!![]});}})[_0x2315('0x1e')](function(){if(_0x3bded1){return db[_0x2315('0xe5')][_0x2315('0xa9')]({'where':{'membername':_0x3bded1['name'],'type':_0x2315('0xf1'),'exitAt':null}});}})['then'](function(_0x31e48a){if(_0x31e48a[_0x2315('0x50')]){var _0x1ebc45=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');for(var _0x43fc1d=0x0,_0x276ffc=_0x31e48a[_0x2315('0x50')];_0x43fc1d<_0x276ffc;_0x43fc1d++){_0x31e48a[_0x43fc1d][_0x2315('0xf2')]({'exitAt':_0x1ebc45});}}})[_0x2315('0x1e')](function(){var _0x16efa1=[];var _0xff5f27=utils['getChannels']();_0xff5f27['forEach'](function(_0x302d1a){_0x16efa1['push']({'channel':_0x302d1a,'membername':_0x3bded1[_0x2315('0x41')],'interface':_['isNil'](_0x3bded1['interface'])?util[_0x2315('0xab')](_0x2315('0xac'),_0x3bded1['name']):_0x3bded1[_0x2315('0x9e')],'type':_0x2315('0xf1'),'enterAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'data1':_0x5c8655[_0x2315('0x67')][_0x2315('0xf3')]||_0x2315('0xf4'),'role':_0x3bded1[_0x2315('0x3f')],'internal':_0x3bded1[_0x2315('0x70')]});});return db['MemberReport'][_0x2315('0x66')](_0x16efa1,{'individualHooks':!![]});})[_0x2315('0x1e')](function(){return _0x3bded1['update']({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x5c8655[_0x2315('0x67')]['type']||_0x2315('0xf4'),'lastPauseAt':moment()[_0x2315('0xab')](_0x2315('0xe6'))});})[_0x2315('0x1e')](respondWithResult(_0x16fb3b,null))[_0x2315('0x29')](handleError(_0x16fb3b,null));};exports['unpause']=function(_0x2586b4,_0x4b29f9,_0x293157){var _0x28efce;return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x2586b4[_0x2315('0x68')]['id']},'attributes':['id','name',_0x2315('0x3f'),_0x2315('0x9d'),_0x2315('0xf5'),_0x2315('0xf6'),_0x2315('0xf7'),_0x2315('0xf8'),_0x2315('0xf9'),_0x2315('0xfa'),'lastPauseAt']})[_0x2315('0x1e')](handleEntityNotFound(_0x4b29f9,null))[_0x2315('0x1e')](function(_0x57490a){if(_0x57490a){_0x28efce=_0x57490a;if(_0x2586b4[_0x2315('0x67')][_0x2315('0x9a')]&&!utils[_0x2315('0x9f')](_0x2586b4['body'][_0x2315('0x9a')])){throw new db[(_0x2315('0x91'))]['ValidationError'](_0x2315('0xc4'));}switch(_0x2586b4[_0x2315('0x67')][_0x2315('0x9a')]){case _0x2315('0xa7'):return respondWithRpcPromise('QueuePause',_0x2315('0xfb'),{'id':_0x28efce['id'],'name':_0x28efce[_0x2315('0x41')],'pause':![]})[_0x2315('0x1e')](function(){return db[_0x2315('0xae')][_0x2315('0x33')]({'paused':0x0},{'where':{'UserId':_0x28efce['id']},'individualHooks':!![]});})[_0x2315('0x1e')](function(){return db[_0x2315('0xe5')][_0x2315('0x40')]({'where':{'channel':_0x2586b4[_0x2315('0x67')][_0x2315('0x9a')],'membername':_0x28efce[_0x2315('0x41')],'type':_0x2315('0xf1'),'exitAt':null}});})[_0x2315('0x1e')](function(_0x1ae922){if(_0x1ae922){return _0x1ae922[_0x2315('0x33')]({'exitAt':moment()['format'](_0x2315('0xe6')),'data2':'manual'},{'individualHooks':!![]});}return null;})[_0x2315('0x1e')](function(){return _0x28efce[_0x2315('0x33')]({'voicePause':![]});});case _0x2315('0xfc'):case'chat':case'fax':case _0x2315('0xfd'):case _0x2315('0xfe'):return db['MemberReport'][_0x2315('0x40')]({'where':{'channel':_0x2586b4[_0x2315('0x67')][_0x2315('0x9a')],'membername':_0x28efce[_0x2315('0x41')],'type':_0x2315('0xf1'),'exitAt':null}})[_0x2315('0x1e')](function(_0x288ef8){if(_0x288ef8){return _0x288ef8[_0x2315('0x33')]({'exitAt':moment()['format'](_0x2315('0xe6')),'data2':'manual'},{'individualHooks':!![]});}return null;})['then'](function(){var _0x2dc9b7={};_[_0x2315('0x2e')](_0x2dc9b7,util[_0x2315('0xab')]('%s%s',_0x2586b4[_0x2315('0x67')][_0x2315('0x9a')],_0x2315('0xff')),![]);return _0x28efce['update'](_0x2dc9b7);});default:return respondWithRpcPromise('QueuePause',_0x2315('0xfb'),{'id':_0x28efce['id'],'name':_0x28efce['name'],'pause':![]})[_0x2315('0x1e')](function(){return db[_0x2315('0xae')][_0x2315('0x33')]({'paused':0x0},{'where':{'UserId':_0x28efce['id']}});})['then'](function(){return db['MemberReport']['findAll']({'where':{'membername':_0x28efce['name'],'type':_0x2315('0xf1'),'exitAt':null}});})['then'](function(_0x542b1d){var _0x33157f=[];_0x542b1d[_0x2315('0xe8')](function(_0x3c6420){_0x33157f[_0x2315('0xaa')](_0x3c6420[_0x2315('0x33')]({'exitAt':moment()[_0x2315('0xab')](_0x2315('0xe6')),'data2':_0x2315('0x100')}));});return BPromise[_0x2315('0xe7')](_0x33157f);})['then'](function(){return _0x28efce[_0x2315('0x33')]({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})[_0x2315('0x1e')](respondWithResult(_0x4b29f9,null))[_0x2315('0x29')](handleError(_0x4b29f9,null));};exports[_0x2315('0x101')]=function(_0x3f44c6,_0x489924,_0x36919f){var _0x2c02f8={};var _0x1eb8f0={};var _0x29b55e;var _0x5b69ba;return db[_0x2315('0x5f')][_0x2315('0x98')]({'where':{'id':_0x3f44c6[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x489924,null))[_0x2315('0x1e')](function(_0x2ba2f0){if(_0x2ba2f0){_0x29b55e=_0x2ba2f0;_0x1eb8f0[_0x2315('0x48')]=_[_0x2315('0x4a')](db[_0x2315('0x102')][_0x2315('0x63')]);_0x1eb8f0[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x3f44c6['query']);_0x1eb8f0[_0x2315('0x4d')]=_[_0x2315('0x65')](_0x1eb8f0[_0x2315('0x48')],_0x1eb8f0['query']);_0x2c02f8[_0x2315('0x4e')]=_['intersection'](_0x1eb8f0['model'],qs[_0x2315('0x4f')](_0x3f44c6[_0x2315('0x4c')][_0x2315('0x4f')]));_0x2c02f8[_0x2315('0x4e')]=_0x2c02f8[_0x2315('0x4e')][_0x2315('0x50')]?_0x2c02f8['attributes']:_0x1eb8f0['model'];_0x2c02f8[_0x2315('0x54')]=qs[_0x2315('0x55')](_0x3f44c6[_0x2315('0x4c')][_0x2315('0x55')]);_0x2c02f8['where']=qs[_0x2315('0x4d')](_[_0x2315('0xc6')](_0x3f44c6[_0x2315('0x4c')],_0x1eb8f0[_0x2315('0x4d')]));if(_0x3f44c6[_0x2315('0x4c')]['filter']){_0x2c02f8[_0x2315('0x56')]=_[_0x2315('0x57')](_0x2c02f8[_0x2315('0x56')],{'$or':_['map'](_0x2c02f8[_0x2315('0x4e')],function(_0x44e702){var _0x223ffb={};_0x223ffb[_0x44e702]={'$like':'%'+_0x3f44c6[_0x2315('0x4c')][_0x2315('0x3b')]+'%'};return _0x223ffb;})});}_0x2c02f8=_[_0x2315('0x57')]({},_0x2c02f8,_0x3f44c6[_0x2315('0x5e')]);return _0x29b55e['getTeams'](_0x2c02f8);}})[_0x2315('0x1e')](function(_0x4ad36a){if(_0x4ad36a){_0x5b69ba=_0x4ad36a[_0x2315('0x50')];if(!_0x3f44c6[_0x2315('0x4c')][_0x2315('0x51')](_0x2315('0x52'))){_0x2c02f8[_0x2315('0x53')]=qs[_0x2315('0x53')](_0x3f44c6[_0x2315('0x4c')][_0x2315('0x53')]);_0x2c02f8['offset']=qs[_0x2315('0x2d')](_0x3f44c6[_0x2315('0x4c')]['offset']);}return _0x29b55e[_0x2315('0x101')](_0x2c02f8);}})[_0x2315('0x1e')](function(_0x2747fa){if(_0x2747fa){return _0x2747fa?{'count':_0x5b69ba,'rows':_0x2747fa}:null;}})[_0x2315('0x1e')](respondWithResult(_0x489924,null))[_0x2315('0x29')](handleError(_0x489924,null));};exports[_0x2315('0x103')]=function(_0x506a7a,_0x6b1767,_0x3b0a37){return db['User'][_0x2315('0x40')]({'where':{'id':_0x506a7a[_0x2315('0x68')]['id']}})['then'](handleEntityNotFound(_0x6b1767,null))[_0x2315('0x1e')](function(_0x13a100){if(_0x13a100){return _0x13a100['addTeams'](_0x506a7a[_0x2315('0x67')][_0x2315('0xa3')],_['omit'](_0x506a7a[_0x2315('0x67')],[_0x2315('0xa3'),'id'])||{});}})[_0x2315('0x1e')](respondWithResult(_0x6b1767,null))[_0x2315('0x29')](handleError(_0x6b1767,null));};exports['removeTeams']=function(_0x211e12,_0x51161c,_0x76c9ab){return db['User'][_0x2315('0x40')]({'where':{'id':_0x211e12[_0x2315('0x68')]['id']}})['then'](handleEntityNotFound(_0x51161c,null))[_0x2315('0x1e')](function(_0x24f285){if(_0x24f285){return _0x24f285[_0x2315('0x104')](_0x211e12['query'][_0x2315('0xa3')]);}})[_0x2315('0x1e')](respondWithStatusCode(_0x51161c,null))[_0x2315('0x29')](handleError(_0x51161c,null));};exports[_0x2315('0x105')]=function(_0x24aadc,_0x37c4a3,_0x491872){var _0x2f50f2={};var _0x47ffca={};var _0x13d394;var _0x287210;return db['User'][_0x2315('0x98')]({'where':{'id':_0x24aadc['params']['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x37c4a3,null))[_0x2315('0x1e')](function(_0xc626a8){if(_0xc626a8){_0x13d394=_0xc626a8;_0x47ffca['model']=_[_0x2315('0x4a')](db[_0x2315('0xbd')][_0x2315('0x63')]);_0x47ffca[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x24aadc[_0x2315('0x4c')]);_0x47ffca[_0x2315('0x4d')]=_['intersection'](_0x47ffca[_0x2315('0x48')],_0x47ffca[_0x2315('0x4c')]);_0x2f50f2[_0x2315('0x4e')]=_[_0x2315('0x65')](_0x47ffca[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x24aadc[_0x2315('0x4c')]['fields']));_0x2f50f2['attributes']=_0x2f50f2[_0x2315('0x4e')][_0x2315('0x50')]?_0x2f50f2['attributes']:_0x47ffca[_0x2315('0x48')];_0x2f50f2[_0x2315('0x54')]=qs['sort'](_0x24aadc[_0x2315('0x4c')][_0x2315('0x55')]);_0x2f50f2['where']=qs[_0x2315('0x4d')](_['pick'](_0x24aadc[_0x2315('0x4c')],_0x47ffca[_0x2315('0x4d')]));if(_0x24aadc['query'][_0x2315('0x3b')]){_0x2f50f2[_0x2315('0x56')]=_['merge'](_0x2f50f2['where'],{'$or':_[_0x2315('0x3c')](_0x2f50f2[_0x2315('0x4e')],function(_0x33cbc4){var _0x313c9a={};_0x313c9a[_0x33cbc4]={'$like':'%'+_0x24aadc[_0x2315('0x4c')][_0x2315('0x3b')]+'%'};return _0x313c9a;})});}_0x2f50f2=_[_0x2315('0x57')]({},_0x2f50f2,_0x24aadc['options']);return _0x13d394[_0x2315('0x105')](_0x2f50f2);}})[_0x2315('0x1e')](function(_0x222a3f){if(_0x222a3f){_0x287210=_0x222a3f[_0x2315('0x50')];if(!_0x24aadc[_0x2315('0x4c')]['hasOwnProperty'](_0x2315('0x52'))){_0x2f50f2[_0x2315('0x53')]=qs[_0x2315('0x53')](_0x24aadc[_0x2315('0x4c')][_0x2315('0x53')]);_0x2f50f2[_0x2315('0x2d')]=qs[_0x2315('0x2d')](_0x24aadc[_0x2315('0x4c')]['offset']);}return _0x13d394['getLists'](_0x2f50f2);}})[_0x2315('0x1e')](function(_0x1c1d2d){if(_0x1c1d2d){return _0x1c1d2d?{'count':_0x287210,'rows':_0x1c1d2d}:null;}})[_0x2315('0x1e')](respondWithResult(_0x37c4a3,null))[_0x2315('0x29')](handleError(_0x37c4a3,null));};exports[_0x2315('0x106')]=function(_0x1365a4,_0x217e92,_0x5b8c30){var _0x90ce8f={};var _0x5095e4={};var _0x1b66bf;var _0x3486a8;return db[_0x2315('0x5f')][_0x2315('0x98')]({'where':{'id':_0x1365a4['params']['id']}})['then'](handleEntityNotFound(_0x217e92,null))[_0x2315('0x1e')](function(_0x1aca78){if(_0x1aca78){_0x1b66bf=_0x1aca78;_0x5095e4[_0x2315('0x48')]=_['keys'](db[_0x2315('0x5f')]['rawAttributes']);_0x5095e4[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x1365a4[_0x2315('0x4c')]);_0x5095e4['filters']=_[_0x2315('0x65')](_0x5095e4['model'],_0x5095e4['query']);_0x90ce8f[_0x2315('0x4e')]=_[_0x2315('0x65')](_0x5095e4[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x1365a4[_0x2315('0x4c')][_0x2315('0x4f')]));_0x90ce8f[_0x2315('0x4e')]=_0x90ce8f[_0x2315('0x4e')][_0x2315('0x50')]?_0x90ce8f[_0x2315('0x4e')]:_0x5095e4[_0x2315('0x48')];_0x90ce8f[_0x2315('0x54')]=qs[_0x2315('0x55')](_0x1365a4[_0x2315('0x4c')][_0x2315('0x55')]);_0x90ce8f[_0x2315('0x56')]=qs[_0x2315('0x4d')](_[_0x2315('0xc6')](_0x1365a4[_0x2315('0x4c')],_0x5095e4[_0x2315('0x4d')]));if(_0x1365a4[_0x2315('0x4c')][_0x2315('0x3b')]){_0x90ce8f[_0x2315('0x56')]=_['merge'](_0x90ce8f['where'],{'$or':_[_0x2315('0x3c')](_0x90ce8f[_0x2315('0x4e')],function(_0xdfe0f3){var _0x55d048={};_0x55d048[_0xdfe0f3]={'$like':'%'+_0x1365a4[_0x2315('0x4c')][_0x2315('0x3b')]+'%'};return _0x55d048;})});}_0x90ce8f[_0x2315('0x48')]=db[_0x2315('0x5f')];_0x90ce8f['as']='Agents';_0x90ce8f=_[_0x2315('0x57')]({},_0x90ce8f,_0x1365a4['options']);return _0x1b66bf[_0x2315('0xe4')]({'include':[_0x90ce8f]});}})['then'](function(_0x210ec3){if(_0x210ec3){var _0x10578a={},_0x23da22=[],_0x140065=0x0;for(var _0x14ba8b=0x0;_0x14ba8b<_0x210ec3[_0x2315('0x50')];_0x14ba8b+=0x1){for(var _0x495fd1=0x0,_0x15c135;_0x495fd1<_0x210ec3[_0x14ba8b][_0x2315('0x37')]['length'];_0x495fd1+=0x1){_0x15c135=_0x210ec3[_0x14ba8b]['Agents'][_0x495fd1]['get']({'plain':!![]});_0x10578a[_0x15c135['id']]=_0x15c135;}}_0x10578a=_['values'](_0x10578a);for(var _0x5c4d5d=qs[_0x2315('0x2d')](_0x1365a4[_0x2315('0x4c')]['offset']);_0x5c4d5d<_0x10578a[_0x2315('0x50')]&&_0x23da22[_0x2315('0x50')]<qs[_0x2315('0x53')](_0x1365a4[_0x2315('0x4c')][_0x2315('0x53')]);_0x5c4d5d+=0x1){if(_0x10578a[_0x5c4d5d]){_0x23da22['push'](_0x10578a[_0x5c4d5d]);}}return{'count':_0x10578a[_0x2315('0x50')],'rows':_0x23da22};}})[_0x2315('0x1e')](respondWithResult(_0x217e92,null))[_0x2315('0x29')](handleError(_0x217e92,null));};exports[_0x2315('0x43')]=function(_0x3a6735,_0x219719){if(_0x3a6735[_0x2315('0x36')]['id']==_0x3a6735[_0x2315('0x68')]['id']){return _0x219719[_0x2315('0x2b')](0x1f4)[_0x2315('0x46')]({'message':_0x2315('0x107')});}return db['User'][_0x2315('0x40')]({'where':{'id':_0x3a6735[_0x2315('0x68')]['id']}})['then'](handleEntityNotFound(_0x219719,null))[_0x2315('0x1e')](removeEntity(_0x219719,null))['catch'](handleError(_0x219719,null));};exports[_0x2315('0x108')]=function(_0x3891f0,_0x40d2d2,_0x5a4f1a){return db[_0x2315('0x5f')]['find']({'where':{'id':_0x3891f0[_0x2315('0x68')]['id']}})['then'](handleEntityNotFound(_0x40d2d2,null))['then'](function(_0x1586c8){if(_0x1586c8){return _0x1586c8[_0x2315('0x108')](_0x3891f0[_0x2315('0x67')][_0x2315('0xa3')],_['omit'](_0x3891f0['body'],[_0x2315('0xa3'),'id'])||{})[_0x2315('0xa5')](function(){for(var _0x57d855=0x0;_0x57d855<_0x3891f0[_0x2315('0x67')][_0x2315('0xa3')][_0x2315('0x50')];_0x57d855+=0x1){socket['emit'](_0x2315('0x109'),{'ChatInteractionId':Number(_0x3891f0[_0x2315('0x67')][_0x2315('0xa3')][_0x57d855]),'UserId':Number(_0x3891f0[_0x2315('0x68')]['id'])});}return _0x3891f0[_0x2315('0x67')][_0x2315('0xa3')];});}})['then'](respondWithResult(_0x40d2d2,null))[_0x2315('0x29')](handleError(_0x40d2d2,null));};exports[_0x2315('0x10a')]=function(_0x39db6a,_0x123283,_0x189d4f){return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x39db6a[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x123283,null))['then'](function(_0x263b47){if(_0x263b47){return _0x263b47['removeChatInteractions'](_0x39db6a[_0x2315('0x4c')]['ids'])[_0x2315('0x1e')](function(){if(_[_0x2315('0x10b')](_0x39db6a[_0x2315('0x4c')][_0x2315('0xa3')])){for(var _0x51b9b0=0x0;_0x51b9b0<_0x39db6a[_0x2315('0x4c')]['ids']['length'];_0x51b9b0+=0x1){socket[_0x2315('0xa6')](_0x2315('0x10c'),{'ChatInteractionId':Number(_0x39db6a[_0x2315('0x4c')][_0x2315('0xa3')][_0x51b9b0]),'UserId':Number(_0x39db6a[_0x2315('0x68')]['id'])});}}else{socket[_0x2315('0xa6')]('user_has_chat_interactions:remove',{'ChatInteractionId':Number(_0x39db6a[_0x2315('0x4c')][_0x2315('0xa3')]),'UserId':Number(_0x39db6a[_0x2315('0x68')]['id'])});}});}})[_0x2315('0x1e')](respondWithStatusCode(_0x123283,null))[_0x2315('0x29')](handleError(_0x123283,null));};exports[_0x2315('0x10d')]=function(_0x25c21a,_0x40f47d,_0x1cd878){return db[_0x2315('0x5f')]['find']({'where':{'id':_0x25c21a[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x40f47d,null))[_0x2315('0x1e')](function(_0x5a07e7){if(_0x5a07e7){return _0x5a07e7[_0x2315('0x10d')](_0x25c21a['body'][_0x2315('0xa3')],_[_0x2315('0x10e')](_0x25c21a[_0x2315('0x67')],[_0x2315('0xa3'),'id'])||{})[_0x2315('0xa5')](function(){for(var _0x4f8e6e=0x0;_0x4f8e6e<_0x25c21a[_0x2315('0x67')][_0x2315('0xa3')][_0x2315('0x50')];_0x4f8e6e+=0x1){socket[_0x2315('0xa6')](_0x2315('0x10f'),{'MailInteractionId':Number(_0x25c21a['body'][_0x2315('0xa3')][_0x4f8e6e]),'UserId':Number(_0x25c21a[_0x2315('0x68')]['id'])});}return _0x25c21a[_0x2315('0x67')]['ids'];});}})['then'](respondWithResult(_0x40f47d,null))[_0x2315('0x29')](handleError(_0x40f47d,null));};exports[_0x2315('0x110')]=function(_0x2b4464,_0xcbe9b3,_0x3e3fd9){return db[_0x2315('0x5f')]['find']({'where':{'id':_0x2b4464[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0xcbe9b3,null))[_0x2315('0x1e')](function(_0x590be8){if(_0x590be8){return _0x590be8[_0x2315('0x110')](_0x2b4464[_0x2315('0x4c')][_0x2315('0xa3')])[_0x2315('0x1e')](function(){if(_[_0x2315('0x10b')](_0x2b4464[_0x2315('0x4c')][_0x2315('0xa3')])){for(var _0x2e749a=0x0;_0x2e749a<_0x2b4464['query'][_0x2315('0xa3')][_0x2315('0x50')];_0x2e749a+=0x1){socket['emit'](_0x2315('0x111'),{'MailInteractionId':Number(_0x2b4464[_0x2315('0x4c')][_0x2315('0xa3')][_0x2e749a]),'UserId':Number(_0x2b4464[_0x2315('0x68')]['id'])});}}else{socket[_0x2315('0xa6')](_0x2315('0x111'),{'MailInteractionId':Number(_0x2b4464[_0x2315('0x4c')][_0x2315('0xa3')]),'UserId':Number(_0x2b4464[_0x2315('0x68')]['id'])});}});}})['then'](respondWithStatusCode(_0xcbe9b3,null))[_0x2315('0x29')](handleError(_0xcbe9b3,null));};exports[_0x2315('0x112')]=function(_0xf3f312,_0x2d0bbb,_0x31e706){return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0xf3f312[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x2d0bbb,null))['then'](function(_0x424931){if(_0x424931){return _0x424931[_0x2315('0x112')](_0xf3f312[_0x2315('0x67')][_0x2315('0xa3')],_[_0x2315('0x10e')](_0xf3f312[_0x2315('0x67')],['ids','id'])||{})[_0x2315('0xa5')](function(){for(var _0x4267bc=0x0;_0x4267bc<_0xf3f312[_0x2315('0x67')]['ids'][_0x2315('0x50')];_0x4267bc+=0x1){socket[_0x2315('0xa6')]('user_has_fax_interactions:save',{'FaxInteractionId':Number(_0xf3f312[_0x2315('0x67')][_0x2315('0xa3')][_0x4267bc]),'UserId':Number(_0xf3f312[_0x2315('0x68')]['id'])});}return _0xf3f312[_0x2315('0x67')][_0x2315('0xa3')];});}})[_0x2315('0x1e')](respondWithResult(_0x2d0bbb,null))['catch'](handleError(_0x2d0bbb,null));};exports[_0x2315('0x113')]=function(_0x194ea8,_0x469bd0,_0x5ebedf){return db[_0x2315('0x5f')]['find']({'where':{'id':_0x194ea8[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x469bd0,null))[_0x2315('0x1e')](function(_0xd8d8c5){if(_0xd8d8c5){return _0xd8d8c5[_0x2315('0x113')](_0x194ea8[_0x2315('0x4c')][_0x2315('0xa3')])[_0x2315('0x1e')](function(){if(_['isArray'](_0x194ea8[_0x2315('0x4c')][_0x2315('0xa3')])){for(var _0x289136=0x0;_0x289136<_0x194ea8[_0x2315('0x4c')][_0x2315('0xa3')][_0x2315('0x50')];_0x289136+=0x1){socket[_0x2315('0xa6')](_0x2315('0x114'),{'FaxInteractionId':Number(_0x194ea8[_0x2315('0x4c')]['ids'][_0x289136]),'UserId':Number(_0x194ea8[_0x2315('0x68')]['id'])});}}else{socket['emit'](_0x2315('0x114'),{'FaxInteractionId':Number(_0x194ea8[_0x2315('0x4c')][_0x2315('0xa3')]),'UserId':Number(_0x194ea8[_0x2315('0x68')]['id'])});}});}})['then'](respondWithStatusCode(_0x469bd0,null))[_0x2315('0x29')](handleError(_0x469bd0,null));};exports[_0x2315('0x115')]=function(_0x1ff3bd,_0x4406a5,_0x169eb5){return db['User'][_0x2315('0x40')]({'where':{'id':_0x1ff3bd['params']['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x4406a5,null))[_0x2315('0x1e')](function(_0x1e682c){if(_0x1e682c){return _0x1e682c[_0x2315('0x115')](_0x1ff3bd['body'][_0x2315('0xa3')],_[_0x2315('0x10e')](_0x1ff3bd[_0x2315('0x67')],[_0x2315('0xa3'),'id'])||{})['spread'](function(){for(var _0x88760e=0x0;_0x88760e<_0x1ff3bd[_0x2315('0x67')][_0x2315('0xa3')]['length'];_0x88760e+=0x1){socket[_0x2315('0xa6')](_0x2315('0x116'),{'SmsInteractionId':Number(_0x1ff3bd[_0x2315('0x67')][_0x2315('0xa3')][_0x88760e]),'UserId':Number(_0x1ff3bd[_0x2315('0x68')]['id'])});}return _0x1ff3bd['body'][_0x2315('0xa3')];});}})[_0x2315('0x1e')](respondWithResult(_0x4406a5,null))[_0x2315('0x29')](handleError(_0x4406a5,null));};exports[_0x2315('0x117')]=function(_0x9faa08,_0x2f99af,_0x4d6a4){return db['User'][_0x2315('0x40')]({'where':{'id':_0x9faa08[_0x2315('0x68')]['id']}})['then'](handleEntityNotFound(_0x2f99af,null))[_0x2315('0x1e')](function(_0x3ae6da){if(_0x3ae6da){return _0x3ae6da[_0x2315('0x117')](_0x9faa08[_0x2315('0x4c')]['ids'])[_0x2315('0x1e')](function(){if(_[_0x2315('0x10b')](_0x9faa08['query'][_0x2315('0xa3')])){for(var _0x22bc38=0x0;_0x22bc38<_0x9faa08[_0x2315('0x4c')][_0x2315('0xa3')][_0x2315('0x50')];_0x22bc38+=0x1){socket[_0x2315('0xa6')](_0x2315('0x118'),{'SmsInteractionId':Number(_0x9faa08[_0x2315('0x4c')][_0x2315('0xa3')][_0x22bc38]),'UserId':Number(_0x9faa08[_0x2315('0x68')]['id'])});}}else{socket[_0x2315('0xa6')](_0x2315('0x118'),{'SmsInteractionId':Number(_0x9faa08[_0x2315('0x4c')][_0x2315('0xa3')]),'UserId':Number(_0x9faa08[_0x2315('0x68')]['id'])});}});}})[_0x2315('0x1e')](respondWithStatusCode(_0x2f99af,null))[_0x2315('0x29')](handleError(_0x2f99af,null));};exports[_0x2315('0x119')]=function(_0x5d26f2,_0x23f514,_0x35e249){return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x5d26f2[_0x2315('0x68')]['id']}})['then'](handleEntityNotFound(_0x23f514,null))['then'](function(_0x5dbec5){if(_0x5dbec5){return _0x5dbec5[_0x2315('0x119')](_0x5d26f2[_0x2315('0x67')][_0x2315('0xa3')],_[_0x2315('0x10e')](_0x5d26f2[_0x2315('0x67')],['ids','id'])||{})['spread'](function(){for(var _0x4cbd0b=0x0;_0x4cbd0b<_0x5d26f2['body'][_0x2315('0xa3')]['length'];_0x4cbd0b+=0x1){socket['emit']('user_has_openchannel_interactions:save',{'OpenchannelInteractionId':Number(_0x5d26f2[_0x2315('0x67')][_0x2315('0xa3')][_0x4cbd0b]),'UserId':Number(_0x5d26f2[_0x2315('0x68')]['id'])});}return _0x5d26f2[_0x2315('0x67')][_0x2315('0xa3')];});}})[_0x2315('0x1e')](respondWithResult(_0x23f514,null))[_0x2315('0x29')](handleError(_0x23f514,null));};exports[_0x2315('0x11a')]=function(_0x339c0e,_0x41d0ee,_0x270d43){return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x339c0e['params']['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x41d0ee,null))[_0x2315('0x1e')](function(_0x48a39d){if(_0x48a39d){return _0x48a39d['removeOpenchannelInteractions'](_0x339c0e[_0x2315('0x4c')][_0x2315('0xa3')])[_0x2315('0x1e')](function(){if(_['isArray'](_0x339c0e['query'][_0x2315('0xa3')])){for(var _0x465fa9=0x0;_0x465fa9<_0x339c0e[_0x2315('0x4c')][_0x2315('0xa3')][_0x2315('0x50')];_0x465fa9+=0x1){socket[_0x2315('0xa6')](_0x2315('0x11b'),{'OpenchannelInteractionId':Number(_0x339c0e['query']['ids'][_0x465fa9]),'UserId':Number(_0x339c0e[_0x2315('0x68')]['id'])});}}else{socket[_0x2315('0xa6')](_0x2315('0x11b'),{'OpenchannelInteractionId':Number(_0x339c0e[_0x2315('0x4c')][_0x2315('0xa3')]),'UserId':Number(_0x339c0e['params']['id'])});}});}})[_0x2315('0x1e')](respondWithStatusCode(_0x41d0ee,null))[_0x2315('0x29')](handleError(_0x41d0ee,null));};exports['getVoicePrefixes']=function(_0xc1c9ea,_0x360605,_0x1e5e84){var _0x5aa38b={};var _0x19b35f={};var _0x13a213;var _0x17bf60;return db[_0x2315('0x5f')][_0x2315('0x98')]({'where':{'id':_0xc1c9ea[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x360605,null))[_0x2315('0x1e')](function(_0x2d5690){if(_0x2d5690){_0x13a213=_0x2d5690;_0x19b35f[_0x2315('0x48')]=_[_0x2315('0x4a')](db[_0x2315('0x11c')][_0x2315('0x63')]);_0x19b35f[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0xc1c9ea[_0x2315('0x4c')]);_0x19b35f[_0x2315('0x4d')]=_['intersection'](_0x19b35f[_0x2315('0x48')],_0x19b35f['query']);_0x5aa38b[_0x2315('0x4e')]=_['intersection'](_0x19b35f[_0x2315('0x48')],qs[_0x2315('0x4f')](_0xc1c9ea['query'][_0x2315('0x4f')]));_0x5aa38b[_0x2315('0x4e')]=_0x5aa38b[_0x2315('0x4e')]['length']?_0x5aa38b[_0x2315('0x4e')]:_0x19b35f[_0x2315('0x48')];_0x5aa38b[_0x2315('0x54')]=qs['sort'](_0xc1c9ea[_0x2315('0x4c')][_0x2315('0x55')]);_0x5aa38b[_0x2315('0x56')]=qs[_0x2315('0x4d')](_[_0x2315('0xc6')](_0xc1c9ea['query'],_0x19b35f[_0x2315('0x4d')]));if(_0xc1c9ea[_0x2315('0x4c')][_0x2315('0x3b')]){_0x5aa38b['where']=_[_0x2315('0x57')](_0x5aa38b['where'],{'$or':_[_0x2315('0x3c')](_0x5aa38b[_0x2315('0x4e')],function(_0x1d4580){var _0xd08594={};_0xd08594[_0x1d4580]={'$like':'%'+_0xc1c9ea[_0x2315('0x4c')][_0x2315('0x3b')]+'%'};return _0xd08594;})});}_0x5aa38b=_[_0x2315('0x57')]({},_0x5aa38b,_0xc1c9ea[_0x2315('0x5e')]);return _0x13a213[_0x2315('0x11d')](_0x5aa38b);}})[_0x2315('0x1e')](function(_0x411782){if(_0x411782){_0x17bf60=_0x411782[_0x2315('0x50')];if(!_0xc1c9ea[_0x2315('0x4c')][_0x2315('0x51')](_0x2315('0x52'))){_0x5aa38b[_0x2315('0x53')]=qs['limit'](_0xc1c9ea['query'][_0x2315('0x53')]);_0x5aa38b['offset']=qs[_0x2315('0x2d')](_0xc1c9ea[_0x2315('0x4c')]['offset']);}return _0x13a213['getVoicePrefixes'](_0x5aa38b);}})['then'](function(_0x3f6f11){if(_0x3f6f11){return _0x3f6f11?{'count':_0x17bf60,'rows':_0x3f6f11}:null;}})[_0x2315('0x1e')](respondWithResult(_0x360605,null))[_0x2315('0x29')](handleError(_0x360605,null));};exports[_0x2315('0x11e')]=function(_0x1c060d,_0x2c6014,_0x124e9f){var _0xad04e1={};var _0x3c49c8={};var _0x331c4f;var _0x3ddac8;return db['User']['findOne']({'where':{'id':_0x1c060d[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x2c6014,null))[_0x2315('0x1e')](function(_0x3fbfce){if(_0x3fbfce){_0x331c4f=_0x3fbfce;_0x3c49c8[_0x2315('0x48')]=_[_0x2315('0x4a')](db[_0x2315('0x11f')][_0x2315('0x63')]);_0x3c49c8[_0x2315('0x4c')]=_['keys'](_0x1c060d[_0x2315('0x4c')]);_0x3c49c8[_0x2315('0x4d')]=_[_0x2315('0x65')](_0x3c49c8['model'],_0x3c49c8['query']);_0xad04e1['attributes']=_[_0x2315('0x65')](_0x3c49c8[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x1c060d['query'][_0x2315('0x4f')]));_0xad04e1[_0x2315('0x4e')]=_0xad04e1['attributes'][_0x2315('0x50')]?_0xad04e1[_0x2315('0x4e')]:_0x3c49c8[_0x2315('0x48')];_0xad04e1[_0x2315('0x54')]=qs['sort'](_0x1c060d[_0x2315('0x4c')][_0x2315('0x55')]);_0xad04e1[_0x2315('0x56')]=qs[_0x2315('0x4d')](_['pick'](_0x1c060d['query'],_0x3c49c8['filters']));if(_0x1c060d[_0x2315('0x4c')][_0x2315('0x3b')]){_0xad04e1[_0x2315('0x56')]=_[_0x2315('0x57')](_0xad04e1[_0x2315('0x56')],{'$or':_[_0x2315('0x3c')](_0xad04e1[_0x2315('0x4e')],function(_0x3bd579){var _0x3a8c63={};_0x3a8c63[_0x3bd579]={'$like':'%'+_0x1c060d[_0x2315('0x4c')]['filter']+'%'};return _0x3a8c63;})});}_0xad04e1=_[_0x2315('0x57')]({},_0xad04e1,_0x1c060d[_0x2315('0x5e')]);return _0x331c4f[_0x2315('0x11e')](_0xad04e1);}})[_0x2315('0x1e')](function(_0x438d53){if(_0x438d53){_0x3ddac8=_0x438d53['length'];if(!_0x1c060d[_0x2315('0x4c')][_0x2315('0x51')]('nolimit')){_0xad04e1[_0x2315('0x53')]=qs[_0x2315('0x53')](_0x1c060d[_0x2315('0x4c')][_0x2315('0x53')]);_0xad04e1[_0x2315('0x2d')]=qs[_0x2315('0x2d')](_0x1c060d['query'][_0x2315('0x2d')]);}return _0x331c4f[_0x2315('0x11e')](_0xad04e1);}})[_0x2315('0x1e')](function(_0x334a71){if(_0x334a71){return _0x334a71?{'count':_0x3ddac8,'rows':_0x334a71}:null;}})[_0x2315('0x1e')](respondWithResult(_0x2c6014,null))['catch'](handleError(_0x2c6014,null));};exports[_0x2315('0x120')]=function(_0x52a3c2,_0x565f8e,_0x4a7453){return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x52a3c2[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x565f8e,null))['then'](function(_0x371feb){if(_0x371feb){return _0x371feb[_0x2315('0x120')](_0x52a3c2[_0x2315('0x67')][_0x2315('0xa3')],_['omit'](_0x52a3c2[_0x2315('0x67')],[_0x2315('0xa3'),'id'])||{});}})['then'](respondWithResult(_0x565f8e,null))[_0x2315('0x29')](handleError(_0x565f8e,null));};exports[_0x2315('0x121')]=function(_0x2f5d8e,_0x166686,_0x851a0f){return db['User']['find']({'where':{'id':_0x2f5d8e[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x166686,null))['then'](function(_0x5cf333){if(_0x5cf333){return _0x5cf333[_0x2315('0x121')](_0x2f5d8e[_0x2315('0x4c')][_0x2315('0xa3')]);}})[_0x2315('0x1e')](respondWithStatusCode(_0x166686,null))[_0x2315('0x29')](handleError(_0x166686,null));};exports[_0x2315('0x122')]=function(_0x56df98,_0x15413b,_0x2712cf){var _0x4e0f72={};var _0x17247={};var _0x4c1ea0;var _0x192cdb;return db['User'][_0x2315('0x98')]({'where':{'id':_0x56df98[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x15413b,null))[_0x2315('0x1e')](function(_0x4cc289){if(_0x4cc289){_0x4c1ea0=_0x4cc289;_0x17247[_0x2315('0x48')]=_[_0x2315('0x4a')](db[_0x2315('0x123')]['rawAttributes']);_0x17247[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x56df98[_0x2315('0x4c')]);_0x17247[_0x2315('0x4d')]=_['intersection'](_0x17247[_0x2315('0x48')],_0x17247['query']);_0x4e0f72[_0x2315('0x4e')]=_['intersection'](_0x17247['model'],qs[_0x2315('0x4f')](_0x56df98[_0x2315('0x4c')][_0x2315('0x4f')]));_0x4e0f72[_0x2315('0x4e')]=_0x4e0f72['attributes'][_0x2315('0x50')]?_0x4e0f72[_0x2315('0x4e')]:_0x17247['model'];_0x4e0f72['order']=qs[_0x2315('0x55')](_0x56df98[_0x2315('0x4c')]['sort']);_0x4e0f72['where']=qs['filters'](_[_0x2315('0xc6')](_0x56df98['query'],_0x17247[_0x2315('0x4d')]));if(_0x56df98[_0x2315('0x4c')][_0x2315('0x3b')]){_0x4e0f72['where']=_['merge'](_0x4e0f72[_0x2315('0x56')],{'$or':_[_0x2315('0x3c')](_0x4e0f72[_0x2315('0x4e')],function(_0x127274){var _0xcff6b3={};_0xcff6b3[_0x127274]={'$like':'%'+_0x56df98['query'][_0x2315('0x3b')]+'%'};return _0xcff6b3;})});}_0x4e0f72=_[_0x2315('0x57')]({},_0x4e0f72,_0x56df98[_0x2315('0x5e')]);return _0x4c1ea0[_0x2315('0x122')](_0x4e0f72);}})['then'](function(_0x15e1ce){if(_0x15e1ce){_0x192cdb=_0x15e1ce[_0x2315('0x50')];if(!_0x56df98[_0x2315('0x4c')][_0x2315('0x51')](_0x2315('0x52'))){_0x4e0f72[_0x2315('0x53')]=qs[_0x2315('0x53')](_0x56df98[_0x2315('0x4c')]['limit']);_0x4e0f72[_0x2315('0x2d')]=qs[_0x2315('0x2d')](_0x56df98[_0x2315('0x4c')][_0x2315('0x2d')]);}return _0x4c1ea0[_0x2315('0x122')](_0x4e0f72);}})[_0x2315('0x1e')](function(_0x1a05db){if(_0x1a05db){return _0x1a05db?{'count':_0x192cdb,'rows':_0x1a05db}:null;}})[_0x2315('0x1e')](respondWithResult(_0x15413b,null))[_0x2315('0x29')](handleError(_0x15413b,null));};exports[_0x2315('0x124')]=function(_0x1737a6,_0x32676d,_0x322d66){return db[_0x2315('0x5f')]['find']({'where':{'id':_0x1737a6[_0x2315('0x68')]['id']}})['then'](handleEntityNotFound(_0x32676d,null))['then'](function(_0x335eb2){if(_0x335eb2){return _0x335eb2[_0x2315('0x124')](_0x1737a6[_0x2315('0x67')][_0x2315('0xa3')],_[_0x2315('0x10e')](_0x1737a6['body'],['ids','id'])||{});}})[_0x2315('0x1e')](respondWithResult(_0x32676d,null))['catch'](handleError(_0x32676d,null));};exports[_0x2315('0x125')]=function(_0x12f719,_0xcf0f2d,_0x4ff750){return db[_0x2315('0x5f')]['find']({'where':{'id':_0x12f719[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0xcf0f2d,null))[_0x2315('0x1e')](function(_0x5f2eee){if(_0x5f2eee){return _0x5f2eee[_0x2315('0x125')](_0x12f719['query']['ids']);}})[_0x2315('0x1e')](respondWithStatusCode(_0xcf0f2d,null))[_0x2315('0x29')](handleError(_0xcf0f2d,null));};exports[_0x2315('0x126')]=function(_0x3cb00c,_0x4f5417,_0x5482bc){var _0x14af31={};var _0xd26098={};var _0x50078b;var _0x5d2601;return db[_0x2315('0x5f')][_0x2315('0x98')]({'where':{'id':_0x3cb00c[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x4f5417,null))[_0x2315('0x1e')](function(_0x2bec2a){if(_0x2bec2a){_0x50078b=_0x2bec2a;_0xd26098[_0x2315('0x48')]=_[_0x2315('0x4a')](db[_0x2315('0x127')][_0x2315('0x63')]);_0xd26098[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x3cb00c['query']);_0xd26098[_0x2315('0x4d')]=_['intersection'](_0xd26098['model'],_0xd26098[_0x2315('0x4c')]);_0x14af31['attributes']=_['intersection'](_0xd26098[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x3cb00c[_0x2315('0x4c')][_0x2315('0x4f')]));_0x14af31[_0x2315('0x4e')]=_0x14af31[_0x2315('0x4e')][_0x2315('0x50')]?_0x14af31[_0x2315('0x4e')]:_0xd26098['model'];_0x14af31['order']=qs[_0x2315('0x55')](_0x3cb00c[_0x2315('0x4c')][_0x2315('0x55')]);_0x14af31[_0x2315('0x56')]=qs[_0x2315('0x4d')](_['pick'](_0x3cb00c['query'],_0xd26098['filters']));if(_0x3cb00c[_0x2315('0x4c')]['filter']){_0x14af31[_0x2315('0x56')]=_[_0x2315('0x57')](_0x14af31['where'],{'$or':_[_0x2315('0x3c')](_0x14af31[_0x2315('0x4e')],function(_0x6ce9ac){var _0x38ce00={};_0x38ce00[_0x6ce9ac]={'$like':'%'+_0x3cb00c[_0x2315('0x4c')][_0x2315('0x3b')]+'%'};return _0x38ce00;})});}_0x14af31=_[_0x2315('0x57')]({},_0x14af31,_0x3cb00c[_0x2315('0x5e')]);return _0x50078b[_0x2315('0x126')](_0x14af31);}})[_0x2315('0x1e')](function(_0x16edca){if(_0x16edca){_0x5d2601=_0x16edca[_0x2315('0x50')];if(!_0x3cb00c[_0x2315('0x4c')][_0x2315('0x51')](_0x2315('0x52'))){_0x14af31[_0x2315('0x53')]=qs['limit'](_0x3cb00c['query'][_0x2315('0x53')]);_0x14af31[_0x2315('0x2d')]=qs['offset'](_0x3cb00c[_0x2315('0x4c')][_0x2315('0x2d')]);}return _0x50078b[_0x2315('0x126')](_0x14af31);}})['then'](function(_0x5bdce2){if(_0x5bdce2){return _0x5bdce2?{'count':_0x5d2601,'rows':_0x5bdce2}:null;}})['then'](respondWithResult(_0x4f5417,null))[_0x2315('0x29')](handleError(_0x4f5417,null));};exports[_0x2315('0x128')]=function(_0x473220,_0x18ea8b,_0x3705ce){return db['User']['find']({'where':{'id':_0x473220['params']['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x18ea8b,null))[_0x2315('0x1e')](function(_0x31fe33){if(_0x31fe33){return _0x31fe33[_0x2315('0x128')](_0x473220[_0x2315('0x67')][_0x2315('0xa3')],_[_0x2315('0x10e')](_0x473220[_0x2315('0x67')],['ids','id'])||{});}})[_0x2315('0x1e')](respondWithResult(_0x18ea8b,null))[_0x2315('0x29')](handleError(_0x18ea8b,null));};exports[_0x2315('0x129')]=function(_0x4ff605,_0x1b7213,_0xa8f083){return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x4ff605['params']['id']}})['then'](handleEntityNotFound(_0x1b7213,null))[_0x2315('0x1e')](function(_0x1972eb){if(_0x1972eb){return _0x1972eb['removeOpenchannelAccounts'](_0x4ff605['query'][_0x2315('0xa3')]);}})[_0x2315('0x1e')](respondWithStatusCode(_0x1b7213,null))[_0x2315('0x29')](handleError(_0x1b7213,null));};exports[_0x2315('0x12a')]=function(_0x89d7bd,_0x26fdc4,_0x2a2705){var _0x1d8c81={};var _0x80dd99={};var _0x39a188;var _0x29c07c;return db[_0x2315('0x5f')]['findOne']({'where':{'id':_0x89d7bd[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x26fdc4,null))[_0x2315('0x1e')](function(_0x509e0f){if(_0x509e0f){_0x39a188=_0x509e0f;_0x80dd99[_0x2315('0x48')]=_[_0x2315('0x4a')](db['SmsAccount']['rawAttributes']);_0x80dd99[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x89d7bd[_0x2315('0x4c')]);_0x80dd99['filters']=_[_0x2315('0x65')](_0x80dd99[_0x2315('0x48')],_0x80dd99[_0x2315('0x4c')]);_0x1d8c81['attributes']=_['intersection'](_0x80dd99['model'],qs[_0x2315('0x4f')](_0x89d7bd[_0x2315('0x4c')][_0x2315('0x4f')]));_0x1d8c81['attributes']=_0x1d8c81[_0x2315('0x4e')][_0x2315('0x50')]?_0x1d8c81[_0x2315('0x4e')]:_0x80dd99[_0x2315('0x48')];_0x1d8c81[_0x2315('0x54')]=qs[_0x2315('0x55')](_0x89d7bd[_0x2315('0x4c')][_0x2315('0x55')]);_0x1d8c81[_0x2315('0x56')]=qs[_0x2315('0x4d')](_['pick'](_0x89d7bd[_0x2315('0x4c')],_0x80dd99[_0x2315('0x4d')]));if(_0x89d7bd[_0x2315('0x4c')][_0x2315('0x3b')]){_0x1d8c81[_0x2315('0x56')]=_['merge'](_0x1d8c81['where'],{'$or':_[_0x2315('0x3c')](_0x1d8c81['attributes'],function(_0x1a14fa){var _0x51f040={};_0x51f040[_0x1a14fa]={'$like':'%'+_0x89d7bd[_0x2315('0x4c')]['filter']+'%'};return _0x51f040;})});}_0x1d8c81=_[_0x2315('0x57')]({},_0x1d8c81,_0x89d7bd[_0x2315('0x5e')]);return _0x39a188[_0x2315('0x12a')](_0x1d8c81);}})[_0x2315('0x1e')](function(_0x16dfa7){if(_0x16dfa7){_0x29c07c=_0x16dfa7[_0x2315('0x50')];if(!_0x89d7bd[_0x2315('0x4c')][_0x2315('0x51')]('nolimit')){_0x1d8c81[_0x2315('0x53')]=qs[_0x2315('0x53')](_0x89d7bd['query'][_0x2315('0x53')]);_0x1d8c81['offset']=qs['offset'](_0x89d7bd[_0x2315('0x4c')][_0x2315('0x2d')]);}return _0x39a188[_0x2315('0x12a')](_0x1d8c81);}})['then'](function(_0x36f2b8){if(_0x36f2b8){return _0x36f2b8?{'count':_0x29c07c,'rows':_0x36f2b8}:null;}})[_0x2315('0x1e')](respondWithResult(_0x26fdc4,null))['catch'](handleError(_0x26fdc4,null));};exports['addSmsAccounts']=function(_0x2f6726,_0x3352a4,_0x4540c9){return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x2f6726[_0x2315('0x68')]['id']}})['then'](handleEntityNotFound(_0x3352a4,null))['then'](function(_0x37a95b){if(_0x37a95b){return _0x37a95b['addSmsAccounts'](_0x2f6726['body'][_0x2315('0xa3')],_[_0x2315('0x10e')](_0x2f6726[_0x2315('0x67')],[_0x2315('0xa3'),'id'])||{});}})[_0x2315('0x1e')](respondWithResult(_0x3352a4,null))[_0x2315('0x29')](handleError(_0x3352a4,null));};exports[_0x2315('0x12b')]=function(_0x1ba79b,_0x3bcd38,_0x47b8e1){return db[_0x2315('0x5f')]['find']({'where':{'id':_0x1ba79b[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x3bcd38,null))[_0x2315('0x1e')](function(_0x207ad1){if(_0x207ad1){return _0x207ad1[_0x2315('0x12b')](_0x1ba79b[_0x2315('0x4c')][_0x2315('0xa3')]);}})[_0x2315('0x1e')](respondWithStatusCode(_0x3bcd38,null))[_0x2315('0x29')](handleError(_0x3bcd38,null));};exports[_0x2315('0x12c')]=function(_0x4f14c1,_0xef5d1c,_0x1ff23a){var _0x2a63e3={};var _0x390c3a={};var _0x21d087;var _0x50e2ca;return db['User'][_0x2315('0x98')]({'where':{'id':_0x4f14c1['params']['id']}})['then'](handleEntityNotFound(_0xef5d1c,null))['then'](function(_0x388c2b){if(_0x388c2b){_0x21d087=_0x388c2b;_0x390c3a[_0x2315('0x48')]=_[_0x2315('0x4a')](db[_0x2315('0x12d')][_0x2315('0x63')]);_0x390c3a[_0x2315('0x4c')]=_['keys'](_0x4f14c1['query']);_0x390c3a[_0x2315('0x4d')]=_[_0x2315('0x65')](_0x390c3a[_0x2315('0x48')],_0x390c3a[_0x2315('0x4c')]);_0x2a63e3[_0x2315('0x4e')]=_[_0x2315('0x65')](_0x390c3a[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x4f14c1[_0x2315('0x4c')][_0x2315('0x4f')]));_0x2a63e3['attributes']=_0x2a63e3[_0x2315('0x4e')][_0x2315('0x50')]?_0x2a63e3[_0x2315('0x4e')]:_0x390c3a['model'];_0x2a63e3[_0x2315('0x54')]=qs['sort'](_0x4f14c1[_0x2315('0x4c')]['sort']);_0x2a63e3[_0x2315('0x56')]=qs[_0x2315('0x4d')](_['pick'](_0x4f14c1[_0x2315('0x4c')],_0x390c3a[_0x2315('0x4d')]));if(_0x4f14c1[_0x2315('0x4c')][_0x2315('0x3b')]){_0x2a63e3['where']=_[_0x2315('0x57')](_0x2a63e3[_0x2315('0x56')],{'$or':_['map'](_0x2a63e3[_0x2315('0x4e')],function(_0x1914c8){var _0x4bc166={};_0x4bc166[_0x1914c8]={'$like':'%'+_0x4f14c1[_0x2315('0x4c')]['filter']+'%'};return _0x4bc166;})});}_0x2a63e3=_[_0x2315('0x57')]({},_0x2a63e3,_0x4f14c1[_0x2315('0x5e')]);return _0x21d087['getChatWebsites'](_0x2a63e3);}})[_0x2315('0x1e')](function(_0x5f2488){if(_0x5f2488){_0x50e2ca=_0x5f2488['length'];if(!_0x4f14c1[_0x2315('0x4c')][_0x2315('0x51')](_0x2315('0x52'))){_0x2a63e3[_0x2315('0x53')]=qs[_0x2315('0x53')](_0x4f14c1[_0x2315('0x4c')][_0x2315('0x53')]);_0x2a63e3[_0x2315('0x2d')]=qs['offset'](_0x4f14c1['query']['offset']);}return _0x21d087['getChatWebsites'](_0x2a63e3);}})['then'](function(_0x22122c){if(_0x22122c){return _0x22122c?{'count':_0x50e2ca,'rows':_0x22122c}:null;}})[_0x2315('0x1e')](respondWithResult(_0xef5d1c,null))[_0x2315('0x29')](handleError(_0xef5d1c,null));};exports['addChatWebsites']=function(_0x33ec0c,_0x36b456,_0x3fd501){return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x33ec0c[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x36b456,null))[_0x2315('0x1e')](function(_0x71d1c6){if(_0x71d1c6){return _0x71d1c6[_0x2315('0x12e')](_0x33ec0c[_0x2315('0x67')][_0x2315('0xa3')],_[_0x2315('0x10e')](_0x33ec0c['body'],[_0x2315('0xa3'),'id'])||{});}})[_0x2315('0x1e')](respondWithResult(_0x36b456,null))[_0x2315('0x29')](handleError(_0x36b456,null));};exports[_0x2315('0x12f')]=function(_0x5b920f,_0x3a5ed7,_0x3aeaa7){return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x5b920f[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x3a5ed7,null))['then'](function(_0x101aa8){if(_0x101aa8){return _0x101aa8['removeChatWebsites'](_0x5b920f[_0x2315('0x4c')][_0x2315('0xa3')]);}})[_0x2315('0x1e')](respondWithStatusCode(_0x3a5ed7,null))['catch'](handleError(_0x3a5ed7,null));};exports[_0x2315('0x130')]=function(_0x5e4088,_0xb49266,_0x225650){var _0x341e89={};var _0x4e359b={};var _0x13409b;var _0x4f9fde;return db[_0x2315('0x5f')][_0x2315('0x98')]({'where':{'id':_0x5e4088[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0xb49266,null))[_0x2315('0x1e')](function(_0x5d618c){if(_0x5d618c){_0x13409b=_0x5d618c;_0x4e359b[_0x2315('0x48')]=_[_0x2315('0x4a')](db[_0x2315('0x131')][_0x2315('0x63')]);_0x4e359b[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x5e4088['query']);_0x4e359b[_0x2315('0x4d')]=_[_0x2315('0x65')](_0x4e359b[_0x2315('0x48')],_0x4e359b[_0x2315('0x4c')]);_0x341e89[_0x2315('0x4e')]=_['intersection'](_0x4e359b[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x5e4088[_0x2315('0x4c')][_0x2315('0x4f')]));_0x341e89[_0x2315('0x4e')]=_0x341e89[_0x2315('0x4e')]['length']?_0x341e89[_0x2315('0x4e')]:_0x4e359b['model'];_0x341e89[_0x2315('0x54')]=qs[_0x2315('0x55')](_0x5e4088[_0x2315('0x4c')][_0x2315('0x55')]);_0x341e89[_0x2315('0x56')]=qs['filters'](_['pick'](_0x5e4088[_0x2315('0x4c')],_0x4e359b[_0x2315('0x4d')]));if(_0x5e4088[_0x2315('0x4c')][_0x2315('0x3b')]){_0x341e89[_0x2315('0x56')]=_[_0x2315('0x57')](_0x341e89[_0x2315('0x56')],{'$or':_['map'](_0x341e89[_0x2315('0x4e')],function(_0x27c5d6){var _0xeee159={};_0xeee159[_0x27c5d6]={'$like':'%'+_0x5e4088['query'][_0x2315('0x3b')]+'%'};return _0xeee159;})});}_0x341e89=_[_0x2315('0x57')]({},_0x341e89,_0x5e4088[_0x2315('0x5e')]);return _0x13409b[_0x2315('0x130')](_0x341e89);}})[_0x2315('0x1e')](function(_0x5a5730){if(_0x5a5730){_0x4f9fde=_0x5a5730['length'];if(!_0x5e4088[_0x2315('0x4c')]['hasOwnProperty'](_0x2315('0x52'))){_0x341e89['limit']=qs[_0x2315('0x53')](_0x5e4088[_0x2315('0x4c')][_0x2315('0x53')]);_0x341e89[_0x2315('0x2d')]=qs[_0x2315('0x2d')](_0x5e4088[_0x2315('0x4c')][_0x2315('0x2d')]);}return _0x13409b[_0x2315('0x130')](_0x341e89);}})['then'](function(_0x10505a){if(_0x10505a){return _0x10505a?{'count':_0x4f9fde,'rows':_0x10505a}:null;}})['then'](respondWithResult(_0xb49266,null))['catch'](handleError(_0xb49266,null));};exports['addSquareProjects']=function(_0x9167ba,_0x193bb2,_0xe829ba){return db['User']['find']({'where':{'id':_0x9167ba[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x193bb2,null))[_0x2315('0x1e')](function(_0xbc0332){if(_0xbc0332){return _0xbc0332[_0x2315('0x132')](_0x9167ba['body'][_0x2315('0xa3')],_[_0x2315('0x10e')](_0x9167ba['body'],['ids','id'])||{});}})[_0x2315('0x1e')](respondWithResult(_0x193bb2,null))[_0x2315('0x29')](handleError(_0x193bb2,null));};exports[_0x2315('0x133')]=function(_0x4e6e4c,_0x439354,_0x2e809f){return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x4e6e4c[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x439354,null))[_0x2315('0x1e')](function(_0x3cb33d){if(_0x3cb33d){return _0x3cb33d[_0x2315('0x133')](_0x4e6e4c[_0x2315('0x4c')][_0x2315('0xa3')]);}})[_0x2315('0x1e')](respondWithStatusCode(_0x439354,null))[_0x2315('0x29')](handleError(_0x439354,null));};exports[_0x2315('0x134')]=function(_0x27baff,_0x4a74a8){var _0x353208={},_0x8c7816={},_0x2fa5f0={'count':0x0,'rows':[]};var _0x217c3d=db[_0x2315('0x135')][_0x2315('0x63')];_0x8c7816[_0x2315('0x48')]=_['keys'](_0x217c3d);_0x8c7816[_0x2315('0x4c')]=_[_0x2315('0x4a')](_0x27baff[_0x2315('0x4c')]);_0x8c7816['filters']=_['intersection'](_0x8c7816[_0x2315('0x48')],_0x8c7816[_0x2315('0x4c')]);_0x8c7816[_0x2315('0x4d')]=_[_0x2315('0x136')](_0x8c7816['filters'],[_0x2315('0x137'),_0x2315('0x138'),_0x2315('0x139'),_0x2315('0x13a'),_0x2315('0x13b'),'$lte','$ne',_0x2315('0x13c'),_0x2315('0x13d'),_0x2315('0x13e'),_0x2315('0x13f'),_0x2315('0x140'),_0x2315('0x141'),_0x2315('0x142'),_0x2315('0x143'),_0x2315('0x144'),_0x2315('0x145'),_0x2315('0x142'),_0x2315('0x146'),_0x2315('0x147'),_0x2315('0x148'),_0x2315('0x149')]);_0x353208[_0x2315('0x4e')]=_[_0x2315('0x65')](_0x8c7816[_0x2315('0x48')],qs[_0x2315('0x4f')](_0x27baff['query'][_0x2315('0x4f')]));_0x353208[_0x2315('0x4e')]=_0x353208[_0x2315('0x4e')][_0x2315('0x50')]?_0x353208[_0x2315('0x4e')]:_0x8c7816[_0x2315('0x48')];if(!_0x27baff[_0x2315('0x4c')]['hasOwnProperty'](_0x2315('0x52'))){_0x353208[_0x2315('0x53')]=qs[_0x2315('0x53')](_0x27baff[_0x2315('0x4c')][_0x2315('0x53')]);_0x353208['offset']=qs[_0x2315('0x2d')](_0x27baff[_0x2315('0x4c')][_0x2315('0x2d')]);}_0x353208[_0x2315('0x54')]=qs[_0x2315('0x55')](_0x27baff['query']['sort']);_0x353208[_0x2315('0x56')]=qs[_0x2315('0x4d')](_[_0x2315('0xc6')](_0x27baff[_0x2315('0x4c')],_0x8c7816[_0x2315('0x4d')]));if(_0x27baff['query']['filter']){_0x353208[_0x2315('0x56')]=_[_0x2315('0x57')](_0x353208[_0x2315('0x56')],{'$or':_[_0x2315('0x3c')](_0x353208[_0x2315('0x4e')],function(_0x148313){var _0x4d843f={};_0x4d843f[_0x148313]={'$like':'%'+_0x27baff[_0x2315('0x4c')]['filter']+'%'};return _0x4d843f;})});}_0x353208['where']={'$and':[_0x353208[_0x2315('0x56')],{'$or':[{'UserId':_0x27baff['params']['id']},{'OwnerId':_0x27baff[_0x2315('0x68')]['id']}]}]};_0x353208=_[_0x2315('0x57')]({},_0x353208,_0x27baff[_0x2315('0x5e')]);var _0x191a72={'where':_0x353208[_0x2315('0x56')]};return db[_0x2315('0x135')][_0x2315('0x2c')](_0x191a72)[_0x2315('0x1e')](function(_0x6b99bf){_0x2fa5f0[_0x2315('0x2c')]=_0x6b99bf;if(_0x27baff['query']['includeAll']){_0x353208[_0x2315('0x61')]=[{'attributes':['id',_0x2315('0x14a'),_0x2315('0x14b'),_0x2315('0x14c')],'model':db[_0x2315('0x14d')],'as':_0x2315('0x14e')},{'attributes':['id',_0x2315('0x41'),_0x2315('0x14f')],'model':db[_0x2315('0xa8')],'as':_0x2315('0xc5')}];}return db[_0x2315('0x135')][_0x2315('0xa9')](_0x353208);})[_0x2315('0x1e')](function(_0x45621f){_0x2fa5f0['rows']=_0x45621f;return _0x2fa5f0;})[_0x2315('0x1e')](respondWithFilteredResult(_0x4a74a8,_0x353208))['catch'](handleError(_0x4a74a8,null));};exports['getApiKey']=function(_0x536c0f,_0x45a2d0,_0x1c0ddd){if(!_[_0x2315('0x74')](_0x536c0f[_0x2315('0x36')]['id'])&&(_0x536c0f[_0x2315('0x36')][_0x2315('0x3f')]==_0x2315('0x6c')||_0x536c0f[_0x2315('0x36')][_0x2315('0x3f')]==_0x2315('0x36'))){return db[_0x2315('0x5f')][_0x2315('0x40')]({'where':{'id':_0x536c0f[_0x2315('0x68')]['id']}})['then'](function(_0xb0d081){var _0xe3d74a=authService[_0x2315('0x150')](_0xb0d081);if(_0xe3d74a)return _0x45a2d0[_0x2315('0x2b')](0xc8)[_0x2315('0x30')]({'api_key':_0xe3d74a});else return _0x45a2d0['status'](0xcc)[_0x2315('0x30')]({'message':_0x2315('0x151')});})[_0x2315('0x29')](handleError(_0x45a2d0,0x193));}else{return _0x45a2d0[_0x2315('0x2b')](0x191)[_0x2315('0x30')]({'message':_0x2315('0x152')});}};exports[_0x2315('0x153')]=function(_0x170794,_0x1d2d9e,_0x5346f9){var _0x596ebf;if(!_['isNil'](_0x170794['user']['id'])&&(_0x170794[_0x2315('0x36')][_0x2315('0x3f')]==_0x2315('0x6c')||_0x170794[_0x2315('0x36')]['role']==_0x2315('0x36'))){return db[_0x2315('0x5f')]['find']({'where':{'id':_0x170794[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](function(_0xcc5fa6){return[_0xcc5fa6,authService[_0x2315('0x154')](_0xcc5fa6)];})[_0x2315('0x1e')](function(_0x57e370){_0x596ebf=_0x57e370;return db[_0x2315('0x5f')][_0x2315('0x33')]({'apiKeyNonce':_0x596ebf[0x0]['apiKeyNonce'],'apiKeyIat':_0x596ebf[0x0][_0x2315('0x155')]},{'where':{'id':_0x170794[_0x2315('0x68')]['id']}});})['then'](function(){return _0x1d2d9e['status'](0xc8)[_0x2315('0x30')]({'api_key':_0x596ebf[0x1]});})['catch'](handleError(_0x1d2d9e,0x193));}else{return _0x1d2d9e[_0x2315('0x2b')](0x191)['json']({'message':_0x2315('0x152')});}};exports[_0x2315('0x156')]=function(_0x38c6bd,_0x156a8d,_0x55db63){if(!_[_0x2315('0x74')](_0x38c6bd[_0x2315('0x36')]['id'])&&(_0x38c6bd[_0x2315('0x36')][_0x2315('0x3f')]=='admin'||_0x38c6bd[_0x2315('0x36')][_0x2315('0x3f')]=='user')){return db[_0x2315('0x5f')]['find']({'where':{'id':_0x38c6bd[_0x2315('0x68')]['id']}})[_0x2315('0x1e')](handleEntityNotFound(_0x156a8d,null))[_0x2315('0x1e')](function(_0x23de2e){if(_0x23de2e&&_0x23de2e[_0x2315('0x157')]&&_0x23de2e[_0x2315('0x155')])return _0x23de2e;else throw{'message':_0x2315('0x158')};})['then'](function(_0x1eecdf){return db['User'][_0x2315('0x33')]({'apiKeyNonce':null,'apiKeyIat':null},{'where':{'id':_0x38c6bd[_0x2315('0x68')]['id']}});})[_0x2315('0x1e')](respondWithStatusCode(_0x156a8d,0xc8))['catch'](handleError(_0x156a8d,0x193));}else{return _0x156a8d['status'](0x191)[_0x2315('0x30')]({'message':'You\x20don\x27t\x20have\x20sufficient\x20privelages\x20to\x20access\x20this\x20resource.'});}};
\ No newline at end of file
+var _0x3a06=['removeChatInteractions','isArray','user_has_chat_interactions:remove','addMailInteractions','omit','user_has_mail_interactions:save','removeMailInteractions','user_has_mail_interactions:remove','addFaxInteractions','removeFaxInteractions','addSmsInteractions','user_has_sms_interactions:save','removeSmsInteractions','user_has_sms_interactions:remove','addOpenchannelInteractions','removeOpenchannelInteractions','user_has_openchannel_interactions:remove','VoicePrefix','getVoicePrefixes','getFaxAccounts','FaxAccount','addFaxAccounts','removeFaxAccounts','getMailAccounts','addMailAccounts','removeMailAccounts','getOpenchannelAccounts','addOpenchannelAccounts','removeOpenchannelAccounts','getSmsAccounts','SmsAccount','addSmsAccounts','removeSmsAccounts','getChatWebsites','ChatWebsite','addChatWebsites','removeChatWebsites','getSquareProjects','SquareProject','addSquareProjects','removeSquareProjects','getScheduledCalls','CmHopper','concat','$and','$or','$gte','$lte','$ne','$eq','$not','$between','$notBetween','$notIn','$notLike','$iLike','$notILike','$like','$any','lastName','CmContact','Contact','dialActive','retrieveApiKey','No\x20API\x20access\x20key\x20found!','You\x20don\x27t\x20have\x20sufficient\x20privelages\x20to\x20access\x20this\x20resource.','createApiKey','generateApiKey','apiKeyIat','removeApiKey','apiKeyNonce','API\x20key\x20not\x20available','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','lodash','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','redis','defaults','localhost','socket.io-emitter','./user.socket','jayson/promise','client','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','info','User,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','catch','sendStatus','status','end','json','offset','set','Content-Range','reject','save','destroy','Users','user','Agents','Telephones','telephone','filter','map','value','includes','find','role','name','UserProfileResource','send','User','rawAttributes','model','differenceBy','keys','password','query','filters','fields','attributes','hasOwnProperty','nolimit','limit','sort','pick','where','merge','type','key','VIRTUAL','sequelize','lower','options','count','includeAll','include','params','salt','intersection','length','bulkCreate','update','body','describe','addContacts','ids','agent','agent\x20role','../../config/license/util','getLicense','telephones','users','isNil','License\x20limit\x20reached','format','count\x20%s:\x20%s','internal','Setting','findById','securePassword','min_internal','select\x20(select\x20IFNULL(max(internal)+1,1)\x20from\x20users\x20where\x20internal\x20<\x20md.internal)\x20as\x20\x27from\x27,\x20md.internal\x20-\x201\x20as\x20\x27to\x27\x20from\x20users\x20md\x20where\x20md.internal\x20!=\x201\x20and\x20not\x20exists\x20(select\x201\x20from\x20users\x20md2\x20where\x20md2.internal\x20=\x20md.internal\x20-\x201)','QueryTypes','SELECT','from','voicemail','mailbox','VoiceMail','fullname','email','permissions','101','102','103','110','104','106','107','108','109','100','111','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','userProfileId','autoAssociation','create','changePassword','oldPassword','newPassword','New\x20password\x20must\x20be\x20different\x20from\x20old\x20one','Sequelize','ValidationError','Invalid\x20body\x20format.\x20Use\x20oldPassord\x20and\x20newPassword','authenticate','Wrong\x20credentials','New\x20password\x20must\x20be\x20different\x20from\x20old\x20password','admin','Invalid\x20body\x20format.\x20Use\x20newPassword','Unauthorized','findOne','addQueues','loginInPause','voicePause','interface','isValidChannel','Unknown\x20channel','add','capitalize','penalty','spread','toLowerCase','QueueId','emit','Queue:save','voice','VoiceQueue','online','UserVoiceQueueRt','upsert','removeQueues','channel','remove','Queue:remove','addAvatar','userpic','file','getAvatar','join','download','existsSync','server/files/images/','root','order','CmList','List','Tag','Tags','tag','getContacts','Queue','findAll','Queues','getVoiceQueuesRt','ChatGroup','getGroups','VoiceRecording','rows','getScreenRecordings','ScreenRecording','UserId','getChatInteractions','ChatInteraction','getOpenchannelInteractions','MailInteraction','SmsInteraction','getSmsInteractions','getFaxInteractions','FaxInteraction','phone','LOCAL/%s@from-sip/n','intrf','SIP/%s','headers','x-forwarded-for','connection','remoteAddress','socket','getVoiceQueues','push','UserVoiceQueue.penalty','each','MemberReport','forEach','YYYY-MM-DD\x20HH:mm:ss','all','device','PAUSE','LOGININPAUSE','isMiddleware','resolve','logout','QueuePause','pause','getChannels','DEFAULT\x20PAUSE','unpause','mailPause','chatPause','faxPause','smsPause','lastPauseAt','manual','openchannel','%s%s','getTeams','Team','addTeams','removeTeams','getLists','getAgents','values','You\x20can\x27t\x20delete\x20yourself','addChatInteractions','user_has_chat_interactions:save'];(function(_0x291c6c,_0x5553ee){var _0x33d148=function(_0xc363b5){while(--_0xc363b5){_0x291c6c['push'](_0x291c6c['shift']());}};_0x33d148(++_0x5553ee);}(_0x3a06,0x193));var _0x63a0=function(_0x5e26ed,_0x4542a2){_0x5e26ed=_0x5e26ed-0x0;var _0x3968ee=_0x3a06[_0x5e26ed];return _0x3968ee;};'use strict';var pdf=require(_0x63a0('0x0'));var emlformat=require(_0x63a0('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x63a0('0x2'));var jsonpatch=require(_0x63a0('0x3'));var rp=require(_0x63a0('0x4'));var moment=require(_0x63a0('0x5'));var BPromise=require(_0x63a0('0x6'));var Mustache=require('mustache');var util=require(_0x63a0('0x7'));var path=require(_0x63a0('0x8'));var sox=require(_0x63a0('0x9'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x63a0('0xa'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x63a0('0xb'));var toCsv=require('to-csv');var querystring=require(_0x63a0('0xc'));var Papa=require(_0x63a0('0xd'));var Redis=require(_0x63a0('0xe'));var authService=require('../../components/auth/service');var qs=require(_0x63a0('0xf'));var hardwareService=require(_0x63a0('0x10'));var logger=require(_0x63a0('0x11'))(_0x63a0('0x12'));var utils=require('../../config/utils');var config=require(_0x63a0('0x13'));var db=require('../../mysqldb')['db'];config[_0x63a0('0x14')]=_[_0x63a0('0x15')](config[_0x63a0('0x14')],{'host':_0x63a0('0x16'),'port':0x18eb});var socket=require(_0x63a0('0x17'))(new Redis(config['redis']));require(_0x63a0('0x18'))['register'](socket);var jayson=require(_0x63a0('0x19'));var client=jayson[_0x63a0('0x1a')]['http']({'port':0x232a});function checkPasswordPattern(_0xf44297,_0x3d57d5,_0x4bece7){if(_0x4bece7){var _0x201ce3=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x201ce3['test'](_0x3d57d5)){return _0xf44297;}else{throw new Error(_0x63a0('0x1b'));}}else{return _0xf44297;}}function respondWithRpcPromise(_0x4f0061,_0x58ed37,_0x5ec02c,_0x1d36e8){return new BPromise(function(_0x4d0a01,_0x2d23e9){var _0x558703=_0x1d36e8||client;return _0x558703[_0x63a0('0x1c')](_0x4f0061,_0x5ec02c)[_0x63a0('0x1d')](function(_0x5370a8){logger[_0x63a0('0x1e')](_0x63a0('0x1f'),_0x58ed37,_0x63a0('0x20'));logger[_0x63a0('0x21')]('User,\x20%s,\x20%s,\x20%s',_0x58ed37,'request\x20sent',JSON[_0x63a0('0x22')](_0x5370a8));if(_0x5370a8[_0x63a0('0x23')]){if(_0x5370a8[_0x63a0('0x23')][_0x63a0('0x24')]===0x1f4){logger[_0x63a0('0x23')](_0x63a0('0x1f'),_0x58ed37,_0x5370a8[_0x63a0('0x23')]['message']);return _0x2d23e9(_0x5370a8[_0x63a0('0x23')][_0x63a0('0x25')]);}logger[_0x63a0('0x23')](_0x63a0('0x1f'),_0x58ed37,_0x5370a8[_0x63a0('0x23')][_0x63a0('0x25')]);return _0x4d0a01(_0x5370a8[_0x63a0('0x23')][_0x63a0('0x25')]);}else{logger['info'](_0x63a0('0x1f'),_0x58ed37,_0x63a0('0x20'));_0x4d0a01(_0x5370a8['result'][_0x63a0('0x25')]);}})[_0x63a0('0x26')](function(_0x586c8e){logger[_0x63a0('0x23')]('User,\x20%s,\x20%s',_0x58ed37,_0x586c8e);_0x2d23e9(_0x586c8e);});});}function respondWithStatusCode(_0x28c6e7,_0x143232){_0x143232=_0x143232||0xcc;return function(_0x4992ac){if(_0x4992ac){return _0x28c6e7[_0x63a0('0x27')](_0x143232);}return _0x28c6e7[_0x63a0('0x28')](_0x143232)[_0x63a0('0x29')]();};}function respondWithResult(_0x3bd65b,_0x155e28){_0x155e28=_0x155e28||0xc8;return function(_0x5708ec){if(_0x5708ec){return _0x3bd65b['status'](_0x155e28)[_0x63a0('0x2a')](_0x5708ec);}};}function respondWithFilteredResult(_0x485f27,_0x19bd81){return function(_0x5945f3){if(_0x5945f3){var _0x49c4f4=_0x5945f3['count'],_0x34e5e1=_0x19bd81[_0x63a0('0x2b')],_0x34b28a=_0x19bd81[_0x63a0('0x2b')]+_0x19bd81['limit'],_0xa611eb;if(_0x34b28a>=_0x49c4f4){_0x34b28a=_0x49c4f4;_0xa611eb=0xc8;}else{_0xa611eb=0xce;}_0x485f27['status'](_0xa611eb);return _0x485f27[_0x63a0('0x2c')](_0x63a0('0x2d'),_0x34e5e1+'-'+_0x34b28a+'/'+_0x49c4f4)[_0x63a0('0x2a')](_0x5945f3);}return null;};}function patchUpdates(_0x4e1f98){return function(_0x34f2fc){try{jsonpatch['apply'](_0x34f2fc,_0x4e1f98,!![]);}catch(_0x25509c){return BPromise[_0x63a0('0x2e')](_0x25509c);}return _0x34f2fc[_0x63a0('0x2f')]();};}function saveUpdates(_0x380519,_0x760f0){return function(_0x35875c){if(_0x35875c){return _0x35875c['update'](_0x380519)[_0x63a0('0x1d')](function(_0x1648a3){return _0x1648a3;});}return null;};}function removeEntity(_0x4eb51d,_0x107dff){return function(_0x619c81){if(_0x619c81){return _0x619c81[_0x63a0('0x30')]()[_0x63a0('0x1d')](function(){var _0x1ce381=_0x619c81['get']({'plain':!![]});var _0x4c4d7d=[{'name':_0x63a0('0x31'),'value':_0x63a0('0x32'),'ignore':!![]},{'name':_0x63a0('0x33'),'value':'agent','ignore':![]},{'name':_0x63a0('0x34'),'value':_0x63a0('0x35'),'ignore':![]}];var _0xeab736=_(_0x4c4d7d)[_0x63a0('0x36')]('ignore')[_0x63a0('0x37')](_0x63a0('0x38'))['value']();if(_[_0x63a0('0x39')](_0xeab736,_0x1ce381['role'])){return;}var _0x199d6d=_[_0x63a0('0x3a')](_0x4c4d7d,[_0x63a0('0x38'),_0x1ce381[_0x63a0('0x3b')]])[_0x63a0('0x3c')];return db[_0x63a0('0x3d')]['destroy']({'where':{'type':_0x199d6d,'resourceId':_0x1ce381['id']}})[_0x63a0('0x1d')](function(){return _0x619c81;});})[_0x63a0('0x1d')](function(){_0x4eb51d[_0x63a0('0x28')](0xcc)[_0x63a0('0x29')]();});}};}function handleEntityNotFound(_0x1dd07c,_0x8343c8){return function(_0x11ed7b){if(!_0x11ed7b){_0x1dd07c[_0x63a0('0x27')](0x194);}return _0x11ed7b;};}function handleError(_0x5cf51e,_0x44c860){_0x44c860=_0x44c860||0x1f4;return function(_0x43fad2){logger[_0x63a0('0x23')](_0x43fad2['stack']);if(_0x43fad2['name']){delete _0x43fad2[_0x63a0('0x3c')];}_0x5cf51e[_0x63a0('0x28')](_0x44c860)[_0x63a0('0x3e')](_0x43fad2);};}exports['index']=function(_0xeeb8dd,_0x5425c4){var _0x4d84ef={},_0x3388a6={},_0x527185={'count':0x0,'rows':[]};var _0x20ea60=db[_0x63a0('0x3f')][_0x63a0('0x40')];_0x3388a6[_0x63a0('0x41')]=_[_0x63a0('0x42')](_[_0x63a0('0x43')](_0x20ea60),[_0x63a0('0x44'),'salt']);_0x3388a6[_0x63a0('0x45')]=_['keys'](_0xeeb8dd[_0x63a0('0x45')]);_0x3388a6[_0x63a0('0x46')]=_['intersection'](_0x3388a6[_0x63a0('0x41')],_0x3388a6[_0x63a0('0x45')]);_0x4d84ef['attributes']=_['intersection'](_0x3388a6[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0xeeb8dd[_0x63a0('0x45')]['fields']));_0x4d84ef[_0x63a0('0x48')]=_0x4d84ef[_0x63a0('0x48')]['length']?_0x4d84ef[_0x63a0('0x48')]:_0x3388a6[_0x63a0('0x41')];if(!_0xeeb8dd[_0x63a0('0x45')][_0x63a0('0x49')](_0x63a0('0x4a'))){_0x4d84ef[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0xeeb8dd['query'][_0x63a0('0x4b')]);_0x4d84ef['offset']=qs[_0x63a0('0x2b')](_0xeeb8dd['query']['offset']);}_0x4d84ef['order']=qs['sort'](_0xeeb8dd[_0x63a0('0x45')][_0x63a0('0x4c')]);_0x4d84ef['where']=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0xeeb8dd[_0x63a0('0x45')],_0x3388a6['filters']));if(_0xeeb8dd[_0x63a0('0x45')][_0x63a0('0x36')]){_0x4d84ef[_0x63a0('0x4e')]=_[_0x63a0('0x4f')](_0x4d84ef[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0x20ea60,function(_0x725ed2){if(_0x725ed2[_0x63a0('0x50')][_0x63a0('0x51')]!==_0x63a0('0x52')){return db[_0x63a0('0x53')]['where'](db[_0x63a0('0x53')]['fn']('lower',db[_0x63a0('0x53')]['col'](_0x725ed2['field'])),{'$like':db[_0x63a0('0x53')]['fn'](_0x63a0('0x54'),'%'+_0xeeb8dd[_0x63a0('0x45')][_0x63a0('0x36')]+'%')});}})});}_0x4d84ef=_['merge']({},_0x4d84ef,_0xeeb8dd[_0x63a0('0x55')]);var _0x34d1f0={'where':_0x4d84ef[_0x63a0('0x4e')]};return db[_0x63a0('0x3f')][_0x63a0('0x56')](_0x34d1f0)[_0x63a0('0x1d')](function(_0x3d042f){_0x527185[_0x63a0('0x56')]=_0x3d042f;if(_0xeeb8dd[_0x63a0('0x45')][_0x63a0('0x57')]){_0x4d84ef[_0x63a0('0x58')]=[{'all':!![]}];}return db['User']['findAll'](_0x4d84ef);})[_0x63a0('0x1d')](function(_0x3e93e5){_0x527185['rows']=_0x3e93e5;return _0x527185;})[_0x63a0('0x1d')](respondWithFilteredResult(_0x5425c4,_0x4d84ef))[_0x63a0('0x26')](handleError(_0x5425c4,null));};exports['show']=function(_0x309aa1,_0x2b2ad3){var _0x130316={'raw':![],'where':{'id':_0x309aa1[_0x63a0('0x59')]['id']}},_0x413c01={};_0x413c01[_0x63a0('0x41')]=_[_0x63a0('0x42')](_[_0x63a0('0x43')](db[_0x63a0('0x3f')][_0x63a0('0x40')]),['password',_0x63a0('0x5a')]);_0x413c01[_0x63a0('0x45')]=_[_0x63a0('0x43')](_0x309aa1[_0x63a0('0x45')]);_0x413c01[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x413c01[_0x63a0('0x41')],_0x413c01[_0x63a0('0x45')]);_0x130316[_0x63a0('0x48')]=_['intersection'](_0x413c01['model'],qs[_0x63a0('0x47')](_0x309aa1[_0x63a0('0x45')]['fields']));_0x130316[_0x63a0('0x48')]=_0x130316[_0x63a0('0x48')][_0x63a0('0x5c')]?_0x130316[_0x63a0('0x48')]:_0x413c01['model'];if(_0x309aa1[_0x63a0('0x45')]['includeAll']){_0x130316[_0x63a0('0x58')]=[{'all':!![]}];}_0x130316=_[_0x63a0('0x4f')]({},_0x130316,_0x309aa1[_0x63a0('0x55')]);return db['User'][_0x63a0('0x3a')](_0x130316)[_0x63a0('0x1d')](handleEntityNotFound(_0x2b2ad3,null))[_0x63a0('0x1d')](respondWithResult(_0x2b2ad3,null))[_0x63a0('0x26')](handleError(_0x2b2ad3,null));};exports[_0x63a0('0x5d')]=function(_0x3e4b42,_0x513d5f){return db['User'][_0x63a0('0x5d')](_0x3e4b42['body'],{'raw':![],'individualHooks':!![]})[_0x63a0('0x1d')](respondWithResult(_0x513d5f,0xc9))[_0x63a0('0x26')](handleError(_0x513d5f,null));};exports[_0x63a0('0x5e')]=function(_0x10cd65,_0x42e0c4){if(_0x10cd65[_0x63a0('0x5f')]['id']){delete _0x10cd65[_0x63a0('0x5f')]['id'];}delete _0x10cd65['body'][_0x63a0('0x3b')];return db[_0x63a0('0x3f')]['find']({'where':{'id':_0x10cd65[_0x63a0('0x59')]['id']}})['then'](handleEntityNotFound(_0x42e0c4,null))[_0x63a0('0x1d')](saveUpdates(_0x10cd65['body'],null))[_0x63a0('0x1d')](respondWithResult(_0x42e0c4,null))[_0x63a0('0x26')](handleError(_0x42e0c4,null));};exports[_0x63a0('0x60')]=function(_0x2f5d65,_0x4f4570){return db['User'][_0x63a0('0x60')]()[_0x63a0('0x1d')](respondWithResult(_0x4f4570,null))[_0x63a0('0x26')](handleError(_0x4f4570,null));};exports[_0x63a0('0x61')]=function(_0x4f2fa3,_0x373c76,_0x325fa2){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x4f2fa3[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x373c76,null))[_0x63a0('0x1d')](function(_0x3f9f6a){if(_0x3f9f6a){return _0x3f9f6a[_0x63a0('0x61')](_0x4f2fa3[_0x63a0('0x5f')][_0x63a0('0x62')],_['omit'](_0x4f2fa3['body'],[_0x63a0('0x62'),'id'])||{});}})['then'](respondWithResult(_0x373c76,null))[_0x63a0('0x26')](handleError(_0x373c76,null));};var getLicense=function(_0x13b093){return new BPromise(function(_0x38542e,_0xfee512){var _0x806a56=0x0;_0x13b093[_0x63a0('0x5f')]['role']===_0x63a0('0x63')&&_0x38542e(_0x63a0('0x64'));return db[_0x63a0('0x3f')][_0x63a0('0x56')]({'where':{'$or':[{'role':_0x13b093['body']['role']===_0x63a0('0x35')?'telephone':['admin',_0x63a0('0x32')]}]}})['then'](function(_0x5126c9){_0x806a56=_0x5126c9;return require(_0x63a0('0x65'))[_0x63a0('0x66')]();})[_0x63a0('0x1d')](function(_0xb6449d){var _0x2ff3c6=_0x13b093[_0x63a0('0x5f')][_0x63a0('0x3b')]===_0x63a0('0x35')?_0x63a0('0x67'):_0x63a0('0x68');if(!_[_0x63a0('0x69')](_0xb6449d[_0x2ff3c6])&&_0x806a56>=_0xb6449d[_0x2ff3c6]){return _0xfee512({'message':_0x63a0('0x6a')});}return _0x38542e(util[_0x63a0('0x6b')](_0x63a0('0x6c'),_0x2ff3c6,_0x806a56));})['catch'](function(_0x438f12){return _0xfee512(_0x438f12);});});};exports['create']=function(_0x4bfa04,_0x1e5ea3){return getLicense(_0x4bfa04)['then'](function(_0x4d4d92){if(!_0x4bfa04[_0x63a0('0x5f')][_0x63a0('0x6d')]){var _0x5824e0;return db[_0x63a0('0x6e')][_0x63a0('0x6f')](0x1)[_0x63a0('0x1d')](function(_0x128595){_0x128595[_0x63a0('0x70')]=!![];return checkPasswordPattern(_0x128595,_0x4bfa04[_0x63a0('0x5f')]['password'],_0x128595['securePassword']);})[_0x63a0('0x1d')](function(_0x2f41c3){_0x5824e0=_0x2f41c3[_0x63a0('0x71')];return db[_0x63a0('0x3f')]['max'](_0x63a0('0x6d'));})[_0x63a0('0x1d')](function(_0x53f822){if(_[_0x63a0('0x69')](_0x53f822)){if(_0x5824e0){_0x4bfa04[_0x63a0('0x5f')][_0x63a0('0x6d')]=_0x5824e0;}else{_0x4bfa04['body']['internal']=0x1;}}else{if(_[_0x63a0('0x69')](_0x5824e0)||_0x5824e0==_0x53f822){_0x4bfa04['body'][_0x63a0('0x6d')]=_0x53f822+0x1;}else if(_0x5824e0>_0x53f822){_0x4bfa04[_0x63a0('0x5f')]['internal']=_0x5824e0;}else{return db[_0x63a0('0x53')][_0x63a0('0x45')](_0x63a0('0x72'),{'type':db['sequelize'][_0x63a0('0x73')][_0x63a0('0x74')]})['then'](function(_0x956c67){if(_0x956c67&&_0x956c67[_0x63a0('0x5c')]){for(var _0x4885a6=0x0,_0x1c4ae9=_0x956c67[_0x63a0('0x5c')];_0x4885a6<_0x1c4ae9&&_[_0x63a0('0x69')](_0x4bfa04['body']['internal']);_0x4885a6++){if(_0x5824e0<=_0x956c67[_0x4885a6][_0x63a0('0x75')]){_0x4bfa04['body']['internal']=_0x956c67[_0x4885a6][_0x63a0('0x75')];}else if(_0x5824e0>_0x956c67[_0x4885a6][_0x63a0('0x75')]&&_0x5824e0<=_0x956c67[_0x4885a6]['to']){_0x4bfa04['body']['internal']=_0x5824e0;}}}if(_[_0x63a0('0x69')](_0x4bfa04[_0x63a0('0x5f')][_0x63a0('0x6d')])){_0x4bfa04['body'][_0x63a0('0x6d')]=_0x53f822+0x1;}});}}});}})['then'](function(){if(_0x4bfa04[_0x63a0('0x5f')][_0x63a0('0x76')]){_0x4bfa04['body'][_0x63a0('0x77')]=_0x4bfa04[_0x63a0('0x5f')][_0x63a0('0x6d')];_0x4bfa04[_0x63a0('0x5f')][_0x63a0('0x78')]={'mailbox':_0x4bfa04['body'][_0x63a0('0x6d')],'password':_0x4bfa04[_0x63a0('0x5f')]['password'],'fullname':_0x4bfa04[_0x63a0('0x5f')][_0x63a0('0x79')],'email':_0x4bfa04['body'][_0x63a0('0x7a')]};}if(_0x4bfa04[_0x63a0('0x5f')]&&_0x4bfa04[_0x63a0('0x5f')][_0x63a0('0x3b')]===_0x63a0('0x63')){_0x4bfa04[_0x63a0('0x5f')][_0x63a0('0x7b')]=[_0x63a0('0x7c'),_0x63a0('0x7d'),_0x63a0('0x7e'),_0x63a0('0x7f'),_0x63a0('0x80'),'105',_0x63a0('0x81'),_0x63a0('0x82'),_0x63a0('0x83'),_0x63a0('0x84'),_0x63a0('0x85'),_0x63a0('0x86')];}return db[_0x63a0('0x3f')]['create'](_0x4bfa04[_0x63a0('0x5f')],{'include':[{'model':db[_0x63a0('0x78')],'as':_0x63a0('0x78')}]});})[_0x63a0('0x1d')](function(_0x1e8315){if(_0x4bfa04[_0x63a0('0x5f')][_0x63a0('0x3b')]===_0x63a0('0x32'))return _0x1e8315;var _0xa92092=_0x4bfa04[_0x63a0('0x32')][_0x63a0('0x87')]({'plain':!![]});if(!_0xa92092)throw new Error(_0x63a0('0x88'));if(_0xa92092[_0x63a0('0x3b')]===_0x63a0('0x32')){var _0x562389=_0x1e8315[_0x63a0('0x87')]({'plain':!![]});var _0x2fa036=[{'name':_0x63a0('0x33'),'value':'agent'},{'name':_0x63a0('0x34'),'value':_0x63a0('0x35')}];var _0x1d585b=_[_0x63a0('0x3a')](_0x2fa036,[_0x63a0('0x38'),_0x562389[_0x63a0('0x3b')]])['name'];return db[_0x63a0('0x89')][_0x63a0('0x3a')]({'where':{'name':_0x1d585b,'userProfileId':_0xa92092[_0x63a0('0x8a')]},'raw':!![]})['then'](function(_0x7f146e){if(_0x7f146e&&_0x7f146e[_0x63a0('0x8b')]===0x0){return db[_0x63a0('0x3d')][_0x63a0('0x8c')]({'name':_0x562389['name'],'resourceId':_0x562389['id'],'type':_0x7f146e['name'],'sectionId':_0x7f146e['id']},{})[_0x63a0('0x1d')](function(){return _0x1e8315;});}else{return _0x1e8315;}})[_0x63a0('0x26')](function(_0x5ea9f9){logger[_0x63a0('0x23')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x5ea9f9);throw _0x5ea9f9;});}return _0x1e8315;})['then'](respondWithResult(_0x1e5ea3,0xc9))[_0x63a0('0x26')](handleError(_0x1e5ea3,null));};exports[_0x63a0('0x8d')]=function(_0x3534f4,_0x3000df,_0x587cdc){var _0xbe414c=![];if(_0x3534f4['body']['id']){delete _0x3534f4['body']['id'];}if(!_[_0x63a0('0x69')](_0x3534f4[_0x63a0('0x5f')][_0x63a0('0x8e')])){if(_0x3534f4[_0x63a0('0x5f')]['oldPassword']===_0x3534f4['body'][_0x63a0('0x8f')]){throw new Error(_0x63a0('0x90'));}}return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x3534f4[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](function(_0x23cf98){if(_0x23cf98){if(_0x23cf98['id']==_0x3534f4[_0x63a0('0x32')]['id']){if(!_0x3534f4[_0x63a0('0x5f')][_0x63a0('0x8e')]||!_0x3534f4['body'][_0x63a0('0x8f')]){throw new db[(_0x63a0('0x91'))][(_0x63a0('0x92'))](_0x63a0('0x93'));}if(!_0x23cf98[_0x63a0('0x94')](_0x3534f4[_0x63a0('0x5f')][_0x63a0('0x8e')])){throw new db[(_0x63a0('0x91'))][(_0x63a0('0x92'))](_0x63a0('0x95'));}if(_0x3534f4['body'][_0x63a0('0x8e')]==_0x3534f4[_0x63a0('0x5f')][_0x63a0('0x8f')]){throw new db[(_0x63a0('0x91'))][(_0x63a0('0x92'))](_0x63a0('0x96'));}return _0x23cf98;}else if(_0x3534f4['user']['role']==_0x63a0('0x97')){if(!_0x3534f4['body']['newPassword']){throw new db[(_0x63a0('0x91'))][(_0x63a0('0x92'))](_0x63a0('0x98'));}return _0x23cf98;}else if(_0x3534f4[_0x63a0('0x32')][_0x63a0('0x3b')]=='user'){if(!_0x3534f4[_0x63a0('0x5f')][_0x63a0('0x8f')]){throw new db[(_0x63a0('0x91'))][(_0x63a0('0x92'))](_0x63a0('0x98'));}if(_0x23cf98['role']!=_0x63a0('0x63')){throw new db['Sequelize'][(_0x63a0('0x92'))]('Unauthorized');}return _0x23cf98;}else{throw new db['Sequelize'][(_0x63a0('0x92'))](_0x63a0('0x99'));}}return null;})[_0x63a0('0x1d')](handleEntityNotFound(_0x3000df,null))['then'](function(_0x97044a){return db['Setting'][_0x63a0('0x9a')]({'attributes':['id','securePassword']})[_0x63a0('0x1d')](function(_0xc04a0f){_0xbe414c=_0xc04a0f[_0x63a0('0x70')];return checkPasswordPattern(_0x97044a,_0x3534f4[_0x63a0('0x5f')][_0x63a0('0x8f')],_0xbe414c);});})[_0x63a0('0x1d')](saveUpdates({'password':_0x3534f4['body'][_0x63a0('0x8f')],'passwordResetAt':_0x3534f4[_0x63a0('0x32')]['id']==_0x3534f4[_0x63a0('0x59')]['id']?moment():null},null))[_0x63a0('0x1d')](respondWithResult(_0x3000df,null))[_0x63a0('0x26')](handleError(_0x3000df,null));};exports[_0x63a0('0x9b')]=function(_0x57a1a4,_0x3e0940,_0x34505d){var _0x3f1dce=_0x57a1a4[_0x63a0('0x5f')]['channel'];return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x57a1a4[_0x63a0('0x59')]['id']},'attributes':['id',_0x63a0('0x3c'),_0x63a0('0x3b'),'online',_0x63a0('0x9c'),_0x63a0('0x9d'),_0x63a0('0x9e')]})[_0x63a0('0x1d')](handleEntityNotFound(_0x3e0940,null))['then'](function(_0x3efa95){if(_0x3efa95){if(!utils[_0x63a0('0x9f')](_0x3f1dce)){throw new db[(_0x63a0('0x91'))]['ValidationError'](_0x63a0('0xa0'));}return _0x3efa95[_0x63a0('0xa1')+_[_0x63a0('0xa2')](_0x3f1dce['toLowerCase']())+'Queues'](_0x57a1a4[_0x63a0('0x5f')][_0x63a0('0x62')],{'penalty':_0x57a1a4[_0x63a0('0x5f')][_0x63a0('0xa3')]||0x0})[_0x63a0('0xa4')](function(_0x10943e){for(var _0x2ef427=0x0;_0x2ef427<_0x57a1a4[_0x63a0('0x5f')][_0x63a0('0x62')][_0x63a0('0x5c')];_0x2ef427+=0x1){var _0x5975cc={'UserId':_0x57a1a4[_0x63a0('0x59')]['id']};_0x5975cc[_[_0x63a0('0xa2')](_0x3f1dce[_0x63a0('0xa5')]())+_0x63a0('0xa6')]=_0x57a1a4[_0x63a0('0x5f')][_0x63a0('0x62')][_0x2ef427];socket[_0x63a0('0xa7')](_0x63a0('0x32')+_['capitalize'](_0x3f1dce[_0x63a0('0xa5')]())+_0x63a0('0xa8'),_0x5975cc);}return _0x10943e;})[_0x63a0('0x1d')](function(){if(_0x3f1dce===_0x63a0('0xa9')){return db[_0x63a0('0xaa')]['findAll']({'where':{'id':_0x57a1a4['body'][_0x63a0('0x62')]||[]},'raw':!![],'attributes':['id',_0x63a0('0x3c')]});}})[_0x63a0('0x1d')](function(_0x2daddf){var _0x9baf56=_0x3efa95[_0x63a0('0x87')]({'plain':!![]});var _0x455b93=[];if(_0x3f1dce===_0x63a0('0xa9')&&_0x9baf56['role']==='agent'&&_0x9baf56[_0x63a0('0xab')]){for(var _0x158f1d=0x0;_0x158f1d<_0x2daddf[_0x63a0('0x5c')];_0x158f1d+=0x1){_0x455b93['push']({'membername':_0x9baf56[_0x63a0('0x3c')],'UserId':_0x9baf56['id'],'queue_name':_0x2daddf[_0x158f1d][_0x63a0('0x3c')],'VoiceQueueId':_0x2daddf[_0x158f1d]['id'],'interface':_[_0x63a0('0x69')](_0x9baf56[_0x63a0('0x9e')])?util[_0x63a0('0x6b')]('SIP/%s',_0x9baf56[_0x63a0('0x3c')]):_0x9baf56[_0x63a0('0x9e')],'paused':_0x9baf56[_0x63a0('0x9d')]||![],'penalty':_0x57a1a4[_0x63a0('0x5f')][_0x63a0('0xa3')]||0x0});}return BPromise['each'](_0x455b93,function(_0x35af40){return db[_0x63a0('0xac')][_0x63a0('0xad')](_0x35af40);});}return _0x3efa95;});}})[_0x63a0('0x1d')](respondWithStatusCode(_0x3e0940,null))[_0x63a0('0x26')](handleError(_0x3e0940,null));};exports[_0x63a0('0xae')]=function(_0x2d8dea,_0x4d9663,_0x57a64f){var _0x1abcbe;return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x2d8dea['params']['id']},'attributes':['id',_0x63a0('0x3c'),'role']})['then'](handleEntityNotFound(_0x4d9663,null))[_0x63a0('0x1d')](function(_0x1e333c){if(_0x1e333c){_0x1abcbe=_0x1e333c;if(!_0x2d8dea[_0x63a0('0x45')][_0x63a0('0xaf')]||!utils[_0x63a0('0x9f')](_0x2d8dea[_0x63a0('0x45')][_0x63a0('0xaf')])){throw new db[(_0x63a0('0x91'))][(_0x63a0('0x92'))]('Unknown\x20channel');}return _0x1e333c[_0x63a0('0xb0')+_['capitalize'](_0x2d8dea['query']['channel'][_0x63a0('0xa5')]())+'Queues'](_0x2d8dea[_0x63a0('0x45')][_0x63a0('0x62')]);}})[_0x63a0('0x1d')](function(_0x4af8f8){for(var _0x53962a=0x0;_0x53962a<_0x2d8dea[_0x63a0('0x45')]['ids'][_0x63a0('0x5c')];_0x53962a+=0x1){var _0x1b7599={'UserId':_0x2d8dea[_0x63a0('0x59')]['id']};_0x1b7599[_['capitalize'](_0x2d8dea[_0x63a0('0x45')][_0x63a0('0xaf')][_0x63a0('0xa5')]())+'QueueId']=_0x2d8dea[_0x63a0('0x45')]['ids'][_0x53962a];socket['emit'](_0x63a0('0x32')+_['capitalize'](_0x2d8dea[_0x63a0('0x45')][_0x63a0('0xaf')][_0x63a0('0xa5')]())+_0x63a0('0xb1'),_0x1b7599);}return _0x4af8f8;})[_0x63a0('0x1d')](function(){if(_0x2d8dea['query'][_0x63a0('0xaf')]===_0x63a0('0xa9')){return db['UserVoiceQueueRt'][_0x63a0('0x30')]({'where':{'UserId':_0x2d8dea[_0x63a0('0x59')]['id'],'VoiceQueueId':_0x2d8dea[_0x63a0('0x45')][_0x63a0('0x62')]},'individualHooks':!![]})['then'](function(){return _0x1abcbe;});}return _0x1abcbe;})['then'](respondWithStatusCode(_0x4d9663,null))[_0x63a0('0x26')](handleError(_0x4d9663,null));};exports[_0x63a0('0xb2')]=function(_0x4974d8,_0x95795c,_0x2e9394){_0x4974d8[_0x63a0('0x5f')][_0x63a0('0xb3')]=_0x4974d8[_0x63a0('0xb4')]['filename'];return db[_0x63a0('0x3f')]['find']({'where':{'id':_0x4974d8[_0x63a0('0x59')]['id']}})['then'](handleEntityNotFound(_0x95795c,null))['then'](saveUpdates(_0x4974d8[_0x63a0('0x5f')],null))[_0x63a0('0x1d')](respondWithResult(_0x95795c,null))[_0x63a0('0x26')](handleError(_0x95795c,null));};exports[_0x63a0('0xb5')]=function(_0xb4f418,_0x52256b,_0x3bda0e){var _0x1a4fe4=path[_0x63a0('0xb6')](config['root'],'server/files/images/logos/default_profile.png');return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0xb4f418[_0x63a0('0x59')]['id']},'attributes':['id',_0x63a0('0xb3')],'raw':!![]})[_0x63a0('0x1d')](handleEntityNotFound(_0x52256b,null))['then'](function(_0x15d6c1){if(_0x15d6c1){if(_[_0x63a0('0x69')](_0x15d6c1[_0x63a0('0xb3')])){return _0x52256b[_0x63a0('0xb7')](_0x1a4fe4);}else{if(!fs[_0x63a0('0xb8')](path[_0x63a0('0xb6')](config['root'],_0x63a0('0xb9'),_0x15d6c1[_0x63a0('0xb3')]))){return _0x52256b[_0x63a0('0xb7')](_0x1a4fe4);}return _0x52256b[_0x63a0('0xb7')](path[_0x63a0('0xb6')](config[_0x63a0('0xba')],_0x63a0('0xb9'),_0x15d6c1[_0x63a0('0xb3')]));}}})[_0x63a0('0x26')](handleError(_0x52256b,null));};exports['getContacts']=function(_0x28e6f4,_0x2b2efe,_0x5465ef){var _0x1baeae={};var _0x4e434b={};var _0x485fef;var _0x55d2a3;return db[_0x63a0('0x3f')][_0x63a0('0x9a')]({'where':{'id':_0x28e6f4[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x2b2efe,null))['then'](function(_0x45cbc1){if(_0x45cbc1){_0x485fef=_0x45cbc1;_0x4e434b['model']=_[_0x63a0('0x43')](db['CmContact'][_0x63a0('0x40')]);_0x4e434b[_0x63a0('0x45')]=_[_0x63a0('0x43')](_0x28e6f4[_0x63a0('0x45')]);_0x4e434b[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x4e434b[_0x63a0('0x41')],_0x4e434b['query']);_0x1baeae['attributes']=_[_0x63a0('0x5b')](_0x4e434b[_0x63a0('0x41')],qs['fields'](_0x28e6f4[_0x63a0('0x45')]['fields']));_0x1baeae[_0x63a0('0x48')]=_0x1baeae[_0x63a0('0x48')][_0x63a0('0x5c')]?_0x1baeae[_0x63a0('0x48')]:_0x4e434b[_0x63a0('0x41')];_0x1baeae[_0x63a0('0xbb')]=qs[_0x63a0('0x4c')](_0x28e6f4[_0x63a0('0x45')][_0x63a0('0x4c')]);_0x1baeae[_0x63a0('0x4e')]=qs['filters'](_[_0x63a0('0x4d')](_0x28e6f4['query'],_0x4e434b[_0x63a0('0x46')]));if(_0x28e6f4[_0x63a0('0x45')]['filter']){_0x1baeae['where']=_['merge'](_0x1baeae[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0x1baeae[_0x63a0('0x48')],function(_0x422568){var _0x41630c={};_0x41630c[_0x422568]={'$like':'%'+_0x28e6f4['query'][_0x63a0('0x36')]+'%'};return _0x41630c;})});}_0x1baeae=_['merge']({},_0x1baeae,_0x28e6f4['options']);return _0x485fef['getContacts'](_0x1baeae);}})[_0x63a0('0x1d')](function(_0x5f2bac){if(_0x5f2bac){_0x55d2a3=_0x5f2bac[_0x63a0('0x5c')];if(_0x28e6f4['query'][_0x63a0('0x49')](_0x63a0('0x57'))){_0x1baeae[_0x63a0('0x58')]=[{'model':db[_0x63a0('0xbc')],'as':_0x63a0('0xbd'),'required':![]},{'model':db[_0x63a0('0xbe')],'as':_0x63a0('0xbf'),'attributes':['id',_0x63a0('0x3c'),'color'],'where':_0x28e6f4['query'][_0x63a0('0xc0')]?{'id':_0x28e6f4[_0x63a0('0x45')]['tag']}:undefined,'required':_0x28e6f4[_0x63a0('0x45')][_0x63a0('0xc0')]?!![]:![]}];}if(!_0x28e6f4[_0x63a0('0x45')]['hasOwnProperty']('nolimit')){_0x1baeae[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x28e6f4['query'][_0x63a0('0x4b')]);_0x1baeae[_0x63a0('0x2b')]=qs['offset'](_0x28e6f4[_0x63a0('0x45')][_0x63a0('0x2b')]);}return _0x485fef[_0x63a0('0xc1')](_0x1baeae);}})['then'](function(_0x297ffe){if(_0x297ffe){return _0x297ffe?{'count':_0x55d2a3,'rows':_0x297ffe}:null;}})[_0x63a0('0x1d')](respondWithResult(_0x2b2efe,null))['catch'](handleError(_0x2b2efe,null));};exports['getQueues']=function(_0x37136d,_0x224a93,_0x1470d2){var _0x387cdd;var _0x26b108;var _0x39b1f6={};var _0x415db6;return db['User'][_0x63a0('0x9a')]({'where':{'id':_0x37136d[_0x63a0('0x59')]['id']},'attributes':['id','name','role']})['then'](handleEntityNotFound(_0x224a93,null))['then'](function(_0x30407a){if(!utils[_0x63a0('0x9f')](_0x37136d[_0x63a0('0x45')]['channel'])){throw new db[(_0x63a0('0x91'))][(_0x63a0('0x92'))](_0x63a0('0xa0'));}_0x387cdd=_0x30407a;var _0x4d1601={};_0x4d1601[_0x63a0('0x41')]=_['keys'](db[_[_0x63a0('0xa2')](_0x37136d[_0x63a0('0x45')][_0x63a0('0xaf')])+_0x63a0('0xc2')][_0x63a0('0x40')]);_0x4d1601['query']=_[_0x63a0('0x43')](_0x37136d['query']);_0x4d1601[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x4d1601[_0x63a0('0x41')],_0x4d1601['query']);_0x39b1f6[_0x63a0('0x48')]=_['intersection'](_0x4d1601[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0x37136d[_0x63a0('0x45')][_0x63a0('0x47')]));_0x39b1f6[_0x63a0('0x48')]=_0x39b1f6[_0x63a0('0x48')][_0x63a0('0x5c')]?_0x39b1f6['attributes']:_0x4d1601[_0x63a0('0x41')];_0x39b1f6['order']=qs[_0x63a0('0x4c')](_0x37136d[_0x63a0('0x45')][_0x63a0('0x4c')]);_0x39b1f6[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0x37136d[_0x63a0('0x45')],_0x4d1601[_0x63a0('0x46')]));if(_0x37136d[_0x63a0('0x45')][_0x63a0('0x36')]){_0x39b1f6[_0x63a0('0x4e')]=_[_0x63a0('0x4f')](_0x39b1f6[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0x39b1f6['attributes'],function(_0x439ca3){var _0x2d274f={};_0x2d274f[_0x439ca3]={'$like':'%'+_0x37136d[_0x63a0('0x45')][_0x63a0('0x36')]+'%'};return _0x2d274f;})});}_0x39b1f6=_[_0x63a0('0x4f')]({},_0x39b1f6,_0x37136d[_0x63a0('0x55')]);switch(_0x387cdd[_0x63a0('0x3b')]){case _0x63a0('0x97'):return db[_[_0x63a0('0xa2')](_0x37136d[_0x63a0('0x45')]['channel'])+_0x63a0('0xc2')][_0x63a0('0xc3')](_0x39b1f6);case _0x63a0('0x32'):case _0x63a0('0x63'):return _0x387cdd[_0x63a0('0x87')+_[_0x63a0('0xa2')](_0x37136d[_0x63a0('0x45')][_0x63a0('0xaf')])+_0x63a0('0xc4')](_0x39b1f6);default:throw new db[(_0x63a0('0x91'))][(_0x63a0('0x92'))]('Unknown\x20role');}})[_0x63a0('0x1d')](function(_0x572dc4){_0x415db6=_0x572dc4[_0x63a0('0x5c')];if(!_0x37136d['query'][_0x63a0('0x49')](_0x63a0('0x4a'))){_0x39b1f6[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x37136d[_0x63a0('0x45')][_0x63a0('0x4b')]);_0x39b1f6[_0x63a0('0x2b')]=qs[_0x63a0('0x2b')](_0x37136d[_0x63a0('0x45')][_0x63a0('0x2b')]);}switch(_0x387cdd['role']){case _0x63a0('0x97'):return db[_['capitalize'](_0x37136d[_0x63a0('0x45')][_0x63a0('0xaf')])+'Queue'][_0x63a0('0xc3')](_0x39b1f6);case _0x63a0('0x32'):case'agent':return _0x387cdd['get'+_[_0x63a0('0xa2')](_0x37136d['query']['channel'])+'Queues'](_0x39b1f6);}})[_0x63a0('0x1d')](function(_0x17de5e){return{'count':_0x415db6,'rows':_0x17de5e};})[_0x63a0('0x1d')](respondWithResult(_0x224a93,null))[_0x63a0('0x26')](handleError(_0x224a93,null));};exports[_0x63a0('0xc5')]=function(_0x133ba4,_0x18fe27,_0x3df42d){var _0x2e4172={};var _0x2c9b57={};var _0x286e73;var _0x3f05e4;return db[_0x63a0('0x3f')][_0x63a0('0x9a')]({'where':{'id':_0x133ba4[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x18fe27,null))['then'](function(_0x26bdbe){if(_0x26bdbe){_0x286e73=_0x26bdbe;_0x2c9b57[_0x63a0('0x41')]=_[_0x63a0('0x43')](db[_0x63a0('0xac')]['rawAttributes']);_0x2c9b57[_0x63a0('0x45')]=_[_0x63a0('0x43')](_0x133ba4[_0x63a0('0x45')]);_0x2c9b57['filters']=_[_0x63a0('0x5b')](_0x2c9b57[_0x63a0('0x41')],_0x2c9b57[_0x63a0('0x45')]);_0x2e4172[_0x63a0('0x48')]=_[_0x63a0('0x5b')](_0x2c9b57[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0x133ba4[_0x63a0('0x45')][_0x63a0('0x47')]));_0x2e4172['attributes']=_0x2e4172['attributes'][_0x63a0('0x5c')]?_0x2e4172[_0x63a0('0x48')]:_0x2c9b57['model'];_0x2e4172['order']=qs[_0x63a0('0x4c')](_0x133ba4[_0x63a0('0x45')][_0x63a0('0x4c')]);_0x2e4172[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0x133ba4[_0x63a0('0x45')],_0x2c9b57[_0x63a0('0x46')]));if(_0x133ba4[_0x63a0('0x45')][_0x63a0('0x36')]){_0x2e4172[_0x63a0('0x4e')]=_[_0x63a0('0x4f')](_0x2e4172[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0x2e4172[_0x63a0('0x48')],function(_0x4d6158){var _0x518d67={};_0x518d67[_0x4d6158]={'$like':'%'+_0x133ba4['query']['filter']+'%'};return _0x518d67;})});}_0x2e4172=_[_0x63a0('0x4f')]({},_0x2e4172,_0x133ba4[_0x63a0('0x55')]);return _0x286e73['getVoiceQueuesRt'](_0x2e4172);}})[_0x63a0('0x1d')](function(_0x51f7cd){if(_0x51f7cd){_0x3f05e4=_0x51f7cd[_0x63a0('0x5c')];if(!_0x133ba4[_0x63a0('0x45')][_0x63a0('0x49')]('nolimit')){_0x2e4172[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x133ba4[_0x63a0('0x45')][_0x63a0('0x4b')]);_0x2e4172[_0x63a0('0x2b')]=qs['offset'](_0x133ba4[_0x63a0('0x45')][_0x63a0('0x2b')]);}return _0x286e73[_0x63a0('0xc5')](_0x2e4172);}})[_0x63a0('0x1d')](function(_0x1f0078){if(_0x1f0078){return _0x1f0078?{'count':_0x3f05e4,'rows':_0x1f0078}:null;}})[_0x63a0('0x1d')](respondWithResult(_0x18fe27,null))[_0x63a0('0x26')](handleError(_0x18fe27,null));};exports['getGroups']=function(_0xdc047f,_0x5accb3,_0x2cf6bc){var _0x2bc464={};var _0x6739a5={};var _0x2f5b91;var _0x1aec99;return db['User'][_0x63a0('0x9a')]({'where':{'id':_0xdc047f[_0x63a0('0x59')]['id']}})['then'](handleEntityNotFound(_0x5accb3,null))[_0x63a0('0x1d')](function(_0x2b4fa4){if(_0x2b4fa4){_0x2f5b91=_0x2b4fa4;_0x6739a5[_0x63a0('0x41')]=_['keys'](db[_0x63a0('0xc6')][_0x63a0('0x40')]);_0x6739a5['query']=_['keys'](_0xdc047f[_0x63a0('0x45')]);_0x6739a5['filters']=_[_0x63a0('0x5b')](_0x6739a5['model'],_0x6739a5[_0x63a0('0x45')]);_0x2bc464[_0x63a0('0x48')]=_[_0x63a0('0x5b')](_0x6739a5[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0xdc047f['query'][_0x63a0('0x47')]));_0x2bc464[_0x63a0('0x48')]=_0x2bc464['attributes'][_0x63a0('0x5c')]?_0x2bc464[_0x63a0('0x48')]:_0x6739a5['model'];_0x2bc464[_0x63a0('0xbb')]=qs['sort'](_0xdc047f[_0x63a0('0x45')][_0x63a0('0x4c')]);_0x2bc464[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0xdc047f[_0x63a0('0x45')],_0x6739a5[_0x63a0('0x46')]));if(_0xdc047f[_0x63a0('0x45')][_0x63a0('0x36')]){_0x2bc464[_0x63a0('0x4e')]=_[_0x63a0('0x4f')](_0x2bc464[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0x2bc464['attributes'],function(_0x1e42da){var _0x484106={};_0x484106[_0x1e42da]={'$like':'%'+_0xdc047f[_0x63a0('0x45')]['filter']+'%'};return _0x484106;})});}_0x2bc464=_[_0x63a0('0x4f')]({},_0x2bc464,_0xdc047f['options']);return _0x2f5b91['getGroups'](_0x2bc464);}})[_0x63a0('0x1d')](function(_0x3f25bf){if(_0x3f25bf){_0x1aec99=_0x3f25bf['length'];if(!_0xdc047f[_0x63a0('0x45')][_0x63a0('0x49')](_0x63a0('0x4a'))){_0x2bc464[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0xdc047f[_0x63a0('0x45')]['limit']);_0x2bc464[_0x63a0('0x2b')]=qs['offset'](_0xdc047f[_0x63a0('0x45')][_0x63a0('0x2b')]);}return _0x2f5b91[_0x63a0('0xc7')](_0x2bc464);}})[_0x63a0('0x1d')](function(_0x2230c6){if(_0x2230c6){return _0x2230c6?{'count':_0x1aec99,'rows':_0x2230c6}:null;}})['then'](respondWithResult(_0x5accb3,null))[_0x63a0('0x26')](handleError(_0x5accb3,null));};exports['getRecordings']=function(_0x444232,_0x4bb00f,_0x3f2112){var _0x1f482a={'raw':!![],'where':{}};var _0x516e42={};var _0x3b0d5e={'count':0x0,'rows':[]};return db[_0x63a0('0x3f')][_0x63a0('0x9a')]({'where':{'id':_0x444232[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x4bb00f,null))[_0x63a0('0x1d')](function(_0x4f810a){if(_0x4f810a){_0x516e42[_0x63a0('0x41')]=_['keys'](db[_0x63a0('0xc8')][_0x63a0('0x40')]);_0x516e42[_0x63a0('0x45')]=_[_0x63a0('0x43')](_0x444232[_0x63a0('0x45')]);_0x516e42['filters']=_[_0x63a0('0x5b')](_0x516e42[_0x63a0('0x41')],_0x516e42['query']);_0x1f482a[_0x63a0('0x48')]=_['intersection'](_0x516e42['model'],qs['fields'](_0x444232[_0x63a0('0x45')][_0x63a0('0x47')]));_0x1f482a[_0x63a0('0x48')]=_0x1f482a[_0x63a0('0x48')][_0x63a0('0x5c')]?_0x1f482a['attributes']:_0x516e42['model'];if(!_0x444232[_0x63a0('0x45')][_0x63a0('0x49')]('nolimit')){_0x1f482a[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x444232['query'][_0x63a0('0x4b')]);_0x1f482a[_0x63a0('0x2b')]=qs[_0x63a0('0x2b')](_0x444232[_0x63a0('0x45')][_0x63a0('0x2b')]);}_0x1f482a['order']=qs[_0x63a0('0x4c')](_0x444232['query'][_0x63a0('0x4c')]);_0x1f482a['where']=qs[_0x63a0('0x46')](_['pick'](_0x444232[_0x63a0('0x45')],_0x516e42[_0x63a0('0x46')]));_0x1f482a[_0x63a0('0x4e')]['UserId']=_0x4f810a['id'];if(_0x444232['query']['filter']){_0x1f482a[_0x63a0('0x4e')]=_[_0x63a0('0x4f')](_0x1f482a[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0x1f482a['attributes'],function(_0x275ae5){var _0x4b7ba8={};_0x4b7ba8[_0x275ae5]={'$like':'%'+_0x444232[_0x63a0('0x45')][_0x63a0('0x36')]+'%'};return _0x4b7ba8;})});}_0x1f482a=_['merge']({},_0x1f482a,_0x444232[_0x63a0('0x55')]);return db[_0x63a0('0xc8')][_0x63a0('0x56')]({'where':_0x1f482a[_0x63a0('0x4e')]})[_0x63a0('0x1d')](function(_0xea8180){_0x3b0d5e['count']=_0xea8180;if(_0x444232[_0x63a0('0x45')][_0x63a0('0x57')]){_0x1f482a[_0x63a0('0x58')]=[{'all':!![]}];}return db[_0x63a0('0xc8')][_0x63a0('0xc3')](_0x1f482a);})['then'](function(_0x559a9b){_0x3b0d5e[_0x63a0('0xc9')]=_0x559a9b;return _0x3b0d5e;});}})[_0x63a0('0x1d')](respondWithFilteredResult(_0x4bb00f,_0x1f482a))[_0x63a0('0x26')](handleError(_0x4bb00f,null));};exports[_0x63a0('0xca')]=function(_0x558992,_0x7dc6a3,_0x8b1cfc){var _0x555dd5={'raw':!![],'where':{}};var _0x177b46={};var _0x51d551={'count':0x0,'rows':[]};return db[_0x63a0('0x3f')][_0x63a0('0x9a')]({'where':{'id':_0x558992[_0x63a0('0x59')]['id']}})['then'](handleEntityNotFound(_0x7dc6a3,null))[_0x63a0('0x1d')](function(_0xc725c4){if(_0xc725c4){_0x177b46[_0x63a0('0x41')]=_[_0x63a0('0x43')](db[_0x63a0('0xcb')][_0x63a0('0x40')]);_0x177b46['query']=_['keys'](_0x558992[_0x63a0('0x45')]);_0x177b46[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x177b46[_0x63a0('0x41')],_0x177b46[_0x63a0('0x45')]);_0x555dd5[_0x63a0('0x48')]=_[_0x63a0('0x5b')](_0x177b46[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0x558992[_0x63a0('0x45')]['fields']));_0x555dd5[_0x63a0('0x48')]=_0x555dd5[_0x63a0('0x48')]['length']?_0x555dd5['attributes']:_0x177b46[_0x63a0('0x41')];if(!_0x558992[_0x63a0('0x45')][_0x63a0('0x49')](_0x63a0('0x4a'))){_0x555dd5[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x558992[_0x63a0('0x45')][_0x63a0('0x4b')]);_0x555dd5[_0x63a0('0x2b')]=qs[_0x63a0('0x2b')](_0x558992[_0x63a0('0x45')][_0x63a0('0x2b')]);}_0x555dd5[_0x63a0('0xbb')]=qs['sort'](_0x558992[_0x63a0('0x45')][_0x63a0('0x4c')]);_0x555dd5[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0x558992[_0x63a0('0x45')],_0x177b46['filters']));_0x555dd5['where'][_0x63a0('0xcc')]=_0xc725c4['id'];if(_0x558992[_0x63a0('0x45')]['filter']){_0x555dd5[_0x63a0('0x4e')]=_[_0x63a0('0x4f')](_0x555dd5[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0x555dd5[_0x63a0('0x48')],function(_0xa76261){var _0x35b5bd={};_0x35b5bd[_0xa76261]={'$like':'%'+_0x558992[_0x63a0('0x45')]['filter']+'%'};return _0x35b5bd;})});}_0x555dd5=_['merge']({},_0x555dd5,_0x558992[_0x63a0('0x55')]);return db[_0x63a0('0xcb')][_0x63a0('0x56')]({'where':_0x555dd5['where']})['then'](function(_0x563faa){_0x51d551[_0x63a0('0x56')]=_0x563faa;if(_0x558992['query'][_0x63a0('0x57')]){_0x555dd5[_0x63a0('0x58')]=[{'all':!![]}];}return db[_0x63a0('0xcb')][_0x63a0('0xc3')](_0x555dd5);})[_0x63a0('0x1d')](function(_0x2210f8){_0x51d551[_0x63a0('0xc9')]=_0x2210f8;return _0x51d551;});}})[_0x63a0('0x1d')](respondWithFilteredResult(_0x7dc6a3,_0x555dd5))[_0x63a0('0x26')](handleError(_0x7dc6a3,null));};exports[_0x63a0('0xcd')]=function(_0x49153d,_0x156afa,_0x12605f){var _0x3ed1b9={};var _0x5682f1={};var _0x4ea671;var _0x3bd755;return db[_0x63a0('0x3f')]['findOne']({'where':{'id':_0x49153d[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x156afa,null))[_0x63a0('0x1d')](function(_0x150a12){if(_0x150a12){_0x4ea671=_0x150a12;_0x5682f1['model']=_[_0x63a0('0x43')](db[_0x63a0('0xce')][_0x63a0('0x40')]);_0x5682f1['query']=_[_0x63a0('0x43')](_0x49153d['query']);_0x5682f1[_0x63a0('0x46')]=_['intersection'](_0x5682f1[_0x63a0('0x41')],_0x5682f1['query']);_0x3ed1b9['attributes']=_['intersection'](_0x5682f1[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0x49153d[_0x63a0('0x45')][_0x63a0('0x47')]));_0x3ed1b9[_0x63a0('0x48')]=_0x3ed1b9['attributes'][_0x63a0('0x5c')]?_0x3ed1b9[_0x63a0('0x48')]:_0x5682f1[_0x63a0('0x41')];_0x3ed1b9['order']=qs[_0x63a0('0x4c')](_0x49153d['query'][_0x63a0('0x4c')]);_0x3ed1b9[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0x49153d[_0x63a0('0x45')],_0x5682f1[_0x63a0('0x46')]));if(_0x49153d[_0x63a0('0x45')]['filter']){_0x3ed1b9[_0x63a0('0x4e')]=_[_0x63a0('0x4f')](_0x3ed1b9['where'],{'$or':_[_0x63a0('0x37')](_0x3ed1b9[_0x63a0('0x48')],function(_0x1eed40){var _0xa272a8={};_0xa272a8[_0x1eed40]={'$like':'%'+_0x49153d[_0x63a0('0x45')][_0x63a0('0x36')]+'%'};return _0xa272a8;})});}_0x3ed1b9=_[_0x63a0('0x4f')]({},_0x3ed1b9,_0x49153d['options']);return _0x4ea671['getChatInteractions'](_0x3ed1b9);}})[_0x63a0('0x1d')](function(_0x1ca676){if(_0x1ca676){_0x3bd755=_0x1ca676[_0x63a0('0x5c')];if(!_0x49153d[_0x63a0('0x45')][_0x63a0('0x49')](_0x63a0('0x4a'))){_0x3ed1b9[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x49153d['query']['limit']);_0x3ed1b9[_0x63a0('0x2b')]=qs[_0x63a0('0x2b')](_0x49153d['query'][_0x63a0('0x2b')]);}return _0x4ea671['getChatInteractions'](_0x3ed1b9);}})[_0x63a0('0x1d')](function(_0x412715){if(_0x412715){return _0x412715?{'count':_0x3bd755,'rows':_0x412715}:null;}})[_0x63a0('0x1d')](respondWithResult(_0x156afa,null))[_0x63a0('0x26')](handleError(_0x156afa,null));};exports[_0x63a0('0xcf')]=function(_0x157bf2,_0x5bdb49,_0x5663c9){var _0x51f16d={};var _0x1c3d8a={};var _0x3490d3;var _0x7f0683;return db[_0x63a0('0x3f')][_0x63a0('0x9a')]({'where':{'id':_0x157bf2[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x5bdb49,null))[_0x63a0('0x1d')](function(_0x39e5e5){if(_0x39e5e5){_0x3490d3=_0x39e5e5;_0x1c3d8a['model']=_[_0x63a0('0x43')](db['OpenchannelInteraction'][_0x63a0('0x40')]);_0x1c3d8a[_0x63a0('0x45')]=_[_0x63a0('0x43')](_0x157bf2[_0x63a0('0x45')]);_0x1c3d8a[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x1c3d8a[_0x63a0('0x41')],_0x1c3d8a[_0x63a0('0x45')]);_0x51f16d[_0x63a0('0x48')]=_[_0x63a0('0x5b')](_0x1c3d8a[_0x63a0('0x41')],qs['fields'](_0x157bf2[_0x63a0('0x45')]['fields']));_0x51f16d['attributes']=_0x51f16d[_0x63a0('0x48')][_0x63a0('0x5c')]?_0x51f16d[_0x63a0('0x48')]:_0x1c3d8a['model'];_0x51f16d[_0x63a0('0xbb')]=qs[_0x63a0('0x4c')](_0x157bf2['query'][_0x63a0('0x4c')]);_0x51f16d[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0x157bf2['query'],_0x1c3d8a[_0x63a0('0x46')]));if(_0x157bf2[_0x63a0('0x45')][_0x63a0('0x36')]){_0x51f16d[_0x63a0('0x4e')]=_[_0x63a0('0x4f')](_0x51f16d[_0x63a0('0x4e')],{'$or':_['map'](_0x51f16d[_0x63a0('0x48')],function(_0x2c00da){var _0x5e0247={};_0x5e0247[_0x2c00da]={'$like':'%'+_0x157bf2[_0x63a0('0x45')][_0x63a0('0x36')]+'%'};return _0x5e0247;})});}_0x51f16d=_[_0x63a0('0x4f')]({},_0x51f16d,_0x157bf2[_0x63a0('0x55')]);return _0x3490d3[_0x63a0('0xcf')](_0x51f16d);}})[_0x63a0('0x1d')](function(_0x26461d){if(_0x26461d){_0x7f0683=_0x26461d[_0x63a0('0x5c')];if(!_0x157bf2[_0x63a0('0x45')]['hasOwnProperty'](_0x63a0('0x4a'))){_0x51f16d[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x157bf2[_0x63a0('0x45')][_0x63a0('0x4b')]);_0x51f16d[_0x63a0('0x2b')]=qs[_0x63a0('0x2b')](_0x157bf2[_0x63a0('0x45')][_0x63a0('0x2b')]);}return _0x3490d3[_0x63a0('0xcf')](_0x51f16d);}})[_0x63a0('0x1d')](function(_0x2fa082){if(_0x2fa082){return _0x2fa082?{'count':_0x7f0683,'rows':_0x2fa082}:null;}})['then'](respondWithResult(_0x5bdb49,null))['catch'](handleError(_0x5bdb49,null));};exports['getMailInteractions']=function(_0x48dc6d,_0x5eed36,_0xe77346){var _0x35c2f9={'raw':!![],'where':{}};var _0x54b112={};var _0x239651={'count':0x0,'rows':[]};return db[_0x63a0('0x3f')][_0x63a0('0x9a')]({'where':{'id':_0x48dc6d['params']['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x5eed36,null))['then'](function(_0x2d90df){if(_0x2d90df){_0x54b112[_0x63a0('0x41')]=_[_0x63a0('0x43')](db[_0x63a0('0xd0')][_0x63a0('0x40')]);_0x54b112[_0x63a0('0x45')]=_[_0x63a0('0x43')](_0x48dc6d[_0x63a0('0x45')]);_0x54b112[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x54b112['model'],_0x54b112['query']);_0x35c2f9[_0x63a0('0x48')]=_['intersection'](_0x54b112[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0x48dc6d[_0x63a0('0x45')][_0x63a0('0x47')]));_0x35c2f9[_0x63a0('0x48')]=_0x35c2f9['attributes'][_0x63a0('0x5c')]?_0x35c2f9['attributes']:_0x54b112[_0x63a0('0x41')];if(!_0x48dc6d[_0x63a0('0x45')][_0x63a0('0x49')](_0x63a0('0x4a'))){_0x35c2f9[_0x63a0('0x4b')]=qs['limit'](_0x48dc6d[_0x63a0('0x45')][_0x63a0('0x4b')]);_0x35c2f9[_0x63a0('0x2b')]=qs['offset'](_0x48dc6d['query'][_0x63a0('0x2b')]);}_0x35c2f9[_0x63a0('0xbb')]=qs[_0x63a0('0x4c')](_0x48dc6d[_0x63a0('0x45')][_0x63a0('0x4c')]);_0x35c2f9[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0x48dc6d[_0x63a0('0x45')],_0x54b112[_0x63a0('0x46')]));_0x35c2f9[_0x63a0('0x4e')]['UserId']=_0x2d90df['id'];if(_0x48dc6d['query'][_0x63a0('0x36')]){_0x35c2f9[_0x63a0('0x4e')]=_['merge'](_0x35c2f9[_0x63a0('0x4e')],{'$or':_['map'](_0x35c2f9[_0x63a0('0x48')],function(_0x475487){var _0x448414={};_0x448414[_0x475487]={'$like':'%'+_0x48dc6d['query']['filter']+'%'};return _0x448414;})});}_0x35c2f9=_[_0x63a0('0x4f')]({},_0x35c2f9,_0x48dc6d[_0x63a0('0x55')]);return db['MailInteraction']['count']({'where':_0x35c2f9['where']})['then'](function(_0x56f275){_0x239651['count']=_0x56f275;if(_0x48dc6d[_0x63a0('0x45')][_0x63a0('0x57')]){_0x35c2f9[_0x63a0('0x58')]=[{'all':!![]}];}return db[_0x63a0('0xd0')][_0x63a0('0xc3')](_0x35c2f9);})['then'](function(_0x861019){_0x239651[_0x63a0('0xc9')]=_0x861019;return _0x239651;});}})[_0x63a0('0x1d')](respondWithFilteredResult(_0x5eed36,_0x35c2f9))['catch'](handleError(_0x5eed36,null));};exports['getSmsInteractions']=function(_0x4cd73f,_0x1be5d9,_0x18a905){var _0x2e2fa7={};var _0x9e1221={};var _0x22e1fd;var _0x31e3b1;return db['User'][_0x63a0('0x9a')]({'where':{'id':_0x4cd73f[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x1be5d9,null))[_0x63a0('0x1d')](function(_0x1bae38){if(_0x1bae38){_0x22e1fd=_0x1bae38;_0x9e1221['model']=_[_0x63a0('0x43')](db[_0x63a0('0xd1')][_0x63a0('0x40')]);_0x9e1221[_0x63a0('0x45')]=_[_0x63a0('0x43')](_0x4cd73f[_0x63a0('0x45')]);_0x9e1221[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x9e1221[_0x63a0('0x41')],_0x9e1221[_0x63a0('0x45')]);_0x2e2fa7[_0x63a0('0x48')]=_[_0x63a0('0x5b')](_0x9e1221[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0x4cd73f[_0x63a0('0x45')][_0x63a0('0x47')]));_0x2e2fa7[_0x63a0('0x48')]=_0x2e2fa7[_0x63a0('0x48')][_0x63a0('0x5c')]?_0x2e2fa7[_0x63a0('0x48')]:_0x9e1221[_0x63a0('0x41')];_0x2e2fa7['order']=qs[_0x63a0('0x4c')](_0x4cd73f[_0x63a0('0x45')][_0x63a0('0x4c')]);_0x2e2fa7[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_['pick'](_0x4cd73f[_0x63a0('0x45')],_0x9e1221[_0x63a0('0x46')]));if(_0x4cd73f[_0x63a0('0x45')][_0x63a0('0x36')]){_0x2e2fa7[_0x63a0('0x4e')]=_[_0x63a0('0x4f')](_0x2e2fa7[_0x63a0('0x4e')],{'$or':_['map'](_0x2e2fa7[_0x63a0('0x48')],function(_0x11848a){var _0x423253={};_0x423253[_0x11848a]={'$like':'%'+_0x4cd73f[_0x63a0('0x45')]['filter']+'%'};return _0x423253;})});}_0x2e2fa7=_[_0x63a0('0x4f')]({},_0x2e2fa7,_0x4cd73f[_0x63a0('0x55')]);return _0x22e1fd[_0x63a0('0xd2')](_0x2e2fa7);}})[_0x63a0('0x1d')](function(_0xebb5ee){if(_0xebb5ee){_0x31e3b1=_0xebb5ee[_0x63a0('0x5c')];if(!_0x4cd73f['query']['hasOwnProperty'](_0x63a0('0x4a'))){_0x2e2fa7[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x4cd73f['query']['limit']);_0x2e2fa7[_0x63a0('0x2b')]=qs[_0x63a0('0x2b')](_0x4cd73f[_0x63a0('0x45')][_0x63a0('0x2b')]);}return _0x22e1fd['getSmsInteractions'](_0x2e2fa7);}})['then'](function(_0x4ceebc){if(_0x4ceebc){return _0x4ceebc?{'count':_0x31e3b1,'rows':_0x4ceebc}:null;}})['then'](respondWithResult(_0x1be5d9,null))[_0x63a0('0x26')](handleError(_0x1be5d9,null));};exports[_0x63a0('0xd3')]=function(_0x49ce5e,_0x4ff094,_0x3ed4b1){var _0x2a0e27={};var _0x10e53e={};var _0x2db1ac;var _0x433efe;return db[_0x63a0('0x3f')][_0x63a0('0x9a')]({'where':{'id':_0x49ce5e[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x4ff094,null))[_0x63a0('0x1d')](function(_0x10fc09){if(_0x10fc09){_0x2db1ac=_0x10fc09;_0x10e53e[_0x63a0('0x41')]=_['keys'](db[_0x63a0('0xd4')]['rawAttributes']);_0x10e53e[_0x63a0('0x45')]=_[_0x63a0('0x43')](_0x49ce5e[_0x63a0('0x45')]);_0x10e53e[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x10e53e[_0x63a0('0x41')],_0x10e53e[_0x63a0('0x45')]);_0x2a0e27['attributes']=_[_0x63a0('0x5b')](_0x10e53e[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0x49ce5e['query'][_0x63a0('0x47')]));_0x2a0e27[_0x63a0('0x48')]=_0x2a0e27[_0x63a0('0x48')][_0x63a0('0x5c')]?_0x2a0e27[_0x63a0('0x48')]:_0x10e53e[_0x63a0('0x41')];_0x2a0e27['order']=qs['sort'](_0x49ce5e[_0x63a0('0x45')][_0x63a0('0x4c')]);_0x2a0e27[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0x49ce5e[_0x63a0('0x45')],_0x10e53e[_0x63a0('0x46')]));if(_0x49ce5e[_0x63a0('0x45')][_0x63a0('0x36')]){_0x2a0e27[_0x63a0('0x4e')]=_['merge'](_0x2a0e27['where'],{'$or':_[_0x63a0('0x37')](_0x2a0e27[_0x63a0('0x48')],function(_0x481229){var _0x2d2fac={};_0x2d2fac[_0x481229]={'$like':'%'+_0x49ce5e['query'][_0x63a0('0x36')]+'%'};return _0x2d2fac;})});}_0x2a0e27=_[_0x63a0('0x4f')]({},_0x2a0e27,_0x49ce5e[_0x63a0('0x55')]);return _0x2db1ac['getFaxInteractions'](_0x2a0e27);}})['then'](function(_0x480a77){if(_0x480a77){_0x433efe=_0x480a77[_0x63a0('0x5c')];if(!_0x49ce5e[_0x63a0('0x45')][_0x63a0('0x49')](_0x63a0('0x4a'))){_0x2a0e27['limit']=qs[_0x63a0('0x4b')](_0x49ce5e[_0x63a0('0x45')][_0x63a0('0x4b')]);_0x2a0e27['offset']=qs['offset'](_0x49ce5e[_0x63a0('0x45')][_0x63a0('0x2b')]);}return _0x2db1ac[_0x63a0('0xd3')](_0x2a0e27);}})['then'](function(_0x1fc625){if(_0x1fc625){return _0x1fc625?{'count':_0x433efe,'rows':_0x1fc625}:null;}})['then'](respondWithResult(_0x4ff094,null))['catch'](handleError(_0x4ff094,null));};exports['login']=function(_0x1d3ef7,_0x30cec4,_0x3278df){var _0x16811e;var _0x38d1cf;var _0xc5d65e;var _0x1b5be6=!_[_0x63a0('0x69')](_0x1d3ef7['params']['id'])?_0x1d3ef7['params']['id']:!_['isNil'](_0x1d3ef7[_0x63a0('0x32')]['id'])?_0x1d3ef7[_0x63a0('0x32')]['id']:null;return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x1b5be6,'role':'agent'},'attributes':['id',_0x63a0('0x3c'),_0x63a0('0xd5'),'mobile',_0x63a0('0x3b'),_0x63a0('0x6d'),'loginInPause']})[_0x63a0('0x1d')](handleEntityNotFound(_0x30cec4,null))[_0x63a0('0x1d')](function(_0x5179e8){if(_0x5179e8){_0x16811e=_0x5179e8;if(_0x1d3ef7[_0x63a0('0x5f')][_0x63a0('0x9e')]){_0xc5d65e=util['format'](_0x63a0('0xd6'),_0x16811e[_0x1d3ef7[_0x63a0('0x5f')][_0x63a0('0x9e')]]);}else if(_0x1d3ef7[_0x63a0('0x5f')][_0x63a0('0xd7')]){_0xc5d65e=util[_0x63a0('0x6b')](_0x63a0('0xd8'),_0x1d3ef7[_0x63a0('0x5f')]['intrf']);}else{_0xc5d65e=util[_0x63a0('0x6b')]('SIP/%s',_0x16811e['name']);}socket['to'](util[_0x63a0('0x6b')]('user:%s',_0x16811e[_0x63a0('0x3c')]))[_0x63a0('0xa7')]('user:forcelogout',{'ip':_0x1d3ef7[_0x63a0('0xd9')][_0x63a0('0xda')]||_0x1d3ef7[_0x63a0('0xdb')][_0x63a0('0xdc')]||_0x1d3ef7[_0x63a0('0xdd')][_0x63a0('0xdc')]||_0x1d3ef7[_0x63a0('0xdb')][_0x63a0('0xdd')][_0x63a0('0xdc')]});return db[_0x63a0('0xac')][_0x63a0('0x30')]({'where':{'membername':_0x16811e['name']},'individualHooks':!![]});}})[_0x63a0('0x1d')](function(_0x48dd7e){if(_0x16811e){return _0x16811e[_0x63a0('0xde')]({'raw':!![]});}})[_0x63a0('0x1d')](function(_0x54300a){var _0x21f34e=[];if(_0x54300a){_0x38d1cf=_0x54300a;if(_0x38d1cf[_0x63a0('0x5c')]){for(var _0xf33626=0x0;_0xf33626<_0x38d1cf[_0x63a0('0x5c')];_0xf33626++){_0x21f34e[_0x63a0('0xdf')]({'membername':_0x16811e['name'],'UserId':_0x16811e['id'],'queue_name':_0x38d1cf[_0xf33626][_0x63a0('0x3c')],'VoiceQueueId':_0x38d1cf[_0xf33626]['id'],'interface':_0xc5d65e,'paused':_0x16811e[_0x63a0('0x9c')]||![],'penalty':_0x38d1cf[_0xf33626][_0x63a0('0xe0')]||0x0});}return BPromise[_0x63a0('0xe1')](_0x21f34e,function(_0x2686c3){return db[_0x63a0('0xac')][_0x63a0('0xad')](_0x2686c3);});}}})[_0x63a0('0x1d')](function(){return db[_0x63a0('0xe2')][_0x63a0('0xc3')]({'where':{'membername':_0x16811e[_0x63a0('0x3c')],'exitAt':null}});})['then'](function(_0x2c2139){var _0x478575=[];_0x2c2139[_0x63a0('0xe3')](function(_0x2a4c05){_0x478575[_0x63a0('0xdf')](_0x2a4c05['update']({'exitAt':moment()['format'](_0x63a0('0xe4'))}));});return BPromise[_0x63a0('0xe5')](_0x478575);})[_0x63a0('0x1d')](function(){var _0x51579c=[];var _0x25be68=[];var _0x35bd06=utils['getChannels']();var _0x5ca211={'membername':_0x16811e[_0x63a0('0x3c')],'interface':_0xc5d65e,'enterAt':moment()[_0x63a0('0x6b')](_0x63a0('0xe4')),'role':_0x16811e[_0x63a0('0x3b')],'internal':_0x16811e[_0x63a0('0x6d')]};_0x35bd06[_0x63a0('0xe3')](function(_0x3a75c9){_0x51579c[_0x63a0('0xdf')](_[_0x63a0('0x4f')]({'channel':_0x3a75c9,'type':'LOGIN','data1':_0x1d3ef7[_0x63a0('0x5f')][_0x63a0('0xe6')],'data2':_0xc5d65e},_0x5ca211));if(_0x16811e[_0x63a0('0x9c')]){_0x25be68[_0x63a0('0xdf')](_[_0x63a0('0x4f')]({'channel':_0x3a75c9,'type':_0x63a0('0xe7'),'data1':_0x63a0('0xe8')},_0x5ca211));}});return db[_0x63a0('0xe2')][_0x63a0('0x5d')](_0x51579c['concat'](_0x25be68),{'individualHooks':!![]});})[_0x63a0('0x1d')](function(){return _0x16811e[_0x63a0('0x5e')]({'online':!![],'lastLoginAt':moment()[_0x63a0('0x6b')](_0x63a0('0xe4')),'voicePause':_0x16811e[_0x63a0('0x9c')]||![],'mailPause':_0x16811e[_0x63a0('0x9c')]||![],'chatPause':_0x16811e[_0x63a0('0x9c')]||![],'faxPause':_0x16811e[_0x63a0('0x9c')]||![],'smsPause':_0x16811e[_0x63a0('0x9c')]||![],'openchannelPause':_0x16811e['loginInPause']||![],'pauseType':_0x16811e[_0x63a0('0x9c')]?_0x63a0('0xe8'):null,'interface':_0xc5d65e,'lastPauseAt':moment()[_0x63a0('0x6b')](_0x63a0('0xe4'))});})[_0x63a0('0x1d')](function(_0x2579f0){if(_0x1d3ef7[_0x63a0('0xe9')]){return _0x3278df();}else{return BPromise[_0x63a0('0xea')](_0x2579f0)[_0x63a0('0x1d')](respondWithResult(_0x30cec4,null));}})['catch'](handleError(_0x30cec4,null));};exports[_0x63a0('0xeb')]=function(_0x468fe7,_0x3869d8,_0x356ac3){var _0x4c6ecb;return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x468fe7['params']['id'],'role':_0x63a0('0x63')},'attributes':['id',_0x63a0('0x3c'),'role']})[_0x63a0('0x1d')](handleEntityNotFound(_0x3869d8,null))[_0x63a0('0x1d')](function(_0x13eace){if(_0x13eace){_0x4c6ecb=_0x13eace;return db[_0x63a0('0xac')][_0x63a0('0x30')]({'where':{'membername':_0x4c6ecb[_0x63a0('0x3c')]},'individualHooks':!![]});}})[_0x63a0('0x1d')](function(){return db[_0x63a0('0xe2')][_0x63a0('0xc3')]({'where':{'membername':_0x4c6ecb['name'],'exitAt':null}});})[_0x63a0('0x1d')](function(_0xba497a){var _0x4ce7f6=[];_0xba497a[_0x63a0('0xe3')](function(_0x1e1c0a){_0x4ce7f6['push'](_0x1e1c0a[_0x63a0('0x5e')]({'exitAt':moment()[_0x63a0('0x6b')](_0x63a0('0xe4'))}));});return BPromise[_0x63a0('0xe5')](_0x4ce7f6);})['then'](function(){return _0x4c6ecb[_0x63a0('0x5e')]({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![],'interface':null});})[_0x63a0('0x1d')](respondWithResult(_0x3869d8,null))['catch'](handleError(_0x3869d8,null));};exports['pause']=function(_0x5d9acb,_0x50e595,_0x32a138){var _0x45b5e4;return db['UserVoiceQueueRt'][_0x63a0('0x5e')]({'paused':0x1},{'where':{'UserId':_0x5d9acb['params']['id']},'individualHooks':!![]})[_0x63a0('0x1d')](function(){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x5d9acb['params']['id'],'role':'agent'},'attributes':['id',_0x63a0('0x3c'),_0x63a0('0x3b'),'internal',_0x63a0('0x9e')]});})['then'](handleEntityNotFound(_0x50e595,null))[_0x63a0('0x1d')](function(_0x12090f){if(_0x12090f){_0x45b5e4=_0x12090f;return respondWithRpcPromise(_0x63a0('0xec'),_0x63a0('0xed'),{'id':_0x45b5e4['id'],'name':_0x45b5e4[_0x63a0('0x3c')],'pause':!![]});}})[_0x63a0('0x1d')](function(){if(_0x45b5e4){return db[_0x63a0('0xe2')][_0x63a0('0xc3')]({'where':{'membername':_0x45b5e4['name'],'type':_0x63a0('0xe7'),'exitAt':null}});}})['then'](function(_0x4f2775){if(_0x4f2775['length']){var _0x423776=moment()[_0x63a0('0x6b')]('YYYY-MM-DD\x20HH:mm:ss');for(var _0x2bebc0=0x0,_0x2ba18d=_0x4f2775[_0x63a0('0x5c')];_0x2bebc0<_0x2ba18d;_0x2bebc0++){_0x4f2775[_0x2bebc0]['updateAttributes']({'exitAt':_0x423776});}}})['then'](function(){var _0x3f699e=[];var _0x3a0f9e=utils[_0x63a0('0xee')]();_0x3a0f9e[_0x63a0('0xe3')](function(_0x495f0b){_0x3f699e[_0x63a0('0xdf')]({'channel':_0x495f0b,'membername':_0x45b5e4[_0x63a0('0x3c')],'interface':_[_0x63a0('0x69')](_0x45b5e4['interface'])?util[_0x63a0('0x6b')](_0x63a0('0xd8'),_0x45b5e4[_0x63a0('0x3c')]):_0x45b5e4[_0x63a0('0x9e')],'type':_0x63a0('0xe7'),'enterAt':moment()[_0x63a0('0x6b')](_0x63a0('0xe4')),'data1':_0x5d9acb[_0x63a0('0x5f')][_0x63a0('0x50')]||'DEFAULT\x20PAUSE','role':_0x45b5e4[_0x63a0('0x3b')],'internal':_0x45b5e4[_0x63a0('0x6d')]});});return db[_0x63a0('0xe2')][_0x63a0('0x5d')](_0x3f699e,{'individualHooks':!![]});})[_0x63a0('0x1d')](function(){return _0x45b5e4['update']({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x5d9acb[_0x63a0('0x5f')]['type']||_0x63a0('0xef'),'lastPauseAt':moment()[_0x63a0('0x6b')]('YYYY-MM-DD\x20HH:mm:ss')});})['then'](respondWithResult(_0x50e595,null))[_0x63a0('0x26')](handleError(_0x50e595,null));};exports[_0x63a0('0xf0')]=function(_0x18a6b5,_0x46af70,_0x54b4ae){var _0x8a5627;return db[_0x63a0('0x3f')]['find']({'where':{'id':_0x18a6b5[_0x63a0('0x59')]['id']},'attributes':['id','name',_0x63a0('0x3b'),_0x63a0('0x9d'),_0x63a0('0xf1'),_0x63a0('0xf2'),_0x63a0('0xf3'),'openchannelPause',_0x63a0('0xf4'),'pauseType',_0x63a0('0xf5')]})['then'](handleEntityNotFound(_0x46af70,null))['then'](function(_0x4ef0e5){if(_0x4ef0e5){_0x8a5627=_0x4ef0e5;if(_0x18a6b5[_0x63a0('0x5f')][_0x63a0('0xaf')]&&!utils['isValidChannel'](_0x18a6b5[_0x63a0('0x5f')][_0x63a0('0xaf')])){throw new db[(_0x63a0('0x91'))][(_0x63a0('0x92'))](_0x63a0('0xa0'));}switch(_0x18a6b5[_0x63a0('0x5f')][_0x63a0('0xaf')]){case _0x63a0('0xa9'):return respondWithRpcPromise(_0x63a0('0xec'),_0x63a0('0xf0'),{'id':_0x8a5627['id'],'name':_0x8a5627[_0x63a0('0x3c')],'pause':![]})[_0x63a0('0x1d')](function(){return db[_0x63a0('0xac')][_0x63a0('0x5e')]({'paused':0x0},{'where':{'UserId':_0x8a5627['id']},'individualHooks':!![]});})['then'](function(){return db[_0x63a0('0xe2')][_0x63a0('0x3a')]({'where':{'channel':_0x18a6b5[_0x63a0('0x5f')][_0x63a0('0xaf')],'membername':_0x8a5627[_0x63a0('0x3c')],'type':'PAUSE','exitAt':null}});})[_0x63a0('0x1d')](function(_0x191b7a){if(_0x191b7a){return _0x191b7a[_0x63a0('0x5e')]({'exitAt':moment()[_0x63a0('0x6b')](_0x63a0('0xe4')),'data2':_0x63a0('0xf6')},{'individualHooks':!![]});}return null;})[_0x63a0('0x1d')](function(){return _0x8a5627[_0x63a0('0x5e')]({'voicePause':![]});});case'mail':case'chat':case'fax':case'sms':case _0x63a0('0xf7'):return db[_0x63a0('0xe2')]['find']({'where':{'channel':_0x18a6b5[_0x63a0('0x5f')][_0x63a0('0xaf')],'membername':_0x8a5627[_0x63a0('0x3c')],'type':'PAUSE','exitAt':null}})[_0x63a0('0x1d')](function(_0xa4d606){if(_0xa4d606){return _0xa4d606['update']({'exitAt':moment()[_0x63a0('0x6b')](_0x63a0('0xe4')),'data2':'manual'},{'individualHooks':!![]});}return null;})['then'](function(){var _0x546530={};_['set'](_0x546530,util[_0x63a0('0x6b')](_0x63a0('0xf8'),_0x18a6b5[_0x63a0('0x5f')][_0x63a0('0xaf')],'Pause'),![]);return _0x8a5627['update'](_0x546530);});default:return respondWithRpcPromise(_0x63a0('0xec'),_0x63a0('0xf0'),{'id':_0x8a5627['id'],'name':_0x8a5627[_0x63a0('0x3c')],'pause':![]})[_0x63a0('0x1d')](function(){return db[_0x63a0('0xac')][_0x63a0('0x5e')]({'paused':0x0},{'where':{'UserId':_0x8a5627['id']}});})['then'](function(){return db[_0x63a0('0xe2')][_0x63a0('0xc3')]({'where':{'membername':_0x8a5627['name'],'type':_0x63a0('0xe7'),'exitAt':null}});})[_0x63a0('0x1d')](function(_0x359ab0){var _0x56412a=[];_0x359ab0[_0x63a0('0xe3')](function(_0x868b9b){_0x56412a['push'](_0x868b9b['update']({'exitAt':moment()[_0x63a0('0x6b')]('YYYY-MM-DD\x20HH:mm:ss'),'data2':_0x63a0('0xf6')}));});return BPromise[_0x63a0('0xe5')](_0x56412a);})['then'](function(){return _0x8a5627[_0x63a0('0x5e')]({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})[_0x63a0('0x1d')](respondWithResult(_0x46af70,null))[_0x63a0('0x26')](handleError(_0x46af70,null));};exports[_0x63a0('0xf9')]=function(_0x4b3a42,_0x3c768f,_0x4b16d7){var _0x2e2227={};var _0x139d60={};var _0x313fd3;var _0x2c00b5;return db[_0x63a0('0x3f')][_0x63a0('0x9a')]({'where':{'id':_0x4b3a42[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x3c768f,null))[_0x63a0('0x1d')](function(_0x57d63c){if(_0x57d63c){_0x313fd3=_0x57d63c;_0x139d60[_0x63a0('0x41')]=_[_0x63a0('0x43')](db[_0x63a0('0xfa')][_0x63a0('0x40')]);_0x139d60[_0x63a0('0x45')]=_['keys'](_0x4b3a42[_0x63a0('0x45')]);_0x139d60[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x139d60[_0x63a0('0x41')],_0x139d60[_0x63a0('0x45')]);_0x2e2227['attributes']=_[_0x63a0('0x5b')](_0x139d60['model'],qs[_0x63a0('0x47')](_0x4b3a42[_0x63a0('0x45')][_0x63a0('0x47')]));_0x2e2227[_0x63a0('0x48')]=_0x2e2227['attributes'][_0x63a0('0x5c')]?_0x2e2227[_0x63a0('0x48')]:_0x139d60[_0x63a0('0x41')];_0x2e2227[_0x63a0('0xbb')]=qs['sort'](_0x4b3a42[_0x63a0('0x45')][_0x63a0('0x4c')]);_0x2e2227[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0x4b3a42[_0x63a0('0x45')],_0x139d60[_0x63a0('0x46')]));if(_0x4b3a42[_0x63a0('0x45')]['filter']){_0x2e2227[_0x63a0('0x4e')]=_[_0x63a0('0x4f')](_0x2e2227[_0x63a0('0x4e')],{'$or':_['map'](_0x2e2227['attributes'],function(_0x159eae){var _0x9d1bc8={};_0x9d1bc8[_0x159eae]={'$like':'%'+_0x4b3a42[_0x63a0('0x45')][_0x63a0('0x36')]+'%'};return _0x9d1bc8;})});}_0x2e2227=_[_0x63a0('0x4f')]({},_0x2e2227,_0x4b3a42[_0x63a0('0x55')]);return _0x313fd3[_0x63a0('0xf9')](_0x2e2227);}})['then'](function(_0x391214){if(_0x391214){_0x2c00b5=_0x391214[_0x63a0('0x5c')];if(!_0x4b3a42['query'][_0x63a0('0x49')](_0x63a0('0x4a'))){_0x2e2227[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x4b3a42[_0x63a0('0x45')][_0x63a0('0x4b')]);_0x2e2227[_0x63a0('0x2b')]=qs[_0x63a0('0x2b')](_0x4b3a42[_0x63a0('0x45')][_0x63a0('0x2b')]);}return _0x313fd3[_0x63a0('0xf9')](_0x2e2227);}})[_0x63a0('0x1d')](function(_0x68c0f2){if(_0x68c0f2){return _0x68c0f2?{'count':_0x2c00b5,'rows':_0x68c0f2}:null;}})[_0x63a0('0x1d')](respondWithResult(_0x3c768f,null))[_0x63a0('0x26')](handleError(_0x3c768f,null));};exports[_0x63a0('0xfb')]=function(_0x28172e,_0x3b638e,_0x3229bd){return db['User'][_0x63a0('0x3a')]({'where':{'id':_0x28172e['params']['id']}})['then'](handleEntityNotFound(_0x3b638e,null))['then'](function(_0xc160e){if(_0xc160e){return _0xc160e[_0x63a0('0xfb')](_0x28172e[_0x63a0('0x5f')][_0x63a0('0x62')],_['omit'](_0x28172e[_0x63a0('0x5f')],[_0x63a0('0x62'),'id'])||{});}})['then'](respondWithResult(_0x3b638e,null))[_0x63a0('0x26')](handleError(_0x3b638e,null));};exports['removeTeams']=function(_0x22f13a,_0x4b837b,_0x1aae1f){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x22f13a[_0x63a0('0x59')]['id']}})['then'](handleEntityNotFound(_0x4b837b,null))[_0x63a0('0x1d')](function(_0x5c513d){if(_0x5c513d){return _0x5c513d[_0x63a0('0xfc')](_0x22f13a[_0x63a0('0x45')]['ids']);}})[_0x63a0('0x1d')](respondWithStatusCode(_0x4b837b,null))[_0x63a0('0x26')](handleError(_0x4b837b,null));};exports['getLists']=function(_0x1e6a6d,_0x4f667e,_0x424a1e){var _0x2014e6={};var _0x16dadc={};var _0x247ec1;var _0x3ba2d7;return db['User'][_0x63a0('0x9a')]({'where':{'id':_0x1e6a6d[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x4f667e,null))[_0x63a0('0x1d')](function(_0x5e9615){if(_0x5e9615){_0x247ec1=_0x5e9615;_0x16dadc[_0x63a0('0x41')]=_[_0x63a0('0x43')](db[_0x63a0('0xbc')][_0x63a0('0x40')]);_0x16dadc[_0x63a0('0x45')]=_[_0x63a0('0x43')](_0x1e6a6d[_0x63a0('0x45')]);_0x16dadc['filters']=_[_0x63a0('0x5b')](_0x16dadc[_0x63a0('0x41')],_0x16dadc[_0x63a0('0x45')]);_0x2014e6[_0x63a0('0x48')]=_[_0x63a0('0x5b')](_0x16dadc[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0x1e6a6d['query']['fields']));_0x2014e6[_0x63a0('0x48')]=_0x2014e6['attributes']['length']?_0x2014e6['attributes']:_0x16dadc[_0x63a0('0x41')];_0x2014e6[_0x63a0('0xbb')]=qs[_0x63a0('0x4c')](_0x1e6a6d['query']['sort']);_0x2014e6[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_['pick'](_0x1e6a6d[_0x63a0('0x45')],_0x16dadc[_0x63a0('0x46')]));if(_0x1e6a6d['query'][_0x63a0('0x36')]){_0x2014e6[_0x63a0('0x4e')]=_['merge'](_0x2014e6['where'],{'$or':_[_0x63a0('0x37')](_0x2014e6[_0x63a0('0x48')],function(_0x24ed71){var _0x425d80={};_0x425d80[_0x24ed71]={'$like':'%'+_0x1e6a6d[_0x63a0('0x45')][_0x63a0('0x36')]+'%'};return _0x425d80;})});}_0x2014e6=_[_0x63a0('0x4f')]({},_0x2014e6,_0x1e6a6d[_0x63a0('0x55')]);return _0x247ec1[_0x63a0('0xfd')](_0x2014e6);}})[_0x63a0('0x1d')](function(_0x3598bd){if(_0x3598bd){_0x3ba2d7=_0x3598bd['length'];if(!_0x1e6a6d[_0x63a0('0x45')][_0x63a0('0x49')](_0x63a0('0x4a'))){_0x2014e6[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x1e6a6d['query'][_0x63a0('0x4b')]);_0x2014e6['offset']=qs[_0x63a0('0x2b')](_0x1e6a6d[_0x63a0('0x45')][_0x63a0('0x2b')]);}return _0x247ec1[_0x63a0('0xfd')](_0x2014e6);}})['then'](function(_0x1b0645){if(_0x1b0645){return _0x1b0645?{'count':_0x3ba2d7,'rows':_0x1b0645}:null;}})['then'](respondWithResult(_0x4f667e,null))[_0x63a0('0x26')](handleError(_0x4f667e,null));};exports[_0x63a0('0xfe')]=function(_0x4b5460,_0x51f866,_0x5c2d84){var _0x59d3f7={};var _0x174bf6={};var _0x3a24c9;var _0x393374;return db[_0x63a0('0x3f')][_0x63a0('0x9a')]({'where':{'id':_0x4b5460[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x51f866,null))[_0x63a0('0x1d')](function(_0x2b937c){if(_0x2b937c){_0x3a24c9=_0x2b937c;_0x174bf6[_0x63a0('0x41')]=_[_0x63a0('0x43')](db['User'][_0x63a0('0x40')]);_0x174bf6['query']=_[_0x63a0('0x43')](_0x4b5460['query']);_0x174bf6[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x174bf6['model'],_0x174bf6[_0x63a0('0x45')]);_0x59d3f7[_0x63a0('0x48')]=_[_0x63a0('0x5b')](_0x174bf6[_0x63a0('0x41')],qs['fields'](_0x4b5460[_0x63a0('0x45')]['fields']));_0x59d3f7[_0x63a0('0x48')]=_0x59d3f7[_0x63a0('0x48')]['length']?_0x59d3f7['attributes']:_0x174bf6[_0x63a0('0x41')];_0x59d3f7[_0x63a0('0xbb')]=qs[_0x63a0('0x4c')](_0x4b5460[_0x63a0('0x45')]['sort']);_0x59d3f7[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0x4b5460[_0x63a0('0x45')],_0x174bf6[_0x63a0('0x46')]));if(_0x4b5460[_0x63a0('0x45')]['filter']){_0x59d3f7[_0x63a0('0x4e')]=_['merge'](_0x59d3f7[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0x59d3f7[_0x63a0('0x48')],function(_0x71147b){var _0x5819f9={};_0x5819f9[_0x71147b]={'$like':'%'+_0x4b5460[_0x63a0('0x45')][_0x63a0('0x36')]+'%'};return _0x5819f9;})});}_0x59d3f7['model']=db[_0x63a0('0x3f')];_0x59d3f7['as']=_0x63a0('0x33');_0x59d3f7=_[_0x63a0('0x4f')]({},_0x59d3f7,_0x4b5460[_0x63a0('0x55')]);return _0x3a24c9[_0x63a0('0xde')]({'include':[_0x59d3f7]});}})[_0x63a0('0x1d')](function(_0x1e0a4a){if(_0x1e0a4a){var _0x2fc769={},_0x5a1def=[],_0x200e80=0x0;for(var _0x13a44f=0x0;_0x13a44f<_0x1e0a4a[_0x63a0('0x5c')];_0x13a44f+=0x1){for(var _0x3d41fe=0x0,_0x20a64a;_0x3d41fe<_0x1e0a4a[_0x13a44f][_0x63a0('0x33')]['length'];_0x3d41fe+=0x1){_0x20a64a=_0x1e0a4a[_0x13a44f][_0x63a0('0x33')][_0x3d41fe]['get']({'plain':!![]});_0x2fc769[_0x20a64a['id']]=_0x20a64a;}}_0x2fc769=_[_0x63a0('0xff')](_0x2fc769);for(var _0x2a7f32=qs['offset'](_0x4b5460[_0x63a0('0x45')][_0x63a0('0x2b')]);_0x2a7f32<_0x2fc769[_0x63a0('0x5c')]&&_0x5a1def[_0x63a0('0x5c')]<qs['limit'](_0x4b5460[_0x63a0('0x45')][_0x63a0('0x4b')]);_0x2a7f32+=0x1){if(_0x2fc769[_0x2a7f32]){_0x5a1def[_0x63a0('0xdf')](_0x2fc769[_0x2a7f32]);}}return{'count':_0x2fc769['length'],'rows':_0x5a1def};}})['then'](respondWithResult(_0x51f866,null))[_0x63a0('0x26')](handleError(_0x51f866,null));};exports[_0x63a0('0x30')]=function(_0x596496,_0x3c6e71){if(_0x596496['user']['id']==_0x596496[_0x63a0('0x59')]['id']){return _0x3c6e71[_0x63a0('0x28')](0x1f4)['send']({'message':_0x63a0('0x100')});}return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x596496[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x3c6e71,null))[_0x63a0('0x1d')](removeEntity(_0x3c6e71,null))['catch'](handleError(_0x3c6e71,null));};exports[_0x63a0('0x101')]=function(_0x30a8ae,_0x568dfe,_0x215b91){return db[_0x63a0('0x3f')]['find']({'where':{'id':_0x30a8ae[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x568dfe,null))[_0x63a0('0x1d')](function(_0x141126){if(_0x141126){return _0x141126[_0x63a0('0x101')](_0x30a8ae[_0x63a0('0x5f')][_0x63a0('0x62')],_['omit'](_0x30a8ae[_0x63a0('0x5f')],['ids','id'])||{})['spread'](function(){for(var _0xaa92ff=0x0;_0xaa92ff<_0x30a8ae[_0x63a0('0x5f')][_0x63a0('0x62')][_0x63a0('0x5c')];_0xaa92ff+=0x1){socket[_0x63a0('0xa7')](_0x63a0('0x102'),{'ChatInteractionId':Number(_0x30a8ae[_0x63a0('0x5f')][_0x63a0('0x62')][_0xaa92ff]),'UserId':Number(_0x30a8ae[_0x63a0('0x59')]['id'])});}return _0x30a8ae['body'][_0x63a0('0x62')];});}})['then'](respondWithResult(_0x568dfe,null))[_0x63a0('0x26')](handleError(_0x568dfe,null));};exports[_0x63a0('0x103')]=function(_0x4a9b5b,_0x58c33c,_0x1baae5){return db[_0x63a0('0x3f')]['find']({'where':{'id':_0x4a9b5b[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x58c33c,null))[_0x63a0('0x1d')](function(_0x3006dd){if(_0x3006dd){return _0x3006dd[_0x63a0('0x103')](_0x4a9b5b['query'][_0x63a0('0x62')])[_0x63a0('0x1d')](function(){if(_[_0x63a0('0x104')](_0x4a9b5b[_0x63a0('0x45')][_0x63a0('0x62')])){for(var _0x2962d9=0x0;_0x2962d9<_0x4a9b5b['query']['ids']['length'];_0x2962d9+=0x1){socket[_0x63a0('0xa7')](_0x63a0('0x105'),{'ChatInteractionId':Number(_0x4a9b5b['query'][_0x63a0('0x62')][_0x2962d9]),'UserId':Number(_0x4a9b5b[_0x63a0('0x59')]['id'])});}}else{socket[_0x63a0('0xa7')]('user_has_chat_interactions:remove',{'ChatInteractionId':Number(_0x4a9b5b[_0x63a0('0x45')]['ids']),'UserId':Number(_0x4a9b5b[_0x63a0('0x59')]['id'])});}});}})[_0x63a0('0x1d')](respondWithStatusCode(_0x58c33c,null))[_0x63a0('0x26')](handleError(_0x58c33c,null));};exports[_0x63a0('0x106')]=function(_0x1dadd5,_0xe60a04,_0x312730){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x1dadd5[_0x63a0('0x59')]['id']}})['then'](handleEntityNotFound(_0xe60a04,null))[_0x63a0('0x1d')](function(_0xc5930d){if(_0xc5930d){return _0xc5930d[_0x63a0('0x106')](_0x1dadd5[_0x63a0('0x5f')][_0x63a0('0x62')],_[_0x63a0('0x107')](_0x1dadd5[_0x63a0('0x5f')],[_0x63a0('0x62'),'id'])||{})[_0x63a0('0xa4')](function(){for(var _0x357ee2=0x0;_0x357ee2<_0x1dadd5[_0x63a0('0x5f')][_0x63a0('0x62')][_0x63a0('0x5c')];_0x357ee2+=0x1){socket[_0x63a0('0xa7')](_0x63a0('0x108'),{'MailInteractionId':Number(_0x1dadd5[_0x63a0('0x5f')][_0x63a0('0x62')][_0x357ee2]),'UserId':Number(_0x1dadd5[_0x63a0('0x59')]['id'])});}return _0x1dadd5[_0x63a0('0x5f')][_0x63a0('0x62')];});}})['then'](respondWithResult(_0xe60a04,null))[_0x63a0('0x26')](handleError(_0xe60a04,null));};exports[_0x63a0('0x109')]=function(_0x3bf4a6,_0x2901d2,_0x1b1382){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x3bf4a6['params']['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x2901d2,null))[_0x63a0('0x1d')](function(_0x2acdc7){if(_0x2acdc7){return _0x2acdc7[_0x63a0('0x109')](_0x3bf4a6[_0x63a0('0x45')]['ids'])[_0x63a0('0x1d')](function(){if(_[_0x63a0('0x104')](_0x3bf4a6[_0x63a0('0x45')][_0x63a0('0x62')])){for(var _0xf1f695=0x0;_0xf1f695<_0x3bf4a6[_0x63a0('0x45')][_0x63a0('0x62')]['length'];_0xf1f695+=0x1){socket[_0x63a0('0xa7')](_0x63a0('0x10a'),{'MailInteractionId':Number(_0x3bf4a6[_0x63a0('0x45')][_0x63a0('0x62')][_0xf1f695]),'UserId':Number(_0x3bf4a6[_0x63a0('0x59')]['id'])});}}else{socket[_0x63a0('0xa7')]('user_has_mail_interactions:remove',{'MailInteractionId':Number(_0x3bf4a6[_0x63a0('0x45')]['ids']),'UserId':Number(_0x3bf4a6[_0x63a0('0x59')]['id'])});}});}})[_0x63a0('0x1d')](respondWithStatusCode(_0x2901d2,null))[_0x63a0('0x26')](handleError(_0x2901d2,null));};exports[_0x63a0('0x10b')]=function(_0x1cd38c,_0x16dfcc,_0x30d2de){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x1cd38c[_0x63a0('0x59')]['id']}})['then'](handleEntityNotFound(_0x16dfcc,null))[_0x63a0('0x1d')](function(_0x581a7c){if(_0x581a7c){return _0x581a7c['addFaxInteractions'](_0x1cd38c[_0x63a0('0x5f')][_0x63a0('0x62')],_[_0x63a0('0x107')](_0x1cd38c[_0x63a0('0x5f')],[_0x63a0('0x62'),'id'])||{})[_0x63a0('0xa4')](function(){for(var _0x4b4ce7=0x0;_0x4b4ce7<_0x1cd38c[_0x63a0('0x5f')]['ids'][_0x63a0('0x5c')];_0x4b4ce7+=0x1){socket['emit']('user_has_fax_interactions:save',{'FaxInteractionId':Number(_0x1cd38c['body']['ids'][_0x4b4ce7]),'UserId':Number(_0x1cd38c['params']['id'])});}return _0x1cd38c[_0x63a0('0x5f')][_0x63a0('0x62')];});}})['then'](respondWithResult(_0x16dfcc,null))[_0x63a0('0x26')](handleError(_0x16dfcc,null));};exports[_0x63a0('0x10c')]=function(_0x240332,_0x132339,_0x33d53d){return db[_0x63a0('0x3f')]['find']({'where':{'id':_0x240332[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x132339,null))[_0x63a0('0x1d')](function(_0x49937c){if(_0x49937c){return _0x49937c[_0x63a0('0x10c')](_0x240332[_0x63a0('0x45')][_0x63a0('0x62')])['then'](function(){if(_[_0x63a0('0x104')](_0x240332[_0x63a0('0x45')]['ids'])){for(var _0x584c1a=0x0;_0x584c1a<_0x240332[_0x63a0('0x45')][_0x63a0('0x62')][_0x63a0('0x5c')];_0x584c1a+=0x1){socket[_0x63a0('0xa7')]('user_has_fax_interactions:remove',{'FaxInteractionId':Number(_0x240332[_0x63a0('0x45')]['ids'][_0x584c1a]),'UserId':Number(_0x240332[_0x63a0('0x59')]['id'])});}}else{socket['emit']('user_has_fax_interactions:remove',{'FaxInteractionId':Number(_0x240332['query'][_0x63a0('0x62')]),'UserId':Number(_0x240332['params']['id'])});}});}})['then'](respondWithStatusCode(_0x132339,null))[_0x63a0('0x26')](handleError(_0x132339,null));};exports[_0x63a0('0x10d')]=function(_0x416aaa,_0x374f94,_0x3dda83){return db['User'][_0x63a0('0x3a')]({'where':{'id':_0x416aaa['params']['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x374f94,null))[_0x63a0('0x1d')](function(_0x206385){if(_0x206385){return _0x206385[_0x63a0('0x10d')](_0x416aaa[_0x63a0('0x5f')]['ids'],_[_0x63a0('0x107')](_0x416aaa['body'],[_0x63a0('0x62'),'id'])||{})[_0x63a0('0xa4')](function(){for(var _0x4a3067=0x0;_0x4a3067<_0x416aaa['body']['ids'][_0x63a0('0x5c')];_0x4a3067+=0x1){socket['emit'](_0x63a0('0x10e'),{'SmsInteractionId':Number(_0x416aaa['body'][_0x63a0('0x62')][_0x4a3067]),'UserId':Number(_0x416aaa[_0x63a0('0x59')]['id'])});}return _0x416aaa['body'][_0x63a0('0x62')];});}})['then'](respondWithResult(_0x374f94,null))[_0x63a0('0x26')](handleError(_0x374f94,null));};exports[_0x63a0('0x10f')]=function(_0x1cba13,_0x350159,_0x945c49){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x1cba13[_0x63a0('0x59')]['id']}})['then'](handleEntityNotFound(_0x350159,null))[_0x63a0('0x1d')](function(_0x2664a3){if(_0x2664a3){return _0x2664a3[_0x63a0('0x10f')](_0x1cba13[_0x63a0('0x45')]['ids'])[_0x63a0('0x1d')](function(){if(_[_0x63a0('0x104')](_0x1cba13['query'][_0x63a0('0x62')])){for(var _0x80c8c5=0x0;_0x80c8c5<_0x1cba13[_0x63a0('0x45')][_0x63a0('0x62')][_0x63a0('0x5c')];_0x80c8c5+=0x1){socket[_0x63a0('0xa7')](_0x63a0('0x110'),{'SmsInteractionId':Number(_0x1cba13['query'][_0x63a0('0x62')][_0x80c8c5]),'UserId':Number(_0x1cba13[_0x63a0('0x59')]['id'])});}}else{socket[_0x63a0('0xa7')](_0x63a0('0x110'),{'SmsInteractionId':Number(_0x1cba13[_0x63a0('0x45')][_0x63a0('0x62')]),'UserId':Number(_0x1cba13['params']['id'])});}});}})[_0x63a0('0x1d')](respondWithStatusCode(_0x350159,null))['catch'](handleError(_0x350159,null));};exports[_0x63a0('0x111')]=function(_0x34fbd2,_0x4262aa,_0x11f9c4){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x34fbd2['params']['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x4262aa,null))['then'](function(_0x2c0ae1){if(_0x2c0ae1){return _0x2c0ae1[_0x63a0('0x111')](_0x34fbd2[_0x63a0('0x5f')][_0x63a0('0x62')],_['omit'](_0x34fbd2[_0x63a0('0x5f')],[_0x63a0('0x62'),'id'])||{})[_0x63a0('0xa4')](function(){for(var _0x209611=0x0;_0x209611<_0x34fbd2['body'][_0x63a0('0x62')][_0x63a0('0x5c')];_0x209611+=0x1){socket['emit']('user_has_openchannel_interactions:save',{'OpenchannelInteractionId':Number(_0x34fbd2[_0x63a0('0x5f')][_0x63a0('0x62')][_0x209611]),'UserId':Number(_0x34fbd2[_0x63a0('0x59')]['id'])});}return _0x34fbd2[_0x63a0('0x5f')][_0x63a0('0x62')];});}})[_0x63a0('0x1d')](respondWithResult(_0x4262aa,null))[_0x63a0('0x26')](handleError(_0x4262aa,null));};exports[_0x63a0('0x112')]=function(_0x16964e,_0x5d35be,_0x1c6c4b){return db['User'][_0x63a0('0x3a')]({'where':{'id':_0x16964e[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x5d35be,null))['then'](function(_0xb9958d){if(_0xb9958d){return _0xb9958d['removeOpenchannelInteractions'](_0x16964e[_0x63a0('0x45')]['ids'])[_0x63a0('0x1d')](function(){if(_[_0x63a0('0x104')](_0x16964e['query'][_0x63a0('0x62')])){for(var _0x2b8220=0x0;_0x2b8220<_0x16964e['query'][_0x63a0('0x62')][_0x63a0('0x5c')];_0x2b8220+=0x1){socket[_0x63a0('0xa7')](_0x63a0('0x113'),{'OpenchannelInteractionId':Number(_0x16964e[_0x63a0('0x45')][_0x63a0('0x62')][_0x2b8220]),'UserId':Number(_0x16964e['params']['id'])});}}else{socket[_0x63a0('0xa7')](_0x63a0('0x113'),{'OpenchannelInteractionId':Number(_0x16964e['query'][_0x63a0('0x62')]),'UserId':Number(_0x16964e['params']['id'])});}});}})[_0x63a0('0x1d')](respondWithStatusCode(_0x5d35be,null))['catch'](handleError(_0x5d35be,null));};exports['getVoicePrefixes']=function(_0x37cedb,_0x2830de,_0x38acf5){var _0x1f4d4e={};var _0x5b2d2c={};var _0x529c39;var _0x369810;return db[_0x63a0('0x3f')][_0x63a0('0x9a')]({'where':{'id':_0x37cedb['params']['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x2830de,null))[_0x63a0('0x1d')](function(_0x49c318){if(_0x49c318){_0x529c39=_0x49c318;_0x5b2d2c['model']=_[_0x63a0('0x43')](db[_0x63a0('0x114')]['rawAttributes']);_0x5b2d2c[_0x63a0('0x45')]=_[_0x63a0('0x43')](_0x37cedb['query']);_0x5b2d2c[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x5b2d2c[_0x63a0('0x41')],_0x5b2d2c[_0x63a0('0x45')]);_0x1f4d4e[_0x63a0('0x48')]=_[_0x63a0('0x5b')](_0x5b2d2c[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0x37cedb[_0x63a0('0x45')][_0x63a0('0x47')]));_0x1f4d4e[_0x63a0('0x48')]=_0x1f4d4e[_0x63a0('0x48')][_0x63a0('0x5c')]?_0x1f4d4e['attributes']:_0x5b2d2c[_0x63a0('0x41')];_0x1f4d4e['order']=qs[_0x63a0('0x4c')](_0x37cedb[_0x63a0('0x45')][_0x63a0('0x4c')]);_0x1f4d4e['where']=qs['filters'](_[_0x63a0('0x4d')](_0x37cedb[_0x63a0('0x45')],_0x5b2d2c[_0x63a0('0x46')]));if(_0x37cedb['query'][_0x63a0('0x36')]){_0x1f4d4e[_0x63a0('0x4e')]=_[_0x63a0('0x4f')](_0x1f4d4e['where'],{'$or':_[_0x63a0('0x37')](_0x1f4d4e[_0x63a0('0x48')],function(_0x453422){var _0xa7320d={};_0xa7320d[_0x453422]={'$like':'%'+_0x37cedb[_0x63a0('0x45')]['filter']+'%'};return _0xa7320d;})});}_0x1f4d4e=_[_0x63a0('0x4f')]({},_0x1f4d4e,_0x37cedb[_0x63a0('0x55')]);return _0x529c39[_0x63a0('0x115')](_0x1f4d4e);}})[_0x63a0('0x1d')](function(_0x49f50f){if(_0x49f50f){_0x369810=_0x49f50f[_0x63a0('0x5c')];if(!_0x37cedb[_0x63a0('0x45')]['hasOwnProperty'](_0x63a0('0x4a'))){_0x1f4d4e['limit']=qs['limit'](_0x37cedb[_0x63a0('0x45')][_0x63a0('0x4b')]);_0x1f4d4e[_0x63a0('0x2b')]=qs[_0x63a0('0x2b')](_0x37cedb[_0x63a0('0x45')][_0x63a0('0x2b')]);}return _0x529c39['getVoicePrefixes'](_0x1f4d4e);}})[_0x63a0('0x1d')](function(_0x30b668){if(_0x30b668){return _0x30b668?{'count':_0x369810,'rows':_0x30b668}:null;}})[_0x63a0('0x1d')](respondWithResult(_0x2830de,null))['catch'](handleError(_0x2830de,null));};exports[_0x63a0('0x116')]=function(_0x3c1be1,_0x543e2f,_0x55656e){var _0x2d6e08={};var _0x21c1bf={};var _0x528882;var _0x8f26b8;return db['User']['findOne']({'where':{'id':_0x3c1be1[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x543e2f,null))['then'](function(_0xa22e86){if(_0xa22e86){_0x528882=_0xa22e86;_0x21c1bf[_0x63a0('0x41')]=_[_0x63a0('0x43')](db[_0x63a0('0x117')]['rawAttributes']);_0x21c1bf[_0x63a0('0x45')]=_[_0x63a0('0x43')](_0x3c1be1['query']);_0x21c1bf[_0x63a0('0x46')]=_['intersection'](_0x21c1bf[_0x63a0('0x41')],_0x21c1bf[_0x63a0('0x45')]);_0x2d6e08['attributes']=_['intersection'](_0x21c1bf['model'],qs['fields'](_0x3c1be1[_0x63a0('0x45')][_0x63a0('0x47')]));_0x2d6e08[_0x63a0('0x48')]=_0x2d6e08[_0x63a0('0x48')]['length']?_0x2d6e08['attributes']:_0x21c1bf[_0x63a0('0x41')];_0x2d6e08[_0x63a0('0xbb')]=qs[_0x63a0('0x4c')](_0x3c1be1[_0x63a0('0x45')][_0x63a0('0x4c')]);_0x2d6e08[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_['pick'](_0x3c1be1[_0x63a0('0x45')],_0x21c1bf[_0x63a0('0x46')]));if(_0x3c1be1['query'][_0x63a0('0x36')]){_0x2d6e08['where']=_['merge'](_0x2d6e08[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0x2d6e08['attributes'],function(_0x4e9c51){var _0x1a27ee={};_0x1a27ee[_0x4e9c51]={'$like':'%'+_0x3c1be1['query'][_0x63a0('0x36')]+'%'};return _0x1a27ee;})});}_0x2d6e08=_['merge']({},_0x2d6e08,_0x3c1be1[_0x63a0('0x55')]);return _0x528882['getFaxAccounts'](_0x2d6e08);}})[_0x63a0('0x1d')](function(_0x349c59){if(_0x349c59){_0x8f26b8=_0x349c59['length'];if(!_0x3c1be1[_0x63a0('0x45')][_0x63a0('0x49')](_0x63a0('0x4a'))){_0x2d6e08['limit']=qs[_0x63a0('0x4b')](_0x3c1be1[_0x63a0('0x45')][_0x63a0('0x4b')]);_0x2d6e08['offset']=qs['offset'](_0x3c1be1[_0x63a0('0x45')]['offset']);}return _0x528882[_0x63a0('0x116')](_0x2d6e08);}})['then'](function(_0x336e86){if(_0x336e86){return _0x336e86?{'count':_0x8f26b8,'rows':_0x336e86}:null;}})[_0x63a0('0x1d')](respondWithResult(_0x543e2f,null))[_0x63a0('0x26')](handleError(_0x543e2f,null));};exports[_0x63a0('0x118')]=function(_0xebf5bf,_0x58b8b3,_0x308fa4){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0xebf5bf[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x58b8b3,null))[_0x63a0('0x1d')](function(_0x170565){if(_0x170565){return _0x170565[_0x63a0('0x118')](_0xebf5bf[_0x63a0('0x5f')]['ids'],_['omit'](_0xebf5bf[_0x63a0('0x5f')],[_0x63a0('0x62'),'id'])||{});}})[_0x63a0('0x1d')](respondWithResult(_0x58b8b3,null))[_0x63a0('0x26')](handleError(_0x58b8b3,null));};exports['removeFaxAccounts']=function(_0x533bc6,_0x22923d,_0x2186d5){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x533bc6[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x22923d,null))['then'](function(_0x21405b){if(_0x21405b){return _0x21405b[_0x63a0('0x119')](_0x533bc6[_0x63a0('0x45')][_0x63a0('0x62')]);}})['then'](respondWithStatusCode(_0x22923d,null))[_0x63a0('0x26')](handleError(_0x22923d,null));};exports[_0x63a0('0x11a')]=function(_0x22d541,_0x2a1405,_0x544749){var _0x454774={};var _0x4ddfe8={};var _0x164fc0;var _0x12c07a;return db['User']['findOne']({'where':{'id':_0x22d541['params']['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x2a1405,null))[_0x63a0('0x1d')](function(_0x332a38){if(_0x332a38){_0x164fc0=_0x332a38;_0x4ddfe8[_0x63a0('0x41')]=_[_0x63a0('0x43')](db['MailAccount']['rawAttributes']);_0x4ddfe8['query']=_['keys'](_0x22d541[_0x63a0('0x45')]);_0x4ddfe8[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x4ddfe8['model'],_0x4ddfe8[_0x63a0('0x45')]);_0x454774[_0x63a0('0x48')]=_['intersection'](_0x4ddfe8[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0x22d541[_0x63a0('0x45')][_0x63a0('0x47')]));_0x454774[_0x63a0('0x48')]=_0x454774[_0x63a0('0x48')]['length']?_0x454774['attributes']:_0x4ddfe8[_0x63a0('0x41')];_0x454774['order']=qs[_0x63a0('0x4c')](_0x22d541['query']['sort']);_0x454774[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0x22d541[_0x63a0('0x45')],_0x4ddfe8['filters']));if(_0x22d541['query'][_0x63a0('0x36')]){_0x454774[_0x63a0('0x4e')]=_[_0x63a0('0x4f')](_0x454774[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0x454774[_0x63a0('0x48')],function(_0x3d01b2){var _0xd7f5b0={};_0xd7f5b0[_0x3d01b2]={'$like':'%'+_0x22d541['query'][_0x63a0('0x36')]+'%'};return _0xd7f5b0;})});}_0x454774=_[_0x63a0('0x4f')]({},_0x454774,_0x22d541[_0x63a0('0x55')]);return _0x164fc0[_0x63a0('0x11a')](_0x454774);}})[_0x63a0('0x1d')](function(_0x1d5a73){if(_0x1d5a73){_0x12c07a=_0x1d5a73[_0x63a0('0x5c')];if(!_0x22d541[_0x63a0('0x45')][_0x63a0('0x49')](_0x63a0('0x4a'))){_0x454774['limit']=qs[_0x63a0('0x4b')](_0x22d541['query']['limit']);_0x454774[_0x63a0('0x2b')]=qs[_0x63a0('0x2b')](_0x22d541[_0x63a0('0x45')][_0x63a0('0x2b')]);}return _0x164fc0[_0x63a0('0x11a')](_0x454774);}})[_0x63a0('0x1d')](function(_0x2d4122){if(_0x2d4122){return _0x2d4122?{'count':_0x12c07a,'rows':_0x2d4122}:null;}})[_0x63a0('0x1d')](respondWithResult(_0x2a1405,null))['catch'](handleError(_0x2a1405,null));};exports[_0x63a0('0x11b')]=function(_0x60af01,_0x504fae,_0x360e41){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x60af01[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x504fae,null))[_0x63a0('0x1d')](function(_0xca582a){if(_0xca582a){return _0xca582a[_0x63a0('0x11b')](_0x60af01[_0x63a0('0x5f')][_0x63a0('0x62')],_[_0x63a0('0x107')](_0x60af01['body'],['ids','id'])||{});}})['then'](respondWithResult(_0x504fae,null))[_0x63a0('0x26')](handleError(_0x504fae,null));};exports[_0x63a0('0x11c')]=function(_0x504c57,_0x34e05e,_0x5ef89b){return db[_0x63a0('0x3f')]['find']({'where':{'id':_0x504c57['params']['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x34e05e,null))[_0x63a0('0x1d')](function(_0x23abf1){if(_0x23abf1){return _0x23abf1[_0x63a0('0x11c')](_0x504c57[_0x63a0('0x45')][_0x63a0('0x62')]);}})['then'](respondWithStatusCode(_0x34e05e,null))['catch'](handleError(_0x34e05e,null));};exports[_0x63a0('0x11d')]=function(_0xd97d30,_0x124020,_0x20040a){var _0x5e63fc={};var _0x3557df={};var _0x34ddf5;var _0x402ce0;return db[_0x63a0('0x3f')][_0x63a0('0x9a')]({'where':{'id':_0xd97d30[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x124020,null))['then'](function(_0x1d93e9){if(_0x1d93e9){_0x34ddf5=_0x1d93e9;_0x3557df[_0x63a0('0x41')]=_[_0x63a0('0x43')](db['OpenchannelAccount'][_0x63a0('0x40')]);_0x3557df['query']=_[_0x63a0('0x43')](_0xd97d30[_0x63a0('0x45')]);_0x3557df[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x3557df['model'],_0x3557df[_0x63a0('0x45')]);_0x5e63fc['attributes']=_[_0x63a0('0x5b')](_0x3557df[_0x63a0('0x41')],qs['fields'](_0xd97d30[_0x63a0('0x45')][_0x63a0('0x47')]));_0x5e63fc[_0x63a0('0x48')]=_0x5e63fc[_0x63a0('0x48')][_0x63a0('0x5c')]?_0x5e63fc[_0x63a0('0x48')]:_0x3557df[_0x63a0('0x41')];_0x5e63fc['order']=qs[_0x63a0('0x4c')](_0xd97d30['query'][_0x63a0('0x4c')]);_0x5e63fc[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0xd97d30[_0x63a0('0x45')],_0x3557df['filters']));if(_0xd97d30[_0x63a0('0x45')]['filter']){_0x5e63fc['where']=_[_0x63a0('0x4f')](_0x5e63fc['where'],{'$or':_['map'](_0x5e63fc[_0x63a0('0x48')],function(_0x518c9e){var _0x27bc21={};_0x27bc21[_0x518c9e]={'$like':'%'+_0xd97d30[_0x63a0('0x45')][_0x63a0('0x36')]+'%'};return _0x27bc21;})});}_0x5e63fc=_[_0x63a0('0x4f')]({},_0x5e63fc,_0xd97d30[_0x63a0('0x55')]);return _0x34ddf5[_0x63a0('0x11d')](_0x5e63fc);}})[_0x63a0('0x1d')](function(_0x591cdd){if(_0x591cdd){_0x402ce0=_0x591cdd[_0x63a0('0x5c')];if(!_0xd97d30[_0x63a0('0x45')][_0x63a0('0x49')]('nolimit')){_0x5e63fc[_0x63a0('0x4b')]=qs['limit'](_0xd97d30[_0x63a0('0x45')][_0x63a0('0x4b')]);_0x5e63fc['offset']=qs['offset'](_0xd97d30[_0x63a0('0x45')]['offset']);}return _0x34ddf5[_0x63a0('0x11d')](_0x5e63fc);}})[_0x63a0('0x1d')](function(_0x4db031){if(_0x4db031){return _0x4db031?{'count':_0x402ce0,'rows':_0x4db031}:null;}})[_0x63a0('0x1d')](respondWithResult(_0x124020,null))[_0x63a0('0x26')](handleError(_0x124020,null));};exports['addOpenchannelAccounts']=function(_0x5b4031,_0x2b8a45,_0x3757f0){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x5b4031[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x2b8a45,null))[_0x63a0('0x1d')](function(_0x5d9cbc){if(_0x5d9cbc){return _0x5d9cbc[_0x63a0('0x11e')](_0x5b4031[_0x63a0('0x5f')]['ids'],_[_0x63a0('0x107')](_0x5b4031[_0x63a0('0x5f')],[_0x63a0('0x62'),'id'])||{});}})[_0x63a0('0x1d')](respondWithResult(_0x2b8a45,null))[_0x63a0('0x26')](handleError(_0x2b8a45,null));};exports['removeOpenchannelAccounts']=function(_0x2446f5,_0x1cdbf9,_0x5ab257){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x2446f5[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x1cdbf9,null))['then'](function(_0x46b4e6){if(_0x46b4e6){return _0x46b4e6[_0x63a0('0x11f')](_0x2446f5['query']['ids']);}})['then'](respondWithStatusCode(_0x1cdbf9,null))[_0x63a0('0x26')](handleError(_0x1cdbf9,null));};exports[_0x63a0('0x120')]=function(_0x5285e7,_0x10c48e,_0x39425a){var _0x2c2e91={};var _0xec2991={};var _0x2372f0;var _0x1dfd5d;return db[_0x63a0('0x3f')][_0x63a0('0x9a')]({'where':{'id':_0x5285e7['params']['id']}})['then'](handleEntityNotFound(_0x10c48e,null))['then'](function(_0x2bbcd7){if(_0x2bbcd7){_0x2372f0=_0x2bbcd7;_0xec2991[_0x63a0('0x41')]=_[_0x63a0('0x43')](db[_0x63a0('0x121')][_0x63a0('0x40')]);_0xec2991['query']=_[_0x63a0('0x43')](_0x5285e7[_0x63a0('0x45')]);_0xec2991[_0x63a0('0x46')]=_['intersection'](_0xec2991['model'],_0xec2991['query']);_0x2c2e91['attributes']=_[_0x63a0('0x5b')](_0xec2991[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0x5285e7[_0x63a0('0x45')][_0x63a0('0x47')]));_0x2c2e91['attributes']=_0x2c2e91[_0x63a0('0x48')][_0x63a0('0x5c')]?_0x2c2e91[_0x63a0('0x48')]:_0xec2991[_0x63a0('0x41')];_0x2c2e91[_0x63a0('0xbb')]=qs[_0x63a0('0x4c')](_0x5285e7[_0x63a0('0x45')][_0x63a0('0x4c')]);_0x2c2e91[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0x5285e7[_0x63a0('0x45')],_0xec2991[_0x63a0('0x46')]));if(_0x5285e7['query'][_0x63a0('0x36')]){_0x2c2e91[_0x63a0('0x4e')]=_['merge'](_0x2c2e91[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0x2c2e91[_0x63a0('0x48')],function(_0x56b233){var _0xedf516={};_0xedf516[_0x56b233]={'$like':'%'+_0x5285e7[_0x63a0('0x45')][_0x63a0('0x36')]+'%'};return _0xedf516;})});}_0x2c2e91=_['merge']({},_0x2c2e91,_0x5285e7['options']);return _0x2372f0[_0x63a0('0x120')](_0x2c2e91);}})[_0x63a0('0x1d')](function(_0x3296f8){if(_0x3296f8){_0x1dfd5d=_0x3296f8[_0x63a0('0x5c')];if(!_0x5285e7[_0x63a0('0x45')]['hasOwnProperty'](_0x63a0('0x4a'))){_0x2c2e91[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x5285e7[_0x63a0('0x45')][_0x63a0('0x4b')]);_0x2c2e91['offset']=qs['offset'](_0x5285e7['query'][_0x63a0('0x2b')]);}return _0x2372f0[_0x63a0('0x120')](_0x2c2e91);}})['then'](function(_0x3e568e){if(_0x3e568e){return _0x3e568e?{'count':_0x1dfd5d,'rows':_0x3e568e}:null;}})[_0x63a0('0x1d')](respondWithResult(_0x10c48e,null))['catch'](handleError(_0x10c48e,null));};exports[_0x63a0('0x122')]=function(_0x58f1e6,_0x37a5c6,_0x1fbf6e){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x58f1e6['params']['id']}})['then'](handleEntityNotFound(_0x37a5c6,null))[_0x63a0('0x1d')](function(_0x1f8b1a){if(_0x1f8b1a){return _0x1f8b1a['addSmsAccounts'](_0x58f1e6[_0x63a0('0x5f')][_0x63a0('0x62')],_[_0x63a0('0x107')](_0x58f1e6[_0x63a0('0x5f')],[_0x63a0('0x62'),'id'])||{});}})[_0x63a0('0x1d')](respondWithResult(_0x37a5c6,null))[_0x63a0('0x26')](handleError(_0x37a5c6,null));};exports['removeSmsAccounts']=function(_0x506d48,_0x2d3bb5,_0xf5bc7){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x506d48[_0x63a0('0x59')]['id']}})['then'](handleEntityNotFound(_0x2d3bb5,null))[_0x63a0('0x1d')](function(_0xefb1f0){if(_0xefb1f0){return _0xefb1f0[_0x63a0('0x123')](_0x506d48['query']['ids']);}})[_0x63a0('0x1d')](respondWithStatusCode(_0x2d3bb5,null))['catch'](handleError(_0x2d3bb5,null));};exports[_0x63a0('0x124')]=function(_0x1a97c4,_0x4a5655,_0x97bc28){var _0xeea89a={};var _0x403a8b={};var _0x388508;var _0x453ba7;return db['User']['findOne']({'where':{'id':_0x1a97c4[_0x63a0('0x59')]['id']}})['then'](handleEntityNotFound(_0x4a5655,null))[_0x63a0('0x1d')](function(_0x54eae9){if(_0x54eae9){_0x388508=_0x54eae9;_0x403a8b[_0x63a0('0x41')]=_[_0x63a0('0x43')](db[_0x63a0('0x125')][_0x63a0('0x40')]);_0x403a8b[_0x63a0('0x45')]=_[_0x63a0('0x43')](_0x1a97c4['query']);_0x403a8b[_0x63a0('0x46')]=_['intersection'](_0x403a8b[_0x63a0('0x41')],_0x403a8b[_0x63a0('0x45')]);_0xeea89a[_0x63a0('0x48')]=_[_0x63a0('0x5b')](_0x403a8b[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0x1a97c4['query'][_0x63a0('0x47')]));_0xeea89a[_0x63a0('0x48')]=_0xeea89a[_0x63a0('0x48')][_0x63a0('0x5c')]?_0xeea89a[_0x63a0('0x48')]:_0x403a8b[_0x63a0('0x41')];_0xeea89a[_0x63a0('0xbb')]=qs[_0x63a0('0x4c')](_0x1a97c4['query'][_0x63a0('0x4c')]);_0xeea89a[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0x1a97c4[_0x63a0('0x45')],_0x403a8b['filters']));if(_0x1a97c4[_0x63a0('0x45')][_0x63a0('0x36')]){_0xeea89a[_0x63a0('0x4e')]=_[_0x63a0('0x4f')](_0xeea89a[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0xeea89a[_0x63a0('0x48')],function(_0x294e0d){var _0x3d7a63={};_0x3d7a63[_0x294e0d]={'$like':'%'+_0x1a97c4[_0x63a0('0x45')][_0x63a0('0x36')]+'%'};return _0x3d7a63;})});}_0xeea89a=_[_0x63a0('0x4f')]({},_0xeea89a,_0x1a97c4['options']);return _0x388508[_0x63a0('0x124')](_0xeea89a);}})['then'](function(_0x5aa848){if(_0x5aa848){_0x453ba7=_0x5aa848[_0x63a0('0x5c')];if(!_0x1a97c4[_0x63a0('0x45')]['hasOwnProperty'](_0x63a0('0x4a'))){_0xeea89a[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x1a97c4[_0x63a0('0x45')][_0x63a0('0x4b')]);_0xeea89a[_0x63a0('0x2b')]=qs[_0x63a0('0x2b')](_0x1a97c4[_0x63a0('0x45')][_0x63a0('0x2b')]);}return _0x388508[_0x63a0('0x124')](_0xeea89a);}})[_0x63a0('0x1d')](function(_0x397553){if(_0x397553){return _0x397553?{'count':_0x453ba7,'rows':_0x397553}:null;}})[_0x63a0('0x1d')](respondWithResult(_0x4a5655,null))[_0x63a0('0x26')](handleError(_0x4a5655,null));};exports[_0x63a0('0x126')]=function(_0x4654f6,_0x3c457c,_0x2c0c2e){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x4654f6[_0x63a0('0x59')]['id']}})['then'](handleEntityNotFound(_0x3c457c,null))[_0x63a0('0x1d')](function(_0x5cf8e9){if(_0x5cf8e9){return _0x5cf8e9[_0x63a0('0x126')](_0x4654f6[_0x63a0('0x5f')][_0x63a0('0x62')],_[_0x63a0('0x107')](_0x4654f6[_0x63a0('0x5f')],[_0x63a0('0x62'),'id'])||{});}})[_0x63a0('0x1d')](respondWithResult(_0x3c457c,null))[_0x63a0('0x26')](handleError(_0x3c457c,null));};exports[_0x63a0('0x127')]=function(_0x12e31e,_0x82bb3e,_0x3c0dca){return db['User']['find']({'where':{'id':_0x12e31e['params']['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x82bb3e,null))['then'](function(_0x2bf770){if(_0x2bf770){return _0x2bf770[_0x63a0('0x127')](_0x12e31e[_0x63a0('0x45')][_0x63a0('0x62')]);}})[_0x63a0('0x1d')](respondWithStatusCode(_0x82bb3e,null))[_0x63a0('0x26')](handleError(_0x82bb3e,null));};exports[_0x63a0('0x128')]=function(_0x4fc3e1,_0x37d3e2,_0x21cd93){var _0x16d7e3={};var _0xc4189b={};var _0x3405b2;var _0x260fe9;return db['User'][_0x63a0('0x9a')]({'where':{'id':_0x4fc3e1[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x37d3e2,null))[_0x63a0('0x1d')](function(_0x4dbce5){if(_0x4dbce5){_0x3405b2=_0x4dbce5;_0xc4189b[_0x63a0('0x41')]=_[_0x63a0('0x43')](db[_0x63a0('0x129')]['rawAttributes']);_0xc4189b['query']=_[_0x63a0('0x43')](_0x4fc3e1[_0x63a0('0x45')]);_0xc4189b['filters']=_[_0x63a0('0x5b')](_0xc4189b[_0x63a0('0x41')],_0xc4189b['query']);_0x16d7e3[_0x63a0('0x48')]=_[_0x63a0('0x5b')](_0xc4189b[_0x63a0('0x41')],qs[_0x63a0('0x47')](_0x4fc3e1[_0x63a0('0x45')][_0x63a0('0x47')]));_0x16d7e3[_0x63a0('0x48')]=_0x16d7e3['attributes'][_0x63a0('0x5c')]?_0x16d7e3['attributes']:_0xc4189b['model'];_0x16d7e3['order']=qs[_0x63a0('0x4c')](_0x4fc3e1['query']['sort']);_0x16d7e3[_0x63a0('0x4e')]=qs[_0x63a0('0x46')](_['pick'](_0x4fc3e1[_0x63a0('0x45')],_0xc4189b[_0x63a0('0x46')]));if(_0x4fc3e1[_0x63a0('0x45')]['filter']){_0x16d7e3[_0x63a0('0x4e')]=_['merge'](_0x16d7e3[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0x16d7e3[_0x63a0('0x48')],function(_0x4059db){var _0x5d8daa={};_0x5d8daa[_0x4059db]={'$like':'%'+_0x4fc3e1[_0x63a0('0x45')][_0x63a0('0x36')]+'%'};return _0x5d8daa;})});}_0x16d7e3=_[_0x63a0('0x4f')]({},_0x16d7e3,_0x4fc3e1[_0x63a0('0x55')]);return _0x3405b2['getSquareProjects'](_0x16d7e3);}})['then'](function(_0xb6df5){if(_0xb6df5){_0x260fe9=_0xb6df5[_0x63a0('0x5c')];if(!_0x4fc3e1[_0x63a0('0x45')][_0x63a0('0x49')](_0x63a0('0x4a'))){_0x16d7e3[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x4fc3e1[_0x63a0('0x45')]['limit']);_0x16d7e3[_0x63a0('0x2b')]=qs[_0x63a0('0x2b')](_0x4fc3e1['query'][_0x63a0('0x2b')]);}return _0x3405b2[_0x63a0('0x128')](_0x16d7e3);}})[_0x63a0('0x1d')](function(_0xbe96d9){if(_0xbe96d9){return _0xbe96d9?{'count':_0x260fe9,'rows':_0xbe96d9}:null;}})['then'](respondWithResult(_0x37d3e2,null))['catch'](handleError(_0x37d3e2,null));};exports[_0x63a0('0x12a')]=function(_0x122323,_0x10b8d0,_0x527a9e){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x122323[_0x63a0('0x59')]['id']}})['then'](handleEntityNotFound(_0x10b8d0,null))[_0x63a0('0x1d')](function(_0x237bc8){if(_0x237bc8){return _0x237bc8[_0x63a0('0x12a')](_0x122323[_0x63a0('0x5f')][_0x63a0('0x62')],_[_0x63a0('0x107')](_0x122323[_0x63a0('0x5f')],[_0x63a0('0x62'),'id'])||{});}})[_0x63a0('0x1d')](respondWithResult(_0x10b8d0,null))[_0x63a0('0x26')](handleError(_0x10b8d0,null));};exports['removeSquareProjects']=function(_0x18df6c,_0x1045af,_0x40c860){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x18df6c[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0x1045af,null))['then'](function(_0x53ff07){if(_0x53ff07){return _0x53ff07[_0x63a0('0x12b')](_0x18df6c[_0x63a0('0x45')][_0x63a0('0x62')]);}})[_0x63a0('0x1d')](respondWithStatusCode(_0x1045af,null))[_0x63a0('0x26')](handleError(_0x1045af,null));};exports[_0x63a0('0x12c')]=function(_0x2020c8,_0x9e0f5e){var _0x2d0922={},_0x261aa7={},_0x23bbd9={'count':0x0,'rows':[]};var _0x265deb=db[_0x63a0('0x12d')]['rawAttributes'];_0x261aa7['model']=_[_0x63a0('0x43')](_0x265deb);_0x261aa7[_0x63a0('0x45')]=_[_0x63a0('0x43')](_0x2020c8[_0x63a0('0x45')]);_0x261aa7[_0x63a0('0x46')]=_[_0x63a0('0x5b')](_0x261aa7[_0x63a0('0x41')],_0x261aa7[_0x63a0('0x45')]);_0x261aa7['filters']=_[_0x63a0('0x12e')](_0x261aa7[_0x63a0('0x46')],[_0x63a0('0x12f'),_0x63a0('0x130'),'$gt',_0x63a0('0x131'),'$lt',_0x63a0('0x132'),_0x63a0('0x133'),_0x63a0('0x134'),_0x63a0('0x135'),_0x63a0('0x136'),_0x63a0('0x137'),'$in',_0x63a0('0x138'),'$like',_0x63a0('0x139'),_0x63a0('0x13a'),_0x63a0('0x13b'),_0x63a0('0x13c'),'$overlap','$contains','$contained',_0x63a0('0x13d')]);_0x2d0922['attributes']=_['intersection'](_0x261aa7[_0x63a0('0x41')],qs['fields'](_0x2020c8[_0x63a0('0x45')][_0x63a0('0x47')]));_0x2d0922['attributes']=_0x2d0922[_0x63a0('0x48')]['length']?_0x2d0922[_0x63a0('0x48')]:_0x261aa7[_0x63a0('0x41')];if(!_0x2020c8[_0x63a0('0x45')][_0x63a0('0x49')]('nolimit')){_0x2d0922[_0x63a0('0x4b')]=qs[_0x63a0('0x4b')](_0x2020c8[_0x63a0('0x45')][_0x63a0('0x4b')]);_0x2d0922[_0x63a0('0x2b')]=qs['offset'](_0x2020c8[_0x63a0('0x45')][_0x63a0('0x2b')]);}_0x2d0922[_0x63a0('0xbb')]=qs[_0x63a0('0x4c')](_0x2020c8[_0x63a0('0x45')]['sort']);_0x2d0922['where']=qs[_0x63a0('0x46')](_[_0x63a0('0x4d')](_0x2020c8[_0x63a0('0x45')],_0x261aa7[_0x63a0('0x46')]));if(_0x2020c8[_0x63a0('0x45')]['filter']){_0x2d0922[_0x63a0('0x4e')]=_['merge'](_0x2d0922[_0x63a0('0x4e')],{'$or':_[_0x63a0('0x37')](_0x2d0922[_0x63a0('0x48')],function(_0x250ed5){var _0x5f4443={};_0x5f4443[_0x250ed5]={'$like':'%'+_0x2020c8[_0x63a0('0x45')][_0x63a0('0x36')]+'%'};return _0x5f4443;})});}_0x2d0922['where']={'$and':[_0x2d0922[_0x63a0('0x4e')],{'$or':[{'UserId':_0x2020c8[_0x63a0('0x59')]['id']},{'OwnerId':_0x2020c8[_0x63a0('0x59')]['id']}]}]};_0x2d0922=_[_0x63a0('0x4f')]({},_0x2d0922,_0x2020c8['options']);var _0x2531e3={'where':_0x2d0922[_0x63a0('0x4e')]};return db[_0x63a0('0x12d')]['count'](_0x2531e3)[_0x63a0('0x1d')](function(_0x442d31){_0x23bbd9[_0x63a0('0x56')]=_0x442d31;if(_0x2020c8[_0x63a0('0x45')][_0x63a0('0x57')]){_0x2d0922[_0x63a0('0x58')]=[{'attributes':['id','firstName',_0x63a0('0x13e'),'phone'],'model':db[_0x63a0('0x13f')],'as':_0x63a0('0x140')},{'attributes':['id',_0x63a0('0x3c'),_0x63a0('0x141')],'model':db[_0x63a0('0xaa')],'as':'Queue'}];}return db[_0x63a0('0x12d')][_0x63a0('0xc3')](_0x2d0922);})[_0x63a0('0x1d')](function(_0x57ad69){_0x23bbd9['rows']=_0x57ad69;return _0x23bbd9;})[_0x63a0('0x1d')](respondWithFilteredResult(_0x9e0f5e,_0x2d0922))[_0x63a0('0x26')](handleError(_0x9e0f5e,null));};exports['getApiKey']=function(_0x5426aa,_0x5117ec,_0x35c27d){if(!_[_0x63a0('0x69')](_0x5426aa['user']['id'])&&(_0x5426aa[_0x63a0('0x32')][_0x63a0('0x3b')]=='admin'||_0x5426aa['user'][_0x63a0('0x3b')]==_0x63a0('0x32'))){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x5426aa[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](function(_0x4a9080){var _0x2f3768=authService[_0x63a0('0x142')](_0x4a9080);if(_0x2f3768)return _0x5117ec[_0x63a0('0x28')](0xc8)[_0x63a0('0x2a')]({'api_key':_0x2f3768});else return _0x5117ec[_0x63a0('0x28')](0xcc)[_0x63a0('0x2a')]({'message':_0x63a0('0x143')});})['catch'](handleError(_0x5117ec,0x193));}else{return _0x5117ec['status'](0x191)['json']({'message':_0x63a0('0x144')});}};exports[_0x63a0('0x145')]=function(_0x352d76,_0x195d5b,_0x3e181b){var _0x452bc8;if(!_[_0x63a0('0x69')](_0x352d76[_0x63a0('0x32')]['id'])&&(_0x352d76['user']['role']==_0x63a0('0x97')||_0x352d76[_0x63a0('0x32')][_0x63a0('0x3b')]==_0x63a0('0x32'))){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x352d76['params']['id']}})['then'](function(_0xaea8e5){return[_0xaea8e5,authService[_0x63a0('0x146')](_0xaea8e5)];})[_0x63a0('0x1d')](function(_0x1c5cf4){_0x452bc8=_0x1c5cf4;return db[_0x63a0('0x3f')]['update']({'apiKeyNonce':_0x452bc8[0x0]['apiKeyNonce'],'apiKeyIat':_0x452bc8[0x0][_0x63a0('0x147')]},{'where':{'id':_0x352d76[_0x63a0('0x59')]['id']}});})[_0x63a0('0x1d')](function(){return _0x195d5b['status'](0xc8)[_0x63a0('0x2a')]({'api_key':_0x452bc8[0x1]});})[_0x63a0('0x26')](handleError(_0x195d5b,0x193));}else{return _0x195d5b[_0x63a0('0x28')](0x191)[_0x63a0('0x2a')]({'message':_0x63a0('0x144')});}};exports[_0x63a0('0x148')]=function(_0x1a9802,_0xc0519c,_0x55d060){if(!_['isNil'](_0x1a9802[_0x63a0('0x32')]['id'])&&(_0x1a9802[_0x63a0('0x32')][_0x63a0('0x3b')]=='admin'||_0x1a9802[_0x63a0('0x32')]['role']==_0x63a0('0x32'))){return db[_0x63a0('0x3f')][_0x63a0('0x3a')]({'where':{'id':_0x1a9802[_0x63a0('0x59')]['id']}})[_0x63a0('0x1d')](handleEntityNotFound(_0xc0519c,null))['then'](function(_0xa4c0fe){if(_0xa4c0fe&&_0xa4c0fe[_0x63a0('0x149')]&&_0xa4c0fe['apiKeyIat'])return _0xa4c0fe;else throw{'message':_0x63a0('0x14a')};})['then'](function(_0xb28f58){return db[_0x63a0('0x3f')][_0x63a0('0x5e')]({'apiKeyNonce':null,'apiKeyIat':null},{'where':{'id':_0x1a9802[_0x63a0('0x59')]['id']}});})[_0x63a0('0x1d')](respondWithStatusCode(_0xc0519c,0xc8))[_0x63a0('0x26')](handleError(_0xc0519c,0x193));}else{return _0xc0519c[_0x63a0('0x28')](0x191)[_0x63a0('0x2a')]({'message':'You\x20don\x27t\x20have\x20sufficient\x20privelages\x20to\x20access\x20this\x20resource.'});}};
\ No newline at end of file
index afcdb53..57b6454 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa456=['User','setMaxListeners','update','remove','emit','hook','exports','events','../../mysqldb'];(function(_0x27b140,_0x4ca036){var _0x3c7eb6=function(_0x34d8ec){while(--_0x34d8ec){_0x27b140['push'](_0x27b140['shift']());}};_0x3c7eb6(++_0x4ca036);}(_0xa456,0x142));var _0x6a45=function(_0x20ef64,_0x4a8fe9){_0x20ef64=_0x20ef64-0x0;var _0x3707d8=_0xa456[_0x20ef64];return _0x3707d8;};'use strict';var EventEmitter=require(_0x6a45('0x0'));var User=require(_0x6a45('0x1'))['db'][_0x6a45('0x2')];var UserEvents=new EventEmitter();UserEvents[_0x6a45('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x6a45('0x4'),'afterDestroy':_0x6a45('0x5')};function emitEvent(_0x3f7448){return function(_0x500c72,_0x1f0701,_0x40acad){UserEvents[_0x6a45('0x6')](_0x3f7448+':'+_0x500c72['id'],_0x500c72);UserEvents[_0x6a45('0x6')](_0x3f7448,_0x500c72);_0x40acad(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];User[_0x6a45('0x7')](e,emitEvent(event));}}module[_0x6a45('0x8')]=UserEvents;
\ No newline at end of file
+var _0x9505=['save','update','remove','emit','hasOwnProperty','events','../../mysqldb','setMaxListeners'];(function(_0x2616e3,_0x50d146){var _0x30e97f=function(_0x237b70){while(--_0x237b70){_0x2616e3['push'](_0x2616e3['shift']());}};_0x30e97f(++_0x50d146);}(_0x9505,0x1e5));var _0x5950=function(_0x4e9f43,_0x4f6082){_0x4e9f43=_0x4e9f43-0x0;var _0x441cb3=_0x9505[_0x4e9f43];return _0x441cb3;};'use strict';var EventEmitter=require(_0x5950('0x0'));var User=require(_0x5950('0x1'))['db']['User'];var UserEvents=new EventEmitter();UserEvents[_0x5950('0x2')](0x0);var events={'afterCreate':_0x5950('0x3'),'afterUpdate':_0x5950('0x4'),'afterDestroy':_0x5950('0x5')};function emitEvent(_0x1344e4){return function(_0x4d3220,_0x48219e,_0x2494fc){UserEvents[_0x5950('0x6')](_0x1344e4+':'+_0x4d3220['id'],_0x4d3220);UserEvents[_0x5950('0x6')](_0x1344e4,_0x4d3220);_0x2494fc(null);};}for(var e in events){if(events[_0x5950('0x7')](e)){var event=events[e];User['hook'](e,emitEvent(event));}}module['exports']=UserEvents;
\ No newline at end of file
index dc4b175..2ec8201 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa6e7=['exports','models','define','User','users','utf8','utf8_bin','updateMd5Password','changed','password','updatePassword','VoiceExtension','bulkCreate','catch','resolve','chanspy','destroy','encryptPassword','function','Missing\x20Callback','randomBytes','toString','base64','salt','pbkdf2','sha1','indexOf','provider','Invalid\x20password','makeSalt','md5secret',':asterisk:','bluebird','util','md5','length','context','from-sip','%s%s','prefix','push','merge','format','CDR(type)=%s','record','recordingFormat','Authenticate','ChanSpy','SIP/%s,%s','options','join','StopMixMonitor','wav','gsm','system','Set','CDR(type)=internal','extensionMonitor','includes','_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','_XCALLY_MIXMONITOR_FORMAT=%s','Dial','SIP/%s,,tTxXU(xcally-mixmonitor-context)','name','SIP/%s,,tTxX','Hangup','priority','defaults','VoiceChanSpy','then','internal','concat'];(function(_0x2441f4,_0x5c479a){var _0x50cef6=function(_0x1acf44){while(--_0x1acf44){_0x2441f4['push'](_0x2441f4['shift']());}};_0x50cef6(++_0x5c479a);}(_0xa6e7,0xb0));var _0x7a6e=function(_0x293b44,_0x36e585){_0x293b44=_0x293b44-0x0;var _0x58a5bc=_0xa6e7[_0x293b44];return _0x58a5bc;};'use strict';var BPromise=require(_0x7a6e('0x0'));var crypto=require('crypto');var util=require(_0x7a6e('0x1'));var md5=require(_0x7a6e('0x2'));var _=require('lodash');var attributes=require('./user.attributes');var authTypes=['google'];var validatePresenceOf=function(_0x11fb2c){return _0x11fb2c&&_0x11fb2c[_0x7a6e('0x3')];};var getChanSpyApplications=function(_0x5e796b,_0x5ac863,_0x497ee3){var _0x2e32bd={'context':_0x5e796b[_0x7a6e('0x4')]||_0x7a6e('0x5'),'type':'system','isApp':![],'UserId':_0x5e796b['id']};var _0x56984a=[];for(var _0x50d511=0x0,_0x415f8d=0x1;_0x50d511<_0x497ee3[_0x7a6e('0x3')];_0x50d511++,_0x415f8d=0x1){var _0x4aeacf={'exten':util['format'](_0x7a6e('0x6'),_0x497ee3[_0x50d511][_0x7a6e('0x7')],_0x5ac863),'ChanSpyId':_0x497ee3[_0x50d511]['id']};_0x56984a[_0x7a6e('0x8')](_[_0x7a6e('0x9')]({'app':'Set','appdata':util[_0x7a6e('0xa')](_0x7a6e('0xb'),'chanspy'),'priority':_0x415f8d++},_0x2e32bd,_0x4aeacf));if(_0x497ee3[_0x50d511][_0x7a6e('0xc')]){_0x56984a[_0x7a6e('0x8')](_[_0x7a6e('0x9')]({'app':'MixMonitor','appdata':util[_0x7a6e('0xa')]('${UNIQUEID}.%s,ab',_0x497ee3[_0x50d511][_0x7a6e('0xd')]),'priority':_0x415f8d++},_0x2e32bd,_0x4aeacf));}if(_0x497ee3[_0x50d511]['auth']){_0x56984a[_0x7a6e('0x8')](_[_0x7a6e('0x9')]({'app':_0x7a6e('0xe'),'appdata':_0x497ee3[_0x50d511]['password'],'priority':_0x415f8d++},_0x2e32bd,_0x4aeacf));}_0x56984a['push'](_[_0x7a6e('0x9')]({'app':_0x7a6e('0xf'),'appdata':util['format'](_0x7a6e('0x10'),_0x5e796b['name'],_0x497ee3[_0x50d511][_0x7a6e('0x11')]?_0x497ee3[_0x50d511][_0x7a6e('0x11')][_0x7a6e('0x12')](''):''),'priority':_0x415f8d++},_0x2e32bd,_0x4aeacf));if(_0x497ee3[_0x50d511]['record']){_0x56984a[_0x7a6e('0x8')](_[_0x7a6e('0x9')]({'app':_0x7a6e('0x13'),'priority':_0x415f8d++},_0x2e32bd,_0x4aeacf));}}return _0x56984a;};var getUserApplications=function(_0x25166a,_0x264b39){var _0x1ccc27=[_0x7a6e('0x14'),'WAV',_0x7a6e('0x15')];var _0x975cb5={'context':_0x25166a[_0x7a6e('0x4')]||'from-sip','exten':_0x264b39,'type':_0x7a6e('0x16'),'isApp':![],'UserId':_0x25166a['id']};var _0x35adf3=[{'app':_0x7a6e('0x17'),'appdata':_0x7a6e('0x18')}];if(_0x25166a[_0x7a6e('0x19')]&&_[_0x7a6e('0x1a')](_0x1ccc27,_0x25166a['extensionMonitor'])){_0x35adf3[_0x7a6e('0x8')]({'app':_0x7a6e('0x17'),'appdata':_0x7a6e('0x1b')});_0x35adf3[_0x7a6e('0x8')]({'app':_0x7a6e('0x17'),'appdata':util[_0x7a6e('0xa')](_0x7a6e('0x1c'),_0x25166a[_0x7a6e('0x19')])});_0x35adf3[_0x7a6e('0x8')]({'app':_0x7a6e('0x1d'),'appdata':util[_0x7a6e('0xa')](_0x7a6e('0x1e'),_0x25166a[_0x7a6e('0x1f')])});}else{_0x35adf3['push']({'app':_0x7a6e('0x1d'),'appdata':util[_0x7a6e('0xa')](_0x7a6e('0x20'),_0x25166a[_0x7a6e('0x1f')])});}_0x35adf3[_0x7a6e('0x8')]({'app':_0x7a6e('0x21')});for(var _0x36db72=0x0;_0x36db72<_0x35adf3['length'];_0x36db72++){_0x35adf3[_0x36db72][_0x7a6e('0x22')]=_0x36db72+0x1;_0x35adf3[_0x36db72]=_[_0x7a6e('0x23')](_0x35adf3[_0x36db72],_0x975cb5);}return _0x35adf3;};var getChanSpyPromise=function(_0x2f213a,_0x50b643){return new BPromise(function(_0x18f9b6,_0x365f92){return _0x2f213a[_0x7a6e('0x24')]['findAll']()[_0x7a6e('0x25')](function(_0x17acf7){if(_0x17acf7){var _0x5350e4=getChanSpyApplications(_0x50b643,_0x50b643[_0x7a6e('0x26')],_0x17acf7);if(_0x50b643[_0x7a6e('0x26')]!=_0x50b643[_0x7a6e('0x1f')]){_0x5350e4=_0x5350e4[_0x7a6e('0x27')](getChanSpyApplications(_0x50b643,_0x50b643[_0x7a6e('0x1f')],_0x17acf7));}return _0x18f9b6(_0x5350e4);}return _0x18f9b6([]);})['catch'](function(_0x3bdc40){_0x365f92(_0x3bdc40);});});};module[_0x7a6e('0x28')]=function(_0x3b2193,_0x2a0b06){var _0x360dbe=_0x3b2193[_0x7a6e('0x29')];return _0x3b2193[_0x7a6e('0x2a')](_0x7a6e('0x2b'),attributes,{'tableName':_0x7a6e('0x2c'),'charset':_0x7a6e('0x2d'),'collate':_0x7a6e('0x2e'),'hooks':{'beforeCreate':function(_0x5e8bd5,_0x5a49c3,_0x401f04){_0x5e8bd5[_0x7a6e('0x2f')]();_0x5e8bd5['updatePassword'](_0x401f04);},'beforeUpdate':function(_0x2cb4cb,_0xe7265d,_0x309650){if(_0x2cb4cb[_0x7a6e('0x30')](_0x7a6e('0x31'))){_0x2cb4cb['updateMd5Password']();return _0x2cb4cb[_0x7a6e('0x32')](_0x309650);}_0x309650();},'afterCreate':function(_0xef000b,_0x83b82f,_0x166b9d){var _0x289d67=getUserApplications(_0xef000b,_0xef000b[_0x7a6e('0x26')]);if(_0xef000b[_0x7a6e('0x26')]!=_0xef000b[_0x7a6e('0x1f')]){_0x289d67=_0x289d67[_0x7a6e('0x27')](getUserApplications(_0xef000b,_0xef000b[_0x7a6e('0x1f')]));}return _0x360dbe[_0x7a6e('0x33')][_0x7a6e('0x34')](_0x289d67)[_0x7a6e('0x25')](function(){if(_0xef000b['chanspy']){return getChanSpyPromise(_0x360dbe,_0xef000b);}})[_0x7a6e('0x25')](function(_0x5dc3d4){if(_0x5dc3d4&&_0x5dc3d4[_0x7a6e('0x3')]){return _0x360dbe[_0x7a6e('0x33')][_0x7a6e('0x34')](_0x5dc3d4);}})['then'](function(){_0x166b9d();})[_0x7a6e('0x35')](function(_0x24125f){_0x166b9d(_0x24125f);});},'afterUpdate':function(_0x176337,_0xf1644b,_0x5eb8ad){return BPromise[_0x7a6e('0x36')]()['then'](function(){if(_0x176337[_0x7a6e('0x30')](_0x7a6e('0x37'))||_0x176337[_0x7a6e('0x30')]('context')){return _0x360dbe[_0x7a6e('0x33')]['destroy']({'where':{'UserId':_0x176337['id'],'type':'system','ChanSpyId':{'$ne':null}}})[_0x7a6e('0x25')](function(){if(_0x176337[_0x7a6e('0x37')]){return getChanSpyPromise(_0x360dbe,_0x176337)[_0x7a6e('0x25')](function(_0x23d0ed){if(_0x23d0ed&&_0x23d0ed['length']){return _0x360dbe[_0x7a6e('0x33')]['bulkCreate'](_0x23d0ed);}});}});}})['then'](function(){if(_0x176337['changed'](_0x7a6e('0x19'))||_0x176337[_0x7a6e('0x30')](_0x7a6e('0x4'))){return _0x360dbe['VoiceExtension'][_0x7a6e('0x38')]({'where':{'UserId':_0x176337['id'],'type':'system','ChanSpyId':null}})[_0x7a6e('0x25')](function(){var _0xccf6d5=getUserApplications(_0x176337,_0x176337[_0x7a6e('0x26')]);if(_0x176337['internal']!=_0x176337[_0x7a6e('0x1f')]){_0xccf6d5=_0xccf6d5['concat'](getUserApplications(_0x176337,_0x176337['name']));}return _0x360dbe[_0x7a6e('0x33')][_0x7a6e('0x34')](_0xccf6d5);});}})[_0x7a6e('0x25')](function(){_0x5eb8ad();})[_0x7a6e('0x35')](function(_0x44b661){_0x5eb8ad(_0x44b661);});},'afterDestroy':function(_0x111d67,_0x2c5d7a){return _0x360dbe[_0x7a6e('0x33')][_0x7a6e('0x38')]({'where':{'UserId':_0x111d67['id'],'type':_0x7a6e('0x16')}});}},'instanceMethods':{'authenticate':function(_0x2a3c26,_0x2039ca){if(!_0x2039ca){return this['password']===this[_0x7a6e('0x39')](_0x2a3c26);}var _0x539f47=this;this[_0x7a6e('0x39')](_0x2a3c26,function(_0x221ad7,_0x464185){if(_0x221ad7){_0x2039ca(_0x221ad7);}if(_0x539f47[_0x7a6e('0x31')]===_0x464185){_0x2039ca(null,!![]);}else{_0x2039ca(null,![]);}});},'makeSalt':function(_0x48da43,_0x2c7382){var _0x565eec=0x10;if(typeof arguments[0x0]===_0x7a6e('0x3a')){_0x2c7382=arguments[0x0];_0x48da43=_0x565eec;}else if(typeof arguments[0x1]===_0x7a6e('0x3a')){_0x2c7382=arguments[0x1];}else{throw new Error(_0x7a6e('0x3b'));}if(!_0x48da43){_0x48da43=_0x565eec;}return crypto[_0x7a6e('0x3c')](_0x48da43,function(_0x2de1d5,_0x4d14ca){if(_0x2de1d5){_0x2c7382(_0x2de1d5);}return _0x2c7382(null,_0x4d14ca[_0x7a6e('0x3d')](_0x7a6e('0x3e')));});},'encryptPassword':function(_0x4ed148,_0x200e75){if(!_0x4ed148||!this[_0x7a6e('0x3f')]){return _0x200e75?_0x200e75(null):null;}var _0x3fbab5=0x2710;var _0x4e724e=0x40;var _0x92401a=new Buffer(this[_0x7a6e('0x3f')],_0x7a6e('0x3e'));if(!_0x200e75){return crypto['pbkdf2Sync'](_0x4ed148,_0x92401a,_0x3fbab5,_0x4e724e,'sha1')[_0x7a6e('0x3d')](_0x7a6e('0x3e'));}return crypto[_0x7a6e('0x40')](_0x4ed148,_0x92401a,_0x3fbab5,_0x4e724e,_0x7a6e('0x41'),function(_0x448e9f,_0x4d69c0){if(_0x448e9f){_0x200e75(_0x448e9f);}return _0x200e75(null,_0x4d69c0[_0x7a6e('0x3d')](_0x7a6e('0x3e')));});},'updatePassword':function(_0x4ee64a){if(!this['password']){return _0x4ee64a(null);}if(!validatePresenceOf(this[_0x7a6e('0x31')])&&authTypes[_0x7a6e('0x42')](this[_0x7a6e('0x43')])===-0x1){_0x4ee64a(new Error(_0x7a6e('0x44')));}var _0x106fe7=this;this[_0x7a6e('0x45')](function(_0x268ff4,_0x324170){if(_0x268ff4){return _0x4ee64a(_0x268ff4);}_0x106fe7[_0x7a6e('0x3f')]=_0x324170;_0x106fe7[_0x7a6e('0x39')](_0x106fe7[_0x7a6e('0x31')],function(_0x37f87f,_0x38e180){if(_0x37f87f){_0x4ee64a(_0x37f87f);}_0x106fe7[_0x7a6e('0x31')]=_0x38e180;_0x4ee64a(null);});});},'updateMd5Password':function(){this[_0x7a6e('0x46')]=md5(this[_0x7a6e('0x1f')]+_0x7a6e('0x47')+this[_0x7a6e('0x31')]);return this['md5secret'];}}});};
\ No newline at end of file
+var _0x3e8e=['CDR(type)=%s','chanspy','MixMonitor','recordingFormat','Authenticate','password','ChanSpy','options','record','StopMixMonitor','wav','WAV','gsm','CDR(type)=internal','includes','extensionMonitor','_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','_XCALLY_MIXMONITOR_FORMAT=%s','SIP/%s,,tTxXU(xcally-mixmonitor-context)','Dial','SIP/%s,,tTxX','length','priority','defaults','VoiceChanSpy','findAll','then','internal','concat','name','exports','models','define','users','utf8_bin','updateMd5Password','updatePassword','changed','bulkCreate','VoiceExtension','catch','resolve','destroy','encryptPassword','function','toString','base64','salt','pbkdf2Sync','pbkdf2','indexOf','provider','makeSalt',':asterisk:','md5secret','crypto','util','md5','lodash','./user.attributes','google','context','from-sip','system','format','prefix','push','merge','Set'];(function(_0xfc97e7,_0x5053dc){var _0x4f5391=function(_0x1234bd){while(--_0x1234bd){_0xfc97e7['push'](_0xfc97e7['shift']());}};_0x4f5391(++_0x5053dc);}(_0x3e8e,0x106));var _0xe3e8=function(_0x18f44d,_0x51a242){_0x18f44d=_0x18f44d-0x0;var _0x1b485c=_0x3e8e[_0x18f44d];return _0x1b485c;};'use strict';var BPromise=require('bluebird');var crypto=require(_0xe3e8('0x0'));var util=require(_0xe3e8('0x1'));var md5=require(_0xe3e8('0x2'));var _=require(_0xe3e8('0x3'));var attributes=require(_0xe3e8('0x4'));var authTypes=[_0xe3e8('0x5')];var validatePresenceOf=function(_0x3c14fe){return _0x3c14fe&&_0x3c14fe['length'];};var getChanSpyApplications=function(_0x57b791,_0xe4e984,_0x177467){var _0x456c12={'context':_0x57b791[_0xe3e8('0x6')]||_0xe3e8('0x7'),'type':_0xe3e8('0x8'),'isApp':![],'UserId':_0x57b791['id']};var _0x4d89a7=[];for(var _0x441200=0x0,_0x4be9bb=0x1;_0x441200<_0x177467['length'];_0x441200++,_0x4be9bb=0x1){var _0x187008={'exten':util[_0xe3e8('0x9')]('%s%s',_0x177467[_0x441200][_0xe3e8('0xa')],_0xe4e984),'ChanSpyId':_0x177467[_0x441200]['id']};_0x4d89a7[_0xe3e8('0xb')](_[_0xe3e8('0xc')]({'app':_0xe3e8('0xd'),'appdata':util[_0xe3e8('0x9')](_0xe3e8('0xe'),_0xe3e8('0xf')),'priority':_0x4be9bb++},_0x456c12,_0x187008));if(_0x177467[_0x441200]['record']){_0x4d89a7[_0xe3e8('0xb')](_['merge']({'app':_0xe3e8('0x10'),'appdata':util[_0xe3e8('0x9')]('${UNIQUEID}.%s,ab',_0x177467[_0x441200][_0xe3e8('0x11')]),'priority':_0x4be9bb++},_0x456c12,_0x187008));}if(_0x177467[_0x441200]['auth']){_0x4d89a7['push'](_['merge']({'app':_0xe3e8('0x12'),'appdata':_0x177467[_0x441200][_0xe3e8('0x13')],'priority':_0x4be9bb++},_0x456c12,_0x187008));}_0x4d89a7[_0xe3e8('0xb')](_[_0xe3e8('0xc')]({'app':_0xe3e8('0x14'),'appdata':util['format']('SIP/%s,%s',_0x57b791['name'],_0x177467[_0x441200][_0xe3e8('0x15')]?_0x177467[_0x441200][_0xe3e8('0x15')]['join'](''):''),'priority':_0x4be9bb++},_0x456c12,_0x187008));if(_0x177467[_0x441200][_0xe3e8('0x16')]){_0x4d89a7[_0xe3e8('0xb')](_[_0xe3e8('0xc')]({'app':_0xe3e8('0x17'),'priority':_0x4be9bb++},_0x456c12,_0x187008));}}return _0x4d89a7;};var getUserApplications=function(_0x207e3a,_0x384150){var _0x507ba6=[_0xe3e8('0x18'),_0xe3e8('0x19'),_0xe3e8('0x1a')];var _0xffe449={'context':_0x207e3a[_0xe3e8('0x6')]||_0xe3e8('0x7'),'exten':_0x384150,'type':_0xe3e8('0x8'),'isApp':![],'UserId':_0x207e3a['id']};var _0x29d182=[{'app':_0xe3e8('0xd'),'appdata':_0xe3e8('0x1b')}];if(_0x207e3a['extensionMonitor']&&_[_0xe3e8('0x1c')](_0x507ba6,_0x207e3a[_0xe3e8('0x1d')])){_0x29d182[_0xe3e8('0xb')]({'app':_0xe3e8('0xd'),'appdata':_0xe3e8('0x1e')});_0x29d182[_0xe3e8('0xb')]({'app':'Set','appdata':util[_0xe3e8('0x9')](_0xe3e8('0x1f'),_0x207e3a[_0xe3e8('0x1d')])});_0x29d182['push']({'app':'Dial','appdata':util[_0xe3e8('0x9')](_0xe3e8('0x20'),_0x207e3a['name'])});}else{_0x29d182[_0xe3e8('0xb')]({'app':_0xe3e8('0x21'),'appdata':util[_0xe3e8('0x9')](_0xe3e8('0x22'),_0x207e3a['name'])});}_0x29d182['push']({'app':'Hangup'});for(var _0x55bc12=0x0;_0x55bc12<_0x29d182[_0xe3e8('0x23')];_0x55bc12++){_0x29d182[_0x55bc12][_0xe3e8('0x24')]=_0x55bc12+0x1;_0x29d182[_0x55bc12]=_[_0xe3e8('0x25')](_0x29d182[_0x55bc12],_0xffe449);}return _0x29d182;};var getChanSpyPromise=function(_0x5b38d9,_0x5f4617){return new BPromise(function(_0x47f4e8,_0x743668){return _0x5b38d9[_0xe3e8('0x26')][_0xe3e8('0x27')]()[_0xe3e8('0x28')](function(_0x14f144){if(_0x14f144){var _0x58600f=getChanSpyApplications(_0x5f4617,_0x5f4617[_0xe3e8('0x29')],_0x14f144);if(_0x5f4617[_0xe3e8('0x29')]!=_0x5f4617['name']){_0x58600f=_0x58600f[_0xe3e8('0x2a')](getChanSpyApplications(_0x5f4617,_0x5f4617[_0xe3e8('0x2b')],_0x14f144));}return _0x47f4e8(_0x58600f);}return _0x47f4e8([]);})['catch'](function(_0x1c7293){_0x743668(_0x1c7293);});});};module[_0xe3e8('0x2c')]=function(_0x37f0d5,_0x4c0815){var _0x331587=_0x37f0d5[_0xe3e8('0x2d')];return _0x37f0d5[_0xe3e8('0x2e')]('User',attributes,{'tableName':_0xe3e8('0x2f'),'charset':'utf8','collate':_0xe3e8('0x30'),'hooks':{'beforeCreate':function(_0x43f057,_0x1328df,_0x36449d){_0x43f057[_0xe3e8('0x31')]();_0x43f057[_0xe3e8('0x32')](_0x36449d);},'beforeUpdate':function(_0x2b9537,_0xb4e7dc,_0x54b1f9){if(_0x2b9537[_0xe3e8('0x33')](_0xe3e8('0x13'))){_0x2b9537['updateMd5Password']();return _0x2b9537['updatePassword'](_0x54b1f9);}_0x54b1f9();},'afterCreate':function(_0x311c3d,_0x432e5a,_0x3c9cd6){var _0x5cb8ba=getUserApplications(_0x311c3d,_0x311c3d['internal']);if(_0x311c3d[_0xe3e8('0x29')]!=_0x311c3d[_0xe3e8('0x2b')]){_0x5cb8ba=_0x5cb8ba[_0xe3e8('0x2a')](getUserApplications(_0x311c3d,_0x311c3d[_0xe3e8('0x2b')]));}return _0x331587['VoiceExtension'][_0xe3e8('0x34')](_0x5cb8ba)[_0xe3e8('0x28')](function(){if(_0x311c3d[_0xe3e8('0xf')]){return getChanSpyPromise(_0x331587,_0x311c3d);}})[_0xe3e8('0x28')](function(_0x566693){if(_0x566693&&_0x566693[_0xe3e8('0x23')]){return _0x331587[_0xe3e8('0x35')]['bulkCreate'](_0x566693);}})[_0xe3e8('0x28')](function(){_0x3c9cd6();})[_0xe3e8('0x36')](function(_0x16a95a){_0x3c9cd6(_0x16a95a);});},'afterUpdate':function(_0x30049f,_0x5c6024,_0x4b2bd0){return BPromise[_0xe3e8('0x37')]()[_0xe3e8('0x28')](function(){if(_0x30049f[_0xe3e8('0x33')](_0xe3e8('0xf'))||_0x30049f[_0xe3e8('0x33')](_0xe3e8('0x6'))){return _0x331587[_0xe3e8('0x35')][_0xe3e8('0x38')]({'where':{'UserId':_0x30049f['id'],'type':_0xe3e8('0x8'),'ChanSpyId':{'$ne':null}}})['then'](function(){if(_0x30049f['chanspy']){return getChanSpyPromise(_0x331587,_0x30049f)['then'](function(_0xf3e94e){if(_0xf3e94e&&_0xf3e94e[_0xe3e8('0x23')]){return _0x331587['VoiceExtension'][_0xe3e8('0x34')](_0xf3e94e);}});}});}})['then'](function(){if(_0x30049f[_0xe3e8('0x33')]('extensionMonitor')||_0x30049f[_0xe3e8('0x33')]('context')){return _0x331587['VoiceExtension'][_0xe3e8('0x38')]({'where':{'UserId':_0x30049f['id'],'type':_0xe3e8('0x8'),'ChanSpyId':null}})[_0xe3e8('0x28')](function(){var _0x104aaf=getUserApplications(_0x30049f,_0x30049f['internal']);if(_0x30049f[_0xe3e8('0x29')]!=_0x30049f[_0xe3e8('0x2b')]){_0x104aaf=_0x104aaf[_0xe3e8('0x2a')](getUserApplications(_0x30049f,_0x30049f[_0xe3e8('0x2b')]));}return _0x331587[_0xe3e8('0x35')][_0xe3e8('0x34')](_0x104aaf);});}})['then'](function(){_0x4b2bd0();})[_0xe3e8('0x36')](function(_0x12fb90){_0x4b2bd0(_0x12fb90);});},'afterDestroy':function(_0x4634b8,_0x6d83b1){return _0x331587[_0xe3e8('0x35')][_0xe3e8('0x38')]({'where':{'UserId':_0x4634b8['id'],'type':'system'}});}},'instanceMethods':{'authenticate':function(_0x45fa6f,_0x1e3aea){if(!_0x1e3aea){return this['password']===this[_0xe3e8('0x39')](_0x45fa6f);}var _0x5c6338=this;this[_0xe3e8('0x39')](_0x45fa6f,function(_0x2104ee,_0x5a5f1f){if(_0x2104ee){_0x1e3aea(_0x2104ee);}if(_0x5c6338[_0xe3e8('0x13')]===_0x5a5f1f){_0x1e3aea(null,!![]);}else{_0x1e3aea(null,![]);}});},'makeSalt':function(_0x1f5193,_0x37b9be){var _0x3a40fe=0x10;if(typeof arguments[0x0]==='function'){_0x37b9be=arguments[0x0];_0x1f5193=_0x3a40fe;}else if(typeof arguments[0x1]===_0xe3e8('0x3a')){_0x37b9be=arguments[0x1];}else{throw new Error('Missing\x20Callback');}if(!_0x1f5193){_0x1f5193=_0x3a40fe;}return crypto['randomBytes'](_0x1f5193,function(_0x4c4b0b,_0x4a4ac3){if(_0x4c4b0b){_0x37b9be(_0x4c4b0b);}return _0x37b9be(null,_0x4a4ac3[_0xe3e8('0x3b')](_0xe3e8('0x3c')));});},'encryptPassword':function(_0x106c58,_0x46b335){if(!_0x106c58||!this[_0xe3e8('0x3d')]){return _0x46b335?_0x46b335(null):null;}var _0x68bcf=0x2710;var _0x452f7a=0x40;var _0x3245e9=new Buffer(this[_0xe3e8('0x3d')],'base64');if(!_0x46b335){return crypto[_0xe3e8('0x3e')](_0x106c58,_0x3245e9,_0x68bcf,_0x452f7a,'sha1')['toString'](_0xe3e8('0x3c'));}return crypto[_0xe3e8('0x3f')](_0x106c58,_0x3245e9,_0x68bcf,_0x452f7a,'sha1',function(_0x1fa6ac,_0x99ac76){if(_0x1fa6ac){_0x46b335(_0x1fa6ac);}return _0x46b335(null,_0x99ac76[_0xe3e8('0x3b')](_0xe3e8('0x3c')));});},'updatePassword':function(_0x1177c7){if(!this['password']){return _0x1177c7(null);}if(!validatePresenceOf(this['password'])&&authTypes[_0xe3e8('0x40')](this[_0xe3e8('0x41')])===-0x1){_0x1177c7(new Error('Invalid\x20password'));}var _0xe52c59=this;this[_0xe3e8('0x42')](function(_0xa46d20,_0x5cb060){if(_0xa46d20){return _0x1177c7(_0xa46d20);}_0xe52c59[_0xe3e8('0x3d')]=_0x5cb060;_0xe52c59['encryptPassword'](_0xe52c59[_0xe3e8('0x13')],function(_0x4f8e2c,_0xda7ae9){if(_0x4f8e2c){_0x1177c7(_0x4f8e2c);}_0xe52c59['password']=_0xda7ae9;_0x1177c7(null);});});},'updateMd5Password':function(){this['md5secret']=md5(this[_0xe3e8('0x2b')]+_0xe3e8('0x43')+this[_0xe3e8('0x13')]);return this[_0xe3e8('0x44')];}}});};
\ No newline at end of file
index 4436fb1..3e10e57 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8b0=['util','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','redis','localhost','./user.socket','register','then','info','User,\x20%s,\x20%s','request\x20sent','debug','User,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetUser','User','findAll','raw','options','attributes','limit','include','model','map','ShowUser','find','where','PauseUser','name','role','internal','interface','UserVoiceQueueRt','update','length','forEach','push','format','YYYY-MM-DD\x20HH:mm:ss','body','DEFAULT\x20PAUSE','uniqueid','MemberReport','bulkCreate','type','UnpauseUser','channel','Unknown\x20channel','voice','system','mail','chat','fax','sms','set','%s%s','Pause','PAUSE','findOne','destroy','all','LoginUser','mobile','loginInPause','count','agent','getLicense','agents','Maximum\x20login\x20has\x20been\x20reached','upsert','getChannels','merge','LOGIN','callysquare','LOGININPAUSE','concat','lodash'];(function(_0x39a52c,_0x451bdf){var _0x5ce01e=function(_0x556813){while(--_0x556813){_0x39a52c['push'](_0x39a52c['shift']());}};_0x5ce01e(++_0x451bdf);}(_0xd8b0,0xad));var _0x0d8b=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0xd8b0[_0xa464c9];return _0x3d73c4;};'use strict';var _=require(_0x0d8b('0x0'));var util=require(_0x0d8b('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x0d8b('0x2'));var db=require(_0x0d8b('0x3'))['db'];var utils=require(_0x0d8b('0x4'));var logger=require(_0x0d8b('0x5'))(_0x0d8b('0x6'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x0d8b('0x7')][_0x0d8b('0x8')]({'port':0x232a});config[_0x0d8b('0x9')]=_['defaults'](config[_0x0d8b('0x9')],{'host':_0x0d8b('0xa'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x0d8b('0x9')]));require(_0x0d8b('0xb'))[_0x0d8b('0xc')](socket);function respondWithRpcPromise(_0x1f4800,_0x28ff7f,_0x1cac62){return new BPromise(function(_0x2c5e9e,_0x28f87c){return client['request'](_0x1f4800,_0x1cac62)[_0x0d8b('0xd')](function(_0x4e0269){logger[_0x0d8b('0xe')](_0x0d8b('0xf'),_0x28ff7f,_0x0d8b('0x10'));logger[_0x0d8b('0x11')](_0x0d8b('0x12'),_0x28ff7f,_0x0d8b('0x10'),JSON[_0x0d8b('0x13')](_0x4e0269));if(_0x4e0269[_0x0d8b('0x14')]){if(_0x4e0269[_0x0d8b('0x14')][_0x0d8b('0x15')]===0x1f4){logger[_0x0d8b('0x14')](_0x0d8b('0xf'),_0x28ff7f,_0x4e0269[_0x0d8b('0x14')][_0x0d8b('0x16')]);return _0x28f87c(_0x4e0269['error'][_0x0d8b('0x16')]);}logger[_0x0d8b('0x14')](_0x0d8b('0xf'),_0x28ff7f,_0x4e0269[_0x0d8b('0x14')][_0x0d8b('0x16')]);return _0x2c5e9e(_0x4e0269['error'][_0x0d8b('0x16')]);}else{logger[_0x0d8b('0xe')](_0x0d8b('0xf'),_0x28ff7f,_0x0d8b('0x10'));_0x2c5e9e(_0x4e0269[_0x0d8b('0x17')][_0x0d8b('0x16')]);}})[_0x0d8b('0x18')](function(_0xa3612a){logger['error'](_0x0d8b('0xf'),_0x28ff7f,_0xa3612a);_0x28f87c(_0xa3612a);});});}exports[_0x0d8b('0x19')]=function(_0x196c0a){var _0x143372=this;return new Promise(function(_0x24e8ed,_0x5b709c){return db[_0x0d8b('0x1a')][_0x0d8b('0x1b')]({'raw':_0x196c0a['options']?_0x196c0a['options'][_0x0d8b('0x1c')]===undefined?!![]:![]:!![],'where':_0x196c0a['options']?_0x196c0a['options']['where']||null:null,'attributes':_0x196c0a[_0x0d8b('0x1d')]?_0x196c0a[_0x0d8b('0x1d')][_0x0d8b('0x1e')]||null:null,'limit':_0x196c0a[_0x0d8b('0x1d')]?_0x196c0a[_0x0d8b('0x1d')][_0x0d8b('0x1f')]||null:null,'include':_0x196c0a[_0x0d8b('0x1d')]?_0x196c0a[_0x0d8b('0x1d')][_0x0d8b('0x20')]?_['map'](_0x196c0a[_0x0d8b('0x1d')][_0x0d8b('0x20')],function(_0x5363e3){return{'model':db[_0x5363e3[_0x0d8b('0x21')]],'as':_0x5363e3['as'],'attributes':_0x5363e3['attributes'],'include':_0x5363e3[_0x0d8b('0x20')]?_[_0x0d8b('0x22')](_0x5363e3[_0x0d8b('0x20')],function(_0x4fe6f9){return{'model':db[_0x4fe6f9['model']],'as':_0x4fe6f9['as'],'attributes':_0x4fe6f9[_0x0d8b('0x1e')],'include':_0x4fe6f9[_0x0d8b('0x20')]?_['map'](_0x4fe6f9[_0x0d8b('0x20')],function(_0x59aa83){return{'model':db[_0x59aa83[_0x0d8b('0x21')]],'as':_0x59aa83['as'],'attributes':_0x59aa83['attributes']};}):[]};}):[]};}):[]:[]})[_0x0d8b('0xd')](function(_0x48f24f){logger[_0x0d8b('0xe')]('GetUser',_0x196c0a);logger[_0x0d8b('0x11')]('GetUser',_0x196c0a,JSON[_0x0d8b('0x13')](_0x48f24f));_0x24e8ed(_0x48f24f);})[_0x0d8b('0x18')](function(_0x2c058d){logger['error']('GetUser',_0x2c058d['message'],_0x196c0a);_0x5b709c(_0x143372[_0x0d8b('0x14')](0x1f4,_0x2c058d['message']));});});};exports[_0x0d8b('0x23')]=function(_0x54f6f3){var _0x5d05fc=this;return new Promise(function(_0x36017a,_0x1b6920){return db[_0x0d8b('0x1a')][_0x0d8b('0x24')]({'raw':_0x54f6f3[_0x0d8b('0x1d')]?_0x54f6f3[_0x0d8b('0x1d')][_0x0d8b('0x1c')]===undefined?!![]:![]:!![],'where':_0x54f6f3[_0x0d8b('0x1d')]?_0x54f6f3['options'][_0x0d8b('0x25')]||null:null,'attributes':_0x54f6f3[_0x0d8b('0x1d')]?_0x54f6f3['options'][_0x0d8b('0x1e')]||null:null,'include':_0x54f6f3[_0x0d8b('0x1d')]?_0x54f6f3[_0x0d8b('0x1d')]['include']?_[_0x0d8b('0x22')](_0x54f6f3[_0x0d8b('0x1d')][_0x0d8b('0x20')],function(_0x31ceba){return{'model':db[_0x31ceba[_0x0d8b('0x21')]],'as':_0x31ceba['as'],'attributes':_0x31ceba['attributes'],'include':_0x31ceba[_0x0d8b('0x20')]?_[_0x0d8b('0x22')](_0x31ceba['include'],function(_0x1180ac){return{'model':db[_0x1180ac[_0x0d8b('0x21')]],'as':_0x1180ac['as'],'attributes':_0x1180ac[_0x0d8b('0x1e')],'include':_0x1180ac[_0x0d8b('0x20')]?_[_0x0d8b('0x22')](_0x1180ac['include'],function(_0x497a71){return{'model':db[_0x497a71[_0x0d8b('0x21')]],'as':_0x497a71['as'],'attributes':_0x497a71['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0xc179bd){logger[_0x0d8b('0xe')](_0x0d8b('0x23'),_0x54f6f3);logger[_0x0d8b('0x11')](_0x0d8b('0x23'),_0x54f6f3,JSON[_0x0d8b('0x13')](_0xc179bd));_0x36017a(_0xc179bd);})['catch'](function(_0x6e5bab){logger[_0x0d8b('0x14')](_0x0d8b('0x23'),_0x6e5bab[_0x0d8b('0x16')],_0x54f6f3);_0x1b6920(_0x5d05fc[_0x0d8b('0x14')](0x1f4,_0x6e5bab[_0x0d8b('0x16')]));});});};exports[_0x0d8b('0x26')]=function(_0x5c980b){var _0x1d06b6=this;return new Promise(function(_0x34acb5,_0x3fa955){var _0x1f196d;return db['User'][_0x0d8b('0x24')]({'where':_0x5c980b['options'][_0x0d8b('0x25')]||{},'attributes':['id',_0x0d8b('0x27'),_0x0d8b('0x28'),_0x0d8b('0x29'),_0x0d8b('0x2a')]})[_0x0d8b('0xd')](function(_0x1ff17d){if(_0x1ff17d){_0x1f196d=_0x1ff17d;return db[_0x0d8b('0x2b')][_0x0d8b('0x2c')]({'paused':0x1},{'where':{'UserId':_0x1f196d['id']},'individualHooks':!![]});}})[_0x0d8b('0xd')](function(){if(_0x1f196d){return db['MemberReport']['findAll']({'where':{'membername':_0x1f196d['name'],'type':'PAUSE','exitAt':null}});}})['then'](function(_0x1a46f6){if(_0x1f196d){if(_0x1a46f6&&_0x1a46f6[_0x0d8b('0x2d')]){var _0x1e2433=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');for(var _0x1b216d=0x0,_0x192de1=_0x1a46f6[_0x0d8b('0x2d')];_0x1b216d<_0x192de1;_0x1b216d++){_0x1a46f6[_0x1b216d]['updateAttributes']({'exitAt':_0x1e2433});}}}})[_0x0d8b('0xd')](function(){if(_0x1f196d){var _0x26941a=[];var _0x5059ad=utils['getChannels']();_0x5059ad[_0x0d8b('0x2e')](function(_0x495870){_0x26941a[_0x0d8b('0x2f')]({'channel':_0x495870,'membername':_0x1f196d['name'],'interface':_['isNil'](_0x1f196d[_0x0d8b('0x2a')])?util[_0x0d8b('0x30')]('SIP/%s',_0x1f196d['name']):_0x1f196d['interface'],'type':'PAUSE','enterAt':moment()[_0x0d8b('0x30')](_0x0d8b('0x31')),'data1':_0x5c980b[_0x0d8b('0x32')]['type']||_0x0d8b('0x33'),'role':_0x1f196d[_0x0d8b('0x28')],'internal':_0x1f196d[_0x0d8b('0x29')],'uniqueid':_0x5c980b[_0x0d8b('0x32')][_0x0d8b('0x34')]||null});});return db[_0x0d8b('0x35')][_0x0d8b('0x36')](_0x26941a,{'individualHooks':!![]});}})[_0x0d8b('0xd')](function(){if(_0x1f196d){return _0x1f196d[_0x0d8b('0x2c')]({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x5c980b[_0x0d8b('0x32')][_0x0d8b('0x37')]||_0x0d8b('0x33'),'lastPauseAt':moment()[_0x0d8b('0x30')](_0x0d8b('0x31'))});}})[_0x0d8b('0xd')](function(_0xdfcf32){_0x34acb5(_0xdfcf32);})[_0x0d8b('0x18')](function(_0x1e162c){_0x3fa955(_0x1d06b6[_0x0d8b('0x14')](0x1f4,_0x1e162c['message']));});});};exports[_0x0d8b('0x38')]=function(_0x4d8850){var _0x5d29ab=this;return new Promise(function(_0x39a31d,_0x113fb7){var _0x3f943a;return db[_0x0d8b('0x1a')]['findOne']({'where':_0x4d8850[_0x0d8b('0x1d')][_0x0d8b('0x25')]||{},'attributes':['id',_0x0d8b('0x27')]})[_0x0d8b('0xd')](function(_0x45cd22){if(_0x45cd22){_0x3f943a=_0x45cd22;if(_0x4d8850['body']['channel']&&!utils['isValidChannel'](_0x4d8850['body'][_0x0d8b('0x39')])){throw new Error(_0x0d8b('0x3a'));}switch(_0x4d8850['body']['channel']){case _0x0d8b('0x3b'):return db[_0x0d8b('0x2b')]['update']({'paused':0x0},{'where':{'UserId':_0x3f943a['id']}})['then'](function(){return db[_0x0d8b('0x35')][_0x0d8b('0x24')]({'where':{'channel':_0x4d8850[_0x0d8b('0x32')][_0x0d8b('0x39')],'membername':_0x3f943a[_0x0d8b('0x27')],'type':'PAUSE','exitAt':null}});})[_0x0d8b('0xd')](function(_0x2afe34){if(_0x2afe34){return _0x2afe34['update']({'exitAt':moment()['format'](_0x0d8b('0x31')),'data2':_0x0d8b('0x3c')},{'individualHooks':!![]});}return null;})['then'](function(){return _0x3f943a['update']({'voicePause':![]});});case _0x0d8b('0x3d'):case _0x0d8b('0x3e'):case _0x0d8b('0x3f'):case _0x0d8b('0x40'):case'openchannel':return db[_0x0d8b('0x35')]['find']({'where':{'channel':_0x4d8850['body'][_0x0d8b('0x39')],'membername':_0x3f943a[_0x0d8b('0x27')],'type':'PAUSE','exitAt':null}})['then'](function(_0x44ed23){return _0x44ed23[_0x0d8b('0x2c')]({'exitAt':moment()[_0x0d8b('0x30')](_0x0d8b('0x31')),'data2':_0x0d8b('0x3c')},{'individualHooks':!![]});})[_0x0d8b('0xd')](function(){var _0x3978e5={};_[_0x0d8b('0x41')](_0x3978e5,util['format'](_0x0d8b('0x42'),_0x4d8850[_0x0d8b('0x32')][_0x0d8b('0x39')],_0x0d8b('0x43')),![]);return _0x3f943a[_0x0d8b('0x2c')](_0x3978e5);});default:return db[_0x0d8b('0x2b')][_0x0d8b('0x2c')]({'paused':0x0},{'where':{'UserId':_0x3f943a['id']}})[_0x0d8b('0xd')](function(){return db[_0x0d8b('0x35')]['findAll']({'where':{'membername':_0x3f943a[_0x0d8b('0x27')],'type':_0x0d8b('0x44'),'exitAt':null}});})[_0x0d8b('0xd')](function(_0x23de9e){var _0x43ad22=[];_0x23de9e['forEach'](function(_0x1e1dce){_0x43ad22[_0x0d8b('0x2f')](_0x1e1dce[_0x0d8b('0x2c')]({'exitAt':moment()[_0x0d8b('0x30')](_0x0d8b('0x31')),'data2':'system'}));});return BPromise['all'](_0x43ad22);})[_0x0d8b('0xd')](function(){return _0x3f943a[_0x0d8b('0x2c')]({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})[_0x0d8b('0xd')](function(_0xbbb520){_0x39a31d(_0xbbb520);})['catch'](function(_0x199122){_0x113fb7(_0x5d29ab[_0x0d8b('0x14')](0x1f4,_0x199122[_0x0d8b('0x16')]));});});};exports['LogoutUser']=function(_0x2f19f4){var _0x532a85=this;return new Promise(function(_0x2fce07,_0x3ed63e){var _0x1efce6;return db[_0x0d8b('0x1a')][_0x0d8b('0x45')]({'where':_0x2f19f4[_0x0d8b('0x1d')]['where']||{},'attributes':['id',_0x0d8b('0x27')]})['then'](function(_0x71e8d8){if(_0x71e8d8){_0x1efce6=_0x71e8d8;return db[_0x0d8b('0x2b')][_0x0d8b('0x46')]({'where':{'membername':_0x1efce6[_0x0d8b('0x27')]},'individualHooks':!![]});}})['then'](function(){if(_0x1efce6){return db[_0x0d8b('0x35')][_0x0d8b('0x1b')]({'where':{'membername':_0x1efce6[_0x0d8b('0x27')],'exitAt':null}});}})[_0x0d8b('0xd')](function(_0x2ccdae){if(_0x1efce6){if(_0x2ccdae&&_0x2ccdae[_0x0d8b('0x2d')]){var _0x223fd8=[];_0x2ccdae[_0x0d8b('0x2e')](function(_0x2ce282){_0x223fd8[_0x0d8b('0x2f')](_0x2ce282['update']({'exitAt':moment()['format'](_0x0d8b('0x31'))}));});return BPromise[_0x0d8b('0x47')](_0x223fd8);}}})['then'](function(){if(_0x1efce6){return _0x1efce6[_0x0d8b('0x2c')]({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});}})['then'](function(_0x5cc960){_0x2fce07(_0x5cc960);})[_0x0d8b('0x18')](function(_0x1c4e96){_0x3ed63e(_0x532a85['error'](0x1f4,_0x1c4e96['message']));});});};exports[_0x0d8b('0x48')]=function(_0x1c007b){var _0x70e4b2=this;return new Promise(function(_0x435090,_0x2ab72b){var _0x156859;var _0x40d265;var _0x5b4402;var _0x1ca60c;return db['User'][_0x0d8b('0x45')]({'where':_0x1c007b[_0x0d8b('0x1d')][_0x0d8b('0x25')]||{},'attributes':['id',_0x0d8b('0x27'),'role',_0x0d8b('0x49'),'phone',_0x0d8b('0x29'),_0x0d8b('0x4a'),_0x0d8b('0x2a')]})[_0x0d8b('0xd')](function(_0xc5c35f){if(_0xc5c35f){_0x156859=_0xc5c35f;_0x1ca60c=_0x1c007b[_0x0d8b('0x32')][_0x0d8b('0x2a')]?_0x1c007b[_0x0d8b('0x32')][_0x0d8b('0x2a')]:util[_0x0d8b('0x30')]('SIP/%s',_0x156859[_0x0d8b('0x27')]);return db['User'][_0x0d8b('0x4b')]({'where':{'role':_0x0d8b('0x4c'),'online':!![],'id':{'$ne':_0x156859['id']}}});}})['then'](function(_0x1a62b9){if(_0x1a62b9){_0x5b4402=_0x1a62b9;return require('../../config/license/util')[_0x0d8b('0x4d')]();}})[_0x0d8b('0xd')](function(_0x24f75){if(_0x24f75&&_0x24f75[_0x0d8b('0x4e')]&&_0x5b4402>=_0x24f75[_0x0d8b('0x4e')]){throw new Error(_0x0d8b('0x4f'));}})[_0x0d8b('0xd')](function(){if(_0x156859){return db[_0x0d8b('0x2b')]['destroy']({'where':{'membername':_0x156859[_0x0d8b('0x27')]},'individualHooks':!![]});}})[_0x0d8b('0xd')](function(){if(_0x156859){return _0x156859['getVoiceQueues']({'raw':!![]});}})[_0x0d8b('0xd')](function(_0x105df9){if(_0x156859){if(_0x105df9){var _0x303d6=[];_0x40d265=_0x105df9;if(_0x40d265[_0x0d8b('0x2d')]){for(var _0x16141a=0x0;_0x16141a<_0x40d265[_0x0d8b('0x2d')];_0x16141a++){_0x303d6[_0x0d8b('0x2f')](db[_0x0d8b('0x2b')][_0x0d8b('0x50')]({'membername':_0x156859[_0x0d8b('0x27')],'UserId':_0x156859['id'],'queue_name':_0x40d265[_0x16141a][_0x0d8b('0x27')],'VoiceQueueId':_0x40d265[_0x16141a]['id'],'interface':_0x1ca60c,'paused':_0x156859[_0x0d8b('0x4a')]||![],'penalty':_0x40d265[_0x16141a]['UserVoiceQueue.penalty']||0x0}));}return BPromise[_0x0d8b('0x47')](_0x303d6);}}}})[_0x0d8b('0xd')](function(){if(_0x156859){return db[_0x0d8b('0x35')]['findAll']({'where':{'membername':_0x156859['name'],'exitAt':null}});}})[_0x0d8b('0xd')](function(_0x3aeb45){if(_0x156859){if(_0x3aeb45&&_0x3aeb45[_0x0d8b('0x2d')]){var _0x5b76af=[];_0x3aeb45['forEach'](function(_0x42de18){_0x5b76af[_0x0d8b('0x2f')](_0x42de18[_0x0d8b('0x2c')]({'exitAt':moment()[_0x0d8b('0x30')](_0x0d8b('0x31'))}));});return BPromise[_0x0d8b('0x47')](_0x5b76af);}}})[_0x0d8b('0xd')](function(_0x2c826b){if(_0x156859){var _0x20a3dd=[];var _0x3a5aea=[];var _0x195901=utils[_0x0d8b('0x51')]();var _0x3b060e={'membername':_0x156859['name'],'interface':_0x1ca60c,'enterAt':moment()[_0x0d8b('0x30')](_0x0d8b('0x31')),'role':_0x156859['role'],'internal':_0x156859['internal']};_0x195901[_0x0d8b('0x2e')](function(_0x1dad9f){_0x20a3dd[_0x0d8b('0x2f')](_[_0x0d8b('0x52')]({'channel':_0x1dad9f,'type':_0x0d8b('0x53'),'data1':_0x0d8b('0x54'),'data2':_0x1ca60c},_0x3b060e));if(_0x156859['loginInPause']){_0x3a5aea['push'](_['merge']({'channel':_0x1dad9f,'type':_0x0d8b('0x44'),'data1':_0x0d8b('0x55')},_0x3b060e));}});return db[_0x0d8b('0x35')][_0x0d8b('0x36')](_0x20a3dd[_0x0d8b('0x56')](_0x3a5aea),{'individualHooks':!![]});}})[_0x0d8b('0xd')](function(){if(_0x156859){return _0x156859['update']({'online':!![],'lastLoginAt':moment()[_0x0d8b('0x30')](_0x0d8b('0x31')),'voicePause':_0x156859['loginInPause']||![],'mailPause':_0x156859[_0x0d8b('0x4a')]||![],'chatPause':_0x156859['loginInPause']||![],'faxPause':_0x156859[_0x0d8b('0x4a')]||![],'smsPause':_0x156859[_0x0d8b('0x4a')]||![],'openchannelPause':_0x156859[_0x0d8b('0x4a')]||![],'pauseType':_0x156859[_0x0d8b('0x4a')]?_0x0d8b('0x55'):null,'lastPauseAt':moment()[_0x0d8b('0x30')](_0x0d8b('0x31')),'interface':_0x1ca60c});}})[_0x0d8b('0xd')](function(_0x391121){_0x435090(_0x391121);})[_0x0d8b('0x18')](function(_0x276558){_0x2ab72b(_0x70e4b2[_0x0d8b('0x14')](0x1f4,_0x276558['message']));});});};
\ No newline at end of file
+var _0xb10b=['destroy','length','LoginUser','loginInPause','count','agent','../../config/license/util','agents','Maximum\x20login\x20has\x20been\x20reached','getVoiceQueues','upsert','merge','LOGIN','callysquare','LOGININPAUSE','concat','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','redis','localhost','socket.io-emitter','./user.socket','register','request','then','info','request\x20sent','debug','User,\x20%s,\x20%s,\x20%s','stringify','error','code','User,\x20%s,\x20%s','message','result','catch','GetUser','User','options','where','attributes','limit','include','map','model','ShowUser','find','raw','PauseUser','name','role','interface','UserVoiceQueueRt','MemberReport','findAll','format','updateAttributes','getChannels','forEach','push','isNil','SIP/%s','PAUSE','YYYY-MM-DD\x20HH:mm:ss','body','DEFAULT\x20PAUSE','internal','uniqueid','bulkCreate','type','UnpauseUser','findOne','channel','isValidChannel','Unknown\x20channel','update','system','chat','fax','sms','openchannel','set','Pause','all','LogoutUser'];(function(_0x4cd9d8,_0x4cb901){var _0x3aa58=function(_0x174fea){while(--_0x174fea){_0x4cd9d8['push'](_0x4cd9d8['shift']());}};_0x3aa58(++_0x4cb901);}(_0xb10b,0x12a));var _0xbb10=function(_0x1b4943,_0x48bd8d){_0x1b4943=_0x1b4943-0x0;var _0x1e91f0=_0xb10b[_0x1b4943];return _0x1e91f0;};'use strict';var _=require(_0xbb10('0x0'));var util=require('util');var moment=require(_0xbb10('0x1'));var BPromise=require(_0xbb10('0x2'));var rs=require(_0xbb10('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xbb10('0x4'))['db'];var utils=require(_0xbb10('0x5'));var logger=require(_0xbb10('0x6'))(_0xbb10('0x7'));var config=require(_0xbb10('0x8'));var jayson=require(_0xbb10('0x9'));var client=jayson['client'][_0xbb10('0xa')]({'port':0x232a});config[_0xbb10('0xb')]=_['defaults'](config[_0xbb10('0xb')],{'host':_0xbb10('0xc'),'port':0x18eb});var socket=require(_0xbb10('0xd'))(new Redis(config[_0xbb10('0xb')]));require(_0xbb10('0xe'))[_0xbb10('0xf')](socket);function respondWithRpcPromise(_0x229887,_0xa3adc8,_0x5ab04a){return new BPromise(function(_0x4e47f8,_0x20bd61){return client[_0xbb10('0x10')](_0x229887,_0x5ab04a)[_0xbb10('0x11')](function(_0x5e136d){logger[_0xbb10('0x12')]('User,\x20%s,\x20%s',_0xa3adc8,_0xbb10('0x13'));logger[_0xbb10('0x14')](_0xbb10('0x15'),_0xa3adc8,_0xbb10('0x13'),JSON[_0xbb10('0x16')](_0x5e136d));if(_0x5e136d[_0xbb10('0x17')]){if(_0x5e136d['error'][_0xbb10('0x18')]===0x1f4){logger[_0xbb10('0x17')](_0xbb10('0x19'),_0xa3adc8,_0x5e136d[_0xbb10('0x17')][_0xbb10('0x1a')]);return _0x20bd61(_0x5e136d[_0xbb10('0x17')][_0xbb10('0x1a')]);}logger[_0xbb10('0x17')](_0xbb10('0x19'),_0xa3adc8,_0x5e136d[_0xbb10('0x17')]['message']);return _0x4e47f8(_0x5e136d[_0xbb10('0x17')][_0xbb10('0x1a')]);}else{logger[_0xbb10('0x12')](_0xbb10('0x19'),_0xa3adc8,_0xbb10('0x13'));_0x4e47f8(_0x5e136d[_0xbb10('0x1b')][_0xbb10('0x1a')]);}})[_0xbb10('0x1c')](function(_0xbf2906){logger[_0xbb10('0x17')]('User,\x20%s,\x20%s',_0xa3adc8,_0xbf2906);_0x20bd61(_0xbf2906);});});}exports[_0xbb10('0x1d')]=function(_0x19f48d){var _0x388fab=this;return new Promise(function(_0x109908,_0xdf237d){return db[_0xbb10('0x1e')]['findAll']({'raw':_0x19f48d[_0xbb10('0x1f')]?_0x19f48d[_0xbb10('0x1f')]['raw']===undefined?!![]:![]:!![],'where':_0x19f48d['options']?_0x19f48d[_0xbb10('0x1f')][_0xbb10('0x20')]||null:null,'attributes':_0x19f48d[_0xbb10('0x1f')]?_0x19f48d[_0xbb10('0x1f')][_0xbb10('0x21')]||null:null,'limit':_0x19f48d[_0xbb10('0x1f')]?_0x19f48d[_0xbb10('0x1f')][_0xbb10('0x22')]||null:null,'include':_0x19f48d[_0xbb10('0x1f')]?_0x19f48d[_0xbb10('0x1f')][_0xbb10('0x23')]?_[_0xbb10('0x24')](_0x19f48d['options']['include'],function(_0x4fb5e0){return{'model':db[_0x4fb5e0[_0xbb10('0x25')]],'as':_0x4fb5e0['as'],'attributes':_0x4fb5e0[_0xbb10('0x21')],'include':_0x4fb5e0[_0xbb10('0x23')]?_['map'](_0x4fb5e0[_0xbb10('0x23')],function(_0x24d586){return{'model':db[_0x24d586[_0xbb10('0x25')]],'as':_0x24d586['as'],'attributes':_0x24d586[_0xbb10('0x21')],'include':_0x24d586[_0xbb10('0x23')]?_[_0xbb10('0x24')](_0x24d586[_0xbb10('0x23')],function(_0x4aabb9){return{'model':db[_0x4aabb9[_0xbb10('0x25')]],'as':_0x4aabb9['as'],'attributes':_0x4aabb9[_0xbb10('0x21')]};}):[]};}):[]};}):[]:[]})[_0xbb10('0x11')](function(_0x2e0249){logger[_0xbb10('0x12')](_0xbb10('0x1d'),_0x19f48d);logger['debug'](_0xbb10('0x1d'),_0x19f48d,JSON['stringify'](_0x2e0249));_0x109908(_0x2e0249);})[_0xbb10('0x1c')](function(_0x56f2da){logger[_0xbb10('0x17')](_0xbb10('0x1d'),_0x56f2da[_0xbb10('0x1a')],_0x19f48d);_0xdf237d(_0x388fab['error'](0x1f4,_0x56f2da['message']));});});};exports[_0xbb10('0x26')]=function(_0x34f65e){var _0x4f590d=this;return new Promise(function(_0x359ad4,_0x37dde7){return db[_0xbb10('0x1e')][_0xbb10('0x27')]({'raw':_0x34f65e[_0xbb10('0x1f')]?_0x34f65e[_0xbb10('0x1f')][_0xbb10('0x28')]===undefined?!![]:![]:!![],'where':_0x34f65e['options']?_0x34f65e[_0xbb10('0x1f')][_0xbb10('0x20')]||null:null,'attributes':_0x34f65e[_0xbb10('0x1f')]?_0x34f65e[_0xbb10('0x1f')][_0xbb10('0x21')]||null:null,'include':_0x34f65e[_0xbb10('0x1f')]?_0x34f65e[_0xbb10('0x1f')][_0xbb10('0x23')]?_[_0xbb10('0x24')](_0x34f65e['options'][_0xbb10('0x23')],function(_0x150107){return{'model':db[_0x150107[_0xbb10('0x25')]],'as':_0x150107['as'],'attributes':_0x150107[_0xbb10('0x21')],'include':_0x150107['include']?_[_0xbb10('0x24')](_0x150107['include'],function(_0x4e2754){return{'model':db[_0x4e2754[_0xbb10('0x25')]],'as':_0x4e2754['as'],'attributes':_0x4e2754[_0xbb10('0x21')],'include':_0x4e2754[_0xbb10('0x23')]?_[_0xbb10('0x24')](_0x4e2754[_0xbb10('0x23')],function(_0x29d11a){return{'model':db[_0x29d11a['model']],'as':_0x29d11a['as'],'attributes':_0x29d11a[_0xbb10('0x21')]};}):[]};}):[]};}):[]:[]})[_0xbb10('0x11')](function(_0x52de31){logger['info']('ShowUser',_0x34f65e);logger[_0xbb10('0x14')](_0xbb10('0x26'),_0x34f65e,JSON[_0xbb10('0x16')](_0x52de31));_0x359ad4(_0x52de31);})['catch'](function(_0x3c0cd7){logger[_0xbb10('0x17')](_0xbb10('0x26'),_0x3c0cd7['message'],_0x34f65e);_0x37dde7(_0x4f590d[_0xbb10('0x17')](0x1f4,_0x3c0cd7[_0xbb10('0x1a')]));});});};exports[_0xbb10('0x29')]=function(_0x446f49){var _0x4f1cdd=this;return new Promise(function(_0xd238e9,_0x110eb5){var _0x5835fd;return db[_0xbb10('0x1e')][_0xbb10('0x27')]({'where':_0x446f49[_0xbb10('0x1f')][_0xbb10('0x20')]||{},'attributes':['id',_0xbb10('0x2a'),_0xbb10('0x2b'),'internal',_0xbb10('0x2c')]})[_0xbb10('0x11')](function(_0x3e7b4c){if(_0x3e7b4c){_0x5835fd=_0x3e7b4c;return db[_0xbb10('0x2d')]['update']({'paused':0x1},{'where':{'UserId':_0x5835fd['id']},'individualHooks':!![]});}})[_0xbb10('0x11')](function(){if(_0x5835fd){return db[_0xbb10('0x2e')][_0xbb10('0x2f')]({'where':{'membername':_0x5835fd[_0xbb10('0x2a')],'type':'PAUSE','exitAt':null}});}})[_0xbb10('0x11')](function(_0x202c60){if(_0x5835fd){if(_0x202c60&&_0x202c60['length']){var _0x5d9a4f=moment()[_0xbb10('0x30')]('YYYY-MM-DD\x20HH:mm:ss');for(var _0x318984=0x0,_0x180933=_0x202c60['length'];_0x318984<_0x180933;_0x318984++){_0x202c60[_0x318984][_0xbb10('0x31')]({'exitAt':_0x5d9a4f});}}}})[_0xbb10('0x11')](function(){if(_0x5835fd){var _0x474e99=[];var _0x5cf4f8=utils[_0xbb10('0x32')]();_0x5cf4f8[_0xbb10('0x33')](function(_0x3b9fdf){_0x474e99[_0xbb10('0x34')]({'channel':_0x3b9fdf,'membername':_0x5835fd[_0xbb10('0x2a')],'interface':_[_0xbb10('0x35')](_0x5835fd[_0xbb10('0x2c')])?util[_0xbb10('0x30')](_0xbb10('0x36'),_0x5835fd[_0xbb10('0x2a')]):_0x5835fd[_0xbb10('0x2c')],'type':_0xbb10('0x37'),'enterAt':moment()['format'](_0xbb10('0x38')),'data1':_0x446f49[_0xbb10('0x39')]['type']||_0xbb10('0x3a'),'role':_0x5835fd[_0xbb10('0x2b')],'internal':_0x5835fd[_0xbb10('0x3b')],'uniqueid':_0x446f49[_0xbb10('0x39')][_0xbb10('0x3c')]||null});});return db[_0xbb10('0x2e')][_0xbb10('0x3d')](_0x474e99,{'individualHooks':!![]});}})['then'](function(){if(_0x5835fd){return _0x5835fd['update']({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x446f49[_0xbb10('0x39')][_0xbb10('0x3e')]||_0xbb10('0x3a'),'lastPauseAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss')});}})[_0xbb10('0x11')](function(_0x34cf4e){_0xd238e9(_0x34cf4e);})[_0xbb10('0x1c')](function(_0xf820fe){_0x110eb5(_0x4f1cdd[_0xbb10('0x17')](0x1f4,_0xf820fe[_0xbb10('0x1a')]));});});};exports[_0xbb10('0x3f')]=function(_0x460788){var _0x2626d8=this;return new Promise(function(_0x3d7e7e,_0x550111){var _0x5eafac;return db[_0xbb10('0x1e')][_0xbb10('0x40')]({'where':_0x460788[_0xbb10('0x1f')][_0xbb10('0x20')]||{},'attributes':['id',_0xbb10('0x2a')]})[_0xbb10('0x11')](function(_0x358e7e){if(_0x358e7e){_0x5eafac=_0x358e7e;if(_0x460788[_0xbb10('0x39')][_0xbb10('0x41')]&&!utils[_0xbb10('0x42')](_0x460788[_0xbb10('0x39')][_0xbb10('0x41')])){throw new Error(_0xbb10('0x43'));}switch(_0x460788[_0xbb10('0x39')][_0xbb10('0x41')]){case'voice':return db[_0xbb10('0x2d')]['update']({'paused':0x0},{'where':{'UserId':_0x5eafac['id']}})[_0xbb10('0x11')](function(){return db[_0xbb10('0x2e')][_0xbb10('0x27')]({'where':{'channel':_0x460788[_0xbb10('0x39')][_0xbb10('0x41')],'membername':_0x5eafac[_0xbb10('0x2a')],'type':_0xbb10('0x37'),'exitAt':null}});})[_0xbb10('0x11')](function(_0x180400){if(_0x180400){return _0x180400[_0xbb10('0x44')]({'exitAt':moment()[_0xbb10('0x30')](_0xbb10('0x38')),'data2':_0xbb10('0x45')},{'individualHooks':!![]});}return null;})[_0xbb10('0x11')](function(){return _0x5eafac[_0xbb10('0x44')]({'voicePause':![]});});case'mail':case _0xbb10('0x46'):case _0xbb10('0x47'):case _0xbb10('0x48'):case _0xbb10('0x49'):return db[_0xbb10('0x2e')][_0xbb10('0x27')]({'where':{'channel':_0x460788['body'][_0xbb10('0x41')],'membername':_0x5eafac[_0xbb10('0x2a')],'type':_0xbb10('0x37'),'exitAt':null}})[_0xbb10('0x11')](function(_0x432728){return _0x432728[_0xbb10('0x44')]({'exitAt':moment()[_0xbb10('0x30')](_0xbb10('0x38')),'data2':_0xbb10('0x45')},{'individualHooks':!![]});})[_0xbb10('0x11')](function(){var _0x2eb05a={};_[_0xbb10('0x4a')](_0x2eb05a,util[_0xbb10('0x30')]('%s%s',_0x460788['body'][_0xbb10('0x41')],_0xbb10('0x4b')),![]);return _0x5eafac[_0xbb10('0x44')](_0x2eb05a);});default:return db[_0xbb10('0x2d')]['update']({'paused':0x0},{'where':{'UserId':_0x5eafac['id']}})['then'](function(){return db[_0xbb10('0x2e')][_0xbb10('0x2f')]({'where':{'membername':_0x5eafac[_0xbb10('0x2a')],'type':_0xbb10('0x37'),'exitAt':null}});})[_0xbb10('0x11')](function(_0x3e9753){var _0x45c0dc=[];_0x3e9753['forEach'](function(_0x117e84){_0x45c0dc[_0xbb10('0x34')](_0x117e84['update']({'exitAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'data2':_0xbb10('0x45')}));});return BPromise[_0xbb10('0x4c')](_0x45c0dc);})[_0xbb10('0x11')](function(){return _0x5eafac['update']({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})['then'](function(_0x5846d1){_0x3d7e7e(_0x5846d1);})[_0xbb10('0x1c')](function(_0x249b33){_0x550111(_0x2626d8[_0xbb10('0x17')](0x1f4,_0x249b33['message']));});});};exports[_0xbb10('0x4d')]=function(_0x13131c){var _0x5a6538=this;return new Promise(function(_0x4a560c,_0x27d7b9){var _0x308896;return db[_0xbb10('0x1e')][_0xbb10('0x40')]({'where':_0x13131c['options'][_0xbb10('0x20')]||{},'attributes':['id',_0xbb10('0x2a')]})[_0xbb10('0x11')](function(_0x5202d7){if(_0x5202d7){_0x308896=_0x5202d7;return db[_0xbb10('0x2d')][_0xbb10('0x4e')]({'where':{'membername':_0x308896[_0xbb10('0x2a')]},'individualHooks':!![]});}})['then'](function(){if(_0x308896){return db[_0xbb10('0x2e')][_0xbb10('0x2f')]({'where':{'membername':_0x308896[_0xbb10('0x2a')],'exitAt':null}});}})[_0xbb10('0x11')](function(_0x5e4a6e){if(_0x308896){if(_0x5e4a6e&&_0x5e4a6e[_0xbb10('0x4f')]){var _0x258e55=[];_0x5e4a6e[_0xbb10('0x33')](function(_0x2d0f4b){_0x258e55['push'](_0x2d0f4b[_0xbb10('0x44')]({'exitAt':moment()[_0xbb10('0x30')](_0xbb10('0x38'))}));});return BPromise[_0xbb10('0x4c')](_0x258e55);}}})[_0xbb10('0x11')](function(){if(_0x308896){return _0x308896[_0xbb10('0x44')]({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});}})[_0xbb10('0x11')](function(_0x4a30c5){_0x4a560c(_0x4a30c5);})['catch'](function(_0x5acd5e){_0x27d7b9(_0x5a6538[_0xbb10('0x17')](0x1f4,_0x5acd5e[_0xbb10('0x1a')]));});});};exports[_0xbb10('0x50')]=function(_0x5c9afc){var _0x5cd089=this;return new Promise(function(_0x46f462,_0x1b11c0){var _0xd9e743;var _0x3a9677;var _0x260e06;var _0x1ad2ed;return db['User'][_0xbb10('0x40')]({'where':_0x5c9afc[_0xbb10('0x1f')][_0xbb10('0x20')]||{},'attributes':['id',_0xbb10('0x2a'),_0xbb10('0x2b'),'mobile','phone','internal',_0xbb10('0x51'),_0xbb10('0x2c')]})[_0xbb10('0x11')](function(_0x21459e){if(_0x21459e){_0xd9e743=_0x21459e;_0x1ad2ed=_0x5c9afc[_0xbb10('0x39')][_0xbb10('0x2c')]?_0x5c9afc['body'][_0xbb10('0x2c')]:util['format']('SIP/%s',_0xd9e743['name']);return db[_0xbb10('0x1e')][_0xbb10('0x52')]({'where':{'role':_0xbb10('0x53'),'online':!![],'id':{'$ne':_0xd9e743['id']}}});}})[_0xbb10('0x11')](function(_0x5ce94f){if(_0x5ce94f){_0x260e06=_0x5ce94f;return require(_0xbb10('0x54'))['getLicense']();}})['then'](function(_0x165fe9){if(_0x165fe9&&_0x165fe9[_0xbb10('0x55')]&&_0x260e06>=_0x165fe9[_0xbb10('0x55')]){throw new Error(_0xbb10('0x56'));}})[_0xbb10('0x11')](function(){if(_0xd9e743){return db['UserVoiceQueueRt'][_0xbb10('0x4e')]({'where':{'membername':_0xd9e743[_0xbb10('0x2a')]},'individualHooks':!![]});}})[_0xbb10('0x11')](function(){if(_0xd9e743){return _0xd9e743[_0xbb10('0x57')]({'raw':!![]});}})[_0xbb10('0x11')](function(_0x27f42f){if(_0xd9e743){if(_0x27f42f){var _0x174395=[];_0x3a9677=_0x27f42f;if(_0x3a9677['length']){for(var _0x387b10=0x0;_0x387b10<_0x3a9677[_0xbb10('0x4f')];_0x387b10++){_0x174395[_0xbb10('0x34')](db[_0xbb10('0x2d')][_0xbb10('0x58')]({'membername':_0xd9e743[_0xbb10('0x2a')],'UserId':_0xd9e743['id'],'queue_name':_0x3a9677[_0x387b10][_0xbb10('0x2a')],'VoiceQueueId':_0x3a9677[_0x387b10]['id'],'interface':_0x1ad2ed,'paused':_0xd9e743[_0xbb10('0x51')]||![],'penalty':_0x3a9677[_0x387b10]['UserVoiceQueue.penalty']||0x0}));}return BPromise[_0xbb10('0x4c')](_0x174395);}}}})[_0xbb10('0x11')](function(){if(_0xd9e743){return db[_0xbb10('0x2e')]['findAll']({'where':{'membername':_0xd9e743['name'],'exitAt':null}});}})['then'](function(_0x23286d){if(_0xd9e743){if(_0x23286d&&_0x23286d['length']){var _0x4e3d6a=[];_0x23286d[_0xbb10('0x33')](function(_0x3ee56b){_0x4e3d6a[_0xbb10('0x34')](_0x3ee56b[_0xbb10('0x44')]({'exitAt':moment()[_0xbb10('0x30')](_0xbb10('0x38'))}));});return BPromise[_0xbb10('0x4c')](_0x4e3d6a);}}})[_0xbb10('0x11')](function(_0x188b97){if(_0xd9e743){var _0x5206e1=[];var _0x318a14=[];var _0x1351eb=utils[_0xbb10('0x32')]();var _0x35b811={'membername':_0xd9e743['name'],'interface':_0x1ad2ed,'enterAt':moment()['format'](_0xbb10('0x38')),'role':_0xd9e743[_0xbb10('0x2b')],'internal':_0xd9e743[_0xbb10('0x3b')]};_0x1351eb[_0xbb10('0x33')](function(_0x5ee705){_0x5206e1[_0xbb10('0x34')](_[_0xbb10('0x59')]({'channel':_0x5ee705,'type':_0xbb10('0x5a'),'data1':_0xbb10('0x5b'),'data2':_0x1ad2ed},_0x35b811));if(_0xd9e743[_0xbb10('0x51')]){_0x318a14['push'](_['merge']({'channel':_0x5ee705,'type':_0xbb10('0x37'),'data1':_0xbb10('0x5c')},_0x35b811));}});return db[_0xbb10('0x2e')]['bulkCreate'](_0x5206e1[_0xbb10('0x5d')](_0x318a14),{'individualHooks':!![]});}})[_0xbb10('0x11')](function(){if(_0xd9e743){return _0xd9e743['update']({'online':!![],'lastLoginAt':moment()['format'](_0xbb10('0x38')),'voicePause':_0xd9e743[_0xbb10('0x51')]||![],'mailPause':_0xd9e743[_0xbb10('0x51')]||![],'chatPause':_0xd9e743['loginInPause']||![],'faxPause':_0xd9e743[_0xbb10('0x51')]||![],'smsPause':_0xd9e743[_0xbb10('0x51')]||![],'openchannelPause':_0xd9e743[_0xbb10('0x51')]||![],'pauseType':_0xd9e743[_0xbb10('0x51')]?_0xbb10('0x5c'):null,'lastPauseAt':moment()[_0xbb10('0x30')](_0xbb10('0x38')),'interface':_0x1ad2ed});}})[_0xbb10('0x11')](function(_0x3e6246){_0x46f462(_0x3e6246);})['catch'](function(_0x3367d4){_0x1b11c0(_0x5cd089[_0xbb10('0x17')](0x1f4,_0x3367d4[_0xbb10('0x1a')]));});});};
\ No newline at end of file
index 399a616..89adf11 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x68ab=['update','emit','register','length','user:','./user.events','save','remove'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0x68ab,0x12d));var _0xb68a=function(_0x3acfa3,_0x13ea7a){_0x3acfa3=_0x3acfa3-0x0;var _0xcfe26e=_0x68ab[_0x3acfa3];return _0xcfe26e;};'use strict';var UserEvents=require(_0xb68a('0x0'));var events=[_0xb68a('0x1'),_0xb68a('0x2'),_0xb68a('0x3')];function createListener(_0x2270d0,_0x168fd9){return function(_0x3cda8c){_0x168fd9[_0xb68a('0x4')](_0x2270d0,_0x3cda8c);};}function removeListener(_0x47ec5e,_0x2c83bf){return function(){UserEvents['removeListener'](_0x47ec5e,_0x2c83bf);};}exports[_0xb68a('0x5')]=function(_0x34a0b0){for(var _0x5855a4=0x0,_0x8ca7a6=events[_0xb68a('0x6')];_0x5855a4<_0x8ca7a6;_0x5855a4++){var _0x52e48a=events[_0x5855a4];var _0x4135d5=createListener(_0xb68a('0x7')+_0x52e48a,_0x34a0b0);UserEvents['on'](_0x52e48a,_0x4135d5);}};
\ No newline at end of file
+var _0x53e7=['./user.events','save','remove','update','emit','removeListener','register'];(function(_0x41420c,_0x37374e){var _0x359cbd=function(_0x27f818){while(--_0x27f818){_0x41420c['push'](_0x41420c['shift']());}};_0x359cbd(++_0x37374e);}(_0x53e7,0xfc));var _0x753e=function(_0x41b06b,_0x34d7bb){_0x41b06b=_0x41b06b-0x0;var _0x52fce1=_0x53e7[_0x41b06b];return _0x52fce1;};'use strict';var UserEvents=require(_0x753e('0x0'));var events=[_0x753e('0x1'),_0x753e('0x2'),_0x753e('0x3')];function createListener(_0x24586c,_0x52cff6){return function(_0x32fe00){_0x52cff6[_0x753e('0x4')](_0x24586c,_0x32fe00);};}function removeListener(_0x5519b8,_0x18bb2a){return function(){UserEvents[_0x753e('0x5')](_0x5519b8,_0x18bb2a);};}exports[_0x753e('0x6')]=function(_0x30b540){for(var _0x161ed0=0x0,_0x47142b=events['length'];_0x161ed0<_0x47142b;_0x161ed0++){var _0x390694=events[_0x161ed0];var _0x4575d0=createListener('user:'+_0x390694,_0x30b540);UserEvents['on'](_0x390694,_0x4575d0);}};
\ No newline at end of file
index acc750d..61bea16 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc6c0=['../../components/interaction/service','../../config/environment','exports','multer','path','connect-timeout','express','Router','../../components/auth/service'];(function(_0x22cca5,_0x5a1b84){var _0x1456eb=function(_0x47ac40){while(--_0x47ac40){_0x22cca5['push'](_0x22cca5['shift']());}};_0x1456eb(++_0x5a1b84);}(_0xc6c0,0x13e));var _0x0c6c=function(_0x20aae1,_0x51efd4){_0x20aae1=_0x20aae1-0x0;var _0x510601=_0xc6c0[_0x20aae1];return _0x510601;};'use strict';var multer=require(_0x0c6c('0x0'));var util=require('util');var path=require(_0x0c6c('0x1'));var timeout=require(_0x0c6c('0x2'));var express=require(_0x0c6c('0x3'));var router=express[_0x0c6c('0x4')]();var auth=require(_0x0c6c('0x5'));var interaction=require(_0x0c6c('0x6'));var config=require(_0x0c6c('0x7'));module[_0x0c6c('0x8')]=router;
\ No newline at end of file
+var _0x4279=['exports','util','path','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x2bb423,_0x43a634){var _0x39cf58=function(_0x4d7607){while(--_0x4d7607){_0x2bb423['push'](_0x2bb423['shift']());}};_0x39cf58(++_0x43a634);}(_0x4279,0x8d));var _0x9427=function(_0x32aec8,_0x3bd6a9){_0x32aec8=_0x32aec8-0x0;var _0x3b8c88=_0x4279[_0x32aec8];return _0x3b8c88;};'use strict';var multer=require('multer');var util=require(_0x9427('0x0'));var path=require(_0x9427('0x1'));var timeout=require('connect-timeout');var express=require(_0x9427('0x2'));var router=express[_0x9427('0x3')]();var auth=require(_0x9427('0x4'));var interaction=require(_0x9427('0x5'));var config=require('../../config/environment');module[_0x9427('0x6')]=router;
\ No newline at end of file
index 5215572..cd54a42 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf41c=['exports','INTEGER','sequelize'];(function(_0x5a6d86,_0x19e39b){var _0x5cf7ad=function(_0x3442ef){while(--_0x3442ef){_0x5a6d86['push'](_0x5a6d86['shift']());}};_0x5cf7ad(++_0x19e39b);}(_0xf41c,0x6e));var _0xcf41=function(_0x56e270,_0x1f18df){_0x56e270=_0x56e270-0x0;var _0x3045c6=_0xf41c[_0x56e270];return _0x3045c6;};'use strict';var Sequelize=require(_0xcf41('0x0'));module[_0xcf41('0x1')]={'penalty':{'type':Sequelize[_0xcf41('0x2')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x4db9=['sequelize'];(function(_0x314f8f,_0x515793){var _0x2f6690=function(_0x372e70){while(--_0x372e70){_0x314f8f['push'](_0x314f8f['shift']());}};_0x2f6690(++_0x515793);}(_0x4db9,0x1c8));var _0x94db=function(_0x51bb38,_0x4e57a0){_0x51bb38=_0x51bb38-0x0;var _0x51c09b=_0x4db9[_0x51bb38];return _0x51c09b;};'use strict';var Sequelize=require(_0x94db('0x0'));module['exports']={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
index 7bd88fb..dcb726b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc6bd=['./userChatQueue.attributes','exports','define','UserChatQueue','user_has_chat_queues','util','../../config/logger','bluebird','path','rimraf','../../config/environment'];(function(_0x37b5ff,_0x1f53fa){var _0x3d0577=function(_0x2e49fc){while(--_0x2e49fc){_0x37b5ff['push'](_0x37b5ff['shift']());}};_0x3d0577(++_0x1f53fa);}(_0xc6bd,0x1e9));var _0xdc6b=function(_0x3888ae,_0x5c8de7){_0x3888ae=_0x3888ae-0x0;var _0x2e8ad7=_0xc6bd[_0x3888ae];return _0x2e8ad7;};'use strict';var _=require('lodash');var util=require(_0xdc6b('0x0'));var logger=require(_0xdc6b('0x1'))('api');var moment=require('moment');var BPromise=require(_0xdc6b('0x2'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xdc6b('0x3'));var rimraf=require(_0xdc6b('0x4'));var config=require(_0xdc6b('0x5'));var attributes=require(_0xdc6b('0x6'));module[_0xdc6b('0x7')]=function(_0x3f052d,_0x468c29){return _0x3f052d[_0xdc6b('0x8')](_0xdc6b('0x9'),attributes,{'tableName':_0xdc6b('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6b64=['../../config/logger','api','path','../../config/environment','define','UserChatQueue','user_has_chat_queues','lodash','util'];(function(_0x4b3674,_0x3bb811){var _0x1cc7e4=function(_0x3eec90){while(--_0x3eec90){_0x4b3674['push'](_0x4b3674['shift']());}};_0x1cc7e4(++_0x3bb811);}(_0x6b64,0x97));var _0x46b6=function(_0x8b8564,_0x162976){_0x8b8564=_0x8b8564-0x0;var _0x360c61=_0x6b64[_0x8b8564];return _0x360c61;};'use strict';var _=require(_0x46b6('0x0'));var util=require(_0x46b6('0x1'));var logger=require(_0x46b6('0x2'))(_0x46b6('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x46b6('0x4'));var rimraf=require('rimraf');var config=require(_0x46b6('0x5'));var attributes=require('./userChatQueue.attributes');module['exports']=function(_0x514ef5,_0x482e51){return _0x514ef5[_0x46b6('0x6')](_0x46b6('0x7'),attributes,{'tableName':_0x46b6('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index f82dbeb..7fef4bd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x66cd=['ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','UserChatQueue,\x20%s,\x20%s','debug','UserChatQueue,\x20%s,\x20%s,\x20%s','error','code','message','request\x20sent','result','catch','lodash','util','moment','bluebird'];(function(_0x281b67,_0x28b9aa){var _0x14fe26=function(_0x280c3a){while(--_0x280c3a){_0x281b67['push'](_0x281b67['shift']());}};_0x14fe26(++_0x28b9aa);}(_0x66cd,0xa4));var _0xd66c=function(_0x2b4411,_0x2625ed){_0x2b4411=_0x2b4411-0x0;var _0x8e41ef=_0x66cd[_0x2b4411];return _0x8e41ef;};'use strict';var _=require(_0xd66c('0x0'));var util=require(_0xd66c('0x1'));var moment=require(_0xd66c('0x2'));var BPromise=require(_0xd66c('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xd66c('0x4'));var db=require(_0xd66c('0x5'))['db'];var utils=require(_0xd66c('0x6'));var logger=require(_0xd66c('0x7'))(_0xd66c('0x8'));var config=require('../../config/environment');var jayson=require(_0xd66c('0x9'));var client=jayson[_0xd66c('0xa')][_0xd66c('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x528f64,_0x43d66d,_0x4d47fa){return new BPromise(function(_0x2cfaaa,_0x5c09b9){return client[_0xd66c('0xc')](_0x528f64,_0x4d47fa)[_0xd66c('0xd')](function(_0x32657d){logger[_0xd66c('0xe')](_0xd66c('0xf'),_0x43d66d,'request\x20sent');logger[_0xd66c('0x10')](_0xd66c('0x11'),_0x43d66d,'request\x20sent',JSON['stringify'](_0x32657d));if(_0x32657d[_0xd66c('0x12')]){if(_0x32657d[_0xd66c('0x12')][_0xd66c('0x13')]===0x1f4){logger['error'](_0xd66c('0xf'),_0x43d66d,_0x32657d['error']['message']);return _0x5c09b9(_0x32657d[_0xd66c('0x12')][_0xd66c('0x14')]);}logger['error'](_0xd66c('0xf'),_0x43d66d,_0x32657d[_0xd66c('0x12')][_0xd66c('0x14')]);return _0x2cfaaa(_0x32657d['error'][_0xd66c('0x14')]);}else{logger['info']('UserChatQueue,\x20%s,\x20%s',_0x43d66d,_0xd66c('0x15'));_0x2cfaaa(_0x32657d[_0xd66c('0x16')][_0xd66c('0x14')]);}})[_0xd66c('0x17')](function(_0x41fd3e){logger[_0xd66c('0x12')]('UserChatQueue,\x20%s,\x20%s',_0x43d66d,_0x41fd3e);_0x5c09b9(_0x41fd3e);});});}
\ No newline at end of file
+var _0x8e2b=['ioredis','../../mysqldb','jayson/promise','http','then','info','UserChatQueue,\x20%s,\x20%s','request\x20sent','debug','error','code','message','result','catch','lodash','util','bluebird','randomstring'];(function(_0x31abee,_0x11ff0c){var _0x3c1761=function(_0x2b5062){while(--_0x2b5062){_0x31abee['push'](_0x31abee['shift']());}};_0x3c1761(++_0x11ff0c);}(_0x8e2b,0x19a));var _0xb8e2=function(_0x48afd5,_0x4b1267){_0x48afd5=_0x48afd5-0x0;var _0x17cdad=_0x8e2b[_0x48afd5];return _0x17cdad;};'use strict';var _=require(_0xb8e2('0x0'));var util=require(_0xb8e2('0x1'));var moment=require('moment');var BPromise=require(_0xb8e2('0x2'));var rs=require(_0xb8e2('0x3'));var fs=require('fs');var Redis=require(_0xb8e2('0x4'));var db=require(_0xb8e2('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0xb8e2('0x6'));var client=jayson['client'][_0xb8e2('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x6af358,_0x21e2fc,_0x108147){return new BPromise(function(_0x4d059b,_0x314d51){return client['request'](_0x6af358,_0x108147)[_0xb8e2('0x8')](function(_0x2f3ca0){logger[_0xb8e2('0x9')](_0xb8e2('0xa'),_0x21e2fc,_0xb8e2('0xb'));logger[_0xb8e2('0xc')]('UserChatQueue,\x20%s,\x20%s,\x20%s',_0x21e2fc,_0xb8e2('0xb'),JSON['stringify'](_0x2f3ca0));if(_0x2f3ca0[_0xb8e2('0xd')]){if(_0x2f3ca0[_0xb8e2('0xd')][_0xb8e2('0xe')]===0x1f4){logger[_0xb8e2('0xd')](_0xb8e2('0xa'),_0x21e2fc,_0x2f3ca0[_0xb8e2('0xd')][_0xb8e2('0xf')]);return _0x314d51(_0x2f3ca0[_0xb8e2('0xd')]['message']);}logger['error'](_0xb8e2('0xa'),_0x21e2fc,_0x2f3ca0[_0xb8e2('0xd')]['message']);return _0x4d059b(_0x2f3ca0[_0xb8e2('0xd')][_0xb8e2('0xf')]);}else{logger[_0xb8e2('0x9')](_0xb8e2('0xa'),_0x21e2fc,_0xb8e2('0xb'));_0x4d059b(_0x2f3ca0[_0xb8e2('0x10')][_0xb8e2('0xf')]);}})[_0xb8e2('0x11')](function(_0x3d37df){logger[_0xb8e2('0xd')](_0xb8e2('0xa'),_0x21e2fc,_0x3d37df);_0x314d51(_0x3d37df);});});}
\ No newline at end of file
index a22f348..bb0e2e2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf40b=['util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','exports'];(function(_0x36f325,_0x3d2e7f){var _0x332f25=function(_0x4f8314){while(--_0x4f8314){_0x36f325['push'](_0x36f325['shift']());}};_0x332f25(++_0x3d2e7f);}(_0xf40b,0xb0));var _0xbf40=function(_0x3a23b4,_0x49d839){_0x3a23b4=_0x3a23b4-0x0;var _0x302bca=_0xf40b[_0x3a23b4];return _0x302bca;};'use strict';var multer=require('multer');var util=require(_0xbf40('0x0'));var path=require(_0xbf40('0x1'));var timeout=require(_0xbf40('0x2'));var express=require(_0xbf40('0x3'));var router=express['Router']();var auth=require(_0xbf40('0x4'));var interaction=require(_0xbf40('0x5'));var config=require(_0xbf40('0x6'));module[_0xbf40('0x7')]=router;
\ No newline at end of file
+var _0x6003=['util','path','connect-timeout','../../components/auth/service','../../components/interaction/service','../../config/environment','multer'];(function(_0x13a10e,_0x215f40){var _0x29ca7d=function(_0x49bfa4){while(--_0x49bfa4){_0x13a10e['push'](_0x13a10e['shift']());}};_0x29ca7d(++_0x215f40);}(_0x6003,0xae));var _0x3600=function(_0x515209,_0x4fb89d){_0x515209=_0x515209-0x0;var _0x10e90b=_0x6003[_0x515209];return _0x10e90b;};'use strict';var multer=require(_0x3600('0x0'));var util=require(_0x3600('0x1'));var path=require(_0x3600('0x2'));var timeout=require(_0x3600('0x3'));var express=require('express');var router=express['Router']();var auth=require(_0x3600('0x4'));var interaction=require(_0x3600('0x5'));var config=require(_0x3600('0x6'));module['exports']=router;
\ No newline at end of file
index 3dc35ba..f5153b5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f7b=['sequelize','exports','INTEGER','STRING'];(function(_0x31fc83,_0x562631){var _0x46b451=function(_0x4f9467){while(--_0x4f9467){_0x31fc83['push'](_0x31fc83['shift']());}};_0x46b451(++_0x562631);}(_0x5f7b,0x104));var _0xb5f7=function(_0x2aec52,_0x59d962){_0x2aec52=_0x2aec52-0x0;var _0x3b8835=_0x5f7b[_0x2aec52];return _0x3b8835;};'use strict';var Sequelize=require(_0xb5f7('0x0'));module[_0xb5f7('0x1')]={'penalty':{'type':Sequelize[_0xb5f7('0x2')],'defaultValue':0x0},'assigned':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'queue':{'type':Sequelize[_0xb5f7('0x3')]}};
\ No newline at end of file
+var _0xd369=['exports'];(function(_0x27d37a,_0x4a0441){var _0x1c9d32=function(_0xd20ed1){while(--_0xd20ed1){_0x27d37a['push'](_0x27d37a['shift']());}};_0x1c9d32(++_0x4a0441);}(_0xd369,0xe7));var _0x9d36=function(_0x4c6ac0,_0x24d947){_0x4c6ac0=_0x4c6ac0-0x0;var _0x18e992=_0xd369[_0x4c6ac0];return _0x18e992;};'use strict';var Sequelize=require('sequelize');module[_0x9d36('0x0')]={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'assigned':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'queue':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 1e39e6b..2562b64 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe177=['request-promise','path','rimraf','./userFaxQueue.attributes','exports','define','UserFaxQueue','lodash','api'];(function(_0x34620e,_0x582015){var _0x3d33cd=function(_0x19dc7f){while(--_0x19dc7f){_0x34620e['push'](_0x34620e['shift']());}};_0x3d33cd(++_0x582015);}(_0xe177,0xb2));var _0x7e17=function(_0x469983,_0x4d603d){_0x469983=_0x469983-0x0;var _0x434c83=_0xe177[_0x469983];return _0x434c83;};'use strict';var _=require(_0x7e17('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x7e17('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x7e17('0x2'));var fs=require('fs');var path=require(_0x7e17('0x3'));var rimraf=require(_0x7e17('0x4'));var config=require('../../config/environment');var attributes=require(_0x7e17('0x5'));module[_0x7e17('0x6')]=function(_0x46c999,_0x16ecfa){return _0x46c999[_0x7e17('0x7')](_0x7e17('0x8'),attributes,{'tableName':'user_has_fax_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xee51=['moment','path','rimraf','./userFaxQueue.attributes','exports','define','UserFaxQueue','util','../../config/logger'];(function(_0x16dab3,_0x17dff3){var _0x459cb6=function(_0x4316ec){while(--_0x4316ec){_0x16dab3['push'](_0x16dab3['shift']());}};_0x459cb6(++_0x17dff3);}(_0xee51,0x166));var _0x1ee5=function(_0x383cc2,_0x395986){_0x383cc2=_0x383cc2-0x0;var _0x432d6a=_0xee51[_0x383cc2];return _0x432d6a;};'use strict';var _=require('lodash');var util=require(_0x1ee5('0x0'));var logger=require(_0x1ee5('0x1'))('api');var moment=require(_0x1ee5('0x2'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x1ee5('0x3'));var rimraf=require(_0x1ee5('0x4'));var config=require('../../config/environment');var attributes=require(_0x1ee5('0x5'));module[_0x1ee5('0x6')]=function(_0x38cd63,_0x34b971){return _0x38cd63[_0x1ee5('0x7')](_0x1ee5('0x8'),attributes,{'tableName':'user_has_fax_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 8869688..ebad280 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeca1=['info','UserFaxQueue,\x20%s,\x20%s','request\x20sent','UserFaxQueue,\x20%s,\x20%s,\x20%s','error','message','result','catch','lodash','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','http','request'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0xeca1,0xa0));var _0x1eca=function(_0x25af24,_0x9e945b){_0x25af24=_0x25af24-0x0;var _0x42ce2c=_0xeca1[_0x25af24];return _0x42ce2c;};'use strict';var _=require(_0x1eca('0x0'));var util=require(_0x1eca('0x1'));var moment=require(_0x1eca('0x2'));var BPromise=require(_0x1eca('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x1eca('0x4'))['db'];var utils=require(_0x1eca('0x5'));var logger=require(_0x1eca('0x6'))('rpc');var config=require(_0x1eca('0x7'));var jayson=require(_0x1eca('0x8'));var client=jayson['client'][_0x1eca('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x209326,_0x932c03,_0x2cf6fa){return new BPromise(function(_0x196d0f,_0x32d886){return client[_0x1eca('0xa')](_0x209326,_0x2cf6fa)['then'](function(_0x439aa1){logger[_0x1eca('0xb')](_0x1eca('0xc'),_0x932c03,_0x1eca('0xd'));logger['debug'](_0x1eca('0xe'),_0x932c03,'request\x20sent',JSON['stringify'](_0x439aa1));if(_0x439aa1[_0x1eca('0xf')]){if(_0x439aa1[_0x1eca('0xf')]['code']===0x1f4){logger[_0x1eca('0xf')](_0x1eca('0xc'),_0x932c03,_0x439aa1[_0x1eca('0xf')]['message']);return _0x32d886(_0x439aa1[_0x1eca('0xf')][_0x1eca('0x10')]);}logger[_0x1eca('0xf')](_0x1eca('0xc'),_0x932c03,_0x439aa1['error'][_0x1eca('0x10')]);return _0x196d0f(_0x439aa1[_0x1eca('0xf')]['message']);}else{logger[_0x1eca('0xb')](_0x1eca('0xc'),_0x932c03,_0x1eca('0xd'));_0x196d0f(_0x439aa1[_0x1eca('0x11')][_0x1eca('0x10')]);}})[_0x1eca('0x12')](function(_0xac707f){logger['error'](_0x1eca('0xc'),_0x932c03,_0xac707f);_0x32d886(_0xac707f);});});}
\ No newline at end of file
+var _0xcf4f=['error','code','UserFaxQueue,\x20%s,\x20%s','message','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','info','request\x20sent','UserFaxQueue,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x1f71a1,_0x1a76f3){var _0xf72ea1=function(_0x624d07){while(--_0x624d07){_0x1f71a1['push'](_0x1f71a1['shift']());}};_0xf72ea1(++_0x1a76f3);}(_0xcf4f,0x1a7));var _0xfcf4=function(_0x556927,_0x34b53f){_0x556927=_0x556927-0x0;var _0x5f1235=_0xcf4f[_0x556927];return _0x5f1235;};'use strict';var _=require(_0xfcf4('0x0'));var util=require(_0xfcf4('0x1'));var moment=require('moment');var BPromise=require(_0xfcf4('0x2'));var rs=require(_0xfcf4('0x3'));var fs=require('fs');var Redis=require(_0xfcf4('0x4'));var db=require(_0xfcf4('0x5'))['db'];var utils=require(_0xfcf4('0x6'));var logger=require(_0xfcf4('0x7'))(_0xfcf4('0x8'));var config=require(_0xfcf4('0x9'));var jayson=require(_0xfcf4('0xa'));var client=jayson[_0xfcf4('0xb')][_0xfcf4('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x47054e,_0x2cc7f0,_0x52210a){return new BPromise(function(_0x474058,_0x476a23){return client['request'](_0x47054e,_0x52210a)['then'](function(_0x11ee70){logger[_0xfcf4('0xd')]('UserFaxQueue,\x20%s,\x20%s',_0x2cc7f0,_0xfcf4('0xe'));logger['debug'](_0xfcf4('0xf'),_0x2cc7f0,_0xfcf4('0xe'),JSON[_0xfcf4('0x10')](_0x11ee70));if(_0x11ee70[_0xfcf4('0x11')]){if(_0x11ee70[_0xfcf4('0x11')][_0xfcf4('0x12')]===0x1f4){logger['error'](_0xfcf4('0x13'),_0x2cc7f0,_0x11ee70[_0xfcf4('0x11')][_0xfcf4('0x14')]);return _0x476a23(_0x11ee70['error'][_0xfcf4('0x14')]);}logger[_0xfcf4('0x11')](_0xfcf4('0x13'),_0x2cc7f0,_0x11ee70['error'][_0xfcf4('0x14')]);return _0x474058(_0x11ee70[_0xfcf4('0x11')][_0xfcf4('0x14')]);}else{logger[_0xfcf4('0xd')]('UserFaxQueue,\x20%s,\x20%s',_0x2cc7f0,_0xfcf4('0xe'));_0x474058(_0x11ee70['result']['message']);}})[_0xfcf4('0x15')](function(_0x390084){logger['error'](_0xfcf4('0x13'),_0x2cc7f0,_0x390084);_0x476a23(_0x390084);});});}
\ No newline at end of file
index 5894184..350fef6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9e2e=['express','../../components/interaction/service','../../config/environment','exports','multer','util','path'];(function(_0x40a975,_0x2b90d7){var _0x185322=function(_0x989bc){while(--_0x989bc){_0x40a975['push'](_0x40a975['shift']());}};_0x185322(++_0x2b90d7);}(_0x9e2e,0xd6));var _0xe9e2=function(_0x3d40b2,_0xd39f14){_0x3d40b2=_0x3d40b2-0x0;var _0x3e0817=_0x9e2e[_0x3d40b2];return _0x3e0817;};'use strict';var multer=require(_0xe9e2('0x0'));var util=require(_0xe9e2('0x1'));var path=require(_0xe9e2('0x2'));var timeout=require('connect-timeout');var express=require(_0xe9e2('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xe9e2('0x4'));var config=require(_0xe9e2('0x5'));module[_0xe9e2('0x6')]=router;
\ No newline at end of file
+var _0xc6c0=['../../components/interaction/service','../../config/environment','exports','multer','path','connect-timeout','express','Router','../../components/auth/service'];(function(_0x22dd2d,_0x388098){var _0x539d01=function(_0x31758b){while(--_0x31758b){_0x22dd2d['push'](_0x22dd2d['shift']());}};_0x539d01(++_0x388098);}(_0xc6c0,0x13e));var _0x0c6c=function(_0x59c301,_0x359c50){_0x59c301=_0x59c301-0x0;var _0x3866b9=_0xc6c0[_0x59c301];return _0x3866b9;};'use strict';var multer=require(_0x0c6c('0x0'));var util=require('util');var path=require(_0x0c6c('0x1'));var timeout=require(_0x0c6c('0x2'));var express=require(_0x0c6c('0x3'));var router=express[_0x0c6c('0x4')]();var auth=require(_0x0c6c('0x5'));var interaction=require(_0x0c6c('0x6'));var config=require(_0x0c6c('0x7'));module[_0x0c6c('0x8')]=router;
\ No newline at end of file
index 6233df9..4a6c507 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x33a8=['sequelize','exports','INTEGER'];(function(_0x2bdecd,_0x21805f){var _0x56116e=function(_0x297d20){while(--_0x297d20){_0x2bdecd['push'](_0x2bdecd['shift']());}};_0x56116e(++_0x21805f);}(_0x33a8,0xb7));var _0x833a=function(_0x581ca4,_0x1c62bd){_0x581ca4=_0x581ca4-0x0;var _0x26ed2e=_0x33a8[_0x581ca4];return _0x26ed2e;};'use strict';var Sequelize=require(_0x833a('0x0'));module[_0x833a('0x1')]={'penalty':{'type':Sequelize[_0x833a('0x2')],'defaultValue':0x0}};
\ No newline at end of file
+var _0xcc65=['sequelize','exports','INTEGER'];(function(_0x5d543b,_0x6a969a){var _0x2015b8=function(_0x1d3800){while(--_0x1d3800){_0x5d543b['push'](_0x5d543b['shift']());}};_0x2015b8(++_0x6a969a);}(_0xcc65,0x192));var _0x5cc6=function(_0x50b850,_0x797ed2){_0x50b850=_0x50b850-0x0;var _0x348619=_0xcc65[_0x50b850];return _0x348619;};'use strict';var Sequelize=require(_0x5cc6('0x0'));module[_0x5cc6('0x1')]={'penalty':{'type':Sequelize[_0x5cc6('0x2')],'defaultValue':0x0}};
\ No newline at end of file
index ad8d87e..2465f9d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xef0f=['moment','request-promise','path','rimraf','./userMailQueue.attributes','exports','define','UserMailQueue','lodash','../../config/logger','api'];(function(_0x1abb11,_0xd68915){var _0x149a9f=function(_0x5c74d5){while(--_0x5c74d5){_0x1abb11['push'](_0x1abb11['shift']());}};_0x149a9f(++_0xd68915);}(_0xef0f,0x168));var _0xfef0=function(_0x5efc18,_0x522924){_0x5efc18=_0x5efc18-0x0;var _0x1b2530=_0xef0f[_0x5efc18];return _0x1b2530;};'use strict';var _=require(_0xfef0('0x0'));var util=require('util');var logger=require(_0xfef0('0x1'))(_0xfef0('0x2'));var moment=require(_0xfef0('0x3'));var BPromise=require('bluebird');var rp=require(_0xfef0('0x4'));var fs=require('fs');var path=require(_0xfef0('0x5'));var rimraf=require(_0xfef0('0x6'));var config=require('../../config/environment');var attributes=require(_0xfef0('0x7'));module[_0xfef0('0x8')]=function(_0x2697df,_0x315a8c){return _0x2697df[_0xfef0('0x9')](_0xfef0('0xa'),attributes,{'tableName':'user_has_mail_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x5f2f=['bluebird','request-promise','path','./userMailQueue.attributes','exports','define','UserMailQueue','lodash','util','../../config/logger','api','moment'];(function(_0x414608,_0x52bd4d){var _0x3272dd=function(_0x3cf0d4){while(--_0x3cf0d4){_0x414608['push'](_0x414608['shift']());}};_0x3272dd(++_0x52bd4d);}(_0x5f2f,0x73));var _0xf5f2=function(_0x32e748,_0x5d9581){_0x32e748=_0x32e748-0x0;var _0x2871ef=_0x5f2f[_0x32e748];return _0x2871ef;};'use strict';var _=require(_0xf5f2('0x0'));var util=require(_0xf5f2('0x1'));var logger=require(_0xf5f2('0x2'))(_0xf5f2('0x3'));var moment=require(_0xf5f2('0x4'));var BPromise=require(_0xf5f2('0x5'));var rp=require(_0xf5f2('0x6'));var fs=require('fs');var path=require(_0xf5f2('0x7'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0xf5f2('0x8'));module[_0xf5f2('0x9')]=function(_0xad7f65,_0x3eebf6){return _0xad7f65[_0xf5f2('0xa')](_0xf5f2('0xb'),attributes,{'tableName':'user_has_mail_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a6a5e64..de4fc01 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4236=['../../config/environment','client','http','request','info','UserMailQueue,\x20%s,\x20%s','request\x20sent','debug','UserMailQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x5e7514,_0x30c2e1){var _0x12f472=function(_0x33ddb6){while(--_0x33ddb6){_0x5e7514['push'](_0x5e7514['shift']());}};_0x12f472(++_0x30c2e1);}(_0x4236,0x1dc));var _0x6423=function(_0x155861,_0x435025){_0x155861=_0x155861-0x0;var _0x5ccf17=_0x4236[_0x155861];return _0x5ccf17;};'use strict';var _=require('lodash');var util=require(_0x6423('0x0'));var moment=require(_0x6423('0x1'));var BPromise=require('bluebird');var rs=require(_0x6423('0x2'));var fs=require('fs');var Redis=require(_0x6423('0x3'));var db=require(_0x6423('0x4'))['db'];var utils=require(_0x6423('0x5'));var logger=require(_0x6423('0x6'))('rpc');var config=require(_0x6423('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x6423('0x8')][_0x6423('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x1715df,_0x3e0182,_0x5f4f18){return new BPromise(function(_0x34ebb4,_0x1c0c47){return client[_0x6423('0xa')](_0x1715df,_0x5f4f18)['then'](function(_0x39bd5b){logger[_0x6423('0xb')](_0x6423('0xc'),_0x3e0182,_0x6423('0xd'));logger[_0x6423('0xe')](_0x6423('0xf'),_0x3e0182,'request\x20sent',JSON[_0x6423('0x10')](_0x39bd5b));if(_0x39bd5b[_0x6423('0x11')]){if(_0x39bd5b['error'][_0x6423('0x12')]===0x1f4){logger['error']('UserMailQueue,\x20%s,\x20%s',_0x3e0182,_0x39bd5b[_0x6423('0x11')][_0x6423('0x13')]);return _0x1c0c47(_0x39bd5b[_0x6423('0x11')][_0x6423('0x13')]);}logger[_0x6423('0x11')]('UserMailQueue,\x20%s,\x20%s',_0x3e0182,_0x39bd5b[_0x6423('0x11')][_0x6423('0x13')]);return _0x34ebb4(_0x39bd5b[_0x6423('0x11')][_0x6423('0x13')]);}else{logger[_0x6423('0xb')](_0x6423('0xc'),_0x3e0182,_0x6423('0xd'));_0x34ebb4(_0x39bd5b['result'][_0x6423('0x13')]);}})[_0x6423('0x14')](function(_0x4887dc){logger[_0x6423('0x11')](_0x6423('0xc'),_0x3e0182,_0x4887dc);_0x1c0c47(_0x4887dc);});});}
\ No newline at end of file
+var _0xd9ee=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','UserMailQueue,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','ioredis','../../mysqldb'];(function(_0x4d8e91,_0x54b564){var _0x41ee17=function(_0x20e2f2){while(--_0x20e2f2){_0x4d8e91['push'](_0x4d8e91['shift']());}};_0x41ee17(++_0x54b564);}(_0xd9ee,0x13c));var _0xed9e=function(_0x54f23c,_0x4b195a){_0x54f23c=_0x54f23c-0x0;var _0x18f18d=_0xd9ee[_0x54f23c];return _0x18f18d;};'use strict';var _=require(_0xed9e('0x0'));var util=require(_0xed9e('0x1'));var moment=require(_0xed9e('0x2'));var BPromise=require(_0xed9e('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xed9e('0x4'));var db=require(_0xed9e('0x5'))['db'];var utils=require(_0xed9e('0x6'));var logger=require(_0xed9e('0x7'))(_0xed9e('0x8'));var config=require(_0xed9e('0x9'));var jayson=require(_0xed9e('0xa'));var client=jayson[_0xed9e('0xb')][_0xed9e('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x30cbbd,_0x3d3ae8,_0x2b6bf1){return new BPromise(function(_0x3a7b1e,_0x1e0ad8){return client[_0xed9e('0xd')](_0x30cbbd,_0x2b6bf1)['then'](function(_0x43d2f0){logger[_0xed9e('0xe')](_0xed9e('0xf'),_0x3d3ae8,_0xed9e('0x10'));logger['debug']('UserMailQueue,\x20%s,\x20%s,\x20%s',_0x3d3ae8,_0xed9e('0x10'),JSON[_0xed9e('0x11')](_0x43d2f0));if(_0x43d2f0['error']){if(_0x43d2f0[_0xed9e('0x12')][_0xed9e('0x13')]===0x1f4){logger[_0xed9e('0x12')]('UserMailQueue,\x20%s,\x20%s',_0x3d3ae8,_0x43d2f0[_0xed9e('0x12')][_0xed9e('0x14')]);return _0x1e0ad8(_0x43d2f0[_0xed9e('0x12')][_0xed9e('0x14')]);}logger[_0xed9e('0x12')](_0xed9e('0xf'),_0x3d3ae8,_0x43d2f0[_0xed9e('0x12')]['message']);return _0x3a7b1e(_0x43d2f0[_0xed9e('0x12')][_0xed9e('0x14')]);}else{logger['info'](_0xed9e('0xf'),_0x3d3ae8,'request\x20sent');_0x3a7b1e(_0x43d2f0[_0xed9e('0x15')][_0xed9e('0x14')]);}})[_0xed9e('0x16')](function(_0x6099ab){logger[_0xed9e('0x12')](_0xed9e('0xf'),_0x3d3ae8,_0x6099ab);_0x1e0ad8(_0x6099ab);});});}
\ No newline at end of file
index c359ae3..a2a7ef4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x938d=['Router','../../config/environment','exports','multer','util','connect-timeout','express'];(function(_0x53c8a5,_0x2a6cd1){var _0xc9e75f=function(_0x1ceabb){while(--_0x1ceabb){_0x53c8a5['push'](_0x53c8a5['shift']());}};_0xc9e75f(++_0x2a6cd1);}(_0x938d,0x122));var _0xd938=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x938d[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0xd938('0x0'));var util=require(_0xd938('0x1'));var path=require('path');var timeout=require(_0xd938('0x2'));var express=require(_0xd938('0x3'));var router=express[_0xd938('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xd938('0x5'));module[_0xd938('0x6')]=router;
\ No newline at end of file
+var _0x49c1=['exports','multer','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service'];(function(_0x1e52ac,_0xabe7fa){var _0x15049f=function(_0x2a1cbb){while(--_0x2a1cbb){_0x1e52ac['push'](_0x1e52ac['shift']());}};_0x15049f(++_0xabe7fa);}(_0x49c1,0xef));var _0x149c=function(_0x2abf4d,_0x3f8e3c){_0x2abf4d=_0x2abf4d-0x0;var _0x261e8e=_0x49c1[_0x2abf4d];return _0x261e8e;};'use strict';var multer=require(_0x149c('0x0'));var util=require('util');var path=require(_0x149c('0x1'));var timeout=require(_0x149c('0x2'));var express=require(_0x149c('0x3'));var router=express['Router']();var auth=require(_0x149c('0x4'));var interaction=require(_0x149c('0x5'));var config=require('../../config/environment');module[_0x149c('0x6')]=router;
\ No newline at end of file
index 99c946b..8cbd53f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe00c=['sequelize','INTEGER'];(function(_0x9c2427,_0x17c865){var _0x51984f=function(_0x177af6){while(--_0x177af6){_0x9c2427['push'](_0x9c2427['shift']());}};_0x51984f(++_0x17c865);}(_0xe00c,0x86));var _0xce00=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xe00c[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0xce00('0x0'));module['exports']={'penalty':{'type':Sequelize[_0xce00('0x1')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x0bfe=['sequelize','exports','INTEGER'];(function(_0x41ff01,_0x2ff380){var _0x1c81c4=function(_0x5a1a07){while(--_0x5a1a07){_0x41ff01['push'](_0x41ff01['shift']());}};_0x1c81c4(++_0x2ff380);}(_0x0bfe,0xb4));var _0xe0bf=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x0bfe[_0x14add3];return _0x4a174f;};'use strict';var Sequelize=require(_0xe0bf('0x0'));module[_0xe0bf('0x1')]={'penalty':{'type':Sequelize[_0xe0bf('0x2')],'defaultValue':0x0}};
\ No newline at end of file
index 055cf66..eaaaf0d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5e24=['UserOpenchannelQueue','user_has_openchannel_queues','lodash','util','../../config/logger','api','bluebird','request-promise','path','rimraf','../../config/environment','./userOpenchannelQueue.attributes','exports'];(function(_0x54b870,_0x509c4d){var _0x14b605=function(_0x58d72b){while(--_0x58d72b){_0x54b870['push'](_0x54b870['shift']());}};_0x14b605(++_0x509c4d);}(_0x5e24,0x1af));var _0x45e2=function(_0x2ed21d,_0x2728b7){_0x2ed21d=_0x2ed21d-0x0;var _0x3d38d7=_0x5e24[_0x2ed21d];return _0x3d38d7;};'use strict';var _=require(_0x45e2('0x0'));var util=require(_0x45e2('0x1'));var logger=require(_0x45e2('0x2'))(_0x45e2('0x3'));var moment=require('moment');var BPromise=require(_0x45e2('0x4'));var rp=require(_0x45e2('0x5'));var fs=require('fs');var path=require(_0x45e2('0x6'));var rimraf=require(_0x45e2('0x7'));var config=require(_0x45e2('0x8'));var attributes=require(_0x45e2('0x9'));module[_0x45e2('0xa')]=function(_0x291f36,_0x33e576){return _0x291f36['define'](_0x45e2('0xb'),attributes,{'tableName':_0x45e2('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8221=['request-promise','rimraf','./userOpenchannelQueue.attributes','exports','UserOpenchannelQueue','user_has_openchannel_queues','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0xef4cf0,_0x16c9c3){var _0x497ad2=function(_0xce63d4){while(--_0xce63d4){_0xef4cf0['push'](_0xef4cf0['shift']());}};_0x497ad2(++_0x16c9c3);}(_0x8221,0x1f2));var _0x1822=function(_0x3ab51d,_0x2fa01d){_0x3ab51d=_0x3ab51d-0x0;var _0x29a04e=_0x8221[_0x3ab51d];return _0x29a04e;};'use strict';var _=require(_0x1822('0x0'));var util=require(_0x1822('0x1'));var logger=require(_0x1822('0x2'))(_0x1822('0x3'));var moment=require(_0x1822('0x4'));var BPromise=require(_0x1822('0x5'));var rp=require(_0x1822('0x6'));var fs=require('fs');var path=require('path');var rimraf=require(_0x1822('0x7'));var config=require('../../config/environment');var attributes=require(_0x1822('0x8'));module[_0x1822('0x9')]=function(_0x544992,_0x4cf79b){return _0x544992['define'](_0x1822('0xa'),attributes,{'tableName':_0x1822('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 735b276..3bffb82 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xee0e=['stringify','error','message','result','catch','util','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','then','UserOpenchannelQueue,\x20%s,\x20%s','request\x20sent','debug','UserOpenchannelQueue,\x20%s,\x20%s,\x20%s'];(function(_0x373670,_0x5f311f){var _0x38589b=function(_0x49ed40){while(--_0x49ed40){_0x373670['push'](_0x373670['shift']());}};_0x38589b(++_0x5f311f);}(_0xee0e,0xc2));var _0xeee0=function(_0x2351c4,_0x1dca54){_0x2351c4=_0x2351c4-0x0;var _0x1dd3f8=_0xee0e[_0x2351c4];return _0x1dd3f8;};'use strict';var _=require('lodash');var util=require(_0xeee0('0x0'));var moment=require('moment');var BPromise=require(_0xeee0('0x1'));var rs=require(_0xeee0('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xeee0('0x3'))['db'];var utils=require(_0xeee0('0x4'));var logger=require(_0xeee0('0x5'))(_0xeee0('0x6'));var config=require(_0xeee0('0x7'));var jayson=require('jayson/promise');var client=jayson[_0xeee0('0x8')][_0xeee0('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2c1eb7,_0x28b258,_0x5281d5){return new BPromise(function(_0x4f28ef,_0x2057fc){return client[_0xeee0('0xa')](_0x2c1eb7,_0x5281d5)[_0xeee0('0xb')](function(_0x553341){logger['info'](_0xeee0('0xc'),_0x28b258,_0xeee0('0xd'));logger[_0xeee0('0xe')](_0xeee0('0xf'),_0x28b258,'request\x20sent',JSON[_0xeee0('0x10')](_0x553341));if(_0x553341[_0xeee0('0x11')]){if(_0x553341[_0xeee0('0x11')]['code']===0x1f4){logger['error']('UserOpenchannelQueue,\x20%s,\x20%s',_0x28b258,_0x553341[_0xeee0('0x11')][_0xeee0('0x12')]);return _0x2057fc(_0x553341[_0xeee0('0x11')][_0xeee0('0x12')]);}logger[_0xeee0('0x11')](_0xeee0('0xc'),_0x28b258,_0x553341[_0xeee0('0x11')][_0xeee0('0x12')]);return _0x4f28ef(_0x553341['error'][_0xeee0('0x12')]);}else{logger['info'](_0xeee0('0xc'),_0x28b258,_0xeee0('0xd'));_0x4f28ef(_0x553341[_0xeee0('0x13')][_0xeee0('0x12')]);}})[_0xeee0('0x14')](function(_0x3d24cd){logger[_0xeee0('0x11')]('UserOpenchannelQueue,\x20%s,\x20%s',_0x28b258,_0x3d24cd);_0x2057fc(_0x3d24cd);});});}
\ No newline at end of file
+var _0xbd87=['rpc','client','request','info','UserOpenchannelQueue,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','lodash','util','moment','bluebird','../../config/utils','../../config/logger'];(function(_0x3213d2,_0x74fda9){var _0x3a57cb=function(_0x4e6cf3){while(--_0x4e6cf3){_0x3213d2['push'](_0x3213d2['shift']());}};_0x3a57cb(++_0x74fda9);}(_0xbd87,0x78));var _0x7bd8=function(_0x151787,_0x77ec0f){_0x151787=_0x151787-0x0;var _0x35f544=_0xbd87[_0x151787];return _0x35f544;};'use strict';var _=require(_0x7bd8('0x0'));var util=require(_0x7bd8('0x1'));var moment=require(_0x7bd8('0x2'));var BPromise=require(_0x7bd8('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x7bd8('0x4'));var logger=require(_0x7bd8('0x5'))(_0x7bd8('0x6'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x7bd8('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2033a9,_0x38eded,_0x2d9226){return new BPromise(function(_0x3a9083,_0x4fe871){return client[_0x7bd8('0x8')](_0x2033a9,_0x2d9226)['then'](function(_0x5d943d){logger[_0x7bd8('0x9')](_0x7bd8('0xa'),_0x38eded,_0x7bd8('0xb'));logger[_0x7bd8('0xc')]('UserOpenchannelQueue,\x20%s,\x20%s,\x20%s',_0x38eded,_0x7bd8('0xb'),JSON[_0x7bd8('0xd')](_0x5d943d));if(_0x5d943d['error']){if(_0x5d943d[_0x7bd8('0xe')][_0x7bd8('0xf')]===0x1f4){logger[_0x7bd8('0xe')](_0x7bd8('0xa'),_0x38eded,_0x5d943d[_0x7bd8('0xe')][_0x7bd8('0x10')]);return _0x4fe871(_0x5d943d[_0x7bd8('0xe')][_0x7bd8('0x10')]);}logger['error']('UserOpenchannelQueue,\x20%s,\x20%s',_0x38eded,_0x5d943d['error']['message']);return _0x3a9083(_0x5d943d['error'][_0x7bd8('0x10')]);}else{logger[_0x7bd8('0x9')](_0x7bd8('0xa'),_0x38eded,_0x7bd8('0xb'));_0x3a9083(_0x5d943d[_0x7bd8('0x11')][_0x7bd8('0x10')]);}})['catch'](function(_0x4c5a6f){logger[_0x7bd8('0xe')](_0x7bd8('0xa'),_0x38eded,_0x4c5a6f);_0x4fe871(_0x4c5a6f);});});}
\ No newline at end of file
index 1d475a4..867780b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf412=['index','/describe','describe','show','/:id/resources','getResources','post','clone','/:id/sections','addSections','/:id','update','delete','destroy','removeSections','removeResources','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./userProfile.controller','get','isAuthenticated'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0xf412,0xb9));var _0x2f41=function(_0x267484,_0x3eb131){_0x267484=_0x267484-0x0;var _0x14a356=_0xf412[_0x267484];return _0x14a356;};'use strict';var multer=require(_0x2f41('0x0'));var util=require(_0x2f41('0x1'));var path=require(_0x2f41('0x2'));var timeout=require(_0x2f41('0x3'));var express=require(_0x2f41('0x4'));var router=express[_0x2f41('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x2f41('0x6'));var config=require(_0x2f41('0x7'));var controller=require(_0x2f41('0x8'));router[_0x2f41('0x9')]('/',auth[_0x2f41('0xa')](),controller[_0x2f41('0xb')]);router['get'](_0x2f41('0xc'),auth[_0x2f41('0xa')](),controller[_0x2f41('0xd')]);router[_0x2f41('0x9')]('/:id',auth[_0x2f41('0xa')](),controller[_0x2f41('0xe')]);router[_0x2f41('0x9')](_0x2f41('0xf'),auth[_0x2f41('0xa')](),controller[_0x2f41('0x10')]);router[_0x2f41('0x11')]('/',auth['isAuthenticated'](),controller['create']);router['post']('/:id/clone',auth[_0x2f41('0xa')](),controller[_0x2f41('0x12')]);router[_0x2f41('0x11')](_0x2f41('0x13'),auth[_0x2f41('0xa')](),controller[_0x2f41('0x14')]);router[_0x2f41('0x11')](_0x2f41('0xf'),auth[_0x2f41('0xa')](),controller['addResources']);router['put'](_0x2f41('0x15'),auth[_0x2f41('0xa')](),controller[_0x2f41('0x16')]);router[_0x2f41('0x17')](_0x2f41('0x15'),auth['isAuthenticated'](),controller[_0x2f41('0x18')]);router['delete'](_0x2f41('0x13'),auth['isAuthenticated'](),controller[_0x2f41('0x19')]);router[_0x2f41('0x17')](_0x2f41('0xf'),auth[_0x2f41('0xa')](),controller[_0x2f41('0x1a')]);module[_0x2f41('0x1b')]=router;
\ No newline at end of file
+var _0x9b57=['isAuthenticated','index','/describe','describe','/:id','show','/:id/resources','getResources','post','/:id/clone','clone','/:id/sections','addSections','addResources','put','update','delete','destroy','removeResources','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./userProfile.controller','get'];(function(_0x9aaca8,_0x222c1a){var _0x1a77bd=function(_0x1b319a){while(--_0x1b319a){_0x9aaca8['push'](_0x9aaca8['shift']());}};_0x1a77bd(++_0x222c1a);}(_0x9b57,0x18c));var _0x79b5=function(_0x3e0483,_0x10f5d8){_0x3e0483=_0x3e0483-0x0;var _0x4a2e16=_0x9b57[_0x3e0483];return _0x4a2e16;};'use strict';var multer=require(_0x79b5('0x0'));var util=require(_0x79b5('0x1'));var path=require(_0x79b5('0x2'));var timeout=require(_0x79b5('0x3'));var express=require('express');var router=express[_0x79b5('0x4')]();var auth=require(_0x79b5('0x5'));var interaction=require(_0x79b5('0x6'));var config=require(_0x79b5('0x7'));var controller=require(_0x79b5('0x8'));router[_0x79b5('0x9')]('/',auth[_0x79b5('0xa')](),controller[_0x79b5('0xb')]);router[_0x79b5('0x9')](_0x79b5('0xc'),auth[_0x79b5('0xa')](),controller[_0x79b5('0xd')]);router[_0x79b5('0x9')](_0x79b5('0xe'),auth[_0x79b5('0xa')](),controller[_0x79b5('0xf')]);router['get'](_0x79b5('0x10'),auth[_0x79b5('0xa')](),controller[_0x79b5('0x11')]);router['post']('/',auth['isAuthenticated'](),controller['create']);router[_0x79b5('0x12')](_0x79b5('0x13'),auth[_0x79b5('0xa')](),controller[_0x79b5('0x14')]);router[_0x79b5('0x12')](_0x79b5('0x15'),auth[_0x79b5('0xa')](),controller[_0x79b5('0x16')]);router[_0x79b5('0x12')](_0x79b5('0x10'),auth[_0x79b5('0xa')](),controller[_0x79b5('0x17')]);router[_0x79b5('0x18')](_0x79b5('0xe'),auth[_0x79b5('0xa')](),controller[_0x79b5('0x19')]);router[_0x79b5('0x1a')](_0x79b5('0xe'),auth[_0x79b5('0xa')](),controller[_0x79b5('0x1b')]);router[_0x79b5('0x1a')]('/:id/sections',auth[_0x79b5('0xa')](),controller['removeSections']);router[_0x79b5('0x1a')]('/:id/resources',auth[_0x79b5('0xa')](),controller[_0x79b5('0x1c')]);module['exports']=router;
\ No newline at end of file
index 88f38ff..2b2804b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1ecc=['exports','STRING','name','crudPermissions','join','getDataValue','split','sequelize'];(function(_0x3eb892,_0x452dfc){var _0x463876=function(_0x4c8f67){while(--_0x4c8f67){_0x3eb892['push'](_0x3eb892['shift']());}};_0x463876(++_0x452dfc);}(_0x1ecc,0xe7));var _0xc1ec=function(_0x2064e5,_0x4f6fa2){_0x2064e5=_0x2064e5-0x0;var _0x21a233=_0x1ecc[_0x2064e5];return _0x21a233;};'use strict';var Sequelize=require(_0xc1ec('0x0'));module[_0xc1ec('0x1')]={'name':{'type':Sequelize[_0xc1ec('0x2')],'allowNull':![],'unique':_0xc1ec('0x3')},'crudPermissions':{'type':Sequelize[_0xc1ec('0x2')],'set':function(_0x4e1b8f){this['setDataValue'](_0xc1ec('0x4'),_0x4e1b8f?_0x4e1b8f[_0xc1ec('0x5')](''):[]);},'get':function(){return this[_0xc1ec('0x6')](_0xc1ec('0x4'))?this[_0xc1ec('0x6')](_0xc1ec('0x4'))[_0xc1ec('0x7')](''):[];},'allowNull':![],'defaultValue':'r'},'description':{'type':Sequelize['STRING'],'allowNull':!![]}};
\ No newline at end of file
+var _0x3b11=['split','sequelize','exports','STRING','name','setDataValue','join','getDataValue','crudPermissions'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0x3b11,0x1f0));var _0x13b1=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x3b11[_0x20a584];return _0x4b41a8;};'use strict';var Sequelize=require(_0x13b1('0x0'));module[_0x13b1('0x1')]={'name':{'type':Sequelize[_0x13b1('0x2')],'allowNull':![],'unique':_0x13b1('0x3')},'crudPermissions':{'type':Sequelize['STRING'],'set':function(_0x1563f9){this[_0x13b1('0x4')]('crudPermissions',_0x1563f9?_0x1563f9[_0x13b1('0x5')](''):[]);},'get':function(){return this[_0x13b1('0x6')]('crudPermissions')?this[_0x13b1('0x6')](_0x13b1('0x7'))[_0x13b1('0x8')](''):[];},'allowNull':![],'defaultValue':'r'},'description':{'type':Sequelize[_0x13b1('0x2')],'allowNull':!![]}};
\ No newline at end of file
index a5302c5..1c57f3b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb2f4=['VoiceContext','VoiceMail','VoiceRecording','membername','User','role','agent','Telephones','telephone','VoiceQueue','QueueCampaigns','queue','outbound','musiconholds','VoiceMusicOnHold','chanspies','VoiceChanSpy','voiceprefixes','VoicePrefix','Campaign','MailQueue','mailaccounts','mailsubstatuses','MailSubstatus','openchannelqueues','OpenchannelQueue','openchannelaccounts','OpenchannelAccount','SmsQueue','SmsAccount','teams','Team','voicequeues','queuecampaigns','VoiceQueues','users','telephones','Users','admin','user','Agents','salesforceaccounts','SalesforceAccount','freshdeskaccounts','FreshdeskAccount','sugarcrmaccounts','SugarcrmAccount','deskaccounts','zohoaccounts','vtigeraccounts','CannedAnswer','dispositions','Disposition','customdashboards','intervals','pauses','Pause','scheduler','Schedule','Sound','tags','templates','triggers','Trigger','trunks','variables','Variable','Plugin','extractedreports','AnalyticExtractedReport','Reports','reportId','metrics','AnalyticMetric','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','to-csv','ejs','lodash','squel','crypto','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','../../config/environment','../../mysqldb','defaults','localhost','redis','./userProfile.socket','sendStatus','status','json','offset','set','Content-Range','apply','reject','save','update','then','end','error','name','send','index','UserProfile','keys','intersection','model','attributes','fields','query','hasOwnProperty','limit','order','sort','filters','filter','merge','where','VIRTUAL','field','options','count','include','rows','catch','show','params','rawAttributes','length','find','create','body','clone','includeAll','omit','createdAt','updatedAt','sequelize','transaction','get','UserProfileSection','findAll','each','autoAssociation','UserProfileResource','map','userProfileId','Resources','destroy','describe','addSections','sectionId','push','ids','addResources','bulkCreate','removeResources','section','undefined','Sequelize','ValidationError','Unknown\x20section','mergeResources','Invalid\x20section\x20\x27','isEmpty','parentSections','findOne','all','ignore','union','childModel','nolimit','type','key','foreignKey','associatedResources','forEach','default','DefaultReports','custom','CmContact','Tag','Tags','tag','ThroughTags','color','value','resourceId','toLowerCase','squareprojects','SquareProject','odbc','SquareOdbc','squarerecordings','SquareProjects','projectName','JscriptyProject','contacts','Lists','ListId','CmList','CmCompany','globalcustomfields','ChatQueue','faxqueues','FaxQueue','inboundroutes','internalroutes','outboundroutes','VoiceExtension','contexts'];(function(_0x10f06b,_0x1577a9){var _0x4bbe16=function(_0x39a81a){while(--_0x39a81a){_0x10f06b['push'](_0x10f06b['shift']());}};_0x4bbe16(++_0x1577a9);}(_0xb2f4,0x129));var _0x4b2f=function(_0xf65bf8,_0x494a66){_0xf65bf8=_0xf65bf8-0x0;var _0x2e4a66=_0xb2f4[_0xf65bf8];return _0x2e4a66;};'use strict';var pdf=require(_0x4b2f('0x0'));var emlformat=require(_0x4b2f('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x4b2f('0x2'));var jsonpatch=require(_0x4b2f('0x3'));var rp=require(_0x4b2f('0x4'));var moment=require(_0x4b2f('0x5'));var BPromise=require(_0x4b2f('0x6'));var Mustache=require(_0x4b2f('0x7'));var util=require('util');var path=require(_0x4b2f('0x8'));var sox=require('sox');var csv=require(_0x4b2f('0x9'));var ejs=require(_0x4b2f('0xa'));var fs=require('fs');var _=require(_0x4b2f('0xb'));var squel=require(_0x4b2f('0xc'));var crypto=require(_0x4b2f('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x4b2f('0x9'));var querystring=require(_0x4b2f('0xe'));var Papa=require(_0x4b2f('0xf'));var Redis=require(_0x4b2f('0x10'));var authService=require('../../components/auth/service');var qs=require(_0x4b2f('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x4b2f('0x12'))('api');var utils=require('../../config/utils');var config=require(_0x4b2f('0x13'));var db=require(_0x4b2f('0x14'))['db'];config['redis']=_[_0x4b2f('0x15')](config['redis'],{'host':_0x4b2f('0x16'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x4b2f('0x17')]));require(_0x4b2f('0x18'))['register'](socket);function respondWithStatusCode(_0x5a0429,_0x419b91){_0x419b91=_0x419b91||0xcc;return function(_0x3eb9f0){if(_0x3eb9f0){return _0x5a0429[_0x4b2f('0x19')](_0x419b91);}return _0x5a0429[_0x4b2f('0x1a')](_0x419b91)['end']();};}function respondWithResult(_0xf3522b,_0x5712b4){_0x5712b4=_0x5712b4||0xc8;return function(_0x21f3ae){if(_0x21f3ae){return _0xf3522b[_0x4b2f('0x1a')](_0x5712b4)[_0x4b2f('0x1b')](_0x21f3ae);}};}function respondWithFilteredResult(_0x4e8840,_0x121a50){return function(_0x4c9e24){if(_0x4c9e24){var _0x3972a0=_0x4c9e24['count'],_0x366401=_0x121a50[_0x4b2f('0x1c')],_0x160f7f=_0x121a50['offset']+_0x121a50['limit'],_0x1994a3;if(_0x160f7f>=_0x3972a0){_0x160f7f=_0x3972a0;_0x1994a3=0xc8;}else{_0x1994a3=0xce;}_0x4e8840[_0x4b2f('0x1a')](_0x1994a3);return _0x4e8840[_0x4b2f('0x1d')](_0x4b2f('0x1e'),_0x366401+'-'+_0x160f7f+'/'+_0x3972a0)[_0x4b2f('0x1b')](_0x4c9e24);}return null;};}function patchUpdates(_0x1dce30){return function(_0xdfb6bd){try{jsonpatch[_0x4b2f('0x1f')](_0xdfb6bd,_0x1dce30,!![]);}catch(_0x1b9d60){return BPromise[_0x4b2f('0x20')](_0x1b9d60);}return _0xdfb6bd[_0x4b2f('0x21')]();};}function saveUpdates(_0x18c988,_0x196933){return function(_0x3166ce){if(_0x3166ce){return _0x3166ce[_0x4b2f('0x22')](_0x18c988)['then'](function(_0x2bd339){return _0x2bd339;});}return null;};}function removeEntity(_0x254cf6,_0xf21594){return function(_0x22c8d4){if(_0x22c8d4){return _0x22c8d4['destroy']()[_0x4b2f('0x23')](function(){_0x254cf6[_0x4b2f('0x1a')](0xcc)[_0x4b2f('0x24')]();});}};}function handleEntityNotFound(_0x33d2f9,_0x10d7b2){return function(_0x473445){if(!_0x473445){_0x33d2f9['sendStatus'](0x194);}return _0x473445;};}function handleError(_0x30b261,_0x536ab0){_0x536ab0=_0x536ab0||0x1f4;return function(_0xba9372){logger[_0x4b2f('0x25')](_0xba9372['stack']);if(_0xba9372[_0x4b2f('0x26')]){delete _0xba9372['name'];}_0x30b261[_0x4b2f('0x1a')](_0x536ab0)[_0x4b2f('0x27')](_0xba9372);};}exports[_0x4b2f('0x28')]=function(_0xe6abeb,_0x56d20b){var _0x37bce0={},_0x490620={},_0x873f3d={'count':0x0,'rows':[]};var _0x30d0c2=db[_0x4b2f('0x29')]['rawAttributes'];_0x490620['model']=_[_0x4b2f('0x2a')](_0x30d0c2);_0x490620['query']=_['keys'](_0xe6abeb['query']);_0x490620['filters']=_[_0x4b2f('0x2b')](_0x490620[_0x4b2f('0x2c')],_0x490620['query']);_0x37bce0[_0x4b2f('0x2d')]=_[_0x4b2f('0x2b')](_0x490620[_0x4b2f('0x2c')],qs[_0x4b2f('0x2e')](_0xe6abeb[_0x4b2f('0x2f')][_0x4b2f('0x2e')]));_0x37bce0[_0x4b2f('0x2d')]=_0x37bce0[_0x4b2f('0x2d')]['length']?_0x37bce0[_0x4b2f('0x2d')]:_0x490620[_0x4b2f('0x2c')];if(!_0xe6abeb['query'][_0x4b2f('0x30')]('nolimit')){_0x37bce0['limit']=qs[_0x4b2f('0x31')](_0xe6abeb[_0x4b2f('0x2f')][_0x4b2f('0x31')]);_0x37bce0[_0x4b2f('0x1c')]=qs[_0x4b2f('0x1c')](_0xe6abeb[_0x4b2f('0x2f')][_0x4b2f('0x1c')]);}_0x37bce0[_0x4b2f('0x32')]=qs[_0x4b2f('0x33')](_0xe6abeb['query']['sort']);_0x37bce0['where']=qs[_0x4b2f('0x34')](_['pick'](_0xe6abeb[_0x4b2f('0x2f')],_0x490620[_0x4b2f('0x34')]));if(_0xe6abeb[_0x4b2f('0x2f')][_0x4b2f('0x35')]){_0x37bce0['where']=_[_0x4b2f('0x36')](_0x37bce0[_0x4b2f('0x37')],{'$or':_['map'](_0x30d0c2,function(_0x4af7d6){if(_0x4af7d6['type']['key']!==_0x4b2f('0x38')){var _0x315cf2={};_0x315cf2[_0x4af7d6[_0x4b2f('0x39')]]={'$like':'%'+_0xe6abeb[_0x4b2f('0x2f')][_0x4b2f('0x35')]+'%'};return _0x315cf2;}})});}_0x37bce0=_[_0x4b2f('0x36')]({},_0x37bce0,_0xe6abeb[_0x4b2f('0x3a')]);var _0x167edc={'where':_0x37bce0[_0x4b2f('0x37')]};return db[_0x4b2f('0x29')][_0x4b2f('0x3b')](_0x167edc)['then'](function(_0x2852f8){_0x873f3d[_0x4b2f('0x3b')]=_0x2852f8;if(_0xe6abeb['query']['includeAll']){_0x37bce0[_0x4b2f('0x3c')]=[{'all':!![]}];}return db['UserProfile']['findAll'](_0x37bce0);})[_0x4b2f('0x23')](function(_0x4bbf37){_0x873f3d[_0x4b2f('0x3d')]=_0x4bbf37;return _0x873f3d;})[_0x4b2f('0x23')](respondWithFilteredResult(_0x56d20b,_0x37bce0))[_0x4b2f('0x3e')](handleError(_0x56d20b,null));};exports[_0x4b2f('0x3f')]=function(_0x4d025f,_0x24eebc){var _0x770b58={'raw':![],'where':{'id':_0x4d025f[_0x4b2f('0x40')]['id']}},_0x4a4863={};_0x4a4863[_0x4b2f('0x2c')]=_[_0x4b2f('0x2a')](db['UserProfile'][_0x4b2f('0x41')]);_0x4a4863[_0x4b2f('0x2f')]=_[_0x4b2f('0x2a')](_0x4d025f[_0x4b2f('0x2f')]);_0x4a4863[_0x4b2f('0x34')]=_[_0x4b2f('0x2b')](_0x4a4863[_0x4b2f('0x2c')],_0x4a4863['query']);_0x770b58[_0x4b2f('0x2d')]=_['intersection'](_0x4a4863[_0x4b2f('0x2c')],qs['fields'](_0x4d025f[_0x4b2f('0x2f')][_0x4b2f('0x2e')]));_0x770b58[_0x4b2f('0x2d')]=_0x770b58[_0x4b2f('0x2d')][_0x4b2f('0x42')]?_0x770b58['attributes']:_0x4a4863[_0x4b2f('0x2c')];if(_0x4d025f[_0x4b2f('0x2f')]['includeAll']){_0x770b58[_0x4b2f('0x3c')]=[{'all':!![]}];}_0x770b58=_[_0x4b2f('0x36')]({},_0x770b58,_0x4d025f[_0x4b2f('0x3a')]);return db[_0x4b2f('0x29')][_0x4b2f('0x43')](_0x770b58)['then'](handleEntityNotFound(_0x24eebc,null))['then'](respondWithResult(_0x24eebc,null))['catch'](handleError(_0x24eebc,null));};exports['create']=function(_0x27b41d,_0x24f1e0){return db[_0x4b2f('0x29')][_0x4b2f('0x44')](_0x27b41d[_0x4b2f('0x45')],{})['then'](respondWithResult(_0x24f1e0,0xc9))[_0x4b2f('0x3e')](handleError(_0x24f1e0,null));};exports[_0x4b2f('0x46')]=function(_0x12a06a,_0x320e24){var _0x6c908f={'raw':![],'where':{'id':_0x12a06a[_0x4b2f('0x40')]['id']}},_0x493bce={};_0x493bce[_0x4b2f('0x2c')]=_[_0x4b2f('0x2a')](db[_0x4b2f('0x29')][_0x4b2f('0x41')]);_0x6c908f[_0x4b2f('0x2d')]=_['intersection'](_0x493bce['model'],qs[_0x4b2f('0x2e')](_0x12a06a[_0x4b2f('0x2f')][_0x4b2f('0x2e')]));_0x6c908f[_0x4b2f('0x2d')]=_0x6c908f[_0x4b2f('0x2d')][_0x4b2f('0x42')]?_0x6c908f[_0x4b2f('0x2d')]:_0x493bce[_0x4b2f('0x2c')];if(_0x12a06a[_0x4b2f('0x2f')][_0x4b2f('0x47')]){_0x6c908f['include']=[{'all':!![]}];}_0x6c908f=_['merge']({},_0x6c908f,_0x12a06a[_0x4b2f('0x3a')]);return db[_0x4b2f('0x29')]['find'](_0x6c908f)[_0x4b2f('0x23')](handleEntityNotFound(_0x320e24,null))[_0x4b2f('0x23')](function(_0x2bf64f){if(_0x2bf64f){var _0x2a6ef6=_0x2bf64f['get']({'plain':!![]});_0x2a6ef6=qs[_0x4b2f('0x48')](_0x2a6ef6,['id',_0x4b2f('0x49'),'updatedAt','crudPermissions']);_0x12a06a[_0x4b2f('0x45')]=_[_0x4b2f('0x48')](_0x12a06a[_0x4b2f('0x45')],['id','createdAt',_0x4b2f('0x4a')]);return db[_0x4b2f('0x4b')][_0x4b2f('0x4c')](function(_0x182c49){return db[_0x4b2f('0x29')]['create'](_[_0x4b2f('0x36')](_0x2a6ef6,_0x12a06a[_0x4b2f('0x45')]),{'include':_0x12a06a[_0x4b2f('0x2f')][_0x4b2f('0x47')]?[{'all':!![]}]:undefined,'transaction':_0x182c49})['then'](function(_0x261391){var _0x16d45e=_0x261391[_0x4b2f('0x4d')]({'plain':!![]});return db[_0x4b2f('0x4e')][_0x4b2f('0x4f')]({'where':{'userProfileId':_0x12a06a[_0x4b2f('0x40')]['id']},'raw':!![]})['then'](function(_0x2fe66b){if(_0x2fe66b){return BPromise[_0x4b2f('0x50')](_0x2fe66b,function(_0x4f4e51){return new BPromise(function(_0x37964d,_0x3aa0c7){if(_0x4f4e51[_0x4b2f('0x51')]===null||_0x4f4e51['autoAssociation']===0x1)_0x37964d(null);return db[_0x4b2f('0x52')][_0x4b2f('0x4f')]({'where':{'sectionId':_0x4f4e51['id']},'raw':!![]})[_0x4b2f('0x23')](function(_0x4b31c5){var _0x41d0e3=_[_0x4b2f('0x53')](_0x4b31c5,function(_0x1d1672){return qs[_0x4b2f('0x48')](_0x1d1672,['id','createdAt',_0x4b2f('0x4a'),'sectionId']);});_0x37964d(_0x41d0e3);})[_0x4b2f('0x3e')](function(_0x3afce4){_0x3aa0c7(_0x3afce4);});})['then'](function(_0x44a458){var _0x25dba1=qs[_0x4b2f('0x48')](_0x4f4e51,['id','createdAt','updatedAt']);_0x25dba1[_0x4b2f('0x54')]=_0x16d45e['id'];if(_0x44a458)_0x25dba1['Resources']=_0x44a458;return _0x25dba1;})[_0x4b2f('0x23')](function(_0x5af9fb){return db['UserProfileSection'][_0x4b2f('0x44')](_0x5af9fb,{'include':[{'model':db['UserProfileResource'],'as':_0x4b2f('0x55')}],'raw':!![],'transaction':_0x182c49});});})[_0x4b2f('0x23')](function(){return _0x16d45e;});}});});});}})[_0x4b2f('0x23')](respondWithResult(_0x320e24,0xc9))[_0x4b2f('0x3e')](handleError(_0x320e24,null));};exports[_0x4b2f('0x22')]=function(_0x3b8a25,_0x562578){if(_0x3b8a25['body']['id']){delete _0x3b8a25[_0x4b2f('0x45')]['id'];}return db['UserProfile']['find']({'where':{'id':_0x3b8a25['params']['id']}})['then'](handleEntityNotFound(_0x562578,null))[_0x4b2f('0x23')](saveUpdates(_0x3b8a25[_0x4b2f('0x45')],null))[_0x4b2f('0x23')](respondWithResult(_0x562578,null))[_0x4b2f('0x3e')](handleError(_0x562578,null));};exports[_0x4b2f('0x56')]=function(_0x19a757,_0x33bde1){return db['UserProfile'][_0x4b2f('0x43')]({'where':{'id':_0x19a757['params']['id']}})['then'](handleEntityNotFound(_0x33bde1,null))['then'](removeEntity(_0x33bde1,null))[_0x4b2f('0x3e')](handleError(_0x33bde1,null));};exports[_0x4b2f('0x57')]=function(_0x245954,_0x151016){return db[_0x4b2f('0x29')]['describe']()[_0x4b2f('0x23')](respondWithResult(_0x151016,null))['catch'](handleError(_0x151016,null));};exports[_0x4b2f('0x58')]=function(_0x33b0a1,_0x34b40d){var _0x29dac3=_0x33b0a1[_0x4b2f('0x45')];return db['UserProfile'][_0x4b2f('0x43')]({'where':{'id':_0x33b0a1[_0x4b2f('0x40')]['id']}})[_0x4b2f('0x23')](handleEntityNotFound(_0x34b40d,null))[_0x4b2f('0x23')](function(_0x29e226){if(_0x29e226){return db[_0x4b2f('0x4b')][_0x4b2f('0x4c')](function(_0xf99b1f){return db[_0x4b2f('0x4e')]['destroy']({'where':{'userProfileId':_0x33b0a1[_0x4b2f('0x40')]['id'],'sectionId':_['map'](_0x29dac3,function(_0x594217){return _0x594217[_0x4b2f('0x59')];})},'transaction':_0xf99b1f})[_0x4b2f('0x23')](function(){var _0x51be2e=_[_0x4b2f('0x53')](_0x29dac3,function(_0x4830c8){_0x4830c8[_0x4b2f('0x54')]=_0x33b0a1[_0x4b2f('0x40')]['id'];return _0x4830c8;});var _0x147620=[];return BPromise[_0x4b2f('0x50')](_0x51be2e,function(_0x249360){return db[_0x4b2f('0x4e')][_0x4b2f('0x44')](_0x249360,{'include':[{'model':db[_0x4b2f('0x52')],'as':_0x4b2f('0x55')}],'raw':!![],'transaction':_0xf99b1f})[_0x4b2f('0x23')](function(_0x1eef7d){_0x147620[_0x4b2f('0x5a')](_0x1eef7d[_0x4b2f('0x4d')]({'plain':!![]}));});})[_0x4b2f('0x23')](function(){return _0x147620;});});});}})[_0x4b2f('0x23')](function(_0x1b5c03){return _0x1b5c03;})[_0x4b2f('0x23')](respondWithResult(_0x34b40d,null))[_0x4b2f('0x3e')](handleError(_0x34b40d,null));};exports['removeSections']=function(_0x411f21,_0x4ba4cd){var _0x96607e;return db[_0x4b2f('0x29')][_0x4b2f('0x43')]({'where':{'id':_0x411f21[_0x4b2f('0x40')]['id']},'attributes':['id',_0x4b2f('0x26')]})[_0x4b2f('0x23')](handleEntityNotFound(_0x4ba4cd,null))[_0x4b2f('0x23')](function(_0x44a215){if(_0x44a215){_0x96607e=_0x44a215;return db[_0x4b2f('0x4e')][_0x4b2f('0x56')]({'where':{'userProfileId':_0x411f21[_0x4b2f('0x40')]['id'],'sectionId':_0x411f21[_0x4b2f('0x2f')][_0x4b2f('0x5b')]}});}})[_0x4b2f('0x23')](function(){return _0x96607e;})[_0x4b2f('0x23')](respondWithStatusCode(_0x4ba4cd,null))[_0x4b2f('0x3e')](handleError(_0x4ba4cd,null));};exports[_0x4b2f('0x5c')]=function(_0x2474e3,_0x55fab3){return db[_0x4b2f('0x29')]['find']({'where':{'id':_0x2474e3[_0x4b2f('0x40')]['id']}})['then'](handleEntityNotFound(_0x55fab3,null))[_0x4b2f('0x23')](function(_0x3c4c25){if(_0x3c4c25){return db[_0x4b2f('0x4b')][_0x4b2f('0x4c')](function(_0x1e1039){return db[_0x4b2f('0x4e')][_0x4b2f('0x4f')]({'where':{'userProfileId':_0x2474e3[_0x4b2f('0x40')]['id']},'attributes':['id'],'raw':!![]})['then'](function(_0x4dfdbb){if(_0x4dfdbb){return db[_0x4b2f('0x4e')]['destroy']({'where':{'userProfileId':_0x2474e3['params']['id'],'id':_['map'](_0x4dfdbb,function(_0x28a4b9){return _0x28a4b9['id'];})},'transaction':_0x1e1039});}})[_0x4b2f('0x23')](function(_0x5c77c6){var _0x41fb21=_[_0x4b2f('0x53')](_0x2474e3['body'],function(_0x182d12){_0x182d12['userProfileId']=_0x2474e3[_0x4b2f('0x40')]['id'];return _0x182d12;});return db[_0x4b2f('0x4e')][_0x4b2f('0x5d')](_0x41fb21,{'raw':!![],'transaction':_0x1e1039});})[_0x4b2f('0x23')](function(_0x3d792e){var _0x387b05=_['filter'](_[_0x4b2f('0x53')](_0x3d792e,function(_0xc0a036){return _0xc0a036[_0x4b2f('0x4d')]({'plain':!![]});}),{'includeAll':![]});if(_0x387b05){return db[_0x4b2f('0x4e')][_0x4b2f('0x4f')]({'where':{'userProfileId':_0x2474e3['params']['id'],'sectionId':_[_0x4b2f('0x53')](_0x387b05,function(_0x28068d){return _0x28068d[_0x4b2f('0x59')];})},'attributes':['id','sectionId'],'raw':!![]})[_0x4b2f('0x23')](function(_0x411722){var _0x378773=_[_0x4b2f('0x53')](_0x2474e3[_0x4b2f('0x45')],function(_0x4594d4){_0x4594d4['userProfileId']=_0x2474e3['params']['id'];return _0x4594d4;});return db['UserProfileResource'][_0x4b2f('0x5d')](_0x378773,{'raw':!![],'transaction':_0x1e1039});});}})[_0x4b2f('0x3e')](handleError(_0x55fab3,null));});}})[_0x4b2f('0x23')](function(_0xab03e0){var _0x113de1=_[_0x4b2f('0x53')](_0xab03e0,function(_0xe9efab){return _0xe9efab[_0x4b2f('0x4d')]({'plain':!![]});});})[_0x4b2f('0x23')](respondWithResult(_0x55fab3,null))[_0x4b2f('0x3e')](handleError(_0x55fab3,null));};exports[_0x4b2f('0x5e')]=function(_0x18d09f,_0x3113ec,_0x438ccd){return db[_0x4b2f('0x29')][_0x4b2f('0x43')]({'where':{'id':_0x18d09f[_0x4b2f('0x40')]['id']}})['then'](handleEntityNotFound(_0x3113ec,null))[_0x4b2f('0x23')](function(_0x11e705){if(_0x11e705){return _0x11e705[_0x4b2f('0x5e')](_0x18d09f[_0x4b2f('0x2f')][_0x4b2f('0x5b')]);}})[_0x4b2f('0x23')](respondWithStatusCode(_0x3113ec,null))[_0x4b2f('0x3e')](handleError(_0x3113ec,null));};exports['getResources']=function(_0x3ba86a,_0x9a0181){var _0x53f183={'raw':![],'where':{}};var _0x47149e={};var _0x16fd86={'count':0x0,'rows':[]};var _0x873e1b=_0x3ba86a[_0x4b2f('0x2f')][_0x4b2f('0x5f')];if(typeof _0x873e1b===_0x4b2f('0x60')){throw new db[(_0x4b2f('0x61'))][(_0x4b2f('0x62'))](_0x4b2f('0x63'));}var _0x57d97e=_0x3ba86a[_0x4b2f('0x2f')][_0x4b2f('0x64')]||![];var _0xa17981=getQueryModels(_0x873e1b,_0x57d97e);if(typeof _0xa17981['childModel']===_0x4b2f('0x60')){throw new db['Sequelize'][(_0x4b2f('0x62'))](_0x4b2f('0x65')+_0x873e1b+'\x27');}var _0xe2845b=[];if(!_[_0x4b2f('0x66')](_0xa17981[_0x4b2f('0x67')])){_0xe2845b=_0xa17981['parentSections'];}else{_0xe2845b=[{'name':_0x873e1b}];}return db[_0x4b2f('0x29')][_0x4b2f('0x68')]({'where':{'id':_0x3ba86a['params']['id']}})['then'](handleEntityNotFound(_0x9a0181,null))['then'](function(_0x492bed){if(_0x492bed){var _0x424fd3=[];for(var _0x53822b=0x0;_0x53822b<_0xe2845b[_0x4b2f('0x42')];_0x53822b++){_0x424fd3[_0x4b2f('0x5a')](db[_0x4b2f('0x4e')]['findOne']({'where':{'userProfileId':_0x492bed['id'],'name':_0xe2845b[_0x53822b][_0x4b2f('0x26')]},'raw':!![]}));}return BPromise[_0x4b2f('0x69')](_0x424fd3);}})['then'](function(_0x12a0ed){var _0x58217d=_[_0x4b2f('0x35')](_0x12a0ed,function(_0x10fe91){return _0x10fe91?_0x10fe91:undefined;});var _0x59a27a=_[_0x4b2f('0x35')](_0xe2845b,[_0x4b2f('0x6a'),!![]]);var _0x5a8643=_[_0x4b2f('0x66')](_0x58217d)&&_[_0x4b2f('0x66')](_0x59a27a)?null:_[_0x4b2f('0x6b')](_0x59a27a,_0x58217d);if(_0x5a8643){var _0x1922fd=[];for(var _0x2a37ff=0x0;_0x2a37ff<_0x5a8643[_0x4b2f('0x42')];_0x2a37ff++){var _0x28df04=_[_0x4b2f('0x43')](_0xe2845b,function(_0x1b55ed){return _0x5a8643[_0x2a37ff]?_0x1b55ed[_0x4b2f('0x26')]===_0x5a8643[_0x2a37ff]['name']:null;});if(_0x28df04){if(_0x5a8643[_0x2a37ff][_0x4b2f('0x6a')]){_0x1922fd[_0x4b2f('0x5a')](getAllResources(_0xa17981[_0x4b2f('0x6c')],_0x5a8643[_0x2a37ff]));}else{if(!_0x5a8643[_0x2a37ff][_0x4b2f('0x51')]){_0x1922fd['push'](getAllowedResources(_0x28df04,_0x5a8643[_0x2a37ff],_0xa17981['childModel']));}else{if(_0x28df04[_0x4b2f('0x2c')]){_0x1922fd['push'](getAllFilteredResources(_0x28df04,_0x5a8643[_0x2a37ff]));}}}}}return BPromise[_0x4b2f('0x69')](_0x1922fd);}else{return null;}})[_0x4b2f('0x23')](function(_0x4eaec1){var _0xb74f72=_0x4eaec1;var _0x59cf32=null;if(_0xb74f72){_0x59cf32=_0xb74f72[_0x4b2f('0x42')]===0x1?_0xb74f72[0x0]:null;}if(_0x59cf32||_0xb74f72){var _0x4b7969=db[_0xa17981[_0x4b2f('0x6c')]]['rawAttributes'];_0x47149e[_0x4b2f('0x2c')]=_[_0x4b2f('0x2a')](_0x4b7969);_0x47149e[_0x4b2f('0x2f')]=_[_0x4b2f('0x2a')](_0x3ba86a[_0x4b2f('0x2f')]);_0x47149e[_0x4b2f('0x34')]=_[_0x4b2f('0x2b')](_0x47149e[_0x4b2f('0x2c')],_0x47149e[_0x4b2f('0x2f')]);_0x53f183[_0x4b2f('0x2d')]=_['intersection'](_0x47149e[_0x4b2f('0x2c')],qs['fields'](_0x3ba86a[_0x4b2f('0x2f')]['fields']));_0x53f183[_0x4b2f('0x2d')]=_0x53f183[_0x4b2f('0x2d')]['length']?_0x53f183[_0x4b2f('0x2d')]:_0x47149e[_0x4b2f('0x2c')];if(!_0x3ba86a['query'][_0x4b2f('0x30')](_0x4b2f('0x6d'))){_0x53f183[_0x4b2f('0x31')]=qs[_0x4b2f('0x31')](_0x3ba86a[_0x4b2f('0x2f')]['limit']);_0x53f183[_0x4b2f('0x1c')]=qs['offset'](_0x3ba86a['query']['offset']);}_0x53f183[_0x4b2f('0x32')]=qs[_0x4b2f('0x33')](_0x3ba86a[_0x4b2f('0x2f')]['sort']);_0x53f183[_0x4b2f('0x37')]=qs[_0x4b2f('0x34')](_['pick'](_0x3ba86a[_0x4b2f('0x2f')],_0x47149e[_0x4b2f('0x34')]));if(_0x3ba86a[_0x4b2f('0x2f')][_0x4b2f('0x35')]){_0x53f183[_0x4b2f('0x37')]=_[_0x4b2f('0x36')](_0x53f183[_0x4b2f('0x37')],{'$or':_[_0x4b2f('0x53')](_0x4b7969,function(_0x4e05af){if(_0x4e05af[_0x4b2f('0x6e')][_0x4b2f('0x6f')]!=='VIRTUAL'){var _0xd191c0={};_0xd191c0[_0x4e05af[_0x4b2f('0x39')]]={'$like':'%'+_0x3ba86a['query'][_0x4b2f('0x35')]+'%'};return _0xd191c0;}})});}var _0x1ae8f8=[];if(_0x59cf32){var _0x9ed8d4=_[_0x4b2f('0x43')](_0xe2845b,[_0x4b2f('0x26'),_0x59cf32[_0x4b2f('0x26')]]);if(_0x9ed8d4[_0x4b2f('0x39')]){var _0x498eb4={};if(_0xa17981[_0x4b2f('0x6c')]==='AnalyticExtractedReport'){_0x498eb4[_0x9ed8d4[_0x4b2f('0x70')]]=_[_0x4b2f('0x53')](_0x59cf32[_0x4b2f('0x71')],'id');}else{_0x498eb4[_0x9ed8d4[_0x4b2f('0x70')]]=_0x59cf32['associatedResources'];}_0x1ae8f8[_0x4b2f('0x5a')](_0x498eb4);}else{_0x53f183[_0x4b2f('0x37')]['id']=_0x59cf32[_0x4b2f('0x71')];}}else{for(var _0x54c659=0x0;_0x54c659<_0xb74f72[_0x4b2f('0x42')];_0x54c659++){var _0x9ed8d4=_[_0x4b2f('0x43')](_0xe2845b,[_0x4b2f('0x26'),_0xb74f72[_0x54c659]['name']]);if(_0x9ed8d4[_0x4b2f('0x39')]){var _0x498eb4={};_0x498eb4[_0x9ed8d4[_0x4b2f('0x70')]]=_0xb74f72[_0x54c659][_0x4b2f('0x71')];_0x1ae8f8[_0x4b2f('0x5a')](_0x498eb4);}else{if(!_0x53f183[_0x4b2f('0x37')]['id'])_0x53f183[_0x4b2f('0x37')]['id']=[];_0xb74f72[_0x54c659][_0x4b2f('0x71')][_0x4b2f('0x72')](function(_0xb7996b){_0x53f183[_0x4b2f('0x37')]['id']['push'](_0xb7996b);});}}}if(!_[_0x4b2f('0x66')](_0x1ae8f8)){_0x53f183[_0x4b2f('0x37')]=_[_0x4b2f('0x36')](_0x53f183[_0x4b2f('0x37')],{'$and':{'$or':_0x1ae8f8}});}_0x53f183=_[_0x4b2f('0x36')]({},_0x53f183,_0x3ba86a[_0x4b2f('0x3a')]);if(_0x59cf32&&!_0x59cf32[_0x4b2f('0x51')]&&_0xa17981[_0x4b2f('0x6c')]==='AnalyticExtractedReport'){if(_0x3ba86a[_0x4b2f('0x2f')][_0x4b2f('0x47')]){_0x53f183[_0x4b2f('0x3c')]=[{'all':!![]}];}return db[_0xa17981[_0x4b2f('0x6c')]][_0x4b2f('0x4f')](_0x53f183)[_0x4b2f('0x23')](function(_0x2dbef4){var _0x25ec91=[];_0x2dbef4[_0x4b2f('0x72')](function(_0x1471ed){var _0x30ce19;switch(_0x1471ed['reportType']){case _0x4b2f('0x73'):_0x30ce19=_[_0x4b2f('0x43')](_0x59cf32[_0x4b2f('0x71')],function(_0x2bea5f){return _0x2bea5f['id']===_0x1471ed['reportId']&&_0x2bea5f[_0x4b2f('0x6e')]===_0x4b2f('0x74');});break;case _0x4b2f('0x75'):_0x30ce19=_[_0x4b2f('0x43')](_0x59cf32[_0x4b2f('0x71')],function(_0x433ac7){return _0x433ac7['id']===_0x1471ed['reportId']&&_0x433ac7[_0x4b2f('0x6e')]==='CustomReports';});break;}if(_0x30ce19)_0x25ec91['push'](_0x1471ed);});_0x16fd86[_0x4b2f('0x3b')]=_0x25ec91['length'];_0x16fd86['rows']=_0x25ec91;return _0x16fd86;});}else{return db[_0xa17981[_0x4b2f('0x6c')]][_0x4b2f('0x3b')]({'where':_0x53f183[_0x4b2f('0x37')]})[_0x4b2f('0x23')](function(_0x20a69a){_0x16fd86['count']=_0x20a69a;if(_0x3ba86a[_0x4b2f('0x2f')][_0x4b2f('0x47')]){if(_0xa17981['childModel']===_0x4b2f('0x76')){_0x53f183[_0x4b2f('0x3c')]=[{'model':db[_0x4b2f('0x77')],'as':_0x4b2f('0x78'),'attributes':['id',_0x4b2f('0x26'),'color'],'required':_0x3ba86a['query'][_0x4b2f('0x79')]?!![]:![]},{'model':db[_0x4b2f('0x77')],'as':_0x4b2f('0x7a'),'attributes':['id','name',_0x4b2f('0x7b')],'through':_0x3ba86a[_0x4b2f('0x2f')]['tag']?{'attributes':[],'where':{'TagId':_0x3ba86a[_0x4b2f('0x2f')]['tag']||undefined}}:{},'required':_0x3ba86a['query']['tag']?!![]:![]}];}else{_0x53f183[_0x4b2f('0x3c')]=[{'all':!![]}];}}return db[_0xa17981[_0x4b2f('0x6c')]][_0x4b2f('0x4f')](_0x53f183);})['then'](function(_0x5ddbd2){_0x16fd86[_0x4b2f('0x3d')]=_0x5ddbd2;return _0x16fd86;});}}else{return _0x16fd86;}})['then'](respondWithFilteredResult(_0x9a0181,_0x53f183))[_0x4b2f('0x3e')](handleError(_0x9a0181,null));};function getAllResources(_0x5878d9,_0x386b5a){return new BPromise(function(_0x3a23aa,_0x45eec2){if(_0x386b5a){var _0x1dd328=_0x386b5a['filter']?{[_0x386b5a[_0x4b2f('0x35')][_0x4b2f('0x39')]]:_0x386b5a[_0x4b2f('0x35')][_0x4b2f('0x7c')]}:undefined;return db[_0x5878d9][_0x4b2f('0x4f')]({'where':_0x1dd328,'raw':!![]})[_0x4b2f('0x23')](function(_0x4248e6){_0x386b5a[_0x4b2f('0x71')]=_[_0x4b2f('0x53')](_0x4248e6,'id');_0x3a23aa(_0x386b5a);})[_0x4b2f('0x3e')](function(_0x264808){_0x45eec2(_0x264808);});}else{_0x3a23aa(null);}});}function getAllFilteredResources(_0xf3b46a,_0x287bc0){return new BPromise(function(_0x3500fc,_0x9907a9){var _0x5147e2=_0xf3b46a[_0x4b2f('0x35')]?{[_0xf3b46a[_0x4b2f('0x35')][_0x4b2f('0x39')]]:_0xf3b46a['filter'][_0x4b2f('0x7c')]}:undefined;return db[_0xf3b46a[_0x4b2f('0x2c')]][_0x4b2f('0x4f')]({'where':_0x5147e2,'raw':!![]})['then'](function(_0x29d34c){_0x287bc0[_0x4b2f('0x71')]=_[_0x4b2f('0x53')](_0x29d34c,function(_0xd7eadc){return _0xd7eadc[_0x4b2f('0x26')];});_0x3500fc(_0x287bc0);})[_0x4b2f('0x3e')](function(_0x26f5b6){_0x9907a9(_0x26f5b6);});});}function getAllowedResources(_0x32ca12,_0x56c810,_0x49dbfc){return new BPromise(function(_0x5254e4,_0x4639d3){if(_0x56c810){return db[_0x4b2f('0x52')][_0x4b2f('0x4f')]({'where':{'sectionId':_0x56c810['id']},'raw':!![]})['then'](function(_0x47f75c){if(_0x32ca12['field']&&_0x32ca12['field']!=='id'){_0x56c810[_0x4b2f('0x71')]=_[_0x4b2f('0x53')](_0x47f75c,function(_0xfe3595){return _0xfe3595[_0x32ca12[_0x4b2f('0x39')]];});}else{if(_0x49dbfc==='AnalyticExtractedReport'){_0x56c810[_0x4b2f('0x71')]=_[_0x4b2f('0x53')](_0x47f75c,function(_0x825448){return{'id':_0x825448[_0x4b2f('0x7d')],'type':_0x825448[_0x4b2f('0x6e')]};});}else{_0x56c810['associatedResources']=_['map'](_0x47f75c,function(_0x2fc3a1){return _0x2fc3a1[_0x4b2f('0x7d')];});}}_0x5254e4(_0x56c810);})[_0x4b2f('0x3e')](function(_0x15b533){_0x4639d3(_0x15b533);});}else{_0x5254e4(null);}});}function getQueryModels(_0x5f52e9,_0x1c0ad0){var _0x2db1e6=_0x5f52e9[_0x4b2f('0x7e')]();var _0x231a37={'childModel':undefined,'parentSections':[]};switch(_0x2db1e6){case _0x4b2f('0x7f'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x80');break;case _0x4b2f('0x81'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x82');break;case _0x4b2f('0x83'):_0x231a37[_0x4b2f('0x6c')]='SquareRecording';_0x231a37[_0x4b2f('0x67')]=[{'name':_0x4b2f('0x84'),'field':'name','foreignKey':_0x4b2f('0x85')}];break;case'projects':_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x86');break;case _0x4b2f('0x87'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x76');_0x231a37['parentSections']=[{'name':_0x4b2f('0x88'),'field':'id','foreignKey':_0x4b2f('0x89')}];break;case'lists':_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x8a');break;case'companies':_0x231a37['childModel']=_0x4b2f('0x8b');break;case _0x4b2f('0x8c'):_0x231a37[_0x4b2f('0x6c')]='CmCustomField';break;case'chatqueues':_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x8d');break;case'chatwebsites':_0x231a37[_0x4b2f('0x6c')]='ChatWebsite';break;case _0x4b2f('0x8e'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x8f');break;case'faxaccounts':_0x231a37[_0x4b2f('0x6c')]='FaxAccount';break;case _0x4b2f('0x90'):case _0x4b2f('0x91'):case _0x4b2f('0x92'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x93');break;case _0x4b2f('0x94'):_0x231a37['childModel']=_0x4b2f('0x95');break;case'voicemails':_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x96');break;case'voicerecordings':_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x97');_0x231a37[_0x4b2f('0x67')]=[{'name':'Agents','field':_0x4b2f('0x26'),'foreignKey':_0x4b2f('0x98'),'model':_0x4b2f('0x99'),'filter':{'field':_0x4b2f('0x9a'),'value':[_0x4b2f('0x9b')]}},{'name':_0x4b2f('0x9c'),'field':_0x4b2f('0x26'),'foreignKey':_0x4b2f('0x98'),'model':_0x4b2f('0x99'),'filter':{'field':_0x4b2f('0x9a'),'value':[_0x4b2f('0x9d')]}},{'name':'VoiceQueues','field':_0x4b2f('0x26'),'foreignKey':'queue','model':_0x4b2f('0x9e'),'filter':{'field':_0x4b2f('0x6e'),'value':['inbound']}},{'name':_0x4b2f('0x9f'),'field':_0x4b2f('0x26'),'foreignKey':_0x4b2f('0xa0'),'model':_0x4b2f('0x9e'),'filter':{'field':_0x4b2f('0x6e'),'value':[_0x4b2f('0xa1')]}}];break;case _0x4b2f('0xa2'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xa3');break;case _0x4b2f('0xa4'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xa5');break;case _0x4b2f('0xa6'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xa7');break;case'ivrcampaigns':_0x231a37['childModel']=_0x4b2f('0xa8');break;case'mailqueues':_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xa9');break;case _0x4b2f('0xaa'):_0x231a37[_0x4b2f('0x6c')]='MailAccount';break;case _0x4b2f('0xab'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xac');break;case _0x4b2f('0xad'):_0x231a37['childModel']=_0x4b2f('0xae');break;case _0x4b2f('0xaf'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xb0');break;case'smsqueues':_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xb1');break;case'smsaccounts':_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xb2');break;case _0x4b2f('0xb3'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xb4');break;case _0x4b2f('0xb5'):case _0x4b2f('0xb6'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x9e');if(_0x1c0ad0){_0x231a37[_0x4b2f('0x67')]=[{'name':_0x4b2f('0xb7')},{'name':_0x4b2f('0x9f')}];}break;case _0x4b2f('0xb8'):case'agents':case _0x4b2f('0xb9'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x99');if(_0x1c0ad0){_0x231a37[_0x4b2f('0x67')]=[{'name':_0x4b2f('0xba'),'filter':{'field':_0x4b2f('0x9a'),'value':[_0x4b2f('0xbb'),_0x4b2f('0xbc')]},'ignore':!![]},{'name':_0x4b2f('0xbd')},{'name':_0x4b2f('0x9c')}];}break;case'zendeskaccounts':_0x231a37[_0x4b2f('0x6c')]='ZendeskAccount';break;case _0x4b2f('0xbe'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xbf');break;case _0x4b2f('0xc0'):_0x231a37['childModel']=_0x4b2f('0xc1');break;case _0x4b2f('0xc2'):_0x231a37['childModel']=_0x4b2f('0xc3');break;case _0x4b2f('0xc4'):_0x231a37[_0x4b2f('0x6c')]='DeskAccount';break;case _0x4b2f('0xc5'):_0x231a37[_0x4b2f('0x6c')]='ZohoAccount';break;case _0x4b2f('0xc6'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x99');break;case'cannedanswers':_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xc7');break;case _0x4b2f('0xc8'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xc9');break;case _0x4b2f('0xca'):_0x231a37[_0x4b2f('0x6c')]='Dashboard';break;case _0x4b2f('0xcb'):_0x231a37[_0x4b2f('0x6c')]='Interval';break;case _0x4b2f('0xcc'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xcd');break;case _0x4b2f('0xce'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xcf');break;case'sounds':_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xd0');break;case _0x4b2f('0xd1'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0x77');break;case _0x4b2f('0xd2'):_0x231a37[_0x4b2f('0x6c')]='Template';break;case _0x4b2f('0xd3'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xd4');break;case _0x4b2f('0xd5'):_0x231a37[_0x4b2f('0x6c')]='Trunk';break;case _0x4b2f('0xd6'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xd7');break;case'plugins':_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xd8');break;case _0x4b2f('0xd9'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xda');_0x231a37['parentSections']=[{'name':_0x4b2f('0xdb'),'field':'id','foreignKey':_0x4b2f('0xdc')}];break;case _0x4b2f('0xdd'):_0x231a37[_0x4b2f('0x6c')]=_0x4b2f('0xde');break;default:return _0x231a37;}return _0x231a37;}
\ No newline at end of file
+var _0x78dd=['Variable','Plugin','extractedreports','Reports','metrics','AnalyticMetric','html-pdf','rimraf','zip-dir','request-promise','moment','mustache','path','sox','to-csv','ejs','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../mysqldb','redis','localhost','socket.io-emitter','register','status','end','count','offset','limit','Content-Range','json','apply','reject','save','then','destroy','error','stack','name','send','UserProfile','rawAttributes','keys','query','filters','intersection','model','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','fields','find','create','body','clone','get','omit','createdAt','updatedAt','crudPermissions','sequelize','transaction','UserProfileSection','autoAssociation','UserProfileResource','map','userProfileId','Resources','describe','addSections','sectionId','each','push','removeSections','addResources','bulkCreate','removeResources','getResources','section','Sequelize','ValidationError','Unknown\x20section','mergeResources','childModel','isEmpty','parentSections','findOne','all','union','ignore','AnalyticExtractedReport','associatedResources','foreignKey','forEach','reportType','default','type','DefaultReports','custom','reportId','CustomReports','CmContact','Tags','color','tag','Tag','ThroughTags','value','resourceId','toLowerCase','SquareProject','odbc','squarerecordings','SquareProjects','projects','contacts','lists','globalcustomfields','CmCustomField','chatqueues','ChatQueue','chatwebsites','ChatWebsite','faxqueues','FaxQueue','faxaccounts','inboundroutes','internalroutes','VoiceExtension','VoiceContext','voicemails','VoiceMail','voicerecordings','agent','role','telephone','VoiceQueues','queue','inbound','QueueCampaigns','VoiceQueue','outbound','musiconholds','VoiceMusicOnHold','chanspies','VoiceChanSpy','VoicePrefix','ivrcampaigns','Campaign','mailqueues','mailaccounts','MailAccount','mailsubstatuses','MailSubstatus','OpenchannelQueue','openchannelaccounts','OpenchannelAccount','smsqueues','smsaccounts','SmsAccount','teams','voicequeues','queuecampaigns','users','agents','User','Users','admin','Agents','ZendeskAccount','salesforceaccounts','freshdeskaccounts','sugarcrmaccounts','SugarcrmAccount','deskaccounts','DeskAccount','vtigeraccounts','cannedanswers','CannedAnswer','Disposition','customdashboards','intervals','Interval','pauses','Pause','scheduler','Schedule','sounds','tags','templates','Template','triggers','Trigger','trunks','Trunk','variables'];(function(_0x256c5a,_0x309f7e){var _0xf62598=function(_0xa88896){while(--_0xa88896){_0x256c5a['push'](_0x256c5a['shift']());}};_0xf62598(++_0x309f7e);}(_0x78dd,0x1c0));var _0xd78d=function(_0x12ca5f,_0x223d98){_0x12ca5f=_0x12ca5f-0x0;var _0xfc3ae9=_0x78dd[_0x12ca5f];return _0xfc3ae9;};'use strict';var pdf=require(_0xd78d('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xd78d('0x1'));var zipdir=require(_0xd78d('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xd78d('0x3'));var moment=require(_0xd78d('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xd78d('0x5'));var util=require('util');var path=require(_0xd78d('0x6'));var sox=require(_0xd78d('0x7'));var csv=require(_0xd78d('0x8'));var ejs=require(_0xd78d('0x9'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xd78d('0xa'));var jsforce=require(_0xd78d('0xb'));var deskjs=require(_0xd78d('0xc'));var toCsv=require(_0xd78d('0x8'));var querystring=require(_0xd78d('0xd'));var Papa=require(_0xd78d('0xe'));var Redis=require(_0xd78d('0xf'));var authService=require(_0xd78d('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xd78d('0x11'));var logger=require('../../config/logger')(_0xd78d('0x12'));var utils=require(_0xd78d('0x13'));var config=require('../../config/environment');var db=require(_0xd78d('0x14'))['db'];config[_0xd78d('0x15')]=_['defaults'](config['redis'],{'host':_0xd78d('0x16'),'port':0x18eb});var socket=require(_0xd78d('0x17'))(new Redis(config['redis']));require('./userProfile.socket')[_0xd78d('0x18')](socket);function respondWithStatusCode(_0x444f1d,_0x57b556){_0x57b556=_0x57b556||0xcc;return function(_0x102837){if(_0x102837){return _0x444f1d['sendStatus'](_0x57b556);}return _0x444f1d[_0xd78d('0x19')](_0x57b556)[_0xd78d('0x1a')]();};}function respondWithResult(_0x3d614d,_0x1a61f8){_0x1a61f8=_0x1a61f8||0xc8;return function(_0x573d4){if(_0x573d4){return _0x3d614d[_0xd78d('0x19')](_0x1a61f8)['json'](_0x573d4);}};}function respondWithFilteredResult(_0x25aa96,_0x5d5a80){return function(_0x420191){if(_0x420191){var _0x296aa1=_0x420191[_0xd78d('0x1b')],_0x233390=_0x5d5a80[_0xd78d('0x1c')],_0x1ec28e=_0x5d5a80[_0xd78d('0x1c')]+_0x5d5a80[_0xd78d('0x1d')],_0x58f28f;if(_0x1ec28e>=_0x296aa1){_0x1ec28e=_0x296aa1;_0x58f28f=0xc8;}else{_0x58f28f=0xce;}_0x25aa96['status'](_0x58f28f);return _0x25aa96['set'](_0xd78d('0x1e'),_0x233390+'-'+_0x1ec28e+'/'+_0x296aa1)[_0xd78d('0x1f')](_0x420191);}return null;};}function patchUpdates(_0x59fbcc){return function(_0x408faa){try{jsonpatch[_0xd78d('0x20')](_0x408faa,_0x59fbcc,!![]);}catch(_0x23d6f2){return BPromise[_0xd78d('0x21')](_0x23d6f2);}return _0x408faa[_0xd78d('0x22')]();};}function saveUpdates(_0xec4c61,_0x1bc2a8){return function(_0x440403){if(_0x440403){return _0x440403['update'](_0xec4c61)[_0xd78d('0x23')](function(_0x2db0b2){return _0x2db0b2;});}return null;};}function removeEntity(_0xdc85c2,_0x26bf4c){return function(_0x527952){if(_0x527952){return _0x527952[_0xd78d('0x24')]()[_0xd78d('0x23')](function(){_0xdc85c2[_0xd78d('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x2eb795,_0x35c574){return function(_0x14672e){if(!_0x14672e){_0x2eb795['sendStatus'](0x194);}return _0x14672e;};}function handleError(_0x40049a,_0x57bafc){_0x57bafc=_0x57bafc||0x1f4;return function(_0x42c545){logger[_0xd78d('0x25')](_0x42c545[_0xd78d('0x26')]);if(_0x42c545[_0xd78d('0x27')]){delete _0x42c545[_0xd78d('0x27')];}_0x40049a[_0xd78d('0x19')](_0x57bafc)[_0xd78d('0x28')](_0x42c545);};}exports['index']=function(_0x2bece8,_0x412b9d){var _0x2a6369={},_0x259ed8={},_0x286a84={'count':0x0,'rows':[]};var _0x3882b7=db[_0xd78d('0x29')][_0xd78d('0x2a')];_0x259ed8['model']=_[_0xd78d('0x2b')](_0x3882b7);_0x259ed8[_0xd78d('0x2c')]=_[_0xd78d('0x2b')](_0x2bece8[_0xd78d('0x2c')]);_0x259ed8[_0xd78d('0x2d')]=_[_0xd78d('0x2e')](_0x259ed8[_0xd78d('0x2f')],_0x259ed8[_0xd78d('0x2c')]);_0x2a6369[_0xd78d('0x30')]=_[_0xd78d('0x2e')](_0x259ed8[_0xd78d('0x2f')],qs['fields'](_0x2bece8[_0xd78d('0x2c')]['fields']));_0x2a6369[_0xd78d('0x30')]=_0x2a6369[_0xd78d('0x30')][_0xd78d('0x31')]?_0x2a6369[_0xd78d('0x30')]:_0x259ed8['model'];if(!_0x2bece8[_0xd78d('0x2c')][_0xd78d('0x32')](_0xd78d('0x33'))){_0x2a6369[_0xd78d('0x1d')]=qs[_0xd78d('0x1d')](_0x2bece8['query'][_0xd78d('0x1d')]);_0x2a6369[_0xd78d('0x1c')]=qs[_0xd78d('0x1c')](_0x2bece8[_0xd78d('0x2c')][_0xd78d('0x1c')]);}_0x2a6369[_0xd78d('0x34')]=qs['sort'](_0x2bece8['query'][_0xd78d('0x35')]);_0x2a6369[_0xd78d('0x36')]=qs['filters'](_[_0xd78d('0x37')](_0x2bece8[_0xd78d('0x2c')],_0x259ed8[_0xd78d('0x2d')]));if(_0x2bece8[_0xd78d('0x2c')][_0xd78d('0x38')]){_0x2a6369[_0xd78d('0x36')]=_[_0xd78d('0x39')](_0x2a6369[_0xd78d('0x36')],{'$or':_['map'](_0x3882b7,function(_0x47b587){if(_0x47b587['type'][_0xd78d('0x3a')]!==_0xd78d('0x3b')){var _0x6ce30d={};_0x6ce30d[_0x47b587[_0xd78d('0x3c')]]={'$like':'%'+_0x2bece8[_0xd78d('0x2c')]['filter']+'%'};return _0x6ce30d;}})});}_0x2a6369=_[_0xd78d('0x39')]({},_0x2a6369,_0x2bece8[_0xd78d('0x3d')]);var _0x21f0a4={'where':_0x2a6369[_0xd78d('0x36')]};return db[_0xd78d('0x29')]['count'](_0x21f0a4)[_0xd78d('0x23')](function(_0x5eb073){_0x286a84['count']=_0x5eb073;if(_0x2bece8[_0xd78d('0x2c')][_0xd78d('0x3e')]){_0x2a6369[_0xd78d('0x3f')]=[{'all':!![]}];}return db[_0xd78d('0x29')][_0xd78d('0x40')](_0x2a6369);})[_0xd78d('0x23')](function(_0x2ce03f){_0x286a84[_0xd78d('0x41')]=_0x2ce03f;return _0x286a84;})[_0xd78d('0x23')](respondWithFilteredResult(_0x412b9d,_0x2a6369))[_0xd78d('0x42')](handleError(_0x412b9d,null));};exports[_0xd78d('0x43')]=function(_0x1d6da7,_0x451395){var _0x345c35={'raw':![],'where':{'id':_0x1d6da7[_0xd78d('0x44')]['id']}},_0x57ed78={};_0x57ed78[_0xd78d('0x2f')]=_['keys'](db[_0xd78d('0x29')][_0xd78d('0x2a')]);_0x57ed78[_0xd78d('0x2c')]=_[_0xd78d('0x2b')](_0x1d6da7['query']);_0x57ed78[_0xd78d('0x2d')]=_[_0xd78d('0x2e')](_0x57ed78[_0xd78d('0x2f')],_0x57ed78['query']);_0x345c35[_0xd78d('0x30')]=_[_0xd78d('0x2e')](_0x57ed78[_0xd78d('0x2f')],qs[_0xd78d('0x45')](_0x1d6da7[_0xd78d('0x2c')]['fields']));_0x345c35['attributes']=_0x345c35[_0xd78d('0x30')][_0xd78d('0x31')]?_0x345c35[_0xd78d('0x30')]:_0x57ed78[_0xd78d('0x2f')];if(_0x1d6da7[_0xd78d('0x2c')][_0xd78d('0x3e')]){_0x345c35[_0xd78d('0x3f')]=[{'all':!![]}];}_0x345c35=_['merge']({},_0x345c35,_0x1d6da7[_0xd78d('0x3d')]);return db[_0xd78d('0x29')][_0xd78d('0x46')](_0x345c35)[_0xd78d('0x23')](handleEntityNotFound(_0x451395,null))[_0xd78d('0x23')](respondWithResult(_0x451395,null))['catch'](handleError(_0x451395,null));};exports[_0xd78d('0x47')]=function(_0x41d1e3,_0xb832ea){return db['UserProfile'][_0xd78d('0x47')](_0x41d1e3[_0xd78d('0x48')],{})[_0xd78d('0x23')](respondWithResult(_0xb832ea,0xc9))['catch'](handleError(_0xb832ea,null));};exports[_0xd78d('0x49')]=function(_0x3819f0,_0x41f183){var _0x401f27={'raw':![],'where':{'id':_0x3819f0[_0xd78d('0x44')]['id']}},_0x425de3={};_0x425de3[_0xd78d('0x2f')]=_[_0xd78d('0x2b')](db[_0xd78d('0x29')][_0xd78d('0x2a')]);_0x401f27['attributes']=_[_0xd78d('0x2e')](_0x425de3[_0xd78d('0x2f')],qs[_0xd78d('0x45')](_0x3819f0['query'][_0xd78d('0x45')]));_0x401f27[_0xd78d('0x30')]=_0x401f27[_0xd78d('0x30')][_0xd78d('0x31')]?_0x401f27['attributes']:_0x425de3['model'];if(_0x3819f0[_0xd78d('0x2c')][_0xd78d('0x3e')]){_0x401f27[_0xd78d('0x3f')]=[{'all':!![]}];}_0x401f27=_['merge']({},_0x401f27,_0x3819f0[_0xd78d('0x3d')]);return db['UserProfile'][_0xd78d('0x46')](_0x401f27)['then'](handleEntityNotFound(_0x41f183,null))[_0xd78d('0x23')](function(_0xff41e3){if(_0xff41e3){var _0x2c3fca=_0xff41e3[_0xd78d('0x4a')]({'plain':!![]});_0x2c3fca=qs[_0xd78d('0x4b')](_0x2c3fca,['id',_0xd78d('0x4c'),_0xd78d('0x4d'),_0xd78d('0x4e')]);_0x3819f0[_0xd78d('0x48')]=_[_0xd78d('0x4b')](_0x3819f0['body'],['id',_0xd78d('0x4c'),'updatedAt']);return db[_0xd78d('0x4f')][_0xd78d('0x50')](function(_0x27b31e){return db['UserProfile'][_0xd78d('0x47')](_['merge'](_0x2c3fca,_0x3819f0['body']),{'include':_0x3819f0[_0xd78d('0x2c')][_0xd78d('0x3e')]?[{'all':!![]}]:undefined,'transaction':_0x27b31e})['then'](function(_0x28abc2){var _0x103c77=_0x28abc2[_0xd78d('0x4a')]({'plain':!![]});return db[_0xd78d('0x51')][_0xd78d('0x40')]({'where':{'userProfileId':_0x3819f0[_0xd78d('0x44')]['id']},'raw':!![]})[_0xd78d('0x23')](function(_0x1aadc7){if(_0x1aadc7){return BPromise['each'](_0x1aadc7,function(_0x50299d){return new BPromise(function(_0x4ae597,_0x11eb9f){if(_0x50299d[_0xd78d('0x52')]===null||_0x50299d[_0xd78d('0x52')]===0x1)_0x4ae597(null);return db[_0xd78d('0x53')][_0xd78d('0x40')]({'where':{'sectionId':_0x50299d['id']},'raw':!![]})[_0xd78d('0x23')](function(_0x2edac4){var _0x5d1f4c=_[_0xd78d('0x54')](_0x2edac4,function(_0x4b3579){return qs['omit'](_0x4b3579,['id',_0xd78d('0x4c'),_0xd78d('0x4d'),'sectionId']);});_0x4ae597(_0x5d1f4c);})['catch'](function(_0xabf3d4){_0x11eb9f(_0xabf3d4);});})[_0xd78d('0x23')](function(_0x283053){var _0x3ca640=qs['omit'](_0x50299d,['id','createdAt','updatedAt']);_0x3ca640[_0xd78d('0x55')]=_0x103c77['id'];if(_0x283053)_0x3ca640[_0xd78d('0x56')]=_0x283053;return _0x3ca640;})[_0xd78d('0x23')](function(_0x49ddc0){return db[_0xd78d('0x51')]['create'](_0x49ddc0,{'include':[{'model':db[_0xd78d('0x53')],'as':_0xd78d('0x56')}],'raw':!![],'transaction':_0x27b31e});});})[_0xd78d('0x23')](function(){return _0x103c77;});}});});});}})[_0xd78d('0x23')](respondWithResult(_0x41f183,0xc9))[_0xd78d('0x42')](handleError(_0x41f183,null));};exports['update']=function(_0x41958b,_0x58c7df){if(_0x41958b[_0xd78d('0x48')]['id']){delete _0x41958b['body']['id'];}return db['UserProfile']['find']({'where':{'id':_0x41958b[_0xd78d('0x44')]['id']}})[_0xd78d('0x23')](handleEntityNotFound(_0x58c7df,null))[_0xd78d('0x23')](saveUpdates(_0x41958b[_0xd78d('0x48')],null))[_0xd78d('0x23')](respondWithResult(_0x58c7df,null))[_0xd78d('0x42')](handleError(_0x58c7df,null));};exports['destroy']=function(_0x3ab606,_0x83f116){return db['UserProfile'][_0xd78d('0x46')]({'where':{'id':_0x3ab606[_0xd78d('0x44')]['id']}})[_0xd78d('0x23')](handleEntityNotFound(_0x83f116,null))[_0xd78d('0x23')](removeEntity(_0x83f116,null))[_0xd78d('0x42')](handleError(_0x83f116,null));};exports[_0xd78d('0x57')]=function(_0x3a9db1,_0x235bcd){return db[_0xd78d('0x29')][_0xd78d('0x57')]()[_0xd78d('0x23')](respondWithResult(_0x235bcd,null))[_0xd78d('0x42')](handleError(_0x235bcd,null));};exports[_0xd78d('0x58')]=function(_0x37a0aa,_0x47feeb){var _0x2fbfe0=_0x37a0aa['body'];return db[_0xd78d('0x29')][_0xd78d('0x46')]({'where':{'id':_0x37a0aa[_0xd78d('0x44')]['id']}})['then'](handleEntityNotFound(_0x47feeb,null))[_0xd78d('0x23')](function(_0x167ad5){if(_0x167ad5){return db[_0xd78d('0x4f')]['transaction'](function(_0x24b83b){return db[_0xd78d('0x51')][_0xd78d('0x24')]({'where':{'userProfileId':_0x37a0aa['params']['id'],'sectionId':_[_0xd78d('0x54')](_0x2fbfe0,function(_0x1d18ee){return _0x1d18ee[_0xd78d('0x59')];})},'transaction':_0x24b83b})[_0xd78d('0x23')](function(){var _0x5e57e2=_['map'](_0x2fbfe0,function(_0xb748f5){_0xb748f5[_0xd78d('0x55')]=_0x37a0aa[_0xd78d('0x44')]['id'];return _0xb748f5;});var _0x3615a4=[];return BPromise[_0xd78d('0x5a')](_0x5e57e2,function(_0x221499){return db[_0xd78d('0x51')][_0xd78d('0x47')](_0x221499,{'include':[{'model':db[_0xd78d('0x53')],'as':_0xd78d('0x56')}],'raw':!![],'transaction':_0x24b83b})[_0xd78d('0x23')](function(_0xdab9e7){_0x3615a4[_0xd78d('0x5b')](_0xdab9e7[_0xd78d('0x4a')]({'plain':!![]}));});})[_0xd78d('0x23')](function(){return _0x3615a4;});});});}})[_0xd78d('0x23')](function(_0x28257f){return _0x28257f;})[_0xd78d('0x23')](respondWithResult(_0x47feeb,null))[_0xd78d('0x42')](handleError(_0x47feeb,null));};exports[_0xd78d('0x5c')]=function(_0x3694ec,_0x62621b){var _0x131c64;return db[_0xd78d('0x29')][_0xd78d('0x46')]({'where':{'id':_0x3694ec[_0xd78d('0x44')]['id']},'attributes':['id','name']})['then'](handleEntityNotFound(_0x62621b,null))[_0xd78d('0x23')](function(_0xa1adab){if(_0xa1adab){_0x131c64=_0xa1adab;return db['UserProfileSection']['destroy']({'where':{'userProfileId':_0x3694ec['params']['id'],'sectionId':_0x3694ec['query']['ids']}});}})[_0xd78d('0x23')](function(){return _0x131c64;})[_0xd78d('0x23')](respondWithStatusCode(_0x62621b,null))[_0xd78d('0x42')](handleError(_0x62621b,null));};exports[_0xd78d('0x5d')]=function(_0x297010,_0x5f170c){return db[_0xd78d('0x29')]['find']({'where':{'id':_0x297010[_0xd78d('0x44')]['id']}})[_0xd78d('0x23')](handleEntityNotFound(_0x5f170c,null))[_0xd78d('0x23')](function(_0x1304c4){if(_0x1304c4){return db[_0xd78d('0x4f')][_0xd78d('0x50')](function(_0x14ed7c){return db['UserProfileSection'][_0xd78d('0x40')]({'where':{'userProfileId':_0x297010['params']['id']},'attributes':['id'],'raw':!![]})[_0xd78d('0x23')](function(_0x33b4c4){if(_0x33b4c4){return db[_0xd78d('0x51')][_0xd78d('0x24')]({'where':{'userProfileId':_0x297010[_0xd78d('0x44')]['id'],'id':_[_0xd78d('0x54')](_0x33b4c4,function(_0x19eaab){return _0x19eaab['id'];})},'transaction':_0x14ed7c});}})['then'](function(_0x240396){var _0x10bc9c=_['map'](_0x297010[_0xd78d('0x48')],function(_0x529118){_0x529118['userProfileId']=_0x297010[_0xd78d('0x44')]['id'];return _0x529118;});return db[_0xd78d('0x51')][_0xd78d('0x5e')](_0x10bc9c,{'raw':!![],'transaction':_0x14ed7c});})[_0xd78d('0x23')](function(_0x2e672a){var _0x147636=_['filter'](_[_0xd78d('0x54')](_0x2e672a,function(_0x12cba1){return _0x12cba1[_0xd78d('0x4a')]({'plain':!![]});}),{'includeAll':![]});if(_0x147636){return db[_0xd78d('0x51')][_0xd78d('0x40')]({'where':{'userProfileId':_0x297010['params']['id'],'sectionId':_['map'](_0x147636,function(_0x4e3bfc){return _0x4e3bfc[_0xd78d('0x59')];})},'attributes':['id',_0xd78d('0x59')],'raw':!![]})['then'](function(_0x44643c){var _0xb255d1=_[_0xd78d('0x54')](_0x297010[_0xd78d('0x48')],function(_0x5ee681){_0x5ee681[_0xd78d('0x55')]=_0x297010[_0xd78d('0x44')]['id'];return _0x5ee681;});return db[_0xd78d('0x53')][_0xd78d('0x5e')](_0xb255d1,{'raw':!![],'transaction':_0x14ed7c});});}})[_0xd78d('0x42')](handleError(_0x5f170c,null));});}})[_0xd78d('0x23')](function(_0x21eb06){var _0x3fc52b=_[_0xd78d('0x54')](_0x21eb06,function(_0x4d17d9){return _0x4d17d9[_0xd78d('0x4a')]({'plain':!![]});});})[_0xd78d('0x23')](respondWithResult(_0x5f170c,null))[_0xd78d('0x42')](handleError(_0x5f170c,null));};exports[_0xd78d('0x5f')]=function(_0x55c630,_0x58ee96,_0x36132e){return db['UserProfile'][_0xd78d('0x46')]({'where':{'id':_0x55c630[_0xd78d('0x44')]['id']}})['then'](handleEntityNotFound(_0x58ee96,null))[_0xd78d('0x23')](function(_0x272e63){if(_0x272e63){return _0x272e63['removeResources'](_0x55c630['query']['ids']);}})[_0xd78d('0x23')](respondWithStatusCode(_0x58ee96,null))['catch'](handleError(_0x58ee96,null));};exports[_0xd78d('0x60')]=function(_0x561aca,_0x3337f1){var _0xdfa9e9={'raw':![],'where':{}};var _0x5de754={};var _0x3d4351={'count':0x0,'rows':[]};var _0xc8369a=_0x561aca[_0xd78d('0x2c')][_0xd78d('0x61')];if(typeof _0xc8369a==='undefined'){throw new db[(_0xd78d('0x62'))][(_0xd78d('0x63'))](_0xd78d('0x64'));}var _0x305aa1=_0x561aca[_0xd78d('0x2c')][_0xd78d('0x65')]||![];var _0x358602=getQueryModels(_0xc8369a,_0x305aa1);if(typeof _0x358602[_0xd78d('0x66')]==='undefined'){throw new db[(_0xd78d('0x62'))][(_0xd78d('0x63'))]('Invalid\x20section\x20\x27'+_0xc8369a+'\x27');}var _0x47b8d2=[];if(!_[_0xd78d('0x67')](_0x358602[_0xd78d('0x68')])){_0x47b8d2=_0x358602[_0xd78d('0x68')];}else{_0x47b8d2=[{'name':_0xc8369a}];}return db['UserProfile'][_0xd78d('0x69')]({'where':{'id':_0x561aca['params']['id']}})[_0xd78d('0x23')](handleEntityNotFound(_0x3337f1,null))[_0xd78d('0x23')](function(_0x48a52f){if(_0x48a52f){var _0x38b065=[];for(var _0x4f74c3=0x0;_0x4f74c3<_0x47b8d2[_0xd78d('0x31')];_0x4f74c3++){_0x38b065['push'](db[_0xd78d('0x51')][_0xd78d('0x69')]({'where':{'userProfileId':_0x48a52f['id'],'name':_0x47b8d2[_0x4f74c3]['name']},'raw':!![]}));}return BPromise[_0xd78d('0x6a')](_0x38b065);}})[_0xd78d('0x23')](function(_0x3b9c07){var _0x55d03a=_[_0xd78d('0x38')](_0x3b9c07,function(_0x306d89){return _0x306d89?_0x306d89:undefined;});var _0x363b45=_[_0xd78d('0x38')](_0x47b8d2,['ignore',!![]]);var _0x6ebc2d=_[_0xd78d('0x67')](_0x55d03a)&&_[_0xd78d('0x67')](_0x363b45)?null:_[_0xd78d('0x6b')](_0x363b45,_0x55d03a);if(_0x6ebc2d){var _0xa74b58=[];for(var _0x4ceb79=0x0;_0x4ceb79<_0x6ebc2d[_0xd78d('0x31')];_0x4ceb79++){var _0x52b8b1=_[_0xd78d('0x46')](_0x47b8d2,function(_0x3cb221){return _0x6ebc2d[_0x4ceb79]?_0x3cb221[_0xd78d('0x27')]===_0x6ebc2d[_0x4ceb79][_0xd78d('0x27')]:null;});if(_0x52b8b1){if(_0x6ebc2d[_0x4ceb79][_0xd78d('0x6c')]){_0xa74b58['push'](getAllResources(_0x358602[_0xd78d('0x66')],_0x6ebc2d[_0x4ceb79]));}else{if(!_0x6ebc2d[_0x4ceb79]['autoAssociation']){_0xa74b58[_0xd78d('0x5b')](getAllowedResources(_0x52b8b1,_0x6ebc2d[_0x4ceb79],_0x358602[_0xd78d('0x66')]));}else{if(_0x52b8b1[_0xd78d('0x2f')]){_0xa74b58[_0xd78d('0x5b')](getAllFilteredResources(_0x52b8b1,_0x6ebc2d[_0x4ceb79]));}}}}}return BPromise[_0xd78d('0x6a')](_0xa74b58);}else{return null;}})[_0xd78d('0x23')](function(_0x3799c8){var _0x2be6f5=_0x3799c8;var _0x1a6381=null;if(_0x2be6f5){_0x1a6381=_0x2be6f5[_0xd78d('0x31')]===0x1?_0x2be6f5[0x0]:null;}if(_0x1a6381||_0x2be6f5){var _0xba4e95=db[_0x358602[_0xd78d('0x66')]][_0xd78d('0x2a')];_0x5de754[_0xd78d('0x2f')]=_[_0xd78d('0x2b')](_0xba4e95);_0x5de754[_0xd78d('0x2c')]=_[_0xd78d('0x2b')](_0x561aca['query']);_0x5de754['filters']=_[_0xd78d('0x2e')](_0x5de754[_0xd78d('0x2f')],_0x5de754[_0xd78d('0x2c')]);_0xdfa9e9[_0xd78d('0x30')]=_['intersection'](_0x5de754[_0xd78d('0x2f')],qs[_0xd78d('0x45')](_0x561aca[_0xd78d('0x2c')][_0xd78d('0x45')]));_0xdfa9e9[_0xd78d('0x30')]=_0xdfa9e9[_0xd78d('0x30')]['length']?_0xdfa9e9[_0xd78d('0x30')]:_0x5de754[_0xd78d('0x2f')];if(!_0x561aca['query'][_0xd78d('0x32')](_0xd78d('0x33'))){_0xdfa9e9[_0xd78d('0x1d')]=qs[_0xd78d('0x1d')](_0x561aca[_0xd78d('0x2c')][_0xd78d('0x1d')]);_0xdfa9e9[_0xd78d('0x1c')]=qs[_0xd78d('0x1c')](_0x561aca['query'][_0xd78d('0x1c')]);}_0xdfa9e9['order']=qs[_0xd78d('0x35')](_0x561aca[_0xd78d('0x2c')]['sort']);_0xdfa9e9['where']=qs[_0xd78d('0x2d')](_[_0xd78d('0x37')](_0x561aca[_0xd78d('0x2c')],_0x5de754[_0xd78d('0x2d')]));if(_0x561aca[_0xd78d('0x2c')][_0xd78d('0x38')]){_0xdfa9e9['where']=_['merge'](_0xdfa9e9[_0xd78d('0x36')],{'$or':_['map'](_0xba4e95,function(_0x4610ec){if(_0x4610ec['type'][_0xd78d('0x3a')]!==_0xd78d('0x3b')){var _0x297300={};_0x297300[_0x4610ec[_0xd78d('0x3c')]]={'$like':'%'+_0x561aca['query'][_0xd78d('0x38')]+'%'};return _0x297300;}})});}var _0x4df8aa=[];if(_0x1a6381){var _0x56544d=_['find'](_0x47b8d2,['name',_0x1a6381[_0xd78d('0x27')]]);if(_0x56544d[_0xd78d('0x3c')]){var _0x3e8c01={};if(_0x358602[_0xd78d('0x66')]===_0xd78d('0x6d')){_0x3e8c01[_0x56544d['foreignKey']]=_[_0xd78d('0x54')](_0x1a6381[_0xd78d('0x6e')],'id');}else{_0x3e8c01[_0x56544d[_0xd78d('0x6f')]]=_0x1a6381[_0xd78d('0x6e')];}_0x4df8aa[_0xd78d('0x5b')](_0x3e8c01);}else{_0xdfa9e9[_0xd78d('0x36')]['id']=_0x1a6381[_0xd78d('0x6e')];}}else{for(var _0x52ec04=0x0;_0x52ec04<_0x2be6f5['length'];_0x52ec04++){var _0x56544d=_[_0xd78d('0x46')](_0x47b8d2,[_0xd78d('0x27'),_0x2be6f5[_0x52ec04][_0xd78d('0x27')]]);if(_0x56544d['field']){var _0x3e8c01={};_0x3e8c01[_0x56544d[_0xd78d('0x6f')]]=_0x2be6f5[_0x52ec04]['associatedResources'];_0x4df8aa[_0xd78d('0x5b')](_0x3e8c01);}else{if(!_0xdfa9e9[_0xd78d('0x36')]['id'])_0xdfa9e9[_0xd78d('0x36')]['id']=[];_0x2be6f5[_0x52ec04][_0xd78d('0x6e')]['forEach'](function(_0x6840aa){_0xdfa9e9[_0xd78d('0x36')]['id']['push'](_0x6840aa);});}}}if(!_[_0xd78d('0x67')](_0x4df8aa)){_0xdfa9e9[_0xd78d('0x36')]=_[_0xd78d('0x39')](_0xdfa9e9[_0xd78d('0x36')],{'$and':{'$or':_0x4df8aa}});}_0xdfa9e9=_[_0xd78d('0x39')]({},_0xdfa9e9,_0x561aca[_0xd78d('0x3d')]);if(_0x1a6381&&!_0x1a6381[_0xd78d('0x52')]&&_0x358602[_0xd78d('0x66')]===_0xd78d('0x6d')){if(_0x561aca[_0xd78d('0x2c')][_0xd78d('0x3e')]){_0xdfa9e9[_0xd78d('0x3f')]=[{'all':!![]}];}return db[_0x358602[_0xd78d('0x66')]][_0xd78d('0x40')](_0xdfa9e9)['then'](function(_0x5e453f){var _0x2cc283=[];_0x5e453f[_0xd78d('0x70')](function(_0x2ca81b){var _0xff742c;switch(_0x2ca81b[_0xd78d('0x71')]){case _0xd78d('0x72'):_0xff742c=_[_0xd78d('0x46')](_0x1a6381['associatedResources'],function(_0x1cb515){return _0x1cb515['id']===_0x2ca81b['reportId']&&_0x1cb515[_0xd78d('0x73')]===_0xd78d('0x74');});break;case _0xd78d('0x75'):_0xff742c=_[_0xd78d('0x46')](_0x1a6381[_0xd78d('0x6e')],function(_0x1b33d5){return _0x1b33d5['id']===_0x2ca81b[_0xd78d('0x76')]&&_0x1b33d5['type']===_0xd78d('0x77');});break;}if(_0xff742c)_0x2cc283['push'](_0x2ca81b);});_0x3d4351[_0xd78d('0x1b')]=_0x2cc283[_0xd78d('0x31')];_0x3d4351['rows']=_0x2cc283;return _0x3d4351;});}else{return db[_0x358602[_0xd78d('0x66')]]['count']({'where':_0xdfa9e9['where']})[_0xd78d('0x23')](function(_0x2881ac){_0x3d4351[_0xd78d('0x1b')]=_0x2881ac;if(_0x561aca['query'][_0xd78d('0x3e')]){if(_0x358602['childModel']===_0xd78d('0x78')){_0xdfa9e9['include']=[{'model':db['Tag'],'as':_0xd78d('0x79'),'attributes':['id',_0xd78d('0x27'),_0xd78d('0x7a')],'required':_0x561aca[_0xd78d('0x2c')][_0xd78d('0x7b')]?!![]:![]},{'model':db[_0xd78d('0x7c')],'as':_0xd78d('0x7d'),'attributes':['id',_0xd78d('0x27'),_0xd78d('0x7a')],'through':_0x561aca[_0xd78d('0x2c')][_0xd78d('0x7b')]?{'attributes':[],'where':{'TagId':_0x561aca[_0xd78d('0x2c')][_0xd78d('0x7b')]||undefined}}:{},'required':_0x561aca[_0xd78d('0x2c')]['tag']?!![]:![]}];}else{_0xdfa9e9[_0xd78d('0x3f')]=[{'all':!![]}];}}return db[_0x358602[_0xd78d('0x66')]][_0xd78d('0x40')](_0xdfa9e9);})[_0xd78d('0x23')](function(_0x5da79b){_0x3d4351[_0xd78d('0x41')]=_0x5da79b;return _0x3d4351;});}}else{return _0x3d4351;}})[_0xd78d('0x23')](respondWithFilteredResult(_0x3337f1,_0xdfa9e9))[_0xd78d('0x42')](handleError(_0x3337f1,null));};function getAllResources(_0x16df4b,_0x53ea7f){return new BPromise(function(_0x4e751f,_0x18d3b4){if(_0x53ea7f){var _0x1eb915=_0x53ea7f['filter']?{[_0x53ea7f[_0xd78d('0x38')][_0xd78d('0x3c')]]:_0x53ea7f[_0xd78d('0x38')][_0xd78d('0x7e')]}:undefined;return db[_0x16df4b][_0xd78d('0x40')]({'where':_0x1eb915,'raw':!![]})[_0xd78d('0x23')](function(_0x630119){_0x53ea7f['associatedResources']=_['map'](_0x630119,'id');_0x4e751f(_0x53ea7f);})[_0xd78d('0x42')](function(_0x4e0308){_0x18d3b4(_0x4e0308);});}else{_0x4e751f(null);}});}function getAllFilteredResources(_0x1894b8,_0x399e47){return new BPromise(function(_0x7b24e7,_0x532ca){var _0x1b0c45=_0x1894b8[_0xd78d('0x38')]?{[_0x1894b8['filter'][_0xd78d('0x3c')]]:_0x1894b8[_0xd78d('0x38')]['value']}:undefined;return db[_0x1894b8[_0xd78d('0x2f')]][_0xd78d('0x40')]({'where':_0x1b0c45,'raw':!![]})[_0xd78d('0x23')](function(_0xf9f161){_0x399e47[_0xd78d('0x6e')]=_[_0xd78d('0x54')](_0xf9f161,function(_0x1d7125){return _0x1d7125['name'];});_0x7b24e7(_0x399e47);})[_0xd78d('0x42')](function(_0x2b94ab){_0x532ca(_0x2b94ab);});});}function getAllowedResources(_0x42202f,_0x1cbb9e,_0x1a22be){return new BPromise(function(_0x8f5b2e,_0x2bb236){if(_0x1cbb9e){return db['UserProfileResource'][_0xd78d('0x40')]({'where':{'sectionId':_0x1cbb9e['id']},'raw':!![]})[_0xd78d('0x23')](function(_0x11a5f2){if(_0x42202f['field']&&_0x42202f[_0xd78d('0x3c')]!=='id'){_0x1cbb9e[_0xd78d('0x6e')]=_[_0xd78d('0x54')](_0x11a5f2,function(_0x21c160){return _0x21c160[_0x42202f['field']];});}else{if(_0x1a22be===_0xd78d('0x6d')){_0x1cbb9e['associatedResources']=_[_0xd78d('0x54')](_0x11a5f2,function(_0x4027a9){return{'id':_0x4027a9['resourceId'],'type':_0x4027a9[_0xd78d('0x73')]};});}else{_0x1cbb9e['associatedResources']=_[_0xd78d('0x54')](_0x11a5f2,function(_0x113645){return _0x113645[_0xd78d('0x7f')];});}}_0x8f5b2e(_0x1cbb9e);})['catch'](function(_0x207422){_0x2bb236(_0x207422);});}else{_0x8f5b2e(null);}});}function getQueryModels(_0xbfc36a,_0x33f126){var _0x28c138=_0xbfc36a[_0xd78d('0x80')]();var _0x205528={'childModel':undefined,'parentSections':[]};switch(_0x28c138){case'squareprojects':_0x205528[_0xd78d('0x66')]=_0xd78d('0x81');break;case _0xd78d('0x82'):_0x205528[_0xd78d('0x66')]='SquareOdbc';break;case _0xd78d('0x83'):_0x205528[_0xd78d('0x66')]='SquareRecording';_0x205528[_0xd78d('0x68')]=[{'name':_0xd78d('0x84'),'field':_0xd78d('0x27'),'foreignKey':'projectName'}];break;case _0xd78d('0x85'):_0x205528['childModel']='JscriptyProject';break;case _0xd78d('0x86'):_0x205528[_0xd78d('0x66')]=_0xd78d('0x78');_0x205528[_0xd78d('0x68')]=[{'name':'Lists','field':'id','foreignKey':'ListId'}];break;case _0xd78d('0x87'):_0x205528[_0xd78d('0x66')]='CmList';break;case'companies':_0x205528['childModel']='CmCompany';break;case _0xd78d('0x88'):_0x205528['childModel']=_0xd78d('0x89');break;case _0xd78d('0x8a'):_0x205528[_0xd78d('0x66')]=_0xd78d('0x8b');break;case _0xd78d('0x8c'):_0x205528[_0xd78d('0x66')]=_0xd78d('0x8d');break;case _0xd78d('0x8e'):_0x205528[_0xd78d('0x66')]=_0xd78d('0x8f');break;case _0xd78d('0x90'):_0x205528[_0xd78d('0x66')]='FaxAccount';break;case _0xd78d('0x91'):case _0xd78d('0x92'):case'outboundroutes':_0x205528['childModel']=_0xd78d('0x93');break;case'contexts':_0x205528['childModel']=_0xd78d('0x94');break;case _0xd78d('0x95'):_0x205528[_0xd78d('0x66')]=_0xd78d('0x96');break;case _0xd78d('0x97'):_0x205528[_0xd78d('0x66')]='VoiceRecording';_0x205528['parentSections']=[{'name':'Agents','field':_0xd78d('0x27'),'foreignKey':'membername','model':'User','filter':{'field':'role','value':[_0xd78d('0x98')]}},{'name':'Telephones','field':_0xd78d('0x27'),'foreignKey':'membername','model':'User','filter':{'field':_0xd78d('0x99'),'value':[_0xd78d('0x9a')]}},{'name':_0xd78d('0x9b'),'field':_0xd78d('0x27'),'foreignKey':_0xd78d('0x9c'),'model':'VoiceQueue','filter':{'field':_0xd78d('0x73'),'value':[_0xd78d('0x9d')]}},{'name':_0xd78d('0x9e'),'field':'name','foreignKey':_0xd78d('0x9c'),'model':_0xd78d('0x9f'),'filter':{'field':_0xd78d('0x73'),'value':[_0xd78d('0xa0')]}}];break;case _0xd78d('0xa1'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xa2');break;case _0xd78d('0xa3'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xa4');break;case'voiceprefixes':_0x205528['childModel']=_0xd78d('0xa5');break;case _0xd78d('0xa6'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xa7');break;case _0xd78d('0xa8'):_0x205528['childModel']='MailQueue';break;case _0xd78d('0xa9'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xaa');break;case _0xd78d('0xab'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xac');break;case'openchannelqueues':_0x205528[_0xd78d('0x66')]=_0xd78d('0xad');break;case _0xd78d('0xae'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xaf');break;case _0xd78d('0xb0'):_0x205528['childModel']='SmsQueue';break;case _0xd78d('0xb1'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xb2');break;case _0xd78d('0xb3'):_0x205528[_0xd78d('0x66')]='Team';break;case _0xd78d('0xb4'):case _0xd78d('0xb5'):_0x205528['childModel']=_0xd78d('0x9f');if(_0x33f126){_0x205528[_0xd78d('0x68')]=[{'name':_0xd78d('0x9b')},{'name':_0xd78d('0x9e')}];}break;case _0xd78d('0xb6'):case _0xd78d('0xb7'):case'telephones':_0x205528['childModel']=_0xd78d('0xb8');if(_0x33f126){_0x205528[_0xd78d('0x68')]=[{'name':_0xd78d('0xb9'),'filter':{'field':'role','value':[_0xd78d('0xba'),'user']},'ignore':!![]},{'name':_0xd78d('0xbb')},{'name':'Telephones'}];}break;case'zendeskaccounts':_0x205528['childModel']=_0xd78d('0xbc');break;case _0xd78d('0xbd'):_0x205528[_0xd78d('0x66')]='SalesforceAccount';break;case _0xd78d('0xbe'):_0x205528[_0xd78d('0x66')]='FreshdeskAccount';break;case _0xd78d('0xbf'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xc0');break;case _0xd78d('0xc1'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xc2');break;case'zohoaccounts':_0x205528[_0xd78d('0x66')]='ZohoAccount';break;case _0xd78d('0xc3'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xb8');break;case _0xd78d('0xc4'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xc5');break;case'dispositions':_0x205528[_0xd78d('0x66')]=_0xd78d('0xc6');break;case _0xd78d('0xc7'):_0x205528['childModel']='Dashboard';break;case _0xd78d('0xc8'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xc9');break;case _0xd78d('0xca'):_0x205528['childModel']=_0xd78d('0xcb');break;case _0xd78d('0xcc'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xcd');break;case _0xd78d('0xce'):_0x205528[_0xd78d('0x66')]='Sound';break;case _0xd78d('0xcf'):_0x205528[_0xd78d('0x66')]='Tag';break;case _0xd78d('0xd0'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xd1');break;case _0xd78d('0xd2'):_0x205528['childModel']=_0xd78d('0xd3');break;case _0xd78d('0xd4'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xd5');break;case _0xd78d('0xd6'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xd7');break;case'plugins':_0x205528['childModel']=_0xd78d('0xd8');break;case _0xd78d('0xd9'):_0x205528['childModel']='AnalyticExtractedReport';_0x205528['parentSections']=[{'name':_0xd78d('0xda'),'field':'id','foreignKey':'reportId'}];break;case _0xd78d('0xdb'):_0x205528[_0xd78d('0x66')]=_0xd78d('0xdc');break;default:return _0x205528;}return _0x205528;}
\ No newline at end of file
index f0db779..348245c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x76b1=['remove','hook','exports','UserProfile','setMaxListeners','save','update'];(function(_0xe1c940,_0x203c07){var _0x5d11bb=function(_0x43746a){while(--_0x43746a){_0xe1c940['push'](_0xe1c940['shift']());}};_0x5d11bb(++_0x203c07);}(_0x76b1,0x1f4));var _0x176b=function(_0xeaeaef,_0x6127ab){_0xeaeaef=_0xeaeaef-0x0;var _0x33672a=_0x76b1[_0xeaeaef];return _0x33672a;};'use strict';var EventEmitter=require('events');var UserProfile=require('../../mysqldb')['db'][_0x176b('0x0')];var UserProfileEvents=new EventEmitter();UserProfileEvents[_0x176b('0x1')](0x0);var events={'afterCreate':_0x176b('0x2'),'afterUpdate':_0x176b('0x3'),'afterDestroy':_0x176b('0x4')};function emitEvent(_0x3e9f31){return function(_0x4fa01e,_0x392e12,_0x393d40){UserProfileEvents['emit'](_0x3e9f31+':'+_0x4fa01e['id'],_0x4fa01e);UserProfileEvents['emit'](_0x3e9f31,_0x4fa01e);_0x393d40(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];UserProfile[_0x176b('0x5')](e,emitEvent(event));}}module[_0x176b('0x6')]=UserProfileEvents;
\ No newline at end of file
+var _0x9dc4=['events','../../mysqldb','UserProfile','setMaxListeners','save','remove','emit','hook','exports'];(function(_0x2be437,_0x3388a1){var _0x40825c=function(_0x1125f8){while(--_0x1125f8){_0x2be437['push'](_0x2be437['shift']());}};_0x40825c(++_0x3388a1);}(_0x9dc4,0x6c));var _0x49dc=function(_0x13b092,_0x20829c){_0x13b092=_0x13b092-0x0;var _0xf4a988=_0x9dc4[_0x13b092];return _0xf4a988;};'use strict';var EventEmitter=require(_0x49dc('0x0'));var UserProfile=require(_0x49dc('0x1'))['db'][_0x49dc('0x2')];var UserProfileEvents=new EventEmitter();UserProfileEvents[_0x49dc('0x3')](0x0);var events={'afterCreate':_0x49dc('0x4'),'afterUpdate':'update','afterDestroy':_0x49dc('0x5')};function emitEvent(_0x42324d){return function(_0x1f7f59,_0x8a7e9,_0x2b5365){UserProfileEvents[_0x49dc('0x6')](_0x42324d+':'+_0x1f7f59['id'],_0x1f7f59);UserProfileEvents[_0x49dc('0x6')](_0x42324d,_0x1f7f59);_0x2b5365(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];UserProfile[_0x49dc('0x7')](e,emitEvent(event));}}module[_0x49dc('0x8')]=UserProfileEvents;
\ No newline at end of file
index e27e8d1..e89721b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x10f7=['lodash','../../config/logger','moment','request-promise','../../config/environment','./userProfile.attributes','define','UserProfile'];(function(_0x1bba8c,_0x21f35f){var _0x262388=function(_0x2afd7f){while(--_0x2afd7f){_0x1bba8c['push'](_0x1bba8c['shift']());}};_0x262388(++_0x21f35f);}(_0x10f7,0xb8));var _0x710f=function(_0x2de0d1,_0x3d6963){_0x2de0d1=_0x2de0d1-0x0;var _0x4ccb67=_0x10f7[_0x2de0d1];return _0x4ccb67;};'use strict';var _=require(_0x710f('0x0'));var util=require('util');var logger=require(_0x710f('0x1'))('api');var moment=require(_0x710f('0x2'));var BPromise=require('bluebird');var rp=require(_0x710f('0x3'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x710f('0x4'));var attributes=require(_0x710f('0x5'));module['exports']=function(_0x224371,_0x42f613){return _0x224371[_0x710f('0x6')](_0x710f('0x7'),attributes,{'tableName':'user_profiles','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xae0d=['../../config/environment','exports','define','user_profiles','lodash','util','../../config/logger','api','bluebird','path','rimraf'];(function(_0xa8883,_0x1f107f){var _0x479426=function(_0x4e56b9){while(--_0x4e56b9){_0xa8883['push'](_0xa8883['shift']());}};_0x479426(++_0x1f107f);}(_0xae0d,0x14e));var _0xdae0=function(_0x5b4a57,_0x47ba1f){_0x5b4a57=_0x5b4a57-0x0;var _0x59cc6e=_0xae0d[_0x5b4a57];return _0x59cc6e;};'use strict';var _=require(_0xdae0('0x0'));var util=require(_0xdae0('0x1'));var logger=require(_0xdae0('0x2'))(_0xdae0('0x3'));var moment=require('moment');var BPromise=require(_0xdae0('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xdae0('0x5'));var rimraf=require(_0xdae0('0x6'));var config=require(_0xdae0('0x7'));var attributes=require('./userProfile.attributes');module[_0xdae0('0x8')]=function(_0xb31ed9,_0x2aceff){return _0xb31ed9[_0xdae0('0x9')]('UserProfile',attributes,{'tableName':_0xdae0('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d984ee3..846e75d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0171=['bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','defaults','redis','socket.io-emitter','request','then','info','UserProfile,\x20%s,\x20%s','request\x20sent','debug','UserProfile,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','util','moment'];(function(_0x211b35,_0xfdde10){var _0x1fa0fb=function(_0x143700){while(--_0x143700){_0x211b35['push'](_0x211b35['shift']());}};_0x1fa0fb(++_0xfdde10);}(_0x0171,0x9a));var _0x1017=function(_0x2601b4,_0xd585d9){_0x2601b4=_0x2601b4-0x0;var _0x1a92ce=_0x0171[_0x2601b4];return _0x1a92ce;};'use strict';var _=require('lodash');var util=require(_0x1017('0x0'));var moment=require(_0x1017('0x1'));var BPromise=require(_0x1017('0x2'));var rs=require(_0x1017('0x3'));var fs=require('fs');var Redis=require(_0x1017('0x4'));var db=require(_0x1017('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x1017('0x6'))(_0x1017('0x7'));var config=require(_0x1017('0x8'));var jayson=require(_0x1017('0x9'));var client=jayson[_0x1017('0xa')]['http']({'port':0x232a});config['redis']=_[_0x1017('0xb')](config[_0x1017('0xc')],{'host':'localhost','port':0x18eb});var socket=require(_0x1017('0xd'))(new Redis(config[_0x1017('0xc')]));require('./userProfile.socket')['register'](socket);function respondWithRpcPromise(_0x5d40f4,_0x4a3d63,_0x12b4b3){return new BPromise(function(_0x11a629,_0x3dc431){return client[_0x1017('0xe')](_0x5d40f4,_0x12b4b3)[_0x1017('0xf')](function(_0x22e328){logger[_0x1017('0x10')](_0x1017('0x11'),_0x4a3d63,_0x1017('0x12'));logger[_0x1017('0x13')](_0x1017('0x14'),_0x4a3d63,_0x1017('0x12'),JSON[_0x1017('0x15')](_0x22e328));if(_0x22e328[_0x1017('0x16')]){if(_0x22e328[_0x1017('0x16')][_0x1017('0x17')]===0x1f4){logger[_0x1017('0x16')]('UserProfile,\x20%s,\x20%s',_0x4a3d63,_0x22e328['error'][_0x1017('0x18')]);return _0x3dc431(_0x22e328[_0x1017('0x16')][_0x1017('0x18')]);}logger[_0x1017('0x16')](_0x1017('0x11'),_0x4a3d63,_0x22e328[_0x1017('0x16')][_0x1017('0x18')]);return _0x11a629(_0x22e328[_0x1017('0x16')]['message']);}else{logger[_0x1017('0x10')](_0x1017('0x11'),_0x4a3d63,'request\x20sent');_0x11a629(_0x22e328[_0x1017('0x19')][_0x1017('0x18')]);}})['catch'](function(_0x517563){logger[_0x1017('0x16')](_0x1017('0x11'),_0x4a3d63,_0x517563);_0x3dc431(_0x517563);});});}
\ No newline at end of file
+var _0xaa72=['request\x20sent','debug','UserProfile,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','client','http','redis','defaults','socket.io-emitter','./userProfile.socket','register','request','info','UserProfile,\x20%s,\x20%s'];(function(_0x4f25da,_0x2d2fb8){var _0x3caf8e=function(_0x4d6e20){while(--_0x4d6e20){_0x4f25da['push'](_0x4f25da['shift']());}};_0x3caf8e(++_0x2d2fb8);}(_0xaa72,0xe0));var _0x2aa7=function(_0x5404ed,_0x1a7581){_0x5404ed=_0x5404ed-0x0;var _0x480cf1=_0xaa72[_0x5404ed];return _0x480cf1;};'use strict';var _=require('lodash');var util=require(_0x2aa7('0x0'));var moment=require(_0x2aa7('0x1'));var BPromise=require(_0x2aa7('0x2'));var rs=require(_0x2aa7('0x3'));var fs=require('fs');var Redis=require(_0x2aa7('0x4'));var db=require(_0x2aa7('0x5'))['db'];var utils=require(_0x2aa7('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0x2aa7('0x7'));var jayson=require(_0x2aa7('0x8'));var client=jayson[_0x2aa7('0x9')][_0x2aa7('0xa')]({'port':0x232a});config[_0x2aa7('0xb')]=_[_0x2aa7('0xc')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0x2aa7('0xd'))(new Redis(config[_0x2aa7('0xb')]));require(_0x2aa7('0xe'))[_0x2aa7('0xf')](socket);function respondWithRpcPromise(_0x39de12,_0x32f007,_0x5e432c){return new BPromise(function(_0x54269c,_0x1b858b){return client[_0x2aa7('0x10')](_0x39de12,_0x5e432c)['then'](function(_0x10569f){logger[_0x2aa7('0x11')](_0x2aa7('0x12'),_0x32f007,_0x2aa7('0x13'));logger[_0x2aa7('0x14')](_0x2aa7('0x15'),_0x32f007,_0x2aa7('0x13'),JSON[_0x2aa7('0x16')](_0x10569f));if(_0x10569f[_0x2aa7('0x17')]){if(_0x10569f[_0x2aa7('0x17')][_0x2aa7('0x18')]===0x1f4){logger[_0x2aa7('0x17')]('UserProfile,\x20%s,\x20%s',_0x32f007,_0x10569f[_0x2aa7('0x17')][_0x2aa7('0x19')]);return _0x1b858b(_0x10569f[_0x2aa7('0x17')][_0x2aa7('0x19')]);}logger['error'](_0x2aa7('0x12'),_0x32f007,_0x10569f[_0x2aa7('0x17')][_0x2aa7('0x19')]);return _0x54269c(_0x10569f['error'][_0x2aa7('0x19')]);}else{logger[_0x2aa7('0x11')]('UserProfile,\x20%s,\x20%s',_0x32f007,'request\x20sent');_0x54269c(_0x10569f['result']['message']);}})[_0x2aa7('0x1a')](function(_0x3ad7b7){logger['error'](_0x2aa7('0x12'),_0x32f007,_0x3ad7b7);_0x1b858b(_0x3ad7b7);});});}
\ No newline at end of file
index e86efe4..508aab7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf611=['emit','removeListener','length','userProfile:','save','remove','update'];(function(_0x14331f,_0x3f26ab){var _0x47dcca=function(_0x86f67d){while(--_0x86f67d){_0x14331f['push'](_0x14331f['shift']());}};_0x47dcca(++_0x3f26ab);}(_0xf611,0x7b));var _0x1f61=function(_0x330414,_0x4f3207){_0x330414=_0x330414-0x0;var _0x99dbff=_0xf611[_0x330414];return _0x99dbff;};'use strict';var UserProfileEvents=require('./userProfile.events');var events=[_0x1f61('0x0'),_0x1f61('0x1'),_0x1f61('0x2')];function createListener(_0x58da3e,_0x5e6707){return function(_0x5ede64){_0x5e6707[_0x1f61('0x3')](_0x58da3e,_0x5ede64);};}function removeListener(_0x4e0df1,_0xdc8d91){return function(){UserProfileEvents[_0x1f61('0x4')](_0x4e0df1,_0xdc8d91);};}exports['register']=function(_0x4faa5b){for(var _0x290165=0x0,_0x34a924=events[_0x1f61('0x5')];_0x290165<_0x34a924;_0x290165++){var _0x21e3f6=events[_0x290165];var _0x5b2e5b=createListener(_0x1f61('0x6')+_0x21e3f6,_0x4faa5b);UserProfileEvents['on'](_0x21e3f6,_0x5b2e5b);}};
\ No newline at end of file
+var _0x5aaa=['./userProfile.events','emit','removeListener','register','length'];(function(_0x5d9180,_0x7e0aea){var _0x353ba4=function(_0x5f5448){while(--_0x5f5448){_0x5d9180['push'](_0x5d9180['shift']());}};_0x353ba4(++_0x7e0aea);}(_0x5aaa,0xff));var _0xa5aa=function(_0xfe077,_0x21b70d){_0xfe077=_0xfe077-0x0;var _0x1ceb7b=_0x5aaa[_0xfe077];return _0x1ceb7b;};'use strict';var UserProfileEvents=require(_0xa5aa('0x0'));var events=['save','remove','update'];function createListener(_0x59ccda,_0x4926c9){return function(_0x128d2a){_0x4926c9[_0xa5aa('0x1')](_0x59ccda,_0x128d2a);};}function removeListener(_0x473061,_0x54ca19){return function(){UserProfileEvents[_0xa5aa('0x2')](_0x473061,_0x54ca19);};}exports[_0xa5aa('0x3')]=function(_0x5e1865){for(var _0x21d216=0x0,_0x143817=events[_0xa5aa('0x4')];_0x21d216<_0x143817;_0x21d216++){var _0x2c0b72=events[_0x21d216];var _0x5574aa=createListener('userProfile:'+_0x2c0b72,_0x5e1865);UserProfileEvents['on'](_0x2c0b72,_0x5574aa);}};
\ No newline at end of file
index 346c9e1..5e754ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x414f=['../../components/auth/service','../../components/interaction/service','../../config/environment','./userProfileResource.controller','get','isAuthenticated','describe','show','post','create','put','/:id','update','destroy','exports','multer','path','connect-timeout','Router'];(function(_0x5b6e2a,_0x3c2918){var _0x21fa56=function(_0x44a167){while(--_0x44a167){_0x5b6e2a['push'](_0x5b6e2a['shift']());}};_0x21fa56(++_0x3c2918);}(_0x414f,0x13f));var _0xf414=function(_0x31f6d2,_0x49129c){_0x31f6d2=_0x31f6d2-0x0;var _0xd9d2ba=_0x414f[_0x31f6d2];return _0xd9d2ba;};'use strict';var multer=require(_0xf414('0x0'));var util=require('util');var path=require(_0xf414('0x1'));var timeout=require(_0xf414('0x2'));var express=require('express');var router=express[_0xf414('0x3')]();var auth=require(_0xf414('0x4'));var interaction=require(_0xf414('0x5'));var config=require(_0xf414('0x6'));var controller=require(_0xf414('0x7'));router[_0xf414('0x8')]('/',auth[_0xf414('0x9')](),controller['index']);router[_0xf414('0x8')]('/describe',auth[_0xf414('0x9')](),controller[_0xf414('0xa')]);router[_0xf414('0x8')]('/:id',auth['isAuthenticated'](),controller[_0xf414('0xb')]);router[_0xf414('0xc')]('/',auth[_0xf414('0x9')](),controller[_0xf414('0xd')]);router[_0xf414('0xe')](_0xf414('0xf'),auth[_0xf414('0x9')](),controller[_0xf414('0x10')]);router['delete']('/:id',auth[_0xf414('0x9')](),controller[_0xf414('0x11')]);module[_0xf414('0x12')]=router;
\ No newline at end of file
+var _0xa1c5=['Router','../../components/auth/service','../../components/interaction/service','./userProfileResource.controller','get','isAuthenticated','/describe','describe','/:id','show','post','put','update','exports','multer','util','path'];(function(_0x3f1e00,_0x25c7dd){var _0x583400=function(_0x880949){while(--_0x880949){_0x3f1e00['push'](_0x3f1e00['shift']());}};_0x583400(++_0x25c7dd);}(_0xa1c5,0x96));var _0x5a1c=function(_0x4f764c,_0x4e42c1){_0x4f764c=_0x4f764c-0x0;var _0x2f16f2=_0xa1c5[_0x4f764c];return _0x2f16f2;};'use strict';var multer=require(_0x5a1c('0x0'));var util=require(_0x5a1c('0x1'));var path=require(_0x5a1c('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x5a1c('0x3')]();var auth=require(_0x5a1c('0x4'));var interaction=require(_0x5a1c('0x5'));var config=require('../../config/environment');var controller=require(_0x5a1c('0x6'));router[_0x5a1c('0x7')]('/',auth[_0x5a1c('0x8')](),controller['index']);router[_0x5a1c('0x7')](_0x5a1c('0x9'),auth['isAuthenticated'](),controller[_0x5a1c('0xa')]);router['get'](_0x5a1c('0xb'),auth[_0x5a1c('0x8')](),controller[_0x5a1c('0xc')]);router[_0x5a1c('0xd')]('/',auth[_0x5a1c('0x8')](),controller['create']);router[_0x5a1c('0xe')]('/:id',auth[_0x5a1c('0x8')](),controller[_0x5a1c('0xf')]);router['delete'](_0x5a1c('0xb'),auth[_0x5a1c('0x8')](),controller['destroy']);module[_0x5a1c('0x10')]=router;
\ No newline at end of file
index 1b71516..ced2611 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe3f9=['exports','STRING','INTEGER','sequelize'];(function(_0x417c48,_0x13e15b){var _0x4a7d3f=function(_0x9dba09){while(--_0x9dba09){_0x417c48['push'](_0x417c48['shift']());}};_0x4a7d3f(++_0x13e15b);}(_0xe3f9,0x137));var _0x9e3f=function(_0x41397b,_0x481d0e){_0x41397b=_0x41397b-0x0;var _0x5f4677=_0xe3f9[_0x41397b];return _0x5f4677;};'use strict';var Sequelize=require(_0x9e3f('0x0'));module[_0x9e3f('0x1')]={'name':{'type':Sequelize[_0x9e3f('0x2')],'allowNull':![]},'resourceId':{'type':Sequelize[_0x9e3f('0x3')],'allowNull':![]},'type':{'type':Sequelize[_0x9e3f('0x2')],'allowNull':![]}};
\ No newline at end of file
+var _0x66f3=['sequelize','exports'];(function(_0x36fb6b,_0x38b608){var _0x2c7a36=function(_0xf183d5){while(--_0xf183d5){_0x36fb6b['push'](_0x36fb6b['shift']());}};_0x2c7a36(++_0x38b608);}(_0x66f3,0x190));var _0x366f=function(_0x49ca18,_0x5e6d05){_0x49ca18=_0x49ca18-0x0;var _0x145d54=_0x66f3[_0x49ca18];return _0x145d54;};'use strict';var Sequelize=require(_0x366f('0x0'));module[_0x366f('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'resourceId':{'type':Sequelize['INTEGER'],'allowNull':![]},'type':{'type':Sequelize['STRING'],'allowNull':![]}};
\ No newline at end of file
index 1c696c4..3900537 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x008c=['fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','desk.js','papaparse','ioredis','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','apply','destroy','then','end','error','send','index','UserProfileResource','rawAttributes','model','query','keys','filters','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','filter','merge','type','VIRTUAL','includeAll','include','findAll','rows','catch','show','params','intersection','options','create','body','find','describe','html-pdf','eml-format','rimraf','zip-dir'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0x008c,0x188));var _0xc008=function(_0x4d9403,_0x33c5f0){_0x4d9403=_0x4d9403-0x0;var _0x5eef11=_0x008c[_0x4d9403];return _0x5eef11;};'use strict';var pdf=require(_0xc008('0x0'));var emlformat=require(_0xc008('0x1'));var rimraf=require(_0xc008('0x2'));var zipdir=require(_0xc008('0x3'));var jsonpatch=require(_0xc008('0x4'));var rp=require('request-promise');var moment=require(_0xc008('0x5'));var BPromise=require(_0xc008('0x6'));var Mustache=require(_0xc008('0x7'));var util=require(_0xc008('0x8'));var path=require(_0xc008('0x9'));var sox=require(_0xc008('0xa'));var csv=require(_0xc008('0xb'));var ejs=require(_0xc008('0xc'));var fs=require('fs');var _=require(_0xc008('0xd'));var squel=require('squel');var crypto=require(_0xc008('0xe'));var jsforce=require('jsforce');var deskjs=require(_0xc008('0xf'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xc008('0x10'));var Redis=require(_0xc008('0x11'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xc008('0x12'))(_0xc008('0x13'));var utils=require('../../config/utils');var config=require(_0xc008('0x14'));var db=require(_0xc008('0x15'))['db'];function respondWithStatusCode(_0x2ea200,_0x2a5b4e){_0x2a5b4e=_0x2a5b4e||0xcc;return function(_0x9ffa93){if(_0x9ffa93){return _0x2ea200[_0xc008('0x16')](_0x2a5b4e);}return _0x2ea200[_0xc008('0x17')](_0x2a5b4e)['end']();};}function respondWithResult(_0x560e28,_0x33f44c){_0x33f44c=_0x33f44c||0xc8;return function(_0x50c1ab){if(_0x50c1ab){return _0x560e28[_0xc008('0x17')](_0x33f44c)[_0xc008('0x18')](_0x50c1ab);}};}function respondWithFilteredResult(_0x2073ef,_0x339ffc){return function(_0x3f0ecf){if(_0x3f0ecf){var _0x5ee00b=_0x3f0ecf[_0xc008('0x19')],_0x5e894e=_0x339ffc[_0xc008('0x1a')],_0x4bd0f4=_0x339ffc[_0xc008('0x1a')]+_0x339ffc['limit'],_0x11ef38;if(_0x4bd0f4>=_0x5ee00b){_0x4bd0f4=_0x5ee00b;_0x11ef38=0xc8;}else{_0x11ef38=0xce;}_0x2073ef['status'](_0x11ef38);return _0x2073ef['set']('Content-Range',_0x5e894e+'-'+_0x4bd0f4+'/'+_0x5ee00b)[_0xc008('0x18')](_0x3f0ecf);}return null;};}function patchUpdates(_0x462af5){return function(_0x501137){try{jsonpatch[_0xc008('0x1b')](_0x501137,_0x462af5,!![]);}catch(_0x5906e6){return BPromise['reject'](_0x5906e6);}return _0x501137['save']();};}function saveUpdates(_0x50261c,_0x5754a0){return function(_0x4b9726){if(_0x4b9726){return _0x4b9726['update'](_0x50261c)['then'](function(_0x4a582d){return _0x4a582d;});}return null;};}function removeEntity(_0x5a58bd,_0x13a263){return function(_0x4777a6){if(_0x4777a6){return _0x4777a6[_0xc008('0x1c')]()[_0xc008('0x1d')](function(){_0x5a58bd[_0xc008('0x17')](0xcc)[_0xc008('0x1e')]();});}};}function handleEntityNotFound(_0x4f43e2,_0x459fd9){return function(_0x5c85f2){if(!_0x5c85f2){_0x4f43e2['sendStatus'](0x194);}return _0x5c85f2;};}function handleError(_0x218599,_0x36f358){_0x36f358=_0x36f358||0x1f4;return function(_0x2e3cfb){logger[_0xc008('0x1f')](_0x2e3cfb['stack']);if(_0x2e3cfb['name']){delete _0x2e3cfb['name'];}_0x218599[_0xc008('0x17')](_0x36f358)[_0xc008('0x20')](_0x2e3cfb);};}exports[_0xc008('0x21')]=function(_0x2e31c2,_0x5bebd9){var _0x5e2aca={},_0x4fce9c={},_0x4adbab={'count':0x0,'rows':[]};var _0x4caaf4=db[_0xc008('0x22')][_0xc008('0x23')];_0x4fce9c[_0xc008('0x24')]=_['keys'](_0x4caaf4);_0x4fce9c[_0xc008('0x25')]=_[_0xc008('0x26')](_0x2e31c2[_0xc008('0x25')]);_0x4fce9c[_0xc008('0x27')]=_['intersection'](_0x4fce9c[_0xc008('0x24')],_0x4fce9c[_0xc008('0x25')]);_0x5e2aca['attributes']=_['intersection'](_0x4fce9c['model'],qs[_0xc008('0x28')](_0x2e31c2[_0xc008('0x25')][_0xc008('0x28')]));_0x5e2aca[_0xc008('0x29')]=_0x5e2aca[_0xc008('0x29')][_0xc008('0x2a')]?_0x5e2aca[_0xc008('0x29')]:_0x4fce9c[_0xc008('0x24')];if(!_0x2e31c2[_0xc008('0x25')][_0xc008('0x2b')](_0xc008('0x2c'))){_0x5e2aca[_0xc008('0x2d')]=qs['limit'](_0x2e31c2[_0xc008('0x25')][_0xc008('0x2d')]);_0x5e2aca['offset']=qs[_0xc008('0x1a')](_0x2e31c2[_0xc008('0x25')][_0xc008('0x1a')]);}_0x5e2aca[_0xc008('0x2e')]=qs[_0xc008('0x2f')](_0x2e31c2[_0xc008('0x25')][_0xc008('0x2f')]);_0x5e2aca[_0xc008('0x30')]=qs[_0xc008('0x27')](_['pick'](_0x2e31c2[_0xc008('0x25')],_0x4fce9c[_0xc008('0x27')]));if(_0x2e31c2[_0xc008('0x25')][_0xc008('0x31')]){_0x5e2aca[_0xc008('0x30')]=_[_0xc008('0x32')](_0x5e2aca[_0xc008('0x30')],{'$or':_['map'](_0x4caaf4,function(_0x35f360){if(_0x35f360[_0xc008('0x33')]['key']!==_0xc008('0x34')){var _0x15453c={};_0x15453c[_0x35f360['field']]={'$like':'%'+_0x2e31c2[_0xc008('0x25')][_0xc008('0x31')]+'%'};return _0x15453c;}})});}_0x5e2aca=_[_0xc008('0x32')]({},_0x5e2aca,_0x2e31c2['options']);var _0x53b353={'where':_0x5e2aca['where']};return db[_0xc008('0x22')]['count'](_0x53b353)[_0xc008('0x1d')](function(_0x3884dd){_0x4adbab[_0xc008('0x19')]=_0x3884dd;if(_0x2e31c2[_0xc008('0x25')][_0xc008('0x35')]){_0x5e2aca[_0xc008('0x36')]=[{'all':!![]}];}return db[_0xc008('0x22')][_0xc008('0x37')](_0x5e2aca);})[_0xc008('0x1d')](function(_0x387dfd){_0x4adbab[_0xc008('0x38')]=_0x387dfd;return _0x4adbab;})[_0xc008('0x1d')](respondWithFilteredResult(_0x5bebd9,_0x5e2aca))[_0xc008('0x39')](handleError(_0x5bebd9,null));};exports[_0xc008('0x3a')]=function(_0x4cace5,_0x3238b4){var _0x23c4db={'raw':![],'where':{'id':_0x4cace5[_0xc008('0x3b')]['id']}},_0x30b7df={};_0x30b7df['model']=_[_0xc008('0x26')](db[_0xc008('0x22')][_0xc008('0x23')]);_0x30b7df[_0xc008('0x25')]=_[_0xc008('0x26')](_0x4cace5['query']);_0x30b7df[_0xc008('0x27')]=_[_0xc008('0x3c')](_0x30b7df[_0xc008('0x24')],_0x30b7df[_0xc008('0x25')]);_0x23c4db[_0xc008('0x29')]=_['intersection'](_0x30b7df[_0xc008('0x24')],qs[_0xc008('0x28')](_0x4cace5[_0xc008('0x25')][_0xc008('0x28')]));_0x23c4db['attributes']=_0x23c4db[_0xc008('0x29')][_0xc008('0x2a')]?_0x23c4db[_0xc008('0x29')]:_0x30b7df['model'];if(_0x4cace5[_0xc008('0x25')]['includeAll']){_0x23c4db[_0xc008('0x36')]=[{'all':!![]}];}_0x23c4db=_['merge']({},_0x23c4db,_0x4cace5[_0xc008('0x3d')]);return db[_0xc008('0x22')]['find'](_0x23c4db)[_0xc008('0x1d')](handleEntityNotFound(_0x3238b4,null))[_0xc008('0x1d')](respondWithResult(_0x3238b4,null))[_0xc008('0x39')](handleError(_0x3238b4,null));};exports['create']=function(_0x1cec64,_0x2a9b5c){return db[_0xc008('0x22')][_0xc008('0x3e')](_0x1cec64[_0xc008('0x3f')],{})[_0xc008('0x1d')](respondWithResult(_0x2a9b5c,0xc9))['catch'](handleError(_0x2a9b5c,null));};exports['update']=function(_0x5283a8,_0x4552ed){if(_0x5283a8[_0xc008('0x3f')]['id']){delete _0x5283a8[_0xc008('0x3f')]['id'];}return db[_0xc008('0x22')][_0xc008('0x40')]({'where':{'id':_0x5283a8[_0xc008('0x3b')]['id']}})[_0xc008('0x1d')](handleEntityNotFound(_0x4552ed,null))[_0xc008('0x1d')](saveUpdates(_0x5283a8['body'],null))['then'](respondWithResult(_0x4552ed,null))['catch'](handleError(_0x4552ed,null));};exports[_0xc008('0x1c')]=function(_0x2651cf,_0x158eae){return db['UserProfileResource'][_0xc008('0x40')]({'where':{'id':_0x2651cf[_0xc008('0x3b')]['id']}})[_0xc008('0x1d')](handleEntityNotFound(_0x158eae,null))[_0xc008('0x1d')](removeEntity(_0x158eae,null))[_0xc008('0x39')](handleError(_0x158eae,null));};exports[_0xc008('0x41')]=function(_0x17ec90,_0x405e87){return db[_0xc008('0x22')][_0xc008('0x41')]()['then'](respondWithResult(_0x405e87,null))['catch'](handleError(_0x405e87,null));};
\ No newline at end of file
+var _0xa9e0=['where','pick','filter','merge','type','key','VIRTUAL','options','includeAll','include','catch','show','params','find','create','body','update','destroy','describe','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','then','error','stack','send','index','UserProfileResource','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','nolimit','order','sort'];(function(_0x49d199,_0x2e0a79){var _0x1c49b1=function(_0x5bea24){while(--_0x5bea24){_0x49d199['push'](_0x49d199['shift']());}};_0x1c49b1(++_0x2e0a79);}(_0xa9e0,0x123));var _0x0a9e=function(_0x13ea00,_0x12f610){_0x13ea00=_0x13ea00-0x0;var _0x1f7347=_0xa9e0[_0x13ea00];return _0x1f7347;};'use strict';var pdf=require(_0x0a9e('0x0'));var emlformat=require(_0x0a9e('0x1'));var rimraf=require(_0x0a9e('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x0a9e('0x3'));var moment=require('moment');var BPromise=require(_0x0a9e('0x4'));var Mustache=require(_0x0a9e('0x5'));var util=require(_0x0a9e('0x6'));var path=require(_0x0a9e('0x7'));var sox=require(_0x0a9e('0x8'));var csv=require('to-csv');var ejs=require(_0x0a9e('0x9'));var fs=require('fs');var _=require(_0x0a9e('0xa'));var squel=require(_0x0a9e('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x0a9e('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x0a9e('0xd'));var Redis=require(_0x0a9e('0xe'));var authService=require(_0x0a9e('0xf'));var qs=require(_0x0a9e('0x10'));var hardwareService=require(_0x0a9e('0x11'));var logger=require(_0x0a9e('0x12'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x273d4d,_0x36471c){_0x36471c=_0x36471c||0xcc;return function(_0xd5b662){if(_0xd5b662){return _0x273d4d[_0x0a9e('0x13')](_0x36471c);}return _0x273d4d[_0x0a9e('0x14')](_0x36471c)[_0x0a9e('0x15')]();};}function respondWithResult(_0x5db4b0,_0x4283ce){_0x4283ce=_0x4283ce||0xc8;return function(_0x239b12){if(_0x239b12){return _0x5db4b0[_0x0a9e('0x14')](_0x4283ce)[_0x0a9e('0x16')](_0x239b12);}};}function respondWithFilteredResult(_0x44dcfd,_0x4d5611){return function(_0x52a03d){if(_0x52a03d){var _0x22dccb=_0x52a03d[_0x0a9e('0x17')],_0x5d0880=_0x4d5611[_0x0a9e('0x18')],_0x1985b6=_0x4d5611['offset']+_0x4d5611[_0x0a9e('0x19')],_0x519dfd;if(_0x1985b6>=_0x22dccb){_0x1985b6=_0x22dccb;_0x519dfd=0xc8;}else{_0x519dfd=0xce;}_0x44dcfd['status'](_0x519dfd);return _0x44dcfd[_0x0a9e('0x1a')](_0x0a9e('0x1b'),_0x5d0880+'-'+_0x1985b6+'/'+_0x22dccb)[_0x0a9e('0x16')](_0x52a03d);}return null;};}function patchUpdates(_0x205fd6){return function(_0x31b1ca){try{jsonpatch[_0x0a9e('0x1c')](_0x31b1ca,_0x205fd6,!![]);}catch(_0x530eb7){return BPromise[_0x0a9e('0x1d')](_0x530eb7);}return _0x31b1ca[_0x0a9e('0x1e')]();};}function saveUpdates(_0x112016,_0x1c696a){return function(_0x105080){if(_0x105080){return _0x105080['update'](_0x112016)[_0x0a9e('0x1f')](function(_0x155cce){return _0x155cce;});}return null;};}function removeEntity(_0x53682f,_0x20f109){return function(_0x5a09ef){if(_0x5a09ef){return _0x5a09ef['destroy']()[_0x0a9e('0x1f')](function(){_0x53682f[_0x0a9e('0x14')](0xcc)[_0x0a9e('0x15')]();});}};}function handleEntityNotFound(_0x30bae6,_0x4abc77){return function(_0xfb6e48){if(!_0xfb6e48){_0x30bae6[_0x0a9e('0x13')](0x194);}return _0xfb6e48;};}function handleError(_0x3b45bc,_0x4d00e6){_0x4d00e6=_0x4d00e6||0x1f4;return function(_0x370d86){logger[_0x0a9e('0x20')](_0x370d86[_0x0a9e('0x21')]);if(_0x370d86['name']){delete _0x370d86['name'];}_0x3b45bc[_0x0a9e('0x14')](_0x4d00e6)[_0x0a9e('0x22')](_0x370d86);};}exports[_0x0a9e('0x23')]=function(_0x33161b,_0x526cf3){var _0x384319={},_0x479bc4={},_0x45a1e7={'count':0x0,'rows':[]};var _0x5bfb33=db[_0x0a9e('0x24')][_0x0a9e('0x25')];_0x479bc4[_0x0a9e('0x26')]=_[_0x0a9e('0x27')](_0x5bfb33);_0x479bc4[_0x0a9e('0x28')]=_[_0x0a9e('0x27')](_0x33161b[_0x0a9e('0x28')]);_0x479bc4[_0x0a9e('0x29')]=_['intersection'](_0x479bc4[_0x0a9e('0x26')],_0x479bc4[_0x0a9e('0x28')]);_0x384319[_0x0a9e('0x2a')]=_[_0x0a9e('0x2b')](_0x479bc4['model'],qs[_0x0a9e('0x2c')](_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x2c')]));_0x384319[_0x0a9e('0x2a')]=_0x384319[_0x0a9e('0x2a')][_0x0a9e('0x2d')]?_0x384319[_0x0a9e('0x2a')]:_0x479bc4[_0x0a9e('0x26')];if(!_0x33161b[_0x0a9e('0x28')]['hasOwnProperty'](_0x0a9e('0x2e'))){_0x384319['limit']=qs[_0x0a9e('0x19')](_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x19')]);_0x384319[_0x0a9e('0x18')]=qs[_0x0a9e('0x18')](_0x33161b['query'][_0x0a9e('0x18')]);}_0x384319[_0x0a9e('0x2f')]=qs[_0x0a9e('0x30')](_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x30')]);_0x384319[_0x0a9e('0x31')]=qs[_0x0a9e('0x29')](_[_0x0a9e('0x32')](_0x33161b['query'],_0x479bc4[_0x0a9e('0x29')]));if(_0x33161b['query'][_0x0a9e('0x33')]){_0x384319[_0x0a9e('0x31')]=_[_0x0a9e('0x34')](_0x384319[_0x0a9e('0x31')],{'$or':_['map'](_0x5bfb33,function(_0x191e91){if(_0x191e91[_0x0a9e('0x35')][_0x0a9e('0x36')]!==_0x0a9e('0x37')){var _0x4853b1={};_0x4853b1[_0x191e91['field']]={'$like':'%'+_0x33161b[_0x0a9e('0x28')]['filter']+'%'};return _0x4853b1;}})});}_0x384319=_[_0x0a9e('0x34')]({},_0x384319,_0x33161b[_0x0a9e('0x38')]);var _0x381c37={'where':_0x384319[_0x0a9e('0x31')]};return db['UserProfileResource'][_0x0a9e('0x17')](_0x381c37)[_0x0a9e('0x1f')](function(_0x3cae){_0x45a1e7['count']=_0x3cae;if(_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x39')]){_0x384319[_0x0a9e('0x3a')]=[{'all':!![]}];}return db['UserProfileResource']['findAll'](_0x384319);})[_0x0a9e('0x1f')](function(_0x40d766){_0x45a1e7['rows']=_0x40d766;return _0x45a1e7;})[_0x0a9e('0x1f')](respondWithFilteredResult(_0x526cf3,_0x384319))[_0x0a9e('0x3b')](handleError(_0x526cf3,null));};exports[_0x0a9e('0x3c')]=function(_0x148f55,_0x4b38d9){var _0x5a594b={'raw':![],'where':{'id':_0x148f55[_0x0a9e('0x3d')]['id']}},_0x15e37d={};_0x15e37d['model']=_[_0x0a9e('0x27')](db[_0x0a9e('0x24')][_0x0a9e('0x25')]);_0x15e37d['query']=_[_0x0a9e('0x27')](_0x148f55[_0x0a9e('0x28')]);_0x15e37d[_0x0a9e('0x29')]=_[_0x0a9e('0x2b')](_0x15e37d[_0x0a9e('0x26')],_0x15e37d[_0x0a9e('0x28')]);_0x5a594b[_0x0a9e('0x2a')]=_[_0x0a9e('0x2b')](_0x15e37d[_0x0a9e('0x26')],qs[_0x0a9e('0x2c')](_0x148f55[_0x0a9e('0x28')][_0x0a9e('0x2c')]));_0x5a594b[_0x0a9e('0x2a')]=_0x5a594b[_0x0a9e('0x2a')][_0x0a9e('0x2d')]?_0x5a594b['attributes']:_0x15e37d['model'];if(_0x148f55[_0x0a9e('0x28')][_0x0a9e('0x39')]){_0x5a594b[_0x0a9e('0x3a')]=[{'all':!![]}];}_0x5a594b=_[_0x0a9e('0x34')]({},_0x5a594b,_0x148f55[_0x0a9e('0x38')]);return db[_0x0a9e('0x24')][_0x0a9e('0x3e')](_0x5a594b)[_0x0a9e('0x1f')](handleEntityNotFound(_0x4b38d9,null))[_0x0a9e('0x1f')](respondWithResult(_0x4b38d9,null))[_0x0a9e('0x3b')](handleError(_0x4b38d9,null));};exports[_0x0a9e('0x3f')]=function(_0x35ed4a,_0x5026aa){return db[_0x0a9e('0x24')][_0x0a9e('0x3f')](_0x35ed4a[_0x0a9e('0x40')],{})[_0x0a9e('0x1f')](respondWithResult(_0x5026aa,0xc9))[_0x0a9e('0x3b')](handleError(_0x5026aa,null));};exports[_0x0a9e('0x41')]=function(_0x21eb86,_0x44dd99){if(_0x21eb86['body']['id']){delete _0x21eb86[_0x0a9e('0x40')]['id'];}return db['UserProfileResource'][_0x0a9e('0x3e')]({'where':{'id':_0x21eb86[_0x0a9e('0x3d')]['id']}})[_0x0a9e('0x1f')](handleEntityNotFound(_0x44dd99,null))['then'](saveUpdates(_0x21eb86[_0x0a9e('0x40')],null))[_0x0a9e('0x1f')](respondWithResult(_0x44dd99,null))[_0x0a9e('0x3b')](handleError(_0x44dd99,null));};exports[_0x0a9e('0x42')]=function(_0x45c845,_0x37be73){return db[_0x0a9e('0x24')]['find']({'where':{'id':_0x45c845[_0x0a9e('0x3d')]['id']}})[_0x0a9e('0x1f')](handleEntityNotFound(_0x37be73,null))[_0x0a9e('0x1f')](removeEntity(_0x37be73,null))[_0x0a9e('0x3b')](handleError(_0x37be73,null));};exports[_0x0a9e('0x43')]=function(_0x992c77,_0x6054ee){return db[_0x0a9e('0x24')][_0x0a9e('0x43')]()['then'](respondWithResult(_0x6054ee,null))[_0x0a9e('0x3b')](handleError(_0x6054ee,null));};
\ No newline at end of file
index 241ac3b..3441b13 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc7ec=['bluebird','path','rimraf','../../config/environment','./userProfileResource.attributes','exports','define','UserProfileResource','user_profile_has_resources','resourceId','lodash','util','../../config/logger','api'];(function(_0x13b8f3,_0x442821){var _0x1a6d06=function(_0x5126f2){while(--_0x5126f2){_0x13b8f3['push'](_0x13b8f3['shift']());}};_0x1a6d06(++_0x442821);}(_0xc7ec,0x122));var _0xcc7e=function(_0x3d27ba,_0x2671a3){_0x3d27ba=_0x3d27ba-0x0;var _0xf01885=_0xc7ec[_0x3d27ba];return _0xf01885;};'use strict';var _=require(_0xcc7e('0x0'));var util=require(_0xcc7e('0x1'));var logger=require(_0xcc7e('0x2'))(_0xcc7e('0x3'));var moment=require('moment');var BPromise=require(_0xcc7e('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xcc7e('0x5'));var rimraf=require(_0xcc7e('0x6'));var config=require(_0xcc7e('0x7'));var attributes=require(_0xcc7e('0x8'));module[_0xcc7e('0x9')]=function(_0x2cca1c,_0x156c66){return _0x2cca1c[_0xcc7e('0xa')](_0xcc7e('0xb'),attributes,{'tableName':_0xcc7e('0xc'),'paranoid':![],'indexes':[{'name':'compositeIndex','fields':[_0xcc7e('0xd'),'sectionId']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x5478=['moment','bluebird','request-promise','path','rimraf','../../config/environment','./userProfileResource.attributes','exports','define','user_profile_has_resources','resourceId','sectionId','lodash','util','../../config/logger','api'];(function(_0xac2317,_0x4dfffe){var _0x351997=function(_0x18cddc){while(--_0x18cddc){_0xac2317['push'](_0xac2317['shift']());}};_0x351997(++_0x4dfffe);}(_0x5478,0x7c));var _0x8547=function(_0x3108d9,_0xf08d6){_0x3108d9=_0x3108d9-0x0;var _0x1455e6=_0x5478[_0x3108d9];return _0x1455e6;};'use strict';var _=require(_0x8547('0x0'));var util=require(_0x8547('0x1'));var logger=require(_0x8547('0x2'))(_0x8547('0x3'));var moment=require(_0x8547('0x4'));var BPromise=require(_0x8547('0x5'));var rp=require(_0x8547('0x6'));var fs=require('fs');var path=require(_0x8547('0x7'));var rimraf=require(_0x8547('0x8'));var config=require(_0x8547('0x9'));var attributes=require(_0x8547('0xa'));module[_0x8547('0xb')]=function(_0x3eca1b,_0x27cf38){return _0x3eca1b[_0x8547('0xc')]('UserProfileResource',attributes,{'tableName':_0x8547('0xd'),'paranoid':![],'indexes':[{'name':'compositeIndex','fields':[_0x8547('0xe'),_0x8547('0xf')]}],'timestamps':!![]});};
\ No newline at end of file
index c828db4..815cd01 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ca9=['info','UserProfileResource,\x20%s,\x20%s','request\x20sent','debug','UserProfileResource,\x20%s,\x20%s,\x20%s','stringify','error','message','result','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','rpc','jayson/promise','http','request','then'];(function(_0x4c9aa8,_0x415617){var _0x5163d3=function(_0x447021){while(--_0x447021){_0x4c9aa8['push'](_0x4c9aa8['shift']());}};_0x5163d3(++_0x415617);}(_0x8ca9,0x9c));var _0x98ca=function(_0x3d7d62,_0x110895){_0x3d7d62=_0x3d7d62-0x0;var _0x50c07c=_0x8ca9[_0x3d7d62];return _0x50c07c;};'use strict';var _=require(_0x98ca('0x0'));var util=require(_0x98ca('0x1'));var moment=require(_0x98ca('0x2'));var BPromise=require(_0x98ca('0x3'));var rs=require(_0x98ca('0x4'));var fs=require('fs');var Redis=require(_0x98ca('0x5'));var db=require(_0x98ca('0x6'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x98ca('0x7'));var config=require('../../config/environment');var jayson=require(_0x98ca('0x8'));var client=jayson['client'][_0x98ca('0x9')]({'port':0x232a});function respondWithRpcPromise(_0xca4097,_0x18c349,_0x2852a0){return new BPromise(function(_0x323c95,_0x28a37a){return client[_0x98ca('0xa')](_0xca4097,_0x2852a0)[_0x98ca('0xb')](function(_0x277c29){logger[_0x98ca('0xc')](_0x98ca('0xd'),_0x18c349,_0x98ca('0xe'));logger[_0x98ca('0xf')](_0x98ca('0x10'),_0x18c349,_0x98ca('0xe'),JSON[_0x98ca('0x11')](_0x277c29));if(_0x277c29[_0x98ca('0x12')]){if(_0x277c29[_0x98ca('0x12')]['code']===0x1f4){logger[_0x98ca('0x12')](_0x98ca('0xd'),_0x18c349,_0x277c29[_0x98ca('0x12')][_0x98ca('0x13')]);return _0x28a37a(_0x277c29['error'][_0x98ca('0x13')]);}logger[_0x98ca('0x12')](_0x98ca('0xd'),_0x18c349,_0x277c29[_0x98ca('0x12')][_0x98ca('0x13')]);return _0x323c95(_0x277c29[_0x98ca('0x12')][_0x98ca('0x13')]);}else{logger['info'](_0x98ca('0xd'),_0x18c349,_0x98ca('0xe'));_0x323c95(_0x277c29[_0x98ca('0x14')][_0x98ca('0x13')]);}})['catch'](function(_0x238c1a){logger[_0x98ca('0x12')](_0x98ca('0xd'),_0x18c349,_0x238c1a);_0x28a37a(_0x238c1a);});});}
\ No newline at end of file
+var _0x46ed=['UserProfileResource,\x20%s,\x20%s','debug','UserProfileResource,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','result','lodash','util','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info'];(function(_0x2dea24,_0x2fc021){var _0x309d58=function(_0x2eb89f){while(--_0x2eb89f){_0x2dea24['push'](_0x2dea24['shift']());}};_0x309d58(++_0x2fc021);}(_0x46ed,0x168));var _0xd46e=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0x46ed[_0x122ef9];return _0x42fba0;};'use strict';var _=require(_0xd46e('0x0'));var util=require(_0xd46e('0x1'));var moment=require('moment');var BPromise=require(_0xd46e('0x2'));var rs=require(_0xd46e('0x3'));var fs=require('fs');var Redis=require(_0xd46e('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0xd46e('0x5'));var logger=require(_0xd46e('0x6'))('rpc');var config=require(_0xd46e('0x7'));var jayson=require(_0xd46e('0x8'));var client=jayson[_0xd46e('0x9')][_0xd46e('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x45e680,_0x855f24,_0x437ea0){return new BPromise(function(_0x144687,_0x31259b){return client[_0xd46e('0xb')](_0x45e680,_0x437ea0)[_0xd46e('0xc')](function(_0x59c88d){logger[_0xd46e('0xd')](_0xd46e('0xe'),_0x855f24,'request\x20sent');logger[_0xd46e('0xf')](_0xd46e('0x10'),_0x855f24,_0xd46e('0x11'),JSON[_0xd46e('0x12')](_0x59c88d));if(_0x59c88d[_0xd46e('0x13')]){if(_0x59c88d[_0xd46e('0x13')]['code']===0x1f4){logger[_0xd46e('0x13')]('UserProfileResource,\x20%s,\x20%s',_0x855f24,_0x59c88d['error'][_0xd46e('0x14')]);return _0x31259b(_0x59c88d[_0xd46e('0x13')]['message']);}logger['error'](_0xd46e('0xe'),_0x855f24,_0x59c88d[_0xd46e('0x13')][_0xd46e('0x14')]);return _0x144687(_0x59c88d[_0xd46e('0x13')]['message']);}else{logger[_0xd46e('0xd')](_0xd46e('0xe'),_0x855f24,_0xd46e('0x11'));_0x144687(_0x59c88d[_0xd46e('0x15')][_0xd46e('0x14')]);}})['catch'](function(_0x1d50a5){logger[_0xd46e('0x13')](_0xd46e('0xe'),_0x855f24,_0x1d50a5);_0x31259b(_0x1d50a5);});});}
\ No newline at end of file
index 145233f..2fd2da4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9278=['/describe','isAuthenticated','describe','show','post','create','put','/:id','update','delete','destroy','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index'];(function(_0x2c5784,_0x151f1e){var _0x5399c6=function(_0x58ea33){while(--_0x58ea33){_0x2c5784['push'](_0x2c5784['shift']());}};_0x5399c6(++_0x151f1e);}(_0x9278,0x79));var _0x8927=function(_0x2be8c2,_0x14a4b5){_0x2be8c2=_0x2be8c2-0x0;var _0x97f531=_0x9278[_0x2be8c2];return _0x97f531;};'use strict';var multer=require(_0x8927('0x0'));var util=require(_0x8927('0x1'));var path=require(_0x8927('0x2'));var timeout=require(_0x8927('0x3'));var express=require(_0x8927('0x4'));var router=express[_0x8927('0x5')]();var auth=require(_0x8927('0x6'));var interaction=require(_0x8927('0x7'));var config=require(_0x8927('0x8'));var controller=require('./userProfileSection.controller');router[_0x8927('0x9')]('/',auth['isAuthenticated'](),controller[_0x8927('0xa')]);router[_0x8927('0x9')](_0x8927('0xb'),auth[_0x8927('0xc')](),controller[_0x8927('0xd')]);router[_0x8927('0x9')]('/:id',auth[_0x8927('0xc')](),controller[_0x8927('0xe')]);router[_0x8927('0xf')]('/',auth[_0x8927('0xc')](),controller[_0x8927('0x10')]);router[_0x8927('0x11')](_0x8927('0x12'),auth[_0x8927('0xc')](),controller[_0x8927('0x13')]);router[_0x8927('0x14')](_0x8927('0x12'),auth['isAuthenticated'](),controller[_0x8927('0x15')]);module['exports']=router;
\ No newline at end of file
+var _0x24ab=['delete','destroy','multer','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./userProfileSection.controller','isAuthenticated','index','get','describe','/:id','post','create','update'];(function(_0x46df85,_0x52f339){var _0x1411b8=function(_0x400d69){while(--_0x400d69){_0x46df85['push'](_0x46df85['shift']());}};_0x1411b8(++_0x52f339);}(_0x24ab,0x80));var _0xb24a=function(_0x14d93b,_0x571573){_0x14d93b=_0x14d93b-0x0;var _0x2869a4=_0x24ab[_0x14d93b];return _0x2869a4;};'use strict';var multer=require(_0xb24a('0x0'));var util=require('util');var path=require(_0xb24a('0x1'));var timeout=require(_0xb24a('0x2'));var express=require(_0xb24a('0x3'));var router=express[_0xb24a('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xb24a('0x5'));var config=require(_0xb24a('0x6'));var controller=require(_0xb24a('0x7'));router['get']('/',auth[_0xb24a('0x8')](),controller[_0xb24a('0x9')]);router[_0xb24a('0xa')]('/describe',auth[_0xb24a('0x8')](),controller[_0xb24a('0xb')]);router[_0xb24a('0xa')](_0xb24a('0xc'),auth[_0xb24a('0x8')](),controller['show']);router[_0xb24a('0xd')]('/',auth[_0xb24a('0x8')](),controller[_0xb24a('0xe')]);router['put']('/:id',auth[_0xb24a('0x8')](),controller[_0xb24a('0xf')]);router[_0xb24a('0x10')](_0xb24a('0xc'),auth[_0xb24a('0x8')](),controller[_0xb24a('0x11')]);module['exports']=router;
\ No newline at end of file
index 4c5fa85..ec73fb8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34e8=['setDataValue','crudPermissions','join','split','sequelize','exports','STRING','BOOLEAN'];(function(_0x4b0e01,_0x12291b){var _0x500ce0=function(_0x2b8b91){while(--_0x2b8b91){_0x4b0e01['push'](_0x4b0e01['shift']());}};_0x500ce0(++_0x12291b);}(_0x34e8,0x12c));var _0x834e=function(_0x4503f7,_0x531957){_0x4503f7=_0x4503f7-0x0;var _0x36c28d=_0x34e8[_0x4503f7];return _0x36c28d;};'use strict';var Sequelize=require(_0x834e('0x0'));module[_0x834e('0x1')]={'name':{'type':Sequelize[_0x834e('0x2')],'allowNull':![]},'category':{'type':Sequelize[_0x834e('0x2')],'allowNull':![]},'sectionId':{'type':Sequelize['INTEGER'],'allowNull':![]},'enabled':{'type':Sequelize[_0x834e('0x3')],'defaultValue':null},'autoAssociation':{'type':Sequelize[_0x834e('0x3')],'defaultValue':null},'crudPermissions':{'type':Sequelize[_0x834e('0x2')],'set':function(_0x31bf20){this[_0x834e('0x4')](_0x834e('0x5'),_0x31bf20?_0x31bf20[_0x834e('0x6')](''):[]);},'get':function(){return this['getDataValue'](_0x834e('0x5'))?this['getDataValue'](_0x834e('0x5'))[_0x834e('0x7')](''):[];}}};
\ No newline at end of file
+var _0xedd9=['exports','STRING','INTEGER','BOOLEAN','crudPermissions','join','getDataValue'];(function(_0x52d919,_0x5f2e36){var _0x446dad=function(_0x513aea){while(--_0x513aea){_0x52d919['push'](_0x52d919['shift']());}};_0x446dad(++_0x5f2e36);}(_0xedd9,0xfc));var _0x9edd=function(_0x54401b,_0x480134){_0x54401b=_0x54401b-0x0;var _0x7cb698=_0xedd9[_0x54401b];return _0x7cb698;};'use strict';var Sequelize=require('sequelize');module[_0x9edd('0x0')]={'name':{'type':Sequelize[_0x9edd('0x1')],'allowNull':![]},'category':{'type':Sequelize[_0x9edd('0x1')],'allowNull':![]},'sectionId':{'type':Sequelize[_0x9edd('0x2')],'allowNull':![]},'enabled':{'type':Sequelize[_0x9edd('0x3')],'defaultValue':null},'autoAssociation':{'type':Sequelize[_0x9edd('0x3')],'defaultValue':null},'crudPermissions':{'type':Sequelize[_0x9edd('0x1')],'set':function(_0x36b53f){this['setDataValue'](_0x9edd('0x4'),_0x36b53f?_0x36b53f[_0x9edd('0x5')](''):[]);},'get':function(){return this[_0x9edd('0x6')](_0x9edd('0x4'))?this['getDataValue'](_0x9edd('0x4'))['split'](''):[];}}};
\ No newline at end of file
index e8d70da..d444775 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb90a=['intersection','fields','attributes','length','hasOwnProperty','order','sort','pick','where','merge','type','key','VIRTUAL','field','filter','options','UserProfileSection','includeAll','catch','show','include','find','create','body','params','describe','html-pdf','eml-format','zip-dir','util','path','ejs','lodash','squel','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','Content-Range','save','update','then','destroy','stack','name','send','index','rawAttributes','model','keys','query','filters'];(function(_0x4aa4e6,_0x278c45){var _0x322588=function(_0x19279d){while(--_0x19279d){_0x4aa4e6['push'](_0x4aa4e6['shift']());}};_0x322588(++_0x278c45);}(_0xb90a,0x12a));var _0xab90=function(_0x38e31a,_0x43dc19){_0x38e31a=_0x38e31a-0x0;var _0x3e6817=_0xb90a[_0x38e31a];return _0x3e6817;};'use strict';var pdf=require(_0xab90('0x0'));var emlformat=require(_0xab90('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xab90('0x2'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0xab90('0x3'));var path=require(_0xab90('0x4'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xab90('0x5'));var fs=require('fs');var _=require(_0xab90('0x6'));var squel=require(_0xab90('0x7'));var crypto=require('crypto');var jsforce=require(_0xab90('0x8'));var deskjs=require(_0xab90('0x9'));var toCsv=require(_0xab90('0xa'));var querystring=require(_0xab90('0xb'));var Papa=require(_0xab90('0xc'));var Redis=require(_0xab90('0xd'));var authService=require(_0xab90('0xe'));var qs=require(_0xab90('0xf'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xab90('0x10'))(_0xab90('0x11'));var utils=require(_0xab90('0x12'));var config=require(_0xab90('0x13'));var db=require(_0xab90('0x14'))['db'];function respondWithStatusCode(_0x5a00c9,_0x1dd739){_0x1dd739=_0x1dd739||0xcc;return function(_0x97ab00){if(_0x97ab00){return _0x5a00c9[_0xab90('0x15')](_0x1dd739);}return _0x5a00c9[_0xab90('0x16')](_0x1dd739)[_0xab90('0x17')]();};}function respondWithResult(_0x46c5e5,_0x57a03d){_0x57a03d=_0x57a03d||0xc8;return function(_0x11e95a){if(_0x11e95a){return _0x46c5e5[_0xab90('0x16')](_0x57a03d)[_0xab90('0x18')](_0x11e95a);}};}function respondWithFilteredResult(_0x9abf7c,_0x29f352){return function(_0x1c3d44){if(_0x1c3d44){var _0x556828=_0x1c3d44[_0xab90('0x19')],_0x282723=_0x29f352['offset'],_0x5b68bd=_0x29f352[_0xab90('0x1a')]+_0x29f352[_0xab90('0x1b')],_0x78ce5a;if(_0x5b68bd>=_0x556828){_0x5b68bd=_0x556828;_0x78ce5a=0xc8;}else{_0x78ce5a=0xce;}_0x9abf7c[_0xab90('0x16')](_0x78ce5a);return _0x9abf7c['set'](_0xab90('0x1c'),_0x282723+'-'+_0x5b68bd+'/'+_0x556828)[_0xab90('0x18')](_0x1c3d44);}return null;};}function patchUpdates(_0x1d5222){return function(_0x1ff44e){try{jsonpatch['apply'](_0x1ff44e,_0x1d5222,!![]);}catch(_0x2f6904){return BPromise['reject'](_0x2f6904);}return _0x1ff44e[_0xab90('0x1d')]();};}function saveUpdates(_0x5d5dda,_0x12b19a){return function(_0x143d54){if(_0x143d54){return _0x143d54[_0xab90('0x1e')](_0x5d5dda)[_0xab90('0x1f')](function(_0x5d5c1c){return _0x5d5c1c;});}return null;};}function removeEntity(_0x351bf1,_0x327631){return function(_0x2fa268){if(_0x2fa268){return _0x2fa268[_0xab90('0x20')]()[_0xab90('0x1f')](function(){_0x351bf1[_0xab90('0x16')](0xcc)[_0xab90('0x17')]();});}};}function handleEntityNotFound(_0x210b5e,_0x84eb68){return function(_0x2cdc7f){if(!_0x2cdc7f){_0x210b5e[_0xab90('0x15')](0x194);}return _0x2cdc7f;};}function handleError(_0x23c089,_0x1c680c){_0x1c680c=_0x1c680c||0x1f4;return function(_0x195e90){logger['error'](_0x195e90[_0xab90('0x21')]);if(_0x195e90[_0xab90('0x22')]){delete _0x195e90[_0xab90('0x22')];}_0x23c089[_0xab90('0x16')](_0x1c680c)[_0xab90('0x23')](_0x195e90);};}exports[_0xab90('0x24')]=function(_0x2cad38,_0x20ce8a){var _0x1a79d0={},_0x52acf0={},_0x38b3ae={'count':0x0,'rows':[]};var _0x4642a9=db['UserProfileSection'][_0xab90('0x25')];_0x52acf0[_0xab90('0x26')]=_[_0xab90('0x27')](_0x4642a9);_0x52acf0[_0xab90('0x28')]=_[_0xab90('0x27')](_0x2cad38[_0xab90('0x28')]);_0x52acf0[_0xab90('0x29')]=_[_0xab90('0x2a')](_0x52acf0[_0xab90('0x26')],_0x52acf0[_0xab90('0x28')]);_0x1a79d0['attributes']=_['intersection'](_0x52acf0['model'],qs[_0xab90('0x2b')](_0x2cad38['query'][_0xab90('0x2b')]));_0x1a79d0[_0xab90('0x2c')]=_0x1a79d0[_0xab90('0x2c')][_0xab90('0x2d')]?_0x1a79d0['attributes']:_0x52acf0[_0xab90('0x26')];if(!_0x2cad38[_0xab90('0x28')][_0xab90('0x2e')]('nolimit')){_0x1a79d0['limit']=qs[_0xab90('0x1b')](_0x2cad38[_0xab90('0x28')][_0xab90('0x1b')]);_0x1a79d0[_0xab90('0x1a')]=qs[_0xab90('0x1a')](_0x2cad38[_0xab90('0x28')][_0xab90('0x1a')]);}_0x1a79d0[_0xab90('0x2f')]=qs[_0xab90('0x30')](_0x2cad38[_0xab90('0x28')][_0xab90('0x30')]);_0x1a79d0['where']=qs[_0xab90('0x29')](_[_0xab90('0x31')](_0x2cad38[_0xab90('0x28')],_0x52acf0[_0xab90('0x29')]));if(_0x2cad38[_0xab90('0x28')]['filter']){_0x1a79d0[_0xab90('0x32')]=_[_0xab90('0x33')](_0x1a79d0[_0xab90('0x32')],{'$or':_['map'](_0x4642a9,function(_0x24031c){if(_0x24031c[_0xab90('0x34')][_0xab90('0x35')]!==_0xab90('0x36')){var _0x36e83b={};_0x36e83b[_0x24031c[_0xab90('0x37')]]={'$like':'%'+_0x2cad38['query'][_0xab90('0x38')]+'%'};return _0x36e83b;}})});}_0x1a79d0=_['merge']({},_0x1a79d0,_0x2cad38[_0xab90('0x39')]);var _0xe310d1={'where':_0x1a79d0['where']};return db[_0xab90('0x3a')]['count'](_0xe310d1)[_0xab90('0x1f')](function(_0xda35a0){_0x38b3ae[_0xab90('0x19')]=_0xda35a0;if(_0x2cad38[_0xab90('0x28')][_0xab90('0x3b')]){_0x1a79d0['include']=[{'all':!![]}];}return db[_0xab90('0x3a')]['findAll'](_0x1a79d0);})[_0xab90('0x1f')](function(_0x1fadc9){_0x38b3ae['rows']=_0x1fadc9;return _0x38b3ae;})[_0xab90('0x1f')](respondWithFilteredResult(_0x20ce8a,_0x1a79d0))[_0xab90('0x3c')](handleError(_0x20ce8a,null));};exports[_0xab90('0x3d')]=function(_0x5557a4,_0x313469){var _0x12ba0b={'raw':![],'where':{'id':_0x5557a4['params']['id']}},_0x4e0bc7={};_0x4e0bc7[_0xab90('0x26')]=_[_0xab90('0x27')](db[_0xab90('0x3a')][_0xab90('0x25')]);_0x4e0bc7[_0xab90('0x28')]=_[_0xab90('0x27')](_0x5557a4[_0xab90('0x28')]);_0x4e0bc7['filters']=_[_0xab90('0x2a')](_0x4e0bc7['model'],_0x4e0bc7[_0xab90('0x28')]);_0x12ba0b['attributes']=_[_0xab90('0x2a')](_0x4e0bc7[_0xab90('0x26')],qs[_0xab90('0x2b')](_0x5557a4[_0xab90('0x28')][_0xab90('0x2b')]));_0x12ba0b[_0xab90('0x2c')]=_0x12ba0b[_0xab90('0x2c')][_0xab90('0x2d')]?_0x12ba0b['attributes']:_0x4e0bc7['model'];if(_0x5557a4['query']['includeAll']){_0x12ba0b[_0xab90('0x3e')]=[{'all':!![]}];}_0x12ba0b=_['merge']({},_0x12ba0b,_0x5557a4[_0xab90('0x39')]);return db[_0xab90('0x3a')][_0xab90('0x3f')](_0x12ba0b)[_0xab90('0x1f')](handleEntityNotFound(_0x313469,null))[_0xab90('0x1f')](respondWithResult(_0x313469,null))['catch'](handleError(_0x313469,null));};exports[_0xab90('0x40')]=function(_0x4e5655,_0x4410dc){return db[_0xab90('0x3a')]['create'](_0x4e5655[_0xab90('0x41')],{})[_0xab90('0x1f')](respondWithResult(_0x4410dc,0xc9))[_0xab90('0x3c')](handleError(_0x4410dc,null));};exports[_0xab90('0x1e')]=function(_0x22aa04,_0x2ba4cb){if(_0x22aa04['body']['id']){delete _0x22aa04[_0xab90('0x41')]['id'];}return db['UserProfileSection'][_0xab90('0x3f')]({'where':{'id':_0x22aa04['params']['id']}})[_0xab90('0x1f')](handleEntityNotFound(_0x2ba4cb,null))['then'](saveUpdates(_0x22aa04[_0xab90('0x41')],null))['then'](respondWithResult(_0x2ba4cb,null))['catch'](handleError(_0x2ba4cb,null));};exports['destroy']=function(_0x1bd4bd,_0x1bb19f){return db[_0xab90('0x3a')][_0xab90('0x3f')]({'where':{'id':_0x1bd4bd[_0xab90('0x42')]['id']}})[_0xab90('0x1f')](handleEntityNotFound(_0x1bb19f,null))[_0xab90('0x1f')](removeEntity(_0x1bb19f,null))[_0xab90('0x3c')](handleError(_0x1bb19f,null));};exports[_0xab90('0x43')]=function(_0x4c416d,_0x2a8860){return db[_0xab90('0x3a')][_0xab90('0x43')]()['then'](respondWithResult(_0x2a8860,null))['catch'](handleError(_0x2a8860,null));};
\ No newline at end of file
+var _0x7c71=['type','key','filter','merge','options','includeAll','include','findAll','catch','show','find','create','body','params','describe','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../mysqldb','sendStatus','end','status','json','count','offset','set','apply','save','update','then','destroy','error','stack','name','index','UserProfileSection','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick'];(function(_0xdbb6cb,_0x3b8fda){var _0x476b50=function(_0x470ebb){while(--_0x470ebb){_0xdbb6cb['push'](_0xdbb6cb['shift']());}};_0x476b50(++_0x3b8fda);}(_0x7c71,0x177));var _0x17c7=function(_0x432682,_0x253044){_0x432682=_0x432682-0x0;var _0x463d05=_0x7c71[_0x432682];return _0x463d05;};'use strict';var pdf=require(_0x17c7('0x0'));var emlformat=require(_0x17c7('0x1'));var rimraf=require(_0x17c7('0x2'));var zipdir=require(_0x17c7('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x17c7('0x4'));var moment=require(_0x17c7('0x5'));var BPromise=require(_0x17c7('0x6'));var Mustache=require('mustache');var util=require('util');var path=require(_0x17c7('0x7'));var sox=require(_0x17c7('0x8'));var csv=require(_0x17c7('0x9'));var ejs=require(_0x17c7('0xa'));var fs=require('fs');var _=require(_0x17c7('0xb'));var squel=require(_0x17c7('0xc'));var crypto=require(_0x17c7('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x17c7('0xe'));var toCsv=require(_0x17c7('0x9'));var querystring=require(_0x17c7('0xf'));var Papa=require(_0x17c7('0x10'));var Redis=require(_0x17c7('0x11'));var authService=require(_0x17c7('0x12'));var qs=require(_0x17c7('0x13'));var hardwareService=require(_0x17c7('0x14'));var logger=require(_0x17c7('0x15'))(_0x17c7('0x16'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x17c7('0x17'))['db'];function respondWithStatusCode(_0x15b780,_0x501d58){_0x501d58=_0x501d58||0xcc;return function(_0x430506){if(_0x430506){return _0x15b780[_0x17c7('0x18')](_0x501d58);}return _0x15b780['status'](_0x501d58)[_0x17c7('0x19')]();};}function respondWithResult(_0x3c9d93,_0x48be80){_0x48be80=_0x48be80||0xc8;return function(_0x56ef3b){if(_0x56ef3b){return _0x3c9d93[_0x17c7('0x1a')](_0x48be80)[_0x17c7('0x1b')](_0x56ef3b);}};}function respondWithFilteredResult(_0x257c43,_0x19e219){return function(_0x3d0fb2){if(_0x3d0fb2){var _0x2851=_0x3d0fb2[_0x17c7('0x1c')],_0x2c992f=_0x19e219[_0x17c7('0x1d')],_0x295168=_0x19e219[_0x17c7('0x1d')]+_0x19e219['limit'],_0xa06e65;if(_0x295168>=_0x2851){_0x295168=_0x2851;_0xa06e65=0xc8;}else{_0xa06e65=0xce;}_0x257c43[_0x17c7('0x1a')](_0xa06e65);return _0x257c43[_0x17c7('0x1e')]('Content-Range',_0x2c992f+'-'+_0x295168+'/'+_0x2851)[_0x17c7('0x1b')](_0x3d0fb2);}return null;};}function patchUpdates(_0x34da57){return function(_0x2c652c){try{jsonpatch[_0x17c7('0x1f')](_0x2c652c,_0x34da57,!![]);}catch(_0x5b9e72){return BPromise['reject'](_0x5b9e72);}return _0x2c652c[_0x17c7('0x20')]();};}function saveUpdates(_0x175b56,_0x13b756){return function(_0x86956b){if(_0x86956b){return _0x86956b[_0x17c7('0x21')](_0x175b56)[_0x17c7('0x22')](function(_0x357c27){return _0x357c27;});}return null;};}function removeEntity(_0x5d324c,_0x1e511e){return function(_0x3885c8){if(_0x3885c8){return _0x3885c8[_0x17c7('0x23')]()[_0x17c7('0x22')](function(){_0x5d324c[_0x17c7('0x1a')](0xcc)[_0x17c7('0x19')]();});}};}function handleEntityNotFound(_0x29a4ac,_0x196e0e){return function(_0x512c3c){if(!_0x512c3c){_0x29a4ac[_0x17c7('0x18')](0x194);}return _0x512c3c;};}function handleError(_0x11bcf0,_0x26e280){_0x26e280=_0x26e280||0x1f4;return function(_0x4e1316){logger[_0x17c7('0x24')](_0x4e1316[_0x17c7('0x25')]);if(_0x4e1316['name']){delete _0x4e1316[_0x17c7('0x26')];}_0x11bcf0[_0x17c7('0x1a')](_0x26e280)['send'](_0x4e1316);};}exports[_0x17c7('0x27')]=function(_0x4d2460,_0x463ff2){var _0x2e2c7a={},_0x4a61f4={},_0x42b7f2={'count':0x0,'rows':[]};var _0x7ecd2b=db[_0x17c7('0x28')][_0x17c7('0x29')];_0x4a61f4[_0x17c7('0x2a')]=_[_0x17c7('0x2b')](_0x7ecd2b);_0x4a61f4[_0x17c7('0x2c')]=_[_0x17c7('0x2b')](_0x4d2460[_0x17c7('0x2c')]);_0x4a61f4[_0x17c7('0x2d')]=_[_0x17c7('0x2e')](_0x4a61f4[_0x17c7('0x2a')],_0x4a61f4[_0x17c7('0x2c')]);_0x2e2c7a[_0x17c7('0x2f')]=_['intersection'](_0x4a61f4[_0x17c7('0x2a')],qs['fields'](_0x4d2460[_0x17c7('0x2c')][_0x17c7('0x30')]));_0x2e2c7a[_0x17c7('0x2f')]=_0x2e2c7a[_0x17c7('0x2f')][_0x17c7('0x31')]?_0x2e2c7a['attributes']:_0x4a61f4['model'];if(!_0x4d2460[_0x17c7('0x2c')][_0x17c7('0x32')](_0x17c7('0x33'))){_0x2e2c7a[_0x17c7('0x34')]=qs[_0x17c7('0x34')](_0x4d2460[_0x17c7('0x2c')][_0x17c7('0x34')]);_0x2e2c7a[_0x17c7('0x1d')]=qs[_0x17c7('0x1d')](_0x4d2460['query'][_0x17c7('0x1d')]);}_0x2e2c7a[_0x17c7('0x35')]=qs[_0x17c7('0x36')](_0x4d2460['query'][_0x17c7('0x36')]);_0x2e2c7a[_0x17c7('0x37')]=qs[_0x17c7('0x2d')](_[_0x17c7('0x38')](_0x4d2460[_0x17c7('0x2c')],_0x4a61f4[_0x17c7('0x2d')]));if(_0x4d2460[_0x17c7('0x2c')]['filter']){_0x2e2c7a['where']=_['merge'](_0x2e2c7a[_0x17c7('0x37')],{'$or':_['map'](_0x7ecd2b,function(_0x1747a7){if(_0x1747a7[_0x17c7('0x39')][_0x17c7('0x3a')]!=='VIRTUAL'){var _0x265927={};_0x265927[_0x1747a7['field']]={'$like':'%'+_0x4d2460['query'][_0x17c7('0x3b')]+'%'};return _0x265927;}})});}_0x2e2c7a=_[_0x17c7('0x3c')]({},_0x2e2c7a,_0x4d2460[_0x17c7('0x3d')]);var _0x2b8023={'where':_0x2e2c7a[_0x17c7('0x37')]};return db[_0x17c7('0x28')][_0x17c7('0x1c')](_0x2b8023)[_0x17c7('0x22')](function(_0x395ca5){_0x42b7f2[_0x17c7('0x1c')]=_0x395ca5;if(_0x4d2460['query'][_0x17c7('0x3e')]){_0x2e2c7a[_0x17c7('0x3f')]=[{'all':!![]}];}return db[_0x17c7('0x28')][_0x17c7('0x40')](_0x2e2c7a);})[_0x17c7('0x22')](function(_0xbd845c){_0x42b7f2['rows']=_0xbd845c;return _0x42b7f2;})[_0x17c7('0x22')](respondWithFilteredResult(_0x463ff2,_0x2e2c7a))[_0x17c7('0x41')](handleError(_0x463ff2,null));};exports[_0x17c7('0x42')]=function(_0x21f15d,_0x227441){var _0x21917c={'raw':![],'where':{'id':_0x21f15d['params']['id']}},_0x2c0f92={};_0x2c0f92['model']=_[_0x17c7('0x2b')](db[_0x17c7('0x28')][_0x17c7('0x29')]);_0x2c0f92[_0x17c7('0x2c')]=_[_0x17c7('0x2b')](_0x21f15d['query']);_0x2c0f92[_0x17c7('0x2d')]=_[_0x17c7('0x2e')](_0x2c0f92['model'],_0x2c0f92[_0x17c7('0x2c')]);_0x21917c[_0x17c7('0x2f')]=_['intersection'](_0x2c0f92[_0x17c7('0x2a')],qs[_0x17c7('0x30')](_0x21f15d[_0x17c7('0x2c')]['fields']));_0x21917c['attributes']=_0x21917c[_0x17c7('0x2f')][_0x17c7('0x31')]?_0x21917c[_0x17c7('0x2f')]:_0x2c0f92['model'];if(_0x21f15d[_0x17c7('0x2c')]['includeAll']){_0x21917c[_0x17c7('0x3f')]=[{'all':!![]}];}_0x21917c=_['merge']({},_0x21917c,_0x21f15d[_0x17c7('0x3d')]);return db[_0x17c7('0x28')][_0x17c7('0x43')](_0x21917c)['then'](handleEntityNotFound(_0x227441,null))[_0x17c7('0x22')](respondWithResult(_0x227441,null))[_0x17c7('0x41')](handleError(_0x227441,null));};exports[_0x17c7('0x44')]=function(_0xd80635,_0x4538f3){return db[_0x17c7('0x28')][_0x17c7('0x44')](_0xd80635[_0x17c7('0x45')],{})[_0x17c7('0x22')](respondWithResult(_0x4538f3,0xc9))[_0x17c7('0x41')](handleError(_0x4538f3,null));};exports['update']=function(_0xd8de4c,_0x4a37e5){if(_0xd8de4c[_0x17c7('0x45')]['id']){delete _0xd8de4c['body']['id'];}return db[_0x17c7('0x28')]['find']({'where':{'id':_0xd8de4c[_0x17c7('0x46')]['id']}})[_0x17c7('0x22')](handleEntityNotFound(_0x4a37e5,null))['then'](saveUpdates(_0xd8de4c['body'],null))[_0x17c7('0x22')](respondWithResult(_0x4a37e5,null))[_0x17c7('0x41')](handleError(_0x4a37e5,null));};exports[_0x17c7('0x23')]=function(_0x32d007,_0x2f1136){return db[_0x17c7('0x28')][_0x17c7('0x43')]({'where':{'id':_0x32d007[_0x17c7('0x46')]['id']}})['then'](handleEntityNotFound(_0x2f1136,null))[_0x17c7('0x22')](removeEntity(_0x2f1136,null))[_0x17c7('0x41')](handleError(_0x2f1136,null));};exports[_0x17c7('0x47')]=function(_0x4821b0,_0x1c7ed9){return db[_0x17c7('0x28')][_0x17c7('0x47')]()['then'](respondWithResult(_0x1c7ed9,null))[_0x17c7('0x41')](handleError(_0x1c7ed9,null));};
\ No newline at end of file
index 519b4e2..6b542c3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2b6d=['define','UserProfileSection','user_profile_has_sections','compositeIndex','userProfileId','lodash','util','../../config/logger','moment','bluebird','request-promise','rimraf','../../config/environment','./userProfileSection.attributes','exports'];(function(_0x2695c8,_0x534298){var _0x957b8d=function(_0x255996){while(--_0x255996){_0x2695c8['push'](_0x2695c8['shift']());}};_0x957b8d(++_0x534298);}(_0x2b6d,0x1d6));var _0xd2b6=function(_0x434fc8,_0x415c49){_0x434fc8=_0x434fc8-0x0;var _0xcb03ce=_0x2b6d[_0x434fc8];return _0xcb03ce;};'use strict';var _=require(_0xd2b6('0x0'));var util=require(_0xd2b6('0x1'));var logger=require(_0xd2b6('0x2'))('api');var moment=require(_0xd2b6('0x3'));var BPromise=require(_0xd2b6('0x4'));var rp=require(_0xd2b6('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0xd2b6('0x6'));var config=require(_0xd2b6('0x7'));var attributes=require(_0xd2b6('0x8'));module[_0xd2b6('0x9')]=function(_0x1b3e84,_0x930641){return _0x1b3e84[_0xd2b6('0xa')](_0xd2b6('0xb'),attributes,{'tableName':_0xd2b6('0xc'),'paranoid':![],'indexes':[{'name':_0xd2b6('0xd'),'fields':['sectionId',_0xd2b6('0xe')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xd29e=['define','sectionId','userProfileId','util','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','exports'];(function(_0x4fc77b,_0x528185){var _0x3e1583=function(_0x4d5f27){while(--_0x4d5f27){_0x4fc77b['push'](_0x4fc77b['shift']());}};_0x3e1583(++_0x528185);}(_0xd29e,0x1a7));var _0xed29=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xd29e[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require(_0xed29('0x0'));var logger=require(_0xed29('0x1'))(_0xed29('0x2'));var moment=require(_0xed29('0x3'));var BPromise=require(_0xed29('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xed29('0x5'));var rimraf=require(_0xed29('0x6'));var config=require(_0xed29('0x7'));var attributes=require('./userProfileSection.attributes');module[_0xed29('0x8')]=function(_0x1cd7de,_0x3b1660){return _0x1cd7de[_0xed29('0x9')]('UserProfileSection',attributes,{'tableName':'user_profile_has_sections','paranoid':![],'indexes':[{'name':'compositeIndex','fields':[_0xed29('0xa'),_0xed29('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index ce301d7..6e5b210 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x995a=['stringify','error','message','UserProfileSection,\x20%s,\x20%s','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','then','debug','UserProfileSection,\x20%s,\x20%s,\x20%s','request\x20sent'];(function(_0x3ef5bb,_0x27e3ac){var _0x59d620=function(_0x46cd45){while(--_0x46cd45){_0x3ef5bb['push'](_0x3ef5bb['shift']());}};_0x59d620(++_0x27e3ac);}(_0x995a,0x176));var _0xa995=function(_0x230bdd,_0x3317c8){_0x230bdd=_0x230bdd-0x0;var _0x4e8e47=_0x995a[_0x230bdd];return _0x4e8e47;};'use strict';var _=require(_0xa995('0x0'));var util=require(_0xa995('0x1'));var moment=require(_0xa995('0x2'));var BPromise=require(_0xa995('0x3'));var rs=require(_0xa995('0x4'));var fs=require('fs');var Redis=require(_0xa995('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xa995('0x6'));var logger=require(_0xa995('0x7'))(_0xa995('0x8'));var config=require(_0xa995('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xa995('0xa')][_0xa995('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x353cf6,_0x323f41,_0x273408){return new BPromise(function(_0x44ca95,_0x478bdf){return client[_0xa995('0xc')](_0x353cf6,_0x273408)[_0xa995('0xd')](function(_0x50c3bd){logger['info']('UserProfileSection,\x20%s,\x20%s',_0x323f41,'request\x20sent');logger[_0xa995('0xe')](_0xa995('0xf'),_0x323f41,_0xa995('0x10'),JSON[_0xa995('0x11')](_0x50c3bd));if(_0x50c3bd[_0xa995('0x12')]){if(_0x50c3bd[_0xa995('0x12')]['code']===0x1f4){logger['error']('UserProfileSection,\x20%s,\x20%s',_0x323f41,_0x50c3bd[_0xa995('0x12')]['message']);return _0x478bdf(_0x50c3bd['error'][_0xa995('0x13')]);}logger[_0xa995('0x12')](_0xa995('0x14'),_0x323f41,_0x50c3bd['error'][_0xa995('0x13')]);return _0x44ca95(_0x50c3bd['error'][_0xa995('0x13')]);}else{logger['info'](_0xa995('0x14'),_0x323f41,_0xa995('0x10'));_0x44ca95(_0x50c3bd[_0xa995('0x15')]['message']);}})[_0xa995('0x16')](function(_0x3ec2bd){logger[_0xa995('0x12')](_0xa995('0x14'),_0x323f41,_0x3ec2bd);_0x478bdf(_0x3ec2bd);});});}
\ No newline at end of file
+var _0xe773=['UserProfileSection,\x20%s,\x20%s','request\x20sent','stringify','error','message','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','then','info'];(function(_0x272ea6,_0x3f0673){var _0x43ef03=function(_0x2307e2){while(--_0x2307e2){_0x272ea6['push'](_0x272ea6['shift']());}};_0x43ef03(++_0x3f0673);}(_0xe773,0x117));var _0x3e77=function(_0x25a96f,_0x436f51){_0x25a96f=_0x25a96f-0x0;var _0x482775=_0xe773[_0x25a96f];return _0x482775;};'use strict';var _=require('lodash');var util=require(_0x3e77('0x0'));var moment=require(_0x3e77('0x1'));var BPromise=require(_0x3e77('0x2'));var rs=require(_0x3e77('0x3'));var fs=require('fs');var Redis=require(_0x3e77('0x4'));var db=require(_0x3e77('0x5'))['db'];var utils=require(_0x3e77('0x6'));var logger=require(_0x3e77('0x7'))(_0x3e77('0x8'));var config=require(_0x3e77('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x3e77('0xa')][_0x3e77('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x294ceb,_0x40db17,_0x586e5f){return new BPromise(function(_0x1eb80a,_0x5304d6){return client[_0x3e77('0xc')](_0x294ceb,_0x586e5f)[_0x3e77('0xd')](function(_0xe54002){logger[_0x3e77('0xe')](_0x3e77('0xf'),_0x40db17,_0x3e77('0x10'));logger['debug']('UserProfileSection,\x20%s,\x20%s,\x20%s',_0x40db17,'request\x20sent',JSON[_0x3e77('0x11')](_0xe54002));if(_0xe54002[_0x3e77('0x12')]){if(_0xe54002[_0x3e77('0x12')]['code']===0x1f4){logger[_0x3e77('0x12')](_0x3e77('0xf'),_0x40db17,_0xe54002['error']['message']);return _0x5304d6(_0xe54002[_0x3e77('0x12')]['message']);}logger['error']('UserProfileSection,\x20%s,\x20%s',_0x40db17,_0xe54002[_0x3e77('0x12')][_0x3e77('0x13')]);return _0x1eb80a(_0xe54002[_0x3e77('0x12')]['message']);}else{logger[_0x3e77('0xe')](_0x3e77('0xf'),_0x40db17,'request\x20sent');_0x1eb80a(_0xe54002['result'][_0x3e77('0x13')]);}})[_0x3e77('0x14')](function(_0x42b7c7){logger[_0x3e77('0x12')](_0x3e77('0xf'),_0x40db17,_0x42b7c7);_0x5304d6(_0x42b7c7);});});}
\ No newline at end of file
index 38bc945..bb18e8d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdf98=['../../components/auth/service','../../components/interaction/service','../../config/environment','exports','multer','path','Router'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0xdf98,0xcf));var _0x8df9=function(_0xfd1fcd,_0x3182b7){_0xfd1fcd=_0xfd1fcd-0x0;var _0x1e0646=_0xdf98[_0xfd1fcd];return _0x1e0646;};'use strict';var multer=require(_0x8df9('0x0'));var util=require('util');var path=require(_0x8df9('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x8df9('0x2')]();var auth=require(_0x8df9('0x3'));var interaction=require(_0x8df9('0x4'));var config=require(_0x8df9('0x5'));module[_0x8df9('0x6')]=router;
\ No newline at end of file
+var _0x5ae0=['../../components/interaction/service','../../config/environment','util','path','express','Router'];(function(_0x4dc960,_0x30b525){var _0x3a77c3=function(_0x2f51c6){while(--_0x2f51c6){_0x4dc960['push'](_0x4dc960['shift']());}};_0x3a77c3(++_0x30b525);}(_0x5ae0,0xf8));var _0x05ae=function(_0x213978,_0x45d81b){_0x213978=_0x213978-0x0;var _0x10c1f0=_0x5ae0[_0x213978];return _0x10c1f0;};'use strict';var multer=require('multer');var util=require(_0x05ae('0x0'));var path=require(_0x05ae('0x1'));var timeout=require('connect-timeout');var express=require(_0x05ae('0x2'));var router=express[_0x05ae('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x05ae('0x4'));var config=require(_0x05ae('0x5'));module['exports']=router;
\ No newline at end of file
index 9e83ffd..40ffa7b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4fac=['sequelize','INTEGER'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x4fac,0x1a0));var _0xc4fa=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0x4fac[_0x57b54c];return _0x59cc19;};'use strict';var Sequelize=require(_0xc4fa('0x0'));module['exports']={'penalty':{'type':Sequelize[_0xc4fa('0x1')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x0f38=['INTEGER','sequelize','exports'];(function(_0x107f4d,_0x100ea1){var _0x2bda6c=function(_0x1d9afc){while(--_0x1d9afc){_0x107f4d['push'](_0x107f4d['shift']());}};_0x2bda6c(++_0x100ea1);}(_0x0f38,0x11e));var _0x80f3=function(_0x1efb2b,_0x1e56c7){_0x1efb2b=_0x1efb2b-0x0;var _0x2b5a4e=_0x0f38[_0x1efb2b];return _0x2b5a4e;};'use strict';var Sequelize=require(_0x80f3('0x0'));module[_0x80f3('0x1')]={'penalty':{'type':Sequelize[_0x80f3('0x2')],'defaultValue':0x0}};
\ No newline at end of file
index 95b1a68..ab801c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x91c6=['request-promise','path','../../config/environment','./userSmsQueue.attributes','exports','define','user_has_sms_queues','lodash','api','moment','bluebird'];(function(_0x3aa6d4,_0x58a363){var _0x2bce8b=function(_0x104c5d){while(--_0x104c5d){_0x3aa6d4['push'](_0x3aa6d4['shift']());}};_0x2bce8b(++_0x58a363);}(_0x91c6,0xf9));var _0x691c=function(_0x1b45d4,_0x550533){_0x1b45d4=_0x1b45d4-0x0;var _0x189761=_0x91c6[_0x1b45d4];return _0x189761;};'use strict';var _=require(_0x691c('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x691c('0x1'));var moment=require(_0x691c('0x2'));var BPromise=require(_0x691c('0x3'));var rp=require(_0x691c('0x4'));var fs=require('fs');var path=require(_0x691c('0x5'));var rimraf=require('rimraf');var config=require(_0x691c('0x6'));var attributes=require(_0x691c('0x7'));module[_0x691c('0x8')]=function(_0x1b2e82,_0x3dddf8){return _0x1b2e82[_0x691c('0x9')]('UserSmsQueue',attributes,{'tableName':_0x691c('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7524=['../../config/logger','moment','bluebird','rimraf','./userSmsQueue.attributes','exports','define','user_has_sms_queues','util'];(function(_0x217278,_0xddaee5){var _0x42ee83=function(_0x5e4118){while(--_0x5e4118){_0x217278['push'](_0x217278['shift']());}};_0x42ee83(++_0xddaee5);}(_0x7524,0xce));var _0x4752=function(_0x1aa79d,_0x22e255){_0x1aa79d=_0x1aa79d-0x0;var _0x112c9e=_0x7524[_0x1aa79d];return _0x112c9e;};'use strict';var _=require('lodash');var util=require(_0x4752('0x0'));var logger=require(_0x4752('0x1'))('api');var moment=require(_0x4752('0x2'));var BPromise=require(_0x4752('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x4752('0x4'));var config=require('../../config/environment');var attributes=require(_0x4752('0x5'));module[_0x4752('0x6')]=function(_0x66a421,_0x55b411){return _0x66a421[_0x4752('0x7')]('UserSmsQueue',attributes,{'tableName':_0x4752('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index b0ac281..7e3ca3c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xef79=['http','info','UserSmsQueue,\x20%s,\x20%s','request\x20sent','debug','UserSmsQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','ioredis','../../config/utils','../../config/logger','client'];(function(_0x366456,_0x260fcc){var _0x27aacd=function(_0x54ebc7){while(--_0x54ebc7){_0x366456['push'](_0x366456['shift']());}};_0x27aacd(++_0x260fcc);}(_0xef79,0xd4));var _0x9ef7=function(_0x43456b,_0x262bbe){_0x43456b=_0x43456b-0x0;var _0x4cde42=_0xef79[_0x43456b];return _0x4cde42;};'use strict';var _=require(_0x9ef7('0x0'));var util=require(_0x9ef7('0x1'));var moment=require(_0x9ef7('0x2'));var BPromise=require(_0x9ef7('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x9ef7('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x9ef7('0x5'));var logger=require(_0x9ef7('0x6'))('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x9ef7('0x7')][_0x9ef7('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x19dbff,_0x2d0c28,_0x30e1e1){return new BPromise(function(_0x1a4595,_0x2307d4){return client['request'](_0x19dbff,_0x30e1e1)['then'](function(_0x5f1cd0){logger[_0x9ef7('0x9')](_0x9ef7('0xa'),_0x2d0c28,_0x9ef7('0xb'));logger[_0x9ef7('0xc')](_0x9ef7('0xd'),_0x2d0c28,_0x9ef7('0xb'),JSON[_0x9ef7('0xe')](_0x5f1cd0));if(_0x5f1cd0[_0x9ef7('0xf')]){if(_0x5f1cd0['error'][_0x9ef7('0x10')]===0x1f4){logger[_0x9ef7('0xf')](_0x9ef7('0xa'),_0x2d0c28,_0x5f1cd0['error'][_0x9ef7('0x11')]);return _0x2307d4(_0x5f1cd0[_0x9ef7('0xf')][_0x9ef7('0x11')]);}logger[_0x9ef7('0xf')](_0x9ef7('0xa'),_0x2d0c28,_0x5f1cd0[_0x9ef7('0xf')][_0x9ef7('0x11')]);return _0x1a4595(_0x5f1cd0[_0x9ef7('0xf')][_0x9ef7('0x11')]);}else{logger['info']('UserSmsQueue,\x20%s,\x20%s',_0x2d0c28,_0x9ef7('0xb'));_0x1a4595(_0x5f1cd0[_0x9ef7('0x12')][_0x9ef7('0x11')]);}})[_0x9ef7('0x13')](function(_0x425fa4){logger['error']('UserSmsQueue,\x20%s,\x20%s',_0x2d0c28,_0x425fa4);_0x2307d4(_0x425fa4);});});}
\ No newline at end of file
+var _0xc4fe=['bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','jayson/promise','client','http','request','info','UserSmsQueue,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','result','util'];(function(_0x518741,_0x24fc94){var _0x549ad3=function(_0x41e765){while(--_0x41e765){_0x518741['push'](_0x518741['shift']());}};_0x549ad3(++_0x24fc94);}(_0xc4fe,0x18e));var _0xec4f=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xc4fe[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require(_0xec4f('0x0'));var moment=require('moment');var BPromise=require(_0xec4f('0x1'));var rs=require(_0xec4f('0x2'));var fs=require('fs');var Redis=require(_0xec4f('0x3'));var db=require(_0xec4f('0x4'))['db'];var utils=require(_0xec4f('0x5'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0xec4f('0x6'));var client=jayson[_0xec4f('0x7')][_0xec4f('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x528576,_0x4dc64f,_0x226fdf){return new BPromise(function(_0x3446d0,_0x51b1eb){return client[_0xec4f('0x9')](_0x528576,_0x226fdf)['then'](function(_0x5d9525){logger[_0xec4f('0xa')](_0xec4f('0xb'),_0x4dc64f,'request\x20sent');logger[_0xec4f('0xc')]('UserSmsQueue,\x20%s,\x20%s,\x20%s',_0x4dc64f,_0xec4f('0xd'),JSON[_0xec4f('0xe')](_0x5d9525));if(_0x5d9525[_0xec4f('0xf')]){if(_0x5d9525['error'][_0xec4f('0x10')]===0x1f4){logger[_0xec4f('0xf')]('UserSmsQueue,\x20%s,\x20%s',_0x4dc64f,_0x5d9525[_0xec4f('0xf')][_0xec4f('0x11')]);return _0x51b1eb(_0x5d9525['error'][_0xec4f('0x11')]);}logger[_0xec4f('0xf')](_0xec4f('0xb'),_0x4dc64f,_0x5d9525['error'][_0xec4f('0x11')]);return _0x3446d0(_0x5d9525[_0xec4f('0xf')][_0xec4f('0x11')]);}else{logger[_0xec4f('0xa')](_0xec4f('0xb'),_0x4dc64f,'request\x20sent');_0x3446d0(_0x5d9525[_0xec4f('0x12')][_0xec4f('0x11')]);}})['catch'](function(_0x5e1e36){logger[_0xec4f('0xf')](_0xec4f('0xb'),_0x4dc64f,_0x5e1e36);_0x51b1eb(_0x5e1e36);});});}
\ No newline at end of file
index 2582c4d..992e690 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0f80=['util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','exports'];(function(_0x295a55,_0x56e0dc){var _0x3890cf=function(_0x284d42){while(--_0x284d42){_0x295a55['push'](_0x295a55['shift']());}};_0x3890cf(++_0x56e0dc);}(_0x0f80,0x108));var _0x00f8=function(_0x4008c8,_0x145c43){_0x4008c8=_0x4008c8-0x0;var _0x435c19=_0x0f80[_0x4008c8];return _0x435c19;};'use strict';var multer=require('multer');var util=require(_0x00f8('0x0'));var path=require(_0x00f8('0x1'));var timeout=require(_0x00f8('0x2'));var express=require(_0x00f8('0x3'));var router=express[_0x00f8('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x00f8('0x5'));var config=require(_0x00f8('0x6'));module[_0x00f8('0x7')]=router;
\ No newline at end of file
+var _0xa6b0=['multer','util','express','Router','../../components/auth/service','../../config/environment','exports'];(function(_0x1d9481,_0x4a4793){var _0x5f31d7=function(_0x348469){while(--_0x348469){_0x1d9481['push'](_0x1d9481['shift']());}};_0x5f31d7(++_0x4a4793);}(_0xa6b0,0xaf));var _0x0a6b=function(_0x51efa5,_0x3e3803){_0x51efa5=_0x51efa5-0x0;var _0x4fcfa0=_0xa6b0[_0x51efa5];return _0x4fcfa0;};'use strict';var multer=require(_0x0a6b('0x0'));var util=require(_0x0a6b('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0x0a6b('0x2'));var router=express[_0x0a6b('0x3')]();var auth=require(_0x0a6b('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x0a6b('0x5'));module[_0x0a6b('0x6')]=router;
\ No newline at end of file
index b1df156..a0d2d1f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7b83=['INTEGER','sequelize','exports'];(function(_0x1d8468,_0x524250){var _0x3c7e0a=function(_0x3120ac){while(--_0x3120ac){_0x1d8468['push'](_0x1d8468['shift']());}};_0x3c7e0a(++_0x524250);}(_0x7b83,0x1cc));var _0x37b8=function(_0x3a5431,_0x405cc6){_0x3a5431=_0x3a5431-0x0;var _0xa0406c=_0x7b83[_0x3a5431];return _0xa0406c;};'use strict';var Sequelize=require(_0x37b8('0x0'));module[_0x37b8('0x1')]={'penalty':{'type':Sequelize[_0x37b8('0x2')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x95f3=['exports','sequelize'];(function(_0x13b2cb,_0x5bbcbd){var _0x25679d=function(_0xf2b294){while(--_0xf2b294){_0x13b2cb['push'](_0x13b2cb['shift']());}};_0x25679d(++_0x5bbcbd);}(_0x95f3,0x177));var _0x395f=function(_0x2142ea,_0x5a8f39){_0x2142ea=_0x2142ea-0x0;var _0x53e2a9=_0x95f3[_0x2142ea];return _0x53e2a9;};'use strict';var Sequelize=require(_0x395f('0x0'));module[_0x395f('0x1')]={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
index 71858fb..d119052 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfbfc=['api','moment','bluebird','rimraf','./userVoiceQueue.attributes','exports','define','UserVoiceQueue','user_has_voice_queues','util','../../config/logger'];(function(_0x3e9c1c,_0x3b063f){var _0x351ef5=function(_0x436658){while(--_0x436658){_0x3e9c1c['push'](_0x3e9c1c['shift']());}};_0x351ef5(++_0x3b063f);}(_0xfbfc,0x1d7));var _0xcfbf=function(_0x123227,_0x3d817e){_0x123227=_0x123227-0x0;var _0x430d34=_0xfbfc[_0x123227];return _0x430d34;};'use strict';var _=require('lodash');var util=require(_0xcfbf('0x0'));var logger=require(_0xcfbf('0x1'))(_0xcfbf('0x2'));var moment=require(_0xcfbf('0x3'));var BPromise=require(_0xcfbf('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0xcfbf('0x5'));var config=require('../../config/environment');var attributes=require(_0xcfbf('0x6'));module[_0xcfbf('0x7')]=function(_0x337f23,_0x43042b){return _0x337f23[_0xcfbf('0x8')](_0xcfbf('0x9'),attributes,{'tableName':_0xcfbf('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x005c=['util','../../config/logger','api','moment','bluebird','request-promise','rimraf','../../config/environment','exports','define','UserVoiceQueue','user_has_voice_queues','lodash'];(function(_0x5e3b74,_0x47be8d){var _0x3b162b=function(_0x3ab751){while(--_0x3ab751){_0x5e3b74['push'](_0x5e3b74['shift']());}};_0x3b162b(++_0x47be8d);}(_0x005c,0x178));var _0xc005=function(_0x35e0eb,_0x5bf0d6){_0x35e0eb=_0x35e0eb-0x0;var _0x17b180=_0x005c[_0x35e0eb];return _0x17b180;};'use strict';var _=require(_0xc005('0x0'));var util=require(_0xc005('0x1'));var logger=require(_0xc005('0x2'))(_0xc005('0x3'));var moment=require(_0xc005('0x4'));var BPromise=require(_0xc005('0x5'));var rp=require(_0xc005('0x6'));var fs=require('fs');var path=require('path');var rimraf=require(_0xc005('0x7'));var config=require(_0xc005('0x8'));var attributes=require('./userVoiceQueue.attributes');module[_0xc005('0x9')]=function(_0x152333,_0x323eb6){return _0x152333[_0xc005('0xa')](_0xc005('0xb'),attributes,{'tableName':_0xc005('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 973fb48..9ef0c24 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1dda=['../../config/utils','../../config/logger','jayson/promise','client','http','request','then','UserVoiceQueue,\x20%s,\x20%s','stringify','error','code','message','info','request\x20sent','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb'];(function(_0x79c48e,_0x537c09){var _0x3dfdec=function(_0x359bfb){while(--_0x359bfb){_0x79c48e['push'](_0x79c48e['shift']());}};_0x3dfdec(++_0x537c09);}(_0x1dda,0x1c5));var _0xa1dd=function(_0x10e983,_0x2f4eda){_0x10e983=_0x10e983-0x0;var _0x324138=_0x1dda[_0x10e983];return _0x324138;};'use strict';var _=require(_0xa1dd('0x0'));var util=require(_0xa1dd('0x1'));var moment=require(_0xa1dd('0x2'));var BPromise=require(_0xa1dd('0x3'));var rs=require(_0xa1dd('0x4'));var fs=require('fs');var Redis=require(_0xa1dd('0x5'));var db=require(_0xa1dd('0x6'))['db'];var utils=require(_0xa1dd('0x7'));var logger=require(_0xa1dd('0x8'))('rpc');var config=require('../../config/environment');var jayson=require(_0xa1dd('0x9'));var client=jayson[_0xa1dd('0xa')][_0xa1dd('0xb')]({'port':0x232a});function respondWithRpcPromise(_0xe45c26,_0x383d31,_0x186295){return new BPromise(function(_0x316794,_0x5f503a){return client[_0xa1dd('0xc')](_0xe45c26,_0x186295)[_0xa1dd('0xd')](function(_0x10424){logger['info'](_0xa1dd('0xe'),_0x383d31,'request\x20sent');logger['debug']('UserVoiceQueue,\x20%s,\x20%s,\x20%s',_0x383d31,'request\x20sent',JSON[_0xa1dd('0xf')](_0x10424));if(_0x10424[_0xa1dd('0x10')]){if(_0x10424[_0xa1dd('0x10')][_0xa1dd('0x11')]===0x1f4){logger[_0xa1dd('0x10')](_0xa1dd('0xe'),_0x383d31,_0x10424[_0xa1dd('0x10')][_0xa1dd('0x12')]);return _0x5f503a(_0x10424[_0xa1dd('0x10')][_0xa1dd('0x12')]);}logger[_0xa1dd('0x10')](_0xa1dd('0xe'),_0x383d31,_0x10424[_0xa1dd('0x10')]['message']);return _0x316794(_0x10424[_0xa1dd('0x10')][_0xa1dd('0x12')]);}else{logger[_0xa1dd('0x13')](_0xa1dd('0xe'),_0x383d31,_0xa1dd('0x14'));_0x316794(_0x10424[_0xa1dd('0x15')][_0xa1dd('0x12')]);}})[_0xa1dd('0x16')](function(_0x117098){logger[_0xa1dd('0x10')](_0xa1dd('0xe'),_0x383d31,_0x117098);_0x5f503a(_0x117098);});});}
\ No newline at end of file
+var _0x67c7=['randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client','http','request','UserVoiceQueue,\x20%s,\x20%s','debug','UserVoiceQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','moment','bluebird'];(function(_0x39649f,_0x4e0e87){var _0x4edf8a=function(_0x502901){while(--_0x502901){_0x39649f['push'](_0x39649f['shift']());}};_0x4edf8a(++_0x4e0e87);}(_0x67c7,0x1a0));var _0x767c=function(_0x3d18af,_0x5b4fa0){_0x3d18af=_0x3d18af-0x0;var _0x2ef919=_0x67c7[_0x3d18af];return _0x2ef919;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x767c('0x0'));var BPromise=require(_0x767c('0x1'));var rs=require(_0x767c('0x2'));var fs=require('fs');var Redis=require(_0x767c('0x3'));var db=require(_0x767c('0x4'))['db'];var utils=require(_0x767c('0x5'));var logger=require(_0x767c('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0x767c('0x7'));var client=jayson[_0x767c('0x8')][_0x767c('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x397b61,_0x45cd42,_0x1cbf72){return new BPromise(function(_0x263509,_0x555656){return client[_0x767c('0xa')](_0x397b61,_0x1cbf72)['then'](function(_0x5cfd3f){logger['info'](_0x767c('0xb'),_0x45cd42,'request\x20sent');logger[_0x767c('0xc')](_0x767c('0xd'),_0x45cd42,'request\x20sent',JSON[_0x767c('0xe')](_0x5cfd3f));if(_0x5cfd3f[_0x767c('0xf')]){if(_0x5cfd3f[_0x767c('0xf')][_0x767c('0x10')]===0x1f4){logger[_0x767c('0xf')](_0x767c('0xb'),_0x45cd42,_0x5cfd3f[_0x767c('0xf')]['message']);return _0x555656(_0x5cfd3f[_0x767c('0xf')]['message']);}logger['error'](_0x767c('0xb'),_0x45cd42,_0x5cfd3f[_0x767c('0xf')][_0x767c('0x11')]);return _0x263509(_0x5cfd3f[_0x767c('0xf')]['message']);}else{logger['info'](_0x767c('0xb'),_0x45cd42,'request\x20sent');_0x263509(_0x5cfd3f['result'][_0x767c('0x11')]);}})[_0x767c('0x12')](function(_0x97072f){logger[_0x767c('0xf')](_0x767c('0xb'),_0x45cd42,_0x97072f);_0x555656(_0x97072f);});});}
\ No newline at end of file
index fc9ec17..98fc707 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed1f=['../../config/environment','exports','multer','util','express','../../components/auth/service'];(function(_0x173441,_0x26b0d9){var _0x2423a8=function(_0x4d96c2){while(--_0x4d96c2){_0x173441['push'](_0x173441['shift']());}};_0x2423a8(++_0x26b0d9);}(_0xed1f,0x170));var _0xfed1=function(_0x263a74,_0xc31414){_0x263a74=_0x263a74-0x0;var _0x2aa86c=_0xed1f[_0x263a74];return _0x2aa86c;};'use strict';var multer=require(_0xfed1('0x0'));var util=require(_0xfed1('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0xfed1('0x2'));var router=express['Router']();var auth=require(_0xfed1('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0xfed1('0x4'));module[_0xfed1('0x5')]=router;
\ No newline at end of file
+var _0x3f8a=['exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x55fa03,_0xcb96c2){var _0x2cd7cd=function(_0x56611f){while(--_0x56611f){_0x55fa03['push'](_0x55fa03['shift']());}};_0x2cd7cd(++_0xcb96c2);}(_0x3f8a,0x1d5));var _0xa3f8=function(_0x57cd2e,_0x5f1566){_0x57cd2e=_0x57cd2e-0x0;var _0x5d50bd=_0x3f8a[_0x57cd2e];return _0x5d50bd;};'use strict';var multer=require(_0xa3f8('0x0'));var util=require(_0xa3f8('0x1'));var path=require(_0xa3f8('0x2'));var timeout=require(_0xa3f8('0x3'));var express=require('express');var router=express[_0xa3f8('0x4')]();var auth=require(_0xa3f8('0x5'));var interaction=require(_0xa3f8('0x6'));var config=require(_0xa3f8('0x7'));module[_0xa3f8('0x8')]=router;
\ No newline at end of file
index 7dc306d..d2cd592 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaaf4=['INTEGER','STRING','queue_interface','Required\x20by\x20Asterisk','exports'];(function(_0x24f31b,_0x44b8f3){var _0x488401=function(_0x204caf){while(--_0x204caf){_0x24f31b['push'](_0x24f31b['shift']());}};_0x488401(++_0x44b8f3);}(_0xaaf4,0xbd));var _0x4aaf=function(_0xa86abe,_0x26ec70){_0xa86abe=_0xa86abe-0x0;var _0x9da74b=_0xaaf4[_0xa86abe];return _0x9da74b;};'use strict';var Sequelize=require('sequelize');module[_0x4aaf('0x0')]={'uniqueid':{'type':Sequelize[_0x4aaf('0x1')],'primaryKey':!![],'autoIncrement':!![],'comment':'Required\x20by\x20Asterisk'},'membername':{'type':Sequelize[_0x4aaf('0x2')],'allowNull':![],'comment':'Required\x20by\x20Asterisk'},'UserId':{'type':Sequelize[_0x4aaf('0x1')],'allowNull':![]},'queue_name':{'type':Sequelize[_0x4aaf('0x2')],'allowNull':![],'unique':_0x4aaf('0x3'),'comment':_0x4aaf('0x4')},'VoiceQueueId':{'type':Sequelize[_0x4aaf('0x1')],'allowNull':![]},'interface':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0x4aaf('0x3'),'comment':_0x4aaf('0x4')},'penalty':{'type':Sequelize[_0x4aaf('0x1')](0xb),'defaultValue':0x0,'comment':_0x4aaf('0x4')},'paused':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0,'comment':_0x4aaf('0x4')}};
\ No newline at end of file
+var _0x6895=['Required\x20by\x20Asterisk','queue_interface','STRING','sequelize','exports','INTEGER'];(function(_0x5700e0,_0x4cf173){var _0x4d7ded=function(_0x3b5bc4){while(--_0x3b5bc4){_0x5700e0['push'](_0x5700e0['shift']());}};_0x4d7ded(++_0x4cf173);}(_0x6895,0x15f));var _0x5689=function(_0x24ae72,_0x23174c){_0x24ae72=_0x24ae72-0x0;var _0x33c538=_0x6895[_0x24ae72];return _0x33c538;};'use strict';var Sequelize=require(_0x5689('0x0'));module[_0x5689('0x1')]={'uniqueid':{'type':Sequelize[_0x5689('0x2')],'primaryKey':!![],'autoIncrement':!![],'comment':_0x5689('0x3')},'membername':{'type':Sequelize['STRING'],'allowNull':![],'comment':_0x5689('0x3')},'UserId':{'type':Sequelize[_0x5689('0x2')],'allowNull':![]},'queue_name':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0x5689('0x4'),'comment':_0x5689('0x3')},'VoiceQueueId':{'type':Sequelize[_0x5689('0x2')],'allowNull':![]},'interface':{'type':Sequelize[_0x5689('0x5')],'allowNull':![],'unique':'queue_interface','comment':_0x5689('0x3')},'penalty':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0,'comment':_0x5689('0x3')},'paused':{'type':Sequelize[_0x5689('0x2')](0xb),'defaultValue':0x0,'comment':_0x5689('0x3')}};
\ No newline at end of file
index a321d59..307dc43 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x955f=['save','remove','emit','hasOwnProperty','exports','events','../../mysqldb','UserVoiceQueueRt','setMaxListeners'];(function(_0x403b52,_0x3b7a8a){var _0x4cfae1=function(_0xdb2a61){while(--_0xdb2a61){_0x403b52['push'](_0x403b52['shift']());}};_0x4cfae1(++_0x3b7a8a);}(_0x955f,0x1eb));var _0xf955=function(_0x327a14,_0x1e8979){_0x327a14=_0x327a14-0x0;var _0xa65eb=_0x955f[_0x327a14];return _0xa65eb;};'use strict';var EventEmitter=require(_0xf955('0x0'));var UserVoiceQueueRt=require(_0xf955('0x1'))['db'][_0xf955('0x2')];var UserVoiceQueueRtEvents=new EventEmitter();UserVoiceQueueRtEvents[_0xf955('0x3')](0x0);var events={'afterCreate':_0xf955('0x4'),'afterUpdate':'update','afterDestroy':_0xf955('0x5')};function emitEvent(_0x5655ef){return function(_0x5d0c95,_0x1db0dd,_0x5a20bc){UserVoiceQueueRtEvents[_0xf955('0x6')](_0x5655ef+':'+_0x5d0c95['id'],_0x5d0c95);UserVoiceQueueRtEvents[_0xf955('0x6')](_0x5655ef,_0x5d0c95);_0x5a20bc(null);};}for(var e in events){if(events[_0xf955('0x7')](e)){var event=events[e];UserVoiceQueueRt['hook'](e,emitEvent(event));}}module[_0xf955('0x8')]=UserVoiceQueueRtEvents;
\ No newline at end of file
+var _0x9ffd=['events','../../mysqldb','UserVoiceQueueRt','save','update','remove','emit','hasOwnProperty','hook','exports'];(function(_0x998751,_0x5b0e95){var _0x170104=function(_0x31e888){while(--_0x31e888){_0x998751['push'](_0x998751['shift']());}};_0x170104(++_0x5b0e95);}(_0x9ffd,0xaa));var _0xd9ff=function(_0x5b088f,_0x458037){_0x5b088f=_0x5b088f-0x0;var _0x40743a=_0x9ffd[_0x5b088f];return _0x40743a;};'use strict';var EventEmitter=require(_0xd9ff('0x0'));var UserVoiceQueueRt=require(_0xd9ff('0x1'))['db'][_0xd9ff('0x2')];var UserVoiceQueueRtEvents=new EventEmitter();UserVoiceQueueRtEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xd9ff('0x3'),'afterUpdate':_0xd9ff('0x4'),'afterDestroy':_0xd9ff('0x5')};function emitEvent(_0x5493ae){return function(_0x53e962,_0x1c9460,_0x111697){UserVoiceQueueRtEvents['emit'](_0x5493ae+':'+_0x53e962['id'],_0x53e962);UserVoiceQueueRtEvents[_0xd9ff('0x6')](_0x5493ae,_0x53e962);_0x111697(null);};}for(var e in events){if(events[_0xd9ff('0x7')](e)){var event=events[e];UserVoiceQueueRt[_0xd9ff('0x8')](e,emitEvent(event));}}module[_0xd9ff('0x9')]=UserVoiceQueueRtEvents;
\ No newline at end of file
index 8ce7f56..b238214 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe587=['../../config/environment','./userVoiceQueueRt.attributes','define','UserVoiceQueueRt','user_has_voice_queues_rt','lodash','util','../../config/logger','moment','bluebird','request-promise','path','rimraf'];(function(_0x3e6408,_0x2d08f3){var _0x366ca9=function(_0x327d15){while(--_0x327d15){_0x3e6408['push'](_0x3e6408['shift']());}};_0x366ca9(++_0x2d08f3);}(_0xe587,0x116));var _0x7e58=function(_0x14f0b2,_0x26e52c){_0x14f0b2=_0x14f0b2-0x0;var _0x34e387=_0xe587[_0x14f0b2];return _0x34e387;};'use strict';var _=require(_0x7e58('0x0'));var util=require(_0x7e58('0x1'));var logger=require(_0x7e58('0x2'))('api');var moment=require(_0x7e58('0x3'));var BPromise=require(_0x7e58('0x4'));var rp=require(_0x7e58('0x5'));var fs=require('fs');var path=require(_0x7e58('0x6'));var rimraf=require(_0x7e58('0x7'));var config=require(_0x7e58('0x8'));var attributes=require(_0x7e58('0x9'));module['exports']=function(_0x3086d0,_0x156fa8){return _0x3086d0[_0x7e58('0xa')](_0x7e58('0xb'),attributes,{'tableName':_0x7e58('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xf6a3=['../../config/logger','moment','bluebird','request-promise','path','rimraf','../../config/environment','./userVoiceQueueRt.attributes','define','user_has_voice_queues_rt','lodash','util'];(function(_0xf52c2f,_0xf15ecf){var _0x32e985=function(_0x5e3085){while(--_0x5e3085){_0xf52c2f['push'](_0xf52c2f['shift']());}};_0x32e985(++_0xf15ecf);}(_0xf6a3,0x1de));var _0x3f6a=function(_0x4c3c1f,_0x1f9a7e){_0x4c3c1f=_0x4c3c1f-0x0;var _0x1883f1=_0xf6a3[_0x4c3c1f];return _0x1883f1;};'use strict';var _=require(_0x3f6a('0x0'));var util=require(_0x3f6a('0x1'));var logger=require(_0x3f6a('0x2'))('api');var moment=require(_0x3f6a('0x3'));var BPromise=require(_0x3f6a('0x4'));var rp=require(_0x3f6a('0x5'));var fs=require('fs');var path=require(_0x3f6a('0x6'));var rimraf=require(_0x3f6a('0x7'));var config=require(_0x3f6a('0x8'));var attributes=require(_0x3f6a('0x9'));module['exports']=function(_0x127e85,_0x298b10){return _0x127e85[_0x3f6a('0xa')]('UserVoiceQueueRt',attributes,{'tableName':_0x3f6a('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index f04fb98..4abf0af 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x24dd=['stringify','error','code','message','result','GetVoiceQueueRtPauses','findAll','options','raw','where','sequelize','COUNT','`paused`\x20=\x201,\x201,\x20null','outboundQueuePauses','catch','util','moment','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','defaults','redis','localhost','socket.io-emitter','./userVoiceQueueRt.socket','request','then','info','UserVoiceQueueRt,\x20%s,\x20%s','debug','UserVoiceQueueRt,\x20%s,\x20%s,\x20%s','request\x20sent'];(function(_0x456244,_0x269117){var _0x44b5ea=function(_0x1dad5c){while(--_0x1dad5c){_0x456244['push'](_0x456244['shift']());}};_0x44b5ea(++_0x269117);}(_0x24dd,0x137));var _0xd24d=function(_0x2df507,_0x553862){_0x2df507=_0x2df507-0x0;var _0x1f7167=_0x24dd[_0x2df507];return _0x1f7167;};'use strict';var _=require('lodash');var util=require(_0xd24d('0x0'));var moment=require(_0xd24d('0x1'));var BPromise=require('bluebird');var rs=require(_0xd24d('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xd24d('0x3'))['db'];var utils=require(_0xd24d('0x4'));var logger=require('../../config/logger')(_0xd24d('0x5'));var config=require(_0xd24d('0x6'));var jayson=require(_0xd24d('0x7'));var client=jayson[_0xd24d('0x8')][_0xd24d('0x9')]({'port':0x232a});config['redis']=_[_0xd24d('0xa')](config[_0xd24d('0xb')],{'host':_0xd24d('0xc'),'port':0x18eb});var socket=require(_0xd24d('0xd'))(new Redis(config[_0xd24d('0xb')]));require(_0xd24d('0xe'))['register'](socket);function respondWithRpcPromise(_0x519726,_0xc322df,_0x911d54){return new BPromise(function(_0x4778d0,_0x478d50){return client[_0xd24d('0xf')](_0x519726,_0x911d54)[_0xd24d('0x10')](function(_0x510536){logger[_0xd24d('0x11')](_0xd24d('0x12'),_0xc322df,'request\x20sent');logger[_0xd24d('0x13')](_0xd24d('0x14'),_0xc322df,_0xd24d('0x15'),JSON[_0xd24d('0x16')](_0x510536));if(_0x510536[_0xd24d('0x17')]){if(_0x510536[_0xd24d('0x17')][_0xd24d('0x18')]===0x1f4){logger[_0xd24d('0x17')](_0xd24d('0x12'),_0xc322df,_0x510536['error'][_0xd24d('0x19')]);return _0x478d50(_0x510536[_0xd24d('0x17')][_0xd24d('0x19')]);}logger[_0xd24d('0x17')]('UserVoiceQueueRt,\x20%s,\x20%s',_0xc322df,_0x510536[_0xd24d('0x17')][_0xd24d('0x19')]);return _0x4778d0(_0x510536[_0xd24d('0x17')][_0xd24d('0x19')]);}else{logger[_0xd24d('0x11')]('UserVoiceQueueRt,\x20%s,\x20%s',_0xc322df,'request\x20sent');_0x4778d0(_0x510536[_0xd24d('0x1a')][_0xd24d('0x19')]);}})['catch'](function(_0x338c25){logger[_0xd24d('0x17')](_0xd24d('0x12'),_0xc322df,_0x338c25);_0x478d50(_0x338c25);});});}exports[_0xd24d('0x1b')]=function(_0x449b88){var _0x5c1486=this;return new Promise(function(_0x30d4ae,_0x33e3aa){return db['UserVoiceQueueRt'][_0xd24d('0x1c')]({'raw':_0x449b88[_0xd24d('0x1d')]?_0x449b88[_0xd24d('0x1d')][_0xd24d('0x1e')]===undefined?!![]:![]:!![],'where':_0x449b88['options']?_0x449b88[_0xd24d('0x1d')][_0xd24d('0x1f')]||null:null,'attributes':[[db[_0xd24d('0x20')]['fn'](_0xd24d('0x21'),db[_0xd24d('0x20')]['fn']('IF',db[_0xd24d('0x20')]['literal'](_0xd24d('0x22')))),_0xd24d('0x23')]]})[_0xd24d('0x10')](function(_0x38f9f6){logger['info'](_0xd24d('0x1b'),_0x449b88);logger[_0xd24d('0x13')](_0xd24d('0x1b'),_0x449b88,JSON[_0xd24d('0x16')](_0x38f9f6));_0x30d4ae(_0x38f9f6);})[_0xd24d('0x24')](function(_0xfdcd1f){logger[_0xd24d('0x17')](_0xd24d('0x1b'),_0xfdcd1f['message'],_0x449b88);_0x33e3aa(_0x5c1486[_0xd24d('0x17')](0x1f4,_0xfdcd1f[_0xd24d('0x19')]));});});};
\ No newline at end of file
+var _0xcdf2=['literal','`paused`\x20=\x201,\x201,\x20null','outboundQueuePauses','GetVoiceQueueRtPauses','catch','util','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','request','then','info','request\x20sent','debug','UserVoiceQueueRt,\x20%s,\x20%s,\x20%s','stringify','error','code','UserVoiceQueueRt,\x20%s,\x20%s','message','result','UserVoiceQueueRt','options','raw','where','COUNT','sequelize'];(function(_0x434b9c,_0x1a460a){var _0x39c455=function(_0x206b3b){while(--_0x206b3b){_0x434b9c['push'](_0x434b9c['shift']());}};_0x39c455(++_0x1a460a);}(_0xcdf2,0x15b));var _0x2cdf=function(_0x4f6d08,_0x1b3dd0){_0x4f6d08=_0x4f6d08-0x0;var _0x53a9c6=_0xcdf2[_0x4f6d08];return _0x53a9c6;};'use strict';var _=require('lodash');var util=require(_0x2cdf('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x2cdf('0x1'));var fs=require('fs');var Redis=require(_0x2cdf('0x2'));var db=require(_0x2cdf('0x3'))['db'];var utils=require(_0x2cdf('0x4'));var logger=require(_0x2cdf('0x5'))(_0x2cdf('0x6'));var config=require(_0x2cdf('0x7'));var jayson=require(_0x2cdf('0x8'));var client=jayson[_0x2cdf('0x9')][_0x2cdf('0xa')]({'port':0x232a});config[_0x2cdf('0xb')]=_[_0x2cdf('0xc')](config['redis'],{'host':_0x2cdf('0xd'),'port':0x18eb});var socket=require(_0x2cdf('0xe'))(new Redis(config[_0x2cdf('0xb')]));require('./userVoiceQueueRt.socket')['register'](socket);function respondWithRpcPromise(_0x406f14,_0x446a7b,_0x23ac6d){return new BPromise(function(_0x245cd6,_0x1f3e86){return client[_0x2cdf('0xf')](_0x406f14,_0x23ac6d)[_0x2cdf('0x10')](function(_0xf7b7d2){logger[_0x2cdf('0x11')]('UserVoiceQueueRt,\x20%s,\x20%s',_0x446a7b,_0x2cdf('0x12'));logger[_0x2cdf('0x13')](_0x2cdf('0x14'),_0x446a7b,'request\x20sent',JSON[_0x2cdf('0x15')](_0xf7b7d2));if(_0xf7b7d2[_0x2cdf('0x16')]){if(_0xf7b7d2[_0x2cdf('0x16')][_0x2cdf('0x17')]===0x1f4){logger[_0x2cdf('0x16')](_0x2cdf('0x18'),_0x446a7b,_0xf7b7d2['error'][_0x2cdf('0x19')]);return _0x1f3e86(_0xf7b7d2[_0x2cdf('0x16')][_0x2cdf('0x19')]);}logger[_0x2cdf('0x16')]('UserVoiceQueueRt,\x20%s,\x20%s',_0x446a7b,_0xf7b7d2[_0x2cdf('0x16')]['message']);return _0x245cd6(_0xf7b7d2[_0x2cdf('0x16')][_0x2cdf('0x19')]);}else{logger[_0x2cdf('0x11')](_0x2cdf('0x18'),_0x446a7b,'request\x20sent');_0x245cd6(_0xf7b7d2[_0x2cdf('0x1a')][_0x2cdf('0x19')]);}})['catch'](function(_0x2d140f){logger[_0x2cdf('0x16')](_0x2cdf('0x18'),_0x446a7b,_0x2d140f);_0x1f3e86(_0x2d140f);});});}exports['GetVoiceQueueRtPauses']=function(_0x1638d5){var _0x4ef3c3=this;return new Promise(function(_0x51e9b2,_0x5ec1b3){return db[_0x2cdf('0x1b')]['findAll']({'raw':_0x1638d5[_0x2cdf('0x1c')]?_0x1638d5['options'][_0x2cdf('0x1d')]===undefined?!![]:![]:!![],'where':_0x1638d5['options']?_0x1638d5[_0x2cdf('0x1c')][_0x2cdf('0x1e')]||null:null,'attributes':[[db['sequelize']['fn'](_0x2cdf('0x1f'),db[_0x2cdf('0x20')]['fn']('IF',db[_0x2cdf('0x20')][_0x2cdf('0x21')](_0x2cdf('0x22')))),_0x2cdf('0x23')]]})[_0x2cdf('0x10')](function(_0x5886ca){logger[_0x2cdf('0x11')]('GetVoiceQueueRtPauses',_0x1638d5);logger[_0x2cdf('0x13')](_0x2cdf('0x24'),_0x1638d5,JSON['stringify'](_0x5886ca));_0x51e9b2(_0x5886ca);})[_0x2cdf('0x25')](function(_0x46c29f){logger[_0x2cdf('0x16')](_0x2cdf('0x24'),_0x46c29f[_0x2cdf('0x19')],_0x1638d5);_0x5ec1b3(_0x4ef3c3[_0x2cdf('0x16')](0x1f4,_0x46c29f[_0x2cdf('0x19')]));});});};
\ No newline at end of file
index a6aa5c0..5e7db0f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd67b=['userVoiceQueueRt:','save','update','emit','register','length'];(function(_0x4ca004,_0x510d6c){var _0x572a40=function(_0x4b7c8e){while(--_0x4b7c8e){_0x4ca004['push'](_0x4ca004['shift']());}};_0x572a40(++_0x510d6c);}(_0xd67b,0x133));var _0xbd67=function(_0x5a646b,_0xf54fa0){_0x5a646b=_0x5a646b-0x0;var _0x16fc73=_0xd67b[_0x5a646b];return _0x16fc73;};'use strict';var UserVoiceQueueRtEvents=require('./userVoiceQueueRt.events');var events=[_0xbd67('0x0'),'remove',_0xbd67('0x1')];function createListener(_0x280954,_0x317e33){return function(_0x5e967b){_0x317e33[_0xbd67('0x2')](_0x280954,_0x5e967b);};}function removeListener(_0x50da5a,_0x1bf96){return function(){UserVoiceQueueRtEvents['removeListener'](_0x50da5a,_0x1bf96);};}exports[_0xbd67('0x3')]=function(_0xa5c384){for(var _0x2ad142=0x0,_0x27b016=events[_0xbd67('0x4')];_0x2ad142<_0x27b016;_0x2ad142++){var _0x72f9ac=events[_0x2ad142];var _0x2d4af6=createListener(_0xbd67('0x5')+_0x72f9ac,_0xa5c384);UserVoiceQueueRtEvents['on'](_0x72f9ac,_0x2d4af6);}};
\ No newline at end of file
+var _0xf494=['save','remove','emit','removeListener','register','userVoiceQueueRt:','./userVoiceQueueRt.events'];(function(_0x2eb1b1,_0x13beeb){var _0x11c99e=function(_0x3117eb){while(--_0x3117eb){_0x2eb1b1['push'](_0x2eb1b1['shift']());}};_0x11c99e(++_0x13beeb);}(_0xf494,0x1c6));var _0x4f49=function(_0x1118aa,_0x53ce81){_0x1118aa=_0x1118aa-0x0;var _0x3153b2=_0xf494[_0x1118aa];return _0x3153b2;};'use strict';var UserVoiceQueueRtEvents=require(_0x4f49('0x0'));var events=[_0x4f49('0x1'),_0x4f49('0x2'),'update'];function createListener(_0x3aeeb8,_0x1d54cc){return function(_0x423b25){_0x1d54cc[_0x4f49('0x3')](_0x3aeeb8,_0x423b25);};}function removeListener(_0x20c0d7,_0x2a15fb){return function(){UserVoiceQueueRtEvents[_0x4f49('0x4')](_0x20c0d7,_0x2a15fb);};}exports[_0x4f49('0x5')]=function(_0xc5e778){for(var _0x413530=0x0,_0x42b0e8=events['length'];_0x413530<_0x42b0e8;_0x413530++){var _0x58e9a0=events[_0x413530];var _0x169c95=createListener(_0x4f49('0x6')+_0x58e9a0,_0xc5e778);UserVoiceQueueRtEvents['on'](_0x58e9a0,_0x169c95);}};
\ No newline at end of file
index 38104d1..6e9caad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb4e6=['index','/:id','post','put','update','delete','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated'];(function(_0x10c66c,_0x5ed973){var _0x196c81=function(_0x329119){while(--_0x329119){_0x10c66c['push'](_0x10c66c['shift']());}};_0x196c81(++_0x5ed973);}(_0xb4e6,0x1f4));var _0x6b4e=function(_0x397cfb,_0xb8f317){_0x397cfb=_0x397cfb-0x0;var _0x15fed9=_0xb4e6[_0x397cfb];return _0x15fed9;};'use strict';var multer=require(_0x6b4e('0x0'));var util=require('util');var path=require(_0x6b4e('0x1'));var timeout=require(_0x6b4e('0x2'));var express=require(_0x6b4e('0x3'));var router=express[_0x6b4e('0x4')]();var auth=require(_0x6b4e('0x5'));var interaction=require(_0x6b4e('0x6'));var config=require(_0x6b4e('0x7'));var controller=require('./variable.controller');router[_0x6b4e('0x8')]('/',auth[_0x6b4e('0x9')](),controller[_0x6b4e('0xa')]);router['get'](_0x6b4e('0xb'),auth['isAuthenticated'](),controller['show']);router[_0x6b4e('0xc')]('/',auth['isAuthenticated'](),controller['create']);router[_0x6b4e('0xd')](_0x6b4e('0xb'),auth[_0x6b4e('0x9')](),controller[_0x6b4e('0xe')]);router[_0x6b4e('0xf')](_0x6b4e('0xb'),auth[_0x6b4e('0x9')](),controller['destroy']);module[_0x6b4e('0x10')]=router;
\ No newline at end of file
+var _0xbdb7=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','/:id','post','isAuthenticated','update','delete','destroy','exports','multer','util','path','connect-timeout'];(function(_0x2dd0f1,_0x207d6e){var _0x28a3e5=function(_0x2cb49b){while(--_0x2cb49b){_0x2dd0f1['push'](_0x2dd0f1['shift']());}};_0x28a3e5(++_0x207d6e);}(_0xbdb7,0x12e));var _0x7bdb=function(_0x381606,_0x53382c){_0x381606=_0x381606-0x0;var _0x31c4ca=_0xbdb7[_0x381606];return _0x31c4ca;};'use strict';var multer=require(_0x7bdb('0x0'));var util=require(_0x7bdb('0x1'));var path=require(_0x7bdb('0x2'));var timeout=require(_0x7bdb('0x3'));var express=require(_0x7bdb('0x4'));var router=express[_0x7bdb('0x5')]();var auth=require(_0x7bdb('0x6'));var interaction=require(_0x7bdb('0x7'));var config=require(_0x7bdb('0x8'));var controller=require('./variable.controller');router[_0x7bdb('0x9')]('/',auth['isAuthenticated'](),controller['index']);router[_0x7bdb('0x9')](_0x7bdb('0xa'),auth['isAuthenticated'](),controller['show']);router[_0x7bdb('0xb')]('/',auth[_0x7bdb('0xc')](),controller['create']);router['put'](_0x7bdb('0xa'),auth[_0x7bdb('0xc')](),controller[_0x7bdb('0xd')]);router[_0x7bdb('0xe')](_0x7bdb('0xa'),auth[_0x7bdb('0xc')](),controller[_0x7bdb('0xf')]);module[_0x7bdb('0x10')]=router;
\ No newline at end of file
index e20be82..9e2de4f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3728=['name','sequelize','exports','STRING'];(function(_0x2d4b7f,_0x3521b7){var _0x1f2f2e=function(_0x397b0a){while(--_0x397b0a){_0x2d4b7f['push'](_0x2d4b7f['shift']());}};_0x1f2f2e(++_0x3521b7);}(_0x3728,0x185));var _0x8372=function(_0x56b54c,_0x3705a4){_0x56b54c=_0x56b54c-0x0;var _0x1f1914=_0x3728[_0x56b54c];return _0x1f1914;};'use strict';var Sequelize=require(_0x8372('0x0'));module[_0x8372('0x1')]={'name':{'type':Sequelize[_0x8372('0x2')],'unique':_0x8372('0x3'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0x8372('0x2')]}};
\ No newline at end of file
+var _0x3e0c=['exports','STRING','sequelize'];(function(_0x2d2052,_0x218946){var _0x45d390=function(_0x52c631){while(--_0x52c631){_0x2d2052['push'](_0x2d2052['shift']());}};_0x45d390(++_0x218946);}(_0x3e0c,0x16d));var _0xc3e0=function(_0x599c94,_0x464f0e){_0x599c94=_0x599c94-0x0;var _0x34e215=_0x3e0c[_0x599c94];return _0x34e215;};'use strict';var Sequelize=require(_0xc3e0('0x0'));module[_0xc3e0('0x1')]={'name':{'type':Sequelize[_0xc3e0('0x2')],'unique':'name','allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0xc3e0('0x2')]}};
\ No newline at end of file
index 26876d3..fdee57f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5a82=['../../config/environment','sendStatus','status','end','json','count','offset','set','Content-Range','reject','save','destroy','get','Variables','then','error','send','rawAttributes','model','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','pick','filter','map','key','VIRTUAL','field','merge','options','includeAll','include','Variable','rows','catch','show','params','keys','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','name','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','squel','crypto','desk.js','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils'];(function(_0x185106,_0x1098fa){var _0x4dee14=function(_0x184d1e){while(--_0x184d1e){_0x185106['push'](_0x185106['shift']());}};_0x4dee14(++_0x1098fa);}(_0x5a82,0x131));var _0x25a8=function(_0x8998d0,_0x3e2894){_0x8998d0=_0x8998d0-0x0;var _0x567477=_0x5a82[_0x8998d0];return _0x567477;};'use strict';var pdf=require(_0x25a8('0x0'));var emlformat=require(_0x25a8('0x1'));var rimraf=require(_0x25a8('0x2'));var zipdir=require(_0x25a8('0x3'));var jsonpatch=require(_0x25a8('0x4'));var rp=require(_0x25a8('0x5'));var moment=require(_0x25a8('0x6'));var BPromise=require(_0x25a8('0x7'));var Mustache=require('mustache');var util=require(_0x25a8('0x8'));var path=require(_0x25a8('0x9'));var sox=require(_0x25a8('0xa'));var csv=require(_0x25a8('0xb'));var ejs=require(_0x25a8('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0x25a8('0xd'));var crypto=require(_0x25a8('0xe'));var jsforce=require('jsforce');var deskjs=require(_0x25a8('0xf'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x25a8('0x10'));var Redis=require('ioredis');var authService=require(_0x25a8('0x11'));var qs=require(_0x25a8('0x12'));var hardwareService=require(_0x25a8('0x13'));var logger=require(_0x25a8('0x14'))(_0x25a8('0x15'));var utils=require(_0x25a8('0x16'));var config=require(_0x25a8('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x20469d,_0x130554){_0x130554=_0x130554||0xcc;return function(_0x48e9b6){if(_0x48e9b6){return _0x20469d[_0x25a8('0x18')](_0x130554);}return _0x20469d[_0x25a8('0x19')](_0x130554)[_0x25a8('0x1a')]();};}function respondWithResult(_0x59b576,_0x4cc85e){_0x4cc85e=_0x4cc85e||0xc8;return function(_0x2be5cd){if(_0x2be5cd){return _0x59b576[_0x25a8('0x19')](_0x4cc85e)[_0x25a8('0x1b')](_0x2be5cd);}};}function respondWithFilteredResult(_0x5136dc,_0x5b92c4){return function(_0xc273a6){if(_0xc273a6){var _0x4d3581=_0xc273a6[_0x25a8('0x1c')],_0x3de138=_0x5b92c4['offset'],_0x328a91=_0x5b92c4[_0x25a8('0x1d')]+_0x5b92c4['limit'],_0x20cae6;if(_0x328a91>=_0x4d3581){_0x328a91=_0x4d3581;_0x20cae6=0xc8;}else{_0x20cae6=0xce;}_0x5136dc[_0x25a8('0x19')](_0x20cae6);return _0x5136dc[_0x25a8('0x1e')](_0x25a8('0x1f'),_0x3de138+'-'+_0x328a91+'/'+_0x4d3581)['json'](_0xc273a6);}return null;};}function patchUpdates(_0x2d26fb){return function(_0x1ad5ed){try{jsonpatch['apply'](_0x1ad5ed,_0x2d26fb,!![]);}catch(_0x16596e){return BPromise[_0x25a8('0x20')](_0x16596e);}return _0x1ad5ed[_0x25a8('0x21')]();};}function saveUpdates(_0x530589,_0x48c4f7){return function(_0x5b9819){if(_0x5b9819){return _0x5b9819['update'](_0x530589)['then'](function(_0x3f4147){return _0x3f4147;});}return null;};}function removeEntity(_0xf45484,_0x47c7f3){return function(_0x1b6e5d){if(_0x1b6e5d){return _0x1b6e5d[_0x25a8('0x22')]()['then'](function(){var _0x5d14bc=_0x1b6e5d[_0x25a8('0x23')]({'plain':!![]});var _0x314e4a=_0x25a8('0x24');return db['UserProfileResource'][_0x25a8('0x22')]({'where':{'type':_0x314e4a,'resourceId':_0x5d14bc['id']}})['then'](function(){return _0x1b6e5d;});})[_0x25a8('0x25')](function(){_0xf45484['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x1e259a,_0x110c1f){return function(_0xf3303e){if(!_0xf3303e){_0x1e259a[_0x25a8('0x18')](0x194);}return _0xf3303e;};}function handleError(_0x304791,_0x34df32){_0x34df32=_0x34df32||0x1f4;return function(_0x433370){logger[_0x25a8('0x26')](_0x433370['stack']);if(_0x433370['name']){delete _0x433370['name'];}_0x304791[_0x25a8('0x19')](_0x34df32)[_0x25a8('0x27')](_0x433370);};}exports['index']=function(_0x3e0331,_0x581005){var _0x42f2df={},_0x173ca2={},_0x2529b7={'count':0x0,'rows':[]};var _0x289da9=db['Variable'][_0x25a8('0x28')];_0x173ca2[_0x25a8('0x29')]=_['keys'](_0x289da9);_0x173ca2[_0x25a8('0x2a')]=_['keys'](_0x3e0331[_0x25a8('0x2a')]);_0x173ca2[_0x25a8('0x2b')]=_[_0x25a8('0x2c')](_0x173ca2[_0x25a8('0x29')],_0x173ca2[_0x25a8('0x2a')]);_0x42f2df[_0x25a8('0x2d')]=_[_0x25a8('0x2c')](_0x173ca2['model'],qs['fields'](_0x3e0331[_0x25a8('0x2a')][_0x25a8('0x2e')]));_0x42f2df[_0x25a8('0x2d')]=_0x42f2df[_0x25a8('0x2d')][_0x25a8('0x2f')]?_0x42f2df[_0x25a8('0x2d')]:_0x173ca2['model'];if(!_0x3e0331['query'][_0x25a8('0x30')](_0x25a8('0x31'))){_0x42f2df[_0x25a8('0x32')]=qs[_0x25a8('0x32')](_0x3e0331[_0x25a8('0x2a')]['limit']);_0x42f2df[_0x25a8('0x1d')]=qs[_0x25a8('0x1d')](_0x3e0331[_0x25a8('0x2a')]['offset']);}_0x42f2df['order']=qs[_0x25a8('0x33')](_0x3e0331[_0x25a8('0x2a')][_0x25a8('0x33')]);_0x42f2df[_0x25a8('0x34')]=qs[_0x25a8('0x2b')](_[_0x25a8('0x35')](_0x3e0331[_0x25a8('0x2a')],_0x173ca2['filters']));if(_0x3e0331[_0x25a8('0x2a')][_0x25a8('0x36')]){_0x42f2df['where']=_['merge'](_0x42f2df[_0x25a8('0x34')],{'$or':_[_0x25a8('0x37')](_0x289da9,function(_0x1814c8){if(_0x1814c8['type'][_0x25a8('0x38')]!==_0x25a8('0x39')){var _0x118663={};_0x118663[_0x1814c8[_0x25a8('0x3a')]]={'$like':'%'+_0x3e0331['query'][_0x25a8('0x36')]+'%'};return _0x118663;}})});}_0x42f2df=_[_0x25a8('0x3b')]({},_0x42f2df,_0x3e0331[_0x25a8('0x3c')]);var _0x2f2e51={'where':_0x42f2df[_0x25a8('0x34')]};return db['Variable'][_0x25a8('0x1c')](_0x2f2e51)[_0x25a8('0x25')](function(_0x3e3ce4){_0x2529b7[_0x25a8('0x1c')]=_0x3e3ce4;if(_0x3e0331['query'][_0x25a8('0x3d')]){_0x42f2df[_0x25a8('0x3e')]=[{'all':!![]}];}return db[_0x25a8('0x3f')]['findAll'](_0x42f2df);})[_0x25a8('0x25')](function(_0x4bff91){_0x2529b7[_0x25a8('0x40')]=_0x4bff91;return _0x2529b7;})[_0x25a8('0x25')](respondWithFilteredResult(_0x581005,_0x42f2df))[_0x25a8('0x41')](handleError(_0x581005,null));};exports[_0x25a8('0x42')]=function(_0x4a86c4,_0x120bbf){var _0x39c473={'raw':!![],'where':{'id':_0x4a86c4[_0x25a8('0x43')]['id']}},_0x3a05e2={};_0x3a05e2['model']=_[_0x25a8('0x44')](db[_0x25a8('0x3f')][_0x25a8('0x28')]);_0x3a05e2[_0x25a8('0x2a')]=_[_0x25a8('0x44')](_0x4a86c4[_0x25a8('0x2a')]);_0x3a05e2[_0x25a8('0x2b')]=_['intersection'](_0x3a05e2[_0x25a8('0x29')],_0x3a05e2[_0x25a8('0x2a')]);_0x39c473[_0x25a8('0x2d')]=_['intersection'](_0x3a05e2['model'],qs[_0x25a8('0x2e')](_0x4a86c4[_0x25a8('0x2a')]['fields']));_0x39c473[_0x25a8('0x2d')]=_0x39c473['attributes'][_0x25a8('0x2f')]?_0x39c473[_0x25a8('0x2d')]:_0x3a05e2['model'];if(_0x4a86c4[_0x25a8('0x2a')][_0x25a8('0x3d')]){_0x39c473[_0x25a8('0x3e')]=[{'all':!![]}];}_0x39c473=_[_0x25a8('0x3b')]({},_0x39c473,_0x4a86c4[_0x25a8('0x3c')]);return db[_0x25a8('0x3f')][_0x25a8('0x45')](_0x39c473)[_0x25a8('0x25')](handleEntityNotFound(_0x120bbf,null))[_0x25a8('0x25')](respondWithResult(_0x120bbf,null))[_0x25a8('0x41')](handleError(_0x120bbf,null));};exports[_0x25a8('0x46')]=function(_0x4c1519,_0x3dd9ca){return db['Variable'][_0x25a8('0x46')](_0x4c1519['body'],{})[_0x25a8('0x25')](function(_0x56b570){var _0x40b48f=_0x4c1519[_0x25a8('0x47')][_0x25a8('0x23')]({'plain':!![]});if(!_0x40b48f)throw new Error(_0x25a8('0x48'));if(_0x40b48f[_0x25a8('0x49')]===_0x25a8('0x47')){var _0x2d1c27=_0x56b570[_0x25a8('0x23')]({'plain':!![]});var _0x4b019c=_0x25a8('0x24');return db[_0x25a8('0x4a')][_0x25a8('0x45')]({'where':{'name':_0x4b019c,'userProfileId':_0x40b48f[_0x25a8('0x4b')]},'raw':!![]})[_0x25a8('0x25')](function(_0x3980bb){if(_0x3980bb&&_0x3980bb[_0x25a8('0x4c')]===0x0){return db[_0x25a8('0x4d')][_0x25a8('0x46')]({'name':_0x2d1c27[_0x25a8('0x4e')],'resourceId':_0x2d1c27['id'],'type':_0x3980bb[_0x25a8('0x4e')],'sectionId':_0x3980bb['id']},{})['then'](function(){return _0x56b570;});}else{return _0x56b570;}})['catch'](function(_0x2c2257){logger[_0x25a8('0x26')](_0x25a8('0x4f'),_0x2c2257);throw _0x2c2257;});}return _0x56b570;})[_0x25a8('0x25')](respondWithResult(_0x3dd9ca,0xc9))[_0x25a8('0x41')](handleError(_0x3dd9ca,null));};exports[_0x25a8('0x50')]=function(_0x10178f,_0x10ecc3){if(_0x10178f[_0x25a8('0x51')]['id']){delete _0x10178f['body']['id'];}return db[_0x25a8('0x3f')][_0x25a8('0x45')]({'where':{'id':_0x10178f[_0x25a8('0x43')]['id']}})[_0x25a8('0x25')](handleEntityNotFound(_0x10ecc3,null))[_0x25a8('0x25')](saveUpdates(_0x10178f[_0x25a8('0x51')],null))[_0x25a8('0x25')](respondWithResult(_0x10ecc3,null))[_0x25a8('0x41')](handleError(_0x10ecc3,null));};exports[_0x25a8('0x22')]=function(_0x46dd39,_0x4659f8){return db['Variable']['find']({'where':{'id':_0x46dd39['params']['id']}})[_0x25a8('0x25')](handleEntityNotFound(_0x4659f8,null))[_0x25a8('0x25')](removeEntity(_0x4659f8,null))[_0x25a8('0x41')](handleError(_0x4659f8,null));};
\ No newline at end of file
+var _0xd25a=['show','options','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','sendStatus','end','status','json','offset','limit','apply','update','then','destroy','Variables','UserProfileResource','error','name','index','Variable','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','sort','where','pick','filter','merge','type','key','field','count','includeAll','include','findAll','rows','catch'];(function(_0xb99421,_0xaab133){var _0x4b3ec7=function(_0x591d1a){while(--_0x591d1a){_0xb99421['push'](_0xb99421['shift']());}};_0x4b3ec7(++_0xaab133);}(_0xd25a,0x1d4));var _0xad25=function(_0x352b56,_0x13936b){_0x352b56=_0x352b56-0x0;var _0x12456d=_0xd25a[_0x352b56];return _0x12456d;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xad25('0x0'));var rimraf=require(_0xad25('0x1'));var zipdir=require(_0xad25('0x2'));var jsonpatch=require(_0xad25('0x3'));var rp=require(_0xad25('0x4'));var moment=require('moment');var BPromise=require(_0xad25('0x5'));var Mustache=require(_0xad25('0x6'));var util=require(_0xad25('0x7'));var path=require('path');var sox=require(_0xad25('0x8'));var csv=require(_0xad25('0x9'));var ejs=require(_0xad25('0xa'));var fs=require('fs');var _=require(_0xad25('0xb'));var squel=require(_0xad25('0xc'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0xad25('0xd'));var toCsv=require(_0xad25('0x9'));var querystring=require(_0xad25('0xe'));var Papa=require(_0xad25('0xf'));var Redis=require(_0xad25('0x10'));var authService=require(_0xad25('0x11'));var qs=require(_0xad25('0x12'));var hardwareService=require(_0xad25('0x13'));var logger=require(_0xad25('0x14'))(_0xad25('0x15'));var utils=require(_0xad25('0x16'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x31e683,_0x10925d){_0x10925d=_0x10925d||0xcc;return function(_0x1c166a){if(_0x1c166a){return _0x31e683[_0xad25('0x17')](_0x10925d);}return _0x31e683['status'](_0x10925d)[_0xad25('0x18')]();};}function respondWithResult(_0x21f737,_0x2238b0){_0x2238b0=_0x2238b0||0xc8;return function(_0x50801c){if(_0x50801c){return _0x21f737[_0xad25('0x19')](_0x2238b0)[_0xad25('0x1a')](_0x50801c);}};}function respondWithFilteredResult(_0x41eed2,_0x41dc9b){return function(_0x5e5785){if(_0x5e5785){var _0x5c1d4f=_0x5e5785['count'],_0x3f2589=_0x41dc9b[_0xad25('0x1b')],_0x301e31=_0x41dc9b['offset']+_0x41dc9b[_0xad25('0x1c')],_0x3aba62;if(_0x301e31>=_0x5c1d4f){_0x301e31=_0x5c1d4f;_0x3aba62=0xc8;}else{_0x3aba62=0xce;}_0x41eed2[_0xad25('0x19')](_0x3aba62);return _0x41eed2['set']('Content-Range',_0x3f2589+'-'+_0x301e31+'/'+_0x5c1d4f)['json'](_0x5e5785);}return null;};}function patchUpdates(_0x5e75f4){return function(_0x53de54){try{jsonpatch[_0xad25('0x1d')](_0x53de54,_0x5e75f4,!![]);}catch(_0x3cf4ec){return BPromise['reject'](_0x3cf4ec);}return _0x53de54['save']();};}function saveUpdates(_0x27cac4,_0x55ec63){return function(_0x26035b){if(_0x26035b){return _0x26035b[_0xad25('0x1e')](_0x27cac4)[_0xad25('0x1f')](function(_0x1fb7b6){return _0x1fb7b6;});}return null;};}function removeEntity(_0x1ce5e9,_0x3bc0a3){return function(_0xb9e9ce){if(_0xb9e9ce){return _0xb9e9ce[_0xad25('0x20')]()['then'](function(){var _0x38950a=_0xb9e9ce['get']({'plain':!![]});var _0x21d6a3=_0xad25('0x21');return db[_0xad25('0x22')][_0xad25('0x20')]({'where':{'type':_0x21d6a3,'resourceId':_0x38950a['id']}})[_0xad25('0x1f')](function(){return _0xb9e9ce;});})[_0xad25('0x1f')](function(){_0x1ce5e9[_0xad25('0x19')](0xcc)[_0xad25('0x18')]();});}};}function handleEntityNotFound(_0x5661a3,_0x51a1ca){return function(_0x5e3580){if(!_0x5e3580){_0x5661a3[_0xad25('0x17')](0x194);}return _0x5e3580;};}function handleError(_0x518eb2,_0x2e05bc){_0x2e05bc=_0x2e05bc||0x1f4;return function(_0x19b225){logger[_0xad25('0x23')](_0x19b225['stack']);if(_0x19b225[_0xad25('0x24')]){delete _0x19b225['name'];}_0x518eb2['status'](_0x2e05bc)['send'](_0x19b225);};}exports[_0xad25('0x25')]=function(_0x27d366,_0x346ab5){var _0x45d2cd={},_0x5849f5={},_0x490c29={'count':0x0,'rows':[]};var _0x57da35=db[_0xad25('0x26')][_0xad25('0x27')];_0x5849f5[_0xad25('0x28')]=_[_0xad25('0x29')](_0x57da35);_0x5849f5['query']=_[_0xad25('0x29')](_0x27d366[_0xad25('0x2a')]);_0x5849f5[_0xad25('0x2b')]=_['intersection'](_0x5849f5[_0xad25('0x28')],_0x5849f5['query']);_0x45d2cd['attributes']=_[_0xad25('0x2c')](_0x5849f5[_0xad25('0x28')],qs[_0xad25('0x2d')](_0x27d366[_0xad25('0x2a')][_0xad25('0x2d')]));_0x45d2cd[_0xad25('0x2e')]=_0x45d2cd[_0xad25('0x2e')][_0xad25('0x2f')]?_0x45d2cd['attributes']:_0x5849f5[_0xad25('0x28')];if(!_0x27d366[_0xad25('0x2a')][_0xad25('0x30')](_0xad25('0x31'))){_0x45d2cd[_0xad25('0x1c')]=qs[_0xad25('0x1c')](_0x27d366[_0xad25('0x2a')]['limit']);_0x45d2cd[_0xad25('0x1b')]=qs[_0xad25('0x1b')](_0x27d366[_0xad25('0x2a')][_0xad25('0x1b')]);}_0x45d2cd['order']=qs[_0xad25('0x32')](_0x27d366[_0xad25('0x2a')][_0xad25('0x32')]);_0x45d2cd[_0xad25('0x33')]=qs[_0xad25('0x2b')](_[_0xad25('0x34')](_0x27d366['query'],_0x5849f5[_0xad25('0x2b')]));if(_0x27d366['query'][_0xad25('0x35')]){_0x45d2cd[_0xad25('0x33')]=_[_0xad25('0x36')](_0x45d2cd['where'],{'$or':_['map'](_0x57da35,function(_0x39af15){if(_0x39af15[_0xad25('0x37')][_0xad25('0x38')]!=='VIRTUAL'){var _0x19100c={};_0x19100c[_0x39af15[_0xad25('0x39')]]={'$like':'%'+_0x27d366[_0xad25('0x2a')]['filter']+'%'};return _0x19100c;}})});}_0x45d2cd=_['merge']({},_0x45d2cd,_0x27d366['options']);var _0x39375e={'where':_0x45d2cd[_0xad25('0x33')]};return db['Variable'][_0xad25('0x3a')](_0x39375e)['then'](function(_0x2ac2fd){_0x490c29['count']=_0x2ac2fd;if(_0x27d366['query'][_0xad25('0x3b')]){_0x45d2cd[_0xad25('0x3c')]=[{'all':!![]}];}return db[_0xad25('0x26')][_0xad25('0x3d')](_0x45d2cd);})[_0xad25('0x1f')](function(_0x2fe113){_0x490c29[_0xad25('0x3e')]=_0x2fe113;return _0x490c29;})[_0xad25('0x1f')](respondWithFilteredResult(_0x346ab5,_0x45d2cd))[_0xad25('0x3f')](handleError(_0x346ab5,null));};exports[_0xad25('0x40')]=function(_0x49545d,_0x662b06){var _0x152e5c={'raw':!![],'where':{'id':_0x49545d['params']['id']}},_0x54e8cd={};_0x54e8cd['model']=_[_0xad25('0x29')](db[_0xad25('0x26')][_0xad25('0x27')]);_0x54e8cd['query']=_[_0xad25('0x29')](_0x49545d[_0xad25('0x2a')]);_0x54e8cd[_0xad25('0x2b')]=_[_0xad25('0x2c')](_0x54e8cd[_0xad25('0x28')],_0x54e8cd['query']);_0x152e5c['attributes']=_[_0xad25('0x2c')](_0x54e8cd['model'],qs[_0xad25('0x2d')](_0x49545d[_0xad25('0x2a')][_0xad25('0x2d')]));_0x152e5c[_0xad25('0x2e')]=_0x152e5c[_0xad25('0x2e')][_0xad25('0x2f')]?_0x152e5c[_0xad25('0x2e')]:_0x54e8cd['model'];if(_0x49545d[_0xad25('0x2a')]['includeAll']){_0x152e5c[_0xad25('0x3c')]=[{'all':!![]}];}_0x152e5c=_[_0xad25('0x36')]({},_0x152e5c,_0x49545d[_0xad25('0x41')]);return db[_0xad25('0x26')][_0xad25('0x42')](_0x152e5c)[_0xad25('0x1f')](handleEntityNotFound(_0x662b06,null))[_0xad25('0x1f')](respondWithResult(_0x662b06,null))[_0xad25('0x3f')](handleError(_0x662b06,null));};exports[_0xad25('0x43')]=function(_0x9f79eb,_0x258828){return db['Variable'][_0xad25('0x43')](_0x9f79eb[_0xad25('0x44')],{})[_0xad25('0x1f')](function(_0x16e4ba){var _0x1e9c13=_0x9f79eb[_0xad25('0x45')][_0xad25('0x46')]({'plain':!![]});if(!_0x1e9c13)throw new Error(_0xad25('0x47'));if(_0x1e9c13['role']===_0xad25('0x45')){var _0x13e275=_0x16e4ba[_0xad25('0x46')]({'plain':!![]});var _0x59a51b=_0xad25('0x21');return db['UserProfileSection']['find']({'where':{'name':_0x59a51b,'userProfileId':_0x1e9c13[_0xad25('0x48')]},'raw':!![]})[_0xad25('0x1f')](function(_0x132d0b){if(_0x132d0b&&_0x132d0b[_0xad25('0x49')]===0x0){return db['UserProfileResource'][_0xad25('0x43')]({'name':_0x13e275[_0xad25('0x24')],'resourceId':_0x13e275['id'],'type':_0x132d0b[_0xad25('0x24')],'sectionId':_0x132d0b['id']},{})[_0xad25('0x1f')](function(){return _0x16e4ba;});}else{return _0x16e4ba;}})[_0xad25('0x3f')](function(_0x5d52ae){logger['error'](_0xad25('0x4a'),_0x5d52ae);throw _0x5d52ae;});}return _0x16e4ba;})['then'](respondWithResult(_0x258828,0xc9))[_0xad25('0x3f')](handleError(_0x258828,null));};exports[_0xad25('0x1e')]=function(_0x5a32d4,_0x4c67b4){if(_0x5a32d4[_0xad25('0x44')]['id']){delete _0x5a32d4[_0xad25('0x44')]['id'];}return db['Variable'][_0xad25('0x42')]({'where':{'id':_0x5a32d4[_0xad25('0x4b')]['id']}})[_0xad25('0x1f')](handleEntityNotFound(_0x4c67b4,null))[_0xad25('0x1f')](saveUpdates(_0x5a32d4[_0xad25('0x44')],null))[_0xad25('0x1f')](respondWithResult(_0x4c67b4,null))[_0xad25('0x3f')](handleError(_0x4c67b4,null));};exports[_0xad25('0x20')]=function(_0x16bfdf,_0x2d751e){return db[_0xad25('0x26')][_0xad25('0x42')]({'where':{'id':_0x16bfdf[_0xad25('0x4b')]['id']}})[_0xad25('0x1f')](handleEntityNotFound(_0x2d751e,null))[_0xad25('0x1f')](removeEntity(_0x2d751e,null))[_0xad25('0x3f')](handleError(_0x2d751e,null));};
\ No newline at end of file
index 84879e2..4863f89 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x33ac=['exports','Variable','tools_variables','util','moment','bluebird','request-promise','path','rimraf','../../config/environment','./variable.attributes'];(function(_0x589187,_0x317515){var _0x4966da=function(_0x428406){while(--_0x428406){_0x589187['push'](_0x589187['shift']());}};_0x4966da(++_0x317515);}(_0x33ac,0x1f2));var _0xc33a=function(_0x38fe1f,_0x1fa85e){_0x38fe1f=_0x38fe1f-0x0;var _0x2d7ed3=_0x33ac[_0x38fe1f];return _0x2d7ed3;};'use strict';var _=require('lodash');var util=require(_0xc33a('0x0'));var logger=require('../../config/logger')('api');var moment=require(_0xc33a('0x1'));var BPromise=require(_0xc33a('0x2'));var rp=require(_0xc33a('0x3'));var fs=require('fs');var path=require(_0xc33a('0x4'));var rimraf=require(_0xc33a('0x5'));var config=require(_0xc33a('0x6'));var attributes=require(_0xc33a('0x7'));module[_0xc33a('0x8')]=function(_0x322368,_0x554de7){return _0x322368['define'](_0xc33a('0x9'),attributes,{'tableName':_0xc33a('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0954=['bluebird','request-promise','path','rimraf','../../config/environment','./variable.attributes','define','Variable','tools_variables','lodash','../../config/logger','api'];(function(_0x2daef6,_0xcac228){var _0x62d030=function(_0x26a7d6){while(--_0x26a7d6){_0x2daef6['push'](_0x2daef6['shift']());}};_0x62d030(++_0xcac228);}(_0x0954,0x135));var _0x4095=function(_0x238671,_0x34aea0){_0x238671=_0x238671-0x0;var _0x474844=_0x0954[_0x238671];return _0x474844;};'use strict';var _=require(_0x4095('0x0'));var util=require('util');var logger=require(_0x4095('0x1'))(_0x4095('0x2'));var moment=require('moment');var BPromise=require(_0x4095('0x3'));var rp=require(_0x4095('0x4'));var fs=require('fs');var path=require(_0x4095('0x5'));var rimraf=require(_0x4095('0x6'));var config=require(_0x4095('0x7'));var attributes=require(_0x4095('0x8'));module['exports']=function(_0x543154,_0x57ad9c){return _0x543154[_0x4095('0x9')](_0x4095('0xa'),attributes,{'tableName':_0x4095('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 17af58a..454a129 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3b65=['request\x20sent','Variable,\x20%s,\x20%s,\x20%s','stringify','error','Variable,\x20%s,\x20%s','message','catch','ShowVariable','find','options','raw','where','attributes','include','map','model','debug','lodash','moment','bluebird','ioredis','../../config/utils','rpc','jayson/promise','client','http','request','then','info'];(function(_0x297fd3,_0x115406){var _0x2af381=function(_0x1dd31b){while(--_0x1dd31b){_0x297fd3['push'](_0x297fd3['shift']());}};_0x2af381(++_0x115406);}(_0x3b65,0x1e1));var _0x53b6=function(_0x2c5fa2,_0x4db145){_0x2c5fa2=_0x2c5fa2-0x0;var _0x3894a5=_0x3b65[_0x2c5fa2];return _0x3894a5;};'use strict';var _=require(_0x53b6('0x0'));var util=require('util');var moment=require(_0x53b6('0x1'));var BPromise=require(_0x53b6('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x53b6('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x53b6('0x4'));var logger=require('../../config/logger')(_0x53b6('0x5'));var config=require('../../config/environment');var jayson=require(_0x53b6('0x6'));var client=jayson[_0x53b6('0x7')][_0x53b6('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x3f1e82,_0x353ffc,_0x309771){return new BPromise(function(_0x226289,_0x4bfb26){return client[_0x53b6('0x9')](_0x3f1e82,_0x309771)[_0x53b6('0xa')](function(_0x52b447){logger[_0x53b6('0xb')]('Variable,\x20%s,\x20%s',_0x353ffc,_0x53b6('0xc'));logger['debug'](_0x53b6('0xd'),_0x353ffc,'request\x20sent',JSON[_0x53b6('0xe')](_0x52b447));if(_0x52b447[_0x53b6('0xf')]){if(_0x52b447[_0x53b6('0xf')]['code']===0x1f4){logger[_0x53b6('0xf')](_0x53b6('0x10'),_0x353ffc,_0x52b447[_0x53b6('0xf')][_0x53b6('0x11')]);return _0x4bfb26(_0x52b447[_0x53b6('0xf')]['message']);}logger[_0x53b6('0xf')](_0x53b6('0x10'),_0x353ffc,_0x52b447['error']['message']);return _0x226289(_0x52b447[_0x53b6('0xf')][_0x53b6('0x11')]);}else{logger[_0x53b6('0xb')](_0x53b6('0x10'),_0x353ffc,'request\x20sent');_0x226289(_0x52b447['result']['message']);}})[_0x53b6('0x12')](function(_0x3ce506){logger[_0x53b6('0xf')]('Variable,\x20%s,\x20%s',_0x353ffc,_0x3ce506);_0x4bfb26(_0x3ce506);});});}exports[_0x53b6('0x13')]=function(_0x1f640c){var _0x120bd0=this;return new Promise(function(_0xb97778,_0x560e39){return db['Variable'][_0x53b6('0x14')]({'raw':_0x1f640c[_0x53b6('0x15')]?_0x1f640c[_0x53b6('0x15')][_0x53b6('0x16')]===undefined?!![]:![]:!![],'where':_0x1f640c[_0x53b6('0x15')]?_0x1f640c['options'][_0x53b6('0x17')]||null:null,'attributes':_0x1f640c[_0x53b6('0x15')]?_0x1f640c[_0x53b6('0x15')][_0x53b6('0x18')]||null:null,'include':_0x1f640c['options']?_0x1f640c[_0x53b6('0x15')][_0x53b6('0x19')]?_[_0x53b6('0x1a')](_0x1f640c[_0x53b6('0x15')][_0x53b6('0x19')],function(_0x5e800d){return{'model':db[_0x5e800d[_0x53b6('0x1b')]],'as':_0x5e800d['as'],'attributes':_0x5e800d[_0x53b6('0x18')],'include':_0x5e800d[_0x53b6('0x19')]?_[_0x53b6('0x1a')](_0x5e800d['include'],function(_0x49deb1){return{'model':db[_0x49deb1[_0x53b6('0x1b')]],'as':_0x49deb1['as'],'attributes':_0x49deb1[_0x53b6('0x18')],'include':_0x49deb1['include']?_[_0x53b6('0x1a')](_0x49deb1['include'],function(_0x449c0e){return{'model':db[_0x449c0e[_0x53b6('0x1b')]],'as':_0x449c0e['as'],'attributes':_0x449c0e[_0x53b6('0x18')]};}):[]};}):[]};}):[]:[]})[_0x53b6('0xa')](function(_0x3d1c99){logger[_0x53b6('0xb')](_0x53b6('0x13'),_0x1f640c);logger[_0x53b6('0x1c')](_0x53b6('0x13'),_0x1f640c,JSON['stringify'](_0x3d1c99));_0xb97778(_0x3d1c99);})[_0x53b6('0x12')](function(_0x56ea5a){logger[_0x53b6('0xf')](_0x53b6('0x13'),_0x56ea5a[_0x53b6('0x11')],_0x1f640c);_0x560e39(_0x120bd0[_0x53b6('0xf')](0x1f4,_0x56ea5a[_0x53b6('0x11')]));});});};
\ No newline at end of file
+var _0x46ee=['bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','http','request','then','Variable,\x20%s,\x20%s','request\x20sent','stringify','error','message','info','catch','ShowVariable','options','raw','where','include','map','model','attributes','debug','lodash','util'];(function(_0x44c29b,_0x3a29e2){var _0x244960=function(_0x2a7708){while(--_0x2a7708){_0x44c29b['push'](_0x44c29b['shift']());}};_0x244960(++_0x3a29e2);}(_0x46ee,0x8f));var _0xe46e=function(_0x195285,_0x2620ee){_0x195285=_0x195285-0x0;var _0x3ff601=_0x46ee[_0x195285];return _0x3ff601;};'use strict';var _=require(_0xe46e('0x0'));var util=require(_0xe46e('0x1'));var moment=require('moment');var BPromise=require(_0xe46e('0x2'));var rs=require(_0xe46e('0x3'));var fs=require('fs');var Redis=require(_0xe46e('0x4'));var db=require(_0xe46e('0x5'))['db'];var utils=require(_0xe46e('0x6'));var logger=require(_0xe46e('0x7'))('rpc');var config=require(_0xe46e('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xe46e('0x9')][_0xe46e('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4aade7,_0x4aa88b,_0x1e1117){return new BPromise(function(_0x5ec204,_0x203760){return client[_0xe46e('0xb')](_0x4aade7,_0x1e1117)[_0xe46e('0xc')](function(_0x289210){logger['info'](_0xe46e('0xd'),_0x4aa88b,'request\x20sent');logger['debug']('Variable,\x20%s,\x20%s,\x20%s',_0x4aa88b,_0xe46e('0xe'),JSON[_0xe46e('0xf')](_0x289210));if(_0x289210[_0xe46e('0x10')]){if(_0x289210[_0xe46e('0x10')]['code']===0x1f4){logger[_0xe46e('0x10')](_0xe46e('0xd'),_0x4aa88b,_0x289210[_0xe46e('0x10')][_0xe46e('0x11')]);return _0x203760(_0x289210[_0xe46e('0x10')][_0xe46e('0x11')]);}logger[_0xe46e('0x10')](_0xe46e('0xd'),_0x4aa88b,_0x289210[_0xe46e('0x10')][_0xe46e('0x11')]);return _0x5ec204(_0x289210[_0xe46e('0x10')][_0xe46e('0x11')]);}else{logger[_0xe46e('0x12')](_0xe46e('0xd'),_0x4aa88b,_0xe46e('0xe'));_0x5ec204(_0x289210['result']['message']);}})[_0xe46e('0x13')](function(_0x18fddc){logger[_0xe46e('0x10')](_0xe46e('0xd'),_0x4aa88b,_0x18fddc);_0x203760(_0x18fddc);});});}exports[_0xe46e('0x14')]=function(_0x18b424){var _0x5f3280=this;return new Promise(function(_0x596e27,_0x522e4b){return db['Variable']['find']({'raw':_0x18b424[_0xe46e('0x15')]?_0x18b424[_0xe46e('0x15')][_0xe46e('0x16')]===undefined?!![]:![]:!![],'where':_0x18b424['options']?_0x18b424['options'][_0xe46e('0x17')]||null:null,'attributes':_0x18b424['options']?_0x18b424[_0xe46e('0x15')]['attributes']||null:null,'include':_0x18b424[_0xe46e('0x15')]?_0x18b424[_0xe46e('0x15')][_0xe46e('0x18')]?_[_0xe46e('0x19')](_0x18b424['options'][_0xe46e('0x18')],function(_0x30cf7d){return{'model':db[_0x30cf7d[_0xe46e('0x1a')]],'as':_0x30cf7d['as'],'attributes':_0x30cf7d[_0xe46e('0x1b')],'include':_0x30cf7d[_0xe46e('0x18')]?_['map'](_0x30cf7d[_0xe46e('0x18')],function(_0x280242){return{'model':db[_0x280242[_0xe46e('0x1a')]],'as':_0x280242['as'],'attributes':_0x280242['attributes'],'include':_0x280242[_0xe46e('0x18')]?_[_0xe46e('0x19')](_0x280242['include'],function(_0x143c38){return{'model':db[_0x143c38['model']],'as':_0x143c38['as'],'attributes':_0x143c38['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x2b2494){logger[_0xe46e('0x12')](_0xe46e('0x14'),_0x18b424);logger[_0xe46e('0x1c')]('ShowVariable',_0x18b424,JSON[_0xe46e('0xf')](_0x2b2494));_0x596e27(_0x2b2494);})[_0xe46e('0x13')](function(_0x307f94){logger[_0xe46e('0x10')](_0xe46e('0x14'),_0x307f94[_0xe46e('0x11')],_0x18b424);_0x522e4b(_0x5f3280[_0xe46e('0x10')](0x1f4,_0x307f94[_0xe46e('0x11')]));});});};
\ No newline at end of file
index bb3b790..a6a159c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc2bb=['get','index','isAuthenticated','canUpdate','fetch','/pull','pull','/migrations','migrations','express','../../components/auth/service','./version.controller'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xc2bb,0xc9));var _0xbc2b=function(_0x55cbf9,_0x38f1ec){_0x55cbf9=_0x55cbf9-0x0;var _0x582a5b=_0xc2bb[_0x55cbf9];return _0x582a5b;};'use strict';var express=require(_0xbc2b('0x0'));var router=express['Router']();var auth=require(_0xbc2b('0x1'));var controller=require(_0xbc2b('0x2'));router[_0xbc2b('0x3')]('/',controller[_0xbc2b('0x4')]);router[_0xbc2b('0x3')]('/fetch',auth[_0xbc2b('0x5')](),auth[_0xbc2b('0x6')](),controller[_0xbc2b('0x7')]);router[_0xbc2b('0x3')]('/reset',auth[_0xbc2b('0x5')](),auth['canUpdate'](),controller['reset']);router[_0xbc2b('0x3')](_0xbc2b('0x8'),auth[_0xbc2b('0x5')](),auth[_0xbc2b('0x6')](),controller[_0xbc2b('0x9')]);router[_0xbc2b('0x3')]('/restart',auth[_0xbc2b('0x5')](),controller['restart']);router[_0xbc2b('0x3')](_0xbc2b('0xa'),controller[_0xbc2b('0xb')]);module['exports']=router;
\ No newline at end of file
+var _0x72dd=['/reset','isAuthenticated','reset','/pull','pull','/restart','restart','/migrations','migrations','exports','express','Router','../../components/auth/service','./version.controller','get','index','/fetch','canUpdate','fetch'];(function(_0x432682,_0x253044){var _0x463d05=function(_0xa73403){while(--_0xa73403){_0x432682['push'](_0x432682['shift']());}};_0x463d05(++_0x253044);}(_0x72dd,0x1ac));var _0xd72d=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0x72dd[_0x501510];return _0x1e6ee5;};'use strict';var express=require(_0xd72d('0x0'));var router=express[_0xd72d('0x1')]();var auth=require(_0xd72d('0x2'));var controller=require(_0xd72d('0x3'));router[_0xd72d('0x4')]('/',controller[_0xd72d('0x5')]);router[_0xd72d('0x4')](_0xd72d('0x6'),auth['isAuthenticated'](),auth[_0xd72d('0x7')](),controller[_0xd72d('0x8')]);router['get'](_0xd72d('0x9'),auth[_0xd72d('0xa')](),auth['canUpdate'](),controller[_0xd72d('0xb')]);router[_0xd72d('0x4')](_0xd72d('0xc'),auth['isAuthenticated'](),auth[_0xd72d('0x7')](),controller[_0xd72d('0xd')]);router[_0xd72d('0x4')](_0xd72d('0xe'),auth[_0xd72d('0xa')](),controller[_0xd72d('0xf')]);router[_0xd72d('0x4')](_0xd72d('0x10'),controller[_0xd72d('0x11')]);module[_0xd72d('0x12')]=router;
\ No newline at end of file
index aaf51b4..34558e3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb0d9=['getQueryInterface','constructor','Migration\x20tried\x20to\x20use\x20old\x20style\x20\x22done\x22\x20callback.\x20Please\x20upgrade\x20to\x20\x22umzug\x22\x20and\x20return\x20a\x20promise\x20instead.','Database\x20migrated\x20successfully\x20from\x20version\x20','\x20to\x20','last','UniqueConstraintError','Database\x20already\x20up-to-date','umzug','path','lodash','pkginfo','version','compare-versions','exec','../../config/logger','update','simple-git','root','index','exports','query','latest','tags','status','json','fetch','master','error','git\x20fetch','reset','--hard','git\x20reset\x20--hard\x20FETCH_HEAD','git\x20reset\x20--hard','pull','npm\x20install\x20--production','info','restart','motion2','then','pm2\x20restart\x20motion\x20%s','catch','migrations','readdirSync','join','server','length','replace','.js','sort','sequelize','Migration'];(function(_0x1f6691,_0x3a3d46){var _0xf786b6=function(_0x2afbdb){while(--_0x2afbdb){_0x1f6691['push'](_0x1f6691['shift']());}};_0xf786b6(++_0x3a3d46);}(_0xb0d9,0x10c));var _0x9b0d=function(_0x38722f,_0x45cf2a){_0x38722f=_0x38722f-0x0;var _0x998373=_0xb0d9[_0x38722f];return _0x998373;};'use strict';var Umzug=require(_0x9b0d('0x0'));var path=require(_0x9b0d('0x1'));var fs=require('fs');var _=require(_0x9b0d('0x2'));var pkginfo=require(_0x9b0d('0x3'))(module,_0x9b0d('0x4'));var compareVersions=require(_0x9b0d('0x5'));var exec=require('child_process')[_0x9b0d('0x6')];var db=require('../../mysqldb')['db'];var config=require('../../config/environment');var pm2=require('../../config/pm2');var logger=require(_0x9b0d('0x7'))(_0x9b0d('0x8'));var git=require(_0x9b0d('0x9'))(config[_0x9b0d('0xa')]);exports[_0x9b0d('0xb')]=function(_0x45c371,_0x32ee67){var _0x30cd11={'current':module[_0x9b0d('0xc')]['version'],'phonebar':0x2};if(_0x45c371['query']&&_0x45c371[_0x9b0d('0xd')][_0x9b0d('0xe')]){return git['fetch']()[_0x9b0d('0xf')](function(_0x118863,_0x506ef2){_0x30cd11[_0x9b0d('0xe')]=(_0x118863?module[_0x9b0d('0xc')]['version']:_0x506ef2[_0x9b0d('0xe')])||'2.0.0';return _0x32ee67[_0x9b0d('0x10')](0xc8)[_0x9b0d('0x11')](_0x30cd11);});}else{return _0x32ee67[_0x9b0d('0x10')](0xc8)['json'](_0x30cd11);}};exports[_0x9b0d('0x12')]=function(_0x551445,_0x404f33){return git[_0x9b0d('0x12')](['origin',_0x9b0d('0x13')],function(_0x49902e){if(_0x49902e){logger[_0x9b0d('0x14')](_0x49902e);return _0x404f33[_0x9b0d('0x10')](0x1f4)[_0x9b0d('0x11')](_0x49902e);}logger['info'](_0x9b0d('0x15'));return _0x404f33[_0x9b0d('0x10')](0xc8)['json']({'output':'git\x20fetch\x20origin\x20master'});});};exports['reset']=function(_0x2e9957,_0xd8bb89){return git[_0x9b0d('0x16')]([_0x9b0d('0x17'),'FETCH_HEAD'],function(_0x292a17){if(_0x292a17){logger[_0x9b0d('0x14')](_0x292a17);return _0xd8bb89[_0x9b0d('0x10')](0x1f4)[_0x9b0d('0x11')](_0x292a17);}logger['info'](_0x9b0d('0x18'));return _0xd8bb89[_0x9b0d('0x10')](0xc8)[_0x9b0d('0x11')]({'output':_0x9b0d('0x19')});});};exports[_0x9b0d('0x1a')]=function(_0x49a49a,_0x3268f4){exec(_0x9b0d('0x1b'),function(_0x313780,_0x14c01b,_0x74065a){logger[_0x9b0d('0x1c')](_0x14c01b);logger[_0x9b0d('0x1c')](_0x74065a);if(_0x313780){logger[_0x9b0d('0x14')](_0x313780);return _0x3268f4[_0x9b0d('0x10')](0x1f4)[_0x9b0d('0x11')](_0x313780);}return _0x3268f4[_0x9b0d('0x10')](0xc8)['json']({'output':_0x14c01b});});};exports[_0x9b0d('0x1d')]=function(_0x4f774c,_0x26ecfc){return pm2[_0x9b0d('0x1d')](_0x9b0d('0x1e'))[_0x9b0d('0x1f')](function(_0x213861){logger[_0x9b0d('0x1c')](_0x9b0d('0x20'),_0x213861);return _0x26ecfc[_0x9b0d('0x10')](0xc8)[_0x9b0d('0x11')]({'output':'Your\x20system\x20has\x20been\x20restart\x20successfully'});})[_0x9b0d('0x21')](function(_0x3c96b9){logger[_0x9b0d('0x14')](_0x3c96b9);return _0x26ecfc[_0x9b0d('0x10')](0x1f4)[_0x9b0d('0x11')](_0x3c96b9);});};exports[_0x9b0d('0x22')]=function(_0x4ee722,_0x2b3795){var _0xee0911=fs[_0x9b0d('0x23')](path[_0x9b0d('0x24')](config['root'],_0x9b0d('0x25'),'migrations'));var _0x1d2a63=[];for(var _0x561d9f=0x0;_0x561d9f<_0xee0911[_0x9b0d('0x26')];_0x561d9f++){var _0x4ff235=_0xee0911[_0x561d9f][_0x9b0d('0x27')](_0x9b0d('0x28'),'');if(compareVersions(module['exports'][_0x9b0d('0x4')],_0x4ff235)===-0x1){_0x1d2a63['push'](_0x4ff235);}}if(_0x1d2a63['length']){var _0x1b16a7=_0x1d2a63[_0x9b0d('0x29')](compareVersions);var _0xb35144=new Umzug({'storage':_0x9b0d('0x2a'),'storageOptions':{'model':db[_0x9b0d('0x2b')],'modelName':'Migration','columnName':_0x9b0d('0x4')},'migrations':{'params':[db[_0x9b0d('0x2a')][_0x9b0d('0x2c')](),db[_0x9b0d('0x2a')][_0x9b0d('0x2d')],function(){throw new Error(_0x9b0d('0x2e'));}],'path':path[_0x9b0d('0x24')](config[_0x9b0d('0xa')],_0x9b0d('0x25'),_0x9b0d('0x22')),'pattern':/\.js$/}});_0xb35144['up']({'migrations':_['map'](_0x1b16a7,function(_0x290c62){return _0x290c62+_0x9b0d('0x28');})})[_0x9b0d('0x1f')](function(){return _0x2b3795['status'](0xc8)['json']({'output':_0x9b0d('0x2f')+module['exports']['version']+_0x9b0d('0x30')+_[_0x9b0d('0x31')](_0x1b16a7),'migrations':_['join'](_0x1b16a7)});})[_0x9b0d('0x21')](function(_0xb0246){if(_0xb0246 instanceof db['sequelize'][_0x9b0d('0x32')]){return _0x2b3795[_0x9b0d('0x10')](0xc8)[_0x9b0d('0x11')]({'output':_0x9b0d('0x33')});}else{return _0x2b3795[_0x9b0d('0x10')](0x1f4)[_0x9b0d('0x11')](_0xb0246);}});}else{return _0x2b3795[_0x9b0d('0x10')](0xc8)['json']({'output':'Database\x20already\x20up-to-date'});}};
\ No newline at end of file
+var _0xc641=['.js','push','sequelize','Migration','getQueryInterface','constructor','Migration\x20tried\x20to\x20use\x20old\x20style\x20\x22done\x22\x20callback.\x20Please\x20upgrade\x20to\x20\x22umzug\x22\x20and\x20return\x20a\x20promise\x20instead.','join','map','then','Database\x20migrated\x20successfully\x20from\x20version\x20','\x20to\x20','UniqueConstraintError','Database\x20already\x20up-to-date','umzug','path','lodash','pkginfo','version','compare-versions','child_process','exec','../../mysqldb','../../config/environment','../../config/pm2','update','simple-git','root','exports','query','latest','2.0.0','status','json','fetch','origin','master','info','git\x20fetch','git\x20fetch\x20origin\x20master','reset','--hard','FETCH_HEAD','error','git\x20reset\x20--hard\x20FETCH_HEAD','pull','npm\x20install\x20--production','restart','motion2','pm2\x20restart\x20motion\x20%s','catch','migrations','readdirSync','server','length'];(function(_0x3de7e0,_0x28cbff){var _0x11d0b3=function(_0xd95412){while(--_0xd95412){_0x3de7e0['push'](_0x3de7e0['shift']());}};_0x11d0b3(++_0x28cbff);}(_0xc641,0xea));var _0x1c64=function(_0x466c91,_0x31ae1d){_0x466c91=_0x466c91-0x0;var _0x4b0d3a=_0xc641[_0x466c91];return _0x4b0d3a;};'use strict';var Umzug=require(_0x1c64('0x0'));var path=require(_0x1c64('0x1'));var fs=require('fs');var _=require(_0x1c64('0x2'));var pkginfo=require(_0x1c64('0x3'))(module,_0x1c64('0x4'));var compareVersions=require(_0x1c64('0x5'));var exec=require(_0x1c64('0x6'))[_0x1c64('0x7')];var db=require(_0x1c64('0x8'))['db'];var config=require(_0x1c64('0x9'));var pm2=require(_0x1c64('0xa'));var logger=require('../../config/logger')(_0x1c64('0xb'));var git=require(_0x1c64('0xc'))(config[_0x1c64('0xd')]);exports['index']=function(_0x2a15ac,_0x5a5b06){var _0x36a9e6={'current':module[_0x1c64('0xe')][_0x1c64('0x4')],'phonebar':0x2};if(_0x2a15ac[_0x1c64('0xf')]&&_0x2a15ac[_0x1c64('0xf')][_0x1c64('0x10')]){return git['fetch']()['tags'](function(_0x2a5ff5,_0xc9762a){_0x36a9e6[_0x1c64('0x10')]=(_0x2a5ff5?module[_0x1c64('0xe')][_0x1c64('0x4')]:_0xc9762a['latest'])||_0x1c64('0x11');return _0x5a5b06[_0x1c64('0x12')](0xc8)[_0x1c64('0x13')](_0x36a9e6);});}else{return _0x5a5b06['status'](0xc8)[_0x1c64('0x13')](_0x36a9e6);}};exports[_0x1c64('0x14')]=function(_0x37982e,_0x22a73a){return git[_0x1c64('0x14')]([_0x1c64('0x15'),_0x1c64('0x16')],function(_0x265d63){if(_0x265d63){logger['error'](_0x265d63);return _0x22a73a[_0x1c64('0x12')](0x1f4)[_0x1c64('0x13')](_0x265d63);}logger[_0x1c64('0x17')](_0x1c64('0x18'));return _0x22a73a['status'](0xc8)['json']({'output':_0x1c64('0x19')});});};exports[_0x1c64('0x1a')]=function(_0xab14bd,_0x512af5){return git['reset']([_0x1c64('0x1b'),_0x1c64('0x1c')],function(_0x497eb6){if(_0x497eb6){logger[_0x1c64('0x1d')](_0x497eb6);return _0x512af5[_0x1c64('0x12')](0x1f4)[_0x1c64('0x13')](_0x497eb6);}logger['info'](_0x1c64('0x1e'));return _0x512af5[_0x1c64('0x12')](0xc8)[_0x1c64('0x13')]({'output':'git\x20reset\x20--hard'});});};exports[_0x1c64('0x1f')]=function(_0x619533,_0x5bc05c){exec(_0x1c64('0x20'),function(_0x51dfa9,_0xb65ce7,_0x150c84){logger[_0x1c64('0x17')](_0xb65ce7);logger[_0x1c64('0x17')](_0x150c84);if(_0x51dfa9){logger[_0x1c64('0x1d')](_0x51dfa9);return _0x5bc05c['status'](0x1f4)[_0x1c64('0x13')](_0x51dfa9);}return _0x5bc05c[_0x1c64('0x12')](0xc8)[_0x1c64('0x13')]({'output':_0xb65ce7});});};exports[_0x1c64('0x21')]=function(_0x50486b,_0x23a798){return pm2['restart'](_0x1c64('0x22'))['then'](function(_0x5bfd28){logger[_0x1c64('0x17')](_0x1c64('0x23'),_0x5bfd28);return _0x23a798['status'](0xc8)['json']({'output':'Your\x20system\x20has\x20been\x20restart\x20successfully'});})[_0x1c64('0x24')](function(_0x64e8ae){logger['error'](_0x64e8ae);return _0x23a798[_0x1c64('0x12')](0x1f4)[_0x1c64('0x13')](_0x64e8ae);});};exports[_0x1c64('0x25')]=function(_0x2596ca,_0x1bb3f4){var _0x42bafe=fs[_0x1c64('0x26')](path['join'](config[_0x1c64('0xd')],_0x1c64('0x27'),'migrations'));var _0xcfeb3d=[];for(var _0x57841d=0x0;_0x57841d<_0x42bafe[_0x1c64('0x28')];_0x57841d++){var _0x4946af=_0x42bafe[_0x57841d]['replace'](_0x1c64('0x29'),'');if(compareVersions(module[_0x1c64('0xe')][_0x1c64('0x4')],_0x4946af)===-0x1){_0xcfeb3d[_0x1c64('0x2a')](_0x4946af);}}if(_0xcfeb3d[_0x1c64('0x28')]){var _0x23ce0f=_0xcfeb3d['sort'](compareVersions);var _0x192a51=new Umzug({'storage':_0x1c64('0x2b'),'storageOptions':{'model':db['Migration'],'modelName':_0x1c64('0x2c'),'columnName':_0x1c64('0x4')},'migrations':{'params':[db[_0x1c64('0x2b')][_0x1c64('0x2d')](),db['sequelize'][_0x1c64('0x2e')],function(){throw new Error(_0x1c64('0x2f'));}],'path':path[_0x1c64('0x30')](config[_0x1c64('0xd')],_0x1c64('0x27'),'migrations'),'pattern':/\.js$/}});_0x192a51['up']({'migrations':_[_0x1c64('0x31')](_0x23ce0f,function(_0x17f825){return _0x17f825+_0x1c64('0x29');})})[_0x1c64('0x32')](function(){return _0x1bb3f4['status'](0xc8)[_0x1c64('0x13')]({'output':_0x1c64('0x33')+module[_0x1c64('0xe')][_0x1c64('0x4')]+_0x1c64('0x34')+_['last'](_0x23ce0f),'migrations':_['join'](_0x23ce0f)});})[_0x1c64('0x24')](function(_0x64c91b){if(_0x64c91b instanceof db[_0x1c64('0x2b')][_0x1c64('0x35')]){return _0x1bb3f4[_0x1c64('0x12')](0xc8)[_0x1c64('0x13')]({'output':'Database\x20already\x20up-to-date'});}else{return _0x1bb3f4['status'](0x1f4)[_0x1c64('0x13')](_0x64c91b);}});}else{return _0x1bb3f4[_0x1c64('0x12')](0xc8)[_0x1c64('0x13')]({'output':_0x1c64('0x36')});}};
\ No newline at end of file
index 1d14276..4b5d209 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7880=['util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./voiceAgentReport.controller','get','isAuthenticated','index','/describe','describe','post','create','put','/:id','update','destroy','exports'];(function(_0xcc1a85,_0x28e9e0){var _0x5e0b2c=function(_0x58f481){while(--_0x58f481){_0xcc1a85['push'](_0xcc1a85['shift']());}};_0x5e0b2c(++_0x28e9e0);}(_0x7880,0x1f4));var _0x0788=function(_0x5cc3d4,_0xbcbf9b){_0x5cc3d4=_0x5cc3d4-0x0;var _0x17ca31=_0x7880[_0x5cc3d4];return _0x17ca31;};'use strict';var multer=require('multer');var util=require(_0x0788('0x0'));var path=require(_0x0788('0x1'));var timeout=require(_0x0788('0x2'));var express=require(_0x0788('0x3'));var router=express[_0x0788('0x4')]();var auth=require(_0x0788('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x0788('0x6'));var controller=require(_0x0788('0x7'));router[_0x0788('0x8')]('/',auth[_0x0788('0x9')](),controller[_0x0788('0xa')]);router[_0x0788('0x8')](_0x0788('0xb'),auth[_0x0788('0x9')](),controller[_0x0788('0xc')]);router[_0x0788('0x8')]('/:id',auth[_0x0788('0x9')](),controller['show']);router[_0x0788('0xd')]('/',auth['isAuthenticated'](),controller[_0x0788('0xe')]);router[_0x0788('0xf')](_0x0788('0x10'),auth[_0x0788('0x9')](),controller[_0x0788('0x11')]);router['delete'](_0x0788('0x10'),auth[_0x0788('0x9')](),controller[_0x0788('0x12')]);module[_0x0788('0x13')]=router;
\ No newline at end of file
+var _0x6050=['create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./voiceAgentReport.controller','get','/:id','isAuthenticated','show','post'];(function(_0x38aa21,_0x399577){var _0x1b2ecc=function(_0x1395e3){while(--_0x1395e3){_0x38aa21['push'](_0x38aa21['shift']());}};_0x1b2ecc(++_0x399577);}(_0x6050,0x196));var _0x0605=function(_0x30cdca,_0x259c1d){_0x30cdca=_0x30cdca-0x0;var _0x3a4824=_0x6050[_0x30cdca];return _0x3a4824;};'use strict';var multer=require(_0x0605('0x0'));var util=require(_0x0605('0x1'));var path=require(_0x0605('0x2'));var timeout=require(_0x0605('0x3'));var express=require(_0x0605('0x4'));var router=express[_0x0605('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x0605('0x6'));var config=require(_0x0605('0x7'));var controller=require(_0x0605('0x8'));router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0x0605('0x9')]('/describe',auth['isAuthenticated'](),controller['describe']);router[_0x0605('0x9')](_0x0605('0xa'),auth[_0x0605('0xb')](),controller[_0x0605('0xc')]);router[_0x0605('0xd')]('/',auth['isAuthenticated'](),controller[_0x0605('0xe')]);router[_0x0605('0xf')](_0x0605('0xa'),auth[_0x0605('0xb')](),controller[_0x0605('0x10')]);router[_0x0605('0x11')](_0x0605('0xa'),auth[_0x0605('0xb')](),controller[_0x0605('0x12')]);module[_0x0605('0x13')]=router;
\ No newline at end of file
index 4cff15b..b3410c4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcf12=['exports','STRING','DATE','INTEGER','BOOLEAN'];(function(_0x45f951,_0x2750c8){var _0x24756c=function(_0x31c931){while(--_0x31c931){_0x45f951['push'](_0x45f951['shift']());}};_0x24756c(++_0x2750c8);}(_0xcf12,0x127));var _0x2cf1=function(_0x1709cc,_0x3a0ed9){_0x1709cc=_0x1709cc-0x0;var _0x42a064=_0xcf12[_0x1709cc];return _0x42a064;};'use strict';var Sequelize=require('sequelize');module[_0x2cf1('0x0')]={'type':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0x2cf1('0x1')]},'calleridnum':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x2cf1('0x1')]},'queue':{'type':Sequelize['STRING']},'interface':{'type':Sequelize['STRING']},'membername':{'type':Sequelize[_0x2cf1('0x1')]},'agentcalledAt':{'type':Sequelize[_0x2cf1('0x2')]},'agentconnectAt':{'type':Sequelize['DATE']},'agentcompleteAt':{'type':Sequelize[_0x2cf1('0x2')]},'agentringnoanswerAt':{'type':Sequelize[_0x2cf1('0x2')]},'agentdumpAt':{'type':Sequelize[_0x2cf1('0x2')]},'holdtime':{'type':Sequelize[_0x2cf1('0x3')]},'agentcomplete':{'type':Sequelize[_0x2cf1('0x4')],'defaultValue':![]},'agentringnoanswer':{'type':Sequelize[_0x2cf1('0x4')],'defaultValue':![]},'agentdump':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'talktime':{'type':Sequelize['INTEGER']},'agentacw':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'acwtime':{'type':Sequelize[_0x2cf1('0x3')]},'reason':{'type':Sequelize[_0x2cf1('0x1')]},'lastevent':{'type':Sequelize[_0x2cf1('0x1')]},'channel':{'type':Sequelize['STRING']},'channelstate':{'type':Sequelize['INTEGER']},'channelstatedesc':{'type':Sequelize[_0x2cf1('0x1')]},'connectedlinenum':{'type':Sequelize['STRING']},'connectedlinename':{'type':Sequelize[_0x2cf1('0x1')]},'language':{'type':Sequelize[_0x2cf1('0x1')]},'accountcode':{'type':Sequelize[_0x2cf1('0x1')]},'context':{'type':Sequelize['STRING']},'exten':{'type':Sequelize['STRING']},'priority':{'type':Sequelize[_0x2cf1('0x1')]},'destchannel':{'type':Sequelize[_0x2cf1('0x1')]},'destchannelstate':{'type':Sequelize['INTEGER']},'destchannelstatedesc':{'type':Sequelize[_0x2cf1('0x1')]},'destcalleridnum':{'type':Sequelize[_0x2cf1('0x1')]},'destcalleridname':{'type':Sequelize[_0x2cf1('0x1')]},'destconnectedlinenum':{'type':Sequelize[_0x2cf1('0x1')]},'destconnectedlinename':{'type':Sequelize[_0x2cf1('0x1')]},'destlanguage':{'type':Sequelize[_0x2cf1('0x1')]},'destaccountcode':{'type':Sequelize[_0x2cf1('0x1')]},'destcontext':{'type':Sequelize['STRING']},'destexten':{'type':Sequelize[_0x2cf1('0x1')]},'destpriority':{'type':Sequelize[_0x2cf1('0x1')]},'destuniqueid':{'type':Sequelize[_0x2cf1('0x1')]},'answeredelsewheredestinationuniqueid':{'type':Sequelize[_0x2cf1('0x1')]},'answeredelsewheremembername':{'type':Sequelize[_0x2cf1('0x1')]},'transfer':{'type':Sequelize[_0x2cf1('0x4')],'defaultValue':![]},'transfertype':{'type':Sequelize[_0x2cf1('0x1')],'comment':'FORWARD,\x20BLIND,\x20ATTENDED'},'transferexten':{'type':Sequelize['STRING']},'transferuniqueid':{'type':Sequelize['STRING']},'agententerreason':{'type':Sequelize[_0x2cf1('0x3')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x1974=['INTEGER','BOOLEAN','exports','STRING','DATE'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x1974,0xb1));var _0x4197=function(_0x1def67,_0x2715ef){_0x1def67=_0x1def67-0x0;var _0x4947fa=_0x1974[_0x1def67];return _0x4947fa;};'use strict';var Sequelize=require('sequelize');module[_0x4197('0x0')]={'type':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0x4197('0x1')]},'calleridnum':{'type':Sequelize[_0x4197('0x1')]},'calleridname':{'type':Sequelize[_0x4197('0x1')]},'queue':{'type':Sequelize['STRING']},'interface':{'type':Sequelize[_0x4197('0x1')]},'membername':{'type':Sequelize[_0x4197('0x1')]},'agentcalledAt':{'type':Sequelize[_0x4197('0x2')]},'agentconnectAt':{'type':Sequelize[_0x4197('0x2')]},'agentcompleteAt':{'type':Sequelize['DATE']},'agentringnoanswerAt':{'type':Sequelize[_0x4197('0x2')]},'agentdumpAt':{'type':Sequelize[_0x4197('0x2')]},'holdtime':{'type':Sequelize[_0x4197('0x3')]},'agentcomplete':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentringnoanswer':{'type':Sequelize[_0x4197('0x4')],'defaultValue':![]},'agentdump':{'type':Sequelize[_0x4197('0x4')],'defaultValue':![]},'talktime':{'type':Sequelize[_0x4197('0x3')]},'agentacw':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'acwtime':{'type':Sequelize[_0x4197('0x3')]},'reason':{'type':Sequelize[_0x4197('0x1')]},'lastevent':{'type':Sequelize[_0x4197('0x1')]},'channel':{'type':Sequelize[_0x4197('0x1')]},'channelstate':{'type':Sequelize[_0x4197('0x3')]},'channelstatedesc':{'type':Sequelize[_0x4197('0x1')]},'connectedlinenum':{'type':Sequelize[_0x4197('0x1')]},'connectedlinename':{'type':Sequelize['STRING']},'language':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize['STRING']},'context':{'type':Sequelize['STRING']},'exten':{'type':Sequelize[_0x4197('0x1')]},'priority':{'type':Sequelize[_0x4197('0x1')]},'destchannel':{'type':Sequelize[_0x4197('0x1')]},'destchannelstate':{'type':Sequelize[_0x4197('0x3')]},'destchannelstatedesc':{'type':Sequelize[_0x4197('0x1')]},'destcalleridnum':{'type':Sequelize[_0x4197('0x1')]},'destcalleridname':{'type':Sequelize[_0x4197('0x1')]},'destconnectedlinenum':{'type':Sequelize[_0x4197('0x1')]},'destconnectedlinename':{'type':Sequelize[_0x4197('0x1')]},'destlanguage':{'type':Sequelize[_0x4197('0x1')]},'destaccountcode':{'type':Sequelize[_0x4197('0x1')]},'destcontext':{'type':Sequelize[_0x4197('0x1')]},'destexten':{'type':Sequelize[_0x4197('0x1')]},'destpriority':{'type':Sequelize[_0x4197('0x1')]},'destuniqueid':{'type':Sequelize[_0x4197('0x1')]},'answeredelsewheredestinationuniqueid':{'type':Sequelize[_0x4197('0x1')]},'answeredelsewheremembername':{'type':Sequelize[_0x4197('0x1')]},'transfer':{'type':Sequelize[_0x4197('0x4')],'defaultValue':![]},'transfertype':{'type':Sequelize[_0x4197('0x1')],'comment':'FORWARD,\x20BLIND,\x20ATTENDED'},'transferexten':{'type':Sequelize[_0x4197('0x1')]},'transferuniqueid':{'type':Sequelize[_0x4197('0x1')]},'agententerreason':{'type':Sequelize[_0x4197('0x3')],'defaultValue':0x0}};
\ No newline at end of file
index 258e802..af526df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb140=['model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','sort','filter','where','merge','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','length','catch','create','body','find','params','destroy','describe','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','sox','to-csv','ejs','lodash','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','save','update','then','stack','name','send','VoiceAgentReport','rawAttributes'];(function(_0x22da61,_0x237ba9){var _0x40b728=function(_0x24db93){while(--_0x24db93){_0x22da61['push'](_0x22da61['shift']());}};_0x40b728(++_0x237ba9);}(_0xb140,0x132));var _0x0b14=function(_0x459ee0,_0x1e950d){_0x459ee0=_0x459ee0-0x0;var _0x1b87c8=_0xb140[_0x459ee0];return _0x1b87c8;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x0b14('0x0'));var rimraf=require(_0x0b14('0x1'));var zipdir=require(_0x0b14('0x2'));var jsonpatch=require(_0x0b14('0x3'));var rp=require(_0x0b14('0x4'));var moment=require(_0x0b14('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x0b14('0x6'));var util=require(_0x0b14('0x7'));var path=require('path');var sox=require(_0x0b14('0x8'));var csv=require(_0x0b14('0x9'));var ejs=require(_0x0b14('0xa'));var fs=require('fs');var _=require(_0x0b14('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x0b14('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x0b14('0x9'));var querystring=require(_0x0b14('0xd'));var Papa=require(_0x0b14('0xe'));var Redis=require(_0x0b14('0xf'));var authService=require(_0x0b14('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x0b14('0x11'));var logger=require('../../config/logger')(_0x0b14('0x12'));var utils=require(_0x0b14('0x13'));var config=require(_0x0b14('0x14'));var db=require(_0x0b14('0x15'))['db'];function respondWithStatusCode(_0x5f27a4,_0x2cc02b){_0x2cc02b=_0x2cc02b||0xcc;return function(_0x385b67){if(_0x385b67){return _0x5f27a4[_0x0b14('0x16')](_0x2cc02b);}return _0x5f27a4[_0x0b14('0x17')](_0x2cc02b)[_0x0b14('0x18')]();};}function respondWithResult(_0x48757e,_0x47553f){_0x47553f=_0x47553f||0xc8;return function(_0x4b6a36){if(_0x4b6a36){return _0x48757e['status'](_0x47553f)[_0x0b14('0x19')](_0x4b6a36);}};}function respondWithFilteredResult(_0x3df385,_0x169719){return function(_0x1786ec){if(_0x1786ec){var _0x5373ae=_0x1786ec[_0x0b14('0x1a')],_0x32c28b=_0x169719['offset'],_0x56bd76=_0x169719[_0x0b14('0x1b')]+_0x169719[_0x0b14('0x1c')],_0xd913df;if(_0x56bd76>=_0x5373ae){_0x56bd76=_0x5373ae;_0xd913df=0xc8;}else{_0xd913df=0xce;}_0x3df385[_0x0b14('0x17')](_0xd913df);return _0x3df385[_0x0b14('0x1d')](_0x0b14('0x1e'),_0x32c28b+'-'+_0x56bd76+'/'+_0x5373ae)[_0x0b14('0x19')](_0x1786ec);}return null;};}function patchUpdates(_0x232947){return function(_0x58018b){try{jsonpatch['apply'](_0x58018b,_0x232947,!![]);}catch(_0xf8f796){return BPromise['reject'](_0xf8f796);}return _0x58018b[_0x0b14('0x1f')]();};}function saveUpdates(_0x3b6ccf,_0x4d72a6){return function(_0xbd13cb){if(_0xbd13cb){return _0xbd13cb[_0x0b14('0x20')](_0x3b6ccf)[_0x0b14('0x21')](function(_0x1464db){return _0x1464db;});}return null;};}function removeEntity(_0x5cd9b9,_0x408911){return function(_0x282b4e){if(_0x282b4e){return _0x282b4e['destroy']()[_0x0b14('0x21')](function(){_0x5cd9b9['status'](0xcc)[_0x0b14('0x18')]();});}};}function handleEntityNotFound(_0x35056f,_0x4f273b){return function(_0x549fd9){if(!_0x549fd9){_0x35056f[_0x0b14('0x16')](0x194);}return _0x549fd9;};}function handleError(_0x5c18d9,_0x367fbe){_0x367fbe=_0x367fbe||0x1f4;return function(_0x58e7e3){logger['error'](_0x58e7e3[_0x0b14('0x22')]);if(_0x58e7e3[_0x0b14('0x23')]){delete _0x58e7e3[_0x0b14('0x23')];}_0x5c18d9['status'](_0x367fbe)[_0x0b14('0x24')](_0x58e7e3);};}exports['index']=function(_0x415652,_0x106681){var _0xdf1a92={},_0x298980={},_0xc63a84={'count':0x0,'rows':[]};var _0xd92bd9=db[_0x0b14('0x25')][_0x0b14('0x26')];_0x298980[_0x0b14('0x27')]=_[_0x0b14('0x28')](_0xd92bd9);_0x298980['query']=_[_0x0b14('0x28')](_0x415652[_0x0b14('0x29')]);_0x298980[_0x0b14('0x2a')]=_[_0x0b14('0x2b')](_0x298980[_0x0b14('0x27')],_0x298980[_0x0b14('0x29')]);_0xdf1a92[_0x0b14('0x2c')]=_[_0x0b14('0x2b')](_0x298980[_0x0b14('0x27')],qs[_0x0b14('0x2d')](_0x415652[_0x0b14('0x29')][_0x0b14('0x2d')]));_0xdf1a92[_0x0b14('0x2c')]=_0xdf1a92[_0x0b14('0x2c')]['length']?_0xdf1a92[_0x0b14('0x2c')]:_0x298980[_0x0b14('0x27')];if(!_0x415652[_0x0b14('0x29')][_0x0b14('0x2e')](_0x0b14('0x2f'))){_0xdf1a92['limit']=qs[_0x0b14('0x1c')](_0x415652[_0x0b14('0x29')][_0x0b14('0x1c')]);_0xdf1a92[_0x0b14('0x1b')]=qs['offset'](_0x415652['query'][_0x0b14('0x1b')]);}_0xdf1a92['order']=qs[_0x0b14('0x30')](_0x415652[_0x0b14('0x29')][_0x0b14('0x30')]);_0xdf1a92['where']=qs[_0x0b14('0x2a')](_['pick'](_0x415652[_0x0b14('0x29')],_0x298980[_0x0b14('0x2a')]));if(_0x415652[_0x0b14('0x29')][_0x0b14('0x31')]){_0xdf1a92[_0x0b14('0x32')]=_[_0x0b14('0x33')](_0xdf1a92[_0x0b14('0x32')],{'$or':_['map'](_0xd92bd9,function(_0x52bff3){if(_0x52bff3['type'][_0x0b14('0x34')]!==_0x0b14('0x35')){var _0x22eb6e={};_0x22eb6e[_0x52bff3[_0x0b14('0x36')]]={'$like':'%'+_0x415652[_0x0b14('0x29')][_0x0b14('0x31')]+'%'};return _0x22eb6e;}})});}_0xdf1a92=_['merge']({},_0xdf1a92,_0x415652[_0x0b14('0x37')]);var _0x3c1714={'where':_0xdf1a92[_0x0b14('0x32')]};return db[_0x0b14('0x25')]['count'](_0x3c1714)['then'](function(_0x51fc39){_0xc63a84[_0x0b14('0x1a')]=_0x51fc39;if(_0x415652['query'][_0x0b14('0x38')]){_0xdf1a92[_0x0b14('0x39')]=[{'all':!![]}];}return db['VoiceAgentReport'][_0x0b14('0x3a')](_0xdf1a92);})[_0x0b14('0x21')](function(_0x341db0){_0xc63a84[_0x0b14('0x3b')]=_0x341db0;return _0xc63a84;})[_0x0b14('0x21')](respondWithFilteredResult(_0x106681,_0xdf1a92))['catch'](handleError(_0x106681,null));};exports[_0x0b14('0x3c')]=function(_0x42d8fb,_0x50768e){var _0x5158f1={'raw':![],'where':{'id':_0x42d8fb['params']['id']}},_0x3915a8={};_0x3915a8[_0x0b14('0x27')]=_['keys'](db[_0x0b14('0x25')][_0x0b14('0x26')]);_0x3915a8[_0x0b14('0x29')]=_[_0x0b14('0x28')](_0x42d8fb[_0x0b14('0x29')]);_0x3915a8[_0x0b14('0x2a')]=_[_0x0b14('0x2b')](_0x3915a8[_0x0b14('0x27')],_0x3915a8['query']);_0x5158f1[_0x0b14('0x2c')]=_['intersection'](_0x3915a8[_0x0b14('0x27')],qs[_0x0b14('0x2d')](_0x42d8fb[_0x0b14('0x29')][_0x0b14('0x2d')]));_0x5158f1[_0x0b14('0x2c')]=_0x5158f1['attributes'][_0x0b14('0x3d')]?_0x5158f1[_0x0b14('0x2c')]:_0x3915a8[_0x0b14('0x27')];if(_0x42d8fb[_0x0b14('0x29')][_0x0b14('0x38')]){_0x5158f1['include']=[{'all':!![]}];}_0x5158f1=_['merge']({},_0x5158f1,_0x42d8fb[_0x0b14('0x37')]);return db['VoiceAgentReport']['find'](_0x5158f1)['then'](handleEntityNotFound(_0x50768e,null))['then'](respondWithResult(_0x50768e,null))[_0x0b14('0x3e')](handleError(_0x50768e,null));};exports[_0x0b14('0x3f')]=function(_0x2ad13c,_0x4bb25b){return db[_0x0b14('0x25')][_0x0b14('0x3f')](_0x2ad13c['body'],{})[_0x0b14('0x21')](respondWithResult(_0x4bb25b,0xc9))['catch'](handleError(_0x4bb25b,null));};exports[_0x0b14('0x20')]=function(_0x28d028,_0x23b36c){if(_0x28d028[_0x0b14('0x40')]['id']){delete _0x28d028[_0x0b14('0x40')]['id'];}return db[_0x0b14('0x25')][_0x0b14('0x41')]({'where':{'id':_0x28d028[_0x0b14('0x42')]['id']}})['then'](handleEntityNotFound(_0x23b36c,null))[_0x0b14('0x21')](saveUpdates(_0x28d028[_0x0b14('0x40')],null))['then'](respondWithResult(_0x23b36c,null))[_0x0b14('0x3e')](handleError(_0x23b36c,null));};exports[_0x0b14('0x43')]=function(_0x17179e,_0x32ac07){return db[_0x0b14('0x25')]['find']({'where':{'id':_0x17179e['params']['id']}})[_0x0b14('0x21')](handleEntityNotFound(_0x32ac07,null))['then'](removeEntity(_0x32ac07,null))[_0x0b14('0x3e')](handleError(_0x32ac07,null));};exports[_0x0b14('0x44')]=function(_0x3a781f,_0x2536a5){return db[_0x0b14('0x25')][_0x0b14('0x44')]()[_0x0b14('0x21')](respondWithResult(_0x2536a5,null))[_0x0b14('0x3e')](handleError(_0x2536a5,null));};
\ No newline at end of file
+var _0x5387=['params','keys','include','find','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','jsforce','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','end','status','json','count','offset','limit','Content-Range','reject','update','then','destroy','sendStatus','error','stack','name','send','index','VoiceAgentReport','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','order','sort','where','pick','merge','map','type','key','field','options','includeAll','findAll','catch','show'];(function(_0x1c883d,_0x579de9){var _0x1a2780=function(_0x451600){while(--_0x451600){_0x1c883d['push'](_0x1c883d['shift']());}};_0x1a2780(++_0x579de9);}(_0x5387,0xd9));var _0x7538=function(_0x58a96c,_0x4110dc){_0x58a96c=_0x58a96c-0x0;var _0x11f025=_0x5387[_0x58a96c];return _0x11f025;};'use strict';var pdf=require(_0x7538('0x0'));var emlformat=require(_0x7538('0x1'));var rimraf=require(_0x7538('0x2'));var zipdir=require(_0x7538('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x7538('0x4'));var BPromise=require(_0x7538('0x5'));var Mustache=require(_0x7538('0x6'));var util=require(_0x7538('0x7'));var path=require(_0x7538('0x8'));var sox=require('sox');var csv=require(_0x7538('0x9'));var ejs=require(_0x7538('0xa'));var fs=require('fs');var _=require(_0x7538('0xb'));var squel=require(_0x7538('0xc'));var crypto=require('crypto');var jsforce=require(_0x7538('0xd'));var deskjs=require(_0x7538('0xe'));var toCsv=require(_0x7538('0x9'));var querystring=require('querystring');var Papa=require(_0x7538('0xf'));var Redis=require('ioredis');var authService=require(_0x7538('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x7538('0x11'));var logger=require(_0x7538('0x12'))(_0x7538('0x13'));var utils=require(_0x7538('0x14'));var config=require(_0x7538('0x15'));var db=require(_0x7538('0x16'))['db'];function respondWithStatusCode(_0xa0ae76,_0x136b88){_0x136b88=_0x136b88||0xcc;return function(_0x650947){if(_0x650947){return _0xa0ae76['sendStatus'](_0x136b88);}return _0xa0ae76['status'](_0x136b88)[_0x7538('0x17')]();};}function respondWithResult(_0x4482d3,_0x4aaf94){_0x4aaf94=_0x4aaf94||0xc8;return function(_0x26e0d9){if(_0x26e0d9){return _0x4482d3[_0x7538('0x18')](_0x4aaf94)[_0x7538('0x19')](_0x26e0d9);}};}function respondWithFilteredResult(_0x366143,_0x408376){return function(_0x5368eb){if(_0x5368eb){var _0x1c864e=_0x5368eb[_0x7538('0x1a')],_0x22237f=_0x408376[_0x7538('0x1b')],_0x2e8ee1=_0x408376[_0x7538('0x1b')]+_0x408376[_0x7538('0x1c')],_0x31e28f;if(_0x2e8ee1>=_0x1c864e){_0x2e8ee1=_0x1c864e;_0x31e28f=0xc8;}else{_0x31e28f=0xce;}_0x366143['status'](_0x31e28f);return _0x366143['set'](_0x7538('0x1d'),_0x22237f+'-'+_0x2e8ee1+'/'+_0x1c864e)[_0x7538('0x19')](_0x5368eb);}return null;};}function patchUpdates(_0xfa8277){return function(_0x34a938){try{jsonpatch['apply'](_0x34a938,_0xfa8277,!![]);}catch(_0x1f70b0){return BPromise[_0x7538('0x1e')](_0x1f70b0);}return _0x34a938['save']();};}function saveUpdates(_0x543526,_0x1fadcb){return function(_0x2d0065){if(_0x2d0065){return _0x2d0065[_0x7538('0x1f')](_0x543526)[_0x7538('0x20')](function(_0x1bbd83){return _0x1bbd83;});}return null;};}function removeEntity(_0x39c4ee,_0x37fb6a){return function(_0x3302c6){if(_0x3302c6){return _0x3302c6[_0x7538('0x21')]()[_0x7538('0x20')](function(){_0x39c4ee[_0x7538('0x18')](0xcc)[_0x7538('0x17')]();});}};}function handleEntityNotFound(_0x21246b,_0x25b351){return function(_0xec5515){if(!_0xec5515){_0x21246b[_0x7538('0x22')](0x194);}return _0xec5515;};}function handleError(_0x2dbb7d,_0x19d82f){_0x19d82f=_0x19d82f||0x1f4;return function(_0x3b2967){logger[_0x7538('0x23')](_0x3b2967[_0x7538('0x24')]);if(_0x3b2967[_0x7538('0x25')]){delete _0x3b2967['name'];}_0x2dbb7d['status'](_0x19d82f)[_0x7538('0x26')](_0x3b2967);};}exports[_0x7538('0x27')]=function(_0xe09d4b,_0x3e3f1d){var _0x5bb504={},_0x5e909b={},_0x2622b1={'count':0x0,'rows':[]};var _0x350b4f=db[_0x7538('0x28')]['rawAttributes'];_0x5e909b['model']=_['keys'](_0x350b4f);_0x5e909b[_0x7538('0x29')]=_['keys'](_0xe09d4b[_0x7538('0x29')]);_0x5e909b[_0x7538('0x2a')]=_[_0x7538('0x2b')](_0x5e909b[_0x7538('0x2c')],_0x5e909b[_0x7538('0x29')]);_0x5bb504[_0x7538('0x2d')]=_['intersection'](_0x5e909b[_0x7538('0x2c')],qs[_0x7538('0x2e')](_0xe09d4b[_0x7538('0x29')][_0x7538('0x2e')]));_0x5bb504[_0x7538('0x2d')]=_0x5bb504['attributes'][_0x7538('0x2f')]?_0x5bb504[_0x7538('0x2d')]:_0x5e909b[_0x7538('0x2c')];if(!_0xe09d4b[_0x7538('0x29')][_0x7538('0x30')]('nolimit')){_0x5bb504[_0x7538('0x1c')]=qs[_0x7538('0x1c')](_0xe09d4b[_0x7538('0x29')][_0x7538('0x1c')]);_0x5bb504[_0x7538('0x1b')]=qs[_0x7538('0x1b')](_0xe09d4b[_0x7538('0x29')]['offset']);}_0x5bb504[_0x7538('0x31')]=qs['sort'](_0xe09d4b['query'][_0x7538('0x32')]);_0x5bb504[_0x7538('0x33')]=qs[_0x7538('0x2a')](_[_0x7538('0x34')](_0xe09d4b[_0x7538('0x29')],_0x5e909b[_0x7538('0x2a')]));if(_0xe09d4b[_0x7538('0x29')]['filter']){_0x5bb504[_0x7538('0x33')]=_[_0x7538('0x35')](_0x5bb504['where'],{'$or':_[_0x7538('0x36')](_0x350b4f,function(_0x5b2587){if(_0x5b2587[_0x7538('0x37')][_0x7538('0x38')]!=='VIRTUAL'){var _0x13e728={};_0x13e728[_0x5b2587[_0x7538('0x39')]]={'$like':'%'+_0xe09d4b[_0x7538('0x29')]['filter']+'%'};return _0x13e728;}})});}_0x5bb504=_[_0x7538('0x35')]({},_0x5bb504,_0xe09d4b[_0x7538('0x3a')]);var _0x4ea76c={'where':_0x5bb504[_0x7538('0x33')]};return db[_0x7538('0x28')][_0x7538('0x1a')](_0x4ea76c)['then'](function(_0x25e37a){_0x2622b1[_0x7538('0x1a')]=_0x25e37a;if(_0xe09d4b[_0x7538('0x29')][_0x7538('0x3b')]){_0x5bb504['include']=[{'all':!![]}];}return db[_0x7538('0x28')][_0x7538('0x3c')](_0x5bb504);})[_0x7538('0x20')](function(_0x259241){_0x2622b1['rows']=_0x259241;return _0x2622b1;})[_0x7538('0x20')](respondWithFilteredResult(_0x3e3f1d,_0x5bb504))[_0x7538('0x3d')](handleError(_0x3e3f1d,null));};exports[_0x7538('0x3e')]=function(_0x20269d,_0xdc1d1f){var _0x3d9300={'raw':![],'where':{'id':_0x20269d[_0x7538('0x3f')]['id']}},_0x2ff098={};_0x2ff098[_0x7538('0x2c')]=_[_0x7538('0x40')](db[_0x7538('0x28')]['rawAttributes']);_0x2ff098[_0x7538('0x29')]=_[_0x7538('0x40')](_0x20269d[_0x7538('0x29')]);_0x2ff098[_0x7538('0x2a')]=_['intersection'](_0x2ff098[_0x7538('0x2c')],_0x2ff098[_0x7538('0x29')]);_0x3d9300['attributes']=_[_0x7538('0x2b')](_0x2ff098[_0x7538('0x2c')],qs[_0x7538('0x2e')](_0x20269d['query'][_0x7538('0x2e')]));_0x3d9300[_0x7538('0x2d')]=_0x3d9300['attributes'][_0x7538('0x2f')]?_0x3d9300[_0x7538('0x2d')]:_0x2ff098[_0x7538('0x2c')];if(_0x20269d['query'][_0x7538('0x3b')]){_0x3d9300[_0x7538('0x41')]=[{'all':!![]}];}_0x3d9300=_[_0x7538('0x35')]({},_0x3d9300,_0x20269d[_0x7538('0x3a')]);return db[_0x7538('0x28')][_0x7538('0x42')](_0x3d9300)[_0x7538('0x20')](handleEntityNotFound(_0xdc1d1f,null))[_0x7538('0x20')](respondWithResult(_0xdc1d1f,null))[_0x7538('0x3d')](handleError(_0xdc1d1f,null));};exports['create']=function(_0x4f4233,_0x4e1855){return db[_0x7538('0x28')][_0x7538('0x43')](_0x4f4233['body'],{})['then'](respondWithResult(_0x4e1855,0xc9))[_0x7538('0x3d')](handleError(_0x4e1855,null));};exports[_0x7538('0x1f')]=function(_0x532c75,_0x163d47){if(_0x532c75[_0x7538('0x44')]['id']){delete _0x532c75['body']['id'];}return db['VoiceAgentReport'][_0x7538('0x42')]({'where':{'id':_0x532c75[_0x7538('0x3f')]['id']}})['then'](handleEntityNotFound(_0x163d47,null))[_0x7538('0x20')](saveUpdates(_0x532c75[_0x7538('0x44')],null))[_0x7538('0x20')](respondWithResult(_0x163d47,null))[_0x7538('0x3d')](handleError(_0x163d47,null));};exports['destroy']=function(_0x4a7b4c,_0x5cf10f){return db[_0x7538('0x28')][_0x7538('0x42')]({'where':{'id':_0x4a7b4c['params']['id']}})['then'](handleEntityNotFound(_0x5cf10f,null))['then'](removeEntity(_0x5cf10f,null))['catch'](handleError(_0x5cf10f,null));};exports[_0x7538('0x45')]=function(_0x4861bb,_0x5c1e52){return db[_0x7538('0x28')]['describe']()[_0x7538('0x20')](respondWithResult(_0x5c1e52,null))[_0x7538('0x3d')](handleError(_0x5c1e52,null));};
\ No newline at end of file
index 38fd86e..b0ad9ce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa046=['report_agent','destuniqueid','lodash','util','../../config/logger','moment','path','rimraf','../../config/environment','./voiceAgentReport.attributes','exports','define','VoiceAgentReport'];(function(_0x3f3f40,_0x4e745f){var _0x32c366=function(_0x343f6a){while(--_0x343f6a){_0x3f3f40['push'](_0x3f3f40['shift']());}};_0x32c366(++_0x4e745f);}(_0xa046,0xab));var _0x6a04=function(_0x177b56,_0xf790ca){_0x177b56=_0x177b56-0x0;var _0x434738=_0xa046[_0x177b56];return _0x434738;};'use strict';var _=require(_0x6a04('0x0'));var util=require(_0x6a04('0x1'));var logger=require(_0x6a04('0x2'))('api');var moment=require(_0x6a04('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x6a04('0x4'));var rimraf=require(_0x6a04('0x5'));var config=require(_0x6a04('0x6'));var attributes=require(_0x6a04('0x7'));module[_0x6a04('0x8')]=function(_0x2c1a1e,_0x30510d){return _0x2c1a1e[_0x6a04('0x9')](_0x6a04('0xa'),attributes,{'tableName':_0x6a04('0xb'),'paranoid':![],'indexes':[{'fields':['uniqueid',_0x6a04('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x62fc=['report_agent','uniqueid','destuniqueid','lodash','util','../../config/logger','moment','path','../../config/environment','exports','VoiceAgentReport'];(function(_0x52c1e1,_0x2994af){var _0xc95a16=function(_0x51751c){while(--_0x51751c){_0x52c1e1['push'](_0x52c1e1['shift']());}};_0xc95a16(++_0x2994af);}(_0x62fc,0x1c6));var _0xc62f=function(_0x5ae575,_0x3d46fa){_0x5ae575=_0x5ae575-0x0;var _0x8398a0=_0x62fc[_0x5ae575];return _0x8398a0;};'use strict';var _=require(_0xc62f('0x0'));var util=require(_0xc62f('0x1'));var logger=require(_0xc62f('0x2'))('api');var moment=require(_0xc62f('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0xc62f('0x4'));var rimraf=require('rimraf');var config=require(_0xc62f('0x5'));var attributes=require('./voiceAgentReport.attributes');module[_0xc62f('0x6')]=function(_0x3fc9a0,_0x394c7a){return _0x3fc9a0['define'](_0xc62f('0x7'),attributes,{'tableName':_0xc62f('0x8'),'paranoid':![],'indexes':[{'fields':[_0xc62f('0x9'),_0xc62f('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
index ecf1eb9..70df9a1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','info','VoiceAgentReport,\x20%s,\x20%s','debug','stringify','error','code','message','request\x20sent','result','catch','VoiceAgentReport','create','body','options','raw','CreateVoiceAgentReport','UpdateVoiceAgentReport','update','where','attributes','limit','then','lodash','util'];(function(_0x3237eb,_0x125122){var _0x2d7c8c=function(_0x6ca6b5){while(--_0x6ca6b5){_0x3237eb['push'](_0x3237eb['shift']());}};_0x2d7c8c(++_0x125122);}(_0x7a54,0x106));var _0x47a5=function(_0xd28a33,_0x417963){_0xd28a33=_0xd28a33-0x0;var _0x50d39c=_0x7a54[_0xd28a33];return _0x50d39c;};'use strict';var _=require(_0x47a5('0x0'));var util=require(_0x47a5('0x1'));var moment=require(_0x47a5('0x2'));var BPromise=require('bluebird');var rs=require(_0x47a5('0x3'));var fs=require('fs');var Redis=require(_0x47a5('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x47a5('0x5'));var logger=require(_0x47a5('0x6'))(_0x47a5('0x7'));var config=require(_0x47a5('0x8'));var jayson=require(_0x47a5('0x9'));var client=jayson['client'][_0x47a5('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x59199c,_0x343372,_0x30e405){return new BPromise(function(_0x506eda,_0x194fb0){return client['request'](_0x59199c,_0x30e405)['then'](function(_0x582352){logger[_0x47a5('0xb')](_0x47a5('0xc'),_0x343372,'request\x20sent');logger[_0x47a5('0xd')]('VoiceAgentReport,\x20%s,\x20%s,\x20%s',_0x343372,'request\x20sent',JSON[_0x47a5('0xe')](_0x582352));if(_0x582352[_0x47a5('0xf')]){if(_0x582352[_0x47a5('0xf')][_0x47a5('0x10')]===0x1f4){logger[_0x47a5('0xf')](_0x47a5('0xc'),_0x343372,_0x582352[_0x47a5('0xf')]['message']);return _0x194fb0(_0x582352[_0x47a5('0xf')][_0x47a5('0x11')]);}logger[_0x47a5('0xf')](_0x47a5('0xc'),_0x343372,_0x582352[_0x47a5('0xf')][_0x47a5('0x11')]);return _0x506eda(_0x582352[_0x47a5('0xf')][_0x47a5('0x11')]);}else{logger['info'](_0x47a5('0xc'),_0x343372,_0x47a5('0x12'));_0x506eda(_0x582352[_0x47a5('0x13')][_0x47a5('0x11')]);}})[_0x47a5('0x14')](function(_0x574af6){logger['error'](_0x47a5('0xc'),_0x343372,_0x574af6);_0x194fb0(_0x574af6);});});}exports['CreateVoiceAgentReport']=function(_0x5247fd){var _0x423a81=this;return new Promise(function(_0xaf70a6,_0x2ce454){return db[_0x47a5('0x15')][_0x47a5('0x16')](_0x5247fd[_0x47a5('0x17')],{'raw':_0x5247fd[_0x47a5('0x18')]?_0x5247fd[_0x47a5('0x18')][_0x47a5('0x19')]===undefined?!![]:![]:!![]})['then'](function(_0x1570bc){logger[_0x47a5('0xb')]('CreateVoiceAgentReport',_0x5247fd);logger[_0x47a5('0xd')](_0x47a5('0x1a'),_0x5247fd,JSON[_0x47a5('0xe')](_0x1570bc));_0xaf70a6(_0x1570bc);})['catch'](function(_0xb8ae6c){logger[_0x47a5('0xf')](_0x47a5('0x1a'),_0xb8ae6c[_0x47a5('0x11')],_0x5247fd);_0x2ce454(_0x423a81['error'](0x1f4,_0xb8ae6c[_0x47a5('0x11')]));});});};exports[_0x47a5('0x1b')]=function(_0x513981){var _0x28747d=this;return new Promise(function(_0xc4cd63,_0x4437f1){return db[_0x47a5('0x15')][_0x47a5('0x1c')](_0x513981['body'],{'raw':_0x513981['options']?_0x513981[_0x47a5('0x18')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x513981[_0x47a5('0x18')]?_0x513981['options'][_0x47a5('0x1d')]||null:null,'attributes':_0x513981[_0x47a5('0x18')]?_0x513981[_0x47a5('0x18')][_0x47a5('0x1e')]||null:null,'limit':_0x513981[_0x47a5('0x18')]?_0x513981[_0x47a5('0x18')][_0x47a5('0x1f')]||null:null})[_0x47a5('0x20')](function(_0x16631f){logger[_0x47a5('0xb')](_0x47a5('0x1b'),_0x513981);logger[_0x47a5('0xd')](_0x47a5('0x1b'),_0x513981,JSON['stringify'](_0x16631f));_0xc4cd63(_0x16631f);})[_0x47a5('0x14')](function(_0x51833b){logger[_0x47a5('0xf')](_0x47a5('0x1b'),_0x51833b[_0x47a5('0x11')],_0x513981);_0x4437f1(_0x28747d['error'](0x1f4,_0x51833b[_0x47a5('0x11')]));});});};
\ No newline at end of file
+var _0x814b=['moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','VoiceAgentReport,\x20%s,\x20%s','request\x20sent','debug','VoiceAgentReport,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','CreateVoiceAgentReport','body','raw','stringify','VoiceAgentReport','update','options','where','attributes','limit','UpdateVoiceAgentReport','lodash','util'];(function(_0x514867,_0xbc5f43){var _0x3a1b64=function(_0x4d66c4){while(--_0x4d66c4){_0x514867['push'](_0x514867['shift']());}};_0x3a1b64(++_0xbc5f43);}(_0x814b,0x1a2));var _0xb814=function(_0xc864d,_0x3443f2){_0xc864d=_0xc864d-0x0;var _0x4a1305=_0x814b[_0xc864d];return _0x4a1305;};'use strict';var _=require(_0xb814('0x0'));var util=require(_0xb814('0x1'));var moment=require(_0xb814('0x2'));var BPromise=require(_0xb814('0x3'));var rs=require(_0xb814('0x4'));var fs=require('fs');var Redis=require(_0xb814('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xb814('0x6'));var logger=require(_0xb814('0x7'))(_0xb814('0x8'));var config=require(_0xb814('0x9'));var jayson=require(_0xb814('0xa'));var client=jayson[_0xb814('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3b0829,_0x2e6272,_0x5c8539){return new BPromise(function(_0x271af9,_0x2913a6){return client[_0xb814('0xc')](_0x3b0829,_0x5c8539)[_0xb814('0xd')](function(_0x1fea33){logger[_0xb814('0xe')](_0xb814('0xf'),_0x2e6272,_0xb814('0x10'));logger[_0xb814('0x11')](_0xb814('0x12'),_0x2e6272,_0xb814('0x10'),JSON['stringify'](_0x1fea33));if(_0x1fea33[_0xb814('0x13')]){if(_0x1fea33['error'][_0xb814('0x14')]===0x1f4){logger[_0xb814('0x13')](_0xb814('0xf'),_0x2e6272,_0x1fea33[_0xb814('0x13')][_0xb814('0x15')]);return _0x2913a6(_0x1fea33[_0xb814('0x13')][_0xb814('0x15')]);}logger[_0xb814('0x13')](_0xb814('0xf'),_0x2e6272,_0x1fea33[_0xb814('0x13')][_0xb814('0x15')]);return _0x271af9(_0x1fea33[_0xb814('0x13')][_0xb814('0x15')]);}else{logger[_0xb814('0xe')](_0xb814('0xf'),_0x2e6272,_0xb814('0x10'));_0x271af9(_0x1fea33[_0xb814('0x16')][_0xb814('0x15')]);}})[_0xb814('0x17')](function(_0x21b73f){logger[_0xb814('0x13')]('VoiceAgentReport,\x20%s,\x20%s',_0x2e6272,_0x21b73f);_0x2913a6(_0x21b73f);});});}exports[_0xb814('0x18')]=function(_0x55ba16){var _0x270598=this;return new Promise(function(_0xfac75b,_0x4c3007){return db['VoiceAgentReport']['create'](_0x55ba16[_0xb814('0x19')],{'raw':_0x55ba16['options']?_0x55ba16['options'][_0xb814('0x1a')]===undefined?!![]:![]:!![]})[_0xb814('0xd')](function(_0x25b6b6){logger['info'](_0xb814('0x18'),_0x55ba16);logger['debug'](_0xb814('0x18'),_0x55ba16,JSON[_0xb814('0x1b')](_0x25b6b6));_0xfac75b(_0x25b6b6);})[_0xb814('0x17')](function(_0x470e81){logger[_0xb814('0x13')](_0xb814('0x18'),_0x470e81[_0xb814('0x15')],_0x55ba16);_0x4c3007(_0x270598['error'](0x1f4,_0x470e81[_0xb814('0x15')]));});});};exports['UpdateVoiceAgentReport']=function(_0x3f81d0){var _0x457dac=this;return new Promise(function(_0x31c7ec,_0x208927){return db[_0xb814('0x1c')][_0xb814('0x1d')](_0x3f81d0[_0xb814('0x19')],{'raw':_0x3f81d0['options']?_0x3f81d0[_0xb814('0x1e')][_0xb814('0x1a')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3f81d0[_0xb814('0x1e')]?_0x3f81d0[_0xb814('0x1e')][_0xb814('0x1f')]||null:null,'attributes':_0x3f81d0[_0xb814('0x1e')]?_0x3f81d0[_0xb814('0x1e')][_0xb814('0x20')]||null:null,'limit':_0x3f81d0['options']?_0x3f81d0[_0xb814('0x1e')][_0xb814('0x21')]||null:null})['then'](function(_0x9008b2){logger[_0xb814('0xe')](_0xb814('0x22'),_0x3f81d0);logger['debug'](_0xb814('0x22'),_0x3f81d0,JSON[_0xb814('0x1b')](_0x9008b2));_0x31c7ec(_0x9008b2);})['catch'](function(_0x338a28){logger['error'](_0xb814('0x22'),_0x338a28['message'],_0x3f81d0);_0x208927(_0x457dac['error'](0x1f4,_0x338a28[_0xb814('0x15')]));});});};
\ No newline at end of file
index 517affd..8cbd726 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa7cd=['create','put','/:id','update','delete','destroy','multer','util','path','connect-timeout','express','../../components/auth/service','../../config/environment','./voiceCallReport.controller','index','get','isAuthenticated','describe'];(function(_0x3cf920,_0x3be623){var _0x1db19c=function(_0x60dcd4){while(--_0x60dcd4){_0x3cf920['push'](_0x3cf920['shift']());}};_0x1db19c(++_0x3be623);}(_0xa7cd,0x15c));var _0xda7c=function(_0x2e4fbe,_0xe928df){_0x2e4fbe=_0x2e4fbe-0x0;var _0x35a27d=_0xa7cd[_0x2e4fbe];return _0x35a27d;};'use strict';var multer=require(_0xda7c('0x0'));var util=require(_0xda7c('0x1'));var path=require(_0xda7c('0x2'));var timeout=require(_0xda7c('0x3'));var express=require(_0xda7c('0x4'));var router=express['Router']();var auth=require(_0xda7c('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xda7c('0x6'));var controller=require(_0xda7c('0x7'));router['get']('/',auth['isAuthenticated'](),controller[_0xda7c('0x8')]);router[_0xda7c('0x9')]('/describe',auth[_0xda7c('0xa')](),controller[_0xda7c('0xb')]);router['get']('/:id',auth['isAuthenticated'](),controller['show']);router['post']('/',auth[_0xda7c('0xa')](),controller[_0xda7c('0xc')]);router[_0xda7c('0xd')](_0xda7c('0xe'),auth[_0xda7c('0xa')](),controller[_0xda7c('0xf')]);router[_0xda7c('0x10')](_0xda7c('0xe'),auth[_0xda7c('0xa')](),controller[_0xda7c('0x11')]);module['exports']=router;
\ No newline at end of file
+var _0x0b16=['delete','destroy','exports','multer','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceCallReport.controller','get','isAuthenticated','/:id','show','post','create','update'];(function(_0x5d9d68,_0x15fa55){var _0x3d65ff=function(_0x31acbf){while(--_0x31acbf){_0x5d9d68['push'](_0x5d9d68['shift']());}};_0x3d65ff(++_0x15fa55);}(_0x0b16,0x111));var _0x60b1=function(_0x197e7a,_0x331a50){_0x197e7a=_0x197e7a-0x0;var _0x4d8143=_0x0b16[_0x197e7a];return _0x4d8143;};'use strict';var multer=require(_0x60b1('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x60b1('0x1'));var express=require(_0x60b1('0x2'));var router=express[_0x60b1('0x3')]();var auth=require(_0x60b1('0x4'));var interaction=require(_0x60b1('0x5'));var config=require(_0x60b1('0x6'));var controller=require(_0x60b1('0x7'));router[_0x60b1('0x8')]('/',auth[_0x60b1('0x9')](),controller['index']);router[_0x60b1('0x8')]('/describe',auth[_0x60b1('0x9')](),controller['describe']);router[_0x60b1('0x8')](_0x60b1('0xa'),auth['isAuthenticated'](),controller[_0x60b1('0xb')]);router[_0x60b1('0xc')]('/',auth['isAuthenticated'](),controller[_0x60b1('0xd')]);router['put'](_0x60b1('0xa'),auth[_0x60b1('0x9')](),controller[_0x60b1('0xe')]);router[_0x60b1('0xf')](_0x60b1('0xa'),auth[_0x60b1('0x9')](),controller[_0x60b1('0x10')]);module[_0x60b1('0x11')]=router;
\ No newline at end of file
index 8c6e456..6f88adc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7f03=['sequelize','exports','STRING','inbound','outbound','outbound-fax','dialer','TEXT','DATE','INTEGER'];(function(_0x5ecadc,_0x1cf9f1){var _0x565037=function(_0x22908b){while(--_0x22908b){_0x5ecadc['push'](_0x5ecadc['shift']());}};_0x565037(++_0x1cf9f1);}(_0x7f03,0x1ae));var _0x37f0=function(_0x8652ac,_0x5485c2){_0x8652ac=_0x8652ac-0x0;var _0x4eeb2b=_0x7f03[_0x8652ac];return _0x4eeb2b;};'use strict';var Sequelize=require(_0x37f0('0x0'));module[_0x37f0('0x1')]={'uniqueid':{'type':Sequelize[_0x37f0('0x2')]},'type':{'type':Sequelize['ENUM'](_0x37f0('0x3'),'internal',_0x37f0('0x4'),'inbound-fax',_0x37f0('0x5'),_0x37f0('0x6'))},'tag':{'type':Sequelize[_0x37f0('0x2')]},'accountcode':{'type':Sequelize[_0x37f0('0x2')]},'source':{'type':Sequelize[_0x37f0('0x2')]},'destination':{'type':Sequelize[_0x37f0('0x2')]},'destinationcontext':{'type':Sequelize[_0x37f0('0x2')]},'callerid':{'type':Sequelize[_0x37f0('0x2')]},'channel':{'type':Sequelize[_0x37f0('0x2')]},'destinationchannel':{'type':Sequelize[_0x37f0('0x2')]},'lastapplication':{'type':Sequelize[_0x37f0('0x2')]},'lastdata':{'type':Sequelize[_0x37f0('0x7')]},'starttime':{'type':Sequelize[_0x37f0('0x8')]},'systemanswertime':{'type':Sequelize[_0x37f0('0x8')]},'answertime':{'type':Sequelize[_0x37f0('0x8')]},'endtime':{'type':Sequelize[_0x37f0('0x8')]},'duration':{'type':Sequelize[_0x37f0('0x9')]},'billableseconds':{'type':Sequelize[_0x37f0('0x9')]},'mohtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'disposition':{'type':Sequelize['STRING']},'amaflags':{'type':Sequelize['STRING']},'userfield':{'type':Sequelize['STRING']},'userDisposition':{'type':Sequelize[_0x37f0('0x2')]},'note':{'type':Sequelize['STRING']},'prefix':{'type':Sequelize['STRING']},'routeid':{'type':Sequelize[_0x37f0('0x9')]},'sipcallid':{'type':Sequelize[_0x37f0('0x2')]}};
\ No newline at end of file
+var _0x78e0=['ENUM','inbound','internal','inbound-fax','outbound-fax','dialer','STRING','TEXT','DATE','INTEGER','sequelize','exports'];(function(_0x4b5099,_0x511de5){var _0x95f4e5=function(_0x32ef51){while(--_0x32ef51){_0x4b5099['push'](_0x4b5099['shift']());}};_0x95f4e5(++_0x511de5);}(_0x78e0,0xa6));var _0x078e=function(_0x540fad,_0x5874e5){_0x540fad=_0x540fad-0x0;var _0x8508a2=_0x78e0[_0x540fad];return _0x8508a2;};'use strict';var Sequelize=require(_0x078e('0x0'));module[_0x078e('0x1')]={'uniqueid':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0x078e('0x2')](_0x078e('0x3'),_0x078e('0x4'),'outbound',_0x078e('0x5'),_0x078e('0x6'),_0x078e('0x7'))},'tag':{'type':Sequelize[_0x078e('0x8')]},'accountcode':{'type':Sequelize[_0x078e('0x8')]},'source':{'type':Sequelize[_0x078e('0x8')]},'destination':{'type':Sequelize['STRING']},'destinationcontext':{'type':Sequelize[_0x078e('0x8')]},'callerid':{'type':Sequelize[_0x078e('0x8')]},'channel':{'type':Sequelize[_0x078e('0x8')]},'destinationchannel':{'type':Sequelize['STRING']},'lastapplication':{'type':Sequelize[_0x078e('0x8')]},'lastdata':{'type':Sequelize[_0x078e('0x9')]},'starttime':{'type':Sequelize[_0x078e('0xa')]},'systemanswertime':{'type':Sequelize[_0x078e('0xa')]},'answertime':{'type':Sequelize[_0x078e('0xa')]},'endtime':{'type':Sequelize[_0x078e('0xa')]},'duration':{'type':Sequelize[_0x078e('0xb')]},'billableseconds':{'type':Sequelize['INTEGER']},'mohtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'disposition':{'type':Sequelize[_0x078e('0x8')]},'amaflags':{'type':Sequelize[_0x078e('0x8')]},'userfield':{'type':Sequelize[_0x078e('0x8')]},'userDisposition':{'type':Sequelize[_0x078e('0x8')]},'note':{'type':Sequelize[_0x078e('0x8')]},'prefix':{'type':Sequelize[_0x078e('0x8')]},'routeid':{'type':Sequelize['INTEGER']},'sipcallid':{'type':Sequelize[_0x078e('0x8')]}};
\ No newline at end of file
index 86bad99..231daf0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe706=['fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../mysqldb','sendStatus','status','end','json','count','offset','Content-Range','apply','reject','save','update','then','destroy','error','name','send','index','VoiceCallReport','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','limit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','fullname','alias','User','findAll','rows','catch','params','find','create','body','describe','uniqueid','user','html-pdf','eml-format','rimraf'];(function(_0x2714ec,_0x36daa4){var _0x2608e5=function(_0x408468){while(--_0x408468){_0x2714ec['push'](_0x2714ec['shift']());}};_0x2608e5(++_0x36daa4);}(_0xe706,0xa3));var _0x6e70=function(_0x21aec3,_0x5c97e9){_0x21aec3=_0x21aec3-0x0;var _0x288bbc=_0xe706[_0x21aec3];return _0x288bbc;};'use strict';var pdf=require(_0x6e70('0x0'));var emlformat=require(_0x6e70('0x1'));var rimraf=require(_0x6e70('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x6e70('0x3'));var rp=require(_0x6e70('0x4'));var moment=require(_0x6e70('0x5'));var BPromise=require(_0x6e70('0x6'));var Mustache=require(_0x6e70('0x7'));var util=require(_0x6e70('0x8'));var path=require(_0x6e70('0x9'));var sox=require(_0x6e70('0xa'));var csv=require(_0x6e70('0xb'));var ejs=require(_0x6e70('0xc'));var fs=require('fs');var _=require(_0x6e70('0xd'));var squel=require(_0x6e70('0xe'));var crypto=require(_0x6e70('0xf'));var jsforce=require(_0x6e70('0x10'));var deskjs=require(_0x6e70('0x11'));var toCsv=require(_0x6e70('0xb'));var querystring=require(_0x6e70('0x12'));var Papa=require(_0x6e70('0x13'));var Redis=require(_0x6e70('0x14'));var authService=require(_0x6e70('0x15'));var qs=require(_0x6e70('0x16'));var hardwareService=require(_0x6e70('0x17'));var logger=require(_0x6e70('0x18'))(_0x6e70('0x19'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x6e70('0x1a'))['db'];function respondWithStatusCode(_0x15a1a5,_0x18cf27){_0x18cf27=_0x18cf27||0xcc;return function(_0x27dd9b){if(_0x27dd9b){return _0x15a1a5[_0x6e70('0x1b')](_0x18cf27);}return _0x15a1a5[_0x6e70('0x1c')](_0x18cf27)[_0x6e70('0x1d')]();};}function respondWithResult(_0x181005,_0x5dfbaa){_0x5dfbaa=_0x5dfbaa||0xc8;return function(_0x52737e){if(_0x52737e){return _0x181005['status'](_0x5dfbaa)[_0x6e70('0x1e')](_0x52737e);}};}function respondWithFilteredResult(_0x5a37a6,_0x53aed0){return function(_0x304716){if(_0x304716){var _0x22c50c=_0x304716[_0x6e70('0x1f')],_0x5d9263=_0x53aed0[_0x6e70('0x20')],_0x24f3ac=_0x53aed0['offset']+_0x53aed0['limit'],_0x5c3fe7;if(_0x24f3ac>=_0x22c50c){_0x24f3ac=_0x22c50c;_0x5c3fe7=0xc8;}else{_0x5c3fe7=0xce;}_0x5a37a6[_0x6e70('0x1c')](_0x5c3fe7);return _0x5a37a6['set'](_0x6e70('0x21'),_0x5d9263+'-'+_0x24f3ac+'/'+_0x22c50c)[_0x6e70('0x1e')](_0x304716);}return null;};}function patchUpdates(_0x53acdc){return function(_0x497d61){try{jsonpatch[_0x6e70('0x22')](_0x497d61,_0x53acdc,!![]);}catch(_0x208e21){return BPromise[_0x6e70('0x23')](_0x208e21);}return _0x497d61[_0x6e70('0x24')]();};}function saveUpdates(_0x3af484,_0xcdf9f2){return function(_0x1b2453){if(_0x1b2453){return _0x1b2453[_0x6e70('0x25')](_0x3af484)[_0x6e70('0x26')](function(_0xb29a2a){return _0xb29a2a;});}return null;};}function removeEntity(_0x4a0cfe,_0x228350){return function(_0x344b65){if(_0x344b65){return _0x344b65[_0x6e70('0x27')]()['then'](function(){_0x4a0cfe[_0x6e70('0x1c')](0xcc)[_0x6e70('0x1d')]();});}};}function handleEntityNotFound(_0x3337a6,_0x50da2c){return function(_0x10fc91){if(!_0x10fc91){_0x3337a6['sendStatus'](0x194);}return _0x10fc91;};}function handleError(_0x50aec2,_0x4e97c7){_0x4e97c7=_0x4e97c7||0x1f4;return function(_0x41e352){logger[_0x6e70('0x28')](_0x41e352['stack']);if(_0x41e352[_0x6e70('0x29')]){delete _0x41e352[_0x6e70('0x29')];}_0x50aec2['status'](_0x4e97c7)[_0x6e70('0x2a')](_0x41e352);};}exports[_0x6e70('0x2b')]=function(_0x2bb231,_0x4a67ac){var _0x54a5fe={},_0x2c4d37={},_0x3af17f={'count':0x0,'rows':[]};var _0x83c836=db[_0x6e70('0x2c')][_0x6e70('0x2d')];_0x2c4d37['model']=_[_0x6e70('0x2e')](_0x83c836);_0x2c4d37[_0x6e70('0x2f')]=_[_0x6e70('0x2e')](_0x2bb231[_0x6e70('0x2f')]);_0x2c4d37[_0x6e70('0x30')]=_[_0x6e70('0x31')](_0x2c4d37[_0x6e70('0x32')],_0x2c4d37[_0x6e70('0x2f')]);_0x54a5fe[_0x6e70('0x33')]=_[_0x6e70('0x31')](_0x2c4d37['model'],qs[_0x6e70('0x34')](_0x2bb231['query'][_0x6e70('0x34')]));_0x54a5fe['attributes']=_0x54a5fe[_0x6e70('0x33')][_0x6e70('0x35')]?_0x54a5fe[_0x6e70('0x33')]:_0x2c4d37['model'];if(!_0x2bb231[_0x6e70('0x2f')][_0x6e70('0x36')]('nolimit')){_0x54a5fe[_0x6e70('0x37')]=qs[_0x6e70('0x37')](_0x2bb231['query'][_0x6e70('0x37')]);_0x54a5fe[_0x6e70('0x20')]=qs[_0x6e70('0x20')](_0x2bb231[_0x6e70('0x2f')][_0x6e70('0x20')]);}_0x54a5fe[_0x6e70('0x38')]=qs[_0x6e70('0x39')](_0x2bb231[_0x6e70('0x2f')][_0x6e70('0x39')]);_0x54a5fe[_0x6e70('0x3a')]=qs['filters'](_[_0x6e70('0x3b')](_0x2bb231['query'],_0x2c4d37[_0x6e70('0x30')]));if(_0x2bb231[_0x6e70('0x2f')][_0x6e70('0x3c')]){_0x54a5fe[_0x6e70('0x3a')]=_[_0x6e70('0x3d')](_0x54a5fe[_0x6e70('0x3a')],{'$or':_[_0x6e70('0x3e')](_0x83c836,function(_0xdd0bee){if(_0xdd0bee[_0x6e70('0x3f')][_0x6e70('0x40')]!==_0x6e70('0x41')){var _0x23d5e2={};_0x23d5e2[_0xdd0bee[_0x6e70('0x42')]]={'$like':'%'+_0x2bb231['query']['filter']+'%'};return _0x23d5e2;}})});}_0x54a5fe=_['merge']({},_0x54a5fe,_0x2bb231[_0x6e70('0x43')]);var _0x3841a0={'where':_0x54a5fe[_0x6e70('0x3a')]};return db[_0x6e70('0x2c')][_0x6e70('0x1f')](_0x3841a0)[_0x6e70('0x26')](function(_0x572a71){_0x3af17f[_0x6e70('0x1f')]=_0x572a71;if(_0x2bb231[_0x6e70('0x2f')][_0x6e70('0x44')]){_0x54a5fe[_0x6e70('0x45')]=[{'attributes':['id',_0x6e70('0x29'),_0x6e70('0x46'),_0x6e70('0x47')],'model':db[_0x6e70('0x48')],'as':'User'}];}return db[_0x6e70('0x2c')][_0x6e70('0x49')](_0x54a5fe);})[_0x6e70('0x26')](function(_0x31cad2){_0x3af17f[_0x6e70('0x4a')]=_0x31cad2;return _0x3af17f;})[_0x6e70('0x26')](respondWithFilteredResult(_0x4a67ac,_0x54a5fe))[_0x6e70('0x4b')](handleError(_0x4a67ac,null));};exports['show']=function(_0x56ea6e,_0x5ae898){var _0x154e0c={'raw':!![],'where':{'id':_0x56ea6e[_0x6e70('0x4c')]['id']}},_0x2b63cc={};_0x2b63cc[_0x6e70('0x32')]=_[_0x6e70('0x2e')](db['VoiceCallReport'][_0x6e70('0x2d')]);_0x2b63cc[_0x6e70('0x2f')]=_[_0x6e70('0x2e')](_0x56ea6e['query']);_0x2b63cc['filters']=_['intersection'](_0x2b63cc[_0x6e70('0x32')],_0x2b63cc['query']);_0x154e0c[_0x6e70('0x33')]=_[_0x6e70('0x31')](_0x2b63cc[_0x6e70('0x32')],qs[_0x6e70('0x34')](_0x56ea6e['query'][_0x6e70('0x34')]));_0x154e0c['attributes']=_0x154e0c[_0x6e70('0x33')][_0x6e70('0x35')]?_0x154e0c[_0x6e70('0x33')]:_0x2b63cc[_0x6e70('0x32')];if(_0x56ea6e['query'][_0x6e70('0x44')]){_0x154e0c[_0x6e70('0x45')]=[{'all':!![]}];}_0x154e0c=_[_0x6e70('0x3d')]({},_0x154e0c,_0x56ea6e[_0x6e70('0x43')]);return db[_0x6e70('0x2c')][_0x6e70('0x4d')](_0x154e0c)[_0x6e70('0x26')](handleEntityNotFound(_0x5ae898,null))['then'](respondWithResult(_0x5ae898,null))[_0x6e70('0x4b')](handleError(_0x5ae898,null));};exports[_0x6e70('0x4e')]=function(_0x10de2a,_0x2f99cb){return db[_0x6e70('0x2c')][_0x6e70('0x4e')](_0x10de2a[_0x6e70('0x4f')],{})['then'](respondWithResult(_0x2f99cb,0xc9))[_0x6e70('0x4b')](handleError(_0x2f99cb,null));};exports['destroy']=function(_0x11794e,_0x3836e4){return db['VoiceCallReport']['find']({'where':{'id':_0x11794e[_0x6e70('0x4c')]['id']}})[_0x6e70('0x26')](handleEntityNotFound(_0x3836e4,null))[_0x6e70('0x26')](removeEntity(_0x3836e4,null))['catch'](handleError(_0x3836e4,null));};exports['describe']=function(_0x238ebb,_0x11ac3d){return db[_0x6e70('0x2c')][_0x6e70('0x50')]()[_0x6e70('0x26')](respondWithResult(_0x11ac3d,null))[_0x6e70('0x4b')](handleError(_0x11ac3d,null));};exports['update']=function(_0x756a5b,_0x3aa1a6){if(_0x756a5b[_0x6e70('0x4f')][_0x6e70('0x51')]){delete _0x756a5b[_0x6e70('0x4f')]['uniqueid'];}return db['VoiceCallReport'][_0x6e70('0x4d')]({'where':{'uniqueid':_0x756a5b[_0x6e70('0x4c')]['id'],'UserId':{'$or':[null,_0x756a5b[_0x6e70('0x52')]['id']]}}})[_0x6e70('0x26')](handleEntityNotFound(_0x3aa1a6,null))[_0x6e70('0x26')](saveUpdates(_0x756a5b['body'],null))[_0x6e70('0x26')](respondWithResult(_0x3aa1a6,null))[_0x6e70('0x4b')](handleError(_0x3aa1a6,null));};
\ No newline at end of file
+var _0x9c44=['order','sort','where','filter','merge','map','key','field','options','includeAll','include','fullname','alias','User','findAll','rows','catch','show','params','fields','find','create','body','destroy','describe','user','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','path','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','sendStatus','status','json','count','offset','limit','save','update','then','error','stack','name','send','index','VoiceCallReport','rawAttributes','keys','query','filters','intersection','model','attributes','length','hasOwnProperty','nolimit'];(function(_0x432682,_0x253044){var _0x463d05=function(_0xa73403){while(--_0xa73403){_0x432682['push'](_0x432682['shift']());}};_0x463d05(++_0x253044);}(_0x9c44,0x178));var _0x49c4=function(_0x5608a3,_0x5b33c5){_0x5608a3=_0x5608a3-0x0;var _0x1ed50a=_0x9c44[_0x5608a3];return _0x1ed50a;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x49c4('0x0'));var zipdir=require(_0x49c4('0x1'));var jsonpatch=require(_0x49c4('0x2'));var rp=require(_0x49c4('0x3'));var moment=require(_0x49c4('0x4'));var BPromise=require(_0x49c4('0x5'));var Mustache=require('mustache');var util=require('util');var path=require(_0x49c4('0x6'));var sox=require('sox');var csv=require(_0x49c4('0x7'));var ejs=require(_0x49c4('0x8'));var fs=require('fs');var _=require(_0x49c4('0x9'));var squel=require(_0x49c4('0xa'));var crypto=require(_0x49c4('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x49c4('0xc'));var toCsv=require(_0x49c4('0x7'));var querystring=require(_0x49c4('0xd'));var Papa=require(_0x49c4('0xe'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x49c4('0xf'));var hardwareService=require(_0x49c4('0x10'));var logger=require('../../config/logger')(_0x49c4('0x11'));var utils=require(_0x49c4('0x12'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1d19bf,_0x6d1b08){_0x6d1b08=_0x6d1b08||0xcc;return function(_0x5487cd){if(_0x5487cd){return _0x1d19bf[_0x49c4('0x13')](_0x6d1b08);}return _0x1d19bf[_0x49c4('0x14')](_0x6d1b08)['end']();};}function respondWithResult(_0x1909fe,_0x280996){_0x280996=_0x280996||0xc8;return function(_0x21f15a){if(_0x21f15a){return _0x1909fe[_0x49c4('0x14')](_0x280996)[_0x49c4('0x15')](_0x21f15a);}};}function respondWithFilteredResult(_0x18211c,_0x75ea8){return function(_0x3de397){if(_0x3de397){var _0x58d177=_0x3de397[_0x49c4('0x16')],_0x3acd06=_0x75ea8[_0x49c4('0x17')],_0x141003=_0x75ea8['offset']+_0x75ea8[_0x49c4('0x18')],_0x13a2db;if(_0x141003>=_0x58d177){_0x141003=_0x58d177;_0x13a2db=0xc8;}else{_0x13a2db=0xce;}_0x18211c[_0x49c4('0x14')](_0x13a2db);return _0x18211c['set']('Content-Range',_0x3acd06+'-'+_0x141003+'/'+_0x58d177)[_0x49c4('0x15')](_0x3de397);}return null;};}function patchUpdates(_0x2f82d5){return function(_0x3addb2){try{jsonpatch['apply'](_0x3addb2,_0x2f82d5,!![]);}catch(_0x24856d){return BPromise['reject'](_0x24856d);}return _0x3addb2[_0x49c4('0x19')]();};}function saveUpdates(_0x1806c2,_0xe31fcc){return function(_0x291526){if(_0x291526){return _0x291526[_0x49c4('0x1a')](_0x1806c2)[_0x49c4('0x1b')](function(_0x280893){return _0x280893;});}return null;};}function removeEntity(_0x46e475,_0x2197d2){return function(_0x578447){if(_0x578447){return _0x578447['destroy']()['then'](function(){_0x46e475[_0x49c4('0x14')](0xcc)['end']();});}};}function handleEntityNotFound(_0x592bb8,_0x2263ae){return function(_0x15581b){if(!_0x15581b){_0x592bb8[_0x49c4('0x13')](0x194);}return _0x15581b;};}function handleError(_0xd335e4,_0x4811c4){_0x4811c4=_0x4811c4||0x1f4;return function(_0x5850f2){logger[_0x49c4('0x1c')](_0x5850f2[_0x49c4('0x1d')]);if(_0x5850f2['name']){delete _0x5850f2[_0x49c4('0x1e')];}_0xd335e4[_0x49c4('0x14')](_0x4811c4)[_0x49c4('0x1f')](_0x5850f2);};}exports[_0x49c4('0x20')]=function(_0x531d92,_0x543ea2){var _0x449960={},_0x53c199={},_0x3800b7={'count':0x0,'rows':[]};var _0x3852b2=db[_0x49c4('0x21')][_0x49c4('0x22')];_0x53c199['model']=_[_0x49c4('0x23')](_0x3852b2);_0x53c199[_0x49c4('0x24')]=_[_0x49c4('0x23')](_0x531d92[_0x49c4('0x24')]);_0x53c199[_0x49c4('0x25')]=_[_0x49c4('0x26')](_0x53c199[_0x49c4('0x27')],_0x53c199[_0x49c4('0x24')]);_0x449960[_0x49c4('0x28')]=_[_0x49c4('0x26')](_0x53c199[_0x49c4('0x27')],qs['fields'](_0x531d92['query']['fields']));_0x449960[_0x49c4('0x28')]=_0x449960[_0x49c4('0x28')][_0x49c4('0x29')]?_0x449960[_0x49c4('0x28')]:_0x53c199[_0x49c4('0x27')];if(!_0x531d92['query'][_0x49c4('0x2a')](_0x49c4('0x2b'))){_0x449960[_0x49c4('0x18')]=qs[_0x49c4('0x18')](_0x531d92['query']['limit']);_0x449960[_0x49c4('0x17')]=qs[_0x49c4('0x17')](_0x531d92[_0x49c4('0x24')][_0x49c4('0x17')]);}_0x449960[_0x49c4('0x2c')]=qs['sort'](_0x531d92[_0x49c4('0x24')][_0x49c4('0x2d')]);_0x449960[_0x49c4('0x2e')]=qs['filters'](_['pick'](_0x531d92[_0x49c4('0x24')],_0x53c199[_0x49c4('0x25')]));if(_0x531d92[_0x49c4('0x24')][_0x49c4('0x2f')]){_0x449960[_0x49c4('0x2e')]=_[_0x49c4('0x30')](_0x449960[_0x49c4('0x2e')],{'$or':_[_0x49c4('0x31')](_0x3852b2,function(_0x3209cd){if(_0x3209cd['type'][_0x49c4('0x32')]!=='VIRTUAL'){var _0xdda586={};_0xdda586[_0x3209cd[_0x49c4('0x33')]]={'$like':'%'+_0x531d92[_0x49c4('0x24')][_0x49c4('0x2f')]+'%'};return _0xdda586;}})});}_0x449960=_['merge']({},_0x449960,_0x531d92[_0x49c4('0x34')]);var _0x31f3ff={'where':_0x449960[_0x49c4('0x2e')]};return db['VoiceCallReport'][_0x49c4('0x16')](_0x31f3ff)[_0x49c4('0x1b')](function(_0x178987){_0x3800b7[_0x49c4('0x16')]=_0x178987;if(_0x531d92[_0x49c4('0x24')][_0x49c4('0x35')]){_0x449960[_0x49c4('0x36')]=[{'attributes':['id',_0x49c4('0x1e'),_0x49c4('0x37'),_0x49c4('0x38')],'model':db[_0x49c4('0x39')],'as':'User'}];}return db[_0x49c4('0x21')][_0x49c4('0x3a')](_0x449960);})[_0x49c4('0x1b')](function(_0x23aa32){_0x3800b7[_0x49c4('0x3b')]=_0x23aa32;return _0x3800b7;})[_0x49c4('0x1b')](respondWithFilteredResult(_0x543ea2,_0x449960))[_0x49c4('0x3c')](handleError(_0x543ea2,null));};exports[_0x49c4('0x3d')]=function(_0x248c0a,_0x2668ed){var _0x2dffb4={'raw':!![],'where':{'id':_0x248c0a[_0x49c4('0x3e')]['id']}},_0xa3d59e={};_0xa3d59e['model']=_[_0x49c4('0x23')](db['VoiceCallReport'][_0x49c4('0x22')]);_0xa3d59e[_0x49c4('0x24')]=_[_0x49c4('0x23')](_0x248c0a[_0x49c4('0x24')]);_0xa3d59e[_0x49c4('0x25')]=_[_0x49c4('0x26')](_0xa3d59e['model'],_0xa3d59e['query']);_0x2dffb4[_0x49c4('0x28')]=_[_0x49c4('0x26')](_0xa3d59e[_0x49c4('0x27')],qs[_0x49c4('0x3f')](_0x248c0a['query'][_0x49c4('0x3f')]));_0x2dffb4[_0x49c4('0x28')]=_0x2dffb4[_0x49c4('0x28')][_0x49c4('0x29')]?_0x2dffb4[_0x49c4('0x28')]:_0xa3d59e[_0x49c4('0x27')];if(_0x248c0a[_0x49c4('0x24')][_0x49c4('0x35')]){_0x2dffb4[_0x49c4('0x36')]=[{'all':!![]}];}_0x2dffb4=_['merge']({},_0x2dffb4,_0x248c0a[_0x49c4('0x34')]);return db['VoiceCallReport'][_0x49c4('0x40')](_0x2dffb4)[_0x49c4('0x1b')](handleEntityNotFound(_0x2668ed,null))[_0x49c4('0x1b')](respondWithResult(_0x2668ed,null))[_0x49c4('0x3c')](handleError(_0x2668ed,null));};exports[_0x49c4('0x41')]=function(_0x5b296d,_0x592e8e){return db[_0x49c4('0x21')][_0x49c4('0x41')](_0x5b296d[_0x49c4('0x42')],{})[_0x49c4('0x1b')](respondWithResult(_0x592e8e,0xc9))[_0x49c4('0x3c')](handleError(_0x592e8e,null));};exports[_0x49c4('0x43')]=function(_0x4d89e0,_0x3bac1b){return db['VoiceCallReport'][_0x49c4('0x40')]({'where':{'id':_0x4d89e0[_0x49c4('0x3e')]['id']}})[_0x49c4('0x1b')](handleEntityNotFound(_0x3bac1b,null))[_0x49c4('0x1b')](removeEntity(_0x3bac1b,null))[_0x49c4('0x3c')](handleError(_0x3bac1b,null));};exports[_0x49c4('0x44')]=function(_0x2c6be1,_0x506c71){return db[_0x49c4('0x21')][_0x49c4('0x44')]()['then'](respondWithResult(_0x506c71,null))[_0x49c4('0x3c')](handleError(_0x506c71,null));};exports[_0x49c4('0x1a')]=function(_0xfbe179,_0x242afc){if(_0xfbe179['body']['uniqueid']){delete _0xfbe179[_0x49c4('0x42')]['uniqueid'];}return db[_0x49c4('0x21')][_0x49c4('0x40')]({'where':{'uniqueid':_0xfbe179[_0x49c4('0x3e')]['id'],'UserId':{'$or':[null,_0xfbe179[_0x49c4('0x45')]['id']]}}})[_0x49c4('0x1b')](handleEntityNotFound(_0x242afc,null))[_0x49c4('0x1b')](saveUpdates(_0xfbe179[_0x49c4('0x42')],null))['then'](respondWithResult(_0x242afc,null))[_0x49c4('0x3c')](handleError(_0x242afc,null));};
\ No newline at end of file
index ab3ce5c..8df7412 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe596=['./voiceCallReport.attributes','define','VoiceCallReport','report_call','uniqueid','lodash','util','../../config/logger','bluebird','request-promise','rimraf','../../config/environment'];(function(_0x23ad03,_0x368a53){var _0x83df94=function(_0x35dced){while(--_0x35dced){_0x23ad03['push'](_0x23ad03['shift']());}};_0x83df94(++_0x368a53);}(_0xe596,0x10d));var _0x6e59=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xe596[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0x6e59('0x0'));var util=require(_0x6e59('0x1'));var logger=require(_0x6e59('0x2'))('api');var moment=require('moment');var BPromise=require(_0x6e59('0x3'));var rp=require(_0x6e59('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x6e59('0x5'));var config=require(_0x6e59('0x6'));var attributes=require(_0x6e59('0x7'));module['exports']=function(_0x1338db,_0x1aa732){return _0x1338db[_0x6e59('0x8')](_0x6e59('0x9'),attributes,{'tableName':_0x6e59('0xa'),'paranoid':![],'indexes':[{'fields':[_0x6e59('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x16c9=['request-promise','rimraf','../../config/environment','./voiceCallReport.attributes','define','VoiceCallReport','lodash','util','../../config/logger','moment','bluebird'];(function(_0x4f4eae,_0x14d90f){var _0x1c6476=function(_0x42d365){while(--_0x42d365){_0x4f4eae['push'](_0x4f4eae['shift']());}};_0x1c6476(++_0x14d90f);}(_0x16c9,0xa0));var _0x916c=function(_0x5df2be,_0x1207fc){_0x5df2be=_0x5df2be-0x0;var _0x14badf=_0x16c9[_0x5df2be];return _0x14badf;};'use strict';var _=require(_0x916c('0x0'));var util=require(_0x916c('0x1'));var logger=require(_0x916c('0x2'))('api');var moment=require(_0x916c('0x3'));var BPromise=require(_0x916c('0x4'));var rp=require(_0x916c('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x916c('0x6'));var config=require(_0x916c('0x7'));var attributes=require(_0x916c('0x8'));module['exports']=function(_0x226b8d,_0x288b50){return _0x226b8d[_0x916c('0x9')](_0x916c('0xa'),attributes,{'tableName':'report_call','paranoid':![],'indexes':[{'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
index 3d9725c..0950858 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe31e=['../../mysqldb','../../config/logger','rpc','jayson/promise','client','http','then','info','VoiceCallReport,\x20%s,\x20%s','request\x20sent','debug','VoiceCallReport,\x20%s,\x20%s,\x20%s','stringify','error','message','result','GetVoiceCallReport','VoiceCallReport','options','raw','where','attributes','limit','include','map','model','CreateVoiceCallReport','body','catch','UpdateVoiceCallReport','randomstring','ioredis'];(function(_0x3162a0,_0x23f7e2){var _0x4f67a1=function(_0x2164aa){while(--_0x2164aa){_0x3162a0['push'](_0x3162a0['shift']());}};_0x4f67a1(++_0x23f7e2);}(_0xe31e,0x1de));var _0xee31=function(_0x1c2928,_0x259f3f){_0x1c2928=_0x1c2928-0x0;var _0x56aec4=_0xe31e[_0x1c2928];return _0x56aec4;};'use strict';var _=require('lodash');var util=require('util');var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xee31('0x0'));var fs=require('fs');var Redis=require(_0xee31('0x1'));var db=require(_0xee31('0x2'))['db'];var utils=require('../../config/utils');var logger=require(_0xee31('0x3'))(_0xee31('0x4'));var config=require('../../config/environment');var jayson=require(_0xee31('0x5'));var client=jayson[_0xee31('0x6')][_0xee31('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x4c1665,_0x4ea30c,_0x422549){return new BPromise(function(_0x5dcd04,_0x1fc82e){return client['request'](_0x4c1665,_0x422549)[_0xee31('0x8')](function(_0x5b5bb0){logger[_0xee31('0x9')](_0xee31('0xa'),_0x4ea30c,_0xee31('0xb'));logger[_0xee31('0xc')](_0xee31('0xd'),_0x4ea30c,_0xee31('0xb'),JSON[_0xee31('0xe')](_0x5b5bb0));if(_0x5b5bb0['error']){if(_0x5b5bb0['error']['code']===0x1f4){logger['error'](_0xee31('0xa'),_0x4ea30c,_0x5b5bb0[_0xee31('0xf')]['message']);return _0x1fc82e(_0x5b5bb0[_0xee31('0xf')][_0xee31('0x10')]);}logger['error']('VoiceCallReport,\x20%s,\x20%s',_0x4ea30c,_0x5b5bb0[_0xee31('0xf')][_0xee31('0x10')]);return _0x5dcd04(_0x5b5bb0[_0xee31('0xf')]['message']);}else{logger[_0xee31('0x9')](_0xee31('0xa'),_0x4ea30c,_0xee31('0xb'));_0x5dcd04(_0x5b5bb0[_0xee31('0x11')][_0xee31('0x10')]);}})['catch'](function(_0xdf4890){logger[_0xee31('0xf')](_0xee31('0xa'),_0x4ea30c,_0xdf4890);_0x1fc82e(_0xdf4890);});});}exports[_0xee31('0x12')]=function(_0xed275){var _0x522729=this;return new Promise(function(_0x34ed8b,_0xeb37df){return db[_0xee31('0x13')]['findAll']({'raw':_0xed275['options']?_0xed275[_0xee31('0x14')][_0xee31('0x15')]===undefined?!![]:![]:!![],'where':_0xed275[_0xee31('0x14')]?_0xed275[_0xee31('0x14')][_0xee31('0x16')]||null:null,'attributes':_0xed275[_0xee31('0x14')]?_0xed275[_0xee31('0x14')][_0xee31('0x17')]||null:null,'limit':_0xed275[_0xee31('0x14')]?_0xed275[_0xee31('0x14')][_0xee31('0x18')]||null:null,'include':_0xed275['options']?_0xed275[_0xee31('0x14')][_0xee31('0x19')]?_[_0xee31('0x1a')](_0xed275['options'][_0xee31('0x19')],function(_0x25d82f){return{'model':db[_0x25d82f[_0xee31('0x1b')]],'as':_0x25d82f['as'],'attributes':_0x25d82f['attributes'],'include':_0x25d82f[_0xee31('0x19')]?_[_0xee31('0x1a')](_0x25d82f[_0xee31('0x19')],function(_0x551dc){return{'model':db[_0x551dc[_0xee31('0x1b')]],'as':_0x551dc['as'],'attributes':_0x551dc['attributes'],'include':_0x551dc[_0xee31('0x19')]?_['map'](_0x551dc[_0xee31('0x19')],function(_0x10b248){return{'model':db[_0x10b248['model']],'as':_0x10b248['as'],'attributes':_0x10b248[_0xee31('0x17')]};}):[]};}):[]};}):[]:[]})[_0xee31('0x8')](function(_0x2c9bfc){logger[_0xee31('0x9')](_0xee31('0x12'),_0xed275);logger[_0xee31('0xc')](_0xee31('0x12'),_0xed275,JSON[_0xee31('0xe')](_0x2c9bfc));_0x34ed8b(_0x2c9bfc);})['catch'](function(_0x33a5b8){logger[_0xee31('0xf')](_0xee31('0x12'),_0x33a5b8['message'],_0xed275);_0xeb37df(_0x522729[_0xee31('0xf')](0x1f4,_0x33a5b8['message']));});});};exports[_0xee31('0x1c')]=function(_0x2ebcc6){var _0x3aa479=this;return new Promise(function(_0x50e0b7,_0x3ce91f){return db[_0xee31('0x13')]['create'](_0x2ebcc6[_0xee31('0x1d')],{'raw':_0x2ebcc6[_0xee31('0x14')]?_0x2ebcc6[_0xee31('0x14')][_0xee31('0x15')]===undefined?!![]:![]:!![]})['then'](function(_0x1d3b7f){logger['info'](_0xee31('0x1c'),_0x2ebcc6);logger[_0xee31('0xc')]('CreateVoiceCallReport',_0x2ebcc6,JSON[_0xee31('0xe')](_0x1d3b7f));_0x50e0b7(_0x1d3b7f);})[_0xee31('0x1e')](function(_0x2f2ac6){logger[_0xee31('0xf')]('CreateVoiceCallReport',_0x2f2ac6['message'],_0x2ebcc6);_0x3ce91f(_0x3aa479[_0xee31('0xf')](0x1f4,_0x2f2ac6[_0xee31('0x10')]));});});};exports['UpdateVoiceCallReport']=function(_0x2b2170){var _0x29a42c=this;return new Promise(function(_0x3cf6ab,_0x3e57d2){return db[_0xee31('0x13')]['update'](_0x2b2170[_0xee31('0x1d')],{'raw':_0x2b2170[_0xee31('0x14')]?_0x2b2170[_0xee31('0x14')][_0xee31('0x15')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2b2170[_0xee31('0x14')]?_0x2b2170['options'][_0xee31('0x16')]||null:null,'attributes':_0x2b2170[_0xee31('0x14')]?_0x2b2170['options'][_0xee31('0x17')]||null:null,'limit':_0x2b2170[_0xee31('0x14')]?_0x2b2170['options'][_0xee31('0x18')]||null:null})[_0xee31('0x8')](function(_0x1b12ef){logger[_0xee31('0x9')](_0xee31('0x1f'),_0x2b2170);logger['debug'](_0xee31('0x1f'),_0x2b2170,JSON[_0xee31('0xe')](_0x1b12ef));_0x3cf6ab(_0x1b12ef);})[_0xee31('0x1e')](function(_0x46e0b1){logger[_0xee31('0xf')](_0xee31('0x1f'),_0x46e0b1[_0xee31('0x10')],_0x2b2170);_0x3e57d2(_0x29a42c[_0xee31('0xf')](0x1f4,_0x46e0b1[_0xee31('0x10')]));});});};
\ No newline at end of file
+var _0x598e=['VoiceCallReport','findAll','options','raw','where','limit','include','map','model','attributes','CreateVoiceCallReport','create','body','update','UpdateVoiceCallReport','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','then','info','VoiceCallReport,\x20%s,\x20%s','request\x20sent','debug','VoiceCallReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetVoiceCallReport'];(function(_0x27fedb,_0x31c693){var _0x58ab78=function(_0x532732){while(--_0x532732){_0x27fedb['push'](_0x27fedb['shift']());}};_0x58ab78(++_0x31c693);}(_0x598e,0xcd));var _0xe598=function(_0x863c21,_0x16689a){_0x863c21=_0x863c21-0x0;var _0x261dd9=_0x598e[_0x863c21];return _0x261dd9;};'use strict';var _=require('lodash');var util=require(_0xe598('0x0'));var moment=require(_0xe598('0x1'));var BPromise=require(_0xe598('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xe598('0x3'));var db=require(_0xe598('0x4'))['db'];var utils=require(_0xe598('0x5'));var logger=require(_0xe598('0x6'))(_0xe598('0x7'));var config=require('../../config/environment');var jayson=require(_0xe598('0x8'));var client=jayson[_0xe598('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x14c776,_0x46c5fa,_0x7c6f60){return new BPromise(function(_0x48f135,_0x499d24){return client['request'](_0x14c776,_0x7c6f60)[_0xe598('0xa')](function(_0x39043a){logger[_0xe598('0xb')](_0xe598('0xc'),_0x46c5fa,_0xe598('0xd'));logger[_0xe598('0xe')](_0xe598('0xf'),_0x46c5fa,_0xe598('0xd'),JSON[_0xe598('0x10')](_0x39043a));if(_0x39043a[_0xe598('0x11')]){if(_0x39043a['error'][_0xe598('0x12')]===0x1f4){logger[_0xe598('0x11')](_0xe598('0xc'),_0x46c5fa,_0x39043a['error'][_0xe598('0x13')]);return _0x499d24(_0x39043a[_0xe598('0x11')]['message']);}logger['error'](_0xe598('0xc'),_0x46c5fa,_0x39043a[_0xe598('0x11')][_0xe598('0x13')]);return _0x48f135(_0x39043a[_0xe598('0x11')][_0xe598('0x13')]);}else{logger[_0xe598('0xb')](_0xe598('0xc'),_0x46c5fa,_0xe598('0xd'));_0x48f135(_0x39043a[_0xe598('0x14')][_0xe598('0x13')]);}})[_0xe598('0x15')](function(_0x40cb5f){logger[_0xe598('0x11')]('VoiceCallReport,\x20%s,\x20%s',_0x46c5fa,_0x40cb5f);_0x499d24(_0x40cb5f);});});}exports[_0xe598('0x16')]=function(_0x26d383){var _0x2df5c8=this;return new Promise(function(_0x128edc,_0x5cf981){return db[_0xe598('0x17')][_0xe598('0x18')]({'raw':_0x26d383[_0xe598('0x19')]?_0x26d383[_0xe598('0x19')][_0xe598('0x1a')]===undefined?!![]:![]:!![],'where':_0x26d383[_0xe598('0x19')]?_0x26d383[_0xe598('0x19')][_0xe598('0x1b')]||null:null,'attributes':_0x26d383[_0xe598('0x19')]?_0x26d383[_0xe598('0x19')]['attributes']||null:null,'limit':_0x26d383[_0xe598('0x19')]?_0x26d383[_0xe598('0x19')][_0xe598('0x1c')]||null:null,'include':_0x26d383[_0xe598('0x19')]?_0x26d383[_0xe598('0x19')][_0xe598('0x1d')]?_[_0xe598('0x1e')](_0x26d383[_0xe598('0x19')][_0xe598('0x1d')],function(_0x45aff4){return{'model':db[_0x45aff4[_0xe598('0x1f')]],'as':_0x45aff4['as'],'attributes':_0x45aff4[_0xe598('0x20')],'include':_0x45aff4['include']?_[_0xe598('0x1e')](_0x45aff4['include'],function(_0x4ef853){return{'model':db[_0x4ef853['model']],'as':_0x4ef853['as'],'attributes':_0x4ef853[_0xe598('0x20')],'include':_0x4ef853[_0xe598('0x1d')]?_['map'](_0x4ef853[_0xe598('0x1d')],function(_0x2ee8ac){return{'model':db[_0x2ee8ac['model']],'as':_0x2ee8ac['as'],'attributes':_0x2ee8ac[_0xe598('0x20')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x153218){logger['info'](_0xe598('0x16'),_0x26d383);logger[_0xe598('0xe')]('GetVoiceCallReport',_0x26d383,JSON[_0xe598('0x10')](_0x153218));_0x128edc(_0x153218);})[_0xe598('0x15')](function(_0xe39d08){logger['error']('GetVoiceCallReport',_0xe39d08['message'],_0x26d383);_0x5cf981(_0x2df5c8['error'](0x1f4,_0xe39d08['message']));});});};exports[_0xe598('0x21')]=function(_0x2e67ee){var _0x3fd8f9=this;return new Promise(function(_0x3aea8e,_0x31e333){return db[_0xe598('0x17')][_0xe598('0x22')](_0x2e67ee[_0xe598('0x23')],{'raw':_0x2e67ee[_0xe598('0x19')]?_0x2e67ee[_0xe598('0x19')][_0xe598('0x1a')]===undefined?!![]:![]:!![]})[_0xe598('0xa')](function(_0x50ff25){logger[_0xe598('0xb')](_0xe598('0x21'),_0x2e67ee);logger[_0xe598('0xe')](_0xe598('0x21'),_0x2e67ee,JSON['stringify'](_0x50ff25));_0x3aea8e(_0x50ff25);})[_0xe598('0x15')](function(_0x5aafdc){logger[_0xe598('0x11')](_0xe598('0x21'),_0x5aafdc['message'],_0x2e67ee);_0x31e333(_0x3fd8f9['error'](0x1f4,_0x5aafdc['message']));});});};exports['UpdateVoiceCallReport']=function(_0x25ecd6){var _0x4dc3ed=this;return new Promise(function(_0xe84421,_0x9c501d){return db[_0xe598('0x17')][_0xe598('0x24')](_0x25ecd6[_0xe598('0x23')],{'raw':_0x25ecd6[_0xe598('0x19')]?_0x25ecd6[_0xe598('0x19')][_0xe598('0x1a')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x25ecd6[_0xe598('0x19')]?_0x25ecd6[_0xe598('0x19')][_0xe598('0x1b')]||null:null,'attributes':_0x25ecd6['options']?_0x25ecd6['options'][_0xe598('0x20')]||null:null,'limit':_0x25ecd6[_0xe598('0x19')]?_0x25ecd6[_0xe598('0x19')][_0xe598('0x1c')]||null:null})[_0xe598('0xa')](function(_0x476d90){logger[_0xe598('0xb')](_0xe598('0x25'),_0x25ecd6);logger[_0xe598('0xe')](_0xe598('0x25'),_0x25ecd6,JSON[_0xe598('0x10')](_0x476d90));_0xe84421(_0x476d90);})[_0xe598('0x15')](function(_0x504bd4){logger[_0xe598('0x11')](_0xe598('0x25'),_0x504bd4[_0xe598('0x13')],_0x25ecd6);_0x9c501d(_0x4dc3ed[_0xe598('0x11')](0x1f4,_0x504bd4['message']));});});};
\ No newline at end of file
index 808d559..c7931d5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5bd0=['./voiceChanSpy.controller','isAuthenticated','index','show','post','create','/:id','delete','exports','multer','path','express','../../components/interaction/service','../../config/environment'];(function(_0x1ee66d,_0x26a049){var _0x274466=function(_0x46b1c8){while(--_0x46b1c8){_0x1ee66d['push'](_0x1ee66d['shift']());}};_0x274466(++_0x26a049);}(_0x5bd0,0x175));var _0x05bd=function(_0x459b74,_0x5773bd){_0x459b74=_0x459b74-0x0;var _0x46cb16=_0x5bd0[_0x459b74];return _0x46cb16;};'use strict';var multer=require(_0x05bd('0x0'));var util=require('util');var path=require(_0x05bd('0x1'));var timeout=require('connect-timeout');var express=require(_0x05bd('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x05bd('0x3'));var config=require(_0x05bd('0x4'));var controller=require(_0x05bd('0x5'));router['get']('/',auth[_0x05bd('0x6')](),controller[_0x05bd('0x7')]);router['get']('/:id',auth[_0x05bd('0x6')](),controller[_0x05bd('0x8')]);router[_0x05bd('0x9')]('/',auth[_0x05bd('0x6')](),controller[_0x05bd('0xa')]);router['put'](_0x05bd('0xb'),auth[_0x05bd('0x6')](),controller['update']);router[_0x05bd('0xc')]('/:id',auth[_0x05bd('0x6')](),controller['destroy']);module[_0x05bd('0xd')]=router;
\ No newline at end of file
+var _0x4bb4=['get','isAuthenticated','/:id','create','update','delete','destroy','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceChanSpy.controller'];(function(_0x21d0b8,_0x3bba51){var _0x4de4b1=function(_0x3e8b8f){while(--_0x3e8b8f){_0x21d0b8['push'](_0x21d0b8['shift']());}};_0x4de4b1(++_0x3bba51);}(_0x4bb4,0x13a));var _0x44bb=function(_0x160790,_0x2c237f){_0x160790=_0x160790-0x0;var _0x149050=_0x4bb4[_0x160790];return _0x149050;};'use strict';var multer=require(_0x44bb('0x0'));var util=require('util');var path=require(_0x44bb('0x1'));var timeout=require(_0x44bb('0x2'));var express=require(_0x44bb('0x3'));var router=express[_0x44bb('0x4')]();var auth=require(_0x44bb('0x5'));var interaction=require(_0x44bb('0x6'));var config=require(_0x44bb('0x7'));var controller=require(_0x44bb('0x8'));router[_0x44bb('0x9')]('/',auth[_0x44bb('0xa')](),controller['index']);router[_0x44bb('0x9')](_0x44bb('0xb'),auth['isAuthenticated'](),controller['show']);router['post']('/',auth[_0x44bb('0xa')](),controller[_0x44bb('0xc')]);router['put'](_0x44bb('0xb'),auth[_0x44bb('0xa')](),controller[_0x44bb('0xd')]);router[_0x44bb('0xe')]('/:id',auth[_0x44bb('0xa')](),controller[_0x44bb('0xf')]);module[_0x44bb('0x10')]=router;
\ No newline at end of file
index fbfc16c..87ba20f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x65b8=['name','STRING','options','getDataValue','split','BOOLEAN','sequelize','exports'];(function(_0x27fe26,_0x3b8ca7){var _0x4fcb35=function(_0x35e0ae){while(--_0x35e0ae){_0x27fe26['push'](_0x27fe26['shift']());}};_0x4fcb35(++_0x3b8ca7);}(_0x65b8,0x15e));var _0x865b=function(_0x502c7d,_0x2f1285){_0x502c7d=_0x502c7d-0x0;var _0x30b7ed=_0x65b8[_0x502c7d];return _0x30b7ed;};'use strict';var Sequelize=require(_0x865b('0x0'));module[_0x865b('0x1')]={'name':{'type':Sequelize['STRING']},'prefix':{'type':Sequelize['STRING'],'unique':_0x865b('0x2'),'allowNull':![]},'options':{'type':Sequelize[_0x865b('0x3')],'set':function(_0x203736){this['setDataValue'](_0x865b('0x4'),_0x203736?_0x203736['join'](''):[]);},'get':function(){return this[_0x865b('0x5')](_0x865b('0x4'))?this[_0x865b('0x5')](_0x865b('0x4'))[_0x865b('0x6')](''):[];}},'auth':{'type':Sequelize[_0x865b('0x7')],'defaultValue':![]},'password':{'type':Sequelize[_0x865b('0x3')]},'record':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'recordingFormat':{'type':Sequelize[_0x865b('0x3')]},'description':{'type':Sequelize[_0x865b('0x3')]}};
\ No newline at end of file
+var _0xbf53=['exports','STRING','setDataValue','join','getDataValue','options','BOOLEAN','sequelize'];(function(_0x3c86e8,_0x42e6ac){var _0x16fd4f=function(_0x2647b9){while(--_0x2647b9){_0x3c86e8['push'](_0x3c86e8['shift']());}};_0x16fd4f(++_0x42e6ac);}(_0xbf53,0xcf));var _0x3bf5=function(_0x52a92e,_0x338e7a){_0x52a92e=_0x52a92e-0x0;var _0xd4ee84=_0xbf53[_0x52a92e];return _0xd4ee84;};'use strict';var Sequelize=require(_0x3bf5('0x0'));module[_0x3bf5('0x1')]={'name':{'type':Sequelize['STRING']},'prefix':{'type':Sequelize[_0x3bf5('0x2')],'unique':'name','allowNull':![]},'options':{'type':Sequelize[_0x3bf5('0x2')],'set':function(_0x59f688){this[_0x3bf5('0x3')]('options',_0x59f688?_0x59f688[_0x3bf5('0x4')](''):[]);},'get':function(){return this[_0x3bf5('0x5')](_0x3bf5('0x6'))?this[_0x3bf5('0x5')](_0x3bf5('0x6'))['split'](''):[];}},'auth':{'type':Sequelize[_0x3bf5('0x7')],'defaultValue':![]},'password':{'type':Sequelize[_0x3bf5('0x2')]},'record':{'type':Sequelize[_0x3bf5('0x7')],'defaultValue':![]},'recordingFormat':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x3bf5('0x2')]}};
\ No newline at end of file
index 8663a86..ce0363a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1bf2=['model','attributes','fields','length','hasOwnProperty','limit','order','sort','pick','where','type','key','VIRTUAL','field','options','count','includeAll','include','findAll','rows','catch','params','rawAttributes','merge','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','autoAssociation','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','util','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/environment','../../mysqldb','sendStatus','status','json','offset','set','Content-Range','reject','save','update','destroy','then','get','ChanSpies','UserProfileResource','end','error','stack','name','send','VoiceChanSpy','keys','query','filters','intersection'];(function(_0x153e55,_0x2934a9){var _0x247804=function(_0x5daaaa){while(--_0x5daaaa){_0x153e55['push'](_0x153e55['shift']());}};_0x247804(++_0x2934a9);}(_0x1bf2,0x6d));var _0x21bf=function(_0x3054be,_0x1bdc8b){_0x3054be=_0x3054be-0x0;var _0x3df150=_0x1bf2[_0x3054be];return _0x3df150;};'use strict';var pdf=require(_0x21bf('0x0'));var emlformat=require(_0x21bf('0x1'));var rimraf=require(_0x21bf('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x21bf('0x3'));var rp=require(_0x21bf('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x21bf('0x5'));var path=require('path');var sox=require(_0x21bf('0x6'));var csv=require(_0x21bf('0x7'));var ejs=require(_0x21bf('0x8'));var fs=require('fs');var _=require(_0x21bf('0x9'));var squel=require(_0x21bf('0xa'));var crypto=require(_0x21bf('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x21bf('0xc'));var toCsv=require(_0x21bf('0x7'));var querystring=require(_0x21bf('0xd'));var Papa=require(_0x21bf('0xe'));var Redis=require('ioredis');var authService=require(_0x21bf('0xf'));var qs=require(_0x21bf('0x10'));var hardwareService=require(_0x21bf('0x11'));var logger=require('../../config/logger')(_0x21bf('0x12'));var utils=require('../../config/utils');var config=require(_0x21bf('0x13'));var db=require(_0x21bf('0x14'))['db'];function respondWithStatusCode(_0xda6b47,_0xcfea73){_0xcfea73=_0xcfea73||0xcc;return function(_0x57253e){if(_0x57253e){return _0xda6b47[_0x21bf('0x15')](_0xcfea73);}return _0xda6b47[_0x21bf('0x16')](_0xcfea73)['end']();};}function respondWithResult(_0x28ff8a,_0x43b28a){_0x43b28a=_0x43b28a||0xc8;return function(_0x40bd5f){if(_0x40bd5f){return _0x28ff8a[_0x21bf('0x16')](_0x43b28a)[_0x21bf('0x17')](_0x40bd5f);}};}function respondWithFilteredResult(_0x46f0b6,_0x3550d2){return function(_0x45182b){if(_0x45182b){var _0x14d541=_0x45182b['count'],_0x3850b6=_0x3550d2[_0x21bf('0x18')],_0x3c22af=_0x3550d2[_0x21bf('0x18')]+_0x3550d2['limit'],_0x460ba1;if(_0x3c22af>=_0x14d541){_0x3c22af=_0x14d541;_0x460ba1=0xc8;}else{_0x460ba1=0xce;}_0x46f0b6[_0x21bf('0x16')](_0x460ba1);return _0x46f0b6[_0x21bf('0x19')](_0x21bf('0x1a'),_0x3850b6+'-'+_0x3c22af+'/'+_0x14d541)['json'](_0x45182b);}return null;};}function patchUpdates(_0x5a881d){return function(_0x569c2f){try{jsonpatch['apply'](_0x569c2f,_0x5a881d,!![]);}catch(_0x4b2bf7){return BPromise[_0x21bf('0x1b')](_0x4b2bf7);}return _0x569c2f[_0x21bf('0x1c')]();};}function saveUpdates(_0x2b9ef1,_0xecafda){return function(_0x580ebe){if(_0x580ebe){return _0x580ebe[_0x21bf('0x1d')](_0x2b9ef1)['then'](function(_0xa2f961){return _0xa2f961;});}return null;};}function removeEntity(_0x343bdd,_0x639e42){return function(_0x4a819c){if(_0x4a819c){return _0x4a819c[_0x21bf('0x1e')]()[_0x21bf('0x1f')](function(){var _0x1b770f=_0x4a819c[_0x21bf('0x20')]({'plain':!![]});var _0x2d7eb0=_0x21bf('0x21');return db[_0x21bf('0x22')][_0x21bf('0x1e')]({'where':{'type':_0x2d7eb0,'resourceId':_0x1b770f['id']}})[_0x21bf('0x1f')](function(){return _0x4a819c;});})[_0x21bf('0x1f')](function(){_0x343bdd['status'](0xcc)[_0x21bf('0x23')]();});}};}function handleEntityNotFound(_0x3e93dc,_0x42a485){return function(_0x50cbcc){if(!_0x50cbcc){_0x3e93dc['sendStatus'](0x194);}return _0x50cbcc;};}function handleError(_0x101b6d,_0x55bed6){_0x55bed6=_0x55bed6||0x1f4;return function(_0x42a216){logger[_0x21bf('0x24')](_0x42a216[_0x21bf('0x25')]);if(_0x42a216[_0x21bf('0x26')]){delete _0x42a216[_0x21bf('0x26')];}_0x101b6d['status'](_0x55bed6)[_0x21bf('0x27')](_0x42a216);};}exports['index']=function(_0x303cd5,_0x238de3){var _0x3b2f6b={},_0xdce7a4={},_0x20a021={'count':0x0,'rows':[]};var _0x486224=db[_0x21bf('0x28')]['rawAttributes'];_0xdce7a4['model']=_[_0x21bf('0x29')](_0x486224);_0xdce7a4[_0x21bf('0x2a')]=_[_0x21bf('0x29')](_0x303cd5['query']);_0xdce7a4[_0x21bf('0x2b')]=_[_0x21bf('0x2c')](_0xdce7a4[_0x21bf('0x2d')],_0xdce7a4[_0x21bf('0x2a')]);_0x3b2f6b[_0x21bf('0x2e')]=_[_0x21bf('0x2c')](_0xdce7a4[_0x21bf('0x2d')],qs[_0x21bf('0x2f')](_0x303cd5[_0x21bf('0x2a')][_0x21bf('0x2f')]));_0x3b2f6b['attributes']=_0x3b2f6b['attributes'][_0x21bf('0x30')]?_0x3b2f6b['attributes']:_0xdce7a4[_0x21bf('0x2d')];if(!_0x303cd5[_0x21bf('0x2a')][_0x21bf('0x31')]('nolimit')){_0x3b2f6b[_0x21bf('0x32')]=qs['limit'](_0x303cd5[_0x21bf('0x2a')][_0x21bf('0x32')]);_0x3b2f6b[_0x21bf('0x18')]=qs[_0x21bf('0x18')](_0x303cd5[_0x21bf('0x2a')]['offset']);}_0x3b2f6b[_0x21bf('0x33')]=qs[_0x21bf('0x34')](_0x303cd5[_0x21bf('0x2a')]['sort']);_0x3b2f6b['where']=qs[_0x21bf('0x2b')](_[_0x21bf('0x35')](_0x303cd5['query'],_0xdce7a4[_0x21bf('0x2b')]));if(_0x303cd5['query']['filter']){_0x3b2f6b[_0x21bf('0x36')]=_['merge'](_0x3b2f6b['where'],{'$or':_['map'](_0x486224,function(_0x1fc293){if(_0x1fc293[_0x21bf('0x37')][_0x21bf('0x38')]!==_0x21bf('0x39')){var _0x212698={};_0x212698[_0x1fc293[_0x21bf('0x3a')]]={'$like':'%'+_0x303cd5[_0x21bf('0x2a')]['filter']+'%'};return _0x212698;}})});}_0x3b2f6b=_['merge']({},_0x3b2f6b,_0x303cd5[_0x21bf('0x3b')]);var _0x64405f={'where':_0x3b2f6b['where']};return db[_0x21bf('0x28')][_0x21bf('0x3c')](_0x64405f)[_0x21bf('0x1f')](function(_0x1ef8e3){_0x20a021['count']=_0x1ef8e3;if(_0x303cd5['query'][_0x21bf('0x3d')]){_0x3b2f6b[_0x21bf('0x3e')]=[{'all':!![]}];}return db[_0x21bf('0x28')][_0x21bf('0x3f')](_0x3b2f6b);})[_0x21bf('0x1f')](function(_0x11175e){_0x20a021[_0x21bf('0x40')]=_0x11175e;return _0x20a021;})[_0x21bf('0x1f')](respondWithFilteredResult(_0x238de3,_0x3b2f6b))[_0x21bf('0x41')](handleError(_0x238de3,null));};exports['show']=function(_0xe5ed93,_0x368a11){var _0x40c08e={'raw':![],'where':{'id':_0xe5ed93[_0x21bf('0x42')]['id']}},_0x15f1f4={};_0x15f1f4['model']=_['keys'](db[_0x21bf('0x28')][_0x21bf('0x43')]);_0x15f1f4[_0x21bf('0x2a')]=_[_0x21bf('0x29')](_0xe5ed93[_0x21bf('0x2a')]);_0x15f1f4[_0x21bf('0x2b')]=_[_0x21bf('0x2c')](_0x15f1f4['model'],_0x15f1f4[_0x21bf('0x2a')]);_0x40c08e[_0x21bf('0x2e')]=_[_0x21bf('0x2c')](_0x15f1f4[_0x21bf('0x2d')],qs[_0x21bf('0x2f')](_0xe5ed93['query'][_0x21bf('0x2f')]));_0x40c08e[_0x21bf('0x2e')]=_0x40c08e[_0x21bf('0x2e')][_0x21bf('0x30')]?_0x40c08e[_0x21bf('0x2e')]:_0x15f1f4[_0x21bf('0x2d')];if(_0xe5ed93[_0x21bf('0x2a')][_0x21bf('0x3d')]){_0x40c08e[_0x21bf('0x3e')]=[{'all':!![]}];}_0x40c08e=_[_0x21bf('0x44')]({},_0x40c08e,_0xe5ed93[_0x21bf('0x3b')]);return db[_0x21bf('0x28')][_0x21bf('0x45')](_0x40c08e)[_0x21bf('0x1f')](handleEntityNotFound(_0x368a11,null))[_0x21bf('0x1f')](respondWithResult(_0x368a11,null))[_0x21bf('0x41')](handleError(_0x368a11,null));};exports['create']=function(_0x287b95,_0x22ecbb){return db[_0x21bf('0x28')][_0x21bf('0x46')](_0x287b95[_0x21bf('0x47')],{})[_0x21bf('0x1f')](function(_0x22352c){var _0x4033b7=_0x287b95[_0x21bf('0x48')][_0x21bf('0x20')]({'plain':!![]});if(!_0x4033b7)throw new Error(_0x21bf('0x49'));if(_0x4033b7[_0x21bf('0x4a')]===_0x21bf('0x48')){var _0x125c36=_0x22352c[_0x21bf('0x20')]({'plain':!![]});var _0x24688f='ChanSpies';return db['UserProfileSection'][_0x21bf('0x45')]({'where':{'name':_0x24688f,'userProfileId':_0x4033b7[_0x21bf('0x4b')]},'raw':!![]})[_0x21bf('0x1f')](function(_0xd8ae3b){if(_0xd8ae3b&&_0xd8ae3b[_0x21bf('0x4c')]===0x0){return db[_0x21bf('0x22')][_0x21bf('0x46')]({'name':_0x125c36[_0x21bf('0x26')],'resourceId':_0x125c36['id'],'type':_0xd8ae3b['name'],'sectionId':_0xd8ae3b['id']},{})['then'](function(){return _0x22352c;});}else{return _0x22352c;}})[_0x21bf('0x41')](function(_0x51a7f1){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x51a7f1);throw _0x51a7f1;});}return _0x22352c;})[_0x21bf('0x1f')](respondWithResult(_0x22ecbb,0xc9))[_0x21bf('0x41')](handleError(_0x22ecbb,null));};exports['update']=function(_0x489873,_0x2ee104){if(_0x489873[_0x21bf('0x47')]['id']){delete _0x489873[_0x21bf('0x47')]['id'];}return db[_0x21bf('0x28')][_0x21bf('0x45')]({'where':{'id':_0x489873[_0x21bf('0x42')]['id']}})[_0x21bf('0x1f')](handleEntityNotFound(_0x2ee104,null))[_0x21bf('0x1f')](saveUpdates(_0x489873[_0x21bf('0x47')],null))[_0x21bf('0x1f')](respondWithResult(_0x2ee104,null))[_0x21bf('0x41')](handleError(_0x2ee104,null));};exports[_0x21bf('0x1e')]=function(_0x308a4b,_0x5d0f70){return db[_0x21bf('0x28')][_0x21bf('0x45')]({'where':{'id':_0x308a4b[_0x21bf('0x42')]['id']}})[_0x21bf('0x1f')](handleEntityNotFound(_0x5d0f70,null))[_0x21bf('0x1f')](removeEntity(_0x5d0f70,null))[_0x21bf('0x41')](handleError(_0x5d0f70,null));};
\ No newline at end of file
+var _0xec9a=['attributes','intersection','fields','length','hasOwnProperty','nolimit','sort','filter','where','key','VIRTUAL','field','merge','options','includeAll','findAll','rows','rawAttributes','include','find','catch','create','body','user','get','role','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','util','path','sox','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','sendStatus','status','end','json','count','offset','limit','set','reject','save','update','then','destroy','ChanSpies','UserProfileResource','error','stack','name','index','VoiceChanSpy','keys','query','filters','model'];(function(_0x310b01,_0x2465b6){var _0x35fe04=function(_0x10c142){while(--_0x10c142){_0x310b01['push'](_0x310b01['shift']());}};_0x35fe04(++_0x2465b6);}(_0xec9a,0xb0));var _0xaec9=function(_0x3955eb,_0x5b43f1){_0x3955eb=_0x3955eb-0x0;var _0x268cdd=_0xec9a[_0x3955eb];return _0x268cdd;};'use strict';var pdf=require(_0xaec9('0x0'));var emlformat=require(_0xaec9('0x1'));var rimraf=require(_0xaec9('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xaec9('0x3'));var rp=require(_0xaec9('0x4'));var moment=require('moment');var BPromise=require(_0xaec9('0x5'));var Mustache=require('mustache');var util=require(_0xaec9('0x6'));var path=require(_0xaec9('0x7'));var sox=require(_0xaec9('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xaec9('0x9'));var squel=require('squel');var crypto=require(_0xaec9('0xa'));var jsforce=require(_0xaec9('0xb'));var deskjs=require(_0xaec9('0xc'));var toCsv=require('to-csv');var querystring=require(_0xaec9('0xd'));var Papa=require(_0xaec9('0xe'));var Redis=require(_0xaec9('0xf'));var authService=require(_0xaec9('0x10'));var qs=require(_0xaec9('0x11'));var hardwareService=require(_0xaec9('0x12'));var logger=require(_0xaec9('0x13'))(_0xaec9('0x14'));var utils=require('../../config/utils');var config=require(_0xaec9('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x34a1cd,_0x20236c){_0x20236c=_0x20236c||0xcc;return function(_0xd6dc8){if(_0xd6dc8){return _0x34a1cd[_0xaec9('0x16')](_0x20236c);}return _0x34a1cd[_0xaec9('0x17')](_0x20236c)[_0xaec9('0x18')]();};}function respondWithResult(_0x4fa27c,_0x43517d){_0x43517d=_0x43517d||0xc8;return function(_0x399c70){if(_0x399c70){return _0x4fa27c[_0xaec9('0x17')](_0x43517d)[_0xaec9('0x19')](_0x399c70);}};}function respondWithFilteredResult(_0x526d01,_0x57675d){return function(_0x13ab87){if(_0x13ab87){var _0x144120=_0x13ab87[_0xaec9('0x1a')],_0x26637a=_0x57675d[_0xaec9('0x1b')],_0x11081d=_0x57675d[_0xaec9('0x1b')]+_0x57675d[_0xaec9('0x1c')],_0x5c7b35;if(_0x11081d>=_0x144120){_0x11081d=_0x144120;_0x5c7b35=0xc8;}else{_0x5c7b35=0xce;}_0x526d01[_0xaec9('0x17')](_0x5c7b35);return _0x526d01[_0xaec9('0x1d')]('Content-Range',_0x26637a+'-'+_0x11081d+'/'+_0x144120)['json'](_0x13ab87);}return null;};}function patchUpdates(_0x14c73f){return function(_0xdf3e7){try{jsonpatch['apply'](_0xdf3e7,_0x14c73f,!![]);}catch(_0xb8173d){return BPromise[_0xaec9('0x1e')](_0xb8173d);}return _0xdf3e7[_0xaec9('0x1f')]();};}function saveUpdates(_0x1b183b,_0x18e8f3){return function(_0x5c9bc7){if(_0x5c9bc7){return _0x5c9bc7[_0xaec9('0x20')](_0x1b183b)[_0xaec9('0x21')](function(_0x527640){return _0x527640;});}return null;};}function removeEntity(_0x155336,_0x36c94c){return function(_0x434e40){if(_0x434e40){return _0x434e40[_0xaec9('0x22')]()['then'](function(){var _0x364ebe=_0x434e40['get']({'plain':!![]});var _0x13e8a9=_0xaec9('0x23');return db[_0xaec9('0x24')][_0xaec9('0x22')]({'where':{'type':_0x13e8a9,'resourceId':_0x364ebe['id']}})[_0xaec9('0x21')](function(){return _0x434e40;});})[_0xaec9('0x21')](function(){_0x155336[_0xaec9('0x17')](0xcc)['end']();});}};}function handleEntityNotFound(_0x5e4e67,_0x4f2a99){return function(_0x3aeeed){if(!_0x3aeeed){_0x5e4e67[_0xaec9('0x16')](0x194);}return _0x3aeeed;};}function handleError(_0x16475c,_0x4ee50a){_0x4ee50a=_0x4ee50a||0x1f4;return function(_0x1be8f5){logger[_0xaec9('0x25')](_0x1be8f5[_0xaec9('0x26')]);if(_0x1be8f5[_0xaec9('0x27')]){delete _0x1be8f5['name'];}_0x16475c[_0xaec9('0x17')](_0x4ee50a)['send'](_0x1be8f5);};}exports[_0xaec9('0x28')]=function(_0x41fee5,_0x4cc74c){var _0x917929={},_0x5704d7={},_0x4563db={'count':0x0,'rows':[]};var _0x46896e=db[_0xaec9('0x29')]['rawAttributes'];_0x5704d7['model']=_[_0xaec9('0x2a')](_0x46896e);_0x5704d7[_0xaec9('0x2b')]=_['keys'](_0x41fee5['query']);_0x5704d7[_0xaec9('0x2c')]=_['intersection'](_0x5704d7[_0xaec9('0x2d')],_0x5704d7[_0xaec9('0x2b')]);_0x917929[_0xaec9('0x2e')]=_[_0xaec9('0x2f')](_0x5704d7['model'],qs[_0xaec9('0x30')](_0x41fee5[_0xaec9('0x2b')][_0xaec9('0x30')]));_0x917929[_0xaec9('0x2e')]=_0x917929[_0xaec9('0x2e')][_0xaec9('0x31')]?_0x917929[_0xaec9('0x2e')]:_0x5704d7['model'];if(!_0x41fee5[_0xaec9('0x2b')][_0xaec9('0x32')](_0xaec9('0x33'))){_0x917929['limit']=qs[_0xaec9('0x1c')](_0x41fee5[_0xaec9('0x2b')][_0xaec9('0x1c')]);_0x917929[_0xaec9('0x1b')]=qs[_0xaec9('0x1b')](_0x41fee5[_0xaec9('0x2b')][_0xaec9('0x1b')]);}_0x917929['order']=qs[_0xaec9('0x34')](_0x41fee5[_0xaec9('0x2b')][_0xaec9('0x34')]);_0x917929['where']=qs['filters'](_['pick'](_0x41fee5['query'],_0x5704d7['filters']));if(_0x41fee5[_0xaec9('0x2b')][_0xaec9('0x35')]){_0x917929[_0xaec9('0x36')]=_['merge'](_0x917929[_0xaec9('0x36')],{'$or':_['map'](_0x46896e,function(_0x1b4b2a){if(_0x1b4b2a['type'][_0xaec9('0x37')]!==_0xaec9('0x38')){var _0xb753a5={};_0xb753a5[_0x1b4b2a[_0xaec9('0x39')]]={'$like':'%'+_0x41fee5[_0xaec9('0x2b')][_0xaec9('0x35')]+'%'};return _0xb753a5;}})});}_0x917929=_[_0xaec9('0x3a')]({},_0x917929,_0x41fee5[_0xaec9('0x3b')]);var _0x26feab={'where':_0x917929[_0xaec9('0x36')]};return db[_0xaec9('0x29')]['count'](_0x26feab)[_0xaec9('0x21')](function(_0xb88e8c){_0x4563db[_0xaec9('0x1a')]=_0xb88e8c;if(_0x41fee5[_0xaec9('0x2b')][_0xaec9('0x3c')]){_0x917929['include']=[{'all':!![]}];}return db[_0xaec9('0x29')][_0xaec9('0x3d')](_0x917929);})[_0xaec9('0x21')](function(_0x49f23d){_0x4563db[_0xaec9('0x3e')]=_0x49f23d;return _0x4563db;})[_0xaec9('0x21')](respondWithFilteredResult(_0x4cc74c,_0x917929))['catch'](handleError(_0x4cc74c,null));};exports['show']=function(_0x1bd1e3,_0x2e479d){var _0x2f9acb={'raw':![],'where':{'id':_0x1bd1e3['params']['id']}},_0x25748c={};_0x25748c[_0xaec9('0x2d')]=_[_0xaec9('0x2a')](db[_0xaec9('0x29')][_0xaec9('0x3f')]);_0x25748c[_0xaec9('0x2b')]=_[_0xaec9('0x2a')](_0x1bd1e3[_0xaec9('0x2b')]);_0x25748c['filters']=_[_0xaec9('0x2f')](_0x25748c[_0xaec9('0x2d')],_0x25748c[_0xaec9('0x2b')]);_0x2f9acb[_0xaec9('0x2e')]=_[_0xaec9('0x2f')](_0x25748c['model'],qs[_0xaec9('0x30')](_0x1bd1e3[_0xaec9('0x2b')][_0xaec9('0x30')]));_0x2f9acb[_0xaec9('0x2e')]=_0x2f9acb[_0xaec9('0x2e')]['length']?_0x2f9acb['attributes']:_0x25748c[_0xaec9('0x2d')];if(_0x1bd1e3[_0xaec9('0x2b')][_0xaec9('0x3c')]){_0x2f9acb[_0xaec9('0x40')]=[{'all':!![]}];}_0x2f9acb=_[_0xaec9('0x3a')]({},_0x2f9acb,_0x1bd1e3[_0xaec9('0x3b')]);return db[_0xaec9('0x29')][_0xaec9('0x41')](_0x2f9acb)[_0xaec9('0x21')](handleEntityNotFound(_0x2e479d,null))[_0xaec9('0x21')](respondWithResult(_0x2e479d,null))[_0xaec9('0x42')](handleError(_0x2e479d,null));};exports[_0xaec9('0x43')]=function(_0x36cbfe,_0x96980a){return db[_0xaec9('0x29')][_0xaec9('0x43')](_0x36cbfe[_0xaec9('0x44')],{})[_0xaec9('0x21')](function(_0x40f10a){var _0x4d819a=_0x36cbfe[_0xaec9('0x45')][_0xaec9('0x46')]({'plain':!![]});if(!_0x4d819a)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x4d819a[_0xaec9('0x47')]==='user'){var _0x1005b1=_0x40f10a[_0xaec9('0x46')]({'plain':!![]});var _0x1c9ce2=_0xaec9('0x23');return db['UserProfileSection'][_0xaec9('0x41')]({'where':{'name':_0x1c9ce2,'userProfileId':_0x4d819a['userProfileId']},'raw':!![]})[_0xaec9('0x21')](function(_0x2733b4){if(_0x2733b4&&_0x2733b4['autoAssociation']===0x0){return db['UserProfileResource'][_0xaec9('0x43')]({'name':_0x1005b1[_0xaec9('0x27')],'resourceId':_0x1005b1['id'],'type':_0x2733b4['name'],'sectionId':_0x2733b4['id']},{})[_0xaec9('0x21')](function(){return _0x40f10a;});}else{return _0x40f10a;}})[_0xaec9('0x42')](function(_0x2995eb){logger['error'](_0xaec9('0x48'),_0x2995eb);throw _0x2995eb;});}return _0x40f10a;})['then'](respondWithResult(_0x96980a,0xc9))[_0xaec9('0x42')](handleError(_0x96980a,null));};exports['update']=function(_0x1eeb1a,_0x3cf2cb){if(_0x1eeb1a[_0xaec9('0x44')]['id']){delete _0x1eeb1a[_0xaec9('0x44')]['id'];}return db['VoiceChanSpy']['find']({'where':{'id':_0x1eeb1a[_0xaec9('0x49')]['id']}})[_0xaec9('0x21')](handleEntityNotFound(_0x3cf2cb,null))[_0xaec9('0x21')](saveUpdates(_0x1eeb1a[_0xaec9('0x44')],null))[_0xaec9('0x21')](respondWithResult(_0x3cf2cb,null))[_0xaec9('0x42')](handleError(_0x3cf2cb,null));};exports[_0xaec9('0x22')]=function(_0x2f8611,_0x366773){return db[_0xaec9('0x29')][_0xaec9('0x41')]({'where':{'id':_0x2f8611[_0xaec9('0x49')]['id']}})[_0xaec9('0x21')](handleEntityNotFound(_0x366773,null))['then'](removeEntity(_0x366773,null))[_0xaec9('0x42')](handleError(_0x366773,null));};
\ No newline at end of file
index 9b7d059..365ac05 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa4fb=['catch','models','define','VoiceChanSpy','voice_chanspy','VoiceExtension','destroy','bulkCreate','lodash','util','bluebird','./voiceChanSpy.attributes','context','from-sip','format','%s%s','prefix','system','push','merge','Set','chanspy','MixMonitor','${UNIQUEID}.%s,ab','recordingFormat','Authenticate','password','ChanSpy','SIP/%s,%s','name','options','join','record','StopMixMonitor','length','internal','concat','User','findAll','agent','then'];(function(_0x4dfd10,_0x3169d5){var _0x267950=function(_0x15b4ae){while(--_0x15b4ae){_0x4dfd10['push'](_0x4dfd10['shift']());}};_0x267950(++_0x3169d5);}(_0xa4fb,0x150));var _0xba4f=function(_0xc4001c,_0x1bf8f0){_0xc4001c=_0xc4001c-0x0;var _0x49f7bc=_0xa4fb[_0xc4001c];return _0x49f7bc;};'use strict';var _=require(_0xba4f('0x0'));var util=require(_0xba4f('0x1'));var BPromise=require(_0xba4f('0x2'));var attributes=require(_0xba4f('0x3'));var getUserApplications=function(_0x569bf7,_0x5d2269,_0x4131a6){var _0x196e5b=0x1;var _0x27a519=[];var _0x4ac34c={'context':_0x5d2269[_0xba4f('0x4')]||_0xba4f('0x5'),'exten':util[_0xba4f('0x6')](_0xba4f('0x7'),_0x569bf7[_0xba4f('0x8')],_0x4131a6),'type':_0xba4f('0x9'),'isApp':![],'ChanSpyId':_0x569bf7['id'],'UserId':_0x5d2269['id']};_0x27a519[_0xba4f('0xa')](_[_0xba4f('0xb')]({'app':_0xba4f('0xc'),'appdata':util[_0xba4f('0x6')]('CDR(type)=%s',_0xba4f('0xd')),'priority':_0x196e5b++},_0x4ac34c));if(_0x569bf7['record']){_0x27a519[_0xba4f('0xa')](_[_0xba4f('0xb')]({'app':_0xba4f('0xe'),'appdata':util[_0xba4f('0x6')](_0xba4f('0xf'),_0x569bf7[_0xba4f('0x10')]),'priority':_0x196e5b++},_0x4ac34c));}if(_0x569bf7['auth']){_0x27a519[_0xba4f('0xa')](_[_0xba4f('0xb')]({'app':_0xba4f('0x11'),'appdata':_0x569bf7[_0xba4f('0x12')],'priority':_0x196e5b++},_0x4ac34c));}_0x27a519[_0xba4f('0xa')](_[_0xba4f('0xb')]({'app':_0xba4f('0x13'),'appdata':util[_0xba4f('0x6')](_0xba4f('0x14'),_0x5d2269[_0xba4f('0x15')],_0x569bf7['options']?_0x569bf7[_0xba4f('0x16')][_0xba4f('0x17')](''):''),'priority':_0x196e5b++},_0x4ac34c));if(_0x569bf7[_0xba4f('0x18')]){_0x27a519['push'](_['merge']({'app':_0xba4f('0x19'),'priority':_0x196e5b++},_0x4ac34c));}return _0x27a519;};var getChanSpyApplications=function(_0x26d144,_0x104caf){var _0xc0a442=[];for(var _0x218dea=0x0,_0x3e3540=0x1;_0x218dea<_0x104caf[_0xba4f('0x1a')];_0x218dea++,_0x3e3540=0x1){_0xc0a442=_0xc0a442['concat'](getUserApplications(_0x26d144,_0x104caf[_0x218dea],_0x104caf[_0x218dea][_0xba4f('0x1b')]));if(_0x104caf[_0x218dea][_0xba4f('0x1b')]!=_0x104caf[_0x218dea]['name']){_0xc0a442=_0xc0a442[_0xba4f('0x1c')](getUserApplications(_0x26d144,_0x104caf[_0x218dea],_0x104caf[_0x218dea]['name']));}}return _0xc0a442;};var getChanSpyPromise=function(_0x666124,_0x11e784){return new BPromise(function(_0x26e470,_0x30581b){return _0x666124[_0xba4f('0x1d')][_0xba4f('0x1e')]({'attributes':['id','name',_0xba4f('0x1b')],'where':{'role':_0xba4f('0x1f'),'chanspy':!![]},'raw':!![]})[_0xba4f('0x20')](function(_0x5ab4fb){if(_0x5ab4fb){return _0x26e470(getChanSpyApplications(_0x11e784,_0x5ab4fb));}return _0x26e470([]);})[_0xba4f('0x21')](function(_0x5a3ed0){_0x30581b(_0x5a3ed0);});});};module['exports']=function(_0x2a7f19,_0x46c07d){var _0x155eb7=_0x2a7f19[_0xba4f('0x22')];return _0x2a7f19[_0xba4f('0x23')](_0xba4f('0x24'),attributes,{'tableName':_0xba4f('0x25'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x5b9899,_0x5ec4ae,_0xd65629){return getChanSpyPromise(_0x155eb7,_0x5b9899)[_0xba4f('0x20')](function(_0x3fa60b){if(_0x3fa60b&&_0x3fa60b[_0xba4f('0x1a')]){return _0x155eb7[_0xba4f('0x26')]['bulkCreate'](_0x3fa60b);}})['then'](function(){_0xd65629();})[_0xba4f('0x21')](function(_0x103f21){_0xd65629(_0x103f21);});},'afterUpdate':function(_0x1d639a,_0x294be5,_0x2053d7){return _0x155eb7[_0xba4f('0x26')][_0xba4f('0x27')]({'where':{'ChanSpyId':_0x1d639a['id']}})[_0xba4f('0x20')](function(){return getChanSpyPromise(_0x155eb7,_0x1d639a);})[_0xba4f('0x20')](function(_0x597270){if(_0x597270&&_0x597270[_0xba4f('0x1a')]){return _0x155eb7['VoiceExtension'][_0xba4f('0x28')](_0x597270);}})[_0xba4f('0x20')](function(){_0x2053d7();})['catch'](function(_0x3bc2ea){_0x2053d7(_0x3bc2ea);});},'afterDestroy':function(_0x341566,_0x24fe58,_0x201998){return _0x155eb7[_0xba4f('0x26')][_0xba4f('0x27')]({'where':{'ChanSpyId':_0x341566['id']}})[_0xba4f('0x20')](function(){_0x201998();})[_0xba4f('0x21')](function(_0x111fbe){_0x201998(_0x111fbe);});}}});};
\ No newline at end of file
+var _0x6623=['lodash','util','bluebird','format','%s%s','prefix','system','merge','Set','CDR(type)=%s','chanspy','record','push','auth','Authenticate','password','ChanSpy','SIP/%s,%s','name','options','StopMixMonitor','length','concat','internal','findAll','then','catch','exports','VoiceChanSpy','voice_chanspy','VoiceExtension','bulkCreate','destroy'];(function(_0xefd9e3,_0x173978){var _0x4896bf=function(_0x42c66b){while(--_0x42c66b){_0xefd9e3['push'](_0xefd9e3['shift']());}};_0x4896bf(++_0x173978);}(_0x6623,0xa5));var _0x3662=function(_0x387777,_0x356171){_0x387777=_0x387777-0x0;var _0x3f84c0=_0x6623[_0x387777];return _0x3f84c0;};'use strict';var _=require(_0x3662('0x0'));var util=require(_0x3662('0x1'));var BPromise=require(_0x3662('0x2'));var attributes=require('./voiceChanSpy.attributes');var getUserApplications=function(_0x5adcb6,_0x82d3f3,_0x42211a){var _0x3aac8b=0x1;var _0x195d55=[];var _0x30b3bf={'context':_0x82d3f3['context']||'from-sip','exten':util[_0x3662('0x3')](_0x3662('0x4'),_0x5adcb6[_0x3662('0x5')],_0x42211a),'type':_0x3662('0x6'),'isApp':![],'ChanSpyId':_0x5adcb6['id'],'UserId':_0x82d3f3['id']};_0x195d55['push'](_[_0x3662('0x7')]({'app':_0x3662('0x8'),'appdata':util['format'](_0x3662('0x9'),_0x3662('0xa')),'priority':_0x3aac8b++},_0x30b3bf));if(_0x5adcb6[_0x3662('0xb')]){_0x195d55[_0x3662('0xc')](_[_0x3662('0x7')]({'app':'MixMonitor','appdata':util[_0x3662('0x3')]('${UNIQUEID}.%s,ab',_0x5adcb6['recordingFormat']),'priority':_0x3aac8b++},_0x30b3bf));}if(_0x5adcb6[_0x3662('0xd')]){_0x195d55['push'](_[_0x3662('0x7')]({'app':_0x3662('0xe'),'appdata':_0x5adcb6[_0x3662('0xf')],'priority':_0x3aac8b++},_0x30b3bf));}_0x195d55[_0x3662('0xc')](_[_0x3662('0x7')]({'app':_0x3662('0x10'),'appdata':util[_0x3662('0x3')](_0x3662('0x11'),_0x82d3f3[_0x3662('0x12')],_0x5adcb6['options']?_0x5adcb6[_0x3662('0x13')]['join'](''):''),'priority':_0x3aac8b++},_0x30b3bf));if(_0x5adcb6[_0x3662('0xb')]){_0x195d55[_0x3662('0xc')](_[_0x3662('0x7')]({'app':_0x3662('0x14'),'priority':_0x3aac8b++},_0x30b3bf));}return _0x195d55;};var getChanSpyApplications=function(_0x33c553,_0x3ab61a){var _0x38a758=[];for(var _0x3ab951=0x0,_0x327be4=0x1;_0x3ab951<_0x3ab61a[_0x3662('0x15')];_0x3ab951++,_0x327be4=0x1){_0x38a758=_0x38a758[_0x3662('0x16')](getUserApplications(_0x33c553,_0x3ab61a[_0x3ab951],_0x3ab61a[_0x3ab951]['internal']));if(_0x3ab61a[_0x3ab951][_0x3662('0x17')]!=_0x3ab61a[_0x3ab951][_0x3662('0x12')]){_0x38a758=_0x38a758['concat'](getUserApplications(_0x33c553,_0x3ab61a[_0x3ab951],_0x3ab61a[_0x3ab951][_0x3662('0x12')]));}}return _0x38a758;};var getChanSpyPromise=function(_0x2ecb5d,_0x88da9d){return new BPromise(function(_0x1ae2d7,_0x189c5a){return _0x2ecb5d['User'][_0x3662('0x18')]({'attributes':['id','name',_0x3662('0x17')],'where':{'role':'agent','chanspy':!![]},'raw':!![]})[_0x3662('0x19')](function(_0x512a53){if(_0x512a53){return _0x1ae2d7(getChanSpyApplications(_0x88da9d,_0x512a53));}return _0x1ae2d7([]);})[_0x3662('0x1a')](function(_0x45629a){_0x189c5a(_0x45629a);});});};module[_0x3662('0x1b')]=function(_0x3f9c7e,_0x1a087c){var _0x49c91f=_0x3f9c7e['models'];return _0x3f9c7e['define'](_0x3662('0x1c'),attributes,{'tableName':_0x3662('0x1d'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x4de63a,_0x3765ee,_0x2f0d72){return getChanSpyPromise(_0x49c91f,_0x4de63a)[_0x3662('0x19')](function(_0x516fb0){if(_0x516fb0&&_0x516fb0[_0x3662('0x15')]){return _0x49c91f[_0x3662('0x1e')][_0x3662('0x1f')](_0x516fb0);}})['then'](function(){_0x2f0d72();})[_0x3662('0x1a')](function(_0x1ccde6){_0x2f0d72(_0x1ccde6);});},'afterUpdate':function(_0x5c1f2c,_0x40058f,_0x35a603){return _0x49c91f[_0x3662('0x1e')][_0x3662('0x20')]({'where':{'ChanSpyId':_0x5c1f2c['id']}})[_0x3662('0x19')](function(){return getChanSpyPromise(_0x49c91f,_0x5c1f2c);})[_0x3662('0x19')](function(_0xd0cb7c){if(_0xd0cb7c&&_0xd0cb7c[_0x3662('0x15')]){return _0x49c91f['VoiceExtension'][_0x3662('0x1f')](_0xd0cb7c);}})[_0x3662('0x19')](function(){_0x35a603();})[_0x3662('0x1a')](function(_0x36db97){_0x35a603(_0x36db97);});},'afterDestroy':function(_0xa89803,_0xebd5b9,_0x525322){return _0x49c91f[_0x3662('0x1e')][_0x3662('0x20')]({'where':{'ChanSpyId':_0xa89803['id']}})[_0x3662('0x19')](function(){_0x525322();})[_0x3662('0x1a')](function(_0x3fe4c1){_0x525322(_0x3fe4c1);});}}});};
\ No newline at end of file
index da23601..adb8a38 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0c6e=['rpc','../../config/environment','jayson/promise','client','http','request','then','request\x20sent','debug','VoiceChanSpy,\x20%s,\x20%s,\x20%s','stringify','error','VoiceChanSpy,\x20%s,\x20%s','message','result','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x5adecf,_0x33fcce){var _0x555cc2=function(_0xe56fa8){while(--_0xe56fa8){_0x5adecf['push'](_0x5adecf['shift']());}};_0x555cc2(++_0x33fcce);}(_0x0c6e,0xb0));var _0xe0c6=function(_0x5dbfeb,_0x1d48be){_0x5dbfeb=_0x5dbfeb-0x0;var _0x155e68=_0x0c6e[_0x5dbfeb];return _0x155e68;};'use strict';var _=require(_0xe0c6('0x0'));var util=require(_0xe0c6('0x1'));var moment=require('moment');var BPromise=require(_0xe0c6('0x2'));var rs=require(_0xe0c6('0x3'));var fs=require('fs');var Redis=require(_0xe0c6('0x4'));var db=require(_0xe0c6('0x5'))['db'];var utils=require(_0xe0c6('0x6'));var logger=require(_0xe0c6('0x7'))(_0xe0c6('0x8'));var config=require(_0xe0c6('0x9'));var jayson=require(_0xe0c6('0xa'));var client=jayson[_0xe0c6('0xb')][_0xe0c6('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x4d274d,_0xa24b8a,_0x3cfbb4){return new BPromise(function(_0x2936a8,_0x510519){return client[_0xe0c6('0xd')](_0x4d274d,_0x3cfbb4)[_0xe0c6('0xe')](function(_0x4bf936){logger['info']('VoiceChanSpy,\x20%s,\x20%s',_0xa24b8a,_0xe0c6('0xf'));logger[_0xe0c6('0x10')](_0xe0c6('0x11'),_0xa24b8a,_0xe0c6('0xf'),JSON[_0xe0c6('0x12')](_0x4bf936));if(_0x4bf936[_0xe0c6('0x13')]){if(_0x4bf936['error']['code']===0x1f4){logger[_0xe0c6('0x13')](_0xe0c6('0x14'),_0xa24b8a,_0x4bf936[_0xe0c6('0x13')][_0xe0c6('0x15')]);return _0x510519(_0x4bf936[_0xe0c6('0x13')][_0xe0c6('0x15')]);}logger[_0xe0c6('0x13')](_0xe0c6('0x14'),_0xa24b8a,_0x4bf936[_0xe0c6('0x13')]['message']);return _0x2936a8(_0x4bf936[_0xe0c6('0x13')]['message']);}else{logger['info'](_0xe0c6('0x14'),_0xa24b8a,'request\x20sent');_0x2936a8(_0x4bf936[_0xe0c6('0x16')][_0xe0c6('0x15')]);}})['catch'](function(_0x3579a9){logger[_0xe0c6('0x13')](_0xe0c6('0x14'),_0xa24b8a,_0x3579a9);_0x510519(_0x3579a9);});});}
\ No newline at end of file
+var _0x0d27=['../../config/utils','rpc','jayson/promise','client','request','info','VoiceChanSpy,\x20%s,\x20%s','request\x20sent','debug','VoiceChanSpy,\x20%s,\x20%s,\x20%s','stringify','error','code','message','lodash','util','moment','bluebird','randomstring','ioredis'];(function(_0x45b5fe,_0x4bcd6e){var _0x470b1c=function(_0x126ae){while(--_0x126ae){_0x45b5fe['push'](_0x45b5fe['shift']());}};_0x470b1c(++_0x4bcd6e);}(_0x0d27,0x112));var _0x70d2=function(_0x5141e6,_0x40fdbd){_0x5141e6=_0x5141e6-0x0;var _0x2fbf1c=_0x0d27[_0x5141e6];return _0x2fbf1c;};'use strict';var _=require(_0x70d2('0x0'));var util=require(_0x70d2('0x1'));var moment=require(_0x70d2('0x2'));var BPromise=require(_0x70d2('0x3'));var rs=require(_0x70d2('0x4'));var fs=require('fs');var Redis=require(_0x70d2('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x70d2('0x6'));var logger=require('../../config/logger')(_0x70d2('0x7'));var config=require('../../config/environment');var jayson=require(_0x70d2('0x8'));var client=jayson[_0x70d2('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x209ce3,_0x23a9e6,_0x529a84){return new BPromise(function(_0xe953be,_0xab9a6f){return client[_0x70d2('0xa')](_0x209ce3,_0x529a84)['then'](function(_0xeceab4){logger[_0x70d2('0xb')](_0x70d2('0xc'),_0x23a9e6,_0x70d2('0xd'));logger[_0x70d2('0xe')](_0x70d2('0xf'),_0x23a9e6,_0x70d2('0xd'),JSON[_0x70d2('0x10')](_0xeceab4));if(_0xeceab4[_0x70d2('0x11')]){if(_0xeceab4['error'][_0x70d2('0x12')]===0x1f4){logger['error'](_0x70d2('0xc'),_0x23a9e6,_0xeceab4[_0x70d2('0x11')][_0x70d2('0x13')]);return _0xab9a6f(_0xeceab4['error'][_0x70d2('0x13')]);}logger[_0x70d2('0x11')](_0x70d2('0xc'),_0x23a9e6,_0xeceab4['error'][_0x70d2('0x13')]);return _0xe953be(_0xeceab4[_0x70d2('0x11')][_0x70d2('0x13')]);}else{logger[_0x70d2('0xb')](_0x70d2('0xc'),_0x23a9e6,_0x70d2('0xd'));_0xe953be(_0xeceab4['result'][_0x70d2('0x13')]);}})['catch'](function(_0x10df14){logger[_0x70d2('0x11')](_0x70d2('0xc'),_0x23a9e6,_0x10df14);_0xab9a6f(_0x10df14);});});}
\ No newline at end of file
index eb7eae1..66f1a2d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdfb1=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','index','get','/:id','show','post','isAuthenticated','create','update','destroy','exports','multer','util','path','connect-timeout'];(function(_0x43dc7e,_0x49a390){var _0x21e12d=function(_0x15cc1a){while(--_0x15cc1a){_0x43dc7e['push'](_0x43dc7e['shift']());}};_0x21e12d(++_0x49a390);}(_0xdfb1,0x8c));var _0x1dfb=function(_0x1e914b,_0x10e3a2){_0x1e914b=_0x1e914b-0x0;var _0xdd63a5=_0xdfb1[_0x1e914b];return _0xdd63a5;};'use strict';var multer=require(_0x1dfb('0x0'));var util=require(_0x1dfb('0x1'));var path=require(_0x1dfb('0x2'));var timeout=require(_0x1dfb('0x3'));var express=require('express');var router=express[_0x1dfb('0x4')]();var auth=require(_0x1dfb('0x5'));var interaction=require(_0x1dfb('0x6'));var config=require(_0x1dfb('0x7'));var controller=require('./voiceContext.controller');router['get']('/',auth['isAuthenticated'](),controller[_0x1dfb('0x8')]);router[_0x1dfb('0x9')](_0x1dfb('0xa'),auth['isAuthenticated'](),controller[_0x1dfb('0xb')]);router[_0x1dfb('0xc')]('/',auth[_0x1dfb('0xd')](),controller[_0x1dfb('0xe')]);router['put'](_0x1dfb('0xa'),auth[_0x1dfb('0xd')](),controller[_0x1dfb('0xf')]);router['delete'](_0x1dfb('0xa'),auth[_0x1dfb('0xd')](),controller[_0x1dfb('0x10')]);module[_0x1dfb('0x11')]=router;
\ No newline at end of file
+var _0x8383=['multer','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceContext.controller','get','isAuthenticated','index','/:id','post','create','put','update','delete','destroy','exports'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0x8383,0x98));var _0x3838=function(_0x2e65c3,_0x442c9e){_0x2e65c3=_0x2e65c3-0x0;var _0x428358=_0x8383[_0x2e65c3];return _0x428358;};'use strict';var multer=require(_0x3838('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x3838('0x1'));var express=require(_0x3838('0x2'));var router=express[_0x3838('0x3')]();var auth=require(_0x3838('0x4'));var interaction=require(_0x3838('0x5'));var config=require(_0x3838('0x6'));var controller=require(_0x3838('0x7'));router[_0x3838('0x8')]('/',auth[_0x3838('0x9')](),controller[_0x3838('0xa')]);router['get'](_0x3838('0xb'),auth[_0x3838('0x9')](),controller['show']);router[_0x3838('0xc')]('/',auth['isAuthenticated'](),controller[_0x3838('0xd')]);router[_0x3838('0xe')](_0x3838('0xb'),auth['isAuthenticated'](),controller[_0x3838('0xf')]);router[_0x3838('0x10')](_0x3838('0xb'),auth['isAuthenticated'](),controller[_0x3838('0x11')]);module[_0x3838('0x12')]=router;
\ No newline at end of file
index b5d9085..19c3d9e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0e94=['STRING','BOOLEAN','sequelize','exports'];(function(_0x19c38e,_0x370cf5){var _0x5436cb=function(_0x24b18d){while(--_0x24b18d){_0x19c38e['push'](_0x19c38e['shift']());}};_0x5436cb(++_0x370cf5);}(_0x0e94,0x112));var _0x40e9=function(_0x4b055c,_0x4b870b){_0x4b055c=_0x4b055c-0x0;var _0x4b62bb=_0x0e94[_0x4b055c];return _0x4b62bb;};'use strict';var Sequelize=require(_0x40e9('0x0'));module[_0x40e9('0x1')]={'name':{'type':Sequelize[_0x40e9('0x2')],'unique':'name'},'description':{'type':Sequelize[_0x40e9('0x2')],'allowNull':!![]},'defaultEntry':{'type':Sequelize[_0x40e9('0x3')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x6c91=['exports','BOOLEAN','sequelize'];(function(_0x5c04ad,_0x31402f){var _0x314561=function(_0x1c605b){while(--_0x1c605b){_0x5c04ad['push'](_0x5c04ad['shift']());}};_0x314561(++_0x31402f);}(_0x6c91,0x8c));var _0x16c9=function(_0xddb966,_0x465e33){_0xddb966=_0xddb966-0x0;var _0x5e66e0=_0x6c91[_0xddb966];return _0x5e66e0;};'use strict';var Sequelize=require(_0x16c9('0x0'));module[_0x16c9('0x1')]={'name':{'type':Sequelize['STRING'],'unique':'name'},'description':{'type':Sequelize['STRING'],'allowNull':!![]},'defaultEntry':{'type':Sequelize[_0x16c9('0x2')],'defaultValue':0x0}};
\ No newline at end of file
index 92c43de..c35c2a4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xad9d=['Contexts','stack','name','send','index','VoiceContext','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','merge','type','key','VIRTUAL','filter','includeAll','findAll','show','rawAttributes','include','options','find','create','body','readFileSync','join','root','server/files/templates/context.ejs','render','Reload','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','utf8','writeFileSync','chan_sip.so','/etc/asterisk/extensions_xcally_contexts.conf','html-pdf','rimraf','fast-json-patch','moment','bluebird','mustache','util','sox','ejs','lodash','squel','jsforce','desk.js','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','jayson/promise','client','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request','then','VoiceContext,\x20%s,\x20%s','request\x20sent','debug','VoiceContext,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','destroy','get'];(function(_0x5c351c,_0x2046d8){var _0x26f3b3=function(_0x47ac18){while(--_0x47ac18){_0x5c351c['push'](_0x5c351c['shift']());}};_0x26f3b3(++_0x2046d8);}(_0xad9d,0x1d4));var _0xdad9=function(_0x340a7d,_0x529e5b){_0x340a7d=_0x340a7d-0x0;var _0x2fe444=_0xad9d[_0x340a7d];return _0x2fe444;};'use strict';var pdf=require(_0xdad9('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xdad9('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xdad9('0x2'));var rp=require('request-promise');var moment=require(_0xdad9('0x3'));var BPromise=require(_0xdad9('0x4'));var Mustache=require(_0xdad9('0x5'));var util=require(_0xdad9('0x6'));var path=require('path');var sox=require(_0xdad9('0x7'));var csv=require('to-csv');var ejs=require(_0xdad9('0x8'));var fs=require('fs');var _=require(_0xdad9('0x9'));var squel=require(_0xdad9('0xa'));var crypto=require('crypto');var jsforce=require(_0xdad9('0xb'));var deskjs=require(_0xdad9('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0xdad9('0xd'));var authService=require(_0xdad9('0xe'));var qs=require(_0xdad9('0xf'));var hardwareService=require(_0xdad9('0x10'));var logger=require(_0xdad9('0x11'))(_0xdad9('0x12'));var utils=require('../../config/utils');var config=require(_0xdad9('0x13'));var db=require(_0xdad9('0x14'))['db'];var jayson=require(_0xdad9('0x15'));var client=jayson[_0xdad9('0x16')]['http']({'port':0x232a});function checkPasswordPattern(_0x46069d,_0x33f1c4,_0x4c3c71){if(_0x4c3c71){var _0x13c487=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x13c487[_0xdad9('0x17')](_0x33f1c4)){return _0x46069d;}else{throw new Error(_0xdad9('0x18'));}}else{return _0x46069d;}}function respondWithRpcPromise(_0x41c466,_0x3ebca6,_0x47dee3,_0x1be883){return new BPromise(function(_0x38d1ba,_0x136471){var _0x3e18a1=_0x1be883||client;return _0x3e18a1[_0xdad9('0x19')](_0x41c466,_0x47dee3)[_0xdad9('0x1a')](function(_0x1a846d){logger['info'](_0xdad9('0x1b'),_0x3ebca6,_0xdad9('0x1c'));logger[_0xdad9('0x1d')](_0xdad9('0x1e'),_0x3ebca6,_0xdad9('0x1c'),JSON[_0xdad9('0x1f')](_0x1a846d));if(_0x1a846d[_0xdad9('0x20')]){if(_0x1a846d[_0xdad9('0x20')][_0xdad9('0x21')]===0x1f4){logger[_0xdad9('0x20')](_0xdad9('0x1b'),_0x3ebca6,_0x1a846d['error']['message']);return _0x136471(_0x1a846d[_0xdad9('0x20')][_0xdad9('0x22')]);}logger[_0xdad9('0x20')]('VoiceContext,\x20%s,\x20%s',_0x3ebca6,_0x1a846d[_0xdad9('0x20')]['message']);return _0x38d1ba(_0x1a846d[_0xdad9('0x20')][_0xdad9('0x22')]);}else{logger[_0xdad9('0x23')](_0xdad9('0x1b'),_0x3ebca6,_0xdad9('0x1c'));_0x38d1ba(_0x1a846d[_0xdad9('0x24')][_0xdad9('0x22')]);}})[_0xdad9('0x25')](function(_0x391eb9){logger[_0xdad9('0x20')](_0xdad9('0x1b'),_0x3ebca6,_0x391eb9);_0x136471(_0x391eb9);});});}function respondWithStatusCode(_0x40f6fc,_0x4d2376){_0x4d2376=_0x4d2376||0xcc;return function(_0x3874e9){if(_0x3874e9){return _0x40f6fc[_0xdad9('0x26')](_0x4d2376);}return _0x40f6fc[_0xdad9('0x27')](_0x4d2376)[_0xdad9('0x28')]();};}function respondWithResult(_0x2345b1,_0x22fed7){_0x22fed7=_0x22fed7||0xc8;return function(_0x1f496d){if(_0x1f496d){return _0x2345b1[_0xdad9('0x27')](_0x22fed7)[_0xdad9('0x29')](_0x1f496d);}};}function respondWithFilteredResult(_0x20a578,_0x4ca350){return function(_0x55e4b8){if(_0x55e4b8){var _0x4a9849=_0x55e4b8[_0xdad9('0x2a')],_0x48daf8=_0x4ca350[_0xdad9('0x2b')],_0x3d129d=_0x4ca350[_0xdad9('0x2b')]+_0x4ca350[_0xdad9('0x2c')],_0x53004f;if(_0x3d129d>=_0x4a9849){_0x3d129d=_0x4a9849;_0x53004f=0xc8;}else{_0x53004f=0xce;}_0x20a578[_0xdad9('0x27')](_0x53004f);return _0x20a578[_0xdad9('0x2d')](_0xdad9('0x2e'),_0x48daf8+'-'+_0x3d129d+'/'+_0x4a9849)[_0xdad9('0x29')](_0x55e4b8);}return null;};}function patchUpdates(_0x29d336){return function(_0x3b3018){try{jsonpatch['apply'](_0x3b3018,_0x29d336,!![]);}catch(_0x13b709){return BPromise[_0xdad9('0x2f')](_0x13b709);}return _0x3b3018[_0xdad9('0x30')]();};}function saveUpdates(_0x4e12d9,_0x3c025e){return function(_0x322120){if(_0x322120){return _0x322120[_0xdad9('0x31')](_0x4e12d9)['then'](function(_0x2f1f4a){return _0x2f1f4a;});}return null;};}function removeEntity(_0x5b3948,_0x30bfbc){return function(_0x7f08bf){if(_0x7f08bf){return _0x7f08bf[_0xdad9('0x32')]()[_0xdad9('0x1a')](function(){var _0x1d9c0a=_0x7f08bf[_0xdad9('0x33')]({'plain':!![]});var _0x26bf3a=_0xdad9('0x34');return db['UserProfileResource'][_0xdad9('0x32')]({'where':{'type':_0x26bf3a,'resourceId':_0x1d9c0a['id']}})[_0xdad9('0x1a')](function(){return _0x7f08bf;});})[_0xdad9('0x1a')](function(){_0x5b3948[_0xdad9('0x27')](0xcc)[_0xdad9('0x28')]();});}};}function handleEntityNotFound(_0x431a0e,_0x5e9a65){return function(_0xb36cad){if(!_0xb36cad){_0x431a0e[_0xdad9('0x26')](0x194);}return _0xb36cad;};}function handleError(_0x1efea6,_0x147bdf){_0x147bdf=_0x147bdf||0x1f4;return function(_0x37b278){logger[_0xdad9('0x20')](_0x37b278[_0xdad9('0x35')]);if(_0x37b278[_0xdad9('0x36')]){delete _0x37b278[_0xdad9('0x36')];}_0x1efea6['status'](_0x147bdf)[_0xdad9('0x37')](_0x37b278);};}exports[_0xdad9('0x38')]=function(_0x51b28b,_0x351a7e){var _0x5a72fb={},_0xaac5f6={},_0x145584={'count':0x0,'rows':[]};var _0xd26d04=db[_0xdad9('0x39')]['rawAttributes'];_0xaac5f6[_0xdad9('0x3a')]=_[_0xdad9('0x3b')](_0xd26d04);_0xaac5f6[_0xdad9('0x3c')]=_[_0xdad9('0x3b')](_0x51b28b[_0xdad9('0x3c')]);_0xaac5f6[_0xdad9('0x3d')]=_[_0xdad9('0x3e')](_0xaac5f6['model'],_0xaac5f6['query']);_0x5a72fb[_0xdad9('0x3f')]=_['intersection'](_0xaac5f6[_0xdad9('0x3a')],qs[_0xdad9('0x40')](_0x51b28b[_0xdad9('0x3c')]['fields']));_0x5a72fb['attributes']=_0x5a72fb[_0xdad9('0x3f')][_0xdad9('0x41')]?_0x5a72fb[_0xdad9('0x3f')]:_0xaac5f6[_0xdad9('0x3a')];if(!_0x51b28b[_0xdad9('0x3c')][_0xdad9('0x42')](_0xdad9('0x43'))){_0x5a72fb[_0xdad9('0x2c')]=qs[_0xdad9('0x2c')](_0x51b28b[_0xdad9('0x3c')]['limit']);_0x5a72fb[_0xdad9('0x2b')]=qs[_0xdad9('0x2b')](_0x51b28b[_0xdad9('0x3c')]['offset']);}_0x5a72fb['order']=qs[_0xdad9('0x44')](_0x51b28b[_0xdad9('0x3c')]['sort']);_0x5a72fb[_0xdad9('0x45')]=qs[_0xdad9('0x3d')](_[_0xdad9('0x46')](_0x51b28b[_0xdad9('0x3c')],_0xaac5f6['filters']));if(_0x51b28b[_0xdad9('0x3c')]['filter']){_0x5a72fb[_0xdad9('0x45')]=_[_0xdad9('0x47')](_0x5a72fb['where'],{'$or':_['map'](_0xd26d04,function(_0x5326f){if(_0x5326f[_0xdad9('0x48')][_0xdad9('0x49')]!==_0xdad9('0x4a')){var _0x57fce3={};_0x57fce3[_0x5326f['field']]={'$like':'%'+_0x51b28b[_0xdad9('0x3c')][_0xdad9('0x4b')]+'%'};return _0x57fce3;}})});}_0x5a72fb=_[_0xdad9('0x47')]({},_0x5a72fb,_0x51b28b['options']);var _0x134f2a={'where':_0x5a72fb['where']};return db['VoiceContext'][_0xdad9('0x2a')](_0x134f2a)[_0xdad9('0x1a')](function(_0x5d1e14){_0x145584['count']=_0x5d1e14;if(_0x51b28b[_0xdad9('0x3c')][_0xdad9('0x4c')]){_0x5a72fb['include']=[{'all':!![]}];}return db['VoiceContext'][_0xdad9('0x4d')](_0x5a72fb);})[_0xdad9('0x1a')](function(_0xdf55e){_0x145584['rows']=_0xdf55e;return _0x145584;})['then'](respondWithFilteredResult(_0x351a7e,_0x5a72fb))[_0xdad9('0x25')](handleError(_0x351a7e,null));};exports[_0xdad9('0x4e')]=function(_0x135463,_0xb626c2){var _0x4b5e14={'raw':![],'where':{'id':_0x135463['params']['id']}},_0x2a5f3c={};_0x2a5f3c['model']=_[_0xdad9('0x3b')](db['VoiceContext'][_0xdad9('0x4f')]);_0x2a5f3c['query']=_[_0xdad9('0x3b')](_0x135463[_0xdad9('0x3c')]);_0x2a5f3c[_0xdad9('0x3d')]=_['intersection'](_0x2a5f3c[_0xdad9('0x3a')],_0x2a5f3c[_0xdad9('0x3c')]);_0x4b5e14[_0xdad9('0x3f')]=_[_0xdad9('0x3e')](_0x2a5f3c[_0xdad9('0x3a')],qs['fields'](_0x135463[_0xdad9('0x3c')]['fields']));_0x4b5e14['attributes']=_0x4b5e14[_0xdad9('0x3f')][_0xdad9('0x41')]?_0x4b5e14[_0xdad9('0x3f')]:_0x2a5f3c[_0xdad9('0x3a')];if(_0x135463['query'][_0xdad9('0x4c')]){_0x4b5e14[_0xdad9('0x50')]=[{'all':!![]}];}_0x4b5e14=_['merge']({},_0x4b5e14,_0x135463[_0xdad9('0x51')]);return db[_0xdad9('0x39')][_0xdad9('0x52')](_0x4b5e14)[_0xdad9('0x1a')](handleEntityNotFound(_0xb626c2,null))[_0xdad9('0x1a')](respondWithResult(_0xb626c2,null))[_0xdad9('0x25')](handleError(_0xb626c2,null));};exports[_0xdad9('0x53')]=function(_0x30de57,_0x2ccc44,_0x45e16c){var _0x397cab;return db[_0xdad9('0x39')][_0xdad9('0x53')](_0x30de57[_0xdad9('0x54')],{'raw':!![]})['then'](function(_0x8ce746){_0x397cab=_0x8ce746;return db[_0xdad9('0x39')][_0xdad9('0x4d')]({'raw':!![]});})[_0xdad9('0x1a')](function(_0x18e70b){var _0x5f121a=fs[_0xdad9('0x55')](path[_0xdad9('0x56')](config[_0xdad9('0x57')],_0xdad9('0x58')),'utf8');var _0x4d0ff2=ejs[_0xdad9('0x59')](_0x5f121a,{'contexts':_0x18e70b||[]});fs['writeFileSync']('/etc/asterisk/extensions_xcally_contexts.conf',_0x4d0ff2);})[_0xdad9('0x1a')](function(){return respondWithRpcPromise(_0xdad9('0x5a'),_0xdad9('0x53'),{'module':'chan_sip.so'});})[_0xdad9('0x1a')](function(){var _0x4601c4=_0x30de57[_0xdad9('0x5b')][_0xdad9('0x33')]({'plain':!![]});if(!_0x4601c4)throw new Error(_0xdad9('0x5c'));if(_0x4601c4[_0xdad9('0x5d')]==='user'){var _0x1980f9=_0x397cab['get']({'plain':!![]});return db[_0xdad9('0x5e')][_0xdad9('0x52')]({'where':{'name':_0xdad9('0x34'),'userProfileId':_0x4601c4[_0xdad9('0x5f')]},'raw':!![]})[_0xdad9('0x1a')](function(_0x239769){if(_0x239769&&_0x239769[_0xdad9('0x60')]===0x0){return db[_0xdad9('0x61')][_0xdad9('0x53')]({'name':_0x1980f9[_0xdad9('0x36')],'resourceId':_0x1980f9['id'],'type':_0x239769[_0xdad9('0x36')],'sectionId':_0x239769['id']},{})[_0xdad9('0x1a')](function(){return _0x397cab;});}else{return _0x397cab;}})[_0xdad9('0x25')](function(_0x3dc7d1){logger[_0xdad9('0x20')](_0xdad9('0x62'),_0x3dc7d1);throw _0x3dc7d1;});}return _0x397cab;})['then'](respondWithResult(_0x2ccc44,0xc9))[_0xdad9('0x25')](handleError(_0x2ccc44,null));};exports[_0xdad9('0x31')]=function(_0x2ae8d0,_0x5a24d6,_0x5f2cd0){var _0x7c91f3;return db[_0xdad9('0x39')][_0xdad9('0x52')]({'where':{'id':_0x2ae8d0[_0xdad9('0x63')]['id']}})[_0xdad9('0x1a')](handleEntityNotFound(_0x5a24d6,null))['then'](saveUpdates(_0x2ae8d0[_0xdad9('0x54')],null))['then'](function(_0x14251c){if(_0x14251c){_0x7c91f3=_0x14251c;return db[_0xdad9('0x39')][_0xdad9('0x4d')]({'raw':!![]});}})[_0xdad9('0x1a')](function(_0x5e6cd6){var _0x4e5a60=fs[_0xdad9('0x55')](path[_0xdad9('0x56')](config[_0xdad9('0x57')],'server/files/templates/context.ejs'),_0xdad9('0x64'));var _0x41807e=ejs[_0xdad9('0x59')](_0x4e5a60,{'contexts':_0x5e6cd6||[]});fs[_0xdad9('0x65')]('/etc/asterisk/extensions_xcally_contexts.conf',_0x41807e);})[_0xdad9('0x1a')](function(){return respondWithRpcPromise(_0xdad9('0x5a'),'update',{'module':_0xdad9('0x66')});})[_0xdad9('0x1a')](function(){return _0x7c91f3;})[_0xdad9('0x1a')](respondWithResult(_0x5a24d6,null))[_0xdad9('0x25')](handleError(_0x5a24d6,null));};exports[_0xdad9('0x32')]=function(_0x412ea8,_0x332078,_0x3dc230){var _0xc772bc;return db[_0xdad9('0x39')][_0xdad9('0x52')]({'where':{'id':_0x412ea8['params']['id']}})['then'](handleEntityNotFound(_0x332078,null))['then'](removeEntity(_0x332078,null))[_0xdad9('0x1a')](function(){return db[_0xdad9('0x39')][_0xdad9('0x4d')]({'raw':!![]});})['then'](function(_0x39665b){var _0x1b1cda=fs[_0xdad9('0x55')](path[_0xdad9('0x56')](config[_0xdad9('0x57')],_0xdad9('0x58')),_0xdad9('0x64'));var _0x5b7ad2=ejs[_0xdad9('0x59')](_0x1b1cda,{'contexts':_0x39665b});fs[_0xdad9('0x65')](_0xdad9('0x67'),_0x5b7ad2);return respondWithRpcPromise(_0xdad9('0x5a'),_0xdad9('0x32'),{'module':_0xdad9('0x66')});})[_0xdad9('0x25')](handleError(_0x332078,null));};
\ No newline at end of file
+var _0x863d=['attributes','length','nolimit','order','sort','where','filters','pick','filter','map','key','VIRTUAL','field','options','includeAll','rows','show','params','intersection','merge','find','create','body','findAll','readFileSync','join','root','server/files/templates/context.ejs','render','writeFileSync','/etc/asterisk/extensions_xcally_contexts.conf','Reload','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','utf8','chan_sip.so','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','ejs','lodash','crypto','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','client','test','The\x20password\x20must\x20be\x20at\x20least\x208\x20characters\x20long\x20and\x20have\x201\x20lowercase\x20character,\x201\x20uppercase\x20character,\x201\x20number\x20and\x201\x20special\x20character\x20~!@#$%^&-_=+[{]}.','request\x20sent','debug','stringify','error','code','VoiceContext,\x20%s,\x20%s','message','result','catch','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','get','Contexts','UserProfileResource','destroy','name','VoiceContext','rawAttributes','model','keys','query','fields'];(function(_0x5c8827,_0x5bc5d7){var _0x50ffd5=function(_0x4121bc){while(--_0x4121bc){_0x5c8827['push'](_0x5c8827['shift']());}};_0x50ffd5(++_0x5bc5d7);}(_0x863d,0x157));var _0xd863=function(_0x51a7d9,_0x491943){_0x51a7d9=_0x51a7d9-0x0;var _0x348796=_0x863d[_0x51a7d9];return _0x348796;};'use strict';var pdf=require(_0xd863('0x0'));var emlformat=require(_0xd863('0x1'));var rimraf=require(_0xd863('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xd863('0x3'));var rp=require(_0xd863('0x4'));var moment=require(_0xd863('0x5'));var BPromise=require(_0xd863('0x6'));var Mustache=require(_0xd863('0x7'));var util=require(_0xd863('0x8'));var path=require('path');var sox=require(_0xd863('0x9'));var csv=require('to-csv');var ejs=require(_0xd863('0xa'));var fs=require('fs');var _=require(_0xd863('0xb'));var squel=require('squel');var crypto=require(_0xd863('0xc'));var jsforce=require('jsforce');var deskjs=require(_0xd863('0xd'));var toCsv=require(_0xd863('0xe'));var querystring=require(_0xd863('0xf'));var Papa=require(_0xd863('0x10'));var Redis=require(_0xd863('0x11'));var authService=require(_0xd863('0x12'));var qs=require(_0xd863('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xd863('0x14'));var utils=require(_0xd863('0x15'));var config=require(_0xd863('0x16'));var db=require(_0xd863('0x17'))['db'];var jayson=require('jayson/promise');var client=jayson[_0xd863('0x18')]['http']({'port':0x232a});function checkPasswordPattern(_0x17e346,_0x1d5174,_0x2a93e0){if(_0x2a93e0){var _0x531f1c=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x531f1c[_0xd863('0x19')](_0x1d5174)){return _0x17e346;}else{throw new Error(_0xd863('0x1a'));}}else{return _0x17e346;}}function respondWithRpcPromise(_0x5005ec,_0x281fc2,_0x5e1f20,_0x32b2d7){return new BPromise(function(_0x279bb6,_0x301d22){var _0x1fb57a=_0x32b2d7||client;return _0x1fb57a['request'](_0x5005ec,_0x5e1f20)['then'](function(_0x197b78){logger['info']('VoiceContext,\x20%s,\x20%s',_0x281fc2,_0xd863('0x1b'));logger[_0xd863('0x1c')]('VoiceContext,\x20%s,\x20%s,\x20%s',_0x281fc2,_0xd863('0x1b'),JSON[_0xd863('0x1d')](_0x197b78));if(_0x197b78['error']){if(_0x197b78[_0xd863('0x1e')][_0xd863('0x1f')]===0x1f4){logger[_0xd863('0x1e')](_0xd863('0x20'),_0x281fc2,_0x197b78[_0xd863('0x1e')][_0xd863('0x21')]);return _0x301d22(_0x197b78[_0xd863('0x1e')][_0xd863('0x21')]);}logger[_0xd863('0x1e')](_0xd863('0x20'),_0x281fc2,_0x197b78[_0xd863('0x1e')]['message']);return _0x279bb6(_0x197b78[_0xd863('0x1e')][_0xd863('0x21')]);}else{logger['info'](_0xd863('0x20'),_0x281fc2,_0xd863('0x1b'));_0x279bb6(_0x197b78[_0xd863('0x22')]['message']);}})[_0xd863('0x23')](function(_0x2b3a38){logger[_0xd863('0x1e')]('VoiceContext,\x20%s,\x20%s',_0x281fc2,_0x2b3a38);_0x301d22(_0x2b3a38);});});}function respondWithStatusCode(_0x58cafe,_0x4e8276){_0x4e8276=_0x4e8276||0xcc;return function(_0x187265){if(_0x187265){return _0x58cafe[_0xd863('0x24')](_0x4e8276);}return _0x58cafe[_0xd863('0x25')](_0x4e8276)[_0xd863('0x26')]();};}function respondWithResult(_0x1b3992,_0x49f792){_0x49f792=_0x49f792||0xc8;return function(_0x563001){if(_0x563001){return _0x1b3992['status'](_0x49f792)[_0xd863('0x27')](_0x563001);}};}function respondWithFilteredResult(_0xab0f71,_0x43804f){return function(_0x4442d5){if(_0x4442d5){var _0xa15dee=_0x4442d5[_0xd863('0x28')],_0x5d9905=_0x43804f[_0xd863('0x29')],_0x1ac552=_0x43804f[_0xd863('0x29')]+_0x43804f[_0xd863('0x2a')],_0x344f21;if(_0x1ac552>=_0xa15dee){_0x1ac552=_0xa15dee;_0x344f21=0xc8;}else{_0x344f21=0xce;}_0xab0f71[_0xd863('0x25')](_0x344f21);return _0xab0f71[_0xd863('0x2b')](_0xd863('0x2c'),_0x5d9905+'-'+_0x1ac552+'/'+_0xa15dee)[_0xd863('0x27')](_0x4442d5);}return null;};}function patchUpdates(_0x397756){return function(_0x34bb84){try{jsonpatch[_0xd863('0x2d')](_0x34bb84,_0x397756,!![]);}catch(_0xd0a491){return BPromise[_0xd863('0x2e')](_0xd0a491);}return _0x34bb84[_0xd863('0x2f')]();};}function saveUpdates(_0x394565,_0x295f5b){return function(_0x1b3de9){if(_0x1b3de9){return _0x1b3de9[_0xd863('0x30')](_0x394565)[_0xd863('0x31')](function(_0x9fc635){return _0x9fc635;});}return null;};}function removeEntity(_0x458bda,_0x52534f){return function(_0x87e778){if(_0x87e778){return _0x87e778['destroy']()['then'](function(){var _0x2d1c20=_0x87e778[_0xd863('0x32')]({'plain':!![]});var _0x1eda8f=_0xd863('0x33');return db[_0xd863('0x34')][_0xd863('0x35')]({'where':{'type':_0x1eda8f,'resourceId':_0x2d1c20['id']}})[_0xd863('0x31')](function(){return _0x87e778;});})['then'](function(){_0x458bda[_0xd863('0x25')](0xcc)[_0xd863('0x26')]();});}};}function handleEntityNotFound(_0x13ed7d,_0xcb806e){return function(_0x90736d){if(!_0x90736d){_0x13ed7d[_0xd863('0x24')](0x194);}return _0x90736d;};}function handleError(_0x4006ed,_0x34a725){_0x34a725=_0x34a725||0x1f4;return function(_0x5216ac){logger['error'](_0x5216ac['stack']);if(_0x5216ac[_0xd863('0x36')]){delete _0x5216ac[_0xd863('0x36')];}_0x4006ed[_0xd863('0x25')](_0x34a725)['send'](_0x5216ac);};}exports['index']=function(_0x1de3f3,_0x49fab5){var _0x558b71={},_0x10a3e2={},_0x3edc77={'count':0x0,'rows':[]};var _0x4177ca=db[_0xd863('0x37')][_0xd863('0x38')];_0x10a3e2[_0xd863('0x39')]=_[_0xd863('0x3a')](_0x4177ca);_0x10a3e2[_0xd863('0x3b')]=_[_0xd863('0x3a')](_0x1de3f3[_0xd863('0x3b')]);_0x10a3e2['filters']=_['intersection'](_0x10a3e2['model'],_0x10a3e2[_0xd863('0x3b')]);_0x558b71['attributes']=_['intersection'](_0x10a3e2['model'],qs[_0xd863('0x3c')](_0x1de3f3['query'][_0xd863('0x3c')]));_0x558b71[_0xd863('0x3d')]=_0x558b71['attributes'][_0xd863('0x3e')]?_0x558b71[_0xd863('0x3d')]:_0x10a3e2['model'];if(!_0x1de3f3['query']['hasOwnProperty'](_0xd863('0x3f'))){_0x558b71[_0xd863('0x2a')]=qs['limit'](_0x1de3f3['query']['limit']);_0x558b71[_0xd863('0x29')]=qs[_0xd863('0x29')](_0x1de3f3[_0xd863('0x3b')][_0xd863('0x29')]);}_0x558b71[_0xd863('0x40')]=qs[_0xd863('0x41')](_0x1de3f3[_0xd863('0x3b')]['sort']);_0x558b71[_0xd863('0x42')]=qs[_0xd863('0x43')](_[_0xd863('0x44')](_0x1de3f3[_0xd863('0x3b')],_0x10a3e2[_0xd863('0x43')]));if(_0x1de3f3['query'][_0xd863('0x45')]){_0x558b71[_0xd863('0x42')]=_['merge'](_0x558b71[_0xd863('0x42')],{'$or':_[_0xd863('0x46')](_0x4177ca,function(_0x28bfb4){if(_0x28bfb4['type'][_0xd863('0x47')]!==_0xd863('0x48')){var _0x4914b2={};_0x4914b2[_0x28bfb4[_0xd863('0x49')]]={'$like':'%'+_0x1de3f3[_0xd863('0x3b')][_0xd863('0x45')]+'%'};return _0x4914b2;}})});}_0x558b71=_['merge']({},_0x558b71,_0x1de3f3[_0xd863('0x4a')]);var _0x1c25ef={'where':_0x558b71[_0xd863('0x42')]};return db['VoiceContext']['count'](_0x1c25ef)['then'](function(_0x1fc619){_0x3edc77[_0xd863('0x28')]=_0x1fc619;if(_0x1de3f3['query'][_0xd863('0x4b')]){_0x558b71['include']=[{'all':!![]}];}return db[_0xd863('0x37')]['findAll'](_0x558b71);})[_0xd863('0x31')](function(_0x3b27fe){_0x3edc77[_0xd863('0x4c')]=_0x3b27fe;return _0x3edc77;})[_0xd863('0x31')](respondWithFilteredResult(_0x49fab5,_0x558b71))['catch'](handleError(_0x49fab5,null));};exports[_0xd863('0x4d')]=function(_0x40a7ad,_0x323e22){var _0x1e64c2={'raw':![],'where':{'id':_0x40a7ad[_0xd863('0x4e')]['id']}},_0x5231cb={};_0x5231cb['model']=_[_0xd863('0x3a')](db[_0xd863('0x37')][_0xd863('0x38')]);_0x5231cb['query']=_['keys'](_0x40a7ad[_0xd863('0x3b')]);_0x5231cb[_0xd863('0x43')]=_['intersection'](_0x5231cb[_0xd863('0x39')],_0x5231cb[_0xd863('0x3b')]);_0x1e64c2[_0xd863('0x3d')]=_[_0xd863('0x4f')](_0x5231cb[_0xd863('0x39')],qs[_0xd863('0x3c')](_0x40a7ad[_0xd863('0x3b')][_0xd863('0x3c')]));_0x1e64c2[_0xd863('0x3d')]=_0x1e64c2[_0xd863('0x3d')][_0xd863('0x3e')]?_0x1e64c2[_0xd863('0x3d')]:_0x5231cb[_0xd863('0x39')];if(_0x40a7ad[_0xd863('0x3b')][_0xd863('0x4b')]){_0x1e64c2['include']=[{'all':!![]}];}_0x1e64c2=_[_0xd863('0x50')]({},_0x1e64c2,_0x40a7ad['options']);return db[_0xd863('0x37')][_0xd863('0x51')](_0x1e64c2)[_0xd863('0x31')](handleEntityNotFound(_0x323e22,null))[_0xd863('0x31')](respondWithResult(_0x323e22,null))[_0xd863('0x23')](handleError(_0x323e22,null));};exports['create']=function(_0x314596,_0x1a1857,_0x5f529c){var _0x1ba2e9;return db[_0xd863('0x37')][_0xd863('0x52')](_0x314596[_0xd863('0x53')],{'raw':!![]})[_0xd863('0x31')](function(_0x4e8432){_0x1ba2e9=_0x4e8432;return db['VoiceContext'][_0xd863('0x54')]({'raw':!![]});})[_0xd863('0x31')](function(_0x1def89){var _0x2aca97=fs[_0xd863('0x55')](path[_0xd863('0x56')](config[_0xd863('0x57')],_0xd863('0x58')),'utf8');var _0x49e54a=ejs[_0xd863('0x59')](_0x2aca97,{'contexts':_0x1def89||[]});fs[_0xd863('0x5a')](_0xd863('0x5b'),_0x49e54a);})[_0xd863('0x31')](function(){return respondWithRpcPromise(_0xd863('0x5c'),'create',{'module':'chan_sip.so'});})[_0xd863('0x31')](function(){var _0x6732d9=_0x314596[_0xd863('0x5d')]['get']({'plain':!![]});if(!_0x6732d9)throw new Error(_0xd863('0x5e'));if(_0x6732d9['role']==='user'){var _0x125b5a=_0x1ba2e9['get']({'plain':!![]});return db[_0xd863('0x5f')][_0xd863('0x51')]({'where':{'name':_0xd863('0x33'),'userProfileId':_0x6732d9[_0xd863('0x60')]},'raw':!![]})[_0xd863('0x31')](function(_0x2ef71f){if(_0x2ef71f&&_0x2ef71f[_0xd863('0x61')]===0x0){return db['UserProfileResource'][_0xd863('0x52')]({'name':_0x125b5a['name'],'resourceId':_0x125b5a['id'],'type':_0x2ef71f[_0xd863('0x36')],'sectionId':_0x2ef71f['id']},{})['then'](function(){return _0x1ba2e9;});}else{return _0x1ba2e9;}})[_0xd863('0x23')](function(_0x234e1d){logger[_0xd863('0x1e')](_0xd863('0x62'),_0x234e1d);throw _0x234e1d;});}return _0x1ba2e9;})[_0xd863('0x31')](respondWithResult(_0x1a1857,0xc9))[_0xd863('0x23')](handleError(_0x1a1857,null));};exports['update']=function(_0x467c96,_0x4f3ddf,_0xf25558){var _0x2fd8ac;return db[_0xd863('0x37')][_0xd863('0x51')]({'where':{'id':_0x467c96[_0xd863('0x4e')]['id']}})[_0xd863('0x31')](handleEntityNotFound(_0x4f3ddf,null))[_0xd863('0x31')](saveUpdates(_0x467c96[_0xd863('0x53')],null))[_0xd863('0x31')](function(_0x27dc3a){if(_0x27dc3a){_0x2fd8ac=_0x27dc3a;return db[_0xd863('0x37')]['findAll']({'raw':!![]});}})[_0xd863('0x31')](function(_0x72b8d1){var _0x153eec=fs[_0xd863('0x55')](path[_0xd863('0x56')](config[_0xd863('0x57')],_0xd863('0x58')),'utf8');var _0x2e69c1=ejs[_0xd863('0x59')](_0x153eec,{'contexts':_0x72b8d1||[]});fs[_0xd863('0x5a')](_0xd863('0x5b'),_0x2e69c1);})[_0xd863('0x31')](function(){return respondWithRpcPromise('Reload',_0xd863('0x30'),{'module':'chan_sip.so'});})[_0xd863('0x31')](function(){return _0x2fd8ac;})[_0xd863('0x31')](respondWithResult(_0x4f3ddf,null))[_0xd863('0x23')](handleError(_0x4f3ddf,null));};exports['destroy']=function(_0x37ab0e,_0x586bd8,_0x466a2b){var _0x5048a0;return db[_0xd863('0x37')]['find']({'where':{'id':_0x37ab0e[_0xd863('0x4e')]['id']}})['then'](handleEntityNotFound(_0x586bd8,null))[_0xd863('0x31')](removeEntity(_0x586bd8,null))[_0xd863('0x31')](function(){return db[_0xd863('0x37')]['findAll']({'raw':!![]});})[_0xd863('0x31')](function(_0x42f97f){var _0x43c27d=fs[_0xd863('0x55')](path['join'](config[_0xd863('0x57')],'server/files/templates/context.ejs'),_0xd863('0x63'));var _0x4679f4=ejs[_0xd863('0x59')](_0x43c27d,{'contexts':_0x42f97f});fs[_0xd863('0x5a')]('/etc/asterisk/extensions_xcally_contexts.conf',_0x4679f4);return respondWithRpcPromise(_0xd863('0x5c'),_0xd863('0x35'),{'module':_0xd863('0x64')});})[_0xd863('0x23')](handleError(_0x586bd8,null));};
\ No newline at end of file
index b119826..ff5bcd8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe92e=['moment','request-promise','path','rimraf','../../config/environment','define','lodash','util','api'];(function(_0x5e6d65,_0x5db89c){var _0x5e1f75=function(_0x3729a1){while(--_0x3729a1){_0x5e6d65['push'](_0x5e6d65['shift']());}};_0x5e1f75(++_0x5db89c);}(_0xe92e,0x69));var _0xee92=function(_0x33cde8,_0x2a3f44){_0x33cde8=_0x33cde8-0x0;var _0x15cb1b=_0xe92e[_0x33cde8];return _0x15cb1b;};'use strict';var _=require(_0xee92('0x0'));var util=require(_0xee92('0x1'));var logger=require('../../config/logger')(_0xee92('0x2'));var moment=require(_0xee92('0x3'));var BPromise=require('bluebird');var rp=require(_0xee92('0x4'));var fs=require('fs');var path=require(_0xee92('0x5'));var rimraf=require(_0xee92('0x6'));var config=require(_0xee92('0x7'));var attributes=require('./voiceContext.attributes');module['exports']=function(_0x58e441,_0x3ae273){return _0x58e441[_0xee92('0x8')]('VoiceContext',attributes,{'tableName':'voice_contexts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xd6f6=['lodash','../../config/logger','api','path','../../config/environment','./voiceContext.attributes','exports','define','voice_contexts'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xd6f6,0x14d));var _0x6d6f=function(_0x186316,_0x49762b){_0x186316=_0x186316-0x0;var _0xedc3d4=_0xd6f6[_0x186316];return _0xedc3d4;};'use strict';var _=require(_0x6d6f('0x0'));var util=require('util');var logger=require(_0x6d6f('0x1'))(_0x6d6f('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x6d6f('0x3'));var rimraf=require('rimraf');var config=require(_0x6d6f('0x4'));var attributes=require(_0x6d6f('0x5'));module[_0x6d6f('0x6')]=function(_0x180e5c,_0x1614c4){return _0x180e5c[_0x6d6f('0x7')]('VoiceContext',attributes,{'tableName':_0x6d6f('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 0fbab8d..106d7b3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6af9=['request\x20sent','stringify','error','code','message','info','result','catch','lodash','util','bluebird','randomstring','ioredis','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','VoiceContext,\x20%s,\x20%s','debug','VoiceContext,\x20%s,\x20%s,\x20%s'];(function(_0xe885be,_0x559186){var _0x20703a=function(_0xd26139){while(--_0xd26139){_0xe885be['push'](_0xe885be['shift']());}};_0x20703a(++_0x559186);}(_0x6af9,0x92));var _0x96af=function(_0x51da75,_0x17ddec){_0x51da75=_0x51da75-0x0;var _0x40b076=_0x6af9[_0x51da75];return _0x40b076;};'use strict';var _=require(_0x96af('0x0'));var util=require(_0x96af('0x1'));var moment=require('moment');var BPromise=require(_0x96af('0x2'));var rs=require(_0x96af('0x3'));var fs=require('fs');var Redis=require(_0x96af('0x4'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x96af('0x5'))(_0x96af('0x6'));var config=require(_0x96af('0x7'));var jayson=require(_0x96af('0x8'));var client=jayson[_0x96af('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x297f9a,_0xeccc9,_0x3ae2e8){return new BPromise(function(_0x396f52,_0x2ea2c7){return client[_0x96af('0xa')](_0x297f9a,_0x3ae2e8)[_0x96af('0xb')](function(_0x2c190a){logger['info'](_0x96af('0xc'),_0xeccc9,'request\x20sent');logger[_0x96af('0xd')](_0x96af('0xe'),_0xeccc9,_0x96af('0xf'),JSON[_0x96af('0x10')](_0x2c190a));if(_0x2c190a[_0x96af('0x11')]){if(_0x2c190a[_0x96af('0x11')][_0x96af('0x12')]===0x1f4){logger[_0x96af('0x11')]('VoiceContext,\x20%s,\x20%s',_0xeccc9,_0x2c190a[_0x96af('0x11')][_0x96af('0x13')]);return _0x2ea2c7(_0x2c190a[_0x96af('0x11')][_0x96af('0x13')]);}logger['error'](_0x96af('0xc'),_0xeccc9,_0x2c190a[_0x96af('0x11')][_0x96af('0x13')]);return _0x396f52(_0x2c190a[_0x96af('0x11')][_0x96af('0x13')]);}else{logger[_0x96af('0x14')](_0x96af('0xc'),_0xeccc9,'request\x20sent');_0x396f52(_0x2c190a[_0x96af('0x15')][_0x96af('0x13')]);}})[_0x96af('0x16')](function(_0x25e401){logger[_0x96af('0x11')](_0x96af('0xc'),_0xeccc9,_0x25e401);_0x2ea2c7(_0x25e401);});});}
\ No newline at end of file
+var _0x65ec=['util','moment','randomstring','ioredis','../../config/logger','jayson/promise','client','http','request','info','request\x20sent','debug','stringify','error','VoiceContext,\x20%s,\x20%s','message','result','catch','lodash'];(function(_0x3f477c,_0x52b7ff){var _0x4c36b3=function(_0x3b47bb){while(--_0x3b47bb){_0x3f477c['push'](_0x3f477c['shift']());}};_0x4c36b3(++_0x52b7ff);}(_0x65ec,0x18e));var _0xc65e=function(_0x14077e,_0x48ae2f){_0x14077e=_0x14077e-0x0;var _0x212ebe=_0x65ec[_0x14077e];return _0x212ebe;};'use strict';var _=require(_0xc65e('0x0'));var util=require(_0xc65e('0x1'));var moment=require(_0xc65e('0x2'));var BPromise=require('bluebird');var rs=require(_0xc65e('0x3'));var fs=require('fs');var Redis=require(_0xc65e('0x4'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xc65e('0x5'))('rpc');var config=require('../../config/environment');var jayson=require(_0xc65e('0x6'));var client=jayson[_0xc65e('0x7')][_0xc65e('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x4482bf,_0x440d73,_0x3504a0){return new BPromise(function(_0x54ef1b,_0x5026f8){return client[_0xc65e('0x9')](_0x4482bf,_0x3504a0)['then'](function(_0x13faa7){logger[_0xc65e('0xa')]('VoiceContext,\x20%s,\x20%s',_0x440d73,_0xc65e('0xb'));logger[_0xc65e('0xc')]('VoiceContext,\x20%s,\x20%s,\x20%s',_0x440d73,_0xc65e('0xb'),JSON[_0xc65e('0xd')](_0x13faa7));if(_0x13faa7[_0xc65e('0xe')]){if(_0x13faa7['error']['code']===0x1f4){logger[_0xc65e('0xe')](_0xc65e('0xf'),_0x440d73,_0x13faa7[_0xc65e('0xe')]['message']);return _0x5026f8(_0x13faa7[_0xc65e('0xe')][_0xc65e('0x10')]);}logger[_0xc65e('0xe')](_0xc65e('0xf'),_0x440d73,_0x13faa7[_0xc65e('0xe')][_0xc65e('0x10')]);return _0x54ef1b(_0x13faa7[_0xc65e('0xe')][_0xc65e('0x10')]);}else{logger['info'](_0xc65e('0xf'),_0x440d73,_0xc65e('0xb'));_0x54ef1b(_0x13faa7[_0xc65e('0x11')][_0xc65e('0x10')]);}})[_0xc65e('0x12')](function(_0x2b0b3c){logger['error'](_0xc65e('0xf'),_0x440d73,_0x2b0b3c);_0x5026f8(_0x2b0b3c);});});}
\ No newline at end of file
index 27a65b5..48d486b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa7d=['show','post','create','put','update','delete','destroy','exports','multer','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceDialReport.controller','get','isAuthenticated','index','/:id'];(function(_0x11934c,_0x56d052){var _0x2013d3=function(_0x1cc912){while(--_0x1cc912){_0x11934c['push'](_0x11934c['shift']());}};_0x2013d3(++_0x56d052);}(_0xaa7d,0x1d4));var _0xdaa7=function(_0x28a5ad,_0x520afa){_0x28a5ad=_0x28a5ad-0x0;var _0x176b8a=_0xaa7d[_0x28a5ad];return _0x176b8a;};'use strict';var multer=require(_0xdaa7('0x0'));var util=require('util');var path=require(_0xdaa7('0x1'));var timeout=require(_0xdaa7('0x2'));var express=require('express');var router=express[_0xdaa7('0x3')]();var auth=require(_0xdaa7('0x4'));var interaction=require(_0xdaa7('0x5'));var config=require(_0xdaa7('0x6'));var controller=require(_0xdaa7('0x7'));router[_0xdaa7('0x8')]('/',auth[_0xdaa7('0x9')](),controller[_0xdaa7('0xa')]);router[_0xdaa7('0x8')]('/describe',auth[_0xdaa7('0x9')](),controller['describe']);router[_0xdaa7('0x8')](_0xdaa7('0xb'),auth['isAuthenticated'](),controller[_0xdaa7('0xc')]);router[_0xdaa7('0xd')]('/',auth[_0xdaa7('0x9')](),controller[_0xdaa7('0xe')]);router[_0xdaa7('0xf')](_0xdaa7('0xb'),auth['isAuthenticated'](),controller[_0xdaa7('0x10')]);router[_0xdaa7('0x11')](_0xdaa7('0xb'),auth['isAuthenticated'](),controller[_0xdaa7('0x12')]);module[_0xdaa7('0x13')]=router;
\ No newline at end of file
+var _0xd953=['delete','destroy','exports','util','path','express','Router','../../components/interaction/service','../../config/environment','./voiceDialReport.controller','get','isAuthenticated','index','/describe','describe','post','put','/:id','update'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xd953,0xfa));var _0x3d95=function(_0x177b98,_0x1ef3ae){_0x177b98=_0x177b98-0x0;var _0x2ff540=_0xd953[_0x177b98];return _0x2ff540;};'use strict';var multer=require('multer');var util=require(_0x3d95('0x0'));var path=require(_0x3d95('0x1'));var timeout=require('connect-timeout');var express=require(_0x3d95('0x2'));var router=express[_0x3d95('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x3d95('0x4'));var config=require(_0x3d95('0x5'));var controller=require(_0x3d95('0x6'));router[_0x3d95('0x7')]('/',auth[_0x3d95('0x8')](),controller[_0x3d95('0x9')]);router['get'](_0x3d95('0xa'),auth[_0x3d95('0x8')](),controller[_0x3d95('0xb')]);router[_0x3d95('0x7')]('/:id',auth[_0x3d95('0x8')](),controller['show']);router[_0x3d95('0xc')]('/',auth['isAuthenticated'](),controller['create']);router[_0x3d95('0xd')](_0x3d95('0xe'),auth[_0x3d95('0x8')](),controller[_0x3d95('0xf')]);router[_0x3d95('0x10')]('/:id',auth[_0x3d95('0x8')](),controller[_0x3d95('0x11')]);module[_0x3d95('0x12')]=router;
\ No newline at end of file
index 51551cc..f5220aa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6fcf=['STRING','INTEGER','DATE','called,connect,complete','sequelize','exports'];(function(_0x54fca4,_0xf52330){var _0x56f39=function(_0x5b0531){while(--_0x5b0531){_0x54fca4['push'](_0x54fca4['shift']());}};_0x56f39(++_0xf52330);}(_0x6fcf,0x1a2));var _0xf6fc=function(_0x1118eb,_0x476f0a){_0x1118eb=_0x1118eb-0x0;var _0x2dbcd0=_0x6fcf[_0x1118eb];return _0x2dbcd0;};'use strict';var Sequelize=require(_0xf6fc('0x0'));module[_0xf6fc('0x1')]={'privilege':{'type':Sequelize['STRING']},'channel':{'type':Sequelize[_0xf6fc('0x2')]},'channelstate':{'type':Sequelize[_0xf6fc('0x3')]},'channelstatedesc':{'type':Sequelize[_0xf6fc('0x2')]},'calleridnum':{'type':Sequelize[_0xf6fc('0x2')]},'calleridname':{'type':Sequelize[_0xf6fc('0x2')]},'connectedlinenum':{'type':Sequelize[_0xf6fc('0x2')]},'connectedlinename':{'type':Sequelize['STRING']},'language':{'type':Sequelize[_0xf6fc('0x2')]},'accountcode':{'type':Sequelize[_0xf6fc('0x2')]},'context':{'type':Sequelize[_0xf6fc('0x2')]},'exten':{'type':Sequelize[_0xf6fc('0x2')]},'priority':{'type':Sequelize[_0xf6fc('0x3')]},'uniqueid':{'type':Sequelize[_0xf6fc('0x2')]},'linkedid':{'type':Sequelize[_0xf6fc('0x2')]},'destchannel':{'type':Sequelize[_0xf6fc('0x2')]},'destchannelstate':{'type':Sequelize[_0xf6fc('0x3')]},'destchannelstatedesc':{'type':Sequelize[_0xf6fc('0x2')]},'destcalleridnum':{'type':Sequelize[_0xf6fc('0x2')]},'destcalleridname':{'type':Sequelize[_0xf6fc('0x2')]},'destconnectedlinenum':{'type':Sequelize[_0xf6fc('0x2')]},'destconnectedlinename':{'type':Sequelize[_0xf6fc('0x2')]},'destlanguage':{'type':Sequelize['STRING']},'destaccountcode':{'type':Sequelize[_0xf6fc('0x2')]},'destcontext':{'type':Sequelize['STRING']},'destexten':{'type':Sequelize[_0xf6fc('0x2')]},'destpriority':{'type':Sequelize[_0xf6fc('0x3')]},'destuniqueid':{'type':Sequelize['STRING']},'destlinkedid':{'type':Sequelize[_0xf6fc('0x2')]},'dialstring':{'type':Sequelize[_0xf6fc('0x2')]},'dialstatus':{'type':Sequelize[_0xf6fc('0x2')]},'starttime':{'type':Sequelize['DATE']},'answertime':{'type':Sequelize['DATE']},'endtime':{'type':Sequelize[_0xf6fc('0x4')]},'lastevent':{'type':Sequelize[_0xf6fc('0x2')],'comment':_0xf6fc('0x5')},'routeId':{'type':Sequelize['INTEGER']},'duration':{'type':Sequelize[_0xf6fc('0x3')]},'holdtime':{'type':Sequelize[_0xf6fc('0x3')]},'billableseconds':{'type':Sequelize[_0xf6fc('0x3')]}};
\ No newline at end of file
+var _0x54b2=['sequelize','STRING','INTEGER','DATE','called,connect,complete'];(function(_0xed4881,_0x45771c){var _0x7fcbd5=function(_0x36b960){while(--_0x36b960){_0xed4881['push'](_0xed4881['shift']());}};_0x7fcbd5(++_0x45771c);}(_0x54b2,0x6e));var _0x254b=function(_0x295369,_0x350ebf){_0x295369=_0x295369-0x0;var _0x3c86d9=_0x54b2[_0x295369];return _0x3c86d9;};'use strict';var Sequelize=require(_0x254b('0x0'));module['exports']={'privilege':{'type':Sequelize[_0x254b('0x1')]},'channel':{'type':Sequelize[_0x254b('0x1')]},'channelstate':{'type':Sequelize[_0x254b('0x2')]},'channelstatedesc':{'type':Sequelize[_0x254b('0x1')]},'calleridnum':{'type':Sequelize[_0x254b('0x1')]},'calleridname':{'type':Sequelize['STRING']},'connectedlinenum':{'type':Sequelize[_0x254b('0x1')]},'connectedlinename':{'type':Sequelize[_0x254b('0x1')]},'language':{'type':Sequelize[_0x254b('0x1')]},'accountcode':{'type':Sequelize[_0x254b('0x1')]},'context':{'type':Sequelize[_0x254b('0x1')]},'exten':{'type':Sequelize['STRING']},'priority':{'type':Sequelize[_0x254b('0x2')]},'uniqueid':{'type':Sequelize[_0x254b('0x1')]},'linkedid':{'type':Sequelize[_0x254b('0x1')]},'destchannel':{'type':Sequelize[_0x254b('0x1')]},'destchannelstate':{'type':Sequelize[_0x254b('0x2')]},'destchannelstatedesc':{'type':Sequelize['STRING']},'destcalleridnum':{'type':Sequelize['STRING']},'destcalleridname':{'type':Sequelize[_0x254b('0x1')]},'destconnectedlinenum':{'type':Sequelize[_0x254b('0x1')]},'destconnectedlinename':{'type':Sequelize[_0x254b('0x1')]},'destlanguage':{'type':Sequelize[_0x254b('0x1')]},'destaccountcode':{'type':Sequelize[_0x254b('0x1')]},'destcontext':{'type':Sequelize[_0x254b('0x1')]},'destexten':{'type':Sequelize['STRING']},'destpriority':{'type':Sequelize[_0x254b('0x2')]},'destuniqueid':{'type':Sequelize['STRING']},'destlinkedid':{'type':Sequelize[_0x254b('0x1')]},'dialstring':{'type':Sequelize[_0x254b('0x1')]},'dialstatus':{'type':Sequelize[_0x254b('0x1')]},'starttime':{'type':Sequelize['DATE']},'answertime':{'type':Sequelize[_0x254b('0x3')]},'endtime':{'type':Sequelize[_0x254b('0x3')]},'lastevent':{'type':Sequelize['STRING'],'comment':_0x254b('0x4')},'routeId':{'type':Sequelize['INTEGER']},'duration':{'type':Sequelize['INTEGER']},'holdtime':{'type':Sequelize[_0x254b('0x2')]},'billableseconds':{'type':Sequelize[_0x254b('0x2')]}};
\ No newline at end of file
index 2dc4161..824b158 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd58c=['../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','offset','set','apply','reject','update','then','destroy','error','name','index','VoiceDialReport','model','query','intersection','attributes','length','limit','order','sort','where','filters','merge','map','type','key','VIRTUAL','field','filter','options','include','findAll','rows','catch','params','keys','fields','find','create','body','describe','html-pdf','eml-format','rimraf','fast-json-patch','moment','mustache','util','path','sox','to-csv','squel','crypto','jsforce','desk.js','papaparse','ioredis'];(function(_0x2ac512,_0x18d0fc){var _0x41a20e=function(_0x4c1ac2){while(--_0x4c1ac2){_0x2ac512['push'](_0x2ac512['shift']());}};_0x41a20e(++_0x18d0fc);}(_0xd58c,0xb6));var _0xcd58=function(_0x448d58,_0x589775){_0x448d58=_0x448d58-0x0;var _0x1d7af4=_0xd58c[_0x448d58];return _0x1d7af4;};'use strict';var pdf=require(_0xcd58('0x0'));var emlformat=require(_0xcd58('0x1'));var rimraf=require(_0xcd58('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xcd58('0x3'));var rp=require('request-promise');var moment=require(_0xcd58('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xcd58('0x5'));var util=require(_0xcd58('0x6'));var path=require(_0xcd58('0x7'));var sox=require(_0xcd58('0x8'));var csv=require(_0xcd58('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xcd58('0xa'));var crypto=require(_0xcd58('0xb'));var jsforce=require(_0xcd58('0xc'));var deskjs=require(_0xcd58('0xd'));var toCsv=require(_0xcd58('0x9'));var querystring=require('querystring');var Papa=require(_0xcd58('0xe'));var Redis=require(_0xcd58('0xf'));var authService=require('../../components/auth/service');var qs=require(_0xcd58('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xcd58('0x11'))(_0xcd58('0x12'));var utils=require(_0xcd58('0x13'));var config=require('../../config/environment');var db=require(_0xcd58('0x14'))['db'];function respondWithStatusCode(_0x4ac3e3,_0x2a17d4){_0x2a17d4=_0x2a17d4||0xcc;return function(_0x51880c){if(_0x51880c){return _0x4ac3e3[_0xcd58('0x15')](_0x2a17d4);}return _0x4ac3e3[_0xcd58('0x16')](_0x2a17d4)[_0xcd58('0x17')]();};}function respondWithResult(_0x17b93f,_0x37561b){_0x37561b=_0x37561b||0xc8;return function(_0x202412){if(_0x202412){return _0x17b93f[_0xcd58('0x16')](_0x37561b)[_0xcd58('0x18')](_0x202412);}};}function respondWithFilteredResult(_0x4d9a56,_0x5d0aa3){return function(_0x3ce190){if(_0x3ce190){var _0xa225e3=_0x3ce190[_0xcd58('0x19')],_0x3d5e86=_0x5d0aa3[_0xcd58('0x1a')],_0x51f5b6=_0x5d0aa3[_0xcd58('0x1a')]+_0x5d0aa3['limit'],_0x515fc3;if(_0x51f5b6>=_0xa225e3){_0x51f5b6=_0xa225e3;_0x515fc3=0xc8;}else{_0x515fc3=0xce;}_0x4d9a56['status'](_0x515fc3);return _0x4d9a56[_0xcd58('0x1b')]('Content-Range',_0x3d5e86+'-'+_0x51f5b6+'/'+_0xa225e3)[_0xcd58('0x18')](_0x3ce190);}return null;};}function patchUpdates(_0x39dc9c){return function(_0x2824a6){try{jsonpatch[_0xcd58('0x1c')](_0x2824a6,_0x39dc9c,!![]);}catch(_0x491198){return BPromise[_0xcd58('0x1d')](_0x491198);}return _0x2824a6['save']();};}function saveUpdates(_0x4b106f,_0x5c0c54){return function(_0x503c5){if(_0x503c5){return _0x503c5[_0xcd58('0x1e')](_0x4b106f)[_0xcd58('0x1f')](function(_0x5229cb){return _0x5229cb;});}return null;};}function removeEntity(_0xb7325f,_0x2a8681){return function(_0x5c241c){if(_0x5c241c){return _0x5c241c[_0xcd58('0x20')]()[_0xcd58('0x1f')](function(){_0xb7325f[_0xcd58('0x16')](0xcc)['end']();});}};}function handleEntityNotFound(_0x566d56,_0x2592a1){return function(_0x3eae55){if(!_0x3eae55){_0x566d56[_0xcd58('0x15')](0x194);}return _0x3eae55;};}function handleError(_0x33feb3,_0x2e1322){_0x2e1322=_0x2e1322||0x1f4;return function(_0x38a559){logger[_0xcd58('0x21')](_0x38a559['stack']);if(_0x38a559['name']){delete _0x38a559[_0xcd58('0x22')];}_0x33feb3[_0xcd58('0x16')](_0x2e1322)['send'](_0x38a559);};}exports[_0xcd58('0x23')]=function(_0x580c2b,_0x26bb62){var _0x2ec6b1={},_0x75bb8e={},_0x1784ff={'count':0x0,'rows':[]};var _0x2b64b8=db[_0xcd58('0x24')]['rawAttributes'];_0x75bb8e[_0xcd58('0x25')]=_['keys'](_0x2b64b8);_0x75bb8e[_0xcd58('0x26')]=_['keys'](_0x580c2b[_0xcd58('0x26')]);_0x75bb8e['filters']=_[_0xcd58('0x27')](_0x75bb8e['model'],_0x75bb8e[_0xcd58('0x26')]);_0x2ec6b1[_0xcd58('0x28')]=_[_0xcd58('0x27')](_0x75bb8e[_0xcd58('0x25')],qs['fields'](_0x580c2b[_0xcd58('0x26')]['fields']));_0x2ec6b1[_0xcd58('0x28')]=_0x2ec6b1[_0xcd58('0x28')][_0xcd58('0x29')]?_0x2ec6b1[_0xcd58('0x28')]:_0x75bb8e[_0xcd58('0x25')];if(!_0x580c2b[_0xcd58('0x26')]['hasOwnProperty']('nolimit')){_0x2ec6b1[_0xcd58('0x2a')]=qs['limit'](_0x580c2b['query'][_0xcd58('0x2a')]);_0x2ec6b1[_0xcd58('0x1a')]=qs[_0xcd58('0x1a')](_0x580c2b[_0xcd58('0x26')][_0xcd58('0x1a')]);}_0x2ec6b1[_0xcd58('0x2b')]=qs['sort'](_0x580c2b['query'][_0xcd58('0x2c')]);_0x2ec6b1[_0xcd58('0x2d')]=qs[_0xcd58('0x2e')](_['pick'](_0x580c2b[_0xcd58('0x26')],_0x75bb8e[_0xcd58('0x2e')]));if(_0x580c2b[_0xcd58('0x26')]['filter']){_0x2ec6b1['where']=_[_0xcd58('0x2f')](_0x2ec6b1[_0xcd58('0x2d')],{'$or':_[_0xcd58('0x30')](_0x2b64b8,function(_0x354924){if(_0x354924[_0xcd58('0x31')][_0xcd58('0x32')]!==_0xcd58('0x33')){var _0x24d522={};_0x24d522[_0x354924[_0xcd58('0x34')]]={'$like':'%'+_0x580c2b[_0xcd58('0x26')][_0xcd58('0x35')]+'%'};return _0x24d522;}})});}_0x2ec6b1=_[_0xcd58('0x2f')]({},_0x2ec6b1,_0x580c2b[_0xcd58('0x36')]);var _0x4407f7={'where':_0x2ec6b1[_0xcd58('0x2d')]};return db[_0xcd58('0x24')][_0xcd58('0x19')](_0x4407f7)[_0xcd58('0x1f')](function(_0x9d4a09){_0x1784ff[_0xcd58('0x19')]=_0x9d4a09;if(_0x580c2b[_0xcd58('0x26')]['includeAll']){_0x2ec6b1[_0xcd58('0x37')]=[{'all':!![]}];}return db[_0xcd58('0x24')][_0xcd58('0x38')](_0x2ec6b1);})['then'](function(_0x2e637c){_0x1784ff[_0xcd58('0x39')]=_0x2e637c;return _0x1784ff;})['then'](respondWithFilteredResult(_0x26bb62,_0x2ec6b1))[_0xcd58('0x3a')](handleError(_0x26bb62,null));};exports['show']=function(_0x54b587,_0x46518b){var _0x4ca4b6={'raw':!![],'where':{'id':_0x54b587[_0xcd58('0x3b')]['id']}},_0x5e5da2={};_0x5e5da2[_0xcd58('0x25')]=_[_0xcd58('0x3c')](db['VoiceDialReport']['rawAttributes']);_0x5e5da2[_0xcd58('0x26')]=_['keys'](_0x54b587[_0xcd58('0x26')]);_0x5e5da2[_0xcd58('0x2e')]=_['intersection'](_0x5e5da2['model'],_0x5e5da2[_0xcd58('0x26')]);_0x4ca4b6[_0xcd58('0x28')]=_[_0xcd58('0x27')](_0x5e5da2[_0xcd58('0x25')],qs[_0xcd58('0x3d')](_0x54b587[_0xcd58('0x26')][_0xcd58('0x3d')]));_0x4ca4b6[_0xcd58('0x28')]=_0x4ca4b6[_0xcd58('0x28')][_0xcd58('0x29')]?_0x4ca4b6[_0xcd58('0x28')]:_0x5e5da2[_0xcd58('0x25')];if(_0x54b587[_0xcd58('0x26')]['includeAll']){_0x4ca4b6[_0xcd58('0x37')]=[{'all':!![]}];}_0x4ca4b6=_[_0xcd58('0x2f')]({},_0x4ca4b6,_0x54b587[_0xcd58('0x36')]);return db['VoiceDialReport'][_0xcd58('0x3e')](_0x4ca4b6)[_0xcd58('0x1f')](handleEntityNotFound(_0x46518b,null))[_0xcd58('0x1f')](respondWithResult(_0x46518b,null))[_0xcd58('0x3a')](handleError(_0x46518b,null));};exports['create']=function(_0x1b4b67,_0x26dd8f){return db[_0xcd58('0x24')][_0xcd58('0x3f')](_0x1b4b67[_0xcd58('0x40')],{})[_0xcd58('0x1f')](respondWithResult(_0x26dd8f,0xc9))[_0xcd58('0x3a')](handleError(_0x26dd8f,null));};exports[_0xcd58('0x1e')]=function(_0x452e7e,_0xd839c){if(_0x452e7e['body']['id']){delete _0x452e7e[_0xcd58('0x40')]['id'];}return db[_0xcd58('0x24')][_0xcd58('0x3e')]({'where':{'id':_0x452e7e[_0xcd58('0x3b')]['id']}})[_0xcd58('0x1f')](handleEntityNotFound(_0xd839c,null))[_0xcd58('0x1f')](saveUpdates(_0x452e7e[_0xcd58('0x40')],null))[_0xcd58('0x1f')](respondWithResult(_0xd839c,null))[_0xcd58('0x3a')](handleError(_0xd839c,null));};exports[_0xcd58('0x20')]=function(_0x1416fa,_0x1e39d8){return db['VoiceDialReport'][_0xcd58('0x3e')]({'where':{'id':_0x1416fa[_0xcd58('0x3b')]['id']}})['then'](handleEntityNotFound(_0x1e39d8,null))[_0xcd58('0x1f')](removeEntity(_0x1e39d8,null))[_0xcd58('0x3a')](handleError(_0x1e39d8,null));};exports[_0xcd58('0x41')]=function(_0x160c39,_0x424cfb){return db[_0xcd58('0x24')]['describe']()['then'](respondWithResult(_0x424cfb,null))[_0xcd58('0x3a')](handleError(_0x424cfb,null));};
\ No newline at end of file
+var _0x255f=['offset','set','Content-Range','json','apply','reject','save','update','then','sendStatus','stack','name','send','VoiceDialReport','model','keys','query','filters','intersection','attributes','fields','length','limit','order','sort','where','filter','map','type','key','VIRTUAL','field','merge','options','include','findAll','catch','show','params','rawAttributes','create','body','find','describe','html-pdf','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','lodash','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','status','end','count'];(function(_0x23c6f2,_0x4e033c){var _0x4c270b=function(_0x4913f0){while(--_0x4913f0){_0x23c6f2['push'](_0x23c6f2['shift']());}};_0x4c270b(++_0x4e033c);}(_0x255f,0x185));var _0xf255=function(_0x44f1f1,_0x4be4e4){_0x44f1f1=_0x44f1f1-0x0;var _0x1fae61=_0x255f[_0x44f1f1];return _0x1fae61;};'use strict';var pdf=require(_0xf255('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xf255('0x1'));var zipdir=require(_0xf255('0x2'));var jsonpatch=require(_0xf255('0x3'));var rp=require('request-promise');var moment=require(_0xf255('0x4'));var BPromise=require(_0xf255('0x5'));var Mustache=require(_0xf255('0x6'));var util=require(_0xf255('0x7'));var path=require(_0xf255('0x8'));var sox=require(_0xf255('0x9'));var csv=require(_0xf255('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xf255('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xf255('0xc'));var deskjs=require(_0xf255('0xd'));var toCsv=require('to-csv');var querystring=require(_0xf255('0xe'));var Papa=require(_0xf255('0xf'));var Redis=require('ioredis');var authService=require(_0xf255('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xf255('0x11'));var logger=require(_0xf255('0x12'))(_0xf255('0x13'));var utils=require(_0xf255('0x14'));var config=require(_0xf255('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x853ad2,_0xab71ec){_0xab71ec=_0xab71ec||0xcc;return function(_0x35fe1b){if(_0x35fe1b){return _0x853ad2['sendStatus'](_0xab71ec);}return _0x853ad2[_0xf255('0x16')](_0xab71ec)[_0xf255('0x17')]();};}function respondWithResult(_0x52a804,_0x17b028){_0x17b028=_0x17b028||0xc8;return function(_0x266b73){if(_0x266b73){return _0x52a804[_0xf255('0x16')](_0x17b028)['json'](_0x266b73);}};}function respondWithFilteredResult(_0x393d1d,_0xc5b6a4){return function(_0x4b8c8){if(_0x4b8c8){var _0x750c8a=_0x4b8c8[_0xf255('0x18')],_0x194e28=_0xc5b6a4['offset'],_0x4d9a07=_0xc5b6a4[_0xf255('0x19')]+_0xc5b6a4['limit'],_0x4edad2;if(_0x4d9a07>=_0x750c8a){_0x4d9a07=_0x750c8a;_0x4edad2=0xc8;}else{_0x4edad2=0xce;}_0x393d1d[_0xf255('0x16')](_0x4edad2);return _0x393d1d[_0xf255('0x1a')](_0xf255('0x1b'),_0x194e28+'-'+_0x4d9a07+'/'+_0x750c8a)[_0xf255('0x1c')](_0x4b8c8);}return null;};}function patchUpdates(_0x186558){return function(_0x2490d9){try{jsonpatch[_0xf255('0x1d')](_0x2490d9,_0x186558,!![]);}catch(_0x422a19){return BPromise[_0xf255('0x1e')](_0x422a19);}return _0x2490d9[_0xf255('0x1f')]();};}function saveUpdates(_0x3a930d,_0x4e05e3){return function(_0x2fe87d){if(_0x2fe87d){return _0x2fe87d[_0xf255('0x20')](_0x3a930d)[_0xf255('0x21')](function(_0x2c5fbc){return _0x2c5fbc;});}return null;};}function removeEntity(_0x1e3109,_0x11fbe9){return function(_0x31bde5){if(_0x31bde5){return _0x31bde5['destroy']()[_0xf255('0x21')](function(){_0x1e3109[_0xf255('0x16')](0xcc)[_0xf255('0x17')]();});}};}function handleEntityNotFound(_0x1dad1e,_0x325ee8){return function(_0x1b3b1a){if(!_0x1b3b1a){_0x1dad1e[_0xf255('0x22')](0x194);}return _0x1b3b1a;};}function handleError(_0x4b1bef,_0x28cb07){_0x28cb07=_0x28cb07||0x1f4;return function(_0x4c1664){logger['error'](_0x4c1664[_0xf255('0x23')]);if(_0x4c1664[_0xf255('0x24')]){delete _0x4c1664[_0xf255('0x24')];}_0x4b1bef[_0xf255('0x16')](_0x28cb07)[_0xf255('0x25')](_0x4c1664);};}exports['index']=function(_0x1c3a8e,_0x157397){var _0xdeaf7e={},_0x551da1={},_0x1b1980={'count':0x0,'rows':[]};var _0x3527fb=db[_0xf255('0x26')]['rawAttributes'];_0x551da1[_0xf255('0x27')]=_[_0xf255('0x28')](_0x3527fb);_0x551da1[_0xf255('0x29')]=_[_0xf255('0x28')](_0x1c3a8e[_0xf255('0x29')]);_0x551da1[_0xf255('0x2a')]=_[_0xf255('0x2b')](_0x551da1[_0xf255('0x27')],_0x551da1[_0xf255('0x29')]);_0xdeaf7e[_0xf255('0x2c')]=_['intersection'](_0x551da1[_0xf255('0x27')],qs[_0xf255('0x2d')](_0x1c3a8e[_0xf255('0x29')][_0xf255('0x2d')]));_0xdeaf7e[_0xf255('0x2c')]=_0xdeaf7e[_0xf255('0x2c')][_0xf255('0x2e')]?_0xdeaf7e[_0xf255('0x2c')]:_0x551da1['model'];if(!_0x1c3a8e[_0xf255('0x29')]['hasOwnProperty']('nolimit')){_0xdeaf7e[_0xf255('0x2f')]=qs[_0xf255('0x2f')](_0x1c3a8e[_0xf255('0x29')][_0xf255('0x2f')]);_0xdeaf7e[_0xf255('0x19')]=qs[_0xf255('0x19')](_0x1c3a8e[_0xf255('0x29')]['offset']);}_0xdeaf7e[_0xf255('0x30')]=qs[_0xf255('0x31')](_0x1c3a8e[_0xf255('0x29')][_0xf255('0x31')]);_0xdeaf7e[_0xf255('0x32')]=qs[_0xf255('0x2a')](_['pick'](_0x1c3a8e[_0xf255('0x29')],_0x551da1[_0xf255('0x2a')]));if(_0x1c3a8e[_0xf255('0x29')][_0xf255('0x33')]){_0xdeaf7e[_0xf255('0x32')]=_['merge'](_0xdeaf7e[_0xf255('0x32')],{'$or':_[_0xf255('0x34')](_0x3527fb,function(_0x6f9156){if(_0x6f9156[_0xf255('0x35')][_0xf255('0x36')]!==_0xf255('0x37')){var _0x4ad7c7={};_0x4ad7c7[_0x6f9156[_0xf255('0x38')]]={'$like':'%'+_0x1c3a8e[_0xf255('0x29')][_0xf255('0x33')]+'%'};return _0x4ad7c7;}})});}_0xdeaf7e=_[_0xf255('0x39')]({},_0xdeaf7e,_0x1c3a8e[_0xf255('0x3a')]);var _0x4fb2b3={'where':_0xdeaf7e[_0xf255('0x32')]};return db[_0xf255('0x26')][_0xf255('0x18')](_0x4fb2b3)[_0xf255('0x21')](function(_0x19b901){_0x1b1980[_0xf255('0x18')]=_0x19b901;if(_0x1c3a8e[_0xf255('0x29')]['includeAll']){_0xdeaf7e[_0xf255('0x3b')]=[{'all':!![]}];}return db[_0xf255('0x26')][_0xf255('0x3c')](_0xdeaf7e);})['then'](function(_0x1aef9c){_0x1b1980['rows']=_0x1aef9c;return _0x1b1980;})[_0xf255('0x21')](respondWithFilteredResult(_0x157397,_0xdeaf7e))[_0xf255('0x3d')](handleError(_0x157397,null));};exports[_0xf255('0x3e')]=function(_0x4516c5,_0x2edc1a){var _0x34dcb8={'raw':!![],'where':{'id':_0x4516c5[_0xf255('0x3f')]['id']}},_0x3d7358={};_0x3d7358[_0xf255('0x27')]=_[_0xf255('0x28')](db[_0xf255('0x26')][_0xf255('0x40')]);_0x3d7358[_0xf255('0x29')]=_[_0xf255('0x28')](_0x4516c5[_0xf255('0x29')]);_0x3d7358[_0xf255('0x2a')]=_[_0xf255('0x2b')](_0x3d7358['model'],_0x3d7358[_0xf255('0x29')]);_0x34dcb8['attributes']=_[_0xf255('0x2b')](_0x3d7358[_0xf255('0x27')],qs['fields'](_0x4516c5[_0xf255('0x29')]['fields']));_0x34dcb8[_0xf255('0x2c')]=_0x34dcb8[_0xf255('0x2c')]['length']?_0x34dcb8[_0xf255('0x2c')]:_0x3d7358['model'];if(_0x4516c5['query']['includeAll']){_0x34dcb8[_0xf255('0x3b')]=[{'all':!![]}];}_0x34dcb8=_[_0xf255('0x39')]({},_0x34dcb8,_0x4516c5[_0xf255('0x3a')]);return db[_0xf255('0x26')]['find'](_0x34dcb8)[_0xf255('0x21')](handleEntityNotFound(_0x2edc1a,null))[_0xf255('0x21')](respondWithResult(_0x2edc1a,null))[_0xf255('0x3d')](handleError(_0x2edc1a,null));};exports[_0xf255('0x41')]=function(_0x2426e7,_0x5ef308){return db[_0xf255('0x26')][_0xf255('0x41')](_0x2426e7[_0xf255('0x42')],{})[_0xf255('0x21')](respondWithResult(_0x5ef308,0xc9))[_0xf255('0x3d')](handleError(_0x5ef308,null));};exports[_0xf255('0x20')]=function(_0x21ef06,_0xb37dd6){if(_0x21ef06['body']['id']){delete _0x21ef06['body']['id'];}return db['VoiceDialReport'][_0xf255('0x43')]({'where':{'id':_0x21ef06['params']['id']}})['then'](handleEntityNotFound(_0xb37dd6,null))[_0xf255('0x21')](saveUpdates(_0x21ef06[_0xf255('0x42')],null))[_0xf255('0x21')](respondWithResult(_0xb37dd6,null))[_0xf255('0x3d')](handleError(_0xb37dd6,null));};exports['destroy']=function(_0x5bf6e7,_0x1a893c){return db['VoiceDialReport']['find']({'where':{'id':_0x5bf6e7[_0xf255('0x3f')]['id']}})['then'](handleEntityNotFound(_0x1a893c,null))[_0xf255('0x21')](removeEntity(_0x1a893c,null))[_0xf255('0x3d')](handleError(_0x1a893c,null));};exports[_0xf255('0x44')]=function(_0x3bbb62,_0x37b687){return db[_0xf255('0x26')][_0xf255('0x44')]()[_0xf255('0x21')](respondWithResult(_0x37b687,null))[_0xf255('0x3d')](handleError(_0x37b687,null));};
\ No newline at end of file
index a357568..a95570c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd5b6=['define','VoiceDialReport','report_dial','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','../../config/environment','./voiceDialReport.attributes','exports'];(function(_0x2abc69,_0x5463d6){var _0x4eb01e=function(_0x3fba6d){while(--_0x3fba6d){_0x2abc69['push'](_0x2abc69['shift']());}};_0x4eb01e(++_0x5463d6);}(_0xd5b6,0x73));var _0x6d5b=function(_0x1f338a,_0x56817d){_0x1f338a=_0x1f338a-0x0;var _0x186eb4=_0xd5b6[_0x1f338a];return _0x186eb4;};'use strict';var _=require(_0x6d5b('0x0'));var util=require(_0x6d5b('0x1'));var logger=require(_0x6d5b('0x2'))(_0x6d5b('0x3'));var moment=require(_0x6d5b('0x4'));var BPromise=require(_0x6d5b('0x5'));var rp=require(_0x6d5b('0x6'));var fs=require('fs');var path=require(_0x6d5b('0x7'));var rimraf=require('rimraf');var config=require(_0x6d5b('0x8'));var attributes=require(_0x6d5b('0x9'));module[_0x6d5b('0xa')]=function(_0x4935ef,_0x1c2490){return _0x4935ef[_0x6d5b('0xb')](_0x6d5b('0xc'),attributes,{'tableName':_0x6d5b('0xd'),'paranoid':![],'indexes':[{'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x97e7=['moment','bluebird','request-promise','path','rimraf','../../config/environment','./voiceDialReport.attributes','exports','define','VoiceDialReport','uniqueid','lodash','util','../../config/logger'];(function(_0x253b50,_0xb58f1a){var _0x16a21b=function(_0x164733){while(--_0x164733){_0x253b50['push'](_0x253b50['shift']());}};_0x16a21b(++_0xb58f1a);}(_0x97e7,0x1a1));var _0x797e=function(_0x1578cf,_0x212769){_0x1578cf=_0x1578cf-0x0;var _0x1f8147=_0x97e7[_0x1578cf];return _0x1f8147;};'use strict';var _=require(_0x797e('0x0'));var util=require(_0x797e('0x1'));var logger=require(_0x797e('0x2'))('api');var moment=require(_0x797e('0x3'));var BPromise=require(_0x797e('0x4'));var rp=require(_0x797e('0x5'));var fs=require('fs');var path=require(_0x797e('0x6'));var rimraf=require(_0x797e('0x7'));var config=require(_0x797e('0x8'));var attributes=require(_0x797e('0x9'));module[_0x797e('0xa')]=function(_0x445e60,_0x204c83){return _0x445e60[_0x797e('0xb')](_0x797e('0xc'),attributes,{'tableName':'report_dial','paranoid':![],'indexes':[{'fields':[_0x797e('0xd')]}],'timestamps':!![]});};
\ No newline at end of file
index c8a5ef7..f1e59cb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe205=['limit','UpdateVoiceDialReport','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','VoiceDialReport,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','catch','CreateVoiceDialReport','VoiceDialReport','body','options','raw','update','where'];(function(_0x5cb3a7,_0x4bffa7){var _0x509ce4=function(_0xb0444a){while(--_0xb0444a){_0x5cb3a7['push'](_0x5cb3a7['shift']());}};_0x509ce4(++_0x4bffa7);}(_0xe205,0xa7));var _0x5e20=function(_0x5f34be,_0x36d8b3){_0x5f34be=_0x5f34be-0x0;var _0x29a8fc=_0xe205[_0x5f34be];return _0x29a8fc;};'use strict';var _=require(_0x5e20('0x0'));var util=require(_0x5e20('0x1'));var moment=require(_0x5e20('0x2'));var BPromise=require(_0x5e20('0x3'));var rs=require(_0x5e20('0x4'));var fs=require('fs');var Redis=require(_0x5e20('0x5'));var db=require(_0x5e20('0x6'))['db'];var utils=require(_0x5e20('0x7'));var logger=require(_0x5e20('0x8'))('rpc');var config=require(_0x5e20('0x9'));var jayson=require(_0x5e20('0xa'));var client=jayson[_0x5e20('0xb')][_0x5e20('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x5eca5c,_0x4cc88d,_0x3a382f){return new BPromise(function(_0x4c9332,_0x533e18){return client[_0x5e20('0xd')](_0x5eca5c,_0x3a382f)[_0x5e20('0xe')](function(_0x5c1eee){logger[_0x5e20('0xf')](_0x5e20('0x10'),_0x4cc88d,_0x5e20('0x11'));logger[_0x5e20('0x12')]('VoiceDialReport,\x20%s,\x20%s,\x20%s',_0x4cc88d,_0x5e20('0x11'),JSON[_0x5e20('0x13')](_0x5c1eee));if(_0x5c1eee[_0x5e20('0x14')]){if(_0x5c1eee[_0x5e20('0x14')][_0x5e20('0x15')]===0x1f4){logger[_0x5e20('0x14')]('VoiceDialReport,\x20%s,\x20%s',_0x4cc88d,_0x5c1eee[_0x5e20('0x14')][_0x5e20('0x16')]);return _0x533e18(_0x5c1eee[_0x5e20('0x14')]['message']);}logger[_0x5e20('0x14')]('VoiceDialReport,\x20%s,\x20%s',_0x4cc88d,_0x5c1eee[_0x5e20('0x14')]['message']);return _0x4c9332(_0x5c1eee[_0x5e20('0x14')][_0x5e20('0x16')]);}else{logger[_0x5e20('0xf')](_0x5e20('0x10'),_0x4cc88d,_0x5e20('0x11'));_0x4c9332(_0x5c1eee['result'][_0x5e20('0x16')]);}})[_0x5e20('0x17')](function(_0x166ffd){logger[_0x5e20('0x14')](_0x5e20('0x10'),_0x4cc88d,_0x166ffd);_0x533e18(_0x166ffd);});});}exports[_0x5e20('0x18')]=function(_0x1cc706){var _0xf3488f=this;return new Promise(function(_0x4d3e4a,_0x434686){return db[_0x5e20('0x19')]['create'](_0x1cc706[_0x5e20('0x1a')],{'raw':_0x1cc706[_0x5e20('0x1b')]?_0x1cc706[_0x5e20('0x1b')][_0x5e20('0x1c')]===undefined?!![]:![]:!![]})['then'](function(_0x2954fc){logger['info']('CreateVoiceDialReport',_0x1cc706);logger['debug']('CreateVoiceDialReport',_0x1cc706,JSON[_0x5e20('0x13')](_0x2954fc));_0x4d3e4a(_0x2954fc);})['catch'](function(_0x3d89e4){logger[_0x5e20('0x14')](_0x5e20('0x18'),_0x3d89e4[_0x5e20('0x16')],_0x1cc706);_0x434686(_0xf3488f[_0x5e20('0x14')](0x1f4,_0x3d89e4[_0x5e20('0x16')]));});});};exports['UpdateVoiceDialReport']=function(_0x15705f){var _0x5a755f=this;return new Promise(function(_0x52d4f5,_0x33993a){return db[_0x5e20('0x19')][_0x5e20('0x1d')](_0x15705f[_0x5e20('0x1a')],{'raw':_0x15705f[_0x5e20('0x1b')]?_0x15705f[_0x5e20('0x1b')][_0x5e20('0x1c')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x15705f['options']?_0x15705f[_0x5e20('0x1b')][_0x5e20('0x1e')]||null:null,'attributes':_0x15705f[_0x5e20('0x1b')]?_0x15705f[_0x5e20('0x1b')]['attributes']||null:null,'limit':_0x15705f[_0x5e20('0x1b')]?_0x15705f[_0x5e20('0x1b')][_0x5e20('0x1f')]||null:null})[_0x5e20('0xe')](function(_0xbed73a){logger[_0x5e20('0xf')]('UpdateVoiceDialReport',_0x15705f);logger[_0x5e20('0x12')](_0x5e20('0x20'),_0x15705f,JSON['stringify'](_0xbed73a));_0x52d4f5(_0xbed73a);})[_0x5e20('0x17')](function(_0x21d1d8){logger[_0x5e20('0x14')](_0x5e20('0x20'),_0x21d1d8[_0x5e20('0x16')],_0x15705f);_0x33993a(_0x5a755f[_0x5e20('0x14')](0x1f4,_0x21d1d8['message']));});});};
\ No newline at end of file
+var _0x7868=['VoiceDialReport,\x20%s,\x20%s','request\x20sent','error','code','message','catch','VoiceDialReport','create','body','options','then','CreateVoiceDialReport','debug','stringify','update','where','attributes','limit','UpdateVoiceDialReport','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info'];(function(_0x542219,_0x89d392){var _0x55ca42=function(_0x192764){while(--_0x192764){_0x542219['push'](_0x542219['shift']());}};_0x55ca42(++_0x89d392);}(_0x7868,0x1c0));var _0x8786=function(_0x472919,_0x20ef40){_0x472919=_0x472919-0x0;var _0x81cccb=_0x7868[_0x472919];return _0x81cccb;};'use strict';var _=require(_0x8786('0x0'));var util=require('util');var moment=require(_0x8786('0x1'));var BPromise=require(_0x8786('0x2'));var rs=require(_0x8786('0x3'));var fs=require('fs');var Redis=require(_0x8786('0x4'));var db=require(_0x8786('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x8786('0x6'))(_0x8786('0x7'));var config=require(_0x8786('0x8'));var jayson=require(_0x8786('0x9'));var client=jayson[_0x8786('0xa')][_0x8786('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x251045,_0x3b65c3,_0xe4d300){return new BPromise(function(_0xe9a88d,_0x20b3ed){return client[_0x8786('0xc')](_0x251045,_0xe4d300)['then'](function(_0x5b241a){logger[_0x8786('0xd')](_0x8786('0xe'),_0x3b65c3,_0x8786('0xf'));logger['debug']('VoiceDialReport,\x20%s,\x20%s,\x20%s',_0x3b65c3,_0x8786('0xf'),JSON['stringify'](_0x5b241a));if(_0x5b241a[_0x8786('0x10')]){if(_0x5b241a[_0x8786('0x10')][_0x8786('0x11')]===0x1f4){logger[_0x8786('0x10')](_0x8786('0xe'),_0x3b65c3,_0x5b241a[_0x8786('0x10')]['message']);return _0x20b3ed(_0x5b241a[_0x8786('0x10')][_0x8786('0x12')]);}logger['error'](_0x8786('0xe'),_0x3b65c3,_0x5b241a[_0x8786('0x10')]['message']);return _0xe9a88d(_0x5b241a[_0x8786('0x10')][_0x8786('0x12')]);}else{logger[_0x8786('0xd')](_0x8786('0xe'),_0x3b65c3,'request\x20sent');_0xe9a88d(_0x5b241a['result']['message']);}})[_0x8786('0x13')](function(_0x450606){logger[_0x8786('0x10')](_0x8786('0xe'),_0x3b65c3,_0x450606);_0x20b3ed(_0x450606);});});}exports['CreateVoiceDialReport']=function(_0x1b410a){var _0x3b9ff1=this;return new Promise(function(_0x316bf7,_0x359f68){return db[_0x8786('0x14')][_0x8786('0x15')](_0x1b410a[_0x8786('0x16')],{'raw':_0x1b410a[_0x8786('0x17')]?_0x1b410a[_0x8786('0x17')]['raw']===undefined?!![]:![]:!![]})[_0x8786('0x18')](function(_0x790c9a){logger[_0x8786('0xd')](_0x8786('0x19'),_0x1b410a);logger[_0x8786('0x1a')]('CreateVoiceDialReport',_0x1b410a,JSON[_0x8786('0x1b')](_0x790c9a));_0x316bf7(_0x790c9a);})[_0x8786('0x13')](function(_0x5de3ef){logger[_0x8786('0x10')](_0x8786('0x19'),_0x5de3ef[_0x8786('0x12')],_0x1b410a);_0x359f68(_0x3b9ff1['error'](0x1f4,_0x5de3ef['message']));});});};exports['UpdateVoiceDialReport']=function(_0x27f85e){var _0x33346d=this;return new Promise(function(_0x1bb259,_0x53c884){return db[_0x8786('0x14')][_0x8786('0x1c')](_0x27f85e[_0x8786('0x16')],{'raw':_0x27f85e[_0x8786('0x17')]?_0x27f85e[_0x8786('0x17')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x27f85e['options']?_0x27f85e[_0x8786('0x17')][_0x8786('0x1d')]||null:null,'attributes':_0x27f85e[_0x8786('0x17')]?_0x27f85e[_0x8786('0x17')][_0x8786('0x1e')]||null:null,'limit':_0x27f85e[_0x8786('0x17')]?_0x27f85e[_0x8786('0x17')][_0x8786('0x1f')]||null:null})[_0x8786('0x18')](function(_0xd796e7){logger['info']('UpdateVoiceDialReport',_0x27f85e);logger['debug'](_0x8786('0x20'),_0x27f85e,JSON['stringify'](_0xd796e7));_0x1bb259(_0xd796e7);})[_0x8786('0x13')](function(_0xdf4c00){logger['error'](_0x8786('0x20'),_0xdf4c00['message'],_0x27f85e);_0x53c884(_0x33346d[_0x8786('0x10')](0x1f4,_0xdf4c00[_0x8786('0x12')]));});});};
\ No newline at end of file
index 9ec01c4..812975a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeef7=['util','connect-timeout','express','../../config/environment','./voiceExtension.controller','get','/:id','isAuthenticated','show','create','post','/:id/applications','addApplications','put','delete','destroy','exports','multer'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xeef7,0x7d));var _0x7eef=function(_0x32ca32,_0x238b2b){_0x32ca32=_0x32ca32-0x0;var _0x5438ff=_0xeef7[_0x32ca32];return _0x5438ff;};'use strict';var multer=require(_0x7eef('0x0'));var util=require(_0x7eef('0x1'));var path=require('path');var timeout=require(_0x7eef('0x2'));var express=require(_0x7eef('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x7eef('0x4'));var controller=require(_0x7eef('0x5'));router[_0x7eef('0x6')]('/',auth['isAuthenticated'](),controller['index']);router['get'](_0x7eef('0x7'),auth[_0x7eef('0x8')](),controller[_0x7eef('0x9')]);router['post']('/',auth[_0x7eef('0x8')](),controller[_0x7eef('0xa')]);router[_0x7eef('0xb')](_0x7eef('0xc'),auth[_0x7eef('0x8')](),controller[_0x7eef('0xd')]);router[_0x7eef('0xe')](_0x7eef('0x7'),auth[_0x7eef('0x8')](),controller['update']);router[_0x7eef('0xf')](_0x7eef('0x7'),auth[_0x7eef('0x8')](),controller[_0x7eef('0x10')]);module[_0x7eef('0x11')]=router;
\ No newline at end of file
+var _0x32b6=['/:id','show','create','post','/:id/applications','update','delete','destroy','exports','multer','util','connect-timeout','express','../../components/interaction/service','../../config/environment','./voiceExtension.controller','get','isAuthenticated','index'];(function(_0x2a238a,_0x1d5054){var _0xeef802=function(_0x583637){while(--_0x583637){_0x2a238a['push'](_0x2a238a['shift']());}};_0xeef802(++_0x1d5054);}(_0x32b6,0x1d1));var _0x632b=function(_0x230f7a,_0x3e535d){_0x230f7a=_0x230f7a-0x0;var _0x560dbc=_0x32b6[_0x230f7a];return _0x560dbc;};'use strict';var multer=require(_0x632b('0x0'));var util=require(_0x632b('0x1'));var path=require('path');var timeout=require(_0x632b('0x2'));var express=require(_0x632b('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x632b('0x4'));var config=require(_0x632b('0x5'));var controller=require(_0x632b('0x6'));router[_0x632b('0x7')]('/',auth[_0x632b('0x8')](),controller[_0x632b('0x9')]);router[_0x632b('0x7')](_0x632b('0xa'),auth[_0x632b('0x8')](),controller[_0x632b('0xb')]);router['post']('/',auth[_0x632b('0x8')](),controller[_0x632b('0xc')]);router[_0x632b('0xd')](_0x632b('0xe'),auth['isAuthenticated'](),controller['addApplications']);router['put'](_0x632b('0xa'),auth['isAuthenticated'](),controller[_0x632b('0xf')]);router[_0x632b('0x10')](_0x632b('0xa'),auth[_0x632b('0x8')](),controller[_0x632b('0x11')]);module[_0x632b('0x12')]=router;
\ No newline at end of file
index ce4bc8f..5381528 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x41bb=['VIRTUAL','exten','sequelize','exports','compositeIndex','STRING','NoOp','ENUM','inbound-fax','outbound-fax','any','*,*,*,*','INTEGER','BOOLEAN','wav'];(function(_0x4961bd,_0x39d847){var _0x3f83cf=function(_0x5250a6){while(--_0x5250a6){_0x4961bd['push'](_0x4961bd['shift']());}};_0x3f83cf(++_0x39d847);}(_0x41bb,0xc5));var _0xb41b=function(_0x487363,_0xabd92c){_0x487363=_0x487363-0x0;var _0x198e1d=_0x41bb[_0x487363];return _0x198e1d;};'use strict';var Sequelize=require(_0xb41b('0x0'));module[_0xb41b('0x1')]={'context':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0xb41b('0x2'),'validate':{'notEmpty':!![],'is':/[A-Za-z0-9._\+*!\-\[\]]+$/i}},'exten':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0xb41b('0x2')},'priority':{'type':Sequelize[_0xb41b('0x3')],'allowNull':![],'defaultValue':'1','unique':_0xb41b('0x2')},'tag':{'type':Sequelize[_0xb41b('0x3')],'allowNull':![],'defaultValue':'--'},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xb41b('0x4')},'appdata':{'type':Sequelize[_0xb41b('0x3')](0x1000),'allowNull':!![],'defaultValue':''},'type':{'type':Sequelize[_0xb41b('0x5')]('inbound','outbound','internal',_0xb41b('0x6'),_0xb41b('0x7'),'system',_0xb41b('0x8')),'allowNull':![]},'description':{'type':Sequelize[_0xb41b('0x3')]},'interval':{'type':Sequelize[_0xb41b('0x3')],'allowNull':![],'defaultValue':_0xb41b('0x9')},'IntervalId':{'type':Sequelize[_0xb41b('0xa')]},'isApp':{'type':Sequelize[_0xb41b('0xb')],'allowNull':![],'defaultValue':![]},'appType':{'type':Sequelize[_0xb41b('0x3')],'defaultValue':null},'callerID':{'type':Sequelize['STRING'],'allowNull':!![]},'record':{'type':Sequelize[_0xb41b('0xb')],'defaultValue':![]},'cutdigits':{'type':Sequelize['INTEGER']},'recordingFormat':{'type':Sequelize[_0xb41b('0x3')],'defaultValue':_0xb41b('0xc')},'answer':{'type':Sequelize[_0xb41b('0xb')],'defaultValue':!![]},'name':{'type':Sequelize[_0xb41b('0xd')],'get':function(_0x2066d5){return this['getDataValue'](_0xb41b('0xe'));}}};
\ No newline at end of file
+var _0xbf6e=['inbound-fax','system','any','*,*,*,*','INTEGER','BOOLEAN','wav','VIRTUAL','exten','STRING','compositeIndex','NoOp','ENUM','inbound','outbound','internal'];(function(_0x26be79,_0x574083){var _0x320182=function(_0x4c1f34){while(--_0x4c1f34){_0x26be79['push'](_0x26be79['shift']());}};_0x320182(++_0x574083);}(_0xbf6e,0x149));var _0xebf6=function(_0x542cb1,_0xf79f5d){_0x542cb1=_0x542cb1-0x0;var _0x51efcb=_0xbf6e[_0x542cb1];return _0x51efcb;};'use strict';var Sequelize=require('sequelize');module['exports']={'context':{'type':Sequelize[_0xebf6('0x0')],'allowNull':![],'unique':_0xebf6('0x1'),'validate':{'notEmpty':!![],'is':/[A-Za-z0-9._\+*!\-\[\]]+$/i}},'exten':{'type':Sequelize[_0xebf6('0x0')],'allowNull':![],'unique':_0xebf6('0x1')},'priority':{'type':Sequelize[_0xebf6('0x0')],'allowNull':![],'defaultValue':'1','unique':_0xebf6('0x1')},'tag':{'type':Sequelize[_0xebf6('0x0')],'allowNull':![],'defaultValue':'--'},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xebf6('0x2')},'appdata':{'type':Sequelize[_0xebf6('0x0')](0x1000),'allowNull':!![],'defaultValue':''},'type':{'type':Sequelize[_0xebf6('0x3')](_0xebf6('0x4'),_0xebf6('0x5'),_0xebf6('0x6'),_0xebf6('0x7'),'outbound-fax',_0xebf6('0x8'),_0xebf6('0x9')),'allowNull':![]},'description':{'type':Sequelize[_0xebf6('0x0')]},'interval':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xebf6('0xa')},'IntervalId':{'type':Sequelize[_0xebf6('0xb')]},'isApp':{'type':Sequelize['BOOLEAN'],'allowNull':![],'defaultValue':![]},'appType':{'type':Sequelize[_0xebf6('0x0')],'defaultValue':null},'callerID':{'type':Sequelize[_0xebf6('0x0')],'allowNull':!![]},'record':{'type':Sequelize[_0xebf6('0xc')],'defaultValue':![]},'cutdigits':{'type':Sequelize[_0xebf6('0xb')]},'recordingFormat':{'type':Sequelize[_0xebf6('0x0')],'defaultValue':_0xebf6('0xd')},'answer':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'name':{'type':Sequelize[_0xebf6('0xe')],'get':function(_0xedc361){return this['getDataValue'](_0xebf6('0xf'));}}};
\ No newline at end of file
index 44e08e1..8e855cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a81=['fields','length','hasOwnProperty','nolimit','order','sort','where','filters','merge','map','key','VIRTUAL','field','options','includeAll','include','findAll','catch','show','params','create','body','startsWith','exten','concat','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','userProfileId','UserProfileResource','error','update','context','description','recordingFormat','cutdigits','mandatoryDisposition','addApplications','findOne','sequelize','transaction','VoiceExtensionId','findAndCountAll','cast(priority\x20as\x20unsigned)','html-pdf','rimraf','fast-json-patch','request-promise','moment','mustache','util','path','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','register','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','reject','save','destroy','then','get','InboundRoutes','inbound','OutboundRoutes','outbound','internal','filter','ignore','value','includes','type','find','name','stack','send','index','VoiceExtension','rawAttributes','query','keys','intersection','model','attributes'];(function(_0x564242,_0x4159f7){var _0x2906fb=function(_0xed2acc){while(--_0xed2acc){_0x564242['push'](_0x564242['shift']());}};_0x2906fb(++_0x4159f7);}(_0x8a81,0x16d));var _0x18a8=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x8a81[_0x321bb2];return _0x9c12ed;};'use strict';var pdf=require(_0x18a8('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x18a8('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x18a8('0x2'));var rp=require(_0x18a8('0x3'));var moment=require(_0x18a8('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x18a8('0x5'));var util=require(_0x18a8('0x6'));var path=require(_0x18a8('0x7'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x18a8('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x18a8('0x9'));var crypto=require(_0x18a8('0xa'));var jsforce=require(_0x18a8('0xb'));var deskjs=require(_0x18a8('0xc'));var toCsv=require(_0x18a8('0xd'));var querystring=require(_0x18a8('0xe'));var Papa=require('papaparse');var Redis=require(_0x18a8('0xf'));var authService=require('../../components/auth/service');var qs=require(_0x18a8('0x10'));var hardwareService=require(_0x18a8('0x11'));var logger=require('../../config/logger')('api');var utils=require(_0x18a8('0x12'));var config=require(_0x18a8('0x13'));var db=require(_0x18a8('0x14'))['db'];config[_0x18a8('0x15')]=_[_0x18a8('0x16')](config[_0x18a8('0x15')],{'host':_0x18a8('0x17'),'port':0x18eb});var socket=require(_0x18a8('0x18'))(new Redis(config['redis']));require('./voiceExtension.socket')[_0x18a8('0x19')](socket);function respondWithStatusCode(_0x15546a,_0xf9fed7){_0xf9fed7=_0xf9fed7||0xcc;return function(_0x48cbe4){if(_0x48cbe4){return _0x15546a[_0x18a8('0x1a')](_0xf9fed7);}return _0x15546a['status'](_0xf9fed7)[_0x18a8('0x1b')]();};}function respondWithResult(_0x566a0a,_0x200139){_0x200139=_0x200139||0xc8;return function(_0x2411dc){if(_0x2411dc){return _0x566a0a[_0x18a8('0x1c')](_0x200139)[_0x18a8('0x1d')](_0x2411dc);}};}function respondWithFilteredResult(_0x6e2190,_0x384d47){return function(_0x159c5a){if(_0x159c5a){var _0x21e3b4=_0x159c5a[_0x18a8('0x1e')],_0x6960b0=_0x384d47[_0x18a8('0x1f')],_0xb8b836=_0x384d47[_0x18a8('0x1f')]+_0x384d47[_0x18a8('0x20')],_0x55ea12;if(_0xb8b836>=_0x21e3b4){_0xb8b836=_0x21e3b4;_0x55ea12=0xc8;}else{_0x55ea12=0xce;}_0x6e2190[_0x18a8('0x1c')](_0x55ea12);return _0x6e2190[_0x18a8('0x21')](_0x18a8('0x22'),_0x6960b0+'-'+_0xb8b836+'/'+_0x21e3b4)['json'](_0x159c5a);}return null;};}function patchUpdates(_0x2b074b){return function(_0x12431b){try{jsonpatch[_0x18a8('0x23')](_0x12431b,_0x2b074b,!![]);}catch(_0x9dc47c){return BPromise[_0x18a8('0x24')](_0x9dc47c);}return _0x12431b[_0x18a8('0x25')]();};}function saveUpdates(_0x461900,_0x3f0e19){return function(_0xb49fb6){if(_0xb49fb6){return _0xb49fb6['update'](_0x461900)['then'](function(_0x462fb0){return _0x462fb0;});}return null;};}function removeEntity(_0xbcf4d6,_0x204f56){return function(_0x353b3e){if(_0x353b3e){return _0x353b3e[_0x18a8('0x26')]()[_0x18a8('0x27')](function(){var _0x48254d=_0x353b3e[_0x18a8('0x28')]({'plain':!![]});var _0xf79c80=[{'name':_0x18a8('0x29'),'value':_0x18a8('0x2a'),'ignore':![]},{'name':_0x18a8('0x2b'),'value':_0x18a8('0x2c'),'ignore':![]},{'name':'InternalRoutes','value':_0x18a8('0x2d'),'ignore':![]}];var _0x1397cb=_(_0xf79c80)[_0x18a8('0x2e')](_0x18a8('0x2f'))['map'](_0x18a8('0x30'))[_0x18a8('0x30')]();if(_[_0x18a8('0x31')](_0x1397cb,_0x48254d[_0x18a8('0x32')])){return;}var _0x1ceee9=_[_0x18a8('0x33')](_0xf79c80,[_0x18a8('0x30'),_0x48254d[_0x18a8('0x32')]])[_0x18a8('0x34')];return db['UserProfileResource'][_0x18a8('0x26')]({'where':{'type':_0x1ceee9,'resourceId':_0x48254d['id']}})['then'](function(){return _0x353b3e;});})['then'](function(){_0xbcf4d6['status'](0xcc)[_0x18a8('0x1b')]();});}};}function handleEntityNotFound(_0xbc808d,_0x52fa35){return function(_0x277045){if(!_0x277045){_0xbc808d[_0x18a8('0x1a')](0x194);}return _0x277045;};}function handleError(_0x53cfb6,_0x260198){_0x260198=_0x260198||0x1f4;return function(_0x3f4189){logger['error'](_0x3f4189[_0x18a8('0x35')]);if(_0x3f4189['name']){delete _0x3f4189[_0x18a8('0x34')];}_0x53cfb6[_0x18a8('0x1c')](_0x260198)[_0x18a8('0x36')](_0x3f4189);};}exports[_0x18a8('0x37')]=function(_0x5a811e,_0xec86fc){var _0x30ccc6={},_0x2c228e={},_0x3eb892={'count':0x0,'rows':[]};var _0xc64deb=db[_0x18a8('0x38')][_0x18a8('0x39')];_0x2c228e['model']=_['keys'](_0xc64deb);_0x2c228e[_0x18a8('0x3a')]=_[_0x18a8('0x3b')](_0x5a811e['query']);_0x2c228e['filters']=_[_0x18a8('0x3c')](_0x2c228e[_0x18a8('0x3d')],_0x2c228e[_0x18a8('0x3a')]);_0x30ccc6[_0x18a8('0x3e')]=_[_0x18a8('0x3c')](_0x2c228e[_0x18a8('0x3d')],qs[_0x18a8('0x3f')](_0x5a811e[_0x18a8('0x3a')]['fields']));_0x30ccc6[_0x18a8('0x3e')]=_0x30ccc6[_0x18a8('0x3e')][_0x18a8('0x40')]?_0x30ccc6[_0x18a8('0x3e')]:_0x2c228e[_0x18a8('0x3d')];if(!_0x5a811e[_0x18a8('0x3a')][_0x18a8('0x41')](_0x18a8('0x42'))){_0x30ccc6[_0x18a8('0x20')]=qs[_0x18a8('0x20')](_0x5a811e['query'][_0x18a8('0x20')]);_0x30ccc6[_0x18a8('0x1f')]=qs[_0x18a8('0x1f')](_0x5a811e[_0x18a8('0x3a')][_0x18a8('0x1f')]);}_0x30ccc6[_0x18a8('0x43')]=qs['sort'](_0x5a811e[_0x18a8('0x3a')][_0x18a8('0x44')]);_0x30ccc6[_0x18a8('0x45')]=qs[_0x18a8('0x46')](_['pick'](_0x5a811e[_0x18a8('0x3a')],_0x2c228e['filters']));if(_0x5a811e[_0x18a8('0x3a')][_0x18a8('0x2e')]){_0x30ccc6['where']=_[_0x18a8('0x47')](_0x30ccc6[_0x18a8('0x45')],{'$or':_[_0x18a8('0x48')](_0xc64deb,function(_0x8306e9){if(_0x8306e9['type'][_0x18a8('0x49')]!==_0x18a8('0x4a')){var _0x52965c={};_0x52965c[_0x8306e9[_0x18a8('0x4b')]]={'$like':'%'+_0x5a811e['query'][_0x18a8('0x2e')]+'%'};return _0x52965c;}})});}_0x30ccc6=_[_0x18a8('0x47')]({},_0x30ccc6,_0x5a811e[_0x18a8('0x4c')]);var _0x12a31a={'where':_0x30ccc6['where']};return db[_0x18a8('0x38')][_0x18a8('0x1e')](_0x12a31a)[_0x18a8('0x27')](function(_0x2bf470){_0x3eb892[_0x18a8('0x1e')]=_0x2bf470;if(_0x5a811e[_0x18a8('0x3a')][_0x18a8('0x4d')]){_0x30ccc6[_0x18a8('0x4e')]=[{'all':!![]}];}return db['VoiceExtension'][_0x18a8('0x4f')](_0x30ccc6);})[_0x18a8('0x27')](function(_0x2ffcb8){_0x3eb892['rows']=_0x2ffcb8;return _0x3eb892;})['then'](respondWithFilteredResult(_0xec86fc,_0x30ccc6))[_0x18a8('0x50')](handleError(_0xec86fc,null));};exports[_0x18a8('0x51')]=function(_0x236637,_0x2ee5f1){var _0x58a7ce={'raw':![],'where':{'id':_0x236637[_0x18a8('0x52')]['id']}},_0x3e2601={};_0x3e2601['model']=_[_0x18a8('0x3b')](db[_0x18a8('0x38')]['rawAttributes']);_0x3e2601[_0x18a8('0x3a')]=_[_0x18a8('0x3b')](_0x236637['query']);_0x3e2601['filters']=_[_0x18a8('0x3c')](_0x3e2601[_0x18a8('0x3d')],_0x3e2601[_0x18a8('0x3a')]);_0x58a7ce['attributes']=_['intersection'](_0x3e2601[_0x18a8('0x3d')],qs['fields'](_0x236637[_0x18a8('0x3a')][_0x18a8('0x3f')]));_0x58a7ce[_0x18a8('0x3e')]=_0x58a7ce['attributes']['length']?_0x58a7ce[_0x18a8('0x3e')]:_0x3e2601['model'];if(_0x236637[_0x18a8('0x3a')][_0x18a8('0x4d')]){_0x58a7ce['include']=[{'all':!![]}];}_0x58a7ce=_['merge']({},_0x58a7ce,_0x236637[_0x18a8('0x4c')]);return db['VoiceExtension']['find'](_0x58a7ce)[_0x18a8('0x27')](handleEntityNotFound(_0x2ee5f1,null))[_0x18a8('0x27')](respondWithResult(_0x2ee5f1,null))['catch'](handleError(_0x2ee5f1,null));};exports['destroy']=function(_0x4cbf81,_0x229848){return db[_0x18a8('0x38')][_0x18a8('0x33')]({'where':{'id':_0x4cbf81[_0x18a8('0x52')]['id']}})[_0x18a8('0x27')](handleEntityNotFound(_0x229848,null))[_0x18a8('0x27')](removeEntity(_0x229848,null))['catch'](handleError(_0x229848,null));};exports[_0x18a8('0x53')]=function(_0x2a4d29,_0x1e4cce){if(_0x2a4d29[_0x18a8('0x54')][_0x18a8('0x32')]===_0x18a8('0x2c')&&!_[_0x18a8('0x55')](_0x2a4d29['body']['exten'],'_')){_0x2a4d29[_0x18a8('0x54')][_0x18a8('0x56')]='_'[_0x18a8('0x57')](_0x2a4d29[_0x18a8('0x54')][_0x18a8('0x56')]);}return db[_0x18a8('0x38')][_0x18a8('0x53')](_0x2a4d29[_0x18a8('0x54')],{'raw':![]})[_0x18a8('0x27')](function(_0xfb3cd7){var _0x4f1c4f=_0x2a4d29[_0x18a8('0x58')]['get']({'plain':!![]});if(!_0x4f1c4f)throw new Error(_0x18a8('0x59'));if(_0x4f1c4f['role']===_0x18a8('0x58')){var _0x500683=_0xfb3cd7['get']({'plain':!![]});var _0xbaecfb=[{'name':_0x18a8('0x29'),'value':'inbound'},{'name':'OutboundRoutes','value':'outbound'},{'name':'InternalRoutes','value':_0x18a8('0x2d')}];var _0x3d588d=_[_0x18a8('0x33')](_0xbaecfb,['value',_0x500683[_0x18a8('0x32')]])[_0x18a8('0x34')];return db[_0x18a8('0x5a')][_0x18a8('0x33')]({'where':{'name':_0x3d588d,'userProfileId':_0x4f1c4f[_0x18a8('0x5b')]},'raw':!![]})[_0x18a8('0x27')](function(_0x4c700a){if(_0x4c700a&&_0x4c700a['autoAssociation']===0x0){return db[_0x18a8('0x5c')][_0x18a8('0x53')]({'name':_0x500683[_0x18a8('0x34')],'resourceId':_0x500683['id'],'type':_0x4c700a['name'],'sectionId':_0x4c700a['id']},{})[_0x18a8('0x27')](function(){return _0xfb3cd7;});}else{return _0xfb3cd7;}})[_0x18a8('0x50')](function(_0xf465c1){logger[_0x18a8('0x5d')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0xf465c1);throw _0xf465c1;});}return _0xfb3cd7;})[_0x18a8('0x27')](respondWithResult(_0x1e4cce,0xc9))[_0x18a8('0x50')](handleError(_0x1e4cce,null));};exports[_0x18a8('0x5e')]=function(_0xd695b7,_0x49e488){if(_0xd695b7['body']['id']){delete _0xd695b7[_0x18a8('0x54')]['id'];}return db[_0x18a8('0x38')][_0x18a8('0x33')]({'where':{'id':_0xd695b7['params']['id']}})[_0x18a8('0x27')](handleEntityNotFound(_0x49e488,null))[_0x18a8('0x27')](function(_0x4288f2){if(_0x4288f2){return db[_0x18a8('0x38')][_0x18a8('0x5e')](_['pick'](_0xd695b7[_0x18a8('0x54')],[_0x18a8('0x56'),_0x18a8('0x5f'),_0x18a8('0x60'),_0x18a8('0x61'),_0x18a8('0x62'),_0x18a8('0x63')]),{'where':{'context':_0x4288f2['context'],'exten':_0x4288f2[_0x18a8('0x56')]},'individualHooks':!![]})[_0x18a8('0x27')](function(_0x47019e){return _0x47019e;});}return null;})[_0x18a8('0x27')](respondWithStatusCode(_0x49e488,null))[_0x18a8('0x50')](handleError(_0x49e488,null));};exports[_0x18a8('0x64')]=function(_0x1ea1d9,_0x4222c5,_0x502955){return db[_0x18a8('0x38')][_0x18a8('0x65')]({'where':{'id':_0x1ea1d9[_0x18a8('0x52')]['id']}})['then'](handleEntityNotFound(_0x4222c5,null))['then'](function(_0x361816){if(_0x361816){return db[_0x18a8('0x66')][_0x18a8('0x67')](function(_0x4a100a){return db[_0x18a8('0x38')][_0x18a8('0x26')]({'where':{'VoiceExtensionId':_0x1ea1d9[_0x18a8('0x52')]['id']},'transaction':_0x4a100a})[_0x18a8('0x27')](function(_0x329352){var _0x26b8d2=_['map'](_0x1ea1d9[_0x18a8('0x54')],function(_0x430560){_0x430560[_0x18a8('0x68')]=_0x1ea1d9[_0x18a8('0x52')]['id'];return _0x430560;});return db[_0x18a8('0x38')]['bulkCreate'](_0x26b8d2,{'transaction':_0x4a100a});});})['then'](function(){return db[_0x18a8('0x38')][_0x18a8('0x69')]({'where':{'isApp':!![],'VoiceExtensionId':_0x1ea1d9[_0x18a8('0x52')]['id']},'order':_0x18a8('0x6a')});});}})[_0x18a8('0x27')](respondWithResult(_0x4222c5,null))[_0x18a8('0x50')](handleError(_0x4222c5,null));};
\ No newline at end of file
+var _0xa44c=['ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/utils','defaults','redis','socket.io-emitter','./voiceExtension.socket','register','sendStatus','status','end','count','offset','limit','set','json','apply','reject','save','update','then','destroy','OutboundRoutes','outbound','InternalRoutes','internal','filter','map','value','includes','type','find','name','UserProfileResource','error','stack','send','index','VoiceExtension','model','query','keys','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','pick','where','merge','key','VIRTUAL','field','options','include','findAll','rows','catch','show','params','rawAttributes','includeAll','startsWith','body','exten','concat','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','InboundRoutes','inbound','UserProfileSection','userProfileId','create','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','context','description','findOne','sequelize','transaction','VoiceExtensionId','bulkCreate','html-pdf','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','to-csv'];(function(_0x26245d,_0x578ecb){var _0x2ca839=function(_0x218bb9){while(--_0x218bb9){_0x26245d['push'](_0x26245d['shift']());}};_0x2ca839(++_0x578ecb);}(_0xa44c,0xc8));var _0xca44=function(_0x16e59e,_0x586ded){_0x16e59e=_0x16e59e-0x0;var _0xb4b3ac=_0xa44c[_0x16e59e];return _0xb4b3ac;};'use strict';var pdf=require(_0xca44('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xca44('0x1'));var zipdir=require(_0xca44('0x2'));var jsonpatch=require(_0xca44('0x3'));var rp=require('request-promise');var moment=require(_0xca44('0x4'));var BPromise=require(_0xca44('0x5'));var Mustache=require(_0xca44('0x6'));var util=require(_0xca44('0x7'));var path=require(_0xca44('0x8'));var sox=require('sox');var csv=require(_0xca44('0x9'));var ejs=require(_0xca44('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0xca44('0xb'));var crypto=require(_0xca44('0xc'));var jsforce=require(_0xca44('0xd'));var deskjs=require(_0xca44('0xe'));var toCsv=require(_0xca44('0x9'));var querystring=require(_0xca44('0xf'));var Papa=require(_0xca44('0x10'));var Redis=require(_0xca44('0x11'));var authService=require(_0xca44('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xca44('0x13'));var logger=require(_0xca44('0x14'))('api');var utils=require(_0xca44('0x15'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config['redis']=_[_0xca44('0x16')](config[_0xca44('0x17')],{'host':'localhost','port':0x18eb});var socket=require(_0xca44('0x18'))(new Redis(config[_0xca44('0x17')]));require(_0xca44('0x19'))[_0xca44('0x1a')](socket);function respondWithStatusCode(_0x4fd003,_0x334fb9){_0x334fb9=_0x334fb9||0xcc;return function(_0x4399c3){if(_0x4399c3){return _0x4fd003[_0xca44('0x1b')](_0x334fb9);}return _0x4fd003[_0xca44('0x1c')](_0x334fb9)[_0xca44('0x1d')]();};}function respondWithResult(_0x45c7d9,_0x4c6d37){_0x4c6d37=_0x4c6d37||0xc8;return function(_0xcc7809){if(_0xcc7809){return _0x45c7d9[_0xca44('0x1c')](_0x4c6d37)['json'](_0xcc7809);}};}function respondWithFilteredResult(_0x1c3d27,_0x27868b){return function(_0x2e1b65){if(_0x2e1b65){var _0x470e65=_0x2e1b65[_0xca44('0x1e')],_0x5efd59=_0x27868b[_0xca44('0x1f')],_0x4c89cd=_0x27868b['offset']+_0x27868b[_0xca44('0x20')],_0xb7f80;if(_0x4c89cd>=_0x470e65){_0x4c89cd=_0x470e65;_0xb7f80=0xc8;}else{_0xb7f80=0xce;}_0x1c3d27[_0xca44('0x1c')](_0xb7f80);return _0x1c3d27[_0xca44('0x21')]('Content-Range',_0x5efd59+'-'+_0x4c89cd+'/'+_0x470e65)[_0xca44('0x22')](_0x2e1b65);}return null;};}function patchUpdates(_0x5ebaa2){return function(_0x5554db){try{jsonpatch[_0xca44('0x23')](_0x5554db,_0x5ebaa2,!![]);}catch(_0x2cbd0f){return BPromise[_0xca44('0x24')](_0x2cbd0f);}return _0x5554db[_0xca44('0x25')]();};}function saveUpdates(_0x382780,_0x1f098c){return function(_0x486b1b){if(_0x486b1b){return _0x486b1b[_0xca44('0x26')](_0x382780)[_0xca44('0x27')](function(_0x2ff999){return _0x2ff999;});}return null;};}function removeEntity(_0x19bc19,_0x5410f1){return function(_0x59af0c){if(_0x59af0c){return _0x59af0c[_0xca44('0x28')]()['then'](function(){var _0x22c646=_0x59af0c['get']({'plain':!![]});var _0x8a52b2=[{'name':'InboundRoutes','value':'inbound','ignore':![]},{'name':_0xca44('0x29'),'value':_0xca44('0x2a'),'ignore':![]},{'name':_0xca44('0x2b'),'value':_0xca44('0x2c'),'ignore':![]}];var _0x12ec89=_(_0x8a52b2)[_0xca44('0x2d')]('ignore')[_0xca44('0x2e')](_0xca44('0x2f'))[_0xca44('0x2f')]();if(_[_0xca44('0x30')](_0x12ec89,_0x22c646[_0xca44('0x31')])){return;}var _0x47c36e=_[_0xca44('0x32')](_0x8a52b2,[_0xca44('0x2f'),_0x22c646[_0xca44('0x31')]])[_0xca44('0x33')];return db[_0xca44('0x34')][_0xca44('0x28')]({'where':{'type':_0x47c36e,'resourceId':_0x22c646['id']}})['then'](function(){return _0x59af0c;});})[_0xca44('0x27')](function(){_0x19bc19[_0xca44('0x1c')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3335d9,_0x16dd30){return function(_0x40e62d){if(!_0x40e62d){_0x3335d9['sendStatus'](0x194);}return _0x40e62d;};}function handleError(_0x236667,_0x10297d){_0x10297d=_0x10297d||0x1f4;return function(_0x222e20){logger[_0xca44('0x35')](_0x222e20[_0xca44('0x36')]);if(_0x222e20[_0xca44('0x33')]){delete _0x222e20['name'];}_0x236667[_0xca44('0x1c')](_0x10297d)[_0xca44('0x37')](_0x222e20);};}exports[_0xca44('0x38')]=function(_0x674768,_0x5a4359){var _0x88a900={},_0x2c21b9={},_0xf468a4={'count':0x0,'rows':[]};var _0x2282c0=db[_0xca44('0x39')]['rawAttributes'];_0x2c21b9[_0xca44('0x3a')]=_['keys'](_0x2282c0);_0x2c21b9[_0xca44('0x3b')]=_[_0xca44('0x3c')](_0x674768[_0xca44('0x3b')]);_0x2c21b9[_0xca44('0x3d')]=_[_0xca44('0x3e')](_0x2c21b9[_0xca44('0x3a')],_0x2c21b9['query']);_0x88a900['attributes']=_[_0xca44('0x3e')](_0x2c21b9[_0xca44('0x3a')],qs[_0xca44('0x3f')](_0x674768[_0xca44('0x3b')]['fields']));_0x88a900[_0xca44('0x40')]=_0x88a900[_0xca44('0x40')][_0xca44('0x41')]?_0x88a900[_0xca44('0x40')]:_0x2c21b9[_0xca44('0x3a')];if(!_0x674768[_0xca44('0x3b')][_0xca44('0x42')](_0xca44('0x43'))){_0x88a900[_0xca44('0x20')]=qs[_0xca44('0x20')](_0x674768[_0xca44('0x3b')]['limit']);_0x88a900['offset']=qs[_0xca44('0x1f')](_0x674768[_0xca44('0x3b')][_0xca44('0x1f')]);}_0x88a900[_0xca44('0x44')]=qs[_0xca44('0x45')](_0x674768['query']['sort']);_0x88a900['where']=qs[_0xca44('0x3d')](_[_0xca44('0x46')](_0x674768[_0xca44('0x3b')],_0x2c21b9[_0xca44('0x3d')]));if(_0x674768['query'][_0xca44('0x2d')]){_0x88a900[_0xca44('0x47')]=_[_0xca44('0x48')](_0x88a900[_0xca44('0x47')],{'$or':_[_0xca44('0x2e')](_0x2282c0,function(_0x48ffd4){if(_0x48ffd4[_0xca44('0x31')][_0xca44('0x49')]!==_0xca44('0x4a')){var _0x4dca6e={};_0x4dca6e[_0x48ffd4[_0xca44('0x4b')]]={'$like':'%'+_0x674768[_0xca44('0x3b')][_0xca44('0x2d')]+'%'};return _0x4dca6e;}})});}_0x88a900=_['merge']({},_0x88a900,_0x674768[_0xca44('0x4c')]);var _0x2a3777={'where':_0x88a900[_0xca44('0x47')]};return db['VoiceExtension'][_0xca44('0x1e')](_0x2a3777)[_0xca44('0x27')](function(_0x2590ee){_0xf468a4[_0xca44('0x1e')]=_0x2590ee;if(_0x674768['query']['includeAll']){_0x88a900[_0xca44('0x4d')]=[{'all':!![]}];}return db[_0xca44('0x39')][_0xca44('0x4e')](_0x88a900);})['then'](function(_0x3cfa30){_0xf468a4[_0xca44('0x4f')]=_0x3cfa30;return _0xf468a4;})[_0xca44('0x27')](respondWithFilteredResult(_0x5a4359,_0x88a900))[_0xca44('0x50')](handleError(_0x5a4359,null));};exports[_0xca44('0x51')]=function(_0x31e58e,_0x22338f){var _0x4f13c8={'raw':![],'where':{'id':_0x31e58e[_0xca44('0x52')]['id']}},_0x3d1dc4={};_0x3d1dc4[_0xca44('0x3a')]=_['keys'](db[_0xca44('0x39')][_0xca44('0x53')]);_0x3d1dc4[_0xca44('0x3b')]=_['keys'](_0x31e58e[_0xca44('0x3b')]);_0x3d1dc4['filters']=_[_0xca44('0x3e')](_0x3d1dc4['model'],_0x3d1dc4['query']);_0x4f13c8[_0xca44('0x40')]=_[_0xca44('0x3e')](_0x3d1dc4[_0xca44('0x3a')],qs[_0xca44('0x3f')](_0x31e58e[_0xca44('0x3b')][_0xca44('0x3f')]));_0x4f13c8[_0xca44('0x40')]=_0x4f13c8['attributes'][_0xca44('0x41')]?_0x4f13c8[_0xca44('0x40')]:_0x3d1dc4['model'];if(_0x31e58e[_0xca44('0x3b')][_0xca44('0x54')]){_0x4f13c8[_0xca44('0x4d')]=[{'all':!![]}];}_0x4f13c8=_[_0xca44('0x48')]({},_0x4f13c8,_0x31e58e[_0xca44('0x4c')]);return db[_0xca44('0x39')][_0xca44('0x32')](_0x4f13c8)[_0xca44('0x27')](handleEntityNotFound(_0x22338f,null))[_0xca44('0x27')](respondWithResult(_0x22338f,null))[_0xca44('0x50')](handleError(_0x22338f,null));};exports['destroy']=function(_0x584df2,_0x2fbd52){return db['VoiceExtension'][_0xca44('0x32')]({'where':{'id':_0x584df2[_0xca44('0x52')]['id']}})[_0xca44('0x27')](handleEntityNotFound(_0x2fbd52,null))[_0xca44('0x27')](removeEntity(_0x2fbd52,null))[_0xca44('0x50')](handleError(_0x2fbd52,null));};exports['create']=function(_0xf8c4a3,_0x599433){if(_0xf8c4a3['body'][_0xca44('0x31')]===_0xca44('0x2a')&&!_[_0xca44('0x55')](_0xf8c4a3[_0xca44('0x56')][_0xca44('0x57')],'_')){_0xf8c4a3[_0xca44('0x56')]['exten']='_'[_0xca44('0x58')](_0xf8c4a3[_0xca44('0x56')][_0xca44('0x57')]);}return db[_0xca44('0x39')]['create'](_0xf8c4a3['body'],{'raw':![]})[_0xca44('0x27')](function(_0x2269ef){var _0x1bf518=_0xf8c4a3[_0xca44('0x59')][_0xca44('0x5a')]({'plain':!![]});if(!_0x1bf518)throw new Error(_0xca44('0x5b'));if(_0x1bf518['role']===_0xca44('0x59')){var _0x5e7fa9=_0x2269ef[_0xca44('0x5a')]({'plain':!![]});var _0x34a569=[{'name':_0xca44('0x5c'),'value':_0xca44('0x5d')},{'name':_0xca44('0x29'),'value':_0xca44('0x2a')},{'name':'InternalRoutes','value':'internal'}];var _0xf496fd=_[_0xca44('0x32')](_0x34a569,[_0xca44('0x2f'),_0x5e7fa9[_0xca44('0x31')]])[_0xca44('0x33')];return db[_0xca44('0x5e')][_0xca44('0x32')]({'where':{'name':_0xf496fd,'userProfileId':_0x1bf518[_0xca44('0x5f')]},'raw':!![]})[_0xca44('0x27')](function(_0x38d5df){if(_0x38d5df&&_0x38d5df['autoAssociation']===0x0){return db[_0xca44('0x34')][_0xca44('0x60')]({'name':_0x5e7fa9[_0xca44('0x33')],'resourceId':_0x5e7fa9['id'],'type':_0x38d5df[_0xca44('0x33')],'sectionId':_0x38d5df['id']},{})[_0xca44('0x27')](function(){return _0x2269ef;});}else{return _0x2269ef;}})['catch'](function(_0x1dc930){logger['error'](_0xca44('0x61'),_0x1dc930);throw _0x1dc930;});}return _0x2269ef;})[_0xca44('0x27')](respondWithResult(_0x599433,0xc9))[_0xca44('0x50')](handleError(_0x599433,null));};exports[_0xca44('0x26')]=function(_0x583916,_0xfb6520){if(_0x583916[_0xca44('0x56')]['id']){delete _0x583916[_0xca44('0x56')]['id'];}return db[_0xca44('0x39')][_0xca44('0x32')]({'where':{'id':_0x583916[_0xca44('0x52')]['id']}})['then'](handleEntityNotFound(_0xfb6520,null))['then'](function(_0xe9e19b){if(_0xe9e19b){return db[_0xca44('0x39')][_0xca44('0x26')](_[_0xca44('0x46')](_0x583916[_0xca44('0x56')],[_0xca44('0x57'),_0xca44('0x62'),_0xca44('0x63'),'recordingFormat','cutdigits','mandatoryDisposition']),{'where':{'context':_0xe9e19b['context'],'exten':_0xe9e19b['exten']},'individualHooks':!![]})[_0xca44('0x27')](function(_0x31f870){return _0x31f870;});}return null;})[_0xca44('0x27')](respondWithStatusCode(_0xfb6520,null))[_0xca44('0x50')](handleError(_0xfb6520,null));};exports['addApplications']=function(_0xc920c5,_0x3bcabe,_0x4e2889){return db[_0xca44('0x39')][_0xca44('0x64')]({'where':{'id':_0xc920c5[_0xca44('0x52')]['id']}})[_0xca44('0x27')](handleEntityNotFound(_0x3bcabe,null))[_0xca44('0x27')](function(_0x18571d){if(_0x18571d){return db[_0xca44('0x65')][_0xca44('0x66')](function(_0x26d4df){return db[_0xca44('0x39')][_0xca44('0x28')]({'where':{'VoiceExtensionId':_0xc920c5[_0xca44('0x52')]['id']},'transaction':_0x26d4df})[_0xca44('0x27')](function(_0x1e7d9c){var _0x3227f8=_['map'](_0xc920c5[_0xca44('0x56')],function(_0xc7f22f){_0xc7f22f[_0xca44('0x67')]=_0xc920c5['params']['id'];return _0xc7f22f;});return db[_0xca44('0x39')][_0xca44('0x68')](_0x3227f8,{'transaction':_0x26d4df});});})[_0xca44('0x27')](function(){return db[_0xca44('0x39')]['findAndCountAll']({'where':{'isApp':!![],'VoiceExtensionId':_0xc920c5[_0xca44('0x52')]['id']},'order':'cast(priority\x20as\x20unsigned)'});});}})[_0xca44('0x27')](respondWithResult(_0x3bcabe,null))[_0xca44('0x50')](handleError(_0x3bcabe,null));};
\ No newline at end of file
index 1d3a4b1..d9e7be8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x008c=['save','remove','emit','hasOwnProperty','hook','events','../../mysqldb','VoiceExtension','setMaxListeners'];(function(_0x567707,_0x164632){var _0x4f6c0f=function(_0x4f0027){while(--_0x4f0027){_0x567707['push'](_0x567707['shift']());}};_0x4f6c0f(++_0x164632);}(_0x008c,0x188));var _0xc008=function(_0x39780c,_0x5782c9){_0x39780c=_0x39780c-0x0;var _0x53c19b=_0x008c[_0x39780c];return _0x53c19b;};'use strict';var EventEmitter=require(_0xc008('0x0'));var VoiceExtension=require(_0xc008('0x1'))['db'][_0xc008('0x2')];var VoiceExtensionEvents=new EventEmitter();VoiceExtensionEvents[_0xc008('0x3')](0x0);var events={'afterCreate':_0xc008('0x4'),'afterUpdate':'update','afterDestroy':_0xc008('0x5')};function emitEvent(_0x47063f){return function(_0x10b33c,_0x163bd9,_0x1cbe76){VoiceExtensionEvents[_0xc008('0x6')](_0x47063f+':'+_0x10b33c['id'],_0x10b33c);VoiceExtensionEvents[_0xc008('0x6')](_0x47063f,_0x10b33c);_0x1cbe76(null);};}for(var e in events){if(events[_0xc008('0x7')](e)){var event=events[e];VoiceExtension[_0xc008('0x8')](e,emitEvent(event));}}module['exports']=VoiceExtensionEvents;
\ No newline at end of file
+var _0x54ef=['remove','hasOwnProperty','hook','exports','events','../../mysqldb','VoiceExtension','save','update'];(function(_0x7eb2c0,_0x5dd4d3){var _0x39cd69=function(_0x52aeaa){while(--_0x52aeaa){_0x7eb2c0['push'](_0x7eb2c0['shift']());}};_0x39cd69(++_0x5dd4d3);}(_0x54ef,0x112));var _0xf54e=function(_0x26f796,_0x51a825){_0x26f796=_0x26f796-0x0;var _0x54b335=_0x54ef[_0x26f796];return _0x54b335;};'use strict';var EventEmitter=require(_0xf54e('0x0'));var VoiceExtension=require(_0xf54e('0x1'))['db'][_0xf54e('0x2')];var VoiceExtensionEvents=new EventEmitter();VoiceExtensionEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xf54e('0x3'),'afterUpdate':_0xf54e('0x4'),'afterDestroy':_0xf54e('0x5')};function emitEvent(_0x42b9b2){return function(_0x8b6bb6,_0x431e36,_0x12d43f){VoiceExtensionEvents['emit'](_0x42b9b2+':'+_0x8b6bb6['id'],_0x8b6bb6);VoiceExtensionEvents['emit'](_0x42b9b2,_0x8b6bb6);_0x12d43f(null);};}for(var e in events){if(events[_0xf54e('0x6')](e)){var event=events[e];VoiceExtension[_0xf54e('0x7')](e,emitEvent(event));}}module[_0xf54e('0x8')]=VoiceExtensionEvents;
\ No newline at end of file
index 17a5a55..e55e085 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbbcb=['voice_extensions','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','exports','VoiceExtension'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0xbbcb,0xf1));var _0xbbbc=function(_0x3024d8,_0x3502b8){_0x3024d8=_0x3024d8-0x0;var _0x47d171=_0xbbcb[_0x3024d8];return _0x47d171;};'use strict';var _=require(_0xbbbc('0x0'));var util=require(_0xbbbc('0x1'));var logger=require(_0xbbbc('0x2'))(_0xbbbc('0x3'));var moment=require(_0xbbbc('0x4'));var BPromise=require(_0xbbbc('0x5'));var rp=require(_0xbbbc('0x6'));var fs=require('fs');var path=require(_0xbbbc('0x7'));var rimraf=require(_0xbbbc('0x8'));var config=require('../../config/environment');var attributes=require('./voiceExtension.attributes');module[_0xbbbc('0x9')]=function(_0x307ed0,_0x161339){return _0x307ed0['define'](_0xbbbc('0xa'),attributes,{'tableName':_0xbbbc('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xef24=['lodash','util','moment','bluebird','path','rimraf','../../config/environment','./voiceExtension.attributes','exports','define','VoiceExtension','voice_extensions'];(function(_0x4fca3a,_0x164caa){var _0x437132=function(_0x12c6e8){while(--_0x12c6e8){_0x4fca3a['push'](_0x4fca3a['shift']());}};_0x437132(++_0x164caa);}(_0xef24,0xf0));var _0x4ef2=function(_0x2fc98c,_0x15db6d){_0x2fc98c=_0x2fc98c-0x0;var _0x22877b=_0xef24[_0x2fc98c];return _0x22877b;};'use strict';var _=require(_0x4ef2('0x0'));var util=require(_0x4ef2('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x4ef2('0x2'));var BPromise=require(_0x4ef2('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x4ef2('0x4'));var rimraf=require(_0x4ef2('0x5'));var config=require(_0x4ef2('0x6'));var attributes=require(_0x4ef2('0x7'));module[_0x4ef2('0x8')]=function(_0x211d42,_0x529152){return _0x211d42[_0x4ef2('0x9')](_0x4ef2('0xa'),attributes,{'tableName':_0x4ef2('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d8808f4..23ba658 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4483=['message','request\x20sent','GetVoiceExtension','VoiceExtension','findAll','options','where','limit','map','include','model','attributes','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','./voiceExtension.socket','register','request','then','info','debug','VoiceExtension,\x20%s,\x20%s,\x20%s','stringify','error','VoiceExtension,\x20%s,\x20%s'];(function(_0x5b644e,_0x2e5e07){var _0x49c6bf=function(_0x3032d9){while(--_0x3032d9){_0x5b644e['push'](_0x5b644e['shift']());}};_0x49c6bf(++_0x2e5e07);}(_0x4483,0x1a3));var _0x3448=function(_0x2824ab,_0x449624){_0x2824ab=_0x2824ab-0x0;var _0x145db7=_0x4483[_0x2824ab];return _0x145db7;};'use strict';var _=require(_0x3448('0x0'));var util=require(_0x3448('0x1'));var moment=require(_0x3448('0x2'));var BPromise=require('bluebird');var rs=require(_0x3448('0x3'));var fs=require('fs');var Redis=require(_0x3448('0x4'));var db=require(_0x3448('0x5'))['db'];var utils=require(_0x3448('0x6'));var logger=require(_0x3448('0x7'))('rpc');var config=require(_0x3448('0x8'));var jayson=require(_0x3448('0x9'));var client=jayson[_0x3448('0xa')][_0x3448('0xb')]({'port':0x232a});config[_0x3448('0xc')]=_[_0x3448('0xd')](config[_0x3448('0xc')],{'host':_0x3448('0xe'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x3448('0xf'))[_0x3448('0x10')](socket);function respondWithRpcPromise(_0xc36409,_0x6f82ca,_0x3f4364){return new BPromise(function(_0x1e645a,_0x2bdf02){return client[_0x3448('0x11')](_0xc36409,_0x3f4364)[_0x3448('0x12')](function(_0x35bb7b){logger[_0x3448('0x13')]('VoiceExtension,\x20%s,\x20%s',_0x6f82ca,'request\x20sent');logger[_0x3448('0x14')](_0x3448('0x15'),_0x6f82ca,'request\x20sent',JSON[_0x3448('0x16')](_0x35bb7b));if(_0x35bb7b[_0x3448('0x17')]){if(_0x35bb7b[_0x3448('0x17')]['code']===0x1f4){logger[_0x3448('0x17')](_0x3448('0x18'),_0x6f82ca,_0x35bb7b['error'][_0x3448('0x19')]);return _0x2bdf02(_0x35bb7b[_0x3448('0x17')][_0x3448('0x19')]);}logger['error'](_0x3448('0x18'),_0x6f82ca,_0x35bb7b[_0x3448('0x17')][_0x3448('0x19')]);return _0x1e645a(_0x35bb7b[_0x3448('0x17')][_0x3448('0x19')]);}else{logger[_0x3448('0x13')](_0x3448('0x18'),_0x6f82ca,_0x3448('0x1a'));_0x1e645a(_0x35bb7b['result'][_0x3448('0x19')]);}})['catch'](function(_0x48f94a){logger['error'](_0x3448('0x18'),_0x6f82ca,_0x48f94a);_0x2bdf02(_0x48f94a);});});}exports[_0x3448('0x1b')]=function(_0xda4040){var _0x5b5e26=this;return new Promise(function(_0x3df082,_0x392c8d){return db[_0x3448('0x1c')][_0x3448('0x1d')]({'raw':_0xda4040[_0x3448('0x1e')]?_0xda4040[_0x3448('0x1e')]['raw']===undefined?!![]:![]:!![],'where':_0xda4040['options']?_0xda4040['options'][_0x3448('0x1f')]||null:null,'attributes':_0xda4040[_0x3448('0x1e')]?_0xda4040['options']['attributes']||null:null,'limit':_0xda4040[_0x3448('0x1e')]?_0xda4040[_0x3448('0x1e')][_0x3448('0x20')]||null:null,'include':_0xda4040[_0x3448('0x1e')]?_0xda4040[_0x3448('0x1e')]['include']?_[_0x3448('0x21')](_0xda4040[_0x3448('0x1e')][_0x3448('0x22')],function(_0x2088de){return{'model':db[_0x2088de[_0x3448('0x23')]],'as':_0x2088de['as'],'attributes':_0x2088de['attributes'],'include':_0x2088de[_0x3448('0x22')]?_[_0x3448('0x21')](_0x2088de['include'],function(_0x19a479){return{'model':db[_0x19a479[_0x3448('0x23')]],'as':_0x19a479['as'],'attributes':_0x19a479[_0x3448('0x24')],'include':_0x19a479[_0x3448('0x22')]?_[_0x3448('0x21')](_0x19a479[_0x3448('0x22')],function(_0x31be64){return{'model':db[_0x31be64[_0x3448('0x23')]],'as':_0x31be64['as'],'attributes':_0x31be64['attributes']};}):[]};}):[]};}):[]:[]})[_0x3448('0x12')](function(_0x450704){logger[_0x3448('0x13')]('GetVoiceExtension',_0xda4040);logger[_0x3448('0x14')]('GetVoiceExtension',_0xda4040,JSON['stringify'](_0x450704));_0x3df082(_0x450704);})['catch'](function(_0x52fb48){logger[_0x3448('0x17')]('GetVoiceExtension',_0x52fb48['message'],_0xda4040);_0x392c8d(_0x5b5e26[_0x3448('0x17')](0x1f4,_0x52fb48[_0x3448('0x19')]));});});};
\ No newline at end of file
+var _0x153f=['VoiceExtension,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','GetVoiceExtension','VoiceExtension','findAll','options','raw','where','attributes','limit','include','map','model','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','client','http','redis','localhost','socket.io-emitter','./voiceExtension.socket','register','request','then','VoiceExtension,\x20%s,\x20%s','request\x20sent','debug'];(function(_0x172851,_0x360328){var _0x339a22=function(_0x37e2f9){while(--_0x37e2f9){_0x172851['push'](_0x172851['shift']());}};_0x339a22(++_0x360328);}(_0x153f,0x15b));var _0xf153=function(_0x5767e3,_0x2eb66f){_0x5767e3=_0x5767e3-0x0;var _0x80737c=_0x153f[_0x5767e3];return _0x80737c;};'use strict';var _=require(_0xf153('0x0'));var util=require(_0xf153('0x1'));var moment=require(_0xf153('0x2'));var BPromise=require(_0xf153('0x3'));var rs=require(_0xf153('0x4'));var fs=require('fs');var Redis=require(_0xf153('0x5'));var db=require(_0xf153('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0xf153('0x7'))('rpc');var config=require(_0xf153('0x8'));var jayson=require(_0xf153('0x9'));var client=jayson[_0xf153('0xa')][_0xf153('0xb')]({'port':0x232a});config[_0xf153('0xc')]=_['defaults'](config[_0xf153('0xc')],{'host':_0xf153('0xd'),'port':0x18eb});var socket=require(_0xf153('0xe'))(new Redis(config[_0xf153('0xc')]));require(_0xf153('0xf'))[_0xf153('0x10')](socket);function respondWithRpcPromise(_0x44845c,_0x15a18b,_0x4f84b){return new BPromise(function(_0xeaccb0,_0x5c8ae9){return client[_0xf153('0x11')](_0x44845c,_0x4f84b)[_0xf153('0x12')](function(_0x2bea70){logger['info'](_0xf153('0x13'),_0x15a18b,_0xf153('0x14'));logger[_0xf153('0x15')](_0xf153('0x16'),_0x15a18b,_0xf153('0x14'),JSON[_0xf153('0x17')](_0x2bea70));if(_0x2bea70[_0xf153('0x18')]){if(_0x2bea70[_0xf153('0x18')][_0xf153('0x19')]===0x1f4){logger['error'](_0xf153('0x13'),_0x15a18b,_0x2bea70[_0xf153('0x18')][_0xf153('0x1a')]);return _0x5c8ae9(_0x2bea70[_0xf153('0x18')][_0xf153('0x1a')]);}logger[_0xf153('0x18')](_0xf153('0x13'),_0x15a18b,_0x2bea70[_0xf153('0x18')]['message']);return _0xeaccb0(_0x2bea70[_0xf153('0x18')]['message']);}else{logger[_0xf153('0x1b')](_0xf153('0x13'),_0x15a18b,_0xf153('0x14'));_0xeaccb0(_0x2bea70[_0xf153('0x1c')]['message']);}})[_0xf153('0x1d')](function(_0x19122e){logger[_0xf153('0x18')](_0xf153('0x13'),_0x15a18b,_0x19122e);_0x5c8ae9(_0x19122e);});});}exports[_0xf153('0x1e')]=function(_0x2f290f){var _0x37952f=this;return new Promise(function(_0x2db2c7,_0x3735a7){return db[_0xf153('0x1f')][_0xf153('0x20')]({'raw':_0x2f290f[_0xf153('0x21')]?_0x2f290f['options'][_0xf153('0x22')]===undefined?!![]:![]:!![],'where':_0x2f290f[_0xf153('0x21')]?_0x2f290f[_0xf153('0x21')][_0xf153('0x23')]||null:null,'attributes':_0x2f290f[_0xf153('0x21')]?_0x2f290f[_0xf153('0x21')][_0xf153('0x24')]||null:null,'limit':_0x2f290f[_0xf153('0x21')]?_0x2f290f[_0xf153('0x21')][_0xf153('0x25')]||null:null,'include':_0x2f290f[_0xf153('0x21')]?_0x2f290f[_0xf153('0x21')][_0xf153('0x26')]?_[_0xf153('0x27')](_0x2f290f[_0xf153('0x21')][_0xf153('0x26')],function(_0x141ef4){return{'model':db[_0x141ef4[_0xf153('0x28')]],'as':_0x141ef4['as'],'attributes':_0x141ef4[_0xf153('0x24')],'include':_0x141ef4[_0xf153('0x26')]?_['map'](_0x141ef4[_0xf153('0x26')],function(_0x3f1c6f){return{'model':db[_0x3f1c6f['model']],'as':_0x3f1c6f['as'],'attributes':_0x3f1c6f[_0xf153('0x24')],'include':_0x3f1c6f[_0xf153('0x26')]?_['map'](_0x3f1c6f[_0xf153('0x26')],function(_0x10295e){return{'model':db[_0x10295e[_0xf153('0x28')]],'as':_0x10295e['as'],'attributes':_0x10295e[_0xf153('0x24')]};}):[]};}):[]};}):[]:[]})[_0xf153('0x12')](function(_0x258976){logger[_0xf153('0x1b')](_0xf153('0x1e'),_0x2f290f);logger[_0xf153('0x15')](_0xf153('0x1e'),_0x2f290f,JSON[_0xf153('0x17')](_0x258976));_0x2db2c7(_0x258976);})[_0xf153('0x1d')](function(_0x5b5237){logger[_0xf153('0x18')](_0xf153('0x1e'),_0x5b5237[_0xf153('0x1a')],_0x2f290f);_0x3735a7(_0x37952f[_0xf153('0x18')](0x1f4,_0x5b5237['message']));});});};
\ No newline at end of file
index c2b46da..5c0d236 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x70e9=['register','length','voiceExtension:','./voiceExtension.events','save','remove','emit','removeListener'];(function(_0x1e4360,_0x930b9b){var _0x31e6b4=function(_0x49dd8e){while(--_0x49dd8e){_0x1e4360['push'](_0x1e4360['shift']());}};_0x31e6b4(++_0x930b9b);}(_0x70e9,0x1a3));var _0x970e=function(_0xcfc037,_0x55be32){_0xcfc037=_0xcfc037-0x0;var _0x5e4637=_0x70e9[_0xcfc037];return _0x5e4637;};'use strict';var VoiceExtensionEvents=require(_0x970e('0x0'));var events=[_0x970e('0x1'),_0x970e('0x2'),'update'];function createListener(_0x398e0f,_0x52e75a){return function(_0x3810d9){_0x52e75a[_0x970e('0x3')](_0x398e0f,_0x3810d9);};}function removeListener(_0x30fbbe,_0x5ea130){return function(){VoiceExtensionEvents[_0x970e('0x4')](_0x30fbbe,_0x5ea130);};}exports[_0x970e('0x5')]=function(_0x18f046){for(var _0x3b25f9=0x0,_0x4fbdaf=events[_0x970e('0x6')];_0x3b25f9<_0x4fbdaf;_0x3b25f9++){var _0x16fe2b=events[_0x3b25f9];var _0x51c92a=createListener(_0x970e('0x7')+_0x16fe2b,_0x18f046);VoiceExtensionEvents['on'](_0x16fe2b,_0x51c92a);}};
\ No newline at end of file
+var _0x1312=['save','remove','update','voiceExtension:'];(function(_0x43444b,_0x8cf95b){var _0x392fe5=function(_0x7a1a82){while(--_0x7a1a82){_0x43444b['push'](_0x43444b['shift']());}};_0x392fe5(++_0x8cf95b);}(_0x1312,0x148));var _0x2131=function(_0x53bf11,_0x3acb5e){_0x53bf11=_0x53bf11-0x0;var _0x3a4f47=_0x1312[_0x53bf11];return _0x3a4f47;};'use strict';var VoiceExtensionEvents=require('./voiceExtension.events');var events=[_0x2131('0x0'),_0x2131('0x1'),_0x2131('0x2')];function createListener(_0x53773,_0xa345de){return function(_0x53463a){_0xa345de['emit'](_0x53773,_0x53463a);};}function removeListener(_0xf0f6aa,_0x3857d9){return function(){VoiceExtensionEvents['removeListener'](_0xf0f6aa,_0x3857d9);};}exports['register']=function(_0xfcccc){for(var _0x3e3253=0x0,_0x2a01ae=events['length'];_0x3e3253<_0x2a01ae;_0x3e3253++){var _0x23ac53=events[_0x3e3253];var _0x283d54=createListener(_0x2131('0x3')+_0x23ac53,_0xfcccc);VoiceExtensionEvents['on'](_0x23ac53,_0x283d54);}};
\ No newline at end of file
index 1302ffa..22236ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4f6a=['isAuthenticated','show','getMessages','post','create','put','delete','destroy','exports','multer','connect-timeout','express','../../components/auth/service','../../config/environment','./voiceMail.controller','get','index','/:id'];(function(_0x5e8c71,_0x49ca90){var _0x213f07=function(_0x1e7f0b){while(--_0x1e7f0b){_0x5e8c71['push'](_0x5e8c71['shift']());}};_0x213f07(++_0x49ca90);}(_0x4f6a,0x1ef));var _0xa4f6=function(_0x2c961d,_0x106e3a){_0x2c961d=_0x2c961d-0x0;var _0xb29a42=_0x4f6a[_0x2c961d];return _0xb29a42;};'use strict';var multer=require(_0xa4f6('0x0'));var util=require('util');var path=require('path');var timeout=require(_0xa4f6('0x1'));var express=require(_0xa4f6('0x2'));var router=express['Router']();var auth=require(_0xa4f6('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0xa4f6('0x4'));var controller=require(_0xa4f6('0x5'));router[_0xa4f6('0x6')]('/',auth['isAuthenticated'](),controller[_0xa4f6('0x7')]);router[_0xa4f6('0x6')](_0xa4f6('0x8'),auth[_0xa4f6('0x9')](),controller[_0xa4f6('0xa')]);router['get']('/:id/messages',auth[_0xa4f6('0x9')](),controller[_0xa4f6('0xb')]);router[_0xa4f6('0xc')]('/',auth[_0xa4f6('0x9')](),controller[_0xa4f6('0xd')]);router[_0xa4f6('0xe')]('/:id',auth[_0xa4f6('0x9')](),controller['update']);router[_0xa4f6('0xf')]('/:id',auth[_0xa4f6('0x9')](),controller[_0xa4f6('0x10')]);module[_0xa4f6('0x11')]=router;
\ No newline at end of file
+var _0x765f=['exports','path','connect-timeout','Router','../../components/auth/service','../../config/environment','./voiceMail.controller','get','isAuthenticated','index','/:id','show','/:id/messages','post','put','update','destroy'];(function(_0x1f270f,_0x1f91e9){var _0x3a8a32=function(_0x362edb){while(--_0x362edb){_0x1f270f['push'](_0x1f270f['shift']());}};_0x3a8a32(++_0x1f91e9);}(_0x765f,0x166));var _0xf765=function(_0x228515,_0x47238b){_0x228515=_0x228515-0x0;var _0x214199=_0x765f[_0x228515];return _0x214199;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xf765('0x0'));var timeout=require(_0xf765('0x1'));var express=require('express');var router=express[_0xf765('0x2')]();var auth=require(_0xf765('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0xf765('0x4'));var controller=require(_0xf765('0x5'));router[_0xf765('0x6')]('/',auth[_0xf765('0x7')](),controller[_0xf765('0x8')]);router[_0xf765('0x6')](_0xf765('0x9'),auth[_0xf765('0x7')](),controller[_0xf765('0xa')]);router['get'](_0xf765('0xb'),auth[_0xf765('0x7')](),controller['getMessages']);router[_0xf765('0xc')]('/',auth[_0xf765('0x7')](),controller['create']);router[_0xf765('0xd')](_0xf765('0x9'),auth['isAuthenticated'](),controller[_0xf765('0xe')]);router['delete'](_0xf765('0x9'),auth[_0xf765('0x7')](),controller[_0xf765('0xf')]);module[_0xf765('0x10')]=router;
\ No newline at end of file
index 0a1d520..2eea391 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc1c8=['VIRTUAL','getDataValue','fullname','\x20-\x20','mailbox','sequelize','STRING','from-voicemail','contest_mailbox','setDataValue','email','string','trim','central','ENUM','yes','TINYINT(4)','TIMESTAMP','INTEGER'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xc1c8,0x64));var _0x8c1c=function(_0x2b8568,_0x2c8f64){_0x2b8568=_0x2b8568-0x0;var _0x2d7321=_0xc1c8[_0x2b8568];return _0x2d7321;};'use strict';var Sequelize=require(_0x8c1c('0x0'));module['exports']={'customer_id':{'type':Sequelize[_0x8c1c('0x1')]},'context':{'type':Sequelize[_0x8c1c('0x1')],'defaultValue':_0x8c1c('0x2'),'unique':_0x8c1c('0x3')},'mailbox':{'type':Sequelize[_0x8c1c('0x1')],'defaultValue':'','allowNull':![],'unique':_0x8c1c('0x3')},'password':{'type':Sequelize[_0x8c1c('0x1')]},'fullname':{'type':Sequelize['STRING']},'email':{'type':Sequelize[_0x8c1c('0x1')],'validate':{'isEmail':!![]},'set':function(_0x258148){this[_0x8c1c('0x4')](_0x8c1c('0x5'),typeof _0x258148===_0x8c1c('0x6')&&_0x258148[_0x8c1c('0x7')]()?_0x258148['trim']():null);}},'pager':{'type':Sequelize[_0x8c1c('0x1')]},'tz':{'type':Sequelize[_0x8c1c('0x1')],'defaultValue':_0x8c1c('0x8')},'attach':{'type':Sequelize[_0x8c1c('0x9')]('yes','no'),'defaultValue':_0x8c1c('0xa'),'allowNull':![]},'saycid':{'type':Sequelize[_0x8c1c('0x9')](_0x8c1c('0xa'),'no'),'defaultValue':_0x8c1c('0xa'),'allowNull':![]},'dialout':{'type':Sequelize[_0x8c1c('0x1')]},'callback':{'type':Sequelize[_0x8c1c('0x1')]},'review':{'type':Sequelize['ENUM'](_0x8c1c('0xa'),'no'),'defaultValue':'no','allowNull':![]},'operator':{'type':Sequelize[_0x8c1c('0x9')](_0x8c1c('0xa'),'no'),'defaultValue':'no','allowNull':![]},'envelope':{'type':Sequelize[_0x8c1c('0x9')](_0x8c1c('0xa'),'no'),'defaultValue':'no','allowNull':![]},'sayduration':{'type':Sequelize[_0x8c1c('0x9')](_0x8c1c('0xa'),'no'),'defaultValue':'no','allowNull':![]},'saydurationm':{'type':_0x8c1c('0xb'),'defaultValue':0x1,'allowNull':![]},'sendvoicemail':{'type':Sequelize[_0x8c1c('0x9')](_0x8c1c('0xa'),'no'),'defaultValue':'no','allowNull':![]},'delete':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':'no','allowNull':![]},'nextaftercmd':{'type':Sequelize[_0x8c1c('0x9')]('yes','no'),'defaultValue':_0x8c1c('0xa'),'allowNull':![]},'forcename':{'type':Sequelize[_0x8c1c('0x9')]('yes','no'),'defaultValue':'no','allowNull':![]},'forcegreetings':{'type':Sequelize[_0x8c1c('0x9')](_0x8c1c('0xa'),'no'),'defaultValue':'no','allowNull':![]},'hidefromdir':{'type':Sequelize[_0x8c1c('0x9')]('yes','no'),'defaultValue':_0x8c1c('0xa'),'allowNull':![]},'stamp':{'type':_0x8c1c('0xc')},'emailsubject':{'type':Sequelize[_0x8c1c('0x1')]},'emailbody':{'type':Sequelize['STRING']},'maxsecs':{'type':Sequelize[_0x8c1c('0xd')](0xff),'defaultValue':0xb4,'allowNull':![]},'maxmsg':{'type':Sequelize[_0x8c1c('0xd')](0xff),'defaultValue':0x64,'allowNull':![]},'name':{'type':Sequelize[_0x8c1c('0xe')],'get':function(){return this[_0x8c1c('0xf')](_0x8c1c('0x10'))+_0x8c1c('0x11')+this[_0x8c1c('0xf')](_0x8c1c('0x12'));}}};
\ No newline at end of file
+var _0x71d5=['VIRTUAL','fullname','\x20-\x20','getDataValue','mailbox','exports','STRING','contest_mailbox','setDataValue','email','string','trim','central','ENUM','yes','TINYINT(4)','TIMESTAMP','INTEGER'];(function(_0x3c8e9a,_0x384306){var _0x2d4c57=function(_0x43d408){while(--_0x43d408){_0x3c8e9a['push'](_0x3c8e9a['shift']());}};_0x2d4c57(++_0x384306);}(_0x71d5,0xef));var _0x571d=function(_0x5a2de6,_0x160e3c){_0x5a2de6=_0x5a2de6-0x0;var _0x95affb=_0x71d5[_0x5a2de6];return _0x95affb;};'use strict';var Sequelize=require('sequelize');module[_0x571d('0x0')]={'customer_id':{'type':Sequelize['STRING']},'context':{'type':Sequelize[_0x571d('0x1')],'defaultValue':'from-voicemail','unique':_0x571d('0x2')},'mailbox':{'type':Sequelize['STRING'],'defaultValue':'','allowNull':![],'unique':_0x571d('0x2')},'password':{'type':Sequelize[_0x571d('0x1')]},'fullname':{'type':Sequelize[_0x571d('0x1')]},'email':{'type':Sequelize[_0x571d('0x1')],'validate':{'isEmail':!![]},'set':function(_0x13c551){this[_0x571d('0x3')](_0x571d('0x4'),typeof _0x13c551===_0x571d('0x5')&&_0x13c551[_0x571d('0x6')]()?_0x13c551[_0x571d('0x6')]():null);}},'pager':{'type':Sequelize[_0x571d('0x1')]},'tz':{'type':Sequelize['STRING'],'defaultValue':_0x571d('0x7')},'attach':{'type':Sequelize[_0x571d('0x8')](_0x571d('0x9'),'no'),'defaultValue':_0x571d('0x9'),'allowNull':![]},'saycid':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':_0x571d('0x9'),'allowNull':![]},'dialout':{'type':Sequelize[_0x571d('0x1')]},'callback':{'type':Sequelize['STRING']},'review':{'type':Sequelize[_0x571d('0x8')](_0x571d('0x9'),'no'),'defaultValue':'no','allowNull':![]},'operator':{'type':Sequelize['ENUM'](_0x571d('0x9'),'no'),'defaultValue':'no','allowNull':![]},'envelope':{'type':Sequelize['ENUM'](_0x571d('0x9'),'no'),'defaultValue':'no','allowNull':![]},'sayduration':{'type':Sequelize[_0x571d('0x8')](_0x571d('0x9'),'no'),'defaultValue':'no','allowNull':![]},'saydurationm':{'type':_0x571d('0xa'),'defaultValue':0x1,'allowNull':![]},'sendvoicemail':{'type':Sequelize[_0x571d('0x8')](_0x571d('0x9'),'no'),'defaultValue':'no','allowNull':![]},'delete':{'type':Sequelize[_0x571d('0x8')]('yes','no'),'defaultValue':'no','allowNull':![]},'nextaftercmd':{'type':Sequelize[_0x571d('0x8')]('yes','no'),'defaultValue':_0x571d('0x9'),'allowNull':![]},'forcename':{'type':Sequelize[_0x571d('0x8')](_0x571d('0x9'),'no'),'defaultValue':'no','allowNull':![]},'forcegreetings':{'type':Sequelize[_0x571d('0x8')](_0x571d('0x9'),'no'),'defaultValue':'no','allowNull':![]},'hidefromdir':{'type':Sequelize['ENUM'](_0x571d('0x9'),'no'),'defaultValue':_0x571d('0x9'),'allowNull':![]},'stamp':{'type':_0x571d('0xb')},'emailsubject':{'type':Sequelize[_0x571d('0x1')]},'emailbody':{'type':Sequelize[_0x571d('0x1')]},'maxsecs':{'type':Sequelize[_0x571d('0xc')](0xff),'defaultValue':0xb4,'allowNull':![]},'maxmsg':{'type':Sequelize[_0x571d('0xc')](0xff),'defaultValue':0x64,'allowNull':![]},'name':{'type':Sequelize[_0x571d('0xd')],'get':function(){return this['getDataValue'](_0x571d('0xe'))+_0x571d('0xf')+this[_0x571d('0x10')](_0x571d('0x11'));}}};
\ No newline at end of file
index e4dbceb..fb698b8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0752=['crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','reject','then','destroy','get','Voicemails','UserProfileResource','error','stack','name','send','index','VoiceMail','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','type','key','VIRTUAL','field','filter','merge','options','include','findAll','rows','catch','show','params','includeAll','find','create','user','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','findOne','VoiceMailMessage','pick','map','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','squel'];(function(_0x469add,_0x50ef21){var _0x2e8a26=function(_0x39a4d6){while(--_0x39a4d6){_0x469add['push'](_0x469add['shift']());}};_0x2e8a26(++_0x50ef21);}(_0x0752,0xf6));var _0x2075=function(_0x3ff4ab,_0x365001){_0x3ff4ab=_0x3ff4ab-0x0;var _0x1c1a09=_0x0752[_0x3ff4ab];return _0x1c1a09;};'use strict';var pdf=require(_0x2075('0x0'));var emlformat=require(_0x2075('0x1'));var rimraf=require(_0x2075('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x2075('0x3'));var rp=require(_0x2075('0x4'));var moment=require('moment');var BPromise=require(_0x2075('0x5'));var Mustache=require(_0x2075('0x6'));var util=require(_0x2075('0x7'));var path=require(_0x2075('0x8'));var sox=require(_0x2075('0x9'));var csv=require(_0x2075('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x2075('0xb'));var crypto=require(_0x2075('0xc'));var jsforce=require(_0x2075('0xd'));var deskjs=require(_0x2075('0xe'));var toCsv=require(_0x2075('0xa'));var querystring=require(_0x2075('0xf'));var Papa=require(_0x2075('0x10'));var Redis=require(_0x2075('0x11'));var authService=require(_0x2075('0x12'));var qs=require(_0x2075('0x13'));var hardwareService=require(_0x2075('0x14'));var logger=require(_0x2075('0x15'))(_0x2075('0x16'));var utils=require('../../config/utils');var config=require(_0x2075('0x17'));var db=require(_0x2075('0x18'))['db'];function respondWithStatusCode(_0x4a9181,_0x26308d){_0x26308d=_0x26308d||0xcc;return function(_0x1f8e19){if(_0x1f8e19){return _0x4a9181[_0x2075('0x19')](_0x26308d);}return _0x4a9181[_0x2075('0x1a')](_0x26308d)[_0x2075('0x1b')]();};}function respondWithResult(_0x485ada,_0x3cea53){_0x3cea53=_0x3cea53||0xc8;return function(_0x51ed8e){if(_0x51ed8e){return _0x485ada[_0x2075('0x1a')](_0x3cea53)[_0x2075('0x1c')](_0x51ed8e);}};}function respondWithFilteredResult(_0x251110,_0x5cc0ba){return function(_0x595f5a){if(_0x595f5a){var _0x3a7304=_0x595f5a[_0x2075('0x1d')],_0x3fc803=_0x5cc0ba[_0x2075('0x1e')],_0x2a4db7=_0x5cc0ba['offset']+_0x5cc0ba[_0x2075('0x1f')],_0x14e40d;if(_0x2a4db7>=_0x3a7304){_0x2a4db7=_0x3a7304;_0x14e40d=0xc8;}else{_0x14e40d=0xce;}_0x251110[_0x2075('0x1a')](_0x14e40d);return _0x251110[_0x2075('0x20')]('Content-Range',_0x3fc803+'-'+_0x2a4db7+'/'+_0x3a7304)[_0x2075('0x1c')](_0x595f5a);}return null;};}function patchUpdates(_0x507b88){return function(_0x1c2683){try{jsonpatch['apply'](_0x1c2683,_0x507b88,!![]);}catch(_0x149907){return BPromise[_0x2075('0x21')](_0x149907);}return _0x1c2683['save']();};}function saveUpdates(_0x3a0db5,_0x58431e){return function(_0x32c064){if(_0x32c064){return _0x32c064['update'](_0x3a0db5)[_0x2075('0x22')](function(_0x3cabf3){return _0x3cabf3;});}return null;};}function removeEntity(_0x4e30c0,_0x114e56){return function(_0x57b0d3){if(_0x57b0d3){return _0x57b0d3[_0x2075('0x23')]()[_0x2075('0x22')](function(){var _0x27aaa7=_0x57b0d3[_0x2075('0x24')]({'plain':!![]});var _0x148a84=_0x2075('0x25');return db[_0x2075('0x26')][_0x2075('0x23')]({'where':{'type':_0x148a84,'resourceId':_0x27aaa7['id']}})[_0x2075('0x22')](function(){return _0x57b0d3;});})[_0x2075('0x22')](function(){_0x4e30c0[_0x2075('0x1a')](0xcc)[_0x2075('0x1b')]();});}};}function handleEntityNotFound(_0x121b99,_0x474981){return function(_0x3f5464){if(!_0x3f5464){_0x121b99[_0x2075('0x19')](0x194);}return _0x3f5464;};}function handleError(_0x17cb33,_0x287d23){_0x287d23=_0x287d23||0x1f4;return function(_0xd47a91){logger[_0x2075('0x27')](_0xd47a91[_0x2075('0x28')]);if(_0xd47a91[_0x2075('0x29')]){delete _0xd47a91['name'];}_0x17cb33[_0x2075('0x1a')](_0x287d23)[_0x2075('0x2a')](_0xd47a91);};}exports[_0x2075('0x2b')]=function(_0x2bc469,_0x242108){var _0x3e7d7b={},_0x6bf25b={},_0x507069={'count':0x0,'rows':[]};var _0x3d0aa0=db[_0x2075('0x2c')][_0x2075('0x2d')];_0x6bf25b[_0x2075('0x2e')]=_[_0x2075('0x2f')](_0x3d0aa0);_0x6bf25b[_0x2075('0x30')]=_[_0x2075('0x2f')](_0x2bc469['query']);_0x6bf25b[_0x2075('0x31')]=_[_0x2075('0x32')](_0x6bf25b['model'],_0x6bf25b[_0x2075('0x30')]);_0x3e7d7b[_0x2075('0x33')]=_['intersection'](_0x6bf25b[_0x2075('0x2e')],qs[_0x2075('0x34')](_0x2bc469['query'][_0x2075('0x34')]));_0x3e7d7b[_0x2075('0x33')]=_0x3e7d7b[_0x2075('0x33')][_0x2075('0x35')]?_0x3e7d7b['attributes']:_0x6bf25b[_0x2075('0x2e')];if(!_0x2bc469[_0x2075('0x30')][_0x2075('0x36')](_0x2075('0x37'))){_0x3e7d7b['limit']=qs[_0x2075('0x1f')](_0x2bc469[_0x2075('0x30')]['limit']);_0x3e7d7b['offset']=qs[_0x2075('0x1e')](_0x2bc469[_0x2075('0x30')][_0x2075('0x1e')]);}_0x3e7d7b[_0x2075('0x38')]=qs[_0x2075('0x39')](_0x2bc469[_0x2075('0x30')][_0x2075('0x39')]);_0x3e7d7b[_0x2075('0x3a')]=qs[_0x2075('0x31')](_['pick'](_0x2bc469['query'],_0x6bf25b[_0x2075('0x31')]));if(_0x2bc469['query']['filter']){_0x3e7d7b[_0x2075('0x3a')]=_['merge'](_0x3e7d7b[_0x2075('0x3a')],{'$or':_['map'](_0x3d0aa0,function(_0x42a8d7){if(_0x42a8d7[_0x2075('0x3b')][_0x2075('0x3c')]!==_0x2075('0x3d')){var _0x10a97d={};_0x10a97d[_0x42a8d7[_0x2075('0x3e')]]={'$like':'%'+_0x2bc469[_0x2075('0x30')][_0x2075('0x3f')]+'%'};return _0x10a97d;}})});}_0x3e7d7b=_[_0x2075('0x40')]({},_0x3e7d7b,_0x2bc469[_0x2075('0x41')]);var _0x4f047f={'where':_0x3e7d7b[_0x2075('0x3a')]};return db[_0x2075('0x2c')][_0x2075('0x1d')](_0x4f047f)[_0x2075('0x22')](function(_0x387b5e){_0x507069[_0x2075('0x1d')]=_0x387b5e;if(_0x2bc469['query']['includeAll']){_0x3e7d7b[_0x2075('0x42')]=[{'all':!![]}];}return db['VoiceMail'][_0x2075('0x43')](_0x3e7d7b);})[_0x2075('0x22')](function(_0x181d28){_0x507069[_0x2075('0x44')]=_0x181d28;return _0x507069;})[_0x2075('0x22')](respondWithFilteredResult(_0x242108,_0x3e7d7b))[_0x2075('0x45')](handleError(_0x242108,null));};exports[_0x2075('0x46')]=function(_0x4d774d,_0x478a27){var _0x55c339={'raw':!![],'where':{'id':_0x4d774d[_0x2075('0x47')]['id']}},_0x4a2add={};_0x4a2add[_0x2075('0x2e')]=_['keys'](db[_0x2075('0x2c')][_0x2075('0x2d')]);_0x4a2add[_0x2075('0x30')]=_['keys'](_0x4d774d[_0x2075('0x30')]);_0x4a2add[_0x2075('0x31')]=_[_0x2075('0x32')](_0x4a2add[_0x2075('0x2e')],_0x4a2add['query']);_0x55c339['attributes']=_[_0x2075('0x32')](_0x4a2add['model'],qs[_0x2075('0x34')](_0x4d774d[_0x2075('0x30')][_0x2075('0x34')]));_0x55c339[_0x2075('0x33')]=_0x55c339[_0x2075('0x33')][_0x2075('0x35')]?_0x55c339[_0x2075('0x33')]:_0x4a2add[_0x2075('0x2e')];if(_0x4d774d['query'][_0x2075('0x48')]){_0x55c339['include']=[{'all':!![]}];}_0x55c339=_['merge']({},_0x55c339,_0x4d774d[_0x2075('0x41')]);return db[_0x2075('0x2c')][_0x2075('0x49')](_0x55c339)[_0x2075('0x22')](handleEntityNotFound(_0x478a27,null))['then'](respondWithResult(_0x478a27,null))[_0x2075('0x45')](handleError(_0x478a27,null));};exports[_0x2075('0x4a')]=function(_0x23db58,_0x498f1c){return db[_0x2075('0x2c')][_0x2075('0x4a')](_0x23db58['body'],{})[_0x2075('0x22')](function(_0x3bdbe6){var _0x4f5b83=_0x23db58[_0x2075('0x4b')][_0x2075('0x24')]({'plain':!![]});if(!_0x4f5b83)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x4f5b83[_0x2075('0x4c')]==='user'){var _0x3723a7=_0x3bdbe6[_0x2075('0x24')]({'plain':!![]});var _0x3b8531=_0x2075('0x25');return db[_0x2075('0x4d')][_0x2075('0x49')]({'where':{'name':_0x3b8531,'userProfileId':_0x4f5b83[_0x2075('0x4e')]},'raw':!![]})[_0x2075('0x22')](function(_0x54f411){if(_0x54f411&&_0x54f411[_0x2075('0x4f')]===0x0){return db['UserProfileResource'][_0x2075('0x4a')]({'name':_0x3723a7[_0x2075('0x29')],'resourceId':_0x3723a7['id'],'type':_0x54f411[_0x2075('0x29')],'sectionId':_0x54f411['id']},{})['then'](function(){return _0x3bdbe6;});}else{return _0x3bdbe6;}})['catch'](function(_0x1dd5b9){logger[_0x2075('0x27')](_0x2075('0x50'),_0x1dd5b9);throw _0x1dd5b9;});}return _0x3bdbe6;})[_0x2075('0x22')](respondWithResult(_0x498f1c,0xc9))['catch'](handleError(_0x498f1c,null));};exports['update']=function(_0x18da9d,_0x2d6f50){if(_0x18da9d[_0x2075('0x51')]['id']){delete _0x18da9d[_0x2075('0x51')]['id'];}return db['VoiceMail']['find']({'where':{'id':_0x18da9d[_0x2075('0x47')]['id']}})[_0x2075('0x22')](handleEntityNotFound(_0x2d6f50,null))[_0x2075('0x22')](saveUpdates(_0x18da9d['body'],null))[_0x2075('0x22')](respondWithResult(_0x2d6f50,null))[_0x2075('0x45')](handleError(_0x2d6f50,null));};exports['destroy']=function(_0x384cfe,_0x377bdb){return db[_0x2075('0x2c')][_0x2075('0x49')]({'where':{'id':_0x384cfe['params']['id']}})['then'](handleEntityNotFound(_0x377bdb,null))['then'](removeEntity(_0x377bdb,null))['catch'](handleError(_0x377bdb,null));};exports['getMessages']=function(_0x248fba,_0x39fb02,_0x482f23){return db[_0x2075('0x2c')][_0x2075('0x52')]({'where':{'id':_0x248fba[_0x2075('0x47')]['id']}})['then'](handleEntityNotFound(_0x39fb02,null))['then'](function(_0x2d1679){var _0x1a1b53;var _0x3145be={},_0x20369f={};_0x20369f[_0x2075('0x2e')]=_['keys'](db[_0x2075('0x53')][_0x2075('0x2d')]);_0x20369f['query']=_[_0x2075('0x2f')](_0x248fba['query']);_0x20369f[_0x2075('0x31')]=_['intersection'](_0x20369f['model'],_0x20369f[_0x2075('0x30')]);_0x3145be['attributes']=_[_0x2075('0x32')](_0x20369f['model'],qs[_0x2075('0x34')](_0x248fba[_0x2075('0x30')][_0x2075('0x34')]));_0x3145be[_0x2075('0x33')]=_0x3145be[_0x2075('0x33')][_0x2075('0x35')]?_0x3145be[_0x2075('0x33')]:_0x20369f[_0x2075('0x2e')];if(!_0x248fba[_0x2075('0x30')]['hasOwnProperty'](_0x2075('0x37'))){_0x3145be[_0x2075('0x1f')]=qs[_0x2075('0x1f')](_0x248fba[_0x2075('0x30')][_0x2075('0x1f')]);_0x3145be[_0x2075('0x1e')]=qs[_0x2075('0x1e')](_0x248fba['query']['offset']);}_0x3145be[_0x2075('0x38')]=qs[_0x2075('0x39')](_0x248fba[_0x2075('0x30')][_0x2075('0x39')]);_0x3145be[_0x2075('0x3a')]=qs[_0x2075('0x31')](_[_0x2075('0x54')](_0x248fba['query'],_0x20369f[_0x2075('0x31')]));if(_0x248fba[_0x2075('0x30')][_0x2075('0x3f')]){_0x3145be[_0x2075('0x3a')]=_[_0x2075('0x40')](_0x3145be[_0x2075('0x3a')],{'$or':_[_0x2075('0x55')](_0x3145be[_0x2075('0x33')],function(_0x44f0e1){var _0x36faee={};_0x36faee[_0x44f0e1]={'$like':'%'+_0x248fba['query'][_0x2075('0x3f')]+'%'};return _0x36faee;})});}_0x3145be[_0x2075('0x3a')]=_[_0x2075('0x40')](_0x3145be[_0x2075('0x3a')],{'mailboxuser':_0x2d1679['mailbox']});_0x3145be=_[_0x2075('0x40')]({},_0x3145be,_0x248fba[_0x2075('0x41')]);return db[_0x2075('0x53')]['findAndCountAll'](_0x3145be)['then'](respondWithFilteredResult(_0x39fb02,_0x3145be));})[_0x2075('0x45')](handleError(_0x39fb02,null));};
\ No newline at end of file
+var _0x2b5e=['includeAll','include','findAll','rows','catch','show','params','rawAttributes','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','getMessages','findOne','VoiceMailMessage','pick','mailbox','findAndCountAll','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','squel','jsforce','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','set','Content-Range','apply','reject','save','update','then','destroy','get','UserProfileResource','error','stack','name','send','index','model','keys','query','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','filters','filter','where','merge','map','type','VIRTUAL','field','options','VoiceMail','count'];(function(_0xdf3db6,_0x2a1952){var _0x4b7a65=function(_0x2953be){while(--_0x2953be){_0xdf3db6['push'](_0xdf3db6['shift']());}};_0x4b7a65(++_0x2a1952);}(_0x2b5e,0x128));var _0xe2b5=function(_0x2fd69d,_0xeb1037){_0x2fd69d=_0x2fd69d-0x0;var _0x5d5ef3=_0x2b5e[_0x2fd69d];return _0x5d5ef3;};'use strict';var pdf=require(_0xe2b5('0x0'));var emlformat=require(_0xe2b5('0x1'));var rimraf=require(_0xe2b5('0x2'));var zipdir=require(_0xe2b5('0x3'));var jsonpatch=require(_0xe2b5('0x4'));var rp=require(_0xe2b5('0x5'));var moment=require(_0xe2b5('0x6'));var BPromise=require(_0xe2b5('0x7'));var Mustache=require(_0xe2b5('0x8'));var util=require(_0xe2b5('0x9'));var path=require('path');var sox=require(_0xe2b5('0xa'));var csv=require(_0xe2b5('0xb'));var ejs=require(_0xe2b5('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0xe2b5('0xd'));var crypto=require('crypto');var jsforce=require(_0xe2b5('0xe'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xe2b5('0xf'));var Papa=require('papaparse');var Redis=require(_0xe2b5('0x10'));var authService=require(_0xe2b5('0x11'));var qs=require(_0xe2b5('0x12'));var hardwareService=require(_0xe2b5('0x13'));var logger=require(_0xe2b5('0x14'))(_0xe2b5('0x15'));var utils=require(_0xe2b5('0x16'));var config=require(_0xe2b5('0x17'));var db=require(_0xe2b5('0x18'))['db'];function respondWithStatusCode(_0x50dd12,_0x5b7c45){_0x5b7c45=_0x5b7c45||0xcc;return function(_0x49d594){if(_0x49d594){return _0x50dd12[_0xe2b5('0x19')](_0x5b7c45);}return _0x50dd12[_0xe2b5('0x1a')](_0x5b7c45)[_0xe2b5('0x1b')]();};}function respondWithResult(_0xe5396b,_0x576618){_0x576618=_0x576618||0xc8;return function(_0x2e4716){if(_0x2e4716){return _0xe5396b['status'](_0x576618)[_0xe2b5('0x1c')](_0x2e4716);}};}function respondWithFilteredResult(_0x23bc7c,_0xa65405){return function(_0x4bb124){if(_0x4bb124){var _0x12898e=_0x4bb124['count'],_0x6d7f2a=_0xa65405['offset'],_0x5ba785=_0xa65405[_0xe2b5('0x1d')]+_0xa65405['limit'],_0xc64ef5;if(_0x5ba785>=_0x12898e){_0x5ba785=_0x12898e;_0xc64ef5=0xc8;}else{_0xc64ef5=0xce;}_0x23bc7c[_0xe2b5('0x1a')](_0xc64ef5);return _0x23bc7c[_0xe2b5('0x1e')](_0xe2b5('0x1f'),_0x6d7f2a+'-'+_0x5ba785+'/'+_0x12898e)['json'](_0x4bb124);}return null;};}function patchUpdates(_0x4656c1){return function(_0x3af1da){try{jsonpatch[_0xe2b5('0x20')](_0x3af1da,_0x4656c1,!![]);}catch(_0x444a22){return BPromise[_0xe2b5('0x21')](_0x444a22);}return _0x3af1da[_0xe2b5('0x22')]();};}function saveUpdates(_0x2fd3b4,_0x4c2661){return function(_0x3e8208){if(_0x3e8208){return _0x3e8208[_0xe2b5('0x23')](_0x2fd3b4)[_0xe2b5('0x24')](function(_0x168eab){return _0x168eab;});}return null;};}function removeEntity(_0x341edb,_0x4a2b32){return function(_0x308aa0){if(_0x308aa0){return _0x308aa0[_0xe2b5('0x25')]()[_0xe2b5('0x24')](function(){var _0x39e0e5=_0x308aa0[_0xe2b5('0x26')]({'plain':!![]});var _0x535f6d='Voicemails';return db[_0xe2b5('0x27')][_0xe2b5('0x25')]({'where':{'type':_0x535f6d,'resourceId':_0x39e0e5['id']}})[_0xe2b5('0x24')](function(){return _0x308aa0;});})['then'](function(){_0x341edb[_0xe2b5('0x1a')](0xcc)[_0xe2b5('0x1b')]();});}};}function handleEntityNotFound(_0x458d1f,_0x594a28){return function(_0x67b00){if(!_0x67b00){_0x458d1f[_0xe2b5('0x19')](0x194);}return _0x67b00;};}function handleError(_0x200208,_0x4ab411){_0x4ab411=_0x4ab411||0x1f4;return function(_0x4779e7){logger[_0xe2b5('0x28')](_0x4779e7[_0xe2b5('0x29')]);if(_0x4779e7[_0xe2b5('0x2a')]){delete _0x4779e7[_0xe2b5('0x2a')];}_0x200208[_0xe2b5('0x1a')](_0x4ab411)[_0xe2b5('0x2b')](_0x4779e7);};}exports[_0xe2b5('0x2c')]=function(_0xde482b,_0x4f9e6e){var _0x1caf28={},_0x19f34e={},_0x31cde9={'count':0x0,'rows':[]};var _0x463acd=db['VoiceMail']['rawAttributes'];_0x19f34e[_0xe2b5('0x2d')]=_[_0xe2b5('0x2e')](_0x463acd);_0x19f34e[_0xe2b5('0x2f')]=_[_0xe2b5('0x2e')](_0xde482b[_0xe2b5('0x2f')]);_0x19f34e['filters']=_[_0xe2b5('0x30')](_0x19f34e[_0xe2b5('0x2d')],_0x19f34e[_0xe2b5('0x2f')]);_0x1caf28['attributes']=_[_0xe2b5('0x30')](_0x19f34e[_0xe2b5('0x2d')],qs[_0xe2b5('0x31')](_0xde482b[_0xe2b5('0x2f')]['fields']));_0x1caf28[_0xe2b5('0x32')]=_0x1caf28[_0xe2b5('0x32')][_0xe2b5('0x33')]?_0x1caf28[_0xe2b5('0x32')]:_0x19f34e['model'];if(!_0xde482b['query'][_0xe2b5('0x34')](_0xe2b5('0x35'))){_0x1caf28['limit']=qs['limit'](_0xde482b[_0xe2b5('0x2f')][_0xe2b5('0x36')]);_0x1caf28[_0xe2b5('0x1d')]=qs[_0xe2b5('0x1d')](_0xde482b[_0xe2b5('0x2f')][_0xe2b5('0x1d')]);}_0x1caf28[_0xe2b5('0x37')]=qs[_0xe2b5('0x38')](_0xde482b['query'][_0xe2b5('0x38')]);_0x1caf28['where']=qs[_0xe2b5('0x39')](_['pick'](_0xde482b[_0xe2b5('0x2f')],_0x19f34e['filters']));if(_0xde482b[_0xe2b5('0x2f')][_0xe2b5('0x3a')]){_0x1caf28[_0xe2b5('0x3b')]=_[_0xe2b5('0x3c')](_0x1caf28[_0xe2b5('0x3b')],{'$or':_[_0xe2b5('0x3d')](_0x463acd,function(_0x22a1de){if(_0x22a1de[_0xe2b5('0x3e')]['key']!==_0xe2b5('0x3f')){var _0x362820={};_0x362820[_0x22a1de[_0xe2b5('0x40')]]={'$like':'%'+_0xde482b[_0xe2b5('0x2f')]['filter']+'%'};return _0x362820;}})});}_0x1caf28=_['merge']({},_0x1caf28,_0xde482b[_0xe2b5('0x41')]);var _0x1c4331={'where':_0x1caf28[_0xe2b5('0x3b')]};return db[_0xe2b5('0x42')][_0xe2b5('0x43')](_0x1c4331)[_0xe2b5('0x24')](function(_0x57e5a9){_0x31cde9[_0xe2b5('0x43')]=_0x57e5a9;if(_0xde482b['query'][_0xe2b5('0x44')]){_0x1caf28[_0xe2b5('0x45')]=[{'all':!![]}];}return db[_0xe2b5('0x42')][_0xe2b5('0x46')](_0x1caf28);})[_0xe2b5('0x24')](function(_0x2f4e38){_0x31cde9[_0xe2b5('0x47')]=_0x2f4e38;return _0x31cde9;})['then'](respondWithFilteredResult(_0x4f9e6e,_0x1caf28))[_0xe2b5('0x48')](handleError(_0x4f9e6e,null));};exports[_0xe2b5('0x49')]=function(_0x36ce01,_0x58c275){var _0xb7b5c3={'raw':!![],'where':{'id':_0x36ce01[_0xe2b5('0x4a')]['id']}},_0x123b1e={};_0x123b1e[_0xe2b5('0x2d')]=_[_0xe2b5('0x2e')](db[_0xe2b5('0x42')][_0xe2b5('0x4b')]);_0x123b1e['query']=_[_0xe2b5('0x2e')](_0x36ce01['query']);_0x123b1e[_0xe2b5('0x39')]=_['intersection'](_0x123b1e[_0xe2b5('0x2d')],_0x123b1e['query']);_0xb7b5c3[_0xe2b5('0x32')]=_['intersection'](_0x123b1e[_0xe2b5('0x2d')],qs['fields'](_0x36ce01[_0xe2b5('0x2f')]['fields']));_0xb7b5c3[_0xe2b5('0x32')]=_0xb7b5c3[_0xe2b5('0x32')]['length']?_0xb7b5c3[_0xe2b5('0x32')]:_0x123b1e['model'];if(_0x36ce01[_0xe2b5('0x2f')]['includeAll']){_0xb7b5c3[_0xe2b5('0x45')]=[{'all':!![]}];}_0xb7b5c3=_[_0xe2b5('0x3c')]({},_0xb7b5c3,_0x36ce01[_0xe2b5('0x41')]);return db[_0xe2b5('0x42')][_0xe2b5('0x4c')](_0xb7b5c3)[_0xe2b5('0x24')](handleEntityNotFound(_0x58c275,null))[_0xe2b5('0x24')](respondWithResult(_0x58c275,null))[_0xe2b5('0x48')](handleError(_0x58c275,null));};exports[_0xe2b5('0x4d')]=function(_0x53cc3a,_0x28e5d3){return db[_0xe2b5('0x42')][_0xe2b5('0x4d')](_0x53cc3a[_0xe2b5('0x4e')],{})[_0xe2b5('0x24')](function(_0x4cdd99){var _0x1bb530=_0x53cc3a[_0xe2b5('0x4f')][_0xe2b5('0x26')]({'plain':!![]});if(!_0x1bb530)throw new Error(_0xe2b5('0x50'));if(_0x1bb530[_0xe2b5('0x51')]===_0xe2b5('0x4f')){var _0x279b10=_0x4cdd99['get']({'plain':!![]});var _0x1c9acf='Voicemails';return db[_0xe2b5('0x52')][_0xe2b5('0x4c')]({'where':{'name':_0x1c9acf,'userProfileId':_0x1bb530[_0xe2b5('0x53')]},'raw':!![]})[_0xe2b5('0x24')](function(_0x1b3c58){if(_0x1b3c58&&_0x1b3c58['autoAssociation']===0x0){return db[_0xe2b5('0x27')]['create']({'name':_0x279b10[_0xe2b5('0x2a')],'resourceId':_0x279b10['id'],'type':_0x1b3c58[_0xe2b5('0x2a')],'sectionId':_0x1b3c58['id']},{})['then'](function(){return _0x4cdd99;});}else{return _0x4cdd99;}})[_0xe2b5('0x48')](function(_0x3c15f0){logger[_0xe2b5('0x28')](_0xe2b5('0x54'),_0x3c15f0);throw _0x3c15f0;});}return _0x4cdd99;})[_0xe2b5('0x24')](respondWithResult(_0x28e5d3,0xc9))['catch'](handleError(_0x28e5d3,null));};exports['update']=function(_0x1a4c67,_0x317458){if(_0x1a4c67['body']['id']){delete _0x1a4c67[_0xe2b5('0x4e')]['id'];}return db['VoiceMail']['find']({'where':{'id':_0x1a4c67[_0xe2b5('0x4a')]['id']}})[_0xe2b5('0x24')](handleEntityNotFound(_0x317458,null))[_0xe2b5('0x24')](saveUpdates(_0x1a4c67[_0xe2b5('0x4e')],null))[_0xe2b5('0x24')](respondWithResult(_0x317458,null))['catch'](handleError(_0x317458,null));};exports[_0xe2b5('0x25')]=function(_0x14264f,_0x383160){return db[_0xe2b5('0x42')][_0xe2b5('0x4c')]({'where':{'id':_0x14264f[_0xe2b5('0x4a')]['id']}})[_0xe2b5('0x24')](handleEntityNotFound(_0x383160,null))[_0xe2b5('0x24')](removeEntity(_0x383160,null))[_0xe2b5('0x48')](handleError(_0x383160,null));};exports[_0xe2b5('0x55')]=function(_0x15340b,_0x324cce,_0x57c3f3){return db['VoiceMail'][_0xe2b5('0x56')]({'where':{'id':_0x15340b['params']['id']}})['then'](handleEntityNotFound(_0x324cce,null))[_0xe2b5('0x24')](function(_0x21ae94){var _0x5e6b47;var _0x1bc912={},_0x871e3a={};_0x871e3a['model']=_['keys'](db[_0xe2b5('0x57')]['rawAttributes']);_0x871e3a[_0xe2b5('0x2f')]=_[_0xe2b5('0x2e')](_0x15340b[_0xe2b5('0x2f')]);_0x871e3a[_0xe2b5('0x39')]=_[_0xe2b5('0x30')](_0x871e3a['model'],_0x871e3a[_0xe2b5('0x2f')]);_0x1bc912[_0xe2b5('0x32')]=_[_0xe2b5('0x30')](_0x871e3a[_0xe2b5('0x2d')],qs[_0xe2b5('0x31')](_0x15340b[_0xe2b5('0x2f')]['fields']));_0x1bc912[_0xe2b5('0x32')]=_0x1bc912[_0xe2b5('0x32')][_0xe2b5('0x33')]?_0x1bc912['attributes']:_0x871e3a[_0xe2b5('0x2d')];if(!_0x15340b[_0xe2b5('0x2f')][_0xe2b5('0x34')](_0xe2b5('0x35'))){_0x1bc912['limit']=qs[_0xe2b5('0x36')](_0x15340b[_0xe2b5('0x2f')][_0xe2b5('0x36')]);_0x1bc912[_0xe2b5('0x1d')]=qs['offset'](_0x15340b[_0xe2b5('0x2f')][_0xe2b5('0x1d')]);}_0x1bc912[_0xe2b5('0x37')]=qs[_0xe2b5('0x38')](_0x15340b[_0xe2b5('0x2f')][_0xe2b5('0x38')]);_0x1bc912['where']=qs[_0xe2b5('0x39')](_[_0xe2b5('0x58')](_0x15340b['query'],_0x871e3a[_0xe2b5('0x39')]));if(_0x15340b[_0xe2b5('0x2f')][_0xe2b5('0x3a')]){_0x1bc912[_0xe2b5('0x3b')]=_['merge'](_0x1bc912[_0xe2b5('0x3b')],{'$or':_['map'](_0x1bc912[_0xe2b5('0x32')],function(_0x48aab4){var _0x1c1f43={};_0x1c1f43[_0x48aab4]={'$like':'%'+_0x15340b[_0xe2b5('0x2f')][_0xe2b5('0x3a')]+'%'};return _0x1c1f43;})});}_0x1bc912[_0xe2b5('0x3b')]=_[_0xe2b5('0x3c')](_0x1bc912[_0xe2b5('0x3b')],{'mailboxuser':_0x21ae94[_0xe2b5('0x59')]});_0x1bc912=_[_0xe2b5('0x3c')]({},_0x1bc912,_0x15340b['options']);return db[_0xe2b5('0x57')][_0xe2b5('0x5a')](_0x1bc912)['then'](respondWithFilteredResult(_0x324cce,_0x1bc912));})['catch'](handleError(_0x324cce,null));};
\ No newline at end of file
index e51f5f1..c9a5661 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6418=['VoiceMail','voice_voicemail','mailbox','context','api','moment','request-promise','rimraf','../../config/environment','exports','define'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x6418,0x17a));var _0x8641=function(_0x414eaa,_0x1ac192){_0x414eaa=_0x414eaa-0x0;var _0x35e317=_0x6418[_0x414eaa];return _0x35e317;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')(_0x8641('0x0'));var moment=require(_0x8641('0x1'));var BPromise=require('bluebird');var rp=require(_0x8641('0x2'));var fs=require('fs');var path=require('path');var rimraf=require(_0x8641('0x3'));var config=require(_0x8641('0x4'));var attributes=require('./voiceMail.attributes');module[_0x8641('0x5')]=function(_0x36032c,_0x5602e4){return _0x36032c[_0x8641('0x6')](_0x8641('0x7'),attributes,{'tableName':_0x8641('0x8'),'paranoid':![],'indexes':[{'name':'mailbox_context','fields':[_0x8641('0x9'),_0x8641('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x4d16=['api','moment','bluebird','request-promise','rimraf','../../config/environment','VoiceMail','voice_voicemail','mailbox','lodash','util'];(function(_0x44f91e,_0x47e2eb){var _0x33a0bd=function(_0x6e7327){while(--_0x6e7327){_0x44f91e['push'](_0x44f91e['shift']());}};_0x33a0bd(++_0x47e2eb);}(_0x4d16,0xe5));var _0x64d1=function(_0x5f2e2f,_0x2e27bb){_0x5f2e2f=_0x5f2e2f-0x0;var _0x510637=_0x4d16[_0x5f2e2f];return _0x510637;};'use strict';var _=require(_0x64d1('0x0'));var util=require(_0x64d1('0x1'));var logger=require('../../config/logger')(_0x64d1('0x2'));var moment=require(_0x64d1('0x3'));var BPromise=require(_0x64d1('0x4'));var rp=require(_0x64d1('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x64d1('0x6'));var config=require(_0x64d1('0x7'));var attributes=require('./voiceMail.attributes');module['exports']=function(_0x52be25,_0xbec688){return _0x52be25['define'](_0x64d1('0x8'),attributes,{'tableName':_0x64d1('0x9'),'paranoid':![],'indexes':[{'name':'mailbox_context','fields':[_0x64d1('0xa'),'context']}],'timestamps':!![]});};
\ No newline at end of file
index dbf3b89..7a65968 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcd74=['VoiceMail,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','VoiceMail,\x20%s,\x20%s','debug'];(function(_0x5d19f6,_0x53002e){var _0x471a38=function(_0x58baf4){while(--_0x58baf4){_0x5d19f6['push'](_0x5d19f6['shift']());}};_0x471a38(++_0x53002e);}(_0xcd74,0xdf));var _0x4cd7=function(_0x1450bb,_0x1d5853){_0x1450bb=_0x1450bb-0x0;var _0x18b74f=_0xcd74[_0x1450bb];return _0x18b74f;};'use strict';var _=require(_0x4cd7('0x0'));var util=require(_0x4cd7('0x1'));var moment=require(_0x4cd7('0x2'));var BPromise=require(_0x4cd7('0x3'));var rs=require(_0x4cd7('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x4cd7('0x5'));var logger=require(_0x4cd7('0x6'))(_0x4cd7('0x7'));var config=require(_0x4cd7('0x8'));var jayson=require(_0x4cd7('0x9'));var client=jayson[_0x4cd7('0xa')][_0x4cd7('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x19a2c9,_0x17b152,_0x29b790){return new BPromise(function(_0x54856d,_0xf16757){return client[_0x4cd7('0xc')](_0x19a2c9,_0x29b790)[_0x4cd7('0xd')](function(_0x2a694e){logger[_0x4cd7('0xe')](_0x4cd7('0xf'),_0x17b152,'request\x20sent');logger[_0x4cd7('0x10')](_0x4cd7('0x11'),_0x17b152,_0x4cd7('0x12'),JSON['stringify'](_0x2a694e));if(_0x2a694e[_0x4cd7('0x13')]){if(_0x2a694e[_0x4cd7('0x13')][_0x4cd7('0x14')]===0x1f4){logger['error'](_0x4cd7('0xf'),_0x17b152,_0x2a694e['error'][_0x4cd7('0x15')]);return _0xf16757(_0x2a694e['error']['message']);}logger[_0x4cd7('0x13')](_0x4cd7('0xf'),_0x17b152,_0x2a694e[_0x4cd7('0x13')][_0x4cd7('0x15')]);return _0x54856d(_0x2a694e['error'][_0x4cd7('0x15')]);}else{logger[_0x4cd7('0xe')](_0x4cd7('0xf'),_0x17b152,'request\x20sent');_0x54856d(_0x2a694e[_0x4cd7('0x16')][_0x4cd7('0x15')]);}})[_0x4cd7('0x17')](function(_0x5b62d1){logger['error'](_0x4cd7('0xf'),_0x17b152,_0x5b62d1);_0xf16757(_0x5b62d1);});});}
\ No newline at end of file
+var _0x78d1=['rpc','../../config/environment','jayson/promise','client','http','request','info','VoiceMail,\x20%s,\x20%s','request\x20sent','debug','VoiceMail,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb'];(function(_0x3747ae,_0x408e61){var _0x339035=function(_0x83be87){while(--_0x83be87){_0x3747ae['push'](_0x3747ae['shift']());}};_0x339035(++_0x408e61);}(_0x78d1,0x1ae));var _0x178d=function(_0x4f6db2,_0x3bdc4f){_0x4f6db2=_0x4f6db2-0x0;var _0x8a51cd=_0x78d1[_0x4f6db2];return _0x8a51cd;};'use strict';var _=require(_0x178d('0x0'));var util=require(_0x178d('0x1'));var moment=require(_0x178d('0x2'));var BPromise=require(_0x178d('0x3'));var rs=require(_0x178d('0x4'));var fs=require('fs');var Redis=require(_0x178d('0x5'));var db=require(_0x178d('0x6'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x178d('0x7'));var config=require(_0x178d('0x8'));var jayson=require(_0x178d('0x9'));var client=jayson[_0x178d('0xa')][_0x178d('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x2f34e9,_0x5cb6fc,_0x1ce0b3){return new BPromise(function(_0x140c62,_0x38d4f1){return client[_0x178d('0xc')](_0x2f34e9,_0x1ce0b3)['then'](function(_0x18370b){logger[_0x178d('0xd')](_0x178d('0xe'),_0x5cb6fc,_0x178d('0xf'));logger[_0x178d('0x10')](_0x178d('0x11'),_0x5cb6fc,_0x178d('0xf'),JSON[_0x178d('0x12')](_0x18370b));if(_0x18370b['error']){if(_0x18370b[_0x178d('0x13')]['code']===0x1f4){logger['error'](_0x178d('0xe'),_0x5cb6fc,_0x18370b[_0x178d('0x13')][_0x178d('0x14')]);return _0x38d4f1(_0x18370b[_0x178d('0x13')]['message']);}logger[_0x178d('0x13')](_0x178d('0xe'),_0x5cb6fc,_0x18370b['error'][_0x178d('0x14')]);return _0x140c62(_0x18370b['error'][_0x178d('0x14')]);}else{logger['info'](_0x178d('0xe'),_0x5cb6fc,_0x178d('0xf'));_0x140c62(_0x18370b[_0x178d('0x15')]['message']);}})[_0x178d('0x16')](function(_0x3c5da3){logger[_0x178d('0x13')](_0x178d('0xe'),_0x5cb6fc,_0x3c5da3);_0x38d4f1(_0x3c5da3);});});}
\ No newline at end of file
index 27b61f4..00d54af 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2525=['index','get','/:id','show','/:id/download','download','post','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','isAuthenticated'];(function(_0x4cdd4d,_0x3cce1e){var _0x1bbd06=function(_0x4578cf){while(--_0x4578cf){_0x4cdd4d['push'](_0x4cdd4d['shift']());}};_0x1bbd06(++_0x3cce1e);}(_0x2525,0x1f0));var _0x5252=function(_0x34bf97,_0xc60f9d){_0x34bf97=_0x34bf97-0x0;var _0x292719=_0x2525[_0x34bf97];return _0x292719;};'use strict';var multer=require(_0x5252('0x0'));var util=require(_0x5252('0x1'));var path=require(_0x5252('0x2'));var timeout=require(_0x5252('0x3'));var express=require(_0x5252('0x4'));var router=express[_0x5252('0x5')]();var auth=require(_0x5252('0x6'));var interaction=require(_0x5252('0x7'));var config=require(_0x5252('0x8'));var controller=require('./voiceMailMessage.controller');router['get']('/',auth[_0x5252('0x9')](),controller[_0x5252('0xa')]);router[_0x5252('0xb')](_0x5252('0xc'),auth[_0x5252('0x9')](),controller[_0x5252('0xd')]);router['get'](_0x5252('0xe'),auth['isAuthenticated'](),controller[_0x5252('0xf')]);router[_0x5252('0x10')]('/',auth['isAuthenticated'](),controller['create']);router[_0x5252('0x11')]('/:id',auth[_0x5252('0x9')](),controller[_0x5252('0x12')]);router[_0x5252('0x13')](_0x5252('0xc'),auth[_0x5252('0x9')](),controller[_0x5252('0x14')]);module[_0x5252('0x15')]=router;
\ No newline at end of file
+var _0x1362=['index','isAuthenticated','show','/:id/download','download','post','put','update','delete','/:id','destroy','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceMailMessage.controller','get'];(function(_0x5bfb82,_0x4403e1){var _0x14c31b=function(_0x3efa6e){while(--_0x3efa6e){_0x5bfb82['push'](_0x5bfb82['shift']());}};_0x14c31b(++_0x4403e1);}(_0x1362,0xd2));var _0x2136=function(_0xf8ce4a,_0x38d1f0){_0xf8ce4a=_0xf8ce4a-0x0;var _0x466e0b=_0x1362[_0xf8ce4a];return _0x466e0b;};'use strict';var multer=require('multer');var util=require(_0x2136('0x0'));var path=require(_0x2136('0x1'));var timeout=require(_0x2136('0x2'));var express=require(_0x2136('0x3'));var router=express[_0x2136('0x4')]();var auth=require(_0x2136('0x5'));var interaction=require(_0x2136('0x6'));var config=require(_0x2136('0x7'));var controller=require(_0x2136('0x8'));router[_0x2136('0x9')]('/',auth['isAuthenticated'](),controller[_0x2136('0xa')]);router['get']('/:id',auth[_0x2136('0xb')](),controller[_0x2136('0xc')]);router['get'](_0x2136('0xd'),auth['isAuthenticated'](),controller[_0x2136('0xe')]);router[_0x2136('0xf')]('/',auth[_0x2136('0xb')](),controller['create']);router[_0x2136('0x10')]('/:id',auth['isAuthenticated'](),controller[_0x2136('0x11')]);router[_0x2136('0x12')](_0x2136('0x13'),auth[_0x2136('0xb')](),controller[_0x2136('0x14')]);module[_0x2136('0x15')]=router;
\ No newline at end of file
index f4316fa..3f6a7a0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8dc=['getDataValue','INTEGER','STRING','BLOB','long','TIMESTAMP','sequelize','exports','VIRTUAL'];(function(_0x1ba868,_0x2c3dac){var _0x454122=function(_0x312e28){while(--_0x312e28){_0x1ba868['push'](_0x1ba868['shift']());}};_0x454122(++_0x2c3dac);}(_0xd8dc,0xd5));var _0xcd8d=function(_0x7bc63a,_0x26422a){_0x7bc63a=_0x7bc63a-0x0;var _0xed898e=_0xd8dc[_0x7bc63a];return _0xed898e;};'use strict';var Sequelize=require(_0xcd8d('0x0'));module[_0xcd8d('0x1')]={'name':{'type':Sequelize[_0xcd8d('0x2')],'get':function(_0x31e370){return this[_0xcd8d('0x3')]('id');}},'msgnum':{'type':Sequelize[_0xcd8d('0x4')](0xb),'defaultValue':0x0,'allowNull':![]},'dir':{'type':Sequelize['STRING'],'defaultValue':''},'context':{'type':Sequelize[_0xcd8d('0x5')],'defaultValue':''},'macrocontext':{'type':Sequelize['STRING'],'defaultValue':''},'callerid':{'type':Sequelize[_0xcd8d('0x5')],'defaultValue':''},'origtime':{'type':Sequelize[_0xcd8d('0x5')],'defaultValue':''},'duration':{'type':Sequelize[_0xcd8d('0x5')],'defaultValue':''},'mailboxuser':{'type':Sequelize[_0xcd8d('0x5')],'defaultValue':''},'mailboxcontext':{'type':Sequelize[_0xcd8d('0x5')],'defaultValue':''},'recording':{'type':Sequelize[_0xcd8d('0x6')](_0xcd8d('0x7')),'defaultValue':null},'flag':{'type':Sequelize['STRING'],'defaultValue':''},'msg_id':{'type':Sequelize['STRING'],'defaultValue':''},'stamp':{'type':_0xcd8d('0x8'),'allowNull':![]}};
\ No newline at end of file
+var _0x0f09=['exports','VIRTUAL','INTEGER','STRING','BLOB','long','sequelize'];(function(_0x55f8b4,_0x43f30d){var _0x2475f9=function(_0xdd6f4a){while(--_0xdd6f4a){_0x55f8b4['push'](_0x55f8b4['shift']());}};_0x2475f9(++_0x43f30d);}(_0x0f09,0x84));var _0x90f0=function(_0x5f1391,_0x19c132){_0x5f1391=_0x5f1391-0x0;var _0x50ebe3=_0x0f09[_0x5f1391];return _0x50ebe3;};'use strict';var Sequelize=require(_0x90f0('0x0'));module[_0x90f0('0x1')]={'name':{'type':Sequelize[_0x90f0('0x2')],'get':function(_0x5d4b7c){return this['getDataValue']('id');}},'msgnum':{'type':Sequelize[_0x90f0('0x3')](0xb),'defaultValue':0x0,'allowNull':![]},'dir':{'type':Sequelize[_0x90f0('0x4')],'defaultValue':''},'context':{'type':Sequelize[_0x90f0('0x4')],'defaultValue':''},'macrocontext':{'type':Sequelize['STRING'],'defaultValue':''},'callerid':{'type':Sequelize[_0x90f0('0x4')],'defaultValue':''},'origtime':{'type':Sequelize[_0x90f0('0x4')],'defaultValue':''},'duration':{'type':Sequelize[_0x90f0('0x4')],'defaultValue':''},'mailboxuser':{'type':Sequelize['STRING'],'defaultValue':''},'mailboxcontext':{'type':Sequelize['STRING'],'defaultValue':''},'recording':{'type':Sequelize[_0x90f0('0x5')](_0x90f0('0x6')),'defaultValue':null},'flag':{'type':Sequelize['STRING'],'defaultValue':''},'msg_id':{'type':Sequelize[_0x90f0('0x4')],'defaultValue':''},'stamp':{'type':'TIMESTAMP','allowNull':![]}};
\ No newline at end of file
index b8d60aa..e28024e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9211=['crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','then','destroy','error','name','send','index','VoiceMailMessage','rawAttributes','model','differenceBy','keys','query','filters','intersection','attributes','fields','hasOwnProperty','limit','sort','where','merge','map','type','key','field','options','includeAll','include','findAll','catch','show','params','length','find','create','body','download','recording','Sequelize','ValidationError','VoiceMailMessage\x20not\x20found','audio/wav','attachment','msg_id','Content-Disposition','.wav\x22','html-pdf','rimraf','zip-dir','fast-json-patch','moment','bluebird','util','sox','lodash'];(function(_0x39092c,_0x167f0c){var _0x7e47a=function(_0x17f710){while(--_0x17f710){_0x39092c['push'](_0x39092c['shift']());}};_0x7e47a(++_0x167f0c);}(_0x9211,0x99));var _0x1921=function(_0x9dca4c,_0xc09e49){_0x9dca4c=_0x9dca4c-0x0;var _0x4c8506=_0x9211[_0x9dca4c];return _0x4c8506;};'use strict';var pdf=require(_0x1921('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x1921('0x1'));var zipdir=require(_0x1921('0x2'));var jsonpatch=require(_0x1921('0x3'));var rp=require('request-promise');var moment=require(_0x1921('0x4'));var BPromise=require(_0x1921('0x5'));var Mustache=require('mustache');var util=require(_0x1921('0x6'));var path=require('path');var sox=require(_0x1921('0x7'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x1921('0x8'));var squel=require('squel');var crypto=require(_0x1921('0x9'));var jsforce=require(_0x1921('0xa'));var deskjs=require(_0x1921('0xb'));var toCsv=require(_0x1921('0xc'));var querystring=require(_0x1921('0xd'));var Papa=require(_0x1921('0xe'));var Redis=require('ioredis');var authService=require(_0x1921('0xf'));var qs=require(_0x1921('0x10'));var hardwareService=require(_0x1921('0x11'));var logger=require(_0x1921('0x12'))(_0x1921('0x13'));var utils=require(_0x1921('0x14'));var config=require(_0x1921('0x15'));var db=require(_0x1921('0x16'))['db'];function respondWithStatusCode(_0x5132c2,_0x3f92fc){_0x3f92fc=_0x3f92fc||0xcc;return function(_0x129914){if(_0x129914){return _0x5132c2[_0x1921('0x17')](_0x3f92fc);}return _0x5132c2[_0x1921('0x18')](_0x3f92fc)[_0x1921('0x19')]();};}function respondWithResult(_0x433114,_0x3f4f66){_0x3f4f66=_0x3f4f66||0xc8;return function(_0x2cbae0){if(_0x2cbae0){return _0x433114[_0x1921('0x18')](_0x3f4f66)[_0x1921('0x1a')](_0x2cbae0);}};}function respondWithFilteredResult(_0x85e0eb,_0x26799c){return function(_0xa67869){if(_0xa67869){var _0x1b4f11=_0xa67869[_0x1921('0x1b')],_0x44133d=_0x26799c[_0x1921('0x1c')],_0x20df9e=_0x26799c[_0x1921('0x1c')]+_0x26799c['limit'],_0x45a455;if(_0x20df9e>=_0x1b4f11){_0x20df9e=_0x1b4f11;_0x45a455=0xc8;}else{_0x45a455=0xce;}_0x85e0eb[_0x1921('0x18')](_0x45a455);return _0x85e0eb[_0x1921('0x1d')](_0x1921('0x1e'),_0x44133d+'-'+_0x20df9e+'/'+_0x1b4f11)[_0x1921('0x1a')](_0xa67869);}return null;};}function patchUpdates(_0x2bcfb2){return function(_0x298a92){try{jsonpatch[_0x1921('0x1f')](_0x298a92,_0x2bcfb2,!![]);}catch(_0x4c5856){return BPromise[_0x1921('0x20')](_0x4c5856);}return _0x298a92[_0x1921('0x21')]();};}function saveUpdates(_0x14ef24,_0x55e6b0){return function(_0x5e3474){if(_0x5e3474){return _0x5e3474[_0x1921('0x22')](_0x14ef24)[_0x1921('0x23')](function(_0x3f0017){return _0x3f0017;});}return null;};}function removeEntity(_0x59ff1d,_0x20b9fa){return function(_0x48f000){if(_0x48f000){return _0x48f000[_0x1921('0x24')]()[_0x1921('0x23')](function(){_0x59ff1d[_0x1921('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0x2db363,_0x80a3d1){return function(_0x3ecbac){if(!_0x3ecbac){_0x2db363[_0x1921('0x17')](0x194);}return _0x3ecbac;};}function handleError(_0x43817e,_0x2f7d4a){_0x2f7d4a=_0x2f7d4a||0x1f4;return function(_0x51bf4a){logger[_0x1921('0x25')](_0x51bf4a['stack']);if(_0x51bf4a[_0x1921('0x26')]){delete _0x51bf4a['name'];}_0x43817e[_0x1921('0x18')](_0x2f7d4a)[_0x1921('0x27')](_0x51bf4a);};}exports[_0x1921('0x28')]=function(_0x1f68d1,_0xa45ca8){var _0x3b9a93={},_0x543e54={},_0x14174a={'count':0x0,'rows':[]};var _0x11e27a=db[_0x1921('0x29')][_0x1921('0x2a')];_0x543e54[_0x1921('0x2b')]=_[_0x1921('0x2c')](_[_0x1921('0x2d')](_0x11e27a),[_0x1921('0x26')]);_0x543e54['query']=_[_0x1921('0x2d')](_0x1f68d1[_0x1921('0x2e')]);_0x543e54[_0x1921('0x2f')]=_[_0x1921('0x30')](_0x543e54[_0x1921('0x2b')],_0x543e54[_0x1921('0x2e')]);_0x3b9a93[_0x1921('0x31')]=_['intersection'](_0x543e54[_0x1921('0x2b')],qs[_0x1921('0x32')](_0x1f68d1[_0x1921('0x2e')][_0x1921('0x32')]));_0x3b9a93[_0x1921('0x31')]=_0x3b9a93[_0x1921('0x31')]['length']?_0x3b9a93[_0x1921('0x31')]:_0x543e54[_0x1921('0x2b')];if(!_0x1f68d1['query'][_0x1921('0x33')]('nolimit')){_0x3b9a93[_0x1921('0x34')]=qs['limit'](_0x1f68d1['query'][_0x1921('0x34')]);_0x3b9a93['offset']=qs['offset'](_0x1f68d1[_0x1921('0x2e')]['offset']);}_0x3b9a93['order']=qs['sort'](_0x1f68d1[_0x1921('0x2e')][_0x1921('0x35')]);_0x3b9a93[_0x1921('0x36')]=qs[_0x1921('0x2f')](_['pick'](_0x1f68d1[_0x1921('0x2e')],_0x543e54[_0x1921('0x2f')]));if(_0x1f68d1[_0x1921('0x2e')]['filter']){_0x3b9a93[_0x1921('0x36')]=_[_0x1921('0x37')](_0x3b9a93[_0x1921('0x36')],{'$or':_[_0x1921('0x38')](_0x11e27a,function(_0x3cfc78){if(_0x3cfc78[_0x1921('0x39')][_0x1921('0x3a')]!=='VIRTUAL'){var _0x3adb97={};_0x3adb97[_0x3cfc78[_0x1921('0x3b')]]={'$like':'%'+_0x1f68d1[_0x1921('0x2e')]['filter']+'%'};return _0x3adb97;}})});}_0x3b9a93=_[_0x1921('0x37')]({},_0x3b9a93,_0x1f68d1[_0x1921('0x3c')]);var _0x308506={'where':_0x3b9a93[_0x1921('0x36')]};return db[_0x1921('0x29')][_0x1921('0x1b')](_0x308506)['then'](function(_0x39154e){_0x14174a[_0x1921('0x1b')]=_0x39154e;if(_0x1f68d1[_0x1921('0x2e')][_0x1921('0x3d')]){_0x3b9a93[_0x1921('0x3e')]=[{'all':!![]}];}return db[_0x1921('0x29')][_0x1921('0x3f')](_0x3b9a93);})[_0x1921('0x23')](function(_0x2672a7){_0x14174a['rows']=_0x2672a7;return _0x14174a;})[_0x1921('0x23')](respondWithFilteredResult(_0xa45ca8,_0x3b9a93))[_0x1921('0x40')](handleError(_0xa45ca8,null));};exports[_0x1921('0x41')]=function(_0x3d3025,_0x496d5a){var _0x1f9005={'raw':!![],'where':{'id':_0x3d3025[_0x1921('0x42')]['id']}},_0x35dff1={};_0x35dff1[_0x1921('0x2b')]=_[_0x1921('0x2d')](db['VoiceMailMessage'][_0x1921('0x2a')]);_0x35dff1[_0x1921('0x2e')]=_[_0x1921('0x2d')](_0x3d3025[_0x1921('0x2e')]);_0x35dff1[_0x1921('0x2f')]=_[_0x1921('0x30')](_0x35dff1[_0x1921('0x2b')],_0x35dff1[_0x1921('0x2e')]);_0x1f9005['attributes']=_['intersection'](_0x35dff1['model'],qs['fields'](_0x3d3025[_0x1921('0x2e')][_0x1921('0x32')]));_0x1f9005[_0x1921('0x31')]=_0x1f9005[_0x1921('0x31')][_0x1921('0x43')]?_0x1f9005[_0x1921('0x31')]:_0x35dff1[_0x1921('0x2b')];if(_0x3d3025[_0x1921('0x2e')][_0x1921('0x3d')]){_0x1f9005[_0x1921('0x3e')]=[{'all':!![]}];}_0x1f9005=_['merge']({},_0x1f9005,_0x3d3025[_0x1921('0x3c')]);return db[_0x1921('0x29')][_0x1921('0x44')](_0x1f9005)['then'](handleEntityNotFound(_0x496d5a,null))[_0x1921('0x23')](respondWithResult(_0x496d5a,null))[_0x1921('0x40')](handleError(_0x496d5a,null));};exports['create']=function(_0x557289,_0x196ea5){return db[_0x1921('0x29')][_0x1921('0x45')](_0x557289[_0x1921('0x46')],{})[_0x1921('0x23')](respondWithResult(_0x196ea5,0xc9))[_0x1921('0x40')](handleError(_0x196ea5,null));};exports['update']=function(_0x2f84c7,_0x2677cf){if(_0x2f84c7[_0x1921('0x46')]['id']){delete _0x2f84c7[_0x1921('0x46')]['id'];}return db[_0x1921('0x29')][_0x1921('0x44')]({'where':{'id':_0x2f84c7[_0x1921('0x42')]['id']}})[_0x1921('0x23')](handleEntityNotFound(_0x2677cf,null))[_0x1921('0x23')](saveUpdates(_0x2f84c7[_0x1921('0x46')],null))[_0x1921('0x23')](respondWithResult(_0x2677cf,null))[_0x1921('0x40')](handleError(_0x2677cf,null));};exports[_0x1921('0x24')]=function(_0x5b9154,_0x450f2f){return db[_0x1921('0x29')][_0x1921('0x44')]({'where':{'id':_0x5b9154[_0x1921('0x42')]['id']}})[_0x1921('0x23')](handleEntityNotFound(_0x450f2f,null))[_0x1921('0x23')](removeEntity(_0x450f2f,null))[_0x1921('0x40')](handleError(_0x450f2f,null));};exports[_0x1921('0x47')]=function(_0x4d5695,_0x7d98bc,_0x3b7648){return db[_0x1921('0x29')][_0x1921('0x44')]({'where':{'id':_0x4d5695[_0x1921('0x42')]['id']},'attributes':['id',_0x1921('0x48'),'msg_id']})[_0x1921('0x23')](handleEntityNotFound(_0x7d98bc,null))['then'](function(_0x25d350){if(_0x25d350){if(!_0x25d350[_0x1921('0x48')]){throw new db[(_0x1921('0x49'))][(_0x1921('0x4a'))](_0x1921('0x4b'));}var _0x17c9b7={'Content-Type':_0x1921('0x4c'),'Content-Disposition':_0x1921('0x4d')};if(_0x25d350[_0x1921('0x4e')]){_0x17c9b7[_0x1921('0x4f')]='attachment;\x20filename=\x22'+_0x25d350[_0x1921('0x4e')]+_0x1921('0x50');}_0x7d98bc[_0x1921('0x1d')](_0x17c9b7);return _0x7d98bc['send'](new Buffer(_0x25d350[_0x1921('0x48')]));}})['catch'](handleError(_0x7d98bc,null));};
\ No newline at end of file
+var _0x152c=['crypto','jsforce','desk.js','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','count','set','apply','reject','save','update','then','destroy','end','error','stack','name','send','index','rawAttributes','differenceBy','keys','query','filters','model','attributes','intersection','fields','length','hasOwnProperty','nolimit','limit','offset','sort','where','pick','filter','map','type','key','VIRTUAL','field','merge','options','includeAll','findAll','rows','catch','show','VoiceMailMessage','include','create','body','params','find','download','recording','msg_id','Sequelize','VoiceMailMessage\x20not\x20found','audio/wav','attachment','Content-Disposition','attachment;\x20filename=\x22','.wav\x22','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','path','sox','to-csv','lodash'];(function(_0x27af45,_0x1b57aa){var _0x18df21=function(_0x4b7679){while(--_0x4b7679){_0x27af45['push'](_0x27af45['shift']());}};_0x18df21(++_0x1b57aa);}(_0x152c,0x145));var _0xc152=function(_0x53ea61,_0x28d569){_0x53ea61=_0x53ea61-0x0;var _0x373545=_0x152c[_0x53ea61];return _0x373545;};'use strict';var pdf=require(_0xc152('0x0'));var emlformat=require(_0xc152('0x1'));var rimraf=require(_0xc152('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xc152('0x3'));var rp=require(_0xc152('0x4'));var moment=require('moment');var BPromise=require(_0xc152('0x5'));var Mustache=require(_0xc152('0x6'));var util=require('util');var path=require(_0xc152('0x7'));var sox=require(_0xc152('0x8'));var csv=require(_0xc152('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xc152('0xa'));var squel=require('squel');var crypto=require(_0xc152('0xb'));var jsforce=require(_0xc152('0xc'));var deskjs=require(_0xc152('0xd'));var toCsv=require(_0xc152('0x9'));var querystring=require('querystring');var Papa=require(_0xc152('0xe'));var Redis=require(_0xc152('0xf'));var authService=require('../../components/auth/service');var qs=require(_0xc152('0x10'));var hardwareService=require(_0xc152('0x11'));var logger=require(_0xc152('0x12'))(_0xc152('0x13'));var utils=require('../../config/utils');var config=require(_0xc152('0x14'));var db=require(_0xc152('0x15'))['db'];function respondWithStatusCode(_0x4bf80e,_0x45b861){_0x45b861=_0x45b861||0xcc;return function(_0x56a9f1){if(_0x56a9f1){return _0x4bf80e[_0xc152('0x16')](_0x45b861);}return _0x4bf80e['status'](_0x45b861)['end']();};}function respondWithResult(_0x3df8fb,_0x566ef2){_0x566ef2=_0x566ef2||0xc8;return function(_0x6983c6){if(_0x6983c6){return _0x3df8fb[_0xc152('0x17')](_0x566ef2)['json'](_0x6983c6);}};}function respondWithFilteredResult(_0x57df3e,_0x440a20){return function(_0x4f934e){if(_0x4f934e){var _0x137bbe=_0x4f934e[_0xc152('0x18')],_0x2b1c60=_0x440a20['offset'],_0x12f034=_0x440a20['offset']+_0x440a20['limit'],_0x1e9597;if(_0x12f034>=_0x137bbe){_0x12f034=_0x137bbe;_0x1e9597=0xc8;}else{_0x1e9597=0xce;}_0x57df3e[_0xc152('0x17')](_0x1e9597);return _0x57df3e[_0xc152('0x19')]('Content-Range',_0x2b1c60+'-'+_0x12f034+'/'+_0x137bbe)['json'](_0x4f934e);}return null;};}function patchUpdates(_0x32ed4f){return function(_0x4b7215){try{jsonpatch[_0xc152('0x1a')](_0x4b7215,_0x32ed4f,!![]);}catch(_0x612c27){return BPromise[_0xc152('0x1b')](_0x612c27);}return _0x4b7215[_0xc152('0x1c')]();};}function saveUpdates(_0x2b6d73,_0x39c818){return function(_0x4926c0){if(_0x4926c0){return _0x4926c0[_0xc152('0x1d')](_0x2b6d73)[_0xc152('0x1e')](function(_0x489a9d){return _0x489a9d;});}return null;};}function removeEntity(_0x1158fa,_0x35e667){return function(_0x2d4115){if(_0x2d4115){return _0x2d4115[_0xc152('0x1f')]()[_0xc152('0x1e')](function(){_0x1158fa['status'](0xcc)[_0xc152('0x20')]();});}};}function handleEntityNotFound(_0x1f694c,_0xf61fde){return function(_0xfee743){if(!_0xfee743){_0x1f694c['sendStatus'](0x194);}return _0xfee743;};}function handleError(_0x220b52,_0x279025){_0x279025=_0x279025||0x1f4;return function(_0x43db5e){logger[_0xc152('0x21')](_0x43db5e[_0xc152('0x22')]);if(_0x43db5e[_0xc152('0x23')]){delete _0x43db5e[_0xc152('0x23')];}_0x220b52[_0xc152('0x17')](_0x279025)[_0xc152('0x24')](_0x43db5e);};}exports[_0xc152('0x25')]=function(_0x45bfb7,_0x337846){var _0x205531={},_0x5ea3c3={},_0x5b0bdf={'count':0x0,'rows':[]};var _0xaefdcf=db['VoiceMailMessage'][_0xc152('0x26')];_0x5ea3c3['model']=_[_0xc152('0x27')](_[_0xc152('0x28')](_0xaefdcf),[_0xc152('0x23')]);_0x5ea3c3[_0xc152('0x29')]=_[_0xc152('0x28')](_0x45bfb7[_0xc152('0x29')]);_0x5ea3c3[_0xc152('0x2a')]=_['intersection'](_0x5ea3c3[_0xc152('0x2b')],_0x5ea3c3[_0xc152('0x29')]);_0x205531[_0xc152('0x2c')]=_[_0xc152('0x2d')](_0x5ea3c3[_0xc152('0x2b')],qs['fields'](_0x45bfb7[_0xc152('0x29')][_0xc152('0x2e')]));_0x205531['attributes']=_0x205531[_0xc152('0x2c')][_0xc152('0x2f')]?_0x205531['attributes']:_0x5ea3c3[_0xc152('0x2b')];if(!_0x45bfb7[_0xc152('0x29')][_0xc152('0x30')](_0xc152('0x31'))){_0x205531['limit']=qs[_0xc152('0x32')](_0x45bfb7[_0xc152('0x29')][_0xc152('0x32')]);_0x205531[_0xc152('0x33')]=qs[_0xc152('0x33')](_0x45bfb7[_0xc152('0x29')][_0xc152('0x33')]);}_0x205531['order']=qs[_0xc152('0x34')](_0x45bfb7[_0xc152('0x29')]['sort']);_0x205531[_0xc152('0x35')]=qs[_0xc152('0x2a')](_[_0xc152('0x36')](_0x45bfb7[_0xc152('0x29')],_0x5ea3c3['filters']));if(_0x45bfb7['query'][_0xc152('0x37')]){_0x205531[_0xc152('0x35')]=_['merge'](_0x205531[_0xc152('0x35')],{'$or':_[_0xc152('0x38')](_0xaefdcf,function(_0x4fd7c0){if(_0x4fd7c0[_0xc152('0x39')][_0xc152('0x3a')]!==_0xc152('0x3b')){var _0x21d83c={};_0x21d83c[_0x4fd7c0[_0xc152('0x3c')]]={'$like':'%'+_0x45bfb7[_0xc152('0x29')][_0xc152('0x37')]+'%'};return _0x21d83c;}})});}_0x205531=_[_0xc152('0x3d')]({},_0x205531,_0x45bfb7[_0xc152('0x3e')]);var _0x14cf9f={'where':_0x205531[_0xc152('0x35')]};return db['VoiceMailMessage']['count'](_0x14cf9f)[_0xc152('0x1e')](function(_0x2aaf66){_0x5b0bdf[_0xc152('0x18')]=_0x2aaf66;if(_0x45bfb7['query'][_0xc152('0x3f')]){_0x205531['include']=[{'all':!![]}];}return db['VoiceMailMessage'][_0xc152('0x40')](_0x205531);})[_0xc152('0x1e')](function(_0xea02ff){_0x5b0bdf[_0xc152('0x41')]=_0xea02ff;return _0x5b0bdf;})[_0xc152('0x1e')](respondWithFilteredResult(_0x337846,_0x205531))[_0xc152('0x42')](handleError(_0x337846,null));};exports[_0xc152('0x43')]=function(_0x54e3bd,_0x23e721){var _0x2a4e2c={'raw':!![],'where':{'id':_0x54e3bd['params']['id']}},_0xd5d4f8={};_0xd5d4f8[_0xc152('0x2b')]=_[_0xc152('0x28')](db[_0xc152('0x44')][_0xc152('0x26')]);_0xd5d4f8[_0xc152('0x29')]=_[_0xc152('0x28')](_0x54e3bd[_0xc152('0x29')]);_0xd5d4f8[_0xc152('0x2a')]=_[_0xc152('0x2d')](_0xd5d4f8[_0xc152('0x2b')],_0xd5d4f8[_0xc152('0x29')]);_0x2a4e2c['attributes']=_[_0xc152('0x2d')](_0xd5d4f8['model'],qs[_0xc152('0x2e')](_0x54e3bd['query'][_0xc152('0x2e')]));_0x2a4e2c[_0xc152('0x2c')]=_0x2a4e2c[_0xc152('0x2c')][_0xc152('0x2f')]?_0x2a4e2c[_0xc152('0x2c')]:_0xd5d4f8[_0xc152('0x2b')];if(_0x54e3bd['query'][_0xc152('0x3f')]){_0x2a4e2c[_0xc152('0x45')]=[{'all':!![]}];}_0x2a4e2c=_[_0xc152('0x3d')]({},_0x2a4e2c,_0x54e3bd[_0xc152('0x3e')]);return db['VoiceMailMessage']['find'](_0x2a4e2c)[_0xc152('0x1e')](handleEntityNotFound(_0x23e721,null))['then'](respondWithResult(_0x23e721,null))[_0xc152('0x42')](handleError(_0x23e721,null));};exports[_0xc152('0x46')]=function(_0x168e3f,_0x3147ee){return db[_0xc152('0x44')][_0xc152('0x46')](_0x168e3f[_0xc152('0x47')],{})[_0xc152('0x1e')](respondWithResult(_0x3147ee,0xc9))['catch'](handleError(_0x3147ee,null));};exports['update']=function(_0x25997e,_0x2a53e1){if(_0x25997e[_0xc152('0x47')]['id']){delete _0x25997e['body']['id'];}return db[_0xc152('0x44')]['find']({'where':{'id':_0x25997e[_0xc152('0x48')]['id']}})['then'](handleEntityNotFound(_0x2a53e1,null))[_0xc152('0x1e')](saveUpdates(_0x25997e[_0xc152('0x47')],null))[_0xc152('0x1e')](respondWithResult(_0x2a53e1,null))[_0xc152('0x42')](handleError(_0x2a53e1,null));};exports[_0xc152('0x1f')]=function(_0x34546d,_0x12768e){return db[_0xc152('0x44')][_0xc152('0x49')]({'where':{'id':_0x34546d[_0xc152('0x48')]['id']}})[_0xc152('0x1e')](handleEntityNotFound(_0x12768e,null))[_0xc152('0x1e')](removeEntity(_0x12768e,null))[_0xc152('0x42')](handleError(_0x12768e,null));};exports[_0xc152('0x4a')]=function(_0x7f60a,_0xa72f21,_0x236dbc){return db[_0xc152('0x44')]['find']({'where':{'id':_0x7f60a['params']['id']},'attributes':['id',_0xc152('0x4b'),_0xc152('0x4c')]})['then'](handleEntityNotFound(_0xa72f21,null))['then'](function(_0x1ecca2){if(_0x1ecca2){if(!_0x1ecca2[_0xc152('0x4b')]){throw new db[(_0xc152('0x4d'))]['ValidationError'](_0xc152('0x4e'));}var _0x2e94f8={'Content-Type':_0xc152('0x4f'),'Content-Disposition':_0xc152('0x50')};if(_0x1ecca2[_0xc152('0x4c')]){_0x2e94f8[_0xc152('0x51')]=_0xc152('0x52')+_0x1ecca2[_0xc152('0x4c')]+_0xc152('0x53');}_0xa72f21[_0xc152('0x19')](_0x2e94f8);return _0xa72f21['send'](new Buffer(_0x1ecca2[_0xc152('0x4b')]));}})['catch'](handleError(_0xa72f21,null));};
\ No newline at end of file
index 354dd6c..0b3fa29 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe87e=['request-promise','path','../../config/environment','define','VoiceMailMessage','voice_voicemail_messages','dir','lodash','util','moment','bluebird'];(function(_0x3eef0f,_0x380369){var _0x4e8a69=function(_0x461335){while(--_0x461335){_0x3eef0f['push'](_0x3eef0f['shift']());}};_0x4e8a69(++_0x380369);}(_0xe87e,0x125));var _0xee87=function(_0x9dfc10,_0x19c2d5){_0x9dfc10=_0x9dfc10-0x0;var _0x4f938a=_0xe87e[_0x9dfc10];return _0x4f938a;};'use strict';var _=require(_0xee87('0x0'));var util=require(_0xee87('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0xee87('0x2'));var BPromise=require(_0xee87('0x3'));var rp=require(_0xee87('0x4'));var fs=require('fs');var path=require(_0xee87('0x5'));var rimraf=require('rimraf');var config=require(_0xee87('0x6'));var attributes=require('./voiceMailMessage.attributes');module['exports']=function(_0x4f286d,_0x3e4b41){return _0x4f286d[_0xee87('0x7')](_0xee87('0x8'),attributes,{'tableName':_0xee87('0x9'),'paranoid':![],'indexes':[{'name':_0xee87('0xa'),'fields':[_0xee87('0xa')]}],'timestamps':![]});};
\ No newline at end of file
+var _0x75e0=['lodash','util','../../config/logger','api','path','../../config/environment','exports','define','dir'];(function(_0x4866c5,_0x3e1670){var _0x4c2a3a=function(_0xde72df){while(--_0xde72df){_0x4866c5['push'](_0x4866c5['shift']());}};_0x4c2a3a(++_0x3e1670);}(_0x75e0,0x14d));var _0x075e=function(_0x37c026,_0x3f2b88){_0x37c026=_0x37c026-0x0;var _0x508162=_0x75e0[_0x37c026];return _0x508162;};'use strict';var _=require(_0x075e('0x0'));var util=require(_0x075e('0x1'));var logger=require(_0x075e('0x2'))(_0x075e('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x075e('0x4'));var rimraf=require('rimraf');var config=require(_0x075e('0x5'));var attributes=require('./voiceMailMessage.attributes');module[_0x075e('0x6')]=function(_0x5acbdf,_0x183084){return _0x5acbdf[_0x075e('0x7')]('VoiceMailMessage',attributes,{'tableName':'voice_voicemail_messages','paranoid':![],'indexes':[{'name':_0x075e('0x8'),'fields':[_0x075e('0x8')]}],'timestamps':![]});};
\ No newline at end of file
index c64b028..7a4be78 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0a90=['randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http','info','VoiceMailMessage,\x20%s,\x20%s','request\x20sent','VoiceMailMessage,\x20%s,\x20%s,\x20%s','stringify','error','message','result','util','moment'];(function(_0x589f71,_0x212326){var _0x5763bd=function(_0x2cb8e1){while(--_0x2cb8e1){_0x589f71['push'](_0x589f71['shift']());}};_0x5763bd(++_0x212326);}(_0x0a90,0x185));var _0x00a9=function(_0x82129b,_0x484ae9){_0x82129b=_0x82129b-0x0;var _0x2ae5dc=_0x0a90[_0x82129b];return _0x2ae5dc;};'use strict';var _=require('lodash');var util=require(_0x00a9('0x0'));var moment=require(_0x00a9('0x1'));var BPromise=require('bluebird');var rs=require(_0x00a9('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x00a9('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x00a9('0x4'))(_0x00a9('0x5'));var config=require(_0x00a9('0x6'));var jayson=require(_0x00a9('0x7'));var client=jayson['client'][_0x00a9('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x824ed,_0x32cd77,_0x18ade3){return new BPromise(function(_0x50df9d,_0x4085df){return client['request'](_0x824ed,_0x18ade3)['then'](function(_0x110f5b){logger[_0x00a9('0x9')](_0x00a9('0xa'),_0x32cd77,_0x00a9('0xb'));logger['debug'](_0x00a9('0xc'),_0x32cd77,_0x00a9('0xb'),JSON[_0x00a9('0xd')](_0x110f5b));if(_0x110f5b[_0x00a9('0xe')]){if(_0x110f5b[_0x00a9('0xe')]['code']===0x1f4){logger[_0x00a9('0xe')](_0x00a9('0xa'),_0x32cd77,_0x110f5b['error'][_0x00a9('0xf')]);return _0x4085df(_0x110f5b[_0x00a9('0xe')][_0x00a9('0xf')]);}logger[_0x00a9('0xe')](_0x00a9('0xa'),_0x32cd77,_0x110f5b[_0x00a9('0xe')][_0x00a9('0xf')]);return _0x50df9d(_0x110f5b[_0x00a9('0xe')][_0x00a9('0xf')]);}else{logger[_0x00a9('0x9')](_0x00a9('0xa'),_0x32cd77,_0x00a9('0xb'));_0x50df9d(_0x110f5b[_0x00a9('0x10')]['message']);}})['catch'](function(_0x2b1bb1){logger['error'](_0x00a9('0xa'),_0x32cd77,_0x2b1bb1);_0x4085df(_0x2b1bb1);});});}
\ No newline at end of file
+var _0xb6f0=['message','result','catch','lodash','moment','bluebird','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','info','VoiceMailMessage,\x20%s,\x20%s','debug','VoiceMailMessage,\x20%s,\x20%s,\x20%s','error'];(function(_0x579fd5,_0xb1baf){var _0x3f6367=function(_0x49fcb8){while(--_0x49fcb8){_0x579fd5['push'](_0x579fd5['shift']());}};_0x3f6367(++_0xb1baf);}(_0xb6f0,0x135));var _0x0b6f=function(_0x36bfe3,_0x358938){_0x36bfe3=_0x36bfe3-0x0;var _0x9b0436=_0xb6f0[_0x36bfe3];return _0x9b0436;};'use strict';var _=require(_0x0b6f('0x0'));var util=require('util');var moment=require(_0x0b6f('0x1'));var BPromise=require(_0x0b6f('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x0b6f('0x3'));var db=require(_0x0b6f('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x0b6f('0x5'))(_0x0b6f('0x6'));var config=require(_0x0b6f('0x7'));var jayson=require(_0x0b6f('0x8'));var client=jayson[_0x0b6f('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2fe04b,_0x2b6260,_0x2cbec2){return new BPromise(function(_0x5265aa,_0x469229){return client['request'](_0x2fe04b,_0x2cbec2)['then'](function(_0xcb00b9){logger[_0x0b6f('0xa')](_0x0b6f('0xb'),_0x2b6260,'request\x20sent');logger[_0x0b6f('0xc')](_0x0b6f('0xd'),_0x2b6260,'request\x20sent',JSON['stringify'](_0xcb00b9));if(_0xcb00b9[_0x0b6f('0xe')]){if(_0xcb00b9[_0x0b6f('0xe')]['code']===0x1f4){logger['error'](_0x0b6f('0xb'),_0x2b6260,_0xcb00b9['error'][_0x0b6f('0xf')]);return _0x469229(_0xcb00b9[_0x0b6f('0xe')][_0x0b6f('0xf')]);}logger[_0x0b6f('0xe')](_0x0b6f('0xb'),_0x2b6260,_0xcb00b9[_0x0b6f('0xe')][_0x0b6f('0xf')]);return _0x5265aa(_0xcb00b9[_0x0b6f('0xe')][_0x0b6f('0xf')]);}else{logger[_0x0b6f('0xa')](_0x0b6f('0xb'),_0x2b6260,'request\x20sent');_0x5265aa(_0xcb00b9[_0x0b6f('0x10')][_0x0b6f('0xf')]);}})[_0x0b6f('0x11')](function(_0x4ff8b4){logger['error'](_0x0b6f('0xb'),_0x2b6260,_0x4ff8b4);_0x469229(_0x4ff8b4);});});}
\ No newline at end of file
index 98fd902..f4a1ded 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x22fb=['/:id/sounds/:id2','removeSound','exports','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','/:id/sounds','getSounds','post','create','addSound','update','destroy','delete'];(function(_0x29b778,_0x620b7b){var _0x561839=function(_0xcfd0e7){while(--_0xcfd0e7){_0x29b778['push'](_0x29b778['shift']());}};_0x561839(++_0x620b7b);}(_0x22fb,0x192));var _0xb22f=function(_0xc3d96,_0x3bb1a4){_0xc3d96=_0xc3d96-0x0;var _0x1a382e=_0x22fb[_0xc3d96];return _0x1a382e;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xb22f('0x0'));var timeout=require('connect-timeout');var express=require(_0xb22f('0x1'));var router=express[_0xb22f('0x2')]();var auth=require(_0xb22f('0x3'));var interaction=require(_0xb22f('0x4'));var config=require(_0xb22f('0x5'));var controller=require('./voiceMusicOnHold.controller');router[_0xb22f('0x6')]('/',auth[_0xb22f('0x7')](),controller[_0xb22f('0x8')]);router[_0xb22f('0x6')](_0xb22f('0x9'),auth[_0xb22f('0x7')](),controller['show']);router[_0xb22f('0x6')](_0xb22f('0xa'),auth[_0xb22f('0x7')](),controller[_0xb22f('0xb')]);router[_0xb22f('0xc')]('/',auth[_0xb22f('0x7')](),controller[_0xb22f('0xd')]);router[_0xb22f('0xc')](_0xb22f('0xa'),auth[_0xb22f('0x7')](),controller[_0xb22f('0xe')]);router['put']('/:id',auth['isAuthenticated'](),controller[_0xb22f('0xf')]);router['delete']('/:id',auth['isAuthenticated'](),controller[_0xb22f('0x10')]);router[_0xb22f('0x11')](_0xb22f('0x12'),auth[_0xb22f('0x7')](),controller[_0xb22f('0x13')]);module[_0xb22f('0x14')]=router;
\ No newline at end of file
+var _0x4522=['../../components/interaction/service','../../config/environment','./voiceMusicOnHold.controller','get','isAuthenticated','index','/:id','show','/:id/sounds','getSounds','post','addSound','put','update','delete','exports','path','connect-timeout','express','../../components/auth/service'];(function(_0x1e2939,_0x1f1ddc){var _0x1a1028=function(_0x28220a){while(--_0x28220a){_0x1e2939['push'](_0x1e2939['shift']());}};_0x1a1028(++_0x1f1ddc);}(_0x4522,0x1a0));var _0x2452=function(_0x5ba7b9,_0x409eb7){_0x5ba7b9=_0x5ba7b9-0x0;var _0x218bb2=_0x4522[_0x5ba7b9];return _0x218bb2;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x2452('0x0'));var timeout=require(_0x2452('0x1'));var express=require(_0x2452('0x2'));var router=express['Router']();var auth=require(_0x2452('0x3'));var interaction=require(_0x2452('0x4'));var config=require(_0x2452('0x5'));var controller=require(_0x2452('0x6'));router[_0x2452('0x7')]('/',auth[_0x2452('0x8')](),controller[_0x2452('0x9')]);router[_0x2452('0x7')](_0x2452('0xa'),auth[_0x2452('0x8')](),controller[_0x2452('0xb')]);router[_0x2452('0x7')](_0x2452('0xc'),auth[_0x2452('0x8')](),controller[_0x2452('0xd')]);router[_0x2452('0xe')]('/',auth['isAuthenticated'](),controller['create']);router[_0x2452('0xe')]('/:id/sounds',auth['isAuthenticated'](),controller[_0x2452('0xf')]);router[_0x2452('0x10')](_0x2452('0xa'),auth[_0x2452('0x8')](),controller[_0x2452('0x11')]);router[_0x2452('0x12')](_0x2452('0xa'),auth[_0x2452('0x8')](),controller['destroy']);router['delete']('/:id/sounds/:id2',auth[_0x2452('0x8')](),controller['removeSound']);module[_0x2452('0x13')]=router;
\ No newline at end of file
index 876bc75..6fca460 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfea6=['alpha','TIMESTAMP','BOOLEAN','exports','STRING','name','custom','files','quietmp3nb','quietmp3','mp3'];(function(_0x3635ce,_0x33a6f9){var _0x97ecd0=function(_0x123d98){while(--_0x123d98){_0x3635ce['push'](_0x3635ce['shift']());}};_0x97ecd0(++_0x33a6f9);}(_0xfea6,0x16e));var _0x6fea=function(_0x121c8e,_0x5334ae){_0x121c8e=_0x121c8e-0x0;var _0x31fe1f=_0xfea6[_0x121c8e];return _0x31fe1f;};'use strict';var Sequelize=require('sequelize');module[_0x6fea('0x0')]={'name':{'type':Sequelize[_0x6fea('0x1')],'allowNull':![],'unique':_0x6fea('0x2')},'mode':{'type':Sequelize['ENUM'](_0x6fea('0x3'),_0x6fea('0x4'),'mp3nb',_0x6fea('0x5'),_0x6fea('0x6'),_0x6fea('0x7')),'allowNull':!![],'defaultValue':_0x6fea('0x4')},'directory':{'type':Sequelize['STRING'],'allowNull':!![]},'application':{'type':Sequelize[_0x6fea('0x1')],'allowNull':!![]},'digit':{'type':Sequelize[_0x6fea('0x1')],'allowNull':!![]},'sort':{'type':Sequelize['STRING'],'allowNull':!![],'defaultValue':_0x6fea('0x8')},'format':{'type':Sequelize[_0x6fea('0x1')],'allowNull':!![]},'stamp':{'type':_0x6fea('0x9')},'defaultEntry':{'type':Sequelize[_0x6fea('0xa')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x27e9=['STRING','name','ENUM','custom','mp3nb','quietmp3nb','mp3','files','alpha','TIMESTAMP','BOOLEAN','exports'];(function(_0x293684,_0x3b71d7){var _0x31c1e6=function(_0x134909){while(--_0x134909){_0x293684['push'](_0x293684['shift']());}};_0x31c1e6(++_0x3b71d7);}(_0x27e9,0xd7));var _0x927e=function(_0x47ab0e,_0x52a3e4){_0x47ab0e=_0x47ab0e-0x0;var _0x718361=_0x27e9[_0x47ab0e];return _0x718361;};'use strict';var Sequelize=require('sequelize');module[_0x927e('0x0')]={'name':{'type':Sequelize[_0x927e('0x1')],'allowNull':![],'unique':_0x927e('0x2')},'mode':{'type':Sequelize[_0x927e('0x3')](_0x927e('0x4'),'files',_0x927e('0x5'),_0x927e('0x6'),'quietmp3',_0x927e('0x7')),'allowNull':!![],'defaultValue':_0x927e('0x8')},'directory':{'type':Sequelize[_0x927e('0x1')],'allowNull':!![]},'application':{'type':Sequelize['STRING'],'allowNull':!![]},'digit':{'type':Sequelize[_0x927e('0x1')],'allowNull':!![]},'sort':{'type':Sequelize[_0x927e('0x1')],'allowNull':!![],'defaultValue':_0x927e('0x9')},'format':{'type':Sequelize[_0x927e('0x1')],'allowNull':!![]},'stamp':{'type':_0x927e('0xa')},'defaultEntry':{'type':Sequelize[_0x927e('0xb')],'defaultValue':0x0}};
\ No newline at end of file
index 9d05707..e7d5759 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbcd9=['params','find','body','create','sequelize','transaction','mode','directory','root','server/files/moh','files','0777','user','role','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','readdirSync','forEach','unlinkSync','join','rmdirSync','ValidationError','message','addSound','save_name','converted_format','createdAt','server/files/sounds/converted','format','%s.%s','basename','symlinkSync','removeSound','findOne','id2','Sequelize','getSounds','Sound','nolimit','offset','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','util','path','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','limit','set','Content-Range','apply','reject','save','update','then','get','MusicOnHolds','UserProfileResource','destroy','sendStatus','error','stack','name','send','index','VoiceMusicOnHold','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','count','includeAll','include','catch'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0xbcd9,0x9b));var _0x9bcd=function(_0x1def68,_0x3f243e){_0x1def68=_0x1def68-0x0;var _0xe4e470=_0xbcd9[_0x1def68];return _0xe4e470;};'use strict';var pdf=require(_0x9bcd('0x0'));var emlformat=require(_0x9bcd('0x1'));var rimraf=require(_0x9bcd('0x2'));var zipdir=require(_0x9bcd('0x3'));var jsonpatch=require(_0x9bcd('0x4'));var rp=require(_0x9bcd('0x5'));var moment=require('moment');var BPromise=require(_0x9bcd('0x6'));var Mustache=require('mustache');var util=require(_0x9bcd('0x7'));var path=require(_0x9bcd('0x8'));var sox=require('sox');var csv=require(_0x9bcd('0x9'));var ejs=require(_0x9bcd('0xa'));var fs=require('fs');var _=require(_0x9bcd('0xb'));var squel=require('squel');var crypto=require(_0x9bcd('0xc'));var jsforce=require(_0x9bcd('0xd'));var deskjs=require(_0x9bcd('0xe'));var toCsv=require('to-csv');var querystring=require(_0x9bcd('0xf'));var Papa=require(_0x9bcd('0x10'));var Redis=require(_0x9bcd('0x11'));var authService=require(_0x9bcd('0x12'));var qs=require(_0x9bcd('0x13'));var hardwareService=require(_0x9bcd('0x14'));var logger=require(_0x9bcd('0x15'))(_0x9bcd('0x16'));var utils=require(_0x9bcd('0x17'));var config=require(_0x9bcd('0x18'));var db=require(_0x9bcd('0x19'))['db'];function respondWithStatusCode(_0x43c649,_0x81d886){_0x81d886=_0x81d886||0xcc;return function(_0x32ab83){if(_0x32ab83){return _0x43c649['sendStatus'](_0x81d886);}return _0x43c649[_0x9bcd('0x1a')](_0x81d886)[_0x9bcd('0x1b')]();};}function respondWithResult(_0x442f66,_0x59032a){_0x59032a=_0x59032a||0xc8;return function(_0x35a4e3){if(_0x35a4e3){return _0x442f66[_0x9bcd('0x1a')](_0x59032a)[_0x9bcd('0x1c')](_0x35a4e3);}};}function respondWithFilteredResult(_0x5bb1f0,_0x25712c){return function(_0x108421){if(_0x108421){var _0x47350f=_0x108421['count'],_0x20c84c=_0x25712c['offset'],_0x55fad6=_0x25712c['offset']+_0x25712c[_0x9bcd('0x1d')],_0x5e199f;if(_0x55fad6>=_0x47350f){_0x55fad6=_0x47350f;_0x5e199f=0xc8;}else{_0x5e199f=0xce;}_0x5bb1f0[_0x9bcd('0x1a')](_0x5e199f);return _0x5bb1f0[_0x9bcd('0x1e')](_0x9bcd('0x1f'),_0x20c84c+'-'+_0x55fad6+'/'+_0x47350f)[_0x9bcd('0x1c')](_0x108421);}return null;};}function patchUpdates(_0x215013){return function(_0xcf3754){try{jsonpatch[_0x9bcd('0x20')](_0xcf3754,_0x215013,!![]);}catch(_0x2f4f40){return BPromise[_0x9bcd('0x21')](_0x2f4f40);}return _0xcf3754[_0x9bcd('0x22')]();};}function saveUpdates(_0x51ab7a,_0x3641a9){return function(_0xb024c2){if(_0xb024c2){return _0xb024c2[_0x9bcd('0x23')](_0x51ab7a)[_0x9bcd('0x24')](function(_0x5604de){return _0x5604de;});}return null;};}function removeEntity(_0x3d8e5f,_0x2fc7d8){return function(_0x56febf){if(_0x56febf){return _0x56febf['destroy']()[_0x9bcd('0x24')](function(){var _0x26b34e=_0x56febf[_0x9bcd('0x25')]({'plain':!![]});var _0x2f11c7=_0x9bcd('0x26');return db[_0x9bcd('0x27')][_0x9bcd('0x28')]({'where':{'type':_0x2f11c7,'resourceId':_0x26b34e['id']}})[_0x9bcd('0x24')](function(){return _0x56febf;});})[_0x9bcd('0x24')](function(){_0x3d8e5f[_0x9bcd('0x1a')](0xcc)[_0x9bcd('0x1b')]();});}};}function handleEntityNotFound(_0x4a62e1,_0x5bf4ca){return function(_0x160e70){if(!_0x160e70){_0x4a62e1[_0x9bcd('0x29')](0x194);}return _0x160e70;};}function handleError(_0x57ee48,_0x3eb73e){_0x3eb73e=_0x3eb73e||0x1f4;return function(_0x559d57){logger[_0x9bcd('0x2a')](_0x559d57[_0x9bcd('0x2b')]);if(_0x559d57['name']){delete _0x559d57[_0x9bcd('0x2c')];}_0x57ee48[_0x9bcd('0x1a')](_0x3eb73e)[_0x9bcd('0x2d')](_0x559d57);};}exports[_0x9bcd('0x2e')]=function(_0x308d48,_0x32f26a){var _0x1846c3={},_0x1a8537={},_0x1c464d={'count':0x0,'rows':[]};var _0x58aafe=db[_0x9bcd('0x2f')][_0x9bcd('0x30')];_0x1a8537[_0x9bcd('0x31')]=_[_0x9bcd('0x32')](_0x58aafe);_0x1a8537[_0x9bcd('0x33')]=_[_0x9bcd('0x32')](_0x308d48[_0x9bcd('0x33')]);_0x1a8537[_0x9bcd('0x34')]=_['intersection'](_0x1a8537[_0x9bcd('0x31')],_0x1a8537[_0x9bcd('0x33')]);_0x1846c3[_0x9bcd('0x35')]=_[_0x9bcd('0x36')](_0x1a8537[_0x9bcd('0x31')],qs['fields'](_0x308d48[_0x9bcd('0x33')][_0x9bcd('0x37')]));_0x1846c3[_0x9bcd('0x35')]=_0x1846c3[_0x9bcd('0x35')][_0x9bcd('0x38')]?_0x1846c3[_0x9bcd('0x35')]:_0x1a8537['model'];if(!_0x308d48[_0x9bcd('0x33')][_0x9bcd('0x39')]('nolimit')){_0x1846c3[_0x9bcd('0x1d')]=qs[_0x9bcd('0x1d')](_0x308d48[_0x9bcd('0x33')][_0x9bcd('0x1d')]);_0x1846c3['offset']=qs['offset'](_0x308d48['query']['offset']);}_0x1846c3[_0x9bcd('0x3a')]=qs[_0x9bcd('0x3b')](_0x308d48['query'][_0x9bcd('0x3b')]);_0x1846c3[_0x9bcd('0x3c')]=qs[_0x9bcd('0x34')](_[_0x9bcd('0x3d')](_0x308d48[_0x9bcd('0x33')],_0x1a8537[_0x9bcd('0x34')]));if(_0x308d48[_0x9bcd('0x33')][_0x9bcd('0x3e')]){_0x1846c3['where']=_[_0x9bcd('0x3f')](_0x1846c3[_0x9bcd('0x3c')],{'$or':_[_0x9bcd('0x40')](_0x58aafe,function(_0x9ae094){if(_0x9ae094[_0x9bcd('0x41')][_0x9bcd('0x42')]!==_0x9bcd('0x43')){var _0x468e54={};_0x468e54[_0x9ae094[_0x9bcd('0x44')]]={'$like':'%'+_0x308d48['query'][_0x9bcd('0x3e')]+'%'};return _0x468e54;}})});}_0x1846c3=_['merge']({},_0x1846c3,_0x308d48['options']);var _0xd9ed1f={'where':_0x1846c3[_0x9bcd('0x3c')]};return db[_0x9bcd('0x2f')][_0x9bcd('0x45')](_0xd9ed1f)['then'](function(_0x587914){_0x1c464d[_0x9bcd('0x45')]=_0x587914;if(_0x308d48['query'][_0x9bcd('0x46')]){_0x1846c3[_0x9bcd('0x47')]=[{'all':!![]}];}return db['VoiceMusicOnHold']['findAll'](_0x1846c3);})[_0x9bcd('0x24')](function(_0x31867e){_0x1c464d['rows']=_0x31867e;return _0x1c464d;})[_0x9bcd('0x24')](respondWithFilteredResult(_0x32f26a,_0x1846c3))[_0x9bcd('0x48')](handleError(_0x32f26a,null));};exports['show']=function(_0x9cc63e,_0x2c3ec1){var _0x1567f3={'raw':![],'where':{'id':_0x9cc63e[_0x9bcd('0x49')]['id']}},_0x478920={};_0x478920[_0x9bcd('0x31')]=_['keys'](db[_0x9bcd('0x2f')][_0x9bcd('0x30')]);_0x478920['query']=_[_0x9bcd('0x32')](_0x9cc63e[_0x9bcd('0x33')]);_0x478920[_0x9bcd('0x34')]=_[_0x9bcd('0x36')](_0x478920[_0x9bcd('0x31')],_0x478920[_0x9bcd('0x33')]);_0x1567f3[_0x9bcd('0x35')]=_['intersection'](_0x478920['model'],qs[_0x9bcd('0x37')](_0x9cc63e[_0x9bcd('0x33')][_0x9bcd('0x37')]));_0x1567f3[_0x9bcd('0x35')]=_0x1567f3[_0x9bcd('0x35')][_0x9bcd('0x38')]?_0x1567f3[_0x9bcd('0x35')]:_0x478920[_0x9bcd('0x31')];if(_0x9cc63e[_0x9bcd('0x33')][_0x9bcd('0x46')]){_0x1567f3[_0x9bcd('0x47')]=[{'all':!![]}];}_0x1567f3=_['merge']({},_0x1567f3,_0x9cc63e['options']);return db[_0x9bcd('0x2f')][_0x9bcd('0x4a')](_0x1567f3)[_0x9bcd('0x24')](handleEntityNotFound(_0x2c3ec1,null))[_0x9bcd('0x24')](respondWithResult(_0x2c3ec1,null))[_0x9bcd('0x48')](handleError(_0x2c3ec1,null));};exports['update']=function(_0xab1252,_0xb1e9b9){if(_0xab1252['body']['id']){delete _0xab1252[_0x9bcd('0x4b')]['id'];}return db['VoiceMusicOnHold'][_0x9bcd('0x4a')]({'where':{'id':_0xab1252[_0x9bcd('0x49')]['id']}})[_0x9bcd('0x24')](handleEntityNotFound(_0xb1e9b9,null))[_0x9bcd('0x24')](saveUpdates(_0xab1252[_0x9bcd('0x4b')],null))[_0x9bcd('0x24')](respondWithResult(_0xb1e9b9,null))[_0x9bcd('0x48')](handleError(_0xb1e9b9,null));};exports[_0x9bcd('0x4c')]=function(_0x50ece9,_0x128cf6,_0x5720aa){return db[_0x9bcd('0x4d')][_0x9bcd('0x4e')](function(_0x4aa322){if(_0x50ece9[_0x9bcd('0x4b')][_0x9bcd('0x4f')]==='files'){_0x50ece9['body'][_0x9bcd('0x50')]=path['join'](config[_0x9bcd('0x51')],_0x9bcd('0x52'),_0x50ece9['body'][_0x9bcd('0x2c')]);}return db[_0x9bcd('0x2f')][_0x9bcd('0x4c')](_0x50ece9[_0x9bcd('0x4b')],{'transaction':_0x4aa322})[_0x9bcd('0x24')](function(_0x52a4dd){if(_0x50ece9[_0x9bcd('0x4b')][_0x9bcd('0x4f')]===_0x9bcd('0x53')){fs['mkdirSync'](_0x52a4dd['directory'],parseInt(_0x9bcd('0x54'),0x8));}var _0x5262d7=_0x50ece9[_0x9bcd('0x55')][_0x9bcd('0x25')]({'plain':!![]});if(!_0x5262d7)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x5262d7[_0x9bcd('0x56')]===_0x9bcd('0x55')){var _0x1bbadc=_0x52a4dd['get']({'plain':!![]});return db[_0x9bcd('0x57')][_0x9bcd('0x4a')]({'where':{'name':'MusicOnHolds','userProfileId':_0x5262d7[_0x9bcd('0x58')]},'raw':!![]})['then'](function(_0x5a635b){if(_0x5a635b&&_0x5a635b['autoAssociation']===0x0){return db['UserProfileResource']['create']({'name':_0x1bbadc['name'],'resourceId':_0x1bbadc['id'],'type':_0x5a635b[_0x9bcd('0x2c')],'sectionId':_0x5a635b['id']},{})[_0x9bcd('0x24')](function(){return _0x52a4dd;});}else{return _0x52a4dd;}})[_0x9bcd('0x48')](function(_0x3ef62d){logger[_0x9bcd('0x2a')](_0x9bcd('0x59'),_0x3ef62d);});}return _0x52a4dd;});})[_0x9bcd('0x24')](respondWithResult(_0x128cf6,0xc9))[_0x9bcd('0x48')](handleError(_0x128cf6,null));};exports[_0x9bcd('0x28')]=function(_0x5e3db7,_0x1368a9,_0x46c202){var _0x55be65;return db['VoiceMusicOnHold'][_0x9bcd('0x4a')]({'where':{'id':_0x5e3db7[_0x9bcd('0x49')]['id']}})[_0x9bcd('0x24')](function(_0x42e0f3){if(_0x42e0f3){return db['sequelize'][_0x9bcd('0x4e')](function(_0x336268){return _0x42e0f3[_0x9bcd('0x28')]({'transaction':_0x336268,'raw':!![]})[_0x9bcd('0x24')](function(_0x27c178){if(_0x27c178[_0x9bcd('0x50')]){fs[_0x9bcd('0x5a')](_0x27c178[_0x9bcd('0x50')])[_0x9bcd('0x5b')](function(_0x77a33e){fs[_0x9bcd('0x5c')](path[_0x9bcd('0x5d')](_0x27c178[_0x9bcd('0x50')],_0x77a33e));});fs[_0x9bcd('0x5e')](_0x27c178[_0x9bcd('0x50')]);}return _0x27c178;});})[_0x9bcd('0x48')](function(_0x34d0bf){throw new db['Sequelize'][(_0x9bcd('0x5f'))](_0x34d0bf[_0x9bcd('0x60')]);});}})[_0x9bcd('0x24')](handleEntityNotFound(_0x1368a9,null))[_0x9bcd('0x24')](removeEntity(_0x1368a9,null))[_0x9bcd('0x48')](handleError(_0x1368a9,null));};exports[_0x9bcd('0x61')]=function(_0x58cea6,_0x4b8a5d,_0x4226ae){return db['sequelize'][_0x9bcd('0x4e')](function(_0xf293b5){var _0x32303f;return db[_0x9bcd('0x2f')][_0x9bcd('0x4a')]({'where':{'id':_0x58cea6[_0x9bcd('0x49')]['id']}})['then'](function(_0x3ea615){if(_0x3ea615){_0x32303f=_0x3ea615;return _0x3ea615['addSound'](_0x58cea6[_0x9bcd('0x4b')]['id'],{'transaction':_0xf293b5});}})[_0x9bcd('0x24')](function(_0x36e8af){if(_0x36e8af){return db['Sound']['findOne']({'where':{'id':_0x58cea6[_0x9bcd('0x4b')]['id']},'attributes':['id',_0x9bcd('0x2c'),_0x9bcd('0x62'),_0x9bcd('0x63'),_0x9bcd('0x64')],'raw':!![]});}})[_0x9bcd('0x24')](function(_0x234fcf){if(_0x234fcf){var _0x25ca4c=path['join'](config[_0x9bcd('0x51')],_0x9bcd('0x65'),util[_0x9bcd('0x66')](_0x9bcd('0x67'),path[_0x9bcd('0x68')](_0x234fcf[_0x9bcd('0x62')],path['extname'](_0x234fcf[_0x9bcd('0x62')])),_0x234fcf[_0x9bcd('0x63')]));var _0x20aff0=path[_0x9bcd('0x5d')](config[_0x9bcd('0x51')],_0x9bcd('0x52'),_0x32303f[_0x9bcd('0x2c')],util['format'](_0x9bcd('0x67'),_0x234fcf[_0x9bcd('0x2c')],_0x234fcf[_0x9bcd('0x63')]));fs[_0x9bcd('0x69')](_0x25ca4c,_0x20aff0);return _0x234fcf;}})[_0x9bcd('0x48')](function(_0x427216){throw new db['Sequelize'][(_0x9bcd('0x5f'))](_0x427216[_0x9bcd('0x60')]);});})[_0x9bcd('0x24')](handleEntityNotFound(_0x4b8a5d,null))[_0x9bcd('0x24')](respondWithResult(_0x4b8a5d,0xc9))[_0x9bcd('0x48')](handleError(_0x4b8a5d,null));};exports[_0x9bcd('0x6a')]=function(_0x16087d,_0x7b1b2f,_0x4b06de){return db[_0x9bcd('0x4d')]['transaction'](function(_0x30b9fd){var _0x1cb293;return db[_0x9bcd('0x2f')][_0x9bcd('0x6b')]({'where':{'id':_0x16087d[_0x9bcd('0x49')]['id']}})[_0x9bcd('0x24')](handleEntityNotFound(_0x7b1b2f,null))['then'](function(_0x32b9d7){if(_0x32b9d7){_0x1cb293=_0x32b9d7;return _0x32b9d7[_0x9bcd('0x6a')](_0x16087d[_0x9bcd('0x49')][_0x9bcd('0x6c')]);}})['then'](function(_0x526959){if(_0x526959){return db['Sound'][_0x9bcd('0x6b')]({'where':{'id':_0x16087d[_0x9bcd('0x49')]['id2']},'attributes':['id','name',_0x9bcd('0x62'),_0x9bcd('0x63'),_0x9bcd('0x64')],'raw':!![]});}})['then'](function(_0x49802e){if(_0x49802e){fs[_0x9bcd('0x5c')](path[_0x9bcd('0x5d')](_0x1cb293[_0x9bcd('0x50')],util[_0x9bcd('0x66')]('%s.%s',_0x49802e[_0x9bcd('0x2c')],_0x49802e[_0x9bcd('0x63')])));return _0x49802e;}})[_0x9bcd('0x48')](function(_0x359ff7){throw new db[(_0x9bcd('0x6d'))][(_0x9bcd('0x5f'))](_0x359ff7[_0x9bcd('0x60')]);});})[_0x9bcd('0x24')](handleEntityNotFound(_0x7b1b2f,null))[_0x9bcd('0x24')](respondWithStatusCode(_0x7b1b2f,0xcc))[_0x9bcd('0x48')](handleError(_0x7b1b2f,null));};exports[_0x9bcd('0x6e')]=function(_0x30d674,_0x22ffaa,_0x11951f){var _0x2dea95={};var _0x45040e={};var _0x487732;var _0x384a40;return db[_0x9bcd('0x2f')]['findOne']({'where':{'id':_0x30d674[_0x9bcd('0x49')]['id']}})[_0x9bcd('0x24')](handleEntityNotFound(_0x22ffaa,null))['then'](function(_0x37bbc5){if(_0x37bbc5){_0x487732=_0x37bbc5;_0x45040e[_0x9bcd('0x31')]=_[_0x9bcd('0x32')](db[_0x9bcd('0x6f')][_0x9bcd('0x30')]);_0x45040e[_0x9bcd('0x33')]=_['keys'](_0x30d674[_0x9bcd('0x33')]);_0x45040e[_0x9bcd('0x34')]=_[_0x9bcd('0x36')](_0x45040e[_0x9bcd('0x31')],_0x45040e[_0x9bcd('0x33')]);_0x2dea95['attributes']=_[_0x9bcd('0x36')](_0x45040e[_0x9bcd('0x31')],qs[_0x9bcd('0x37')](_0x30d674['query'][_0x9bcd('0x37')]));_0x2dea95[_0x9bcd('0x35')]=_0x2dea95['attributes'][_0x9bcd('0x38')]?_0x2dea95[_0x9bcd('0x35')]:_0x45040e['model'];_0x2dea95[_0x9bcd('0x3a')]=qs[_0x9bcd('0x3b')](_0x30d674['query'][_0x9bcd('0x3b')]);_0x2dea95['where']=qs[_0x9bcd('0x34')](_[_0x9bcd('0x3d')](_0x30d674['query'],_0x45040e['filters']));if(_0x30d674['query']['filter']){_0x2dea95[_0x9bcd('0x3c')]=_['merge'](_0x2dea95['where'],{'$or':_[_0x9bcd('0x40')](_0x2dea95[_0x9bcd('0x35')],function(_0x25d84c){var _0x4c632b={};_0x4c632b[_0x25d84c]={'$like':'%'+_0x30d674[_0x9bcd('0x33')]['filter']+'%'};return _0x4c632b;})});}_0x2dea95=_[_0x9bcd('0x3f')]({},_0x2dea95,_0x30d674['options']);return _0x487732['getSounds'](_0x2dea95);}})[_0x9bcd('0x24')](function(_0x102238){if(_0x102238){_0x384a40=_0x102238[_0x9bcd('0x38')];if(!_0x30d674['query']['hasOwnProperty'](_0x9bcd('0x70'))){_0x2dea95['limit']=qs[_0x9bcd('0x1d')](_0x30d674[_0x9bcd('0x33')][_0x9bcd('0x1d')]);_0x2dea95['offset']=qs[_0x9bcd('0x71')](_0x30d674[_0x9bcd('0x33')]['offset']);}return _0x487732[_0x9bcd('0x6e')](_0x2dea95);}})[_0x9bcd('0x24')](function(_0x76cde9){if(_0x76cde9){return _0x76cde9?{'count':_0x384a40,'rows':_0x76cde9}:null;}})[_0x9bcd('0x24')](respondWithResult(_0x22ffaa,null))[_0x9bcd('0x48')](handleError(_0x22ffaa,null));};
\ No newline at end of file
+var _0x743f=['root','files','user','UserProfileSection','userProfileId','catch','readdirSync','forEach','unlinkSync','Sequelize','ValidationError','message','addSound','findOne','save_name','converted_format','createdAt','server/files/sounds/converted','format','%s.%s','basename','extname','server/files/moh','symlinkSync','removeSound','id2','Sound','getSounds','pick','nolimit','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','set','apply','reject','save','then','get','MusicOnHolds','UserProfileResource','error','stack','name','index','VoiceMusicOnHold','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','limit','sort','where','filter','merge','map','type','VIRTUAL','field','options','include','show','params','includeAll','find','update','body','create','sequelize','transaction','mode','directory','join'];(function(_0x5b6722,_0x1b6bd1){var _0x27ff85=function(_0x19b5f8){while(--_0x19b5f8){_0x5b6722['push'](_0x5b6722['shift']());}};_0x27ff85(++_0x1b6bd1);}(_0x743f,0x1be));var _0xf743=function(_0x180845,_0x3c316c){_0x180845=_0x180845-0x0;var _0x582696=_0x743f[_0x180845];return _0x582696;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xf743('0x0'));var rimraf=require(_0xf743('0x1'));var zipdir=require(_0xf743('0x2'));var jsonpatch=require(_0xf743('0x3'));var rp=require(_0xf743('0x4'));var moment=require(_0xf743('0x5'));var BPromise=require(_0xf743('0x6'));var Mustache=require('mustache');var util=require(_0xf743('0x7'));var path=require(_0xf743('0x8'));var sox=require('sox');var csv=require(_0xf743('0x9'));var ejs=require(_0xf743('0xa'));var fs=require('fs');var _=require(_0xf743('0xb'));var squel=require(_0xf743('0xc'));var crypto=require(_0xf743('0xd'));var jsforce=require(_0xf743('0xe'));var deskjs=require(_0xf743('0xf'));var toCsv=require(_0xf743('0x9'));var querystring=require(_0xf743('0x10'));var Papa=require('papaparse');var Redis=require(_0xf743('0x11'));var authService=require(_0xf743('0x12'));var qs=require(_0xf743('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')('api');var utils=require(_0xf743('0x14'));var config=require(_0xf743('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4e303e,_0x57cfc7){_0x57cfc7=_0x57cfc7||0xcc;return function(_0x1ea6e6){if(_0x1ea6e6){return _0x4e303e[_0xf743('0x16')](_0x57cfc7);}return _0x4e303e['status'](_0x57cfc7)[_0xf743('0x17')]();};}function respondWithResult(_0x249b76,_0x4365a3){_0x4365a3=_0x4365a3||0xc8;return function(_0x178a27){if(_0x178a27){return _0x249b76[_0xf743('0x18')](_0x4365a3)[_0xf743('0x19')](_0x178a27);}};}function respondWithFilteredResult(_0x334788,_0x56db9e){return function(_0x5ae0b3){if(_0x5ae0b3){var _0x3815f9=_0x5ae0b3[_0xf743('0x1a')],_0x5546fa=_0x56db9e[_0xf743('0x1b')],_0x4a22a9=_0x56db9e[_0xf743('0x1b')]+_0x56db9e['limit'],_0x1e2e05;if(_0x4a22a9>=_0x3815f9){_0x4a22a9=_0x3815f9;_0x1e2e05=0xc8;}else{_0x1e2e05=0xce;}_0x334788[_0xf743('0x18')](_0x1e2e05);return _0x334788[_0xf743('0x1c')]('Content-Range',_0x5546fa+'-'+_0x4a22a9+'/'+_0x3815f9)[_0xf743('0x19')](_0x5ae0b3);}return null;};}function patchUpdates(_0x51ee3c){return function(_0x5e5973){try{jsonpatch[_0xf743('0x1d')](_0x5e5973,_0x51ee3c,!![]);}catch(_0x41a740){return BPromise[_0xf743('0x1e')](_0x41a740);}return _0x5e5973[_0xf743('0x1f')]();};}function saveUpdates(_0x18b7fa,_0x52df54){return function(_0x3d6c08){if(_0x3d6c08){return _0x3d6c08['update'](_0x18b7fa)['then'](function(_0x1297ff){return _0x1297ff;});}return null;};}function removeEntity(_0x584ad9,_0x1e4f5d){return function(_0x2231e7){if(_0x2231e7){return _0x2231e7['destroy']()[_0xf743('0x20')](function(){var _0x57ced3=_0x2231e7[_0xf743('0x21')]({'plain':!![]});var _0x29cccc=_0xf743('0x22');return db[_0xf743('0x23')]['destroy']({'where':{'type':_0x29cccc,'resourceId':_0x57ced3['id']}})[_0xf743('0x20')](function(){return _0x2231e7;});})['then'](function(){_0x584ad9['status'](0xcc)[_0xf743('0x17')]();});}};}function handleEntityNotFound(_0x46691b,_0x150e10){return function(_0x20c666){if(!_0x20c666){_0x46691b[_0xf743('0x16')](0x194);}return _0x20c666;};}function handleError(_0x328604,_0x4c4163){_0x4c4163=_0x4c4163||0x1f4;return function(_0xc3a2f9){logger[_0xf743('0x24')](_0xc3a2f9[_0xf743('0x25')]);if(_0xc3a2f9[_0xf743('0x26')]){delete _0xc3a2f9[_0xf743('0x26')];}_0x328604['status'](_0x4c4163)['send'](_0xc3a2f9);};}exports[_0xf743('0x27')]=function(_0xa7d482,_0x3f819e){var _0x1d152d={},_0x357f51={},_0x578b80={'count':0x0,'rows':[]};var _0x294ec9=db[_0xf743('0x28')][_0xf743('0x29')];_0x357f51['model']=_['keys'](_0x294ec9);_0x357f51['query']=_[_0xf743('0x2a')](_0xa7d482[_0xf743('0x2b')]);_0x357f51[_0xf743('0x2c')]=_[_0xf743('0x2d')](_0x357f51[_0xf743('0x2e')],_0x357f51[_0xf743('0x2b')]);_0x1d152d[_0xf743('0x2f')]=_[_0xf743('0x2d')](_0x357f51[_0xf743('0x2e')],qs[_0xf743('0x30')](_0xa7d482['query'][_0xf743('0x30')]));_0x1d152d[_0xf743('0x2f')]=_0x1d152d[_0xf743('0x2f')][_0xf743('0x31')]?_0x1d152d[_0xf743('0x2f')]:_0x357f51[_0xf743('0x2e')];if(!_0xa7d482[_0xf743('0x2b')][_0xf743('0x32')]('nolimit')){_0x1d152d[_0xf743('0x33')]=qs[_0xf743('0x33')](_0xa7d482[_0xf743('0x2b')][_0xf743('0x33')]);_0x1d152d[_0xf743('0x1b')]=qs[_0xf743('0x1b')](_0xa7d482[_0xf743('0x2b')][_0xf743('0x1b')]);}_0x1d152d['order']=qs['sort'](_0xa7d482[_0xf743('0x2b')][_0xf743('0x34')]);_0x1d152d[_0xf743('0x35')]=qs[_0xf743('0x2c')](_['pick'](_0xa7d482['query'],_0x357f51['filters']));if(_0xa7d482[_0xf743('0x2b')][_0xf743('0x36')]){_0x1d152d[_0xf743('0x35')]=_[_0xf743('0x37')](_0x1d152d[_0xf743('0x35')],{'$or':_[_0xf743('0x38')](_0x294ec9,function(_0x4ac563){if(_0x4ac563[_0xf743('0x39')]['key']!==_0xf743('0x3a')){var _0x52db96={};_0x52db96[_0x4ac563[_0xf743('0x3b')]]={'$like':'%'+_0xa7d482[_0xf743('0x2b')][_0xf743('0x36')]+'%'};return _0x52db96;}})});}_0x1d152d=_[_0xf743('0x37')]({},_0x1d152d,_0xa7d482[_0xf743('0x3c')]);var _0x2a34d4={'where':_0x1d152d[_0xf743('0x35')]};return db[_0xf743('0x28')][_0xf743('0x1a')](_0x2a34d4)[_0xf743('0x20')](function(_0x1f4f4e){_0x578b80[_0xf743('0x1a')]=_0x1f4f4e;if(_0xa7d482[_0xf743('0x2b')]['includeAll']){_0x1d152d[_0xf743('0x3d')]=[{'all':!![]}];}return db[_0xf743('0x28')]['findAll'](_0x1d152d);})[_0xf743('0x20')](function(_0x56730d){_0x578b80['rows']=_0x56730d;return _0x578b80;})['then'](respondWithFilteredResult(_0x3f819e,_0x1d152d))['catch'](handleError(_0x3f819e,null));};exports[_0xf743('0x3e')]=function(_0x329333,_0x4abfdc){var _0x12379f={'raw':![],'where':{'id':_0x329333[_0xf743('0x3f')]['id']}},_0xfaf275={};_0xfaf275[_0xf743('0x2e')]=_[_0xf743('0x2a')](db[_0xf743('0x28')][_0xf743('0x29')]);_0xfaf275[_0xf743('0x2b')]=_[_0xf743('0x2a')](_0x329333[_0xf743('0x2b')]);_0xfaf275['filters']=_[_0xf743('0x2d')](_0xfaf275[_0xf743('0x2e')],_0xfaf275[_0xf743('0x2b')]);_0x12379f['attributes']=_['intersection'](_0xfaf275[_0xf743('0x2e')],qs[_0xf743('0x30')](_0x329333[_0xf743('0x2b')]['fields']));_0x12379f[_0xf743('0x2f')]=_0x12379f['attributes'][_0xf743('0x31')]?_0x12379f['attributes']:_0xfaf275[_0xf743('0x2e')];if(_0x329333[_0xf743('0x2b')][_0xf743('0x40')]){_0x12379f['include']=[{'all':!![]}];}_0x12379f=_[_0xf743('0x37')]({},_0x12379f,_0x329333[_0xf743('0x3c')]);return db[_0xf743('0x28')][_0xf743('0x41')](_0x12379f)[_0xf743('0x20')](handleEntityNotFound(_0x4abfdc,null))[_0xf743('0x20')](respondWithResult(_0x4abfdc,null))['catch'](handleError(_0x4abfdc,null));};exports[_0xf743('0x42')]=function(_0x31547,_0x2f19e3){if(_0x31547[_0xf743('0x43')]['id']){delete _0x31547[_0xf743('0x43')]['id'];}return db[_0xf743('0x28')]['find']({'where':{'id':_0x31547[_0xf743('0x3f')]['id']}})[_0xf743('0x20')](handleEntityNotFound(_0x2f19e3,null))[_0xf743('0x20')](saveUpdates(_0x31547['body'],null))['then'](respondWithResult(_0x2f19e3,null))['catch'](handleError(_0x2f19e3,null));};exports[_0xf743('0x44')]=function(_0x144ab5,_0x3aaaa3,_0x10e49b){return db[_0xf743('0x45')][_0xf743('0x46')](function(_0x218b4d){if(_0x144ab5['body'][_0xf743('0x47')]==='files'){_0x144ab5[_0xf743('0x43')][_0xf743('0x48')]=path[_0xf743('0x49')](config[_0xf743('0x4a')],'server/files/moh',_0x144ab5[_0xf743('0x43')][_0xf743('0x26')]);}return db['VoiceMusicOnHold']['create'](_0x144ab5['body'],{'transaction':_0x218b4d})['then'](function(_0x2eca8b){if(_0x144ab5[_0xf743('0x43')][_0xf743('0x47')]===_0xf743('0x4b')){fs['mkdirSync'](_0x2eca8b[_0xf743('0x48')],parseInt('0777',0x8));}var _0x223b41=_0x144ab5[_0xf743('0x4c')]['get']({'plain':!![]});if(!_0x223b41)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x223b41['role']==='user'){var _0x26fec3=_0x2eca8b[_0xf743('0x21')]({'plain':!![]});return db[_0xf743('0x4d')][_0xf743('0x41')]({'where':{'name':'MusicOnHolds','userProfileId':_0x223b41[_0xf743('0x4e')]},'raw':!![]})['then'](function(_0x5938cd){if(_0x5938cd&&_0x5938cd['autoAssociation']===0x0){return db['UserProfileResource']['create']({'name':_0x26fec3[_0xf743('0x26')],'resourceId':_0x26fec3['id'],'type':_0x5938cd[_0xf743('0x26')],'sectionId':_0x5938cd['id']},{})['then'](function(){return _0x2eca8b;});}else{return _0x2eca8b;}})[_0xf743('0x4f')](function(_0x32d36b){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x32d36b);});}return _0x2eca8b;});})[_0xf743('0x20')](respondWithResult(_0x3aaaa3,0xc9))['catch'](handleError(_0x3aaaa3,null));};exports['destroy']=function(_0x41680f,_0x7c7f,_0x12e8f2){var _0x4268ab;return db[_0xf743('0x28')]['find']({'where':{'id':_0x41680f[_0xf743('0x3f')]['id']}})[_0xf743('0x20')](function(_0x1c5774){if(_0x1c5774){return db[_0xf743('0x45')][_0xf743('0x46')](function(_0x35b86d){return _0x1c5774['destroy']({'transaction':_0x35b86d,'raw':!![]})[_0xf743('0x20')](function(_0x5c8f41){if(_0x5c8f41[_0xf743('0x48')]){fs[_0xf743('0x50')](_0x5c8f41[_0xf743('0x48')])[_0xf743('0x51')](function(_0x31ba0b){fs[_0xf743('0x52')](path[_0xf743('0x49')](_0x5c8f41[_0xf743('0x48')],_0x31ba0b));});fs['rmdirSync'](_0x5c8f41[_0xf743('0x48')]);}return _0x5c8f41;});})[_0xf743('0x4f')](function(_0x28f2df){throw new db[(_0xf743('0x53'))][(_0xf743('0x54'))](_0x28f2df[_0xf743('0x55')]);});}})[_0xf743('0x20')](handleEntityNotFound(_0x7c7f,null))['then'](removeEntity(_0x7c7f,null))[_0xf743('0x4f')](handleError(_0x7c7f,null));};exports[_0xf743('0x56')]=function(_0x1b94c8,_0x5b8deb,_0x6d9ba3){return db['sequelize'][_0xf743('0x46')](function(_0xc91595){var _0x341b55;return db[_0xf743('0x28')][_0xf743('0x41')]({'where':{'id':_0x1b94c8['params']['id']}})[_0xf743('0x20')](function(_0x2a01ca){if(_0x2a01ca){_0x341b55=_0x2a01ca;return _0x2a01ca['addSound'](_0x1b94c8['body']['id'],{'transaction':_0xc91595});}})[_0xf743('0x20')](function(_0x8721de){if(_0x8721de){return db['Sound'][_0xf743('0x57')]({'where':{'id':_0x1b94c8['body']['id']},'attributes':['id',_0xf743('0x26'),_0xf743('0x58'),_0xf743('0x59'),_0xf743('0x5a')],'raw':!![]});}})[_0xf743('0x20')](function(_0x3a3e13){if(_0x3a3e13){var _0x41f231=path[_0xf743('0x49')](config[_0xf743('0x4a')],_0xf743('0x5b'),util[_0xf743('0x5c')](_0xf743('0x5d'),path[_0xf743('0x5e')](_0x3a3e13[_0xf743('0x58')],path[_0xf743('0x5f')](_0x3a3e13['save_name'])),_0x3a3e13[_0xf743('0x59')]));var _0x25c3e8=path[_0xf743('0x49')](config[_0xf743('0x4a')],_0xf743('0x60'),_0x341b55[_0xf743('0x26')],util['format'](_0xf743('0x5d'),_0x3a3e13[_0xf743('0x26')],_0x3a3e13['converted_format']));fs[_0xf743('0x61')](_0x41f231,_0x25c3e8);return _0x3a3e13;}})[_0xf743('0x4f')](function(_0x41fce2){throw new db[(_0xf743('0x53'))]['ValidationError'](_0x41fce2['message']);});})[_0xf743('0x20')](handleEntityNotFound(_0x5b8deb,null))[_0xf743('0x20')](respondWithResult(_0x5b8deb,0xc9))[_0xf743('0x4f')](handleError(_0x5b8deb,null));};exports[_0xf743('0x62')]=function(_0x1379ef,_0x42501c,_0x352637){return db['sequelize'][_0xf743('0x46')](function(_0x23ab9d){var _0x45eee3;return db[_0xf743('0x28')]['findOne']({'where':{'id':_0x1379ef['params']['id']}})[_0xf743('0x20')](handleEntityNotFound(_0x42501c,null))['then'](function(_0x6d31e5){if(_0x6d31e5){_0x45eee3=_0x6d31e5;return _0x6d31e5['removeSound'](_0x1379ef['params'][_0xf743('0x63')]);}})[_0xf743('0x20')](function(_0x374911){if(_0x374911){return db[_0xf743('0x64')]['findOne']({'where':{'id':_0x1379ef[_0xf743('0x3f')][_0xf743('0x63')]},'attributes':['id',_0xf743('0x26'),_0xf743('0x58'),_0xf743('0x59'),_0xf743('0x5a')],'raw':!![]});}})[_0xf743('0x20')](function(_0xa32749){if(_0xa32749){fs[_0xf743('0x52')](path[_0xf743('0x49')](_0x45eee3['directory'],util[_0xf743('0x5c')](_0xf743('0x5d'),_0xa32749[_0xf743('0x26')],_0xa32749[_0xf743('0x59')])));return _0xa32749;}})[_0xf743('0x4f')](function(_0x109262){throw new db[(_0xf743('0x53'))][(_0xf743('0x54'))](_0x109262[_0xf743('0x55')]);});})[_0xf743('0x20')](handleEntityNotFound(_0x42501c,null))[_0xf743('0x20')](respondWithStatusCode(_0x42501c,0xcc))[_0xf743('0x4f')](handleError(_0x42501c,null));};exports[_0xf743('0x65')]=function(_0x2581f3,_0x25921c,_0x367e9a){var _0x4a0b6d={};var _0x4e636f={};var _0x522b37;var _0x2933c7;return db[_0xf743('0x28')][_0xf743('0x57')]({'where':{'id':_0x2581f3['params']['id']}})[_0xf743('0x20')](handleEntityNotFound(_0x25921c,null))[_0xf743('0x20')](function(_0x3bccda){if(_0x3bccda){_0x522b37=_0x3bccda;_0x4e636f['model']=_[_0xf743('0x2a')](db[_0xf743('0x64')][_0xf743('0x29')]);_0x4e636f[_0xf743('0x2b')]=_['keys'](_0x2581f3[_0xf743('0x2b')]);_0x4e636f[_0xf743('0x2c')]=_[_0xf743('0x2d')](_0x4e636f[_0xf743('0x2e')],_0x4e636f[_0xf743('0x2b')]);_0x4a0b6d[_0xf743('0x2f')]=_[_0xf743('0x2d')](_0x4e636f[_0xf743('0x2e')],qs[_0xf743('0x30')](_0x2581f3[_0xf743('0x2b')][_0xf743('0x30')]));_0x4a0b6d[_0xf743('0x2f')]=_0x4a0b6d[_0xf743('0x2f')][_0xf743('0x31')]?_0x4a0b6d[_0xf743('0x2f')]:_0x4e636f['model'];_0x4a0b6d['order']=qs[_0xf743('0x34')](_0x2581f3[_0xf743('0x2b')]['sort']);_0x4a0b6d[_0xf743('0x35')]=qs['filters'](_[_0xf743('0x66')](_0x2581f3[_0xf743('0x2b')],_0x4e636f[_0xf743('0x2c')]));if(_0x2581f3[_0xf743('0x2b')][_0xf743('0x36')]){_0x4a0b6d[_0xf743('0x35')]=_['merge'](_0x4a0b6d[_0xf743('0x35')],{'$or':_[_0xf743('0x38')](_0x4a0b6d[_0xf743('0x2f')],function(_0x29106a){var _0x4c7143={};_0x4c7143[_0x29106a]={'$like':'%'+_0x2581f3[_0xf743('0x2b')][_0xf743('0x36')]+'%'};return _0x4c7143;})});}_0x4a0b6d=_[_0xf743('0x37')]({},_0x4a0b6d,_0x2581f3[_0xf743('0x3c')]);return _0x522b37['getSounds'](_0x4a0b6d);}})['then'](function(_0x253e55){if(_0x253e55){_0x2933c7=_0x253e55['length'];if(!_0x2581f3[_0xf743('0x2b')][_0xf743('0x32')](_0xf743('0x67'))){_0x4a0b6d['limit']=qs[_0xf743('0x33')](_0x2581f3['query'][_0xf743('0x33')]);_0x4a0b6d[_0xf743('0x1b')]=qs['offset'](_0x2581f3[_0xf743('0x2b')][_0xf743('0x1b')]);}return _0x522b37['getSounds'](_0x4a0b6d);}})[_0xf743('0x20')](function(_0x2ed72b){if(_0x2ed72b){return _0x2ed72b?{'count':_0x2933c7,'rows':_0x2ed72b}:null;}})[_0xf743('0x20')](respondWithResult(_0x25921c,null))[_0xf743('0x4f')](handleError(_0x25921c,null));};
\ No newline at end of file
index f606956..9654b38 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x984b=['path','rimraf','./voiceMusicOnHold.attributes','exports','VoiceMusicOnHold','voice_musiconhold','lodash','util','../../config/logger','moment','bluebird','request-promise'];(function(_0x4b8e86,_0x2bf512){var _0x43bb32=function(_0x334d7a){while(--_0x334d7a){_0x4b8e86['push'](_0x4b8e86['shift']());}};_0x43bb32(++_0x2bf512);}(_0x984b,0x17a));var _0xb984=function(_0x520295,_0x4b3c32){_0x520295=_0x520295-0x0;var _0x5ce53d=_0x984b[_0x520295];return _0x5ce53d;};'use strict';var _=require(_0xb984('0x0'));var util=require(_0xb984('0x1'));var logger=require(_0xb984('0x2'))('api');var moment=require(_0xb984('0x3'));var BPromise=require(_0xb984('0x4'));var rp=require(_0xb984('0x5'));var fs=require('fs');var path=require(_0xb984('0x6'));var rimraf=require(_0xb984('0x7'));var config=require('../../config/environment');var attributes=require(_0xb984('0x8'));module[_0xb984('0x9')]=function(_0x451c38,_0xe84650){return _0x451c38['define'](_0xb984('0xa'),attributes,{'tableName':_0xb984('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x85b2=['../../config/environment','./voiceMusicOnHold.attributes','exports','define','VoiceMusicOnHold','voice_musiconhold','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf'];(function(_0x4b754a,_0xd7e0a4){var _0x424fde=function(_0x29ff22){while(--_0x29ff22){_0x4b754a['push'](_0x4b754a['shift']());}};_0x424fde(++_0xd7e0a4);}(_0x85b2,0xd8));var _0x285b=function(_0x60434d,_0x52bcdc){_0x60434d=_0x60434d-0x0;var _0x1fbd30=_0x85b2[_0x60434d];return _0x1fbd30;};'use strict';var _=require(_0x285b('0x0'));var util=require(_0x285b('0x1'));var logger=require(_0x285b('0x2'))(_0x285b('0x3'));var moment=require(_0x285b('0x4'));var BPromise=require(_0x285b('0x5'));var rp=require(_0x285b('0x6'));var fs=require('fs');var path=require(_0x285b('0x7'));var rimraf=require(_0x285b('0x8'));var config=require(_0x285b('0x9'));var attributes=require(_0x285b('0xa'));module[_0x285b('0xb')]=function(_0x2dda0d,_0xc19f46){return _0x2dda0d[_0x285b('0xc')](_0x285b('0xd'),attributes,{'tableName':_0x285b('0xe'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 583424e..1ffdb72 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0f79=['result','catch','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','then','request\x20sent','debug','VoiceMusicOnHold,\x20%s,\x20%s,\x20%s','stringify','error','code','VoiceMusicOnHold,\x20%s,\x20%s','message','info'];(function(_0xbb091,_0x3fe7ee){var _0x467a04=function(_0x3a978d){while(--_0x3a978d){_0xbb091['push'](_0xbb091['shift']());}};_0x467a04(++_0x3fe7ee);}(_0x0f79,0xd1));var _0x90f7=function(_0x1ab180,_0x382b2c){_0x1ab180=_0x1ab180-0x0;var _0xfb2c2d=_0x0f79[_0x1ab180];return _0xfb2c2d;};'use strict';var _=require('lodash');var util=require(_0x90f7('0x0'));var moment=require(_0x90f7('0x1'));var BPromise=require(_0x90f7('0x2'));var rs=require(_0x90f7('0x3'));var fs=require('fs');var Redis=require(_0x90f7('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x90f7('0x5'));var logger=require(_0x90f7('0x6'))('rpc');var config=require(_0x90f7('0x7'));var jayson=require(_0x90f7('0x8'));var client=jayson[_0x90f7('0x9')][_0x90f7('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x311344,_0x66a858,_0x2b9250){return new BPromise(function(_0x36e1c7,_0x218756){return client['request'](_0x311344,_0x2b9250)[_0x90f7('0xb')](function(_0x48acda){logger['info']('VoiceMusicOnHold,\x20%s,\x20%s',_0x66a858,_0x90f7('0xc'));logger[_0x90f7('0xd')](_0x90f7('0xe'),_0x66a858,_0x90f7('0xc'),JSON[_0x90f7('0xf')](_0x48acda));if(_0x48acda['error']){if(_0x48acda[_0x90f7('0x10')][_0x90f7('0x11')]===0x1f4){logger['error'](_0x90f7('0x12'),_0x66a858,_0x48acda['error'][_0x90f7('0x13')]);return _0x218756(_0x48acda[_0x90f7('0x10')][_0x90f7('0x13')]);}logger['error'](_0x90f7('0x12'),_0x66a858,_0x48acda[_0x90f7('0x10')][_0x90f7('0x13')]);return _0x36e1c7(_0x48acda[_0x90f7('0x10')]['message']);}else{logger[_0x90f7('0x14')](_0x90f7('0x12'),_0x66a858,_0x90f7('0xc'));_0x36e1c7(_0x48acda[_0x90f7('0x15')][_0x90f7('0x13')]);}})[_0x90f7('0x16')](function(_0x1a45c4){logger['error']('VoiceMusicOnHold,\x20%s,\x20%s',_0x66a858,_0x1a45c4);_0x218756(_0x1a45c4);});});}
\ No newline at end of file
+var _0xf8c7=['VoiceMusicOnHold,\x20%s,\x20%s','debug','request\x20sent','stringify','error','message','result','catch','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','then','info'];(function(_0x418b68,_0x5d3f24){var _0x1ebc60=function(_0x1a0c79){while(--_0x1a0c79){_0x418b68['push'](_0x418b68['shift']());}};_0x1ebc60(++_0x5d3f24);}(_0xf8c7,0x110));var _0x7f8c=function(_0x305875,_0x49ba22){_0x305875=_0x305875-0x0;var _0x2e3c1f=_0xf8c7[_0x305875];return _0x2e3c1f;};'use strict';var _=require(_0x7f8c('0x0'));var util=require(_0x7f8c('0x1'));var moment=require(_0x7f8c('0x2'));var BPromise=require(_0x7f8c('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7f8c('0x4'));var db=require(_0x7f8c('0x5'))['db'];var utils=require(_0x7f8c('0x6'));var logger=require(_0x7f8c('0x7'))('rpc');var config=require(_0x7f8c('0x8'));var jayson=require(_0x7f8c('0x9'));var client=jayson[_0x7f8c('0xa')][_0x7f8c('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x32f454,_0x467c6d,_0x985d90){return new BPromise(function(_0x20ea9f,_0x308778){return client['request'](_0x32f454,_0x985d90)[_0x7f8c('0xc')](function(_0x602217){logger[_0x7f8c('0xd')](_0x7f8c('0xe'),_0x467c6d,'request\x20sent');logger[_0x7f8c('0xf')]('VoiceMusicOnHold,\x20%s,\x20%s,\x20%s',_0x467c6d,_0x7f8c('0x10'),JSON[_0x7f8c('0x11')](_0x602217));if(_0x602217[_0x7f8c('0x12')]){if(_0x602217['error']['code']===0x1f4){logger[_0x7f8c('0x12')]('VoiceMusicOnHold,\x20%s,\x20%s',_0x467c6d,_0x602217[_0x7f8c('0x12')]['message']);return _0x308778(_0x602217[_0x7f8c('0x12')][_0x7f8c('0x13')]);}logger['error'](_0x7f8c('0xe'),_0x467c6d,_0x602217[_0x7f8c('0x12')][_0x7f8c('0x13')]);return _0x20ea9f(_0x602217[_0x7f8c('0x12')][_0x7f8c('0x13')]);}else{logger[_0x7f8c('0xd')]('VoiceMusicOnHold,\x20%s,\x20%s',_0x467c6d,_0x7f8c('0x10'));_0x20ea9f(_0x602217[_0x7f8c('0x14')]['message']);}})[_0x7f8c('0x15')](function(_0x211d8c){logger['error']('VoiceMusicOnHold,\x20%s,\x20%s',_0x467c6d,_0x211d8c);_0x308778(_0x211d8c);});});}
\ No newline at end of file
index cb6ccbb..e0986a3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x082b=['../../components/auth/service','../../components/interaction/service','./voicePrefix.controller','get','index','describe','show','/:id/users','isAuthenticated','getAgents','post','create','addAgents','put','/:id','update','destroy','delete','removeAgents','exports','multer','util','connect-timeout','Router'];(function(_0x57cc7a,_0x1e738d){var _0x5d6159=function(_0xb455d5){while(--_0xb455d5){_0x57cc7a['push'](_0x57cc7a['shift']());}};_0x5d6159(++_0x1e738d);}(_0x082b,0x1ac));var _0xb082=function(_0x286307,_0x309486){_0x286307=_0x286307-0x0;var _0x58cf6a=_0x082b[_0x286307];return _0x58cf6a;};'use strict';var multer=require(_0xb082('0x0'));var util=require(_0xb082('0x1'));var path=require('path');var timeout=require(_0xb082('0x2'));var express=require('express');var router=express[_0xb082('0x3')]();var auth=require(_0xb082('0x4'));var interaction=require(_0xb082('0x5'));var config=require('../../config/environment');var controller=require(_0xb082('0x6'));router[_0xb082('0x7')]('/',auth['isAuthenticated'](),controller[_0xb082('0x8')]);router['get']('/describe',auth['isAuthenticated'](),controller[_0xb082('0x9')]);router[_0xb082('0x7')]('/:id',auth['isAuthenticated'](),controller[_0xb082('0xa')]);router[_0xb082('0x7')](_0xb082('0xb'),auth[_0xb082('0xc')](),controller[_0xb082('0xd')]);router[_0xb082('0xe')]('/',auth[_0xb082('0xc')](),controller[_0xb082('0xf')]);router[_0xb082('0xe')](_0xb082('0xb'),auth[_0xb082('0xc')](),controller[_0xb082('0x10')]);router[_0xb082('0x11')](_0xb082('0x12'),auth[_0xb082('0xc')](),controller[_0xb082('0x13')]);router['delete'](_0xb082('0x12'),auth['isAuthenticated'](),controller[_0xb082('0x14')]);router[_0xb082('0x15')](_0xb082('0xb'),auth[_0xb082('0xc')](),controller[_0xb082('0x16')]);module[_0xb082('0x17')]=router;
\ No newline at end of file
+var _0xada2=['multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','index','/describe','describe','/:id','/:id/users','getAgents','post','create','addAgents','put','delete','destroy','removeAgents','exports'];(function(_0x43706f,_0x236d00){var _0x48041c=function(_0x22a049){while(--_0x22a049){_0x43706f['push'](_0x43706f['shift']());}};_0x48041c(++_0x236d00);}(_0xada2,0xfd));var _0x2ada=function(_0x3dbffe,_0x4c0475){_0x3dbffe=_0x3dbffe-0x0;var _0x326bab=_0xada2[_0x3dbffe];return _0x326bab;};'use strict';var multer=require(_0x2ada('0x0'));var util=require(_0x2ada('0x1'));var path=require(_0x2ada('0x2'));var timeout=require(_0x2ada('0x3'));var express=require('express');var router=express[_0x2ada('0x4')]();var auth=require(_0x2ada('0x5'));var interaction=require(_0x2ada('0x6'));var config=require('../../config/environment');var controller=require('./voicePrefix.controller');router[_0x2ada('0x7')]('/',auth[_0x2ada('0x8')](),controller[_0x2ada('0x9')]);router[_0x2ada('0x7')](_0x2ada('0xa'),auth[_0x2ada('0x8')](),controller[_0x2ada('0xb')]);router[_0x2ada('0x7')](_0x2ada('0xc'),auth[_0x2ada('0x8')](),controller['show']);router['get'](_0x2ada('0xd'),auth[_0x2ada('0x8')](),controller[_0x2ada('0xe')]);router[_0x2ada('0xf')]('/',auth[_0x2ada('0x8')](),controller[_0x2ada('0x10')]);router['post'](_0x2ada('0xd'),auth[_0x2ada('0x8')](),controller[_0x2ada('0x11')]);router[_0x2ada('0x12')]('/:id',auth[_0x2ada('0x8')](),controller['update']);router[_0x2ada('0x13')](_0x2ada('0xc'),auth[_0x2ada('0x8')](),controller[_0x2ada('0x14')]);router[_0x2ada('0x13')](_0x2ada('0xd'),auth[_0x2ada('0x8')](),controller[_0x2ada('0x15')]);module[_0x2ada('0x16')]=router;
\ No newline at end of file
index 21d4a12..78c41b4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0003=['STRING','VIRTUAL','system-','getDataValue','exports'];(function(_0x3ab51d,_0x2fa01d){var _0x29a04e=function(_0x7807b0){while(--_0x7807b0){_0x3ab51d['push'](_0x3ab51d['shift']());}};_0x29a04e(++_0x2fa01d);}(_0x0003,0x13a));var _0x3000=function(_0x397c37,_0x501529){_0x397c37=_0x397c37-0x0;var _0x1bd8d5=_0x0003[_0x397c37];return _0x1bd8d5;};'use strict';var Sequelize=require('sequelize');module[_0x3000('0x0')]={'name':{'type':Sequelize[_0x3000('0x1')],'allowNull':![],'unique':'name'},'prefix':{'type':Sequelize[_0x3000('0x2')],'get':function(_0x2488d7){return _0x3000('0x3')+this[_0x3000('0x4')]('name')+'-';}},'description':{'type':Sequelize[_0x3000('0x1')]},'callerIdAll':{'type':Sequelize[_0x3000('0x1')]},'VoiceExtensionId':{'type':Sequelize['INTEGER']}};
\ No newline at end of file
+var _0x5bd3=['INTEGER','exports','STRING','name','VIRTUAL'];(function(_0x38ab95,_0x51e4db){var _0x1af220=function(_0x130e41){while(--_0x130e41){_0x38ab95['push'](_0x38ab95['shift']());}};_0x1af220(++_0x51e4db);}(_0x5bd3,0x18c));var _0x35bd=function(_0x819464,_0x46fc91){_0x819464=_0x819464-0x0;var _0x49dcc0=_0x5bd3[_0x819464];return _0x49dcc0;};'use strict';var Sequelize=require('sequelize');module[_0x35bd('0x0')]={'name':{'type':Sequelize[_0x35bd('0x1')],'allowNull':![],'unique':_0x35bd('0x2')},'prefix':{'type':Sequelize[_0x35bd('0x3')],'get':function(_0x34947a){return'system-'+this['getDataValue'](_0x35bd('0x2'))+'-';}},'description':{'type':Sequelize['STRING']},'callerIdAll':{'type':Sequelize[_0x35bd('0x1')]},'VoiceExtensionId':{'type':Sequelize[_0x35bd('0x4')]}};
\ No newline at end of file
index 449b756..a860f1e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e74=['VoicePrefixId','bulkCreate','Extensions\x20creation\x20failed','prefix','push','Set','callerIdAll','No\x20callerid\x20available','goto','${EXTEN:','charAt','system-','transaction','findById','addAgents','ids','omit','emit','userVoicePrefix:save','removeAgents','getAgents','findOne','User','hasOwnProperty','nolimit','html-pdf','rimraf','zip-dir','fast-json-patch','bluebird','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','papaparse','../../components/parsers/qs','../../config/license/hardware','api','../../config/environment','../../mysqldb','defaults','redis','localhost','socket.io-emitter','register','status','end','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','get','VoicePrefixes','sendStatus','stack','name','send','index','VoicePrefix','rawAttributes','keys','query','filters','model','attributes','intersection','fields','length','order','sort','where','filter','merge','map','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','find','params','describe','create','sequelize','body','VoiceExtension','VoiceExtensionId','role','user','UserProfileSection','autoAssociation','UserProfileResource','error','exten','app','system','priority','appdata','NoOp','Voice\x20Prefix'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0x3e74,0x175));var _0x43e7=function(_0x73123e,_0x22aaa3){_0x73123e=_0x73123e-0x0;var _0x50b144=_0x3e74[_0x73123e];return _0x50b144;};'use strict';var pdf=require(_0x43e7('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x43e7('0x1'));var zipdir=require(_0x43e7('0x2'));var jsonpatch=require(_0x43e7('0x3'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x43e7('0x4'));var Mustache=require('mustache');var util=require(_0x43e7('0x5'));var path=require(_0x43e7('0x6'));var sox=require(_0x43e7('0x7'));var csv=require(_0x43e7('0x8'));var ejs=require(_0x43e7('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x43e7('0xa'));var crypto=require(_0x43e7('0xb'));var jsforce=require(_0x43e7('0xc'));var deskjs=require(_0x43e7('0xd'));var toCsv=require(_0x43e7('0x8'));var querystring=require('querystring');var Papa=require(_0x43e7('0xe'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x43e7('0xf'));var hardwareService=require(_0x43e7('0x10'));var logger=require('../../config/logger')(_0x43e7('0x11'));var utils=require('../../config/utils');var config=require(_0x43e7('0x12'));var db=require(_0x43e7('0x13'))['db'];config['redis']=_[_0x43e7('0x14')](config[_0x43e7('0x15')],{'host':_0x43e7('0x16'),'port':0x18eb});var socket=require(_0x43e7('0x17'))(new Redis(config['redis']));require('./voicePrefix.socket')[_0x43e7('0x18')](socket);function respondWithStatusCode(_0x21fdd3,_0x44b0bd){_0x44b0bd=_0x44b0bd||0xcc;return function(_0x51b974){if(_0x51b974){return _0x21fdd3['sendStatus'](_0x44b0bd);}return _0x21fdd3[_0x43e7('0x19')](_0x44b0bd)[_0x43e7('0x1a')]();};}function respondWithResult(_0x203378,_0x328445){_0x328445=_0x328445||0xc8;return function(_0x4de324){if(_0x4de324){return _0x203378['status'](_0x328445)[_0x43e7('0x1b')](_0x4de324);}};}function respondWithFilteredResult(_0x264575,_0x273a32){return function(_0x5d346f){if(_0x5d346f){var _0x4b5a6b=_0x5d346f[_0x43e7('0x1c')],_0x446986=_0x273a32[_0x43e7('0x1d')],_0x1ca758=_0x273a32[_0x43e7('0x1d')]+_0x273a32[_0x43e7('0x1e')],_0x9037d3;if(_0x1ca758>=_0x4b5a6b){_0x1ca758=_0x4b5a6b;_0x9037d3=0xc8;}else{_0x9037d3=0xce;}_0x264575[_0x43e7('0x19')](_0x9037d3);return _0x264575[_0x43e7('0x1f')](_0x43e7('0x20'),_0x446986+'-'+_0x1ca758+'/'+_0x4b5a6b)[_0x43e7('0x1b')](_0x5d346f);}return null;};}function patchUpdates(_0x177ee1){return function(_0x4b5d64){try{jsonpatch[_0x43e7('0x21')](_0x4b5d64,_0x177ee1,!![]);}catch(_0x3c6625){return BPromise['reject'](_0x3c6625);}return _0x4b5d64[_0x43e7('0x22')]();};}function saveUpdates(_0x3e281e,_0x3945bb){return function(_0x28aacc){if(_0x28aacc){return _0x28aacc[_0x43e7('0x23')](_0x3e281e)[_0x43e7('0x24')](function(_0x54a9e7){return _0x54a9e7;});}return null;};}function removeEntity(_0x454359,_0x4eea52){return function(_0x4c9df3){if(_0x4c9df3){return _0x4c9df3[_0x43e7('0x25')]()[_0x43e7('0x24')](function(){var _0x4b2b9f=_0x4c9df3[_0x43e7('0x26')]({'plain':!![]});var _0x4ca5cf=_0x43e7('0x27');return db['UserProfileResource'][_0x43e7('0x25')]({'where':{'type':_0x4ca5cf,'resourceId':_0x4b2b9f['id']}})[_0x43e7('0x24')](function(){return _0x4c9df3;});})[_0x43e7('0x24')](function(){_0x454359[_0x43e7('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x52b7b3,_0x805b54){return function(_0x501551){if(!_0x501551){_0x52b7b3[_0x43e7('0x28')](0x194);}return _0x501551;};}function handleError(_0x40dc8f,_0x3565cf){_0x3565cf=_0x3565cf||0x1f4;return function(_0xb1fc63){logger['error'](_0xb1fc63[_0x43e7('0x29')]);if(_0xb1fc63[_0x43e7('0x2a')]){delete _0xb1fc63[_0x43e7('0x2a')];}_0x40dc8f[_0x43e7('0x19')](_0x3565cf)[_0x43e7('0x2b')](_0xb1fc63);};}exports[_0x43e7('0x2c')]=function(_0x2b85a5,_0x31b2a6){var _0x3bf475={},_0x35dbcd={},_0x17df44={'count':0x0,'rows':[]};var _0x19725a=db[_0x43e7('0x2d')][_0x43e7('0x2e')];_0x35dbcd['model']=_[_0x43e7('0x2f')](_0x19725a);_0x35dbcd[_0x43e7('0x30')]=_[_0x43e7('0x2f')](_0x2b85a5[_0x43e7('0x30')]);_0x35dbcd[_0x43e7('0x31')]=_['intersection'](_0x35dbcd[_0x43e7('0x32')],_0x35dbcd[_0x43e7('0x30')]);_0x3bf475[_0x43e7('0x33')]=_[_0x43e7('0x34')](_0x35dbcd['model'],qs['fields'](_0x2b85a5['query'][_0x43e7('0x35')]));_0x3bf475[_0x43e7('0x33')]=_0x3bf475[_0x43e7('0x33')][_0x43e7('0x36')]?_0x3bf475[_0x43e7('0x33')]:_0x35dbcd[_0x43e7('0x32')];if(!_0x2b85a5['query']['hasOwnProperty']('nolimit')){_0x3bf475['limit']=qs['limit'](_0x2b85a5['query']['limit']);_0x3bf475[_0x43e7('0x1d')]=qs['offset'](_0x2b85a5[_0x43e7('0x30')][_0x43e7('0x1d')]);}_0x3bf475[_0x43e7('0x37')]=qs[_0x43e7('0x38')](_0x2b85a5[_0x43e7('0x30')][_0x43e7('0x38')]);_0x3bf475[_0x43e7('0x39')]=qs['filters'](_['pick'](_0x2b85a5['query'],_0x35dbcd[_0x43e7('0x31')]));if(_0x2b85a5[_0x43e7('0x30')][_0x43e7('0x3a')]){_0x3bf475[_0x43e7('0x39')]=_[_0x43e7('0x3b')](_0x3bf475[_0x43e7('0x39')],{'$or':_[_0x43e7('0x3c')](_0x19725a,function(_0x2ffd43){if(_0x2ffd43['type'][_0x43e7('0x3d')]!==_0x43e7('0x3e')){var _0x4a3ea2={};_0x4a3ea2[_0x2ffd43[_0x43e7('0x3f')]]={'$like':'%'+_0x2b85a5['query'][_0x43e7('0x3a')]+'%'};return _0x4a3ea2;}})});}_0x3bf475=_[_0x43e7('0x3b')]({},_0x3bf475,_0x2b85a5[_0x43e7('0x40')]);var _0x353852={'where':_0x3bf475[_0x43e7('0x39')]};return db[_0x43e7('0x2d')]['count'](_0x353852)['then'](function(_0x30dfa9){_0x17df44[_0x43e7('0x1c')]=_0x30dfa9;if(_0x2b85a5[_0x43e7('0x30')][_0x43e7('0x41')]){_0x3bf475[_0x43e7('0x42')]=[{'all':!![]}];}return db['VoicePrefix'][_0x43e7('0x43')](_0x3bf475);})[_0x43e7('0x24')](function(_0x575439){_0x17df44[_0x43e7('0x44')]=_0x575439;return _0x17df44;})['then'](respondWithFilteredResult(_0x31b2a6,_0x3bf475))[_0x43e7('0x45')](handleError(_0x31b2a6,null));};exports['show']=function(_0x3d81ae,_0x3b4235){var _0x3a5807={'raw':![],'where':{'id':_0x3d81ae['params']['id']}},_0x1c2c6b={};_0x1c2c6b['model']=_[_0x43e7('0x2f')](db[_0x43e7('0x2d')][_0x43e7('0x2e')]);_0x1c2c6b[_0x43e7('0x30')]=_['keys'](_0x3d81ae['query']);_0x1c2c6b['filters']=_[_0x43e7('0x34')](_0x1c2c6b['model'],_0x1c2c6b[_0x43e7('0x30')]);_0x3a5807['attributes']=_['intersection'](_0x1c2c6b[_0x43e7('0x32')],qs['fields'](_0x3d81ae[_0x43e7('0x30')][_0x43e7('0x35')]));_0x3a5807[_0x43e7('0x33')]=_0x3a5807[_0x43e7('0x33')]['length']?_0x3a5807[_0x43e7('0x33')]:_0x1c2c6b[_0x43e7('0x32')];if(_0x3d81ae[_0x43e7('0x30')][_0x43e7('0x41')]){_0x3a5807[_0x43e7('0x42')]=[{'all':!![]}];}_0x3a5807=_[_0x43e7('0x3b')]({},_0x3a5807,_0x3d81ae['options']);return db['VoicePrefix'][_0x43e7('0x46')](_0x3a5807)[_0x43e7('0x24')](handleEntityNotFound(_0x3b4235,null))[_0x43e7('0x24')](respondWithResult(_0x3b4235,null))['catch'](handleError(_0x3b4235,null));};exports['destroy']=function(_0x56489b,_0x292ded){return db[_0x43e7('0x2d')]['find']({'where':{'id':_0x56489b[_0x43e7('0x47')]['id']}})[_0x43e7('0x24')](handleEntityNotFound(_0x292ded,null))[_0x43e7('0x24')](removeEntity(_0x292ded,null))['catch'](handleError(_0x292ded,null));};exports['describe']=function(_0x4ec263,_0x4de644){return db[_0x43e7('0x2d')][_0x43e7('0x48')]()['then'](respondWithResult(_0x4de644,null))[_0x43e7('0x45')](handleError(_0x4de644,null));};exports[_0x43e7('0x49')]=function(_0x426bcb,_0x895f41){var _0x4a0ce5;return db[_0x43e7('0x4a')]['transaction'](function(_0x4bebd4){return db[_0x43e7('0x2d')][_0x43e7('0x49')](_0x426bcb[_0x43e7('0x4b')],{'transaction':_0x4bebd4})[_0x43e7('0x24')](function(_0x13503c){_0x4a0ce5=_0x13503c[_0x43e7('0x26')]({'plain':!![]});return db[_0x43e7('0x4c')][_0x43e7('0x46')]({'where':{'id':_0x4a0ce5[_0x43e7('0x4d')]},'raw':!![]})[_0x43e7('0x24')](function(_0x58dfd0){return createVoicePrefixExtensions(_0x4a0ce5,_0x58dfd0,_0x4bebd4);});});})[_0x43e7('0x24')](function(){var _0x46c910=_0x426bcb['user'][_0x43e7('0x26')]({'plain':!![]});if(!_0x46c910)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x46c910[_0x43e7('0x4e')]===_0x43e7('0x4f')){var _0x34e2ec=_0x4a0ce5;return db[_0x43e7('0x50')][_0x43e7('0x46')]({'where':{'name':'VoicePrefixes','userProfileId':_0x46c910['userProfileId']},'raw':!![]})[_0x43e7('0x24')](function(_0x2ab7ee){if(_0x2ab7ee&&_0x2ab7ee[_0x43e7('0x51')]===0x0){return db[_0x43e7('0x52')][_0x43e7('0x49')]({'name':_0x34e2ec[_0x43e7('0x2a')],'resourceId':_0x34e2ec['id'],'type':_0x2ab7ee[_0x43e7('0x2a')],'sectionId':_0x2ab7ee['id']},{})[_0x43e7('0x24')](function(){return _0x4a0ce5;});}else{return _0x4a0ce5;}})[_0x43e7('0x45')](function(_0x24e758){logger[_0x43e7('0x53')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x24e758);throw _0x24e758;});}return _0x4a0ce5;})[_0x43e7('0x24')](respondWithResult(_0x895f41,null))[_0x43e7('0x45')](handleError(_0x895f41,null));};function Extension(_0x50a3fa,_0x4314d8,_0x220bf2,_0x2d0052){this['context']='from-sip';this[_0x43e7('0x54')]=_0x50a3fa;this[_0x43e7('0x55')]=_0x220bf2;this['type']=_0x43e7('0x56');this['description']='Voice\x20Prefix\x20Extension';this[_0x43e7('0x57')]=_0x4314d8;this[_0x43e7('0x58')]=_0x2d0052;}function createVoicePrefixExtensions(_0x1f7c02,_0x40155c,_0x68697){return new BPromise(function(_0x4dfdb0,_0xc3976){var _0xdb9fbe=new Extension(formatPrefixName(_0x1f7c02['prefix']),0x1,_0x43e7('0x59'),_0x43e7('0x5a'));_0xdb9fbe[_0x43e7('0x5b')]=_0x1f7c02['id'];return db['VoiceExtension']['create'](_0xdb9fbe,{'transaction':_0x68697})['then'](function(_0x2ada55){var _0x4058ce=_0x2ada55[_0x43e7('0x26')]({'plain':!![]});var _0x3a6404=_['map'](addVoicePrefixExtensions(_0x1f7c02,_0x40155c),function(_0x5a50fc){_0x5a50fc[_0x43e7('0x4d')]=_0x4058ce['id'];_0x5a50fc[_0x43e7('0x5b')]=_0x1f7c02['id'];return _0x5a50fc;});return db[_0x43e7('0x4c')][_0x43e7('0x5c')](_0x3a6404,{'transaction':_0x68697})['then'](function(_0x4438c0){if(!_0x4438c0){return _0xc3976(_0x43e7('0x5d'));}else{return _0x4dfdb0(_0x4438c0);}})[_0x43e7('0x45')](function(_0x2a194d){return _0xc3976(_0x2a194d);});});;});};function addVoicePrefixExtensions(_0x3369b8,_0xd41e79){var _0x4665db=[];var _0x46748f=formatPrefixName(_0x3369b8[_0x43e7('0x5e')]);_0x4665db[_0x43e7('0x5f')](new Extension(_0x46748f,0x2,_0x43e7('0x60'),'CDR(prefix)='+_0x3369b8['name']));if(_0x3369b8[_0x43e7('0x61')]){_0x4665db['push'](new Extension(_0x46748f,0x3,'Set','PREFIX-CALLERIDALL='+_0x3369b8[_0x43e7('0x61')]));}else{_0x4665db[_0x43e7('0x5f')](new Extension(_0x46748f,0x3,'NoOp',_0x43e7('0x62')));}_0x4665db[_0x43e7('0x5f')](new Extension(_0x46748f,0x4,_0x43e7('0x63'),_0xd41e79['context']+','+_0x43e7('0x64')+(0x8+_0x3369b8[_0x43e7('0x2a')][_0x43e7('0x36')])+'}'+','+0x1));return _0x4665db;}function formatPrefixName(_0xc9723){var _0x2f43d7='_';for(var _0x472a19=0x0;_0x472a19<_0xc9723[_0x43e7('0x36')];_0x472a19++){if(_0xc9723['charAt'](_0x472a19)=='-'){_0x2f43d7+=_0xc9723[_0x43e7('0x65')](_0x472a19);}else{_0x2f43d7+='['+_0xc9723[_0x43e7('0x65')](_0x472a19)+']';}}_0x2f43d7+='.';return _0x2f43d7;}exports[_0x43e7('0x23')]=function(_0x549f4e,_0x56b06d,_0x30377a){var _0x5c3ad8=_0x549f4e['body'];_0x5c3ad8[_0x43e7('0x5e')]=_0x43e7('0x66')+_0x5c3ad8['name']+'-';return db[_0x43e7('0x4a')][_0x43e7('0x67')](function(_0x1e2fed){return db[_0x43e7('0x2d')][_0x43e7('0x23')](_0x5c3ad8,{'where':{'id':_0x5c3ad8['id']},'transaction':_0x1e2fed})[_0x43e7('0x24')](function(){return db[_0x43e7('0x4c')]['destroy']({'where':{'VoicePrefixId':_0x5c3ad8['id']},'transaction':_0x1e2fed})[_0x43e7('0x24')](function(){return db[_0x43e7('0x4c')]['find']({'where':{'id':_0x5c3ad8[_0x43e7('0x4d')]},'raw':!![]})['then'](function(_0x26ee52){return createVoicePrefixExtensions(_0x5c3ad8,_0x26ee52,_0x1e2fed);});});});})[_0x43e7('0x24')](function(){return db[_0x43e7('0x2d')][_0x43e7('0x68')](_0x5c3ad8['id']);})['then'](respondWithResult(_0x56b06d,null))[_0x43e7('0x45')](handleError(_0x56b06d,null));};exports[_0x43e7('0x69')]=function(_0xf929a5,_0x556001,_0x17889c){return db[_0x43e7('0x2d')][_0x43e7('0x46')]({'where':{'id':_0xf929a5[_0x43e7('0x47')]['id']}})[_0x43e7('0x24')](handleEntityNotFound(_0x556001,null))['then'](function(_0xb51897){if(_0xb51897){return _0xb51897[_0x43e7('0x69')](_0xf929a5[_0x43e7('0x4b')][_0x43e7('0x6a')],_[_0x43e7('0x6b')](_0xf929a5[_0x43e7('0x4b')],[_0x43e7('0x6a'),'id'])||{})['spread'](function(_0x499ee9){for(var _0x405faa=0x0;_0x405faa<_0xf929a5['body']['ids']['length'];_0x405faa+=0x1){socket[_0x43e7('0x6c')](_0x43e7('0x6d'),{'UserId':_0xf929a5[_0x43e7('0x4b')][_0x43e7('0x6a')][_0x405faa],'VoicePrefixId':_0xf929a5[_0x43e7('0x47')]['id']});}return _0x499ee9;});}})[_0x43e7('0x24')](respondWithResult(_0x556001,null))['catch'](handleError(_0x556001,null));};exports[_0x43e7('0x6e')]=function(_0x1ead5b,_0x2cd420,_0x5b4c76){return db[_0x43e7('0x2d')][_0x43e7('0x46')]({'where':{'id':_0x1ead5b[_0x43e7('0x47')]['id']}})[_0x43e7('0x24')](handleEntityNotFound(_0x2cd420,null))[_0x43e7('0x24')](function(_0xeb6340){if(_0xeb6340){return _0xeb6340[_0x43e7('0x6e')](_0x1ead5b[_0x43e7('0x30')]['ids'])['then'](function(){if(_['isArray'](_0x1ead5b[_0x43e7('0x30')][_0x43e7('0x6a')])){for(var _0x5355ff=0x0;_0x5355ff<_0x1ead5b[_0x43e7('0x30')][_0x43e7('0x6a')][_0x43e7('0x36')];_0x5355ff+=0x1){socket[_0x43e7('0x6c')]('userVoicePrefix:remove',{'UserId':Number(_0x1ead5b['query']['ids'][_0x5355ff]),'VoicePrefixId':Number(_0x1ead5b[_0x43e7('0x47')]['id'])});}}else{socket[_0x43e7('0x6c')]('userVoicePrefix:remove',{'UserId':Number(_0x1ead5b['query'][_0x43e7('0x6a')]),'VoicePrefixId':Number(_0x1ead5b[_0x43e7('0x47')]['id'])});}});}})[_0x43e7('0x24')](respondWithStatusCode(_0x2cd420,null))['catch'](handleError(_0x2cd420,null));};exports[_0x43e7('0x6f')]=function(_0x3d750f,_0x401654,_0xb04082){var _0x48f1dc={};var _0x1d7048={};var _0x520943;var _0xa66309;return db[_0x43e7('0x2d')][_0x43e7('0x70')]({'where':{'id':_0x3d750f[_0x43e7('0x47')]['id']}})[_0x43e7('0x24')](handleEntityNotFound(_0x401654,null))[_0x43e7('0x24')](function(_0x126133){if(_0x126133){_0x520943=_0x126133;_0x1d7048['model']=_[_0x43e7('0x2f')](db[_0x43e7('0x71')][_0x43e7('0x2e')]);_0x1d7048[_0x43e7('0x30')]=_['keys'](_0x3d750f['query']);_0x1d7048['filters']=_[_0x43e7('0x34')](_0x1d7048['model'],_0x1d7048[_0x43e7('0x30')]);_0x48f1dc[_0x43e7('0x33')]=_[_0x43e7('0x34')](_0x1d7048[_0x43e7('0x32')],qs[_0x43e7('0x35')](_0x3d750f[_0x43e7('0x30')][_0x43e7('0x35')]));_0x48f1dc[_0x43e7('0x33')]=_0x48f1dc[_0x43e7('0x33')][_0x43e7('0x36')]?_0x48f1dc[_0x43e7('0x33')]:_0x1d7048['model'];_0x48f1dc[_0x43e7('0x37')]=qs[_0x43e7('0x38')](_0x3d750f[_0x43e7('0x30')][_0x43e7('0x38')]);_0x48f1dc[_0x43e7('0x39')]=qs['filters'](_['pick'](_0x3d750f[_0x43e7('0x30')],_0x1d7048[_0x43e7('0x31')]));if(_0x3d750f['query'][_0x43e7('0x3a')]){_0x48f1dc[_0x43e7('0x39')]=_['merge'](_0x48f1dc['where'],{'$or':_[_0x43e7('0x3c')](_0x48f1dc[_0x43e7('0x33')],function(_0x22947e){var _0x1c0a84={};_0x1c0a84[_0x22947e]={'$like':'%'+_0x3d750f[_0x43e7('0x30')]['filter']+'%'};return _0x1c0a84;})});}_0x48f1dc=_['merge']({},_0x48f1dc,_0x3d750f[_0x43e7('0x40')]);return _0x520943[_0x43e7('0x6f')](_0x48f1dc);}})[_0x43e7('0x24')](function(_0x38ba7a){if(_0x38ba7a){_0xa66309=_0x38ba7a['length'];if(!_0x3d750f[_0x43e7('0x30')][_0x43e7('0x72')](_0x43e7('0x73'))){_0x48f1dc[_0x43e7('0x1e')]=qs['limit'](_0x3d750f[_0x43e7('0x30')][_0x43e7('0x1e')]);_0x48f1dc[_0x43e7('0x1d')]=qs[_0x43e7('0x1d')](_0x3d750f[_0x43e7('0x30')]['offset']);}return _0x520943[_0x43e7('0x6f')](_0x48f1dc);}})[_0x43e7('0x24')](function(_0x509d8d){if(_0x509d8d){return _0x509d8d?{'count':_0xa66309,'rows':_0x509d8d}:null;}})[_0x43e7('0x24')](respondWithResult(_0x401654,null))[_0x43e7('0x45')](handleError(_0x401654,null));};
\ No newline at end of file
+var _0xe14b=['push','Set','callerIdAll','PREFIX-CALLERIDALL=','No\x20callerid\x20available','goto','${EXTEN:','charAt','transaction','findById','addAgents','ids','omit','spread','emit','userVoicePrefix:save','removeAgents','isArray','userVoicePrefix:remove','getAgents','User','html-pdf','eml-format','fast-json-patch','request-promise','bluebird','path','sox','to-csv','ejs','lodash','squel','crypto','querystring','papaparse','ioredis','../../components/auth/service','../../config/logger','api','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./voicePrefix.socket','register','end','json','count','offset','limit','status','set','apply','save','update','then','get','VoicePrefixes','UserProfileResource','destroy','sendStatus','error','stack','name','send','index','VoicePrefix','rawAttributes','model','keys','query','filters','intersection','attributes','hasOwnProperty','nolimit','order','sort','where','pick','merge','map','type','key','VIRTUAL','field','filter','options','includeAll','include','findAll','rows','catch','params','fields','length','find','describe','create','sequelize','body','VoiceExtensionId','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','context','from-sip','exten','app','system','description','Voice\x20Prefix\x20Extension','priority','appdata','prefix','NoOp','Voice\x20Prefix','VoicePrefixId','VoiceExtension','bulkCreate','Extensions\x20creation\x20failed'];(function(_0x1ba441,_0x5f0413){var _0x571bf8=function(_0x4cd08a){while(--_0x4cd08a){_0x1ba441['push'](_0x1ba441['shift']());}};_0x571bf8(++_0x5f0413);}(_0xe14b,0x93));var _0xbe14=function(_0x29ebfa,_0x4cee9b){_0x29ebfa=_0x29ebfa-0x0;var _0x5b38b7=_0xe14b[_0x29ebfa];return _0x5b38b7;};'use strict';var pdf=require(_0xbe14('0x0'));var emlformat=require(_0xbe14('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0xbe14('0x2'));var rp=require(_0xbe14('0x3'));var moment=require('moment');var BPromise=require(_0xbe14('0x4'));var Mustache=require('mustache');var util=require('util');var path=require(_0xbe14('0x5'));var sox=require(_0xbe14('0x6'));var csv=require(_0xbe14('0x7'));var ejs=require(_0xbe14('0x8'));var fs=require('fs');var _=require(_0xbe14('0x9'));var squel=require(_0xbe14('0xa'));var crypto=require(_0xbe14('0xb'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xbe14('0xc'));var Papa=require(_0xbe14('0xd'));var Redis=require(_0xbe14('0xe'));var authService=require(_0xbe14('0xf'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xbe14('0x10'))(_0xbe14('0x11'));var utils=require('../../config/utils');var config=require(_0xbe14('0x12'));var db=require(_0xbe14('0x13'))['db'];config[_0xbe14('0x14')]=_[_0xbe14('0x15')](config[_0xbe14('0x14')],{'host':_0xbe14('0x16'),'port':0x18eb});var socket=require(_0xbe14('0x17'))(new Redis(config[_0xbe14('0x14')]));require(_0xbe14('0x18'))[_0xbe14('0x19')](socket);function respondWithStatusCode(_0x1e4826,_0x33fd54){_0x33fd54=_0x33fd54||0xcc;return function(_0x813399){if(_0x813399){return _0x1e4826['sendStatus'](_0x33fd54);}return _0x1e4826['status'](_0x33fd54)[_0xbe14('0x1a')]();};}function respondWithResult(_0x3dc4a9,_0xf4ac9){_0xf4ac9=_0xf4ac9||0xc8;return function(_0x37ce4e){if(_0x37ce4e){return _0x3dc4a9['status'](_0xf4ac9)[_0xbe14('0x1b')](_0x37ce4e);}};}function respondWithFilteredResult(_0xe9c3ec,_0xfd7b8f){return function(_0x123ede){if(_0x123ede){var _0x38f1ea=_0x123ede[_0xbe14('0x1c')],_0x29ab73=_0xfd7b8f[_0xbe14('0x1d')],_0x17ae86=_0xfd7b8f[_0xbe14('0x1d')]+_0xfd7b8f[_0xbe14('0x1e')],_0x5ea1f8;if(_0x17ae86>=_0x38f1ea){_0x17ae86=_0x38f1ea;_0x5ea1f8=0xc8;}else{_0x5ea1f8=0xce;}_0xe9c3ec[_0xbe14('0x1f')](_0x5ea1f8);return _0xe9c3ec[_0xbe14('0x20')]('Content-Range',_0x29ab73+'-'+_0x17ae86+'/'+_0x38f1ea)[_0xbe14('0x1b')](_0x123ede);}return null;};}function patchUpdates(_0x4a1bbd){return function(_0x417c8d){try{jsonpatch[_0xbe14('0x21')](_0x417c8d,_0x4a1bbd,!![]);}catch(_0x188ec4){return BPromise['reject'](_0x188ec4);}return _0x417c8d[_0xbe14('0x22')]();};}function saveUpdates(_0x56d845,_0x3c1c85){return function(_0x56e80c){if(_0x56e80c){return _0x56e80c[_0xbe14('0x23')](_0x56d845)['then'](function(_0x274018){return _0x274018;});}return null;};}function removeEntity(_0x3d3608,_0x505dbd){return function(_0x2da350){if(_0x2da350){return _0x2da350['destroy']()[_0xbe14('0x24')](function(){var _0x4851f8=_0x2da350[_0xbe14('0x25')]({'plain':!![]});var _0x5fa043=_0xbe14('0x26');return db[_0xbe14('0x27')][_0xbe14('0x28')]({'where':{'type':_0x5fa043,'resourceId':_0x4851f8['id']}})[_0xbe14('0x24')](function(){return _0x2da350;});})['then'](function(){_0x3d3608[_0xbe14('0x1f')](0xcc)[_0xbe14('0x1a')]();});}};}function handleEntityNotFound(_0x391556,_0x169369){return function(_0x5dd475){if(!_0x5dd475){_0x391556[_0xbe14('0x29')](0x194);}return _0x5dd475;};}function handleError(_0x29fc64,_0x59bf34){_0x59bf34=_0x59bf34||0x1f4;return function(_0x3c3613){logger[_0xbe14('0x2a')](_0x3c3613[_0xbe14('0x2b')]);if(_0x3c3613[_0xbe14('0x2c')]){delete _0x3c3613[_0xbe14('0x2c')];}_0x29fc64[_0xbe14('0x1f')](_0x59bf34)[_0xbe14('0x2d')](_0x3c3613);};}exports[_0xbe14('0x2e')]=function(_0x4168c8,_0x16a159){var _0x40538f={},_0x3bf43c={},_0x39dc0a={'count':0x0,'rows':[]};var _0x10ae36=db[_0xbe14('0x2f')][_0xbe14('0x30')];_0x3bf43c[_0xbe14('0x31')]=_[_0xbe14('0x32')](_0x10ae36);_0x3bf43c[_0xbe14('0x33')]=_[_0xbe14('0x32')](_0x4168c8['query']);_0x3bf43c[_0xbe14('0x34')]=_['intersection'](_0x3bf43c['model'],_0x3bf43c[_0xbe14('0x33')]);_0x40538f['attributes']=_[_0xbe14('0x35')](_0x3bf43c[_0xbe14('0x31')],qs['fields'](_0x4168c8['query']['fields']));_0x40538f[_0xbe14('0x36')]=_0x40538f[_0xbe14('0x36')]['length']?_0x40538f[_0xbe14('0x36')]:_0x3bf43c[_0xbe14('0x31')];if(!_0x4168c8[_0xbe14('0x33')][_0xbe14('0x37')](_0xbe14('0x38'))){_0x40538f['limit']=qs['limit'](_0x4168c8[_0xbe14('0x33')]['limit']);_0x40538f['offset']=qs['offset'](_0x4168c8[_0xbe14('0x33')][_0xbe14('0x1d')]);}_0x40538f[_0xbe14('0x39')]=qs[_0xbe14('0x3a')](_0x4168c8[_0xbe14('0x33')][_0xbe14('0x3a')]);_0x40538f[_0xbe14('0x3b')]=qs[_0xbe14('0x34')](_[_0xbe14('0x3c')](_0x4168c8[_0xbe14('0x33')],_0x3bf43c[_0xbe14('0x34')]));if(_0x4168c8[_0xbe14('0x33')]['filter']){_0x40538f['where']=_[_0xbe14('0x3d')](_0x40538f[_0xbe14('0x3b')],{'$or':_[_0xbe14('0x3e')](_0x10ae36,function(_0x520e09){if(_0x520e09[_0xbe14('0x3f')][_0xbe14('0x40')]!==_0xbe14('0x41')){var _0x45ff31={};_0x45ff31[_0x520e09[_0xbe14('0x42')]]={'$like':'%'+_0x4168c8[_0xbe14('0x33')][_0xbe14('0x43')]+'%'};return _0x45ff31;}})});}_0x40538f=_[_0xbe14('0x3d')]({},_0x40538f,_0x4168c8[_0xbe14('0x44')]);var _0x5255ff={'where':_0x40538f[_0xbe14('0x3b')]};return db[_0xbe14('0x2f')][_0xbe14('0x1c')](_0x5255ff)[_0xbe14('0x24')](function(_0x3287b9){_0x39dc0a[_0xbe14('0x1c')]=_0x3287b9;if(_0x4168c8['query'][_0xbe14('0x45')]){_0x40538f[_0xbe14('0x46')]=[{'all':!![]}];}return db[_0xbe14('0x2f')][_0xbe14('0x47')](_0x40538f);})['then'](function(_0x4bfa96){_0x39dc0a[_0xbe14('0x48')]=_0x4bfa96;return _0x39dc0a;})[_0xbe14('0x24')](respondWithFilteredResult(_0x16a159,_0x40538f))[_0xbe14('0x49')](handleError(_0x16a159,null));};exports['show']=function(_0x5d5318,_0x6b6aa8){var _0x59ae4d={'raw':![],'where':{'id':_0x5d5318[_0xbe14('0x4a')]['id']}},_0x5657fe={};_0x5657fe[_0xbe14('0x31')]=_[_0xbe14('0x32')](db['VoicePrefix']['rawAttributes']);_0x5657fe['query']=_[_0xbe14('0x32')](_0x5d5318[_0xbe14('0x33')]);_0x5657fe[_0xbe14('0x34')]=_['intersection'](_0x5657fe[_0xbe14('0x31')],_0x5657fe[_0xbe14('0x33')]);_0x59ae4d[_0xbe14('0x36')]=_[_0xbe14('0x35')](_0x5657fe['model'],qs['fields'](_0x5d5318[_0xbe14('0x33')][_0xbe14('0x4b')]));_0x59ae4d[_0xbe14('0x36')]=_0x59ae4d[_0xbe14('0x36')][_0xbe14('0x4c')]?_0x59ae4d['attributes']:_0x5657fe['model'];if(_0x5d5318[_0xbe14('0x33')][_0xbe14('0x45')]){_0x59ae4d[_0xbe14('0x46')]=[{'all':!![]}];}_0x59ae4d=_[_0xbe14('0x3d')]({},_0x59ae4d,_0x5d5318['options']);return db[_0xbe14('0x2f')][_0xbe14('0x4d')](_0x59ae4d)['then'](handleEntityNotFound(_0x6b6aa8,null))[_0xbe14('0x24')](respondWithResult(_0x6b6aa8,null))[_0xbe14('0x49')](handleError(_0x6b6aa8,null));};exports[_0xbe14('0x28')]=function(_0x36c20c,_0x589dac){return db['VoicePrefix'][_0xbe14('0x4d')]({'where':{'id':_0x36c20c[_0xbe14('0x4a')]['id']}})['then'](handleEntityNotFound(_0x589dac,null))['then'](removeEntity(_0x589dac,null))[_0xbe14('0x49')](handleError(_0x589dac,null));};exports[_0xbe14('0x4e')]=function(_0x3f7f5b,_0x1a8a3d){return db[_0xbe14('0x2f')][_0xbe14('0x4e')]()[_0xbe14('0x24')](respondWithResult(_0x1a8a3d,null))['catch'](handleError(_0x1a8a3d,null));};exports[_0xbe14('0x4f')]=function(_0x5f22b2,_0x6928f2){var _0x22b1f8;return db[_0xbe14('0x50')]['transaction'](function(_0x3a221b){return db[_0xbe14('0x2f')][_0xbe14('0x4f')](_0x5f22b2[_0xbe14('0x51')],{'transaction':_0x3a221b})[_0xbe14('0x24')](function(_0x2dbeb1){_0x22b1f8=_0x2dbeb1['get']({'plain':!![]});return db['VoiceExtension'][_0xbe14('0x4d')]({'where':{'id':_0x22b1f8[_0xbe14('0x52')]},'raw':!![]})[_0xbe14('0x24')](function(_0x48554a){return createVoicePrefixExtensions(_0x22b1f8,_0x48554a,_0x3a221b);});});})['then'](function(){var _0x44fe0d=_0x5f22b2[_0xbe14('0x53')]['get']({'plain':!![]});if(!_0x44fe0d)throw new Error(_0xbe14('0x54'));if(_0x44fe0d[_0xbe14('0x55')]==='user'){var _0x28f995=_0x22b1f8;return db['UserProfileSection'][_0xbe14('0x4d')]({'where':{'name':_0xbe14('0x26'),'userProfileId':_0x44fe0d[_0xbe14('0x56')]},'raw':!![]})['then'](function(_0x435c8d){if(_0x435c8d&&_0x435c8d[_0xbe14('0x57')]===0x0){return db['UserProfileResource'][_0xbe14('0x4f')]({'name':_0x28f995[_0xbe14('0x2c')],'resourceId':_0x28f995['id'],'type':_0x435c8d[_0xbe14('0x2c')],'sectionId':_0x435c8d['id']},{})[_0xbe14('0x24')](function(){return _0x22b1f8;});}else{return _0x22b1f8;}})[_0xbe14('0x49')](function(_0x4f06a3){logger[_0xbe14('0x2a')](_0xbe14('0x58'),_0x4f06a3);throw _0x4f06a3;});}return _0x22b1f8;})[_0xbe14('0x24')](respondWithResult(_0x6928f2,null))[_0xbe14('0x49')](handleError(_0x6928f2,null));};function Extension(_0x32968f,_0x44084c,_0x1dd6c7,_0x56ab61){this[_0xbe14('0x59')]=_0xbe14('0x5a');this[_0xbe14('0x5b')]=_0x32968f;this[_0xbe14('0x5c')]=_0x1dd6c7;this[_0xbe14('0x3f')]=_0xbe14('0x5d');this[_0xbe14('0x5e')]=_0xbe14('0x5f');this[_0xbe14('0x60')]=_0x44084c;this[_0xbe14('0x61')]=_0x56ab61;}function createVoicePrefixExtensions(_0x358950,_0x4bccfc,_0x56bcd3){return new BPromise(function(_0x58dd79,_0x10c0bc){var _0x1bfcbf=new Extension(formatPrefixName(_0x358950[_0xbe14('0x62')]),0x1,_0xbe14('0x63'),_0xbe14('0x64'));_0x1bfcbf[_0xbe14('0x65')]=_0x358950['id'];return db[_0xbe14('0x66')][_0xbe14('0x4f')](_0x1bfcbf,{'transaction':_0x56bcd3})[_0xbe14('0x24')](function(_0x451b0b){var _0x603816=_0x451b0b[_0xbe14('0x25')]({'plain':!![]});var _0x2088e4=_[_0xbe14('0x3e')](addVoicePrefixExtensions(_0x358950,_0x4bccfc),function(_0x1c831a){_0x1c831a[_0xbe14('0x52')]=_0x603816['id'];_0x1c831a[_0xbe14('0x65')]=_0x358950['id'];return _0x1c831a;});return db[_0xbe14('0x66')][_0xbe14('0x67')](_0x2088e4,{'transaction':_0x56bcd3})[_0xbe14('0x24')](function(_0x5f394c){if(!_0x5f394c){return _0x10c0bc(_0xbe14('0x68'));}else{return _0x58dd79(_0x5f394c);}})[_0xbe14('0x49')](function(_0x2c426d){return _0x10c0bc(_0x2c426d);});});;});};function addVoicePrefixExtensions(_0x46b49c,_0x3ee6b7){var _0x222944=[];var _0x198b55=formatPrefixName(_0x46b49c[_0xbe14('0x62')]);_0x222944[_0xbe14('0x69')](new Extension(_0x198b55,0x2,_0xbe14('0x6a'),'CDR(prefix)='+_0x46b49c[_0xbe14('0x2c')]));if(_0x46b49c[_0xbe14('0x6b')]){_0x222944[_0xbe14('0x69')](new Extension(_0x198b55,0x3,_0xbe14('0x6a'),_0xbe14('0x6c')+_0x46b49c['callerIdAll']));}else{_0x222944[_0xbe14('0x69')](new Extension(_0x198b55,0x3,_0xbe14('0x63'),_0xbe14('0x6d')));}_0x222944[_0xbe14('0x69')](new Extension(_0x198b55,0x4,_0xbe14('0x6e'),_0x3ee6b7['context']+','+_0xbe14('0x6f')+(0x8+_0x46b49c[_0xbe14('0x2c')][_0xbe14('0x4c')])+'}'+','+0x1));return _0x222944;}function formatPrefixName(_0x29bb26){var _0xaebce8='_';for(var _0x289c4d=0x0;_0x289c4d<_0x29bb26[_0xbe14('0x4c')];_0x289c4d++){if(_0x29bb26[_0xbe14('0x70')](_0x289c4d)=='-'){_0xaebce8+=_0x29bb26['charAt'](_0x289c4d);}else{_0xaebce8+='['+_0x29bb26[_0xbe14('0x70')](_0x289c4d)+']';}}_0xaebce8+='.';return _0xaebce8;}exports[_0xbe14('0x23')]=function(_0x2fdf5d,_0x20b12e,_0x5982b7){var _0xa4b2a3=_0x2fdf5d[_0xbe14('0x51')];_0xa4b2a3['prefix']='system-'+_0xa4b2a3[_0xbe14('0x2c')]+'-';return db[_0xbe14('0x50')][_0xbe14('0x71')](function(_0x2510a0){return db[_0xbe14('0x2f')][_0xbe14('0x23')](_0xa4b2a3,{'where':{'id':_0xa4b2a3['id']},'transaction':_0x2510a0})[_0xbe14('0x24')](function(){return db[_0xbe14('0x66')]['destroy']({'where':{'VoicePrefixId':_0xa4b2a3['id']},'transaction':_0x2510a0})['then'](function(){return db[_0xbe14('0x66')][_0xbe14('0x4d')]({'where':{'id':_0xa4b2a3[_0xbe14('0x52')]},'raw':!![]})['then'](function(_0x76e91e){return createVoicePrefixExtensions(_0xa4b2a3,_0x76e91e,_0x2510a0);});});});})[_0xbe14('0x24')](function(){return db[_0xbe14('0x2f')][_0xbe14('0x72')](_0xa4b2a3['id']);})[_0xbe14('0x24')](respondWithResult(_0x20b12e,null))[_0xbe14('0x49')](handleError(_0x20b12e,null));};exports[_0xbe14('0x73')]=function(_0x5b5c37,_0x43b817,_0x3b6ef5){return db[_0xbe14('0x2f')][_0xbe14('0x4d')]({'where':{'id':_0x5b5c37[_0xbe14('0x4a')]['id']}})[_0xbe14('0x24')](handleEntityNotFound(_0x43b817,null))[_0xbe14('0x24')](function(_0x4a20c0){if(_0x4a20c0){return _0x4a20c0[_0xbe14('0x73')](_0x5b5c37[_0xbe14('0x51')][_0xbe14('0x74')],_[_0xbe14('0x75')](_0x5b5c37[_0xbe14('0x51')],[_0xbe14('0x74'),'id'])||{})[_0xbe14('0x76')](function(_0xd756b2){for(var _0x5d064e=0x0;_0x5d064e<_0x5b5c37[_0xbe14('0x51')][_0xbe14('0x74')][_0xbe14('0x4c')];_0x5d064e+=0x1){socket[_0xbe14('0x77')](_0xbe14('0x78'),{'UserId':_0x5b5c37[_0xbe14('0x51')]['ids'][_0x5d064e],'VoicePrefixId':_0x5b5c37[_0xbe14('0x4a')]['id']});}return _0xd756b2;});}})[_0xbe14('0x24')](respondWithResult(_0x43b817,null))[_0xbe14('0x49')](handleError(_0x43b817,null));};exports[_0xbe14('0x79')]=function(_0x508455,_0x7e9e5c,_0x1578b6){return db[_0xbe14('0x2f')][_0xbe14('0x4d')]({'where':{'id':_0x508455[_0xbe14('0x4a')]['id']}})[_0xbe14('0x24')](handleEntityNotFound(_0x7e9e5c,null))[_0xbe14('0x24')](function(_0x55e70f){if(_0x55e70f){return _0x55e70f[_0xbe14('0x79')](_0x508455['query'][_0xbe14('0x74')])['then'](function(){if(_[_0xbe14('0x7a')](_0x508455[_0xbe14('0x33')][_0xbe14('0x74')])){for(var _0x5b7f07=0x0;_0x5b7f07<_0x508455[_0xbe14('0x33')][_0xbe14('0x74')][_0xbe14('0x4c')];_0x5b7f07+=0x1){socket['emit'](_0xbe14('0x7b'),{'UserId':Number(_0x508455[_0xbe14('0x33')][_0xbe14('0x74')][_0x5b7f07]),'VoicePrefixId':Number(_0x508455[_0xbe14('0x4a')]['id'])});}}else{socket['emit'](_0xbe14('0x7b'),{'UserId':Number(_0x508455[_0xbe14('0x33')][_0xbe14('0x74')]),'VoicePrefixId':Number(_0x508455[_0xbe14('0x4a')]['id'])});}});}})[_0xbe14('0x24')](respondWithStatusCode(_0x7e9e5c,null))[_0xbe14('0x49')](handleError(_0x7e9e5c,null));};exports[_0xbe14('0x7c')]=function(_0x5ab298,_0x2ff94c,_0x123f4f){var _0x2137d5={};var _0x5c89a0={};var _0x704c05;var _0x420467;return db[_0xbe14('0x2f')]['findOne']({'where':{'id':_0x5ab298[_0xbe14('0x4a')]['id']}})[_0xbe14('0x24')](handleEntityNotFound(_0x2ff94c,null))['then'](function(_0x2be969){if(_0x2be969){_0x704c05=_0x2be969;_0x5c89a0['model']=_[_0xbe14('0x32')](db[_0xbe14('0x7d')]['rawAttributes']);_0x5c89a0['query']=_[_0xbe14('0x32')](_0x5ab298[_0xbe14('0x33')]);_0x5c89a0[_0xbe14('0x34')]=_['intersection'](_0x5c89a0[_0xbe14('0x31')],_0x5c89a0[_0xbe14('0x33')]);_0x2137d5[_0xbe14('0x36')]=_[_0xbe14('0x35')](_0x5c89a0['model'],qs['fields'](_0x5ab298[_0xbe14('0x33')][_0xbe14('0x4b')]));_0x2137d5[_0xbe14('0x36')]=_0x2137d5[_0xbe14('0x36')][_0xbe14('0x4c')]?_0x2137d5[_0xbe14('0x36')]:_0x5c89a0[_0xbe14('0x31')];_0x2137d5['order']=qs[_0xbe14('0x3a')](_0x5ab298['query'][_0xbe14('0x3a')]);_0x2137d5[_0xbe14('0x3b')]=qs[_0xbe14('0x34')](_[_0xbe14('0x3c')](_0x5ab298['query'],_0x5c89a0[_0xbe14('0x34')]));if(_0x5ab298[_0xbe14('0x33')][_0xbe14('0x43')]){_0x2137d5['where']=_[_0xbe14('0x3d')](_0x2137d5[_0xbe14('0x3b')],{'$or':_[_0xbe14('0x3e')](_0x2137d5[_0xbe14('0x36')],function(_0x26d3ae){var _0x13836b={};_0x13836b[_0x26d3ae]={'$like':'%'+_0x5ab298[_0xbe14('0x33')][_0xbe14('0x43')]+'%'};return _0x13836b;})});}_0x2137d5=_[_0xbe14('0x3d')]({},_0x2137d5,_0x5ab298[_0xbe14('0x44')]);return _0x704c05[_0xbe14('0x7c')](_0x2137d5);}})[_0xbe14('0x24')](function(_0x5af56){if(_0x5af56){_0x420467=_0x5af56[_0xbe14('0x4c')];if(!_0x5ab298[_0xbe14('0x33')][_0xbe14('0x37')](_0xbe14('0x38'))){_0x2137d5[_0xbe14('0x1e')]=qs[_0xbe14('0x1e')](_0x5ab298[_0xbe14('0x33')]['limit']);_0x2137d5[_0xbe14('0x1d')]=qs['offset'](_0x5ab298[_0xbe14('0x33')][_0xbe14('0x1d')]);}return _0x704c05[_0xbe14('0x7c')](_0x2137d5);}})[_0xbe14('0x24')](function(_0x1d7b08){if(_0x1d7b08){return _0x1d7b08?{'count':_0x420467,'rows':_0x1d7b08}:null;}})['then'](respondWithResult(_0x2ff94c,null))['catch'](handleError(_0x2ff94c,null));};
\ No newline at end of file
index caf1d9c..7e4edba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb10b=['hasOwnProperty','hook','events','VoicePrefix','setMaxListeners','save','remove','emit'];(function(_0x3a2b32,_0x493d37){var _0xaa79fe=function(_0x3fc6cf){while(--_0x3fc6cf){_0x3a2b32['push'](_0x3a2b32['shift']());}};_0xaa79fe(++_0x493d37);}(_0xb10b,0x12a));var _0xbb10=function(_0x4432f2,_0x22697a){_0x4432f2=_0x4432f2-0x0;var _0x1c97d6=_0xb10b[_0x4432f2];return _0x1c97d6;};'use strict';var EventEmitter=require(_0xbb10('0x0'));var VoicePrefix=require('../../mysqldb')['db'][_0xbb10('0x1')];var VoicePrefixEvents=new EventEmitter();VoicePrefixEvents[_0xbb10('0x2')](0x0);var events={'afterCreate':_0xbb10('0x3'),'afterUpdate':'update','afterDestroy':_0xbb10('0x4')};function emitEvent(_0x9bbed){return function(_0x460981,_0x22320e,_0x49baf4){VoicePrefixEvents[_0xbb10('0x5')](_0x9bbed+':'+_0x460981['id'],_0x460981);VoicePrefixEvents['emit'](_0x9bbed,_0x460981);_0x49baf4(null);};}for(var e in events){if(events[_0xbb10('0x6')](e)){var event=events[e];VoicePrefix[_0xbb10('0x7')](e,emitEvent(event));}}module['exports']=VoicePrefixEvents;
\ No newline at end of file
+var _0xb10b=['hasOwnProperty','hook','events','VoicePrefix','setMaxListeners','save','remove','emit'];(function(_0x28f9d7,_0x252779){var _0x24998b=function(_0xdb032a){while(--_0xdb032a){_0x28f9d7['push'](_0x28f9d7['shift']());}};_0x24998b(++_0x252779);}(_0xb10b,0x12a));var _0xbb10=function(_0x56d78c,_0x2b65d6){_0x56d78c=_0x56d78c-0x0;var _0x9a8155=_0xb10b[_0x56d78c];return _0x9a8155;};'use strict';var EventEmitter=require(_0xbb10('0x0'));var VoicePrefix=require('../../mysqldb')['db'][_0xbb10('0x1')];var VoicePrefixEvents=new EventEmitter();VoicePrefixEvents[_0xbb10('0x2')](0x0);var events={'afterCreate':_0xbb10('0x3'),'afterUpdate':'update','afterDestroy':_0xbb10('0x4')};function emitEvent(_0x9bbed){return function(_0x460981,_0x22320e,_0x49baf4){VoicePrefixEvents[_0xbb10('0x5')](_0x9bbed+':'+_0x460981['id'],_0x460981);VoicePrefixEvents['emit'](_0x9bbed,_0x460981);_0x49baf4(null);};}for(var e in events){if(events[_0xbb10('0x6')](e)){var event=events[e];VoicePrefix[_0xbb10('0x7')](e,emitEvent(event));}}module['exports']=VoicePrefixEvents;
\ No newline at end of file
index 145071a..e7e624a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd38b=['define','voice_prefixes','lodash','../../config/logger','bluebird','request-promise','path','rimraf','../../config/environment','./voicePrefix.attributes','exports'];(function(_0xab649b,_0x1519e9){var _0x3b7584=function(_0x4b878e){while(--_0x4b878e){_0xab649b['push'](_0xab649b['shift']());}};_0x3b7584(++_0x1519e9);}(_0xd38b,0x115));var _0xbd38=function(_0x1a9c75,_0xa83750){_0x1a9c75=_0x1a9c75-0x0;var _0xb2f37e=_0xd38b[_0x1a9c75];return _0xb2f37e;};'use strict';var _=require(_0xbd38('0x0'));var util=require('util');var logger=require(_0xbd38('0x1'))('api');var moment=require('moment');var BPromise=require(_0xbd38('0x2'));var rp=require(_0xbd38('0x3'));var fs=require('fs');var path=require(_0xbd38('0x4'));var rimraf=require(_0xbd38('0x5'));var config=require(_0xbd38('0x6'));var attributes=require(_0xbd38('0x7'));module[_0xbd38('0x8')]=function(_0x16338f,_0x1416fb){return _0x16338f[_0xbd38('0x9')]('VoicePrefix',attributes,{'tableName':_0xbd38('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7697=['lodash','util','api','request-promise','path','rimraf','../../config/environment','exports','define','VoicePrefix','voice_prefixes'];(function(_0xdc59b1,_0x3427e1){var _0x773107=function(_0x19dbc5){while(--_0x19dbc5){_0xdc59b1['push'](_0xdc59b1['shift']());}};_0x773107(++_0x3427e1);}(_0x7697,0x1e4));var _0x7769=function(_0x1ebb10,_0x156b3e){_0x1ebb10=_0x1ebb10-0x0;var _0x20d709=_0x7697[_0x1ebb10];return _0x20d709;};'use strict';var _=require(_0x7769('0x0'));var util=require(_0x7769('0x1'));var logger=require('../../config/logger')(_0x7769('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x7769('0x3'));var fs=require('fs');var path=require(_0x7769('0x4'));var rimraf=require(_0x7769('0x5'));var config=require(_0x7769('0x6'));var attributes=require('./voicePrefix.attributes');module[_0x7769('0x7')]=function(_0xbc16ac,_0x1b3922){return _0xbc16ac[_0x7769('0x8')](_0x7769('0x9'),attributes,{'tableName':_0x7769('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 13ea164..fdda41b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcbd4=['./voicePrefix.socket','request','then','info','VoicePrefix,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','redis','localhost','socket.io-emitter'];(function(_0x153be7,_0x42f43c){var _0x338590=function(_0x11771d){while(--_0x11771d){_0x153be7['push'](_0x153be7['shift']());}};_0x338590(++_0x42f43c);}(_0xcbd4,0xed));var _0x4cbd=function(_0x38a177,_0x59a7bb){_0x38a177=_0x38a177-0x0;var _0x58f656=_0xcbd4[_0x38a177];return _0x58f656;};'use strict';var _=require(_0x4cbd('0x0'));var util=require('util');var moment=require(_0x4cbd('0x1'));var BPromise=require(_0x4cbd('0x2'));var rs=require(_0x4cbd('0x3'));var fs=require('fs');var Redis=require(_0x4cbd('0x4'));var db=require(_0x4cbd('0x5'))['db'];var utils=require(_0x4cbd('0x6'));var logger=require(_0x4cbd('0x7'))('rpc');var config=require(_0x4cbd('0x8'));var jayson=require(_0x4cbd('0x9'));var client=jayson[_0x4cbd('0xa')][_0x4cbd('0xb')]({'port':0x232a});config[_0x4cbd('0xc')]=_['defaults'](config['redis'],{'host':_0x4cbd('0xd'),'port':0x18eb});var socket=require(_0x4cbd('0xe'))(new Redis(config[_0x4cbd('0xc')]));require(_0x4cbd('0xf'))['register'](socket);function respondWithRpcPromise(_0x15a4a8,_0x447500,_0x15f5cd){return new BPromise(function(_0x48e84c,_0x332c38){return client[_0x4cbd('0x10')](_0x15a4a8,_0x15f5cd)[_0x4cbd('0x11')](function(_0x1d25e7){logger[_0x4cbd('0x12')](_0x4cbd('0x13'),_0x447500,_0x4cbd('0x14'));logger[_0x4cbd('0x15')]('VoicePrefix,\x20%s,\x20%s,\x20%s',_0x447500,_0x4cbd('0x14'),JSON[_0x4cbd('0x16')](_0x1d25e7));if(_0x1d25e7['error']){if(_0x1d25e7[_0x4cbd('0x17')][_0x4cbd('0x18')]===0x1f4){logger[_0x4cbd('0x17')](_0x4cbd('0x13'),_0x447500,_0x1d25e7['error'][_0x4cbd('0x19')]);return _0x332c38(_0x1d25e7[_0x4cbd('0x17')][_0x4cbd('0x19')]);}logger['error'](_0x4cbd('0x13'),_0x447500,_0x1d25e7[_0x4cbd('0x17')][_0x4cbd('0x19')]);return _0x48e84c(_0x1d25e7[_0x4cbd('0x17')][_0x4cbd('0x19')]);}else{logger[_0x4cbd('0x12')](_0x4cbd('0x13'),_0x447500,'request\x20sent');_0x48e84c(_0x1d25e7[_0x4cbd('0x1a')][_0x4cbd('0x19')]);}})[_0x4cbd('0x1b')](function(_0x13f0e7){logger[_0x4cbd('0x17')]('VoicePrefix,\x20%s,\x20%s',_0x447500,_0x13f0e7);_0x332c38(_0x13f0e7);});});}
\ No newline at end of file
+var _0x4abc=['info','VoicePrefix,\x20%s,\x20%s','request\x20sent','VoicePrefix,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','client','http','redis','defaults','localhost','./voicePrefix.socket','register','request'];(function(_0x59a2f6,_0xe9bb4d){var _0x57e3f7=function(_0x206fcc){while(--_0x206fcc){_0x59a2f6['push'](_0x59a2f6['shift']());}};_0x57e3f7(++_0xe9bb4d);}(_0x4abc,0x169));var _0xc4ab=function(_0x11c573,_0x9e7c6e){_0x11c573=_0x11c573-0x0;var _0x6b72de=_0x4abc[_0x11c573];return _0x6b72de;};'use strict';var _=require(_0xc4ab('0x0'));var util=require(_0xc4ab('0x1'));var moment=require(_0xc4ab('0x2'));var BPromise=require('bluebird');var rs=require(_0xc4ab('0x3'));var fs=require('fs');var Redis=require(_0xc4ab('0x4'));var db=require(_0xc4ab('0x5'))['db'];var utils=require(_0xc4ab('0x6'));var logger=require('../../config/logger')(_0xc4ab('0x7'));var config=require(_0xc4ab('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xc4ab('0x9')][_0xc4ab('0xa')]({'port':0x232a});config[_0xc4ab('0xb')]=_[_0xc4ab('0xc')](config[_0xc4ab('0xb')],{'host':_0xc4ab('0xd'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xc4ab('0xb')]));require(_0xc4ab('0xe'))[_0xc4ab('0xf')](socket);function respondWithRpcPromise(_0x4a8931,_0x4bc6a1,_0x10f080){return new BPromise(function(_0x5db049,_0x24ae35){return client[_0xc4ab('0x10')](_0x4a8931,_0x10f080)['then'](function(_0x5b4af2){logger[_0xc4ab('0x11')](_0xc4ab('0x12'),_0x4bc6a1,_0xc4ab('0x13'));logger['debug'](_0xc4ab('0x14'),_0x4bc6a1,_0xc4ab('0x13'),JSON[_0xc4ab('0x15')](_0x5b4af2));if(_0x5b4af2[_0xc4ab('0x16')]){if(_0x5b4af2[_0xc4ab('0x16')][_0xc4ab('0x17')]===0x1f4){logger[_0xc4ab('0x16')](_0xc4ab('0x12'),_0x4bc6a1,_0x5b4af2[_0xc4ab('0x16')][_0xc4ab('0x18')]);return _0x24ae35(_0x5b4af2['error'][_0xc4ab('0x18')]);}logger[_0xc4ab('0x16')]('VoicePrefix,\x20%s,\x20%s',_0x4bc6a1,_0x5b4af2[_0xc4ab('0x16')][_0xc4ab('0x18')]);return _0x5db049(_0x5b4af2[_0xc4ab('0x16')][_0xc4ab('0x18')]);}else{logger[_0xc4ab('0x11')]('VoicePrefix,\x20%s,\x20%s',_0x4bc6a1,'request\x20sent');_0x5db049(_0x5b4af2[_0xc4ab('0x19')][_0xc4ab('0x18')]);}})[_0xc4ab('0x1a')](function(_0x540877){logger[_0xc4ab('0x16')](_0xc4ab('0x12'),_0x4bc6a1,_0x540877);_0x24ae35(_0x540877);});});}
\ No newline at end of file
index ea84763..91de696 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2c9b=['emit','removeListener','register','length','voicePrefix:','./voicePrefix.events','update'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x2c9b,0x1be));var _0xb2c9=function(_0x5c535d,_0x2c8aed){_0x5c535d=_0x5c535d-0x0;var _0x3f3426=_0x2c9b[_0x5c535d];return _0x3f3426;};'use strict';var VoicePrefixEvents=require(_0xb2c9('0x0'));var events=['save','remove',_0xb2c9('0x1')];function createListener(_0x4fdad1,_0x2147c0){return function(_0x524224){_0x2147c0[_0xb2c9('0x2')](_0x4fdad1,_0x524224);};}function removeListener(_0x3d1212,_0x12c687){return function(){VoicePrefixEvents[_0xb2c9('0x3')](_0x3d1212,_0x12c687);};}exports[_0xb2c9('0x4')]=function(_0x1ce422){for(var _0x418b30=0x0,_0x4566ea=events[_0xb2c9('0x5')];_0x418b30<_0x4566ea;_0x418b30++){var _0x528a9f=events[_0x418b30];var _0x26606b=createListener(_0xb2c9('0x6')+_0x528a9f,_0x1ce422);VoicePrefixEvents['on'](_0x528a9f,_0x26606b);}};
\ No newline at end of file
+var _0x64d5=['emit','removeListener','length','./voicePrefix.events','remove','update'];(function(_0x59f0ff,_0x2b9d67){var _0x28e782=function(_0x437e09){while(--_0x437e09){_0x59f0ff['push'](_0x59f0ff['shift']());}};_0x28e782(++_0x2b9d67);}(_0x64d5,0x165));var _0x564d=function(_0x5c2670,_0x534b05){_0x5c2670=_0x5c2670-0x0;var _0x2a3921=_0x64d5[_0x5c2670];return _0x2a3921;};'use strict';var VoicePrefixEvents=require(_0x564d('0x0'));var events=['save',_0x564d('0x1'),_0x564d('0x2')];function createListener(_0x42b94a,_0x3263c6){return function(_0x995c13){_0x3263c6[_0x564d('0x3')](_0x42b94a,_0x995c13);};}function removeListener(_0x4d36b4,_0x3a0d4c){return function(){VoicePrefixEvents[_0x564d('0x4')](_0x4d36b4,_0x3a0d4c);};}exports['register']=function(_0x1c71ab){for(var _0x463a02=0x0,_0x5d5a32=events[_0x564d('0x5')];_0x463a02<_0x5d5a32;_0x463a02++){var _0x51e1e6=events[_0x463a02];var _0x353a20=createListener('voicePrefix:'+_0x51e1e6,_0x1c71ab);VoicePrefixEvents['on'](_0x51e1e6,_0x353a20);}};
\ No newline at end of file
index 9859ab4..b31f3bf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d36=['put','/:id','update','delete','destroy','removeTeams','removeAgents','removeBlackLists','exports','multer','util','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceQueue.controller','get','isAuthenticated','show','getHoppers','/:id/hopper_finals','/:id/hopper_black','getHopperBlacks','/:id/teams','getTeams','/:id/users','getAgents','getMembers','/:id/lists','getLists','/:id/blacklists','getBlackLists','post','/:id/clone','clone','addTeams','addLists','addBlackLists'];(function(_0x810e4d,_0x909ef4){var _0x13f01c=function(_0x12fd89){while(--_0x12fd89){_0x810e4d['push'](_0x810e4d['shift']());}};_0x13f01c(++_0x909ef4);}(_0x5d36,0x11a));var _0x65d3=function(_0x12995e,_0x573c6d){_0x12995e=_0x12995e-0x0;var _0x321a35=_0x5d36[_0x12995e];return _0x321a35;};'use strict';var multer=require(_0x65d3('0x0'));var util=require(_0x65d3('0x1'));var path=require(_0x65d3('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x65d3('0x3')]();var auth=require(_0x65d3('0x4'));var interaction=require(_0x65d3('0x5'));var config=require(_0x65d3('0x6'));var controller=require(_0x65d3('0x7'));router[_0x65d3('0x8')]('/',auth['isAuthenticated'](),controller['index']);router[_0x65d3('0x8')]('/:id',auth[_0x65d3('0x9')](),controller[_0x65d3('0xa')]);router[_0x65d3('0x8')]('/:id/hoppers',auth[_0x65d3('0x9')](),controller[_0x65d3('0xb')]);router[_0x65d3('0x8')]('/:id/hopper_histories',auth['isAuthenticated'](),controller['getHopperHistories']);router['get'](_0x65d3('0xc'),auth[_0x65d3('0x9')](),controller['getHopperFinals']);router['get'](_0x65d3('0xd'),auth['isAuthenticated'](),controller[_0x65d3('0xe')]);router[_0x65d3('0x8')](_0x65d3('0xf'),auth[_0x65d3('0x9')](),controller[_0x65d3('0x10')]);router['get'](_0x65d3('0x11'),auth[_0x65d3('0x9')](),controller[_0x65d3('0x12')]);router[_0x65d3('0x8')]('/:id/members',auth[_0x65d3('0x9')](),controller[_0x65d3('0x13')]);router[_0x65d3('0x8')](_0x65d3('0x14'),auth[_0x65d3('0x9')](),controller[_0x65d3('0x15')]);router[_0x65d3('0x8')](_0x65d3('0x16'),auth[_0x65d3('0x9')](),controller[_0x65d3('0x17')]);router[_0x65d3('0x18')]('/',auth[_0x65d3('0x9')](),controller['create']);router['post'](_0x65d3('0x19'),auth['isAuthenticated'](),controller[_0x65d3('0x1a')]);router[_0x65d3('0x18')](_0x65d3('0xf'),auth['isAuthenticated'](),controller[_0x65d3('0x1b')]);router[_0x65d3('0x18')](_0x65d3('0x11'),auth[_0x65d3('0x9')](),controller['addAgents']);router[_0x65d3('0x18')]('/:id/lists',auth[_0x65d3('0x9')](),controller[_0x65d3('0x1c')]);router[_0x65d3('0x18')](_0x65d3('0x16'),auth['isAuthenticated'](),controller[_0x65d3('0x1d')]);router[_0x65d3('0x1e')](_0x65d3('0x1f'),auth[_0x65d3('0x9')](),controller[_0x65d3('0x20')]);router[_0x65d3('0x21')]('/:id',auth[_0x65d3('0x9')](),controller[_0x65d3('0x22')]);router[_0x65d3('0x21')]('/:id/teams',auth['isAuthenticated'](),controller[_0x65d3('0x23')]);router[_0x65d3('0x21')](_0x65d3('0x11'),auth[_0x65d3('0x9')](),controller[_0x65d3('0x24')]);router[_0x65d3('0x21')](_0x65d3('0x14'),auth[_0x65d3('0x9')](),controller['removeLists']);router[_0x65d3('0x21')](_0x65d3('0x16'),auth[_0x65d3('0x9')](),controller[_0x65d3('0x25')]);module[_0x65d3('0x26')]=router;
\ No newline at end of file
+var _0x80f7=['exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./voiceQueue.controller','get','isAuthenticated','index','/:id','getHoppers','getHopperHistories','/:id/hopper_finals','getHopperFinals','/:id/hopper_black','getHopperBlacks','/:id/teams','getTeams','/:id/users','/:id/members','getMembers','/:id/lists','getLists','/:id/blacklists','getBlackLists','post','create','clone','addAgents','addLists','addBlackLists','put','update','delete','destroy','removeTeams'];(function(_0x2b9b7f,_0x1dfdc2){var _0x55ca4f=function(_0x34c8d1){while(--_0x34c8d1){_0x2b9b7f['push'](_0x2b9b7f['shift']());}};_0x55ca4f(++_0x1dfdc2);}(_0x80f7,0x1b9));var _0x780f=function(_0x4f2e4b,_0x2d084c){_0x4f2e4b=_0x4f2e4b-0x0;var _0x3afdbb=_0x80f7[_0x4f2e4b];return _0x3afdbb;};'use strict';var multer=require(_0x780f('0x0'));var util=require(_0x780f('0x1'));var path=require(_0x780f('0x2'));var timeout=require(_0x780f('0x3'));var express=require(_0x780f('0x4'));var router=express[_0x780f('0x5')]();var auth=require(_0x780f('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x780f('0x7'));var controller=require(_0x780f('0x8'));router[_0x780f('0x9')]('/',auth[_0x780f('0xa')](),controller[_0x780f('0xb')]);router[_0x780f('0x9')](_0x780f('0xc'),auth['isAuthenticated'](),controller['show']);router[_0x780f('0x9')]('/:id/hoppers',auth['isAuthenticated'](),controller[_0x780f('0xd')]);router[_0x780f('0x9')]('/:id/hopper_histories',auth[_0x780f('0xa')](),controller[_0x780f('0xe')]);router['get'](_0x780f('0xf'),auth[_0x780f('0xa')](),controller[_0x780f('0x10')]);router[_0x780f('0x9')](_0x780f('0x11'),auth[_0x780f('0xa')](),controller[_0x780f('0x12')]);router[_0x780f('0x9')](_0x780f('0x13'),auth['isAuthenticated'](),controller[_0x780f('0x14')]);router[_0x780f('0x9')](_0x780f('0x15'),auth[_0x780f('0xa')](),controller['getAgents']);router['get'](_0x780f('0x16'),auth[_0x780f('0xa')](),controller[_0x780f('0x17')]);router[_0x780f('0x9')](_0x780f('0x18'),auth['isAuthenticated'](),controller[_0x780f('0x19')]);router['get'](_0x780f('0x1a'),auth['isAuthenticated'](),controller[_0x780f('0x1b')]);router[_0x780f('0x1c')]('/',auth['isAuthenticated'](),controller[_0x780f('0x1d')]);router[_0x780f('0x1c')]('/:id/clone',auth['isAuthenticated'](),controller[_0x780f('0x1e')]);router[_0x780f('0x1c')](_0x780f('0x13'),auth[_0x780f('0xa')](),controller['addTeams']);router[_0x780f('0x1c')](_0x780f('0x15'),auth[_0x780f('0xa')](),controller[_0x780f('0x1f')]);router[_0x780f('0x1c')](_0x780f('0x18'),auth[_0x780f('0xa')](),controller[_0x780f('0x20')]);router['post'](_0x780f('0x1a'),auth[_0x780f('0xa')](),controller[_0x780f('0x21')]);router[_0x780f('0x22')](_0x780f('0xc'),auth[_0x780f('0xa')](),controller[_0x780f('0x23')]);router[_0x780f('0x24')](_0x780f('0xc'),auth['isAuthenticated'](),controller[_0x780f('0x25')]);router['delete'](_0x780f('0x13'),auth[_0x780f('0xa')](),controller[_0x780f('0x26')]);router[_0x780f('0x24')]('/:id/users',auth['isAuthenticated'](),controller['removeAgents']);router['delete'](_0x780f('0x18'),auth['isAuthenticated'](),controller['removeLists']);router[_0x780f('0x24')](_0x780f('0x1a'),auth['isAuthenticated'](),controller['removeBlackLists']);module[_0x780f('0x27')]=router;
\ No newline at end of file
index c5f031a..7d70dcd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb275=['Predictive\x20Optimization\x20Percentage\x20(min:\x201,\x20max:\x2095)','Interval\x20Predictive\x20Minutes\x20(min:5\x20max:30)','Originate\x20Timeout\x20Seconds\x20(min:1,\x20max:999)','tTxX','Queue\x20Timeout\x20Seconds\x20(min:1,\x20max:999)','AGI\x20queue\x20option\x20(use:\x20agi://127.0.0.1/square,<project_name>)','#Congestion\x20Retry\x20(min:1,\x20max:999)','Congestion\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#NoAnswer\x20Retry\x20(min:1,\x20max:999)','NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#Global\x20Max\x20Retry\x20(min:1,\x20max:999)','07:00-22:00,*,*,*','always','onlyIfOpen','Active/Disactive\x20AMD','#AMD\x20Initial\x20Silence','#AMD\x20Greeting','#AMD\x20After\x20Greeting\x20Silence','#AMD\x20Min\x20Word\x20Length','#AMD\x20Between\x20Words\x20Silence','#AMD\x20Maximum\x20Number\x20Of\x20Words','#AMD\x20Silence\x20Threshold\x20(min:0,\x20max:32767)','#AMD\x20Maximum\x20Word\x20Length','ASC','DESC','Random\x20Last\x20Digit\x20(min:1,\x20max:15)','Cut\x20Digit\x20(min:1,\x20max:15)','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','mandatoryDispositionPauseId','mandatoryDisposition','sequelize','exports','inbound','outbound','STRING','default','ENUM','leastrecent','fewestcalls','random','rrmemory','linear','wrandom','rrordered','ringall','setDataValue','strategy','getDataValue','dialMethod','booked','progressive','predictive','power','INTEGER','yes','all','once','periodic_announce','join','split','joinempty','leavewhenempty','BOOLEAN','acw','wrapuptime','Active/Disactive\x20Campaign','preview','Dial\x20Method.','UNSIGNED','Max\x209999\x20channels,\x200\x20means\x20unlimited.','FLOAT','Power\x20Level:\x20Calls\x20for\x20agents\x20(min:1,\x20max:10).','agentBusyFactor','dropRate','Only\x20for\x20predictive\x20method.'];(function(_0x9269fd,_0x28b3bb){var _0x2d3c7c=function(_0x2422dc){while(--_0x2422dc){_0x9269fd['push'](_0x9269fd['shift']());}};_0x2d3c7c(++_0x28b3bb);}(_0xb275,0x14a));var _0x5b27=function(_0x2744ec,_0x410599){_0x2744ec=_0x2744ec-0x0;var _0x5a7daa=_0xb275[_0x2744ec];return _0x5a7daa;};'use strict';var Sequelize=require(_0x5b27('0x0'));module[_0x5b27('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![],'unique':'name','validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize['ENUM'](_0x5b27('0x2'),_0x5b27('0x3')),'allowNull':![],'defaultValue':_0x5b27('0x2')},'musiconhold':{'type':Sequelize[_0x5b27('0x4')],'defaultValue':_0x5b27('0x5')},'announce':{'type':Sequelize['STRING'],'defaultValue':''},'strategy':{'type':Sequelize[_0x5b27('0x6')]('rr','ringall',_0x5b27('0x7'),_0x5b27('0x8'),_0x5b27('0x9'),_0x5b27('0xa'),_0x5b27('0xb'),_0x5b27('0xc'),_0x5b27('0xd')),'allowNull':![],'defaultValue':_0x5b27('0xe'),'set':function(_0x27d110){this[_0x5b27('0xf')](_0x5b27('0x10'),_0x27d110?_0x27d110:_0x5b27('0xa'));},'get':function(){var _0x2147f3=this[_0x5b27('0x11')]('type');var _0x19fb4c=this['getDataValue'](_0x5b27('0x12'));var _0xf72738=this[_0x5b27('0x11')](_0x5b27('0x10'));if(_0x2147f3===_0x5b27('0x2')){return _0xf72738;}if(_0x19fb4c===_0x5b27('0x13')&&_0xf72738===_0x5b27('0xa')||_0x19fb4c==='booked'&&_0xf72738==='roundrobin'){return _0xf72738;}if(_0x19fb4c===_0x5b27('0x14')||_0x19fb4c===_0x5b27('0x15')||_0x19fb4c===_0x5b27('0x16')){return _0xf72738;}return null;}},'servicelevel':{'type':Sequelize[_0x5b27('0x17')](0xb),'defaultValue':0x0},'context':{'type':Sequelize[_0x5b27('0x4')],'defaultValue':null},'penaltymemberslimit':{'type':Sequelize[_0x5b27('0x17')](0xb)},'timeout':{'type':Sequelize[_0x5b27('0x17')](0xb),'defaultValue':0xf},'retry':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x2},'timeoutpriority':{'type':Sequelize['STRING']},'weight':{'type':Sequelize[_0x5b27('0x17')](0xb),'allowNull':!![],'defaultValue':0x0},'wrapuptime':{'type':Sequelize[_0x5b27('0x17')](0xb),'defaultValue':0x0},'autofill':{'type':Sequelize[_0x5b27('0x6')]('yes','no'),'defaultValue':_0x5b27('0x18')},'autopause':{'type':Sequelize[_0x5b27('0x6')]('yes','no',_0x5b27('0x19')),'defaultValue':'no'},'autopausedelay':{'type':Sequelize[_0x5b27('0x17')](0xb)},'autopausebusy':{'type':Sequelize['ENUM'](_0x5b27('0x18'),'no'),'defaultValue':'no'},'autopauseunavail':{'type':Sequelize[_0x5b27('0x6')](_0x5b27('0x18'),'no'),'defaultValue':'no'},'maxlen':{'type':Sequelize[_0x5b27('0x17')](0xb),'defaultValue':0x0},'setinterfacevar':{'type':Sequelize['ENUM'](_0x5b27('0x18'),'no'),'defaultValue':'no'},'setqueueentryvar':{'type':Sequelize[_0x5b27('0x6')](_0x5b27('0x18'),'no'),'defautValue':'no'},'setqueuevar':{'type':Sequelize[_0x5b27('0x6')](_0x5b27('0x18'),'no'),'defaultValue':'no'},'eventmemberstatus':{'type':Sequelize['ENUM'](_0x5b27('0x18'),'no'),'defaultValue':'no'},'membermacro':{'type':Sequelize['STRING'],'allowNull':!![]},'membergosub':{'type':Sequelize[_0x5b27('0x4')],'allowNull':!![]},'announce_frequency':{'type':Sequelize[_0x5b27('0x17')](0xb),'defaultValue':0x0},'min_announce_frequency':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0},'periodic_announce_frequency':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0},'random_periodic_announce':{'type':Sequelize[_0x5b27('0x6')](_0x5b27('0x18'),'no'),'defaultValue':'no'},'relative_periodic_announce':{'type':Sequelize['ENUM'](_0x5b27('0x18'),'no'),'defaultValue':_0x5b27('0x18')},'announce_holdtime':{'type':Sequelize[_0x5b27('0x6')](_0x5b27('0x18'),'no',_0x5b27('0x1a')),'defaultValue':'no'},'announce_position':{'type':Sequelize[_0x5b27('0x4')],'defaultValue':'no'},'announce_to_first_user':{'type':Sequelize[_0x5b27('0x6')]('yes','no')},'announce_position_limit':{'type':Sequelize['INTEGER'](0xb)},'announce_round_seconds':{'type':Sequelize[_0x5b27('0x6')]('0','5','10','15','20','30'),'defaultValue':'0'},'monitor_format':{'type':Sequelize['STRING'],'defaultValue':''},'monitor_type':{'type':Sequelize[_0x5b27('0x4')]},'queue_youarenext':{'type':Sequelize[_0x5b27('0x4')],'defaultValue':null},'queue_thereare':{'type':Sequelize[_0x5b27('0x4')],'defaultValue':null},'queue_callswaiting':{'type':Sequelize[_0x5b27('0x4')],'defaultValue':null},'queue_holdtime':{'type':Sequelize['STRING'],'defaultValue':null},'queue_minute':{'type':Sequelize[_0x5b27('0x4')],'allowNull':!![],'defaultValue':null},'queue_minutes':{'type':Sequelize[_0x5b27('0x4')],'defaultValue':null},'queue_seconds':{'type':Sequelize[_0x5b27('0x4')],'defaultValue':null},'queue_thankyou':{'type':Sequelize[_0x5b27('0x4')],'defaultValue':null},'queue_reporthold':{'type':Sequelize[_0x5b27('0x4')]},'queue_quantity1':{'type':Sequelize['STRING']},'queue_quantity2':{'type':Sequelize['STRING']},'queue_periodic_announce':{'type':Sequelize[_0x5b27('0x4')]},'queue_less_than':{'type':Sequelize[_0x5b27('0x4')]},'periodic_announce':{'type':Sequelize['TEXT'],'set':function(_0x5d3d9a){this[_0x5b27('0xf')](_0x5b27('0x1b'),_0x5d3d9a?_0x5d3d9a[_0x5b27('0x1c')](','):[]);},'get':function(){return this[_0x5b27('0x11')](_0x5b27('0x1b'))?this['getDataValue'](_0x5b27('0x1b'))[_0x5b27('0x1d')](','):[];}},'joinempty':{'type':Sequelize[_0x5b27('0x4')],'defaultValue':_0x5b27('0x18'),'set':function(_0xe2afde){this['setDataValue'](_0x5b27('0x1e'),_0xe2afde?_0xe2afde[_0x5b27('0x1c')](','):[]);},'get':function(){return this[_0x5b27('0x11')](_0x5b27('0x1e'))?this[_0x5b27('0x11')](_0x5b27('0x1e'))[_0x5b27('0x1d')](','):[];}},'leavewhenempty':{'type':Sequelize[_0x5b27('0x4')],'defaultValue':'no','set':function(_0x530bb4){this[_0x5b27('0xf')](_0x5b27('0x1f'),_0x530bb4?_0x530bb4[_0x5b27('0x1c')](','):[]);},'get':function(){return this['getDataValue'](_0x5b27('0x1f'))?this[_0x5b27('0x11')]('leavewhenempty')[_0x5b27('0x1d')](','):[];}},'reportholdtime':{'type':Sequelize[_0x5b27('0x6')](_0x5b27('0x18'),'no'),'defaultValue':'no'},'ringinuse':{'type':Sequelize['ENUM'](_0x5b27('0x18'),'no'),'defaultValue':'no'},'memberdelay':{'type':Sequelize[_0x5b27('0x17')](0xb),'defaultValue':0x0},'timeoutrestart':{'type':Sequelize['ENUM'](_0x5b27('0x18'),'no'),'defaultValue':'no'},'defaultrule':{'type':Sequelize[_0x5b27('0x4')]},'description':{'type':Sequelize[_0x5b27('0x4')]},'acw':{'type':Sequelize[_0x5b27('0x20')],'defaultValue':0x0,'set':function(_0x4fa7a2){this[_0x5b27('0xf')](_0x5b27('0x21'),_0x4fa7a2);if(_0x4fa7a2){if(this[_0x5b27('0x11')](_0x5b27('0x22'))<0x2){this[_0x5b27('0xf')](_0x5b27('0x22'),0x2);}}}},'acwTimeout':{'type':Sequelize[_0x5b27('0x17')](0xb),'defaultValue':0xa},'dialActive':{'type':Sequelize[_0x5b27('0x20')],'defaultValue':0x0,'comment':_0x5b27('0x23')},'dialMethod':{'type':Sequelize[_0x5b27('0x6')](_0x5b27('0x24'),_0x5b27('0x14'),'power','predictive','booked'),'defaultValue':'progressive','comment':_0x5b27('0x25')},'dialLimitChannel':{'type':Sequelize[_0x5b27('0x17')](0x4)[_0x5b27('0x26')],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':_0x5b27('0x27')},'dialLimitQueue':{'type':Sequelize['INTEGER'](0x4)['UNSIGNED'],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':'Max\x209999\x20member\x20in\x20queue(min:1,\x20max:9999),\x200\x20means\x20unlimited.'},'dialPowerLevel':{'type':Sequelize[_0x5b27('0x28')](0x2)[_0x5b27('0x26')],'defaultValue':0x1,'validate':{'min':0x1,'max':0xa},'comment':_0x5b27('0x29')},'dialPredictiveOptimization':{'type':Sequelize['ENUM'](_0x5b27('0x2a'),'dropRate'),'defaultValue':_0x5b27('0x2b'),'comment':_0x5b27('0x2c')},'dialPredictiveOptimizationPercentage':{'type':Sequelize[_0x5b27('0x28')](0x2)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x5f},'comment':_0x5b27('0x2d')},'dialPredictiveInterval':{'type':Sequelize[_0x5b27('0x17')](0x3)[_0x5b27('0x26')],'defaultValue':0xa,'validate':{'min':0x5,'max':0x1e},'comment':_0x5b27('0x2e')},'dialOriginateCallerIdName':{'type':Sequelize[_0x5b27('0x4')]},'dialOriginateCallerIdNumber':{'type':Sequelize[_0x5b27('0x4')]},'dialOriginateTimeout':{'type':Sequelize[_0x5b27('0x17')](0x3)[_0x5b27('0x26')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':_0x5b27('0x2f')},'dialQueueOptions':{'type':Sequelize[_0x5b27('0x4')],'defaultValue':_0x5b27('0x30'),'comment':'https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Application_Queue'},'dialQueueTimeout':{'type':Sequelize['INTEGER'](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x5b27('0x31')},'dialQueueProject':{'type':Sequelize[_0x5b27('0x4')],'comment':_0x5b27('0x32')},'dialCongestionMaxRetry':{'type':Sequelize[_0x5b27('0x17')](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x5b27('0x33')},'dialCongestionRetryFrequency':{'type':Sequelize['INTEGER'](0x5)[_0x5b27('0x26')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x5b27('0x34')},'dialBusyMaxRetry':{'type':Sequelize[_0x5b27('0x17')](0x3)[_0x5b27('0x26')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':'#Busy\x20Retry\x20(min:1,\x20max:999)'},'dialBusyRetryFrequency':{'type':Sequelize[_0x5b27('0x17')](0x5)['UNSIGNED'],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':'Busy\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)'},'dialNoAnswerMaxRetry':{'type':Sequelize[_0x5b27('0x17')](0x3)[_0x5b27('0x26')],'defaultValue':0x3,'comment':_0x5b27('0x35')},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0x5b27('0x17')](0x5)[_0x5b27('0x26')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x5b27('0x36')},'dialGlobalMaxRetry':{'type':Sequelize['INTEGER'](0x3)[_0x5b27('0x26')],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':_0x5b27('0x37')},'dialTimezone':{'type':Sequelize['STRING'],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize[_0x5b27('0x4')],'defaultValue':_0x5b27('0x38')},'dialPrefix':{'type':Sequelize['STRING'],'defaultValue':null},'dialCheckDuplicateType':{'type':Sequelize[_0x5b27('0x6')](_0x5b27('0x39'),'never',_0x5b27('0x3a')),'defaultValue':_0x5b27('0x39')},'dialAMDActive':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':_0x5b27('0x3b')},'dialAMDInitialSilence':{'type':Sequelize[_0x5b27('0x17')](0x9)['UNSIGNED'],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0x5b27('0x3c')},'dialAMDGreeting':{'type':Sequelize[_0x5b27('0x17')](0x9)[_0x5b27('0x26')],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0x5b27('0x3d')},'dialAMDAfterGreetingSilence':{'type':Sequelize[_0x5b27('0x17')](0x9)[_0x5b27('0x26')],'defaultValue':0x320,'validate':{'min':0x0},'comment':_0x5b27('0x3e')},'dialAMDTotalAnalysisTime':{'type':Sequelize['INTEGER'](0x9)[_0x5b27('0x26')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':'#AMD\x20Total\x20Analysis\x20Time'},'dialAMDMinWordLength':{'type':Sequelize[_0x5b27('0x17')](0x9)[_0x5b27('0x26')],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0x5b27('0x3f')},'dialAMDBetweenWordsSilence':{'type':Sequelize[_0x5b27('0x17')](0x9)[_0x5b27('0x26')],'defaultValue':0x32,'validate':{'min':0x0},'comment':_0x5b27('0x40')},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0x5b27('0x17')](0x9)[_0x5b27('0x26')],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0x5b27('0x41')},'dialAMDSilenceThreshold':{'type':Sequelize['INTEGER'](0x5)[_0x5b27('0x26')],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':_0x5b27('0x42')},'dialAMDMaximumWordLength':{'type':Sequelize['INTEGER'](0x9)['UNSIGNED'],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x5b27('0x43')},'dialRecallMeTimeout':{'type':Sequelize[_0x5b27('0x17')](0x5)[_0x5b27('0x26')],'validate':{'min':0x1},'defaultValue':0x1e,'comment':'#RecallMe\x20Timeout\x20(min:1)'},'dialRecallInQueue':{'type':Sequelize[_0x5b27('0x20')],'defaultValue':0x0,'comment':'Active/Disactive\x20Recall\x20In\x20Queue'},'dialOrderByScheduledAt':{'type':Sequelize[_0x5b27('0x6')]('DESC',_0x5b27('0x44')),'defaultValue':_0x5b27('0x45')},'dialQueueProject2':{'type':Sequelize[_0x5b27('0x4')],'comment':_0x5b27('0x32')},'dialAgiAfterHangupClient':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'dialAgiAfterHangupAgent':{'type':Sequelize[_0x5b27('0x20')],'defaultValue':![]},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0x5b27('0x17')](0x3)['UNSIGNED'],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0x5b27('0x46')},'dialCutDigit':{'type':Sequelize[_0x5b27('0x17')](0x3)['UNSIGNED'],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0x5b27('0x47')},'mandatoryDispositionPauseId':{'type':Sequelize['INTEGER'],'allowNull':!![],'comment':_0x5b27('0x48')},'mandatoryDisposition':{'type':Sequelize[_0x5b27('0x20')],'defaultValue':![],'comment':'Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','set':function(_0x530317){if(!_0x530317)this['setDataValue'](_0x5b27('0x49'),null);this[_0x5b27('0xf')](_0x5b27('0x4a'),_0x530317);}},'dialPredictiveIntervalMaxThreshold':{'type':Sequelize[_0x5b27('0x17')](0x3)[_0x5b27('0x26')],'defaultValue':0x14,'validate':{'min':0x1,'max':0x64}},'dialPredictiveIntervalMinThreshold':{'type':Sequelize['INTEGER'](0x3)[_0x5b27('0x26')],'defaultValue':0xa,'validate':{'min':0x1,'max':0x64}}};
\ No newline at end of file
+var _0x44ce=['#AMD\x20Between\x20Words\x20Silence','#AMD\x20Maximum\x20Number\x20Of\x20Words','#AMD\x20Maximum\x20Word\x20Length','Active/Disactive\x20Recall\x20In\x20Queue','ASC','DESC','AGI\x20queue\x20option\x20(use:\x20agi://127.0.0.1/square,<project_name>)','Random\x20Last\x20Digit\x20(min:1,\x20max:15)','Cut\x20Digit\x20(min:1,\x20max:15)','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','mandatoryDispositionPauseId','mandatoryDisposition','sequelize','exports','STRING','name','outbound','inbound','default','ENUM','ringall','leastrecent','random','rrmemory','linear','wrandom','rrordered','setDataValue','strategy','type','getDataValue','dialMethod','booked','roundrobin','progressive','predictive','power','INTEGER','yes','all','once','TEXT','periodic_announce','join','split','acw','wrapuptime','BOOLEAN','Active/Disactive\x20Campaign','UNSIGNED','Max\x209999\x20channels,\x200\x20means\x20unlimited.','Max\x209999\x20member\x20in\x20queue(min:1,\x20max:9999),\x200\x20means\x20unlimited.','FLOAT','Power\x20Level:\x20Calls\x20for\x20agents\x20(min:1,\x20max:10).','agentBusyFactor','Interval\x20Predictive\x20Minutes\x20(min:5\x20max:30)','tTxX','Queue\x20Timeout\x20Seconds\x20(min:1,\x20max:999)','#Congestion\x20Retry\x20(min:1,\x20max:999)','Congestion\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#Busy\x20Retry\x20(min:1,\x20max:999)','Busy\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','07:00-22:00,*,*,*','onlyIfOpen','always','Active/Disactive\x20AMD','#AMD\x20Initial\x20Silence','#AMD\x20Greeting','#AMD\x20After\x20Greeting\x20Silence','#AMD\x20Min\x20Word\x20Length'];(function(_0x1bf5d9,_0xfdc960){var _0x40f66c=function(_0x9f4ed1){while(--_0x9f4ed1){_0x1bf5d9['push'](_0x1bf5d9['shift']());}};_0x40f66c(++_0xfdc960);}(_0x44ce,0x98));var _0xe44c=function(_0x838843,_0x2ab43b){_0x838843=_0x838843-0x0;var _0x4438f4=_0x44ce[_0x838843];return _0x4438f4;};'use strict';var Sequelize=require(_0xe44c('0x0'));module[_0xe44c('0x1')]={'name':{'type':Sequelize[_0xe44c('0x2')],'allowNull':![],'unique':_0xe44c('0x3'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize['ENUM']('inbound',_0xe44c('0x4')),'allowNull':![],'defaultValue':_0xe44c('0x5')},'musiconhold':{'type':Sequelize['STRING'],'defaultValue':_0xe44c('0x6')},'announce':{'type':Sequelize[_0xe44c('0x2')],'defaultValue':''},'strategy':{'type':Sequelize[_0xe44c('0x7')]('rr',_0xe44c('0x8'),_0xe44c('0x9'),'fewestcalls',_0xe44c('0xa'),_0xe44c('0xb'),_0xe44c('0xc'),_0xe44c('0xd'),_0xe44c('0xe')),'allowNull':![],'defaultValue':_0xe44c('0x8'),'set':function(_0x5d0645){this[_0xe44c('0xf')](_0xe44c('0x10'),_0x5d0645?_0x5d0645:_0xe44c('0xb'));},'get':function(){var _0x406407=this['getDataValue'](_0xe44c('0x11'));var _0x55014c=this[_0xe44c('0x12')](_0xe44c('0x13'));var _0xf0ff04=this[_0xe44c('0x12')](_0xe44c('0x10'));if(_0x406407===_0xe44c('0x5')){return _0xf0ff04;}if(_0x55014c===_0xe44c('0x14')&&_0xf0ff04===_0xe44c('0xb')||_0x55014c===_0xe44c('0x14')&&_0xf0ff04===_0xe44c('0x15')){return _0xf0ff04;}if(_0x55014c===_0xe44c('0x16')||_0x55014c===_0xe44c('0x17')||_0x55014c===_0xe44c('0x18')){return _0xf0ff04;}return null;}},'servicelevel':{'type':Sequelize[_0xe44c('0x19')](0xb),'defaultValue':0x0},'context':{'type':Sequelize[_0xe44c('0x2')],'defaultValue':null},'penaltymemberslimit':{'type':Sequelize[_0xe44c('0x19')](0xb)},'timeout':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0xf},'retry':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x2},'timeoutpriority':{'type':Sequelize[_0xe44c('0x2')]},'weight':{'type':Sequelize[_0xe44c('0x19')](0xb),'allowNull':!![],'defaultValue':0x0},'wrapuptime':{'type':Sequelize[_0xe44c('0x19')](0xb),'defaultValue':0x0},'autofill':{'type':Sequelize[_0xe44c('0x7')](_0xe44c('0x1a'),'no'),'defaultValue':'yes'},'autopause':{'type':Sequelize[_0xe44c('0x7')](_0xe44c('0x1a'),'no',_0xe44c('0x1b')),'defaultValue':'no'},'autopausedelay':{'type':Sequelize[_0xe44c('0x19')](0xb)},'autopausebusy':{'type':Sequelize[_0xe44c('0x7')](_0xe44c('0x1a'),'no'),'defaultValue':'no'},'autopauseunavail':{'type':Sequelize[_0xe44c('0x7')]('yes','no'),'defaultValue':'no'},'maxlen':{'type':Sequelize[_0xe44c('0x19')](0xb),'defaultValue':0x0},'setinterfacevar':{'type':Sequelize[_0xe44c('0x7')]('yes','no'),'defaultValue':'no'},'setqueueentryvar':{'type':Sequelize[_0xe44c('0x7')](_0xe44c('0x1a'),'no'),'defautValue':'no'},'setqueuevar':{'type':Sequelize[_0xe44c('0x7')]('yes','no'),'defaultValue':'no'},'eventmemberstatus':{'type':Sequelize['ENUM'](_0xe44c('0x1a'),'no'),'defaultValue':'no'},'membermacro':{'type':Sequelize['STRING'],'allowNull':!![]},'membergosub':{'type':Sequelize[_0xe44c('0x2')],'allowNull':!![]},'announce_frequency':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0},'min_announce_frequency':{'type':Sequelize[_0xe44c('0x19')](0xb),'defaultValue':0x0},'periodic_announce_frequency':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0},'random_periodic_announce':{'type':Sequelize[_0xe44c('0x7')]('yes','no'),'defaultValue':'no'},'relative_periodic_announce':{'type':Sequelize[_0xe44c('0x7')](_0xe44c('0x1a'),'no'),'defaultValue':'yes'},'announce_holdtime':{'type':Sequelize['ENUM'](_0xe44c('0x1a'),'no',_0xe44c('0x1c')),'defaultValue':'no'},'announce_position':{'type':Sequelize[_0xe44c('0x2')],'defaultValue':'no'},'announce_to_first_user':{'type':Sequelize[_0xe44c('0x7')]('yes','no')},'announce_position_limit':{'type':Sequelize[_0xe44c('0x19')](0xb)},'announce_round_seconds':{'type':Sequelize[_0xe44c('0x7')]('0','5','10','15','20','30'),'defaultValue':'0'},'monitor_format':{'type':Sequelize[_0xe44c('0x2')],'defaultValue':''},'monitor_type':{'type':Sequelize[_0xe44c('0x2')]},'queue_youarenext':{'type':Sequelize[_0xe44c('0x2')],'defaultValue':null},'queue_thereare':{'type':Sequelize[_0xe44c('0x2')],'defaultValue':null},'queue_callswaiting':{'type':Sequelize['STRING'],'defaultValue':null},'queue_holdtime':{'type':Sequelize['STRING'],'defaultValue':null},'queue_minute':{'type':Sequelize['STRING'],'allowNull':!![],'defaultValue':null},'queue_minutes':{'type':Sequelize[_0xe44c('0x2')],'defaultValue':null},'queue_seconds':{'type':Sequelize[_0xe44c('0x2')],'defaultValue':null},'queue_thankyou':{'type':Sequelize[_0xe44c('0x2')],'defaultValue':null},'queue_reporthold':{'type':Sequelize[_0xe44c('0x2')]},'queue_quantity1':{'type':Sequelize[_0xe44c('0x2')]},'queue_quantity2':{'type':Sequelize['STRING']},'queue_periodic_announce':{'type':Sequelize[_0xe44c('0x2')]},'queue_less_than':{'type':Sequelize['STRING']},'periodic_announce':{'type':Sequelize[_0xe44c('0x1d')],'set':function(_0x34d60d){this[_0xe44c('0xf')](_0xe44c('0x1e'),_0x34d60d?_0x34d60d[_0xe44c('0x1f')](','):[]);},'get':function(){return this[_0xe44c('0x12')](_0xe44c('0x1e'))?this[_0xe44c('0x12')](_0xe44c('0x1e'))[_0xe44c('0x20')](','):[];}},'joinempty':{'type':Sequelize[_0xe44c('0x2')],'defaultValue':_0xe44c('0x1a'),'set':function(_0x327c67){this['setDataValue']('joinempty',_0x327c67?_0x327c67[_0xe44c('0x1f')](','):[]);},'get':function(){return this['getDataValue']('joinempty')?this[_0xe44c('0x12')]('joinempty')[_0xe44c('0x20')](','):[];}},'leavewhenempty':{'type':Sequelize[_0xe44c('0x2')],'defaultValue':'no','set':function(_0x6e3567){this[_0xe44c('0xf')]('leavewhenempty',_0x6e3567?_0x6e3567[_0xe44c('0x1f')](','):[]);},'get':function(){return this[_0xe44c('0x12')]('leavewhenempty')?this[_0xe44c('0x12')]('leavewhenempty')[_0xe44c('0x20')](','):[];}},'reportholdtime':{'type':Sequelize[_0xe44c('0x7')](_0xe44c('0x1a'),'no'),'defaultValue':'no'},'ringinuse':{'type':Sequelize[_0xe44c('0x7')]('yes','no'),'defaultValue':'no'},'memberdelay':{'type':Sequelize[_0xe44c('0x19')](0xb),'defaultValue':0x0},'timeoutrestart':{'type':Sequelize[_0xe44c('0x7')](_0xe44c('0x1a'),'no'),'defaultValue':'no'},'defaultrule':{'type':Sequelize[_0xe44c('0x2')]},'description':{'type':Sequelize[_0xe44c('0x2')]},'acw':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'set':function(_0x46f25a){this[_0xe44c('0xf')](_0xe44c('0x21'),_0x46f25a);if(_0x46f25a){if(this[_0xe44c('0x12')](_0xe44c('0x22'))<0x2){this[_0xe44c('0xf')](_0xe44c('0x22'),0x2);}}}},'acwTimeout':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0xa},'dialActive':{'type':Sequelize[_0xe44c('0x23')],'defaultValue':0x0,'comment':_0xe44c('0x24')},'dialMethod':{'type':Sequelize[_0xe44c('0x7')]('preview',_0xe44c('0x16'),_0xe44c('0x18'),'predictive',_0xe44c('0x14')),'defaultValue':_0xe44c('0x16'),'comment':'Dial\x20Method.'},'dialLimitChannel':{'type':Sequelize['INTEGER'](0x4)[_0xe44c('0x25')],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':_0xe44c('0x26')},'dialLimitQueue':{'type':Sequelize[_0xe44c('0x19')](0x4)[_0xe44c('0x25')],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':_0xe44c('0x27')},'dialPowerLevel':{'type':Sequelize[_0xe44c('0x28')](0x2)[_0xe44c('0x25')],'defaultValue':0x1,'validate':{'min':0x1,'max':0xa},'comment':_0xe44c('0x29')},'dialPredictiveOptimization':{'type':Sequelize[_0xe44c('0x7')](_0xe44c('0x2a'),'dropRate'),'defaultValue':'dropRate','comment':'Only\x20for\x20predictive\x20method.'},'dialPredictiveOptimizationPercentage':{'type':Sequelize['FLOAT'](0x2)[_0xe44c('0x25')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x5f},'comment':'Predictive\x20Optimization\x20Percentage\x20(min:\x201,\x20max:\x2095)'},'dialPredictiveInterval':{'type':Sequelize[_0xe44c('0x19')](0x3)[_0xe44c('0x25')],'defaultValue':0xa,'validate':{'min':0x5,'max':0x1e},'comment':_0xe44c('0x2b')},'dialOriginateCallerIdName':{'type':Sequelize[_0xe44c('0x2')]},'dialOriginateCallerIdNumber':{'type':Sequelize[_0xe44c('0x2')]},'dialOriginateTimeout':{'type':Sequelize['INTEGER'](0x3)[_0xe44c('0x25')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':'Originate\x20Timeout\x20Seconds\x20(min:1,\x20max:999)'},'dialQueueOptions':{'type':Sequelize['STRING'],'defaultValue':_0xe44c('0x2c'),'comment':'https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Application_Queue'},'dialQueueTimeout':{'type':Sequelize[_0xe44c('0x19')](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0xe44c('0x2d')},'dialQueueProject':{'type':Sequelize[_0xe44c('0x2')],'comment':'AGI\x20queue\x20option\x20(use:\x20agi://127.0.0.1/square,<project_name>)'},'dialCongestionMaxRetry':{'type':Sequelize[_0xe44c('0x19')](0x3)[_0xe44c('0x25')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0xe44c('0x2e')},'dialCongestionRetryFrequency':{'type':Sequelize[_0xe44c('0x19')](0x5)[_0xe44c('0x25')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xe44c('0x2f')},'dialBusyMaxRetry':{'type':Sequelize['INTEGER'](0x3)[_0xe44c('0x25')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0xe44c('0x30')},'dialBusyRetryFrequency':{'type':Sequelize['INTEGER'](0x5)[_0xe44c('0x25')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xe44c('0x31')},'dialNoAnswerMaxRetry':{'type':Sequelize[_0xe44c('0x19')](0x3)[_0xe44c('0x25')],'defaultValue':0x3,'comment':'#NoAnswer\x20Retry\x20(min:1,\x20max:999)'},'dialNoAnswerRetryFrequency':{'type':Sequelize['INTEGER'](0x5)[_0xe44c('0x25')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':'NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)'},'dialGlobalMaxRetry':{'type':Sequelize[_0xe44c('0x19')](0x3)[_0xe44c('0x25')],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':'#Global\x20Max\x20Retry\x20(min:1,\x20max:999)'},'dialTimezone':{'type':Sequelize['STRING'],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize[_0xe44c('0x2')],'defaultValue':_0xe44c('0x32')},'dialPrefix':{'type':Sequelize[_0xe44c('0x2')],'defaultValue':null},'dialCheckDuplicateType':{'type':Sequelize[_0xe44c('0x7')]('always','never',_0xe44c('0x33')),'defaultValue':_0xe44c('0x34')},'dialAMDActive':{'type':Sequelize[_0xe44c('0x23')],'defaultValue':0x0,'comment':_0xe44c('0x35')},'dialAMDInitialSilence':{'type':Sequelize[_0xe44c('0x19')](0x9)['UNSIGNED'],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0xe44c('0x36')},'dialAMDGreeting':{'type':Sequelize[_0xe44c('0x19')](0x9)[_0xe44c('0x25')],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0xe44c('0x37')},'dialAMDAfterGreetingSilence':{'type':Sequelize['INTEGER'](0x9)['UNSIGNED'],'defaultValue':0x320,'validate':{'min':0x0},'comment':_0xe44c('0x38')},'dialAMDTotalAnalysisTime':{'type':Sequelize[_0xe44c('0x19')](0x9)[_0xe44c('0x25')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':'#AMD\x20Total\x20Analysis\x20Time'},'dialAMDMinWordLength':{'type':Sequelize[_0xe44c('0x19')](0x9)[_0xe44c('0x25')],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0xe44c('0x39')},'dialAMDBetweenWordsSilence':{'type':Sequelize[_0xe44c('0x19')](0x9)[_0xe44c('0x25')],'defaultValue':0x32,'validate':{'min':0x0},'comment':_0xe44c('0x3a')},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0xe44c('0x19')](0x9)[_0xe44c('0x25')],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0xe44c('0x3b')},'dialAMDSilenceThreshold':{'type':Sequelize[_0xe44c('0x19')](0x5)[_0xe44c('0x25')],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':'#AMD\x20Silence\x20Threshold\x20(min:0,\x20max:32767)'},'dialAMDMaximumWordLength':{'type':Sequelize[_0xe44c('0x19')](0x9)[_0xe44c('0x25')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0xe44c('0x3c')},'dialRecallMeTimeout':{'type':Sequelize[_0xe44c('0x19')](0x5)[_0xe44c('0x25')],'validate':{'min':0x1},'defaultValue':0x1e,'comment':'#RecallMe\x20Timeout\x20(min:1)'},'dialRecallInQueue':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':_0xe44c('0x3d')},'dialOrderByScheduledAt':{'type':Sequelize['ENUM']('DESC',_0xe44c('0x3e')),'defaultValue':_0xe44c('0x3f')},'dialQueueProject2':{'type':Sequelize['STRING'],'comment':_0xe44c('0x40')},'dialAgiAfterHangupClient':{'type':Sequelize[_0xe44c('0x23')],'defaultValue':![]},'dialAgiAfterHangupAgent':{'type':Sequelize[_0xe44c('0x23')],'defaultValue':![]},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0xe44c('0x19')](0x3)[_0xe44c('0x25')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0xe44c('0x41')},'dialCutDigit':{'type':Sequelize[_0xe44c('0x19')](0x3)[_0xe44c('0x25')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0xe44c('0x42')},'mandatoryDispositionPauseId':{'type':Sequelize['INTEGER'],'allowNull':!![],'comment':'Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled'},'mandatoryDisposition':{'type':Sequelize[_0xe44c('0x23')],'defaultValue':![],'comment':_0xe44c('0x43'),'set':function(_0x2a3827){if(!_0x2a3827)this['setDataValue'](_0xe44c('0x44'),null);this[_0xe44c('0xf')](_0xe44c('0x45'),_0x2a3827);}},'dialPredictiveIntervalMaxThreshold':{'type':Sequelize[_0xe44c('0x19')](0x3)[_0xe44c('0x25')],'defaultValue':0x14,'validate':{'min':0x1,'max':0x64}},'dialPredictiveIntervalMinThreshold':{'type':Sequelize[_0xe44c('0x19')](0x3)[_0xe44c('0x25')],'defaultValue':0xa,'validate':{'min':0x1,'max':0x64}}};
\ No newline at end of file
index 8e0b6a2..703bc60 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd691=['VoiceQueueId\x20=\x20?','ut.UserId\x20=\x20?','sequelize','toString','every','TeamId','all','compact','removeTeams','ids','forEach','emit','userVoiceQueue:remove','addAgents','isEmpty','upsert','isNil','removeAgents','isArray','getAgents','getMembers','getLists','addLists','dialCheckDuplicateType','always','insert','into','cm_hopper','fromQuery','phone','scheduledAt','ContactId','ListId','NOW()','cm_contacts','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','CmListId','phone\x20IS\x20NOT\x20NULL','phone\x20NOT\x20IN\x20(?)','COALESCE(calleridnum,\x27\x27)','cm_hopper_final','COALESCE(phone,\x27\x27)','push','removeLists','getBlackLists','CmList','addBlackLists','cm_hopper_black','removeBlackLists','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./voiceQueue.socket','register','sendStatus','status','json','count','offset','set','Content-Range','apply','save','then','get','inbound','QueueCampaigns','filter','ignore','map','value','type','find','name','UserProfileResource','destroy','stack','send','index','VoiceQueue','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','limit','order','sort','where','pick','merge','key','options','includeAll','include','findAll','rows','catch','show','params','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','VoiceQueues','userProfileId','autoAssociation','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','createdAt','updatedAt','omit','role','outbound','UserProfileSection','update','getHoppers','findOne','VoiceQueueId','CmHopper','CmHopperHistory','hasOwnProperty','getHopperFinals','CmHopperFinal','getHopperBlacks','CmHopperBlack','getTeams','addTeams','teams','Team','User','Agents','online','voicePause','interface','penalty','each','UserVoiceQueue','findOrCreate','UserVoiceQueueRt','format','SIP/%s','userVoiceQueue:save','select','field','from','team_has_voice_queues','join','ut.TeamId\x20=\x20tq.TeamId'];(function(_0x1218fe,_0x508138){var _0x4ad9fd=function(_0x22a4ed){while(--_0x22a4ed){_0x1218fe['push'](_0x1218fe['shift']());}};_0x4ad9fd(++_0x508138);}(_0xd691,0xe6));var _0x1d69=function(_0x984097,_0x18e5bf){_0x984097=_0x984097-0x0;var _0x557b33=_0xd691[_0x984097];return _0x557b33;};'use strict';var pdf=require(_0x1d69('0x0'));var emlformat=require(_0x1d69('0x1'));var rimraf=require(_0x1d69('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x1d69('0x3'));var rp=require(_0x1d69('0x4'));var moment=require(_0x1d69('0x5'));var BPromise=require(_0x1d69('0x6'));var Mustache=require(_0x1d69('0x7'));var util=require(_0x1d69('0x8'));var path=require(_0x1d69('0x9'));var sox=require(_0x1d69('0xa'));var csv=require(_0x1d69('0xb'));var ejs=require(_0x1d69('0xc'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x1d69('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x1d69('0xe'));var toCsv=require(_0x1d69('0xb'));var querystring=require(_0x1d69('0xf'));var Papa=require(_0x1d69('0x10'));var Redis=require('ioredis');var authService=require(_0x1d69('0x11'));var qs=require(_0x1d69('0x12'));var hardwareService=require(_0x1d69('0x13'));var logger=require(_0x1d69('0x14'))(_0x1d69('0x15'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x1d69('0x16'))['db'];config[_0x1d69('0x17')]=_[_0x1d69('0x18')](config[_0x1d69('0x17')],{'host':_0x1d69('0x19'),'port':0x18eb});var socket=require(_0x1d69('0x1a'))(new Redis(config[_0x1d69('0x17')]));require(_0x1d69('0x1b'))[_0x1d69('0x1c')](socket);function respondWithStatusCode(_0x7121cb,_0x292721){_0x292721=_0x292721||0xcc;return function(_0x1f4271){if(_0x1f4271){return _0x7121cb[_0x1d69('0x1d')](_0x292721);}return _0x7121cb['status'](_0x292721)['end']();};}function respondWithResult(_0x12e7cd,_0x3fb5d2){_0x3fb5d2=_0x3fb5d2||0xc8;return function(_0x29dd32){if(_0x29dd32){return _0x12e7cd[_0x1d69('0x1e')](_0x3fb5d2)[_0x1d69('0x1f')](_0x29dd32);}};}function respondWithFilteredResult(_0x383771,_0x5af8c6){return function(_0xb7f031){if(_0xb7f031){var _0xcf076b=_0xb7f031[_0x1d69('0x20')],_0x34f6d4=_0x5af8c6[_0x1d69('0x21')],_0x53915f=_0x5af8c6[_0x1d69('0x21')]+_0x5af8c6['limit'],_0x4cebea;if(_0x53915f>=_0xcf076b){_0x53915f=_0xcf076b;_0x4cebea=0xc8;}else{_0x4cebea=0xce;}_0x383771[_0x1d69('0x1e')](_0x4cebea);return _0x383771[_0x1d69('0x22')](_0x1d69('0x23'),_0x34f6d4+'-'+_0x53915f+'/'+_0xcf076b)[_0x1d69('0x1f')](_0xb7f031);}return null;};}function patchUpdates(_0x3ef4dc){return function(_0x24feaa){try{jsonpatch[_0x1d69('0x24')](_0x24feaa,_0x3ef4dc,!![]);}catch(_0x62968f){return BPromise['reject'](_0x62968f);}return _0x24feaa[_0x1d69('0x25')]();};}function saveUpdates(_0x122238,_0x1786e1){return function(_0x228d18){if(_0x228d18){return _0x228d18['update'](_0x122238)[_0x1d69('0x26')](function(_0x411ca0){return _0x411ca0;});}return null;};}function removeEntity(_0x2b9a7a,_0x54783d){return function(_0x5352d3){if(_0x5352d3){return _0x5352d3['destroy']()[_0x1d69('0x26')](function(){var _0x1d9b42=_0x5352d3[_0x1d69('0x27')]({'plain':!![]});var _0x1c91bf=[{'name':'VoiceQueues','value':_0x1d69('0x28'),'ignore':![]},{'name':_0x1d69('0x29'),'value':'outbound','ignore':![]}];var _0x377913=_(_0x1c91bf)[_0x1d69('0x2a')](_0x1d69('0x2b'))[_0x1d69('0x2c')](_0x1d69('0x2d'))[_0x1d69('0x2d')]();if(_['includes'](_0x377913,_0x1d9b42[_0x1d69('0x2e')])){return;}var _0x2c837e=_[_0x1d69('0x2f')](_0x1c91bf,[_0x1d69('0x2d'),_0x1d9b42[_0x1d69('0x2e')]])[_0x1d69('0x30')];return db[_0x1d69('0x31')][_0x1d69('0x32')]({'where':{'type':_0x2c837e,'resourceId':_0x1d9b42['id']}})[_0x1d69('0x26')](function(){return _0x5352d3;});})[_0x1d69('0x26')](function(){_0x2b9a7a[_0x1d69('0x1e')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3affc9,_0x5bbbe3){return function(_0xed55d9){if(!_0xed55d9){_0x3affc9[_0x1d69('0x1d')](0x194);}return _0xed55d9;};}function handleError(_0x22d10f,_0x443a1b){_0x443a1b=_0x443a1b||0x1f4;return function(_0x582da2){logger['error'](_0x582da2[_0x1d69('0x33')]);if(_0x582da2['name']){delete _0x582da2[_0x1d69('0x30')];}_0x22d10f[_0x1d69('0x1e')](_0x443a1b)[_0x1d69('0x34')](_0x582da2);};}exports[_0x1d69('0x35')]=function(_0x235e3f,_0x33f283){var _0x2567ef={},_0x1894d9={},_0x527ddb={'count':0x0,'rows':[]};var _0x425a1a=db[_0x1d69('0x36')][_0x1d69('0x37')];_0x1894d9[_0x1d69('0x38')]=_[_0x1d69('0x39')](_0x425a1a);_0x1894d9['query']=_[_0x1d69('0x39')](_0x235e3f[_0x1d69('0x3a')]);_0x1894d9[_0x1d69('0x3b')]=_[_0x1d69('0x3c')](_0x1894d9[_0x1d69('0x38')],_0x1894d9['query']);_0x2567ef[_0x1d69('0x3d')]=_[_0x1d69('0x3c')](_0x1894d9[_0x1d69('0x38')],qs[_0x1d69('0x3e')](_0x235e3f['query'][_0x1d69('0x3e')]));_0x2567ef[_0x1d69('0x3d')]=_0x2567ef[_0x1d69('0x3d')][_0x1d69('0x3f')]?_0x2567ef[_0x1d69('0x3d')]:_0x1894d9['model'];if(!_0x235e3f['query']['hasOwnProperty'](_0x1d69('0x40'))){_0x2567ef[_0x1d69('0x41')]=qs['limit'](_0x235e3f[_0x1d69('0x3a')][_0x1d69('0x41')]);_0x2567ef[_0x1d69('0x21')]=qs['offset'](_0x235e3f[_0x1d69('0x3a')][_0x1d69('0x21')]);}_0x2567ef[_0x1d69('0x42')]=qs[_0x1d69('0x43')](_0x235e3f['query'][_0x1d69('0x43')]);_0x2567ef[_0x1d69('0x44')]=qs[_0x1d69('0x3b')](_[_0x1d69('0x45')](_0x235e3f['query'],_0x1894d9[_0x1d69('0x3b')]));if(_0x235e3f[_0x1d69('0x3a')][_0x1d69('0x2a')]){_0x2567ef[_0x1d69('0x44')]=_[_0x1d69('0x46')](_0x2567ef[_0x1d69('0x44')],{'$or':_[_0x1d69('0x2c')](_0x425a1a,function(_0x4b5664){if(_0x4b5664[_0x1d69('0x2e')][_0x1d69('0x47')]!=='VIRTUAL'){var _0x3d68c3={};_0x3d68c3[_0x4b5664['field']]={'$like':'%'+_0x235e3f[_0x1d69('0x3a')][_0x1d69('0x2a')]+'%'};return _0x3d68c3;}})});}_0x2567ef=_[_0x1d69('0x46')]({},_0x2567ef,_0x235e3f[_0x1d69('0x48')]);var _0x5b0a74={'where':_0x2567ef[_0x1d69('0x44')]};return db[_0x1d69('0x36')][_0x1d69('0x20')](_0x5b0a74)['then'](function(_0x2c1f62){_0x527ddb['count']=_0x2c1f62;if(_0x235e3f['query'][_0x1d69('0x49')]){_0x2567ef[_0x1d69('0x4a')]=[{'all':!![]}];}return db['VoiceQueue'][_0x1d69('0x4b')](_0x2567ef);})['then'](function(_0x133cbf){_0x527ddb[_0x1d69('0x4c')]=_0x133cbf;return _0x527ddb;})['then'](respondWithFilteredResult(_0x33f283,_0x2567ef))[_0x1d69('0x4d')](handleError(_0x33f283,null));};exports[_0x1d69('0x4e')]=function(_0x92e47a,_0x555dd2){var _0x246112={'raw':![],'where':{'id':_0x92e47a[_0x1d69('0x4f')]['id']}},_0x354e86={};_0x354e86[_0x1d69('0x38')]=_[_0x1d69('0x39')](db[_0x1d69('0x36')][_0x1d69('0x37')]);_0x354e86[_0x1d69('0x3a')]=_[_0x1d69('0x39')](_0x92e47a[_0x1d69('0x3a')]);_0x354e86[_0x1d69('0x3b')]=_[_0x1d69('0x3c')](_0x354e86[_0x1d69('0x38')],_0x354e86[_0x1d69('0x3a')]);_0x246112[_0x1d69('0x3d')]=_[_0x1d69('0x3c')](_0x354e86['model'],qs[_0x1d69('0x3e')](_0x92e47a[_0x1d69('0x3a')][_0x1d69('0x3e')]));_0x246112['attributes']=_0x246112['attributes'][_0x1d69('0x3f')]?_0x246112['attributes']:_0x354e86[_0x1d69('0x38')];if(_0x92e47a[_0x1d69('0x3a')][_0x1d69('0x49')]){_0x246112['include']=[{'all':!![]}];}_0x246112=_['merge']({},_0x246112,_0x92e47a[_0x1d69('0x48')]);return db['VoiceQueue'][_0x1d69('0x2f')](_0x246112)['then'](handleEntityNotFound(_0x555dd2,null))['then'](respondWithResult(_0x555dd2,null))[_0x1d69('0x4d')](handleError(_0x555dd2,null));};exports[_0x1d69('0x50')]=function(_0x3ea61c,_0xe3c94c){return db[_0x1d69('0x36')][_0x1d69('0x50')](_0x3ea61c[_0x1d69('0x51')],{})[_0x1d69('0x26')](function(_0x47d85a){var _0x28bb7b=_0x3ea61c[_0x1d69('0x52')][_0x1d69('0x27')]({'plain':!![]});if(!_0x28bb7b)throw new Error(_0x1d69('0x53'));if(_0x28bb7b['role']===_0x1d69('0x52')){var _0x5a4e1c=_0x47d85a[_0x1d69('0x27')]({'plain':!![]});var _0x321e38=[{'name':_0x1d69('0x54'),'value':'inbound'},{'name':_0x1d69('0x29'),'value':'outbound'}];var _0x2d90ec=_[_0x1d69('0x2f')](_0x321e38,[_0x1d69('0x2d'),_0x5a4e1c['type']])[_0x1d69('0x30')];return db['UserProfileSection'][_0x1d69('0x2f')]({'where':{'name':_0x2d90ec,'userProfileId':_0x28bb7b[_0x1d69('0x55')]},'raw':!![]})[_0x1d69('0x26')](function(_0x465794){if(_0x465794&&_0x465794[_0x1d69('0x56')]===0x0){return db[_0x1d69('0x31')][_0x1d69('0x50')]({'name':_0x5a4e1c[_0x1d69('0x30')],'resourceId':_0x5a4e1c['id'],'type':_0x465794[_0x1d69('0x30')],'sectionId':_0x465794['id']},{})[_0x1d69('0x26')](function(){return _0x47d85a;});}else{return _0x47d85a;}})[_0x1d69('0x4d')](function(_0xfc58ef){logger[_0x1d69('0x57')](_0x1d69('0x58'),_0xfc58ef);throw _0xfc58ef;});}return _0x47d85a;})[_0x1d69('0x26')](respondWithResult(_0xe3c94c,0xc9))[_0x1d69('0x4d')](handleError(_0xe3c94c,null));};exports[_0x1d69('0x59')]=function(_0x57a940,_0x2d2a7f){var _0x21f972={'raw':![],'where':{'id':_0x57a940[_0x1d69('0x4f')]['id']}},_0x568410={};_0x568410['model']=_[_0x1d69('0x39')](db[_0x1d69('0x36')]['rawAttributes']);_0x21f972['attributes']=_[_0x1d69('0x3c')](_0x568410[_0x1d69('0x38')],qs[_0x1d69('0x3e')](_0x57a940[_0x1d69('0x3a')]['fields']));_0x21f972[_0x1d69('0x3d')]=_0x21f972[_0x1d69('0x3d')][_0x1d69('0x3f')]?_0x21f972[_0x1d69('0x3d')]:_0x568410[_0x1d69('0x38')];if(_0x57a940[_0x1d69('0x3a')][_0x1d69('0x49')]){_0x21f972[_0x1d69('0x4a')]=[{'all':!![]}];}_0x21f972=_[_0x1d69('0x46')]({},_0x21f972,_0x57a940[_0x1d69('0x48')]);return db[_0x1d69('0x36')][_0x1d69('0x2f')](_0x21f972)[_0x1d69('0x26')](handleEntityNotFound(_0x2d2a7f,null))['then'](function(_0x3a9137){if(_0x3a9137){var _0x3ba00c=_0x3a9137[_0x1d69('0x27')]({'plain':!![]});_0x3ba00c=qs['omit'](_0x3ba00c,['id',_0x1d69('0x5a'),_0x1d69('0x5b')]);_0x57a940[_0x1d69('0x51')]=_[_0x1d69('0x5c')](_0x57a940[_0x1d69('0x51')],['id',_0x1d69('0x5a'),_0x1d69('0x5b')]);return db[_0x1d69('0x36')][_0x1d69('0x50')](_[_0x1d69('0x46')](_0x3ba00c,_0x57a940[_0x1d69('0x51')]),{'include':_0x57a940[_0x1d69('0x3a')][_0x1d69('0x49')]?[{'all':!![]}]:undefined})[_0x1d69('0x26')](function(_0x1a4a26){var _0x49ac5b=_0x57a940[_0x1d69('0x52')][_0x1d69('0x27')]({'plain':!![]});if(!_0x49ac5b)throw new Error(_0x1d69('0x53'));if(_0x49ac5b[_0x1d69('0x5d')]===_0x1d69('0x52')){var _0x57a6e7=_0x1a4a26[_0x1d69('0x27')]({'plain':!![]});var _0x122aab=[{'name':_0x1d69('0x54'),'value':'inbound'},{'name':_0x1d69('0x29'),'value':_0x1d69('0x5e')}];var _0x2e34bc=_['find'](_0x122aab,[_0x1d69('0x2d'),_0x57a6e7[_0x1d69('0x2e')]])['name'];return db[_0x1d69('0x5f')]['find']({'where':{'name':_0x2e34bc,'userProfileId':_0x49ac5b['userProfileId']},'raw':!![]})[_0x1d69('0x26')](function(_0x53204c){if(_0x53204c&&_0x53204c[_0x1d69('0x56')]===0x0){return db['UserProfileResource'][_0x1d69('0x50')]({'name':_0x57a6e7[_0x1d69('0x30')],'resourceId':_0x57a6e7['id'],'type':_0x53204c[_0x1d69('0x30')],'sectionId':_0x53204c['id']},{})[_0x1d69('0x26')](function(){return _0x1a4a26;});}else{return _0x1a4a26;}})[_0x1d69('0x4d')](function(_0x3ee570){logger['error'](_0x1d69('0x58'),_0x3ee570);throw _0x3ee570;});}return _0x1a4a26;});}})['then'](respondWithResult(_0x2d2a7f,0xc9))[_0x1d69('0x4d')](handleError(_0x2d2a7f,null));};exports[_0x1d69('0x60')]=function(_0x3afaea,_0x3ebc6e){if(_0x3afaea[_0x1d69('0x51')]['id']){delete _0x3afaea[_0x1d69('0x51')]['id'];}return db[_0x1d69('0x36')][_0x1d69('0x2f')]({'where':{'id':_0x3afaea['params']['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x3ebc6e,null))[_0x1d69('0x26')](saveUpdates(_0x3afaea[_0x1d69('0x51')],null))[_0x1d69('0x26')](respondWithResult(_0x3ebc6e,null))[_0x1d69('0x4d')](handleError(_0x3ebc6e,null));};exports['destroy']=function(_0x1b8242,_0x330bb2){return db[_0x1d69('0x36')][_0x1d69('0x2f')]({'where':{'id':_0x1b8242[_0x1d69('0x4f')]['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x330bb2,null))[_0x1d69('0x26')](removeEntity(_0x330bb2,null))['catch'](handleError(_0x330bb2,null));};exports[_0x1d69('0x61')]=function(_0x29941f,_0x4edd8c,_0x1b179d){var _0xc3814f={'raw':![],'where':{}};var _0x1ccf78={};var _0x4d5d29={'count':0x0,'rows':[]};return db['VoiceQueue'][_0x1d69('0x62')]({'where':{'id':_0x29941f['params']['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x4edd8c,null))[_0x1d69('0x26')](function(_0x539eab){if(_0x539eab){_0x1ccf78[_0x1d69('0x38')]=_[_0x1d69('0x39')](db['CmHopper'][_0x1d69('0x37')]);_0x1ccf78[_0x1d69('0x3a')]=_['keys'](_0x29941f[_0x1d69('0x3a')]);_0x1ccf78['filters']=_[_0x1d69('0x3c')](_0x1ccf78['model'],_0x1ccf78[_0x1d69('0x3a')]);_0xc3814f['attributes']=_['intersection'](_0x1ccf78[_0x1d69('0x38')],qs[_0x1d69('0x3e')](_0x29941f['query'][_0x1d69('0x3e')]));_0xc3814f[_0x1d69('0x3d')]=_0xc3814f['attributes'][_0x1d69('0x3f')]?_0xc3814f['attributes']:_0x1ccf78[_0x1d69('0x38')];if(!_0x29941f[_0x1d69('0x3a')]['hasOwnProperty'](_0x1d69('0x40'))){_0xc3814f[_0x1d69('0x41')]=qs[_0x1d69('0x41')](_0x29941f[_0x1d69('0x3a')][_0x1d69('0x41')]);_0xc3814f[_0x1d69('0x21')]=qs[_0x1d69('0x21')](_0x29941f['query'][_0x1d69('0x21')]);}_0xc3814f['order']=qs[_0x1d69('0x43')](_0x29941f['query'][_0x1d69('0x43')]);_0xc3814f[_0x1d69('0x44')]=qs[_0x1d69('0x3b')](_['pick'](_0x29941f[_0x1d69('0x3a')],_0x1ccf78[_0x1d69('0x3b')]));_0xc3814f['where'][_0x1d69('0x63')]=_0x539eab['id'];if(_0x29941f['query'][_0x1d69('0x2a')]){_0xc3814f[_0x1d69('0x44')]=_[_0x1d69('0x46')](_0xc3814f[_0x1d69('0x44')],{'$or':_[_0x1d69('0x2c')](_0xc3814f[_0x1d69('0x3d')],function(_0x1a1091){var _0x434efb={};_0x434efb[_0x1a1091]={'$like':'%'+_0x29941f[_0x1d69('0x3a')][_0x1d69('0x2a')]+'%'};return _0x434efb;})});}_0xc3814f=_[_0x1d69('0x46')]({},_0xc3814f,_0x29941f[_0x1d69('0x48')]);return db[_0x1d69('0x64')][_0x1d69('0x20')]({'where':_0xc3814f[_0x1d69('0x44')]})[_0x1d69('0x26')](function(_0x48befc){_0x4d5d29[_0x1d69('0x20')]=_0x48befc;if(_0x29941f['query'][_0x1d69('0x49')]){_0xc3814f[_0x1d69('0x4a')]=[{'all':!![]}];}return db[_0x1d69('0x64')][_0x1d69('0x4b')](_0xc3814f);})[_0x1d69('0x26')](function(_0x25c568){_0x4d5d29[_0x1d69('0x4c')]=_0x25c568;return _0x4d5d29;});}})['then'](respondWithFilteredResult(_0x4edd8c,_0xc3814f))[_0x1d69('0x4d')](handleError(_0x4edd8c,null));};exports['getHopperHistories']=function(_0x3d4967,_0x286f56,_0x1fb525){var _0x22f77f={'raw':!![],'where':{}};var _0x2cd079={};var _0x5d196a={'count':0x0,'rows':[]};return db[_0x1d69('0x36')][_0x1d69('0x62')]({'where':{'id':_0x3d4967[_0x1d69('0x4f')]['id']}})['then'](handleEntityNotFound(_0x286f56,null))['then'](function(_0x433d96){if(_0x433d96){_0x2cd079[_0x1d69('0x38')]=_[_0x1d69('0x39')](db[_0x1d69('0x65')][_0x1d69('0x37')]);_0x2cd079[_0x1d69('0x3a')]=_[_0x1d69('0x39')](_0x3d4967[_0x1d69('0x3a')]);_0x2cd079[_0x1d69('0x3b')]=_['intersection'](_0x2cd079[_0x1d69('0x38')],_0x2cd079['query']);_0x22f77f[_0x1d69('0x3d')]=_['intersection'](_0x2cd079[_0x1d69('0x38')],qs[_0x1d69('0x3e')](_0x3d4967[_0x1d69('0x3a')][_0x1d69('0x3e')]));_0x22f77f['attributes']=_0x22f77f[_0x1d69('0x3d')][_0x1d69('0x3f')]?_0x22f77f[_0x1d69('0x3d')]:_0x2cd079[_0x1d69('0x38')];if(!_0x3d4967[_0x1d69('0x3a')][_0x1d69('0x66')](_0x1d69('0x40'))){_0x22f77f[_0x1d69('0x41')]=qs[_0x1d69('0x41')](_0x3d4967[_0x1d69('0x3a')][_0x1d69('0x41')]);_0x22f77f[_0x1d69('0x21')]=qs[_0x1d69('0x21')](_0x3d4967[_0x1d69('0x3a')]['offset']);}_0x22f77f[_0x1d69('0x42')]=qs[_0x1d69('0x43')](_0x3d4967[_0x1d69('0x3a')][_0x1d69('0x43')]);_0x22f77f[_0x1d69('0x44')]=qs[_0x1d69('0x3b')](_[_0x1d69('0x45')](_0x3d4967['query'],_0x2cd079[_0x1d69('0x3b')]));_0x22f77f[_0x1d69('0x44')][_0x1d69('0x63')]=_0x433d96['id'];if(_0x3d4967[_0x1d69('0x3a')][_0x1d69('0x2a')]){_0x22f77f[_0x1d69('0x44')]=_['merge'](_0x22f77f['where'],{'$or':_[_0x1d69('0x2c')](_0x22f77f[_0x1d69('0x3d')],function(_0x202403){var _0x1a68a1={};_0x1a68a1[_0x202403]={'$like':'%'+_0x3d4967[_0x1d69('0x3a')][_0x1d69('0x2a')]+'%'};return _0x1a68a1;})});}_0x22f77f=_['merge']({},_0x22f77f,_0x3d4967[_0x1d69('0x48')]);return db[_0x1d69('0x65')]['count']({'where':_0x22f77f[_0x1d69('0x44')]})['then'](function(_0x4818d1){_0x5d196a[_0x1d69('0x20')]=_0x4818d1;if(_0x3d4967[_0x1d69('0x3a')][_0x1d69('0x49')]){_0x22f77f[_0x1d69('0x4a')]=[{'all':!![]}];}return db[_0x1d69('0x65')][_0x1d69('0x4b')](_0x22f77f);})[_0x1d69('0x26')](function(_0x4aecd6){_0x5d196a['rows']=_0x4aecd6;return _0x5d196a;});}})[_0x1d69('0x26')](respondWithFilteredResult(_0x286f56,_0x22f77f))[_0x1d69('0x4d')](handleError(_0x286f56,null));};exports[_0x1d69('0x67')]=function(_0x604382,_0x2929f3,_0x10e89){var _0x225a85={'raw':!![],'where':{}};var _0x49fc80={};var _0x44bbcb={'count':0x0,'rows':[]};return db[_0x1d69('0x36')][_0x1d69('0x62')]({'where':{'id':_0x604382['params']['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x2929f3,null))[_0x1d69('0x26')](function(_0x3390d2){if(_0x3390d2){_0x49fc80[_0x1d69('0x38')]=_[_0x1d69('0x39')](db[_0x1d69('0x68')]['rawAttributes']);_0x49fc80[_0x1d69('0x3a')]=_[_0x1d69('0x39')](_0x604382[_0x1d69('0x3a')]);_0x49fc80[_0x1d69('0x3b')]=_[_0x1d69('0x3c')](_0x49fc80[_0x1d69('0x38')],_0x49fc80[_0x1d69('0x3a')]);_0x225a85['attributes']=_[_0x1d69('0x3c')](_0x49fc80[_0x1d69('0x38')],qs['fields'](_0x604382[_0x1d69('0x3a')][_0x1d69('0x3e')]));_0x225a85[_0x1d69('0x3d')]=_0x225a85[_0x1d69('0x3d')][_0x1d69('0x3f')]?_0x225a85['attributes']:_0x49fc80[_0x1d69('0x38')];if(!_0x604382[_0x1d69('0x3a')][_0x1d69('0x66')]('nolimit')){_0x225a85[_0x1d69('0x41')]=qs[_0x1d69('0x41')](_0x604382[_0x1d69('0x3a')][_0x1d69('0x41')]);_0x225a85[_0x1d69('0x21')]=qs['offset'](_0x604382[_0x1d69('0x3a')][_0x1d69('0x21')]);}_0x225a85[_0x1d69('0x42')]=qs['sort'](_0x604382[_0x1d69('0x3a')][_0x1d69('0x43')]);_0x225a85[_0x1d69('0x44')]=qs[_0x1d69('0x3b')](_[_0x1d69('0x45')](_0x604382[_0x1d69('0x3a')],_0x49fc80[_0x1d69('0x3b')]));_0x225a85['where'][_0x1d69('0x63')]=_0x3390d2['id'];if(_0x604382[_0x1d69('0x3a')][_0x1d69('0x2a')]){_0x225a85[_0x1d69('0x44')]=_[_0x1d69('0x46')](_0x225a85['where'],{'$or':_[_0x1d69('0x2c')](_0x225a85[_0x1d69('0x3d')],function(_0x54d83a){var _0x5294d5={};_0x5294d5[_0x54d83a]={'$like':'%'+_0x604382[_0x1d69('0x3a')]['filter']+'%'};return _0x5294d5;})});}_0x225a85=_['merge']({},_0x225a85,_0x604382[_0x1d69('0x48')]);return db[_0x1d69('0x68')][_0x1d69('0x20')]({'where':_0x225a85['where']})[_0x1d69('0x26')](function(_0x3c6730){_0x44bbcb['count']=_0x3c6730;if(_0x604382[_0x1d69('0x3a')][_0x1d69('0x49')]){_0x225a85[_0x1d69('0x4a')]=[{'all':!![]}];}return db[_0x1d69('0x68')][_0x1d69('0x4b')](_0x225a85);})[_0x1d69('0x26')](function(_0x2a0666){_0x44bbcb['rows']=_0x2a0666;return _0x44bbcb;});}})[_0x1d69('0x26')](respondWithFilteredResult(_0x2929f3,_0x225a85))['catch'](handleError(_0x2929f3,null));};exports[_0x1d69('0x69')]=function(_0x1765a1,_0x4c0219,_0x44a36b){var _0x322392={'raw':!![],'where':{}};var _0x4e8407={};var _0x427f75={'count':0x0,'rows':[]};return db[_0x1d69('0x36')][_0x1d69('0x62')]({'where':{'id':_0x1765a1[_0x1d69('0x4f')]['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x4c0219,null))[_0x1d69('0x26')](function(_0x4098f8){if(_0x4098f8){_0x4e8407[_0x1d69('0x38')]=_['keys'](db[_0x1d69('0x6a')]['rawAttributes']);_0x4e8407[_0x1d69('0x3a')]=_['keys'](_0x1765a1[_0x1d69('0x3a')]);_0x4e8407['filters']=_['intersection'](_0x4e8407[_0x1d69('0x38')],_0x4e8407[_0x1d69('0x3a')]);_0x322392['attributes']=_[_0x1d69('0x3c')](_0x4e8407[_0x1d69('0x38')],qs[_0x1d69('0x3e')](_0x1765a1['query'][_0x1d69('0x3e')]));_0x322392['attributes']=_0x322392[_0x1d69('0x3d')]['length']?_0x322392[_0x1d69('0x3d')]:_0x4e8407[_0x1d69('0x38')];if(!_0x1765a1[_0x1d69('0x3a')][_0x1d69('0x66')](_0x1d69('0x40'))){_0x322392['limit']=qs[_0x1d69('0x41')](_0x1765a1[_0x1d69('0x3a')][_0x1d69('0x41')]);_0x322392[_0x1d69('0x21')]=qs[_0x1d69('0x21')](_0x1765a1[_0x1d69('0x3a')][_0x1d69('0x21')]);}_0x322392[_0x1d69('0x42')]=qs['sort'](_0x1765a1[_0x1d69('0x3a')][_0x1d69('0x43')]);_0x322392[_0x1d69('0x44')]=qs[_0x1d69('0x3b')](_[_0x1d69('0x45')](_0x1765a1['query'],_0x4e8407[_0x1d69('0x3b')]));_0x322392[_0x1d69('0x44')][_0x1d69('0x63')]=_0x4098f8['id'];if(_0x1765a1[_0x1d69('0x3a')][_0x1d69('0x2a')]){_0x322392[_0x1d69('0x44')]=_[_0x1d69('0x46')](_0x322392[_0x1d69('0x44')],{'$or':_['map'](_0x322392[_0x1d69('0x3d')],function(_0x6cc84c){var _0xd3ac0c={};_0xd3ac0c[_0x6cc84c]={'$like':'%'+_0x1765a1[_0x1d69('0x3a')][_0x1d69('0x2a')]+'%'};return _0xd3ac0c;})});}_0x322392=_[_0x1d69('0x46')]({},_0x322392,_0x1765a1['options']);return db[_0x1d69('0x6a')][_0x1d69('0x20')]({'where':_0x322392[_0x1d69('0x44')]})['then'](function(_0x37aef4){_0x427f75[_0x1d69('0x20')]=_0x37aef4;if(_0x1765a1[_0x1d69('0x3a')]['includeAll']){_0x322392['include']=[{'all':!![]}];}return db[_0x1d69('0x6a')]['findAll'](_0x322392);})[_0x1d69('0x26')](function(_0x1f459a){_0x427f75['rows']=_0x1f459a;return _0x427f75;});}})[_0x1d69('0x26')](respondWithFilteredResult(_0x4c0219,_0x322392))[_0x1d69('0x4d')](handleError(_0x4c0219,null));};exports['getTeams']=function(_0x455362,_0x5127fb,_0x4b79e4){var _0x2abcd2={};var _0x278497={};var _0x456812;var _0x41ce72;return db[_0x1d69('0x36')][_0x1d69('0x62')]({'where':{'id':_0x455362['params']['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x5127fb,null))[_0x1d69('0x26')](function(_0x46e22e){if(_0x46e22e){_0x456812=_0x46e22e;_0x278497[_0x1d69('0x38')]=_[_0x1d69('0x39')](db['Team'][_0x1d69('0x37')]);_0x278497[_0x1d69('0x3a')]=_[_0x1d69('0x39')](_0x455362[_0x1d69('0x3a')]);_0x278497['filters']=_['intersection'](_0x278497[_0x1d69('0x38')],_0x278497[_0x1d69('0x3a')]);_0x2abcd2[_0x1d69('0x3d')]=_['intersection'](_0x278497['model'],qs[_0x1d69('0x3e')](_0x455362[_0x1d69('0x3a')][_0x1d69('0x3e')]));_0x2abcd2['attributes']=_0x2abcd2[_0x1d69('0x3d')][_0x1d69('0x3f')]?_0x2abcd2['attributes']:_0x278497[_0x1d69('0x38')];_0x2abcd2[_0x1d69('0x42')]=qs['sort'](_0x455362[_0x1d69('0x3a')][_0x1d69('0x43')]);_0x2abcd2[_0x1d69('0x44')]=qs[_0x1d69('0x3b')](_[_0x1d69('0x45')](_0x455362['query'],_0x278497[_0x1d69('0x3b')]));if(_0x455362[_0x1d69('0x3a')][_0x1d69('0x2a')]){_0x2abcd2[_0x1d69('0x44')]=_[_0x1d69('0x46')](_0x2abcd2[_0x1d69('0x44')],{'$or':_[_0x1d69('0x2c')](_0x2abcd2['attributes'],function(_0x3aef06){var _0x53e252={};_0x53e252[_0x3aef06]={'$like':'%'+_0x455362[_0x1d69('0x3a')]['filter']+'%'};return _0x53e252;})});}_0x2abcd2=_[_0x1d69('0x46')]({},_0x2abcd2,_0x455362[_0x1d69('0x48')]);return _0x456812['getTeams'](_0x2abcd2);}})['then'](function(_0x4621bd){if(_0x4621bd){_0x41ce72=_0x4621bd['length'];if(!_0x455362['query']['hasOwnProperty']('nolimit')){_0x2abcd2[_0x1d69('0x41')]=qs[_0x1d69('0x41')](_0x455362['query'][_0x1d69('0x41')]);_0x2abcd2[_0x1d69('0x21')]=qs[_0x1d69('0x21')](_0x455362[_0x1d69('0x3a')][_0x1d69('0x21')]);}return _0x456812[_0x1d69('0x6b')](_0x2abcd2);}})[_0x1d69('0x26')](function(_0x25b772){if(_0x25b772){return _0x25b772?{'count':_0x41ce72,'rows':_0x25b772}:null;}})['then'](respondWithResult(_0x5127fb,null))[_0x1d69('0x4d')](handleError(_0x5127fb,null));};exports[_0x1d69('0x6c')]=function(_0x4c1f43,_0x5b80fe,_0x35148b){var _0x37ab22=_0x4c1f43[_0x1d69('0x51')][_0x1d69('0x6d')];return db[_0x1d69('0x6e')]['findAll']({'where':{'id':_[_0x1d69('0x2c')](_0x37ab22,'id')},'attributes':['id'],'include':[{'model':db[_0x1d69('0x6f')],'as':_0x1d69('0x70'),'attributes':['id',_0x1d69('0x30'),_0x1d69('0x71'),_0x1d69('0x72'),_0x1d69('0x73')],'raw':!![]}]})[_0x1d69('0x26')](function(_0x37a019){if(_0x37a019){var _0x13ca98=_['flatMap'](_0x37a019,function(_0x5b9f9e){var _0x3de20c=_0x5b9f9e[_0x1d69('0x27')]({'plain':!![]});_0x3de20c[_0x1d69('0x70')]['forEach'](function(_0x51682b){_0x51682b[_0x1d69('0x74')]=_['find'](_0x37ab22,{'id':_0x3de20c['id']})[_0x1d69('0x74')];});return _0x3de20c[_0x1d69('0x70')];});return db[_0x1d69('0x36')]['find']({'where':{'id':_0x4c1f43['params']['id']}})[_0x1d69('0x26')](function(_0x4336d0){return db['sequelize']['transaction'](function(_0x39bf3f){return _0x4336d0[_0x1d69('0x6c')](_[_0x1d69('0x2c')](_0x37ab22,'id'),{'transaction':_0x39bf3f})[_0x1d69('0x26')](function(){return BPromise[_0x1d69('0x75')](_0x13ca98,function(_0x38e8d4){return db[_0x1d69('0x76')][_0x1d69('0x77')]({'where':{'UserId':_0x38e8d4['id'],'VoiceQueueId':_0x4c1f43['params']['id']},'defaults':{'penalty':_0x38e8d4[_0x1d69('0x74')]},'transaction':_0x39bf3f});});})[_0x1d69('0x26')](function(){return BPromise['each'](_[_0x1d69('0x2a')](_0x13ca98,{'online':!![]}),function(_0xa7a68c){return db[_0x1d69('0x78')]['upsert']({'membername':_0xa7a68c[_0x1d69('0x30')],'UserId':_0xa7a68c['id'],'queue_name':_0x4336d0[_0x1d69('0x30')],'VoiceQueueId':_0x4336d0['id'],'interface':_['isNil'](_0xa7a68c[_0x1d69('0x73')])?util[_0x1d69('0x79')](_0x1d69('0x7a'),_0xa7a68c[_0x1d69('0x30')]):_0xa7a68c[_0x1d69('0x73')],'paused':_0xa7a68c['voicePause']||![],'penalty':_0xa7a68c[_0x1d69('0x74')]},{'transaction':_0x39bf3f});});})[_0x1d69('0x26')](function(){_0x13ca98['forEach'](function(_0x36f601){socket['emit'](_0x1d69('0x7b'),{'UserId':_0x36f601['id'],'VoiceQueueId':_0x4336d0['id']});});});});});}})[_0x1d69('0x26')](respondWithStatusCode(_0x5b80fe,null))[_0x1d69('0x4d')](handleError(_0x5b80fe,null));};exports['removeTeams']=function(_0x72602a,_0x31add4,_0x9192cd){return db[_0x1d69('0x6e')][_0x1d69('0x4b')]({'where':{'id':_0x72602a[_0x1d69('0x3a')]['ids']},'attributes':['id'],'include':[{'model':db[_0x1d69('0x6f')],'as':_0x1d69('0x70'),'attributes':['id'],'raw':!![]}]})[_0x1d69('0x26')](handleEntityNotFound(_0x31add4,null))[_0x1d69('0x26')](function(_0x27d0ff){var _0x224301=_['map'](_0x27d0ff,'id');var _0x34c3f0=[];var _0x43d75c=[];var _0x49bccb=squel[_0x1d69('0x7c')]();_0x49bccb[_0x1d69('0x7d')]('tq.TeamId')[_0x1d69('0x7e')](_0x1d69('0x7f'),'tq')[_0x1d69('0x80')]('user_has_teams','ut',_0x1d69('0x81'))[_0x1d69('0x44')](_0x1d69('0x82'),_0x72602a[_0x1d69('0x4f')]['id']);for(var _0xe709d=0x0;_0xe709d<_0x27d0ff[_0x1d69('0x3f')];_0xe709d+=0x1){let _0x188e1e=_0x27d0ff[_0xe709d];for(var _0x23b0f6=0x0;_0x23b0f6<_0x188e1e[_0x1d69('0x70')][_0x1d69('0x3f')];_0x23b0f6+=0x1){let _0x7ccb88=_0x188e1e[_0x1d69('0x70')][_0x23b0f6];var _0x4ee061=_0x49bccb['clone']();_0x4ee061[_0x1d69('0x44')](_0x1d69('0x83'),_0x7ccb88['id']);_0x43d75c['push'](db[_0x1d69('0x84')][_0x1d69('0x3a')](_0x4ee061[_0x1d69('0x85')](),{'type':db[_0x1d69('0x84')]['QueryTypes']['SELECT']})[_0x1d69('0x26')](function(_0x205652){if(_0x205652[_0x1d69('0x3f')]===0x1){return _0x7ccb88['id'];}else{var _0x151e39=_[_0x1d69('0x86')](_['map'](_0x205652,_0x1d69('0x87')),function(_0x569905){return _['includes'](_0x224301,_0x569905);});if(_0x151e39){return _0x7ccb88['id'];}}}));}}return BPromise[_0x1d69('0x88')](_0x43d75c)['then'](function(_0x56e55f){_0x34c3f0=_(_0x34c3f0)['union'](_0x56e55f)[_0x1d69('0x89')]()[_0x1d69('0x2d')]();return db[_0x1d69('0x36')][_0x1d69('0x2f')]({'where':{'id':_0x72602a[_0x1d69('0x4f')]['id']}})[_0x1d69('0x26')](function(_0x3cf9a2){return db['sequelize']['transaction'](function(_0x45d11c){return _0x3cf9a2[_0x1d69('0x8a')](_0x72602a[_0x1d69('0x3a')][_0x1d69('0x8b')],{'transaction':_0x45d11c})[_0x1d69('0x26')](function(){if(!_['isEmpty'](_0x34c3f0)){return _0x3cf9a2['removeAgents'](_0x34c3f0,{'transaction':_0x45d11c})[_0x1d69('0x26')](function(){return db[_0x1d69('0x78')]['destroy']({'where':{'VoiceQueueId':_0x72602a[_0x1d69('0x4f')]['id'],'UserId':_0x34c3f0},'transaction':_0x45d11c});});}})[_0x1d69('0x26')](function(){_0x34c3f0[_0x1d69('0x8c')](function(_0x329f0c){socket[_0x1d69('0x8d')](_0x1d69('0x8e'),{'UserId':_0x329f0c,'VoiceQueueId':_0x3cf9a2['id']});});});});});});})['then'](respondWithStatusCode(_0x31add4,null))[_0x1d69('0x4d')](handleError(_0x31add4,null));};exports[_0x1d69('0x8f')]=function(_0x224a8e,_0x4c3d29,_0x463e15){var _0x2c90d8,_0x4f00c8;return db[_0x1d69('0x36')][_0x1d69('0x2f')]({'where':{'id':_0x224a8e[_0x1d69('0x4f')]['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x4c3d29,null))[_0x1d69('0x26')](function(_0x13962f){if(_0x13962f){_0x4f00c8=_0x13962f;return _0x13962f[_0x1d69('0x8f')](_0x224a8e['body']['ids'],_[_0x1d69('0x5c')](_0x224a8e['body'],[_0x1d69('0x8b'),'id'])||{})['spread'](function(_0x2cf63c){for(var _0x3ff9d3=0x0;_0x3ff9d3<_0x224a8e[_0x1d69('0x51')][_0x1d69('0x8b')][_0x1d69('0x3f')];_0x3ff9d3+=0x1){socket['emit'](_0x1d69('0x7b'),{'UserId':_0x224a8e[_0x1d69('0x51')][_0x1d69('0x8b')][_0x3ff9d3],'VoiceQueueId':_0x224a8e[_0x1d69('0x4f')]['id']});}return _0x2cf63c;});}})[_0x1d69('0x26')](function(_0x1d20c0){_0x2c90d8=_0x1d20c0||[];if(_0x4f00c8){return db['User'][_0x1d69('0x4b')]({'where':{'id':_0x224a8e[_0x1d69('0x51')]['ids']},'attributes':['id','name',_0x1d69('0x71'),_0x1d69('0x72'),_0x1d69('0x73')],'raw':!![]});}})[_0x1d69('0x26')](function(_0x1cd357){if(!_[_0x1d69('0x90')](_0x1cd357)){var _0x505652=[];for(var _0x1e3b31=0x0;_0x1e3b31<_0x1cd357[_0x1d69('0x3f')];_0x1e3b31++){if(_0x1cd357[_0x1e3b31][_0x1d69('0x71')]){_0x505652['push'](db[_0x1d69('0x78')][_0x1d69('0x91')]({'membername':_0x1cd357[_0x1e3b31]['name'],'UserId':_0x1cd357[_0x1e3b31]['id'],'queue_name':_0x4f00c8[_0x1d69('0x30')],'VoiceQueueId':_0x4f00c8['id'],'interface':_[_0x1d69('0x92')](_0x1cd357[_0x1e3b31][_0x1d69('0x73')])?util[_0x1d69('0x79')](_0x1d69('0x7a'),_0x1cd357[_0x1e3b31][_0x1d69('0x30')]):_0x1cd357[_0x1e3b31][_0x1d69('0x73')],'paused':_0x1cd357[_0x1e3b31][_0x1d69('0x72')]||![],'penalty':_0x224a8e[_0x1d69('0x51')][_0x1d69('0x74')]||0x0}));}}return BPromise['all'](_0x505652);}})['then'](function(){return _0x2c90d8;})[_0x1d69('0x26')](respondWithResult(_0x4c3d29,null))[_0x1d69('0x4d')](handleError(_0x4c3d29,null));};exports[_0x1d69('0x93')]=function(_0x4f77fc,_0x39b475,_0x5cb617){return db[_0x1d69('0x36')][_0x1d69('0x2f')]({'where':{'id':_0x4f77fc['params']['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x39b475,null))[_0x1d69('0x26')](function(_0x5e80de){if(_0x5e80de){return _0x5e80de[_0x1d69('0x93')](_0x4f77fc['query'][_0x1d69('0x8b')])['then'](function(){if(_[_0x1d69('0x94')](_0x4f77fc[_0x1d69('0x3a')][_0x1d69('0x8b')])){for(var _0x3e78c7=0x0;_0x3e78c7<_0x4f77fc[_0x1d69('0x3a')][_0x1d69('0x8b')]['length'];_0x3e78c7+=0x1){socket['emit'](_0x1d69('0x8e'),{'UserId':Number(_0x4f77fc[_0x1d69('0x3a')]['ids'][_0x3e78c7]),'VoiceQueueId':Number(_0x4f77fc[_0x1d69('0x4f')]['id'])});}}else{socket[_0x1d69('0x8d')](_0x1d69('0x8e'),{'UserId':Number(_0x4f77fc[_0x1d69('0x3a')]['ids']),'VoiceQueueId':Number(_0x4f77fc[_0x1d69('0x4f')]['id'])});}});}})[_0x1d69('0x26')](function(_0x33e636){return db[_0x1d69('0x78')][_0x1d69('0x32')]({'where':{'VoiceQueueId':_0x4f77fc[_0x1d69('0x4f')]['id'],'UserId':_0x4f77fc[_0x1d69('0x3a')]['ids']}})['then'](function(){return _0x33e636;});})[_0x1d69('0x26')](respondWithStatusCode(_0x39b475,null))[_0x1d69('0x4d')](handleError(_0x39b475,null));};exports[_0x1d69('0x95')]=function(_0x5c7ad8,_0x3b8482,_0x3e97c0){var _0x5ddd0f={};var _0x2b9fdd={};var _0x12315a;var _0x20ed78;return db[_0x1d69('0x36')][_0x1d69('0x62')]({'where':{'id':_0x5c7ad8[_0x1d69('0x4f')]['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x3b8482,null))[_0x1d69('0x26')](function(_0xb3a6b5){if(_0xb3a6b5){_0x12315a=_0xb3a6b5;_0x2b9fdd[_0x1d69('0x38')]=_[_0x1d69('0x39')](db['User'][_0x1d69('0x37')]);_0x2b9fdd[_0x1d69('0x3a')]=_[_0x1d69('0x39')](_0x5c7ad8[_0x1d69('0x3a')]);_0x2b9fdd[_0x1d69('0x3b')]=_[_0x1d69('0x3c')](_0x2b9fdd[_0x1d69('0x38')],_0x2b9fdd[_0x1d69('0x3a')]);_0x5ddd0f['attributes']=_[_0x1d69('0x3c')](_0x2b9fdd[_0x1d69('0x38')],qs[_0x1d69('0x3e')](_0x5c7ad8[_0x1d69('0x3a')]['fields']));_0x5ddd0f['attributes']=_0x5ddd0f[_0x1d69('0x3d')][_0x1d69('0x3f')]?_0x5ddd0f['attributes']:_0x2b9fdd[_0x1d69('0x38')];_0x5ddd0f['order']=qs[_0x1d69('0x43')](_0x5c7ad8['query'][_0x1d69('0x43')]);_0x5ddd0f[_0x1d69('0x44')]=qs[_0x1d69('0x3b')](_['pick'](_0x5c7ad8['query'],_0x2b9fdd[_0x1d69('0x3b')]));if(_0x5c7ad8[_0x1d69('0x3a')]['filter']){_0x5ddd0f[_0x1d69('0x44')]=_[_0x1d69('0x46')](_0x5ddd0f[_0x1d69('0x44')],{'$or':_['map'](_0x5ddd0f[_0x1d69('0x3d')],function(_0x5a6151){var _0x3c7099={};_0x3c7099[_0x5a6151]={'$like':'%'+_0x5c7ad8['query'][_0x1d69('0x2a')]+'%'};return _0x3c7099;})});}_0x5ddd0f=_[_0x1d69('0x46')]({},_0x5ddd0f,_0x5c7ad8[_0x1d69('0x48')]);return _0x12315a[_0x1d69('0x95')](_0x5ddd0f);}})[_0x1d69('0x26')](function(_0x2a8ea9){if(_0x2a8ea9){_0x20ed78=_0x2a8ea9[_0x1d69('0x3f')];if(!_0x5c7ad8[_0x1d69('0x3a')][_0x1d69('0x66')]('nolimit')){_0x5ddd0f['limit']=qs['limit'](_0x5c7ad8[_0x1d69('0x3a')][_0x1d69('0x41')]);_0x5ddd0f[_0x1d69('0x21')]=qs[_0x1d69('0x21')](_0x5c7ad8['query'][_0x1d69('0x21')]);}return _0x12315a['getAgents'](_0x5ddd0f);}})['then'](function(_0x5b5def){if(_0x5b5def){return _0x5b5def?{'count':_0x20ed78,'rows':_0x5b5def}:null;}})[_0x1d69('0x26')](respondWithResult(_0x3b8482,null))['catch'](handleError(_0x3b8482,null));};exports[_0x1d69('0x96')]=function(_0xb46892,_0x360c6c,_0x42f667){var _0x540016={};var _0x1b878f={};var _0xcc67df;var _0x466625;return db['VoiceQueue'][_0x1d69('0x62')]({'where':{'id':_0xb46892[_0x1d69('0x4f')]['id']}})['then'](handleEntityNotFound(_0x360c6c,null))[_0x1d69('0x26')](function(_0x319150){if(_0x319150){_0xcc67df=_0x319150;_0x1b878f[_0x1d69('0x38')]=_[_0x1d69('0x39')](db[_0x1d69('0x78')][_0x1d69('0x37')]);_0x1b878f[_0x1d69('0x3a')]=_['keys'](_0xb46892[_0x1d69('0x3a')]);_0x1b878f[_0x1d69('0x3b')]=_[_0x1d69('0x3c')](_0x1b878f[_0x1d69('0x38')],_0x1b878f[_0x1d69('0x3a')]);_0x540016[_0x1d69('0x3d')]=_[_0x1d69('0x3c')](_0x1b878f[_0x1d69('0x38')],qs[_0x1d69('0x3e')](_0xb46892[_0x1d69('0x3a')][_0x1d69('0x3e')]));_0x540016[_0x1d69('0x3d')]=_0x540016[_0x1d69('0x3d')]['length']?_0x540016['attributes']:_0x1b878f[_0x1d69('0x38')];_0x540016['order']=qs[_0x1d69('0x43')](_0xb46892[_0x1d69('0x3a')][_0x1d69('0x43')]);_0x540016[_0x1d69('0x44')]=qs[_0x1d69('0x3b')](_[_0x1d69('0x45')](_0xb46892[_0x1d69('0x3a')],_0x1b878f['filters']));if(_0xb46892[_0x1d69('0x3a')][_0x1d69('0x2a')]){_0x540016[_0x1d69('0x44')]=_['merge'](_0x540016[_0x1d69('0x44')],{'$or':_[_0x1d69('0x2c')](_0x540016[_0x1d69('0x3d')],function(_0x51197f){var _0x3390a4={};_0x3390a4[_0x51197f]={'$like':'%'+_0xb46892[_0x1d69('0x3a')]['filter']+'%'};return _0x3390a4;})});}_0x540016=_[_0x1d69('0x46')]({},_0x540016,_0xb46892[_0x1d69('0x48')]);return _0xcc67df[_0x1d69('0x96')](_0x540016);}})['then'](function(_0x3b3548){if(_0x3b3548){_0x466625=_0x3b3548[_0x1d69('0x3f')];if(!_0xb46892[_0x1d69('0x3a')][_0x1d69('0x66')](_0x1d69('0x40'))){_0x540016['limit']=qs['limit'](_0xb46892[_0x1d69('0x3a')][_0x1d69('0x41')]);_0x540016[_0x1d69('0x21')]=qs[_0x1d69('0x21')](_0xb46892[_0x1d69('0x3a')][_0x1d69('0x21')]);}return _0xcc67df['getMembers'](_0x540016);}})[_0x1d69('0x26')](function(_0x3b66d6){return _0x3b66d6?{'count':_0x466625,'rows':_0x3b66d6}:null;})['then'](respondWithResult(_0x360c6c,null))[_0x1d69('0x4d')](handleError(_0x360c6c,null));};exports[_0x1d69('0x97')]=function(_0x1b97d4,_0x250b96,_0xd1def2){var _0x343b79={};var _0x31dc0c={};var _0x2c7a29;var _0x5d4361;return db[_0x1d69('0x36')][_0x1d69('0x62')]({'where':{'id':_0x1b97d4[_0x1d69('0x4f')]['id']}})['then'](handleEntityNotFound(_0x250b96,null))[_0x1d69('0x26')](function(_0x2b946e){if(_0x2b946e){_0x2c7a29=_0x2b946e;_0x31dc0c[_0x1d69('0x38')]=_[_0x1d69('0x39')](db['CmList'][_0x1d69('0x37')]);_0x31dc0c[_0x1d69('0x3a')]=_['keys'](_0x1b97d4['query']);_0x31dc0c[_0x1d69('0x3b')]=_[_0x1d69('0x3c')](_0x31dc0c[_0x1d69('0x38')],_0x31dc0c[_0x1d69('0x3a')]);_0x343b79[_0x1d69('0x3d')]=_[_0x1d69('0x3c')](_0x31dc0c[_0x1d69('0x38')],qs['fields'](_0x1b97d4[_0x1d69('0x3a')]['fields']));_0x343b79[_0x1d69('0x3d')]=_0x343b79['attributes']['length']?_0x343b79[_0x1d69('0x3d')]:_0x31dc0c[_0x1d69('0x38')];_0x343b79[_0x1d69('0x42')]=qs[_0x1d69('0x43')](_0x1b97d4[_0x1d69('0x3a')]['sort']);_0x343b79[_0x1d69('0x44')]=qs[_0x1d69('0x3b')](_[_0x1d69('0x45')](_0x1b97d4[_0x1d69('0x3a')],_0x31dc0c[_0x1d69('0x3b')]));if(_0x1b97d4[_0x1d69('0x3a')][_0x1d69('0x2a')]){_0x343b79[_0x1d69('0x44')]=_['merge'](_0x343b79[_0x1d69('0x44')],{'$or':_[_0x1d69('0x2c')](_0x343b79[_0x1d69('0x3d')],function(_0x316979){var _0x297bd7={};_0x297bd7[_0x316979]={'$like':'%'+_0x1b97d4[_0x1d69('0x3a')]['filter']+'%'};return _0x297bd7;})});}_0x343b79=_[_0x1d69('0x46')]({},_0x343b79,_0x1b97d4[_0x1d69('0x48')]);return _0x2c7a29[_0x1d69('0x97')](_0x343b79);}})[_0x1d69('0x26')](function(_0x10794e){if(_0x10794e){_0x5d4361=_0x10794e[_0x1d69('0x3f')];if(!_0x1b97d4[_0x1d69('0x3a')][_0x1d69('0x66')]('nolimit')){_0x343b79[_0x1d69('0x41')]=qs[_0x1d69('0x41')](_0x1b97d4[_0x1d69('0x3a')][_0x1d69('0x41')]);_0x343b79[_0x1d69('0x21')]=qs[_0x1d69('0x21')](_0x1b97d4['query'][_0x1d69('0x21')]);}return _0x2c7a29[_0x1d69('0x97')](_0x343b79);}})['then'](function(_0x3ca5e5){if(_0x3ca5e5){return _0x3ca5e5?{'count':_0x5d4361,'rows':_0x3ca5e5}:null;}})[_0x1d69('0x26')](respondWithResult(_0x250b96,null))[_0x1d69('0x4d')](handleError(_0x250b96,null));};exports[_0x1d69('0x98')]=function(_0x29ed93,_0x506d97,_0x51d7c2){var _0x1eb5df,_0x45272f;return db['VoiceQueue'][_0x1d69('0x2f')]({'where':{'id':_0x29ed93['params']['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x506d97,null))[_0x1d69('0x26')](function(_0x28604e){if(_0x28604e){_0x45272f=_0x28604e;return _0x28604e[_0x1d69('0x98')](_0x29ed93[_0x1d69('0x51')][_0x1d69('0x8b')],_['omit'](_0x29ed93[_0x1d69('0x51')],[_0x1d69('0x8b'),'id'])||{});}return null;})['spread'](function(_0x3b4237){var _0x5bbd65;_0x1eb5df=_0x3b4237||[];var _0x4ac110=[];if(_0x3b4237){for(var _0x1fdd9c=0x0;_0x1fdd9c<_0x3b4237['length'];_0x1fdd9c+=0x1){var _0x355563=_0x3b4237[_0x1fdd9c][_0x1d69('0x27')]({'plain':!![]});_0x45272f[_0x1d69('0x99')]=_0x29ed93[_0x1d69('0x51')][_0x1d69('0x99')]?_0x29ed93[_0x1d69('0x51')][_0x1d69('0x99')]:_0x45272f[_0x1d69('0x99')];switch(_0x45272f['dialCheckDuplicateType']){case _0x1d69('0x9a'):_0x5bbd65=squel[_0x1d69('0x9b')]()[_0x1d69('0x9c')](_0x1d69('0x9d'))[_0x1d69('0x9e')]([_0x1d69('0x9f'),_0x1d69('0xa0'),_0x1d69('0xa1'),_0x1d69('0xa2'),_0x1d69('0x63'),'createdAt',_0x1d69('0x5b')],squel[_0x1d69('0x7c')]()['field'](_0x1d69('0x9f'),_0x1d69('0x9f'))[_0x1d69('0x7d')](_0x1d69('0xa3'),_0x1d69('0xa0'))['field']('id','ContactId')[_0x1d69('0x7d')](_0x355563['CmListId'][_0x1d69('0x85')](),_0x1d69('0xa2'))[_0x1d69('0x7d')](_0x29ed93[_0x1d69('0x4f')]['id'][_0x1d69('0x85')](),_0x1d69('0x63'))[_0x1d69('0x7d')](_0x1d69('0xa3'),_0x1d69('0x5a'))[_0x1d69('0x7d')](_0x1d69('0xa3'),'updatedAt')[_0x1d69('0x7e')](_0x1d69('0xa4'))[_0x1d69('0x44')](_0x1d69('0xa5'))['where'](_0x1d69('0xa6'),_0x355563[_0x1d69('0xa7')][_0x1d69('0x85')]())[_0x1d69('0x44')](_0x1d69('0xa8'))[_0x1d69('0x44')](_0x1d69('0xa9'),squel[_0x1d69('0x7c')]()[_0x1d69('0x7d')](_0x1d69('0xaa'))[_0x1d69('0x7e')](_0x1d69('0xab'))['where'](_0x1d69('0x82'),_0x29ed93['params']['id']['toString']()))[_0x1d69('0x44')](_0x1d69('0xa9'),squel['select']()['field'](_0x1d69('0xac'))[_0x1d69('0x7e')](_0x1d69('0x9d'))[_0x1d69('0x44')](_0x1d69('0x82'),_0x29ed93[_0x1d69('0x4f')]['id'][_0x1d69('0x85')]())))[_0x1d69('0x85')]();break;case'onlyIfOpen':_0x5bbd65=squel[_0x1d69('0x9b')]()[_0x1d69('0x9c')](_0x1d69('0x9d'))['fromQuery']([_0x1d69('0x9f'),_0x1d69('0xa0'),'ContactId',_0x1d69('0xa2'),_0x1d69('0x63'),_0x1d69('0x5a'),'updatedAt'],squel[_0x1d69('0x7c')]()[_0x1d69('0x7d')](_0x1d69('0x9f'),'phone')[_0x1d69('0x7d')](_0x1d69('0xa3'),_0x1d69('0xa0'))['field']('id',_0x1d69('0xa1'))['field'](_0x355563['CmListId'][_0x1d69('0x85')](),_0x1d69('0xa2'))[_0x1d69('0x7d')](_0x29ed93[_0x1d69('0x4f')]['id'][_0x1d69('0x85')](),'VoiceQueueId')[_0x1d69('0x7d')](_0x1d69('0xa3'),_0x1d69('0x5a'))['field']('NOW()',_0x1d69('0x5b'))['from'](_0x1d69('0xa4'))[_0x1d69('0x44')]('deletedAt\x20IS\x20NULL')['where'](_0x1d69('0xa6'),_0x355563[_0x1d69('0xa7')][_0x1d69('0x85')]())['where'](_0x1d69('0xa8'))[_0x1d69('0x44')](_0x1d69('0xa9'),squel[_0x1d69('0x7c')]()[_0x1d69('0x7d')](_0x1d69('0xac'))[_0x1d69('0x7e')](_0x1d69('0x9d'))[_0x1d69('0x44')]('VoiceQueueId\x20=\x20?',_0x29ed93[_0x1d69('0x4f')]['id']['toString']())))[_0x1d69('0x85')]();break;default:_0x5bbd65=squel[_0x1d69('0x9b')]()['into'](_0x1d69('0x9d'))[_0x1d69('0x9e')]([_0x1d69('0x9f'),_0x1d69('0xa0'),_0x1d69('0xa1'),_0x1d69('0xa2'),_0x1d69('0x63'),_0x1d69('0x5a'),'updatedAt'],squel[_0x1d69('0x7c')]()['field'](_0x1d69('0x9f'),'phone')[_0x1d69('0x7d')]('NOW()',_0x1d69('0xa0'))[_0x1d69('0x7d')]('id',_0x1d69('0xa1'))[_0x1d69('0x7d')](_0x355563[_0x1d69('0xa7')][_0x1d69('0x85')](),'ListId')[_0x1d69('0x7d')](_0x29ed93[_0x1d69('0x4f')]['id'][_0x1d69('0x85')](),_0x1d69('0x63'))['field'](_0x1d69('0xa3'),_0x1d69('0x5a'))[_0x1d69('0x7d')](_0x1d69('0xa3'),_0x1d69('0x5b'))[_0x1d69('0x7e')](_0x1d69('0xa4'))[_0x1d69('0x44')]('deletedAt\x20IS\x20NULL')['where'](_0x1d69('0xa6'),_0x355563[_0x1d69('0xa7')][_0x1d69('0x85')]())[_0x1d69('0x44')](_0x1d69('0xa8')))[_0x1d69('0x85')]();}_0x4ac110[_0x1d69('0xad')](db['sequelize'][_0x1d69('0x3a')](_0x5bbd65));}return BPromise[_0x1d69('0x88')](_0x4ac110);}})[_0x1d69('0x26')](function(){return _0x1eb5df;})['then'](respondWithResult(_0x506d97,null))[_0x1d69('0x4d')](handleError(_0x506d97,null));};exports[_0x1d69('0xae')]=function(_0x5a2674,_0x3dba30,_0x4bdeb9){return db['VoiceQueue'][_0x1d69('0x2f')]({'where':{'id':_0x5a2674[_0x1d69('0x4f')]['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x3dba30,null))[_0x1d69('0x26')](function(_0x49f023){if(_0x49f023){return _0x49f023[_0x1d69('0xae')](_0x5a2674[_0x1d69('0x3a')]['ids']);}})[_0x1d69('0x26')](function(_0x2c4ab8){if(_0x2c4ab8){return db[_0x1d69('0x64')][_0x1d69('0x32')]({'where':{'ListId':_0x5a2674[_0x1d69('0x3a')][_0x1d69('0x8b')],'VoiceQueueId':_0x5a2674['params']['id']}})[_0x1d69('0x26')](function(){return _0x2c4ab8;});}})['then'](respondWithStatusCode(_0x3dba30,null))[_0x1d69('0x4d')](handleError(_0x3dba30,null));};exports[_0x1d69('0xaf')]=function(_0x369a60,_0x28cebf,_0x192818){var _0x19c81b={};var _0x3dd760={};var _0x587eb2;var _0x19ee42;return db[_0x1d69('0x36')][_0x1d69('0x62')]({'where':{'id':_0x369a60[_0x1d69('0x4f')]['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x28cebf,null))[_0x1d69('0x26')](function(_0x39ed66){if(_0x39ed66){_0x587eb2=_0x39ed66;_0x3dd760[_0x1d69('0x38')]=_['keys'](db[_0x1d69('0xb0')][_0x1d69('0x37')]);_0x3dd760[_0x1d69('0x3a')]=_[_0x1d69('0x39')](_0x369a60['query']);_0x3dd760['filters']=_[_0x1d69('0x3c')](_0x3dd760[_0x1d69('0x38')],_0x3dd760[_0x1d69('0x3a')]);_0x19c81b['attributes']=_[_0x1d69('0x3c')](_0x3dd760['model'],qs['fields'](_0x369a60[_0x1d69('0x3a')]['fields']));_0x19c81b[_0x1d69('0x3d')]=_0x19c81b['attributes'][_0x1d69('0x3f')]?_0x19c81b[_0x1d69('0x3d')]:_0x3dd760[_0x1d69('0x38')];_0x19c81b[_0x1d69('0x42')]=qs[_0x1d69('0x43')](_0x369a60['query'][_0x1d69('0x43')]);_0x19c81b[_0x1d69('0x44')]=qs[_0x1d69('0x3b')](_[_0x1d69('0x45')](_0x369a60[_0x1d69('0x3a')],_0x3dd760[_0x1d69('0x3b')]));if(_0x369a60[_0x1d69('0x3a')][_0x1d69('0x2a')]){_0x19c81b[_0x1d69('0x44')]=_[_0x1d69('0x46')](_0x19c81b[_0x1d69('0x44')],{'$or':_[_0x1d69('0x2c')](_0x19c81b[_0x1d69('0x3d')],function(_0x43b249){var _0x2d1f1d={};_0x2d1f1d[_0x43b249]={'$like':'%'+_0x369a60[_0x1d69('0x3a')]['filter']+'%'};return _0x2d1f1d;})});}_0x19c81b=_[_0x1d69('0x46')]({},_0x19c81b,_0x369a60[_0x1d69('0x48')]);return _0x587eb2[_0x1d69('0xaf')](_0x19c81b);}})['then'](function(_0x30a597){if(_0x30a597){_0x19ee42=_0x30a597['length'];if(!_0x369a60[_0x1d69('0x3a')][_0x1d69('0x66')]('nolimit')){_0x19c81b['limit']=qs[_0x1d69('0x41')](_0x369a60[_0x1d69('0x3a')][_0x1d69('0x41')]);_0x19c81b[_0x1d69('0x21')]=qs[_0x1d69('0x21')](_0x369a60['query'][_0x1d69('0x21')]);}return _0x587eb2[_0x1d69('0xaf')](_0x19c81b);}})[_0x1d69('0x26')](function(_0x34bb0e){if(_0x34bb0e){return _0x34bb0e?{'count':_0x19ee42,'rows':_0x34bb0e}:null;}})[_0x1d69('0x26')](respondWithResult(_0x28cebf,null))[_0x1d69('0x4d')](handleError(_0x28cebf,null));};exports[_0x1d69('0xb1')]=function(_0x487761,_0x1614b6,_0x424e9b){var _0x2eb3ca,_0xe8a66d;return db[_0x1d69('0x36')][_0x1d69('0x2f')]({'where':{'id':_0x487761[_0x1d69('0x4f')]['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x1614b6,null))[_0x1d69('0x26')](function(_0x3fc5d9){if(_0x3fc5d9){_0xe8a66d=_0x3fc5d9;return _0x3fc5d9[_0x1d69('0xb1')](_0x487761['body'][_0x1d69('0x8b')],_[_0x1d69('0x5c')](_0x487761['body'],[_0x1d69('0x8b'),'id'])||{});}return null;})['spread'](function(_0x1f869a){var _0x22625a;_0x2eb3ca=_0x1f869a||[];var _0x5c0e26=[];if(_0x1f869a){for(var _0x332f5b=0x0;_0x332f5b<_0x1f869a[_0x1d69('0x3f')];_0x332f5b+=0x1){var _0x2ddc89=_0x1f869a[_0x332f5b]['get']({'plain':!![]});_0x22625a=squel[_0x1d69('0x9b')]()[_0x1d69('0x9c')](_0x1d69('0xb2'))[_0x1d69('0x9e')]([_0x1d69('0x9f'),_0x1d69('0xa1'),_0x1d69('0xa2'),_0x1d69('0x63'),_0x1d69('0x5a'),'updatedAt'],squel[_0x1d69('0x7c')]()[_0x1d69('0x7d')](_0x1d69('0x9f'),_0x1d69('0x9f'))['field']('id','ContactId')[_0x1d69('0x7d')](_0x2ddc89[_0x1d69('0xa7')][_0x1d69('0x85')](),'ListId')[_0x1d69('0x7d')](_0x487761['params']['id']['toString'](),'VoiceQueueId')['field'](_0x1d69('0xa3'),_0x1d69('0x5a'))[_0x1d69('0x7d')](_0x1d69('0xa3'),'updatedAt')[_0x1d69('0x7e')](_0x1d69('0xa4'))[_0x1d69('0x44')](_0x1d69('0xa5'))[_0x1d69('0x44')]('ListId\x20=\x20?',_0x2ddc89['CmListId']['toString']())[_0x1d69('0x44')](_0x1d69('0xa8')))[_0x1d69('0x85')]();_0x5c0e26[_0x1d69('0xad')](db[_0x1d69('0x84')][_0x1d69('0x3a')](_0x22625a));}return BPromise['all'](_0x5c0e26);}})[_0x1d69('0x26')](function(){return _0x2eb3ca;})[_0x1d69('0x26')](respondWithResult(_0x1614b6,null))['catch'](handleError(_0x1614b6,null));};exports[_0x1d69('0xb3')]=function(_0x161719,_0x40e367,_0x267a74){return db[_0x1d69('0x36')]['find']({'where':{'id':_0x161719[_0x1d69('0x4f')]['id']}})[_0x1d69('0x26')](handleEntityNotFound(_0x40e367,null))[_0x1d69('0x26')](function(_0x201b7f){if(_0x201b7f){return _0x201b7f[_0x1d69('0xb3')](_0x161719['query'][_0x1d69('0x8b')]);}})['then'](function(_0x1ba429){if(_0x1ba429){return db[_0x1d69('0x6a')][_0x1d69('0x32')]({'where':{'ListId':_0x161719[_0x1d69('0x3a')][_0x1d69('0x8b')],'VoiceQueueId':_0x161719[_0x1d69('0x4f')]['id']}})[_0x1d69('0x26')](function(){return _0x1ba429;});}})[_0x1d69('0x26')](respondWithStatusCode(_0x40e367,null))['catch'](handleError(_0x40e367,null));};
\ No newline at end of file
+var _0xe13a=['ListId\x20=\x20?','phone\x20IS\x20NOT\x20NULL','cm_hopper','fromQuery','removeLists','getBlackLists','addBlackLists','cm_hopper_black','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','sendStatus','status','end','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','VoiceQueues','inbound','outbound','filter','map','value','includes','type','find','name','UserProfileResource','then','error','stack','send','index','VoiceQueue','model','keys','query','attributes','intersection','fields','length','hasOwnProperty','sort','where','filters','pick','merge','key','field','include','findAll','rows','catch','params','create','body','user','get','UserProfileSection','userProfileId','autoAssociation','clone','rawAttributes','includeAll','options','omit','createdAt','updatedAt','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','getHoppers','findOne','CmHopper','order','getHopperHistories','CmHopperHistory','nolimit','VoiceQueueId','CmHopperFinal','getHopperBlacks','CmHopperBlack','getTeams','Team','addTeams','teams','User','voicePause','interface','flatMap','penalty','Agents','sequelize','transaction','each','UserVoiceQueue','findOrCreate','upsert','isNil','format','SIP/%s','forEach','removeTeams','select','tq.TeamId','from','join','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','VoiceQueueId\x20=\x20?','ut.UserId\x20=\x20?','toString','QueryTypes','SELECT','every','TeamId','all','union','compact','ids','removeAgents','UserVoiceQueueRt','emit','addAgents','spread','online','isEmpty','push','isArray','userVoiceQueue:remove','getAgents','getMembers','getLists','CmList','addLists','dialCheckDuplicateType','insert','into','phone','scheduledAt','ContactId','ListId','CmListId','NOW()','cm_contacts','deletedAt\x20IS\x20NULL','cm_hopper_final','phone\x20NOT\x20IN\x20(?)','COALESCE(phone,\x27\x27)','onlyIfOpen'];(function(_0x3864ba,_0xed0614){var _0x3f9348=function(_0x12dda9){while(--_0x12dda9){_0x3864ba['push'](_0x3864ba['shift']());}};_0x3f9348(++_0xed0614);}(_0xe13a,0x178));var _0xae13=function(_0x3e5b01,_0x168194){_0x3e5b01=_0x3e5b01-0x0;var _0x58ab7e=_0xe13a[_0x3e5b01];return _0x58ab7e;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xae13('0x0'));var rimraf=require(_0xae13('0x1'));var zipdir=require(_0xae13('0x2'));var jsonpatch=require(_0xae13('0x3'));var rp=require('request-promise');var moment=require(_0xae13('0x4'));var BPromise=require(_0xae13('0x5'));var Mustache=require(_0xae13('0x6'));var util=require(_0xae13('0x7'));var path=require(_0xae13('0x8'));var sox=require(_0xae13('0x9'));var csv=require(_0xae13('0xa'));var ejs=require(_0xae13('0xb'));var fs=require('fs');var _=require(_0xae13('0xc'));var squel=require('squel');var crypto=require(_0xae13('0xd'));var jsforce=require(_0xae13('0xe'));var deskjs=require(_0xae13('0xf'));var toCsv=require(_0xae13('0xa'));var querystring=require(_0xae13('0x10'));var Papa=require(_0xae13('0x11'));var Redis=require(_0xae13('0x12'));var authService=require(_0xae13('0x13'));var qs=require(_0xae13('0x14'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xae13('0x15'))(_0xae13('0x16'));var utils=require(_0xae13('0x17'));var config=require(_0xae13('0x18'));var db=require(_0xae13('0x19'))['db'];config[_0xae13('0x1a')]=_[_0xae13('0x1b')](config['redis'],{'host':_0xae13('0x1c'),'port':0x18eb});var socket=require(_0xae13('0x1d'))(new Redis(config['redis']));require('./voiceQueue.socket')['register'](socket);function respondWithStatusCode(_0x50f7c4,_0x52484b){_0x52484b=_0x52484b||0xcc;return function(_0x26ff3e){if(_0x26ff3e){return _0x50f7c4[_0xae13('0x1e')](_0x52484b);}return _0x50f7c4[_0xae13('0x1f')](_0x52484b)[_0xae13('0x20')]();};}function respondWithResult(_0x537889,_0x2912a2){_0x2912a2=_0x2912a2||0xc8;return function(_0x5c25a4){if(_0x5c25a4){return _0x537889[_0xae13('0x1f')](_0x2912a2)['json'](_0x5c25a4);}};}function respondWithFilteredResult(_0xe10aab,_0x16764b){return function(_0x207363){if(_0x207363){var _0x118e52=_0x207363[_0xae13('0x21')],_0x1a9c07=_0x16764b[_0xae13('0x22')],_0x1b33b7=_0x16764b['offset']+_0x16764b[_0xae13('0x23')],_0x32dcbe;if(_0x1b33b7>=_0x118e52){_0x1b33b7=_0x118e52;_0x32dcbe=0xc8;}else{_0x32dcbe=0xce;}_0xe10aab['status'](_0x32dcbe);return _0xe10aab[_0xae13('0x24')](_0xae13('0x25'),_0x1a9c07+'-'+_0x1b33b7+'/'+_0x118e52)['json'](_0x207363);}return null;};}function patchUpdates(_0x25a195){return function(_0x39d41c){try{jsonpatch[_0xae13('0x26')](_0x39d41c,_0x25a195,!![]);}catch(_0x240802){return BPromise[_0xae13('0x27')](_0x240802);}return _0x39d41c[_0xae13('0x28')]();};}function saveUpdates(_0x54b3b4,_0x520692){return function(_0x149eda){if(_0x149eda){return _0x149eda[_0xae13('0x29')](_0x54b3b4)['then'](function(_0x168b92){return _0x168b92;});}return null;};}function removeEntity(_0x519a37,_0x13c2de){return function(_0x194437){if(_0x194437){return _0x194437[_0xae13('0x2a')]()['then'](function(){var _0x57124a=_0x194437['get']({'plain':!![]});var _0x4edb8c=[{'name':_0xae13('0x2b'),'value':_0xae13('0x2c'),'ignore':![]},{'name':'QueueCampaigns','value':_0xae13('0x2d'),'ignore':![]}];var _0x517e71=_(_0x4edb8c)[_0xae13('0x2e')]('ignore')[_0xae13('0x2f')](_0xae13('0x30'))['value']();if(_[_0xae13('0x31')](_0x517e71,_0x57124a[_0xae13('0x32')])){return;}var _0x64b40b=_[_0xae13('0x33')](_0x4edb8c,['value',_0x57124a[_0xae13('0x32')]])[_0xae13('0x34')];return db[_0xae13('0x35')][_0xae13('0x2a')]({'where':{'type':_0x64b40b,'resourceId':_0x57124a['id']}})[_0xae13('0x36')](function(){return _0x194437;});})[_0xae13('0x36')](function(){_0x519a37[_0xae13('0x1f')](0xcc)['end']();});}};}function handleEntityNotFound(_0x133481,_0x591f94){return function(_0xf6289c){if(!_0xf6289c){_0x133481[_0xae13('0x1e')](0x194);}return _0xf6289c;};}function handleError(_0x2dc2af,_0x2b2395){_0x2b2395=_0x2b2395||0x1f4;return function(_0x352aec){logger[_0xae13('0x37')](_0x352aec[_0xae13('0x38')]);if(_0x352aec['name']){delete _0x352aec['name'];}_0x2dc2af[_0xae13('0x1f')](_0x2b2395)[_0xae13('0x39')](_0x352aec);};}exports[_0xae13('0x3a')]=function(_0x3710d6,_0x3d4ffd){var _0xfac8e7={},_0x126686={},_0x1a8708={'count':0x0,'rows':[]};var _0x1fda10=db[_0xae13('0x3b')]['rawAttributes'];_0x126686[_0xae13('0x3c')]=_[_0xae13('0x3d')](_0x1fda10);_0x126686[_0xae13('0x3e')]=_['keys'](_0x3710d6['query']);_0x126686['filters']=_['intersection'](_0x126686['model'],_0x126686['query']);_0xfac8e7[_0xae13('0x3f')]=_[_0xae13('0x40')](_0x126686[_0xae13('0x3c')],qs['fields'](_0x3710d6[_0xae13('0x3e')][_0xae13('0x41')]));_0xfac8e7[_0xae13('0x3f')]=_0xfac8e7[_0xae13('0x3f')][_0xae13('0x42')]?_0xfac8e7['attributes']:_0x126686[_0xae13('0x3c')];if(!_0x3710d6[_0xae13('0x3e')][_0xae13('0x43')]('nolimit')){_0xfac8e7['limit']=qs[_0xae13('0x23')](_0x3710d6[_0xae13('0x3e')][_0xae13('0x23')]);_0xfac8e7[_0xae13('0x22')]=qs['offset'](_0x3710d6[_0xae13('0x3e')][_0xae13('0x22')]);}_0xfac8e7['order']=qs[_0xae13('0x44')](_0x3710d6[_0xae13('0x3e')]['sort']);_0xfac8e7[_0xae13('0x45')]=qs[_0xae13('0x46')](_[_0xae13('0x47')](_0x3710d6[_0xae13('0x3e')],_0x126686['filters']));if(_0x3710d6[_0xae13('0x3e')][_0xae13('0x2e')]){_0xfac8e7[_0xae13('0x45')]=_[_0xae13('0x48')](_0xfac8e7['where'],{'$or':_[_0xae13('0x2f')](_0x1fda10,function(_0x38b410){if(_0x38b410[_0xae13('0x32')][_0xae13('0x49')]!=='VIRTUAL'){var _0x49428a={};_0x49428a[_0x38b410[_0xae13('0x4a')]]={'$like':'%'+_0x3710d6[_0xae13('0x3e')]['filter']+'%'};return _0x49428a;}})});}_0xfac8e7=_[_0xae13('0x48')]({},_0xfac8e7,_0x3710d6['options']);var _0x2b589f={'where':_0xfac8e7[_0xae13('0x45')]};return db[_0xae13('0x3b')]['count'](_0x2b589f)[_0xae13('0x36')](function(_0x464ea4){_0x1a8708[_0xae13('0x21')]=_0x464ea4;if(_0x3710d6[_0xae13('0x3e')]['includeAll']){_0xfac8e7[_0xae13('0x4b')]=[{'all':!![]}];}return db[_0xae13('0x3b')][_0xae13('0x4c')](_0xfac8e7);})[_0xae13('0x36')](function(_0x25dabc){_0x1a8708[_0xae13('0x4d')]=_0x25dabc;return _0x1a8708;})[_0xae13('0x36')](respondWithFilteredResult(_0x3d4ffd,_0xfac8e7))[_0xae13('0x4e')](handleError(_0x3d4ffd,null));};exports['show']=function(_0x2fa94d,_0x570ee6){var _0x2a8d56={'raw':![],'where':{'id':_0x2fa94d[_0xae13('0x4f')]['id']}},_0x39517c={};_0x39517c[_0xae13('0x3c')]=_['keys'](db[_0xae13('0x3b')]['rawAttributes']);_0x39517c[_0xae13('0x3e')]=_[_0xae13('0x3d')](_0x2fa94d['query']);_0x39517c[_0xae13('0x46')]=_[_0xae13('0x40')](_0x39517c[_0xae13('0x3c')],_0x39517c[_0xae13('0x3e')]);_0x2a8d56[_0xae13('0x3f')]=_[_0xae13('0x40')](_0x39517c['model'],qs[_0xae13('0x41')](_0x2fa94d[_0xae13('0x3e')][_0xae13('0x41')]));_0x2a8d56[_0xae13('0x3f')]=_0x2a8d56[_0xae13('0x3f')]['length']?_0x2a8d56[_0xae13('0x3f')]:_0x39517c[_0xae13('0x3c')];if(_0x2fa94d[_0xae13('0x3e')]['includeAll']){_0x2a8d56['include']=[{'all':!![]}];}_0x2a8d56=_['merge']({},_0x2a8d56,_0x2fa94d['options']);return db[_0xae13('0x3b')]['find'](_0x2a8d56)[_0xae13('0x36')](handleEntityNotFound(_0x570ee6,null))['then'](respondWithResult(_0x570ee6,null))[_0xae13('0x4e')](handleError(_0x570ee6,null));};exports[_0xae13('0x50')]=function(_0x3d2f4a,_0x4029dc){return db[_0xae13('0x3b')]['create'](_0x3d2f4a[_0xae13('0x51')],{})[_0xae13('0x36')](function(_0x5eb0ec){var _0x67d3a8=_0x3d2f4a[_0xae13('0x52')]['get']({'plain':!![]});if(!_0x67d3a8)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x67d3a8['role']==='user'){var _0x22f828=_0x5eb0ec[_0xae13('0x53')]({'plain':!![]});var _0x525bf5=[{'name':_0xae13('0x2b'),'value':_0xae13('0x2c')},{'name':'QueueCampaigns','value':_0xae13('0x2d')}];var _0x277213=_[_0xae13('0x33')](_0x525bf5,[_0xae13('0x30'),_0x22f828[_0xae13('0x32')]])[_0xae13('0x34')];return db[_0xae13('0x54')][_0xae13('0x33')]({'where':{'name':_0x277213,'userProfileId':_0x67d3a8[_0xae13('0x55')]},'raw':!![]})[_0xae13('0x36')](function(_0x4990ec){if(_0x4990ec&&_0x4990ec[_0xae13('0x56')]===0x0){return db[_0xae13('0x35')][_0xae13('0x50')]({'name':_0x22f828['name'],'resourceId':_0x22f828['id'],'type':_0x4990ec[_0xae13('0x34')],'sectionId':_0x4990ec['id']},{})['then'](function(){return _0x5eb0ec;});}else{return _0x5eb0ec;}})[_0xae13('0x4e')](function(_0x2f1cca){logger[_0xae13('0x37')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x2f1cca);throw _0x2f1cca;});}return _0x5eb0ec;})['then'](respondWithResult(_0x4029dc,0xc9))[_0xae13('0x4e')](handleError(_0x4029dc,null));};exports[_0xae13('0x57')]=function(_0x21d732,_0x3ce119){var _0x22989a={'raw':![],'where':{'id':_0x21d732[_0xae13('0x4f')]['id']}},_0x175ee2={};_0x175ee2['model']=_[_0xae13('0x3d')](db[_0xae13('0x3b')][_0xae13('0x58')]);_0x22989a[_0xae13('0x3f')]=_[_0xae13('0x40')](_0x175ee2[_0xae13('0x3c')],qs[_0xae13('0x41')](_0x21d732['query'][_0xae13('0x41')]));_0x22989a[_0xae13('0x3f')]=_0x22989a['attributes'][_0xae13('0x42')]?_0x22989a[_0xae13('0x3f')]:_0x175ee2[_0xae13('0x3c')];if(_0x21d732['query'][_0xae13('0x59')]){_0x22989a[_0xae13('0x4b')]=[{'all':!![]}];}_0x22989a=_['merge']({},_0x22989a,_0x21d732[_0xae13('0x5a')]);return db[_0xae13('0x3b')][_0xae13('0x33')](_0x22989a)[_0xae13('0x36')](handleEntityNotFound(_0x3ce119,null))[_0xae13('0x36')](function(_0x1f9a21){if(_0x1f9a21){var _0x5309a3=_0x1f9a21['get']({'plain':!![]});_0x5309a3=qs[_0xae13('0x5b')](_0x5309a3,['id',_0xae13('0x5c'),_0xae13('0x5d')]);_0x21d732[_0xae13('0x51')]=_[_0xae13('0x5b')](_0x21d732[_0xae13('0x51')],['id','createdAt',_0xae13('0x5d')]);return db[_0xae13('0x3b')]['create'](_['merge'](_0x5309a3,_0x21d732['body']),{'include':_0x21d732[_0xae13('0x3e')][_0xae13('0x59')]?[{'all':!![]}]:undefined})[_0xae13('0x36')](function(_0x2dc8ba){var _0xbe705f=_0x21d732[_0xae13('0x52')][_0xae13('0x53')]({'plain':!![]});if(!_0xbe705f)throw new Error(_0xae13('0x5e'));if(_0xbe705f[_0xae13('0x5f')]===_0xae13('0x52')){var _0x593421=_0x2dc8ba[_0xae13('0x53')]({'plain':!![]});var _0x177e9e=[{'name':_0xae13('0x2b'),'value':_0xae13('0x2c')},{'name':'QueueCampaigns','value':_0xae13('0x2d')}];var _0x259f12=_['find'](_0x177e9e,[_0xae13('0x30'),_0x593421['type']])['name'];return db[_0xae13('0x54')][_0xae13('0x33')]({'where':{'name':_0x259f12,'userProfileId':_0xbe705f[_0xae13('0x55')]},'raw':!![]})[_0xae13('0x36')](function(_0x22a7f9){if(_0x22a7f9&&_0x22a7f9[_0xae13('0x56')]===0x0){return db['UserProfileResource']['create']({'name':_0x593421[_0xae13('0x34')],'resourceId':_0x593421['id'],'type':_0x22a7f9[_0xae13('0x34')],'sectionId':_0x22a7f9['id']},{})[_0xae13('0x36')](function(){return _0x2dc8ba;});}else{return _0x2dc8ba;}})['catch'](function(_0x4400cb){logger['error'](_0xae13('0x60'),_0x4400cb);throw _0x4400cb;});}return _0x2dc8ba;});}})[_0xae13('0x36')](respondWithResult(_0x3ce119,0xc9))[_0xae13('0x4e')](handleError(_0x3ce119,null));};exports[_0xae13('0x29')]=function(_0x21ca40,_0x5e8e4f){if(_0x21ca40[_0xae13('0x51')]['id']){delete _0x21ca40[_0xae13('0x51')]['id'];}return db['VoiceQueue'][_0xae13('0x33')]({'where':{'id':_0x21ca40[_0xae13('0x4f')]['id']}})[_0xae13('0x36')](handleEntityNotFound(_0x5e8e4f,null))[_0xae13('0x36')](saveUpdates(_0x21ca40[_0xae13('0x51')],null))[_0xae13('0x36')](respondWithResult(_0x5e8e4f,null))['catch'](handleError(_0x5e8e4f,null));};exports[_0xae13('0x2a')]=function(_0x4affc2,_0x272e3c){return db['VoiceQueue'][_0xae13('0x33')]({'where':{'id':_0x4affc2[_0xae13('0x4f')]['id']}})['then'](handleEntityNotFound(_0x272e3c,null))[_0xae13('0x36')](removeEntity(_0x272e3c,null))[_0xae13('0x4e')](handleError(_0x272e3c,null));};exports[_0xae13('0x61')]=function(_0xb00dd6,_0x1f4eeb,_0x36e693){var _0xc9376={'raw':![],'where':{}};var _0x1a265d={};var _0x5f09c3={'count':0x0,'rows':[]};return db[_0xae13('0x3b')][_0xae13('0x62')]({'where':{'id':_0xb00dd6[_0xae13('0x4f')]['id']}})[_0xae13('0x36')](handleEntityNotFound(_0x1f4eeb,null))[_0xae13('0x36')](function(_0x13c1f3){if(_0x13c1f3){_0x1a265d[_0xae13('0x3c')]=_[_0xae13('0x3d')](db[_0xae13('0x63')][_0xae13('0x58')]);_0x1a265d['query']=_[_0xae13('0x3d')](_0xb00dd6['query']);_0x1a265d['filters']=_[_0xae13('0x40')](_0x1a265d[_0xae13('0x3c')],_0x1a265d[_0xae13('0x3e')]);_0xc9376['attributes']=_[_0xae13('0x40')](_0x1a265d['model'],qs[_0xae13('0x41')](_0xb00dd6['query'][_0xae13('0x41')]));_0xc9376[_0xae13('0x3f')]=_0xc9376['attributes'][_0xae13('0x42')]?_0xc9376[_0xae13('0x3f')]:_0x1a265d['model'];if(!_0xb00dd6['query'][_0xae13('0x43')]('nolimit')){_0xc9376['limit']=qs[_0xae13('0x23')](_0xb00dd6['query'][_0xae13('0x23')]);_0xc9376['offset']=qs[_0xae13('0x22')](_0xb00dd6[_0xae13('0x3e')][_0xae13('0x22')]);}_0xc9376[_0xae13('0x64')]=qs[_0xae13('0x44')](_0xb00dd6[_0xae13('0x3e')]['sort']);_0xc9376[_0xae13('0x45')]=qs[_0xae13('0x46')](_['pick'](_0xb00dd6['query'],_0x1a265d['filters']));_0xc9376[_0xae13('0x45')]['VoiceQueueId']=_0x13c1f3['id'];if(_0xb00dd6[_0xae13('0x3e')]['filter']){_0xc9376['where']=_[_0xae13('0x48')](_0xc9376[_0xae13('0x45')],{'$or':_[_0xae13('0x2f')](_0xc9376[_0xae13('0x3f')],function(_0x28768f){var _0x317ca7={};_0x317ca7[_0x28768f]={'$like':'%'+_0xb00dd6['query'][_0xae13('0x2e')]+'%'};return _0x317ca7;})});}_0xc9376=_[_0xae13('0x48')]({},_0xc9376,_0xb00dd6[_0xae13('0x5a')]);return db[_0xae13('0x63')]['count']({'where':_0xc9376[_0xae13('0x45')]})[_0xae13('0x36')](function(_0xb623d2){_0x5f09c3['count']=_0xb623d2;if(_0xb00dd6['query'][_0xae13('0x59')]){_0xc9376[_0xae13('0x4b')]=[{'all':!![]}];}return db[_0xae13('0x63')][_0xae13('0x4c')](_0xc9376);})[_0xae13('0x36')](function(_0x307a37){_0x5f09c3[_0xae13('0x4d')]=_0x307a37;return _0x5f09c3;});}})[_0xae13('0x36')](respondWithFilteredResult(_0x1f4eeb,_0xc9376))['catch'](handleError(_0x1f4eeb,null));};exports[_0xae13('0x65')]=function(_0x2de667,_0x5704df,_0x2f70c6){var _0x13783b={'raw':!![],'where':{}};var _0x55a00a={};var _0x447960={'count':0x0,'rows':[]};return db[_0xae13('0x3b')]['findOne']({'where':{'id':_0x2de667[_0xae13('0x4f')]['id']}})[_0xae13('0x36')](handleEntityNotFound(_0x5704df,null))[_0xae13('0x36')](function(_0x50e2a6){if(_0x50e2a6){_0x55a00a['model']=_[_0xae13('0x3d')](db[_0xae13('0x66')][_0xae13('0x58')]);_0x55a00a['query']=_[_0xae13('0x3d')](_0x2de667['query']);_0x55a00a[_0xae13('0x46')]=_[_0xae13('0x40')](_0x55a00a[_0xae13('0x3c')],_0x55a00a[_0xae13('0x3e')]);_0x13783b[_0xae13('0x3f')]=_[_0xae13('0x40')](_0x55a00a[_0xae13('0x3c')],qs[_0xae13('0x41')](_0x2de667[_0xae13('0x3e')][_0xae13('0x41')]));_0x13783b['attributes']=_0x13783b[_0xae13('0x3f')]['length']?_0x13783b[_0xae13('0x3f')]:_0x55a00a[_0xae13('0x3c')];if(!_0x2de667[_0xae13('0x3e')][_0xae13('0x43')](_0xae13('0x67'))){_0x13783b[_0xae13('0x23')]=qs[_0xae13('0x23')](_0x2de667[_0xae13('0x3e')][_0xae13('0x23')]);_0x13783b[_0xae13('0x22')]=qs['offset'](_0x2de667[_0xae13('0x3e')][_0xae13('0x22')]);}_0x13783b[_0xae13('0x64')]=qs[_0xae13('0x44')](_0x2de667[_0xae13('0x3e')][_0xae13('0x44')]);_0x13783b[_0xae13('0x45')]=qs[_0xae13('0x46')](_['pick'](_0x2de667[_0xae13('0x3e')],_0x55a00a[_0xae13('0x46')]));_0x13783b[_0xae13('0x45')][_0xae13('0x68')]=_0x50e2a6['id'];if(_0x2de667[_0xae13('0x3e')][_0xae13('0x2e')]){_0x13783b[_0xae13('0x45')]=_['merge'](_0x13783b[_0xae13('0x45')],{'$or':_[_0xae13('0x2f')](_0x13783b[_0xae13('0x3f')],function(_0x4006fd){var _0x46090b={};_0x46090b[_0x4006fd]={'$like':'%'+_0x2de667[_0xae13('0x3e')]['filter']+'%'};return _0x46090b;})});}_0x13783b=_[_0xae13('0x48')]({},_0x13783b,_0x2de667[_0xae13('0x5a')]);return db[_0xae13('0x66')][_0xae13('0x21')]({'where':_0x13783b[_0xae13('0x45')]})[_0xae13('0x36')](function(_0x10467a){_0x447960[_0xae13('0x21')]=_0x10467a;if(_0x2de667[_0xae13('0x3e')][_0xae13('0x59')]){_0x13783b[_0xae13('0x4b')]=[{'all':!![]}];}return db['CmHopperHistory'][_0xae13('0x4c')](_0x13783b);})[_0xae13('0x36')](function(_0xeb37e4){_0x447960[_0xae13('0x4d')]=_0xeb37e4;return _0x447960;});}})[_0xae13('0x36')](respondWithFilteredResult(_0x5704df,_0x13783b))[_0xae13('0x4e')](handleError(_0x5704df,null));};exports['getHopperFinals']=function(_0x5f1743,_0x290e8c,_0x5e6309){var _0x284577={'raw':!![],'where':{}};var _0x313f53={};var _0x21c303={'count':0x0,'rows':[]};return db[_0xae13('0x3b')]['findOne']({'where':{'id':_0x5f1743['params']['id']}})[_0xae13('0x36')](handleEntityNotFound(_0x290e8c,null))[_0xae13('0x36')](function(_0x224f18){if(_0x224f18){_0x313f53['model']=_['keys'](db[_0xae13('0x69')][_0xae13('0x58')]);_0x313f53[_0xae13('0x3e')]=_[_0xae13('0x3d')](_0x5f1743[_0xae13('0x3e')]);_0x313f53[_0xae13('0x46')]=_['intersection'](_0x313f53[_0xae13('0x3c')],_0x313f53[_0xae13('0x3e')]);_0x284577[_0xae13('0x3f')]=_['intersection'](_0x313f53['model'],qs[_0xae13('0x41')](_0x5f1743[_0xae13('0x3e')][_0xae13('0x41')]));_0x284577[_0xae13('0x3f')]=_0x284577[_0xae13('0x3f')][_0xae13('0x42')]?_0x284577[_0xae13('0x3f')]:_0x313f53['model'];if(!_0x5f1743[_0xae13('0x3e')][_0xae13('0x43')](_0xae13('0x67'))){_0x284577[_0xae13('0x23')]=qs['limit'](_0x5f1743[_0xae13('0x3e')][_0xae13('0x23')]);_0x284577[_0xae13('0x22')]=qs[_0xae13('0x22')](_0x5f1743[_0xae13('0x3e')][_0xae13('0x22')]);}_0x284577[_0xae13('0x64')]=qs[_0xae13('0x44')](_0x5f1743['query'][_0xae13('0x44')]);_0x284577[_0xae13('0x45')]=qs[_0xae13('0x46')](_[_0xae13('0x47')](_0x5f1743[_0xae13('0x3e')],_0x313f53['filters']));_0x284577['where'][_0xae13('0x68')]=_0x224f18['id'];if(_0x5f1743[_0xae13('0x3e')][_0xae13('0x2e')]){_0x284577[_0xae13('0x45')]=_[_0xae13('0x48')](_0x284577[_0xae13('0x45')],{'$or':_[_0xae13('0x2f')](_0x284577[_0xae13('0x3f')],function(_0x485a7c){var _0x57b5c3={};_0x57b5c3[_0x485a7c]={'$like':'%'+_0x5f1743['query']['filter']+'%'};return _0x57b5c3;})});}_0x284577=_['merge']({},_0x284577,_0x5f1743[_0xae13('0x5a')]);return db[_0xae13('0x69')]['count']({'where':_0x284577[_0xae13('0x45')]})[_0xae13('0x36')](function(_0x5c6c94){_0x21c303['count']=_0x5c6c94;if(_0x5f1743[_0xae13('0x3e')]['includeAll']){_0x284577[_0xae13('0x4b')]=[{'all':!![]}];}return db['CmHopperFinal'][_0xae13('0x4c')](_0x284577);})[_0xae13('0x36')](function(_0x985f6d){_0x21c303[_0xae13('0x4d')]=_0x985f6d;return _0x21c303;});}})['then'](respondWithFilteredResult(_0x290e8c,_0x284577))['catch'](handleError(_0x290e8c,null));};exports[_0xae13('0x6a')]=function(_0x4a2ac2,_0x444fdb,_0x1ef0ad){var _0x4acf77={'raw':!![],'where':{}};var _0x7b65c4={};var _0xe4969c={'count':0x0,'rows':[]};return db[_0xae13('0x3b')][_0xae13('0x62')]({'where':{'id':_0x4a2ac2['params']['id']}})[_0xae13('0x36')](handleEntityNotFound(_0x444fdb,null))['then'](function(_0x1dfb34){if(_0x1dfb34){_0x7b65c4[_0xae13('0x3c')]=_[_0xae13('0x3d')](db[_0xae13('0x6b')]['rawAttributes']);_0x7b65c4['query']=_[_0xae13('0x3d')](_0x4a2ac2[_0xae13('0x3e')]);_0x7b65c4['filters']=_[_0xae13('0x40')](_0x7b65c4['model'],_0x7b65c4[_0xae13('0x3e')]);_0x4acf77['attributes']=_[_0xae13('0x40')](_0x7b65c4[_0xae13('0x3c')],qs['fields'](_0x4a2ac2[_0xae13('0x3e')]['fields']));_0x4acf77['attributes']=_0x4acf77[_0xae13('0x3f')][_0xae13('0x42')]?_0x4acf77[_0xae13('0x3f')]:_0x7b65c4[_0xae13('0x3c')];if(!_0x4a2ac2[_0xae13('0x3e')][_0xae13('0x43')](_0xae13('0x67'))){_0x4acf77['limit']=qs[_0xae13('0x23')](_0x4a2ac2[_0xae13('0x3e')][_0xae13('0x23')]);_0x4acf77[_0xae13('0x22')]=qs[_0xae13('0x22')](_0x4a2ac2[_0xae13('0x3e')][_0xae13('0x22')]);}_0x4acf77[_0xae13('0x64')]=qs[_0xae13('0x44')](_0x4a2ac2[_0xae13('0x3e')][_0xae13('0x44')]);_0x4acf77['where']=qs['filters'](_['pick'](_0x4a2ac2[_0xae13('0x3e')],_0x7b65c4[_0xae13('0x46')]));_0x4acf77[_0xae13('0x45')][_0xae13('0x68')]=_0x1dfb34['id'];if(_0x4a2ac2[_0xae13('0x3e')][_0xae13('0x2e')]){_0x4acf77['where']=_[_0xae13('0x48')](_0x4acf77[_0xae13('0x45')],{'$or':_['map'](_0x4acf77['attributes'],function(_0xe82a8){var _0x5a5fd1={};_0x5a5fd1[_0xe82a8]={'$like':'%'+_0x4a2ac2[_0xae13('0x3e')][_0xae13('0x2e')]+'%'};return _0x5a5fd1;})});}_0x4acf77=_[_0xae13('0x48')]({},_0x4acf77,_0x4a2ac2[_0xae13('0x5a')]);return db['CmHopperBlack'][_0xae13('0x21')]({'where':_0x4acf77['where']})['then'](function(_0x5d13ea){_0xe4969c[_0xae13('0x21')]=_0x5d13ea;if(_0x4a2ac2[_0xae13('0x3e')][_0xae13('0x59')]){_0x4acf77[_0xae13('0x4b')]=[{'all':!![]}];}return db[_0xae13('0x6b')][_0xae13('0x4c')](_0x4acf77);})[_0xae13('0x36')](function(_0x10dafb){_0xe4969c[_0xae13('0x4d')]=_0x10dafb;return _0xe4969c;});}})['then'](respondWithFilteredResult(_0x444fdb,_0x4acf77))[_0xae13('0x4e')](handleError(_0x444fdb,null));};exports[_0xae13('0x6c')]=function(_0x1cfc6d,_0x22a263,_0x33aca0){var _0x490cd7={};var _0x22801a={};var _0x446773;var _0x1d155e;return db[_0xae13('0x3b')][_0xae13('0x62')]({'where':{'id':_0x1cfc6d['params']['id']}})[_0xae13('0x36')](handleEntityNotFound(_0x22a263,null))[_0xae13('0x36')](function(_0x2a00bd){if(_0x2a00bd){_0x446773=_0x2a00bd;_0x22801a[_0xae13('0x3c')]=_[_0xae13('0x3d')](db[_0xae13('0x6d')]['rawAttributes']);_0x22801a['query']=_[_0xae13('0x3d')](_0x1cfc6d[_0xae13('0x3e')]);_0x22801a[_0xae13('0x46')]=_['intersection'](_0x22801a[_0xae13('0x3c')],_0x22801a[_0xae13('0x3e')]);_0x490cd7[_0xae13('0x3f')]=_[_0xae13('0x40')](_0x22801a[_0xae13('0x3c')],qs['fields'](_0x1cfc6d[_0xae13('0x3e')][_0xae13('0x41')]));_0x490cd7[_0xae13('0x3f')]=_0x490cd7['attributes'][_0xae13('0x42')]?_0x490cd7[_0xae13('0x3f')]:_0x22801a[_0xae13('0x3c')];_0x490cd7[_0xae13('0x64')]=qs[_0xae13('0x44')](_0x1cfc6d[_0xae13('0x3e')][_0xae13('0x44')]);_0x490cd7[_0xae13('0x45')]=qs[_0xae13('0x46')](_['pick'](_0x1cfc6d[_0xae13('0x3e')],_0x22801a[_0xae13('0x46')]));if(_0x1cfc6d[_0xae13('0x3e')][_0xae13('0x2e')]){_0x490cd7[_0xae13('0x45')]=_[_0xae13('0x48')](_0x490cd7['where'],{'$or':_[_0xae13('0x2f')](_0x490cd7[_0xae13('0x3f')],function(_0x2e585c){var _0x395e94={};_0x395e94[_0x2e585c]={'$like':'%'+_0x1cfc6d[_0xae13('0x3e')]['filter']+'%'};return _0x395e94;})});}_0x490cd7=_[_0xae13('0x48')]({},_0x490cd7,_0x1cfc6d['options']);return _0x446773['getTeams'](_0x490cd7);}})[_0xae13('0x36')](function(_0x62edc5){if(_0x62edc5){_0x1d155e=_0x62edc5[_0xae13('0x42')];if(!_0x1cfc6d[_0xae13('0x3e')][_0xae13('0x43')](_0xae13('0x67'))){_0x490cd7[_0xae13('0x23')]=qs[_0xae13('0x23')](_0x1cfc6d[_0xae13('0x3e')][_0xae13('0x23')]);_0x490cd7['offset']=qs[_0xae13('0x22')](_0x1cfc6d['query'][_0xae13('0x22')]);}return _0x446773[_0xae13('0x6c')](_0x490cd7);}})[_0xae13('0x36')](function(_0x1b2621){if(_0x1b2621){return _0x1b2621?{'count':_0x1d155e,'rows':_0x1b2621}:null;}})[_0xae13('0x36')](respondWithResult(_0x22a263,null))['catch'](handleError(_0x22a263,null));};exports[_0xae13('0x6e')]=function(_0xefbb53,_0x41aea2,_0x6ba792){var _0x4829c5=_0xefbb53[_0xae13('0x51')][_0xae13('0x6f')];return db[_0xae13('0x6d')][_0xae13('0x4c')]({'where':{'id':_[_0xae13('0x2f')](_0x4829c5,'id')},'attributes':['id'],'include':[{'model':db[_0xae13('0x70')],'as':'Agents','attributes':['id',_0xae13('0x34'),'online',_0xae13('0x71'),_0xae13('0x72')],'raw':!![]}]})['then'](function(_0x3a8ef0){if(_0x3a8ef0){var _0x3d025d=_[_0xae13('0x73')](_0x3a8ef0,function(_0x370c75){var _0x2dcd00=_0x370c75[_0xae13('0x53')]({'plain':!![]});_0x2dcd00['Agents']['forEach'](function(_0x295d82){_0x295d82[_0xae13('0x74')]=_[_0xae13('0x33')](_0x4829c5,{'id':_0x2dcd00['id']})[_0xae13('0x74')];});return _0x2dcd00[_0xae13('0x75')];});return db[_0xae13('0x3b')][_0xae13('0x33')]({'where':{'id':_0xefbb53[_0xae13('0x4f')]['id']}})[_0xae13('0x36')](function(_0x4ed395){return db[_0xae13('0x76')][_0xae13('0x77')](function(_0x28668b){return _0x4ed395['addTeams'](_[_0xae13('0x2f')](_0x4829c5,'id'),{'transaction':_0x28668b})['then'](function(){return BPromise[_0xae13('0x78')](_0x3d025d,function(_0x494a0e){return db[_0xae13('0x79')][_0xae13('0x7a')]({'where':{'UserId':_0x494a0e['id'],'VoiceQueueId':_0xefbb53[_0xae13('0x4f')]['id']},'defaults':{'penalty':_0x494a0e[_0xae13('0x74')]},'transaction':_0x28668b});});})[_0xae13('0x36')](function(){return BPromise[_0xae13('0x78')](_['filter'](_0x3d025d,{'online':!![]}),function(_0x3fc4c1){return db['UserVoiceQueueRt'][_0xae13('0x7b')]({'membername':_0x3fc4c1[_0xae13('0x34')],'UserId':_0x3fc4c1['id'],'queue_name':_0x4ed395[_0xae13('0x34')],'VoiceQueueId':_0x4ed395['id'],'interface':_[_0xae13('0x7c')](_0x3fc4c1[_0xae13('0x72')])?util[_0xae13('0x7d')](_0xae13('0x7e'),_0x3fc4c1[_0xae13('0x34')]):_0x3fc4c1[_0xae13('0x72')],'paused':_0x3fc4c1['voicePause']||![],'penalty':_0x3fc4c1['penalty']},{'transaction':_0x28668b});});})['then'](function(){_0x3d025d[_0xae13('0x7f')](function(_0x38b1b9){socket['emit']('userVoiceQueue:save',{'UserId':_0x38b1b9['id'],'VoiceQueueId':_0x4ed395['id']});});});});});}})[_0xae13('0x36')](respondWithStatusCode(_0x41aea2,null))[_0xae13('0x4e')](handleError(_0x41aea2,null));};exports[_0xae13('0x80')]=function(_0x59dbff,_0x5e05c7,_0x4b7b8b){return db[_0xae13('0x6d')][_0xae13('0x4c')]({'where':{'id':_0x59dbff[_0xae13('0x3e')]['ids']},'attributes':['id'],'include':[{'model':db[_0xae13('0x70')],'as':_0xae13('0x75'),'attributes':['id'],'raw':!![]}]})[_0xae13('0x36')](handleEntityNotFound(_0x5e05c7,null))['then'](function(_0x3690ed){var _0x14d197=_[_0xae13('0x2f')](_0x3690ed,'id');var _0x46a04f=[];var _0x4b4cad=[];var _0x5b8df0=squel[_0xae13('0x81')]();_0x5b8df0['field'](_0xae13('0x82'))[_0xae13('0x83')]('team_has_voice_queues','tq')[_0xae13('0x84')](_0xae13('0x85'),'ut',_0xae13('0x86'))[_0xae13('0x45')](_0xae13('0x87'),_0x59dbff['params']['id']);for(var _0xadfa9a=0x0;_0xadfa9a<_0x3690ed[_0xae13('0x42')];_0xadfa9a+=0x1){let _0x5f4c75=_0x3690ed[_0xadfa9a];for(var _0xd92578=0x0;_0xd92578<_0x5f4c75[_0xae13('0x75')][_0xae13('0x42')];_0xd92578+=0x1){let _0x166fc3=_0x5f4c75['Agents'][_0xd92578];var _0xaf3d6e=_0x5b8df0[_0xae13('0x57')]();_0xaf3d6e[_0xae13('0x45')](_0xae13('0x88'),_0x166fc3['id']);_0x4b4cad['push'](db['sequelize'][_0xae13('0x3e')](_0xaf3d6e[_0xae13('0x89')](),{'type':db[_0xae13('0x76')][_0xae13('0x8a')][_0xae13('0x8b')]})[_0xae13('0x36')](function(_0x3a7b02){if(_0x3a7b02[_0xae13('0x42')]===0x1){return _0x166fc3['id'];}else{var _0x829c6c=_[_0xae13('0x8c')](_['map'](_0x3a7b02,_0xae13('0x8d')),function(_0xd762fd){return _[_0xae13('0x31')](_0x14d197,_0xd762fd);});if(_0x829c6c){return _0x166fc3['id'];}}}));}}return BPromise[_0xae13('0x8e')](_0x4b4cad)['then'](function(_0x2287c8){_0x46a04f=_(_0x46a04f)[_0xae13('0x8f')](_0x2287c8)[_0xae13('0x90')]()[_0xae13('0x30')]();return db[_0xae13('0x3b')]['find']({'where':{'id':_0x59dbff[_0xae13('0x4f')]['id']}})[_0xae13('0x36')](function(_0xb28977){return db[_0xae13('0x76')][_0xae13('0x77')](function(_0xbd7690){return _0xb28977[_0xae13('0x80')](_0x59dbff['query'][_0xae13('0x91')],{'transaction':_0xbd7690})[_0xae13('0x36')](function(){if(!_['isEmpty'](_0x46a04f)){return _0xb28977[_0xae13('0x92')](_0x46a04f,{'transaction':_0xbd7690})[_0xae13('0x36')](function(){return db[_0xae13('0x93')][_0xae13('0x2a')]({'where':{'VoiceQueueId':_0x59dbff[_0xae13('0x4f')]['id'],'UserId':_0x46a04f},'transaction':_0xbd7690});});}})[_0xae13('0x36')](function(){_0x46a04f[_0xae13('0x7f')](function(_0x303f96){socket[_0xae13('0x94')]('userVoiceQueue:remove',{'UserId':_0x303f96,'VoiceQueueId':_0xb28977['id']});});});});});});})[_0xae13('0x36')](respondWithStatusCode(_0x5e05c7,null))[_0xae13('0x4e')](handleError(_0x5e05c7,null));};exports[_0xae13('0x95')]=function(_0x4cd1fc,_0x4e0710,_0x5a711b){var _0x1096fe,_0xa1aa0;return db[_0xae13('0x3b')][_0xae13('0x33')]({'where':{'id':_0x4cd1fc[_0xae13('0x4f')]['id']}})[_0xae13('0x36')](handleEntityNotFound(_0x4e0710,null))[_0xae13('0x36')](function(_0x2e320d){if(_0x2e320d){_0xa1aa0=_0x2e320d;return _0x2e320d[_0xae13('0x95')](_0x4cd1fc['body'][_0xae13('0x91')],_['omit'](_0x4cd1fc['body'],[_0xae13('0x91'),'id'])||{})[_0xae13('0x96')](function(_0x59fca1){for(var _0x3e6229=0x0;_0x3e6229<_0x4cd1fc[_0xae13('0x51')][_0xae13('0x91')][_0xae13('0x42')];_0x3e6229+=0x1){socket['emit']('userVoiceQueue:save',{'UserId':_0x4cd1fc[_0xae13('0x51')][_0xae13('0x91')][_0x3e6229],'VoiceQueueId':_0x4cd1fc[_0xae13('0x4f')]['id']});}return _0x59fca1;});}})['then'](function(_0x5ff432){_0x1096fe=_0x5ff432||[];if(_0xa1aa0){return db[_0xae13('0x70')][_0xae13('0x4c')]({'where':{'id':_0x4cd1fc[_0xae13('0x51')][_0xae13('0x91')]},'attributes':['id',_0xae13('0x34'),_0xae13('0x97'),_0xae13('0x71'),_0xae13('0x72')],'raw':!![]});}})['then'](function(_0x1b0f48){if(!_[_0xae13('0x98')](_0x1b0f48)){var _0x1c470d=[];for(var _0x14b705=0x0;_0x14b705<_0x1b0f48[_0xae13('0x42')];_0x14b705++){if(_0x1b0f48[_0x14b705]['online']){_0x1c470d[_0xae13('0x99')](db[_0xae13('0x93')][_0xae13('0x7b')]({'membername':_0x1b0f48[_0x14b705]['name'],'UserId':_0x1b0f48[_0x14b705]['id'],'queue_name':_0xa1aa0[_0xae13('0x34')],'VoiceQueueId':_0xa1aa0['id'],'interface':_['isNil'](_0x1b0f48[_0x14b705][_0xae13('0x72')])?util[_0xae13('0x7d')](_0xae13('0x7e'),_0x1b0f48[_0x14b705]['name']):_0x1b0f48[_0x14b705][_0xae13('0x72')],'paused':_0x1b0f48[_0x14b705][_0xae13('0x71')]||![],'penalty':_0x4cd1fc[_0xae13('0x51')][_0xae13('0x74')]||0x0}));}}return BPromise[_0xae13('0x8e')](_0x1c470d);}})[_0xae13('0x36')](function(){return _0x1096fe;})['then'](respondWithResult(_0x4e0710,null))['catch'](handleError(_0x4e0710,null));};exports[_0xae13('0x92')]=function(_0x31b6fd,_0x2c0f91,_0x2607e5){return db['VoiceQueue'][_0xae13('0x33')]({'where':{'id':_0x31b6fd[_0xae13('0x4f')]['id']}})['then'](handleEntityNotFound(_0x2c0f91,null))[_0xae13('0x36')](function(_0x142405){if(_0x142405){return _0x142405[_0xae13('0x92')](_0x31b6fd[_0xae13('0x3e')][_0xae13('0x91')])[_0xae13('0x36')](function(){if(_[_0xae13('0x9a')](_0x31b6fd[_0xae13('0x3e')][_0xae13('0x91')])){for(var _0x2b6db6=0x0;_0x2b6db6<_0x31b6fd['query'][_0xae13('0x91')]['length'];_0x2b6db6+=0x1){socket[_0xae13('0x94')](_0xae13('0x9b'),{'UserId':Number(_0x31b6fd[_0xae13('0x3e')][_0xae13('0x91')][_0x2b6db6]),'VoiceQueueId':Number(_0x31b6fd[_0xae13('0x4f')]['id'])});}}else{socket[_0xae13('0x94')](_0xae13('0x9b'),{'UserId':Number(_0x31b6fd[_0xae13('0x3e')]['ids']),'VoiceQueueId':Number(_0x31b6fd['params']['id'])});}});}})[_0xae13('0x36')](function(_0x8b2855){return db[_0xae13('0x93')][_0xae13('0x2a')]({'where':{'VoiceQueueId':_0x31b6fd['params']['id'],'UserId':_0x31b6fd['query'][_0xae13('0x91')]}})[_0xae13('0x36')](function(){return _0x8b2855;});})[_0xae13('0x36')](respondWithStatusCode(_0x2c0f91,null))[_0xae13('0x4e')](handleError(_0x2c0f91,null));};exports[_0xae13('0x9c')]=function(_0x220f78,_0x54a4d8,_0x4eb7f7){var _0xb6beb7={};var _0x597784={};var _0x154cfb;var _0x4cb2bd;return db['VoiceQueue'][_0xae13('0x62')]({'where':{'id':_0x220f78['params']['id']}})[_0xae13('0x36')](handleEntityNotFound(_0x54a4d8,null))[_0xae13('0x36')](function(_0x58a7e6){if(_0x58a7e6){_0x154cfb=_0x58a7e6;_0x597784[_0xae13('0x3c')]=_[_0xae13('0x3d')](db[_0xae13('0x70')][_0xae13('0x58')]);_0x597784[_0xae13('0x3e')]=_['keys'](_0x220f78[_0xae13('0x3e')]);_0x597784['filters']=_[_0xae13('0x40')](_0x597784[_0xae13('0x3c')],_0x597784[_0xae13('0x3e')]);_0xb6beb7[_0xae13('0x3f')]=_[_0xae13('0x40')](_0x597784['model'],qs['fields'](_0x220f78[_0xae13('0x3e')][_0xae13('0x41')]));_0xb6beb7[_0xae13('0x3f')]=_0xb6beb7['attributes']['length']?_0xb6beb7[_0xae13('0x3f')]:_0x597784['model'];_0xb6beb7['order']=qs[_0xae13('0x44')](_0x220f78['query'][_0xae13('0x44')]);_0xb6beb7['where']=qs[_0xae13('0x46')](_[_0xae13('0x47')](_0x220f78[_0xae13('0x3e')],_0x597784[_0xae13('0x46')]));if(_0x220f78[_0xae13('0x3e')][_0xae13('0x2e')]){_0xb6beb7[_0xae13('0x45')]=_[_0xae13('0x48')](_0xb6beb7[_0xae13('0x45')],{'$or':_[_0xae13('0x2f')](_0xb6beb7[_0xae13('0x3f')],function(_0x316973){var _0x311f4f={};_0x311f4f[_0x316973]={'$like':'%'+_0x220f78[_0xae13('0x3e')]['filter']+'%'};return _0x311f4f;})});}_0xb6beb7=_['merge']({},_0xb6beb7,_0x220f78[_0xae13('0x5a')]);return _0x154cfb[_0xae13('0x9c')](_0xb6beb7);}})[_0xae13('0x36')](function(_0x32542d){if(_0x32542d){_0x4cb2bd=_0x32542d[_0xae13('0x42')];if(!_0x220f78[_0xae13('0x3e')]['hasOwnProperty'](_0xae13('0x67'))){_0xb6beb7[_0xae13('0x23')]=qs[_0xae13('0x23')](_0x220f78[_0xae13('0x3e')][_0xae13('0x23')]);_0xb6beb7[_0xae13('0x22')]=qs['offset'](_0x220f78['query']['offset']);}return _0x154cfb['getAgents'](_0xb6beb7);}})[_0xae13('0x36')](function(_0x283a9a){if(_0x283a9a){return _0x283a9a?{'count':_0x4cb2bd,'rows':_0x283a9a}:null;}})[_0xae13('0x36')](respondWithResult(_0x54a4d8,null))[_0xae13('0x4e')](handleError(_0x54a4d8,null));};exports['getMembers']=function(_0x457e94,_0x27e34a,_0x18c92b){var _0x20cb87={};var _0x579a29={};var _0x1694cc;var _0x10ada8;return db['VoiceQueue'][_0xae13('0x62')]({'where':{'id':_0x457e94[_0xae13('0x4f')]['id']}})[_0xae13('0x36')](handleEntityNotFound(_0x27e34a,null))[_0xae13('0x36')](function(_0x401203){if(_0x401203){_0x1694cc=_0x401203;_0x579a29[_0xae13('0x3c')]=_[_0xae13('0x3d')](db[_0xae13('0x93')]['rawAttributes']);_0x579a29[_0xae13('0x3e')]=_[_0xae13('0x3d')](_0x457e94[_0xae13('0x3e')]);_0x579a29[_0xae13('0x46')]=_[_0xae13('0x40')](_0x579a29[_0xae13('0x3c')],_0x579a29[_0xae13('0x3e')]);_0x20cb87[_0xae13('0x3f')]=_[_0xae13('0x40')](_0x579a29['model'],qs[_0xae13('0x41')](_0x457e94[_0xae13('0x3e')][_0xae13('0x41')]));_0x20cb87[_0xae13('0x3f')]=_0x20cb87[_0xae13('0x3f')][_0xae13('0x42')]?_0x20cb87[_0xae13('0x3f')]:_0x579a29[_0xae13('0x3c')];_0x20cb87['order']=qs['sort'](_0x457e94['query'][_0xae13('0x44')]);_0x20cb87[_0xae13('0x45')]=qs[_0xae13('0x46')](_[_0xae13('0x47')](_0x457e94[_0xae13('0x3e')],_0x579a29[_0xae13('0x46')]));if(_0x457e94[_0xae13('0x3e')][_0xae13('0x2e')]){_0x20cb87[_0xae13('0x45')]=_[_0xae13('0x48')](_0x20cb87[_0xae13('0x45')],{'$or':_[_0xae13('0x2f')](_0x20cb87[_0xae13('0x3f')],function(_0x16eb1d){var _0x2b4f99={};_0x2b4f99[_0x16eb1d]={'$like':'%'+_0x457e94['query'][_0xae13('0x2e')]+'%'};return _0x2b4f99;})});}_0x20cb87=_[_0xae13('0x48')]({},_0x20cb87,_0x457e94[_0xae13('0x5a')]);return _0x1694cc[_0xae13('0x9d')](_0x20cb87);}})['then'](function(_0x404c14){if(_0x404c14){_0x10ada8=_0x404c14[_0xae13('0x42')];if(!_0x457e94[_0xae13('0x3e')][_0xae13('0x43')](_0xae13('0x67'))){_0x20cb87['limit']=qs['limit'](_0x457e94[_0xae13('0x3e')][_0xae13('0x23')]);_0x20cb87[_0xae13('0x22')]=qs[_0xae13('0x22')](_0x457e94[_0xae13('0x3e')]['offset']);}return _0x1694cc[_0xae13('0x9d')](_0x20cb87);}})['then'](function(_0x1cac65){return _0x1cac65?{'count':_0x10ada8,'rows':_0x1cac65}:null;})[_0xae13('0x36')](respondWithResult(_0x27e34a,null))[_0xae13('0x4e')](handleError(_0x27e34a,null));};exports[_0xae13('0x9e')]=function(_0x53cb5d,_0x20ef03,_0x2fab18){var _0x4d21a2={};var _0x3009ed={};var _0x484fba;var _0x4efe0a;return db[_0xae13('0x3b')][_0xae13('0x62')]({'where':{'id':_0x53cb5d[_0xae13('0x4f')]['id']}})[_0xae13('0x36')](handleEntityNotFound(_0x20ef03,null))['then'](function(_0x29e2bc){if(_0x29e2bc){_0x484fba=_0x29e2bc;_0x3009ed['model']=_['keys'](db[_0xae13('0x9f')][_0xae13('0x58')]);_0x3009ed[_0xae13('0x3e')]=_[_0xae13('0x3d')](_0x53cb5d[_0xae13('0x3e')]);_0x3009ed[_0xae13('0x46')]=_[_0xae13('0x40')](_0x3009ed[_0xae13('0x3c')],_0x3009ed[_0xae13('0x3e')]);_0x4d21a2[_0xae13('0x3f')]=_[_0xae13('0x40')](_0x3009ed[_0xae13('0x3c')],qs['fields'](_0x53cb5d['query'][_0xae13('0x41')]));_0x4d21a2[_0xae13('0x3f')]=_0x4d21a2[_0xae13('0x3f')][_0xae13('0x42')]?_0x4d21a2['attributes']:_0x3009ed['model'];_0x4d21a2['order']=qs['sort'](_0x53cb5d[_0xae13('0x3e')][_0xae13('0x44')]);_0x4d21a2['where']=qs[_0xae13('0x46')](_['pick'](_0x53cb5d[_0xae13('0x3e')],_0x3009ed[_0xae13('0x46')]));if(_0x53cb5d[_0xae13('0x3e')][_0xae13('0x2e')]){_0x4d21a2[_0xae13('0x45')]=_['merge'](_0x4d21a2[_0xae13('0x45')],{'$or':_[_0xae13('0x2f')](_0x4d21a2[_0xae13('0x3f')],function(_0x128010){var _0x56573a={};_0x56573a[_0x128010]={'$like':'%'+_0x53cb5d['query'][_0xae13('0x2e')]+'%'};return _0x56573a;})});}_0x4d21a2=_[_0xae13('0x48')]({},_0x4d21a2,_0x53cb5d['options']);return _0x484fba[_0xae13('0x9e')](_0x4d21a2);}})[_0xae13('0x36')](function(_0x7db5bf){if(_0x7db5bf){_0x4efe0a=_0x7db5bf[_0xae13('0x42')];if(!_0x53cb5d['query'][_0xae13('0x43')](_0xae13('0x67'))){_0x4d21a2[_0xae13('0x23')]=qs[_0xae13('0x23')](_0x53cb5d['query'][_0xae13('0x23')]);_0x4d21a2[_0xae13('0x22')]=qs[_0xae13('0x22')](_0x53cb5d[_0xae13('0x3e')][_0xae13('0x22')]);}return _0x484fba[_0xae13('0x9e')](_0x4d21a2);}})[_0xae13('0x36')](function(_0x165511){if(_0x165511){return _0x165511?{'count':_0x4efe0a,'rows':_0x165511}:null;}})[_0xae13('0x36')](respondWithResult(_0x20ef03,null))['catch'](handleError(_0x20ef03,null));};exports['addLists']=function(_0x39f92e,_0x525c49,_0x3a2ce7){var _0x19e690,_0x3099cb;return db[_0xae13('0x3b')][_0xae13('0x33')]({'where':{'id':_0x39f92e[_0xae13('0x4f')]['id']}})[_0xae13('0x36')](handleEntityNotFound(_0x525c49,null))[_0xae13('0x36')](function(_0x36b088){if(_0x36b088){_0x3099cb=_0x36b088;return _0x36b088[_0xae13('0xa0')](_0x39f92e[_0xae13('0x51')][_0xae13('0x91')],_[_0xae13('0x5b')](_0x39f92e[_0xae13('0x51')],[_0xae13('0x91'),'id'])||{});}return null;})['spread'](function(_0x206bd3){var _0xf5d8c3;_0x19e690=_0x206bd3||[];var _0x3b3f7d=[];if(_0x206bd3){for(var _0x5b9c4e=0x0;_0x5b9c4e<_0x206bd3[_0xae13('0x42')];_0x5b9c4e+=0x1){var _0x2a0fd0=_0x206bd3[_0x5b9c4e][_0xae13('0x53')]({'plain':!![]});_0x3099cb[_0xae13('0xa1')]=_0x39f92e[_0xae13('0x51')][_0xae13('0xa1')]?_0x39f92e[_0xae13('0x51')][_0xae13('0xa1')]:_0x3099cb[_0xae13('0xa1')];switch(_0x3099cb[_0xae13('0xa1')]){case'always':_0xf5d8c3=squel[_0xae13('0xa2')]()[_0xae13('0xa3')]('cm_hopper')['fromQuery']([_0xae13('0xa4'),_0xae13('0xa5'),_0xae13('0xa6'),_0xae13('0xa7'),_0xae13('0x68'),_0xae13('0x5c'),_0xae13('0x5d')],squel['select']()[_0xae13('0x4a')]('phone',_0xae13('0xa4'))[_0xae13('0x4a')]('NOW()','scheduledAt')[_0xae13('0x4a')]('id',_0xae13('0xa6'))[_0xae13('0x4a')](_0x2a0fd0[_0xae13('0xa8')]['toString'](),_0xae13('0xa7'))[_0xae13('0x4a')](_0x39f92e[_0xae13('0x4f')]['id']['toString'](),_0xae13('0x68'))[_0xae13('0x4a')](_0xae13('0xa9'),_0xae13('0x5c'))['field'](_0xae13('0xa9'),_0xae13('0x5d'))[_0xae13('0x83')](_0xae13('0xaa'))['where'](_0xae13('0xab'))[_0xae13('0x45')]('ListId\x20=\x20?',_0x2a0fd0[_0xae13('0xa8')][_0xae13('0x89')]())[_0xae13('0x45')]('phone\x20IS\x20NOT\x20NULL')[_0xae13('0x45')]('phone\x20NOT\x20IN\x20(?)',squel[_0xae13('0x81')]()[_0xae13('0x4a')]('COALESCE(calleridnum,\x27\x27)')[_0xae13('0x83')](_0xae13('0xac'))[_0xae13('0x45')](_0xae13('0x87'),_0x39f92e['params']['id']['toString']()))[_0xae13('0x45')](_0xae13('0xad'),squel[_0xae13('0x81')]()['field'](_0xae13('0xae'))[_0xae13('0x83')]('cm_hopper')[_0xae13('0x45')](_0xae13('0x87'),_0x39f92e[_0xae13('0x4f')]['id'][_0xae13('0x89')]())))[_0xae13('0x89')]();break;case _0xae13('0xaf'):_0xf5d8c3=squel[_0xae13('0xa2')]()[_0xae13('0xa3')]('cm_hopper')['fromQuery']([_0xae13('0xa4'),'scheduledAt','ContactId','ListId','VoiceQueueId',_0xae13('0x5c'),'updatedAt'],squel['select']()[_0xae13('0x4a')](_0xae13('0xa4'),'phone')['field'](_0xae13('0xa9'),_0xae13('0xa5'))[_0xae13('0x4a')]('id',_0xae13('0xa6'))[_0xae13('0x4a')](_0x2a0fd0[_0xae13('0xa8')][_0xae13('0x89')](),_0xae13('0xa7'))['field'](_0x39f92e[_0xae13('0x4f')]['id'][_0xae13('0x89')](),_0xae13('0x68'))['field']('NOW()',_0xae13('0x5c'))[_0xae13('0x4a')]('NOW()',_0xae13('0x5d'))[_0xae13('0x83')](_0xae13('0xaa'))['where'](_0xae13('0xab'))[_0xae13('0x45')](_0xae13('0xb0'),_0x2a0fd0[_0xae13('0xa8')][_0xae13('0x89')]())[_0xae13('0x45')](_0xae13('0xb1'))[_0xae13('0x45')]('phone\x20NOT\x20IN\x20(?)',squel[_0xae13('0x81')]()[_0xae13('0x4a')](_0xae13('0xae'))['from']('cm_hopper')['where']('VoiceQueueId\x20=\x20?',_0x39f92e[_0xae13('0x4f')]['id'][_0xae13('0x89')]())))[_0xae13('0x89')]();break;default:_0xf5d8c3=squel[_0xae13('0xa2')]()[_0xae13('0xa3')](_0xae13('0xb2'))[_0xae13('0xb3')]([_0xae13('0xa4'),'scheduledAt','ContactId','ListId',_0xae13('0x68'),_0xae13('0x5c'),_0xae13('0x5d')],squel[_0xae13('0x81')]()[_0xae13('0x4a')](_0xae13('0xa4'),_0xae13('0xa4'))[_0xae13('0x4a')]('NOW()',_0xae13('0xa5'))[_0xae13('0x4a')]('id',_0xae13('0xa6'))[_0xae13('0x4a')](_0x2a0fd0['CmListId'][_0xae13('0x89')](),_0xae13('0xa7'))[_0xae13('0x4a')](_0x39f92e[_0xae13('0x4f')]['id'][_0xae13('0x89')](),_0xae13('0x68'))[_0xae13('0x4a')](_0xae13('0xa9'),_0xae13('0x5c'))['field'](_0xae13('0xa9'),_0xae13('0x5d'))[_0xae13('0x83')](_0xae13('0xaa'))[_0xae13('0x45')](_0xae13('0xab'))[_0xae13('0x45')](_0xae13('0xb0'),_0x2a0fd0['CmListId'][_0xae13('0x89')]())[_0xae13('0x45')](_0xae13('0xb1')))[_0xae13('0x89')]();}_0x3b3f7d[_0xae13('0x99')](db[_0xae13('0x76')][_0xae13('0x3e')](_0xf5d8c3));}return BPromise[_0xae13('0x8e')](_0x3b3f7d);}})[_0xae13('0x36')](function(){return _0x19e690;})['then'](respondWithResult(_0x525c49,null))[_0xae13('0x4e')](handleError(_0x525c49,null));};exports[_0xae13('0xb4')]=function(_0x40ef98,_0x5ec3ca,_0x5954b7){return db[_0xae13('0x3b')]['find']({'where':{'id':_0x40ef98[_0xae13('0x4f')]['id']}})['then'](handleEntityNotFound(_0x5ec3ca,null))['then'](function(_0x54b82c){if(_0x54b82c){return _0x54b82c[_0xae13('0xb4')](_0x40ef98[_0xae13('0x3e')]['ids']);}})[_0xae13('0x36')](function(_0x248325){if(_0x248325){return db[_0xae13('0x63')][_0xae13('0x2a')]({'where':{'ListId':_0x40ef98[_0xae13('0x3e')][_0xae13('0x91')],'VoiceQueueId':_0x40ef98['params']['id']}})[_0xae13('0x36')](function(){return _0x248325;});}})['then'](respondWithStatusCode(_0x5ec3ca,null))[_0xae13('0x4e')](handleError(_0x5ec3ca,null));};exports[_0xae13('0xb5')]=function(_0x3d9381,_0x505e9d,_0x304739){var _0x3b892f={};var _0x10fc5c={};var _0x2c190d;var _0x5b424c;return db['VoiceQueue'][_0xae13('0x62')]({'where':{'id':_0x3d9381[_0xae13('0x4f')]['id']}})['then'](handleEntityNotFound(_0x505e9d,null))['then'](function(_0x11cdad){if(_0x11cdad){_0x2c190d=_0x11cdad;_0x10fc5c['model']=_[_0xae13('0x3d')](db[_0xae13('0x9f')][_0xae13('0x58')]);_0x10fc5c['query']=_[_0xae13('0x3d')](_0x3d9381[_0xae13('0x3e')]);_0x10fc5c[_0xae13('0x46')]=_[_0xae13('0x40')](_0x10fc5c['model'],_0x10fc5c[_0xae13('0x3e')]);_0x3b892f[_0xae13('0x3f')]=_[_0xae13('0x40')](_0x10fc5c[_0xae13('0x3c')],qs[_0xae13('0x41')](_0x3d9381[_0xae13('0x3e')]['fields']));_0x3b892f[_0xae13('0x3f')]=_0x3b892f[_0xae13('0x3f')][_0xae13('0x42')]?_0x3b892f['attributes']:_0x10fc5c[_0xae13('0x3c')];_0x3b892f[_0xae13('0x64')]=qs['sort'](_0x3d9381[_0xae13('0x3e')][_0xae13('0x44')]);_0x3b892f[_0xae13('0x45')]=qs[_0xae13('0x46')](_['pick'](_0x3d9381[_0xae13('0x3e')],_0x10fc5c[_0xae13('0x46')]));if(_0x3d9381[_0xae13('0x3e')]['filter']){_0x3b892f[_0xae13('0x45')]=_[_0xae13('0x48')](_0x3b892f['where'],{'$or':_['map'](_0x3b892f[_0xae13('0x3f')],function(_0x353bc9){var _0x31a737={};_0x31a737[_0x353bc9]={'$like':'%'+_0x3d9381['query']['filter']+'%'};return _0x31a737;})});}_0x3b892f=_[_0xae13('0x48')]({},_0x3b892f,_0x3d9381[_0xae13('0x5a')]);return _0x2c190d[_0xae13('0xb5')](_0x3b892f);}})[_0xae13('0x36')](function(_0xb94e15){if(_0xb94e15){_0x5b424c=_0xb94e15[_0xae13('0x42')];if(!_0x3d9381[_0xae13('0x3e')]['hasOwnProperty'](_0xae13('0x67'))){_0x3b892f[_0xae13('0x23')]=qs[_0xae13('0x23')](_0x3d9381[_0xae13('0x3e')][_0xae13('0x23')]);_0x3b892f[_0xae13('0x22')]=qs[_0xae13('0x22')](_0x3d9381[_0xae13('0x3e')]['offset']);}return _0x2c190d[_0xae13('0xb5')](_0x3b892f);}})[_0xae13('0x36')](function(_0x4d4c5a){if(_0x4d4c5a){return _0x4d4c5a?{'count':_0x5b424c,'rows':_0x4d4c5a}:null;}})['then'](respondWithResult(_0x505e9d,null))[_0xae13('0x4e')](handleError(_0x505e9d,null));};exports[_0xae13('0xb6')]=function(_0x520ec9,_0x1cbd66,_0x1cb104){var _0x4bd624,_0x495d98;return db[_0xae13('0x3b')]['find']({'where':{'id':_0x520ec9['params']['id']}})[_0xae13('0x36')](handleEntityNotFound(_0x1cbd66,null))['then'](function(_0x253739){if(_0x253739){_0x495d98=_0x253739;return _0x253739[_0xae13('0xb6')](_0x520ec9[_0xae13('0x51')][_0xae13('0x91')],_['omit'](_0x520ec9[_0xae13('0x51')],['ids','id'])||{});}return null;})[_0xae13('0x96')](function(_0x3bb5bc){var _0x57f2f4;_0x4bd624=_0x3bb5bc||[];var _0x36c1fe=[];if(_0x3bb5bc){for(var _0x31bf82=0x0;_0x31bf82<_0x3bb5bc[_0xae13('0x42')];_0x31bf82+=0x1){var _0x4d6145=_0x3bb5bc[_0x31bf82][_0xae13('0x53')]({'plain':!![]});_0x57f2f4=squel[_0xae13('0xa2')]()[_0xae13('0xa3')](_0xae13('0xb7'))['fromQuery']([_0xae13('0xa4'),_0xae13('0xa6'),_0xae13('0xa7'),_0xae13('0x68'),_0xae13('0x5c'),_0xae13('0x5d')],squel['select']()[_0xae13('0x4a')]('phone',_0xae13('0xa4'))[_0xae13('0x4a')]('id',_0xae13('0xa6'))['field'](_0x4d6145[_0xae13('0xa8')][_0xae13('0x89')](),_0xae13('0xa7'))[_0xae13('0x4a')](_0x520ec9[_0xae13('0x4f')]['id'][_0xae13('0x89')](),'VoiceQueueId')[_0xae13('0x4a')]('NOW()',_0xae13('0x5c'))[_0xae13('0x4a')](_0xae13('0xa9'),_0xae13('0x5d'))[_0xae13('0x83')](_0xae13('0xaa'))[_0xae13('0x45')](_0xae13('0xab'))[_0xae13('0x45')](_0xae13('0xb0'),_0x4d6145[_0xae13('0xa8')]['toString']())[_0xae13('0x45')](_0xae13('0xb1')))[_0xae13('0x89')]();_0x36c1fe['push'](db[_0xae13('0x76')][_0xae13('0x3e')](_0x57f2f4));}return BPromise[_0xae13('0x8e')](_0x36c1fe);}})[_0xae13('0x36')](function(){return _0x4bd624;})[_0xae13('0x36')](respondWithResult(_0x1cbd66,null))[_0xae13('0x4e')](handleError(_0x1cbd66,null));};exports['removeBlackLists']=function(_0x843a8f,_0x496b17,_0x2ffde7){return db[_0xae13('0x3b')][_0xae13('0x33')]({'where':{'id':_0x843a8f[_0xae13('0x4f')]['id']}})['then'](handleEntityNotFound(_0x496b17,null))['then'](function(_0x3f41a0){if(_0x3f41a0){return _0x3f41a0['removeBlackLists'](_0x843a8f[_0xae13('0x3e')][_0xae13('0x91')]);}})[_0xae13('0x36')](function(_0xb02d5e){if(_0xb02d5e){return db[_0xae13('0x6b')]['destroy']({'where':{'ListId':_0x843a8f[_0xae13('0x3e')][_0xae13('0x91')],'VoiceQueueId':_0x843a8f['params']['id']}})[_0xae13('0x36')](function(){return _0xb02d5e;});}})[_0xae13('0x36')](respondWithStatusCode(_0x496b17,null))[_0xae13('0x4e')](handleError(_0x496b17,null));};
\ No newline at end of file
index 6d1c0e8..48a6226 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb938=['remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','VoiceQueue','setMaxListeners','update'];(function(_0x45061a,_0x12990a){var _0x37c9d7=function(_0xceed6a){while(--_0xceed6a){_0x45061a['push'](_0x45061a['shift']());}};_0x37c9d7(++_0x12990a);}(_0xb938,0x91));var _0x8b93=function(_0x3db34c,_0x111f90){_0x3db34c=_0x3db34c-0x0;var _0x1296d1=_0xb938[_0x3db34c];return _0x1296d1;};'use strict';var EventEmitter=require(_0x8b93('0x0'));var VoiceQueue=require(_0x8b93('0x1'))['db'][_0x8b93('0x2')];var VoiceQueueEvents=new EventEmitter();VoiceQueueEvents[_0x8b93('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x8b93('0x4'),'afterDestroy':_0x8b93('0x5')};function emitEvent(_0x235010){return function(_0x10e667,_0x4e55bb,_0x4f0571){VoiceQueueEvents[_0x8b93('0x6')](_0x235010+':'+_0x10e667['id'],_0x10e667);VoiceQueueEvents[_0x8b93('0x6')](_0x235010,_0x10e667);_0x4f0571(null);};}for(var e in events){if(events[_0x8b93('0x7')](e)){var event=events[e];VoiceQueue[_0x8b93('0x8')](e,emitEvent(event));}}module[_0x8b93('0x9')]=VoiceQueueEvents;
\ No newline at end of file
+var _0x8f78=['setMaxListeners','save','update','remove','hasOwnProperty','hook','exports','events','../../mysqldb','VoiceQueue'];(function(_0x3808b5,_0x5907a0){var _0x352c3d=function(_0x334e63){while(--_0x334e63){_0x3808b5['push'](_0x3808b5['shift']());}};_0x352c3d(++_0x5907a0);}(_0x8f78,0x7f));var _0x88f7=function(_0x42245d,_0x51758f){_0x42245d=_0x42245d-0x0;var _0x4b211a=_0x8f78[_0x42245d];return _0x4b211a;};'use strict';var EventEmitter=require(_0x88f7('0x0'));var VoiceQueue=require(_0x88f7('0x1'))['db'][_0x88f7('0x2')];var VoiceQueueEvents=new EventEmitter();VoiceQueueEvents[_0x88f7('0x3')](0x0);var events={'afterCreate':_0x88f7('0x4'),'afterUpdate':_0x88f7('0x5'),'afterDestroy':_0x88f7('0x6')};function emitEvent(_0x137176){return function(_0x1e6359,_0x47d633,_0x2a6a5b){VoiceQueueEvents['emit'](_0x137176+':'+_0x1e6359['id'],_0x1e6359);VoiceQueueEvents['emit'](_0x137176,_0x1e6359);_0x2a6a5b(null);};}for(var e in events){if(events[_0x88f7('0x7')](e)){var event=events[e];VoiceQueue[_0x88f7('0x8')](e,emitEvent(event));}}module[_0x88f7('0x9')]=VoiceQueueEvents;
\ No newline at end of file
index 574f595..5be8552 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf4eb=['./voiceQueue.attributes','exports','define','voice_queues','lodash','bluebird','rimraf','../../config/environment'];(function(_0x13b53d,_0x2d40c6){var _0x45c927=function(_0x2973fc){while(--_0x2973fc){_0x13b53d['push'](_0x13b53d['shift']());}};_0x45c927(++_0x2d40c6);}(_0xf4eb,0xec));var _0xbf4e=function(_0x3303bd,_0x13f5d3){_0x3303bd=_0x3303bd-0x0;var _0x13ad50=_0xf4eb[_0x3303bd];return _0x13ad50;};'use strict';var _=require(_0xbf4e('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require('moment');var BPromise=require(_0xbf4e('0x1'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0xbf4e('0x2'));var config=require(_0xbf4e('0x3'));var attributes=require(_0xbf4e('0x4'));module[_0xbf4e('0x5')]=function(_0xa4dcf5,_0x2fcfed){return _0xa4dcf5[_0xbf4e('0x6')]('VoiceQueue',attributes,{'tableName':_0xbf4e('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6cb4=['bluebird','request-promise','path','rimraf','./voiceQueue.attributes','define','VoiceQueue','voice_queues','lodash','util','../../config/logger','api','moment'];(function(_0x1762fb,_0x9cc278){var _0x3e2110=function(_0x345039){while(--_0x345039){_0x1762fb['push'](_0x1762fb['shift']());}};_0x3e2110(++_0x9cc278);}(_0x6cb4,0xff));var _0x46cb=function(_0x213cfc,_0x344a39){_0x213cfc=_0x213cfc-0x0;var _0x3075ed=_0x6cb4[_0x213cfc];return _0x3075ed;};'use strict';var _=require(_0x46cb('0x0'));var util=require(_0x46cb('0x1'));var logger=require(_0x46cb('0x2'))(_0x46cb('0x3'));var moment=require(_0x46cb('0x4'));var BPromise=require(_0x46cb('0x5'));var rp=require(_0x46cb('0x6'));var fs=require('fs');var path=require(_0x46cb('0x7'));var rimraf=require(_0x46cb('0x8'));var config=require('../../config/environment');var attributes=require(_0x46cb('0x9'));module['exports']=function(_0x3d9d3c,_0x4d9f1d){return _0x3d9d3c[_0x46cb('0xa')](_0x46cb('0xb'),attributes,{'tableName':_0x46cb('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index b7459d6..2e83574 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['register','VoiceQueue,\x20%s,\x20%s','request\x20sent','debug','VoiceQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','GetVoiceQueue','findAll','options','raw','where','attributes','limit','include','map','model','then','ShowVoiceQueue','VoiceQueue','lodash','util','moment','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','redis','defaults','socket.io-emitter'];(function(_0x48054e,_0x447bd3){var _0x12cbd3=function(_0x343a75){while(--_0x343a75){_0x48054e['push'](_0x48054e['shift']());}};_0x12cbd3(++_0x447bd3);}(_0xa9e0,0x123));var _0x0a9e=function(_0x34bf97,_0xc60f9d){_0x34bf97=_0x34bf97-0x0;var _0x292719=_0xa9e0[_0x34bf97];return _0x292719;};'use strict';var _=require(_0x0a9e('0x0'));var util=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x0a9e('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x0a9e('0x4'));var logger=require(_0x0a9e('0x5'))(_0x0a9e('0x6'));var config=require(_0x0a9e('0x7'));var jayson=require(_0x0a9e('0x8'));var client=jayson['client'][_0x0a9e('0x9')]({'port':0x232a});config[_0x0a9e('0xa')]=_[_0x0a9e('0xb')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0x0a9e('0xc'))(new Redis(config['redis']));require('./voiceQueue.socket')[_0x0a9e('0xd')](socket);function respondWithRpcPromise(_0xf81284,_0x307b3e,_0x3ab53f){return new BPromise(function(_0xfeb75b,_0xbd1168){return client['request'](_0xf81284,_0x3ab53f)['then'](function(_0x527cdd){logger['info'](_0x0a9e('0xe'),_0x307b3e,_0x0a9e('0xf'));logger[_0x0a9e('0x10')](_0x0a9e('0x11'),_0x307b3e,_0x0a9e('0xf'),JSON[_0x0a9e('0x12')](_0x527cdd));if(_0x527cdd['error']){if(_0x527cdd[_0x0a9e('0x13')][_0x0a9e('0x14')]===0x1f4){logger[_0x0a9e('0x13')](_0x0a9e('0xe'),_0x307b3e,_0x527cdd[_0x0a9e('0x13')][_0x0a9e('0x15')]);return _0xbd1168(_0x527cdd['error'][_0x0a9e('0x15')]);}logger['error'](_0x0a9e('0xe'),_0x307b3e,_0x527cdd['error'][_0x0a9e('0x15')]);return _0xfeb75b(_0x527cdd[_0x0a9e('0x13')]['message']);}else{logger[_0x0a9e('0x16')]('VoiceQueue,\x20%s,\x20%s',_0x307b3e,_0x0a9e('0xf'));_0xfeb75b(_0x527cdd[_0x0a9e('0x17')][_0x0a9e('0x15')]);}})[_0x0a9e('0x18')](function(_0x31b1ca){logger[_0x0a9e('0x13')](_0x0a9e('0xe'),_0x307b3e,_0x31b1ca);_0xbd1168(_0x31b1ca);});});}exports[_0x0a9e('0x19')]=function(_0x1314ae){var _0x112016=this;return new Promise(function(_0x1c696a,_0x105080){return db['VoiceQueue'][_0x0a9e('0x1a')]({'raw':_0x1314ae[_0x0a9e('0x1b')]?_0x1314ae['options'][_0x0a9e('0x1c')]===undefined?!![]:![]:!![],'where':_0x1314ae['options']?_0x1314ae['options'][_0x0a9e('0x1d')]||null:null,'attributes':_0x1314ae[_0x0a9e('0x1b')]?_0x1314ae[_0x0a9e('0x1b')][_0x0a9e('0x1e')]||null:null,'limit':_0x1314ae['options']?_0x1314ae[_0x0a9e('0x1b')][_0x0a9e('0x1f')]||null:null,'include':_0x1314ae[_0x0a9e('0x1b')]?_0x1314ae[_0x0a9e('0x1b')][_0x0a9e('0x20')]?_[_0x0a9e('0x21')](_0x1314ae[_0x0a9e('0x1b')]['include'],function(_0x59181e){return{'model':db[_0x59181e[_0x0a9e('0x22')]],'as':_0x59181e['as'],'attributes':_0x59181e[_0x0a9e('0x1e')],'include':_0x59181e[_0x0a9e('0x20')]?_[_0x0a9e('0x21')](_0x59181e['include'],function(_0x384319){return{'model':db[_0x384319['model']],'as':_0x384319['as'],'attributes':_0x384319[_0x0a9e('0x1e')],'include':_0x384319['include']?_[_0x0a9e('0x21')](_0x384319[_0x0a9e('0x20')],function(_0x25fba9){return{'model':db[_0x25fba9[_0x0a9e('0x22')]],'as':_0x25fba9['as'],'attributes':_0x25fba9[_0x0a9e('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x0a9e('0x23')](function(_0x11c3b6){logger[_0x0a9e('0x16')]('GetVoiceQueue',_0x1314ae);logger[_0x0a9e('0x10')](_0x0a9e('0x19'),_0x1314ae,JSON[_0x0a9e('0x12')](_0x11c3b6));_0x1c696a(_0x11c3b6);})[_0x0a9e('0x18')](function(_0x5c877d){logger[_0x0a9e('0x13')](_0x0a9e('0x19'),_0x5c877d[_0x0a9e('0x15')],_0x1314ae);_0x105080(_0x112016[_0x0a9e('0x13')](0x1f4,_0x5c877d[_0x0a9e('0x15')]));});});};exports[_0x0a9e('0x24')]=function(_0x296f41){var _0x2e8759=this;return new Promise(function(_0x1dbde2,_0x540530){return db[_0x0a9e('0x25')]['find']({'raw':_0x296f41[_0x0a9e('0x1b')]?_0x296f41[_0x0a9e('0x1b')][_0x0a9e('0x1c')]===undefined?!![]:![]:!![],'where':_0x296f41[_0x0a9e('0x1b')]?_0x296f41[_0x0a9e('0x1b')]['where']||null:null,'attributes':_0x296f41[_0x0a9e('0x1b')]?_0x296f41[_0x0a9e('0x1b')][_0x0a9e('0x1e')]||null:null,'include':_0x296f41[_0x0a9e('0x1b')]?_0x296f41[_0x0a9e('0x1b')][_0x0a9e('0x20')]?_[_0x0a9e('0x21')](_0x296f41[_0x0a9e('0x1b')]['include'],function(_0x44295a){return{'model':db[_0x44295a['model']],'as':_0x44295a['as'],'attributes':_0x44295a[_0x0a9e('0x1e')],'include':_0x44295a[_0x0a9e('0x20')]?_[_0x0a9e('0x21')](_0x44295a[_0x0a9e('0x20')],function(_0x567193){return{'model':db[_0x567193[_0x0a9e('0x22')]],'as':_0x567193['as'],'attributes':_0x567193[_0x0a9e('0x1e')],'include':_0x567193[_0x0a9e('0x20')]?_[_0x0a9e('0x21')](_0x567193['include'],function(_0x54135e){return{'model':db[_0x54135e[_0x0a9e('0x22')]],'as':_0x54135e['as'],'attributes':_0x54135e['attributes']};}):[]};}):[]};}):[]:[]})[_0x0a9e('0x23')](function(_0x3d9717){logger[_0x0a9e('0x16')](_0x0a9e('0x24'),_0x296f41);logger['debug'](_0x0a9e('0x24'),_0x296f41,JSON[_0x0a9e('0x12')](_0x3d9717));_0x1dbde2(_0x3d9717);})[_0x0a9e('0x18')](function(_0x533942){logger[_0x0a9e('0x13')](_0x0a9e('0x24'),_0x533942[_0x0a9e('0x15')],_0x296f41);_0x540530(_0x2e8759['error'](0x1f4,_0x533942['message']));});});};
\ No newline at end of file
+var _0x9957=['register','then','VoiceQueue,\x20%s,\x20%s','request\x20sent','debug','VoiceQueue,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','options','raw','where','attributes','limit','include','model','map','catch','GetVoiceQueue','ShowVoiceQueue','VoiceQueue','find','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','./voiceQueue.socket'];(function(_0x27e811,_0x1fad22){var _0x1bfe61=function(_0x2d8d02){while(--_0x2d8d02){_0x27e811['push'](_0x27e811['shift']());}};_0x1bfe61(++_0x1fad22);}(_0x9957,0x93));var _0x7995=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x9957[_0x2dafbe];return _0x58a45a;};'use strict';var _=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));var BPromise=require(_0x7995('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7995('0x4'));var db=require(_0x7995('0x5'))['db'];var utils=require(_0x7995('0x6'));var logger=require(_0x7995('0x7'))('rpc');var config=require(_0x7995('0x8'));var jayson=require(_0x7995('0x9'));var client=jayson[_0x7995('0xa')][_0x7995('0xb')]({'port':0x232a});config[_0x7995('0xc')]=_[_0x7995('0xd')](config['redis'],{'host':_0x7995('0xe'),'port':0x18eb});var socket=require(_0x7995('0xf'))(new Redis(config['redis']));require(_0x7995('0x10'))[_0x7995('0x11')](socket);function respondWithRpcPromise(_0x18c8a3,_0x35b5fe,_0x3c1d19){return new BPromise(function(_0x1e400a,_0x341672){return client['request'](_0x18c8a3,_0x3c1d19)[_0x7995('0x12')](function(_0x41c652){logger['info'](_0x7995('0x13'),_0x35b5fe,_0x7995('0x14'));logger[_0x7995('0x15')](_0x7995('0x16'),_0x35b5fe,_0x7995('0x14'),JSON[_0x7995('0x17')](_0x41c652));if(_0x41c652[_0x7995('0x18')]){if(_0x41c652['error']['code']===0x1f4){logger[_0x7995('0x18')](_0x7995('0x13'),_0x35b5fe,_0x41c652[_0x7995('0x18')][_0x7995('0x19')]);return _0x341672(_0x41c652[_0x7995('0x18')][_0x7995('0x19')]);}logger[_0x7995('0x18')](_0x7995('0x13'),_0x35b5fe,_0x41c652['error'][_0x7995('0x19')]);return _0x1e400a(_0x41c652['error'][_0x7995('0x19')]);}else{logger[_0x7995('0x1a')](_0x7995('0x13'),_0x35b5fe,_0x7995('0x14'));_0x1e400a(_0x41c652[_0x7995('0x1b')][_0x7995('0x19')]);}})['catch'](function(_0x54c9ae){logger[_0x7995('0x18')]('VoiceQueue,\x20%s,\x20%s',_0x35b5fe,_0x54c9ae);_0x341672(_0x54c9ae);});});}exports['GetVoiceQueue']=function(_0x3ec178){var _0x3d463e=this;return new Promise(function(_0x4cbe10,_0x3a9b54){return db['VoiceQueue']['findAll']({'raw':_0x3ec178[_0x7995('0x1c')]?_0x3ec178[_0x7995('0x1c')][_0x7995('0x1d')]===undefined?!![]:![]:!![],'where':_0x3ec178[_0x7995('0x1c')]?_0x3ec178[_0x7995('0x1c')][_0x7995('0x1e')]||null:null,'attributes':_0x3ec178['options']?_0x3ec178[_0x7995('0x1c')][_0x7995('0x1f')]||null:null,'limit':_0x3ec178[_0x7995('0x1c')]?_0x3ec178[_0x7995('0x1c')][_0x7995('0x20')]||null:null,'include':_0x3ec178[_0x7995('0x1c')]?_0x3ec178[_0x7995('0x1c')][_0x7995('0x21')]?_['map'](_0x3ec178[_0x7995('0x1c')][_0x7995('0x21')],function(_0x401dc3){return{'model':db[_0x401dc3[_0x7995('0x22')]],'as':_0x401dc3['as'],'attributes':_0x401dc3[_0x7995('0x1f')],'include':_0x401dc3[_0x7995('0x21')]?_['map'](_0x401dc3[_0x7995('0x21')],function(_0x5911c3){return{'model':db[_0x5911c3[_0x7995('0x22')]],'as':_0x5911c3['as'],'attributes':_0x5911c3[_0x7995('0x1f')],'include':_0x5911c3[_0x7995('0x21')]?_[_0x7995('0x23')](_0x5911c3[_0x7995('0x21')],function(_0x4b6f99){return{'model':db[_0x4b6f99[_0x7995('0x22')]],'as':_0x4b6f99['as'],'attributes':_0x4b6f99['attributes']};}):[]};}):[]};}):[]:[]})[_0x7995('0x12')](function(_0x3250e0){logger[_0x7995('0x1a')]('GetVoiceQueue',_0x3ec178);logger['debug']('GetVoiceQueue',_0x3ec178,JSON[_0x7995('0x17')](_0x3250e0));_0x4cbe10(_0x3250e0);})[_0x7995('0x24')](function(_0x327a81){logger[_0x7995('0x18')](_0x7995('0x25'),_0x327a81[_0x7995('0x19')],_0x3ec178);_0x3a9b54(_0x3d463e['error'](0x1f4,_0x327a81['message']));});});};exports[_0x7995('0x26')]=function(_0x5524af){var _0x553671=this;return new Promise(function(_0x3eb566,_0x29fac5){return db[_0x7995('0x27')][_0x7995('0x28')]({'raw':_0x5524af['options']?_0x5524af[_0x7995('0x1c')][_0x7995('0x1d')]===undefined?!![]:![]:!![],'where':_0x5524af['options']?_0x5524af['options']['where']||null:null,'attributes':_0x5524af[_0x7995('0x1c')]?_0x5524af[_0x7995('0x1c')]['attributes']||null:null,'include':_0x5524af[_0x7995('0x1c')]?_0x5524af['options'][_0x7995('0x21')]?_[_0x7995('0x23')](_0x5524af[_0x7995('0x1c')]['include'],function(_0x52d76d){return{'model':db[_0x52d76d[_0x7995('0x22')]],'as':_0x52d76d['as'],'attributes':_0x52d76d['attributes'],'include':_0x52d76d['include']?_[_0x7995('0x23')](_0x52d76d[_0x7995('0x21')],function(_0x5212ff){return{'model':db[_0x5212ff[_0x7995('0x22')]],'as':_0x5212ff['as'],'attributes':_0x5212ff[_0x7995('0x1f')],'include':_0x5212ff[_0x7995('0x21')]?_[_0x7995('0x23')](_0x5212ff[_0x7995('0x21')],function(_0x53002a){return{'model':db[_0x53002a[_0x7995('0x22')]],'as':_0x53002a['as'],'attributes':_0x53002a[_0x7995('0x1f')]};}):[]};}):[]};}):[]:[]})[_0x7995('0x12')](function(_0x1d60b8){logger['info'](_0x7995('0x26'),_0x5524af);logger[_0x7995('0x15')](_0x7995('0x26'),_0x5524af,JSON[_0x7995('0x17')](_0x1d60b8));_0x3eb566(_0x1d60b8);})[_0x7995('0x24')](function(_0x1035dc){logger['error'](_0x7995('0x26'),_0x1035dc[_0x7995('0x19')],_0x5524af);_0x29fac5(_0x553671[_0x7995('0x18')](0x1f4,_0x1035dc[_0x7995('0x19')]));});});};
\ No newline at end of file
index 74982bb..4d7c8b9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8227=['remove','update','emit','removeListener','register','voiceQueue:','./voiceQueue.events','save'];(function(_0x36884e,_0x48008f){var _0x1cc367=function(_0x388a78){while(--_0x388a78){_0x36884e['push'](_0x36884e['shift']());}};_0x1cc367(++_0x48008f);}(_0x8227,0x1e6));var _0x7822=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x8227[_0x321bb2];return _0x9c12ed;};'use strict';var VoiceQueueEvents=require(_0x7822('0x0'));var events=[_0x7822('0x1'),_0x7822('0x2'),_0x7822('0x3')];function createListener(_0x469a89,_0x18961c){return function(_0x3995c4){_0x18961c[_0x7822('0x4')](_0x469a89,_0x3995c4);};}function removeListener(_0x4b20c6,_0x8609c9){return function(){VoiceQueueEvents[_0x7822('0x5')](_0x4b20c6,_0x8609c9);};}exports[_0x7822('0x6')]=function(_0x51be1a){for(var _0x42c376=0x0,_0x307c07=events['length'];_0x42c376<_0x307c07;_0x42c376++){var _0x5327b9=events[_0x42c376];var _0x14915a=createListener(_0x7822('0x7')+_0x5327b9,_0x51be1a);VoiceQueueEvents['on'](_0x5327b9,_0x14915a);}};
\ No newline at end of file
+var _0x7a87=['register','length','./voiceQueue.events','save','remove','update','emit','removeListener'];(function(_0x123207,_0x298900){var _0x2a3b3c=function(_0x4d230a){while(--_0x4d230a){_0x123207['push'](_0x123207['shift']());}};_0x2a3b3c(++_0x298900);}(_0x7a87,0x132));var _0x77a8=function(_0x1e9658,_0x231076){_0x1e9658=_0x1e9658-0x0;var _0x2916b3=_0x7a87[_0x1e9658];return _0x2916b3;};'use strict';var VoiceQueueEvents=require(_0x77a8('0x0'));var events=[_0x77a8('0x1'),_0x77a8('0x2'),_0x77a8('0x3')];function createListener(_0x416b97,_0x249866){return function(_0x291ae5){_0x249866[_0x77a8('0x4')](_0x416b97,_0x291ae5);};}function removeListener(_0x39f961,_0x561016){return function(){VoiceQueueEvents[_0x77a8('0x5')](_0x39f961,_0x561016);};}exports[_0x77a8('0x6')]=function(_0x5916c3){for(var _0x5981cc=0x0,_0x5dd17c=events[_0x77a8('0x7')];_0x5981cc<_0x5dd17c;_0x5981cc++){var _0x3da09d=events[_0x5981cc];var _0x3256e4=createListener('voiceQueue:'+_0x3da09d,_0x5916c3);VoiceQueueEvents['on'](_0x3da09d,_0x3256e4);}};
\ No newline at end of file
index 2899e7b..3584424 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0deb=['index','/describe','isAuthenticated','/index','getVoiceQueuesReport','/:id','show','post','create','put','update','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceQueueReport.controller','get'];(function(_0x33080e,_0x1c600a){var _0x407395=function(_0x5b62fd){while(--_0x5b62fd){_0x33080e['push'](_0x33080e['shift']());}};_0x407395(++_0x1c600a);}(_0x0deb,0x1ed));var _0xb0de=function(_0x261767,_0x49a0f6){_0x261767=_0x261767-0x0;var _0x19cbd5=_0x0deb[_0x261767];return _0x19cbd5;};'use strict';var multer=require(_0xb0de('0x0'));var util=require(_0xb0de('0x1'));var path=require(_0xb0de('0x2'));var timeout=require(_0xb0de('0x3'));var express=require(_0xb0de('0x4'));var router=express[_0xb0de('0x5')]();var auth=require(_0xb0de('0x6'));var interaction=require(_0xb0de('0x7'));var config=require(_0xb0de('0x8'));var controller=require(_0xb0de('0x9'));router[_0xb0de('0xa')]('/',auth['isAuthenticated'](),controller[_0xb0de('0xb')]);router['get'](_0xb0de('0xc'),auth[_0xb0de('0xd')](),controller['describe']);router['get'](_0xb0de('0xe'),auth[_0xb0de('0xd')](),controller[_0xb0de('0xf')]);router[_0xb0de('0xa')](_0xb0de('0x10'),auth['isAuthenticated'](),controller[_0xb0de('0x11')]);router[_0xb0de('0x12')]('/',auth['isAuthenticated'](),controller[_0xb0de('0x13')]);router[_0xb0de('0x14')](_0xb0de('0x10'),auth[_0xb0de('0xd')](),controller[_0xb0de('0x15')]);router['delete'](_0xb0de('0x10'),auth['isAuthenticated'](),controller[_0xb0de('0x16')]);module[_0xb0de('0x17')]=router;
\ No newline at end of file
+var _0x29c3=['util','path','connect-timeout','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceQueueReport.controller','isAuthenticated','index','get','/describe','describe','/index','getVoiceQueuesReport','show','create','put','/:id','update','delete','destroy','exports'];(function(_0x32c86b,_0x584b12){var _0x5d1ea8=function(_0x20ab96){while(--_0x20ab96){_0x32c86b['push'](_0x32c86b['shift']());}};_0x5d1ea8(++_0x584b12);}(_0x29c3,0x11e));var _0x329c=function(_0x10c080,_0x5d921c){_0x10c080=_0x10c080-0x0;var _0x5ebd31=_0x29c3[_0x10c080];return _0x5ebd31;};'use strict';var multer=require('multer');var util=require(_0x329c('0x0'));var path=require(_0x329c('0x1'));var timeout=require(_0x329c('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x329c('0x3'));var interaction=require(_0x329c('0x4'));var config=require(_0x329c('0x5'));var controller=require(_0x329c('0x6'));router['get']('/',auth[_0x329c('0x7')](),controller[_0x329c('0x8')]);router[_0x329c('0x9')](_0x329c('0xa'),auth[_0x329c('0x7')](),controller[_0x329c('0xb')]);router[_0x329c('0x9')](_0x329c('0xc'),auth[_0x329c('0x7')](),controller[_0x329c('0xd')]);router[_0x329c('0x9')]('/:id',auth['isAuthenticated'](),controller[_0x329c('0xe')]);router['post']('/',auth[_0x329c('0x7')](),controller[_0x329c('0xf')]);router[_0x329c('0x10')](_0x329c('0x11'),auth[_0x329c('0x7')](),controller[_0x329c('0x12')]);router[_0x329c('0x13')](_0x329c('0x11'),auth[_0x329c('0x7')](),controller[_0x329c('0x14')]);module[_0x329c('0x15')]=router;
\ No newline at end of file
index 5b36dd5..dae7c41 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf3b7=['FORWARD,\x20BLIND,\x20ATTENDED','sequelize','moment','exports','STRING','DATE','format','YYYY-MM-DD\x20HH:mm:ss','setDataValue','holdtime','INTEGER','BOOLEAN','COMPLETEDBYCALLER,\x20COMPLETEDBYAGENT,\x20FORWARDTRANFER,\x20BLINDTRANSFER,\x20ATTENDEDTRANSFER,\x20EXITWITHKEY,\x20TIMEOUT'];(function(_0x285875,_0x2a9148){var _0x1567a4=function(_0x3b5eb4){while(--_0x3b5eb4){_0x285875['push'](_0x285875['shift']());}};_0x1567a4(++_0x2a9148);}(_0xf3b7,0x194));var _0x7f3b=function(_0x45c9bc,_0x582eb2){_0x45c9bc=_0x45c9bc-0x0;var _0xb3287a=_0xf3b7[_0x45c9bc];return _0xb3287a;};'use strict';var Sequelize=require(_0x7f3b('0x0'));var moment=require(_0x7f3b('0x1'));module[_0x7f3b('0x2')]={'type':{'type':Sequelize[_0x7f3b('0x3')]},'uniqueid':{'type':Sequelize[_0x7f3b('0x3')]},'calleridnum':{'type':Sequelize[_0x7f3b('0x3')]},'calleridname':{'type':Sequelize[_0x7f3b('0x3')]},'queue':{'type':Sequelize[_0x7f3b('0x3')]},'queuecallerjoinAt':{'type':Sequelize[_0x7f3b('0x4')]},'queuecallerleaveAt':{'type':Sequelize[_0x7f3b('0x4')],'set':function(_0x11ad85){var _0x777ecc=moment(_0x11ad85);var _0x5c0a14=moment(this['getDataValue']('queuecallerjoinAt'))[_0x7f3b('0x5')](_0x7f3b('0x6'));var _0x3be7c8=_0x777ecc['diff'](_0x5c0a14,'seconds');this[_0x7f3b('0x7')]('queuecallerleaveAt',_0x11ad85);this[_0x7f3b('0x7')](_0x7f3b('0x8'),_0x3be7c8||null);}},'position':{'type':Sequelize['INTEGER']},'count':{'type':Sequelize[_0x7f3b('0x9')]},'queuecallerabandon':{'type':Sequelize[_0x7f3b('0xa')],'defaultValue':![]},'queuecallerabandonAt':{'type':Sequelize[_0x7f3b('0x4')]},'queuecallercomplete':{'type':Sequelize[_0x7f3b('0xa')],'defaultValue':![]},'queuecallercompleteAt':{'type':Sequelize[_0x7f3b('0x4')]},'queuecallerexit':{'type':Sequelize[_0x7f3b('0xa')],'defaultValue':![]},'queuecallerexitAt':{'type':Sequelize['DATE']},'queuecallerexitreason':{'type':Sequelize['STRING'],'comment':_0x7f3b('0xb')},'originalposition':{'type':Sequelize['INTEGER']},'channel':{'type':Sequelize['STRING']},'connectedlinenum':{'type':Sequelize[_0x7f3b('0x3')]},'connectedlinename':{'type':Sequelize[_0x7f3b('0x3')]},'accountcode':{'type':Sequelize[_0x7f3b('0x3')]},'context':{'type':Sequelize[_0x7f3b('0x3')]},'exten':{'type':Sequelize[_0x7f3b('0x3')]},'priority':{'type':Sequelize[_0x7f3b('0x3')]},'holdtime':{'type':Sequelize[_0x7f3b('0x9')]},'mohtime':{'type':Sequelize[_0x7f3b('0x9')],'defaultValue':0x0},'assigned':{'type':Sequelize[_0x7f3b('0xa')],'defaultValue':![]},'lastAssignedTo':{'type':Sequelize[_0x7f3b('0x3')]},'transfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'transfertype':{'type':Sequelize[_0x7f3b('0x3')],'comment':_0x7f3b('0xc')},'transferexten':{'type':Sequelize[_0x7f3b('0x3')]},'transferuniqueid':{'type':Sequelize[_0x7f3b('0x3')]},'disposition':{'type':Sequelize[_0x7f3b('0x3')]},'queuecallerenterreason':{'type':Sequelize[_0x7f3b('0x9')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x8398=['seconds','setDataValue','holdtime','INTEGER','BOOLEAN','sequelize','moment','exports','STRING','DATE','queuecallerjoinAt','format','YYYY-MM-DD\x20HH:mm:ss'];(function(_0x3eb453,_0x153261){var _0x55a8ed=function(_0x592920){while(--_0x592920){_0x3eb453['push'](_0x3eb453['shift']());}};_0x55a8ed(++_0x153261);}(_0x8398,0xc8));var _0x8839=function(_0x2c7618,_0x26be9c){_0x2c7618=_0x2c7618-0x0;var _0x5ce3f0=_0x8398[_0x2c7618];return _0x5ce3f0;};'use strict';var Sequelize=require(_0x8839('0x0'));var moment=require(_0x8839('0x1'));module[_0x8839('0x2')]={'type':{'type':Sequelize[_0x8839('0x3')]},'uniqueid':{'type':Sequelize[_0x8839('0x3')]},'calleridnum':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize[_0x8839('0x3')]},'queuecallerjoinAt':{'type':Sequelize[_0x8839('0x4')]},'queuecallerleaveAt':{'type':Sequelize[_0x8839('0x4')],'set':function(_0x4d606a){var _0x481411=moment(_0x4d606a);var _0x271a77=moment(this['getDataValue'](_0x8839('0x5')))[_0x8839('0x6')](_0x8839('0x7'));var _0x407a06=_0x481411['diff'](_0x271a77,_0x8839('0x8'));this['setDataValue']('queuecallerleaveAt',_0x4d606a);this[_0x8839('0x9')](_0x8839('0xa'),_0x407a06||null);}},'position':{'type':Sequelize[_0x8839('0xb')]},'count':{'type':Sequelize[_0x8839('0xb')]},'queuecallerabandon':{'type':Sequelize[_0x8839('0xc')],'defaultValue':![]},'queuecallerabandonAt':{'type':Sequelize[_0x8839('0x4')]},'queuecallercomplete':{'type':Sequelize[_0x8839('0xc')],'defaultValue':![]},'queuecallercompleteAt':{'type':Sequelize[_0x8839('0x4')]},'queuecallerexit':{'type':Sequelize[_0x8839('0xc')],'defaultValue':![]},'queuecallerexitAt':{'type':Sequelize[_0x8839('0x4')]},'queuecallerexitreason':{'type':Sequelize[_0x8839('0x3')],'comment':'COMPLETEDBYCALLER,\x20COMPLETEDBYAGENT,\x20FORWARDTRANFER,\x20BLINDTRANSFER,\x20ATTENDEDTRANSFER,\x20EXITWITHKEY,\x20TIMEOUT'},'originalposition':{'type':Sequelize[_0x8839('0xb')]},'channel':{'type':Sequelize[_0x8839('0x3')]},'connectedlinenum':{'type':Sequelize[_0x8839('0x3')]},'connectedlinename':{'type':Sequelize[_0x8839('0x3')]},'accountcode':{'type':Sequelize[_0x8839('0x3')]},'context':{'type':Sequelize[_0x8839('0x3')]},'exten':{'type':Sequelize[_0x8839('0x3')]},'priority':{'type':Sequelize['STRING']},'holdtime':{'type':Sequelize['INTEGER']},'mohtime':{'type':Sequelize[_0x8839('0xb')],'defaultValue':0x0},'assigned':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'lastAssignedTo':{'type':Sequelize[_0x8839('0x3')]},'transfer':{'type':Sequelize[_0x8839('0xc')],'defaultValue':![]},'transfertype':{'type':Sequelize[_0x8839('0x3')],'comment':'FORWARD,\x20BLIND,\x20ATTENDED'},'transferexten':{'type':Sequelize[_0x8839('0x3')]},'transferuniqueid':{'type':Sequelize[_0x8839('0x3')]},'disposition':{'type':Sequelize[_0x8839('0x3')]},'queuecallerenterreason':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
index c775025..09e33e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb10d=['filters','intersection','fields','length','attributes','nolimit','limit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','field','includeAll','include','findAll','catch','options','find','create','body','params','describe','getVoiceQueuesReport','hasOwnProperty','map','rows','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./voiceQueueReport.socket','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','destroy','then','error','stack','name','send','index','VoiceQueueReport','rawAttributes','model','query','keys'];(function(_0x4bdee0,_0x73e544){var _0x102ca4=function(_0x3cf1de){while(--_0x3cf1de){_0x4bdee0['push'](_0x4bdee0['shift']());}};_0x102ca4(++_0x73e544);}(_0xb10d,0x17f));var _0xdb10=function(_0x2fd6b0,_0x53242b){_0x2fd6b0=_0x2fd6b0-0x0;var _0x39997e=_0xb10d[_0x2fd6b0];return _0x39997e;};'use strict';var pdf=require(_0xdb10('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xdb10('0x1'));var zipdir=require(_0xdb10('0x2'));var jsonpatch=require(_0xdb10('0x3'));var rp=require(_0xdb10('0x4'));var moment=require(_0xdb10('0x5'));var BPromise=require(_0xdb10('0x6'));var Mustache=require(_0xdb10('0x7'));var util=require(_0xdb10('0x8'));var path=require(_0xdb10('0x9'));var sox=require(_0xdb10('0xa'));var csv=require(_0xdb10('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xdb10('0xc'));var squel=require(_0xdb10('0xd'));var crypto=require(_0xdb10('0xe'));var jsforce=require(_0xdb10('0xf'));var deskjs=require(_0xdb10('0x10'));var toCsv=require(_0xdb10('0xb'));var querystring=require(_0xdb10('0x11'));var Papa=require(_0xdb10('0x12'));var Redis=require(_0xdb10('0x13'));var authService=require(_0xdb10('0x14'));var qs=require(_0xdb10('0x15'));var hardwareService=require(_0xdb10('0x16'));var logger=require(_0xdb10('0x17'))(_0xdb10('0x18'));var utils=require(_0xdb10('0x19'));var config=require(_0xdb10('0x1a'));var db=require(_0xdb10('0x1b'))['db'];config[_0xdb10('0x1c')]=_[_0xdb10('0x1d')](config[_0xdb10('0x1c')],{'host':_0xdb10('0x1e'),'port':0x18eb});var socket=require(_0xdb10('0x1f'))(new Redis(config[_0xdb10('0x1c')]));require(_0xdb10('0x20'))['register'](socket);function respondWithStatusCode(_0x30b302,_0x1daa95){_0x1daa95=_0x1daa95||0xcc;return function(_0xf8cc1){if(_0xf8cc1){return _0x30b302[_0xdb10('0x21')](_0x1daa95);}return _0x30b302[_0xdb10('0x22')](_0x1daa95)[_0xdb10('0x23')]();};}function respondWithResult(_0x489421,_0x161e0d){_0x161e0d=_0x161e0d||0xc8;return function(_0x21393b){if(_0x21393b){return _0x489421[_0xdb10('0x22')](_0x161e0d)[_0xdb10('0x24')](_0x21393b);}};}function respondWithFilteredResult(_0xbce3f1,_0x5b484e){return function(_0xe826ef){if(_0xe826ef){var _0x52ccdd=_0xe826ef[_0xdb10('0x25')],_0xbf36da=_0x5b484e[_0xdb10('0x26')],_0x4964aa=_0x5b484e[_0xdb10('0x26')]+_0x5b484e['limit'],_0x3b9f45;if(_0x4964aa>=_0x52ccdd){_0x4964aa=_0x52ccdd;_0x3b9f45=0xc8;}else{_0x3b9f45=0xce;}_0xbce3f1[_0xdb10('0x22')](_0x3b9f45);return _0xbce3f1[_0xdb10('0x27')](_0xdb10('0x28'),_0xbf36da+'-'+_0x4964aa+'/'+_0x52ccdd)[_0xdb10('0x24')](_0xe826ef);}return null;};}function patchUpdates(_0x5b7409){return function(_0xcb38eb){try{jsonpatch[_0xdb10('0x29')](_0xcb38eb,_0x5b7409,!![]);}catch(_0x373964){return BPromise[_0xdb10('0x2a')](_0x373964);}return _0xcb38eb[_0xdb10('0x2b')]();};}function saveUpdates(_0x2b6244,_0x145497){return function(_0x30baba){if(_0x30baba){return _0x30baba[_0xdb10('0x2c')](_0x2b6244)['then'](function(_0x11a34b){return _0x11a34b;});}return null;};}function removeEntity(_0x148f2b,_0x5ba42a){return function(_0x249e94){if(_0x249e94){return _0x249e94[_0xdb10('0x2d')]()[_0xdb10('0x2e')](function(){_0x148f2b[_0xdb10('0x22')](0xcc)['end']();});}};}function handleEntityNotFound(_0x47db13,_0xc65e60){return function(_0x53e626){if(!_0x53e626){_0x47db13[_0xdb10('0x21')](0x194);}return _0x53e626;};}function handleError(_0x464ab,_0x39116e){_0x39116e=_0x39116e||0x1f4;return function(_0x4db7ba){logger[_0xdb10('0x2f')](_0x4db7ba[_0xdb10('0x30')]);if(_0x4db7ba[_0xdb10('0x31')]){delete _0x4db7ba[_0xdb10('0x31')];}_0x464ab[_0xdb10('0x22')](_0x39116e)[_0xdb10('0x32')](_0x4db7ba);};}exports[_0xdb10('0x33')]=function(_0x2a9ecd,_0xa48d52){var _0x42ef28={},_0x3627ae={},_0xb1c49c={'count':0x0,'rows':[]};var _0x3073de=db[_0xdb10('0x34')][_0xdb10('0x35')];_0x3627ae[_0xdb10('0x36')]=_['keys'](_0x3073de);_0x3627ae[_0xdb10('0x37')]=_[_0xdb10('0x38')](_0x2a9ecd[_0xdb10('0x37')]);_0x3627ae[_0xdb10('0x39')]=_[_0xdb10('0x3a')](_0x3627ae[_0xdb10('0x36')],_0x3627ae[_0xdb10('0x37')]);_0x42ef28['attributes']=_[_0xdb10('0x3a')](_0x3627ae[_0xdb10('0x36')],qs[_0xdb10('0x3b')](_0x2a9ecd['query']['fields']));_0x42ef28['attributes']=_0x42ef28['attributes'][_0xdb10('0x3c')]?_0x42ef28[_0xdb10('0x3d')]:_0x3627ae['model'];if(!_0x2a9ecd['query']['hasOwnProperty'](_0xdb10('0x3e'))){_0x42ef28['limit']=qs[_0xdb10('0x3f')](_0x2a9ecd[_0xdb10('0x37')]['limit']);_0x42ef28[_0xdb10('0x26')]=qs[_0xdb10('0x26')](_0x2a9ecd[_0xdb10('0x37')]['offset']);}_0x42ef28[_0xdb10('0x40')]=qs[_0xdb10('0x41')](_0x2a9ecd[_0xdb10('0x37')][_0xdb10('0x41')]);_0x42ef28[_0xdb10('0x42')]=qs[_0xdb10('0x39')](_[_0xdb10('0x43')](_0x2a9ecd[_0xdb10('0x37')],_0x3627ae[_0xdb10('0x39')]));if(_0x2a9ecd[_0xdb10('0x37')][_0xdb10('0x44')]){_0x42ef28[_0xdb10('0x42')]=_[_0xdb10('0x45')](_0x42ef28[_0xdb10('0x42')],{'$or':_['map'](_0x3073de,function(_0x5a98a5){if(_0x5a98a5[_0xdb10('0x46')][_0xdb10('0x47')]!==_0xdb10('0x48')){var _0x1f0e9e={};_0x1f0e9e[_0x5a98a5[_0xdb10('0x49')]]={'$like':'%'+_0x2a9ecd[_0xdb10('0x37')][_0xdb10('0x44')]+'%'};return _0x1f0e9e;}})});}_0x42ef28=_['merge']({},_0x42ef28,_0x2a9ecd['options']);var _0x737317={'where':_0x42ef28['where']};return db['VoiceQueueReport']['count'](_0x737317)[_0xdb10('0x2e')](function(_0x2540e1){_0xb1c49c[_0xdb10('0x25')]=_0x2540e1;if(_0x2a9ecd['query'][_0xdb10('0x4a')]){_0x42ef28[_0xdb10('0x4b')]=[{'all':!![]}];}return db[_0xdb10('0x34')][_0xdb10('0x4c')](_0x42ef28);})[_0xdb10('0x2e')](function(_0x4529ad){_0xb1c49c['rows']=_0x4529ad;return _0xb1c49c;})[_0xdb10('0x2e')](respondWithFilteredResult(_0xa48d52,_0x42ef28))[_0xdb10('0x4d')](handleError(_0xa48d52,null));};exports['show']=function(_0xff6b0a,_0x47dffd){var _0x18575f={'raw':![],'where':{'id':_0xff6b0a['params']['id']}},_0x54a98f={};_0x54a98f[_0xdb10('0x36')]=_[_0xdb10('0x38')](db[_0xdb10('0x34')][_0xdb10('0x35')]);_0x54a98f[_0xdb10('0x37')]=_[_0xdb10('0x38')](_0xff6b0a[_0xdb10('0x37')]);_0x54a98f[_0xdb10('0x39')]=_[_0xdb10('0x3a')](_0x54a98f['model'],_0x54a98f['query']);_0x18575f[_0xdb10('0x3d')]=_['intersection'](_0x54a98f[_0xdb10('0x36')],qs[_0xdb10('0x3b')](_0xff6b0a[_0xdb10('0x37')]['fields']));_0x18575f[_0xdb10('0x3d')]=_0x18575f[_0xdb10('0x3d')][_0xdb10('0x3c')]?_0x18575f[_0xdb10('0x3d')]:_0x54a98f[_0xdb10('0x36')];if(_0xff6b0a[_0xdb10('0x37')][_0xdb10('0x4a')]){_0x18575f[_0xdb10('0x4b')]=[{'all':!![]}];}_0x18575f=_[_0xdb10('0x45')]({},_0x18575f,_0xff6b0a[_0xdb10('0x4e')]);return db[_0xdb10('0x34')][_0xdb10('0x4f')](_0x18575f)['then'](handleEntityNotFound(_0x47dffd,null))[_0xdb10('0x2e')](respondWithResult(_0x47dffd,null))[_0xdb10('0x4d')](handleError(_0x47dffd,null));};exports[_0xdb10('0x50')]=function(_0x4c6260,_0xf3427b){return db[_0xdb10('0x34')][_0xdb10('0x50')](_0x4c6260[_0xdb10('0x51')],{})[_0xdb10('0x2e')](respondWithResult(_0xf3427b,0xc9))[_0xdb10('0x4d')](handleError(_0xf3427b,null));};exports[_0xdb10('0x2c')]=function(_0x4f6924,_0x47d2be){if(_0x4f6924[_0xdb10('0x51')]['id']){delete _0x4f6924[_0xdb10('0x51')]['id'];}return db[_0xdb10('0x34')][_0xdb10('0x4f')]({'where':{'id':_0x4f6924[_0xdb10('0x52')]['id']}})[_0xdb10('0x2e')](handleEntityNotFound(_0x47d2be,null))[_0xdb10('0x2e')](saveUpdates(_0x4f6924[_0xdb10('0x51')],null))[_0xdb10('0x2e')](respondWithResult(_0x47d2be,null))[_0xdb10('0x4d')](handleError(_0x47d2be,null));};exports[_0xdb10('0x2d')]=function(_0x3be222,_0x460c21){return db['VoiceQueueReport']['find']({'where':{'id':_0x3be222[_0xdb10('0x52')]['id']}})[_0xdb10('0x2e')](handleEntityNotFound(_0x460c21,null))[_0xdb10('0x2e')](removeEntity(_0x460c21,null))[_0xdb10('0x4d')](handleError(_0x460c21,null));};exports[_0xdb10('0x53')]=function(_0x12bd00,_0x494a97){return db['VoiceQueueReport']['describe']()[_0xdb10('0x2e')](respondWithResult(_0x494a97,null))[_0xdb10('0x4d')](handleError(_0x494a97,null));};exports[_0xdb10('0x54')]=function(_0x22fbd3,_0x48b071){var _0x5769b9={},_0x4cb426={},_0x34b081={'count':0x0,'rows':[]};_0x4cb426[_0xdb10('0x36')]=_['keys'](db['VoiceQueueReport']['rawAttributes']);_0x4cb426[_0xdb10('0x37')]=_[_0xdb10('0x38')](_0x22fbd3[_0xdb10('0x37')]);_0x4cb426['filters']=_['intersection'](_0x4cb426[_0xdb10('0x36')],_0x4cb426[_0xdb10('0x37')]);_0x5769b9[_0xdb10('0x3d')]=_[_0xdb10('0x3a')](_0x4cb426[_0xdb10('0x36')],qs['fields'](_0x22fbd3[_0xdb10('0x37')]['fields']));_0x5769b9[_0xdb10('0x3d')]=_0x5769b9[_0xdb10('0x3d')]['length']?_0x5769b9[_0xdb10('0x3d')]:_0x4cb426[_0xdb10('0x36')];if(!_0x22fbd3['query'][_0xdb10('0x55')](_0xdb10('0x3e'))){_0x5769b9[_0xdb10('0x3f')]=qs[_0xdb10('0x3f')](_0x22fbd3[_0xdb10('0x37')][_0xdb10('0x3f')]);_0x5769b9['offset']=qs['offset'](_0x22fbd3['query'][_0xdb10('0x26')]);}_0x5769b9['order']=qs[_0xdb10('0x41')](_0x22fbd3[_0xdb10('0x37')]['sort']);_0x5769b9['where']=qs[_0xdb10('0x39')](_[_0xdb10('0x43')](_0x22fbd3[_0xdb10('0x37')],_0x4cb426[_0xdb10('0x39')]));if(_0x22fbd3['query'][_0xdb10('0x44')]){_0x5769b9[_0xdb10('0x42')]=_[_0xdb10('0x45')](_0x5769b9[_0xdb10('0x42')],{'$or':_[_0xdb10('0x56')](_0x5769b9[_0xdb10('0x3d')],function(_0x436cbc){var _0x30f2be={};_0x30f2be[_0x436cbc]={'$like':'%'+_0x22fbd3[_0xdb10('0x37')][_0xdb10('0x44')]+'%'};return _0x30f2be;})});}_0x5769b9=_['merge']({},_0x5769b9,_0x22fbd3[_0xdb10('0x4e')]);var _0x1a9830={'where':_0x5769b9[_0xdb10('0x42')]};return db[_0xdb10('0x34')]['count'](_0x1a9830)[_0xdb10('0x2e')](function(_0x4c7242){_0x34b081[_0xdb10('0x25')]=_0x4c7242;if(_0x22fbd3[_0xdb10('0x37')][_0xdb10('0x4a')]){_0x5769b9['include']=[{'all':!![]}];}return db[_0xdb10('0x34')][_0xdb10('0x4c')](_0x5769b9);})[_0xdb10('0x2e')](function(_0x195aa7){_0x34b081[_0xdb10('0x57')]=_0x195aa7;return _0x34b081;})[_0xdb10('0x2e')](respondWithFilteredResult(_0x48b071,_0x5769b9,_0xdb10('0x54')))[_0xdb10('0x4d')](handleError(_0x48b071,null,_0xdb10('0x54')));};
\ No newline at end of file
+var _0x97f5=['query','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','filters','pick','merge','key','VIRTUAL','field','filter','options','count','includeAll','include','findAll','then','rows','catch','params','create','update','body','find','destroy','describe','map','getVoiceQueuesReport','html-pdf','eml-format','rimraf','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/environment','../../mysqldb','redis','localhost','socket.io-emitter','./voiceQueueReport.socket','register','sendStatus','status','end','json','offset','set','Content-Range','apply','reject','save','stack','name','send','index','VoiceQueueReport','rawAttributes','model','keys'];(function(_0x30b604,_0x3882ed){var _0x5eb82f=function(_0x544c7e){while(--_0x544c7e){_0x30b604['push'](_0x30b604['shift']());}};_0x5eb82f(++_0x3882ed);}(_0x97f5,0x72));var _0x597f=function(_0x52e6e9,_0x26864b){_0x52e6e9=_0x52e6e9-0x0;var _0x35c186=_0x97f5[_0x52e6e9];return _0x35c186;};'use strict';var pdf=require(_0x597f('0x0'));var emlformat=require(_0x597f('0x1'));var rimraf=require(_0x597f('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x597f('0x3'));var moment=require(_0x597f('0x4'));var BPromise=require(_0x597f('0x5'));var Mustache=require(_0x597f('0x6'));var util=require(_0x597f('0x7'));var path=require(_0x597f('0x8'));var sox=require(_0x597f('0x9'));var csv=require(_0x597f('0xa'));var ejs=require(_0x597f('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x597f('0xc'));var crypto=require(_0x597f('0xd'));var jsforce=require(_0x597f('0xe'));var deskjs=require(_0x597f('0xf'));var toCsv=require(_0x597f('0xa'));var querystring=require(_0x597f('0x10'));var Papa=require('papaparse');var Redis=require(_0x597f('0x11'));var authService=require(_0x597f('0x12'));var qs=require(_0x597f('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0x597f('0x14'));var utils=require('../../config/utils');var config=require(_0x597f('0x15'));var db=require(_0x597f('0x16'))['db'];config[_0x597f('0x17')]=_['defaults'](config[_0x597f('0x17')],{'host':_0x597f('0x18'),'port':0x18eb});var socket=require(_0x597f('0x19'))(new Redis(config[_0x597f('0x17')]));require(_0x597f('0x1a'))[_0x597f('0x1b')](socket);function respondWithStatusCode(_0x357efa,_0x22adab){_0x22adab=_0x22adab||0xcc;return function(_0x11ef60){if(_0x11ef60){return _0x357efa[_0x597f('0x1c')](_0x22adab);}return _0x357efa[_0x597f('0x1d')](_0x22adab)[_0x597f('0x1e')]();};}function respondWithResult(_0xf1eed0,_0x5b6349){_0x5b6349=_0x5b6349||0xc8;return function(_0x44d2f2){if(_0x44d2f2){return _0xf1eed0[_0x597f('0x1d')](_0x5b6349)[_0x597f('0x1f')](_0x44d2f2);}};}function respondWithFilteredResult(_0x55eed9,_0x85b436){return function(_0x5d64f9){if(_0x5d64f9){var _0x507c99=_0x5d64f9['count'],_0x507552=_0x85b436[_0x597f('0x20')],_0x50f89a=_0x85b436[_0x597f('0x20')]+_0x85b436['limit'],_0x49f12b;if(_0x50f89a>=_0x507c99){_0x50f89a=_0x507c99;_0x49f12b=0xc8;}else{_0x49f12b=0xce;}_0x55eed9[_0x597f('0x1d')](_0x49f12b);return _0x55eed9[_0x597f('0x21')](_0x597f('0x22'),_0x507552+'-'+_0x50f89a+'/'+_0x507c99)[_0x597f('0x1f')](_0x5d64f9);}return null;};}function patchUpdates(_0x53b85e){return function(_0x48fffd){try{jsonpatch[_0x597f('0x23')](_0x48fffd,_0x53b85e,!![]);}catch(_0x244ca5){return BPromise[_0x597f('0x24')](_0x244ca5);}return _0x48fffd[_0x597f('0x25')]();};}function saveUpdates(_0x599bed,_0x4c13ab){return function(_0x376b5f){if(_0x376b5f){return _0x376b5f['update'](_0x599bed)['then'](function(_0x4502fb){return _0x4502fb;});}return null;};}function removeEntity(_0x22f4fd,_0x20776d){return function(_0x4c44a7){if(_0x4c44a7){return _0x4c44a7['destroy']()['then'](function(){_0x22f4fd[_0x597f('0x1d')](0xcc)[_0x597f('0x1e')]();});}};}function handleEntityNotFound(_0x4afc3a,_0x1edab6){return function(_0x7bf4fe){if(!_0x7bf4fe){_0x4afc3a[_0x597f('0x1c')](0x194);}return _0x7bf4fe;};}function handleError(_0x55d7ec,_0x519abc){_0x519abc=_0x519abc||0x1f4;return function(_0xa48f45){logger['error'](_0xa48f45[_0x597f('0x26')]);if(_0xa48f45[_0x597f('0x27')]){delete _0xa48f45[_0x597f('0x27')];}_0x55d7ec[_0x597f('0x1d')](_0x519abc)[_0x597f('0x28')](_0xa48f45);};}exports[_0x597f('0x29')]=function(_0x1c5300,_0x5b4832){var _0x5cfe3a={},_0xea7872={},_0x508d4e={'count':0x0,'rows':[]};var _0x85dd1d=db[_0x597f('0x2a')][_0x597f('0x2b')];_0xea7872[_0x597f('0x2c')]=_[_0x597f('0x2d')](_0x85dd1d);_0xea7872[_0x597f('0x2e')]=_[_0x597f('0x2d')](_0x1c5300['query']);_0xea7872['filters']=_[_0x597f('0x2f')](_0xea7872['model'],_0xea7872[_0x597f('0x2e')]);_0x5cfe3a[_0x597f('0x30')]=_[_0x597f('0x2f')](_0xea7872[_0x597f('0x2c')],qs['fields'](_0x1c5300[_0x597f('0x2e')][_0x597f('0x31')]));_0x5cfe3a['attributes']=_0x5cfe3a[_0x597f('0x30')][_0x597f('0x32')]?_0x5cfe3a[_0x597f('0x30')]:_0xea7872['model'];if(!_0x1c5300['query'][_0x597f('0x33')](_0x597f('0x34'))){_0x5cfe3a[_0x597f('0x35')]=qs['limit'](_0x1c5300['query'][_0x597f('0x35')]);_0x5cfe3a[_0x597f('0x20')]=qs[_0x597f('0x20')](_0x1c5300[_0x597f('0x2e')][_0x597f('0x20')]);}_0x5cfe3a['order']=qs[_0x597f('0x36')](_0x1c5300[_0x597f('0x2e')][_0x597f('0x36')]);_0x5cfe3a[_0x597f('0x37')]=qs[_0x597f('0x38')](_[_0x597f('0x39')](_0x1c5300[_0x597f('0x2e')],_0xea7872['filters']));if(_0x1c5300[_0x597f('0x2e')]['filter']){_0x5cfe3a[_0x597f('0x37')]=_[_0x597f('0x3a')](_0x5cfe3a[_0x597f('0x37')],{'$or':_['map'](_0x85dd1d,function(_0x10de74){if(_0x10de74['type'][_0x597f('0x3b')]!==_0x597f('0x3c')){var _0x3acfe6={};_0x3acfe6[_0x10de74[_0x597f('0x3d')]]={'$like':'%'+_0x1c5300[_0x597f('0x2e')][_0x597f('0x3e')]+'%'};return _0x3acfe6;}})});}_0x5cfe3a=_[_0x597f('0x3a')]({},_0x5cfe3a,_0x1c5300[_0x597f('0x3f')]);var _0x4bd63d={'where':_0x5cfe3a[_0x597f('0x37')]};return db[_0x597f('0x2a')][_0x597f('0x40')](_0x4bd63d)['then'](function(_0x4bead9){_0x508d4e['count']=_0x4bead9;if(_0x1c5300[_0x597f('0x2e')][_0x597f('0x41')]){_0x5cfe3a[_0x597f('0x42')]=[{'all':!![]}];}return db['VoiceQueueReport'][_0x597f('0x43')](_0x5cfe3a);})[_0x597f('0x44')](function(_0x50b5a3){_0x508d4e[_0x597f('0x45')]=_0x50b5a3;return _0x508d4e;})[_0x597f('0x44')](respondWithFilteredResult(_0x5b4832,_0x5cfe3a))[_0x597f('0x46')](handleError(_0x5b4832,null));};exports['show']=function(_0x50e3df,_0x5916f6){var _0x1976f8={'raw':![],'where':{'id':_0x50e3df[_0x597f('0x47')]['id']}},_0xc62652={};_0xc62652[_0x597f('0x2c')]=_[_0x597f('0x2d')](db[_0x597f('0x2a')][_0x597f('0x2b')]);_0xc62652[_0x597f('0x2e')]=_[_0x597f('0x2d')](_0x50e3df[_0x597f('0x2e')]);_0xc62652['filters']=_['intersection'](_0xc62652[_0x597f('0x2c')],_0xc62652[_0x597f('0x2e')]);_0x1976f8[_0x597f('0x30')]=_[_0x597f('0x2f')](_0xc62652[_0x597f('0x2c')],qs[_0x597f('0x31')](_0x50e3df[_0x597f('0x2e')]['fields']));_0x1976f8[_0x597f('0x30')]=_0x1976f8[_0x597f('0x30')][_0x597f('0x32')]?_0x1976f8[_0x597f('0x30')]:_0xc62652[_0x597f('0x2c')];if(_0x50e3df[_0x597f('0x2e')]['includeAll']){_0x1976f8[_0x597f('0x42')]=[{'all':!![]}];}_0x1976f8=_[_0x597f('0x3a')]({},_0x1976f8,_0x50e3df[_0x597f('0x3f')]);return db[_0x597f('0x2a')]['find'](_0x1976f8)[_0x597f('0x44')](handleEntityNotFound(_0x5916f6,null))['then'](respondWithResult(_0x5916f6,null))['catch'](handleError(_0x5916f6,null));};exports[_0x597f('0x48')]=function(_0x3ee2a9,_0x34df0f){return db[_0x597f('0x2a')][_0x597f('0x48')](_0x3ee2a9['body'],{})[_0x597f('0x44')](respondWithResult(_0x34df0f,0xc9))[_0x597f('0x46')](handleError(_0x34df0f,null));};exports[_0x597f('0x49')]=function(_0x13a5f0,_0x2417cb){if(_0x13a5f0[_0x597f('0x4a')]['id']){delete _0x13a5f0['body']['id'];}return db[_0x597f('0x2a')][_0x597f('0x4b')]({'where':{'id':_0x13a5f0[_0x597f('0x47')]['id']}})['then'](handleEntityNotFound(_0x2417cb,null))['then'](saveUpdates(_0x13a5f0[_0x597f('0x4a')],null))[_0x597f('0x44')](respondWithResult(_0x2417cb,null))['catch'](handleError(_0x2417cb,null));};exports[_0x597f('0x4c')]=function(_0x5db6ff,_0x1e82e9){return db[_0x597f('0x2a')][_0x597f('0x4b')]({'where':{'id':_0x5db6ff[_0x597f('0x47')]['id']}})['then'](handleEntityNotFound(_0x1e82e9,null))[_0x597f('0x44')](removeEntity(_0x1e82e9,null))[_0x597f('0x46')](handleError(_0x1e82e9,null));};exports[_0x597f('0x4d')]=function(_0x49aa96,_0x24e1b2){return db['VoiceQueueReport'][_0x597f('0x4d')]()['then'](respondWithResult(_0x24e1b2,null))[_0x597f('0x46')](handleError(_0x24e1b2,null));};exports['getVoiceQueuesReport']=function(_0xfd183e,_0x76a0bd){var _0x27c6f1={},_0x2958f1={},_0x3a67db={'count':0x0,'rows':[]};_0x2958f1[_0x597f('0x2c')]=_[_0x597f('0x2d')](db[_0x597f('0x2a')][_0x597f('0x2b')]);_0x2958f1['query']=_[_0x597f('0x2d')](_0xfd183e['query']);_0x2958f1[_0x597f('0x38')]=_[_0x597f('0x2f')](_0x2958f1['model'],_0x2958f1['query']);_0x27c6f1['attributes']=_[_0x597f('0x2f')](_0x2958f1[_0x597f('0x2c')],qs[_0x597f('0x31')](_0xfd183e[_0x597f('0x2e')]['fields']));_0x27c6f1[_0x597f('0x30')]=_0x27c6f1[_0x597f('0x30')][_0x597f('0x32')]?_0x27c6f1[_0x597f('0x30')]:_0x2958f1[_0x597f('0x2c')];if(!_0xfd183e[_0x597f('0x2e')]['hasOwnProperty'](_0x597f('0x34'))){_0x27c6f1[_0x597f('0x35')]=qs[_0x597f('0x35')](_0xfd183e[_0x597f('0x2e')][_0x597f('0x35')]);_0x27c6f1[_0x597f('0x20')]=qs[_0x597f('0x20')](_0xfd183e['query'][_0x597f('0x20')]);}_0x27c6f1['order']=qs[_0x597f('0x36')](_0xfd183e['query'][_0x597f('0x36')]);_0x27c6f1[_0x597f('0x37')]=qs[_0x597f('0x38')](_[_0x597f('0x39')](_0xfd183e[_0x597f('0x2e')],_0x2958f1['filters']));if(_0xfd183e[_0x597f('0x2e')][_0x597f('0x3e')]){_0x27c6f1['where']=_[_0x597f('0x3a')](_0x27c6f1[_0x597f('0x37')],{'$or':_[_0x597f('0x4e')](_0x27c6f1[_0x597f('0x30')],function(_0x211112){var _0xd9cff0={};_0xd9cff0[_0x211112]={'$like':'%'+_0xfd183e[_0x597f('0x2e')][_0x597f('0x3e')]+'%'};return _0xd9cff0;})});}_0x27c6f1=_['merge']({},_0x27c6f1,_0xfd183e[_0x597f('0x3f')]);var _0x5becef={'where':_0x27c6f1['where']};return db[_0x597f('0x2a')]['count'](_0x5becef)['then'](function(_0x1d94b7){_0x3a67db['count']=_0x1d94b7;if(_0xfd183e[_0x597f('0x2e')][_0x597f('0x41')]){_0x27c6f1['include']=[{'all':!![]}];}return db[_0x597f('0x2a')][_0x597f('0x43')](_0x27c6f1);})[_0x597f('0x44')](function(_0x6181db){_0x3a67db[_0x597f('0x45')]=_0x6181db;return _0x3a67db;})[_0x597f('0x44')](respondWithFilteredResult(_0x76a0bd,_0x27c6f1,_0x597f('0x4f')))[_0x597f('0x46')](handleError(_0x76a0bd,null,_0x597f('0x4f')));};
\ No newline at end of file
index db94f5e..2be28f0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x73da=['VoiceQueueReport','setMaxListeners','save','remove','emit','exports','events','../../mysqldb'];(function(_0x7c50f8,_0x38cbac){var _0x336265=function(_0x241939){while(--_0x241939){_0x7c50f8['push'](_0x7c50f8['shift']());}};_0x336265(++_0x38cbac);}(_0x73da,0x136));var _0xa73d=function(_0x363842,_0x369636){_0x363842=_0x363842-0x0;var _0x257bc2=_0x73da[_0x363842];return _0x257bc2;};'use strict';var EventEmitter=require(_0xa73d('0x0'));var VoiceQueueReport=require(_0xa73d('0x1'))['db'][_0xa73d('0x2')];var VoiceQueueReportEvents=new EventEmitter();VoiceQueueReportEvents[_0xa73d('0x3')](0x0);var events={'afterCreate':_0xa73d('0x4'),'afterUpdate':'update','afterDestroy':_0xa73d('0x5')};function emitEvent(_0x40b69a){return function(_0x50513d,_0x590ba8,_0x160ab1){VoiceQueueReportEvents[_0xa73d('0x6')](_0x40b69a+':'+_0x50513d['id'],_0x50513d);VoiceQueueReportEvents[_0xa73d('0x6')](_0x40b69a,_0x50513d);_0x160ab1(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];VoiceQueueReport['hook'](e,emitEvent(event));}}module[_0xa73d('0x7')]=VoiceQueueReportEvents;
\ No newline at end of file
+var _0x46b7=['setMaxListeners','save','update','remove','emit','hasOwnProperty','hook','events','../../mysqldb','VoiceQueueReport'];(function(_0x1afea5,_0x1fe8f4){var _0x4cbfb9=function(_0x5b3b67){while(--_0x5b3b67){_0x1afea5['push'](_0x1afea5['shift']());}};_0x4cbfb9(++_0x1fe8f4);}(_0x46b7,0xc5));var _0x746b=function(_0x5cc3d3,_0x5d8cee){_0x5cc3d3=_0x5cc3d3-0x0;var _0x4df114=_0x46b7[_0x5cc3d3];return _0x4df114;};'use strict';var EventEmitter=require(_0x746b('0x0'));var VoiceQueueReport=require(_0x746b('0x1'))['db'][_0x746b('0x2')];var VoiceQueueReportEvents=new EventEmitter();VoiceQueueReportEvents[_0x746b('0x3')](0x0);var events={'afterCreate':_0x746b('0x4'),'afterUpdate':_0x746b('0x5'),'afterDestroy':_0x746b('0x6')};function emitEvent(_0x37799c){return function(_0x3fa5ca,_0x21d0aa,_0x1fd428){VoiceQueueReportEvents[_0x746b('0x7')](_0x37799c+':'+_0x3fa5ca['id'],_0x3fa5ca);VoiceQueueReportEvents[_0x746b('0x7')](_0x37799c,_0x3fa5ca);_0x1fd428(null);};}for(var e in events){if(events[_0x746b('0x8')](e)){var event=events[e];VoiceQueueReport[_0x746b('0x9')](e,emitEvent(event));}}module['exports']=VoiceQueueReportEvents;
\ No newline at end of file
index de2d1bc..bf85acf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x71df=['define','VoiceQueueReport','lodash','util','../../config/logger','moment','bluebird','request-promise','rimraf','../../config/environment','exports'];(function(_0x4772d7,_0x1428e9){var _0x453117=function(_0x5f0e96){while(--_0x5f0e96){_0x4772d7['push'](_0x4772d7['shift']());}};_0x453117(++_0x1428e9);}(_0x71df,0xbd));var _0xf71d=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x71df[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xf71d('0x0'));var util=require(_0xf71d('0x1'));var logger=require(_0xf71d('0x2'))('api');var moment=require(_0xf71d('0x3'));var BPromise=require(_0xf71d('0x4'));var rp=require(_0xf71d('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0xf71d('0x6'));var config=require(_0xf71d('0x7'));var attributes=require('./voiceQueueReport.attributes');module[_0xf71d('0x8')]=function(_0x3ff715,_0x4a17d0){return _0x3ff715[_0xf71d('0x9')](_0xf71d('0xa'),attributes,{'tableName':'report_queue','paranoid':![],'indexes':[{'fields':['uniqueid']},{'fields':['calleridnum']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x96f5=['exports','define','VoiceQueueReport','report_queue','calleridnum','util','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','./voiceQueueReport.attributes'];(function(_0x86527a,_0x2787c6){var _0x2f14b6=function(_0x4f1613){while(--_0x4f1613){_0x86527a['push'](_0x86527a['shift']());}};_0x2f14b6(++_0x2787c6);}(_0x96f5,0xd7));var _0x596f=function(_0x5deea8,_0x58117f){_0x5deea8=_0x5deea8-0x0;var _0x1d4b0e=_0x96f5[_0x5deea8];return _0x1d4b0e;};'use strict';var _=require('lodash');var util=require(_0x596f('0x0'));var logger=require(_0x596f('0x1'))(_0x596f('0x2'));var moment=require(_0x596f('0x3'));var BPromise=require(_0x596f('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x596f('0x5'));var rimraf=require(_0x596f('0x6'));var config=require(_0x596f('0x7'));var attributes=require(_0x596f('0x8'));module[_0x596f('0x9')]=function(_0x58242d,_0x54e6c0){return _0x58242d[_0x596f('0xa')](_0x596f('0xb'),attributes,{'tableName':_0x596f('0xc'),'paranoid':![],'indexes':[{'fields':['uniqueid']},{'fields':[_0x596f('0xd')]}],'timestamps':!![]});};
\ No newline at end of file
index cace545..3b127fc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x352b=['create','UpdateVoiceQueueReport','update','body','util','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','defaults','redis','localhost','socket.io-emitter','./voiceQueueReport.socket','register','info','VoiceQueueReport,\x20%s,\x20%s','request\x20sent','debug','VoiceQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetVoiceQueueReport','findAll','options','raw','where','attributes','limit','include','map','model','then','CreateVoiceQueueReport'];(function(_0x55a589,_0x445cc2){var _0x55dcdf=function(_0x3f61f3){while(--_0x3f61f3){_0x55a589['push'](_0x55a589['shift']());}};_0x55dcdf(++_0x445cc2);}(_0x352b,0x187));var _0xb352=function(_0x490808,_0x3dc16d){_0x490808=_0x490808-0x0;var _0x1c5738=_0x352b[_0x490808];return _0x1c5738;};'use strict';var _=require('lodash');var util=require(_0xb352('0x0'));var moment=require('moment');var BPromise=require(_0xb352('0x1'));var rs=require(_0xb352('0x2'));var fs=require('fs');var Redis=require(_0xb352('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xb352('0x4'));var logger=require(_0xb352('0x5'))(_0xb352('0x6'));var config=require('../../config/environment');var jayson=require(_0xb352('0x7'));var client=jayson[_0xb352('0x8')][_0xb352('0x9')]({'port':0x232a});config['redis']=_[_0xb352('0xa')](config[_0xb352('0xb')],{'host':_0xb352('0xc'),'port':0x18eb});var socket=require(_0xb352('0xd'))(new Redis(config[_0xb352('0xb')]));require(_0xb352('0xe'))[_0xb352('0xf')](socket);function respondWithRpcPromise(_0x5548a3,_0x554507,_0x35e0cb){return new BPromise(function(_0x5012d0,_0x12fa0a){return client['request'](_0x5548a3,_0x35e0cb)['then'](function(_0x2dafc7){logger[_0xb352('0x10')](_0xb352('0x11'),_0x554507,_0xb352('0x12'));logger[_0xb352('0x13')](_0xb352('0x14'),_0x554507,_0xb352('0x12'),JSON[_0xb352('0x15')](_0x2dafc7));if(_0x2dafc7[_0xb352('0x16')]){if(_0x2dafc7[_0xb352('0x16')][_0xb352('0x17')]===0x1f4){logger[_0xb352('0x16')](_0xb352('0x11'),_0x554507,_0x2dafc7[_0xb352('0x16')][_0xb352('0x18')]);return _0x12fa0a(_0x2dafc7[_0xb352('0x16')][_0xb352('0x18')]);}logger[_0xb352('0x16')](_0xb352('0x11'),_0x554507,_0x2dafc7[_0xb352('0x16')][_0xb352('0x18')]);return _0x5012d0(_0x2dafc7['error'][_0xb352('0x18')]);}else{logger[_0xb352('0x10')](_0xb352('0x11'),_0x554507,'request\x20sent');_0x5012d0(_0x2dafc7[_0xb352('0x19')][_0xb352('0x18')]);}})[_0xb352('0x1a')](function(_0x295b5e){logger[_0xb352('0x16')](_0xb352('0x11'),_0x554507,_0x295b5e);_0x12fa0a(_0x295b5e);});});}exports[_0xb352('0x1b')]=function(_0x31c659){var _0x35bc89=this;return new Promise(function(_0x13c6f2,_0x33f3ff){return db['VoiceQueueReport'][_0xb352('0x1c')]({'raw':_0x31c659['options']?_0x31c659[_0xb352('0x1d')][_0xb352('0x1e')]===undefined?!![]:![]:!![],'where':_0x31c659[_0xb352('0x1d')]?_0x31c659[_0xb352('0x1d')][_0xb352('0x1f')]||null:null,'attributes':_0x31c659[_0xb352('0x1d')]?_0x31c659['options'][_0xb352('0x20')]||null:null,'limit':_0x31c659[_0xb352('0x1d')]?_0x31c659[_0xb352('0x1d')][_0xb352('0x21')]||null:null,'include':_0x31c659[_0xb352('0x1d')]?_0x31c659[_0xb352('0x1d')][_0xb352('0x22')]?_[_0xb352('0x23')](_0x31c659['options'][_0xb352('0x22')],function(_0x116e77){return{'model':db[_0x116e77[_0xb352('0x24')]],'as':_0x116e77['as'],'attributes':_0x116e77[_0xb352('0x20')],'include':_0x116e77[_0xb352('0x22')]?_[_0xb352('0x23')](_0x116e77[_0xb352('0x22')],function(_0x2cb3e0){return{'model':db[_0x2cb3e0[_0xb352('0x24')]],'as':_0x2cb3e0['as'],'attributes':_0x2cb3e0[_0xb352('0x20')],'include':_0x2cb3e0[_0xb352('0x22')]?_[_0xb352('0x23')](_0x2cb3e0['include'],function(_0x61edf){return{'model':db[_0x61edf[_0xb352('0x24')]],'as':_0x61edf['as'],'attributes':_0x61edf[_0xb352('0x20')]};}):[]};}):[]};}):[]:[]})[_0xb352('0x25')](function(_0x518265){logger[_0xb352('0x10')](_0xb352('0x1b'),_0x31c659);logger['debug'](_0xb352('0x1b'),_0x31c659,JSON[_0xb352('0x15')](_0x518265));_0x13c6f2(_0x518265);})[_0xb352('0x1a')](function(_0x33406b){logger[_0xb352('0x16')]('GetVoiceQueueReport',_0x33406b[_0xb352('0x18')],_0x31c659);_0x33f3ff(_0x35bc89['error'](0x1f4,_0x33406b[_0xb352('0x18')]));});});};exports[_0xb352('0x26')]=function(_0x5939c9){var _0x570ca0=this;return new Promise(function(_0x6f94a5,_0x2ea429){return db['VoiceQueueReport'][_0xb352('0x27')](_0x5939c9['body'],{'raw':_0x5939c9['options']?_0x5939c9[_0xb352('0x1d')][_0xb352('0x1e')]===undefined?!![]:![]:!![]})[_0xb352('0x25')](function(_0x40c4ec){logger[_0xb352('0x10')](_0xb352('0x26'),_0x5939c9);logger[_0xb352('0x13')](_0xb352('0x26'),_0x5939c9,JSON['stringify'](_0x40c4ec));_0x6f94a5(_0x40c4ec);})[_0xb352('0x1a')](function(_0x512f59){logger[_0xb352('0x16')](_0xb352('0x26'),_0x512f59[_0xb352('0x18')],_0x5939c9);_0x2ea429(_0x570ca0[_0xb352('0x16')](0x1f4,_0x512f59[_0xb352('0x18')]));});});};exports[_0xb352('0x28')]=function(_0x5328cb){var _0x3ffccc=this;return new Promise(function(_0x130ea3,_0x580333){return db['VoiceQueueReport'][_0xb352('0x29')](_0x5328cb[_0xb352('0x2a')],{'raw':_0x5328cb[_0xb352('0x1d')]?_0x5328cb[_0xb352('0x1d')][_0xb352('0x1e')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5328cb[_0xb352('0x1d')]?_0x5328cb[_0xb352('0x1d')][_0xb352('0x1f')]||null:null,'attributes':_0x5328cb['options']?_0x5328cb['options'][_0xb352('0x20')]||null:null,'limit':_0x5328cb[_0xb352('0x1d')]?_0x5328cb['options'][_0xb352('0x21')]||null:null})[_0xb352('0x25')](function(_0x2b6540){logger[_0xb352('0x10')](_0xb352('0x28'),_0x5328cb);logger[_0xb352('0x13')]('UpdateVoiceQueueReport',_0x5328cb,JSON[_0xb352('0x15')](_0x2b6540));_0x130ea3(_0x2b6540);})[_0xb352('0x1a')](function(_0x4d62ae){logger[_0xb352('0x16')](_0xb352('0x28'),_0x4d62ae['message'],_0x5328cb);_0x580333(_0x3ffccc[_0xb352('0x16')](0x1f4,_0x4d62ae[_0xb352('0x18')]));});});};
\ No newline at end of file
+var _0x1d8c=['findAll','options','raw','where','attributes','limit','include','model','map','catch','CreateVoiceQueueReport','body','UpdateVoiceQueueReport','update','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','http','redis','defaults','socket.io-emitter','./voiceQueueReport.socket','register','request','then','info','VoiceQueueReport,\x20%s,\x20%s','request\x20sent','debug','VoiceQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','GetVoiceQueueReport','VoiceQueueReport'];(function(_0x395dbb,_0x3c745e){var _0x432c8a=function(_0x185515){while(--_0x185515){_0x395dbb['push'](_0x395dbb['shift']());}};_0x432c8a(++_0x3c745e);}(_0x1d8c,0xe0));var _0xc1d8=function(_0x4db2ab,_0xcbc3b2){_0x4db2ab=_0x4db2ab-0x0;var _0x4cbe54=_0x1d8c[_0x4db2ab];return _0x4cbe54;};'use strict';var _=require(_0xc1d8('0x0'));var util=require(_0xc1d8('0x1'));var moment=require(_0xc1d8('0x2'));var BPromise=require('bluebird');var rs=require(_0xc1d8('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xc1d8('0x4'))['db'];var utils=require(_0xc1d8('0x5'));var logger=require(_0xc1d8('0x6'))('rpc');var config=require(_0xc1d8('0x7'));var jayson=require('jayson/promise');var client=jayson['client'][_0xc1d8('0x8')]({'port':0x232a});config[_0xc1d8('0x9')]=_[_0xc1d8('0xa')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0xc1d8('0xb'))(new Redis(config['redis']));require(_0xc1d8('0xc'))[_0xc1d8('0xd')](socket);function respondWithRpcPromise(_0xe23ee5,_0x28ce1a,_0x3cf1e8){return new BPromise(function(_0xbf6437,_0x5cc11c){return client[_0xc1d8('0xe')](_0xe23ee5,_0x3cf1e8)[_0xc1d8('0xf')](function(_0x54b577){logger[_0xc1d8('0x10')](_0xc1d8('0x11'),_0x28ce1a,_0xc1d8('0x12'));logger[_0xc1d8('0x13')](_0xc1d8('0x14'),_0x28ce1a,_0xc1d8('0x12'),JSON[_0xc1d8('0x15')](_0x54b577));if(_0x54b577[_0xc1d8('0x16')]){if(_0x54b577['error'][_0xc1d8('0x17')]===0x1f4){logger[_0xc1d8('0x16')](_0xc1d8('0x11'),_0x28ce1a,_0x54b577['error'][_0xc1d8('0x18')]);return _0x5cc11c(_0x54b577[_0xc1d8('0x16')][_0xc1d8('0x18')]);}logger[_0xc1d8('0x16')](_0xc1d8('0x11'),_0x28ce1a,_0x54b577[_0xc1d8('0x16')][_0xc1d8('0x18')]);return _0xbf6437(_0x54b577[_0xc1d8('0x16')][_0xc1d8('0x18')]);}else{logger['info'](_0xc1d8('0x11'),_0x28ce1a,_0xc1d8('0x12'));_0xbf6437(_0x54b577[_0xc1d8('0x19')]['message']);}})['catch'](function(_0x16cf3c){logger[_0xc1d8('0x16')]('VoiceQueueReport,\x20%s,\x20%s',_0x28ce1a,_0x16cf3c);_0x5cc11c(_0x16cf3c);});});}exports[_0xc1d8('0x1a')]=function(_0x5ad61f){var _0x30c18b=this;return new Promise(function(_0x24f5da,_0x5870f3){return db[_0xc1d8('0x1b')][_0xc1d8('0x1c')]({'raw':_0x5ad61f[_0xc1d8('0x1d')]?_0x5ad61f[_0xc1d8('0x1d')][_0xc1d8('0x1e')]===undefined?!![]:![]:!![],'where':_0x5ad61f[_0xc1d8('0x1d')]?_0x5ad61f[_0xc1d8('0x1d')][_0xc1d8('0x1f')]||null:null,'attributes':_0x5ad61f[_0xc1d8('0x1d')]?_0x5ad61f['options'][_0xc1d8('0x20')]||null:null,'limit':_0x5ad61f[_0xc1d8('0x1d')]?_0x5ad61f[_0xc1d8('0x1d')][_0xc1d8('0x21')]||null:null,'include':_0x5ad61f[_0xc1d8('0x1d')]?_0x5ad61f[_0xc1d8('0x1d')]['include']?_['map'](_0x5ad61f['options'][_0xc1d8('0x22')],function(_0x205e49){return{'model':db[_0x205e49[_0xc1d8('0x23')]],'as':_0x205e49['as'],'attributes':_0x205e49['attributes'],'include':_0x205e49['include']?_['map'](_0x205e49[_0xc1d8('0x22')],function(_0x1d89c8){return{'model':db[_0x1d89c8[_0xc1d8('0x23')]],'as':_0x1d89c8['as'],'attributes':_0x1d89c8[_0xc1d8('0x20')],'include':_0x1d89c8[_0xc1d8('0x22')]?_[_0xc1d8('0x24')](_0x1d89c8['include'],function(_0x1ca96f){return{'model':db[_0x1ca96f[_0xc1d8('0x23')]],'as':_0x1ca96f['as'],'attributes':_0x1ca96f['attributes']};}):[]};}):[]};}):[]:[]})[_0xc1d8('0xf')](function(_0x44372d){logger[_0xc1d8('0x10')]('GetVoiceQueueReport',_0x5ad61f);logger['debug'](_0xc1d8('0x1a'),_0x5ad61f,JSON[_0xc1d8('0x15')](_0x44372d));_0x24f5da(_0x44372d);})[_0xc1d8('0x25')](function(_0x11190a){logger['error']('GetVoiceQueueReport',_0x11190a[_0xc1d8('0x18')],_0x5ad61f);_0x5870f3(_0x30c18b[_0xc1d8('0x16')](0x1f4,_0x11190a[_0xc1d8('0x18')]));});});};exports[_0xc1d8('0x26')]=function(_0x2a136d){var _0xad4362=this;return new Promise(function(_0x152968,_0x4c479d){return db[_0xc1d8('0x1b')]['create'](_0x2a136d[_0xc1d8('0x27')],{'raw':_0x2a136d[_0xc1d8('0x1d')]?_0x2a136d['options'][_0xc1d8('0x1e')]===undefined?!![]:![]:!![]})[_0xc1d8('0xf')](function(_0x348c0a){logger[_0xc1d8('0x10')]('CreateVoiceQueueReport',_0x2a136d);logger[_0xc1d8('0x13')](_0xc1d8('0x26'),_0x2a136d,JSON['stringify'](_0x348c0a));_0x152968(_0x348c0a);})[_0xc1d8('0x25')](function(_0x2a2254){logger['error'](_0xc1d8('0x26'),_0x2a2254['message'],_0x2a136d);_0x4c479d(_0xad4362[_0xc1d8('0x16')](0x1f4,_0x2a2254['message']));});});};exports[_0xc1d8('0x28')]=function(_0x3be306){var _0x5e2a4b=this;return new Promise(function(_0x1f0458,_0x1c5be3){return db[_0xc1d8('0x1b')][_0xc1d8('0x29')](_0x3be306['body'],{'raw':_0x3be306[_0xc1d8('0x1d')]?_0x3be306[_0xc1d8('0x1d')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3be306[_0xc1d8('0x1d')]?_0x3be306[_0xc1d8('0x1d')][_0xc1d8('0x1f')]||null:null,'attributes':_0x3be306[_0xc1d8('0x1d')]?_0x3be306[_0xc1d8('0x1d')][_0xc1d8('0x20')]||null:null,'limit':_0x3be306[_0xc1d8('0x1d')]?_0x3be306['options'][_0xc1d8('0x21')]||null:null})[_0xc1d8('0xf')](function(_0x29c3f2){logger[_0xc1d8('0x10')](_0xc1d8('0x28'),_0x3be306);logger[_0xc1d8('0x13')](_0xc1d8('0x28'),_0x3be306,JSON[_0xc1d8('0x15')](_0x29c3f2));_0x1f0458(_0x29c3f2);})[_0xc1d8('0x25')](function(_0x35a4d5){logger['error'](_0xc1d8('0x28'),_0x35a4d5['message'],_0x3be306);_0x1c5be3(_0x5e2a4b[_0xc1d8('0x16')](0x1f4,_0x35a4d5[_0xc1d8('0x18')]));});});};
\ No newline at end of file
index ac97816..c02a699 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7add=['./voiceQueueReport.events','save','remove','emit','removeListener','voiceQueueReport:'];(function(_0x39d88a,_0xcfe53f){var _0x23c194=function(_0x47d107){while(--_0x47d107){_0x39d88a['push'](_0x39d88a['shift']());}};_0x23c194(++_0xcfe53f);}(_0x7add,0x72));var _0xd7ad=function(_0xd3adea,_0x59280c){_0xd3adea=_0xd3adea-0x0;var _0x55dea6=_0x7add[_0xd3adea];return _0x55dea6;};'use strict';var VoiceQueueReportEvents=require(_0xd7ad('0x0'));var events=[_0xd7ad('0x1'),_0xd7ad('0x2'),'update'];function createListener(_0x3085bb,_0x462ad3){return function(_0x4814c8){_0x462ad3[_0xd7ad('0x3')](_0x3085bb,_0x4814c8);};}function removeListener(_0x5bb43f,_0x212036){return function(){VoiceQueueReportEvents[_0xd7ad('0x4')](_0x5bb43f,_0x212036);};}exports['register']=function(_0x5cabde){for(var _0x59b881=0x0,_0x47aa7b=events['length'];_0x59b881<_0x47aa7b;_0x59b881++){var _0x1a96d2=events[_0x59b881];var _0x502061=createListener(_0xd7ad('0x5')+_0x1a96d2,_0x5cabde);VoiceQueueReportEvents['on'](_0x1a96d2,_0x502061);}};
\ No newline at end of file
+var _0x7309=['remove','emit','register','voiceQueueReport:','save'];(function(_0x441563,_0x1d4a28){var _0x2369ec=function(_0x1f97ba){while(--_0x1f97ba){_0x441563['push'](_0x441563['shift']());}};_0x2369ec(++_0x1d4a28);}(_0x7309,0x18f));var _0x9730=function(_0xed9f89,_0x39b226){_0xed9f89=_0xed9f89-0x0;var _0x3dc843=_0x7309[_0xed9f89];return _0x3dc843;};'use strict';var VoiceQueueReportEvents=require('./voiceQueueReport.events');var events=[_0x9730('0x0'),_0x9730('0x1'),'update'];function createListener(_0x447c3b,_0x23df49){return function(_0x41138e){_0x23df49[_0x9730('0x2')](_0x447c3b,_0x41138e);};}function removeListener(_0x13e265,_0x357f7a){return function(){VoiceQueueReportEvents['removeListener'](_0x13e265,_0x357f7a);};}exports[_0x9730('0x3')]=function(_0x446466){for(var _0x4c8f5a=0x0,_0x1266bf=events['length'];_0x4c8f5a<_0x1266bf;_0x4c8f5a++){var _0x3163b9=events[_0x4c8f5a];var _0x37e041=createListener(_0x9730('0x4')+_0x3163b9,_0x446466);VoiceQueueReportEvents['on'](_0x3163b9,_0x37e041);}};
\ No newline at end of file
index b1a6384..413165a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcb04=['multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceQueuesLog.controller','isAuthenticated','index','get','/:id','show','post','create','put','update','delete','destroy','exports'];(function(_0x435674,_0x5d1b00){var _0xde33b2=function(_0x5b6f89){while(--_0x5b6f89){_0x435674['push'](_0x435674['shift']());}};_0xde33b2(++_0x5d1b00);}(_0xcb04,0x9a));var _0x4cb0=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xcb04[_0x14add3];return _0x4a174f;};'use strict';var multer=require(_0x4cb0('0x0'));var util=require(_0x4cb0('0x1'));var path=require(_0x4cb0('0x2'));var timeout=require(_0x4cb0('0x3'));var express=require(_0x4cb0('0x4'));var router=express[_0x4cb0('0x5')]();var auth=require(_0x4cb0('0x6'));var interaction=require(_0x4cb0('0x7'));var config=require(_0x4cb0('0x8'));var controller=require(_0x4cb0('0x9'));router['get']('/',auth[_0x4cb0('0xa')](),controller[_0x4cb0('0xb')]);router[_0x4cb0('0xc')](_0x4cb0('0xd'),auth[_0x4cb0('0xa')](),controller[_0x4cb0('0xe')]);router[_0x4cb0('0xf')]('/',auth[_0x4cb0('0xa')](),controller[_0x4cb0('0x10')]);router[_0x4cb0('0x11')](_0x4cb0('0xd'),auth[_0x4cb0('0xa')](),controller[_0x4cb0('0x12')]);router[_0x4cb0('0x13')](_0x4cb0('0xd'),auth[_0x4cb0('0xa')](),controller[_0x4cb0('0x14')]);module[_0x4cb0('0x15')]=router;
\ No newline at end of file
+var _0x1b9b=['index','get','isAuthenticated','show','post','create','put','/:id','update','destroy','exports','multer','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment'];(function(_0x2bf55a,_0x446c5c){var _0x320ee4=function(_0x5abc04){while(--_0x5abc04){_0x2bf55a['push'](_0x2bf55a['shift']());}};_0x320ee4(++_0x446c5c);}(_0x1b9b,0x89));var _0xb1b9=function(_0x1774e0,_0x2c2e03){_0x1774e0=_0x1774e0-0x0;var _0x5a01e2=_0x1b9b[_0x1774e0];return _0x5a01e2;};'use strict';var multer=require(_0xb1b9('0x0'));var util=require('util');var path=require(_0xb1b9('0x1'));var timeout=require(_0xb1b9('0x2'));var express=require(_0xb1b9('0x3'));var router=express[_0xb1b9('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xb1b9('0x5'));var config=require(_0xb1b9('0x6'));var controller=require('./voiceQueuesLog.controller');router['get']('/',auth['isAuthenticated'](),controller[_0xb1b9('0x7')]);router[_0xb1b9('0x8')]('/:id',auth[_0xb1b9('0x9')](),controller[_0xb1b9('0xa')]);router[_0xb1b9('0xb')]('/',auth['isAuthenticated'](),controller[_0xb1b9('0xc')]);router[_0xb1b9('0xd')](_0xb1b9('0xe'),auth['isAuthenticated'](),controller[_0xb1b9('0xf')]);router['delete'](_0xb1b9('0xe'),auth['isAuthenticated'](),controller[_0xb1b9('0x10')]);module[_0xb1b9('0x11')]=router;
\ No newline at end of file
index 0fac2f6..8df7e44 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x98a8=['sequelize','moment','exports','STRING','DATE','YYYY-MM-DD\x20HH:mm:ss'];(function(_0xb68772,_0x5253ac){var _0x4189bb=function(_0x1b0cf3){while(--_0x1b0cf3){_0xb68772['push'](_0xb68772['shift']());}};_0x4189bb(++_0x5253ac);}(_0x98a8,0x12c));var _0x898a=function(_0x13cebd,_0x579eaa){_0x13cebd=_0x13cebd-0x0;var _0x5e78f4=_0x98a8[_0x13cebd];return _0x5e78f4;};'use strict';var Sequelize=require(_0x898a('0x0'));var moment=require(_0x898a('0x1'));module[_0x898a('0x2')]={'time':{'type':Sequelize[_0x898a('0x3')]},'callid':{'type':Sequelize[_0x898a('0x3')],'allowNull':![],'defaultValue':''},'queuename':{'type':Sequelize[_0x898a('0x3')],'allowNull':![],'defaultValue':''},'agent':{'type':Sequelize[_0x898a('0x3')],'allowNull':![],'defaultValue':''},'event':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'data':{'type':Sequelize[_0x898a('0x3')],'allowNull':![],'defaultValue':''},'data1':{'type':Sequelize[_0x898a('0x3')],'allowNull':![],'defaultValue':''},'data2':{'type':Sequelize[_0x898a('0x3')],'allowNull':![],'defaultValue':''},'data3':{'type':Sequelize[_0x898a('0x3')],'allowNull':![],'defaultValue':''},'data4':{'type':Sequelize[_0x898a('0x3')],'allowNull':![],'defaultValue':''},'data5':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'dtm':{'type':Sequelize[_0x898a('0x4')],'allowNull':![],'defaultValue':moment()['format'](_0x898a('0x5'))}};
\ No newline at end of file
+var _0x5fc3=['STRING','DATE','YYYY-MM-DD\x20HH:mm:ss','sequelize','moment'];(function(_0x58a406,_0x42003c){var _0x454e7f=function(_0x3663d8){while(--_0x3663d8){_0x58a406['push'](_0x58a406['shift']());}};_0x454e7f(++_0x42003c);}(_0x5fc3,0xa8));var _0x35fc=function(_0x462fe4,_0x394d3e){_0x462fe4=_0x462fe4-0x0;var _0x82b23a=_0x5fc3[_0x462fe4];return _0x82b23a;};'use strict';var Sequelize=require(_0x35fc('0x0'));var moment=require(_0x35fc('0x1'));module['exports']={'time':{'type':Sequelize[_0x35fc('0x2')]},'callid':{'type':Sequelize[_0x35fc('0x2')],'allowNull':![],'defaultValue':''},'queuename':{'type':Sequelize[_0x35fc('0x2')],'allowNull':![],'defaultValue':''},'agent':{'type':Sequelize[_0x35fc('0x2')],'allowNull':![],'defaultValue':''},'event':{'type':Sequelize[_0x35fc('0x2')],'allowNull':![],'defaultValue':''},'data':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'data1':{'type':Sequelize[_0x35fc('0x2')],'allowNull':![],'defaultValue':''},'data2':{'type':Sequelize[_0x35fc('0x2')],'allowNull':![],'defaultValue':''},'data3':{'type':Sequelize[_0x35fc('0x2')],'allowNull':![],'defaultValue':''},'data4':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'data5':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'dtm':{'type':Sequelize[_0x35fc('0x3')],'allowNull':![],'defaultValue':moment()['format'](_0x35fc('0x4'))}};
\ No newline at end of file
index d1d71d2..e40ea7d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa057=['Content-Range','reject','save','update','then','destroy','end','error','stack','name','send','VoiceQueuesLog','model','keys','query','filters','intersection','fields','attributes','length','order','sort','where','pick','type','key','VIRTUAL','field','merge','options','includeAll','include','findAll','show','params','rawAttributes','find','catch','create','body','html-pdf','rimraf','zip-dir','request-promise','moment','bluebird','util','path','to-csv','ejs','lodash','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set'];(function(_0x1856e8,_0x4532d6){var _0x4ad341=function(_0x2495d7){while(--_0x2495d7){_0x1856e8['push'](_0x1856e8['shift']());}};_0x4ad341(++_0x4532d6);}(_0xa057,0x6f));var _0x7a05=function(_0x21f1a8,_0x3a43fc){_0x21f1a8=_0x21f1a8-0x0;var _0x580753=_0xa057[_0x21f1a8];return _0x580753;};'use strict';var pdf=require(_0x7a05('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x7a05('0x1'));var zipdir=require(_0x7a05('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x7a05('0x3'));var moment=require(_0x7a05('0x4'));var BPromise=require(_0x7a05('0x5'));var Mustache=require('mustache');var util=require(_0x7a05('0x6'));var path=require(_0x7a05('0x7'));var sox=require('sox');var csv=require(_0x7a05('0x8'));var ejs=require(_0x7a05('0x9'));var fs=require('fs');var _=require(_0x7a05('0xa'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x7a05('0xb'));var deskjs=require(_0x7a05('0xc'));var toCsv=require(_0x7a05('0x8'));var querystring=require(_0x7a05('0xd'));var Papa=require(_0x7a05('0xe'));var Redis=require(_0x7a05('0xf'));var authService=require(_0x7a05('0x10'));var qs=require(_0x7a05('0x11'));var hardwareService=require(_0x7a05('0x12'));var logger=require(_0x7a05('0x13'))(_0x7a05('0x14'));var utils=require(_0x7a05('0x15'));var config=require(_0x7a05('0x16'));var db=require(_0x7a05('0x17'))['db'];function respondWithStatusCode(_0x114960,_0x45d5cc){_0x45d5cc=_0x45d5cc||0xcc;return function(_0x1c99f2){if(_0x1c99f2){return _0x114960[_0x7a05('0x18')](_0x45d5cc);}return _0x114960['status'](_0x45d5cc)['end']();};}function respondWithResult(_0x3b23df,_0x410ba4){_0x410ba4=_0x410ba4||0xc8;return function(_0x22a312){if(_0x22a312){return _0x3b23df[_0x7a05('0x19')](_0x410ba4)[_0x7a05('0x1a')](_0x22a312);}};}function respondWithFilteredResult(_0x349165,_0x8bdc53){return function(_0xf0152f){if(_0xf0152f){var _0x5e3c9d=_0xf0152f[_0x7a05('0x1b')],_0x27c6d5=_0x8bdc53[_0x7a05('0x1c')],_0x53ff89=_0x8bdc53['offset']+_0x8bdc53[_0x7a05('0x1d')],_0x398871;if(_0x53ff89>=_0x5e3c9d){_0x53ff89=_0x5e3c9d;_0x398871=0xc8;}else{_0x398871=0xce;}_0x349165[_0x7a05('0x19')](_0x398871);return _0x349165[_0x7a05('0x1e')](_0x7a05('0x1f'),_0x27c6d5+'-'+_0x53ff89+'/'+_0x5e3c9d)[_0x7a05('0x1a')](_0xf0152f);}return null;};}function patchUpdates(_0x5cc497){return function(_0x1c9af9){try{jsonpatch['apply'](_0x1c9af9,_0x5cc497,!![]);}catch(_0x119c7e){return BPromise[_0x7a05('0x20')](_0x119c7e);}return _0x1c9af9[_0x7a05('0x21')]();};}function saveUpdates(_0x4f195d,_0x910e99){return function(_0x570456){if(_0x570456){return _0x570456[_0x7a05('0x22')](_0x4f195d)[_0x7a05('0x23')](function(_0x556071){return _0x556071;});}return null;};}function removeEntity(_0x200518,_0x468e61){return function(_0x17e457){if(_0x17e457){return _0x17e457[_0x7a05('0x24')]()[_0x7a05('0x23')](function(){_0x200518[_0x7a05('0x19')](0xcc)[_0x7a05('0x25')]();});}};}function handleEntityNotFound(_0x410145,_0x1a8c6a){return function(_0x162307){if(!_0x162307){_0x410145['sendStatus'](0x194);}return _0x162307;};}function handleError(_0x175e28,_0x4d6968){_0x4d6968=_0x4d6968||0x1f4;return function(_0x51b021){logger[_0x7a05('0x26')](_0x51b021[_0x7a05('0x27')]);if(_0x51b021[_0x7a05('0x28')]){delete _0x51b021[_0x7a05('0x28')];}_0x175e28[_0x7a05('0x19')](_0x4d6968)[_0x7a05('0x29')](_0x51b021);};}exports['index']=function(_0x546b02,_0x51ee03){var _0x58aaa2={},_0x2093a9={},_0x2400a0={'count':0x0,'rows':[]};var _0x5887a4=db[_0x7a05('0x2a')]['rawAttributes'];_0x2093a9[_0x7a05('0x2b')]=_[_0x7a05('0x2c')](_0x5887a4);_0x2093a9['query']=_[_0x7a05('0x2c')](_0x546b02[_0x7a05('0x2d')]);_0x2093a9[_0x7a05('0x2e')]=_['intersection'](_0x2093a9['model'],_0x2093a9['query']);_0x58aaa2['attributes']=_[_0x7a05('0x2f')](_0x2093a9[_0x7a05('0x2b')],qs[_0x7a05('0x30')](_0x546b02[_0x7a05('0x2d')][_0x7a05('0x30')]));_0x58aaa2[_0x7a05('0x31')]=_0x58aaa2[_0x7a05('0x31')][_0x7a05('0x32')]?_0x58aaa2['attributes']:_0x2093a9[_0x7a05('0x2b')];if(!_0x546b02['query']['hasOwnProperty']('nolimit')){_0x58aaa2['limit']=qs[_0x7a05('0x1d')](_0x546b02['query'][_0x7a05('0x1d')]);_0x58aaa2[_0x7a05('0x1c')]=qs[_0x7a05('0x1c')](_0x546b02[_0x7a05('0x2d')]['offset']);}_0x58aaa2[_0x7a05('0x33')]=qs['sort'](_0x546b02[_0x7a05('0x2d')][_0x7a05('0x34')]);_0x58aaa2[_0x7a05('0x35')]=qs[_0x7a05('0x2e')](_[_0x7a05('0x36')](_0x546b02[_0x7a05('0x2d')],_0x2093a9[_0x7a05('0x2e')]));if(_0x546b02[_0x7a05('0x2d')]['filter']){_0x58aaa2[_0x7a05('0x35')]=_['merge'](_0x58aaa2[_0x7a05('0x35')],{'$or':_['map'](_0x5887a4,function(_0x50da90){if(_0x50da90[_0x7a05('0x37')][_0x7a05('0x38')]!==_0x7a05('0x39')){var _0xeaa2bf={};_0xeaa2bf[_0x50da90[_0x7a05('0x3a')]]={'$like':'%'+_0x546b02['query']['filter']+'%'};return _0xeaa2bf;}})});}_0x58aaa2=_[_0x7a05('0x3b')]({},_0x58aaa2,_0x546b02[_0x7a05('0x3c')]);var _0x137ca2={'where':_0x58aaa2[_0x7a05('0x35')]};return db[_0x7a05('0x2a')][_0x7a05('0x1b')](_0x137ca2)[_0x7a05('0x23')](function(_0x348f32){_0x2400a0[_0x7a05('0x1b')]=_0x348f32;if(_0x546b02['query'][_0x7a05('0x3d')]){_0x58aaa2[_0x7a05('0x3e')]=[{'all':!![]}];}return db[_0x7a05('0x2a')][_0x7a05('0x3f')](_0x58aaa2);})[_0x7a05('0x23')](function(_0x239bbb){_0x2400a0['rows']=_0x239bbb;return _0x2400a0;})[_0x7a05('0x23')](respondWithFilteredResult(_0x51ee03,_0x58aaa2))['catch'](handleError(_0x51ee03,null));};exports[_0x7a05('0x40')]=function(_0x2a9dea,_0x4ed4e8){var _0xc3c329={'raw':!![],'where':{'id':_0x2a9dea[_0x7a05('0x41')]['id']}},_0xaf97a7={};_0xaf97a7[_0x7a05('0x2b')]=_['keys'](db['VoiceQueuesLog'][_0x7a05('0x42')]);_0xaf97a7[_0x7a05('0x2d')]=_[_0x7a05('0x2c')](_0x2a9dea[_0x7a05('0x2d')]);_0xaf97a7[_0x7a05('0x2e')]=_[_0x7a05('0x2f')](_0xaf97a7[_0x7a05('0x2b')],_0xaf97a7[_0x7a05('0x2d')]);_0xc3c329[_0x7a05('0x31')]=_[_0x7a05('0x2f')](_0xaf97a7[_0x7a05('0x2b')],qs[_0x7a05('0x30')](_0x2a9dea['query'][_0x7a05('0x30')]));_0xc3c329[_0x7a05('0x31')]=_0xc3c329[_0x7a05('0x31')][_0x7a05('0x32')]?_0xc3c329[_0x7a05('0x31')]:_0xaf97a7[_0x7a05('0x2b')];if(_0x2a9dea['query']['includeAll']){_0xc3c329[_0x7a05('0x3e')]=[{'all':!![]}];}_0xc3c329=_[_0x7a05('0x3b')]({},_0xc3c329,_0x2a9dea[_0x7a05('0x3c')]);return db[_0x7a05('0x2a')][_0x7a05('0x43')](_0xc3c329)[_0x7a05('0x23')](handleEntityNotFound(_0x4ed4e8,null))[_0x7a05('0x23')](respondWithResult(_0x4ed4e8,null))[_0x7a05('0x44')](handleError(_0x4ed4e8,null));};exports['create']=function(_0x5d82cb,_0xc64e84){return db[_0x7a05('0x2a')][_0x7a05('0x45')](_0x5d82cb[_0x7a05('0x46')],{})[_0x7a05('0x23')](respondWithResult(_0xc64e84,0xc9))[_0x7a05('0x44')](handleError(_0xc64e84,null));};exports['update']=function(_0x10b4da,_0xd182a3){if(_0x10b4da[_0x7a05('0x46')]['id']){delete _0x10b4da[_0x7a05('0x46')]['id'];}return db[_0x7a05('0x2a')][_0x7a05('0x43')]({'where':{'id':_0x10b4da[_0x7a05('0x41')]['id']}})[_0x7a05('0x23')](handleEntityNotFound(_0xd182a3,null))['then'](saveUpdates(_0x10b4da['body'],null))['then'](respondWithResult(_0xd182a3,null))[_0x7a05('0x44')](handleError(_0xd182a3,null));};exports[_0x7a05('0x24')]=function(_0x21b2db,_0x37cfea){return db['VoiceQueuesLog'][_0x7a05('0x43')]({'where':{'id':_0x21b2db['params']['id']}})['then'](handleEntityNotFound(_0x37cfea,null))[_0x7a05('0x23')](removeEntity(_0x37cfea,null))[_0x7a05('0x44')](handleError(_0x37cfea,null));};
\ No newline at end of file
+var _0xf0f6=['request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','apply','save','update','destroy','send','index','VoiceQueuesLog','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','merge','key','VIRTUAL','field','filter','then','includeAll','findAll','rows','catch','show','params','include','options','create','body','find','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch'];(function(_0x2c0543,_0x2926d7){var _0x455199=function(_0xbd0a2e){while(--_0xbd0a2e){_0x2c0543['push'](_0x2c0543['shift']());}};_0x455199(++_0x2926d7);}(_0xf0f6,0x163));var _0x6f0f=function(_0x275986,_0x1ce08e){_0x275986=_0x275986-0x0;var _0x41e82c=_0xf0f6[_0x275986];return _0x41e82c;};'use strict';var pdf=require(_0x6f0f('0x0'));var emlformat=require(_0x6f0f('0x1'));var rimraf=require(_0x6f0f('0x2'));var zipdir=require(_0x6f0f('0x3'));var jsonpatch=require(_0x6f0f('0x4'));var rp=require(_0x6f0f('0x5'));var moment=require(_0x6f0f('0x6'));var BPromise=require(_0x6f0f('0x7'));var Mustache=require(_0x6f0f('0x8'));var util=require(_0x6f0f('0x9'));var path=require(_0x6f0f('0xa'));var sox=require(_0x6f0f('0xb'));var csv=require(_0x6f0f('0xc'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x6f0f('0xd'));var squel=require(_0x6f0f('0xe'));var crypto=require(_0x6f0f('0xf'));var jsforce=require(_0x6f0f('0x10'));var deskjs=require(_0x6f0f('0x11'));var toCsv=require(_0x6f0f('0xc'));var querystring=require(_0x6f0f('0x12'));var Papa=require(_0x6f0f('0x13'));var Redis=require(_0x6f0f('0x14'));var authService=require(_0x6f0f('0x15'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x6f0f('0x16'));var logger=require(_0x6f0f('0x17'))(_0x6f0f('0x18'));var utils=require('../../config/utils');var config=require(_0x6f0f('0x19'));var db=require(_0x6f0f('0x1a'))['db'];function respondWithStatusCode(_0x255804,_0x52c8c6){_0x52c8c6=_0x52c8c6||0xcc;return function(_0x55b33a){if(_0x55b33a){return _0x255804[_0x6f0f('0x1b')](_0x52c8c6);}return _0x255804[_0x6f0f('0x1c')](_0x52c8c6)['end']();};}function respondWithResult(_0x33c6a3,_0x1cf5b0){_0x1cf5b0=_0x1cf5b0||0xc8;return function(_0x1fa919){if(_0x1fa919){return _0x33c6a3[_0x6f0f('0x1c')](_0x1cf5b0)[_0x6f0f('0x1d')](_0x1fa919);}};}function respondWithFilteredResult(_0x4fc4e9,_0x33d348){return function(_0x18e350){if(_0x18e350){var _0x104b2b=_0x18e350[_0x6f0f('0x1e')],_0x3adb19=_0x33d348['offset'],_0x56ece7=_0x33d348[_0x6f0f('0x1f')]+_0x33d348[_0x6f0f('0x20')],_0x5e0f37;if(_0x56ece7>=_0x104b2b){_0x56ece7=_0x104b2b;_0x5e0f37=0xc8;}else{_0x5e0f37=0xce;}_0x4fc4e9[_0x6f0f('0x1c')](_0x5e0f37);return _0x4fc4e9[_0x6f0f('0x21')]('Content-Range',_0x3adb19+'-'+_0x56ece7+'/'+_0x104b2b)['json'](_0x18e350);}return null;};}function patchUpdates(_0x1fa099){return function(_0x44e2f0){try{jsonpatch[_0x6f0f('0x22')](_0x44e2f0,_0x1fa099,!![]);}catch(_0x36c276){return BPromise['reject'](_0x36c276);}return _0x44e2f0[_0x6f0f('0x23')]();};}function saveUpdates(_0x651ca8,_0x14411f){return function(_0x31cd8d){if(_0x31cd8d){return _0x31cd8d[_0x6f0f('0x24')](_0x651ca8)['then'](function(_0x49f487){return _0x49f487;});}return null;};}function removeEntity(_0x134538,_0x4e06da){return function(_0x3d9ae1){if(_0x3d9ae1){return _0x3d9ae1[_0x6f0f('0x25')]()['then'](function(){_0x134538[_0x6f0f('0x1c')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4c369a,_0x3161f8){return function(_0x5c3202){if(!_0x5c3202){_0x4c369a['sendStatus'](0x194);}return _0x5c3202;};}function handleError(_0x4c9318,_0xf3f5ff){_0xf3f5ff=_0xf3f5ff||0x1f4;return function(_0x4bb173){logger['error'](_0x4bb173['stack']);if(_0x4bb173['name']){delete _0x4bb173['name'];}_0x4c9318[_0x6f0f('0x1c')](_0xf3f5ff)[_0x6f0f('0x26')](_0x4bb173);};}exports[_0x6f0f('0x27')]=function(_0x3e0e27,_0x3a9af6){var _0x4972e1={},_0x503907={},_0x2f55f4={'count':0x0,'rows':[]};var _0x2df501=db[_0x6f0f('0x28')][_0x6f0f('0x29')];_0x503907[_0x6f0f('0x2a')]=_[_0x6f0f('0x2b')](_0x2df501);_0x503907[_0x6f0f('0x2c')]=_['keys'](_0x3e0e27['query']);_0x503907[_0x6f0f('0x2d')]=_[_0x6f0f('0x2e')](_0x503907[_0x6f0f('0x2a')],_0x503907[_0x6f0f('0x2c')]);_0x4972e1[_0x6f0f('0x2f')]=_[_0x6f0f('0x2e')](_0x503907[_0x6f0f('0x2a')],qs['fields'](_0x3e0e27[_0x6f0f('0x2c')][_0x6f0f('0x30')]));_0x4972e1[_0x6f0f('0x2f')]=_0x4972e1[_0x6f0f('0x2f')][_0x6f0f('0x31')]?_0x4972e1[_0x6f0f('0x2f')]:_0x503907['model'];if(!_0x3e0e27[_0x6f0f('0x2c')][_0x6f0f('0x32')](_0x6f0f('0x33'))){_0x4972e1[_0x6f0f('0x20')]=qs[_0x6f0f('0x20')](_0x3e0e27[_0x6f0f('0x2c')][_0x6f0f('0x20')]);_0x4972e1['offset']=qs[_0x6f0f('0x1f')](_0x3e0e27['query'][_0x6f0f('0x1f')]);}_0x4972e1[_0x6f0f('0x34')]=qs[_0x6f0f('0x35')](_0x3e0e27[_0x6f0f('0x2c')]['sort']);_0x4972e1[_0x6f0f('0x36')]=qs[_0x6f0f('0x2d')](_['pick'](_0x3e0e27[_0x6f0f('0x2c')],_0x503907[_0x6f0f('0x2d')]));if(_0x3e0e27[_0x6f0f('0x2c')]['filter']){_0x4972e1[_0x6f0f('0x36')]=_[_0x6f0f('0x37')](_0x4972e1[_0x6f0f('0x36')],{'$or':_['map'](_0x2df501,function(_0x42e8d6){if(_0x42e8d6['type'][_0x6f0f('0x38')]!==_0x6f0f('0x39')){var _0x1f46bb={};_0x1f46bb[_0x42e8d6[_0x6f0f('0x3a')]]={'$like':'%'+_0x3e0e27[_0x6f0f('0x2c')][_0x6f0f('0x3b')]+'%'};return _0x1f46bb;}})});}_0x4972e1=_['merge']({},_0x4972e1,_0x3e0e27['options']);var _0x29d6a6={'where':_0x4972e1[_0x6f0f('0x36')]};return db[_0x6f0f('0x28')][_0x6f0f('0x1e')](_0x29d6a6)[_0x6f0f('0x3c')](function(_0x968c32){_0x2f55f4[_0x6f0f('0x1e')]=_0x968c32;if(_0x3e0e27['query'][_0x6f0f('0x3d')]){_0x4972e1['include']=[{'all':!![]}];}return db[_0x6f0f('0x28')][_0x6f0f('0x3e')](_0x4972e1);})[_0x6f0f('0x3c')](function(_0x1692d7){_0x2f55f4[_0x6f0f('0x3f')]=_0x1692d7;return _0x2f55f4;})[_0x6f0f('0x3c')](respondWithFilteredResult(_0x3a9af6,_0x4972e1))[_0x6f0f('0x40')](handleError(_0x3a9af6,null));};exports[_0x6f0f('0x41')]=function(_0x1c07b1,_0x4cc833){var _0x40018d={'raw':!![],'where':{'id':_0x1c07b1[_0x6f0f('0x42')]['id']}},_0x5b480c={};_0x5b480c['model']=_[_0x6f0f('0x2b')](db[_0x6f0f('0x28')][_0x6f0f('0x29')]);_0x5b480c[_0x6f0f('0x2c')]=_[_0x6f0f('0x2b')](_0x1c07b1['query']);_0x5b480c[_0x6f0f('0x2d')]=_[_0x6f0f('0x2e')](_0x5b480c[_0x6f0f('0x2a')],_0x5b480c['query']);_0x40018d[_0x6f0f('0x2f')]=_['intersection'](_0x5b480c['model'],qs['fields'](_0x1c07b1[_0x6f0f('0x2c')][_0x6f0f('0x30')]));_0x40018d[_0x6f0f('0x2f')]=_0x40018d[_0x6f0f('0x2f')]['length']?_0x40018d[_0x6f0f('0x2f')]:_0x5b480c[_0x6f0f('0x2a')];if(_0x1c07b1['query'][_0x6f0f('0x3d')]){_0x40018d[_0x6f0f('0x43')]=[{'all':!![]}];}_0x40018d=_[_0x6f0f('0x37')]({},_0x40018d,_0x1c07b1[_0x6f0f('0x44')]);return db['VoiceQueuesLog']['find'](_0x40018d)['then'](handleEntityNotFound(_0x4cc833,null))['then'](respondWithResult(_0x4cc833,null))[_0x6f0f('0x40')](handleError(_0x4cc833,null));};exports[_0x6f0f('0x45')]=function(_0x509335,_0x223b8c){return db['VoiceQueuesLog'][_0x6f0f('0x45')](_0x509335['body'],{})[_0x6f0f('0x3c')](respondWithResult(_0x223b8c,0xc9))['catch'](handleError(_0x223b8c,null));};exports[_0x6f0f('0x24')]=function(_0x39d25e,_0x31bf71){if(_0x39d25e[_0x6f0f('0x46')]['id']){delete _0x39d25e[_0x6f0f('0x46')]['id'];}return db[_0x6f0f('0x28')][_0x6f0f('0x47')]({'where':{'id':_0x39d25e[_0x6f0f('0x42')]['id']}})[_0x6f0f('0x3c')](handleEntityNotFound(_0x31bf71,null))[_0x6f0f('0x3c')](saveUpdates(_0x39d25e[_0x6f0f('0x46')],null))[_0x6f0f('0x3c')](respondWithResult(_0x31bf71,null))[_0x6f0f('0x40')](handleError(_0x31bf71,null));};exports[_0x6f0f('0x25')]=function(_0x5da8e8,_0x5db456){return db[_0x6f0f('0x28')][_0x6f0f('0x47')]({'where':{'id':_0x5da8e8[_0x6f0f('0x42')]['id']}})[_0x6f0f('0x3c')](handleEntityNotFound(_0x5db456,null))[_0x6f0f('0x3c')](removeEntity(_0x5db456,null))[_0x6f0f('0x40')](handleError(_0x5db456,null));};
\ No newline at end of file
index a00c5df..c8da963 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4627=['exports','define','VoiceQueuesLog','voice_queues_log','event_dtm','util','../../config/logger','moment','bluebird','request-promise','path','rimraf','../../config/environment'];(function(_0x2d54d1,_0x3bb863){var _0x191339=function(_0x3129b7){while(--_0x3129b7){_0x2d54d1['push'](_0x2d54d1['shift']());}};_0x191339(++_0x3bb863);}(_0x4627,0x198));var _0x7462=function(_0x1caf6a,_0x26a5bf){_0x1caf6a=_0x1caf6a-0x0;var _0x1bf493=_0x4627[_0x1caf6a];return _0x1bf493;};'use strict';var _=require('lodash');var util=require(_0x7462('0x0'));var logger=require(_0x7462('0x1'))('api');var moment=require(_0x7462('0x2'));var BPromise=require(_0x7462('0x3'));var rp=require(_0x7462('0x4'));var fs=require('fs');var path=require(_0x7462('0x5'));var rimraf=require(_0x7462('0x6'));var config=require(_0x7462('0x7'));var attributes=require('./voiceQueuesLog.attributes');module[_0x7462('0x8')]=function(_0x56bba0,_0x3fd604){return _0x56bba0[_0x7462('0x9')](_0x7462('0xa'),attributes,{'tableName':_0x7462('0xb'),'paranoid':![],'indexes':[{'name':_0x7462('0xc'),'fields':['event','dtm']}],'timestamps':![]});};
\ No newline at end of file
+var _0x6de0=['util','moment','bluebird','rimraf','./voiceQueuesLog.attributes','exports','define','voice_queues_log','event_dtm','event','dtm'];(function(_0x56f7f2,_0x4108a9){var _0x4d8cb6=function(_0x2e5da5){while(--_0x2e5da5){_0x56f7f2['push'](_0x56f7f2['shift']());}};_0x4d8cb6(++_0x4108a9);}(_0x6de0,0x134));var _0x06de=function(_0x35885a,_0x42fed7){_0x35885a=_0x35885a-0x0;var _0xe86249=_0x6de0[_0x35885a];return _0xe86249;};'use strict';var _=require('lodash');var util=require(_0x06de('0x0'));var logger=require('../../config/logger')('api');var moment=require(_0x06de('0x1'));var BPromise=require(_0x06de('0x2'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x06de('0x3'));var config=require('../../config/environment');var attributes=require(_0x06de('0x4'));module[_0x06de('0x5')]=function(_0x292647,_0x184fbd){return _0x292647[_0x06de('0x6')]('VoiceQueuesLog',attributes,{'tableName':_0x06de('0x7'),'paranoid':![],'indexes':[{'name':_0x06de('0x8'),'fields':[_0x06de('0x9'),_0x06de('0xa')]}],'timestamps':![]});};
\ No newline at end of file
index 908b833..91fefe6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1669=['debug','stringify','error','message','result','catch','lodash','util','moment','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','info','VoiceQueuesLog,\x20%s,\x20%s','request\x20sent'];(function(_0x32fab5,_0x1c3ea6){var _0x1983ea=function(_0x2c2289){while(--_0x2c2289){_0x32fab5['push'](_0x32fab5['shift']());}};_0x1983ea(++_0x1c3ea6);}(_0x1669,0x1e9));var _0x9166=function(_0x29ab76,_0x20c8af){_0x29ab76=_0x29ab76-0x0;var _0x30ae46=_0x1669[_0x29ab76];return _0x30ae46;};'use strict';var _=require(_0x9166('0x0'));var util=require(_0x9166('0x1'));var moment=require(_0x9166('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x9166('0x3'));var db=require(_0x9166('0x4'))['db'];var utils=require(_0x9166('0x5'));var logger=require(_0x9166('0x6'))(_0x9166('0x7'));var config=require(_0x9166('0x8'));var jayson=require(_0x9166('0x9'));var client=jayson['client'][_0x9166('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x581a63,_0x2efcf4,_0x401f17){return new BPromise(function(_0x478f6f,_0x103d5e){return client[_0x9166('0xb')](_0x581a63,_0x401f17)['then'](function(_0x56e549){logger[_0x9166('0xc')](_0x9166('0xd'),_0x2efcf4,_0x9166('0xe'));logger[_0x9166('0xf')]('VoiceQueuesLog,\x20%s,\x20%s,\x20%s',_0x2efcf4,_0x9166('0xe'),JSON[_0x9166('0x10')](_0x56e549));if(_0x56e549['error']){if(_0x56e549[_0x9166('0x11')]['code']===0x1f4){logger[_0x9166('0x11')](_0x9166('0xd'),_0x2efcf4,_0x56e549['error'][_0x9166('0x12')]);return _0x103d5e(_0x56e549[_0x9166('0x11')][_0x9166('0x12')]);}logger[_0x9166('0x11')](_0x9166('0xd'),_0x2efcf4,_0x56e549[_0x9166('0x11')][_0x9166('0x12')]);return _0x478f6f(_0x56e549[_0x9166('0x11')]['message']);}else{logger['info']('VoiceQueuesLog,\x20%s,\x20%s',_0x2efcf4,_0x9166('0xe'));_0x478f6f(_0x56e549[_0x9166('0x13')][_0x9166('0x12')]);}})[_0x9166('0x14')](function(_0x573b39){logger[_0x9166('0x11')](_0x9166('0xd'),_0x2efcf4,_0x573b39);_0x103d5e(_0x573b39);});});}
\ No newline at end of file
+var _0xc90a=['moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','client','request','then','info','VoiceQueuesLog,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','lodash','util'];(function(_0x2850c0,_0x1363a7){var _0x21e830=function(_0x3ec70a){while(--_0x3ec70a){_0x2850c0['push'](_0x2850c0['shift']());}};_0x21e830(++_0x1363a7);}(_0xc90a,0x102));var _0xac90=function(_0x4f9252,_0x2aec6f){_0x4f9252=_0x4f9252-0x0;var _0x3cf8f9=_0xc90a[_0x4f9252];return _0x3cf8f9;};'use strict';var _=require(_0xac90('0x0'));var util=require(_0xac90('0x1'));var moment=require(_0xac90('0x2'));var BPromise=require(_0xac90('0x3'));var rs=require(_0xac90('0x4'));var fs=require('fs');var Redis=require(_0xac90('0x5'));var db=require(_0xac90('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0xac90('0x7'))('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xac90('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x4e1a04,_0x198e8f,_0x1d2640){return new BPromise(function(_0x4b4361,_0x26958d){return client[_0xac90('0x9')](_0x4e1a04,_0x1d2640)[_0xac90('0xa')](function(_0x1a1c38){logger[_0xac90('0xb')](_0xac90('0xc'),_0x198e8f,_0xac90('0xd'));logger[_0xac90('0xe')]('VoiceQueuesLog,\x20%s,\x20%s,\x20%s',_0x198e8f,_0xac90('0xd'),JSON[_0xac90('0xf')](_0x1a1c38));if(_0x1a1c38[_0xac90('0x10')]){if(_0x1a1c38['error'][_0xac90('0x11')]===0x1f4){logger[_0xac90('0x10')](_0xac90('0xc'),_0x198e8f,_0x1a1c38[_0xac90('0x10')][_0xac90('0x12')]);return _0x26958d(_0x1a1c38['error'][_0xac90('0x12')]);}logger['error'](_0xac90('0xc'),_0x198e8f,_0x1a1c38[_0xac90('0x10')][_0xac90('0x12')]);return _0x4b4361(_0x1a1c38[_0xac90('0x10')][_0xac90('0x12')]);}else{logger[_0xac90('0xb')]('VoiceQueuesLog,\x20%s,\x20%s',_0x198e8f,'request\x20sent');_0x4b4361(_0x1a1c38[_0xac90('0x13')][_0xac90('0x12')]);}})['catch'](function(_0x17f1fa){logger[_0xac90('0x10')](_0xac90('0xc'),_0x198e8f,_0x17f1fa);_0x26958d(_0x17f1fa);});});}
\ No newline at end of file
index c1e9b2d..1e0bc68 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1306=['index','/describe','describe','/:id','show','/:id/download','download','/:id/downloads','downloads','post','create','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceRecording.controller','get','isAuthenticated'];(function(_0x5a636f,_0x3fec2b){var _0x6a8cfb=function(_0x20e6ca){while(--_0x20e6ca){_0x5a636f['push'](_0x5a636f['shift']());}};_0x6a8cfb(++_0x3fec2b);}(_0x1306,0x17a));var _0x6130=function(_0x5ab4bf,_0x310b87){_0x5ab4bf=_0x5ab4bf-0x0;var _0x505742=_0x1306[_0x5ab4bf];return _0x505742;};'use strict';var multer=require(_0x6130('0x0'));var util=require(_0x6130('0x1'));var path=require(_0x6130('0x2'));var timeout=require(_0x6130('0x3'));var express=require(_0x6130('0x4'));var router=express[_0x6130('0x5')]();var auth=require(_0x6130('0x6'));var interaction=require(_0x6130('0x7'));var config=require(_0x6130('0x8'));var controller=require(_0x6130('0x9'));router[_0x6130('0xa')]('/',auth[_0x6130('0xb')](),controller[_0x6130('0xc')]);router[_0x6130('0xa')](_0x6130('0xd'),auth[_0x6130('0xb')](),controller[_0x6130('0xe')]);router[_0x6130('0xa')](_0x6130('0xf'),auth[_0x6130('0xb')](),controller[_0x6130('0x10')]);router[_0x6130('0xa')](_0x6130('0x11'),auth[_0x6130('0xb')](),controller[_0x6130('0x12')]);router[_0x6130('0xa')](_0x6130('0x13'),controller[_0x6130('0x14')]);router[_0x6130('0x15')]('/',auth['isAuthenticated'](),controller[_0x6130('0x16')]);router['put'](_0x6130('0xf'),auth[_0x6130('0xb')](),controller['update']);router[_0x6130('0x17')](_0x6130('0xf'),auth[_0x6130('0xb')](),controller[_0x6130('0x18')]);module[_0x6130('0x19')]=router;
\ No newline at end of file
+var _0x8664=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','/describe','isAuthenticated','describe','show','/:id/download','/:id/downloads','post','update','delete','/:id','destroy','multer','util','path','connect-timeout'];(function(_0x1c9a22,_0x172587){var _0x259611=function(_0x496c1e){while(--_0x496c1e){_0x1c9a22['push'](_0x1c9a22['shift']());}};_0x259611(++_0x172587);}(_0x8664,0x11a));var _0x4866=function(_0x122a19,_0x5c8c49){_0x122a19=_0x122a19-0x0;var _0x5b0a38=_0x8664[_0x122a19];return _0x5b0a38;};'use strict';var multer=require(_0x4866('0x0'));var util=require(_0x4866('0x1'));var path=require(_0x4866('0x2'));var timeout=require(_0x4866('0x3'));var express=require(_0x4866('0x4'));var router=express[_0x4866('0x5')]();var auth=require(_0x4866('0x6'));var interaction=require(_0x4866('0x7'));var config=require(_0x4866('0x8'));var controller=require('./voiceRecording.controller');router[_0x4866('0x9')]('/',auth['isAuthenticated'](),controller[_0x4866('0xa')]);router[_0x4866('0x9')](_0x4866('0xb'),auth[_0x4866('0xc')](),controller[_0x4866('0xd')]);router[_0x4866('0x9')]('/:id',auth[_0x4866('0xc')](),controller[_0x4866('0xe')]);router[_0x4866('0x9')](_0x4866('0xf'),auth[_0x4866('0xc')](),controller['download']);router[_0x4866('0x9')](_0x4866('0x10'),controller['downloads']);router[_0x4866('0x11')]('/',auth[_0x4866('0xc')](),controller['create']);router['put']('/:id',auth[_0x4866('0xc')](),controller[_0x4866('0x12')]);router[_0x4866('0x13')](_0x4866('0x14'),auth[_0x4866('0xc')](),controller[_0x4866('0x15')]);module['exports']=router;
\ No newline at end of file
index 550457c..a902c94 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4011=['updatedAt','sequelize','path','exports','VIRTUAL','extname','getDataValue','value','STRING','setDataValue','channel','split','INTEGER','createdAt','format','toString','DATE'];(function(_0x1e3c16,_0x372caa){var _0x47a0c9=function(_0x47f81d){while(--_0x47f81d){_0x1e3c16['push'](_0x1e3c16['shift']());}};_0x47a0c9(++_0x372caa);}(_0x4011,0x133));var _0x1401=function(_0x114e6a,_0x3dc9d2){_0x114e6a=_0x114e6a-0x0;var _0x423189=_0x4011[_0x114e6a];return _0x423189;};'use strict';var Sequelize=require(_0x1401('0x0'));var moment=require('moment');var path=require(_0x1401('0x1'));module[_0x1401('0x2')]={'format':{'type':Sequelize[_0x1401('0x3')],'get':function(){return this['getDataValue']('value')?path[_0x1401('0x4')](this[_0x1401('0x5')](_0x1401('0x6'))):undefined;}},'uniqueid':{'type':Sequelize[_0x1401('0x7')]},'channel':{'type':Sequelize[_0x1401('0x7')],'set':function(_0x56b18e){if(_0x56b18e){this[_0x1401('0x8')](_0x1401('0x9'),_0x56b18e);this[_0x1401('0x8')]('membername',_0x56b18e[_0x1401('0xa')](/\/|-/)[0x1]);}}},'membername':{'type':Sequelize[_0x1401('0x7')]},'calleridnum':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x1401('0x7')]},'connectedlinenum':{'type':Sequelize[_0x1401('0x7')]},'connectedlinename':{'type':Sequelize[_0x1401('0x7')]},'accountcode':{'type':Sequelize[_0x1401('0x7')]},'context':{'type':Sequelize[_0x1401('0x7')]},'exten':{'type':Sequelize[_0x1401('0x7')]},'value':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0x1401('0x7')]},'rating':{'type':Sequelize[_0x1401('0xb')],'validate':{'max':0x5,'min':0x0}},'queue':{'type':Sequelize[_0x1401('0x7')]},'userDisposition':{'type':Sequelize[_0x1401('0x7')]},'createdAt':{'type':Sequelize['DATE'],'get':function(){return moment(this[_0x1401('0x5')](_0x1401('0xc')))[_0x1401('0xd')]('MM-DD-YYYY\x20HH:mm')[_0x1401('0xe')]();}},'updatedAt':{'type':Sequelize[_0x1401('0xf')],'get':function(){return moment(this[_0x1401('0x5')](_0x1401('0x10')))['format']('MM-DD-YYYY\x20HH:mm')[_0x1401('0xe')]();}}};
\ No newline at end of file
+var _0xc451=['DATE','createdAt','format','MM-DD-YYYY\x20HH:mm','updatedAt','sequelize','moment','path','value','extname','getDataValue','STRING','setDataValue','channel','membername'];(function(_0x4da5d4,_0x3861c8){var _0x26cb6b=function(_0x220ac2){while(--_0x220ac2){_0x4da5d4['push'](_0x4da5d4['shift']());}};_0x26cb6b(++_0x3861c8);}(_0xc451,0xb9));var _0x1c45=function(_0x4cf139,_0x48bdf9){_0x4cf139=_0x4cf139-0x0;var _0x5e6d86=_0xc451[_0x4cf139];return _0x5e6d86;};'use strict';var Sequelize=require(_0x1c45('0x0'));var moment=require(_0x1c45('0x1'));var path=require(_0x1c45('0x2'));module['exports']={'format':{'type':Sequelize['VIRTUAL'],'get':function(){return this['getDataValue'](_0x1c45('0x3'))?path[_0x1c45('0x4')](this[_0x1c45('0x5')](_0x1c45('0x3'))):undefined;}},'uniqueid':{'type':Sequelize[_0x1c45('0x6')]},'channel':{'type':Sequelize[_0x1c45('0x6')],'set':function(_0x490973){if(_0x490973){this[_0x1c45('0x7')](_0x1c45('0x8'),_0x490973);this[_0x1c45('0x7')](_0x1c45('0x9'),_0x490973['split'](/\/|-/)[0x1]);}}},'membername':{'type':Sequelize[_0x1c45('0x6')]},'calleridnum':{'type':Sequelize[_0x1c45('0x6')]},'calleridname':{'type':Sequelize[_0x1c45('0x6')]},'connectedlinenum':{'type':Sequelize[_0x1c45('0x6')]},'connectedlinename':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize[_0x1c45('0x6')]},'context':{'type':Sequelize['STRING']},'exten':{'type':Sequelize[_0x1c45('0x6')]},'value':{'type':Sequelize[_0x1c45('0x6')]},'type':{'type':Sequelize['STRING']},'rating':{'type':Sequelize['INTEGER'],'validate':{'max':0x5,'min':0x0}},'queue':{'type':Sequelize[_0x1c45('0x6')]},'userDisposition':{'type':Sequelize[_0x1c45('0x6')]},'createdAt':{'type':Sequelize[_0x1c45('0xa')],'get':function(){return moment(this[_0x1c45('0x5')](_0x1c45('0xb')))[_0x1c45('0xc')](_0x1c45('0xd'))['toString']();}},'updatedAt':{'type':Sequelize[_0x1c45('0xa')],'get':function(){return moment(this[_0x1c45('0x5')](_0x1c45('0xe')))[_0x1c45('0xc')]('MM-DD-YYYY\x20HH:mm')['toString']();}}};
\ No newline at end of file
index 833d2c5..a9cdd7e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3ea5=['format','query','filters','model','fields','attributes','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','includeAll','include','findAll','rows','catch','show','params','intersection','length','options','find','create','body','describe','download','uniqueid','value','%s.cypher','decryptFile','recording','existsSync','ValidationError','VoiceRecording\x20not\x20found','filename','extname','unlink','message','send','downloads','../../components/encryptor','sequelize','token','$and','push','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','limit','apply','reject','save','destroy','then','stack','name','index','VoiceRecording','differenceBy','keys'];(function(_0x156abe,_0x2a0417){var _0x1a3ba3=function(_0x4fc58a){while(--_0x4fc58a){_0x156abe['push'](_0x156abe['shift']());}};_0x1a3ba3(++_0x2a0417);}(_0x3ea5,0x14a));var _0x53ea=function(_0x9f26a3,_0x37671a){_0x9f26a3=_0x9f26a3-0x0;var _0x54ad80=_0x3ea5[_0x9f26a3];return _0x54ad80;};'use strict';var pdf=require(_0x53ea('0x0'));var emlformat=require(_0x53ea('0x1'));var rimraf=require(_0x53ea('0x2'));var zipdir=require(_0x53ea('0x3'));var jsonpatch=require(_0x53ea('0x4'));var rp=require(_0x53ea('0x5'));var moment=require(_0x53ea('0x6'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0x53ea('0x7'));var sox=require(_0x53ea('0x8'));var csv=require(_0x53ea('0x9'));var ejs=require(_0x53ea('0xa'));var fs=require('fs');var _=require(_0x53ea('0xb'));var squel=require(_0x53ea('0xc'));var crypto=require(_0x53ea('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x53ea('0xe'));var toCsv=require(_0x53ea('0x9'));var querystring=require('querystring');var Papa=require(_0x53ea('0xf'));var Redis=require(_0x53ea('0x10'));var authService=require(_0x53ea('0x11'));var qs=require(_0x53ea('0x12'));var hardwareService=require(_0x53ea('0x13'));var logger=require(_0x53ea('0x14'))(_0x53ea('0x15'));var utils=require(_0x53ea('0x16'));var config=require(_0x53ea('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1f41e6,_0x19cf53){_0x19cf53=_0x19cf53||0xcc;return function(_0x5b8afe){if(_0x5b8afe){return _0x1f41e6[_0x53ea('0x18')](_0x19cf53);}return _0x1f41e6['status'](_0x19cf53)[_0x53ea('0x19')]();};}function respondWithResult(_0x3c8b1a,_0x16884a){_0x16884a=_0x16884a||0xc8;return function(_0x59dc50){if(_0x59dc50){return _0x3c8b1a[_0x53ea('0x1a')](_0x16884a)[_0x53ea('0x1b')](_0x59dc50);}};}function respondWithFilteredResult(_0x5b1e13,_0x1f1eab){return function(_0x18fc22){if(_0x18fc22){var _0x295657=_0x18fc22[_0x53ea('0x1c')],_0x1a3be3=_0x1f1eab[_0x53ea('0x1d')],_0x26e5c7=_0x1f1eab[_0x53ea('0x1d')]+_0x1f1eab[_0x53ea('0x1e')],_0x56bcb2;if(_0x26e5c7>=_0x295657){_0x26e5c7=_0x295657;_0x56bcb2=0xc8;}else{_0x56bcb2=0xce;}_0x5b1e13[_0x53ea('0x1a')](_0x56bcb2);return _0x5b1e13['set']('Content-Range',_0x1a3be3+'-'+_0x26e5c7+'/'+_0x295657)[_0x53ea('0x1b')](_0x18fc22);}return null;};}function patchUpdates(_0x4250e0){return function(_0x408e79){try{jsonpatch[_0x53ea('0x1f')](_0x408e79,_0x4250e0,!![]);}catch(_0xf715e){return BPromise[_0x53ea('0x20')](_0xf715e);}return _0x408e79[_0x53ea('0x21')]();};}function saveUpdates(_0x218614,_0x471974){return function(_0x535918){if(_0x535918){return _0x535918['update'](_0x218614)['then'](function(_0xb6b479){return _0xb6b479;});}return null;};}function removeEntity(_0x3cd4bd,_0x31b678){return function(_0x342abd){if(_0x342abd){return _0x342abd[_0x53ea('0x22')]()[_0x53ea('0x23')](function(){_0x3cd4bd[_0x53ea('0x1a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1e786a,_0x369640){return function(_0x251b8e){if(!_0x251b8e){_0x1e786a[_0x53ea('0x18')](0x194);}return _0x251b8e;};}function handleError(_0x11e8d8,_0x331490){_0x331490=_0x331490||0x1f4;return function(_0x485a7f){logger['error'](_0x485a7f[_0x53ea('0x24')]);if(_0x485a7f[_0x53ea('0x25')]){delete _0x485a7f[_0x53ea('0x25')];}_0x11e8d8['status'](_0x331490)['send'](_0x485a7f);};}exports[_0x53ea('0x26')]=function(_0x540f0c,_0x5a212d){var _0x32dcfe={},_0x5b45ef={},_0x192501={'count':0x0,'rows':[]};var _0x47706a=db[_0x53ea('0x27')]['rawAttributes'];_0x5b45ef['model']=_[_0x53ea('0x28')](_[_0x53ea('0x29')](_0x47706a),[_0x53ea('0x2a')]);_0x5b45ef[_0x53ea('0x2b')]=_[_0x53ea('0x29')](_0x540f0c['query']);_0x5b45ef[_0x53ea('0x2c')]=_['intersection'](_0x5b45ef['model'],_0x5b45ef['query']);_0x32dcfe['attributes']=_['intersection'](_0x5b45ef[_0x53ea('0x2d')],qs[_0x53ea('0x2e')](_0x540f0c[_0x53ea('0x2b')][_0x53ea('0x2e')]));_0x32dcfe[_0x53ea('0x2f')]=_0x32dcfe['attributes']['length']?_0x32dcfe[_0x53ea('0x2f')]:_0x5b45ef['model'];if(!_0x540f0c[_0x53ea('0x2b')][_0x53ea('0x30')](_0x53ea('0x31'))){_0x32dcfe[_0x53ea('0x1e')]=qs[_0x53ea('0x1e')](_0x540f0c['query'][_0x53ea('0x1e')]);_0x32dcfe[_0x53ea('0x1d')]=qs[_0x53ea('0x1d')](_0x540f0c[_0x53ea('0x2b')]['offset']);}_0x32dcfe[_0x53ea('0x32')]=qs[_0x53ea('0x33')](_0x540f0c[_0x53ea('0x2b')][_0x53ea('0x33')]);_0x32dcfe[_0x53ea('0x34')]=qs[_0x53ea('0x2c')](_[_0x53ea('0x35')](_0x540f0c[_0x53ea('0x2b')],_0x5b45ef[_0x53ea('0x2c')]));if(_0x540f0c['query'][_0x53ea('0x36')]){_0x32dcfe[_0x53ea('0x34')]=_[_0x53ea('0x37')](_0x32dcfe[_0x53ea('0x34')],{'$or':_[_0x53ea('0x38')](_0x47706a,function(_0x1a9c72){if(_0x1a9c72[_0x53ea('0x39')][_0x53ea('0x3a')]!=='VIRTUAL'){var _0x99fab5={};_0x99fab5[_0x1a9c72['field']]={'$like':'%'+_0x540f0c[_0x53ea('0x2b')]['filter']+'%'};return _0x99fab5;}})});}_0x32dcfe=_['merge']({},_0x32dcfe,_0x540f0c['options']);var _0x8a1856={'where':_0x32dcfe['where']};return db[_0x53ea('0x27')][_0x53ea('0x1c')](_0x8a1856)[_0x53ea('0x23')](function(_0xadeb06){_0x192501[_0x53ea('0x1c')]=_0xadeb06;if(_0x540f0c[_0x53ea('0x2b')][_0x53ea('0x3b')]){_0x32dcfe[_0x53ea('0x3c')]=[{'all':!![]}];}return db[_0x53ea('0x27')][_0x53ea('0x3d')](_0x32dcfe);})[_0x53ea('0x23')](function(_0x5f0dd6){_0x192501[_0x53ea('0x3e')]=_0x5f0dd6;return _0x192501;})[_0x53ea('0x23')](respondWithFilteredResult(_0x5a212d,_0x32dcfe))[_0x53ea('0x3f')](handleError(_0x5a212d,null));};exports[_0x53ea('0x40')]=function(_0x39a49a,_0x338ebf){var _0x13ccf4={'raw':![],'where':{'id':_0x39a49a[_0x53ea('0x41')]['id']}},_0x34ee2f={};_0x34ee2f[_0x53ea('0x2d')]=_['keys'](db[_0x53ea('0x27')]['rawAttributes']);_0x34ee2f[_0x53ea('0x2b')]=_[_0x53ea('0x29')](_0x39a49a['query']);_0x34ee2f[_0x53ea('0x2c')]=_[_0x53ea('0x42')](_0x34ee2f[_0x53ea('0x2d')],_0x34ee2f['query']);_0x13ccf4[_0x53ea('0x2f')]=_[_0x53ea('0x42')](_0x34ee2f[_0x53ea('0x2d')],qs[_0x53ea('0x2e')](_0x39a49a[_0x53ea('0x2b')][_0x53ea('0x2e')]));_0x13ccf4['attributes']=_0x13ccf4[_0x53ea('0x2f')][_0x53ea('0x43')]?_0x13ccf4[_0x53ea('0x2f')]:_0x34ee2f[_0x53ea('0x2d')];if(_0x39a49a[_0x53ea('0x2b')]['includeAll']){_0x13ccf4[_0x53ea('0x3c')]=[{'all':!![]}];}_0x13ccf4=_[_0x53ea('0x37')]({},_0x13ccf4,_0x39a49a[_0x53ea('0x44')]);return db[_0x53ea('0x27')][_0x53ea('0x45')](_0x13ccf4)[_0x53ea('0x23')](handleEntityNotFound(_0x338ebf,null))['then'](respondWithResult(_0x338ebf,null))[_0x53ea('0x3f')](handleError(_0x338ebf,null));};exports['create']=function(_0x3b630e,_0x329ba6){return db[_0x53ea('0x27')][_0x53ea('0x46')](_0x3b630e[_0x53ea('0x47')],{})[_0x53ea('0x23')](respondWithResult(_0x329ba6,0xc9))[_0x53ea('0x3f')](handleError(_0x329ba6,null));};exports['update']=function(_0x20ce89,_0x5a90f3){if(_0x20ce89[_0x53ea('0x47')]['id']){delete _0x20ce89[_0x53ea('0x47')]['id'];}return db[_0x53ea('0x27')][_0x53ea('0x45')]({'where':{'id':_0x20ce89[_0x53ea('0x41')]['id']}})[_0x53ea('0x23')](handleEntityNotFound(_0x5a90f3,null))['then'](saveUpdates(_0x20ce89[_0x53ea('0x47')],null))[_0x53ea('0x23')](respondWithResult(_0x5a90f3,null))[_0x53ea('0x3f')](handleError(_0x5a90f3,null));};exports[_0x53ea('0x22')]=function(_0x5c0123,_0x3dd4ac){return db[_0x53ea('0x27')]['find']({'where':{'id':_0x5c0123[_0x53ea('0x41')]['id']}})['then'](handleEntityNotFound(_0x3dd4ac,null))[_0x53ea('0x23')](removeEntity(_0x3dd4ac,null))[_0x53ea('0x3f')](handleError(_0x3dd4ac,null));};exports[_0x53ea('0x48')]=function(_0x32c269,_0x2addbf){return db[_0x53ea('0x27')][_0x53ea('0x48')]()[_0x53ea('0x23')](respondWithResult(_0x2addbf,null))[_0x53ea('0x3f')](handleError(_0x2addbf,null));};exports[_0x53ea('0x49')]=function(_0x24fd66,_0xf722b8,_0x15a12b){var _0xc874ed=require('../../components/encryptor');var _0x1c8759=![];var _0x52e3a2={};if(_0x24fd66['query'][_0x53ea('0x39')]&&_0x24fd66[_0x53ea('0x2b')][_0x53ea('0x39')]===_0x53ea('0x4a')){_0x52e3a2[_0x53ea('0x4a')]=_0x24fd66[_0x53ea('0x41')]['id'];}else{_0x52e3a2['id']=_0x24fd66[_0x53ea('0x41')]['id'];}return db[_0x53ea('0x27')][_0x53ea('0x45')]({'where':_0x52e3a2,'attributes':['id',_0x53ea('0x4b')],'raw':!![]})[_0x53ea('0x23')](handleEntityNotFound(_0xf722b8,null))['then'](function(_0x1337c5){if(_0x1337c5){var _0x49fbf7=_0x1337c5[_0x53ea('0x4b')];var _0x3fabdd=util[_0x53ea('0x2a')](_0x53ea('0x4c'),_0x49fbf7);if(fs['existsSync'](_0x3fabdd)){_0x1c8759=!![];return _0xc874ed[_0x53ea('0x4d')](_0x3fabdd,_0x49fbf7,config['secrets'][_0x53ea('0x4e')])[_0x53ea('0x23')](function(){return _0x1337c5;});}return _0x1337c5;}})['then'](function(_0x39c986){if(_0x39c986){var _0x5b0c79=_0x39c986[_0x53ea('0x4b')];if(!fs[_0x53ea('0x4f')](_0x5b0c79)){throw new db['Sequelize'][(_0x53ea('0x50'))](_0x53ea('0x51'));}if(_0x39c986[_0x53ea('0x52')]){return _0xf722b8[_0x53ea('0x49')](_0x5b0c79,_0x39c986[_0x53ea('0x52')]+path[_0x53ea('0x53')](_0x5b0c79),function(){if(_0x1c8759){fs[_0x53ea('0x54')](_0x5b0c79);}});}else{return _0xf722b8[_0x53ea('0x49')](_0x5b0c79,function(_0x1bf296){if(_0x1c8759){fs[_0x53ea('0x54')](_0x5b0c79);}});}}})['catch'](function(_0x31a68c){if(_0x31a68c[_0x53ea('0x55')]==='VoiceRecording\x20not\x20found'){_0xf722b8[_0x53ea('0x1a')](0x194)[_0x53ea('0x56')]('Not\x20found');}else{return handleError(_0xf722b8,null);}});};exports[_0x53ea('0x57')]=function(_0x23b1d2,_0x3b7340,_0x3dd5e6){var _0x5ec99a=require(_0x53ea('0x58'));var _0x23b18a=![];var _0x5155bd={'$and':[db[_0x53ea('0x59')][_0x53ea('0x34')](db[_0x53ea('0x59')]['fn']('MD5',db[_0x53ea('0x59')]['col'](_0x53ea('0x4a'))),_0x23b1d2[_0x53ea('0x2b')][_0x53ea('0x5a')])]};if(_0x23b1d2[_0x53ea('0x2b')][_0x53ea('0x39')]&&_0x23b1d2[_0x53ea('0x2b')][_0x53ea('0x39')]===_0x53ea('0x4a')){_0x5155bd[_0x53ea('0x5b')][_0x53ea('0x5c')]({'uniqueid':_0x23b1d2[_0x53ea('0x41')]['id']});}else{_0x5155bd[_0x53ea('0x5b')][_0x53ea('0x5c')]({'id':_0x23b1d2['params']['id']});}return db[_0x53ea('0x27')][_0x53ea('0x45')]({'where':_0x5155bd,'attributes':['id','value'],'raw':!![]})[_0x53ea('0x23')](handleEntityNotFound(_0x3b7340,null))['then'](function(_0x567c67){if(_0x567c67){var _0xc0bb78=util[_0x53ea('0x2a')](_0x53ea('0x4c'),_0x567c67[_0x53ea('0x4b')]);if(fs[_0x53ea('0x4f')](_0xc0bb78)){_0x23b18a=!![];return _0x5ec99a[_0x53ea('0x4d')](_0xc0bb78,_0x567c67[_0x53ea('0x4b')],config['secrets']['recording'])[_0x53ea('0x23')](function(){return _0x567c67;});}return _0x567c67;}})[_0x53ea('0x23')](function(_0x456497){if(_0x456497){if(!fs[_0x53ea('0x4f')](_0x456497[_0x53ea('0x4b')])){throw new db['Sequelize']['ValidationError'](_0x53ea('0x51'));}if(_0x456497[_0x53ea('0x52')]){return _0x3b7340['download'](_0x456497[_0x53ea('0x4b')],_0x456497[_0x53ea('0x52')]+path[_0x53ea('0x53')](_0x456497[_0x53ea('0x4b')]),function(){if(_0x23b18a){fs[_0x53ea('0x54')](_0x456497['value']);}});}else{return _0x3b7340[_0x53ea('0x49')](_0x456497['value'],function(_0x4bfd63){if(_0x23b18a){fs[_0x53ea('0x54')](_0x456497[_0x53ea('0x4b')]);}});}}})[_0x53ea('0x3f')](handleError(_0x3b7340,null));};
\ No newline at end of file
+var _0x57e3=['../../config/logger','../../config/utils','sendStatus','end','status','json','offset','Content-Range','apply','reject','save','update','then','error','stack','name','send','index','VoiceRecording','differenceBy','format','keys','filters','model','attributes','intersection','fields','query','hasOwnProperty','nolimit','limit','sort','pick','filter','where','merge','map','key','VIRTUAL','field','options','count','includeAll','include','findAll','rows','show','params','rawAttributes','catch','create','body','find','destroy','describe','download','type','uniqueid','value','%s.cypher','decryptFile','secrets','recording','existsSync','VoiceRecording\x20not\x20found','filename','extname','unlink','message','Not\x20found','downloads','../../components/encryptor','sequelize','MD5','token','$and','push','Sequelize','ValidationError','html-pdf','eml-format','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware'];(function(_0x1cc78b,_0x4e39fd){var _0x3bc4a1=function(_0x2f92fd){while(--_0x2f92fd){_0x1cc78b['push'](_0x1cc78b['shift']());}};_0x3bc4a1(++_0x4e39fd);}(_0x57e3,0x1e3));var _0x357e=function(_0x21e6d0,_0x393f54){_0x21e6d0=_0x21e6d0-0x0;var _0x36bd42=_0x57e3[_0x21e6d0];return _0x36bd42;};'use strict';var pdf=require(_0x357e('0x0'));var emlformat=require(_0x357e('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x357e('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x357e('0x3'));var moment=require(_0x357e('0x4'));var BPromise=require(_0x357e('0x5'));var Mustache=require(_0x357e('0x6'));var util=require(_0x357e('0x7'));var path=require(_0x357e('0x8'));var sox=require(_0x357e('0x9'));var csv=require(_0x357e('0xa'));var ejs=require(_0x357e('0xb'));var fs=require('fs');var _=require(_0x357e('0xc'));var squel=require(_0x357e('0xd'));var crypto=require(_0x357e('0xe'));var jsforce=require(_0x357e('0xf'));var deskjs=require(_0x357e('0x10'));var toCsv=require('to-csv');var querystring=require(_0x357e('0x11'));var Papa=require(_0x357e('0x12'));var Redis=require(_0x357e('0x13'));var authService=require('../../components/auth/service');var qs=require(_0x357e('0x14'));var hardwareService=require(_0x357e('0x15'));var logger=require(_0x357e('0x16'))('api');var utils=require(_0x357e('0x17'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2b1100,_0x553778){_0x553778=_0x553778||0xcc;return function(_0x4400bb){if(_0x4400bb){return _0x2b1100[_0x357e('0x18')](_0x553778);}return _0x2b1100['status'](_0x553778)[_0x357e('0x19')]();};}function respondWithResult(_0x154569,_0x1e4c08){_0x1e4c08=_0x1e4c08||0xc8;return function(_0x3ac0b8){if(_0x3ac0b8){return _0x154569[_0x357e('0x1a')](_0x1e4c08)[_0x357e('0x1b')](_0x3ac0b8);}};}function respondWithFilteredResult(_0x2d5be1,_0x4566ed){return function(_0x3decd8){if(_0x3decd8){var _0x4e00e5=_0x3decd8['count'],_0xf07628=_0x4566ed[_0x357e('0x1c')],_0x289a29=_0x4566ed[_0x357e('0x1c')]+_0x4566ed['limit'],_0x9f69a9;if(_0x289a29>=_0x4e00e5){_0x289a29=_0x4e00e5;_0x9f69a9=0xc8;}else{_0x9f69a9=0xce;}_0x2d5be1[_0x357e('0x1a')](_0x9f69a9);return _0x2d5be1['set'](_0x357e('0x1d'),_0xf07628+'-'+_0x289a29+'/'+_0x4e00e5)[_0x357e('0x1b')](_0x3decd8);}return null;};}function patchUpdates(_0x361d75){return function(_0x4d8655){try{jsonpatch[_0x357e('0x1e')](_0x4d8655,_0x361d75,!![]);}catch(_0x157dba){return BPromise[_0x357e('0x1f')](_0x157dba);}return _0x4d8655[_0x357e('0x20')]();};}function saveUpdates(_0x65826e,_0xb5e5f4){return function(_0x5ea742){if(_0x5ea742){return _0x5ea742[_0x357e('0x21')](_0x65826e)[_0x357e('0x22')](function(_0x39a44d){return _0x39a44d;});}return null;};}function removeEntity(_0x2e43c4,_0x34ba22){return function(_0x5258df){if(_0x5258df){return _0x5258df['destroy']()['then'](function(){_0x2e43c4[_0x357e('0x1a')](0xcc)[_0x357e('0x19')]();});}};}function handleEntityNotFound(_0x204f0f,_0x3cfaee){return function(_0x23c123){if(!_0x23c123){_0x204f0f[_0x357e('0x18')](0x194);}return _0x23c123;};}function handleError(_0xe46dd1,_0x29fd7d){_0x29fd7d=_0x29fd7d||0x1f4;return function(_0x7a1ae5){logger[_0x357e('0x23')](_0x7a1ae5[_0x357e('0x24')]);if(_0x7a1ae5[_0x357e('0x25')]){delete _0x7a1ae5[_0x357e('0x25')];}_0xe46dd1[_0x357e('0x1a')](_0x29fd7d)[_0x357e('0x26')](_0x7a1ae5);};}exports[_0x357e('0x27')]=function(_0x5d1716,_0x553b99){var _0x3bf000={},_0x416a24={},_0x3bf18f={'count':0x0,'rows':[]};var _0x1f8058=db[_0x357e('0x28')]['rawAttributes'];_0x416a24['model']=_[_0x357e('0x29')](_['keys'](_0x1f8058),[_0x357e('0x2a')]);_0x416a24['query']=_[_0x357e('0x2b')](_0x5d1716['query']);_0x416a24[_0x357e('0x2c')]=_['intersection'](_0x416a24[_0x357e('0x2d')],_0x416a24['query']);_0x3bf000[_0x357e('0x2e')]=_[_0x357e('0x2f')](_0x416a24['model'],qs[_0x357e('0x30')](_0x5d1716['query'][_0x357e('0x30')]));_0x3bf000[_0x357e('0x2e')]=_0x3bf000[_0x357e('0x2e')]['length']?_0x3bf000['attributes']:_0x416a24[_0x357e('0x2d')];if(!_0x5d1716[_0x357e('0x31')][_0x357e('0x32')](_0x357e('0x33'))){_0x3bf000[_0x357e('0x34')]=qs['limit'](_0x5d1716[_0x357e('0x31')][_0x357e('0x34')]);_0x3bf000[_0x357e('0x1c')]=qs[_0x357e('0x1c')](_0x5d1716[_0x357e('0x31')]['offset']);}_0x3bf000['order']=qs['sort'](_0x5d1716[_0x357e('0x31')][_0x357e('0x35')]);_0x3bf000['where']=qs[_0x357e('0x2c')](_[_0x357e('0x36')](_0x5d1716[_0x357e('0x31')],_0x416a24['filters']));if(_0x5d1716[_0x357e('0x31')][_0x357e('0x37')]){_0x3bf000[_0x357e('0x38')]=_[_0x357e('0x39')](_0x3bf000[_0x357e('0x38')],{'$or':_[_0x357e('0x3a')](_0x1f8058,function(_0x423645){if(_0x423645['type'][_0x357e('0x3b')]!==_0x357e('0x3c')){var _0x447d2a={};_0x447d2a[_0x423645[_0x357e('0x3d')]]={'$like':'%'+_0x5d1716[_0x357e('0x31')][_0x357e('0x37')]+'%'};return _0x447d2a;}})});}_0x3bf000=_[_0x357e('0x39')]({},_0x3bf000,_0x5d1716[_0x357e('0x3e')]);var _0x3bf0fb={'where':_0x3bf000['where']};return db[_0x357e('0x28')]['count'](_0x3bf0fb)[_0x357e('0x22')](function(_0x9c4c29){_0x3bf18f[_0x357e('0x3f')]=_0x9c4c29;if(_0x5d1716[_0x357e('0x31')][_0x357e('0x40')]){_0x3bf000[_0x357e('0x41')]=[{'all':!![]}];}return db[_0x357e('0x28')][_0x357e('0x42')](_0x3bf000);})[_0x357e('0x22')](function(_0x2bafe9){_0x3bf18f[_0x357e('0x43')]=_0x2bafe9;return _0x3bf18f;})[_0x357e('0x22')](respondWithFilteredResult(_0x553b99,_0x3bf000))['catch'](handleError(_0x553b99,null));};exports[_0x357e('0x44')]=function(_0x552d1d,_0x13251f){var _0x9ad9ea={'raw':![],'where':{'id':_0x552d1d[_0x357e('0x45')]['id']}},_0x351be6={};_0x351be6['model']=_[_0x357e('0x2b')](db[_0x357e('0x28')][_0x357e('0x46')]);_0x351be6['query']=_[_0x357e('0x2b')](_0x552d1d[_0x357e('0x31')]);_0x351be6[_0x357e('0x2c')]=_[_0x357e('0x2f')](_0x351be6['model'],_0x351be6[_0x357e('0x31')]);_0x9ad9ea[_0x357e('0x2e')]=_['intersection'](_0x351be6[_0x357e('0x2d')],qs[_0x357e('0x30')](_0x552d1d[_0x357e('0x31')][_0x357e('0x30')]));_0x9ad9ea[_0x357e('0x2e')]=_0x9ad9ea['attributes']['length']?_0x9ad9ea[_0x357e('0x2e')]:_0x351be6[_0x357e('0x2d')];if(_0x552d1d[_0x357e('0x31')]['includeAll']){_0x9ad9ea['include']=[{'all':!![]}];}_0x9ad9ea=_['merge']({},_0x9ad9ea,_0x552d1d[_0x357e('0x3e')]);return db[_0x357e('0x28')]['find'](_0x9ad9ea)[_0x357e('0x22')](handleEntityNotFound(_0x13251f,null))['then'](respondWithResult(_0x13251f,null))[_0x357e('0x47')](handleError(_0x13251f,null));};exports['create']=function(_0x37196b,_0x2108f4){return db[_0x357e('0x28')][_0x357e('0x48')](_0x37196b['body'],{})[_0x357e('0x22')](respondWithResult(_0x2108f4,0xc9))[_0x357e('0x47')](handleError(_0x2108f4,null));};exports[_0x357e('0x21')]=function(_0x449fa1,_0x51d159){if(_0x449fa1['body']['id']){delete _0x449fa1[_0x357e('0x49')]['id'];}return db[_0x357e('0x28')][_0x357e('0x4a')]({'where':{'id':_0x449fa1[_0x357e('0x45')]['id']}})[_0x357e('0x22')](handleEntityNotFound(_0x51d159,null))[_0x357e('0x22')](saveUpdates(_0x449fa1['body'],null))[_0x357e('0x22')](respondWithResult(_0x51d159,null))[_0x357e('0x47')](handleError(_0x51d159,null));};exports[_0x357e('0x4b')]=function(_0x50ecb9,_0x36a930){return db['VoiceRecording'][_0x357e('0x4a')]({'where':{'id':_0x50ecb9[_0x357e('0x45')]['id']}})['then'](handleEntityNotFound(_0x36a930,null))[_0x357e('0x22')](removeEntity(_0x36a930,null))[_0x357e('0x47')](handleError(_0x36a930,null));};exports[_0x357e('0x4c')]=function(_0x13625e,_0x34bac6){return db[_0x357e('0x28')][_0x357e('0x4c')]()[_0x357e('0x22')](respondWithResult(_0x34bac6,null))[_0x357e('0x47')](handleError(_0x34bac6,null));};exports[_0x357e('0x4d')]=function(_0xa8b8ad,_0x348645,_0x528cab){var _0x278e51=require('../../components/encryptor');var _0x13f3b4=![];var _0x392492={};if(_0xa8b8ad[_0x357e('0x31')][_0x357e('0x4e')]&&_0xa8b8ad[_0x357e('0x31')][_0x357e('0x4e')]==='uniqueid'){_0x392492[_0x357e('0x4f')]=_0xa8b8ad[_0x357e('0x45')]['id'];}else{_0x392492['id']=_0xa8b8ad[_0x357e('0x45')]['id'];}return db[_0x357e('0x28')][_0x357e('0x4a')]({'where':_0x392492,'attributes':['id','value'],'raw':!![]})['then'](handleEntityNotFound(_0x348645,null))[_0x357e('0x22')](function(_0x59a7bc){if(_0x59a7bc){var _0x9ac0e3=_0x59a7bc[_0x357e('0x50')];var _0x34bf49=util[_0x357e('0x2a')](_0x357e('0x51'),_0x9ac0e3);if(fs['existsSync'](_0x34bf49)){_0x13f3b4=!![];return _0x278e51[_0x357e('0x52')](_0x34bf49,_0x9ac0e3,config[_0x357e('0x53')][_0x357e('0x54')])[_0x357e('0x22')](function(){return _0x59a7bc;});}return _0x59a7bc;}})[_0x357e('0x22')](function(_0x53dd97){if(_0x53dd97){var _0x12d321=_0x53dd97[_0x357e('0x50')];if(!fs[_0x357e('0x55')](_0x12d321)){throw new db['Sequelize']['ValidationError'](_0x357e('0x56'));}if(_0x53dd97[_0x357e('0x57')]){return _0x348645['download'](_0x12d321,_0x53dd97[_0x357e('0x57')]+path[_0x357e('0x58')](_0x12d321),function(){if(_0x13f3b4){fs[_0x357e('0x59')](_0x12d321);}});}else{return _0x348645['download'](_0x12d321,function(_0x21cf65){if(_0x13f3b4){fs[_0x357e('0x59')](_0x12d321);}});}}})[_0x357e('0x47')](function(_0x3df194){if(_0x3df194[_0x357e('0x5a')]==='VoiceRecording\x20not\x20found'){_0x348645[_0x357e('0x1a')](0x194)[_0x357e('0x26')](_0x357e('0x5b'));}else{return handleError(_0x348645,null);}});};exports[_0x357e('0x5c')]=function(_0x2d47c2,_0x5f2d31,_0x59d797){var _0x34fcdb=require(_0x357e('0x5d'));var _0x10c712=![];var _0x5ebb6d={'$and':[db['sequelize'][_0x357e('0x38')](db[_0x357e('0x5e')]['fn'](_0x357e('0x5f'),db[_0x357e('0x5e')]['col'](_0x357e('0x4f'))),_0x2d47c2['query'][_0x357e('0x60')])]};if(_0x2d47c2[_0x357e('0x31')][_0x357e('0x4e')]&&_0x2d47c2[_0x357e('0x31')][_0x357e('0x4e')]==='uniqueid'){_0x5ebb6d[_0x357e('0x61')][_0x357e('0x62')]({'uniqueid':_0x2d47c2[_0x357e('0x45')]['id']});}else{_0x5ebb6d[_0x357e('0x61')][_0x357e('0x62')]({'id':_0x2d47c2[_0x357e('0x45')]['id']});}return db[_0x357e('0x28')][_0x357e('0x4a')]({'where':_0x5ebb6d,'attributes':['id',_0x357e('0x50')],'raw':!![]})[_0x357e('0x22')](handleEntityNotFound(_0x5f2d31,null))[_0x357e('0x22')](function(_0x38b6ab){if(_0x38b6ab){var _0x408765=util[_0x357e('0x2a')](_0x357e('0x51'),_0x38b6ab['value']);if(fs[_0x357e('0x55')](_0x408765)){_0x10c712=!![];return _0x34fcdb['decryptFile'](_0x408765,_0x38b6ab[_0x357e('0x50')],config['secrets']['recording'])[_0x357e('0x22')](function(){return _0x38b6ab;});}return _0x38b6ab;}})['then'](function(_0x4063bc){if(_0x4063bc){if(!fs[_0x357e('0x55')](_0x4063bc[_0x357e('0x50')])){throw new db[(_0x357e('0x63'))][(_0x357e('0x64'))](_0x357e('0x56'));}if(_0x4063bc[_0x357e('0x57')]){return _0x5f2d31[_0x357e('0x4d')](_0x4063bc['value'],_0x4063bc[_0x357e('0x57')]+path['extname'](_0x4063bc[_0x357e('0x50')]),function(){if(_0x10c712){fs[_0x357e('0x59')](_0x4063bc[_0x357e('0x50')]);}});}else{return _0x5f2d31[_0x357e('0x4d')](_0x4063bc[_0x357e('0x50')],function(_0x202f61){if(_0x10c712){fs[_0x357e('0x59')](_0x4063bc[_0x357e('0x50')]);}});}}})['catch'](handleError(_0x5f2d31,null));};
\ No newline at end of file
index 8f95a53..1eccac8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbc2d=['api','bluebird','path','rimraf','./voiceRecording.attributes','define','lodash','util','../../config/logger'];(function(_0x20a353,_0x6e01c0){var _0x39b1c2=function(_0x9e2801){while(--_0x9e2801){_0x20a353['push'](_0x20a353['shift']());}};_0x39b1c2(++_0x6e01c0);}(_0xbc2d,0x102));var _0xdbc2=function(_0x47a80b,_0x17c5d3){_0x47a80b=_0x47a80b-0x0;var _0x49056c=_0xbc2d[_0x47a80b];return _0x49056c;};'use strict';var _=require(_0xdbc2('0x0'));var util=require(_0xdbc2('0x1'));var logger=require(_0xdbc2('0x2'))(_0xdbc2('0x3'));var moment=require('moment');var BPromise=require(_0xdbc2('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xdbc2('0x5'));var rimraf=require(_0xdbc2('0x6'));var config=require('../../config/environment');var attributes=require(_0xdbc2('0x7'));module['exports']=function(_0x2e02b9,_0x325f8e){return _0x2e02b9[_0xdbc2('0x8')]('VoiceRecording',attributes,{'tableName':'voice_recordings','paranoid':![],'indexes':[{'name':'uniqueid','fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x5d52=['moment','bluebird','request-promise','path','rimraf','../../config/environment','./voiceRecording.attributes','define','VoiceRecording','uniqueid','api'];(function(_0x36884e,_0x48008f){var _0x1cc367=function(_0x388a78){while(--_0x388a78){_0x36884e['push'](_0x36884e['shift']());}};_0x1cc367(++_0x48008f);}(_0x5d52,0x1cd));var _0x25d5=function(_0x4f9e31,_0x19881c){_0x4f9e31=_0x4f9e31-0x0;var _0x2f9fc7=_0x5d52[_0x4f9e31];return _0x2f9fc7;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')(_0x25d5('0x0'));var moment=require(_0x25d5('0x1'));var BPromise=require(_0x25d5('0x2'));var rp=require(_0x25d5('0x3'));var fs=require('fs');var path=require(_0x25d5('0x4'));var rimraf=require(_0x25d5('0x5'));var config=require(_0x25d5('0x6'));var attributes=require(_0x25d5('0x7'));module['exports']=function(_0x5481dc,_0x413b2e){return _0x5481dc[_0x25d5('0x8')](_0x25d5('0x9'),attributes,{'tableName':'voice_recordings','paranoid':![],'indexes':[{'name':_0x25d5('0xa'),'fields':[_0x25d5('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
index c8650d6..b188434 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x736c=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','VoiceRecording,\x20%s,\x20%s','debug','VoiceRecording,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','VoiceRecording','body','options','where','attributes','limit','UpdateVoiceRecording','CreateVoiceRecording','../../components/encryptor','Setting','create','callRecordingEncryption','existsSync','value','format','%s.cypher','secrets','recording','unlink','info','CreateVoiceRecording\x20file\x20encrypted','lodash','util','randomstring','ioredis'];(function(_0x263b35,_0x421508){var _0x48168e=function(_0x3bb3a6){while(--_0x3bb3a6){_0x263b35['push'](_0x263b35['shift']());}};_0x48168e(++_0x421508);}(_0x736c,0xf2));var _0xc736=function(_0x4ec612,_0x57dfd6){_0x4ec612=_0x4ec612-0x0;var _0x52a015=_0x736c[_0x4ec612];return _0x52a015;};'use strict';var _=require(_0xc736('0x0'));var util=require(_0xc736('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xc736('0x2'));var fs=require('fs');var Redis=require(_0xc736('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xc736('0x4'));var logger=require(_0xc736('0x5'))(_0xc736('0x6'));var config=require(_0xc736('0x7'));var jayson=require(_0xc736('0x8'));var client=jayson[_0xc736('0x9')][_0xc736('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x20145a,_0x38cf4c,_0x270978){return new BPromise(function(_0x3cb3f1,_0x21e719){return client['request'](_0x20145a,_0x270978)[_0xc736('0xb')](function(_0xb3a63b){logger['info'](_0xc736('0xc'),_0x38cf4c,'request\x20sent');logger[_0xc736('0xd')](_0xc736('0xe'),_0x38cf4c,'request\x20sent',JSON[_0xc736('0xf')](_0xb3a63b));if(_0xb3a63b[_0xc736('0x10')]){if(_0xb3a63b['error']['code']===0x1f4){logger[_0xc736('0x10')]('VoiceRecording,\x20%s,\x20%s',_0x38cf4c,_0xb3a63b[_0xc736('0x10')][_0xc736('0x11')]);return _0x21e719(_0xb3a63b[_0xc736('0x10')]['message']);}logger[_0xc736('0x10')](_0xc736('0xc'),_0x38cf4c,_0xb3a63b[_0xc736('0x10')][_0xc736('0x11')]);return _0x3cb3f1(_0xb3a63b[_0xc736('0x10')][_0xc736('0x11')]);}else{logger['info'](_0xc736('0xc'),_0x38cf4c,'request\x20sent');_0x3cb3f1(_0xb3a63b[_0xc736('0x12')][_0xc736('0x11')]);}})[_0xc736('0x13')](function(_0x548e7a){logger['error'](_0xc736('0xc'),_0x38cf4c,_0x548e7a);_0x21e719(_0x548e7a);});});}exports['UpdateVoiceRecording']=function(_0x289362){var _0x5d3a41=this;return new Promise(function(_0x2fa211,_0x2b3b21){return db[_0xc736('0x14')]['update'](_0x289362[_0xc736('0x15')],{'raw':_0x289362[_0xc736('0x16')]?_0x289362[_0xc736('0x16')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x289362[_0xc736('0x16')]?_0x289362[_0xc736('0x16')][_0xc736('0x17')]||null:null,'attributes':_0x289362[_0xc736('0x16')]?_0x289362['options'][_0xc736('0x18')]||null:null,'limit':_0x289362['options']?_0x289362['options'][_0xc736('0x19')]||null:null})['then'](function(_0xd94d){logger['info']('UpdateVoiceRecording',_0x289362);logger['debug'](_0xc736('0x1a'),_0x289362,JSON[_0xc736('0xf')](_0xd94d));_0x2fa211(_0xd94d);})[_0xc736('0x13')](function(_0x4f0c67){logger['error'](_0xc736('0x1a'),_0x4f0c67[_0xc736('0x11')],_0x289362);_0x2b3b21(_0x5d3a41[_0xc736('0x10')](0x1f4,_0x4f0c67[_0xc736('0x11')]));});});};exports[_0xc736('0x1b')]=function(_0x595131){var _0x47702c=this;return new Promise(function(_0x34b655,_0x247c5d){var _0x5788d7=require(_0xc736('0x1c'));var _0x18bf37;return db[_0xc736('0x1d')]['findOne']({'attributes':['id','callRecordingEncryption'],'where':{'id':0x1},'raw':!![]})[_0xc736('0xb')](function(_0x3b4f35){_0x18bf37=_0x3b4f35;return db[_0xc736('0x14')][_0xc736('0x1e')](_0x595131['body']);})[_0xc736('0xb')](function(_0x1e2eef){if(_0x18bf37[_0xc736('0x1f')]&&fs[_0xc736('0x20')](_0x1e2eef[_0xc736('0x21')])){var _0x5787c1=util[_0xc736('0x22')](_0xc736('0x23'),_0x1e2eef[_0xc736('0x21')]);return _0x5788d7['encryptFile'](_0x1e2eef['value'],_0x5787c1,config[_0xc736('0x24')][_0xc736('0x25')])[_0xc736('0xb')](function(){fs[_0xc736('0x26')](_0x1e2eef[_0xc736('0x21')]);logger[_0xc736('0x27')](_0xc736('0x28'));return _0x1e2eef;});}return _0x1e2eef;})[_0xc736('0xb')](function(_0x1ffb1e){logger[_0xc736('0x27')]('CreateVoiceRecording',_0x595131);logger[_0xc736('0xd')]('CreateVoiceRecording',_0x595131,JSON[_0xc736('0xf')](_0x1ffb1e));_0x34b655(_0x1ffb1e);})[_0xc736('0x13')](function(_0x129e4a){logger[_0xc736('0x10')](_0xc736('0x1b'),_0x129e4a[_0xc736('0x11')],_0x595131);_0x247c5d(_0x47702c[_0xc736('0x10')](0x1f4,_0x129e4a['message']));});});};
\ No newline at end of file
+var _0xcdb9=['existsSync','value','format','%s.cypher','encryptFile','recording','unlink','CreateVoiceRecording\x20file\x20encrypted','lodash','util','moment','bluebird','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','VoiceRecording,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','info','result','catch','UpdateVoiceRecording','VoiceRecording','update','body','options','raw','where','limit','CreateVoiceRecording','../../components/encryptor','create','callRecordingEncryption'];(function(_0x2de385,_0x234cb7){var _0x4406e6=function(_0x48bdfc){while(--_0x48bdfc){_0x2de385['push'](_0x2de385['shift']());}};_0x4406e6(++_0x234cb7);}(_0xcdb9,0x104));var _0x9cdb=function(_0x3162b4,_0x22c4a8){_0x3162b4=_0x3162b4-0x0;var _0x3c0bd8=_0xcdb9[_0x3162b4];return _0x3c0bd8;};'use strict';var _=require(_0x9cdb('0x0'));var util=require(_0x9cdb('0x1'));var moment=require(_0x9cdb('0x2'));var BPromise=require(_0x9cdb('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x9cdb('0x4'));var logger=require(_0x9cdb('0x5'))(_0x9cdb('0x6'));var config=require(_0x9cdb('0x7'));var jayson=require(_0x9cdb('0x8'));var client=jayson['client'][_0x9cdb('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x569635,_0x2279af,_0x1f0ffa){return new BPromise(function(_0x144ecd,_0x2bf8ba){return client[_0x9cdb('0xa')](_0x569635,_0x1f0ffa)[_0x9cdb('0xb')](function(_0x3b91ec){logger['info'](_0x9cdb('0xc'),_0x2279af,'request\x20sent');logger[_0x9cdb('0xd')]('VoiceRecording,\x20%s,\x20%s,\x20%s',_0x2279af,_0x9cdb('0xe'),JSON[_0x9cdb('0xf')](_0x3b91ec));if(_0x3b91ec[_0x9cdb('0x10')]){if(_0x3b91ec['error'][_0x9cdb('0x11')]===0x1f4){logger['error'](_0x9cdb('0xc'),_0x2279af,_0x3b91ec[_0x9cdb('0x10')][_0x9cdb('0x12')]);return _0x2bf8ba(_0x3b91ec['error'][_0x9cdb('0x12')]);}logger[_0x9cdb('0x10')](_0x9cdb('0xc'),_0x2279af,_0x3b91ec[_0x9cdb('0x10')][_0x9cdb('0x12')]);return _0x144ecd(_0x3b91ec[_0x9cdb('0x10')]['message']);}else{logger[_0x9cdb('0x13')](_0x9cdb('0xc'),_0x2279af,_0x9cdb('0xe'));_0x144ecd(_0x3b91ec[_0x9cdb('0x14')][_0x9cdb('0x12')]);}})[_0x9cdb('0x15')](function(_0x4f42dc){logger['error'](_0x9cdb('0xc'),_0x2279af,_0x4f42dc);_0x2bf8ba(_0x4f42dc);});});}exports[_0x9cdb('0x16')]=function(_0x36d56f){var _0x3e56c4=this;return new Promise(function(_0x349dba,_0x51485b){return db[_0x9cdb('0x17')][_0x9cdb('0x18')](_0x36d56f[_0x9cdb('0x19')],{'raw':_0x36d56f['options']?_0x36d56f[_0x9cdb('0x1a')][_0x9cdb('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x36d56f['options']?_0x36d56f['options'][_0x9cdb('0x1c')]||null:null,'attributes':_0x36d56f[_0x9cdb('0x1a')]?_0x36d56f['options']['attributes']||null:null,'limit':_0x36d56f[_0x9cdb('0x1a')]?_0x36d56f[_0x9cdb('0x1a')][_0x9cdb('0x1d')]||null:null})['then'](function(_0x2ff1a0){logger[_0x9cdb('0x13')]('UpdateVoiceRecording',_0x36d56f);logger[_0x9cdb('0xd')](_0x9cdb('0x16'),_0x36d56f,JSON[_0x9cdb('0xf')](_0x2ff1a0));_0x349dba(_0x2ff1a0);})['catch'](function(_0x1ddbd7){logger[_0x9cdb('0x10')]('UpdateVoiceRecording',_0x1ddbd7[_0x9cdb('0x12')],_0x36d56f);_0x51485b(_0x3e56c4[_0x9cdb('0x10')](0x1f4,_0x1ddbd7[_0x9cdb('0x12')]));});});};exports[_0x9cdb('0x1e')]=function(_0x3e8469){var _0x504763=this;return new Promise(function(_0x57df0a,_0x55b65f){var _0x2a4f3e=require(_0x9cdb('0x1f'));var _0x43a961;return db['Setting']['findOne']({'attributes':['id','callRecordingEncryption'],'where':{'id':0x1},'raw':!![]})[_0x9cdb('0xb')](function(_0x33a394){_0x43a961=_0x33a394;return db[_0x9cdb('0x17')][_0x9cdb('0x20')](_0x3e8469['body']);})[_0x9cdb('0xb')](function(_0x5972a6){if(_0x43a961[_0x9cdb('0x21')]&&fs[_0x9cdb('0x22')](_0x5972a6[_0x9cdb('0x23')])){var _0xa779fa=util[_0x9cdb('0x24')](_0x9cdb('0x25'),_0x5972a6[_0x9cdb('0x23')]);return _0x2a4f3e[_0x9cdb('0x26')](_0x5972a6[_0x9cdb('0x23')],_0xa779fa,config['secrets'][_0x9cdb('0x27')])[_0x9cdb('0xb')](function(){fs[_0x9cdb('0x28')](_0x5972a6['value']);logger['info'](_0x9cdb('0x29'));return _0x5972a6;});}return _0x5972a6;})[_0x9cdb('0xb')](function(_0x5ad75e){logger['info'](_0x9cdb('0x1e'),_0x3e8469);logger[_0x9cdb('0xd')](_0x9cdb('0x1e'),_0x3e8469,JSON[_0x9cdb('0xf')](_0x5ad75e));_0x57df0a(_0x5ad75e);})[_0x9cdb('0x15')](function(_0xdea74e){logger[_0x9cdb('0x10')](_0x9cdb('0x1e'),_0xdea74e[_0x9cdb('0x12')],_0x3e8469);_0x55b65f(_0x504763[_0x9cdb('0x10')](0x1f4,_0xdea74e[_0x9cdb('0x12')]));});});};
\ No newline at end of file
index dfd0674..0181010 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdbb1=['create','put','update','delete','destroy','exports','connect-timeout','express','../../components/auth/service','../../config/environment','./voiceTransferReport.controller','get','/:id','show','post','isAuthenticated'];(function(_0x4a9771,_0x52429b){var _0x52e0ed=function(_0x5485c0){while(--_0x5485c0){_0x4a9771['push'](_0x4a9771['shift']());}};_0x52e0ed(++_0x52429b);}(_0xdbb1,0xa6));var _0x1dbb=function(_0x3ff085,_0x27c92e){_0x3ff085=_0x3ff085-0x0;var _0x2b68c3=_0xdbb1[_0x3ff085];return _0x2b68c3;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var timeout=require(_0x1dbb('0x0'));var express=require(_0x1dbb('0x1'));var router=express['Router']();var auth=require(_0x1dbb('0x2'));var interaction=require('../../components/interaction/service');var config=require(_0x1dbb('0x3'));var controller=require(_0x1dbb('0x4'));router[_0x1dbb('0x5')]('/',auth['isAuthenticated'](),controller['index']);router[_0x1dbb('0x5')](_0x1dbb('0x6'),auth['isAuthenticated'](),controller[_0x1dbb('0x7')]);router[_0x1dbb('0x8')]('/',auth[_0x1dbb('0x9')](),controller[_0x1dbb('0xa')]);router[_0x1dbb('0xb')](_0x1dbb('0x6'),auth[_0x1dbb('0x9')](),controller[_0x1dbb('0xc')]);router[_0x1dbb('0xd')](_0x1dbb('0x6'),auth[_0x1dbb('0x9')](),controller[_0x1dbb('0xe')]);module[_0x1dbb('0xf')]=router;
\ No newline at end of file
+var _0xf4ac=['util','connect-timeout','../../components/auth/service','../../components/interaction/service','../../config/environment','isAuthenticated','index','/:id','show','put','update','delete','destroy','exports','multer'];(function(_0x3c4958,_0x450ef9){var _0x46bd11=function(_0x232e5b){while(--_0x232e5b){_0x3c4958['push'](_0x3c4958['shift']());}};_0x46bd11(++_0x450ef9);}(_0xf4ac,0x149));var _0xcf4a=function(_0xb1392f,_0x322a12){_0xb1392f=_0xb1392f-0x0;var _0x52fc1c=_0xf4ac[_0xb1392f];return _0x52fc1c;};'use strict';var multer=require(_0xcf4a('0x0'));var util=require(_0xcf4a('0x1'));var path=require('path');var timeout=require(_0xcf4a('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0xcf4a('0x3'));var interaction=require(_0xcf4a('0x4'));var config=require(_0xcf4a('0x5'));var controller=require('./voiceTransferReport.controller');router['get']('/',auth[_0xcf4a('0x6')](),controller[_0xcf4a('0x7')]);router['get'](_0xcf4a('0x8'),auth[_0xcf4a('0x6')](),controller[_0xcf4a('0x9')]);router['post']('/',auth['isAuthenticated'](),controller['create']);router[_0xcf4a('0xa')]('/:id',auth[_0xcf4a('0x6')](),controller[_0xcf4a('0xb')]);router[_0xcf4a('0xc')](_0xcf4a('0x8'),auth[_0xcf4a('0x6')](),controller[_0xcf4a('0xd')]);module[_0xcf4a('0xe')]=router;
\ No newline at end of file
index ae01fd7..f715c04 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf6cb=['STRING','sequelize','moment','exports','ENUM','blind'];(function(_0x3f0f1c,_0x5ae9a8){var _0x32f582=function(_0x54b8bc){while(--_0x54b8bc){_0x3f0f1c['push'](_0x3f0f1c['shift']());}};_0x32f582(++_0x5ae9a8);}(_0xf6cb,0x91));var _0xbf6c=function(_0x35518c,_0x1d4aab){_0x35518c=_0x35518c-0x0;var _0x3ed7e1=_0xf6cb[_0x35518c];return _0x3ed7e1;};'use strict';var Sequelize=require(_0xbf6c('0x0'));var moment=require(_0xbf6c('0x1'));module[_0xbf6c('0x2')]={'type':{'type':Sequelize[_0xbf6c('0x3')](_0xbf6c('0x4'),'attended')},'result':{'type':Sequelize[_0xbf6c('0x5')]},'transfererchannel':{'type':Sequelize[_0xbf6c('0x5')]},'transferercalleridnum':{'type':Sequelize['STRING']},'transferercalleridname':{'type':Sequelize[_0xbf6c('0x5')]},'transfererconnectedlinenum':{'type':Sequelize[_0xbf6c('0x5')]},'transfererconnectedlinename':{'type':Sequelize[_0xbf6c('0x5')]},'transfereraccountcode':{'type':Sequelize[_0xbf6c('0x5')]},'transferercontext':{'type':Sequelize[_0xbf6c('0x5')]},'transfererexten':{'type':Sequelize['STRING']},'transfererlinkedid':{'type':Sequelize[_0xbf6c('0x5')]},'transfereechannel':{'type':Sequelize[_0xbf6c('0x5')]},'transfereecalleridnum':{'type':Sequelize['STRING']},'transfereecalleridname':{'type':Sequelize[_0xbf6c('0x5')]},'transfereeconnectedlinenum':{'type':Sequelize['STRING']},'transfereeconnectedlinename':{'type':Sequelize[_0xbf6c('0x5')]},'transfereeaccountcode':{'type':Sequelize[_0xbf6c('0x5')]},'transfereecontext':{'type':Sequelize['STRING']},'transfereeexten':{'type':Sequelize['STRING']},'transfereelinkedid':{'type':Sequelize['STRING']},'isexternal':{'type':Sequelize['ENUM']('Yes','No')},'context':{'type':Sequelize[_0xbf6c('0x5')]},'extension':{'type':Sequelize[_0xbf6c('0x5')]}};
\ No newline at end of file
+var _0xd35f=['blind','attended','STRING','Yes','sequelize','moment','ENUM'];(function(_0x50cfc3,_0x526cc6){var _0x5c11ef=function(_0xeaf96a){while(--_0xeaf96a){_0x50cfc3['push'](_0x50cfc3['shift']());}};_0x5c11ef(++_0x526cc6);}(_0xd35f,0x131));var _0xfd35=function(_0x2db667,_0x193cf5){_0x2db667=_0x2db667-0x0;var _0x83ff9=_0xd35f[_0x2db667];return _0x83ff9;};'use strict';var Sequelize=require(_0xfd35('0x0'));var moment=require(_0xfd35('0x1'));module['exports']={'type':{'type':Sequelize[_0xfd35('0x2')](_0xfd35('0x3'),_0xfd35('0x4'))},'result':{'type':Sequelize[_0xfd35('0x5')]},'transfererchannel':{'type':Sequelize[_0xfd35('0x5')]},'transferercalleridnum':{'type':Sequelize[_0xfd35('0x5')]},'transferercalleridname':{'type':Sequelize[_0xfd35('0x5')]},'transfererconnectedlinenum':{'type':Sequelize[_0xfd35('0x5')]},'transfererconnectedlinename':{'type':Sequelize['STRING']},'transfereraccountcode':{'type':Sequelize[_0xfd35('0x5')]},'transferercontext':{'type':Sequelize[_0xfd35('0x5')]},'transfererexten':{'type':Sequelize[_0xfd35('0x5')]},'transfererlinkedid':{'type':Sequelize[_0xfd35('0x5')]},'transfereechannel':{'type':Sequelize[_0xfd35('0x5')]},'transfereecalleridnum':{'type':Sequelize['STRING']},'transfereecalleridname':{'type':Sequelize[_0xfd35('0x5')]},'transfereeconnectedlinenum':{'type':Sequelize[_0xfd35('0x5')]},'transfereeconnectedlinename':{'type':Sequelize[_0xfd35('0x5')]},'transfereeaccountcode':{'type':Sequelize[_0xfd35('0x5')]},'transfereecontext':{'type':Sequelize[_0xfd35('0x5')]},'transfereeexten':{'type':Sequelize[_0xfd35('0x5')]},'transfereelinkedid':{'type':Sequelize['STRING']},'isexternal':{'type':Sequelize[_0xfd35('0x2')](_0xfd35('0x6'),'No')},'context':{'type':Sequelize[_0xfd35('0x5')]},'extension':{'type':Sequelize[_0xfd35('0x5')]}};
\ No newline at end of file
index a962d6a..67a7944 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4975=['jsforce','to-csv','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','then','destroy','error','name','send','index','model','keys','query','filters','attributes','intersection','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','type','key','field','merge','options','VoiceTransferReport','includeAll','include','rows','catch','show','params','rawAttributes','fields','create','body','find','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','squel','crypto'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x4975,0x86));var _0x5497=function(_0x2cd064,_0x2bb4af){_0x2cd064=_0x2cd064-0x0;var _0xf7a850=_0x4975[_0x2cd064];return _0xf7a850;};'use strict';var pdf=require(_0x5497('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x5497('0x1'));var zipdir=require(_0x5497('0x2'));var jsonpatch=require(_0x5497('0x3'));var rp=require(_0x5497('0x4'));var moment=require(_0x5497('0x5'));var BPromise=require(_0x5497('0x6'));var Mustache=require(_0x5497('0x7'));var util=require(_0x5497('0x8'));var path=require(_0x5497('0x9'));var sox=require(_0x5497('0xa'));var csv=require('to-csv');var ejs=require(_0x5497('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x5497('0xc'));var crypto=require(_0x5497('0xd'));var jsforce=require(_0x5497('0xe'));var deskjs=require('desk.js');var toCsv=require(_0x5497('0xf'));var querystring=require('querystring');var Papa=require(_0x5497('0x10'));var Redis=require(_0x5497('0x11'));var authService=require(_0x5497('0x12'));var qs=require(_0x5497('0x13'));var hardwareService=require(_0x5497('0x14'));var logger=require(_0x5497('0x15'))(_0x5497('0x16'));var utils=require(_0x5497('0x17'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5b1162,_0xc250bb){_0xc250bb=_0xc250bb||0xcc;return function(_0x1b23df){if(_0x1b23df){return _0x5b1162[_0x5497('0x18')](_0xc250bb);}return _0x5b1162[_0x5497('0x19')](_0xc250bb)[_0x5497('0x1a')]();};}function respondWithResult(_0x365144,_0x1f7169){_0x1f7169=_0x1f7169||0xc8;return function(_0xaca97d){if(_0xaca97d){return _0x365144[_0x5497('0x19')](_0x1f7169)[_0x5497('0x1b')](_0xaca97d);}};}function respondWithFilteredResult(_0x55f590,_0x11b0a9){return function(_0x4fb8e9){if(_0x4fb8e9){var _0x4237a9=_0x4fb8e9[_0x5497('0x1c')],_0x2bfd8a=_0x11b0a9[_0x5497('0x1d')],_0x19e5f3=_0x11b0a9[_0x5497('0x1d')]+_0x11b0a9['limit'],_0x3ce50b;if(_0x19e5f3>=_0x4237a9){_0x19e5f3=_0x4237a9;_0x3ce50b=0xc8;}else{_0x3ce50b=0xce;}_0x55f590['status'](_0x3ce50b);return _0x55f590[_0x5497('0x1e')](_0x5497('0x1f'),_0x2bfd8a+'-'+_0x19e5f3+'/'+_0x4237a9)[_0x5497('0x1b')](_0x4fb8e9);}return null;};}function patchUpdates(_0x5d9e24){return function(_0xbf1ba7){try{jsonpatch[_0x5497('0x20')](_0xbf1ba7,_0x5d9e24,!![]);}catch(_0x18e8a8){return BPromise[_0x5497('0x21')](_0x18e8a8);}return _0xbf1ba7[_0x5497('0x22')]();};}function saveUpdates(_0x1f6f18,_0x16d378){return function(_0x10226f){if(_0x10226f){return _0x10226f[_0x5497('0x23')](_0x1f6f18)[_0x5497('0x24')](function(_0x186065){return _0x186065;});}return null;};}function removeEntity(_0x52c049,_0x720767){return function(_0x4d1b27){if(_0x4d1b27){return _0x4d1b27[_0x5497('0x25')]()[_0x5497('0x24')](function(){_0x52c049[_0x5497('0x19')](0xcc)[_0x5497('0x1a')]();});}};}function handleEntityNotFound(_0x35ecd9,_0x3b2fbc){return function(_0x5018fa){if(!_0x5018fa){_0x35ecd9['sendStatus'](0x194);}return _0x5018fa;};}function handleError(_0x1eefce,_0x34b97f){_0x34b97f=_0x34b97f||0x1f4;return function(_0x24482a){logger[_0x5497('0x26')](_0x24482a['stack']);if(_0x24482a[_0x5497('0x27')]){delete _0x24482a['name'];}_0x1eefce[_0x5497('0x19')](_0x34b97f)[_0x5497('0x28')](_0x24482a);};}exports[_0x5497('0x29')]=function(_0x34a1a5,_0x163a30){var _0x31cd01={},_0x48b835={},_0x4af5f4={'count':0x0,'rows':[]};var _0x5406e2=db['VoiceTransferReport']['rawAttributes'];_0x48b835[_0x5497('0x2a')]=_['keys'](_0x5406e2);_0x48b835['query']=_[_0x5497('0x2b')](_0x34a1a5[_0x5497('0x2c')]);_0x48b835[_0x5497('0x2d')]=_['intersection'](_0x48b835['model'],_0x48b835['query']);_0x31cd01[_0x5497('0x2e')]=_[_0x5497('0x2f')](_0x48b835[_0x5497('0x2a')],qs['fields'](_0x34a1a5['query']['fields']));_0x31cd01[_0x5497('0x2e')]=_0x31cd01['attributes'][_0x5497('0x30')]?_0x31cd01[_0x5497('0x2e')]:_0x48b835[_0x5497('0x2a')];if(!_0x34a1a5['query'][_0x5497('0x31')](_0x5497('0x32'))){_0x31cd01['limit']=qs[_0x5497('0x33')](_0x34a1a5[_0x5497('0x2c')][_0x5497('0x33')]);_0x31cd01['offset']=qs[_0x5497('0x1d')](_0x34a1a5[_0x5497('0x2c')][_0x5497('0x1d')]);}_0x31cd01[_0x5497('0x34')]=qs[_0x5497('0x35')](_0x34a1a5['query'][_0x5497('0x35')]);_0x31cd01[_0x5497('0x36')]=qs['filters'](_[_0x5497('0x37')](_0x34a1a5[_0x5497('0x2c')],_0x48b835[_0x5497('0x2d')]));if(_0x34a1a5[_0x5497('0x2c')][_0x5497('0x38')]){_0x31cd01[_0x5497('0x36')]=_['merge'](_0x31cd01[_0x5497('0x36')],{'$or':_['map'](_0x5406e2,function(_0x7880e4){if(_0x7880e4[_0x5497('0x39')][_0x5497('0x3a')]!=='VIRTUAL'){var _0x4ec5f7={};_0x4ec5f7[_0x7880e4[_0x5497('0x3b')]]={'$like':'%'+_0x34a1a5[_0x5497('0x2c')][_0x5497('0x38')]+'%'};return _0x4ec5f7;}})});}_0x31cd01=_[_0x5497('0x3c')]({},_0x31cd01,_0x34a1a5[_0x5497('0x3d')]);var _0xc8a689={'where':_0x31cd01['where']};return db[_0x5497('0x3e')][_0x5497('0x1c')](_0xc8a689)[_0x5497('0x24')](function(_0x2bd07a){_0x4af5f4[_0x5497('0x1c')]=_0x2bd07a;if(_0x34a1a5[_0x5497('0x2c')][_0x5497('0x3f')]){_0x31cd01[_0x5497('0x40')]=[{'all':!![]}];}return db[_0x5497('0x3e')]['findAll'](_0x31cd01);})[_0x5497('0x24')](function(_0x32fa2b){_0x4af5f4[_0x5497('0x41')]=_0x32fa2b;return _0x4af5f4;})[_0x5497('0x24')](respondWithFilteredResult(_0x163a30,_0x31cd01))[_0x5497('0x42')](handleError(_0x163a30,null));};exports[_0x5497('0x43')]=function(_0x4299be,_0x59ed13){var _0x3e5f7d={'raw':!![],'where':{'id':_0x4299be[_0x5497('0x44')]['id']}},_0x95d7d6={};_0x95d7d6[_0x5497('0x2a')]=_[_0x5497('0x2b')](db[_0x5497('0x3e')][_0x5497('0x45')]);_0x95d7d6['query']=_[_0x5497('0x2b')](_0x4299be[_0x5497('0x2c')]);_0x95d7d6[_0x5497('0x2d')]=_[_0x5497('0x2f')](_0x95d7d6[_0x5497('0x2a')],_0x95d7d6[_0x5497('0x2c')]);_0x3e5f7d[_0x5497('0x2e')]=_[_0x5497('0x2f')](_0x95d7d6[_0x5497('0x2a')],qs[_0x5497('0x46')](_0x4299be['query'][_0x5497('0x46')]));_0x3e5f7d['attributes']=_0x3e5f7d[_0x5497('0x2e')][_0x5497('0x30')]?_0x3e5f7d[_0x5497('0x2e')]:_0x95d7d6[_0x5497('0x2a')];if(_0x4299be[_0x5497('0x2c')]['includeAll']){_0x3e5f7d[_0x5497('0x40')]=[{'all':!![]}];}_0x3e5f7d=_[_0x5497('0x3c')]({},_0x3e5f7d,_0x4299be['options']);return db[_0x5497('0x3e')]['find'](_0x3e5f7d)[_0x5497('0x24')](handleEntityNotFound(_0x59ed13,null))['then'](respondWithResult(_0x59ed13,null))[_0x5497('0x42')](handleError(_0x59ed13,null));};exports[_0x5497('0x47')]=function(_0x2e8c6a,_0x3a852a){return db[_0x5497('0x3e')]['create'](_0x2e8c6a['body'],{})['then'](respondWithResult(_0x3a852a,0xc9))['catch'](handleError(_0x3a852a,null));};exports[_0x5497('0x23')]=function(_0x43c430,_0x417f31){if(_0x43c430[_0x5497('0x48')]['id']){delete _0x43c430[_0x5497('0x48')]['id'];}return db[_0x5497('0x3e')][_0x5497('0x49')]({'where':{'id':_0x43c430[_0x5497('0x44')]['id']}})[_0x5497('0x24')](handleEntityNotFound(_0x417f31,null))['then'](saveUpdates(_0x43c430[_0x5497('0x48')],null))[_0x5497('0x24')](respondWithResult(_0x417f31,null))[_0x5497('0x42')](handleError(_0x417f31,null));};exports['destroy']=function(_0x3e4da2,_0x530475){return db[_0x5497('0x3e')][_0x5497('0x49')]({'where':{'id':_0x3e4da2[_0x5497('0x44')]['id']}})['then'](handleEntityNotFound(_0x530475,null))[_0x5497('0x24')](removeEntity(_0x530475,null))[_0x5497('0x42')](handleError(_0x530475,null));};
\ No newline at end of file
+var _0x9d56=['crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','offset','limit','set','Content-Range','json','apply','reject','save','update','then','destroy','end','stack','index','model','keys','query','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','merge','map','type','VIRTUAL','field','options','count','includeAll','include','VoiceTransferReport','rows','catch','show','params','rawAttributes','length','find','create','body','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel'];(function(_0x2ce6d5,_0x333e0c){var _0x32d272=function(_0x399f0b){while(--_0x399f0b){_0x2ce6d5['push'](_0x2ce6d5['shift']());}};_0x32d272(++_0x333e0c);}(_0x9d56,0x122));var _0x69d5=function(_0x4c14eb,_0x4ce5ca){_0x4c14eb=_0x4c14eb-0x0;var _0x446ec9=_0x9d56[_0x4c14eb];return _0x446ec9;};'use strict';var pdf=require(_0x69d5('0x0'));var emlformat=require(_0x69d5('0x1'));var rimraf=require(_0x69d5('0x2'));var zipdir=require(_0x69d5('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x69d5('0x4'));var moment=require(_0x69d5('0x5'));var BPromise=require(_0x69d5('0x6'));var Mustache=require(_0x69d5('0x7'));var util=require(_0x69d5('0x8'));var path=require('path');var sox=require(_0x69d5('0x9'));var csv=require(_0x69d5('0xa'));var ejs=require(_0x69d5('0xb'));var fs=require('fs');var _=require(_0x69d5('0xc'));var squel=require(_0x69d5('0xd'));var crypto=require(_0x69d5('0xe'));var jsforce=require(_0x69d5('0xf'));var deskjs=require(_0x69d5('0x10'));var toCsv=require(_0x69d5('0xa'));var querystring=require(_0x69d5('0x11'));var Papa=require(_0x69d5('0x12'));var Redis=require(_0x69d5('0x13'));var authService=require(_0x69d5('0x14'));var qs=require(_0x69d5('0x15'));var hardwareService=require(_0x69d5('0x16'));var logger=require(_0x69d5('0x17'))(_0x69d5('0x18'));var utils=require(_0x69d5('0x19'));var config=require(_0x69d5('0x1a'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2c3579,_0x2a09c0){_0x2a09c0=_0x2a09c0||0xcc;return function(_0x2cc733){if(_0x2cc733){return _0x2c3579[_0x69d5('0x1b')](_0x2a09c0);}return _0x2c3579[_0x69d5('0x1c')](_0x2a09c0)['end']();};}function respondWithResult(_0x24966,_0x44320f){_0x44320f=_0x44320f||0xc8;return function(_0x263954){if(_0x263954){return _0x24966[_0x69d5('0x1c')](_0x44320f)['json'](_0x263954);}};}function respondWithFilteredResult(_0x5b192f,_0x502e05){return function(_0x279ce5){if(_0x279ce5){var _0x33cf2e=_0x279ce5['count'],_0x56bbbc=_0x502e05[_0x69d5('0x1d')],_0x28492b=_0x502e05[_0x69d5('0x1d')]+_0x502e05[_0x69d5('0x1e')],_0x24c682;if(_0x28492b>=_0x33cf2e){_0x28492b=_0x33cf2e;_0x24c682=0xc8;}else{_0x24c682=0xce;}_0x5b192f[_0x69d5('0x1c')](_0x24c682);return _0x5b192f[_0x69d5('0x1f')](_0x69d5('0x20'),_0x56bbbc+'-'+_0x28492b+'/'+_0x33cf2e)[_0x69d5('0x21')](_0x279ce5);}return null;};}function patchUpdates(_0x141cb7){return function(_0x54c2a3){try{jsonpatch[_0x69d5('0x22')](_0x54c2a3,_0x141cb7,!![]);}catch(_0x16c02c){return BPromise[_0x69d5('0x23')](_0x16c02c);}return _0x54c2a3[_0x69d5('0x24')]();};}function saveUpdates(_0x24f3f7,_0x3c8901){return function(_0x1f9ed7){if(_0x1f9ed7){return _0x1f9ed7[_0x69d5('0x25')](_0x24f3f7)[_0x69d5('0x26')](function(_0x497c1a){return _0x497c1a;});}return null;};}function removeEntity(_0x4c6c1c,_0x3ae722){return function(_0x3fc1a4){if(_0x3fc1a4){return _0x3fc1a4[_0x69d5('0x27')]()[_0x69d5('0x26')](function(){_0x4c6c1c[_0x69d5('0x1c')](0xcc)[_0x69d5('0x28')]();});}};}function handleEntityNotFound(_0x1ec0d3,_0x22e984){return function(_0x23ee57){if(!_0x23ee57){_0x1ec0d3['sendStatus'](0x194);}return _0x23ee57;};}function handleError(_0x1d27d3,_0x185519){_0x185519=_0x185519||0x1f4;return function(_0x37545d){logger['error'](_0x37545d[_0x69d5('0x29')]);if(_0x37545d['name']){delete _0x37545d['name'];}_0x1d27d3[_0x69d5('0x1c')](_0x185519)['send'](_0x37545d);};}exports[_0x69d5('0x2a')]=function(_0x7636f2,_0x2c3fe8){var _0x589cee={},_0x731b0b={},_0x3b3c1a={'count':0x0,'rows':[]};var _0x459674=db['VoiceTransferReport']['rawAttributes'];_0x731b0b[_0x69d5('0x2b')]=_[_0x69d5('0x2c')](_0x459674);_0x731b0b[_0x69d5('0x2d')]=_[_0x69d5('0x2c')](_0x7636f2[_0x69d5('0x2d')]);_0x731b0b['filters']=_[_0x69d5('0x2e')](_0x731b0b[_0x69d5('0x2b')],_0x731b0b[_0x69d5('0x2d')]);_0x589cee[_0x69d5('0x2f')]=_[_0x69d5('0x2e')](_0x731b0b[_0x69d5('0x2b')],qs[_0x69d5('0x30')](_0x7636f2[_0x69d5('0x2d')]['fields']));_0x589cee[_0x69d5('0x2f')]=_0x589cee[_0x69d5('0x2f')]['length']?_0x589cee[_0x69d5('0x2f')]:_0x731b0b['model'];if(!_0x7636f2[_0x69d5('0x2d')][_0x69d5('0x31')](_0x69d5('0x32'))){_0x589cee['limit']=qs[_0x69d5('0x1e')](_0x7636f2[_0x69d5('0x2d')]['limit']);_0x589cee[_0x69d5('0x1d')]=qs[_0x69d5('0x1d')](_0x7636f2[_0x69d5('0x2d')]['offset']);}_0x589cee[_0x69d5('0x33')]=qs[_0x69d5('0x34')](_0x7636f2[_0x69d5('0x2d')][_0x69d5('0x34')]);_0x589cee[_0x69d5('0x35')]=qs[_0x69d5('0x36')](_[_0x69d5('0x37')](_0x7636f2[_0x69d5('0x2d')],_0x731b0b[_0x69d5('0x36')]));if(_0x7636f2[_0x69d5('0x2d')][_0x69d5('0x38')]){_0x589cee[_0x69d5('0x35')]=_[_0x69d5('0x39')](_0x589cee[_0x69d5('0x35')],{'$or':_[_0x69d5('0x3a')](_0x459674,function(_0x30a43e){if(_0x30a43e[_0x69d5('0x3b')]['key']!==_0x69d5('0x3c')){var _0x2f0e23={};_0x2f0e23[_0x30a43e[_0x69d5('0x3d')]]={'$like':'%'+_0x7636f2['query'][_0x69d5('0x38')]+'%'};return _0x2f0e23;}})});}_0x589cee=_[_0x69d5('0x39')]({},_0x589cee,_0x7636f2[_0x69d5('0x3e')]);var _0x5898c6={'where':_0x589cee[_0x69d5('0x35')]};return db['VoiceTransferReport'][_0x69d5('0x3f')](_0x5898c6)[_0x69d5('0x26')](function(_0x23aaf4){_0x3b3c1a['count']=_0x23aaf4;if(_0x7636f2[_0x69d5('0x2d')][_0x69d5('0x40')]){_0x589cee[_0x69d5('0x41')]=[{'all':!![]}];}return db[_0x69d5('0x42')]['findAll'](_0x589cee);})[_0x69d5('0x26')](function(_0x661bca){_0x3b3c1a[_0x69d5('0x43')]=_0x661bca;return _0x3b3c1a;})[_0x69d5('0x26')](respondWithFilteredResult(_0x2c3fe8,_0x589cee))[_0x69d5('0x44')](handleError(_0x2c3fe8,null));};exports[_0x69d5('0x45')]=function(_0x51a8f1,_0x463d7f){var _0x58f7d5={'raw':!![],'where':{'id':_0x51a8f1[_0x69d5('0x46')]['id']}},_0x5a0b78={};_0x5a0b78[_0x69d5('0x2b')]=_[_0x69d5('0x2c')](db[_0x69d5('0x42')][_0x69d5('0x47')]);_0x5a0b78[_0x69d5('0x2d')]=_[_0x69d5('0x2c')](_0x51a8f1[_0x69d5('0x2d')]);_0x5a0b78[_0x69d5('0x36')]=_[_0x69d5('0x2e')](_0x5a0b78[_0x69d5('0x2b')],_0x5a0b78['query']);_0x58f7d5['attributes']=_['intersection'](_0x5a0b78['model'],qs[_0x69d5('0x30')](_0x51a8f1[_0x69d5('0x2d')][_0x69d5('0x30')]));_0x58f7d5[_0x69d5('0x2f')]=_0x58f7d5[_0x69d5('0x2f')][_0x69d5('0x48')]?_0x58f7d5['attributes']:_0x5a0b78['model'];if(_0x51a8f1[_0x69d5('0x2d')][_0x69d5('0x40')]){_0x58f7d5[_0x69d5('0x41')]=[{'all':!![]}];}_0x58f7d5=_[_0x69d5('0x39')]({},_0x58f7d5,_0x51a8f1[_0x69d5('0x3e')]);return db[_0x69d5('0x42')][_0x69d5('0x49')](_0x58f7d5)[_0x69d5('0x26')](handleEntityNotFound(_0x463d7f,null))['then'](respondWithResult(_0x463d7f,null))['catch'](handleError(_0x463d7f,null));};exports[_0x69d5('0x4a')]=function(_0x2bbf0f,_0x28b301){return db[_0x69d5('0x42')][_0x69d5('0x4a')](_0x2bbf0f[_0x69d5('0x4b')],{})['then'](respondWithResult(_0x28b301,0xc9))['catch'](handleError(_0x28b301,null));};exports[_0x69d5('0x25')]=function(_0x29f40,_0x402f7f){if(_0x29f40[_0x69d5('0x4b')]['id']){delete _0x29f40[_0x69d5('0x4b')]['id'];}return db[_0x69d5('0x42')][_0x69d5('0x49')]({'where':{'id':_0x29f40[_0x69d5('0x46')]['id']}})[_0x69d5('0x26')](handleEntityNotFound(_0x402f7f,null))[_0x69d5('0x26')](saveUpdates(_0x29f40['body'],null))[_0x69d5('0x26')](respondWithResult(_0x402f7f,null))[_0x69d5('0x44')](handleError(_0x402f7f,null));};exports[_0x69d5('0x27')]=function(_0x4497b4,_0x1a4ed4){return db['VoiceTransferReport'][_0x69d5('0x49')]({'where':{'id':_0x4497b4['params']['id']}})[_0x69d5('0x26')](handleEntityNotFound(_0x1a4ed4,null))[_0x69d5('0x26')](removeEntity(_0x1a4ed4,null))[_0x69d5('0x44')](handleError(_0x1a4ed4,null));};
\ No newline at end of file
index 53c706f..b8f03b8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7b2a=['report_call_transfer','lodash','util','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','./voiceTransferReport.attributes','exports','define'];(function(_0x16eb92,_0x4d9fc7){var _0x448689=function(_0x2038dd){while(--_0x2038dd){_0x16eb92['push'](_0x16eb92['shift']());}};_0x448689(++_0x4d9fc7);}(_0x7b2a,0x1c8));var _0xa7b2=function(_0x4aded0,_0x5bbb35){_0x4aded0=_0x4aded0-0x0;var _0x27538c=_0x7b2a[_0x4aded0];return _0x27538c;};'use strict';var _=require(_0xa7b2('0x0'));var util=require(_0xa7b2('0x1'));var logger=require(_0xa7b2('0x2'))(_0xa7b2('0x3'));var moment=require(_0xa7b2('0x4'));var BPromise=require(_0xa7b2('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xa7b2('0x6'));var rimraf=require(_0xa7b2('0x7'));var config=require(_0xa7b2('0x8'));var attributes=require(_0xa7b2('0x9'));module[_0xa7b2('0xa')]=function(_0x544249,_0x3916dd){return _0x544249[_0xa7b2('0xb')]('VoiceTransferReport',attributes,{'tableName':_0xa7b2('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x5b47=['report_call_transfer','util','moment','bluebird','request-promise','path','rimraf','../../config/environment','exports','define','VoiceTransferReport'];(function(_0x1035c1,_0x2d8583){var _0x308d67=function(_0x58ddb6){while(--_0x58ddb6){_0x1035c1['push'](_0x1035c1['shift']());}};_0x308d67(++_0x2d8583);}(_0x5b47,0xb1));var _0x75b4=function(_0x2fc2e8,_0xc8860e){_0x2fc2e8=_0x2fc2e8-0x0;var _0x434757=_0x5b47[_0x2fc2e8];return _0x434757;};'use strict';var _=require('lodash');var util=require(_0x75b4('0x0'));var logger=require('../../config/logger')('api');var moment=require(_0x75b4('0x1'));var BPromise=require(_0x75b4('0x2'));var rp=require(_0x75b4('0x3'));var fs=require('fs');var path=require(_0x75b4('0x4'));var rimraf=require(_0x75b4('0x5'));var config=require(_0x75b4('0x6'));var attributes=require('./voiceTransferReport.attributes');module[_0x75b4('0x7')]=function(_0x1d114c,_0x5f30d3){return _0x1d114c[_0x75b4('0x8')](_0x75b4('0x9'),attributes,{'tableName':_0x75b4('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 9dd0685..2fcf7a6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x28af=['http','request','then','VoiceTransferReport,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','info','result','catch','CreateVoiceTransferReport','VoiceTransferReport','body','options','raw','lodash','util','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','client'];(function(_0x54c191,_0x4a04ef){var _0x40ee4a=function(_0x200a79){while(--_0x200a79){_0x54c191['push'](_0x54c191['shift']());}};_0x40ee4a(++_0x4a04ef);}(_0x28af,0x7e));var _0xf28a=function(_0x999b85,_0x1edc2b){_0x999b85=_0x999b85-0x0;var _0x1d7124=_0x28af[_0x999b85];return _0x1d7124;};'use strict';var _=require(_0xf28a('0x0'));var util=require(_0xf28a('0x1'));var moment=require('moment');var BPromise=require(_0xf28a('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xf28a('0x3'));var db=require(_0xf28a('0x4'))['db'];var utils=require(_0xf28a('0x5'));var logger=require(_0xf28a('0x6'))(_0xf28a('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xf28a('0x8')][_0xf28a('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x23535c,_0x2166ed,_0x2d0423){return new BPromise(function(_0x444419,_0x343a38){return client[_0xf28a('0xa')](_0x23535c,_0x2d0423)[_0xf28a('0xb')](function(_0x2b7d8a){logger['info'](_0xf28a('0xc'),_0x2166ed,'request\x20sent');logger[_0xf28a('0xd')]('VoiceTransferReport,\x20%s,\x20%s,\x20%s',_0x2166ed,_0xf28a('0xe'),JSON[_0xf28a('0xf')](_0x2b7d8a));if(_0x2b7d8a[_0xf28a('0x10')]){if(_0x2b7d8a[_0xf28a('0x10')][_0xf28a('0x11')]===0x1f4){logger[_0xf28a('0x10')]('VoiceTransferReport,\x20%s,\x20%s',_0x2166ed,_0x2b7d8a['error']['message']);return _0x343a38(_0x2b7d8a[_0xf28a('0x10')][_0xf28a('0x12')]);}logger[_0xf28a('0x10')](_0xf28a('0xc'),_0x2166ed,_0x2b7d8a['error']['message']);return _0x444419(_0x2b7d8a['error'][_0xf28a('0x12')]);}else{logger[_0xf28a('0x13')](_0xf28a('0xc'),_0x2166ed,_0xf28a('0xe'));_0x444419(_0x2b7d8a[_0xf28a('0x14')][_0xf28a('0x12')]);}})[_0xf28a('0x15')](function(_0x3858a7){logger[_0xf28a('0x10')]('VoiceTransferReport,\x20%s,\x20%s',_0x2166ed,_0x3858a7);_0x343a38(_0x3858a7);});});}exports[_0xf28a('0x16')]=function(_0x320adb){var _0x529883=this;return new Promise(function(_0x4c8aa3,_0x44fde3){return db[_0xf28a('0x17')]['create'](_0x320adb[_0xf28a('0x18')],{'raw':_0x320adb['options']?_0x320adb[_0xf28a('0x19')][_0xf28a('0x1a')]===undefined?!![]:![]:!![]})[_0xf28a('0xb')](function(_0xd3afeb){logger[_0xf28a('0x13')](_0xf28a('0x16'),_0x320adb);logger[_0xf28a('0xd')](_0xf28a('0x16'),_0x320adb,JSON[_0xf28a('0xf')](_0xd3afeb));_0x4c8aa3(_0xd3afeb);})[_0xf28a('0x15')](function(_0x2b2199){logger['error'](_0xf28a('0x16'),_0x2b2199[_0xf28a('0x12')],_0x320adb);_0x44fde3(_0x529883[_0xf28a('0x10')](0x1f4,_0x2b2199[_0xf28a('0x12')]));});});};
\ No newline at end of file
+var _0x6f6b=['create','body','options','raw','stringify','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','VoiceTransferReport,\x20%s,\x20%s','VoiceTransferReport,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','CreateVoiceTransferReport','VoiceTransferReport'];(function(_0xb7127b,_0x5ce879){var _0x3c8758=function(_0x3b3ed4){while(--_0x3b3ed4){_0xb7127b['push'](_0xb7127b['shift']());}};_0x3c8758(++_0x5ce879);}(_0x6f6b,0x131));var _0xb6f6=function(_0x776414,_0x10d2de){_0x776414=_0x776414-0x0;var _0x7ec5f6=_0x6f6b[_0x776414];return _0x7ec5f6;};'use strict';var _=require(_0xb6f6('0x0'));var util=require(_0xb6f6('0x1'));var moment=require(_0xb6f6('0x2'));var BPromise=require(_0xb6f6('0x3'));var rs=require(_0xb6f6('0x4'));var fs=require('fs');var Redis=require(_0xb6f6('0x5'));var db=require(_0xb6f6('0x6'))['db'];var utils=require(_0xb6f6('0x7'));var logger=require(_0xb6f6('0x8'))(_0xb6f6('0x9'));var config=require(_0xb6f6('0xa'));var jayson=require(_0xb6f6('0xb'));var client=jayson[_0xb6f6('0xc')][_0xb6f6('0xd')]({'port':0x232a});function respondWithRpcPromise(_0x355b34,_0x298933,_0x464ab7){return new BPromise(function(_0x24e554,_0x113ada){return client[_0xb6f6('0xe')](_0x355b34,_0x464ab7)[_0xb6f6('0xf')](function(_0x501a62){logger[_0xb6f6('0x10')](_0xb6f6('0x11'),_0x298933,'request\x20sent');logger['debug'](_0xb6f6('0x12'),_0x298933,_0xb6f6('0x13'),JSON['stringify'](_0x501a62));if(_0x501a62[_0xb6f6('0x14')]){if(_0x501a62['error'][_0xb6f6('0x15')]===0x1f4){logger['error']('VoiceTransferReport,\x20%s,\x20%s',_0x298933,_0x501a62[_0xb6f6('0x14')][_0xb6f6('0x16')]);return _0x113ada(_0x501a62['error']['message']);}logger[_0xb6f6('0x14')](_0xb6f6('0x11'),_0x298933,_0x501a62[_0xb6f6('0x14')][_0xb6f6('0x16')]);return _0x24e554(_0x501a62['error'][_0xb6f6('0x16')]);}else{logger[_0xb6f6('0x10')]('VoiceTransferReport,\x20%s,\x20%s',_0x298933,'request\x20sent');_0x24e554(_0x501a62['result'][_0xb6f6('0x16')]);}})['catch'](function(_0x49319a){logger[_0xb6f6('0x14')](_0xb6f6('0x11'),_0x298933,_0x49319a);_0x113ada(_0x49319a);});});}exports[_0xb6f6('0x17')]=function(_0x2ffc88){var _0x19e120=this;return new Promise(function(_0x182ca9,_0xc941d0){return db[_0xb6f6('0x18')][_0xb6f6('0x19')](_0x2ffc88[_0xb6f6('0x1a')],{'raw':_0x2ffc88[_0xb6f6('0x1b')]?_0x2ffc88['options'][_0xb6f6('0x1c')]===undefined?!![]:![]:!![]})['then'](function(_0x1015a4){logger['info'](_0xb6f6('0x17'),_0x2ffc88);logger['debug'](_0xb6f6('0x17'),_0x2ffc88,JSON[_0xb6f6('0x1d')](_0x1015a4));_0x182ca9(_0x1015a4);})['catch'](function(_0x1329cb){logger[_0xb6f6('0x14')](_0xb6f6('0x17'),_0x1329cb[_0xb6f6('0x16')],_0x2ffc88);_0xc941d0(_0x19e120[_0xb6f6('0x14')](0x1f4,_0x1329cb[_0xb6f6('0x16')]));});});};
\ No newline at end of file
index 2a7c2d6..bb025be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbe9b=['seedDB','./config/seedDB','default','./config/license','catch','error','Server\x20failed\x20to\x20start\x20due\x20to\x20error:\x20%s','exit','./mysqldb','./config/environment','./config/logger','app','./config/pm2/config','./config/schedule','sequelize','sync','listen','info','start','then','Online\x20apps:','map','filter','name','join','status','online'];(function(_0xe19a76,_0x44ede6){var _0x1a5873=function(_0x403003){while(--_0x403003){_0xe19a76['push'](_0xe19a76['shift']());}};_0x1a5873(++_0x44ede6);}(_0xbe9b,0x14c));var _0xbbe9=function(_0xd30eaa,_0x1869e7){_0xd30eaa=_0xd30eaa-0x0;var _0x441894=_0xbe9b[_0xd30eaa];return _0x441894;};'use strict';var _=require('lodash');var mysqldb=require(_0xbbe9('0x0'));var rpc=require('./rpc');var config=require(_0xbbe9('0x1'));var logger=require(_0xbbe9('0x2'))(_0xbbe9('0x3'));var pm2=require('./config/pm2');var pm2Config=require(_0xbbe9('0x4'));var schedule=require(_0xbbe9('0x5'));var chat=require('./config/schedule/chat');function main(){return mysqldb['db'][_0xbbe9('0x6')][_0xbbe9('0x7')]()['then'](function(){return rpc[_0xbbe9('0x8')]();})['then'](function(_0x300f0e){logger[_0xbbe9('0x9')](_0x300f0e);return chat[_0xbbe9('0xa')]();})[_0xbbe9('0xb')](function(){return schedule[_0xbbe9('0xa')]();})[_0xbbe9('0xb')](function(_0x5edb3a){logger[_0xbbe9('0x9')](_0x5edb3a);return pm2[_0xbbe9('0xa')](pm2Config);})[_0xbbe9('0xb')](function(_0x1ff280){logger[_0xbbe9('0x9')](_0xbbe9('0xc'),_[_0xbbe9('0xd')](_[_0xbbe9('0xe')](_0x1ff280,{'status':'online'}),_0xbbe9('0xf'))[_0xbbe9('0x10')]());logger[_0xbbe9('0x9')]('Offline\x20apps:',_[_0xbbe9('0xd')](_['filter'](_0x1ff280,function(_0x3999b7){return _0x3999b7[_0xbbe9('0x11')]!==_0xbbe9('0x12');}),_0xbbe9('0xf'))[_0xbbe9('0x10')]()||'None');config[_0xbbe9('0x13')]&&require(_0xbbe9('0x14'))[_0xbbe9('0x15')]();require(_0xbbe9('0x16'))[_0xbbe9('0x15')]();})[_0xbbe9('0x17')](function(_0x153607){logger[_0xbbe9('0x18')](_0xbbe9('0x19'),_0x153607);process[_0xbbe9('0x1a')](0x1);});}main();
\ No newline at end of file
+var _0x3eed=['sync','then','info','start','Online\x20apps:','map','filter','name','join','Offline\x20apps:','status','online','None','seedDB','./config/seedDB','default','./config/license','error','exit','lodash','./mysqldb','./rpc','./config/logger','app','./config/pm2','./config/pm2/config','./config/schedule','./config/schedule/chat','sequelize'];(function(_0x5ea00d,_0x4db102){var _0x1393d6=function(_0x3442f5){while(--_0x3442f5){_0x5ea00d['push'](_0x5ea00d['shift']());}};_0x1393d6(++_0x4db102);}(_0x3eed,0x18c));var _0xd3ee=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0x3eed[_0x2641f9];return _0x585741;};'use strict';var _=require(_0xd3ee('0x0'));var mysqldb=require(_0xd3ee('0x1'));var rpc=require(_0xd3ee('0x2'));var config=require('./config/environment');var logger=require(_0xd3ee('0x3'))(_0xd3ee('0x4'));var pm2=require(_0xd3ee('0x5'));var pm2Config=require(_0xd3ee('0x6'));var schedule=require(_0xd3ee('0x7'));var chat=require(_0xd3ee('0x8'));function main(){return mysqldb['db'][_0xd3ee('0x9')][_0xd3ee('0xa')]()['then'](function(){return rpc['listen']();})[_0xd3ee('0xb')](function(_0x1df389){logger[_0xd3ee('0xc')](_0x1df389);return chat['start']();})[_0xd3ee('0xb')](function(){return schedule['start']();})[_0xd3ee('0xb')](function(_0x4fb081){logger[_0xd3ee('0xc')](_0x4fb081);return pm2[_0xd3ee('0xd')](pm2Config);})[_0xd3ee('0xb')](function(_0x1dff70){logger[_0xd3ee('0xc')](_0xd3ee('0xe'),_[_0xd3ee('0xf')](_[_0xd3ee('0x10')](_0x1dff70,{'status':'online'}),_0xd3ee('0x11'))[_0xd3ee('0x12')]());logger[_0xd3ee('0xc')](_0xd3ee('0x13'),_['map'](_[_0xd3ee('0x10')](_0x1dff70,function(_0x3c5088){return _0x3c5088[_0xd3ee('0x14')]!==_0xd3ee('0x15');}),_0xd3ee('0x11'))['join']()||_0xd3ee('0x16'));config[_0xd3ee('0x17')]&&require(_0xd3ee('0x18'))[_0xd3ee('0x19')]();require(_0xd3ee('0x1a'))[_0xd3ee('0x19')]();})['catch'](function(_0xb4b4fa){logger[_0xd3ee('0x1b')]('Server\x20failed\x20to\x20start\x20due\x20to\x20error:\x20%s',_0xb4b4fa);process[_0xd3ee('0x1c')](0x1);});}main();
\ No newline at end of file
index c3b1e43..16baa92 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9e15=['isAuthenticated','getLicense','update','canUpdate','sign','signToken','hasRole','indexOf','Forbidden','isMiddleware','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.','cookie','motion.user','pick','retrieveApiKey','isNil','apiKeyIat','generateApiKey','apiKeyNonce','randomBytes','toString','hex','floor','now','regenerateApiKey','apikey','Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one','HS512','../../mysqldb','../../config/environment','../../config/license/hardware','lodash','jsonwebtoken','express-jwt','composable-middleware','crypto','ipaddr.js','secrets','session','role','fullname','name','internal','email','voicePause','chatPause','mailPause','smsPause','openchannelPause','phoneBarRemoteControlPort','phoneBarRemoteControl','interface','userProfileId','use','findOne','params','disposition','then','closed','unmanaged','json','Unmanaged.','Forbidden.','catch','headers','authorization','Basic','User','find','authenticate','status','Wrong\x20credentials.','user','startsWith','Bearer','Unknown\x20authorization\x20format','query','verify','getUuid','sub','nonce','API\x20access\x20key\x20is\x20not\x20valid\x20anymore','log','User\x20not\x20found.','User\x20object\x20not\x20found.'];(function(_0x10be5d,_0x4b8b09){var _0x3c26fe=function(_0x4e60c2){while(--_0x4e60c2){_0x10be5d['push'](_0x10be5d['shift']());}};_0x3c26fe(++_0x4b8b09);}(_0x9e15,0xc6));var _0x59e1=function(_0xfa634c,_0x414e0e){_0xfa634c=_0xfa634c-0x0;var _0x73e478=_0x9e15[_0xfa634c];return _0x73e478;};'use strict';var db=require(_0x59e1('0x0'))['db'];var config=require(_0x59e1('0x1'));var hardwareConf=require(_0x59e1('0x2'));var _=require(_0x59e1('0x3'));var jwt=require(_0x59e1('0x4'));var expressJwt=require(_0x59e1('0x5'));var compose=require(_0x59e1('0x6'));var basicAuth=require('basic-auth');var crypto=require(_0x59e1('0x7'));var ipaddr=require(_0x59e1('0x8'));var validateJwt=expressJwt({'secret':config[_0x59e1('0x9')][_0x59e1('0xa')]});var userAttributes=['id',_0x59e1('0xb'),_0x59e1('0xc'),_0x59e1('0xd'),_0x59e1('0xe'),_0x59e1('0xf'),'userpic','permissions',_0x59e1('0x10'),_0x59e1('0x11'),_0x59e1('0x12'),'faxPause',_0x59e1('0x13'),_0x59e1('0x14'),'pauseType','showWebBar',_0x59e1('0x15'),_0x59e1('0x16'),_0x59e1('0x17'),_0x59e1('0x18')];exports['isChatInteractionAuthorized']=function(){return isAuthenticated(!![])[_0x59e1('0x19')](function(_0x5d27b4,_0x2e24cc,_0x46cc7d){if(_0x5d27b4['user']){_0x46cc7d();}else{return db['ChatInteraction'][_0x59e1('0x1a')]({'where':{'id':_0x5d27b4[_0x59e1('0x1b')]['id']},'attributes':['id','closed',_0x59e1('0x1c')],'raw':!![]})[_0x59e1('0x1d')](function(_0x5035fb){if(_0x5035fb&&_0x5035fb[_0x59e1('0x1e')]){return _0x2e24cc['status'](_0x5035fb[_0x59e1('0x1c')]===_0x59e1('0x1f')?0x195:0x193)[_0x59e1('0x20')]({'message':_0x5035fb[_0x59e1('0x1c')]===_0x59e1('0x1f')?_0x59e1('0x21'):_0x59e1('0x22')});}else{_0x46cc7d();}})[_0x59e1('0x23')](function(_0x4ae4b4){_0x46cc7d(_0x4ae4b4);});}});};function isAuthenticated(_0x3fccd0){return compose()['use'](function(_0x58ddb0,_0x57675b,_0x2c060e){if(_0x58ddb0['headers']['authorization']){if(_['startsWith'](_0x58ddb0[_0x59e1('0x24')][_0x59e1('0x25')],_0x59e1('0x26'))){var _0x4d38dd=basicAuth(_0x58ddb0);db[_0x59e1('0x27')][_0x59e1('0x28')]({'where':{'name':_0x4d38dd[_0x59e1('0xd')]}})[_0x59e1('0x1d')](function(_0x1edf4e){if(!_0x1edf4e||!_0x1edf4e[_0x59e1('0x29')](_0x4d38dd['pass'])){return _0x57675b[_0x59e1('0x2a')](0x191)[_0x59e1('0x20')]({'message':_0x59e1('0x2b')});}_0x58ddb0[_0x59e1('0x2c')]={'id':_0x1edf4e['id']};_0x2c060e();})[_0x59e1('0x23')](function(_0x149b8e){_0x2c060e(_0x149b8e);});}else if(_[_0x59e1('0x2d')](_0x58ddb0[_0x59e1('0x24')][_0x59e1('0x25')],_0x59e1('0x2e'))){validateJwt(_0x58ddb0,_0x57675b,_0x2c060e);}else{if(_0x3fccd0){_0x2c060e();}else{return _0x57675b[_0x59e1('0x2a')](0x193)[_0x59e1('0x20')]({'message':_0x59e1('0x2f')});}}}else if(_0x58ddb0[_0x59e1('0x30')]['apikey']){try{var _0x4cbd88=jwt[_0x59e1('0x31')](_0x58ddb0[_0x59e1('0x30')]['apikey'],config[_0x59e1('0x9')][_0x59e1('0xa')],{'audience':hardwareConf[_0x59e1('0x32')](),'issuer':hardwareConf[_0x59e1('0x32')]()});db[_0x59e1('0x27')][_0x59e1('0x28')]({'where':{'id':_0x4cbd88[_0x59e1('0x33')]}})[_0x59e1('0x1d')](function(_0x5343d6){if(!_0x5343d6||!_['isEqual'](_0x5343d6['apiKeyNonce'],_0x4cbd88[_0x59e1('0x34')])){return _0x57675b[_0x59e1('0x2a')](0x193)[_0x59e1('0x20')]({'message':_0x59e1('0x35')});}_0x58ddb0[_0x59e1('0x2c')]={'id':_0x5343d6['id']};_0x2c060e();})[_0x59e1('0x23')](function(_0x2fcc6a){_0x2c060e(_0x2fcc6a);});}catch(_0x292c0b){console[_0x59e1('0x36')](_0x292c0b);return _0x57675b['status'](0x193)['json']({'message':'Unrecognized\x20API\x20access\x20key'});}}else if(_0x3fccd0){_0x2c060e();}else{return _0x57675b[_0x59e1('0x2a')](0x193)[_0x59e1('0x20')]({'message':_0x59e1('0x2f')});}})[_0x59e1('0x19')](function(_0x35d533,_0x1e9fa2,_0x4d0c81){if(_0x35d533[_0x59e1('0x2c')]){db[_0x59e1('0x27')][_0x59e1('0x28')]({'where':{'id':_0x35d533['user']['id']},'attributes':userAttributes})[_0x59e1('0x1d')](function(_0x11357a){if(!_0x11357a){return _0x1e9fa2[_0x59e1('0x2a')](0x194)['json']({'message':_0x59e1('0x37')});}_0x35d533[_0x59e1('0x2c')]=_0x11357a;_0x4d0c81();})['catch'](function(_0x3c3fbf){_0x4d0c81(_0x3c3fbf);});}else if(_0x3fccd0){_0x4d0c81();}else{return _0x1e9fa2['status'](0x194)[_0x59e1('0x20')]({'message':_0x59e1('0x38')});}});}exports[_0x59e1('0x39')]=isAuthenticated;function canUpdate(){return compose()['use'](function(_0xf26257,_0x54b34e,_0x552239){return require('../../config/license/util')[_0x59e1('0x3a')]()[_0x59e1('0x1d')](function(_0xf47acb){if(_0xf47acb[_0x59e1('0x3b')]){_0x552239();}else{return _0x54b34e[_0x59e1('0x2a')](0x193)[_0x59e1('0x20')]({'message':'Forbidden'});}})[_0x59e1('0x23')](function(_0x383c5a){_0x552239(_0x383c5a);});});}exports[_0x59e1('0x3c')]=canUpdate;function signToken(_0xbf4993,_0x4b1d42){return jwt[_0x59e1('0x3d')]({'id':_0xbf4993,'role':_0x4b1d42},config[_0x59e1('0x9')][_0x59e1('0xa')],{'expiresIn':0x15180});}exports[_0x59e1('0x3e')]=signToken;exports[_0x59e1('0x3f')]=function(_0x1419ad){if(!_0x1419ad){throw new Error('Required\x20role\x20needs\x20to\x20be\x20set');}return compose()['use'](isAuthenticated())[_0x59e1('0x19')](function meetsRequirements(_0x57fc8d,_0x57076d,_0x188ac0){if(config['userRoles'][_0x59e1('0x40')](_0x57fc8d[_0x59e1('0x2c')][_0x59e1('0xb')])>=config['userRoles'][_0x59e1('0x40')](_0x1419ad)){return _0x188ac0();}else{return _0x57076d[_0x59e1('0x2a')](0x193)[_0x59e1('0x20')]({'message':_0x59e1('0x41')});}});};exports[_0x59e1('0x42')]=function(_0x3e7d26,_0xeee1ab,_0x49b7f4){_0x3e7d26[_0x59e1('0x42')]=!![];return _0x49b7f4();};exports['setTokenCookie']=function(_0x2a7ffb,_0x7a4318){if(!_0x2a7ffb[_0x59e1('0x2c')]){return _0x7a4318[_0x59e1('0x2a')](0x194)[_0x59e1('0x20')]({'message':_0x59e1('0x43')});}var _0x4975a3=signToken(_0x2a7ffb[_0x59e1('0x2c')]['id'],_0x2a7ffb[_0x59e1('0x2c')][_0x59e1('0xb')]);_0x7a4318['cookie']('motion.token',_0x4975a3);_0x7a4318[_0x59e1('0x44')](_0x59e1('0x45'),JSON['stringify'](_[_0x59e1('0x46')](_0x2a7ffb['user'],userAttributes)));_0x7a4318['redirect']('/dashboards/general');};exports[_0x59e1('0x47')]=function(_0x2fc4ad){if(_[_0x59e1('0x48')](_0x2fc4ad['apiKeyNonce'])||_['isNil'](_0x2fc4ad[_0x59e1('0x49')]))return null;else return createJwt(_0x2fc4ad);};exports[_0x59e1('0x4a')]=function(_0x5732cc){_0x5732cc[_0x59e1('0x4b')]=crypto[_0x59e1('0x4c')](0x10)[_0x59e1('0x4d')](_0x59e1('0x4e'));_0x5732cc['apiKeyIat']=Math[_0x59e1('0x4f')](Date[_0x59e1('0x50')]()/0x3e8)['toString']();return createJwt(_0x5732cc);};exports[_0x59e1('0x51')]=function(_0xfc4e47,_0x13c9b8){if(_0xfc4e47[_0x59e1('0x30')][_0x59e1('0x52')]){jwt[_0x59e1('0x31')](_0xfc4e47[_0x59e1('0x30')]['apikey'],config['secrets'][_0x59e1('0xa')],{'nonce':_0x13c9b8['apiKeyNonce'],'iat':_0x13c9b8[_0x59e1('0x49')],'audience':hardwareConf[_0x59e1('0x32')](),'issuer':hardwareConf[_0x59e1('0x32')]()});return generateApiKey(_0x13c9b8);}else{throw{'message':_0x59e1('0x53')};}};function createJwt(_0x1be5e7){return jwt['sign']({'iat':_0x1be5e7[_0x59e1('0x49')],'nonce':_0x1be5e7[_0x59e1('0x4b')]},config[_0x59e1('0x9')]['session'],{'algorithm':_0x59e1('0x54'),'subject':_0x1be5e7['id']['toString'](),'issuer':hardwareConf[_0x59e1('0x32')](),'audience':hardwareConf[_0x59e1('0x32')]()});}
\ No newline at end of file
+var _0xe48f=['params','disposition','then','closed','unmanaged','json','Unmanaged.','Forbidden.','catch','use','startsWith','headers','authorization','Basic','User','find','authenticate','pass','status','Wrong\x20credentials.','Bearer','Unknown\x20authorization\x20format','query','apikey','getUuid','isEqual','apiKeyNonce','nonce','API\x20access\x20key\x20is\x20not\x20valid\x20anymore','Unrecognized\x20API\x20access\x20key','User\x20not\x20found.','User\x20object\x20not\x20found.','../../config/license/util','getLicense','update','canUpdate','sign','session','signToken','hasRole','Required\x20role\x20needs\x20to\x20be\x20set','userRoles','indexOf','Forbidden','isMiddleware','setTokenCookie','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.','cookie','motion.token','motion.user','stringify','pick','redirect','/dashboards/general','retrieveApiKey','isNil','apiKeyIat','generateApiKey','randomBytes','toString','hex','floor','now','regenerateApiKey','verify','Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one','../../mysqldb','../../config/environment','../../config/license/hardware','lodash','express-jwt','composable-middleware','basic-auth','crypto','ipaddr.js','secrets','role','name','email','permissions','voicePause','chatPause','faxPause','pauseType','phoneBarRemoteControlPort','userProfileId','isChatInteractionAuthorized','user','ChatInteraction','findOne'];(function(_0x433a86,_0x175b5c){var _0x23000c=function(_0x4b1fa0){while(--_0x4b1fa0){_0x433a86['push'](_0x433a86['shift']());}};_0x23000c(++_0x175b5c);}(_0xe48f,0x9c));var _0xfe48=function(_0xfa847c,_0x444a8c){_0xfa847c=_0xfa847c-0x0;var _0x3b22bf=_0xe48f[_0xfa847c];return _0x3b22bf;};'use strict';var db=require(_0xfe48('0x0'))['db'];var config=require(_0xfe48('0x1'));var hardwareConf=require(_0xfe48('0x2'));var _=require(_0xfe48('0x3'));var jwt=require('jsonwebtoken');var expressJwt=require(_0xfe48('0x4'));var compose=require(_0xfe48('0x5'));var basicAuth=require(_0xfe48('0x6'));var crypto=require(_0xfe48('0x7'));var ipaddr=require(_0xfe48('0x8'));var validateJwt=expressJwt({'secret':config[_0xfe48('0x9')]['session']});var userAttributes=['id',_0xfe48('0xa'),'fullname',_0xfe48('0xb'),'internal',_0xfe48('0xc'),'userpic',_0xfe48('0xd'),_0xfe48('0xe'),_0xfe48('0xf'),'mailPause',_0xfe48('0x10'),'smsPause','openchannelPause',_0xfe48('0x11'),'showWebBar',_0xfe48('0x12'),'phoneBarRemoteControl','interface',_0xfe48('0x13')];exports[_0xfe48('0x14')]=function(){return isAuthenticated(!![])['use'](function(_0xdae932,_0x45f5ae,_0x1fa144){if(_0xdae932[_0xfe48('0x15')]){_0x1fa144();}else{return db[_0xfe48('0x16')][_0xfe48('0x17')]({'where':{'id':_0xdae932[_0xfe48('0x18')]['id']},'attributes':['id','closed',_0xfe48('0x19')],'raw':!![]})[_0xfe48('0x1a')](function(_0x419e09){if(_0x419e09&&_0x419e09[_0xfe48('0x1b')]){return _0x45f5ae['status'](_0x419e09[_0xfe48('0x19')]===_0xfe48('0x1c')?0x195:0x193)[_0xfe48('0x1d')]({'message':_0x419e09[_0xfe48('0x19')]===_0xfe48('0x1c')?_0xfe48('0x1e'):_0xfe48('0x1f')});}else{_0x1fa144();}})[_0xfe48('0x20')](function(_0x32809d){_0x1fa144(_0x32809d);});}});};function isAuthenticated(_0x45a76e){return compose()[_0xfe48('0x21')](function(_0x1c0a10,_0x105a32,_0x41717d){if(_0x1c0a10['headers']['authorization']){if(_[_0xfe48('0x22')](_0x1c0a10[_0xfe48('0x23')][_0xfe48('0x24')],_0xfe48('0x25'))){var _0x74b23a=basicAuth(_0x1c0a10);db[_0xfe48('0x26')][_0xfe48('0x27')]({'where':{'name':_0x74b23a[_0xfe48('0xb')]}})['then'](function(_0x370306){if(!_0x370306||!_0x370306[_0xfe48('0x28')](_0x74b23a[_0xfe48('0x29')])){return _0x105a32[_0xfe48('0x2a')](0x191)['json']({'message':_0xfe48('0x2b')});}_0x1c0a10[_0xfe48('0x15')]={'id':_0x370306['id']};_0x41717d();})[_0xfe48('0x20')](function(_0x29ab69){_0x41717d(_0x29ab69);});}else if(_['startsWith'](_0x1c0a10[_0xfe48('0x23')][_0xfe48('0x24')],_0xfe48('0x2c'))){validateJwt(_0x1c0a10,_0x105a32,_0x41717d);}else{if(_0x45a76e){_0x41717d();}else{return _0x105a32['status'](0x193)[_0xfe48('0x1d')]({'message':_0xfe48('0x2d')});}}}else if(_0x1c0a10[_0xfe48('0x2e')][_0xfe48('0x2f')]){try{var _0x1d2430=jwt['verify'](_0x1c0a10[_0xfe48('0x2e')][_0xfe48('0x2f')],config[_0xfe48('0x9')]['session'],{'audience':hardwareConf[_0xfe48('0x30')](),'issuer':hardwareConf[_0xfe48('0x30')]()});db['User']['find']({'where':{'id':_0x1d2430['sub']}})['then'](function(_0x4bcd09){if(!_0x4bcd09||!_[_0xfe48('0x31')](_0x4bcd09[_0xfe48('0x32')],_0x1d2430[_0xfe48('0x33')])){return _0x105a32[_0xfe48('0x2a')](0x193)[_0xfe48('0x1d')]({'message':_0xfe48('0x34')});}_0x1c0a10[_0xfe48('0x15')]={'id':_0x4bcd09['id']};_0x41717d();})[_0xfe48('0x20')](function(_0x291cdf){_0x41717d(_0x291cdf);});}catch(_0x23656e){console['log'](_0x23656e);return _0x105a32[_0xfe48('0x2a')](0x193)[_0xfe48('0x1d')]({'message':_0xfe48('0x35')});}}else if(_0x45a76e){_0x41717d();}else{return _0x105a32[_0xfe48('0x2a')](0x193)[_0xfe48('0x1d')]({'message':_0xfe48('0x2d')});}})[_0xfe48('0x21')](function(_0x5cd4fe,_0x21898d,_0xeda082){if(_0x5cd4fe['user']){db[_0xfe48('0x26')][_0xfe48('0x27')]({'where':{'id':_0x5cd4fe[_0xfe48('0x15')]['id']},'attributes':userAttributes})[_0xfe48('0x1a')](function(_0x1e9464){if(!_0x1e9464){return _0x21898d[_0xfe48('0x2a')](0x194)[_0xfe48('0x1d')]({'message':_0xfe48('0x36')});}_0x5cd4fe['user']=_0x1e9464;_0xeda082();})['catch'](function(_0x27645f){_0xeda082(_0x27645f);});}else if(_0x45a76e){_0xeda082();}else{return _0x21898d[_0xfe48('0x2a')](0x194)[_0xfe48('0x1d')]({'message':_0xfe48('0x37')});}});}exports['isAuthenticated']=isAuthenticated;function canUpdate(){return compose()[_0xfe48('0x21')](function(_0x51f911,_0x13f0ba,_0x2e139a){return require(_0xfe48('0x38'))[_0xfe48('0x39')]()['then'](function(_0x434057){if(_0x434057[_0xfe48('0x3a')]){_0x2e139a();}else{return _0x13f0ba[_0xfe48('0x2a')](0x193)['json']({'message':'Forbidden'});}})[_0xfe48('0x20')](function(_0x285009){_0x2e139a(_0x285009);});});}exports[_0xfe48('0x3b')]=canUpdate;function signToken(_0x3a593b,_0x203952){return jwt[_0xfe48('0x3c')]({'id':_0x3a593b,'role':_0x203952},config[_0xfe48('0x9')][_0xfe48('0x3d')],{'expiresIn':0x15180});}exports[_0xfe48('0x3e')]=signToken;exports[_0xfe48('0x3f')]=function(_0x3d4cdf){if(!_0x3d4cdf){throw new Error(_0xfe48('0x40'));}return compose()[_0xfe48('0x21')](isAuthenticated())[_0xfe48('0x21')](function meetsRequirements(_0x4a4b41,_0x50aef6,_0xbc6c02){if(config[_0xfe48('0x41')][_0xfe48('0x42')](_0x4a4b41[_0xfe48('0x15')][_0xfe48('0xa')])>=config[_0xfe48('0x41')]['indexOf'](_0x3d4cdf)){return _0xbc6c02();}else{return _0x50aef6['status'](0x193)[_0xfe48('0x1d')]({'message':_0xfe48('0x43')});}});};exports[_0xfe48('0x44')]=function(_0x5cc0e4,_0x21ccb5,_0xcad46c){_0x5cc0e4[_0xfe48('0x44')]=!![];return _0xcad46c();};exports[_0xfe48('0x45')]=function(_0x39f987,_0x4d6d3d){if(!_0x39f987['user']){return _0x4d6d3d['status'](0x194)[_0xfe48('0x1d')]({'message':_0xfe48('0x46')});}var _0x27f33b=signToken(_0x39f987[_0xfe48('0x15')]['id'],_0x39f987[_0xfe48('0x15')][_0xfe48('0xa')]);_0x4d6d3d[_0xfe48('0x47')](_0xfe48('0x48'),_0x27f33b);_0x4d6d3d[_0xfe48('0x47')](_0xfe48('0x49'),JSON[_0xfe48('0x4a')](_[_0xfe48('0x4b')](_0x39f987['user'],userAttributes)));_0x4d6d3d[_0xfe48('0x4c')](_0xfe48('0x4d'));};exports[_0xfe48('0x4e')]=function(_0x2685f3){if(_[_0xfe48('0x4f')](_0x2685f3[_0xfe48('0x32')])||_[_0xfe48('0x4f')](_0x2685f3[_0xfe48('0x50')]))return null;else return createJwt(_0x2685f3);};exports[_0xfe48('0x51')]=function(_0x3bcb0e){_0x3bcb0e[_0xfe48('0x32')]=crypto[_0xfe48('0x52')](0x10)[_0xfe48('0x53')](_0xfe48('0x54'));_0x3bcb0e[_0xfe48('0x50')]=Math[_0xfe48('0x55')](Date[_0xfe48('0x56')]()/0x3e8)['toString']();return createJwt(_0x3bcb0e);};exports[_0xfe48('0x57')]=function(_0x3f7cac,_0x1d82cd){if(_0x3f7cac['query'][_0xfe48('0x2f')]){jwt[_0xfe48('0x58')](_0x3f7cac[_0xfe48('0x2e')][_0xfe48('0x2f')],config[_0xfe48('0x9')][_0xfe48('0x3d')],{'nonce':_0x1d82cd[_0xfe48('0x32')],'iat':_0x1d82cd[_0xfe48('0x50')],'audience':hardwareConf[_0xfe48('0x30')](),'issuer':hardwareConf[_0xfe48('0x30')]()});return generateApiKey(_0x1d82cd);}else{throw{'message':_0xfe48('0x59')};}};function createJwt(_0x4cb493){return jwt[_0xfe48('0x3c')]({'iat':_0x4cb493[_0xfe48('0x50')],'nonce':_0x4cb493['apiKeyNonce']},config[_0xfe48('0x9')][_0xfe48('0x3d')],{'algorithm':'HS512','subject':_0x4cb493['id']['toString'](),'issuer':hardwareConf['getUuid'](),'audience':hardwareConf[_0xfe48('0x30')]()});}
\ No newline at end of file
index d5cf600..86e2ded 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x253a=['unlink','decryptFile','createWriteStream','final','bluebird','aes192','hasOwnProperty','createReadStream','createCipher','algorithm','data','update','binary','write','end','close'];(function(_0x34479b,_0x53b1d1){var _0x23e1b8=function(_0x22d0e6){while(--_0x22d0e6){_0x34479b['push'](_0x34479b['shift']());}};_0x23e1b8(++_0x53b1d1);}(_0x253a,0xe4));var _0xa253=function(_0x234820,_0x11ea77){_0x234820=_0x234820-0x0;var _0x3622cb=_0x253a[_0x234820];return _0x3622cb;};'use strict';var crypto=require('crypto');var fs=require('fs');var BPromise=require(_0xa253('0x0'));var defaultOptions={'algorithm':_0xa253('0x1')};function combineOptions(_0xc58e97){var _0x276c56={};for(var _0x7de58b in defaultOptions){if(defaultOptions[_0xa253('0x2')](_0x7de58b)){_0x276c56[_0x7de58b]=defaultOptions[_0x7de58b];}}if(_0xc58e97){for(var _0xc752c3 in _0xc58e97){if(_0xc58e97[_0xa253('0x2')](_0xc752c3)){_0x276c56[_0xc752c3]=_0xc58e97[_0xc752c3];}}}return _0x276c56;}exports['encryptFile']=function(_0xbb4bbd,_0x132513,_0x154885,_0x29ed16){return new BPromise(function(_0xde37bd,_0x1a4ce6){_0x29ed16=combineOptions(_0x29ed16);var _0x13cd91=new Buffer(_0x154885);var _0x33a023=fs[_0xa253('0x3')](_0xbb4bbd);var _0x5dc5c2=fs['createWriteStream'](_0x132513);var _0x6c111c=crypto[_0xa253('0x4')](_0x29ed16[_0xa253('0x5')],_0x13cd91);_0x33a023['on'](_0xa253('0x6'),function(_0x1a13bd){var _0x5544dd=new Buffer(_0x6c111c[_0xa253('0x7')](_0x1a13bd),_0xa253('0x8'));_0x5dc5c2[_0xa253('0x9')](_0x5544dd);});_0x33a023['on']('end',function(){try{var _0x4bac20=new Buffer(_0x6c111c['final'](_0xa253('0x8')),_0xa253('0x8'));_0x5dc5c2[_0xa253('0x9')](_0x4bac20);_0x5dc5c2[_0xa253('0xa')]();_0x5dc5c2['on'](_0xa253('0xb'),function(){return _0xde37bd(_0x132513);});}catch(_0x153101){fs[_0xa253('0xc')](_0x132513);return _0x1a4ce6(_0x153101);}});});};exports[_0xa253('0xd')]=function(_0x5b7233,_0x3b0108,_0x18739b,_0x2c6e11){return new BPromise(function(_0x3d8f5a,_0x352a6c){_0x2c6e11=combineOptions(_0x2c6e11);var _0x3fdd00=new Buffer(_0x18739b);var _0x4f8fd6=fs[_0xa253('0x3')](_0x5b7233);var _0x9c088b=fs[_0xa253('0xe')](_0x3b0108);var _0x36cd70=crypto['createDecipher'](_0x2c6e11['algorithm'],_0x3fdd00);_0x4f8fd6['on']('data',function(_0x3a1eb7){var _0x31a95b=new Buffer(_0x36cd70[_0xa253('0x7')](_0x3a1eb7),_0xa253('0x8'));_0x9c088b[_0xa253('0x9')](_0x31a95b);});_0x4f8fd6['on']('end',function(){try{var _0x54c831=new Buffer(_0x36cd70[_0xa253('0xf')]('binary'),_0xa253('0x8'));_0x9c088b[_0xa253('0x9')](_0x54c831);_0x9c088b['end']();_0x9c088b['on'](_0xa253('0xb'),function(){return _0x3d8f5a(_0x3b0108);});}catch(_0x16d350){fs[_0xa253('0xc')](_0x3b0108);return _0x352a6c(_0x16d350);}});});};
\ No newline at end of file
+var _0xab48=['decryptFile','createDecipher','final','close','crypto','bluebird','aes192','hasOwnProperty','encryptFile','createWriteStream','createCipher','algorithm','data','update','binary','write','end','unlink'];(function(_0x5d88c0,_0x5d7d83){var _0x1b40f0=function(_0x3fde10){while(--_0x3fde10){_0x5d88c0['push'](_0x5d88c0['shift']());}};_0x1b40f0(++_0x5d7d83);}(_0xab48,0x190));var _0x8ab4=function(_0xbd3556,_0xe38bfa){_0xbd3556=_0xbd3556-0x0;var _0x4a2e2d=_0xab48[_0xbd3556];return _0x4a2e2d;};'use strict';var crypto=require(_0x8ab4('0x0'));var fs=require('fs');var BPromise=require(_0x8ab4('0x1'));var defaultOptions={'algorithm':_0x8ab4('0x2')};function combineOptions(_0x4eacc6){var _0x4e3d78={};for(var _0x575298 in defaultOptions){if(defaultOptions[_0x8ab4('0x3')](_0x575298)){_0x4e3d78[_0x575298]=defaultOptions[_0x575298];}}if(_0x4eacc6){for(var _0x36d3e9 in _0x4eacc6){if(_0x4eacc6['hasOwnProperty'](_0x36d3e9)){_0x4e3d78[_0x36d3e9]=_0x4eacc6[_0x36d3e9];}}}return _0x4e3d78;}exports[_0x8ab4('0x4')]=function(_0x454f94,_0x14b885,_0x1747e1,_0x1fd4bd){return new BPromise(function(_0x5ec5d0,_0x1da96b){_0x1fd4bd=combineOptions(_0x1fd4bd);var _0x44e946=new Buffer(_0x1747e1);var _0x218671=fs['createReadStream'](_0x454f94);var _0x14b25d=fs[_0x8ab4('0x5')](_0x14b885);var _0x458dc5=crypto[_0x8ab4('0x6')](_0x1fd4bd[_0x8ab4('0x7')],_0x44e946);_0x218671['on'](_0x8ab4('0x8'),function(_0x2429f3){var _0x8a8984=new Buffer(_0x458dc5[_0x8ab4('0x9')](_0x2429f3),_0x8ab4('0xa'));_0x14b25d[_0x8ab4('0xb')](_0x8a8984);});_0x218671['on'](_0x8ab4('0xc'),function(){try{var _0x1b8eec=new Buffer(_0x458dc5['final'](_0x8ab4('0xa')),_0x8ab4('0xa'));_0x14b25d[_0x8ab4('0xb')](_0x1b8eec);_0x14b25d[_0x8ab4('0xc')]();_0x14b25d['on']('close',function(){return _0x5ec5d0(_0x14b885);});}catch(_0x21d8f4){fs[_0x8ab4('0xd')](_0x14b885);return _0x1da96b(_0x21d8f4);}});});};exports[_0x8ab4('0xe')]=function(_0x15b343,_0x42a1b7,_0x5e71ad,_0x34198f){return new BPromise(function(_0x452b80,_0x367181){_0x34198f=combineOptions(_0x34198f);var _0x1dd665=new Buffer(_0x5e71ad);var _0x35d66e=fs['createReadStream'](_0x15b343);var _0x5f1543=fs[_0x8ab4('0x5')](_0x42a1b7);var _0x274352=crypto[_0x8ab4('0xf')](_0x34198f[_0x8ab4('0x7')],_0x1dd665);_0x35d66e['on'](_0x8ab4('0x8'),function(_0x2d0e4d){var _0xc838e8=new Buffer(_0x274352[_0x8ab4('0x9')](_0x2d0e4d),_0x8ab4('0xa'));_0x5f1543[_0x8ab4('0xb')](_0xc838e8);});_0x35d66e['on'](_0x8ab4('0xc'),function(){try{var _0x1f6c69=new Buffer(_0x274352[_0x8ab4('0x10')](_0x8ab4('0xa')),'binary');_0x5f1543[_0x8ab4('0xb')](_0x1f6c69);_0x5f1543['end']();_0x5f1543['on'](_0x8ab4('0x11'),function(){return _0x452b80(_0x42a1b7);});}catch(_0x470743){fs[_0x8ab4('0xd')](_0x42a1b7);return _0x367181(_0x470743);}});});};
\ No newline at end of file
index 9432741..6ea0080 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5dfd=['basename','existsSync','join','each','%s%d.%s','csv','format','writeFileSync','zip','info','Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed','Completed','catch','inspect','util','path','lodash','to-csv','bluebird','zip-dir','rimraf','../../mysqldb','dbH','../../config/logger','analytics','argv','savename','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','CSV','Setting','find','split','splitSizeCsv','then','sequelize','query','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','QueryTypes','num','Empty','length','push','SELECT','dirname'];(function(_0x2e6dee,_0x1a61b0){var _0x47706=function(_0x365546){while(--_0x365546){_0x2e6dee['push'](_0x2e6dee['shift']());}};_0x47706(++_0x1a61b0);}(_0x5dfd,0x16e));var _0xd5df=function(_0x22eb96,_0x3c2d8d){_0x22eb96=_0x22eb96-0x0;var _0x5e1adf=_0x5dfd[_0x22eb96];return _0x5e1adf;};'use strict';var util=require(_0xd5df('0x0'));var path=require(_0xd5df('0x1'));var _=require(_0xd5df('0x2'));var csv=require(_0xd5df('0x3'));var fs=require('fs');var BPromise=require(_0xd5df('0x4'));var zipdir=require(_0xd5df('0x5'));var rimraf=require(_0xd5df('0x6'));var db=require(_0xd5df('0x7'))['db'];var dbH=require(_0xd5df('0x7'))[_0xd5df('0x8')];var logger=require(_0xd5df('0x9'))(_0xd5df('0xa'));var EXTRACTED_REPORT_ID=Number(process[_0xd5df('0xb')][0x2]);var QUERY=process[_0xd5df('0xb')][0x3];var PATH=process[_0xd5df('0xb')][0x4];function analyticExtractedReport(_0x42d555,_0x3ed65f){var _0x5438a4={'status':_0x42d555};var _0x321392={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x3ed65f){_0x5438a4[_0xd5df('0xc')]=_0x3ed65f;}return db['AnalyticExtractedReport']['update'](_0x5438a4,_0x321392);}function main(){var _0x3e089a=0x1388;var _0x4d3cb7;logger['info'](util['format'](_0xd5df('0xd'),EXTRACTED_REPORT_ID,_0xd5df('0xe')));return db[_0xd5df('0xf')][_0xd5df('0x10')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0xd5df('0x11'),_0xd5df('0x12')]})[_0xd5df('0x13')](function(_0x3468bf){if(_0x3468bf){_0x4d3cb7=_0x3468bf;_0x3e089a=_0x4d3cb7['splitSizeCsv']||0x1388;}})['then'](function(){return dbH[_0xd5df('0x14')][_0xd5df('0x15')](util['format'](_0xd5df('0x16'),QUERY),{'type':dbH[_0xd5df('0x14')][_0xd5df('0x17')]['SELECT']});})['then'](function(_0xc4b6b2){if(!_0xc4b6b2[0x0][_0xd5df('0x18')]){return analyticExtractedReport(_0xd5df('0x19'));}var _0x316386=[];var _0x49b7d9=0x0;var _0x199674=!![];if(_0xc4b6b2&&_0xc4b6b2[_0xd5df('0x1a')]){var _0x57ae6c=_0xc4b6b2[0x0]['num']%(_0x49b7d9+_0x3e089a);if(_0x4d3cb7['split']){for(;_0x199674;_0x49b7d9+=_0x3e089a,_0x57ae6c=_0xc4b6b2[0x0][_0xd5df('0x18')]%(_0x49b7d9+_0x3e089a)){if(_0x57ae6c==0x0||_0x57ae6c==_0xc4b6b2[0x0][_0xd5df('0x18')]){_0x199674=![];}_0x316386[_0xd5df('0x1b')](dbH['sequelize'][_0xd5df('0x15')](util['format']('%s\x20limit\x20%d\x20OFFSET\x20%d',QUERY,_0x3e089a,_0x49b7d9),{'type':dbH[_0xd5df('0x14')][_0xd5df('0x17')][_0xd5df('0x1c')]}));}}else{_0x316386[_0xd5df('0x1b')](dbH['sequelize']['query'](QUERY,{'type':dbH['sequelize'][_0xd5df('0x17')][_0xd5df('0x1c')]}));}}var _0xaacaa7=path[_0xd5df('0x1d')](PATH);var _0x70f8b4=path[_0xd5df('0x1e')](PATH,'.csv');var _0x255768=_0x4d3cb7[_0xd5df('0x11')]&&_0x316386[_0xd5df('0x1a')]>0x1;var _0x15ea72=[];if(!fs[_0xd5df('0x1f')](path[_0xd5df('0x20')](_0xaacaa7,_0x70f8b4))&&_0x255768){fs['mkdirSync'](path[_0xd5df('0x20')](_0xaacaa7,_0x70f8b4));}return BPromise[_0xd5df('0x21')](_0x316386,function(_0x48ab75){_0x15ea72[_0xd5df('0x1b')](_0x48ab75);})[_0xd5df('0x13')](function(){for(var _0x42a948=0x0;_0x42a948<_0x15ea72[_0xd5df('0x1a')];_0x42a948+=0x1){var _0x1ade25;var _0x425048=_0x15ea72[_0x42a948];if(_0x255768){_0x1ade25=path[_0xd5df('0x20')](_0xaacaa7,_0x70f8b4,util['format'](_0xd5df('0x22'),_0x70f8b4,_0x42a948,_0xd5df('0x23')));}else{_0x1ade25=path[_0xd5df('0x20')](_0xaacaa7,util[_0xd5df('0x24')]('%s.%s',_0x70f8b4,_0xd5df('0x23')));}fs[_0xd5df('0x25')](_0x1ade25,csv(_0x425048));}})[_0xd5df('0x13')](function(){if(_0x255768){zipdir(path[_0xd5df('0x20')](_0xaacaa7,_0x70f8b4),{'saveTo':path[_0xd5df('0x20')](_0xaacaa7,util[_0xd5df('0x24')]('%s.%s',_0x70f8b4,_0xd5df('0x26')))},function(_0x2eea47,_0x38f345){});rimraf(path[_0xd5df('0x20')](_0xaacaa7,_0x70f8b4),function(){});}})[_0xd5df('0x13')](function(){logger[_0xd5df('0x27')](util[_0xd5df('0x24')](_0xd5df('0x28'),EXTRACTED_REPORT_ID,'CSV'));return analyticExtractedReport(_0xd5df('0x29'),_0x255768?util[_0xd5df('0x24')]('%s.%s',_0x70f8b4,_0x255768?_0xd5df('0x26'):_0xd5df('0x23')):null);});})[_0xd5df('0x2a')](function(_0x4c3e20){logger['info'](util[_0xd5df('0x24')]('Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format',EXTRACTED_REPORT_ID,'CSV'),util[_0xd5df('0x2b')](_0x4c3e20,{'showHidden':![],'depth':null}));return analyticExtractedReport('Failed');});}main();
\ No newline at end of file
+var _0x4d92=['push','%s\x20limit\x20%d\x20OFFSET\x20%d','SELECT','QueryTypes','basename','.csv','mkdirSync','join','%s%d.%s','csv','%s.%s','zip','Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed','Completed','catch','Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','util','path','to-csv','bluebird','zip-dir','rimraf','../../mysqldb','../../config/logger','argv','savename','AnalyticExtractedReport','info','format','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','CSV','Setting','then','splitSizeCsv','sequelize','query','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','num','length','split'];(function(_0x43776a,_0x4eb74c){var _0x18eb8f=function(_0x319afb){while(--_0x319afb){_0x43776a['push'](_0x43776a['shift']());}};_0x18eb8f(++_0x4eb74c);}(_0x4d92,0x100));var _0x24d9=function(_0x54daf5,_0x528643){_0x54daf5=_0x54daf5-0x0;var _0xf70158=_0x4d92[_0x54daf5];return _0xf70158;};'use strict';var util=require(_0x24d9('0x0'));var path=require(_0x24d9('0x1'));var _=require('lodash');var csv=require(_0x24d9('0x2'));var fs=require('fs');var BPromise=require(_0x24d9('0x3'));var zipdir=require(_0x24d9('0x4'));var rimraf=require(_0x24d9('0x5'));var db=require('../../mysqldb')['db'];var dbH=require(_0x24d9('0x6'))['dbH'];var logger=require(_0x24d9('0x7'))('analytics');var EXTRACTED_REPORT_ID=Number(process[_0x24d9('0x8')][0x2]);var QUERY=process['argv'][0x3];var PATH=process['argv'][0x4];function analyticExtractedReport(_0xb08d1d,_0x5c9a6d){var _0x4c17e6={'status':_0xb08d1d};var _0x60e73c={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x5c9a6d){_0x4c17e6[_0x24d9('0x9')]=_0x5c9a6d;}return db[_0x24d9('0xa')]['update'](_0x4c17e6,_0x60e73c);}function main(){var _0xa29658=0x1388;var _0x3f2b86;logger[_0x24d9('0xb')](util[_0x24d9('0xc')](_0x24d9('0xd'),EXTRACTED_REPORT_ID,_0x24d9('0xe')));return db[_0x24d9('0xf')]['find']({'where':{'id':0x1},'raw':!![],'attributes':['id','split','splitSizeCsv']})[_0x24d9('0x10')](function(_0x1a886e){if(_0x1a886e){_0x3f2b86=_0x1a886e;_0xa29658=_0x3f2b86[_0x24d9('0x11')]||0x1388;}})[_0x24d9('0x10')](function(){return dbH[_0x24d9('0x12')][_0x24d9('0x13')](util[_0x24d9('0xc')](_0x24d9('0x14'),QUERY),{'type':dbH[_0x24d9('0x12')]['QueryTypes']['SELECT']});})[_0x24d9('0x10')](function(_0x452254){if(!_0x452254[0x0][_0x24d9('0x15')]){return analyticExtractedReport('Empty');}var _0x4f4dc1=[];var _0x50cf6b=0x0;var _0x15501e=!![];if(_0x452254&&_0x452254[_0x24d9('0x16')]){var _0x26912c=_0x452254[0x0][_0x24d9('0x15')]%(_0x50cf6b+_0xa29658);if(_0x3f2b86[_0x24d9('0x17')]){for(;_0x15501e;_0x50cf6b+=_0xa29658,_0x26912c=_0x452254[0x0][_0x24d9('0x15')]%(_0x50cf6b+_0xa29658)){if(_0x26912c==0x0||_0x26912c==_0x452254[0x0][_0x24d9('0x15')]){_0x15501e=![];}_0x4f4dc1[_0x24d9('0x18')](dbH[_0x24d9('0x12')][_0x24d9('0x13')](util[_0x24d9('0xc')](_0x24d9('0x19'),QUERY,_0xa29658,_0x50cf6b),{'type':dbH[_0x24d9('0x12')]['QueryTypes'][_0x24d9('0x1a')]}));}}else{_0x4f4dc1[_0x24d9('0x18')](dbH[_0x24d9('0x12')][_0x24d9('0x13')](QUERY,{'type':dbH[_0x24d9('0x12')][_0x24d9('0x1b')][_0x24d9('0x1a')]}));}}var _0x4a12b3=path['dirname'](PATH);var _0x3f8641=path[_0x24d9('0x1c')](PATH,_0x24d9('0x1d'));var _0x2b2283=_0x3f2b86[_0x24d9('0x17')]&&_0x4f4dc1['length']>0x1;var _0x51f8de=[];if(!fs['existsSync'](path['join'](_0x4a12b3,_0x3f8641))&&_0x2b2283){fs[_0x24d9('0x1e')](path[_0x24d9('0x1f')](_0x4a12b3,_0x3f8641));}return BPromise['each'](_0x4f4dc1,function(_0x3b5f70){_0x51f8de[_0x24d9('0x18')](_0x3b5f70);})[_0x24d9('0x10')](function(){for(var _0x41b413=0x0;_0x41b413<_0x51f8de['length'];_0x41b413+=0x1){var _0x33214b;var _0xd17dee=_0x51f8de[_0x41b413];if(_0x2b2283){_0x33214b=path[_0x24d9('0x1f')](_0x4a12b3,_0x3f8641,util['format'](_0x24d9('0x20'),_0x3f8641,_0x41b413,_0x24d9('0x21')));}else{_0x33214b=path['join'](_0x4a12b3,util[_0x24d9('0xc')](_0x24d9('0x22'),_0x3f8641,_0x24d9('0x21')));}fs['writeFileSync'](_0x33214b,csv(_0xd17dee));}})[_0x24d9('0x10')](function(){if(_0x2b2283){zipdir(path[_0x24d9('0x1f')](_0x4a12b3,_0x3f8641),{'saveTo':path[_0x24d9('0x1f')](_0x4a12b3,util[_0x24d9('0xc')](_0x24d9('0x22'),_0x3f8641,_0x24d9('0x23')))},function(_0x43dd83,_0x225823){});rimraf(path[_0x24d9('0x1f')](_0x4a12b3,_0x3f8641),function(){});}})[_0x24d9('0x10')](function(){logger[_0x24d9('0xb')](util['format'](_0x24d9('0x24'),EXTRACTED_REPORT_ID,_0x24d9('0xe')));return analyticExtractedReport(_0x24d9('0x25'),_0x2b2283?util['format'](_0x24d9('0x22'),_0x3f8641,_0x2b2283?_0x24d9('0x23'):_0x24d9('0x21')):null);});})[_0x24d9('0x26')](function(_0x2a8646){logger['info'](util[_0x24d9('0xc')](_0x24d9('0x27'),EXTRACTED_REPORT_ID,_0x24d9('0xe')),util['inspect'](_0x2a8646,{'showHidden':![],'depth':null}));return analyticExtractedReport('Failed');});}main();
\ No newline at end of file
index 22091fe..6cb59ab 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x28dc=['moment','pdfmake/src/printer','zip-dir','../../mysqldb','dbH','argv','MMMM\x20Do\x20YYYY,\x20h:mm:ss\x20a','savename','AnalyticExtractedReport','update','hasOwnProperty','tableHeader','Empty','dirname','basename','.pdf','Setting','find','split','splitSizePdf','then','num','push','query','format','%s\x20limit\x20%d\x20OFFSET\x20%d','sequelize','QueryTypes','SELECT','join','mkdirSync','each','Name:\x20%s\x0aReport:\x20%s\x0aFrom:\x20%s\x20To:\x20%s','name','startDate','endDate','black','body','length','toString','content','/fonts/Roboto-Medium.ttf','/fonts/Roboto-Italic.ttf','/fonts/Roboto-MediumItalic.ttf','createPdfKitDocument','%s%d.%s','pdf','%s.%s','pipe','createWriteStream','finish','error','err','end','zip','info','CSV','Completed','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','PDF','findOne','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','inspect','Failed','lodash','util','path'];(function(_0x268fe5,_0x38ac6c){var _0x1402d2=function(_0x241c76){while(--_0x241c76){_0x268fe5['push'](_0x268fe5['shift']());}};_0x1402d2(++_0x38ac6c);}(_0x28dc,0x85));var _0xc28d=function(_0x463697,_0xccfdc4){_0x463697=_0x463697-0x0;var _0x33cfe1=_0x28dc[_0x463697];return _0x33cfe1;};'use strict';var _=require(_0xc28d('0x0'));var fs=require('fs');var BPromise=require('bluebird');var util=require(_0xc28d('0x1'));var path=require(_0xc28d('0x2'));var moment=require(_0xc28d('0x3'));var PdfPrinter=require(_0xc28d('0x4'));var zipdir=require(_0xc28d('0x5'));var rimraf=require('rimraf');var db=require(_0xc28d('0x6'))['db'];var dbH=require(_0xc28d('0x6'))[_0xc28d('0x7')];var logger=require('../../config/logger')('analytics');var EXTRACTED_REPORT_ID=Number(process[_0xc28d('0x8')][0x2]);var QUERY=process['argv'][0x3];var PATH=process[_0xc28d('0x8')][0x4];var NAME=process[_0xc28d('0x8')][0x5];var FORMAT=_0xc28d('0x9');var _extractedReport;function analyticExtractedReport(_0x5de6d2,_0x2f8fd1){var _0x23917e={'status':_0x5de6d2};var _0x1e884c={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x2f8fd1){_0x23917e[_0xc28d('0xa')]=_0x2f8fd1;}return db[_0xc28d('0xb')][_0xc28d('0xc')](_0x23917e,_0x1e884c);}function getHeader(_0x13d61a){var _0x321c59=[];for(var _0x1920ad in _0x13d61a){if(_0x13d61a[_0xc28d('0xd')](_0x1920ad)){_0x321c59['push']({'text':_0x1920ad,'style':_0xc28d('0xe')});}}return _0x321c59;}function extractReport(_0x10b9be){var _0x4e99d3=0x1388;var _0x5bed21;if(!_0x10b9be[0x0]['num']){return analyticExtractedReport(_0xc28d('0xf'));}var _0xc6766c=[];var _0x49b440=0x0;var _0x32ac44=!![];var _0x23a5dd=path[_0xc28d('0x10')](PATH);var _0x30f6ac=path[_0xc28d('0x11')](PATH,_0xc28d('0x12'));var _0x36d9d0=![];var _0xee80cc=[];return db[_0xc28d('0x13')][_0xc28d('0x14')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0xc28d('0x15'),_0xc28d('0x16')]})['then'](function(_0x54eecf){if(_0x54eecf){_0x5bed21=_0x54eecf;_0x4e99d3=_0x5bed21[_0xc28d('0x16')]||0x3e8;}})[_0xc28d('0x17')](function(){if(_0x10b9be&&_0x10b9be['length']){var _0xaf4304=_0x10b9be[0x0][_0xc28d('0x18')]%(_0x49b440+_0x4e99d3);if(_0x5bed21[_0xc28d('0x15')]){for(;_0x32ac44;_0x49b440+=_0x4e99d3,_0xaf4304=_0x10b9be[0x0][_0xc28d('0x18')]%(_0x49b440+_0x4e99d3)){if(_0xaf4304==0x0||_0xaf4304==_0x10b9be[0x0][_0xc28d('0x18')]){_0x32ac44=![];}_0xc6766c[_0xc28d('0x19')](dbH['sequelize'][_0xc28d('0x1a')](util[_0xc28d('0x1b')](_0xc28d('0x1c'),QUERY,_0x4e99d3,_0x49b440),{'type':dbH[_0xc28d('0x1d')][_0xc28d('0x1e')][_0xc28d('0x1f')]}));}}else{_0xc6766c[_0xc28d('0x19')](dbH['sequelize'][_0xc28d('0x1a')](QUERY,{'type':dbH[_0xc28d('0x1d')][_0xc28d('0x1e')][_0xc28d('0x1f')]}));}}_0x36d9d0=_0x5bed21[_0xc28d('0x15')]&&_0xc6766c['length']>0x1;if(!fs['existsSync'](path[_0xc28d('0x20')](_0x23a5dd,_0x30f6ac))&&_0x36d9d0){fs[_0xc28d('0x21')](path['join'](_0x23a5dd,_0x30f6ac));}return BPromise[_0xc28d('0x22')](_0xc6766c,function(_0x4364e3){_0xee80cc['push'](_0x4364e3);});})[_0xc28d('0x17')](function(){return BPromise[_0xc28d('0x22')](_0xc6766c,function(_0x2a1e98,_0x553d64){var _0x3249d3;var _0x55d64a=util[_0xc28d('0x1b')](_0xc28d('0x23'),NAME,_extractedReport[_0xc28d('0x24')],moment(_extractedReport[_0xc28d('0x25')])['format'](FORMAT),moment(_extractedReport[_0xc28d('0x26')])['format'](FORMAT));var _0x39b6ac={'pageSize':'A4','pageOrientation':'landscape','content':[{'text':_0x55d64a,'style':'header'}],'styles':{'header':{'fontSize':0x12,'bold':!![],'margin':[0x0,0x0,0x0,0xa]},'tableHeader':{'bold':!![],'fontSize':0xd,'color':_0xc28d('0x27')}}};var _0x217e0b={'headerRows':0x1,'body':[]};_0x217e0b[_0xc28d('0x28')][_0xc28d('0x19')](getHeader(_0x2a1e98[0x0]));var _0x2d679e;for(var _0x3a29ac=0x0;_0x3a29ac<_0x2a1e98[_0xc28d('0x29')];_0x3a29ac+=0x1){_0x2d679e=[];for(var _0x51241a in _0x2a1e98[_0x3a29ac]){if(_0x2a1e98[_0x3a29ac][_0xc28d('0xd')](_0x51241a)){_0x2d679e['push'](_0x2a1e98[_0x3a29ac][_0x51241a]?_[_0xc28d('0x2a')](_0x2a1e98[_0x3a29ac][_0x51241a]):'');}}_0x217e0b[_0xc28d('0x28')][_0xc28d('0x19')](_0x2d679e);}_0x39b6ac[_0xc28d('0x2b')][_0xc28d('0x19')]({'table':_0x217e0b});return new BPromise(function(_0x2f2512,_0x3a5b89){var _0x5f5a3f=new PdfPrinter({'Roboto':{'normal':__dirname+'/fonts/Roboto-Regular.ttf','bold':__dirname+_0xc28d('0x2c'),'italics':__dirname+_0xc28d('0x2d'),'bolditalics':__dirname+_0xc28d('0x2e')}});var _0x5bd681=_0x5f5a3f[_0xc28d('0x2f')](_0x39b6ac);if(_0x36d9d0){_0x3249d3=path[_0xc28d('0x20')](_0x23a5dd,_0x30f6ac,util[_0xc28d('0x1b')](_0xc28d('0x30'),_0x30f6ac,_0x553d64,_0xc28d('0x31')));}else{_0x3249d3=path[_0xc28d('0x20')](_0x23a5dd,util[_0xc28d('0x1b')](_0xc28d('0x32'),_0x30f6ac,_0xc28d('0x31')));}var _0x59993f=_0x5bd681[_0xc28d('0x33')](fs[_0xc28d('0x34')](_0x3249d3));_0x59993f['on'](_0xc28d('0x35'),function(){_0x2f2512();});_0x59993f['on'](_0xc28d('0x36'),function(_0x5e8fd7){console['log'](_0xc28d('0x37'),_0x5e8fd7);_0x3a5b89(_0x5e8fd7);});_0x5bd681[_0xc28d('0x38')]();});});})[_0xc28d('0x17')](function(){if(_0x36d9d0){return new BPromise(function(_0x49e40c,_0x9a8e6b){zipdir(path[_0xc28d('0x20')](_0x23a5dd,_0x30f6ac),{'saveTo':path[_0xc28d('0x20')](_0x23a5dd,util[_0xc28d('0x1b')](_0xc28d('0x32'),_0x30f6ac,_0xc28d('0x39')))},function(_0x3eb405){if(_0x3eb405){_0x9a8e6b(_0x3eb405);}else{_0x49e40c();}});});}})[_0xc28d('0x17')](function(){if(_0x36d9d0){rimraf(path[_0xc28d('0x20')](_0x23a5dd,_0x30f6ac),function(){});}})[_0xc28d('0x17')](function(){logger[_0xc28d('0x3a')](util[_0xc28d('0x1b')]('Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed',EXTRACTED_REPORT_ID,_0xc28d('0x3b')));return analyticExtractedReport(_0xc28d('0x3c'),_0x36d9d0?util[_0xc28d('0x1b')](_0xc28d('0x32'),_0x30f6ac,_0x36d9d0?_0xc28d('0x39'):_0xc28d('0x31')):null);});}function main(){logger[_0xc28d('0x3a')](util['format'](_0xc28d('0x3d'),EXTRACTED_REPORT_ID,_0xc28d('0x3e')));return db['AnalyticExtractedReport'][_0xc28d('0x3f')]({'where':{'id':EXTRACTED_REPORT_ID}})[_0xc28d('0x17')](function(_0x132a1c){_extractedReport=_0x132a1c;return dbH[_0xc28d('0x1d')][_0xc28d('0x1a')](util[_0xc28d('0x1b')](_0xc28d('0x40'),QUERY),{'type':dbH[_0xc28d('0x1d')][_0xc28d('0x1e')]['SELECT']});})[_0xc28d('0x17')](extractReport)['catch'](function(_0x4d6227){logger['info'](util[_0xc28d('0x1b')](_0xc28d('0x41'),EXTRACTED_REPORT_ID,_0xc28d('0x3e')),util[_0xc28d('0x42')](_0x4d6227,{'showHidden':![],'depth':null}));return analyticExtractedReport(_0xc28d('0x43'));});}main();
\ No newline at end of file
+var _0xa90b=['format','%s\x20limit\x20%d\x20OFFSET\x20%d','QueryTypes','SELECT','existsSync','join','each','startDate','endDate','landscape','header','body','toString','content','/fonts/Roboto-Regular.ttf','/fonts/Roboto-Medium.ttf','/fonts/Roboto-Italic.ttf','createPdfKitDocument','pdf','pipe','finish','error','err','end','%s.%s','zip','info','CSV','Completed','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','PDF','findOne','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','catch','Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','inspect','Failed','bluebird','util','moment','pdfmake/src/printer','zip-dir','rimraf','../../mysqldb','../../config/logger','analytics','argv','MMMM\x20Do\x20YYYY,\x20h:mm:ss\x20a','savename','AnalyticExtractedReport','update','hasOwnProperty','push','tableHeader','num','Empty','dirname','Setting','find','split','splitSizePdf','then','length','sequelize','query'];(function(_0xf04d6c,_0x229b53){var _0x51fe69=function(_0x12fd1f){while(--_0x12fd1f){_0xf04d6c['push'](_0xf04d6c['shift']());}};_0x51fe69(++_0x229b53);}(_0xa90b,0x16a));var _0xba90=function(_0x3fe6df,_0x5a04d4){_0x3fe6df=_0x3fe6df-0x0;var _0x372a0e=_0xa90b[_0x3fe6df];return _0x372a0e;};'use strict';var _=require('lodash');var fs=require('fs');var BPromise=require(_0xba90('0x0'));var util=require(_0xba90('0x1'));var path=require('path');var moment=require(_0xba90('0x2'));var PdfPrinter=require(_0xba90('0x3'));var zipdir=require(_0xba90('0x4'));var rimraf=require(_0xba90('0x5'));var db=require(_0xba90('0x6'))['db'];var dbH=require('../../mysqldb')['dbH'];var logger=require(_0xba90('0x7'))(_0xba90('0x8'));var EXTRACTED_REPORT_ID=Number(process[_0xba90('0x9')][0x2]);var QUERY=process[_0xba90('0x9')][0x3];var PATH=process[_0xba90('0x9')][0x4];var NAME=process[_0xba90('0x9')][0x5];var FORMAT=_0xba90('0xa');var _extractedReport;function analyticExtractedReport(_0x1a23f1,_0x4ca570){var _0x213739={'status':_0x1a23f1};var _0x99e339={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x4ca570){_0x213739[_0xba90('0xb')]=_0x4ca570;}return db[_0xba90('0xc')][_0xba90('0xd')](_0x213739,_0x99e339);}function getHeader(_0x358c3c){var _0x118b6b=[];for(var _0x357bcb in _0x358c3c){if(_0x358c3c[_0xba90('0xe')](_0x357bcb)){_0x118b6b[_0xba90('0xf')]({'text':_0x357bcb,'style':_0xba90('0x10')});}}return _0x118b6b;}function extractReport(_0x2c5496){var _0x5d2011=0x1388;var _0x58e095;if(!_0x2c5496[0x0][_0xba90('0x11')]){return analyticExtractedReport(_0xba90('0x12'));}var _0x4a35ca=[];var _0x41c039=0x0;var _0x2f6217=!![];var _0x2e51cb=path[_0xba90('0x13')](PATH);var _0x1228b9=path['basename'](PATH,'.pdf');var _0x51e3b8=![];var _0x4d157a=[];return db[_0xba90('0x14')][_0xba90('0x15')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0xba90('0x16'),_0xba90('0x17')]})[_0xba90('0x18')](function(_0x55c79e){if(_0x55c79e){_0x58e095=_0x55c79e;_0x5d2011=_0x58e095[_0xba90('0x17')]||0x3e8;}})['then'](function(){if(_0x2c5496&&_0x2c5496[_0xba90('0x19')]){var _0x412dcc=_0x2c5496[0x0][_0xba90('0x11')]%(_0x41c039+_0x5d2011);if(_0x58e095['split']){for(;_0x2f6217;_0x41c039+=_0x5d2011,_0x412dcc=_0x2c5496[0x0][_0xba90('0x11')]%(_0x41c039+_0x5d2011)){if(_0x412dcc==0x0||_0x412dcc==_0x2c5496[0x0][_0xba90('0x11')]){_0x2f6217=![];}_0x4a35ca[_0xba90('0xf')](dbH[_0xba90('0x1a')][_0xba90('0x1b')](util[_0xba90('0x1c')](_0xba90('0x1d'),QUERY,_0x5d2011,_0x41c039),{'type':dbH[_0xba90('0x1a')][_0xba90('0x1e')][_0xba90('0x1f')]}));}}else{_0x4a35ca[_0xba90('0xf')](dbH['sequelize'][_0xba90('0x1b')](QUERY,{'type':dbH[_0xba90('0x1a')]['QueryTypes'][_0xba90('0x1f')]}));}}_0x51e3b8=_0x58e095['split']&&_0x4a35ca[_0xba90('0x19')]>0x1;if(!fs[_0xba90('0x20')](path[_0xba90('0x21')](_0x2e51cb,_0x1228b9))&&_0x51e3b8){fs['mkdirSync'](path[_0xba90('0x21')](_0x2e51cb,_0x1228b9));}return BPromise['each'](_0x4a35ca,function(_0x14d44c){_0x4d157a[_0xba90('0xf')](_0x14d44c);});})['then'](function(){return BPromise[_0xba90('0x22')](_0x4a35ca,function(_0x2d7cc8,_0x477e00){var _0x36dfde;var _0x309140=util['format']('Name:\x20%s\x0aReport:\x20%s\x0aFrom:\x20%s\x20To:\x20%s',NAME,_extractedReport['name'],moment(_extractedReport[_0xba90('0x23')])[_0xba90('0x1c')](FORMAT),moment(_extractedReport[_0xba90('0x24')])[_0xba90('0x1c')](FORMAT));var _0x245f3e={'pageSize':'A4','pageOrientation':_0xba90('0x25'),'content':[{'text':_0x309140,'style':_0xba90('0x26')}],'styles':{'header':{'fontSize':0x12,'bold':!![],'margin':[0x0,0x0,0x0,0xa]},'tableHeader':{'bold':!![],'fontSize':0xd,'color':'black'}}};var _0x340f55={'headerRows':0x1,'body':[]};_0x340f55[_0xba90('0x27')]['push'](getHeader(_0x2d7cc8[0x0]));var _0x4c03a5;for(var _0x8b9482=0x0;_0x8b9482<_0x2d7cc8[_0xba90('0x19')];_0x8b9482+=0x1){_0x4c03a5=[];for(var _0x359ebc in _0x2d7cc8[_0x8b9482]){if(_0x2d7cc8[_0x8b9482][_0xba90('0xe')](_0x359ebc)){_0x4c03a5[_0xba90('0xf')](_0x2d7cc8[_0x8b9482][_0x359ebc]?_[_0xba90('0x28')](_0x2d7cc8[_0x8b9482][_0x359ebc]):'');}}_0x340f55[_0xba90('0x27')][_0xba90('0xf')](_0x4c03a5);}_0x245f3e[_0xba90('0x29')]['push']({'table':_0x340f55});return new BPromise(function(_0x121645,_0x4843fc){var _0x45dda9=new PdfPrinter({'Roboto':{'normal':__dirname+_0xba90('0x2a'),'bold':__dirname+_0xba90('0x2b'),'italics':__dirname+_0xba90('0x2c'),'bolditalics':__dirname+'/fonts/Roboto-MediumItalic.ttf'}});var _0x2323a9=_0x45dda9[_0xba90('0x2d')](_0x245f3e);if(_0x51e3b8){_0x36dfde=path['join'](_0x2e51cb,_0x1228b9,util['format']('%s%d.%s',_0x1228b9,_0x477e00,_0xba90('0x2e')));}else{_0x36dfde=path[_0xba90('0x21')](_0x2e51cb,util[_0xba90('0x1c')]('%s.%s',_0x1228b9,_0xba90('0x2e')));}var _0x3dfa74=_0x2323a9[_0xba90('0x2f')](fs['createWriteStream'](_0x36dfde));_0x3dfa74['on'](_0xba90('0x30'),function(){_0x121645();});_0x3dfa74['on'](_0xba90('0x31'),function(_0x3e0a48){console['log'](_0xba90('0x32'),_0x3e0a48);_0x4843fc(_0x3e0a48);});_0x2323a9[_0xba90('0x33')]();});});})[_0xba90('0x18')](function(){if(_0x51e3b8){return new BPromise(function(_0x38c562,_0x549497){zipdir(path[_0xba90('0x21')](_0x2e51cb,_0x1228b9),{'saveTo':path[_0xba90('0x21')](_0x2e51cb,util['format'](_0xba90('0x34'),_0x1228b9,_0xba90('0x35')))},function(_0x36c0e3){if(_0x36c0e3){_0x549497(_0x36c0e3);}else{_0x38c562();}});});}})[_0xba90('0x18')](function(){if(_0x51e3b8){rimraf(path[_0xba90('0x21')](_0x2e51cb,_0x1228b9),function(){});}})['then'](function(){logger[_0xba90('0x36')](util['format']('Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed',EXTRACTED_REPORT_ID,_0xba90('0x37')));return analyticExtractedReport(_0xba90('0x38'),_0x51e3b8?util['format'](_0xba90('0x34'),_0x1228b9,_0x51e3b8?_0xba90('0x35'):'pdf'):null);});}function main(){logger['info'](util[_0xba90('0x1c')](_0xba90('0x39'),EXTRACTED_REPORT_ID,_0xba90('0x3a')));return db[_0xba90('0xc')][_0xba90('0x3b')]({'where':{'id':EXTRACTED_REPORT_ID}})[_0xba90('0x18')](function(_0x3a3d40){_extractedReport=_0x3a3d40;return dbH[_0xba90('0x1a')][_0xba90('0x1b')](util[_0xba90('0x1c')](_0xba90('0x3c'),QUERY),{'type':dbH['sequelize'][_0xba90('0x1e')][_0xba90('0x1f')]});})[_0xba90('0x18')](extractReport)[_0xba90('0x3d')](function(_0x5c46db){logger[_0xba90('0x36')](util[_0xba90('0x1c')](_0xba90('0x3e'),EXTRACTED_REPORT_ID,_0xba90('0x3a')),util[_0xba90('0x3f')](_0x5c46db,{'showHidden':![],'depth':null}));return analyticExtractedReport(_0xba90('0x40'));});}main();
\ No newline at end of file
index cb307a4..2f8698b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6d12=['length','push','%s\x20limit\x20%d\x20OFFSET\x20%d','dirname','basename','join','mkdirSync','%s%d.%s','writeFileSync','binary','%s.%s','zip','Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed','xlsx','catch','Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','inspect','util','path','lodash','json2xls','bluebird','zip-dir','rimraf','../../mysqldb','../../config/logger','analytics','argv','savename','AnalyticExtractedReport','update','info','format','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','XLSX','Setting','find','split','splitSizeXlsx','then','sequelize','query','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','QueryTypes','SELECT','num','Empty'];(function(_0xa98283,_0x530e51){var _0x35b9da=function(_0x46c493){while(--_0x46c493){_0xa98283['push'](_0xa98283['shift']());}};_0x35b9da(++_0x530e51);}(_0x6d12,0x9e));var _0x26d1=function(_0x5567cd,_0x35ca37){_0x5567cd=_0x5567cd-0x0;var _0x559621=_0x6d12[_0x5567cd];return _0x559621;};'use strict';var util=require(_0x26d1('0x0'));var path=require(_0x26d1('0x1'));var _=require(_0x26d1('0x2'));var fs=require('fs');var json2xls=require(_0x26d1('0x3'));var BPromise=require(_0x26d1('0x4'));var zipdir=require(_0x26d1('0x5'));var rimraf=require(_0x26d1('0x6'));var db=require('../../mysqldb')['db'];var dbH=require(_0x26d1('0x7'))['dbH'];var logger=require(_0x26d1('0x8'))(_0x26d1('0x9'));var EXTRACTED_REPORT_ID=Number(process['argv'][0x2]);var QUERY=process[_0x26d1('0xa')][0x3];var PATH=process[_0x26d1('0xa')][0x4];function analyticExtractedReport(_0x35c49e,_0x40abdb){var _0x5df607={'status':_0x35c49e};var _0x26f421={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x40abdb){_0x5df607[_0x26d1('0xb')]=_0x40abdb;}return db[_0x26d1('0xc')][_0x26d1('0xd')](_0x5df607,_0x26f421);}function main(){var _0x30661e=0x1388;var _0x1c6347;logger[_0x26d1('0xe')](util[_0x26d1('0xf')](_0x26d1('0x10'),EXTRACTED_REPORT_ID,_0x26d1('0x11')));return db[_0x26d1('0x12')][_0x26d1('0x13')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0x26d1('0x14'),_0x26d1('0x15')]})[_0x26d1('0x16')](function(_0x2612b2){if(_0x2612b2){_0x1c6347=_0x2612b2;_0x30661e=_0x1c6347['splitSizeXlsx']||0x1388;}})[_0x26d1('0x16')](function(){return dbH[_0x26d1('0x17')][_0x26d1('0x18')](util[_0x26d1('0xf')](_0x26d1('0x19'),QUERY),{'type':dbH[_0x26d1('0x17')][_0x26d1('0x1a')][_0x26d1('0x1b')]});})[_0x26d1('0x16')](function(_0x55ee5f){if(!_0x55ee5f[0x0][_0x26d1('0x1c')]){return analyticExtractedReport(_0x26d1('0x1d'));}var _0x394c84=[];var _0x38a437=0x0;var _0x2de23e=!![];if(_0x1c6347['split']){if(_0x55ee5f&&_0x55ee5f[_0x26d1('0x1e')]){var _0x21c6e8=_0x55ee5f[0x0][_0x26d1('0x1c')]%(_0x38a437+_0x30661e);for(;_0x2de23e;_0x38a437+=_0x30661e,_0x21c6e8=_0x55ee5f[0x0][_0x26d1('0x1c')]%(_0x38a437+_0x30661e)){if(_0x21c6e8==0x0||_0x21c6e8==_0x55ee5f[0x0]['num']){_0x2de23e=![];}_0x394c84[_0x26d1('0x1f')](dbH[_0x26d1('0x17')][_0x26d1('0x18')](util[_0x26d1('0xf')](_0x26d1('0x20'),QUERY,_0x30661e,_0x38a437),{'type':dbH[_0x26d1('0x17')][_0x26d1('0x1a')]['SELECT']}));}}}else{_0x394c84[_0x26d1('0x1f')](dbH[_0x26d1('0x17')][_0x26d1('0x18')](QUERY,{'type':dbH[_0x26d1('0x17')][_0x26d1('0x1a')][_0x26d1('0x1b')]}));}var _0xfe75dc=path[_0x26d1('0x21')](PATH);var _0x784223=path[_0x26d1('0x22')](PATH,'.xlsx');var _0x1c24ea=_0x1c6347[_0x26d1('0x14')]&&_0x394c84[_0x26d1('0x1e')]>0x1;var _0x44fd43=[];if(!fs['existsSync'](path[_0x26d1('0x23')](_0xfe75dc,_0x784223))&&_0x1c24ea){fs[_0x26d1('0x24')](path['join'](_0xfe75dc,_0x784223));}return BPromise['each'](_0x394c84,function(_0x2e2a36){_0x44fd43[_0x26d1('0x1f')](_0x2e2a36);})['then'](function(){for(var _0x30e47e=0x0;_0x30e47e<_0x44fd43[_0x26d1('0x1e')];_0x30e47e+=0x1){var _0x597b69;var _0x5c3c37=_0x44fd43[_0x30e47e];if(_0x1c24ea){_0x597b69=path[_0x26d1('0x23')](_0xfe75dc,_0x784223,util[_0x26d1('0xf')](_0x26d1('0x25'),_0x784223,_0x30e47e,'xlsx'));}else{_0x597b69=path[_0x26d1('0x23')](_0xfe75dc,util[_0x26d1('0xf')]('%s.%s',_0x784223,'xlsx'));}fs[_0x26d1('0x26')](_0x597b69,json2xls(_0x5c3c37),_0x26d1('0x27'));}})[_0x26d1('0x16')](function(){if(_0x1c24ea){zipdir(path[_0x26d1('0x23')](_0xfe75dc,_0x784223),{'saveTo':path['join'](_0xfe75dc,util[_0x26d1('0xf')](_0x26d1('0x28'),_0x784223,_0x26d1('0x29')))},function(_0x3fc2a0,_0x347caf){});rimraf(path[_0x26d1('0x23')](_0xfe75dc,_0x784223),function(){});}})[_0x26d1('0x16')](function(){logger[_0x26d1('0xe')](util[_0x26d1('0xf')](_0x26d1('0x2a'),EXTRACTED_REPORT_ID,'XLSX'));return analyticExtractedReport('Completed',_0x1c24ea?util[_0x26d1('0xf')](_0x26d1('0x28'),_0x784223,_0x1c24ea?_0x26d1('0x29'):_0x26d1('0x2b')):null);});})[_0x26d1('0x2c')](function(_0x2b72b1){logger[_0x26d1('0xe')](util['format'](_0x26d1('0x2d'),EXTRACTED_REPORT_ID,_0x26d1('0x11')),util[_0x26d1('0x2e')](_0x2b72b1,{'showHidden':![],'depth':null}));return analyticExtractedReport('Failed');});}main();
\ No newline at end of file
+var _0x06ec=['format','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','sequelize','QueryTypes','SELECT','num','Empty','length','push','%s\x20limit\x20%d\x20OFFSET\x20%d','dirname','basename','join','mkdirSync','each','xlsx','%s.%s','writeFileSync','binary','zip','info','Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed','Completed','catch','Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','inspect','util','path','lodash','json2xls','bluebird','rimraf','../../mysqldb','dbH','../../config/logger','analytics','argv','savename','AnalyticExtractedReport','update','XLSX','Setting','find','split','splitSizeXlsx','then','query'];(function(_0x89e0f5,_0x5652e6){var _0x119e69=function(_0x438a08){while(--_0x438a08){_0x89e0f5['push'](_0x89e0f5['shift']());}};_0x119e69(++_0x5652e6);}(_0x06ec,0x163));var _0xc06e=function(_0x5853fc,_0x3425ed){_0x5853fc=_0x5853fc-0x0;var _0x25d6b3=_0x06ec[_0x5853fc];return _0x25d6b3;};'use strict';var util=require(_0xc06e('0x0'));var path=require(_0xc06e('0x1'));var _=require(_0xc06e('0x2'));var fs=require('fs');var json2xls=require(_0xc06e('0x3'));var BPromise=require(_0xc06e('0x4'));var zipdir=require('zip-dir');var rimraf=require(_0xc06e('0x5'));var db=require(_0xc06e('0x6'))['db'];var dbH=require(_0xc06e('0x6'))[_0xc06e('0x7')];var logger=require(_0xc06e('0x8'))(_0xc06e('0x9'));var EXTRACTED_REPORT_ID=Number(process[_0xc06e('0xa')][0x2]);var QUERY=process['argv'][0x3];var PATH=process[_0xc06e('0xa')][0x4];function analyticExtractedReport(_0x4208bc,_0x460be5){var _0x5621cd={'status':_0x4208bc};var _0x531a0e={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x460be5){_0x5621cd[_0xc06e('0xb')]=_0x460be5;}return db[_0xc06e('0xc')][_0xc06e('0xd')](_0x5621cd,_0x531a0e);}function main(){var _0x5418e2=0x1388;var _0x9c4da0;logger['info'](util['format']('Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format',EXTRACTED_REPORT_ID,_0xc06e('0xe')));return db[_0xc06e('0xf')][_0xc06e('0x10')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0xc06e('0x11'),_0xc06e('0x12')]})[_0xc06e('0x13')](function(_0x35a389){if(_0x35a389){_0x9c4da0=_0x35a389;_0x5418e2=_0x9c4da0[_0xc06e('0x12')]||0x1388;}})['then'](function(){return dbH['sequelize'][_0xc06e('0x14')](util[_0xc06e('0x15')](_0xc06e('0x16'),QUERY),{'type':dbH[_0xc06e('0x17')][_0xc06e('0x18')][_0xc06e('0x19')]});})['then'](function(_0x3ab6dc){if(!_0x3ab6dc[0x0][_0xc06e('0x1a')]){return analyticExtractedReport(_0xc06e('0x1b'));}var _0x513782=[];var _0x3f201f=0x0;var _0x3ec942=!![];if(_0x9c4da0['split']){if(_0x3ab6dc&&_0x3ab6dc[_0xc06e('0x1c')]){var _0xde4b6a=_0x3ab6dc[0x0][_0xc06e('0x1a')]%(_0x3f201f+_0x5418e2);for(;_0x3ec942;_0x3f201f+=_0x5418e2,_0xde4b6a=_0x3ab6dc[0x0][_0xc06e('0x1a')]%(_0x3f201f+_0x5418e2)){if(_0xde4b6a==0x0||_0xde4b6a==_0x3ab6dc[0x0][_0xc06e('0x1a')]){_0x3ec942=![];}_0x513782[_0xc06e('0x1d')](dbH['sequelize'][_0xc06e('0x14')](util[_0xc06e('0x15')](_0xc06e('0x1e'),QUERY,_0x5418e2,_0x3f201f),{'type':dbH[_0xc06e('0x17')][_0xc06e('0x18')]['SELECT']}));}}}else{_0x513782[_0xc06e('0x1d')](dbH['sequelize'][_0xc06e('0x14')](QUERY,{'type':dbH[_0xc06e('0x17')]['QueryTypes'][_0xc06e('0x19')]}));}var _0x2920b0=path[_0xc06e('0x1f')](PATH);var _0x36ef6b=path[_0xc06e('0x20')](PATH,'.xlsx');var _0x4dfc9e=_0x9c4da0[_0xc06e('0x11')]&&_0x513782[_0xc06e('0x1c')]>0x1;var _0xa622e7=[];if(!fs['existsSync'](path[_0xc06e('0x21')](_0x2920b0,_0x36ef6b))&&_0x4dfc9e){fs[_0xc06e('0x22')](path[_0xc06e('0x21')](_0x2920b0,_0x36ef6b));}return BPromise[_0xc06e('0x23')](_0x513782,function(_0x398383){_0xa622e7[_0xc06e('0x1d')](_0x398383);})[_0xc06e('0x13')](function(){for(var _0x42000a=0x0;_0x42000a<_0xa622e7[_0xc06e('0x1c')];_0x42000a+=0x1){var _0x57a0bb;var _0x1b5970=_0xa622e7[_0x42000a];if(_0x4dfc9e){_0x57a0bb=path['join'](_0x2920b0,_0x36ef6b,util[_0xc06e('0x15')]('%s%d.%s',_0x36ef6b,_0x42000a,_0xc06e('0x24')));}else{_0x57a0bb=path[_0xc06e('0x21')](_0x2920b0,util[_0xc06e('0x15')](_0xc06e('0x25'),_0x36ef6b,'xlsx'));}fs[_0xc06e('0x26')](_0x57a0bb,json2xls(_0x1b5970),_0xc06e('0x27'));}})[_0xc06e('0x13')](function(){if(_0x4dfc9e){zipdir(path['join'](_0x2920b0,_0x36ef6b),{'saveTo':path[_0xc06e('0x21')](_0x2920b0,util[_0xc06e('0x15')]('%s.%s',_0x36ef6b,_0xc06e('0x28')))},function(_0x52f24e,_0x562b1b){});rimraf(path[_0xc06e('0x21')](_0x2920b0,_0x36ef6b),function(){});}})['then'](function(){logger[_0xc06e('0x29')](util['format'](_0xc06e('0x2a'),EXTRACTED_REPORT_ID,_0xc06e('0xe')));return analyticExtractedReport(_0xc06e('0x2b'),_0x4dfc9e?util[_0xc06e('0x15')]('%s.%s',_0x36ef6b,_0x4dfc9e?_0xc06e('0x28'):'xlsx'):null);});})[_0xc06e('0x2c')](function(_0x5a319b){logger[_0xc06e('0x29')](util[_0xc06e('0x15')](_0xc06e('0x2d'),EXTRACTED_REPORT_ID,_0xc06e('0xe')),util[_0xc06e('0x2e')](_0x5a319b,{'showHidden':![],'depth':null}));return analyticExtractedReport('Failed');});}main();
\ No newline at end of file
index 265f58c..6df0f11 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc01c=['CAST(priority\x20AS\x20UNSIGNED)','filter','groupBy','exten','playback','hasOwnProperty','priority','extensions','find','push','type','Set','format','CDR(type)=%s','context','VoiceExtensionId','outbound','CDR(destination)=','extension','cutdigits','${EXTEN:','${EXTEN}','CDR(routeid)=','ExecIf','$[${LEN(${CDR(prefix)})}\x20>\x200]?Goto(','CDR(prefix)=${EXTEN:0:','CDR(prefix)=noprefix','recordingFormat','_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','_XCALLY_MIXMONITOR_FORMAT=','wav','XCALLY-MOTION-PROGRESS=0','length','createdAt','interval','map','CDR(tag)=','tag','callerID','$[${LEN(${PREFIX-CALLERIDALL})}\x20>\x200]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):NoOp(No\x20number\x20available)','answer','indexOf','app','appType','$[${XCALLY-MOTION-ANSWER}=0]?Answer','XCALLY-MOTION-ANSWER=1','$[${XCALLY-MOTION-PROGRESS}=0]?Progress','XCALLY-MOTION-PROGRESS=1','splice','GotoIfTime',',${EXTEN},','last','concat','Hangup','transaction','destroy','sortBy','catch','util','models','findAll','then','intervals','VoiceExtension','IntervalId','uniq'];(function(_0x5418ad,_0x40742f){var _0x2cae56=function(_0x36d317){while(--_0x36d317){_0x5418ad['push'](_0x5418ad['shift']());}};_0x2cae56(++_0x40742f);}(_0xc01c,0x1c6));var _0xcc01=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xc01c[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require(_0xcc01('0x0'));function rewrite(_0x4bff19,_0x19b4be){var _0x505261=this;return _0x4bff19[_0xcc01('0x1')]['Interval'][_0xcc01('0x2')]({'raw':!![]})[_0xcc01('0x3')](function(_0x4437e6){_0x505261[_0xcc01('0x4')]=_0x4437e6;return _0x4bff19[_0xcc01('0x1')][_0xcc01('0x5')][_0xcc01('0x2')]({'where':{'IntervalId':_0x19b4be[_0xcc01('0x6')]},'raw':!![]});})['then'](function(_0x352168){return _0x4bff19[_0xcc01('0x1')][_0xcc01('0x5')]['findAll']({'where':{'exten':{'$in':_[_0xcc01('0x7')](_['map'](_0x352168,'exten'))}},'order':[{'raw':_0xcc01('0x8')}],'raw':!![]});})[_0xcc01('0x3')](function(_0x31d8e6){var _0x39df15=_['filter'](_0x31d8e6,{'priority':'1'});var _0x572f6d=_[_0xcc01('0x9')](_0x31d8e6,{'isApp':0x1});var _0x4fa9bf=_[_0xcc01('0xa')](_0x572f6d,_0xcc01('0xb'));var _0x30b7c0=['queue',_0xcc01('0xc')];var _0x167435=[];var _0x611aea=[];for(var _0x260343 in _0x4fa9bf){if(_0x4fa9bf[_0xcc01('0xd')](_0x260343)){_0x505261[_0xcc01('0xe')]=0x2;_0x505261[_0xcc01('0xf')]=[];_0x505261['extension']=_[_0xcc01('0x10')](_0x39df15,{'exten':_0x4fa9bf[_0x260343][0x0][_0xcc01('0xb')]});_0x505261['extensions'][_0xcc01('0x11')]({'type':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x12')],'app':_0xcc01('0x13'),'appdata':util[_0xcc01('0x14')](_0xcc01('0x15'),_0x4fa9bf[_0x260343][0x0][_0xcc01('0x12')]),'context':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x16')],'exten':_0x4fa9bf[_0x260343][0x0][_0xcc01('0xb')],'priority':_0x505261[_0xcc01('0xe')]++,'VoiceExtensionId':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x17')]});if(_0x4fa9bf[_0x260343][0x0][_0xcc01('0x12')]===_0xcc01('0x18')){if(_0x505261['extension']){_0x505261[_0xcc01('0xf')][_0xcc01('0x11')]({'type':_0x4fa9bf[_0x260343][0x0]['type'],'app':_0xcc01('0x13'),'appdata':_0xcc01('0x19')+(_0x505261[_0xcc01('0x1a')][_0xcc01('0x1b')]?_0xcc01('0x1c')+_0x505261['extension']['cutdigits']+'}':_0xcc01('0x1d')),'context':_0x4fa9bf[_0x260343][0x0]['context'],'exten':_0x4fa9bf[_0x260343][0x0][_0xcc01('0xb')],'priority':_0x505261[_0xcc01('0xe')]++,'VoiceExtensionId':_0x4fa9bf[_0x260343][0x0]['VoiceExtensionId']});}_0x505261[_0xcc01('0xf')][_0xcc01('0x11')]({'type':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x12')],'app':_0xcc01('0x13'),'appdata':_0xcc01('0x1e')+_0x4fa9bf[_0x260343][0x0][_0xcc01('0x17')],'context':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x16')],'exten':_0x4fa9bf[_0x260343][0x0][_0xcc01('0xb')],'priority':_0x505261[_0xcc01('0xe')]++,'VoiceExtensionId':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x17')]});var _0x513e89=_0x505261[_0xcc01('0xe')]++;_0x505261[_0xcc01('0xf')][_0xcc01('0x11')]({'type':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x12')],'app':_0xcc01('0x1f'),'appdata':_0xcc01('0x20')+(_0x513e89+0x2)+'):Goto('+(_0x513e89+0x1)+')','context':_0x4fa9bf[_0x260343][0x0]['context'],'exten':_0x4fa9bf[_0x260343][0x0][_0xcc01('0xb')],'priority':_0x513e89,'VoiceExtensionId':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x17')]});if(_0x505261[_0xcc01('0x1a')]){_0x505261['extensions'][_0xcc01('0x11')]({'type':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x12')],'app':'Set','appdata':_0x505261[_0xcc01('0x1a')]['cutdigits']?_0xcc01('0x21')+_0x505261['extension'][_0xcc01('0x1b')]+'}':_0xcc01('0x22'),'context':_0x4fa9bf[_0x260343][0x0]['context'],'exten':_0x4fa9bf[_0x260343][0x0][_0xcc01('0xb')],'priority':_0x505261[_0xcc01('0xe')]++,'VoiceExtensionId':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x17')]});}_0x505261['extensions'][_0xcc01('0x11')]({'type':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x12')],'app':_0xcc01('0x13'),'appdata':'outboundrouteid='+_0x4fa9bf[_0x260343][0x0][_0xcc01('0x17')],'context':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x16')],'exten':_0x4fa9bf[_0x260343][0x0][_0xcc01('0xb')],'priority':_0x505261[_0xcc01('0xe')]++,'VoiceExtensionId':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x17')]});if(_0x505261[_0xcc01('0x1a')]&&_0x505261['extension'][_0xcc01('0xd')]('recordingFormat')&&_0x505261[_0xcc01('0x1a')][_0xcc01('0x23')]!=='none'){_0x505261[_0xcc01('0xf')][_0xcc01('0x11')]({'type':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x12')],'app':_0xcc01('0x13'),'appdata':_0xcc01('0x24'),'context':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x16')],'exten':_0x4fa9bf[_0x260343][0x0][_0xcc01('0xb')],'priority':_0x505261['priority']++,'VoiceExtensionId':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x17')]});_0x505261[_0xcc01('0xf')][_0xcc01('0x11')]({'type':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x12')],'app':'Set','appdata':_0xcc01('0x25')+_0x505261[_0xcc01('0x1a')][_0xcc01('0x23')]||_0xcc01('0x26'),'context':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x16')],'exten':_0x4fa9bf[_0x260343][0x0][_0xcc01('0xb')],'priority':_0x505261['priority']++,'VoiceExtensionId':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x17')]});}}_0x505261[_0xcc01('0xf')][_0xcc01('0x11')]({'type':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x12')],'app':'Set','appdata':'XCALLY-MOTION-ANSWER=0','context':_0x4fa9bf[_0x260343][0x0]['context'],'exten':_0x4fa9bf[_0x260343][0x0][_0xcc01('0xb')],'priority':_0x505261[_0xcc01('0xe')]++,'VoiceExtensionId':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x17')]});_0x505261[_0xcc01('0xf')][_0xcc01('0x11')]({'type':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x12')],'app':'Set','appdata':_0xcc01('0x27'),'context':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x16')],'exten':_0x4fa9bf[_0x260343][0x0][_0xcc01('0xb')],'priority':_0x505261['priority']++,'VoiceExtensionId':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x17')]});_0x505261[_0xcc01('0xf')]['push']({'type':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x12')],'app':'Set','appdata':'MONITOR_OPTIONS=ab','context':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x16')],'exten':_0x4fa9bf[_0x260343][0x0]['exten'],'priority':_0x505261[_0xcc01('0xe')]++,'VoiceExtensionId':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x17')]});for(var _0x5ca56f=0x0,_0x237790=0x0;_0x5ca56f<_0x4fa9bf[_0x260343][_0xcc01('0x28')];_0x5ca56f+=0x1,_0x237790=0x0){var _0x5421c0=_0x4fa9bf[_0x260343][_0x5ca56f];if(_0x5421c0[_0xcc01('0x12')]){_0x5421c0[_0xcc01('0x12')]=_0x5421c0[_0xcc01('0x12')]['toLowerCase']();}var _0x44a01c=[];var _0x3090db=[];delete _0x5421c0['id'];delete _0x5421c0[_0xcc01('0x29')];delete _0x5421c0['updatedAt'];var _0x3517f0=_0x5421c0[_0xcc01('0x2a')]!=='*,*,*,*'?[_0x5421c0[_0xcc01('0x2a')]]:_0x5421c0['IntervalId']?_[_0xcc01('0x2b')](_[_0xcc01('0x9')](_0x505261['intervals'],{'IntervalId':_0x5421c0[_0xcc01('0x6')]}),_0xcc01('0x2a')):[];if(_0x5421c0[_0xcc01('0xd')]('tag')){if(_0x5421c0['tag']&&_0x5421c0['tag']!=='--'){_0x44a01c[_0xcc01('0x11')]({'type':_0x5421c0[_0xcc01('0x12')],'app':_0xcc01('0x13'),'appdata':_0xcc01('0x2c')+_0x5421c0[_0xcc01('0x2d')],'context':_0x5421c0[_0xcc01('0x16')],'exten':_0x5421c0[_0xcc01('0xb')],'priority':_0x3517f0[_0xcc01('0x28')]+_0x505261[_0xcc01('0xe')]+_0x237790++,'VoiceExtensionId':_0x5421c0[_0xcc01('0x17')]});}}if(_0x5421c0['type']===_0xcc01('0x18')&&_0x5421c0[_0xcc01('0xd')](_0xcc01('0x2e'))){if(_0x5421c0[_0xcc01('0x2e')]){_0x44a01c['push']({'type':_0x5421c0[_0xcc01('0x12')],'app':_0xcc01('0x1f'),'appdata':'$[${LEN(${PREFIX-CALLERIDALL})}\x20>\x200]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)='+_0x5421c0[_0xcc01('0x2e')]+')','context':_0x5421c0[_0xcc01('0x16')],'exten':_0x5421c0[_0xcc01('0xb')],'priority':_0x3517f0[_0xcc01('0x28')]+_0x505261[_0xcc01('0xe')]+_0x237790++,'VoiceExtensionId':_0x5421c0['VoiceExtensionId']});}else{_0x44a01c[_0xcc01('0x11')]({'type':_0x5421c0[_0xcc01('0x12')],'app':'ExecIf','appdata':_0xcc01('0x2f'),'context':_0x5421c0['context'],'exten':_0x5421c0[_0xcc01('0xb')],'priority':_0x3517f0[_0xcc01('0x28')]+_0x505261[_0xcc01('0xe')]+_0x237790++,'VoiceExtensionId':_0x5421c0['VoiceExtensionId']});}}if(_0x5421c0[_0xcc01('0xd')](_0xcc01('0x30'))){if(_0x30b7c0[_0xcc01('0x31')](_0x5421c0[_0xcc01('0x32')]['toLowerCase']())>=0x0&&_0x5421c0[_0xcc01('0x33')]!=='custom'){if(_0x5421c0[_0xcc01('0x30')]){_0x44a01c[_0xcc01('0x11')]({'type':_0x5421c0[_0xcc01('0x12')],'app':_0xcc01('0x1f'),'appdata':_0xcc01('0x34'),'context':_0x5421c0[_0xcc01('0x16')],'exten':_0x5421c0[_0xcc01('0xb')],'priority':_0x3517f0['length']+_0x505261[_0xcc01('0xe')]+_0x237790++,'VoiceExtensionId':_0x5421c0[_0xcc01('0x17')]});_0x44a01c[_0xcc01('0x11')]({'type':_0x5421c0[_0xcc01('0x12')],'app':'Set','appdata':_0xcc01('0x35'),'context':_0x5421c0[_0xcc01('0x16')],'exten':_0x5421c0[_0xcc01('0xb')],'priority':_0x3517f0[_0xcc01('0x28')]+_0x505261[_0xcc01('0xe')]+_0x237790++,'VoiceExtensionId':_0x5421c0[_0xcc01('0x17')]});}else{_0x44a01c[_0xcc01('0x11')]({'type':_0x5421c0['type'],'app':_0xcc01('0x1f'),'appdata':_0xcc01('0x36'),'context':_0x5421c0[_0xcc01('0x16')],'exten':_0x5421c0['exten'],'priority':_0x3517f0[_0xcc01('0x28')]+_0x505261[_0xcc01('0xe')]+_0x237790++,'VoiceExtensionId':_0x5421c0[_0xcc01('0x17')]});_0x44a01c['push']({'type':_0x5421c0[_0xcc01('0x12')],'app':_0xcc01('0x13'),'appdata':_0xcc01('0x37'),'context':_0x5421c0[_0xcc01('0x16')],'exten':_0x5421c0['exten'],'priority':_0x3517f0['length']+_0x505261['priority']+_0x237790++,'VoiceExtensionId':_0x5421c0[_0xcc01('0x17')]});}}}for(var _0xa86c91=0x0;_0xa86c91<_0x3517f0[_0xcc01('0x28')];_0xa86c91+=0x1){var _0x5e654f=_0x505261[_0xcc01('0xe')]+_0x3517f0[_0xcc01('0x28')];var _0x397dbd=_0xa86c91===_0x3517f0[_0xcc01('0x28')]-0x1?_0x505261[_0xcc01('0xe')]+_0x44a01c[_0xcc01('0x28')]+_0x3090db[_0xcc01('0x28')]+0x2:_0x505261[_0xcc01('0xe')]+_0xa86c91+0x1;_0x44a01c[_0xcc01('0x38')](_0xa86c91,0x0,{'type':_0x5421c0[_0xcc01('0x12')],'app':_0xcc01('0x39'),'appdata':_0x3517f0[_0xa86c91]+'?'+_0x5421c0[_0xcc01('0x16')]+_0xcc01('0x3a')+_0x5e654f+':'+_0x5421c0[_0xcc01('0x16')]+_0xcc01('0x3a')+_0x397dbd,'exten':_0x5421c0['exten'],'context':_0x5421c0[_0xcc01('0x16')],'priority':_0x505261[_0xcc01('0xe')]+_0xa86c91,'VoiceExtensionId':_0x4fa9bf[_0x260343][0x0]['VoiceExtensionId']});}_0x5421c0[_0xcc01('0xe')]=_0x44a01c[_0xcc01('0x28')]?_[_0xcc01('0x3b')](_0x44a01c)[_0xcc01('0xe')]+0x1:_0x505261['priority'];_0x505261[_0xcc01('0xe')]=(_0x3090db[_0xcc01('0x28')]?_['last'](_0x3090db)[_0xcc01('0xe')]:_0x5421c0[_0xcc01('0xe')])+0x1;_0x505261['extensions']=_[_0xcc01('0x3c')](_0x505261[_0xcc01('0xf')],_0x44a01c,[_0x5421c0],_0x3090db);}_0x505261[_0xcc01('0xf')][_0xcc01('0x11')]({'type':_0x4fa9bf[_0x260343][0x0][_0xcc01('0x12')],'app':_0xcc01('0x3d'),'exten':_0x4fa9bf[_0x260343][0x0][_0xcc01('0xb')],'context':_0x4fa9bf[_0x260343][0x0]['context'],'priority':_0x505261['priority'],'VoiceExtensionId':_0x4fa9bf[_0x260343][0x0]['VoiceExtensionId']});_0x167435[_0xcc01('0x11')](_0x4fa9bf[_0x260343][0x0]['VoiceExtensionId']);_0x611aea=_[_0xcc01('0x3c')](_0x611aea,_0x505261[_0xcc01('0xf')]);}}return _0x4bff19[_0xcc01('0x3e')](function(_0xc9d7a0){return _0x4bff19['models'][_0xcc01('0x5')][_0xcc01('0x3f')]({'where':{'VoiceExtensionId':{'$in':_0x167435}},'transaction':_0xc9d7a0})[_0xcc01('0x3')](function(_0x36473e){return _0x4bff19[_0xcc01('0x1')]['VoiceExtension']['bulkCreate'](_[_0xcc01('0x40')](_0x611aea,'priority'),{'transaction':_0xc9d7a0});});});})[_0xcc01('0x41')](function(_0x5a171a){console['error'](_0x5a171a);});}exports['rewrite']=rewrite;
\ No newline at end of file
+var _0xbb0a=['map','tag','callerID','$[${LEN(${PREFIX-CALLERIDALL})}\x20>\x200]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)=','ExecIf','$[${LEN(${PREFIX-CALLERIDALL})}\x20>\x200]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):NoOp(No\x20number\x20available)','indexOf','app','toLowerCase','appType','custom','answer','$[${XCALLY-MOTION-ANSWER}=0]?Answer','XCALLY-MOTION-ANSWER=1','XCALLY-MOTION-PROGRESS=1','splice','GotoIfTime',',${EXTEN},','last','concat','Hangup','transaction','destroy','bulkCreate','sortBy','catch','error','rewrite','lodash','util','findAll','intervals','models','VoiceExtension','IntervalId','then','uniq','exten','CAST(priority\x20AS\x20UNSIGNED)','filter','groupBy','queue','playback','hasOwnProperty','priority','extension','find','push','type','CDR(type)=%s','context','VoiceExtensionId','outbound','extensions','Set','cutdigits','${EXTEN:','${EXTEN}','CDR(routeid)=','$[${LEN(${CDR(prefix)})}\x20>\x200]?Goto(','CDR(prefix)=${EXTEN:0:','CDR(prefix)=noprefix','recordingFormat','none','_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','XCALLY-MOTION-ANSWER=0','XCALLY-MOTION-PROGRESS=0','MONITOR_OPTIONS=ab','length','createdAt','interval','*,*,*,*'];(function(_0x1a20f7,_0x3a24f8){var _0x387341=function(_0x5ca0e7){while(--_0x5ca0e7){_0x1a20f7['push'](_0x1a20f7['shift']());}};_0x387341(++_0x3a24f8);}(_0xbb0a,0x64));var _0xabb0=function(_0x5d286e,_0x3b6236){_0x5d286e=_0x5d286e-0x0;var _0xc1e19e=_0xbb0a[_0x5d286e];return _0xc1e19e;};'use strict';var _=require(_0xabb0('0x0'));var util=require(_0xabb0('0x1'));function rewrite(_0x4728e2,_0x7e61fe){var _0x57f702=this;return _0x4728e2['models']['Interval'][_0xabb0('0x2')]({'raw':!![]})['then'](function(_0x26fc77){_0x57f702[_0xabb0('0x3')]=_0x26fc77;return _0x4728e2[_0xabb0('0x4')][_0xabb0('0x5')][_0xabb0('0x2')]({'where':{'IntervalId':_0x7e61fe[_0xabb0('0x6')]},'raw':!![]});})[_0xabb0('0x7')](function(_0x10ef5a){return _0x4728e2[_0xabb0('0x4')][_0xabb0('0x5')][_0xabb0('0x2')]({'where':{'exten':{'$in':_[_0xabb0('0x8')](_['map'](_0x10ef5a,_0xabb0('0x9')))}},'order':[{'raw':_0xabb0('0xa')}],'raw':!![]});})[_0xabb0('0x7')](function(_0x1e8de0){var _0xb11994=_['filter'](_0x1e8de0,{'priority':'1'});var _0x2a5d9d=_[_0xabb0('0xb')](_0x1e8de0,{'isApp':0x1});var _0x15cb86=_[_0xabb0('0xc')](_0x2a5d9d,'exten');var _0x458606=[_0xabb0('0xd'),_0xabb0('0xe')];var _0x3e8b5c=[];var _0x55f083=[];for(var _0xad1c1f in _0x15cb86){if(_0x15cb86[_0xabb0('0xf')](_0xad1c1f)){_0x57f702[_0xabb0('0x10')]=0x2;_0x57f702['extensions']=[];_0x57f702[_0xabb0('0x11')]=_[_0xabb0('0x12')](_0xb11994,{'exten':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x9')]});_0x57f702['extensions'][_0xabb0('0x13')]({'type':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x14')],'app':'Set','appdata':util['format'](_0xabb0('0x15'),_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x14')]),'context':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x16')],'exten':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x9')],'priority':_0x57f702[_0xabb0('0x10')]++,'VoiceExtensionId':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x17')]});if(_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x14')]===_0xabb0('0x18')){if(_0x57f702['extension']){_0x57f702[_0xabb0('0x19')][_0xabb0('0x13')]({'type':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x14')],'app':_0xabb0('0x1a'),'appdata':'CDR(destination)='+(_0x57f702[_0xabb0('0x11')][_0xabb0('0x1b')]?_0xabb0('0x1c')+_0x57f702[_0xabb0('0x11')][_0xabb0('0x1b')]+'}':_0xabb0('0x1d')),'context':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x16')],'exten':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x9')],'priority':_0x57f702[_0xabb0('0x10')]++,'VoiceExtensionId':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x17')]});}_0x57f702[_0xabb0('0x19')][_0xabb0('0x13')]({'type':_0x15cb86[_0xad1c1f][0x0]['type'],'app':_0xabb0('0x1a'),'appdata':_0xabb0('0x1e')+_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x17')],'context':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x16')],'exten':_0x15cb86[_0xad1c1f][0x0]['exten'],'priority':_0x57f702[_0xabb0('0x10')]++,'VoiceExtensionId':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x17')]});var _0x57d2da=_0x57f702['priority']++;_0x57f702['extensions'][_0xabb0('0x13')]({'type':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x14')],'app':'ExecIf','appdata':_0xabb0('0x1f')+(_0x57d2da+0x2)+'):Goto('+(_0x57d2da+0x1)+')','context':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x16')],'exten':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x9')],'priority':_0x57d2da,'VoiceExtensionId':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x17')]});if(_0x57f702[_0xabb0('0x11')]){_0x57f702[_0xabb0('0x19')][_0xabb0('0x13')]({'type':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x14')],'app':_0xabb0('0x1a'),'appdata':_0x57f702['extension'][_0xabb0('0x1b')]?_0xabb0('0x20')+_0x57f702[_0xabb0('0x11')][_0xabb0('0x1b')]+'}':_0xabb0('0x21'),'context':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x16')],'exten':_0x15cb86[_0xad1c1f][0x0]['exten'],'priority':_0x57f702[_0xabb0('0x10')]++,'VoiceExtensionId':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x17')]});}_0x57f702['extensions'][_0xabb0('0x13')]({'type':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x14')],'app':_0xabb0('0x1a'),'appdata':'outboundrouteid='+_0x15cb86[_0xad1c1f][0x0]['VoiceExtensionId'],'context':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x16')],'exten':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x9')],'priority':_0x57f702[_0xabb0('0x10')]++,'VoiceExtensionId':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x17')]});if(_0x57f702['extension']&&_0x57f702[_0xabb0('0x11')][_0xabb0('0xf')](_0xabb0('0x22'))&&_0x57f702[_0xabb0('0x11')][_0xabb0('0x22')]!==_0xabb0('0x23')){_0x57f702[_0xabb0('0x19')]['push']({'type':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x14')],'app':'Set','appdata':_0xabb0('0x24'),'context':_0x15cb86[_0xad1c1f][0x0]['context'],'exten':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x9')],'priority':_0x57f702['priority']++,'VoiceExtensionId':_0x15cb86[_0xad1c1f][0x0]['VoiceExtensionId']});_0x57f702[_0xabb0('0x19')][_0xabb0('0x13')]({'type':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x14')],'app':_0xabb0('0x1a'),'appdata':'_XCALLY_MIXMONITOR_FORMAT='+_0x57f702[_0xabb0('0x11')][_0xabb0('0x22')]||'wav','context':_0x15cb86[_0xad1c1f][0x0]['context'],'exten':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x9')],'priority':_0x57f702[_0xabb0('0x10')]++,'VoiceExtensionId':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x17')]});}}_0x57f702[_0xabb0('0x19')][_0xabb0('0x13')]({'type':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x14')],'app':'Set','appdata':_0xabb0('0x25'),'context':_0x15cb86[_0xad1c1f][0x0]['context'],'exten':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x9')],'priority':_0x57f702[_0xabb0('0x10')]++,'VoiceExtensionId':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x17')]});_0x57f702['extensions']['push']({'type':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x14')],'app':_0xabb0('0x1a'),'appdata':_0xabb0('0x26'),'context':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x16')],'exten':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x9')],'priority':_0x57f702[_0xabb0('0x10')]++,'VoiceExtensionId':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x17')]});_0x57f702[_0xabb0('0x19')][_0xabb0('0x13')]({'type':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x14')],'app':_0xabb0('0x1a'),'appdata':_0xabb0('0x27'),'context':_0x15cb86[_0xad1c1f][0x0]['context'],'exten':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x9')],'priority':_0x57f702['priority']++,'VoiceExtensionId':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x17')]});for(var _0x30e38a=0x0,_0x8b5e67=0x0;_0x30e38a<_0x15cb86[_0xad1c1f][_0xabb0('0x28')];_0x30e38a+=0x1,_0x8b5e67=0x0){var _0x2101a0=_0x15cb86[_0xad1c1f][_0x30e38a];if(_0x2101a0[_0xabb0('0x14')]){_0x2101a0[_0xabb0('0x14')]=_0x2101a0[_0xabb0('0x14')]['toLowerCase']();}var _0x2e4ec3=[];var _0x529ba1=[];delete _0x2101a0['id'];delete _0x2101a0[_0xabb0('0x29')];delete _0x2101a0['updatedAt'];var _0x5cb3f3=_0x2101a0[_0xabb0('0x2a')]!==_0xabb0('0x2b')?[_0x2101a0[_0xabb0('0x2a')]]:_0x2101a0[_0xabb0('0x6')]?_[_0xabb0('0x2c')](_[_0xabb0('0xb')](_0x57f702[_0xabb0('0x3')],{'IntervalId':_0x2101a0[_0xabb0('0x6')]}),_0xabb0('0x2a')):[];if(_0x2101a0[_0xabb0('0xf')](_0xabb0('0x2d'))){if(_0x2101a0['tag']&&_0x2101a0[_0xabb0('0x2d')]!=='--'){_0x2e4ec3[_0xabb0('0x13')]({'type':_0x2101a0['type'],'app':'Set','appdata':'CDR(tag)='+_0x2101a0[_0xabb0('0x2d')],'context':_0x2101a0['context'],'exten':_0x2101a0[_0xabb0('0x9')],'priority':_0x5cb3f3[_0xabb0('0x28')]+_0x57f702[_0xabb0('0x10')]+_0x8b5e67++,'VoiceExtensionId':_0x2101a0['VoiceExtensionId']});}}if(_0x2101a0[_0xabb0('0x14')]===_0xabb0('0x18')&&_0x2101a0[_0xabb0('0xf')](_0xabb0('0x2e'))){if(_0x2101a0[_0xabb0('0x2e')]){_0x2e4ec3[_0xabb0('0x13')]({'type':_0x2101a0[_0xabb0('0x14')],'app':'ExecIf','appdata':_0xabb0('0x2f')+_0x2101a0[_0xabb0('0x2e')]+')','context':_0x2101a0['context'],'exten':_0x2101a0[_0xabb0('0x9')],'priority':_0x5cb3f3[_0xabb0('0x28')]+_0x57f702[_0xabb0('0x10')]+_0x8b5e67++,'VoiceExtensionId':_0x2101a0[_0xabb0('0x17')]});}else{_0x2e4ec3[_0xabb0('0x13')]({'type':_0x2101a0[_0xabb0('0x14')],'app':_0xabb0('0x30'),'appdata':_0xabb0('0x31'),'context':_0x2101a0[_0xabb0('0x16')],'exten':_0x2101a0[_0xabb0('0x9')],'priority':_0x5cb3f3[_0xabb0('0x28')]+_0x57f702[_0xabb0('0x10')]+_0x8b5e67++,'VoiceExtensionId':_0x2101a0['VoiceExtensionId']});}}if(_0x2101a0[_0xabb0('0xf')]('answer')){if(_0x458606[_0xabb0('0x32')](_0x2101a0[_0xabb0('0x33')][_0xabb0('0x34')]())>=0x0&&_0x2101a0[_0xabb0('0x35')]!==_0xabb0('0x36')){if(_0x2101a0[_0xabb0('0x37')]){_0x2e4ec3[_0xabb0('0x13')]({'type':_0x2101a0[_0xabb0('0x14')],'app':'ExecIf','appdata':_0xabb0('0x38'),'context':_0x2101a0[_0xabb0('0x16')],'exten':_0x2101a0['exten'],'priority':_0x5cb3f3[_0xabb0('0x28')]+_0x57f702[_0xabb0('0x10')]+_0x8b5e67++,'VoiceExtensionId':_0x2101a0[_0xabb0('0x17')]});_0x2e4ec3['push']({'type':_0x2101a0[_0xabb0('0x14')],'app':'Set','appdata':_0xabb0('0x39'),'context':_0x2101a0['context'],'exten':_0x2101a0[_0xabb0('0x9')],'priority':_0x5cb3f3['length']+_0x57f702[_0xabb0('0x10')]+_0x8b5e67++,'VoiceExtensionId':_0x2101a0[_0xabb0('0x17')]});}else{_0x2e4ec3[_0xabb0('0x13')]({'type':_0x2101a0[_0xabb0('0x14')],'app':'ExecIf','appdata':'$[${XCALLY-MOTION-PROGRESS}=0]?Progress','context':_0x2101a0['context'],'exten':_0x2101a0[_0xabb0('0x9')],'priority':_0x5cb3f3['length']+_0x57f702[_0xabb0('0x10')]+_0x8b5e67++,'VoiceExtensionId':_0x2101a0['VoiceExtensionId']});_0x2e4ec3[_0xabb0('0x13')]({'type':_0x2101a0[_0xabb0('0x14')],'app':_0xabb0('0x1a'),'appdata':_0xabb0('0x3a'),'context':_0x2101a0[_0xabb0('0x16')],'exten':_0x2101a0[_0xabb0('0x9')],'priority':_0x5cb3f3['length']+_0x57f702['priority']+_0x8b5e67++,'VoiceExtensionId':_0x2101a0[_0xabb0('0x17')]});}}}for(var _0x393b98=0x0;_0x393b98<_0x5cb3f3[_0xabb0('0x28')];_0x393b98+=0x1){var _0xbfd5cf=_0x57f702[_0xabb0('0x10')]+_0x5cb3f3[_0xabb0('0x28')];var _0x5ce744=_0x393b98===_0x5cb3f3[_0xabb0('0x28')]-0x1?_0x57f702[_0xabb0('0x10')]+_0x2e4ec3[_0xabb0('0x28')]+_0x529ba1[_0xabb0('0x28')]+0x2:_0x57f702[_0xabb0('0x10')]+_0x393b98+0x1;_0x2e4ec3[_0xabb0('0x3b')](_0x393b98,0x0,{'type':_0x2101a0['type'],'app':_0xabb0('0x3c'),'appdata':_0x5cb3f3[_0x393b98]+'?'+_0x2101a0[_0xabb0('0x16')]+',${EXTEN},'+_0xbfd5cf+':'+_0x2101a0[_0xabb0('0x16')]+_0xabb0('0x3d')+_0x5ce744,'exten':_0x2101a0[_0xabb0('0x9')],'context':_0x2101a0['context'],'priority':_0x57f702[_0xabb0('0x10')]+_0x393b98,'VoiceExtensionId':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x17')]});}_0x2101a0[_0xabb0('0x10')]=_0x2e4ec3[_0xabb0('0x28')]?_['last'](_0x2e4ec3)[_0xabb0('0x10')]+0x1:_0x57f702[_0xabb0('0x10')];_0x57f702['priority']=(_0x529ba1[_0xabb0('0x28')]?_[_0xabb0('0x3e')](_0x529ba1)[_0xabb0('0x10')]:_0x2101a0['priority'])+0x1;_0x57f702[_0xabb0('0x19')]=_[_0xabb0('0x3f')](_0x57f702['extensions'],_0x2e4ec3,[_0x2101a0],_0x529ba1);}_0x57f702['extensions'][_0xabb0('0x13')]({'type':_0x15cb86[_0xad1c1f][0x0]['type'],'app':_0xabb0('0x40'),'exten':_0x15cb86[_0xad1c1f][0x0]['exten'],'context':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x16')],'priority':_0x57f702[_0xabb0('0x10')],'VoiceExtensionId':_0x15cb86[_0xad1c1f][0x0][_0xabb0('0x17')]});_0x3e8b5c[_0xabb0('0x13')](_0x15cb86[_0xad1c1f][0x0]['VoiceExtensionId']);_0x55f083=_['concat'](_0x55f083,_0x57f702[_0xabb0('0x19')]);}}return _0x4728e2[_0xabb0('0x41')](function(_0x13b8ac){return _0x4728e2['models']['VoiceExtension'][_0xabb0('0x42')]({'where':{'VoiceExtensionId':{'$in':_0x3e8b5c}},'transaction':_0x13b8ac})['then'](function(_0x32a49d){return _0x4728e2[_0xabb0('0x4')][_0xabb0('0x5')][_0xabb0('0x43')](_[_0xabb0('0x44')](_0x55f083,'priority'),{'transaction':_0x13b8ac});});});})[_0xabb0('0x45')](function(_0x289034){console[_0xabb0('0x46')](_0x289034);});}exports[_0xabb0('0x47')]=rewrite;
\ No newline at end of file
index ae56811..953ba11 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb730=['map','join','hasOwnProperty','data','firstName','firstName\x20not\x20specified!','phone','phone\x20not\x20specified!','birthDate','YYYY-MM-DD','birthDate\x20format\x20is\x20invalid,\x20YYYY-MM-DD\x20format\x20is\x20supported!','email','email\x20format\x20is\x20not\x20valid!','ListId','CompanyId','length','find','duplicate','CmContact','create','then','push','pick','catch','Error\x20while\x20creating\x20contact:\x20','message','stringify','cmContact','checkHopper','inspect','insert','into','cm_hopper','fromQuery','scheduledAt','ContactId','createdAt','select','field','NOW()','toString','updatedAt','from','cm_contacts','where','ListId\x20=\x20?','phone\x20IS\x20NOT\x20NULL','\x20=\x20?','deletedAt\x20IS\x20NULL','id\x20IN\x20?','str','phone\x20NOT\x20IN\x20(?)','calleridnum','cm_hopper_final','VoiceQueue','outbound','dialCheckDuplicateType','CmList','get','always','sequelize','query','VoiceQueueId','onlyIfOpen','all','findAll','Campaign','Lists','CampaignId','BlackLists','cmContact,\x20%s,\x20%s','generalCheckHopper','Error\x20processing\x20rows\x20block:','finally','emit','contact:csv_','resume','resolve','Unable\x20to\x20delete\x20temp\x20file:','exit','SIGINT','info','CSV\x20import\x20process\x20stopped!','createReadStream','parse','CSV\x20parsed\x20correctly!','CSV\x20parse\x20error','Error\x20executing\x20contact\x20csv\x20import:','bluebird','util','squel','ioredis','../../../mysqldb','../../../config/environment','../../../config/logger','api','redis','defaults','localhost','socket.io-emitter','register','argv','undefined','null','Missing\x20filepath\x20parameter!','split','Missing\x20ListId\x20parameter!','Missing\x20socket_timestamp\x20parameter!','error','contact','test','isNil','The\x20row\x20is\x20empty\x20or\x20the\x20number\x20of\x20parameters\x20does\x20not\x20match\x20the\x20columns!','errors'];(function(_0x56cba1,_0x2b23c1){var _0x3ddfdf=function(_0x1f8771){while(--_0x1f8771){_0x56cba1['push'](_0x56cba1['shift']());}};_0x3ddfdf(++_0x2b23c1);}(_0xb730,0xca));var _0x0b73=function(_0x2fbe2e,_0x58fbcb){_0x2fbe2e=_0x2fbe2e-0x0;var _0x2963dd=_0xb730[_0x2fbe2e];return _0x2963dd;};'use strict';var BPromise=require(_0x0b73('0x0'));var util=require(_0x0b73('0x1'));var _=require('lodash');var fs=require('fs');var squel=require(_0x0b73('0x2'));var Papa=require('papaparse');var Redis=require(_0x0b73('0x3'));var db=require(_0x0b73('0x4'))['db'];var config=require(_0x0b73('0x5'));var logger=require(_0x0b73('0x6'))(_0x0b73('0x7'));config[_0x0b73('0x8')]=_[_0x0b73('0x9')](config['redis'],{'host':_0x0b73('0xa'),'port':0x18eb});var socket=require(_0x0b73('0xb'))(new Redis(config[_0x0b73('0x8')]));require('../../../api/cmContact/cmContact.socket')[_0x0b73('0xc')](socket);try{if(!process[_0x0b73('0xd')][0x2]||process[_0x0b73('0xd')][0x2]===_0x0b73('0xe')||process[_0x0b73('0xd')][0x2]===_0x0b73('0xf')){throw new Error(_0x0b73('0x10'));}var FILEPATH=process[_0x0b73('0xd')][0x2];if(!process['argv'][0x3]||process['argv'][0x3]==='undefined'||process[_0x0b73('0xd')][0x3]===_0x0b73('0xf')||!process['argv'][0x4]||process['argv'][0x4]===_0x0b73('0xe')||process[_0x0b73('0xd')][0x4]===_0x0b73('0xf')){throw new Error('Missing\x20binding\x20parameters!');}var FIELDS=_['zipObject'](process[_0x0b73('0xd')][0x3][_0x0b73('0x11')](','),process[_0x0b73('0xd')][0x4]['split'](','));if(!process['argv'][0x5]||process['argv'][0x5]===_0x0b73('0xe')||process[_0x0b73('0xd')][0x5]==='null'){throw new Error(_0x0b73('0x12'));}var LISTID=process[_0x0b73('0xd')][0x5];var COMPANYID=process[_0x0b73('0xd')][0x6]&&process['argv'][0x6]!==_0x0b73('0xe')&&process[_0x0b73('0xd')][0x6]!==_0x0b73('0xf')?process['argv'][0x6]:null;var DUPLICATES=process[_0x0b73('0xd')][0x7]&&process['argv'][0x7]!==_0x0b73('0xe')&&process[_0x0b73('0xd')][0x7]!==_0x0b73('0xf')?process[_0x0b73('0xd')][0x7]:null;if(!process[_0x0b73('0xd')][0x8]||process[_0x0b73('0xd')][0x8]===_0x0b73('0xe')||process[_0x0b73('0xd')][0x8]===_0x0b73('0xf')){throw new Error(_0x0b73('0x13'));}var SOCKET_TIMESTAMP=process[_0x0b73('0xd')][0x8];}catch(_0x3a5b1a){logger[_0x0b73('0x14')](_0x3a5b1a);endCsv();}var total=0x0;var pTotal=0x0;var success=0x0;var errors=0x0;var duplicates=0x0;var rows=[];var hopperContacts='';var promises=[];var index=0x0;var alreadyInvalid=![];function handleCheckRowError(_0x51c5b0,_0x5284e6,_0x10dabe,_0x5dd2d6){var _0x407c32={'message':_0x5284e6};_0x407c32[_0x51c5b0]=!![];if(_0x10dabe){_0x407c32[_0x0b73('0x15')]=_0x10dabe;}if(_0x5dd2d6){_0x407c32['index']=_0x5dd2d6;}return _0x407c32;}function isEmail(_0x5cfb5d){return/^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22))*\x40([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d))*$/[_0x0b73('0x16')](_0x5cfb5d);}function checkRow(_0xb4e7ff,_0x6cdc2a,_0x3f558d){return new BPromise(function(_0xab40cb,_0x150daa){if(_[_0x0b73('0x17')](_0xb4e7ff)){return _0x150daa(handleCheckRowError('error',_0x0b73('0x18'),null,_0x3f558d));}if(_0xb4e7ff[_0x0b73('0x19')]&&_0xb4e7ff['errors']['length']){var _0x3ee325=_[_0x0b73('0x1a')](_0xb4e7ff['errors'],'message')[_0x0b73('0x1b')](';');return _0x150daa(handleCheckRowError(_0x0b73('0x14'),_0x3ee325,null,_0x3f558d));}var _0x221fa0={};for(var _0x43cf7c in FIELDS){if(FIELDS[_0x0b73('0x1c')](_0x43cf7c)&&FIELDS[_0x43cf7c]){_0x221fa0[_0x43cf7c]=_0xb4e7ff[_0x0b73('0x1d')][0x0][FIELDS[_0x43cf7c]]||_0xb4e7ff[_0x0b73('0x1d')][0x0]['\ufeff'+FIELDS[_0x43cf7c]];}}if(!_0x221fa0[_0x0b73('0x1e')]){return _0x150daa(handleCheckRowError(_0x0b73('0x14'),_0x0b73('0x1f'),null,_0x3f558d));}if(!_0x221fa0[_0x0b73('0x20')]){return _0x150daa(handleCheckRowError('error',_0x0b73('0x21'),null,_0x3f558d));}if(_0x221fa0['birthDate']){var _0x40de57=moment(_0x221fa0[_0x0b73('0x22')],_0x0b73('0x23'));if(!_0x40de57['isValid']()){return _0x150daa(handleCheckRowError(_0x0b73('0x14'),_0x0b73('0x24'),null,_0x3f558d));}}if(_0x221fa0['email']){if(!isEmail(_0x221fa0[_0x0b73('0x25')])){return _0x150daa(handleCheckRowError('error',_0x0b73('0x26'),null,_0x3f558d));}}_0x221fa0[_0x0b73('0x27')]=LISTID;_0x221fa0[_0x0b73('0x28')]=COMPANYID||undefined;if(DUPLICATES&&DUPLICATES[_0x0b73('0x29')]&&_0x6cdc2a){var _0x5d46cc={};for(var _0x235af5=0x0,_0x43c9b6=DUPLICATES[_0x0b73('0x29')];_0x235af5<_0x43c9b6;_0x235af5+=0x1){_0x5d46cc[DUPLICATES[_0x235af5]]=_0x221fa0[DUPLICATES[_0x235af5]];}var _0x5f4fe7=_[_0x0b73('0x2a')](_0x6cdc2a,_0x5d46cc);if(_0x5f4fe7){return _0x150daa(handleCheckRowError(_0x0b73('0x2b'),'Duplicate\x20Contact',_0x5f4fe7,_0x3f558d));}}return db[_0x0b73('0x2c')][_0x0b73('0x2d')](_0x221fa0,{'raw':!![],'hooks':![],'fields':_['keys'](_0x221fa0)})[_0x0b73('0x2e')](function(_0xfba8f2){if(DUPLICATES&&DUPLICATES[_0x0b73('0x29')]&&_0x6cdc2a){_0x6cdc2a[_0x0b73('0x2f')](_[_0x0b73('0x30')](_0x221fa0,DUPLICATES));}hopperContacts+=(hopperContacts?',':'')+_0xfba8f2['id'];return _0xab40cb();})[_0x0b73('0x31')](function(_0x481fa7){return _0x150daa(handleCheckRowError(_0x0b73('0x14'),_0x0b73('0x32')+(_0x481fa7[_0x0b73('0x33')]||JSON[_0x0b73('0x34')](_0x481fa7)),null,_0x3f558d));});});}function checkHopper(){function _0x26919c(){return function(_0x5af751){logger[_0x0b73('0x14')](_0x0b73('0x35'),_0x0b73('0x36'),util[_0x0b73('0x37')](_0x5af751,{'showHidden':![],'depth':null}));};}var _0x52ee6b=function(_0x1f71f4,_0x1b5be1){var _0x5949bc=squel[_0x0b73('0x38')]()[_0x0b73('0x39')](_0x0b73('0x3a'))[_0x0b73('0x3b')]([_0x0b73('0x20'),_0x0b73('0x3c'),_0x0b73('0x3d'),'ListId',_0x1b5be1,_0x0b73('0x3e'),'updatedAt'],squel[_0x0b73('0x3f')]()[_0x0b73('0x40')](_0x0b73('0x20'),'phone')[_0x0b73('0x40')](_0x0b73('0x41'),'scheduledAt')[_0x0b73('0x40')]('id',_0x0b73('0x3d'))['field'](LISTID[_0x0b73('0x42')](),_0x0b73('0x27'))['field'](_0x1f71f4['id'][_0x0b73('0x42')](),_0x1b5be1)[_0x0b73('0x40')](_0x0b73('0x41'),_0x0b73('0x3e'))[_0x0b73('0x40')](_0x0b73('0x41'),_0x0b73('0x43'))[_0x0b73('0x44')](_0x0b73('0x45'))[_0x0b73('0x46')]('deletedAt\x20IS\x20NULL')[_0x0b73('0x46')](_0x0b73('0x47'),LISTID[_0x0b73('0x42')]())[_0x0b73('0x46')](_0x0b73('0x48'))[_0x0b73('0x46')]('phone\x20NOT\x20IN\x20(?)',squel[_0x0b73('0x3f')]()[_0x0b73('0x40')](_0x0b73('0x20'))['from'](_0x0b73('0x3a'))['where'](_0x1b5be1+_0x0b73('0x49'),_0x1f71f4['id'][_0x0b73('0x42')]())))['toString']();return _0x5949bc;};var _0x4f67f7=function(_0x1c11c6,_0x263ac6){var _0x21d3b6=squel[_0x0b73('0x38')]()[_0x0b73('0x39')]('cm_hopper')[_0x0b73('0x3b')](['phone','scheduledAt','ContactId',_0x0b73('0x27'),_0x263ac6,'createdAt',_0x0b73('0x43')],squel[_0x0b73('0x3f')]()[_0x0b73('0x40')]('phone','phone')[_0x0b73('0x40')](_0x0b73('0x41'),_0x0b73('0x3c'))[_0x0b73('0x40')]('id',_0x0b73('0x3d'))[_0x0b73('0x40')](LISTID[_0x0b73('0x42')](),'ListId')[_0x0b73('0x40')](_0x1c11c6['id'][_0x0b73('0x42')](),_0x263ac6)[_0x0b73('0x40')](_0x0b73('0x41'),_0x0b73('0x3e'))[_0x0b73('0x40')](_0x0b73('0x41'),_0x0b73('0x43'))['from'](_0x0b73('0x45'))[_0x0b73('0x46')](_0x0b73('0x4a'))[_0x0b73('0x46')](_0x0b73('0x47'),LISTID[_0x0b73('0x42')]())['where'](_0x0b73('0x4b'),squel[_0x0b73('0x4c')](hopperContacts))[_0x0b73('0x46')](_0x0b73('0x48'))[_0x0b73('0x46')](_0x0b73('0x4d'),squel[_0x0b73('0x3f')]()[_0x0b73('0x40')](_0x0b73('0x4e'))[_0x0b73('0x44')](_0x0b73('0x4f'))['where'](_0x263ac6+_0x0b73('0x49'),_0x1c11c6['id']['toString']()))[_0x0b73('0x46')](_0x0b73('0x4d'),squel[_0x0b73('0x3f')]()[_0x0b73('0x40')]('phone')[_0x0b73('0x44')](_0x0b73('0x3a'))[_0x0b73('0x46')](_0x263ac6+'\x20=\x20?',_0x1c11c6['id'][_0x0b73('0x42')]())))[_0x0b73('0x42')]();return _0x21d3b6;};function _0x5d3b36(_0x3556b5,_0x2fdcce){var _0x929dd3=squel['insert']()['into'](_0x0b73('0x3a'))['fromQuery']([_0x0b73('0x20'),_0x0b73('0x3c'),_0x0b73('0x3d'),'ListId',_0x2fdcce,_0x0b73('0x3e'),_0x0b73('0x43')],squel[_0x0b73('0x3f')]()[_0x0b73('0x40')](_0x0b73('0x20'),_0x0b73('0x20'))[_0x0b73('0x40')](_0x0b73('0x41'),_0x0b73('0x3c'))[_0x0b73('0x40')]('id',_0x0b73('0x3d'))[_0x0b73('0x40')](LISTID['toString'](),'ListId')[_0x0b73('0x40')](_0x3556b5['id'][_0x0b73('0x42')](),_0x2fdcce)[_0x0b73('0x40')]('NOW()',_0x0b73('0x3e'))[_0x0b73('0x40')](_0x0b73('0x41'),_0x0b73('0x43'))[_0x0b73('0x44')](_0x0b73('0x45'))[_0x0b73('0x46')]('deletedAt\x20IS\x20NULL')[_0x0b73('0x46')]('ListId\x20=\x20?',LISTID[_0x0b73('0x42')]())[_0x0b73('0x46')](_0x0b73('0x4b'),squel[_0x0b73('0x4c')](hopperContacts))[_0x0b73('0x46')]('phone\x20IS\x20NOT\x20NULL'))[_0x0b73('0x42')]();return _0x929dd3;}function _0x4be32c(_0x362729,_0x20dcc9){var _0x3fd922=squel[_0x0b73('0x38')]()[_0x0b73('0x39')]('cm_hopper_black')['fromQuery']([_0x0b73('0x20'),_0x0b73('0x3d'),_0x0b73('0x27'),_0x20dcc9,_0x0b73('0x3e'),_0x0b73('0x43')],squel['select']()[_0x0b73('0x40')](_0x0b73('0x20'),_0x0b73('0x20'))['field']('id',_0x0b73('0x3d'))[_0x0b73('0x40')](LISTID[_0x0b73('0x42')](),_0x0b73('0x27'))[_0x0b73('0x40')](_0x362729['id'][_0x0b73('0x42')](),_0x20dcc9)[_0x0b73('0x40')](_0x0b73('0x41'),_0x0b73('0x3e'))[_0x0b73('0x40')](_0x0b73('0x41'),_0x0b73('0x43'))[_0x0b73('0x44')](_0x0b73('0x45'))[_0x0b73('0x46')](_0x0b73('0x4a'))[_0x0b73('0x46')](_0x0b73('0x47'),LISTID[_0x0b73('0x42')]())['where']('id\x20IN\x20?',squel[_0x0b73('0x4c')](hopperContacts))[_0x0b73('0x46')](_0x0b73('0x48')))[_0x0b73('0x42')]();return _0x3fd922;}return db[_0x0b73('0x50')]['findAll']({'where':{'type':_0x0b73('0x51')},'attributes':['id',_0x0b73('0x52')],'include':[{'model':db[_0x0b73('0x53')],'as':'Lists','where':{'id':LISTID}}]})[_0x0b73('0x2e')](function(_0xc13f9b){var _0x3ad9d9=[];if(_0xc13f9b){var _0x5b45aa;for(var _0x2d2014=0x0,_0x85de84;_0x2d2014<_0xc13f9b[_0x0b73('0x29')];_0x2d2014+=0x1){_0x85de84=_0xc13f9b[_0x2d2014][_0x0b73('0x54')]({'plain':!![]});switch(_0x85de84[_0x0b73('0x52')]){case _0x0b73('0x55'):_0x3ad9d9['push'](db[_0x0b73('0x56')][_0x0b73('0x57')](_0x4f67f7(_0x85de84,_0x0b73('0x58')))[_0x0b73('0x2e')](function(){})[_0x0b73('0x31')](_0x26919c()));break;case _0x0b73('0x59'):_0x3ad9d9[_0x0b73('0x2f')](db['sequelize'][_0x0b73('0x57')](_0x52ee6b(_0x85de84,_0x0b73('0x58')))[_0x0b73('0x2e')](function(){})[_0x0b73('0x31')](_0x26919c()));break;default:_0x3ad9d9[_0x0b73('0x2f')](db[_0x0b73('0x56')][_0x0b73('0x57')](_0x5d3b36(_0x85de84,_0x0b73('0x58')))[_0x0b73('0x2e')](function(){})[_0x0b73('0x31')](_0x26919c()));}}}return _0x3ad9d9;})[_0x0b73('0x5a')]()[_0x0b73('0x2e')](function(){return db[_0x0b73('0x50')][_0x0b73('0x5b')]({'where':{'type':'outbound'},'attributes':['id'],'include':[{'model':db[_0x0b73('0x53')],'as':'BlackLists','where':{'id':LISTID}}]})[_0x0b73('0x2e')](function(_0x3b7658){var _0x1e8122=[];if(_0x3b7658){var _0x530359;for(var _0x46b984=0x0,_0x45f682;_0x46b984<_0x3b7658[_0x0b73('0x29')];_0x46b984+=0x1){_0x45f682=_0x3b7658[_0x46b984][_0x0b73('0x54')]({'plain':!![]});_0x1e8122[_0x0b73('0x2f')](db[_0x0b73('0x56')]['query'](_0x4be32c(_0x45f682,'VoiceQueueId'))[_0x0b73('0x2e')](function(){})[_0x0b73('0x31')](_0x26919c()));}}return _0x1e8122;})[_0x0b73('0x5a')]();})[_0x0b73('0x2e')](function(){return db[_0x0b73('0x5c')]['findAll']({'attributes':['id',_0x0b73('0x52')],'include':[{'model':db[_0x0b73('0x53')],'as':_0x0b73('0x5d'),'where':{'id':LISTID}}]})[_0x0b73('0x2e')](function(_0x3fe79d){var _0x3044ee=[];if(_0x3fe79d){for(var _0x46e7c4=0x0,_0x563ef6;_0x46e7c4<_0x3fe79d[_0x0b73('0x29')];_0x46e7c4+=0x1){_0x563ef6=_0x3fe79d[_0x46e7c4][_0x0b73('0x54')]({'plain':!![]});switch(_0x563ef6[_0x0b73('0x52')]){case _0x0b73('0x55'):_0x3044ee[_0x0b73('0x2f')](db[_0x0b73('0x56')][_0x0b73('0x57')](_0x4f67f7(_0x563ef6,_0x0b73('0x5e')))['then'](function(){})[_0x0b73('0x31')](_0x26919c()));break;case _0x0b73('0x59'):_0x3044ee[_0x0b73('0x2f')](db[_0x0b73('0x56')][_0x0b73('0x57')](_0x52ee6b(_0x563ef6,_0x0b73('0x5e')))[_0x0b73('0x2e')](function(){})['catch'](_0x26919c()));break;default:_0x3044ee['push'](db[_0x0b73('0x56')][_0x0b73('0x57')](_0x5d3b36(_0x563ef6,_0x0b73('0x5e')))[_0x0b73('0x2e')](function(){})[_0x0b73('0x31')](_0x26919c()));}}}return _0x3044ee;})['all']();})[_0x0b73('0x2e')](function(){return db['Campaign'][_0x0b73('0x5b')]({'attributes':['id'],'include':[{'model':db[_0x0b73('0x53')],'as':_0x0b73('0x5f'),'where':{'id':LISTID}}]})[_0x0b73('0x2e')](function(_0x5bf1e0){var _0x353deb=[];if(_0x5bf1e0){for(var _0x838f67=0x0,_0x39b004;_0x838f67<_0x5bf1e0[_0x0b73('0x29')];_0x838f67+=0x1){_0x39b004=_0x5bf1e0[_0x838f67][_0x0b73('0x54')]({'plain':!![]});_0x353deb[_0x0b73('0x2f')](db[_0x0b73('0x56')]['query'](_0x4be32c(_0x39b004,_0x0b73('0x5e')))['then'](function(){})[_0x0b73('0x31')](_0x26919c()));}}return _0x353deb;})[_0x0b73('0x5a')]();})[_0x0b73('0x31')](function(_0x36216b){logger[_0x0b73('0x14')](_0x0b73('0x60'),_0x0b73('0x61'),_0x36216b[_0x0b73('0x33')]);});}var processPromises=function(_0x5793a1){return BPromise[_0x0b73('0x5a')](promises)[_0x0b73('0x2e')](function(_0x51c047){})[_0x0b73('0x31')](function(_0x5b064b){logger['error'](_0x0b73('0x62'),JSON[_0x0b73('0x34')](_0x5b064b));})[_0x0b73('0x63')](function(){socket[_0x0b73('0x64')](_0x0b73('0x65')+SOCKET_TIMESTAMP,{'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});promises=[];success=0x0;errors=0x0;duplicates=0x0;rows=[];if(_0x5793a1){return _0x5793a1[_0x0b73('0x66')]();}});};var endCsv=function(){return BPromise[_0x0b73('0x67')]()[_0x0b73('0x2e')](function(){if(hopperContacts){return checkHopper();}})[_0x0b73('0x2e')](function(){socket[_0x0b73('0x64')](_0x0b73('0x65')+SOCKET_TIMESTAMP,{'finished':!![],'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});try{fs['unlinkSync'](FILEPATH);}catch(_0x2ccc7a){logger['error'](_0x0b73('0x68'),JSON['stringify'](_0x2ccc7a));}finally{process[_0x0b73('0x69')](0x0);}});};process['on'](_0x0b73('0x6a'),function(){logger[_0x0b73('0x6b')](_0x0b73('0x6c'));endCsv();});function main(){return BPromise['resolve']()['then'](function(){if(DUPLICATES){DUPLICATES=DUPLICATES[_0x0b73('0x11')](',');return db[_0x0b73('0x2c')][_0x0b73('0x5b')]({'where':{'ListId':LISTID},'attributes':DUPLICATES,'raw':!![]});}})['then'](function(_0x20f3b3){var _0x96bd6e=fs[_0x0b73('0x6d')](FILEPATH,{'highWaterMark':0xf*0x400*0x400});Papa[_0x0b73('0x6e')](_0x96bd6e,{'header':!![],'skipEmptyLines':!![],'step':function(_0x2d0132,_0x4c753b){total+=0x1;var _0x3b0c2f=total;promises['push'](checkRow(_0x2d0132,_0x20f3b3,_0x3b0c2f)['then'](function(){success+=0x1;})[_0x0b73('0x31')](function(_0x10ef97){if(_0x10ef97['error']){errors+=0x1;delete _0x10ef97[_0x0b73('0x14')];}else if(_0x10ef97[_0x0b73('0x2b')]){duplicates+=0x1;delete _0x10ef97[_0x0b73('0x2b')];}rows[_0x0b73('0x2f')](_0x10ef97);}));if(total%0xc8===0x0){_0x4c753b['pause']();return processPromises(_0x4c753b);}},'complete':function(){return processPromises()[_0x0b73('0x2e')](function(){logger['info'](_0x0b73('0x6f'));endCsv();});},'error':function(_0x517837,_0x349dfd){logger[_0x0b73('0x6b')](_0x0b73('0x70'),JSON[_0x0b73('0x34')](_0x517837));endCsv();}});})['catch'](function(_0x282fe2){logger[_0x0b73('0x14')](_0x0b73('0x71'),JSON[_0x0b73('0x34')](_0x282fe2));});}main();
\ No newline at end of file
+var _0xf08c=['select','field','scheduledAt','toString','NOW()','from','cm_contacts','deletedAt\x20IS\x20NULL','where','ListId\x20=\x20?','phone\x20IS\x20NOT\x20NULL','phone\x20NOT\x20IN\x20(?)','createdAt','id\x20IN\x20?','str','cm_hopper_final','\x20=\x20?','insert','into','VoiceQueue','findAll','outbound','dialCheckDuplicateType','CmList','Lists','get','always','push','sequelize','query','VoiceQueueId','catch','all','BlackLists','Campaign','onlyIfOpen','CampaignId','generalCheckHopper','stringify','finally','resume','emit','contact:csv_','unlinkSync','Unable\x20to\x20delete\x20temp\x20file:','exit','info','CSV\x20import\x20process\x20stopped!','resolve','createReadStream','duplicate','CSV\x20parsed\x20correctly!','CSV\x20parse\x20error','Error\x20executing\x20contact\x20csv\x20import:','bluebird','util','lodash','squel','papaparse','../../../config/environment','../../../config/logger','api','redis','localhost','socket.io-emitter','../../../api/cmContact/cmContact.socket','register','argv','Missing\x20filepath\x20parameter!','null','Missing\x20binding\x20parameters!','split','undefined','Missing\x20ListId\x20parameter!','Missing\x20socket_timestamp\x20parameter!','error','contact','index','test','The\x20row\x20is\x20empty\x20or\x20the\x20number\x20of\x20parameters\x20does\x20not\x20match\x20the\x20columns!','errors','length','map','message','join','hasOwnProperty','firstName','firstName\x20not\x20specified!','phone','phone\x20not\x20specified!','birthDate','isValid','email','ListId','find','CmContact','keys','then','pick','Error\x20while\x20creating\x20contact:\x20','cm_hopper','fromQuery','ContactId','updatedAt'];(function(_0x1da04e,_0x31024b){var _0xdd8c41=function(_0x2036f9){while(--_0x2036f9){_0x1da04e['push'](_0x1da04e['shift']());}};_0xdd8c41(++_0x31024b);}(_0xf08c,0x106));var _0xcf08=function(_0x29da81,_0x40b463){_0x29da81=_0x29da81-0x0;var _0x307a38=_0xf08c[_0x29da81];return _0x307a38;};'use strict';var BPromise=require(_0xcf08('0x0'));var util=require(_0xcf08('0x1'));var _=require(_0xcf08('0x2'));var fs=require('fs');var squel=require(_0xcf08('0x3'));var Papa=require(_0xcf08('0x4'));var Redis=require('ioredis');var db=require('../../../mysqldb')['db'];var config=require(_0xcf08('0x5'));var logger=require(_0xcf08('0x6'))(_0xcf08('0x7'));config[_0xcf08('0x8')]=_['defaults'](config[_0xcf08('0x8')],{'host':_0xcf08('0x9'),'port':0x18eb});var socket=require(_0xcf08('0xa'))(new Redis(config[_0xcf08('0x8')]));require(_0xcf08('0xb'))[_0xcf08('0xc')](socket);try{if(!process['argv'][0x2]||process[_0xcf08('0xd')][0x2]==='undefined'||process[_0xcf08('0xd')][0x2]==='null'){throw new Error(_0xcf08('0xe'));}var FILEPATH=process[_0xcf08('0xd')][0x2];if(!process[_0xcf08('0xd')][0x3]||process[_0xcf08('0xd')][0x3]==='undefined'||process[_0xcf08('0xd')][0x3]==='null'||!process['argv'][0x4]||process[_0xcf08('0xd')][0x4]==='undefined'||process[_0xcf08('0xd')][0x4]===_0xcf08('0xf')){throw new Error(_0xcf08('0x10'));}var FIELDS=_['zipObject'](process[_0xcf08('0xd')][0x3][_0xcf08('0x11')](','),process[_0xcf08('0xd')][0x4]['split'](','));if(!process[_0xcf08('0xd')][0x5]||process[_0xcf08('0xd')][0x5]===_0xcf08('0x12')||process[_0xcf08('0xd')][0x5]===_0xcf08('0xf')){throw new Error(_0xcf08('0x13'));}var LISTID=process['argv'][0x5];var COMPANYID=process[_0xcf08('0xd')][0x6]&&process['argv'][0x6]!==_0xcf08('0x12')&&process[_0xcf08('0xd')][0x6]!==_0xcf08('0xf')?process['argv'][0x6]:null;var DUPLICATES=process[_0xcf08('0xd')][0x7]&&process['argv'][0x7]!==_0xcf08('0x12')&&process[_0xcf08('0xd')][0x7]!==_0xcf08('0xf')?process[_0xcf08('0xd')][0x7]:null;if(!process[_0xcf08('0xd')][0x8]||process[_0xcf08('0xd')][0x8]===_0xcf08('0x12')||process[_0xcf08('0xd')][0x8]===_0xcf08('0xf')){throw new Error(_0xcf08('0x14'));}var SOCKET_TIMESTAMP=process['argv'][0x8];}catch(_0x2c6d7a){logger[_0xcf08('0x15')](_0x2c6d7a);endCsv();}var total=0x0;var pTotal=0x0;var success=0x0;var errors=0x0;var duplicates=0x0;var rows=[];var hopperContacts='';var promises=[];var index=0x0;var alreadyInvalid=![];function handleCheckRowError(_0x3bc017,_0x137718,_0x3cc25b,_0x3e9dc3){var _0x252f2e={'message':_0x137718};_0x252f2e[_0x3bc017]=!![];if(_0x3cc25b){_0x252f2e[_0xcf08('0x16')]=_0x3cc25b;}if(_0x3e9dc3){_0x252f2e[_0xcf08('0x17')]=_0x3e9dc3;}return _0x252f2e;}function isEmail(_0x5ccf3f){return/^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22))*\x40([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d))*$/[_0xcf08('0x18')](_0x5ccf3f);}function checkRow(_0x4a73c0,_0x44fed8,_0x43e467){return new BPromise(function(_0x7f761,_0x50f0a0){if(_['isNil'](_0x4a73c0)){return _0x50f0a0(handleCheckRowError(_0xcf08('0x15'),_0xcf08('0x19'),null,_0x43e467));}if(_0x4a73c0['errors']&&_0x4a73c0[_0xcf08('0x1a')][_0xcf08('0x1b')]){var _0x8fdcbf=_[_0xcf08('0x1c')](_0x4a73c0[_0xcf08('0x1a')],_0xcf08('0x1d'))[_0xcf08('0x1e')](';');return _0x50f0a0(handleCheckRowError(_0xcf08('0x15'),_0x8fdcbf,null,_0x43e467));}var _0x57638e={};for(var _0x4a9ac6 in FIELDS){if(FIELDS[_0xcf08('0x1f')](_0x4a9ac6)&&FIELDS[_0x4a9ac6]){_0x57638e[_0x4a9ac6]=_0x4a73c0['data'][0x0][FIELDS[_0x4a9ac6]]||_0x4a73c0['data'][0x0]['\ufeff'+FIELDS[_0x4a9ac6]];}}if(!_0x57638e[_0xcf08('0x20')]){return _0x50f0a0(handleCheckRowError(_0xcf08('0x15'),_0xcf08('0x21'),null,_0x43e467));}if(!_0x57638e[_0xcf08('0x22')]){return _0x50f0a0(handleCheckRowError('error',_0xcf08('0x23'),null,_0x43e467));}if(_0x57638e[_0xcf08('0x24')]){var _0x51fed2=moment(_0x57638e['birthDate'],'YYYY-MM-DD');if(!_0x51fed2[_0xcf08('0x25')]()){return _0x50f0a0(handleCheckRowError('error','birthDate\x20format\x20is\x20invalid,\x20YYYY-MM-DD\x20format\x20is\x20supported!',null,_0x43e467));}}if(_0x57638e[_0xcf08('0x26')]){if(!isEmail(_0x57638e[_0xcf08('0x26')])){return _0x50f0a0(handleCheckRowError(_0xcf08('0x15'),'email\x20format\x20is\x20not\x20valid!',null,_0x43e467));}}_0x57638e[_0xcf08('0x27')]=LISTID;_0x57638e['CompanyId']=COMPANYID||undefined;if(DUPLICATES&&DUPLICATES[_0xcf08('0x1b')]&&_0x44fed8){var _0x18fa06={};for(var _0x50cfbe=0x0,_0x27b109=DUPLICATES['length'];_0x50cfbe<_0x27b109;_0x50cfbe+=0x1){_0x18fa06[DUPLICATES[_0x50cfbe]]=_0x57638e[DUPLICATES[_0x50cfbe]];}var _0x3d4e5a=_[_0xcf08('0x28')](_0x44fed8,_0x18fa06);if(_0x3d4e5a){return _0x50f0a0(handleCheckRowError('duplicate','Duplicate\x20Contact',_0x3d4e5a,_0x43e467));}}return db[_0xcf08('0x29')]['create'](_0x57638e,{'raw':!![],'hooks':![],'fields':_[_0xcf08('0x2a')](_0x57638e)})[_0xcf08('0x2b')](function(_0x4a5c42){if(DUPLICATES&&DUPLICATES[_0xcf08('0x1b')]&&_0x44fed8){_0x44fed8['push'](_[_0xcf08('0x2c')](_0x57638e,DUPLICATES));}hopperContacts+=(hopperContacts?',':'')+_0x4a5c42['id'];return _0x7f761();})['catch'](function(_0x20e5ac){return _0x50f0a0(handleCheckRowError(_0xcf08('0x15'),_0xcf08('0x2d')+(_0x20e5ac[_0xcf08('0x1d')]||JSON['stringify'](_0x20e5ac)),null,_0x43e467));});});}function checkHopper(){function _0x3053c0(){return function(_0x9ddee0){logger[_0xcf08('0x15')]('cmContact','checkHopper',util['inspect'](_0x9ddee0,{'showHidden':![],'depth':null}));};}var _0x5b1fc5=function(_0x588748,_0x2ef02c){var _0x2807ec=squel['insert']()['into'](_0xcf08('0x2e'))[_0xcf08('0x2f')]([_0xcf08('0x22'),'scheduledAt',_0xcf08('0x30'),'ListId',_0x2ef02c,'createdAt',_0xcf08('0x31')],squel[_0xcf08('0x32')]()[_0xcf08('0x33')](_0xcf08('0x22'),_0xcf08('0x22'))['field']('NOW()',_0xcf08('0x34'))[_0xcf08('0x33')]('id',_0xcf08('0x30'))[_0xcf08('0x33')](LISTID[_0xcf08('0x35')](),'ListId')[_0xcf08('0x33')](_0x588748['id']['toString'](),_0x2ef02c)[_0xcf08('0x33')](_0xcf08('0x36'),'createdAt')['field'](_0xcf08('0x36'),_0xcf08('0x31'))[_0xcf08('0x37')](_0xcf08('0x38'))['where'](_0xcf08('0x39'))[_0xcf08('0x3a')](_0xcf08('0x3b'),LISTID[_0xcf08('0x35')]())['where'](_0xcf08('0x3c'))[_0xcf08('0x3a')](_0xcf08('0x3d'),squel[_0xcf08('0x32')]()[_0xcf08('0x33')](_0xcf08('0x22'))['from'](_0xcf08('0x2e'))[_0xcf08('0x3a')](_0x2ef02c+'\x20=\x20?',_0x588748['id'][_0xcf08('0x35')]())))[_0xcf08('0x35')]();return _0x2807ec;};var _0x46e1db=function(_0x5300ea,_0x57a6a2){var _0x56c62d=squel['insert']()['into']('cm_hopper')['fromQuery']([_0xcf08('0x22'),_0xcf08('0x34'),_0xcf08('0x30'),_0xcf08('0x27'),_0x57a6a2,_0xcf08('0x3e'),_0xcf08('0x31')],squel['select']()[_0xcf08('0x33')](_0xcf08('0x22'),_0xcf08('0x22'))[_0xcf08('0x33')](_0xcf08('0x36'),_0xcf08('0x34'))['field']('id',_0xcf08('0x30'))[_0xcf08('0x33')](LISTID[_0xcf08('0x35')](),_0xcf08('0x27'))[_0xcf08('0x33')](_0x5300ea['id'][_0xcf08('0x35')](),_0x57a6a2)[_0xcf08('0x33')]('NOW()','createdAt')[_0xcf08('0x33')](_0xcf08('0x36'),_0xcf08('0x31'))[_0xcf08('0x37')](_0xcf08('0x38'))[_0xcf08('0x3a')](_0xcf08('0x39'))[_0xcf08('0x3a')](_0xcf08('0x3b'),LISTID[_0xcf08('0x35')]())['where'](_0xcf08('0x3f'),squel[_0xcf08('0x40')](hopperContacts))[_0xcf08('0x3a')](_0xcf08('0x3c'))['where'](_0xcf08('0x3d'),squel[_0xcf08('0x32')]()['field']('calleridnum')['from'](_0xcf08('0x41'))[_0xcf08('0x3a')](_0x57a6a2+_0xcf08('0x42'),_0x5300ea['id'][_0xcf08('0x35')]()))[_0xcf08('0x3a')](_0xcf08('0x3d'),squel[_0xcf08('0x32')]()['field']('phone')['from']('cm_hopper')['where'](_0x57a6a2+_0xcf08('0x42'),_0x5300ea['id']['toString']())))['toString']();return _0x56c62d;};function _0x398351(_0xcf5435,_0x17a041){var _0x4183dc=squel[_0xcf08('0x43')]()['into'](_0xcf08('0x2e'))['fromQuery']([_0xcf08('0x22'),_0xcf08('0x34'),_0xcf08('0x30'),_0xcf08('0x27'),_0x17a041,'createdAt',_0xcf08('0x31')],squel[_0xcf08('0x32')]()[_0xcf08('0x33')](_0xcf08('0x22'),_0xcf08('0x22'))[_0xcf08('0x33')](_0xcf08('0x36'),'scheduledAt')[_0xcf08('0x33')]('id',_0xcf08('0x30'))[_0xcf08('0x33')](LISTID['toString'](),_0xcf08('0x27'))['field'](_0xcf5435['id']['toString'](),_0x17a041)[_0xcf08('0x33')](_0xcf08('0x36'),_0xcf08('0x3e'))[_0xcf08('0x33')](_0xcf08('0x36'),'updatedAt')['from'](_0xcf08('0x38'))[_0xcf08('0x3a')]('deletedAt\x20IS\x20NULL')[_0xcf08('0x3a')](_0xcf08('0x3b'),LISTID[_0xcf08('0x35')]())[_0xcf08('0x3a')](_0xcf08('0x3f'),squel['str'](hopperContacts))[_0xcf08('0x3a')]('phone\x20IS\x20NOT\x20NULL'))[_0xcf08('0x35')]();return _0x4183dc;}function _0x1c1394(_0x4c08c9,_0x222b5d){var _0x39ab5c=squel[_0xcf08('0x43')]()[_0xcf08('0x44')]('cm_hopper_black')[_0xcf08('0x2f')]([_0xcf08('0x22'),_0xcf08('0x30'),_0xcf08('0x27'),_0x222b5d,_0xcf08('0x3e'),'updatedAt'],squel[_0xcf08('0x32')]()[_0xcf08('0x33')](_0xcf08('0x22'),_0xcf08('0x22'))[_0xcf08('0x33')]('id',_0xcf08('0x30'))['field'](LISTID['toString'](),_0xcf08('0x27'))['field'](_0x4c08c9['id'][_0xcf08('0x35')](),_0x222b5d)['field'](_0xcf08('0x36'),_0xcf08('0x3e'))[_0xcf08('0x33')](_0xcf08('0x36'),'updatedAt')[_0xcf08('0x37')](_0xcf08('0x38'))['where'](_0xcf08('0x39'))['where'](_0xcf08('0x3b'),LISTID[_0xcf08('0x35')]())[_0xcf08('0x3a')](_0xcf08('0x3f'),squel[_0xcf08('0x40')](hopperContacts))[_0xcf08('0x3a')](_0xcf08('0x3c')))[_0xcf08('0x35')]();return _0x39ab5c;}return db[_0xcf08('0x45')][_0xcf08('0x46')]({'where':{'type':_0xcf08('0x47')},'attributes':['id',_0xcf08('0x48')],'include':[{'model':db[_0xcf08('0x49')],'as':_0xcf08('0x4a'),'where':{'id':LISTID}}]})[_0xcf08('0x2b')](function(_0x1b316e){var _0x476274=[];if(_0x1b316e){var _0x3eea75;for(var _0x129e4b=0x0,_0xf1bd7e;_0x129e4b<_0x1b316e['length'];_0x129e4b+=0x1){_0xf1bd7e=_0x1b316e[_0x129e4b][_0xcf08('0x4b')]({'plain':!![]});switch(_0xf1bd7e[_0xcf08('0x48')]){case _0xcf08('0x4c'):_0x476274[_0xcf08('0x4d')](db[_0xcf08('0x4e')][_0xcf08('0x4f')](_0x46e1db(_0xf1bd7e,_0xcf08('0x50')))[_0xcf08('0x2b')](function(){})[_0xcf08('0x51')](_0x3053c0()));break;case'onlyIfOpen':_0x476274['push'](db[_0xcf08('0x4e')]['query'](_0x5b1fc5(_0xf1bd7e,'VoiceQueueId'))[_0xcf08('0x2b')](function(){})[_0xcf08('0x51')](_0x3053c0()));break;default:_0x476274[_0xcf08('0x4d')](db[_0xcf08('0x4e')][_0xcf08('0x4f')](_0x398351(_0xf1bd7e,_0xcf08('0x50')))[_0xcf08('0x2b')](function(){})[_0xcf08('0x51')](_0x3053c0()));}}}return _0x476274;})[_0xcf08('0x52')]()['then'](function(){return db[_0xcf08('0x45')]['findAll']({'where':{'type':_0xcf08('0x47')},'attributes':['id'],'include':[{'model':db['CmList'],'as':_0xcf08('0x53'),'where':{'id':LISTID}}]})[_0xcf08('0x2b')](function(_0x41bf5a){var _0x1eb3f3=[];if(_0x41bf5a){var _0x32bfd5;for(var _0x2ac3e8=0x0,_0x1dc930;_0x2ac3e8<_0x41bf5a['length'];_0x2ac3e8+=0x1){_0x1dc930=_0x41bf5a[_0x2ac3e8]['get']({'plain':!![]});_0x1eb3f3[_0xcf08('0x4d')](db['sequelize'][_0xcf08('0x4f')](_0x1c1394(_0x1dc930,_0xcf08('0x50')))[_0xcf08('0x2b')](function(){})['catch'](_0x3053c0()));}}return _0x1eb3f3;})[_0xcf08('0x52')]();})[_0xcf08('0x2b')](function(){return db[_0xcf08('0x54')][_0xcf08('0x46')]({'attributes':['id',_0xcf08('0x48')],'include':[{'model':db['CmList'],'as':_0xcf08('0x4a'),'where':{'id':LISTID}}]})[_0xcf08('0x2b')](function(_0x4bf865){var _0x272803=[];if(_0x4bf865){for(var _0x47a9dd=0x0,_0x282954;_0x47a9dd<_0x4bf865[_0xcf08('0x1b')];_0x47a9dd+=0x1){_0x282954=_0x4bf865[_0x47a9dd][_0xcf08('0x4b')]({'plain':!![]});switch(_0x282954[_0xcf08('0x48')]){case _0xcf08('0x4c'):_0x272803[_0xcf08('0x4d')](db['sequelize'][_0xcf08('0x4f')](_0x46e1db(_0x282954,'CampaignId'))[_0xcf08('0x2b')](function(){})[_0xcf08('0x51')](_0x3053c0()));break;case _0xcf08('0x55'):_0x272803[_0xcf08('0x4d')](db[_0xcf08('0x4e')][_0xcf08('0x4f')](_0x5b1fc5(_0x282954,_0xcf08('0x56')))[_0xcf08('0x2b')](function(){})[_0xcf08('0x51')](_0x3053c0()));break;default:_0x272803[_0xcf08('0x4d')](db[_0xcf08('0x4e')][_0xcf08('0x4f')](_0x398351(_0x282954,_0xcf08('0x56')))['then'](function(){})[_0xcf08('0x51')](_0x3053c0()));}}}return _0x272803;})['all']();})[_0xcf08('0x2b')](function(){return db[_0xcf08('0x54')][_0xcf08('0x46')]({'attributes':['id'],'include':[{'model':db[_0xcf08('0x49')],'as':_0xcf08('0x53'),'where':{'id':LISTID}}]})[_0xcf08('0x2b')](function(_0x3e9dbb){var _0x1580a5=[];if(_0x3e9dbb){for(var _0x2ba86f=0x0,_0x5329a1;_0x2ba86f<_0x3e9dbb['length'];_0x2ba86f+=0x1){_0x5329a1=_0x3e9dbb[_0x2ba86f][_0xcf08('0x4b')]({'plain':!![]});_0x1580a5[_0xcf08('0x4d')](db['sequelize']['query'](_0x1c1394(_0x5329a1,_0xcf08('0x56')))['then'](function(){})[_0xcf08('0x51')](_0x3053c0()));}}return _0x1580a5;})[_0xcf08('0x52')]();})[_0xcf08('0x51')](function(_0xf559ed){logger['error']('cmContact,\x20%s,\x20%s',_0xcf08('0x57'),_0xf559ed[_0xcf08('0x1d')]);});}var processPromises=function(_0x21e00c){return BPromise[_0xcf08('0x52')](promises)[_0xcf08('0x2b')](function(_0x4411be){})[_0xcf08('0x51')](function(_0x463705){logger[_0xcf08('0x15')]('Error\x20processing\x20rows\x20block:',JSON[_0xcf08('0x58')](_0x463705));})[_0xcf08('0x59')](function(){socket['emit']('contact:csv_'+SOCKET_TIMESTAMP,{'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});promises=[];success=0x0;errors=0x0;duplicates=0x0;rows=[];if(_0x21e00c){return _0x21e00c[_0xcf08('0x5a')]();}});};var endCsv=function(){return BPromise['resolve']()[_0xcf08('0x2b')](function(){if(hopperContacts){return checkHopper();}})[_0xcf08('0x2b')](function(){socket[_0xcf08('0x5b')](_0xcf08('0x5c')+SOCKET_TIMESTAMP,{'finished':!![],'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});try{fs[_0xcf08('0x5d')](FILEPATH);}catch(_0x251eac){logger[_0xcf08('0x15')](_0xcf08('0x5e'),JSON['stringify'](_0x251eac));}finally{process[_0xcf08('0x5f')](0x0);}});};process['on']('SIGINT',function(){logger[_0xcf08('0x60')](_0xcf08('0x61'));endCsv();});function main(){return BPromise[_0xcf08('0x62')]()[_0xcf08('0x2b')](function(){if(DUPLICATES){DUPLICATES=DUPLICATES[_0xcf08('0x11')](',');return db[_0xcf08('0x29')][_0xcf08('0x46')]({'where':{'ListId':LISTID},'attributes':DUPLICATES,'raw':!![]});}})['then'](function(_0x3b687e){var _0x3321fb=fs[_0xcf08('0x63')](FILEPATH,{'highWaterMark':0xf*0x400*0x400});Papa['parse'](_0x3321fb,{'header':!![],'skipEmptyLines':!![],'step':function(_0x2202f3,_0x456f67){total+=0x1;var _0xa015f8=total;promises['push'](checkRow(_0x2202f3,_0x3b687e,_0xa015f8)['then'](function(){success+=0x1;})['catch'](function(_0x488236){if(_0x488236['error']){errors+=0x1;delete _0x488236[_0xcf08('0x15')];}else if(_0x488236[_0xcf08('0x64')]){duplicates+=0x1;delete _0x488236['duplicate'];}rows['push'](_0x488236);}));if(total%0xc8===0x0){_0x456f67['pause']();return processPromises(_0x456f67);}},'complete':function(){return processPromises()[_0xcf08('0x2b')](function(){logger[_0xcf08('0x60')](_0xcf08('0x65'));endCsv();});},'error':function(_0x4f4983,_0x422325){logger['info'](_0xcf08('0x66'),JSON[_0xcf08('0x58')](_0x4f4983));endCsv();}});})[_0xcf08('0x51')](function(_0x24d9ad){logger['error'](_0xcf08('0x67'),JSON['stringify'](_0x24d9ad));});}main();
\ No newline at end of file
index 124e64c..bf1cff6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf79a=['hasOwnProperty','push','scheduledat\x20wrong\x20format\x20(YYYY-MM-DD\x20HH:mm:ss)','priority','isNaN','includes','agent\x20not\x20exists','email','dateOfBirth','YYYY-MM-DD','dateOfBirth\x20wrong\x20format\x20(YYYY-MM-DD)','firstName','SystemRow','appendFileSync','emit','Abort\x20parser','abort','SystemError','step','duplicates','cm_contacts_','CREATE\x20TABLE\x20','\x20LIKE\x20cm_contacts;','format','LOAD\x20DATA\x20LOCAL\x20INFILE\x20\x27%s\x27\x20INTO\x20TABLE\x20%s\x20CHARACTER\x20SET\x20UTF8\x20FIELDS\x20TERMINATED\x20BY\x20\x27,\x27\x20ENCLOSED\x20BY\x20\x27\x22\x27\x20LINES\x20TERMINATED\x20BY\x20\x27\x0a\x27\x20IGNORE\x201\x20ROWS\x20(%s)\x20SET\x20id\x20=\x20NULL,\x20ListId\x20=\x20%s,\x20CompanyId\x20=\x20%s,\x20createdAt\x20=\x20\x27%s\x27,\x20updatedAt\x20=\x20\x27%s\x27',',\x20scheduledAt\x20=\x20NOW()','DROP\x20TABLE\x20','voice_queues_has_cm_lists','voice_queues','VoiceQueueId','voice_queues_has_cm_blacklists','campaigns_has_cm_lists','campaigns','CampaignId','each','then','finish','affectedRows','contact:import:','unlink','complete','argv','arguments\x20<filename>\x20<parameters>\x20<agents>','existsSync','binding\x20doesn\x27t\x20exists','phone\x20is\x20mandatory','firstName\x20is\x20mandatory','ListId\x20is\x20mandatory','body\x20id\x20mandatory','map','No\x20agent\x20available','SIGINT','uncaughtException','path','papaparse','bluebird','moment','squel','ioredis','../../../config/environment','../../../config/logger','redis','defaults','socket.io-emitter','test','select','field','phone','from','join','.id\x20=\x20','where','\x20=\x20','.dialCheckDuplicateType\x20IN\x20(','cm_contacts.phone','cm_contacts.id','cm_contacts.ListId','cm_contacts.createdAt','cm_contacts.updatedAt','cm_contacts.UserId','insert','into','fromQuery','scheduledat','ContactId','createdAt','UserId','recallme','fields','cm_contacts','cm_contacts.ListId\x20=\x20','.CmListId\x20=\x20?','cm_hopper','\x22onlyIfOpen\x22','cm_contacts.phone\x20NOT\x20IN\x20(?)','\x22always\x22','toString','cm_hopper_black','updatedAt','.CmListId','cm_contacts.createdAt\x20=\x20?','ListId\x20=\x20?','\x20=\x20?','keys','ListId','CompanyId',')\x20NOT\x20IN\x20?','id\x20IN\x20?','min_id','group','Received\x20SIGINT','error','message','exit','errors','code','info','sequelize','query','spread','catch','main','stringify','send','start','binding','socket_timestamp','writeFileSync','parse','data','length','rows'];(function(_0x57400a,_0x129cd2){var _0x53605d=function(_0x3cee92){while(--_0x3cee92){_0x57400a['push'](_0x57400a['shift']());}};_0x53605d(++_0x129cd2);}(_0xf79a,0x13d));var _0xaf79=function(_0x44cbec,_0x54df4d){_0x44cbec=_0x44cbec-0x0;var _0x59c77c=_0xf79a[_0x44cbec];return _0x59c77c;};'use strict';var fs=require('fs');var path=require(_0xaf79('0x0'));var _=require('lodash');var Papa=require(_0xaf79('0x1'));var util=require('util');var BPromise=require(_0xaf79('0x2'));var moment=require(_0xaf79('0x3'));var squel=require(_0xaf79('0x4'));var Redis=require(_0xaf79('0x5'));var db=require('../../../mysqldb')['db'];var config=require(_0xaf79('0x6'));var logger=require(_0xaf79('0x7'))('import');config[_0xaf79('0x8')]=_[_0xaf79('0x9')](config[_0xaf79('0x8')],{'host':'localhost','port':0x18eb});var socket=require(_0xaf79('0xa'))(new Redis(config[_0xaf79('0x8')]));var stats={'finish':![],'errors':[],'rows':0x0,'affectedRows':0x0};var results=[];var stopped=![];var NOW=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');function isEmail(_0x585f32){return/^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22))*\x40([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d))*$/[_0xaf79('0xb')](_0x585f32);}function selectNotIn(_0xad237d,_0x261e2f,_0x40b36d,_0x4283dc,_0x3ef566){return squel[_0xaf79('0xc')]()[_0xaf79('0xd')](_0xaf79('0xe'))[_0xaf79('0xf')](_0x4283dc)[_0xaf79('0x10')](_0x261e2f,null,_0x261e2f+_0xaf79('0x11')+_0x4283dc+'.'+_0x40b36d)[_0xaf79('0x12')](_0x4283dc+'.'+_0x40b36d+_0xaf79('0x13')+_0xad237d+'.'+_0x40b36d)['where'](_0x261e2f+_0xaf79('0x14')+_0x3ef566[_0xaf79('0x10')]()+')');}function insertCmHopper(_0x168a3a,_0x516b12,_0x35b976,_0x44c63a,_0x5e9fa1){var _0x564b21=[_0xaf79('0x15'),'cm_contacts.scheduledat',_0xaf79('0x16'),_0xaf79('0x17'),_0x516b12+'.'+_0x44c63a,_0xaf79('0x18'),_0xaf79('0x19'),'cm_contacts.priority',_0xaf79('0x1a'),'\x22'+_0x5e9fa1+'\x22'];return squel[_0xaf79('0x1b')]()[_0xaf79('0x1c')]('cm_hopper')[_0xaf79('0x1d')]([_0xaf79('0xe'),_0xaf79('0x1e'),_0xaf79('0x1f'),'ListId',_0x44c63a,_0xaf79('0x20'),'updatedAt','priority',_0xaf79('0x21'),_0xaf79('0x22')],squel[_0xaf79('0xc')]()[_0xaf79('0x23')](_0x564b21)[_0xaf79('0xf')](_0x516b12)[_0xaf79('0x10')](_0xaf79('0x24'),null,_0xaf79('0x25')+_0x516b12+'.CmListId')[_0xaf79('0x10')](_0x35b976,null,_0x35b976+_0xaf79('0x11')+_0x516b12+'.'+_0x44c63a)['where'](_0x516b12+_0xaf79('0x26'),_0x168a3a)[_0xaf79('0x12')]('cm_contacts.createdAt\x20=\x20?',NOW)[_0xaf79('0x12')]('cm_contacts.phone\x20NOT\x20IN\x20(?)',selectNotIn(_0x516b12,_0x35b976,_0x44c63a,_0xaf79('0x27'),['\x22always\x22',_0xaf79('0x28')]))['where'](_0xaf79('0x29'),selectNotIn(_0x516b12,_0x35b976,_0x44c63a,'cm_hopper',[_0xaf79('0x2a')])))[_0xaf79('0x2b')]();}function insertCmHopperBlack(_0x57cc66,_0x6e1086,_0x37dd0f,_0x44fa48){var _0x437f91=['cm_contacts.phone',_0xaf79('0x16'),_0xaf79('0x17'),_0x6e1086+'.'+_0x44fa48,_0xaf79('0x18'),_0xaf79('0x19')];return squel[_0xaf79('0x1b')]()[_0xaf79('0x1c')](_0xaf79('0x2c'))['fromQuery']([_0xaf79('0xe'),_0xaf79('0x1f'),'ListId',_0x44fa48,_0xaf79('0x20'),_0xaf79('0x2d')],squel[_0xaf79('0xc')]()[_0xaf79('0x23')](_0x437f91)[_0xaf79('0xf')](_0x6e1086)['join']('cm_contacts',null,'cm_contacts.ListId\x20=\x20'+_0x6e1086+_0xaf79('0x2e'))[_0xaf79('0x10')](_0x37dd0f,null,_0x37dd0f+_0xaf79('0x11')+_0x6e1086+'.'+_0x44fa48)['where'](_0x6e1086+_0xaf79('0x26'),_0x57cc66)[_0xaf79('0x12')](_0xaf79('0x2f'),NOW)['where'](_0xaf79('0x29'),squel[_0xaf79('0xc')]()[_0xaf79('0xd')](_0xaf79('0xe'))['from'](_0xaf79('0x2c'))[_0xaf79('0x12')](_0xaf79('0x30'),_0x57cc66)['where'](_0x44fa48+_0xaf79('0x31'),_0x6e1086+'.'+_0x44fa48)))[_0xaf79('0x2b')]();}function insertCmContact(_0x39a1af,_0x406f05,_0x1753b6,_0x3f82f7){var _0x54dbd1=_['concat'](_[_0xaf79('0x32')](_0x3f82f7),[_0xaf79('0x33'),_0xaf79('0x34'),'createdAt',_0xaf79('0x2d')]);return squel['insert']()['into'](_0xaf79('0x24'))['fromQuery'](_0x54dbd1,squel[_0xaf79('0xc')]()['fields'](_0x54dbd1)[_0xaf79('0xf')](_0x406f05)['where']('('+_0x1753b6[_0xaf79('0x10')](',')+_0xaf79('0x35'),squel['select']()[_0xaf79('0x23')](_0x1753b6)['from'](_0xaf79('0x24'))['where'](_0xaf79('0x30'),_0x39a1af))[_0xaf79('0x12')](_0xaf79('0x36'),squel[_0xaf79('0xc')]()[_0xaf79('0xd')]('MIN(id)',_0xaf79('0x37'))[_0xaf79('0xf')](_0x406f05)[_0xaf79('0x38')](_0x1753b6['join'](','))))['toString']();}function handleStop(){logger['info'](_0xaf79('0x39'));stopped=!![];}function handleUncaughtException(_0xadd703){logger[_0xaf79('0x3a')](_0xadd703[_0xaf79('0x3b')]);process[_0xaf79('0x3c')](0x1);}function handleError(_0x2c9422,_0x489fda){stats[_0xaf79('0x3d')]['push']({'name':_0x489fda[_0xaf79('0x3e')],'message':_0x489fda['message'],'row':_0x2c9422});}function handleQuery(_0x33db24){logger[_0xaf79('0x3f')](_0x33db24);return db[_0xaf79('0x40')][_0xaf79('0x41')](_0x33db24)[_0xaf79('0x42')](function(_0x5da796){results['push'](_0x5da796);})[_0xaf79('0x43')](function(_0x494bb1){logger[_0xaf79('0x3a')](_0x494bb1['message']);});}function main(_0x4a4519,_0x212e07,_0x48f7cf,_0x163de7){logger['info'](_0xaf79('0x44'),_0x4a4519,JSON[_0xaf79('0x45')](_0x212e07));process[_0xaf79('0x46')](_0xaf79('0x47'));var _0x55e656=_0x212e07[_0xaf79('0x48')];var _0x7eedf7=_0x212e07[_0xaf79('0x49')];var _0x4a40a3=path['join'](config['root'],'server/files/tmp',_0x7eedf7+'.csv');var _0x53ca37=_[_0xaf79('0x32')](_0x55e656)['join']();logger[_0xaf79('0x3f')]('header',_0x53ca37);fs[_0xaf79('0x4a')](_0x4a40a3,_0x53ca37+'\x0a');Papa[_0xaf79('0x4b')](fs['createReadStream'](_0x4a4519),{'header':!![],'skipEmptyLines':!![],'step':function(_0xdf0dec,_0x2777f7){try{for(var _0x1bb989=0x0,_0x3990aa=[];_0x1bb989<_0xdf0dec[_0xaf79('0x4c')][_0xaf79('0x4d')];_0x1bb989++){stats[_0xaf79('0x4e')]+=0x1;if(_0xdf0dec['errors'][_0x1bb989]){handleError(_0xdf0dec[_0xaf79('0x4c')][_0x1bb989],_0xdf0dec[_0xaf79('0x3d')][_0x1bb989]);}else{var _0xfe13fe=[];for(var _0x3d2f40 in _0x55e656){if(_0x55e656[_0xaf79('0x4f')](_0x3d2f40)){if(_0xdf0dec[_0xaf79('0x4c')][_0x1bb989][_0x55e656[_0x3d2f40]]){var _0x5c9e1b=_['trim'](_0xdf0dec[_0xaf79('0x4c')][_0x1bb989][_0x55e656[_0x3d2f40]]['replace'](/"/g,'\x27'));switch(_0x3d2f40){case _0xaf79('0x1e'):var _0x484113=moment(_0x5c9e1b,'YYYY-MM-DD\x20HH:mm:ss',!![]);if(_0x484113['isValid']()){_0x3990aa[_0xaf79('0x50')]('\x22'+_0x5c9e1b+'\x22');}else{_0xfe13fe[_0xaf79('0x50')](_0xaf79('0x51'));}break;case _0xaf79('0x52'):var _0x13d747=parseInt(_0x5c9e1b);_0x5c9e1b=_[_0xaf79('0x53')](_0x13d747)||_0x13d747<0x0||_0x13d747>0x4?_0x163de7?0x3:0x2:_0x13d747;_0x3990aa['push']('\x22'+_0x5c9e1b+'\x22');break;case _0xaf79('0x21'):var _0xdad488=parseInt(_0x5c9e1b);if(_['isNumber'](_0xdad488)&&_[_0xaf79('0x54')](_0x48f7cf,_0xdad488)){_0x3990aa['push']('\x22'+_0xdad488+'\x22');}else{_0xfe13fe[_0xaf79('0x50')](_0xaf79('0x55'));}break;case _0xaf79('0x56'):if(isEmail(_0x5c9e1b)){_0x3990aa[_0xaf79('0x50')]('\x22'+_0x5c9e1b+'\x22');}else{_0xfe13fe[_0xaf79('0x50')]('email\x20wrong\x20format');}break;case _0xaf79('0x57'):var _0x2b12a4=moment(_0x5c9e1b,_0xaf79('0x58'),!![]);if(_0x2b12a4['isValid']()){_0x3990aa[_0xaf79('0x50')]('\x22'+_0x5c9e1b+'\x22');}else{_0xfe13fe['push'](_0xaf79('0x59'));}break;default:_0x3990aa[_0xaf79('0x50')]('\x22'+_0x5c9e1b+'\x22');}}else{switch(_0x3d2f40){case _0xaf79('0x5a'):case _0xaf79('0xe'):_0xfe13fe['push'](_0x3d2f40+'\x20not\x20specified');break;default:_0x3990aa[_0xaf79('0x50')]('\x22\x22');}}}}if(_0xfe13fe['length']){handleError(_0xdf0dec[_0xaf79('0x4c')][_0x1bb989],{'code':_0xaf79('0x5b'),'message':_0xfe13fe['join']()});}else{fs[_0xaf79('0x5c')](_0x4a40a3,_0x3990aa[_0xaf79('0x10')]()+'\x0a');}_0x3990aa=[];}if(!(stats[_0xaf79('0x4e')]%0xc8)){socket[_0xaf79('0x5d')]('contact:import:'+_0x7eedf7,stats);stats[_0xaf79('0x3d')]=[];}}if(stopped){logger[_0xaf79('0x3f')](_0xaf79('0x5e'));_0x2777f7[_0xaf79('0x5f')]();}}catch(_0x191f8a){handleError(_0xdf0dec[_0xaf79('0x4c')][_0x1bb989],{'code':_0xaf79('0x60'),'message':_0x191f8a[_0xaf79('0x3b')]});logger[_0xaf79('0x3a')](_0xaf79('0x61'),_0x191f8a['message']);}},'complete':function(){try{var _0x194776=[];var _0x3367db='cm_contacts';if(_0x212e07['duplicates']&&_0x212e07[_0xaf79('0x62')][_0xaf79('0x4d')]){_0x3367db=_0xaf79('0x63')+_0x7eedf7;_0x194776[_0xaf79('0x50')](_0xaf79('0x64')+_0x3367db+_0xaf79('0x65'));}var _0x4ba1d2=util[_0xaf79('0x66')](_0xaf79('0x67'),_0x4a40a3,_0x3367db,_0x53ca37,_0x212e07[_0xaf79('0x33')],_0x212e07[_0xaf79('0x34')]||null,NOW,NOW);if(_['isNil'](_0x55e656[_0xaf79('0x1e')])){_0x4ba1d2+=_0xaf79('0x68');}_0x194776[_0xaf79('0x50')](_0x4ba1d2);if(_0x212e07[_0xaf79('0x62')]&&_0x212e07[_0xaf79('0x62')][_0xaf79('0x4d')]){_0x194776[_0xaf79('0x50')](insertCmContact(_0x212e07[_0xaf79('0x33')],_0x3367db,_0x212e07[_0xaf79('0x62')],_0x55e656));_0x194776['push'](_0xaf79('0x69')+_0x3367db+';');}_0x194776[_0xaf79('0x50')](insertCmHopper(_0x212e07[_0xaf79('0x33')],_0xaf79('0x6a'),_0xaf79('0x6b'),_0xaf79('0x6c'),_0x163de7));_0x194776[_0xaf79('0x50')](insertCmHopperBlack(_0x212e07[_0xaf79('0x33')],_0xaf79('0x6d'),_0xaf79('0x6b'),_0xaf79('0x6c')));_0x194776[_0xaf79('0x50')](insertCmHopper(_0x212e07[_0xaf79('0x33')],_0xaf79('0x6e'),_0xaf79('0x6f'),'CampaignId',_0x163de7));_0x194776[_0xaf79('0x50')](insertCmHopperBlack(_0x212e07[_0xaf79('0x33')],'campaigns_has_cm_blacklists','campaigns',_0xaf79('0x70')));BPromise[_0xaf79('0x71')](_0x194776,handleQuery)[_0xaf79('0x72')](function(_0x35d915){stats[_0xaf79('0x73')]=!![];stats[_0xaf79('0x74')]=_0x212e07['duplicates']&&_0x212e07[_0xaf79('0x62')][_0xaf79('0x4d')]?results[0x2][_0xaf79('0x74')]:results[0x0][_0xaf79('0x74')];socket[_0xaf79('0x5d')](_0xaf79('0x75')+_0x7eedf7,stats);fs[_0xaf79('0x76')](_0x4a4519);fs[_0xaf79('0x76')](_0x4a40a3);process[_0xaf79('0x3c')](0x0);})[_0xaf79('0x43')](function(_0x2b270a){logger[_0xaf79('0x3a')](_0x2b270a[_0xaf79('0x3b')]);process['exit'](0x1);});}catch(_0x19c508){logger[_0xaf79('0x3a')](_0xaf79('0x77'),_0x19c508['message']);process[_0xaf79('0x3c')](0x1);}},'error':function(_0x2d83f2,_0xbd9527,_0x212996,_0x918cbb){throw new Error(_0x918cbb);}});}function validate(){if(process[_0xaf79('0x78')]&&process[_0xaf79('0x78')][_0xaf79('0x4d')]<0x4){throw new Error(_0xaf79('0x79'));}var _0x468ff0=path[_0xaf79('0x10')](config['root'],'server/files/tmp',process[_0xaf79('0x78')][0x2]);if(!fs[_0xaf79('0x7a')](_0x468ff0)){throw new Error('file\x20doesn\x27t\x20exists');}var _0x31c795={};try{_0x31c795=JSON[_0xaf79('0x4b')](process[_0xaf79('0x78')][0x3]);if(!_0x31c795['binding']){throw new Error(_0xaf79('0x7b'));}if(!_0x31c795[_0xaf79('0x48')][_0xaf79('0xe')]){throw new Error(_0xaf79('0x7c'));}if(!_0x31c795[_0xaf79('0x48')][_0xaf79('0x5a')]){throw new Error(_0xaf79('0x7d'));}var _0x2f6000=0x0;if(_0x31c795[_0xaf79('0x48')][_0xaf79('0x21')]){_0x2f6000=0x1;}if(!_0x31c795[_0xaf79('0x33')]){throw new Error(_0xaf79('0x7e'));}}catch(_0x27a3a6){throw new Error(_0xaf79('0x7f'));}var _0x1ac3f3=[];try{_0x1ac3f3=_[_0xaf79('0x80')](JSON[_0xaf79('0x4b')](process[_0xaf79('0x78')][0x4]),'id');}catch(_0x1f37c7){logger[_0xaf79('0x3f')](_0xaf79('0x81'));}main(_0x468ff0,_0x31c795,_0x1ac3f3,_0x2f6000);}validate();process['on'](_0xaf79('0x82'),handleStop);process['on'](_0xaf79('0x83'),handleUncaughtException);
\ No newline at end of file
+var _0xea42=['cm_contacts.phone','cm_contacts.scheduledat','cm_contacts.id','cm_contacts.ListId','cm_contacts.createdAt','cm_contacts.updatedAt','cm_contacts.priority','insert','into','cm_hopper','scheduledat','ContactId','ListId','createdAt','updatedAt','UserId','recallme','fields','cm_contacts','cm_contacts.ListId\x20=\x20','.CmListId\x20=\x20?','cm_contacts.createdAt\x20=\x20?','cm_contacts.phone\x20NOT\x20IN\x20(?)','\x22onlyIfOpen\x22','\x22always\x22','toString','cm_hopper_black','fromQuery','.CmListId','field','ListId\x20=\x20?','concat','keys','CompanyId',')\x20NOT\x20IN\x20?','MIN(id)','min_id','info','error','exit','push','code','sequelize','query','spread','catch','main','stringify','send','socket_timestamp','root','server/files/tmp','.csv','header','writeFileSync','parse','createReadStream','data','length','rows','errors','trim','isValid','isNaN','isNumber','includes','agent\x20not\x20exists','firstName','SystemRow','appendFileSync','emit','contact:import:','Abort\x20parser','abort','SystemError','message','step','duplicates','cm_contacts_','CREATE\x20TABLE\x20','\x20LIKE\x20cm_contacts;','isNil','DROP\x20TABLE\x20','voice_queues','VoiceQueueId','campaigns_has_cm_lists','campaigns','CampaignId','each','finish','affectedRows','unlink','complete','argv','arguments\x20<filename>\x20<parameters>\x20<agents>','binding','binding\x20doesn\x27t\x20exists','firstName\x20is\x20mandatory','ListId\x20is\x20mandatory','body\x20id\x20mandatory','map','No\x20agent\x20available','SIGINT','path','lodash','papaparse','util','bluebird','moment','squel','ioredis','../../../config/environment','import','defaults','localhost','socket.io-emitter','format','YYYY-MM-DD\x20HH:mm:ss','test','select','phone','from','join','.id\x20=\x20','where','\x20=\x20','.dialCheckDuplicateType\x20IN\x20('];(function(_0x395a60,_0x545b3a){var _0x361b6f=function(_0x21d38a){while(--_0x21d38a){_0x395a60['push'](_0x395a60['shift']());}};_0x361b6f(++_0x545b3a);}(_0xea42,0x1e4));var _0x2ea4=function(_0x3d308c,_0x443813){_0x3d308c=_0x3d308c-0x0;var _0x166a2c=_0xea42[_0x3d308c];return _0x166a2c;};'use strict';var fs=require('fs');var path=require(_0x2ea4('0x0'));var _=require(_0x2ea4('0x1'));var Papa=require(_0x2ea4('0x2'));var util=require(_0x2ea4('0x3'));var BPromise=require(_0x2ea4('0x4'));var moment=require(_0x2ea4('0x5'));var squel=require(_0x2ea4('0x6'));var Redis=require(_0x2ea4('0x7'));var db=require('../../../mysqldb')['db'];var config=require(_0x2ea4('0x8'));var logger=require('../../../config/logger')(_0x2ea4('0x9'));config['redis']=_[_0x2ea4('0xa')](config['redis'],{'host':_0x2ea4('0xb'),'port':0x18eb});var socket=require(_0x2ea4('0xc'))(new Redis(config['redis']));var stats={'finish':![],'errors':[],'rows':0x0,'affectedRows':0x0};var results=[];var stopped=![];var NOW=moment()[_0x2ea4('0xd')](_0x2ea4('0xe'));function isEmail(_0x25294d){return/^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22))*\x40([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d))*$/[_0x2ea4('0xf')](_0x25294d);}function selectNotIn(_0x7c816d,_0x559b84,_0xbc812f,_0x507308,_0x59d1cd){return squel[_0x2ea4('0x10')]()['field'](_0x2ea4('0x11'))[_0x2ea4('0x12')](_0x507308)[_0x2ea4('0x13')](_0x559b84,null,_0x559b84+_0x2ea4('0x14')+_0x507308+'.'+_0xbc812f)[_0x2ea4('0x15')](_0x507308+'.'+_0xbc812f+_0x2ea4('0x16')+_0x7c816d+'.'+_0xbc812f)[_0x2ea4('0x15')](_0x559b84+_0x2ea4('0x17')+_0x59d1cd[_0x2ea4('0x13')]()+')');}function insertCmHopper(_0x34633c,_0x3b0418,_0x3f56e3,_0x76843a,_0x4eeebe){var _0x1b1817=[_0x2ea4('0x18'),_0x2ea4('0x19'),_0x2ea4('0x1a'),_0x2ea4('0x1b'),_0x3b0418+'.'+_0x76843a,_0x2ea4('0x1c'),_0x2ea4('0x1d'),_0x2ea4('0x1e'),'cm_contacts.UserId','\x22'+_0x4eeebe+'\x22'];return squel[_0x2ea4('0x1f')]()[_0x2ea4('0x20')](_0x2ea4('0x21'))['fromQuery']([_0x2ea4('0x11'),_0x2ea4('0x22'),_0x2ea4('0x23'),_0x2ea4('0x24'),_0x76843a,_0x2ea4('0x25'),_0x2ea4('0x26'),'priority',_0x2ea4('0x27'),_0x2ea4('0x28')],squel[_0x2ea4('0x10')]()[_0x2ea4('0x29')](_0x1b1817)[_0x2ea4('0x12')](_0x3b0418)['join'](_0x2ea4('0x2a'),null,_0x2ea4('0x2b')+_0x3b0418+'.CmListId')[_0x2ea4('0x13')](_0x3f56e3,null,_0x3f56e3+'.id\x20=\x20'+_0x3b0418+'.'+_0x76843a)[_0x2ea4('0x15')](_0x3b0418+_0x2ea4('0x2c'),_0x34633c)[_0x2ea4('0x15')](_0x2ea4('0x2d'),NOW)[_0x2ea4('0x15')](_0x2ea4('0x2e'),selectNotIn(_0x3b0418,_0x3f56e3,_0x76843a,_0x2ea4('0x21'),['\x22always\x22',_0x2ea4('0x2f')]))[_0x2ea4('0x15')]('cm_contacts.phone\x20NOT\x20IN\x20(?)',selectNotIn(_0x3b0418,_0x3f56e3,_0x76843a,_0x2ea4('0x21'),[_0x2ea4('0x30')])))[_0x2ea4('0x31')]();}function insertCmHopperBlack(_0x351275,_0x199fe9,_0x522352,_0x2f9ec7){var _0x2ba418=[_0x2ea4('0x18'),'cm_contacts.id','cm_contacts.ListId',_0x199fe9+'.'+_0x2f9ec7,'cm_contacts.createdAt',_0x2ea4('0x1d')];return squel[_0x2ea4('0x1f')]()[_0x2ea4('0x20')](_0x2ea4('0x32'))[_0x2ea4('0x33')]([_0x2ea4('0x11'),_0x2ea4('0x23'),_0x2ea4('0x24'),_0x2f9ec7,_0x2ea4('0x25'),_0x2ea4('0x26')],squel[_0x2ea4('0x10')]()[_0x2ea4('0x29')](_0x2ba418)[_0x2ea4('0x12')](_0x199fe9)[_0x2ea4('0x13')](_0x2ea4('0x2a'),null,'cm_contacts.ListId\x20=\x20'+_0x199fe9+_0x2ea4('0x34'))[_0x2ea4('0x13')](_0x522352,null,_0x522352+'.id\x20=\x20'+_0x199fe9+'.'+_0x2f9ec7)['where'](_0x199fe9+_0x2ea4('0x2c'),_0x351275)[_0x2ea4('0x15')](_0x2ea4('0x2d'),NOW)[_0x2ea4('0x15')](_0x2ea4('0x2e'),squel['select']()[_0x2ea4('0x35')](_0x2ea4('0x11'))['from'](_0x2ea4('0x32'))[_0x2ea4('0x15')](_0x2ea4('0x36'),_0x351275)[_0x2ea4('0x15')](_0x2f9ec7+'\x20=\x20?',_0x199fe9+'.'+_0x2f9ec7)))[_0x2ea4('0x31')]();}function insertCmContact(_0x2e224b,_0x456e06,_0x3c7f8e,_0x29e52d){var _0x5bf58f=_[_0x2ea4('0x37')](_[_0x2ea4('0x38')](_0x29e52d),['ListId',_0x2ea4('0x39'),_0x2ea4('0x25'),_0x2ea4('0x26')]);return squel[_0x2ea4('0x1f')]()[_0x2ea4('0x20')](_0x2ea4('0x2a'))[_0x2ea4('0x33')](_0x5bf58f,squel['select']()[_0x2ea4('0x29')](_0x5bf58f)['from'](_0x456e06)[_0x2ea4('0x15')]('('+_0x3c7f8e['join'](',')+_0x2ea4('0x3a'),squel['select']()[_0x2ea4('0x29')](_0x3c7f8e)['from']('cm_contacts')[_0x2ea4('0x15')](_0x2ea4('0x36'),_0x2e224b))[_0x2ea4('0x15')]('id\x20IN\x20?',squel[_0x2ea4('0x10')]()['field'](_0x2ea4('0x3b'),_0x2ea4('0x3c'))[_0x2ea4('0x12')](_0x456e06)['group'](_0x3c7f8e['join'](','))))[_0x2ea4('0x31')]();}function handleStop(){logger[_0x2ea4('0x3d')]('Received\x20SIGINT');stopped=!![];}function handleUncaughtException(_0x18cd91){logger[_0x2ea4('0x3e')](_0x18cd91['message']);process[_0x2ea4('0x3f')](0x1);}function handleError(_0x382d1b,_0x5a7f38){stats['errors'][_0x2ea4('0x40')]({'name':_0x5a7f38[_0x2ea4('0x41')],'message':_0x5a7f38['message'],'row':_0x382d1b});}function handleQuery(_0x2f721a){logger[_0x2ea4('0x3d')](_0x2f721a);return db[_0x2ea4('0x42')][_0x2ea4('0x43')](_0x2f721a)[_0x2ea4('0x44')](function(_0x4c1d88){results[_0x2ea4('0x40')](_0x4c1d88);})[_0x2ea4('0x45')](function(_0x412eab){logger[_0x2ea4('0x3e')](_0x412eab['message']);});}function main(_0x51d46a,_0xaac3c1,_0x18e2f7,_0x3b1123){logger[_0x2ea4('0x3d')](_0x2ea4('0x46'),_0x51d46a,JSON[_0x2ea4('0x47')](_0xaac3c1));process[_0x2ea4('0x48')]('start');var _0x550d0f=_0xaac3c1['binding'];var _0x1c906a=_0xaac3c1[_0x2ea4('0x49')];var _0x59aa01=path['join'](config[_0x2ea4('0x4a')],_0x2ea4('0x4b'),_0x1c906a+_0x2ea4('0x4c'));var _0x4ddab6=_[_0x2ea4('0x38')](_0x550d0f)[_0x2ea4('0x13')]();logger[_0x2ea4('0x3d')](_0x2ea4('0x4d'),_0x4ddab6);fs[_0x2ea4('0x4e')](_0x59aa01,_0x4ddab6+'\x0a');Papa[_0x2ea4('0x4f')](fs[_0x2ea4('0x50')](_0x51d46a),{'header':!![],'skipEmptyLines':!![],'step':function(_0x9032cf,_0x120105){try{for(var _0x43e45d=0x0,_0x27ab15=[];_0x43e45d<_0x9032cf[_0x2ea4('0x51')][_0x2ea4('0x52')];_0x43e45d++){stats[_0x2ea4('0x53')]+=0x1;if(_0x9032cf[_0x2ea4('0x54')][_0x43e45d]){handleError(_0x9032cf[_0x2ea4('0x51')][_0x43e45d],_0x9032cf[_0x2ea4('0x54')][_0x43e45d]);}else{var _0x9bc94=[];for(var _0x428fd8 in _0x550d0f){if(_0x550d0f['hasOwnProperty'](_0x428fd8)){if(_0x9032cf[_0x2ea4('0x51')][_0x43e45d][_0x550d0f[_0x428fd8]]){var _0x180fd3=_[_0x2ea4('0x55')](_0x9032cf[_0x2ea4('0x51')][_0x43e45d][_0x550d0f[_0x428fd8]]['replace'](/"/g,'\x27'));switch(_0x428fd8){case _0x2ea4('0x22'):var _0x59d192=moment(_0x180fd3,'YYYY-MM-DD\x20HH:mm:ss',!![]);if(_0x59d192[_0x2ea4('0x56')]()){_0x27ab15['push']('\x22'+_0x180fd3+'\x22');}else{_0x9bc94['push']('scheduledat\x20wrong\x20format\x20(YYYY-MM-DD\x20HH:mm:ss)');}break;case'priority':var _0x13ea1a=parseInt(_0x180fd3);_0x180fd3=_[_0x2ea4('0x57')](_0x13ea1a)||_0x13ea1a<0x0||_0x13ea1a>0x4?_0x3b1123?0x3:0x2:_0x13ea1a;_0x27ab15[_0x2ea4('0x40')]('\x22'+_0x180fd3+'\x22');break;case _0x2ea4('0x27'):var _0x21a97a=parseInt(_0x180fd3);if(_[_0x2ea4('0x58')](_0x21a97a)&&_[_0x2ea4('0x59')](_0x18e2f7,_0x21a97a)){_0x27ab15[_0x2ea4('0x40')]('\x22'+_0x21a97a+'\x22');}else{_0x9bc94[_0x2ea4('0x40')](_0x2ea4('0x5a'));}break;case'email':if(isEmail(_0x180fd3)){_0x27ab15[_0x2ea4('0x40')]('\x22'+_0x180fd3+'\x22');}else{_0x9bc94[_0x2ea4('0x40')]('email\x20wrong\x20format');}break;case'dateOfBirth':var _0xcb67cc=moment(_0x180fd3,'YYYY-MM-DD',!![]);if(_0xcb67cc['isValid']()){_0x27ab15[_0x2ea4('0x40')]('\x22'+_0x180fd3+'\x22');}else{_0x9bc94[_0x2ea4('0x40')]('dateOfBirth\x20wrong\x20format\x20(YYYY-MM-DD)');}break;default:_0x27ab15['push']('\x22'+_0x180fd3+'\x22');}}else{switch(_0x428fd8){case _0x2ea4('0x5b'):case _0x2ea4('0x11'):_0x9bc94['push'](_0x428fd8+'\x20not\x20specified');break;default:_0x27ab15[_0x2ea4('0x40')]('\x22\x22');}}}}if(_0x9bc94['length']){handleError(_0x9032cf['data'][_0x43e45d],{'code':_0x2ea4('0x5c'),'message':_0x9bc94[_0x2ea4('0x13')]()});}else{fs[_0x2ea4('0x5d')](_0x59aa01,_0x27ab15[_0x2ea4('0x13')]()+'\x0a');}_0x27ab15=[];}if(!(stats[_0x2ea4('0x53')]%0xc8)){socket[_0x2ea4('0x5e')](_0x2ea4('0x5f')+_0x1c906a,stats);stats[_0x2ea4('0x54')]=[];}}if(stopped){logger[_0x2ea4('0x3d')](_0x2ea4('0x60'));_0x120105[_0x2ea4('0x61')]();}}catch(_0x15ba0a){handleError(_0x9032cf['data'][_0x43e45d],{'code':_0x2ea4('0x62'),'message':_0x15ba0a[_0x2ea4('0x63')]});logger[_0x2ea4('0x3e')](_0x2ea4('0x64'),_0x15ba0a['message']);}},'complete':function(){try{var _0x320878=[];var _0x2a2893=_0x2ea4('0x2a');if(_0xaac3c1['duplicates']&&_0xaac3c1[_0x2ea4('0x65')][_0x2ea4('0x52')]){_0x2a2893=_0x2ea4('0x66')+_0x1c906a;_0x320878[_0x2ea4('0x40')](_0x2ea4('0x67')+_0x2a2893+_0x2ea4('0x68'));}var _0x35878a=util[_0x2ea4('0xd')]('LOAD\x20DATA\x20LOCAL\x20INFILE\x20\x27%s\x27\x20INTO\x20TABLE\x20%s\x20CHARACTER\x20SET\x20UTF8\x20FIELDS\x20TERMINATED\x20BY\x20\x27,\x27\x20ENCLOSED\x20BY\x20\x27\x22\x27\x20LINES\x20TERMINATED\x20BY\x20\x27\x0a\x27\x20IGNORE\x201\x20ROWS\x20(%s)\x20SET\x20id\x20=\x20NULL,\x20ListId\x20=\x20%s,\x20CompanyId\x20=\x20%s,\x20createdAt\x20=\x20\x27%s\x27,\x20updatedAt\x20=\x20\x27%s\x27',_0x59aa01,_0x2a2893,_0x4ddab6,_0xaac3c1['ListId'],_0xaac3c1[_0x2ea4('0x39')]||null,NOW,NOW);if(_[_0x2ea4('0x69')](_0x550d0f[_0x2ea4('0x22')])){_0x35878a+=',\x20scheduledAt\x20=\x20NOW()';}_0x320878[_0x2ea4('0x40')](_0x35878a);if(_0xaac3c1[_0x2ea4('0x65')]&&_0xaac3c1[_0x2ea4('0x65')]['length']){_0x320878['push'](insertCmContact(_0xaac3c1[_0x2ea4('0x24')],_0x2a2893,_0xaac3c1[_0x2ea4('0x65')],_0x550d0f));_0x320878[_0x2ea4('0x40')](_0x2ea4('0x6a')+_0x2a2893+';');}_0x320878[_0x2ea4('0x40')](insertCmHopper(_0xaac3c1[_0x2ea4('0x24')],'voice_queues_has_cm_lists',_0x2ea4('0x6b'),'VoiceQueueId',_0x3b1123));_0x320878[_0x2ea4('0x40')](insertCmHopperBlack(_0xaac3c1[_0x2ea4('0x24')],'voice_queues_has_cm_blacklists',_0x2ea4('0x6b'),_0x2ea4('0x6c')));_0x320878[_0x2ea4('0x40')](insertCmHopper(_0xaac3c1[_0x2ea4('0x24')],_0x2ea4('0x6d'),'campaigns','CampaignId',_0x3b1123));_0x320878[_0x2ea4('0x40')](insertCmHopperBlack(_0xaac3c1[_0x2ea4('0x24')],'campaigns_has_cm_blacklists',_0x2ea4('0x6e'),_0x2ea4('0x6f')));BPromise[_0x2ea4('0x70')](_0x320878,handleQuery)['then'](function(_0x5b2941){stats[_0x2ea4('0x71')]=!![];stats[_0x2ea4('0x72')]=_0xaac3c1[_0x2ea4('0x65')]&&_0xaac3c1[_0x2ea4('0x65')][_0x2ea4('0x52')]?results[0x2][_0x2ea4('0x72')]:results[0x0][_0x2ea4('0x72')];socket[_0x2ea4('0x5e')](_0x2ea4('0x5f')+_0x1c906a,stats);fs['unlink'](_0x51d46a);fs[_0x2ea4('0x73')](_0x59aa01);process['exit'](0x0);})[_0x2ea4('0x45')](function(_0x4d28af){logger['error'](_0x4d28af[_0x2ea4('0x63')]);process[_0x2ea4('0x3f')](0x1);});}catch(_0x5cc593){logger['error'](_0x2ea4('0x74'),_0x5cc593[_0x2ea4('0x63')]);process[_0x2ea4('0x3f')](0x1);}},'error':function(_0x15478d,_0x4e1cda,_0x44873b,_0x419dbd){throw new Error(_0x419dbd);}});}function validate(){if(process[_0x2ea4('0x75')]&&process[_0x2ea4('0x75')][_0x2ea4('0x52')]<0x4){throw new Error(_0x2ea4('0x76'));}var _0x6101f3=path[_0x2ea4('0x13')](config[_0x2ea4('0x4a')],_0x2ea4('0x4b'),process[_0x2ea4('0x75')][0x2]);if(!fs['existsSync'](_0x6101f3)){throw new Error('file\x20doesn\x27t\x20exists');}var _0x3215be={};try{_0x3215be=JSON['parse'](process[_0x2ea4('0x75')][0x3]);if(!_0x3215be[_0x2ea4('0x77')]){throw new Error(_0x2ea4('0x78'));}if(!_0x3215be[_0x2ea4('0x77')][_0x2ea4('0x11')]){throw new Error('phone\x20is\x20mandatory');}if(!_0x3215be[_0x2ea4('0x77')][_0x2ea4('0x5b')]){throw new Error(_0x2ea4('0x79'));}var _0x58ffb8=0x0;if(_0x3215be[_0x2ea4('0x77')]['UserId']){_0x58ffb8=0x1;}if(!_0x3215be[_0x2ea4('0x24')]){throw new Error(_0x2ea4('0x7a'));}}catch(_0x58af66){throw new Error(_0x2ea4('0x7b'));}var _0x2e2a99=[];try{_0x2e2a99=_[_0x2ea4('0x7c')](JSON['parse'](process[_0x2ea4('0x75')][0x4]),'id');}catch(_0x360845){logger['info'](_0x2ea4('0x7d'));}main(_0x6101f3,_0x3215be,_0x2e2a99,_0x58ffb8);}validate();process['on'](_0x2ea4('0x7e'),handleStop);process['on']('uncaughtException',handleUncaughtException);
\ No newline at end of file
index 5869285..859c676 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2ef3=['destexten','queue','UniqueId','Date','***\x20Agent\x20Info\x20***','Agent\x20Name','destcalleridname','Agent\x20Number','Agent\x20Ring','agentcalledAt','Agent\x20Connect','Agent\x20Complete','Hold\x20Time','Talk\x20Time','talktime','***\x20Call\x20Info\x20***','Called\x20Number','membername','uniqueid','starttime','***\x20Time\x20Info\x20***','Answer\x20Time','endtime','Duration','duration','Billable\x20Time','getSubjects','string','[xCALLY\x20Ticket]','voice','toLowerCase','push','variable','calleridnum','outbound','Outbound\x20Call','destcalleridnum','getDescriptions','keyValue','Call\x20To'];(function(_0x548c25,_0x37a1ba){var _0x3d338e=function(_0x5af9c2){while(--_0x5af9c2){_0x548c25['push'](_0x548c25['shift']());}};_0x3d338e(++_0x37a1ba);}(_0x2ef3,0xba));var _0x32ef=function(_0x3592b3,_0x22151b){_0x3592b3=_0x3592b3-0x0;var _0x3d495d=_0x2ef3[_0x3592b3];return _0x3d495d;};'use strict';exports[_0x32ef('0x0')]=function(_0x11c049,_0x47513a){var _0x26e56e=[{'type':_0x32ef('0x1'),'content':_0x32ef('0x2'),'variableName':null}];switch(_0x11c049['toLowerCase']()){case _0x32ef('0x3'):switch(_0x47513a[_0x32ef('0x4')]()){case'inbound':_0x26e56e[_0x32ef('0x5')]({'type':_0x32ef('0x6'),'content':'','variableName':'queue'});_0x26e56e['push']({'type':_0x32ef('0x6'),'content':'','variableName':_0x32ef('0x7')});break;case _0x32ef('0x8'):_0x26e56e[_0x32ef('0x5')]({'type':_0x32ef('0x1'),'content':_0x32ef('0x9'),'variableName':null});_0x26e56e[_0x32ef('0x5')]({'type':_0x32ef('0x6'),'content':'','variableName':_0x32ef('0xa')});break;}}return _0x26e56e;};exports[_0x32ef('0xb')]=function(_0x56eb42,_0x5780e9){var _0x401d0b=[];switch(_0x56eb42[_0x32ef('0x4')]()){case _0x32ef('0x3'):switch(_0x5780e9[_0x32ef('0x4')]()){case'inbound':_0x401d0b=[{'type':_0x32ef('0x1'),'content':'***\x20Call\x20Info\x20***','key':null,'keyType':null,'variableName':null},{'type':_0x32ef('0xc'),'content':'','key':'Caller\x20Number','keyType':_0x32ef('0x6'),'variableName':_0x32ef('0x7')},{'type':'keyValue','content':'','key':'Caller\x20Name','keyType':_0x32ef('0x6'),'variableName':'calleridname'},{'type':_0x32ef('0xc'),'content':'','key':_0x32ef('0xd'),'keyType':_0x32ef('0x6'),'variableName':_0x32ef('0xe')},{'type':'keyValue','content':'','key':'Queue','keyType':'variable','variableName':_0x32ef('0xf')},{'type':_0x32ef('0xc'),'content':'','key':_0x32ef('0x10'),'keyType':'variable','variableName':'uniqueid'},{'type':_0x32ef('0xc'),'content':'','key':_0x32ef('0x11'),'keyType':_0x32ef('0x6'),'variableName':'agentcalledAt'},{'type':_0x32ef('0x1'),'content':_0x32ef('0x12'),'key':null,'keyType':null,'variableName':null},{'type':'keyValue','content':'','key':_0x32ef('0x13'),'keyType':_0x32ef('0x6'),'variableName':_0x32ef('0x14')},{'type':_0x32ef('0xc'),'content':'','key':_0x32ef('0x15'),'keyType':_0x32ef('0x6'),'variableName':'destcalleridnum'},{'type':_0x32ef('0x1'),'content':'***\x20Time\x20Info\x20***','key':null,'keyType':null,'variableName':null},{'type':_0x32ef('0xc'),'content':'','key':_0x32ef('0x16'),'keyType':'variable','variableName':_0x32ef('0x17')},{'type':_0x32ef('0xc'),'content':'','key':_0x32ef('0x18'),'keyType':'variable','variableName':'agentconnectAt'},{'type':_0x32ef('0xc'),'content':'','key':_0x32ef('0x19'),'keyType':_0x32ef('0x6'),'variableName':'agentcompleteAt'},{'type':'keyValue','content':'','key':_0x32ef('0x1a'),'keyType':'variable','variableName':'holdtime'},{'type':_0x32ef('0xc'),'content':'','key':_0x32ef('0x1b'),'keyType':_0x32ef('0x6'),'variableName':_0x32ef('0x1c')}];break;case _0x32ef('0x8'):_0x401d0b=[{'type':_0x32ef('0x1'),'content':_0x32ef('0x1d'),'variableName':null},{'type':_0x32ef('0xc'),'content':'','key':_0x32ef('0x1e'),'keyType':_0x32ef('0x6'),'keyContent':'','variableName':_0x32ef('0xa')},{'type':_0x32ef('0xc'),'content':'','key':'Member\x20Name','keyType':_0x32ef('0x6'),'keyContent':'','variableName':_0x32ef('0x1f')},{'type':'keyValue','content':'','key':_0x32ef('0x10'),'keyType':_0x32ef('0x6'),'keyContent':'','variableName':_0x32ef('0x20')},{'type':_0x32ef('0xc'),'content':'','key':'Date','keyType':_0x32ef('0x6'),'keyContent':'','variableName':_0x32ef('0x21')},{'type':_0x32ef('0x1'),'content':_0x32ef('0x22')},{'type':_0x32ef('0xc'),'content':'','key':_0x32ef('0x23'),'keyType':_0x32ef('0x6'),'keyContent':'','variableName':'answertime'},{'type':_0x32ef('0xc'),'content':'','key':'Complete\x20Time','keyType':_0x32ef('0x6'),'keyContent':'','variableName':_0x32ef('0x24')},{'type':'keyValue','content':'','key':_0x32ef('0x25'),'keyType':_0x32ef('0x6'),'keyContent':'','variableName':_0x32ef('0x26')},{'type':_0x32ef('0xc'),'content':'','key':_0x32ef('0x27'),'keyType':'variable','keyContent':'','variableName':'billableseconds'}];break;}}return _0x401d0b;};
\ No newline at end of file
+var _0x5f2f=['Call\x20To','destexten','Queue','UniqueId','uniqueid','Date','agentcalledAt','***\x20Agent\x20Info\x20***','Agent\x20Name','destcalleridname','Agent\x20Ring','agentconnectAt','Agent\x20Complete','Hold\x20Time','holdtime','Talk\x20Time','talktime','outbound','Called\x20Number','Member\x20Name','starttime','***\x20Time\x20Info\x20***','endtime','Duration','duration','Billable\x20Time','billableseconds','getSubjects','string','[xCALLY\x20Ticket]','toLowerCase','voice','push','variable','queue','calleridnum','Outbound\x20Call','destcalleridnum','getDescriptions','***\x20Call\x20Info\x20***','keyValue','Caller\x20Number','Caller\x20Name','calleridname'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x5f2f,0x73));var _0xf5f2=function(_0xa8ec52,_0x7ed88f){_0xa8ec52=_0xa8ec52-0x0;var _0x575bcf=_0x5f2f[_0xa8ec52];return _0x575bcf;};'use strict';exports[_0xf5f2('0x0')]=function(_0x423dd9,_0x2dcf60){var _0x1a7be1=[{'type':_0xf5f2('0x1'),'content':_0xf5f2('0x2'),'variableName':null}];switch(_0x423dd9[_0xf5f2('0x3')]()){case _0xf5f2('0x4'):switch(_0x2dcf60['toLowerCase']()){case'inbound':_0x1a7be1[_0xf5f2('0x5')]({'type':_0xf5f2('0x6'),'content':'','variableName':_0xf5f2('0x7')});_0x1a7be1[_0xf5f2('0x5')]({'type':_0xf5f2('0x6'),'content':'','variableName':_0xf5f2('0x8')});break;case'outbound':_0x1a7be1[_0xf5f2('0x5')]({'type':_0xf5f2('0x1'),'content':_0xf5f2('0x9'),'variableName':null});_0x1a7be1['push']({'type':_0xf5f2('0x6'),'content':'','variableName':_0xf5f2('0xa')});break;}}return _0x1a7be1;};exports[_0xf5f2('0xb')]=function(_0x4e0e6b,_0x977a59){var _0x4ebbbe=[];switch(_0x4e0e6b['toLowerCase']()){case _0xf5f2('0x4'):switch(_0x977a59[_0xf5f2('0x3')]()){case'inbound':_0x4ebbbe=[{'type':_0xf5f2('0x1'),'content':_0xf5f2('0xc'),'key':null,'keyType':null,'variableName':null},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0xe'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x8')},{'type':'keyValue','content':'','key':_0xf5f2('0xf'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x10')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x11'),'keyType':'variable','variableName':_0xf5f2('0x12')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x13'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x7')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x14'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x15')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x16'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x17')},{'type':_0xf5f2('0x1'),'content':_0xf5f2('0x18'),'key':null,'keyType':null,'variableName':null},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x19'),'keyType':'variable','variableName':_0xf5f2('0x1a')},{'type':_0xf5f2('0xd'),'content':'','key':'Agent\x20Number','keyType':'variable','variableName':_0xf5f2('0xa')},{'type':_0xf5f2('0x1'),'content':'***\x20Time\x20Info\x20***','key':null,'keyType':null,'variableName':null},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x1b'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x17')},{'type':_0xf5f2('0xd'),'content':'','key':'Agent\x20Connect','keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x1c')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x1d'),'keyType':_0xf5f2('0x6'),'variableName':'agentcompleteAt'},{'type':'keyValue','content':'','key':_0xf5f2('0x1e'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x1f')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x20'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x21')}];break;case _0xf5f2('0x22'):_0x4ebbbe=[{'type':_0xf5f2('0x1'),'content':'***\x20Call\x20Info\x20***','variableName':null},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x23'),'keyType':_0xf5f2('0x6'),'keyContent':'','variableName':_0xf5f2('0xa')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x24'),'keyType':'variable','keyContent':'','variableName':'membername'},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x14'),'keyType':_0xf5f2('0x6'),'keyContent':'','variableName':'uniqueid'},{'type':'keyValue','content':'','key':_0xf5f2('0x16'),'keyType':_0xf5f2('0x6'),'keyContent':'','variableName':_0xf5f2('0x25')},{'type':_0xf5f2('0x1'),'content':_0xf5f2('0x26')},{'type':'keyValue','content':'','key':'Answer\x20Time','keyType':_0xf5f2('0x6'),'keyContent':'','variableName':'answertime'},{'type':_0xf5f2('0xd'),'content':'','key':'Complete\x20Time','keyType':_0xf5f2('0x6'),'keyContent':'','variableName':_0xf5f2('0x27')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x28'),'keyType':_0xf5f2('0x6'),'keyContent':'','variableName':_0xf5f2('0x29')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x2a'),'keyType':'variable','keyContent':'','variableName':_0xf5f2('0x2b')}];break;}}return _0x4ebbbe;};
\ No newline at end of file
index 874c5f2..02ec564 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf7d1=['[%s]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','toUpperCase','name','role','null','Interaction','findOne','then','update','info','catch','error','tracked','user','query','body','omit','html','fax','mobile','lodash','../../mysqldb','../../config/logger','openchannel-interactions','mail-interactions','fax-interactions','sms-interactions','chat-interactions','upperFirst','InteractionId','unknown'];(function(_0x3f52d9,_0x1d748c){var _0x21e01f=function(_0x22e584){while(--_0x22e584){_0x3f52d9['push'](_0x3f52d9['shift']());}};_0x21e01f(++_0x1d748c);}(_0xf7d1,0x71));var _0x1f7d=function(_0x31e78a,_0x345eab){_0x31e78a=_0x31e78a-0x0;var _0xa87cd8=_0xf7d1[_0x31e78a];return _0xa87cd8;};'use strict';var _=require(_0x1f7d('0x0'));var db=require(_0x1f7d('0x1'))['db'];var loggers={'openchannel':require(_0x1f7d('0x2'))(_0x1f7d('0x3')),'mail':require('../../config/logger')(_0x1f7d('0x4')),'fax':require(_0x1f7d('0x2'))(_0x1f7d('0x5')),'sms':require(_0x1f7d('0x2'))(_0x1f7d('0x6')),'chat':require('../../config/logger')(_0x1f7d('0x7'))};function getInteractionId(_0x20ae9d,_0x60b517,_0x23b80e){if(_0x20ae9d&&_0x20ae9d[_[_0x1f7d('0x8')](_0x23b80e)+_0x1f7d('0x9')]){return _0x20ae9d[_['upperFirst'](_0x23b80e)+'InteractionId'];}else if(_0x20ae9d&&_0x20ae9d['id']){return _0x20ae9d['id'];}else if(_0x60b517&&_0x60b517['id']){return _0x60b517['id'];}else{return _0x1f7d('0xa');}}function log(_0x113af7,_0x2d7771,_0x501ce9,_0x3082e4,_0x4ff866,_0xcd642f){loggers[_0x4ff866['toLowerCase']()][_0x113af7](_0x1f7d('0xb'),_0xcd642f[_0x1f7d('0xc')](),_0x2d7771?_0x2d7771['id']:null,_0x2d7771?_0x2d7771[_0x1f7d('0xd')]:null,_0x2d7771?_0x2d7771[_0x1f7d('0xe')]:null,getInteractionId(_0x501ce9,_0x3082e4,_0x4ff866),_0x501ce9?JSON['stringify'](_0x501ce9):_0x1f7d('0xf'));}function updateUser(_0x38963d,_0xbd530e,_0x1cb53c,_0x29d986,_0x123f93){db[_[_0x1f7d('0x8')](_0x29d986)+_0x1f7d('0x10')][_0x1f7d('0x11')]({'where':{'id':getInteractionId(_0xbd530e,_0x1cb53c,_0x29d986)}})[_0x1f7d('0x12')](function(_0x5bacae){if(_0x5bacae){return _0x5bacae[_0x1f7d('0x13')]({'UserId':_0x38963d?_0x38963d['id']:null});}})['then'](function(_0x50f643){if(_0x50f643){log(_0x1f7d('0x14'),_0x38963d,_0xbd530e,_0x1cb53c,_0x29d986,_0x123f93);}})[_0x1f7d('0x15')](function(){log(_0x1f7d('0x16'),_0x38963d,_0xbd530e,_0x1cb53c,_0x29d986,_0x123f93);});}exports[_0x1f7d('0x17')]=function(_0x4fbf51,_0x5e64b4){return function(_0x547ae5,_0x43da10,_0x54db5a){var _0x3923df=_0x547ae5[_0x1f7d('0x18')];var _0x495f61={};var _0x2f110d=_0x547ae5[_0x1f7d('0x19')];if(_0x495f61){_0x495f61=_['clone'](_0x547ae5[_0x1f7d('0x1a')]);_0x495f61=_[_0x1f7d('0x1b')](_0x495f61,[_0x1f7d('0x1a'),_0x1f7d('0x1c'),'phone',_0x1f7d('0x1d'),_0x1f7d('0x1e')]);}updateUser(_0x3923df,_0x495f61,_0x2f110d,_0x4fbf51,_0x5e64b4);_0x54db5a(null);};};
\ No newline at end of file
+var _0x15f5=['InteractionId','unknown','[%s]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','name','role','stringify','null','findOne','then','update','info','catch','tracked','user','clone','body','omit','html','fax','lodash','../../mysqldb','../../config/logger','openchannel-interactions','sms-interactions','upperFirst'];(function(_0x512206,_0x39f827){var _0x2da32d=function(_0x32473c){while(--_0x32473c){_0x512206['push'](_0x512206['shift']());}};_0x2da32d(++_0x39f827);}(_0x15f5,0x77));var _0x515f=function(_0x4d61e3,_0x2e0288){_0x4d61e3=_0x4d61e3-0x0;var _0x32bc76=_0x15f5[_0x4d61e3];return _0x32bc76;};'use strict';var _=require(_0x515f('0x0'));var db=require(_0x515f('0x1'))['db'];var loggers={'openchannel':require(_0x515f('0x2'))(_0x515f('0x3')),'mail':require(_0x515f('0x2'))('mail-interactions'),'fax':require('../../config/logger')('fax-interactions'),'sms':require(_0x515f('0x2'))(_0x515f('0x4')),'chat':require('../../config/logger')('chat-interactions')};function getInteractionId(_0x20a043,_0x5d7e67,_0x170f91){if(_0x20a043&&_0x20a043[_[_0x515f('0x5')](_0x170f91)+_0x515f('0x6')]){return _0x20a043[_[_0x515f('0x5')](_0x170f91)+_0x515f('0x6')];}else if(_0x20a043&&_0x20a043['id']){return _0x20a043['id'];}else if(_0x5d7e67&&_0x5d7e67['id']){return _0x5d7e67['id'];}else{return _0x515f('0x7');}}function log(_0x3d7c5b,_0xeadf73,_0x2a6dd8,_0x1e24aa,_0x205e6b,_0xfee4e6){loggers[_0x205e6b['toLowerCase']()][_0x3d7c5b](_0x515f('0x8'),_0xfee4e6['toUpperCase'](),_0xeadf73?_0xeadf73['id']:null,_0xeadf73?_0xeadf73[_0x515f('0x9')]:null,_0xeadf73?_0xeadf73[_0x515f('0xa')]:null,getInteractionId(_0x2a6dd8,_0x1e24aa,_0x205e6b),_0x2a6dd8?JSON[_0x515f('0xb')](_0x2a6dd8):_0x515f('0xc'));}function updateUser(_0x34a4c1,_0x38748f,_0x455cea,_0x3ccfbc,_0x4799d2){db[_['upperFirst'](_0x3ccfbc)+'Interaction'][_0x515f('0xd')]({'where':{'id':getInteractionId(_0x38748f,_0x455cea,_0x3ccfbc)}})[_0x515f('0xe')](function(_0x1b62ab){if(_0x1b62ab){return _0x1b62ab[_0x515f('0xf')]({'UserId':_0x34a4c1?_0x34a4c1['id']:null});}})['then'](function(_0x5e1fc9){if(_0x5e1fc9){log(_0x515f('0x10'),_0x34a4c1,_0x38748f,_0x455cea,_0x3ccfbc,_0x4799d2);}})[_0x515f('0x11')](function(){log('error',_0x34a4c1,_0x38748f,_0x455cea,_0x3ccfbc,_0x4799d2);});}exports[_0x515f('0x12')]=function(_0x3af8ee,_0x460a5b){return function(_0x2bb6d7,_0x4c0f9d,_0x13e76c){var _0x308674=_0x2bb6d7[_0x515f('0x13')];var _0x158b8b={};var _0x3abf6f=_0x2bb6d7['query'];if(_0x158b8b){_0x158b8b=_[_0x515f('0x14')](_0x2bb6d7[_0x515f('0x15')]);_0x158b8b=_[_0x515f('0x16')](_0x158b8b,[_0x515f('0x15'),_0x515f('0x17'),'phone',_0x515f('0x18'),'mobile']);}updateUser(_0x308674,_0x158b8b,_0x3abf6f,_0x3af8ee,_0x460a5b);_0x13e76c(null);};};
\ No newline at end of file
index b97fb52..dc82a74 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x852c=['createDecipher','aes-256-ctr','format','%s:%s:%s','update','base64','utf8','parse','hasOwnProperty','License','findOne','then','catch','users','admin','user','isUserLimit','crypto','util','../../mysqldb','../../config/environment','data1','license','split'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x852c,0x179));var _0xc852=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x852c[_0x3dd15e];return _0x231fd0;};'use strict';var crypto=require(_0xc852('0x0'));var util=require(_0xc852('0x1'));var compose=require('composable-middleware');var db=require(_0xc852('0x2'))['db'];var config=require(_0xc852('0x3'));function getValueFromLicense(_0x588687,_0x592b1c){if(_0x588687&&_0x592b1c){if(_0x592b1c[_0xc852('0x4')]&&_0x592b1c[_0xc852('0x5')]){var _0xd4b975=_0x592b1c[_0xc852('0x4')];var _0x29e3e3=_0x592b1c['license'];var _0x5e4c6a=_0xd4b975[_0xc852('0x6')]('-')[0x4];var _0x24d1c7=_0xd4b975['split']('-')[0x0];var _0x528c0c=crypto[_0xc852('0x7')](_0xc852('0x8'),util[_0xc852('0x9')](_0xc852('0xa'),_0x5e4c6a,_0xd4b975,_0x24d1c7));var _0xf3f217=_0x528c0c[_0xc852('0xb')](_0x29e3e3,_0xc852('0xc'),_0xc852('0xd'));_0xf3f217+=_0x528c0c['final'](_0xc852('0xd'));var _0x5d1f7e=JSON[_0xc852('0xe')](_0xf3f217);return _0x5d1f7e[_0xc852('0xf')](_0x588687)?_0x5d1f7e[_0x588687]:null;}}return null;}function isLimit(_0x515d01,_0x456af5,_0x5dcae3,_0x1b0e2a){var _0x2de381=_0x456af5;return compose()['use'](function(_0x276a7f,_0x5f024d,_0x2efe73){return db[_0xc852('0x10')][_0xc852('0x11')]({'where':{'id':0x1},'raw':!![]})[_0xc852('0x12')](function(_0x1db093){var _0x374345=getValueFromLicense(_0x515d01,_0x1db093);return _0x374345?_0x374345:_0x2de381;})[_0xc852('0x12')](function(_0x4c6429){_0x2de381=_0x4c6429;return _0x5dcae3['count'](_0x1b0e2a);})[_0xc852('0x12')](function(_0x1c9072){if(_0x1c9072>=_0x2de381){return _0x5f024d['status'](0x193)['json']({'message':util[_0xc852('0x9')]('Maximum\x20%s\x20limit\x20have\x20been\x20reached',_0x515d01)});}_0x2efe73();})[_0xc852('0x13')](function(_0x4e8c45){_0x2efe73(_0x4e8c45);});});}function isUserLimit(){return isLimit(_0xc852('0x14'),0x1,db['User'],{'where':{'$or':[{'role':_0xc852('0x15')},{'role':_0xc852('0x16')}]}});}exports[_0xc852('0x17')]=isUserLimit;
\ No newline at end of file
+var _0x99bd=['User','admin','user','crypto','composable-middleware','../../mysqldb','../../config/environment','data1','license','split','createDecipher','format','update','base64','utf8','parse','hasOwnProperty','use','License','findOne','then','count','status','catch','users'];(function(_0xefd519,_0xc62635){var _0x4bb882=function(_0x37e0a1){while(--_0x37e0a1){_0xefd519['push'](_0xefd519['shift']());}};_0x4bb882(++_0xc62635);}(_0x99bd,0x116));var _0xd99b=function(_0x31ced5,_0x5d5415){_0x31ced5=_0x31ced5-0x0;var _0x10d9e5=_0x99bd[_0x31ced5];return _0x10d9e5;};'use strict';var crypto=require(_0xd99b('0x0'));var util=require('util');var compose=require(_0xd99b('0x1'));var db=require(_0xd99b('0x2'))['db'];var config=require(_0xd99b('0x3'));function getValueFromLicense(_0xf76791,_0x41b18b){if(_0xf76791&&_0x41b18b){if(_0x41b18b[_0xd99b('0x4')]&&_0x41b18b[_0xd99b('0x5')]){var _0x183ae1=_0x41b18b[_0xd99b('0x4')];var _0x568d0b=_0x41b18b['license'];var _0x3931af=_0x183ae1[_0xd99b('0x6')]('-')[0x4];var _0x2fc756=_0x183ae1[_0xd99b('0x6')]('-')[0x0];var _0x346d74=crypto[_0xd99b('0x7')]('aes-256-ctr',util[_0xd99b('0x8')]('%s:%s:%s',_0x3931af,_0x183ae1,_0x2fc756));var _0x515a37=_0x346d74[_0xd99b('0x9')](_0x568d0b,_0xd99b('0xa'),_0xd99b('0xb'));_0x515a37+=_0x346d74['final'](_0xd99b('0xb'));var _0x521cde=JSON[_0xd99b('0xc')](_0x515a37);return _0x521cde[_0xd99b('0xd')](_0xf76791)?_0x521cde[_0xf76791]:null;}}return null;}function isLimit(_0x4e56f0,_0x43a9bc,_0x17a059,_0x1a5258){var _0x4dca46=_0x43a9bc;return compose()[_0xd99b('0xe')](function(_0x1ded57,_0xb7734a,_0x5f2cc0){return db[_0xd99b('0xf')][_0xd99b('0x10')]({'where':{'id':0x1},'raw':!![]})[_0xd99b('0x11')](function(_0x23ae20){var _0x4cfd73=getValueFromLicense(_0x4e56f0,_0x23ae20);return _0x4cfd73?_0x4cfd73:_0x4dca46;})[_0xd99b('0x11')](function(_0x14c93f){_0x4dca46=_0x14c93f;return _0x17a059[_0xd99b('0x12')](_0x1a5258);})['then'](function(_0x450528){if(_0x450528>=_0x4dca46){return _0xb7734a[_0xd99b('0x13')](0x193)['json']({'message':util[_0xd99b('0x8')]('Maximum\x20%s\x20limit\x20have\x20been\x20reached',_0x4e56f0)});}_0x5f2cc0();})[_0xd99b('0x14')](function(_0x3ee7a0){_0x5f2cc0(_0x3ee7a0);});});}function isUserLimit(){return isLimit(_0xd99b('0x15'),0x1,db[_0xd99b('0x16')],{'where':{'$or':[{'role':_0xd99b('0x17')},{'role':_0xd99b('0x18')}]}});}exports['isUserLimit']=isUserLimit;
\ No newline at end of file
index 55432eb..8a1c913 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe2bb=['split','filters','isEmpty','isArray','limit','offset','sort','map','indexOf','priority','col','substr','DESC','unsigned','ASC','length','omit','isObject','isString','unset','hasOwnProperty','isNumeric','match','^[0-9]*$','isEmail','lodash','moment','sequelize','fields'];(function(_0x455161,_0x520f10){var _0x3e7c03=function(_0xb17908){while(--_0xb17908){_0x455161['push'](_0x455161['shift']());}};_0x3e7c03(++_0x520f10);}(_0xe2bb,0x11e));var _0xbe2b=function(_0x11eb1f,_0x826f0b){_0x11eb1f=_0x11eb1f-0x0;var _0x2121e9=_0xe2bb[_0x11eb1f];return _0x2121e9;};'use strict';var _=require(_0xbe2b('0x0'));var moment=require(_0xbe2b('0x1'));var sequelize=require(_0xbe2b('0x2'));var LIMIT_VALUE=0xfa;exports[_0xbe2b('0x3')]=function(_0x3ce8a6){var _0x2af93f=null;if(_0x3ce8a6){_0x2af93f=_0x3ce8a6[_0xbe2b('0x4')](',');}return _0x2af93f;};exports[_0xbe2b('0x5')]=function(_0x541e0){var _0x2a320e={};if(!_[_0xbe2b('0x6')](_0x541e0)){_0x2a320e={};_['forOwn'](_0x541e0,function(_0x56b64d,_0x400e0a){try{_0x2a320e[_0x400e0a]=_[_0xbe2b('0x7')](_0x56b64d)?_0x56b64d:JSON['parse'](_0x56b64d);}catch(_0x6735b8){_0x2a320e[_0x400e0a]=_0x56b64d['split'](',');}});}return _0x2a320e;};exports[_0xbe2b('0x8')]=function(_0x195fe3){_0x195fe3=parseInt(_0x195fe3,0xa);if(!_0x195fe3||_0x195fe3<0x0){_0x195fe3=LIMIT_VALUE;}return _0x195fe3;};exports[_0xbe2b('0x9')]=function(_0x10d08f){_0x10d08f=parseInt(_0x10d08f,0xa);if(!_0x10d08f||_0x10d08f<0x0){_0x10d08f=0x0;}return _0x10d08f;};exports[_0xbe2b('0xa')]=function(_0x474ccd){var _0x40a30d,_0xbb236d=null;if(_0x474ccd){_0x40a30d=_0x474ccd[_0xbe2b('0x4')](',');_0xbb236d=_[_0xbe2b('0xb')](_0x40a30d,function(_0x56dc51){if(_0x56dc51[_0xbe2b('0xc')]('-')===0x0){return[_0x56dc51===_0xbe2b('0xd')?sequelize['cast'](sequelize[_0xbe2b('0xe')]('priority'),'unsigned'):_0x56dc51[_0xbe2b('0xf')](0x1),_0xbe2b('0x10')];}else{return[_0x56dc51===_0xbe2b('0xd')?sequelize['cast'](sequelize[_0xbe2b('0xe')](_0xbe2b('0xd')),_0xbe2b('0x11')):_0x56dc51,_0xbe2b('0x12')];}});}return _0xbb236d;};exports['omit']=function(_0x3ba578,_0x290984){if(_[_0xbe2b('0x6')](_0x3ba578)){return _0x3ba578;}if(_[_0xbe2b('0x7')](_0x3ba578)){for(var _0x15544d=0x0;_0x15544d<_0x3ba578[_0xbe2b('0x13')];_0x15544d+=0x1){_0x3ba578[_0x15544d]=this[_0xbe2b('0x14')](_0x3ba578[_0x15544d],_0x290984);}return _0x3ba578;}if(!_[_0xbe2b('0x15')](_0x3ba578)){return _0x3ba578;}if(_[_0xbe2b('0x16')](_0x290984)){_0x290984=[_0x290984];}if(!_[_0xbe2b('0x7')](_0x290984)){return _0x3ba578;}for(var _0x4e80da=0x0;_0x4e80da<_0x290984[_0xbe2b('0x13')];_0x4e80da+=0x1){_[_0xbe2b('0x17')](_0x3ba578,_0x290984[_0x4e80da]);}for(var _0x280d2a in _0x3ba578){if(_0x3ba578[_0xbe2b('0x18')](_0x280d2a)){_0x3ba578[_0x280d2a]=this[_0xbe2b('0x14')](_0x3ba578[_0x280d2a],_0x290984);}}return _0x3ba578;};exports[_0xbe2b('0x19')]=function(_0x55c995){return _0x55c995[_0xbe2b('0x1a')](RegExp(_0xbe2b('0x1b')))?!![]:![];};exports[_0xbe2b('0x1c')]=function(_0x40e6d3){return _0x40e6d3[_0xbe2b('0x1a')](/^\S+@\S+$/)?!![]:![];};
\ No newline at end of file
+var _0x2097=['hasOwnProperty','isNumeric','match','isEmail','lodash','moment','split','filters','isEmpty','isArray','parse','limit','offset','sort','map','priority','col','unsigned','DESC','cast','ASC','omit','length','isString','unset'];(function(_0xceade2,_0xc82824){var _0x240a65=function(_0x13ac6a){while(--_0x13ac6a){_0xceade2['push'](_0xceade2['shift']());}};_0x240a65(++_0xc82824);}(_0x2097,0x68));var _0x7209=function(_0x3eabcc,_0x2598f1){_0x3eabcc=_0x3eabcc-0x0;var _0x41494d=_0x2097[_0x3eabcc];return _0x41494d;};'use strict';var _=require(_0x7209('0x0'));var moment=require(_0x7209('0x1'));var sequelize=require('sequelize');var LIMIT_VALUE=0xfa;exports['fields']=function(_0x32cc84){var _0x489156=null;if(_0x32cc84){_0x489156=_0x32cc84[_0x7209('0x2')](',');}return _0x489156;};exports[_0x7209('0x3')]=function(_0x47229d){var _0x163837={};if(!_[_0x7209('0x4')](_0x47229d)){_0x163837={};_['forOwn'](_0x47229d,function(_0x1d211b,_0x2c0989){try{_0x163837[_0x2c0989]=_[_0x7209('0x5')](_0x1d211b)?_0x1d211b:JSON[_0x7209('0x6')](_0x1d211b);}catch(_0x3ce9cf){_0x163837[_0x2c0989]=_0x1d211b[_0x7209('0x2')](',');}});}return _0x163837;};exports[_0x7209('0x7')]=function(_0x50c141){_0x50c141=parseInt(_0x50c141,0xa);if(!_0x50c141||_0x50c141<0x0){_0x50c141=LIMIT_VALUE;}return _0x50c141;};exports[_0x7209('0x8')]=function(_0x1193fd){_0x1193fd=parseInt(_0x1193fd,0xa);if(!_0x1193fd||_0x1193fd<0x0){_0x1193fd=0x0;}return _0x1193fd;};exports[_0x7209('0x9')]=function(_0x47fb4b){var _0x44e164,_0x407273=null;if(_0x47fb4b){_0x44e164=_0x47fb4b[_0x7209('0x2')](',');_0x407273=_[_0x7209('0xa')](_0x44e164,function(_0x3f2044){if(_0x3f2044['indexOf']('-')===0x0){return[_0x3f2044===_0x7209('0xb')?sequelize['cast'](sequelize[_0x7209('0xc')](_0x7209('0xb')),_0x7209('0xd')):_0x3f2044['substr'](0x1),_0x7209('0xe')];}else{return[_0x3f2044===_0x7209('0xb')?sequelize[_0x7209('0xf')](sequelize['col'](_0x7209('0xb')),_0x7209('0xd')):_0x3f2044,_0x7209('0x10')];}});}return _0x407273;};exports[_0x7209('0x11')]=function(_0x2300a3,_0x5a4bdb){if(_['isEmpty'](_0x2300a3)){return _0x2300a3;}if(_[_0x7209('0x5')](_0x2300a3)){for(var _0x6cd2e3=0x0;_0x6cd2e3<_0x2300a3[_0x7209('0x12')];_0x6cd2e3+=0x1){_0x2300a3[_0x6cd2e3]=this[_0x7209('0x11')](_0x2300a3[_0x6cd2e3],_0x5a4bdb);}return _0x2300a3;}if(!_['isObject'](_0x2300a3)){return _0x2300a3;}if(_[_0x7209('0x13')](_0x5a4bdb)){_0x5a4bdb=[_0x5a4bdb];}if(!_[_0x7209('0x5')](_0x5a4bdb)){return _0x2300a3;}for(var _0x3afd93=0x0;_0x3afd93<_0x5a4bdb[_0x7209('0x12')];_0x3afd93+=0x1){_[_0x7209('0x14')](_0x2300a3,_0x5a4bdb[_0x3afd93]);}for(var _0x323105 in _0x2300a3){if(_0x2300a3[_0x7209('0x15')](_0x323105)){_0x2300a3[_0x323105]=this['omit'](_0x2300a3[_0x323105],_0x5a4bdb);}}return _0x2300a3;};exports[_0x7209('0x16')]=function(_0x20e263){return _0x20e263[_0x7209('0x17')](RegExp('^[0-9]*$'))?!![]:![];};exports[_0x7209('0x18')]=function(_0x2b656e){return _0x2b656e[_0x7209('0x17')](/^\S+@\S+$/)?!![]:![];};
\ No newline at end of file
index 6b102e7..d7577e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x70e0=['test','client','set','json\x20replacer','split','static','get','views','/server/views','engine','html','renderFile','view\x20engine','json','50mb','initialize','express','serve-favicon','body-parser','errorhandler','path','passport','cors','./environment','default','env','production','use','join','root','public','favicon.ico','development'];(function(_0x5cba0b,_0x56e3b2){var _0x2f48c7=function(_0x40c9ba){while(--_0x40c9ba){_0x5cba0b['push'](_0x5cba0b['shift']());}};_0x2f48c7(++_0x56e3b2);}(_0x70e0,0x17b));var _0x070e=function(_0x14ac52,_0x1a396a){_0x14ac52=_0x14ac52-0x0;var _0x188617=_0x70e0[_0x14ac52];return _0x188617;};'use strict';var express=require(_0x070e('0x0'));var favicon=require(_0x070e('0x1'));var bodyParser=require(_0x070e('0x2'));var methodOverride=require('method-override');var cookieParser=require('cookie-parser');var errorHandler=require(_0x070e('0x3'));var path=require(_0x070e('0x4'));var passport=require(_0x070e('0x5'));var cors=require(_0x070e('0x6'));var moment=require('moment');var config=require(_0x070e('0x7'));var db=require('../mysqldb')['db'];exports[_0x070e('0x8')]=function(_0x4b041d){var _0x56e420=_0x4b041d['get'](_0x070e('0x9'));if(_0x56e420===_0x070e('0xa')){_0x4b041d[_0x070e('0xb')](favicon(path[_0x070e('0xc')](config[_0x070e('0xd')],_0x070e('0xe'),_0x070e('0xf'))));_0x4b041d['set']('appPath',path[_0x070e('0xc')](config[_0x070e('0xd')],_0x070e('0xe')));}if(_0x56e420===_0x070e('0x10')||_0x56e420===_0x070e('0x11')){_0x4b041d[_0x070e('0xb')](favicon(path[_0x070e('0xc')](config[_0x070e('0xd')],_0x070e('0x12'),_0x070e('0xf'))));_0x4b041d[_0x070e('0x13')]('appPath',path['join'](config[_0x070e('0xd')],'client'));_0x4b041d['use'](errorHandler());}_0x4b041d['set'](_0x070e('0x14'),function(_0x14c3fd,_0x51d14d){if(this[_0x14c3fd]instanceof Date){_0x51d14d=this[_0x14c3fd]['toISOString']()[_0x070e('0x15')]('.')[0x0]+'Z';}return _0x51d14d;});_0x4b041d[_0x070e('0xb')](express[_0x070e('0x16')](_0x4b041d[_0x070e('0x17')]('appPath')));_0x4b041d['set'](_0x070e('0x18'),config[_0x070e('0xd')]+_0x070e('0x19'));_0x4b041d[_0x070e('0x1a')](_0x070e('0x1b'),require('ejs')[_0x070e('0x1c')]);_0x4b041d[_0x070e('0x13')](_0x070e('0x1d'),_0x070e('0x1b'));_0x4b041d[_0x070e('0xb')](bodyParser['urlencoded']({'limit':'50mb','extended':!![]}));_0x4b041d['use'](bodyParser[_0x070e('0x1e')]({'limit':_0x070e('0x1f')}));_0x4b041d[_0x070e('0xb')](cors());_0x4b041d['use'](methodOverride());_0x4b041d[_0x070e('0xb')](cookieParser());_0x4b041d['use'](passport[_0x070e('0x20')]());};
\ No newline at end of file
+var _0x70e0=['test','client','set','json\x20replacer','split','static','get','views','/server/views','engine','html','renderFile','view\x20engine','json','50mb','initialize','express','serve-favicon','body-parser','errorhandler','path','passport','cors','./environment','default','env','production','use','join','root','public','favicon.ico','development'];(function(_0x2d6702,_0x2e8385){var _0x172eaf=function(_0x5c138e){while(--_0x5c138e){_0x2d6702['push'](_0x2d6702['shift']());}};_0x172eaf(++_0x2e8385);}(_0x70e0,0x17b));var _0x070e=function(_0x410009,_0x48175a){_0x410009=_0x410009-0x0;var _0x3696e0=_0x70e0[_0x410009];return _0x3696e0;};'use strict';var express=require(_0x070e('0x0'));var favicon=require(_0x070e('0x1'));var bodyParser=require(_0x070e('0x2'));var methodOverride=require('method-override');var cookieParser=require('cookie-parser');var errorHandler=require(_0x070e('0x3'));var path=require(_0x070e('0x4'));var passport=require(_0x070e('0x5'));var cors=require(_0x070e('0x6'));var moment=require('moment');var config=require(_0x070e('0x7'));var db=require('../mysqldb')['db'];exports[_0x070e('0x8')]=function(_0x4b041d){var _0x56e420=_0x4b041d['get'](_0x070e('0x9'));if(_0x56e420===_0x070e('0xa')){_0x4b041d[_0x070e('0xb')](favicon(path[_0x070e('0xc')](config[_0x070e('0xd')],_0x070e('0xe'),_0x070e('0xf'))));_0x4b041d['set']('appPath',path[_0x070e('0xc')](config[_0x070e('0xd')],_0x070e('0xe')));}if(_0x56e420===_0x070e('0x10')||_0x56e420===_0x070e('0x11')){_0x4b041d[_0x070e('0xb')](favicon(path[_0x070e('0xc')](config[_0x070e('0xd')],_0x070e('0x12'),_0x070e('0xf'))));_0x4b041d[_0x070e('0x13')]('appPath',path['join'](config[_0x070e('0xd')],'client'));_0x4b041d['use'](errorHandler());}_0x4b041d['set'](_0x070e('0x14'),function(_0x14c3fd,_0x51d14d){if(this[_0x14c3fd]instanceof Date){_0x51d14d=this[_0x14c3fd]['toISOString']()[_0x070e('0x15')]('.')[0x0]+'Z';}return _0x51d14d;});_0x4b041d[_0x070e('0xb')](express[_0x070e('0x16')](_0x4b041d[_0x070e('0x17')]('appPath')));_0x4b041d['set'](_0x070e('0x18'),config[_0x070e('0xd')]+_0x070e('0x19'));_0x4b041d[_0x070e('0x1a')](_0x070e('0x1b'),require('ejs')[_0x070e('0x1c')]);_0x4b041d[_0x070e('0x13')](_0x070e('0x1d'),_0x070e('0x1b'));_0x4b041d[_0x070e('0xb')](bodyParser['urlencoded']({'limit':'50mb','extended':!![]}));_0x4b041d['use'](bodyParser[_0x070e('0x1e')]({'limit':_0x070e('0x1f')}));_0x4b041d[_0x070e('0xb')](cors());_0x4b041d['use'](methodOverride());_0x4b041d[_0x070e('0xb')](cookieParser());_0x4b041d['use'](passport[_0x070e('0x20')]());};
\ No newline at end of file
index fa703ca..9ef0366 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf73a=['crypto','bimedia-machine-uuid','child_process','networkInterfaces','orderBy','keys','length','filter','family','IPv4','internal','head','mac','00:00:00:00:00:00','address','127.0.0.1','join','update','digest','getUuid','platform','dmidecode\x20--string\x20system-uuid','replace','hostname','macAddress','ipAddress','createHash','md5','hex','substring','lodash'];(function(_0x2256a9,_0x3ceabe){var _0x57cb49=function(_0x34eb5d){while(--_0x34eb5d){_0x2256a9['push'](_0x2256a9['shift']());}};_0x57cb49(++_0x3ceabe);}(_0xf73a,0xd8));var _0xaf73=function(_0x3f9d96,_0x145ece){_0x3f9d96=_0x3f9d96-0x0;var _0x7d8383=_0xf73a[_0x3f9d96];return _0x7d8383;};'use strict';var _=require(_0xaf73('0x0'));var os=require('os');var crypto=require(_0xaf73('0x1'));var machine=require(_0xaf73('0x2'));var exec=require(_0xaf73('0x3'))['execSync'];function getInterfaces(){var _0x275d9e=[];var _0x258c80=os[_0xaf73('0x4')]();var _0x294407=_[_0xaf73('0x5')](_[_0xaf73('0x6')](_0x258c80));for(var _0x1baf40=0x0;_0x1baf40<_0x294407[_0xaf73('0x7')];_0x1baf40++){var _0x209102=_0x258c80[_0x294407[_0x1baf40]][_0xaf73('0x8')](function(_0x5ae1a7){return _0x5ae1a7[_0xaf73('0x9')]===_0xaf73('0xa')&&_0x5ae1a7[_0xaf73('0xb')]===![];});_0x275d9e=_0x275d9e['concat'](_0x209102);}return _0x275d9e;}function getFirstInterface(){var _0x160c8e=_[_0xaf73('0xc')](getInterfaces());return{'macAddress':_0x160c8e&&_0x160c8e[_0xaf73('0xd')]?_0x160c8e['mac']:_0xaf73('0xe'),'ipAddress':_0x160c8e&&_0x160c8e[_0xaf73('0xf')]?_0x160c8e[_0xaf73('0xf')]:_0xaf73('0x10')};}exports['getFirstInterface']=getFirstInterface;function getCPUhash(){var _0x1703f5=_[_0xaf73('0x5')](os['cpus']()['map'](function(_0x22a44f){return _0x22a44f['model'];}))[_0xaf73('0x11')](':');return crypto['createHash']('md5')[_0xaf73('0x12')](_0x1703f5)[_0xaf73('0x13')]('hex');}exports[_0xaf73('0x14')]=function(){switch(os[_0xaf73('0x15')]()){case'win32':return exec(_0xaf73('0x16'),{'encoding':'utf8'})[_0xaf73('0x17')]('\x0d\x0a','');default:var _0x9d0de6=getFirstInterface();var _0x58a031=getCPUhash();var _0x49a563=_0x58a031+'|'+os[_0xaf73('0x18')]()+'|'+_0x9d0de6[_0xaf73('0x19')]+'|'+_0x9d0de6[_0xaf73('0x1a')];var _0x4bad46=crypto[_0xaf73('0x1b')](_0xaf73('0x1c'))[_0xaf73('0x12')](_0x49a563)[_0xaf73('0x13')](_0xaf73('0x1d'));return _0x4bad46[_0xaf73('0x1e')](0x0,0x8)+'-'+_0x4bad46[_0xaf73('0x1e')](0x8,0xc)+'-'+_0x4bad46[_0xaf73('0x1e')](0xc,0x10)+'-'+_0x4bad46[_0xaf73('0x1e')](0x10,0x14)+'-'+_0x4bad46[_0xaf73('0x1e')](0x14);}};
\ No newline at end of file
+var _0xe7f2=['internal','head','mac','address','127.0.0.1','getFirstInterface','orderBy','cpus','map','model','createHash','update','digest','platform','win32','dmidecode\x20--string\x20system-uuid','replace','macAddress','ipAddress','md5','hex','substring','lodash','crypto','bimedia-machine-uuid','child_process','execSync','networkInterfaces','keys','length','IPv4'];(function(_0x27af45,_0x1b57aa){var _0x18df21=function(_0x4b7679){while(--_0x4b7679){_0x27af45['push'](_0x27af45['shift']());}};_0x18df21(++_0x1b57aa);}(_0xe7f2,0x10e));var _0x2e7f=function(_0x2b50ab,_0x5b279e){_0x2b50ab=_0x2b50ab-0x0;var _0x5170a8=_0xe7f2[_0x2b50ab];return _0x5170a8;};'use strict';var _=require(_0x2e7f('0x0'));var os=require('os');var crypto=require(_0x2e7f('0x1'));var machine=require(_0x2e7f('0x2'));var exec=require(_0x2e7f('0x3'))[_0x2e7f('0x4')];function getInterfaces(){var _0x30b001=[];var _0x4bb7b0=os[_0x2e7f('0x5')]();var _0x1ec8c3=_['orderBy'](_[_0x2e7f('0x6')](_0x4bb7b0));for(var _0x301954=0x0;_0x301954<_0x1ec8c3[_0x2e7f('0x7')];_0x301954++){var _0xd37a5e=_0x4bb7b0[_0x1ec8c3[_0x301954]]['filter'](function(_0x28c64c){return _0x28c64c['family']===_0x2e7f('0x8')&&_0x28c64c[_0x2e7f('0x9')]===![];});_0x30b001=_0x30b001['concat'](_0xd37a5e);}return _0x30b001;}function getFirstInterface(){var _0x4ba69e=_[_0x2e7f('0xa')](getInterfaces());return{'macAddress':_0x4ba69e&&_0x4ba69e[_0x2e7f('0xb')]?_0x4ba69e['mac']:'00:00:00:00:00:00','ipAddress':_0x4ba69e&&_0x4ba69e['address']?_0x4ba69e[_0x2e7f('0xc')]:_0x2e7f('0xd')};}exports[_0x2e7f('0xe')]=getFirstInterface;function getCPUhash(){var _0x3ec0db=_[_0x2e7f('0xf')](os[_0x2e7f('0x10')]()[_0x2e7f('0x11')](function(_0x1ff246){return _0x1ff246[_0x2e7f('0x12')];}))['join'](':');return crypto[_0x2e7f('0x13')]('md5')[_0x2e7f('0x14')](_0x3ec0db)[_0x2e7f('0x15')]('hex');}exports['getUuid']=function(){switch(os[_0x2e7f('0x16')]()){case _0x2e7f('0x17'):return exec(_0x2e7f('0x18'),{'encoding':'utf8'})[_0x2e7f('0x19')]('\x0d\x0a','');default:var _0x1e5d87=getFirstInterface();var _0xb93dab=getCPUhash();var _0x5911b3=_0xb93dab+'|'+os['hostname']()+'|'+_0x1e5d87[_0x2e7f('0x1a')]+'|'+_0x1e5d87[_0x2e7f('0x1b')];var _0x2ac380=crypto['createHash'](_0x2e7f('0x1c'))['update'](_0x5911b3)[_0x2e7f('0x15')](_0x2e7f('0x1d'));return _0x2ac380[_0x2e7f('0x1e')](0x0,0x8)+'-'+_0x2ac380['substring'](0x8,0xc)+'-'+_0x2ac380[_0x2e7f('0x1e')](0xc,0x10)+'-'+_0x2ac380[_0x2e7f('0x1e')](0x10,0x14)+'-'+_0x2ac380['substring'](0x14);}};
\ No newline at end of file
index ebf9500..4bba452 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf7df=['User','findOne','admin','fullname','email','then','|reason|','|machineUuid|','|name|','|email|','getFirstInterface','ipAddress','openIssue','MOTLICENSE','Alert','get','active','license','info','THE\x20LICENSE\x20HAS\x20BEEN\x20ENABLED','data2','THE\x20LICENSE\x20HAS\x20BEEN\x20UPDATED','data1','Disabled','THE\x20LICENSE\x20HAS\x20BEEN\x20DISABLED','Changed','NEW\x20UUID\x20DETECTED:\x20FROM\x20%s\x20TO\x20%s','%s\x20-\x20GRAY\x20PERIOD\x20STARTED\x20AT\x20%s','toUpperCase','YYYY-MM-DD\x20HH:mm','diff','DEMO\x20START\x20AT\x20%s','error','finally','getUuid','License','findOrCreate','spread','SERVICE\x20LICENSE\x20STARTED\x20%s','util','crypto','request-promise','bluebird','version','../../mysqldb','../environment','./hardware','../logger','https://www.xcallymotion.com','format','exports','%s/api/servers/%s/check?version=%s&oldtoken=%s','catch','createCipher','aes-256-ctr','session','update','utf8','final','base64','createDecipher','secrets','||FIELD||VALUE||\x0a'];(function(_0x28a526,_0x3701b6){var _0x37c878=function(_0x34c698){while(--_0x34c698){_0x28a526['push'](_0x28a526['shift']());}};_0x37c878(++_0x3701b6);}(_0xf7df,0xe4));var _0xff7d=function(_0x41b806,_0x3319d9){_0x41b806=_0x41b806-0x0;var _0x5ae08a=_0xf7df[_0x41b806];return _0x5ae08a;};'use strict';var util=require(_0xff7d('0x0'));var crypto=require(_0xff7d('0x1'));var moment=require('moment');var rp=require(_0xff7d('0x2'));var BPromise=require(_0xff7d('0x3'));var pkginfo=require('pkginfo')(module,_0xff7d('0x4'));var db=require(_0xff7d('0x5'))['db'];var config=require(_0xff7d('0x6'));var hardware=require(_0xff7d('0x7'));var logger=require(_0xff7d('0x8'))('license');var jira=require('../../api/jira/jira.controller');var HOST=_0xff7d('0x9');var TIME=0x3c*0x1388;var DAYS=0x7;var GRAY_PERIOD_REASON;var ADMIN;var oldToken;function httpRequest(_0xb12bf8){return new BPromise(function(_0x33b853,_0x269f6a){var _0x1e9f09=util[_0xff7d('0xa')]('%s/api/servers/%s/check?version=%s',HOST,_0xb12bf8,module[_0xff7d('0xb')]['version']);if(oldToken){_0x1e9f09=util[_0xff7d('0xa')](_0xff7d('0xc'),HOST,_0xb12bf8,module['exports'][_0xff7d('0x4')],oldToken);}var _0x4f6633={'uri':_0x1e9f09,'method':'GET','timeout':0xea60,'json':!![]};return rp(_0x4f6633)['then'](function(_0x52ad6d){_0x33b853(_0x52ad6d);})[_0xff7d('0xd')](function(_0x36f816){_0x269f6a(_0x36f816);});});}function encryptDate(_0x19f475){var _0x19f4f6=crypto[_0xff7d('0xe')](_0xff7d('0xf'),config['secrets'][_0xff7d('0x10')]);var _0x43b200=_0x19f4f6[_0xff7d('0x11')](_0x19f475,_0xff7d('0x12'),'base64');_0x43b200+=_0x19f4f6[_0xff7d('0x13')](_0xff7d('0x14'));return _0x43b200;}function decryptDate(_0x133b4d){var _0x5f1ffc=crypto[_0xff7d('0x15')](_0xff7d('0xf'),config[_0xff7d('0x16')][_0xff7d('0x10')]);var _0x4dcda8=_0x5f1ffc[_0xff7d('0x11')](_0x133b4d,_0xff7d('0x14'),_0xff7d('0x12'));_0x4dcda8+=_0x5f1ffc[_0xff7d('0x13')](_0xff7d('0x12'));return _0x4dcda8;}function sendJiraAlert(_0x5b1886,_0x2ed3cc,_0x1d1d20){var _0x5762db=_0xff7d('0x17');return db[_0xff7d('0x18')][_0xff7d('0x19')]({'where':{'role':_0xff7d('0x1a')},'attributes':[_0xff7d('0x1b'),_0xff7d('0x1c')],'raw':!![]})[_0xff7d('0x1d')](function(_0x4d581b){ADMIN=_0x4d581b;_0x5762db+=_0xff7d('0x1e')+_0x1d1d20+'|\x0a';_0x5762db+='|uuid|'+_0x5b1886+'|\x0a';_0x5762db+=_0xff7d('0x1f')+_0x2ed3cc+'|\x0a';_0x5762db+=_0xff7d('0x20')+ADMIN[_0xff7d('0x1b')]+'|\x0a';_0x5762db+=_0xff7d('0x21')+ADMIN['email']+'|\x0a';return _0x5762db;})['then'](function(_0x5002c7){var _0x36d0aa=hardware[_0xff7d('0x22')]()[_0xff7d('0x23')];return jira[_0xff7d('0x24')]({'key':_0xff7d('0x25'),'summary':'Motion\x20License\x20Alert','description':_0x5002c7,'issuetype':_0xff7d('0x26'),'oldToken':_0x5b1886,'newToken':_0x2ed3cc,'email':ADMIN['email'],'name':ADMIN[_0xff7d('0x1b')],'reason':GRAY_PERIOD_REASON,'ip':_0x36d0aa});});}function manageLicense(_0x5a9266,_0x54f60){var _0x76979=_0x54f60[_0xff7d('0x27')]({'plain':!![]});httpRequest(_0x5a9266)[_0xff7d('0x1d')](function(_0x4d5ab0){if(oldToken){oldToken=undefined;}if(_0x4d5ab0[_0xff7d('0x28')]){if(!_0x76979[_0xff7d('0x29')]&&_0x76979[_0xff7d('0x29')]!=_0x4d5ab0['license']||_0x76979['license']&&_0x76979['data2']){logger[_0xff7d('0x2a')](_0xff7d('0x2b'));}if(_0x76979[_0xff7d('0x29')]&&!_0x76979[_0xff7d('0x2c')]&&_0x76979['license']!=_0x4d5ab0[_0xff7d('0x29')]){logger[_0xff7d('0x2a')](_0xff7d('0x2d'));}if(_0x76979[_0xff7d('0x29')]&&!_0x76979[_0xff7d('0x2c')]&&_0x76979[_0xff7d('0x29')]==_0x4d5ab0[_0xff7d('0x29')]){return _0x54f60;}return _0x54f60[_0xff7d('0x11')]({'data1':_0x5a9266,'data2':null,'license':_0x4d5ab0[_0xff7d('0x29')]});}else{if(_0x4d5ab0[_0xff7d('0x29')]||_0x76979['license']){if(!_0x76979[_0xff7d('0x2c')]){if(_0x76979[_0xff7d('0x2e')]==_0x5a9266){GRAY_PERIOD_REASON=_0xff7d('0x2f');logger[_0xff7d('0x2a')](_0xff7d('0x30'));}else{GRAY_PERIOD_REASON=_0xff7d('0x31');oldToken=_0x76979[_0xff7d('0x2e')];logger[_0xff7d('0x2a')](_0xff7d('0x32'),_0x76979[_0xff7d('0x2e')],_0x5a9266);}sendJiraAlert(_0x76979['data1'],_0x4d5ab0['uuid'],GRAY_PERIOD_REASON);logger[_0xff7d('0x2a')](_0xff7d('0x33'),GRAY_PERIOD_REASON[_0xff7d('0x34')](),moment()[_0xff7d('0xa')](_0xff7d('0x35')));return _0x54f60['update']({'data2':encryptDate(moment()['format']('YYYY-MM-DD\x20HH:mm'))});}else{if(moment()[_0xff7d('0x36')](decryptDate(_0x76979[_0xff7d('0x2c')]),'days')>DAYS){logger[_0xff7d('0x2a')](_0xff7d('0x37'),moment()[_0xff7d('0xa')](_0xff7d('0x35')));return _0x54f60[_0xff7d('0x11')]({'data1':_0x5a9266,'data2':null,'license':null});}}}else{if(_0x76979[_0xff7d('0x2e')]!=_0x5a9266){logger['info'](_0xff7d('0x32'),_0x76979[_0xff7d('0x2e')],_0x5a9266);return _0x54f60[_0xff7d('0x11')]({'data1':_0x5a9266,'data2':null,'license':null});}}}return _0x54f60;})[_0xff7d('0x1d')](function(_0x19fdae){_0x54f60=_0x19fdae;})['catch'](function(_0x4fbdcd){logger[_0xff7d('0x38')](_0x4fbdcd['message']);})[_0xff7d('0x39')](function(){setTimeout(function(){manageLicense(hardware['getUuid'](),_0x54f60);},TIME);});}function defaultLicense(){var _0x1a2029=hardware[_0xff7d('0x3a')]();if(_0x1a2029){return db[_0xff7d('0x3b')][_0xff7d('0x3c')]({'where':{'id':0x1},'defaults':{'data1':_0x1a2029}})[_0xff7d('0x3d')](function(_0x3502c2,_0x29b3cd){logger[_0xff7d('0x2a')](_0xff7d('0x3e'),_0x1a2029);manageLicense(_0x1a2029,_0x3502c2);})[_0xff7d('0xd')](function(_0x4ac64c){logger[_0xff7d('0x38')](_0x4ac64c['message']);});}}exports['default']=defaultLicense;
\ No newline at end of file
+var _0x8549=['spread','default','crypto','moment','bluebird','../../mysqldb','../environment','./hardware','../logger','license','../../api/jira/jira.controller','exports','version','format','%s/api/servers/%s/check?version=%s&oldtoken=%s','GET','then','catch','createCipher','aes-256-ctr','secrets','session','utf8','final','base64','createDecipher','update','User','findOne','admin','fullname','email','|uuid|','|machineUuid|','|name|','getFirstInterface','ipAddress','openIssue','MOTLICENSE','get','active','data2','info','THE\x20LICENSE\x20HAS\x20BEEN\x20ENABLED','THE\x20LICENSE\x20HAS\x20BEEN\x20UPDATED','data1','Disabled','THE\x20LICENSE\x20HAS\x20BEEN\x20DISABLED','Changed','uuid','%s\x20-\x20GRAY\x20PERIOD\x20STARTED\x20AT\x20%s','toUpperCase','YYYY-MM-DD\x20HH:mm','diff','days','DEMO\x20START\x20AT\x20%s','NEW\x20UUID\x20DETECTED:\x20FROM\x20%s\x20TO\x20%s','error','message','finally','getUuid','License'];(function(_0x2deac4,_0xc27a2b){var _0x1c0bda=function(_0x1deceb){while(--_0x1deceb){_0x2deac4['push'](_0x2deac4['shift']());}};_0x1c0bda(++_0xc27a2b);}(_0x8549,0x1f2));var _0x9854=function(_0x4573c2,_0x3763e9){_0x4573c2=_0x4573c2-0x0;var _0x573a59=_0x8549[_0x4573c2];return _0x573a59;};'use strict';var util=require('util');var crypto=require(_0x9854('0x0'));var moment=require(_0x9854('0x1'));var rp=require('request-promise');var BPromise=require(_0x9854('0x2'));var pkginfo=require('pkginfo')(module,'version');var db=require(_0x9854('0x3'))['db'];var config=require(_0x9854('0x4'));var hardware=require(_0x9854('0x5'));var logger=require(_0x9854('0x6'))(_0x9854('0x7'));var jira=require(_0x9854('0x8'));var HOST='https://www.xcallymotion.com';var TIME=0x3c*0x1388;var DAYS=0x7;var GRAY_PERIOD_REASON;var ADMIN;var oldToken;function httpRequest(_0x5745df){return new BPromise(function(_0x50ed00,_0x3dc9d4){var _0x44ce98=util['format']('%s/api/servers/%s/check?version=%s',HOST,_0x5745df,module[_0x9854('0x9')][_0x9854('0xa')]);if(oldToken){_0x44ce98=util[_0x9854('0xb')](_0x9854('0xc'),HOST,_0x5745df,module['exports']['version'],oldToken);}var _0x435b42={'uri':_0x44ce98,'method':_0x9854('0xd'),'timeout':0xea60,'json':!![]};return rp(_0x435b42)[_0x9854('0xe')](function(_0x7d73cf){_0x50ed00(_0x7d73cf);})[_0x9854('0xf')](function(_0x461532){_0x3dc9d4(_0x461532);});});}function encryptDate(_0x34d3c4){var _0x2ba24a=crypto[_0x9854('0x10')](_0x9854('0x11'),config[_0x9854('0x12')][_0x9854('0x13')]);var _0x10772c=_0x2ba24a['update'](_0x34d3c4,_0x9854('0x14'),'base64');_0x10772c+=_0x2ba24a[_0x9854('0x15')](_0x9854('0x16'));return _0x10772c;}function decryptDate(_0x1ee0a2){var _0x34197f=crypto[_0x9854('0x17')](_0x9854('0x11'),config[_0x9854('0x12')][_0x9854('0x13')]);var _0x3eb2d6=_0x34197f[_0x9854('0x18')](_0x1ee0a2,_0x9854('0x16'),_0x9854('0x14'));_0x3eb2d6+=_0x34197f[_0x9854('0x15')](_0x9854('0x14'));return _0x3eb2d6;}function sendJiraAlert(_0x845f2e,_0x447f7d,_0x15de32){var _0x46096b='||FIELD||VALUE||\x0a';return db[_0x9854('0x19')][_0x9854('0x1a')]({'where':{'role':_0x9854('0x1b')},'attributes':[_0x9854('0x1c'),_0x9854('0x1d')],'raw':!![]})[_0x9854('0xe')](function(_0x25cc36){ADMIN=_0x25cc36;_0x46096b+='|reason|'+_0x15de32+'|\x0a';_0x46096b+=_0x9854('0x1e')+_0x845f2e+'|\x0a';_0x46096b+=_0x9854('0x1f')+_0x447f7d+'|\x0a';_0x46096b+=_0x9854('0x20')+ADMIN[_0x9854('0x1c')]+'|\x0a';_0x46096b+='|email|'+ADMIN[_0x9854('0x1d')]+'|\x0a';return _0x46096b;})[_0x9854('0xe')](function(_0x4a3680){var _0x453c4c=hardware[_0x9854('0x21')]()[_0x9854('0x22')];return jira[_0x9854('0x23')]({'key':_0x9854('0x24'),'summary':'Motion\x20License\x20Alert','description':_0x4a3680,'issuetype':'Alert','oldToken':_0x845f2e,'newToken':_0x447f7d,'email':ADMIN[_0x9854('0x1d')],'name':ADMIN[_0x9854('0x1c')],'reason':GRAY_PERIOD_REASON,'ip':_0x453c4c});});}function manageLicense(_0x7579aa,_0x10195b){var _0x57ad80=_0x10195b[_0x9854('0x25')]({'plain':!![]});httpRequest(_0x7579aa)[_0x9854('0xe')](function(_0x4121d3){if(oldToken){oldToken=undefined;}if(_0x4121d3[_0x9854('0x26')]){if(!_0x57ad80[_0x9854('0x7')]&&_0x57ad80[_0x9854('0x7')]!=_0x4121d3[_0x9854('0x7')]||_0x57ad80[_0x9854('0x7')]&&_0x57ad80[_0x9854('0x27')]){logger[_0x9854('0x28')](_0x9854('0x29'));}if(_0x57ad80[_0x9854('0x7')]&&!_0x57ad80[_0x9854('0x27')]&&_0x57ad80['license']!=_0x4121d3[_0x9854('0x7')]){logger['info'](_0x9854('0x2a'));}if(_0x57ad80['license']&&!_0x57ad80[_0x9854('0x27')]&&_0x57ad80[_0x9854('0x7')]==_0x4121d3[_0x9854('0x7')]){return _0x10195b;}return _0x10195b[_0x9854('0x18')]({'data1':_0x7579aa,'data2':null,'license':_0x4121d3[_0x9854('0x7')]});}else{if(_0x4121d3['license']||_0x57ad80['license']){if(!_0x57ad80[_0x9854('0x27')]){if(_0x57ad80[_0x9854('0x2b')]==_0x7579aa){GRAY_PERIOD_REASON=_0x9854('0x2c');logger['info'](_0x9854('0x2d'));}else{GRAY_PERIOD_REASON=_0x9854('0x2e');oldToken=_0x57ad80[_0x9854('0x2b')];logger[_0x9854('0x28')]('NEW\x20UUID\x20DETECTED:\x20FROM\x20%s\x20TO\x20%s',_0x57ad80[_0x9854('0x2b')],_0x7579aa);}sendJiraAlert(_0x57ad80[_0x9854('0x2b')],_0x4121d3[_0x9854('0x2f')],GRAY_PERIOD_REASON);logger[_0x9854('0x28')](_0x9854('0x30'),GRAY_PERIOD_REASON[_0x9854('0x31')](),moment()[_0x9854('0xb')](_0x9854('0x32')));return _0x10195b[_0x9854('0x18')]({'data2':encryptDate(moment()[_0x9854('0xb')](_0x9854('0x32')))});}else{if(moment()[_0x9854('0x33')](decryptDate(_0x57ad80[_0x9854('0x27')]),_0x9854('0x34'))>DAYS){logger[_0x9854('0x28')](_0x9854('0x35'),moment()['format'](_0x9854('0x32')));return _0x10195b[_0x9854('0x18')]({'data1':_0x7579aa,'data2':null,'license':null});}}}else{if(_0x57ad80[_0x9854('0x2b')]!=_0x7579aa){logger['info'](_0x9854('0x36'),_0x57ad80[_0x9854('0x2b')],_0x7579aa);return _0x10195b[_0x9854('0x18')]({'data1':_0x7579aa,'data2':null,'license':null});}}}return _0x10195b;})[_0x9854('0xe')](function(_0x1b21ef){_0x10195b=_0x1b21ef;})[_0x9854('0xf')](function(_0x13517a){logger[_0x9854('0x37')](_0x13517a[_0x9854('0x38')]);})[_0x9854('0x39')](function(){setTimeout(function(){manageLicense(hardware[_0x9854('0x3a')](),_0x10195b);},TIME);});}function defaultLicense(){var _0x1c2948=hardware['getUuid']();if(_0x1c2948){return db[_0x9854('0x3b')]['findOrCreate']({'where':{'id':0x1},'defaults':{'data1':_0x1c2948}})[_0x9854('0x3c')](function(_0x2bb4ab,_0x2289ef){logger[_0x9854('0x28')]('SERVICE\x20LICENSE\x20STARTED\x20%s',_0x1c2948);manageLicense(_0x1c2948,_0x2bb4ab);})[_0x9854('0xf')](function(_0x5aea17){logger[_0x9854('0x37')](_0x5aea17[_0x9854('0x38')]);});}}exports[_0x9854('0x3d')]=defaultLicense;
\ No newline at end of file
index a732bc6..b59e289 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe3d3=['defaults','checkLicense','util','lodash','moment','./hardware','../environment','../../mysqldb','license','data2','split','createDecipher','aes-256-ctr','format','%s:%s:%s','update','base64','utf8','final','parse','demo','uuid','machineUuid','secrets','gray','add','grayReason','disabled','Breaking\x20license','data1','getUuid','message','2027-01-01T00:00:00.000Z','Demo\x20license','License'];(function(_0x4fc40f,_0x1a66b8){var _0x1ec033=function(_0x4072e2){while(--_0x4072e2){_0x4fc40f['push'](_0x4fc40f['shift']());}};_0x1ec033(++_0x1a66b8);}(_0xe3d3,0x8e));var _0x3e3d=function(_0x36b5e0,_0xc87576){_0x36b5e0=_0x36b5e0-0x0;var _0xaa914e=_0xe3d3[_0x36b5e0];return _0xaa914e;};'use strict';var crypto=require('crypto');var util=require(_0x3e3d('0x0'));var _=require(_0x3e3d('0x1'));var moment=require(_0x3e3d('0x2'));var hardware=require(_0x3e3d('0x3'));var config=require(_0x3e3d('0x4'));var db=require(_0x3e3d('0x5'))['db'];function checkLicense(_0x4c34b3,_0x17d12f){if(_0x4c34b3){try{var _0x4d822c=_0x17d12f||_0x4c34b3[_0x3e3d('0x6')];if(_['isEmpty'](_0x4d822c)){throw new Error('License\x20key\x20value\x20not\x20found');}var _0x14dfcc=_0x4c34b3['data1'];var _0xb78c97=_0x4c34b3[_0x3e3d('0x7')];var _0x162415=_0x14dfcc['split']('-')[0x4];var _0x38c0ae=_0x14dfcc[_0x3e3d('0x8')]('-')[0x0];var _0x4e7651=crypto[_0x3e3d('0x9')](_0x3e3d('0xa'),util[_0x3e3d('0xb')](_0x3e3d('0xc'),_0x162415,_0x14dfcc,_0x38c0ae));var _0x19f5af=_0x4e7651[_0x3e3d('0xd')](_0x4d822c,_0x3e3d('0xe'),_0x3e3d('0xf'));_0x19f5af+=_0x4e7651[_0x3e3d('0x10')](_0x3e3d('0xf'));var _0x175629=JSON[_0x3e3d('0x11')](_0x19f5af);_0x175629[_0x3e3d('0x12')]=![];_0x175629[_0x3e3d('0x13')]=_0x14dfcc;_0x175629[_0x3e3d('0x14')]=hardware['getUuid']();if(_0xb78c97){var _0x22f8ec=crypto[_0x3e3d('0x9')](_0x3e3d('0xa'),config[_0x3e3d('0x15')]['session']);var _0x2ae5ed=_0x22f8ec['update'](_0xb78c97,_0x3e3d('0xe'),'utf8');_0x2ae5ed+=_0x22f8ec[_0x3e3d('0x10')](_0x3e3d('0xf'));_0x175629[_0x3e3d('0x16')]=_0x2ae5ed;_0x175629['deadline']=moment(_0x2ae5ed)[_0x3e3d('0x17')](0x7,'days')[_0x3e3d('0xb')]();_0x175629[_0x3e3d('0x18')]=_0x175629[_0x3e3d('0x13')]!=_0x175629[_0x3e3d('0x14')]?'changed':_0x3e3d('0x19');}return _0x175629;}catch(_0x5aae72){return{'breaking':!![],'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':'2027-01-01T00:00:00.000Z','chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'update':![],'description':_0x3e3d('0x1a'),'uuid':_0x4c34b3[_0x3e3d('0x1b')],'machineUuid':hardware[_0x3e3d('0x1c')](),'message':_0x5aae72[_0x3e3d('0x1d')],'virtual':0x0,'voice':!![],'screenrecording':![],'preferred':![]};}}return{'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':_0x3e3d('0x1e'),'chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'description':_0x3e3d('0x1f'),'uuid':_0x4c34b3[_0x3e3d('0x1b')],'machineUuid':hardware['getUuid'](),'virtual':0x0,'voice':!![],'screenrecording':![],'preferred':![]};}exports['getLicense']=function(_0x18c437){return db[_0x3e3d('0x20')]['find'](_[_0x3e3d('0x21')](_0x18c437,{'raw':!![],'where':{'id':0x1}}))['then'](function(_0xa1c4fb){return checkLicense(_0xa1c4fb,null);});};exports[_0x3e3d('0x22')]=checkLicense;
\ No newline at end of file
+var _0xeaad=['Demo\x20license','getLicense','License','defaults','then','crypto','util','moment','./hardware','../../mysqldb','license','isEmpty','License\x20key\x20value\x20not\x20found','data1','data2','split','createDecipher','aes-256-ctr','format','%s:%s:%s','update','base64','final','parse','demo','uuid','machineUuid','getUuid','secrets','session','gray','deadline','changed','disabled','2027-01-01T00:00:00.000Z','Breaking\x20license','message'];(function(_0x389af3,_0x30a76a){var _0x199d87=function(_0x126178){while(--_0x126178){_0x389af3['push'](_0x389af3['shift']());}};_0x199d87(++_0x30a76a);}(_0xeaad,0x1c1));var _0xdeaa=function(_0x314cfe,_0x129a31){_0x314cfe=_0x314cfe-0x0;var _0x34b0fc=_0xeaad[_0x314cfe];return _0x34b0fc;};'use strict';var crypto=require(_0xdeaa('0x0'));var util=require(_0xdeaa('0x1'));var _=require('lodash');var moment=require(_0xdeaa('0x2'));var hardware=require(_0xdeaa('0x3'));var config=require('../environment');var db=require(_0xdeaa('0x4'))['db'];function checkLicense(_0x274d14,_0x1b0455){if(_0x274d14){try{var _0x353098=_0x1b0455||_0x274d14[_0xdeaa('0x5')];if(_[_0xdeaa('0x6')](_0x353098)){throw new Error(_0xdeaa('0x7'));}var _0x549dbc=_0x274d14[_0xdeaa('0x8')];var _0x30b1c0=_0x274d14[_0xdeaa('0x9')];var _0xa3b27e=_0x549dbc[_0xdeaa('0xa')]('-')[0x4];var _0x1740e6=_0x549dbc[_0xdeaa('0xa')]('-')[0x0];var _0x4a35b1=crypto[_0xdeaa('0xb')](_0xdeaa('0xc'),util[_0xdeaa('0xd')](_0xdeaa('0xe'),_0xa3b27e,_0x549dbc,_0x1740e6));var _0x194a33=_0x4a35b1[_0xdeaa('0xf')](_0x353098,_0xdeaa('0x10'),'utf8');_0x194a33+=_0x4a35b1[_0xdeaa('0x11')]('utf8');var _0x30115f=JSON[_0xdeaa('0x12')](_0x194a33);_0x30115f[_0xdeaa('0x13')]=![];_0x30115f[_0xdeaa('0x14')]=_0x549dbc;_0x30115f[_0xdeaa('0x15')]=hardware[_0xdeaa('0x16')]();if(_0x30b1c0){var _0x336639=crypto[_0xdeaa('0xb')](_0xdeaa('0xc'),config[_0xdeaa('0x17')][_0xdeaa('0x18')]);var _0x4195cf=_0x336639[_0xdeaa('0xf')](_0x30b1c0,_0xdeaa('0x10'),'utf8');_0x4195cf+=_0x336639[_0xdeaa('0x11')]('utf8');_0x30115f[_0xdeaa('0x19')]=_0x4195cf;_0x30115f[_0xdeaa('0x1a')]=moment(_0x4195cf)['add'](0x7,'days')[_0xdeaa('0xd')]();_0x30115f['grayReason']=_0x30115f['uuid']!=_0x30115f['machineUuid']?_0xdeaa('0x1b'):_0xdeaa('0x1c');}return _0x30115f;}catch(_0x464be4){return{'breaking':!![],'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':_0xdeaa('0x1d'),'chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'update':![],'description':_0xdeaa('0x1e'),'uuid':_0x274d14['data1'],'machineUuid':hardware[_0xdeaa('0x16')](),'message':_0x464be4[_0xdeaa('0x1f')],'virtual':0x0,'voice':!![],'screenrecording':![],'preferred':![]};}}return{'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':_0xdeaa('0x1d'),'chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'description':_0xdeaa('0x20'),'uuid':_0x274d14[_0xdeaa('0x8')],'machineUuid':hardware[_0xdeaa('0x16')](),'virtual':0x0,'voice':!![],'screenrecording':![],'preferred':![]};}exports[_0xdeaa('0x21')]=function(_0x4c2559){return db[_0xdeaa('0x22')]['find'](_[_0xdeaa('0x23')](_0x4c2559,{'raw':!![],'where':{'id':0x1}}))[_0xdeaa('0x24')](function(_0x47b88e){return checkLicense(_0x47b88e,null);});};exports['checkLicense']=checkLicense;
\ No newline at end of file
index 05d7952..4327fb7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7834=['app-id','exports'];(function(_0x3626d3,_0x5b527e){var _0x24d837=function(_0x53897d){while(--_0x53897d){_0x3626d3['push'](_0x3626d3['shift']());}};_0x24d837(++_0x5b527e);}(_0x7834,0x13f));var _0x4783=function(_0x40a44b,_0x2b8785){_0x40a44b=_0x40a44b-0x0;var _0x2b656d=_0x7834[_0x40a44b];return _0x2b656d;};'use strict';module[_0x4783('0x0')]={'DOMAIN':'http://localhost:9000','SESSION_SECRET':'myappanuglar-secret','GOOGLE_ID':_0x4783('0x1'),'GOOGLE_SECRET':'secret','DEBUG':''};
\ No newline at end of file
+var _0x98e1=['http://localhost:9000','myappanuglar-secret','app-id','secret'];(function(_0x17d18a,_0x289108){var _0x18d146=function(_0x5e0924){while(--_0x5e0924){_0x17d18a['push'](_0x17d18a['shift']());}};_0x18d146(++_0x289108);}(_0x98e1,0x160));var _0x198e=function(_0x47e4a5,_0x38d9bd){_0x47e4a5=_0x47e4a5-0x0;var _0x3040de=_0x98e1[_0x47e4a5];return _0x3040de;};'use strict';module['exports']={'DOMAIN':_0x198e('0x0'),'SESSION_SECRET':_0x198e('0x1'),'GOOGLE_ID':_0x198e('0x2'),'GOOGLE_SECRET':_0x198e('0x3'),'DEBUG':''};
\ No newline at end of file
index e317e17..9ba6f48 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe6f3=['%s-%s.log','[%s]\x20[%s]\x20%s\x20-\x20%s','YYYY-MM-DD\x20HH:mm:ss','level','message','Logger','transports','File','%s-%s','error','info','env','moment','winston','path','join','/var','xcally','format'];(function(_0x4ec520,_0x15fee2){var _0xed49d7=function(_0x3031f2){while(--_0x3031f2){_0x4ec520['push'](_0x4ec520['shift']());}};_0xed49d7(++_0x15fee2);}(_0xe6f3,0x19b));var _0x3e6f=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0xe6f3[_0x501510];return _0x1e6ee5;};'use strict';var moment=require(_0x3e6f('0x0'));var winston=require(_0x3e6f('0x1'));var util=require('util');var path=require(_0x3e6f('0x2'));var debugLevel='INFO';function filename(_0x1bfb33,_0x2a3d89){return path[_0x3e6f('0x3')](_0x3e6f('0x4'),'log',_0x3e6f('0x5'),util[_0x3e6f('0x6')](_0x3e6f('0x7'),_0x1bfb33,_0x2a3d89));}function formatter(_0x9a4f19,_0x5edf94){return util[_0x3e6f('0x6')](_0x3e6f('0x8'),moment()['format'](_0x3e6f('0x9')),_0x5edf94[_0x3e6f('0xa')]['toUpperCase'](),_0x9a4f19,_0x5edf94[_0x3e6f('0xb')]);}module['exports']=function(_0x219aef){return new winston[(_0x3e6f('0xc'))]({'transports':[new winston[(_0x3e6f('0xd'))][(_0x3e6f('0xe'))]({'name':util['format'](_0x3e6f('0xf'),_0x219aef,'error'),'filename':filename(_0x219aef,_0x3e6f('0x10')),'level':_0x3e6f('0x10'),'json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0x4dd808){return formatter(_0x219aef,_0x4dd808);}}),new winston['transports'][(_0x3e6f('0xe'))]({'name':util[_0x3e6f('0x6')](_0x3e6f('0xf'),_0x219aef,'info'),'filename':filename(_0x219aef,'info'),'level':_0x3e6f('0x11'),'json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0xcb4dd){return formatter(_0x219aef,_0xcb4dd);}}),new winston[(_0x3e6f('0xd'))]['Console']({'level':process[_0x3e6f('0x12')]['debugLevel']||debugLevel,'json':![],'formatter':function(_0x1eea28){return formatter(_0x219aef,_0x1eea28);}})]});};
\ No newline at end of file
+var _0xfe23=['Console','env','debugLevel','moment','winston','util','path','INFO','join','log','xcally','format','%s-%s.log','[%s]\x20[%s]\x20%s\x20-\x20%s','YYYY-MM-DD\x20HH:mm:ss','level','toUpperCase','Logger','transports','error','File','%s-%s','info'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xfe23,0xe9));var _0x3fe2=function(_0x3b0731,_0xcf9925){_0x3b0731=_0x3b0731-0x0;var _0x4204d7=_0xfe23[_0x3b0731];return _0x4204d7;};'use strict';var moment=require(_0x3fe2('0x0'));var winston=require(_0x3fe2('0x1'));var util=require(_0x3fe2('0x2'));var path=require(_0x3fe2('0x3'));var debugLevel=_0x3fe2('0x4');function filename(_0x4124fb,_0x399b62){return path[_0x3fe2('0x5')]('/var',_0x3fe2('0x6'),_0x3fe2('0x7'),util[_0x3fe2('0x8')](_0x3fe2('0x9'),_0x4124fb,_0x399b62));}function formatter(_0x1a28cd,_0x2e9ef1){return util[_0x3fe2('0x8')](_0x3fe2('0xa'),moment()['format'](_0x3fe2('0xb')),_0x2e9ef1[_0x3fe2('0xc')][_0x3fe2('0xd')](),_0x1a28cd,_0x2e9ef1['message']);}module['exports']=function(_0x909213){return new winston[(_0x3fe2('0xe'))]({'transports':[new winston[(_0x3fe2('0xf'))]['File']({'name':util[_0x3fe2('0x8')]('%s-%s',_0x909213,'error'),'filename':filename(_0x909213,'error'),'level':_0x3fe2('0x10'),'json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0x420925){return formatter(_0x909213,_0x420925);}}),new winston[(_0x3fe2('0xf'))][(_0x3fe2('0x11'))]({'name':util[_0x3fe2('0x8')](_0x3fe2('0x12'),_0x909213,_0x3fe2('0x13')),'filename':filename(_0x909213,_0x3fe2('0x13')),'level':'info','json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0x31b5c2){return formatter(_0x909213,_0x31b5c2);}}),new winston[(_0x3fe2('0xf'))][(_0x3fe2('0x14'))]({'level':process[_0x3fe2('0x15')][_0x3fe2('0x16')]||debugLevel,'json':![],'formatter':function(_0x1141a2){return formatter(_0x909213,_0x1141a2);}})]});};
\ No newline at end of file
index 7294906..d4a5be4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeddd=['join','../../services/express/index.js','../../services/ami/index.js','agi','../../services/agi/index.js','email','../../services/email/index.js','../../services/routing/index.js','xdr','../../services/xdr/index.js','exports','path','express'];(function(_0x38ced4,_0x24263f){var _0x547c07=function(_0x279fc4){while(--_0x279fc4){_0x38ced4['push'](_0x38ced4['shift']());}};_0x547c07(++_0x24263f);}(_0xeddd,0x10f));var _0xdedd=function(_0x2064e5,_0x4f6fa2){_0x2064e5=_0x2064e5-0x0;var _0x21a233=_0xeddd[_0x2064e5];return _0x21a233;};'use strict';var path=require(_0xdedd('0x0'));var os=require('os');var config={'apps':[{'name':_0xdedd('0x1'),'script':path[_0xdedd('0x2')](__dirname,_0xdedd('0x3'))},{'name':'ami','script':path[_0xdedd('0x2')](__dirname,_0xdedd('0x4'))},{'name':_0xdedd('0x5'),'script':path[_0xdedd('0x2')](__dirname,_0xdedd('0x6'))},{'name':_0xdedd('0x7'),'script':path[_0xdedd('0x2')](__dirname,_0xdedd('0x8'))},{'name':'routing','script':path['join'](__dirname,_0xdedd('0x9'))},{'name':_0xdedd('0xa'),'script':path[_0xdedd('0x2')](__dirname,_0xdedd('0xb'))}]};module[_0xdedd('0xc')]=config;
\ No newline at end of file
+var _0x6c65=['../../services/routing/index.js','xdr','../../services/xdr/index.js','path','express','join','../../services/express/index.js','ami','../../services/ami/index.js','agi','../../services/agi/index.js','email','../../services/email/index.js','routing'];(function(_0x561197,_0x2d7d64){var _0x191270=function(_0x32d6e2){while(--_0x32d6e2){_0x561197['push'](_0x561197['shift']());}};_0x191270(++_0x2d7d64);}(_0x6c65,0x8f));var _0x56c6=function(_0x356596,_0x1a1a8c){_0x356596=_0x356596-0x0;var _0x231fa9=_0x6c65[_0x356596];return _0x231fa9;};'use strict';var path=require(_0x56c6('0x0'));var os=require('os');var config={'apps':[{'name':_0x56c6('0x1'),'script':path[_0x56c6('0x2')](__dirname,_0x56c6('0x3'))},{'name':_0x56c6('0x4'),'script':path['join'](__dirname,_0x56c6('0x5'))},{'name':_0x56c6('0x6'),'script':path['join'](__dirname,_0x56c6('0x7'))},{'name':_0x56c6('0x8'),'script':path[_0x56c6('0x2')](__dirname,_0x56c6('0x9'))},{'name':_0x56c6('0xa'),'script':path[_0x56c6('0x2')](__dirname,_0x56c6('0xb'))},{'name':_0x56c6('0xc'),'script':path[_0x56c6('0x2')](__dirname,_0x56c6('0xd'))}]};module['exports']=config;
\ No newline at end of file
index f2a2029..3f0bd0d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e74=['saved','pm2','./config','connected','then','start','disconnect','stop','list','describe','delete','dump'];(function(_0x55a2c2,_0x5aaeea){var _0x42d196=function(_0x4aa875){while(--_0x4aa875){_0x55a2c2['push'](_0x55a2c2['shift']());}};_0x42d196(++_0x5aaeea);}(_0x3e74,0x175));var _0x43e7=function(_0x1373ff,_0xbfe9f){_0x1373ff=_0x1373ff-0x0;var _0x23c5ee=_0x3e74[_0x1373ff];return _0x23c5ee;};'use strict';var pm2=require(_0x43e7('0x0'));var BPromise=require('bluebird');var config=require(_0x43e7('0x1'));function connect(){return new BPromise(function(_0x287a1d,_0x151ad2){return pm2['connect'](function(_0x490ced){if(_0x490ced){return _0x151ad2(_0x490ced);}return _0x287a1d(_0x43e7('0x2'));});});};exports['start']=function(_0x128b0f){return connect()[_0x43e7('0x3')](function(){return new BPromise(function(_0xe78cb7,_0x1c503b){return pm2[_0x43e7('0x4')](_0x128b0f,function(_0x503698,_0x45a0d1){if(_0x503698){return _0x1c503b(_0x503698);}pm2[_0x43e7('0x5')]();return _0xe78cb7(_0x45a0d1);});});});};exports[_0x43e7('0x6')]=function(_0x8528fc){return connect()[_0x43e7('0x3')](function(){return new BPromise(function(_0x516b4d,_0x212c6c){return pm2['stop'](_0x8528fc,function(_0x54948c,_0x39c8bd){if(_0x54948c){return _0x212c6c(_0x54948c);}pm2[_0x43e7('0x5')]();return _0x516b4d(_0x39c8bd);});});});};exports['restart']=function(_0x2803d9){return connect()['then'](function(){return new BPromise(function(_0xf7c520,_0x37302c){return pm2['restart'](_0x2803d9,function(_0x3eb206,_0xc960ea){if(_0x3eb206){return _0x37302c(_0x3eb206);}pm2[_0x43e7('0x5')]();return _0xf7c520(_0xc960ea);});});});};exports[_0x43e7('0x7')]=function(){return connect()['then'](function(){return new BPromise(function(_0x583d85,_0x2fcb36){return pm2[_0x43e7('0x7')](function(_0x44b0bd,_0x51b974){if(_0x44b0bd){return _0x2fcb36(_0x44b0bd);}pm2['disconnect']();return _0x583d85(_0x51b974);});});});};exports[_0x43e7('0x8')]=function(_0x14c146){return connect()[_0x43e7('0x3')](function(){return new BPromise(function(_0x328445,_0x4de324){return pm2['describe'](_0x14c146,function(_0xdf16c,_0x264575){if(_0xdf16c){return _0x4de324(_0xdf16c);}pm2[_0x43e7('0x5')]();return _0x328445(_0x264575);});});});};exports['delete']=function(_0x4b5a6b){return connect()[_0x43e7('0x3')](function(){return new BPromise(function(_0x1ca758,_0x9037d3){return pm2[_0x43e7('0x9')](_0x4b5a6b,function(_0x3776f5,_0x1f24fb){if(_0x3776f5){return _0x9037d3(_0x3776f5);}pm2[_0x43e7('0x5')]();return _0x1ca758(_0x1f24fb);});});});};exports[_0x43e7('0xa')]=function(){return connect()[_0x43e7('0x3')](function(){return new BPromise(function(_0xab63cf,_0x191dd5){return pm2[_0x43e7('0xa')](function(_0x4b5d64){if(_0x4b5d64){return _0x191dd5(_0x4b5d64);}return _0xab63cf(_0x43e7('0xb'));});});});};
\ No newline at end of file
+var _0x3e74=['saved','pm2','./config','connected','then','start','disconnect','stop','list','describe','delete','dump'];(function(_0x466962,_0x56850a){var _0x5a2ed1=function(_0x68cd8d){while(--_0x68cd8d){_0x466962['push'](_0x466962['shift']());}};_0x5a2ed1(++_0x56850a);}(_0x3e74,0x175));var _0x43e7=function(_0xeca02,_0x59bd14){_0xeca02=_0xeca02-0x0;var _0x22f972=_0x3e74[_0xeca02];return _0x22f972;};'use strict';var pm2=require(_0x43e7('0x0'));var BPromise=require('bluebird');var config=require(_0x43e7('0x1'));function connect(){return new BPromise(function(_0x287a1d,_0x151ad2){return pm2['connect'](function(_0x490ced){if(_0x490ced){return _0x151ad2(_0x490ced);}return _0x287a1d(_0x43e7('0x2'));});});};exports['start']=function(_0x128b0f){return connect()[_0x43e7('0x3')](function(){return new BPromise(function(_0xe78cb7,_0x1c503b){return pm2[_0x43e7('0x4')](_0x128b0f,function(_0x503698,_0x45a0d1){if(_0x503698){return _0x1c503b(_0x503698);}pm2[_0x43e7('0x5')]();return _0xe78cb7(_0x45a0d1);});});});};exports[_0x43e7('0x6')]=function(_0x8528fc){return connect()[_0x43e7('0x3')](function(){return new BPromise(function(_0x516b4d,_0x212c6c){return pm2['stop'](_0x8528fc,function(_0x54948c,_0x39c8bd){if(_0x54948c){return _0x212c6c(_0x54948c);}pm2[_0x43e7('0x5')]();return _0x516b4d(_0x39c8bd);});});});};exports['restart']=function(_0x2803d9){return connect()['then'](function(){return new BPromise(function(_0xf7c520,_0x37302c){return pm2['restart'](_0x2803d9,function(_0x3eb206,_0xc960ea){if(_0x3eb206){return _0x37302c(_0x3eb206);}pm2[_0x43e7('0x5')]();return _0xf7c520(_0xc960ea);});});});};exports[_0x43e7('0x7')]=function(){return connect()['then'](function(){return new BPromise(function(_0x583d85,_0x2fcb36){return pm2[_0x43e7('0x7')](function(_0x44b0bd,_0x51b974){if(_0x44b0bd){return _0x2fcb36(_0x44b0bd);}pm2['disconnect']();return _0x583d85(_0x51b974);});});});};exports[_0x43e7('0x8')]=function(_0x14c146){return connect()[_0x43e7('0x3')](function(){return new BPromise(function(_0x328445,_0x4de324){return pm2['describe'](_0x14c146,function(_0xdf16c,_0x264575){if(_0xdf16c){return _0x4de324(_0xdf16c);}pm2[_0x43e7('0x5')]();return _0x328445(_0x264575);});});});};exports['delete']=function(_0x4b5a6b){return connect()[_0x43e7('0x3')](function(){return new BPromise(function(_0x1ca758,_0x9037d3){return pm2[_0x43e7('0x9')](_0x4b5a6b,function(_0x3776f5,_0x1f24fb){if(_0x3776f5){return _0x9037d3(_0x3776f5);}pm2[_0x43e7('0x5')]();return _0x1ca758(_0x1f24fb);});});});};exports[_0x43e7('0xa')]=function(){return connect()[_0x43e7('0x3')](function(){return new BPromise(function(_0xab63cf,_0x191dd5){return pm2[_0x43e7('0xa')](function(_0x4b5d64){if(_0x4b5d64){return _0x191dd5(_0x4b5d64);}return _0xab63cf(_0x43e7('0xb'));});});});};
\ No newline at end of file
index c0ac5ac..62775fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7d80=['update','timeout','format','YYYY-MM-DD\x20HH:mm:ss','map','emit','chatInteraction:update','catch','error','start','moment','ioredis','../../mysqldb','../../config/environment','redis','defaults','localhost','chatTimeout','ChatInteraction','findAll','subtract','minutes','then'];(function(_0x47a7d0,_0x4e182d){var _0xb9bd08=function(_0x588ee2){while(--_0x588ee2){_0x47a7d0['push'](_0x47a7d0['shift']());}};_0xb9bd08(++_0x4e182d);}(_0x7d80,0x17a));var _0x07d8=function(_0x472b6a,_0x3a9121){_0x472b6a=_0x472b6a-0x0;var _0x5cda29=_0x7d80[_0x472b6a];return _0x5cda29;};'use strict';var _=require('lodash');var moment=require(_0x07d8('0x0'));var Redis=require(_0x07d8('0x1'));var db=require(_0x07d8('0x2'))['db'];var config=require(_0x07d8('0x3'));config[_0x07d8('0x4')]=_[_0x07d8('0x5')](config['redis'],{'host':_0x07d8('0x6'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x07d8('0x4')]));function closeInteractions(){var _0xb83132=0x0;var _0x3e7308=[];return db['Setting']['find']({'raw':!![],'attributes':['id',_0x07d8('0x7')],'where':{'id':0x1}})['then'](function(_0x52c68d){_0xb83132=_0x52c68d['chatTimeout'];if(_0xb83132){return db[_0x07d8('0x8')][_0x07d8('0x9')]({'raw':!![],'attributes':['id','lastMsgAt'],'where':{'closed':![],'lastMsgAt':{'$lt':moment()[_0x07d8('0xa')](_0x52c68d[_0x07d8('0x7')],_0x07d8('0xb'))}}});}else{return[];}})[_0x07d8('0xc')](function(_0x3499a4){_0x3e7308=_0x3499a4;if(_0xb83132){return db[_0x07d8('0x8')][_0x07d8('0xd')]({'closeReason':'system','disposition':_0x07d8('0xe'),'closed':!![],'closedAt':moment()[_0x07d8('0xf')](_0x07d8('0x10'))},{'where':{'id':_[_0x07d8('0x11')](_0x3e7308||[],'id')}});}})[_0x07d8('0xc')](function(_0x14ee4c){for(var _0x1342ba=0x0;_0x1342ba<_0x3e7308['length'];_0x1342ba++){io[_0x07d8('0x12')](_0x07d8('0x13'),{'id':_0x3e7308[_0x1342ba]['id'],'closed':!![]});}})[_0x07d8('0x14')](function(_0x584765){console[_0x07d8('0x15')](_0x584765);});}exports[_0x07d8('0x16')]=function(){setInterval(function(){return closeInteractions();},0x3c*0x3e8);return closeInteractions();};
\ No newline at end of file
+var _0x1c4d=['subtract','minutes','update','system','timeout','format','YYYY-MM-DD\x20HH:mm:ss','map','length','catch','error','moment','ioredis','../../mysqldb','redis','defaults','localhost','Setting','find','chatTimeout','then','ChatInteraction','findAll'];(function(_0x1129d5,_0x20209d){var _0x436792=function(_0x31c1a8){while(--_0x31c1a8){_0x1129d5['push'](_0x1129d5['shift']());}};_0x436792(++_0x20209d);}(_0x1c4d,0x1d7));var _0xd1c4=function(_0x3493c8,_0x3531ea){_0x3493c8=_0x3493c8-0x0;var _0x3fdb36=_0x1c4d[_0x3493c8];return _0x3fdb36;};'use strict';var _=require('lodash');var moment=require(_0xd1c4('0x0'));var Redis=require(_0xd1c4('0x1'));var db=require(_0xd1c4('0x2'))['db'];var config=require('../../config/environment');config[_0xd1c4('0x3')]=_[_0xd1c4('0x4')](config[_0xd1c4('0x3')],{'host':_0xd1c4('0x5'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xd1c4('0x3')]));function closeInteractions(){var _0x5c3470=0x0;var _0x406eb6=[];return db[_0xd1c4('0x6')][_0xd1c4('0x7')]({'raw':!![],'attributes':['id',_0xd1c4('0x8')],'where':{'id':0x1}})[_0xd1c4('0x9')](function(_0xc9284c){_0x5c3470=_0xc9284c['chatTimeout'];if(_0x5c3470){return db[_0xd1c4('0xa')][_0xd1c4('0xb')]({'raw':!![],'attributes':['id','lastMsgAt'],'where':{'closed':![],'lastMsgAt':{'$lt':moment()[_0xd1c4('0xc')](_0xc9284c['chatTimeout'],_0xd1c4('0xd'))}}});}else{return[];}})[_0xd1c4('0x9')](function(_0x430296){_0x406eb6=_0x430296;if(_0x5c3470){return db[_0xd1c4('0xa')][_0xd1c4('0xe')]({'closeReason':_0xd1c4('0xf'),'disposition':_0xd1c4('0x10'),'closed':!![],'closedAt':moment()[_0xd1c4('0x11')](_0xd1c4('0x12'))},{'where':{'id':_[_0xd1c4('0x13')](_0x406eb6||[],'id')}});}})[_0xd1c4('0x9')](function(_0x4f5d13){for(var _0x15792b=0x0;_0x15792b<_0x406eb6[_0xd1c4('0x14')];_0x15792b++){io['emit']('chatInteraction:update',{'id':_0x406eb6[_0x15792b]['id'],'closed':!![]});}})[_0xd1c4('0x15')](function(_0x5bec0f){console[_0xd1c4('0x16')](_0x5bec0f);});}exports['start']=function(){setInterval(function(){return closeInteractions();},0x3c*0x3e8);return closeInteractions();};
\ No newline at end of file
index dc16c0a..e61e59f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x88bf=['start','add\x20cron','exists','stop\x20cron','update','update\x20cron','run','util','path','lodash','moment','cron-job-manager','jayson/promise','bluebird','../logger','schedule','../../mysqldb','../../api/analyticCustomReport/analyticCustomReport.controller','client','http','info','Try\x20to\x20send\x20a\x20mail\x20to','MailAccount','Smtp','service','host','port','secure','auth','user','format','\x22%s\x22\x20<%s>','email','bcc','Report\x20%s\x20last\x20%s\x20%s','name','subtractNumber','join','../../files/reports','savename','%s.%s','basename','existsSync','Sent','message','text','Info\x20report:\x0a%s\x0aPlease\x20see\x20the\x20attachments\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20it.\x0a\x0a','status','attachments','Report\x20empty\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a','request','SendMail','then','error','error\x20mail','stringify','email\x20sent','catch','data','isNil','subtractNumber\x20null\x20or\x20undefined','subtractUnit','subtractUnit\x20null\x20or\x20undefined','YYYY-MM-DD\x20HH:mm:ss','scheduled','output','DefaultReportId','exec\x20defaul\x20report\x20id:%s','CustomReportId','no\x20report\x20id','findAll','MailServerOut','keys','jobs','map','toString','difference','intersection','length','stop','deleteJob','delete\x20cron','toRun','index','my\x20id','resolve','run\x20job','cron','active','isBetween','startAt','endAt','add'];(function(_0x1cdb8e,_0x29b51b){var _0x5ecb94=function(_0x3f0703){while(--_0x3f0703){_0x1cdb8e['push'](_0x1cdb8e['shift']());}};_0x5ecb94(++_0x29b51b);}(_0x88bf,0x1d8));var _0xf88b=function(_0x559499,_0x2ecc11){_0x559499=_0x559499-0x0;var _0x476cb7=_0x88bf[_0x559499];return _0x476cb7;};'use strict';var fs=require('fs');var util=require(_0xf88b('0x0'));var path=require(_0xf88b('0x1'));var _=require(_0xf88b('0x2'));var moment=require(_0xf88b('0x3'));var CronJobManager=require(_0xf88b('0x4'));var jayson=require(_0xf88b('0x5'));var BPromise=require(_0xf88b('0x6'));var logger=require(_0xf88b('0x7'))(_0xf88b('0x8'));var db=require(_0xf88b('0x9'))['db'];var analyticCustomReportController=require(_0xf88b('0xa'));var analyticDefaultReportController=require('../../api/analyticDefaultReport/analyticDefaultReport.controller');var client=jayson[_0xf88b('0xb')][_0xf88b('0xc')]({'port':0x232b});var manager=new CronJobManager();function handleSendEmail(_0x565a58,_0x3c58aa){return function(){logger[_0xf88b('0xd')](_0xf88b('0xe'),_0x565a58['email']);var _0x44bc12=!![];var _0x2b6f44={'tls':{'rejectUnauthorized':![]}};if(_0x565a58[_0xf88b('0xf')][_0xf88b('0x10')][_0xf88b('0x11')]){_0x2b6f44['service']=_0x565a58[_0xf88b('0xf')]['Smtp'][_0xf88b('0x11')];}else{_0x2b6f44['host']=_0x565a58[_0xf88b('0xf')]['Smtp'][_0xf88b('0x12')];_0x2b6f44[_0xf88b('0x13')]=_0x565a58[_0xf88b('0xf')][_0xf88b('0x10')][_0xf88b('0x13')];_0x2b6f44[_0xf88b('0x14')]=_0x565a58[_0xf88b('0xf')]['Smtp']['secure'];}if(_0x565a58[_0xf88b('0xf')][_0xf88b('0x10')]['authentication']){_0x2b6f44[_0xf88b('0x15')]={'user':_0x565a58[_0xf88b('0xf')][_0xf88b('0x10')][_0xf88b('0x16')],'pass':_0x565a58['MailAccount'][_0xf88b('0x10')]['pass']};}var _0x5d7699={'account':_0x2b6f44,'message':{'from':util[_0xf88b('0x17')](_0xf88b('0x18'),_0x565a58[_0xf88b('0xf')]['name'],_0x565a58[_0xf88b('0xf')]['email']||_0x565a58[_0xf88b('0xf')][_0xf88b('0x10')][_0xf88b('0x16')]),'to':_0x565a58[_0xf88b('0x19')],'cc':_0x565a58['cc'],'bcc':_0x565a58[_0xf88b('0x1a')],'subject':util[_0xf88b('0x17')](_0xf88b('0x1b'),_0x3c58aa[_0xf88b('0x1c')],_0x565a58[_0xf88b('0x1d')],_0x565a58['subtractUnit'])}};var _0x1fac42=path[_0xf88b('0x1e')](__dirname,_0xf88b('0x1f'));var _0x3910e2=_0x3c58aa[_0xf88b('0x20')];var _0x55464b=util['format'](_0xf88b('0x21'),path[_0xf88b('0x22')](_0x3c58aa[_0xf88b('0x20')],path['extname'](_0x3c58aa[_0xf88b('0x20')])),'zip');var _0x52a7f5=path[_0xf88b('0x1e')](_0x1fac42,_0x3910e2);var _0x32c5ec=path[_0xf88b('0x1e')](_0x1fac42,_0x55464b);if(fs[_0xf88b('0x23')](_0x52a7f5)){_0x3c58aa['status']=_0xf88b('0x24');_0x5d7699[_0xf88b('0x25')]['attachments']=[{'filename':_0x3910e2,'path':_0x52a7f5}];_0x5d7699[_0xf88b('0x25')][_0xf88b('0x26')]=util[_0xf88b('0x17')](_0xf88b('0x27'),JSON['stringify'](_0x3c58aa,null,0x2));}else if(fs[_0xf88b('0x23')](_0x32c5ec)){_0x3c58aa[_0xf88b('0x28')]=_0xf88b('0x24');_0x5d7699[_0xf88b('0x25')][_0xf88b('0x29')]=[{'filename':_0x55464b,'path':_0x32c5ec}];}else{_0x5d7699[_0xf88b('0x25')][_0xf88b('0x26')]=_0xf88b('0x2a');if(!_0x565a58['sendIfEmpty']){_0x44bc12=![];logger[_0xf88b('0xd')]('empty\x20file,\x20email\x20not\x20sent');}}if(_0x44bc12){return client[_0xf88b('0x2b')](_0xf88b('0x2c'),_0x5d7699)[_0xf88b('0x2d')](function(_0x33a268){if(_0x33a268[_0xf88b('0x2e')]){return logger['error'](_0xf88b('0x2f'),JSON[_0xf88b('0x30')](_0x33a268));}return logger['info'](_0xf88b('0x31'));})[_0xf88b('0x32')](function(_0x64da61){return logger[_0xf88b('0x2e')](_0xf88b('0x2f'),JSON[_0xf88b('0x30')](_0x64da61));});}};}function handleError(){return function(_0x2b4bc8){return logger[_0xf88b('0x2e')](JSON['stringify'](_0x2b4bc8));};}function handleResult(_0x131f04){return function(_0x422a5f){logger[_0xf88b('0xd')](_0xf88b('0x33'),JSON[_0xf88b('0x30')](_0x422a5f));if(_0x131f04[_0xf88b('0xf')]&&_0x131f04[_0xf88b('0xf')][_0xf88b('0x10')]&&!_[_0xf88b('0x34')](_0x131f04[_0xf88b('0x19')])){setTimeout(handleSendEmail(_0x131f04,_0x422a5f),0x3c*0x3e8);}};}function handleJob(_0x596b74){return function(){try{if(_[_0xf88b('0x34')](_0x596b74['subtractNumber'])){return logger['info'](_0xf88b('0x35'));}if(_[_0xf88b('0x34')](_0x596b74[_0xf88b('0x36')])){return logger[_0xf88b('0xd')](_0xf88b('0x37'));}var _0x573cb2={'startDate':moment()['subtract'](_0x596b74[_0xf88b('0x1d')],_0x596b74['subtractUnit'])[_0xf88b('0x17')](_0xf88b('0x38')),'endDate':moment()['format'](_0xf88b('0x38')),'type':_0xf88b('0x39'),'output':_0x596b74[_0xf88b('0x3a')],'name':_0x596b74[_0xf88b('0x1c')]};if(!_['isNil'](_0x596b74[_0xf88b('0x3b')])){logger[_0xf88b('0xd')](_0xf88b('0x3c'),_0x596b74['DefaultReportId']);return analyticDefaultReportController['runReport']({'id':_0x596b74['DefaultReportId']},_0x573cb2)['then'](handleResult(_0x596b74))[_0xf88b('0x32')](handleError());}if(!_[_0xf88b('0x34')](_0x596b74[_0xf88b('0x3d')])){logger[_0xf88b('0xd')]('exec\x20custom\x20report\x20id:%s',_0x596b74[_0xf88b('0x3d')]);return analyticCustomReportController['runReport']({'id':_0x596b74['CustomReportId']},_0x573cb2)[_0xf88b('0x2d')](handleResult(_0x596b74))[_0xf88b('0x32')](handleError());}}catch(_0x399e38){logger['error'](JSON['stringify'](_0x399e38));}return logger[_0xf88b('0xd')](_0xf88b('0x3e'));};}function getJobs(_0x27b5e7){var _0x8069e3={};if(_0x27b5e7){_0x8069e3['id']=_0x27b5e7;}return db['Schedule'][_0xf88b('0x3f')]({'where':_0x8069e3,'include':[{'model':db[_0xf88b('0xf')],'attributes':['id',_0xf88b('0x1c'),_0xf88b('0x19')],'include':[{'model':db[_0xf88b('0x40')],'as':_0xf88b('0x10')}]}]})[_0xf88b('0x2d')](function(_0x112568){var _0x180c63=_[_0xf88b('0x41')](manager[_0xf88b('0x42')]);var _0x44945d=_[_0xf88b('0x43')](_0x112568,function(_0x5a2eda){return _0x5a2eda['id'][_0xf88b('0x44')]();});var _0x1819ad=_['keyBy'](_0x112568,function(_0x193947){return _0x193947['id'][_0xf88b('0x44')]();});var _0x1c0016=_0x27b5e7?_0x44945d:_[_0xf88b('0x45')](_0x44945d,_0x180c63);var _0x3173ff=_[_0xf88b('0x46')](_0x44945d,_0x180c63);var _0x3fe8d2=_['difference'](_0x180c63,_0x44945d);var _0x268822;var _0x1a5458;for(_0x268822=0x0;_0x268822<_0x3fe8d2[_0xf88b('0x47')]&&!_0x27b5e7;_0x268822+=0x1){_0x1a5458=_0x3fe8d2[_0x268822]['toString']();if(manager['exists'](_0x1a5458)){manager[_0xf88b('0x48')](_0x1a5458);manager[_0xf88b('0x49')](_0x1a5458);logger[_0xf88b('0xd')](_0xf88b('0x4a'),_0x1a5458);}}logger['info'](_0xf88b('0x4b'),JSON[_0xf88b('0x30')](_0x1c0016));for(_0x268822=0x0;_0x268822<_0x1c0016[_0xf88b('0x47')];_0x268822+=0x1){_0x1a5458=_0x1c0016[_0x268822][_0xf88b('0x44')]();logger[_0xf88b('0xd')](_0xf88b('0x4c'),_0x1a5458);if(_0x27b5e7){logger[_0xf88b('0xd')](_0xf88b('0x4d'),_0x27b5e7);logger[_0xf88b('0xd')](JSON[_0xf88b('0x30')](_0x1819ad[_0x1a5458]));BPromise[_0xf88b('0x4e')]()['then'](handleJob(_0x1819ad[_0x1a5458]));logger[_0xf88b('0xd')](_0xf88b('0x4f'),_0x1819ad[_0x1a5458]['name'],_0x1819ad[_0x1a5458]['cron']);}else if(_0x1819ad[_0x1a5458][_0xf88b('0x50')]&&_0x1819ad[_0x1a5458][_0xf88b('0x51')]&&moment()[_0xf88b('0x52')](_0x1819ad[_0x1a5458][_0xf88b('0x53')],_0x1819ad[_0x1a5458][_0xf88b('0x54')])){manager[_0xf88b('0x55')](_0x1a5458,_0x1819ad[_0x1a5458][_0xf88b('0x50')],handleJob(_0x1819ad[_0x1a5458]));manager[_0xf88b('0x56')](_0x1a5458);logger[_0xf88b('0xd')](_0xf88b('0x57'),_0x1819ad[_0x1a5458][_0xf88b('0x1c')],_0x1819ad[_0x1a5458][_0xf88b('0x50')]);}else if(manager[_0xf88b('0x58')](_0x1a5458)){manager[_0xf88b('0x48')](_0x1a5458);manager['deleteJob'](_0x1a5458);logger[_0xf88b('0xd')](_0xf88b('0x59'),_0x1819ad[_0x1a5458][_0xf88b('0x1c')],_0x1819ad[_0x1a5458][_0xf88b('0x50')]);}}for(_0x268822=0x0,_0x1a5458;_0x268822<_0x3173ff[_0xf88b('0x47')]&&!_0x27b5e7;_0x268822+=0x1){_0x1a5458=_0x3173ff[_0x268822][_0xf88b('0x44')]();if(manager[_0xf88b('0x58')](_0x1a5458)){if(_0x1819ad[_0x1a5458][_0xf88b('0x50')]&&_0x1819ad[_0x1a5458]['active']&&moment()['isBetween'](_0x1819ad[_0x1a5458][_0xf88b('0x53')],_0x1819ad[_0x1a5458][_0xf88b('0x54')])){manager[_0xf88b('0x5a')](_0x1a5458,_0x1819ad[_0x1a5458]['cron'],handleJob(_0x1819ad[_0x1a5458]));logger['info'](_0xf88b('0x5b'),_0x1819ad[_0x1a5458]['name'],_0x1819ad[_0x1a5458][_0xf88b('0x50')]);}else{manager['stop'](_0x1a5458);manager[_0xf88b('0x49')](_0x1a5458);logger['info'](_0xf88b('0x59'),_0x1819ad[_0x1a5458]['name'],_0x1819ad[_0x1a5458][_0xf88b('0x50')]);}}}})[_0xf88b('0x32')](function(_0x4da79c){logger['error'](JSON[_0xf88b('0x30')](_0x4da79c));});}exports[_0xf88b('0x5c')]=function(_0x4a67e2){return getJobs(_0x4a67e2);};exports['start']=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};
\ No newline at end of file
+var _0x613b=['request','SendMail','error','error\x20mail','email\x20sent','data','isNil','subtractNumber','subtractNumber\x20null\x20or\x20undefined','subtractUnit','subtractUnit\x20null\x20or\x20undefined','subtract','YYYY-MM-DD\x20HH:mm:ss','scheduled','output','exec\x20defaul\x20report\x20id:%s','DefaultReportId','runReport','then','catch','CustomReportId','Schedule','findAll','keys','map','toString','keyBy','difference','length','exists','deleteJob','delete\x20cron','toRun','my\x20id','resolve','run\x20job','cron','active','isBetween','startAt','add','start','stop','stop\x20cron','endAt','update','update\x20cron','run','util','path','lodash','moment','cron-job-manager','bluebird','../logger','schedule','../../mysqldb','../../api/analyticCustomReport/analyticCustomReport.controller','../../api/analyticDefaultReport/analyticDefaultReport.controller','client','http','info','Try\x20to\x20send\x20a\x20mail\x20to','email','MailAccount','Smtp','service','host','port','secure','authentication','pass','format','\x22%s\x22\x20<%s>','user','bcc','name','join','savename','basename','extname','zip','existsSync','status','Sent','message','attachments','text','Info\x20report:\x0a%s\x0aPlease\x20see\x20the\x20attachments\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20it.\x0a\x0a','stringify','Report\x20empty\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a','empty\x20file,\x20email\x20not\x20sent'];(function(_0x410201,_0x413c7c){var _0x1ce8d6=function(_0x25cdf2){while(--_0x25cdf2){_0x410201['push'](_0x410201['shift']());}};_0x1ce8d6(++_0x413c7c);}(_0x613b,0x1a0));var _0xb613=function(_0x3f3010,_0x1ecb0d){_0x3f3010=_0x3f3010-0x0;var _0x411a93=_0x613b[_0x3f3010];return _0x411a93;};'use strict';var fs=require('fs');var util=require(_0xb613('0x0'));var path=require(_0xb613('0x1'));var _=require(_0xb613('0x2'));var moment=require(_0xb613('0x3'));var CronJobManager=require(_0xb613('0x4'));var jayson=require('jayson/promise');var BPromise=require(_0xb613('0x5'));var logger=require(_0xb613('0x6'))(_0xb613('0x7'));var db=require(_0xb613('0x8'))['db'];var analyticCustomReportController=require(_0xb613('0x9'));var analyticDefaultReportController=require(_0xb613('0xa'));var client=jayson[_0xb613('0xb')][_0xb613('0xc')]({'port':0x232b});var manager=new CronJobManager();function handleSendEmail(_0x7f7254,_0xafe04f){return function(){logger[_0xb613('0xd')](_0xb613('0xe'),_0x7f7254[_0xb613('0xf')]);var _0x457761=!![];var _0x4e50f3={'tls':{'rejectUnauthorized':![]}};if(_0x7f7254[_0xb613('0x10')][_0xb613('0x11')][_0xb613('0x12')]){_0x4e50f3['service']=_0x7f7254['MailAccount'][_0xb613('0x11')][_0xb613('0x12')];}else{_0x4e50f3[_0xb613('0x13')]=_0x7f7254[_0xb613('0x10')][_0xb613('0x11')][_0xb613('0x13')];_0x4e50f3[_0xb613('0x14')]=_0x7f7254[_0xb613('0x10')][_0xb613('0x11')]['port'];_0x4e50f3[_0xb613('0x15')]=_0x7f7254[_0xb613('0x10')][_0xb613('0x11')][_0xb613('0x15')];}if(_0x7f7254['MailAccount']['Smtp'][_0xb613('0x16')]){_0x4e50f3['auth']={'user':_0x7f7254[_0xb613('0x10')]['Smtp']['user'],'pass':_0x7f7254[_0xb613('0x10')][_0xb613('0x11')][_0xb613('0x17')]};}var _0x246969={'account':_0x4e50f3,'message':{'from':util[_0xb613('0x18')](_0xb613('0x19'),_0x7f7254[_0xb613('0x10')]['name'],_0x7f7254[_0xb613('0x10')][_0xb613('0xf')]||_0x7f7254['MailAccount'][_0xb613('0x11')][_0xb613('0x1a')]),'to':_0x7f7254['email'],'cc':_0x7f7254['cc'],'bcc':_0x7f7254[_0xb613('0x1b')],'subject':util[_0xb613('0x18')]('Report\x20%s\x20last\x20%s\x20%s',_0xafe04f[_0xb613('0x1c')],_0x7f7254['subtractNumber'],_0x7f7254['subtractUnit'])}};var _0xbc0ead=path[_0xb613('0x1d')](__dirname,'../../files/reports');var _0x43eff0=_0xafe04f[_0xb613('0x1e')];var _0x5ca485=util[_0xb613('0x18')]('%s.%s',path[_0xb613('0x1f')](_0xafe04f['savename'],path[_0xb613('0x20')](_0xafe04f['savename'])),_0xb613('0x21'));var _0x1bf41d=path[_0xb613('0x1d')](_0xbc0ead,_0x43eff0);var _0x31e21b=path[_0xb613('0x1d')](_0xbc0ead,_0x5ca485);if(fs[_0xb613('0x22')](_0x1bf41d)){_0xafe04f[_0xb613('0x23')]=_0xb613('0x24');_0x246969[_0xb613('0x25')][_0xb613('0x26')]=[{'filename':_0x43eff0,'path':_0x1bf41d}];_0x246969[_0xb613('0x25')][_0xb613('0x27')]=util[_0xb613('0x18')](_0xb613('0x28'),JSON[_0xb613('0x29')](_0xafe04f,null,0x2));}else if(fs['existsSync'](_0x31e21b)){_0xafe04f[_0xb613('0x23')]=_0xb613('0x24');_0x246969[_0xb613('0x25')]['attachments']=[{'filename':_0x5ca485,'path':_0x31e21b}];}else{_0x246969[_0xb613('0x25')]['text']=_0xb613('0x2a');if(!_0x7f7254['sendIfEmpty']){_0x457761=![];logger[_0xb613('0xd')](_0xb613('0x2b'));}}if(_0x457761){return client[_0xb613('0x2c')](_0xb613('0x2d'),_0x246969)['then'](function(_0x125183){if(_0x125183[_0xb613('0x2e')]){return logger[_0xb613('0x2e')](_0xb613('0x2f'),JSON[_0xb613('0x29')](_0x125183));}return logger['info'](_0xb613('0x30'));})['catch'](function(_0x5cf002){return logger[_0xb613('0x2e')](_0xb613('0x2f'),JSON[_0xb613('0x29')](_0x5cf002));});}};}function handleError(){return function(_0x40e921){return logger[_0xb613('0x2e')](JSON[_0xb613('0x29')](_0x40e921));};}function handleResult(_0x34d91c){return function(_0x5cd067){logger[_0xb613('0xd')](_0xb613('0x31'),JSON['stringify'](_0x5cd067));if(_0x34d91c['MailAccount']&&_0x34d91c[_0xb613('0x10')][_0xb613('0x11')]&&!_[_0xb613('0x32')](_0x34d91c[_0xb613('0xf')])){setTimeout(handleSendEmail(_0x34d91c,_0x5cd067),0x3c*0x3e8);}};}function handleJob(_0x8449d6){return function(){try{if(_['isNil'](_0x8449d6[_0xb613('0x33')])){return logger['info'](_0xb613('0x34'));}if(_[_0xb613('0x32')](_0x8449d6[_0xb613('0x35')])){return logger[_0xb613('0xd')](_0xb613('0x36'));}var _0x4d6f2a={'startDate':moment()[_0xb613('0x37')](_0x8449d6[_0xb613('0x33')],_0x8449d6['subtractUnit'])[_0xb613('0x18')](_0xb613('0x38')),'endDate':moment()[_0xb613('0x18')]('YYYY-MM-DD\x20HH:mm:ss'),'type':_0xb613('0x39'),'output':_0x8449d6[_0xb613('0x3a')],'name':_0x8449d6['name']};if(!_['isNil'](_0x8449d6['DefaultReportId'])){logger[_0xb613('0xd')](_0xb613('0x3b'),_0x8449d6[_0xb613('0x3c')]);return analyticDefaultReportController[_0xb613('0x3d')]({'id':_0x8449d6['DefaultReportId']},_0x4d6f2a)[_0xb613('0x3e')](handleResult(_0x8449d6))[_0xb613('0x3f')](handleError());}if(!_[_0xb613('0x32')](_0x8449d6[_0xb613('0x40')])){logger[_0xb613('0xd')]('exec\x20custom\x20report\x20id:%s',_0x8449d6['CustomReportId']);return analyticCustomReportController[_0xb613('0x3d')]({'id':_0x8449d6[_0xb613('0x40')]},_0x4d6f2a)[_0xb613('0x3e')](handleResult(_0x8449d6))[_0xb613('0x3f')](handleError());}}catch(_0x54fbe6){logger[_0xb613('0x2e')](JSON[_0xb613('0x29')](_0x54fbe6));}return logger[_0xb613('0xd')]('no\x20report\x20id');};}function getJobs(_0x2306df){var _0xe4237b={};if(_0x2306df){_0xe4237b['id']=_0x2306df;}return db[_0xb613('0x41')][_0xb613('0x42')]({'where':_0xe4237b,'include':[{'model':db[_0xb613('0x10')],'attributes':['id',_0xb613('0x1c'),'email'],'include':[{'model':db['MailServerOut'],'as':'Smtp'}]}]})[_0xb613('0x3e')](function(_0x314a32){var _0x42f684=_[_0xb613('0x43')](manager['jobs']);var _0x5890ae=_[_0xb613('0x44')](_0x314a32,function(_0xc6a27e){return _0xc6a27e['id'][_0xb613('0x45')]();});var _0xc731da=_[_0xb613('0x46')](_0x314a32,function(_0x5d3c80){return _0x5d3c80['id'][_0xb613('0x45')]();});var _0x5dce98=_0x2306df?_0x5890ae:_[_0xb613('0x47')](_0x5890ae,_0x42f684);var _0x29898f=_['intersection'](_0x5890ae,_0x42f684);var _0x177729=_[_0xb613('0x47')](_0x42f684,_0x5890ae);var _0x477908;var _0x33ebbc;for(_0x477908=0x0;_0x477908<_0x177729[_0xb613('0x48')]&&!_0x2306df;_0x477908+=0x1){_0x33ebbc=_0x177729[_0x477908]['toString']();if(manager[_0xb613('0x49')](_0x33ebbc)){manager['stop'](_0x33ebbc);manager[_0xb613('0x4a')](_0x33ebbc);logger[_0xb613('0xd')](_0xb613('0x4b'),_0x33ebbc);}}logger[_0xb613('0xd')](_0xb613('0x4c'),JSON['stringify'](_0x5dce98));for(_0x477908=0x0;_0x477908<_0x5dce98[_0xb613('0x48')];_0x477908+=0x1){_0x33ebbc=_0x5dce98[_0x477908][_0xb613('0x45')]();logger[_0xb613('0xd')]('index',_0x33ebbc);if(_0x2306df){logger[_0xb613('0xd')](_0xb613('0x4d'),_0x2306df);logger['info'](JSON['stringify'](_0xc731da[_0x33ebbc]));BPromise[_0xb613('0x4e')]()[_0xb613('0x3e')](handleJob(_0xc731da[_0x33ebbc]));logger[_0xb613('0xd')](_0xb613('0x4f'),_0xc731da[_0x33ebbc]['name'],_0xc731da[_0x33ebbc][_0xb613('0x50')]);}else if(_0xc731da[_0x33ebbc][_0xb613('0x50')]&&_0xc731da[_0x33ebbc][_0xb613('0x51')]&&moment()[_0xb613('0x52')](_0xc731da[_0x33ebbc][_0xb613('0x53')],_0xc731da[_0x33ebbc]['endAt'])){manager[_0xb613('0x54')](_0x33ebbc,_0xc731da[_0x33ebbc][_0xb613('0x50')],handleJob(_0xc731da[_0x33ebbc]));manager[_0xb613('0x55')](_0x33ebbc);logger[_0xb613('0xd')]('add\x20cron',_0xc731da[_0x33ebbc][_0xb613('0x1c')],_0xc731da[_0x33ebbc]['cron']);}else if(manager[_0xb613('0x49')](_0x33ebbc)){manager[_0xb613('0x56')](_0x33ebbc);manager['deleteJob'](_0x33ebbc);logger[_0xb613('0xd')](_0xb613('0x57'),_0xc731da[_0x33ebbc][_0xb613('0x1c')],_0xc731da[_0x33ebbc][_0xb613('0x50')]);}}for(_0x477908=0x0,_0x33ebbc;_0x477908<_0x29898f[_0xb613('0x48')]&&!_0x2306df;_0x477908+=0x1){_0x33ebbc=_0x29898f[_0x477908]['toString']();if(manager['exists'](_0x33ebbc)){if(_0xc731da[_0x33ebbc]['cron']&&_0xc731da[_0x33ebbc][_0xb613('0x51')]&&moment()['isBetween'](_0xc731da[_0x33ebbc][_0xb613('0x53')],_0xc731da[_0x33ebbc][_0xb613('0x58')])){manager[_0xb613('0x59')](_0x33ebbc,_0xc731da[_0x33ebbc][_0xb613('0x50')],handleJob(_0xc731da[_0x33ebbc]));logger[_0xb613('0xd')](_0xb613('0x5a'),_0xc731da[_0x33ebbc][_0xb613('0x1c')],_0xc731da[_0x33ebbc][_0xb613('0x50')]);}else{manager[_0xb613('0x56')](_0x33ebbc);manager[_0xb613('0x4a')](_0x33ebbc);logger[_0xb613('0xd')]('stop\x20cron',_0xc731da[_0x33ebbc]['name'],_0xc731da[_0x33ebbc][_0xb613('0x50')]);}}}})[_0xb613('0x3f')](function(_0x2d9dec){logger[_0xb613('0x2e')](JSON['stringify'](_0x2d9dec));});}exports[_0xb613('0x5b')]=function(_0x30cb0c){return getJobs(_0x30cb0c);};exports[_0xb613('0x55')]=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};
\ No newline at end of file
index 98920e6..e8dd2e1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1a07=['destroy','then','CmContact','bulkCreate','log','finished\x20populating','contacts1','CmHopper','contacts2','hopper2','catch','util','../mysqldb','Innocenzo','Biondo','innocenzo.biondo','@xcally.com','now','push'];(function(_0x29c24c,_0x678eea){var _0xb3f79=function(_0x1d570b){while(--_0x1d570b){_0x29c24c['push'](_0x29c24c['shift']());}};_0xb3f79(++_0x678eea);}(_0x1a07,0xc9));var _0x71a0=function(_0x4b3358,_0x5cda77){_0x4b3358=_0x4b3358-0x0;var _0x1ea011=_0x1a07[_0x4b3358];return _0x1ea011;};'use strict';var util=require(_0x71a0('0x0'));var db=require(_0x71a0('0x1'))['db'];var contacts=[];var hopper=[];var contacts2=[];var hopper2=[];for(var i=0x1;i<=0x4b0;i+=0x1){contacts['push']({'id':i,'firstName':_0x71a0('0x2')+i,'lastName':_0x71a0('0x3')+i,'phone':0xf879fb460+i,'email':_0x71a0('0x4')+i+_0x71a0('0x5')});}for(var i=0x1;i<=0x4b0;i+=0x1){hopper['push']({'id':i,'active':![],'scheduledat':Date[_0x71a0('0x6')](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date['now'](),'updatedAt':Date[_0x71a0('0x6')]()});}for(var i=0x4b1;i<=0x960;i+=0x1){contacts2[_0x71a0('0x7')]({'id':i,'firstName':'Innocenzo'+i,'lastName':'Biondo'+i,'phone':0xf879fb460+i,'email':_0x71a0('0x4')+i+'@xcally.com'});}for(var i=0x4b1;i<=0x960;i+=0x1){hopper2[_0x71a0('0x7')]({'id':i,'active':![],'scheduledat':Date[_0x71a0('0x6')](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date[_0x71a0('0x6')](),'updatedAt':Date[_0x71a0('0x6')]()});}db['CmContact'][_0x71a0('0x8')]({'where':{}})[_0x71a0('0x9')](function(){return db[_0x71a0('0xa')][_0x71a0('0xb')](contacts);})['then'](function(){console[_0x71a0('0xc')](_0x71a0('0xd'),_0x71a0('0xe'));return db[_0x71a0('0xf')]['destroy']({'where':{}});})[_0x71a0('0x9')](function(){return db['CmHopper'][_0x71a0('0xb')](hopper);})[_0x71a0('0x9')](function(){console[_0x71a0('0xc')](_0x71a0('0xd'),'hopper1');return db['CmContact'][_0x71a0('0xb')](contacts2);})[_0x71a0('0x9')](function(){console['log'](_0x71a0('0xd'),_0x71a0('0x10'));return db[_0x71a0('0xf')]['bulkCreate'](hopper2);})[_0x71a0('0x9')](function(){console[_0x71a0('0xc')](_0x71a0('0xd'),_0x71a0('0x11'));})[_0x71a0('0x12')](function(_0x1b7761){console[_0x71a0('0xc')](_0x1b7761);});
\ No newline at end of file
+var _0xfc1e=['CmHopper','bulkCreate','log','finished\x20populating','hopper1','contacts2','util','../mysqldb','push','Innocenzo','Biondo','innocenzo.biondo','now','@xcally.com','CmContact','destroy','then'];(function(_0x5a368e,_0x33b365){var _0x30affd=function(_0x19905c){while(--_0x19905c){_0x5a368e['push'](_0x5a368e['shift']());}};_0x30affd(++_0x33b365);}(_0xfc1e,0x6c));var _0xefc1=function(_0x21c2c8,_0x44257e){_0x21c2c8=_0x21c2c8-0x0;var _0x4dd745=_0xfc1e[_0x21c2c8];return _0x4dd745;};'use strict';var util=require(_0xefc1('0x0'));var db=require(_0xefc1('0x1'))['db'];var contacts=[];var hopper=[];var contacts2=[];var hopper2=[];for(var i=0x1;i<=0x4b0;i+=0x1){contacts[_0xefc1('0x2')]({'id':i,'firstName':_0xefc1('0x3')+i,'lastName':_0xefc1('0x4')+i,'phone':0xf879fb460+i,'email':_0xefc1('0x5')+i+'@xcally.com'});}for(var i=0x1;i<=0x4b0;i+=0x1){hopper['push']({'id':i,'active':![],'scheduledat':Date[_0xefc1('0x6')](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date[_0xefc1('0x6')](),'updatedAt':Date['now']()});}for(var i=0x4b1;i<=0x960;i+=0x1){contacts2[_0xefc1('0x2')]({'id':i,'firstName':_0xefc1('0x3')+i,'lastName':_0xefc1('0x4')+i,'phone':0xf879fb460+i,'email':'innocenzo.biondo'+i+_0xefc1('0x7')});}for(var i=0x4b1;i<=0x960;i+=0x1){hopper2[_0xefc1('0x2')]({'id':i,'active':![],'scheduledat':Date[_0xefc1('0x6')](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date[_0xefc1('0x6')](),'updatedAt':Date['now']()});}db[_0xefc1('0x8')][_0xefc1('0x9')]({'where':{}})['then'](function(){return db[_0xefc1('0x8')]['bulkCreate'](contacts);})[_0xefc1('0xa')](function(){console['log']('finished\x20populating','contacts1');return db[_0xefc1('0xb')][_0xefc1('0x9')]({'where':{}});})[_0xefc1('0xa')](function(){return db['CmHopper'][_0xefc1('0xc')](hopper);})[_0xefc1('0xa')](function(){console[_0xefc1('0xd')](_0xefc1('0xe'),_0xefc1('0xf'));return db[_0xefc1('0x8')][_0xefc1('0xc')](contacts2);})[_0xefc1('0xa')](function(){console['log']('finished\x20populating',_0xefc1('0x10'));return db[_0xefc1('0xb')][_0xefc1('0xc')](hopper2);})[_0xefc1('0xa')](function(){console[_0xefc1('0xd')](_0xefc1('0xe'),'hopper2');})['catch'](function(_0x2690d){console['log'](_0x2690d);});
\ No newline at end of file
index e8461a9..0877a45 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d9a=['agent','password','friend','udp','wss','all','ulaw','yes','/etc/pki/tls/certs/motion.crt','actpass','\x22%s\x22\x20<%s>','User','bulkCreate','then','log','add\x20user','../mysqldb','format','%s%s'];(function(_0x22f97a,_0x5e1b21){var _0x4da5fa=function(_0x6549c9){while(--_0x6549c9){_0x22f97a['push'](_0x22f97a['shift']());}};_0x4da5fa(++_0x5e1b21);}(_0x5d9a,0x1d8));var _0xa5d9=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x5d9a[_0x2dafbe];return _0x58a45a;};'use strict';var util=require('util');var db=require(_0xa5d9('0x0'))['db'];var users=[];for(var i=0x1;i<=0xc8;i+=0x1){users['push']({'name':util[_0xa5d9('0x1')](_0xa5d9('0x2'),_0xa5d9('0x3'),i),'fullname':util[_0xa5d9('0x1')](_0xa5d9('0x2'),_0xa5d9('0x3'),i),'email':util[_0xa5d9('0x1')]('%s%s@xcally.com',_0xa5d9('0x3'),i),'role':'agent','password':_0xa5d9('0x4'),'internal':0xfa0+i,'type':_0xa5d9('0x5'),'transport':[_0xa5d9('0x6'),'ws',_0xa5d9('0x7')],'disallow':[_0xa5d9('0x8')],'allow':[_0xa5d9('0x9')],'defaultuser':util['format'](_0xa5d9('0x2'),_0xa5d9('0x3'),i),'encryption':'yes','avpf':_0xa5d9('0xa'),'force_avp':_0xa5d9('0xa'),'icesupport':_0xa5d9('0xa'),'dtlsenable':_0xa5d9('0xa'),'dtlsverify':'no','dtlscertfile':_0xa5d9('0xb'),'dtlsprivatekey':'/etc/pki/tls/private/motion.key','dtlssetup':_0xa5d9('0xc'),'callerid':util[_0xa5d9('0x1')](_0xa5d9('0xd'),util['format'](_0xa5d9('0x2'),_0xa5d9('0x3'),i),0xfa0+i)});}db[_0xa5d9('0xe')][_0xa5d9('0xf')](users)[_0xa5d9('0x10')](function(){console[_0xa5d9('0x11')](_0xa5d9('0x12'));})['catch'](function(_0x2495e9){console[_0xa5d9('0x11')](_0x2495e9);});
\ No newline at end of file
+var _0x4777=['/etc/pki/tls/certs/motion.crt','/etc/pki/tls/private/motion.key','actpass','\x22%s\x22\x20<%s>','User','bulkCreate','then','log','add\x20user','catch','util','../mysqldb','push','format','%s%s','agent','%s%s@xcally.com','password','udp','wss','yes'];(function(_0xf44d98,_0x12a472){var _0x5ebb04=function(_0x930c33){while(--_0x930c33){_0xf44d98['push'](_0xf44d98['shift']());}};_0x5ebb04(++_0x12a472);}(_0x4777,0x1d8));var _0x7477=function(_0x421eeb,_0x3d3e3e){_0x421eeb=_0x421eeb-0x0;var _0x2c7371=_0x4777[_0x421eeb];return _0x2c7371;};'use strict';var util=require(_0x7477('0x0'));var db=require(_0x7477('0x1'))['db'];var users=[];for(var i=0x1;i<=0xc8;i+=0x1){users[_0x7477('0x2')]({'name':util[_0x7477('0x3')](_0x7477('0x4'),_0x7477('0x5'),i),'fullname':util[_0x7477('0x3')](_0x7477('0x4'),'agent',i),'email':util[_0x7477('0x3')](_0x7477('0x6'),_0x7477('0x5'),i),'role':_0x7477('0x5'),'password':_0x7477('0x7'),'internal':0xfa0+i,'type':'friend','transport':[_0x7477('0x8'),'ws',_0x7477('0x9')],'disallow':['all'],'allow':['ulaw'],'defaultuser':util[_0x7477('0x3')](_0x7477('0x4'),_0x7477('0x5'),i),'encryption':_0x7477('0xa'),'avpf':_0x7477('0xa'),'force_avp':_0x7477('0xa'),'icesupport':'yes','dtlsenable':_0x7477('0xa'),'dtlsverify':'no','dtlscertfile':_0x7477('0xb'),'dtlsprivatekey':_0x7477('0xc'),'dtlssetup':_0x7477('0xd'),'callerid':util['format'](_0x7477('0xe'),util[_0x7477('0x3')](_0x7477('0x4'),_0x7477('0x5'),i),0xfa0+i)});}db[_0x7477('0xf')][_0x7477('0x10')](users)[_0x7477('0x11')](function(){console[_0x7477('0x12')](_0x7477('0x13'));})[_0x7477('0x14')](function(_0x463e81){console[_0x7477('0x12')](_0x463e81);});
\ No newline at end of file
index 8fd5c6d..a740fc1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x87c5=['util','bluebird','../mysqldb','./environment','Agents','User','name','role','type','UserProfileSection','findOne','then','autoAssociation','VoiceQueues','ChatQueues','FaxQueues','SmsQueues','MailQueues','OpenchannelQueues','findAll','Telephones','Trunks','IvrCampaigns','UserProfileResource','resourceId','map','where','Campaign','ivr','format','length','user:%s','query','find','userProfileId','ChatInteraction','ChatInteractions','MailInteraction','FaxInteraction','FaxInteractions','SmsInteraction','SmsInteractions','OpenchannelInteractions','admin','voice:inbound','voice:outbound','include','push','FaxQueue','MailQueue','Trunk','user','VoiceQueue','SmsQueue','OpenchannelQueue','getVoiceQueues','getChatQueues','getFaxQueues','getSmsQueues','getMailQueues','all','voice','chat','fax','sms','mail','openchannel','telephone:%s','trunk:%s','campaign:%s:%s','leave','emit','user_has_chat_interactions:remove','MailInteractions','removeMailInteractions','user_has_mail_interactions:remove','user_has_fax_interactions:remove','removeSmsInteractions','removeOpenchannelInteractions','user_has_openchannel_interactions:remove','log','join','address','connection','request','remotePort','SocketIO\x20','nsp','DISCONNECTED','CONNECTED'];(function(_0x7c9fba,_0x10b015){var _0x5cceed=function(_0x4ae29a){while(--_0x4ae29a){_0x7c9fba['push'](_0x7c9fba['shift']());}};_0x5cceed(++_0x10b015);}(_0x87c5,0x1c2));var _0x587c=function(_0x9fab87,_0x4092f6){_0x9fab87=_0x9fab87-0x0;var _0xe9f5b9=_0x87c5[_0x9fab87];return _0xe9f5b9;};'use strict';var _=require('lodash');var util=require(_0x587c('0x0'));var BPromise=require(_0x587c('0x1'));var db=require(_0x587c('0x2'))['db'];var config=require(_0x587c('0x3'));var queryQueues={'attributes':['id','name'],'include':[{'as':_0x587c('0x4'),'model':db[_0x587c('0x5')],'attributes':['id',_0x587c('0x6'),_0x587c('0x7')],'raw':!![],'where':{'role':'agent'},'required':![]}]};var queryTelephones={'raw':!![],'attributes':['id',_0x587c('0x6')],'where':{'role':'telephone'}};var queryTrunks={'raw':!![],'attributes':['id',_0x587c('0x6')]};var queryAgents={'raw':!![],'attributes':['id',_0x587c('0x6')],'where':{'role':'agent'}};var queryCampaigns={'raw':!![],'attributes':['id',_0x587c('0x6'),_0x587c('0x8')],'where':{'type':'ivr'}};function getAssociatedResources(_0x4d6b92,_0x43eec8,_0x17ecd7){return db[_0x587c('0x9')][_0x587c('0xa')]({'where':{'name':_0x4d6b92,'userProfileId':_0x43eec8},'raw':!![]})[_0x587c('0xb')](function(_0x478843){if(_0x478843){if(_0x478843[_0x587c('0xc')]){switch(_0x4d6b92){case _0x587c('0xd'):case _0x587c('0xe'):case _0x587c('0xf'):case _0x587c('0x10'):case _0x587c('0x11'):case _0x587c('0x12'):return db[_0x17ecd7][_0x587c('0x13')](queryQueues);case _0x587c('0x14'):return db[_0x17ecd7]['findAll'](queryTelephones);case _0x587c('0x15'):return db[_0x17ecd7][_0x587c('0x13')](queryTrunks);case _0x587c('0x16'):return db[_0x17ecd7][_0x587c('0x13')](queryCampaigns);}}else{return db[_0x587c('0x17')][_0x587c('0x13')]({'attributes':[_0x587c('0x18')],'where':{'sectionId':_0x478843['id']},'raw':!![]})['then'](function(_0x329a5d){if(_0x329a5d){var _0x50e0f4={'where':{'id':_[_0x587c('0x19')](_0x329a5d,_0x587c('0x18'))},'raw':!![]};switch(_0x17ecd7){case _0x587c('0x5'):_0x50e0f4[_0x587c('0x1a')][_0x587c('0x7')]='telephone';break;case _0x587c('0x1b'):_0x50e0f4[_0x587c('0x1a')]['type']=_0x587c('0x1c');break;}return db[_0x17ecd7][_0x587c('0x13')](_0x50e0f4);}else{return[];}});}}else{return[];}})[_0x587c('0xb')](function(_0x3d5046){return _0x3d5046;});}function joinOrLeaveQueues(_0x2dba05,_0x2a9c53,_0xb2a3e0,_0x4ecc95){_0x2dba05[_0x2a9c53](util[_0x587c('0x1d')]('%s:queue:%s',_0xb2a3e0,_0x4ecc95[_0x587c('0x6')]));if(_0x4ecc95['Agents']){for(var _0x2b94e4=0x0;_0x2b94e4<_0x4ecc95['Agents'][_0x587c('0x1e')];_0x2b94e4+=0x1){_0x2dba05[_0x2a9c53](util['format'](_0x587c('0x1f'),_0x4ecc95['Agents'][_0x2b94e4]['name']));}}}function joinOrLeave(_0x361397,_0x38883c,_0x2c5314){var _0x273a66;if(_0x361397['handshake'][_0x587c('0x20')]['id']){db[_0x587c('0x5')][_0x587c('0x21')]({'attributes':['id','name',_0x587c('0x7'),_0x587c('0x22')],'where':{'id':_0x361397['handshake']['query']['id']},'include':[{'model':db[_0x587c('0x23')],'as':_0x587c('0x24'),'attributes':['id'],'raw':!![]},{'model':db[_0x587c('0x25')],'as':'MailInteractions','attributes':['id'],'raw':!![]},{'model':db[_0x587c('0x26')],'as':_0x587c('0x27'),'attributes':['id'],'raw':!![]},{'model':db[_0x587c('0x28')],'as':_0x587c('0x29'),'attributes':['id'],'raw':!![]},{'model':db['OpenchannelInteraction'],'as':_0x587c('0x2a'),'attributes':['id'],'raw':!![]}]})[_0x587c('0xb')](function(_0x4fddf1){if(_0x4fddf1){_0x273a66=_0x4fddf1;_0x361397[_0x38883c](util[_0x587c('0x1d')](_0x587c('0x1f'),_0x4fddf1[_0x587c('0x6')]));var _0x489367=[];switch(_0x4fddf1[_0x587c('0x7')]){case _0x587c('0x2b'):_0x361397[_0x38883c](_0x587c('0x2c'));_0x361397[_0x38883c](_0x587c('0x2d'));if(queryQueues['hasOwnProperty'](_0x587c('0x2e'))){delete queryQueues[_0x587c('0x2e')];}_0x489367[_0x587c('0x2f')](db['VoiceQueue'][_0x587c('0x13')](queryQueues));_0x489367[_0x587c('0x2f')](db['ChatQueue'][_0x587c('0x13')](queryQueues));_0x489367['push'](db[_0x587c('0x30')][_0x587c('0x13')](queryQueues));_0x489367[_0x587c('0x2f')](db['SmsQueue'][_0x587c('0x13')](queryQueues));_0x489367['push'](db[_0x587c('0x31')]['findAll'](queryQueues));_0x489367['push'](db['OpenchannelQueue'][_0x587c('0x13')](queryQueues));_0x489367[_0x587c('0x2f')](db['User'][_0x587c('0x13')](queryTelephones));_0x489367['push'](db[_0x587c('0x32')]['findAll'](queryTrunks));_0x489367['push'](db[_0x587c('0x1b')][_0x587c('0x13')](queryCampaigns));_0x489367[_0x587c('0x2f')](db[_0x587c('0x5')]['findAll'](queryAgents));break;case _0x587c('0x33'):_0x361397[_0x38883c](_0x587c('0x2c'));_0x361397[_0x38883c](_0x587c('0x2d'));_0x489367[_0x587c('0x2f')](getAssociatedResources(_0x587c('0xd'),_0x4fddf1[_0x587c('0x22')],_0x587c('0x34')));_0x489367['push'](getAssociatedResources(_0x587c('0xe'),_0x4fddf1['userProfileId'],'ChatQueue'));_0x489367['push'](getAssociatedResources(_0x587c('0xf'),_0x4fddf1['userProfileId'],_0x587c('0x30')));_0x489367[_0x587c('0x2f')](getAssociatedResources('SmsQueues',_0x4fddf1['userProfileId'],_0x587c('0x35')));_0x489367[_0x587c('0x2f')](getAssociatedResources('MailQueues',_0x4fddf1[_0x587c('0x22')],_0x587c('0x31')));_0x489367[_0x587c('0x2f')](getAssociatedResources(_0x587c('0x12'),_0x4fddf1[_0x587c('0x22')],_0x587c('0x36')));_0x489367[_0x587c('0x2f')](getAssociatedResources(_0x587c('0x14'),_0x4fddf1[_0x587c('0x22')],_0x587c('0x5')));_0x489367['push'](getAssociatedResources(_0x587c('0x15'),_0x4fddf1[_0x587c('0x22')],_0x587c('0x32')));_0x489367[_0x587c('0x2f')](getAssociatedResources(_0x587c('0x16'),_0x4fddf1[_0x587c('0x22')],_0x587c('0x1b')));_0x489367[_0x587c('0x2f')](db['User'][_0x587c('0x13')](queryAgents));break;case'agent':_0x361397[_0x38883c](_0x587c('0x2c'));_0x361397[_0x38883c](_0x587c('0x2d'));_0x489367['push'](_0x4fddf1[_0x587c('0x37')]({'attributes':['id',_0x587c('0x6')]}));_0x489367[_0x587c('0x2f')](_0x4fddf1[_0x587c('0x38')]({'attributes':['id','name']}));_0x489367[_0x587c('0x2f')](_0x4fddf1[_0x587c('0x39')]({'attributes':['id',_0x587c('0x6')]}));_0x489367[_0x587c('0x2f')](_0x4fddf1[_0x587c('0x3a')]({'attributes':['id',_0x587c('0x6')]}));_0x489367['push'](_0x4fddf1[_0x587c('0x3b')]({'attributes':['id',_0x587c('0x6')]}));_0x489367[_0x587c('0x2f')](_0x4fddf1['getOpenchannelQueues']({'attributes':['id',_0x587c('0x6')]}));break;}return BPromise[_0x587c('0x3c')](_0x489367);}})[_0x587c('0xb')](function(_0xd6aea9){if(_0xd6aea9&&_0xd6aea9['length']){for(var _0x52fd9c=0x0;_0x52fd9c<_0xd6aea9[_0x587c('0x1e')];_0x52fd9c+=0x1){for(var _0x4e1a71=0x0;_0x4e1a71<_0xd6aea9[_0x52fd9c][_0x587c('0x1e')];_0x4e1a71+=0x1){switch(_0x52fd9c){case 0x0:joinOrLeaveQueues(_0x361397,_0x38883c,_0x587c('0x3d'),_0xd6aea9[_0x52fd9c][_0x4e1a71]);break;case 0x1:joinOrLeaveQueues(_0x361397,_0x38883c,_0x587c('0x3e'),_0xd6aea9[_0x52fd9c][_0x4e1a71]);break;case 0x2:joinOrLeaveQueues(_0x361397,_0x38883c,_0x587c('0x3f'),_0xd6aea9[_0x52fd9c][_0x4e1a71]);break;case 0x3:joinOrLeaveQueues(_0x361397,_0x38883c,_0x587c('0x40'),_0xd6aea9[_0x52fd9c][_0x4e1a71]);break;case 0x4:joinOrLeaveQueues(_0x361397,_0x38883c,_0x587c('0x41'),_0xd6aea9[_0x52fd9c][_0x4e1a71]);break;case 0x5:joinOrLeaveQueues(_0x361397,_0x38883c,_0x587c('0x42'),_0xd6aea9[_0x52fd9c][_0x4e1a71]);break;case 0x6:_0x361397[_0x38883c](util[_0x587c('0x1d')](_0x587c('0x43'),_0xd6aea9[_0x52fd9c][_0x4e1a71][_0x587c('0x6')]));break;case 0x7:_0x361397[_0x38883c](util[_0x587c('0x1d')](_0x587c('0x44'),_0xd6aea9[_0x52fd9c][_0x4e1a71][_0x587c('0x6')]));break;case 0x8:_0x361397[_0x38883c](util[_0x587c('0x1d')](_0x587c('0x45'),_0xd6aea9[_0x52fd9c][_0x4e1a71][_0x587c('0x8')],_0xd6aea9[_0x52fd9c][_0x4e1a71][_0x587c('0x6')]));break;case 0x9:_0x361397[_0x38883c](util['format'](_0x587c('0x1f'),_0xd6aea9[_0x52fd9c][_0x4e1a71][_0x587c('0x6')]));break;}}}}})[_0x587c('0xb')](function(){if(_0x38883c===_0x587c('0x46')){var _0xeec709=_[_0x587c('0x19')](_0x273a66[_0x587c('0x24')],'id');return _0x273a66['removeChatInteractions'](_0xeec709)[_0x587c('0xb')](function(){for(var _0x32da24=0x0;_0x32da24<_0xeec709[_0x587c('0x1e')];_0x32da24+=0x1){_0x2c5314[_0x587c('0x47')](_0x587c('0x48'),{'ChatInteractionId':Number(_0xeec709[_0x32da24]),'UserId':Number(_0x273a66['id'])});}});}})[_0x587c('0xb')](function(){if(_0x38883c===_0x587c('0x46')){var _0x369dc0=_[_0x587c('0x19')](_0x273a66[_0x587c('0x49')],'id');return _0x273a66[_0x587c('0x4a')](_0x369dc0)[_0x587c('0xb')](function(){for(var _0x439cd5=0x0;_0x439cd5<_0x369dc0[_0x587c('0x1e')];_0x439cd5+=0x1){_0x2c5314[_0x587c('0x47')](_0x587c('0x4b'),{'MailInteractionId':Number(_0x369dc0[_0x439cd5]),'UserId':Number(_0x273a66['id'])});}});}})['then'](function(){if(_0x38883c==='leave'){var _0x1a6cab=_[_0x587c('0x19')](_0x273a66[_0x587c('0x27')],'id');return _0x273a66['removeFaxInteractions'](_0x1a6cab)[_0x587c('0xb')](function(){for(var _0x2e2703=0x0;_0x2e2703<_0x1a6cab[_0x587c('0x1e')];_0x2e2703+=0x1){_0x2c5314['emit'](_0x587c('0x4c'),{'FaxInteractionId':Number(_0x1a6cab[_0x2e2703]),'UserId':Number(_0x273a66['id'])});}});}})[_0x587c('0xb')](function(){if(_0x38883c===_0x587c('0x46')){var _0x1876e2=_['map'](_0x273a66[_0x587c('0x29')],'id');return _0x273a66[_0x587c('0x4d')](_0x1876e2)['then'](function(){for(var _0x1acc51=0x0;_0x1acc51<_0x1876e2[_0x587c('0x1e')];_0x1acc51+=0x1){_0x2c5314[_0x587c('0x47')]('user_has_sms_interactions:remove',{'SmsInteractionId':Number(_0x1876e2[_0x1acc51]),'UserId':Number(_0x273a66['id'])});}});}})[_0x587c('0xb')](function(){if(_0x38883c===_0x587c('0x46')){var _0xbf9d27=_[_0x587c('0x19')](_0x273a66['OpenchannelInteractions'],'id');return _0x273a66[_0x587c('0x4e')](_0xbf9d27)['then'](function(){for(var _0x1e1ceb=0x0;_0x1e1ceb<_0xbf9d27[_0x587c('0x1e')];_0x1e1ceb+=0x1){_0x2c5314[_0x587c('0x47')](_0x587c('0x4f'),{'OpenchannelInteractionId':Number(_0xbf9d27[_0x1e1ceb]),'UserId':Number(_0x273a66['id'])});}});}})['catch'](function(_0x464793){_0x361397[_0x587c('0x50')](_0x464793);});}}function onDisconnect(_0x1230d8,_0x52c931){joinOrLeave(_0x1230d8,'leave',_0x52c931);}function onConnect(_0x52854e){joinOrLeave(_0x52854e,_0x587c('0x51'));}exports['default']=function(_0x38e241){_0x38e241['on']('connection',function(_0x5cd341){_0x5cd341['setMaxListeners'](0x0);_0x5cd341[_0x587c('0x52')]=_0x5cd341['request'][_0x587c('0x53')]['remoteAddress']+':'+_0x5cd341[_0x587c('0x54')][_0x587c('0x53')][_0x587c('0x55')];_0x5cd341['connectedAt']=new Date();_0x5cd341['log']=function(_0x1ac6fd){console[_0x587c('0x50')](_0x587c('0x56')+_0x5cd341[_0x587c('0x57')][_0x587c('0x6')]+'['+_0x5cd341[_0x587c('0x52')]+']',_0x1ac6fd);};_0x5cd341['on']('disconnect',function(){onDisconnect(_0x5cd341,_0x38e241);_0x5cd341[_0x587c('0x50')](_0x587c('0x58'));});onConnect(_0x5cd341);_0x5cd341['log'](_0x587c('0x59'));});};
\ No newline at end of file
+var _0x856e=['../mysqldb','./environment','name','Agents','User','role','agent','type','ivr','findOne','then','autoAssociation','VoiceQueues','ChatQueues','FaxQueues','SmsQueues','MailQueues','findAll','Telephones','Trunks','IvrCampaigns','UserProfileResource','map','resourceId','telephone','Campaign','where','format','user:%s','handshake','query','find','userProfileId','ChatInteraction','ChatInteractions','MailInteraction','FaxInteractions','OpenchannelInteraction','OpenchannelInteractions','voice:outbound','hasOwnProperty','include','VoiceQueue','push','FaxQueue','SmsQueue','MailQueue','OpenchannelQueue','Trunk','user','voice:inbound','ChatQueue','getVoiceQueues','getChatQueues','getFaxQueues','getSmsQueues','getMailQueues','all','length','voice','sms','trunk:%s','campaign:%s:%s','leave','removeChatInteractions','emit','removeMailInteractions','removeFaxInteractions','user_has_fax_interactions:remove','user_has_openchannel_interactions:remove','log','join','default','connection','setMaxListeners','address','remoteAddress','request','remotePort','connectedAt','nsp','disconnect','CONNECTED','lodash','bluebird'];(function(_0x1de164,_0x1ccf5f){var _0x5613b4=function(_0x22dca9){while(--_0x22dca9){_0x1de164['push'](_0x1de164['shift']());}};_0x5613b4(++_0x1ccf5f);}(_0x856e,0xa8));var _0xe856=function(_0x4492af,_0x47e25d){_0x4492af=_0x4492af-0x0;var _0x216729=_0x856e[_0x4492af];return _0x216729;};'use strict';var _=require(_0xe856('0x0'));var util=require('util');var BPromise=require(_0xe856('0x1'));var db=require(_0xe856('0x2'))['db'];var config=require(_0xe856('0x3'));var queryQueues={'attributes':['id',_0xe856('0x4')],'include':[{'as':_0xe856('0x5'),'model':db[_0xe856('0x6')],'attributes':['id',_0xe856('0x4'),_0xe856('0x7')],'raw':!![],'where':{'role':'agent'},'required':![]}]};var queryTelephones={'raw':!![],'attributes':['id',_0xe856('0x4')],'where':{'role':'telephone'}};var queryTrunks={'raw':!![],'attributes':['id',_0xe856('0x4')]};var queryAgents={'raw':!![],'attributes':['id','name'],'where':{'role':_0xe856('0x8')}};var queryCampaigns={'raw':!![],'attributes':['id',_0xe856('0x4'),_0xe856('0x9')],'where':{'type':_0xe856('0xa')}};function getAssociatedResources(_0x300c8f,_0x305fb1,_0x542fc6){return db['UserProfileSection'][_0xe856('0xb')]({'where':{'name':_0x300c8f,'userProfileId':_0x305fb1},'raw':!![]})[_0xe856('0xc')](function(_0x44d1b0){if(_0x44d1b0){if(_0x44d1b0[_0xe856('0xd')]){switch(_0x300c8f){case _0xe856('0xe'):case _0xe856('0xf'):case _0xe856('0x10'):case _0xe856('0x11'):case _0xe856('0x12'):case'OpenchannelQueues':return db[_0x542fc6][_0xe856('0x13')](queryQueues);case _0xe856('0x14'):return db[_0x542fc6][_0xe856('0x13')](queryTelephones);case _0xe856('0x15'):return db[_0x542fc6][_0xe856('0x13')](queryTrunks);case _0xe856('0x16'):return db[_0x542fc6][_0xe856('0x13')](queryCampaigns);}}else{return db[_0xe856('0x17')]['findAll']({'attributes':['resourceId'],'where':{'sectionId':_0x44d1b0['id']},'raw':!![]})[_0xe856('0xc')](function(_0x11b1ab){if(_0x11b1ab){var _0x3a417d={'where':{'id':_[_0xe856('0x18')](_0x11b1ab,_0xe856('0x19'))},'raw':!![]};switch(_0x542fc6){case _0xe856('0x6'):_0x3a417d['where'][_0xe856('0x7')]=_0xe856('0x1a');break;case _0xe856('0x1b'):_0x3a417d[_0xe856('0x1c')][_0xe856('0x9')]=_0xe856('0xa');break;}return db[_0x542fc6]['findAll'](_0x3a417d);}else{return[];}});}}else{return[];}})[_0xe856('0xc')](function(_0x76e59d){return _0x76e59d;});}function joinOrLeaveQueues(_0x15f8ea,_0x366a2b,_0x159588,_0x533ba4){_0x15f8ea[_0x366a2b](util[_0xe856('0x1d')]('%s:queue:%s',_0x159588,_0x533ba4[_0xe856('0x4')]));if(_0x533ba4['Agents']){for(var _0x36e612=0x0;_0x36e612<_0x533ba4[_0xe856('0x5')]['length'];_0x36e612+=0x1){_0x15f8ea[_0x366a2b](util[_0xe856('0x1d')](_0xe856('0x1e'),_0x533ba4['Agents'][_0x36e612][_0xe856('0x4')]));}}}function joinOrLeave(_0x2cd6d7,_0x472a80,_0x5e57ab){var _0x4bb841;if(_0x2cd6d7[_0xe856('0x1f')][_0xe856('0x20')]['id']){db[_0xe856('0x6')][_0xe856('0x21')]({'attributes':['id','name',_0xe856('0x7'),_0xe856('0x22')],'where':{'id':_0x2cd6d7[_0xe856('0x1f')][_0xe856('0x20')]['id']},'include':[{'model':db[_0xe856('0x23')],'as':_0xe856('0x24'),'attributes':['id'],'raw':!![]},{'model':db[_0xe856('0x25')],'as':'MailInteractions','attributes':['id'],'raw':!![]},{'model':db['FaxInteraction'],'as':_0xe856('0x26'),'attributes':['id'],'raw':!![]},{'model':db['SmsInteraction'],'as':'SmsInteractions','attributes':['id'],'raw':!![]},{'model':db[_0xe856('0x27')],'as':_0xe856('0x28'),'attributes':['id'],'raw':!![]}]})[_0xe856('0xc')](function(_0x5a36cd){if(_0x5a36cd){_0x4bb841=_0x5a36cd;_0x2cd6d7[_0x472a80](util[_0xe856('0x1d')]('user:%s',_0x5a36cd[_0xe856('0x4')]));var _0x35688f=[];switch(_0x5a36cd[_0xe856('0x7')]){case'admin':_0x2cd6d7[_0x472a80]('voice:inbound');_0x2cd6d7[_0x472a80](_0xe856('0x29'));if(queryQueues[_0xe856('0x2a')](_0xe856('0x2b'))){delete queryQueues['include'];}_0x35688f['push'](db[_0xe856('0x2c')][_0xe856('0x13')](queryQueues));_0x35688f[_0xe856('0x2d')](db['ChatQueue'][_0xe856('0x13')](queryQueues));_0x35688f[_0xe856('0x2d')](db[_0xe856('0x2e')]['findAll'](queryQueues));_0x35688f[_0xe856('0x2d')](db[_0xe856('0x2f')][_0xe856('0x13')](queryQueues));_0x35688f['push'](db[_0xe856('0x30')][_0xe856('0x13')](queryQueues));_0x35688f['push'](db[_0xe856('0x31')][_0xe856('0x13')](queryQueues));_0x35688f[_0xe856('0x2d')](db[_0xe856('0x6')][_0xe856('0x13')](queryTelephones));_0x35688f['push'](db[_0xe856('0x32')][_0xe856('0x13')](queryTrunks));_0x35688f[_0xe856('0x2d')](db[_0xe856('0x1b')][_0xe856('0x13')](queryCampaigns));_0x35688f[_0xe856('0x2d')](db[_0xe856('0x6')]['findAll'](queryAgents));break;case _0xe856('0x33'):_0x2cd6d7[_0x472a80](_0xe856('0x34'));_0x2cd6d7[_0x472a80](_0xe856('0x29'));_0x35688f['push'](getAssociatedResources(_0xe856('0xe'),_0x5a36cd[_0xe856('0x22')],_0xe856('0x2c')));_0x35688f[_0xe856('0x2d')](getAssociatedResources(_0xe856('0xf'),_0x5a36cd[_0xe856('0x22')],_0xe856('0x35')));_0x35688f['push'](getAssociatedResources(_0xe856('0x10'),_0x5a36cd[_0xe856('0x22')],_0xe856('0x2e')));_0x35688f['push'](getAssociatedResources(_0xe856('0x11'),_0x5a36cd[_0xe856('0x22')],_0xe856('0x2f')));_0x35688f[_0xe856('0x2d')](getAssociatedResources(_0xe856('0x12'),_0x5a36cd['userProfileId'],'MailQueue'));_0x35688f[_0xe856('0x2d')](getAssociatedResources('OpenchannelQueues',_0x5a36cd[_0xe856('0x22')],_0xe856('0x31')));_0x35688f[_0xe856('0x2d')](getAssociatedResources('Telephones',_0x5a36cd['userProfileId'],_0xe856('0x6')));_0x35688f['push'](getAssociatedResources(_0xe856('0x15'),_0x5a36cd[_0xe856('0x22')],'Trunk'));_0x35688f[_0xe856('0x2d')](getAssociatedResources(_0xe856('0x16'),_0x5a36cd['userProfileId'],'Campaign'));_0x35688f[_0xe856('0x2d')](db[_0xe856('0x6')][_0xe856('0x13')](queryAgents));break;case _0xe856('0x8'):_0x2cd6d7[_0x472a80](_0xe856('0x34'));_0x2cd6d7[_0x472a80](_0xe856('0x29'));_0x35688f['push'](_0x5a36cd[_0xe856('0x36')]({'attributes':['id',_0xe856('0x4')]}));_0x35688f['push'](_0x5a36cd[_0xe856('0x37')]({'attributes':['id',_0xe856('0x4')]}));_0x35688f[_0xe856('0x2d')](_0x5a36cd[_0xe856('0x38')]({'attributes':['id','name']}));_0x35688f[_0xe856('0x2d')](_0x5a36cd[_0xe856('0x39')]({'attributes':['id',_0xe856('0x4')]}));_0x35688f[_0xe856('0x2d')](_0x5a36cd[_0xe856('0x3a')]({'attributes':['id',_0xe856('0x4')]}));_0x35688f[_0xe856('0x2d')](_0x5a36cd['getOpenchannelQueues']({'attributes':['id',_0xe856('0x4')]}));break;}return BPromise[_0xe856('0x3b')](_0x35688f);}})[_0xe856('0xc')](function(_0x52fb33){if(_0x52fb33&&_0x52fb33['length']){for(var _0x546f7f=0x0;_0x546f7f<_0x52fb33[_0xe856('0x3c')];_0x546f7f+=0x1){for(var _0x2f4f2e=0x0;_0x2f4f2e<_0x52fb33[_0x546f7f][_0xe856('0x3c')];_0x2f4f2e+=0x1){switch(_0x546f7f){case 0x0:joinOrLeaveQueues(_0x2cd6d7,_0x472a80,_0xe856('0x3d'),_0x52fb33[_0x546f7f][_0x2f4f2e]);break;case 0x1:joinOrLeaveQueues(_0x2cd6d7,_0x472a80,'chat',_0x52fb33[_0x546f7f][_0x2f4f2e]);break;case 0x2:joinOrLeaveQueues(_0x2cd6d7,_0x472a80,'fax',_0x52fb33[_0x546f7f][_0x2f4f2e]);break;case 0x3:joinOrLeaveQueues(_0x2cd6d7,_0x472a80,_0xe856('0x3e'),_0x52fb33[_0x546f7f][_0x2f4f2e]);break;case 0x4:joinOrLeaveQueues(_0x2cd6d7,_0x472a80,'mail',_0x52fb33[_0x546f7f][_0x2f4f2e]);break;case 0x5:joinOrLeaveQueues(_0x2cd6d7,_0x472a80,'openchannel',_0x52fb33[_0x546f7f][_0x2f4f2e]);break;case 0x6:_0x2cd6d7[_0x472a80](util[_0xe856('0x1d')]('telephone:%s',_0x52fb33[_0x546f7f][_0x2f4f2e][_0xe856('0x4')]));break;case 0x7:_0x2cd6d7[_0x472a80](util[_0xe856('0x1d')](_0xe856('0x3f'),_0x52fb33[_0x546f7f][_0x2f4f2e]['name']));break;case 0x8:_0x2cd6d7[_0x472a80](util['format'](_0xe856('0x40'),_0x52fb33[_0x546f7f][_0x2f4f2e][_0xe856('0x9')],_0x52fb33[_0x546f7f][_0x2f4f2e][_0xe856('0x4')]));break;case 0x9:_0x2cd6d7[_0x472a80](util['format'](_0xe856('0x1e'),_0x52fb33[_0x546f7f][_0x2f4f2e][_0xe856('0x4')]));break;}}}}})[_0xe856('0xc')](function(){if(_0x472a80===_0xe856('0x41')){var _0x289ee2=_[_0xe856('0x18')](_0x4bb841[_0xe856('0x24')],'id');return _0x4bb841[_0xe856('0x42')](_0x289ee2)[_0xe856('0xc')](function(){for(var _0x52872b=0x0;_0x52872b<_0x289ee2[_0xe856('0x3c')];_0x52872b+=0x1){_0x5e57ab[_0xe856('0x43')]('user_has_chat_interactions:remove',{'ChatInteractionId':Number(_0x289ee2[_0x52872b]),'UserId':Number(_0x4bb841['id'])});}});}})[_0xe856('0xc')](function(){if(_0x472a80==='leave'){var _0x2df808=_[_0xe856('0x18')](_0x4bb841['MailInteractions'],'id');return _0x4bb841[_0xe856('0x44')](_0x2df808)['then'](function(){for(var _0x28546b=0x0;_0x28546b<_0x2df808[_0xe856('0x3c')];_0x28546b+=0x1){_0x5e57ab[_0xe856('0x43')]('user_has_mail_interactions:remove',{'MailInteractionId':Number(_0x2df808[_0x28546b]),'UserId':Number(_0x4bb841['id'])});}});}})[_0xe856('0xc')](function(){if(_0x472a80===_0xe856('0x41')){var _0x4eaa94=_[_0xe856('0x18')](_0x4bb841[_0xe856('0x26')],'id');return _0x4bb841[_0xe856('0x45')](_0x4eaa94)['then'](function(){for(var _0x2e866b=0x0;_0x2e866b<_0x4eaa94['length'];_0x2e866b+=0x1){_0x5e57ab['emit'](_0xe856('0x46'),{'FaxInteractionId':Number(_0x4eaa94[_0x2e866b]),'UserId':Number(_0x4bb841['id'])});}});}})[_0xe856('0xc')](function(){if(_0x472a80===_0xe856('0x41')){var _0x22d4f7=_[_0xe856('0x18')](_0x4bb841['SmsInteractions'],'id');return _0x4bb841['removeSmsInteractions'](_0x22d4f7)['then'](function(){for(var _0x53a866=0x0;_0x53a866<_0x22d4f7[_0xe856('0x3c')];_0x53a866+=0x1){_0x5e57ab[_0xe856('0x43')]('user_has_sms_interactions:remove',{'SmsInteractionId':Number(_0x22d4f7[_0x53a866]),'UserId':Number(_0x4bb841['id'])});}});}})['then'](function(){if(_0x472a80===_0xe856('0x41')){var _0x26c822=_[_0xe856('0x18')](_0x4bb841[_0xe856('0x28')],'id');return _0x4bb841['removeOpenchannelInteractions'](_0x26c822)[_0xe856('0xc')](function(){for(var _0x563f02=0x0;_0x563f02<_0x26c822[_0xe856('0x3c')];_0x563f02+=0x1){_0x5e57ab[_0xe856('0x43')](_0xe856('0x47'),{'OpenchannelInteractionId':Number(_0x26c822[_0x563f02]),'UserId':Number(_0x4bb841['id'])});}});}})['catch'](function(_0x42052d){_0x2cd6d7[_0xe856('0x48')](_0x42052d);});}}function onDisconnect(_0x12f1ba,_0x5209a3){joinOrLeave(_0x12f1ba,'leave',_0x5209a3);}function onConnect(_0x5c19c6){joinOrLeave(_0x5c19c6,_0xe856('0x49'));}exports[_0xe856('0x4a')]=function(_0x18c14){_0x18c14['on'](_0xe856('0x4b'),function(_0x26e4b7){_0x26e4b7[_0xe856('0x4c')](0x0);_0x26e4b7[_0xe856('0x4d')]=_0x26e4b7['request']['connection'][_0xe856('0x4e')]+':'+_0x26e4b7[_0xe856('0x4f')][_0xe856('0x4b')][_0xe856('0x50')];_0x26e4b7[_0xe856('0x51')]=new Date();_0x26e4b7[_0xe856('0x48')]=function(_0x46a6ef){console[_0xe856('0x48')]('SocketIO\x20'+_0x26e4b7[_0xe856('0x52')][_0xe856('0x4')]+'['+_0x26e4b7[_0xe856('0x4d')]+']',_0x46a6ef);};_0x26e4b7['on'](_0xe856('0x53'),function(){onDisconnect(_0x26e4b7,_0x18c14);_0x26e4b7[_0xe856('0x48')]('DISCONNECTED');});onConnect(_0x26e4b7);_0x26e4b7[_0xe856('0x48')](_0xe856('0x54'));});};
\ No newline at end of file
index 1ae5f7c..4774834 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4128=['default','length','hasOwnProperty','model','callback','toLowerCase','util','jayson/promise','../logger','client','Chat','afterCreate','newinteraction','ChatInteraction','afterUpdate','ChatMessage','newmessage','Sms','SmsInteraction','closedinteraction','SmsMessage','Fax','FaxInteraction','FaxMessage','Mail','MailInteraction','MailMessage','Openchannel','OpenchannelInteraction','request','EventManager','then','Trigger,\x20%s','error','code','catch','get','channel','event','UserId','User','find','name','SIP/%s','incomingmessage','outgoingmessage','opened','changed','closed','format'];(function(_0x37c082,_0x1e6eea){var _0x413fbe=function(_0x5ba203){while(--_0x5ba203){_0x37c082['push'](_0x37c082['shift']());}};_0x413fbe(++_0x1e6eea);}(_0x4128,0x1c8));var _0x8412=function(_0x59c98f,_0x1fa3f0){_0x59c98f=_0x59c98f-0x0;var _0x1cbdcd=_0x4128[_0x59c98f];return _0x1cbdcd;};'use strict';var util=require(_0x8412('0x0'));var db=require('../../mysqldb')['db'];var jayson=require(_0x8412('0x1'));var logger=require(_0x8412('0x2'))('triggers');var client=jayson[_0x8412('0x3')]['http']({'port':0x232a});var triggers=[{'channel':_0x8412('0x4'),'model':'ChatInteraction','event':_0x8412('0x5'),'condition':_0x8412('0x6'),'callback':afterCreate},{'channel':_0x8412('0x4'),'model':_0x8412('0x7'),'event':_0x8412('0x8'),'condition':'closedinteraction','callback':afterUpdate},{'channel':_0x8412('0x4'),'model':_0x8412('0x9'),'event':'afterCreate','condition':_0x8412('0xa'),'callback':afterCreateMessage},{'channel':_0x8412('0xb'),'model':_0x8412('0xc'),'event':_0x8412('0x5'),'condition':_0x8412('0x6'),'callback':afterCreate},{'channel':_0x8412('0xb'),'model':_0x8412('0xc'),'event':_0x8412('0x8'),'condition':_0x8412('0xd'),'callback':afterUpdate},{'channel':'Sms','model':_0x8412('0xe'),'event':_0x8412('0x5'),'condition':'newmessage','callback':afterCreateMessage},{'channel':_0x8412('0xf'),'model':'FaxInteraction','event':_0x8412('0x5'),'condition':_0x8412('0x6'),'callback':afterCreate},{'channel':_0x8412('0xf'),'model':_0x8412('0x10'),'event':'afterUpdate','condition':'closedinteraction','callback':afterUpdate},{'channel':_0x8412('0xf'),'model':_0x8412('0x11'),'event':_0x8412('0x5'),'condition':_0x8412('0xa'),'callback':afterCreateMessage},{'channel':_0x8412('0x12'),'model':_0x8412('0x13'),'event':_0x8412('0x5'),'condition':'newinteraction','callback':afterCreate},{'channel':_0x8412('0x12'),'model':'MailInteraction','event':_0x8412('0x8'),'condition':'closedinteraction','callback':afterUpdate},{'channel':_0x8412('0x12'),'model':_0x8412('0x14'),'event':_0x8412('0x5'),'condition':_0x8412('0xa'),'callback':afterCreateMessage},{'channel':_0x8412('0x15'),'model':_0x8412('0x16'),'event':'afterCreate','condition':_0x8412('0x6'),'callback':afterCreate},{'channel':_0x8412('0x15'),'model':_0x8412('0x16'),'event':_0x8412('0x8'),'condition':_0x8412('0xd'),'callback':afterUpdate},{'channel':_0x8412('0x15'),'model':'OpenchannelMessage','event':_0x8412('0x5'),'condition':_0x8412('0xa'),'callback':afterCreateMessage}];function request(_0x3e3aff){return client[_0x8412('0x17')](_0x8412('0x18'),_0x3e3aff)[_0x8412('0x19')](function(_0x49f6b6){logger['info'](_0x8412('0x1a'),_0x8412('0x18'),_0x49f6b6);if(_0x49f6b6[_0x8412('0x1b')]){if(_0x49f6b6[_0x8412('0x1b')][_0x8412('0x1c')]===0x1f4){logger[_0x8412('0x1b')](_0x8412('0x1a'),'EventManager',_0x49f6b6[_0x8412('0x1b')]);}}})[_0x8412('0x1d')](function(_0x4cfd28){logger[_0x8412('0x1b')]('Trigger,\x20%s','EventManager',_0x4cfd28);});}function afterCreateMessage(_0x980706,_0x17d3b2){return function(_0x5000c2,_0x4f8d4c){_0x5000c2=_0x5000c2[_0x8412('0x1e')]({'plain':!![]});_0x5000c2[_0x8412('0x1f')]=_0x980706;_0x5000c2[_0x8412('0x20')]=_0x5000c2['direction'];if(_0x5000c2[_0x8412('0x21')]){return db[_0x8412('0x22')][_0x8412('0x23')]({'where':{'id':_0x5000c2['UserId']},'attributes':['id',_0x8412('0x24')],'raw':!![]})[_0x8412('0x19')](function(_0x5132db){_0x5000c2['interface']=util['format'](_0x8412('0x25'),_0x5132db[_0x8412('0x24')]);_0x5000c2[_0x8412('0x1f')]=_0x980706;return request({'event':_0x8412('0x26'),'message':_0x5000c2});})['catch'](function(_0x407dda){console[_0x8412('0x1b')](_0x407dda);});}else{return request({'event':_0x8412('0x27'),'message':_0x5000c2});}};}function afterCreate(_0x480c49,_0x5cf37f){return function(_0x3b4264,_0x30fb5a){_0x3b4264=_0x3b4264['get']({'plain':!![]});_0x3b4264[_0x8412('0x1f')]=_0x480c49;_0x3b4264[_0x8412('0x20')]=_0x8412('0x28');return request({'event':_0x5cf37f,'message':_0x3b4264});};}function afterUpdate(_0x5ae4e0,_0x1217c7){return function(_0x5e6104,_0x1ba70f){if(_0x5e6104[_0x8412('0x29')](_0x8412('0x2a'))&&_0x5e6104[_0x8412('0x2a')]){_0x5e6104=_0x5e6104[_0x8412('0x1e')]({'plain':!![]});_0x5e6104[_0x8412('0x1f')]=_0x5ae4e0;_0x5e6104[_0x8412('0x20')]='closed';if(_0x5e6104['UserId']){return db[_0x8412('0x22')][_0x8412('0x23')]({'where':{'id':_0x5e6104['UserId']},'attributes':['id',_0x8412('0x24')],'raw':!![]})[_0x8412('0x19')](function(_0x59b12a){_0x5e6104['interface']=util[_0x8412('0x2b')](_0x8412('0x25'),_0x59b12a[_0x8412('0x24')]);return request({'event':_0x1217c7,'message':_0x5e6104});})[_0x8412('0x1d')](function(_0x59d840){console[_0x8412('0x1b')](_0x59d840);});}else{return request({'event':_0x1217c7,'message':_0x5e6104});}}};}exports[_0x8412('0x2c')]=function(){for(var _0x197f72=0x0;_0x197f72<triggers[_0x8412('0x2d')];_0x197f72+=0x1){if(db[_0x8412('0x2e')](triggers[_0x197f72]['model'])){db[triggers[_0x197f72][_0x8412('0x2f')]]['hook'](triggers[_0x197f72][_0x8412('0x20')],triggers[_0x197f72][_0x8412('0x30')](triggers[_0x197f72][_0x8412('0x1f')][_0x8412('0x31')](),triggers[_0x197f72]['condition']));}}};
\ No newline at end of file
+var _0x07c7=['UserId','User','find','interface','format','SIP/%s','name','incomingmessage','catch','outgoingmessage','closed','default','length','hasOwnProperty','model','hook','callback','channel','toLowerCase','condition','util','../../mysqldb','../logger','client','http','ChatInteraction','afterCreate','newinteraction','Chat','afterUpdate','closedinteraction','ChatMessage','newmessage','Sms','SmsInteraction','SmsMessage','Fax','FaxInteraction','FaxMessage','Mail','MailInteraction','MailMessage','Openchannel','OpenchannelInteraction','OpenchannelMessage','EventManager','then','info','Trigger,\x20%s','error','code','get','event','direction'];(function(_0x617d57,_0x223238){var _0x16ddeb=function(_0x2737ea){while(--_0x2737ea){_0x617d57['push'](_0x617d57['shift']());}};_0x16ddeb(++_0x223238);}(_0x07c7,0x158));var _0x707c=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x07c7[_0x19e35c];return _0x3e1fe8;};'use strict';var util=require(_0x707c('0x0'));var db=require(_0x707c('0x1'))['db'];var jayson=require('jayson/promise');var logger=require(_0x707c('0x2'))('triggers');var client=jayson[_0x707c('0x3')][_0x707c('0x4')]({'port':0x232a});var triggers=[{'channel':'Chat','model':_0x707c('0x5'),'event':_0x707c('0x6'),'condition':_0x707c('0x7'),'callback':afterCreate},{'channel':_0x707c('0x8'),'model':_0x707c('0x5'),'event':_0x707c('0x9'),'condition':_0x707c('0xa'),'callback':afterUpdate},{'channel':_0x707c('0x8'),'model':_0x707c('0xb'),'event':_0x707c('0x6'),'condition':_0x707c('0xc'),'callback':afterCreateMessage},{'channel':_0x707c('0xd'),'model':_0x707c('0xe'),'event':'afterCreate','condition':_0x707c('0x7'),'callback':afterCreate},{'channel':_0x707c('0xd'),'model':_0x707c('0xe'),'event':_0x707c('0x9'),'condition':'closedinteraction','callback':afterUpdate},{'channel':_0x707c('0xd'),'model':_0x707c('0xf'),'event':_0x707c('0x6'),'condition':_0x707c('0xc'),'callback':afterCreateMessage},{'channel':_0x707c('0x10'),'model':_0x707c('0x11'),'event':'afterCreate','condition':_0x707c('0x7'),'callback':afterCreate},{'channel':_0x707c('0x10'),'model':_0x707c('0x11'),'event':_0x707c('0x9'),'condition':_0x707c('0xa'),'callback':afterUpdate},{'channel':_0x707c('0x10'),'model':_0x707c('0x12'),'event':'afterCreate','condition':_0x707c('0xc'),'callback':afterCreateMessage},{'channel':_0x707c('0x13'),'model':_0x707c('0x14'),'event':_0x707c('0x6'),'condition':'newinteraction','callback':afterCreate},{'channel':_0x707c('0x13'),'model':_0x707c('0x14'),'event':_0x707c('0x9'),'condition':'closedinteraction','callback':afterUpdate},{'channel':_0x707c('0x13'),'model':_0x707c('0x15'),'event':_0x707c('0x6'),'condition':_0x707c('0xc'),'callback':afterCreateMessage},{'channel':_0x707c('0x16'),'model':_0x707c('0x17'),'event':_0x707c('0x6'),'condition':_0x707c('0x7'),'callback':afterCreate},{'channel':_0x707c('0x16'),'model':_0x707c('0x17'),'event':'afterUpdate','condition':_0x707c('0xa'),'callback':afterUpdate},{'channel':_0x707c('0x16'),'model':_0x707c('0x18'),'event':_0x707c('0x6'),'condition':'newmessage','callback':afterCreateMessage}];function request(_0x20bf8f){return client['request'](_0x707c('0x19'),_0x20bf8f)[_0x707c('0x1a')](function(_0x5cfe4a){logger[_0x707c('0x1b')](_0x707c('0x1c'),_0x707c('0x19'),_0x5cfe4a);if(_0x5cfe4a[_0x707c('0x1d')]){if(_0x5cfe4a[_0x707c('0x1d')][_0x707c('0x1e')]===0x1f4){logger[_0x707c('0x1d')](_0x707c('0x1c'),_0x707c('0x19'),_0x5cfe4a['error']);}}})['catch'](function(_0x497892){logger[_0x707c('0x1d')]('Trigger,\x20%s','EventManager',_0x497892);});}function afterCreateMessage(_0x1a61d2,_0x20ddd2){return function(_0x5537db,_0x212d97){_0x5537db=_0x5537db[_0x707c('0x1f')]({'plain':!![]});_0x5537db['channel']=_0x1a61d2;_0x5537db[_0x707c('0x20')]=_0x5537db[_0x707c('0x21')];if(_0x5537db[_0x707c('0x22')]){return db[_0x707c('0x23')][_0x707c('0x24')]({'where':{'id':_0x5537db[_0x707c('0x22')]},'attributes':['id','name'],'raw':!![]})[_0x707c('0x1a')](function(_0x89ca49){_0x5537db[_0x707c('0x25')]=util[_0x707c('0x26')](_0x707c('0x27'),_0x89ca49[_0x707c('0x28')]);_0x5537db['channel']=_0x1a61d2;return request({'event':_0x707c('0x29'),'message':_0x5537db});})[_0x707c('0x2a')](function(_0x4b6cd4){console['error'](_0x4b6cd4);});}else{return request({'event':_0x707c('0x2b'),'message':_0x5537db});}};}function afterCreate(_0xd46338,_0x5b8c0e){return function(_0x2093c1,_0x227704){_0x2093c1=_0x2093c1['get']({'plain':!![]});_0x2093c1['channel']=_0xd46338;_0x2093c1[_0x707c('0x20')]='opened';return request({'event':_0x5b8c0e,'message':_0x2093c1});};}function afterUpdate(_0x33fe95,_0x146649){return function(_0x46d65c,_0x246535){if(_0x46d65c['changed'](_0x707c('0x2c'))&&_0x46d65c[_0x707c('0x2c')]){_0x46d65c=_0x46d65c['get']({'plain':!![]});_0x46d65c['channel']=_0x33fe95;_0x46d65c['event']='closed';if(_0x46d65c[_0x707c('0x22')]){return db[_0x707c('0x23')][_0x707c('0x24')]({'where':{'id':_0x46d65c[_0x707c('0x22')]},'attributes':['id',_0x707c('0x28')],'raw':!![]})['then'](function(_0x5db1f5){_0x46d65c['interface']=util['format'](_0x707c('0x27'),_0x5db1f5['name']);return request({'event':_0x146649,'message':_0x46d65c});})[_0x707c('0x2a')](function(_0x1ddf2c){console[_0x707c('0x1d')](_0x1ddf2c);});}else{return request({'event':_0x146649,'message':_0x46d65c});}}};}exports[_0x707c('0x2d')]=function(){for(var _0x43a789=0x0;_0x43a789<triggers[_0x707c('0x2e')];_0x43a789+=0x1){if(db[_0x707c('0x2f')](triggers[_0x43a789][_0x707c('0x30')])){db[triggers[_0x43a789][_0x707c('0x30')]][_0x707c('0x31')](triggers[_0x43a789]['event'],triggers[_0x43a789][_0x707c('0x32')](triggers[_0x43a789][_0x707c('0x33')][_0x707c('0x34')](),triggers[_0x43a789][_0x707c('0x35')]));}}};
\ No newline at end of file
index 46a1fd0..2c08f37 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x304e=['./license/util','voice','mail','fax','sms','isValidChannel','toLowerCase','includes','clearBlockUser','isUndefined','blockedAt','role','agent','count','then','agents','Maximum\x20login\x20has\x20been\x20reached','catch','lodash','bluebird','../mysqldb'];(function(_0x19ec56,_0xe6589f){var _0x3e2587=function(_0x3f013b){while(--_0x3f013b){_0x19ec56['push'](_0x19ec56['shift']());}};_0x3e2587(++_0xe6589f);}(_0x304e,0x1e0));var _0xe304=function(_0x427189,_0x3b4960){_0x427189=_0x427189-0x0;var _0x356774=_0x304e[_0x427189];return _0x356774;};'use strict';var _=require(_0xe304('0x0'));var BPromise=require(_0xe304('0x1'));var db=require(_0xe304('0x2'))['db'];var util=require(_0xe304('0x3'));var channels=[_0xe304('0x4'),_0xe304('0x5'),'chat',_0xe304('0x6'),_0xe304('0x7'),'openchannel'];exports['getChannels']=function(){return channels;};exports[_0xe304('0x8')]=function(_0x480d5b){_0x480d5b=_0x480d5b[_0xe304('0x9')]();return _[_0xe304('0xa')](channels,_0x480d5b);};exports[_0xe304('0xb')]=function(_0xd3efbe,_0x3f1c7c,_0x40bf10,_0x3fd335){var _0x9e0308={'loginAttempts':_0x3f1c7c,'blocked':_0x40bf10};if(!_[_0xe304('0xc')](_0x3fd335)){_0x9e0308[_0xe304('0xd')]=_0x3fd335;}return _0xd3efbe['updateAttributes'](_0x9e0308);};exports['getLicense']=function(_0x325c53){return new BPromise(function(_0x213934,_0x4cbe57){var _0x12fb93=0x0;if(_0x325c53[_0xe304('0xe')]!==_0xe304('0xf')){_0x213934(_0x325c53);}db['User'][_0xe304('0x10')]({'where':{'role':'agent','online':!![],'id':{'$ne':_0x325c53['id']}}})[_0xe304('0x11')](function(_0x3c967c){_0x12fb93=_0x3c967c;return util['getLicense']();})[_0xe304('0x11')](function(_0x58d54c){if(_0x58d54c&&_0x58d54c[_0xe304('0x12')]&&_0x12fb93>=_0x58d54c['agents']){throw Error(_0xe304('0x13'));}_0x213934(_0x325c53);})[_0xe304('0x14')](function(_0x44539d){_0x4cbe57(_0x44539d);});});};
\ No newline at end of file
+var _0x9796=['toLowerCase','clearBlockUser','isUndefined','blockedAt','updateAttributes','role','agent','User','then','getLicense','agents','catch','lodash','bluebird','../mysqldb','./license/util','voice','chat','fax','sms','openchannel','getChannels','isValidChannel'];(function(_0x4884a7,_0x18e38a){var _0x56b60e=function(_0x2ba8a3){while(--_0x2ba8a3){_0x4884a7['push'](_0x4884a7['shift']());}};_0x56b60e(++_0x18e38a);}(_0x9796,0x7f));var _0x6979=function(_0x10ed87,_0x2efa9d){_0x10ed87=_0x10ed87-0x0;var _0x33519a=_0x9796[_0x10ed87];return _0x33519a;};'use strict';var _=require(_0x6979('0x0'));var BPromise=require(_0x6979('0x1'));var db=require(_0x6979('0x2'))['db'];var util=require(_0x6979('0x3'));var channels=[_0x6979('0x4'),'mail',_0x6979('0x5'),_0x6979('0x6'),_0x6979('0x7'),_0x6979('0x8')];exports[_0x6979('0x9')]=function(){return channels;};exports[_0x6979('0xa')]=function(_0x3efb6c){_0x3efb6c=_0x3efb6c[_0x6979('0xb')]();return _['includes'](channels,_0x3efb6c);};exports[_0x6979('0xc')]=function(_0x53a244,_0x3a0fbd,_0x59e390,_0x34054e){var _0x1ac677={'loginAttempts':_0x3a0fbd,'blocked':_0x59e390};if(!_[_0x6979('0xd')](_0x34054e)){_0x1ac677[_0x6979('0xe')]=_0x34054e;}return _0x53a244[_0x6979('0xf')](_0x1ac677);};exports['getLicense']=function(_0x389ffa){return new BPromise(function(_0x44e6fc,_0x1b98be){var _0x44507a=0x0;if(_0x389ffa[_0x6979('0x10')]!==_0x6979('0x11')){_0x44e6fc(_0x389ffa);}db[_0x6979('0x12')]['count']({'where':{'role':_0x6979('0x11'),'online':!![],'id':{'$ne':_0x389ffa['id']}}})[_0x6979('0x13')](function(_0x13da74){_0x44507a=_0x13da74;return util[_0x6979('0x14')]();})[_0x6979('0x13')](function(_0x58f6d0){if(_0x58f6d0&&_0x58f6d0[_0x6979('0x15')]&&_0x44507a>=_0x58f6d0['agents']){throw Error('Maximum\x20login\x20has\x20been\x20reached');}_0x44e6fc(_0x389ffa);})[_0x6979('0x16')](function(_0x236acc){_0x1b98be(_0x236acc);});});};
\ No newline at end of file
index 3dc894d..37e3fda 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x80b1=['status','render','json','send','exports','404'];(function(_0x1933db,_0x4b20a1){var _0x22f447=function(_0x5a29a2){while(--_0x5a29a2){_0x1933db['push'](_0x1933db['shift']());}};_0x22f447(++_0x4b20a1);}(_0x80b1,0x64));var _0x180b=function(_0x2cdd4d,_0x394c2f){_0x2cdd4d=_0x2cdd4d-0x0;var _0x55cbc8=_0x80b1[_0x2cdd4d];return _0x55cbc8;};'use strict';module[_0x180b('0x0')][0x194]=function pageNotFound(_0x419c7c,_0x367b7f){var _0xc98dfe=_0x180b('0x1');var _0x36b3ea=0x194;var _0x8edd43={'status':_0x36b3ea};_0x367b7f[_0x180b('0x2')](_0x8edd43[_0x180b('0x2')]);_0x367b7f[_0x180b('0x3')](_0xc98dfe,{},function(_0x2221cd,_0x29e365){if(_0x2221cd){return _0x367b7f[_0x180b('0x2')](_0x8edd43[_0x180b('0x2')])[_0x180b('0x4')](_0x8edd43);}_0x367b7f[_0x180b('0x5')](_0x29e365);});};
\ No newline at end of file
+var _0x9cbe=['render','json','send','exports','404','status'];(function(_0x47badc,_0x944263){var _0x88abda=function(_0xa5902f){while(--_0xa5902f){_0x47badc['push'](_0x47badc['shift']());}};_0x88abda(++_0x944263);}(_0x9cbe,0x17d));var _0xe9cb=function(_0x176329,_0x568c84){_0x176329=_0x176329-0x0;var _0x31997c=_0x9cbe[_0x176329];return _0x31997c;};'use strict';module[_0xe9cb('0x0')][0x194]=function pageNotFound(_0x5c240c,_0x1c54a7){var _0x3065b9=_0xe9cb('0x1');var _0x190583=0x194;var _0x44c8cd={'status':_0x190583};_0x1c54a7[_0xe9cb('0x2')](_0x44c8cd[_0xe9cb('0x2')]);_0x1c54a7[_0xe9cb('0x3')](_0x3065b9,{},function(_0x25fdd7,_0x6cd464){if(_0x25fdd7){return _0x1c54a7['status'](_0x44c8cd[_0xe9cb('0x2')])[_0xe9cb('0x4')](_0x44c8cd);}_0x1c54a7[_0xe9cb('0x5')](_0x6cd464);});};
\ No newline at end of file
diff --git a/server/migrations/2.4.3.js b/server/migrations/2.4.3.js
new file mode 100644 (file)
index 0000000..6f77728
--- /dev/null
@@ -0,0 +1,166 @@
+'use strict';
+
+var BPromise = require('bluebird');
+var util = require('util');
+
+var logger = require('../config/logger')('migration');
+
+var Sequence = function() {};
+
+Sequence.prototype.enqueue = function(fn) {
+    this.tail = this.tail ? this.tail.finally(fn) : fn();
+};
+
+var Migration = function(queryInterface) {
+    this.queryInterface = queryInterface;
+    this.sequence = new Sequence();
+};
+
+Migration.prototype.changeColumn = function(table, column, type) {
+    var _this = this;
+    this.sequence.enqueue(function() {
+        return _this.queryInterface
+            .changeColumn(table, column, type)
+            .then(function() {
+                logger.info('Changed column %s in table %s', column, table);
+            })
+            .catch(function(err) {
+                logger.info(JSON.stringify(err));
+            });
+    });
+};
+
+Migration.prototype.addColumn = function(table, column, type) {
+    var _this = this;
+    this.sequence.enqueue(function() {
+        return _this.queryInterface
+            .addColumn(table, column, type)
+            .then(function() {
+                logger.info('Added column %s to %s', column, table);
+            })
+            .catch(function(err) {
+                logger.info(JSON.stringify(err));
+            });
+    });
+};
+
+Migration.prototype.dropTable = function(table) {
+    var _this = this;
+    this.sequence.enqueue(function() {
+        return _this.queryInterface
+            .dropTable(table, {
+                force: true
+            })
+            .then(function() {
+                logger.info('table dropped %s', table);
+            })
+            .catch(function(err) {
+                logger.info(JSON.stringify(err));
+            });
+    });
+};
+
+Migration.prototype.addIndex = function(table, column, options) {
+    var _this = this;
+    this.sequence.enqueue(function() {
+        return _this.queryInterface
+            .addIndex(table, column, {
+                indexName: options.indexName,
+                indicesType: options.indicesType
+            })
+            .then(function() {
+                logger.info('addIndex %s %s %s [%s]', table, column.join(','), options.indexName, options.indicesType);
+            })
+            .catch(function(err) {
+                logger.info(JSON.stringify(err));
+            });
+    });
+};
+
+Migration.prototype.removeIndex = function(table, indexName) {
+    var _this = this;
+    this.sequence.enqueue(function() {
+        return _this.queryInterface
+            .removeIndex(table, indexName)
+            .then(function() {
+                logger.info('removeIndex %s %s', table, indexName);
+            })
+            .catch(function(err) {
+                logger.info(JSON.stringify(err));
+            });
+    });
+};
+
+Migration.prototype.query = function(sql) {
+    var _this = this;
+    this.sequence.enqueue(function() {
+        return _this.queryInterface.sequelize
+            .query(sql)
+            .then(function() {
+                logger.info('query %s', sql);
+            })
+            .catch(function(err) {
+                logger.info(JSON.stringify(err));
+            });
+    });
+};
+
+Migration.prototype.removeColumn = function(table, column) {
+    var _this = this;
+    this.sequence.enqueue(function() {
+        return _this.queryInterface
+            .removeColumn(table, column)
+            .then(function() {
+                logger.info('Removed column %s from %s', column, table);
+            })
+            .catch(function(err) {
+                logger.info(
+                    util.inspect(err, {
+                        showHidden: false,
+                        depth: null
+                    })
+                );
+            });
+    });
+};
+
+Migration.prototype.renameColumn = function(table, oldColumn, newColumn) {
+    var _this = this;
+    this.sequence.enqueue(function() {
+        return _this.queryInterface
+            .renameColumn(table, oldColumn, newColumn)
+            .then(function() {
+                logger.info('Renamed column from %s to %s on %s', oldColumn, newColumn, table);
+            })
+            .catch(function(err) {
+                logger.info(
+                    util.inspect(err, {
+                        showHidden: false,
+                        depth: null
+                    })
+                );
+            });
+    });
+};
+
+Migration.prototype.final = function(resolve) {
+    this.sequence.enqueue(function() {
+        return resolve();
+    });
+};
+
+module.exports = {
+    up: function(queryInterface, Sequelize) {
+        return new BPromise(function(resolve) {
+            var migration = new Migration(queryInterface);
+
+            // START FINAL
+            migration.final(resolve);
+            // END FINAL
+        });
+    },
+
+    down: function(queryInterface, Sequelize) {
+        // var migration = new Migration(queryInterface);
+    }
+};
\ No newline at end of file
index 4292073..4eeab09 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7ee1=['MailServerIn','MailAccountId','MailServerOut','hasOne','Imap','Smtp','Interactions','Applications','ListId','TemplateId','UserMailQueue','MailInteractionId','Account','Owner','mail_interaction_has_tags','Tags','Users','Attachments','restrict','TagId','List','MailQueueReport','Items','Disposition','FaxAccountId','Answers','Exntensions','FaxInteractionId','fax_interaction_has_tags','ThroughTags','Interaction','Attachment','AttachmentId','team_has_fax_queues','FaxQueueReport','Dispositions','SmsAccountId','SmsInteractionId','sms_interaction_has_tags','SmsQueueId','team_has_sms_queues','OpenchannelAccountId','user_has_openchannel_accounts','OpenchannelApplication','OpenchannelQueueId','OpenchannelInteractionId','openchannel_interaction_has_tags','team_has_openchannel_queues','ChatWebsiteId','ChatProactiveAction','ProactiveActions','OpenchannelQueueReport','Agent','Queue','ChatQueueId','Website','ChatInteractionId','chat_interaction_has_tags','team_has_chat_queues','ChatGroupId','CmCompany','CompanyId','OpenchannelInteractions','Company','cm_contact_has_tags','OwnerId','CampaignId','Automation','OneAll','AutomationAllId','Any','AutomationAnyId','Action','Actions','Intervals','MailApplications','SmsApplications','Schedule','DefaultReportId','CustomReportId','AllCondition','TriggerAllId','AnyConditions','AnyCondition','TriggerAnyId','TriggerId','AnalyticFieldReport','Fields','MetricId','Configurations','AccountId','Descriptions','FieldId','Subject','SubjectId','DescriptionId','Field','VariableId','Subjects','Description','int_desk_configuration_has_tags','int_zendesk_configuration_has_tags','int_freshdesk_configuration_has_tags','int_vtiger_configuration_has_tags','FromId','SessionId','ProjectId','JscriptyProject','team_has_mail_queues','TrunkBackupId','SquareProjectId','campaigns_has_cm_lists','campaigns_has_cm_blacklists','FromMailAccountId','FromAccount','FromUserId','FromAgent','ToUserId','ToAgent','ToMailQueueId','ToQueue','ToAccount','FromChatWebsiteId','ChatTransferReport','ToChatQueueId','ToChatWebsiteId','ToFaxQueueId','ToFaxAccountId','OpenchannelTransferReport','FromOpenchannelAccountId','FromSmsAccountId','ToSmsQueueId','ToSmsAccountId','CustomFields','Queues','voice_queues_has_cm_lists','UserProfileSection','UserProfileSections','Resources','sectionId','exports','path','jstz','determine','sequelize','motion2','xcall','xC@LL1234','mysql','utf8mb4','utf8','sequelizeHistory','defaultsDeep','127.0.0.1','name','utf8_general_ci','database','username','password','options','import','../api/user/user.model','VoiceChanSpy','../api/voiceChanSpy/voiceChanSpy.model','VoiceContext','../api/voiceContext/voiceContext.model','VoiceExtension','VoiceMusicOnHold','VoiceQueue','../api/voiceQueue/voiceQueue.model','VoiceRecording','../api/voiceRecording/voiceRecording.model','ScreenRecording','../api/voiceMail/voiceMail.model','VoiceMailMessage','../api/voiceMailMessage/voiceMailMessage.model','VoiceCallReport','../api/voiceCallReport/voiceCallReport.model','VoiceDialReport','../api/voiceDialReport/voiceDialReport.model','VoiceAgentReport','VoiceQueueReport','MemberReport','../api/memberReport/memberReport.model','../api/trunk/trunk.model','VoiceTransferReport','../api/voiceTransferReport/voiceTransferReport.model','UserVoiceQueueRt','../api/userVoiceQueueRt/userVoiceQueueRt.model','UserVoiceQueue','../api/userVoiceQueue/userVoiceQueue.model','UserChatQueue','../api/userMailQueue/userMailQueue.model','UserFaxQueue','../api/userFaxQueue/userFaxQueue.model','../api/userSmsQueue/userSmsQueue.model','../api/userOpenchannelQueue/userOpenchannelQueue.model','../api/mailServerOut/mailServerOut.model','MailAccount','MailQueue','../api/mailQueue/mailQueue.model','MailSubstatus','MailInteraction','../api/mailInteraction/mailInteraction.model','MailMessage','../api/mailMessage/mailMessage.model','MailApplication','../api/mailQueueReport/mailQueueReport.model','Dashboard','../api/dashboard/dashboard.model','DashboardItem','../api/dashboardItem/dashboardItem.model','FaxAccount','../api/faxAccount/faxAccount.model','FaxApplication','FaxInteraction','../api/faxInteraction/faxInteraction.model','FaxMessage','../api/faxMessage/faxMessage.model','FaxQueue','../api/faxQueue/faxQueue.model','../api/smsAccount/smsAccount.model','SmsApplication','SmsInteraction','../api/smsInteraction/smsInteraction.model','SmsMessage','../api/smsMessage/smsMessage.model','SmsQueue','../api/smsQueue/smsQueue.model','../api/openchannelAccount/openchannelAccount.model','OpenchannelInteraction','../api/openchannelInteraction/openchannelInteraction.model','OpenchannelMessage','../api/openchannelMessage/openchannelMessage.model','OpenchannelQueue','../api/openchannelQueue/openchannelQueue.model','ChatWebsite','../api/chatWebsite/chatWebsite.model','ChatApplication','../api/chatApplication/chatApplication.model','ChatInteraction','ChatMessage','../api/chatMessage/chatMessage.model','ChatOfflineMessage','ChatQueue','../api/chatQueue/chatQueue.model','ChatGroup','../api/chatGroup/chatGroup.model','../api/cmContact/cmContact.model','CmHopper','../api/cmHopper/cmHopper.model','CmHopperBlack','../api/cmHopperBlack/cmHopperBlack.model','CmHopperFinal','../api/cmHopperFinal/cmHopperFinal.model','CmHopperHistory','../api/cmHopperHistory/cmHopperHistory.model','ReportAgentPreview','../api/reportAgentPreview/reportAgentPreview.model','CmCustomField','../api/cmCustomField/cmCustomField.model','../api/action/action.model','../api/automation/automation.model','CannedAnswer','../api/cannedAnswer/cannedAnswer.model','../api/disposition/disposition.model','Condition','../api/condition/condition.model','Interval','../api/interval/interval.model','../api/pause/pause.model','Cdr','VoiceQueuesLog','../api/voiceQueuesLog/voiceQueuesLog.model','Sound','Tag','../api/tag/tag.model','Template','../api/template/template.model','Trigger','../api/trigger/trigger.model','Variable','../api/variable/variable.model','Integration','../api/integration/integration.model','IntegrationReport','../api/integrationReport/integrationReport.model','AnalyticCustomReport','../api/analyticCustomReport/analyticCustomReport.model','AnalyticDefaultReport','../api/analyticDefaultReport/analyticDefaultReport.model','../api/analyticExtractedReport/analyticExtractedReport.model','AnalyticMetric','../api/analyticFieldReport/analyticFieldReport.model','AnalyticTreeReport','../api/analyticTreeReport/analyticTreeReport.model','SalesforceAccount','../api/intSalesforceAccount/intSalesforceAccount.model','SalesforceConfiguration','SalesforceField','../api/intSalesforceField/intSalesforceField.model','SugarcrmAccount','../api/intSugarcrmAccount/intSugarcrmAccount.model','SugarcrmConfiguration','SugarcrmField','../api/intSugarcrmField/intSugarcrmField.model','DeskAccount','DeskConfiguration','../api/intDeskConfiguration/intDeskConfiguration.model','DeskField','../api/intDeskField/intDeskField.model','ZohoAccount','../api/intZohoAccount/intZohoAccount.model','ZohoConfiguration','../api/intZohoConfiguration/intZohoConfiguration.model','ZohoField','../api/intZohoField/intZohoField.model','ZendeskAccount','../api/intZendeskAccount/intZendeskAccount.model','ZendeskConfiguration','../api/intZendeskConfiguration/intZendeskConfiguration.model','ZendeskField','../api/intZendeskField/intZendeskField.model','FreshdeskAccount','../api/intFreshdeskAccount/intFreshdeskAccount.model','FreshdeskConfiguration','../api/intFreshdeskConfiguration/intFreshdeskConfiguration.model','FreshdeskField','../api/intFreshdeskField/intFreshdeskField.model','VtigerAccount','../api/intVtigerAccount/intVtigerAccount.model','VtigerConfiguration','VtigerField','../api/intVtigerField/intVtigerField.model','ServicenowAccount','../api/intServicenowAccount/intServicenowAccount.model','ServicenowConfiguration','../api/intServicenowConfiguration/intServicenowConfiguration.model','ServicenowField','Dynamics365Account','../api/intDynamics365Account/intDynamics365Account.model','Dynamics365Configuration','Dynamics365Field','../api/intDynamics365Field/intDynamics365Field.model','../api/network/network.model','ChatQueueReport','../api/chatQueueReport/chatQueueReport.model','ChatInternalMessage','../api/chatInternalMessage/chatInternalMessage.model','JscriptyAnswerReport','JscriptyQuestionReport','../api/jscriptyQuestionReport/jscriptyQuestionReport.model','JscriptySessionReport','../api/jscriptySessionReport/jscriptySessionReport.model','SmsQueueReport','../api/smsQueueReport/smsQueueReport.model','SquareReport','../api/squareReport/squareReport.model','SquareDetailsReport','../api/squareReportDetail/squareReportDetail.model','Setting','../api/setting/setting.model','SquareOdbc','../api/squareOdbc/squareOdbc.model','SquareProject','../api/squareProject/squareProject.model','../api/squareRecording/squareRecording.model','SquareMessage','../api/squareMessage/squareMessage.model','Team','License','../api/license/license.model','Campaign','../api/campaign/campaign.model','Migration','../api/migration/migration.model','../api/attachment/attachment.model','../api/plugin/plugin.model','MailTransferReport','../api/mailTransferReport/mailTransferReport.model','FaxTransferReport','../api/faxTransferReport/faxTransferReport.model','../api/openchannelTransferReport/openchannelTransferReport.model','SmsTransferReport','../api/smsTransferReport/smsTransferReport.model','CmList','VoicePrefix','../api/userProfile/userProfile.model','UserProfileResource','User','VoiceMail','cascade','UserId','hasMany','Recordings','VoiceQueuesRt','Extensions','HopperFinals','HopperHistory','ChatInteractions','SmsInteractions','FaxInteractions','belongsTo','UserProfile','userProfileId','belongsToMany','Groups','chat_group_has_users','CmContact','Contacts','cm_user_has_contacts','Lists','cm_user_has_lists','user_has_teams','MailInteractions','user_has_mail_interactions','user_has_chat_interactions','user_has_sms_interactions','user_has_openchannel_interactions','VoiceQueues','MailQueues','ChatQueues','FaxQueues','SmsQueues','UserSmsQueue','OpenchannelQueues','UserOpenchannelQueue','VoicePrefixes','user_has_voice_prefixes','user_has_chat_websites','FaxAccounts','user_has_fax_accounts','MailAccounts','user_has_mail_accounts','OpenchannelAccount','OpenchannelAccounts','SmsAccount','SmsAccounts','user_has_sms_accounts','SquareProjects','SpiedAgents','ChanSpyId','Sounds','moh_has_sounds','Members','VoiceQueueId','Hoppers','HopperHistories','JscriptySessions','TrunkId','Trunk','TrunkBackup','IntervalId','Pause','mandatoryDispositionPause','mandatoryDispositionPauseId','Agents','Teams','team_has_voice_queues','BlackLists','voice_queues_has_cm_blacklists','Messages','mailbox','mailboxuser','QueueCalls','AgentReports','uniqueid','Contact','ContactId'];(function(_0x47af7d,_0x5e56a2){var _0x277ed3=function(_0xbea742){while(--_0xbea742){_0x47af7d['push'](_0x47af7d['shift']());}};_0x277ed3(++_0x5e56a2);}(_0x7ee1,0x8d));var _0x17ee=function(_0x1c4cbc,_0x2cfb1e){_0x1c4cbc=_0x1c4cbc-0x0;var _0x2659fe=_0x7ee1[_0x1c4cbc];return _0x2659fe;};'use strict';var path=require(_0x17ee('0x0'));var config=require('../config/environment');var Sequelize=require('sequelize');var _=require('lodash');var jstz=require(_0x17ee('0x1'));var timezone=jstz[_0x17ee('0x2')]();config[_0x17ee('0x3')]=_['defaultsDeep'](config[_0x17ee('0x3')],{'database':_0x17ee('0x4'),'username':_0x17ee('0x5'),'password':_0x17ee('0x6'),'options':{'host':'127.0.0.1','port':0xcea,'dialect':_0x17ee('0x7'),'dialectOptions':{'charset':_0x17ee('0x8')},'logging':![],'timezone':timezone['name'](),'define':{'charset':_0x17ee('0x9'),'collate':'utf8_general_ci'}}});config[_0x17ee('0xa')]=_[_0x17ee('0xb')](config[_0x17ee('0xa')],{'database':'motion2','username':'xcall','password':'xC@LL1234','options':{'host':_0x17ee('0xc'),'port':0xcea,'dialect':'mysql','dialectOptions':{'charset':_0x17ee('0x8')},'logging':![],'timezone':timezone[_0x17ee('0xd')](),'define':{'charset':_0x17ee('0x9'),'collate':_0x17ee('0xe')}}});var db={'Sequelize':Sequelize,'sequelize':new Sequelize(config['sequelize'][_0x17ee('0xf')],config['sequelize'][_0x17ee('0x10')],config[_0x17ee('0x3')][_0x17ee('0x11')],config[_0x17ee('0x3')][_0x17ee('0x12')])};var dbH={'Sequelize':Sequelize,'sequelize':new Sequelize(config[_0x17ee('0xa')][_0x17ee('0xf')],config[_0x17ee('0xa')][_0x17ee('0x10')],config[_0x17ee('0xa')][_0x17ee('0x11')],config['sequelizeHistory']['options'])};db['User']=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x14'));db[_0x17ee('0x15')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x16'));db[_0x17ee('0x17')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x18'));db[_0x17ee('0x19')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/voiceExtension/voiceExtension.model');db[_0x17ee('0x1a')]=db['sequelize'][_0x17ee('0x13')]('../api/voiceMusicOnHold/voiceMusicOnHold.model');db[_0x17ee('0x1b')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x1c'));db[_0x17ee('0x1d')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x1e'));db[_0x17ee('0x1f')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/screenRecording/screenRecording.model');db['VoiceMail']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x20'));db[_0x17ee('0x21')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x22'));db[_0x17ee('0x23')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x24'));db[_0x17ee('0x25')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x26'));db[_0x17ee('0x27')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/voiceAgentReport/voiceAgentReport.model');db[_0x17ee('0x28')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/voiceQueueReport/voiceQueueReport.model');db[_0x17ee('0x29')]=db[_0x17ee('0x3')]['import'](_0x17ee('0x2a'));db['Trunk']=db[_0x17ee('0x3')]['import'](_0x17ee('0x2b'));db[_0x17ee('0x2c')]=db[_0x17ee('0x3')]['import'](_0x17ee('0x2d'));db[_0x17ee('0x2e')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x2f'));db[_0x17ee('0x30')]=db['sequelize']['import'](_0x17ee('0x31'));db[_0x17ee('0x32')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/userChatQueue/userChatQueue.model');db['UserMailQueue']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x33'));db[_0x17ee('0x34')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x35'));db['UserSmsQueue']=db['sequelize']['import'](_0x17ee('0x36'));db['UserOpenchannelQueue']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x37'));db['MailServerIn']=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/mailServerIn/mailServerIn.model');db['MailServerOut']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x38'));db[_0x17ee('0x39')]=db[_0x17ee('0x3')]['import']('../api/mailAccount/mailAccount.model');db[_0x17ee('0x3a')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x3b'));db[_0x17ee('0x3c')]=db[_0x17ee('0x3')]['import']('../api/mailSubstatus/mailSubstatus.model');db[_0x17ee('0x3d')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x3e'));db[_0x17ee('0x3f')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x40'));db[_0x17ee('0x41')]=db[_0x17ee('0x3')]['import']('../api/mailApplication/mailApplication.model');db['MailQueueReport']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x42'));db[_0x17ee('0x43')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x44'));db[_0x17ee('0x45')]=db[_0x17ee('0x3')]['import'](_0x17ee('0x46'));db[_0x17ee('0x47')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x48'));db[_0x17ee('0x49')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/faxApplication/faxApplication.model');db[_0x17ee('0x4a')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x4b'));db[_0x17ee('0x4c')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x4d'));db[_0x17ee('0x4e')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x4f'));db['FaxQueueReport']=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/faxQueueReport/faxQueueReport.model');db['SmsAccount']=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x50'));db[_0x17ee('0x51')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/smsApplication/smsApplication.model');db[_0x17ee('0x52')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x53'));db[_0x17ee('0x54')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x55'));db[_0x17ee('0x56')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x57'));db['OpenchannelAccount']=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x58'));db['OpenchannelApplication']=db['sequelize'][_0x17ee('0x13')]('../api/openchannelApplication/openchannelApplication.model');db[_0x17ee('0x59')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x5a'));db[_0x17ee('0x5b')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x5c'));db[_0x17ee('0x5d')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x5e'));db[_0x17ee('0x5f')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x60'));db['OpenchannelQueueReport']=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/openchannelQueueReport/openchannelQueueReport.model');db[_0x17ee('0x61')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x62'));db[_0x17ee('0x63')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/chatInteraction/chatInteraction.model');db[_0x17ee('0x64')]=db['sequelize']['import'](_0x17ee('0x65'));db[_0x17ee('0x66')]=db[_0x17ee('0x3')]['import']('../api/chatOfflineMessage/chatOfflineMessage.model');db[_0x17ee('0x67')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x68'));db[_0x17ee('0x69')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x6a'));db['ChatProactiveAction']=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/chatProactiveAction/chatProactiveAction.model');db['CmCompany']=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/cmCompany/cmCompany.model');db['CmContact']=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x6b'));db[_0x17ee('0x6c')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x6d'));db[_0x17ee('0x6e')]=db[_0x17ee('0x3')]['import'](_0x17ee('0x6f'));db[_0x17ee('0x70')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x71'));db[_0x17ee('0x72')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x73'));db[_0x17ee('0x74')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x75'));db[_0x17ee('0x76')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x77'));db['Action']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x78'));db['Automation']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x79'));db[_0x17ee('0x7a')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x7b'));db['Disposition']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x7c'));db[_0x17ee('0x7d')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x7e'));db[_0x17ee('0x7f')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x80'));db['Pause']=db[_0x17ee('0x3')]['import'](_0x17ee('0x81'));db[_0x17ee('0x82')]=db[_0x17ee('0x3')]['import']('../api/cdr/cdr.model');db[_0x17ee('0x83')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x84'));db['Schedule']=db[_0x17ee('0x3')]['import']('../api/schedule/schedule.model');db[_0x17ee('0x85')]=db[_0x17ee('0x3')]['import']('../api/sound/sound.model');db[_0x17ee('0x86')]=db[_0x17ee('0x3')]['import'](_0x17ee('0x87'));db[_0x17ee('0x88')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x89'));db[_0x17ee('0x8a')]=db[_0x17ee('0x3')]['import'](_0x17ee('0x8b'));db[_0x17ee('0x8c')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x8d'));db[_0x17ee('0x8e')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x8f'));db[_0x17ee('0x90')]=db[_0x17ee('0x3')]['import'](_0x17ee('0x91'));db[_0x17ee('0x92')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x93'));db[_0x17ee('0x94')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0x95'));db['AnalyticExtractedReport']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x96'));db[_0x17ee('0x97')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/analyticMetric/analyticMetric.model');db['AnalyticFieldReport']=db[_0x17ee('0x3')]['import'](_0x17ee('0x98'));db[_0x17ee('0x99')]=db['sequelize']['import'](_0x17ee('0x9a'));db[_0x17ee('0x9b')]=db[_0x17ee('0x3')]['import'](_0x17ee('0x9c'));db[_0x17ee('0x9d')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/intSalesforceConfiguration/intSalesforceConfiguration.model');db[_0x17ee('0x9e')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x9f'));db[_0x17ee('0xa0')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xa1'));db[_0x17ee('0xa2')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/intSugarcrmConfiguration/intSugarcrmConfiguration.model');db[_0x17ee('0xa3')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xa4'));db[_0x17ee('0xa5')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/intDeskAccount/intDeskAccount.model');db[_0x17ee('0xa6')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xa7'));db[_0x17ee('0xa8')]=db[_0x17ee('0x3')]['import'](_0x17ee('0xa9'));db[_0x17ee('0xaa')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xab'));db[_0x17ee('0xac')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xad'));db[_0x17ee('0xae')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xaf'));db[_0x17ee('0xb0')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xb1'));db[_0x17ee('0xb2')]=db[_0x17ee('0x3')]['import'](_0x17ee('0xb3'));db[_0x17ee('0xb4')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xb5'));db[_0x17ee('0xb6')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xb7'));db[_0x17ee('0xb8')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xb9'));db[_0x17ee('0xba')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xbb'));db[_0x17ee('0xbc')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xbd'));db[_0x17ee('0xbe')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/intVtigerConfiguration/intVtigerConfiguration.model');db[_0x17ee('0xbf')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xc0'));db[_0x17ee('0xc1')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xc2'));db[_0x17ee('0xc3')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xc4'));db[_0x17ee('0xc5')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/intServicenowField/intServicenowField.model');db[_0x17ee('0xc6')]=db[_0x17ee('0x3')]['import'](_0x17ee('0xc7'));db[_0x17ee('0xc8')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/intDynamics365Configuration/intDynamics365Configuration.model');db[_0x17ee('0xc9')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xca'));db[_0x17ee('0x8e')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0x8f'));db['Network']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xcb'));db[_0x17ee('0xcc')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xcd'));db[_0x17ee('0xce')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xcf'));db[_0x17ee('0xd0')]=db[_0x17ee('0x3')]['import']('../api/jscriptyAnswerReport/jscriptyAnswerReport.model');db[_0x17ee('0xd1')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xd2'));db[_0x17ee('0xd3')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xd4'));db[_0x17ee('0xd5')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xd6'));db[_0x17ee('0xd7')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xd8'));db[_0x17ee('0xd9')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xda'));db['JscriptyProject']=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/jscriptyProject/jscriptyProject.model');db[_0x17ee('0xdb')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xdc'));db[_0x17ee('0xdd')]=db[_0x17ee('0x3')]['import'](_0x17ee('0xde'));db[_0x17ee('0xdf')]=db[_0x17ee('0x3')]['import'](_0x17ee('0xe0'));db['SquareRecording']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xe1'));db[_0x17ee('0xe2')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xe3'));db[_0x17ee('0xe4')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/team/team.model');db[_0x17ee('0xe5')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xe6'));db[_0x17ee('0xe7')]=db['sequelize']['import'](_0x17ee('0xe8'));db[_0x17ee('0xe9')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xea'));db['Attachment']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xeb'));db['Plugin']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xec'));db[_0x17ee('0xed')]=db[_0x17ee('0x3')]['import'](_0x17ee('0xee'));db['ChatTransferReport']=db['sequelize']['import']('../api/chatTransferReport/chatTransferReport.model');db[_0x17ee('0xef')]=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xf0'));db['OpenchannelTransferReport']=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xf1'));db[_0x17ee('0xf2')]=db[_0x17ee('0x3')][_0x17ee('0x13')](_0x17ee('0xf3'));db[_0x17ee('0xf4')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/cmList/cmList.model');db[_0x17ee('0xf5')]=db[_0x17ee('0x3')]['import']('../api/voicePrefix/voicePrefix.model');db['UserProfile']=db['sequelize'][_0x17ee('0x13')](_0x17ee('0xf6'));db['UserProfileSection']=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/userProfileSection/userProfileSection.model');db[_0x17ee('0xf7')]=db[_0x17ee('0x3')][_0x17ee('0x13')]('../api/userProfileResource/userProfileResource.model');db[_0x17ee('0xf8')]['hasOne'](db[_0x17ee('0xf9')],{'as':_0x17ee('0xf9'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0xfb')});db[_0x17ee('0xf8')][_0x17ee('0xfc')](db[_0x17ee('0x1d')],{'as':_0x17ee('0xfd'),'foreignKey':'UserId'});db[_0x17ee('0xf8')][_0x17ee('0xfc')](db[_0x17ee('0x2e')],{'as':_0x17ee('0xfe'),'foreignKey':_0x17ee('0xfb')});db[_0x17ee('0xf8')]['hasMany'](db[_0x17ee('0x19')],{'as':_0x17ee('0xff'),'onDelete':_0x17ee('0xfa'),'hooks':!![]});db[_0x17ee('0xf8')][_0x17ee('0xfc')](db['CmHopperFinal'],{'as':_0x17ee('0x100'),'foreignKey':_0x17ee('0xfb')});db[_0x17ee('0xf8')][_0x17ee('0xfc')](db[_0x17ee('0x72')],{'as':_0x17ee('0x101'),'foreignKey':'UserId'});db['User']['hasMany'](db[_0x17ee('0x74')],{'as':'ReportAgentPreview','foreignKey':_0x17ee('0xfb')});db[_0x17ee('0xf8')][_0x17ee('0xfc')](db[_0x17ee('0x59')],{'as':'OpenchannelInteractions','foreignKey':'UserId'});db[_0x17ee('0xf8')]['hasMany'](db['ChatInteraction'],{'as':_0x17ee('0x102'),'foreignKey':'UserId'});db[_0x17ee('0xf8')][_0x17ee('0xfc')](db['SmsInteraction'],{'as':_0x17ee('0x103'),'foreignKey':'UserId'});db[_0x17ee('0xf8')][_0x17ee('0xfc')](db[_0x17ee('0x4a')],{'as':_0x17ee('0x104'),'foreignKey':_0x17ee('0xfb')});db[_0x17ee('0xf8')][_0x17ee('0xfc')](db[_0x17ee('0x3d')],{'as':'MailInteractions','foreignKey':_0x17ee('0xfb')});db[_0x17ee('0xf8')][_0x17ee('0x105')](db[_0x17ee('0x106')],{'as':_0x17ee('0x106'),'foreignKey':_0x17ee('0x107')});db['User'][_0x17ee('0x108')](db[_0x17ee('0x69')],{'as':_0x17ee('0x109'),'through':_0x17ee('0x10a')});db[_0x17ee('0xf8')][_0x17ee('0x108')](db[_0x17ee('0x10b')],{'as':_0x17ee('0x10c'),'through':_0x17ee('0x10d')});db[_0x17ee('0xf8')][_0x17ee('0x108')](db[_0x17ee('0xf4')],{'as':_0x17ee('0x10e'),'through':_0x17ee('0x10f')});db['User'][_0x17ee('0x108')](db[_0x17ee('0xe4')],{'through':_0x17ee('0x110')});db[_0x17ee('0xf8')]['belongsToMany'](db[_0x17ee('0x3d')],{'as':_0x17ee('0x111'),'through':_0x17ee('0x112')});db[_0x17ee('0xf8')]['belongsToMany'](db[_0x17ee('0x63')],{'as':_0x17ee('0x102'),'through':_0x17ee('0x113')});db[_0x17ee('0xf8')][_0x17ee('0x108')](db[_0x17ee('0x4a')],{'as':_0x17ee('0x104'),'through':'user_has_fax_interactions'});db['User'][_0x17ee('0x108')](db[_0x17ee('0x52')],{'as':'SmsInteractions','through':_0x17ee('0x114')});db[_0x17ee('0xf8')]['belongsToMany'](db[_0x17ee('0x59')],{'as':'OpenchannelInteractions','through':_0x17ee('0x115')});db['User'][_0x17ee('0x108')](db[_0x17ee('0x1b')],{'as':_0x17ee('0x116'),'through':'UserVoiceQueue','required':![]});db[_0x17ee('0xf8')]['belongsToMany'](db[_0x17ee('0x3a')],{'as':_0x17ee('0x117'),'through':'UserMailQueue','required':![]});db[_0x17ee('0xf8')][_0x17ee('0x108')](db[_0x17ee('0x67')],{'as':_0x17ee('0x118'),'through':'UserChatQueue','required':![],'hooks':!![]});db[_0x17ee('0xf8')][_0x17ee('0x108')](db[_0x17ee('0x4e')],{'as':_0x17ee('0x119'),'through':_0x17ee('0x34'),'required':![]});db[_0x17ee('0xf8')][_0x17ee('0x108')](db[_0x17ee('0x56')],{'as':_0x17ee('0x11a'),'through':_0x17ee('0x11b'),'required':![]});db[_0x17ee('0xf8')][_0x17ee('0x108')](db[_0x17ee('0x5d')],{'as':_0x17ee('0x11c'),'through':_0x17ee('0x11d'),'required':![]});db[_0x17ee('0xf8')][_0x17ee('0x108')](db[_0x17ee('0xf4')],{'through':_0x17ee('0x10f')});db[_0x17ee('0xf8')][_0x17ee('0x108')](db[_0x17ee('0xf5')],{'as':_0x17ee('0x11e'),'through':_0x17ee('0x11f'),'required':![]});db['User'][_0x17ee('0x108')](db[_0x17ee('0x5f')],{'as':'ChatWebsites','through':_0x17ee('0x120')});db[_0x17ee('0xf8')][_0x17ee('0x108')](db['FaxAccount'],{'as':_0x17ee('0x121'),'through':_0x17ee('0x122')});db[_0x17ee('0xf8')]['belongsToMany'](db[_0x17ee('0x39')],{'as':_0x17ee('0x123'),'through':_0x17ee('0x124')});db[_0x17ee('0xf8')][_0x17ee('0x108')](db[_0x17ee('0x125')],{'as':_0x17ee('0x126'),'through':'user_has_openchannel_accounts'});db[_0x17ee('0xf8')]['belongsToMany'](db[_0x17ee('0x127')],{'as':_0x17ee('0x128'),'through':_0x17ee('0x129')});db[_0x17ee('0xf8')][_0x17ee('0x108')](db[_0x17ee('0xdf')],{'as':_0x17ee('0x12a'),'through':'user_has_square_projects'});db[_0x17ee('0x15')]['hasMany'](db[_0x17ee('0x19')],{'as':_0x17ee('0x12b'),'onDelete':'cascade','foreignKey':_0x17ee('0x12c')});db['VoiceContext']['hasMany'](db[_0x17ee('0x19')],{'onDelete':_0x17ee('0xfa')});db['VoiceExtension'][_0x17ee('0xfc')](db['VoiceExtension'],{'as':'Applications','onDelete':'cascade'});db[_0x17ee('0x1a')][_0x17ee('0x108')](db[_0x17ee('0x85')],{'as':_0x17ee('0x12d'),'through':_0x17ee('0x12e')});db[_0x17ee('0x1b')][_0x17ee('0xfc')](db[_0x17ee('0x2e')],{'as':_0x17ee('0x12f'),'foreignKey':_0x17ee('0x130')});db[_0x17ee('0x1b')][_0x17ee('0xfc')](db[_0x17ee('0x6c')],{'as':_0x17ee('0x131'),'foreignKey':_0x17ee('0x130')});db[_0x17ee('0x1b')][_0x17ee('0xfc')](db[_0x17ee('0x70')],{'as':'HopperFinals','foreignKey':'VoiceQueueId'});db[_0x17ee('0x1b')][_0x17ee('0xfc')](db[_0x17ee('0x72')],{'as':_0x17ee('0x132'),'foreignKey':_0x17ee('0x130')});db[_0x17ee('0x1b')][_0x17ee('0xfc')](db[_0x17ee('0x74')],{'as':_0x17ee('0x74'),'foreignKey':_0x17ee('0x130')});db[_0x17ee('0x1b')][_0x17ee('0xfc')](db[_0x17ee('0x6e')],{'as':'HopperBlacks','foreignKey':_0x17ee('0x130')});db[_0x17ee('0x1b')][_0x17ee('0xfc')](db[_0x17ee('0xd3')],{'as':_0x17ee('0x133'),'foreignKey':'VoiceQueueId'});db[_0x17ee('0x1b')][_0x17ee('0x105')](db['Trunk'],{'as':'Trunk','foreignKey':_0x17ee('0x134')});db[_0x17ee('0x1b')]['belongsTo'](db[_0x17ee('0x135')],{'as':_0x17ee('0x136'),'foreignKey':'TrunkBackupId'});db['VoiceQueue']['belongsTo'](db[_0x17ee('0x7f')],{'as':_0x17ee('0x7f'),'foreignKey':_0x17ee('0x137')});db[_0x17ee('0x1b')][_0x17ee('0x105')](db[_0x17ee('0x138')],{'as':_0x17ee('0x139'),'foreignKey':_0x17ee('0x13a')});db[_0x17ee('0x1b')][_0x17ee('0x108')](db[_0x17ee('0xf4')],{'as':_0x17ee('0x10e'),'through':'voice_queues_has_cm_lists'});db[_0x17ee('0x1b')][_0x17ee('0x108')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x13b'),'through':'UserVoiceQueue'});db[_0x17ee('0x1b')][_0x17ee('0x108')](db[_0x17ee('0xe4')],{'as':_0x17ee('0x13c'),'through':_0x17ee('0x13d')});db['VoiceQueue']['belongsToMany'](db[_0x17ee('0xf4')],{'as':_0x17ee('0x13e'),'through':_0x17ee('0x13f')});db[_0x17ee('0x1d')][_0x17ee('0x105')](db['User'],{'as':_0x17ee('0xf8'),'foreignKey':_0x17ee('0xfb')});db[_0x17ee('0x1f')]['belongsTo'](db[_0x17ee('0xf8')],{'as':'User','foreignKey':'UserId'});db[_0x17ee('0xf9')]['hasMany'](db[_0x17ee('0x21')],{'as':_0x17ee('0x140'),'onDelete':'cascade','foreignKey':'mailboxuser','sourceKey':_0x17ee('0x141')});db[_0x17ee('0x21')][_0x17ee('0x105')](db[_0x17ee('0xf9')],{'foreignKey':_0x17ee('0x142'),'targetKey':_0x17ee('0x141')});db[_0x17ee('0x23')][_0x17ee('0xfc')](db['VoiceQueueReport'],{'as':_0x17ee('0x143'),'foreignKey':'uniqueid','constraints':![]});db[_0x17ee('0x23')][_0x17ee('0xfc')](db[_0x17ee('0x27')],{'as':_0x17ee('0x144'),'foreignKey':_0x17ee('0x145'),'constraints':![]});db[_0x17ee('0x23')]['belongsTo'](db['User'],{'as':'User','foreignKey':'UserId'});db[_0x17ee('0x23')][_0x17ee('0x105')](db[_0x17ee('0x10b')],{'as':_0x17ee('0x146'),'foreignKey':_0x17ee('0x147')});db[_0x17ee('0x148')][_0x17ee('0x105')](db['MailAccount'],{'as':_0x17ee('0x39'),'foreignKey':_0x17ee('0x149')});db[_0x17ee('0x14a')][_0x17ee('0x105')](db['MailAccount'],{'as':_0x17ee('0x39'),'foreignKey':'MailAccountId'});db['MailAccount'][_0x17ee('0x14b')](db[_0x17ee('0x148')],{'as':_0x17ee('0x14c'),'onDelete':'cascade'});db['MailAccount']['hasOne'](db[_0x17ee('0x14a')],{'as':_0x17ee('0x14d'),'onDelete':_0x17ee('0xfa')});db[_0x17ee('0x39')]['hasMany'](db['Disposition'],{'as':'Dispositions','foreignKey':_0x17ee('0x149')});db[_0x17ee('0x39')][_0x17ee('0xfc')](db[_0x17ee('0x7a')],{'as':'Answers','foreignKey':_0x17ee('0x149')});db[_0x17ee('0x39')]['hasMany'](db['MailMessage'],{'as':_0x17ee('0x140'),'foreignKey':_0x17ee('0x149')});db[_0x17ee('0x39')][_0x17ee('0xfc')](db['MailInteraction'],{'as':_0x17ee('0x14e')});db[_0x17ee('0x39')][_0x17ee('0xfc')](db[_0x17ee('0x41')],{'as':_0x17ee('0x14f')});db['MailAccount'][_0x17ee('0x105')](db[_0x17ee('0xf4')],{'as':'List','foreignKey':_0x17ee('0x150')});db[_0x17ee('0x39')][_0x17ee('0x105')](db['Template'],{'as':_0x17ee('0x88'),'foreignKey':_0x17ee('0x151')});db[_0x17ee('0x39')][_0x17ee('0x105')](db[_0x17ee('0x138')],{'as':_0x17ee('0x139'),'foreignKey':_0x17ee('0x13a')});db[_0x17ee('0x39')]['belongsToMany'](db[_0x17ee('0xf8')],{'as':_0x17ee('0x13b'),'through':_0x17ee('0x124')});db[_0x17ee('0x3a')][_0x17ee('0x108')](db['User'],{'as':_0x17ee('0x13b'),'through':_0x17ee('0x152')});db[_0x17ee('0x3a')]['belongsToMany'](db[_0x17ee('0xe4')],{'through':'team_has_mail_queues','as':_0x17ee('0x13c')});db[_0x17ee('0x3d')]['hasMany'](db[_0x17ee('0x3f')],{'as':_0x17ee('0x140'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x153')});db[_0x17ee('0x3d')][_0x17ee('0x105')](db[_0x17ee('0x39')],{'as':_0x17ee('0x154'),'foreignKey':_0x17ee('0x149')});db[_0x17ee('0x3d')][_0x17ee('0x105')](db[_0x17ee('0x10b')],{'as':'Contact','foreignKey':'ContactId'});db[_0x17ee('0x3d')][_0x17ee('0x105')](db['User'],{'as':_0x17ee('0x155'),'foreignKey':_0x17ee('0xfb')});db['MailInteraction']['belongsToMany'](db['Tag'],{'through':_0x17ee('0x156'),'as':_0x17ee('0x157')});db['MailInteraction'][_0x17ee('0x108')](db[_0x17ee('0x86')],{'through':_0x17ee('0x156'),'as':'ThroughTags'});db[_0x17ee('0x3d')][_0x17ee('0x108')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x158'),'through':_0x17ee('0x112'),'foreignKey':'MailInteractionId'});db['MailMessage'][_0x17ee('0xfc')](db['Attachment'],{'as':_0x17ee('0x159'),'onDelete':_0x17ee('0xfa')});db[_0x17ee('0x3f')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'as':_0x17ee('0xf8')});db[_0x17ee('0x3f')]['belongsTo'](db[_0x17ee('0x10b')],{'onDelete':_0x17ee('0xfa'),'as':_0x17ee('0x146')});db[_0x17ee('0x3f')][_0x17ee('0x105')](db[_0x17ee('0x3d')],{'as':'Interaction','foreignKey':_0x17ee('0x153')});db[_0x17ee('0x3f')][_0x17ee('0x105')](db['MailAccount'],{'as':_0x17ee('0x154'),'foreignKey':'MailAccountId'});db[_0x17ee('0x41')]['belongsTo'](db[_0x17ee('0xf8')],{'onDelete':'restrict'});db[_0x17ee('0x41')][_0x17ee('0x105')](db[_0x17ee('0x3a')],{'onDelete':_0x17ee('0x15a')});db['MailApplication']['belongsTo'](db[_0x17ee('0x39')],{'onDelete':'restrict'});db[_0x17ee('0x41')][_0x17ee('0x105')](db[_0x17ee('0x7f')],{'onDelete':'restrict','foreignKey':_0x17ee('0x137')});db['MailApplication'][_0x17ee('0x105')](db[_0x17ee('0x86')],{'onDelete':_0x17ee('0x15a'),'foreignKey':_0x17ee('0x15b')});db['MailQueueReport'][_0x17ee('0x105')](db[_0x17ee('0x39')],{});db['MailQueueReport'][_0x17ee('0x105')](db[_0x17ee('0xf4')],{'as':_0x17ee('0x15c'),'foreignKey':_0x17ee('0x150')});db[_0x17ee('0x15d')][_0x17ee('0x105')](db['CmContact'],{'as':_0x17ee('0x146'),'foreignKey':_0x17ee('0x147')});db[_0x17ee('0x15d')][_0x17ee('0x105')](db[_0x17ee('0x3d')],{});db[_0x17ee('0x15d')][_0x17ee('0x105')](db[_0x17ee('0x3f')],{});db[_0x17ee('0x15d')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{});db[_0x17ee('0x15d')]['belongsTo'](db[_0x17ee('0x3a')],{});db[_0x17ee('0x43')][_0x17ee('0xfc')](db[_0x17ee('0x45')],{'as':_0x17ee('0x15e'),'onDelete':_0x17ee('0xfa')});db[_0x17ee('0x47')][_0x17ee('0xfc')](db[_0x17ee('0x15f')],{'as':'Dispositions','foreignKey':_0x17ee('0x160')});db[_0x17ee('0x47')][_0x17ee('0xfc')](db['CannedAnswer'],{'as':_0x17ee('0x161'),'foreignKey':_0x17ee('0x160')});db[_0x17ee('0x47')]['hasMany'](db['FaxInteraction'],{'as':_0x17ee('0x14e')});db['FaxAccount'][_0x17ee('0xfc')](db[_0x17ee('0x49')],{'as':_0x17ee('0x14f')});db[_0x17ee('0x47')]['hasMany'](db[_0x17ee('0x19')],{'as':_0x17ee('0x162'),'onDelete':_0x17ee('0xfa')});db[_0x17ee('0x47')]['hasMany'](db[_0x17ee('0x4c')],{'as':_0x17ee('0x140')});db[_0x17ee('0x47')][_0x17ee('0x105')](db[_0x17ee('0x135')],{'as':_0x17ee('0x135')});db[_0x17ee('0x47')][_0x17ee('0x105')](db[_0x17ee('0xf4')],{'as':_0x17ee('0x15c'),'foreignKey':_0x17ee('0x150')});db['FaxAccount'][_0x17ee('0x105')](db[_0x17ee('0x138')],{'as':_0x17ee('0x139'),'foreignKey':_0x17ee('0x13a')});db[_0x17ee('0x47')][_0x17ee('0x108')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x13b'),'through':_0x17ee('0x122')});db[_0x17ee('0x49')]['belongsTo'](db[_0x17ee('0xf8')],{'onDelete':'restrict'});db[_0x17ee('0x49')][_0x17ee('0x105')](db[_0x17ee('0x4e')],{'onDelete':_0x17ee('0x15a')});db[_0x17ee('0x49')][_0x17ee('0x105')](db['FaxAccount'],{'onDelete':_0x17ee('0x15a')});db['FaxApplication'][_0x17ee('0x105')](db[_0x17ee('0x86')],{'onDelete':_0x17ee('0x15a'),'foreignKey':_0x17ee('0x15b')});db[_0x17ee('0x4a')][_0x17ee('0xfc')](db[_0x17ee('0x4c')],{'as':_0x17ee('0x140'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x163')});db['FaxInteraction']['belongsTo'](db[_0x17ee('0x47')],{'as':_0x17ee('0x154'),'foreignKey':_0x17ee('0x160')});db[_0x17ee('0x4a')]['belongsTo'](db[_0x17ee('0x10b')],{'as':_0x17ee('0x146'),'foreignKey':_0x17ee('0x147')});db[_0x17ee('0x4a')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x155'),'foreignKey':_0x17ee('0xfb')});db['FaxInteraction'][_0x17ee('0x108')](db['Tag'],{'through':_0x17ee('0x164'),'as':_0x17ee('0x157')});db[_0x17ee('0x4a')][_0x17ee('0x108')](db[_0x17ee('0x86')],{'through':_0x17ee('0x164'),'as':_0x17ee('0x165')});db[_0x17ee('0x4a')]['belongsToMany'](db[_0x17ee('0xf8')],{'as':'Users','through':'user_has_fax_interactions','foreignKey':_0x17ee('0x163')});db[_0x17ee('0x4c')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'onDelete':'cascade','as':_0x17ee('0xf8')});db[_0x17ee('0x4c')][_0x17ee('0x105')](db[_0x17ee('0x4a')],{'as':_0x17ee('0x166'),'foreignKey':_0x17ee('0x163')});db[_0x17ee('0x4c')][_0x17ee('0x105')](db[_0x17ee('0x10b')],{'onDelete':_0x17ee('0xfa'),'as':_0x17ee('0x146')});db['FaxMessage'][_0x17ee('0x105')](db[_0x17ee('0x167')],{'as':_0x17ee('0x167'),'foreignKey':_0x17ee('0x168')});db['FaxMessage']['belongsTo'](db['FaxAccount'],{'as':'Account','foreignKey':'FaxAccountId'});db['FaxQueue'][_0x17ee('0x108')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x13b'),'through':_0x17ee('0x34')});db['FaxQueue'][_0x17ee('0x108')](db[_0x17ee('0xe4')],{'through':_0x17ee('0x169'),'as':_0x17ee('0x13c')});db['FaxQueueReport'][_0x17ee('0x105')](db['FaxAccount'],{});db[_0x17ee('0x16a')][_0x17ee('0x105')](db[_0x17ee('0xf4')],{'as':_0x17ee('0x15c'),'foreignKey':_0x17ee('0x150')});db[_0x17ee('0x16a')]['belongsTo'](db[_0x17ee('0x10b')],{'as':_0x17ee('0x146'),'foreignKey':_0x17ee('0x147')});db[_0x17ee('0x16a')][_0x17ee('0x105')](db[_0x17ee('0x4a')],{});db[_0x17ee('0x16a')][_0x17ee('0x105')](db[_0x17ee('0x4c')],{});db[_0x17ee('0x16a')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{});db[_0x17ee('0x16a')]['belongsTo'](db[_0x17ee('0x4e')],{});db['SmsAccount'][_0x17ee('0xfc')](db[_0x17ee('0x15f')],{'as':_0x17ee('0x16b'),'foreignKey':_0x17ee('0x16c')});db['SmsAccount'][_0x17ee('0xfc')](db['CannedAnswer'],{'as':'Answers','foreignKey':'SmsAccountId'});db['SmsAccount']['hasMany'](db[_0x17ee('0x54')],{'as':_0x17ee('0x140'),'foreignKey':_0x17ee('0x16c')});db[_0x17ee('0x127')][_0x17ee('0xfc')](db[_0x17ee('0x52')],{'as':_0x17ee('0x14e')});db[_0x17ee('0x127')][_0x17ee('0xfc')](db[_0x17ee('0x51')],{'as':_0x17ee('0x14f')});db['SmsAccount'][_0x17ee('0x105')](db['CmList'],{'as':'List','foreignKey':'ListId'});db['SmsAccount'][_0x17ee('0x105')](db[_0x17ee('0x138')],{'as':_0x17ee('0x139'),'foreignKey':_0x17ee('0x13a')});db[_0x17ee('0x127')][_0x17ee('0x108')](db[_0x17ee('0xf8')],{'as':'Agents','through':'user_has_sms_accounts'});db['SmsApplication'][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'onDelete':_0x17ee('0x15a')});db[_0x17ee('0x51')][_0x17ee('0x105')](db[_0x17ee('0x56')],{'onDelete':_0x17ee('0x15a')});db[_0x17ee('0x51')][_0x17ee('0x105')](db[_0x17ee('0x127')],{'onDelete':'restrict'});db[_0x17ee('0x51')][_0x17ee('0x105')](db[_0x17ee('0x7f')],{'onDelete':_0x17ee('0x15a'),'foreignKey':_0x17ee('0x137')});db['SmsApplication'][_0x17ee('0x105')](db[_0x17ee('0x86')],{'onDelete':_0x17ee('0x15a'),'foreignKey':_0x17ee('0x15b')});db[_0x17ee('0x52')]['hasMany'](db[_0x17ee('0x54')],{'as':_0x17ee('0x140'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x16d')});db[_0x17ee('0x52')][_0x17ee('0x105')](db[_0x17ee('0x127')],{'as':_0x17ee('0x154'),'foreignKey':_0x17ee('0x16c')});db[_0x17ee('0x52')][_0x17ee('0x105')](db[_0x17ee('0x10b')],{'as':_0x17ee('0x146'),'foreignKey':_0x17ee('0x147')});db['SmsInteraction']['belongsTo'](db[_0x17ee('0xf8')],{'as':_0x17ee('0x155'),'foreignKey':_0x17ee('0xfb')});db[_0x17ee('0x52')]['belongsToMany'](db[_0x17ee('0x86')],{'through':_0x17ee('0x16e'),'as':'Tags'});db['SmsInteraction'][_0x17ee('0x108')](db[_0x17ee('0x86')],{'through':_0x17ee('0x16e'),'as':_0x17ee('0x165')});db[_0x17ee('0x52')][_0x17ee('0x108')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x158'),'through':'user_has_sms_interactions','foreignKey':_0x17ee('0x16d')});db[_0x17ee('0x54')][_0x17ee('0x105')](db['User'],{'as':'User'});db[_0x17ee('0x54')]['belongsTo'](db[_0x17ee('0x10b')],{'onDelete':_0x17ee('0xfa'),'as':_0x17ee('0x146')});db[_0x17ee('0x54')][_0x17ee('0x105')](db[_0x17ee('0x52')],{'onDelete':'cascade','as':_0x17ee('0x166'),'foreignKey':_0x17ee('0x16d')});db['SmsMessage'][_0x17ee('0x105')](db['SmsAccount'],{'as':'Account','foreignKey':_0x17ee('0x16c')});db['SmsQueue'][_0x17ee('0x108')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x13b'),'through':'UserSmsQueue','foreignKey':_0x17ee('0x16f')});db['SmsQueue'][_0x17ee('0x108')](db[_0x17ee('0xe4')],{'through':_0x17ee('0x170'),'as':'Teams'});db[_0x17ee('0x125')]['hasMany'](db['Disposition'],{'as':'Dispositions','foreignKey':_0x17ee('0x171')});db[_0x17ee('0x125')][_0x17ee('0xfc')](db[_0x17ee('0x7a')],{'as':_0x17ee('0x161'),'foreignKey':_0x17ee('0x171')});db[_0x17ee('0x125')][_0x17ee('0xfc')](db[_0x17ee('0x59')],{'as':_0x17ee('0x14e'),'foreignKey':'OpenchannelAccountId'});db[_0x17ee('0x125')][_0x17ee('0xfc')](db['OpenchannelMessage'],{'as':_0x17ee('0x140'),'foreignKey':_0x17ee('0x171')});db['OpenchannelAccount'][_0x17ee('0xfc')](db['OpenchannelApplication'],{'as':_0x17ee('0x14f'),'foreignKey':_0x17ee('0x171')});db['OpenchannelAccount'][_0x17ee('0x105')](db[_0x17ee('0xf4')],{'as':_0x17ee('0x15c'),'foreignKey':_0x17ee('0x150')});db[_0x17ee('0x125')][_0x17ee('0x105')](db[_0x17ee('0x138')],{'as':_0x17ee('0x139'),'foreignKey':_0x17ee('0x13a')});db[_0x17ee('0x125')][_0x17ee('0x108')](db['User'],{'as':_0x17ee('0x13b'),'through':_0x17ee('0x172')});db[_0x17ee('0x173')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'onDelete':_0x17ee('0x15a')});db[_0x17ee('0x173')][_0x17ee('0x105')](db[_0x17ee('0x5d')],{'onDelete':_0x17ee('0x15a'),'foreignKey':_0x17ee('0x174')});db[_0x17ee('0x173')][_0x17ee('0x105')](db[_0x17ee('0x125')],{'onDelete':_0x17ee('0x15a'),'foreignKey':'OpenchannelAccountId'});db[_0x17ee('0x173')]['belongsTo'](db['Interval'],{'onDelete':_0x17ee('0x15a'),'foreignKey':'IntervalId'});db['OpenchannelApplication'][_0x17ee('0x105')](db[_0x17ee('0x86')],{'onDelete':'restrict','foreignKey':_0x17ee('0x15b')});db[_0x17ee('0x59')][_0x17ee('0xfc')](db[_0x17ee('0x5b')],{'as':_0x17ee('0x140'),'onDelete':'cascade','foreignKey':_0x17ee('0x175')});db[_0x17ee('0x59')]['belongsTo'](db['OpenchannelAccount'],{'as':'Account','foreignKey':_0x17ee('0x171')});db[_0x17ee('0x59')]['belongsTo'](db[_0x17ee('0x10b')],{'as':_0x17ee('0x146'),'foreignKey':'ContactId'});db[_0x17ee('0x59')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x155'),'foreignKey':'UserId'});db[_0x17ee('0x59')][_0x17ee('0x108')](db['Tag'],{'through':'openchannel_interaction_has_tags','as':_0x17ee('0x157')});db[_0x17ee('0x59')][_0x17ee('0x108')](db[_0x17ee('0x86')],{'through':_0x17ee('0x176'),'as':_0x17ee('0x165')});db['OpenchannelInteraction'][_0x17ee('0x108')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x158'),'through':_0x17ee('0x115'),'foreignKey':_0x17ee('0x175')});db[_0x17ee('0x5b')]['belongsTo'](db[_0x17ee('0xf8')],{'onDelete':_0x17ee('0xfa'),'as':_0x17ee('0xf8')});db['OpenchannelMessage'][_0x17ee('0x105')](db[_0x17ee('0x10b')],{'onDelete':_0x17ee('0xfa'),'as':_0x17ee('0x146')});db[_0x17ee('0x5b')][_0x17ee('0x105')](db[_0x17ee('0x59')],{'onDelete':_0x17ee('0xfa'),'as':_0x17ee('0x166'),'foreignKey':_0x17ee('0x175')});db['OpenchannelMessage'][_0x17ee('0x105')](db[_0x17ee('0x167')],{'as':_0x17ee('0x167'),'foreignKey':_0x17ee('0x168')});db[_0x17ee('0x5b')][_0x17ee('0x105')](db[_0x17ee('0x125')],{'as':_0x17ee('0x154'),'foreignKey':'OpenchannelAccountId'});db[_0x17ee('0x5d')][_0x17ee('0x108')](db[_0x17ee('0xf8')],{'as':'Agents','through':_0x17ee('0x11d'),'foreignKey':_0x17ee('0x174')});db[_0x17ee('0x5d')][_0x17ee('0x108')](db['Team'],{'through':_0x17ee('0x177'),'as':'Teams'});db[_0x17ee('0x5f')]['hasMany'](db[_0x17ee('0x15f')],{'as':_0x17ee('0x16b'),'foreignKey':_0x17ee('0x178')});db[_0x17ee('0x5f')][_0x17ee('0xfc')](db[_0x17ee('0x7a')],{'as':_0x17ee('0x161'),'foreignKey':_0x17ee('0x178')});db['ChatWebsite'][_0x17ee('0xfc')](db[_0x17ee('0x179')],{'as':_0x17ee('0x17a')});db[_0x17ee('0x5f')][_0x17ee('0xfc')](db[_0x17ee('0x63')],{'as':_0x17ee('0x14e')});db[_0x17ee('0x5f')]['hasMany'](db[_0x17ee('0x61')],{'as':_0x17ee('0x14f')});db[_0x17ee('0x5f')][_0x17ee('0xfc')](db[_0x17ee('0x64')],{'as':'Messages'});db[_0x17ee('0x5f')][_0x17ee('0x105')](db[_0x17ee('0xf4')],{'as':_0x17ee('0x15c'),'foreignKey':'ListId'});db[_0x17ee('0x5f')]['belongsTo'](db['Interval'],{'as':_0x17ee('0x7f'),'foreignKey':'IntervalId'});db[_0x17ee('0x5f')][_0x17ee('0x105')](db['Pause'],{'as':_0x17ee('0x139'),'foreignKey':_0x17ee('0x13a')});db[_0x17ee('0x5f')][_0x17ee('0x108')](db['User'],{'as':_0x17ee('0x13b'),'through':_0x17ee('0x120')});db[_0x17ee('0x17b')][_0x17ee('0x105')](db[_0x17ee('0x125')],{});db['OpenchannelQueueReport'][_0x17ee('0x105')](db[_0x17ee('0xf4')],{'as':_0x17ee('0x15c'),'foreignKey':_0x17ee('0x150')});db[_0x17ee('0x17b')]['belongsTo'](db[_0x17ee('0x10b')],{'as':'Contact','foreignKey':_0x17ee('0x147')});db[_0x17ee('0x17b')][_0x17ee('0x105')](db['OpenchannelInteraction'],{});db[_0x17ee('0x17b')][_0x17ee('0x105')](db[_0x17ee('0x5b')],{});db[_0x17ee('0x17b')]['belongsTo'](db[_0x17ee('0xf8')],{});db[_0x17ee('0x17b')][_0x17ee('0x105')](db[_0x17ee('0x5d')],{});db[_0x17ee('0x61')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x17c'),'foreignKey':_0x17ee('0xfb'),'onDelete':_0x17ee('0x15a')});db[_0x17ee('0x61')][_0x17ee('0x105')](db[_0x17ee('0x67')],{'as':_0x17ee('0x17d'),'foreignKey':_0x17ee('0x17e'),'onDelete':_0x17ee('0x15a')});db['ChatApplication'][_0x17ee('0x105')](db[_0x17ee('0x5f')],{'as':_0x17ee('0x17f'),'foreignKey':'ChatWebsiteId','onDelete':_0x17ee('0x15a')});db[_0x17ee('0x61')]['belongsTo'](db['Tag'],{'onDelete':_0x17ee('0x15a'),'foreignKey':'TagId'});db[_0x17ee('0x63')][_0x17ee('0xfc')](db[_0x17ee('0x64')],{'as':'Messages','onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x180')});db[_0x17ee('0x63')][_0x17ee('0x105')](db['ChatWebsite'],{'as':_0x17ee('0x154'),'foreignKey':_0x17ee('0x178')});db[_0x17ee('0x63')][_0x17ee('0x105')](db['CmContact'],{'as':_0x17ee('0x146'),'foreignKey':'ContactId'});db[_0x17ee('0x63')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'as':'Owner','foreignKey':_0x17ee('0xfb')});db['ChatInteraction'][_0x17ee('0x108')](db['Tag'],{'through':_0x17ee('0x181'),'as':_0x17ee('0x157')});db[_0x17ee('0x63')][_0x17ee('0x108')](db[_0x17ee('0x86')],{'through':_0x17ee('0x181'),'as':'ThroughTags'});db[_0x17ee('0x63')]['belongsToMany'](db['User'],{'as':_0x17ee('0x158'),'through':'user_has_chat_interactions','foreignKey':_0x17ee('0x180')});db['ChatMessage'][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'onDelete':_0x17ee('0xfa'),'as':_0x17ee('0xf8')});db[_0x17ee('0x64')][_0x17ee('0x105')](db[_0x17ee('0x10b')],{'onDelete':_0x17ee('0xfa'),'as':_0x17ee('0x146'),'foreignKey':_0x17ee('0x147')});db[_0x17ee('0x64')]['belongsTo'](db[_0x17ee('0x63')],{'onDelete':_0x17ee('0xfa'),'as':_0x17ee('0x166'),'foreignKey':_0x17ee('0x180')});db[_0x17ee('0x64')][_0x17ee('0x105')](db[_0x17ee('0x167')],{'as':'Attachment','foreignKey':_0x17ee('0x168')});db['ChatMessage'][_0x17ee('0x105')](db[_0x17ee('0x5f')],{'as':_0x17ee('0x154'),'foreignKey':_0x17ee('0x178')});db['ChatOfflineMessage'][_0x17ee('0x105')](db[_0x17ee('0x10b')],{'onDelete':'cascade','as':_0x17ee('0x146'),'foreignKey':_0x17ee('0x147')});db[_0x17ee('0x66')][_0x17ee('0x105')](db[_0x17ee('0x5f')],{'as':_0x17ee('0x154'),'foreignKey':_0x17ee('0x178')});db[_0x17ee('0x67')]['belongsToMany'](db['User'],{'as':_0x17ee('0x13b'),'through':'UserChatQueue','hooks':!![]});db[_0x17ee('0x67')][_0x17ee('0x108')](db['Team'],{'through':_0x17ee('0x182'),'as':_0x17ee('0x13c')});db[_0x17ee('0x69')][_0x17ee('0xfc')](db['ChatInternalMessage'],{'as':'Messages','foreignKey':_0x17ee('0x183'),'onDelete':_0x17ee('0xfa')});db['ChatGroup'][_0x17ee('0x108')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x12f'),'through':'chat_group_has_users'});db[_0x17ee('0x179')][_0x17ee('0x105')](db[_0x17ee('0x5f')],{'as':_0x17ee('0x17f'),'foreignKey':'ChatWebsiteId'});db[_0x17ee('0x184')]['hasMany'](db[_0x17ee('0x10b')],{'as':'Contacts','foreignKey':_0x17ee('0x185')});db[_0x17ee('0x10b')][_0x17ee('0xfc')](db[_0x17ee('0x6c')],{'as':'Hoppers','foreignKey':_0x17ee('0x147')});db[_0x17ee('0x10b')][_0x17ee('0xfc')](db['CmHopperFinal'],{'as':'HopperFinals','foreignKey':'ContactId'});db['CmContact'][_0x17ee('0xfc')](db[_0x17ee('0x72')],{'as':_0x17ee('0x132'),'foreignKey':_0x17ee('0x147')});db[_0x17ee('0x10b')]['hasMany'](db[_0x17ee('0x74')],{'as':_0x17ee('0x74'),'foreignKey':_0x17ee('0x147')});db['CmContact']['hasMany'](db[_0x17ee('0xd3')],{'as':'JscriptySessions','foreignKey':_0x17ee('0x147')});db[_0x17ee('0x10b')][_0x17ee('0xfc')](db[_0x17ee('0x59')],{'as':_0x17ee('0x186'),'foreignKey':_0x17ee('0x147'),'onDelete':_0x17ee('0x15a')});db[_0x17ee('0x10b')][_0x17ee('0xfc')](db[_0x17ee('0x63')],{'as':_0x17ee('0x102'),'foreignKey':'ContactId','onDelete':_0x17ee('0x15a')});db['CmContact'][_0x17ee('0xfc')](db[_0x17ee('0x52')],{'as':'SmsInteractions','foreignKey':'ContactId','onDelete':_0x17ee('0x15a')});db[_0x17ee('0x10b')][_0x17ee('0xfc')](db[_0x17ee('0x4a')],{'as':'FaxInteractions','foreignKey':'ContactId','onDelete':_0x17ee('0x15a')});db[_0x17ee('0x10b')]['hasMany'](db['MailInteraction'],{'as':'MailInteractions','foreignKey':_0x17ee('0x147'),'onDelete':'restrict'});db[_0x17ee('0x10b')][_0x17ee('0x105')](db['CmCompany'],{'as':_0x17ee('0x187'),'foreignKey':_0x17ee('0x185')});db[_0x17ee('0x10b')][_0x17ee('0x105')](db[_0x17ee('0xf4')],{'as':_0x17ee('0x15c'),'foreignKey':_0x17ee('0x150'),'onDelete':_0x17ee('0xfa')});db[_0x17ee('0x10b')]['belongsToMany'](db[_0x17ee('0xf8')],{'as':'Users','through':_0x17ee('0x10d')});db['CmContact'][_0x17ee('0x108')](db['Tag'],{'as':'Tags','through':_0x17ee('0x188')});db[_0x17ee('0x10b')][_0x17ee('0x108')](db[_0x17ee('0x86')],{'through':_0x17ee('0x188'),'as':_0x17ee('0x165')});db[_0x17ee('0x6c')]['belongsTo'](db[_0x17ee('0x10b')],{'as':_0x17ee('0x146'),'foreignKey':'ContactId','onDelete':_0x17ee('0xfa')});db['CmHopper'][_0x17ee('0x105')](db[_0x17ee('0xf4')],{'as':_0x17ee('0x15c'),'foreignKey':_0x17ee('0x150'),'onDelete':_0x17ee('0xfa')});db[_0x17ee('0x6c')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x17c'),'foreignKey':_0x17ee('0xfb')});db[_0x17ee('0x6c')][_0x17ee('0x105')](db['VoiceQueue'],{'as':_0x17ee('0x17d'),'foreignKey':'VoiceQueueId','onDelete':_0x17ee('0xfa')});db['CmHopper'][_0x17ee('0x105')](db[_0x17ee('0xe7')],{'as':_0x17ee('0xe7'),'foreignKey':'CampaignId','onDelete':_0x17ee('0xfa')});db['CmHopper']['belongsTo'](db[_0x17ee('0xf8')],{'as':_0x17ee('0x155'),'foreignKey':_0x17ee('0x189')});db[_0x17ee('0x6e')][_0x17ee('0x105')](db[_0x17ee('0x10b')],{'as':_0x17ee('0x146'),'foreignKey':_0x17ee('0x147'),'onDelete':_0x17ee('0xfa')});db[_0x17ee('0x6e')][_0x17ee('0x105')](db[_0x17ee('0xf4')],{'as':'List','foreignKey':_0x17ee('0x150'),'onDelete':_0x17ee('0xfa')});db[_0x17ee('0x6e')][_0x17ee('0x105')](db[_0x17ee('0x1b')],{'as':'Queue','foreignKey':'VoiceQueueId','onDelete':_0x17ee('0xfa')});db[_0x17ee('0x6e')]['belongsTo'](db[_0x17ee('0xe7')],{'as':_0x17ee('0xe7'),'foreignKey':_0x17ee('0x18a'),'onDelete':_0x17ee('0xfa')});db[_0x17ee('0x18b')][_0x17ee('0xfc')](db[_0x17ee('0x7d')],{'as':{'plural':'All','singular':_0x17ee('0x18c')},'foreignKey':_0x17ee('0x18d'),'onDelete':_0x17ee('0xfa'),'hooks':!![]});db[_0x17ee('0x18b')][_0x17ee('0xfc')](db[_0x17ee('0x7d')],{'as':{'plural':_0x17ee('0x18e'),'singular':'OneAny'},'foreignKey':_0x17ee('0x18f'),'onDelete':_0x17ee('0xfa'),'hooks':!![]});db[_0x17ee('0x18b')][_0x17ee('0xfc')](db[_0x17ee('0x190')],{'as':_0x17ee('0x191'),'foreignKey':'AutomationId','onDelete':'cascade','hooks':!![]});db[_0x17ee('0x7f')][_0x17ee('0xfc')](db[_0x17ee('0x7f')],{'as':_0x17ee('0x192'),'foreignKey':_0x17ee('0x137'),'onDelete':_0x17ee('0xfa'),'hooks':!![],'required':![]});db[_0x17ee('0x7f')][_0x17ee('0xfc')](db['VoiceExtension'],{'as':'Extensions','foreignKey':_0x17ee('0x137'),'onDelete':_0x17ee('0x15a')});db[_0x17ee('0x7f')]['hasMany'](db[_0x17ee('0x41')],{'as':_0x17ee('0x193'),'foreignKey':_0x17ee('0x137')});db[_0x17ee('0x7f')][_0x17ee('0xfc')](db[_0x17ee('0x61')],{'as':'ChatApplications','foreignKey':_0x17ee('0x137')});db[_0x17ee('0x7f')][_0x17ee('0xfc')](db['FaxApplication'],{'as':'FaxApplications','foreignKey':_0x17ee('0x137')});db['Interval']['hasMany'](db[_0x17ee('0x51')],{'as':_0x17ee('0x194'),'foreignKey':_0x17ee('0x137')});db[_0x17ee('0x195')][_0x17ee('0x105')](db[_0x17ee('0x39')],{});db[_0x17ee('0x195')][_0x17ee('0x105')](db['AnalyticDefaultReport'],{'foreignKey':_0x17ee('0x196')});db[_0x17ee('0x195')][_0x17ee('0x105')](db[_0x17ee('0x92')],{'foreignKey':_0x17ee('0x197')});db[_0x17ee('0x85')][_0x17ee('0x108')](db[_0x17ee('0x1a')],{'as':'Mohs','through':_0x17ee('0x12e'),'onDelete':'restrict'});db[_0x17ee('0x86')]['belongsToMany'](db[_0x17ee('0x10b')],{'through':_0x17ee('0x188')});db['Tag'][_0x17ee('0x108')](db[_0x17ee('0x63')],{'through':_0x17ee('0x181')});db[_0x17ee('0x86')]['belongsToMany'](db[_0x17ee('0x3d')],{'through':_0x17ee('0x156')});db[_0x17ee('0x86')][_0x17ee('0x108')](db[_0x17ee('0x52')],{'through':'sms_interaction_has_tags'});db[_0x17ee('0x86')][_0x17ee('0x108')](db[_0x17ee('0x4a')],{'through':_0x17ee('0x164')});db[_0x17ee('0x86')][_0x17ee('0x108')](db[_0x17ee('0x59')],{'through':_0x17ee('0x176')});db[_0x17ee('0x8a')][_0x17ee('0xfc')](db[_0x17ee('0x7d')],{'as':{'plural':'AllConditions','singular':_0x17ee('0x198')},'foreignKey':_0x17ee('0x199'),'onDelete':_0x17ee('0xfa'),'hooks':!![]});db[_0x17ee('0x8a')]['hasMany'](db[_0x17ee('0x7d')],{'as':{'plural':_0x17ee('0x19a'),'singular':_0x17ee('0x19b')},'foreignKey':_0x17ee('0x19c'),'onDelete':_0x17ee('0xfa'),'hooks':!![]});db[_0x17ee('0x8a')]['hasMany'](db[_0x17ee('0x190')],{'as':'Actions','foreignKey':_0x17ee('0x19d'),'onDelete':_0x17ee('0xfa'),'hooks':!![]});db['AnalyticCustomReport'][_0x17ee('0xfc')](db[_0x17ee('0x19e')],{'as':'Fields','onDelete':'cascade','foreignKey':_0x17ee('0x197'),'hooks':!![]});db['AnalyticDefaultReport'][_0x17ee('0xfc')](db[_0x17ee('0x19e')],{'as':_0x17ee('0x19f'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x196')});db[_0x17ee('0x97')][_0x17ee('0xfc')](db[_0x17ee('0x19e')],{'as':_0x17ee('0x19f'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a0')});db[_0x17ee('0x19e')][_0x17ee('0x105')](db[_0x17ee('0x97')],{'foreignKey':_0x17ee('0x1a0')});db[_0x17ee('0x9b')][_0x17ee('0xfc')](db[_0x17ee('0x9d')],{'as':_0x17ee('0x1a1'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a2')});db[_0x17ee('0x9d')][_0x17ee('0xfc')](db[_0x17ee('0x9e')],{'as':'Subjects','onDelete':'cascade','foreignKey':'SubjectId'});db[_0x17ee('0x9d')]['hasMany'](db[_0x17ee('0x9e')],{'as':_0x17ee('0x1a3'),'onDelete':_0x17ee('0xfa'),'foreignKey':'DescriptionId'});db['SalesforceConfiguration'][_0x17ee('0xfc')](db[_0x17ee('0x9e')],{'as':_0x17ee('0x19f'),'onDelete':'cascade','foreignKey':_0x17ee('0x1a4')});db['SalesforceConfiguration'][_0x17ee('0x105')](db['SalesforceAccount'],{'as':_0x17ee('0x154'),'foreignKey':'AccountId'});db[_0x17ee('0x9e')]['hasMany'](db[_0x17ee('0x9e')],{'as':_0x17ee('0x1a5'),'foreignKey':_0x17ee('0x1a6')});db[_0x17ee('0x9e')][_0x17ee('0xfc')](db['SalesforceField'],{'as':'Description','foreignKey':_0x17ee('0x1a7')});db[_0x17ee('0x9e')][_0x17ee('0xfc')](db[_0x17ee('0x9e')],{'as':_0x17ee('0x1a8'),'foreignKey':_0x17ee('0x1a4')});db[_0x17ee('0x9e')][_0x17ee('0x105')](db[_0x17ee('0x8c')],{'as':_0x17ee('0x8c'),'foreignKey':_0x17ee('0x1a9')});db[_0x17ee('0xa0')]['hasMany'](db[_0x17ee('0xa2')],{'as':'Configurations','onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a2')});db[_0x17ee('0xa2')]['hasMany'](db['SugarcrmField'],{'as':_0x17ee('0x1aa'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a6')});db[_0x17ee('0xa2')][_0x17ee('0xfc')](db[_0x17ee('0xa3')],{'as':_0x17ee('0x1a3'),'onDelete':'cascade','foreignKey':_0x17ee('0x1a7')});db[_0x17ee('0xa2')][_0x17ee('0xfc')](db['SugarcrmField'],{'as':_0x17ee('0x19f'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a4')});db['SugarcrmConfiguration']['belongsTo'](db['SugarcrmAccount'],{'as':'Account','foreignKey':'AccountId'});db[_0x17ee('0xa3')]['hasMany'](db[_0x17ee('0xa3')],{'as':'Subject','foreignKey':_0x17ee('0x1a6')});db[_0x17ee('0xa3')][_0x17ee('0xfc')](db[_0x17ee('0xa3')],{'as':_0x17ee('0x1ab'),'foreignKey':'DescriptionId'});db[_0x17ee('0xa3')]['hasMany'](db['SugarcrmField'],{'as':_0x17ee('0x1a8'),'foreignKey':_0x17ee('0x1a4')});db[_0x17ee('0xa3')]['belongsTo'](db[_0x17ee('0x8c')],{'as':'Variable','foreignKey':_0x17ee('0x1a9')});db[_0x17ee('0xa5')][_0x17ee('0xfc')](db['DeskConfiguration'],{'as':'Configurations','onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a2')});db['DeskConfiguration'][_0x17ee('0xfc')](db[_0x17ee('0xa8')],{'as':'Subjects','onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a6')});db['DeskConfiguration']['hasMany'](db[_0x17ee('0xa8')],{'as':_0x17ee('0x1a3'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a7')});db[_0x17ee('0xa6')][_0x17ee('0xfc')](db[_0x17ee('0xa8')],{'as':_0x17ee('0x19f'),'onDelete':'cascade','foreignKey':_0x17ee('0x1a4')});db[_0x17ee('0xa6')]['belongsTo'](db[_0x17ee('0xa5')],{'as':_0x17ee('0x154'),'foreignKey':'AccountId'});db[_0x17ee('0xa6')][_0x17ee('0x108')](db[_0x17ee('0x86')],{'through':_0x17ee('0x1ac')});db['DeskField'][_0x17ee('0xfc')](db[_0x17ee('0xa8')],{'as':_0x17ee('0x1a5'),'foreignKey':_0x17ee('0x1a6')});db[_0x17ee('0xa8')][_0x17ee('0xfc')](db[_0x17ee('0xa8')],{'as':_0x17ee('0x1ab'),'foreignKey':_0x17ee('0x1a7')});db[_0x17ee('0xa8')][_0x17ee('0xfc')](db[_0x17ee('0xa8')],{'as':_0x17ee('0x1a8'),'foreignKey':_0x17ee('0x1a4')});db[_0x17ee('0xa8')]['belongsTo'](db[_0x17ee('0x8c')],{'as':_0x17ee('0x8c'),'foreignKey':'VariableId'});db[_0x17ee('0xaa')][_0x17ee('0xfc')](db['ZohoConfiguration'],{'as':'Configurations','onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a2')});db[_0x17ee('0xac')]['hasMany'](db[_0x17ee('0xae')],{'as':_0x17ee('0x1aa'),'onDelete':'cascade','foreignKey':_0x17ee('0x1a6')});db[_0x17ee('0xac')][_0x17ee('0xfc')](db[_0x17ee('0xae')],{'as':_0x17ee('0x1a3'),'onDelete':_0x17ee('0xfa'),'foreignKey':'DescriptionId'});db[_0x17ee('0xac')][_0x17ee('0xfc')](db['ZohoField'],{'as':_0x17ee('0x19f'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a4')});db[_0x17ee('0xac')][_0x17ee('0x105')](db[_0x17ee('0xaa')],{'as':_0x17ee('0x154'),'foreignKey':_0x17ee('0x1a2')});db[_0x17ee('0xae')][_0x17ee('0xfc')](db[_0x17ee('0xae')],{'as':_0x17ee('0x1a5'),'foreignKey':_0x17ee('0x1a6')});db[_0x17ee('0xae')]['hasMany'](db[_0x17ee('0xae')],{'as':_0x17ee('0x1ab'),'foreignKey':_0x17ee('0x1a7')});db[_0x17ee('0xae')][_0x17ee('0xfc')](db[_0x17ee('0xae')],{'as':'Field','foreignKey':_0x17ee('0x1a4')});db[_0x17ee('0xae')][_0x17ee('0x105')](db[_0x17ee('0x8c')],{'as':_0x17ee('0x8c'),'foreignKey':'VariableId'});db[_0x17ee('0xb0')]['hasMany'](db[_0x17ee('0xb2')],{'as':_0x17ee('0x1a1'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a2')});db['ZendeskConfiguration'][_0x17ee('0xfc')](db[_0x17ee('0xb4')],{'as':'Subjects','foreignKey':_0x17ee('0x1a6')});db['ZendeskConfiguration'][_0x17ee('0xfc')](db[_0x17ee('0xb4')],{'as':_0x17ee('0x1a3'),'foreignKey':_0x17ee('0x1a7')});db[_0x17ee('0xb2')][_0x17ee('0xfc')](db[_0x17ee('0xb4')],{'as':_0x17ee('0x19f'),'foreignKey':_0x17ee('0x1a4')});db['ZendeskConfiguration'][_0x17ee('0x105')](db[_0x17ee('0xb0')],{'as':'Account','foreignKey':_0x17ee('0x1a2')});db[_0x17ee('0xb2')][_0x17ee('0x108')](db[_0x17ee('0x86')],{'through':_0x17ee('0x1ad')});db[_0x17ee('0xb4')][_0x17ee('0xfc')](db[_0x17ee('0xb4')],{'as':_0x17ee('0x1a5'),'foreignKey':'SubjectId'});db[_0x17ee('0xb4')]['hasMany'](db[_0x17ee('0xb4')],{'as':_0x17ee('0x1ab'),'foreignKey':_0x17ee('0x1a7')});db[_0x17ee('0xb4')][_0x17ee('0xfc')](db[_0x17ee('0xb4')],{'as':_0x17ee('0x1a8'),'foreignKey':_0x17ee('0x1a4')});db[_0x17ee('0xb4')][_0x17ee('0x105')](db[_0x17ee('0x8c')],{'as':_0x17ee('0x8c'),'foreignKey':'VariableId'});db[_0x17ee('0xb6')]['hasMany'](db[_0x17ee('0xb8')],{'as':_0x17ee('0x1a1'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a2')});db[_0x17ee('0xb8')][_0x17ee('0xfc')](db[_0x17ee('0xba')],{'as':'Subjects','onDelete':'cascade','foreignKey':_0x17ee('0x1a6')});db['FreshdeskConfiguration'][_0x17ee('0xfc')](db[_0x17ee('0xba')],{'as':_0x17ee('0x1a3'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a7')});db['FreshdeskConfiguration'][_0x17ee('0xfc')](db[_0x17ee('0xba')],{'as':'Fields','onDelete':'cascade','foreignKey':_0x17ee('0x1a4')});db['FreshdeskConfiguration'][_0x17ee('0x105')](db[_0x17ee('0xb6')],{'as':'Account','foreignKey':_0x17ee('0x1a2')});db[_0x17ee('0xb8')]['belongsToMany'](db['Tag'],{'through':_0x17ee('0x1ae')});db[_0x17ee('0xba')][_0x17ee('0xfc')](db['FreshdeskField'],{'as':'Subject','foreignKey':'SubjectId'});db[_0x17ee('0xba')]['hasMany'](db['FreshdeskField'],{'as':_0x17ee('0x1ab'),'foreignKey':_0x17ee('0x1a7')});db[_0x17ee('0xba')][_0x17ee('0xfc')](db[_0x17ee('0xba')],{'as':'Field','foreignKey':_0x17ee('0x1a4')});db[_0x17ee('0xba')][_0x17ee('0x105')](db[_0x17ee('0x8c')],{'as':_0x17ee('0x8c'),'foreignKey':_0x17ee('0x1a9')});db[_0x17ee('0xbc')][_0x17ee('0xfc')](db[_0x17ee('0xbe')],{'as':_0x17ee('0x1a1'),'onDelete':_0x17ee('0xfa'),'foreignKey':'AccountId'});db[_0x17ee('0xbe')][_0x17ee('0xfc')](db[_0x17ee('0xbf')],{'as':'Subjects','foreignKey':_0x17ee('0x1a6')});db[_0x17ee('0xbe')]['hasMany'](db['VtigerField'],{'as':_0x17ee('0x1a3'),'foreignKey':_0x17ee('0x1a7')});db[_0x17ee('0xbe')][_0x17ee('0xfc')](db[_0x17ee('0xbf')],{'as':_0x17ee('0x19f'),'foreignKey':_0x17ee('0x1a4')});db[_0x17ee('0xbe')]['belongsTo'](db[_0x17ee('0xbc')],{'as':_0x17ee('0x154'),'foreignKey':'AccountId'});db[_0x17ee('0xbe')]['belongsToMany'](db[_0x17ee('0x86')],{'through':_0x17ee('0x1af')});db[_0x17ee('0xbf')]['hasMany'](db[_0x17ee('0xbf')],{'as':'Subject','foreignKey':_0x17ee('0x1a6')});db['VtigerField'][_0x17ee('0xfc')](db[_0x17ee('0xbf')],{'as':_0x17ee('0x1ab'),'foreignKey':_0x17ee('0x1a7')});db[_0x17ee('0xbf')][_0x17ee('0xfc')](db[_0x17ee('0xbf')],{'as':_0x17ee('0x1a8'),'foreignKey':_0x17ee('0x1a4')});db[_0x17ee('0xbf')]['belongsTo'](db['Variable'],{'as':_0x17ee('0x8c'),'foreignKey':'VariableId'});db[_0x17ee('0xc1')][_0x17ee('0xfc')](db[_0x17ee('0xc3')],{'as':'Configurations','onDelete':_0x17ee('0xfa'),'foreignKey':'AccountId'});db[_0x17ee('0xc3')]['hasMany'](db[_0x17ee('0xc5')],{'as':_0x17ee('0x1aa'),'foreignKey':_0x17ee('0x1a6')});db['ServicenowConfiguration'][_0x17ee('0xfc')](db[_0x17ee('0xc5')],{'as':_0x17ee('0x1a3'),'foreignKey':'DescriptionId'});db[_0x17ee('0xc3')][_0x17ee('0xfc')](db[_0x17ee('0xc5')],{'as':_0x17ee('0x19f'),'foreignKey':_0x17ee('0x1a4')});db[_0x17ee('0xc3')]['belongsTo'](db['ServicenowAccount'],{'as':_0x17ee('0x154'),'foreignKey':_0x17ee('0x1a2')});db[_0x17ee('0xc5')][_0x17ee('0xfc')](db[_0x17ee('0xc5')],{'as':_0x17ee('0x1a5'),'foreignKey':_0x17ee('0x1a6')});db[_0x17ee('0xc5')]['hasMany'](db[_0x17ee('0xc5')],{'as':_0x17ee('0x1ab'),'foreignKey':'DescriptionId'});db[_0x17ee('0xc5')]['hasMany'](db[_0x17ee('0xc5')],{'as':_0x17ee('0x1a8'),'foreignKey':'FieldId'});db[_0x17ee('0xc5')]['belongsTo'](db['Variable'],{'as':_0x17ee('0x8c'),'foreignKey':_0x17ee('0x1a9')});db[_0x17ee('0xc6')][_0x17ee('0xfc')](db[_0x17ee('0xc8')],{'as':_0x17ee('0x1a1'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a2')});db[_0x17ee('0xc8')][_0x17ee('0xfc')](db['Dynamics365Field'],{'as':'Subjects','onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a6')});db[_0x17ee('0xc8')][_0x17ee('0xfc')](db[_0x17ee('0xc9')],{'as':_0x17ee('0x1a3'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a7')});db[_0x17ee('0xc8')]['hasMany'](db[_0x17ee('0xc9')],{'as':_0x17ee('0x19f'),'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1a4')});db[_0x17ee('0xc8')][_0x17ee('0x105')](db['Dynamics365Account'],{'as':_0x17ee('0x154'),'foreignKey':_0x17ee('0x1a2')});db[_0x17ee('0xc9')]['hasMany'](db[_0x17ee('0xc9')],{'as':_0x17ee('0x1a5'),'foreignKey':_0x17ee('0x1a6')});db[_0x17ee('0xc9')]['hasMany'](db[_0x17ee('0xc9')],{'as':'Description','foreignKey':_0x17ee('0x1a7')});db[_0x17ee('0xc9')][_0x17ee('0xfc')](db[_0x17ee('0xc9')],{'as':_0x17ee('0x1a8'),'foreignKey':_0x17ee('0x1a4')});db[_0x17ee('0xc9')]['belongsTo'](db[_0x17ee('0x8c')],{'as':_0x17ee('0x8c'),'foreignKey':_0x17ee('0x1a9')});db[_0x17ee('0xcc')][_0x17ee('0x105')](db['ChatWebsite'],{});db[_0x17ee('0xcc')][_0x17ee('0x105')](db['CmList'],{'as':'List','foreignKey':'ListId'});db['ChatQueueReport'][_0x17ee('0x105')](db['CmContact'],{'as':'Contact','foreignKey':_0x17ee('0x147')});db[_0x17ee('0xcc')]['belongsTo'](db[_0x17ee('0x63')],{});db[_0x17ee('0xcc')][_0x17ee('0x105')](db[_0x17ee('0x64')],{});db[_0x17ee('0xcc')]['belongsTo'](db[_0x17ee('0xf8')],{});db[_0x17ee('0xcc')][_0x17ee('0x105')](db[_0x17ee('0x67')],{});db['ChatInternalMessage'][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'onDelete':_0x17ee('0xfa'),'foreignKey':_0x17ee('0x1b0')});db[_0x17ee('0xce')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'onDelete':_0x17ee('0xfa'),'foreignKey':'ToId'});db['JscriptySessionReport'][_0x17ee('0xfc')](db[_0x17ee('0xd1')],{'foreignKey':_0x17ee('0x1b1'),'onDelete':_0x17ee('0xfa')});db['JscriptySessionReport'][_0x17ee('0xfc')](db[_0x17ee('0xd0')],{'foreignKey':_0x17ee('0x1b1'),'onDelete':'cascade'});db[_0x17ee('0xd5')][_0x17ee('0x105')](db[_0x17ee('0x127')],{});db['SmsQueueReport'][_0x17ee('0x105')](db[_0x17ee('0xf4')],{'as':'List','foreignKey':'ListId'});db['SmsQueueReport']['belongsTo'](db[_0x17ee('0x10b')],{'as':_0x17ee('0x146'),'foreignKey':'ContactId'});db[_0x17ee('0xd5')]['belongsTo'](db[_0x17ee('0x52')],{});db[_0x17ee('0xd5')][_0x17ee('0x105')](db[_0x17ee('0x54')],{});db[_0x17ee('0xd5')]['belongsTo'](db[_0x17ee('0xf8')],{});db[_0x17ee('0xd5')][_0x17ee('0x105')](db[_0x17ee('0x56')],{});db['JscriptyProject'][_0x17ee('0xfc')](db[_0x17ee('0xd3')],{'foreignKey':_0x17ee('0x1b2')});db[_0x17ee('0x1b3')][_0x17ee('0xfc')](db[_0x17ee('0xd1')],{'foreignKey':_0x17ee('0x1b2')});db[_0x17ee('0x1b3')][_0x17ee('0xfc')](db[_0x17ee('0xd0')],{'foreignKey':_0x17ee('0x1b2')});db[_0x17ee('0xdf')][_0x17ee('0x108')](db['User'],{'as':_0x17ee('0x158'),'through':'user_has_square_projects'});db[_0x17ee('0xe4')]['belongsToMany'](db[_0x17ee('0xf8')],{'as':'Agents','through':'user_has_teams'});db[_0x17ee('0xe4')][_0x17ee('0x108')](db['VoiceQueue'],{'through':_0x17ee('0x13d'),'as':_0x17ee('0x116')});db['Team'][_0x17ee('0x108')](db[_0x17ee('0x3a')],{'through':_0x17ee('0x1b4'),'as':'MailQueues'});db['Team'][_0x17ee('0x108')](db[_0x17ee('0x67')],{'through':_0x17ee('0x182'),'as':'ChatQueues'});db['Team'][_0x17ee('0x108')](db['FaxQueue'],{'through':'team_has_fax_queues','as':_0x17ee('0x119')});db[_0x17ee('0xe4')][_0x17ee('0x108')](db['SmsQueue'],{'through':_0x17ee('0x170'),'as':_0x17ee('0x11a')});db['Team'][_0x17ee('0x108')](db['OpenchannelQueue'],{'through':_0x17ee('0x177'),'as':'OpenchannelQueues'});db[_0x17ee('0xe7')][_0x17ee('0xfc')](db[_0x17ee('0x6c')],{'as':_0x17ee('0x131'),'foreignKey':_0x17ee('0x18a')});db['Campaign'][_0x17ee('0xfc')](db[_0x17ee('0x70')],{'as':_0x17ee('0x100'),'foreignKey':_0x17ee('0x18a')});db[_0x17ee('0xe7')]['hasMany'](db[_0x17ee('0x72')],{'as':'HopperHistories','foreignKey':_0x17ee('0x18a')});db['Campaign'][_0x17ee('0xfc')](db[_0x17ee('0x6e')],{'as':'HopperBlacks','foreignKey':_0x17ee('0x18a')});db[_0x17ee('0xe7')][_0x17ee('0x105')](db['Trunk'],{'as':'Trunk','foreignKey':_0x17ee('0x134')});db['Campaign'][_0x17ee('0x105')](db[_0x17ee('0x135')],{'as':_0x17ee('0x136'),'foreignKey':_0x17ee('0x1b5')});db[_0x17ee('0xe7')][_0x17ee('0x105')](db[_0x17ee('0x7f')],{'as':'Interval','foreignKey':_0x17ee('0x137')});db['Campaign'][_0x17ee('0x105')](db[_0x17ee('0xdf')],{'as':'SquareProject','foreignKey':_0x17ee('0x1b6')});db[_0x17ee('0xe7')][_0x17ee('0x108')](db[_0x17ee('0xf4')],{'as':_0x17ee('0x10e'),'through':_0x17ee('0x1b7')});db['Campaign'][_0x17ee('0x108')](db[_0x17ee('0xf4')],{'as':_0x17ee('0x13e'),'through':_0x17ee('0x1b8')});db[_0x17ee('0xed')][_0x17ee('0x105')](db['MailMessage'],{});db['MailTransferReport'][_0x17ee('0x105')](db[_0x17ee('0x3d')],{});db['MailTransferReport'][_0x17ee('0x105')](db[_0x17ee('0x39')],{'foreignKey':_0x17ee('0x1b9'),'as':_0x17ee('0x1ba')});db[_0x17ee('0xed')]['belongsTo'](db['User'],{'foreignKey':_0x17ee('0x1bb'),'as':_0x17ee('0x1bc')});db[_0x17ee('0xed')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'foreignKey':_0x17ee('0x1bd'),'as':_0x17ee('0x1be')});db[_0x17ee('0xed')]['belongsTo'](db[_0x17ee('0x3a')],{'foreignKey':_0x17ee('0x1bf'),'as':_0x17ee('0x1c0')});db[_0x17ee('0xed')][_0x17ee('0x105')](db[_0x17ee('0x39')],{'foreignKey':'ToMailAccountId','as':_0x17ee('0x1c1')});db['ChatTransferReport'][_0x17ee('0x105')](db[_0x17ee('0x64')],{});db['ChatTransferReport'][_0x17ee('0x105')](db[_0x17ee('0x63')],{});db['ChatTransferReport'][_0x17ee('0x105')](db[_0x17ee('0x5f')],{'foreignKey':_0x17ee('0x1c2'),'as':'FromAccount'});db[_0x17ee('0x1c3')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'foreignKey':'FromUserId','as':_0x17ee('0x1bc')});db['ChatTransferReport'][_0x17ee('0x105')](db['User'],{'foreignKey':_0x17ee('0x1bd'),'as':'ToAgent'});db['ChatTransferReport']['belongsTo'](db[_0x17ee('0x67')],{'foreignKey':_0x17ee('0x1c4'),'as':'ToQueue'});db[_0x17ee('0x1c3')][_0x17ee('0x105')](db[_0x17ee('0x5f')],{'foreignKey':_0x17ee('0x1c5'),'as':_0x17ee('0x1c1')});db[_0x17ee('0xef')][_0x17ee('0x105')](db[_0x17ee('0x4c')],{});db['FaxTransferReport'][_0x17ee('0x105')](db[_0x17ee('0x4a')],{});db[_0x17ee('0xef')][_0x17ee('0x105')](db['FaxAccount'],{'foreignKey':'FromFaxAccountId','as':_0x17ee('0x1ba')});db[_0x17ee('0xef')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'foreignKey':'FromUserId','as':_0x17ee('0x1bc')});db[_0x17ee('0xef')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'foreignKey':_0x17ee('0x1bd'),'as':'ToAgent'});db['FaxTransferReport'][_0x17ee('0x105')](db[_0x17ee('0x4e')],{'foreignKey':_0x17ee('0x1c6'),'as':_0x17ee('0x1c0')});db[_0x17ee('0xef')][_0x17ee('0x105')](db[_0x17ee('0x47')],{'foreignKey':_0x17ee('0x1c7'),'as':'ToAccount'});db[_0x17ee('0x1c8')]['belongsTo'](db[_0x17ee('0x5b')],{});db[_0x17ee('0x1c8')][_0x17ee('0x105')](db[_0x17ee('0x59')],{});db['OpenchannelTransferReport']['belongsTo'](db[_0x17ee('0x125')],{'foreignKey':_0x17ee('0x1c9'),'as':_0x17ee('0x1ba')});db[_0x17ee('0x1c8')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'foreignKey':_0x17ee('0x1bb'),'as':_0x17ee('0x1bc')});db[_0x17ee('0x1c8')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'foreignKey':_0x17ee('0x1bd'),'as':_0x17ee('0x1be')});db[_0x17ee('0x1c8')][_0x17ee('0x105')](db[_0x17ee('0x5d')],{'foreignKey':'ToOpenchannelQueueId','as':_0x17ee('0x1c0')});db[_0x17ee('0x1c8')][_0x17ee('0x105')](db[_0x17ee('0x125')],{'foreignKey':'ToOpenchannelAccountId','as':_0x17ee('0x1c1')});db['SmsTransferReport'][_0x17ee('0x105')](db[_0x17ee('0x54')],{});db[_0x17ee('0xf2')][_0x17ee('0x105')](db[_0x17ee('0x52')],{});db['SmsTransferReport'][_0x17ee('0x105')](db[_0x17ee('0x127')],{'foreignKey':_0x17ee('0x1ca'),'as':_0x17ee('0x1ba')});db[_0x17ee('0xf2')][_0x17ee('0x105')](db[_0x17ee('0xf8')],{'foreignKey':_0x17ee('0x1bb'),'as':_0x17ee('0x1bc')});db[_0x17ee('0xf2')]['belongsTo'](db[_0x17ee('0xf8')],{'foreignKey':_0x17ee('0x1bd'),'as':_0x17ee('0x1be')});db[_0x17ee('0xf2')]['belongsTo'](db['SmsQueue'],{'foreignKey':_0x17ee('0x1cb'),'as':_0x17ee('0x1c0')});db[_0x17ee('0xf2')]['belongsTo'](db['SmsAccount'],{'foreignKey':_0x17ee('0x1cc'),'as':_0x17ee('0x1c1')});db[_0x17ee('0xf4')]['hasMany'](db['Disposition'],{'as':'Dispositions','foreignKey':_0x17ee('0x150')});db[_0x17ee('0xf4')][_0x17ee('0xfc')](db[_0x17ee('0x76')],{'as':_0x17ee('0x1cd'),'foreignKey':_0x17ee('0x150')});db[_0x17ee('0xf4')][_0x17ee('0xfc')](db[_0x17ee('0x10b')],{'as':_0x17ee('0x10c'),'onDelete':_0x17ee('0xfa'),'foreignKey':'ListId'});db[_0x17ee('0xf4')][_0x17ee('0xfc')](db[_0x17ee('0x70')],{'as':_0x17ee('0x100'),'foreignKey':'ListId'});db[_0x17ee('0xf4')]['hasMany'](db[_0x17ee('0x72')],{'as':'HopperHistory','foreignKey':_0x17ee('0x150')});db[_0x17ee('0xf4')][_0x17ee('0xfc')](db['ReportAgentPreview'],{'as':_0x17ee('0x74'),'foreignKey':_0x17ee('0x150')});db[_0x17ee('0xf4')][_0x17ee('0x108')](db[_0x17ee('0x1b')],{'as':_0x17ee('0x1ce'),'through':_0x17ee('0x1cf')});db[_0x17ee('0xf4')][_0x17ee('0x108')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x13b'),'through':_0x17ee('0x10f')});db[_0x17ee('0xf5')]['hasMany'](db[_0x17ee('0x19')],{'as':_0x17ee('0xff'),'onDelete':_0x17ee('0x15a')});db[_0x17ee('0xf5')][_0x17ee('0x108')](db[_0x17ee('0xf8')],{'as':'Agents','through':_0x17ee('0x11f')});db[_0x17ee('0x106')][_0x17ee('0xfc')](db[_0x17ee('0xf8')],{'as':_0x17ee('0x158'),'foreignKey':_0x17ee('0x107')});db[_0x17ee('0x106')][_0x17ee('0xfc')](db[_0x17ee('0x1d0')],{'as':_0x17ee('0x1d1'),'foreignKey':'userProfileId','onDelete':_0x17ee('0xfa')});db[_0x17ee('0x1d0')]['hasMany'](db['UserProfileResource'],{'as':_0x17ee('0x1d2'),'foreignKey':_0x17ee('0x1d3'),'onDelete':'cascade'});module[_0x17ee('0x1d4')]={'db':db,'dbH':dbH};
\ No newline at end of file
+var _0xa809=['Field','VariableId','DeskAccount','int_desk_configuration_has_tags','ZendeskAccount','ZendeskConfiguration','int_zendesk_configuration_has_tags','FreshdeskConfiguration','int_freshdesk_configuration_has_tags','VtigerConfiguration','VtigerField','Dynamics365Account','Dynamics365Configuration','FromId','ToId','SessionId','SmsQueueReport','ProjectId','VoiceQueues','team_has_chat_queues','ChatQueues','TrunkBackup','campaigns_has_cm_lists','campaigns_has_cm_blacklists','MailTransferReport','FromMailAccountId','FromUserId','FromAgent','ToUserId','ToAgent','ToMailQueueId','ToQueue','ToMailAccountId','ToAccount','FromChatWebsiteId','FromAccount','ToChatWebsiteId','FaxTransferReport','FromFaxAccountId','ToFaxQueueId','ToFaxAccountId','ToOpenchannelQueueId','ToOpenchannelAccountId','FromSmsAccountId','CmCustomField','CustomFields','Queues','Resources','sectionId','../config/environment','jstz','sequelize','motion2','xcall','xC@LL1234','mysql','name','utf8','sequelizeHistory','defaultsDeep','127.0.0.1','utf8mb4','utf8_general_ci','username','password','options','database','import','../api/user/user.model','VoiceChanSpy','../api/voiceChanSpy/voiceChanSpy.model','../api/voiceContext/voiceContext.model','VoiceExtension','../api/voiceExtension/voiceExtension.model','VoiceMusicOnHold','../api/voiceMusicOnHold/voiceMusicOnHold.model','../api/voiceQueue/voiceQueue.model','ScreenRecording','VoiceMail','../api/voiceMail/voiceMail.model','VoiceMailMessage','../api/voiceMailMessage/voiceMailMessage.model','VoiceDialReport','../api/voiceDialReport/voiceDialReport.model','VoiceAgentReport','../api/voiceAgentReport/voiceAgentReport.model','VoiceQueueReport','../api/voiceQueueReport/voiceQueueReport.model','MemberReport','Trunk','../api/trunk/trunk.model','../api/voiceTransferReport/voiceTransferReport.model','UserVoiceQueueRt','../api/userVoiceQueueRt/userVoiceQueueRt.model','../api/userVoiceQueue/userVoiceQueue.model','UserChatQueue','../api/userChatQueue/userChatQueue.model','UserMailQueue','../api/userMailQueue/userMailQueue.model','UserFaxQueue','../api/userFaxQueue/userFaxQueue.model','UserSmsQueue','../api/userSmsQueue/userSmsQueue.model','UserOpenchannelQueue','MailServerIn','MailServerOut','../api/mailServerOut/mailServerOut.model','MailQueue','MailSubstatus','../api/mailSubstatus/mailSubstatus.model','MailInteraction','../api/mailInteraction/mailInteraction.model','MailQueueReport','../api/mailQueueReport/mailQueueReport.model','Dashboard','../api/dashboard/dashboard.model','../api/dashboardItem/dashboardItem.model','FaxAccount','FaxApplication','../api/faxApplication/faxApplication.model','FaxInteraction','../api/faxInteraction/faxInteraction.model','FaxMessage','../api/faxMessage/faxMessage.model','FaxQueueReport','SmsAccount','../api/smsAccount/smsAccount.model','../api/smsApplication/smsApplication.model','SmsInteraction','SmsMessage','../api/smsMessage/smsMessage.model','SmsQueue','../api/smsQueue/smsQueue.model','OpenchannelApplication','../api/openchannelApplication/openchannelApplication.model','OpenchannelInteraction','../api/openchannelInteraction/openchannelInteraction.model','OpenchannelMessage','../api/openchannelQueue/openchannelQueue.model','ChatWebsite','../api/chatWebsite/chatWebsite.model','../api/openchannelQueueReport/openchannelQueueReport.model','../api/chatApplication/chatApplication.model','../api/chatInteraction/chatInteraction.model','ChatMessage','../api/chatMessage/chatMessage.model','ChatOfflineMessage','../api/chatOfflineMessage/chatOfflineMessage.model','ChatGroup','ChatProactiveAction','../api/chatProactiveAction/chatProactiveAction.model','CmCompany','../api/cmCompany/cmCompany.model','CmContact','CmHopper','../api/cmHopper/cmHopper.model','CmHopperBlack','CmHopperFinal','../api/cmHopperFinal/cmHopperFinal.model','CmHopperHistory','../api/cmHopperHistory/cmHopperHistory.model','ReportAgentPreview','Action','../api/action/action.model','CannedAnswer','../api/disposition/disposition.model','../api/condition/condition.model','Pause','../api/pause/pause.model','Cdr','../api/cdr/cdr.model','VoiceQueuesLog','../api/voiceQueuesLog/voiceQueuesLog.model','Schedule','../api/schedule/schedule.model','Sound','../api/sound/sound.model','../api/tag/tag.model','Template','../api/template/template.model','../api/variable/variable.model','Integration','../api/integration/integration.model','IntegrationReport','../api/analyticCustomReport/analyticCustomReport.model','AnalyticDefaultReport','../api/analyticDefaultReport/analyticDefaultReport.model','AnalyticExtractedReport','../api/analyticExtractedReport/analyticExtractedReport.model','AnalyticMetric','../api/analyticMetric/analyticMetric.model','../api/analyticFieldReport/analyticFieldReport.model','AnalyticTreeReport','../api/analyticTreeReport/analyticTreeReport.model','../api/intSalesforceConfiguration/intSalesforceConfiguration.model','SalesforceField','../api/intSalesforceField/intSalesforceField.model','SugarcrmAccount','../api/intSugarcrmAccount/intSugarcrmAccount.model','SugarcrmConfiguration','../api/intSugarcrmConfiguration/intSugarcrmConfiguration.model','SugarcrmField','../api/intSugarcrmField/intSugarcrmField.model','../api/intDeskAccount/intDeskAccount.model','DeskConfiguration','DeskField','../api/intDeskField/intDeskField.model','ZohoAccount','../api/intZohoAccount/intZohoAccount.model','ZohoConfiguration','../api/intZohoConfiguration/intZohoConfiguration.model','ZohoField','../api/intZohoField/intZohoField.model','../api/intZendeskAccount/intZendeskAccount.model','../api/intZendeskConfiguration/intZendeskConfiguration.model','ZendeskField','FreshdeskAccount','../api/intFreshdeskAccount/intFreshdeskAccount.model','../api/intFreshdeskConfiguration/intFreshdeskConfiguration.model','FreshdeskField','../api/intFreshdeskField/intFreshdeskField.model','VtigerAccount','../api/intVtigerConfiguration/intVtigerConfiguration.model','ServicenowAccount','../api/intServicenowAccount/intServicenowAccount.model','ServicenowConfiguration','../api/intServicenowConfiguration/intServicenowConfiguration.model','ServicenowField','../api/intServicenowField/intServicenowField.model','../api/intDynamics365Configuration/intDynamics365Configuration.model','Dynamics365Field','Network','../api/network/network.model','ChatQueueReport','../api/chatQueueReport/chatQueueReport.model','ChatInternalMessage','../api/chatInternalMessage/chatInternalMessage.model','JscriptyAnswerReport','../api/jscriptyAnswerReport/jscriptyAnswerReport.model','JscriptyQuestionReport','../api/jscriptyQuestionReport/jscriptyQuestionReport.model','JscriptySessionReport','../api/jscriptySessionReport/jscriptySessionReport.model','../api/smsQueueReport/smsQueueReport.model','../api/squareReport/squareReport.model','SquareDetailsReport','../api/squareReportDetail/squareReportDetail.model','JscriptyProject','../api/jscriptyProject/jscriptyProject.model','Setting','SquareOdbc','../api/squareOdbc/squareOdbc.model','../api/squareProject/squareProject.model','SquareRecording','../api/squareRecording/squareRecording.model','Team','../api/team/team.model','../api/license/license.model','Campaign','../api/campaign/campaign.model','Migration','Attachment','../api/plugin/plugin.model','../api/mailTransferReport/mailTransferReport.model','ChatTransferReport','../api/chatTransferReport/chatTransferReport.model','../api/faxTransferReport/faxTransferReport.model','OpenchannelTransferReport','../api/openchannelTransferReport/openchannelTransferReport.model','SmsTransferReport','../api/smsTransferReport/smsTransferReport.model','CmList','../api/cmList/cmList.model','VoicePrefix','../api/voicePrefix/voicePrefix.model','UserProfile','../api/userProfile/userProfile.model','UserProfileSection','../api/userProfileSection/userProfileSection.model','UserProfileResource','hasOne','UserId','hasMany','VoiceRecording','User','Extensions','HopperFinals','HopperHistory','OpenchannelInteractions','ChatInteraction','SmsInteractions','FaxInteractions','MailInteractions','belongsTo','userProfileId','Groups','chat_group_has_users','belongsToMany','Contacts','cm_user_has_contacts','Lists','cm_user_has_lists','user_has_mail_interactions','user_has_chat_interactions','user_has_fax_interactions','user_has_openchannel_interactions','UserVoiceQueue','ChatQueue','FaxQueue','FaxQueues','OpenchannelQueues','VoicePrefixes','user_has_chat_websites','user_has_fax_accounts','MailAccount','MailAccounts','user_has_mail_accounts','OpenchannelAccount','OpenchannelAccounts','user_has_openchannel_accounts','SmsAccounts','user_has_sms_accounts','SquareProject','cascade','ChanSpyId','VoiceContext','Applications','Sounds','moh_has_sounds','VoiceQueue','Hoppers','VoiceQueueId','HopperBlacks','JscriptySessions','TrunkId','TrunkBackupId','Interval','IntervalId','mandatoryDispositionPauseId','Agents','Teams','team_has_voice_queues','BlackLists','voice_queues_has_cm_blacklists','Messages','mailbox','VoiceCallReport','QueueCalls','uniqueid','ContactId','MailAccountId','Imap','Smtp','Disposition','Dispositions','Answers','MailMessage','MailApplication','List','ListId','TemplateId','mandatoryDispositionPause','team_has_mail_queues','MailInteractionId','Account','Contact','Owner','Tag','mail_interaction_has_tags','Tags','Users','Attachments','Interaction','restrict','TagId','FaxAccountId','Interactions','Exntensions','FaxInteractionId','fax_interaction_has_tags','ThroughTags','AttachmentId','team_has_fax_queues','SmsAccountId','SmsApplication','sms_interaction_has_tags','SmsInteractionId','SmsQueueId','team_has_sms_queues','OpenchannelAccountId','OpenchannelQueue','OpenchannelInteractionId','openchannel_interaction_has_tags','OpenchannelQueueId','team_has_openchannel_queues','ChatWebsiteId','ChatApplication','OpenchannelQueueReport','Agent','Queue','Website','ChatInteractionId','chat_interaction_has_tags','ChatGroupId','Members','HopperHistories','ChatInteractions','Company','CompanyId','cm_contact_has_tags','CampaignId','Automation','Condition','All','OneAll','AutomationAllId','Any','OneAny','AutomationAnyId','Actions','Intervals','MailApplications','ChatApplications','FaxApplications','DefaultReportId','AnalyticCustomReport','Trigger','AllConditions','AllCondition','TriggerAllId','AnyConditions','AnyCondition','TriggerAnyId','TriggerId','Fields','CustomReportId','AnalyticFieldReport','MetricId','SalesforceAccount','SalesforceConfiguration','Configurations','AccountId','Subjects','SubjectId','Descriptions','DescriptionId','FieldId','Subject','Description','Variable'];(function(_0x51cad4,_0x3917cb){var _0x32bb6a=function(_0x5712bf){while(--_0x5712bf){_0x51cad4['push'](_0x51cad4['shift']());}};_0x32bb6a(++_0x3917cb);}(_0xa809,0x1f3));var _0x9a80=function(_0x108dd,_0x29b0a1){_0x108dd=_0x108dd-0x0;var _0x527e55=_0xa809[_0x108dd];return _0x527e55;};'use strict';var path=require('path');var config=require(_0x9a80('0x0'));var Sequelize=require('sequelize');var _=require('lodash');var jstz=require(_0x9a80('0x1'));var timezone=jstz['determine']();config['sequelize']=_['defaultsDeep'](config[_0x9a80('0x2')],{'database':_0x9a80('0x3'),'username':_0x9a80('0x4'),'password':_0x9a80('0x5'),'options':{'host':'127.0.0.1','port':0xcea,'dialect':_0x9a80('0x6'),'dialectOptions':{'charset':'utf8mb4'},'logging':![],'timezone':timezone[_0x9a80('0x7')](),'define':{'charset':_0x9a80('0x8'),'collate':'utf8_general_ci'}}});config[_0x9a80('0x9')]=_[_0x9a80('0xa')](config[_0x9a80('0x9')],{'database':_0x9a80('0x3'),'username':'xcall','password':_0x9a80('0x5'),'options':{'host':_0x9a80('0xb'),'port':0xcea,'dialect':_0x9a80('0x6'),'dialectOptions':{'charset':_0x9a80('0xc')},'logging':![],'timezone':timezone[_0x9a80('0x7')](),'define':{'charset':_0x9a80('0x8'),'collate':_0x9a80('0xd')}}});var db={'Sequelize':Sequelize,'sequelize':new Sequelize(config[_0x9a80('0x2')]['database'],config[_0x9a80('0x2')][_0x9a80('0xe')],config[_0x9a80('0x2')][_0x9a80('0xf')],config[_0x9a80('0x2')][_0x9a80('0x10')])};var dbH={'Sequelize':Sequelize,'sequelize':new Sequelize(config[_0x9a80('0x9')][_0x9a80('0x11')],config['sequelizeHistory'][_0x9a80('0xe')],config['sequelizeHistory'][_0x9a80('0xf')],config[_0x9a80('0x9')][_0x9a80('0x10')])};db['User']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x13'));db[_0x9a80('0x14')]=db[_0x9a80('0x2')]['import'](_0x9a80('0x15'));db['VoiceContext']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x16'));db[_0x9a80('0x17')]=db['sequelize']['import'](_0x9a80('0x18'));db[_0x9a80('0x19')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x1a'));db['VoiceQueue']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x1b'));db['VoiceRecording']=db['sequelize'][_0x9a80('0x12')]('../api/voiceRecording/voiceRecording.model');db[_0x9a80('0x1c')]=db['sequelize'][_0x9a80('0x12')]('../api/screenRecording/screenRecording.model');db[_0x9a80('0x1d')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x1e'));db[_0x9a80('0x1f')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x20'));db['VoiceCallReport']=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/voiceCallReport/voiceCallReport.model');db[_0x9a80('0x21')]=db[_0x9a80('0x2')]['import'](_0x9a80('0x22'));db[_0x9a80('0x23')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x24'));db[_0x9a80('0x25')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0x26'));db[_0x9a80('0x27')]=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/memberReport/memberReport.model');db[_0x9a80('0x28')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x29'));db['VoiceTransferReport']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x2a'));db[_0x9a80('0x2b')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0x2c'));db['UserVoiceQueue']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x2d'));db[_0x9a80('0x2e')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0x2f'));db[_0x9a80('0x30')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x31'));db[_0x9a80('0x32')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x33'));db[_0x9a80('0x34')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x35'));db[_0x9a80('0x36')]=db['sequelize']['import']('../api/userOpenchannelQueue/userOpenchannelQueue.model');db[_0x9a80('0x37')]=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/mailServerIn/mailServerIn.model');db[_0x9a80('0x38')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x39'));db['MailAccount']=db['sequelize']['import']('../api/mailAccount/mailAccount.model');db[_0x9a80('0x3a')]=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/mailQueue/mailQueue.model');db[_0x9a80('0x3b')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0x3c'));db[_0x9a80('0x3d')]=db[_0x9a80('0x2')]['import'](_0x9a80('0x3e'));db['MailMessage']=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/mailMessage/mailMessage.model');db['MailApplication']=db['sequelize'][_0x9a80('0x12')]('../api/mailApplication/mailApplication.model');db[_0x9a80('0x3f')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x40'));db[_0x9a80('0x41')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x42'));db['DashboardItem']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x43'));db[_0x9a80('0x44')]=db[_0x9a80('0x2')]['import']('../api/faxAccount/faxAccount.model');db[_0x9a80('0x45')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x46'));db[_0x9a80('0x47')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x48'));db[_0x9a80('0x49')]=db[_0x9a80('0x2')]['import'](_0x9a80('0x4a'));db['FaxQueue']=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/faxQueue/faxQueue.model');db[_0x9a80('0x4b')]=db[_0x9a80('0x2')]['import']('../api/faxQueueReport/faxQueueReport.model');db[_0x9a80('0x4c')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x4d'));db['SmsApplication']=db['sequelize'][_0x9a80('0x12')](_0x9a80('0x4e'));db[_0x9a80('0x4f')]=db['sequelize'][_0x9a80('0x12')]('../api/smsInteraction/smsInteraction.model');db[_0x9a80('0x50')]=db[_0x9a80('0x2')]['import'](_0x9a80('0x51'));db[_0x9a80('0x52')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x53'));db['OpenchannelAccount']=db['sequelize']['import']('../api/openchannelAccount/openchannelAccount.model');db[_0x9a80('0x54')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x55'));db[_0x9a80('0x56')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0x57'));db[_0x9a80('0x58')]=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/openchannelMessage/openchannelMessage.model');db['OpenchannelQueue']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x59'));db[_0x9a80('0x5a')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x5b'));db['OpenchannelQueueReport']=db['sequelize'][_0x9a80('0x12')](_0x9a80('0x5c'));db['ChatApplication']=db['sequelize'][_0x9a80('0x12')](_0x9a80('0x5d'));db['ChatInteraction']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x5e'));db[_0x9a80('0x5f')]=db['sequelize']['import'](_0x9a80('0x60'));db[_0x9a80('0x61')]=db['sequelize']['import'](_0x9a80('0x62'));db['ChatQueue']=db['sequelize'][_0x9a80('0x12')]('../api/chatQueue/chatQueue.model');db[_0x9a80('0x63')]=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/chatGroup/chatGroup.model');db[_0x9a80('0x64')]=db[_0x9a80('0x2')]['import'](_0x9a80('0x65'));db[_0x9a80('0x66')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x67'));db[_0x9a80('0x68')]=db['sequelize']['import']('../api/cmContact/cmContact.model');db[_0x9a80('0x69')]=db[_0x9a80('0x2')]['import'](_0x9a80('0x6a'));db[_0x9a80('0x6b')]=db['sequelize'][_0x9a80('0x12')]('../api/cmHopperBlack/cmHopperBlack.model');db[_0x9a80('0x6c')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x6d'));db[_0x9a80('0x6e')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x6f'));db[_0x9a80('0x70')]=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/reportAgentPreview/reportAgentPreview.model');db['CmCustomField']=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/cmCustomField/cmCustomField.model');db[_0x9a80('0x71')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x72'));db['Automation']=db['sequelize'][_0x9a80('0x12')]('../api/automation/automation.model');db[_0x9a80('0x73')]=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/cannedAnswer/cannedAnswer.model');db['Disposition']=db[_0x9a80('0x2')]['import'](_0x9a80('0x74'));db['Condition']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x75'));db['Interval']=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/interval/interval.model');db[_0x9a80('0x76')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x77'));db[_0x9a80('0x78')]=db[_0x9a80('0x2')]['import'](_0x9a80('0x79'));db[_0x9a80('0x7a')]=db[_0x9a80('0x2')]['import'](_0x9a80('0x7b'));db[_0x9a80('0x7c')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x7d'));db[_0x9a80('0x7e')]=db[_0x9a80('0x2')]['import'](_0x9a80('0x7f'));db['Tag']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x80'));db[_0x9a80('0x81')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x82'));db['Trigger']=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/trigger/trigger.model');db['Variable']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x83'));db[_0x9a80('0x84')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0x85'));db[_0x9a80('0x86')]=db['sequelize'][_0x9a80('0x12')]('../api/integrationReport/integrationReport.model');db['AnalyticCustomReport']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x87'));db[_0x9a80('0x88')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x89'));db[_0x9a80('0x8a')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0x8b'));db[_0x9a80('0x8c')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x8d'));db['AnalyticFieldReport']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x8e'));db[_0x9a80('0x8f')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0x90'));db['SalesforceAccount']=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/intSalesforceAccount/intSalesforceAccount.model');db['SalesforceConfiguration']=db[_0x9a80('0x2')]['import'](_0x9a80('0x91'));db[_0x9a80('0x92')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x93'));db[_0x9a80('0x94')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x95'));db[_0x9a80('0x96')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x97'));db[_0x9a80('0x98')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x99'));db['DeskAccount']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x9a'));db[_0x9a80('0x9b')]=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/intDeskConfiguration/intDeskConfiguration.model');db[_0x9a80('0x9c')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0x9d'));db[_0x9a80('0x9e')]=db[_0x9a80('0x2')]['import'](_0x9a80('0x9f'));db[_0x9a80('0xa0')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xa1'));db[_0x9a80('0xa2')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xa3'));db['ZendeskAccount']=db['sequelize'][_0x9a80('0x12')](_0x9a80('0xa4'));db['ZendeskConfiguration']=db['sequelize'][_0x9a80('0x12')](_0x9a80('0xa5'));db[_0x9a80('0xa6')]=db[_0x9a80('0x2')]['import']('../api/intZendeskField/intZendeskField.model');db[_0x9a80('0xa7')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0xa8'));db['FreshdeskConfiguration']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xa9'));db[_0x9a80('0xaa')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0xab'));db[_0x9a80('0xac')]=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/intVtigerAccount/intVtigerAccount.model');db['VtigerConfiguration']=db['sequelize'][_0x9a80('0x12')](_0x9a80('0xad'));db['VtigerField']=db[_0x9a80('0x2')]['import']('../api/intVtigerField/intVtigerField.model');db[_0x9a80('0xae')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0xaf'));db[_0x9a80('0xb0')]=db[_0x9a80('0x2')]['import'](_0x9a80('0xb1'));db[_0x9a80('0xb2')]=db[_0x9a80('0x2')]['import'](_0x9a80('0xb3'));db['Dynamics365Account']=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/intDynamics365Account/intDynamics365Account.model');db['Dynamics365Configuration']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xb4'));db[_0x9a80('0xb5')]=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/intDynamics365Field/intDynamics365Field.model');db[_0x9a80('0x84')]=db['sequelize'][_0x9a80('0x12')]('../api/integration/integration.model');db[_0x9a80('0xb6')]=db['sequelize']['import'](_0x9a80('0xb7'));db[_0x9a80('0xb8')]=db[_0x9a80('0x2')]['import'](_0x9a80('0xb9'));db[_0x9a80('0xba')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xbb'));db[_0x9a80('0xbc')]=db['sequelize']['import'](_0x9a80('0xbd'));db[_0x9a80('0xbe')]=db[_0x9a80('0x2')]['import'](_0x9a80('0xbf'));db[_0x9a80('0xc0')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xc1'));db['SmsQueueReport']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xc2'));db['SquareReport']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xc3'));db[_0x9a80('0xc4')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0xc5'));db[_0x9a80('0xc6')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0xc7'));db[_0x9a80('0xc8')]=db[_0x9a80('0x2')]['import']('../api/setting/setting.model');db[_0x9a80('0xc9')]=db[_0x9a80('0x2')]['import'](_0x9a80('0xca'));db['SquareProject']=db[_0x9a80('0x2')]['import'](_0x9a80('0xcb'));db[_0x9a80('0xcc')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xcd'));db['SquareMessage']=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/squareMessage/squareMessage.model');db[_0x9a80('0xce')]=db[_0x9a80('0x2')]['import'](_0x9a80('0xcf'));db['License']=db['sequelize']['import'](_0x9a80('0xd0'));db[_0x9a80('0xd1')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0xd2'));db[_0x9a80('0xd3')]=db[_0x9a80('0x2')]['import']('../api/migration/migration.model');db[_0x9a80('0xd4')]=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/attachment/attachment.model');db['Plugin']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xd5'));db['MailTransferReport']=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xd6'));db[_0x9a80('0xd7')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xd8'));db['FaxTransferReport']=db[_0x9a80('0x2')]['import'](_0x9a80('0xd9'));db[_0x9a80('0xda')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xdb'));db[_0x9a80('0xdc')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xdd'));db[_0x9a80('0xde')]=db[_0x9a80('0x2')]['import'](_0x9a80('0xdf'));db[_0x9a80('0xe0')]=db['sequelize'][_0x9a80('0x12')](_0x9a80('0xe1'));db[_0x9a80('0xe2')]=db[_0x9a80('0x2')][_0x9a80('0x12')](_0x9a80('0xe3'));db[_0x9a80('0xe4')]=db['sequelize']['import'](_0x9a80('0xe5'));db[_0x9a80('0xe6')]=db[_0x9a80('0x2')][_0x9a80('0x12')]('../api/userProfileResource/userProfileResource.model');db['User'][_0x9a80('0xe7')](db['VoiceMail'],{'as':'VoiceMail','onDelete':'cascade','foreignKey':_0x9a80('0xe8')});db['User'][_0x9a80('0xe9')](db[_0x9a80('0xea')],{'as':'Recordings','foreignKey':_0x9a80('0xe8')});db['User'][_0x9a80('0xe9')](db[_0x9a80('0x2b')],{'as':'VoiceQueuesRt','foreignKey':_0x9a80('0xe8')});db[_0x9a80('0xeb')][_0x9a80('0xe9')](db[_0x9a80('0x17')],{'as':_0x9a80('0xec'),'onDelete':'cascade','hooks':!![]});db['User'][_0x9a80('0xe9')](db[_0x9a80('0x6c')],{'as':_0x9a80('0xed'),'foreignKey':_0x9a80('0xe8')});db[_0x9a80('0xeb')]['hasMany'](db['CmHopperHistory'],{'as':_0x9a80('0xee'),'foreignKey':_0x9a80('0xe8')});db[_0x9a80('0xeb')]['hasMany'](db['ReportAgentPreview'],{'as':'ReportAgentPreview','foreignKey':_0x9a80('0xe8')});db[_0x9a80('0xeb')][_0x9a80('0xe9')](db['OpenchannelInteraction'],{'as':_0x9a80('0xef'),'foreignKey':'UserId'});db[_0x9a80('0xeb')][_0x9a80('0xe9')](db[_0x9a80('0xf0')],{'as':'ChatInteractions','foreignKey':_0x9a80('0xe8')});db['User'][_0x9a80('0xe9')](db[_0x9a80('0x4f')],{'as':_0x9a80('0xf1'),'foreignKey':_0x9a80('0xe8')});db[_0x9a80('0xeb')]['hasMany'](db[_0x9a80('0x47')],{'as':_0x9a80('0xf2'),'foreignKey':'UserId'});db[_0x9a80('0xeb')][_0x9a80('0xe9')](db['MailInteraction'],{'as':_0x9a80('0xf3'),'foreignKey':'UserId'});db['User'][_0x9a80('0xf4')](db[_0x9a80('0xe2')],{'as':_0x9a80('0xe2'),'foreignKey':_0x9a80('0xf5')});db[_0x9a80('0xeb')]['belongsToMany'](db[_0x9a80('0x63')],{'as':_0x9a80('0xf6'),'through':_0x9a80('0xf7')});db[_0x9a80('0xeb')][_0x9a80('0xf8')](db[_0x9a80('0x68')],{'as':_0x9a80('0xf9'),'through':_0x9a80('0xfa')});db[_0x9a80('0xeb')][_0x9a80('0xf8')](db[_0x9a80('0xde')],{'as':_0x9a80('0xfb'),'through':_0x9a80('0xfc')});db['User'][_0x9a80('0xf8')](db[_0x9a80('0xce')],{'through':'user_has_teams'});db[_0x9a80('0xeb')][_0x9a80('0xf8')](db[_0x9a80('0x3d')],{'as':'MailInteractions','through':_0x9a80('0xfd')});db[_0x9a80('0xeb')][_0x9a80('0xf8')](db['ChatInteraction'],{'as':'ChatInteractions','through':_0x9a80('0xfe')});db['User']['belongsToMany'](db[_0x9a80('0x47')],{'as':_0x9a80('0xf2'),'through':_0x9a80('0xff')});db[_0x9a80('0xeb')][_0x9a80('0xf8')](db['SmsInteraction'],{'as':_0x9a80('0xf1'),'through':'user_has_sms_interactions'});db['User'][_0x9a80('0xf8')](db['OpenchannelInteraction'],{'as':'OpenchannelInteractions','through':_0x9a80('0x100')});db[_0x9a80('0xeb')][_0x9a80('0xf8')](db['VoiceQueue'],{'as':'VoiceQueues','through':_0x9a80('0x101'),'required':![]});db[_0x9a80('0xeb')][_0x9a80('0xf8')](db[_0x9a80('0x3a')],{'as':'MailQueues','through':_0x9a80('0x30'),'required':![]});db[_0x9a80('0xeb')]['belongsToMany'](db[_0x9a80('0x102')],{'as':'ChatQueues','through':_0x9a80('0x2e'),'required':![],'hooks':!![]});db[_0x9a80('0xeb')][_0x9a80('0xf8')](db[_0x9a80('0x103')],{'as':_0x9a80('0x104'),'through':_0x9a80('0x32'),'required':![]});db[_0x9a80('0xeb')][_0x9a80('0xf8')](db[_0x9a80('0x52')],{'as':'SmsQueues','through':_0x9a80('0x34'),'required':![]});db['User'][_0x9a80('0xf8')](db['OpenchannelQueue'],{'as':_0x9a80('0x105'),'through':_0x9a80('0x36'),'required':![]});db[_0x9a80('0xeb')]['belongsToMany'](db['CmList'],{'through':'cm_user_has_lists'});db[_0x9a80('0xeb')][_0x9a80('0xf8')](db[_0x9a80('0xe0')],{'as':_0x9a80('0x106'),'through':'user_has_voice_prefixes','required':![]});db['User'][_0x9a80('0xf8')](db[_0x9a80('0x5a')],{'as':'ChatWebsites','through':_0x9a80('0x107')});db['User'][_0x9a80('0xf8')](db[_0x9a80('0x44')],{'as':'FaxAccounts','through':_0x9a80('0x108')});db['User']['belongsToMany'](db[_0x9a80('0x109')],{'as':_0x9a80('0x10a'),'through':_0x9a80('0x10b')});db[_0x9a80('0xeb')][_0x9a80('0xf8')](db[_0x9a80('0x10c')],{'as':_0x9a80('0x10d'),'through':_0x9a80('0x10e')});db[_0x9a80('0xeb')][_0x9a80('0xf8')](db[_0x9a80('0x4c')],{'as':_0x9a80('0x10f'),'through':_0x9a80('0x110')});db[_0x9a80('0xeb')]['belongsToMany'](db[_0x9a80('0x111')],{'as':'SquareProjects','through':'user_has_square_projects'});db[_0x9a80('0x14')]['hasMany'](db[_0x9a80('0x17')],{'as':'SpiedAgents','onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x113')});db[_0x9a80('0x114')][_0x9a80('0xe9')](db[_0x9a80('0x17')],{'onDelete':_0x9a80('0x112')});db[_0x9a80('0x17')][_0x9a80('0xe9')](db['VoiceExtension'],{'as':_0x9a80('0x115'),'onDelete':_0x9a80('0x112')});db[_0x9a80('0x19')]['belongsToMany'](db[_0x9a80('0x7e')],{'as':_0x9a80('0x116'),'through':_0x9a80('0x117')});db[_0x9a80('0x118')][_0x9a80('0xe9')](db['UserVoiceQueueRt'],{'as':'Members','foreignKey':'VoiceQueueId'});db[_0x9a80('0x118')][_0x9a80('0xe9')](db['CmHopper'],{'as':_0x9a80('0x119'),'foreignKey':'VoiceQueueId'});db[_0x9a80('0x118')][_0x9a80('0xe9')](db[_0x9a80('0x6c')],{'as':'HopperFinals','foreignKey':_0x9a80('0x11a')});db['VoiceQueue'][_0x9a80('0xe9')](db[_0x9a80('0x6e')],{'as':'HopperHistories','foreignKey':_0x9a80('0x11a')});db['VoiceQueue']['hasMany'](db['ReportAgentPreview'],{'as':'ReportAgentPreview','foreignKey':'VoiceQueueId'});db[_0x9a80('0x118')][_0x9a80('0xe9')](db[_0x9a80('0x6b')],{'as':_0x9a80('0x11b'),'foreignKey':'VoiceQueueId'});db[_0x9a80('0x118')][_0x9a80('0xe9')](db[_0x9a80('0xc0')],{'as':_0x9a80('0x11c'),'foreignKey':'VoiceQueueId'});db['VoiceQueue'][_0x9a80('0xf4')](db[_0x9a80('0x28')],{'as':_0x9a80('0x28'),'foreignKey':_0x9a80('0x11d')});db[_0x9a80('0x118')][_0x9a80('0xf4')](db[_0x9a80('0x28')],{'as':'TrunkBackup','foreignKey':_0x9a80('0x11e')});db['VoiceQueue'][_0x9a80('0xf4')](db[_0x9a80('0x11f')],{'as':_0x9a80('0x11f'),'foreignKey':_0x9a80('0x120')});db[_0x9a80('0x118')][_0x9a80('0xf4')](db['Pause'],{'as':'mandatoryDispositionPause','foreignKey':_0x9a80('0x121')});db[_0x9a80('0x118')][_0x9a80('0xf8')](db[_0x9a80('0xde')],{'as':'Lists','through':'voice_queues_has_cm_lists'});db['VoiceQueue']['belongsToMany'](db[_0x9a80('0xeb')],{'as':_0x9a80('0x122'),'through':_0x9a80('0x101')});db[_0x9a80('0x118')][_0x9a80('0xf8')](db['Team'],{'as':_0x9a80('0x123'),'through':_0x9a80('0x124')});db[_0x9a80('0x118')][_0x9a80('0xf8')](db['CmList'],{'as':_0x9a80('0x125'),'through':_0x9a80('0x126')});db[_0x9a80('0xea')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'as':_0x9a80('0xeb'),'foreignKey':_0x9a80('0xe8')});db[_0x9a80('0x1c')][_0x9a80('0xf4')](db['User'],{'as':'User','foreignKey':'UserId'});db[_0x9a80('0x1d')][_0x9a80('0xe9')](db[_0x9a80('0x1f')],{'as':_0x9a80('0x127'),'onDelete':'cascade','foreignKey':'mailboxuser','sourceKey':_0x9a80('0x128')});db[_0x9a80('0x1f')][_0x9a80('0xf4')](db[_0x9a80('0x1d')],{'foreignKey':'mailboxuser','targetKey':_0x9a80('0x128')});db[_0x9a80('0x129')]['hasMany'](db[_0x9a80('0x25')],{'as':_0x9a80('0x12a'),'foreignKey':_0x9a80('0x12b'),'constraints':![]});db[_0x9a80('0x129')][_0x9a80('0xe9')](db[_0x9a80('0x23')],{'as':'AgentReports','foreignKey':_0x9a80('0x12b'),'constraints':![]});db[_0x9a80('0x129')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'as':_0x9a80('0xeb'),'foreignKey':_0x9a80('0xe8')});db[_0x9a80('0x129')][_0x9a80('0xf4')](db[_0x9a80('0x68')],{'as':'Contact','foreignKey':_0x9a80('0x12c')});db['MailServerIn']['belongsTo'](db[_0x9a80('0x109')],{'as':_0x9a80('0x109'),'foreignKey':_0x9a80('0x12d')});db[_0x9a80('0x38')]['belongsTo'](db[_0x9a80('0x109')],{'as':_0x9a80('0x109'),'foreignKey':_0x9a80('0x12d')});db['MailAccount']['hasOne'](db[_0x9a80('0x37')],{'as':_0x9a80('0x12e'),'onDelete':_0x9a80('0x112')});db[_0x9a80('0x109')][_0x9a80('0xe7')](db[_0x9a80('0x38')],{'as':_0x9a80('0x12f'),'onDelete':_0x9a80('0x112')});db['MailAccount'][_0x9a80('0xe9')](db[_0x9a80('0x130')],{'as':_0x9a80('0x131'),'foreignKey':_0x9a80('0x12d')});db['MailAccount']['hasMany'](db['CannedAnswer'],{'as':_0x9a80('0x132'),'foreignKey':_0x9a80('0x12d')});db[_0x9a80('0x109')]['hasMany'](db[_0x9a80('0x133')],{'as':_0x9a80('0x127'),'foreignKey':_0x9a80('0x12d')});db['MailAccount'][_0x9a80('0xe9')](db[_0x9a80('0x3d')],{'as':'Interactions'});db[_0x9a80('0x109')][_0x9a80('0xe9')](db[_0x9a80('0x134')],{'as':_0x9a80('0x115')});db[_0x9a80('0x109')][_0x9a80('0xf4')](db[_0x9a80('0xde')],{'as':_0x9a80('0x135'),'foreignKey':_0x9a80('0x136')});db[_0x9a80('0x109')][_0x9a80('0xf4')](db[_0x9a80('0x81')],{'as':'Template','foreignKey':_0x9a80('0x137')});db['MailAccount'][_0x9a80('0xf4')](db['Pause'],{'as':_0x9a80('0x138'),'foreignKey':'mandatoryDispositionPauseId'});db[_0x9a80('0x109')][_0x9a80('0xf8')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x122'),'through':_0x9a80('0x10b')});db[_0x9a80('0x3a')][_0x9a80('0xf8')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x122'),'through':'UserMailQueue'});db[_0x9a80('0x3a')][_0x9a80('0xf8')](db[_0x9a80('0xce')],{'through':_0x9a80('0x139'),'as':'Teams'});db[_0x9a80('0x3d')][_0x9a80('0xe9')](db[_0x9a80('0x133')],{'as':'Messages','onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x13a')});db[_0x9a80('0x3d')][_0x9a80('0xf4')](db['MailAccount'],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x12d')});db[_0x9a80('0x3d')][_0x9a80('0xf4')](db['CmContact'],{'as':_0x9a80('0x13c'),'foreignKey':_0x9a80('0x12c')});db[_0x9a80('0x3d')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x13d'),'foreignKey':'UserId'});db['MailInteraction'][_0x9a80('0xf8')](db[_0x9a80('0x13e')],{'through':_0x9a80('0x13f'),'as':_0x9a80('0x140')});db[_0x9a80('0x3d')][_0x9a80('0xf8')](db['Tag'],{'through':'mail_interaction_has_tags','as':'ThroughTags'});db[_0x9a80('0x3d')][_0x9a80('0xf8')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x141'),'through':_0x9a80('0xfd'),'foreignKey':_0x9a80('0x13a')});db[_0x9a80('0x133')]['hasMany'](db['Attachment'],{'as':_0x9a80('0x142'),'onDelete':_0x9a80('0x112')});db[_0x9a80('0x133')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'as':_0x9a80('0xeb')});db[_0x9a80('0x133')][_0x9a80('0xf4')](db[_0x9a80('0x68')],{'onDelete':'cascade','as':_0x9a80('0x13c')});db[_0x9a80('0x133')][_0x9a80('0xf4')](db['MailInteraction'],{'as':_0x9a80('0x143'),'foreignKey':_0x9a80('0x13a')});db[_0x9a80('0x133')][_0x9a80('0xf4')](db[_0x9a80('0x109')],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x12d')});db[_0x9a80('0x134')]['belongsTo'](db[_0x9a80('0xeb')],{'onDelete':_0x9a80('0x144')});db[_0x9a80('0x134')]['belongsTo'](db[_0x9a80('0x3a')],{'onDelete':_0x9a80('0x144')});db['MailApplication']['belongsTo'](db[_0x9a80('0x109')],{'onDelete':'restrict'});db[_0x9a80('0x134')][_0x9a80('0xf4')](db['Interval'],{'onDelete':_0x9a80('0x144'),'foreignKey':'IntervalId'});db['MailApplication']['belongsTo'](db[_0x9a80('0x13e')],{'onDelete':_0x9a80('0x144'),'foreignKey':_0x9a80('0x145')});db[_0x9a80('0x3f')][_0x9a80('0xf4')](db['MailAccount'],{});db['MailQueueReport']['belongsTo'](db[_0x9a80('0xde')],{'as':'List','foreignKey':'ListId'});db[_0x9a80('0x3f')]['belongsTo'](db['CmContact'],{'as':_0x9a80('0x13c'),'foreignKey':_0x9a80('0x12c')});db[_0x9a80('0x3f')]['belongsTo'](db['MailInteraction'],{});db[_0x9a80('0x3f')]['belongsTo'](db[_0x9a80('0x133')],{});db[_0x9a80('0x3f')][_0x9a80('0xf4')](db['User'],{});db[_0x9a80('0x3f')][_0x9a80('0xf4')](db['MailQueue'],{});db['Dashboard']['hasMany'](db['DashboardItem'],{'as':'Items','onDelete':_0x9a80('0x112')});db[_0x9a80('0x44')][_0x9a80('0xe9')](db[_0x9a80('0x130')],{'as':_0x9a80('0x131'),'foreignKey':_0x9a80('0x146')});db[_0x9a80('0x44')][_0x9a80('0xe9')](db[_0x9a80('0x73')],{'as':_0x9a80('0x132'),'foreignKey':'FaxAccountId'});db[_0x9a80('0x44')][_0x9a80('0xe9')](db['FaxInteraction'],{'as':_0x9a80('0x147')});db['FaxAccount']['hasMany'](db[_0x9a80('0x45')],{'as':_0x9a80('0x115')});db['FaxAccount']['hasMany'](db['VoiceExtension'],{'as':_0x9a80('0x148'),'onDelete':_0x9a80('0x112')});db[_0x9a80('0x44')]['hasMany'](db[_0x9a80('0x49')],{'as':'Messages'});db[_0x9a80('0x44')][_0x9a80('0xf4')](db[_0x9a80('0x28')],{'as':_0x9a80('0x28')});db[_0x9a80('0x44')]['belongsTo'](db[_0x9a80('0xde')],{'as':'List','foreignKey':'ListId'});db[_0x9a80('0x44')][_0x9a80('0xf4')](db['Pause'],{'as':_0x9a80('0x138'),'foreignKey':_0x9a80('0x121')});db[_0x9a80('0x44')][_0x9a80('0xf8')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x122'),'through':_0x9a80('0x108')});db['FaxApplication'][_0x9a80('0xf4')](db['User'],{'onDelete':'restrict'});db['FaxApplication'][_0x9a80('0xf4')](db[_0x9a80('0x103')],{'onDelete':_0x9a80('0x144')});db[_0x9a80('0x45')][_0x9a80('0xf4')](db[_0x9a80('0x44')],{'onDelete':'restrict'});db['FaxApplication'][_0x9a80('0xf4')](db[_0x9a80('0x13e')],{'onDelete':_0x9a80('0x144'),'foreignKey':_0x9a80('0x145')});db[_0x9a80('0x47')][_0x9a80('0xe9')](db['FaxMessage'],{'as':'Messages','onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x149')});db[_0x9a80('0x47')][_0x9a80('0xf4')](db['FaxAccount'],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x146')});db[_0x9a80('0x47')][_0x9a80('0xf4')](db[_0x9a80('0x68')],{'as':'Contact','foreignKey':_0x9a80('0x12c')});db[_0x9a80('0x47')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'as':'Owner','foreignKey':_0x9a80('0xe8')});db[_0x9a80('0x47')][_0x9a80('0xf8')](db['Tag'],{'through':_0x9a80('0x14a'),'as':'Tags'});db[_0x9a80('0x47')][_0x9a80('0xf8')](db[_0x9a80('0x13e')],{'through':_0x9a80('0x14a'),'as':_0x9a80('0x14b')});db[_0x9a80('0x47')][_0x9a80('0xf8')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x141'),'through':_0x9a80('0xff'),'foreignKey':_0x9a80('0x149')});db[_0x9a80('0x49')]['belongsTo'](db[_0x9a80('0xeb')],{'onDelete':_0x9a80('0x112'),'as':_0x9a80('0xeb')});db[_0x9a80('0x49')][_0x9a80('0xf4')](db[_0x9a80('0x47')],{'as':_0x9a80('0x143'),'foreignKey':_0x9a80('0x149')});db[_0x9a80('0x49')]['belongsTo'](db['CmContact'],{'onDelete':_0x9a80('0x112'),'as':'Contact'});db[_0x9a80('0x49')][_0x9a80('0xf4')](db[_0x9a80('0xd4')],{'as':_0x9a80('0xd4'),'foreignKey':_0x9a80('0x14c')});db[_0x9a80('0x49')]['belongsTo'](db['FaxAccount'],{'as':'Account','foreignKey':_0x9a80('0x146')});db[_0x9a80('0x103')][_0x9a80('0xf8')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x122'),'through':_0x9a80('0x32')});db[_0x9a80('0x103')][_0x9a80('0xf8')](db['Team'],{'through':_0x9a80('0x14d'),'as':_0x9a80('0x123')});db['FaxQueueReport']['belongsTo'](db['FaxAccount'],{});db[_0x9a80('0x4b')]['belongsTo'](db['CmList'],{'as':_0x9a80('0x135'),'foreignKey':_0x9a80('0x136')});db[_0x9a80('0x4b')][_0x9a80('0xf4')](db[_0x9a80('0x68')],{'as':_0x9a80('0x13c'),'foreignKey':_0x9a80('0x12c')});db[_0x9a80('0x4b')][_0x9a80('0xf4')](db[_0x9a80('0x47')],{});db['FaxQueueReport']['belongsTo'](db[_0x9a80('0x49')],{});db[_0x9a80('0x4b')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{});db[_0x9a80('0x4b')]['belongsTo'](db[_0x9a80('0x103')],{});db[_0x9a80('0x4c')][_0x9a80('0xe9')](db[_0x9a80('0x130')],{'as':_0x9a80('0x131'),'foreignKey':_0x9a80('0x14e')});db[_0x9a80('0x4c')][_0x9a80('0xe9')](db['CannedAnswer'],{'as':'Answers','foreignKey':'SmsAccountId'});db[_0x9a80('0x4c')][_0x9a80('0xe9')](db[_0x9a80('0x50')],{'as':_0x9a80('0x127'),'foreignKey':_0x9a80('0x14e')});db[_0x9a80('0x4c')][_0x9a80('0xe9')](db[_0x9a80('0x4f')],{'as':_0x9a80('0x147')});db['SmsAccount']['hasMany'](db[_0x9a80('0x14f')],{'as':'Applications'});db[_0x9a80('0x4c')][_0x9a80('0xf4')](db[_0x9a80('0xde')],{'as':'List','foreignKey':_0x9a80('0x136')});db[_0x9a80('0x4c')][_0x9a80('0xf4')](db[_0x9a80('0x76')],{'as':_0x9a80('0x138'),'foreignKey':_0x9a80('0x121')});db[_0x9a80('0x4c')]['belongsToMany'](db[_0x9a80('0xeb')],{'as':_0x9a80('0x122'),'through':_0x9a80('0x110')});db[_0x9a80('0x14f')][_0x9a80('0xf4')](db['User'],{'onDelete':_0x9a80('0x144')});db[_0x9a80('0x14f')][_0x9a80('0xf4')](db[_0x9a80('0x52')],{'onDelete':_0x9a80('0x144')});db[_0x9a80('0x14f')][_0x9a80('0xf4')](db['SmsAccount'],{'onDelete':_0x9a80('0x144')});db[_0x9a80('0x14f')]['belongsTo'](db[_0x9a80('0x11f')],{'onDelete':_0x9a80('0x144'),'foreignKey':_0x9a80('0x120')});db['SmsApplication'][_0x9a80('0xf4')](db[_0x9a80('0x13e')],{'onDelete':'restrict','foreignKey':'TagId'});db['SmsInteraction'][_0x9a80('0xe9')](db[_0x9a80('0x50')],{'as':'Messages','onDelete':_0x9a80('0x112'),'foreignKey':'SmsInteractionId'});db[_0x9a80('0x4f')][_0x9a80('0xf4')](db['SmsAccount'],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x14e')});db[_0x9a80('0x4f')][_0x9a80('0xf4')](db['CmContact'],{'as':_0x9a80('0x13c'),'foreignKey':'ContactId'});db[_0x9a80('0x4f')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x13d'),'foreignKey':_0x9a80('0xe8')});db[_0x9a80('0x4f')][_0x9a80('0xf8')](db[_0x9a80('0x13e')],{'through':_0x9a80('0x150'),'as':_0x9a80('0x140')});db['SmsInteraction']['belongsToMany'](db['Tag'],{'through':'sms_interaction_has_tags','as':_0x9a80('0x14b')});db['SmsInteraction'][_0x9a80('0xf8')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x141'),'through':'user_has_sms_interactions','foreignKey':_0x9a80('0x151')});db[_0x9a80('0x50')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'as':_0x9a80('0xeb')});db[_0x9a80('0x50')]['belongsTo'](db[_0x9a80('0x68')],{'onDelete':_0x9a80('0x112'),'as':_0x9a80('0x13c')});db['SmsMessage'][_0x9a80('0xf4')](db[_0x9a80('0x4f')],{'onDelete':'cascade','as':_0x9a80('0x143'),'foreignKey':_0x9a80('0x151')});db[_0x9a80('0x50')][_0x9a80('0xf4')](db[_0x9a80('0x4c')],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x14e')});db[_0x9a80('0x52')][_0x9a80('0xf8')](db['User'],{'as':_0x9a80('0x122'),'through':_0x9a80('0x34'),'foreignKey':_0x9a80('0x152')});db['SmsQueue']['belongsToMany'](db[_0x9a80('0xce')],{'through':_0x9a80('0x153'),'as':_0x9a80('0x123')});db['OpenchannelAccount'][_0x9a80('0xe9')](db[_0x9a80('0x130')],{'as':_0x9a80('0x131'),'foreignKey':_0x9a80('0x154')});db[_0x9a80('0x10c')]['hasMany'](db[_0x9a80('0x73')],{'as':'Answers','foreignKey':_0x9a80('0x154')});db[_0x9a80('0x10c')]['hasMany'](db[_0x9a80('0x56')],{'as':_0x9a80('0x147'),'foreignKey':_0x9a80('0x154')});db[_0x9a80('0x10c')][_0x9a80('0xe9')](db[_0x9a80('0x58')],{'as':_0x9a80('0x127'),'foreignKey':_0x9a80('0x154')});db['OpenchannelAccount'][_0x9a80('0xe9')](db[_0x9a80('0x54')],{'as':_0x9a80('0x115'),'foreignKey':'OpenchannelAccountId'});db[_0x9a80('0x10c')]['belongsTo'](db[_0x9a80('0xde')],{'as':'List','foreignKey':_0x9a80('0x136')});db[_0x9a80('0x10c')]['belongsTo'](db[_0x9a80('0x76')],{'as':_0x9a80('0x138'),'foreignKey':_0x9a80('0x121')});db[_0x9a80('0x10c')][_0x9a80('0xf8')](db[_0x9a80('0xeb')],{'as':'Agents','through':_0x9a80('0x10e')});db[_0x9a80('0x54')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'onDelete':_0x9a80('0x144')});db['OpenchannelApplication'][_0x9a80('0xf4')](db[_0x9a80('0x155')],{'onDelete':_0x9a80('0x144'),'foreignKey':'OpenchannelQueueId'});db[_0x9a80('0x54')][_0x9a80('0xf4')](db[_0x9a80('0x10c')],{'onDelete':_0x9a80('0x144'),'foreignKey':_0x9a80('0x154')});db[_0x9a80('0x54')][_0x9a80('0xf4')](db[_0x9a80('0x11f')],{'onDelete':_0x9a80('0x144'),'foreignKey':_0x9a80('0x120')});db[_0x9a80('0x54')][_0x9a80('0xf4')](db[_0x9a80('0x13e')],{'onDelete':_0x9a80('0x144'),'foreignKey':_0x9a80('0x145')});db[_0x9a80('0x56')][_0x9a80('0xe9')](db[_0x9a80('0x58')],{'as':_0x9a80('0x127'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x156')});db[_0x9a80('0x56')]['belongsTo'](db[_0x9a80('0x10c')],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x154')});db[_0x9a80('0x56')]['belongsTo'](db[_0x9a80('0x68')],{'as':_0x9a80('0x13c'),'foreignKey':'ContactId'});db['OpenchannelInteraction']['belongsTo'](db[_0x9a80('0xeb')],{'as':_0x9a80('0x13d'),'foreignKey':_0x9a80('0xe8')});db[_0x9a80('0x56')]['belongsToMany'](db[_0x9a80('0x13e')],{'through':'openchannel_interaction_has_tags','as':'Tags'});db[_0x9a80('0x56')]['belongsToMany'](db['Tag'],{'through':_0x9a80('0x157'),'as':_0x9a80('0x14b')});db[_0x9a80('0x56')][_0x9a80('0xf8')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x141'),'through':'user_has_openchannel_interactions','foreignKey':_0x9a80('0x156')});db['OpenchannelMessage']['belongsTo'](db[_0x9a80('0xeb')],{'onDelete':_0x9a80('0x112'),'as':_0x9a80('0xeb')});db[_0x9a80('0x58')][_0x9a80('0xf4')](db[_0x9a80('0x68')],{'onDelete':'cascade','as':_0x9a80('0x13c')});db['OpenchannelMessage'][_0x9a80('0xf4')](db[_0x9a80('0x56')],{'onDelete':_0x9a80('0x112'),'as':_0x9a80('0x143'),'foreignKey':_0x9a80('0x156')});db[_0x9a80('0x58')][_0x9a80('0xf4')](db[_0x9a80('0xd4')],{'as':_0x9a80('0xd4'),'foreignKey':_0x9a80('0x14c')});db[_0x9a80('0x58')][_0x9a80('0xf4')](db[_0x9a80('0x10c')],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x154')});db[_0x9a80('0x155')]['belongsToMany'](db[_0x9a80('0xeb')],{'as':'Agents','through':_0x9a80('0x36'),'foreignKey':_0x9a80('0x158')});db[_0x9a80('0x155')][_0x9a80('0xf8')](db['Team'],{'through':_0x9a80('0x159'),'as':_0x9a80('0x123')});db['ChatWebsite'][_0x9a80('0xe9')](db[_0x9a80('0x130')],{'as':_0x9a80('0x131'),'foreignKey':_0x9a80('0x15a')});db['ChatWebsite'][_0x9a80('0xe9')](db[_0x9a80('0x73')],{'as':'Answers','foreignKey':_0x9a80('0x15a')});db['ChatWebsite'][_0x9a80('0xe9')](db[_0x9a80('0x64')],{'as':'ProactiveActions'});db[_0x9a80('0x5a')]['hasMany'](db[_0x9a80('0xf0')],{'as':'Interactions'});db[_0x9a80('0x5a')][_0x9a80('0xe9')](db[_0x9a80('0x15b')],{'as':_0x9a80('0x115')});db[_0x9a80('0x5a')][_0x9a80('0xe9')](db[_0x9a80('0x5f')],{'as':_0x9a80('0x127')});db['ChatWebsite'][_0x9a80('0xf4')](db[_0x9a80('0xde')],{'as':_0x9a80('0x135'),'foreignKey':_0x9a80('0x136')});db[_0x9a80('0x5a')]['belongsTo'](db[_0x9a80('0x11f')],{'as':_0x9a80('0x11f'),'foreignKey':_0x9a80('0x120')});db[_0x9a80('0x5a')]['belongsTo'](db[_0x9a80('0x76')],{'as':_0x9a80('0x138'),'foreignKey':'mandatoryDispositionPauseId'});db['ChatWebsite'][_0x9a80('0xf8')](db['User'],{'as':_0x9a80('0x122'),'through':_0x9a80('0x107')});db[_0x9a80('0x15c')]['belongsTo'](db[_0x9a80('0x10c')],{});db[_0x9a80('0x15c')][_0x9a80('0xf4')](db[_0x9a80('0xde')],{'as':_0x9a80('0x135'),'foreignKey':_0x9a80('0x136')});db[_0x9a80('0x15c')]['belongsTo'](db[_0x9a80('0x68')],{'as':'Contact','foreignKey':_0x9a80('0x12c')});db[_0x9a80('0x15c')][_0x9a80('0xf4')](db[_0x9a80('0x56')],{});db[_0x9a80('0x15c')][_0x9a80('0xf4')](db[_0x9a80('0x58')],{});db['OpenchannelQueueReport'][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{});db[_0x9a80('0x15c')][_0x9a80('0xf4')](db[_0x9a80('0x155')],{});db[_0x9a80('0x15b')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x15d'),'foreignKey':_0x9a80('0xe8'),'onDelete':_0x9a80('0x144')});db[_0x9a80('0x15b')]['belongsTo'](db['ChatQueue'],{'as':_0x9a80('0x15e'),'foreignKey':'ChatQueueId','onDelete':_0x9a80('0x144')});db[_0x9a80('0x15b')][_0x9a80('0xf4')](db[_0x9a80('0x5a')],{'as':_0x9a80('0x15f'),'foreignKey':_0x9a80('0x15a'),'onDelete':'restrict'});db['ChatApplication'][_0x9a80('0xf4')](db['Tag'],{'onDelete':'restrict','foreignKey':_0x9a80('0x145')});db[_0x9a80('0xf0')][_0x9a80('0xe9')](db['ChatMessage'],{'as':_0x9a80('0x127'),'onDelete':'cascade','foreignKey':_0x9a80('0x160')});db['ChatInteraction']['belongsTo'](db[_0x9a80('0x5a')],{'as':_0x9a80('0x13b'),'foreignKey':'ChatWebsiteId'});db[_0x9a80('0xf0')][_0x9a80('0xf4')](db[_0x9a80('0x68')],{'as':'Contact','foreignKey':'ContactId'});db['ChatInteraction'][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'as':'Owner','foreignKey':_0x9a80('0xe8')});db['ChatInteraction'][_0x9a80('0xf8')](db[_0x9a80('0x13e')],{'through':_0x9a80('0x161'),'as':_0x9a80('0x140')});db[_0x9a80('0xf0')][_0x9a80('0xf8')](db[_0x9a80('0x13e')],{'through':_0x9a80('0x161'),'as':'ThroughTags'});db[_0x9a80('0xf0')][_0x9a80('0xf8')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x141'),'through':_0x9a80('0xfe'),'foreignKey':'ChatInteractionId'});db[_0x9a80('0x5f')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'onDelete':_0x9a80('0x112'),'as':_0x9a80('0xeb')});db['ChatMessage'][_0x9a80('0xf4')](db[_0x9a80('0x68')],{'onDelete':_0x9a80('0x112'),'as':_0x9a80('0x13c'),'foreignKey':'ContactId'});db['ChatMessage']['belongsTo'](db[_0x9a80('0xf0')],{'onDelete':_0x9a80('0x112'),'as':_0x9a80('0x143'),'foreignKey':'ChatInteractionId'});db[_0x9a80('0x5f')][_0x9a80('0xf4')](db[_0x9a80('0xd4')],{'as':_0x9a80('0xd4'),'foreignKey':_0x9a80('0x14c')});db[_0x9a80('0x5f')][_0x9a80('0xf4')](db[_0x9a80('0x5a')],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x15a')});db[_0x9a80('0x61')]['belongsTo'](db[_0x9a80('0x68')],{'onDelete':_0x9a80('0x112'),'as':_0x9a80('0x13c'),'foreignKey':_0x9a80('0x12c')});db[_0x9a80('0x61')][_0x9a80('0xf4')](db[_0x9a80('0x5a')],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x15a')});db[_0x9a80('0x102')][_0x9a80('0xf8')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x122'),'through':_0x9a80('0x2e'),'hooks':!![]});db[_0x9a80('0x102')][_0x9a80('0xf8')](db[_0x9a80('0xce')],{'through':'team_has_chat_queues','as':'Teams'});db['ChatGroup'][_0x9a80('0xe9')](db['ChatInternalMessage'],{'as':_0x9a80('0x127'),'foreignKey':_0x9a80('0x162'),'onDelete':'cascade'});db[_0x9a80('0x63')]['belongsToMany'](db[_0x9a80('0xeb')],{'as':_0x9a80('0x163'),'through':_0x9a80('0xf7')});db['ChatProactiveAction'][_0x9a80('0xf4')](db['ChatWebsite'],{'as':_0x9a80('0x15f'),'foreignKey':_0x9a80('0x15a')});db[_0x9a80('0x66')][_0x9a80('0xe9')](db[_0x9a80('0x68')],{'as':'Contacts','foreignKey':'CompanyId'});db[_0x9a80('0x68')][_0x9a80('0xe9')](db['CmHopper'],{'as':_0x9a80('0x119'),'foreignKey':'ContactId'});db[_0x9a80('0x68')][_0x9a80('0xe9')](db[_0x9a80('0x6c')],{'as':'HopperFinals','foreignKey':_0x9a80('0x12c')});db['CmContact'][_0x9a80('0xe9')](db[_0x9a80('0x6e')],{'as':_0x9a80('0x164'),'foreignKey':'ContactId'});db[_0x9a80('0x68')][_0x9a80('0xe9')](db['ReportAgentPreview'],{'as':_0x9a80('0x70'),'foreignKey':_0x9a80('0x12c')});db[_0x9a80('0x68')][_0x9a80('0xe9')](db[_0x9a80('0xc0')],{'as':_0x9a80('0x11c'),'foreignKey':_0x9a80('0x12c')});db[_0x9a80('0x68')]['hasMany'](db[_0x9a80('0x56')],{'as':_0x9a80('0xef'),'foreignKey':_0x9a80('0x12c'),'onDelete':'restrict'});db[_0x9a80('0x68')]['hasMany'](db[_0x9a80('0xf0')],{'as':_0x9a80('0x165'),'foreignKey':_0x9a80('0x12c'),'onDelete':_0x9a80('0x144')});db[_0x9a80('0x68')][_0x9a80('0xe9')](db[_0x9a80('0x4f')],{'as':_0x9a80('0xf1'),'foreignKey':_0x9a80('0x12c'),'onDelete':'restrict'});db[_0x9a80('0x68')]['hasMany'](db[_0x9a80('0x47')],{'as':_0x9a80('0xf2'),'foreignKey':_0x9a80('0x12c'),'onDelete':_0x9a80('0x144')});db[_0x9a80('0x68')][_0x9a80('0xe9')](db[_0x9a80('0x3d')],{'as':_0x9a80('0xf3'),'foreignKey':_0x9a80('0x12c'),'onDelete':'restrict'});db[_0x9a80('0x68')][_0x9a80('0xf4')](db['CmCompany'],{'as':_0x9a80('0x166'),'foreignKey':_0x9a80('0x167')});db[_0x9a80('0x68')]['belongsTo'](db['CmList'],{'as':_0x9a80('0x135'),'foreignKey':_0x9a80('0x136'),'onDelete':'cascade'});db[_0x9a80('0x68')][_0x9a80('0xf8')](db[_0x9a80('0xeb')],{'as':'Users','through':_0x9a80('0xfa')});db[_0x9a80('0x68')][_0x9a80('0xf8')](db[_0x9a80('0x13e')],{'as':_0x9a80('0x140'),'through':_0x9a80('0x168')});db[_0x9a80('0x68')]['belongsToMany'](db[_0x9a80('0x13e')],{'through':'cm_contact_has_tags','as':_0x9a80('0x14b')});db[_0x9a80('0x69')]['belongsTo'](db[_0x9a80('0x68')],{'as':_0x9a80('0x13c'),'foreignKey':_0x9a80('0x12c'),'onDelete':_0x9a80('0x112')});db[_0x9a80('0x69')]['belongsTo'](db[_0x9a80('0xde')],{'as':_0x9a80('0x135'),'foreignKey':_0x9a80('0x136'),'onDelete':_0x9a80('0x112')});db[_0x9a80('0x69')]['belongsTo'](db[_0x9a80('0xeb')],{'as':_0x9a80('0x15d'),'foreignKey':_0x9a80('0xe8')});db[_0x9a80('0x69')]['belongsTo'](db[_0x9a80('0x118')],{'as':_0x9a80('0x15e'),'foreignKey':_0x9a80('0x11a'),'onDelete':'cascade'});db[_0x9a80('0x69')]['belongsTo'](db['Campaign'],{'as':_0x9a80('0xd1'),'foreignKey':_0x9a80('0x169'),'onDelete':_0x9a80('0x112')});db[_0x9a80('0x69')][_0x9a80('0xf4')](db['User'],{'as':_0x9a80('0x13d'),'foreignKey':'OwnerId'});db[_0x9a80('0x6b')][_0x9a80('0xf4')](db[_0x9a80('0x68')],{'as':_0x9a80('0x13c'),'foreignKey':_0x9a80('0x12c'),'onDelete':_0x9a80('0x112')});db['CmHopperBlack'][_0x9a80('0xf4')](db[_0x9a80('0xde')],{'as':'List','foreignKey':_0x9a80('0x136'),'onDelete':_0x9a80('0x112')});db[_0x9a80('0x6b')][_0x9a80('0xf4')](db[_0x9a80('0x118')],{'as':_0x9a80('0x15e'),'foreignKey':_0x9a80('0x11a'),'onDelete':_0x9a80('0x112')});db[_0x9a80('0x6b')][_0x9a80('0xf4')](db[_0x9a80('0xd1')],{'as':_0x9a80('0xd1'),'foreignKey':_0x9a80('0x169'),'onDelete':'cascade'});db[_0x9a80('0x16a')][_0x9a80('0xe9')](db[_0x9a80('0x16b')],{'as':{'plural':_0x9a80('0x16c'),'singular':_0x9a80('0x16d')},'foreignKey':_0x9a80('0x16e'),'onDelete':_0x9a80('0x112'),'hooks':!![]});db[_0x9a80('0x16a')][_0x9a80('0xe9')](db[_0x9a80('0x16b')],{'as':{'plural':_0x9a80('0x16f'),'singular':_0x9a80('0x170')},'foreignKey':_0x9a80('0x171'),'onDelete':_0x9a80('0x112'),'hooks':!![]});db[_0x9a80('0x16a')][_0x9a80('0xe9')](db[_0x9a80('0x71')],{'as':_0x9a80('0x172'),'foreignKey':'AutomationId','onDelete':'cascade','hooks':!![]});db[_0x9a80('0x11f')][_0x9a80('0xe9')](db[_0x9a80('0x11f')],{'as':_0x9a80('0x173'),'foreignKey':_0x9a80('0x120'),'onDelete':_0x9a80('0x112'),'hooks':!![],'required':![]});db[_0x9a80('0x11f')]['hasMany'](db[_0x9a80('0x17')],{'as':_0x9a80('0xec'),'foreignKey':_0x9a80('0x120'),'onDelete':'restrict'});db[_0x9a80('0x11f')][_0x9a80('0xe9')](db['MailApplication'],{'as':_0x9a80('0x174'),'foreignKey':_0x9a80('0x120')});db[_0x9a80('0x11f')][_0x9a80('0xe9')](db[_0x9a80('0x15b')],{'as':_0x9a80('0x175'),'foreignKey':_0x9a80('0x120')});db[_0x9a80('0x11f')][_0x9a80('0xe9')](db[_0x9a80('0x45')],{'as':_0x9a80('0x176'),'foreignKey':_0x9a80('0x120')});db[_0x9a80('0x11f')][_0x9a80('0xe9')](db[_0x9a80('0x14f')],{'as':'SmsApplications','foreignKey':_0x9a80('0x120')});db[_0x9a80('0x7c')][_0x9a80('0xf4')](db[_0x9a80('0x109')],{});db[_0x9a80('0x7c')][_0x9a80('0xf4')](db[_0x9a80('0x88')],{'foreignKey':_0x9a80('0x177')});db[_0x9a80('0x7c')]['belongsTo'](db[_0x9a80('0x178')],{'foreignKey':'CustomReportId'});db[_0x9a80('0x7e')][_0x9a80('0xf8')](db[_0x9a80('0x19')],{'as':'Mohs','through':_0x9a80('0x117'),'onDelete':_0x9a80('0x144')});db[_0x9a80('0x13e')][_0x9a80('0xf8')](db[_0x9a80('0x68')],{'through':_0x9a80('0x168')});db[_0x9a80('0x13e')]['belongsToMany'](db[_0x9a80('0xf0')],{'through':_0x9a80('0x161')});db[_0x9a80('0x13e')][_0x9a80('0xf8')](db[_0x9a80('0x3d')],{'through':_0x9a80('0x13f')});db['Tag'][_0x9a80('0xf8')](db[_0x9a80('0x4f')],{'through':_0x9a80('0x150')});db[_0x9a80('0x13e')]['belongsToMany'](db[_0x9a80('0x47')],{'through':_0x9a80('0x14a')});db['Tag'][_0x9a80('0xf8')](db['OpenchannelInteraction'],{'through':_0x9a80('0x157')});db[_0x9a80('0x179')][_0x9a80('0xe9')](db[_0x9a80('0x16b')],{'as':{'plural':_0x9a80('0x17a'),'singular':_0x9a80('0x17b')},'foreignKey':_0x9a80('0x17c'),'onDelete':_0x9a80('0x112'),'hooks':!![]});db[_0x9a80('0x179')]['hasMany'](db['Condition'],{'as':{'plural':_0x9a80('0x17d'),'singular':_0x9a80('0x17e')},'foreignKey':_0x9a80('0x17f'),'onDelete':_0x9a80('0x112'),'hooks':!![]});db[_0x9a80('0x179')][_0x9a80('0xe9')](db[_0x9a80('0x71')],{'as':_0x9a80('0x172'),'foreignKey':_0x9a80('0x180'),'onDelete':'cascade','hooks':!![]});db[_0x9a80('0x178')][_0x9a80('0xe9')](db['AnalyticFieldReport'],{'as':_0x9a80('0x181'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x182'),'hooks':!![]});db[_0x9a80('0x88')][_0x9a80('0xe9')](db[_0x9a80('0x183')],{'as':_0x9a80('0x181'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x177')});db['AnalyticMetric'][_0x9a80('0xe9')](db['AnalyticFieldReport'],{'as':'Fields','onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x184')});db['AnalyticFieldReport']['belongsTo'](db[_0x9a80('0x8c')],{'foreignKey':'MetricId'});db[_0x9a80('0x185')][_0x9a80('0xe9')](db[_0x9a80('0x186')],{'as':_0x9a80('0x187'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x188')});db['SalesforceConfiguration'][_0x9a80('0xe9')](db['SalesforceField'],{'as':_0x9a80('0x189'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x18a')});db[_0x9a80('0x186')][_0x9a80('0xe9')](db[_0x9a80('0x92')],{'as':_0x9a80('0x18b'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x18c')});db[_0x9a80('0x186')][_0x9a80('0xe9')](db['SalesforceField'],{'as':_0x9a80('0x181'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x18d')});db[_0x9a80('0x186')][_0x9a80('0xf4')](db[_0x9a80('0x185')],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x188')});db['SalesforceField'][_0x9a80('0xe9')](db[_0x9a80('0x92')],{'as':_0x9a80('0x18e'),'foreignKey':_0x9a80('0x18a')});db['SalesforceField'][_0x9a80('0xe9')](db[_0x9a80('0x92')],{'as':_0x9a80('0x18f'),'foreignKey':_0x9a80('0x18c')});db[_0x9a80('0x92')][_0x9a80('0xe9')](db[_0x9a80('0x92')],{'as':'Field','foreignKey':_0x9a80('0x18d')});db['SalesforceField']['belongsTo'](db['Variable'],{'as':_0x9a80('0x190'),'foreignKey':'VariableId'});db['SugarcrmAccount']['hasMany'](db['SugarcrmConfiguration'],{'as':'Configurations','onDelete':'cascade','foreignKey':_0x9a80('0x188')});db[_0x9a80('0x96')][_0x9a80('0xe9')](db[_0x9a80('0x98')],{'as':_0x9a80('0x189'),'onDelete':'cascade','foreignKey':_0x9a80('0x18a')});db[_0x9a80('0x96')][_0x9a80('0xe9')](db[_0x9a80('0x98')],{'as':_0x9a80('0x18b'),'onDelete':_0x9a80('0x112'),'foreignKey':'DescriptionId'});db['SugarcrmConfiguration'][_0x9a80('0xe9')](db[_0x9a80('0x98')],{'as':'Fields','onDelete':'cascade','foreignKey':_0x9a80('0x18d')});db[_0x9a80('0x96')][_0x9a80('0xf4')](db[_0x9a80('0x94')],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x188')});db['SugarcrmField'][_0x9a80('0xe9')](db[_0x9a80('0x98')],{'as':_0x9a80('0x18e'),'foreignKey':_0x9a80('0x18a')});db[_0x9a80('0x98')][_0x9a80('0xe9')](db[_0x9a80('0x98')],{'as':_0x9a80('0x18f'),'foreignKey':'DescriptionId'});db[_0x9a80('0x98')][_0x9a80('0xe9')](db[_0x9a80('0x98')],{'as':_0x9a80('0x191'),'foreignKey':_0x9a80('0x18d')});db[_0x9a80('0x98')][_0x9a80('0xf4')](db[_0x9a80('0x190')],{'as':_0x9a80('0x190'),'foreignKey':_0x9a80('0x192')});db[_0x9a80('0x193')]['hasMany'](db[_0x9a80('0x9b')],{'as':_0x9a80('0x187'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x188')});db['DeskConfiguration'][_0x9a80('0xe9')](db['DeskField'],{'as':_0x9a80('0x189'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x18a')});db['DeskConfiguration'][_0x9a80('0xe9')](db[_0x9a80('0x9c')],{'as':'Descriptions','onDelete':_0x9a80('0x112'),'foreignKey':'DescriptionId'});db[_0x9a80('0x9b')][_0x9a80('0xe9')](db[_0x9a80('0x9c')],{'as':_0x9a80('0x181'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x18d')});db['DeskConfiguration'][_0x9a80('0xf4')](db['DeskAccount'],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x188')});db[_0x9a80('0x9b')]['belongsToMany'](db[_0x9a80('0x13e')],{'through':_0x9a80('0x194')});db[_0x9a80('0x9c')][_0x9a80('0xe9')](db[_0x9a80('0x9c')],{'as':_0x9a80('0x18e'),'foreignKey':_0x9a80('0x18a')});db[_0x9a80('0x9c')][_0x9a80('0xe9')](db[_0x9a80('0x9c')],{'as':_0x9a80('0x18f'),'foreignKey':_0x9a80('0x18c')});db[_0x9a80('0x9c')][_0x9a80('0xe9')](db[_0x9a80('0x9c')],{'as':_0x9a80('0x191'),'foreignKey':_0x9a80('0x18d')});db[_0x9a80('0x9c')][_0x9a80('0xf4')](db[_0x9a80('0x190')],{'as':_0x9a80('0x190'),'foreignKey':_0x9a80('0x192')});db[_0x9a80('0x9e')]['hasMany'](db[_0x9a80('0xa0')],{'as':'Configurations','onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x188')});db['ZohoConfiguration'][_0x9a80('0xe9')](db[_0x9a80('0xa2')],{'as':_0x9a80('0x189'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x18a')});db[_0x9a80('0xa0')]['hasMany'](db[_0x9a80('0xa2')],{'as':'Descriptions','onDelete':'cascade','foreignKey':_0x9a80('0x18c')});db['ZohoConfiguration'][_0x9a80('0xe9')](db['ZohoField'],{'as':_0x9a80('0x181'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x18d')});db[_0x9a80('0xa0')][_0x9a80('0xf4')](db[_0x9a80('0x9e')],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x188')});db[_0x9a80('0xa2')][_0x9a80('0xe9')](db[_0x9a80('0xa2')],{'as':_0x9a80('0x18e'),'foreignKey':_0x9a80('0x18a')});db[_0x9a80('0xa2')][_0x9a80('0xe9')](db[_0x9a80('0xa2')],{'as':_0x9a80('0x18f'),'foreignKey':_0x9a80('0x18c')});db['ZohoField'][_0x9a80('0xe9')](db[_0x9a80('0xa2')],{'as':_0x9a80('0x191'),'foreignKey':_0x9a80('0x18d')});db['ZohoField'][_0x9a80('0xf4')](db['Variable'],{'as':_0x9a80('0x190'),'foreignKey':_0x9a80('0x192')});db[_0x9a80('0x195')][_0x9a80('0xe9')](db[_0x9a80('0x196')],{'as':'Configurations','onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x188')});db['ZendeskConfiguration'][_0x9a80('0xe9')](db['ZendeskField'],{'as':_0x9a80('0x189'),'foreignKey':_0x9a80('0x18a')});db[_0x9a80('0x196')]['hasMany'](db[_0x9a80('0xa6')],{'as':_0x9a80('0x18b'),'foreignKey':_0x9a80('0x18c')});db[_0x9a80('0x196')]['hasMany'](db[_0x9a80('0xa6')],{'as':_0x9a80('0x181'),'foreignKey':_0x9a80('0x18d')});db[_0x9a80('0x196')][_0x9a80('0xf4')](db[_0x9a80('0x195')],{'as':_0x9a80('0x13b'),'foreignKey':'AccountId'});db[_0x9a80('0x196')][_0x9a80('0xf8')](db[_0x9a80('0x13e')],{'through':_0x9a80('0x197')});db[_0x9a80('0xa6')][_0x9a80('0xe9')](db[_0x9a80('0xa6')],{'as':_0x9a80('0x18e'),'foreignKey':_0x9a80('0x18a')});db[_0x9a80('0xa6')]['hasMany'](db['ZendeskField'],{'as':'Description','foreignKey':'DescriptionId'});db[_0x9a80('0xa6')]['hasMany'](db['ZendeskField'],{'as':_0x9a80('0x191'),'foreignKey':_0x9a80('0x18d')});db[_0x9a80('0xa6')][_0x9a80('0xf4')](db[_0x9a80('0x190')],{'as':_0x9a80('0x190'),'foreignKey':_0x9a80('0x192')});db['FreshdeskAccount'][_0x9a80('0xe9')](db[_0x9a80('0x198')],{'as':'Configurations','onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x188')});db[_0x9a80('0x198')][_0x9a80('0xe9')](db[_0x9a80('0xaa')],{'as':'Subjects','onDelete':'cascade','foreignKey':'SubjectId'});db[_0x9a80('0x198')]['hasMany'](db[_0x9a80('0xaa')],{'as':_0x9a80('0x18b'),'onDelete':'cascade','foreignKey':_0x9a80('0x18c')});db[_0x9a80('0x198')][_0x9a80('0xe9')](db['FreshdeskField'],{'as':'Fields','onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x18d')});db['FreshdeskConfiguration'][_0x9a80('0xf4')](db[_0x9a80('0xa7')],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x188')});db[_0x9a80('0x198')][_0x9a80('0xf8')](db['Tag'],{'through':_0x9a80('0x199')});db[_0x9a80('0xaa')][_0x9a80('0xe9')](db[_0x9a80('0xaa')],{'as':_0x9a80('0x18e'),'foreignKey':_0x9a80('0x18a')});db['FreshdeskField']['hasMany'](db[_0x9a80('0xaa')],{'as':_0x9a80('0x18f'),'foreignKey':_0x9a80('0x18c')});db['FreshdeskField'][_0x9a80('0xe9')](db['FreshdeskField'],{'as':'Field','foreignKey':'FieldId'});db['FreshdeskField'][_0x9a80('0xf4')](db[_0x9a80('0x190')],{'as':_0x9a80('0x190'),'foreignKey':'VariableId'});db['VtigerAccount'][_0x9a80('0xe9')](db['VtigerConfiguration'],{'as':_0x9a80('0x187'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x188')});db[_0x9a80('0x19a')]['hasMany'](db['VtigerField'],{'as':'Subjects','foreignKey':'SubjectId'});db[_0x9a80('0x19a')]['hasMany'](db[_0x9a80('0x19b')],{'as':_0x9a80('0x18b'),'foreignKey':_0x9a80('0x18c')});db[_0x9a80('0x19a')][_0x9a80('0xe9')](db['VtigerField'],{'as':_0x9a80('0x181'),'foreignKey':_0x9a80('0x18d')});db[_0x9a80('0x19a')][_0x9a80('0xf4')](db['VtigerAccount'],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x188')});db[_0x9a80('0x19a')][_0x9a80('0xf8')](db[_0x9a80('0x13e')],{'through':'int_vtiger_configuration_has_tags'});db[_0x9a80('0x19b')][_0x9a80('0xe9')](db['VtigerField'],{'as':_0x9a80('0x18e'),'foreignKey':_0x9a80('0x18a')});db[_0x9a80('0x19b')]['hasMany'](db['VtigerField'],{'as':_0x9a80('0x18f'),'foreignKey':_0x9a80('0x18c')});db['VtigerField'][_0x9a80('0xe9')](db[_0x9a80('0x19b')],{'as':_0x9a80('0x191'),'foreignKey':_0x9a80('0x18d')});db[_0x9a80('0x19b')][_0x9a80('0xf4')](db[_0x9a80('0x190')],{'as':'Variable','foreignKey':_0x9a80('0x192')});db['ServicenowAccount'][_0x9a80('0xe9')](db[_0x9a80('0xb0')],{'as':'Configurations','onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x188')});db[_0x9a80('0xb0')][_0x9a80('0xe9')](db[_0x9a80('0xb2')],{'as':'Subjects','foreignKey':'SubjectId'});db[_0x9a80('0xb0')]['hasMany'](db[_0x9a80('0xb2')],{'as':'Descriptions','foreignKey':'DescriptionId'});db[_0x9a80('0xb0')]['hasMany'](db[_0x9a80('0xb2')],{'as':_0x9a80('0x181'),'foreignKey':_0x9a80('0x18d')});db[_0x9a80('0xb0')][_0x9a80('0xf4')](db[_0x9a80('0xae')],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x188')});db['ServicenowField'][_0x9a80('0xe9')](db[_0x9a80('0xb2')],{'as':_0x9a80('0x18e'),'foreignKey':'SubjectId'});db[_0x9a80('0xb2')][_0x9a80('0xe9')](db[_0x9a80('0xb2')],{'as':_0x9a80('0x18f'),'foreignKey':_0x9a80('0x18c')});db[_0x9a80('0xb2')]['hasMany'](db['ServicenowField'],{'as':'Field','foreignKey':_0x9a80('0x18d')});db[_0x9a80('0xb2')]['belongsTo'](db[_0x9a80('0x190')],{'as':_0x9a80('0x190'),'foreignKey':'VariableId'});db[_0x9a80('0x19c')][_0x9a80('0xe9')](db[_0x9a80('0x19d')],{'as':_0x9a80('0x187'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x188')});db['Dynamics365Configuration']['hasMany'](db['Dynamics365Field'],{'as':'Subjects','onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x18a')});db[_0x9a80('0x19d')][_0x9a80('0xe9')](db['Dynamics365Field'],{'as':_0x9a80('0x18b'),'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x18c')});db[_0x9a80('0x19d')][_0x9a80('0xe9')](db[_0x9a80('0xb5')],{'as':'Fields','onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x18d')});db['Dynamics365Configuration'][_0x9a80('0xf4')](db['Dynamics365Account'],{'as':_0x9a80('0x13b'),'foreignKey':_0x9a80('0x188')});db[_0x9a80('0xb5')][_0x9a80('0xe9')](db[_0x9a80('0xb5')],{'as':'Subject','foreignKey':'SubjectId'});db['Dynamics365Field'][_0x9a80('0xe9')](db['Dynamics365Field'],{'as':_0x9a80('0x18f'),'foreignKey':_0x9a80('0x18c')});db['Dynamics365Field'][_0x9a80('0xe9')](db[_0x9a80('0xb5')],{'as':_0x9a80('0x191'),'foreignKey':_0x9a80('0x18d')});db[_0x9a80('0xb5')][_0x9a80('0xf4')](db['Variable'],{'as':'Variable','foreignKey':_0x9a80('0x192')});db[_0x9a80('0xb8')][_0x9a80('0xf4')](db[_0x9a80('0x5a')],{});db['ChatQueueReport'][_0x9a80('0xf4')](db[_0x9a80('0xde')],{'as':_0x9a80('0x135'),'foreignKey':'ListId'});db[_0x9a80('0xb8')][_0x9a80('0xf4')](db[_0x9a80('0x68')],{'as':_0x9a80('0x13c'),'foreignKey':_0x9a80('0x12c')});db[_0x9a80('0xb8')][_0x9a80('0xf4')](db[_0x9a80('0xf0')],{});db[_0x9a80('0xb8')]['belongsTo'](db[_0x9a80('0x5f')],{});db['ChatQueueReport'][_0x9a80('0xf4')](db['User'],{});db[_0x9a80('0xb8')][_0x9a80('0xf4')](db['ChatQueue'],{});db[_0x9a80('0xba')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x19e')});db[_0x9a80('0xba')]['belongsTo'](db['User'],{'onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x19f')});db['JscriptySessionReport']['hasMany'](db[_0x9a80('0xbe')],{'foreignKey':_0x9a80('0x1a0'),'onDelete':_0x9a80('0x112')});db['JscriptySessionReport']['hasMany'](db[_0x9a80('0xbc')],{'foreignKey':_0x9a80('0x1a0'),'onDelete':_0x9a80('0x112')});db[_0x9a80('0x1a1')][_0x9a80('0xf4')](db['SmsAccount'],{});db[_0x9a80('0x1a1')]['belongsTo'](db[_0x9a80('0xde')],{'as':_0x9a80('0x135'),'foreignKey':'ListId'});db[_0x9a80('0x1a1')][_0x9a80('0xf4')](db[_0x9a80('0x68')],{'as':_0x9a80('0x13c'),'foreignKey':_0x9a80('0x12c')});db['SmsQueueReport'][_0x9a80('0xf4')](db[_0x9a80('0x4f')],{});db['SmsQueueReport']['belongsTo'](db[_0x9a80('0x50')],{});db['SmsQueueReport'][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{});db[_0x9a80('0x1a1')]['belongsTo'](db['SmsQueue'],{});db['JscriptyProject'][_0x9a80('0xe9')](db[_0x9a80('0xc0')],{'foreignKey':_0x9a80('0x1a2')});db[_0x9a80('0xc6')][_0x9a80('0xe9')](db[_0x9a80('0xbe')],{'foreignKey':'ProjectId'});db[_0x9a80('0xc6')][_0x9a80('0xe9')](db['JscriptyAnswerReport'],{'foreignKey':_0x9a80('0x1a2')});db[_0x9a80('0x111')]['belongsToMany'](db['User'],{'as':_0x9a80('0x141'),'through':'user_has_square_projects'});db[_0x9a80('0xce')][_0x9a80('0xf8')](db['User'],{'as':'Agents','through':'user_has_teams'});db[_0x9a80('0xce')][_0x9a80('0xf8')](db['VoiceQueue'],{'through':'team_has_voice_queues','as':_0x9a80('0x1a3')});db[_0x9a80('0xce')][_0x9a80('0xf8')](db[_0x9a80('0x3a')],{'through':_0x9a80('0x139'),'as':'MailQueues'});db[_0x9a80('0xce')][_0x9a80('0xf8')](db[_0x9a80('0x102')],{'through':_0x9a80('0x1a4'),'as':_0x9a80('0x1a5')});db['Team'][_0x9a80('0xf8')](db[_0x9a80('0x103')],{'through':_0x9a80('0x14d'),'as':_0x9a80('0x104')});db[_0x9a80('0xce')][_0x9a80('0xf8')](db[_0x9a80('0x52')],{'through':'team_has_sms_queues','as':'SmsQueues'});db['Team'][_0x9a80('0xf8')](db[_0x9a80('0x155')],{'through':'team_has_openchannel_queues','as':'OpenchannelQueues'});db['Campaign']['hasMany'](db['CmHopper'],{'as':_0x9a80('0x119'),'foreignKey':_0x9a80('0x169')});db[_0x9a80('0xd1')][_0x9a80('0xe9')](db[_0x9a80('0x6c')],{'as':'HopperFinals','foreignKey':_0x9a80('0x169')});db['Campaign'][_0x9a80('0xe9')](db['CmHopperHistory'],{'as':'HopperHistories','foreignKey':_0x9a80('0x169')});db[_0x9a80('0xd1')][_0x9a80('0xe9')](db[_0x9a80('0x6b')],{'as':_0x9a80('0x11b'),'foreignKey':_0x9a80('0x169')});db[_0x9a80('0xd1')]['belongsTo'](db['Trunk'],{'as':'Trunk','foreignKey':_0x9a80('0x11d')});db['Campaign'][_0x9a80('0xf4')](db[_0x9a80('0x28')],{'as':_0x9a80('0x1a6'),'foreignKey':_0x9a80('0x11e')});db['Campaign']['belongsTo'](db[_0x9a80('0x11f')],{'as':_0x9a80('0x11f'),'foreignKey':_0x9a80('0x120')});db[_0x9a80('0xd1')]['belongsTo'](db[_0x9a80('0x111')],{'as':_0x9a80('0x111'),'foreignKey':'SquareProjectId'});db[_0x9a80('0xd1')][_0x9a80('0xf8')](db[_0x9a80('0xde')],{'as':'Lists','through':_0x9a80('0x1a7')});db[_0x9a80('0xd1')]['belongsToMany'](db[_0x9a80('0xde')],{'as':_0x9a80('0x125'),'through':_0x9a80('0x1a8')});db['MailTransferReport'][_0x9a80('0xf4')](db['MailMessage'],{});db[_0x9a80('0x1a9')][_0x9a80('0xf4')](db[_0x9a80('0x3d')],{});db[_0x9a80('0x1a9')][_0x9a80('0xf4')](db[_0x9a80('0x109')],{'foreignKey':_0x9a80('0x1aa'),'as':'FromAccount'});db[_0x9a80('0x1a9')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'foreignKey':_0x9a80('0x1ab'),'as':_0x9a80('0x1ac')});db['MailTransferReport'][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'foreignKey':_0x9a80('0x1ad'),'as':_0x9a80('0x1ae')});db[_0x9a80('0x1a9')][_0x9a80('0xf4')](db[_0x9a80('0x3a')],{'foreignKey':_0x9a80('0x1af'),'as':_0x9a80('0x1b0')});db[_0x9a80('0x1a9')][_0x9a80('0xf4')](db[_0x9a80('0x109')],{'foreignKey':_0x9a80('0x1b1'),'as':_0x9a80('0x1b2')});db[_0x9a80('0xd7')]['belongsTo'](db['ChatMessage'],{});db['ChatTransferReport']['belongsTo'](db[_0x9a80('0xf0')],{});db[_0x9a80('0xd7')][_0x9a80('0xf4')](db['ChatWebsite'],{'foreignKey':_0x9a80('0x1b3'),'as':_0x9a80('0x1b4')});db[_0x9a80('0xd7')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'foreignKey':_0x9a80('0x1ab'),'as':_0x9a80('0x1ac')});db[_0x9a80('0xd7')][_0x9a80('0xf4')](db['User'],{'foreignKey':_0x9a80('0x1ad'),'as':_0x9a80('0x1ae')});db[_0x9a80('0xd7')][_0x9a80('0xf4')](db[_0x9a80('0x102')],{'foreignKey':'ToChatQueueId','as':'ToQueue'});db['ChatTransferReport']['belongsTo'](db['ChatWebsite'],{'foreignKey':_0x9a80('0x1b5'),'as':'ToAccount'});db[_0x9a80('0x1b6')]['belongsTo'](db[_0x9a80('0x49')],{});db['FaxTransferReport'][_0x9a80('0xf4')](db['FaxInteraction'],{});db[_0x9a80('0x1b6')][_0x9a80('0xf4')](db[_0x9a80('0x44')],{'foreignKey':_0x9a80('0x1b7'),'as':'FromAccount'});db[_0x9a80('0x1b6')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'foreignKey':_0x9a80('0x1ab'),'as':_0x9a80('0x1ac')});db[_0x9a80('0x1b6')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'foreignKey':_0x9a80('0x1ad'),'as':_0x9a80('0x1ae')});db[_0x9a80('0x1b6')][_0x9a80('0xf4')](db[_0x9a80('0x103')],{'foreignKey':_0x9a80('0x1b8'),'as':_0x9a80('0x1b0')});db[_0x9a80('0x1b6')]['belongsTo'](db[_0x9a80('0x44')],{'foreignKey':_0x9a80('0x1b9'),'as':_0x9a80('0x1b2')});db[_0x9a80('0xda')]['belongsTo'](db[_0x9a80('0x58')],{});db[_0x9a80('0xda')]['belongsTo'](db[_0x9a80('0x56')],{});db[_0x9a80('0xda')]['belongsTo'](db[_0x9a80('0x10c')],{'foreignKey':'FromOpenchannelAccountId','as':'FromAccount'});db['OpenchannelTransferReport'][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'foreignKey':_0x9a80('0x1ab'),'as':_0x9a80('0x1ac')});db[_0x9a80('0xda')][_0x9a80('0xf4')](db['User'],{'foreignKey':'ToUserId','as':_0x9a80('0x1ae')});db[_0x9a80('0xda')][_0x9a80('0xf4')](db[_0x9a80('0x155')],{'foreignKey':_0x9a80('0x1ba'),'as':'ToQueue'});db[_0x9a80('0xda')][_0x9a80('0xf4')](db[_0x9a80('0x10c')],{'foreignKey':_0x9a80('0x1bb'),'as':_0x9a80('0x1b2')});db[_0x9a80('0xdc')][_0x9a80('0xf4')](db[_0x9a80('0x50')],{});db[_0x9a80('0xdc')][_0x9a80('0xf4')](db[_0x9a80('0x4f')],{});db[_0x9a80('0xdc')][_0x9a80('0xf4')](db[_0x9a80('0x4c')],{'foreignKey':_0x9a80('0x1bc'),'as':_0x9a80('0x1b4')});db[_0x9a80('0xdc')][_0x9a80('0xf4')](db['User'],{'foreignKey':_0x9a80('0x1ab'),'as':_0x9a80('0x1ac')});db[_0x9a80('0xdc')][_0x9a80('0xf4')](db[_0x9a80('0xeb')],{'foreignKey':_0x9a80('0x1ad'),'as':_0x9a80('0x1ae')});db[_0x9a80('0xdc')][_0x9a80('0xf4')](db[_0x9a80('0x52')],{'foreignKey':'ToSmsQueueId','as':_0x9a80('0x1b0')});db['SmsTransferReport'][_0x9a80('0xf4')](db[_0x9a80('0x4c')],{'foreignKey':'ToSmsAccountId','as':_0x9a80('0x1b2')});db[_0x9a80('0xde')]['hasMany'](db[_0x9a80('0x130')],{'as':_0x9a80('0x131'),'foreignKey':_0x9a80('0x136')});db[_0x9a80('0xde')]['hasMany'](db[_0x9a80('0x1bd')],{'as':_0x9a80('0x1be'),'foreignKey':'ListId'});db[_0x9a80('0xde')][_0x9a80('0xe9')](db[_0x9a80('0x68')],{'as':'Contacts','onDelete':_0x9a80('0x112'),'foreignKey':_0x9a80('0x136')});db[_0x9a80('0xde')][_0x9a80('0xe9')](db[_0x9a80('0x6c')],{'as':'HopperFinals','foreignKey':_0x9a80('0x136')});db[_0x9a80('0xde')][_0x9a80('0xe9')](db[_0x9a80('0x6e')],{'as':_0x9a80('0xee'),'foreignKey':_0x9a80('0x136')});db[_0x9a80('0xde')][_0x9a80('0xe9')](db['ReportAgentPreview'],{'as':_0x9a80('0x70'),'foreignKey':_0x9a80('0x136')});db[_0x9a80('0xde')][_0x9a80('0xf8')](db['VoiceQueue'],{'as':_0x9a80('0x1bf'),'through':'voice_queues_has_cm_lists'});db[_0x9a80('0xde')][_0x9a80('0xf8')](db[_0x9a80('0xeb')],{'as':_0x9a80('0x122'),'through':_0x9a80('0xfc')});db['VoicePrefix'][_0x9a80('0xe9')](db[_0x9a80('0x17')],{'as':_0x9a80('0xec'),'onDelete':_0x9a80('0x144')});db['VoicePrefix'][_0x9a80('0xf8')](db['User'],{'as':_0x9a80('0x122'),'through':'user_has_voice_prefixes'});db['UserProfile']['hasMany'](db[_0x9a80('0xeb')],{'as':_0x9a80('0x141'),'foreignKey':'userProfileId'});db[_0x9a80('0xe2')][_0x9a80('0xe9')](db[_0x9a80('0xe4')],{'as':'UserProfileSections','foreignKey':_0x9a80('0xf5'),'onDelete':_0x9a80('0x112')});db[_0x9a80('0xe4')][_0x9a80('0xe9')](db[_0x9a80('0xe6')],{'as':_0x9a80('0x1c0'),'foreignKey':_0x9a80('0x1c1'),'onDelete':_0x9a80('0x112')});module['exports']={'db':db,'dbH':dbH};
\ No newline at end of file
index 0a0ba7d..efc62c8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x39cb=['./api/voiceQueuesLog','/api/schedules','./api/schedule','/api/sounds','/api/tags','./api/tag','/api/templates','./api/template','/api/triggers','./api/trigger','/api/variables','./api/variable','./api/integration','/api/integrations/reports','./api/integrationReport','/api/analytics/custom_reports','./api/analyticCustomReport','/api/analytics/default_reports','./api/analyticDefaultReport','/api/analytics/extracted_reports','./api/analyticExtractedReport','./api/analyticMetric','/api/analytics/field_reports','./api/analyticTreeReport','/api/integrations/salesforce/accounts','./api/intSalesforceAccount','./api/intSalesforceConfiguration','/api/integrations/salesforce/fields','./api/intSalesforceField','/api/integrations/sugarcrm/accounts','./api/intSugarcrmAccount','/api/integrations/sugarcrm/configurations','./api/intSugarcrmConfiguration','/api/integrations/sugarcrm/fields','./api/intSugarcrmField','/api/integrations/desk/accounts','./api/intDeskAccount','./api/intDeskConfiguration','/api/integrations/desk/fields','/api/integrations/zoho/configurations','./api/intZohoConfiguration','/api/integrations/zoho/fields','/api/integrations/zendesk/accounts','./api/intZendeskAccount','/api/integrations/zendesk/configurations','./api/intZendeskConfiguration','/api/integrations/zendesk/fields','./api/intZendeskField','/api/integrations/freshdesk/accounts','./api/intFreshdeskAccount','/api/integrations/freshdesk/configurations','./api/intFreshdeskConfiguration','/api/integrations/freshdesk/fields','./api/intFreshdeskField','./api/intVtigerAccount','/api/integrations/vtiger/configurations','./api/intVtigerConfiguration','/api/integrations/vtiger/fields','./api/intVtigerField','/api/integrations/servicenow/accounts','./api/intServicenowAccount','./api/intServicenowConfiguration','/api/integrations/servicenow/fields','./api/intServicenowField','/api/integrations/dynamics365/accounts','./api/intDynamics365Account','/api/integrations/dynamics365/configurations','/api/integrations/dynamics365/fields','./api/intDynamics365Field','/api/networks','./api/network','./api/chatQueueReport','/api/chat/internal/messages','./api/chatInternalMessage','/api/jscripty/answers/reports','./api/jscriptyAnswerReport','./api/jscriptyQuestionReport','/api/jscripty/sessions/reports','./api/jscriptySessionReport','/api/sms/reports/queue','./api/smsQueueReport','/api/square/reports','./api/squareReport','/api/square/details/reports','./api/squareReportDetail','/api/jscripty/projects','./api/jscriptyProject','/api/settings','./api/setting','/api/square/odbc','./api/squareOdbc','/api/square/projects','./api/squareProject','/api/square/recordings','/api/square/messages','./api/squareMessage','./api/team','/api/license','./api/license','/api/campaigns','./api/campaign','/api/migrations','./api/migration','/api/attachments','/api/plugins','./api/plugin','/api/mail/reports/transfer','./api/mailTransferReport','/api/chat/reports/transfer','./api/chatTransferReport','/api/fax/reports/transfer','./api/faxTransferReport','/api/openchannel/reports/transfer','./api/openchannelTransferReport','/api/sms/reports/transfer','./api/smsTransferReport','/api/cm/lists','./api/cmList','/api/voice/prefixes','./api/voicePrefix','/api/userProfiles','./api/userProfile','/api/userProfile/sections','./api/userProfileSection','/api/userProfile/resources','./api/userProfileResource','/api/auth/local','/api/auth/google','/api/jira','./api/jira','/api/rpc','/api/version','/api/system','./api/system','/api/pm2','./api/pm2','/apidoc','static','join','/www','root','/demo','/snippet','1.0.14','/plugins','/server/files/plugins','get','route','sendFile','resolve','appPath','express','express-winston','./errors','./config/environment','api','./config/logger','auth','default','logger','format','headers','x-forwarded-for','statusCode','responseTime','user','name','role','use','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s','body','device','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s\x20(id=%s\x20name=%s)','method','connection','remoteAddress','url','other','agent_id','agent_name','test','/api/users','/api/voice/chanspy','./api/voiceChanSpy','/api/voice/contexts','./api/voiceContext','/api/voice/extensions','./api/voiceExtension','./api/voiceMusicOnHold','./api/voiceQueue','/api/voice/recordings','./api/voiceRecording','/api/screen/recordings','./api/screenRecording','/api/voice/mails','./api/voiceMailMessage','/api/voice/calls/reports','./api/voiceCallReport','./api/voiceDialReport','./api/voiceAgentReport','/api/voice/queues/reports','./api/voiceQueueReport','/api/members/reports','./api/memberReport','/api/trunks','./api/trunk','/api/voice/transfers/reports','./api/voiceTransferReport','/api/mail/out_servers','./api/mailServerOut','/api/mail/accounts','./api/mailAccount','/api/mail/queues','./api/mailQueue','/api/mail/interactions','./api/mailInteraction','/api/mail/messages','./api/mailMessage','/api/mail/applications','./api/mailApplication','/api/mail/reports/queue','./api/mailQueueReport','/api/dashboards','/api/dashboards/items','./api/dashboardItem','/api/fax/accounts','./api/faxAccount','/api/fax/applications','./api/faxApplication','/api/fax/interactions','./api/faxInteraction','/api/fax/messages','./api/faxMessage','./api/faxQueue','/api/fax/reports/queue','./api/faxQueueReport','/api/sms/accounts','./api/smsAccount','/api/sms/applications','/api/sms/interactions','./api/smsInteraction','./api/smsMessage','/api/sms/queues','./api/smsQueue','/api/openchannel/accounts','./api/openchannelAccount','/api/openchannel/applications','./api/openchannelApplication','./api/openchannelInteraction','./api/openchannelMessage','/api/openchannel/queues','./api/openchannelQueue','/api/chat/websites','./api/chatWebsite','/api/openchannel/reports/queue','./api/openchannelQueueReport','/api/chat/applications','./api/chatApplication','/api/chat/interactions','./api/chatInteraction','/api/chat/messages','./api/chatMessage','/api/chat/offline_messages','./api/chatOfflineMessage','/api/chat/queues','./api/chatQueue','/api/chat/groups','/api/chat/proactive_actions','./api/chatProactiveAction','/api/cm/companies','./api/cmCompany','/api/cm/contacts','/api/cm/hopper','./api/cmHopper','./api/cmHopperBlack','./api/cmHopperFinal','./api/cmHopperHistory','/api/cm/custom_fields','./api/cmCustomField','/api/actions','./api/action','./api/automation','/api/canned_answers','./api/cannedAnswer','./api/disposition','/api/conditions','./api/condition','/api/intervals','./api/interval','/api/pauses','./api/pause','/api/cdr','./api/cdr','/api/voiceQueuesLog'];(function(_0x59ad1b,_0x54c7a1){var _0x34637d=function(_0x4b30e8){while(--_0x4b30e8){_0x59ad1b['push'](_0x59ad1b['shift']());}};_0x34637d(++_0x54c7a1);}(_0x39cb,0x1bd));var _0xb39c=function(_0xfae23b,_0x2be4ba){_0xfae23b=_0xfae23b-0x0;var _0x200640=_0x39cb[_0xfae23b];return _0x200640;};'use strict';var path=require('path');var express=require(_0xb39c('0x0'));var ewinston=require(_0xb39c('0x1'));var util=require('util');var errors=require(_0xb39c('0x2'));var config=require(_0xb39c('0x3'));var logger=require('./config/logger')(_0xb39c('0x4'));var authLogger=require(_0xb39c('0x5'))(_0xb39c('0x6'));exports[_0xb39c('0x7')]=function(_0x8a0b3f){_0x8a0b3f['use'](ewinston[_0xb39c('0x8')]({'winstonInstance':logger,'meta':![],'statusLevels':!![],'msg':function(_0x2fc868,_0x40112f){return util[_0xb39c('0x9')]('%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s',_0x2fc868['method'],_0x2fc868[_0xb39c('0xa')][_0xb39c('0xb')]?_0x2fc868[_0xb39c('0xa')][_0xb39c('0xb')]:_0x2fc868['connection']['remoteAddress']||_0x2fc868['ip'],_0x2fc868['url'],_0x40112f[_0xb39c('0xc')],_0x40112f[_0xb39c('0xd')],_0x2fc868[_0xb39c('0xe')]?_0x2fc868[_0xb39c('0xe')]['id']:null,_0x2fc868[_0xb39c('0xe')]?_0x2fc868[_0xb39c('0xe')][_0xb39c('0xf')]:null,_0x2fc868[_0xb39c('0xe')]?_0x2fc868['user'][_0xb39c('0x10')]:null);}}));_0x8a0b3f[_0xb39c('0x11')](ewinston[_0xb39c('0x8')]({'winstonInstance':authLogger,'meta':![],'statusLevels':!![],'msg':function(_0x5e4caf,_0xf4662a){var _0x40a6d3=_0xb39c('0x12');if(_0x5e4caf[_0xb39c('0x13')]&&_0x5e4caf[_0xb39c('0x13')][_0xb39c('0x14')]&&_0x5e4caf[_0xb39c('0x13')]['agent_id']){_0x40a6d3=_0xb39c('0x15');}return util[_0xb39c('0x9')](_0x40a6d3,_0x5e4caf[_0xb39c('0x16')],_0x5e4caf[_0xb39c('0xa')][_0xb39c('0xb')]?_0x5e4caf[_0xb39c('0xa')][_0xb39c('0xb')]:_0x5e4caf[_0xb39c('0x17')][_0xb39c('0x18')]||_0x5e4caf['ip'],_0x5e4caf[_0xb39c('0x19')],_0xf4662a['statusCode'],_0xf4662a[_0xb39c('0xd')],_0x5e4caf[_0xb39c('0xe')]?_0x5e4caf[_0xb39c('0xe')]['id']:null,_0x5e4caf[_0xb39c('0xe')]?_0x5e4caf['user'][_0xb39c('0xf')]:null,_0x5e4caf[_0xb39c('0xe')]?_0x5e4caf['user'][_0xb39c('0x10')]:null,_0x5e4caf[_0xb39c('0x13')]&&_0x5e4caf[_0xb39c('0x13')]['device']?_0x5e4caf['body'][_0xb39c('0x14')]:_0xb39c('0x1a'),_0x5e4caf[_0xb39c('0x13')]&&_0x5e4caf['body'][_0xb39c('0x1b')]?_0x5e4caf[_0xb39c('0x13')][_0xb39c('0x1b')]:'',_0x5e4caf[_0xb39c('0x13')]&&_0x5e4caf[_0xb39c('0x13')]['agent_name']?_0x5e4caf[_0xb39c('0x13')][_0xb39c('0x1c')]:'');},'ignoreRoute':function(_0x583ee5){var _0x1fd145=/\/api\/users\/[0-9]+\/(login|logout)/gi;return!_0x1fd145[_0xb39c('0x1d')](_0x583ee5[_0xb39c('0x19')]);}}));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x1e'),require('./api/user'));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x1f'),require(_0xb39c('0x20')));_0x8a0b3f['use'](_0xb39c('0x21'),require(_0xb39c('0x22')));_0x8a0b3f['use'](_0xb39c('0x23'),require(_0xb39c('0x24')));_0x8a0b3f[_0xb39c('0x11')]('/api/voice/mohs',require(_0xb39c('0x25')));_0x8a0b3f[_0xb39c('0x11')]('/api/voice/queues',require(_0xb39c('0x26')));_0x8a0b3f['use'](_0xb39c('0x27'),require(_0xb39c('0x28')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x29'),require(_0xb39c('0x2a')));_0x8a0b3f['use'](_0xb39c('0x2b'),require('./api/voiceMail'));_0x8a0b3f[_0xb39c('0x11')]('/api/voice/mails/messages',require(_0xb39c('0x2c')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x2d'),require(_0xb39c('0x2e')));_0x8a0b3f['use']('/api/voice/dials/reports',require(_0xb39c('0x2f')));_0x8a0b3f[_0xb39c('0x11')]('/api/voice/agents/reports',require(_0xb39c('0x30')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x31'),require(_0xb39c('0x32')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x33'),require(_0xb39c('0x34')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x35'),require(_0xb39c('0x36')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x37'),require(_0xb39c('0x38')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x39'),require(_0xb39c('0x3a')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x3b'),require(_0xb39c('0x3c')));_0x8a0b3f['use'](_0xb39c('0x3d'),require(_0xb39c('0x3e')));_0x8a0b3f['use']('/api/mail/substatuses',require('./api/mailSubstatus'));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x3f'),require(_0xb39c('0x40')));_0x8a0b3f['use'](_0xb39c('0x41'),require(_0xb39c('0x42')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x43'),require(_0xb39c('0x44')));_0x8a0b3f['use'](_0xb39c('0x45'),require(_0xb39c('0x46')));_0x8a0b3f['use'](_0xb39c('0x47'),require('./api/dashboard'));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x48'),require(_0xb39c('0x49')));_0x8a0b3f['use'](_0xb39c('0x4a'),require(_0xb39c('0x4b')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x4c'),require(_0xb39c('0x4d')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x4e'),require(_0xb39c('0x4f')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x50'),require(_0xb39c('0x51')));_0x8a0b3f[_0xb39c('0x11')]('/api/fax/queues',require(_0xb39c('0x52')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x53'),require(_0xb39c('0x54')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x55'),require(_0xb39c('0x56')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x57'),require('./api/smsApplication'));_0x8a0b3f['use'](_0xb39c('0x58'),require(_0xb39c('0x59')));_0x8a0b3f['use']('/api/sms/messages',require(_0xb39c('0x5a')));_0x8a0b3f['use'](_0xb39c('0x5b'),require(_0xb39c('0x5c')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x5d'),require(_0xb39c('0x5e')));_0x8a0b3f['use'](_0xb39c('0x5f'),require(_0xb39c('0x60')));_0x8a0b3f['use']('/api/openchannel/interactions',require(_0xb39c('0x61')));_0x8a0b3f['use']('/api/openchannel/messages',require(_0xb39c('0x62')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x63'),require(_0xb39c('0x64')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x65'),require(_0xb39c('0x66')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x67'),require(_0xb39c('0x68')));_0x8a0b3f['use'](_0xb39c('0x69'),require(_0xb39c('0x6a')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x6b'),require(_0xb39c('0x6c')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x6d'),require(_0xb39c('0x6e')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x6f'),require(_0xb39c('0x70')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x71'),require(_0xb39c('0x72')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x73'),require('./api/chatGroup'));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x74'),require(_0xb39c('0x75')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x76'),require(_0xb39c('0x77')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x78'),require('./api/cmContact'));_0x8a0b3f['use'](_0xb39c('0x79'),require(_0xb39c('0x7a')));_0x8a0b3f['use']('/api/cm/hopper_black',require(_0xb39c('0x7b')));_0x8a0b3f[_0xb39c('0x11')]('/api/cm/hopper_final',require(_0xb39c('0x7c')));_0x8a0b3f['use']('/api/cm/hopper_history',require(_0xb39c('0x7d')));_0x8a0b3f['use'](_0xb39c('0x7e'),require(_0xb39c('0x7f')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x80'),require(_0xb39c('0x81')));_0x8a0b3f[_0xb39c('0x11')]('/api/automations',require(_0xb39c('0x82')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x83'),require(_0xb39c('0x84')));_0x8a0b3f[_0xb39c('0x11')]('/api/dispositions',require(_0xb39c('0x85')));_0x8a0b3f['use'](_0xb39c('0x86'),require(_0xb39c('0x87')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x88'),require(_0xb39c('0x89')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x8a'),require(_0xb39c('0x8b')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x8c'),require(_0xb39c('0x8d')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x8e'),require(_0xb39c('0x8f')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x90'),require(_0xb39c('0x91')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x92'),require('./api/sound'));_0x8a0b3f['use'](_0xb39c('0x93'),require(_0xb39c('0x94')));_0x8a0b3f['use'](_0xb39c('0x95'),require(_0xb39c('0x96')));_0x8a0b3f['use'](_0xb39c('0x97'),require(_0xb39c('0x98')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x99'),require(_0xb39c('0x9a')));_0x8a0b3f[_0xb39c('0x11')]('/api/integrations',require(_0xb39c('0x9b')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x9c'),require(_0xb39c('0x9d')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x9e'),require(_0xb39c('0x9f')));_0x8a0b3f['use'](_0xb39c('0xa0'),require(_0xb39c('0xa1')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xa2'),require(_0xb39c('0xa3')));_0x8a0b3f['use']('/api/analytics/metrics',require(_0xb39c('0xa4')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xa5'),require('./api/analyticFieldReport'));_0x8a0b3f[_0xb39c('0x11')]('/api/analytics/tree_reports',require(_0xb39c('0xa6')));_0x8a0b3f['use'](_0xb39c('0xa7'),require(_0xb39c('0xa8')));_0x8a0b3f[_0xb39c('0x11')]('/api/integrations/salesforce/configurations',require(_0xb39c('0xa9')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xaa'),require(_0xb39c('0xab')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xac'),require(_0xb39c('0xad')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xae'),require(_0xb39c('0xaf')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xb0'),require(_0xb39c('0xb1')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xb2'),require(_0xb39c('0xb3')));_0x8a0b3f[_0xb39c('0x11')]('/api/integrations/desk/configurations',require(_0xb39c('0xb4')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xb5'),require('./api/intDeskField'));_0x8a0b3f[_0xb39c('0x11')]('/api/integrations/zoho/accounts',require('./api/intZohoAccount'));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xb6'),require(_0xb39c('0xb7')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xb8'),require('./api/intZohoField'));_0x8a0b3f['use'](_0xb39c('0xb9'),require(_0xb39c('0xba')));_0x8a0b3f['use'](_0xb39c('0xbb'),require(_0xb39c('0xbc')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xbd'),require(_0xb39c('0xbe')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xbf'),require(_0xb39c('0xc0')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xc1'),require(_0xb39c('0xc2')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xc3'),require(_0xb39c('0xc4')));_0x8a0b3f[_0xb39c('0x11')]('/api/integrations/vtiger/accounts',require(_0xb39c('0xc5')));_0x8a0b3f['use'](_0xb39c('0xc6'),require(_0xb39c('0xc7')));_0x8a0b3f['use'](_0xb39c('0xc8'),require(_0xb39c('0xc9')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xca'),require(_0xb39c('0xcb')));_0x8a0b3f[_0xb39c('0x11')]('/api/integrations/servicenow/configurations',require(_0xb39c('0xcc')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xcd'),require(_0xb39c('0xce')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xcf'),require(_0xb39c('0xd0')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xd1'),require('./api/intDynamics365Configuration'));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xd2'),require(_0xb39c('0xd3')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xd4'),require(_0xb39c('0xd5')));_0x8a0b3f[_0xb39c('0x11')]('/api/chat/reports/queue',require(_0xb39c('0xd6')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xd7'),require(_0xb39c('0xd8')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xd9'),require(_0xb39c('0xda')));_0x8a0b3f[_0xb39c('0x11')]('/api/jscripty/questions/reports',require(_0xb39c('0xdb')));_0x8a0b3f['use'](_0xb39c('0xdc'),require(_0xb39c('0xdd')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xde'),require(_0xb39c('0xdf')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xe0'),require(_0xb39c('0xe1')));_0x8a0b3f['use'](_0xb39c('0xe2'),require(_0xb39c('0xe3')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xe4'),require(_0xb39c('0xe5')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xe6'),require(_0xb39c('0xe7')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xe8'),require(_0xb39c('0xe9')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xea'),require(_0xb39c('0xeb')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xec'),require('./api/squareRecording'));_0x8a0b3f['use'](_0xb39c('0xed'),require(_0xb39c('0xee')));_0x8a0b3f[_0xb39c('0x11')]('/api/teams',require(_0xb39c('0xef')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xf0'),require(_0xb39c('0xf1')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xf2'),require(_0xb39c('0xf3')));_0x8a0b3f['use'](_0xb39c('0xf4'),require(_0xb39c('0xf5')));_0x8a0b3f['use'](_0xb39c('0xf6'),require('./api/attachment'));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xf7'),require(_0xb39c('0xf8')));_0x8a0b3f['use'](_0xb39c('0xf9'),require(_0xb39c('0xfa')));_0x8a0b3f['use'](_0xb39c('0xfb'),require(_0xb39c('0xfc')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xfd'),require(_0xb39c('0xfe')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0xff'),require(_0xb39c('0x100')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x101'),require(_0xb39c('0x102')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x103'),require(_0xb39c('0x104')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x105'),require(_0xb39c('0x106')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x107'),require(_0xb39c('0x108')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x109'),require(_0xb39c('0x10a')));_0x8a0b3f['use'](_0xb39c('0x10b'),require(_0xb39c('0x10c')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x10d'),require('./api/authLocal'));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x10e'),require('./api/authGoogle'));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x10f'),require(_0xb39c('0x110')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x111'),require('./api/rpc'));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x112'),require('./api/version'));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x113'),require(_0xb39c('0x114')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x115'),require(_0xb39c('0x116')));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x117'),express[_0xb39c('0x118')](path[_0xb39c('0x119')](config['root'],_0xb39c('0x117'))));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x11a'),express[_0xb39c('0x118')](path['join'](config[_0xb39c('0x11b')],_0xb39c('0x11a'))));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x11c'),express['static'](path[_0xb39c('0x119')](config[_0xb39c('0x11b')],_0xb39c('0x11c'))));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x11d'),express[_0xb39c('0x118')](path[_0xb39c('0x119')](config[_0xb39c('0x11b')],'snippet',_0xb39c('0x11e'))));_0x8a0b3f[_0xb39c('0x11')](_0xb39c('0x11f'),express[_0xb39c('0x118')](path[_0xb39c('0x119')](config[_0xb39c('0x11b')],_0xb39c('0x120'))));_0x8a0b3f['route']('/:url(api|auth|components|app|bower_components|assets)/*')[_0xb39c('0x121')](errors[0x194]);_0x8a0b3f[_0xb39c('0x122')]('/*')[_0xb39c('0x121')](function(_0x5e899a,_0x408119){_0x408119[_0xb39c('0x123')](path[_0xb39c('0x124')](_0x8a0b3f[_0xb39c('0x121')](_0xb39c('0x125'))+'/index.html'));});};
\ No newline at end of file
+var _0x515d=['remoteAddress','statusCode','responseTime','user','name','role','use','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s','body','agent_id','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s\x20(id=%s\x20name=%s)','method','url','device','agent_name','test','./api/user','/api/voice/chanspy','./api/voiceChanSpy','/api/voice/contexts','./api/voiceContext','./api/voiceExtension','/api/voice/mohs','./api/voiceMusicOnHold','/api/voice/queues','./api/voiceQueue','/api/screen/recordings','./api/screenRecording','/api/voice/mails/messages','./api/voiceMailMessage','/api/voice/calls/reports','./api/voiceDialReport','/api/voice/agents/reports','./api/voiceAgentReport','/api/voice/queues/reports','./api/voiceQueueReport','/api/members/reports','./api/memberReport','/api/trunks','./api/trunk','/api/voice/transfers/reports','/api/mail/out_servers','./api/mailServerOut','/api/mail/accounts','./api/mailAccount','/api/mail/queues','./api/mailQueue','/api/mail/substatuses','./api/mailSubstatus','/api/mail/interactions','./api/mailInteraction','./api/mailMessage','/api/mail/reports/queue','./api/mailQueueReport','/api/dashboards','/api/dashboards/items','/api/fax/accounts','./api/faxAccount','/api/fax/applications','./api/faxApplication','/api/fax/interactions','./api/faxInteraction','/api/fax/messages','./api/faxMessage','./api/faxQueue','/api/fax/reports/queue','/api/sms/accounts','./api/smsAccount','/api/sms/applications','./api/smsApplication','/api/sms/interactions','./api/smsMessage','/api/sms/queues','/api/openchannel/accounts','./api/openchannelAccount','/api/openchannel/applications','/api/openchannel/interactions','./api/openchannelInteraction','/api/openchannel/messages','./api/openchannelMessage','/api/openchannel/queues','/api/chat/websites','./api/chatWebsite','/api/openchannel/reports/queue','./api/openchannelQueueReport','/api/chat/applications','./api/chatApplication','./api/chatInteraction','/api/chat/messages','./api/chatMessage','./api/chatOfflineMessage','/api/chat/queues','./api/chatQueue','/api/chat/groups','/api/chat/proactive_actions','./api/chatProactiveAction','/api/cm/companies','/api/cm/contacts','./api/cmHopper','/api/cm/hopper_black','./api/cmHopperBlack','./api/cmHopperFinal','./api/cmHopperHistory','/api/cm/custom_fields','./api/cmCustomField','/api/actions','/api/automations','./api/automation','./api/cannedAnswer','./api/disposition','./api/condition','/api/intervals','./api/interval','/api/pauses','./api/cdr','/api/voiceQueuesLog','/api/schedules','./api/schedule','/api/sounds','./api/sound','/api/tags','./api/tag','/api/templates','./api/template','/api/triggers','./api/trigger','/api/variables','./api/variable','/api/integrations','./api/integration','/api/integrations/reports','./api/integrationReport','/api/analytics/custom_reports','./api/analyticCustomReport','/api/analytics/default_reports','./api/analyticDefaultReport','/api/analytics/extracted_reports','./api/analyticExtractedReport','/api/analytics/metrics','/api/analytics/field_reports','./api/analyticFieldReport','./api/analyticTreeReport','/api/integrations/salesforce/accounts','./api/intSalesforceAccount','/api/integrations/salesforce/configurations','./api/intSalesforceConfiguration','/api/integrations/salesforce/fields','./api/intSalesforceField','/api/integrations/sugarcrm/accounts','/api/integrations/sugarcrm/configurations','./api/intSugarcrmConfiguration','/api/integrations/sugarcrm/fields','./api/intSugarcrmField','/api/integrations/desk/accounts','./api/intDeskAccount','/api/integrations/desk/configurations','./api/intDeskConfiguration','/api/integrations/desk/fields','/api/integrations/zoho/accounts','./api/intZohoAccount','/api/integrations/zoho/configurations','./api/intZohoConfiguration','/api/integrations/zoho/fields','./api/intZohoField','/api/integrations/zendesk/accounts','/api/integrations/zendesk/configurations','/api/integrations/zendesk/fields','./api/intZendeskField','/api/integrations/freshdesk/accounts','./api/intFreshdeskAccount','./api/intFreshdeskConfiguration','/api/integrations/freshdesk/fields','./api/intFreshdeskField','/api/integrations/vtiger/accounts','./api/intVtigerAccount','/api/integrations/vtiger/configurations','./api/intVtigerConfiguration','/api/integrations/vtiger/fields','/api/integrations/servicenow/accounts','./api/intServicenowAccount','/api/integrations/servicenow/configurations','./api/intServicenowConfiguration','/api/integrations/dynamics365/configurations','./api/intDynamics365Configuration','/api/integrations/dynamics365/fields','./api/intDynamics365Field','/api/networks','./api/network','/api/chat/reports/queue','./api/chatQueueReport','/api/chat/internal/messages','./api/chatInternalMessage','/api/jscripty/answers/reports','./api/jscriptyAnswerReport','/api/jscripty/questions/reports','./api/jscriptyQuestionReport','/api/jscripty/sessions/reports','./api/jscriptySessionReport','./api/smsQueueReport','/api/square/reports','./api/squareReportDetail','/api/jscripty/projects','./api/jscriptyProject','/api/settings','./api/setting','/api/square/odbc','./api/squareOdbc','/api/square/projects','./api/squareProject','/api/square/recordings','/api/square/messages','./api/team','/api/license','./api/license','/api/campaigns','./api/campaign','/api/migrations','./api/migration','/api/attachments','./api/attachment','/api/plugins','/api/mail/reports/transfer','/api/chat/reports/transfer','./api/chatTransferReport','/api/fax/reports/transfer','./api/faxTransferReport','/api/openchannel/reports/transfer','./api/openchannelTransferReport','./api/smsTransferReport','/api/cm/lists','./api/cmList','/api/voice/prefixes','./api/voicePrefix','/api/userProfiles','./api/userProfile','./api/userProfileSection','/api/userProfile/resources','./api/authLocal','/api/auth/google','./api/authGoogle','/api/jira','./api/jira','./api/rpc','/api/version','./api/version','./api/system','/api/pm2','/apidoc','static','join','root','/www','/demo','/snippet','1.0.14','/server/files/plugins','/:url(api|auth|components|app|bower_components|assets)/*','get','route','appPath','express','express-winston','util','./errors','./config/environment','./config/logger','api','default','logger','format','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s','headers','x-forwarded-for','connection'];(function(_0x3c029a,_0x30fbba){var _0x619f33=function(_0x522b50){while(--_0x522b50){_0x3c029a['push'](_0x3c029a['shift']());}};_0x619f33(++_0x30fbba);}(_0x515d,0x104));var _0xd515=function(_0x373097,_0x1ced55){_0x373097=_0x373097-0x0;var _0x2172a9=_0x515d[_0x373097];return _0x2172a9;};'use strict';var path=require('path');var express=require(_0xd515('0x0'));var ewinston=require(_0xd515('0x1'));var util=require(_0xd515('0x2'));var errors=require(_0xd515('0x3'));var config=require(_0xd515('0x4'));var logger=require(_0xd515('0x5'))(_0xd515('0x6'));var authLogger=require(_0xd515('0x5'))('auth');exports[_0xd515('0x7')]=function(_0x544f53){_0x544f53['use'](ewinston[_0xd515('0x8')]({'winstonInstance':logger,'meta':![],'statusLevels':!![],'msg':function(_0x1130fc,_0x43d633){return util[_0xd515('0x9')](_0xd515('0xa'),_0x1130fc['method'],_0x1130fc[_0xd515('0xb')][_0xd515('0xc')]?_0x1130fc[_0xd515('0xb')][_0xd515('0xc')]:_0x1130fc[_0xd515('0xd')][_0xd515('0xe')]||_0x1130fc['ip'],_0x1130fc['url'],_0x43d633[_0xd515('0xf')],_0x43d633[_0xd515('0x10')],_0x1130fc[_0xd515('0x11')]?_0x1130fc[_0xd515('0x11')]['id']:null,_0x1130fc['user']?_0x1130fc[_0xd515('0x11')][_0xd515('0x12')]:null,_0x1130fc[_0xd515('0x11')]?_0x1130fc[_0xd515('0x11')][_0xd515('0x13')]:null);}}));_0x544f53[_0xd515('0x14')](ewinston[_0xd515('0x8')]({'winstonInstance':authLogger,'meta':![],'statusLevels':!![],'msg':function(_0x467231,_0x1f23b7){var _0x43384b=_0xd515('0x15');if(_0x467231[_0xd515('0x16')]&&_0x467231[_0xd515('0x16')]['device']&&_0x467231[_0xd515('0x16')][_0xd515('0x17')]){_0x43384b=_0xd515('0x18');}return util[_0xd515('0x9')](_0x43384b,_0x467231[_0xd515('0x19')],_0x467231[_0xd515('0xb')][_0xd515('0xc')]?_0x467231[_0xd515('0xb')][_0xd515('0xc')]:_0x467231[_0xd515('0xd')]['remoteAddress']||_0x467231['ip'],_0x467231[_0xd515('0x1a')],_0x1f23b7[_0xd515('0xf')],_0x1f23b7[_0xd515('0x10')],_0x467231[_0xd515('0x11')]?_0x467231[_0xd515('0x11')]['id']:null,_0x467231[_0xd515('0x11')]?_0x467231[_0xd515('0x11')][_0xd515('0x12')]:null,_0x467231[_0xd515('0x11')]?_0x467231['user'][_0xd515('0x13')]:null,_0x467231[_0xd515('0x16')]&&_0x467231['body'][_0xd515('0x1b')]?_0x467231[_0xd515('0x16')][_0xd515('0x1b')]:'other',_0x467231[_0xd515('0x16')]&&_0x467231[_0xd515('0x16')][_0xd515('0x17')]?_0x467231[_0xd515('0x16')]['agent_id']:'',_0x467231[_0xd515('0x16')]&&_0x467231[_0xd515('0x16')][_0xd515('0x1c')]?_0x467231[_0xd515('0x16')][_0xd515('0x1c')]:'');},'ignoreRoute':function(_0x1d8919){var _0x130533=/\/api\/users\/[0-9]+\/(login|logout)/gi;return!_0x130533[_0xd515('0x1d')](_0x1d8919[_0xd515('0x1a')]);}}));_0x544f53['use']('/api/users',require(_0xd515('0x1e')));_0x544f53[_0xd515('0x14')](_0xd515('0x1f'),require(_0xd515('0x20')));_0x544f53[_0xd515('0x14')](_0xd515('0x21'),require(_0xd515('0x22')));_0x544f53[_0xd515('0x14')]('/api/voice/extensions',require(_0xd515('0x23')));_0x544f53[_0xd515('0x14')](_0xd515('0x24'),require(_0xd515('0x25')));_0x544f53[_0xd515('0x14')](_0xd515('0x26'),require(_0xd515('0x27')));_0x544f53['use']('/api/voice/recordings',require('./api/voiceRecording'));_0x544f53[_0xd515('0x14')](_0xd515('0x28'),require(_0xd515('0x29')));_0x544f53['use']('/api/voice/mails',require('./api/voiceMail'));_0x544f53[_0xd515('0x14')](_0xd515('0x2a'),require(_0xd515('0x2b')));_0x544f53[_0xd515('0x14')](_0xd515('0x2c'),require('./api/voiceCallReport'));_0x544f53[_0xd515('0x14')]('/api/voice/dials/reports',require(_0xd515('0x2d')));_0x544f53[_0xd515('0x14')](_0xd515('0x2e'),require(_0xd515('0x2f')));_0x544f53[_0xd515('0x14')](_0xd515('0x30'),require(_0xd515('0x31')));_0x544f53['use'](_0xd515('0x32'),require(_0xd515('0x33')));_0x544f53[_0xd515('0x14')](_0xd515('0x34'),require(_0xd515('0x35')));_0x544f53['use'](_0xd515('0x36'),require('./api/voiceTransferReport'));_0x544f53[_0xd515('0x14')](_0xd515('0x37'),require(_0xd515('0x38')));_0x544f53[_0xd515('0x14')](_0xd515('0x39'),require(_0xd515('0x3a')));_0x544f53[_0xd515('0x14')](_0xd515('0x3b'),require(_0xd515('0x3c')));_0x544f53[_0xd515('0x14')](_0xd515('0x3d'),require(_0xd515('0x3e')));_0x544f53['use'](_0xd515('0x3f'),require(_0xd515('0x40')));_0x544f53[_0xd515('0x14')]('/api/mail/messages',require(_0xd515('0x41')));_0x544f53['use']('/api/mail/applications',require('./api/mailApplication'));_0x544f53['use'](_0xd515('0x42'),require(_0xd515('0x43')));_0x544f53['use'](_0xd515('0x44'),require('./api/dashboard'));_0x544f53['use'](_0xd515('0x45'),require('./api/dashboardItem'));_0x544f53['use'](_0xd515('0x46'),require(_0xd515('0x47')));_0x544f53[_0xd515('0x14')](_0xd515('0x48'),require(_0xd515('0x49')));_0x544f53[_0xd515('0x14')](_0xd515('0x4a'),require(_0xd515('0x4b')));_0x544f53['use'](_0xd515('0x4c'),require(_0xd515('0x4d')));_0x544f53[_0xd515('0x14')]('/api/fax/queues',require(_0xd515('0x4e')));_0x544f53[_0xd515('0x14')](_0xd515('0x4f'),require('./api/faxQueueReport'));_0x544f53['use'](_0xd515('0x50'),require(_0xd515('0x51')));_0x544f53[_0xd515('0x14')](_0xd515('0x52'),require(_0xd515('0x53')));_0x544f53[_0xd515('0x14')](_0xd515('0x54'),require('./api/smsInteraction'));_0x544f53['use']('/api/sms/messages',require(_0xd515('0x55')));_0x544f53[_0xd515('0x14')](_0xd515('0x56'),require('./api/smsQueue'));_0x544f53[_0xd515('0x14')](_0xd515('0x57'),require(_0xd515('0x58')));_0x544f53[_0xd515('0x14')](_0xd515('0x59'),require('./api/openchannelApplication'));_0x544f53[_0xd515('0x14')](_0xd515('0x5a'),require(_0xd515('0x5b')));_0x544f53[_0xd515('0x14')](_0xd515('0x5c'),require(_0xd515('0x5d')));_0x544f53['use'](_0xd515('0x5e'),require('./api/openchannelQueue'));_0x544f53[_0xd515('0x14')](_0xd515('0x5f'),require(_0xd515('0x60')));_0x544f53['use'](_0xd515('0x61'),require(_0xd515('0x62')));_0x544f53['use'](_0xd515('0x63'),require(_0xd515('0x64')));_0x544f53[_0xd515('0x14')]('/api/chat/interactions',require(_0xd515('0x65')));_0x544f53['use'](_0xd515('0x66'),require(_0xd515('0x67')));_0x544f53[_0xd515('0x14')]('/api/chat/offline_messages',require(_0xd515('0x68')));_0x544f53['use'](_0xd515('0x69'),require(_0xd515('0x6a')));_0x544f53[_0xd515('0x14')](_0xd515('0x6b'),require('./api/chatGroup'));_0x544f53['use'](_0xd515('0x6c'),require(_0xd515('0x6d')));_0x544f53[_0xd515('0x14')](_0xd515('0x6e'),require('./api/cmCompany'));_0x544f53['use'](_0xd515('0x6f'),require('./api/cmContact'));_0x544f53[_0xd515('0x14')]('/api/cm/hopper',require(_0xd515('0x70')));_0x544f53[_0xd515('0x14')](_0xd515('0x71'),require(_0xd515('0x72')));_0x544f53['use']('/api/cm/hopper_final',require(_0xd515('0x73')));_0x544f53[_0xd515('0x14')]('/api/cm/hopper_history',require(_0xd515('0x74')));_0x544f53[_0xd515('0x14')](_0xd515('0x75'),require(_0xd515('0x76')));_0x544f53[_0xd515('0x14')](_0xd515('0x77'),require('./api/action'));_0x544f53['use'](_0xd515('0x78'),require(_0xd515('0x79')));_0x544f53[_0xd515('0x14')]('/api/canned_answers',require(_0xd515('0x7a')));_0x544f53[_0xd515('0x14')]('/api/dispositions',require(_0xd515('0x7b')));_0x544f53[_0xd515('0x14')]('/api/conditions',require(_0xd515('0x7c')));_0x544f53[_0xd515('0x14')](_0xd515('0x7d'),require(_0xd515('0x7e')));_0x544f53[_0xd515('0x14')](_0xd515('0x7f'),require('./api/pause'));_0x544f53[_0xd515('0x14')]('/api/cdr',require(_0xd515('0x80')));_0x544f53[_0xd515('0x14')](_0xd515('0x81'),require('./api/voiceQueuesLog'));_0x544f53[_0xd515('0x14')](_0xd515('0x82'),require(_0xd515('0x83')));_0x544f53[_0xd515('0x14')](_0xd515('0x84'),require(_0xd515('0x85')));_0x544f53[_0xd515('0x14')](_0xd515('0x86'),require(_0xd515('0x87')));_0x544f53[_0xd515('0x14')](_0xd515('0x88'),require(_0xd515('0x89')));_0x544f53[_0xd515('0x14')](_0xd515('0x8a'),require(_0xd515('0x8b')));_0x544f53[_0xd515('0x14')](_0xd515('0x8c'),require(_0xd515('0x8d')));_0x544f53[_0xd515('0x14')](_0xd515('0x8e'),require(_0xd515('0x8f')));_0x544f53[_0xd515('0x14')](_0xd515('0x90'),require(_0xd515('0x91')));_0x544f53[_0xd515('0x14')](_0xd515('0x92'),require(_0xd515('0x93')));_0x544f53['use'](_0xd515('0x94'),require(_0xd515('0x95')));_0x544f53['use'](_0xd515('0x96'),require(_0xd515('0x97')));_0x544f53[_0xd515('0x14')](_0xd515('0x98'),require('./api/analyticMetric'));_0x544f53['use'](_0xd515('0x99'),require(_0xd515('0x9a')));_0x544f53[_0xd515('0x14')]('/api/analytics/tree_reports',require(_0xd515('0x9b')));_0x544f53[_0xd515('0x14')](_0xd515('0x9c'),require(_0xd515('0x9d')));_0x544f53[_0xd515('0x14')](_0xd515('0x9e'),require(_0xd515('0x9f')));_0x544f53['use'](_0xd515('0xa0'),require(_0xd515('0xa1')));_0x544f53[_0xd515('0x14')](_0xd515('0xa2'),require('./api/intSugarcrmAccount'));_0x544f53[_0xd515('0x14')](_0xd515('0xa3'),require(_0xd515('0xa4')));_0x544f53[_0xd515('0x14')](_0xd515('0xa5'),require(_0xd515('0xa6')));_0x544f53['use'](_0xd515('0xa7'),require(_0xd515('0xa8')));_0x544f53[_0xd515('0x14')](_0xd515('0xa9'),require(_0xd515('0xaa')));_0x544f53[_0xd515('0x14')](_0xd515('0xab'),require('./api/intDeskField'));_0x544f53['use'](_0xd515('0xac'),require(_0xd515('0xad')));_0x544f53['use'](_0xd515('0xae'),require(_0xd515('0xaf')));_0x544f53[_0xd515('0x14')](_0xd515('0xb0'),require(_0xd515('0xb1')));_0x544f53[_0xd515('0x14')](_0xd515('0xb2'),require('./api/intZendeskAccount'));_0x544f53[_0xd515('0x14')](_0xd515('0xb3'),require('./api/intZendeskConfiguration'));_0x544f53[_0xd515('0x14')](_0xd515('0xb4'),require(_0xd515('0xb5')));_0x544f53['use'](_0xd515('0xb6'),require(_0xd515('0xb7')));_0x544f53[_0xd515('0x14')]('/api/integrations/freshdesk/configurations',require(_0xd515('0xb8')));_0x544f53[_0xd515('0x14')](_0xd515('0xb9'),require(_0xd515('0xba')));_0x544f53[_0xd515('0x14')](_0xd515('0xbb'),require(_0xd515('0xbc')));_0x544f53['use'](_0xd515('0xbd'),require(_0xd515('0xbe')));_0x544f53['use'](_0xd515('0xbf'),require('./api/intVtigerField'));_0x544f53[_0xd515('0x14')](_0xd515('0xc0'),require(_0xd515('0xc1')));_0x544f53[_0xd515('0x14')](_0xd515('0xc2'),require(_0xd515('0xc3')));_0x544f53['use']('/api/integrations/servicenow/fields',require('./api/intServicenowField'));_0x544f53[_0xd515('0x14')]('/api/integrations/dynamics365/accounts',require('./api/intDynamics365Account'));_0x544f53[_0xd515('0x14')](_0xd515('0xc4'),require(_0xd515('0xc5')));_0x544f53[_0xd515('0x14')](_0xd515('0xc6'),require(_0xd515('0xc7')));_0x544f53[_0xd515('0x14')](_0xd515('0xc8'),require(_0xd515('0xc9')));_0x544f53['use'](_0xd515('0xca'),require(_0xd515('0xcb')));_0x544f53['use'](_0xd515('0xcc'),require(_0xd515('0xcd')));_0x544f53['use'](_0xd515('0xce'),require(_0xd515('0xcf')));_0x544f53[_0xd515('0x14')](_0xd515('0xd0'),require(_0xd515('0xd1')));_0x544f53[_0xd515('0x14')](_0xd515('0xd2'),require(_0xd515('0xd3')));_0x544f53[_0xd515('0x14')]('/api/sms/reports/queue',require(_0xd515('0xd4')));_0x544f53['use'](_0xd515('0xd5'),require('./api/squareReport'));_0x544f53['use']('/api/square/details/reports',require(_0xd515('0xd6')));_0x544f53[_0xd515('0x14')](_0xd515('0xd7'),require(_0xd515('0xd8')));_0x544f53['use'](_0xd515('0xd9'),require(_0xd515('0xda')));_0x544f53[_0xd515('0x14')](_0xd515('0xdb'),require(_0xd515('0xdc')));_0x544f53[_0xd515('0x14')](_0xd515('0xdd'),require(_0xd515('0xde')));_0x544f53[_0xd515('0x14')](_0xd515('0xdf'),require('./api/squareRecording'));_0x544f53[_0xd515('0x14')](_0xd515('0xe0'),require('./api/squareMessage'));_0x544f53[_0xd515('0x14')]('/api/teams',require(_0xd515('0xe1')));_0x544f53['use'](_0xd515('0xe2'),require(_0xd515('0xe3')));_0x544f53[_0xd515('0x14')](_0xd515('0xe4'),require(_0xd515('0xe5')));_0x544f53['use'](_0xd515('0xe6'),require(_0xd515('0xe7')));_0x544f53[_0xd515('0x14')](_0xd515('0xe8'),require(_0xd515('0xe9')));_0x544f53[_0xd515('0x14')](_0xd515('0xea'),require('./api/plugin'));_0x544f53[_0xd515('0x14')](_0xd515('0xeb'),require('./api/mailTransferReport'));_0x544f53[_0xd515('0x14')](_0xd515('0xec'),require(_0xd515('0xed')));_0x544f53[_0xd515('0x14')](_0xd515('0xee'),require(_0xd515('0xef')));_0x544f53[_0xd515('0x14')](_0xd515('0xf0'),require(_0xd515('0xf1')));_0x544f53[_0xd515('0x14')]('/api/sms/reports/transfer',require(_0xd515('0xf2')));_0x544f53[_0xd515('0x14')](_0xd515('0xf3'),require(_0xd515('0xf4')));_0x544f53['use'](_0xd515('0xf5'),require(_0xd515('0xf6')));_0x544f53[_0xd515('0x14')](_0xd515('0xf7'),require(_0xd515('0xf8')));_0x544f53[_0xd515('0x14')]('/api/userProfile/sections',require(_0xd515('0xf9')));_0x544f53[_0xd515('0x14')](_0xd515('0xfa'),require('./api/userProfileResource'));_0x544f53[_0xd515('0x14')]('/api/auth/local',require(_0xd515('0xfb')));_0x544f53[_0xd515('0x14')](_0xd515('0xfc'),require(_0xd515('0xfd')));_0x544f53['use'](_0xd515('0xfe'),require(_0xd515('0xff')));_0x544f53[_0xd515('0x14')]('/api/rpc',require(_0xd515('0x100')));_0x544f53[_0xd515('0x14')](_0xd515('0x101'),require(_0xd515('0x102')));_0x544f53[_0xd515('0x14')]('/api/system',require(_0xd515('0x103')));_0x544f53[_0xd515('0x14')](_0xd515('0x104'),require('./api/pm2'));_0x544f53['use'](_0xd515('0x105'),express[_0xd515('0x106')](path[_0xd515('0x107')](config[_0xd515('0x108')],_0xd515('0x105'))));_0x544f53['use'](_0xd515('0x109'),express['static'](path[_0xd515('0x107')](config['root'],'/www')));_0x544f53['use'](_0xd515('0x10a'),express[_0xd515('0x106')](path[_0xd515('0x107')](config['root'],'/demo')));_0x544f53[_0xd515('0x14')](_0xd515('0x10b'),express[_0xd515('0x106')](path['join'](config[_0xd515('0x108')],'snippet',_0xd515('0x10c'))));_0x544f53[_0xd515('0x14')]('/plugins',express[_0xd515('0x106')](path[_0xd515('0x107')](config[_0xd515('0x108')],_0xd515('0x10d'))));_0x544f53['route'](_0xd515('0x10e'))[_0xd515('0x10f')](errors[0x194]);_0x544f53[_0xd515('0x110')]('/*')[_0xd515('0x10f')](function(_0x7e4c4e,_0x4b9acd){_0x4b9acd['sendFile'](path['resolve'](_0x544f53[_0xd515('0x10f')](_0xd515('0x111'))+'/index.html'));});};
\ No newline at end of file
index 89c2bd9..929bd80 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf3ff=['../api/voiceExtension/voiceExtension.rpc','../api/voiceQueue/voiceQueue.rpc','../api/voiceCallReport/voiceCallReport.rpc','../api/voiceAgentReport/voiceAgentReport.rpc','../api/voiceQueueReport/voiceQueueReport.rpc','../api/memberReport/memberReport.rpc','../api/trunk/trunk.rpc','../api/voiceTransferReport/voiceTransferReport.rpc','../api/userVoiceQueueRt/userVoiceQueueRt.rpc','../api/mailServerIn/mailServerIn.rpc','../api/mailQueue/mailQueue.rpc','../api/mailInteraction/mailInteraction.rpc','../api/mailQueueReport/mailQueueReport.rpc','../api/faxMessage/faxMessage.rpc','../api/faxQueueReport/faxQueueReport.rpc','../api/smsAccount/smsAccount.rpc','../api/smsInteraction/smsInteraction.rpc','../api/smsMessage/smsMessage.rpc','../api/smsQueue/smsQueue.rpc','../api/openchannelApplication/openchannelApplication.rpc','../api/openchannelInteraction/openchannelInteraction.rpc','../api/openchannelMessage/openchannelMessage.rpc','../api/openchannelQueueReport/openchannelQueueReport.rpc','../api/chatInteraction/chatInteraction.rpc','../api/cmHopper/cmHopper.rpc','../api/cmHopperBlack/cmHopperBlack.rpc','../api/cmHopperHistory/cmHopperHistory.rpc','../api/reportAgentPreview/reportAgentPreview.rpc','../api/interval/interval.rpc','../api/pause/pause.rpc','../api/template/template.rpc','../api/trigger/trigger.rpc','../api/variable/variable.rpc','../api/intSalesforceAccount/intSalesforceAccount.rpc','../api/intSugarcrmAccount/intSugarcrmAccount.rpc','../api/intDeskAccount/intDeskAccount.rpc','../api/intZohoAccount/intZohoAccount.rpc','../api/intZendeskAccount/intZendeskAccount.rpc','../api/intFreshdeskAccount/intFreshdeskAccount.rpc','../api/intVtigerAccount/intVtigerAccount.rpc','../api/intDynamics365Account/intDynamics365Account.rpc','../api/chatQueueReport/chatQueueReport.rpc','../api/squareReport/squareReport.rpc','../api/squareOdbc/squareOdbc.rpc','../api/squareMessage/squareMessage.rpc','../api/campaign/campaign.rpc','../api/plugin/plugin.rpc','server','http','rpc','port','localhost','error','default','jayson/promise','lodash','../config/environment','listen','../api/user/user.rpc','merge'];(function(_0x345ce1,_0xfc45bd){var _0xcfe88c=function(_0x365333){while(--_0x365333){_0x345ce1['push'](_0x345ce1['shift']());}};_0xcfe88c(++_0xfc45bd);}(_0xf3ff,0xae));var _0xff3f=function(_0x56ad53,_0x5c9634){_0x56ad53=_0x56ad53-0x0;var _0x413acc=_0xf3ff[_0x56ad53];return _0x413acc;};'use strict';var jayson=require(_0xff3f('0x0'));var BPromise=require('bluebird');var _=require(_0xff3f('0x1'));var config=require(_0xff3f('0x2'));exports[_0xff3f('0x3')]=function(){return new BPromise(function(_0x3772c2,_0x16d95d){var _0x262446={};_0x262446=_['merge'](_0x262446,require(_0xff3f('0x4')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x6')));_0x262446=_['merge'](_0x262446,require(_0xff3f('0x7')));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/voiceRecording/voiceRecording.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x8')));_0x262446=_['merge'](_0x262446,require('../api/voiceDialReport/voiceDialReport.rpc'));_0x262446=_['merge'](_0x262446,require(_0xff3f('0x9')));_0x262446=_['merge'](_0x262446,require(_0xff3f('0xa')));_0x262446=_['merge'](_0x262446,require(_0xff3f('0xb')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0xc')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0xd')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0xe')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0xf')));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/mailAccount/mailAccount.rpc'));_0x262446=_['merge'](_0x262446,require(_0xff3f('0x10')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x11')));_0x262446=_['merge'](_0x262446,require('../api/mailMessage/mailMessage.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/mailApplication/mailApplication.rpc'));_0x262446=_['merge'](_0x262446,require(_0xff3f('0x12')));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/faxAccount/faxAccount.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/faxApplication/faxApplication.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/faxInteraction/faxInteraction.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x13')));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/faxQueue/faxQueue.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x14')));_0x262446=_['merge'](_0x262446,require(_0xff3f('0x15')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x16')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x17')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x18')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x19')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x1a')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x1b')));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/openchannelQueue/openchannelQueue.rpc'));_0x262446=_['merge'](_0x262446,require(_0xff3f('0x1c')));_0x262446=_['merge'](_0x262446,require(_0xff3f('0x1d')));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/chatMessage/chatMessage.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/chatQueue/chatQueue.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/cmContact/cmContact.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x1e')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x1f')));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/cmHopperFinal/cmHopperFinal.rpc'));_0x262446=_['merge'](_0x262446,require(_0xff3f('0x20')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x21')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x22')));_0x262446=_['merge'](_0x262446,require(_0xff3f('0x23')));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/sound/sound.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x24')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x25')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x26')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x27')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x28')));_0x262446=_['merge'](_0x262446,require(_0xff3f('0x29')));_0x262446=_['merge'](_0x262446,require(_0xff3f('0x2a')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x2b')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x2c')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x2d')));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/intServicenowAccount/intServicenowAccount.rpc'));_0x262446=_['merge'](_0x262446,require(_0xff3f('0x2e')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x2f')));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/smsQueueReport/smsQueueReport.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x30')));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/squareReportDetail/squareReportDetail.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x31')));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/squareProject/squareProject.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/squareRecording/squareRecording.rpc'));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x32')));_0x262446=_[_0xff3f('0x5')](_0x262446,require(_0xff3f('0x33')));_0x262446=_[_0xff3f('0x5')](_0x262446,require('../api/attachment/attachment.rpc'));_0x262446=_['merge'](_0x262446,require(_0xff3f('0x34')));var _0x48fda6=jayson[_0xff3f('0x35')](_0x262446)[_0xff3f('0x36')]();var _0x318de3=config[_0xff3f('0x37')][_0xff3f('0x38')]||config[_0xff3f('0x38')]+0x1;var _0x18f16b=config[_0xff3f('0x37')]['ip']||_0xff3f('0x39');_0x48fda6['on'](_0xff3f('0x3a'),function(_0x24d1dc){return _0x16d95d(_0x24d1dc);});_0x48fda6[_0xff3f('0x3')](_0x318de3,_0x18f16b,function(){console['log']('Express\x20RPC\x20server\x20listening\x20on\x20%s:%d!',_0x18f16b,_0x318de3);require('../config/triggers')[_0xff3f('0x3b')]();return _0x3772c2('RPC\x20listening\x20on\x20'+_0x18f16b+':'+_0x318de3);});});};
\ No newline at end of file
+var _0x50d0=['../api/squareReportDetail/squareReportDetail.rpc','../api/squareProject/squareProject.rpc','../api/squareMessage/squareMessage.rpc','../api/campaign/campaign.rpc','server','http','rpc','port','localhost','log','Express\x20RPC\x20server\x20listening\x20on\x20%s:%d!','default','RPC\x20listening\x20on\x20','jayson/promise','lodash','../config/environment','listen','merge','../api/user/user.rpc','../api/voiceExtension/voiceExtension.rpc','../api/voiceQueue/voiceQueue.rpc','../api/voiceRecording/voiceRecording.rpc','../api/voiceDialReport/voiceDialReport.rpc','../api/voiceQueueReport/voiceQueueReport.rpc','../api/trunk/trunk.rpc','../api/voiceTransferReport/voiceTransferReport.rpc','../api/userVoiceQueueRt/userVoiceQueueRt.rpc','../api/mailAccount/mailAccount.rpc','../api/mailQueue/mailQueue.rpc','../api/faxAccount/faxAccount.rpc','../api/faxApplication/faxApplication.rpc','../api/faxInteraction/faxInteraction.rpc','../api/faxMessage/faxMessage.rpc','../api/faxQueue/faxQueue.rpc','../api/faxQueueReport/faxQueueReport.rpc','../api/smsMessage/smsMessage.rpc','../api/smsQueue/smsQueue.rpc','../api/openchannelMessage/openchannelMessage.rpc','../api/openchannelQueue/openchannelQueue.rpc','../api/openchannelQueueReport/openchannelQueueReport.rpc','../api/chatInteraction/chatInteraction.rpc','../api/chatMessage/chatMessage.rpc','../api/chatQueue/chatQueue.rpc','../api/cmHopper/cmHopper.rpc','../api/cmHopperFinal/cmHopperFinal.rpc','../api/cmHopperHistory/cmHopperHistory.rpc','../api/reportAgentPreview/reportAgentPreview.rpc','../api/interval/interval.rpc','../api/pause/pause.rpc','../api/sound/sound.rpc','../api/template/template.rpc','../api/variable/variable.rpc','../api/intDeskAccount/intDeskAccount.rpc','../api/intZohoAccount/intZohoAccount.rpc','../api/intZendeskAccount/intZendeskAccount.rpc','../api/intFreshdeskAccount/intFreshdeskAccount.rpc','../api/intVtigerAccount/intVtigerAccount.rpc','../api/intServicenowAccount/intServicenowAccount.rpc','../api/chatQueueReport/chatQueueReport.rpc','../api/smsQueueReport/smsQueueReport.rpc','../api/squareReport/squareReport.rpc'];(function(_0x368fb9,_0x1a9895){var _0x4892fb=function(_0x28d735){while(--_0x28d735){_0x368fb9['push'](_0x368fb9['shift']());}};_0x4892fb(++_0x1a9895);}(_0x50d0,0x101));var _0x050d=function(_0x3728de,_0x4476b6){_0x3728de=_0x3728de-0x0;var _0x560741=_0x50d0[_0x3728de];return _0x560741;};'use strict';var jayson=require(_0x050d('0x0'));var BPromise=require('bluebird');var _=require(_0x050d('0x1'));var config=require(_0x050d('0x2'));exports[_0x050d('0x3')]=function(){return new BPromise(function(_0x3a26e2,_0x2d73d4){var _0x4d3877={};_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x5')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x6')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x7')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x8')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/voiceCallReport/voiceCallReport.rpc'));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x9')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/voiceAgentReport/voiceAgentReport.rpc'));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0xa')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/memberReport/memberReport.rpc'));_0x4d3877=_['merge'](_0x4d3877,require(_0x050d('0xb')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0xc')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0xd')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/mailServerIn/mailServerIn.rpc'));_0x4d3877=_['merge'](_0x4d3877,require(_0x050d('0xe')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0xf')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/mailInteraction/mailInteraction.rpc'));_0x4d3877=_['merge'](_0x4d3877,require('../api/mailMessage/mailMessage.rpc'));_0x4d3877=_['merge'](_0x4d3877,require('../api/mailApplication/mailApplication.rpc'));_0x4d3877=_['merge'](_0x4d3877,require('../api/mailQueueReport/mailQueueReport.rpc'));_0x4d3877=_['merge'](_0x4d3877,require(_0x050d('0x10')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x11')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x12')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x13')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x14')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x15')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/smsAccount/smsAccount.rpc'));_0x4d3877=_['merge'](_0x4d3877,require('../api/smsInteraction/smsInteraction.rpc'));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x16')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x17')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/openchannelApplication/openchannelApplication.rpc'));_0x4d3877=_['merge'](_0x4d3877,require('../api/openchannelInteraction/openchannelInteraction.rpc'));_0x4d3877=_['merge'](_0x4d3877,require(_0x050d('0x18')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x19')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x1a')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x1b')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x1c')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x1d')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/cmContact/cmContact.rpc'));_0x4d3877=_['merge'](_0x4d3877,require(_0x050d('0x1e')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/cmHopperBlack/cmHopperBlack.rpc'));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x1f')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x20')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x21')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x22')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x23')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x24')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x25')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/trigger/trigger.rpc'));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x26')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/intSalesforceAccount/intSalesforceAccount.rpc'));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/intSugarcrmAccount/intSugarcrmAccount.rpc'));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x27')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x28')));_0x4d3877=_['merge'](_0x4d3877,require(_0x050d('0x29')));_0x4d3877=_['merge'](_0x4d3877,require(_0x050d('0x2a')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x2b')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x2c')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/intDynamics365Account/intDynamics365Account.rpc'));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x2d')));_0x4d3877=_['merge'](_0x4d3877,require(_0x050d('0x2e')));_0x4d3877=_['merge'](_0x4d3877,require(_0x050d('0x2f')));_0x4d3877=_['merge'](_0x4d3877,require(_0x050d('0x30')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/squareOdbc/squareOdbc.rpc'));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x31')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/squareRecording/squareRecording.rpc'));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x32')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require(_0x050d('0x33')));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/attachment/attachment.rpc'));_0x4d3877=_[_0x050d('0x4')](_0x4d3877,require('../api/plugin/plugin.rpc'));var _0x23bacf=jayson[_0x050d('0x34')](_0x4d3877)[_0x050d('0x35')]();var _0x2ea333=config[_0x050d('0x36')][_0x050d('0x37')]||config[_0x050d('0x37')]+0x1;var _0x336b66=config[_0x050d('0x36')]['ip']||_0x050d('0x38');_0x23bacf['on']('error',function(_0x51f75a){return _0x2d73d4(_0x51f75a);});_0x23bacf[_0x050d('0x3')](_0x2ea333,_0x336b66,function(){console[_0x050d('0x39')](_0x050d('0x3a'),_0x336b66,_0x2ea333);require('../config/triggers')[_0x050d('0x3b')]();return _0x3a26e2(_0x050d('0x3c')+_0x336b66+':'+_0x2ea333);});});};
\ No newline at end of file
index 87b09fd..286733b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf5d4=['520-Invalid','520\x20End\x20of\x20proper','function','no\x20code','replace','indexOf','substr','startsWith','length','match','error','close','E_AGI_SOCKET_CLOSE','timeout','destroy','pipe','command','write','inherits','prototype','sendRequest','sync','answer','ANSWER','getData','format','noop','VERBOSE\x20\x22%s\x22','isArray','join','EXEC\x20%s\x20%s','setContext','SET\x20CONTEXT\x20%s','setExtension','SET\x20EXTENSION\x20%s','SET\x20PRIORITY\x20%s','HANGUP','setVariable','SET\x20VARIABLE\x20%s\x20\x22%s\x22','SAY\x20NUMBER\x20%s\x20%s','sayDigits','SAY\x20DIGITS\x20%s\x20%s','sayPhonetic','SAY\x20PHONETIC\x20\x22%s\x22\x20%s','continueAt','extension','setPriority','getVariable','GET\x20VARIABLE\x20\x22%s\x22','recordFile','wav','BEEP','RECORD\x20FILE\x20\x22%s\x22\x20\x22%s\x22\x20\x22%s\x22\x20%s\x20%s\x20%s','streamFile','STREAM\x20FILE\x20\x22%s\x22\x20\x22%s\x22','agi','exec','AGI','WAIT','ID:%s\x20-\x20LABEL:\x20%s\x20-\x20MSG:\x20%s','label','util','lodash','./error','call','setEncoding','utf8','headers','emit','ready','hangup','substring'];(function(_0x173909,_0x3bd449){var _0x45f1ea=function(_0x3b7228){while(--_0x3b7228){_0x173909['push'](_0x173909['shift']());}};_0x45f1ea(++_0x3bd449);}(_0xf5d4,0xcd));var _0x4f5d=function(_0x503f4b,_0x266829){_0x503f4b=_0x503f4b-0x0;var _0x32b7a7=_0xf5d4[_0x503f4b];return _0x32b7a7;};'use strict';var util=require(_0x4f5d('0x0'));var _=require(_0x4f5d('0x1'));var EventEmitter=require('events')['EventEmitter'];var AGIReply=require('./reply');var AGIError=require(_0x4f5d('0x2'));function AGIChannel(_0x11b706){var _0x291763=this,_0x1487d6=new AGIReply(),_0x28a7b7=![],_0x195e05={};EventEmitter[_0x4f5d('0x3')](_0x291763);_0x11b706[_0x4f5d('0x4')](_0x4f5d('0x5'));_0x11b706['setTimeout'](0x8*0x3c*0x3c*0x3e8);_0x1487d6[_0x4f5d('0x4')](_0x4f5d('0x5'));_0x1487d6['on'](_0x4f5d('0x6'),function(_0x3fd9c0){for(var _0x58ce5b in _0x3fd9c0){_0x291763[_0x58ce5b]=_0x3fd9c0[_0x58ce5b];}_0x291763[_0x4f5d('0x7')](_0x4f5d('0x8'));});_0x1487d6['on']('line',function(_0x148921){if(_0x148921['toLowerCase']()=='hangup'){_0x291763[_0x4f5d('0x7')](_0x4f5d('0x9'));return;}if(_0x148921[_0x4f5d('0xa')](0x0,0xb)==_0x4f5d('0xb')){_0x28a7b7=!![];}if(_0x28a7b7){_0x195e05['rx']+=_0x148921+'\x0a';if(_0x148921['search'](_0x4f5d('0xc'))!=-0x1){_0x28a7b7=![];}}else{_0x195e05['rx']=_0x148921;}if(_0x28a7b7){return;}if(typeof _0x195e05['cb']==_0x4f5d('0xd')){var _0x142a6e=_0x195e05['rx'][_0x4f5d('0xa')](0x0,0x3),_0x206095=null,_0xfe3a90=null;_0x142a6e=parseInt(_0x142a6e);if(isNaN(_0x142a6e)){_0x195e05['cb'](null,{'code':0x1f4,'result':-0x1,'extra':_0x4f5d('0xe')});return;}if(_0x142a6e!=0xc8){_0x195e05['cb'](null,{'code':_0x142a6e,'result':-0x1,'extra':'KO'});return;}_0x206095=_0x195e05['rx'][_0x4f5d('0xa')](0x4)[_0x4f5d('0xf')]('result=','');if(_0x206095[_0x4f5d('0x10')]('\x20')!=-0x1){_0x206095=_0x206095[_0x4f5d('0x11')](0x0,_0x206095[_0x4f5d('0x10')]('\x20'));}if(_[_0x4f5d('0x12')](_0x206095,'-1')){_0x206095=parseInt(_0x206095);}_0xfe3a90=_0x195e05['rx']['split']('\x20');if(_0xfe3a90[_0x4f5d('0x13')]==0x3){_0xfe3a90=_0xfe3a90[0x2][_0x4f5d('0xa')](0x1,_0xfe3a90[0x2][_0x4f5d('0x13')]-0x1);}else if(_0xfe3a90[_0x4f5d('0x13')]>0x3){var _0x5d57b6=/\((.+)\)/;var _0x46a326=_0x195e05['rx'][_0x4f5d('0x14')](_0x5d57b6);if(_0x46a326){_0xfe3a90=_0x46a326[0x1];}else{_0xfe3a90=null;}}else{_0xfe3a90=null;}_0x195e05['cb'](null,{'code':_0x142a6e,'result':_0x206095,'extra':_0xfe3a90});}});_0x11b706['on'](_0x4f5d('0x15'),function(_0xa53699){_0x291763[_0x4f5d('0x7')](_0x4f5d('0x15'),new AGIError('E_AGI_SOCKET_ERROR',_0xa53699['code']));});_0x11b706['on'](_0x4f5d('0x16'),function(){_0x291763[_0x4f5d('0x7')](_0x4f5d('0x16'),new AGIError(_0x4f5d('0x17')));});_0x11b706['on'](_0x4f5d('0x18'),function(){_0x291763[_0x4f5d('0x7')](_0x4f5d('0x18'),new AGIError('E_AGI_SOCKET_TIMEOUT'));_0x11b706[_0x4f5d('0x19')]();});_0x11b706[_0x4f5d('0x1a')](_0x1487d6);this[_0x4f5d('0x1b')]=function(_0x108ce1,_0x2ef182){var _0x108ce1=_0x108ce1||'',_0x2ef182=typeof _0x2ef182==_0x4f5d('0xd')?_0x2ef182:new Function();_0x195e05={'tx':_0x108ce1,'rx':'','cb':_0x2ef182};_0x11b706[_0x4f5d('0x1c')](_0x108ce1+'\x0a');},this[_0x4f5d('0x16')]=function(){_0x11b706[_0x4f5d('0x19')]();};}util[_0x4f5d('0x1d')](AGIChannel,EventEmitter);AGIChannel[_0x4f5d('0x1e')][_0x4f5d('0x1f')]=function(_0x5ca659){return this[_0x4f5d('0x1b')][_0x4f5d('0x20')](this,_0x5ca659);};AGIChannel[_0x4f5d('0x1e')][_0x4f5d('0x21')]=function(){return this[_0x4f5d('0x1f')](_0x4f5d('0x22'));};AGIChannel[_0x4f5d('0x1e')][_0x4f5d('0x23')]=function(_0x214277,_0x5a52e3,_0x2d7f31){_0x214277=_0x214277===undefined?'beep':_0x214277;_0x5a52e3=_0x5a52e3===undefined?'5':_0x5a52e3;_0x2d7f31=_0x2d7f31===undefined?'1':_0x2d7f31;return this[_0x4f5d('0x1f')](util[_0x4f5d('0x24')]('GET\x20DATA\x20\x22%s\x22\x20%s\x20%s',_0x214277,_0x5a52e3*0x3e8,_0x2d7f31));};AGIChannel[_0x4f5d('0x1e')][_0x4f5d('0x25')]=function(_0x4e4b11){_0x4e4b11=_0x4e4b11||'NO\x20MESSAGE';return this[_0x4f5d('0x1f')](util[_0x4f5d('0x24')](_0x4f5d('0x26'),_0x4e4b11));};AGIChannel['prototype']['exec']=function(_0x48444d,_0xd6bf57){if(_[_0x4f5d('0x27')](_0xd6bf57)){return this[_0x4f5d('0x1f')](util[_0x4f5d('0x24')]('EXEC\x20%s\x20%s',_0x48444d,_0xd6bf57[_0x4f5d('0x28')](',')));}return this[_0x4f5d('0x1f')](util[_0x4f5d('0x24')](_0x4f5d('0x29'),_0x48444d,_0xd6bf57));};AGIChannel[_0x4f5d('0x1e')][_0x4f5d('0x2a')]=function(_0x20d5df){return this[_0x4f5d('0x1f')](util[_0x4f5d('0x24')](_0x4f5d('0x2b'),_0x20d5df));};AGIChannel['prototype'][_0x4f5d('0x2c')]=function(_0x107d24){return this[_0x4f5d('0x1f')](util[_0x4f5d('0x24')](_0x4f5d('0x2d'),_0x107d24));};AGIChannel[_0x4f5d('0x1e')]['setPriority']=function(_0x367911){return this[_0x4f5d('0x1f')](util[_0x4f5d('0x24')](_0x4f5d('0x2e'),_0x367911));};AGIChannel['prototype'][_0x4f5d('0x9')]=function(){return this[_0x4f5d('0x1f')](_0x4f5d('0x2f'));};AGIChannel[_0x4f5d('0x1e')][_0x4f5d('0x30')]=function(_0x5ecad4,_0x34fee5){return this[_0x4f5d('0x1f')](util[_0x4f5d('0x24')](_0x4f5d('0x31'),_0x5ecad4,_0x34fee5?_0x34fee5['toString']()[_0x4f5d('0xf')](/(\r\n|\n|\r)/gm,'\x20'):''));};AGIChannel[_0x4f5d('0x1e')]['sayNumber']=function(_0x3b998e,_0x184704){return this[_0x4f5d('0x1f')](util['format'](_0x4f5d('0x32'),_0x3b998e,_0x184704));};AGIChannel['prototype'][_0x4f5d('0x33')]=function(_0x185526,_0x413270){return this[_0x4f5d('0x1f')](util[_0x4f5d('0x24')](_0x4f5d('0x34'),_0x185526,_0x413270));};AGIChannel[_0x4f5d('0x1e')][_0x4f5d('0x35')]=function(_0x1616a1,_0x4b2f39){return this[_0x4f5d('0x1f')](util[_0x4f5d('0x24')](_0x4f5d('0x36'),_0x1616a1,_0x4b2f39));};AGIChannel['prototype'][_0x4f5d('0x37')]=function(_0x2dd1bc,_0x5eb6fe,_0x49257b){_0x5eb6fe=_0x5eb6fe||this[_0x4f5d('0x38')];_0x49257b=_0x49257b||0x1;this[_0x4f5d('0x2a')](_0x2dd1bc);this[_0x4f5d('0x2c')](_0x5eb6fe);this[_0x4f5d('0x39')](_0x49257b);return this[_0x4f5d('0x25')](util[_0x4f5d('0x24')]('GOTO\x20%s\x20%s\x20%s',_0x2dd1bc,_0x5eb6fe,_0x49257b));};AGIChannel[_0x4f5d('0x1e')][_0x4f5d('0x3a')]=function(_0x559f4b){return this[_0x4f5d('0x1f')](util[_0x4f5d('0x24')](_0x4f5d('0x3b'),_0x559f4b));};AGIChannel[_0x4f5d('0x1e')][_0x4f5d('0x3c')]=function(_0x21a840,_0x1605d8,_0x26479e,_0x314288,_0x424d52,_0x325799){_0x1605d8=_0x1605d8||_0x4f5d('0x3d');_0x26479e=_0x26479e||'';_0x314288=_0x314288===undefined?-0x1:_0x314288==='-1'?-0x1:_0x314288*0x3e8;_0x424d52=_0x424d52===undefined?'':'s='+_0x424d52;_0x325799=_0x325799?_0x4f5d('0x3e'):'';return this[_0x4f5d('0x1f')](util[_0x4f5d('0x24')](_0x4f5d('0x3f'),_0x21a840,_0x1605d8,_0x26479e,_0x314288,_0x325799,_0x424d52));};AGIChannel[_0x4f5d('0x1e')][_0x4f5d('0x40')]=function(_0x4fd142,_0x3cc9cc){_0x3cc9cc=_0x3cc9cc||'';return this['sendRequest'](util[_0x4f5d('0x24')](_0x4f5d('0x41'),_0x4fd142,_0x3cc9cc));};AGIChannel[_0x4f5d('0x1e')][_0x4f5d('0x42')]=function(_0x18acd5){return this[_0x4f5d('0x43')](_0x4f5d('0x44'),_0x18acd5);};AGIChannel['prototype']['wait']=function(_0x61cec3){return this[_0x4f5d('0x43')](_0x4f5d('0x45'),_0x61cec3);};AGIChannel[_0x4f5d('0x1e')][_0x4f5d('0x15')]=function(_0x36fb9c,_0x1341d2){this[_0x4f5d('0x25')](util['format'](_0x4f5d('0x46'),_0x36fb9c['id'],_0x36fb9c[_0x4f5d('0x47')],_0x1341d2));return{'code':0x1f4,'result':'-1','extra':''};};module['exports']=AGIChannel;
\ No newline at end of file
+var _0x204a=['match','error','E_AGI_SOCKET_ERROR','close','E_AGI_SOCKET_CLOSE','timeout','E_AGI_SOCKET_TIMEOUT','destroy','pipe','command','write','inherits','sendRequest','sync','answer','prototype','getData','beep','format','GET\x20DATA\x20\x22%s\x22\x20%s\x20%s','noop','NO\x20MESSAGE','VERBOSE\x20\x22%s\x22','EXEC\x20%s\x20%s','SET\x20CONTEXT\x20%s','setExtension','SET\x20EXTENSION\x20%s','setPriority','SET\x20PRIORITY\x20%s','HANGUP','setVariable','replace','sayNumber','SAY\x20NUMBER\x20%s\x20%s','sayDigits','SAY\x20DIGITS\x20%s\x20%s','sayPhonetic','SAY\x20PHONETIC\x20\x22%s\x22\x20%s','continueAt','extension','setContext','getVariable','GET\x20VARIABLE\x20\x22%s\x22','recordFile','wav','BEEP','streamFile','agi','exec','AGI','wait','ID:%s\x20-\x20LABEL:\x20%s\x20-\x20MSG:\x20%s','util','lodash','events','EventEmitter','call','setEncoding','utf8','setTimeout','headers','emit','ready','line','hangup','substring','search','520\x20End\x20of\x20proper','function','no\x20code','indexOf','substr','startsWith','split','length'];(function(_0x435cc6,_0x40952d){var _0xed3a54=function(_0x2ad10d){while(--_0x2ad10d){_0x435cc6['push'](_0x435cc6['shift']());}};_0xed3a54(++_0x40952d);}(_0x204a,0x7f));var _0xa204=function(_0x326d5c,_0x4ad50d){_0x326d5c=_0x326d5c-0x0;var _0x13a48a=_0x204a[_0x326d5c];return _0x13a48a;};'use strict';var util=require(_0xa204('0x0'));var _=require(_0xa204('0x1'));var EventEmitter=require(_0xa204('0x2'))[_0xa204('0x3')];var AGIReply=require('./reply');var AGIError=require('./error');function AGIChannel(_0x35087b){var _0x47112b=this,_0x58a275=new AGIReply(),_0x47968a=![],_0x5af359={};EventEmitter[_0xa204('0x4')](_0x47112b);_0x35087b[_0xa204('0x5')](_0xa204('0x6'));_0x35087b[_0xa204('0x7')](0x8*0x3c*0x3c*0x3e8);_0x58a275[_0xa204('0x5')]('utf8');_0x58a275['on'](_0xa204('0x8'),function(_0xce2f5){for(var _0x173a36 in _0xce2f5){_0x47112b[_0x173a36]=_0xce2f5[_0x173a36];}_0x47112b[_0xa204('0x9')](_0xa204('0xa'));});_0x58a275['on'](_0xa204('0xb'),function(_0x4e8018){if(_0x4e8018['toLowerCase']()==_0xa204('0xc')){_0x47112b['emit'](_0xa204('0xc'));return;}if(_0x4e8018[_0xa204('0xd')](0x0,0xb)=='520-Invalid'){_0x47968a=!![];}if(_0x47968a){_0x5af359['rx']+=_0x4e8018+'\x0a';if(_0x4e8018[_0xa204('0xe')](_0xa204('0xf'))!=-0x1){_0x47968a=![];}}else{_0x5af359['rx']=_0x4e8018;}if(_0x47968a){return;}if(typeof _0x5af359['cb']==_0xa204('0x10')){var _0x12d278=_0x5af359['rx'][_0xa204('0xd')](0x0,0x3),_0x4844ce=null,_0x1ebac0=null;_0x12d278=parseInt(_0x12d278);if(isNaN(_0x12d278)){_0x5af359['cb'](null,{'code':0x1f4,'result':-0x1,'extra':_0xa204('0x11')});return;}if(_0x12d278!=0xc8){_0x5af359['cb'](null,{'code':_0x12d278,'result':-0x1,'extra':'KO'});return;}_0x4844ce=_0x5af359['rx'][_0xa204('0xd')](0x4)['replace']('result=','');if(_0x4844ce[_0xa204('0x12')]('\x20')!=-0x1){_0x4844ce=_0x4844ce[_0xa204('0x13')](0x0,_0x4844ce[_0xa204('0x12')]('\x20'));}if(_[_0xa204('0x14')](_0x4844ce,'-1')){_0x4844ce=parseInt(_0x4844ce);}_0x1ebac0=_0x5af359['rx'][_0xa204('0x15')]('\x20');if(_0x1ebac0[_0xa204('0x16')]==0x3){_0x1ebac0=_0x1ebac0[0x2][_0xa204('0xd')](0x1,_0x1ebac0[0x2][_0xa204('0x16')]-0x1);}else if(_0x1ebac0['length']>0x3){var _0x5eae2d=/\((.+)\)/;var _0x466b30=_0x5af359['rx'][_0xa204('0x17')](_0x5eae2d);if(_0x466b30){_0x1ebac0=_0x466b30[0x1];}else{_0x1ebac0=null;}}else{_0x1ebac0=null;}_0x5af359['cb'](null,{'code':_0x12d278,'result':_0x4844ce,'extra':_0x1ebac0});}});_0x35087b['on'](_0xa204('0x18'),function(_0x5a2798){_0x47112b[_0xa204('0x9')](_0xa204('0x18'),new AGIError(_0xa204('0x19'),_0x5a2798['code']));});_0x35087b['on']('close',function(){_0x47112b['emit'](_0xa204('0x1a'),new AGIError(_0xa204('0x1b')));});_0x35087b['on'](_0xa204('0x1c'),function(){_0x47112b[_0xa204('0x9')](_0xa204('0x1c'),new AGIError(_0xa204('0x1d')));_0x35087b[_0xa204('0x1e')]();});_0x35087b[_0xa204('0x1f')](_0x58a275);this[_0xa204('0x20')]=function(_0x21a6ab,_0x3b78c3){var _0x21a6ab=_0x21a6ab||'',_0x3b78c3=typeof _0x3b78c3==_0xa204('0x10')?_0x3b78c3:new Function();_0x5af359={'tx':_0x21a6ab,'rx':'','cb':_0x3b78c3};_0x35087b[_0xa204('0x21')](_0x21a6ab+'\x0a');},this['close']=function(){_0x35087b[_0xa204('0x1e')]();};}util[_0xa204('0x22')](AGIChannel,EventEmitter);AGIChannel['prototype'][_0xa204('0x23')]=function(_0x5ec1aa){return this[_0xa204('0x20')][_0xa204('0x24')](this,_0x5ec1aa);};AGIChannel['prototype'][_0xa204('0x25')]=function(){return this[_0xa204('0x23')]('ANSWER');};AGIChannel[_0xa204('0x26')][_0xa204('0x27')]=function(_0x46ae08,_0x537484,_0x178ed9){_0x46ae08=_0x46ae08===undefined?_0xa204('0x28'):_0x46ae08;_0x537484=_0x537484===undefined?'5':_0x537484;_0x178ed9=_0x178ed9===undefined?'1':_0x178ed9;return this[_0xa204('0x23')](util[_0xa204('0x29')](_0xa204('0x2a'),_0x46ae08,_0x537484*0x3e8,_0x178ed9));};AGIChannel[_0xa204('0x26')][_0xa204('0x2b')]=function(_0x3ba08b){_0x3ba08b=_0x3ba08b||_0xa204('0x2c');return this[_0xa204('0x23')](util[_0xa204('0x29')](_0xa204('0x2d'),_0x3ba08b));};AGIChannel[_0xa204('0x26')]['exec']=function(_0x551215,_0x5817ba){if(_['isArray'](_0x5817ba)){return this[_0xa204('0x23')](util[_0xa204('0x29')](_0xa204('0x2e'),_0x551215,_0x5817ba['join'](',')));}return this[_0xa204('0x23')](util[_0xa204('0x29')](_0xa204('0x2e'),_0x551215,_0x5817ba));};AGIChannel[_0xa204('0x26')]['setContext']=function(_0x3de58d){return this[_0xa204('0x23')](util[_0xa204('0x29')](_0xa204('0x2f'),_0x3de58d));};AGIChannel[_0xa204('0x26')][_0xa204('0x30')]=function(_0x3dcfdc){return this[_0xa204('0x23')](util[_0xa204('0x29')](_0xa204('0x31'),_0x3dcfdc));};AGIChannel['prototype'][_0xa204('0x32')]=function(_0x533dc6){return this[_0xa204('0x23')](util[_0xa204('0x29')](_0xa204('0x33'),_0x533dc6));};AGIChannel['prototype']['hangup']=function(){return this['sendRequest'](_0xa204('0x34'));};AGIChannel[_0xa204('0x26')][_0xa204('0x35')]=function(_0x324004,_0x451429){return this['sendRequest'](util['format']('SET\x20VARIABLE\x20%s\x20\x22%s\x22',_0x324004,_0x451429?_0x451429['toString']()[_0xa204('0x36')](/(\r\n|\n|\r)/gm,'\x20'):''));};AGIChannel['prototype'][_0xa204('0x37')]=function(_0x3b1529,_0xc096f6){return this[_0xa204('0x23')](util[_0xa204('0x29')](_0xa204('0x38'),_0x3b1529,_0xc096f6));};AGIChannel['prototype'][_0xa204('0x39')]=function(_0x24eee3,_0x570882){return this[_0xa204('0x23')](util[_0xa204('0x29')](_0xa204('0x3a'),_0x24eee3,_0x570882));};AGIChannel['prototype'][_0xa204('0x3b')]=function(_0x30c06d,_0x5885b1){return this['sendRequest'](util[_0xa204('0x29')](_0xa204('0x3c'),_0x30c06d,_0x5885b1));};AGIChannel[_0xa204('0x26')][_0xa204('0x3d')]=function(_0xd15ba2,_0x2629e0,_0x39a878){_0x2629e0=_0x2629e0||this[_0xa204('0x3e')];_0x39a878=_0x39a878||0x1;this[_0xa204('0x3f')](_0xd15ba2);this[_0xa204('0x30')](_0x2629e0);this[_0xa204('0x32')](_0x39a878);return this['noop'](util['format']('GOTO\x20%s\x20%s\x20%s',_0xd15ba2,_0x2629e0,_0x39a878));};AGIChannel[_0xa204('0x26')][_0xa204('0x40')]=function(_0x1f7176){return this['sendRequest'](util[_0xa204('0x29')](_0xa204('0x41'),_0x1f7176));};AGIChannel[_0xa204('0x26')][_0xa204('0x42')]=function(_0x1bcc78,_0x55ca3d,_0x3477db,_0xebb2c,_0xf07e1f,_0x25fa0d){_0x55ca3d=_0x55ca3d||_0xa204('0x43');_0x3477db=_0x3477db||'';_0xebb2c=_0xebb2c===undefined?-0x1:_0xebb2c==='-1'?-0x1:_0xebb2c*0x3e8;_0xf07e1f=_0xf07e1f===undefined?'':'s='+_0xf07e1f;_0x25fa0d=_0x25fa0d?_0xa204('0x44'):'';return this[_0xa204('0x23')](util[_0xa204('0x29')]('RECORD\x20FILE\x20\x22%s\x22\x20\x22%s\x22\x20\x22%s\x22\x20%s\x20%s\x20%s',_0x1bcc78,_0x55ca3d,_0x3477db,_0xebb2c,_0x25fa0d,_0xf07e1f));};AGIChannel[_0xa204('0x26')][_0xa204('0x45')]=function(_0x26bafd,_0x49aacc){_0x49aacc=_0x49aacc||'';return this[_0xa204('0x23')](util['format']('STREAM\x20FILE\x20\x22%s\x22\x20\x22%s\x22',_0x26bafd,_0x49aacc));};AGIChannel['prototype'][_0xa204('0x46')]=function(_0x4eb6f3){return this[_0xa204('0x47')](_0xa204('0x48'),_0x4eb6f3);};AGIChannel[_0xa204('0x26')][_0xa204('0x49')]=function(_0x4d7449){return this[_0xa204('0x47')]('WAIT',_0x4d7449);};AGIChannel['prototype']['error']=function(_0x352e0a,_0x424b0a){this['noop'](util[_0xa204('0x29')](_0xa204('0x4a'),_0x352e0a['id'],_0x352e0a['label'],_0x424b0a));return{'code':0x1f4,'result':'-1','extra':''};};module['exports']=AGIChannel;
\ No newline at end of file
index 16f389c..4972e1f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0ee1=['push','format','apply','message','name','exports','util','Undefined\x20error.','Argument\x20\x27port\x27\x20missing\x20in\x20function\x20call.','Server\x20error.\x20Code:\x20%s.','Server\x20closed.','[LICENSE]\x20Server\x20max\x20connection.\x20Count:\x20%s.','[LICENSE\x20VOICE]\x20Server\x20license\x20voice\x20disabled.','Socket\x20error.\x20Code:\x20%s.','Socket\x20closed.','Socket\x20timeout.','Missing\x20\x27ivr.agi_network_script\x27.','Missing\x20\x27ivr.entry\x27\x20menu.','E_AGI_UNDEFINED'];(function(_0x36ed48,_0x1ee0d4){var _0x51c63a=function(_0x2d0a40){while(--_0x2d0a40){_0x36ed48['push'](_0x36ed48['shift']());}};_0x51c63a(++_0x1ee0d4);}(_0x0ee1,0x1a8));var _0x10ee=function(_0x218ca4,_0x41cc40){_0x218ca4=_0x218ca4-0x0;var _0x1b3ff9=_0x0ee1[_0x218ca4];return _0x1b3ff9;};'use strict';var util=require(_0x10ee('0x0'));var error={'E_AGI_UNDEFINED':_0x10ee('0x1'),'E_AGI_ARGUMENT_PORT':_0x10ee('0x2'),'E_AGI_SERVER_ERROR':_0x10ee('0x3'),'E_AGI_SERVER_CLOSE':_0x10ee('0x4'),'E_AGI_SERVER_MAXCONNECTION':_0x10ee('0x5'),'E_AGI_SERVER_VOICE_DISABLED':_0x10ee('0x6'),'E_AGI_SOCKET_ERROR':_0x10ee('0x7'),'E_AGI_SOCKET_CLOSE':_0x10ee('0x8'),'E_AGI_SOCKET_TIMEOUT':_0x10ee('0x9'),'E_AGI_COMMAND_EMPTY':'Empty\x20command.','E_AGI_IVR_AGI_NETWORK_SCRIPT':_0x10ee('0xa'),'E_AGI_IVR_ENTRY':_0x10ee('0xb')};function AGIError(_0x41ccd6){var _0x41ccd6=_0x41ccd6||null,_0x3e9a1a=_0x3e9a1a||[],_0x5e0751=0x1,_0x568a43='';if(!error[_0x41ccd6]){_0x41ccd6=_0x10ee('0xc');}_0x3e9a1a[_0x10ee('0xd')](error[_0x41ccd6]);while(arguments[_0x5e0751]){_0x3e9a1a[_0x10ee('0xd')](arguments[_0x5e0751]);_0x5e0751++;}_0x568a43=util[_0x10ee('0xe')][_0x10ee('0xf')](util,_0x3e9a1a);this[_0x10ee('0x10')]=_0x568a43;this[_0x10ee('0x11')]=_0x41ccd6;}module[_0x10ee('0x12')]=AGIError;
\ No newline at end of file
+var _0xb259=['format','name','util','Argument\x20\x27port\x27\x20missing\x20in\x20function\x20call.','Server\x20error.\x20Code:\x20%s.','Server\x20closed.','[LICENSE]\x20Server\x20max\x20connection.\x20Count:\x20%s.','[LICENSE\x20VOICE]\x20Server\x20license\x20voice\x20disabled.','Socket\x20error.\x20Code:\x20%s.','Socket\x20closed.','Socket\x20timeout.','Missing\x20\x27ivr.agi_network_script\x27.','Missing\x20\x27ivr.entry\x27\x20menu.','E_AGI_UNDEFINED','push'];(function(_0x5e54ab,_0x4f062d){var _0x3d04b9=function(_0x5ee53e){while(--_0x5ee53e){_0x5e54ab['push'](_0x5e54ab['shift']());}};_0x3d04b9(++_0x4f062d);}(_0xb259,0xa7));var _0x9b25=function(_0x57fa33,_0x2b8222){_0x57fa33=_0x57fa33-0x0;var _0x12e724=_0xb259[_0x57fa33];return _0x12e724;};'use strict';var util=require(_0x9b25('0x0'));var error={'E_AGI_UNDEFINED':'Undefined\x20error.','E_AGI_ARGUMENT_PORT':_0x9b25('0x1'),'E_AGI_SERVER_ERROR':_0x9b25('0x2'),'E_AGI_SERVER_CLOSE':_0x9b25('0x3'),'E_AGI_SERVER_MAXCONNECTION':_0x9b25('0x4'),'E_AGI_SERVER_VOICE_DISABLED':_0x9b25('0x5'),'E_AGI_SOCKET_ERROR':_0x9b25('0x6'),'E_AGI_SOCKET_CLOSE':_0x9b25('0x7'),'E_AGI_SOCKET_TIMEOUT':_0x9b25('0x8'),'E_AGI_COMMAND_EMPTY':'Empty\x20command.','E_AGI_IVR_AGI_NETWORK_SCRIPT':_0x9b25('0x9'),'E_AGI_IVR_ENTRY':_0x9b25('0xa')};function AGIError(_0xfb3c82){var _0xfb3c82=_0xfb3c82||null,_0x5ac421=_0x5ac421||[],_0x499ff0=0x1,_0x1ec7cc='';if(!error[_0xfb3c82]){_0xfb3c82=_0x9b25('0xb');}_0x5ac421[_0x9b25('0xc')](error[_0xfb3c82]);while(arguments[_0x499ff0]){_0x5ac421[_0x9b25('0xc')](arguments[_0x499ff0]);_0x499ff0++;}_0x1ec7cc=util[_0x9b25('0xd')]['apply'](util,_0x5ac421);this['message']=_0x1ec7cc;this[_0x9b25('0xe')]=_0xfb3c82;}module['exports']=AGIError;
\ No newline at end of file
index 1a2d4ed..de3c10f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x96cc=['lodash','agi','getdigits','getsecretdigits','vertices','edges','numberOfEdges','prototype','addVertex','addEdge','push','size','getVertex','info','stop\x20traverse','length','no\x20edge/s\x20available','condition','agicommand','vswitch','target','default','menu','traverseBFS','default\x20on\x20switch\x20not\x20found','max\x20retry\x20reach','condition\x20not\x20found','exports'];(function(_0x116ca6,_0x386b54){var _0x452931=function(_0x418573){while(--_0x418573){_0x116ca6['push'](_0x116ca6['shift']());}};_0x452931(++_0x386b54);}(_0x96cc,0x16c));var _0xc96c=function(_0x313df3,_0x4fca45){_0x313df3=_0x313df3-0x0;var _0x241d59=_0x96cc[_0x313df3];return _0x241d59;};'use strict';var _=require(_0xc96c('0x0'));var logger=require('../../../config/logger')(_0xc96c('0x1'));var verticesWithRetry=['menu',_0xc96c('0x2'),_0xc96c('0x3')];var Graph=function(){this[_0xc96c('0x4')]={};this[_0xc96c('0x5')]={};this[_0xc96c('0x6')]=0x0;};Graph[_0xc96c('0x7')][_0xc96c('0x8')]=function(_0x7b632c){this[_0xc96c('0x4')][_0x7b632c['id']]=_0x7b632c;this['edges'][_0x7b632c['id']]=[];};Graph[_0xc96c('0x7')][_0xc96c('0x9')]=function(_0x408afb,_0x86c1a8,_0x13363d){this[_0xc96c('0x5')][_0x408afb][_0xc96c('0xa')]({'target':_0x86c1a8,'condition':_0x13363d});this['numberOfEdges']+=0x1;};Graph[_0xc96c('0x7')][_0xc96c('0xb')]=function(){return _[_0xc96c('0xb')](this['vertices']);};Graph[_0xc96c('0x7')]['relations']=function(){return this[_0xc96c('0x6')];};Graph['prototype'][_0xc96c('0xc')]=function(_0x32f682){return this[_0xc96c('0x4')][_0x32f682];};Graph[_0xc96c('0x7')]['traverseBFS']=function(_0x3fe3d5,_0x43fcaa){if(!this[_0xc96c('0x4')][_0x3fe3d5]){return logger[_0xc96c('0xd')]('no\x20vertex\x20found');}var _0x35da94=_0x43fcaa(this[_0xc96c('0x4')][_0x3fe3d5]);if(!_0x35da94){return logger[_0xc96c('0xd')](_0xc96c('0xe'));}if(this[_0xc96c('0x5')][_0x3fe3d5][_0xc96c('0xf')]===0x0){return logger[_0xc96c('0xd')](_0xc96c('0x10'));}for(var _0x174852=0x0,_0x4248c9=[],_0x861230=![];_0x174852<this['edges'][_0x3fe3d5]['length'];_0x174852+=0x1){if(this[_0xc96c('0x5')][_0x3fe3d5][_0x174852][_0xc96c('0x11')]){_0x4248c9=this[_0xc96c('0x5')][_0x3fe3d5][_0x174852][_0xc96c('0x11')]['split'](',');for(var _0x2c4c83=0x0;_0x2c4c83<_0x4248c9[_0xc96c('0xf')];_0x2c4c83+=0x1){if(this[_0xc96c('0x4')][_0x3fe3d5][_0xc96c('0x12')]===_0xc96c('0x13')&&_0x4248c9[_0x2c4c83]==='-'){_0x861230=this[_0xc96c('0x5')][_0x3fe3d5][_0x174852][_0xc96c('0x14')];logger[_0xc96c('0xd')](_0xc96c('0x15'),_0x4248c9[_0x2c4c83],this[_0xc96c('0x5')][_0x3fe3d5][_0x174852][_0xc96c('0x14')]);}else if(this[_0xc96c('0x4')][_0x3fe3d5][_0xc96c('0x12')]===_0xc96c('0x16')&&_0x4248c9[_0x2c4c83]==='i'){_0x861230=this[_0xc96c('0x5')][_0x3fe3d5][_0x174852][_0xc96c('0x14')];logger[_0xc96c('0xd')]('invalid',_0x4248c9[_0x2c4c83],this[_0xc96c('0x5')][_0x3fe3d5][_0x174852][_0xc96c('0x14')]);}if(_0x4248c9[_0x2c4c83]===_0x35da94){return this[_0xc96c('0x17')](this[_0xc96c('0x5')][_0x3fe3d5][_0x174852][_0xc96c('0x14')],_0x43fcaa);}}}else{return this[_0xc96c('0x17')](this[_0xc96c('0x5')][_0x3fe3d5][_0x174852][_0xc96c('0x14')],_0x43fcaa);}}if(_0x4248c9[_0xc96c('0xf')]){if(this[_0xc96c('0x4')][_0x3fe3d5]['agicommand']===_0xc96c('0x13')){if(_0x861230){return this[_0xc96c('0x17')](_0x861230,_0x43fcaa);}return logger[_0xc96c('0xd')](_0xc96c('0x18'));}else if(_['includes'](verticesWithRetry,this['vertices'][_0x3fe3d5][_0xc96c('0x12')])){if(_0x35da94==='-'){return logger[_0xc96c('0xd')](_0xc96c('0x19'));}if(_0x861230&&_0x35da94!=='t'){return this[_0xc96c('0x17')](_0x861230,_0x43fcaa);}return this[_0xc96c('0x17')](_0x3fe3d5,_0x43fcaa);}return logger[_0xc96c('0xd')](_0xc96c('0x1a'));}};module[_0xc96c('0x1b')]=Graph;
\ No newline at end of file
+var _0xea28=['getsecretdigits','vertices','edges','prototype','addVertex','addEdge','push','numberOfEdges','size','relations','traverseBFS','info','stop\x20traverse','length','no\x20edge/s\x20available','condition','split','agicommand','target','default','invalid','default\x20on\x20switch\x20not\x20found','max\x20retry\x20reach','exports','lodash','../../../config/logger','agi','menu','getdigits'];(function(_0x982de1,_0x4bc06b){var _0x5bb68f=function(_0x2b640c){while(--_0x2b640c){_0x982de1['push'](_0x982de1['shift']());}};_0x5bb68f(++_0x4bc06b);}(_0xea28,0x13a));var _0x8ea2=function(_0x4e9d6,_0x412c5c){_0x4e9d6=_0x4e9d6-0x0;var _0x285e46=_0xea28[_0x4e9d6];return _0x285e46;};'use strict';var _=require(_0x8ea2('0x0'));var logger=require(_0x8ea2('0x1'))(_0x8ea2('0x2'));var verticesWithRetry=[_0x8ea2('0x3'),_0x8ea2('0x4'),_0x8ea2('0x5')];var Graph=function(){this[_0x8ea2('0x6')]={};this[_0x8ea2('0x7')]={};this['numberOfEdges']=0x0;};Graph[_0x8ea2('0x8')][_0x8ea2('0x9')]=function(_0x1ccf12){this['vertices'][_0x1ccf12['id']]=_0x1ccf12;this[_0x8ea2('0x7')][_0x1ccf12['id']]=[];};Graph[_0x8ea2('0x8')][_0x8ea2('0xa')]=function(_0x39b1fa,_0x28b5b8,_0x929304){this[_0x8ea2('0x7')][_0x39b1fa][_0x8ea2('0xb')]({'target':_0x28b5b8,'condition':_0x929304});this[_0x8ea2('0xc')]+=0x1;};Graph[_0x8ea2('0x8')][_0x8ea2('0xd')]=function(){return _[_0x8ea2('0xd')](this['vertices']);};Graph['prototype'][_0x8ea2('0xe')]=function(){return this[_0x8ea2('0xc')];};Graph[_0x8ea2('0x8')]['getVertex']=function(_0x32b97d){return this[_0x8ea2('0x6')][_0x32b97d];};Graph[_0x8ea2('0x8')][_0x8ea2('0xf')]=function(_0xe47c0e,_0x5e662e){if(!this[_0x8ea2('0x6')][_0xe47c0e]){return logger['info']('no\x20vertex\x20found');}var _0x772bad=_0x5e662e(this[_0x8ea2('0x6')][_0xe47c0e]);if(!_0x772bad){return logger[_0x8ea2('0x10')](_0x8ea2('0x11'));}if(this[_0x8ea2('0x7')][_0xe47c0e][_0x8ea2('0x12')]===0x0){return logger[_0x8ea2('0x10')](_0x8ea2('0x13'));}for(var _0x474873=0x0,_0x396aab=[],_0x2dfa7c=![];_0x474873<this[_0x8ea2('0x7')][_0xe47c0e][_0x8ea2('0x12')];_0x474873+=0x1){if(this[_0x8ea2('0x7')][_0xe47c0e][_0x474873][_0x8ea2('0x14')]){_0x396aab=this[_0x8ea2('0x7')][_0xe47c0e][_0x474873][_0x8ea2('0x14')][_0x8ea2('0x15')](',');for(var _0x1068b6=0x0;_0x1068b6<_0x396aab[_0x8ea2('0x12')];_0x1068b6+=0x1){if(this[_0x8ea2('0x6')][_0xe47c0e][_0x8ea2('0x16')]==='vswitch'&&_0x396aab[_0x1068b6]==='-'){_0x2dfa7c=this['edges'][_0xe47c0e][_0x474873][_0x8ea2('0x17')];logger[_0x8ea2('0x10')](_0x8ea2('0x18'),_0x396aab[_0x1068b6],this['edges'][_0xe47c0e][_0x474873][_0x8ea2('0x17')]);}else if(this[_0x8ea2('0x6')][_0xe47c0e]['agicommand']===_0x8ea2('0x3')&&_0x396aab[_0x1068b6]==='i'){_0x2dfa7c=this[_0x8ea2('0x7')][_0xe47c0e][_0x474873][_0x8ea2('0x17')];logger[_0x8ea2('0x10')](_0x8ea2('0x19'),_0x396aab[_0x1068b6],this[_0x8ea2('0x7')][_0xe47c0e][_0x474873][_0x8ea2('0x17')]);}if(_0x396aab[_0x1068b6]===_0x772bad){return this[_0x8ea2('0xf')](this[_0x8ea2('0x7')][_0xe47c0e][_0x474873]['target'],_0x5e662e);}}}else{return this[_0x8ea2('0xf')](this['edges'][_0xe47c0e][_0x474873][_0x8ea2('0x17')],_0x5e662e);}}if(_0x396aab[_0x8ea2('0x12')]){if(this[_0x8ea2('0x6')][_0xe47c0e]['agicommand']==='vswitch'){if(_0x2dfa7c){return this[_0x8ea2('0xf')](_0x2dfa7c,_0x5e662e);}return logger['info'](_0x8ea2('0x1a'));}else if(_['includes'](verticesWithRetry,this[_0x8ea2('0x6')][_0xe47c0e][_0x8ea2('0x16')])){if(_0x772bad==='-'){return logger[_0x8ea2('0x10')](_0x8ea2('0x1b'));}if(_0x2dfa7c&&_0x772bad!=='t'){return this['traverseBFS'](_0x2dfa7c,_0x5e662e);}return this['traverseBFS'](_0xe47c0e,_0x5e662e);}return logger[_0x8ea2('0x10')]('condition\x20not\x20found');}};module[_0x8ea2('0x1c')]=Graph;
\ No newline at end of file
index ddc9974..ef93495 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb138=['stringify','[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','timeout','hangup','sync','production','joinAt','YYYY-MM-DD\x20HH:mm:ss','mxCell','traverseBFS','start','clear','vertex','gotoc\x20block\x20stop\x20traverse\x20BFS','context','extension','priority','response','code','result','toString','finally','[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','agicommand\x20not\x20found','[END]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','[GOTO]\x20context:\x20%s\x20extension:\x20%s\x20priority:\x20%s','continueAt','close','Project\x20%s\x20not\x20published','Project\x20%s\x20not\x20found','getLicense','voice','callysquare','[LICENSE]\x20CHANNELS:\x20%s','[LICENSE]\x20CHANNELS:\x20UNLIMITED','[LICENSE]','connection','xml2json','lodash','syncho','util','moment','../../config/environment','../../config/logger','../../config/license/util','./rpc','./mailRpc','./vertices','agi','127.0.0.1','error','Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!','port','info','format','name','message','[%s]\x20%s','[ERROR]\x20%s','stack','[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','calleridname','callerid','dnid','uniqueid','arg_1','[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','evtHangup','toJson','mxGraphModel','root','agicommand','hasOwnProperty','maxRetry','addVertex','omit','isArray','length','source','target','addEdge','getSquareProject','then','catch','substring','inspect','debug','variables'];(function(_0x21c1e4,_0x2b9051){var _0x587511=function(_0x19e61e){while(--_0x19e61e){_0x21c1e4['push'](_0x21c1e4['shift']());}};_0x587511(++_0x2b9051);}(_0xb138,0x1dd));var _0x8b13=function(_0x5c6022,_0x5cd10b){_0x5c6022=_0x5c6022-0x0;var _0x4ab5af=_0xb138[_0x5c6022];return _0x4ab5af;};'use strict';var parser=require(_0x8b13('0x0'));var _=require(_0x8b13('0x1'));var syncho=require(_0x8b13('0x2'));var util=require(_0x8b13('0x3'));var moment=require(_0x8b13('0x4'));var config=require(_0x8b13('0x5'));var logger=require(_0x8b13('0x6'))('agi');var utilLicense=require(_0x8b13('0x7'));var rpc=require(_0x8b13('0x8'));var mailRpc=require(_0x8b13('0x9'));var Graph=require('./graph');var Vertices=require(_0x8b13('0xa'));var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config[_0x8b13('0xb')]=_['defaults'](config[_0x8b13('0xb')],{'ip':_0x8b13('0xc'),'port':0x11dd});function connectionHandler(_0x22e157){process['nextTick'](function(){syncho(function(){try{setChannelVariables(_0x22e157);agiHandler(_0x22e157);}catch(_0x8570b0){logger[_0x8b13('0xd')](_0x8570b0['stack']);}});});}function listeningHandler(){console['log'](_0x8b13('0xe'),config[_0x8b13('0xb')][_0x8b13('0xf')]);logger[_0x8b13('0x10')](util[_0x8b13('0x11')]('[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d',config[_0x8b13('0xb')]['ip'],config[_0x8b13('0xb')][_0x8b13('0xf')]));}function errorHandler(_0x3f79d5){if(_0x3f79d5&&_0x3f79d5[_0x8b13('0x12')]&&_0x3f79d5[_0x8b13('0x13')]){logger['error'](util['format'](_0x8b13('0x14'),_0x3f79d5[_0x8b13('0x12')],_0x3f79d5['message']));}else{logger['error'](util['format'](_0x8b13('0x15'),_0x3f79d5[_0x8b13('0x16')]));}}function closeHandler(){logger[_0x8b13('0x10')](util[_0x8b13('0x11')](_0x8b13('0x17'),this['arg_1'],this[_0x8b13('0x18')],this[_0x8b13('0x19')],this[_0x8b13('0x1a')],this[_0x8b13('0x1b')]));try{createSquareReport(this);}catch(_0x3eed21){logger[_0x8b13('0xd')](_0x3eed21[_0x8b13('0x16')]);}}function timeoutHandler(){logger[_0x8b13('0x10')](util['format']('[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this[_0x8b13('0x1c')],this[_0x8b13('0x18')],this[_0x8b13('0x19')],this[_0x8b13('0x1a')],this[_0x8b13('0x1b')]));}function hangupHandler(){logger[_0x8b13('0x10')](util['format'](_0x8b13('0x1d'),this[_0x8b13('0x1c')],this[_0x8b13('0x18')],this['callerid'],this['dnid'],this[_0x8b13('0x1b')]));this[_0x8b13('0x1e')]=!![];}function getRoot(_0x4f9902){return parser[_0x8b13('0x1f')](_0x4f9902,{'object':!![]})[_0x8b13('0x20')][_0x8b13('0x21')];}function addVertex(_0x213280,_0xc05d5c,_0x583639){_0xc05d5c[_0x8b13('0x22')]=_0x583639;if(_0xc05d5c[_0x8b13('0x23')]('retry')){_0xc05d5c[_0x8b13('0x24')]=parseInt(_0xc05d5c['retry'],0xa);}_0x213280[_0x8b13('0x25')](_[_0x8b13('0x26')](_0xc05d5c,'mxCell'));}function initGraph(_0x3f1756,_0x3223d8){var _0x4f8e58=new Graph();for(var _0x134c5e in _0x3f1756){if(_0x3f1756[_0x8b13('0x23')](_0x134c5e)){if(_[_0x8b13('0x27')](_0x3f1756[_0x134c5e])){for(var _0x4048e4=0x0;_0x4048e4<_0x3f1756[_0x134c5e][_0x8b13('0x28')];_0x4048e4+=0x1){addVertex(_0x4f8e58,_0x3f1756[_0x134c5e][_0x4048e4],_0x134c5e);}}else{addVertex(_0x4f8e58,_0x3f1756[_0x134c5e],_0x134c5e);}}}for(var _0x54cdfc=0x0;_0x54cdfc<_0x3223d8[_0x8b13('0x28')];_0x54cdfc+=0x1){if(_0x3223d8[_0x54cdfc][_0x8b13('0x29')]&&_0x3223d8[_0x54cdfc][_0x8b13('0x2a')]){_0x4f8e58[_0x8b13('0x2b')](_0x3223d8[_0x54cdfc][_0x8b13('0x29')],_0x3223d8[_0x54cdfc][_0x8b13('0x2a')],_0x3223d8[_0x54cdfc]['value']);}}return _0x4f8e58;}function getSquareProject(_0x35fdca,_0xfec033){rpc[_0x8b13('0x2c')](_0x35fdca)[_0x8b13('0x2d')](function(_0x23fde7){_0xfec033(null,_0x23fde7);})[_0x8b13('0x2e')](function(_0x3304bd){_0xfec033(null,_0x3304bd);});}function createSquareReport(_0x44bce2,_0x36f732){rpc['createSquareReport'](_0x44bce2)[_0x8b13('0x2d')](function(_0x193965){if(_0x36f732){_0x36f732(null,_0x193965);}})[_0x8b13('0x2e')](function(_0x2878a6){if(_0x36f732){_0x36f732(null,_0x2878a6);}});}function setChannelVariables(_0x51a334){for(var _0x4f7d91 in _0x51a334){if(_0x51a334[_0x8b13('0x23')](_0x4f7d91)){if(_0x4f7d91['indexOf']('agi_')===0x0){_0x51a334[_0x4f7d91[_0x8b13('0x2f')](0x4)]=_0x51a334[_0x4f7d91];delete _0x51a334[_0x4f7d91];}}}}function getLogFromObject(_0x535521){return util[_0x8b13('0x30')](_0x535521,{'showHidden':![],'depth':null});}function agiHandler(_0x408626){var _0x40fc29,_0x39a3d2,_0x11657e,_0x669416,_0x1fcd82;logger[_0x8b13('0x31')](_0x8b13('0x32'),JSON[_0x8b13('0x33')](_0x408626,null,0x2));logger['info'](util[_0x8b13('0x11')](_0x8b13('0x34'),_0x408626[_0x8b13('0x1c')],_0x408626[_0x8b13('0x18')],_0x408626[_0x8b13('0x19')],_0x408626[_0x8b13('0x1a')],_0x408626[_0x8b13('0x1b')]));_0x408626['on'](_0x8b13('0xd'),errorHandler);_0x408626['on']('close',closeHandler);_0x408626['on'](_0x8b13('0x35'),timeoutHandler);_0x408626['evtHangup']=![];_0x408626['on'](_0x8b13('0x36'),hangupHandler);var _0x37732c=getSquareProject[_0x8b13('0x37')](null,_0x408626[_0x8b13('0x1c')]);if(_0x37732c){if(_0x37732c[_0x8b13('0x38')]){_0x40fc29=getRoot(_0x37732c[_0x8b13('0x38')]);if(_0x40fc29&&_0x40fc29['start']){logger['debug'](_0x8b13('0x21'),JSON['stringify'](_0x40fc29,null,0x2));_0x408626[_0x8b13('0x39')]=moment()['format'](_0x8b13('0x3a'));_0x39a3d2=initGraph(_[_0x8b13('0x26')](_0x40fc29,_0x8b13('0x3b')),_0x40fc29[_0x8b13('0x3b')]);_0x11657e=new Vertices(_0x408626,rpc,mailRpc);logger[_0x8b13('0x10')](util['format']('[START\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',_0x408626[_0x8b13('0x1c')],_0x408626['calleridname'],_0x408626[_0x8b13('0x19')],_0x408626[_0x8b13('0x1a')],_0x408626['uniqueid']));_0x39a3d2[_0x8b13('0x3c')](_0x40fc29[_0x8b13('0x3d')]['id'],function(_0x35c1d6){try{_0x35c1d6=_0x11657e[_0x8b13('0x3e')](_0x35c1d6);logger[_0x8b13('0x31')](_0x8b13('0x3f'),JSON[_0x8b13('0x33')](_0x35c1d6,null,0x2));if(_0x35c1d6['agicommand']==='gotoc'){logger['info'](_0x8b13('0x40'));_0x408626[_0x8b13('0x41')]=_0x35c1d6[_0x8b13('0x41')]||_0x408626[_0x8b13('0x41')];_0x408626[_0x8b13('0x42')]=_0x35c1d6[_0x8b13('0x42')];_0x408626['priority']=_0x35c1d6[_0x8b13('0x43')]?_0x35c1d6['priority']-0x1:0x1;return null;}else if(_0x35c1d6&&_0x11657e[_0x35c1d6[_0x8b13('0x22')]]){_0x1fcd82=_0x11657e[_0x35c1d6['agicommand']](_0x35c1d6);logger[_0x8b13('0x10')](_0x8b13('0x44'),JSON[_0x8b13('0x33')](_0x1fcd82,null,0x2));if(_0x1fcd82&&_0x1fcd82[_0x8b13('0x45')]===AGI_CODE_SUCCESS&&_0x1fcd82[_0x8b13('0x46')]!==AGI_RESULT_ERROR&&!_0x408626[_0x8b13('0x1e')]){logger[_0x8b13('0x31')]('response',getLogFromObject(_0x1fcd82));return _['isUndefined'](_0x1fcd82['result'])?null:_0x1fcd82[_0x8b13('0x46')][_0x8b13('0x47')]();}else{logger[_0x8b13('0xd')](_0x8b13('0x44'),getLogFromObject(_0x1fcd82));return null;}}else{logger['error']('agicommand\x20not\x20found');return null;}}catch(_0x3f420d){logger['error'](_0x3f420d[_0x8b13('0x16')]);return null;}});if(_0x40fc29[_0x8b13('0x48')]){logger[_0x8b13('0x10')](util[_0x8b13('0x11')](_0x8b13('0x49'),_0x408626['arg_1'],_0x408626[_0x8b13('0x18')],_0x408626[_0x8b13('0x19')],_0x408626[_0x8b13('0x1a')],_0x408626[_0x8b13('0x1b')]));_0x39a3d2[_0x8b13('0x3c')](_0x40fc29[_0x8b13('0x48')]['id'],function(_0xf6dc93){try{_0xf6dc93=_0x11657e[_0x8b13('0x3e')](_0xf6dc93);logger[_0x8b13('0x31')]('vertex',JSON[_0x8b13('0x33')](_0xf6dc93,null,0x2));if(_0xf6dc93&&_0x11657e[_0xf6dc93['agicommand']]){_0x1fcd82=_0x11657e[_0xf6dc93[_0x8b13('0x22')]](_0xf6dc93);if(_0x1fcd82){logger[_0x8b13('0x31')](_0x8b13('0x44'),getLogFromObject(_0x1fcd82));return _['isUndefined'](_0x1fcd82[_0x8b13('0x46')])?null:_0x1fcd82[_0x8b13('0x46')][_0x8b13('0x47')]();}else{logger[_0x8b13('0xd')](_0x8b13('0x44'),getLogFromObject(_0x1fcd82));return null;}}else{logger[_0x8b13('0xd')](_0x8b13('0x4a'));return null;}}catch(_0x534636){logger[_0x8b13('0xd')](_0x534636['stack']);return null;}});}logger[_0x8b13('0x10')](util[_0x8b13('0x11')](_0x8b13('0x4b'),_0x408626[_0x8b13('0x1c')],_0x408626[_0x8b13('0x18')],_0x408626[_0x8b13('0x19')],_0x408626[_0x8b13('0x1a')],_0x408626[_0x8b13('0x1b')]));logger[_0x8b13('0x10')](util[_0x8b13('0x11')](_0x8b13('0x4c'),_0x408626[_0x8b13('0x41')],_0x408626[_0x8b13('0x42')],parseInt(_0x408626[_0x8b13('0x43')],0xa)+0x1));_0x408626[_0x8b13('0x4d')](_0x408626[_0x8b13('0x41')],_0x408626[_0x8b13('0x42')],parseInt(_0x408626['priority'],0xa)+0x1);_0x408626[_0x8b13('0x4e')]();}}else{logger[_0x8b13('0xd')](util['format'](_0x8b13('0x4f'),_0x408626[_0x8b13('0x1c')]));_0x408626[_0x8b13('0x4d')](_0x408626[_0x8b13('0x41')],_0x408626[_0x8b13('0x42')],parseInt(_0x408626[_0x8b13('0x43')],0xa)+0x1);_0x408626[_0x8b13('0x4e')]();}}else{logger[_0x8b13('0xd')](util[_0x8b13('0x11')](_0x8b13('0x50'),_0x408626[_0x8b13('0x1c')]));_0x408626[_0x8b13('0x4d')](_0x408626[_0x8b13('0x41')],_0x408626[_0x8b13('0x42')],parseInt(_0x408626[_0x8b13('0x43')],0xa)+0x1);_0x408626['close']();}}function main(){var _0x1e0b0b;return utilLicense[_0x8b13('0x51')]()['then'](function(_0x11e8af){if(_0x11e8af){if(_0x11e8af[_0x8b13('0x52')]){if(_0x11e8af[_0x8b13('0x53')]&&_0x11e8af[_0x8b13('0x53')]>0x0){logger[_0x8b13('0x10')](util['format'](_0x8b13('0x54'),_0x11e8af[_0x8b13('0x53')]));_0x1e0b0b=_0x11e8af[_0x8b13('0x53')];}else{logger['info'](_0x8b13('0x55'));}}else{logger[_0x8b13('0x10')]('[LICENSE]\x20VOICE\x20IS\x20DISABLED');_0x1e0b0b=-0x1;}}})[_0x8b13('0x2e')](function(_0x348c11){logger[_0x8b13('0xd')](_0x8b13('0x56'),_0x348c11['stack']);})[_0x8b13('0x48')](function(){var _0x28d568=require('./server')(config[_0x8b13('0xb')][_0x8b13('0xf')],config[_0x8b13('0xb')]['ip'],_0x1e0b0b);_0x28d568['on'](_0x8b13('0xd'),errorHandler);_0x28d568['on']('listening',listeningHandler);_0x28d568['on'](_0x8b13('0x57'),connectionHandler);_0x28d568['on'](_0x8b13('0x4e'),closeHandler);});}main();
\ No newline at end of file
+var _0xee14=['hasOwnProperty','retry','maxRetry','omit','mxCell','isArray','length','target','source','value','then','catch','createSquareReport','substring','inspect','debug','variables','stringify','[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','hangup','sync','production','start','root','joinAt','[START\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','traverseBFS','clear','vertex','gotoc','gotoc\x20block\x20stop\x20traverse\x20BFS','context','extension','priority','response','result','toString','finally','[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','agicommand\x20not\x20found','[END]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','[GOTO]\x20context:\x20%s\x20extension:\x20%s\x20priority:\x20%s','continueAt','close','Project\x20%s\x20not\x20published','Project\x20%s\x20not\x20found','getLicense','voice','[LICENSE]\x20CHANNELS:\x20%s','callysquare','[LICENSE]\x20CHANNELS:\x20UNLIMITED','[LICENSE]\x20VOICE\x20IS\x20DISABLED','listening','syncho','util','moment','../../config/environment','../../config/logger','agi','../../config/license/util','./rpc','./mailRpc','./vertices','defaults','127.0.0.1','nextTick','stack','log','port','info','format','name','message','[%s]\x20%s','error','[ERROR]\x20%s','[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','arg_1','calleridname','callerid','dnid','uniqueid','[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','evtHangup','toJson','mxGraphModel','agicommand'];(function(_0x35f7f5,_0x4e2ee1){var _0x5567a4=function(_0x3e5df0){while(--_0x3e5df0){_0x35f7f5['push'](_0x35f7f5['shift']());}};_0x5567a4(++_0x4e2ee1);}(_0xee14,0x13a));var _0x4ee1=function(_0x489cb5,_0x8f811){_0x489cb5=_0x489cb5-0x0;var _0x550cd1=_0xee14[_0x489cb5];return _0x550cd1;};'use strict';var parser=require('xml2json');var _=require('lodash');var syncho=require(_0x4ee1('0x0'));var util=require(_0x4ee1('0x1'));var moment=require(_0x4ee1('0x2'));var config=require(_0x4ee1('0x3'));var logger=require(_0x4ee1('0x4'))(_0x4ee1('0x5'));var utilLicense=require(_0x4ee1('0x6'));var rpc=require(_0x4ee1('0x7'));var mailRpc=require(_0x4ee1('0x8'));var Graph=require('./graph');var Vertices=require(_0x4ee1('0x9'));var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config['agi']=_[_0x4ee1('0xa')](config[_0x4ee1('0x5')],{'ip':_0x4ee1('0xb'),'port':0x11dd});function connectionHandler(_0x293d5f){process[_0x4ee1('0xc')](function(){syncho(function(){try{setChannelVariables(_0x293d5f);agiHandler(_0x293d5f);}catch(_0x1fd8c8){logger['error'](_0x1fd8c8[_0x4ee1('0xd')]);}});});}function listeningHandler(){console[_0x4ee1('0xe')]('Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!',config[_0x4ee1('0x5')][_0x4ee1('0xf')]);logger[_0x4ee1('0x10')](util[_0x4ee1('0x11')]('[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d',config[_0x4ee1('0x5')]['ip'],config[_0x4ee1('0x5')][_0x4ee1('0xf')]));}function errorHandler(_0x2d5d3c){if(_0x2d5d3c&&_0x2d5d3c[_0x4ee1('0x12')]&&_0x2d5d3c[_0x4ee1('0x13')]){logger['error'](util[_0x4ee1('0x11')](_0x4ee1('0x14'),_0x2d5d3c[_0x4ee1('0x12')],_0x2d5d3c[_0x4ee1('0x13')]));}else{logger[_0x4ee1('0x15')](util[_0x4ee1('0x11')](_0x4ee1('0x16'),_0x2d5d3c[_0x4ee1('0xd')]));}}function closeHandler(){logger[_0x4ee1('0x10')](util['format'](_0x4ee1('0x17'),this[_0x4ee1('0x18')],this[_0x4ee1('0x19')],this[_0x4ee1('0x1a')],this[_0x4ee1('0x1b')],this[_0x4ee1('0x1c')]));try{createSquareReport(this);}catch(_0x2eff91){logger[_0x4ee1('0x15')](_0x2eff91[_0x4ee1('0xd')]);}}function timeoutHandler(){logger[_0x4ee1('0x10')](util[_0x4ee1('0x11')]('[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this[_0x4ee1('0x18')],this[_0x4ee1('0x19')],this[_0x4ee1('0x1a')],this[_0x4ee1('0x1b')],this[_0x4ee1('0x1c')]));}function hangupHandler(){logger[_0x4ee1('0x10')](util['format'](_0x4ee1('0x1d'),this[_0x4ee1('0x18')],this[_0x4ee1('0x19')],this[_0x4ee1('0x1a')],this[_0x4ee1('0x1b')],this[_0x4ee1('0x1c')]));this[_0x4ee1('0x1e')]=!![];}function getRoot(_0x40fd98){return parser[_0x4ee1('0x1f')](_0x40fd98,{'object':!![]})[_0x4ee1('0x20')]['root'];}function addVertex(_0x53d43f,_0x14110c,_0x459e2e){_0x14110c[_0x4ee1('0x21')]=_0x459e2e;if(_0x14110c[_0x4ee1('0x22')](_0x4ee1('0x23'))){_0x14110c[_0x4ee1('0x24')]=parseInt(_0x14110c['retry'],0xa);}_0x53d43f['addVertex'](_[_0x4ee1('0x25')](_0x14110c,_0x4ee1('0x26')));}function initGraph(_0x4d39dd,_0x35900d){var _0x213db8=new Graph();for(var _0x36654c in _0x4d39dd){if(_0x4d39dd[_0x4ee1('0x22')](_0x36654c)){if(_[_0x4ee1('0x27')](_0x4d39dd[_0x36654c])){for(var _0x3c7b2a=0x0;_0x3c7b2a<_0x4d39dd[_0x36654c][_0x4ee1('0x28')];_0x3c7b2a+=0x1){addVertex(_0x213db8,_0x4d39dd[_0x36654c][_0x3c7b2a],_0x36654c);}}else{addVertex(_0x213db8,_0x4d39dd[_0x36654c],_0x36654c);}}}for(var _0x56c4d3=0x0;_0x56c4d3<_0x35900d[_0x4ee1('0x28')];_0x56c4d3+=0x1){if(_0x35900d[_0x56c4d3]['source']&&_0x35900d[_0x56c4d3][_0x4ee1('0x29')]){_0x213db8['addEdge'](_0x35900d[_0x56c4d3][_0x4ee1('0x2a')],_0x35900d[_0x56c4d3][_0x4ee1('0x29')],_0x35900d[_0x56c4d3][_0x4ee1('0x2b')]);}}return _0x213db8;}function getSquareProject(_0x13944c,_0x19ba11){rpc['getSquareProject'](_0x13944c)[_0x4ee1('0x2c')](function(_0x5b3792){_0x19ba11(null,_0x5b3792);})[_0x4ee1('0x2d')](function(_0x3d5e6c){_0x19ba11(null,_0x3d5e6c);});}function createSquareReport(_0x33fd38,_0x37bc2e){rpc[_0x4ee1('0x2e')](_0x33fd38)['then'](function(_0xf66ab2){if(_0x37bc2e){_0x37bc2e(null,_0xf66ab2);}})[_0x4ee1('0x2d')](function(_0x422ba8){if(_0x37bc2e){_0x37bc2e(null,_0x422ba8);}});}function setChannelVariables(_0x2e37a3){for(var _0x79f87c in _0x2e37a3){if(_0x2e37a3[_0x4ee1('0x22')](_0x79f87c)){if(_0x79f87c['indexOf']('agi_')===0x0){_0x2e37a3[_0x79f87c[_0x4ee1('0x2f')](0x4)]=_0x2e37a3[_0x79f87c];delete _0x2e37a3[_0x79f87c];}}}}function getLogFromObject(_0x54482b){return util[_0x4ee1('0x30')](_0x54482b,{'showHidden':![],'depth':null});}function agiHandler(_0x5a2f6f){var _0x963c2b,_0x3a57bf,_0x264aed,_0x346e87,_0x9f882d;logger[_0x4ee1('0x31')](_0x4ee1('0x32'),JSON[_0x4ee1('0x33')](_0x5a2f6f,null,0x2));logger[_0x4ee1('0x10')](util[_0x4ee1('0x11')](_0x4ee1('0x34'),_0x5a2f6f[_0x4ee1('0x18')],_0x5a2f6f[_0x4ee1('0x19')],_0x5a2f6f['callerid'],_0x5a2f6f[_0x4ee1('0x1b')],_0x5a2f6f[_0x4ee1('0x1c')]));_0x5a2f6f['on'](_0x4ee1('0x15'),errorHandler);_0x5a2f6f['on']('close',closeHandler);_0x5a2f6f['on']('timeout',timeoutHandler);_0x5a2f6f[_0x4ee1('0x1e')]=![];_0x5a2f6f['on'](_0x4ee1('0x35'),hangupHandler);var _0x74e6e2=getSquareProject[_0x4ee1('0x36')](null,_0x5a2f6f['arg_1']);if(_0x74e6e2){if(_0x74e6e2[_0x4ee1('0x37')]){_0x963c2b=getRoot(_0x74e6e2[_0x4ee1('0x37')]);if(_0x963c2b&&_0x963c2b[_0x4ee1('0x38')]){logger[_0x4ee1('0x31')](_0x4ee1('0x39'),JSON[_0x4ee1('0x33')](_0x963c2b,null,0x2));_0x5a2f6f[_0x4ee1('0x3a')]=moment()[_0x4ee1('0x11')]('YYYY-MM-DD\x20HH:mm:ss');_0x3a57bf=initGraph(_[_0x4ee1('0x25')](_0x963c2b,_0x4ee1('0x26')),_0x963c2b[_0x4ee1('0x26')]);_0x264aed=new Vertices(_0x5a2f6f,rpc,mailRpc);logger[_0x4ee1('0x10')](util[_0x4ee1('0x11')](_0x4ee1('0x3b'),_0x5a2f6f['arg_1'],_0x5a2f6f[_0x4ee1('0x19')],_0x5a2f6f[_0x4ee1('0x1a')],_0x5a2f6f[_0x4ee1('0x1b')],_0x5a2f6f[_0x4ee1('0x1c')]));_0x3a57bf[_0x4ee1('0x3c')](_0x963c2b[_0x4ee1('0x38')]['id'],function(_0x3f0d8b){try{_0x3f0d8b=_0x264aed[_0x4ee1('0x3d')](_0x3f0d8b);logger[_0x4ee1('0x31')](_0x4ee1('0x3e'),JSON[_0x4ee1('0x33')](_0x3f0d8b,null,0x2));if(_0x3f0d8b[_0x4ee1('0x21')]===_0x4ee1('0x3f')){logger['info'](_0x4ee1('0x40'));_0x5a2f6f[_0x4ee1('0x41')]=_0x3f0d8b['context']||_0x5a2f6f[_0x4ee1('0x41')];_0x5a2f6f['extension']=_0x3f0d8b[_0x4ee1('0x42')];_0x5a2f6f['priority']=_0x3f0d8b[_0x4ee1('0x43')]?_0x3f0d8b[_0x4ee1('0x43')]-0x1:0x1;return null;}else if(_0x3f0d8b&&_0x264aed[_0x3f0d8b['agicommand']]){_0x9f882d=_0x264aed[_0x3f0d8b[_0x4ee1('0x21')]](_0x3f0d8b);logger[_0x4ee1('0x10')](_0x4ee1('0x44'),JSON[_0x4ee1('0x33')](_0x9f882d,null,0x2));if(_0x9f882d&&_0x9f882d['code']===AGI_CODE_SUCCESS&&_0x9f882d[_0x4ee1('0x45')]!==AGI_RESULT_ERROR&&!_0x5a2f6f[_0x4ee1('0x1e')]){logger[_0x4ee1('0x31')]('response',getLogFromObject(_0x9f882d));return _['isUndefined'](_0x9f882d[_0x4ee1('0x45')])?null:_0x9f882d[_0x4ee1('0x45')][_0x4ee1('0x46')]();}else{logger[_0x4ee1('0x15')](_0x4ee1('0x44'),getLogFromObject(_0x9f882d));return null;}}else{logger['error']('agicommand\x20not\x20found');return null;}}catch(_0xaa71d5){logger[_0x4ee1('0x15')](_0xaa71d5[_0x4ee1('0xd')]);return null;}});if(_0x963c2b[_0x4ee1('0x47')]){logger['info'](util[_0x4ee1('0x11')](_0x4ee1('0x48'),_0x5a2f6f['arg_1'],_0x5a2f6f[_0x4ee1('0x19')],_0x5a2f6f[_0x4ee1('0x1a')],_0x5a2f6f[_0x4ee1('0x1b')],_0x5a2f6f[_0x4ee1('0x1c')]));_0x3a57bf[_0x4ee1('0x3c')](_0x963c2b[_0x4ee1('0x47')]['id'],function(_0x1800e7){try{_0x1800e7=_0x264aed[_0x4ee1('0x3d')](_0x1800e7);logger[_0x4ee1('0x31')]('vertex',JSON['stringify'](_0x1800e7,null,0x2));if(_0x1800e7&&_0x264aed[_0x1800e7[_0x4ee1('0x21')]]){_0x9f882d=_0x264aed[_0x1800e7[_0x4ee1('0x21')]](_0x1800e7);if(_0x9f882d){logger[_0x4ee1('0x31')](_0x4ee1('0x44'),getLogFromObject(_0x9f882d));return _['isUndefined'](_0x9f882d[_0x4ee1('0x45')])?null:_0x9f882d[_0x4ee1('0x45')][_0x4ee1('0x46')]();}else{logger[_0x4ee1('0x15')](_0x4ee1('0x44'),getLogFromObject(_0x9f882d));return null;}}else{logger['error'](_0x4ee1('0x49'));return null;}}catch(_0x4ae560){logger[_0x4ee1('0x15')](_0x4ae560['stack']);return null;}});}logger[_0x4ee1('0x10')](util['format'](_0x4ee1('0x4a'),_0x5a2f6f['arg_1'],_0x5a2f6f[_0x4ee1('0x19')],_0x5a2f6f['callerid'],_0x5a2f6f[_0x4ee1('0x1b')],_0x5a2f6f['uniqueid']));logger[_0x4ee1('0x10')](util[_0x4ee1('0x11')](_0x4ee1('0x4b'),_0x5a2f6f['context'],_0x5a2f6f[_0x4ee1('0x42')],parseInt(_0x5a2f6f[_0x4ee1('0x43')],0xa)+0x1));_0x5a2f6f[_0x4ee1('0x4c')](_0x5a2f6f[_0x4ee1('0x41')],_0x5a2f6f[_0x4ee1('0x42')],parseInt(_0x5a2f6f[_0x4ee1('0x43')],0xa)+0x1);_0x5a2f6f[_0x4ee1('0x4d')]();}}else{logger['error'](util['format'](_0x4ee1('0x4e'),_0x5a2f6f[_0x4ee1('0x18')]));_0x5a2f6f[_0x4ee1('0x4c')](_0x5a2f6f[_0x4ee1('0x41')],_0x5a2f6f[_0x4ee1('0x42')],parseInt(_0x5a2f6f[_0x4ee1('0x43')],0xa)+0x1);_0x5a2f6f[_0x4ee1('0x4d')]();}}else{logger[_0x4ee1('0x15')](util[_0x4ee1('0x11')](_0x4ee1('0x4f'),_0x5a2f6f[_0x4ee1('0x18')]));_0x5a2f6f[_0x4ee1('0x4c')](_0x5a2f6f[_0x4ee1('0x41')],_0x5a2f6f['extension'],parseInt(_0x5a2f6f[_0x4ee1('0x43')],0xa)+0x1);_0x5a2f6f['close']();}}function main(){var _0x147224;return utilLicense[_0x4ee1('0x50')]()['then'](function(_0x1e0aac){if(_0x1e0aac){if(_0x1e0aac[_0x4ee1('0x51')]){if(_0x1e0aac['callysquare']&&_0x1e0aac['callysquare']>0x0){logger[_0x4ee1('0x10')](util['format'](_0x4ee1('0x52'),_0x1e0aac[_0x4ee1('0x53')]));_0x147224=_0x1e0aac['callysquare'];}else{logger[_0x4ee1('0x10')](_0x4ee1('0x54'));}}else{logger[_0x4ee1('0x10')](_0x4ee1('0x55'));_0x147224=-0x1;}}})[_0x4ee1('0x2d')](function(_0x433b9c){logger[_0x4ee1('0x15')]('[LICENSE]',_0x433b9c['stack']);})[_0x4ee1('0x47')](function(){var _0x39f7ff=require('./server')(config[_0x4ee1('0x5')][_0x4ee1('0xf')],config[_0x4ee1('0x5')]['ip'],_0x147224);_0x39f7ff['on']('error',errorHandler);_0x39f7ff['on'](_0x4ee1('0x56'),listeningHandler);_0x39f7ff['on']('connection',connectionHandler);_0x39f7ff['on'](_0x4ee1('0x4d'),closeHandler);});}main();
\ No newline at end of file
index 72f3458..fc650b4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['result','catch','sendMailMessage','SendMail','bluebird','jayson/promise','client','http','request','error','message'];(function(_0x1d739b,_0x4f05b9){var _0x43c466=function(_0x4f2925){while(--_0x4f2925){_0x1d739b['push'](_0x1d739b['shift']());}};_0x43c466(++_0x4f05b9);}(_0x9957,0x93));var _0x7995=function(_0x1facfa,_0x1acf7d){_0x1facfa=_0x1facfa-0x0;var _0x9ec701=_0x9957[_0x1facfa];return _0x9ec701;};'use strict';var BPromise=require(_0x7995('0x0'));var jayson=require(_0x7995('0x1'));var client=jayson[_0x7995('0x2')][_0x7995('0x3')]({'port':0x232b});function request(_0x5b96eb,_0x86c128){return new BPromise(function(_0x3c58eb,_0x1902b4){return client[_0x7995('0x4')](_0x5b96eb,_0x86c128)['then'](function(_0x744bea){if(_0x744bea[_0x7995('0x5')]){return _0x1902b4(_0x744bea[_0x7995('0x5')][_0x7995('0x6')]);}else{return _0x3c58eb(_0x744bea[_0x7995('0x7')]);}})[_0x7995('0x8')](function(_0x4996ca){return _0x1902b4(_0x4996ca);});});}exports[_0x7995('0x9')]=function(_0x1cad37,_0x4a64f7){return request(_0x7995('0xa'),{'account':_0x1cad37,'message':_0x4a64f7});};
\ No newline at end of file
+var _0x814b=['bluebird','jayson/promise','client','http','request','then','error','result','catch','sendMailMessage','SendMail'];(function(_0x49d282,_0x4065c7){var _0x3a323d=function(_0x562073){while(--_0x562073){_0x49d282['push'](_0x49d282['shift']());}};_0x3a323d(++_0x4065c7);}(_0x814b,0x1a2));var _0xb814=function(_0x1aeda2,_0x1217eb){_0x1aeda2=_0x1aeda2-0x0;var _0x32dc6d=_0x814b[_0x1aeda2];return _0x32dc6d;};'use strict';var BPromise=require(_0xb814('0x0'));var jayson=require(_0xb814('0x1'));var client=jayson[_0xb814('0x2')][_0xb814('0x3')]({'port':0x232b});function request(_0xfbb64b,_0x477725){return new BPromise(function(_0x4a98af,_0x38c21a){return client[_0xb814('0x4')](_0xfbb64b,_0x477725)[_0xb814('0x5')](function(_0x4237bc){if(_0x4237bc[_0xb814('0x6')]){return _0x38c21a(_0x4237bc[_0xb814('0x6')]['message']);}else{return _0x4a98af(_0x4237bc[_0xb814('0x7')]);}})[_0xb814('0x8')](function(_0x5c8539){return _0x38c21a(_0x5c8539);});});}exports[_0xb814('0x9')]=function(_0x2913a6,_0x186d5a){return request(_0xb814('0xa'),{'account':_0x2913a6,'message':_0x186d5a});};
\ No newline at end of file
index fb68d81..f785d39 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f2f=['exports','util','stream','Transform','call','_localBuffer','_inBody','inherits','\x0d\x0a\x0d\x0a','toString','substring','length','split','slice','trim','headers','indexOf','emit','line'];(function(_0x4e4d5c,_0x25dd3a){var _0x56854a=function(_0x221d35){while(--_0x221d35){_0x4e4d5c['push'](_0x4e4d5c['shift']());}};_0x56854a(++_0x25dd3a);}(_0x5f2f,0x73));var _0xf5f2=function(_0x41100e,_0x1b5122){_0x41100e=_0x41100e-0x0;var _0x57dd1b=_0x5f2f[_0x41100e];return _0x57dd1b;};'use strict';var util=require(_0xf5f2('0x0'));var Transform=require(_0xf5f2('0x1'))[_0xf5f2('0x2')];function AGIReply(_0x1a7be1){Transform[_0xf5f2('0x3')](this,_0x1a7be1);this[_0xf5f2('0x4')]='';this[_0xf5f2('0x5')]=![];}util[_0xf5f2('0x6')](AGIReply,Transform);AGIReply['prototype']['_transform']=function(_0x1665c7,_0x192215,_0xad7f65){var _0x3eebf6='\x0a',_0x3133bc=['\x0a\x0a',_0xf5f2('0x7')],_0x473100=-0x1,_0x5907aa=-0x1,_0x466882='',_0x46cd9c=0x0,_0x2ec345='',_0x56a69f='';this[_0xf5f2('0x4')]+=_0x1665c7[_0xf5f2('0x8')]();_0x2ec345=this['_localBuffer'];if(!this[_0xf5f2('0x5')]){_0x46cd9c=0x0;while(_0x3133bc[_0x46cd9c]){while((_0x5907aa=_0x2ec345['indexOf'](_0x3133bc[_0x46cd9c]))!=-0x1){_0x466882=_0x3133bc[_0x46cd9c];_0x56a69f=_0x2ec345['substring'](0x0,_0x5907aa);_0x2ec345=_0x2ec345[_0xf5f2('0x9')](_0x5907aa+_0x466882[_0xf5f2('0xa')]);var _0x4b78cd=_0x56a69f[_0xf5f2('0xb')](_0x3eebf6),_0x336f6b=0x0,_0x14b51f={},_0x331482='',_0x3f2997='',_0x59bb6c=-0x1;while(_0x4b78cd[_0x336f6b]){_0x59bb6c=_0x4b78cd[_0x336f6b]['indexOf'](':');if(_0x59bb6c!=-0x1){_0x331482=_0x4b78cd[_0x336f6b][_0xf5f2('0xc')](0x0,_0x59bb6c)[_0xf5f2('0xd')]();_0x3f2997=_0x4b78cd[_0x336f6b][_0xf5f2('0xc')](_0x59bb6c+0x1)[_0xf5f2('0xd')]();if(_0x331482[_0xf5f2('0xa')]>0x0){_0x14b51f[_0x331482]=_0x3f2997;}}else{}_0x336f6b++;}this['emit'](_0xf5f2('0xe'),_0x14b51f);this[_0xf5f2('0x5')]=!![];}_0x46cd9c++;}this[_0xf5f2('0x4')]=_0x2ec345;}else{while((_0x473100=_0x2ec345[_0xf5f2('0xf')](_0x3eebf6))!=-0x1){_0x56a69f=_0x2ec345[_0xf5f2('0x9')](0x0,_0x473100);this[_0xf5f2('0x10')](_0xf5f2('0x11'),_0x56a69f);_0x2ec345=_0x2ec345[_0xf5f2('0x9')](_0x473100+_0x3eebf6[_0xf5f2('0xa')]);}this[_0xf5f2('0x4')]=_0x2ec345;}_0xad7f65();};module[_0xf5f2('0x12')]=AGIReply;
\ No newline at end of file
+var _0xb10b=['call','_inBody','inherits','prototype','_transform','\x0d\x0a\x0d\x0a','_localBuffer','toString','indexOf','substring','split','trim','slice','length','emit','headers','line','exports','util','Transform'];(function(_0x3be0c4,_0x5b7eff){var _0x11af9f=function(_0x3f5113){while(--_0x3f5113){_0x3be0c4['push'](_0x3be0c4['shift']());}};_0x11af9f(++_0x5b7eff);}(_0xb10b,0x12a));var _0xbb10=function(_0xb729d2,_0x131a0e){_0xb729d2=_0xb729d2-0x0;var _0x181500=_0xb10b[_0xb729d2];return _0x181500;};'use strict';var util=require(_0xbb10('0x0'));var Transform=require('stream')[_0xbb10('0x1')];function AGIReply(_0x35bc5f){Transform[_0xbb10('0x2')](this,_0x35bc5f);this['_localBuffer']='';this[_0xbb10('0x3')]=![];}util[_0xbb10('0x4')](AGIReply,Transform);AGIReply[_0xbb10('0x5')][_0xbb10('0x6')]=function(_0x49baf4,_0x312b72,_0x481979){var _0x328583='\x0a',_0x3cdd53=['\x0a\x0a',_0xbb10('0x7')],_0x513741=-0x1,_0x1b9e94=-0x1,_0x3fb675='',_0x21370f=0x0,_0x1c3ee5='',_0x2353ef='';this[_0xbb10('0x8')]+=_0x49baf4[_0xbb10('0x9')]();_0x1c3ee5=this['_localBuffer'];if(!this['_inBody']){_0x21370f=0x0;while(_0x3cdd53[_0x21370f]){while((_0x1b9e94=_0x1c3ee5[_0xbb10('0xa')](_0x3cdd53[_0x21370f]))!=-0x1){_0x3fb675=_0x3cdd53[_0x21370f];_0x2353ef=_0x1c3ee5[_0xbb10('0xb')](0x0,_0x1b9e94);_0x1c3ee5=_0x1c3ee5[_0xbb10('0xb')](_0x1b9e94+_0x3fb675['length']);var _0x408248=_0x2353ef[_0xbb10('0xc')](_0x328583),_0x5be7e0=0x0,_0x44fb19={},_0x916a32='',_0x285009='',_0x193a27=-0x1;while(_0x408248[_0x5be7e0]){_0x193a27=_0x408248[_0x5be7e0][_0xbb10('0xa')](':');if(_0x193a27!=-0x1){_0x916a32=_0x408248[_0x5be7e0]['slice'](0x0,_0x193a27)[_0xbb10('0xd')]();_0x285009=_0x408248[_0x5be7e0][_0xbb10('0xe')](_0x193a27+0x1)[_0xbb10('0xd')]();if(_0x916a32[_0xbb10('0xf')]>0x0){_0x44fb19[_0x916a32]=_0x285009;}}else{}_0x5be7e0++;}this[_0xbb10('0x10')](_0xbb10('0x11'),_0x44fb19);this[_0xbb10('0x3')]=!![];}_0x21370f++;}this[_0xbb10('0x8')]=_0x1c3ee5;}else{while((_0x513741=_0x1c3ee5[_0xbb10('0xa')](_0x328583))!=-0x1){_0x2353ef=_0x1c3ee5[_0xbb10('0xb')](0x0,_0x513741);this['emit'](_0xbb10('0x12'),_0x2353ef);_0x1c3ee5=_0x1c3ee5[_0xbb10('0xb')](_0x513741+_0x328583[_0xbb10('0xf')]);}this[_0xbb10('0x8')]=_0x1c3ee5;}_0x481979();};module[_0xbb10('0x13')]=AGIReply;
\ No newline at end of file
index ed2d064..7d5ac71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5b3c=['format','YYYY-MM-DD\x20HH:mm:ss','createSquareMessage','CreateSquareMessage','createCmContact','phone','ListId','then','CreateCmContact','getPauseById','ShowPause','LoginUser','agentPause','agentUnpause','UnpauseUser','LogoutUser','bluebird','moment','lodash','util','jayson/promise','client','request','error','message','result','catch','getSquareProject','ShowSquareProject','production','getMailAccountById','ShowMailAccount','MailServerOut','Smtp','name','email','getSquareProjectById','getVoiceQueueById','ShowVoiceQueue','getVariableById','getSquareOdbcById','ShowSquareOdbc','dsn','ShowUser','getTrunkById','getSoundById','ShowSound','save_name','getIntervalById','ShowInterval','Interval','Intervals','getSmsAccountById','ShowSmsAccount','createSmsMessage','CreateSmsMessage','createSquareDetailsReport','createSquareReport','CreateSquareReport','arg_2'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0x5b3c,0x1f0));var _0xc5b3=function(_0x2c1d79,_0x2d12a1){_0x2c1d79=_0x2c1d79-0x0;var _0x38c596=_0x5b3c[_0x2c1d79];return _0x38c596;};'use strict';var BPromise=require(_0xc5b3('0x0'));var moment=require(_0xc5b3('0x1'));var _=require(_0xc5b3('0x2'));var util=require(_0xc5b3('0x3'));var jayson=require(_0xc5b3('0x4'));var client=jayson[_0xc5b3('0x5')]['http']({'port':0x2329});function request(_0x3fb5d0,_0x4b6aa2){return new BPromise(function(_0x128127,_0x4ac97d){return client[_0xc5b3('0x6')](_0x3fb5d0,_0x4b6aa2)['then'](function(_0x1191e3){if(_0x1191e3[_0xc5b3('0x7')]){return _0x4ac97d(_0x1191e3[_0xc5b3('0x7')][_0xc5b3('0x8')]);}else{return _0x128127(_0x1191e3[_0xc5b3('0x9')]);}})[_0xc5b3('0xa')](function(_0x4eef26){return _0x4ac97d(_0x4eef26);});});}exports[_0xc5b3('0xb')]=function(_0x219afe){return request(_0xc5b3('0xc'),{'options':{'raw':![],'where':{'name':_0x219afe},'attributes':[_0xc5b3('0xd')]}});};exports[_0xc5b3('0xe')]=function(_0x42a325){return request(_0xc5b3('0xf'),{'options':{'raw':![],'where':{'id':_0x42a325},'include':[{'model':_0xc5b3('0x10'),'as':_0xc5b3('0x11')}],'attributes':['id',_0xc5b3('0x12'),_0xc5b3('0x13')]}});};exports[_0xc5b3('0x14')]=function(_0x834ea7){return request('ShowSquareProject',{'options':{'where':{'id':_0x834ea7},'attributes':[_0xc5b3('0x12')]}});};exports[_0xc5b3('0x15')]=function(_0xb2d08){return request(_0xc5b3('0x16'),{'options':{'where':{'id':_0xb2d08},'attributes':[_0xc5b3('0x12')]}});};exports[_0xc5b3('0x17')]=function(_0x1009e8){return request('ShowVariable',{'options':{'where':{'id':_0x1009e8},'attributes':[_0xc5b3('0x12')]}});};exports[_0xc5b3('0x18')]=function(_0x205b41){return request(_0xc5b3('0x19'),{'options':{'where':{'id':_0x205b41},'attributes':[_0xc5b3('0x1a')]}});};exports['getUserById']=function(_0x9c84ca){return request(_0xc5b3('0x1b'),{'options':{'where':{'id':_0x9c84ca},'attributes':[_0xc5b3('0x12')]}});};exports[_0xc5b3('0x1c')]=function(_0x53467a){return request('ShowTrunk',{'options':{'where':{'id':_0x53467a},'attributes':[_0xc5b3('0x12')]}});};exports[_0xc5b3('0x1d')]=function(_0x5a2ef7){return request(_0xc5b3('0x1e'),{'options':{'where':{'id':_0x5a2ef7},'attributes':[_0xc5b3('0x1f')]}});};exports[_0xc5b3('0x20')]=function(_0x28c88a){return request(_0xc5b3('0x21'),{'options':{'raw':![],'where':{'id':_0x28c88a},'include':[{'model':_0xc5b3('0x22'),'as':_0xc5b3('0x23')}]}});};exports[_0xc5b3('0x24')]=function(_0xfee9f0){return request(_0xc5b3('0x25'),{'options':{'where':{'id':_0xfee9f0},'attributes':['id',_0xc5b3('0x12')]}});};exports[_0xc5b3('0x26')]=function(_0x2b498f){return request(_0xc5b3('0x27'),{'body':_0x2b498f});};exports[_0xc5b3('0x28')]=function(_0x5dd93c){return request('CreateSquareDetailsReport',{'body':_0x5dd93c});};exports[_0xc5b3('0x29')]=function(_0x46c44d){return request(_0xc5b3('0x2a'),{'body':_['merge'](_0x46c44d,{'project_name':_0x46c44d['arg_1'],'prev_project_name':_0x46c44d[_0xc5b3('0x2b')]||'','is_subproject':_0x46c44d[_0xc5b3('0x2b')]?!![]:![],'leaveAt':moment()[_0xc5b3('0x2c')](_0xc5b3('0x2d'))})});};exports['createSquareRecording']=function(_0x40214e){return request('CreateSquareRecording',{'body':_0x40214e});};exports[_0xc5b3('0x2e')]=function(_0x420614){return request(_0xc5b3('0x2f'),{'body':_0x420614});};exports[_0xc5b3('0x30')]=function(_0x55a80f){return request('ShowCmHopper',{'options':{'raw':![],'where':{'phone':_0x55a80f[_0xc5b3('0x31')],'ListId':_0x55a80f[_0xc5b3('0x32')]}}})[_0xc5b3('0x33')](function(_0x3dd03a){if(_0x3dd03a){return _0x3dd03a;}return request(_0xc5b3('0x34'),{'body':_0x55a80f});});};exports[_0xc5b3('0x35')]=function(_0x52b8e5){return request(_0xc5b3('0x36'),{'options':{'where':{'id':_0x52b8e5},'attributes':[_0xc5b3('0x12')]}});};exports['agentLogin']=function(_0x1a88f7,_0x5aceaf){return request(_0xc5b3('0x37'),{'body':{'interface':_0x5aceaf},'options':{'where':_0x1a88f7}});};exports[_0xc5b3('0x38')]=function(_0x2e8c19,_0x571c30,_0x37805a){return request('PauseUser',{'body':{'type':_0x571c30,'uniqueid':_0x37805a},'options':{'where':_0x2e8c19}});};exports[_0xc5b3('0x39')]=function(_0x3254c4){return request(_0xc5b3('0x3a'),{'body':{},'options':{'where':_0x3254c4}});};exports['agentLogout']=function(_0x4d94c3){return request(_0xc5b3('0x3b'),{'body':{},'options':{'where':_0x4d94c3}});};
\ No newline at end of file
+var _0x1c3d=['message','catch','getSquareProject','ShowSquareProject','ShowMailAccount','MailServerOut','Smtp','name','email','getSquareProjectById','getVoiceQueueById','ShowVariable','ShowSquareOdbc','dsn','getUserById','ShowUser','getTrunkById','ShowTrunk','ShowSound','save_name','getIntervalById','Interval','Intervals','getSmsAccountById','createSmsMessage','createSquareDetailsReport','CreateSquareDetailsReport','createSquareReport','CreateSquareReport','merge','arg_1','arg_2','createSquareRecording','CreateSquareRecording','createSquareMessage','CreateSquareMessage','createCmContact','ShowCmHopper','phone','ListId','CreateCmContact','getPauseById','agentLogin','LoginUser','PauseUser','UnpauseUser','agentLogout','LogoutUser','moment','lodash','util','jayson/promise','client','request','then','error'];(function(_0x432682,_0x253044){var _0x463d05=function(_0xa73403){while(--_0xa73403){_0x432682['push'](_0x432682['shift']());}};_0x463d05(++_0x253044);}(_0x1c3d,0x1b8));var _0xd1c3=function(_0x5e1609,_0x1c60d1){_0x5e1609=_0x5e1609-0x0;var _0x4be0b1=_0x1c3d[_0x5e1609];return _0x4be0b1;};'use strict';var BPromise=require('bluebird');var moment=require(_0xd1c3('0x0'));var _=require(_0xd1c3('0x1'));var util=require(_0xd1c3('0x2'));var jayson=require(_0xd1c3('0x3'));var client=jayson[_0xd1c3('0x4')]['http']({'port':0x2329});function request(_0x577efa,_0xffc3d0){return new BPromise(function(_0x3cc8a4,_0x793c5c){return client[_0xd1c3('0x5')](_0x577efa,_0xffc3d0)[_0xd1c3('0x6')](function(_0x391a41){if(_0x391a41['error']){return _0x793c5c(_0x391a41[_0xd1c3('0x7')][_0xd1c3('0x8')]);}else{return _0x3cc8a4(_0x391a41['result']);}})[_0xd1c3('0x9')](function(_0x2f3c1c){return _0x793c5c(_0x2f3c1c);});});}exports[_0xd1c3('0xa')]=function(_0x18556c){return request(_0xd1c3('0xb'),{'options':{'raw':![],'where':{'name':_0x18556c},'attributes':['production']}});};exports['getMailAccountById']=function(_0x4055e8){return request(_0xd1c3('0xc'),{'options':{'raw':![],'where':{'id':_0x4055e8},'include':[{'model':_0xd1c3('0xd'),'as':_0xd1c3('0xe')}],'attributes':['id',_0xd1c3('0xf'),_0xd1c3('0x10')]}});};exports[_0xd1c3('0x11')]=function(_0x280405){return request(_0xd1c3('0xb'),{'options':{'where':{'id':_0x280405},'attributes':['name']}});};exports[_0xd1c3('0x12')]=function(_0x4f2d0b){return request('ShowVoiceQueue',{'options':{'where':{'id':_0x4f2d0b},'attributes':[_0xd1c3('0xf')]}});};exports['getVariableById']=function(_0x2403c8){return request(_0xd1c3('0x13'),{'options':{'where':{'id':_0x2403c8},'attributes':[_0xd1c3('0xf')]}});};exports['getSquareOdbcById']=function(_0xaaa259){return request(_0xd1c3('0x14'),{'options':{'where':{'id':_0xaaa259},'attributes':[_0xd1c3('0x15')]}});};exports[_0xd1c3('0x16')]=function(_0x42ba11){return request(_0xd1c3('0x17'),{'options':{'where':{'id':_0x42ba11},'attributes':[_0xd1c3('0xf')]}});};exports[_0xd1c3('0x18')]=function(_0x3439dc){return request(_0xd1c3('0x19'),{'options':{'where':{'id':_0x3439dc},'attributes':['name']}});};exports['getSoundById']=function(_0x14f6cb){return request(_0xd1c3('0x1a'),{'options':{'where':{'id':_0x14f6cb},'attributes':[_0xd1c3('0x1b')]}});};exports[_0xd1c3('0x1c')]=function(_0x5b2571){return request('ShowInterval',{'options':{'raw':![],'where':{'id':_0x5b2571},'include':[{'model':_0xd1c3('0x1d'),'as':_0xd1c3('0x1e')}]}});};exports[_0xd1c3('0x1f')]=function(_0x588f4e){return request('ShowSmsAccount',{'options':{'where':{'id':_0x588f4e},'attributes':['id',_0xd1c3('0xf')]}});};exports[_0xd1c3('0x20')]=function(_0x4f8277){return request('CreateSmsMessage',{'body':_0x4f8277});};exports[_0xd1c3('0x21')]=function(_0xc45d5d){return request(_0xd1c3('0x22'),{'body':_0xc45d5d});};exports[_0xd1c3('0x23')]=function(_0x3d396c){return request(_0xd1c3('0x24'),{'body':_[_0xd1c3('0x25')](_0x3d396c,{'project_name':_0x3d396c[_0xd1c3('0x26')],'prev_project_name':_0x3d396c[_0xd1c3('0x27')]||'','is_subproject':_0x3d396c[_0xd1c3('0x27')]?!![]:![],'leaveAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss')})});};exports[_0xd1c3('0x28')]=function(_0x261323){return request(_0xd1c3('0x29'),{'body':_0x261323});};exports[_0xd1c3('0x2a')]=function(_0x5d1988){return request(_0xd1c3('0x2b'),{'body':_0x5d1988});};exports[_0xd1c3('0x2c')]=function(_0x54fd33){return request(_0xd1c3('0x2d'),{'options':{'raw':![],'where':{'phone':_0x54fd33[_0xd1c3('0x2e')],'ListId':_0x54fd33[_0xd1c3('0x2f')]}}})[_0xd1c3('0x6')](function(_0x10be91){if(_0x10be91){return _0x10be91;}return request(_0xd1c3('0x30'),{'body':_0x54fd33});});};exports[_0xd1c3('0x31')]=function(_0x551add){return request('ShowPause',{'options':{'where':{'id':_0x551add},'attributes':[_0xd1c3('0xf')]}});};exports[_0xd1c3('0x32')]=function(_0x1a4448,_0x100f29){return request(_0xd1c3('0x33'),{'body':{'interface':_0x100f29},'options':{'where':_0x1a4448}});};exports['agentPause']=function(_0x331bad,_0xb778ce,_0x5ce257){return request(_0xd1c3('0x34'),{'body':{'type':_0xb778ce,'uniqueid':_0x5ce257},'options':{'where':_0x331bad}});};exports['agentUnpause']=function(_0x1eefc2){return request(_0xd1c3('0x35'),{'body':{},'options':{'where':_0x1eefc2}});};exports[_0xd1c3('0x36')]=function(_0xdf49e1){return request(_0xd1c3('0x37'),{'body':{},'options':{'where':_0xdf49e1}});};
\ No newline at end of file
index c1a1689..1363cb3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd7a0=['./polly','exports'];(function(_0x3238d9,_0x1bcc59){var _0x125660=function(_0x1ff874){while(--_0x1ff874){_0x3238d9['push'](_0x3238d9['shift']());}};_0x125660(++_0x1bcc59);}(_0xd7a0,0x1d0));var _0x0d7a=function(_0x160408,_0x38600c){_0x160408=_0x160408-0x0;var _0x557c8c=_0xd7a0[_0x160408];return _0x557c8c;};var polly=require(_0x0d7a('0x0'));var lex=require('./lex');module[_0x0d7a('0x1')]={'polly':polly,'lex':lex};
\ No newline at end of file
+var _0x8068=['exports','./polly','./lex'];(function(_0x108d5f,_0x33f82d){var _0x456ea3=function(_0x228200){while(--_0x228200){_0x108d5f['push'](_0x108d5f['shift']());}};_0x456ea3(++_0x33f82d);}(_0x8068,0xb5));var _0x8806=function(_0x268c4c,_0x5cce8d){_0x268c4c=_0x268c4c-0x0;var _0x37e96e=_0x8068[_0x268c4c];return _0x37e96e;};var polly=require(_0x8806('0x0'));var lex=require(_0x8806('0x1'));module[_0x8806('0x2')]={'polly':polly,'lex':lex};
\ No newline at end of file
index 929ad11..45c37d0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbe02=['./lib/api','exports'];(function(_0x470bfb,_0x389787){var _0x2f5d97=function(_0x3431b4){while(--_0x3431b4){_0x470bfb['push'](_0x470bfb['shift']());}};_0x2f5d97(++_0x389787);}(_0xbe02,0x146));var _0x2be0=function(_0x395832,_0x426546){_0x395832=_0x395832-0x0;var _0x53cbce=_0xbe02[_0x395832];return _0x53cbce;};'use strict';var lex=require(_0x2be0('0x0'));module[_0x2be0('0x1')]=function(_0x20d2b7,_0x9d341f,_0x56973c,_0x26aef6,_0x2b34c2,_0x9eb980){return lex(_0x20d2b7,_0x9d341f,_0x56973c,_0x26aef6,_0x2b34c2,_0x9eb980);};
\ No newline at end of file
+var _0x4746=['./lib/api','exports'];(function(_0x4c3447,_0x2fd5cf){var _0x558026=function(_0xa21666){while(--_0xa21666){_0x4c3447['push'](_0x4c3447['shift']());}};_0x558026(++_0x2fd5cf);}(_0x4746,0xc6));var _0x6474=function(_0x503f9d,_0x37312a){_0x503f9d=_0x503f9d-0x0;var _0x46f522=_0x4746[_0x503f9d];return _0x46f522;};'use strict';var lex=require(_0x6474('0x0'));module[_0x6474('0x1')]=function(_0x5b12a8,_0x20751a,_0x59b95a,_0xd115f7,_0x244bc5,_0x863c56){return lex(_0x5b12a8,_0x20751a,_0x59b95a,_0xd115f7,_0x244bc5,_0x863c56);};
\ No newline at end of file
index d819da4..f3b8bc8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0048=['postText','slots','hasOwnProperty','exports','$LATEST','bluebird','aws-sdk'];(function(_0x376b45,_0x5964fb){var _0x2341b3=function(_0x5a7f01){while(--_0x5a7f01){_0x376b45['push'](_0x376b45['shift']());}};_0x2341b3(++_0x5964fb);}(_0x0048,0x1a9));var _0x8004=function(_0x29e2ba,_0x1b171f){_0x29e2ba=_0x29e2ba-0x0;var _0x5c5920=_0x0048[_0x29e2ba];return _0x5c5920;};'use strict';var BPromise=require(_0x8004('0x0'));var AWS=require(_0x8004('0x1'));function lexResult(_0x34561a,_0x1516e3){return new BPromise(function(_0x54c848,_0x1e6ed4){_0x34561a[_0x8004('0x2')](_0x1516e3,function(_0x19692a,_0x19d5e3){if(_0x19692a){_0x1e6ed4(_0x19692a);}if(_0x19d5e3[_0x8004('0x3')]){for(const _0x3facab in _0x19d5e3[_0x8004('0x3')]){if(_0x19d5e3['slots'][_0x8004('0x4')](_0x3facab)){var _0xc0970f=_0x19d5e3['slots'][_0x3facab];_0x19d5e3['slot_'+_0x3facab]=_0xc0970f;}}}_0x54c848(_0x19d5e3);});});}module[_0x8004('0x5')]=function(_0x41a9f8,_0x192adf,_0x373a47,_0x33edbb,_0x5120d5,_0x49797f){var _0x47857e=new AWS['LexRuntime']({'accessKeyId':_0x192adf,'secretAccessKey':_0x373a47,'region':_0x33edbb});var _0xc63245={'botAlias':_0x8004('0x6'),'botName':_0x49797f,'inputText':_0x5120d5,'userId':_0x41a9f8};return lexResult(_0x47857e,_0xc63245);};
\ No newline at end of file
+var _0x9080=['aws-sdk','postText','slots','hasOwnProperty','slot_','exports','LexRuntime','$LATEST','bluebird'];(function(_0x2fc873,_0x393137){var _0x6fed5=function(_0x1fac49){while(--_0x1fac49){_0x2fc873['push'](_0x2fc873['shift']());}};_0x6fed5(++_0x393137);}(_0x9080,0x116));var _0x0908=function(_0x2cf4fc,_0x4b7951){_0x2cf4fc=_0x2cf4fc-0x0;var _0x4a2be2=_0x9080[_0x2cf4fc];return _0x4a2be2;};'use strict';var BPromise=require(_0x0908('0x0'));var AWS=require(_0x0908('0x1'));function lexResult(_0x54182c,_0x4a8b4e){return new BPromise(function(_0x3a7843,_0x195a3a){_0x54182c[_0x0908('0x2')](_0x4a8b4e,function(_0x3bcbac,_0x586af9){if(_0x3bcbac){_0x195a3a(_0x3bcbac);}if(_0x586af9[_0x0908('0x3')]){for(const _0x353c58 in _0x586af9[_0x0908('0x3')]){if(_0x586af9[_0x0908('0x3')][_0x0908('0x4')](_0x353c58)){var _0x40dc44=_0x586af9[_0x0908('0x3')][_0x353c58];_0x586af9[_0x0908('0x5')+_0x353c58]=_0x40dc44;}}}_0x3a7843(_0x586af9);});});}module[_0x0908('0x6')]=function(_0x27a664,_0x1ec325,_0x533b52,_0x4d9428,_0x33cb49,_0x25b6c2){var _0xcd86ee=new AWS[(_0x0908('0x7'))]({'accessKeyId':_0x1ec325,'secretAccessKey':_0x533b52,'region':_0x4d9428});var _0x549778={'botAlias':_0x0908('0x8'),'botName':_0x25b6c2,'inputText':_0x33cb49,'userId':_0x27a664};return lexResult(_0xcd86ee,_0x549778);};
\ No newline at end of file
index 6366ca5..5102bc9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcd67=['./lib/api'];(function(_0x20d8d3,_0x118ad0){var _0x7c229e=function(_0x1a639b){while(--_0x1a639b){_0x20d8d3['push'](_0x20d8d3['shift']());}};_0x7c229e(++_0x118ad0);}(_0xcd67,0x157));var _0x7cd6=function(_0x517368,_0x75136e){_0x517368=_0x517368-0x0;var _0x5e13e7=_0xcd67[_0x517368];return _0x5e13e7;};'use strict';var polly=require(_0x7cd6('0x0'));module['exports']=function(_0x3d81be,_0x33eda9,_0x2f21d4,_0x3fd082,_0x5a2af6,_0x7282a7,_0x2ad151){return polly(_0x3d81be,_0x33eda9,_0x2f21d4,_0x3fd082,_0x5a2af6,_0x7282a7,_0x2ad151);};
\ No newline at end of file
+'use strict';var polly=require('./lib/api');module['exports']=function(_0x39f11c,_0x3d381d,_0x159673,_0x7c071a,_0x33fea2,_0x46355c,_0x36b864){return polly(_0x39f11c,_0x3d381d,_0x159673,_0x7c071a,_0x33fea2,_0x46355c,_0x36b864);};
\ No newline at end of file
index 3d22920..60068a9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xace8=['writeFile','Invalid\x20data\x20response\x20from\x20aws\x20Polly!','No\x20data\x20response\x20from\x20aws\x20Polly!','exports','mp3','path','bluebird','aws-sdk','AudioStream'];(function(_0x471408,_0x51c81e){var _0x12b56a=function(_0x2be234){while(--_0x2be234){_0x471408['push'](_0x471408['shift']());}};_0x12b56a(++_0x51c81e);}(_0xace8,0x1c7));var _0x8ace=function(_0x10cbda,_0x331fd9){_0x10cbda=_0x10cbda-0x0;var _0x10e5d8=_0xace8[_0x10cbda];return _0x10e5d8;};'use strict';var fs=require('fs');var path=require(_0x8ace('0x0'));var BPromise=require(_0x8ace('0x1'));var rs=require('randomstring');var AWS=require(_0x8ace('0x2'));function pollyResult(_0x1b6a18,_0xc9ffcb,_0x43b180){return new BPromise(function(_0x22fe9b,_0x14e4a2){_0x1b6a18['synthesizeSpeech'](_0xc9ffcb,function(_0x277267,_0x5cc88f){if(_0x277267){_0x14e4a2(_0x277267);}else if(_0x5cc88f){if(_0x5cc88f[_0x8ace('0x3')]instanceof Buffer){fs[_0x8ace('0x4')](_0x43b180,_0x5cc88f['AudioStream'],function(_0x576e19){if(_0x576e19){_0x14e4a2(_0x576e19);}else{_0x22fe9b();}});}else{_0x14e4a2(new Error(_0x8ace('0x5')));}}else{_0x14e4a2(new Error(_0x8ace('0x6')));}});});}module[_0x8ace('0x7')]=function(_0x345847,_0x42b59d,_0x4a4f30,_0x2543f2,_0x1163ab,_0x5a7db8,_0x4b770f){var _0x113016=new AWS['Polly']({'accessKeyId':_0x345847,'secretAccessKey':_0x42b59d,'region':_0x4a4f30});var _0x1b7bcd={'Text':_0x1163ab,'TextType':_0x5a7db8||'text','OutputFormat':_0x8ace('0x8'),'VoiceId':_0x2543f2};return pollyResult(_0x113016,_0x1b7bcd,_0x4b770f);};
\ No newline at end of file
+var _0x80e4=['No\x20data\x20response\x20from\x20aws\x20Polly!','exports','Polly','mp3','path','randomstring','aws-sdk','synthesizeSpeech','AudioStream','writeFile','Invalid\x20data\x20response\x20from\x20aws\x20Polly!'];(function(_0x24bd35,_0x2f198a){var _0x4c4aab=function(_0x1788ae){while(--_0x1788ae){_0x24bd35['push'](_0x24bd35['shift']());}};_0x4c4aab(++_0x2f198a);}(_0x80e4,0x122));var _0x480e=function(_0x5ce15c,_0x19c917){_0x5ce15c=_0x5ce15c-0x0;var _0x36e4f5=_0x80e4[_0x5ce15c];return _0x36e4f5;};'use strict';var fs=require('fs');var path=require(_0x480e('0x0'));var BPromise=require('bluebird');var rs=require(_0x480e('0x1'));var AWS=require(_0x480e('0x2'));function pollyResult(_0x125153,_0x2ffc64,_0x4918ff){return new BPromise(function(_0x55edfd,_0x467d0d){_0x125153[_0x480e('0x3')](_0x2ffc64,function(_0x104cc9,_0x34ef3c){if(_0x104cc9){_0x467d0d(_0x104cc9);}else if(_0x34ef3c){if(_0x34ef3c[_0x480e('0x4')]instanceof Buffer){fs[_0x480e('0x5')](_0x4918ff,_0x34ef3c['AudioStream'],function(_0x228e42){if(_0x228e42){_0x467d0d(_0x228e42);}else{_0x55edfd();}});}else{_0x467d0d(new Error(_0x480e('0x6')));}}else{_0x467d0d(new Error(_0x480e('0x7')));}});});}module[_0x480e('0x8')]=function(_0x4a2ef4,_0x574100,_0x47ca46,_0x594c5e,_0x3dbf5c,_0x168b4d,_0x3e7edf){var _0x14adef=new AWS[(_0x480e('0x9'))]({'accessKeyId':_0x4a2ef4,'secretAccessKey':_0x574100,'region':_0x47ca46});var _0x3bdf2b={'Text':_0x3dbf5c,'TextType':_0x168b4d||'text','OutputFormat':_0x480e('0xa'),'VoiceId':_0x594c5e};return pollyResult(_0x14adef,_0x3bdf2b,_0x3e7edf);};
\ No newline at end of file
index a3a8fac..6ec6f3a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2a4e=['./lib/api'];(function(_0x3bc078,_0xc9ab94){var _0x11c484=function(_0x265684){while(--_0x265684){_0x3bc078['push'](_0x3bc078['shift']());}};_0x11c484(++_0xc9ab94);}(_0x2a4e,0x1df));var _0xe2a4=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x2a4e[_0x3dd15e];return _0x231fd0;};'use strict';var asr=require(_0xe2a4('0x0'));module['exports']=function(_0x1564a0,_0x2cd637,_0x1d0e22,_0x2c3239){return asr(_0x1564a0,_0x2cd637,_0x1d0e22);};
\ No newline at end of file
+var _0x3c1a=['./lib/api','exports'];(function(_0x19591a,_0x4a4c9c){var _0x45218b=function(_0x18061f){while(--_0x18061f){_0x19591a['push'](_0x19591a['shift']());}};_0x45218b(++_0x4a4c9c);}(_0x3c1a,0xda));var _0xa3c1=function(_0x267d8d,_0xe90f65){_0x267d8d=_0x267d8d-0x0;var _0x11a98f=_0x3c1a[_0x267d8d];return _0x11a98f;};'use strict';var asr=require(_0xa3c1('0x0'));module[_0xa3c1('0x1')]=function(_0x238f91,_0x120f10,_0x449ed9,_0x141f8a){return asr(_0x238f91,_0x120f10,_0x449ed9);};
\ No newline at end of file
index 8df601f..34483d0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xef8e=['lang\x20should\x20be\x20a\x20string','readFileSync','toString','POST','/v1/speech:recognize?key=','LINEAR16','8000','url','bluebird','exports','filepath\x20should\x20be\x20a\x20string','string','key\x20should\x20be\x20a\x20string'];(function(_0x573752,_0x17ae4){var _0x2cb020=function(_0x33c2c3){while(--_0x33c2c3){_0x573752['push'](_0x573752['shift']());}};_0x2cb020(++_0x17ae4);}(_0xef8e,0x7c));var _0xeef8=function(_0xab01e3,_0x4860c2){_0xab01e3=_0xab01e3-0x0;var _0x5f16de=_0xef8e[_0xab01e3];return _0x5f16de;};'use strict';var url=require(_0xeef8('0x0'));var BPromise=require(_0xeef8('0x1'));var fs=require('fs');var host='https://speech.googleapis.com';module[_0xeef8('0x2')]=function(_0x4dd1ca,_0x190b02,_0x4501f4){return new BPromise(function(_0x40c25c,_0x4496b6){var _0x27628b;if(typeof _0x4dd1ca!=='string'||_0x4dd1ca['length']===0x0){return _0x4496b6(_0xeef8('0x3'));}if(typeof _0x190b02!==_0xeef8('0x4')||_0x190b02['length']===0x0){return _0x4496b6(_0xeef8('0x5'));}if(typeof _0x4501f4!=='undefined'&&(typeof _0x4501f4!=='string'||_0x4501f4['length']===0x0)){return _0x4496b6(_0xeef8('0x6'));}try{_0x27628b=fs[_0xeef8('0x7')](_0x4dd1ca)[_0xeef8('0x8')]('base64');}catch(_0x3b3233){return _0x4496b6(_0x3b3233);}return _0x40c25c({'method':_0xeef8('0x9'),'uri':host+_0xeef8('0xa')+_0x190b02,'body':{'config':{'encoding':_0xeef8('0xb'),'sampleRateHertz':_0xeef8('0xc'),'languageCode':_0x4501f4},'audio':{'content':_0x27628b}},'json':!![]});});};
\ No newline at end of file
+var _0x8696=['toString','base64','POST','/v1/speech:recognize?key=','LINEAR16','8000','url','bluebird','exports','string','length','filepath\x20should\x20be\x20a\x20string','key\x20should\x20be\x20a\x20string','lang\x20should\x20be\x20a\x20string','readFileSync'];(function(_0x22314a,_0x3274e6){var _0x4c758c=function(_0x46d29f){while(--_0x46d29f){_0x22314a['push'](_0x22314a['shift']());}};_0x4c758c(++_0x3274e6);}(_0x8696,0x132));var _0x6869=function(_0x5ebfe9,_0x3d44d0){_0x5ebfe9=_0x5ebfe9-0x0;var _0x41d788=_0x8696[_0x5ebfe9];return _0x41d788;};'use strict';var url=require(_0x6869('0x0'));var BPromise=require(_0x6869('0x1'));var fs=require('fs');var host='https://speech.googleapis.com';module[_0x6869('0x2')]=function(_0x458994,_0x20d99d,_0x310b63){return new BPromise(function(_0x51462d,_0x5f12c3){var _0x58ce10;if(typeof _0x458994!==_0x6869('0x3')||_0x458994[_0x6869('0x4')]===0x0){return _0x5f12c3(_0x6869('0x5'));}if(typeof _0x20d99d!==_0x6869('0x3')||_0x20d99d[_0x6869('0x4')]===0x0){return _0x5f12c3(_0x6869('0x6'));}if(typeof _0x310b63!=='undefined'&&(typeof _0x310b63!=='string'||_0x310b63[_0x6869('0x4')]===0x0)){return _0x5f12c3(_0x6869('0x7'));}try{_0x58ce10=fs[_0x6869('0x8')](_0x458994)[_0x6869('0x9')](_0x6869('0xa'));}catch(_0x1add0d){return _0x5f12c3(_0x1add0d);}return _0x51462d({'method':_0x6869('0xb'),'uri':host+_0x6869('0xc')+_0x20d99d,'body':{'config':{'encoding':_0x6869('0xd'),'sampleRateHertz':_0x6869('0xe'),'languageCode':_0x310b63},'audio':{'content':_0x58ce10}},'json':!![]});});};
\ No newline at end of file
index a13841e..312be59 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['exports','./asr'];(function(_0x25b6ef,_0xd822){var _0x55baf3=function(_0x15eddd){while(--_0x15eddd){_0x25b6ef['push'](_0x25b6ef['shift']());}};_0x55baf3(++_0xd822);}(_0xa9e0,0x123));var _0x0a9e=function(_0x9df060,_0x253d33){_0x9df060=_0x9df060-0x0;var _0x338dfe=_0xa9e0[_0x9df060];return _0x338dfe;};var asr=require(_0x0a9e('0x0'));module[_0x0a9e('0x1')]={'asr':asr};
\ No newline at end of file
+var _0xedd9=['exports'];(function(_0x4d232d,_0x1feca2){var _0x36b9b2=function(_0x13bf2b){while(--_0x13bf2b){_0x4d232d['push'](_0x4d232d['shift']());}};_0x36b9b2(++_0x1feca2);}(_0xedd9,0xfc));var _0x9edd=function(_0xc364a5,_0x3df600){_0xc364a5=_0xc364a5-0x0;var _0x3599a6=_0xedd9[_0xc364a5];return _0x3599a6;};var asr=require('./asr');module[_0x9edd('0x0')]={'asr':asr};
\ No newline at end of file
index 7958b0e..cbb5ce5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['text','channelData','CustomAction','AudioFromTts','Data','dirName','path','http','https','bluebird','sox','request-promise','util','querystring','moment','apiai-promise','md5','./google','./sestek','https://api.ispeech.org/api/rest','host','WHAT_EVER','get','statusCode','request\x20to\x20','\x20failed,\x20status\x20code\x20=\x20','statusMessage','createWriteStream','info','finish\x20download\x20file','error','unlink','download\x20error','pipe','end','protocol','https:','data','transcode','error\x20convert','finish\x20to\x20convert','start','resolve','tmp','generate','.wav','base64','then','chmodSync','777','split','readFileSync','googleTTS','.mp3','goggleTTS\x20path','googleASR','asr','uri','results','alternatives','transcript','join','confidence','googleASR\x20transcription','googleASR\x20confidence','catch','[%s]\x20%s:%s','name','message','googleDialogflow','textRequest','stringify','result','source','resolvedQuery','action','actionIncomplete','fulfillment','speech','score','code','metadata','endConversation','isFallbackIntent','tildeASR','Tilde\x20ASR\x20transcription','Tilde\x20ASR\x20confidence','awsPolly','awsLex','lex','format','freeform=3','parse','sestekNDA','nda'];(function(_0x2106da,_0x54ead6){var _0x53d793=function(_0x225d19){while(--_0x225d19){_0x2106da['push'](_0x2106da['shift']());}};_0x53d793(++_0x54ead6);}(_0xa9e0,0x123));var _0x0a9e=function(_0x47e7cb,_0x4c1b8d){_0x47e7cb=_0x47e7cb-0x0;var _0x2a8874=_0xa9e0[_0x47e7cb];return _0x2a8874;};'use strict';var fs=require('fs');var path=require(_0x0a9e('0x0'));var http=require(_0x0a9e('0x1'));var https=require(_0x0a9e('0x2'));var urlParse=require('url')['parse'];var BPromise=require(_0x0a9e('0x3'));var rs=require('randomstring');var sox=require(_0x0a9e('0x4'));var rp=require(_0x0a9e('0x5'));var util=require(_0x0a9e('0x6'));var querystring=require(_0x0a9e('0x7'));var moment=require(_0x0a9e('0x8'));var tts=require('google-tts-api');var apiai=require(_0x0a9e('0x9'));var md5=require(_0x0a9e('0xa'));var google=require(_0x0a9e('0xb'));var aws=require('./aws');var tilde=require('./tilde');var sestek=require(_0x0a9e('0xc'));var logger=require('../../../config/logger')('agi');var ISPEECH_API=_0x0a9e('0xd');function downloadFile(_0xf81284,_0x307b3e){return new BPromise(function(_0x3ab53f,_0xfeb75b){var _0xbd1168=urlParse(_0xf81284);var _0x4a4c56=_0xbd1168['protocol']==='https:'?https:http;var _0x4cfe67={'host':_0xbd1168[_0x0a9e('0xe')],'path':_0xbd1168[_0x0a9e('0x0')],'headers':{'user-agent':_0x0a9e('0xf')}};_0x4a4c56[_0x0a9e('0x10')](_0x4cfe67,function(_0x32d742){if(_0x32d742[_0x0a9e('0x11')]!==0xc8){logger['error'](_0x0a9e('0x12')+_0xf81284+_0x0a9e('0x13')+_0x32d742[_0x0a9e('0x11')]+'\x20('+_0x32d742[_0x0a9e('0x14')]+')');_0xfeb75b(new Error(_0x0a9e('0x12')+_0xf81284+_0x0a9e('0x13')+_0x32d742['statusCode']+'\x20('+_0x32d742[_0x0a9e('0x14')]+')'));return;}var _0x5d0880=fs[_0x0a9e('0x15')](_0x307b3e);_0x5d0880['on']('finish',function(){logger[_0x0a9e('0x16')](_0x0a9e('0x17'));_0x5d0880['close'](_0x3ab53f);});_0x5d0880['on'](_0x0a9e('0x18'),function(_0x5a0a06){fs[_0x0a9e('0x19')](_0x307b3e);logger[_0x0a9e('0x18')](_0x0a9e('0x1a'),_0x5a0a06);_0xfeb75b(_0x5a0a06);});_0x32d742[_0x0a9e('0x1b')](_0x5d0880);})['on'](_0x0a9e('0x18'),function(_0x2eb11f){logger[_0x0a9e('0x18')](_0x2eb11f);_0xfeb75b(_0x2eb11f);})[_0x0a9e('0x1c')]();});}function uploadFile(_0x1314ae){return new BPromise(function(_0x112016,_0x1c696a){var _0x105080=urlParse(_0x1314ae);var _0x4bb1e3=_0x105080[_0x0a9e('0x1d')]===_0x0a9e('0x1e')?https:http;var _0x53682f={'host':_0x105080[_0x0a9e('0xe')],'path':_0x105080['path'],'headers':{'user-agent':'WHAT_EVER'}};_0x4bb1e3[_0x0a9e('0x10')](_0x53682f,function(_0x432e56){if(_0x432e56[_0x0a9e('0x11')]!==0xc8){_0x1c696a(new Error(_0x0a9e('0x12')+_0x1314ae+'\x20failed,\x20status\x20code\x20=\x20'+_0x432e56[_0x0a9e('0x11')]+'\x20('+_0x432e56[_0x0a9e('0x14')]+')'));return;}var _0x3b45bc='';_0x432e56['on'](_0x0a9e('0x1f'),function(_0x370d86){_0x3b45bc+=_0x370d86;});_0x432e56['on'](_0x0a9e('0x1c'),function(){_0x112016(_0x3b45bc);});})['on'](_0x0a9e('0x18'),function(_0x5ea472){_0x1c696a(_0x5ea472);})['end']();});}function convertFile(_0x197ec0,_0x3a8e58){return new BPromise(function(_0x40c424,_0x33161b){var _0x526cf3=sox[_0x0a9e('0x20')](_0x197ec0,_0x3a8e58,{'sampleRate':0x1f40,'format':'wav','channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x526cf3['on'](_0x0a9e('0x18'),function(_0x5bfb33){logger[_0x0a9e('0x18')](_0x0a9e('0x21'),_0x5bfb33);_0x33161b(_0x5bfb33);});_0x526cf3['on'](_0x0a9e('0x1c'),function(){logger[_0x0a9e('0x16')](_0x0a9e('0x22'));_0x40c424();});_0x526cf3[_0x0a9e('0x23')]();});}function base64Decode(_0x11c3b6,_0x14de77){var _0x5a101a=path[_0x0a9e('0x24')](__dirname,_0x0a9e('0x25'),rs[_0x0a9e('0x26')](0x4)+_0x0a9e('0x27'));fs['writeFileSync'](_0x5a101a,_0x11c3b6,_0x0a9e('0x28'));return convertFile(_0x5a101a,_0x14de77)[_0x0a9e('0x29')](function(){try{fs[_0x0a9e('0x19')](_0x5a101a);fs[_0x0a9e('0x2a')](_0x14de77,_0x0a9e('0x2b'));}catch(_0x563b45){logger[_0x0a9e('0x18')](_0x563b45);}return _0x14de77[_0x0a9e('0x2c')]('.')[0x0];});}function base64Encode(_0x1dbde2){var _0x540530=fs[_0x0a9e('0x2d')](_0x1dbde2);return new Buffer(_0x540530)['toString'](_0x0a9e('0x28'));}exports[_0x0a9e('0x2e')]=function(_0x1122db,_0x33bdb7){var _0x25ce3a,_0x5180f1;return tts(_0x1122db,_0x33bdb7||'en',0x1)[_0x0a9e('0x29')](function(_0x46f0a5){logger[_0x0a9e('0x16')](_0x46f0a5);_0x25ce3a=path[_0x0a9e('0x24')](__dirname,_0x0a9e('0x25'),rs[_0x0a9e('0x26')](0x4)+_0x0a9e('0x2f'));return downloadFile(_0x46f0a5,_0x25ce3a);})[_0x0a9e('0x29')](function(){_0x5180f1=path['resolve'](__dirname,_0x0a9e('0x25'),rs['generate'](0x4)+_0x0a9e('0x27'));return convertFile(_0x25ce3a,_0x5180f1);})[_0x0a9e('0x29')](function(){try{fs[_0x0a9e('0x19')](_0x25ce3a);fs[_0x0a9e('0x2a')](_0x5180f1,'777');}catch(_0x191e91){logger[_0x0a9e('0x18')](_0x191e91);}logger[_0x0a9e('0x16')](_0x0a9e('0x30'),_0x5180f1['split']('.')[0x0]);return _0x5180f1['split']('.')[0x0];});};exports[_0x0a9e('0x31')]=function(_0x5640eb,_0x24936a,_0x3d9717){return google[_0x0a9e('0x32')](_0x5640eb,_0x24936a,_0x3d9717)[_0x0a9e('0x29')](function(_0x4f41ae){logger[_0x0a9e('0x16')](_0x4f41ae[_0x0a9e('0x33')]);return rp(_0x4f41ae);})[_0x0a9e('0x29')](function(_0x533942){var _0x1dbf74='';var _0x1a180b=0x0;try{fs[_0x0a9e('0x19')](_0x5640eb);}catch(_0x4c1c0e){logger['error'](_0x4c1c0e);}if(_0x533942&&_0x533942[_0x0a9e('0x34')]){_0x1dbf74=_0x533942[_0x0a9e('0x34')]['map'](function(_0x2b814e){return _0x2b814e&&_0x2b814e[_0x0a9e('0x35')][0x0]&&_0x2b814e[_0x0a9e('0x35')][0x0][_0x0a9e('0x36')]?_0x2b814e['alternatives'][0x0]['transcript']:'';})[_0x0a9e('0x37')]('\x0a');_0x1a180b=_0x533942[_0x0a9e('0x34')]['map'](function(_0x183991){return _0x183991&&_0x183991[_0x0a9e('0x35')][0x0]&&_0x183991[_0x0a9e('0x35')][0x0]['confidence']?_0x183991[_0x0a9e('0x35')][0x0][_0x0a9e('0x38')]:0x0;})[_0x0a9e('0x37')]('\x0a');}logger[_0x0a9e('0x16')](_0x0a9e('0x39'),_0x1dbf74);logger[_0x0a9e('0x16')](_0x0a9e('0x3a'),_0x1a180b);return{'transcript':_0x1dbf74,'confidence':_0x1a180b};})[_0x0a9e('0x3b')](function(_0x23b089){logger[_0x0a9e('0x18')](_0x0a9e('0x3c'),_0x23b089[_0x0a9e('0x11')],_0x23b089[_0x0a9e('0x3d')],_0x23b089[_0x0a9e('0x3e')]);});};exports[_0x0a9e('0x3f')]=function(_0x4d04c8,_0x52628e,_0x473fdc,_0xb3795a){var _0x405c8f=apiai(_0x52628e,{'language':_0xb3795a||'en'});return _0x405c8f[_0x0a9e('0x40')](_0x473fdc,{'sessionId':md5(_0x4d04c8)})[_0x0a9e('0x29')](function(_0xc9a702){logger[_0x0a9e('0x16')](JSON[_0x0a9e('0x41')](_0xc9a702));return{'source':_0xc9a702[_0x0a9e('0x42')][_0x0a9e('0x43')],'resolvedQuery':_0xc9a702[_0x0a9e('0x42')][_0x0a9e('0x44')],'action':_0xc9a702['result'][_0x0a9e('0x45')],'actionIncomplete':_0xc9a702[_0x0a9e('0x42')][_0x0a9e('0x46')],'speech':_0xc9a702[_0x0a9e('0x42')][_0x0a9e('0x47')][_0x0a9e('0x48')],'score':_0xc9a702[_0x0a9e('0x42')][_0x0a9e('0x49')],'statusCode':_0xc9a702['status'][_0x0a9e('0x4a')],'endConversation':_0xc9a702['result'][_0x0a9e('0x4b')][_0x0a9e('0x4c')]||![],'isFallbackIntent':_0xc9a702[_0x0a9e('0x42')]['metadata'][_0x0a9e('0x4d')]};});};exports[_0x0a9e('0x4e')]=function(_0x4774f4,_0x34aa5a,_0x45c845,_0x37be73){return tilde[_0x0a9e('0x32')](_0x4774f4,_0x34aa5a,_0x45c845,_0x37be73)['then'](function(_0x13f44d){try{fs[_0x0a9e('0x19')](_0x4774f4);}catch(_0x1b5e80){logger[_0x0a9e('0x18')](_0x1b5e80);}logger[_0x0a9e('0x16')](_0x0a9e('0x4f'),_0x13f44d[_0x0a9e('0x36')]);logger[_0x0a9e('0x16')](_0x0a9e('0x50'),_0x13f44d['confidence']);return _0x13f44d;});};exports[_0x0a9e('0x51')]=function(_0x3fe430,_0x4f7240,_0x4ae14b,_0x5ddf84,_0x1adfee,_0x4317e3){var _0x37edaa=path[_0x0a9e('0x24')](__dirname,_0x0a9e('0x25'),rs[_0x0a9e('0x26')](0x4)+_0x0a9e('0x2f'));var _0x375c18;return aws['polly'](_0x3fe430,_0x4f7240,_0x4ae14b,_0x5ddf84,_0x1adfee,_0x4317e3,_0x37edaa)['then'](function(){_0x375c18=path['resolve'](__dirname,_0x0a9e('0x25'),rs[_0x0a9e('0x26')](0x4)+_0x0a9e('0x27'));return convertFile(_0x37edaa,_0x375c18);})['then'](function(){try{fs[_0x0a9e('0x19')](_0x37edaa);fs[_0x0a9e('0x2a')](_0x375c18,'777');}catch(_0x5a88da){logger[_0x0a9e('0x18')](_0x5a88da);}return _0x375c18['split']('.')[0x0];});};exports[_0x0a9e('0x52')]=function(_0x4c3845,_0x2e5e62,_0x3c20b2,_0x439340,_0x53613a,_0x2f82da){return aws[_0x0a9e('0x53')](_0x4c3845,_0x2e5e62,_0x3c20b2,_0x439340,_0x53613a,_0x2f82da)['then'](function(_0x50f687){logger[_0x0a9e('0x16')](JSON[_0x0a9e('0x41')](_0x50f687));return _0x50f687;});};exports['ispeechTTS']=function(_0x145931,_0x5ce9ac,_0x211ef9,_0x523cd2){var _0xe22ccc=util['format']('%s?apikey=%s&action=convert&text=%s&voice=%s&speed=%s&format=mp3',ISPEECH_API,_0x145931,encodeURIComponent(_0x5ce9ac),_0x211ef9,_0x523cd2);var _0x5df0ad=path[_0x0a9e('0x24')](__dirname,'tmp',rs[_0x0a9e('0x26')](0x4)+_0x0a9e('0x2f'));var _0x3cfd00;return downloadFile(_0xe22ccc,_0x5df0ad)[_0x0a9e('0x29')](function(){_0x3cfd00=path[_0x0a9e('0x24')](__dirname,_0x0a9e('0x25'),rs[_0x0a9e('0x26')](0x4)+_0x0a9e('0x27'));return convertFile(_0x5df0ad,_0x3cfd00);})['then'](function(){try{fs[_0x0a9e('0x19')](_0x5df0ad);fs[_0x0a9e('0x2a')](_0x3cfd00,_0x0a9e('0x2b'));}catch(_0x30c491){logger[_0x0a9e('0x18')](_0x30c491);}return _0x3cfd00[_0x0a9e('0x2c')]('.')[0x0];});};exports['ispeechASR']=function(_0x956fbe,_0x26bc80,_0x5239ef,_0x3649cc){var _0x5cc8fb=util[_0x0a9e('0x54')]('%s?apikey=%s&action=recognize&locale=%s&content-type=audio/x-wav&audio=%s&%s',ISPEECH_API,_0x26bc80,_0x5239ef,base64Encode(_0x956fbe),_0x3649cc?util['format']('model=%s',encodeURIComponent(_0x3649cc)):_0x0a9e('0x55'));return uploadFile(_0x5cc8fb)['then'](function(_0x2244d6){return querystring[_0x0a9e('0x56')](_0x2244d6);});};exports[_0x0a9e('0x57')]=function(_0x7be420,_0x1cca9f){return sestek[_0x0a9e('0x58')](_0x7be420,_0x1cca9f)['then'](function(_0x1627a7){logger['info'](JSON[_0x0a9e('0x41')](_0x1627a7));var _0x1f07cb={'speech':_0x1627a7[_0x0a9e('0x59')],'action':_0x1627a7['channelData']?_0x1627a7[_0x0a9e('0x5a')][_0x0a9e('0x5b')]:undefined,'actiondata':_0x1627a7[_0x0a9e('0x5a')]?_0x1627a7[_0x0a9e('0x5a')]['CustomActionData']:undefined};if(_0x1627a7[_0x0a9e('0x5a')]&&_0x1627a7[_0x0a9e('0x5a')]['AudioFromTts']){return base64Decode(_0x1627a7[_0x0a9e('0x5a')][_0x0a9e('0x5c')][_0x0a9e('0x5d')],path[_0x0a9e('0x24')](__dirname,_0x0a9e('0x25'),rs['generate'](0x4)+_0x0a9e('0x27')))[_0x0a9e('0x29')](function(_0x281c7d){_0x1f07cb['audiofile']=_0x281c7d;return _0x1f07cb;});}return _0x1f07cb;});};exports[_0x0a9e('0x5e')]=function(){return __dirname;};
\ No newline at end of file
+var _0xa9e0=['text','channelData','CustomAction','AudioFromTts','Data','dirName','path','http','https','bluebird','sox','request-promise','util','querystring','moment','apiai-promise','md5','./google','./sestek','https://api.ispeech.org/api/rest','host','WHAT_EVER','get','statusCode','request\x20to\x20','\x20failed,\x20status\x20code\x20=\x20','statusMessage','createWriteStream','info','finish\x20download\x20file','error','unlink','download\x20error','pipe','end','protocol','https:','data','transcode','error\x20convert','finish\x20to\x20convert','start','resolve','tmp','generate','.wav','base64','then','chmodSync','777','split','readFileSync','googleTTS','.mp3','goggleTTS\x20path','googleASR','asr','uri','results','alternatives','transcript','join','confidence','googleASR\x20transcription','googleASR\x20confidence','catch','[%s]\x20%s:%s','name','message','googleDialogflow','textRequest','stringify','result','source','resolvedQuery','action','actionIncomplete','fulfillment','speech','score','code','metadata','endConversation','isFallbackIntent','tildeASR','Tilde\x20ASR\x20transcription','Tilde\x20ASR\x20confidence','awsPolly','awsLex','lex','format','freeform=3','parse','sestekNDA','nda'];(function(_0x35ed49,_0xe2a00){var _0x10ddd0=function(_0x1a8be5){while(--_0x1a8be5){_0x35ed49['push'](_0x35ed49['shift']());}};_0x10ddd0(++_0xe2a00);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3e112d,_0x2bb132){_0x3e112d=_0x3e112d-0x0;var _0x531c31=_0xa9e0[_0x3e112d];return _0x531c31;};'use strict';var fs=require('fs');var path=require(_0x0a9e('0x0'));var http=require(_0x0a9e('0x1'));var https=require(_0x0a9e('0x2'));var urlParse=require('url')['parse'];var BPromise=require(_0x0a9e('0x3'));var rs=require('randomstring');var sox=require(_0x0a9e('0x4'));var rp=require(_0x0a9e('0x5'));var util=require(_0x0a9e('0x6'));var querystring=require(_0x0a9e('0x7'));var moment=require(_0x0a9e('0x8'));var tts=require('google-tts-api');var apiai=require(_0x0a9e('0x9'));var md5=require(_0x0a9e('0xa'));var google=require(_0x0a9e('0xb'));var aws=require('./aws');var tilde=require('./tilde');var sestek=require(_0x0a9e('0xc'));var logger=require('../../../config/logger')('agi');var ISPEECH_API=_0x0a9e('0xd');function downloadFile(_0xf81284,_0x307b3e){return new BPromise(function(_0x3ab53f,_0xfeb75b){var _0xbd1168=urlParse(_0xf81284);var _0x4a4c56=_0xbd1168['protocol']==='https:'?https:http;var _0x4cfe67={'host':_0xbd1168[_0x0a9e('0xe')],'path':_0xbd1168[_0x0a9e('0x0')],'headers':{'user-agent':_0x0a9e('0xf')}};_0x4a4c56[_0x0a9e('0x10')](_0x4cfe67,function(_0x32d742){if(_0x32d742[_0x0a9e('0x11')]!==0xc8){logger['error'](_0x0a9e('0x12')+_0xf81284+_0x0a9e('0x13')+_0x32d742[_0x0a9e('0x11')]+'\x20('+_0x32d742[_0x0a9e('0x14')]+')');_0xfeb75b(new Error(_0x0a9e('0x12')+_0xf81284+_0x0a9e('0x13')+_0x32d742['statusCode']+'\x20('+_0x32d742[_0x0a9e('0x14')]+')'));return;}var _0x5d0880=fs[_0x0a9e('0x15')](_0x307b3e);_0x5d0880['on']('finish',function(){logger[_0x0a9e('0x16')](_0x0a9e('0x17'));_0x5d0880['close'](_0x3ab53f);});_0x5d0880['on'](_0x0a9e('0x18'),function(_0x5a0a06){fs[_0x0a9e('0x19')](_0x307b3e);logger[_0x0a9e('0x18')](_0x0a9e('0x1a'),_0x5a0a06);_0xfeb75b(_0x5a0a06);});_0x32d742[_0x0a9e('0x1b')](_0x5d0880);})['on'](_0x0a9e('0x18'),function(_0x2eb11f){logger[_0x0a9e('0x18')](_0x2eb11f);_0xfeb75b(_0x2eb11f);})[_0x0a9e('0x1c')]();});}function uploadFile(_0x1314ae){return new BPromise(function(_0x112016,_0x1c696a){var _0x105080=urlParse(_0x1314ae);var _0x4bb1e3=_0x105080[_0x0a9e('0x1d')]===_0x0a9e('0x1e')?https:http;var _0x53682f={'host':_0x105080[_0x0a9e('0xe')],'path':_0x105080['path'],'headers':{'user-agent':'WHAT_EVER'}};_0x4bb1e3[_0x0a9e('0x10')](_0x53682f,function(_0x432e56){if(_0x432e56[_0x0a9e('0x11')]!==0xc8){_0x1c696a(new Error(_0x0a9e('0x12')+_0x1314ae+'\x20failed,\x20status\x20code\x20=\x20'+_0x432e56[_0x0a9e('0x11')]+'\x20('+_0x432e56[_0x0a9e('0x14')]+')'));return;}var _0x3b45bc='';_0x432e56['on'](_0x0a9e('0x1f'),function(_0x370d86){_0x3b45bc+=_0x370d86;});_0x432e56['on'](_0x0a9e('0x1c'),function(){_0x112016(_0x3b45bc);});})['on'](_0x0a9e('0x18'),function(_0x5ea472){_0x1c696a(_0x5ea472);})['end']();});}function convertFile(_0x197ec0,_0x3a8e58){return new BPromise(function(_0x40c424,_0x33161b){var _0x526cf3=sox[_0x0a9e('0x20')](_0x197ec0,_0x3a8e58,{'sampleRate':0x1f40,'format':'wav','channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x526cf3['on'](_0x0a9e('0x18'),function(_0x5bfb33){logger[_0x0a9e('0x18')](_0x0a9e('0x21'),_0x5bfb33);_0x33161b(_0x5bfb33);});_0x526cf3['on'](_0x0a9e('0x1c'),function(){logger[_0x0a9e('0x16')](_0x0a9e('0x22'));_0x40c424();});_0x526cf3[_0x0a9e('0x23')]();});}function base64Decode(_0x11c3b6,_0x14de77){var _0x5a101a=path[_0x0a9e('0x24')](__dirname,_0x0a9e('0x25'),rs[_0x0a9e('0x26')](0x4)+_0x0a9e('0x27'));fs['writeFileSync'](_0x5a101a,_0x11c3b6,_0x0a9e('0x28'));return convertFile(_0x5a101a,_0x14de77)[_0x0a9e('0x29')](function(){try{fs[_0x0a9e('0x19')](_0x5a101a);fs[_0x0a9e('0x2a')](_0x14de77,_0x0a9e('0x2b'));}catch(_0x563b45){logger[_0x0a9e('0x18')](_0x563b45);}return _0x14de77[_0x0a9e('0x2c')]('.')[0x0];});}function base64Encode(_0x1dbde2){var _0x540530=fs[_0x0a9e('0x2d')](_0x1dbde2);return new Buffer(_0x540530)['toString'](_0x0a9e('0x28'));}exports[_0x0a9e('0x2e')]=function(_0x1122db,_0x33bdb7){var _0x25ce3a,_0x5180f1;return tts(_0x1122db,_0x33bdb7||'en',0x1)[_0x0a9e('0x29')](function(_0x46f0a5){logger[_0x0a9e('0x16')](_0x46f0a5);_0x25ce3a=path[_0x0a9e('0x24')](__dirname,_0x0a9e('0x25'),rs[_0x0a9e('0x26')](0x4)+_0x0a9e('0x2f'));return downloadFile(_0x46f0a5,_0x25ce3a);})[_0x0a9e('0x29')](function(){_0x5180f1=path['resolve'](__dirname,_0x0a9e('0x25'),rs['generate'](0x4)+_0x0a9e('0x27'));return convertFile(_0x25ce3a,_0x5180f1);})[_0x0a9e('0x29')](function(){try{fs[_0x0a9e('0x19')](_0x25ce3a);fs[_0x0a9e('0x2a')](_0x5180f1,'777');}catch(_0x191e91){logger[_0x0a9e('0x18')](_0x191e91);}logger[_0x0a9e('0x16')](_0x0a9e('0x30'),_0x5180f1['split']('.')[0x0]);return _0x5180f1['split']('.')[0x0];});};exports[_0x0a9e('0x31')]=function(_0x5640eb,_0x24936a,_0x3d9717){return google[_0x0a9e('0x32')](_0x5640eb,_0x24936a,_0x3d9717)[_0x0a9e('0x29')](function(_0x4f41ae){logger[_0x0a9e('0x16')](_0x4f41ae[_0x0a9e('0x33')]);return rp(_0x4f41ae);})[_0x0a9e('0x29')](function(_0x533942){var _0x1dbf74='';var _0x1a180b=0x0;try{fs[_0x0a9e('0x19')](_0x5640eb);}catch(_0x4c1c0e){logger['error'](_0x4c1c0e);}if(_0x533942&&_0x533942[_0x0a9e('0x34')]){_0x1dbf74=_0x533942[_0x0a9e('0x34')]['map'](function(_0x2b814e){return _0x2b814e&&_0x2b814e[_0x0a9e('0x35')][0x0]&&_0x2b814e[_0x0a9e('0x35')][0x0][_0x0a9e('0x36')]?_0x2b814e['alternatives'][0x0]['transcript']:'';})[_0x0a9e('0x37')]('\x0a');_0x1a180b=_0x533942[_0x0a9e('0x34')]['map'](function(_0x183991){return _0x183991&&_0x183991[_0x0a9e('0x35')][0x0]&&_0x183991[_0x0a9e('0x35')][0x0]['confidence']?_0x183991[_0x0a9e('0x35')][0x0][_0x0a9e('0x38')]:0x0;})[_0x0a9e('0x37')]('\x0a');}logger[_0x0a9e('0x16')](_0x0a9e('0x39'),_0x1dbf74);logger[_0x0a9e('0x16')](_0x0a9e('0x3a'),_0x1a180b);return{'transcript':_0x1dbf74,'confidence':_0x1a180b};})[_0x0a9e('0x3b')](function(_0x23b089){logger[_0x0a9e('0x18')](_0x0a9e('0x3c'),_0x23b089[_0x0a9e('0x11')],_0x23b089[_0x0a9e('0x3d')],_0x23b089[_0x0a9e('0x3e')]);});};exports[_0x0a9e('0x3f')]=function(_0x4d04c8,_0x52628e,_0x473fdc,_0xb3795a){var _0x405c8f=apiai(_0x52628e,{'language':_0xb3795a||'en'});return _0x405c8f[_0x0a9e('0x40')](_0x473fdc,{'sessionId':md5(_0x4d04c8)})[_0x0a9e('0x29')](function(_0xc9a702){logger[_0x0a9e('0x16')](JSON[_0x0a9e('0x41')](_0xc9a702));return{'source':_0xc9a702[_0x0a9e('0x42')][_0x0a9e('0x43')],'resolvedQuery':_0xc9a702[_0x0a9e('0x42')][_0x0a9e('0x44')],'action':_0xc9a702['result'][_0x0a9e('0x45')],'actionIncomplete':_0xc9a702[_0x0a9e('0x42')][_0x0a9e('0x46')],'speech':_0xc9a702[_0x0a9e('0x42')][_0x0a9e('0x47')][_0x0a9e('0x48')],'score':_0xc9a702[_0x0a9e('0x42')][_0x0a9e('0x49')],'statusCode':_0xc9a702['status'][_0x0a9e('0x4a')],'endConversation':_0xc9a702['result'][_0x0a9e('0x4b')][_0x0a9e('0x4c')]||![],'isFallbackIntent':_0xc9a702[_0x0a9e('0x42')]['metadata'][_0x0a9e('0x4d')]};});};exports[_0x0a9e('0x4e')]=function(_0x4774f4,_0x34aa5a,_0x45c845,_0x37be73){return tilde[_0x0a9e('0x32')](_0x4774f4,_0x34aa5a,_0x45c845,_0x37be73)['then'](function(_0x13f44d){try{fs[_0x0a9e('0x19')](_0x4774f4);}catch(_0x1b5e80){logger[_0x0a9e('0x18')](_0x1b5e80);}logger[_0x0a9e('0x16')](_0x0a9e('0x4f'),_0x13f44d[_0x0a9e('0x36')]);logger[_0x0a9e('0x16')](_0x0a9e('0x50'),_0x13f44d['confidence']);return _0x13f44d;});};exports[_0x0a9e('0x51')]=function(_0x3fe430,_0x4f7240,_0x4ae14b,_0x5ddf84,_0x1adfee,_0x4317e3){var _0x37edaa=path[_0x0a9e('0x24')](__dirname,_0x0a9e('0x25'),rs[_0x0a9e('0x26')](0x4)+_0x0a9e('0x2f'));var _0x375c18;return aws['polly'](_0x3fe430,_0x4f7240,_0x4ae14b,_0x5ddf84,_0x1adfee,_0x4317e3,_0x37edaa)['then'](function(){_0x375c18=path['resolve'](__dirname,_0x0a9e('0x25'),rs[_0x0a9e('0x26')](0x4)+_0x0a9e('0x27'));return convertFile(_0x37edaa,_0x375c18);})['then'](function(){try{fs[_0x0a9e('0x19')](_0x37edaa);fs[_0x0a9e('0x2a')](_0x375c18,'777');}catch(_0x5a88da){logger[_0x0a9e('0x18')](_0x5a88da);}return _0x375c18['split']('.')[0x0];});};exports[_0x0a9e('0x52')]=function(_0x4c3845,_0x2e5e62,_0x3c20b2,_0x439340,_0x53613a,_0x2f82da){return aws[_0x0a9e('0x53')](_0x4c3845,_0x2e5e62,_0x3c20b2,_0x439340,_0x53613a,_0x2f82da)['then'](function(_0x50f687){logger[_0x0a9e('0x16')](JSON[_0x0a9e('0x41')](_0x50f687));return _0x50f687;});};exports['ispeechTTS']=function(_0x145931,_0x5ce9ac,_0x211ef9,_0x523cd2){var _0xe22ccc=util['format']('%s?apikey=%s&action=convert&text=%s&voice=%s&speed=%s&format=mp3',ISPEECH_API,_0x145931,encodeURIComponent(_0x5ce9ac),_0x211ef9,_0x523cd2);var _0x5df0ad=path[_0x0a9e('0x24')](__dirname,'tmp',rs[_0x0a9e('0x26')](0x4)+_0x0a9e('0x2f'));var _0x3cfd00;return downloadFile(_0xe22ccc,_0x5df0ad)[_0x0a9e('0x29')](function(){_0x3cfd00=path[_0x0a9e('0x24')](__dirname,_0x0a9e('0x25'),rs[_0x0a9e('0x26')](0x4)+_0x0a9e('0x27'));return convertFile(_0x5df0ad,_0x3cfd00);})['then'](function(){try{fs[_0x0a9e('0x19')](_0x5df0ad);fs[_0x0a9e('0x2a')](_0x3cfd00,_0x0a9e('0x2b'));}catch(_0x30c491){logger[_0x0a9e('0x18')](_0x30c491);}return _0x3cfd00[_0x0a9e('0x2c')]('.')[0x0];});};exports['ispeechASR']=function(_0x956fbe,_0x26bc80,_0x5239ef,_0x3649cc){var _0x5cc8fb=util[_0x0a9e('0x54')]('%s?apikey=%s&action=recognize&locale=%s&content-type=audio/x-wav&audio=%s&%s',ISPEECH_API,_0x26bc80,_0x5239ef,base64Encode(_0x956fbe),_0x3649cc?util['format']('model=%s',encodeURIComponent(_0x3649cc)):_0x0a9e('0x55'));return uploadFile(_0x5cc8fb)['then'](function(_0x2244d6){return querystring[_0x0a9e('0x56')](_0x2244d6);});};exports[_0x0a9e('0x57')]=function(_0x7be420,_0x1cca9f){return sestek[_0x0a9e('0x58')](_0x7be420,_0x1cca9f)['then'](function(_0x1627a7){logger['info'](JSON[_0x0a9e('0x41')](_0x1627a7));var _0x1f07cb={'speech':_0x1627a7[_0x0a9e('0x59')],'action':_0x1627a7['channelData']?_0x1627a7[_0x0a9e('0x5a')][_0x0a9e('0x5b')]:undefined,'actiondata':_0x1627a7[_0x0a9e('0x5a')]?_0x1627a7[_0x0a9e('0x5a')]['CustomActionData']:undefined};if(_0x1627a7[_0x0a9e('0x5a')]&&_0x1627a7[_0x0a9e('0x5a')]['AudioFromTts']){return base64Decode(_0x1627a7[_0x0a9e('0x5a')][_0x0a9e('0x5c')][_0x0a9e('0x5d')],path[_0x0a9e('0x24')](__dirname,_0x0a9e('0x25'),rs['generate'](0x4)+_0x0a9e('0x27')))[_0x0a9e('0x29')](function(_0x281c7d){_0x1f07cb['audiofile']=_0x281c7d;return _0x1f07cb;});}return _0x1f07cb;});};exports[_0x0a9e('0x5e')]=function(){return __dirname;};
\ No newline at end of file
index 70c5430..e7349f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2ac0=['exports'];(function(_0x384231,_0x50be41){var _0x2480bf=function(_0x1c4838){while(--_0x1c4838){_0x384231['push'](_0x384231['shift']());}};_0x2480bf(++_0x50be41);}(_0x2ac0,0x14b));var _0x02ac=function(_0xedabab,_0x1d8099){_0xedabab=_0xedabab-0x0;var _0x4e8004=_0x2ac0[_0xedabab];return _0x4e8004;};var nda=require('./nda');module[_0x02ac('0x0')]={'nda':nda};
\ No newline at end of file
+var _0x9810=['./nda'];(function(_0x34b948,_0x39c51a){var _0x4fe19d=function(_0x57ec44){while(--_0x57ec44){_0x34b948['push'](_0x34b948['shift']());}};_0x4fe19d(++_0x39c51a);}(_0x9810,0x184));var _0x0981=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x9810[_0x3b380d];return _0x54502b;};var nda=require(_0x0981('0x0'));module['exports']={'nda':nda};
\ No newline at end of file
index 17c349d..dbcc373 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x50f0=['project','body','channelData','ProjectName','ndagenerate_audio','AudioOutputSettings','audio/wav','custom_action','CustomAction','CustomActionData','custom_action_data','stringify','request-promise','url','agi','exports','POST','ndauth_url','/token','password','ndassistant_url','/api/NaturalDialogAssistant/v1/Run','ndaactivity_type','message','Nda','callerid','calleridname','extension','text'];(function(_0x4dda69,_0x2a0fe4){var _0x9014a9=function(_0x3d2b40){while(--_0x3d2b40){_0x4dda69['push'](_0x4dda69['shift']());}};_0x9014a9(++_0x2a0fe4);}(_0x50f0,0x185));var _0x050f=function(_0x3f2fea,_0x3c4ea8){_0x3f2fea=_0x3f2fea-0x0;var _0x69a4d5=_0x50f0[_0x3f2fea];return _0x69a4d5;};'use strict';var rp=require(_0x050f('0x0'));var url=require(_0x050f('0x1'));var logger=require('../../../../../config/logger')(_0x050f('0x2'));module[_0x050f('0x3')]=function(_0x15de91,_0x37d9e2){var _0x253e39={'method':_0x050f('0x4'),'uri':url['resolve'](_0x37d9e2[_0x050f('0x5')],_0x050f('0x6')),'form':{'grant_type':_0x050f('0x7'),'username':_0x37d9e2['username'],'password':_0x37d9e2['password']},'json':!![]};return rp(_0x253e39)['then'](function(_0x4c536c){var _0x509fa6={'method':_0x050f('0x4'),'uri':url['resolve'](_0x37d9e2[_0x050f('0x8')],_0x050f('0x9')),'body':{'type':_0x37d9e2[_0x050f('0xa')]||_0x050f('0xb'),'channelId':_0x050f('0xc'),'conversation':{'id':_0x15de91['uniqueid']},'from':{'id':_0x15de91[_0x050f('0xd')],'name':_0x15de91[_0x050f('0xe')]},'recipient':{'id':_0x15de91['dnid'],'name':_0x15de91[_0x050f('0xf')]},'text':_0x37d9e2[_0x050f('0x10')],'channelData':{}},'headers':{'Authorization':'Bearer\x20'+_0x4c536c['access_token']},'json':!![]};if(_0x37d9e2[_0x050f('0x11')]){_0x509fa6[_0x050f('0x12')][_0x050f('0x13')][_0x050f('0x14')]=_0x37d9e2[_0x050f('0x11')];}if(_0x37d9e2[_0x050f('0x15')]=='1'){_0x509fa6[_0x050f('0x12')][_0x050f('0x13')][_0x050f('0x16')]={'Generate':!![],'PutInStructuredPart':![],'ExpectedFormat':_0x050f('0x17')};}if(_0x37d9e2[_0x050f('0x18')]){_0x509fa6[_0x050f('0x12')][_0x050f('0x13')][_0x050f('0x19')]=_0x37d9e2[_0x050f('0x18')];if(_0x37d9e2['custom_action_data']){_0x509fa6[_0x050f('0x12')][_0x050f('0x13')][_0x050f('0x1a')]=_0x37d9e2[_0x050f('0x1b')];}}logger['info'](JSON[_0x050f('0x1c')](_0x509fa6));return rp(_0x509fa6);});};
\ No newline at end of file
+var _0xe8c6=['message','uniqueid','callerid','calleridname','dnid','text','access_token','project','body','channelData','ProjectName','ndagenerate_audio','audio/wav','custom_action','CustomAction','stringify','request-promise','url','../../../../../config/logger','agi','resolve','ndauth_url','password','username','then','POST','ndassistant_url','/api/NaturalDialogAssistant/v1/Run','ndaactivity_type'];(function(_0x26530e,_0x3e0146){var _0x467c23=function(_0x3daa25){while(--_0x3daa25){_0x26530e['push'](_0x26530e['shift']());}};_0x467c23(++_0x3e0146);}(_0xe8c6,0x115));var _0x6e8c=function(_0x731aa2,_0x30a2de){_0x731aa2=_0x731aa2-0x0;var _0xf3690a=_0xe8c6[_0x731aa2];return _0xf3690a;};'use strict';var rp=require(_0x6e8c('0x0'));var url=require(_0x6e8c('0x1'));var logger=require(_0x6e8c('0x2'))(_0x6e8c('0x3'));module['exports']=function(_0xa59d79,_0x120f02){var _0x3fde73={'method':'POST','uri':url[_0x6e8c('0x4')](_0x120f02[_0x6e8c('0x5')],'/token'),'form':{'grant_type':_0x6e8c('0x6'),'username':_0x120f02[_0x6e8c('0x7')],'password':_0x120f02[_0x6e8c('0x6')]},'json':!![]};return rp(_0x3fde73)[_0x6e8c('0x8')](function(_0x1e9109){var _0x563bda={'method':_0x6e8c('0x9'),'uri':url[_0x6e8c('0x4')](_0x120f02[_0x6e8c('0xa')],_0x6e8c('0xb')),'body':{'type':_0x120f02[_0x6e8c('0xc')]||_0x6e8c('0xd'),'channelId':'Nda','conversation':{'id':_0xa59d79[_0x6e8c('0xe')]},'from':{'id':_0xa59d79[_0x6e8c('0xf')],'name':_0xa59d79[_0x6e8c('0x10')]},'recipient':{'id':_0xa59d79[_0x6e8c('0x11')],'name':_0xa59d79['extension']},'text':_0x120f02[_0x6e8c('0x12')],'channelData':{}},'headers':{'Authorization':'Bearer\x20'+_0x1e9109[_0x6e8c('0x13')]},'json':!![]};if(_0x120f02[_0x6e8c('0x14')]){_0x563bda[_0x6e8c('0x15')][_0x6e8c('0x16')][_0x6e8c('0x17')]=_0x120f02['project'];}if(_0x120f02[_0x6e8c('0x18')]=='1'){_0x563bda['body'][_0x6e8c('0x16')]['AudioOutputSettings']={'Generate':!![],'PutInStructuredPart':![],'ExpectedFormat':_0x6e8c('0x19')};}if(_0x120f02[_0x6e8c('0x1a')]){_0x563bda[_0x6e8c('0x15')][_0x6e8c('0x16')][_0x6e8c('0x1b')]=_0x120f02[_0x6e8c('0x1a')];if(_0x120f02['custom_action_data']){_0x563bda['body'][_0x6e8c('0x16')]['CustomActionData']=_0x120f02['custom_action_data'];}}logger['info'](JSON[_0x6e8c('0x1c')](_0x563bda));return rp(_0x563bda);});};
\ No newline at end of file
index 14a2012..d42577b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5944=['./lib/api','exports'];(function(_0x590707,_0x1be657){var _0x169f36=function(_0x478677){while(--_0x478677){_0x590707['push'](_0x590707['shift']());}};_0x169f36(++_0x1be657);}(_0x5944,0x8c));var _0x4594=function(_0x4243a3,_0x447337){_0x4243a3=_0x4243a3-0x0;var _0x1b2a33=_0x5944[_0x4243a3];return _0x1b2a33;};'use strict';var asr=require(_0x4594('0x0'));module[_0x4594('0x1')]=function(_0x7ecb38,_0xe2cab0,_0x56f471,_0x29e55d){return asr(_0x7ecb38,_0xe2cab0,_0x56f471,_0x29e55d);};
\ No newline at end of file
+var _0x6997=['exports','./lib/api'];(function(_0x35d542,_0xd1c5b8){var _0x1ca7ff=function(_0x20bf9a){while(--_0x20bf9a){_0x35d542['push'](_0x35d542['shift']());}};_0x1ca7ff(++_0xd1c5b8);}(_0x6997,0x1c5));var _0x7699=function(_0x4238aa,_0x3f483c){_0x4238aa=_0x4238aa-0x0;var _0x265647=_0x6997[_0x4238aa];return _0x265647;};'use strict';var asr=require(_0x7699('0x0'));module[_0x7699('0x1')]=function(_0x386964,_0x1e34c6,_0x3b1bb9,_0x592cd8){return asr(_0x386964,_0x1e34c6,_0x3b1bb9,_0x592cd8);};
\ No newline at end of file
index 508c1f9..c299b52 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4f2a=['isNil','isObject','open','message','close','bluebird','lodash','crypto','exports','info','Tilde\x20URI','wss://runa.tilde.lv/client/ws/speech/LVASR-ONLINE','No\x20speech.\x20Sent\x20when\x20the\x20incoming\x20audio\x20contains\x20a\x20large\x20portion\x20of\x20silence\x20or\x20non-speech','update','digest','hex','unix','send','createReadStream','data','EOS','error','Tilde\x20ASR\x20send\x20error','terminate','parse','result','Tilde\x20ASR\x20hypoteses','stringify','hypotheses','transcript','Success.','Aborted.\x20Recognition\x20was\x20aborted\x20for\x20some\x20reason.','Not\x20available.\x20Max\x20load\x20limit\x20reached.','Authentication\x20failed.','All\x20recognition\x20workers\x20are\x20currently\x20in\x20use\x20and\x20real-time\x20recognition\x20is\x20not\x20possible.','Tilde\x20ASR\x20parse\x20error','Close\x20Tilde\x20ASR\x20socket'];(function(_0x2962b4,_0x4b0786){var _0x411b7d=function(_0x363aad){while(--_0x363aad){_0x2962b4['push'](_0x2962b4['shift']());}};_0x411b7d(++_0x4b0786);}(_0x4f2a,0x1c1));var _0xa4f2=function(_0x387dc1,_0x3ba649){_0x387dc1=_0x387dc1-0x0;var _0x17567c=_0x4f2a[_0x387dc1];return _0x17567c;};'use strict';var BPromise=require(_0xa4f2('0x0'));var _=require(_0xa4f2('0x1'));var fs=require('fs');var WebSocket=require('ws');var moment=require('moment');var crypto=require(_0xa4f2('0x2'));var logger=require('../../../../../../config/logger')('agi');module[_0xa4f2('0x3')]=function(_0x2b82a4,_0x2719ca,_0x4a56fe,_0x1aa185){return new BPromise(function(_0x36d164,_0x22b861){logger[_0xa4f2('0x4')](_0xa4f2('0x5'),_0x1aa185||_0xa4f2('0x6'));var _0x78b9ce=new WebSocket(_0x1aa185||_0xa4f2('0x6'),{'perMessageDeflate':![]});var _0x580040='';var _0x45b36d='0';var _0x52c827='1';var _0x227fb4=_0xa4f2('0x7');function _0x168dce(_0x17a251){var _0x59b519=crypto['createHash']('sha1');_0x59b519[_0xa4f2('0x8')](_0x17a251);return _0x59b519[_0xa4f2('0x9')](_0xa4f2('0xa'));}function _0x105cd9(){try{logger[_0xa4f2('0x4')]('Open\x20Tilde\x20ASR\x20socket');var _0x37b009=moment()[_0xa4f2('0xb')]();var _0x168657=_0x168dce(_0x37b009+_0x2719ca+_0x4a56fe);_0x78b9ce[_0xa4f2('0xc')](JSON['stringify']({'appID':_0x2719ca,'timestamp':_0x37b009,'appKey':_0x168657}));var _0x5869f9=fs[_0xa4f2('0xd')](_0x2b82a4);_0x5869f9['on'](_0xa4f2('0xe'),function(_0x2fc331){_0x78b9ce['send'](_0x2fc331);});_0x5869f9['on']('close',function(){_0x78b9ce[_0xa4f2('0xc')](_0xa4f2('0xf'));});}catch(_0x5610a2){logger[_0xa4f2('0x10')](_0xa4f2('0x11'),JSON['stringify'](_0x5610a2));_0x78b9ce[_0xa4f2('0x12')]();}}function _0x2323a6(_0x399b48){try{if(_0x399b48){var _0x504227=JSON[_0xa4f2('0x13')](_0x399b48);switch(_0x504227['status']){case 0x0:if(_0x504227['result']){if(_0x504227[_0xa4f2('0x14')]['final']){logger[_0xa4f2('0x4')](_0xa4f2('0x15'),JSON[_0xa4f2('0x16')](_0x504227['result']['hypotheses']));_0x580040=_0x504227['result'][_0xa4f2('0x17')][0x0][_0xa4f2('0x18')];_0x45b36d=_0x504227[_0xa4f2('0x14')][_0xa4f2('0x17')][0x0]['likelihood'];_0x52c827='0';_0x227fb4=_0xa4f2('0x19');_0x78b9ce['terminate']();}}break;case 0x1:logger['info'](_0xa4f2('0x7'));_0x52c827='1';_0x227fb4=_0xa4f2('0x7');break;case 0x2:logger[_0xa4f2('0x4')](_0xa4f2('0x1a'));_0x52c827='2';_0x227fb4=_0xa4f2('0x1a');break;case 0x9:logger[_0xa4f2('0x4')](_0xa4f2('0x1b'));_0x52c827='9';_0x227fb4=_0xa4f2('0x1b');break;case 0xa:logger[_0xa4f2('0x4')](_0xa4f2('0x1c'));_0x52c827='10';_0x227fb4=_0xa4f2('0x1c');break;case 0xb:logger[_0xa4f2('0x4')](_0xa4f2('0x1d'));_0x52c827='11';_0x227fb4=_0xa4f2('0x1d');}}}catch(_0x121267){logger[_0xa4f2('0x10')](_0xa4f2('0x1e'),JSON[_0xa4f2('0x16')](_0x121267));_0x78b9ce['terminate']();}}function _0x49c2fc(){logger[_0xa4f2('0x4')](_0xa4f2('0x1f'));_0x36d164({'transcript':_0x580040,'confidence':_0x45b36d,'status':_0x52c827,'status_message':_0x227fb4});}function _0xa60648(_0x322306){logger['error']('Error\x20Tilde\x20ASR\x20socket');if(!_[_0xa4f2('0x20')](_0x322306)){logger[_0xa4f2('0x10')](_[_0xa4f2('0x21')](_0x322306)?JSON[_0xa4f2('0x16')](_0x322306):_0x322306);}}_0x78b9ce['on'](_0xa4f2('0x22'),_0x105cd9);_0x78b9ce['on'](_0xa4f2('0x23'),_0x2323a6);_0x78b9ce['on'](_0xa4f2('0x24'),_0x49c2fc);_0x78b9ce['on'](_0xa4f2('0x10'),_0xa60648);});};
\ No newline at end of file
+var _0x264a=['stringify','createReadStream','data','close','error','Tilde\x20ASR\x20send\x20error','terminate','status','result','final','hypotheses','likelihood','Aborted.\x20Recognition\x20was\x20aborted\x20for\x20some\x20reason.','Not\x20available.\x20Max\x20load\x20limit\x20reached.','Authentication\x20failed.','All\x20recognition\x20workers\x20are\x20currently\x20in\x20use\x20and\x20real-time\x20recognition\x20is\x20not\x20possible.','Close\x20Tilde\x20ASR\x20socket','Error\x20Tilde\x20ASR\x20socket','isObject','open','message','lodash','moment','crypto','../../../../../../config/logger','exports','info','Tilde\x20URI','wss://runa.tilde.lv/client/ws/speech/LVASR-ONLINE','No\x20speech.\x20Sent\x20when\x20the\x20incoming\x20audio\x20contains\x20a\x20large\x20portion\x20of\x20silence\x20or\x20non-speech','createHash','sha1','digest','unix','send'];(function(_0x126558,_0x143c9a){var _0x1f6d14=function(_0x2b0eea){while(--_0x2b0eea){_0x126558['push'](_0x126558['shift']());}};_0x1f6d14(++_0x143c9a);}(_0x264a,0x1b9));var _0xa264=function(_0x23d253,_0x3872e0){_0x23d253=_0x23d253-0x0;var _0x106362=_0x264a[_0x23d253];return _0x106362;};'use strict';var BPromise=require('bluebird');var _=require(_0xa264('0x0'));var fs=require('fs');var WebSocket=require('ws');var moment=require(_0xa264('0x1'));var crypto=require(_0xa264('0x2'));var logger=require(_0xa264('0x3'))('agi');module[_0xa264('0x4')]=function(_0x448fce,_0x45f8f5,_0x30e76e,_0x2518af){return new BPromise(function(_0x66ef48,_0x4df406){logger[_0xa264('0x5')](_0xa264('0x6'),_0x2518af||_0xa264('0x7'));var _0x52376a=new WebSocket(_0x2518af||_0xa264('0x7'),{'perMessageDeflate':![]});var _0x40b854='';var _0x5b2bde='0';var _0x5247f7='1';var _0x26e319=_0xa264('0x8');function _0x29435b(_0x11b406){var _0x587654=crypto[_0xa264('0x9')](_0xa264('0xa'));_0x587654['update'](_0x11b406);return _0x587654[_0xa264('0xb')]('hex');}function _0x59fc2d(){try{logger[_0xa264('0x5')]('Open\x20Tilde\x20ASR\x20socket');var _0x46698d=moment()[_0xa264('0xc')]();var _0x4c15be=_0x29435b(_0x46698d+_0x45f8f5+_0x30e76e);_0x52376a[_0xa264('0xd')](JSON[_0xa264('0xe')]({'appID':_0x45f8f5,'timestamp':_0x46698d,'appKey':_0x4c15be}));var _0x63cd4c=fs[_0xa264('0xf')](_0x448fce);_0x63cd4c['on'](_0xa264('0x10'),function(_0x3d747d){_0x52376a[_0xa264('0xd')](_0x3d747d);});_0x63cd4c['on'](_0xa264('0x11'),function(){_0x52376a['send']('EOS');});}catch(_0xd46a91){logger[_0xa264('0x12')](_0xa264('0x13'),JSON['stringify'](_0xd46a91));_0x52376a[_0xa264('0x14')]();}}function _0x15f33e(_0x3ee053){try{if(_0x3ee053){var _0x128130=JSON['parse'](_0x3ee053);switch(_0x128130[_0xa264('0x15')]){case 0x0:if(_0x128130[_0xa264('0x16')]){if(_0x128130[_0xa264('0x16')][_0xa264('0x17')]){logger[_0xa264('0x5')]('Tilde\x20ASR\x20hypoteses',JSON[_0xa264('0xe')](_0x128130[_0xa264('0x16')][_0xa264('0x18')]));_0x40b854=_0x128130[_0xa264('0x16')][_0xa264('0x18')][0x0]['transcript'];_0x5b2bde=_0x128130[_0xa264('0x16')][_0xa264('0x18')][0x0][_0xa264('0x19')];_0x5247f7='0';_0x26e319='Success.';_0x52376a[_0xa264('0x14')]();}}break;case 0x1:logger['info'](_0xa264('0x8'));_0x5247f7='1';_0x26e319=_0xa264('0x8');break;case 0x2:logger[_0xa264('0x5')](_0xa264('0x1a'));_0x5247f7='2';_0x26e319=_0xa264('0x1a');break;case 0x9:logger[_0xa264('0x5')]('Not\x20available.\x20Max\x20load\x20limit\x20reached.');_0x5247f7='9';_0x26e319=_0xa264('0x1b');break;case 0xa:logger['info'](_0xa264('0x1c'));_0x5247f7='10';_0x26e319=_0xa264('0x1c');break;case 0xb:logger['info']('All\x20recognition\x20workers\x20are\x20currently\x20in\x20use\x20and\x20real-time\x20recognition\x20is\x20not\x20possible.');_0x5247f7='11';_0x26e319=_0xa264('0x1d');}}}catch(_0x6ab7ae){logger['error']('Tilde\x20ASR\x20parse\x20error',JSON[_0xa264('0xe')](_0x6ab7ae));_0x52376a[_0xa264('0x14')]();}}function _0x3e07f2(){logger['info'](_0xa264('0x1e'));_0x66ef48({'transcript':_0x40b854,'confidence':_0x5b2bde,'status':_0x5247f7,'status_message':_0x26e319});}function _0x3c616a(_0x27586d){logger['error'](_0xa264('0x1f'));if(!_['isNil'](_0x27586d)){logger[_0xa264('0x12')](_[_0xa264('0x20')](_0x27586d)?JSON['stringify'](_0x27586d):_0x27586d);}}_0x52376a['on'](_0xa264('0x21'),_0x59fc2d);_0x52376a['on'](_0xa264('0x22'),_0x15f33e);_0x52376a['on'](_0xa264('0x11'),_0x3e07f2);_0x52376a['on']('error',_0x3c616a);});};
\ No newline at end of file
index e62ff4d..127e3ba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xedd9=['exports'];(function(_0x9d3167,_0x1fff8f){var _0x2da615=function(_0x46de0a){while(--_0x46de0a){_0x9d3167['push'](_0x9d3167['shift']());}};_0x2da615(++_0x1fff8f);}(_0xedd9,0xfc));var _0x9edd=function(_0x26ce22,_0x32506d){_0x26ce22=_0x26ce22-0x0;var _0x152b34=_0xedd9[_0x26ce22];return _0x152b34;};var asr=require('./asr');module[_0x9edd('0x0')]={'asr':asr};
\ No newline at end of file
+var _0x70e0=['exports','./asr'];(function(_0x3b632f,_0x453380){var _0x10e788=function(_0x2228a4){while(--_0x2228a4){_0x3b632f['push'](_0x3b632f['shift']());}};_0x10e788(++_0x453380);}(_0x70e0,0x17b));var _0x070e=function(_0x2c4458,_0x5e6f44){_0x2c4458=_0x2c4458-0x0;var _0x3d1c37=_0x70e0[_0x2c4458];return _0x3d1c37;};var asr=require(_0x070e('0x0'));module[_0x070e('0x1')]={'asr':asr};
\ No newline at end of file
index f79a565..7946dc1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb78d=['E_AGI_ARGUMENT_PORT','createServer','listening','connection','E_AGI_SERVER_ERROR','E_AGI_SERVER_VOICE_DISABLED','destroy','ready','code','close','nextTick','inherits','exports','util','EventEmitter','./error','./channel','127.0.0.1','emit','error'];(function(_0x119d5a,_0x19b457){var _0x15bff4=function(_0x1b7c78){while(--_0x1b7c78){_0x119d5a['push'](_0x119d5a['shift']());}};_0x15bff4(++_0x19b457);}(_0xb78d,0x14d));var _0xdb78=function(_0x4d5f4f,_0x354d39){_0x4d5f4f=_0x4d5f4f-0x0;var _0x40fc76=_0xb78d[_0x4d5f4f];return _0x40fc76;};'use strict';var util=require(_0xdb78('0x0'));var net=require('net');var EventEmitter=require('events')[_0xdb78('0x1')];var AGIError=require(_0xdb78('0x2'));var AGIChannel=require(_0xdb78('0x3'));var AGIServer=function(_0x5ad0f1,_0x844fee,_0x58518d){var _0x1bab18=this,_0x5ad0f1=_0x5ad0f1||0x11dd,_0x844fee=_0x844fee||_0xdb78('0x4'),_0x3d9909=null,_0x143239=0x0;EventEmitter['call'](_0x1bab18);function _0xd1bdbc(){if(!_0x5ad0f1){_0x1bab18[_0xdb78('0x5')](_0xdb78('0x6'),new AGIError(_0xdb78('0x7')));return![];}_0x3d9909=net[_0xdb78('0x8')]();_0x3d9909['listen'](_0x5ad0f1,_0x844fee);_0x3d9909['on'](_0xdb78('0x9'),function(){_0x1bab18[_0xdb78('0x5')](_0xdb78('0x9'));});_0x3d9909['on'](_0xdb78('0xa'),function(_0x386ef5){_0x3d9909['getConnections'](function(_0x222dbb,_0x31da51){if(_0x222dbb){_0x1bab18[_0xdb78('0x5')](_0xdb78('0x6'),new AGIError(_0xdb78('0xb'),_0x222dbb));}else if(_0x58518d&&_0x58518d<0x0){_0x1bab18[_0xdb78('0x5')](_0xdb78('0x6'),new AGIError(_0xdb78('0xc')));_0x386ef5[_0xdb78('0xd')]();}else if(_0x58518d&&_0x58518d>0x0&&_0x58518d<_0x31da51){_0x143239+=0x1;_0x1bab18[_0xdb78('0x5')](_0xdb78('0x6'),new AGIError('E_AGI_SERVER_MAXCONNECTION',_0x143239));_0x386ef5[_0xdb78('0xd')]();}else{var _0x31a9d2=new AGIChannel(_0x386ef5);_0x31a9d2['on'](_0xdb78('0xe'),function(){_0x1bab18[_0xdb78('0x5')](_0xdb78('0xa'),_0x31a9d2);});}});});_0x3d9909['on'](_0xdb78('0x6'),function(_0x257e66){_0x1bab18['emit'](_0xdb78('0x6'),new AGIError('E_AGI_SERVER_ERROR',_0x257e66[_0xdb78('0xf')]));});_0x3d9909['on']('close',function(){_0x1bab18[_0xdb78('0x5')](_0xdb78('0x10'),new AGIError('E_AGI_SERVER_CLOSE'));});}process[_0xdb78('0x11')](function(){_0xd1bdbc();});};util[_0xdb78('0x12')](AGIServer,EventEmitter);module[_0xdb78('0x13')]=function(_0x576228,_0x9d247a,_0x364a9c){return new AGIServer(_0x576228,_0x9d247a,_0x364a9c);};
\ No newline at end of file
+var _0xc627=['EventEmitter','./error','./channel','127.0.0.1','emit','error','E_AGI_ARGUMENT_PORT','createServer','listen','listening','connection','E_AGI_SERVER_VOICE_DISABLED','destroy','E_AGI_SERVER_MAXCONNECTION','ready','E_AGI_SERVER_ERROR','close','nextTick','util','net','events'];(function(_0x48b0ad,_0x1f69e7){var _0xde8051=function(_0x56f84e){while(--_0x56f84e){_0x48b0ad['push'](_0x48b0ad['shift']());}};_0xde8051(++_0x1f69e7);}(_0xc627,0x90));var _0x7c62=function(_0x3794b1,_0x3b8042){_0x3794b1=_0x3794b1-0x0;var _0x494f2f=_0xc627[_0x3794b1];return _0x494f2f;};'use strict';var util=require(_0x7c62('0x0'));var net=require(_0x7c62('0x1'));var EventEmitter=require(_0x7c62('0x2'))[_0x7c62('0x3')];var AGIError=require(_0x7c62('0x4'));var AGIChannel=require(_0x7c62('0x5'));var AGIServer=function(_0x28e081,_0x1ee718,_0x27229b){var _0x63634f=this,_0x28e081=_0x28e081||0x11dd,_0x1ee718=_0x1ee718||_0x7c62('0x6'),_0x512f79=null,_0x1a8740=0x0;EventEmitter['call'](_0x63634f);function _0x7f9ee4(){if(!_0x28e081){_0x63634f[_0x7c62('0x7')](_0x7c62('0x8'),new AGIError(_0x7c62('0x9')));return![];}_0x512f79=net[_0x7c62('0xa')]();_0x512f79[_0x7c62('0xb')](_0x28e081,_0x1ee718);_0x512f79['on'](_0x7c62('0xc'),function(){_0x63634f[_0x7c62('0x7')]('listening');});_0x512f79['on'](_0x7c62('0xd'),function(_0x288de1){_0x512f79['getConnections'](function(_0x3712d5,_0x413f2d){if(_0x3712d5){_0x63634f[_0x7c62('0x7')]('error',new AGIError('E_AGI_SERVER_ERROR',_0x3712d5));}else if(_0x27229b&&_0x27229b<0x0){_0x63634f[_0x7c62('0x7')]('error',new AGIError(_0x7c62('0xe')));_0x288de1[_0x7c62('0xf')]();}else if(_0x27229b&&_0x27229b>0x0&&_0x27229b<_0x413f2d){_0x1a8740+=0x1;_0x63634f['emit'](_0x7c62('0x8'),new AGIError(_0x7c62('0x10'),_0x1a8740));_0x288de1[_0x7c62('0xf')]();}else{var _0x3adbbd=new AGIChannel(_0x288de1);_0x3adbbd['on'](_0x7c62('0x11'),function(){_0x63634f[_0x7c62('0x7')](_0x7c62('0xd'),_0x3adbbd);});}});});_0x512f79['on'](_0x7c62('0x8'),function(_0x1768da){_0x63634f['emit'](_0x7c62('0x8'),new AGIError(_0x7c62('0x12'),_0x1768da['code']));});_0x512f79['on']('close',function(){_0x63634f[_0x7c62('0x7')](_0x7c62('0x13'),new AGIError('E_AGI_SERVER_CLOSE'));});}process[_0x7c62('0x14')](function(){_0x7f9ee4();});};util['inherits'](AGIServer,EventEmitter);module['exports']=function(_0x59e5cd,_0x28c826,_0xd1c47e){return new AGIServer(_0x59e5cd,_0x28c826,_0xd1c47e);};
\ No newline at end of file
index e34aa53..b9b29d2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd582=['getTrunk','getTrunkById','getSound','getMailAccount','getMailAccountById','sendMailMessage','getIntervalById','interval','Intervals','format','%s/sounds/converted/%s','getQueryOdbc','open','error','Error\x20getting\x20ODBC\x20connection\x20%s','info','ODBC\x20connection\x20successfully','query','Error\x20executing\x20query\x20%s','Query\x20executed\x20correctly\x20%s','Error\x20closing\x20connection\x20to\x20odbc\x20%s','getSmsAccount','getSmsAccountById','createSmsMessage','createSquareDetailsReport','uniqueid','callerid','createSquareRecording','calleridname','extension','priority','dnid','arg_1','file','createSquareMessage','createCmContact','isEmpty','isNil','random','lastName','phone','list_id','callback','Callback\x20scheduled\x20at\x20','scheduledAt','toString','getPauseById','agentPause','agent','agentUnpause','agentLogout','internal','LOCAL','agentLogin','shellCommand','exec','trim','googleTTS','text','google_tts_language','googleDialogflow','key','dialogflow_language','sestekNDA','ispeechTTS','ispeech_tts_language','en-US','speed','ispeechASR','ispeech_asr_language','isConfigured','model','awsPolly','aws_access_key_id','aws_polly_region','aws_polly_voice','Amy','aws_text_type','awsLex','aws_secret_access_key','aws_lex_region','aws_bot_name','googleASR','tildeASR','appid','appsecret','uri','includes','agicommand','isString','replaceAllVariables','split','length','getAndSetVariable','getVariable','result','extra','setVariable','maxRetry','sync','retry','Enter\x20in\x20AGI\x20(%s)\x20block','label','command','args','answer','Enter\x20in\x20ANSWER\x20(%s)\x20block','timeout','Wait\x20%s\x20seconds\x20before\x20answer','Enter\x20in\x20CALLBACK\x20(%s)\x20block','no\x20list\x20selected','add','minutes','callback_priority','noop','CALLBACK\x20added\x20phone:\x20%s\x20on\x20list:\x20%s\x20at\x20%s','custom_app','Enter\x20in\x20CUSTOM\x20APP\x20(%s)\x20block','application','options','Executed\x20command\x20%s\x20%s','no\x20text\x20configured','Executed\x20command\x20MRCPSynth\x20%s','sestektts','Enter\x20in\x20SESTEKTTS\x20(%s)\x20block','MRCPSynth','lumenvoxasr','Enter\x20in\x20LUMENVOXASR\x20(%s)\x20block','grammar','no\x20grammar\x20configured','RECOG_CONFIDENCE()','RECOG_INPUT()','LUMENVOX_ASR_TRANSCRIPT','LUMENVOX_ASR_INSTANCE','Executed\x20command\x20MRCPRecog\x20%s','sestekasr','Enter\x20in\x20SESTEKASR\x20(%s)\x20block','MRCPRecog','SESTEK_ASR_CONFIDENCE','RECOG_INSTANCE()','SESTEK_ASR_INSTANCE','database','Enter\x20in\x20DATABASE\x20(%s)\x20block','odbc_id','no\x20query\x20configured','replace','variable_id','no\x20variable\x20found','forEach','keys','%s[%s][%s]','variable\x20%s\x20set','debug','sip_id','no\x20user\x20selected','no\x20user\x20found','SIP/%s','opts','url','Executed\x20command\x20%s','DIAL','no\x20key\x20configured','Trying\x20Dialogflow:\x20%s','DIALOGFLOW_%s','toUpperCase','speech','out','sesteknda','ndauth_url','username','no\x20username\x20configured','no\x20password\x20configured','ndassistant_url','bot','Trying\x20SestekNDA:\x20%s','hasOwnProperty','SESTEK_NDA_%s','audiofile','Sestek\x20NDA\x20%s\x20file\x20created','unlink','SestekNDA\x20Result\x20%s','end','Enter\x20in\x20END\x20(%s)\x20block','ext_dial','trunk_id','no\x20trunk\x20selected','trunk_name','SIP/%s/%s','getdigits','Enter\x20in\x20GETDIGITS\x20(%s)\x20block','no\x20file\x20audio\x20selected','no\x20file\x20audio\x20found','no\x20variable\x20selected\x20for\x20the\x20result','getData','response','maxdigit','test','mindigit','hiddendigitsnum','hiddendigitspos','substr','generate','Enter\x20in\x20GETSECRETDIGITS\x20(%s)\x20block','goal','Enter\x20in\x20GOAL\x20(%s)\x20block','goalname','GOAL\x20%s','awspolly','[AGI]\x20Enter\x20in\x20AWSPOLLY\x20(%s)\x20block','Trying\x20aws\x20Polly\x20%s','aws\x20Polly\x20%s\x20file\x20created','streamFile','.wav','aws\x20Polly\x20is\x20unreachable','awslex','Enter\x20in\x20Amazon\x20Lex\x20(%s)\x20block','no\x20valid\x20credentials\x20configured','no\x20bot\x20name\x20configured','Trying\x20Amazon\x20Lex:\x20%s','message','googleasr','Enter\x20in\x20GOOGLEASR\x20(%s)\x20block\x20%s','beep','recordFile','intKey','GOOGLE_ASR_%s','GoogleASR\x20Result\x20%s','stringify','tildeasr','no\x20appid\x20configured','wav','%s/recordings/%s','%s.%s','NOBEEP','tilde\x20%s\x20file\x20created','TILDE_ASR_%s','TildeASR\x20Result\x20%s','Enter\x20in\x20GOTO\x20(%s)\x20block','continueAt','context','gotoif','condition','no\x20condition\x20configured','true','false','EVAL\x20CONDITION\x20%s\x20%s','gotoiftime','Enter\x20in\x20GOTOIFTIME\x20(%s)\x20block','interval_id','no\x20interval\x20configured','getIntervals','no\x20intervals\x20found','IFTIME\x20%s\x20%s','Enter\x20in\x20HANGUP\x20(%s)\x20block','ispeechasr','Enter\x20in\x20ISPEECHASR\x20(%s)\x20block','ispeech\x20%s\x20file\x20created','ISPEECH_ASR_%s','IspeechASR\x20Result\x20%s','ispeechtts','login','findBy','no\x20find\x20by\x20configured','AGENT\x20%s\x20FOUND\x20BY','success','AGENT\x20%s\x20NOT\x20FOUND\x20BY','failure','logout','math','Enter\x20in\x20MATH\x20(%s)\x20block','operation','variable\x20%s[key]\x20set','Enter\x20in\x20MENU\x20(%s)\x20block','file_id','digit','Enter\x20in\x20NOOP\x20(%s)\x20block','pause','FIND\x20AGENT\x20%s\x20BY\x20%s','getPause','pause_id','Enter\x20in\x20PLAYBACK\x20(%s)\x20block','PLAYBACK','queue','Enter\x20in\x20QUEUE\x20(%s)\x20block','queue_id','getVoiceQueue','no\x20queue\x20found','indexOf','XMCS-QUEUE','toLowerCase','position','QUEUE','record','%s_%s','RECORDING_SAVENAME','escape_digits','Enter\x20in\x20SAYDIGITS\x20(%s)\x20block','sayDigits','digits','saynumber','Enter\x20in\x20SAYNUMBER\x20(%s)\x20block','number','sayphonetic','Enter\x20in\x20SAYPHONETIC\x20(%s)\x20block','sendMail','Enter\x20in\x20SENDMAIL\x20(%s)\x20block','account_id','no\x20mail\x20account\x20configured','Smtp','\x22%s\x22\x20<%s>','email','user','subject','service','host','port','secure','authentication','auth','pass','template_id','sendMail\x20message','Trying\x20SendMail\x20with\x20account\x20%s','Enter\x20in\x20SENDFAX\x20(%s)\x20block','SENDFAX\x20block\x20not\x20implemented','sendSMS','Enter\x20in\x20SENDSMS\x20(%s)\x20block','sms_account_id','no\x20sms\x20account\x20configured','no\x20sms\x20account\x20found','sms_text','sendSMS\x20message','Sms\x20message\x20added\x20to\x20outgoing\x20process','no\x20variable\x20selected','variable_value','start','Enter\x20in\x20START\x20(%s)\x20block','START\x20CALLY\x20SQUARE','yes','Answer','Skipped\x20Answer','subproject','Enter\x20in\x20SUBPROJECT\x20(%s)\x20block','project_id','no\x20subproject\x20found\x20with\x20id\x20%d','AGI','agi://%s/square,\x22%s\x22,\x22%s\x22','127.0.0.1','Enter\x20in\x20SYSTEM\x20(%s)\x20block','sh\x20command:\x20%s\x20result\x20on\x20variable:\x20%s','tts','Enter\x20in\x20GOOGLETTS\x20(%s)\x20block','Trying\x20Google\x20TTS\x20%s','Google\x20TTS\x20%s\x20file\x20created','Google\x20TTS\x20is\x20unreachable','unpause','Enter\x20in\x20UNPAUSE\x20(%s)\x20block','voicemail','Enter\x20in\x20VOICEMAIL\x20(%s)\x20block','VOICEMAIL','mailbox','vswitch','replaceAll','join','util','shelljs','odbc','randomstring','moment','mustache','../../config/logger','agi','/var/opt/motion2/server/files','menu','getsecretdigits','channel','rpc','mailRpc','prototype','getVariableById','name','getVoiceQueueById','getSquareProject','getSquareProjectById','then','catch','getSquareOdbc','getSquareOdbcById','dsn','getUser','getUserById'];(function(_0x2eee25,_0x53460d){var _0x1cb8c4=function(_0x4dad56){while(--_0x4dad56){_0x2eee25['push'](_0x2eee25['shift']());}};_0x1cb8c4(++_0x53460d);}(_0xd582,0x16c));var _0x2d58=function(_0x225184,_0x40bc8c){_0x225184=_0x225184-0x0;var _0x384c3b=_0xd582[_0x225184];return _0x384c3b;};'use strict';var fs=require('fs');var path=require('path');var util=require(_0x2d58('0x0'));var _=require('lodash');var sh=require(_0x2d58('0x1'));var odbc=require(_0x2d58('0x2'))();var rs=require(_0x2d58('0x3'));var moment=require(_0x2d58('0x4'));var Mustache=require(_0x2d58('0x5'));var logger=require(_0x2d58('0x6'))(_0x2d58('0x7'));var config=require('../../config/environment');var scripts=require('./scripts');var FILES_PATH=_0x2d58('0x8');var verticesWithRetry=[_0x2d58('0x9'),'getdigits',_0x2d58('0xa')];var AGIVertices=function(_0x222d13,_0x40a1a0,_0x3defdd){this[_0x2d58('0xb')]=_0x222d13;this[_0x2d58('0xc')]=_0x40a1a0;this[_0x2d58('0xd')]=_0x3defdd;};AGIVertices[_0x2d58('0xe')]['getVariable']=function(_0x37a9b0,_0x5ef67e){this[_0x2d58('0xc')][_0x2d58('0xf')](_0x37a9b0)['then'](function(_0x367342){_0x5ef67e(null,_0x367342?_0x367342[_0x2d58('0x10')]:![]);})['catch'](function(_0x57bbb2){_0x5ef67e(_0x57bbb2);});};AGIVertices['prototype']['getVoiceQueue']=function(_0xd0468b,_0x209ee5){this['rpc'][_0x2d58('0x11')](_0xd0468b)['then'](function(_0xa7427d){_0x209ee5(null,_0xa7427d?_0xa7427d[_0x2d58('0x10')]:![]);})['catch'](function(_0x1857c3){_0x209ee5(_0x1857c3);});};AGIVertices['prototype'][_0x2d58('0x12')]=function(_0x2a815c,_0x391b7c){this[_0x2d58('0xc')][_0x2d58('0x13')](_0x2a815c)[_0x2d58('0x14')](function(_0x3bca6b){_0x391b7c(null,_0x3bca6b?_0x3bca6b[_0x2d58('0x10')]:![]);})[_0x2d58('0x15')](function(_0x5452c6){_0x391b7c(_0x5452c6);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x16')]=function(_0x57e494,_0x4ff322){this[_0x2d58('0xc')][_0x2d58('0x17')](_0x57e494)[_0x2d58('0x14')](function(_0x44753f){_0x4ff322(null,_0x44753f?_0x44753f[_0x2d58('0x18')]:![]);})['catch'](function(_0x27d8c5){_0x4ff322(_0x27d8c5);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x19')]=function(_0xb44486,_0x50391d){this[_0x2d58('0xc')][_0x2d58('0x1a')](_0xb44486)[_0x2d58('0x14')](function(_0x5571b6){_0x50391d(null,_0x5571b6?_0x5571b6['name']:![]);})[_0x2d58('0x15')](function(_0x541704){_0x50391d(_0x541704);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x1b')]=function(_0x5eb429,_0x19633f){this[_0x2d58('0xc')][_0x2d58('0x1c')](_0x5eb429)[_0x2d58('0x14')](function(_0x2c70ce){_0x19633f(null,_0x2c70ce?_0x2c70ce['name']:![]);})[_0x2d58('0x15')](function(_0x3ef4f8){_0x19633f(_0x3ef4f8);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x1d')]=function(_0x18e794,_0x47d1d1){var _0x1e65c5=this;this[_0x2d58('0xc')]['getSoundById'](_0x18e794)[_0x2d58('0x14')](function(_0x3ba2fa){_0x47d1d1(null,_0x3ba2fa?_0x1e65c5['getSoundPath'](_0x3ba2fa['save_name']):![]);})[_0x2d58('0x15')](function(_0x50943b){_0x47d1d1(_0x50943b);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x1e')]=function(_0x1ff42d,_0x187c84){this[_0x2d58('0xc')][_0x2d58('0x1f')](_0x1ff42d)[_0x2d58('0x14')](function(_0x5feea0){_0x187c84(null,_0x5feea0?_0x5feea0:![]);})[_0x2d58('0x15')](function(_0x554a9e){_0x187c84(_0x554a9e);});};AGIVertices['prototype'][_0x2d58('0x20')]=function(_0x1d2d7b,_0x4a2eb1,_0x197736){this[_0x2d58('0xd')][_0x2d58('0x20')](_0x1d2d7b,_0x4a2eb1)[_0x2d58('0x14')](function(){_0x197736(null);})[_0x2d58('0x15')](function(_0x569557){_0x197736(_0x569557);});};AGIVertices[_0x2d58('0xe')]['getIntervals']=function(_0x57f6b9,_0x1a5610){this['rpc'][_0x2d58('0x21')](_0x57f6b9)[_0x2d58('0x14')](function(_0x7eb2c8){if(_0x7eb2c8){if(_0x7eb2c8['IntervalId']){_0x1a5610(null,[_0x7eb2c8[_0x2d58('0x22')]]);}else{_0x1a5610(null,_['map'](_0x7eb2c8[_0x2d58('0x23')],_0x2d58('0x22')));}}else{_0x1a5610(null,![]);}})['catch'](function(_0x3785f2){_0x1a5610(_0x3785f2);});};AGIVertices[_0x2d58('0xe')]['getSoundPath']=function(_0x14b97d){return util[_0x2d58('0x24')](_0x2d58('0x25'),FILES_PATH,_0x14b97d);};AGIVertices[_0x2d58('0xe')][_0x2d58('0x26')]=function(_0x524927,_0x3c363e,_0x11c796){odbc[_0x2d58('0x27')](_0x524927,function(_0x48638a){if(_0x48638a){logger[_0x2d58('0x28')](_0x2d58('0x29'),_0x48638a);_0x11c796(_0x48638a);}else{logger[_0x2d58('0x2a')](_0x2d58('0x2b'));odbc[_0x2d58('0x2c')](_0x3c363e,function(_0x13b418,_0x33ab0f){if(_0x13b418){logger['info'](_0x2d58('0x2d'),_0x3c363e);_0x11c796(_0x13b418);}else{logger['info'](_0x2d58('0x2e'),_0x3c363e);odbc['close'](function(_0x2236ff){if(_0x2236ff){logger[_0x2d58('0x28')](_0x2d58('0x2f'),_0x2236ff);}_0x11c796(null,_0x33ab0f);});}});}});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x30')]=function(_0x13fe48,_0x706c18){this[_0x2d58('0xc')][_0x2d58('0x31')](_0x13fe48)[_0x2d58('0x14')](function(_0x1710b3){_0x706c18(null,_0x1710b3?_0x1710b3:![]);})[_0x2d58('0x15')](function(_0x3eca1d){_0x706c18(_0x3eca1d);});};AGIVertices[_0x2d58('0xe')]['createSmsMessage']=function(_0x287fb1,_0xe52f4d){this[_0x2d58('0xc')][_0x2d58('0x32')](_0x287fb1)[_0x2d58('0x14')](function(_0x162f4c){_0xe52f4d(null,_0x162f4c);})['catch'](function(_0x50f759){_0xe52f4d(_0x50f759);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x33')]=function(_0x24bbd4,_0x205156,_0x1c079d){this[_0x2d58('0xc')][_0x2d58('0x33')]({'uniqueid':this[_0x2d58('0xb')][_0x2d58('0x34')],'node':_0x24bbd4['label'],'application':_0x24bbd4['agicommand'],'data':_0x205156||null,'project_name':this[_0x2d58('0xb')]['arg_1'],'callerid':this['channel'][_0x2d58('0x35')]})[_0x2d58('0x14')](function(_0x10649f){if(_0x1c079d){_0x1c079d(null,_0x10649f);}})[_0x2d58('0x15')](function(_0xb7d57){if(_0x1c079d){_0x1c079d(_0xb7d57);}});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x36')]=function(_0x57c10e,_0x278405,_0x292cd7,_0x4a88a8){this['rpc'][_0x2d58('0x36')]({'uniqueid':this[_0x2d58('0xb')][_0x2d58('0x34')],'callerid':this[_0x2d58('0xb')][_0x2d58('0x35')],'calleridname':this['channel'][_0x2d58('0x37')],'context':this['channel']['context'],'extension':this[_0x2d58('0xb')][_0x2d58('0x38')],'priority':this[_0x2d58('0xb')][_0x2d58('0x39')],'accountcode':this[_0x2d58('0xb')]['accountcode'],'dnid':this[_0x2d58('0xb')][_0x2d58('0x3a')],'projectName':this[_0x2d58('0xb')][_0x2d58('0x3b')],'saveName':_0x278405,'filename':_0x57c10e[_0x2d58('0x3c')]||_0x278405,'savePath':_0x292cd7})[_0x2d58('0x14')](function(_0x241e86){_0x4a88a8(null,_0x241e86);})[_0x2d58('0x15')](function(_0x3669c4){_0x4a88a8(_0x3669c4);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x3d')]=function(_0x31382b,_0x7b627f,_0x1f2b81){this[_0x2d58('0xc')][_0x2d58('0x3d')]({'uniqueid':this['channel']['uniqueid'],'body':_0x31382b,'direction':_0x7b627f})['then'](function(_0x435cd1){if(_0x1f2b81){_0x1f2b81(null,_0x435cd1);}})['catch'](function(_0x12a378){if(_0x1f2b81){_0x1f2b81(_0x12a378);}});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x3e')]=function(_0x33df61,_0x5cd8a9){this['rpc'][_0x2d58('0x3e')]({'firstName':_[_0x2d58('0x3f')](_0x33df61[_0x2d58('0x10')])||_[_0x2d58('0x40')](_0x33df61[_0x2d58('0x10')])?'callback_'+Math[_0x2d58('0x41')]():_0x33df61['name'],'lastName':_[_0x2d58('0x3f')](_0x33df61[_0x2d58('0x42')])||_[_0x2d58('0x40')](_0x33df61['lastName'])?null:_0x33df61[_0x2d58('0x42')],'phone':_0x33df61[_0x2d58('0x43')],'ListId':_0x33df61[_0x2d58('0x44')],'scheduledAt':_0x33df61['scheduledAt'],'callbackUniqueid':this[_0x2d58('0xb')][_0x2d58('0x34')],'tags':_0x2d58('0x45'),'description':_0x2d58('0x46')+_0x33df61[_0x2d58('0x47')][_0x2d58('0x48')](),'priority':_0x33df61['callback_priority']})[_0x2d58('0x14')](function(_0x429948){_0x5cd8a9(null,_0x429948);})['catch'](function(_0x48e554){_0x5cd8a9(_0x48e554);});};AGIVertices[_0x2d58('0xe')]['getPause']=function(_0x3f2354,_0x38c13e){this[_0x2d58('0xc')][_0x2d58('0x49')](_0x3f2354)[_0x2d58('0x14')](function(_0x2bce4b){_0x38c13e(null,_0x2bce4b?_0x2bce4b[_0x2d58('0x10')]:![]);})[_0x2d58('0x15')](function(_0x4d5210){_0x38c13e(_0x4d5210);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x4a')]=function(_0x3eeac8,_0x32c3fb,_0x270c8b){var _0x3ca28d={'role':_0x2d58('0x4b')};_0x3ca28d[_0x3eeac8]=this[_0x2d58('0xb')]['callerid'];this[_0x2d58('0xc')]['agentPause'](_0x3ca28d,_0x32c3fb,this[_0x2d58('0xb')]['uniqueid'])[_0x2d58('0x14')](function(_0xfed138){_0x270c8b(null,_['isNil'](_0xfed138)?![]:!![]);})[_0x2d58('0x15')](function(_0xd0ba5a){logger['error'](_0xd0ba5a);_0x270c8b(null,![]);});};AGIVertices['prototype'][_0x2d58('0x4c')]=function(_0x2f0625,_0x567845){var _0x44e2cd={'role':_0x2d58('0x4b')};_0x44e2cd[_0x2f0625]=this[_0x2d58('0xb')]['callerid'];this['rpc'][_0x2d58('0x4c')](_0x44e2cd)[_0x2d58('0x14')](function(_0x7067d5){_0x567845(null,_[_0x2d58('0x40')](_0x7067d5)?![]:!![]);})['catch'](function(_0x5ebccd){logger[_0x2d58('0x28')](_0x5ebccd);_0x567845(null,![]);});};AGIVertices['prototype'][_0x2d58('0x4d')]=function(_0x4cd434,_0x3a3cf1){var _0x3d2fa5={'role':_0x2d58('0x4b')};_0x3d2fa5[_0x4cd434]=this[_0x2d58('0xb')][_0x2d58('0x35')];this[_0x2d58('0xc')]['agentLogout'](_0x3d2fa5)['then'](function(_0x44ffbc){_0x3a3cf1(null,_[_0x2d58('0x40')](_0x44ffbc)?![]:!![]);})[_0x2d58('0x15')](function(_0x9b38c4){logger[_0x2d58('0x28')](_0x9b38c4);_0x3a3cf1(null,![]);});};AGIVertices[_0x2d58('0xe')]['agentLogin']=function(_0x2cb00e,_0x27f9c6){var _0x5678e4={'role':_0x2d58('0x4b')};_0x5678e4[_0x2cb00e]=this['channel'][_0x2d58('0x35')];var _0x3a2728=_0x2cb00e!=_0x2d58('0x4e')?util['format']('%s/%s@from-sip/n',_0x2d58('0x4f'),this[_0x2d58('0xb')][_0x2d58('0x35')]):undefined;this[_0x2d58('0xc')][_0x2d58('0x50')](_0x5678e4,_0x3a2728)[_0x2d58('0x14')](function(_0x20a94f){_0x27f9c6(null,_[_0x2d58('0x40')](_0x20a94f)?![]:!![]);})[_0x2d58('0x15')](function(_0x2b44cc){logger['error'](_0x2b44cc);_0x27f9c6(null,![]);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x51')]=function(_0x13c234,_0x2f6820){sh[_0x2d58('0x52')](_[_0x2d58('0x53')](_0x13c234),function(_0x55dd53,_0x2b2580){var _0x19cd97=_0x2b2580['replace'](/(\r\n|\n|\r)/gm,'');_0x2f6820(null,_0x19cd97);});};AGIVertices['prototype'][_0x2d58('0x54')]=function(_0x363680,_0x1d55f0){scripts[_0x2d58('0x54')](_0x363680[_0x2d58('0x55')],_0x363680[_0x2d58('0x56')]||'en',0x1)[_0x2d58('0x14')](function(_0x12d244){_0x1d55f0(null,_0x12d244);})['catch'](function(_0x4c0071){_0x1d55f0(_0x4c0071);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x57')]=function(_0xb042b,_0x259367){scripts[_0x2d58('0x57')](this[_0x2d58('0xb')]['uniqueid'],_0xb042b[_0x2d58('0x58')],_0xb042b[_0x2d58('0x55')],_0xb042b[_0x2d58('0x59')]||'en')['then'](function(_0xff2e35){_0x259367(null,_0xff2e35);})[_0x2d58('0x15')](function(_0x7e344c){_0x259367(_0x7e344c);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x5a')]=function(_0x1992dc,_0x403bd1){scripts[_0x2d58('0x5a')](this['channel'],_0x1992dc)['then'](function(_0x3f998f){_0x403bd1(null,_0x3f998f);})[_0x2d58('0x15')](function(_0x28e5b7){_0x403bd1(_0x28e5b7);});};AGIVertices[_0x2d58('0xe')]['ispeechTTS']=function(_0xec4742,_0x3df0ad){scripts[_0x2d58('0x5b')](_0xec4742['key'],_0xec4742[_0x2d58('0x55')],_0xec4742[_0x2d58('0x5c')]||_0x2d58('0x5d'),_0xec4742[_0x2d58('0x5e')])['then'](function(_0x44ee29){_0x3df0ad(null,_0x44ee29);})[_0x2d58('0x15')](function(_0x2c0fc7){_0x3df0ad(_0x2c0fc7);});};AGIVertices['prototype'][_0x2d58('0x5f')]=function(_0x120485,_0x16ced0,_0x3e91bf){scripts[_0x2d58('0x5f')](_0x16ced0,_0x120485[_0x2d58('0x58')],_0x120485[_0x2d58('0x60')]||_0x2d58('0x5d'),this[_0x2d58('0x61')](_0x120485[_0x2d58('0x62')])?_0x120485[_0x2d58('0x62')]:undefined)[_0x2d58('0x14')](function(_0x3dadc0){_0x3e91bf(null,_0x3dadc0);})['catch'](function(_0x4d6753){_0x3e91bf(_0x4d6753);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x63')]=function(_0x18023c,_0x318df0){scripts['awsPolly'](_0x18023c[_0x2d58('0x64')],_0x18023c['aws_secret_access_key'],_0x18023c[_0x2d58('0x65')],_0x18023c[_0x2d58('0x66')]||_0x2d58('0x67'),_0x18023c[_0x2d58('0x55')],_0x18023c[_0x2d58('0x68')]||_0x2d58('0x55'))[_0x2d58('0x14')](function(_0x5159a6){_0x318df0(null,_0x5159a6);})[_0x2d58('0x15')](function(_0x5c31f0){_0x318df0(_0x5c31f0);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x69')]=function(_0x2acc4b,_0x5a272a){scripts[_0x2d58('0x69')](this[_0x2d58('0xb')][_0x2d58('0x34')],_0x2acc4b['aws_access_key_id'],_0x2acc4b[_0x2d58('0x6a')],_0x2acc4b[_0x2d58('0x6b')],_0x2acc4b['text'],_0x2acc4b[_0x2d58('0x6c')])[_0x2d58('0x14')](function(_0x26d996){_0x5a272a(null,_0x26d996);})[_0x2d58('0x15')](function(_0x26422f){_0x5a272a(_0x26422f);});};AGIVertices['prototype'][_0x2d58('0x6d')]=function(_0x46c4c9,_0x31cc37,_0x18ea16){scripts['googleASR'](_0x31cc37,_0x46c4c9[_0x2d58('0x58')],_0x46c4c9['google_asr_language']||_0x2d58('0x5d'))[_0x2d58('0x14')](function(_0x259d66){_0x18ea16(null,_0x259d66);})[_0x2d58('0x15')](function(_0x11f17d){_0x18ea16(_0x11f17d);});};AGIVertices[_0x2d58('0xe')][_0x2d58('0x6e')]=function(_0x33fbe4,_0x19954b,_0x2f62cb){scripts['tildeASR'](_0x19954b,_0x33fbe4[_0x2d58('0x6f')],_0x33fbe4[_0x2d58('0x70')],_0x33fbe4[_0x2d58('0x71')])['then'](function(_0x295df6){_0x2f62cb(null,_0x295df6);})[_0x2d58('0x15')](function(_0x3dd00b){_0x2f62cb(_0x3dd00b);});};AGIVertices[_0x2d58('0xe')]['clear']=function(_0x548f53){var _0x4d4605=_[_0x2d58('0x72')](verticesWithRetry,_0x548f53[_0x2d58('0x73')])?_0x548f53:_['clone'](_0x548f53);for(var _0x27fd1e in _0x4d4605){if(_0x4d4605['hasOwnProperty'](_0x27fd1e)){if(_0x4d4605[_0x27fd1e]&&_[_0x2d58('0x74')](_0x4d4605[_0x27fd1e])){_0x4d4605[_0x27fd1e]=this[_0x2d58('0x75')](_0x4d4605[_0x27fd1e]);}}}return _0x4d4605;};AGIVertices[_0x2d58('0xe')]['replaceAllVariables']=function(_0x354bb8){var _0x403d1f=_0x354bb8[_0x2d58('0x76')]('{');for(var _0x4da954=0x1;_0x4da954<_0x403d1f[_0x2d58('0x77')];_0x4da954+=0x1){var _0x5324ac=_0x403d1f[_0x4da954][_0x2d58('0x76')]('}');if(_0x5324ac[_0x2d58('0x77')]>0x1){_0x354bb8=_0x354bb8['replaceAll']('{'+_0x5324ac[0x0]+'}',this[_0x2d58('0xb')]['getVariable'](_0x5324ac[0x0])['extra']||_0x5324ac[0x0]);}}if(_0x403d1f[_0x2d58('0x77')]===0x1){return _0x354bb8['toString']();}return this[_0x2d58('0x75')](_0x354bb8);};AGIVertices[_0x2d58('0xe')][_0x2d58('0x78')]=function(_0x3632c6,_0x37b516){var _0x4268eb=this['channel'][_0x2d58('0x79')](_0x3632c6);if(_0x4268eb[_0x2d58('0x7a')]===-0x1){return _0x4268eb;}logger['info'](util[_0x2d58('0x24')]('The\x20\x22%s\x22\x20variable\x20value\x20is:\x20%s',_0x37b516,_0x4268eb[_0x2d58('0x7b')]));return this[_0x2d58('0xb')][_0x2d58('0x7c')](_0x37b516,_0x4268eb[_0x2d58('0x7b')]);};AGIVertices[_0x2d58('0xe')][_0x2d58('0x61')]=function(_0x15e038){return _0x15e038&&_0x15e038!=='0'&&_0x15e038!=='-1'&&_0x15e038!=='';};AGIVertices[_0x2d58('0xe')][_0x2d58('0x7d')]=function(_0x4e92a6){this[_0x2d58('0x33')][_0x2d58('0x7e')](this,_0x4e92a6,'-');_0x4e92a6[_0x2d58('0x7f')]=_0x4e92a6['maxRetry'];return{'code':0xc8,'result':'-'};};AGIVertices[_0x2d58('0xe')]['agi']=function(_0x4c8749){logger[_0x2d58('0x2a')](util['format'](_0x2d58('0x80'),_0x4c8749[_0x2d58('0x81')]));return this['channel'][_0x2d58('0x7')]([_0x4c8749[_0x2d58('0x82')],_0x4c8749[_0x2d58('0x83')]]);};AGIVertices[_0x2d58('0xe')][_0x2d58('0x84')]=function(_0x5e3f78){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x85'),_0x5e3f78[_0x2d58('0x81')]));if(this[_0x2d58('0x61')](_0x5e3f78[_0x2d58('0x86')])){logger[_0x2d58('0x2a')](util['format'](_0x2d58('0x87'),_0x5e3f78[_0x2d58('0x86')]));var _0x47d32c=this[_0x2d58('0xb')]['wait'](_0x5e3f78[_0x2d58('0x86')]);if(_0x47d32c[_0x2d58('0x7a')]===-0x1){return _0x47d32c;}}return this[_0x2d58('0xb')][_0x2d58('0x84')]();};AGIVertices['prototype'][_0x2d58('0x45')]=function(_0x1a3a77){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x88'),_0x1a3a77[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x1a3a77[_0x2d58('0x44')])){return this['channel'][_0x2d58('0x28')](_0x1a3a77,_0x2d58('0x89'));}_0x1a3a77[_0x2d58('0x47')]=moment();if(this[_0x2d58('0x61')](_0x1a3a77['delay'])){_0x1a3a77[_0x2d58('0x47')]=moment()[_0x2d58('0x8a')](_0x1a3a77['delay'],_0x2d58('0x8b'));}if(!this[_0x2d58('0x61')](_0x1a3a77['callback_priority'])){_0x1a3a77[_0x2d58('0x8c')]=0x2;}this[_0x2d58('0x3e')][_0x2d58('0x7e')](this,_0x1a3a77);return this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0x8e'),_0x1a3a77[_0x2d58('0x43')],_0x1a3a77['list_id'],_0x1a3a77['scheduledAt']));};AGIVertices['prototype'][_0x2d58('0x8f')]=function(_0x1fa73c){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x90'),_0x1fa73c[_0x2d58('0x81')]));var _0x4087cb=this['channel'][_0x2d58('0x52')](_0x1fa73c[_0x2d58('0x91')],_0x1fa73c[_0x2d58('0x92')]);if(_0x4087cb['result']===-0x1){return _0x4087cb;}return this[_0x2d58('0xb')][_0x2d58('0x8d')](util['format'](_0x2d58('0x93'),_0x1fa73c[_0x2d58('0x91')],_0x1fa73c['options']));};AGIVertices['prototype']['lumenvoxtts']=function(_0x2ac815){logger['info'](util[_0x2d58('0x24')]('Enter\x20in\x20LUMENVOXTTS\x20(%s)\x20block',_0x2ac815[_0x2d58('0x81')]));if(!this['isConfigured'](_0x2ac815[_0x2d58('0x55')])){return this[_0x2d58('0xb')]['noop'](_0x2d58('0x94'));}var _0x240084='\x22'+_0x2ac815[_0x2d58('0x55')]+'\x22';if(this[_0x2d58('0x61')](_0x2ac815[_0x2d58('0x92')])){_0x240084+=','+_0x2ac815[_0x2d58('0x92')];}var _0x4fb3e5=this[_0x2d58('0xb')][_0x2d58('0x52')]('MRCPSynth',_0x240084);if(_0x4fb3e5[_0x2d58('0x7a')]===-0x1){return _0x4fb3e5;}return this['channel']['noop'](util['format'](_0x2d58('0x95'),_0x240084));};AGIVertices[_0x2d58('0xe')][_0x2d58('0x96')]=function(_0x11b6b1){logger[_0x2d58('0x2a')](util['format'](_0x2d58('0x97'),_0x11b6b1[_0x2d58('0x81')]));if(!this['isConfigured'](_0x11b6b1[_0x2d58('0x55')])){return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0x94'));}var _0x2f22db='\x22'+_0x11b6b1[_0x2d58('0x55')]+'\x22';if(this[_0x2d58('0x61')](_0x11b6b1['options'])){_0x2f22db+=','+_0x11b6b1[_0x2d58('0x92')];}var _0x1d2e38=this['channel'][_0x2d58('0x52')](_0x2d58('0x98'),_0x2f22db);if(_0x1d2e38[_0x2d58('0x7a')]===-0x1){return _0x1d2e38;}return this[_0x2d58('0xb')]['noop'](util[_0x2d58('0x24')](_0x2d58('0x95'),_0x2f22db));};AGIVertices[_0x2d58('0xe')][_0x2d58('0x99')]=function(_0xc5522){logger['info'](util['format'](_0x2d58('0x9a'),_0xc5522[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0xc5522[_0x2d58('0x9b')])){return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0x9c'));}var _0x1a743d=_0xc5522[_0x2d58('0x9b')];if(this[_0x2d58('0x61')](_0xc5522[_0x2d58('0x92')])){_0x1a743d+=','+_0xc5522[_0x2d58('0x92')];}var _0x3fdadc=this[_0x2d58('0xb')][_0x2d58('0x52')]('MRCPRecog',_0x1a743d);if(_0x3fdadc[_0x2d58('0x7a')]===-0x1){return _0x3fdadc;}var _0x46f32c=this[_0x2d58('0x78')](_0x2d58('0x9d'),'LUMENVOX_ASR_CONFIDENCE');if(_0x46f32c[_0x2d58('0x7a')]===-0x1){return _0x46f32c;}var _0x35a088=this['getAndSetVariable'](_0x2d58('0x9e'),_0x2d58('0x9f'));if(_0x35a088[_0x2d58('0x7a')]===-0x1){return _0x35a088;}var _0x551101=this[_0x2d58('0x78')]('RECOG_INSTANCE()',_0x2d58('0xa0'));if(_0x551101[_0x2d58('0x7a')]===-0x1){return _0x551101;}return this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0xa1'),_0x1a743d));};AGIVertices[_0x2d58('0xe')][_0x2d58('0xa2')]=function(_0xda9ef2){logger[_0x2d58('0x2a')](util['format'](_0x2d58('0xa3'),_0xda9ef2[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0xda9ef2[_0x2d58('0x9b')])){return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0x9c'));}var _0x47085d=_0xda9ef2[_0x2d58('0x9b')];if(this[_0x2d58('0x61')](_0xda9ef2['options'])){_0x47085d+=','+_0xda9ef2[_0x2d58('0x92')];}var _0x378a71=this[_0x2d58('0xb')][_0x2d58('0x52')](_0x2d58('0xa4'),_0x47085d);if(_0x378a71[_0x2d58('0x7a')]===-0x1){return _0x378a71;}var _0x36686a=this[_0x2d58('0x78')](_0x2d58('0x9d'),_0x2d58('0xa5'));if(_0x36686a['result']===-0x1){return _0x36686a;}var _0x2cd5a6=this[_0x2d58('0x78')](_0x2d58('0x9e'),'SESTEK_ASR_TRANSCRIPT');if(_0x2cd5a6[_0x2d58('0x7a')]===-0x1){return _0x2cd5a6;}var _0x9bc2a6=this['getAndSetVariable'](_0x2d58('0xa6'),_0x2d58('0xa7'));if(_0x9bc2a6[_0x2d58('0x7a')]===-0x1){return _0x9bc2a6;}return this['channel'][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0xa1'),_0x47085d));};AGIVertices[_0x2d58('0xe')][_0x2d58('0xa8')]=function(_0x4594a0){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0xa9'),_0x4594a0[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x4594a0[_0x2d58('0xaa')])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x4594a0,'no\x20database\x20selected');}var _0x23516d=this[_0x2d58('0x16')][_0x2d58('0x7e')](this,_0x4594a0[_0x2d58('0xaa')]);if(!_0x23516d){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x4594a0,'no\x20odbc\x20database\x20found');}if(!this[_0x2d58('0x61')](_0x4594a0[_0x2d58('0x2c')])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x4594a0,_0x2d58('0xab'));}var _0x42fd9a=_0x4594a0[_0x2d58('0x2c')][_0x2d58('0xac')](/(\r\n|\n|\r)/gm,'\x20');this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')]('query:\x20%s',_0x42fd9a));var _0xdabf0b=this[_0x2d58('0x26')]['sync'](this,_0x23516d,_0x42fd9a);this[_0x2d58('0x33')]['sync'](this,_0x4594a0,_0x42fd9a);if(!this['isConfigured'](_0x4594a0[_0x2d58('0xad')])){return this[_0x2d58('0xb')][_0x2d58('0x8d')]('no\x20variable\x20selected\x20for\x20the\x20result');}var _0xa2795d=this[_0x2d58('0x79')][_0x2d58('0x7e')](this,_0x4594a0[_0x2d58('0xad')]);if(!_0xa2795d){return this['channel'][_0x2d58('0x28')](_0x4594a0,_0x2d58('0xae'));}var _0xb42298=this;_0xdabf0b[_0x2d58('0xaf')](function(_0x427088,_0x139561){Object[_0x2d58('0xb0')](_0x427088)[_0x2d58('0xaf')](function(_0x121e99){_0xb42298[_0x2d58('0xb')]['setVariable'](util['format'](_0x2d58('0xb1'),_0xa2795d,_0x139561,_0x121e99),_0x427088[_0x121e99]);});});this[_0x2d58('0xb')][_0x2d58('0x7c')](util[_0x2d58('0x24')]('%s_ROWS_COUNT',_0xa2795d),_0xdabf0b[_0x2d58('0x77')]);return this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0xb2'),_0xa2795d));};AGIVertices[_0x2d58('0xe')]['dial']=function(_0x107e6d){logger[_0x2d58('0xb3')](util[_0x2d58('0x24')]('Enter\x20in\x20DIAL\x20(%s)\x20block',_0x107e6d[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x107e6d[_0x2d58('0xb4')])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x107e6d,_0x2d58('0xb5'));}var _0x1d4923=this[_0x2d58('0x19')][_0x2d58('0x7e')](this,_0x107e6d[_0x2d58('0xb4')]);if(!_0x1d4923){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x107e6d,_0x2d58('0xb6'));}var _0x45ef79=this[_0x2d58('0xb')]['exec']('DIAL',[util['format'](_0x2d58('0xb7'),_0x1d4923),_0x107e6d[_0x2d58('0x86')],_0x107e6d[_0x2d58('0xb8')],_0x107e6d[_0x2d58('0xb9')]]);if(_0x45ef79[_0x2d58('0x7a')]===-0x1){return _0x45ef79;}return this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0xba'),_0x2d58('0xbb')));};AGIVertices['prototype']['dialogflow']=function(_0x420949){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')]('Enter\x20in\x20DIALOGFLOW\x20(%s)\x20block',_0x420949[_0x2d58('0x81')]));if(!this['isConfigured'](_0x420949[_0x2d58('0x58')])){return this['channel'][_0x2d58('0x8d')](_0x2d58('0xbc'));}if(!this[_0x2d58('0x61')](_0x420949['text'])){return this['channel'][_0x2d58('0x8d')](_0x2d58('0x94'));}this[_0x2d58('0xb')]['bot']=!![];this[_0x2d58('0x33')](_0x420949);this[_0x2d58('0x3d')](_0x420949[_0x2d58('0x55')],'in');this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0xbd'),_0x420949[_0x2d58('0x55')]));var _0x4872b2=this[_0x2d58('0x57')][_0x2d58('0x7e')](this,_0x420949);if(_0x4872b2){for(var _0x35120f in _0x4872b2){if(_0x4872b2['hasOwnProperty'](_0x35120f)){this['channel'][_0x2d58('0x7c')](util[_0x2d58('0x24')](_0x2d58('0xbe'),_0x35120f[_0x2d58('0xbf')]()),_0x4872b2[_0x35120f]);}}this['createSquareMessage'](_0x4872b2[_0x2d58('0xc0')],_0x2d58('0xc1'));return this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')]('Dialogflow\x20Result\x20%s',_0x4872b2[_0x2d58('0xc0')]));}return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x420949,'Dialogflow\x20is\x20unreachable');};AGIVertices[_0x2d58('0xe')][_0x2d58('0xc2')]=function(_0x42ef39){logger['info'](util[_0x2d58('0x24')]('Enter\x20in\x20SESTEKNDA\x20(%s)\x20block',_0x42ef39[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x42ef39[_0x2d58('0xc3')])){return this[_0x2d58('0xb')][_0x2d58('0x8d')]('no\x20ndauth\x20url\x20configured');}if(!this[_0x2d58('0x61')](_0x42ef39[_0x2d58('0xc4')])){return this['channel'][_0x2d58('0x8d')](_0x2d58('0xc5'));}if(!this['isConfigured'](_0x42ef39['password'])){return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0xc6'));}if(!this[_0x2d58('0x61')](_0x42ef39[_0x2d58('0xc7')])){return this['channel']['noop'](_0x2d58('0x94'));}this[_0x2d58('0xb')][_0x2d58('0xc8')]=!![];this[_0x2d58('0x33')](_0x42ef39);this['createSquareMessage'](_0x42ef39[_0x2d58('0x55')],'in');this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0xc9'),_0x42ef39[_0x2d58('0x55')]));var _0x2dae3c=this[_0x2d58('0x5a')]['sync'](this,_0x42ef39);if(_0x2dae3c){for(var _0x2745ef in _0x2dae3c){if(_0x2dae3c[_0x2d58('0xca')](_0x2745ef)){this['channel'][_0x2d58('0x7c')](util[_0x2d58('0x24')](_0x2d58('0xcb'),_0x2745ef[_0x2d58('0xbf')]()),_0x2dae3c[_0x2745ef]);}}this['createSquareMessage'](_0x2dae3c[_0x2d58('0xc0')],_0x2d58('0xc1'));if(_0x2dae3c[_0x2d58('0xcc')]){this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0xcd'),_0x2dae3c['audiofile']));var _0x34fccd=this['channel']['streamFile'](_0x2dae3c[_0x2d58('0xcc')]);try{fs[_0x2d58('0xce')](_0x2dae3c[_0x2d58('0xcc')]+'.wav');}catch(_0x558b1f){logger['error'](_0x558b1f);}return _0x34fccd;}else{return this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0xcf'),_0x2dae3c[_0x2d58('0xc0')]));}}return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x42ef39,'SestekNDA\x20is\x20unreachable');};AGIVertices[_0x2d58('0xe')][_0x2d58('0xd0')]=function(_0x58ef8f){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0xd1'),_0x58ef8f[_0x2d58('0x81')]));return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0xd0'));};AGIVertices[_0x2d58('0xe')][_0x2d58('0xd2')]=function(_0x4562ef){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')]('Enter\x20in\x20EXTERNAL\x20DIAL\x20(%s)\x20block',_0x4562ef[_0x2d58('0x81')]));var _0x2429bc='';if(_0x4562ef[_0x2d58('0xd3')]){if(!this[_0x2d58('0x61')](_0x4562ef[_0x2d58('0xd3')])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x4562ef,_0x2d58('0xd4'));}else{var _0x309fea=parseInt(_0x4562ef['trunk_id'],0xa);if(isNaN(_0x309fea)){_0x2429bc=_0x4562ef[_0x2d58('0xd3')];}else{_0x2429bc=this[_0x2d58('0x1b')][_0x2d58('0x7e')](this,_0x4562ef['trunk_id']);if(!_0x2429bc){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x4562ef,'no\x20trunk\x20found');}}}}else if(_0x4562ef[_0x2d58('0xd5')]){_0x2429bc=_0x4562ef['trunk_name'];}else{return this['channel'][_0x2d58('0x28')](_0x4562ef,_0x2d58('0xd4'));}var _0x18f587=this[_0x2d58('0xb')][_0x2d58('0x52')](_0x2d58('0xbb'),[util[_0x2d58('0x24')](_0x2d58('0xd6'),_0x2429bc,_0x4562ef[_0x2d58('0x43')]),_0x4562ef['timeout'],_0x4562ef[_0x2d58('0xb8')],_0x4562ef[_0x2d58('0xb9')]]);if(_0x18f587['result']===-0x1){return _0x18f587;}return this['channel'][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0xba'),'DIAL'));};AGIVertices['prototype']['finally']=function(_0x151492){logger['info'](util[_0x2d58('0x24')]('Enter\x20in\x20FINALLY\x20(%s)\x20block',_0x151492[_0x2d58('0x81')]));return this[_0x2d58('0xb')][_0x2d58('0x8d')]('finally');};AGIVertices['prototype'][_0x2d58('0xd7')]=function(_0x458d03){logger['info'](util[_0x2d58('0x24')](_0x2d58('0xd8'),_0x458d03[_0x2d58('0x81')]));if(_0x458d03[_0x2d58('0x7f')]===0x0){return this[_0x2d58('0x7d')](_0x458d03);}_0x458d03[_0x2d58('0x7f')]-=0x1;if(!this[_0x2d58('0x61')](_0x458d03['file_id'])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x458d03,_0x2d58('0xd9'));}var _0x4b6fec=this[_0x2d58('0x1d')][_0x2d58('0x7e')](this,_0x458d03['file_id']);if(!_0x4b6fec){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x458d03,_0x2d58('0xda'));}if(!this[_0x2d58('0x61')](_0x458d03['variable_id'])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x2d58('0xdb'));}var _0x8b210=this[_0x2d58('0xb')][_0x2d58('0xdc')](_0x4b6fec,_0x458d03[_0x2d58('0xdd')],_0x458d03[_0x2d58('0xde')]);var _0x4e0680=_0x8b210[_0x2d58('0x7a')]?_0x8b210[_0x2d58('0x7a')][_0x2d58('0x48')]():'';logger['info'](_0x2d58('0xdf'),JSON['stringify'](_0x8b210));if(_0x8b210[_0x2d58('0x7a')]===-0x1){this[_0x2d58('0x33')][_0x2d58('0x7e')](this,_0x458d03,_0x4e0680);return _0x8b210;}else if(_0x8b210[_0x2d58('0x7b')]===_0x2d58('0x86')){_0x8b210[_0x2d58('0x7a')]=_0x4e0680[_0x2d58('0x77')]>=parseInt(_0x458d03[_0x2d58('0xe0')])?'x':'i';}else{_0x8b210[_0x2d58('0x7a')]=_0x4e0680['length']>=parseInt(_0x458d03[_0x2d58('0xe0')])&&_0x4e0680[_0x2d58('0x77')]<=parseInt(_0x458d03[_0x2d58('0xde')])?'x':'i';}var _0x39ed51=this['getVariable'][_0x2d58('0x7e')](this,_0x458d03[_0x2d58('0xad')]);if(!_0x39ed51){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x458d03,_0x2d58('0xae'));}this[_0x2d58('0xb')][_0x2d58('0x7c')](_0x39ed51,_0x4e0680);if(this[_0x2d58('0x61')](_0x458d03[_0x2d58('0xe1')])){var _0x2df751=parseInt(_0x458d03[_0x2d58('0xe1')],0xa);var _0x249d77=rs['generate']({'charset':'*','length':_0x2df751});var _0x3bffaf=_0x4e0680[_0x2d58('0x77')];if(_0x3bffaf>0x0){if(_0x3bffaf>_0x2df751){this[_0x2d58('0x33')]['sync'](this,_0x458d03,_0x458d03[_0x2d58('0xe2')]==='first'?_0x249d77+_0x4e0680[_0x2d58('0xe3')](_0x2df751):_0x4e0680['substr'](0x0,_0x3bffaf-_0x2df751)+_0x249d77);}else{this[_0x2d58('0x33')][_0x2d58('0x7e')](this,_0x458d03,rs[_0x2d58('0xe4')]({'charset':'*','length':_0x3bffaf}));}}else{this[_0x2d58('0x33')][_0x2d58('0x7e')](this,_0x458d03,'');}}else{this[_0x2d58('0x33')][_0x2d58('0x7e')](this,_0x458d03,_0x4e0680);}return _0x8b210;};AGIVertices[_0x2d58('0xe')][_0x2d58('0xa')]=function(_0x3c1833){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0xe5'),_0x3c1833[_0x2d58('0x81')]));return this['getdigits'](_0x3c1833);};AGIVertices[_0x2d58('0xe')][_0x2d58('0xe6')]=function(_0x2884e3){logger[_0x2d58('0x2a')](util['format'](_0x2d58('0xe7'),_0x2884e3[_0x2d58('0x81')]));this[_0x2d58('0x33')][_0x2d58('0x7e')](this,_0x2884e3,_0x2884e3[_0x2d58('0xe8')]);return this[_0x2d58('0xb')][_0x2d58('0x8d')](util['format'](_0x2d58('0xe9'),_0x2884e3[_0x2d58('0xe8')]));};AGIVertices['prototype'][_0x2d58('0xea')]=function(_0x2dd1bc){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0xeb'),_0x2dd1bc[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x2dd1bc[_0x2d58('0x64')])||!this[_0x2d58('0x61')](_0x2dd1bc[_0x2d58('0x6a')])){return this['channel'][_0x2d58('0x8d')]('no\x20valid\x20credentials\x20configured');}if(!this[_0x2d58('0x61')](_0x2dd1bc[_0x2d58('0x55')])){return this['channel'][_0x2d58('0x8d')](_0x2d58('0x94'));}this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0xec'),_0x2dd1bc['text']));var _0x26083a=this['awsPolly'][_0x2d58('0x7e')](this,_0x2dd1bc);if(_0x26083a){this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0xed'),_0x26083a));var _0x48dcbd=this[_0x2d58('0xb')][_0x2d58('0xee')](_0x26083a);try{fs['unlink'](_0x26083a+_0x2d58('0xef'));}catch(_0x4ab92e){logger[_0x2d58('0x28')](_0x4ab92e);}return _0x48dcbd;}return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x2dd1bc,_0x2d58('0xf0'));};AGIVertices[_0x2d58('0xe')][_0x2d58('0xf1')]=function(_0xce87a5){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0xf2'),_0xce87a5[_0x2d58('0x81')]));if(!this['isConfigured'](_0xce87a5[_0x2d58('0x64')])||!this[_0x2d58('0x61')](_0xce87a5[_0x2d58('0x6a')])){return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0xf3'));}if(!this[_0x2d58('0x61')](_0xce87a5['aws_bot_name'])){return this['channel'][_0x2d58('0x8d')](_0x2d58('0xf4'));}if(!this[_0x2d58('0x61')](_0xce87a5['text'])){return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0x94'));}this[_0x2d58('0xb')][_0x2d58('0xc8')]=!![];this[_0x2d58('0x33')](_0xce87a5);this['createSquareMessage'](_0xce87a5[_0x2d58('0x55')],'in');this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0xf5'),_0xce87a5[_0x2d58('0x55')]));var _0x4e0ab8=this[_0x2d58('0x69')][_0x2d58('0x7e')](this,_0xce87a5);if(_0x4e0ab8){for(var _0x21178e in _0x4e0ab8){if(_0x4e0ab8[_0x2d58('0xca')](_0x21178e)&&_[_0x2d58('0x74')](_0x4e0ab8[_0x21178e])){this[_0x2d58('0xb')][_0x2d58('0x7c')](util[_0x2d58('0x24')]('AWS_LEX_%s',_0x21178e[_0x2d58('0xbf')]()),_0x4e0ab8[_0x21178e]);}}if(_[_0x2d58('0x40')](_0x4e0ab8[_0x2d58('0xf6')])){return this[_0x2d58('0xb')][_0x2d58('0x8d')]('Amazon\x20Lex\x20ready\x20for\x20fulfillment');}else{this[_0x2d58('0x3d')](_0x4e0ab8[_0x2d58('0xf6')],_0x2d58('0xc1'));return this[_0x2d58('0xb')]['noop'](util[_0x2d58('0x24')]('Amazon\x20Lex\x20Result\x20%s',_0x4e0ab8[_0x2d58('0xf6')]));}}return this[_0x2d58('0xb')][_0x2d58('0x28')](_0xce87a5,'Amazon\x20Lex\x20is\x20unreachable');};AGIVertices[_0x2d58('0xe')][_0x2d58('0xf7')]=function(_0x2f15b6){logger['info'](util[_0x2d58('0x24')](_0x2d58('0xf8'),_0x2f15b6[_0x2d58('0x81')],_0x2f15b6[_0x2d58('0x86')]));if(!this[_0x2d58('0x61')](_0x2f15b6[_0x2d58('0x58')])){return this['channel'][_0x2d58('0x8d')]('no\x20key\x20configured');}var _0x36e3aa='wav';var _0x2b9be2=util[_0x2d58('0x24')]('%s/recordings/%s',FILES_PATH,rs[_0x2d58('0xe4')](0x4));var _0x25d1b9=util['format']('%s.%s',_0x2b9be2,_0x36e3aa);var _0x1232fc=!![];if(_0x2f15b6[_0x2d58('0xf9')]==='NOBEEP'){_0x1232fc=![];}var _0xd21038=this[_0x2d58('0xb')][_0x2d58('0xfa')](_0x2b9be2,_0x36e3aa,_0x2f15b6[_0x2d58('0xfb')],_0x2f15b6[_0x2d58('0x86')],undefined,_0x1232fc);if(_0xd21038[_0x2d58('0x7a')]!==-0x1){this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')]('google\x20%s\x20file\x20created',_0x25d1b9));var _0x5e2e1d=this['googleASR']['sync'](this,_0x2f15b6,_0x25d1b9);if(_0x5e2e1d){for(var _0x33bfea in _0x5e2e1d){if(_0x5e2e1d[_0x2d58('0xca')](_0x33bfea)){this['channel']['setVariable'](util[_0x2d58('0x24')](_0x2d58('0xfc'),_0x33bfea[_0x2d58('0xbf')]()),_0x5e2e1d[_0x33bfea]);}}return this[_0x2d58('0xb')]['noop'](util[_0x2d58('0x24')](_0x2d58('0xfd'),JSON[_0x2d58('0xfe')](_0x5e2e1d)));}}return _0xd21038;};AGIVertices[_0x2d58('0xe')][_0x2d58('0xff')]=function(_0x4d691e){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')]('Enter\x20in\x20TILDEASR\x20(%s)\x20block',_0x4d691e['label']));if(!this['isConfigured'](_0x4d691e[_0x2d58('0x6f')])){return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0x100'));}if(!this[_0x2d58('0x61')](_0x4d691e[_0x2d58('0x70')])){return this[_0x2d58('0xb')][_0x2d58('0x8d')]('no\x20appsecret\x20configured');}var _0x48991e=_0x2d58('0x101');var _0x41ddee=util[_0x2d58('0x24')](_0x2d58('0x102'),FILES_PATH,rs[_0x2d58('0xe4')](0x4));var _0x25947f=util['format'](_0x2d58('0x103'),_0x41ddee,_0x48991e);var _0x2f95f0=!![];if(_0x4d691e[_0x2d58('0xf9')]===_0x2d58('0x104')){_0x2f95f0=![];}var _0x40efe0=this[_0x2d58('0xb')][_0x2d58('0xfa')](_0x41ddee,_0x48991e,_0x4d691e[_0x2d58('0xfb')],_0x4d691e['timeout'],undefined,_0x2f95f0);if(_0x40efe0[_0x2d58('0x7a')]!==-0x1){this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0x105'),_0x25947f));var _0xe0ac5d=this[_0x2d58('0x6e')][_0x2d58('0x7e')](this,_0x4d691e,_0x25947f);if(_0xe0ac5d){for(var _0x51415b in _0xe0ac5d){if(_0xe0ac5d['hasOwnProperty'](_0x51415b)){this['channel'][_0x2d58('0x7c')](util[_0x2d58('0x24')](_0x2d58('0x106'),_0x51415b[_0x2d58('0xbf')]()),_0xe0ac5d[_0x51415b]);}}return this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0x107'),JSON[_0x2d58('0xfe')](_0xe0ac5d)));}}return _0x40efe0;};AGIVertices['prototype']['gotoc']=function(_0x46e420){logger['info'](util[_0x2d58('0x24')](_0x2d58('0x108'),_0x46e420[_0x2d58('0x81')]));return this[_0x2d58('0xb')][_0x2d58('0x109')](_0x46e420[_0x2d58('0x10a')],_0x46e420[_0x2d58('0x38')],_0x46e420[_0x2d58('0x39')]);};AGIVertices[_0x2d58('0xe')][_0x2d58('0x10b')]=function(_0x451c3c){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')]('Enter\x20in\x20GOTOIF\x20(%s)\x20block',_0x451c3c['label']));if(!this[_0x2d58('0x61')](_0x451c3c[_0x2d58('0x10c')])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x451c3c,_0x2d58('0x10d'));}try{var _0xd0dfb3=eval(_0x451c3c[_0x2d58('0x10c')])?_0x2d58('0x10e'):_0x2d58('0x10f');this['channel'][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0x110'),_0x451c3c[_0x2d58('0x10c')],_0xd0dfb3));return{'code':0xc8,'result':_0xd0dfb3};}catch(_0x3aec1a){return{'code':0xc8,'result':_0x2d58('0x10f')};}};AGIVertices[_0x2d58('0xe')][_0x2d58('0x111')]=function(_0x1cbd60){logger['info'](util[_0x2d58('0x24')](_0x2d58('0x112'),_0x1cbd60[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x1cbd60[_0x2d58('0x113')])){return this['channel'][_0x2d58('0x28')](_0x1cbd60,_0x2d58('0x114'));}var _0x5a3fae=this[_0x2d58('0x115')]['sync'](this,_0x1cbd60[_0x2d58('0x113')]);if(!_0x5a3fae){return this[_0x2d58('0xb')]['error'](_0x1cbd60,_0x2d58('0x116'));}for(var _0x2786d2=0x0;_0x2786d2<_0x5a3fae[_0x2d58('0x77')];_0x2786d2+=0x1){var _0x349692=this[_0x2d58('0xb')][_0x2d58('0x79')](util[_0x2d58('0x24')]('IFTIME(%s?true:false)',_0x5a3fae[_0x2786d2]));if(_0x349692[_0x2d58('0x7a')]===-0x1){return _0x349692;}logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x117'),_0x5a3fae[_0x2786d2],_0x349692[_0x2d58('0x7b')]));if(_0x349692[_0x2d58('0x7b')]===_0x2d58('0x10e')){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x117'),_0x5a3fae[_0x2786d2],'true'));this[_0x2d58('0xb')][_0x2d58('0x8d')](util['format']('IFTIME\x20%s\x20%s',_0x5a3fae[_0x2786d2],_0x2d58('0x10e')));return{'code':0xc8,'result':'true'};}else{logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x117'),_0x5a3fae[_0x2786d2],_0x2d58('0x10f')));this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')]('IFTIME\x20%s\x20%s',_0x5a3fae[_0x2786d2],_0x2d58('0x10f')));}}return{'code':0xc8,'result':'false'};};AGIVertices[_0x2d58('0xe')]['hangup']=function(_0x4736ba){logger['info'](util['format'](_0x2d58('0x118'),_0x4736ba[_0x2d58('0x81')]));return this['channel']['hangup']();};AGIVertices[_0x2d58('0xe')][_0x2d58('0x119')]=function(_0x379c59){logger['info'](util[_0x2d58('0x24')](_0x2d58('0x11a'),_0x379c59['label']));if(!this[_0x2d58('0x61')](_0x379c59[_0x2d58('0x58')])){return this['channel'][_0x2d58('0x8d')]('no\x20key\x20configured');}var _0x1672f3=_0x2d58('0x101');var _0x8059ea=util['format']('%s/recordings/%s',FILES_PATH,rs[_0x2d58('0xe4')](0x4));var _0x3e0e05=util[_0x2d58('0x24')](_0x2d58('0x103'),_0x8059ea,_0x1672f3);var _0x10e04f=!![];if(_0x379c59[_0x2d58('0xf9')]===_0x2d58('0x104')){_0x10e04f=![];}var _0x4af569=this[_0x2d58('0xb')]['recordFile'](_0x8059ea,_0x1672f3,_0x379c59[_0x2d58('0xfb')],_0x379c59['timeout'],undefined,_0x10e04f);if(_0x4af569[_0x2d58('0x7a')]!==-0x1){this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0x11b'),_0x3e0e05));var _0x5dbd37=this['ispeechASR'][_0x2d58('0x7e')](this,_0x379c59,_0x3e0e05);if(_0x5dbd37){for(var _0x3a2324 in _0x5dbd37){if(_0x5dbd37[_0x2d58('0xca')](_0x3a2324)){this[_0x2d58('0xb')]['setVariable'](util[_0x2d58('0x24')](_0x2d58('0x11c'),_0x3a2324[_0x2d58('0xbf')]()),_0x5dbd37[_0x3a2324]);}}return this['channel']['noop'](util[_0x2d58('0x24')](_0x2d58('0x11d'),JSON['stringify'](_0x5dbd37)));}}return _0x4af569;};AGIVertices[_0x2d58('0xe')][_0x2d58('0x11e')]=function(_0x246898){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')]('Enter\x20in\x20ISPEECHTTS\x20(%s)\x20block',_0x246898[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x246898[_0x2d58('0x58')])){return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0xbc'));}if(!this[_0x2d58('0x61')](_0x246898[_0x2d58('0x55')])){return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0x94'));}this['channel']['noop'](util[_0x2d58('0x24')]('Trying\x20ispeech\x20TTS\x20%s',_0x246898['text']));var _0x2d054d=this[_0x2d58('0x5b')][_0x2d58('0x7e')](this,_0x246898);if(_0x2d054d){this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')]('ispeech\x20%s\x20file\x20created',_0x2d054d));var _0x81bccb=this[_0x2d58('0xb')][_0x2d58('0xee')](_0x2d054d,_0x246898[_0x2d58('0xfb')]);try{fs[_0x2d58('0xce')](_0x2d054d+_0x2d58('0xef'));}catch(_0x38d96a){logger[_0x2d58('0x28')](_0x38d96a);}return _0x81bccb;}return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x246898,'ispeech\x20TTS\x20is\x20unreachable');};AGIVertices[_0x2d58('0xe')][_0x2d58('0x11f')]=function(_0x957d4c){logger['info'](util[_0x2d58('0x24')]('Enter\x20in\x20LOGIN\x20(%s)\x20block',_0x957d4c['label']));if(!this['isConfigured'](_0x957d4c[_0x2d58('0x120')])){return this[_0x2d58('0xb')]['error'](_0x957d4c,_0x2d58('0x121'));}logger[_0x2d58('0x2a')](util[_0x2d58('0x24')]('FIND\x20AGENT\x20%s\x20BY\x20%s',this[_0x2d58('0xb')]['callerid'],_0x957d4c[_0x2d58('0x120')]));var _0x358158=this[_0x2d58('0x50')]['sync'](this,_0x957d4c[_0x2d58('0x120')]);if(_0x358158){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x122'),this['channel'][_0x2d58('0x35')],_0x957d4c['findBy']));this[_0x2d58('0xb')]['noop'](util[_0x2d58('0x24')](_0x2d58('0x122'),this[_0x2d58('0xb')][_0x2d58('0x35')],_0x957d4c['findBy']));return{'code':0xc8,'result':_0x2d58('0x123')};}else{logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x124'),this[_0x2d58('0xb')][_0x2d58('0x35')],_0x957d4c[_0x2d58('0x120')]));this['channel'][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0x124'),this[_0x2d58('0xb')]['callerid'],_0x957d4c[_0x2d58('0x120')]));return{'code':0xc8,'result':_0x2d58('0x125')};}};AGIVertices['prototype'][_0x2d58('0x126')]=function(_0x12b795){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')]('Enter\x20in\x20LOGOUT\x20(%s)\x20block',_0x12b795[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x12b795[_0x2d58('0x120')])){return this[_0x2d58('0xb')]['error'](_0x12b795,_0x2d58('0x121'));}logger[_0x2d58('0x2a')](util[_0x2d58('0x24')]('FIND\x20AGENT\x20%s\x20BY\x20%s',this['channel'][_0x2d58('0x35')],_0x12b795[_0x2d58('0x120')]));var _0x21e32e=this[_0x2d58('0x4d')][_0x2d58('0x7e')](this,_0x12b795[_0x2d58('0x120')]);if(_0x21e32e){logger[_0x2d58('0x2a')](util['format'](_0x2d58('0x122'),this[_0x2d58('0xb')][_0x2d58('0x35')],_0x12b795['findBy']));this[_0x2d58('0xb')][_0x2d58('0x8d')](util['format'](_0x2d58('0x122'),this[_0x2d58('0xb')][_0x2d58('0x35')],_0x12b795[_0x2d58('0x120')]));return{'code':0xc8,'result':'success'};}else{logger[_0x2d58('0x2a')](util['format'](_0x2d58('0x124'),this[_0x2d58('0xb')][_0x2d58('0x35')],_0x12b795[_0x2d58('0x120')]));this[_0x2d58('0xb')][_0x2d58('0x8d')](util['format'](_0x2d58('0x124'),this[_0x2d58('0xb')]['callerid'],_0x12b795[_0x2d58('0x120')]));return{'code':0xc8,'result':_0x2d58('0x125')};}};AGIVertices[_0x2d58('0xe')][_0x2d58('0x127')]=function(_0x842b5e){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x128'),_0x842b5e[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x842b5e['operation'])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x842b5e,'no\x20operation\x20configured');}this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')]('math\x20%s',_0x842b5e[_0x2d58('0x129')]));var _0x104ba6=eval(_0x842b5e[_0x2d58('0x129')]);if(!this[_0x2d58('0x61')](_0x842b5e[_0x2d58('0xad')])){return this[_0x2d58('0xb')]['noop'](_0x2d58('0xdb'));}var _0x323389=this[_0x2d58('0x79')][_0x2d58('0x7e')](this,_0x842b5e['variable_id']);if(!_0x323389){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x842b5e,_0x2d58('0xae'));}if(_['isArray'](_0x104ba6)){var _0xf17de8=this;_0x104ba6[_0x2d58('0xaf')](function(_0x59e2ea,_0x51a218){_0xf17de8[_0x2d58('0xb')]['setVariable'](util[_0x2d58('0x24')]('%s[%s]',_0x323389,_0x51a218),_0x59e2ea);});return this[_0x2d58('0xb')][_0x2d58('0x8d')](util['format'](_0x2d58('0x12a'),_0x323389));}else{return this[_0x2d58('0xb')][_0x2d58('0x7c')](_0x323389,_0x104ba6);}};AGIVertices['prototype'][_0x2d58('0x9')]=function(_0x5426f9){logger['info'](util['format'](_0x2d58('0x12b'),_0x5426f9[_0x2d58('0x81')]));if(_0x5426f9[_0x2d58('0x7f')]===0x0){return this[_0x2d58('0x7d')](_0x5426f9);}_0x5426f9['retry']-=0x1;if(!this[_0x2d58('0x61')](_0x5426f9[_0x2d58('0x12c')])){return this[_0x2d58('0xb')]['error'](_0x5426f9,_0x2d58('0xd9'));}var _0x3441b3=this['getSound'][_0x2d58('0x7e')](this,_0x5426f9[_0x2d58('0x12c')]);if(!_0x3441b3){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x5426f9,_0x2d58('0xda'));}var _0x519397=this[_0x2d58('0xb')][_0x2d58('0xdc')](_0x3441b3,_0x5426f9[_0x2d58('0xdd')],_0x5426f9[_0x2d58('0x12d')]);var _0x19ae96=_0x519397[_0x2d58('0x7a')];if(_0x519397[_0x2d58('0x7a')]===-0x1){this['createSquareDetailsReport'][_0x2d58('0x7e')](this,_0x5426f9,'-1');return _0x519397;}else if(_0x519397[_0x2d58('0x7b')]===_0x2d58('0x86')){_0x519397[_0x2d58('0x7a')]=_0x519397['result'][_0x2d58('0x77')]>0x0?_0x519397['result']:'t';}else if(_[_0x2d58('0x3f')](_0x519397[_0x2d58('0x7a')])){_0x519397[_0x2d58('0x7a')]='#';_0x19ae96='#';}if(!this[_0x2d58('0x61')](_0x5426f9[_0x2d58('0xad')])){this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0xdb'));}else{var _0x74e51d=this[_0x2d58('0x79')]['sync'](this,_0x5426f9[_0x2d58('0xad')]);if(!_0x74e51d){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x5426f9,'no\x20variable\x20found');}this[_0x2d58('0xb')]['setVariable'](_0x74e51d,_0x19ae96);}this[_0x2d58('0x33')][_0x2d58('0x7e')](this,_0x5426f9,_0x19ae96);return _0x519397;};AGIVertices[_0x2d58('0xe')]['noop']=function(_0x978087){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x12e'),_0x978087['label']));return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x978087['output']||_0x978087[_0x2d58('0x81')]);};AGIVertices[_0x2d58('0xe')][_0x2d58('0x12f')]=function(_0x43fb15){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')]('Enter\x20in\x20PAUSE\x20(%s)\x20block',_0x43fb15[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x43fb15['findBy'])){return this['channel']['error'](_0x43fb15,_0x2d58('0x121'));}logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x130'),this[_0x2d58('0xb')][_0x2d58('0x35')],_0x43fb15[_0x2d58('0x120')]));var _0x73782e=this[_0x2d58('0x131')]['sync'](this,_0x43fb15[_0x2d58('0x132')]);var _0x5536b2=this['agentPause'][_0x2d58('0x7e')](this,_0x43fb15[_0x2d58('0x120')],_0x73782e);if(_0x5536b2){logger[_0x2d58('0x2a')](util['format']('AGENT\x20%s\x20FOUND\x20BY',this[_0x2d58('0xb')][_0x2d58('0x35')],_0x43fb15[_0x2d58('0x120')]));this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0x122'),this[_0x2d58('0xb')][_0x2d58('0x35')],_0x43fb15[_0x2d58('0x120')]));return{'code':0xc8,'result':'success'};}else{logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x124'),this[_0x2d58('0xb')][_0x2d58('0x35')],_0x43fb15['findBy']));this['channel'][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0x122'),this[_0x2d58('0xb')][_0x2d58('0x35')],_0x43fb15[_0x2d58('0x120')]));return{'code':0xc8,'result':_0x2d58('0x125')};}};AGIVertices[_0x2d58('0xe')]['playback']=function(_0x2e66b3){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x133'),_0x2e66b3[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x2e66b3['file_id'])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x2e66b3,'no\x20file\x20audio\x20selected');}var _0x5ce201=this['getSound']['sync'](this,_0x2e66b3[_0x2d58('0x12c')]);if(!_0x5ce201){return this['channel'][_0x2d58('0x28')](_0x2e66b3,_0x2d58('0xda'));}var _0x34fc22=this[_0x2d58('0xb')]['exec'](_0x2d58('0x134'),[_0x5ce201,_0x2e66b3[_0x2d58('0xb8')]]);if(_0x34fc22[_0x2d58('0x7a')]===-0x1){return _0x34fc22;}return this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0x93'),_0x2d58('0x134'),_0x5ce201));};AGIVertices[_0x2d58('0xe')][_0x2d58('0x135')]=function(_0x4fca5c){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x136'),_0x4fca5c['label']));if(!this[_0x2d58('0x61')](_0x4fca5c['queue_id'])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x4fca5c,'no\x20queue\x20selected');}var _0x5afc79='';var _0xcbc26f=parseInt(_0x4fca5c[_0x2d58('0x137')],0xa);if(isNaN(_0xcbc26f)){_0x5afc79=_0x4fca5c[_0x2d58('0x137')];}else{_0x5afc79=this[_0x2d58('0x138')][_0x2d58('0x7e')](this,_0x4fca5c['queue_id']);if(!_0x5afc79){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x4fca5c,_0x2d58('0x139'));}}var _0x1ffd14='';if(this['isConfigured'](_0x4fca5c[_0x2d58('0x12c')])){var _0x1884fc=this[_0x2d58('0x1d')][_0x2d58('0x7e')](this,_0x4fca5c[_0x2d58('0x12c')]);if(_0x1884fc){_0x1ffd14=_0x1884fc;}}this[_0x2d58('0x33')][_0x2d58('0x7e')](this,_0x4fca5c,_0x5afc79);if(_0x4fca5c[_0x2d58('0xb8')][_0x2d58('0x13a')]('x')<0x0){_0x4fca5c['opts']+='x';}if(_0x4fca5c[_0x2d58('0xb8')][_0x2d58('0x13a')]('X')<0x0){_0x4fca5c[_0x2d58('0xb8')]+='X';}this[_0x2d58('0xb')][_0x2d58('0x7c')](_0x2d58('0x13b'),_0x5afc79?_0x5afc79[_0x2d58('0x13c')]():'');var _0x173b4f=this[_0x2d58('0xb')][_0x2d58('0x52')]('QUEUE',[_0x5afc79,_0x4fca5c[_0x2d58('0xb8')],_0x4fca5c[_0x2d58('0xb9')],_0x1ffd14,_0x4fca5c[_0x2d58('0x86')],_0x4fca5c[_0x2d58('0x7')],_0x4fca5c['macro'],_0x4fca5c['gosub'],'',_0x4fca5c[_0x2d58('0x13d')]]);if(_0x173b4f[_0x2d58('0x7a')]===-0x1){return _0x173b4f;}return this['channel'][_0x2d58('0x8d')](util[_0x2d58('0x24')]('Executed\x20command\x20%s\x20%s',_0x2d58('0x13e'),_0x5afc79));};AGIVertices[_0x2d58('0xe')][_0x2d58('0x13f')]=function(_0x56e670){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')]('Enter\x20in\x20RECORD\x20(%s)\x20block',_0x56e670[_0x2d58('0x81')]));var _0x49bfc7=_0x56e670['recordingFormat']||_0x2d58('0x101');var _0x2ee8fc=util[_0x2d58('0x24')](_0x2d58('0x140'),this['channel']['uniqueid'],rs[_0x2d58('0xe4')](0x5));var _0x3aa73e=util[_0x2d58('0x24')]('%s/recordings/%s.%s',FILES_PATH,_0x2ee8fc,_0x49bfc7);var _0x4df3cb=util['format']('%s/recordings/%s',FILES_PATH,_0x2ee8fc);this[_0x2d58('0x36')]['sync'](this,_0x56e670,_0x2ee8fc,_0x3aa73e);this[_0x2d58('0xb')][_0x2d58('0x7c')](_0x2d58('0x141'),_0x2ee8fc);logger[_0x2d58('0x2a')]('Recording\x20%s\x20%s\x20%s\x20%s',_0x4df3cb,_0x49bfc7,_0x56e670[_0x2d58('0x142')],_0x56e670[_0x2d58('0x86')]);return this['channel'][_0x2d58('0xfa')](_0x4df3cb,_0x49bfc7,_0x56e670['escape_digits'],_0x56e670[_0x2d58('0x86')],undefined,!![]);};AGIVertices[_0x2d58('0xe')]['saydigits']=function(_0xc76f4){logger['info'](util[_0x2d58('0x24')](_0x2d58('0x143'),_0xc76f4[_0x2d58('0x81')]));return this[_0x2d58('0xb')][_0x2d58('0x144')](_0xc76f4[_0x2d58('0x145')][_0x2d58('0xac')](/\s+/g,''),_0xc76f4['escape_digits']);};AGIVertices[_0x2d58('0xe')][_0x2d58('0x146')]=function(_0x98e5b8){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x147'),_0x98e5b8[_0x2d58('0x81')]));return this[_0x2d58('0xb')]['sayNumber'](_0x98e5b8[_0x2d58('0x148')][_0x2d58('0xac')](/\s+/g,''),_0x98e5b8['escape_digits']);};AGIVertices[_0x2d58('0xe')][_0x2d58('0x149')]=function(_0x1e6f0e){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x14a'),_0x1e6f0e[_0x2d58('0x81')]));return this[_0x2d58('0xb')]['sayPhonetic'](_0x1e6f0e[_0x2d58('0x55')],_0x1e6f0e[_0x2d58('0x142')]);};AGIVertices['prototype'][_0x2d58('0x14b')]=function(_0x55d4c9){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x14c'),_0x55d4c9[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x55d4c9[_0x2d58('0x14d')])){return this[_0x2d58('0xb')]['noop'](_0x2d58('0x14e'));}var _0x1ca22a=this[_0x2d58('0x1e')]['sync'](this,_0x55d4c9[_0x2d58('0x14d')]);if(!_0x1ca22a||!_0x1ca22a[_0x2d58('0x14f')]){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x55d4c9,'no\x20mail\x20account\x20found');}var _0x232241={'from':util[_0x2d58('0x24')](_0x2d58('0x150'),_0x1ca22a['name'],_0x1ca22a[_0x2d58('0x151')]||_0x1ca22a['Smtp'][_0x2d58('0x152')]),'to':_0x55d4c9['to']||'','cc':_0x55d4c9['cc']||'','bcc':_0x55d4c9['bcc']||'','subject':_0x55d4c9[_0x2d58('0x153')],'html':_0x55d4c9[_0x2d58('0x55')],'text':_0x55d4c9[_0x2d58('0x55')]};var _0x519660={'tls':{'rejectUnauthorized':![]}};if(_0x1ca22a[_0x2d58('0x14f')][_0x2d58('0x154')]){_0x519660[_0x2d58('0x154')]=_0x1ca22a['Smtp'][_0x2d58('0x154')];}else{_0x519660[_0x2d58('0x155')]=_0x1ca22a[_0x2d58('0x14f')][_0x2d58('0x155')];_0x519660[_0x2d58('0x156')]=_0x1ca22a[_0x2d58('0x14f')][_0x2d58('0x156')];_0x519660['secure']=_0x1ca22a[_0x2d58('0x14f')][_0x2d58('0x157')];}if(_0x1ca22a[_0x2d58('0x14f')][_0x2d58('0x158')]){_0x519660[_0x2d58('0x159')]={'user':_0x1ca22a[_0x2d58('0x14f')][_0x2d58('0x152')],'pass':_0x1ca22a[_0x2d58('0x14f')][_0x2d58('0x15a')]};}if(this[_0x2d58('0x61')](_0x55d4c9[_0x2d58('0x15b')])){}logger[_0x2d58('0xb3')](_0x2d58('0x15c'),JSON[_0x2d58('0xfe')](_0x232241));this[_0x2d58('0x33')][_0x2d58('0x7e')](this,_0x55d4c9,_0x55d4c9['account_id']);this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0x15d'),_0x1ca22a['name']));this[_0x2d58('0x20')]['sync'](this,_0x519660,_0x232241);return this[_0x2d58('0xb')][_0x2d58('0x8d')]('Mail\x20message\x20added\x20to\x20outgoing\x20process');};AGIVertices[_0x2d58('0xe')]['sendFax']=function(_0xff9f79){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x15e'),_0xff9f79[_0x2d58('0x81')]));return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0x15f'));};AGIVertices[_0x2d58('0xe')][_0x2d58('0x160')]=function(_0x4446dd){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x161'),_0x4446dd[_0x2d58('0x81')]));if(!this['isConfigured'](_0x4446dd[_0x2d58('0x162')])){return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0x163'));}var _0x1708a8=this['getSmsAccount'][_0x2d58('0x7e')](this,_0x4446dd['sms_account_id']);if(!_0x1708a8){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x4446dd,_0x2d58('0x164'));}var _0x4c2b99={'body':_0x4446dd[_0x2d58('0x165')],'phone':_0x4446dd['to']||'','SmsAccountId':_0x1708a8['id']};logger[_0x2d58('0xb3')](_0x2d58('0x166'),JSON[_0x2d58('0xfe')](_0x4c2b99));this[_0x2d58('0x33')][_0x2d58('0x7e')](this,_0x4446dd,_0x4446dd[_0x2d58('0x162')]);this['channel'][_0x2d58('0x8d')](util[_0x2d58('0x24')]('Trying\x20SendSMS\x20with\x20account\x20%s',_0x1708a8['name']));this['createSmsMessage'][_0x2d58('0x7e')](this,_0x4c2b99);return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0x167'));};AGIVertices[_0x2d58('0xe')]['set']=function(_0x4a1423){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')]('Enter\x20in\x20SET\x20(%s)\x20block',_0x4a1423[_0x2d58('0x81')]));if(!this['isConfigured'](_0x4a1423[_0x2d58('0xad')])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x4a1423,_0x2d58('0x168'));}var _0x5b21af=this[_0x2d58('0x79')][_0x2d58('0x7e')](this,_0x4a1423[_0x2d58('0xad')]);if(!_0x5b21af){return this['channel'][_0x2d58('0x28')](_0x4a1423,_0x2d58('0xae'));}return this[_0x2d58('0xb')][_0x2d58('0x7c')](_0x5b21af,_0x4a1423[_0x2d58('0x169')]);};AGIVertices[_0x2d58('0xe')][_0x2d58('0x16a')]=function(_0x26d57b){logger['info'](util[_0x2d58('0x24')](_0x2d58('0x16b'),_0x26d57b[_0x2d58('0x81')]));this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0x16c'));if(_0x26d57b[_0x2d58('0x84')]===_0x2d58('0x16d')){this[_0x2d58('0xb')]['noop'](_0x2d58('0x16e'));return this[_0x2d58('0xb')][_0x2d58('0x84')]();}return this[_0x2d58('0xb')][_0x2d58('0x8d')](_0x2d58('0x16f'));};AGIVertices[_0x2d58('0xe')][_0x2d58('0x170')]=function(_0x423878){logger['info'](util[_0x2d58('0x24')](_0x2d58('0x171'),_0x423878['label']));if(!this[_0x2d58('0x61')](_0x423878[_0x2d58('0x172')])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x423878,'no\x20subproject\x20selected');}var _0x1ca1de=this['getSquareProject'][_0x2d58('0x7e')](this,_0x423878[_0x2d58('0x172')]);if(!this[_0x2d58('0x61')](_0x1ca1de)){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x423878,util[_0x2d58('0x24')](_0x2d58('0x173'),_0x423878[_0x2d58('0x172')]));}if(_0x1ca1de===this[_0x2d58('0xb')][_0x2d58('0x3b')]){return this['channel'][_0x2d58('0x28')](_0x423878,'project\x20in\x20subproject\x20must\x20be\x20different\x20from\x20the\x20called\x20project');}this[_0x2d58('0x33')][_0x2d58('0x7e')](this,_0x423878,_0x1ca1de);var _0x2462d5=this[_0x2d58('0xb')]['exec'](_0x2d58('0x174'),util[_0x2d58('0x24')](_0x2d58('0x175'),config[_0x2d58('0x7')][_0x2d58('0x155')]||_0x2d58('0x176'),_0x1ca1de,this['channel'][_0x2d58('0x3b')]));if(_0x2462d5['result']===-0x1){return _0x2462d5;}return this['channel'][_0x2d58('0x8d')](util[_0x2d58('0x24')]('Executed\x20command\x20%s\x20%s',_0x2d58('0x174'),_0x1ca1de));};AGIVertices[_0x2d58('0xe')]['system']=function(_0x26fcbb){logger[_0x2d58('0x2a')](util['format'](_0x2d58('0x177'),_0x26fcbb['label']));var _0x4d1d08=this[_0x2d58('0x51')][_0x2d58('0x7e')](this,_0x26fcbb[_0x2d58('0x82')]);this[_0x2d58('0x33')][_0x2d58('0x7e')](this,_0x26fcbb,_0x26fcbb[_0x2d58('0x82')]);if(this[_0x2d58('0x61')](_0x26fcbb[_0x2d58('0xad')])){var _0x4a4e11=this[_0x2d58('0x79')][_0x2d58('0x7e')](this,_0x26fcbb[_0x2d58('0xad')]);if(_0x4a4e11){this['channel']['setVariable'](_0x4a4e11,_0x4d1d08);return this['channel'][_0x2d58('0x8d')](util['format'](_0x2d58('0x178'),_0x26fcbb['command'],_0x4a4e11));}}return this['channel'][_0x2d58('0x8d')](util['format']('sh\x20command:\x20%s\x20result\x20no\x20stored',_0x26fcbb[_0x2d58('0x82')]));};AGIVertices[_0x2d58('0xe')][_0x2d58('0x179')]=function(_0x361dfb){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x17a'),_0x361dfb[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x361dfb[_0x2d58('0x55')])){return this['channel'][_0x2d58('0x8d')](_0x2d58('0x94'));}this['channel'][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0x17b'),_0x361dfb[_0x2d58('0x55')]));var _0x2befb2=this['googleTTS'][_0x2d58('0x7e')](this,_0x361dfb);if(_0x2befb2){this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0x17c'),_0x2befb2));var _0xd560f6=this[_0x2d58('0xb')][_0x2d58('0xee')](_0x2befb2);try{fs['unlink'](_0x2befb2+'.wav');}catch(_0x59ee91){logger['error'](_0x59ee91);}return _0xd560f6;}return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x361dfb,_0x2d58('0x17d'));};AGIVertices[_0x2d58('0xe')][_0x2d58('0x17e')]=function(_0x26a63a){logger['info'](util[_0x2d58('0x24')](_0x2d58('0x17f'),_0x26a63a[_0x2d58('0x81')]));if(!this[_0x2d58('0x61')](_0x26a63a[_0x2d58('0x120')])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x26a63a,_0x2d58('0x121'));}logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x130'),this[_0x2d58('0xb')]['callerid'],_0x26a63a[_0x2d58('0x120')]));var _0x5ce44d=this[_0x2d58('0x4c')][_0x2d58('0x7e')](this,_0x26a63a['findBy']);if(_0x5ce44d){logger[_0x2d58('0x2a')](util['format'](_0x2d58('0x122'),this[_0x2d58('0xb')][_0x2d58('0x35')],_0x26a63a[_0x2d58('0x120')]));this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')]('AGENT\x20%s\x20FOUND\x20BY',this['channel'][_0x2d58('0x35')],_0x26a63a[_0x2d58('0x120')]));return{'code':0xc8,'result':_0x2d58('0x123')};}else{logger[_0x2d58('0x2a')](util['format'](_0x2d58('0x124'),this['channel'][_0x2d58('0x35')],_0x26a63a[_0x2d58('0x120')]));this[_0x2d58('0xb')][_0x2d58('0x8d')](util[_0x2d58('0x24')](_0x2d58('0x124'),this['channel'][_0x2d58('0x35')],_0x26a63a[_0x2d58('0x120')]));return{'code':0xc8,'result':'failure'};}};AGIVertices[_0x2d58('0xe')][_0x2d58('0x180')]=function(_0x52d444){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')](_0x2d58('0x181'),_0x52d444['label']));var _0x3a4b4f=this[_0x2d58('0xb')][_0x2d58('0x52')](_0x2d58('0x182'),[_0x52d444[_0x2d58('0x183')],_0x52d444[_0x2d58('0x92')]]);if(_0x3a4b4f[_0x2d58('0x7a')]===-0x1){return _0x3a4b4f;}return this[_0x2d58('0xb')][_0x2d58('0x8d')](util['format'](_0x2d58('0x93'),_0x2d58('0x182'),_0x52d444[_0x2d58('0x183')]));};AGIVertices[_0x2d58('0xe')][_0x2d58('0x184')]=function(_0x2d6dd1){logger[_0x2d58('0x2a')](util[_0x2d58('0x24')]('Enter\x20in\x20SWITCH\x20(%s)\x20block',_0x2d6dd1['label']));if(!this[_0x2d58('0x61')](_0x2d6dd1['variable_id'])){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x2d6dd1,'no\x20variable\x20selected');}var _0x543852=this['getVariable'][_0x2d58('0x7e')](this,_0x2d6dd1[_0x2d58('0xad')]);if(!_0x543852){return this[_0x2d58('0xb')][_0x2d58('0x28')](_0x2d6dd1,_0x2d58('0xae'));}var _0x41e998=this[_0x2d58('0xb')][_0x2d58('0x79')](_0x543852);return{'code':0xc8,'result':_0x41e998[_0x2d58('0x7b')]?_0x41e998[_0x2d58('0x7b')]:'-'};};String[_0x2d58('0xe')][_0x2d58('0x185')]=function(_0x6d6877,_0x632214){return this[_0x2d58('0x76')](_0x6d6877)[_0x2d58('0x186')](_0x632214);};module['exports']=AGIVertices;
\ No newline at end of file
+var _0x0890=['success','playback','Enter\x20in\x20PLAYBACK\x20(%s)\x20block','PLAYBACK','queue','Enter\x20in\x20QUEUE\x20(%s)\x20block','no\x20queue\x20selected','queue_id','getVoiceQueue','indexOf','XMCS-QUEUE','toLowerCase','macro','position','QUEUE','record','Enter\x20in\x20RECORD\x20(%s)\x20block','recordingFormat','%s_%s','%s/recordings/%s.%s','RECORDING_SAVENAME','escape_digits','saydigits','Enter\x20in\x20SAYDIGITS\x20(%s)\x20block','sayDigits','digits','saynumber','Enter\x20in\x20SAYNUMBER\x20(%s)\x20block','sayNumber','number','Enter\x20in\x20SAYPHONETIC\x20(%s)\x20block','sendMail','Enter\x20in\x20SENDMAIL\x20(%s)\x20block','account_id','no\x20mail\x20account\x20found','email','Smtp','user','bcc','subject','service','host','port','secure','authentication','auth','pass','sendMail\x20message','Trying\x20SendMail\x20with\x20account\x20%s','sendFax','Enter\x20in\x20SENDFAX\x20(%s)\x20block','sendSMS','sms_account_id','no\x20sms\x20account\x20configured','no\x20sms\x20account\x20found','sms_text','Trying\x20SendSMS\x20with\x20account\x20%s','Enter\x20in\x20SET\x20(%s)\x20block','no\x20variable\x20selected','variable_value','start','Enter\x20in\x20START\x20(%s)\x20block','START\x20CALLY\x20SQUARE','yes','Enter\x20in\x20SUBPROJECT\x20(%s)\x20block','project_id','no\x20subproject\x20found\x20with\x20id\x20%d','project\x20in\x20subproject\x20must\x20be\x20different\x20from\x20the\x20called\x20project','AGI','agi://%s/square,\x22%s\x22,\x22%s\x22','127.0.0.1','system','Enter\x20in\x20SYSTEM\x20(%s)\x20block','sh\x20command:\x20%s\x20result\x20on\x20variable:\x20%s','tts','Trying\x20Google\x20TTS\x20%s','Google\x20TTS\x20%s\x20file\x20created','Google\x20TTS\x20is\x20unreachable','Enter\x20in\x20UNPAUSE\x20(%s)\x20block','Enter\x20in\x20VOICEMAIL\x20(%s)\x20block','mailbox','vswitch','replaceAll','path','util','shelljs','odbc','../../config/logger','menu','getdigits','getsecretdigits','channel','rpc','mailRpc','name','catch','prototype','getVoiceQueueById','then','getSquareProject','getSquareProjectById','getSquareOdbc','getSquareOdbcById','dsn','getUserById','getTrunk','getTrunkById','getSoundById','getMailAccount','getMailAccountById','sendMailMessage','getIntervals','getIntervalById','IntervalId','interval','map','Intervals','format','%s/sounds/converted/%s','open','error','info','query','Error\x20executing\x20query\x20%s','Query\x20executed\x20correctly\x20%s','close','Error\x20closing\x20connection\x20to\x20odbc\x20%s','getSmsAccount','createSmsMessage','createSquareDetailsReport','uniqueid','agicommand','arg_1','createSquareRecording','callerid','calleridname','context','extension','priority','dnid','file','createSquareMessage','createCmContact','isEmpty','isNil','lastName','list_id','scheduledAt','callback','Callback\x20scheduled\x20at\x20','toString','callback_priority','getPause','getPauseById','agentPause','agent','agentUnpause','agentLogout','agentLogin','internal','%s/%s@from-sip/n','LOCAL','shellCommand','googleTTS','text','google_tts_language','googleDialogflow','key','dialogflow_language','sestekNDA','ispeechTTS','ispeech_tts_language','en-US','ispeech_asr_language','isConfigured','model','awsPolly','aws_access_key_id','aws_secret_access_key','aws_polly_region','aws_polly_voice','Amy','aws_text_type','awsLex','aws_lex_region','aws_bot_name','googleASR','google_asr_language','tildeASR','appsecret','clear','includes','clone','hasOwnProperty','isString','replaceAllVariables','split','length','extra','getAndSetVariable','getVariable','setVariable','sync','maxRetry','agi','Enter\x20in\x20AGI\x20(%s)\x20block','label','command','args','Enter\x20in\x20ANSWER\x20(%s)\x20block','Wait\x20%s\x20seconds\x20before\x20answer','timeout','wait','result','answer','Enter\x20in\x20CALLBACK\x20(%s)\x20block','add','delay','minutes','noop','phone','custom_app','Enter\x20in\x20CUSTOM\x20APP\x20(%s)\x20block','application','Executed\x20command\x20%s\x20%s','options','lumenvoxtts','no\x20text\x20configured','Executed\x20command\x20MRCPSynth\x20%s','sestektts','Enter\x20in\x20SESTEKTTS\x20(%s)\x20block','MRCPSynth','lumenvoxasr','Enter\x20in\x20LUMENVOXASR\x20(%s)\x20block','grammar','no\x20grammar\x20configured','exec','MRCPRecog','RECOG_CONFIDENCE()','RECOG_INPUT()','LUMENVOX_ASR_TRANSCRIPT','RECOG_INSTANCE()','LUMENVOX_ASR_INSTANCE','Executed\x20command\x20MRCPRecog\x20%s','Enter\x20in\x20SESTEKASR\x20(%s)\x20block','SESTEK_ASR_CONFIDENCE','SESTEK_ASR_TRANSCRIPT','SESTEK_ASR_INSTANCE','database','Enter\x20in\x20DATABASE\x20(%s)\x20block','odbc_id','no\x20database\x20selected','no\x20odbc\x20database\x20found','no\x20query\x20configured','replace','query:\x20%s','getQueryOdbc','variable_id','no\x20variable\x20found','keys','%s_ROWS_COUNT','dial','debug','Enter\x20in\x20DIAL\x20(%s)\x20block','sip_id','no\x20user\x20selected','getUser','no\x20user\x20found','DIAL','SIP/%s','opts','url','dialogflow','Enter\x20in\x20DIALOGFLOW\x20(%s)\x20block','no\x20key\x20configured','DIALOGFLOW_%s','toUpperCase','speech','Enter\x20in\x20SESTEKNDA\x20(%s)\x20block','ndauth_url','username','no\x20username\x20configured','password','no\x20password\x20configured','ndassistant_url','bot','Trying\x20SestekNDA:\x20%s','SESTEK_NDA_%s','out','Sestek\x20NDA\x20%s\x20file\x20created','audiofile','streamFile','SestekNDA\x20Result\x20%s','end','Enter\x20in\x20END\x20(%s)\x20block','ext_dial','Enter\x20in\x20EXTERNAL\x20DIAL\x20(%s)\x20block','trunk_id','no\x20trunk\x20selected','no\x20trunk\x20found','trunk_name','SIP/%s/%s','Executed\x20command\x20%s','finally','Enter\x20in\x20FINALLY\x20(%s)\x20block','retry','file_id','no\x20file\x20audio\x20selected','no\x20variable\x20selected\x20for\x20the\x20result','getData','response','maxdigit','stringify','mindigit','hiddendigitsnum','generate','hiddendigitspos','substr','Enter\x20in\x20GETSECRETDIGITS\x20(%s)\x20block','goal','Enter\x20in\x20GOAL\x20(%s)\x20block','goalname','GOAL\x20%s','awspolly','[AGI]\x20Enter\x20in\x20AWSPOLLY\x20(%s)\x20block','no\x20valid\x20credentials\x20configured','Trying\x20aws\x20Polly\x20%s','aws\x20Polly\x20%s\x20file\x20created','unlink','aws\x20Polly\x20is\x20unreachable','awslex','Enter\x20in\x20Amazon\x20Lex\x20(%s)\x20block','no\x20bot\x20name\x20configured','AWS_LEX_%s','message','Amazon\x20Lex\x20Result\x20%s','Amazon\x20Lex\x20is\x20unreachable','googleasr','Enter\x20in\x20GOOGLEASR\x20(%s)\x20block\x20%s','wav','%s/recordings/%s','%s.%s','intKey','google\x20%s\x20file\x20created','GOOGLE_ASR_%s','GoogleASR\x20Result\x20%s','tildeasr','Enter\x20in\x20TILDEASR\x20(%s)\x20block','appid','no\x20appid\x20configured','no\x20appsecret\x20configured','beep','NOBEEP','tilde\x20%s\x20file\x20created','TILDE_ASR_%s','TildeASR\x20Result\x20%s','gotoc','Enter\x20in\x20GOTO\x20(%s)\x20block','continueAt','Enter\x20in\x20GOTOIF\x20(%s)\x20block','condition','no\x20condition\x20configured','true','false','gotoiftime','no\x20interval\x20configured','interval_id','no\x20intervals\x20found','IFTIME(%s?true:false)','IFTIME\x20%s\x20%s','hangup','Enter\x20in\x20ISPEECHASR\x20(%s)\x20block','recordFile','ispeech\x20%s\x20file\x20created','ispeechASR','ISPEECH_ASR_%s','ispeechtts','Enter\x20in\x20ISPEECHTTS\x20(%s)\x20block','Trying\x20ispeech\x20TTS\x20%s','.wav','ispeech\x20TTS\x20is\x20unreachable','login','Enter\x20in\x20LOGIN\x20(%s)\x20block','findBy','AGENT\x20%s\x20FOUND\x20BY','AGENT\x20%s\x20NOT\x20FOUND\x20BY','logout','Enter\x20in\x20LOGOUT\x20(%s)\x20block','no\x20find\x20by\x20configured','failure','math','Enter\x20in\x20MATH\x20(%s)\x20block','operation','no\x20operation\x20configured','isArray','forEach','%s[%s]','Enter\x20in\x20MENU\x20(%s)\x20block','getSound','no\x20file\x20audio\x20found','output','FIND\x20AGENT\x20%s\x20BY\x20%s','pause_id'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x0890,0x1e6));var _0x0089=function(_0x1010ab,_0x26aa57){_0x1010ab=_0x1010ab-0x0;var _0x251870=_0x0890[_0x1010ab];return _0x251870;};'use strict';var fs=require('fs');var path=require(_0x0089('0x0'));var util=require(_0x0089('0x1'));var _=require('lodash');var sh=require(_0x0089('0x2'));var odbc=require(_0x0089('0x3'))();var rs=require('randomstring');var moment=require('moment');var Mustache=require('mustache');var logger=require(_0x0089('0x4'))('agi');var config=require('../../config/environment');var scripts=require('./scripts');var FILES_PATH='/var/opt/motion2/server/files';var verticesWithRetry=[_0x0089('0x5'),_0x0089('0x6'),_0x0089('0x7')];var AGIVertices=function(_0x2b1de5,_0x5bdafe,_0x473a60){this[_0x0089('0x8')]=_0x2b1de5;this[_0x0089('0x9')]=_0x5bdafe;this[_0x0089('0xa')]=_0x473a60;};AGIVertices['prototype']['getVariable']=function(_0x76254b,_0x53e867){this[_0x0089('0x9')]['getVariableById'](_0x76254b)['then'](function(_0x20a7dd){_0x53e867(null,_0x20a7dd?_0x20a7dd[_0x0089('0xb')]:![]);})[_0x0089('0xc')](function(_0x23781e){_0x53e867(_0x23781e);});};AGIVertices[_0x0089('0xd')]['getVoiceQueue']=function(_0xe27e4e,_0x495f50){this[_0x0089('0x9')][_0x0089('0xe')](_0xe27e4e)[_0x0089('0xf')](function(_0x6803e9){_0x495f50(null,_0x6803e9?_0x6803e9[_0x0089('0xb')]:![]);})[_0x0089('0xc')](function(_0x17d27b){_0x495f50(_0x17d27b);});};AGIVertices[_0x0089('0xd')][_0x0089('0x10')]=function(_0x4fcbcc,_0x13db68){this[_0x0089('0x9')][_0x0089('0x11')](_0x4fcbcc)[_0x0089('0xf')](function(_0x128692){_0x13db68(null,_0x128692?_0x128692[_0x0089('0xb')]:![]);})['catch'](function(_0x3a6e38){_0x13db68(_0x3a6e38);});};AGIVertices[_0x0089('0xd')][_0x0089('0x12')]=function(_0x21df35,_0x4066e3){this['rpc'][_0x0089('0x13')](_0x21df35)[_0x0089('0xf')](function(_0x443e62){_0x4066e3(null,_0x443e62?_0x443e62[_0x0089('0x14')]:![]);})[_0x0089('0xc')](function(_0x23abd9){_0x4066e3(_0x23abd9);});};AGIVertices[_0x0089('0xd')]['getUser']=function(_0x32dd4c,_0xcc29b4){this[_0x0089('0x9')][_0x0089('0x15')](_0x32dd4c)[_0x0089('0xf')](function(_0x59db32){_0xcc29b4(null,_0x59db32?_0x59db32['name']:![]);})[_0x0089('0xc')](function(_0x48cf40){_0xcc29b4(_0x48cf40);});};AGIVertices['prototype'][_0x0089('0x16')]=function(_0x60035d,_0x579964){this[_0x0089('0x9')][_0x0089('0x17')](_0x60035d)[_0x0089('0xf')](function(_0x21ffc3){_0x579964(null,_0x21ffc3?_0x21ffc3[_0x0089('0xb')]:![]);})[_0x0089('0xc')](function(_0xaecf2){_0x579964(_0xaecf2);});};AGIVertices[_0x0089('0xd')]['getSound']=function(_0x5e8f35,_0x487c23){var _0x28c59d=this;this['rpc'][_0x0089('0x18')](_0x5e8f35)[_0x0089('0xf')](function(_0x3fd0b1){_0x487c23(null,_0x3fd0b1?_0x28c59d['getSoundPath'](_0x3fd0b1['save_name']):![]);})[_0x0089('0xc')](function(_0x4812c6){_0x487c23(_0x4812c6);});};AGIVertices[_0x0089('0xd')][_0x0089('0x19')]=function(_0x5f328b,_0x5c1ca0){this[_0x0089('0x9')][_0x0089('0x1a')](_0x5f328b)[_0x0089('0xf')](function(_0x16b785){_0x5c1ca0(null,_0x16b785?_0x16b785:![]);})['catch'](function(_0x24e622){_0x5c1ca0(_0x24e622);});};AGIVertices[_0x0089('0xd')]['sendMailMessage']=function(_0x22e244,_0x42c46c,_0x4bc251){this['mailRpc'][_0x0089('0x1b')](_0x22e244,_0x42c46c)[_0x0089('0xf')](function(){_0x4bc251(null);})['catch'](function(_0x293d68){_0x4bc251(_0x293d68);});};AGIVertices['prototype'][_0x0089('0x1c')]=function(_0x1e81da,_0x5d8a0f){this[_0x0089('0x9')][_0x0089('0x1d')](_0x1e81da)[_0x0089('0xf')](function(_0x2b01da){if(_0x2b01da){if(_0x2b01da[_0x0089('0x1e')]){_0x5d8a0f(null,[_0x2b01da[_0x0089('0x1f')]]);}else{_0x5d8a0f(null,_[_0x0089('0x20')](_0x2b01da[_0x0089('0x21')],'interval'));}}else{_0x5d8a0f(null,![]);}})['catch'](function(_0x2e513f){_0x5d8a0f(_0x2e513f);});};AGIVertices['prototype']['getSoundPath']=function(_0x8cba4b){return util[_0x0089('0x22')](_0x0089('0x23'),FILES_PATH,_0x8cba4b);};AGIVertices[_0x0089('0xd')]['getQueryOdbc']=function(_0x44e18e,_0x21a08c,_0x3ef3e5){odbc[_0x0089('0x24')](_0x44e18e,function(_0x5a70ae){if(_0x5a70ae){logger[_0x0089('0x25')]('Error\x20getting\x20ODBC\x20connection\x20%s',_0x5a70ae);_0x3ef3e5(_0x5a70ae);}else{logger[_0x0089('0x26')]('ODBC\x20connection\x20successfully');odbc[_0x0089('0x27')](_0x21a08c,function(_0x3803a2,_0x5d941b){if(_0x3803a2){logger[_0x0089('0x26')](_0x0089('0x28'),_0x21a08c);_0x3ef3e5(_0x3803a2);}else{logger[_0x0089('0x26')](_0x0089('0x29'),_0x21a08c);odbc[_0x0089('0x2a')](function(_0x546339){if(_0x546339){logger[_0x0089('0x25')](_0x0089('0x2b'),_0x546339);}_0x3ef3e5(null,_0x5d941b);});}});}});};AGIVertices[_0x0089('0xd')][_0x0089('0x2c')]=function(_0x32dbf1,_0x18e785){this[_0x0089('0x9')]['getSmsAccountById'](_0x32dbf1)[_0x0089('0xf')](function(_0x10535b){_0x18e785(null,_0x10535b?_0x10535b:![]);})[_0x0089('0xc')](function(_0x102fa2){_0x18e785(_0x102fa2);});};AGIVertices[_0x0089('0xd')][_0x0089('0x2d')]=function(_0x48f32d,_0x44686f){this[_0x0089('0x9')][_0x0089('0x2d')](_0x48f32d)[_0x0089('0xf')](function(_0x3b0a5d){_0x44686f(null,_0x3b0a5d);})['catch'](function(_0x47ae37){_0x44686f(_0x47ae37);});};AGIVertices[_0x0089('0xd')][_0x0089('0x2e')]=function(_0x22c405,_0x5c0bd3,_0x145bbb){this['rpc'][_0x0089('0x2e')]({'uniqueid':this[_0x0089('0x8')][_0x0089('0x2f')],'node':_0x22c405['label'],'application':_0x22c405[_0x0089('0x30')],'data':_0x5c0bd3||null,'project_name':this[_0x0089('0x8')][_0x0089('0x31')],'callerid':this[_0x0089('0x8')]['callerid']})[_0x0089('0xf')](function(_0x592696){if(_0x145bbb){_0x145bbb(null,_0x592696);}})[_0x0089('0xc')](function(_0x40a645){if(_0x145bbb){_0x145bbb(_0x40a645);}});};AGIVertices[_0x0089('0xd')]['createSquareRecording']=function(_0x3ac4a2,_0x19a243,_0x2b3cad,_0x560528){this['rpc'][_0x0089('0x32')]({'uniqueid':this[_0x0089('0x8')][_0x0089('0x2f')],'callerid':this[_0x0089('0x8')][_0x0089('0x33')],'calleridname':this['channel'][_0x0089('0x34')],'context':this['channel'][_0x0089('0x35')],'extension':this[_0x0089('0x8')][_0x0089('0x36')],'priority':this[_0x0089('0x8')][_0x0089('0x37')],'accountcode':this[_0x0089('0x8')]['accountcode'],'dnid':this[_0x0089('0x8')][_0x0089('0x38')],'projectName':this[_0x0089('0x8')][_0x0089('0x31')],'saveName':_0x19a243,'filename':_0x3ac4a2[_0x0089('0x39')]||_0x19a243,'savePath':_0x2b3cad})['then'](function(_0x29feff){_0x560528(null,_0x29feff);})['catch'](function(_0x5650e9){_0x560528(_0x5650e9);});};AGIVertices[_0x0089('0xd')]['createSquareMessage']=function(_0x43a1fc,_0x533cbd,_0x5b73e3){this[_0x0089('0x9')][_0x0089('0x3a')]({'uniqueid':this['channel']['uniqueid'],'body':_0x43a1fc,'direction':_0x533cbd})[_0x0089('0xf')](function(_0xbdf315){if(_0x5b73e3){_0x5b73e3(null,_0xbdf315);}})[_0x0089('0xc')](function(_0x1e1c8a){if(_0x5b73e3){_0x5b73e3(_0x1e1c8a);}});};AGIVertices[_0x0089('0xd')][_0x0089('0x3b')]=function(_0x56cbdc,_0x2f8859){this['rpc']['createCmContact']({'firstName':_[_0x0089('0x3c')](_0x56cbdc[_0x0089('0xb')])||_[_0x0089('0x3d')](_0x56cbdc[_0x0089('0xb')])?'callback_'+Math['random']():_0x56cbdc[_0x0089('0xb')],'lastName':_['isEmpty'](_0x56cbdc[_0x0089('0x3e')])||_[_0x0089('0x3d')](_0x56cbdc[_0x0089('0x3e')])?null:_0x56cbdc[_0x0089('0x3e')],'phone':_0x56cbdc['phone'],'ListId':_0x56cbdc[_0x0089('0x3f')],'scheduledAt':_0x56cbdc[_0x0089('0x40')],'callbackUniqueid':this[_0x0089('0x8')][_0x0089('0x2f')],'tags':_0x0089('0x41'),'description':_0x0089('0x42')+_0x56cbdc[_0x0089('0x40')][_0x0089('0x43')](),'priority':_0x56cbdc[_0x0089('0x44')]})['then'](function(_0x2b73ca){_0x2f8859(null,_0x2b73ca);})[_0x0089('0xc')](function(_0x52fb44){_0x2f8859(_0x52fb44);});};AGIVertices['prototype'][_0x0089('0x45')]=function(_0x3b7980,_0x263b81){this[_0x0089('0x9')][_0x0089('0x46')](_0x3b7980)[_0x0089('0xf')](function(_0x5edb39){_0x263b81(null,_0x5edb39?_0x5edb39[_0x0089('0xb')]:![]);})[_0x0089('0xc')](function(_0x53d451){_0x263b81(_0x53d451);});};AGIVertices[_0x0089('0xd')][_0x0089('0x47')]=function(_0x485fb1,_0xe0c738,_0x8581c3){var _0x53131a={'role':_0x0089('0x48')};_0x53131a[_0x485fb1]=this['channel'][_0x0089('0x33')];this[_0x0089('0x9')][_0x0089('0x47')](_0x53131a,_0xe0c738,this['channel'][_0x0089('0x2f')])[_0x0089('0xf')](function(_0x2a758d){_0x8581c3(null,_[_0x0089('0x3d')](_0x2a758d)?![]:!![]);})[_0x0089('0xc')](function(_0x30e779){logger[_0x0089('0x25')](_0x30e779);_0x8581c3(null,![]);});};AGIVertices[_0x0089('0xd')][_0x0089('0x49')]=function(_0x9158fb,_0x3f96bb){var _0x22efc8={'role':'agent'};_0x22efc8[_0x9158fb]=this[_0x0089('0x8')]['callerid'];this[_0x0089('0x9')][_0x0089('0x49')](_0x22efc8)['then'](function(_0x58a32c){_0x3f96bb(null,_[_0x0089('0x3d')](_0x58a32c)?![]:!![]);})[_0x0089('0xc')](function(_0x21022d){logger[_0x0089('0x25')](_0x21022d);_0x3f96bb(null,![]);});};AGIVertices[_0x0089('0xd')]['agentLogout']=function(_0x52cde1,_0x1d3199){var _0x20b3b4={'role':_0x0089('0x48')};_0x20b3b4[_0x52cde1]=this['channel']['callerid'];this[_0x0089('0x9')][_0x0089('0x4a')](_0x20b3b4)['then'](function(_0x26830c){_0x1d3199(null,_['isNil'](_0x26830c)?![]:!![]);})[_0x0089('0xc')](function(_0x10bd5d){logger[_0x0089('0x25')](_0x10bd5d);_0x1d3199(null,![]);});};AGIVertices[_0x0089('0xd')][_0x0089('0x4b')]=function(_0x392522,_0x332f18){var _0x4eaa71={'role':_0x0089('0x48')};_0x4eaa71[_0x392522]=this[_0x0089('0x8')][_0x0089('0x33')];var _0x64d3a=_0x392522!=_0x0089('0x4c')?util[_0x0089('0x22')](_0x0089('0x4d'),_0x0089('0x4e'),this[_0x0089('0x8')][_0x0089('0x33')]):undefined;this[_0x0089('0x9')]['agentLogin'](_0x4eaa71,_0x64d3a)[_0x0089('0xf')](function(_0x32d036){_0x332f18(null,_[_0x0089('0x3d')](_0x32d036)?![]:!![]);})['catch'](function(_0x5393dd){logger[_0x0089('0x25')](_0x5393dd);_0x332f18(null,![]);});};AGIVertices['prototype'][_0x0089('0x4f')]=function(_0x5874ac,_0x538278){sh['exec'](_['trim'](_0x5874ac),function(_0x4d9e2a,_0x3468c9){var _0x2ea711=_0x3468c9['replace'](/(\r\n|\n|\r)/gm,'');_0x538278(null,_0x2ea711);});};AGIVertices[_0x0089('0xd')][_0x0089('0x50')]=function(_0x5769e7,_0x2896e9){scripts[_0x0089('0x50')](_0x5769e7[_0x0089('0x51')],_0x5769e7[_0x0089('0x52')]||'en',0x1)[_0x0089('0xf')](function(_0x6f0c7c){_0x2896e9(null,_0x6f0c7c);})[_0x0089('0xc')](function(_0x579609){_0x2896e9(_0x579609);});};AGIVertices['prototype'][_0x0089('0x53')]=function(_0x5e1316,_0x448769){scripts[_0x0089('0x53')](this['channel'][_0x0089('0x2f')],_0x5e1316[_0x0089('0x54')],_0x5e1316[_0x0089('0x51')],_0x5e1316[_0x0089('0x55')]||'en')['then'](function(_0x52bebf){_0x448769(null,_0x52bebf);})['catch'](function(_0x97823c){_0x448769(_0x97823c);});};AGIVertices[_0x0089('0xd')][_0x0089('0x56')]=function(_0x292dd3,_0x56fe44){scripts[_0x0089('0x56')](this['channel'],_0x292dd3)[_0x0089('0xf')](function(_0x4d5ff5){_0x56fe44(null,_0x4d5ff5);})['catch'](function(_0x1466eb){_0x56fe44(_0x1466eb);});};AGIVertices[_0x0089('0xd')][_0x0089('0x57')]=function(_0xfbbede,_0x3e60c5){scripts[_0x0089('0x57')](_0xfbbede['key'],_0xfbbede[_0x0089('0x51')],_0xfbbede[_0x0089('0x58')]||_0x0089('0x59'),_0xfbbede['speed'])['then'](function(_0x11a4f1){_0x3e60c5(null,_0x11a4f1);})[_0x0089('0xc')](function(_0x27ffa3){_0x3e60c5(_0x27ffa3);});};AGIVertices[_0x0089('0xd')]['ispeechASR']=function(_0x3ca06d,_0x40beb5,_0x2e3f5a){scripts['ispeechASR'](_0x40beb5,_0x3ca06d[_0x0089('0x54')],_0x3ca06d[_0x0089('0x5a')]||_0x0089('0x59'),this[_0x0089('0x5b')](_0x3ca06d[_0x0089('0x5c')])?_0x3ca06d['model']:undefined)[_0x0089('0xf')](function(_0xdafc84){_0x2e3f5a(null,_0xdafc84);})[_0x0089('0xc')](function(_0x3ac0a6){_0x2e3f5a(_0x3ac0a6);});};AGIVertices[_0x0089('0xd')][_0x0089('0x5d')]=function(_0xefbc0f,_0x3552d0){scripts['awsPolly'](_0xefbc0f[_0x0089('0x5e')],_0xefbc0f[_0x0089('0x5f')],_0xefbc0f[_0x0089('0x60')],_0xefbc0f[_0x0089('0x61')]||_0x0089('0x62'),_0xefbc0f[_0x0089('0x51')],_0xefbc0f[_0x0089('0x63')]||_0x0089('0x51'))[_0x0089('0xf')](function(_0x228a4f){_0x3552d0(null,_0x228a4f);})[_0x0089('0xc')](function(_0x17431a){_0x3552d0(_0x17431a);});};AGIVertices['prototype']['awsLex']=function(_0x3e678f,_0x29e938){scripts[_0x0089('0x64')](this['channel'][_0x0089('0x2f')],_0x3e678f[_0x0089('0x5e')],_0x3e678f[_0x0089('0x5f')],_0x3e678f[_0x0089('0x65')],_0x3e678f[_0x0089('0x51')],_0x3e678f[_0x0089('0x66')])[_0x0089('0xf')](function(_0x8c1a6e){_0x29e938(null,_0x8c1a6e);})[_0x0089('0xc')](function(_0x5b4295){_0x29e938(_0x5b4295);});};AGIVertices[_0x0089('0xd')][_0x0089('0x67')]=function(_0x1cda0f,_0x1b4459,_0x494f50){scripts[_0x0089('0x67')](_0x1b4459,_0x1cda0f[_0x0089('0x54')],_0x1cda0f[_0x0089('0x68')]||_0x0089('0x59'))['then'](function(_0x1756fb){_0x494f50(null,_0x1756fb);})['catch'](function(_0x5ef120){_0x494f50(_0x5ef120);});};AGIVertices[_0x0089('0xd')][_0x0089('0x69')]=function(_0x330a67,_0xd1312,_0x35e062){scripts[_0x0089('0x69')](_0xd1312,_0x330a67['appid'],_0x330a67[_0x0089('0x6a')],_0x330a67['uri'])[_0x0089('0xf')](function(_0x4d0d2d){_0x35e062(null,_0x4d0d2d);})['catch'](function(_0x5ae5c4){_0x35e062(_0x5ae5c4);});};AGIVertices[_0x0089('0xd')][_0x0089('0x6b')]=function(_0x196e44){var _0x84beeb=_[_0x0089('0x6c')](verticesWithRetry,_0x196e44[_0x0089('0x30')])?_0x196e44:_[_0x0089('0x6d')](_0x196e44);for(var _0x10590f in _0x84beeb){if(_0x84beeb[_0x0089('0x6e')](_0x10590f)){if(_0x84beeb[_0x10590f]&&_[_0x0089('0x6f')](_0x84beeb[_0x10590f])){_0x84beeb[_0x10590f]=this[_0x0089('0x70')](_0x84beeb[_0x10590f]);}}}return _0x84beeb;};AGIVertices['prototype'][_0x0089('0x70')]=function(_0x2a09ea){var _0x59eef2=_0x2a09ea[_0x0089('0x71')]('{');for(var _0x306e08=0x1;_0x306e08<_0x59eef2[_0x0089('0x72')];_0x306e08+=0x1){var _0xef12d1=_0x59eef2[_0x306e08][_0x0089('0x71')]('}');if(_0xef12d1[_0x0089('0x72')]>0x1){_0x2a09ea=_0x2a09ea['replaceAll']('{'+_0xef12d1[0x0]+'}',this[_0x0089('0x8')]['getVariable'](_0xef12d1[0x0])[_0x0089('0x73')]||_0xef12d1[0x0]);}}if(_0x59eef2['length']===0x1){return _0x2a09ea[_0x0089('0x43')]();}return this[_0x0089('0x70')](_0x2a09ea);};AGIVertices['prototype'][_0x0089('0x74')]=function(_0x3286f9,_0x4848b8){var _0xd4252d=this[_0x0089('0x8')][_0x0089('0x75')](_0x3286f9);if(_0xd4252d['result']===-0x1){return _0xd4252d;}logger[_0x0089('0x26')](util[_0x0089('0x22')]('The\x20\x22%s\x22\x20variable\x20value\x20is:\x20%s',_0x4848b8,_0xd4252d[_0x0089('0x73')]));return this['channel'][_0x0089('0x76')](_0x4848b8,_0xd4252d['extra']);};AGIVertices[_0x0089('0xd')]['isConfigured']=function(_0x2ba626){return _0x2ba626&&_0x2ba626!=='0'&&_0x2ba626!=='-1'&&_0x2ba626!=='';};AGIVertices[_0x0089('0xd')]['maxRetry']=function(_0x58b7c4){this[_0x0089('0x2e')][_0x0089('0x77')](this,_0x58b7c4,'-');_0x58b7c4['retry']=_0x58b7c4[_0x0089('0x78')];return{'code':0xc8,'result':'-'};};AGIVertices[_0x0089('0xd')][_0x0089('0x79')]=function(_0x5c7433){logger['info'](util[_0x0089('0x22')](_0x0089('0x7a'),_0x5c7433[_0x0089('0x7b')]));return this[_0x0089('0x8')]['agi']([_0x5c7433[_0x0089('0x7c')],_0x5c7433[_0x0089('0x7d')]]);};AGIVertices[_0x0089('0xd')]['answer']=function(_0x38ef1b){logger[_0x0089('0x26')](util['format'](_0x0089('0x7e'),_0x38ef1b['label']));if(this['isConfigured'](_0x38ef1b['timeout'])){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x7f'),_0x38ef1b[_0x0089('0x80')]));var _0x3b7de7=this[_0x0089('0x8')][_0x0089('0x81')](_0x38ef1b[_0x0089('0x80')]);if(_0x3b7de7[_0x0089('0x82')]===-0x1){return _0x3b7de7;}}return this[_0x0089('0x8')][_0x0089('0x83')]();};AGIVertices[_0x0089('0xd')][_0x0089('0x41')]=function(_0x1afd8b){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x84'),_0x1afd8b[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x1afd8b[_0x0089('0x3f')])){return this[_0x0089('0x8')][_0x0089('0x25')](_0x1afd8b,'no\x20list\x20selected');}_0x1afd8b[_0x0089('0x40')]=moment();if(this[_0x0089('0x5b')](_0x1afd8b['delay'])){_0x1afd8b[_0x0089('0x40')]=moment()[_0x0089('0x85')](_0x1afd8b[_0x0089('0x86')],_0x0089('0x87'));}if(!this[_0x0089('0x5b')](_0x1afd8b[_0x0089('0x44')])){_0x1afd8b['callback_priority']=0x2;}this[_0x0089('0x3b')]['sync'](this,_0x1afd8b);return this['channel'][_0x0089('0x88')](util['format']('CALLBACK\x20added\x20phone:\x20%s\x20on\x20list:\x20%s\x20at\x20%s',_0x1afd8b[_0x0089('0x89')],_0x1afd8b['list_id'],_0x1afd8b[_0x0089('0x40')]));};AGIVertices[_0x0089('0xd')][_0x0089('0x8a')]=function(_0x240b76){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x8b'),_0x240b76[_0x0089('0x7b')]));var _0x1eaf01=this[_0x0089('0x8')]['exec'](_0x240b76[_0x0089('0x8c')],_0x240b76['options']);if(_0x1eaf01[_0x0089('0x82')]===-0x1){return _0x1eaf01;}return this[_0x0089('0x8')][_0x0089('0x88')](util['format'](_0x0089('0x8d'),_0x240b76[_0x0089('0x8c')],_0x240b76[_0x0089('0x8e')]));};AGIVertices[_0x0089('0xd')][_0x0089('0x8f')]=function(_0x8ac10a){logger[_0x0089('0x26')](util[_0x0089('0x22')]('Enter\x20in\x20LUMENVOXTTS\x20(%s)\x20block',_0x8ac10a[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x8ac10a[_0x0089('0x51')])){return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0x90'));}var _0xdc0c7='\x22'+_0x8ac10a['text']+'\x22';if(this[_0x0089('0x5b')](_0x8ac10a['options'])){_0xdc0c7+=','+_0x8ac10a[_0x0089('0x8e')];}var _0x293e61=this[_0x0089('0x8')]['exec']('MRCPSynth',_0xdc0c7);if(_0x293e61[_0x0089('0x82')]===-0x1){return _0x293e61;}return this['channel'][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x91'),_0xdc0c7));};AGIVertices[_0x0089('0xd')][_0x0089('0x92')]=function(_0x48cd38){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x93'),_0x48cd38['label']));if(!this[_0x0089('0x5b')](_0x48cd38[_0x0089('0x51')])){return this['channel'][_0x0089('0x88')]('no\x20text\x20configured');}var _0x103078='\x22'+_0x48cd38[_0x0089('0x51')]+'\x22';if(this[_0x0089('0x5b')](_0x48cd38[_0x0089('0x8e')])){_0x103078+=','+_0x48cd38[_0x0089('0x8e')];}var _0x2dbe2e=this[_0x0089('0x8')]['exec'](_0x0089('0x94'),_0x103078);if(_0x2dbe2e['result']===-0x1){return _0x2dbe2e;}return this[_0x0089('0x8')][_0x0089('0x88')](util['format'](_0x0089('0x91'),_0x103078));};AGIVertices[_0x0089('0xd')][_0x0089('0x95')]=function(_0x57b43c){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x96'),_0x57b43c['label']));if(!this[_0x0089('0x5b')](_0x57b43c[_0x0089('0x97')])){return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0x98'));}var _0x488606=_0x57b43c[_0x0089('0x97')];if(this[_0x0089('0x5b')](_0x57b43c['options'])){_0x488606+=','+_0x57b43c[_0x0089('0x8e')];}var _0x2d5911=this['channel'][_0x0089('0x99')](_0x0089('0x9a'),_0x488606);if(_0x2d5911['result']===-0x1){return _0x2d5911;}var _0x73eace=this[_0x0089('0x74')](_0x0089('0x9b'),'LUMENVOX_ASR_CONFIDENCE');if(_0x73eace[_0x0089('0x82')]===-0x1){return _0x73eace;}var _0x385f55=this[_0x0089('0x74')](_0x0089('0x9c'),_0x0089('0x9d'));if(_0x385f55[_0x0089('0x82')]===-0x1){return _0x385f55;}var _0x2c1b97=this[_0x0089('0x74')](_0x0089('0x9e'),_0x0089('0x9f'));if(_0x2c1b97['result']===-0x1){return _0x2c1b97;}return this[_0x0089('0x8')]['noop'](util[_0x0089('0x22')](_0x0089('0xa0'),_0x488606));};AGIVertices[_0x0089('0xd')]['sestekasr']=function(_0x20dbdc){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0xa1'),_0x20dbdc[_0x0089('0x7b')]));if(!this['isConfigured'](_0x20dbdc['grammar'])){return this['channel'][_0x0089('0x88')](_0x0089('0x98'));}var _0x5610e2=_0x20dbdc[_0x0089('0x97')];if(this[_0x0089('0x5b')](_0x20dbdc[_0x0089('0x8e')])){_0x5610e2+=','+_0x20dbdc[_0x0089('0x8e')];}var _0x5bce13=this['channel']['exec'](_0x0089('0x9a'),_0x5610e2);if(_0x5bce13[_0x0089('0x82')]===-0x1){return _0x5bce13;}var _0x549867=this[_0x0089('0x74')]('RECOG_CONFIDENCE()',_0x0089('0xa2'));if(_0x549867[_0x0089('0x82')]===-0x1){return _0x549867;}var _0x41b044=this['getAndSetVariable'](_0x0089('0x9c'),_0x0089('0xa3'));if(_0x41b044[_0x0089('0x82')]===-0x1){return _0x41b044;}var _0x55a520=this[_0x0089('0x74')]('RECOG_INSTANCE()',_0x0089('0xa4'));if(_0x55a520[_0x0089('0x82')]===-0x1){return _0x55a520;}return this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')]('Executed\x20command\x20MRCPRecog\x20%s',_0x5610e2));};AGIVertices[_0x0089('0xd')][_0x0089('0xa5')]=function(_0x4e09e8){logger[_0x0089('0x26')](util['format'](_0x0089('0xa6'),_0x4e09e8['label']));if(!this[_0x0089('0x5b')](_0x4e09e8[_0x0089('0xa7')])){return this[_0x0089('0x8')]['error'](_0x4e09e8,_0x0089('0xa8'));}var _0xe4de9d=this['getSquareOdbc'][_0x0089('0x77')](this,_0x4e09e8[_0x0089('0xa7')]);if(!_0xe4de9d){return this[_0x0089('0x8')][_0x0089('0x25')](_0x4e09e8,_0x0089('0xa9'));}if(!this[_0x0089('0x5b')](_0x4e09e8['query'])){return this['channel'][_0x0089('0x25')](_0x4e09e8,_0x0089('0xaa'));}var _0x3c52ae=_0x4e09e8[_0x0089('0x27')][_0x0089('0xab')](/(\r\n|\n|\r)/gm,'\x20');this[_0x0089('0x8')]['noop'](util['format'](_0x0089('0xac'),_0x3c52ae));var _0x4e8d36=this[_0x0089('0xad')][_0x0089('0x77')](this,_0xe4de9d,_0x3c52ae);this[_0x0089('0x2e')][_0x0089('0x77')](this,_0x4e09e8,_0x3c52ae);if(!this[_0x0089('0x5b')](_0x4e09e8[_0x0089('0xae')])){return this[_0x0089('0x8')]['noop']('no\x20variable\x20selected\x20for\x20the\x20result');}var _0x2b2b58=this['getVariable'][_0x0089('0x77')](this,_0x4e09e8[_0x0089('0xae')]);if(!_0x2b2b58){return this[_0x0089('0x8')][_0x0089('0x25')](_0x4e09e8,_0x0089('0xaf'));}var _0x2c356a=this;_0x4e8d36['forEach'](function(_0x4214fb,_0x568153){Object[_0x0089('0xb0')](_0x4214fb)['forEach'](function(_0x4aef50){_0x2c356a['channel'][_0x0089('0x76')](util[_0x0089('0x22')]('%s[%s][%s]',_0x2b2b58,_0x568153,_0x4aef50),_0x4214fb[_0x4aef50]);});});this[_0x0089('0x8')][_0x0089('0x76')](util[_0x0089('0x22')](_0x0089('0xb1'),_0x2b2b58),_0x4e8d36[_0x0089('0x72')]);return this[_0x0089('0x8')]['noop'](util['format']('variable\x20%s\x20set',_0x2b2b58));};AGIVertices['prototype'][_0x0089('0xb2')]=function(_0x1fc374){logger[_0x0089('0xb3')](util[_0x0089('0x22')](_0x0089('0xb4'),_0x1fc374['label']));if(!this['isConfigured'](_0x1fc374[_0x0089('0xb5')])){return this[_0x0089('0x8')][_0x0089('0x25')](_0x1fc374,_0x0089('0xb6'));}var _0x5df291=this[_0x0089('0xb7')][_0x0089('0x77')](this,_0x1fc374[_0x0089('0xb5')]);if(!_0x5df291){return this[_0x0089('0x8')][_0x0089('0x25')](_0x1fc374,_0x0089('0xb8'));}var _0x385d8d=this[_0x0089('0x8')][_0x0089('0x99')](_0x0089('0xb9'),[util['format'](_0x0089('0xba'),_0x5df291),_0x1fc374[_0x0089('0x80')],_0x1fc374[_0x0089('0xbb')],_0x1fc374[_0x0089('0xbc')]]);if(_0x385d8d[_0x0089('0x82')]===-0x1){return _0x385d8d;}return this['channel'][_0x0089('0x88')](util['format']('Executed\x20command\x20%s',_0x0089('0xb9')));};AGIVertices[_0x0089('0xd')][_0x0089('0xbd')]=function(_0x4a4e5d){logger['info'](util[_0x0089('0x22')](_0x0089('0xbe'),_0x4a4e5d[_0x0089('0x7b')]));if(!this['isConfigured'](_0x4a4e5d[_0x0089('0x54')])){return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0xbf'));}if(!this[_0x0089('0x5b')](_0x4a4e5d[_0x0089('0x51')])){return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0x90'));}this[_0x0089('0x8')]['bot']=!![];this[_0x0089('0x2e')](_0x4a4e5d);this[_0x0089('0x3a')](_0x4a4e5d[_0x0089('0x51')],'in');this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')]('Trying\x20Dialogflow:\x20%s',_0x4a4e5d['text']));var _0x1da4cd=this[_0x0089('0x53')]['sync'](this,_0x4a4e5d);if(_0x1da4cd){for(var _0x10e183 in _0x1da4cd){if(_0x1da4cd['hasOwnProperty'](_0x10e183)){this[_0x0089('0x8')]['setVariable'](util[_0x0089('0x22')](_0x0089('0xc0'),_0x10e183[_0x0089('0xc1')]()),_0x1da4cd[_0x10e183]);}}this[_0x0089('0x3a')](_0x1da4cd[_0x0089('0xc2')],'out');return this[_0x0089('0x8')][_0x0089('0x88')](util['format']('Dialogflow\x20Result\x20%s',_0x1da4cd[_0x0089('0xc2')]));}return this['channel']['error'](_0x4a4e5d,'Dialogflow\x20is\x20unreachable');};AGIVertices[_0x0089('0xd')]['sesteknda']=function(_0x536e5b){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0xc3'),_0x536e5b[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x536e5b[_0x0089('0xc4')])){return this[_0x0089('0x8')][_0x0089('0x88')]('no\x20ndauth\x20url\x20configured');}if(!this[_0x0089('0x5b')](_0x536e5b[_0x0089('0xc5')])){return this['channel'][_0x0089('0x88')](_0x0089('0xc6'));}if(!this[_0x0089('0x5b')](_0x536e5b[_0x0089('0xc7')])){return this['channel']['noop'](_0x0089('0xc8'));}if(!this[_0x0089('0x5b')](_0x536e5b[_0x0089('0xc9')])){return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0x90'));}this[_0x0089('0x8')][_0x0089('0xca')]=!![];this[_0x0089('0x2e')](_0x536e5b);this['createSquareMessage'](_0x536e5b[_0x0089('0x51')],'in');this['channel'][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0xcb'),_0x536e5b[_0x0089('0x51')]));var _0x5ab5a1=this[_0x0089('0x56')]['sync'](this,_0x536e5b);if(_0x5ab5a1){for(var _0xda6197 in _0x5ab5a1){if(_0x5ab5a1[_0x0089('0x6e')](_0xda6197)){this[_0x0089('0x8')]['setVariable'](util[_0x0089('0x22')](_0x0089('0xcc'),_0xda6197[_0x0089('0xc1')]()),_0x5ab5a1[_0xda6197]);}}this[_0x0089('0x3a')](_0x5ab5a1['speech'],_0x0089('0xcd'));if(_0x5ab5a1['audiofile']){this[_0x0089('0x8')]['noop'](util[_0x0089('0x22')](_0x0089('0xce'),_0x5ab5a1[_0x0089('0xcf')]));var _0x255aa8=this[_0x0089('0x8')][_0x0089('0xd0')](_0x5ab5a1[_0x0089('0xcf')]);try{fs['unlink'](_0x5ab5a1['audiofile']+'.wav');}catch(_0x20a3fd){logger[_0x0089('0x25')](_0x20a3fd);}return _0x255aa8;}else{return this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0xd1'),_0x5ab5a1['speech']));}}return this[_0x0089('0x8')][_0x0089('0x25')](_0x536e5b,'SestekNDA\x20is\x20unreachable');};AGIVertices[_0x0089('0xd')][_0x0089('0xd2')]=function(_0x484551){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0xd3'),_0x484551['label']));return this[_0x0089('0x8')][_0x0089('0x88')]('end');};AGIVertices[_0x0089('0xd')][_0x0089('0xd4')]=function(_0x1ff2d4){logger['info'](util[_0x0089('0x22')](_0x0089('0xd5'),_0x1ff2d4[_0x0089('0x7b')]));var _0x469122='';if(_0x1ff2d4['trunk_id']){if(!this['isConfigured'](_0x1ff2d4[_0x0089('0xd6')])){return this[_0x0089('0x8')][_0x0089('0x25')](_0x1ff2d4,_0x0089('0xd7'));}else{var _0x150ed1=parseInt(_0x1ff2d4[_0x0089('0xd6')],0xa);if(isNaN(_0x150ed1)){_0x469122=_0x1ff2d4[_0x0089('0xd6')];}else{_0x469122=this[_0x0089('0x16')]['sync'](this,_0x1ff2d4['trunk_id']);if(!_0x469122){return this['channel']['error'](_0x1ff2d4,_0x0089('0xd8'));}}}}else if(_0x1ff2d4[_0x0089('0xd9')]){_0x469122=_0x1ff2d4[_0x0089('0xd9')];}else{return this['channel'][_0x0089('0x25')](_0x1ff2d4,'no\x20trunk\x20selected');}var _0x47fc72=this['channel']['exec'](_0x0089('0xb9'),[util[_0x0089('0x22')](_0x0089('0xda'),_0x469122,_0x1ff2d4[_0x0089('0x89')]),_0x1ff2d4['timeout'],_0x1ff2d4[_0x0089('0xbb')],_0x1ff2d4['url']]);if(_0x47fc72[_0x0089('0x82')]===-0x1){return _0x47fc72;}return this['channel'][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0xdb'),'DIAL'));};AGIVertices[_0x0089('0xd')][_0x0089('0xdc')]=function(_0xdfa063){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0xdd'),_0xdfa063[_0x0089('0x7b')]));return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0xdc'));};AGIVertices[_0x0089('0xd')][_0x0089('0x6')]=function(_0x494839){logger[_0x0089('0x26')](util[_0x0089('0x22')]('Enter\x20in\x20GETDIGITS\x20(%s)\x20block',_0x494839[_0x0089('0x7b')]));if(_0x494839['retry']===0x0){return this[_0x0089('0x78')](_0x494839);}_0x494839[_0x0089('0xde')]-=0x1;if(!this[_0x0089('0x5b')](_0x494839[_0x0089('0xdf')])){return this[_0x0089('0x8')]['error'](_0x494839,_0x0089('0xe0'));}var _0x3c707c=this['getSound'][_0x0089('0x77')](this,_0x494839[_0x0089('0xdf')]);if(!_0x3c707c){return this['channel'][_0x0089('0x25')](_0x494839,'no\x20file\x20audio\x20found');}if(!this['isConfigured'](_0x494839[_0x0089('0xae')])){return this[_0x0089('0x8')][_0x0089('0x25')](_0x0089('0xe1'));}var _0x235cad=this[_0x0089('0x8')][_0x0089('0xe2')](_0x3c707c,_0x494839[_0x0089('0xe3')],_0x494839[_0x0089('0xe4')]);var _0xe4569=_0x235cad[_0x0089('0x82')]?_0x235cad[_0x0089('0x82')][_0x0089('0x43')]():'';logger[_0x0089('0x26')]('test',JSON[_0x0089('0xe5')](_0x235cad));if(_0x235cad[_0x0089('0x82')]===-0x1){this[_0x0089('0x2e')][_0x0089('0x77')](this,_0x494839,_0xe4569);return _0x235cad;}else if(_0x235cad[_0x0089('0x73')]===_0x0089('0x80')){_0x235cad[_0x0089('0x82')]=_0xe4569['length']>=parseInt(_0x494839[_0x0089('0xe6')])?'x':'i';}else{_0x235cad[_0x0089('0x82')]=_0xe4569[_0x0089('0x72')]>=parseInt(_0x494839[_0x0089('0xe6')])&&_0xe4569[_0x0089('0x72')]<=parseInt(_0x494839[_0x0089('0xe4')])?'x':'i';}var _0x1b51ea=this[_0x0089('0x75')]['sync'](this,_0x494839['variable_id']);if(!_0x1b51ea){return this[_0x0089('0x8')][_0x0089('0x25')](_0x494839,_0x0089('0xaf'));}this[_0x0089('0x8')][_0x0089('0x76')](_0x1b51ea,_0xe4569);if(this[_0x0089('0x5b')](_0x494839[_0x0089('0xe7')])){var _0x5bb20b=parseInt(_0x494839[_0x0089('0xe7')],0xa);var _0x398eff=rs[_0x0089('0xe8')]({'charset':'*','length':_0x5bb20b});var _0xc8324a=_0xe4569[_0x0089('0x72')];if(_0xc8324a>0x0){if(_0xc8324a>_0x5bb20b){this[_0x0089('0x2e')][_0x0089('0x77')](this,_0x494839,_0x494839[_0x0089('0xe9')]==='first'?_0x398eff+_0xe4569[_0x0089('0xea')](_0x5bb20b):_0xe4569[_0x0089('0xea')](0x0,_0xc8324a-_0x5bb20b)+_0x398eff);}else{this[_0x0089('0x2e')][_0x0089('0x77')](this,_0x494839,rs['generate']({'charset':'*','length':_0xc8324a}));}}else{this[_0x0089('0x2e')][_0x0089('0x77')](this,_0x494839,'');}}else{this[_0x0089('0x2e')][_0x0089('0x77')](this,_0x494839,_0xe4569);}return _0x235cad;};AGIVertices[_0x0089('0xd')][_0x0089('0x7')]=function(_0x3cd642){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0xeb'),_0x3cd642[_0x0089('0x7b')]));return this[_0x0089('0x6')](_0x3cd642);};AGIVertices[_0x0089('0xd')][_0x0089('0xec')]=function(_0x20ee97){logger['info'](util[_0x0089('0x22')](_0x0089('0xed'),_0x20ee97[_0x0089('0x7b')]));this[_0x0089('0x2e')]['sync'](this,_0x20ee97,_0x20ee97[_0x0089('0xee')]);return this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0xef'),_0x20ee97[_0x0089('0xee')]));};AGIVertices[_0x0089('0xd')][_0x0089('0xf0')]=function(_0x1160eb){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0xf1'),_0x1160eb[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x1160eb['aws_access_key_id'])||!this[_0x0089('0x5b')](_0x1160eb['aws_secret_access_key'])){return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0xf2'));}if(!this[_0x0089('0x5b')](_0x1160eb[_0x0089('0x51')])){return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0x90'));}this['channel'][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0xf3'),_0x1160eb[_0x0089('0x51')]));var _0x20f8f8=this[_0x0089('0x5d')][_0x0089('0x77')](this,_0x1160eb);if(_0x20f8f8){this[_0x0089('0x8')]['noop'](util['format'](_0x0089('0xf4'),_0x20f8f8));var _0x5022f4=this[_0x0089('0x8')][_0x0089('0xd0')](_0x20f8f8);try{fs[_0x0089('0xf5')](_0x20f8f8+'.wav');}catch(_0x2de284){logger[_0x0089('0x25')](_0x2de284);}return _0x5022f4;}return this[_0x0089('0x8')][_0x0089('0x25')](_0x1160eb,_0x0089('0xf6'));};AGIVertices['prototype'][_0x0089('0xf7')]=function(_0x59efc1){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0xf8'),_0x59efc1['label']));if(!this['isConfigured'](_0x59efc1[_0x0089('0x5e')])||!this[_0x0089('0x5b')](_0x59efc1['aws_secret_access_key'])){return this['channel'][_0x0089('0x88')](_0x0089('0xf2'));}if(!this[_0x0089('0x5b')](_0x59efc1[_0x0089('0x66')])){return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0xf9'));}if(!this[_0x0089('0x5b')](_0x59efc1[_0x0089('0x51')])){return this[_0x0089('0x8')]['noop'](_0x0089('0x90'));}this[_0x0089('0x8')][_0x0089('0xca')]=!![];this[_0x0089('0x2e')](_0x59efc1);this[_0x0089('0x3a')](_0x59efc1[_0x0089('0x51')],'in');this['channel'][_0x0089('0x88')](util[_0x0089('0x22')]('Trying\x20Amazon\x20Lex:\x20%s',_0x59efc1[_0x0089('0x51')]));var _0x55b5e9=this[_0x0089('0x64')][_0x0089('0x77')](this,_0x59efc1);if(_0x55b5e9){for(var _0x59a743 in _0x55b5e9){if(_0x55b5e9['hasOwnProperty'](_0x59a743)&&_[_0x0089('0x6f')](_0x55b5e9[_0x59a743])){this[_0x0089('0x8')]['setVariable'](util[_0x0089('0x22')](_0x0089('0xfa'),_0x59a743[_0x0089('0xc1')]()),_0x55b5e9[_0x59a743]);}}if(_[_0x0089('0x3d')](_0x55b5e9[_0x0089('0xfb')])){return this[_0x0089('0x8')][_0x0089('0x88')]('Amazon\x20Lex\x20ready\x20for\x20fulfillment');}else{this[_0x0089('0x3a')](_0x55b5e9[_0x0089('0xfb')],_0x0089('0xcd'));return this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0xfc'),_0x55b5e9[_0x0089('0xfb')]));}}return this[_0x0089('0x8')]['error'](_0x59efc1,_0x0089('0xfd'));};AGIVertices[_0x0089('0xd')][_0x0089('0xfe')]=function(_0x43a60d){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0xff'),_0x43a60d[_0x0089('0x7b')],_0x43a60d[_0x0089('0x80')]));if(!this[_0x0089('0x5b')](_0x43a60d[_0x0089('0x54')])){return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0xbf'));}var _0xdc0429=_0x0089('0x100');var _0x1559bb=util[_0x0089('0x22')](_0x0089('0x101'),FILES_PATH,rs[_0x0089('0xe8')](0x4));var _0x36b53a=util[_0x0089('0x22')](_0x0089('0x102'),_0x1559bb,_0xdc0429);var _0x17e09d=!![];if(_0x43a60d['beep']==='NOBEEP'){_0x17e09d=![];}var _0x38c423=this[_0x0089('0x8')]['recordFile'](_0x1559bb,_0xdc0429,_0x43a60d[_0x0089('0x103')],_0x43a60d[_0x0089('0x80')],undefined,_0x17e09d);if(_0x38c423[_0x0089('0x82')]!==-0x1){this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x104'),_0x36b53a));var _0x10fb7b=this[_0x0089('0x67')]['sync'](this,_0x43a60d,_0x36b53a);if(_0x10fb7b){for(var _0x4da2b0 in _0x10fb7b){if(_0x10fb7b[_0x0089('0x6e')](_0x4da2b0)){this['channel'][_0x0089('0x76')](util[_0x0089('0x22')](_0x0089('0x105'),_0x4da2b0[_0x0089('0xc1')]()),_0x10fb7b[_0x4da2b0]);}}return this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x106'),JSON['stringify'](_0x10fb7b)));}}return _0x38c423;};AGIVertices[_0x0089('0xd')][_0x0089('0x107')]=function(_0x576a4e){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x108'),_0x576a4e[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x576a4e[_0x0089('0x109')])){return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0x10a'));}if(!this[_0x0089('0x5b')](_0x576a4e[_0x0089('0x6a')])){return this['channel'][_0x0089('0x88')](_0x0089('0x10b'));}var _0x10e0be=_0x0089('0x100');var _0x4a7098=util[_0x0089('0x22')](_0x0089('0x101'),FILES_PATH,rs[_0x0089('0xe8')](0x4));var _0x3aa1bd=util[_0x0089('0x22')](_0x0089('0x102'),_0x4a7098,_0x10e0be);var _0x5ccded=!![];if(_0x576a4e[_0x0089('0x10c')]===_0x0089('0x10d')){_0x5ccded=![];}var _0x11608a=this[_0x0089('0x8')]['recordFile'](_0x4a7098,_0x10e0be,_0x576a4e[_0x0089('0x103')],_0x576a4e[_0x0089('0x80')],undefined,_0x5ccded);if(_0x11608a['result']!==-0x1){this[_0x0089('0x8')]['noop'](util[_0x0089('0x22')](_0x0089('0x10e'),_0x3aa1bd));var _0x17918e=this['tildeASR']['sync'](this,_0x576a4e,_0x3aa1bd);if(_0x17918e){for(var _0x4dde28 in _0x17918e){if(_0x17918e[_0x0089('0x6e')](_0x4dde28)){this[_0x0089('0x8')][_0x0089('0x76')](util[_0x0089('0x22')](_0x0089('0x10f'),_0x4dde28['toUpperCase']()),_0x17918e[_0x4dde28]);}}return this['channel'][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x110'),JSON['stringify'](_0x17918e)));}}return _0x11608a;};AGIVertices[_0x0089('0xd')][_0x0089('0x111')]=function(_0x39cd52){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x112'),_0x39cd52[_0x0089('0x7b')]));return this[_0x0089('0x8')][_0x0089('0x113')](_0x39cd52[_0x0089('0x35')],_0x39cd52[_0x0089('0x36')],_0x39cd52[_0x0089('0x37')]);};AGIVertices['prototype']['gotoif']=function(_0xd6471e){logger[_0x0089('0x26')](util['format'](_0x0089('0x114'),_0xd6471e[_0x0089('0x7b')]));if(!this['isConfigured'](_0xd6471e[_0x0089('0x115')])){return this[_0x0089('0x8')][_0x0089('0x25')](_0xd6471e,_0x0089('0x116'));}try{var _0xd46322=eval(_0xd6471e[_0x0089('0x115')])?_0x0089('0x117'):_0x0089('0x118');this[_0x0089('0x8')][_0x0089('0x88')](util['format']('EVAL\x20CONDITION\x20%s\x20%s',_0xd6471e['condition'],_0xd46322));return{'code':0xc8,'result':_0xd46322};}catch(_0x5f543a){return{'code':0xc8,'result':'false'};}};AGIVertices[_0x0089('0xd')][_0x0089('0x119')]=function(_0x4a95f4){logger[_0x0089('0x26')](util[_0x0089('0x22')]('Enter\x20in\x20GOTOIFTIME\x20(%s)\x20block',_0x4a95f4['label']));if(!this[_0x0089('0x5b')](_0x4a95f4['interval_id'])){return this['channel'][_0x0089('0x25')](_0x4a95f4,_0x0089('0x11a'));}var _0x115636=this[_0x0089('0x1c')][_0x0089('0x77')](this,_0x4a95f4[_0x0089('0x11b')]);if(!_0x115636){return this[_0x0089('0x8')][_0x0089('0x25')](_0x4a95f4,_0x0089('0x11c'));}for(var _0x477608=0x0;_0x477608<_0x115636[_0x0089('0x72')];_0x477608+=0x1){var _0xa847c5=this[_0x0089('0x8')][_0x0089('0x75')](util[_0x0089('0x22')](_0x0089('0x11d'),_0x115636[_0x477608]));if(_0xa847c5[_0x0089('0x82')]===-0x1){return _0xa847c5;}logger[_0x0089('0x26')](util['format']('IFTIME\x20%s\x20%s',_0x115636[_0x477608],_0xa847c5[_0x0089('0x73')]));if(_0xa847c5[_0x0089('0x73')]===_0x0089('0x117')){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x11e'),_0x115636[_0x477608],_0x0089('0x117')));this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x11e'),_0x115636[_0x477608],'true'));return{'code':0xc8,'result':_0x0089('0x117')};}else{logger[_0x0089('0x26')](util[_0x0089('0x22')]('IFTIME\x20%s\x20%s',_0x115636[_0x477608],_0x0089('0x118')));this[_0x0089('0x8')]['noop'](util[_0x0089('0x22')](_0x0089('0x11e'),_0x115636[_0x477608],'false'));}}return{'code':0xc8,'result':'false'};};AGIVertices[_0x0089('0xd')][_0x0089('0x11f')]=function(_0x4ace66){logger[_0x0089('0x26')](util[_0x0089('0x22')]('Enter\x20in\x20HANGUP\x20(%s)\x20block',_0x4ace66['label']));return this[_0x0089('0x8')][_0x0089('0x11f')]();};AGIVertices[_0x0089('0xd')]['ispeechasr']=function(_0x4600ca){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x120'),_0x4600ca['label']));if(!this[_0x0089('0x5b')](_0x4600ca[_0x0089('0x54')])){return this[_0x0089('0x8')]['noop'](_0x0089('0xbf'));}var _0xc8cfbc='wav';var _0x408b0b=util[_0x0089('0x22')](_0x0089('0x101'),FILES_PATH,rs[_0x0089('0xe8')](0x4));var _0x12d565=util['format']('%s.%s',_0x408b0b,_0xc8cfbc);var _0xa3f58e=!![];if(_0x4600ca[_0x0089('0x10c')]===_0x0089('0x10d')){_0xa3f58e=![];}var _0x414689=this[_0x0089('0x8')][_0x0089('0x121')](_0x408b0b,_0xc8cfbc,_0x4600ca[_0x0089('0x103')],_0x4600ca[_0x0089('0x80')],undefined,_0xa3f58e);if(_0x414689[_0x0089('0x82')]!==-0x1){this['channel'][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x122'),_0x12d565));var _0x1aa185=this[_0x0089('0x123')][_0x0089('0x77')](this,_0x4600ca,_0x12d565);if(_0x1aa185){for(var _0x193794 in _0x1aa185){if(_0x1aa185[_0x0089('0x6e')](_0x193794)){this[_0x0089('0x8')][_0x0089('0x76')](util['format'](_0x0089('0x124'),_0x193794[_0x0089('0xc1')]()),_0x1aa185[_0x193794]);}}return this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')]('IspeechASR\x20Result\x20%s',JSON[_0x0089('0xe5')](_0x1aa185)));}}return _0x414689;};AGIVertices[_0x0089('0xd')][_0x0089('0x125')]=function(_0x18a6a3){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x126'),_0x18a6a3[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x18a6a3[_0x0089('0x54')])){return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0xbf'));}if(!this['isConfigured'](_0x18a6a3[_0x0089('0x51')])){return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0x90'));}this['channel']['noop'](util['format'](_0x0089('0x127'),_0x18a6a3[_0x0089('0x51')]));var _0x48af43=this['ispeechTTS']['sync'](this,_0x18a6a3);if(_0x48af43){this['channel'][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x122'),_0x48af43));var _0x1745da=this[_0x0089('0x8')][_0x0089('0xd0')](_0x48af43,_0x18a6a3['intKey']);try{fs[_0x0089('0xf5')](_0x48af43+_0x0089('0x128'));}catch(_0x1cbf1e){logger[_0x0089('0x25')](_0x1cbf1e);}return _0x1745da;}return this['channel'][_0x0089('0x25')](_0x18a6a3,_0x0089('0x129'));};AGIVertices['prototype'][_0x0089('0x12a')]=function(_0x2d98c2){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x12b'),_0x2d98c2['label']));if(!this[_0x0089('0x5b')](_0x2d98c2['findBy'])){return this[_0x0089('0x8')]['error'](_0x2d98c2,'no\x20find\x20by\x20configured');}logger['info'](util['format']('FIND\x20AGENT\x20%s\x20BY\x20%s',this['channel'][_0x0089('0x33')],_0x2d98c2[_0x0089('0x12c')]));var _0x4a66d5=this['agentLogin'][_0x0089('0x77')](this,_0x2d98c2[_0x0089('0x12c')]);if(_0x4a66d5){logger[_0x0089('0x26')](util[_0x0089('0x22')]('AGENT\x20%s\x20FOUND\x20BY',this['channel'][_0x0089('0x33')],_0x2d98c2['findBy']));this['channel'][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x12d'),this[_0x0089('0x8')][_0x0089('0x33')],_0x2d98c2['findBy']));return{'code':0xc8,'result':'success'};}else{logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x12e'),this[_0x0089('0x8')][_0x0089('0x33')],_0x2d98c2[_0x0089('0x12c')]));this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x12e'),this['channel'][_0x0089('0x33')],_0x2d98c2['findBy']));return{'code':0xc8,'result':'failure'};}};AGIVertices[_0x0089('0xd')][_0x0089('0x12f')]=function(_0x437c9c){logger[_0x0089('0x26')](util['format'](_0x0089('0x130'),_0x437c9c[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x437c9c['findBy'])){return this[_0x0089('0x8')][_0x0089('0x25')](_0x437c9c,_0x0089('0x131'));}logger['info'](util[_0x0089('0x22')]('FIND\x20AGENT\x20%s\x20BY\x20%s',this[_0x0089('0x8')]['callerid'],_0x437c9c['findBy']));var _0x4b5ba8=this['agentLogout']['sync'](this,_0x437c9c[_0x0089('0x12c')]);if(_0x4b5ba8){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x12d'),this[_0x0089('0x8')][_0x0089('0x33')],_0x437c9c['findBy']));this['channel'][_0x0089('0x88')](util[_0x0089('0x22')]('AGENT\x20%s\x20FOUND\x20BY',this['channel'][_0x0089('0x33')],_0x437c9c['findBy']));return{'code':0xc8,'result':'success'};}else{logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x12e'),this[_0x0089('0x8')][_0x0089('0x33')],_0x437c9c[_0x0089('0x12c')]));this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x12e'),this['channel']['callerid'],_0x437c9c['findBy']));return{'code':0xc8,'result':_0x0089('0x132')};}};AGIVertices['prototype'][_0x0089('0x133')]=function(_0x140279){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x134'),_0x140279[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x140279[_0x0089('0x135')])){return this[_0x0089('0x8')]['error'](_0x140279,_0x0089('0x136'));}this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')]('math\x20%s',_0x140279[_0x0089('0x135')]));var _0x2dbfc9=eval(_0x140279[_0x0089('0x135')]);if(!this[_0x0089('0x5b')](_0x140279[_0x0089('0xae')])){return this[_0x0089('0x8')]['noop']('no\x20variable\x20selected\x20for\x20the\x20result');}var _0x25aa23=this['getVariable']['sync'](this,_0x140279[_0x0089('0xae')]);if(!_0x25aa23){return this['channel']['error'](_0x140279,_0x0089('0xaf'));}if(_[_0x0089('0x137')](_0x2dbfc9)){var _0x4565d8=this;_0x2dbfc9[_0x0089('0x138')](function(_0x310da6,_0x34a669){_0x4565d8[_0x0089('0x8')]['setVariable'](util['format'](_0x0089('0x139'),_0x25aa23,_0x34a669),_0x310da6);});return this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')]('variable\x20%s[key]\x20set',_0x25aa23));}else{return this[_0x0089('0x8')][_0x0089('0x76')](_0x25aa23,_0x2dbfc9);}};AGIVertices[_0x0089('0xd')][_0x0089('0x5')]=function(_0x11a04d){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x13a'),_0x11a04d[_0x0089('0x7b')]));if(_0x11a04d[_0x0089('0xde')]===0x0){return this[_0x0089('0x78')](_0x11a04d);}_0x11a04d[_0x0089('0xde')]-=0x1;if(!this['isConfigured'](_0x11a04d['file_id'])){return this[_0x0089('0x8')]['error'](_0x11a04d,'no\x20file\x20audio\x20selected');}var _0x2c6dd9=this[_0x0089('0x13b')][_0x0089('0x77')](this,_0x11a04d['file_id']);if(!_0x2c6dd9){return this[_0x0089('0x8')][_0x0089('0x25')](_0x11a04d,_0x0089('0x13c'));}var _0x173aa7=this[_0x0089('0x8')]['getData'](_0x2c6dd9,_0x11a04d[_0x0089('0xe3')],_0x11a04d['digit']);var _0x36046e=_0x173aa7['result'];if(_0x173aa7[_0x0089('0x82')]===-0x1){this[_0x0089('0x2e')][_0x0089('0x77')](this,_0x11a04d,'-1');return _0x173aa7;}else if(_0x173aa7[_0x0089('0x73')]===_0x0089('0x80')){_0x173aa7[_0x0089('0x82')]=_0x173aa7[_0x0089('0x82')][_0x0089('0x72')]>0x0?_0x173aa7[_0x0089('0x82')]:'t';}else if(_[_0x0089('0x3c')](_0x173aa7[_0x0089('0x82')])){_0x173aa7[_0x0089('0x82')]='#';_0x36046e='#';}if(!this[_0x0089('0x5b')](_0x11a04d[_0x0089('0xae')])){this[_0x0089('0x8')][_0x0089('0x88')]('no\x20variable\x20selected\x20for\x20the\x20result');}else{var _0x2eb622=this[_0x0089('0x75')]['sync'](this,_0x11a04d[_0x0089('0xae')]);if(!_0x2eb622){return this[_0x0089('0x8')][_0x0089('0x25')](_0x11a04d,_0x0089('0xaf'));}this[_0x0089('0x8')][_0x0089('0x76')](_0x2eb622,_0x36046e);}this['createSquareDetailsReport']['sync'](this,_0x11a04d,_0x36046e);return _0x173aa7;};AGIVertices[_0x0089('0xd')][_0x0089('0x88')]=function(_0x106d26){logger[_0x0089('0x26')](util[_0x0089('0x22')]('Enter\x20in\x20NOOP\x20(%s)\x20block',_0x106d26[_0x0089('0x7b')]));return this[_0x0089('0x8')]['noop'](_0x106d26[_0x0089('0x13d')]||_0x106d26['label']);};AGIVertices[_0x0089('0xd')]['pause']=function(_0x339568){logger['info'](util[_0x0089('0x22')]('Enter\x20in\x20PAUSE\x20(%s)\x20block',_0x339568[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x339568['findBy'])){return this[_0x0089('0x8')]['error'](_0x339568,'no\x20find\x20by\x20configured');}logger['info'](util[_0x0089('0x22')](_0x0089('0x13e'),this[_0x0089('0x8')]['callerid'],_0x339568[_0x0089('0x12c')]));var _0x5c14ba=this[_0x0089('0x45')][_0x0089('0x77')](this,_0x339568[_0x0089('0x13f')]);var _0x49af57=this[_0x0089('0x47')][_0x0089('0x77')](this,_0x339568[_0x0089('0x12c')],_0x5c14ba);if(_0x49af57){logger['info'](util['format']('AGENT\x20%s\x20FOUND\x20BY',this[_0x0089('0x8')]['callerid'],_0x339568[_0x0089('0x12c')]));this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')]('AGENT\x20%s\x20FOUND\x20BY',this[_0x0089('0x8')][_0x0089('0x33')],_0x339568[_0x0089('0x12c')]));return{'code':0xc8,'result':_0x0089('0x140')};}else{logger[_0x0089('0x26')](util['format'](_0x0089('0x12e'),this[_0x0089('0x8')]['callerid'],_0x339568[_0x0089('0x12c')]));this[_0x0089('0x8')]['noop'](util['format']('AGENT\x20%s\x20FOUND\x20BY',this[_0x0089('0x8')][_0x0089('0x33')],_0x339568['findBy']));return{'code':0xc8,'result':_0x0089('0x132')};}};AGIVertices[_0x0089('0xd')][_0x0089('0x141')]=function(_0xe72644){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x142'),_0xe72644[_0x0089('0x7b')]));if(!this['isConfigured'](_0xe72644[_0x0089('0xdf')])){return this[_0x0089('0x8')][_0x0089('0x25')](_0xe72644,_0x0089('0xe0'));}var _0x272278=this[_0x0089('0x13b')][_0x0089('0x77')](this,_0xe72644[_0x0089('0xdf')]);if(!_0x272278){return this[_0x0089('0x8')][_0x0089('0x25')](_0xe72644,_0x0089('0x13c'));}var _0x575995=this[_0x0089('0x8')]['exec']('PLAYBACK',[_0x272278,_0xe72644[_0x0089('0xbb')]]);if(_0x575995['result']===-0x1){return _0x575995;}return this[_0x0089('0x8')]['noop'](util[_0x0089('0x22')](_0x0089('0x8d'),_0x0089('0x143'),_0x272278));};AGIVertices['prototype'][_0x0089('0x144')]=function(_0x1bd702){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x145'),_0x1bd702[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x1bd702['queue_id'])){return this[_0x0089('0x8')][_0x0089('0x25')](_0x1bd702,_0x0089('0x146'));}var _0xb87eba='';var _0xa70ec1=parseInt(_0x1bd702['queue_id'],0xa);if(isNaN(_0xa70ec1)){_0xb87eba=_0x1bd702[_0x0089('0x147')];}else{_0xb87eba=this[_0x0089('0x148')]['sync'](this,_0x1bd702[_0x0089('0x147')]);if(!_0xb87eba){return this[_0x0089('0x8')][_0x0089('0x25')](_0x1bd702,'no\x20queue\x20found');}}var _0x2f549d='';if(this[_0x0089('0x5b')](_0x1bd702['file_id'])){var _0x347f5b=this[_0x0089('0x13b')][_0x0089('0x77')](this,_0x1bd702[_0x0089('0xdf')]);if(_0x347f5b){_0x2f549d=_0x347f5b;}}this['createSquareDetailsReport']['sync'](this,_0x1bd702,_0xb87eba);if(_0x1bd702['opts'][_0x0089('0x149')]('x')<0x0){_0x1bd702[_0x0089('0xbb')]+='x';}if(_0x1bd702[_0x0089('0xbb')]['indexOf']('X')<0x0){_0x1bd702[_0x0089('0xbb')]+='X';}this[_0x0089('0x8')][_0x0089('0x76')](_0x0089('0x14a'),_0xb87eba?_0xb87eba[_0x0089('0x14b')]():'');var _0x29fad9=this[_0x0089('0x8')]['exec']('QUEUE',[_0xb87eba,_0x1bd702[_0x0089('0xbb')],_0x1bd702['url'],_0x2f549d,_0x1bd702[_0x0089('0x80')],_0x1bd702[_0x0089('0x79')],_0x1bd702[_0x0089('0x14c')],_0x1bd702['gosub'],'',_0x1bd702[_0x0089('0x14d')]]);if(_0x29fad9[_0x0089('0x82')]===-0x1){return _0x29fad9;}return this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x8d'),_0x0089('0x14e'),_0xb87eba));};AGIVertices[_0x0089('0xd')][_0x0089('0x14f')]=function(_0x5a306b){logger['info'](util[_0x0089('0x22')](_0x0089('0x150'),_0x5a306b[_0x0089('0x7b')]));var _0x328066=_0x5a306b[_0x0089('0x151')]||_0x0089('0x100');var _0x50d02f=util[_0x0089('0x22')](_0x0089('0x152'),this[_0x0089('0x8')]['uniqueid'],rs['generate'](0x5));var _0x53b5b7=util[_0x0089('0x22')](_0x0089('0x153'),FILES_PATH,_0x50d02f,_0x328066);var _0x31f131=util['format'](_0x0089('0x101'),FILES_PATH,_0x50d02f);this[_0x0089('0x32')][_0x0089('0x77')](this,_0x5a306b,_0x50d02f,_0x53b5b7);this[_0x0089('0x8')][_0x0089('0x76')](_0x0089('0x154'),_0x50d02f);logger[_0x0089('0x26')]('Recording\x20%s\x20%s\x20%s\x20%s',_0x31f131,_0x328066,_0x5a306b[_0x0089('0x155')],_0x5a306b['timeout']);return this[_0x0089('0x8')]['recordFile'](_0x31f131,_0x328066,_0x5a306b[_0x0089('0x155')],_0x5a306b[_0x0089('0x80')],undefined,!![]);};AGIVertices[_0x0089('0xd')][_0x0089('0x156')]=function(_0x44986c){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x157'),_0x44986c[_0x0089('0x7b')]));return this[_0x0089('0x8')][_0x0089('0x158')](_0x44986c[_0x0089('0x159')][_0x0089('0xab')](/\s+/g,''),_0x44986c[_0x0089('0x155')]);};AGIVertices[_0x0089('0xd')][_0x0089('0x15a')]=function(_0x1e3eca){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x15b'),_0x1e3eca['label']));return this[_0x0089('0x8')][_0x0089('0x15c')](_0x1e3eca[_0x0089('0x15d')]['replace'](/\s+/g,''),_0x1e3eca[_0x0089('0x155')]);};AGIVertices[_0x0089('0xd')]['sayphonetic']=function(_0x42b500){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x15e'),_0x42b500[_0x0089('0x7b')]));return this[_0x0089('0x8')]['sayPhonetic'](_0x42b500['text'],_0x42b500['escape_digits']);};AGIVertices[_0x0089('0xd')][_0x0089('0x15f')]=function(_0x51729f){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x160'),_0x51729f[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x51729f[_0x0089('0x161')])){return this[_0x0089('0x8')][_0x0089('0x88')]('no\x20mail\x20account\x20configured');}var _0x2c9d52=this[_0x0089('0x19')][_0x0089('0x77')](this,_0x51729f[_0x0089('0x161')]);if(!_0x2c9d52||!_0x2c9d52['Smtp']){return this['channel'][_0x0089('0x25')](_0x51729f,_0x0089('0x162'));}var _0x2f599b={'from':util[_0x0089('0x22')]('\x22%s\x22\x20<%s>',_0x2c9d52[_0x0089('0xb')],_0x2c9d52[_0x0089('0x163')]||_0x2c9d52[_0x0089('0x164')][_0x0089('0x165')]),'to':_0x51729f['to']||'','cc':_0x51729f['cc']||'','bcc':_0x51729f[_0x0089('0x166')]||'','subject':_0x51729f[_0x0089('0x167')],'html':_0x51729f[_0x0089('0x51')],'text':_0x51729f[_0x0089('0x51')]};var _0x1bec2b={'tls':{'rejectUnauthorized':![]}};if(_0x2c9d52[_0x0089('0x164')][_0x0089('0x168')]){_0x1bec2b[_0x0089('0x168')]=_0x2c9d52[_0x0089('0x164')][_0x0089('0x168')];}else{_0x1bec2b[_0x0089('0x169')]=_0x2c9d52[_0x0089('0x164')]['host'];_0x1bec2b['port']=_0x2c9d52[_0x0089('0x164')][_0x0089('0x16a')];_0x1bec2b[_0x0089('0x16b')]=_0x2c9d52['Smtp']['secure'];}if(_0x2c9d52[_0x0089('0x164')][_0x0089('0x16c')]){_0x1bec2b[_0x0089('0x16d')]={'user':_0x2c9d52[_0x0089('0x164')][_0x0089('0x165')],'pass':_0x2c9d52[_0x0089('0x164')][_0x0089('0x16e')]};}if(this[_0x0089('0x5b')](_0x51729f['template_id'])){}logger[_0x0089('0xb3')](_0x0089('0x16f'),JSON[_0x0089('0xe5')](_0x2f599b));this[_0x0089('0x2e')][_0x0089('0x77')](this,_0x51729f,_0x51729f['account_id']);this['channel'][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x170'),_0x2c9d52[_0x0089('0xb')]));this['sendMailMessage'][_0x0089('0x77')](this,_0x1bec2b,_0x2f599b);return this[_0x0089('0x8')][_0x0089('0x88')]('Mail\x20message\x20added\x20to\x20outgoing\x20process');};AGIVertices[_0x0089('0xd')][_0x0089('0x171')]=function(_0x2003cc){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x172'),_0x2003cc[_0x0089('0x7b')]));return this[_0x0089('0x8')][_0x0089('0x88')]('SENDFAX\x20block\x20not\x20implemented');};AGIVertices[_0x0089('0xd')][_0x0089('0x173')]=function(_0x57f903){logger['info'](util[_0x0089('0x22')]('Enter\x20in\x20SENDSMS\x20(%s)\x20block',_0x57f903[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x57f903[_0x0089('0x174')])){return this[_0x0089('0x8')][_0x0089('0x88')](_0x0089('0x175'));}var _0x15c02d=this[_0x0089('0x2c')][_0x0089('0x77')](this,_0x57f903[_0x0089('0x174')]);if(!_0x15c02d){return this[_0x0089('0x8')]['error'](_0x57f903,_0x0089('0x176'));}var _0x48d0f5={'body':_0x57f903[_0x0089('0x177')],'phone':_0x57f903['to']||'','SmsAccountId':_0x15c02d['id']};logger[_0x0089('0xb3')]('sendSMS\x20message',JSON['stringify'](_0x48d0f5));this[_0x0089('0x2e')][_0x0089('0x77')](this,_0x57f903,_0x57f903[_0x0089('0x174')]);this['channel']['noop'](util[_0x0089('0x22')](_0x0089('0x178'),_0x15c02d[_0x0089('0xb')]));this[_0x0089('0x2d')][_0x0089('0x77')](this,_0x48d0f5);return this['channel']['noop']('Sms\x20message\x20added\x20to\x20outgoing\x20process');};AGIVertices[_0x0089('0xd')]['set']=function(_0x4ee5a4){logger['info'](util[_0x0089('0x22')](_0x0089('0x179'),_0x4ee5a4[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x4ee5a4['variable_id'])){return this[_0x0089('0x8')][_0x0089('0x25')](_0x4ee5a4,_0x0089('0x17a'));}var _0x4b50e5=this['getVariable'][_0x0089('0x77')](this,_0x4ee5a4[_0x0089('0xae')]);if(!_0x4b50e5){return this[_0x0089('0x8')][_0x0089('0x25')](_0x4ee5a4,_0x0089('0xaf'));}return this[_0x0089('0x8')][_0x0089('0x76')](_0x4b50e5,_0x4ee5a4[_0x0089('0x17b')]);};AGIVertices[_0x0089('0xd')][_0x0089('0x17c')]=function(_0x4369ba){logger['info'](util[_0x0089('0x22')](_0x0089('0x17d'),_0x4369ba[_0x0089('0x7b')]));this['channel'][_0x0089('0x88')](_0x0089('0x17e'));if(_0x4369ba[_0x0089('0x83')]===_0x0089('0x17f')){this[_0x0089('0x8')][_0x0089('0x88')]('Answer');return this[_0x0089('0x8')][_0x0089('0x83')]();}return this['channel'][_0x0089('0x88')]('Skipped\x20Answer');};AGIVertices[_0x0089('0xd')]['subproject']=function(_0x396950){logger[_0x0089('0x26')](util['format'](_0x0089('0x180'),_0x396950[_0x0089('0x7b')]));if(!this['isConfigured'](_0x396950['project_id'])){return this[_0x0089('0x8')]['error'](_0x396950,'no\x20subproject\x20selected');}var _0x131ca0=this[_0x0089('0x10')][_0x0089('0x77')](this,_0x396950[_0x0089('0x181')]);if(!this[_0x0089('0x5b')](_0x131ca0)){return this[_0x0089('0x8')][_0x0089('0x25')](_0x396950,util[_0x0089('0x22')](_0x0089('0x182'),_0x396950[_0x0089('0x181')]));}if(_0x131ca0===this[_0x0089('0x8')][_0x0089('0x31')]){return this[_0x0089('0x8')][_0x0089('0x25')](_0x396950,_0x0089('0x183'));}this[_0x0089('0x2e')][_0x0089('0x77')](this,_0x396950,_0x131ca0);var _0x208223=this['channel'][_0x0089('0x99')](_0x0089('0x184'),util['format'](_0x0089('0x185'),config[_0x0089('0x79')]['host']||_0x0089('0x186'),_0x131ca0,this['channel']['arg_1']));if(_0x208223['result']===-0x1){return _0x208223;}return this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x8d'),'AGI',_0x131ca0));};AGIVertices[_0x0089('0xd')][_0x0089('0x187')]=function(_0x6194ad){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x188'),_0x6194ad[_0x0089('0x7b')]));var _0x225502=this[_0x0089('0x4f')]['sync'](this,_0x6194ad[_0x0089('0x7c')]);this['createSquareDetailsReport'][_0x0089('0x77')](this,_0x6194ad,_0x6194ad[_0x0089('0x7c')]);if(this[_0x0089('0x5b')](_0x6194ad[_0x0089('0xae')])){var _0x1649bc=this[_0x0089('0x75')][_0x0089('0x77')](this,_0x6194ad[_0x0089('0xae')]);if(_0x1649bc){this[_0x0089('0x8')][_0x0089('0x76')](_0x1649bc,_0x225502);return this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x189'),_0x6194ad[_0x0089('0x7c')],_0x1649bc));}}return this[_0x0089('0x8')]['noop'](util['format']('sh\x20command:\x20%s\x20result\x20no\x20stored',_0x6194ad['command']));};AGIVertices[_0x0089('0xd')][_0x0089('0x18a')]=function(_0x4ef34c){logger['info'](util[_0x0089('0x22')]('Enter\x20in\x20GOOGLETTS\x20(%s)\x20block',_0x4ef34c[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x4ef34c[_0x0089('0x51')])){return this['channel']['noop'](_0x0089('0x90'));}this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x18b'),_0x4ef34c['text']));var _0x15dc52=this['googleTTS']['sync'](this,_0x4ef34c);if(_0x15dc52){this[_0x0089('0x8')][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x18c'),_0x15dc52));var _0x1953bb=this[_0x0089('0x8')][_0x0089('0xd0')](_0x15dc52);try{fs['unlink'](_0x15dc52+'.wav');}catch(_0x5e76ce){logger[_0x0089('0x25')](_0x5e76ce);}return _0x1953bb;}return this[_0x0089('0x8')]['error'](_0x4ef34c,_0x0089('0x18d'));};AGIVertices[_0x0089('0xd')]['unpause']=function(_0x49a347){logger['info'](util[_0x0089('0x22')](_0x0089('0x18e'),_0x49a347['label']));if(!this[_0x0089('0x5b')](_0x49a347[_0x0089('0x12c')])){return this[_0x0089('0x8')][_0x0089('0x25')](_0x49a347,'no\x20find\x20by\x20configured');}logger['info'](util[_0x0089('0x22')]('FIND\x20AGENT\x20%s\x20BY\x20%s',this[_0x0089('0x8')][_0x0089('0x33')],_0x49a347[_0x0089('0x12c')]));var _0x211754=this[_0x0089('0x49')]['sync'](this,_0x49a347[_0x0089('0x12c')]);if(_0x211754){logger['info'](util[_0x0089('0x22')](_0x0089('0x12d'),this[_0x0089('0x8')][_0x0089('0x33')],_0x49a347[_0x0089('0x12c')]));this[_0x0089('0x8')][_0x0089('0x88')](util['format'](_0x0089('0x12d'),this[_0x0089('0x8')][_0x0089('0x33')],_0x49a347['findBy']));return{'code':0xc8,'result':_0x0089('0x140')};}else{logger['info'](util[_0x0089('0x22')](_0x0089('0x12e'),this[_0x0089('0x8')][_0x0089('0x33')],_0x49a347[_0x0089('0x12c')]));this[_0x0089('0x8')]['noop'](util[_0x0089('0x22')](_0x0089('0x12e'),this[_0x0089('0x8')][_0x0089('0x33')],_0x49a347[_0x0089('0x12c')]));return{'code':0xc8,'result':_0x0089('0x132')};}};AGIVertices['prototype']['voicemail']=function(_0x14645a){logger[_0x0089('0x26')](util[_0x0089('0x22')](_0x0089('0x18f'),_0x14645a[_0x0089('0x7b')]));var _0x1d1b1b=this['channel'][_0x0089('0x99')]('VOICEMAIL',[_0x14645a['mailbox'],_0x14645a['options']]);if(_0x1d1b1b[_0x0089('0x82')]===-0x1){return _0x1d1b1b;}return this['channel'][_0x0089('0x88')](util[_0x0089('0x22')](_0x0089('0x8d'),'VOICEMAIL',_0x14645a[_0x0089('0x190')]));};AGIVertices[_0x0089('0xd')][_0x0089('0x191')]=function(_0x45582e){logger[_0x0089('0x26')](util[_0x0089('0x22')]('Enter\x20in\x20SWITCH\x20(%s)\x20block',_0x45582e[_0x0089('0x7b')]));if(!this[_0x0089('0x5b')](_0x45582e['variable_id'])){return this[_0x0089('0x8')][_0x0089('0x25')](_0x45582e,_0x0089('0x17a'));}var _0x5ac56a=this[_0x0089('0x75')][_0x0089('0x77')](this,_0x45582e[_0x0089('0xae')]);if(!_0x5ac56a){return this['channel'][_0x0089('0x25')](_0x45582e,_0x0089('0xaf'));}var _0x12681a=this[_0x0089('0x8')][_0x0089('0x75')](_0x5ac56a);return{'code':0xc8,'result':_0x12681a['extra']?_0x12681a['extra']:'-'};};String[_0x0089('0xd')][_0x0089('0x192')]=function(_0xaf60f9,_0xe0a1ac){return this[_0x0089('0x71')](_0xaf60f9)['join'](_0xe0a1ac);};module['exports']=AGIVertices;
\ No newline at end of file
index fe1c73e..0ae0589 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe14d=['agentringnoanswer','syncAgentRingNoAnswer','attendedtransfer','syncAttendedTransfer','blindtransfer','syncBlindTransfer','custom:agentConnectPreview','syncAgentConnectPreview','milliseconds','diff','seconds','prototype','channels','interface','queue','ACW','mandatoryDisposition','mandatoryDispositionPause','Action','then','getAgent','voicePause','info','[%s][START][AGENT:%s][QUEUE:%s]','attended','destlinkedid','savePause','[%s][TIMER:%s][AGENT:%s][QUEUE:%s]','acwTimeout','timer','stopAcw','format','uniqueid','updateAcw','catch','[%s][UPDATE][ERRORS:%s]','[%s][INPAUSE][AGENT:%s][QUEUE:%s]','error','[ACW][START]\x20%s','message','saveUnpause','update','[%s][UPDATE][ACWTIME:%s]','[ACW][STOP]\x20Interface\x20%s\x20doesn\x27t\x20have\x20timer','[ACW][TIMERS]','stringify','[ACW][syncAgentConnect]\x20%s','[ACW][syncAgentConnectPreview]\x20%s','isUndefined','linkedid','[%s][HANGUP:LINKEDID]','[ACW][syncHangupRequest]\x20%s','[%s][HANGUPATTENDEDTRANSFER:LINKEDID]','[ACW][syncHangup]\x20%s','isNil','transfereeuniqueid','startAcw','secondtransfereruniqueid','transfertargetuniqueid','origtransfereruniqueid','[ACW][syncAttendedTransfer]\x20%s','transfereruniqueid','[%s][BLINDTRANSFER:UNIQUEID]','transfererlinkedid','[ACW][syncBlindTransfer]\x20%s','autopause','all','[%s][AUTOPAUSE][AGENT:%s][QUEUE:%]','Auto-Pause','util','lodash','moment','../ami','acw','../rpc/user','voiceQueues','agents','timers','agentconnect','syncAgentConnect','bind','hanguprequest','syncHangupRequest','hangup','syncHangup'];(function(_0x497871,_0x43d6b5){var _0x4255fd=function(_0x157fd9){while(--_0x157fd9){_0x497871['push'](_0x497871['shift']());}};_0x4255fd(++_0x43d6b5);}(_0xe14d,0x1ee));var _0xde14=function(_0x2d7f0e,_0x3e6fbd){_0x2d7f0e=_0x2d7f0e-0x0;var _0x110b07=_0xe14d[_0x2d7f0e];return _0x110b07;};'use strict';var util=require(_0xde14('0x0'));var _=require(_0xde14('0x1'));var moment=require(_0xde14('0x2'));var ami=require(_0xde14('0x3'));var logger=require('../../../config/logger')(_0xde14('0x4'));var RpcUser=require(_0xde14('0x5'));var RpcVoiceAgentReport=require('../rpc/voiceAgentReport');function Acw(_0x1c3e94){this[_0xde14('0x6')]=_0x1c3e94[_0xde14('0x6')];this[_0xde14('0x7')]=_0x1c3e94[_0xde14('0x7')];this[_0xde14('0x8')]=_0x1c3e94['timers'];this['channels']={};ami['on'](_0xde14('0x9'),this[_0xde14('0xa')][_0xde14('0xb')](this));ami['on'](_0xde14('0xc'),this[_0xde14('0xd')][_0xde14('0xb')](this));ami['on'](_0xde14('0xe'),this[_0xde14('0xf')]['bind'](this));ami['on'](_0xde14('0x10'),this[_0xde14('0x11')][_0xde14('0xb')](this));ami['on'](_0xde14('0x12'),this[_0xde14('0x13')][_0xde14('0xb')](this));ami['on'](_0xde14('0x14'),this[_0xde14('0x15')][_0xde14('0xb')](this));ami['on'](_0xde14('0x16'),this[_0xde14('0x17')][_0xde14('0xb')](this));}function getDiff(_0x3521d4){var _0x281c54=moment()[_0xde14('0x18')](0x0);var _0x54c58b=moment(_0x3521d4)['milliseconds'](0x0);return _0x281c54[_0xde14('0x19')](_0x54c58b,_0xde14('0x1a'));}Acw[_0xde14('0x1b')]['startAcw']=function(_0x16aa55){try{var _0x31adb3=this;var _0x257390=this[_0xde14('0x1c')][_0x16aa55][_0xde14('0x1d')];var _0x1b9d4b=this[_0xde14('0x1c')][_0x16aa55][_0xde14('0x1e')];var _0x3cc317=this[_0xde14('0x6')][_0x1b9d4b];var _0x590a8b=![];var _0x3f5fcf=_0xde14('0x1f');if(_0x3cc317[_0xde14('0x20')]){if(_0x3cc317[_0xde14('0x21')]['name']){_0x590a8b=!![];_0x3f5fcf=_0x3cc317[_0xde14('0x21')]['name'];}}ami[_0xde14('0x22')]({'action':'QueuePause','interface':_0x257390,'paused':!![],'reason':_0x3f5fcf})[_0xde14('0x23')](function(_0x30fcf1){if(_0x31adb3[_0xde14('0x7')][_0x257390]){return RpcUser[_0xde14('0x24')](_0x31adb3[_0xde14('0x7')][_0x257390]['id'])[_0xde14('0x23')](function(_0x40b648){if(_0x40b648&&!_0x40b648[_0xde14('0x25')]){logger[_0xde14('0x26')](_0xde14('0x27'),_0x16aa55,_0x257390,_0x1b9d4b);var _0x475f2f=_0x31adb3[_0xde14('0x1c')][_0x16aa55][_0xde14('0x28')]&&_0x31adb3['channels'][_0x16aa55][_0xde14('0x29')]?_0x31adb3[_0xde14('0x1c')][_0x16aa55][_0xde14('0x29')]:_0x16aa55;return RpcUser[_0xde14('0x2a')](_0x31adb3[_0xde14('0x7')][_0x257390],_0x3f5fcf,_0x475f2f)[_0xde14('0x23')](function(_0x310d75){if(!_0x590a8b){_0x31adb3[_0xde14('0x8')][_0x257390]={};logger[_0xde14('0x26')](_0xde14('0x2b'),_0x16aa55,_0x31adb3['voiceQueues'][_0x1b9d4b][_0xde14('0x2c')],_0x257390,_0x1b9d4b);_0x31adb3[_0xde14('0x8')][_0x257390][_0xde14('0x2d')]=setTimeout(_0x31adb3[_0xde14('0x2e')]['bind'](_0x31adb3,_0x257390),_0x31adb3[_0xde14('0x6')][_0x1b9d4b][_0xde14('0x2c')]*0x3e8);_0x31adb3[_0xde14('0x8')][_0x257390]['lastPauseAt']=moment()[_0xde14('0x2f')]('YYYY-MM-DD\x20HH:mm:ss');_0x31adb3[_0xde14('0x8')][_0x257390][_0xde14('0x30')]=_0x16aa55;_0x31adb3[_0xde14('0x8')][_0x257390][_0xde14('0x1e')]=_0x1b9d4b;_0x31adb3[_0xde14('0x8')][_0x257390][_0xde14('0x31')]=function(){var _0xae9dca=getDiff(_0x31adb3[_0xde14('0x8')][_0x257390]['lastPauseAt']);clearTimeout(_0x31adb3[_0xde14('0x8')][_0x257390][_0xde14('0x2d')]);_0x31adb3['timers'][_0x257390][_0xde14('0x2d')]=![];RpcVoiceAgentReport['update']({'acwtime':_0xae9dca},_0x31adb3[_0xde14('0x8')][_0x257390][_0xde14('0x30')],_0x257390)[_0xde14('0x23')](function(_0x21a916){logger[_0xde14('0x26')]('[%s][UPDATE][ACWTIME:%s]',_0x16aa55,_0xae9dca,_0x21a916);})[_0xde14('0x32')](function(_0x57b98b){logger['error'](_0xde14('0x33'),_0x16aa55,_0x57b98b);});delete _0x31adb3[_0xde14('0x8')][_0x257390];};}});}else{logger[_0xde14('0x26')](_0xde14('0x34'),_0x16aa55,_0x257390,_0x1b9d4b);}});}})[_0xde14('0x32')](function(_0xa41c1e){logger[_0xde14('0x35')](_0xde14('0x2b'),_0x16aa55,_0x31adb3[_0xde14('0x6')][_0x1b9d4b]['acwTimeout'],_0x257390,_0x1b9d4b);})['finally'](function(){delete _0x31adb3[_0xde14('0x1c')][_0x16aa55];});}catch(_0x403007){logger[_0xde14('0x35')](_0xde14('0x36'),_0x403007[_0xde14('0x37')]);}};Acw[_0xde14('0x1b')][_0xde14('0x2e')]=function(_0x2b0bc4){try{var _0x2ac7ba=this;if(_0x2ac7ba['timers'][_0x2b0bc4]){_0x2ac7ba[_0xde14('0x8')][_0x2b0bc4]['timer']=![];var _0x4a363c=_0x2ac7ba['timers'][_0x2b0bc4][_0xde14('0x30')];var _0x258759=_0x2ac7ba[_0xde14('0x8')][_0x2b0bc4][_0xde14('0x1e')];var _0x1228d8=_0x2ac7ba[_0xde14('0x6')][_0x258759][_0xde14('0x2c')];logger[_0xde14('0x26')]('[TIMER][STOP][AGENT:%s]',_0x2b0bc4);RpcUser[_0xde14('0x38')](this[_0xde14('0x7')][_0x2b0bc4]);RpcVoiceAgentReport[_0xde14('0x39')]({'acwtime':_0x1228d8,'agentacw':!![]},_0x4a363c,_0x2b0bc4)[_0xde14('0x23')](function(_0x346566){logger[_0xde14('0x26')](_0xde14('0x3a'),_0x4a363c,_0x1228d8,_0x346566);})[_0xde14('0x32')](function(_0x50db0d){logger[_0xde14('0x35')](_0xde14('0x33'),_0x4a363c,_0x50db0d);});}else{logger[_0xde14('0x35')](_0xde14('0x3b'),_0x2b0bc4);if(_0x2ac7ba['timers']){logger['info'](_0xde14('0x3c'),JSON[_0xde14('0x3d')](_0x2ac7ba[_0xde14('0x8')]));}}}catch(_0x171080){logger[_0xde14('0x35')]('[ACW][STOP]\x20%s',_0x171080[_0xde14('0x37')]);}};Acw[_0xde14('0x1b')][_0xde14('0xa')]=function(_0x595fd5){try{if(this[_0xde14('0x6')][_0x595fd5['queue']]&&(this[_0xde14('0x6')][_0x595fd5['queue']][_0xde14('0x4')]||this[_0xde14('0x6')][_0x595fd5[_0xde14('0x1e')]][_0xde14('0x20')])){if(this[_0xde14('0x7')][_0x595fd5[_0xde14('0x1d')]]){this[_0xde14('0x1c')][_0x595fd5[_0xde14('0x30')]]={'queue':_0x595fd5['queue'],'interface':_0x595fd5[_0xde14('0x1d')],'destlinkedid':_0x595fd5['destlinkedid']};}}}catch(_0x430b22){logger['error'](_0xde14('0x3e'),_0x430b22[_0xde14('0x37')]);}};Acw[_0xde14('0x1b')][_0xde14('0x17')]=function(_0x40e7ae){try{if(this[_0xde14('0x6')][_0x40e7ae[_0xde14('0x1e')]]&&(this[_0xde14('0x6')][_0x40e7ae['queue']][_0xde14('0x4')]||this[_0xde14('0x6')][_0x40e7ae[_0xde14('0x1e')]][_0xde14('0x20')])){if(this['agents'][_0x40e7ae[_0xde14('0x1d')]]){this[_0xde14('0x1c')][_0x40e7ae[_0xde14('0x30')]]={'queue':_0x40e7ae[_0xde14('0x1e')],'interface':_0x40e7ae[_0xde14('0x1d')]};}}}catch(_0x19e12c){logger['error'](_0xde14('0x3f'),_0x19e12c['message']);}};Acw[_0xde14('0x1b')][_0xde14('0xd')]=function(_0x48a677){try{if(this[_0xde14('0x1c')][_0x48a677[_0xde14('0x30')]]&&_[_0xde14('0x40')](this[_0xde14('0x1c')][_0x48a677[_0xde14('0x30')]][_0xde14('0x28')])){logger[_0xde14('0x26')]('[%s][HANGUP:UNIQUEID]',_0x48a677[_0xde14('0x30')]);this['startAcw'](_0x48a677[_0xde14('0x30')]);}else if(this[_0xde14('0x1c')][_0x48a677[_0xde14('0x41')]]&&_[_0xde14('0x40')](this[_0xde14('0x1c')][_0x48a677[_0xde14('0x41')]][_0xde14('0x28')])){logger[_0xde14('0x26')](_0xde14('0x42'),_0x48a677[_0xde14('0x41')]);this['startAcw'](_0x48a677[_0xde14('0x41')]);}}catch(_0x1688c6){logger[_0xde14('0x35')](_0xde14('0x43'),_0x1688c6[_0xde14('0x37')]);}};Acw['prototype'][_0xde14('0xf')]=function(_0x4dc2e3){try{if(this[_0xde14('0x1c')][_0x4dc2e3[_0xde14('0x30')]]&&this[_0xde14('0x1c')][_0x4dc2e3[_0xde14('0x30')]][_0xde14('0x28')]){logger['info']('[%s][HANGUPATTENDEDTRANSFER:UNIQUEID]',_0x4dc2e3[_0xde14('0x30')]);this['startAcw'](_0x4dc2e3[_0xde14('0x30')]);}else if(this[_0xde14('0x1c')][_0x4dc2e3[_0xde14('0x41')]]&&this[_0xde14('0x1c')][_0x4dc2e3[_0xde14('0x41')]][_0xde14('0x28')]){logger[_0xde14('0x26')](_0xde14('0x44'),_0x4dc2e3[_0xde14('0x41')]);this['startAcw'](_0x4dc2e3[_0xde14('0x41')]);}}catch(_0x2c972b){logger[_0xde14('0x35')](_0xde14('0x45'),_0x2c972b[_0xde14('0x37')]);}};Acw['prototype'][_0xde14('0x13')]=function(_0x58790d){try{if(!_[_0xde14('0x46')](this[_0xde14('0x1c')][_0x58790d[_0xde14('0x47')]])){this[_0xde14('0x48')](_0x58790d[_0xde14('0x47')]);if(this[_0xde14('0x1c')][_0x58790d[_0xde14('0x49')]]){this[_0xde14('0x1c')][_0x58790d['secondtransfereruniqueid']]['attended']=!![];this['channels'][_0x58790d[_0xde14('0x4a')]]=this['channels'][_0x58790d['secondtransfereruniqueid']];delete this[_0xde14('0x1c')][_0x58790d[_0xde14('0x49')]];}}else if(!_[_0xde14('0x46')](this[_0xde14('0x1c')][_0x58790d[_0xde14('0x4a')]])){this[_0xde14('0x48')](_0x58790d[_0xde14('0x4a')]);if(this[_0xde14('0x1c')][_0x58790d[_0xde14('0x4b')]]){this['channels'][_0x58790d[_0xde14('0x4b')]][_0xde14('0x28')]=!![];this[_0xde14('0x1c')][_0x58790d['transfereeuniqueid']]=this[_0xde14('0x1c')][_0x58790d['origtransfereruniqueid']];delete this[_0xde14('0x1c')][_0x58790d[_0xde14('0x4b')]];}}}catch(_0x40ab83){logger[_0xde14('0x35')](_0xde14('0x4c'),_0x40ab83[_0xde14('0x37')]);}};Acw[_0xde14('0x1b')]['syncBlindTransfer']=function(_0x3a357a){try{if(this[_0xde14('0x1c')][_0x3a357a[_0xde14('0x4d')]]){logger[_0xde14('0x26')](_0xde14('0x4e'),JSON[_0xde14('0x3d')](_0x3a357a[_0xde14('0x4d')]));this['startAcw'](_0x3a357a['transfereruniqueid']);}else if(this[_0xde14('0x1c')][_0x3a357a[_0xde14('0x4f')]]){logger[_0xde14('0x26')]('[%s][BLINDTRANSFER:LINKEDID]',JSON[_0xde14('0x3d')](_0x3a357a[_0xde14('0x4f')]));this[_0xde14('0x48')](_0x3a357a[_0xde14('0x4f')]);}}catch(_0x51e8ca){logger['error'](_0xde14('0x50'),_0x51e8ca[_0xde14('0x37')]);}};Acw[_0xde14('0x1b')][_0xde14('0x11')]=function(_0x136c21){try{if(this[_0xde14('0x6')][_0x136c21[_0xde14('0x1e')]]&&this[_0xde14('0x6')][_0x136c21[_0xde14('0x1e')]][_0xde14('0x51')]===_0xde14('0x52')){if(this[_0xde14('0x7')][_0x136c21[_0xde14('0x1d')]]){logger[_0xde14('0x26')](_0xde14('0x53'),_0x136c21[_0xde14('0x30')],_0x136c21[_0xde14('0x1d')],_0x136c21[_0xde14('0x1e')]);return RpcUser[_0xde14('0x2a')](this[_0xde14('0x7')][_0x136c21[_0xde14('0x1d')]],_0xde14('0x54'),_0x136c21[_0xde14('0x30')]);}}}catch(_0x4809fa){logger[_0xde14('0x35')]('[ACW][syncAgentRingNoAnswer]\x20%s',_0x4809fa[_0xde14('0x37')]);}};module['exports']=Acw;
\ No newline at end of file
+var _0x0e85=['[%s][TIMER:%s][AGENT:%s][QUEUE:%s]','acwTimeout','timer','stopAcw','lastPauseAt','format','uniqueid','queue','updateAcw','update','catch','error','[%s][UPDATE][ERRORS:%s]','[ACW][START]\x20%s','prototype','[TIMER][STOP][AGENT:%s]','saveUnpause','[%s][UPDATE][ACWTIME:%s]','[ACW][STOP]\x20Interface\x20%s\x20doesn\x27t\x20have\x20timer','stringify','[ACW][STOP]\x20%s','message','acw','[ACW][syncAgentConnect]\x20%s','syncAgentConnectPreview','[ACW][syncAgentConnectPreview]\x20%s','linkedid','isUndefined','attended','[%s][HANGUP:LINKEDID]','startAcw','[%s][HANGUPATTENDEDTRANSFER:UNIQUEID]','[%s][HANGUPATTENDEDTRANSFER:LINKEDID]','isNil','transfertargetuniqueid','secondtransfereruniqueid','origtransfereruniqueid','transfereeuniqueid','transfereruniqueid','[%s][BLINDTRANSFER:UNIQUEID]','transfererlinkedid','[%s][AUTOPAUSE][AGENT:%s][QUEUE:%]','Auto-Pause','[ACW][syncAgentRingNoAnswer]\x20%s','exports','util','lodash','../ami','../../../config/logger','voiceQueues','agents','timers','channels','agentconnect','syncAgentConnect','bind','hanguprequest','syncHangupRequest','hangup','syncHangup','agentringnoanswer','syncAgentRingNoAnswer','attendedtransfer','syncAttendedTransfer','syncBlindTransfer','milliseconds','diff','seconds','interface','ACW','mandatoryDisposition','mandatoryDispositionPause','Action','QueuePause','then','voicePause','info','destlinkedid','savePause'];(function(_0x105b7e,_0x3eba8c){var _0x328773=function(_0xffdc01){while(--_0xffdc01){_0x105b7e['push'](_0x105b7e['shift']());}};_0x328773(++_0x3eba8c);}(_0x0e85,0x7c));var _0x50e8=function(_0x307d86,_0x9264f2){_0x307d86=_0x307d86-0x0;var _0x361745=_0x0e85[_0x307d86];return _0x361745;};'use strict';var util=require(_0x50e8('0x0'));var _=require(_0x50e8('0x1'));var moment=require('moment');var ami=require(_0x50e8('0x2'));var logger=require(_0x50e8('0x3'))('acw');var RpcUser=require('../rpc/user');var RpcVoiceAgentReport=require('../rpc/voiceAgentReport');function Acw(_0x236cf3){this['voiceQueues']=_0x236cf3[_0x50e8('0x4')];this[_0x50e8('0x5')]=_0x236cf3[_0x50e8('0x5')];this[_0x50e8('0x6')]=_0x236cf3['timers'];this[_0x50e8('0x7')]={};ami['on'](_0x50e8('0x8'),this[_0x50e8('0x9')][_0x50e8('0xa')](this));ami['on'](_0x50e8('0xb'),this[_0x50e8('0xc')]['bind'](this));ami['on'](_0x50e8('0xd'),this[_0x50e8('0xe')][_0x50e8('0xa')](this));ami['on'](_0x50e8('0xf'),this[_0x50e8('0x10')][_0x50e8('0xa')](this));ami['on'](_0x50e8('0x11'),this[_0x50e8('0x12')]['bind'](this));ami['on']('blindtransfer',this[_0x50e8('0x13')][_0x50e8('0xa')](this));ami['on']('custom:agentConnectPreview',this['syncAgentConnectPreview'][_0x50e8('0xa')](this));}function getDiff(_0x2abda1){var _0x1a4c85=moment()[_0x50e8('0x14')](0x0);var _0x54efd3=moment(_0x2abda1)[_0x50e8('0x14')](0x0);return _0x1a4c85[_0x50e8('0x15')](_0x54efd3,_0x50e8('0x16'));}Acw['prototype']['startAcw']=function(_0x30a872){try{var _0xf02b48=this;var _0x40c184=this[_0x50e8('0x7')][_0x30a872][_0x50e8('0x17')];var _0x1f0338=this['channels'][_0x30a872]['queue'];var _0x441f25=this[_0x50e8('0x4')][_0x1f0338];var _0x40d060=![];var _0x45ce11=_0x50e8('0x18');if(_0x441f25[_0x50e8('0x19')]){if(_0x441f25[_0x50e8('0x1a')]['name']){_0x40d060=!![];_0x45ce11=_0x441f25[_0x50e8('0x1a')]['name'];}}ami[_0x50e8('0x1b')]({'action':_0x50e8('0x1c'),'interface':_0x40c184,'paused':!![],'reason':_0x45ce11})[_0x50e8('0x1d')](function(_0x20f835){if(_0xf02b48[_0x50e8('0x5')][_0x40c184]){return RpcUser['getAgent'](_0xf02b48[_0x50e8('0x5')][_0x40c184]['id'])[_0x50e8('0x1d')](function(_0x58110d){if(_0x58110d&&!_0x58110d[_0x50e8('0x1e')]){logger[_0x50e8('0x1f')]('[%s][START][AGENT:%s][QUEUE:%s]',_0x30a872,_0x40c184,_0x1f0338);var _0x1ce7fc=_0xf02b48[_0x50e8('0x7')][_0x30a872]['attended']&&_0xf02b48['channels'][_0x30a872]['destlinkedid']?_0xf02b48[_0x50e8('0x7')][_0x30a872][_0x50e8('0x20')]:_0x30a872;return RpcUser[_0x50e8('0x21')](_0xf02b48[_0x50e8('0x5')][_0x40c184],_0x45ce11,_0x1ce7fc)[_0x50e8('0x1d')](function(_0x13b6e9){if(!_0x40d060){_0xf02b48['timers'][_0x40c184]={};logger[_0x50e8('0x1f')](_0x50e8('0x22'),_0x30a872,_0xf02b48['voiceQueues'][_0x1f0338][_0x50e8('0x23')],_0x40c184,_0x1f0338);_0xf02b48[_0x50e8('0x6')][_0x40c184][_0x50e8('0x24')]=setTimeout(_0xf02b48[_0x50e8('0x25')]['bind'](_0xf02b48,_0x40c184),_0xf02b48[_0x50e8('0x4')][_0x1f0338]['acwTimeout']*0x3e8);_0xf02b48[_0x50e8('0x6')][_0x40c184][_0x50e8('0x26')]=moment()[_0x50e8('0x27')]('YYYY-MM-DD\x20HH:mm:ss');_0xf02b48[_0x50e8('0x6')][_0x40c184][_0x50e8('0x28')]=_0x30a872;_0xf02b48[_0x50e8('0x6')][_0x40c184][_0x50e8('0x29')]=_0x1f0338;_0xf02b48[_0x50e8('0x6')][_0x40c184][_0x50e8('0x2a')]=function(){var _0x2c6fb3=getDiff(_0xf02b48['timers'][_0x40c184][_0x50e8('0x26')]);clearTimeout(_0xf02b48[_0x50e8('0x6')][_0x40c184]['timer']);_0xf02b48['timers'][_0x40c184][_0x50e8('0x24')]=![];RpcVoiceAgentReport[_0x50e8('0x2b')]({'acwtime':_0x2c6fb3},_0xf02b48[_0x50e8('0x6')][_0x40c184]['uniqueid'],_0x40c184)['then'](function(_0x3e58a9){logger[_0x50e8('0x1f')]('[%s][UPDATE][ACWTIME:%s]',_0x30a872,_0x2c6fb3,_0x3e58a9);})[_0x50e8('0x2c')](function(_0x17c6a5){logger[_0x50e8('0x2d')](_0x50e8('0x2e'),_0x30a872,_0x17c6a5);});delete _0xf02b48['timers'][_0x40c184];};}});}else{logger[_0x50e8('0x1f')]('[%s][INPAUSE][AGENT:%s][QUEUE:%s]',_0x30a872,_0x40c184,_0x1f0338);}});}})[_0x50e8('0x2c')](function(_0x33fc5b){logger[_0x50e8('0x2d')]('[%s][TIMER:%s][AGENT:%s][QUEUE:%s]',_0x30a872,_0xf02b48[_0x50e8('0x4')][_0x1f0338][_0x50e8('0x23')],_0x40c184,_0x1f0338);})['finally'](function(){delete _0xf02b48[_0x50e8('0x7')][_0x30a872];});}catch(_0x1c2fdb){logger[_0x50e8('0x2d')](_0x50e8('0x2f'),_0x1c2fdb['message']);}};Acw[_0x50e8('0x30')][_0x50e8('0x25')]=function(_0x24d3ea){try{var _0x4e2a37=this;if(_0x4e2a37['timers'][_0x24d3ea]){_0x4e2a37[_0x50e8('0x6')][_0x24d3ea][_0x50e8('0x24')]=![];var _0x3f01ee=_0x4e2a37['timers'][_0x24d3ea]['uniqueid'];var _0x5dff99=_0x4e2a37[_0x50e8('0x6')][_0x24d3ea][_0x50e8('0x29')];var _0x2cbee3=_0x4e2a37[_0x50e8('0x4')][_0x5dff99][_0x50e8('0x23')];logger[_0x50e8('0x1f')](_0x50e8('0x31'),_0x24d3ea);RpcUser[_0x50e8('0x32')](this[_0x50e8('0x5')][_0x24d3ea]);RpcVoiceAgentReport[_0x50e8('0x2b')]({'acwtime':_0x2cbee3,'agentacw':!![]},_0x3f01ee,_0x24d3ea)['then'](function(_0x3371a4){logger[_0x50e8('0x1f')](_0x50e8('0x33'),_0x3f01ee,_0x2cbee3,_0x3371a4);})[_0x50e8('0x2c')](function(_0x5dbbe1){logger[_0x50e8('0x2d')](_0x50e8('0x2e'),_0x3f01ee,_0x5dbbe1);});}else{logger[_0x50e8('0x2d')](_0x50e8('0x34'),_0x24d3ea);if(_0x4e2a37[_0x50e8('0x6')]){logger['info']('[ACW][TIMERS]',JSON[_0x50e8('0x35')](_0x4e2a37[_0x50e8('0x6')]));}}}catch(_0x53705e){logger[_0x50e8('0x2d')](_0x50e8('0x36'),_0x53705e[_0x50e8('0x37')]);}};Acw[_0x50e8('0x30')][_0x50e8('0x9')]=function(_0x313e7b){try{if(this[_0x50e8('0x4')][_0x313e7b[_0x50e8('0x29')]]&&(this['voiceQueues'][_0x313e7b[_0x50e8('0x29')]][_0x50e8('0x38')]||this[_0x50e8('0x4')][_0x313e7b[_0x50e8('0x29')]]['mandatoryDisposition'])){if(this[_0x50e8('0x5')][_0x313e7b[_0x50e8('0x17')]]){this[_0x50e8('0x7')][_0x313e7b[_0x50e8('0x28')]]={'queue':_0x313e7b['queue'],'interface':_0x313e7b[_0x50e8('0x17')],'destlinkedid':_0x313e7b['destlinkedid']};}}}catch(_0x4a2619){logger['error'](_0x50e8('0x39'),_0x4a2619[_0x50e8('0x37')]);}};Acw['prototype'][_0x50e8('0x3a')]=function(_0x2007c4){try{if(this[_0x50e8('0x4')][_0x2007c4[_0x50e8('0x29')]]&&(this[_0x50e8('0x4')][_0x2007c4[_0x50e8('0x29')]]['acw']||this[_0x50e8('0x4')][_0x2007c4['queue']][_0x50e8('0x19')])){if(this[_0x50e8('0x5')][_0x2007c4['interface']]){this[_0x50e8('0x7')][_0x2007c4['uniqueid']]={'queue':_0x2007c4[_0x50e8('0x29')],'interface':_0x2007c4[_0x50e8('0x17')]};}}}catch(_0x2e55ed){logger[_0x50e8('0x2d')](_0x50e8('0x3b'),_0x2e55ed[_0x50e8('0x37')]);}};Acw[_0x50e8('0x30')][_0x50e8('0xc')]=function(_0x141bd4){try{if(this[_0x50e8('0x7')][_0x141bd4[_0x50e8('0x28')]]&&_['isUndefined'](this[_0x50e8('0x7')][_0x141bd4[_0x50e8('0x28')]]['attended'])){logger[_0x50e8('0x1f')]('[%s][HANGUP:UNIQUEID]',_0x141bd4[_0x50e8('0x28')]);this['startAcw'](_0x141bd4[_0x50e8('0x28')]);}else if(this[_0x50e8('0x7')][_0x141bd4[_0x50e8('0x3c')]]&&_[_0x50e8('0x3d')](this[_0x50e8('0x7')][_0x141bd4[_0x50e8('0x3c')]][_0x50e8('0x3e')])){logger['info'](_0x50e8('0x3f'),_0x141bd4[_0x50e8('0x3c')]);this[_0x50e8('0x40')](_0x141bd4[_0x50e8('0x3c')]);}}catch(_0x3303f5){logger[_0x50e8('0x2d')]('[ACW][syncHangupRequest]\x20%s',_0x3303f5[_0x50e8('0x37')]);}};Acw[_0x50e8('0x30')][_0x50e8('0xe')]=function(_0x27c80a){try{if(this['channels'][_0x27c80a[_0x50e8('0x28')]]&&this[_0x50e8('0x7')][_0x27c80a[_0x50e8('0x28')]][_0x50e8('0x3e')]){logger[_0x50e8('0x1f')](_0x50e8('0x41'),_0x27c80a[_0x50e8('0x28')]);this['startAcw'](_0x27c80a['uniqueid']);}else if(this['channels'][_0x27c80a[_0x50e8('0x3c')]]&&this[_0x50e8('0x7')][_0x27c80a[_0x50e8('0x3c')]][_0x50e8('0x3e')]){logger[_0x50e8('0x1f')](_0x50e8('0x42'),_0x27c80a['linkedid']);this[_0x50e8('0x40')](_0x27c80a[_0x50e8('0x3c')]);}}catch(_0x460c8e){logger[_0x50e8('0x2d')]('[ACW][syncHangup]\x20%s',_0x460c8e[_0x50e8('0x37')]);}};Acw[_0x50e8('0x30')][_0x50e8('0x12')]=function(_0x1cc5ba){try{if(!_[_0x50e8('0x43')](this[_0x50e8('0x7')][_0x1cc5ba['transfereeuniqueid']])){this[_0x50e8('0x40')](_0x1cc5ba['transfereeuniqueid']);if(this['channels'][_0x1cc5ba['secondtransfereruniqueid']]){this[_0x50e8('0x7')][_0x1cc5ba['secondtransfereruniqueid']][_0x50e8('0x3e')]=!![];this[_0x50e8('0x7')][_0x1cc5ba[_0x50e8('0x44')]]=this[_0x50e8('0x7')][_0x1cc5ba[_0x50e8('0x45')]];delete this[_0x50e8('0x7')][_0x1cc5ba[_0x50e8('0x45')]];}}else if(!_['isNil'](this[_0x50e8('0x7')][_0x1cc5ba[_0x50e8('0x44')]])){this[_0x50e8('0x40')](_0x1cc5ba['transfertargetuniqueid']);if(this['channels'][_0x1cc5ba['origtransfereruniqueid']]){this[_0x50e8('0x7')][_0x1cc5ba[_0x50e8('0x46')]][_0x50e8('0x3e')]=!![];this[_0x50e8('0x7')][_0x1cc5ba[_0x50e8('0x47')]]=this[_0x50e8('0x7')][_0x1cc5ba['origtransfereruniqueid']];delete this[_0x50e8('0x7')][_0x1cc5ba['origtransfereruniqueid']];}}}catch(_0x255b48){logger[_0x50e8('0x2d')]('[ACW][syncAttendedTransfer]\x20%s',_0x255b48['message']);}};Acw['prototype'][_0x50e8('0x13')]=function(_0x3588f0){try{if(this['channels'][_0x3588f0[_0x50e8('0x48')]]){logger[_0x50e8('0x1f')](_0x50e8('0x49'),JSON[_0x50e8('0x35')](_0x3588f0[_0x50e8('0x48')]));this['startAcw'](_0x3588f0[_0x50e8('0x48')]);}else if(this[_0x50e8('0x7')][_0x3588f0[_0x50e8('0x4a')]]){logger['info']('[%s][BLINDTRANSFER:LINKEDID]',JSON[_0x50e8('0x35')](_0x3588f0[_0x50e8('0x4a')]));this[_0x50e8('0x40')](_0x3588f0[_0x50e8('0x4a')]);}}catch(_0x2b59f5){logger[_0x50e8('0x2d')]('[ACW][syncBlindTransfer]\x20%s',_0x2b59f5['message']);}};Acw[_0x50e8('0x30')]['syncAgentRingNoAnswer']=function(_0x1fc530){try{if(this[_0x50e8('0x4')][_0x1fc530['queue']]&&this[_0x50e8('0x4')][_0x1fc530['queue']]['autopause']==='all'){if(this[_0x50e8('0x5')][_0x1fc530[_0x50e8('0x17')]]){logger[_0x50e8('0x1f')](_0x50e8('0x4b'),_0x1fc530['uniqueid'],_0x1fc530['interface'],_0x1fc530[_0x50e8('0x29')]);return RpcUser[_0x50e8('0x21')](this[_0x50e8('0x5')][_0x1fc530[_0x50e8('0x17')]],_0x50e8('0x4c'),_0x1fc530[_0x50e8('0x28')]);}}}catch(_0x42e1dd){logger[_0x50e8('0x2d')](_0x50e8('0x4d'),_0x42e1dd[_0x50e8('0x37')]);}};module[_0x50e8('0x4e')]=Acw;
\ No newline at end of file
index 2dbe5de..b1111a3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ad8=['info','Shutdown\x20\x22%s\x22\x20to\x20%s:%s\x20with:\x0a%s','Fullybooted\x20\x22%s\x22\x20to\x20%s:%s','resolve','then','actionSipPeerStatus','catch','log','close','asterisk-manager','moment','util','lodash','../../config/environment','port','asterisk','password','keepConnected','Action','action','error','Manager\x20\x22%s\x22\x20error\x20to\x20%s:%s\x20with:\x0a%s','username','inspect','format','Manager\x20\x22%s\x22\x20closed\x20to\x20%s:%s','sipshowregistry','actionDeviceStateList','devicestatelist','sippeerstatus','actionQueueSummary','actionCoreShowChannels','coreshowchannels','Manager\x20\x22%s\x22\x20logged\x20on\x20to\x20%s:%s','once','connect','shutdown'];(function(_0x23eaf2,_0x465cfb){var _0x54efb4=function(_0x5f3727){while(--_0x5f3727){_0x23eaf2['push'](_0x23eaf2['shift']());}};_0x54efb4(++_0x465cfb);}(_0x4ad8,0x1a0));var _0x84ad=function(_0x454ebb,_0x16f1f0){_0x454ebb=_0x454ebb-0x0;var _0xcf5717=_0x4ad8[_0x454ebb];return _0xcf5717;};'use strict';var Manager=require(_0x84ad('0x0'));var BPromise=require('bluebird');var moment=require(_0x84ad('0x1'));var util=require(_0x84ad('0x2'));var _=require(_0x84ad('0x3'));var logger=require('../../config/logger')('ami');var config=require(_0x84ad('0x4'));var ami=new Manager(config['asterisk'][_0x84ad('0x5')],config[_0x84ad('0x6')]['ip'],config[_0x84ad('0x6')]['username'],config[_0x84ad('0x6')][_0x84ad('0x7')],!![]);ami[_0x84ad('0x8')]();ami[_0x84ad('0x9')]=BPromise['promisify'](ami[_0x84ad('0xa')]);function error(_0x3c3ec9){logger[_0x84ad('0xb')](util['format'](_0x84ad('0xc'),config[_0x84ad('0x6')][_0x84ad('0xd')],config[_0x84ad('0x6')]['ip'],config[_0x84ad('0x6')][_0x84ad('0x5')],util[_0x84ad('0xe')](_0x3c3ec9,![],null)));}function close(){logger['error'](util[_0x84ad('0xf')](_0x84ad('0x10'),config[_0x84ad('0x6')][_0x84ad('0xd')],config[_0x84ad('0x6')]['ip'],config[_0x84ad('0x6')][_0x84ad('0x5')]));}ami['actionSipShowRegistry']=function(){return function(){return ami[_0x84ad('0x9')]({'action':_0x84ad('0x11')});};};ami[_0x84ad('0x12')]=function(){return function(){return ami[_0x84ad('0x9')]({'action':_0x84ad('0x13')});};};ami['actionSipPeerStatus']=function(){return function(){return ami[_0x84ad('0x9')]({'action':_0x84ad('0x14')});};};ami[_0x84ad('0x15')]=function(){return function(){return ami[_0x84ad('0x9')]({'action':'queuesummary'});};};ami[_0x84ad('0x16')]=function(){return function(){return ami['Action']({'action':_0x84ad('0x17')});};};function connect(_0x3bd4dc){logger['info'](util[_0x84ad('0xf')](_0x84ad('0x18'),config[_0x84ad('0x6')][_0x84ad('0xd')],config[_0x84ad('0x6')]['ip'],config[_0x84ad('0x6')][_0x84ad('0x5')]));ami[_0x84ad('0x19')](_0x84ad('0xb'),error);ami['once']('close',close);}ami['on'](_0x84ad('0x1a'),connect);ami['on'](_0x84ad('0x1b'),function(_0x2240bc){logger[_0x84ad('0x1c')](util[_0x84ad('0xf')](_0x84ad('0x1d'),config[_0x84ad('0x6')][_0x84ad('0xd')],config[_0x84ad('0x6')]['ip'],config['asterisk'][_0x84ad('0x5')],util[_0x84ad('0xe')](_0x2240bc,![],null)));});ami['on']('fullybooted',function(_0x24d12e){logger['info'](util[_0x84ad('0xf')](_0x84ad('0x1e'),config['asterisk']['username'],config[_0x84ad('0x6')]['ip'],config['asterisk'][_0x84ad('0x5')]));return BPromise[_0x84ad('0x1f')]()[_0x84ad('0x20')](ami['actionSipShowRegistry']())['then'](ami['actionDeviceStateList']())[_0x84ad('0x20')](ami[_0x84ad('0x21')]())[_0x84ad('0x20')](ami[_0x84ad('0x15')]())[_0x84ad('0x20')](ami[_0x84ad('0x16')]())[_0x84ad('0x22')](function(_0x930c47){console[_0x84ad('0x23')](_0x930c47);});});ami[_0x84ad('0x19')](_0x84ad('0xb'),error);ami[_0x84ad('0x19')](_0x84ad('0x24'),close);module['exports']=ami;
\ No newline at end of file
+var _0x40cd=['actionDeviceStateList','log','exports','asterisk-manager','bluebird','moment','util','lodash','../../config/logger','ami','../../config/environment','asterisk','port','password','keepConnected','Action','action','error','format','Manager\x20\x22%s\x22\x20error\x20to\x20%s:%s\x20with:\x0a%s','username','inspect','Manager\x20\x22%s\x22\x20closed\x20to\x20%s:%s','actionSipShowRegistry','devicestatelist','actionSipPeerStatus','actionQueueSummary','queuesummary','actionCoreShowChannels','coreshowchannels','info','Manager\x20\x22%s\x22\x20logged\x20on\x20to\x20%s:%s','once','close','shutdown','Shutdown\x20\x22%s\x22\x20to\x20%s:%s\x20with:\x0a%s','fullybooted','resolve','then'];(function(_0x1f3f72,_0x20d1ed){var _0x26b19c=function(_0x21ea6d){while(--_0x21ea6d){_0x1f3f72['push'](_0x1f3f72['shift']());}};_0x26b19c(++_0x20d1ed);}(_0x40cd,0x1d7));var _0xd40c=function(_0x8c8715,_0xa2b6d1){_0x8c8715=_0x8c8715-0x0;var _0x78f54f=_0x40cd[_0x8c8715];return _0x78f54f;};'use strict';var Manager=require(_0xd40c('0x0'));var BPromise=require(_0xd40c('0x1'));var moment=require(_0xd40c('0x2'));var util=require(_0xd40c('0x3'));var _=require(_0xd40c('0x4'));var logger=require(_0xd40c('0x5'))(_0xd40c('0x6'));var config=require(_0xd40c('0x7'));var ami=new Manager(config[_0xd40c('0x8')][_0xd40c('0x9')],config[_0xd40c('0x8')]['ip'],config['asterisk']['username'],config[_0xd40c('0x8')][_0xd40c('0xa')],!![]);ami[_0xd40c('0xb')]();ami[_0xd40c('0xc')]=BPromise['promisify'](ami[_0xd40c('0xd')]);function error(_0x233f15){logger[_0xd40c('0xe')](util[_0xd40c('0xf')](_0xd40c('0x10'),config[_0xd40c('0x8')][_0xd40c('0x11')],config[_0xd40c('0x8')]['ip'],config[_0xd40c('0x8')][_0xd40c('0x9')],util[_0xd40c('0x12')](_0x233f15,![],null)));}function close(){logger['error'](util['format'](_0xd40c('0x13'),config[_0xd40c('0x8')][_0xd40c('0x11')],config['asterisk']['ip'],config[_0xd40c('0x8')][_0xd40c('0x9')]));}ami[_0xd40c('0x14')]=function(){return function(){return ami[_0xd40c('0xc')]({'action':'sipshowregistry'});};};ami['actionDeviceStateList']=function(){return function(){return ami[_0xd40c('0xc')]({'action':_0xd40c('0x15')});};};ami[_0xd40c('0x16')]=function(){return function(){return ami[_0xd40c('0xc')]({'action':'sippeerstatus'});};};ami[_0xd40c('0x17')]=function(){return function(){return ami[_0xd40c('0xc')]({'action':_0xd40c('0x18')});};};ami[_0xd40c('0x19')]=function(){return function(){return ami[_0xd40c('0xc')]({'action':_0xd40c('0x1a')});};};function connect(_0x319d99){logger[_0xd40c('0x1b')](util['format'](_0xd40c('0x1c'),config[_0xd40c('0x8')]['username'],config[_0xd40c('0x8')]['ip'],config['asterisk']['port']));ami[_0xd40c('0x1d')]('error',error);ami['once'](_0xd40c('0x1e'),close);}ami['on']('connect',connect);ami['on'](_0xd40c('0x1f'),function(_0x3e0dbe){logger[_0xd40c('0x1b')](util[_0xd40c('0xf')](_0xd40c('0x20'),config[_0xd40c('0x8')][_0xd40c('0x11')],config['asterisk']['ip'],config[_0xd40c('0x8')][_0xd40c('0x9')],util['inspect'](_0x3e0dbe,![],null)));});ami['on'](_0xd40c('0x21'),function(_0xe601ff){logger[_0xd40c('0x1b')](util['format']('Fullybooted\x20\x22%s\x22\x20to\x20%s:%s',config[_0xd40c('0x8')][_0xd40c('0x11')],config['asterisk']['ip'],config['asterisk'][_0xd40c('0x9')]));return BPromise[_0xd40c('0x22')]()['then'](ami[_0xd40c('0x14')]())[_0xd40c('0x23')](ami[_0xd40c('0x24')]())[_0xd40c('0x23')](ami[_0xd40c('0x16')]())['then'](ami[_0xd40c('0x17')]())[_0xd40c('0x23')](ami['actionCoreShowChannels']())['catch'](function(_0x6133c2){console[_0xd40c('0x25')](_0x6133c2);});});ami[_0xd40c('0x1d')](_0xd40c('0xe'),error);ami[_0xd40c('0x1d')](_0xd40c('0x1e'),close);module[_0xd40c('0x26')]=ami;
\ No newline at end of file
index fda316a..0b44ffe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6adc=['../../config/logger','ami','client','Request','request','then','rpc','error','message','result','catch','memberReport','exports','jayson/promise'];(function(_0x4dcc2d,_0x422839){var _0x1bbd79=function(_0x173341){while(--_0x173341){_0x4dcc2d['push'](_0x4dcc2d['shift']());}};_0x1bbd79(++_0x422839);}(_0x6adc,0x8b));var _0xc6ad=function(_0x160e1f,_0x1fb425){_0x160e1f=_0x160e1f-0x0;var _0x12f462=_0x6adc[_0x160e1f];return _0x12f462;};'use strict';var jayson=require(_0xc6ad('0x0'));var BPromise=require('bluebird');var logger=require(_0xc6ad('0x1'))(_0xc6ad('0x2'));var client=jayson[_0xc6ad('0x3')]['http']({'port':0x2329});client[_0xc6ad('0x4')]=function(_0x566302,_0x3f44b5){return new BPromise(function(_0x22295b,_0x3906c7){return client[_0xc6ad('0x5')](_0x566302,_0x3f44b5)[_0xc6ad('0x6')](function(_0x3ae751){logger['debug'](_0xc6ad('0x7'),'memberReport',_0x566302,_0x3f44b5,_0x3ae751);if(_0x3ae751[_0xc6ad('0x8')]){logger['error'](_0xc6ad('0x7'),'memberReport',_0x566302,_0x3ae751[_0xc6ad('0x8')][_0xc6ad('0x9')],_0x3f44b5);return _0x3906c7(_0x3ae751[_0xc6ad('0x8')][_0xc6ad('0x9')]);}else{return _0x22295b(_0x3ae751[_0xc6ad('0xa')]);}})[_0xc6ad('0xb')](function(_0x27316a){logger[_0xc6ad('0x8')](_0xc6ad('0x7'),_0xc6ad('0xc'),_0x566302,_0x27316a,_0x3f44b5);return _0x3906c7(_0x27316a);});});};module[_0xc6ad('0xd')]=client;
\ No newline at end of file
+var _0x3114=['exports','jayson/promise','bluebird','../../config/logger','ami','client','http','Request','request','then','debug','rpc','error','memberReport','message','result','catch'];(function(_0x5b644e,_0x2e5e07){var _0x49c6bf=function(_0x3032d9){while(--_0x3032d9){_0x5b644e['push'](_0x5b644e['shift']());}};_0x49c6bf(++_0x2e5e07);}(_0x3114,0x9a));var _0x4311=function(_0x2a17ac,_0x5f05cd){_0x2a17ac=_0x2a17ac-0x0;var _0x2ee120=_0x3114[_0x2a17ac];return _0x2ee120;};'use strict';var jayson=require(_0x4311('0x0'));var BPromise=require(_0x4311('0x1'));var logger=require(_0x4311('0x2'))(_0x4311('0x3'));var client=jayson[_0x4311('0x4')][_0x4311('0x5')]({'port':0x2329});client[_0x4311('0x6')]=function(_0x22fba3,_0x1f718d){return new BPromise(function(_0x4d398e,_0x6020dc){return client[_0x4311('0x7')](_0x22fba3,_0x1f718d)[_0x4311('0x8')](function(_0x5e25f9){logger[_0x4311('0x9')](_0x4311('0xa'),'memberReport',_0x22fba3,_0x1f718d,_0x5e25f9);if(_0x5e25f9[_0x4311('0xb')]){logger['error'](_0x4311('0xa'),_0x4311('0xc'),_0x22fba3,_0x5e25f9['error'][_0x4311('0xd')],_0x1f718d);return _0x6020dc(_0x5e25f9[_0x4311('0xb')][_0x4311('0xd')]);}else{return _0x4d398e(_0x5e25f9[_0x4311('0xe')]);}})[_0x4311('0xf')](function(_0xf1616c){logger[_0x4311('0xb')]('rpc','memberReport',_0x22fba3,_0xf1616c,_0x1f718d);return _0x6020dc(_0xf1616c);});});};module[_0x4311('0x10')]=client;
\ No newline at end of file
index 25afaf0..9ae5fcd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc7d3=['scheduledat','countbusyretry','countcongestionretry','countnoanswerretry','ContactId','ListId','UserId','VoiceQueueId','CampaignId','starttime','format','YYYY-MM-DD\x20HH:mm:ss','callback','callbackuniqueid','callbackat','recallme','originatecalleridnum','originatecalleridname','prototype','getCaller','\x22%s\x22\x20<%s>','dialCutDigit','substring','getQueue','exports','util','lodash','moment','isNil','string','voiceQueue','uniqueid','name','Contact','phone','lastName','number','queue','active','type','dialQueueTimeout'];(function(_0x2a5ff9,_0x244065){var _0x27bd29=function(_0x51cdee){while(--_0x51cdee){_0x2a5ff9['push'](_0x2a5ff9['shift']());}};_0x27bd29(++_0x244065);}(_0xc7d3,0x6b));var _0x3c7d=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xc7d3[_0x3dd15e];return _0x231fd0;};'use strict';var util=require(_0x3c7d('0x0'));var _=require(_0x3c7d('0x1'));var moment=require(_0x3c7d('0x2'));function checkNameSurname(_0x1e4616,_0x8d9cbb,_0x1b2171){var _0x43ec4c='';if(!_[_0x3c7d('0x3')](_0x8d9cbb)&&'string'===typeof _0x8d9cbb){_0x43ec4c+=_0x8d9cbb;}if(!_[_0x3c7d('0x3')](_0x1b2171)&&_0x3c7d('0x4')===typeof _0x1b2171){_0x43ec4c+='\x20'+_0x1b2171;}if(_0x43ec4c!==''){return _0x43ec4c;}return _0x1e4616;}function Action(_0x378164,_0x31fd67,_0x463418){this[_0x3c7d('0x5')]=_0x378164;this[_0x3c7d('0x6')]=_0x463418||undefined;this[_0x3c7d('0x7')]=checkNameSurname(_0x31fd67[_0x3c7d('0x8')][_0x3c7d('0x9')],_0x31fd67[_0x3c7d('0x8')]['firstName'],_0x31fd67[_0x3c7d('0x8')][_0x3c7d('0xa')]);this[_0x3c7d('0xb')]=_0x31fd67[_0x3c7d('0x8')]['phone'];this[_0x3c7d('0xc')]=_0x378164['name'];this[_0x3c7d('0xd')]=_0x31fd67[_0x3c7d('0xd')]||![];this[_0x3c7d('0xe')]=_0x378164[_0x3c7d('0xe')];this[_0x3c7d('0xf')]=_0x378164[_0x3c7d('0xf')]||0x3;this[_0x3c7d('0x10')]=_0x31fd67[_0x3c7d('0x10')];this[_0x3c7d('0x11')]=_0x31fd67[_0x3c7d('0x11')];this[_0x3c7d('0x12')]=_0x31fd67['countcongestionretry'];this[_0x3c7d('0x13')]=_0x31fd67[_0x3c7d('0x13')];this[_0x3c7d('0x14')]=_0x31fd67['ContactId'];this['ListId']=_0x31fd67[_0x3c7d('0x15')];this[_0x3c7d('0x16')]=_0x31fd67[_0x3c7d('0x16')];this[_0x3c7d('0x17')]=_0x31fd67[_0x3c7d('0x17')];this[_0x3c7d('0x18')]=_0x31fd67[_0x3c7d('0x18')];this['idHopper']=_0x31fd67['id'];this['ContactFirstName']=_0x31fd67[_0x3c7d('0x8')]['firstName']||'';this[_0x3c7d('0x19')]=moment()[_0x3c7d('0x1a')](_0x3c7d('0x1b'));this[_0x3c7d('0x1c')]=_0x31fd67[_0x3c7d('0x1c')];this[_0x3c7d('0x1d')]=_0x31fd67[_0x3c7d('0x1d')];this[_0x3c7d('0x1e')]=_0x31fd67[_0x3c7d('0x1e')];this[_0x3c7d('0x1f')]=_0x31fd67[_0x3c7d('0x1f')];this[_0x3c7d('0x20')]='';this[_0x3c7d('0x21')]='';}Action[_0x3c7d('0x22')][_0x3c7d('0x23')]=function(){return util['format'](_0x3c7d('0x24'),this[_0x3c7d('0x7')],this[_0x3c7d('0x5')][_0x3c7d('0x25')]>0x0?this[_0x3c7d('0xb')][_0x3c7d('0x26')](this[_0x3c7d('0x5')][_0x3c7d('0x25')]):this[_0x3c7d('0xb')]);};Action[_0x3c7d('0x22')][_0x3c7d('0x27')]=function(){return this['queue'];};module[_0x3c7d('0x28')]=Action;
\ No newline at end of file
+var _0xb047=['countcongestionretry','countnoanswerretry','ContactId','ListId','UserId','VoiceQueueId','CampaignId','idHopper','ContactFirstName','starttime','format','YYYY-MM-DD\x20HH:mm:ss','callback','callbackuniqueid','callbackat','recallme','originatecalleridnum','prototype','getCaller','\x22%s\x22\x20<%s>','voiceQueue','dialCutDigit','getQueue','queue','exports','util','lodash','moment','isNil','string','uniqueid','name','Contact','phone','firstName','lastName','number','active','type','dialQueueTimeout','scheduledat','countbusyretry'];(function(_0x58853f,_0x4bcab5){var _0x48ecc2=function(_0x22fb59){while(--_0x22fb59){_0x58853f['push'](_0x58853f['shift']());}};_0x48ecc2(++_0x4bcab5);}(_0xb047,0x193));var _0x7b04=function(_0x417b5d,_0x521fcb){_0x417b5d=_0x417b5d-0x0;var _0x342a0a=_0xb047[_0x417b5d];return _0x342a0a;};'use strict';var util=require(_0x7b04('0x0'));var _=require(_0x7b04('0x1'));var moment=require(_0x7b04('0x2'));function checkNameSurname(_0x37dbe8,_0x3b3e9a,_0x2a00f0){var _0x1fc701='';if(!_['isNil'](_0x3b3e9a)&&'string'===typeof _0x3b3e9a){_0x1fc701+=_0x3b3e9a;}if(!_[_0x7b04('0x3')](_0x2a00f0)&&_0x7b04('0x4')===typeof _0x2a00f0){_0x1fc701+='\x20'+_0x2a00f0;}if(_0x1fc701!==''){return _0x1fc701;}return _0x37dbe8;}function Action(_0x1a3b8e,_0x1848db,_0x32b658){this['voiceQueue']=_0x1a3b8e;this[_0x7b04('0x5')]=_0x32b658||undefined;this[_0x7b04('0x6')]=checkNameSurname(_0x1848db[_0x7b04('0x7')][_0x7b04('0x8')],_0x1848db[_0x7b04('0x7')][_0x7b04('0x9')],_0x1848db[_0x7b04('0x7')][_0x7b04('0xa')]);this[_0x7b04('0xb')]=_0x1848db[_0x7b04('0x7')][_0x7b04('0x8')];this['queue']=_0x1a3b8e['name'];this[_0x7b04('0xc')]=_0x1848db[_0x7b04('0xc')]||![];this[_0x7b04('0xd')]=_0x1a3b8e[_0x7b04('0xd')];this[_0x7b04('0xe')]=_0x1a3b8e['dialQueueTimeout']||0x3;this['scheduledat']=_0x1848db[_0x7b04('0xf')];this[_0x7b04('0x10')]=_0x1848db['countbusyretry'];this[_0x7b04('0x11')]=_0x1848db[_0x7b04('0x11')];this[_0x7b04('0x12')]=_0x1848db['countnoanswerretry'];this['ContactId']=_0x1848db[_0x7b04('0x13')];this[_0x7b04('0x14')]=_0x1848db[_0x7b04('0x14')];this['UserId']=_0x1848db[_0x7b04('0x15')];this[_0x7b04('0x16')]=_0x1848db[_0x7b04('0x16')];this[_0x7b04('0x17')]=_0x1848db[_0x7b04('0x17')];this[_0x7b04('0x18')]=_0x1848db['id'];this[_0x7b04('0x19')]=_0x1848db[_0x7b04('0x7')]['firstName']||'';this[_0x7b04('0x1a')]=moment()[_0x7b04('0x1b')](_0x7b04('0x1c'));this['callback']=_0x1848db[_0x7b04('0x1d')];this[_0x7b04('0x1e')]=_0x1848db[_0x7b04('0x1e')];this[_0x7b04('0x1f')]=_0x1848db[_0x7b04('0x1f')];this[_0x7b04('0x20')]=_0x1848db['recallme'];this[_0x7b04('0x21')]='';this['originatecalleridname']='';}Action[_0x7b04('0x22')][_0x7b04('0x23')]=function(){return util['format'](_0x7b04('0x24'),this[_0x7b04('0x6')],this[_0x7b04('0x25')][_0x7b04('0x26')]>0x0?this['number']['substring'](this[_0x7b04('0x25')][_0x7b04('0x26')]):this[_0x7b04('0xb')]);};Action[_0x7b04('0x22')][_0x7b04('0x27')]=function(){return this[_0x7b04('0x28')];};module[_0x7b04('0x29')]=Action;
\ No newline at end of file
index ee52626..3bce5bc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2842=['state','statedesc','Answer','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','uniqueid','calleridname','name','calleridnum','number','starttime','responsetime','answertime','endtime','format','holdtime','talktime','membername','reason','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','CampaignId','originatecalleridnum','originatecalleridname','util','lodash','moment','milliseconds','seconds'];(function(_0x4eb150,_0x5a2467){var _0x27b4fe=function(_0x355db9){while(--_0x355db9){_0x4eb150['push'](_0x4eb150['shift']());}};_0x27b4fe(++_0x5a2467);}(_0x2842,0x16c));var _0x2284=function(_0x1ac595,_0x5d2081){_0x1ac595=_0x1ac595-0x0;var _0x455fff=_0x2842[_0x1ac595];return _0x455fff;};'use strict';var util=require(_0x2284('0x0'));var _=require(_0x2284('0x1'));var moment=require(_0x2284('0x2'));function getSeconds(_0x43b52b,_0x490b9b){var _0x425e51=moment(_0x43b52b)['milliseconds'](0x0);var _0x5e5505=moment(_0x490b9b)[_0x2284('0x3')](0x0);return _0x425e51['diff'](_0x5e5505,_0x2284('0x4'));}function AgentComplete(_0x1dc99b,_0x19c028){this[_0x2284('0x5')]=0x4;this[_0x2284('0x6')]=_0x2284('0x7');this[_0x2284('0x8')]=_0x1dc99b[_0x2284('0x8')];this['type']=_0x1dc99b[_0x2284('0x9')];this[_0x2284('0xa')]=_0x1dc99b[_0x2284('0x9')]===_0x2284('0xb')?_0x2284('0xc'):_0x1dc99b[_0x2284('0x9')];this['countbusyretry']=_0x1dc99b[_0x2284('0xd')];this[_0x2284('0xe')]=_0x1dc99b[_0x2284('0xe')];this[_0x2284('0xf')]=_0x1dc99b[_0x2284('0xf')];this[_0x2284('0x10')]=_0x1dc99b[_0x2284('0xd')]+_0x1dc99b[_0x2284('0xe')]+_0x1dc99b[_0x2284('0xf')];this[_0x2284('0x11')]=_0x19c028[_0x2284('0x11')];this[_0x2284('0x12')]=_0x1dc99b[_0x2284('0x13')];this[_0x2284('0x14')]=_0x1dc99b[_0x2284('0x15')];this[_0x2284('0x16')]=_0x1dc99b[_0x2284('0x16')];this[_0x2284('0x17')]=_0x1dc99b[_0x2284('0x17')];this[_0x2284('0x18')]=_0x1dc99b[_0x2284('0x18')];this[_0x2284('0x19')]=moment()[_0x2284('0x1a')]('YYYY-MM-DD\x20HH:mm:ss');this['ringtime']=getSeconds(_0x1dc99b[_0x2284('0x17')],_0x1dc99b[_0x2284('0x16')]);this[_0x2284('0x1b')]=getSeconds(_0x1dc99b[_0x2284('0x18')],_0x1dc99b[_0x2284('0x17')]);this[_0x2284('0x1c')]=getSeconds(this['endtime'],_0x1dc99b[_0x2284('0x18')]);this[_0x2284('0xc')]=_0x19c028['queue'];this[_0x2284('0x1d')]=_0x19c028[_0x2284('0x1d')];this[_0x2284('0x1e')]=_0x19c028[_0x2284('0x1e')];this[_0x2284('0x1f')]=_0x1dc99b[_0x2284('0x1f')];this[_0x2284('0x20')]=_0x1dc99b[_0x2284('0x20')];this[_0x2284('0x21')]=_0x1dc99b['callbackat'];this[_0x2284('0x22')]=_0x1dc99b[_0x2284('0x22')];this['ContactId']=_0x1dc99b[_0x2284('0x23')];this[_0x2284('0x24')]=_0x1dc99b[_0x2284('0x24')];this[_0x2284('0x25')]=_0x1dc99b[_0x2284('0x25')];this['VoiceQueueId']=_0x1dc99b['VoiceQueueId'];this['CampaignId']=_0x1dc99b[_0x2284('0x26')];this['originatecalleridnum']=_0x1dc99b[_0x2284('0x27')]||'';this[_0x2284('0x28')]=_0x1dc99b['originatecalleridname']||'';}module['exports']=AgentComplete;
\ No newline at end of file
+var _0xc632=['type','campaigntype','outbound','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','uniqueid','calleridname','name','calleridnum','number','starttime','responsetime','answertime','endtime','YYYY-MM-DD\x20HH:mm:ss','talktime','queue','membername','reason','callback','callbackuniqueid','callbackat','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','util','moment','milliseconds','diff','seconds','state','statedesc','scheduledat'];(function(_0x5a3cf0,_0x160a68){var _0x5a64ee=function(_0x34cd1d){while(--_0x34cd1d){_0x5a3cf0['push'](_0x5a3cf0['shift']());}};_0x5a64ee(++_0x160a68);}(_0xc632,0x70));var _0x2c63=function(_0xef4a66,_0x10d457){_0xef4a66=_0xef4a66-0x0;var _0x1acfa5=_0xc632[_0xef4a66];return _0x1acfa5;};'use strict';var util=require(_0x2c63('0x0'));var _=require('lodash');var moment=require(_0x2c63('0x1'));function getSeconds(_0x1809e7,_0x37a8d7){var _0x334904=moment(_0x1809e7)[_0x2c63('0x2')](0x0);var _0x5625e3=moment(_0x37a8d7)['milliseconds'](0x0);return _0x334904[_0x2c63('0x3')](_0x5625e3,_0x2c63('0x4'));}function AgentComplete(_0x82a5ad,_0x5e908e){this[_0x2c63('0x5')]=0x4;this[_0x2c63('0x6')]='Answer';this[_0x2c63('0x7')]=_0x82a5ad['scheduledat'];this[_0x2c63('0x8')]=_0x82a5ad[_0x2c63('0x8')];this[_0x2c63('0x9')]=_0x82a5ad['type']===_0x2c63('0xa')?'queue':_0x82a5ad[_0x2c63('0x8')];this[_0x2c63('0xb')]=_0x82a5ad[_0x2c63('0xb')];this['countcongestionretry']=_0x82a5ad[_0x2c63('0xc')];this[_0x2c63('0xd')]=_0x82a5ad['countnoanswerretry'];this[_0x2c63('0xe')]=_0x82a5ad[_0x2c63('0xb')]+_0x82a5ad[_0x2c63('0xc')]+_0x82a5ad['countnoanswerretry'];this[_0x2c63('0xf')]=_0x5e908e[_0x2c63('0xf')];this[_0x2c63('0x10')]=_0x82a5ad[_0x2c63('0x11')];this[_0x2c63('0x12')]=_0x82a5ad[_0x2c63('0x13')];this['starttime']=_0x82a5ad[_0x2c63('0x14')];this[_0x2c63('0x15')]=_0x82a5ad[_0x2c63('0x15')];this[_0x2c63('0x16')]=_0x82a5ad['answertime'];this[_0x2c63('0x17')]=moment()['format'](_0x2c63('0x18'));this['ringtime']=getSeconds(_0x82a5ad[_0x2c63('0x15')],_0x82a5ad[_0x2c63('0x14')]);this['holdtime']=getSeconds(_0x82a5ad[_0x2c63('0x16')],_0x82a5ad[_0x2c63('0x15')]);this[_0x2c63('0x19')]=getSeconds(this[_0x2c63('0x17')],_0x82a5ad['answertime']);this['queue']=_0x5e908e[_0x2c63('0x1a')];this[_0x2c63('0x1b')]=_0x5e908e[_0x2c63('0x1b')];this['reason']=_0x5e908e[_0x2c63('0x1c')];this[_0x2c63('0x1d')]=_0x82a5ad['callback'];this['callbackuniqueid']=_0x82a5ad[_0x2c63('0x1e')];this[_0x2c63('0x1f')]=_0x82a5ad[_0x2c63('0x1f')];this['recallme']=_0x82a5ad['recallme'];this[_0x2c63('0x20')]=_0x82a5ad[_0x2c63('0x20')];this[_0x2c63('0x21')]=_0x82a5ad[_0x2c63('0x21')];this[_0x2c63('0x22')]=_0x82a5ad[_0x2c63('0x22')];this[_0x2c63('0x23')]=_0x82a5ad[_0x2c63('0x23')];this[_0x2c63('0x24')]=_0x82a5ad[_0x2c63('0x24')];this['originatecalleridnum']=_0x82a5ad[_0x2c63('0x25')]||'';this[_0x2c63('0x26')]=_0x82a5ad[_0x2c63('0x26')]||'';}module[_0x2c63('0x27')]=AgentComplete;
\ No newline at end of file
index 4f23080..69c4cc4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe558=['responsetime','endtime','ringtime','holdtime','talktime','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','originatecalleridnum','originatecalleridname','exports','util','lodash','moment','milliseconds','seconds','uniqueid','scheduledat','type','campaigntype','outbound','countbusyretry','countnoanswerretry','countglobal','calleridname','calleridnum','starttime'];(function(_0x20d54d,_0x1adc8e){var _0x516e8b=function(_0x2754e1){while(--_0x2754e1){_0x20d54d['push'](_0x20d54d['shift']());}};_0x516e8b(++_0x1adc8e);}(_0xe558,0x70));var _0x8e55=function(_0x20d834,_0x230d10){_0x20d834=_0x20d834-0x0;var _0x32c6d5=_0xe558[_0x20d834];return _0x32c6d5;};'use strict';var util=require(_0x8e55('0x0'));var _=require(_0x8e55('0x1'));var moment=require(_0x8e55('0x2'));function getSeconds(_0x1888b9,_0x9f3acc){var _0x19ab5a=moment(_0x1888b9)[_0x8e55('0x3')](0x0);var _0x3a5285=moment(_0x9f3acc)[_0x8e55('0x3')](0x0);return _0x19ab5a['diff'](_0x3a5285,_0x8e55('0x4'));}function Final(_0x127fb4){this[_0x8e55('0x5')]=_0x127fb4[_0x8e55('0x5')];this[_0x8e55('0x6')]=_0x127fb4[_0x8e55('0x6')];this['type']=_0x127fb4[_0x8e55('0x7')];this[_0x8e55('0x8')]=_0x127fb4['type']===_0x8e55('0x9')?'queue':_0x127fb4['type'];this[_0x8e55('0xa')]=_0x127fb4['countbusyretry'];this['countcongestionretry']=_0x127fb4['countcongestionretry'];this[_0x8e55('0xb')]=_0x127fb4[_0x8e55('0xb')];this[_0x8e55('0xc')]=_0x127fb4[_0x8e55('0xa')]+_0x127fb4['countcongestionretry']+_0x127fb4[_0x8e55('0xb')];this['queue']=_0x127fb4['queue'];this['calleridname']=_0x127fb4[_0x8e55('0xd')];this['calleridnum']=_0x127fb4[_0x8e55('0xe')];this[_0x8e55('0xf')]=_0x127fb4[_0x8e55('0xf')];this[_0x8e55('0x10')]=_0x127fb4[_0x8e55('0x10')];this[_0x8e55('0x11')]=_0x127fb4[_0x8e55('0x10')];this[_0x8e55('0x12')]=_0x127fb4[_0x8e55('0x12')]||0x0;this[_0x8e55('0x13')]=_0x127fb4[_0x8e55('0x13')]||0x0;this[_0x8e55('0x14')]=_0x127fb4[_0x8e55('0x14')]||0x0;this[_0x8e55('0x15')]=_0x127fb4[_0x8e55('0x15')];this['callbackuniqueid']=_0x127fb4[_0x8e55('0x16')];this[_0x8e55('0x17')]=_0x127fb4[_0x8e55('0x17')];this[_0x8e55('0x18')]=_0x127fb4['recallme'];this[_0x8e55('0x19')]=_0x127fb4[_0x8e55('0x19')];this[_0x8e55('0x1a')]=_0x127fb4[_0x8e55('0x1a')];this[_0x8e55('0x1b')]=_0x127fb4[_0x8e55('0x1b')];this[_0x8e55('0x1c')]=_0x127fb4[_0x8e55('0x1c')];this['CampaignId']=_0x127fb4['CampaignId'];this[_0x8e55('0x1d')]=_0x127fb4[_0x8e55('0x1d')]||'';this[_0x8e55('0x1e')]=_0x127fb4['originatecalleridname']||'';}module[_0x8e55('0x1f')]=Final;
\ No newline at end of file
+var _0xa613=['callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','util','moment','milliseconds','diff','seconds','uniqueid','scheduledat','type','campaigntype','outbound','countbusyretry','countnoanswerretry','countcongestionretry','queue','calleridname','calleridnum','starttime','responsetime','ringtime','holdtime','talktime','callback'];(function(_0x2c9bc4,_0x512035){var _0x2be3eb=function(_0x4ec929){while(--_0x4ec929){_0x2c9bc4['push'](_0x2c9bc4['shift']());}};_0x2be3eb(++_0x512035);}(_0xa613,0x8a));var _0x3a61=function(_0x3f9602,_0x115411){_0x3f9602=_0x3f9602-0x0;var _0xb22e48=_0xa613[_0x3f9602];return _0xb22e48;};'use strict';var util=require(_0x3a61('0x0'));var _=require('lodash');var moment=require(_0x3a61('0x1'));function getSeconds(_0x30d505,_0x30656d){var _0xd12059=moment(_0x30d505)[_0x3a61('0x2')](0x0);var _0x322b07=moment(_0x30656d)[_0x3a61('0x2')](0x0);return _0xd12059[_0x3a61('0x3')](_0x322b07,_0x3a61('0x4'));}function Final(_0x4208bf){this['uniqueid']=_0x4208bf[_0x3a61('0x5')];this[_0x3a61('0x6')]=_0x4208bf['scheduledat'];this[_0x3a61('0x7')]=_0x4208bf[_0x3a61('0x7')];this[_0x3a61('0x8')]=_0x4208bf[_0x3a61('0x7')]===_0x3a61('0x9')?'queue':_0x4208bf[_0x3a61('0x7')];this[_0x3a61('0xa')]=_0x4208bf['countbusyretry'];this['countcongestionretry']=_0x4208bf['countcongestionretry'];this[_0x3a61('0xb')]=_0x4208bf[_0x3a61('0xb')];this['countglobal']=_0x4208bf[_0x3a61('0xa')]+_0x4208bf[_0x3a61('0xc')]+_0x4208bf[_0x3a61('0xb')];this[_0x3a61('0xd')]=_0x4208bf[_0x3a61('0xd')];this[_0x3a61('0xe')]=_0x4208bf['calleridname'];this['calleridnum']=_0x4208bf[_0x3a61('0xf')];this[_0x3a61('0x10')]=_0x4208bf[_0x3a61('0x10')];this[_0x3a61('0x11')]=_0x4208bf[_0x3a61('0x11')];this['endtime']=_0x4208bf['responsetime'];this[_0x3a61('0x12')]=_0x4208bf['ringtime']||0x0;this[_0x3a61('0x13')]=_0x4208bf['holdtime']||0x0;this[_0x3a61('0x14')]=_0x4208bf[_0x3a61('0x14')]||0x0;this['callback']=_0x4208bf[_0x3a61('0x15')];this['callbackuniqueid']=_0x4208bf[_0x3a61('0x16')];this['callbackat']=_0x4208bf[_0x3a61('0x17')];this['recallme']=_0x4208bf[_0x3a61('0x18')];this[_0x3a61('0x19')]=_0x4208bf[_0x3a61('0x19')];this[_0x3a61('0x1a')]=_0x4208bf[_0x3a61('0x1a')];this[_0x3a61('0x1b')]=_0x4208bf[_0x3a61('0x1b')];this[_0x3a61('0x1c')]=_0x4208bf[_0x3a61('0x1c')];this[_0x3a61('0x1d')]=_0x4208bf[_0x3a61('0x1d')];this[_0x3a61('0x1e')]=_0x4208bf[_0x3a61('0x1e')]||'';this[_0x3a61('0x1f')]=_0x4208bf[_0x3a61('0x1f')]||'';}module['exports']=Final;
\ No newline at end of file
index cf5315a..02b7920 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['state','statedesc','Answer','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','uniqueid','calleridname','number','starttime','responsetime','endtime','format','YYYY-MM-DD\x20HH:mm:ss','holdtime','talktime','reason','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','exports','util','lodash','moment','milliseconds','seconds'];(function(_0x4b4127,_0x40cfa2){var _0x50512f=function(_0x6b4b00){while(--_0x6b4b00){_0x4b4127['push'](_0x4b4127['shift']());}};_0x50512f(++_0x40cfa2);}(_0x9957,0x93));var _0x7995=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0x9957[_0x3947c9];return _0x2e7871;};'use strict';var util=require(_0x7995('0x0'));var _=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));function getSeconds(_0x10a05d,_0x5b96eb){var _0x86c128=moment(_0x10a05d)[_0x7995('0x3')](0x0);var _0x1902b4=moment(_0x5b96eb)[_0x7995('0x3')](0x0);return _0x86c128['diff'](_0x1902b4,_0x7995('0x4'));}function Hangup(_0x1a36d8,_0x137b6b){this[_0x7995('0x5')]=0x4;this[_0x7995('0x6')]=_0x7995('0x7');this['scheduledat']=_0x1a36d8[_0x7995('0x8')];this[_0x7995('0x9')]=_0x1a36d8['type'];this[_0x7995('0xa')]=_0x1a36d8[_0x7995('0x9')]===_0x7995('0xb')?_0x7995('0xc'):_0x1a36d8[_0x7995('0x9')];this[_0x7995('0xd')]=_0x1a36d8[_0x7995('0xd')];this['countcongestionretry']=_0x1a36d8[_0x7995('0xe')];this[_0x7995('0xf')]=_0x1a36d8['countnoanswerretry'];this[_0x7995('0x10')]=_0x1a36d8[_0x7995('0xd')]+_0x1a36d8[_0x7995('0xe')]+_0x1a36d8[_0x7995('0xf')];this[_0x7995('0x11')]=_0x137b6b[_0x7995('0x11')];this[_0x7995('0x12')]=_0x1a36d8['name'];this['calleridnum']=_0x1a36d8[_0x7995('0x13')];this[_0x7995('0x14')]=_0x1a36d8[_0x7995('0x14')];this[_0x7995('0x15')]=_0x1a36d8[_0x7995('0x15')];this[_0x7995('0x16')]=moment()[_0x7995('0x17')](_0x7995('0x18'));this['ringtime']=getSeconds(_0x1a36d8[_0x7995('0x15')],_0x1a36d8['starttime']);this[_0x7995('0x19')]=0x0;this[_0x7995('0x1a')]=getSeconds(this[_0x7995('0x16')],_0x1a36d8[_0x7995('0x15')]);this[_0x7995('0xc')]=_0x1a36d8[_0x7995('0xc')];this['membername']='IVR';this[_0x7995('0x1b')]=_0x137b6b['cause-txt'];this['callback']=_0x1a36d8[_0x7995('0x1c')];this[_0x7995('0x1d')]=_0x1a36d8['callbackuniqueid'];this[_0x7995('0x1e')]=_0x1a36d8['callbackat'];this['recallme']=_0x1a36d8[_0x7995('0x1f')];this[_0x7995('0x20')]=_0x1a36d8[_0x7995('0x20')];this[_0x7995('0x21')]=_0x1a36d8[_0x7995('0x21')];this[_0x7995('0x22')]=_0x1a36d8['UserId'];this[_0x7995('0x23')]=_0x1a36d8[_0x7995('0x23')];this[_0x7995('0x24')]=_0x1a36d8[_0x7995('0x24')];}module[_0x7995('0x25')]=Hangup;
\ No newline at end of file
+var _0x9957=['state','statedesc','Answer','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','uniqueid','calleridname','number','starttime','responsetime','endtime','format','YYYY-MM-DD\x20HH:mm:ss','holdtime','talktime','reason','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','exports','util','lodash','moment','milliseconds','seconds'];(function(_0x3c049f,_0xe80cbc){var _0x263d1a=function(_0x1e02ac){while(--_0x1e02ac){_0x3c049f['push'](_0x3c049f['shift']());}};_0x263d1a(++_0xe80cbc);}(_0x9957,0x93));var _0x7995=function(_0x6c993a,_0x5ea3ab){_0x6c993a=_0x6c993a-0x0;var _0x27f547=_0x9957[_0x6c993a];return _0x27f547;};'use strict';var util=require(_0x7995('0x0'));var _=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));function getSeconds(_0x10a05d,_0x5b96eb){var _0x86c128=moment(_0x10a05d)[_0x7995('0x3')](0x0);var _0x1902b4=moment(_0x5b96eb)[_0x7995('0x3')](0x0);return _0x86c128['diff'](_0x1902b4,_0x7995('0x4'));}function Hangup(_0x1a36d8,_0x137b6b){this[_0x7995('0x5')]=0x4;this[_0x7995('0x6')]=_0x7995('0x7');this['scheduledat']=_0x1a36d8[_0x7995('0x8')];this[_0x7995('0x9')]=_0x1a36d8['type'];this[_0x7995('0xa')]=_0x1a36d8[_0x7995('0x9')]===_0x7995('0xb')?_0x7995('0xc'):_0x1a36d8[_0x7995('0x9')];this[_0x7995('0xd')]=_0x1a36d8[_0x7995('0xd')];this['countcongestionretry']=_0x1a36d8[_0x7995('0xe')];this[_0x7995('0xf')]=_0x1a36d8['countnoanswerretry'];this[_0x7995('0x10')]=_0x1a36d8[_0x7995('0xd')]+_0x1a36d8[_0x7995('0xe')]+_0x1a36d8[_0x7995('0xf')];this[_0x7995('0x11')]=_0x137b6b[_0x7995('0x11')];this[_0x7995('0x12')]=_0x1a36d8['name'];this['calleridnum']=_0x1a36d8[_0x7995('0x13')];this[_0x7995('0x14')]=_0x1a36d8[_0x7995('0x14')];this[_0x7995('0x15')]=_0x1a36d8[_0x7995('0x15')];this[_0x7995('0x16')]=moment()[_0x7995('0x17')](_0x7995('0x18'));this['ringtime']=getSeconds(_0x1a36d8[_0x7995('0x15')],_0x1a36d8['starttime']);this[_0x7995('0x19')]=0x0;this[_0x7995('0x1a')]=getSeconds(this[_0x7995('0x16')],_0x1a36d8[_0x7995('0x15')]);this[_0x7995('0xc')]=_0x1a36d8[_0x7995('0xc')];this['membername']='IVR';this[_0x7995('0x1b')]=_0x137b6b['cause-txt'];this['callback']=_0x1a36d8[_0x7995('0x1c')];this[_0x7995('0x1d')]=_0x1a36d8['callbackuniqueid'];this[_0x7995('0x1e')]=_0x1a36d8['callbackat'];this['recallme']=_0x1a36d8[_0x7995('0x1f')];this[_0x7995('0x20')]=_0x1a36d8[_0x7995('0x20')];this[_0x7995('0x21')]=_0x1a36d8[_0x7995('0x21')];this[_0x7995('0x22')]=_0x1a36d8['UserId'];this[_0x7995('0x23')]=_0x1a36d8[_0x7995('0x23')];this[_0x7995('0x24')]=_0x1a36d8[_0x7995('0x24')];}module[_0x7995('0x25')]=Hangup;
\ No newline at end of file
index cd0269a..d4d8dd4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0a29=['responsetime','holdtime','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridname','util','lodash','milliseconds','seconds','uniqueid','scheduledat','type','campaigntype','outbound','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','calleridname','name','calleridnum','starttime'];(function(_0xd4310e,_0x3a7b02){var _0x35e53d=function(_0x176491){while(--_0x176491){_0xd4310e['push'](_0xd4310e['shift']());}};_0x35e53d(++_0x3a7b02);}(_0x0a29,0x12e));var _0x90a2=function(_0x2d1008,_0x10a499){_0x2d1008=_0x2d1008-0x0;var _0x480947=_0x0a29[_0x2d1008];return _0x480947;};'use strict';var util=require(_0x90a2('0x0'));var _=require(_0x90a2('0x1'));var moment=require('moment');function getSeconds(_0x54d874,_0x5ab3ba){var _0x3b561d=moment(_0x54d874)[_0x90a2('0x2')](0x0);var _0x103928=moment(_0x5ab3ba)[_0x90a2('0x2')](0x0);return _0x3b561d['diff'](_0x103928,_0x90a2('0x3'));}function History(_0x18c1e5){this[_0x90a2('0x4')]=_0x18c1e5[_0x90a2('0x4')];this[_0x90a2('0x5')]=_0x18c1e5[_0x90a2('0x5')]||undefined;this['type']=_0x18c1e5[_0x90a2('0x6')];this[_0x90a2('0x7')]=_0x18c1e5[_0x90a2('0x6')]===_0x90a2('0x8')?'queue':_0x18c1e5[_0x90a2('0x6')];this['countbusyretry']=_0x18c1e5[_0x90a2('0x9')];this['countcongestionretry']=_0x18c1e5[_0x90a2('0xa')];this['countnoanswerretry']=_0x18c1e5[_0x90a2('0xb')];this[_0x90a2('0xc')]=_0x18c1e5[_0x90a2('0x9')]+_0x18c1e5[_0x90a2('0xa')]+_0x18c1e5[_0x90a2('0xb')];this['queue']=_0x18c1e5['queue'];this[_0x90a2('0xd')]=_0x18c1e5[_0x90a2('0xe')];this[_0x90a2('0xf')]=_0x18c1e5['number'];this[_0x90a2('0x10')]=_0x18c1e5[_0x90a2('0x10')];this[_0x90a2('0x11')]=_0x18c1e5[_0x90a2('0x11')];this['endtime']=_0x18c1e5[_0x90a2('0x11')];this['ringtime']=getSeconds(_0x18c1e5[_0x90a2('0x11')],_0x18c1e5[_0x90a2('0x10')]);this[_0x90a2('0x12')]=0x0;this['talktime']=0x0;this[_0x90a2('0x13')]=_0x18c1e5[_0x90a2('0x13')];this[_0x90a2('0x14')]=_0x18c1e5[_0x90a2('0x14')];this[_0x90a2('0x15')]=_0x18c1e5[_0x90a2('0x15')];this[_0x90a2('0x16')]=_0x18c1e5['recallme'];this[_0x90a2('0x17')]=_0x18c1e5[_0x90a2('0x17')];this[_0x90a2('0x18')]=_0x18c1e5[_0x90a2('0x18')];this['UserId']=_0x18c1e5[_0x90a2('0x19')];this[_0x90a2('0x1a')]=_0x18c1e5['VoiceQueueId'];this['CampaignId']=_0x18c1e5[_0x90a2('0x1b')];this['originatecalleridnum']=_0x18c1e5['originatecalleridnum']||'';this['originatecalleridname']=_0x18c1e5[_0x90a2('0x1c')]||'';}module['exports']=History;
\ No newline at end of file
+var _0xc142=['callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','util','lodash','milliseconds','diff','seconds','uniqueid','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','name','calleridnum','number','starttime','responsetime','endtime','ringtime','talktime','callback','callbackuniqueid'];(function(_0x2541d9,_0x51654c){var _0x564f58=function(_0x63374){while(--_0x63374){_0x2541d9['push'](_0x2541d9['shift']());}};_0x564f58(++_0x51654c);}(_0xc142,0x1ae));var _0x2c14=function(_0x102b0c,_0x33dee4){_0x102b0c=_0x102b0c-0x0;var _0x9b15ca=_0xc142[_0x102b0c];return _0x9b15ca;};'use strict';var util=require(_0x2c14('0x0'));var _=require(_0x2c14('0x1'));var moment=require('moment');function getSeconds(_0x2ab733,_0x310ddf){var _0x447d93=moment(_0x2ab733)[_0x2c14('0x2')](0x0);var _0x201509=moment(_0x310ddf)['milliseconds'](0x0);return _0x447d93[_0x2c14('0x3')](_0x201509,_0x2c14('0x4'));}function History(_0x3a9f96){this['uniqueid']=_0x3a9f96[_0x2c14('0x5')];this[_0x2c14('0x6')]=_0x3a9f96[_0x2c14('0x6')]||undefined;this[_0x2c14('0x7')]=_0x3a9f96[_0x2c14('0x7')];this[_0x2c14('0x8')]=_0x3a9f96['type']===_0x2c14('0x9')?_0x2c14('0xa'):_0x3a9f96[_0x2c14('0x7')];this[_0x2c14('0xb')]=_0x3a9f96[_0x2c14('0xb')];this[_0x2c14('0xc')]=_0x3a9f96[_0x2c14('0xc')];this[_0x2c14('0xd')]=_0x3a9f96[_0x2c14('0xd')];this[_0x2c14('0xe')]=_0x3a9f96[_0x2c14('0xb')]+_0x3a9f96[_0x2c14('0xc')]+_0x3a9f96[_0x2c14('0xd')];this['queue']=_0x3a9f96[_0x2c14('0xa')];this['calleridname']=_0x3a9f96[_0x2c14('0xf')];this[_0x2c14('0x10')]=_0x3a9f96[_0x2c14('0x11')];this[_0x2c14('0x12')]=_0x3a9f96[_0x2c14('0x12')];this['responsetime']=_0x3a9f96[_0x2c14('0x13')];this[_0x2c14('0x14')]=_0x3a9f96[_0x2c14('0x13')];this[_0x2c14('0x15')]=getSeconds(_0x3a9f96['responsetime'],_0x3a9f96[_0x2c14('0x12')]);this['holdtime']=0x0;this[_0x2c14('0x16')]=0x0;this[_0x2c14('0x17')]=_0x3a9f96[_0x2c14('0x17')];this[_0x2c14('0x18')]=_0x3a9f96['callbackuniqueid'];this[_0x2c14('0x19')]=_0x3a9f96[_0x2c14('0x19')];this[_0x2c14('0x1a')]=_0x3a9f96[_0x2c14('0x1a')];this[_0x2c14('0x1b')]=_0x3a9f96[_0x2c14('0x1b')];this[_0x2c14('0x1c')]=_0x3a9f96['ListId'];this['UserId']=_0x3a9f96[_0x2c14('0x1d')];this['VoiceQueueId']=_0x3a9f96[_0x2c14('0x1e')];this['CampaignId']=_0x3a9f96[_0x2c14('0x1f')];this[_0x2c14('0x20')]=_0x3a9f96[_0x2c14('0x20')]||'';this['originatecalleridname']=_0x3a9f96[_0x2c14('0x21')]||'';}module[_0x2c14('0x22')]=History;
\ No newline at end of file
index 4dc6daf..cebe875 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5860=['HangupInAMD','membername','AMD','[syncHangupInAMD]','value','MACHINE','Machine','[syncMachine][createHistory]','[syncHangupInAMDIvr][createHistory]','[syncHangupInAMDIvr]','amd','[syncMachineIvr][createHistory]','[syncMachineIvr]','ivrAnswerCallsDay','[syncHangupIvr]','dialQueueProject','[syncHangupIvr][createHistory]','cause-txt','Unknow','reason','agent','dialQueueProject2','YYYY-MM-DD\x20HH:mm:ss','[syncAgentComplete]','answertime','[syncAgentComplete][createHistory]','[syncQueueCallerAbandon]\x20[Drop]','droptime','responsetime','dialQueueTimeout','outboundDropCallsDayTimeout','Drop','dropreason','agiafterat','Abandoned','CALLEREXIT','queueCallerAbandonCreateState','actionid','roundrobin','locked','stateinterface','push','queueStatusComplete','syncQueueStatusComplete','[Catch][Preview][syncQueueStatusComplete]','queueBookedRR','_rr','length','paused','unlockRR','[booked][RR]','Agent:\x20','contactAgent-idHopper:\x20','run','idHopper','[booked][RR][finaly]','[booked][unlock]','ListId','[unlock][syncQueueStatusComplete]','[booked][unlock2]','[booked][unlock3]','[unlock3][syncQueueStatusComplete]','syncCampaigns','checkIsTrunkReachable','TrunkBackup','checkIfTime','ifTime','checkIfTimeIntervals','\x20Intervals\x20is\x20null\x20','\x20Intervals\x20is\x20empty\x20','timezones','TIMEZONE_UNKNOW','Failure','\x20Timezone\x20unknow\x20','isArray','Action','content','indexOf','true','iftime\x20%s,%s','GLOBAL_INTERVAL_IS_OVERTIME','INTERVAL_IS_OVERTIME','[ifTime][promiseAll]','Global:\x20','Timezone:\x20','checkDialMethod','progressive','handlePower','Queue','launchHandleIvr','handleIvr','dialTimezone','dialGlobalInterval','\x5cw{0,','pow','replace','random','match','actionOriginate','object','originate','voiceQueue\x20is\x20undefine','phone','Contact','getCaller','NONE','\x22agi://%s/square,%s\x22','\x22%s,%s%s,,,%s\x22','dialQueueOptions','dialAgiAfterHangupAgent','xcally-motion-dialer','XMD-AMDINITIALSILENCE','dialAMDInitialSilence','XMD-AMDGREETING','dialAMDGreeting','XMD-AMDAFTERGREETINGSILENCE','dialAMDAfterGreetingSilence','XMD-AMDTOTALANALYSISTIME','dialAMDTotalAnalysisTime','XMD-AMDMINWORDLENGTH','dialAMDMinWordLength','XMD-AMDBETWEENWORDSSILENCE','dialAMDBetweenWordsSilence','XMD-AMDMAXIMUMNUMBEROFWORDS','dialAMDMaximumNumberOfWords','XMD-AMDSILENCETHRESHOLD','XMD-VOICEQUEUEID','tags','createdAt','updatedAt','%s%s','XMD-','toUpper','dialRandomLastDigitCallerIdNumber','dialOriginateCallerIdNumber','XMD-ORIGINATECALLERIDNAME','originatecalleridname','XMD-ORIGINATECALLERIDNUM','originatecalleridnum','SIP/%s/%s%s','dialCutDigit','substring','trim','dialOriginateTimeout','[originateError]:\x20%s','endtime','[originate][error]','Error','getQueue','[callProgressDetecting]\x20','countbusyretry','countcongestionretry','countnoanswerretry','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','minutes','[rescheduleContact][NoAnswer]','dialBusyMaxRetry','dialBusyRetryFrequency','[rescheduleContact]\x20[Busy]','dialCongestionMaxRetry','add','dialCongestionRetryFrequency','[rescheduleContact]\x20[Congestion]','[callProgressDetecting]','evt\x20is\x20undefine','dialGlobalMaxRetry','reason\x200\x20no\x20such\x20number....','createStateFinal','NoAnswer','countglobal','checkRetriveMax','reason\x203\x20ringing\x20no\x20answer','[syncAgentComplete][createHistory][5]','stateGlobal','reason\x205\x20busy','outboundCongestionCallsDay','[syncAgentComplete][createHistory][8]','reason\x208\x20congestion','Global','[moveContactManagedDialer][0]','contact\x20not\x20moved','round','predictiveIntervalMaxThreshold','predictiveIntervalMinThreshold','floor','check\x20predictive\x20is\x20not\x20undefine','[startMethodPredictive][StartProgressive]','check\x20handlePredictive\x20is\x20not\x20undefine','collection\x20data\x20in\x20progressive\x20at','dialPredictiveInterval','[startMethodPredictive][StartProgressive][Loop]','dialPredictiveOptimization','[stopMethodPredictive][ReStartProgressive][ExceededDropDay]','dropRate','[stopMethodPredictive][ReStartProgressive][ExceededDropInterval]','Max\x20Drop\x20','Drop\x20in\x20this\x20interval','started\x20in\x20predictive\x20at','startMethodPredictive','Predictive\x20after\x20first\x20interval','recalculate\x20predictive\x20at','switch\x20in\x20progressive\x20because\x20available\x20agents\x20(',')\x20are\x20more\x20than\x20threshold\x20(','dialPredictiveOptimizationPercentage','busyFactor','[getDataPredictive]','Unknown\x20Predictive','check\x20failure','abandonmentRate','outboundQueuePauses','[CatchErlangB]','one\x20call\x20every:','checkContactBlack','recallme','queueStatusComplete:\x20','Queue:\x20','queuestatus','[unlockOriginate][syncQueueStatusComplete]','[booked][checkContactBlack][else]','dialRecallInQueue','RECALLINQUEUE','RecallInQueue','[Originate][HistoryDialRecallInQueue][historyCatch]','RECALLFAILEDTIMEOUT','RecallFailedTimeout','[Originate][HistoryRecallClose][historyCatch]','BLACKLIST','Blacklist','[Originate][historyBlacklist]','[Originate][MoveBlacklist]','inBlackList','limitCalls','temp','dialOrderByScheduledAt','[getContactCampaign2][Empty]','RUNNING','ivrTotalCallsDays','[actionOriginate]\x20','Contact.phone','[actionOriginateIvr]\x20','dialLimitQueue','not_inuse','[getContactDialer2]','tryOriginatePredictive','[handlePredictive][limitChannel]','emptyContact','[actionOriginatePredictive]\x20','[getContactDialerPredictive]','M:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','Interval:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','Ts:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','P:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','Amax:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','m\x20=\x20','Ts\x20=\x20','[abandonmentRate]','p\x20=\x20','interval\x20=\x20','Amax\x20=\x20','----\x20Agent\x20Busy\x20Factor\x20----','Umin:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','[busyFactor]','Umin\x20=\x20','exports','uuid','moment','md5','ioredis','../../../config/environment/','../../../config/logger','dialer','booked','predictive','predictiveCalls','redis','defaults','socket.io-emitter','../rpc/cmHopperFinal','../rpc/cmHopperHistory','../rpc/cmHopperBlack','../rpc/voiceQueueRt','./action','./history','./final','./agentComplete','./queueCallerAbandon','env','XCALLY_IP_AGI','127.0.0.1','rrmemory','prototype','enqueue','tail','finally','preview','voiceQueues','campaigns','agents','trunks','maxNumberOriginate','actions','uniqueId','optionPredictive','startProgressive','ivrOriginated','queueBooked','agentconnect','syncAgentConnect','bind','queuecallerabandon','syncQueueCallerAbandon','originateresponse','syncOriginateResponse','syncAgentComplete','custom:queuesummary','syncQueueSummary','hangup','syncHangup','newexten','syncNewExten','varset','syncVarSet','queuemember','syncQueueMember','loopClearZombieChannels','isUndefined','AGENTS_NOT_LOGGED','name','\x20AGENTS\x20NOT\x20LOGGED','message','NOT_ACTIVE','Interval','Intervals','\x20INTERVAL_IS_NULL','isEmpty','INTERVAL_IS_NULL','[ifTime][Action]','stringify','milliseconds','diff','seconds','emit','type','outbound','strategy','answered','available','loggedIn','pTalking','sumBillable','talking','total','abandoned','waiting','loggedInDb','dialActive','dialMethod','dialOriginateCallerIdName','dialPrefix','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','predictiveIntervalAvailable','predictiveIntervalTotalCalls','originated','erlangCalls','erlangCallToSecond','erlangBusyFactor','startPredictive','Trunk','active','callerid','format','voice:queue:%s','voice_queue:save','campaign:ivr:%s','campaign:save','info','-----\x20Stats\x20Predictive\x20---','Total\x20Calls:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','Answered\x20Calls:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','Dropped\x20Timeout:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','AVG\x20Talk\x20Time:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','---------------------------','Avg\x20Talk\x20Time\x20is\x20not\x20enough\x20for\x20predictive','Total\x20Calls\x20are\x20not\x20enough\x20for\x20predictive','History\x20information\x20are\x20empty','---------\x20ErlangB\x20---------','Scheduled\x20Calls:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','One\x20call\x20every:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','Drop\x20Rate:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','erlangAbandonmentRate','Agent\x20Busy\x20Factor:\x20\x20\x20\x20\x20\x20\x20\x20\x20','clearing\x20variable\x20start\x20progressive','handlePredictive','clearing\x20variable\x20handle\x20predictive','string','\x22%s\x22\x20<%s>','\x22\x22\x20<>','inspect','error','stack','[decremetOriginate]\x20object\x20originated\x20is\x20negative','[decremetOriginate]\x20is\x20null\x20or\x20undefined','contactsRescheduled','[getContactDialer2][ReScheduled]','AVAILABLE_CONTACTS_FINISHED','sendMessageOneNotActive','[syncQueueSummary]\x20Campaign\x20Queue:\x20','is\x20not\x20active','IS_DISACTIVED','statedesc','starttime','clearZombieChannels','[uniqueid]','sequence','isNil','status','channel','catch','No\x20such\x20channel','updateOriginated','queue','[Dialer][checkChannel][ivr]','resolve','countReScheduled','[countReScheduled]\x20','then','checkIsBlackList','[checkIsBlackList]\x20','checkIsBlackListIvr','[checkIsBlackListIvr]\x20','averageHandleTime','avgHandleTime','[averageHandleTime]\x20','rescheduleContact','[rescheduleContact]\x20','getContactDialer','[getContactDialer]\x20','getContactDialerIvr','getVoiceQueueRtPauses','moveContactManagedDialer','[moveContactManagedDialer]\x20','createHistory','[createHistory]\x20','hasOwnProperty','[updateOriginated]\x20is\x20null\x20or\x20undefined','loggerHandler','notFound','merge','pick','ContactId','UserId','VoiceQueueId','CampaignId','[emptyContact][createHistory]','[emptyContact]','isSuccess','isTrunkReachable','SIP/%s','reachable','saveInDb','uniqueid','variable','exten','ivr','dialAMDActive','HANGUP','state'];(function(_0x166742,_0x55520c){var _0xb7814a=function(_0x18feaf){while(--_0x18feaf){_0x166742['push'](_0x166742['shift']());}};_0xb7814a(++_0x55520c);}(_0x5860,0x109));var _0x0586=function(_0x3ab9ee,_0x4a74b8){_0x3ab9ee=_0x3ab9ee-0x0;var _0x82ee88=_0x5860[_0x3ab9ee];return _0x82ee88;};'use strict';var util=require('util');var _=require('lodash');var BPromise=require('bluebird');var uuid=require(_0x0586('0x0'));var moment=require(_0x0586('0x1'));var rr=require('rr');var md5=require(_0x0586('0x2'));var Redis=require(_0x0586('0x3'));var config=require(_0x0586('0x4'));var logger=require(_0x0586('0x5'))(_0x0586('0x6'));var loggerBooked=require('../../../config/logger')(_0x0586('0x7'));var loggerPredictive=require(_0x0586('0x5'))(_0x0586('0x8'));var loggerPredictiveCalls=require(_0x0586('0x5'))(_0x0586('0x9'));var loggerSyncQueueSummary=require('../../../config/logger')('syncQueueSummary');var ami=require('../ami');config[_0x0586('0xa')]=_[_0x0586('0xb')](config[_0x0586('0xa')],{'host':'localhost','port':0x18eb});var io=require(_0x0586('0xc'))(new Redis(config[_0x0586('0xa')]));var cmHopper=require('../rpc/cmHopper');var cmHopperFinal=require(_0x0586('0xd'));var cmHopperHistory=require(_0x0586('0xe'));var cmHopperBlack=require(_0x0586('0xf'));var voiceQueueRt=require(_0x0586('0x10'));var Action=require(_0x0586('0x11'));var History=require(_0x0586('0x12'));var Final=require(_0x0586('0x13'));var AgentComplete=require(_0x0586('0x14'));var QueueCallerAbandon=require(_0x0586('0x15'));var Hangup=require('./hangup');var ipAgi=process[_0x0586('0x16')][_0x0586('0x17')]||_0x0586('0x18');var strategy={'rrmemory':_0x0586('0x19'),'roundrobin':'roundrobin'};var Sequence=function(){};Sequence[_0x0586('0x1a')][_0x0586('0x1b')]=function(_0x27caa4){this['tail']=this['tail']?this[_0x0586('0x1c')][_0x0586('0x1d')](_0x27caa4):_0x27caa4();};function Dialer(_0x28b0e7,_0x84e269){this['sequence']=new Sequence();this[_0x0586('0x1e')]=_0x84e269;this[_0x0586('0x1f')]=_0x28b0e7[_0x0586('0x1f')];this[_0x0586('0x20')]=_0x28b0e7[_0x0586('0x20')];this[_0x0586('0x21')]=_0x28b0e7[_0x0586('0x21')];this[_0x0586('0x22')]=_0x28b0e7[_0x0586('0x22')];this[_0x0586('0x23')]=config[_0x0586('0x23')]||0x2;this['channels']={};this[_0x0586('0x24')]={};this['contactsId']={};this[_0x0586('0x25')]={};this[_0x0586('0x26')]={};this['startPredictive']={};this[_0x0586('0x27')]={};this[_0x0586('0x28')]={};this[_0x0586('0x29')]={};this['queueBookedRR']={};ami['on'](_0x0586('0x2a'),this[_0x0586('0x2b')][_0x0586('0x2c')](this));ami['on'](_0x0586('0x2d'),this[_0x0586('0x2e')]['bind'](this));ami['on'](_0x0586('0x2f'),this[_0x0586('0x30')][_0x0586('0x2c')](this));ami['on']('agentcomplete',this[_0x0586('0x31')][_0x0586('0x2c')](this));ami['on'](_0x0586('0x32'),this[_0x0586('0x33')]['bind'](this));ami['on'](_0x0586('0x34'),this[_0x0586('0x35')][_0x0586('0x2c')](this));ami['on'](_0x0586('0x36'),this[_0x0586('0x37')]['bind'](this));ami['on'](_0x0586('0x38'),this[_0x0586('0x39')][_0x0586('0x2c')](this));ami['on'](_0x0586('0x3a'),this[_0x0586('0x3b')][_0x0586('0x2c')](this));ami['on']('queuestatuscomplete',this['syncQueueStatusComplete']['bind'](this));this['loopCampaigns']();this[_0x0586('0x3c')]();}function isNotNull(_0x37bfb2){return _0x37bfb2!==null&&!_[_0x0586('0x3d')](_0x37bfb2);}function checkIsLoggedIn(_0x2d536e,_0x142cb0){return function(){if(_0x142cb0<=0x0){_0x2d536e['message']=_0x0586('0x3e');throw _0x2d536e[_0x0586('0x3f')]+_0x0586('0x40');}};}function isActive(_0xd2d1b1){return _0xd2d1b1;}function checkIsActive(_0x3be23a,_0x1336ff){return function(){if(!isActive(_0x1336ff)){_0x3be23a[_0x0586('0x41')]=_0x0586('0x42');throw _0x3be23a[_0x0586('0x3f')]+'\x20NOT\x20Active';}};}function checkInterval(_0x200c2e){return function(){if(!isNotNull(_0x200c2e[_0x0586('0x43')])){_0x200c2e['message']='INTERVAL_IS_NULL';throw _0x200c2e[_0x0586('0x3f')]+'\x20INTERVAL_IS_NULL';}if(!isNotNull(_0x200c2e[_0x0586('0x43')][_0x0586('0x44')])){_0x200c2e['message']='INTERVAL_IS_NULL';throw _0x200c2e['name']+_0x0586('0x45');}if(!isNotNull(_[_0x0586('0x46')](_0x200c2e['Interval']['Intervals']))){_0x200c2e[_0x0586('0x41')]=_0x0586('0x47');throw _0x200c2e[_0x0586('0x3f')]+_0x0586('0x45');}};}function msgResponse(_0x3afcab,_0x3ce889,_0x4085b7){return{'action':_0x3afcab,'response':_0x3ce889,'message':_0x4085b7,'stack':_0x4085b7};}function myreject(_0x273040){return function(_0x27d52d){return _0x273040(msgResponse(_0x0586('0x48'),'Error',JSON[_0x0586('0x49')](_0x27d52d)));};}function getSeconds(_0x2502c5,_0x5d86e9){var _0x5a2217=moment(_0x2502c5)['milliseconds'](0x0);var _0x47b20a=moment(_0x5d86e9)[_0x0586('0x4a')](0x0);return _0x5a2217[_0x0586('0x4b')](_0x47b20a,_0x0586('0x4c'));}function emit(_0x110940,_0x1c7e53,_0x50c12c){io['to'](_0x110940)[_0x0586('0x4d')](_0x1c7e53,_0x50c12c);}function emitVoiceQueueSummary(_0x4f9f5e){if(_0x4f9f5e[_0x0586('0x4e')]===_0x0586('0x4f')){var _0x230e6e={'id':_0x4f9f5e['id'],'name':_0x4f9f5e['name'],'strategy':_0x4f9f5e[_0x0586('0x50')],'answered':_0x4f9f5e[_0x0586('0x51')],'available':_0x4f9f5e[_0x0586('0x52')],'loggedIn':_0x4f9f5e[_0x0586('0x53')],'pTalking':_0x4f9f5e[_0x0586('0x54')],'sumBillable':_0x4f9f5e[_0x0586('0x55')],'sumDuration':_0x4f9f5e['sumDuration'],'sumHoldTime':_0x4f9f5e['sumHoldTime']||0x0,'talking':_0x4f9f5e[_0x0586('0x56')],'total':_0x4f9f5e[_0x0586('0x57')],'type':_0x4f9f5e[_0x0586('0x4e')],'unmanaged':_0x4f9f5e['unmanaged'],'abandoned':_0x4f9f5e[_0x0586('0x58')],'waiting':_0x4f9f5e[_0x0586('0x59')],'loggedInDb':_0x4f9f5e[_0x0586('0x5a')],'dialActive':_0x4f9f5e[_0x0586('0x5b')],'dialMethod':_0x4f9f5e[_0x0586('0x5c')],'dialOriginateCallerIdName':_0x4f9f5e[_0x0586('0x5d')],'dialOriginateCallerIdNumber':_0x4f9f5e['dialOriginateCallerIdNumber'],'dialOriginateTimeout':_0x4f9f5e['dialOriginateTimeout'],'dialPrefix':_0x4f9f5e[_0x0586('0x5e')],'outboundAnswerAgiCallsDay':_0x4f9f5e[_0x0586('0x5f')],'outboundAnswerCallsDay':_0x4f9f5e[_0x0586('0x60')],'outboundBlacklistCallsDay':_0x4f9f5e[_0x0586('0x61')],'outboundBusyCallsDay':_0x4f9f5e[_0x0586('0x62')],'outboundCongestionCallsDay':_0x4f9f5e['outboundCongestionCallsDay'],'outboundDropCallsDayACS':_0x4f9f5e[_0x0586('0x63')],'outboundDropCallsDayCallersExit':_0x4f9f5e[_0x0586('0x64')],'outboundDropCallsDayTimeout':_0x4f9f5e['outboundDropCallsDayTimeout'],'outboundNoAnswerCallsDay':_0x4f9f5e[_0x0586('0x65')],'outboundNoSuchCallsDay':_0x4f9f5e[_0x0586('0x66')],'outboundOriginateFailureCallsDay':_0x4f9f5e[_0x0586('0x67')],'outboundReCallsDay':_0x4f9f5e[_0x0586('0x68')],'outboundRejectCallsDay':_0x4f9f5e[_0x0586('0x69')],'outboundUnknownCallsDay':_0x4f9f5e[_0x0586('0x6a')],'predictiveIntervalAnsweredCalls':_0x4f9f5e[_0x0586('0x6b')],'predictiveIntervalAvgHoldtime':_0x4f9f5e[_0x0586('0x6c')],'predictiveIntervalAvgTalktime':_0x4f9f5e[_0x0586('0x6d')],'predictiveIntervalDroppedCallsCallersExit':_0x4f9f5e[_0x0586('0x6e')],'predictiveIntervalDroppedCallsTimeout':_0x4f9f5e[_0x0586('0x6f')],'predictiveIntervalErlangCalls':_0x4f9f5e[_0x0586('0x70')],'predictiveIntervalErlangCallsDroppedCalls':_0x4f9f5e[_0x0586('0x71')],'predictiveIntervalHitRate':_0x4f9f5e[_0x0586('0x72')],'predictiveIntervalMultiplicativeFactor':_0x4f9f5e[_0x0586('0x73')],'predictiveIntervalPauses':_0x4f9f5e[_0x0586('0x74')],'predictiveIntervalAvailable':_0x4f9f5e[_0x0586('0x75')],'predictiveIntervalTotalCalls':_0x4f9f5e[_0x0586('0x76')],'message':_0x4f9f5e[_0x0586('0x41')],'originated':_0x4f9f5e[_0x0586('0x77')],'erlangCalls':_0x4f9f5e[_0x0586('0x78')],'erlangCallToSecond':_0x4f9f5e[_0x0586('0x79')],'erlangAbandonmentRate':_0x4f9f5e['erlangAbandonmentRate'],'erlangBusyFactor':_0x4f9f5e[_0x0586('0x7a')],'startPredictive':_0x4f9f5e[_0x0586('0x7b')],'startProgressive':_0x4f9f5e[_0x0586('0x27')]};if(_0x4f9f5e['Trunk']){_0x230e6e[_0x0586('0x7c')]={'id':_0x4f9f5e[_0x0586('0x7c')]['id'],'name':_0x4f9f5e[_0x0586('0x7c')][_0x0586('0x3f')],'active':_0x4f9f5e[_0x0586('0x7c')][_0x0586('0x7d')],'callerid':_0x4f9f5e['Trunk'][_0x0586('0x7e')]};}if(_0x4f9f5e[_0x0586('0x43')]){_0x230e6e[_0x0586('0x43')]={'id':_0x4f9f5e[_0x0586('0x43')]['id'],'name':_0x4f9f5e[_0x0586('0x43')][_0x0586('0x3f')]};}var _0x34b027=md5(JSON[_0x0586('0x49')](_0x230e6e));if(_0x4f9f5e[_0x0586('0x2')]!==_0x34b027){_0x4f9f5e[_0x0586('0x2')]=_0x34b027;emit(util[_0x0586('0x7f')](_0x0586('0x80'),_0x230e6e[_0x0586('0x3f')]),_0x0586('0x81'),_0x230e6e);}}}function emitCampaignSummary(_0x3731a6){if(_0x3731a6[_0x0586('0x4e')]==='ivr'){emit(util[_0x0586('0x7f')](_0x0586('0x82'),_0x3731a6[_0x0586('0x3f')]),_0x0586('0x83'),_0x3731a6);}}function checkGetDataPredictive(_0x3ec03c){if(isNotNull(_0x3ec03c)){if(!_['isEmpty'](_0x3ec03c)){loggerPredictive[_0x0586('0x84')](_0x0586('0x85'));loggerPredictive['info'](_0x0586('0x86'),_0x3ec03c[_0x0586('0x76')]);loggerPredictive['info'](_0x0586('0x87'),_0x3ec03c[_0x0586('0x6b')]);loggerPredictive[_0x0586('0x84')](_0x0586('0x88'),_0x3ec03c[_0x0586('0x6f')]);loggerPredictive['info']('Dropped\x20Exit:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x3ec03c[_0x0586('0x6e')]);loggerPredictive['info']('AVG\x20Hold\x20Time:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x3ec03c[_0x0586('0x6c')]);loggerPredictive[_0x0586('0x84')](_0x0586('0x89'),_0x3ec03c[_0x0586('0x6d')]);loggerPredictive[_0x0586('0x84')](_0x0586('0x8a'));if(_0x3ec03c['predictiveIntervalTotalCalls']>0x0){if(!_[_0x0586('0x3d')](_0x3ec03c[_0x0586('0x6d')])&&_0x3ec03c['predictiveIntervalAvgTalktime']>0x0){return!![];}else{loggerPredictive[_0x0586('0x84')](_0x0586('0x8b'));}if(!_[_0x0586('0x3d')](_0x3ec03c[_0x0586('0x6c')])&&_0x3ec03c[_0x0586('0x6c')]>0x0){return!![];}else{loggerPredictive['info']('Avg\x20Hold\x20Time\x20is\x20not\x20enough\x20for\x20predictive');}}else{loggerPredictive['info'](_0x0586('0x8c'));}}else{loggerPredictive[_0x0586('0x84')]('History\x20information\x20are\x20empty');}}else{loggerPredictive['info'](_0x0586('0x8d'));}return![];}function mergeDataErlangB(_0x2d8fd9){return function(_0x118ddc){loggerPredictive[_0x0586('0x84')](_0x0586('0x8e'));loggerPredictive[_0x0586('0x84')](_0x0586('0x8f'),_0x118ddc[_0x0586('0x78')]);loggerPredictive[_0x0586('0x84')](_0x0586('0x90'),_0x118ddc[_0x0586('0x79')]);loggerPredictive[_0x0586('0x84')](_0x0586('0x91'),_0x118ddc[_0x0586('0x92')]);loggerPredictive[_0x0586('0x84')](_0x0586('0x93'),_0x118ddc[_0x0586('0x7a')]);loggerPredictive[_0x0586('0x84')]('Drop\x20Rate:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x118ddc['erlangAbandonmentRate']);loggerPredictive['info'](_0x0586('0x8a'));_['merge'](_0x2d8fd9,_0x118ddc);};}function getDiff(_0x144e15){var _0x535cdd=moment()[_0x0586('0x4a')](0x0);var _0x236b72=moment(_0x144e15)[_0x0586('0x4a')](0x0);return _0x535cdd['diff'](_0x236b72,_0x0586('0x4c'));}function ifInterval(_0x2571d7,_0x48f471){if(_[_0x0586('0x3d')](_0x48f471)){return![];}if(getDiff(_0x48f471)<_0x2571d7*0x3c){return!![];}else{return![];}}function freeVariablesPredictive(_0x51b51e){if(isNotNull(_0x51b51e)){if(!_[_0x0586('0x3d')](_0x51b51e[_0x0586('0x27')])){_0x51b51e['startProgressive']=undefined;loggerPredictive['info'](_0x51b51e[_0x0586('0x3f')],_0x0586('0x94'));}if(!_['isUndefined'](_0x51b51e['startPredictive'])){_0x51b51e[_0x0586('0x7b')]=undefined;loggerPredictive[_0x0586('0x84')](_0x51b51e[_0x0586('0x3f')],'clearing\x20variable\x20start\x20predictive');}if(!_[_0x0586('0x3d')](_0x51b51e[_0x0586('0x95')])){clearInterval(_0x51b51e[_0x0586('0x95')]);_0x51b51e[_0x0586('0x95')]=undefined;loggerPredictive[_0x0586('0x84')](_0x51b51e[_0x0586('0x3f')],_0x0586('0x96'));}}}function erlangb(_0x1ee7fd,_0x1ea569){if(_0x1ea569===0x0){return 0x0;}var _0x1a0c04=0x1;for(var _0x19837e=0x1;_0x19837e<=_0x1ea569;_0x19837e+=0x1){_0x1a0c04=0x1+_0x1a0c04*_0x19837e/_0x1ee7fd;}return 0x1/_0x1a0c04;}function isVoiceQueueOutbound(_0x5cf7ea){return _0x5cf7ea===_0x0586('0x4f');}function isNotPreview(_0x171aaf){return _0x171aaf!==_0x0586('0x1e');}function isCampaignIvr(_0xc55899){return _0xc55899==='ivr';}function getCallerId(_0x585866,_0x3a7f9e,_0x170f6a){if(!_[_0x0586('0x3d')](_0x170f6a)&&_0x0586('0x97')===typeof _0x170f6a&&!_[_0x0586('0x46')](_0x170f6a)){if(!_[_0x0586('0x3d')](_0x3a7f9e)&&_0x0586('0x97')===typeof _0x3a7f9e&&!_[_0x0586('0x46')](_0x3a7f9e)){return util[_0x0586('0x7f')](_0x0586('0x98'),_0x3a7f9e,_0x170f6a);}return util['format'](_0x0586('0x98'),_0x170f6a,_0x170f6a);}if(!_[_0x0586('0x3d')](_0x585866)&&_0x0586('0x97')===typeof _0x585866&&!_[_0x0586('0x46')](_0x585866)){return _0x585866;}return _0x0586('0x99');}function loggerCatchQueueSummary(_0x2b9052,_0x47a3cf){return function(_0x1f50bc){freeVariablesPredictive(_0x47a3cf);emitVoiceQueueSummary(_0x47a3cf);emitCampaignSummary(_0x47a3cf);loggerSyncQueueSummary['error'](_0x2b9052,util[_0x0586('0x9a')](_0x1f50bc,{'showHidden':![],'depth':null}));};}function loggerCatchPredictive(_0x582d0e,_0x3d5e86){return function(_0x13d81f){loggerPredictive[_0x0586('0x9b')](_0x3d5e86['name'],_0x582d0e);loggerPredictive[_0x0586('0x9b')](_0x13d81f[_0x0586('0x9c')]);freeVariablesPredictive(_0x3d5e86);};}function loggerCatch(_0x171c8a){return function(_0x3a64d2){logger['error'](_0x171c8a,util[_0x0586('0x9a')](_0x3a64d2,{'showHidden':![],'depth':null}));};}function checkContactEmpty(_0x211a6e){return _0x211a6e&&!_['isUndefined'](_0x211a6e)&&_0x211a6e['length']>0x0;}function decremetOriginate(_0x52200b){if(!_[_0x0586('0x3d')](_0x52200b)&&_0x52200b!==null){if(_0x52200b['hasOwnProperty'](_0x0586('0x77'))){if(_0x52200b[_0x0586('0x77')]>0x0){_0x52200b[_0x0586('0x77')]-=0x1;}else{logger[_0x0586('0x9b')](_0x0586('0x9d'));}}}else{logger[_0x0586('0x9b')](_0x0586('0x9e'));}}function checkContactLowerLimitOriginate(_0x13eaf7,_0x37a24e,_0x15cd38){if(_0x37a24e>_0x15cd38){for(var _0x5c9432=0x0;_0x5c9432<_0x37a24e-_0x15cd38;_0x5c9432+=0x1){decremetOriginate(_0x13eaf7);}}}function loggerGetContactDialer(_0x2f6030,_0x268c1f,_0x4b2849){return function(_0x1b3ebe){checkContactLowerLimitOriginate(_0x268c1f,_0x4b2849,0x0);logger[_0x0586('0x9b')](_0x2f6030,util[_0x0586('0x9a')](_0x1b3ebe,{'showHidden':![],'depth':null}));};}function sendMessageReschedule(_0x227235){return function(_0x4c8282){if(isNotNull(_0x4c8282)&&isNotNull(_0x4c8282[0x0])){if(_0x4c8282[0x0][_0x0586('0x9f')]>0x0){_0x227235['message']='RESCHEDULED_CONTACTS';logger[_0x0586('0x84')](_0x0586('0xa0')+_0x227235['name'],_0x4c8282[0x0][_0x0586('0x9f')],'contacts');}else{_0x227235[_0x0586('0x41')]=_0x0586('0xa1');logger[_0x0586('0x84')]('[getContactDialer2][Empty]'+_0x227235[_0x0586('0x3f')]);}}};}function notSendMessagesQueue(_0x43ae11){if(_0x43ae11[_0x0586('0xa2')]){freeVariablesPredictive(_0x43ae11);if(_0x43ae11['originated']===0x0&&_0x43ae11[_0x0586('0x56')]===0x0&&_0x43ae11[_0x0586('0x59')]===0x0&&(_0x43ae11[_0x0586('0x54')]||0x0)===0x0){_0x43ae11['sendMessageOneNotActive']=![];_0x43ae11['available']=0x0;_0x43ae11[_0x0586('0x41')]='NOT_ACTIVE';loggerSyncQueueSummary[_0x0586('0x9b')](_0x0586('0xa3'),_0x43ae11[_0x0586('0x3f')],_0x0586('0xa4'));}else{_0x43ae11[_0x0586('0x41')]=_0x0586('0xa5');loggerSyncQueueSummary['error'](_0x0586('0xa3'),_0x43ae11[_0x0586('0x3f')],'is\x20disactive');}emitVoiceQueueSummary(_0x43ae11);}}function notSendMessagesCampaign(_0x4acdea){if(_0x4acdea[_0x0586('0xa2')]){if(_0x4acdea[_0x0586('0x77')]===0x0){_0x4acdea[_0x0586('0xa2')]=![];_0x4acdea[_0x0586('0x41')]=_0x0586('0x42');loggerSyncQueueSummary[_0x0586('0x9b')]('[syncQueueSummary]\x20Campaign\x20Ivr:\x20',_0x4acdea[_0x0586('0x3f')],_0x0586('0xa4'));}else{_0x4acdea['message']=_0x0586('0xa5');loggerSyncQueueSummary[_0x0586('0x9b')]('[syncQueueSummary]\x20Campaign\x20Ivr:\x20',_0x4acdea['name'],'is\x20disactive');}emitCampaignSummary(_0x4acdea);}}function createObjHistory(_0x17061a,_0x248d79,_0x136423,_0x3d87c4,_0x3554ea){_0x17061a[_0x0586('0x41')]=_0x136423;var _0x15ab6=new Action(_0x17061a,_0x248d79);var _0x250f11=new History(_0x15ab6);_0x250f11['state']=_0x3d87c4;_0x250f11[_0x0586('0xa6')]=_0x3554ea;_0x250f11['endtime']=_0x15ab6[_0x0586('0xa7')];return _0x250f11;}Dialer[_0x0586('0x1a')]['loopClearZombieChannels']=function(){var _0x284695=this;setInterval(function(){_0x284695[_0x0586('0xa8')](_0x284695['uniqueId'],_0x0586('0xa9'));_0x284695[_0x0586('0xa8')](_0x284695['actions'],'[actions]');},0x32c8);};Dialer[_0x0586('0x1a')][_0x0586('0xa8')]=function(_0x470463,_0x3760c3){var _0x14d649=this;for(var _0x2ec3d5 in _0x470463){if(_0x470463['hasOwnProperty'](_0x2ec3d5)){this[_0x0586('0xaa')][_0x0586('0x1b')](function(){if(!_[_0x0586('0xab')](_0x470463[_0x2ec3d5])){return ami['Action']({'action':_0x0586('0xac'),'channel':_0x470463[_0x2ec3d5][_0x0586('0xad')]})[_0x0586('0xae')](function(_0x3d4290){if(_0x3d4290['message']===_0x0586('0xaf')){setTimeout(function(){if(_0x470463[_0x2ec3d5]&&_0x470463[_0x2ec3d5][_0x0586('0x4e')]!=='ivr'){_0x14d649[_0x0586('0xb0')](_0x14d649[_0x0586('0x1f')][_0x470463[_0x2ec3d5][_0x0586('0xb1')]]);logger[_0x0586('0x9b')]('[Dialer][checkChannel]',_0x3760c3,_0x2ec3d5,_0x470463[_0x2ec3d5][_0x0586('0xb1')]);delete _0x470463[_0x2ec3d5];}if(_0x470463[_0x2ec3d5]&&_0x470463[_0x2ec3d5][_0x0586('0x4e')]==='ivr'){_0x14d649[_0x0586('0xb0')](_0x14d649[_0x0586('0x20')][_0x470463[_0x2ec3d5][_0x0586('0xb1')]]);logger[_0x0586('0x9b')](_0x0586('0xb2'),_0x3760c3,_0x2ec3d5,_0x470463[_0x2ec3d5][_0x0586('0xb1')]);delete _0x470463[_0x2ec3d5];}},0x2328);}});}});}}};Dialer[_0x0586('0x1a')]['countReScheduled']=function(_0x523a43){return BPromise[_0x0586('0xb3')]()['then'](cmHopper[_0x0586('0xb4')](_0x523a43))['catch'](loggerCatch(_0x0586('0xb5')));};Dialer[_0x0586('0x1a')]['checkIsBlackList']=function(_0xf1c86e){return BPromise['resolve']()[_0x0586('0xb6')](cmHopperBlack[_0x0586('0xb7')](_0xf1c86e))[_0x0586('0xae')](loggerCatch(_0x0586('0xb8')));};Dialer[_0x0586('0x1a')][_0x0586('0xb9')]=function(_0x48cc11){return BPromise['resolve']()[_0x0586('0xb6')](cmHopperBlack[_0x0586('0xb9')](_0x48cc11))['catch'](loggerCatch(_0x0586('0xba')));};Dialer[_0x0586('0x1a')][_0x0586('0xbb')]=function(_0x2b77c0){return BPromise['resolve']()['then'](cmHopperHistory[_0x0586('0xbc')](_0x2b77c0))['catch'](loggerCatch(_0x0586('0xbd')));};Dialer['prototype'][_0x0586('0xbe')]=function(_0x49b0f8){return BPromise[_0x0586('0xb3')]()['then'](cmHopper[_0x0586('0xbe')](_0x49b0f8))[_0x0586('0xae')](loggerCatch(_0x0586('0xbf')));};Dialer[_0x0586('0x1a')][_0x0586('0xc0')]=function(_0x16717a,_0x38a931,_0x2d6ac3,_0x5c1ed2){return BPromise[_0x0586('0xb3')]()['then'](cmHopper[_0x0586('0xc0')](_0x16717a,_0x38a931,_0x2d6ac3,_0x5c1ed2))['catch'](loggerCatch(_0x0586('0xc1')));};Dialer[_0x0586('0x1a')][_0x0586('0xc2')]=function(_0x5b1750,_0x6776b0,_0x38c7f6){return BPromise[_0x0586('0xb3')]()[_0x0586('0xb6')](cmHopper['getContactDialerIvr'](_0x5b1750,_0x6776b0,_0x38c7f6))[_0x0586('0xae')](loggerCatch(_0x0586('0xc1')));};Dialer['prototype']['getVoiceQueueRtPauses']=function(_0x247368){return BPromise[_0x0586('0xb3')]()[_0x0586('0xb6')](voiceQueueRt[_0x0586('0xc3')](_0x247368))[_0x0586('0xae')](loggerCatch('[getVoiceQueueRtPauses]\x20'));};Dialer[_0x0586('0x1a')][_0x0586('0xc4')]=function(_0x249e8f){return BPromise[_0x0586('0xb3')]()['then'](cmHopper[_0x0586('0xc4')](_0x249e8f))['catch'](loggerCatch(_0x0586('0xc5')));};Dialer[_0x0586('0x1a')]['createHistory']=function(_0x20cb87){return BPromise[_0x0586('0xb3')]()[_0x0586('0xb6')](cmHopperHistory[_0x0586('0xc6')](_0x20cb87))[_0x0586('0xae')](loggerCatch(_0x0586('0xc7')));};Dialer['prototype'][_0x0586('0xb0')]=function(_0x41e318){if(!_[_0x0586('0x3d')](_0x41e318)&&_0x41e318!==null){if(_0x41e318[_0x0586('0xc8')](_0x0586('0x77'))){if(_0x41e318['originated']>0x0){_0x41e318[_0x0586('0x77')]-=0x1;}else{logger['error']('[updateOriginated]\x20object\x20originated\x20is\x20negative');}}}else{logger[_0x0586('0x9b')](_0x0586('0xc9'));}};Dialer[_0x0586('0x1a')][_0x0586('0xca')]=function(_0x178d0b,_0xdf9d28){var _0x5a96d8=this;return function(_0x42a863){_0x5a96d8[_0x0586('0xb0')](_0xdf9d28);logger[_0x0586('0x9b')](_0x178d0b,util[_0x0586('0x9a')](_0x42a863,{'showHidden':![],'depth':null}));};};Dialer[_0x0586('0x1a')]['emptyContact']=function(_0x2591a0,_0x54dc09,_0x2e1bbc){var _0x5a0c90={'state':0x19,'statedesc':_0x0586('0xcb')};this['updateOriginated'](_0x54dc09);this['saveInDb'](_[_0x0586('0xcc')](_0x5a0c90,_[_0x0586('0xcd')](_0x2e1bbc,[_0x0586('0xce'),'ListId',_0x0586('0xcf'),_0x0586('0xd0'),_0x0586('0xd1')])),_0x0586('0xd2'),_0x0586('0xd3'));logger[_0x0586('0x9b')](_0x2591a0);};Dialer[_0x0586('0x1a')][_0x0586('0xd4')]=function(_0x17f1b0){return _0x17f1b0==='Success';};Dialer['prototype'][_0x0586('0xd5')]=function(_0x4de5eb){return!_[_0x0586('0x3d')](_0x4de5eb)&&_0x4de5eb&&!_[_0x0586('0x3d')](_0x4de5eb[_0x0586('0x3f')])&&!_[_0x0586('0x3d')](_0x4de5eb[_0x0586('0x7d')])&&_0x4de5eb[_0x0586('0x7d')]&&(this[_0x0586('0x22')][util['format'](_0x0586('0xd6'),_0x4de5eb['name'])][_0x0586('0xac')]===_0x0586('0xd7')||this['trunks'][util[_0x0586('0x7f')](_0x0586('0xd6'),_0x4de5eb['name'])][_0x0586('0xac')]==='unmonitored');};Dialer[_0x0586('0x1a')][_0x0586('0xd8')]=function(_0x541073,_0x52180c,_0x224eb1){this[_0x0586('0xc6')](_0x541073)[_0x0586('0xae')](loggerCatch(_0x52180c));this[_0x0586('0xc4')](_0x541073)['catch'](loggerCatch(_0x224eb1));};Dialer[_0x0586('0x1a')][_0x0586('0x39')]=function(_0x3fef9e){var _0xc3e9e9=this[_0x0586('0x25')][_0x3fef9e[_0x0586('0xd9')]];var _0x11bf7a;if(!_[_0x0586('0xab')](_0x3fef9e)&&!_[_0x0586('0xab')](_0x3fef9e[_0x0586('0xda')])&&!_['isNil'](_0x3fef9e[_0x0586('0xda')]['amdstatus'])&&_0x3fef9e[_0x0586('0xdb')]==='xcally-motion-dialer'&&_0xc3e9e9){if(_0xc3e9e9[_0x0586('0x4e')]!==_0x0586('0xdc')&&this[_0x0586('0x1f')][_0xc3e9e9['queue']][_0x0586('0xdd')]&&_0x3fef9e['value']===_0x0586('0xde')){delete this[_0x0586('0x25')][_0x3fef9e[_0x0586('0xd9')]];this[_0x0586('0xb0')](this[_0x0586('0x1f')][_0xc3e9e9[_0x0586('0xb1')]]);this[_0x0586('0x1f')][_0xc3e9e9[_0x0586('0xb1')]][_0x0586('0x60')]+=0x1;this[_0x0586('0x1f')][_0xc3e9e9[_0x0586('0xb1')]]['outboundAnswerAgiCallsDay']+=0x1;_0x11bf7a=new Hangup(_0xc3e9e9,_0x3fef9e);_0x11bf7a[_0x0586('0xdf')]=0x12;_0x11bf7a[_0x0586('0xa6')]=_0x0586('0xe0');_0x11bf7a[_0x0586('0xe1')]=_0x0586('0xe2');this[_0x0586('0xd8')](_0x11bf7a,'[syncHangupInAMD][createHistory]',_0x0586('0xe3'));}if(_0xc3e9e9[_0x0586('0x4e')]!==_0x0586('0xdc')&&this[_0x0586('0x1f')][_0xc3e9e9['queue']][_0x0586('0xdd')]&&_0x3fef9e[_0x0586('0xe4')]===_0x0586('0xe5')){delete this[_0x0586('0x25')][_0x3fef9e[_0x0586('0xd9')]];this[_0x0586('0xb0')](this[_0x0586('0x1f')][_0xc3e9e9[_0x0586('0xb1')]]);this[_0x0586('0x1f')][_0xc3e9e9['queue']][_0x0586('0x60')]+=0x1;this[_0x0586('0x1f')][_0xc3e9e9[_0x0586('0xb1')]][_0x0586('0x5f')]+=0x1;_0x11bf7a=new Hangup(_0xc3e9e9,_0x3fef9e);_0x11bf7a[_0x0586('0xdf')]=0x13;_0x11bf7a[_0x0586('0xa6')]=_0x0586('0xe6');_0x11bf7a[_0x0586('0xe1')]=_0x0586('0xe2');_0x11bf7a['amd']=!![];this['saveInDb'](_0x11bf7a,_0x0586('0xe7'),'[syncMachine]');}if(_0xc3e9e9[_0x0586('0x4e')]===_0x0586('0xdc')&&this[_0x0586('0x20')][_0xc3e9e9[_0x0586('0xb1')]]['dialAMDActive']&&_0x3fef9e[_0x0586('0xe4')]===_0x0586('0xde')){delete this[_0x0586('0x25')][_0x3fef9e['uniqueid']];this[_0x0586('0xb0')](this[_0x0586('0x20')][_0xc3e9e9[_0x0586('0xb1')]]);_0x11bf7a=new Hangup(_0xc3e9e9,_0x3fef9e);_0x11bf7a['state']=0x12;_0x11bf7a[_0x0586('0xa6')]='HangupInAMD';_0x11bf7a[_0x0586('0xe1')]=_0x0586('0xe2');this[_0x0586('0xd8')](_0x11bf7a,_0x0586('0xe8'),_0x0586('0xe9'));}if(_0xc3e9e9[_0x0586('0x4e')]===_0x0586('0xdc')&&this[_0x0586('0x20')][_0xc3e9e9[_0x0586('0xb1')]][_0x0586('0xdd')]&&_0x3fef9e[_0x0586('0xe4')]===_0x0586('0xe5')){delete this[_0x0586('0x25')][_0x3fef9e[_0x0586('0xd9')]];this[_0x0586('0xb0')](this['campaigns'][_0xc3e9e9[_0x0586('0xb1')]]);_0x11bf7a=new Hangup(_0xc3e9e9,_0x3fef9e);_0x11bf7a[_0x0586('0xdf')]=0x13;_0x11bf7a['statedesc']=_0x0586('0xe6');_0x11bf7a[_0x0586('0xe1')]=_0x0586('0xe2');_0x11bf7a[_0x0586('0xea')]=!![];this[_0x0586('0xd8')](_0x11bf7a,_0x0586('0xeb'),_0x0586('0xec'));}}};Dialer[_0x0586('0x1a')]['syncHangup']=function(_0x4ee230){var _0x1b7027=this[_0x0586('0x25')][_0x4ee230[_0x0586('0xd9')]];var _0x78ef59=this;var _0x47a3a8;if(_0x1b7027&&_0x1b7027[_0x0586('0x4e')]===_0x0586('0xdc')){delete this[_0x0586('0x25')][_0x4ee230[_0x0586('0xd9')]];this['updateOriginated'](this[_0x0586('0x20')][_0x1b7027[_0x0586('0xb1')]]);this[_0x0586('0x20')][_0x1b7027[_0x0586('0xb1')]][_0x0586('0xed')]+=0x1;_0x47a3a8=new Hangup(_0x1b7027,_0x4ee230);this[_0x0586('0xc6')](_0x47a3a8)['catch'](loggerCatch('[syncHangupIvr][createHistory]'));this[_0x0586('0xc4')](_0x47a3a8)['catch'](loggerCatch(_0x0586('0xee')));}if(_0x1b7027&&_0x1b7027[_0x0586('0x4e')]!=='ivr'&&isNotNull(this['voiceQueues'][_0x1b7027[_0x0586('0xb1')]][_0x0586('0xef')])){delete this[_0x0586('0x25')][_0x4ee230[_0x0586('0xd9')]];this[_0x0586('0xb0')](this[_0x0586('0x1f')][_0x1b7027[_0x0586('0xb1')]]);this[_0x0586('0x1f')][_0x1b7027[_0x0586('0xb1')]][_0x0586('0x60')]+=0x1;this['voiceQueues'][_0x1b7027['queue']]['outboundAnswerAgiCallsDay']+=0x1;_0x47a3a8=new Hangup(_0x1b7027,_0x4ee230);_0x47a3a8[_0x0586('0xdf')]=0x10;_0x47a3a8['statedesc']='AnswerAGI';_0x47a3a8[_0x0586('0xe1')]='AGI';this['createHistory'](_0x47a3a8)[_0x0586('0xae')](loggerCatch(_0x0586('0xf0')));this['moveContactManagedDialer'](_0x47a3a8)[_0x0586('0xae')](loggerCatch(_0x0586('0xee')));}if(_0x1b7027&&_0x1b7027[_0x0586('0x4e')]!=='ivr'&&!isNotNull(this[_0x0586('0x1f')][_0x1b7027['queue']]['dialQueueProject'])){delete this[_0x0586('0x25')][_0x4ee230[_0x0586('0xd9')]];this[_0x0586('0xb0')](this['voiceQueues'][_0x1b7027[_0x0586('0xb1')]]);this[_0x0586('0x1f')][_0x1b7027[_0x0586('0xb1')]][_0x0586('0x6a')]+=0x1;_0x47a3a8=new Hangup(_0x1b7027,_0x4ee230);_0x47a3a8[_0x0586('0xdf')]=0xc;_0x47a3a8[_0x0586('0xa6')]=_0x4ee230[_0x0586('0xf1')];_0x47a3a8[_0x0586('0xe1')]=_0x0586('0xf2');this[_0x0586('0xc6')](_0x47a3a8)[_0x0586('0xae')](loggerCatch(_0x0586('0xf0')));this[_0x0586('0xc4')](_0x47a3a8)[_0x0586('0xae')](loggerCatch(_0x0586('0xee')));}};Dialer[_0x0586('0x1a')][_0x0586('0x31')]=function(_0x556dbe){var _0x26286a=this[_0x0586('0x25')][_0x556dbe[_0x0586('0xd9')]];var _0x419b43=this;if(this[_0x0586('0x1f')][_0x556dbe['queue']]){if(_0x26286a&&_0x26286a[_0x0586('0x4e')]!==_0x0586('0xdc')){delete this[_0x0586('0x25')][_0x556dbe[_0x0586('0xd9')]];this[_0x0586('0x1f')][_0x556dbe['queue']][_0x0586('0x60')]+=0x1;var _0x1d54a8=new AgentComplete(_0x26286a,_0x556dbe);if(_0x556dbe[_0x0586('0xf3')]===_0x0586('0xf4')){_0x1d54a8['agiafterat']=this['voiceQueues'][_0x556dbe[_0x0586('0xb1')]][_0x0586('0xf5')]&&this[_0x0586('0x1f')][_0x556dbe[_0x0586('0xb1')]]['dialAgiAfterHangupAgent']?moment()[_0x0586('0x7f')](_0x0586('0xf6')):undefined;}this['createHistory'](_0x1d54a8)[_0x0586('0xae')](loggerCatch('[syncAgentComplete][createHistory]'));this[_0x0586('0xc4')](_0x1d54a8)[_0x0586('0xae')](loggerCatch(_0x0586('0xf7')));}}};Dialer[_0x0586('0x1a')][_0x0586('0x2b')]=function(_0x58204a){if(this[_0x0586('0x1f')][_0x58204a[_0x0586('0xb1')]]){if(this[_0x0586('0x25')][_0x58204a['uniqueid']]&&this['uniqueId'][_0x58204a[_0x0586('0xd9')]][_0x0586('0x4e')]!==_0x0586('0xdc')){this['updateOriginated'](this[_0x0586('0x1f')][_0x58204a[_0x0586('0xb1')]]);this['uniqueId'][_0x58204a[_0x0586('0xd9')]][_0x0586('0xf8')]=moment()[_0x0586('0x7f')]('YYYY-MM-DD\x20HH:mm:ss');}}};Dialer['prototype']['queueCallerAbandonCreateState']=function(_0x267557){this[_0x0586('0xc6')](_0x267557)[_0x0586('0xae')](loggerCatch(_0x0586('0xf9')));this[_0x0586('0xc4')](_0x267557)[_0x0586('0xae')](loggerCatch(_0x0586('0xfa')));};Dialer['prototype']['syncQueueCallerAbandon']=function(_0x1b0dc2){var _0x240fb1=this['uniqueId'][_0x1b0dc2[_0x0586('0xd9')]];var _0x2c747c=this;if(this[_0x0586('0x1f')][_0x1b0dc2['queue']]){if(_0x240fb1&&_0x240fb1[_0x0586('0x4e')]!=='ivr'){delete this[_0x0586('0x25')][_0x1b0dc2[_0x0586('0xd9')]];this[_0x0586('0xb0')](this[_0x0586('0x1f')][_0x1b0dc2[_0x0586('0xb1')]]);_0x240fb1[_0x0586('0xfb')]=moment()[_0x0586('0x7f')](_0x0586('0xf6'));var _0x4142b3=new QueueCallerAbandon(_0x240fb1,_0x1b0dc2);if(getSeconds(_0x240fb1[_0x0586('0xfb')],_0x240fb1[_0x0586('0xfc')])>=_0x240fb1[_0x0586('0xfd')]){this[_0x0586('0x1f')][_0x1b0dc2[_0x0586('0xb1')]]['predictiveIntervalDroppedCallsTimeout']+=0x1;this[_0x0586('0x1f')][_0x1b0dc2[_0x0586('0xb1')]][_0x0586('0xfe')]+=0x1;this[_0x0586('0x1f')][_0x1b0dc2[_0x0586('0xb1')]][_0x0586('0x71')]+=0x1;_0x4142b3[_0x0586('0xdf')]=0xa;_0x4142b3[_0x0586('0xa6')]=_0x0586('0xff');_0x4142b3[_0x0586('0x100')]='TIMEOUT';_0x4142b3[_0x0586('0x101')]=this[_0x0586('0x1f')][_0x1b0dc2[_0x0586('0xb1')]]['dialQueueProject2']?moment()[_0x0586('0x7f')](_0x0586('0xf6')):undefined;this['queueCallerAbandonCreateState'](_0x4142b3);}else{this[_0x0586('0x1f')][_0x1b0dc2['queue']]['predictiveIntervalDroppedCallsCallersExit']+=0x1;this[_0x0586('0x1f')][_0x1b0dc2[_0x0586('0xb1')]][_0x0586('0x64')]+=0x1;_0x4142b3['state']=0xb;_0x4142b3['statedesc']=_0x0586('0x102');_0x4142b3[_0x0586('0x100')]=_0x0586('0x103');this[_0x0586('0x104')](_0x4142b3);}}}};Dialer['prototype'][_0x0586('0x37')]=function(_0x55e087){if(this['actions'][_0x55e087[_0x0586('0xd9')]]){this[_0x0586('0x24')][_0x55e087[_0x0586('0xd9')]]['channel']=_0x55e087[_0x0586('0xad')];}if(this['uniqueId'][_0x55e087['uniqueid']]){this[_0x0586('0x25')][_0x55e087[_0x0586('0xd9')]][_0x0586('0xad')]=_0x55e087[_0x0586('0xad')];}};Dialer['prototype'][_0x0586('0x3b')]=function(_0x3ac51f){if(strategy[this[_0x0586('0x1f')][this[_0x0586('0x24')][_0x3ac51f[_0x0586('0x105')]][_0x0586('0xb1')]][_0x0586('0x50')]]===_0x0586('0x106')){if(this[_0x0586('0x24')][_0x3ac51f['actionid']]&&_['isNil'](this[_0x0586('0x24')][_0x3ac51f[_0x0586('0x105')]][_0x0586('0x107')])&&_0x3ac51f[_0x0586('0xac')]==='1'&&_0x3ac51f['paused']==='0'){if(this[_0x0586('0x21')][_0x3ac51f['stateinterface']]){if(!this[_0x0586('0x21')][_0x3ac51f[_0x0586('0x108')]][_0x0586('0x107')]){this['agents'][_0x3ac51f[_0x0586('0x108')]]['locked']=!![];this['actions'][_0x3ac51f[_0x0586('0x105')]]['locked']=!![];this['actions'][_0x3ac51f[_0x0586('0x105')]][_0x0586('0x108')]=_0x3ac51f[_0x0586('0x108')];}}}}else if((strategy[this[_0x0586('0x1f')][this[_0x0586('0x24')][_0x3ac51f['actionid']][_0x0586('0xb1')]][_0x0586('0x50')]]||'rrmemory')==='rrmemory'){if(this[_0x0586('0x24')][_0x3ac51f[_0x0586('0x105')]]){if(this[_0x0586('0x21')][_0x3ac51f[_0x0586('0x108')]]){this['actions'][_0x3ac51f[_0x0586('0x105')]]['stateinterface']=_0x3ac51f[_0x0586('0x108')];if(_[_0x0586('0xab')](this['queueBooked'][this[_0x0586('0x24')][_0x3ac51f[_0x0586('0x105')]][_0x0586('0xb1')]])){this[_0x0586('0x29')][this['actions'][_0x3ac51f[_0x0586('0x105')]][_0x0586('0xb1')]]=[];}this[_0x0586('0x29')][this[_0x0586('0x24')][_0x3ac51f[_0x0586('0x105')]]['queue']][_0x0586('0x109')](_['merge'](_[_0x0586('0xcd')](this[_0x0586('0x24')][_0x3ac51f[_0x0586('0x105')]],['idHopper',_0x0586('0x108')]),{'status':_0x3ac51f[_0x0586('0xac')],'paused':_0x3ac51f['paused']}));}}}};function unlockQueueStatus(_0x55d5d7,_0x49ebc4){setTimeout(function(){if(_[_0x0586('0x3d')](_0x55d5d7['queueStatusComplete'])){loggerBooked[_0x0586('0x9b')]('[unlockQueueStatus][undefined]',_0x49ebc4);}_0x55d5d7[_0x0586('0x10a')]=!![];loggerBooked[_0x0586('0x84')]('[booked][unlockQueueStatus]',_0x49ebc4,JSON[_0x0586('0x49')](_[_0x0586('0xcd')](_0x55d5d7,[_0x0586('0x3f'),'queueStatusComplete'])));},0x1f3);}Dialer[_0x0586('0x1a')][_0x0586('0x10b')]=function(_0x18d46f){var _0x4580aa=this;var _0x435ea4=_0x4580aa[_0x0586('0x1f')][_0x4580aa[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]]['queue']];if(strategy[this['voiceQueues'][this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]]['queue']]['strategy']]===_0x0586('0x106')){if(this['actions'][_0x18d46f[_0x0586('0x105')]]&&this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0x108')]){this[_0x0586('0x1e')]['run'](this[_0x0586('0x24')][_0x18d46f['actionid']]['idHopper'],this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0x108')])[_0x0586('0xae')](function(_0x2b18ed){logger['error'](_0x0586('0x10c'),util[_0x0586('0x9a')](_0x2b18ed,{'showHidden':![],'depth':null}));})[_0x0586('0x1d')](function(){_0x4580aa[_0x0586('0xb0')](_0x4580aa['voiceQueues'][_0x4580aa[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xb1')]]);_0x4580aa[_0x0586('0x21')][_0x4580aa[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0x108')]]['locked']=![];delete _0x4580aa[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]];unlockQueueStatus(_0x435ea4);});}else{this['updateOriginated'](this[_0x0586('0x1f')][this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]]['queue']]);this['rescheduleContact']({'active':![],'ContactId':this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xce')],'ListId':this['actions'][_0x18d46f[_0x0586('0x105')]]['ListId'],'VoiceQueueId':this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xd0')]||undefined,'CampaignId':this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]]['CampaignId']||undefined})[_0x0586('0xae')](loggerCatch('[unlock][syncQueueStatusComplete]'));delete this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]];unlockQueueStatus(_0x435ea4);}}else if((strategy[this[_0x0586('0x1f')][this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xb1')]][_0x0586('0x50')]]||'rrmemory')==='rrmemory'){var _0x2bbd4c;if(this['actions'][_0x18d46f[_0x0586('0x105')]]&&!_[_0x0586('0x46')](this[_0x0586('0x29')][this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xb1')]])){if(this[_0x0586('0x10d')][_0x4580aa[_0x0586('0x24')][_0x18d46f['actionid']][_0x0586('0xb1')]]){this[_0x0586('0x10d')][_0x4580aa[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xb1')]]=this[_0x0586('0x10d')][this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xb1')]]?this[_0x0586('0x10d')][this['actions'][_0x18d46f[_0x0586('0x105')]][_0x0586('0xb1')]]:this[_0x0586('0x29')][this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]]['queue']]?this[_0x0586('0x29')][this[_0x0586('0x24')][_0x18d46f['actionid']][_0x0586('0xb1')]]['_rr']||0x0:0x0;}this[_0x0586('0x29')][this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xb1')]][_0x0586('0x10e')]=this['queueBookedRR'][this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xb1')]];for(var _0xe8ae4c=0x0;_0xe8ae4c<this[_0x0586('0x29')][this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xb1')]][_0x0586('0x10f')];_0xe8ae4c+=0x1){_0x2bbd4c=rr(this[_0x0586('0x29')][this['actions'][_0x18d46f[_0x0586('0x105')]][_0x0586('0xb1')]]);this[_0x0586('0x10d')][_0x4580aa[_0x0586('0x24')][_0x18d46f['actionid']][_0x0586('0xb1')]]=this[_0x0586('0x29')][this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]]['queue']][_0x0586('0x10e')];if(_0x2bbd4c[_0x0586('0xac')]==='1'&&_0x2bbd4c[_0x0586('0x110')]==='0'){break;}}if(!_[_0x0586('0xab')](_0x2bbd4c)){this[_0x0586('0x21')][_0x2bbd4c[_0x0586('0x108')]][_0x0586('0x111')]=_[_0x0586('0x3d')](this[_0x0586('0x21')][_0x2bbd4c[_0x0586('0x108')]]['unlockRR'])?!![]:this[_0x0586('0x21')][_0x2bbd4c['stateinterface']]['unlockRR'];}loggerBooked['info'](_0x0586('0x112'),_0x18d46f[_0x0586('0x105')],_0x0586('0x113'),JSON['stringify'](_[_0x0586('0xcd')](this[_0x0586('0x21')][_0x2bbd4c[_0x0586('0x108')]],[_0x0586('0x3f'),_0x0586('0x111')])),_0x0586('0x114'),JSON[_0x0586('0x49')](_0x2bbd4c['idHopper']));if(!_[_0x0586('0xab')](_0x2bbd4c)&&_0x2bbd4c[_0x0586('0xac')]==='1'&&_0x2bbd4c['paused']==='0'&&this['agents'][_0x2bbd4c[_0x0586('0x108')]]['unlockRR']){this[_0x0586('0x21')][_0x2bbd4c[_0x0586('0x108')]][_0x0586('0x111')]=![];this['queueBooked'][_0x4580aa[_0x0586('0x24')][_0x18d46f['actionid']][_0x0586('0xb1')]]=[];this[_0x0586('0x1e')][_0x0586('0x115')](_0x2bbd4c[_0x0586('0x116')],_0x2bbd4c['stateinterface'])[_0x0586('0xae')](function(_0x574f8e){logger[_0x0586('0x9b')](_0x0586('0x10c'),util[_0x0586('0x9a')](_0x574f8e,{'showHidden':![],'depth':null}));})[_0x0586('0x1d')](function(){_0x4580aa[_0x0586('0xb0')](_0x4580aa[_0x0586('0x1f')][_0x4580aa[_0x0586('0x24')][_0x18d46f['actionid']][_0x0586('0xb1')]]);setTimeout(function(){_0x4580aa['agents'][_0x2bbd4c[_0x0586('0x108')]]['unlockRR']=!![];loggerBooked[_0x0586('0x84')](_0x0586('0x117'),_0x18d46f[_0x0586('0x105')],'Agent:\x20',JSON[_0x0586('0x49')](_[_0x0586('0xcd')](_0x4580aa[_0x0586('0x21')][_0x2bbd4c[_0x0586('0x108')]],['name',_0x0586('0x111')])),'contactAgent-idHopper:\x20',JSON[_0x0586('0x49')](_0x2bbd4c[_0x0586('0x116')]));},0xc7);delete _0x4580aa[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]];unlockQueueStatus(_0x435ea4,_0x18d46f['actionid']);});}else{loggerBooked[_0x0586('0x84')](_0x0586('0x118'));this[_0x0586('0xb0')](this[_0x0586('0x1f')][this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xb1')]]);this[_0x0586('0xbe')]({'active':![],'ContactId':this['actions'][_0x18d46f[_0x0586('0x105')]][_0x0586('0xce')],'ListId':this['actions'][_0x18d46f[_0x0586('0x105')]][_0x0586('0x119')],'VoiceQueueId':this['actions'][_0x18d46f[_0x0586('0x105')]][_0x0586('0xd0')]||undefined,'CampaignId':this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]]['CampaignId']||undefined})[_0x0586('0xae')](loggerCatch(_0x0586('0x11a')));delete this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]];unlockQueueStatus(_0x435ea4);}}else{loggerBooked['info'](_0x0586('0x11b'));this['updateOriginated'](this['voiceQueues'][this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xb1')]]);this[_0x0586('0xbe')]({'active':![],'ContactId':this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]]['ContactId'],'ListId':this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0x119')],'VoiceQueueId':this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xd0')]||undefined,'CampaignId':this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]]['CampaignId']||undefined})['catch'](loggerCatch('[unlock2][syncQueueStatusComplete]'));delete this[_0x0586('0x24')][_0x18d46f['actionid']];unlockQueueStatus(_0x435ea4);}}else{loggerBooked[_0x0586('0x84')](_0x0586('0x11c'));this[_0x0586('0xb0')](this['voiceQueues'][this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xb1')]]);this[_0x0586('0xbe')]({'active':![],'ContactId':this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xce')],'ListId':this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0x119')],'VoiceQueueId':this['actions'][_0x18d46f[_0x0586('0x105')]][_0x0586('0xd0')]||undefined,'CampaignId':this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]][_0x0586('0xd1')]||undefined})[_0x0586('0xae')](loggerCatch(_0x0586('0x11d')));delete this[_0x0586('0x24')][_0x18d46f[_0x0586('0x105')]];unlockQueueStatus(_0x435ea4);}};Dialer[_0x0586('0x1a')]['loopCampaigns']=function(){var _0x1ef71d=this;setInterval(function(){_0x1ef71d[_0x0586('0x11e')]();},0x3e8);};Dialer[_0x0586('0x1a')][_0x0586('0x11f')]=function(_0x1258ab){var _0x4954ea=this;return function(){if(!_0x4954ea[_0x0586('0xd5')](_0x1258ab[_0x0586('0x7c')])){if(!_0x4954ea[_0x0586('0xd5')](_0x1258ab[_0x0586('0x120')])){_0x1258ab[_0x0586('0x41')]='TRUNK_IS_NOT_REACHABLE';throw _0x1258ab[_0x0586('0x3f')]+'\x20trunk\x20is\x20not\x20reachable';}}};};Dialer[_0x0586('0x1a')][_0x0586('0x121')]=function(_0x1f63f1,_0xb8ba28,_0x4f27e5,_0x2a6409){var _0x202007=this;return function(){var _0x43a2bf=!![];return _0x202007[_0x0586('0x122')](_0x1f63f1,_0xb8ba28,_0x4f27e5,_0x2a6409,_0x43a2bf);};};Dialer[_0x0586('0x1a')][_0x0586('0x123')]=function(_0x16af73,_0x3b96eb,_0x4b0faa,_0x31c9a9){var _0x404fb5=this;return function(){var _0x3541c0=![];return _0x404fb5[_0x0586('0x122')](_0x16af73['Intervals'],_0x3b96eb,_0x4b0faa,_0x31c9a9,_0x3541c0);};};Dialer[_0x0586('0x1a')][_0x0586('0x122')]=function(_0x169f24,_0x286f54,_0x51bbf1,_0x496a81,_0x5c23e7){var _0xc81677=[];return new BPromise(function(_0x1e3ee6,_0x4fff55){if(!isNotNull(_0x169f24)){_0x496a81[_0x0586('0x41')]='INTERVAL_IS_NULL';return _0x4fff55(msgResponse(_0x0586('0x122'),'Failure',_0x51bbf1+_0x0586('0x124')));}if(_[_0x0586('0x46')](_0x169f24)){_0x496a81[_0x0586('0x41')]='INTERVAL_IS_EMPTY';return _0x4fff55(msgResponse('ifTime','Failure',_0x51bbf1+_0x0586('0x125')));}if(_0x286f54&&_[_0x0586('0x3d')](config[_0x0586('0x126')][_0x286f54])){_0x496a81[_0x0586('0x41')]=_0x0586('0x127');return _0x4fff55(msgResponse(_0x0586('0x122'),_0x0586('0x128'),_0x51bbf1+_0x0586('0x129')+_0x286f54));}if(_[_0x0586('0x12a')](_0x169f24)){for(var _0x5add1e=0x0;_0x5add1e<_0x169f24[_0x0586('0x10f')];_0x5add1e+=0x1){_0xc81677[_0x0586('0x109')](ami[_0x0586('0x12b')]({'action':'command','command':util[_0x0586('0x7f')]('iftime\x20%s,%s',_0x169f24[_0x5add1e]['interval'],!_[_0x0586('0x3d')](config[_0x0586('0x126')][_0x286f54])?_0x286f54:'')})[_0x0586('0xb6')](function(_0x90a551){return _0x90a551[_0x0586('0x12c')][_0x0586('0x12d')](_0x0586('0x12e'))>=0x0?!![]:![];})[_0x0586('0xae')](myreject(_0x4fff55)));}}else{_0xc81677['push'](ami['Action']({'action':'command','command':util[_0x0586('0x7f')](_0x0586('0x12f'),_0x169f24,!_[_0x0586('0x3d')](config['timezones'][_0x286f54])?_0x286f54:'')})['then'](function(_0x38d862){return _0x38d862['content']['indexOf'](_0x0586('0x12e'))>=0x0?!![]:![];})[_0x0586('0xae')](myreject(_0x4fff55)));}BPromise['all'](_0xc81677)['then'](function(_0x59b07b){var _0x21400b=_['some'](_0x59b07b);if(_0x21400b){return _0x1e3ee6(_0x21400b);}else{_0x496a81[_0x0586('0x41')]=_0x5c23e7?_0x0586('0x130'):_0x0586('0x131');return _0x4fff55(msgResponse(_0x0586('0x132'),_0x0586('0x128'),_0x0586('0x133')+_0x5c23e7+'\x20'+_0x51bbf1+'\x20Interval\x20is\x20overtime:\x20'+util['inspect'](_0x169f24,{'showHidden':![],'depth':null})+_0x0586('0x134')+_0x286f54));}})[_0x0586('0xae')](function(_0x1e3a41){return _0x4fff55(msgResponse(_0x0586('0x122'),'Failure',JSON[_0x0586('0x49')](_0x1e3a41)));});});};Dialer[_0x0586('0x1a')][_0x0586('0x135')]=function(_0x372e43){var _0x53e17d=this;return function(){switch(_0x372e43[_0x0586('0x5c')]){case _0x0586('0x136'):freeVariablesPredictive(_0x372e43);_0x53e17d[_0x0586('0x137')](_0x372e43,0x1);break;case'power':freeVariablesPredictive(_0x372e43);_0x53e17d['handlePower'](_0x372e43,_0x372e43['dialPowerLevel']);break;case'predictive':_0x53e17d[_0x0586('0x8')](_0x372e43);break;case'booked':freeVariablesPredictive(_0x372e43);_0x53e17d[_0x0586('0x137')](_0x372e43,0x1);break;default:freeVariablesPredictive(_0x372e43);logger[_0x0586('0x9b')](_0x0586('0x138'),_0x372e43[_0x0586('0x3f')],'method\x20not\x20recognized');}};};Dialer[_0x0586('0x1a')][_0x0586('0x139')]=function(_0x5c2d1f){var _0x3668e0=this;return function(){_0x3668e0[_0x0586('0x13a')](_0x5c2d1f);};};Dialer[_0x0586('0x1a')][_0x0586('0x33')]=function(_0xca7122){var _0x34f293=this;if(isNotPreview(_0xca7122['dialMethod'])){if(isVoiceQueueOutbound(_0xca7122[_0x0586('0x4e')])&&isActive(_0xca7122[_0x0586('0x5b')])){_0xca7122[_0x0586('0xa2')]=!![];BPromise[_0x0586('0xb3')]()[_0x0586('0xb6')](checkIsLoggedIn(_0xca7122,_0xca7122[_0x0586('0x53')]))[_0x0586('0xb6')](checkIsActive(_0xca7122,_0xca7122[_0x0586('0x5b')]))['then'](checkInterval(_0xca7122))[_0x0586('0xb6')](_0x34f293['checkIsTrunkReachable'](_0xca7122))[_0x0586('0xb6')](_0x34f293[_0x0586('0x121')](_0xca7122['dialGlobalInterval'],_0xca7122[_0x0586('0x13b')],_0xca7122['name'],_0xca7122))[_0x0586('0xb6')](_0x34f293[_0x0586('0x123')](_0xca7122[_0x0586('0x43')],_0xca7122[_0x0586('0x13b')],_0xca7122['name'],_0xca7122))[_0x0586('0xb6')](_0x34f293['checkDialMethod'](_0xca7122))[_0x0586('0xae')](loggerCatchQueueSummary('[syncQueueSummary]',_0xca7122));}else{notSendMessagesQueue(_0xca7122);}}else{freeVariablesPredictive(_0xca7122);}};Dialer[_0x0586('0x1a')][_0x0586('0x11e')]=function(){var _0x2197e9=this;var _0x214ef6;for(var _0x115ac6 in this[_0x0586('0x20')]){if(this['campaigns'][_0x0586('0xc8')](_0x115ac6)){_0x214ef6=this['campaigns'][_0x115ac6];if(isCampaignIvr(_0x214ef6[_0x0586('0x4e')])&&isActive(_0x214ef6[_0x0586('0x7d')])){_0x214ef6[_0x0586('0xa2')]=!![];BPromise[_0x0586('0xb3')]()[_0x0586('0xb6')](checkIsActive(_0x214ef6,_0x214ef6['active']))[_0x0586('0xb6')](checkInterval(_0x214ef6))[_0x0586('0xb6')](_0x2197e9[_0x0586('0x11f')](_0x214ef6))[_0x0586('0xb6')](_0x2197e9['checkIfTime'](_0x214ef6[_0x0586('0x13c')],_0x214ef6['dialTimezone'],_0x214ef6[_0x0586('0x3f')],_0x214ef6))['then'](_0x2197e9[_0x0586('0x123')](_0x214ef6[_0x0586('0x43')],_0x214ef6['dialTimezone'],_0x214ef6[_0x0586('0x3f')],_0x214ef6))['then'](_0x2197e9[_0x0586('0x139')](_0x214ef6))[_0x0586('0xae')](loggerCatchQueueSummary('[syncCampaigns]',_0x214ef6));}else{notSendMessagesCampaign(_0x214ef6);}}}};function getCallerIdRandom(_0x45d1dc,_0x2dc76c){var _0x1656cd,_0x416463,_0x50cc85;if(_0x2dc76c<=0x0){_0x2dc76c=0x1;}_0x1656cd=new RegExp(_0x0586('0x13d')+_0x2dc76c+'}$');_0x416463=Math[_0x0586('0x13e')](0xa,_0x2dc76c-0x1);_0x50cc85=Math[_0x0586('0x13e')](0xa,_0x2dc76c)-0x1;return util[_0x0586('0x7f')]('%s',_[_0x0586('0x13f')](_0x45d1dc,_0x1656cd,_[_0x0586('0x140')](_0x416463,_0x50cc85)));}function extractCalleridName(_0x5e2dfa){var _0x42eb85=_0x5e2dfa[_0x0586('0x141')](/"(.*?)"/);return _0x42eb85?_0x42eb85[0x1]:_0x5e2dfa;}function extractCalleridNumber(_0x2da6fe){var _0x5150d3=_0x2da6fe[_0x0586('0x141')](/<(.*?)>/);return _0x5150d3?_0x5150d3[0x1]:_0x2da6fe;}Dialer[_0x0586('0x1a')][_0x0586('0x142')]=function(_0x428970,_0x51f8d7){var _0x4d64b6=this;var _0xded8da=uuid['v4']();this['actions'][_0xded8da]=new Action(_0x428970,_0x51f8d7,_0xded8da);return new BPromise(function(_0x571f66,_0x112d81){if(_[_0x0586('0x3d')](_0x428970)&&_0x0586('0x143')!==typeof _0x428970){return _0x112d81(msgResponse(_0x0586('0x144'),_0x0586('0x128'),_0x0586('0x145')));}if(_[_0x0586('0x3d')](_0x51f8d7['Contact'][_0x0586('0x146')])||_0x51f8d7[_0x0586('0x147')][_0x0586('0x146')]===null){return _0x112d81(msgResponse(_0x0586('0x144'),_0x0586('0x128'),'contact\x20is\x20undefine'));}var _0x24473e={'XMD-CALLERID':_0x4d64b6[_0x0586('0x24')][_0xded8da][_0x0586('0x148')](),'XMD-AGI':_0x428970[_0x0586('0xef')]?util['format']('\x22agi://%s/square,%s\x22',ipAgi,_0x428970['dialQueueProject']):_0x0586('0x149'),'XMD-AGIAFTER':_0x428970[_0x0586('0xf5')]?util['format'](_0x0586('0x14a'),ipAgi,_0x428970[_0x0586('0xf5')]):'NONE','XMD-QUEUE':_0x428970[_0x0586('0x4e')]===_0x0586('0x4f')?util[_0x0586('0x7f')](_0x0586('0x14b'),_0x428970[_0x0586('0x3f')],_0x428970[_0x0586('0x14c')]||'',_0x428970[_0x0586('0x14d')]?'c':'',_0x428970['dialQueueTimeout']||0x3):'NONE','XMD-CONTACTID':_0x51f8d7[_0x0586('0xce')],'XMD-CDRTYPE':_0x0586('0x6'),'CALLERID(all)':_0x4d64b6[_0x0586('0x24')][_0xded8da]['getCaller'](),'XMD-AMD':_0x428970['dialAMDActive']?'ACTIVE':_0x0586('0x149'),'XMD-DESTINATION':_0x0586('0x14e')};if(_0x428970[_0x0586('0xdd')]){_0x24473e[_0x0586('0x14f')]=_0x428970[_0x0586('0x150')]||0x9c4;_0x24473e[_0x0586('0x151')]=_0x428970[_0x0586('0x152')]||0x5dc;_0x24473e[_0x0586('0x153')]=_0x428970[_0x0586('0x154')]||0x320;_0x24473e[_0x0586('0x155')]=_0x428970[_0x0586('0x156')]||0x1388;_0x24473e[_0x0586('0x157')]=_0x428970[_0x0586('0x158')]||0x64;_0x24473e[_0x0586('0x159')]=_0x428970[_0x0586('0x15a')]||0x32;_0x24473e[_0x0586('0x15b')]=_0x428970[_0x0586('0x15c')]||0x3;_0x24473e[_0x0586('0x15d')]=_0x428970['dialAMDSilenceThreshold']||0x100;_0x24473e['XMD-AMDMAXIMUMWORDLENGTH']=_0x428970['dialAMDMaximumWordLength']||0x1388;}if(_0x428970[_0x0586('0x4e')]===_0x0586('0x4f')){_0x24473e[_0x0586('0x15e')]=_0x51f8d7[_0x0586('0xd0')];}else{_0x24473e['XMD-CAMPAIGNID']=_0x51f8d7[_0x0586('0xd1')];}for(var _0x28bcdf in _0x51f8d7['Contact']){if(_0x51f8d7[_0x0586('0x147')][_0x0586('0xc8')](_0x28bcdf)){if(isNotNull(_0x51f8d7[_0x0586('0x147')][_0x28bcdf])&&_0x28bcdf!=='id'&&_0x28bcdf!==_0x0586('0x15f')&&_0x28bcdf!==_0x0586('0x160')&&_0x28bcdf!==_0x0586('0x161')){_0x24473e[util[_0x0586('0x7f')](_0x0586('0x162'),_0x0586('0x163'),_[_0x0586('0x164')](_0x28bcdf))]=_0x51f8d7[_0x0586('0x147')][_0x28bcdf];}}}var _0x43c63f=_0x4d64b6[_0x0586('0xd5')](_0x428970[_0x0586('0x7c')])?getCallerId(_0x428970[_0x0586('0x7c')][_0x0586('0x7e')],_0x428970[_0x0586('0x5d')],_0x428970[_0x0586('0x165')]>0x0?getCallerIdRandom(_0x428970['dialOriginateCallerIdNumber'],_0x428970[_0x0586('0x165')]):_0x428970[_0x0586('0x166')]):getCallerId(_[_0x0586('0xab')](_0x428970[_0x0586('0x120')])?_0x428970[_0x0586('0x7c')]['callerid']:_0x428970['TrunkBackup'][_0x0586('0x7e')],_0x428970[_0x0586('0x5d')],_0x428970[_0x0586('0x165')]>0x0?getCallerIdRandom(_0x428970['dialOriginateCallerIdNumber'],_0x428970['dialRandomLastDigitCallerIdNumber']):_0x428970[_0x0586('0x166')]);if(_0x43c63f){_0x24473e[_0x0586('0x167')]=_0x4d64b6[_0x0586('0x24')][_0xded8da][_0x0586('0x168')]=extractCalleridName(_0x43c63f);_0x24473e[_0x0586('0x169')]=_0x4d64b6[_0x0586('0x24')][_0xded8da][_0x0586('0x16a')]=extractCalleridNumber(_0x43c63f);}return ami[_0x0586('0x12b')]({'actionid':_0xded8da,'action':'originate','channel':_0x4d64b6[_0x0586('0xd5')](_0x428970[_0x0586('0x7c')])?util[_0x0586('0x7f')](_0x0586('0x16b'),_0x428970[_0x0586('0x7c')][_0x0586('0x3f')],isNotNull(_0x428970[_0x0586('0x5e')])?_0x428970[_0x0586('0x5e')]['trim']()||'':'',_0x428970[_0x0586('0x16c')]>0x0?_0x51f8d7[_0x0586('0x147')][_0x0586('0x146')][_0x0586('0x16d')](_0x428970[_0x0586('0x16c')]):_0x51f8d7[_0x0586('0x147')][_0x0586('0x146')]):util[_0x0586('0x7f')](_0x0586('0x16b'),_['isNil'](_0x428970[_0x0586('0x120')])?_0x428970[_0x0586('0x7c')][_0x0586('0x3f')]:_0x428970['TrunkBackup'][_0x0586('0x3f')],isNotNull(_0x428970[_0x0586('0x5e')])?_0x428970[_0x0586('0x5e')][_0x0586('0x16e')]()||'':'',_0x428970[_0x0586('0x16c')]>0x0?_0x51f8d7['Contact'][_0x0586('0x146')][_0x0586('0x16d')](_0x428970[_0x0586('0x16c')]):_0x51f8d7[_0x0586('0x147')]['phone']),'callerid':_0x43c63f,'Exten':_0x0586('0x14e'),'Context':'from-sip','Priority':'1','variable':_0x24473e,'timeout':(_0x428970[_0x0586('0x16f')]||0x1e)*0x3e8,'async':!![],'channelid':_0xded8da})[_0x0586('0xb6')](function(_0x5e14d3){return _0x571f66(_0x5e14d3);})[_0x0586('0xae')](function(_0x4ac5ba){_0x428970[_0x0586('0x67')]+=0x1;var _0x394bb2=new History(_0x4d64b6[_0x0586('0x24')][_0xded8da]);logger[_0x0586('0x9b')](util['format'](_0x0586('0x170'),JSON[_0x0586('0x49')](_0x4ac5ba)));_0x394bb2[_0x0586('0xdf')]=0xe;_0x394bb2['statedesc']='OriginateError';_0x394bb2[_0x0586('0xa7')]=moment()[_0x0586('0x7f')](_0x0586('0xf6'));_0x394bb2[_0x0586('0x171')]=_0x394bb2['starttime'];_0x4d64b6['createHistory'](_0x394bb2)[_0x0586('0xae')](loggerCatch('[originate][error]'));_0x4d64b6['moveContactManagedDialer'](_0x394bb2)[_0x0586('0xae')](loggerCatch(_0x0586('0x172')))[_0x0586('0x1d')](function(){delete _0x4d64b6[_0x0586('0x24')][_0xded8da];return _0x112d81(msgResponse(_0x0586('0x144'),_0x0586('0x173'),'originate\x20action\x20Error'));});});});};Dialer[_0x0586('0x1a')][_0x0586('0x30')]=function(_0x1e44b8){var _0xa2981d=this[_0x0586('0x24')][_0x1e44b8['actionid']];var _0x5ba9b7=this;if(_0xa2981d){delete this[_0x0586('0x24')][_0x1e44b8[_0x0586('0x105')]];_0xa2981d[_0x0586('0xfc')]=moment()[_0x0586('0x7f')]('YYYY-MM-DD\x20HH:mm:ss');var _0x84abe3=_0xa2981d[_0x0586('0x4e')]===_0x0586('0xdc')?this[_0x0586('0x20')][_0xa2981d['queue']]:this[_0x0586('0x1f')][_0xa2981d[_0x0586('0x174')]()];if(!this['isSuccess'](_0x1e44b8['response'])){this['updateOriginated'](_0x84abe3);return this['callProgressDetecting'](_0xa2981d,_0x84abe3,_0x1e44b8)[_0x0586('0xb6')](function(_0x441141){})[_0x0586('0xae')](loggerCatch(_0x0586('0x175')));}else{this[_0x0586('0x25')][_0x1e44b8[_0x0586('0xd9')]]=_0xa2981d;}}};Dialer[_0x0586('0x1a')]['checkRetriveMax']=function(_0x3d1745,_0x4dd0ea,_0x25e7da){var _0x4dde65=new History(_0x4dd0ea);if(_0x4dde65[_0x0586('0x176')]+_0x4dde65[_0x0586('0x177')]+_0x4dde65[_0x0586('0x178')]>=_0x25e7da['dialGlobalMaxRetry']-0x1){return!![];}switch(_0x3d1745){case 0x3:if(_0x4dde65['countnoanswerretry']>=_0x25e7da[_0x0586('0x179')]-0x1){return!![];}else{this[_0x0586('0xbe')]({'active':![],'countnoanswerretry':_0x4dde65[_0x0586('0x178')]+=0x1,'scheduledat':moment()['add'](_0x25e7da[_0x0586('0x17a')],_0x0586('0x17b'))[_0x0586('0x7f')](_0x0586('0xf6')),'ContactId':_0x4dde65[_0x0586('0xce')],'ListId':_0x4dde65[_0x0586('0x119')],'VoiceQueueId':_0x4dde65[_0x0586('0xd0')]||undefined,'CampaignId':_0x4dde65['CampaignId']||undefined})['catch'](loggerCatch(_0x0586('0x17c')));}break;case 0x5:if(_0x4dde65[_0x0586('0x176')]>=_0x25e7da[_0x0586('0x17d')]-0x1){return!![];}else{this['rescheduleContact']({'active':![],'countbusyretry':_0x4dde65[_0x0586('0x176')]+=0x1,'scheduledat':moment()['add'](_0x25e7da[_0x0586('0x17e')],_0x0586('0x17b'))['format'](_0x0586('0xf6')),'ContactId':_0x4dde65['ContactId'],'ListId':_0x4dde65[_0x0586('0x119')],'VoiceQueueId':_0x4dde65[_0x0586('0xd0')]||undefined,'CampaignId':_0x4dde65[_0x0586('0xd1')]||undefined})[_0x0586('0xae')](loggerCatch(_0x0586('0x17f')));}break;case 0x8:if(_0x4dde65[_0x0586('0x177')]>=_0x25e7da[_0x0586('0x180')]-0x1){return!![];}else{this['rescheduleContact']({'active':![],'countcongestionretry':_0x4dde65[_0x0586('0x177')]+=0x1,'scheduledat':moment()[_0x0586('0x181')](_0x25e7da[_0x0586('0x182')],'minutes')[_0x0586('0x7f')](_0x0586('0xf6')),'ContactId':_0x4dde65['ContactId'],'ListId':_0x4dde65[_0x0586('0x119')],'VoiceQueueId':_0x4dde65[_0x0586('0xd0')]||undefined,'CampaignId':_0x4dde65[_0x0586('0xd1')]||undefined})[_0x0586('0xae')](loggerCatch(_0x0586('0x183')));}break;default:return!![];}};Dialer[_0x0586('0x1a')]['callProgressDetecting']=function(_0x1d8d9d,_0x2f5a26,_0x2dce4e){var _0x3c77ef=this;var _0x5324af=new History(_0x1d8d9d);return new BPromise(function(_0x2f25cb,_0x50e2b3){if(_['isUndefined'](_0x2f5a26)&&'object'!==typeof _0x2f5a26){return _0x50e2b3(msgResponse(_0x0586('0x184'),_0x0586('0x128'),'entity\x20is\x20undefine'));}if(_['isUndefined'](_0x2dce4e)&&_0x0586('0x143')!==typeof _0x2dce4e){return _0x50e2b3(msgResponse(_0x0586('0x184'),_0x0586('0x128'),_0x0586('0x185')));}switch(_0x2dce4e[_0x0586('0xf3')]){case'0':_0x2f5a26[_0x0586('0x66')]+=0x1;_0x5324af[_0x0586('0xdf')]=0x0;_0x5324af['statedesc']='NoSuchNumber';_0x3c77ef[_0x0586('0xc6')](_0x5324af)['catch'](loggerCatch('[syncAgentComplete][createHistory][0]'));if(_0x3c77ef['checkRetriveMax'](0x0,_0x1d8d9d,_0x2f5a26)){if(_0x5324af[_0x0586('0x176')]+_0x5324af[_0x0586('0x177')]+_0x5324af[_0x0586('0x178')]>=_0x2f5a26[_0x0586('0x186')]){_0x3c77ef['stateGlobal'](_0x5324af,_0x2f25cb,_0x50e2b3,_0x0586('0x187'));}else{_0x3c77ef[_0x0586('0x188')](_0x5324af,_0x2f25cb,_0x50e2b3,'reason\x200\x20no\x20such\x20number....');}}break;case'3':_0x2f5a26[_0x0586('0x65')]+=0x1;_0x5324af[_0x0586('0xdf')]=0x3;_0x5324af['statedesc']=_0x0586('0x189');_0x5324af[_0x0586('0x178')]+=0x1;_0x5324af[_0x0586('0x18a')]+=0x1;_0x3c77ef[_0x0586('0xc6')](_0x5324af)['catch'](loggerCatch('[syncAgentComplete][createHistory][3]'));if(_0x3c77ef[_0x0586('0x18b')](0x3,_0x1d8d9d,_0x2f5a26)){if(_0x5324af[_0x0586('0x178')]>=_0x2f5a26[_0x0586('0x179')]){_0x3c77ef[_0x0586('0x188')](_0x5324af,_0x2f25cb,_0x50e2b3,'reason\x203\x20ringing\x20no\x20answer');}else{_0x3c77ef['stateGlobal'](_0x5324af,_0x2f25cb,_0x50e2b3,_0x0586('0x18c'));}}break;case'5':_0x2f5a26[_0x0586('0x62')]+=0x1;_0x5324af[_0x0586('0xdf')]=0x5;_0x5324af['statedesc']='Busy';_0x5324af[_0x0586('0x176')]+=0x1;_0x5324af['countglobal']+=0x1;_0x3c77ef[_0x0586('0xc6')](_0x5324af)[_0x0586('0xae')](loggerCatch(_0x0586('0x18d')));if(_0x3c77ef[_0x0586('0x18b')](0x5,_0x1d8d9d,_0x2f5a26)){if(_0x5324af['countbusyretry']>=_0x2f5a26[_0x0586('0x17d')]){_0x3c77ef[_0x0586('0x188')](_0x5324af,_0x2f25cb,_0x50e2b3,'reason\x205\x20busy');}else{_0x3c77ef[_0x0586('0x18e')](_0x5324af,_0x2f25cb,_0x50e2b3,_0x0586('0x18f'));}}break;case'8':_0x2f5a26[_0x0586('0x190')]+=0x1;_0x5324af['state']=0x8;_0x5324af[_0x0586('0xa6')]='Congestion';_0x5324af[_0x0586('0x177')]+=0x1;_0x5324af[_0x0586('0x18a')]+=0x1;_0x3c77ef[_0x0586('0xc6')](_0x5324af)[_0x0586('0xae')](loggerCatch(_0x0586('0x191')));if(_0x3c77ef[_0x0586('0x18b')](0x8,_0x1d8d9d,_0x2f5a26)){if(_0x5324af[_0x0586('0x177')]>=_0x2f5a26[_0x0586('0x180')]){_0x3c77ef[_0x0586('0x188')](_0x5324af,_0x2f25cb,_0x50e2b3,_0x0586('0x192'));}else{_0x3c77ef['stateGlobal'](_0x5324af,_0x2f25cb,_0x50e2b3,'reason\x208\x20congestion');}}break;default:_0x2f5a26[_0x0586('0x6a')]+=0x1;_0x5324af[_0x0586('0xdf')]=0xc;_0x5324af['statedesc']=_0x2dce4e[_0x0586('0xf3')];_0x3c77ef[_0x0586('0xc6')](_0x5324af)['catch'](loggerCatch('[syncAgentComplete][createHistory][?]'));if(_0x3c77ef[_0x0586('0x18b')](_0x2dce4e[_0x0586('0xf3')],_0x1d8d9d,_0x2f5a26)){if(_0x5324af[_0x0586('0x176')]+_0x5324af[_0x0586('0x177')]+_0x5324af[_0x0586('0x178')]>=_0x2f5a26['dialGlobalMaxRetry']){_0x3c77ef['stateGlobal'](_0x5324af,_0x2f25cb,_0x50e2b3,_0x2dce4e['reason']);}else{_0x3c77ef[_0x0586('0x188')](_0x5324af,_0x2f25cb,_0x50e2b3,_0x2dce4e[_0x0586('0xf3')]);}}}});};Dialer[_0x0586('0x1a')][_0x0586('0x18e')]=function(_0x49be25,_0x15ef09,_0x3e404b,_0x3a970d){var _0x15f6e2=new Final(_0x49be25);_0x15f6e2['state']=0xf;_0x15f6e2[_0x0586('0xa6')]=_0x0586('0x193');this[_0x0586('0x188')](_0x15f6e2,_0x15ef09,_0x3e404b,_0x3a970d);};Dialer[_0x0586('0x1a')][_0x0586('0x188')]=function(_0x1e26c6,_0x687e09,_0x236908,_0x58d96c){this['moveContactManagedDialer'](_0x1e26c6)[_0x0586('0xb6')](function(_0x1b24e9){return _0x687e09(msgResponse(_0x0586('0x184'),'Success',_0x58d96c));})[_0x0586('0xae')](function(_0x5640e0){return _0x236908(msgResponse(_0x0586('0x194'),_0x0586('0x128'),_0x0586('0x195')));});};Dialer[_0x0586('0x1a')][_0x0586('0x8')]=function(_0x5830c8){var _0x3bbb40=this;var _0x1afd3f=_0x5830c8['dialPredictiveOptimizationPercentage']/0x64;var _0x144679=_0x5830c8['outboundDropCallsDayTimeout']/(_0x5830c8['outboundDropCallsDayTimeout']+_0x5830c8[_0x0586('0x60')]);var _0xa4db09=Math[_0x0586('0x196')](_0x5830c8[_0x0586('0x75')]*(_0x5830c8[_0x0586('0x197')]/0x64));var _0x1b405f=Math['round'](_0x5830c8[_0x0586('0x75')]*(_0x5830c8[_0x0586('0x198')]/0x64));var _0x8ede6c=_0x5830c8['available']+_0x5830c8[_0x0586('0x56')];var _0x2da74b=Math[_0x0586('0x199')](_0x5830c8[_0x0586('0x78')]*_0x5830c8['erlangAbandonmentRate']*_0x5830c8[_0x0586('0x72')]*_0x5830c8[_0x0586('0x73')]);if(_[_0x0586('0x3d')](_0x5830c8['startProgressive'])){if(!_[_0x0586('0x3d')](_0x5830c8['startPredictive'])){_0x5830c8[_0x0586('0x7b')]=undefined;loggerPredictive['error']('[startMethodPredictive][StartProgressive]',_0x0586('0x19a'));}if(!_['isUndefined'](_0x5830c8[_0x0586('0x95')])){loggerPredictive[_0x0586('0x9b')](_0x0586('0x19b'),_0x0586('0x19c'));clearInterval(_0x5830c8[_0x0586('0x95')]);_0x5830c8[_0x0586('0x95')]=undefined;}_0x5830c8[_0x0586('0x27')]=moment()[_0x0586('0x7f')](_0x0586('0xf6'));loggerPredictive[_0x0586('0x84')](_0x5830c8['name'],_0x0586('0x19d'),_0x5830c8[_0x0586('0x27')]);this['handlePower'](_0x5830c8,0x1);}else if(ifInterval(_0x5830c8[_0x0586('0x19e')],_0x5830c8['startProgressive'])){this[_0x0586('0x137')](_0x5830c8,0x1);loggerPredictiveCalls[_0x0586('0x84')](_0x0586('0x19f'),_0x5830c8[_0x0586('0x27')],_0x5830c8[_0x0586('0x3f')]);_0x5830c8[_0x0586('0x78')]=0x0;_0x5830c8[_0x0586('0x71')]=0x0;}else if(_0x1afd3f<_0x144679&&_0x5830c8[_0x0586('0x1a0')]==='dropRate'){freeVariablesPredictive(_0x5830c8);loggerPredictive[_0x0586('0x84')](_0x0586('0x1a1'),'Dropped\x20calls\x20day',_0x144679,_0x0586('0x27'),_0x5830c8[_0x0586('0x3f')]);}else if(_0x2da74b<_0x5830c8[_0x0586('0x71')]&&_0x5830c8['dialPredictiveOptimization']===_0x0586('0x1a2')){freeVariablesPredictive(_0x5830c8);loggerPredictive['info'](_0x0586('0x1a3'),_0x0586('0x1a4'),_0x2da74b,_0x0586('0x1a5'),_0x5830c8['predictiveIntervalErlangCallsDroppedCalls'],_0x0586('0x27'),_0x5830c8[_0x0586('0x3f')]);}else if(!ifInterval(_0x5830c8[_0x0586('0x19e')],_0x5830c8[_0x0586('0x27')])&&_[_0x0586('0x3d')](_0x5830c8[_0x0586('0x7b')])&&!_[_0x0586('0x3d')](_0x5830c8[_0x0586('0x27')])){_0x5830c8[_0x0586('0x7b')]=moment()[_0x0586('0x7f')](_0x0586('0xf6'));loggerPredictive[_0x0586('0x84')](_0x5830c8['name'],_0x0586('0x1a6'),_0x5830c8[_0x0586('0x7b')]);this[_0x0586('0xbb')](_0x5830c8[_0x0586('0x19e')])[_0x0586('0xb6')](this['getDataPredictive'](_0x5830c8))[_0x0586('0xb6')](mergeDataErlangB(_0x5830c8))['then'](this[_0x0586('0x1a7')](_0x5830c8))[_0x0586('0xae')](loggerCatchPredictive(_0x0586('0x1a8'),_0x5830c8));}else if(!ifInterval(_0x5830c8['dialPredictiveInterval'],_0x5830c8['startPredictive'])){_0x5830c8[_0x0586('0x71')]=0x0;_0x5830c8['startPredictive']=moment()['format'](_0x0586('0xf6'));loggerPredictive['info'](_0x5830c8[_0x0586('0x3f')],_0x0586('0x1a9'),_0x5830c8['startPredictive']);clearInterval(_0x5830c8[_0x0586('0x95')]);_0x5830c8[_0x0586('0x95')]=undefined;this[_0x0586('0xbb')](_0x5830c8['dialPredictiveInterval'])[_0x0586('0xb6')](this['getDataPredictive'](_0x5830c8))[_0x0586('0xb6')](mergeDataErlangB(_0x5830c8))[_0x0586('0xb6')](this[_0x0586('0x1a7')](_0x5830c8))[_0x0586('0xae')](loggerCatchPredictive('Predictive\x20for\x20every\x20interval',_0x5830c8));}else if(_0x5830c8[_0x0586('0x75')]&&_0x8ede6c<_0x5830c8['predictiveIntervalAvailable']-_0x1b405f){freeVariablesPredictive(_0x5830c8);loggerPredictive[_0x0586('0x84')](_0x5830c8[_0x0586('0x3f')],_0x0586('0x1aa'),_0x8ede6c,')\x20are\x20less\x20than\x20threshold\x20(',_0x5830c8[_0x0586('0x75')],'-',_0x1b405f,'=',_0x5830c8[_0x0586('0x75')]-_0x1b405f,')');}else if(_0x5830c8[_0x0586('0x75')]&&_0x8ede6c>_0x5830c8[_0x0586('0x75')]+_0xa4db09){freeVariablesPredictive(_0x5830c8);loggerPredictive['info'](_0x5830c8['name'],_0x0586('0x1aa'),_0x8ede6c,_0x0586('0x1ab'),_0x5830c8[_0x0586('0x75')],'+',_0xa4db09,'=',_0x5830c8[_0x0586('0x75')]+_0xa4db09,')');}};Dialer[_0x0586('0x1a')]['getDataPredictive']=function(_0x123023){var _0x44aeb4=this;return function(_0x29d70c){return new BPromise(function(_0x6c56d4,_0x551420){_[_0x0586('0xcc')](_0x123023,_0x29d70c[0x0]);if(checkGetDataPredictive(_0x29d70c[0x0])){var _0x1b3c20=_0x123023[_0x0586('0x75')]=_0x123023['talking']+_0x123023[_0x0586('0x52')];var _0x4443cf=_0x123023[_0x0586('0x19e')]*0x3c;var _0x3b5ea3=_0x29d70c[0x0][_0x0586('0x6d')]+_0x29d70c[0x0][_0x0586('0x6c')];var _0x2864a2=(_0x29d70c[0x0][_0x0586('0x6b')]+_0x29d70c[0x0][_0x0586('0x6f')]+_0x29d70c[0x0][_0x0586('0x6e')])/_0x29d70c[0x0][_0x0586('0x76')];_0x123023[_0x0586('0x72')]=_0x2864a2>0x0?_0x2864a2:0x1;switch(_0x123023['dialPredictiveOptimization']){case _0x0586('0x1a2'):var _0x1dc876=_0x123023[_0x0586('0x1ac')]/0x64;return _0x44aeb4['abandonmentRate'](_0x1b3c20,_0x4443cf,_0x3b5ea3,_0x2864a2,_0x1dc876)[_0x0586('0xb6')](function(_0xe98ff2){return _0x6c56d4(_0xe98ff2);});case'agentBusyFactor':var _0xf599a9=_0x123023['dialPredictiveOptimizationPercentage']/0x64;return _0x44aeb4[_0x0586('0x1ad')](_0x1b3c20,_0x4443cf,_0x3b5ea3,_0x2864a2,_0xf599a9)[_0x0586('0xb6')](function(_0x4b22da){return _0x6c56d4(_0x4b22da);});default:return _0x551420(msgResponse(_0x0586('0x1ae'),_0x0586('0x128'),_0x0586('0x1af')));}}else{return _0x551420(msgResponse(_0x0586('0x1ae'),'Failure',_0x0586('0x1b0')));}});};};Dialer[_0x0586('0x1a')]['getDataPredictiveOld']=function(_0x2b35c5){var _0x27b484=this;return function(_0x57408d){return new BPromise(function(_0x6d6f66,_0x44864f){_[_0x0586('0xcc')](_0x2b35c5,_0x57408d[0x0]);if(checkGetDataPredictive(_0x57408d[0x0])){loggerPredictive[_0x0586('0x84')](JSON[_0x0586('0x49')](_0x57408d[0x0]));if(_0x2b35c5[_0x0586('0x1a0')]===_0x0586('0x1a2')){return _0x27b484[_0x0586('0xc3')](_0x2b35c5['id'])[_0x0586('0xb6')](function(_0x533d64){var _0x47bb5e=_0x2b35c5[_0x0586('0x53')]-_0x533d64[0x0]['outboundQueuePauses'];var _0x456f74=_0x2b35c5[_0x0586('0x19e')]*0x3c;var _0x1feb62=_0x57408d[0x0][_0x0586('0x6d')]+_0x57408d[0x0][_0x0586('0x6c')];var _0x4882bc=(_0x57408d[0x0][_0x0586('0x6b')]+_0x57408d[0x0][_0x0586('0x6f')]+_0x57408d[0x0][_0x0586('0x6e')])/_0x57408d[0x0]['predictiveIntervalTotalCalls'];var _0x2553af=_0x2b35c5[_0x0586('0x1ac')]/0x64;_0x2b35c5['predictiveIntervalPauses']=_0x533d64[0x0]['outboundQueuePauses']||0x0;_0x2b35c5[_0x0586('0x72')]=_0x4882bc>0x0?_0x4882bc:0x1;return _0x27b484[_0x0586('0x1b1')](_0x47bb5e,_0x456f74,_0x1feb62,_0x4882bc,_0x2553af);})[_0x0586('0xb6')](function(_0x428c96){return _0x6d6f66(_0x428c96);})[_0x0586('0xae')](function(_0x5b3748){return _0x44864f(msgResponse('[CatchErlangB]',_0x0586('0x128'),JSON[_0x0586('0x49')](_0x5b3748)));});}if(_0x2b35c5[_0x0586('0x1a0')]==='agentBusyFactor'){return _0x27b484[_0x0586('0xc3')](_0x2b35c5['id'])['then'](function(_0xcef826){var _0x5b11ea=_0x2b35c5[_0x0586('0x53')]-_0xcef826[0x0][_0x0586('0x1b2')];var _0x32b77a=_0x2b35c5[_0x0586('0x19e')]*0x3c;var _0x2773b7=_0x57408d[0x0][_0x0586('0x6d')]+_0x57408d[0x0][_0x0586('0x6c')];var _0x3e6cf4=(_0x57408d[0x0][_0x0586('0x6b')]+_0x57408d[0x0]['predictiveIntervalDroppedCallsTimeout']+_0x57408d[0x0][_0x0586('0x6e')])/_0x57408d[0x0]['predictiveIntervalTotalCalls'];var _0x4a2dc9=_0x2b35c5[_0x0586('0x1ac')]/0x64;_0x2b35c5[_0x0586('0x74')]=_0xcef826[0x0][_0x0586('0x1b2')]||0x0;_0x2b35c5[_0x0586('0x72')]=_0x3e6cf4>0x0?_0x3e6cf4:0x1;return _0x27b484[_0x0586('0x1ad')](_0x5b11ea,_0x32b77a,_0x2773b7,_0x3e6cf4,_0x4a2dc9);})[_0x0586('0xb6')](function(_0x34229e){return _0x6d6f66(_0x34229e);})[_0x0586('0xae')](function(_0xa1ca68){return _0x44864f(msgResponse(_0x0586('0x1b3'),_0x0586('0x128'),JSON[_0x0586('0x49')](_0xa1ca68)));});}}else{return _0x44864f(msgResponse(_0x0586('0x1ae'),_0x0586('0x128'),_0x0586('0x1b0')));}});};};Dialer['prototype'][_0x0586('0x1a7')]=function(_0x1c1d03){var _0x219506=this;return function(){var _0xd9b3ec=0x0;var _0x15c5d8=Math[_0x0586('0x199')](_0x1c1d03['erlangCallToSecond']*0x3e8);if(_0x15c5d8>0x0){_0x15c5d8=_0x15c5d8<0x64?0x64:_0x15c5d8;loggerPredictive[_0x0586('0x84')](_0x1c1d03[_0x0586('0x3f')],_0x0586('0x1b4'),_0x15c5d8,_0x0586('0x4a'));_0x1c1d03[_0x0586('0x95')]=setInterval(function(){_0x219506['handlePredictive'](_0x1c1d03);loggerPredictiveCalls[_0x0586('0x84')]('[handlePredictive]',_0xd9b3ec+=0x1);},_0x15c5d8);}else{loggerPredictive[_0x0586('0x84')](_0x1c1d03[_0x0586('0x3f')],'fail\x20to\x20scheduled\x20calls');}};};Dialer[_0x0586('0x1a')][_0x0586('0x1b5')]=function(_0x38f47f,_0x3eb2f7){var _0x46a16f=this;return function(_0x346b31){if(_[_0x0586('0x46')](_0x346b31)){if(_[_0x0586('0xab')](_0x3eb2f7['UserId'])||!_0x3eb2f7[_0x0586('0x1b6')]){if(_0x38f47f[_0x0586('0x5c')]===_0x0586('0x7')){_0x38f47f[_0x0586('0x10a')]=_[_0x0586('0x3d')](_0x38f47f[_0x0586('0x10a')])?!![]:_0x38f47f[_0x0586('0x10a')];var _0x474d69=uuid['v4']();_0x46a16f[_0x0586('0x24')][_0x474d69]=new Action(_0x38f47f,_0x3eb2f7,_0x474d69);loggerBooked[_0x0586('0x84')]('[booked][checkContactBlack]',_0x474d69,_0x0586('0x1b7'),JSON['stringify'](_0x38f47f['queueStatusComplete']),_0x0586('0x1b8'),_0x38f47f['name']);if(_0x38f47f['queueStatusComplete']){_0x38f47f[_0x0586('0x10a')]=![];_0x46a16f[_0x0586('0x29')][_0x46a16f[_0x0586('0x24')][_0x474d69][_0x0586('0xb1')]]=[];ami[_0x0586('0x12b')]({'actionid':_0x474d69,'action':_0x0586('0x1b9'),'queue':_0x38f47f[_0x0586('0x3f')]})['catch'](function(_0x487521){_0x46a16f[_0x0586('0xb0')](_0x38f47f);_0x46a16f['rescheduleContact']({'active':![],'ContactId':_0x46a16f[_0x0586('0x24')][_0x474d69][_0x0586('0xce')],'ListId':_0x46a16f['actions'][_0x474d69][_0x0586('0x119')],'VoiceQueueId':_0x46a16f[_0x0586('0x24')][_0x474d69]['VoiceQueueId']||undefined,'CampaignId':_0x46a16f[_0x0586('0x24')][_0x474d69]['CampaignId']||undefined})[_0x0586('0xae')](loggerCatch(_0x0586('0x1ba')));delete _0x46a16f['actions'][_0x474d69];});}else{loggerBooked[_0x0586('0x84')](_0x0586('0x1bb'),JSON[_0x0586('0x49')](_0x38f47f[_0x0586('0x10a')]),_0x0586('0x1b8'),_0x38f47f[_0x0586('0x3f')]);_0x46a16f[_0x0586('0xb0')](_0x38f47f);_0x46a16f['rescheduleContact']({'active':![],'ContactId':_0x46a16f[_0x0586('0x24')][_0x474d69][_0x0586('0xce')],'ListId':_0x46a16f['actions'][_0x474d69][_0x0586('0x119')],'VoiceQueueId':_0x46a16f[_0x0586('0x24')][_0x474d69][_0x0586('0xd0')]||undefined,'CampaignId':_0x46a16f['actions'][_0x474d69]['CampaignId']||undefined})[_0x0586('0xae')](loggerCatch(_0x0586('0x1ba')));delete _0x46a16f[_0x0586('0x24')][_0x474d69];}}else{return _0x46a16f[_0x0586('0x142')](_0x38f47f,_0x3eb2f7);}}else{if(getDiff(_0x3eb2f7['scheduledat'])<_0x38f47f['dialRecallMeTimeout']*0x3c){_0x46a16f[_0x0586('0x1e')][_0x0586('0x115')](_0x3eb2f7['id'])[_0x0586('0x1d')](function(){_0x46a16f[_0x0586('0xb0')](_0x38f47f);});}else{_0x38f47f[_0x0586('0x68')]+=0x1;_0x46a16f[_0x0586('0xb0')](_0x38f47f);if(_0x38f47f[_0x0586('0x1bc')]){_0x46a16f['rescheduleContact']({'active':![],'recallme':![],'UserId':null,'ContactId':_0x3eb2f7[_0x0586('0xce')],'ListId':_0x3eb2f7['ListId'],'VoiceQueueId':_0x3eb2f7[_0x0586('0xd0')]||undefined,'CampaignId':_0x3eb2f7['CampaignId']||undefined})[_0x0586('0xae')](loggerCatch('[rescheduleContact][dialRecallInQueue]'));_0x46a16f[_0x0586('0xc6')](createObjHistory(_0x38f47f,_0x3eb2f7,_0x0586('0x1bd'),0x17,_0x0586('0x1be')))[_0x0586('0xae')](loggerCatch(_0x0586('0x1bf')));}else{_0x46a16f[_0x0586('0xd8')](createObjHistory(_0x38f47f,_0x3eb2f7,_0x0586('0x1c0'),0x16,_0x0586('0x1c1')),_0x0586('0x1c2'),'[Originate][HistoryRecallClose]');}}}}else{_0x38f47f[_0x0586('0x61')]+=0x1;_0x46a16f[_0x0586('0xd8')](createObjHistory(_0x38f47f,_0x3eb2f7,_0x0586('0x1c3'),0xd,_0x0586('0x1c4')),_0x0586('0x1c5'),_0x0586('0x1c6'));throw _0x0586('0x1c7');}};};Dialer['prototype']['handleIvr']=function(_0x5bf245){var _0x17bba9=this;var _0x578554=[];var _0x456006=_0x5bf245[_0x0586('0x1c8')]-_0x5bf245['originated']-_0x5bf245['temp'];emitCampaignSummary(_0x5bf245);if(_0x456006>0x0){if(_0x456006>this[_0x0586('0x23')]){_0x456006=this[_0x0586('0x23')];}_0x5bf245[_0x0586('0x1c9')]+=_0x456006;this['getContactDialerIvr'](_0x5bf245['id'],_0x456006,_0x5bf245[_0x0586('0x1ca')])['then'](function(_0x28c18f){_0x5bf245[_0x0586('0x1c9')]-=_0x456006;_0x5bf245[_0x0586('0x1c9')]=_0x5bf245[_0x0586('0x1c9')]>0x0?_0x5bf245[_0x0586('0x1c9')]:0x0;if(!checkContactEmpty(_0x28c18f)){_0x5bf245[_0x0586('0x41')]=_0x0586('0xa1');logger[_0x0586('0x84')](_0x0586('0x1cb')+_0x5bf245[_0x0586('0x3f')]);}else{_0x5bf245[_0x0586('0x77')]+=_0x28c18f['length'];_0x5bf245['message']=_0x0586('0x1cc');for(var _0x2fd7b8=0x0;_0x2fd7b8<_0x28c18f[_0x0586('0x10f')];_0x2fd7b8+=0x1){_0x5bf245[_0x0586('0x1cd')]+=0x1;if(_[_0x0586('0xab')](_0x28c18f[_0x2fd7b8])||_[_0x0586('0xab')](_0x28c18f[_0x2fd7b8][_0x0586('0x147')])||_[_0x0586('0xab')](_0x28c18f[_0x2fd7b8][_0x0586('0x147')]['phone'])){_0x17bba9['emptyContact'](_0x0586('0x1ce'),_0x5bf245,_0x28c18f[_0x2fd7b8]);}else{_0x17bba9[_0x0586('0xb9')](_[_0x0586('0xcd')](_0x28c18f[_0x2fd7b8],['CampaignId',_0x0586('0x1cf')]))[_0x0586('0xb6')](_0x17bba9[_0x0586('0x1b5')](_0x5bf245,_0x28c18f[_0x2fd7b8]))[_0x0586('0xae')](_0x17bba9[_0x0586('0xca')](_0x0586('0x1d0'),_0x5bf245));}}}})['catch'](loggerGetContactDialer('[getContactCampaign2]',_0x5bf245,_0x456006));}};Dialer[_0x0586('0x1a')][_0x0586('0x137')]=function(_0x37f73f,_0x2ae0f9){var _0x141d76=this;var _0x5f5793=[];var _0x1bb38d=_0x2ae0f9>=0x1?_0x2ae0f9:0x1;var _0x4e01f2=[];if(_0x37f73f[_0x0586('0x5c')]===_0x0586('0x7')){_0x1bb38d=0x1;}var _0x2a2d19=Math[_0x0586('0x199')](_0x37f73f[_0x0586('0x52')]*_0x1bb38d)-_0x37f73f[_0x0586('0x77')]-_0x37f73f[_0x0586('0x1c9')];emitVoiceQueueSummary(_0x37f73f);if(_0x37f73f['dialLimitQueue']>0x0){var _0x229753=_0x37f73f[_0x0586('0x1d1')]-_0x37f73f[_0x0586('0x77')]-_0x37f73f[_0x0586('0x56')]-_0x37f73f[_0x0586('0x1c9')]-_0x37f73f['pTalking'];if(_0x2a2d19>_0x229753){_0x2a2d19=_0x229753;}}if(_0x2a2d19>0x0){if(_0x37f73f[_0x0586('0x5c')]===_0x0586('0x7')){_0x2a2d19=0x1;}if(_0x2a2d19>this[_0x0586('0x23')]){_0x2a2d19=this[_0x0586('0x23')];}_0x37f73f[_0x0586('0x1c9')]+=_0x2a2d19;for(var _0xdc9094 in this[_0x0586('0x21')]){if(this[_0x0586('0x21')]['hasOwnProperty'](_0xdc9094)){if(this[_0x0586('0x21')][_0xdc9094][_0x0586('0xdf')]===_0x0586('0x1d2')&&this[_0x0586('0x21')][_0xdc9094][_0x0586('0xac')]===_0x0586('0xd7')){_0x5f5793[_0x0586('0x109')](this[_0x0586('0x21')][_0xdc9094]['id']);}}}this[_0x0586('0xc0')](_0x37f73f['id'],_0x5f5793,_0x2a2d19,_0x37f73f['dialOrderByScheduledAt'])[_0x0586('0xb6')](function(_0x124e6e){_0x37f73f['temp']-=_0x2a2d19;_0x37f73f[_0x0586('0x1c9')]=_0x37f73f['temp']>0x0?_0x37f73f[_0x0586('0x1c9')]:0x0;if(!checkContactEmpty(_0x124e6e)){_0x141d76[_0x0586('0xb4')](_0x37f73f)[_0x0586('0xb6')](sendMessageReschedule(_0x37f73f))[_0x0586('0xae')](loggerCatch(_0x0586('0xb5')));}else{_0x37f73f[_0x0586('0x77')]+=_0x124e6e[_0x0586('0x10f')];_0x37f73f[_0x0586('0x41')]=_0x37f73f['dialMethod']===_0x0586('0x7')?'ACTIVE':'RUNNING';for(var _0x13bb44=0x0;_0x13bb44<_0x124e6e['length'];_0x13bb44+=0x1){if(_[_0x0586('0xab')](_0x124e6e[_0x13bb44])||_['isNil'](_0x124e6e[_0x13bb44][_0x0586('0x147')])||_[_0x0586('0xab')](_0x124e6e[_0x13bb44][_0x0586('0x147')][_0x0586('0x146')])){_0x141d76['emptyContact'](_0x0586('0x1ce'),_0x37f73f,_0x124e6e[_0x13bb44]);}else{_0x141d76[_0x0586('0xb7')](_['pick'](_0x124e6e[_0x13bb44],[_0x0586('0xd0'),_0x0586('0x1cf')]))[_0x0586('0xb6')](_0x141d76[_0x0586('0x1b5')](_0x37f73f,_0x124e6e[_0x13bb44]))['catch'](_0x141d76['loggerHandler'](_0x0586('0x1ce'),_0x37f73f));}}}})[_0x0586('0xae')](loggerGetContactDialer(_0x0586('0x1d3'),_0x37f73f,_0x2a2d19));}};Dialer[_0x0586('0x1a')]['handlePredictive']=function(_0x3031fa){var _0x55f9de=this;if(_0x3031fa[_0x0586('0x1d1')]>0x0){var _0x51344f=_0x3031fa[_0x0586('0x1d1')]-_0x3031fa[_0x0586('0x77')]-_0x3031fa['talking'];if(_0x51344f>0x0){this[_0x0586('0x1d4')](_0x3031fa);}else{loggerPredictiveCalls[_0x0586('0x84')](_0x0586('0x1d5'));}}else{this[_0x0586('0x1d4')](_0x3031fa);}};Dialer[_0x0586('0x1a')][_0x0586('0x1d4')]=function(_0x4812b5){var _0xe7b24b=this;var _0x420bf8=[];_0x4812b5[_0x0586('0x77')]+=0x1;for(var _0x57e5f4 in this['agents']){if(this[_0x0586('0x21')]['hasOwnProperty'](_0x57e5f4)){if(this['agents'][_0x57e5f4]['state']===_0x0586('0x1d2')&&this[_0x0586('0x21')][_0x57e5f4]['status']===_0x0586('0xd7')){_0x420bf8[_0x0586('0x109')](this[_0x0586('0x21')][_0x57e5f4]['id']);}}}this['getContactDialer'](_0x4812b5['id'],_0x420bf8,0x1,_0x4812b5[_0x0586('0x1ca')])['then'](function(_0x556a39){if(!checkContactEmpty(_0x556a39)){checkContactLowerLimitOriginate(_0x4812b5,0x1,0x0);_0xe7b24b['countReScheduled'](_0x4812b5)[_0x0586('0xb6')](sendMessageReschedule(_0x4812b5))[_0x0586('0xae')](loggerCatch(_0x0586('0xb5')));}else{_0x4812b5['message']=_0x0586('0x1cc');if(_[_0x0586('0xab')](_0x556a39[0x0])||_[_0x0586('0xab')](_0x556a39[0x0][_0x0586('0x147')])||_[_0x0586('0xab')](_0x556a39[0x0][_0x0586('0x147')][_0x0586('0x146')])){_0xe7b24b[_0x0586('0x1d6')](_0x0586('0x1ce'),_0x4812b5,_0x556a39[0x0]);}else{_0xe7b24b[_0x0586('0xb7')](_['pick'](_0x556a39[0x0],[_0x0586('0xd0'),_0x0586('0x1cf')]))[_0x0586('0xb6')](_0xe7b24b['checkContactBlack'](_0x4812b5,_0x556a39[0x0]))[_0x0586('0xae')](_0xe7b24b[_0x0586('0xca')](_0x0586('0x1d7'),_0x4812b5));}}})[_0x0586('0xae')](loggerGetContactDialer(_0x0586('0x1d8'),_0x4812b5,0x1));emitVoiceQueueSummary(_0x4812b5);};Dialer[_0x0586('0x1a')][_0x0586('0x1b1')]=function(_0x10d710,_0x2fadeb,_0x136690,_0x4b531f,_0x277106,_0x4d3d34){loggerPredictive[_0x0586('0x84')]('--------\x20Drop\x20Rate\x20--------');loggerPredictive[_0x0586('0x84')](_0x0586('0x1d9'),_0x10d710);loggerPredictive[_0x0586('0x84')](_0x0586('0x1da'),_0x2fadeb);loggerPredictive['info'](_0x0586('0x1db'),_0x136690);loggerPredictive[_0x0586('0x84')](_0x0586('0x1dc'),_0x4b531f);loggerPredictive[_0x0586('0x84')](_0x0586('0x1dd'),_0x277106);loggerPredictive['info'](_0x0586('0x8a'));return new BPromise(function(_0x5a2dcb,_0x29ab58){if(_0x10d710<=0x0||isNaN(_0x10d710)){return _0x29ab58(msgResponse('[abandonmentRate]',_0x0586('0x173'),_0x0586('0x1de')+_0x10d710));}if(_0x136690<=0x0||isNaN(_0x136690)){return _0x29ab58(msgResponse('[abandonmentRate]','Error',_0x0586('0x1df')+_0x136690));}if(_0x4b531f<=0x0||isNaN(_0x4b531f)){return _0x29ab58(msgResponse(_0x0586('0x1e0'),_0x0586('0x173'),_0x0586('0x1e1')+_0x4b531f));}if(_0x2fadeb<=0x0||isNaN(_0x2fadeb)){return _0x29ab58(msgResponse('[abandonmentRate]',_0x0586('0x173'),_0x0586('0x1e2')+_0x2fadeb));}if(_0x277106<=0x0||isNaN(_0x277106)){return _0x29ab58(msgResponse(_0x0586('0x1e0'),_0x0586('0x173'),_0x0586('0x1e3')+_0x277106));}_0x4d3d34=_0x4d3d34||0x0;var _0x116b07=0x1/_0x136690;var _0x20ddf7=0x0;var _0x3db53a=0x0;var _0x3b8922=0x0;var _0x24437e=0x0;for(var _0x27b279=0x0;_0x3b8922<_0x277106;_0x27b279+=0x1){_0x3db53a=_0x27b279/_0x2fadeb;_0x20ddf7=(_0x4b531f*_0x3db53a+_0x4d3d34)/_0x116b07;_0x3b8922=erlangb(_0x20ddf7,_0x10d710);_0x24437e=_0x20ddf7/_0x10d710*(0x1-erlangb(_0x20ddf7,_0x10d710));}return _0x5a2dcb({'erlangCalls':_0x27b279,'erlangCallToSecond':_0x2fadeb/_0x27b279,'erlangAbandonmentRate':_0x3b8922,'erlangBusyFactor':_0x24437e});});};Dialer[_0x0586('0x1a')]['busyFactor']=function(_0x281451,_0xa025f1,_0x2f9a1a,_0xf4a5a9,_0x38ca10,_0x44ef33){loggerPredictive['info'](_0x0586('0x1e4'));loggerPredictive['info'](_0x0586('0x1d9'),_0x281451);loggerPredictive['info']('Interval:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0xa025f1);loggerPredictive[_0x0586('0x84')]('Ts:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x2f9a1a);loggerPredictive[_0x0586('0x84')](_0x0586('0x1dc'),_0xf4a5a9);loggerPredictive[_0x0586('0x84')](_0x0586('0x1e5'),_0x38ca10);loggerPredictive[_0x0586('0x84')]('---------------------------');return new BPromise(function(_0x37440e,_0x5cf30d){if(_0x281451<=0x0||isNaN(_0x281451)){return _0x5cf30d(msgResponse(_0x0586('0x1e6'),_0x0586('0x173'),_0x0586('0x1de')+_0x281451));}if(_0x2f9a1a<=0x0||isNaN(_0x2f9a1a)){return _0x5cf30d(msgResponse(_0x0586('0x1e6'),_0x0586('0x173'),_0x0586('0x1df')+_0x2f9a1a));}if(_0xf4a5a9<=0x0||isNaN(_0xf4a5a9)){return _0x5cf30d(msgResponse(_0x0586('0x1e6'),_0x0586('0x173'),_0x0586('0x1e1')+_0xf4a5a9));}if(_0xa025f1<=0x0||isNaN(_0xa025f1)){return _0x5cf30d(msgResponse(_0x0586('0x1e6'),_0x0586('0x173'),'interval\x20=\x20'+_0xa025f1));}if(_0x38ca10<=0x0||isNaN(_0x38ca10)){return _0x5cf30d(msgResponse(_0x0586('0x1e6'),_0x0586('0x173'),_0x0586('0x1e7')+_0x38ca10));}_0x44ef33=_0x44ef33||0x0;var _0x130140=0x1/_0x2f9a1a;var _0x260015=0x0;var _0x3a5c1d=0x0;var _0x441d3f=0x0;var _0x5648db=0x0;for(var _0x2fd0bd=0x0;_0x5648db<_0x38ca10;_0x2fd0bd+=0x1){_0x3a5c1d=_0x2fd0bd/_0xa025f1;_0x260015=(_0xf4a5a9*_0x3a5c1d+_0x44ef33)/_0x130140;_0x441d3f=erlangb(_0x260015,_0x281451);_0x5648db=_0x260015/_0x281451*(0x1-erlangb(_0x260015,_0x281451));}return _0x37440e({'erlangCalls':_0x2fd0bd,'erlangCallToSecond':_0xa025f1/_0x2fd0bd,'erlangAbandonmentRate':_0x441d3f,'erlangBusyFactor':_0x5648db});});};module[_0x0586('0x1e8')]=Dialer;
\ No newline at end of file
+var _0x53cb=['[rescheduleContact][NoAnswer]','dialBusyMaxRetry','dialBusyRetryFrequency','countcongestionretry','dialCongestionRetryFrequency','[rescheduleContact]\x20[Congestion]','[callProgressDetecting]','entity\x20is\x20undefine','evt\x20is\x20undefine','reason','NoSuchNumber','stateGlobal','reason\x200\x20no\x20such\x20number....','createStateFinal','NoAnswer','countglobal','reason\x203\x20ringing\x20no\x20answer','Busy','[syncAgentComplete][createHistory][5]','reason\x205\x20busy','Congestion','[syncAgentComplete][createHistory][8]','dialCongestionMaxRetry','reason\x208\x20congestion','[syncAgentComplete][createHistory][?]','Global','[moveContactManagedDialer][0]','contact\x20not\x20moved','dialPredictiveOptimizationPercentage','predictiveIntervalAvailable','predictiveIntervalMaxThreshold','round','predictiveIntervalMinThreshold','floor','predictiveIntervalMultiplicativeFactor','[startMethodPredictive][StartProgressive]','check\x20predictive\x20is\x20not\x20undefine','check\x20handlePredictive\x20is\x20not\x20undefine','collection\x20data\x20in\x20progressive\x20at','dialPredictiveInterval','[startMethodPredictive][StartProgressive][Loop]','dialPredictiveOptimization','dropRate','Dropped\x20calls\x20day','[stopMethodPredictive][ReStartProgressive][ExceededDropInterval]','Max\x20Drop\x20','Predictive\x20after\x20first\x20interval','recalculate\x20predictive\x20at','getDataPredictive','startMethodPredictive','Predictive\x20for\x20every\x20interval',')\x20are\x20less\x20than\x20threshold\x20(','switch\x20in\x20progressive\x20because\x20available\x20agents\x20(',')\x20are\x20more\x20than\x20threshold\x20(','abandonmentRate','[getDataPredictive]','check\x20failure','getDataPredictiveOld','outboundQueuePauses','[CatchErlangB]','busyFactor','one\x20call\x20every:','[handlePredictive]','fail\x20to\x20scheduled\x20calls','checkContactBlack','recallme','[booked][checkContactBlack]','queueStatusComplete:\x20','Queue:\x20','queuestatus','[unlockOriginate][syncQueueStatusComplete]','[booked][checkContactBlack][else]','scheduledat','dialRecallMeTimeout','dialRecallInQueue','[rescheduleContact][dialRecallInQueue]','RECALLINQUEUE','RecallInQueue','[Originate][HistoryDialRecallInQueue][historyCatch]','RECALLFAILEDTIMEOUT','RecallFailedTimeout','[Originate][HistoryRecallClose]','BLACKLIST','[Originate][historyBlacklist]','[Originate][MoveBlacklist]','inBlackList','limitCalls','dialOrderByScheduledAt','temp','AVAILABLE_CONTACTS_FINISHED','[getContactCampaign2][Empty]','RUNNING','[actionOriginate]\x20','Contact.phone','[actionOriginateIvr]\x20','[getContactCampaign2]','dialLimitQueue','[getContactDialer2]','[handlePredictive][limitChannel]','tryOriginatePredictive','reachable','[actionOriginatePredictive]\x20','--------\x20Drop\x20Rate\x20--------','M:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','Interval:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','P:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','Amax:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','[abandonmentRate]','m\x20=\x20','Ts\x20=\x20','p\x20=\x20','Amax\x20=\x20','Ts:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','[busyFactor]','interval\x20=\x20','Umin\x20=\x20','exports','util','bluebird','uuid','md5','ioredis','../../../config/environment/','booked','../../../config/logger','predictiveCalls','syncQueueSummary','redis','socket.io-emitter','../rpc/cmHopper','../rpc/cmHopperFinal','../rpc/cmHopperHistory','../rpc/cmHopperBlack','../rpc/voiceQueueRt','./action','./history','./final','./hangup','env','XCALLY_IP_AGI','127.0.0.1','roundrobin','prototype','tail','finally','voiceQueues','agents','trunks','maxNumberOriginate','channels','actions','contactsId','optionPredictive','startPredictive','ivrOriginated','queueBookedRR','agentconnect','syncAgentConnect','bind','queuecallerabandon','syncQueueCallerAbandon','syncOriginateResponse','syncAgentComplete','custom:queuesummary','syncHangup','newexten','syncNewExten','varset','syncVarSet','syncQueueMember','queuestatuscomplete','loopCampaigns','loopClearZombieChannels','isUndefined','message','AGENTS_NOT_LOGGED','name','NOT_ACTIVE','\x20NOT\x20Active','Interval','INTERVAL_IS_NULL','Intervals','\x20INTERVAL_IS_NULL','[ifTime][Action]','Error','stringify','milliseconds','diff','emit','outbound','available','sumDuration','sumHoldTime','talking','total','unmanaged','abandoned','waiting','loggedInDb','dialMethod','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundUnknownCallsDay','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','predictiveIntervalPauses','predictiveIntervalTotalCalls','erlangAbandonmentRate','erlangBusyFactor','startProgressive','Trunk','active','callerid','format','voice:queue:%s','type','campaign:ivr:%s','isEmpty','Total\x20Calls:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','info','Answered\x20Calls:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','predictiveIntervalAnsweredCalls','AVG\x20Hold\x20Time:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','AVG\x20Talk\x20Time:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','---------------------------','Avg\x20Talk\x20Time\x20is\x20not\x20enough\x20for\x20predictive','Avg\x20Hold\x20Time\x20is\x20not\x20enough\x20for\x20predictive','Total\x20Calls\x20are\x20not\x20enough\x20for\x20predictive','History\x20information\x20are\x20empty','---------\x20ErlangB\x20---------','Scheduled\x20Calls:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','erlangCalls','erlangCallToSecond','Drop\x20Rate:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','Agent\x20Busy\x20Factor:\x20\x20\x20\x20\x20\x20\x20\x20\x20','merge','clearing\x20variable\x20start\x20progressive','clearing\x20variable\x20start\x20predictive','handlePredictive','clearing\x20variable\x20handle\x20predictive','preview','ivr','string','\x22%s\x22\x20<%s>','\x22\x22\x20<>','error','stack','inspect','length','originated','[decremetOriginate]\x20object\x20originated\x20is\x20negative','[decremetOriginate]\x20is\x20null\x20or\x20undefined','contactsRescheduled','RESCHEDULED_CONTACTS','contacts','[getContactDialer2][Empty]','sendMessageOneNotActive','pTalking','[syncQueueSummary]\x20Campaign\x20Queue:\x20','IS_DISACTIVED','is\x20disactive','[syncQueueSummary]\x20Campaign\x20Ivr:\x20','state','statedesc','endtime','[uniqueid]','clearZombieChannels','[actions]','sequence','enqueue','isNil','channel','updateOriginated','queue','[Dialer][checkChannel]','campaigns','[Dialer][checkChannel][ivr]','countReScheduled','then','catch','[countReScheduled]\x20','checkIsBlackList','[checkIsBlackList]\x20','checkIsBlackListIvr','averageHandleTime','avgHandleTime','[averageHandleTime]\x20','rescheduleContact','resolve','[rescheduleContact]\x20','getContactDialer','getContactDialerIvr','[getContactDialer]\x20','getVoiceQueueRtPauses','[getVoiceQueueRtPauses]\x20','[moveContactManagedDialer]\x20','createHistory','[createHistory]\x20','[updateOriginated]\x20object\x20originated\x20is\x20negative','loggerHandler','emptyContact','notFound','pick','ContactId','ListId','UserId','CampaignId','[emptyContact][createHistory]','[emptyContact]','isSuccess','Success','isTrunkReachable','SIP/%s','status','unmonitored','saveInDb','moveContactManagedDialer','uniqueid','variable','amdstatus','exten','xcally-motion-dialer','HANGUP','uniqueId','membername','[syncHangupInAMD]','dialAMDActive','value','MACHINE','AMD','amd','[syncMachine]','HangupInAMD','Machine','[syncMachineIvr][createHistory]','[syncMachineIvr]','ivrAnswerCallsDay','[syncHangupIvr][createHistory]','[syncHangupIvr]','dialQueueProject','AnswerAGI','AGI','cause-txt','Unknow','agent','agiafterat','dialQueueProject2','YYYY-MM-DD\x20HH:mm:ss','[syncAgentComplete][createHistory]','answertime','queueCallerAbandonCreateState','droptime','dialQueueTimeout','outboundDropCallsDayTimeout','dropreason','outboundDropCallsDayCallersExit','Abandoned','actionid','strategy','locked','paused','stateinterface','rrmemory','queueBooked','push','idHopper','queueStatusComplete','[unlockQueueStatus][undefined]','[booked][unlockQueueStatus]','syncQueueStatusComplete','run','[Catch][Preview][syncQueueStatusComplete]','VoiceQueueId','[unlock][syncQueueStatusComplete]','_rr','unlockRR','[booked][RR]','contactAgent-idHopper:\x20','[booked][RR][finaly]','Agent:\x20','[booked][unlock]','[booked][unlock2]','[unlock2][syncQueueStatusComplete]','syncCampaigns','checkIsTrunkReachable','TrunkBackup','TRUNK_IS_NOT_REACHABLE','\x20trunk\x20is\x20not\x20reachable','ifTime','Failure','\x20Intervals\x20is\x20null\x20','\x20Intervals\x20is\x20empty\x20','timezones','TIMEZONE_UNKNOW','\x20Timezone\x20unknow\x20','isArray','command','iftime\x20%s,%s','interval','Action','content','indexOf','true','some','GLOBAL_INTERVAL_IS_OVERTIME','INTERVAL_IS_OVERTIME','Timezone:\x20','checkDialMethod','progressive','handlePower','power','dialPowerLevel','predictive','Queue','handleIvr','dialActive','checkIfTime','dialGlobalInterval','dialTimezone','checkIfTimeIntervals','[syncQueueSummary]','hasOwnProperty','launchHandleIvr','[syncCampaigns]','random','match','actionOriginate','object','originate','voiceQueue\x20is\x20undefine','Contact','phone','\x22agi://%s/square,%s\x22','NONE','dialAgiAfterHangupAgent','getCaller','ACTIVE','XMD-AMDGREETING','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDMinWordLength','XMD-AMDBETWEENWORDSSILENCE','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','XMD-AMDSILENCETHRESHOLD','dialAMDSilenceThreshold','XMD-AMDMAXIMUMWORDLENGTH','dialAMDMaximumWordLength','XMD-VOICEQUEUEID','XMD-CAMPAIGNID','tags','createdAt','XMD-','toUpper','dialOriginateCallerIdName','dialRandomLastDigitCallerIdNumber','XMD-ORIGINATECALLERIDNAME','originatecalleridname','XMD-ORIGINATECALLERIDNUM','originatecalleridnum','SIP/%s/%s%s','trim','dialCutDigit','substring','from-sip','[originateError]:\x20%s','starttime','[originate][error]','responsetime','getQueue','response','callProgressDetecting','[callProgressDetecting]\x20','checkRetriveMax','countbusyretry','dialGlobalMaxRetry','countnoanswerretry','dialNoAnswerMaxRetry','add','dialNoAnswerRetryFrequency','minutes'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0x53cb,0x75));var _0xb53c=function(_0x3d42d8,_0x4cffaa){_0x3d42d8=_0x3d42d8-0x0;var _0x27fc41=_0x53cb[_0x3d42d8];return _0x27fc41;};'use strict';var util=require(_0xb53c('0x0'));var _=require('lodash');var BPromise=require(_0xb53c('0x1'));var uuid=require(_0xb53c('0x2'));var moment=require('moment');var rr=require('rr');var md5=require(_0xb53c('0x3'));var Redis=require(_0xb53c('0x4'));var config=require(_0xb53c('0x5'));var logger=require('../../../config/logger')('dialer');var loggerBooked=require('../../../config/logger')(_0xb53c('0x6'));var loggerPredictive=require('../../../config/logger')('predictive');var loggerPredictiveCalls=require(_0xb53c('0x7'))(_0xb53c('0x8'));var loggerSyncQueueSummary=require(_0xb53c('0x7'))(_0xb53c('0x9'));var ami=require('../ami');config[_0xb53c('0xa')]=_['defaults'](config[_0xb53c('0xa')],{'host':'localhost','port':0x18eb});var io=require(_0xb53c('0xb'))(new Redis(config[_0xb53c('0xa')]));var cmHopper=require(_0xb53c('0xc'));var cmHopperFinal=require(_0xb53c('0xd'));var cmHopperHistory=require(_0xb53c('0xe'));var cmHopperBlack=require(_0xb53c('0xf'));var voiceQueueRt=require(_0xb53c('0x10'));var Action=require(_0xb53c('0x11'));var History=require(_0xb53c('0x12'));var Final=require(_0xb53c('0x13'));var AgentComplete=require('./agentComplete');var QueueCallerAbandon=require('./queueCallerAbandon');var Hangup=require(_0xb53c('0x14'));var ipAgi=process[_0xb53c('0x15')][_0xb53c('0x16')]||_0xb53c('0x17');var strategy={'rrmemory':'rrmemory','roundrobin':_0xb53c('0x18')};var Sequence=function(){};Sequence[_0xb53c('0x19')]['enqueue']=function(_0x3890c0){this[_0xb53c('0x1a')]=this[_0xb53c('0x1a')]?this[_0xb53c('0x1a')][_0xb53c('0x1b')](_0x3890c0):_0x3890c0();};function Dialer(_0x2ded74,_0x2615c6){this['sequence']=new Sequence();this['preview']=_0x2615c6;this[_0xb53c('0x1c')]=_0x2ded74[_0xb53c('0x1c')];this['campaigns']=_0x2ded74['campaigns'];this[_0xb53c('0x1d')]=_0x2ded74['agents'];this[_0xb53c('0x1e')]=_0x2ded74[_0xb53c('0x1e')];this[_0xb53c('0x1f')]=config['maxNumberOriginate']||0x2;this[_0xb53c('0x20')]={};this[_0xb53c('0x21')]={};this[_0xb53c('0x22')]={};this['uniqueId']={};this[_0xb53c('0x23')]={};this[_0xb53c('0x24')]={};this['startProgressive']={};this[_0xb53c('0x25')]={};this['queueBooked']={};this[_0xb53c('0x26')]={};ami['on'](_0xb53c('0x27'),this[_0xb53c('0x28')][_0xb53c('0x29')](this));ami['on'](_0xb53c('0x2a'),this[_0xb53c('0x2b')]['bind'](this));ami['on']('originateresponse',this[_0xb53c('0x2c')][_0xb53c('0x29')](this));ami['on']('agentcomplete',this[_0xb53c('0x2d')]['bind'](this));ami['on'](_0xb53c('0x2e'),this[_0xb53c('0x9')][_0xb53c('0x29')](this));ami['on']('hangup',this[_0xb53c('0x2f')][_0xb53c('0x29')](this));ami['on'](_0xb53c('0x30'),this[_0xb53c('0x31')][_0xb53c('0x29')](this));ami['on'](_0xb53c('0x32'),this[_0xb53c('0x33')]['bind'](this));ami['on']('queuemember',this[_0xb53c('0x34')][_0xb53c('0x29')](this));ami['on'](_0xb53c('0x35'),this['syncQueueStatusComplete'][_0xb53c('0x29')](this));this[_0xb53c('0x36')]();this[_0xb53c('0x37')]();}function isNotNull(_0xc7a775){return _0xc7a775!==null&&!_[_0xb53c('0x38')](_0xc7a775);}function checkIsLoggedIn(_0x4e34f1,_0xa9b2ae){return function(){if(_0xa9b2ae<=0x0){_0x4e34f1[_0xb53c('0x39')]=_0xb53c('0x3a');throw _0x4e34f1[_0xb53c('0x3b')]+'\x20AGENTS\x20NOT\x20LOGGED';}};}function isActive(_0x13eadb){return _0x13eadb;}function checkIsActive(_0x2b4dc1,_0x1221d2){return function(){if(!isActive(_0x1221d2)){_0x2b4dc1[_0xb53c('0x39')]=_0xb53c('0x3c');throw _0x2b4dc1['name']+_0xb53c('0x3d');}};}function checkInterval(_0xe37e5e){return function(){if(!isNotNull(_0xe37e5e[_0xb53c('0x3e')])){_0xe37e5e[_0xb53c('0x39')]=_0xb53c('0x3f');throw _0xe37e5e[_0xb53c('0x3b')]+'\x20INTERVAL_IS_NULL';}if(!isNotNull(_0xe37e5e['Interval'][_0xb53c('0x40')])){_0xe37e5e[_0xb53c('0x39')]=_0xb53c('0x3f');throw _0xe37e5e['name']+_0xb53c('0x41');}if(!isNotNull(_['isEmpty'](_0xe37e5e[_0xb53c('0x3e')]['Intervals']))){_0xe37e5e['message']='INTERVAL_IS_NULL';throw _0xe37e5e[_0xb53c('0x3b')]+'\x20INTERVAL_IS_NULL';}};}function msgResponse(_0x42f81f,_0x3e808b,_0x3d62f8){return{'action':_0x42f81f,'response':_0x3e808b,'message':_0x3d62f8,'stack':_0x3d62f8};}function myreject(_0x18116d){return function(_0x95bacc){return _0x18116d(msgResponse(_0xb53c('0x42'),_0xb53c('0x43'),JSON[_0xb53c('0x44')](_0x95bacc)));};}function getSeconds(_0x80da03,_0x50368b){var _0x2f6cdb=moment(_0x80da03)[_0xb53c('0x45')](0x0);var _0xe63fa8=moment(_0x50368b)[_0xb53c('0x45')](0x0);return _0x2f6cdb[_0xb53c('0x46')](_0xe63fa8,'seconds');}function emit(_0x47a838,_0x5d4973,_0x5ae92e){io['to'](_0x47a838)[_0xb53c('0x47')](_0x5d4973,_0x5ae92e);}function emitVoiceQueueSummary(_0x3a50d6){if(_0x3a50d6['type']===_0xb53c('0x48')){var _0x2ea1db={'id':_0x3a50d6['id'],'name':_0x3a50d6['name'],'strategy':_0x3a50d6['strategy'],'answered':_0x3a50d6['answered'],'available':_0x3a50d6[_0xb53c('0x49')],'loggedIn':_0x3a50d6['loggedIn'],'pTalking':_0x3a50d6['pTalking'],'sumBillable':_0x3a50d6['sumBillable'],'sumDuration':_0x3a50d6[_0xb53c('0x4a')],'sumHoldTime':_0x3a50d6[_0xb53c('0x4b')]||0x0,'talking':_0x3a50d6[_0xb53c('0x4c')],'total':_0x3a50d6[_0xb53c('0x4d')],'type':_0x3a50d6['type'],'unmanaged':_0x3a50d6[_0xb53c('0x4e')],'abandoned':_0x3a50d6[_0xb53c('0x4f')],'waiting':_0x3a50d6[_0xb53c('0x50')],'loggedInDb':_0x3a50d6[_0xb53c('0x51')],'dialActive':_0x3a50d6['dialActive'],'dialMethod':_0x3a50d6[_0xb53c('0x52')],'dialOriginateCallerIdName':_0x3a50d6['dialOriginateCallerIdName'],'dialOriginateCallerIdNumber':_0x3a50d6[_0xb53c('0x53')],'dialOriginateTimeout':_0x3a50d6[_0xb53c('0x54')],'dialPrefix':_0x3a50d6[_0xb53c('0x55')],'outboundAnswerAgiCallsDay':_0x3a50d6[_0xb53c('0x56')],'outboundAnswerCallsDay':_0x3a50d6[_0xb53c('0x57')],'outboundBlacklistCallsDay':_0x3a50d6['outboundBlacklistCallsDay'],'outboundBusyCallsDay':_0x3a50d6[_0xb53c('0x58')],'outboundCongestionCallsDay':_0x3a50d6[_0xb53c('0x59')],'outboundDropCallsDayACS':_0x3a50d6[_0xb53c('0x5a')],'outboundDropCallsDayCallersExit':_0x3a50d6['outboundDropCallsDayCallersExit'],'outboundDropCallsDayTimeout':_0x3a50d6['outboundDropCallsDayTimeout'],'outboundNoAnswerCallsDay':_0x3a50d6[_0xb53c('0x5b')],'outboundNoSuchCallsDay':_0x3a50d6[_0xb53c('0x5c')],'outboundOriginateFailureCallsDay':_0x3a50d6[_0xb53c('0x5d')],'outboundReCallsDay':_0x3a50d6[_0xb53c('0x5e')],'outboundRejectCallsDay':_0x3a50d6['outboundRejectCallsDay'],'outboundUnknownCallsDay':_0x3a50d6[_0xb53c('0x5f')],'predictiveIntervalAnsweredCalls':_0x3a50d6['predictiveIntervalAnsweredCalls'],'predictiveIntervalAvgHoldtime':_0x3a50d6[_0xb53c('0x60')],'predictiveIntervalAvgTalktime':_0x3a50d6[_0xb53c('0x61')],'predictiveIntervalDroppedCallsCallersExit':_0x3a50d6[_0xb53c('0x62')],'predictiveIntervalDroppedCallsTimeout':_0x3a50d6[_0xb53c('0x63')],'predictiveIntervalErlangCalls':_0x3a50d6[_0xb53c('0x64')],'predictiveIntervalErlangCallsDroppedCalls':_0x3a50d6[_0xb53c('0x65')],'predictiveIntervalHitRate':_0x3a50d6[_0xb53c('0x66')],'predictiveIntervalMultiplicativeFactor':_0x3a50d6['predictiveIntervalMultiplicativeFactor'],'predictiveIntervalPauses':_0x3a50d6[_0xb53c('0x67')],'predictiveIntervalAvailable':_0x3a50d6['predictiveIntervalAvailable'],'predictiveIntervalTotalCalls':_0x3a50d6[_0xb53c('0x68')],'message':_0x3a50d6[_0xb53c('0x39')],'originated':_0x3a50d6['originated'],'erlangCalls':_0x3a50d6['erlangCalls'],'erlangCallToSecond':_0x3a50d6['erlangCallToSecond'],'erlangAbandonmentRate':_0x3a50d6[_0xb53c('0x69')],'erlangBusyFactor':_0x3a50d6[_0xb53c('0x6a')],'startPredictive':_0x3a50d6[_0xb53c('0x24')],'startProgressive':_0x3a50d6[_0xb53c('0x6b')]};if(_0x3a50d6[_0xb53c('0x6c')]){_0x2ea1db[_0xb53c('0x6c')]={'id':_0x3a50d6[_0xb53c('0x6c')]['id'],'name':_0x3a50d6[_0xb53c('0x6c')][_0xb53c('0x3b')],'active':_0x3a50d6[_0xb53c('0x6c')][_0xb53c('0x6d')],'callerid':_0x3a50d6['Trunk'][_0xb53c('0x6e')]};}if(_0x3a50d6['Interval']){_0x2ea1db[_0xb53c('0x3e')]={'id':_0x3a50d6[_0xb53c('0x3e')]['id'],'name':_0x3a50d6[_0xb53c('0x3e')][_0xb53c('0x3b')]};}var _0x2c9ac6=md5(JSON[_0xb53c('0x44')](_0x2ea1db));if(_0x3a50d6[_0xb53c('0x3')]!==_0x2c9ac6){_0x3a50d6[_0xb53c('0x3')]=_0x2c9ac6;emit(util[_0xb53c('0x6f')](_0xb53c('0x70'),_0x2ea1db[_0xb53c('0x3b')]),'voice_queue:save',_0x2ea1db);}}}function emitCampaignSummary(_0x3be8f2){if(_0x3be8f2[_0xb53c('0x71')]==='ivr'){emit(util[_0xb53c('0x6f')](_0xb53c('0x72'),_0x3be8f2[_0xb53c('0x3b')]),'campaign:save',_0x3be8f2);}}function checkGetDataPredictive(_0x4932ad){if(isNotNull(_0x4932ad)){if(!_[_0xb53c('0x73')](_0x4932ad)){loggerPredictive['info']('-----\x20Stats\x20Predictive\x20---');loggerPredictive['info'](_0xb53c('0x74'),_0x4932ad[_0xb53c('0x68')]);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x76'),_0x4932ad[_0xb53c('0x77')]);loggerPredictive[_0xb53c('0x75')]('Dropped\x20Timeout:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x4932ad[_0xb53c('0x63')]);loggerPredictive[_0xb53c('0x75')]('Dropped\x20Exit:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x4932ad['predictiveIntervalDroppedCallsCallersExit']);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x78'),_0x4932ad[_0xb53c('0x60')]);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x79'),_0x4932ad[_0xb53c('0x61')]);loggerPredictive['info'](_0xb53c('0x7a'));if(_0x4932ad[_0xb53c('0x68')]>0x0){if(!_['isUndefined'](_0x4932ad['predictiveIntervalAvgTalktime'])&&_0x4932ad[_0xb53c('0x61')]>0x0){return!![];}else{loggerPredictive['info'](_0xb53c('0x7b'));}if(!_['isUndefined'](_0x4932ad[_0xb53c('0x60')])&&_0x4932ad[_0xb53c('0x60')]>0x0){return!![];}else{loggerPredictive[_0xb53c('0x75')](_0xb53c('0x7c'));}}else{loggerPredictive[_0xb53c('0x75')](_0xb53c('0x7d'));}}else{loggerPredictive[_0xb53c('0x75')](_0xb53c('0x7e'));}}else{loggerPredictive[_0xb53c('0x75')](_0xb53c('0x7e'));}return![];}function mergeDataErlangB(_0x3d28f0){return function(_0x1388df){loggerPredictive[_0xb53c('0x75')](_0xb53c('0x7f'));loggerPredictive[_0xb53c('0x75')](_0xb53c('0x80'),_0x1388df[_0xb53c('0x81')]);loggerPredictive['info']('One\x20call\x20every:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x1388df[_0xb53c('0x82')]);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x83'),_0x1388df['erlangAbandonmentRate']);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x84'),_0x1388df[_0xb53c('0x6a')]);loggerPredictive[_0xb53c('0x75')]('Drop\x20Rate:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x1388df['erlangAbandonmentRate']);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x7a'));_[_0xb53c('0x85')](_0x3d28f0,_0x1388df);};}function getDiff(_0x3bcd72){var _0x3fdd5b=moment()[_0xb53c('0x45')](0x0);var _0x5694c9=moment(_0x3bcd72)['milliseconds'](0x0);return _0x3fdd5b[_0xb53c('0x46')](_0x5694c9,'seconds');}function ifInterval(_0x17d8fa,_0x2c0305){if(_[_0xb53c('0x38')](_0x2c0305)){return![];}if(getDiff(_0x2c0305)<_0x17d8fa*0x3c){return!![];}else{return![];}}function freeVariablesPredictive(_0x1f4617){if(isNotNull(_0x1f4617)){if(!_[_0xb53c('0x38')](_0x1f4617[_0xb53c('0x6b')])){_0x1f4617['startProgressive']=undefined;loggerPredictive['info'](_0x1f4617['name'],_0xb53c('0x86'));}if(!_['isUndefined'](_0x1f4617[_0xb53c('0x24')])){_0x1f4617[_0xb53c('0x24')]=undefined;loggerPredictive[_0xb53c('0x75')](_0x1f4617['name'],_0xb53c('0x87'));}if(!_[_0xb53c('0x38')](_0x1f4617[_0xb53c('0x88')])){clearInterval(_0x1f4617[_0xb53c('0x88')]);_0x1f4617[_0xb53c('0x88')]=undefined;loggerPredictive[_0xb53c('0x75')](_0x1f4617[_0xb53c('0x3b')],_0xb53c('0x89'));}}}function erlangb(_0x2d53d8,_0xe0f3b3){if(_0xe0f3b3===0x0){return 0x0;}var _0x660e39=0x1;for(var _0x4eb09f=0x1;_0x4eb09f<=_0xe0f3b3;_0x4eb09f+=0x1){_0x660e39=0x1+_0x660e39*_0x4eb09f/_0x2d53d8;}return 0x1/_0x660e39;}function isVoiceQueueOutbound(_0x27a91f){return _0x27a91f===_0xb53c('0x48');}function isNotPreview(_0x8421f0){return _0x8421f0!==_0xb53c('0x8a');}function isCampaignIvr(_0x5dc666){return _0x5dc666===_0xb53c('0x8b');}function getCallerId(_0x15ea7a,_0x2069f8,_0x3f9185){if(!_[_0xb53c('0x38')](_0x3f9185)&&_0xb53c('0x8c')===typeof _0x3f9185&&!_[_0xb53c('0x73')](_0x3f9185)){if(!_[_0xb53c('0x38')](_0x2069f8)&&'string'===typeof _0x2069f8&&!_[_0xb53c('0x73')](_0x2069f8)){return util[_0xb53c('0x6f')](_0xb53c('0x8d'),_0x2069f8,_0x3f9185);}return util[_0xb53c('0x6f')](_0xb53c('0x8d'),_0x3f9185,_0x3f9185);}if(!_[_0xb53c('0x38')](_0x15ea7a)&&_0xb53c('0x8c')===typeof _0x15ea7a&&!_[_0xb53c('0x73')](_0x15ea7a)){return _0x15ea7a;}return _0xb53c('0x8e');}function loggerCatchQueueSummary(_0x3ab085,_0x406209){return function(_0x241430){freeVariablesPredictive(_0x406209);emitVoiceQueueSummary(_0x406209);emitCampaignSummary(_0x406209);loggerSyncQueueSummary['error'](_0x3ab085,util['inspect'](_0x241430,{'showHidden':![],'depth':null}));};}function loggerCatchPredictive(_0x587a7a,_0x533006){return function(_0x44f465){loggerPredictive[_0xb53c('0x8f')](_0x533006[_0xb53c('0x3b')],_0x587a7a);loggerPredictive[_0xb53c('0x8f')](_0x44f465[_0xb53c('0x90')]);freeVariablesPredictive(_0x533006);};}function loggerCatch(_0x517c8b){return function(_0x2a28a0){logger[_0xb53c('0x8f')](_0x517c8b,util[_0xb53c('0x91')](_0x2a28a0,{'showHidden':![],'depth':null}));};}function checkContactEmpty(_0x3bd332){return _0x3bd332&&!_[_0xb53c('0x38')](_0x3bd332)&&_0x3bd332[_0xb53c('0x92')]>0x0;}function decremetOriginate(_0x9c31bd){if(!_[_0xb53c('0x38')](_0x9c31bd)&&_0x9c31bd!==null){if(_0x9c31bd['hasOwnProperty'](_0xb53c('0x93'))){if(_0x9c31bd[_0xb53c('0x93')]>0x0){_0x9c31bd['originated']-=0x1;}else{logger[_0xb53c('0x8f')](_0xb53c('0x94'));}}}else{logger[_0xb53c('0x8f')](_0xb53c('0x95'));}}function checkContactLowerLimitOriginate(_0x35bef6,_0xd6ffcc,_0x2fbe03){if(_0xd6ffcc>_0x2fbe03){for(var _0x5c51a5=0x0;_0x5c51a5<_0xd6ffcc-_0x2fbe03;_0x5c51a5+=0x1){decremetOriginate(_0x35bef6);}}}function loggerGetContactDialer(_0x4d811d,_0x5e756c,_0x1c1277){return function(_0x25c057){checkContactLowerLimitOriginate(_0x5e756c,_0x1c1277,0x0);logger['error'](_0x4d811d,util[_0xb53c('0x91')](_0x25c057,{'showHidden':![],'depth':null}));};}function sendMessageReschedule(_0x1f2a97){return function(_0xe8fbe4){if(isNotNull(_0xe8fbe4)&&isNotNull(_0xe8fbe4[0x0])){if(_0xe8fbe4[0x0][_0xb53c('0x96')]>0x0){_0x1f2a97[_0xb53c('0x39')]=_0xb53c('0x97');logger[_0xb53c('0x75')]('[getContactDialer2][ReScheduled]'+_0x1f2a97[_0xb53c('0x3b')],_0xe8fbe4[0x0][_0xb53c('0x96')],_0xb53c('0x98'));}else{_0x1f2a97['message']='AVAILABLE_CONTACTS_FINISHED';logger[_0xb53c('0x75')](_0xb53c('0x99')+_0x1f2a97[_0xb53c('0x3b')]);}}};}function notSendMessagesQueue(_0x120e19){if(_0x120e19[_0xb53c('0x9a')]){freeVariablesPredictive(_0x120e19);if(_0x120e19['originated']===0x0&&_0x120e19[_0xb53c('0x4c')]===0x0&&_0x120e19[_0xb53c('0x50')]===0x0&&(_0x120e19[_0xb53c('0x9b')]||0x0)===0x0){_0x120e19[_0xb53c('0x9a')]=![];_0x120e19[_0xb53c('0x49')]=0x0;_0x120e19['message']='NOT_ACTIVE';loggerSyncQueueSummary[_0xb53c('0x8f')](_0xb53c('0x9c'),_0x120e19['name'],'is\x20not\x20active');}else{_0x120e19[_0xb53c('0x39')]=_0xb53c('0x9d');loggerSyncQueueSummary[_0xb53c('0x8f')](_0xb53c('0x9c'),_0x120e19['name'],_0xb53c('0x9e'));}emitVoiceQueueSummary(_0x120e19);}}function notSendMessagesCampaign(_0x162e6c){if(_0x162e6c[_0xb53c('0x9a')]){if(_0x162e6c[_0xb53c('0x93')]===0x0){_0x162e6c[_0xb53c('0x9a')]=![];_0x162e6c['message']=_0xb53c('0x3c');loggerSyncQueueSummary[_0xb53c('0x8f')](_0xb53c('0x9f'),_0x162e6c[_0xb53c('0x3b')],'is\x20not\x20active');}else{_0x162e6c[_0xb53c('0x39')]=_0xb53c('0x9d');loggerSyncQueueSummary['error'](_0xb53c('0x9f'),_0x162e6c[_0xb53c('0x3b')],_0xb53c('0x9e'));}emitCampaignSummary(_0x162e6c);}}function createObjHistory(_0x5b43de,_0x128292,_0x18c35b,_0xf741b4,_0x576348){_0x5b43de['message']=_0x18c35b;var _0x484e5e=new Action(_0x5b43de,_0x128292);var _0x53993b=new History(_0x484e5e);_0x53993b[_0xb53c('0xa0')]=_0xf741b4;_0x53993b[_0xb53c('0xa1')]=_0x576348;_0x53993b[_0xb53c('0xa2')]=_0x484e5e['starttime'];return _0x53993b;}Dialer[_0xb53c('0x19')][_0xb53c('0x37')]=function(){var _0x220ba1=this;setInterval(function(){_0x220ba1['clearZombieChannels'](_0x220ba1['uniqueId'],_0xb53c('0xa3'));_0x220ba1[_0xb53c('0xa4')](_0x220ba1['actions'],_0xb53c('0xa5'));},0x32c8);};Dialer[_0xb53c('0x19')][_0xb53c('0xa4')]=function(_0x8cb4e0,_0x39e55d){var _0x1786c6=this;for(var _0x3d4c99 in _0x8cb4e0){if(_0x8cb4e0['hasOwnProperty'](_0x3d4c99)){this[_0xb53c('0xa6')][_0xb53c('0xa7')](function(){if(!_[_0xb53c('0xa8')](_0x8cb4e0[_0x3d4c99])){return ami['Action']({'action':'status','channel':_0x8cb4e0[_0x3d4c99][_0xb53c('0xa9')]})['catch'](function(_0x2dc89e){if(_0x2dc89e[_0xb53c('0x39')]==='No\x20such\x20channel'){setTimeout(function(){if(_0x8cb4e0[_0x3d4c99]&&_0x8cb4e0[_0x3d4c99][_0xb53c('0x71')]!==_0xb53c('0x8b')){_0x1786c6[_0xb53c('0xaa')](_0x1786c6[_0xb53c('0x1c')][_0x8cb4e0[_0x3d4c99][_0xb53c('0xab')]]);logger[_0xb53c('0x8f')](_0xb53c('0xac'),_0x39e55d,_0x3d4c99,_0x8cb4e0[_0x3d4c99]['queue']);delete _0x8cb4e0[_0x3d4c99];}if(_0x8cb4e0[_0x3d4c99]&&_0x8cb4e0[_0x3d4c99][_0xb53c('0x71')]===_0xb53c('0x8b')){_0x1786c6[_0xb53c('0xaa')](_0x1786c6[_0xb53c('0xad')][_0x8cb4e0[_0x3d4c99][_0xb53c('0xab')]]);logger[_0xb53c('0x8f')](_0xb53c('0xae'),_0x39e55d,_0x3d4c99,_0x8cb4e0[_0x3d4c99][_0xb53c('0xab')]);delete _0x8cb4e0[_0x3d4c99];}},0x2328);}});}});}}};Dialer['prototype'][_0xb53c('0xaf')]=function(_0xb2b80){return BPromise['resolve']()[_0xb53c('0xb0')](cmHopper[_0xb53c('0xaf')](_0xb2b80))[_0xb53c('0xb1')](loggerCatch(_0xb53c('0xb2')));};Dialer[_0xb53c('0x19')][_0xb53c('0xb3')]=function(_0x5a1a0b){return BPromise['resolve']()[_0xb53c('0xb0')](cmHopperBlack[_0xb53c('0xb3')](_0x5a1a0b))[_0xb53c('0xb1')](loggerCatch(_0xb53c('0xb4')));};Dialer[_0xb53c('0x19')][_0xb53c('0xb5')]=function(_0x68f5cd){return BPromise['resolve']()['then'](cmHopperBlack[_0xb53c('0xb5')](_0x68f5cd))['catch'](loggerCatch('[checkIsBlackListIvr]\x20'));};Dialer[_0xb53c('0x19')][_0xb53c('0xb6')]=function(_0x6fb009){return BPromise['resolve']()[_0xb53c('0xb0')](cmHopperHistory[_0xb53c('0xb7')](_0x6fb009))[_0xb53c('0xb1')](loggerCatch(_0xb53c('0xb8')));};Dialer[_0xb53c('0x19')][_0xb53c('0xb9')]=function(_0x1f247a){return BPromise[_0xb53c('0xba')]()[_0xb53c('0xb0')](cmHopper[_0xb53c('0xb9')](_0x1f247a))[_0xb53c('0xb1')](loggerCatch(_0xb53c('0xbb')));};Dialer['prototype']['getContactDialer']=function(_0x42fc21,_0xc26040,_0x37a4b2,_0x1c4b47){return BPromise[_0xb53c('0xba')]()['then'](cmHopper[_0xb53c('0xbc')](_0x42fc21,_0xc26040,_0x37a4b2,_0x1c4b47))[_0xb53c('0xb1')](loggerCatch('[getContactDialer]\x20'));};Dialer[_0xb53c('0x19')]['getContactDialerIvr']=function(_0x4c4141,_0x576b59,_0x49c283){return BPromise['resolve']()[_0xb53c('0xb0')](cmHopper[_0xb53c('0xbd')](_0x4c4141,_0x576b59,_0x49c283))['catch'](loggerCatch(_0xb53c('0xbe')));};Dialer['prototype'][_0xb53c('0xbf')]=function(_0x12d43e){return BPromise[_0xb53c('0xba')]()[_0xb53c('0xb0')](voiceQueueRt[_0xb53c('0xbf')](_0x12d43e))[_0xb53c('0xb1')](loggerCatch(_0xb53c('0xc0')));};Dialer[_0xb53c('0x19')]['moveContactManagedDialer']=function(_0x35297b){return BPromise['resolve']()[_0xb53c('0xb0')](cmHopper['moveContactManagedDialer'](_0x35297b))[_0xb53c('0xb1')](loggerCatch(_0xb53c('0xc1')));};Dialer[_0xb53c('0x19')][_0xb53c('0xc2')]=function(_0x194735){return BPromise[_0xb53c('0xba')]()[_0xb53c('0xb0')](cmHopperHistory[_0xb53c('0xc2')](_0x194735))[_0xb53c('0xb1')](loggerCatch(_0xb53c('0xc3')));};Dialer[_0xb53c('0x19')]['updateOriginated']=function(_0x4829ad){if(!_[_0xb53c('0x38')](_0x4829ad)&&_0x4829ad!==null){if(_0x4829ad['hasOwnProperty'](_0xb53c('0x93'))){if(_0x4829ad[_0xb53c('0x93')]>0x0){_0x4829ad[_0xb53c('0x93')]-=0x1;}else{logger[_0xb53c('0x8f')](_0xb53c('0xc4'));}}}else{logger[_0xb53c('0x8f')]('[updateOriginated]\x20is\x20null\x20or\x20undefined');}};Dialer[_0xb53c('0x19')][_0xb53c('0xc5')]=function(_0xf85fff,_0x41f79d){var _0xb80ed3=this;return function(_0x3e94c2){_0xb80ed3[_0xb53c('0xaa')](_0x41f79d);logger[_0xb53c('0x8f')](_0xf85fff,util[_0xb53c('0x91')](_0x3e94c2,{'showHidden':![],'depth':null}));};};Dialer[_0xb53c('0x19')][_0xb53c('0xc6')]=function(_0x48724c,_0x5d5169,_0x529d05){var _0x2ee66d={'state':0x19,'statedesc':_0xb53c('0xc7')};this['updateOriginated'](_0x5d5169);this['saveInDb'](_[_0xb53c('0x85')](_0x2ee66d,_[_0xb53c('0xc8')](_0x529d05,[_0xb53c('0xc9'),_0xb53c('0xca'),_0xb53c('0xcb'),'VoiceQueueId',_0xb53c('0xcc')])),_0xb53c('0xcd'),_0xb53c('0xce'));logger[_0xb53c('0x8f')](_0x48724c);};Dialer[_0xb53c('0x19')][_0xb53c('0xcf')]=function(_0x6858bc){return _0x6858bc===_0xb53c('0xd0');};Dialer[_0xb53c('0x19')][_0xb53c('0xd1')]=function(_0x27599f){return!_[_0xb53c('0x38')](_0x27599f)&&_0x27599f&&!_[_0xb53c('0x38')](_0x27599f['name'])&&!_[_0xb53c('0x38')](_0x27599f['active'])&&_0x27599f['active']&&(this[_0xb53c('0x1e')][util[_0xb53c('0x6f')](_0xb53c('0xd2'),_0x27599f['name'])][_0xb53c('0xd3')]==='reachable'||this[_0xb53c('0x1e')][util[_0xb53c('0x6f')](_0xb53c('0xd2'),_0x27599f['name'])][_0xb53c('0xd3')]===_0xb53c('0xd4'));};Dialer['prototype'][_0xb53c('0xd5')]=function(_0x32a237,_0x345f94,_0x2e2ddc){this['createHistory'](_0x32a237)['catch'](loggerCatch(_0x345f94));this[_0xb53c('0xd6')](_0x32a237)[_0xb53c('0xb1')](loggerCatch(_0x2e2ddc));};Dialer[_0xb53c('0x19')]['syncVarSet']=function(_0x2041fd){var _0x3ef7e4=this['uniqueId'][_0x2041fd[_0xb53c('0xd7')]];var _0x2d9014;if(!_[_0xb53c('0xa8')](_0x2041fd)&&!_[_0xb53c('0xa8')](_0x2041fd[_0xb53c('0xd8')])&&!_[_0xb53c('0xa8')](_0x2041fd[_0xb53c('0xd8')][_0xb53c('0xd9')])&&_0x2041fd[_0xb53c('0xda')]===_0xb53c('0xdb')&&_0x3ef7e4){if(_0x3ef7e4[_0xb53c('0x71')]!==_0xb53c('0x8b')&&this[_0xb53c('0x1c')][_0x3ef7e4[_0xb53c('0xab')]]['dialAMDActive']&&_0x2041fd['value']===_0xb53c('0xdc')){delete this[_0xb53c('0xdd')][_0x2041fd[_0xb53c('0xd7')]];this[_0xb53c('0xaa')](this[_0xb53c('0x1c')][_0x3ef7e4[_0xb53c('0xab')]]);this[_0xb53c('0x1c')][_0x3ef7e4[_0xb53c('0xab')]][_0xb53c('0x57')]+=0x1;this[_0xb53c('0x1c')][_0x3ef7e4[_0xb53c('0xab')]]['outboundAnswerAgiCallsDay']+=0x1;_0x2d9014=new Hangup(_0x3ef7e4,_0x2041fd);_0x2d9014[_0xb53c('0xa0')]=0x12;_0x2d9014[_0xb53c('0xa1')]='HangupInAMD';_0x2d9014[_0xb53c('0xde')]='AMD';this['saveInDb'](_0x2d9014,'[syncHangupInAMD][createHistory]',_0xb53c('0xdf'));}if(_0x3ef7e4['type']!==_0xb53c('0x8b')&&this['voiceQueues'][_0x3ef7e4[_0xb53c('0xab')]][_0xb53c('0xe0')]&&_0x2041fd[_0xb53c('0xe1')]===_0xb53c('0xe2')){delete this[_0xb53c('0xdd')][_0x2041fd[_0xb53c('0xd7')]];this[_0xb53c('0xaa')](this['voiceQueues'][_0x3ef7e4[_0xb53c('0xab')]]);this[_0xb53c('0x1c')][_0x3ef7e4[_0xb53c('0xab')]][_0xb53c('0x57')]+=0x1;this['voiceQueues'][_0x3ef7e4[_0xb53c('0xab')]][_0xb53c('0x56')]+=0x1;_0x2d9014=new Hangup(_0x3ef7e4,_0x2041fd);_0x2d9014['state']=0x13;_0x2d9014[_0xb53c('0xa1')]='Machine';_0x2d9014[_0xb53c('0xde')]=_0xb53c('0xe3');_0x2d9014[_0xb53c('0xe4')]=!![];this[_0xb53c('0xd5')](_0x2d9014,'[syncMachine][createHistory]',_0xb53c('0xe5'));}if(_0x3ef7e4['type']===_0xb53c('0x8b')&&this[_0xb53c('0xad')][_0x3ef7e4[_0xb53c('0xab')]][_0xb53c('0xe0')]&&_0x2041fd[_0xb53c('0xe1')]==='HANGUP'){delete this[_0xb53c('0xdd')][_0x2041fd[_0xb53c('0xd7')]];this[_0xb53c('0xaa')](this[_0xb53c('0xad')][_0x3ef7e4[_0xb53c('0xab')]]);_0x2d9014=new Hangup(_0x3ef7e4,_0x2041fd);_0x2d9014[_0xb53c('0xa0')]=0x12;_0x2d9014[_0xb53c('0xa1')]=_0xb53c('0xe6');_0x2d9014[_0xb53c('0xde')]=_0xb53c('0xe3');this[_0xb53c('0xd5')](_0x2d9014,'[syncHangupInAMDIvr][createHistory]','[syncHangupInAMDIvr]');}if(_0x3ef7e4[_0xb53c('0x71')]==='ivr'&&this['campaigns'][_0x3ef7e4[_0xb53c('0xab')]][_0xb53c('0xe0')]&&_0x2041fd['value']===_0xb53c('0xe2')){delete this[_0xb53c('0xdd')][_0x2041fd[_0xb53c('0xd7')]];this[_0xb53c('0xaa')](this[_0xb53c('0xad')][_0x3ef7e4[_0xb53c('0xab')]]);_0x2d9014=new Hangup(_0x3ef7e4,_0x2041fd);_0x2d9014['state']=0x13;_0x2d9014['statedesc']=_0xb53c('0xe7');_0x2d9014[_0xb53c('0xde')]=_0xb53c('0xe3');_0x2d9014[_0xb53c('0xe4')]=!![];this[_0xb53c('0xd5')](_0x2d9014,_0xb53c('0xe8'),_0xb53c('0xe9'));}}};Dialer['prototype'][_0xb53c('0x2f')]=function(_0x41bfaf){var _0x4423ad=this['uniqueId'][_0x41bfaf['uniqueid']];var _0x4c64a2=this;var _0x37eed1;if(_0x4423ad&&_0x4423ad[_0xb53c('0x71')]===_0xb53c('0x8b')){delete this[_0xb53c('0xdd')][_0x41bfaf[_0xb53c('0xd7')]];this['updateOriginated'](this[_0xb53c('0xad')][_0x4423ad[_0xb53c('0xab')]]);this[_0xb53c('0xad')][_0x4423ad[_0xb53c('0xab')]][_0xb53c('0xea')]+=0x1;_0x37eed1=new Hangup(_0x4423ad,_0x41bfaf);this[_0xb53c('0xc2')](_0x37eed1)[_0xb53c('0xb1')](loggerCatch(_0xb53c('0xeb')));this[_0xb53c('0xd6')](_0x37eed1)[_0xb53c('0xb1')](loggerCatch(_0xb53c('0xec')));}if(_0x4423ad&&_0x4423ad[_0xb53c('0x71')]!==_0xb53c('0x8b')&&isNotNull(this[_0xb53c('0x1c')][_0x4423ad['queue']][_0xb53c('0xed')])){delete this[_0xb53c('0xdd')][_0x41bfaf[_0xb53c('0xd7')]];this[_0xb53c('0xaa')](this['voiceQueues'][_0x4423ad[_0xb53c('0xab')]]);this[_0xb53c('0x1c')][_0x4423ad['queue']][_0xb53c('0x57')]+=0x1;this[_0xb53c('0x1c')][_0x4423ad[_0xb53c('0xab')]][_0xb53c('0x56')]+=0x1;_0x37eed1=new Hangup(_0x4423ad,_0x41bfaf);_0x37eed1[_0xb53c('0xa0')]=0x10;_0x37eed1[_0xb53c('0xa1')]=_0xb53c('0xee');_0x37eed1[_0xb53c('0xde')]=_0xb53c('0xef');this[_0xb53c('0xc2')](_0x37eed1)[_0xb53c('0xb1')](loggerCatch(_0xb53c('0xeb')));this[_0xb53c('0xd6')](_0x37eed1)['catch'](loggerCatch('[syncHangupIvr]'));}if(_0x4423ad&&_0x4423ad[_0xb53c('0x71')]!=='ivr'&&!isNotNull(this[_0xb53c('0x1c')][_0x4423ad[_0xb53c('0xab')]][_0xb53c('0xed')])){delete this['uniqueId'][_0x41bfaf[_0xb53c('0xd7')]];this[_0xb53c('0xaa')](this[_0xb53c('0x1c')][_0x4423ad[_0xb53c('0xab')]]);this[_0xb53c('0x1c')][_0x4423ad[_0xb53c('0xab')]]['outboundUnknownCallsDay']+=0x1;_0x37eed1=new Hangup(_0x4423ad,_0x41bfaf);_0x37eed1[_0xb53c('0xa0')]=0xc;_0x37eed1[_0xb53c('0xa1')]=_0x41bfaf[_0xb53c('0xf0')];_0x37eed1['membername']=_0xb53c('0xf1');this['createHistory'](_0x37eed1)['catch'](loggerCatch(_0xb53c('0xeb')));this[_0xb53c('0xd6')](_0x37eed1)[_0xb53c('0xb1')](loggerCatch('[syncHangupIvr]'));}};Dialer[_0xb53c('0x19')][_0xb53c('0x2d')]=function(_0x11f5a9){var _0x55b70e=this['uniqueId'][_0x11f5a9[_0xb53c('0xd7')]];var _0x126a3c=this;if(this['voiceQueues'][_0x11f5a9[_0xb53c('0xab')]]){if(_0x55b70e&&_0x55b70e['type']!=='ivr'){delete this[_0xb53c('0xdd')][_0x11f5a9[_0xb53c('0xd7')]];this[_0xb53c('0x1c')][_0x11f5a9['queue']]['outboundAnswerCallsDay']+=0x1;var _0x430e6f=new AgentComplete(_0x55b70e,_0x11f5a9);if(_0x11f5a9['reason']===_0xb53c('0xf2')){_0x430e6f[_0xb53c('0xf3')]=this[_0xb53c('0x1c')][_0x11f5a9[_0xb53c('0xab')]][_0xb53c('0xf4')]&&this[_0xb53c('0x1c')][_0x11f5a9[_0xb53c('0xab')]]['dialAgiAfterHangupAgent']?moment()[_0xb53c('0x6f')](_0xb53c('0xf5')):undefined;}this[_0xb53c('0xc2')](_0x430e6f)[_0xb53c('0xb1')](loggerCatch(_0xb53c('0xf6')));this[_0xb53c('0xd6')](_0x430e6f)[_0xb53c('0xb1')](loggerCatch('[syncAgentComplete]'));}}};Dialer[_0xb53c('0x19')][_0xb53c('0x28')]=function(_0x397455){if(this[_0xb53c('0x1c')][_0x397455[_0xb53c('0xab')]]){if(this[_0xb53c('0xdd')][_0x397455[_0xb53c('0xd7')]]&&this[_0xb53c('0xdd')][_0x397455[_0xb53c('0xd7')]][_0xb53c('0x71')]!=='ivr'){this[_0xb53c('0xaa')](this[_0xb53c('0x1c')][_0x397455['queue']]);this[_0xb53c('0xdd')][_0x397455[_0xb53c('0xd7')]][_0xb53c('0xf7')]=moment()[_0xb53c('0x6f')](_0xb53c('0xf5'));}}};Dialer[_0xb53c('0x19')][_0xb53c('0xf8')]=function(_0x95c5ad){this[_0xb53c('0xc2')](_0x95c5ad)[_0xb53c('0xb1')](loggerCatch('[syncAgentComplete][createHistory]'));this[_0xb53c('0xd6')](_0x95c5ad)[_0xb53c('0xb1')](loggerCatch('[syncQueueCallerAbandon]\x20[Drop]'));};Dialer['prototype'][_0xb53c('0x2b')]=function(_0x1c1be8){var _0x173e13=this['uniqueId'][_0x1c1be8[_0xb53c('0xd7')]];var _0x3e8b4c=this;if(this['voiceQueues'][_0x1c1be8[_0xb53c('0xab')]]){if(_0x173e13&&_0x173e13[_0xb53c('0x71')]!=='ivr'){delete this['uniqueId'][_0x1c1be8['uniqueid']];this[_0xb53c('0xaa')](this['voiceQueues'][_0x1c1be8[_0xb53c('0xab')]]);_0x173e13[_0xb53c('0xf9')]=moment()[_0xb53c('0x6f')](_0xb53c('0xf5'));var _0x5e1ec3=new QueueCallerAbandon(_0x173e13,_0x1c1be8);if(getSeconds(_0x173e13['droptime'],_0x173e13['responsetime'])>=_0x173e13[_0xb53c('0xfa')]){this[_0xb53c('0x1c')][_0x1c1be8[_0xb53c('0xab')]][_0xb53c('0x63')]+=0x1;this[_0xb53c('0x1c')][_0x1c1be8[_0xb53c('0xab')]][_0xb53c('0xfb')]+=0x1;this['voiceQueues'][_0x1c1be8[_0xb53c('0xab')]][_0xb53c('0x65')]+=0x1;_0x5e1ec3[_0xb53c('0xa0')]=0xa;_0x5e1ec3[_0xb53c('0xa1')]='Drop';_0x5e1ec3[_0xb53c('0xfc')]='TIMEOUT';_0x5e1ec3[_0xb53c('0xf3')]=this[_0xb53c('0x1c')][_0x1c1be8['queue']][_0xb53c('0xf4')]?moment()[_0xb53c('0x6f')](_0xb53c('0xf5')):undefined;this[_0xb53c('0xf8')](_0x5e1ec3);}else{this[_0xb53c('0x1c')][_0x1c1be8[_0xb53c('0xab')]][_0xb53c('0x62')]+=0x1;this[_0xb53c('0x1c')][_0x1c1be8[_0xb53c('0xab')]][_0xb53c('0xfd')]+=0x1;_0x5e1ec3[_0xb53c('0xa0')]=0xb;_0x5e1ec3[_0xb53c('0xa1')]=_0xb53c('0xfe');_0x5e1ec3[_0xb53c('0xfc')]='CALLEREXIT';this[_0xb53c('0xf8')](_0x5e1ec3);}}}};Dialer[_0xb53c('0x19')][_0xb53c('0x31')]=function(_0x30e4d8){if(this[_0xb53c('0x21')][_0x30e4d8['uniqueid']]){this[_0xb53c('0x21')][_0x30e4d8[_0xb53c('0xd7')]]['channel']=_0x30e4d8[_0xb53c('0xa9')];}if(this['uniqueId'][_0x30e4d8[_0xb53c('0xd7')]]){this[_0xb53c('0xdd')][_0x30e4d8[_0xb53c('0xd7')]][_0xb53c('0xa9')]=_0x30e4d8['channel'];}};Dialer[_0xb53c('0x19')][_0xb53c('0x34')]=function(_0x572ca8){if(strategy[this['voiceQueues'][this[_0xb53c('0x21')][_0x572ca8[_0xb53c('0xff')]][_0xb53c('0xab')]][_0xb53c('0x100')]]===_0xb53c('0x18')){if(this[_0xb53c('0x21')][_0x572ca8[_0xb53c('0xff')]]&&_[_0xb53c('0xa8')](this[_0xb53c('0x21')][_0x572ca8[_0xb53c('0xff')]][_0xb53c('0x101')])&&_0x572ca8[_0xb53c('0xd3')]==='1'&&_0x572ca8[_0xb53c('0x102')]==='0'){if(this[_0xb53c('0x1d')][_0x572ca8['stateinterface']]){if(!this[_0xb53c('0x1d')][_0x572ca8['stateinterface']][_0xb53c('0x101')]){this[_0xb53c('0x1d')][_0x572ca8[_0xb53c('0x103')]]['locked']=!![];this[_0xb53c('0x21')][_0x572ca8[_0xb53c('0xff')]][_0xb53c('0x101')]=!![];this[_0xb53c('0x21')][_0x572ca8[_0xb53c('0xff')]][_0xb53c('0x103')]=_0x572ca8[_0xb53c('0x103')];}}}}else if((strategy[this[_0xb53c('0x1c')][this[_0xb53c('0x21')][_0x572ca8[_0xb53c('0xff')]]['queue']]['strategy']]||_0xb53c('0x104'))==='rrmemory'){if(this[_0xb53c('0x21')][_0x572ca8[_0xb53c('0xff')]]){if(this[_0xb53c('0x1d')][_0x572ca8[_0xb53c('0x103')]]){this[_0xb53c('0x21')][_0x572ca8[_0xb53c('0xff')]]['stateinterface']=_0x572ca8['stateinterface'];if(_['isNil'](this[_0xb53c('0x105')][this[_0xb53c('0x21')][_0x572ca8['actionid']][_0xb53c('0xab')]])){this[_0xb53c('0x105')][this[_0xb53c('0x21')][_0x572ca8[_0xb53c('0xff')]][_0xb53c('0xab')]]=[];}this[_0xb53c('0x105')][this[_0xb53c('0x21')][_0x572ca8[_0xb53c('0xff')]][_0xb53c('0xab')]][_0xb53c('0x106')](_[_0xb53c('0x85')](_['pick'](this[_0xb53c('0x21')][_0x572ca8[_0xb53c('0xff')]],[_0xb53c('0x107'),_0xb53c('0x103')]),{'status':_0x572ca8[_0xb53c('0xd3')],'paused':_0x572ca8[_0xb53c('0x102')]}));}}}};function unlockQueueStatus(_0x3be934,_0x256da6){setTimeout(function(){if(_['isUndefined'](_0x3be934[_0xb53c('0x108')])){loggerBooked[_0xb53c('0x8f')](_0xb53c('0x109'),_0x256da6);}_0x3be934[_0xb53c('0x108')]=!![];loggerBooked[_0xb53c('0x75')](_0xb53c('0x10a'),_0x256da6,JSON[_0xb53c('0x44')](_['pick'](_0x3be934,[_0xb53c('0x3b'),_0xb53c('0x108')])));},0x1f3);}Dialer['prototype'][_0xb53c('0x10b')]=function(_0x6f5d36){var _0x34ba0f=this;var _0x9b415f=_0x34ba0f[_0xb53c('0x1c')][_0x34ba0f[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]];if(strategy[this[_0xb53c('0x1c')][this[_0xb53c('0x21')][_0x6f5d36['actionid']]['queue']][_0xb53c('0x100')]]==='roundrobin'){if(this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]]&&this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0x103')]){this[_0xb53c('0x8a')][_0xb53c('0x10c')](this[_0xb53c('0x21')][_0x6f5d36['actionid']][_0xb53c('0x107')],this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]]['stateinterface'])[_0xb53c('0xb1')](function(_0x5ec0af){logger[_0xb53c('0x8f')](_0xb53c('0x10d'),util[_0xb53c('0x91')](_0x5ec0af,{'showHidden':![],'depth':null}));})[_0xb53c('0x1b')](function(){_0x34ba0f['updateOriginated'](_0x34ba0f[_0xb53c('0x1c')][_0x34ba0f[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]]);_0x34ba0f[_0xb53c('0x1d')][_0x34ba0f[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0x103')]][_0xb53c('0x101')]=![];delete _0x34ba0f[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]];unlockQueueStatus(_0x9b415f);});}else{this[_0xb53c('0xaa')](this[_0xb53c('0x1c')][this['actions'][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]]);this[_0xb53c('0xb9')]({'active':![],'ContactId':this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]]['ContactId'],'ListId':this['actions'][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xca')],'VoiceQueueId':this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0x10e')]||undefined,'CampaignId':this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xcc')]||undefined})['catch'](loggerCatch(_0xb53c('0x10f')));delete this[_0xb53c('0x21')][_0x6f5d36['actionid']];unlockQueueStatus(_0x9b415f);}}else if((strategy[this[_0xb53c('0x1c')][this['actions'][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]]['strategy']]||_0xb53c('0x104'))===_0xb53c('0x104')){var _0x2ca71d;if(this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]]&&!_[_0xb53c('0x73')](this[_0xb53c('0x105')][this[_0xb53c('0x21')][_0x6f5d36['actionid']][_0xb53c('0xab')]])){if(this['queueBookedRR'][_0x34ba0f[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]]){this[_0xb53c('0x26')][_0x34ba0f['actions'][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]]=this[_0xb53c('0x26')][this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]]?this['queueBookedRR'][this[_0xb53c('0x21')][_0x6f5d36['actionid']]['queue']]:this[_0xb53c('0x105')][this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]]['queue']]?this[_0xb53c('0x105')][this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]][_0xb53c('0x110')]||0x0:0x0;}this[_0xb53c('0x105')][this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]]['queue']][_0xb53c('0x110')]=this[_0xb53c('0x26')][this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]];for(var _0x36654e=0x0;_0x36654e<this['queueBooked'][this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]][_0xb53c('0x92')];_0x36654e+=0x1){_0x2ca71d=rr(this[_0xb53c('0x105')][this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]]);this[_0xb53c('0x26')][_0x34ba0f[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]]=this[_0xb53c('0x105')][this[_0xb53c('0x21')][_0x6f5d36['actionid']]['queue']][_0xb53c('0x110')];if(_0x2ca71d['status']==='1'&&_0x2ca71d[_0xb53c('0x102')]==='0'){break;}}if(!_[_0xb53c('0xa8')](_0x2ca71d)){this['agents'][_0x2ca71d[_0xb53c('0x103')]][_0xb53c('0x111')]=_[_0xb53c('0x38')](this['agents'][_0x2ca71d[_0xb53c('0x103')]][_0xb53c('0x111')])?!![]:this[_0xb53c('0x1d')][_0x2ca71d['stateinterface']][_0xb53c('0x111')];}loggerBooked[_0xb53c('0x75')](_0xb53c('0x112'),_0x6f5d36[_0xb53c('0xff')],'Agent:\x20',JSON[_0xb53c('0x44')](_['pick'](this[_0xb53c('0x1d')][_0x2ca71d['stateinterface']],[_0xb53c('0x3b'),'unlockRR'])),_0xb53c('0x113'),JSON[_0xb53c('0x44')](_0x2ca71d[_0xb53c('0x107')]));if(!_[_0xb53c('0xa8')](_0x2ca71d)&&_0x2ca71d[_0xb53c('0xd3')]==='1'&&_0x2ca71d[_0xb53c('0x102')]==='0'&&this[_0xb53c('0x1d')][_0x2ca71d[_0xb53c('0x103')]][_0xb53c('0x111')]){this['agents'][_0x2ca71d[_0xb53c('0x103')]][_0xb53c('0x111')]=![];this[_0xb53c('0x105')][_0x34ba0f[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]]['queue']]=[];this['preview']['run'](_0x2ca71d['idHopper'],_0x2ca71d['stateinterface'])['catch'](function(_0x1e1eab){logger[_0xb53c('0x8f')](_0xb53c('0x10d'),util[_0xb53c('0x91')](_0x1e1eab,{'showHidden':![],'depth':null}));})['finally'](function(){_0x34ba0f[_0xb53c('0xaa')](_0x34ba0f[_0xb53c('0x1c')][_0x34ba0f['actions'][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]]);setTimeout(function(){_0x34ba0f[_0xb53c('0x1d')][_0x2ca71d[_0xb53c('0x103')]][_0xb53c('0x111')]=!![];loggerBooked[_0xb53c('0x75')](_0xb53c('0x114'),_0x6f5d36[_0xb53c('0xff')],_0xb53c('0x115'),JSON['stringify'](_[_0xb53c('0xc8')](_0x34ba0f['agents'][_0x2ca71d[_0xb53c('0x103')]],['name',_0xb53c('0x111')])),_0xb53c('0x113'),JSON[_0xb53c('0x44')](_0x2ca71d[_0xb53c('0x107')]));},0xc7);delete _0x34ba0f[_0xb53c('0x21')][_0x6f5d36['actionid']];unlockQueueStatus(_0x9b415f,_0x6f5d36['actionid']);});}else{loggerBooked[_0xb53c('0x75')](_0xb53c('0x116'));this[_0xb53c('0xaa')](this['voiceQueues'][this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]]);this['rescheduleContact']({'active':![],'ContactId':this[_0xb53c('0x21')][_0x6f5d36['actionid']][_0xb53c('0xc9')],'ListId':this['actions'][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xca')],'VoiceQueueId':this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0x10e')]||undefined,'CampaignId':this[_0xb53c('0x21')][_0x6f5d36['actionid']][_0xb53c('0xcc')]||undefined})[_0xb53c('0xb1')](loggerCatch(_0xb53c('0x10f')));delete this['actions'][_0x6f5d36[_0xb53c('0xff')]];unlockQueueStatus(_0x9b415f);}}else{loggerBooked['info'](_0xb53c('0x117'));this[_0xb53c('0xaa')](this[_0xb53c('0x1c')][this[_0xb53c('0x21')][_0x6f5d36['actionid']][_0xb53c('0xab')]]);this[_0xb53c('0xb9')]({'active':![],'ContactId':this['actions'][_0x6f5d36[_0xb53c('0xff')]]['ContactId'],'ListId':this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xca')],'VoiceQueueId':this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0x10e')]||undefined,'CampaignId':this[_0xb53c('0x21')][_0x6f5d36['actionid']]['CampaignId']||undefined})[_0xb53c('0xb1')](loggerCatch(_0xb53c('0x118')));delete this['actions'][_0x6f5d36['actionid']];unlockQueueStatus(_0x9b415f);}}else{loggerBooked[_0xb53c('0x75')]('[booked][unlock3]');this['updateOriginated'](this[_0xb53c('0x1c')][this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xab')]]);this[_0xb53c('0xb9')]({'active':![],'ContactId':this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]]['ContactId'],'ListId':this[_0xb53c('0x21')][_0x6f5d36['actionid']][_0xb53c('0xca')],'VoiceQueueId':this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0x10e')]||undefined,'CampaignId':this[_0xb53c('0x21')][_0x6f5d36[_0xb53c('0xff')]][_0xb53c('0xcc')]||undefined})[_0xb53c('0xb1')](loggerCatch('[unlock3][syncQueueStatusComplete]'));delete this[_0xb53c('0x21')][_0x6f5d36['actionid']];unlockQueueStatus(_0x9b415f);}};Dialer[_0xb53c('0x19')][_0xb53c('0x36')]=function(){var _0x17a0ec=this;setInterval(function(){_0x17a0ec[_0xb53c('0x119')]();},0x3e8);};Dialer['prototype'][_0xb53c('0x11a')]=function(_0x4508e3){var _0x52d333=this;return function(){if(!_0x52d333[_0xb53c('0xd1')](_0x4508e3[_0xb53c('0x6c')])){if(!_0x52d333[_0xb53c('0xd1')](_0x4508e3[_0xb53c('0x11b')])){_0x4508e3['message']=_0xb53c('0x11c');throw _0x4508e3[_0xb53c('0x3b')]+_0xb53c('0x11d');}}};};Dialer[_0xb53c('0x19')]['checkIfTime']=function(_0xd4a5b3,_0x1ce4eb,_0x4ee22a,_0x5b32f6){var _0x5d4923=this;return function(){var _0x14c8d5=!![];return _0x5d4923['ifTime'](_0xd4a5b3,_0x1ce4eb,_0x4ee22a,_0x5b32f6,_0x14c8d5);};};Dialer[_0xb53c('0x19')]['checkIfTimeIntervals']=function(_0x130d7c,_0x820f54,_0x4febfa,_0x45277f){var _0x28da42=this;return function(){var _0x50dc66=![];return _0x28da42['ifTime'](_0x130d7c[_0xb53c('0x40')],_0x820f54,_0x4febfa,_0x45277f,_0x50dc66);};};Dialer[_0xb53c('0x19')][_0xb53c('0x11e')]=function(_0x26f683,_0x3e0d3d,_0x1a0019,_0x360423,_0x5604c0){var _0x2ff6db=[];return new BPromise(function(_0x806447,_0x58c652){if(!isNotNull(_0x26f683)){_0x360423[_0xb53c('0x39')]=_0xb53c('0x3f');return _0x58c652(msgResponse('ifTime',_0xb53c('0x11f'),_0x1a0019+_0xb53c('0x120')));}if(_[_0xb53c('0x73')](_0x26f683)){_0x360423['message']='INTERVAL_IS_EMPTY';return _0x58c652(msgResponse(_0xb53c('0x11e'),'Failure',_0x1a0019+_0xb53c('0x121')));}if(_0x3e0d3d&&_[_0xb53c('0x38')](config[_0xb53c('0x122')][_0x3e0d3d])){_0x360423[_0xb53c('0x39')]=_0xb53c('0x123');return _0x58c652(msgResponse(_0xb53c('0x11e'),_0xb53c('0x11f'),_0x1a0019+_0xb53c('0x124')+_0x3e0d3d));}if(_[_0xb53c('0x125')](_0x26f683)){for(var _0x5bcf12=0x0;_0x5bcf12<_0x26f683[_0xb53c('0x92')];_0x5bcf12+=0x1){_0x2ff6db[_0xb53c('0x106')](ami['Action']({'action':_0xb53c('0x126'),'command':util[_0xb53c('0x6f')](_0xb53c('0x127'),_0x26f683[_0x5bcf12][_0xb53c('0x128')],!_['isUndefined'](config['timezones'][_0x3e0d3d])?_0x3e0d3d:'')})['then'](function(_0x570564){return _0x570564['content']['indexOf']('true')>=0x0?!![]:![];})[_0xb53c('0xb1')](myreject(_0x58c652)));}}else{_0x2ff6db[_0xb53c('0x106')](ami[_0xb53c('0x129')]({'action':_0xb53c('0x126'),'command':util[_0xb53c('0x6f')](_0xb53c('0x127'),_0x26f683,!_['isUndefined'](config['timezones'][_0x3e0d3d])?_0x3e0d3d:'')})[_0xb53c('0xb0')](function(_0x19d1a7){return _0x19d1a7[_0xb53c('0x12a')][_0xb53c('0x12b')](_0xb53c('0x12c'))>=0x0?!![]:![];})['catch'](myreject(_0x58c652)));}BPromise['all'](_0x2ff6db)['then'](function(_0x538dc8){var _0x26fb44=_[_0xb53c('0x12d')](_0x538dc8);if(_0x26fb44){return _0x806447(_0x26fb44);}else{_0x360423['message']=_0x5604c0?_0xb53c('0x12e'):_0xb53c('0x12f');return _0x58c652(msgResponse('[ifTime][promiseAll]',_0xb53c('0x11f'),'Global:\x20'+_0x5604c0+'\x20'+_0x1a0019+'\x20Interval\x20is\x20overtime:\x20'+util[_0xb53c('0x91')](_0x26f683,{'showHidden':![],'depth':null})+_0xb53c('0x130')+_0x3e0d3d));}})['catch'](function(_0x565d4b){return _0x58c652(msgResponse(_0xb53c('0x11e'),_0xb53c('0x11f'),JSON[_0xb53c('0x44')](_0x565d4b)));});});};Dialer[_0xb53c('0x19')][_0xb53c('0x131')]=function(_0x289bd9){var _0x18f64e=this;return function(){switch(_0x289bd9[_0xb53c('0x52')]){case _0xb53c('0x132'):freeVariablesPredictive(_0x289bd9);_0x18f64e[_0xb53c('0x133')](_0x289bd9,0x1);break;case _0xb53c('0x134'):freeVariablesPredictive(_0x289bd9);_0x18f64e[_0xb53c('0x133')](_0x289bd9,_0x289bd9[_0xb53c('0x135')]);break;case _0xb53c('0x136'):_0x18f64e[_0xb53c('0x136')](_0x289bd9);break;case _0xb53c('0x6'):freeVariablesPredictive(_0x289bd9);_0x18f64e[_0xb53c('0x133')](_0x289bd9,0x1);break;default:freeVariablesPredictive(_0x289bd9);logger[_0xb53c('0x8f')](_0xb53c('0x137'),_0x289bd9[_0xb53c('0x3b')],'method\x20not\x20recognized');}};};Dialer[_0xb53c('0x19')]['launchHandleIvr']=function(_0x15bba3){var _0x4d5e39=this;return function(){_0x4d5e39[_0xb53c('0x138')](_0x15bba3);};};Dialer[_0xb53c('0x19')][_0xb53c('0x9')]=function(_0x51588c){var _0x59cfac=this;if(isNotPreview(_0x51588c[_0xb53c('0x52')])){if(isVoiceQueueOutbound(_0x51588c[_0xb53c('0x71')])&&isActive(_0x51588c['dialActive'])){_0x51588c[_0xb53c('0x9a')]=!![];BPromise['resolve']()[_0xb53c('0xb0')](checkIsLoggedIn(_0x51588c,_0x51588c['loggedIn']))['then'](checkIsActive(_0x51588c,_0x51588c[_0xb53c('0x139')]))[_0xb53c('0xb0')](checkInterval(_0x51588c))[_0xb53c('0xb0')](_0x59cfac[_0xb53c('0x11a')](_0x51588c))[_0xb53c('0xb0')](_0x59cfac[_0xb53c('0x13a')](_0x51588c[_0xb53c('0x13b')],_0x51588c[_0xb53c('0x13c')],_0x51588c['name'],_0x51588c))['then'](_0x59cfac[_0xb53c('0x13d')](_0x51588c['Interval'],_0x51588c[_0xb53c('0x13c')],_0x51588c[_0xb53c('0x3b')],_0x51588c))[_0xb53c('0xb0')](_0x59cfac[_0xb53c('0x131')](_0x51588c))[_0xb53c('0xb1')](loggerCatchQueueSummary(_0xb53c('0x13e'),_0x51588c));}else{notSendMessagesQueue(_0x51588c);}}else{freeVariablesPredictive(_0x51588c);}};Dialer[_0xb53c('0x19')]['syncCampaigns']=function(){var _0x30ece0=this;var _0x3821f6;for(var _0x207585 in this[_0xb53c('0xad')]){if(this[_0xb53c('0xad')][_0xb53c('0x13f')](_0x207585)){_0x3821f6=this[_0xb53c('0xad')][_0x207585];if(isCampaignIvr(_0x3821f6[_0xb53c('0x71')])&&isActive(_0x3821f6['active'])){_0x3821f6[_0xb53c('0x9a')]=!![];BPromise[_0xb53c('0xba')]()[_0xb53c('0xb0')](checkIsActive(_0x3821f6,_0x3821f6[_0xb53c('0x6d')]))[_0xb53c('0xb0')](checkInterval(_0x3821f6))[_0xb53c('0xb0')](_0x30ece0['checkIsTrunkReachable'](_0x3821f6))['then'](_0x30ece0[_0xb53c('0x13a')](_0x3821f6['dialGlobalInterval'],_0x3821f6[_0xb53c('0x13c')],_0x3821f6[_0xb53c('0x3b')],_0x3821f6))['then'](_0x30ece0[_0xb53c('0x13d')](_0x3821f6[_0xb53c('0x3e')],_0x3821f6['dialTimezone'],_0x3821f6[_0xb53c('0x3b')],_0x3821f6))['then'](_0x30ece0[_0xb53c('0x140')](_0x3821f6))[_0xb53c('0xb1')](loggerCatchQueueSummary(_0xb53c('0x141'),_0x3821f6));}else{notSendMessagesCampaign(_0x3821f6);}}}};function getCallerIdRandom(_0x12c2a4,_0x31707e){var _0x510c8d,_0x8c9db3,_0x344115;if(_0x31707e<=0x0){_0x31707e=0x1;}_0x510c8d=new RegExp('\x5cw{0,'+_0x31707e+'}$');_0x8c9db3=Math['pow'](0xa,_0x31707e-0x1);_0x344115=Math['pow'](0xa,_0x31707e)-0x1;return util['format']('%s',_['replace'](_0x12c2a4,_0x510c8d,_[_0xb53c('0x142')](_0x8c9db3,_0x344115)));}function extractCalleridName(_0x3e32c2){var _0x14b2db=_0x3e32c2[_0xb53c('0x143')](/"(.*?)"/);return _0x14b2db?_0x14b2db[0x1]:_0x3e32c2;}function extractCalleridNumber(_0x46ac66){var _0x4492bb=_0x46ac66[_0xb53c('0x143')](/<(.*?)>/);return _0x4492bb?_0x4492bb[0x1]:_0x46ac66;}Dialer[_0xb53c('0x19')][_0xb53c('0x144')]=function(_0x233695,_0x5a62b7){var _0x26dec7=this;var _0x5ef692=uuid['v4']();this[_0xb53c('0x21')][_0x5ef692]=new Action(_0x233695,_0x5a62b7,_0x5ef692);return new BPromise(function(_0x55e727,_0x1661ff){if(_[_0xb53c('0x38')](_0x233695)&&_0xb53c('0x145')!==typeof _0x233695){return _0x1661ff(msgResponse(_0xb53c('0x146'),_0xb53c('0x11f'),_0xb53c('0x147')));}if(_[_0xb53c('0x38')](_0x5a62b7[_0xb53c('0x148')]['phone'])||_0x5a62b7[_0xb53c('0x148')][_0xb53c('0x149')]===null){return _0x1661ff(msgResponse(_0xb53c('0x146'),_0xb53c('0x11f'),'contact\x20is\x20undefine'));}var _0xfac56d={'XMD-CALLERID':_0x26dec7[_0xb53c('0x21')][_0x5ef692]['getCaller'](),'XMD-AGI':_0x233695['dialQueueProject']?util[_0xb53c('0x6f')](_0xb53c('0x14a'),ipAgi,_0x233695[_0xb53c('0xed')]):_0xb53c('0x14b'),'XMD-AGIAFTER':_0x233695[_0xb53c('0xf4')]?util['format'](_0xb53c('0x14a'),ipAgi,_0x233695['dialQueueProject2']):_0xb53c('0x14b'),'XMD-QUEUE':_0x233695[_0xb53c('0x71')]===_0xb53c('0x48')?util[_0xb53c('0x6f')]('\x22%s,%s%s,,,%s\x22',_0x233695[_0xb53c('0x3b')],_0x233695['dialQueueOptions']||'',_0x233695[_0xb53c('0x14c')]?'c':'',_0x233695[_0xb53c('0xfa')]||0x3):_0xb53c('0x14b'),'XMD-CONTACTID':_0x5a62b7[_0xb53c('0xc9')],'XMD-CDRTYPE':'dialer','CALLERID(all)':_0x26dec7[_0xb53c('0x21')][_0x5ef692][_0xb53c('0x14d')](),'XMD-AMD':_0x233695[_0xb53c('0xe0')]?_0xb53c('0x14e'):_0xb53c('0x14b'),'XMD-DESTINATION':_0xb53c('0xdb')};if(_0x233695[_0xb53c('0xe0')]){_0xfac56d['XMD-AMDINITIALSILENCE']=_0x233695['dialAMDInitialSilence']||0x9c4;_0xfac56d[_0xb53c('0x14f')]=_0x233695[_0xb53c('0x150')]||0x5dc;_0xfac56d['XMD-AMDAFTERGREETINGSILENCE']=_0x233695[_0xb53c('0x151')]||0x320;_0xfac56d['XMD-AMDTOTALANALYSISTIME']=_0x233695['dialAMDTotalAnalysisTime']||0x1388;_0xfac56d['XMD-AMDMINWORDLENGTH']=_0x233695[_0xb53c('0x152')]||0x64;_0xfac56d[_0xb53c('0x153')]=_0x233695[_0xb53c('0x154')]||0x32;_0xfac56d['XMD-AMDMAXIMUMNUMBEROFWORDS']=_0x233695[_0xb53c('0x155')]||0x3;_0xfac56d[_0xb53c('0x156')]=_0x233695[_0xb53c('0x157')]||0x100;_0xfac56d[_0xb53c('0x158')]=_0x233695[_0xb53c('0x159')]||0x1388;}if(_0x233695[_0xb53c('0x71')]===_0xb53c('0x48')){_0xfac56d[_0xb53c('0x15a')]=_0x5a62b7['VoiceQueueId'];}else{_0xfac56d[_0xb53c('0x15b')]=_0x5a62b7[_0xb53c('0xcc')];}for(var _0x5cdca6 in _0x5a62b7['Contact']){if(_0x5a62b7[_0xb53c('0x148')][_0xb53c('0x13f')](_0x5cdca6)){if(isNotNull(_0x5a62b7['Contact'][_0x5cdca6])&&_0x5cdca6!=='id'&&_0x5cdca6!==_0xb53c('0x15c')&&_0x5cdca6!==_0xb53c('0x15d')&&_0x5cdca6!=='updatedAt'){_0xfac56d[util[_0xb53c('0x6f')]('%s%s',_0xb53c('0x15e'),_[_0xb53c('0x15f')](_0x5cdca6))]=_0x5a62b7[_0xb53c('0x148')][_0x5cdca6];}}}var _0x4e0486=_0x26dec7['isTrunkReachable'](_0x233695[_0xb53c('0x6c')])?getCallerId(_0x233695[_0xb53c('0x6c')][_0xb53c('0x6e')],_0x233695[_0xb53c('0x160')],_0x233695[_0xb53c('0x161')]>0x0?getCallerIdRandom(_0x233695[_0xb53c('0x53')],_0x233695[_0xb53c('0x161')]):_0x233695[_0xb53c('0x53')]):getCallerId(_[_0xb53c('0xa8')](_0x233695['TrunkBackup'])?_0x233695[_0xb53c('0x6c')][_0xb53c('0x6e')]:_0x233695[_0xb53c('0x11b')]['callerid'],_0x233695[_0xb53c('0x160')],_0x233695[_0xb53c('0x161')]>0x0?getCallerIdRandom(_0x233695[_0xb53c('0x53')],_0x233695[_0xb53c('0x161')]):_0x233695[_0xb53c('0x53')]);if(_0x4e0486){_0xfac56d[_0xb53c('0x162')]=_0x26dec7[_0xb53c('0x21')][_0x5ef692][_0xb53c('0x163')]=extractCalleridName(_0x4e0486);_0xfac56d[_0xb53c('0x164')]=_0x26dec7[_0xb53c('0x21')][_0x5ef692][_0xb53c('0x165')]=extractCalleridNumber(_0x4e0486);}return ami[_0xb53c('0x129')]({'actionid':_0x5ef692,'action':_0xb53c('0x146'),'channel':_0x26dec7[_0xb53c('0xd1')](_0x233695['Trunk'])?util[_0xb53c('0x6f')](_0xb53c('0x166'),_0x233695[_0xb53c('0x6c')][_0xb53c('0x3b')],isNotNull(_0x233695['dialPrefix'])?_0x233695[_0xb53c('0x55')][_0xb53c('0x167')]()||'':'',_0x233695[_0xb53c('0x168')]>0x0?_0x5a62b7[_0xb53c('0x148')]['phone'][_0xb53c('0x169')](_0x233695[_0xb53c('0x168')]):_0x5a62b7['Contact']['phone']):util[_0xb53c('0x6f')](_0xb53c('0x166'),_[_0xb53c('0xa8')](_0x233695['TrunkBackup'])?_0x233695[_0xb53c('0x6c')]['name']:_0x233695['TrunkBackup']['name'],isNotNull(_0x233695[_0xb53c('0x55')])?_0x233695[_0xb53c('0x55')]['trim']()||'':'',_0x233695[_0xb53c('0x168')]>0x0?_0x5a62b7[_0xb53c('0x148')][_0xb53c('0x149')][_0xb53c('0x169')](_0x233695['dialCutDigit']):_0x5a62b7['Contact'][_0xb53c('0x149')]),'callerid':_0x4e0486,'Exten':_0xb53c('0xdb'),'Context':_0xb53c('0x16a'),'Priority':'1','variable':_0xfac56d,'timeout':(_0x233695[_0xb53c('0x54')]||0x1e)*0x3e8,'async':!![],'channelid':_0x5ef692})[_0xb53c('0xb0')](function(_0x342c64){return _0x55e727(_0x342c64);})[_0xb53c('0xb1')](function(_0x2a36c5){_0x233695[_0xb53c('0x5d')]+=0x1;var _0x210995=new History(_0x26dec7[_0xb53c('0x21')][_0x5ef692]);logger[_0xb53c('0x8f')](util['format'](_0xb53c('0x16b'),JSON['stringify'](_0x2a36c5)));_0x210995['state']=0xe;_0x210995[_0xb53c('0xa1')]='OriginateError';_0x210995[_0xb53c('0x16c')]=moment()[_0xb53c('0x6f')]('YYYY-MM-DD\x20HH:mm:ss');_0x210995[_0xb53c('0xa2')]=_0x210995[_0xb53c('0x16c')];_0x26dec7[_0xb53c('0xc2')](_0x210995)[_0xb53c('0xb1')](loggerCatch('[originate][error]'));_0x26dec7[_0xb53c('0xd6')](_0x210995)[_0xb53c('0xb1')](loggerCatch(_0xb53c('0x16d')))[_0xb53c('0x1b')](function(){delete _0x26dec7[_0xb53c('0x21')][_0x5ef692];return _0x1661ff(msgResponse(_0xb53c('0x146'),_0xb53c('0x43'),'originate\x20action\x20Error'));});});});};Dialer[_0xb53c('0x19')][_0xb53c('0x2c')]=function(_0x3a39ff){var _0x16324b=this[_0xb53c('0x21')][_0x3a39ff['actionid']];var _0x42ce0b=this;if(_0x16324b){delete this['actions'][_0x3a39ff[_0xb53c('0xff')]];_0x16324b[_0xb53c('0x16e')]=moment()[_0xb53c('0x6f')]('YYYY-MM-DD\x20HH:mm:ss');var _0x335b4e=_0x16324b[_0xb53c('0x71')]===_0xb53c('0x8b')?this['campaigns'][_0x16324b[_0xb53c('0xab')]]:this[_0xb53c('0x1c')][_0x16324b[_0xb53c('0x16f')]()];if(!this[_0xb53c('0xcf')](_0x3a39ff[_0xb53c('0x170')])){this[_0xb53c('0xaa')](_0x335b4e);return this[_0xb53c('0x171')](_0x16324b,_0x335b4e,_0x3a39ff)[_0xb53c('0xb0')](function(_0x3eef27){})[_0xb53c('0xb1')](loggerCatch(_0xb53c('0x172')));}else{this[_0xb53c('0xdd')][_0x3a39ff[_0xb53c('0xd7')]]=_0x16324b;}}};Dialer['prototype'][_0xb53c('0x173')]=function(_0x2706ad,_0x4731c5,_0x4be9e9){var _0x1db454=new History(_0x4731c5);if(_0x1db454[_0xb53c('0x174')]+_0x1db454['countcongestionretry']+_0x1db454['countnoanswerretry']>=_0x4be9e9[_0xb53c('0x175')]-0x1){return!![];}switch(_0x2706ad){case 0x3:if(_0x1db454[_0xb53c('0x176')]>=_0x4be9e9[_0xb53c('0x177')]-0x1){return!![];}else{this[_0xb53c('0xb9')]({'active':![],'countnoanswerretry':_0x1db454[_0xb53c('0x176')]+=0x1,'scheduledat':moment()[_0xb53c('0x178')](_0x4be9e9[_0xb53c('0x179')],_0xb53c('0x17a'))[_0xb53c('0x6f')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x1db454[_0xb53c('0xc9')],'ListId':_0x1db454[_0xb53c('0xca')],'VoiceQueueId':_0x1db454[_0xb53c('0x10e')]||undefined,'CampaignId':_0x1db454[_0xb53c('0xcc')]||undefined})[_0xb53c('0xb1')](loggerCatch(_0xb53c('0x17b')));}break;case 0x5:if(_0x1db454['countbusyretry']>=_0x4be9e9[_0xb53c('0x17c')]-0x1){return!![];}else{this['rescheduleContact']({'active':![],'countbusyretry':_0x1db454[_0xb53c('0x174')]+=0x1,'scheduledat':moment()['add'](_0x4be9e9[_0xb53c('0x17d')],_0xb53c('0x17a'))[_0xb53c('0x6f')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x1db454[_0xb53c('0xc9')],'ListId':_0x1db454[_0xb53c('0xca')],'VoiceQueueId':_0x1db454[_0xb53c('0x10e')]||undefined,'CampaignId':_0x1db454[_0xb53c('0xcc')]||undefined})[_0xb53c('0xb1')](loggerCatch('[rescheduleContact]\x20[Busy]'));}break;case 0x8:if(_0x1db454[_0xb53c('0x17e')]>=_0x4be9e9['dialCongestionMaxRetry']-0x1){return!![];}else{this[_0xb53c('0xb9')]({'active':![],'countcongestionretry':_0x1db454[_0xb53c('0x17e')]+=0x1,'scheduledat':moment()['add'](_0x4be9e9[_0xb53c('0x17f')],_0xb53c('0x17a'))[_0xb53c('0x6f')](_0xb53c('0xf5')),'ContactId':_0x1db454[_0xb53c('0xc9')],'ListId':_0x1db454[_0xb53c('0xca')],'VoiceQueueId':_0x1db454['VoiceQueueId']||undefined,'CampaignId':_0x1db454['CampaignId']||undefined})[_0xb53c('0xb1')](loggerCatch(_0xb53c('0x180')));}break;default:return!![];}};Dialer[_0xb53c('0x19')][_0xb53c('0x171')]=function(_0x243b5c,_0x345a02,_0x5f0c73){var _0x3f8ce2=this;var _0x5f4263=new History(_0x243b5c);return new BPromise(function(_0x4aca83,_0x3468a4){if(_[_0xb53c('0x38')](_0x345a02)&&_0xb53c('0x145')!==typeof _0x345a02){return _0x3468a4(msgResponse(_0xb53c('0x181'),'Failure',_0xb53c('0x182')));}if(_[_0xb53c('0x38')](_0x5f0c73)&&_0xb53c('0x145')!==typeof _0x5f0c73){return _0x3468a4(msgResponse(_0xb53c('0x181'),_0xb53c('0x11f'),_0xb53c('0x183')));}switch(_0x5f0c73[_0xb53c('0x184')]){case'0':_0x345a02[_0xb53c('0x5c')]+=0x1;_0x5f4263[_0xb53c('0xa0')]=0x0;_0x5f4263[_0xb53c('0xa1')]=_0xb53c('0x185');_0x3f8ce2['createHistory'](_0x5f4263)[_0xb53c('0xb1')](loggerCatch('[syncAgentComplete][createHistory][0]'));if(_0x3f8ce2['checkRetriveMax'](0x0,_0x243b5c,_0x345a02)){if(_0x5f4263[_0xb53c('0x174')]+_0x5f4263[_0xb53c('0x17e')]+_0x5f4263[_0xb53c('0x176')]>=_0x345a02[_0xb53c('0x175')]){_0x3f8ce2[_0xb53c('0x186')](_0x5f4263,_0x4aca83,_0x3468a4,_0xb53c('0x187'));}else{_0x3f8ce2[_0xb53c('0x188')](_0x5f4263,_0x4aca83,_0x3468a4,_0xb53c('0x187'));}}break;case'3':_0x345a02[_0xb53c('0x5b')]+=0x1;_0x5f4263[_0xb53c('0xa0')]=0x3;_0x5f4263[_0xb53c('0xa1')]=_0xb53c('0x189');_0x5f4263['countnoanswerretry']+=0x1;_0x5f4263[_0xb53c('0x18a')]+=0x1;_0x3f8ce2[_0xb53c('0xc2')](_0x5f4263)[_0xb53c('0xb1')](loggerCatch('[syncAgentComplete][createHistory][3]'));if(_0x3f8ce2[_0xb53c('0x173')](0x3,_0x243b5c,_0x345a02)){if(_0x5f4263[_0xb53c('0x176')]>=_0x345a02['dialNoAnswerMaxRetry']){_0x3f8ce2[_0xb53c('0x188')](_0x5f4263,_0x4aca83,_0x3468a4,_0xb53c('0x18b'));}else{_0x3f8ce2[_0xb53c('0x186')](_0x5f4263,_0x4aca83,_0x3468a4,'reason\x203\x20ringing\x20no\x20answer');}}break;case'5':_0x345a02[_0xb53c('0x58')]+=0x1;_0x5f4263['state']=0x5;_0x5f4263['statedesc']=_0xb53c('0x18c');_0x5f4263[_0xb53c('0x174')]+=0x1;_0x5f4263['countglobal']+=0x1;_0x3f8ce2['createHistory'](_0x5f4263)[_0xb53c('0xb1')](loggerCatch(_0xb53c('0x18d')));if(_0x3f8ce2[_0xb53c('0x173')](0x5,_0x243b5c,_0x345a02)){if(_0x5f4263[_0xb53c('0x174')]>=_0x345a02[_0xb53c('0x17c')]){_0x3f8ce2['createStateFinal'](_0x5f4263,_0x4aca83,_0x3468a4,_0xb53c('0x18e'));}else{_0x3f8ce2[_0xb53c('0x186')](_0x5f4263,_0x4aca83,_0x3468a4,_0xb53c('0x18e'));}}break;case'8':_0x345a02['outboundCongestionCallsDay']+=0x1;_0x5f4263[_0xb53c('0xa0')]=0x8;_0x5f4263[_0xb53c('0xa1')]=_0xb53c('0x18f');_0x5f4263['countcongestionretry']+=0x1;_0x5f4263[_0xb53c('0x18a')]+=0x1;_0x3f8ce2[_0xb53c('0xc2')](_0x5f4263)['catch'](loggerCatch(_0xb53c('0x190')));if(_0x3f8ce2[_0xb53c('0x173')](0x8,_0x243b5c,_0x345a02)){if(_0x5f4263[_0xb53c('0x17e')]>=_0x345a02[_0xb53c('0x191')]){_0x3f8ce2[_0xb53c('0x188')](_0x5f4263,_0x4aca83,_0x3468a4,_0xb53c('0x192'));}else{_0x3f8ce2[_0xb53c('0x186')](_0x5f4263,_0x4aca83,_0x3468a4,_0xb53c('0x192'));}}break;default:_0x345a02[_0xb53c('0x5f')]+=0x1;_0x5f4263[_0xb53c('0xa0')]=0xc;_0x5f4263[_0xb53c('0xa1')]=_0x5f0c73['reason'];_0x3f8ce2['createHistory'](_0x5f4263)['catch'](loggerCatch(_0xb53c('0x193')));if(_0x3f8ce2['checkRetriveMax'](_0x5f0c73[_0xb53c('0x184')],_0x243b5c,_0x345a02)){if(_0x5f4263[_0xb53c('0x174')]+_0x5f4263[_0xb53c('0x17e')]+_0x5f4263[_0xb53c('0x176')]>=_0x345a02['dialGlobalMaxRetry']){_0x3f8ce2[_0xb53c('0x186')](_0x5f4263,_0x4aca83,_0x3468a4,_0x5f0c73[_0xb53c('0x184')]);}else{_0x3f8ce2[_0xb53c('0x188')](_0x5f4263,_0x4aca83,_0x3468a4,_0x5f0c73[_0xb53c('0x184')]);}}}});};Dialer[_0xb53c('0x19')]['stateGlobal']=function(_0x25c054,_0x38b179,_0x602a44,_0x1a2db7){var _0x3dc67f=new Final(_0x25c054);_0x3dc67f[_0xb53c('0xa0')]=0xf;_0x3dc67f[_0xb53c('0xa1')]=_0xb53c('0x194');this[_0xb53c('0x188')](_0x3dc67f,_0x38b179,_0x602a44,_0x1a2db7);};Dialer['prototype'][_0xb53c('0x188')]=function(_0x572966,_0x4cc7d0,_0x59ffca,_0x4cd031){this[_0xb53c('0xd6')](_0x572966)[_0xb53c('0xb0')](function(_0x46b7eb){return _0x4cc7d0(msgResponse(_0xb53c('0x181'),_0xb53c('0xd0'),_0x4cd031));})[_0xb53c('0xb1')](function(_0x5f1274){return _0x59ffca(msgResponse(_0xb53c('0x195'),_0xb53c('0x11f'),_0xb53c('0x196')));});};Dialer['prototype'][_0xb53c('0x136')]=function(_0x164cef){var _0x300487=this;var _0x2e07c9=_0x164cef[_0xb53c('0x197')]/0x64;var _0x2572d1=_0x164cef[_0xb53c('0xfb')]/(_0x164cef[_0xb53c('0xfb')]+_0x164cef[_0xb53c('0x57')]);var _0x3fe615=Math['round'](_0x164cef[_0xb53c('0x198')]*(_0x164cef[_0xb53c('0x199')]/0x64));var _0x21aed1=Math[_0xb53c('0x19a')](_0x164cef[_0xb53c('0x198')]*(_0x164cef[_0xb53c('0x19b')]/0x64));var _0x393603=_0x164cef['available']+_0x164cef[_0xb53c('0x4c')];var _0x52dc9a=Math[_0xb53c('0x19c')](_0x164cef[_0xb53c('0x81')]*_0x164cef[_0xb53c('0x69')]*_0x164cef[_0xb53c('0x66')]*_0x164cef[_0xb53c('0x19d')]);if(_['isUndefined'](_0x164cef[_0xb53c('0x6b')])){if(!_[_0xb53c('0x38')](_0x164cef[_0xb53c('0x24')])){_0x164cef[_0xb53c('0x24')]=undefined;loggerPredictive[_0xb53c('0x8f')](_0xb53c('0x19e'),_0xb53c('0x19f'));}if(!_[_0xb53c('0x38')](_0x164cef['handlePredictive'])){loggerPredictive[_0xb53c('0x8f')](_0xb53c('0x19e'),_0xb53c('0x1a0'));clearInterval(_0x164cef['handlePredictive']);_0x164cef[_0xb53c('0x88')]=undefined;}_0x164cef['startProgressive']=moment()['format'](_0xb53c('0xf5'));loggerPredictive['info'](_0x164cef[_0xb53c('0x3b')],_0xb53c('0x1a1'),_0x164cef[_0xb53c('0x6b')]);this['handlePower'](_0x164cef,0x1);}else if(ifInterval(_0x164cef[_0xb53c('0x1a2')],_0x164cef[_0xb53c('0x6b')])){this[_0xb53c('0x133')](_0x164cef,0x1);loggerPredictiveCalls['info'](_0xb53c('0x1a3'),_0x164cef[_0xb53c('0x6b')],_0x164cef[_0xb53c('0x3b')]);_0x164cef[_0xb53c('0x81')]=0x0;_0x164cef[_0xb53c('0x65')]=0x0;}else if(_0x2e07c9<_0x2572d1&&_0x164cef[_0xb53c('0x1a4')]===_0xb53c('0x1a5')){freeVariablesPredictive(_0x164cef);loggerPredictive[_0xb53c('0x75')]('[stopMethodPredictive][ReStartProgressive][ExceededDropDay]',_0xb53c('0x1a6'),_0x2572d1,_0xb53c('0x6b'),_0x164cef['name']);}else if(_0x52dc9a<_0x164cef['predictiveIntervalErlangCallsDroppedCalls']&&_0x164cef['dialPredictiveOptimization']===_0xb53c('0x1a5')){freeVariablesPredictive(_0x164cef);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x1a7'),_0xb53c('0x1a8'),_0x52dc9a,'Drop\x20in\x20this\x20interval',_0x164cef[_0xb53c('0x65')],_0xb53c('0x6b'),_0x164cef[_0xb53c('0x3b')]);}else if(!ifInterval(_0x164cef[_0xb53c('0x1a2')],_0x164cef[_0xb53c('0x6b')])&&_['isUndefined'](_0x164cef[_0xb53c('0x24')])&&!_[_0xb53c('0x38')](_0x164cef[_0xb53c('0x6b')])){_0x164cef[_0xb53c('0x24')]=moment()['format'](_0xb53c('0xf5'));loggerPredictive[_0xb53c('0x75')](_0x164cef[_0xb53c('0x3b')],'started\x20in\x20predictive\x20at',_0x164cef[_0xb53c('0x24')]);this[_0xb53c('0xb6')](_0x164cef['dialPredictiveInterval'])['then'](this['getDataPredictive'](_0x164cef))[_0xb53c('0xb0')](mergeDataErlangB(_0x164cef))[_0xb53c('0xb0')](this['startMethodPredictive'](_0x164cef))[_0xb53c('0xb1')](loggerCatchPredictive(_0xb53c('0x1a9'),_0x164cef));}else if(!ifInterval(_0x164cef[_0xb53c('0x1a2')],_0x164cef[_0xb53c('0x24')])){_0x164cef[_0xb53c('0x65')]=0x0;_0x164cef[_0xb53c('0x24')]=moment()[_0xb53c('0x6f')](_0xb53c('0xf5'));loggerPredictive[_0xb53c('0x75')](_0x164cef['name'],_0xb53c('0x1aa'),_0x164cef[_0xb53c('0x24')]);clearInterval(_0x164cef[_0xb53c('0x88')]);_0x164cef[_0xb53c('0x88')]=undefined;this['averageHandleTime'](_0x164cef[_0xb53c('0x1a2')])[_0xb53c('0xb0')](this[_0xb53c('0x1ab')](_0x164cef))[_0xb53c('0xb0')](mergeDataErlangB(_0x164cef))[_0xb53c('0xb0')](this[_0xb53c('0x1ac')](_0x164cef))['catch'](loggerCatchPredictive(_0xb53c('0x1ad'),_0x164cef));}else if(_0x164cef[_0xb53c('0x198')]&&_0x393603<_0x164cef[_0xb53c('0x198')]-_0x21aed1){freeVariablesPredictive(_0x164cef);loggerPredictive[_0xb53c('0x75')](_0x164cef[_0xb53c('0x3b')],'switch\x20in\x20progressive\x20because\x20available\x20agents\x20(',_0x393603,_0xb53c('0x1ae'),_0x164cef[_0xb53c('0x198')],'-',_0x21aed1,'=',_0x164cef[_0xb53c('0x198')]-_0x21aed1,')');}else if(_0x164cef['predictiveIntervalAvailable']&&_0x393603>_0x164cef[_0xb53c('0x198')]+_0x3fe615){freeVariablesPredictive(_0x164cef);loggerPredictive['info'](_0x164cef['name'],_0xb53c('0x1af'),_0x393603,_0xb53c('0x1b0'),_0x164cef[_0xb53c('0x198')],'+',_0x3fe615,'=',_0x164cef[_0xb53c('0x198')]+_0x3fe615,')');}};Dialer['prototype'][_0xb53c('0x1ab')]=function(_0x3bb236){var _0x5dac76=this;return function(_0x492290){return new BPromise(function(_0xec50d2,_0x414fb0){_[_0xb53c('0x85')](_0x3bb236,_0x492290[0x0]);if(checkGetDataPredictive(_0x492290[0x0])){var _0x30cfc1=_0x3bb236[_0xb53c('0x198')]=_0x3bb236[_0xb53c('0x4c')]+_0x3bb236[_0xb53c('0x49')];var _0x3d76b1=_0x3bb236[_0xb53c('0x1a2')]*0x3c;var _0x108b34=_0x492290[0x0][_0xb53c('0x61')]+_0x492290[0x0][_0xb53c('0x60')];var _0x1956f1=(_0x492290[0x0][_0xb53c('0x77')]+_0x492290[0x0][_0xb53c('0x63')]+_0x492290[0x0]['predictiveIntervalDroppedCallsCallersExit'])/_0x492290[0x0][_0xb53c('0x68')];_0x3bb236[_0xb53c('0x66')]=_0x1956f1>0x0?_0x1956f1:0x1;switch(_0x3bb236[_0xb53c('0x1a4')]){case _0xb53c('0x1a5'):var _0x2d3cd3=_0x3bb236[_0xb53c('0x197')]/0x64;return _0x5dac76[_0xb53c('0x1b1')](_0x30cfc1,_0x3d76b1,_0x108b34,_0x1956f1,_0x2d3cd3)[_0xb53c('0xb0')](function(_0x37d4f2){return _0xec50d2(_0x37d4f2);});case'agentBusyFactor':var _0x12b06b=_0x3bb236['dialPredictiveOptimizationPercentage']/0x64;return _0x5dac76['busyFactor'](_0x30cfc1,_0x3d76b1,_0x108b34,_0x1956f1,_0x12b06b)[_0xb53c('0xb0')](function(_0xc70654){return _0xec50d2(_0xc70654);});default:return _0x414fb0(msgResponse('[getDataPredictive]',_0xb53c('0x11f'),'Unknown\x20Predictive'));}}else{return _0x414fb0(msgResponse(_0xb53c('0x1b2'),_0xb53c('0x11f'),_0xb53c('0x1b3')));}});};};Dialer[_0xb53c('0x19')][_0xb53c('0x1b4')]=function(_0x219846){var _0x47cf99=this;return function(_0x115e2e){return new BPromise(function(_0x31f89b,_0xcb5d8f){_['merge'](_0x219846,_0x115e2e[0x0]);if(checkGetDataPredictive(_0x115e2e[0x0])){loggerPredictive[_0xb53c('0x75')](JSON[_0xb53c('0x44')](_0x115e2e[0x0]));if(_0x219846[_0xb53c('0x1a4')]===_0xb53c('0x1a5')){return _0x47cf99[_0xb53c('0xbf')](_0x219846['id'])[_0xb53c('0xb0')](function(_0x44721a){var _0x2c7dfa=_0x219846['loggedIn']-_0x44721a[0x0][_0xb53c('0x1b5')];var _0x26cfb1=_0x219846[_0xb53c('0x1a2')]*0x3c;var _0xa7bf64=_0x115e2e[0x0]['predictiveIntervalAvgTalktime']+_0x115e2e[0x0][_0xb53c('0x60')];var _0x27215d=(_0x115e2e[0x0]['predictiveIntervalAnsweredCalls']+_0x115e2e[0x0][_0xb53c('0x63')]+_0x115e2e[0x0][_0xb53c('0x62')])/_0x115e2e[0x0]['predictiveIntervalTotalCalls'];var _0x211758=_0x219846[_0xb53c('0x197')]/0x64;_0x219846[_0xb53c('0x67')]=_0x44721a[0x0]['outboundQueuePauses']||0x0;_0x219846['predictiveIntervalHitRate']=_0x27215d>0x0?_0x27215d:0x1;return _0x47cf99[_0xb53c('0x1b1')](_0x2c7dfa,_0x26cfb1,_0xa7bf64,_0x27215d,_0x211758);})[_0xb53c('0xb0')](function(_0x58057e){return _0x31f89b(_0x58057e);})[_0xb53c('0xb1')](function(_0x5898d8){return _0xcb5d8f(msgResponse(_0xb53c('0x1b6'),_0xb53c('0x11f'),JSON[_0xb53c('0x44')](_0x5898d8)));});}if(_0x219846['dialPredictiveOptimization']==='agentBusyFactor'){return _0x47cf99[_0xb53c('0xbf')](_0x219846['id'])['then'](function(_0xb9b6bf){var _0x1396f9=_0x219846['loggedIn']-_0xb9b6bf[0x0][_0xb53c('0x1b5')];var _0x3b1f17=_0x219846[_0xb53c('0x1a2')]*0x3c;var _0x260078=_0x115e2e[0x0][_0xb53c('0x61')]+_0x115e2e[0x0][_0xb53c('0x60')];var _0x4a8808=(_0x115e2e[0x0]['predictiveIntervalAnsweredCalls']+_0x115e2e[0x0][_0xb53c('0x63')]+_0x115e2e[0x0][_0xb53c('0x62')])/_0x115e2e[0x0][_0xb53c('0x68')];var _0x237ba8=_0x219846[_0xb53c('0x197')]/0x64;_0x219846[_0xb53c('0x67')]=_0xb9b6bf[0x0][_0xb53c('0x1b5')]||0x0;_0x219846['predictiveIntervalHitRate']=_0x4a8808>0x0?_0x4a8808:0x1;return _0x47cf99[_0xb53c('0x1b7')](_0x1396f9,_0x3b1f17,_0x260078,_0x4a8808,_0x237ba8);})[_0xb53c('0xb0')](function(_0x181c36){return _0x31f89b(_0x181c36);})[_0xb53c('0xb1')](function(_0x4a2224){return _0xcb5d8f(msgResponse(_0xb53c('0x1b6'),_0xb53c('0x11f'),JSON['stringify'](_0x4a2224)));});}}else{return _0xcb5d8f(msgResponse('[getDataPredictive]',_0xb53c('0x11f'),'check\x20failure'));}});};};Dialer['prototype']['startMethodPredictive']=function(_0x257847){var _0x5965f2=this;return function(){var _0x58c1f8=0x0;var _0x2b9839=Math[_0xb53c('0x19c')](_0x257847[_0xb53c('0x82')]*0x3e8);if(_0x2b9839>0x0){_0x2b9839=_0x2b9839<0x64?0x64:_0x2b9839;loggerPredictive[_0xb53c('0x75')](_0x257847[_0xb53c('0x3b')],_0xb53c('0x1b8'),_0x2b9839,_0xb53c('0x45'));_0x257847[_0xb53c('0x88')]=setInterval(function(){_0x5965f2[_0xb53c('0x88')](_0x257847);loggerPredictiveCalls[_0xb53c('0x75')](_0xb53c('0x1b9'),_0x58c1f8+=0x1);},_0x2b9839);}else{loggerPredictive[_0xb53c('0x75')](_0x257847[_0xb53c('0x3b')],_0xb53c('0x1ba'));}};};Dialer[_0xb53c('0x19')][_0xb53c('0x1bb')]=function(_0x29e7f0,_0x3300b4){var _0x4f5ad3=this;return function(_0x5779da){if(_[_0xb53c('0x73')](_0x5779da)){if(_[_0xb53c('0xa8')](_0x3300b4[_0xb53c('0xcb')])||!_0x3300b4[_0xb53c('0x1bc')]){if(_0x29e7f0[_0xb53c('0x52')]===_0xb53c('0x6')){_0x29e7f0[_0xb53c('0x108')]=_[_0xb53c('0x38')](_0x29e7f0[_0xb53c('0x108')])?!![]:_0x29e7f0['queueStatusComplete'];var _0x340c09=uuid['v4']();_0x4f5ad3[_0xb53c('0x21')][_0x340c09]=new Action(_0x29e7f0,_0x3300b4,_0x340c09);loggerBooked['info'](_0xb53c('0x1bd'),_0x340c09,_0xb53c('0x1be'),JSON['stringify'](_0x29e7f0[_0xb53c('0x108')]),_0xb53c('0x1bf'),_0x29e7f0[_0xb53c('0x3b')]);if(_0x29e7f0[_0xb53c('0x108')]){_0x29e7f0[_0xb53c('0x108')]=![];_0x4f5ad3[_0xb53c('0x105')][_0x4f5ad3['actions'][_0x340c09][_0xb53c('0xab')]]=[];ami['Action']({'actionid':_0x340c09,'action':_0xb53c('0x1c0'),'queue':_0x29e7f0['name']})[_0xb53c('0xb1')](function(_0xd058bd){_0x4f5ad3[_0xb53c('0xaa')](_0x29e7f0);_0x4f5ad3[_0xb53c('0xb9')]({'active':![],'ContactId':_0x4f5ad3[_0xb53c('0x21')][_0x340c09][_0xb53c('0xc9')],'ListId':_0x4f5ad3['actions'][_0x340c09][_0xb53c('0xca')],'VoiceQueueId':_0x4f5ad3[_0xb53c('0x21')][_0x340c09][_0xb53c('0x10e')]||undefined,'CampaignId':_0x4f5ad3[_0xb53c('0x21')][_0x340c09][_0xb53c('0xcc')]||undefined})[_0xb53c('0xb1')](loggerCatch(_0xb53c('0x1c1')));delete _0x4f5ad3[_0xb53c('0x21')][_0x340c09];});}else{loggerBooked[_0xb53c('0x75')](_0xb53c('0x1c2'),JSON[_0xb53c('0x44')](_0x29e7f0['queueStatusComplete']),_0xb53c('0x1bf'),_0x29e7f0[_0xb53c('0x3b')]);_0x4f5ad3['updateOriginated'](_0x29e7f0);_0x4f5ad3[_0xb53c('0xb9')]({'active':![],'ContactId':_0x4f5ad3[_0xb53c('0x21')][_0x340c09][_0xb53c('0xc9')],'ListId':_0x4f5ad3[_0xb53c('0x21')][_0x340c09][_0xb53c('0xca')],'VoiceQueueId':_0x4f5ad3[_0xb53c('0x21')][_0x340c09][_0xb53c('0x10e')]||undefined,'CampaignId':_0x4f5ad3[_0xb53c('0x21')][_0x340c09][_0xb53c('0xcc')]||undefined})[_0xb53c('0xb1')](loggerCatch(_0xb53c('0x1c1')));delete _0x4f5ad3['actions'][_0x340c09];}}else{return _0x4f5ad3[_0xb53c('0x144')](_0x29e7f0,_0x3300b4);}}else{if(getDiff(_0x3300b4[_0xb53c('0x1c3')])<_0x29e7f0[_0xb53c('0x1c4')]*0x3c){_0x4f5ad3['preview'][_0xb53c('0x10c')](_0x3300b4['id'])[_0xb53c('0x1b')](function(){_0x4f5ad3[_0xb53c('0xaa')](_0x29e7f0);});}else{_0x29e7f0['outboundReCallsDay']+=0x1;_0x4f5ad3[_0xb53c('0xaa')](_0x29e7f0);if(_0x29e7f0[_0xb53c('0x1c5')]){_0x4f5ad3[_0xb53c('0xb9')]({'active':![],'recallme':![],'UserId':null,'ContactId':_0x3300b4[_0xb53c('0xc9')],'ListId':_0x3300b4[_0xb53c('0xca')],'VoiceQueueId':_0x3300b4['VoiceQueueId']||undefined,'CampaignId':_0x3300b4['CampaignId']||undefined})['catch'](loggerCatch(_0xb53c('0x1c6')));_0x4f5ad3[_0xb53c('0xc2')](createObjHistory(_0x29e7f0,_0x3300b4,_0xb53c('0x1c7'),0x17,_0xb53c('0x1c8')))[_0xb53c('0xb1')](loggerCatch(_0xb53c('0x1c9')));}else{_0x4f5ad3[_0xb53c('0xd5')](createObjHistory(_0x29e7f0,_0x3300b4,_0xb53c('0x1ca'),0x16,_0xb53c('0x1cb')),'[Originate][HistoryRecallClose][historyCatch]',_0xb53c('0x1cc'));}}}}else{_0x29e7f0['outboundBlacklistCallsDay']+=0x1;_0x4f5ad3[_0xb53c('0xd5')](createObjHistory(_0x29e7f0,_0x3300b4,_0xb53c('0x1cd'),0xd,'Blacklist'),_0xb53c('0x1ce'),_0xb53c('0x1cf'));throw _0xb53c('0x1d0');}};};Dialer['prototype'][_0xb53c('0x138')]=function(_0x50f5b4){var _0x16d064=this;var _0x424811=[];var _0x959679=_0x50f5b4[_0xb53c('0x1d1')]-_0x50f5b4[_0xb53c('0x93')]-_0x50f5b4['temp'];emitCampaignSummary(_0x50f5b4);if(_0x959679>0x0){if(_0x959679>this[_0xb53c('0x1f')]){_0x959679=this[_0xb53c('0x1f')];}_0x50f5b4['temp']+=_0x959679;this['getContactDialerIvr'](_0x50f5b4['id'],_0x959679,_0x50f5b4[_0xb53c('0x1d2')])[_0xb53c('0xb0')](function(_0x596a29){_0x50f5b4[_0xb53c('0x1d3')]-=_0x959679;_0x50f5b4[_0xb53c('0x1d3')]=_0x50f5b4[_0xb53c('0x1d3')]>0x0?_0x50f5b4[_0xb53c('0x1d3')]:0x0;if(!checkContactEmpty(_0x596a29)){_0x50f5b4['message']=_0xb53c('0x1d4');logger['info'](_0xb53c('0x1d5')+_0x50f5b4['name']);}else{_0x50f5b4[_0xb53c('0x93')]+=_0x596a29[_0xb53c('0x92')];_0x50f5b4[_0xb53c('0x39')]=_0xb53c('0x1d6');for(var _0x38630a=0x0;_0x38630a<_0x596a29[_0xb53c('0x92')];_0x38630a+=0x1){_0x50f5b4['ivrTotalCallsDays']+=0x1;if(_[_0xb53c('0xa8')](_0x596a29[_0x38630a])||_[_0xb53c('0xa8')](_0x596a29[_0x38630a]['Contact'])||_[_0xb53c('0xa8')](_0x596a29[_0x38630a][_0xb53c('0x148')]['phone'])){_0x16d064[_0xb53c('0xc6')](_0xb53c('0x1d7'),_0x50f5b4,_0x596a29[_0x38630a]);}else{_0x16d064[_0xb53c('0xb5')](_['pick'](_0x596a29[_0x38630a],[_0xb53c('0xcc'),_0xb53c('0x1d8')]))[_0xb53c('0xb0')](_0x16d064[_0xb53c('0x1bb')](_0x50f5b4,_0x596a29[_0x38630a]))[_0xb53c('0xb1')](_0x16d064[_0xb53c('0xc5')](_0xb53c('0x1d9'),_0x50f5b4));}}}})[_0xb53c('0xb1')](loggerGetContactDialer(_0xb53c('0x1da'),_0x50f5b4,_0x959679));}};Dialer['prototype']['handlePower']=function(_0x37c6d4,_0x49ecb5){var _0x49b55e=this;var _0x19f8d1=[];var _0x15038f=_0x49ecb5>=0x1?_0x49ecb5:0x1;var _0x46323c=[];if(_0x37c6d4['dialMethod']===_0xb53c('0x6')){_0x15038f=0x1;}var _0x2247af=Math[_0xb53c('0x19c')](_0x37c6d4['available']*_0x15038f)-_0x37c6d4[_0xb53c('0x93')]-_0x37c6d4[_0xb53c('0x1d3')];emitVoiceQueueSummary(_0x37c6d4);if(_0x37c6d4['dialLimitQueue']>0x0){var _0x3480e9=_0x37c6d4[_0xb53c('0x1db')]-_0x37c6d4[_0xb53c('0x93')]-_0x37c6d4[_0xb53c('0x4c')]-_0x37c6d4[_0xb53c('0x1d3')]-_0x37c6d4[_0xb53c('0x9b')];if(_0x2247af>_0x3480e9){_0x2247af=_0x3480e9;}}if(_0x2247af>0x0){if(_0x37c6d4[_0xb53c('0x52')]===_0xb53c('0x6')){_0x2247af=0x1;}if(_0x2247af>this[_0xb53c('0x1f')]){_0x2247af=this[_0xb53c('0x1f')];}_0x37c6d4['temp']+=_0x2247af;for(var _0x2b1778 in this['agents']){if(this[_0xb53c('0x1d')][_0xb53c('0x13f')](_0x2b1778)){if(this['agents'][_0x2b1778][_0xb53c('0xa0')]==='not_inuse'&&this[_0xb53c('0x1d')][_0x2b1778][_0xb53c('0xd3')]==='reachable'){_0x19f8d1['push'](this[_0xb53c('0x1d')][_0x2b1778]['id']);}}}this[_0xb53c('0xbc')](_0x37c6d4['id'],_0x19f8d1,_0x2247af,_0x37c6d4[_0xb53c('0x1d2')])['then'](function(_0x3d9077){_0x37c6d4[_0xb53c('0x1d3')]-=_0x2247af;_0x37c6d4['temp']=_0x37c6d4['temp']>0x0?_0x37c6d4[_0xb53c('0x1d3')]:0x0;if(!checkContactEmpty(_0x3d9077)){_0x49b55e['countReScheduled'](_0x37c6d4)[_0xb53c('0xb0')](sendMessageReschedule(_0x37c6d4))[_0xb53c('0xb1')](loggerCatch(_0xb53c('0xb2')));}else{_0x37c6d4[_0xb53c('0x93')]+=_0x3d9077['length'];_0x37c6d4[_0xb53c('0x39')]=_0x37c6d4[_0xb53c('0x52')]===_0xb53c('0x6')?'ACTIVE':_0xb53c('0x1d6');for(var _0x1fc3ed=0x0;_0x1fc3ed<_0x3d9077[_0xb53c('0x92')];_0x1fc3ed+=0x1){if(_[_0xb53c('0xa8')](_0x3d9077[_0x1fc3ed])||_['isNil'](_0x3d9077[_0x1fc3ed]['Contact'])||_['isNil'](_0x3d9077[_0x1fc3ed][_0xb53c('0x148')][_0xb53c('0x149')])){_0x49b55e[_0xb53c('0xc6')]('[actionOriginate]\x20',_0x37c6d4,_0x3d9077[_0x1fc3ed]);}else{_0x49b55e[_0xb53c('0xb3')](_['pick'](_0x3d9077[_0x1fc3ed],['VoiceQueueId','Contact.phone']))[_0xb53c('0xb0')](_0x49b55e['checkContactBlack'](_0x37c6d4,_0x3d9077[_0x1fc3ed]))[_0xb53c('0xb1')](_0x49b55e['loggerHandler'](_0xb53c('0x1d7'),_0x37c6d4));}}}})['catch'](loggerGetContactDialer(_0xb53c('0x1dc'),_0x37c6d4,_0x2247af));}};Dialer[_0xb53c('0x19')][_0xb53c('0x88')]=function(_0x5968b9){var _0x111b0a=this;if(_0x5968b9[_0xb53c('0x1db')]>0x0){var _0x2a38af=_0x5968b9[_0xb53c('0x1db')]-_0x5968b9[_0xb53c('0x93')]-_0x5968b9[_0xb53c('0x4c')];if(_0x2a38af>0x0){this['tryOriginatePredictive'](_0x5968b9);}else{loggerPredictiveCalls[_0xb53c('0x75')](_0xb53c('0x1dd'));}}else{this['tryOriginatePredictive'](_0x5968b9);}};Dialer[_0xb53c('0x19')][_0xb53c('0x1de')]=function(_0xf4691){var _0x334790=this;var _0x186e78=[];_0xf4691['originated']+=0x1;for(var _0x987502 in this['agents']){if(this[_0xb53c('0x1d')][_0xb53c('0x13f')](_0x987502)){if(this['agents'][_0x987502]['state']==='not_inuse'&&this[_0xb53c('0x1d')][_0x987502][_0xb53c('0xd3')]===_0xb53c('0x1df')){_0x186e78[_0xb53c('0x106')](this[_0xb53c('0x1d')][_0x987502]['id']);}}}this['getContactDialer'](_0xf4691['id'],_0x186e78,0x1,_0xf4691[_0xb53c('0x1d2')])['then'](function(_0x213080){if(!checkContactEmpty(_0x213080)){checkContactLowerLimitOriginate(_0xf4691,0x1,0x0);_0x334790[_0xb53c('0xaf')](_0xf4691)[_0xb53c('0xb0')](sendMessageReschedule(_0xf4691))[_0xb53c('0xb1')](loggerCatch(_0xb53c('0xb2')));}else{_0xf4691['message']=_0xb53c('0x1d6');if(_[_0xb53c('0xa8')](_0x213080[0x0])||_[_0xb53c('0xa8')](_0x213080[0x0][_0xb53c('0x148')])||_[_0xb53c('0xa8')](_0x213080[0x0][_0xb53c('0x148')][_0xb53c('0x149')])){_0x334790[_0xb53c('0xc6')](_0xb53c('0x1d7'),_0xf4691,_0x213080[0x0]);}else{_0x334790[_0xb53c('0xb3')](_[_0xb53c('0xc8')](_0x213080[0x0],[_0xb53c('0x10e'),_0xb53c('0x1d8')]))[_0xb53c('0xb0')](_0x334790[_0xb53c('0x1bb')](_0xf4691,_0x213080[0x0]))[_0xb53c('0xb1')](_0x334790['loggerHandler'](_0xb53c('0x1e0'),_0xf4691));}}})[_0xb53c('0xb1')](loggerGetContactDialer('[getContactDialerPredictive]',_0xf4691,0x1));emitVoiceQueueSummary(_0xf4691);};Dialer[_0xb53c('0x19')]['abandonmentRate']=function(_0x89170,_0x1a451c,_0x4dee10,_0xa7ad99,_0xbc7864,_0x448e6e){loggerPredictive['info'](_0xb53c('0x1e1'));loggerPredictive[_0xb53c('0x75')](_0xb53c('0x1e2'),_0x89170);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x1e3'),_0x1a451c);loggerPredictive[_0xb53c('0x75')]('Ts:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x4dee10);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x1e4'),_0xa7ad99);loggerPredictive['info'](_0xb53c('0x1e5'),_0xbc7864);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x7a'));return new BPromise(function(_0xa85fd8,_0x2bf090){if(_0x89170<=0x0||isNaN(_0x89170)){return _0x2bf090(msgResponse(_0xb53c('0x1e6'),_0xb53c('0x43'),_0xb53c('0x1e7')+_0x89170));}if(_0x4dee10<=0x0||isNaN(_0x4dee10)){return _0x2bf090(msgResponse('[abandonmentRate]',_0xb53c('0x43'),_0xb53c('0x1e8')+_0x4dee10));}if(_0xa7ad99<=0x0||isNaN(_0xa7ad99)){return _0x2bf090(msgResponse(_0xb53c('0x1e6'),_0xb53c('0x43'),_0xb53c('0x1e9')+_0xa7ad99));}if(_0x1a451c<=0x0||isNaN(_0x1a451c)){return _0x2bf090(msgResponse(_0xb53c('0x1e6'),'Error','interval\x20=\x20'+_0x1a451c));}if(_0xbc7864<=0x0||isNaN(_0xbc7864)){return _0x2bf090(msgResponse(_0xb53c('0x1e6'),'Error',_0xb53c('0x1ea')+_0xbc7864));}_0x448e6e=_0x448e6e||0x0;var _0x1b7d0c=0x1/_0x4dee10;var _0x2935fb=0x0;var _0x764c95=0x0;var _0x58a7da=0x0;var _0x295594=0x0;for(var _0x3685dd=0x0;_0x58a7da<_0xbc7864;_0x3685dd+=0x1){_0x764c95=_0x3685dd/_0x1a451c;_0x2935fb=(_0xa7ad99*_0x764c95+_0x448e6e)/_0x1b7d0c;_0x58a7da=erlangb(_0x2935fb,_0x89170);_0x295594=_0x2935fb/_0x89170*(0x1-erlangb(_0x2935fb,_0x89170));}return _0xa85fd8({'erlangCalls':_0x3685dd,'erlangCallToSecond':_0x1a451c/_0x3685dd,'erlangAbandonmentRate':_0x58a7da,'erlangBusyFactor':_0x295594});});};Dialer[_0xb53c('0x19')][_0xb53c('0x1b7')]=function(_0x34b4b4,_0x3b818d,_0x653202,_0x523b0e,_0x247563,_0x1e5aa0){loggerPredictive['info']('----\x20Agent\x20Busy\x20Factor\x20----');loggerPredictive['info']('M:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x34b4b4);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x1e3'),_0x3b818d);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x1eb'),_0x653202);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x1e4'),_0x523b0e);loggerPredictive[_0xb53c('0x75')]('Umin:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x247563);loggerPredictive[_0xb53c('0x75')](_0xb53c('0x7a'));return new BPromise(function(_0x2b58b6,_0x52e5cc){if(_0x34b4b4<=0x0||isNaN(_0x34b4b4)){return _0x52e5cc(msgResponse(_0xb53c('0x1ec'),_0xb53c('0x43'),_0xb53c('0x1e7')+_0x34b4b4));}if(_0x653202<=0x0||isNaN(_0x653202)){return _0x52e5cc(msgResponse(_0xb53c('0x1ec'),_0xb53c('0x43'),'Ts\x20=\x20'+_0x653202));}if(_0x523b0e<=0x0||isNaN(_0x523b0e)){return _0x52e5cc(msgResponse(_0xb53c('0x1ec'),_0xb53c('0x43'),_0xb53c('0x1e9')+_0x523b0e));}if(_0x3b818d<=0x0||isNaN(_0x3b818d)){return _0x52e5cc(msgResponse(_0xb53c('0x1ec'),_0xb53c('0x43'),_0xb53c('0x1ed')+_0x3b818d));}if(_0x247563<=0x0||isNaN(_0x247563)){return _0x52e5cc(msgResponse(_0xb53c('0x1ec'),_0xb53c('0x43'),_0xb53c('0x1ee')+_0x247563));}_0x1e5aa0=_0x1e5aa0||0x0;var _0x37679a=0x1/_0x653202;var _0x2eb341=0x0;var _0x1925b5=0x0;var _0x4be81f=0x0;var _0x5a5ea1=0x0;for(var _0x593617=0x0;_0x5a5ea1<_0x247563;_0x593617+=0x1){_0x1925b5=_0x593617/_0x3b818d;_0x2eb341=(_0x523b0e*_0x1925b5+_0x1e5aa0)/_0x37679a;_0x4be81f=erlangb(_0x2eb341,_0x34b4b4);_0x5a5ea1=_0x2eb341/_0x34b4b4*(0x1-erlangb(_0x2eb341,_0x34b4b4));}return _0x2b58b6({'erlangCalls':_0x593617,'erlangCallToSecond':_0x3b818d/_0x593617,'erlangAbandonmentRate':_0x4be81f,'erlangBusyFactor':_0x5a5ea1});});};module[_0xb53c('0x1ef')]=Dialer;
\ No newline at end of file
index 70c7d3c..cceaa8e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd269=['endtime','ringtime','responsetime','holdtime','talktime','membername','reason','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','CampaignId','originatecalleridnum','originatecalleridname','util','lodash','milliseconds','diff','seconds','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','uniqueid','calleridname','calleridnum','number','starttime','droptime'];(function(_0x1443eb,_0x203408){var _0x2b8810=function(_0x48bc4e){while(--_0x48bc4e){_0x1443eb['push'](_0x1443eb['shift']());}};_0x2b8810(++_0x203408);}(_0xd269,0x1f2));var _0x9d26=function(_0x234f60,_0x4f09b5){_0x234f60=_0x234f60-0x0;var _0x14007a=_0xd269[_0x234f60];return _0x14007a;};'use strict';var util=require(_0x9d26('0x0'));var _=require(_0x9d26('0x1'));var moment=require('moment');function getSeconds(_0x4e58cc,_0x18b82a){var _0x43d17b=moment(_0x4e58cc)[_0x9d26('0x2')](0x0);var _0xe66f3c=moment(_0x18b82a)['milliseconds'](0x0);return _0x43d17b[_0x9d26('0x3')](_0xe66f3c,_0x9d26('0x4'));}function QueueCallerAbandon(_0x218890,_0x222fe4){this['scheduledat']=_0x218890[_0x9d26('0x5')];this['type']=_0x218890[_0x9d26('0x6')];this[_0x9d26('0x7')]=_0x218890[_0x9d26('0x6')]===_0x9d26('0x8')?_0x9d26('0x9'):_0x218890[_0x9d26('0x6')];this[_0x9d26('0xa')]=_0x218890[_0x9d26('0xa')];this[_0x9d26('0xb')]=_0x218890[_0x9d26('0xb')];this[_0x9d26('0xc')]=_0x218890['countnoanswerretry'];this[_0x9d26('0xd')]=_0x218890[_0x9d26('0xa')]+_0x218890[_0x9d26('0xb')]+_0x218890[_0x9d26('0xc')];this[_0x9d26('0xe')]=_0x222fe4[_0x9d26('0xe')];this[_0x9d26('0xf')]=_0x218890['name'];this[_0x9d26('0x10')]=_0x218890[_0x9d26('0x11')];this[_0x9d26('0x12')]=_0x218890['starttime'];this['responsetime']=_0x218890['responsetime'];this[_0x9d26('0x13')]=_0x218890[_0x9d26('0x13')];this[_0x9d26('0x14')]=this[_0x9d26('0x13')];this[_0x9d26('0x15')]=getSeconds(_0x218890[_0x9d26('0x16')],_0x218890['starttime']);this[_0x9d26('0x17')]=getSeconds(this['droptime'],_0x218890['responsetime']);this[_0x9d26('0x18')]=0x0;this['queue']=_0x222fe4[_0x9d26('0x9')];this[_0x9d26('0x19')]=_0x222fe4['connectedlinename'];this[_0x9d26('0x1a')]=_0x222fe4['reason'];this[_0x9d26('0x1b')]=_0x218890['callback'];this[_0x9d26('0x1c')]=_0x218890[_0x9d26('0x1c')];this[_0x9d26('0x1d')]=_0x218890[_0x9d26('0x1d')];this[_0x9d26('0x1e')]=_0x218890[_0x9d26('0x1e')];this[_0x9d26('0x1f')]=_0x218890[_0x9d26('0x1f')];this[_0x9d26('0x20')]=_0x218890[_0x9d26('0x20')];this['UserId']=_0x218890[_0x9d26('0x21')];this['VoiceQueueId']=_0x218890['VoiceQueueId'];this['CampaignId']=_0x218890[_0x9d26('0x22')];this[_0x9d26('0x23')]=_0x218890[_0x9d26('0x23')]||'';this[_0x9d26('0x24')]=_0x218890[_0x9d26('0x24')]||'';}module['exports']=QueueCallerAbandon;
\ No newline at end of file
+var _0x41f9=['originatecalleridname','util','moment','milliseconds','diff','seconds','scheduledat','campaigntype','type','outbound','countbusyretry','countcongestionretry','countnoanswerretry','uniqueid','calleridname','name','number','starttime','responsetime','droptime','endtime','holdtime','talktime','queue','reason','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum'];(function(_0x52ded2,_0x12f434){var _0x2675fc=function(_0x5d5761){while(--_0x5d5761){_0x52ded2['push'](_0x52ded2['shift']());}};_0x2675fc(++_0x12f434);}(_0x41f9,0x111));var _0x941f=function(_0x68c979,_0x431cff){_0x68c979=_0x68c979-0x0;var _0x4f0001=_0x41f9[_0x68c979];return _0x4f0001;};'use strict';var util=require(_0x941f('0x0'));var _=require('lodash');var moment=require(_0x941f('0x1'));function getSeconds(_0x116ee7,_0x483a52){var _0x4c0387=moment(_0x116ee7)[_0x941f('0x2')](0x0);var _0xc5067f=moment(_0x483a52)[_0x941f('0x2')](0x0);return _0x4c0387[_0x941f('0x3')](_0xc5067f,_0x941f('0x4'));}function QueueCallerAbandon(_0x4ae056,_0x322f08){this['scheduledat']=_0x4ae056[_0x941f('0x5')];this['type']=_0x4ae056['type'];this[_0x941f('0x6')]=_0x4ae056[_0x941f('0x7')]===_0x941f('0x8')?'queue':_0x4ae056[_0x941f('0x7')];this['countbusyretry']=_0x4ae056[_0x941f('0x9')];this['countcongestionretry']=_0x4ae056[_0x941f('0xa')];this[_0x941f('0xb')]=_0x4ae056[_0x941f('0xb')];this['countglobal']=_0x4ae056[_0x941f('0x9')]+_0x4ae056['countcongestionretry']+_0x4ae056[_0x941f('0xb')];this[_0x941f('0xc')]=_0x322f08[_0x941f('0xc')];this[_0x941f('0xd')]=_0x4ae056[_0x941f('0xe')];this['calleridnum']=_0x4ae056[_0x941f('0xf')];this[_0x941f('0x10')]=_0x4ae056['starttime'];this[_0x941f('0x11')]=_0x4ae056[_0x941f('0x11')];this[_0x941f('0x12')]=_0x4ae056['droptime'];this[_0x941f('0x13')]=this[_0x941f('0x12')];this['ringtime']=getSeconds(_0x4ae056['responsetime'],_0x4ae056['starttime']);this[_0x941f('0x14')]=getSeconds(this[_0x941f('0x12')],_0x4ae056['responsetime']);this[_0x941f('0x15')]=0x0;this[_0x941f('0x16')]=_0x322f08['queue'];this['membername']=_0x322f08['connectedlinename'];this[_0x941f('0x17')]=_0x322f08[_0x941f('0x17')];this['callback']=_0x4ae056['callback'];this[_0x941f('0x18')]=_0x4ae056[_0x941f('0x18')];this[_0x941f('0x19')]=_0x4ae056[_0x941f('0x19')];this[_0x941f('0x1a')]=_0x4ae056[_0x941f('0x1a')];this[_0x941f('0x1b')]=_0x4ae056[_0x941f('0x1b')];this[_0x941f('0x1c')]=_0x4ae056[_0x941f('0x1c')];this[_0x941f('0x1d')]=_0x4ae056[_0x941f('0x1d')];this['VoiceQueueId']=_0x4ae056[_0x941f('0x1e')];this[_0x941f('0x1f')]=_0x4ae056[_0x941f('0x1f')];this['originatecalleridnum']=_0x4ae056[_0x941f('0x20')]||'';this[_0x941f('0x21')]=_0x4ae056[_0x941f('0x21')]||'';}module['exports']=QueueCallerAbandon;
\ No newline at end of file
index 1456560..339f273 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4c93=['util','uniqueid','channel','format','%s/%s/%s','tech','Trunk','name','fax','localstationid','headerinfo','path','AttachmentId','exports'];(function(_0x2f64e0,_0x165629){var _0xb9e8a0=function(_0x25d287){while(--_0x25d287){_0x2f64e0['push'](_0x2f64e0['shift']());}};_0xb9e8a0(++_0x165629);}(_0x4c93,0xfc));var _0x34c9=function(_0x4d4644,_0x15def0){_0x4d4644=_0x4d4644-0x0;var _0x2bbb69=_0x4c93[_0x4d4644];return _0x2bbb69;};'use strict';var util=require(_0x34c9('0x0'));var _=require('lodash');var moment=require('moment');function Action(_0x497024,_0x238c69,_0x4f7f23){this[_0x34c9('0x1')]=_0x497024||undefined;this[_0x34c9('0x2')]=util[_0x34c9('0x3')](_0x34c9('0x4'),_0x238c69[_0x34c9('0x5')],_0x238c69[_0x34c9('0x6')][_0x34c9('0x7')],_0x4f7f23[_0x34c9('0x8')]);this['localstationid']=_0x238c69[_0x34c9('0x9')];this[_0x34c9('0xa')]=_0x238c69[_0x34c9('0xa')];this[_0x34c9('0xb')]=_0x4f7f23[_0x34c9('0xb')];this['AttachmentId']=_0x4f7f23[_0x34c9('0xc')];}module[_0x34c9('0xd')]=Action;
\ No newline at end of file
+var _0xd2f9=['AttachmentId','util','lodash','uniqueid','channel','format','%s/%s/%s','tech','name','fax','localstationid','headerinfo','path'];(function(_0x38d36a,_0x507331){var _0x2fd4e6=function(_0x30a102){while(--_0x30a102){_0x38d36a['push'](_0x38d36a['shift']());}};_0x2fd4e6(++_0x507331);}(_0xd2f9,0x1ef));var _0x9d2f=function(_0x17c483,_0xc69535){_0x17c483=_0x17c483-0x0;var _0x112bdb=_0xd2f9[_0x17c483];return _0x112bdb;};'use strict';var util=require(_0x9d2f('0x0'));var _=require(_0x9d2f('0x1'));var moment=require('moment');function Action(_0x1807b7,_0x33d09c,_0x4eef18){this[_0x9d2f('0x2')]=_0x1807b7||undefined;this[_0x9d2f('0x3')]=util[_0x9d2f('0x4')](_0x9d2f('0x5'),_0x33d09c[_0x9d2f('0x6')],_0x33d09c['Trunk'][_0x9d2f('0x7')],_0x4eef18[_0x9d2f('0x8')]);this[_0x9d2f('0x9')]=_0x33d09c[_0x9d2f('0x9')];this[_0x9d2f('0xa')]=_0x33d09c[_0x9d2f('0xa')];this[_0x9d2f('0xb')]=_0x4eef18[_0x9d2f('0xb')];this[_0x9d2f('0xc')]=_0x4eef18[_0x9d2f('0xc')];}module['exports']=Action;
\ No newline at end of file
index cad82f7..f9a4afd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6e27=['addVariables','ext','isTrunkReachable','isNil','active','SIP/%s','reachable','[Fax][checkTrunk][Trunk\x20not\x20work]','\x20Trunk\x20is\x20not\x20active','Trunk\x20not\x20working','Empty\x20Fax','exports','lodash','bluebird','uuid','moment','path','tiff2pdf','./util/gs','../../../config/logger','fax','./rpcDb','./channel','./util/util','./action','../rpc/faxAccount','../rpc/attachment','../rpc/faxMessage','channels','faxAccounts','trunks','newchannel','syncNewchannel','varset','syncVarSet','newstate','bind','newexten','syncNewExten','faxstatus','syncReceiveFax','hangup','syncHangup','syncOriginateResponse','prototype','context','from-voip-provider','hasOwnProperty','uniqueid','channel','name','\x20syncNewchannel\x20','actions','variable','value','syncNewState','channelstate','channelstatedesc','syncFaxStatus','operation','status','localstationid','filename','info','\x20syncFaxStatus\x20','remotestationid','pagestransferred','resolution','transferrate','calleridnum','/var/opt/motion2/server/files/attachments/','\x20result\x20conversion\x20file\x20','message','create','parse','.pdf','application/pdf','then','catch','error','stringify','\x20receiveFax\x20','merge','pick','response','reason','AttachmentId','update','SENDING\x20FAILED\x20','logger','[Fax][Message][Error][Updated]','[Fax][Message][Error][NoUpdate2]','[Fax][Message][NoUpdate1]','finally','[Fax][Message][NoUpdate2]','\x20hangup\x20sendFile\x20','faxpages','SUCCESS','updateStatus','faxstatusstring','SENDING\x20FAILED:\x20','SENDING\x20FAILED','send','execOriginate','[Fax][execOriginate][success]','Fax\x20received','[Fax][execOriginate][failure]','checkAfterSend','FaxAccountId','Trunk','isValid','Trunk\x20Reachable','gs\x20-q\x20-dNOPAUSE\x20-dBATCH\x20-sDEVICE=tiffg4\x20-sPAPERSIZE=letter\x20-sOutputFile=/var/opt/motion2/server/files/attachments/%s.tif\x20\x20%s\x20-c\x20quit','execute','format','%s/%s.tif','XMF-PATH','Action','variablesAction'];(function(_0x4fc9a6,_0x2d71a5){var _0x2d19c6=function(_0x32f107){while(--_0x32f107){_0x4fc9a6['push'](_0x4fc9a6['shift']());}};_0x2d19c6(++_0x2d71a5);}(_0x6e27,0x171));var _0x76e2=function(_0x2655a6,_0x1f1920){_0x2655a6=_0x2655a6-0x0;var _0x384a51=_0x6e27[_0x2655a6];return _0x384a51;};'use strict';var util=require('util');var _=require(_0x76e2('0x0'));var BPromise=require(_0x76e2('0x1'));var uuid=require(_0x76e2('0x2'));var moment=require(_0x76e2('0x3'));var path=require(_0x76e2('0x4'));var tiff2pdf=require(_0x76e2('0x5'));var gs=require(_0x76e2('0x6'));var logger=require(_0x76e2('0x7'))(_0x76e2('0x8'));var ami=require('../ami');var rpcDb=require(_0x76e2('0x9'));var Channel=require(_0x76e2('0xa'));var ut=require(_0x76e2('0xb'));var Action=require(_0x76e2('0xc'));var faxAccount=require(_0x76e2('0xd'));var attachment=require(_0x76e2('0xe'));var faxMessage=require(_0x76e2('0xf'));function Fax(_0x2c3af7){this[_0x76e2('0x10')]={};this[_0x76e2('0x11')]=_0x2c3af7[_0x76e2('0x11')];this['trunks']=_0x2c3af7[_0x76e2('0x12')];this['actions']={};ami['on'](_0x76e2('0x13'),this[_0x76e2('0x14')]['bind'](this));ami['on'](_0x76e2('0x15'),this[_0x76e2('0x16')]['bind'](this));ami['on'](_0x76e2('0x17'),this['syncNewState'][_0x76e2('0x18')](this));ami['on'](_0x76e2('0x19'),this[_0x76e2('0x1a')][_0x76e2('0x18')](this));ami['on'](_0x76e2('0x1b'),this['syncFaxStatus'][_0x76e2('0x18')](this));ami['on']('receivefax',this[_0x76e2('0x1c')]['bind'](this));ami['on'](_0x76e2('0x1d'),this[_0x76e2('0x1e')][_0x76e2('0x18')](this));ami['on']('originateresponse',this[_0x76e2('0x1f')]['bind'](this));}Fax[_0x76e2('0x20')][_0x76e2('0x14')]=function(_0x5ba739){if(_0x5ba739[_0x76e2('0x21')]===_0x76e2('0x22')){for(var _0x505547 in this[_0x76e2('0x11')]){if(this[_0x76e2('0x11')][_0x76e2('0x23')](_0x505547)){if(_0x5ba739['exten']===this[_0x76e2('0x11')][_0x505547]['localstationid']){this[_0x76e2('0x10')][_0x5ba739[_0x76e2('0x24')]]={};this[_0x76e2('0x10')][_0x5ba739[_0x76e2('0x24')]][_0x76e2('0x25')]=_0x5ba739[_0x76e2('0x25')];this[_0x76e2('0x10')][_0x5ba739['uniqueid']]['id']=this[_0x76e2('0x11')][_0x505547]['id'];this[_0x76e2('0x10')][_0x5ba739[_0x76e2('0x24')]][_0x76e2('0x26')]=this[_0x76e2('0x11')][_0x505547][_0x76e2('0x26')];logger['info'](_0x5ba739[_0x76e2('0x24')],_0x76e2('0x27'));}}}}if(this[_0x76e2('0x28')][_0x5ba739[_0x76e2('0x24')]]){this[_0x76e2('0x10')][_0x5ba739['uniqueid']]={};this[_0x76e2('0x10')][_0x5ba739[_0x76e2('0x24')]]['channel']=_0x5ba739[_0x76e2('0x25')];logger['info'](_0x5ba739[_0x76e2('0x24')],_0x76e2('0x27'));}};Fax[_0x76e2('0x20')][_0x76e2('0x16')]=function(_0x1ff88a){if(this[_0x76e2('0x10')][_0x1ff88a[_0x76e2('0x24')]]){for(var _0x1718f3 in _0x1ff88a[_0x76e2('0x29')]){if(_0x1ff88a[_0x76e2('0x29')][_0x76e2('0x23')](_0x1718f3)){this[_0x76e2('0x10')][_0x1ff88a[_0x76e2('0x24')]][_0x1718f3]=_0x1ff88a[_0x76e2('0x2a')];}}}};Fax['prototype'][_0x76e2('0x2b')]=function(_0x58cdd4){if(this['channels'][_0x58cdd4[_0x76e2('0x24')]]){this[_0x76e2('0x10')][_0x58cdd4[_0x76e2('0x24')]][_0x76e2('0x2c')]=_0x58cdd4[_0x76e2('0x2c')];this[_0x76e2('0x10')][_0x58cdd4[_0x76e2('0x24')]]['channelstatedesc']=_0x58cdd4[_0x76e2('0x2d')];}};Fax[_0x76e2('0x20')][_0x76e2('0x1a')]=function(_0x3d8051){if(this[_0x76e2('0x10')][_0x3d8051[_0x76e2('0x24')]]){for(var _0x42d1e0 in _0x3d8051[_0x76e2('0x29')]){if(_0x3d8051[_0x76e2('0x29')]['hasOwnProperty'](_0x42d1e0)){this[_0x76e2('0x10')][_0x3d8051[_0x76e2('0x24')]][_0x42d1e0]=_0x3d8051[_0x76e2('0x2a')];}}}};Fax[_0x76e2('0x20')][_0x76e2('0x2e')]=function(_0x41d2de){if(this['channels'][_0x41d2de[_0x76e2('0x24')]]){this['channels'][_0x41d2de[_0x76e2('0x24')]][_0x76e2('0x2f')]=_0x41d2de[_0x76e2('0x2f')];this[_0x76e2('0x10')][_0x41d2de['uniqueid']][_0x76e2('0x30')]=_0x41d2de[_0x76e2('0x30')];this[_0x76e2('0x10')][_0x41d2de['uniqueid']]['localstationid']=_0x41d2de[_0x76e2('0x31')];this[_0x76e2('0x10')][_0x41d2de[_0x76e2('0x24')]][_0x76e2('0x32')]=_0x41d2de[_0x76e2('0x32')];logger[_0x76e2('0x33')](_0x41d2de[_0x76e2('0x24')],_0x76e2('0x34'));}};Fax[_0x76e2('0x20')][_0x76e2('0x1c')]=function(_0x329ebb){var _0x1717e9=this;if(this[_0x76e2('0x10')][_0x329ebb[_0x76e2('0x24')]]){var _0x5be9d8=this[_0x76e2('0x10')][_0x329ebb[_0x76e2('0x24')]]['id'];this[_0x76e2('0x10')][_0x329ebb[_0x76e2('0x24')]][_0x76e2('0x35')]=_0x329ebb['remotestationid'];this[_0x76e2('0x10')][_0x329ebb[_0x76e2('0x24')]][_0x76e2('0x36')]=_0x329ebb['pagestransferred'];this[_0x76e2('0x10')][_0x329ebb[_0x76e2('0x24')]][_0x76e2('0x31')]=_0x329ebb['localstationid'];this['channels'][_0x329ebb[_0x76e2('0x24')]][_0x76e2('0x37')]=_0x329ebb['resolution'];this[_0x76e2('0x10')][_0x329ebb[_0x76e2('0x24')]][_0x76e2('0x38')]=_0x329ebb[_0x76e2('0x38')];this[_0x76e2('0x10')][_0x329ebb['uniqueid']][_0x76e2('0x32')]=_0x329ebb[_0x76e2('0x32')];this[_0x76e2('0x10')][_0x329ebb[_0x76e2('0x24')]][_0x76e2('0x39')]=_0x329ebb['calleridnum'];if(this[_0x76e2('0x10')][_0x329ebb[_0x76e2('0x24')]][_0x76e2('0x36')]>0x0){tiff2pdf(_0x329ebb[_0x76e2('0x32')],_0x76e2('0x3a'),function(_0x3d8986){logger[_0x76e2('0x33')](_0x329ebb['uniqueid'],_0x76e2('0x3b'),_0x3d8986[_0x76e2('0x3c')]);attachment[_0x76e2('0x3d')]({'name':path[_0x76e2('0x3e')](_0x329ebb['filename'])[_0x76e2('0x26')],'basename':path[_0x76e2('0x3e')](_0x329ebb['filename'])[_0x76e2('0x26')]+_0x76e2('0x3f'),'type':_0x76e2('0x40')})[_0x76e2('0x41')](function(_0x1be497){faxAccount['notify'](_0x5be9d8,{'from':_0x329ebb[_0x76e2('0x39')],'mapKey':'fax','body':path[_0x76e2('0x3e')](_0x329ebb[_0x76e2('0x32')])['name']+_0x76e2('0x3f'),'AttachmentId':_0x1be497['id']})[_0x76e2('0x42')](function(_0x43d939){logger[_0x76e2('0x43')](_0x329ebb[_0x76e2('0x24')],'\x20notify\x20',JSON[_0x76e2('0x44')](_0x43d939));});})[_0x76e2('0x42')](function(_0x58efaf){logger[_0x76e2('0x43')](_0x329ebb[_0x76e2('0x24')],_0x76e2('0x45'),JSON['stringify'](_0x58efaf));});});}logger[_0x76e2('0x33')](_0x329ebb[_0x76e2('0x24')],'\x20receiveFax\x20');}};Fax[_0x76e2('0x20')][_0x76e2('0x1f')]=function(_0x39bacf){if(this[_0x76e2('0x28')][_0x39bacf[_0x76e2('0x24')]]){_[_0x76e2('0x46')](this[_0x76e2('0x10')][_0x39bacf[_0x76e2('0x24')]],_[_0x76e2('0x47')](_0x39bacf,[_0x76e2('0x48'),_0x76e2('0x49')]));}};function updateStatus(_0x5381b7){if(_0x5381b7[_0x76e2('0x4a')]){faxMessage[_0x76e2('0x4b')](_0x5381b7[_0x76e2('0x4a')],{'failMessage':_0x76e2('0x4c')})[_0x76e2('0x41')](function(_0x5eff01){ut[_0x76e2('0x4d')](_0x76e2('0x4e'),_0x5eff01);})[_0x76e2('0x42')](function(_0x249417){ut[_0x76e2('0x4d')]('[Fax][Message][Error][NoUpdate1]',_0x249417);});}else{ut[_0x76e2('0x4d')](_0x76e2('0x4f'));}}Fax[_0x76e2('0x20')]['updateStatus']=function(_0x3d44ca,_0xa57ecf,_0x46280a){var _0x9e0a2b=this;var _0x5cc6b2={};if(_0xa57ecf){_0x5cc6b2={'read':_0xa57ecf};}else{_0x5cc6b2={'failMessage':_0x46280a};}if(this[_0x76e2('0x28')][_0x3d44ca]['AttachmentId']){faxMessage[_0x76e2('0x4b')](this['actions'][_0x3d44ca][_0x76e2('0x4a')],_0x5cc6b2)[_0x76e2('0x41')](function(_0x101386){ut[_0x76e2('0x4d')]('[Fax][Message][Updated]',_0x101386);})[_0x76e2('0x42')](function(_0x3568ae){ut['logger'](_0x76e2('0x50'),_0x3568ae);})[_0x76e2('0x51')](function(){delete _0x9e0a2b[_0x76e2('0x10')][_0x3d44ca];delete _0x9e0a2b[_0x76e2('0x28')][_0x3d44ca];});}else{ut[_0x76e2('0x4d')](_0x76e2('0x52'));delete this['channels'][_0x3d44ca];delete this[_0x76e2('0x28')][_0x3d44ca];}};Fax[_0x76e2('0x20')][_0x76e2('0x1e')]=function(_0xfa6358){var _0x5f2723=this;if(this[_0x76e2('0x10')][_0xfa6358[_0x76e2('0x24')]]){if(this[_0x76e2('0x28')][_0xfa6358[_0x76e2('0x24')]]){this[_0x76e2('0x10')][_0xfa6358[_0x76e2('0x24')]]['id']=this[_0x76e2('0x28')][_0xfa6358['uniqueid']]['id'];this[_0x76e2('0x10')][_0xfa6358['uniqueid']]['name']=this[_0x76e2('0x28')][_0xfa6358[_0x76e2('0x24')]][_0x76e2('0x26')];}logger[_0x76e2('0x33')](_0xfa6358['uniqueid'],this['actions'][_0xfa6358[_0x76e2('0x24')]]?_0x76e2('0x53'):'\x20hangup\x20faxRiceive\x20',JSON['stringify'](this[_0x76e2('0x10')][_0xfa6358[_0x76e2('0x24')]]));if(this[_0x76e2('0x28')][_0xfa6358[_0x76e2('0x24')]]){if(this[_0x76e2('0x10')][_0xfa6358[_0x76e2('0x24')]][_0x76e2('0x54')]>0x0&&this[_0x76e2('0x10')][_0xfa6358[_0x76e2('0x24')]]['faxstatus']===_0x76e2('0x55')){this[_0x76e2('0x56')](_0xfa6358[_0x76e2('0x24')],!![]);}else{this[_0x76e2('0x56')](_0xfa6358[_0x76e2('0x24')],![],this['channels'][_0xfa6358[_0x76e2('0x24')]][_0x76e2('0x57')]?_0x76e2('0x58')+this[_0x76e2('0x10')][_0xfa6358[_0x76e2('0x24')]][_0x76e2('0x57')]:_0x76e2('0x59'));}}}};Fax[_0x76e2('0x20')][_0x76e2('0x5a')]=function(_0x45cf5e){var _0x32c3c4=this;return new BPromise(function(_0x1fbe48,_0x1e08cd){_0x32c3c4[_0x76e2('0x5b')](_0x45cf5e,_0x32c3c4['faxAccounts'][_0x45cf5e['FaxAccountId']])[_0x76e2('0x41')](function(_0x2409ac){ut['logger'](_0x76e2('0x5c'),_0x2409ac);_0x1fbe48(ut[_0x76e2('0x3c')](_0x76e2('0x5d')));})[_0x76e2('0x42')](function(_0x558720){ut[_0x76e2('0x4d')](_0x76e2('0x5e'),_0x558720);updateStatus(_0x45cf5e);_0x1e08cd(ut[_0x76e2('0x3c')]('Fax\x20failed'));});});};Fax[_0x76e2('0x20')][_0x76e2('0x5f')]=function(_0x2e2c9d){var _0x449b40=this;return new BPromise(function(_0x21ebeb,_0x20985c){var _0x5b545=_0x449b40['checkTrunk'](_0x449b40[_0x76e2('0x11')][_0x2e2c9d[_0x76e2('0x60')]][_0x76e2('0x61')],_0x2e2c9d);if(_0x5b545[_0x76e2('0x62')]){_0x21ebeb(ut['message'](_0x76e2('0x63')));}else{_0x20985c(ut[_0x76e2('0x3c')](_0x5b545['message']));}});};function originate(_0xdbcd08,_0x431db1,_0x235918){return new BPromise(function(_0x1b4764,_0xb641e9){if(_0x235918){var _0x42ca64=util['format'](_0x76e2('0x64'),path[_0x76e2('0x3e')](_0xdbcd08[_0x76e2('0x4')])[_0x76e2('0x26')],_0xdbcd08[_0x76e2('0x4')]);gs[_0x76e2('0x65')](_0x42ca64)[_0x76e2('0x41')](function(){_0xdbcd08[_0x76e2('0x4')]=util[_0x76e2('0x66')](_0x76e2('0x67'),path['parse'](_0xdbcd08[_0x76e2('0x4')])['dir'],path[_0x76e2('0x3e')](_0xdbcd08[_0x76e2('0x4')])[_0x76e2('0x26')]);_0x431db1[_0x76e2('0x68')]=_0xdbcd08[_0x76e2('0x4')];ut[_0x76e2('0x4d')]('Convert\x20pdf\x20to\x20tif','');ami[_0x76e2('0x69')](ut[_0x76e2('0x6a')](_0xdbcd08,_0x431db1))[_0x76e2('0x41')](function(_0x4634ed){_0x1b4764(_0x4634ed);})[_0x76e2('0x42')](function(_0x3e3753){_0xb641e9(_0x3e3753);});})['catch'](function(_0x1d2c52){_0xb641e9(_0x1d2c52);});}else{ami[_0x76e2('0x69')](ut[_0x76e2('0x6a')](_0xdbcd08,_0x431db1))[_0x76e2('0x41')](function(_0x1b012b){_0x1b4764(_0x1b012b);})[_0x76e2('0x42')](function(_0x221040){_0xb641e9(_0x221040);});}});}Fax[_0x76e2('0x20')][_0x76e2('0x5b')]=function(_0x227800,_0x3c2b71){var _0x24c72c=this;return new BPromise(function(_0x5b3d5a,_0x378071){var _0x4ff2cc=uuid['v4']();var _0x2387ff=ut[_0x76e2('0x6b')](_0x227800,_0x3c2b71);_0x24c72c['actions'][_0x4ff2cc]=new Action(_0x4ff2cc,_0x3c2b71,_0x227800);var _0x15ef07=_0x24c72c[_0x76e2('0x28')][_0x4ff2cc];if(path[_0x76e2('0x3e')](_0x227800[_0x76e2('0x4')])[_0x76e2('0x6c')]===_0x76e2('0x3f')){originate(_0x15ef07,_0x2387ff,!![])[_0x76e2('0x41')](function(_0x5b7a3e){_0x5b3d5a(_0x5b7a3e);})[_0x76e2('0x42')](function(_0x2c0db2){_0x378071(_0x2c0db2);});}else{originate(_0x15ef07,_0x2387ff,![])[_0x76e2('0x41')](function(_0x1c9ed5){_0x5b3d5a(_0x1c9ed5);})[_0x76e2('0x42')](function(_0xc92dcf){_0x378071(_0xc92dcf);});}});};Fax[_0x76e2('0x20')][_0x76e2('0x6d')]=function(_0x361df0){return!_['isNil'](_0x361df0)&&!_[_0x76e2('0x6e')](_0x361df0[_0x76e2('0x26')])&&!_['isNil'](_0x361df0[_0x76e2('0x6f')])&&_0x361df0[_0x76e2('0x6f')]&&!_[_0x76e2('0x6e')](this['trunks'][util['format'](_0x76e2('0x70'),_0x361df0[_0x76e2('0x26')])])&&!_[_0x76e2('0x6e')](this[_0x76e2('0x12')][util['format']('SIP/%s',_0x361df0[_0x76e2('0x26')])][_0x76e2('0x30')])&&(this[_0x76e2('0x12')][util[_0x76e2('0x66')](_0x76e2('0x70'),_0x361df0[_0x76e2('0x26')])]['status']===_0x76e2('0x71')||this[_0x76e2('0x12')][util[_0x76e2('0x66')]('SIP/%s',_0x361df0['name'])][_0x76e2('0x30')]==='unmonitored');};Fax[_0x76e2('0x20')]['checkTrunk']=function(_0x1f2a4b,_0x350491){if(!this[_0x76e2('0x6d')](_0x1f2a4b)){ut[_0x76e2('0x4d')](_0x76e2('0x72'),_[_0x76e2('0x6e')](_0x1f2a4b)?'':_0x1f2a4b[_0x76e2('0x26')]+_0x76e2('0x73'));return{'isValid':![],'message':_0x76e2('0x74')};}if(_[_0x76e2('0x6e')](_0x350491['fax'])){ut[_0x76e2('0x4d')]('[Fax][checkTrunk][Empty\x20Fax]',JSON[_0x76e2('0x44')](_0x350491));return{'isValid':![],'message':_0x76e2('0x75')};}if(_[_0x76e2('0x6e')](_0x350491[_0x76e2('0x4')])){ut[_0x76e2('0x4d')]('[Fax][checkTrunk][Empty\x20path]',JSON[_0x76e2('0x44')](_0x350491));return{'isValid':![],'message':'Empty\x20path'};}return{'isValid':!![],'message':'Is\x20Valid'};};module[_0x76e2('0x76')]=Fax;
\ No newline at end of file
+var _0x81d6=['isValid','Trunk\x20Reachable','format','then','dir','XMF-PATH','Convert\x20pdf\x20to\x20tif','Action','variablesAction','execOriginate','ext','isNil','active','SIP/%s','unmonitored','isTrunkReachable','[Fax][checkTrunk][Trunk\x20not\x20work]','\x20Trunk\x20is\x20not\x20active','Trunk\x20not\x20working','[Fax][checkTrunk][Empty\x20Fax]','Empty\x20Fax','[Fax][checkTrunk][Empty\x20path]','Empty\x20path','Is\x20Valid','exports','util','bluebird','path','tiff2pdf','./util/gs','fax','../ami','./rpcDb','./channel','./util/util','./action','../rpc/faxAccount','../rpc/attachment','channels','faxAccounts','trunks','actions','newchannel','syncNewchannel','varset','syncVarSet','bind','syncNewState','newexten','syncNewExten','faxstatus','receivefax','syncReceiveFax','syncHangup','prototype','context','from-voip-provider','hasOwnProperty','exten','uniqueid','channel','name','info','\x20syncNewchannel\x20','variable','value','channelstate','channelstatedesc','syncFaxStatus','operation','status','localstationid','filename','\x20syncFaxStatus\x20','remotestationid','pagestransferred','resolution','calleridnum','/var/opt/motion2/server/files/attachments/','create','parse','application/pdf','notify','catch','error','\x20notify\x20','stringify','\x20receiveFax\x20','syncOriginateResponse','merge','pick','response','AttachmentId','update','logger','[Fax][Message][Error][NoUpdate2]','updateStatus','[Fax][Message][Updated]','finally','[Fax][Message][NoUpdate2]','\x20hangup\x20sendFile\x20','faxpages','SUCCESS','faxstatusstring','SENDING\x20FAILED','send','FaxAccountId','[Fax][execOriginate][success]','message','checkAfterSend','checkTrunk','Trunk'];(function(_0x5581ba,_0x268887){var _0x1e927f=function(_0x1803b2){while(--_0x1803b2){_0x5581ba['push'](_0x5581ba['shift']());}};_0x1e927f(++_0x268887);}(_0x81d6,0x169));var _0x681d=function(_0x2564b1,_0x2bb2e0){_0x2564b1=_0x2564b1-0x0;var _0xf9f656=_0x81d6[_0x2564b1];return _0xf9f656;};'use strict';var util=require(_0x681d('0x0'));var _=require('lodash');var BPromise=require(_0x681d('0x1'));var uuid=require('uuid');var moment=require('moment');var path=require(_0x681d('0x2'));var tiff2pdf=require(_0x681d('0x3'));var gs=require(_0x681d('0x4'));var logger=require('../../../config/logger')(_0x681d('0x5'));var ami=require(_0x681d('0x6'));var rpcDb=require(_0x681d('0x7'));var Channel=require(_0x681d('0x8'));var ut=require(_0x681d('0x9'));var Action=require(_0x681d('0xa'));var faxAccount=require(_0x681d('0xb'));var attachment=require(_0x681d('0xc'));var faxMessage=require('../rpc/faxMessage');function Fax(_0x493ab0){this[_0x681d('0xd')]={};this[_0x681d('0xe')]=_0x493ab0[_0x681d('0xe')];this[_0x681d('0xf')]=_0x493ab0['trunks'];this[_0x681d('0x10')]={};ami['on'](_0x681d('0x11'),this[_0x681d('0x12')]['bind'](this));ami['on'](_0x681d('0x13'),this[_0x681d('0x14')][_0x681d('0x15')](this));ami['on']('newstate',this[_0x681d('0x16')][_0x681d('0x15')](this));ami['on'](_0x681d('0x17'),this[_0x681d('0x18')][_0x681d('0x15')](this));ami['on'](_0x681d('0x19'),this['syncFaxStatus'][_0x681d('0x15')](this));ami['on'](_0x681d('0x1a'),this[_0x681d('0x1b')][_0x681d('0x15')](this));ami['on']('hangup',this[_0x681d('0x1c')]['bind'](this));ami['on']('originateresponse',this['syncOriginateResponse'][_0x681d('0x15')](this));}Fax[_0x681d('0x1d')]['syncNewchannel']=function(_0x50d587){if(_0x50d587[_0x681d('0x1e')]===_0x681d('0x1f')){for(var _0x5cc9e8 in this[_0x681d('0xe')]){if(this[_0x681d('0xe')][_0x681d('0x20')](_0x5cc9e8)){if(_0x50d587[_0x681d('0x21')]===this[_0x681d('0xe')][_0x5cc9e8]['localstationid']){this['channels'][_0x50d587['uniqueid']]={};this[_0x681d('0xd')][_0x50d587[_0x681d('0x22')]][_0x681d('0x23')]=_0x50d587['channel'];this[_0x681d('0xd')][_0x50d587['uniqueid']]['id']=this['faxAccounts'][_0x5cc9e8]['id'];this[_0x681d('0xd')][_0x50d587[_0x681d('0x22')]][_0x681d('0x24')]=this[_0x681d('0xe')][_0x5cc9e8][_0x681d('0x24')];logger[_0x681d('0x25')](_0x50d587[_0x681d('0x22')],_0x681d('0x26'));}}}}if(this[_0x681d('0x10')][_0x50d587['uniqueid']]){this[_0x681d('0xd')][_0x50d587[_0x681d('0x22')]]={};this['channels'][_0x50d587['uniqueid']][_0x681d('0x23')]=_0x50d587[_0x681d('0x23')];logger[_0x681d('0x25')](_0x50d587['uniqueid'],_0x681d('0x26'));}};Fax[_0x681d('0x1d')][_0x681d('0x14')]=function(_0x297bc1){if(this[_0x681d('0xd')][_0x297bc1[_0x681d('0x22')]]){for(var _0x15c7f5 in _0x297bc1[_0x681d('0x27')]){if(_0x297bc1['variable'][_0x681d('0x20')](_0x15c7f5)){this[_0x681d('0xd')][_0x297bc1[_0x681d('0x22')]][_0x15c7f5]=_0x297bc1[_0x681d('0x28')];}}}};Fax[_0x681d('0x1d')]['syncNewState']=function(_0xfbaedc){if(this[_0x681d('0xd')][_0xfbaedc[_0x681d('0x22')]]){this[_0x681d('0xd')][_0xfbaedc[_0x681d('0x22')]][_0x681d('0x29')]=_0xfbaedc[_0x681d('0x29')];this[_0x681d('0xd')][_0xfbaedc[_0x681d('0x22')]]['channelstatedesc']=_0xfbaedc[_0x681d('0x2a')];}};Fax[_0x681d('0x1d')][_0x681d('0x18')]=function(_0x55a77e){if(this[_0x681d('0xd')][_0x55a77e[_0x681d('0x22')]]){for(var _0x13c76e in _0x55a77e[_0x681d('0x27')]){if(_0x55a77e[_0x681d('0x27')][_0x681d('0x20')](_0x13c76e)){this['channels'][_0x55a77e[_0x681d('0x22')]][_0x13c76e]=_0x55a77e[_0x681d('0x28')];}}}};Fax[_0x681d('0x1d')][_0x681d('0x2b')]=function(_0x5c86fc){if(this[_0x681d('0xd')][_0x5c86fc['uniqueid']]){this[_0x681d('0xd')][_0x5c86fc[_0x681d('0x22')]][_0x681d('0x2c')]=_0x5c86fc[_0x681d('0x2c')];this['channels'][_0x5c86fc[_0x681d('0x22')]][_0x681d('0x2d')]=_0x5c86fc[_0x681d('0x2d')];this['channels'][_0x5c86fc['uniqueid']][_0x681d('0x2e')]=_0x5c86fc['localstationid'];this[_0x681d('0xd')][_0x5c86fc[_0x681d('0x22')]][_0x681d('0x2f')]=_0x5c86fc['filename'];logger[_0x681d('0x25')](_0x5c86fc[_0x681d('0x22')],_0x681d('0x30'));}};Fax[_0x681d('0x1d')][_0x681d('0x1b')]=function(_0x215f95){var _0xa3a125=this;if(this[_0x681d('0xd')][_0x215f95['uniqueid']]){var _0xa07acd=this[_0x681d('0xd')][_0x215f95[_0x681d('0x22')]]['id'];this['channels'][_0x215f95[_0x681d('0x22')]]['remotestationid']=_0x215f95[_0x681d('0x31')];this[_0x681d('0xd')][_0x215f95['uniqueid']][_0x681d('0x32')]=_0x215f95[_0x681d('0x32')];this[_0x681d('0xd')][_0x215f95[_0x681d('0x22')]][_0x681d('0x2e')]=_0x215f95[_0x681d('0x2e')];this[_0x681d('0xd')][_0x215f95[_0x681d('0x22')]][_0x681d('0x33')]=_0x215f95[_0x681d('0x33')];this[_0x681d('0xd')][_0x215f95[_0x681d('0x22')]]['transferrate']=_0x215f95['transferrate'];this[_0x681d('0xd')][_0x215f95[_0x681d('0x22')]]['filename']=_0x215f95[_0x681d('0x2f')];this[_0x681d('0xd')][_0x215f95[_0x681d('0x22')]][_0x681d('0x34')]=_0x215f95[_0x681d('0x34')];if(this[_0x681d('0xd')][_0x215f95[_0x681d('0x22')]][_0x681d('0x32')]>0x0){tiff2pdf(_0x215f95[_0x681d('0x2f')],_0x681d('0x35'),function(_0x4102a9){logger[_0x681d('0x25')](_0x215f95['uniqueid'],'\x20result\x20conversion\x20file\x20',_0x4102a9['message']);attachment[_0x681d('0x36')]({'name':path[_0x681d('0x37')](_0x215f95[_0x681d('0x2f')])[_0x681d('0x24')],'basename':path[_0x681d('0x37')](_0x215f95[_0x681d('0x2f')])[_0x681d('0x24')]+'.pdf','type':_0x681d('0x38')})['then'](function(_0x367500){faxAccount[_0x681d('0x39')](_0xa07acd,{'from':_0x215f95['calleridnum'],'mapKey':'fax','body':path[_0x681d('0x37')](_0x215f95[_0x681d('0x2f')])[_0x681d('0x24')]+'.pdf','AttachmentId':_0x367500['id']})[_0x681d('0x3a')](function(_0xe4fafd){logger[_0x681d('0x3b')](_0x215f95[_0x681d('0x22')],_0x681d('0x3c'),JSON[_0x681d('0x3d')](_0xe4fafd));});})[_0x681d('0x3a')](function(_0x5e2064){logger[_0x681d('0x3b')](_0x215f95[_0x681d('0x22')],_0x681d('0x3e'),JSON[_0x681d('0x3d')](_0x5e2064));});});}logger['info'](_0x215f95[_0x681d('0x22')],_0x681d('0x3e'));}};Fax[_0x681d('0x1d')][_0x681d('0x3f')]=function(_0x5d1201){if(this[_0x681d('0x10')][_0x5d1201[_0x681d('0x22')]]){_[_0x681d('0x40')](this[_0x681d('0xd')][_0x5d1201[_0x681d('0x22')]],_[_0x681d('0x41')](_0x5d1201,[_0x681d('0x42'),'reason']));}};function updateStatus(_0x3b7cec){if(_0x3b7cec[_0x681d('0x43')]){faxMessage[_0x681d('0x44')](_0x3b7cec['AttachmentId'],{'failMessage':'SENDING\x20FAILED\x20'})['then'](function(_0x311520){ut[_0x681d('0x45')]('[Fax][Message][Error][Updated]',_0x311520);})['catch'](function(_0x5807bb){ut['logger']('[Fax][Message][Error][NoUpdate1]',_0x5807bb);});}else{ut[_0x681d('0x45')](_0x681d('0x46'));}}Fax[_0x681d('0x1d')][_0x681d('0x47')]=function(_0x536ebc,_0x378dd9,_0x340e36){var _0x21aabf=this;var _0x3fe048={};if(_0x378dd9){_0x3fe048={'read':_0x378dd9};}else{_0x3fe048={'failMessage':_0x340e36};}if(this[_0x681d('0x10')][_0x536ebc]['AttachmentId']){faxMessage[_0x681d('0x44')](this[_0x681d('0x10')][_0x536ebc][_0x681d('0x43')],_0x3fe048)['then'](function(_0xd2a2ea){ut['logger'](_0x681d('0x48'),_0xd2a2ea);})[_0x681d('0x3a')](function(_0x47a09a){ut[_0x681d('0x45')]('[Fax][Message][NoUpdate1]',_0x47a09a);})[_0x681d('0x49')](function(){delete _0x21aabf[_0x681d('0xd')][_0x536ebc];delete _0x21aabf['actions'][_0x536ebc];});}else{ut[_0x681d('0x45')](_0x681d('0x4a'));delete this['channels'][_0x536ebc];delete this[_0x681d('0x10')][_0x536ebc];}};Fax[_0x681d('0x1d')][_0x681d('0x1c')]=function(_0xfd557c){var _0x2a5c4f=this;if(this[_0x681d('0xd')][_0xfd557c[_0x681d('0x22')]]){if(this[_0x681d('0x10')][_0xfd557c[_0x681d('0x22')]]){this[_0x681d('0xd')][_0xfd557c[_0x681d('0x22')]]['id']=this[_0x681d('0x10')][_0xfd557c[_0x681d('0x22')]]['id'];this['channels'][_0xfd557c[_0x681d('0x22')]][_0x681d('0x24')]=this['actions'][_0xfd557c[_0x681d('0x22')]][_0x681d('0x24')];}logger[_0x681d('0x25')](_0xfd557c[_0x681d('0x22')],this[_0x681d('0x10')][_0xfd557c['uniqueid']]?_0x681d('0x4b'):'\x20hangup\x20faxRiceive\x20',JSON[_0x681d('0x3d')](this['channels'][_0xfd557c[_0x681d('0x22')]]));if(this[_0x681d('0x10')][_0xfd557c[_0x681d('0x22')]]){if(this[_0x681d('0xd')][_0xfd557c[_0x681d('0x22')]][_0x681d('0x4c')]>0x0&&this['channels'][_0xfd557c[_0x681d('0x22')]][_0x681d('0x19')]===_0x681d('0x4d')){this[_0x681d('0x47')](_0xfd557c[_0x681d('0x22')],!![]);}else{this[_0x681d('0x47')](_0xfd557c[_0x681d('0x22')],![],this[_0x681d('0xd')][_0xfd557c[_0x681d('0x22')]][_0x681d('0x4e')]?'SENDING\x20FAILED:\x20'+this[_0x681d('0xd')][_0xfd557c[_0x681d('0x22')]][_0x681d('0x4e')]:_0x681d('0x4f'));}}}};Fax['prototype'][_0x681d('0x50')]=function(_0x4c27f0){var _0x3a2805=this;return new BPromise(function(_0x1ced1f,_0x3da74b){_0x3a2805['execOriginate'](_0x4c27f0,_0x3a2805['faxAccounts'][_0x4c27f0[_0x681d('0x51')]])['then'](function(_0x308bad){ut[_0x681d('0x45')](_0x681d('0x52'),_0x308bad);_0x1ced1f(ut[_0x681d('0x53')]('Fax\x20received'));})['catch'](function(_0x880f9d){ut[_0x681d('0x45')]('[Fax][execOriginate][failure]',_0x880f9d);updateStatus(_0x4c27f0);_0x3da74b(ut['message']('Fax\x20failed'));});});};Fax['prototype'][_0x681d('0x54')]=function(_0x238ff9){var _0x53a1e0=this;return new BPromise(function(_0x748254,_0x4d5869){var _0xd67e7b=_0x53a1e0[_0x681d('0x55')](_0x53a1e0[_0x681d('0xe')][_0x238ff9[_0x681d('0x51')]][_0x681d('0x56')],_0x238ff9);if(_0xd67e7b[_0x681d('0x57')]){_0x748254(ut['message'](_0x681d('0x58')));}else{_0x4d5869(ut['message'](_0xd67e7b[_0x681d('0x53')]));}});};function originate(_0x1d7634,_0x190af3,_0x179450){return new BPromise(function(_0x1faa0c,_0x1f81eb){if(_0x179450){var _0x397f38=util[_0x681d('0x59')]('gs\x20-q\x20-dNOPAUSE\x20-dBATCH\x20-sDEVICE=tiffg4\x20-sPAPERSIZE=letter\x20-sOutputFile=/var/opt/motion2/server/files/attachments/%s.tif\x20\x20%s\x20-c\x20quit',path['parse'](_0x1d7634[_0x681d('0x2')])[_0x681d('0x24')],_0x1d7634[_0x681d('0x2')]);gs['execute'](_0x397f38)[_0x681d('0x5a')](function(){_0x1d7634[_0x681d('0x2')]=util[_0x681d('0x59')]('%s/%s.tif',path[_0x681d('0x37')](_0x1d7634[_0x681d('0x2')])[_0x681d('0x5b')],path[_0x681d('0x37')](_0x1d7634['path'])[_0x681d('0x24')]);_0x190af3[_0x681d('0x5c')]=_0x1d7634[_0x681d('0x2')];ut['logger'](_0x681d('0x5d'),'');ami[_0x681d('0x5e')](ut[_0x681d('0x5f')](_0x1d7634,_0x190af3))[_0x681d('0x5a')](function(_0x55e392){_0x1faa0c(_0x55e392);})[_0x681d('0x3a')](function(_0x2700e0){_0x1f81eb(_0x2700e0);});})[_0x681d('0x3a')](function(_0x6f1fc0){_0x1f81eb(_0x6f1fc0);});}else{ami['Action'](ut[_0x681d('0x5f')](_0x1d7634,_0x190af3))[_0x681d('0x5a')](function(_0x52d494){_0x1faa0c(_0x52d494);})[_0x681d('0x3a')](function(_0x160b7c){_0x1f81eb(_0x160b7c);});}});}Fax[_0x681d('0x1d')][_0x681d('0x60')]=function(_0xdd1394,_0x3e3c9f){var _0x10d437=this;return new BPromise(function(_0x88c5c5,_0x2a3637){var _0xdca42f=uuid['v4']();var _0x5e82df=ut['addVariables'](_0xdd1394,_0x3e3c9f);_0x10d437[_0x681d('0x10')][_0xdca42f]=new Action(_0xdca42f,_0x3e3c9f,_0xdd1394);var _0x32ad5c=_0x10d437['actions'][_0xdca42f];if(path[_0x681d('0x37')](_0xdd1394[_0x681d('0x2')])[_0x681d('0x61')]==='.pdf'){originate(_0x32ad5c,_0x5e82df,!![])['then'](function(_0x185b58){_0x88c5c5(_0x185b58);})[_0x681d('0x3a')](function(_0xaac0d4){_0x2a3637(_0xaac0d4);});}else{originate(_0x32ad5c,_0x5e82df,![])[_0x681d('0x5a')](function(_0x7c12e6){_0x88c5c5(_0x7c12e6);})[_0x681d('0x3a')](function(_0x216152){_0x2a3637(_0x216152);});}});};Fax[_0x681d('0x1d')]['isTrunkReachable']=function(_0x2ad5ab){return!_[_0x681d('0x62')](_0x2ad5ab)&&!_[_0x681d('0x62')](_0x2ad5ab['name'])&&!_[_0x681d('0x62')](_0x2ad5ab[_0x681d('0x63')])&&_0x2ad5ab[_0x681d('0x63')]&&!_[_0x681d('0x62')](this[_0x681d('0xf')][util[_0x681d('0x59')](_0x681d('0x64'),_0x2ad5ab['name'])])&&!_[_0x681d('0x62')](this[_0x681d('0xf')][util[_0x681d('0x59')]('SIP/%s',_0x2ad5ab[_0x681d('0x24')])][_0x681d('0x2d')])&&(this[_0x681d('0xf')][util[_0x681d('0x59')](_0x681d('0x64'),_0x2ad5ab['name'])][_0x681d('0x2d')]==='reachable'||this[_0x681d('0xf')][util[_0x681d('0x59')](_0x681d('0x64'),_0x2ad5ab[_0x681d('0x24')])][_0x681d('0x2d')]===_0x681d('0x65'));};Fax[_0x681d('0x1d')][_0x681d('0x55')]=function(_0x143aa1,_0x4738ab){if(!this[_0x681d('0x66')](_0x143aa1)){ut[_0x681d('0x45')](_0x681d('0x67'),_[_0x681d('0x62')](_0x143aa1)?'':_0x143aa1['name']+_0x681d('0x68'));return{'isValid':![],'message':_0x681d('0x69')};}if(_['isNil'](_0x4738ab[_0x681d('0x5')])){ut[_0x681d('0x45')](_0x681d('0x6a'),JSON[_0x681d('0x3d')](_0x4738ab));return{'isValid':![],'message':_0x681d('0x6b')};}if(_[_0x681d('0x62')](_0x4738ab['path'])){ut[_0x681d('0x45')](_0x681d('0x6c'),JSON['stringify'](_0x4738ab));return{'isValid':![],'message':_0x681d('0x6d')};}return{'isValid':!![],'message':_0x681d('0x6e')};};module[_0x681d('0x6f')]=Fax;
\ No newline at end of file
index 0bb9472..1a8788b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbe42=['catch','[Notify]\x20','util','bluebird','../../../config/logger','preview','lodash','../rpc/faxAccount','inspect','notify','resolve','then'];(function(_0x188a93,_0xaf57db){var _0x23b40d=function(_0x599f63){while(--_0x599f63){_0x188a93['push'](_0x188a93['shift']());}};_0x23b40d(++_0xaf57db);}(_0xbe42,0x13a));var _0x2be4=function(_0x173113,_0x316a7c){_0x173113=_0x173113-0x0;var _0x3bea89=_0xbe42[_0x173113];return _0x3bea89;};'use strict';var util=require(_0x2be4('0x0'));var BPromise=require(_0x2be4('0x1'));var logger=require(_0x2be4('0x2'))(_0x2be4('0x3'));var _=require(_0x2be4('0x4'));var faxAccount=require(_0x2be4('0x5'));function loggerCatch(_0x3c8e8f){return function(_0x502f5c){logger['error'](_0x3c8e8f,util[_0x2be4('0x6')](_0x502f5c,{'showHidden':![],'depth':null}));};}exports[_0x2be4('0x7')]=function(_0x2a85bf,_0x525aa2){return BPromise[_0x2be4('0x8')]()[_0x2be4('0x9')](faxAccount['notify'](_0x2a85bf,_0x525aa2))[_0x2be4('0xa')](loggerCatch(_0x2be4('0xb')));};
\ No newline at end of file
+var _0xb129=['error','notify','resolve','[Notify]\x20','bluebird','preview','lodash','../rpc/faxAccount'];(function(_0x7975,_0x3aecc5){var _0x7c7b51=function(_0xe4598){while(--_0xe4598){_0x7975['push'](_0x7975['shift']());}};_0x7c7b51(++_0x3aecc5);}(_0xb129,0x14c));var _0x9b12=function(_0x92c259,_0x34d06f){_0x92c259=_0x92c259-0x0;var _0x5524fb=_0xb129[_0x92c259];return _0x5524fb;};'use strict';var util=require('util');var BPromise=require(_0x9b12('0x0'));var logger=require('../../../config/logger')(_0x9b12('0x1'));var _=require(_0x9b12('0x2'));var faxAccount=require(_0x9b12('0x3'));function loggerCatch(_0x9153c0){return function(_0x355804){logger[_0x9b12('0x4')](_0x9153c0,util['inspect'](_0x355804,{'showHidden':![],'depth':null}));};}exports[_0x9b12('0x5')]=function(_0x2216ed,_0x32f4e5){return BPromise[_0x9b12('0x6')]()['then'](faxAccount[_0x9b12('0x5')](_0x2216ed,_0x32f4e5))['catch'](loggerCatch(_0x9b12('0x7')));};
\ No newline at end of file
index 6ebe52b..78552ae 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x74e9=['exec','Exec\x20gs','\x20Error\x20:','inspect','util','../../../../config/logger','fax','bluebird','child_process'];(function(_0x54b284,_0x19d746){var _0x22a0cd=function(_0x412ba5){while(--_0x412ba5){_0x54b284['push'](_0x54b284['shift']());}};_0x22a0cd(++_0x19d746);}(_0x74e9,0xdc));var _0x974e=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0x74e9[_0x122ef9];return _0x42fba0;};'use strict';var util=require(_0x974e('0x0'));var logger=require(_0x974e('0x1'))(_0x974e('0x2'));var BPromise=require(_0x974e('0x3'));var exec=require(_0x974e('0x4'))[_0x974e('0x5')];exports['execute']=function(_0x2754c3){return new BPromise(function(_0x1a9bde,_0x52a7d3){exec(_0x2754c3,function(_0x2cb986,_0x5deaf9,_0xae2e9){logger['info'](_0x974e('0x6'),_0x5deaf9);if(_0x2cb986){logger['info'](_0x974e('0x6'),_0x974e('0x7'),util[_0x974e('0x8')](_0x2cb986,{'showHidden':![],'depth':null}),_0x5deaf9,_0xae2e9);_0x52a7d3(_0x2cb986);}_0x1a9bde(_0x5deaf9);});});};
\ No newline at end of file
+var _0x2818=['execute','Exec\x20gs','info','\x20Error\x20:','util','../../../../config/logger','bluebird','exec'];(function(_0x193cc0,_0x227edc){var _0x53d496=function(_0x3aa19c){while(--_0x3aa19c){_0x193cc0['push'](_0x193cc0['shift']());}};_0x53d496(++_0x227edc);}(_0x2818,0x18c));var _0x8281=function(_0x5f15b9,_0x4585aa){_0x5f15b9=_0x5f15b9-0x0;var _0x4f6499=_0x2818[_0x5f15b9];return _0x4f6499;};'use strict';var util=require(_0x8281('0x0'));var logger=require(_0x8281('0x1'))('fax');var BPromise=require(_0x8281('0x2'));var exec=require('child_process')[_0x8281('0x3')];exports[_0x8281('0x4')]=function(_0x4b8ced){return new BPromise(function(_0x917426,_0x5a2b30){exec(_0x4b8ced,function(_0x5d9b7c,_0x1c0d5d,_0x427556){logger['info'](_0x8281('0x5'),_0x1c0d5d);if(_0x5d9b7c){logger[_0x8281('0x6')](_0x8281('0x5'),_0x8281('0x7'),util['inspect'](_0x5d9b7c,{'showHidden':![],'depth':null}),_0x1c0d5d,_0x427556);_0x5a2b30(_0x5d9b7c);}_0x917426(_0x1c0d5d);});});};
\ No newline at end of file
index 067772f..205313e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ee8=['minrate','maxrate','format','gateway','faxdetect','t38timeout','path','variablesAction','originate','channel','xcally-motion-fax','from-sip','\x22%s\x22\x20<%s>','headerinfo','localstationid','util','lodash','../../../../config/logger','fax','message','logger','info','inspect','addVariables'];(function(_0x3dafa,_0x44428b){var _0x2aa5e9=function(_0x3ce27b){while(--_0x3ce27b){_0x3dafa['push'](_0x3dafa['shift']());}};_0x2aa5e9(++_0x44428b);}(_0x4ee8,0x15f));var _0x84ee=function(_0x44bcb0,_0x235aa9){_0x44bcb0=_0x44bcb0-0x0;var _0xfaf881=_0x4ee8[_0x44bcb0];return _0xfaf881;};'use strict';var util=require(_0x84ee('0x0'));var _=require(_0x84ee('0x1'));var moment=require('moment');var logger=require(_0x84ee('0x2'))(_0x84ee('0x3'));exports[_0x84ee('0x4')]=function(_0x3eda52){return{'message':_0x3eda52};};exports[_0x84ee('0x5')]=function(_0x1e967c,_0x37b385){logger[_0x84ee('0x6')](_0x1e967c,util[_0x84ee('0x7')](_0x37b385,{'showHidden':![],'depth':null}));};exports[_0x84ee('0x8')]=function(_0x55c6e9,_0x3a462e){var _0x32f817={'XMF-ECM':_0x3a462e['ecm'],'XMF-HEADERINFO':_0x3a462e['headerinfo'],'XMF-MINRATE':_0x3a462e[_0x84ee('0x9')],'XMF-MAXRATE':_0x3a462e[_0x84ee('0xa')],'XMF-MODEM':util[_0x84ee('0xb')]('\x22%s\x22',_0x3a462e['modem']),'XMF-GATEWAY':_0x3a462e[_0x84ee('0xc')],'XMF-FAXDETECT':_0x3a462e[_0x84ee('0xd')],'XMF-T38TIMEOUT':_0x3a462e[_0x84ee('0xe')],'XMF-LOCALSTATIONID':_0x3a462e['localstationid'],'XMF-PATH':_0x55c6e9[_0x84ee('0xf')]};return _0x32f817;};exports[_0x84ee('0x10')]=function(_0x160da6,_0x4ea33b){return{'actionid':_0x160da6['uniqueid'],'action':_0x84ee('0x11'),'channel':_0x160da6[_0x84ee('0x12')],'Exten':_0x84ee('0x13'),'Context':_0x84ee('0x14'),'Priority':'1','callerid':util[_0x84ee('0xb')](_0x84ee('0x15'),_0x160da6[_0x84ee('0x16')]?_0x160da6['headerinfo']:'',_0x160da6[_0x84ee('0x17')]),'variable':_0x4ea33b,'timeout':0x1e*0x3e8,'async':!![],'channelid':_0x160da6['uniqueid']};};
\ No newline at end of file
+var _0x10b8=['info','inspect','ecm','headerinfo','minrate','maxrate','format','\x22%s\x22','modem','faxdetect','localstationid','path','variablesAction','uniqueid','originate','xcally-motion-fax','from-sip','util','lodash','moment','fax','message','logger'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x10b8,0x1f4));var _0x810b=function(_0x12fc8d,_0x19ee33){_0x12fc8d=_0x12fc8d-0x0;var _0x3f9d04=_0x10b8[_0x12fc8d];return _0x3f9d04;};'use strict';var util=require(_0x810b('0x0'));var _=require(_0x810b('0x1'));var moment=require(_0x810b('0x2'));var logger=require('../../../../config/logger')(_0x810b('0x3'));exports[_0x810b('0x4')]=function(_0x3b0347){return{'message':_0x3b0347};};exports[_0x810b('0x5')]=function(_0x2ac68b,_0x80c3f6){logger[_0x810b('0x6')](_0x2ac68b,util[_0x810b('0x7')](_0x80c3f6,{'showHidden':![],'depth':null}));};exports['addVariables']=function(_0x3abba4,_0x404b8f){var _0x3e1795={'XMF-ECM':_0x404b8f[_0x810b('0x8')],'XMF-HEADERINFO':_0x404b8f[_0x810b('0x9')],'XMF-MINRATE':_0x404b8f[_0x810b('0xa')],'XMF-MAXRATE':_0x404b8f[_0x810b('0xb')],'XMF-MODEM':util[_0x810b('0xc')](_0x810b('0xd'),_0x404b8f[_0x810b('0xe')]),'XMF-GATEWAY':_0x404b8f['gateway'],'XMF-FAXDETECT':_0x404b8f[_0x810b('0xf')],'XMF-T38TIMEOUT':_0x404b8f['t38timeout'],'XMF-LOCALSTATIONID':_0x404b8f[_0x810b('0x10')],'XMF-PATH':_0x3abba4[_0x810b('0x11')]};return _0x3e1795;};exports[_0x810b('0x12')]=function(_0x2a5736,_0x59c123){return{'actionid':_0x2a5736[_0x810b('0x13')],'action':_0x810b('0x14'),'channel':_0x2a5736['channel'],'Exten':_0x810b('0x15'),'Context':_0x810b('0x16'),'Priority':'1','callerid':util[_0x810b('0xc')]('\x22%s\x22\x20<%s>',_0x2a5736[_0x810b('0x9')]?_0x2a5736[_0x810b('0x9')]:'',_0x2a5736[_0x810b('0x10')]),'variable':_0x59c123,'timeout':0x1e*0x3e8,'async':!![],'channelid':_0x2a5736[_0x810b('0x13')]};};
\ No newline at end of file
index 6084a96..e3e1941 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x788e=['./rpc/user','./rpc/voiceQueue','./rpc/voiceQueueReport','./rpc/voiceCallReport','./rpc/trigger','./rpc/cmHopperHistory','./rpc/voiceExtension','./rpc/faxAccount','./rpc/integrations/zendesk','./rpc/integrations/salesforce','./rpc/integrations/sugarcrm','./rpc/integrations/desk','./rpc/integrations/zoho','./rpc/integrations/vtiger','./rpc/integrations/servicenow','hour','get','resolve','then','getAgents','initAgents','getTelephones','initTelephones','getTrunks','initTrunks','getVoiceQueues','getTriggers','initTriggers','getTemplates','initZendeskAccounts','getSalesforceAccounts','initSalesforceAccounts','getSugarcrmAccounts','initSugarcrmAccounts','getFreshdeskAccounts','initFreshdeskAccounts','getDeskAccounts','initDeskAccounts','initZohoAccounts','getVtigerAccounts','initVtigerAccounts','getServicenowAccounts','initServicenowAccounts','getDynamics365Accounts','initDynamics365Accounts','getCampaigns','initCampaigns','getVoiceExtensions','initVoiceExtensions','initFaxAccounts','getVoiceQueueReports','initVoiceQueueReports','initVoiceQueueHopperHistory','getCampaignHopperHistory','initCampaignHopperHistory','getVoiceCallReports','initVoiceCallReports','catch','listen','bluebird','util','moment','./server','./acw','./dialer','./fax'];(function(_0x428d55,_0x4e5e47){var _0x4ba5fc=function(_0x216dcd){while(--_0x216dcd){_0x428d55['push'](_0x428d55['shift']());}};_0x4ba5fc(++_0x4e5e47);}(_0x788e,0x185));var _0xe788=function(_0x4c02b3,_0x134ce4){_0x4c02b3=_0x4c02b3-0x0;var _0x431212=_0x788e[_0x4c02b3];return _0x431212;};'use strict';var BPromise=require(_0xe788('0x0'));var util=require(_0xe788('0x1'));var moment=require(_0xe788('0x2'));var server=require(_0xe788('0x3'));var Realtime=require('./realtime');var Report=require('./report');var Acw=require(_0xe788('0x4'));var Trigger=require('./trigger');var Dialer=require(_0xe788('0x5'));var Preview=require('./preview');var Fax=require(_0xe788('0x6'));var user=require(_0xe788('0x7'));var voiceQueue=require(_0xe788('0x8'));var voiceQueueReport=require(_0xe788('0x9'));var voiceCallReport=require(_0xe788('0xa'));var trunk=require('./rpc/trunk');var trigger=require(_0xe788('0xb'));var template=require('./rpc/template');var cmHopperHistory=require(_0xe788('0xc'));var campaign=require('./rpc/campaign');var voiceExtension=require(_0xe788('0xd'));var faxAccount=require(_0xe788('0xe'));var zendesk=require(_0xe788('0xf'));var salesforce=require(_0xe788('0x10'));var sugarcrm=require(_0xe788('0x11'));var freshdesk=require('./rpc/integrations/freshdesk');var desk=require(_0xe788('0x12'));var zoho=require(_0xe788('0x13'));var vtiger=require(_0xe788('0x14'));var servicenow=require(_0xe788('0x15'));var dynamics365=require('./rpc/integrations/dynamics365');var realtime=new Realtime();var report=new Report(realtime);var acw=new Acw(realtime);var channelTrigger=new Trigger(realtime);var preview=new Preview(realtime);var dialer=new Dialer(realtime,preview);var fax=new Fax(realtime);var isTrue=!![];var initP=!![];function ifMidnight(){if(moment()['get'](_0xe788('0x16'))===0x0&&initP){initP=![];isTrue=!![];initParams();}if(moment()[_0xe788('0x17')](_0xe788('0x16'))===0x1&&isTrue){isTrue=![];initP=!![];}}function initRealtime(){ifMidnight();return BPromise[_0xe788('0x18')]()[_0xe788('0x19')](user[_0xe788('0x1a')]())[_0xe788('0x19')](realtime[_0xe788('0x1b')]())[_0xe788('0x19')](user[_0xe788('0x1c')]())[_0xe788('0x19')](realtime[_0xe788('0x1d')]())['then'](trunk[_0xe788('0x1e')]())[_0xe788('0x19')](realtime[_0xe788('0x1f')]())[_0xe788('0x19')](voiceQueue[_0xe788('0x20')]())[_0xe788('0x19')](realtime['initVoiceQueues']())[_0xe788('0x19')](trigger[_0xe788('0x21')]())[_0xe788('0x19')](realtime[_0xe788('0x22')]())[_0xe788('0x19')](template[_0xe788('0x23')]())['then'](realtime['initTemplates']())['then'](zendesk['getZendeskAccounts']())[_0xe788('0x19')](realtime[_0xe788('0x24')]())[_0xe788('0x19')](salesforce[_0xe788('0x25')]())['then'](realtime[_0xe788('0x26')]())[_0xe788('0x19')](sugarcrm[_0xe788('0x27')]())[_0xe788('0x19')](realtime[_0xe788('0x28')]())[_0xe788('0x19')](freshdesk[_0xe788('0x29')]())[_0xe788('0x19')](realtime[_0xe788('0x2a')]())[_0xe788('0x19')](desk[_0xe788('0x2b')]())[_0xe788('0x19')](realtime[_0xe788('0x2c')]())[_0xe788('0x19')](zoho['getZohoAccounts']())[_0xe788('0x19')](realtime[_0xe788('0x2d')]())['then'](vtiger[_0xe788('0x2e')]())[_0xe788('0x19')](realtime[_0xe788('0x2f')]())[_0xe788('0x19')](servicenow[_0xe788('0x30')]())['then'](realtime[_0xe788('0x31')]())[_0xe788('0x19')](dynamics365[_0xe788('0x32')]())[_0xe788('0x19')](realtime[_0xe788('0x33')]())[_0xe788('0x19')](campaign[_0xe788('0x34')]())[_0xe788('0x19')](realtime[_0xe788('0x35')]())[_0xe788('0x19')](voiceExtension[_0xe788('0x36')]())[_0xe788('0x19')](realtime[_0xe788('0x37')]())[_0xe788('0x19')](faxAccount['getFaxAccounts']())[_0xe788('0x19')](realtime[_0xe788('0x38')]())[_0xe788('0x19')](function(){return realtime;});}function initParams(){return BPromise[_0xe788('0x18')]()[_0xe788('0x19')](voiceQueueReport[_0xe788('0x39')]())['then'](realtime[_0xe788('0x3a')]())[_0xe788('0x19')](cmHopperHistory['getVoiceQueueHopperHistory']())[_0xe788('0x19')](realtime[_0xe788('0x3b')]())[_0xe788('0x19')](cmHopperHistory[_0xe788('0x3c')]())[_0xe788('0x19')](realtime[_0xe788('0x3d')]())[_0xe788('0x19')](voiceCallReport[_0xe788('0x3e')]())[_0xe788('0x19')](realtime[_0xe788('0x3f')]())[_0xe788('0x19')](function(_0x14ad82){})[_0xe788('0x40')](function(_0x1a6b18){console['log'](_0x1a6b18);});}function main(){return server[_0xe788('0x41')](realtime,preview,fax)[_0xe788('0x19')](function(_0xcd77ea){return initRealtime();})[_0xe788('0x19')](function(){return initParams();})[_0xe788('0x19')](function(){report['sync']();setInterval(initRealtime,0x1388);})['catch'](function(_0x444cf7){console['log'](_0x444cf7);});}main();
\ No newline at end of file
+var _0x4065=['log','listen','catch','bluebird','util','moment','./server','./realtime','./report','./acw','./dialer','./preview','./fax','./rpc/user','./rpc/voiceQueue','./rpc/voiceQueueReport','./rpc/voiceCallReport','./rpc/trigger','./rpc/template','./rpc/voiceExtension','./rpc/integrations/zendesk','./rpc/integrations/salesforce','./rpc/integrations/sugarcrm','./rpc/integrations/freshdesk','./rpc/integrations/desk','./rpc/integrations/zoho','./rpc/integrations/vtiger','./rpc/integrations/dynamics365','get','hour','resolve','getAgents','then','initAgents','getTelephones','initTelephones','getTrunks','initTrunks','getVoiceQueues','initVoiceQueues','getTriggers','getTemplates','initTemplates','getZendeskAccounts','initZendeskAccounts','getSalesforceAccounts','initSalesforceAccounts','getSugarcrmAccounts','initSugarcrmAccounts','getFreshdeskAccounts','initFreshdeskAccounts','getDeskAccounts','initDeskAccounts','getZohoAccounts','initVtigerAccounts','getServicenowAccounts','initServicenowAccounts','getDynamics365Accounts','initDynamics365Accounts','initCampaigns','getVoiceExtensions','getFaxAccounts','initFaxAccounts','getVoiceQueueReports','initVoiceQueueHopperHistory','getCampaignHopperHistory','initCampaignHopperHistory','getVoiceCallReports','initVoiceCallReports'];(function(_0x1fc84d,_0x3f469d){var _0x2658fa=function(_0x189ad0){while(--_0x189ad0){_0x1fc84d['push'](_0x1fc84d['shift']());}};_0x2658fa(++_0x3f469d);}(_0x4065,0x1e6));var _0x5406=function(_0x56365b,_0x1d5511){_0x56365b=_0x56365b-0x0;var _0x32f60a=_0x4065[_0x56365b];return _0x32f60a;};'use strict';var BPromise=require(_0x5406('0x0'));var util=require(_0x5406('0x1'));var moment=require(_0x5406('0x2'));var server=require(_0x5406('0x3'));var Realtime=require(_0x5406('0x4'));var Report=require(_0x5406('0x5'));var Acw=require(_0x5406('0x6'));var Trigger=require('./trigger');var Dialer=require(_0x5406('0x7'));var Preview=require(_0x5406('0x8'));var Fax=require(_0x5406('0x9'));var user=require(_0x5406('0xa'));var voiceQueue=require(_0x5406('0xb'));var voiceQueueReport=require(_0x5406('0xc'));var voiceCallReport=require(_0x5406('0xd'));var trunk=require('./rpc/trunk');var trigger=require(_0x5406('0xe'));var template=require(_0x5406('0xf'));var cmHopperHistory=require('./rpc/cmHopperHistory');var campaign=require('./rpc/campaign');var voiceExtension=require(_0x5406('0x10'));var faxAccount=require('./rpc/faxAccount');var zendesk=require(_0x5406('0x11'));var salesforce=require(_0x5406('0x12'));var sugarcrm=require(_0x5406('0x13'));var freshdesk=require(_0x5406('0x14'));var desk=require(_0x5406('0x15'));var zoho=require(_0x5406('0x16'));var vtiger=require(_0x5406('0x17'));var servicenow=require('./rpc/integrations/servicenow');var dynamics365=require(_0x5406('0x18'));var realtime=new Realtime();var report=new Report(realtime);var acw=new Acw(realtime);var channelTrigger=new Trigger(realtime);var preview=new Preview(realtime);var dialer=new Dialer(realtime,preview);var fax=new Fax(realtime);var isTrue=!![];var initP=!![];function ifMidnight(){if(moment()[_0x5406('0x19')](_0x5406('0x1a'))===0x0&&initP){initP=![];isTrue=!![];initParams();}if(moment()['get']('hour')===0x1&&isTrue){isTrue=![];initP=!![];}}function initRealtime(){ifMidnight();return BPromise[_0x5406('0x1b')]()['then'](user[_0x5406('0x1c')]())[_0x5406('0x1d')](realtime[_0x5406('0x1e')]())[_0x5406('0x1d')](user[_0x5406('0x1f')]())[_0x5406('0x1d')](realtime[_0x5406('0x20')]())[_0x5406('0x1d')](trunk[_0x5406('0x21')]())[_0x5406('0x1d')](realtime[_0x5406('0x22')]())[_0x5406('0x1d')](voiceQueue[_0x5406('0x23')]())['then'](realtime[_0x5406('0x24')]())[_0x5406('0x1d')](trigger[_0x5406('0x25')]())[_0x5406('0x1d')](realtime['initTriggers']())[_0x5406('0x1d')](template[_0x5406('0x26')]())[_0x5406('0x1d')](realtime[_0x5406('0x27')]())[_0x5406('0x1d')](zendesk[_0x5406('0x28')]())[_0x5406('0x1d')](realtime[_0x5406('0x29')]())[_0x5406('0x1d')](salesforce[_0x5406('0x2a')]())[_0x5406('0x1d')](realtime[_0x5406('0x2b')]())[_0x5406('0x1d')](sugarcrm[_0x5406('0x2c')]())[_0x5406('0x1d')](realtime[_0x5406('0x2d')]())[_0x5406('0x1d')](freshdesk[_0x5406('0x2e')]())[_0x5406('0x1d')](realtime[_0x5406('0x2f')]())[_0x5406('0x1d')](desk[_0x5406('0x30')]())[_0x5406('0x1d')](realtime[_0x5406('0x31')]())[_0x5406('0x1d')](zoho[_0x5406('0x32')]())['then'](realtime['initZohoAccounts']())['then'](vtiger['getVtigerAccounts']())['then'](realtime[_0x5406('0x33')]())[_0x5406('0x1d')](servicenow[_0x5406('0x34')]())['then'](realtime[_0x5406('0x35')]())[_0x5406('0x1d')](dynamics365[_0x5406('0x36')]())[_0x5406('0x1d')](realtime[_0x5406('0x37')]())[_0x5406('0x1d')](campaign['getCampaigns']())[_0x5406('0x1d')](realtime[_0x5406('0x38')]())[_0x5406('0x1d')](voiceExtension[_0x5406('0x39')]())['then'](realtime['initVoiceExtensions']())[_0x5406('0x1d')](faxAccount[_0x5406('0x3a')]())[_0x5406('0x1d')](realtime[_0x5406('0x3b')]())[_0x5406('0x1d')](function(){return realtime;});}function initParams(){return BPromise[_0x5406('0x1b')]()[_0x5406('0x1d')](voiceQueueReport[_0x5406('0x3c')]())[_0x5406('0x1d')](realtime['initVoiceQueueReports']())['then'](cmHopperHistory['getVoiceQueueHopperHistory']())[_0x5406('0x1d')](realtime[_0x5406('0x3d')]())[_0x5406('0x1d')](cmHopperHistory[_0x5406('0x3e')]())[_0x5406('0x1d')](realtime[_0x5406('0x3f')]())[_0x5406('0x1d')](voiceCallReport[_0x5406('0x40')]())[_0x5406('0x1d')](realtime[_0x5406('0x41')]())[_0x5406('0x1d')](function(_0x4468d1){})['catch'](function(_0x368b42){console[_0x5406('0x42')](_0x368b42);});}function main(){return server[_0x5406('0x43')](realtime,preview,fax)[_0x5406('0x1d')](function(_0x51bd36){return initRealtime();})[_0x5406('0x1d')](function(){return initParams();})[_0x5406('0x1d')](function(){report['sync']();setInterval(initRealtime,0x1388);})[_0x5406('0x44')](function(_0x5e01e2){console[_0x5406('0x42')](_0x5e01e2);});}main();
\ No newline at end of file
index bd5019e..92d0965 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7bf4=['local','prototype','updateStatusRealtime','toLowerCase','not_inuse','idle','inuse','talking','statePause','voiceStatusQueue','stringify','format','user:%s','user:save','exports','util','moment','md5','ioredis','../../../config/environment','redis','name','email','accountcode','fullname','state','unknown','stateTime','status','address','phone','mobile','interface','online','voiceStatus','voiceStatusTime','voiceStatusCallerIdNumber','onhold'];(function(_0x40a045,_0x516f0e){var _0x1a687c=function(_0x48c9fe){while(--_0x48c9fe){_0x40a045['push'](_0x40a045['shift']());}};_0x1a687c(++_0x516f0e);}(_0x7bf4,0xcd));var _0x47bf=function(_0x2a5ae0,_0x22d93d){_0x2a5ae0=_0x2a5ae0-0x0;var _0x3b35c9=_0x7bf4[_0x2a5ae0];return _0x3b35c9;};'use strict';var _=require('lodash');var util=require(_0x47bf('0x0'));var moment=require(_0x47bf('0x1'));var md5=require(_0x47bf('0x2'));var Redis=require(_0x47bf('0x3'));var config=require(_0x47bf('0x4'));config[_0x47bf('0x5')]=_['defaults'](config[_0x47bf('0x5')],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x47bf('0x5')]));function Agent(_0x2567a6){this['id']=_0x2567a6['id']||0x0;this[_0x47bf('0x6')]=_0x2567a6[_0x47bf('0x6')]||'';this[_0x47bf('0x7')]=_0x2567a6['email']||'';this[_0x47bf('0x8')]=_0x2567a6[_0x47bf('0x8')]||'';this['fullname']=_0x2567a6[_0x47bf('0x9')]||'';this[_0x47bf('0xa')]=_0x47bf('0xb');this[_0x47bf('0xc')]=0x0;this[_0x47bf('0xd')]=_0x47bf('0xb');this[_0x47bf('0xe')]='';this[_0x47bf('0xf')]='';this[_0x47bf('0x10')]='';this[_0x47bf('0x11')]='';this[_0x47bf('0x12')]=_0x2567a6[_0x47bf('0x12')]||![];this[_0x47bf('0x13')]=_0x47bf('0xb');this[_0x47bf('0x14')]=0x0;this[_0x47bf('0x15')]='';this['voiceStatusQueue']='';this[_0x47bf('0x16')]=![];this[_0x47bf('0x17')]=![];this[_0x47bf('0x2')]='';}Agent[_0x47bf('0x18')][_0x47bf('0x19')]=function(_0xf78eb5){var _0x247a76;if(_0xf78eb5&&_0xf78eb5[_0x47bf('0xa')]){_0x247a76=_0xf78eb5[_0x47bf('0xa')][_0x47bf('0x1a')]();switch(_0x247a76){case _0x47bf('0x1b'):_0x247a76=_0x47bf('0x1c');break;case _0x47bf('0x1d'):_0x247a76=_0x47bf('0x1e');break;}}if(_0x247a76&&this[_0x47bf('0x13')]!==_0x247a76||_0xf78eb5[_0x47bf('0x1f')]){this['voiceStatusTime']=_['toNumber'](moment()['format']('x'));}if(_0x247a76){this['voiceStatus']=_0x247a76;}var _0x4ed04b={'id':this['id'],'name':this[_0x47bf('0x6')],'email':this[_0x47bf('0x7')],'accountcode':this['accountcode'],'fullname':this['fullname'],'state':this['state'],'stateTime':this[_0x47bf('0xc')],'status':this['status'],'address':this['address'],'online':this['online'],'voiceStatus':this[_0x47bf('0x13')],'voiceStatusTime':this[_0x47bf('0x14')],'voiceStatusCallerIdNumber':this[_0x47bf('0x15')],'voiceStatusQueue':this[_0x47bf('0x20')],'interface':this[_0x47bf('0x11')],'onhold':this[_0x47bf('0x16')]};var _0x17a185=md5(JSON[_0x47bf('0x21')](_0x4ed04b));if(this['md5']!==_0x17a185){this['md5']=_0x17a185;io['to'](util[_0x47bf('0x22')](_0x47bf('0x23'),_0x4ed04b[_0x47bf('0x6')]))['emit'](_0x47bf('0x24'),_0x4ed04b);}};module[_0x47bf('0x25')]=Agent;
\ No newline at end of file
+var _0x53ea=['util','ioredis','../../../config/environment','redis','defaults','socket.io-emitter','name','email','accountcode','fullname','state','stateTime','unknown','address','phone','interface','online','voiceStatus','voiceStatusTime','voiceStatusCallerIdNumber','voiceStatusQueue','local','md5','prototype','updateStatusRealtime','toLowerCase','idle','inuse','talking','toNumber','format','status','onhold','stringify','user:%s','emit','user:save','lodash'];(function(_0x28a2d6,_0x539ca8){var _0x3d900f=function(_0x46c0ba){while(--_0x46c0ba){_0x28a2d6['push'](_0x28a2d6['shift']());}};_0x3d900f(++_0x539ca8);}(_0x53ea,0x1c7));var _0xa53e=function(_0x2bd98a,_0x3d0c12){_0x2bd98a=_0x2bd98a-0x0;var _0x330026=_0x53ea[_0x2bd98a];return _0x330026;};'use strict';var _=require(_0xa53e('0x0'));var util=require(_0xa53e('0x1'));var moment=require('moment');var md5=require('md5');var Redis=require(_0xa53e('0x2'));var config=require(_0xa53e('0x3'));config[_0xa53e('0x4')]=_[_0xa53e('0x5')](config[_0xa53e('0x4')],{'host':'localhost','port':0x18eb});var io=require(_0xa53e('0x6'))(new Redis(config[_0xa53e('0x4')]));function Agent(_0x350b80){this['id']=_0x350b80['id']||0x0;this[_0xa53e('0x7')]=_0x350b80[_0xa53e('0x7')]||'';this[_0xa53e('0x8')]=_0x350b80[_0xa53e('0x8')]||'';this['accountcode']=_0x350b80[_0xa53e('0x9')]||'';this[_0xa53e('0xa')]=_0x350b80[_0xa53e('0xa')]||'';this[_0xa53e('0xb')]='unknown';this[_0xa53e('0xc')]=0x0;this['status']=_0xa53e('0xd');this[_0xa53e('0xe')]='';this[_0xa53e('0xf')]='';this['mobile']='';this[_0xa53e('0x10')]='';this[_0xa53e('0x11')]=_0x350b80[_0xa53e('0x11')]||![];this[_0xa53e('0x12')]=_0xa53e('0xd');this[_0xa53e('0x13')]=0x0;this[_0xa53e('0x14')]='';this[_0xa53e('0x15')]='';this['onhold']=![];this[_0xa53e('0x16')]=![];this[_0xa53e('0x17')]='';}Agent[_0xa53e('0x18')][_0xa53e('0x19')]=function(_0x22a335){var _0xc6861;if(_0x22a335&&_0x22a335[_0xa53e('0xb')]){_0xc6861=_0x22a335[_0xa53e('0xb')][_0xa53e('0x1a')]();switch(_0xc6861){case'not_inuse':_0xc6861=_0xa53e('0x1b');break;case _0xa53e('0x1c'):_0xc6861=_0xa53e('0x1d');break;}}if(_0xc6861&&this[_0xa53e('0x12')]!==_0xc6861||_0x22a335['statePause']){this[_0xa53e('0x13')]=_[_0xa53e('0x1e')](moment()[_0xa53e('0x1f')]('x'));}if(_0xc6861){this[_0xa53e('0x12')]=_0xc6861;}var _0xe392cf={'id':this['id'],'name':this[_0xa53e('0x7')],'email':this['email'],'accountcode':this[_0xa53e('0x9')],'fullname':this[_0xa53e('0xa')],'state':this[_0xa53e('0xb')],'stateTime':this['stateTime'],'status':this[_0xa53e('0x20')],'address':this['address'],'online':this[_0xa53e('0x11')],'voiceStatus':this['voiceStatus'],'voiceStatusTime':this[_0xa53e('0x13')],'voiceStatusCallerIdNumber':this[_0xa53e('0x14')],'voiceStatusQueue':this[_0xa53e('0x15')],'interface':this[_0xa53e('0x10')],'onhold':this[_0xa53e('0x21')]};var _0x31943e=md5(JSON[_0xa53e('0x22')](_0xe392cf));if(this['md5']!==_0x31943e){this[_0xa53e('0x17')]=_0x31943e;io['to'](util[_0xa53e('0x1f')](_0xa53e('0x23'),_0xe392cf[_0xa53e('0x7')]))[_0xa53e('0x24')](_0xa53e('0x25'),_0xe392cf);}};module['exports']=Agent;
\ No newline at end of file
index b379cb8..4f3f372 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6c76=['dialOriginateTimeout','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialOrderByScheduledAt','dialPrefix','dialRandomLastDigitCallerIdNumber','dialCutDigit','TrunkBackup','Trunk','Interval','SquareProject','dialQueueProject','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','exports','name','type','campaign','ivrAnswerCallsDay','ivrTotalCallsDays','sendMessageOneNotActive','active','limitCalls','dialTimezone','dialGlobalInterval','dialOriginateCallerIdName','dialOriginateCallerIdNumber'];(function(_0x1b2b88,_0x14d65b){var _0x11d8c9=function(_0x4fdc20){while(--_0x4fdc20){_0x1b2b88['push'](_0x1b2b88['shift']());}};_0x11d8c9(++_0x14d65b);}(_0x6c76,0x184));var _0x66c7=function(_0x2685c4,_0x113da3){_0x2685c4=_0x2685c4-0x0;var _0x5f414c=_0x6c76[_0x2685c4];return _0x5f414c;};'use strict';function Campaign(_0x4d4f77){this['id']=_0x4d4f77['id']||0x0;this[_0x66c7('0x0')]=_0x4d4f77[_0x66c7('0x0')]||'';this['type']=_0x4d4f77[_0x66c7('0x1')]||_0x66c7('0x2');this['originated']=0x0;this['temp']=0x0;this[_0x66c7('0x3')]=0x0;this[_0x66c7('0x4')]=0x0;this['message']='';this[_0x66c7('0x5')]=!![];this[_0x66c7('0x6')]=_0x4d4f77['active'];this[_0x66c7('0x7')]=_0x4d4f77['limitCalls'];this['dialTimezone']=_0x4d4f77[_0x66c7('0x8')]||null;this[_0x66c7('0x9')]=_0x4d4f77[_0x66c7('0x9')]?_0x4d4f77['dialGlobalInterval']:null;this[_0x66c7('0xa')]=_0x4d4f77[_0x66c7('0xa')];this[_0x66c7('0xb')]=_0x4d4f77[_0x66c7('0xb')];this['dialOriginateTimeout']=_0x4d4f77[_0x66c7('0xc')]||0x1e;this[_0x66c7('0xd')]=_0x4d4f77[_0x66c7('0xd')];this[_0x66c7('0xe')]=_0x4d4f77[_0x66c7('0xe')];this[_0x66c7('0xf')]=_0x4d4f77[_0x66c7('0xf')];this['dialBusyRetryFrequency']=_0x4d4f77[_0x66c7('0x10')];this[_0x66c7('0x11')]=_0x4d4f77[_0x66c7('0x11')];this[_0x66c7('0x12')]=_0x4d4f77[_0x66c7('0x12')];this[_0x66c7('0x13')]=_0x4d4f77[_0x66c7('0x13')];this[_0x66c7('0x14')]=_0x4d4f77[_0x66c7('0x14')]||'DESC';this[_0x66c7('0x15')]=_0x4d4f77['dialPrefix']||undefined;this[_0x66c7('0x16')]=_0x4d4f77[_0x66c7('0x16')]||undefined;this[_0x66c7('0x17')]=_0x4d4f77[_0x66c7('0x17')]||undefined;this[_0x66c7('0x18')]=_0x4d4f77['TrunkBackup']?_0x4d4f77['TrunkBackup']:undefined;this['Trunk']=_0x4d4f77['Trunk']?_0x4d4f77[_0x66c7('0x19')]:undefined;this[_0x66c7('0x1a')]=_0x4d4f77['Interval']?_0x4d4f77['Interval']:undefined;this[_0x66c7('0x1b')]=_0x4d4f77[_0x66c7('0x1b')]?_0x4d4f77[_0x66c7('0x1b')]:undefined;this[_0x66c7('0x1c')]=_0x4d4f77['SquareProject']?_0x4d4f77['SquareProject'][_0x66c7('0x0')]:undefined;this[_0x66c7('0x1d')]=_0x4d4f77[_0x66c7('0x1d')]||![];this[_0x66c7('0x1e')]=_0x4d4f77[_0x66c7('0x1e')];this[_0x66c7('0x1f')]=_0x4d4f77['dialAMDGreeting'];this[_0x66c7('0x20')]=_0x4d4f77[_0x66c7('0x20')];this['dialAMDTotalAnalysisTime']=_0x4d4f77[_0x66c7('0x21')];this[_0x66c7('0x22')]=_0x4d4f77[_0x66c7('0x22')];this[_0x66c7('0x23')]=_0x4d4f77['dialAMDBetweenWordsSilence'];this[_0x66c7('0x24')]=_0x4d4f77[_0x66c7('0x24')];this['dialAMDSilenceThreshold']=_0x4d4f77[_0x66c7('0x25')];this[_0x66c7('0x26')]=_0x4d4f77[_0x66c7('0x26')];}module[_0x66c7('0x27')]=Campaign;
\ No newline at end of file
+var _0x0269=['dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialOrderByScheduledAt','DESC','dialPrefix','dialRandomLastDigitCallerIdNumber','dialCutDigit','TrunkBackup','Trunk','Interval','SquareProject','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','exports','name','type','originated','temp','ivrAnswerCallsDay','ivrTotalCallsDays','sendMessageOneNotActive','active','limitCalls','dialTimezone','dialGlobalInterval'];(function(_0x5c947f,_0x893a76){var _0x3dae19=function(_0x139436){while(--_0x139436){_0x5c947f['push'](_0x5c947f['shift']());}};_0x3dae19(++_0x893a76);}(_0x0269,0x135));var _0x9026=function(_0x3a1afb,_0x22f84e){_0x3a1afb=_0x3a1afb-0x0;var _0x4666c1=_0x0269[_0x3a1afb];return _0x4666c1;};'use strict';function Campaign(_0x1f7233){this['id']=_0x1f7233['id']||0x0;this['name']=_0x1f7233[_0x9026('0x0')]||'';this['type']=_0x1f7233[_0x9026('0x1')]||'campaign';this[_0x9026('0x2')]=0x0;this[_0x9026('0x3')]=0x0;this[_0x9026('0x4')]=0x0;this[_0x9026('0x5')]=0x0;this['message']='';this[_0x9026('0x6')]=!![];this[_0x9026('0x7')]=_0x1f7233['active'];this['limitCalls']=_0x1f7233[_0x9026('0x8')];this[_0x9026('0x9')]=_0x1f7233[_0x9026('0x9')]||null;this[_0x9026('0xa')]=_0x1f7233['dialGlobalInterval']?_0x1f7233[_0x9026('0xa')]:null;this[_0x9026('0xb')]=_0x1f7233[_0x9026('0xb')];this['dialOriginateCallerIdNumber']=_0x1f7233[_0x9026('0xc')];this[_0x9026('0xd')]=_0x1f7233[_0x9026('0xd')]||0x1e;this['dialCongestionMaxRetry']=_0x1f7233[_0x9026('0xe')];this['dialCongestionRetryFrequency']=_0x1f7233[_0x9026('0xf')];this[_0x9026('0x10')]=_0x1f7233[_0x9026('0x10')];this[_0x9026('0x11')]=_0x1f7233[_0x9026('0x11')];this[_0x9026('0x12')]=_0x1f7233[_0x9026('0x12')];this['dialNoAnswerRetryFrequency']=_0x1f7233[_0x9026('0x13')];this['dialGlobalMaxRetry']=_0x1f7233[_0x9026('0x14')];this[_0x9026('0x15')]=_0x1f7233[_0x9026('0x15')]||_0x9026('0x16');this[_0x9026('0x17')]=_0x1f7233[_0x9026('0x17')]||undefined;this[_0x9026('0x18')]=_0x1f7233[_0x9026('0x18')]||undefined;this['dialCutDigit']=_0x1f7233[_0x9026('0x19')]||undefined;this[_0x9026('0x1a')]=_0x1f7233['TrunkBackup']?_0x1f7233[_0x9026('0x1a')]:undefined;this[_0x9026('0x1b')]=_0x1f7233[_0x9026('0x1b')]?_0x1f7233[_0x9026('0x1b')]:undefined;this[_0x9026('0x1c')]=_0x1f7233[_0x9026('0x1c')]?_0x1f7233[_0x9026('0x1c')]:undefined;this[_0x9026('0x1d')]=_0x1f7233['SquareProject']?_0x1f7233[_0x9026('0x1d')]:undefined;this['dialQueueProject']=_0x1f7233[_0x9026('0x1d')]?_0x1f7233['SquareProject'][_0x9026('0x0')]:undefined;this[_0x9026('0x1e')]=_0x1f7233[_0x9026('0x1e')]||![];this[_0x9026('0x1f')]=_0x1f7233[_0x9026('0x1f')];this[_0x9026('0x20')]=_0x1f7233[_0x9026('0x20')];this[_0x9026('0x21')]=_0x1f7233[_0x9026('0x21')];this['dialAMDTotalAnalysisTime']=_0x1f7233['dialAMDTotalAnalysisTime'];this[_0x9026('0x22')]=_0x1f7233[_0x9026('0x22')];this[_0x9026('0x23')]=_0x1f7233[_0x9026('0x23')];this[_0x9026('0x24')]=_0x1f7233[_0x9026('0x24')];this[_0x9026('0x25')]=_0x1f7233[_0x9026('0x25')];this[_0x9026('0x26')]=_0x1f7233[_0x9026('0x26')];}module[_0x9026('0x27')]=Campaign;
\ No newline at end of file
index 2de1115..d260e16 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x905a=['linkedid','exten','answered','answertime','endtime','unmanaged','abandoned','lastapplication','duration','holdtime','disposition','monitor','queue','transferconnectedlinenum','mohtime','starttime','destinationchannel','connectedlinenum','connectedlinename','accountcode','context','uniqueid'];(function(_0x32b52f,_0x5a726d){var _0x3ceef8=function(_0x21c592){while(--_0x21c592){_0x32b52f['push'](_0x32b52f['shift']());}};_0x3ceef8(++_0x5a726d);}(_0x905a,0xeb));var _0xa905=function(_0xed8a38,_0x46b615){_0xed8a38=_0xed8a38-0x0;var _0x498b7e=_0x905a[_0xed8a38];return _0x498b7e;};'use strict';function Channel(){this[_0xa905('0x0')]=null;this['channel']='';this[_0xa905('0x1')]='';this['calleridnum']=0x0;this['calleridname']='';this[_0xa905('0x2')]=undefined;this[_0xa905('0x3')]=undefined;this[_0xa905('0x4')]=0x0;this[_0xa905('0x5')]='';this[_0xa905('0x6')]=0x0;this[_0xa905('0x7')]=0x0;this[_0xa905('0x8')]=0x0;this[_0xa905('0x9')]=![];this[_0xa905('0xa')]=null;this[_0xa905('0xb')]=null;this[_0xa905('0xc')]=![];this[_0xa905('0xd')]=![];this[_0xa905('0xe')]='';this['lastdata']='';this[_0xa905('0xf')]=0x0;this['billableseconds']=0x0;this[_0xa905('0x10')]=0x0;this['type']=null;this['tag']=null;this[_0xa905('0x11')]=null;this[_0xa905('0x12')]=![];this['monitorFilename']=null;this[_0xa905('0x13')]=null;this['monitors']=[];this['transfercalleridnum']=undefined;this[_0xa905('0x14')]=undefined;this[_0xa905('0x15')]=0x0;}module['exports']=Channel;
\ No newline at end of file
+var _0xfd50=['exports','channel','destinationchannel','calleridnum','calleridname','connectedlinenum','accountcode','context','exten','answered','answertime','endtime','abandoned','lastapplication','duration','billableseconds','holdtime','type','tag','disposition','monitor','queue','monitors','transferconnectedlinenum','mohtime'];(function(_0x574d24,_0x5805d8){var _0x598206=function(_0x9dab53){while(--_0x9dab53){_0x574d24['push'](_0x574d24['shift']());}};_0x598206(++_0x5805d8);}(_0xfd50,0x178));var _0x0fd5=function(_0x5f0089,_0x227e2c){_0x5f0089=_0x5f0089-0x0;var _0x193892=_0xfd50[_0x5f0089];return _0x193892;};'use strict';function Channel(){this['starttime']=null;this[_0x0fd5('0x0')]='';this[_0x0fd5('0x1')]='';this[_0x0fd5('0x2')]=0x0;this[_0x0fd5('0x3')]='';this[_0x0fd5('0x4')]=undefined;this['connectedlinename']=undefined;this[_0x0fd5('0x5')]=0x0;this[_0x0fd5('0x6')]='';this['uniqueid']=0x0;this['linkedid']=0x0;this[_0x0fd5('0x7')]=0x0;this[_0x0fd5('0x8')]=![];this[_0x0fd5('0x9')]=null;this[_0x0fd5('0xa')]=null;this['unmanaged']=![];this[_0x0fd5('0xb')]=![];this[_0x0fd5('0xc')]='';this['lastdata']='';this[_0x0fd5('0xd')]=0x0;this[_0x0fd5('0xe')]=0x0;this[_0x0fd5('0xf')]=0x0;this[_0x0fd5('0x10')]=null;this[_0x0fd5('0x11')]=null;this[_0x0fd5('0x12')]=null;this[_0x0fd5('0x13')]=![];this['monitorFilename']=null;this[_0x0fd5('0x14')]=null;this[_0x0fd5('0x15')]=[];this['transfercalleridnum']=undefined;this[_0x0fd5('0x16')]=undefined;this[_0x0fd5('0x17')]=0x0;}module[_0x0fd5('0x18')]=Channel;
\ No newline at end of file
index 4224817..10a363d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2fc5=['username','remoteUri','authType','password','consumerKey','consumerSecret','token','tokenSecret','type','serverUrl','Configurations','name'];(function(_0x3382e5,_0x4bfaa8){var _0x5efe1a=function(_0x78eb1e){while(--_0x78eb1e){_0x3382e5['push'](_0x3382e5['shift']());}};_0x5efe1a(++_0x4bfaa8);}(_0x2fc5,0x167));var _0x52fc=function(_0xa3fadc,_0xd1e16){_0xa3fadc=_0xa3fadc-0x0;var _0x23ecb8=_0x2fc5[_0xa3fadc];return _0x23ecb8;};'use strict';function DeskAccount(_0x51f9b7){this['id']=_0x51f9b7['id']||0x0;this[_0x52fc('0x0')]=_0x51f9b7[_0x52fc('0x0')]||'';this[_0x52fc('0x1')]=_0x51f9b7[_0x52fc('0x1')]||'';this[_0x52fc('0x2')]=_0x51f9b7['remoteUri']||'';this[_0x52fc('0x3')]=_0x51f9b7[_0x52fc('0x3')]||'';this['password']=_0x51f9b7[_0x52fc('0x4')]||'';this[_0x52fc('0x5')]=_0x51f9b7[_0x52fc('0x5')]||'';this['consumerSecret']=_0x51f9b7[_0x52fc('0x6')]||'';this[_0x52fc('0x7')]=_0x51f9b7['token']||'';this[_0x52fc('0x8')]=_0x51f9b7[_0x52fc('0x8')]||'';this[_0x52fc('0x9')]=_0x51f9b7[_0x52fc('0x9')]||'';this[_0x52fc('0xa')]=_0x51f9b7[_0x52fc('0xa')]||'';this['Configurations']=_0x51f9b7[_0x52fc('0xb')]||{};}module['exports']=DeskAccount;
\ No newline at end of file
+var _0x3cbf=['password','consumerKey','consumerSecret','token','tokenSecret','serverUrl','Configurations','exports','name','username','remoteUri','authType'];(function(_0x46ae5a,_0x2a38d0){var _0x434986=function(_0x22735d){while(--_0x22735d){_0x46ae5a['push'](_0x46ae5a['shift']());}};_0x434986(++_0x2a38d0);}(_0x3cbf,0x128));var _0xf3cb=function(_0x51020b,_0x38c2c7){_0x51020b=_0x51020b-0x0;var _0x371e47=_0x3cbf[_0x51020b];return _0x371e47;};'use strict';function DeskAccount(_0x1daa2c){this['id']=_0x1daa2c['id']||0x0;this[_0xf3cb('0x0')]=_0x1daa2c['name']||'';this[_0xf3cb('0x1')]=_0x1daa2c[_0xf3cb('0x1')]||'';this[_0xf3cb('0x2')]=_0x1daa2c['remoteUri']||'';this[_0xf3cb('0x3')]=_0x1daa2c['authType']||'';this[_0xf3cb('0x4')]=_0x1daa2c['password']||'';this['consumerKey']=_0x1daa2c[_0xf3cb('0x5')]||'';this[_0xf3cb('0x6')]=_0x1daa2c[_0xf3cb('0x6')]||'';this[_0xf3cb('0x7')]=_0x1daa2c[_0xf3cb('0x7')]||'';this[_0xf3cb('0x8')]=_0x1daa2c['tokenSecret']||'';this['type']=_0x1daa2c['type']||'';this[_0xf3cb('0x9')]=_0x1daa2c[_0xf3cb('0x9')]||'';this[_0xf3cb('0xa')]=_0x1daa2c[_0xf3cb('0xa')]||{};}module[_0xf3cb('0xb')]=DeskAccount;
\ No newline at end of file
index 181c62f..cf6a555 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x02e3=['serverUrl','exports','name','username','password','remoteUri','tenantId','clientSecret'];(function(_0x5a2b2b,_0x3c4351){var _0x3e875c=function(_0x5ba22f){while(--_0x5ba22f){_0x5a2b2b['push'](_0x5a2b2b['shift']());}};_0x3e875c(++_0x3c4351);}(_0x02e3,0x7a));var _0x302e=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x02e3[_0x321bb2];return _0x9c12ed;};'use strict';function Dynamics365Account(_0x34c77d){this['id']=_0x34c77d['id']||0x0;this[_0x302e('0x0')]=_0x34c77d[_0x302e('0x0')]||'';this[_0x302e('0x1')]=_0x34c77d[_0x302e('0x1')]||'';this[_0x302e('0x2')]=_0x34c77d[_0x302e('0x2')]||'';this[_0x302e('0x3')]=_0x34c77d[_0x302e('0x3')]||'';this[_0x302e('0x4')]=_0x34c77d['tenantId']||'';this['clientId']=_0x34c77d['clientId']||'';this[_0x302e('0x5')]=_0x34c77d[_0x302e('0x5')]||{};this[_0x302e('0x6')]=_0x34c77d[_0x302e('0x6')]||'';this['Configurations']=_0x34c77d['Configurations']||{};}module[_0x302e('0x7')]=Dynamics365Account;
\ No newline at end of file
+var _0x2b19=['tenantId','clientId','clientSecret','serverUrl','Configurations','exports','name','username','password','remoteUri'];(function(_0x35885a,_0x42fed7){var _0xe86249=function(_0x98edb3){while(--_0x98edb3){_0x35885a['push'](_0x35885a['shift']());}};_0xe86249(++_0x42fed7);}(_0x2b19,0x1c8));var _0x92b1=function(_0x1ea055,_0x5ecac9){_0x1ea055=_0x1ea055-0x0;var _0xba85a5=_0x2b19[_0x1ea055];return _0xba85a5;};'use strict';function Dynamics365Account(_0x388544){this['id']=_0x388544['id']||0x0;this[_0x92b1('0x0')]=_0x388544[_0x92b1('0x0')]||'';this[_0x92b1('0x1')]=_0x388544[_0x92b1('0x1')]||'';this[_0x92b1('0x2')]=_0x388544[_0x92b1('0x2')]||'';this[_0x92b1('0x3')]=_0x388544[_0x92b1('0x3')]||'';this['tenantId']=_0x388544[_0x92b1('0x4')]||'';this[_0x92b1('0x5')]=_0x388544[_0x92b1('0x5')]||'';this[_0x92b1('0x6')]=_0x388544[_0x92b1('0x6')]||{};this[_0x92b1('0x7')]=_0x388544[_0x92b1('0x7')]||'';this['Configurations']=_0x388544[_0x92b1('0x8')]||{};}module[_0x92b1('0x9')]=Dynamics365Account;
\ No newline at end of file
index a738cdc..2a09363 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf109=['headerinfo','localstationid','minrate','maxrate','modem','gateway','faxdetect','t38timeout','tech','SIP','Trunk','ListId','key','exports','name','ecm'];(function(_0x2b91c5,_0x3b6db5){var _0xbd5531=function(_0x54783d){while(--_0x54783d){_0x2b91c5['push'](_0x2b91c5['shift']());}};_0xbd5531(++_0x3b6db5);}(_0xf109,0xce));var _0x9f10=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0xf109[_0x42cae2];return _0x5f256f;};'use strict';function FaxAccount(_0x4debcd){this['id']=_0x4debcd['id']||0x0;this[_0x9f10('0x0')]=_0x4debcd[_0x9f10('0x0')]||'';this['description']=_0x4debcd['description'];this['ecm']=_0x4debcd[_0x9f10('0x1')];this[_0x9f10('0x2')]=_0x4debcd[_0x9f10('0x2')];this[_0x9f10('0x3')]=_0x4debcd[_0x9f10('0x3')];this[_0x9f10('0x4')]=_0x4debcd[_0x9f10('0x4')]||0x960;this[_0x9f10('0x5')]=_0x4debcd[_0x9f10('0x5')]||0x3840;this[_0x9f10('0x6')]=_0x4debcd[_0x9f10('0x6')]||'v17,v27,v29';this[_0x9f10('0x7')]=_0x4debcd[_0x9f10('0x7')]||'no';this[_0x9f10('0x8')]=_0x4debcd[_0x9f10('0x8')]||'no';this[_0x9f10('0x9')]=_0x4debcd['t38timeout']||0x1388;this[_0x9f10('0xa')]=_0x4debcd[_0x9f10('0xa')]||_0x9f10('0xb');this['Trunk']=_0x4debcd['Trunk']?_0x4debcd[_0x9f10('0xc')]:undefined;this[_0x9f10('0xd')]=_0x4debcd[_0x9f10('0xd')];this['key']=_0x4debcd[_0x9f10('0xe')];}module[_0x9f10('0xf')]=FaxAccount;
\ No newline at end of file
+var _0xf290=['tech','SIP','Trunk','ListId','key','exports','name','description','ecm','headerinfo','localstationid','minrate','maxrate','modem','v17,v27,v29','gateway','faxdetect','t38timeout'];(function(_0x42f2dd,_0x4f4e33){var _0x5754e4=function(_0xd9adec){while(--_0xd9adec){_0x42f2dd['push'](_0x42f2dd['shift']());}};_0x5754e4(++_0x4f4e33);}(_0xf290,0xde));var _0x0f29=function(_0x101e7b,_0x4ef05b){_0x101e7b=_0x101e7b-0x0;var _0x4995c0=_0xf290[_0x101e7b];return _0x4995c0;};'use strict';function FaxAccount(_0x1149f4){this['id']=_0x1149f4['id']||0x0;this[_0x0f29('0x0')]=_0x1149f4['name']||'';this[_0x0f29('0x1')]=_0x1149f4['description'];this[_0x0f29('0x2')]=_0x1149f4[_0x0f29('0x2')];this[_0x0f29('0x3')]=_0x1149f4[_0x0f29('0x3')];this[_0x0f29('0x4')]=_0x1149f4['localstationid'];this[_0x0f29('0x5')]=_0x1149f4['minrate']||0x960;this[_0x0f29('0x6')]=_0x1149f4[_0x0f29('0x6')]||0x3840;this[_0x0f29('0x7')]=_0x1149f4[_0x0f29('0x7')]||_0x0f29('0x8');this[_0x0f29('0x9')]=_0x1149f4[_0x0f29('0x9')]||'no';this[_0x0f29('0xa')]=_0x1149f4[_0x0f29('0xa')]||'no';this[_0x0f29('0xb')]=_0x1149f4[_0x0f29('0xb')]||0x1388;this[_0x0f29('0xc')]=_0x1149f4[_0x0f29('0xc')]||_0x0f29('0xd');this[_0x0f29('0xe')]=_0x1149f4['Trunk']?_0x1149f4[_0x0f29('0xe')]:undefined;this['ListId']=_0x1149f4[_0x0f29('0xf')];this[_0x0f29('0x10')]=_0x1149f4[_0x0f29('0x10')];}module[_0x0f29('0x11')]=FaxAccount;
\ No newline at end of file
index d306d9d..66fe0df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc2f9=['name','apiKey','serverUrl','Configurations','exports'];(function(_0x5a3cf0,_0x160a68){var _0x5a64ee=function(_0x34cd1d){while(--_0x34cd1d){_0x5a3cf0['push'](_0x5a3cf0['shift']());}};_0x5a64ee(++_0x160a68);}(_0xc2f9,0x145));var _0x9c2f=function(_0x49ef52,_0x232641){_0x49ef52=_0x49ef52-0x0;var _0x6e0399=_0xc2f9[_0x49ef52];return _0x6e0399;};'use strict';function FreshdeskAccount(_0x4eb4ea){this['id']=_0x4eb4ea['id']||0x0;this['name']=_0x4eb4ea[_0x9c2f('0x0')]||'';this['username']=_0x4eb4ea['username']||'';this[_0x9c2f('0x1')]=_0x4eb4ea['token']||'';this['remoteUri']=_0x4eb4ea['remoteUri']||'';this[_0x9c2f('0x2')]=_0x4eb4ea[_0x9c2f('0x2')]||'';this[_0x9c2f('0x3')]=_0x4eb4ea['Configurations']||{};}module[_0x9c2f('0x4')]=FreshdeskAccount;
\ No newline at end of file
+var _0xf7aa=['Configurations','exports','name','username','apiKey','remoteUri','serverUrl'];(function(_0xf7058b,_0x22c9b7){var _0x24cbf0=function(_0x2997ac){while(--_0x2997ac){_0xf7058b['push'](_0xf7058b['shift']());}};_0x24cbf0(++_0x22c9b7);}(_0xf7aa,0x72));var _0xaf7a=function(_0x59cf5f,_0xa7751a){_0x59cf5f=_0x59cf5f-0x0;var _0x17d09a=_0xf7aa[_0x59cf5f];return _0x17d09a;};'use strict';function FreshdeskAccount(_0x1bda43){this['id']=_0x1bda43['id']||0x0;this[_0xaf7a('0x0')]=_0x1bda43[_0xaf7a('0x0')]||'';this[_0xaf7a('0x1')]=_0x1bda43[_0xaf7a('0x1')]||'';this[_0xaf7a('0x2')]=_0x1bda43['token']||'';this[_0xaf7a('0x3')]=_0x1bda43[_0xaf7a('0x3')]||'';this['serverUrl']=_0x1bda43[_0xaf7a('0x4')]||'';this[_0xaf7a('0x5')]=_0x1bda43['Configurations']||{};}module[_0xaf7a('0x6')]=FreshdeskAccount;
\ No newline at end of file
index 71bc25a..7ac7d10 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3790=['queuecallerleaveAt','position','queuecallerabandon','queuecallercomplete','queuecallercompleteAt','queuecallerexitAt','originalposition','channel','connectedlinename','accountcode','context','priority','holdtime','lastAssignedTo','variables','exports','inbound','uniqueid','calleridnum','calleridname','queuecallerjoinAt'];(function(_0x16719d,_0x14b344){var _0x211e99=function(_0x3de301){while(--_0x3de301){_0x16719d['push'](_0x16719d['shift']());}};_0x211e99(++_0x14b344);}(_0x3790,0xa3));var _0x0379=function(_0x1e14c4,_0x15378b){_0x1e14c4=_0x1e14c4-0x0;var _0x52e33b=_0x3790[_0x1e14c4];return _0x52e33b;};'use strict';function QueueReport(){this['type']=_0x0379('0x0');this[_0x0379('0x1')]='';this[_0x0379('0x2')]='';this[_0x0379('0x3')]='';this['queue']='';this[_0x0379('0x4')]=null;this[_0x0379('0x5')]=null;this[_0x0379('0x6')]=0x1;this['count']=0x1;this[_0x0379('0x7')]=![];this['queuecallerabandonAt']=null;this[_0x0379('0x8')]=![];this[_0x0379('0x9')]=null;this['queuecallerexit']=![];this[_0x0379('0xa')]=null;this[_0x0379('0xb')]=0x1;this[_0x0379('0xc')]='';this['connectedlinenum']='';this[_0x0379('0xd')]='';this[_0x0379('0xe')]='';this[_0x0379('0xf')]='';this['exten']='';this[_0x0379('0x10')]='';this[_0x0379('0x11')]=0x0;this['assigned']=![];this[_0x0379('0x12')]='';this['mohtime']=0x0;this[_0x0379('0x13')]={};}module[_0x0379('0x14')]=QueueReport;
\ No newline at end of file
+var _0x7fe2=['queuecallerjoinAt','queuecallerleaveAt','position','queuecallerabandon','queuecallercompleteAt','queuecallerexit','originalposition','channel','accountcode','context','priority','holdtime','lastAssignedTo','variables','type','inbound','calleridnum'];(function(_0x328223,_0x8195fb){var _0x2c70bf=function(_0x44395a){while(--_0x44395a){_0x328223['push'](_0x328223['shift']());}};_0x2c70bf(++_0x8195fb);}(_0x7fe2,0x96));var _0x27fe=function(_0xf51c06,_0x388e5b){_0xf51c06=_0xf51c06-0x0;var _0x1d5420=_0x7fe2[_0xf51c06];return _0x1d5420;};'use strict';function QueueReport(){this[_0x27fe('0x0')]=_0x27fe('0x1');this['uniqueid']='';this[_0x27fe('0x2')]='';this['calleridname']='';this['queue']='';this[_0x27fe('0x3')]=null;this[_0x27fe('0x4')]=null;this[_0x27fe('0x5')]=0x1;this['count']=0x1;this[_0x27fe('0x6')]=![];this['queuecallerabandonAt']=null;this['queuecallercomplete']=![];this[_0x27fe('0x7')]=null;this[_0x27fe('0x8')]=![];this['queuecallerexitAt']=null;this[_0x27fe('0x9')]=0x1;this[_0x27fe('0xa')]='';this['connectedlinenum']='';this['connectedlinename']='';this[_0x27fe('0xb')]='';this[_0x27fe('0xc')]='';this['exten']='';this[_0x27fe('0xd')]='';this[_0x27fe('0xe')]=0x0;this['assigned']=![];this[_0x27fe('0xf')]='';this['mohtime']=0x0;this[_0x27fe('0x10')]={};}module['exports']=QueueReport;
\ No newline at end of file
index 0f3dee3..d3fea57 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf292=['clientSecret','securityToken','type','integrationTab','serverUrl','Configurations','name','username','remoteUri','password','clientId'];(function(_0x588346,_0x54e1a4){var _0x43f4fb=function(_0x4ab7bd){while(--_0x4ab7bd){_0x588346['push'](_0x588346['shift']());}};_0x43f4fb(++_0x54e1a4);}(_0xf292,0x150));var _0x2f29=function(_0x556927,_0x34b53f){_0x556927=_0x556927-0x0;var _0x5f1235=_0xf292[_0x556927];return _0x5f1235;};'use strict';function SalesforceAccount(_0x1ac639){this['id']=_0x1ac639['id']||0x0;this[_0x2f29('0x0')]=_0x1ac639[_0x2f29('0x0')]||'';this[_0x2f29('0x1')]=_0x1ac639[_0x2f29('0x1')]||'';this[_0x2f29('0x2')]=_0x1ac639[_0x2f29('0x2')]||'';this[_0x2f29('0x3')]=_0x1ac639[_0x2f29('0x3')]||'';this[_0x2f29('0x4')]=_0x1ac639[_0x2f29('0x4')]||'';this[_0x2f29('0x5')]=_0x1ac639[_0x2f29('0x5')]||'';this['securityToken']=_0x1ac639[_0x2f29('0x6')]||'';this[_0x2f29('0x7')]=_0x1ac639[_0x2f29('0x7')]||_0x2f29('0x8');this[_0x2f29('0x9')]=_0x1ac639[_0x2f29('0x9')]||'';this[_0x2f29('0xa')]=_0x1ac639[_0x2f29('0xa')]||{};}module['exports']=SalesforceAccount;
\ No newline at end of file
+var _0xfb16=['password','clientId','clientSecret','securityToken','type','integrationTab','serverUrl','Configurations','exports','name','username','remoteUri'];(function(_0x31a938,_0x4daec6){var _0x1bf341=function(_0x514261){while(--_0x514261){_0x31a938['push'](_0x31a938['shift']());}};_0x1bf341(++_0x4daec6);}(_0xfb16,0x11d));var _0x6fb1=function(_0x15cf2d,_0x1d8b95){_0x15cf2d=_0x15cf2d-0x0;var _0x53373b=_0xfb16[_0x15cf2d];return _0x53373b;};'use strict';function SalesforceAccount(_0x472631){this['id']=_0x472631['id']||0x0;this[_0x6fb1('0x0')]=_0x472631[_0x6fb1('0x0')]||'';this[_0x6fb1('0x1')]=_0x472631[_0x6fb1('0x1')]||'';this[_0x6fb1('0x2')]=_0x472631[_0x6fb1('0x2')]||'';this[_0x6fb1('0x3')]=_0x472631[_0x6fb1('0x3')]||'';this['clientId']=_0x472631[_0x6fb1('0x4')]||'';this[_0x6fb1('0x5')]=_0x472631[_0x6fb1('0x5')]||'';this[_0x6fb1('0x6')]=_0x472631[_0x6fb1('0x6')]||'';this[_0x6fb1('0x7')]=_0x472631['type']||_0x6fb1('0x8');this[_0x6fb1('0x9')]=_0x472631[_0x6fb1('0x9')]||'';this['Configurations']=_0x472631[_0x6fb1('0xa')]||{};}module[_0x6fb1('0xb')]=SalesforceAccount;
\ No newline at end of file
index 6e5aa50..7c061f8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9f4d=['name','username','password','remoteUri','serverUrl','Configurations','exports'];(function(_0x430fc3,_0x3f688d){var _0xdfb2d3=function(_0x4b1a43){while(--_0x4b1a43){_0x430fc3['push'](_0x430fc3['shift']());}};_0xdfb2d3(++_0x3f688d);}(_0x9f4d,0xc4));var _0xd9f4=function(_0xac0d3,_0x3d1441){_0xac0d3=_0xac0d3-0x0;var _0x277107=_0x9f4d[_0xac0d3];return _0x277107;};'use strict';function ServicenowAccount(_0x1cca1c){this['id']=_0x1cca1c['id']||0x0;this[_0xd9f4('0x0')]=_0x1cca1c[_0xd9f4('0x0')]||'';this[_0xd9f4('0x1')]=_0x1cca1c['username']||'';this[_0xd9f4('0x2')]=_0x1cca1c[_0xd9f4('0x2')]||'';this[_0xd9f4('0x3')]=_0x1cca1c[_0xd9f4('0x3')]||'';this[_0xd9f4('0x4')]=_0x1cca1c['serverUrl']||'';this[_0xd9f4('0x5')]=_0x1cca1c[_0xd9f4('0x5')]||{};}module[_0xd9f4('0x6')]=ServicenowAccount;
\ No newline at end of file
+var _0x5a08=['remoteUri','serverUrl','Configurations','name','username','password'];(function(_0x32bf53,_0x33bc0c){var _0x20d9c0=function(_0x2e5f82){while(--_0x2e5f82){_0x32bf53['push'](_0x32bf53['shift']());}};_0x20d9c0(++_0x33bc0c);}(_0x5a08,0x105));var _0x85a0=function(_0x5bfca9,_0xbbeb9){_0x5bfca9=_0x5bfca9-0x0;var _0x42e67c=_0x5a08[_0x5bfca9];return _0x42e67c;};'use strict';function ServicenowAccount(_0x2d4ccb){this['id']=_0x2d4ccb['id']||0x0;this[_0x85a0('0x0')]=_0x2d4ccb['name']||'';this[_0x85a0('0x1')]=_0x2d4ccb[_0x85a0('0x1')]||'';this[_0x85a0('0x2')]=_0x2d4ccb[_0x85a0('0x2')]||'';this['remoteUri']=_0x2d4ccb[_0x85a0('0x3')]||'';this[_0x85a0('0x4')]=_0x2d4ccb[_0x85a0('0x4')]||'';this[_0x85a0('0x5')]=_0x2d4ccb[_0x85a0('0x5')]||{};}module['exports']=ServicenowAccount;
\ No newline at end of file
index a30a742..adf99b6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbb49=['password','serverUrl','Configurations','exports','name','username'];(function(_0x31e584,_0x4d9f7f){var _0x5686d0=function(_0x1f9e99){while(--_0x1f9e99){_0x31e584['push'](_0x31e584['shift']());}};_0x5686d0(++_0x4d9f7f);}(_0xbb49,0x148));var _0x9bb4=function(_0x4dafab,_0x20f927){_0x4dafab=_0x4dafab-0x0;var _0x4969af=_0xbb49[_0x4dafab];return _0x4969af;};'use strict';function SugarcrmAccount(_0x37e3c7){this['id']=_0x37e3c7['id']||0x0;this[_0x9bb4('0x0')]=_0x37e3c7[_0x9bb4('0x0')]||'';this[_0x9bb4('0x1')]=_0x37e3c7[_0x9bb4('0x1')]||'';this[_0x9bb4('0x2')]=_0x37e3c7[_0x9bb4('0x2')]||'';this['remoteUri']=_0x37e3c7['remoteUri']||'';this['serverUrl']=_0x37e3c7[_0x9bb4('0x3')]||'';this[_0x9bb4('0x4')]=_0x37e3c7['Configurations']||{};}module[_0x9bb4('0x5')]=SugarcrmAccount;
\ No newline at end of file
+var _0xabdf=['Configurations','exports','name','username','password','remoteUri','serverUrl'];(function(_0x2a6d83,_0x1f8ef1){var _0x52df60=function(_0x403a09){while(--_0x403a09){_0x2a6d83['push'](_0x2a6d83['shift']());}};_0x52df60(++_0x1f8ef1);}(_0xabdf,0x12f));var _0xfabd=function(_0x3a8d4a,_0x10ad0d){_0x3a8d4a=_0x3a8d4a-0x0;var _0x18b4f0=_0xabdf[_0x3a8d4a];return _0x18b4f0;};'use strict';function SugarcrmAccount(_0x1b63ad){this['id']=_0x1b63ad['id']||0x0;this['name']=_0x1b63ad[_0xfabd('0x0')]||'';this[_0xfabd('0x1')]=_0x1b63ad[_0xfabd('0x1')]||'';this[_0xfabd('0x2')]=_0x1b63ad[_0xfabd('0x2')]||'';this['remoteUri']=_0x1b63ad[_0xfabd('0x3')]||'';this[_0xfabd('0x4')]=_0x1b63ad[_0xfabd('0x4')]||'';this['Configurations']=_0x1b63ad[_0xfabd('0x5')]||{};}module[_0xfabd('0x6')]=SugarcrmAccount;
\ No newline at end of file
index 09918b0..06603ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcd05=['accountcode','state','stateTime','status','address','name'];(function(_0x3159c0,_0x592776){var _0x12411f=function(_0x3b7d17){while(--_0x3b7d17){_0x3159c0['push'](_0x3159c0['shift']());}};_0x12411f(++_0x592776);}(_0xcd05,0xe9));var _0x5cd0=function(_0x9edfd5,_0x286486){_0x9edfd5=_0x9edfd5-0x0;var _0x330738=_0xcd05[_0x9edfd5];return _0x330738;};'use strict';function Telephone(_0x5026a1){this['id']=_0x5026a1['id']||0x0;this[_0x5cd0('0x0')]=_0x5026a1[_0x5cd0('0x0')]||'';this[_0x5cd0('0x1')]=_0x5026a1['accountcode']||'';this[_0x5cd0('0x2')]='unknown';this[_0x5cd0('0x3')]=0x0;this[_0x5cd0('0x4')]='unknown';this[_0x5cd0('0x5')]='';}module['exports']=Telephone;
\ No newline at end of file
+var _0x75c0=['name','accountcode','unknown','stateTime','status','address'];(function(_0xd488b,_0x26b64a){var _0x20de3b=function(_0x5e0fc9){while(--_0x5e0fc9){_0xd488b['push'](_0xd488b['shift']());}};_0x20de3b(++_0x26b64a);}(_0x75c0,0xc0));var _0x075c=function(_0x3ee6bc,_0x4025bb){_0x3ee6bc=_0x3ee6bc-0x0;var _0x5bda78=_0x75c0[_0x3ee6bc];return _0x5bda78;};'use strict';function Telephone(_0x31c6da){this['id']=_0x31c6da['id']||0x0;this[_0x075c('0x0')]=_0x31c6da[_0x075c('0x0')]||'';this[_0x075c('0x1')]=_0x31c6da[_0x075c('0x1')]||'';this['state']=_0x075c('0x2');this[_0x075c('0x3')]=0x0;this[_0x075c('0x4')]=_0x075c('0x2');this[_0x075c('0x5')]='';}module['exports']=Telephone;
\ No newline at end of file
index 3de899e..e4dd08c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4c4e=['name','html'];(function(_0x1668c4,_0xf8c4b2){var _0x5d09fb=function(_0x1054c9){while(--_0x1054c9){_0x1668c4['push'](_0x1668c4['shift']());}};_0x5d09fb(++_0xf8c4b2);}(_0x4c4e,0x152));var _0xe4c4=function(_0x38aa36,_0xe5ed0a){_0x38aa36=_0x38aa36-0x0;var _0x119150=_0x4c4e[_0x38aa36];return _0x119150;};'use strict';function template(_0x55f220){this['id']=_0x55f220['id']||0x0;this['name']=_0x55f220[_0xe4c4('0x0')]||'';this[_0xe4c4('0x1')]=_0x55f220[_0xe4c4('0x1')]||'';}module['exports']=template;
\ No newline at end of file
+var _0x54ef=['exports','name','html'];(function(_0x56aaf8,_0x328de5){var _0x411a14=function(_0x2a2361){while(--_0x2a2361){_0x56aaf8['push'](_0x56aaf8['shift']());}};_0x411a14(++_0x328de5);}(_0x54ef,0x112));var _0xf54e=function(_0x4b78bb,_0x5f41eb){_0x4b78bb=_0x4b78bb-0x0;var _0x10631e=_0x54ef[_0x4b78bb];return _0x10631e;};'use strict';function template(_0x19d4d5){this['id']=_0x19d4d5['id']||0x0;this[_0xf54e('0x0')]=_0x19d4d5[_0xf54e('0x0')]||'';this['html']=_0x19d4d5[_0xf54e('0x1')]||'';}module[_0xf54e('0x2')]=template;
\ No newline at end of file
index 5da194c..3a00150 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x82bd=['voice','status','AllConditions','AnyConditions','Actions','name','channel'];(function(_0x262f42,_0x4a6ca0){var _0x2b0712=function(_0x406fb8){while(--_0x406fb8){_0x262f42['push'](_0x262f42['shift']());}};_0x2b0712(++_0x4a6ca0);}(_0x82bd,0x1d3));var _0xd82b=function(_0x1895b7,_0x21fbc7){_0x1895b7=_0x1895b7-0x0;var _0x1aecdc=_0x82bd[_0x1895b7];return _0x1aecdc;};'use strict';function Trigger(_0x1aae7c){this['id']=_0x1aae7c['id']||0x0;this[_0xd82b('0x0')]=_0x1aae7c[_0xd82b('0x0')]||'';this[_0xd82b('0x1')]=_0x1aae7c['channel']||_0xd82b('0x2');this[_0xd82b('0x3')]=_0x1aae7c['status']||![];this['AllConditions']=_0x1aae7c[_0xd82b('0x4')]||[];this[_0xd82b('0x5')]=_0x1aae7c[_0xd82b('0x5')]||[];this[_0xd82b('0x6')]=_0x1aae7c['Actions']||[];}module['exports']=Trigger;
\ No newline at end of file
+var _0x1395=['channel','voice','status','AllConditions','AnyConditions','Actions','name'];(function(_0x2ccddc,_0x2a56af){var _0x2cd57f=function(_0x2589b7){while(--_0x2589b7){_0x2ccddc['push'](_0x2ccddc['shift']());}};_0x2cd57f(++_0x2a56af);}(_0x1395,0x1b8));var _0x5139=function(_0x166e00,_0x5b6137){_0x166e00=_0x166e00-0x0;var _0x6f4d46=_0x1395[_0x166e00];return _0x6f4d46;};'use strict';function Trigger(_0x5228c1){this['id']=_0x5228c1['id']||0x0;this[_0x5139('0x0')]=_0x5228c1[_0x5139('0x0')]||'';this[_0x5139('0x1')]=_0x5228c1[_0x5139('0x1')]||_0x5139('0x2');this['status']=_0x5228c1[_0x5139('0x3')]||![];this[_0x5139('0x4')]=_0x5228c1[_0x5139('0x4')]||[];this[_0x5139('0x5')]=_0x5228c1['AnyConditions']||[];this[_0x5139('0x6')]=_0x5228c1[_0x5139('0x6')]||[];}module['exports']=Trigger;
\ No newline at end of file
index d6f1a4f..cd611f4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9534=['name','state','stateTime','status','registry','indexOf','split','host','port','domainport','stateRegistry','unknown','registrationtime','address','exports','active'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0x9534,0x17f));var _0x4953=function(_0x2e80b3,_0x6b2568){_0x2e80b3=_0x2e80b3-0x0;var _0x3d19a4=_0x9534[_0x2e80b3];return _0x3d19a4;};'use strict';function Trunk(_0x2f8a17){this['id']=_0x2f8a17['id']||0x0;this[_0x4953('0x0')]=_0x2f8a17[_0x4953('0x0')]||![];this[_0x4953('0x1')]=_0x2f8a17['name']||'';this[_0x4953('0x2')]='unknown';this[_0x4953('0x3')]=0x0;this[_0x4953('0x4')]='unknown';this[_0x4953('0x5')]=_0x2f8a17['registry']&&_0x2f8a17[_0x4953('0x5')][_0x4953('0x6')](':')?_0x2f8a17['registry'][_0x4953('0x7')](':')[0x0]:'';this[_0x4953('0x8')]='';this[_0x4953('0x9')]='';this['domain']='';this[_0x4953('0xa')]='';this['refresh']='';this[_0x4953('0xb')]=_0x4953('0xc');this[_0x4953('0xd')]='';this[_0x4953('0xe')]='';}module[_0x4953('0xf')]=Trunk;
\ No newline at end of file
+var _0xde78=['refresh','registrationtime','address','exports','active','name','state','unknown','stateTime','status','registry','indexOf','split','host','port','domainport'];(function(_0x2680f0,_0x5a1105){var _0x6d3e9b=function(_0x50de45){while(--_0x50de45){_0x2680f0['push'](_0x2680f0['shift']());}};_0x6d3e9b(++_0x5a1105);}(_0xde78,0x64));var _0x8de7=function(_0x1bfe2b,_0x34856e){_0x1bfe2b=_0x1bfe2b-0x0;var _0x1477d4=_0xde78[_0x1bfe2b];return _0x1477d4;};'use strict';function Trunk(_0x5eba09){this['id']=_0x5eba09['id']||0x0;this[_0x8de7('0x0')]=_0x5eba09[_0x8de7('0x0')]||![];this[_0x8de7('0x1')]=_0x5eba09[_0x8de7('0x1')]||'';this[_0x8de7('0x2')]=_0x8de7('0x3');this[_0x8de7('0x4')]=0x0;this[_0x8de7('0x5')]=_0x8de7('0x3');this[_0x8de7('0x6')]=_0x5eba09[_0x8de7('0x6')]&&_0x5eba09['registry'][_0x8de7('0x7')](':')?_0x5eba09['registry'][_0x8de7('0x8')](':')[0x0]:'';this[_0x8de7('0x9')]='';this[_0x8de7('0xa')]='';this['domain']='';this[_0x8de7('0xb')]='';this[_0x8de7('0xc')]='';this['stateRegistry']=_0x8de7('0x3');this[_0x8de7('0xd')]='';this[_0x8de7('0xe')]='';}module[_0x8de7('0xf')]=Trunk;
\ No newline at end of file
index d14acd2..9760550 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x32af=['exten','recordingFormat','none','mandatoryDisposition','exports'];(function(_0x2bb66c,_0x36c6c6){var _0x1e0f98=function(_0x1e3412){while(--_0x1e3412){_0x2bb66c['push'](_0x2bb66c['shift']());}};_0x1e0f98(++_0x36c6c6);}(_0x32af,0xd2));var _0xf32a=function(_0x329ca3,_0x531613){_0x329ca3=_0x329ca3-0x0;var _0x183333=_0x32af[_0x329ca3];return _0x183333;};'use strict';function voiceExtension(_0x57da1f){this['id']=_0x57da1f['id']||0x0;this[_0xf32a('0x0')]=_0x57da1f[_0xf32a('0x0')]||'';this[_0xf32a('0x1')]=_0x57da1f['recordingFormat']||_0xf32a('0x2');this['mandatoryDisposition']=_0x57da1f[_0xf32a('0x3')]||![];}module[_0xf32a('0x4')]=voiceExtension;
\ No newline at end of file
+var _0x3839=['exten','recordingFormat','mandatoryDisposition','exports'];(function(_0x3b594b,_0x5835c3){var _0x1ea5f8=function(_0x191b3e){while(--_0x191b3e){_0x3b594b['push'](_0x3b594b['shift']());}};_0x1ea5f8(++_0x5835c3);}(_0x3839,0x1b4));var _0x9383=function(_0x580ff7,_0x3a2698){_0x580ff7=_0x580ff7-0x0;var _0x50201c=_0x3839[_0x580ff7];return _0x50201c;};'use strict';function voiceExtension(_0xb69360){this['id']=_0xb69360['id']||0x0;this[_0x9383('0x0')]=_0xb69360[_0x9383('0x0')]||'';this[_0x9383('0x1')]=_0xb69360['recordingFormat']||'none';this[_0x9383('0x2')]=_0xb69360['mandatoryDisposition']||![];}module[_0x9383('0x3')]=voiceExtension;
\ No newline at end of file
index c8a0880..0625af3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x68b7=['inbound','waiting','talking','total','sumBillable','unmanaged','abandoned','available','acwTimeout','autopause','sendMessageOneNotActive','message','temp','dialTimezone','dialGlobalInterval','dialActive','dialMethod','progressive','dialLimitChannel','dialLimitQueue','dialPowerLevel','dialPredictiveOptimization','dropRate','dialPredictiveOptimizationPercentage','dialPredictiveInterval','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialQueueOptions','dialQueueTimeout','dialQueueProject','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','Trunk','TrunkBackup','dialPrefix','Interval','dialOrderByScheduledAt','DESC','dialRandomLastDigitCallerIdNumber','dialCutDigit','strategy','queueStatusComplete','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','outboundRejectCallsDay','outboundAnswerAgiCallsDay','outboundNoAnswerCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundNoSuchCallsDay','outboundUnknownCallsDay','outboundBlacklistCallsDay','outboundOriginateFailureCallsDay','outboundDropCallsDayTimeout','outboundReCallsDay','startPredictive','handlePredictive','predictiveIntervalTotalCalls','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalAvgHoldtime','predictiveIntervalPauses','dialPredictiveIntervalMaxThreshold','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','erlangCalls','erlangAbandonmentRate','erlangBusyFactor','dialRecallMeTimeout','dialRecallInQueue','dialAgiAfterHangupClient','mandatoryDisposition','mandatoryDispositionPause','exports','unknown','inuse','unavailable','ringinuse','wav49','rrmemory','roundrobin','name','monitor_format','type'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0x68b7,0x11f));var _0x768b=function(_0x1046c4,_0x416702){_0x1046c4=_0x1046c4-0x0;var _0x33dc91=_0x68b7[_0x1046c4];return _0x33dc91;};'use strict';var statusDesc=[_0x768b('0x0'),'not_inuse',_0x768b('0x1'),'busy','invalid',_0x768b('0x2'),'ringing',_0x768b('0x3'),'onhold'];var monitorFormat={'wav':'wav','wav49':_0x768b('0x4'),'gsm':'gsm'};var strategy={'rrmemory':_0x768b('0x5'),'roundrobin':_0x768b('0x6')};function VoiceQueue(_0x233c29){this['id']=_0x233c29['id']||0x0;this[_0x768b('0x7')]=_0x233c29[_0x768b('0x7')]||'';this[_0x768b('0x8')]=_0x233c29[_0x768b('0x8')]||'';this[_0x768b('0x9')]=_0x233c29[_0x768b('0x9')]||_0x768b('0xa');this[_0x768b('0xb')]=0x0;this[_0x768b('0xc')]=0x0;this[_0x768b('0xd')]=0x0;this['answered']=0x0;this['sumDuration']=0x0;this['sumHoldTime']=0x0;this[_0x768b('0xe')]=0x0;this[_0x768b('0xf')]=0x0;this[_0x768b('0x10')]=0x0;this['loggedIn']=0x0;this[_0x768b('0x11')]=0x0;this['acw']=_0x233c29['acw']||![];this[_0x768b('0x12')]=_0x233c29[_0x768b('0x12')]||0xa;this[_0x768b('0x13')]=_0x233c29[_0x768b('0x13')]||'no';this[_0x768b('0x14')]=!![];this[_0x768b('0x15')]='';this['originated']=0x0;this[_0x768b('0x16')]=0x0;this['dialTimezone']=_0x233c29[_0x768b('0x17')]||null;this[_0x768b('0x18')]=_0x233c29[_0x768b('0x18')]?_0x233c29['dialGlobalInterval']:null;this[_0x768b('0x19')]=_0x233c29['dialActive'];this[_0x768b('0x1a')]=_0x233c29[_0x768b('0x1a')]||_0x768b('0x1b');this[_0x768b('0x1c')]=_0x233c29[_0x768b('0x1c')]||0x0;this[_0x768b('0x1d')]=_0x233c29[_0x768b('0x1d')]||0x0;this[_0x768b('0x1e')]=_0x233c29['dialPowerLevel']||0x1;this[_0x768b('0x1f')]=_0x233c29[_0x768b('0x1f')]||_0x768b('0x20');this[_0x768b('0x21')]=_0x233c29['dialPredictiveOptimizationPercentage']||0.03;this[_0x768b('0x22')]=_0x233c29[_0x768b('0x22')]||0x258;this[_0x768b('0x23')]=_0x233c29[_0x768b('0x23')]||'anonymous';this[_0x768b('0x24')]=_0x233c29['dialOriginateCallerIdNumber']||'anonymous';this[_0x768b('0x25')]=_0x233c29[_0x768b('0x25')]||0x1e;this[_0x768b('0x26')]=_0x233c29[_0x768b('0x26')]||'tTxX';this['dialQueueTimeout']=_0x233c29[_0x768b('0x27')]||0x3;this[_0x768b('0x28')]=_0x233c29['dialQueueProject']||undefined;this[_0x768b('0x29')]=_0x233c29[_0x768b('0x29')]||0x3;this[_0x768b('0x2a')]=_0x233c29['dialCongestionRetryFrequency']||0x96;this[_0x768b('0x2b')]=_0x233c29[_0x768b('0x2b')]||0x3;this[_0x768b('0x2c')]=_0x233c29['dialBusyRetryFrequency']||0x96;this['dialNoAnswerMaxRetry']=_0x233c29[_0x768b('0x2d')]||0x3;this[_0x768b('0x2e')]=_0x233c29[_0x768b('0x2e')]||0x96;this[_0x768b('0x2f')]=_0x233c29[_0x768b('0x2f')]||0x4;this['Trunk']=_0x233c29['Trunk']?_0x233c29[_0x768b('0x30')]:undefined;this[_0x768b('0x31')]=_0x233c29[_0x768b('0x31')]?_0x233c29['TrunkBackup']:undefined;this['dialPrefix']=_0x233c29[_0x768b('0x32')]||undefined;this['Interval']=_0x233c29[_0x768b('0x33')]?_0x233c29['Interval']:undefined;this[_0x768b('0x34')]=_0x233c29[_0x768b('0x34')]||_0x768b('0x35');this[_0x768b('0x36')]=_0x233c29[_0x768b('0x36')]||undefined;this[_0x768b('0x37')]=_0x233c29[_0x768b('0x37')]||undefined;this[_0x768b('0x38')]=strategy[_0x233c29[_0x768b('0x38')]]||_0x768b('0x5');this[_0x768b('0x39')]=!![];this[_0x768b('0x3a')]=_0x233c29[_0x768b('0x3a')]||![];this['dialAMDInitialSilence']=_0x233c29[_0x768b('0x3b')];this[_0x768b('0x3c')]=_0x233c29['dialAMDGreeting'];this[_0x768b('0x3d')]=_0x233c29['dialAMDAfterGreetingSilence'];this[_0x768b('0x3e')]=_0x233c29[_0x768b('0x3e')];this[_0x768b('0x3f')]=_0x233c29[_0x768b('0x3f')];this['dialAMDBetweenWordsSilence']=_0x233c29[_0x768b('0x40')];this[_0x768b('0x41')]=_0x233c29[_0x768b('0x41')];this[_0x768b('0x42')]=_0x233c29[_0x768b('0x42')];this[_0x768b('0x43')]=_0x233c29[_0x768b('0x43')];this[_0x768b('0x44')]=0x0;this['pTalking']=0x0;this['timeout']=_0x233c29['timeout'];this['outboundAnswerCallsDay']=0x0;this[_0x768b('0x45')]=0x0;this[_0x768b('0x46')]=0x0;this[_0x768b('0x47')]=0x0;this[_0x768b('0x48')]=0x0;this[_0x768b('0x49')]=0x0;this[_0x768b('0x4a')]=0x0;this[_0x768b('0x4b')]=0x0;this[_0x768b('0x4c')]=0x0;this['outboundDropCallsDayCallersExit']=0x0;this[_0x768b('0x4d')]=0x0;this['outboundDropCallsDayACS']=0x0;this[_0x768b('0x4e')]=0x0;this['startProgressive']=undefined;this[_0x768b('0x4f')]=undefined;this[_0x768b('0x50')]=undefined;this['predictiveIntervalMultiplicativeFactor']=1.05;this[_0x768b('0x51')]=0x0;this['predictiveIntervalAnsweredCalls']=0x0;this[_0x768b('0x52')]=0x0;this[_0x768b('0x53')]=0x0;this[_0x768b('0x54')]=0x0;this['predictiveIntervalAvgTalktime']=0x0;this[_0x768b('0x55')]=0x0;this['predictiveIntervalAvailable']=0x0;this['predictiveIntervalMaxThreshold']=_0x233c29[_0x768b('0x56')]||0x14;this['predictiveIntervalMinThreshold']=_0x233c29['dialPredictiveIntervalMaxThreshold']||0xa;this[_0x768b('0x57')]=0x0;this[_0x768b('0x58')]=0x0;this[_0x768b('0x59')]=0x1;this[_0x768b('0x5a')]=0x0;this['erlangCallToSecond']=0x0;this[_0x768b('0x5b')]=0x0;this[_0x768b('0x5c')]=0x0;this[_0x768b('0x5d')]=_0x233c29[_0x768b('0x5d')]||0x1e;this[_0x768b('0x5e')]=_0x233c29[_0x768b('0x5e')]||![];this['dialQueueProject2']=_0x233c29['dialQueueProject2']||undefined;this['dialAgiAfterHangupClient']=_0x233c29[_0x768b('0x5f')]||![];this['dialAgiAfterHangupAgent']=_0x233c29['dialAgiAfterHangupAgent']||![];this[_0x768b('0x8')]=monitorFormat[_0x233c29[_0x768b('0x8')]]?monitorFormat[_0x233c29[_0x768b('0x8')]]:undefined;this[_0x768b('0x60')]=_0x233c29[_0x768b('0x60')]||![];this[_0x768b('0x61')]=_0x233c29[_0x768b('0x61')]?_0x233c29[_0x768b('0x61')]:undefined;}module[_0x768b('0x62')]=VoiceQueue;
\ No newline at end of file
+var _0x9d95=['predictiveIntervalAnsweredCalls','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalAvgTalktime','predictiveIntervalPauses','predictiveIntervalAvailable','predictiveIntervalMaxThreshold','dialPredictiveIntervalMaxThreshold','predictiveIntervalMinThreshold','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','erlangCalls','erlangCallToSecond','erlangBusyFactor','dialRecallMeTimeout','dialRecallInQueue','dialQueueProject2','dialAgiAfterHangupClient','dialAgiAfterHangupAgent','mandatoryDisposition','mandatoryDispositionPause','exports','unknown','not_inuse','inuse','invalid','unavailable','ringinuse','onhold','wav','wav49','gsm','rrmemory','roundrobin','name','monitor_format','type','waiting','talking','total','sumDuration','sumHoldTime','sumBillable','unmanaged','loggedIn','available','acw','acwTimeout','autopause','sendMessageOneNotActive','originated','dialTimezone','dialGlobalInterval','dialActive','dialMethod','dialLimitChannel','dialLimitQueue','dialPowerLevel','dialPredictiveOptimization','dialPredictiveOptimizationPercentage','dialPredictiveInterval','dialOriginateCallerIdName','anonymous','dialOriginateCallerIdNumber','dialOriginateTimeout','dialQueueOptions','tTxX','dialQueueTimeout','dialQueueProject','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','Trunk','TrunkBackup','dialPrefix','Interval','dialOrderByScheduledAt','DESC','dialRandomLastDigitCallerIdNumber','dialCutDigit','strategy','queueStatusComplete','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','outboundRejectCallsDay','pTalking','timeout','outboundAnswerCallsDay','outboundAnswerAgiCallsDay','outboundBusyCallsDay','outboundNoSuchCallsDay','outboundUnknownCallsDay','outboundBlacklistCallsDay','outboundDropCallsDayTimeout','outboundDropCallsDayACS','outboundReCallsDay','startProgressive','startPredictive','predictiveIntervalTotalCalls'];(function(_0x51abf3,_0x85b36b){var _0x19142b=function(_0x4848b7){while(--_0x4848b7){_0x51abf3['push'](_0x51abf3['shift']());}};_0x19142b(++_0x85b36b);}(_0x9d95,0xf1));var _0x59d9=function(_0x43e297,_0x57c429){_0x43e297=_0x43e297-0x0;var _0x209690=_0x9d95[_0x43e297];return _0x209690;};'use strict';var statusDesc=[_0x59d9('0x0'),_0x59d9('0x1'),_0x59d9('0x2'),'busy',_0x59d9('0x3'),_0x59d9('0x4'),'ringing',_0x59d9('0x5'),_0x59d9('0x6')];var monitorFormat={'wav':_0x59d9('0x7'),'wav49':_0x59d9('0x8'),'gsm':_0x59d9('0x9')};var strategy={'rrmemory':_0x59d9('0xa'),'roundrobin':_0x59d9('0xb')};function VoiceQueue(_0x10199a){this['id']=_0x10199a['id']||0x0;this['name']=_0x10199a[_0x59d9('0xc')]||'';this[_0x59d9('0xd')]=_0x10199a[_0x59d9('0xd')]||'';this[_0x59d9('0xe')]=_0x10199a['type']||'inbound';this[_0x59d9('0xf')]=0x0;this[_0x59d9('0x10')]=0x0;this[_0x59d9('0x11')]=0x0;this['answered']=0x0;this[_0x59d9('0x12')]=0x0;this[_0x59d9('0x13')]=0x0;this[_0x59d9('0x14')]=0x0;this[_0x59d9('0x15')]=0x0;this['abandoned']=0x0;this[_0x59d9('0x16')]=0x0;this[_0x59d9('0x17')]=0x0;this[_0x59d9('0x18')]=_0x10199a[_0x59d9('0x18')]||![];this[_0x59d9('0x19')]=_0x10199a[_0x59d9('0x19')]||0xa;this[_0x59d9('0x1a')]=_0x10199a[_0x59d9('0x1a')]||'no';this[_0x59d9('0x1b')]=!![];this['message']='';this[_0x59d9('0x1c')]=0x0;this['temp']=0x0;this[_0x59d9('0x1d')]=_0x10199a[_0x59d9('0x1d')]||null;this[_0x59d9('0x1e')]=_0x10199a['dialGlobalInterval']?_0x10199a[_0x59d9('0x1e')]:null;this[_0x59d9('0x1f')]=_0x10199a[_0x59d9('0x1f')];this[_0x59d9('0x20')]=_0x10199a[_0x59d9('0x20')]||'progressive';this[_0x59d9('0x21')]=_0x10199a[_0x59d9('0x21')]||0x0;this[_0x59d9('0x22')]=_0x10199a[_0x59d9('0x22')]||0x0;this['dialPowerLevel']=_0x10199a[_0x59d9('0x23')]||0x1;this[_0x59d9('0x24')]=_0x10199a[_0x59d9('0x24')]||'dropRate';this[_0x59d9('0x25')]=_0x10199a[_0x59d9('0x25')]||0.03;this['dialPredictiveInterval']=_0x10199a[_0x59d9('0x26')]||0x258;this[_0x59d9('0x27')]=_0x10199a[_0x59d9('0x27')]||_0x59d9('0x28');this[_0x59d9('0x29')]=_0x10199a[_0x59d9('0x29')]||_0x59d9('0x28');this[_0x59d9('0x2a')]=_0x10199a[_0x59d9('0x2a')]||0x1e;this[_0x59d9('0x2b')]=_0x10199a[_0x59d9('0x2b')]||_0x59d9('0x2c');this['dialQueueTimeout']=_0x10199a[_0x59d9('0x2d')]||0x3;this['dialQueueProject']=_0x10199a[_0x59d9('0x2e')]||undefined;this[_0x59d9('0x2f')]=_0x10199a[_0x59d9('0x2f')]||0x3;this['dialCongestionRetryFrequency']=_0x10199a[_0x59d9('0x30')]||0x96;this['dialBusyMaxRetry']=_0x10199a[_0x59d9('0x31')]||0x3;this[_0x59d9('0x32')]=_0x10199a['dialBusyRetryFrequency']||0x96;this[_0x59d9('0x33')]=_0x10199a[_0x59d9('0x33')]||0x3;this[_0x59d9('0x34')]=_0x10199a[_0x59d9('0x34')]||0x96;this[_0x59d9('0x35')]=_0x10199a[_0x59d9('0x35')]||0x4;this[_0x59d9('0x36')]=_0x10199a[_0x59d9('0x36')]?_0x10199a[_0x59d9('0x36')]:undefined;this[_0x59d9('0x37')]=_0x10199a[_0x59d9('0x37')]?_0x10199a['TrunkBackup']:undefined;this[_0x59d9('0x38')]=_0x10199a[_0x59d9('0x38')]||undefined;this[_0x59d9('0x39')]=_0x10199a['Interval']?_0x10199a[_0x59d9('0x39')]:undefined;this[_0x59d9('0x3a')]=_0x10199a[_0x59d9('0x3a')]||_0x59d9('0x3b');this[_0x59d9('0x3c')]=_0x10199a[_0x59d9('0x3c')]||undefined;this['dialCutDigit']=_0x10199a[_0x59d9('0x3d')]||undefined;this[_0x59d9('0x3e')]=strategy[_0x10199a[_0x59d9('0x3e')]]||_0x59d9('0xa');this[_0x59d9('0x3f')]=!![];this[_0x59d9('0x40')]=_0x10199a[_0x59d9('0x40')]||![];this[_0x59d9('0x41')]=_0x10199a[_0x59d9('0x41')];this[_0x59d9('0x42')]=_0x10199a[_0x59d9('0x42')];this[_0x59d9('0x43')]=_0x10199a[_0x59d9('0x43')];this[_0x59d9('0x44')]=_0x10199a['dialAMDTotalAnalysisTime'];this[_0x59d9('0x45')]=_0x10199a[_0x59d9('0x45')];this['dialAMDBetweenWordsSilence']=_0x10199a[_0x59d9('0x46')];this[_0x59d9('0x47')]=_0x10199a[_0x59d9('0x47')];this[_0x59d9('0x48')]=_0x10199a[_0x59d9('0x48')];this[_0x59d9('0x49')]=_0x10199a[_0x59d9('0x49')];this[_0x59d9('0x4a')]=0x0;this[_0x59d9('0x4b')]=0x0;this[_0x59d9('0x4c')]=_0x10199a[_0x59d9('0x4c')];this[_0x59d9('0x4d')]=0x0;this[_0x59d9('0x4e')]=0x0;this['outboundNoAnswerCallsDay']=0x0;this[_0x59d9('0x4f')]=0x0;this['outboundCongestionCallsDay']=0x0;this[_0x59d9('0x50')]=0x0;this[_0x59d9('0x51')]=0x0;this[_0x59d9('0x52')]=0x0;this['outboundOriginateFailureCallsDay']=0x0;this['outboundDropCallsDayCallersExit']=0x0;this[_0x59d9('0x53')]=0x0;this[_0x59d9('0x54')]=0x0;this[_0x59d9('0x55')]=0x0;this[_0x59d9('0x56')]=undefined;this[_0x59d9('0x57')]=undefined;this['handlePredictive']=undefined;this['predictiveIntervalMultiplicativeFactor']=1.05;this[_0x59d9('0x58')]=0x0;this[_0x59d9('0x59')]=0x0;this[_0x59d9('0x5a')]=0x0;this['predictiveIntervalDroppedCallsTimeout']=0x0;this['predictiveIntervalAvgHoldtime']=0x0;this[_0x59d9('0x5b')]=0x0;this[_0x59d9('0x5c')]=0x0;this[_0x59d9('0x5d')]=0x0;this[_0x59d9('0x5e')]=_0x10199a[_0x59d9('0x5f')]||0x14;this[_0x59d9('0x60')]=_0x10199a[_0x59d9('0x5f')]||0xa;this['predictiveIntervalErlangCalls']=0x0;this[_0x59d9('0x61')]=0x0;this[_0x59d9('0x62')]=0x1;this[_0x59d9('0x63')]=0x0;this[_0x59d9('0x64')]=0x0;this['erlangAbandonmentRate']=0x0;this[_0x59d9('0x65')]=0x0;this[_0x59d9('0x66')]=_0x10199a[_0x59d9('0x66')]||0x1e;this[_0x59d9('0x67')]=_0x10199a['dialRecallInQueue']||![];this[_0x59d9('0x68')]=_0x10199a[_0x59d9('0x68')]||undefined;this[_0x59d9('0x69')]=_0x10199a[_0x59d9('0x69')]||![];this[_0x59d9('0x6a')]=_0x10199a[_0x59d9('0x6a')]||![];this[_0x59d9('0xd')]=monitorFormat[_0x10199a[_0x59d9('0xd')]]?monitorFormat[_0x10199a[_0x59d9('0xd')]]:undefined;this[_0x59d9('0x6b')]=_0x10199a['mandatoryDisposition']||![];this['mandatoryDispositionPause']=_0x10199a[_0x59d9('0x6c')]?_0x10199a[_0x59d9('0x6c')]:undefined;}module[_0x59d9('0x6d')]=VoiceQueue;
\ No newline at end of file
index 43b1b22..9be3591 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0d05=['username','accessKey','remoteUri','serverUrl','Configurations','exports','name'];(function(_0x1351d3,_0x1f679d){var _0x28d14d=function(_0x4c5482){while(--_0x4c5482){_0x1351d3['push'](_0x1351d3['shift']());}};_0x28d14d(++_0x1f679d);}(_0x0d05,0xed));var _0x50d0=function(_0x1a1222,_0x11619d){_0x1a1222=_0x1a1222-0x0;var _0x5267c8=_0x0d05[_0x1a1222];return _0x5267c8;};'use strict';function VtigerAccount(_0x3bbc11){this['id']=_0x3bbc11['id']||0x0;this[_0x50d0('0x0')]=_0x3bbc11[_0x50d0('0x0')]||'';this[_0x50d0('0x1')]=_0x3bbc11[_0x50d0('0x1')]||'';this['accessKey']=_0x3bbc11[_0x50d0('0x2')]||'';this['remoteUri']=_0x3bbc11[_0x50d0('0x3')]||'';this[_0x50d0('0x4')]=_0x3bbc11[_0x50d0('0x4')]||'';this[_0x50d0('0x5')]=_0x3bbc11[_0x50d0('0x5')]||{};}module[_0x50d0('0x6')]=VtigerAccount;
\ No newline at end of file
+var _0xd6b2=['name','username','accessKey','remoteUri','serverUrl','Configurations','exports'];(function(_0x5ef9eb,_0x789ad8){var _0x2e103e=function(_0x3befff){while(--_0x3befff){_0x5ef9eb['push'](_0x5ef9eb['shift']());}};_0x2e103e(++_0x789ad8);}(_0xd6b2,0x18f));var _0x2d6b=function(_0x94085c,_0x3941fa){_0x94085c=_0x94085c-0x0;var _0xafd4b0=_0xd6b2[_0x94085c];return _0xafd4b0;};'use strict';function VtigerAccount(_0x486ee8){this['id']=_0x486ee8['id']||0x0;this[_0x2d6b('0x0')]=_0x486ee8['name']||'';this[_0x2d6b('0x1')]=_0x486ee8['username']||'';this[_0x2d6b('0x2')]=_0x486ee8[_0x2d6b('0x2')]||'';this[_0x2d6b('0x3')]=_0x486ee8[_0x2d6b('0x3')]||'';this[_0x2d6b('0x4')]=_0x486ee8[_0x2d6b('0x4')]||'';this[_0x2d6b('0x5')]=_0x486ee8[_0x2d6b('0x5')]||{};}module[_0x2d6b('0x6')]=VtigerAccount;
\ No newline at end of file
index 4d96dae..99b8bbc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc405=['username','password','token','authType','type','integrationTab','serverUrl','Configurations','exports','name'];(function(_0x24e0c9,_0x284109){var _0x4448f0=function(_0x576980){while(--_0x576980){_0x24e0c9['push'](_0x24e0c9['shift']());}};_0x4448f0(++_0x284109);}(_0xc405,0x153));var _0x5c40=function(_0x5b1aed,_0x322c17){_0x5b1aed=_0x5b1aed-0x0;var _0x26add8=_0xc405[_0x5b1aed];return _0x26add8;};'use strict';function ZendeskAccount(_0x4b3f0f){this['id']=_0x4b3f0f['id']||0x0;this[_0x5c40('0x0')]=_0x4b3f0f[_0x5c40('0x0')]||'';this['username']=_0x4b3f0f[_0x5c40('0x1')]||'';this[_0x5c40('0x2')]=_0x4b3f0f['password']||'';this[_0x5c40('0x3')]=_0x4b3f0f[_0x5c40('0x3')]||'';this['remoteUri']=_0x4b3f0f['remoteUri']||'';this[_0x5c40('0x4')]=_0x4b3f0f[_0x5c40('0x4')]||'';this[_0x5c40('0x5')]=_0x4b3f0f['type']||_0x5c40('0x6');this[_0x5c40('0x7')]=_0x4b3f0f['serverUrl']||'';this[_0x5c40('0x8')]=_0x4b3f0f[_0x5c40('0x8')]||{};}module[_0x5c40('0x9')]=ZendeskAccount;
\ No newline at end of file
+var _0x70c7=['exports','name','username','password','token','remoteUri','authType','type','integrationTab','serverUrl','Configurations'];(function(_0x19da23,_0x56a072){var _0xf5e62b=function(_0x4c469c){while(--_0x4c469c){_0x19da23['push'](_0x19da23['shift']());}};_0xf5e62b(++_0x56a072);}(_0x70c7,0x1cf));var _0x770c=function(_0x3d9785,_0x166bcd){_0x3d9785=_0x3d9785-0x0;var _0x1e47c2=_0x70c7[_0x3d9785];return _0x1e47c2;};'use strict';function ZendeskAccount(_0x59738b){this['id']=_0x59738b['id']||0x0;this[_0x770c('0x0')]=_0x59738b[_0x770c('0x0')]||'';this[_0x770c('0x1')]=_0x59738b[_0x770c('0x1')]||'';this['password']=_0x59738b[_0x770c('0x2')]||'';this[_0x770c('0x3')]=_0x59738b[_0x770c('0x3')]||'';this[_0x770c('0x4')]=_0x59738b[_0x770c('0x4')]||'';this['authType']=_0x59738b[_0x770c('0x5')]||'';this[_0x770c('0x6')]=_0x59738b['type']||_0x770c('0x7');this['serverUrl']=_0x59738b[_0x770c('0x8')]||'';this[_0x770c('0x9')]=_0x59738b[_0x770c('0x9')]||{};}module[_0x770c('0xa')]=ZendeskAccount;
\ No newline at end of file
index b0c82f3..3bcca77 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdbf5=['name','authToken','host','Configurations','serverUrl','exports'];(function(_0x4e0dc9,_0x2ec350){var _0x52d218=function(_0x1df0d4){while(--_0x1df0d4){_0x4e0dc9['push'](_0x4e0dc9['shift']());}};_0x52d218(++_0x2ec350);}(_0xdbf5,0x18c));var _0x5dbf=function(_0x4b427e,_0x44e9ba){_0x4b427e=_0x4b427e-0x0;var _0x3a7142=_0xdbf5[_0x4b427e];return _0x3a7142;};'use strict';function ZohoAccount(_0xc2af80){this['id']=_0xc2af80['id']||0x0;this[_0x5dbf('0x0')]=_0xc2af80['name']||'';this['authToken']=_0xc2af80[_0x5dbf('0x1')]||'';this[_0x5dbf('0x2')]=_0xc2af80[_0x5dbf('0x2')]||'';this[_0x5dbf('0x3')]=_0xc2af80[_0x5dbf('0x3')]||{};this[_0x5dbf('0x4')]=_0xc2af80[_0x5dbf('0x4')]||'';}module[_0x5dbf('0x5')]=ZohoAccount;
\ No newline at end of file
+var _0x7c09=['host','Configurations','serverUrl','name','authToken'];(function(_0x4fa60b,_0x4040bf){var _0xe5477e=function(_0x154662){while(--_0x154662){_0x4fa60b['push'](_0x4fa60b['shift']());}};_0xe5477e(++_0x4040bf);}(_0x7c09,0x102));var _0x97c0=function(_0x553af1,_0x524237){_0x553af1=_0x553af1-0x0;var _0x166843=_0x7c09[_0x553af1];return _0x166843;};'use strict';function ZohoAccount(_0x579a22){this['id']=_0x579a22['id']||0x0;this[_0x97c0('0x0')]=_0x579a22[_0x97c0('0x0')]||'';this['authToken']=_0x579a22[_0x97c0('0x1')]||'';this[_0x97c0('0x2')]=_0x579a22[_0x97c0('0x2')]||'';this[_0x97c0('0x3')]=_0x579a22[_0x97c0('0x3')]||{};this[_0x97c0('0x4')]=_0x579a22[_0x97c0('0x4')]||'';}module['exports']=ZohoAccount;
\ No newline at end of file
index 0ab34d0..34d0f0e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x24db=['UserId','VoiceQueueId','originatecalleridnum','getCaller','\x22%s\x22\x20<%s>','calleridname','number','exports','util','lodash','moment','isNil','string','name','type','campaigntype','queue','dialAnswer','membername','Agent','channelAgent','format','SIP/%s','Contact','phone','lastName','active','calleridnum','scheduledat','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','callback','callbackuniqueid','callbackat','ContactId','ListId'];(function(_0x447931,_0xb1481a){var _0x1880b9=function(_0xb64953){while(--_0xb64953){_0x447931['push'](_0x447931['shift']());}};_0x1880b9(++_0xb1481a);}(_0x24db,0x112));var _0xb24d=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x24db[_0x3dd15e];return _0x231fd0;};'use strict';var util=require(_0xb24d('0x0'));var _=require(_0xb24d('0x1'));var moment=require(_0xb24d('0x2'));function checkNameSurname(_0x589a0b,_0xcd5d46,_0x1bd14c){var _0x2b2a05='';if(!_[_0xb24d('0x3')](_0xcd5d46)&&_0xb24d('0x4')===typeof _0xcd5d46){_0x2b2a05+=_0xcd5d46;}if(!_['isNil'](_0x1bd14c)&&_0xb24d('0x4')===typeof _0x1bd14c){_0x2b2a05+='\x20'+_0x1bd14c;}if(_0x2b2a05!==''){return _0x2b2a05;}return _0x589a0b;}function Action(_0x8b2f30,_0x1bf477,_0x1c5955,_0x20de26,_0x2671ab){this['uniqueid']=_0x1c5955||undefined;this['idContact']=_0x8b2f30['id'];this['queue']=_0x1bf477[_0xb24d('0x5')];this[_0xb24d('0x6')]=_0x1bf477['type'];this[_0xb24d('0x7')]=_0xb24d('0x8');this[_0xb24d('0x9')]=![];this[_0xb24d('0xa')]=_['isNil'](_0x8b2f30[_0xb24d('0xb')])?undefined:_0x8b2f30[_0xb24d('0xb')][_0xb24d('0x5')];this[_0xb24d('0xc')]=this[_0xb24d('0xa')]?util[_0xb24d('0xd')](_0xb24d('0xe'),this[_0xb24d('0xa')]):_0x20de26||undefined;this['calleridname']=checkNameSurname(_0x8b2f30[_0xb24d('0xf')][_0xb24d('0x10')],_0x8b2f30['Contact']['firstName'],_0x8b2f30[_0xb24d('0xf')][_0xb24d('0x11')]);this['active']=_0x8b2f30[_0xb24d('0x12')]||![];this[_0xb24d('0x13')]=_0x8b2f30[_0xb24d('0xf')][_0xb24d('0x10')];this['scheduledat']=_0x8b2f30[_0xb24d('0x14')];this[_0xb24d('0x15')]=_0x8b2f30['countbusyretry']||0x0;this[_0xb24d('0x16')]=_0x8b2f30[_0xb24d('0x16')]||0x0;this[_0xb24d('0x17')]=_0x8b2f30['countnoanswerretry']||0x0;this[_0xb24d('0x18')]=(_0x8b2f30[_0xb24d('0x15')]||0x0)+(_0x8b2f30['countcongestionretry']||0x0)+(_0x8b2f30['countnoanswerretry']||0x0);this[_0xb24d('0x19')]=_0x8b2f30['callback'];this['callbackuniqueid']=_0x8b2f30[_0xb24d('0x1a')];this['callbackat']=_0x8b2f30[_0xb24d('0x1b')];this['recallme']=_0x8b2f30['recallme'];this[_0xb24d('0x1c')]=_0x8b2f30[_0xb24d('0x1c')];this[_0xb24d('0x1d')]=_0x8b2f30[_0xb24d('0x1d')];this[_0xb24d('0x1e')]=_[_0xb24d('0x3')](_0x8b2f30[_0xb24d('0xb')])?_0x8b2f30[_0xb24d('0x1e')]:_0x8b2f30[_0xb24d('0xb')]['id'];this[_0xb24d('0x1f')]=_0x8b2f30['VoiceQueueId'];this[_0xb24d('0x20')]='';this['originatecalleridname']='';}Action['prototype'][_0xb24d('0x21')]=function(){return util[_0xb24d('0xd')](_0xb24d('0x22'),this[_0xb24d('0x23')],this[_0xb24d('0x24')]);};module[_0xb24d('0x25')]=Action;
\ No newline at end of file
+var _0x94e8=['number','exports','util','lodash','moment','isNil','uniqueid','queue','name','type','campaigntype','dialAnswer','membername','Agent','channelAgent','SIP/%s','calleridname','Contact','phone','firstName','lastName','active','calleridnum','scheduledat','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','originatecalleridname','prototype','getCaller','\x22%s\x22\x20<%s>'];(function(_0x3338b2,_0x1db3c9){var _0x532ae7=function(_0x328134){while(--_0x328134){_0x3338b2['push'](_0x3338b2['shift']());}};_0x532ae7(++_0x1db3c9);}(_0x94e8,0x7a));var _0x894e=function(_0x5c12f2,_0x5de043){_0x5c12f2=_0x5c12f2-0x0;var _0x5e8344=_0x94e8[_0x5c12f2];return _0x5e8344;};'use strict';var util=require(_0x894e('0x0'));var _=require(_0x894e('0x1'));var moment=require(_0x894e('0x2'));function checkNameSurname(_0x1aa924,_0x40129f,_0x1568c5){var _0x22c3fc='';if(!_[_0x894e('0x3')](_0x40129f)&&'string'===typeof _0x40129f){_0x22c3fc+=_0x40129f;}if(!_[_0x894e('0x3')](_0x1568c5)&&'string'===typeof _0x1568c5){_0x22c3fc+='\x20'+_0x1568c5;}if(_0x22c3fc!==''){return _0x22c3fc;}return _0x1aa924;}function Action(_0x3a4167,_0x5d2c54,_0x227f81,_0x74f4b3,_0x44f23c){this[_0x894e('0x4')]=_0x227f81||undefined;this['idContact']=_0x3a4167['id'];this[_0x894e('0x5')]=_0x5d2c54[_0x894e('0x6')];this[_0x894e('0x7')]=_0x5d2c54[_0x894e('0x7')];this[_0x894e('0x8')]=_0x894e('0x5');this[_0x894e('0x9')]=![];this[_0x894e('0xa')]=_[_0x894e('0x3')](_0x3a4167['Agent'])?undefined:_0x3a4167[_0x894e('0xb')][_0x894e('0x6')];this[_0x894e('0xc')]=this[_0x894e('0xa')]?util['format'](_0x894e('0xd'),this[_0x894e('0xa')]):_0x74f4b3||undefined;this[_0x894e('0xe')]=checkNameSurname(_0x3a4167[_0x894e('0xf')][_0x894e('0x10')],_0x3a4167[_0x894e('0xf')][_0x894e('0x11')],_0x3a4167['Contact'][_0x894e('0x12')]);this[_0x894e('0x13')]=_0x3a4167[_0x894e('0x13')]||![];this[_0x894e('0x14')]=_0x3a4167['Contact'][_0x894e('0x10')];this[_0x894e('0x15')]=_0x3a4167[_0x894e('0x15')];this[_0x894e('0x16')]=_0x3a4167['countbusyretry']||0x0;this[_0x894e('0x17')]=_0x3a4167[_0x894e('0x17')]||0x0;this['countnoanswerretry']=_0x3a4167[_0x894e('0x18')]||0x0;this[_0x894e('0x19')]=(_0x3a4167[_0x894e('0x16')]||0x0)+(_0x3a4167[_0x894e('0x17')]||0x0)+(_0x3a4167['countnoanswerretry']||0x0);this['callback']=_0x3a4167[_0x894e('0x1a')];this['callbackuniqueid']=_0x3a4167[_0x894e('0x1b')];this[_0x894e('0x1c')]=_0x3a4167[_0x894e('0x1c')];this[_0x894e('0x1d')]=_0x3a4167['recallme'];this[_0x894e('0x1e')]=_0x3a4167[_0x894e('0x1e')];this[_0x894e('0x1f')]=_0x3a4167[_0x894e('0x1f')];this[_0x894e('0x20')]=_[_0x894e('0x3')](_0x3a4167['Agent'])?_0x3a4167[_0x894e('0x20')]:_0x3a4167[_0x894e('0xb')]['id'];this[_0x894e('0x21')]=_0x3a4167[_0x894e('0x21')];this['originatecalleridnum']='';this[_0x894e('0x22')]='';}Action[_0x894e('0x23')][_0x894e('0x24')]=function(){return util['format'](_0x894e('0x25'),this[_0x894e('0xe')],this[_0x894e('0x26')]);};module[_0x894e('0x27')]=Action;
\ No newline at end of file
index 8876ce5..4f816a9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x068f=['CONGESTION','countcongestionretry','Congestion','dialCongestionMaxRetry','[callProgressDetectingCustomer][logCongestion]','AgentReject','[syncHangupRequest][logAgentReject]','unlockContact','idContact','disableContact','[default]','[Dialer][decrementTalkink][no\x20Hangup][Preview]','cause-txt','[callProgressDetectingCustomer][logUnknown]','[callProgressDetectingCustomer][logUnknownGlobal]','[callProgressDetectingCustomer]','[originated][decrement][callProgressDetectingCustomer]','destlinkedid','callProgressDetectingAgent','isUndefined','object','reason','NoSuchNumber','createAgentHistory','[callProgressDetectingAgent][logNoSuch]','[callProgressDetectingAgent][logNoAnswer]','logAgent','[callProgressDetectingAgent][logCongestion]','[callProgressDetectingAgent][logAnswerAGI]','[callProgressDetectingAgent]','[originated][decrement][callProgressDetectingAgent]','checkInBlack','Contact','isEmpty','execCall','[Preview][execCall][success]','custom:agentcalled','called','Calling','Call\x20failed','logBlacklist','[Blacklist][error]','Contact\x20in\x20black\x20List','active','SIP/%s','unmonitored','run','execRun','unlock','getContactPreview','recallme','validateContact','isValid','Call\x20unsuccessful','[Preview][getContactPreview]','Agent','[Preview][validateContact][Empty\x20Contact]','Empty\x20Contact','[Preview][validateContact][Empty\x20Campaign]','Empty\x20Campaign','[Preview][validateContact][Trunk\x20not\x20work]','campaign\x20Name:\x20','\x20Trunk\x20is\x20not\x20active','\x20Trunk\x20Backup\x20is\x20not\x20active','[Preview][validateContact][Campaign\x20Active]','\x20Not\x20Active','Is\x20Valid','phone','substring','dialCutDigit','getCallerId','dialRandomLastDigitCallerIdNumber','getCallerIdRandom','originatecalleridname','extractCalleridName','extractCalleridNumber','addVariables','merge','toLowerVariables','variablesAction','[originated][increment]','OriginateError','[originateFailure][logOriginateFailure]','channel','actionid','lookAgent','logLookAgent','custom:agentringnoanswer','rejected','syncHangup','cause','statedesc','dialQueueProject','channelstate','transfer','[syncHangup][talking][transfer]','dialstatus','addVariable','variables','variable','keys','value','error','[syncVarSet][Preview]','inspect','transfertargetlinkedid','transfererlinkedid','exports','util','lodash','bluebird','md5','ioredis','../../../config/environment','../../../config/logger','../ami','./rpcDb','./action','./util/util','redis','defaults','localhost','socket.io-emitter','prototype','enqueue','tail','finally','sequence','campaignsPreview','voiceQueues','trunks','actions','agents','clockClearZombieChannels','originateresponse','syncOriginateResponse','bind','hanguprequest','syncHangupRequest','dialend','syncDialEnd','newexten','syncNewExten','varset','syncVarSet','syncAttendedTransfer','blindtransfer','syncBlindTransfer','emit','type','outbound','strategy','available','loggedIn','pTalking','sumBillable','sumDuration','sumHoldTime','talking','total','unmanaged','abandoned','waiting','loggedInDb','dialActive','dialMethod','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalPauses','predictiveIntervalAvailable','predictiveIntervalTotalCalls','message','originated','erlangCalls','erlangAbandonmentRate','erlangBusyFactor','startPredictive','startProgressive','Trunk','name','callerid','Interval','stringify','format','voice:queue:%s','voice_queue:save','sendMessageOneNotActive','paused','logger','[CampaignPreview]\x20Campaign\x20Queue:\x20','\x20is\x20not\x20active','IS_DISACTIVED','\x20is\x20disactive','syncCampaigns','hasOwnProperty','preview','booked','clearZombieChannels','setMessage','recallMe','isNil','info','[clearZombieChannels][talking]','Queue','queue','originated:\x20','pTalking:\x20','dialAnswer','pick','UserId','VoiceQueueId','ListId','Action','status','catch','No\x20such\x20channel','updateOriginated','[clearZombieChannel]','loggerError','[Dialer][checkChannel][pTalking][Preview]','size','getContactRecallMe','agentReadyId','length','getDiff','dialRecallMeTimeout','then','logger2','[RecallMe]','starttime','YYYY-MM-DD\x20HH:mm:ss','logCustomer','RecallInQueue','dialRecallInQueue','rescheduleContactInQueue','createCustomerHistory','[HistoryDialRecallInQueue][historyCatch]','[HistoryRecallClose]','[getContactRecallMe]','AGENTS_NOT_LOGGED','isActive','isTrunkReachable','TrunkBackup','ACTIVE','callProgressDetectingCustomer','countglobal','totalGlobal','[callProgressDetectingCustomer][logNoSuch]','dialGlobalMaxRetry','cloneAction','Global','createCustomerFinal','[callProgressDetectingCustomer][logNoSuchGlobal]','linkedid','ANSWER','responsetime','answertime','[syncHangup][talking][increment]','uniqueid','\x20Queue','custom:agentconnect','buildObj','connect','custom:agentConnectPreview','custom:agentcomplete','complete','answered','decrementTalkink','[16]','Answer','[callProgressDetectingCustomer][logAnswer]','[callProgressDetectingCustomer][logAnswerGlobal]','crateCustomerReportQueue','talktime','[syncHangup][talking][decrement]','BUSY','countbusyretry','Busy','[callProgressDetectingCustomer][logBusy]','[callProgressDetectingCustomer][logBusyGlobal]','rescheduleContact','scheduledAt','dialBusyRetryFrequency','unlockAgent','activeContact','NOANSWER','countnoanswerretry','[callProgressDetectingCustomer][logNoAnswer]','[callProgressDetectingCustomer][logNoAnswerGlobal]','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency'];(function(_0x4fc9e6,_0xc51915){var _0x551d28=function(_0x1a603b){while(--_0x1a603b){_0x4fc9e6['push'](_0x4fc9e6['shift']());}};_0x551d28(++_0xc51915);}(_0x068f,0x1a1));var _0xf068=function(_0x178e48,_0x3c9509){_0x178e48=_0x178e48-0x0;var _0x440d7e=_0x068f[_0x178e48];return _0x440d7e;};'use strict';var util=require(_0xf068('0x0'));var _=require(_0xf068('0x1'));var BPromise=require(_0xf068('0x2'));var uuid=require('uuid');var moment=require('moment');var md5=require(_0xf068('0x3'));var Redis=require(_0xf068('0x4'));var config=require(_0xf068('0x5'));var logger=require(_0xf068('0x6'))('preview');var loggerAction=require(_0xf068('0x6'))('actionPreview');var ami=require(_0xf068('0x7'));var rpcDb=require(_0xf068('0x8'));var Action=require(_0xf068('0x9'));var ut=require(_0xf068('0xa'));config[_0xf068('0xb')]=_[_0xf068('0xc')](config['redis'],{'host':_0xf068('0xd'),'port':0x18eb});var io=require(_0xf068('0xe'))(new Redis(config[_0xf068('0xb')]));var Sequence=function(){};Sequence[_0xf068('0xf')][_0xf068('0x10')]=function(_0x580395){this[_0xf068('0x11')]=this[_0xf068('0x11')]?this[_0xf068('0x11')][_0xf068('0x12')](_0x580395):_0x580395();};function Preview(_0x22c863){this[_0xf068('0x13')]=new Sequence();this[_0xf068('0x14')]=_0x22c863[_0xf068('0x15')];this['trunks']=_0x22c863[_0xf068('0x16')];this[_0xf068('0x17')]={};this[_0xf068('0x18')]=_0x22c863[_0xf068('0x18')];this[_0xf068('0x19')]=0x0;ami['on'](_0xf068('0x1a'),this[_0xf068('0x1b')][_0xf068('0x1c')](this));ami['on']('hangup',this['syncHangup'][_0xf068('0x1c')](this));ami['on'](_0xf068('0x1d'),this[_0xf068('0x1e')][_0xf068('0x1c')](this));ami['on'](_0xf068('0x1f'),this[_0xf068('0x20')][_0xf068('0x1c')](this));ami['on'](_0xf068('0x21'),this[_0xf068('0x22')][_0xf068('0x1c')](this));ami['on'](_0xf068('0x23'),this[_0xf068('0x24')][_0xf068('0x1c')](this));ami['on']('attendedtransfer',this[_0xf068('0x25')][_0xf068('0x1c')](this));ami['on'](_0xf068('0x26'),this[_0xf068('0x27')][_0xf068('0x1c')](this));this['loopCampaigns'](this[_0xf068('0x14')]);}function emit(_0x2a6750,_0x4ec4b1,_0x1d7256){io['to'](_0x2a6750)[_0xf068('0x28')](_0x4ec4b1,_0x1d7256);}function emitCampaignPreview(_0x3b2603){if(_0x3b2603[_0xf068('0x29')]===_0xf068('0x2a')){var _0x3df738={'id':_0x3b2603['id'],'name':_0x3b2603['name'],'strategy':_0x3b2603[_0xf068('0x2b')],'answered':_0x3b2603['answered'],'available':_0x3b2603[_0xf068('0x2c')],'loggedIn':_0x3b2603[_0xf068('0x2d')],'pTalking':_0x3b2603[_0xf068('0x2e')],'sumBillable':_0x3b2603[_0xf068('0x2f')],'sumDuration':_0x3b2603[_0xf068('0x30')],'sumHoldTime':_0x3b2603[_0xf068('0x31')]||0x0,'talking':_0x3b2603[_0xf068('0x32')],'total':_0x3b2603[_0xf068('0x33')],'type':_0x3b2603[_0xf068('0x29')],'unmanaged':_0x3b2603[_0xf068('0x34')],'abandoned':_0x3b2603[_0xf068('0x35')],'waiting':_0x3b2603[_0xf068('0x36')],'loggedInDb':_0x3b2603[_0xf068('0x37')],'dialActive':_0x3b2603[_0xf068('0x38')],'dialMethod':_0x3b2603[_0xf068('0x39')],'dialOriginateCallerIdName':_0x3b2603[_0xf068('0x3a')],'dialOriginateCallerIdNumber':_0x3b2603[_0xf068('0x3b')],'dialOriginateTimeout':_0x3b2603[_0xf068('0x3c')],'dialPrefix':_0x3b2603[_0xf068('0x3d')],'outboundAnswerAgiCallsDay':_0x3b2603['outboundAnswerAgiCallsDay'],'outboundAnswerCallsDay':_0x3b2603[_0xf068('0x3e')],'outboundBlacklistCallsDay':_0x3b2603['outboundBlacklistCallsDay'],'outboundBusyCallsDay':_0x3b2603[_0xf068('0x3f')],'outboundCongestionCallsDay':_0x3b2603[_0xf068('0x40')],'outboundDropCallsDayACS':_0x3b2603[_0xf068('0x41')],'outboundDropCallsDayCallersExit':_0x3b2603[_0xf068('0x42')],'outboundDropCallsDayTimeout':_0x3b2603[_0xf068('0x43')],'outboundNoAnswerCallsDay':_0x3b2603[_0xf068('0x44')],'outboundNoSuchCallsDay':_0x3b2603[_0xf068('0x45')],'outboundOriginateFailureCallsDay':_0x3b2603['outboundOriginateFailureCallsDay'],'outboundReCallsDay':_0x3b2603[_0xf068('0x46')],'outboundRejectCallsDay':_0x3b2603[_0xf068('0x47')],'outboundUnknownCallsDay':_0x3b2603[_0xf068('0x48')],'predictiveIntervalAnsweredCalls':_0x3b2603[_0xf068('0x49')],'predictiveIntervalAvgHoldtime':_0x3b2603[_0xf068('0x4a')],'predictiveIntervalAvgTalktime':_0x3b2603['predictiveIntervalAvgTalktime'],'predictiveIntervalDroppedCallsCallersExit':_0x3b2603[_0xf068('0x4b')],'predictiveIntervalDroppedCallsTimeout':_0x3b2603[_0xf068('0x4c')],'predictiveIntervalErlangCalls':_0x3b2603['predictiveIntervalErlangCalls'],'predictiveIntervalErlangCallsDroppedCalls':_0x3b2603[_0xf068('0x4d')],'predictiveIntervalHitRate':_0x3b2603['predictiveIntervalHitRate'],'predictiveIntervalMultiplicativeFactor':_0x3b2603['predictiveIntervalMultiplicativeFactor'],'predictiveIntervalPauses':_0x3b2603[_0xf068('0x4e')],'predictiveIntervalAvailable':_0x3b2603[_0xf068('0x4f')],'predictiveIntervalTotalCalls':_0x3b2603[_0xf068('0x50')],'message':_0x3b2603[_0xf068('0x51')],'originated':_0x3b2603[_0xf068('0x52')],'erlangCalls':_0x3b2603[_0xf068('0x53')],'erlangCallToSecond':_0x3b2603['erlangCallToSecond'],'erlangAbandonmentRate':_0x3b2603[_0xf068('0x54')],'erlangBusyFactor':_0x3b2603[_0xf068('0x55')],'startPredictive':_0x3b2603[_0xf068('0x56')],'startProgressive':_0x3b2603[_0xf068('0x57')]};if(_0x3b2603['Trunk']){_0x3df738[_0xf068('0x58')]={'id':_0x3b2603[_0xf068('0x58')]['id'],'name':_0x3b2603[_0xf068('0x58')][_0xf068('0x59')],'active':_0x3b2603[_0xf068('0x58')]['active'],'callerid':_0x3b2603[_0xf068('0x58')][_0xf068('0x5a')]};}if(_0x3b2603[_0xf068('0x5b')]){_0x3df738[_0xf068('0x5b')]={'id':_0x3b2603[_0xf068('0x5b')]['id'],'name':_0x3b2603[_0xf068('0x5b')][_0xf068('0x59')]};}var _0x2ae740=md5(JSON[_0xf068('0x5c')](_0x3df738));if(_0x3b2603[_0xf068('0x3')]!==_0x2ae740){_0x3b2603[_0xf068('0x3')]=_0x2ae740;emit(util[_0xf068('0x5d')](_0xf068('0x5e'),_0x3df738[_0xf068('0x59')]),_0xf068('0x5f'),_0x3df738);}}}function emitVoiceQueueChannelRemove(_0x1812cc){emit(util['format']('voice:queue:%s',_0x1812cc[_0xf068('0x59')]),'voice_queue_channel:remove',_0x1812cc);}function notSendMessagesQueue(_0x45df46){if(_0x45df46[_0xf068('0x60')]){if(_0x45df46[_0xf068('0x52')]===0x0&&_0x45df46[_0xf068('0x2e')]===0x0){_0x45df46['sendMessageOneNotActive']=![];_0x45df46[_0xf068('0x2c')]=0x0;_0x45df46[_0xf068('0x61')]=0x0;_0x45df46[_0xf068('0x51')]='NOT_ACTIVE';ut[_0xf068('0x62')](_0xf068('0x63'),_0x45df46[_0xf068('0x59')]+_0xf068('0x64'));}else{_0x45df46['message']=_0xf068('0x65');ut[_0xf068('0x62')](_0xf068('0x63'),_0x45df46[_0xf068('0x59')]+_0xf068('0x66'));}emitCampaignPreview(_0x45df46);}}Preview[_0xf068('0xf')]['loopCampaigns']=function(){var _0xfdd9ee=this;setInterval(function(){_0xfdd9ee[_0xf068('0x67')]();},0x7cf);};Preview[_0xf068('0xf')][_0xf068('0x67')]=function(){var _0x26b68f=this[_0xf068('0x14')];this[_0xf068('0x19')]+=0x1;for(var _0x54f1f9 in _0x26b68f){if(_0x26b68f[_0xf068('0x68')](_0x54f1f9)&&(_0x26b68f[_0x54f1f9]['dialMethod']===_0xf068('0x69')||_0x26b68f[_0x54f1f9][_0xf068('0x39')]===_0xf068('0x6a'))&&_0x26b68f[_0x54f1f9][_0xf068('0x29')]===_0xf068('0x2a')){if(this[_0xf068('0x19')]>0x7){this[_0xf068('0x19')]=0x0;this[_0xf068('0x6b')]();}}if(_0x26b68f['hasOwnProperty'](_0x54f1f9)&&_0x26b68f[_0x54f1f9][_0xf068('0x39')]===_0xf068('0x69')&&_0x26b68f[_0x54f1f9][_0xf068('0x29')]===_0xf068('0x2a')){if(_0x26b68f[_0x54f1f9][_0xf068('0x38')]){this[_0xf068('0x6c')](_0x26b68f[_0x54f1f9]);this[_0xf068('0x6d')](_0x26b68f[_0x54f1f9]);}else{notSendMessagesQueue(_0x26b68f[_0x54f1f9]);}}}};Preview[_0xf068('0xf')]['clearZombieChannel']=function(_0x1b3b72){var _0x3d99a1=this;this['sequence'][_0xf068('0x10')](function(){if(!_[_0xf068('0x6e')](_0x3d99a1[_0xf068('0x17')][_0x1b3b72])){loggerAction[_0xf068('0x6f')](_0xf068('0x70'),_0x1b3b72,_0xf068('0x71'),_0x3d99a1[_0xf068('0x17')][_0x1b3b72][_0xf068('0x72')],_0xf068('0x73'),JSON[_0xf068('0x5c')](_0x3d99a1['campaignsPreview'][_0x3d99a1[_0xf068('0x17')][_0x1b3b72]['queue']][_0xf068('0x52')]),_0xf068('0x74'),JSON['stringify'](_0x3d99a1['campaignsPreview'][_0x3d99a1[_0xf068('0x17')][_0x1b3b72][_0xf068('0x72')]][_0xf068('0x2e')]),JSON[_0xf068('0x5c')](_0x3d99a1[_0xf068('0x17')][_0x1b3b72][_0xf068('0x75')]),JSON[_0xf068('0x5c')](_[_0xf068('0x76')](_0x3d99a1[_0xf068('0x17')][_0x1b3b72],['contactId',_0xf068('0x77'),_0xf068('0x78'),_0xf068('0x79')])));return ami[_0xf068('0x7a')]({'action':_0xf068('0x7b'),'channel':_0x3d99a1['actions'][_0x1b3b72]['channel']})[_0xf068('0x7c')](function(_0x21bbeb){if(_0x21bbeb['message']===_0xf068('0x7d')){setTimeout(function(){if(_0x3d99a1['actions'][_0x1b3b72]){ut[_0xf068('0x7e')](_0x3d99a1[_0xf068('0x14')][_0x3d99a1[_0xf068('0x17')][_0x1b3b72][_0xf068('0x72')]],_0xf068('0x7f'));if(_0x3d99a1['actions'][_0x1b3b72]['dialAnswer']===!![]){ut['decrementTalkink'](_0x3d99a1[_0xf068('0x14')][_0x3d99a1[_0xf068('0x17')][_0x1b3b72][_0xf068('0x72')]],_0xf068('0x7f'));ut[_0xf068('0x80')](_0xf068('0x81')+_0x1b3b72,_0x3d99a1[_0xf068('0x17')][_0x1b3b72]['queue']);}ut[_0xf068('0x80')]('[Dialer][checkChannel][Preview]'+_0x1b3b72,_0x3d99a1[_0xf068('0x17')][_0x1b3b72][_0xf068('0x72')]);delete _0x3d99a1['actions'][_0x1b3b72];}},0x2328);}});}});};Preview[_0xf068('0xf')]['clearZombieChannels']=function(){var _0x506d89=this;loggerAction[_0xf068('0x6f')]('[action]',_[_0xf068('0x82')](this['actions']));for(var _0x5ebe13 in this[_0xf068('0x17')]){if(_0x506d89[_0xf068('0x17')][_0xf068('0x68')](_0x5ebe13)){_0x506d89['clearZombieChannel'](_0x5ebe13);}}};Preview[_0xf068('0xf')][_0xf068('0x6d')]=function(_0x33d511){var _0x16ebee=this;rpcDb[_0xf068('0x83')](_0x33d511['id'],ut[_0xf068('0x84')](this[_0xf068('0x18')]))['then'](function(_0x27ea70){if(!_['isNil'](_0x27ea70)){for(var _0xaf2ed2=0x0;_0xaf2ed2<_0x27ea70[_0xf068('0x85')];_0xaf2ed2+=0x1){if(ut[_0xf068('0x86')](_0x27ea70[_0xaf2ed2]['scheduledat'])<_0x33d511[_0xf068('0x87')]*0x3c){_0x16ebee['run'](_0x27ea70[_0xaf2ed2]['id'])[_0xf068('0x88')](ut[_0xf068('0x89')](_0xf068('0x8a')))[_0xf068('0x7c')](ut[_0xf068('0x89')](_0xf068('0x8a')));}else{var _0x1a501f=new Action(_0x27ea70[_0xaf2ed2],_0x33d511);_0x1a501f[_0xf068('0x8b')]=moment()[_0xf068('0x5d')](_0xf068('0x8c'));_0x33d511[_0xf068('0x46')]+=0x1;ut[_0xf068('0x8d')](_0x1a501f,0x17,_0xf068('0x8e'));if(_0x33d511[_0xf068('0x8f')]){rpcDb[_0xf068('0x90')](ut['createBody'](_0x27ea70[_0xaf2ed2]));rpcDb[_0xf068('0x91')](_0x1a501f,_0xf068('0x92'));}else{ut[_0xf068('0x8d')](_0x1a501f,0x16,'RecallFailedTimeout');rpcDb[_0xf068('0x91')](_0x1a501f,_0xf068('0x93'));rpcDb['createCustomerFinal'](_0x1a501f,'[HistoryRecallClose]');}}}}})['catch'](ut[_0xf068('0x89')](_0xf068('0x94')));};Preview['prototype'][_0xf068('0x6c')]=function(_0x459530){_0x459530[_0xf068('0x60')]=!![];if(ut['IsNotLoggedIn'](_0x459530[_0xf068('0x2d')])){_0x459530[_0xf068('0x51')]=_0xf068('0x95');}else if(!ut[_0xf068('0x96')](_0x459530[_0xf068('0x38')])){_0x459530[_0xf068('0x51')]='NOT_ACTIVE';}else if(!this[_0xf068('0x97')](_0x459530['Trunk'])){if(!this[_0xf068('0x97')](_0x459530[_0xf068('0x98')])){_0x459530['message']='TRUNK_IS_NOT_REACHABLE';}else{_0x459530[_0xf068('0x51')]=_0xf068('0x99');}}else{_0x459530[_0xf068('0x51')]=_0xf068('0x99');}emitCampaignPreview(_0x459530);};Preview[_0xf068('0xf')][_0xf068('0x9a')]=function(_0x386d48,_0x4c41d3,_0x427d56){var _0x128569=this;var _0x159bbc=this[_0xf068('0x17')][_0x4c41d3];var _0x674417=this[_0xf068('0x14')][_0x159bbc[_0xf068('0x72')]];var _0x188fb3;if(_0x674417){switch(_0x427d56){case'1':_0x674417[_0xf068('0x45')]+=0x1;_0x159bbc[_0xf068('0x9b')]=ut[_0xf068('0x9c')](_0x159bbc);ut['logCustomer'](_0x159bbc,0x0,'NoSuchNumber');rpcDb[_0xf068('0x91')](_0x159bbc,_0xf068('0x9d'));if(ut[_0xf068('0x9c')](_0x159bbc)>=_0x674417[_0xf068('0x9e')]){_0x188fb3=ut[_0xf068('0x9f')](_0x159bbc,0xf,_0xf068('0xa0'));rpcDb[_0xf068('0xa1')](_0x188fb3,'[callProgressDetectingCustomer][logNoSuchGlobal]');}else{rpcDb['createCustomerFinal'](_0x159bbc,_0xf068('0xa2'));}delete this[_0xf068('0x17')][_0x386d48[_0xf068('0xa3')]];break;case _0xf068('0xa4'):var _0x5256fc=moment()[_0xf068('0x5d')](_0xf068('0x8c'));_0x159bbc[_0xf068('0xa5')]=_0x5256fc;_0x159bbc[_0xf068('0xa6')]=_0x5256fc;_0x159bbc[_0xf068('0x75')]=!![];_0x674417[_0xf068('0x2e')]+=0x1;logger[_0xf068('0x6f')](_0xf068('0xa7'),_0x159bbc[_0xf068('0xa8')],_0xf068('0xa9'),_0x674417['name'],_0xf068('0x74'),_0x674417[_0xf068('0x2e')]);ami[_0xf068('0x28')](_0xf068('0xaa'),ut[_0xf068('0xab')](_0x159bbc,_0xf068('0xac')));if(_0x674417['acw']){ami[_0xf068('0x28')](_0xf068('0xad'),ut['buildAcw'](_0x159bbc));}break;case'16':ami[_0xf068('0x28')](_0xf068('0xae'),ut[_0xf068('0xab')](_0x159bbc,_0xf068('0xaf')));emitVoiceQueueChannelRemove(ut[_0xf068('0xab')](_0x159bbc,'complete'));_0x674417['outboundAnswerCallsDay']+=0x1;_0x674417['total']+=0x1;_0x674417[_0xf068('0xb0')]+=0x1;ut[_0xf068('0xb1')](_0x674417,_0xf068('0xb2'));_0x159bbc[_0xf068('0x9b')]=ut['totalGlobal'](_0x159bbc);ut[_0xf068('0x8d')](_0x159bbc,0x4,_0xf068('0xb3'));rpcDb['createCustomerHistory'](_0x159bbc,_0xf068('0xb4'));rpcDb[_0xf068('0xa1')](_0x159bbc,_0xf068('0xb5'));rpcDb[_0xf068('0xb6')](_0x159bbc);_0x674417[_0xf068('0x30')]+=_0x159bbc[_0xf068('0xb7')];_0x674417['sumBillable']+=_0x159bbc[_0xf068('0xb7')];logger[_0xf068('0x6f')](_0xf068('0xb8'),_0x159bbc[_0xf068('0xa8')],_0xf068('0xa9'),_0x674417[_0xf068('0x59')],_0xf068('0x74'),_0x674417[_0xf068('0x2e')]);delete this['actions'][_0x386d48[_0xf068('0xa3')]];break;case _0xf068('0xb9'):_0x674417[_0xf068('0x3f')]+=0x1;_0x159bbc[_0xf068('0xba')]+=0x1;_0x159bbc[_0xf068('0x9b')]=ut[_0xf068('0x9c')](_0x159bbc);ut[_0xf068('0x8d')](_0x159bbc,0x5,_0xf068('0xbb'));rpcDb[_0xf068('0x91')](_0x159bbc,_0xf068('0xbc'));if(ut[_0xf068('0x9c')](_0x159bbc)>=_0x674417[_0xf068('0x9e')]){_0x188fb3=ut[_0xf068('0x9f')](_0x159bbc,0xf,_0xf068('0xa0'));rpcDb[_0xf068('0xa1')](_0x188fb3,_0xf068('0xbd'));}else{if(_0x159bbc[_0xf068('0xba')]>=_0x674417['dialBusyMaxRetry']){rpcDb[_0xf068('0xa1')](_0x159bbc,_0xf068('0xbc'));}else{rpcDb[_0xf068('0xbe')](ut[_0xf068('0xbf')](_0x159bbc,'countbusyretry',_0x674417[_0xf068('0xc0')]),_0x159bbc[_0xf068('0xc1')],_0x159bbc[_0xf068('0xc2')]);}}break;case _0xf068('0xc3'):_0x674417['outboundNoAnswerCallsDay']+=0x1;_0x159bbc[_0xf068('0xc4')]+=0x1;_0x159bbc['countglobal']=ut[_0xf068('0x9c')](_0x159bbc);ut[_0xf068('0x8d')](_0x159bbc,0x3,'NoAnswer');rpcDb[_0xf068('0x91')](_0x159bbc,_0xf068('0xc5'));if(ut[_0xf068('0x9c')](_0x159bbc)>=_0x674417[_0xf068('0x9e')]){_0x188fb3=ut[_0xf068('0x9f')](_0x159bbc,0xf,_0xf068('0xa0'));rpcDb[_0xf068('0xa1')](_0x188fb3,_0xf068('0xc6'));}else{if(_0x159bbc['countnoanswerretry']>=_0x674417[_0xf068('0xc7')]){rpcDb[_0xf068('0xa1')](_0x159bbc,'[callProgressDetectingCustomer][logNoAnswer]');}else{rpcDb[_0xf068('0xbe')](ut[_0xf068('0xbf')](_0x159bbc,_0xf068('0xc4'),_0x674417[_0xf068('0xc8')]),_0x159bbc['unlockAgent'],_0x159bbc['activeContact']);}}break;case _0xf068('0xc9'):_0x674417[_0xf068('0x40')]+=0x1;_0x159bbc[_0xf068('0xca')]+=0x1;_0x159bbc[_0xf068('0x9b')]=ut[_0xf068('0x9c')](_0x159bbc);ut[_0xf068('0x8d')](_0x159bbc,0x8,_0xf068('0xcb'));rpcDb[_0xf068('0x91')](_0x159bbc,'[callProgressDetectingCustomer][logCongestion]');if(ut[_0xf068('0x9c')](_0x159bbc)>=_0x674417['dialGlobalMaxRetry']){_0x188fb3=ut[_0xf068('0x9f')](_0x159bbc,0xf,_0xf068('0xa0'));rpcDb[_0xf068('0xa1')](_0x188fb3,'[callProgressDetectingCustomer][logCongestionGlobal]');}else{if(_0x159bbc[_0xf068('0xca')]>=_0x674417[_0xf068('0xcc')]){rpcDb[_0xf068('0xa1')](_0x159bbc,_0xf068('0xcd'));}else{rpcDb[_0xf068('0xbe')](ut[_0xf068('0xbf')](_0x159bbc,_0xf068('0xca'),_0x674417[_0xf068('0xc0')]),_0x159bbc[_0xf068('0xc1')],_0x159bbc[_0xf068('0xc2')]);}}break;case'CANCEL':_0x674417[_0xf068('0x47')]+=0x1;_0x159bbc['countglobal']=ut['totalGlobal'](_0x159bbc);ut[_0xf068('0x8d')](_0x159bbc,0x14,_0xf068('0xce'));rpcDb[_0xf068('0x91')](_0x159bbc,_0xf068('0xcf'));if(_0x159bbc[_0xf068('0xc1')]){rpcDb[_0xf068('0xd0')](_0x159bbc[_0xf068('0xd1')]);}if(_0x159bbc[_0xf068('0xc2')]){rpcDb[_0xf068('0xd2')](_0x159bbc['idContact']);}break;default:if(_0x159bbc[_0xf068('0x75')]){ut[_0xf068('0xb1')](_0x674417,_0xf068('0xd3'));ut[_0xf068('0x80')](_0xf068('0xd4')+_0x674417[_0xf068('0x59')],_0x386d48);}_0x674417['outboundUnknownCallsDay']+=0x1;_0x159bbc['countglobal']=ut[_0xf068('0x9c')](_0x159bbc);ut[_0xf068('0x8d')](_0x159bbc,0xc,_0x386d48[_0xf068('0xd5')]||_0x386d48['dialstatus']);rpcDb[_0xf068('0x91')](_0x159bbc,_0xf068('0xd6'));if(ut[_0xf068('0x9c')](_0x159bbc)>=_0x674417['dialGlobalMaxRetry']){_0x188fb3=ut[_0xf068('0x9f')](_0x159bbc,0xf,_0xf068('0xa0'));rpcDb['createCustomerFinal'](_0x188fb3,_0xf068('0xd7'));}else{rpcDb[_0xf068('0xa1')](_0x159bbc,_0xf068('0xd7'));}delete this['actions'][_0x386d48['linkedid']];}if(!(_0x159bbc['dialAnswer']&&_0x427d56==='16')){ut[_0xf068('0x7e')](_0x674417,_0xf068('0xd8'));logger[_0xf068('0x6f')](_0xf068('0xd9'),_0x159bbc[_0xf068('0xa8')],_0xf068('0xa9'),_0x674417['name'],_0xf068('0x73'),_0x674417[_0xf068('0x52')]);}if(_0x427d56!==_0xf068('0xa4')){delete this['actions'][_0x386d48[_0xf068('0xa3')]];delete this['actions'][_0x386d48[_0xf068('0xda')]];}}};Preview[_0xf068('0xf')][_0xf068('0xdb')]=function(_0x34a190,_0x437af8,_0x5a2694){if(_[_0xf068('0xdc')](_0x437af8)&&_0xf068('0xdd')!==typeof _0x437af8){return;}if(_[_0xf068('0xdc')](_0x5a2694)&&'object'!==typeof _0x5a2694){return;}switch(_0x5a2694[_0xf068('0xde')]){case'0':ut['logAgent'](_0x34a190,0x0,_0xf068('0xdf'));rpcDb[_0xf068('0xe0')](_0x34a190,_0xf068('0xe1'));break;case'3':ut['logAgent'](_0x34a190,0x3,'NoAnswer');rpcDb[_0xf068('0xe0')](_0x34a190,_0xf068('0xe2'));break;case'5':ut[_0xf068('0xe3')](_0x34a190,0x5,_0xf068('0xbb'));rpcDb[_0xf068('0xe0')](_0x34a190,'[callProgressDetectingAgent][logBusy]');break;case'8':ut[_0xf068('0xe3')](_0x34a190,0x8,'Congestion');rpcDb['createAgentHistory'](_0x34a190,_0xf068('0xe4'));break;case'22':ut[_0xf068('0xe3')](_0x34a190,0x16,'AnswerAGI');rpcDb[_0xf068('0xe0')](_0x34a190,_0xf068('0xe5'));break;default:ut['logAgent'](_0x34a190,0xc,_0x5a2694[_0xf068('0xde')]);rpcDb['createAgentHistory'](_0x34a190,_0xf068('0xe4'));}ut['updateOriginated'](_0x437af8,_0xf068('0xe6'));logger['info'](_0xf068('0xe7'),_0x34a190[_0xf068('0xa8')],_0xf068('0xa9'),_0x437af8[_0xf068('0x59')],'originated:\x20',_0x437af8[_0xf068('0x52')]);delete this[_0xf068('0x17')][_0x34a190[_0xf068('0xa8')]];};Preview[_0xf068('0xf')][_0xf068('0xe8')]=function(_0x395d61,_0x46a277,_0x5c9b24,_0x21fee5,_0x91f7da){var _0x4060a6=this;return new BPromise(function(_0x2284fc,_0x170c83){if(_['isNil'](_0x46a277)||_[_0xf068('0x6e')](_0x46a277[_0xf068('0xe9')])||_[_0xf068('0x6e')](_0x46a277[_0xf068('0xe9')]['phone'])||_['isNil'](_0x46a277[_0xf068('0x78')])){_0x170c83(ut[_0xf068('0x51')]('Contact\x20is\x20undefined',_0x21fee5,_0x91f7da));return;}var _0x502534=uuid['v4']();var _0x1c4941=_0x4060a6[_0xf068('0x14')][_0x46a277[_0xf068('0x71')][_0xf068('0x59')]];var _0x4a1f77=_0x5c9b24?_0x4060a6[_0xf068('0x18')][_0x5c9b24]['id']:undefined;_0x4060a6[_0xf068('0x17')][_0x502534]=new Action(_0x46a277,_0x1c4941,_0x502534,_0x5c9b24,_0x4a1f77);var _0x358229=_0x4060a6[_0xf068('0x17')][_0x502534];_0x358229['unlockAgent']=_0x21fee5;_0x358229['activeContact']=_0x91f7da;_0x358229['lookAgent']=_0x5c9b24;if(_[_0xf068('0xea')](_0x395d61)){_0x4060a6[_0xf068('0xeb')](_0x358229,_0x1c4941,_0x46a277,_0x5c9b24)[_0xf068('0x88')](function(_0x375a31){logger[_0xf068('0x6f')](_0xf068('0xec'),'Queue:\x20'+_0x358229[_0xf068('0x72')]+'\x20IdHopper:\x20'+_0x358229['idContact'],JSON[_0xf068('0x5c')](_0x375a31));ami[_0xf068('0x28')](_0xf068('0xed'),ut[_0xf068('0xab')](_0x358229,_0xf068('0xee')));_0x2284fc(ut[_0xf068('0x51')](_0xf068('0xef')));})[_0xf068('0x7c')](function(_0x33aa68){ut[_0xf068('0x62')]('[Preview][execCall][failure]',_0x33aa68);_0x170c83(ut[_0xf068('0x51')](_0xf068('0xf0'),_0x21fee5,_0x91f7da));});}else{_0x1c4941['outboundBlacklistCallsDay']+=0x1;ut[_0xf068('0xf1')](_0x358229);rpcDb['createHistory'](_0x358229,_0xf068('0xf2'));delete _0x4060a6[_0xf068('0x17')][_0x502534];_0x170c83(ut['message'](_0xf068('0xf3'),_0x21fee5,_0x91f7da));}});};Preview[_0xf068('0xf')]['isTrunkReachable']=function(_0x3ca5aa){return!_[_0xf068('0x6e')](_0x3ca5aa)&&!_['isNil'](_0x3ca5aa['name'])&&!_[_0xf068('0x6e')](_0x3ca5aa[_0xf068('0xf4')])&&_0x3ca5aa[_0xf068('0xf4')]&&!_['isNil'](this['trunks'][util['format']('SIP/%s',_0x3ca5aa[_0xf068('0x59')])])&&!_[_0xf068('0x6e')](this[_0xf068('0x16')][util[_0xf068('0x5d')]('SIP/%s',_0x3ca5aa['name'])][_0xf068('0x7b')])&&(this[_0xf068('0x16')][util[_0xf068('0x5d')](_0xf068('0xf5'),_0x3ca5aa[_0xf068('0x59')])][_0xf068('0x7b')]==='reachable'||this[_0xf068('0x16')][util[_0xf068('0x5d')]('SIP/%s',_0x3ca5aa[_0xf068('0x59')])][_0xf068('0x7b')]===_0xf068('0xf6'));};Preview[_0xf068('0xf')][_0xf068('0xf7')]=function(_0x16ddf5,_0x15c53d){var _0xd381d4=this;return new BPromise(function(_0x1593b2,_0xceb552){_0xd381d4[_0xf068('0xf8')](_0x16ddf5,_0x15c53d)[_0xf068('0x88')](function(_0x462212){_0x1593b2(_[_0xf068('0x76')](_0x462212,['message']));})['catch'](function(_0x3b17b0){if(_0x3b17b0[_0xf068('0xf9')]){rpcDb[_0xf068('0xd0')](_0x16ddf5);}if(_0x3b17b0[_0xf068('0xf4')]){rpcDb[_0xf068('0xd2')](_0x16ddf5);}_0xceb552(_[_0xf068('0x76')](_0x3b17b0,[_0xf068('0x51')]));});});};Preview[_0xf068('0xf')][_0xf068('0xf8')]=function(_0x170b54,_0x133482){var _0x25ec31=this;return new BPromise(function(_0x23cc3a,_0x30c923){var _0x12bc5b,_0x428268;rpcDb[_0xf068('0xfa')](_0x170b54)[_0xf068('0x88')](function(_0x40289d){if(!_[_0xf068('0x6e')](_0x40289d[0x0])){_0x428268=_0x40289d[0x0][_0xf068('0xfb')]?![]:!![];_0x12bc5b=_0x40289d[0x0][_0xf068('0xfb')]?!![]:![];_0x12bc5b=_0x133482?!![]:_0x12bc5b;}var _0x3bb884=_0x25ec31[_0xf068('0xfc')](_0x40289d);if(_0x3bb884[_0xf068('0xfd')]){rpcDb['checkIsBlackList'](_['pick'](_0x40289d[0x0],['VoiceQueueId','Contact.phone']))[_0xf068('0x88')](function(_0x51daf7){_0x25ec31[_0xf068('0xe8')](_0x51daf7,_0x40289d[0x0],_0x133482,_0x428268,_0x12bc5b)[_0xf068('0x88')](function(_0x1bdb28){_0x23cc3a(_0x1bdb28);})['catch'](function(_0x1b6560){_0x30c923(_0x1b6560);});})[_0xf068('0x7c')](function(_0x372765){ut['logger']('[Preview][checkIsBlackList]',_0x372765);_0x30c923(ut[_0xf068('0x51')](_0xf068('0xfe'),_0x428268,_0x12bc5b));});}else{_0x30c923(ut[_0xf068('0x51')](_0x3bb884[_0xf068('0x51')],_0x428268,_0x12bc5b));}})['catch'](function(_0x3c6ec3){ut[_0xf068('0x62')](_0xf068('0xff'),_0x3c6ec3);_0x30c923(ut[_0xf068('0x51')](_0xf068('0xfe'),![],!![]));});});};Preview[_0xf068('0xf')][_0xf068('0xfc')]=function(_0x534053){if(_[_0xf068('0x6e')](_0x534053)||_['isEmpty'](_0x534053)||!_['isNil'](_0x534053[0x0][_0xf068('0x100')])&&_['isNil'](_0x534053[0x0][_0xf068('0x100')][_0xf068('0x59')])){ut[_0xf068('0x62')](_0xf068('0x101'),_0x534053);return{'isValid':![],'message':_0xf068('0x102')};}var _0x2f3d34=this[_0xf068('0x14')][_0x534053[0x0][_0xf068('0x71')]['name']];_0x2f3d34[_0xf068('0x51')]=_0xf068('0x99');if(_[_0xf068('0x6e')](_0x2f3d34)){ut[_0xf068('0x62')](_0xf068('0x103'),_0x2f3d34);return{'isValid':![],'message':_0xf068('0x104')};}if(!this[_0xf068('0x97')](_0x2f3d34[_0xf068('0x58')])){ut['logger'](_0xf068('0x105'),_0xf068('0x106')+_0x2f3d34['name']+_0xf068('0x107'));if(!this[_0xf068('0x97')](_0x2f3d34['TrunkBackup'])){ut[_0xf068('0x62')](_0xf068('0x105'),_0x2f3d34[_0xf068('0x59')]+_0xf068('0x108'));return{'isValid':![],'message':'Trunk\x20not\x20work'};}}if(!ut['isActive'](_0x2f3d34[_0xf068('0x38')])){ut[_0xf068('0x62')](_0xf068('0x109'),_0x2f3d34[_0xf068('0x59')]+_0xf068('0x10a'));return{'isValid':![],'message':'campaign\x20Name:\x20'+_0x2f3d34['name']+_0xf068('0x10a')};}return{'isValid':!![],'message':_0xf068('0x10b')};};Preview['prototype'][_0xf068('0xeb')]=function(_0x5c640f,_0x47401d,_0x3987af,_0x1ba096){var _0x444115=this;return new BPromise(function(_0x58ce1a,_0x493281){var _0xccbc06=_0x5c640f[_0xf068('0xa8')];var _0x3258e7=_0x444115[_0xf068('0x97')](_0x47401d[_0xf068('0x58')])?util[_0xf068('0x5d')]('SIP/%s/%s%s',_0x47401d['Trunk'][_0xf068('0x59')],_[_0xf068('0x6e')](_0x47401d[_0xf068('0x3d')])?'':_0x47401d['dialPrefix']['trim']()||'',_0x47401d['dialCutDigit']>0x0?_0x3987af[_0xf068('0xe9')][_0xf068('0x10c')][_0xf068('0x10d')](_0x47401d[_0xf068('0x10e')]):_0x3987af[_0xf068('0xe9')][_0xf068('0x10c')]):util[_0xf068('0x5d')]('SIP/%s/%s%s',_['isNil'](_0x47401d[_0xf068('0x98')])?_0x47401d[_0xf068('0x58')]['name']:_0x47401d['TrunkBackup'][_0xf068('0x59')],_[_0xf068('0x6e')](_0x47401d['dialPrefix'])?'':_0x47401d[_0xf068('0x3d')]['trim']()||'',_0x47401d['dialCutDigit']>0x0?_0x3987af[_0xf068('0xe9')][_0xf068('0x10c')][_0xf068('0x10d')](_0x47401d[_0xf068('0x10e')]):_0x3987af[_0xf068('0xe9')]['phone']);var _0x52248d=_0x444115[_0xf068('0x97')](_0x47401d[_0xf068('0x58')])?ut[_0xf068('0x10f')](_0x47401d[_0xf068('0x58')][_0xf068('0x5a')],_0x47401d['dialOriginateCallerIdName'],_0x47401d[_0xf068('0x110')]>0x0?ut['getCallerIdRandom'](_0x47401d[_0xf068('0x3b')],_0x47401d[_0xf068('0x110')]):_0x47401d[_0xf068('0x3b')]):ut[_0xf068('0x10f')](_[_0xf068('0x6e')](_0x47401d[_0xf068('0x98')])?_0x47401d[_0xf068('0x58')]['callerid']:_0x47401d[_0xf068('0x98')][_0xf068('0x5a')],_0x47401d[_0xf068('0x3a')],_0x47401d[_0xf068('0x110')]>0x0?ut[_0xf068('0x111')](_0x47401d[_0xf068('0x3b')],_0x47401d[_0xf068('0x110')]):_0x47401d['dialOriginateCallerIdNumber']);if(_0x52248d){_0x5c640f[_0xf068('0x112')]=ut[_0xf068('0x113')](_0x52248d);_0x5c640f['originatecalleridnum']=ut[_0xf068('0x114')](_0x52248d);}var _0x23900d=ut[_0xf068('0x115')](_0x47401d,_0x3987af,_0x3258e7,_0x52248d,_0xccbc06,_0x5c640f);_[_0xf068('0x116')](_0x5c640f,ut[_0xf068('0x117')](_0x23900d));_0x5c640f[_0xf068('0x8b')]=moment()['format'](_0xf068('0x8c'));ami['Action'](ut[_0xf068('0x118')](_0x5c640f,_0x47401d,_0x23900d,_0x5c640f[_0xf068('0xc2')],_0x1ba096))[_0xf068('0x88')](function(_0x48dc67){_0x47401d[_0xf068('0x52')]+=0x1;logger[_0xf068('0x6f')](_0xf068('0x119'),_0xccbc06,'\x20Queue',_0x47401d[_0xf068('0x59')],_0xf068('0x73'),_0x47401d[_0xf068('0x52')]);_0x58ce1a(_0x48dc67);})['catch'](function(_0x51e130){ut[_0xf068('0xe3')](_0x5c640f,0xe,_0xf068('0x11a'));rpcDb['createAgentHistory'](_0x5c640f,_0xf068('0x11b'));_0x493281(_0x51e130);});});};Preview[_0xf068('0xf')][_0xf068('0x22')]=function(_0x494fc3){if(this[_0xf068('0x17')][_0x494fc3[_0xf068('0xa3')]]){this['actions'][_0x494fc3[_0xf068('0xa3')]][_0xf068('0x11c')]=_0x494fc3[_0xf068('0x11c')];}};Preview[_0xf068('0xf')]['syncOriginateResponse']=function(_0x37bda7){var _0x58b0d4=this;var _0xde0be7=this[_0xf068('0x17')][_0x37bda7[_0xf068('0x11d')]];if(_0xde0be7){if(_0xde0be7[_0xf068('0x11e')]&&this[_0xf068('0x18')][_0xde0be7[_0xf068('0x11e')]]){ut[_0xf068('0x11f')](_0xde0be7,this['agents'][_0xde0be7[_0xf068('0x11e')]][_0xf068('0x59')],this['agents'][_0xde0be7[_0xf068('0x11e')]]['id']);}var _0x38d262=_['clone'](_0xde0be7);_0x38d262['responsetime']=moment()[_0xf068('0x5d')](_0xf068('0x8c'));var _0x43a0d7=_0x58b0d4[_0xf068('0x14')][_0xde0be7['queue']];if(ut['isFailure'](_0x37bda7['response'])){if(_0xde0be7[_0xf068('0xc1')]){rpcDb[_0xf068('0xd0')](_0xde0be7[_0xf068('0xd1')]);}if(_0xde0be7[_0xf068('0xc2')]){rpcDb['disableContact'](_0xde0be7[_0xf068('0xd1')]);}ami['emit'](_0xf068('0x120'),ut[_0xf068('0xab')](_0xde0be7,_0xf068('0x121')));this[_0xf068('0xdb')](_0x38d262,_0x43a0d7,_0x37bda7);}else{_0xde0be7[_0xf068('0x8b')]=moment()['format'](_0xf068('0x8c'));ut[_0xf068('0xe3')](_0x38d262,0x4,'Answer');rpcDb[_0xf068('0xe0')](_0x38d262,'[callProgressDetectingAgent][logAnswer]');}}};Preview['prototype'][_0xf068('0x122')]=function(_0x4fb942){var _0x436cfa=this;var _0x42f825=this[_0xf068('0x17')][_0x4fb942['linkedid']];var _0x51d25a;if(_0x42f825){_0x51d25a=this[_0xf068('0x14')][_0x42f825[_0xf068('0x72')]];logger[_0xf068('0x6f')]('[syncHangup][talking]',_0x4fb942[_0xf068('0xa3')],_0xf068('0xa9'),_0x51d25a['name'],_0xf068('0x74'),_0x51d25a[_0xf068('0x2e')]);}if(this[_0xf068('0x17')][_0x4fb942[_0xf068('0xa3')]]&&_0x4fb942[_0xf068('0xa3')]!==_0x4fb942[_0xf068('0xa8')]){if(_0x4fb942[_0xf068('0x123')]==='16'&&this[_0xf068('0x17')][_0x4fb942[_0xf068('0xa3')]][_0xf068('0x75')]){this[_0xf068('0x9a')](_0x4fb942,_0x4fb942[_0xf068('0xa3')],_0x4fb942[_0xf068('0x123')]);}else if(this[_0xf068('0x17')][_0x4fb942[_0xf068('0xa3')]][_0xf068('0x75')]){logger[_0xf068('0x6f')]('[syncHangup][talking][cause]',_0x4fb942[_0xf068('0xa3')],_0x4fb942[_0xf068('0x123')],_0xf068('0xa9'),_0x51d25a[_0xf068('0x59')],'pTalking:\x20',_0x51d25a[_0xf068('0x2e')]);this[_0xf068('0x9a')](_0x4fb942,_0x4fb942[_0xf068('0xa3')],_0x4fb942[_0xf068('0x123')]);}}else if(_0x42f825&&_[_0xf068('0x6e')](_0x42f825[_0xf068('0x124')])&&_0x51d25a[_0xf068('0x125')]&&_0x4fb942['linkedid']===_0x4fb942['uniqueid']&&_[_0xf068('0x6e')](_0x4fb942[_0xf068('0xde')])&&_0x4fb942[_0xf068('0x123')]==='16'&&_0x4fb942[_0xf068('0x126')]==='6'&&_['isUndefined'](_0x42f825[_0xf068('0x127')])){if(_0x42f825['unlockAgent']){rpcDb['unlockContact'](_0x42f825[_0xf068('0xd1')]);}if(_0x42f825[_0xf068('0xc2')]){rpcDb[_0xf068('0xd2')](_0x42f825[_0xf068('0xd1')]);}_0x4fb942[_0xf068('0xde')]='22';this[_0xf068('0xdb')](_0x42f825,_0x51d25a,_0x4fb942);}else if(_0x42f825&&_0x42f825[_0xf068('0x127')]){if(_0x4fb942[_0xf068('0x123')]==='16'&&this[_0xf068('0x17')][_0x4fb942['linkedid']][_0xf068('0x75')]){logger[_0xf068('0x6f')](_0xf068('0x128'),_0x4fb942[_0xf068('0xa3')],_0x4fb942[_0xf068('0x123')],_0xf068('0xa9'),_0x51d25a[_0xf068('0x59')],'pTalking:\x20',_0x51d25a[_0xf068('0x2e')]);this[_0xf068('0x9a')](_0x4fb942,_0x4fb942[_0xf068('0xa3')],_0x4fb942[_0xf068('0x123')]);}else if(this[_0xf068('0x17')][_0x4fb942[_0xf068('0xa3')]]['dialAnswer']){logger[_0xf068('0x6f')]('[syncHangup][talking][cause]',_0x4fb942[_0xf068('0xa3')],_0x4fb942[_0xf068('0x123')],_0xf068('0xa9'),_0x51d25a[_0xf068('0x59')],_0xf068('0x74'),_0x51d25a['pTalking']);this[_0xf068('0x9a')](_0x4fb942,_0x4fb942[_0xf068('0xa3')],_0x4fb942['cause']);}}};Preview[_0xf068('0xf')][_0xf068('0x20')]=function(_0x11a8bc){if(this[_0xf068('0x17')][_0x11a8bc[_0xf068('0xda')]]&&_0x11a8bc[_0xf068('0xda')]!==_0x11a8bc['destuniqueid']){this[_0xf068('0x9a')](_0x11a8bc,_0x11a8bc[_0xf068('0xda')],_0x11a8bc[_0xf068('0x129')]);}};Preview['prototype']['syncHangupRequest']=function(_0x1641e3){if(this[_0xf068('0x17')][_0x1641e3[_0xf068('0xa3')]]&&_0x1641e3[_0xf068('0xa3')]!==_0x1641e3['uniqueid']&&!this['actions'][_0x1641e3[_0xf068('0xa3')]][_0xf068('0x75')]){if(_0x1641e3[_0xf068('0x123')]==='1'){this[_0xf068('0x9a')](_0x1641e3,_0x1641e3[_0xf068('0xa3')],_0x1641e3['cause']);}}};Preview[_0xf068('0xf')][_0xf068('0x12a')]=function(_0x230671,_0x3804b6,_0x209f73){if(this[_0xf068('0x17')][_0x230671]){if(_[_0xf068('0x6e')](this['actions'][_0x230671][_0xf068('0x12b')])){this['actions'][_0x230671]['variables']={};}this[_0xf068('0x17')][_0x230671][_0xf068('0x12b')][_0x3804b6]=_0x209f73;}};Preview[_0xf068('0xf')][_0xf068('0x24')]=function(_0xac0f4f){try{if(!_[_0xf068('0x6e')](_0xac0f4f)){if(ut['filterKey'](_['keys'](_0xac0f4f[_0xf068('0x12c')])[0x0])){this[_0xf068('0x12a')](_0xac0f4f[_0xf068('0xa8')],_[_0xf068('0x12d')](_0xac0f4f[_0xf068('0x12c')])[0x0],_0xac0f4f[_0xf068('0x12e')]);}}}catch(_0x3dc7eb){logger[_0xf068('0x12f')](_0xf068('0x130'),util[_0xf068('0x131')](_0x3dc7eb,{'showHidden':![],'depth':null}));}};Preview[_0xf068('0xf')][_0xf068('0x25')]=function(_0x4f2373){if(_0x4f2373){if(this[_0xf068('0x17')][_0x4f2373[_0xf068('0x132')]]){this[_0xf068('0x17')][_0x4f2373[_0xf068('0x132')]][_0xf068('0x127')]=!![];}}};Preview['prototype']['syncBlindTransfer']=function(_0x5f4455){if(_0x5f4455){if(this[_0xf068('0x17')][_0x5f4455[_0xf068('0x133')]]){this['actions'][_0x5f4455[_0xf068('0x133')]][_0xf068('0x127')]=!![];}}};module[_0xf068('0x134')]=Preview;
\ No newline at end of file
+var _0xcfb8=['Answer','crateCustomerReportQueue','BUSY','countbusyretry','Busy','[callProgressDetectingCustomer][logBusy]','rescheduleContact','scheduledAt','dialBusyRetryFrequency','unlockAgent','NOANSWER','countnoanswerretry','[callProgressDetectingCustomer][logNoAnswer]','[callProgressDetectingCustomer][logNoAnswerGlobal]','dialNoAnswerMaxRetry','activeContact','CONGESTION','countcongestionretry','[callProgressDetectingCustomer][logCongestion]','[callProgressDetectingCustomer][logCongestionGlobal]','dialCongestionMaxRetry','outboundRejectCallsDay','[syncHangupRequest][logAgentReject]','unlockContact','idContact','disableContact','[default]','[Dialer][decrementTalkink][no\x20Hangup][Preview]','cause-txt','dialstatus','[callProgressDetectingCustomer][logUnknown]','[callProgressDetectingCustomer][logUnknownGlobal]','[callProgressDetectingCustomer]','[originated][decrement][callProgressDetectingCustomer]','ANSWER','destlinkedid','isUndefined','object','reason','logAgent','createAgentHistory','NoAnswer','[callProgressDetectingAgent][logNoAnswer]','Congestion','AnswerAGI','[callProgressDetectingAgent][logAnswerAGI]','[callProgressDetectingAgent][logCongestion]','[callProgressDetectingAgent]','[originated][decrement][callProgressDetectingAgent]','checkInBlack','Contact','phone','VoiceQueueId','Contact\x20is\x20undefined','Queue','lookAgent','isEmpty','execCall','[Preview][execCall][success]','Queue:\x20','\x20IdHopper:\x20','custom:agentcalled','called','Calling','Call\x20failed','[Blacklist][error]','Contact\x20in\x20black\x20List','SIP/%s','status','reachable','unmonitored','execRun','unlock','recallme','validateContact','checkIsBlackList','Contact.phone','[Preview][checkIsBlackList]','[Preview][getContactPreview]','Agent','Empty\x20Contact','[Preview][validateContact][Empty\x20Campaign]','Empty\x20Campaign','[Preview][validateContact][Trunk\x20not\x20work]','campaign\x20Name:\x20','\x20Trunk\x20is\x20not\x20active','\x20Trunk\x20Backup\x20is\x20not\x20active','Trunk\x20not\x20work','[Preview][validateContact][Campaign\x20Active]','\x20Not\x20Active','Is\x20Valid','SIP/%s/%s%s','trim','dialCutDigit','substring','getCallerId','callerid','dialRandomLastDigitCallerIdNumber','getCallerIdRandom','extractCalleridName','originatecalleridnum','addVariables','merge','toLowerVariables','Action','variablesAction','OriginateError','[originateFailure][logOriginateFailure]','actionid','logLookAgent','clone','rejected','[callProgressDetectingAgent][logAnswer]','[syncHangup][talking]','cause','[syncHangup][talking][cause]','statedesc','dialQueueProject','channelstate','transfer','[syncHangup][talking][transfer]','destuniqueid','addVariable','variables','filterKey','keys','variable','value','error','[syncVarSet][Preview]','inspect','transfertargetlinkedid','transfererlinkedid','exports','util','lodash','uuid','moment','../../../config/environment','preview','../../../config/logger','actionPreview','../ami','./action','./util/util','defaults','redis','socket.io-emitter','prototype','enqueue','tail','finally','campaignsPreview','voiceQueues','trunks','actions','agents','originateresponse','bind','hangup','syncHangup','hanguprequest','syncHangupRequest','dialend','syncDialEnd','newexten','syncNewExten','varset','syncVarSet','attendedtransfer','syncAttendedTransfer','blindtransfer','syncBlindTransfer','loopCampaigns','emit','type','outbound','name','strategy','answered','available','loggedIn','pTalking','sumDuration','sumHoldTime','talking','total','unmanaged','loggedInDb','dialActive','dialMethod','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundUnknownCallsDay','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','predictiveIntervalMultiplicativeFactor','predictiveIntervalAvailable','predictiveIntervalTotalCalls','message','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','erlangBusyFactor','startPredictive','startProgressive','Trunk','active','Interval','stringify','md5','format','voice:queue:%s','voice_queue_channel:remove','sendMessageOneNotActive','originated','paused','NOT_ACTIVE','logger','[CampaignPreview]\x20Campaign\x20Queue:\x20','\x20is\x20not\x20active','\x20is\x20disactive','syncCampaigns','clockClearZombieChannels','hasOwnProperty','booked','setMessage','recallMe','sequence','isNil','info','[clearZombieChannels][talking]','queue','originated:\x20','pTalking:\x20','dialAnswer','pick','contactId','UserId','ListId','channel','No\x20such\x20channel','updateOriginated','[clearZombieChannel]','decrementTalkink','loggerError','[Dialer][checkChannel][Preview]','clearZombieChannels','[action]','size','clearZombieChannel','getContactRecallMe','agentReadyId','length','getDiff','scheduledat','dialRecallMeTimeout','run','then','logger2','catch','starttime','logCustomer','RecallInQueue','dialRecallInQueue','rescheduleContactInQueue','createBody','createCustomerHistory','createCustomerFinal','[HistoryRecallClose]','[getContactRecallMe]','AGENTS_NOT_LOGGED','isActive','isTrunkReachable','TrunkBackup','ACTIVE','callProgressDetectingCustomer','countglobal','totalGlobal','NoSuchNumber','[callProgressDetectingCustomer][logNoSuch]','dialGlobalMaxRetry','cloneAction','Global','linkedid','YYYY-MM-DD\x20HH:mm:ss','responsetime','[syncHangup][talking][increment]','uniqueid','\x20Queue','custom:agentconnect','buildObj','connect','acw','custom:agentConnectPreview','buildAcw','custom:agentcomplete','complete','[16]'];(function(_0x126558,_0x143c9a){var _0x1f6d14=function(_0x2b0eea){while(--_0x2b0eea){_0x126558['push'](_0x126558['shift']());}};_0x1f6d14(++_0x143c9a);}(_0xcfb8,0x1c1));var _0x8cfb=function(_0x2f28dd,_0x44640a){_0x2f28dd=_0x2f28dd-0x0;var _0x4072da=_0xcfb8[_0x2f28dd];return _0x4072da;};'use strict';var util=require(_0x8cfb('0x0'));var _=require(_0x8cfb('0x1'));var BPromise=require('bluebird');var uuid=require(_0x8cfb('0x2'));var moment=require(_0x8cfb('0x3'));var md5=require('md5');var Redis=require('ioredis');var config=require(_0x8cfb('0x4'));var logger=require('../../../config/logger')(_0x8cfb('0x5'));var loggerAction=require(_0x8cfb('0x6'))(_0x8cfb('0x7'));var ami=require(_0x8cfb('0x8'));var rpcDb=require('./rpcDb');var Action=require(_0x8cfb('0x9'));var ut=require(_0x8cfb('0xa'));config['redis']=_[_0x8cfb('0xb')](config[_0x8cfb('0xc')],{'host':'localhost','port':0x18eb});var io=require(_0x8cfb('0xd'))(new Redis(config[_0x8cfb('0xc')]));var Sequence=function(){};Sequence[_0x8cfb('0xe')][_0x8cfb('0xf')]=function(_0x30b22c){this[_0x8cfb('0x10')]=this[_0x8cfb('0x10')]?this[_0x8cfb('0x10')][_0x8cfb('0x11')](_0x30b22c):_0x30b22c();};function Preview(_0x33df7e){this['sequence']=new Sequence();this[_0x8cfb('0x12')]=_0x33df7e[_0x8cfb('0x13')];this[_0x8cfb('0x14')]=_0x33df7e['trunks'];this[_0x8cfb('0x15')]={};this[_0x8cfb('0x16')]=_0x33df7e[_0x8cfb('0x16')];this['clockClearZombieChannels']=0x0;ami['on'](_0x8cfb('0x17'),this['syncOriginateResponse'][_0x8cfb('0x18')](this));ami['on'](_0x8cfb('0x19'),this[_0x8cfb('0x1a')][_0x8cfb('0x18')](this));ami['on'](_0x8cfb('0x1b'),this[_0x8cfb('0x1c')][_0x8cfb('0x18')](this));ami['on'](_0x8cfb('0x1d'),this[_0x8cfb('0x1e')][_0x8cfb('0x18')](this));ami['on'](_0x8cfb('0x1f'),this[_0x8cfb('0x20')]['bind'](this));ami['on'](_0x8cfb('0x21'),this[_0x8cfb('0x22')][_0x8cfb('0x18')](this));ami['on'](_0x8cfb('0x23'),this[_0x8cfb('0x24')]['bind'](this));ami['on'](_0x8cfb('0x25'),this[_0x8cfb('0x26')][_0x8cfb('0x18')](this));this[_0x8cfb('0x27')](this[_0x8cfb('0x12')]);}function emit(_0x320600,_0x49a951,_0x5c719b){io['to'](_0x320600)[_0x8cfb('0x28')](_0x49a951,_0x5c719b);}function emitCampaignPreview(_0x4a5636){if(_0x4a5636[_0x8cfb('0x29')]===_0x8cfb('0x2a')){var _0x5d06b7={'id':_0x4a5636['id'],'name':_0x4a5636[_0x8cfb('0x2b')],'strategy':_0x4a5636[_0x8cfb('0x2c')],'answered':_0x4a5636[_0x8cfb('0x2d')],'available':_0x4a5636[_0x8cfb('0x2e')],'loggedIn':_0x4a5636[_0x8cfb('0x2f')],'pTalking':_0x4a5636[_0x8cfb('0x30')],'sumBillable':_0x4a5636['sumBillable'],'sumDuration':_0x4a5636[_0x8cfb('0x31')],'sumHoldTime':_0x4a5636[_0x8cfb('0x32')]||0x0,'talking':_0x4a5636[_0x8cfb('0x33')],'total':_0x4a5636[_0x8cfb('0x34')],'type':_0x4a5636['type'],'unmanaged':_0x4a5636[_0x8cfb('0x35')],'abandoned':_0x4a5636['abandoned'],'waiting':_0x4a5636['waiting'],'loggedInDb':_0x4a5636[_0x8cfb('0x36')],'dialActive':_0x4a5636[_0x8cfb('0x37')],'dialMethod':_0x4a5636[_0x8cfb('0x38')],'dialOriginateCallerIdName':_0x4a5636[_0x8cfb('0x39')],'dialOriginateCallerIdNumber':_0x4a5636[_0x8cfb('0x3a')],'dialOriginateTimeout':_0x4a5636[_0x8cfb('0x3b')],'dialPrefix':_0x4a5636[_0x8cfb('0x3c')],'outboundAnswerAgiCallsDay':_0x4a5636['outboundAnswerAgiCallsDay'],'outboundAnswerCallsDay':_0x4a5636[_0x8cfb('0x3d')],'outboundBlacklistCallsDay':_0x4a5636[_0x8cfb('0x3e')],'outboundBusyCallsDay':_0x4a5636[_0x8cfb('0x3f')],'outboundCongestionCallsDay':_0x4a5636[_0x8cfb('0x40')],'outboundDropCallsDayACS':_0x4a5636[_0x8cfb('0x41')],'outboundDropCallsDayCallersExit':_0x4a5636[_0x8cfb('0x42')],'outboundDropCallsDayTimeout':_0x4a5636['outboundDropCallsDayTimeout'],'outboundNoAnswerCallsDay':_0x4a5636[_0x8cfb('0x43')],'outboundNoSuchCallsDay':_0x4a5636[_0x8cfb('0x44')],'outboundOriginateFailureCallsDay':_0x4a5636[_0x8cfb('0x45')],'outboundReCallsDay':_0x4a5636[_0x8cfb('0x46')],'outboundRejectCallsDay':_0x4a5636['outboundRejectCallsDay'],'outboundUnknownCallsDay':_0x4a5636[_0x8cfb('0x47')],'predictiveIntervalAnsweredCalls':_0x4a5636['predictiveIntervalAnsweredCalls'],'predictiveIntervalAvgHoldtime':_0x4a5636[_0x8cfb('0x48')],'predictiveIntervalAvgTalktime':_0x4a5636[_0x8cfb('0x49')],'predictiveIntervalDroppedCallsCallersExit':_0x4a5636[_0x8cfb('0x4a')],'predictiveIntervalDroppedCallsTimeout':_0x4a5636[_0x8cfb('0x4b')],'predictiveIntervalErlangCalls':_0x4a5636['predictiveIntervalErlangCalls'],'predictiveIntervalErlangCallsDroppedCalls':_0x4a5636[_0x8cfb('0x4c')],'predictiveIntervalHitRate':_0x4a5636[_0x8cfb('0x4d')],'predictiveIntervalMultiplicativeFactor':_0x4a5636[_0x8cfb('0x4e')],'predictiveIntervalPauses':_0x4a5636['predictiveIntervalPauses'],'predictiveIntervalAvailable':_0x4a5636[_0x8cfb('0x4f')],'predictiveIntervalTotalCalls':_0x4a5636[_0x8cfb('0x50')],'message':_0x4a5636[_0x8cfb('0x51')],'originated':_0x4a5636['originated'],'erlangCalls':_0x4a5636[_0x8cfb('0x52')],'erlangCallToSecond':_0x4a5636[_0x8cfb('0x53')],'erlangAbandonmentRate':_0x4a5636[_0x8cfb('0x54')],'erlangBusyFactor':_0x4a5636[_0x8cfb('0x55')],'startPredictive':_0x4a5636[_0x8cfb('0x56')],'startProgressive':_0x4a5636[_0x8cfb('0x57')]};if(_0x4a5636[_0x8cfb('0x58')]){_0x5d06b7['Trunk']={'id':_0x4a5636['Trunk']['id'],'name':_0x4a5636[_0x8cfb('0x58')][_0x8cfb('0x2b')],'active':_0x4a5636[_0x8cfb('0x58')][_0x8cfb('0x59')],'callerid':_0x4a5636[_0x8cfb('0x58')]['callerid']};}if(_0x4a5636[_0x8cfb('0x5a')]){_0x5d06b7[_0x8cfb('0x5a')]={'id':_0x4a5636[_0x8cfb('0x5a')]['id'],'name':_0x4a5636[_0x8cfb('0x5a')]['name']};}var _0x30d943=md5(JSON[_0x8cfb('0x5b')](_0x5d06b7));if(_0x4a5636[_0x8cfb('0x5c')]!==_0x30d943){_0x4a5636['md5']=_0x30d943;emit(util[_0x8cfb('0x5d')](_0x8cfb('0x5e'),_0x5d06b7[_0x8cfb('0x2b')]),'voice_queue:save',_0x5d06b7);}}}function emitVoiceQueueChannelRemove(_0xe81a9){emit(util[_0x8cfb('0x5d')](_0x8cfb('0x5e'),_0xe81a9[_0x8cfb('0x2b')]),_0x8cfb('0x5f'),_0xe81a9);}function notSendMessagesQueue(_0x439f6b){if(_0x439f6b[_0x8cfb('0x60')]){if(_0x439f6b[_0x8cfb('0x61')]===0x0&&_0x439f6b[_0x8cfb('0x30')]===0x0){_0x439f6b[_0x8cfb('0x60')]=![];_0x439f6b[_0x8cfb('0x2e')]=0x0;_0x439f6b[_0x8cfb('0x62')]=0x0;_0x439f6b[_0x8cfb('0x51')]=_0x8cfb('0x63');ut[_0x8cfb('0x64')](_0x8cfb('0x65'),_0x439f6b[_0x8cfb('0x2b')]+_0x8cfb('0x66'));}else{_0x439f6b[_0x8cfb('0x51')]='IS_DISACTIVED';ut['logger']('[CampaignPreview]\x20Campaign\x20Queue:\x20',_0x439f6b[_0x8cfb('0x2b')]+_0x8cfb('0x67'));}emitCampaignPreview(_0x439f6b);}}Preview[_0x8cfb('0xe')]['loopCampaigns']=function(){var _0x20a6b2=this;setInterval(function(){_0x20a6b2[_0x8cfb('0x68')]();},0x7cf);};Preview[_0x8cfb('0xe')][_0x8cfb('0x68')]=function(){var _0x455675=this[_0x8cfb('0x12')];this[_0x8cfb('0x69')]+=0x1;for(var _0x357162 in _0x455675){if(_0x455675[_0x8cfb('0x6a')](_0x357162)&&(_0x455675[_0x357162]['dialMethod']===_0x8cfb('0x5')||_0x455675[_0x357162][_0x8cfb('0x38')]===_0x8cfb('0x6b'))&&_0x455675[_0x357162]['type']===_0x8cfb('0x2a')){if(this['clockClearZombieChannels']>0x7){this[_0x8cfb('0x69')]=0x0;this['clearZombieChannels']();}}if(_0x455675[_0x8cfb('0x6a')](_0x357162)&&_0x455675[_0x357162]['dialMethod']===_0x8cfb('0x5')&&_0x455675[_0x357162][_0x8cfb('0x29')]===_0x8cfb('0x2a')){if(_0x455675[_0x357162]['dialActive']){this[_0x8cfb('0x6c')](_0x455675[_0x357162]);this[_0x8cfb('0x6d')](_0x455675[_0x357162]);}else{notSendMessagesQueue(_0x455675[_0x357162]);}}}};Preview[_0x8cfb('0xe')]['clearZombieChannel']=function(_0x5c2617){var _0x11cb23=this;this[_0x8cfb('0x6e')][_0x8cfb('0xf')](function(){if(!_[_0x8cfb('0x6f')](_0x11cb23[_0x8cfb('0x15')][_0x5c2617])){loggerAction[_0x8cfb('0x70')](_0x8cfb('0x71'),_0x5c2617,'Queue',_0x11cb23[_0x8cfb('0x15')][_0x5c2617][_0x8cfb('0x72')],_0x8cfb('0x73'),JSON[_0x8cfb('0x5b')](_0x11cb23[_0x8cfb('0x12')][_0x11cb23[_0x8cfb('0x15')][_0x5c2617][_0x8cfb('0x72')]][_0x8cfb('0x61')]),_0x8cfb('0x74'),JSON[_0x8cfb('0x5b')](_0x11cb23[_0x8cfb('0x12')][_0x11cb23['actions'][_0x5c2617][_0x8cfb('0x72')]][_0x8cfb('0x30')]),JSON[_0x8cfb('0x5b')](_0x11cb23['actions'][_0x5c2617][_0x8cfb('0x75')]),JSON[_0x8cfb('0x5b')](_[_0x8cfb('0x76')](_0x11cb23[_0x8cfb('0x15')][_0x5c2617],[_0x8cfb('0x77'),_0x8cfb('0x78'),'VoiceQueueId',_0x8cfb('0x79')])));return ami['Action']({'action':'status','channel':_0x11cb23[_0x8cfb('0x15')][_0x5c2617][_0x8cfb('0x7a')]})['catch'](function(_0xb67e1b){if(_0xb67e1b[_0x8cfb('0x51')]===_0x8cfb('0x7b')){setTimeout(function(){if(_0x11cb23['actions'][_0x5c2617]){ut[_0x8cfb('0x7c')](_0x11cb23[_0x8cfb('0x12')][_0x11cb23[_0x8cfb('0x15')][_0x5c2617][_0x8cfb('0x72')]],_0x8cfb('0x7d'));if(_0x11cb23[_0x8cfb('0x15')][_0x5c2617]['dialAnswer']===!![]){ut[_0x8cfb('0x7e')](_0x11cb23[_0x8cfb('0x12')][_0x11cb23[_0x8cfb('0x15')][_0x5c2617][_0x8cfb('0x72')]],_0x8cfb('0x7d'));ut['loggerError']('[Dialer][checkChannel][pTalking][Preview]'+_0x5c2617,_0x11cb23[_0x8cfb('0x15')][_0x5c2617][_0x8cfb('0x72')]);}ut[_0x8cfb('0x7f')](_0x8cfb('0x80')+_0x5c2617,_0x11cb23[_0x8cfb('0x15')][_0x5c2617][_0x8cfb('0x72')]);delete _0x11cb23['actions'][_0x5c2617];}},0x2328);}});}});};Preview['prototype'][_0x8cfb('0x81')]=function(){var _0x1985a0=this;loggerAction['info'](_0x8cfb('0x82'),_[_0x8cfb('0x83')](this[_0x8cfb('0x15')]));for(var _0x2c0c6a in this[_0x8cfb('0x15')]){if(_0x1985a0['actions'][_0x8cfb('0x6a')](_0x2c0c6a)){_0x1985a0[_0x8cfb('0x84')](_0x2c0c6a);}}};Preview[_0x8cfb('0xe')][_0x8cfb('0x6d')]=function(_0x1ccbd2){var _0x4d72b2=this;rpcDb[_0x8cfb('0x85')](_0x1ccbd2['id'],ut[_0x8cfb('0x86')](this[_0x8cfb('0x16')]))['then'](function(_0x34cf2c){if(!_[_0x8cfb('0x6f')](_0x34cf2c)){for(var _0x297ee5=0x0;_0x297ee5<_0x34cf2c[_0x8cfb('0x87')];_0x297ee5+=0x1){if(ut[_0x8cfb('0x88')](_0x34cf2c[_0x297ee5][_0x8cfb('0x89')])<_0x1ccbd2[_0x8cfb('0x8a')]*0x3c){_0x4d72b2[_0x8cfb('0x8b')](_0x34cf2c[_0x297ee5]['id'])[_0x8cfb('0x8c')](ut[_0x8cfb('0x8d')]('[RecallMe]'))[_0x8cfb('0x8e')](ut[_0x8cfb('0x8d')]('[RecallMe]'));}else{var _0x2ea0d2=new Action(_0x34cf2c[_0x297ee5],_0x1ccbd2);_0x2ea0d2[_0x8cfb('0x8f')]=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');_0x1ccbd2['outboundReCallsDay']+=0x1;ut[_0x8cfb('0x90')](_0x2ea0d2,0x17,_0x8cfb('0x91'));if(_0x1ccbd2[_0x8cfb('0x92')]){rpcDb[_0x8cfb('0x93')](ut[_0x8cfb('0x94')](_0x34cf2c[_0x297ee5]));rpcDb[_0x8cfb('0x95')](_0x2ea0d2,'[HistoryDialRecallInQueue][historyCatch]');}else{ut[_0x8cfb('0x90')](_0x2ea0d2,0x16,'RecallFailedTimeout');rpcDb[_0x8cfb('0x95')](_0x2ea0d2,'[HistoryRecallClose]');rpcDb[_0x8cfb('0x96')](_0x2ea0d2,_0x8cfb('0x97'));}}}}})[_0x8cfb('0x8e')](ut[_0x8cfb('0x8d')](_0x8cfb('0x98')));};Preview[_0x8cfb('0xe')][_0x8cfb('0x6c')]=function(_0x3e12d1){_0x3e12d1[_0x8cfb('0x60')]=!![];if(ut['IsNotLoggedIn'](_0x3e12d1[_0x8cfb('0x2f')])){_0x3e12d1[_0x8cfb('0x51')]=_0x8cfb('0x99');}else if(!ut[_0x8cfb('0x9a')](_0x3e12d1[_0x8cfb('0x37')])){_0x3e12d1['message']=_0x8cfb('0x63');}else if(!this[_0x8cfb('0x9b')](_0x3e12d1[_0x8cfb('0x58')])){if(!this[_0x8cfb('0x9b')](_0x3e12d1[_0x8cfb('0x9c')])){_0x3e12d1[_0x8cfb('0x51')]='TRUNK_IS_NOT_REACHABLE';}else{_0x3e12d1[_0x8cfb('0x51')]=_0x8cfb('0x9d');}}else{_0x3e12d1[_0x8cfb('0x51')]=_0x8cfb('0x9d');}emitCampaignPreview(_0x3e12d1);};Preview[_0x8cfb('0xe')][_0x8cfb('0x9e')]=function(_0x3fb2fa,_0x3979d3,_0x4f7cc3){var _0x336515=this;var _0x362eab=this['actions'][_0x3979d3];var _0x3324be=this[_0x8cfb('0x12')][_0x362eab[_0x8cfb('0x72')]];var _0x4d3347;if(_0x3324be){switch(_0x4f7cc3){case'1':_0x3324be['outboundNoSuchCallsDay']+=0x1;_0x362eab[_0x8cfb('0x9f')]=ut[_0x8cfb('0xa0')](_0x362eab);ut[_0x8cfb('0x90')](_0x362eab,0x0,_0x8cfb('0xa1'));rpcDb['createCustomerHistory'](_0x362eab,_0x8cfb('0xa2'));if(ut[_0x8cfb('0xa0')](_0x362eab)>=_0x3324be[_0x8cfb('0xa3')]){_0x4d3347=ut[_0x8cfb('0xa4')](_0x362eab,0xf,_0x8cfb('0xa5'));rpcDb['createCustomerFinal'](_0x4d3347,'[callProgressDetectingCustomer][logNoSuchGlobal]');}else{rpcDb[_0x8cfb('0x96')](_0x362eab,'[callProgressDetectingCustomer][logNoSuchGlobal]');}delete this[_0x8cfb('0x15')][_0x3fb2fa[_0x8cfb('0xa6')]];break;case'ANSWER':var _0x5b14fc=moment()[_0x8cfb('0x5d')](_0x8cfb('0xa7'));_0x362eab[_0x8cfb('0xa8')]=_0x5b14fc;_0x362eab['answertime']=_0x5b14fc;_0x362eab['dialAnswer']=!![];_0x3324be['pTalking']+=0x1;logger[_0x8cfb('0x70')](_0x8cfb('0xa9'),_0x362eab[_0x8cfb('0xaa')],_0x8cfb('0xab'),_0x3324be[_0x8cfb('0x2b')],_0x8cfb('0x74'),_0x3324be[_0x8cfb('0x30')]);ami[_0x8cfb('0x28')](_0x8cfb('0xac'),ut[_0x8cfb('0xad')](_0x362eab,_0x8cfb('0xae')));if(_0x3324be[_0x8cfb('0xaf')]){ami['emit'](_0x8cfb('0xb0'),ut[_0x8cfb('0xb1')](_0x362eab));}break;case'16':ami['emit'](_0x8cfb('0xb2'),ut['buildObj'](_0x362eab,_0x8cfb('0xb3')));emitVoiceQueueChannelRemove(ut[_0x8cfb('0xad')](_0x362eab,'complete'));_0x3324be[_0x8cfb('0x3d')]+=0x1;_0x3324be['total']+=0x1;_0x3324be[_0x8cfb('0x2d')]+=0x1;ut[_0x8cfb('0x7e')](_0x3324be,_0x8cfb('0xb4'));_0x362eab['countglobal']=ut[_0x8cfb('0xa0')](_0x362eab);ut[_0x8cfb('0x90')](_0x362eab,0x4,_0x8cfb('0xb5'));rpcDb[_0x8cfb('0x95')](_0x362eab,'[callProgressDetectingCustomer][logAnswer]');rpcDb[_0x8cfb('0x96')](_0x362eab,'[callProgressDetectingCustomer][logAnswerGlobal]');rpcDb[_0x8cfb('0xb6')](_0x362eab);_0x3324be['sumDuration']+=_0x362eab['talktime'];_0x3324be['sumBillable']+=_0x362eab['talktime'];logger[_0x8cfb('0x70')]('[syncHangup][talking][decrement]',_0x362eab[_0x8cfb('0xaa')],_0x8cfb('0xab'),_0x3324be[_0x8cfb('0x2b')],_0x8cfb('0x74'),_0x3324be['pTalking']);delete this[_0x8cfb('0x15')][_0x3fb2fa[_0x8cfb('0xa6')]];break;case _0x8cfb('0xb7'):_0x3324be[_0x8cfb('0x3f')]+=0x1;_0x362eab[_0x8cfb('0xb8')]+=0x1;_0x362eab['countglobal']=ut[_0x8cfb('0xa0')](_0x362eab);ut['logCustomer'](_0x362eab,0x5,_0x8cfb('0xb9'));rpcDb[_0x8cfb('0x95')](_0x362eab,_0x8cfb('0xba'));if(ut['totalGlobal'](_0x362eab)>=_0x3324be[_0x8cfb('0xa3')]){_0x4d3347=ut[_0x8cfb('0xa4')](_0x362eab,0xf,_0x8cfb('0xa5'));rpcDb[_0x8cfb('0x96')](_0x4d3347,'[callProgressDetectingCustomer][logBusyGlobal]');}else{if(_0x362eab[_0x8cfb('0xb8')]>=_0x3324be['dialBusyMaxRetry']){rpcDb[_0x8cfb('0x96')](_0x362eab,_0x8cfb('0xba'));}else{rpcDb[_0x8cfb('0xbb')](ut[_0x8cfb('0xbc')](_0x362eab,'countbusyretry',_0x3324be[_0x8cfb('0xbd')]),_0x362eab[_0x8cfb('0xbe')],_0x362eab['activeContact']);}}break;case _0x8cfb('0xbf'):_0x3324be[_0x8cfb('0x43')]+=0x1;_0x362eab[_0x8cfb('0xc0')]+=0x1;_0x362eab['countglobal']=ut[_0x8cfb('0xa0')](_0x362eab);ut['logCustomer'](_0x362eab,0x3,'NoAnswer');rpcDb[_0x8cfb('0x95')](_0x362eab,_0x8cfb('0xc1'));if(ut['totalGlobal'](_0x362eab)>=_0x3324be[_0x8cfb('0xa3')]){_0x4d3347=ut[_0x8cfb('0xa4')](_0x362eab,0xf,_0x8cfb('0xa5'));rpcDb[_0x8cfb('0x96')](_0x4d3347,_0x8cfb('0xc2'));}else{if(_0x362eab[_0x8cfb('0xc0')]>=_0x3324be[_0x8cfb('0xc3')]){rpcDb[_0x8cfb('0x96')](_0x362eab,_0x8cfb('0xc1'));}else{rpcDb[_0x8cfb('0xbb')](ut[_0x8cfb('0xbc')](_0x362eab,'countnoanswerretry',_0x3324be['dialNoAnswerRetryFrequency']),_0x362eab['unlockAgent'],_0x362eab[_0x8cfb('0xc4')]);}}break;case _0x8cfb('0xc5'):_0x3324be[_0x8cfb('0x40')]+=0x1;_0x362eab[_0x8cfb('0xc6')]+=0x1;_0x362eab[_0x8cfb('0x9f')]=ut[_0x8cfb('0xa0')](_0x362eab);ut[_0x8cfb('0x90')](_0x362eab,0x8,'Congestion');rpcDb[_0x8cfb('0x95')](_0x362eab,_0x8cfb('0xc7'));if(ut[_0x8cfb('0xa0')](_0x362eab)>=_0x3324be[_0x8cfb('0xa3')]){_0x4d3347=ut[_0x8cfb('0xa4')](_0x362eab,0xf,_0x8cfb('0xa5'));rpcDb['createCustomerFinal'](_0x4d3347,_0x8cfb('0xc8'));}else{if(_0x362eab[_0x8cfb('0xc6')]>=_0x3324be[_0x8cfb('0xc9')]){rpcDb[_0x8cfb('0x96')](_0x362eab,_0x8cfb('0xc7'));}else{rpcDb['rescheduleContact'](ut['scheduledAt'](_0x362eab,_0x8cfb('0xc6'),_0x3324be[_0x8cfb('0xbd')]),_0x362eab[_0x8cfb('0xbe')],_0x362eab[_0x8cfb('0xc4')]);}}break;case'CANCEL':_0x3324be[_0x8cfb('0xca')]+=0x1;_0x362eab['countglobal']=ut[_0x8cfb('0xa0')](_0x362eab);ut['logCustomer'](_0x362eab,0x14,'AgentReject');rpcDb[_0x8cfb('0x95')](_0x362eab,_0x8cfb('0xcb'));if(_0x362eab[_0x8cfb('0xbe')]){rpcDb[_0x8cfb('0xcc')](_0x362eab[_0x8cfb('0xcd')]);}if(_0x362eab[_0x8cfb('0xc4')]){rpcDb[_0x8cfb('0xce')](_0x362eab['idContact']);}break;default:if(_0x362eab[_0x8cfb('0x75')]){ut[_0x8cfb('0x7e')](_0x3324be,_0x8cfb('0xcf'));ut[_0x8cfb('0x7f')](_0x8cfb('0xd0')+_0x3324be['name'],_0x3fb2fa);}_0x3324be[_0x8cfb('0x47')]+=0x1;_0x362eab[_0x8cfb('0x9f')]=ut[_0x8cfb('0xa0')](_0x362eab);ut[_0x8cfb('0x90')](_0x362eab,0xc,_0x3fb2fa[_0x8cfb('0xd1')]||_0x3fb2fa[_0x8cfb('0xd2')]);rpcDb[_0x8cfb('0x95')](_0x362eab,_0x8cfb('0xd3'));if(ut[_0x8cfb('0xa0')](_0x362eab)>=_0x3324be[_0x8cfb('0xa3')]){_0x4d3347=ut[_0x8cfb('0xa4')](_0x362eab,0xf,_0x8cfb('0xa5'));rpcDb[_0x8cfb('0x96')](_0x4d3347,_0x8cfb('0xd4'));}else{rpcDb['createCustomerFinal'](_0x362eab,_0x8cfb('0xd4'));}delete this[_0x8cfb('0x15')][_0x3fb2fa['linkedid']];}if(!(_0x362eab[_0x8cfb('0x75')]&&_0x4f7cc3==='16')){ut[_0x8cfb('0x7c')](_0x3324be,_0x8cfb('0xd5'));logger[_0x8cfb('0x70')](_0x8cfb('0xd6'),_0x362eab['uniqueid'],_0x8cfb('0xab'),_0x3324be[_0x8cfb('0x2b')],_0x8cfb('0x73'),_0x3324be[_0x8cfb('0x61')]);}if(_0x4f7cc3!==_0x8cfb('0xd7')){delete this[_0x8cfb('0x15')][_0x3fb2fa[_0x8cfb('0xa6')]];delete this['actions'][_0x3fb2fa[_0x8cfb('0xd8')]];}}};Preview[_0x8cfb('0xe')]['callProgressDetectingAgent']=function(_0x5aeed4,_0x190e9c,_0x3d2f58){if(_[_0x8cfb('0xd9')](_0x190e9c)&&_0x8cfb('0xda')!==typeof _0x190e9c){return;}if(_[_0x8cfb('0xd9')](_0x3d2f58)&&'object'!==typeof _0x3d2f58){return;}switch(_0x3d2f58[_0x8cfb('0xdb')]){case'0':ut[_0x8cfb('0xdc')](_0x5aeed4,0x0,_0x8cfb('0xa1'));rpcDb[_0x8cfb('0xdd')](_0x5aeed4,'[callProgressDetectingAgent][logNoSuch]');break;case'3':ut[_0x8cfb('0xdc')](_0x5aeed4,0x3,_0x8cfb('0xde'));rpcDb['createAgentHistory'](_0x5aeed4,_0x8cfb('0xdf'));break;case'5':ut[_0x8cfb('0xdc')](_0x5aeed4,0x5,_0x8cfb('0xb9'));rpcDb[_0x8cfb('0xdd')](_0x5aeed4,'[callProgressDetectingAgent][logBusy]');break;case'8':ut['logAgent'](_0x5aeed4,0x8,_0x8cfb('0xe0'));rpcDb[_0x8cfb('0xdd')](_0x5aeed4,'[callProgressDetectingAgent][logCongestion]');break;case'22':ut[_0x8cfb('0xdc')](_0x5aeed4,0x16,_0x8cfb('0xe1'));rpcDb['createAgentHistory'](_0x5aeed4,_0x8cfb('0xe2'));break;default:ut[_0x8cfb('0xdc')](_0x5aeed4,0xc,_0x3d2f58['reason']);rpcDb[_0x8cfb('0xdd')](_0x5aeed4,_0x8cfb('0xe3'));}ut[_0x8cfb('0x7c')](_0x190e9c,_0x8cfb('0xe4'));logger[_0x8cfb('0x70')](_0x8cfb('0xe5'),_0x5aeed4[_0x8cfb('0xaa')],_0x8cfb('0xab'),_0x190e9c[_0x8cfb('0x2b')],'originated:\x20',_0x190e9c[_0x8cfb('0x61')]);delete this['actions'][_0x5aeed4[_0x8cfb('0xaa')]];};Preview['prototype'][_0x8cfb('0xe6')]=function(_0x569f1a,_0x289aa7,_0x92ea0b,_0x49c94d,_0x16e200){var _0x3602eb=this;return new BPromise(function(_0x1868ef,_0x28339b){if(_[_0x8cfb('0x6f')](_0x289aa7)||_[_0x8cfb('0x6f')](_0x289aa7[_0x8cfb('0xe7')])||_['isNil'](_0x289aa7[_0x8cfb('0xe7')][_0x8cfb('0xe8')])||_[_0x8cfb('0x6f')](_0x289aa7[_0x8cfb('0xe9')])){_0x28339b(ut[_0x8cfb('0x51')](_0x8cfb('0xea'),_0x49c94d,_0x16e200));return;}var _0x5b2f9f=uuid['v4']();var _0x4e911b=_0x3602eb['campaignsPreview'][_0x289aa7[_0x8cfb('0xeb')][_0x8cfb('0x2b')]];var _0x4022a5=_0x92ea0b?_0x3602eb['agents'][_0x92ea0b]['id']:undefined;_0x3602eb[_0x8cfb('0x15')][_0x5b2f9f]=new Action(_0x289aa7,_0x4e911b,_0x5b2f9f,_0x92ea0b,_0x4022a5);var _0x399186=_0x3602eb[_0x8cfb('0x15')][_0x5b2f9f];_0x399186[_0x8cfb('0xbe')]=_0x49c94d;_0x399186['activeContact']=_0x16e200;_0x399186[_0x8cfb('0xec')]=_0x92ea0b;if(_[_0x8cfb('0xed')](_0x569f1a)){_0x3602eb[_0x8cfb('0xee')](_0x399186,_0x4e911b,_0x289aa7,_0x92ea0b)['then'](function(_0xd313ad){logger[_0x8cfb('0x70')](_0x8cfb('0xef'),_0x8cfb('0xf0')+_0x399186['queue']+_0x8cfb('0xf1')+_0x399186[_0x8cfb('0xcd')],JSON[_0x8cfb('0x5b')](_0xd313ad));ami[_0x8cfb('0x28')](_0x8cfb('0xf2'),ut[_0x8cfb('0xad')](_0x399186,_0x8cfb('0xf3')));_0x1868ef(ut[_0x8cfb('0x51')](_0x8cfb('0xf4')));})[_0x8cfb('0x8e')](function(_0x4b9f70){ut[_0x8cfb('0x64')]('[Preview][execCall][failure]',_0x4b9f70);_0x28339b(ut[_0x8cfb('0x51')](_0x8cfb('0xf5'),_0x49c94d,_0x16e200));});}else{_0x4e911b[_0x8cfb('0x3e')]+=0x1;ut['logBlacklist'](_0x399186);rpcDb['createHistory'](_0x399186,_0x8cfb('0xf6'));delete _0x3602eb[_0x8cfb('0x15')][_0x5b2f9f];_0x28339b(ut[_0x8cfb('0x51')](_0x8cfb('0xf7'),_0x49c94d,_0x16e200));}});};Preview[_0x8cfb('0xe')][_0x8cfb('0x9b')]=function(_0x526692){return!_['isNil'](_0x526692)&&!_[_0x8cfb('0x6f')](_0x526692[_0x8cfb('0x2b')])&&!_['isNil'](_0x526692[_0x8cfb('0x59')])&&_0x526692['active']&&!_[_0x8cfb('0x6f')](this['trunks'][util[_0x8cfb('0x5d')](_0x8cfb('0xf8'),_0x526692[_0x8cfb('0x2b')])])&&!_['isNil'](this[_0x8cfb('0x14')][util[_0x8cfb('0x5d')](_0x8cfb('0xf8'),_0x526692[_0x8cfb('0x2b')])][_0x8cfb('0xf9')])&&(this[_0x8cfb('0x14')][util[_0x8cfb('0x5d')](_0x8cfb('0xf8'),_0x526692['name'])][_0x8cfb('0xf9')]===_0x8cfb('0xfa')||this[_0x8cfb('0x14')][util[_0x8cfb('0x5d')](_0x8cfb('0xf8'),_0x526692['name'])][_0x8cfb('0xf9')]===_0x8cfb('0xfb'));};Preview[_0x8cfb('0xe')][_0x8cfb('0x8b')]=function(_0xa1a0a8,_0x7f0c98){var _0x141937=this;return new BPromise(function(_0x1dcbe8,_0x72983b){_0x141937[_0x8cfb('0xfc')](_0xa1a0a8,_0x7f0c98)[_0x8cfb('0x8c')](function(_0x22e3d8){_0x1dcbe8(_[_0x8cfb('0x76')](_0x22e3d8,['message']));})[_0x8cfb('0x8e')](function(_0x5b3fd4){if(_0x5b3fd4[_0x8cfb('0xfd')]){rpcDb[_0x8cfb('0xcc')](_0xa1a0a8);}if(_0x5b3fd4[_0x8cfb('0x59')]){rpcDb[_0x8cfb('0xce')](_0xa1a0a8);}_0x72983b(_[_0x8cfb('0x76')](_0x5b3fd4,[_0x8cfb('0x51')]));});});};Preview[_0x8cfb('0xe')][_0x8cfb('0xfc')]=function(_0x31e6b5,_0x15b428){var _0x4a7830=this;return new BPromise(function(_0x6b421d,_0x4e093a){var _0x538934,_0x169ea9;rpcDb['getContactPreview'](_0x31e6b5)['then'](function(_0x843d4f){if(!_[_0x8cfb('0x6f')](_0x843d4f[0x0])){_0x169ea9=_0x843d4f[0x0][_0x8cfb('0xfe')]?![]:!![];_0x538934=_0x843d4f[0x0][_0x8cfb('0xfe')]?!![]:![];_0x538934=_0x15b428?!![]:_0x538934;}var _0xe1ecc=_0x4a7830[_0x8cfb('0xff')](_0x843d4f);if(_0xe1ecc['isValid']){rpcDb[_0x8cfb('0x100')](_['pick'](_0x843d4f[0x0],[_0x8cfb('0xe9'),_0x8cfb('0x101')]))[_0x8cfb('0x8c')](function(_0x4a2a06){_0x4a7830[_0x8cfb('0xe6')](_0x4a2a06,_0x843d4f[0x0],_0x15b428,_0x169ea9,_0x538934)[_0x8cfb('0x8c')](function(_0x58ce7e){_0x6b421d(_0x58ce7e);})[_0x8cfb('0x8e')](function(_0x5efa04){_0x4e093a(_0x5efa04);});})[_0x8cfb('0x8e')](function(_0x427ac9){ut[_0x8cfb('0x64')](_0x8cfb('0x102'),_0x427ac9);_0x4e093a(ut[_0x8cfb('0x51')]('Call\x20unsuccessful',_0x169ea9,_0x538934));});}else{_0x4e093a(ut[_0x8cfb('0x51')](_0xe1ecc[_0x8cfb('0x51')],_0x169ea9,_0x538934));}})['catch'](function(_0x4a79bb){ut[_0x8cfb('0x64')](_0x8cfb('0x103'),_0x4a79bb);_0x4e093a(ut[_0x8cfb('0x51')]('Call\x20unsuccessful',![],!![]));});});};Preview[_0x8cfb('0xe')][_0x8cfb('0xff')]=function(_0x59429e){if(_[_0x8cfb('0x6f')](_0x59429e)||_[_0x8cfb('0xed')](_0x59429e)||!_[_0x8cfb('0x6f')](_0x59429e[0x0]['Agent'])&&_[_0x8cfb('0x6f')](_0x59429e[0x0][_0x8cfb('0x104')][_0x8cfb('0x2b')])){ut[_0x8cfb('0x64')]('[Preview][validateContact][Empty\x20Contact]',_0x59429e);return{'isValid':![],'message':_0x8cfb('0x105')};}var _0x2fca95=this[_0x8cfb('0x12')][_0x59429e[0x0][_0x8cfb('0xeb')]['name']];_0x2fca95[_0x8cfb('0x51')]='ACTIVE';if(_[_0x8cfb('0x6f')](_0x2fca95)){ut[_0x8cfb('0x64')](_0x8cfb('0x106'),_0x2fca95);return{'isValid':![],'message':_0x8cfb('0x107')};}if(!this[_0x8cfb('0x9b')](_0x2fca95[_0x8cfb('0x58')])){ut[_0x8cfb('0x64')](_0x8cfb('0x108'),_0x8cfb('0x109')+_0x2fca95[_0x8cfb('0x2b')]+_0x8cfb('0x10a'));if(!this[_0x8cfb('0x9b')](_0x2fca95[_0x8cfb('0x9c')])){ut[_0x8cfb('0x64')](_0x8cfb('0x108'),_0x2fca95[_0x8cfb('0x2b')]+_0x8cfb('0x10b'));return{'isValid':![],'message':_0x8cfb('0x10c')};}}if(!ut[_0x8cfb('0x9a')](_0x2fca95['dialActive'])){ut['logger'](_0x8cfb('0x10d'),_0x2fca95[_0x8cfb('0x2b')]+_0x8cfb('0x10e'));return{'isValid':![],'message':_0x8cfb('0x109')+_0x2fca95[_0x8cfb('0x2b')]+'\x20Not\x20Active'};}return{'isValid':!![],'message':_0x8cfb('0x10f')};};Preview[_0x8cfb('0xe')][_0x8cfb('0xee')]=function(_0x53f9b2,_0x2bd215,_0x283679,_0x26da80){var _0x12ffb1=this;return new BPromise(function(_0x3a1c8a,_0x2deeb3){var _0x4dd125=_0x53f9b2['uniqueid'];var _0x817752=_0x12ffb1['isTrunkReachable'](_0x2bd215[_0x8cfb('0x58')])?util[_0x8cfb('0x5d')](_0x8cfb('0x110'),_0x2bd215[_0x8cfb('0x58')][_0x8cfb('0x2b')],_['isNil'](_0x2bd215[_0x8cfb('0x3c')])?'':_0x2bd215[_0x8cfb('0x3c')][_0x8cfb('0x111')]()||'',_0x2bd215[_0x8cfb('0x112')]>0x0?_0x283679[_0x8cfb('0xe7')][_0x8cfb('0xe8')][_0x8cfb('0x113')](_0x2bd215['dialCutDigit']):_0x283679['Contact'][_0x8cfb('0xe8')]):util[_0x8cfb('0x5d')](_0x8cfb('0x110'),_[_0x8cfb('0x6f')](_0x2bd215[_0x8cfb('0x9c')])?_0x2bd215['Trunk']['name']:_0x2bd215[_0x8cfb('0x9c')][_0x8cfb('0x2b')],_['isNil'](_0x2bd215['dialPrefix'])?'':_0x2bd215[_0x8cfb('0x3c')][_0x8cfb('0x111')]()||'',_0x2bd215['dialCutDigit']>0x0?_0x283679[_0x8cfb('0xe7')][_0x8cfb('0xe8')][_0x8cfb('0x113')](_0x2bd215[_0x8cfb('0x112')]):_0x283679[_0x8cfb('0xe7')]['phone']);var _0x4f5b5b=_0x12ffb1[_0x8cfb('0x9b')](_0x2bd215[_0x8cfb('0x58')])?ut[_0x8cfb('0x114')](_0x2bd215[_0x8cfb('0x58')][_0x8cfb('0x115')],_0x2bd215[_0x8cfb('0x39')],_0x2bd215[_0x8cfb('0x116')]>0x0?ut[_0x8cfb('0x117')](_0x2bd215[_0x8cfb('0x3a')],_0x2bd215[_0x8cfb('0x116')]):_0x2bd215['dialOriginateCallerIdNumber']):ut[_0x8cfb('0x114')](_[_0x8cfb('0x6f')](_0x2bd215[_0x8cfb('0x9c')])?_0x2bd215['Trunk'][_0x8cfb('0x115')]:_0x2bd215[_0x8cfb('0x9c')]['callerid'],_0x2bd215[_0x8cfb('0x39')],_0x2bd215[_0x8cfb('0x116')]>0x0?ut[_0x8cfb('0x117')](_0x2bd215[_0x8cfb('0x3a')],_0x2bd215['dialRandomLastDigitCallerIdNumber']):_0x2bd215[_0x8cfb('0x3a')]);if(_0x4f5b5b){_0x53f9b2['originatecalleridname']=ut[_0x8cfb('0x118')](_0x4f5b5b);_0x53f9b2[_0x8cfb('0x119')]=ut['extractCalleridNumber'](_0x4f5b5b);}var _0x3ffaee=ut[_0x8cfb('0x11a')](_0x2bd215,_0x283679,_0x817752,_0x4f5b5b,_0x4dd125,_0x53f9b2);_[_0x8cfb('0x11b')](_0x53f9b2,ut[_0x8cfb('0x11c')](_0x3ffaee));_0x53f9b2[_0x8cfb('0x8f')]=moment()[_0x8cfb('0x5d')](_0x8cfb('0xa7'));ami[_0x8cfb('0x11d')](ut[_0x8cfb('0x11e')](_0x53f9b2,_0x2bd215,_0x3ffaee,_0x53f9b2[_0x8cfb('0xc4')],_0x26da80))[_0x8cfb('0x8c')](function(_0x1963fb){_0x2bd215[_0x8cfb('0x61')]+=0x1;logger[_0x8cfb('0x70')]('[originated][increment]',_0x4dd125,_0x8cfb('0xab'),_0x2bd215['name'],_0x8cfb('0x73'),_0x2bd215[_0x8cfb('0x61')]);_0x3a1c8a(_0x1963fb);})[_0x8cfb('0x8e')](function(_0x3623e3){ut[_0x8cfb('0xdc')](_0x53f9b2,0xe,_0x8cfb('0x11f'));rpcDb[_0x8cfb('0xdd')](_0x53f9b2,_0x8cfb('0x120'));_0x2deeb3(_0x3623e3);});});};Preview[_0x8cfb('0xe')][_0x8cfb('0x20')]=function(_0x4c9f93){if(this[_0x8cfb('0x15')][_0x4c9f93[_0x8cfb('0xa6')]]){this['actions'][_0x4c9f93['linkedid']]['channel']=_0x4c9f93[_0x8cfb('0x7a')];}};Preview['prototype']['syncOriginateResponse']=function(_0x346ed3){var _0x3c352b=this;var _0x39dc9d=this[_0x8cfb('0x15')][_0x346ed3[_0x8cfb('0x121')]];if(_0x39dc9d){if(_0x39dc9d[_0x8cfb('0xec')]&&this['agents'][_0x39dc9d[_0x8cfb('0xec')]]){ut[_0x8cfb('0x122')](_0x39dc9d,this[_0x8cfb('0x16')][_0x39dc9d[_0x8cfb('0xec')]][_0x8cfb('0x2b')],this[_0x8cfb('0x16')][_0x39dc9d['lookAgent']]['id']);}var _0x54abab=_[_0x8cfb('0x123')](_0x39dc9d);_0x54abab['responsetime']=moment()['format'](_0x8cfb('0xa7'));var _0x4d2953=_0x3c352b[_0x8cfb('0x12')][_0x39dc9d[_0x8cfb('0x72')]];if(ut['isFailure'](_0x346ed3['response'])){if(_0x39dc9d[_0x8cfb('0xbe')]){rpcDb['unlockContact'](_0x39dc9d['idContact']);}if(_0x39dc9d[_0x8cfb('0xc4')]){rpcDb['disableContact'](_0x39dc9d['idContact']);}ami[_0x8cfb('0x28')]('custom:agentringnoanswer',ut['buildObj'](_0x39dc9d,_0x8cfb('0x124')));this['callProgressDetectingAgent'](_0x54abab,_0x4d2953,_0x346ed3);}else{_0x39dc9d[_0x8cfb('0x8f')]=moment()['format'](_0x8cfb('0xa7'));ut[_0x8cfb('0xdc')](_0x54abab,0x4,_0x8cfb('0xb5'));rpcDb[_0x8cfb('0xdd')](_0x54abab,_0x8cfb('0x125'));}}};Preview[_0x8cfb('0xe')][_0x8cfb('0x1a')]=function(_0xb0cd48){var _0x5eda9d=this;var _0x476907=this['actions'][_0xb0cd48['linkedid']];var _0x21cb8b;if(_0x476907){_0x21cb8b=this[_0x8cfb('0x12')][_0x476907[_0x8cfb('0x72')]];logger['info'](_0x8cfb('0x126'),_0xb0cd48[_0x8cfb('0xa6')],'\x20Queue',_0x21cb8b[_0x8cfb('0x2b')],_0x8cfb('0x74'),_0x21cb8b['pTalking']);}if(this[_0x8cfb('0x15')][_0xb0cd48[_0x8cfb('0xa6')]]&&_0xb0cd48['linkedid']!==_0xb0cd48[_0x8cfb('0xaa')]){if(_0xb0cd48['cause']==='16'&&this['actions'][_0xb0cd48[_0x8cfb('0xa6')]][_0x8cfb('0x75')]){this[_0x8cfb('0x9e')](_0xb0cd48,_0xb0cd48[_0x8cfb('0xa6')],_0xb0cd48[_0x8cfb('0x127')]);}else if(this[_0x8cfb('0x15')][_0xb0cd48[_0x8cfb('0xa6')]][_0x8cfb('0x75')]){logger[_0x8cfb('0x70')](_0x8cfb('0x128'),_0xb0cd48['linkedid'],_0xb0cd48['cause'],_0x8cfb('0xab'),_0x21cb8b[_0x8cfb('0x2b')],_0x8cfb('0x74'),_0x21cb8b[_0x8cfb('0x30')]);this['callProgressDetectingCustomer'](_0xb0cd48,_0xb0cd48[_0x8cfb('0xa6')],_0xb0cd48[_0x8cfb('0x127')]);}}else if(_0x476907&&_[_0x8cfb('0x6f')](_0x476907[_0x8cfb('0x129')])&&_0x21cb8b[_0x8cfb('0x12a')]&&_0xb0cd48[_0x8cfb('0xa6')]===_0xb0cd48[_0x8cfb('0xaa')]&&_[_0x8cfb('0x6f')](_0xb0cd48[_0x8cfb('0xdb')])&&_0xb0cd48[_0x8cfb('0x127')]==='16'&&_0xb0cd48[_0x8cfb('0x12b')]==='6'&&_[_0x8cfb('0xd9')](_0x476907[_0x8cfb('0x12c')])){if(_0x476907[_0x8cfb('0xbe')]){rpcDb[_0x8cfb('0xcc')](_0x476907[_0x8cfb('0xcd')]);}if(_0x476907[_0x8cfb('0xc4')]){rpcDb['disableContact'](_0x476907['idContact']);}_0xb0cd48[_0x8cfb('0xdb')]='22';this['callProgressDetectingAgent'](_0x476907,_0x21cb8b,_0xb0cd48);}else if(_0x476907&&_0x476907[_0x8cfb('0x12c')]){if(_0xb0cd48[_0x8cfb('0x127')]==='16'&&this[_0x8cfb('0x15')][_0xb0cd48[_0x8cfb('0xa6')]]['dialAnswer']){logger[_0x8cfb('0x70')](_0x8cfb('0x12d'),_0xb0cd48[_0x8cfb('0xa6')],_0xb0cd48[_0x8cfb('0x127')],_0x8cfb('0xab'),_0x21cb8b['name'],_0x8cfb('0x74'),_0x21cb8b[_0x8cfb('0x30')]);this[_0x8cfb('0x9e')](_0xb0cd48,_0xb0cd48['linkedid'],_0xb0cd48['cause']);}else if(this[_0x8cfb('0x15')][_0xb0cd48[_0x8cfb('0xa6')]][_0x8cfb('0x75')]){logger['info'](_0x8cfb('0x128'),_0xb0cd48[_0x8cfb('0xa6')],_0xb0cd48[_0x8cfb('0x127')],'\x20Queue',_0x21cb8b[_0x8cfb('0x2b')],_0x8cfb('0x74'),_0x21cb8b[_0x8cfb('0x30')]);this[_0x8cfb('0x9e')](_0xb0cd48,_0xb0cd48[_0x8cfb('0xa6')],_0xb0cd48[_0x8cfb('0x127')]);}}};Preview['prototype']['syncDialEnd']=function(_0x4ad4b7){if(this[_0x8cfb('0x15')][_0x4ad4b7['destlinkedid']]&&_0x4ad4b7[_0x8cfb('0xd8')]!==_0x4ad4b7[_0x8cfb('0x12e')]){this[_0x8cfb('0x9e')](_0x4ad4b7,_0x4ad4b7['destlinkedid'],_0x4ad4b7[_0x8cfb('0xd2')]);}};Preview[_0x8cfb('0xe')]['syncHangupRequest']=function(_0x552374){if(this['actions'][_0x552374['linkedid']]&&_0x552374['linkedid']!==_0x552374['uniqueid']&&!this[_0x8cfb('0x15')][_0x552374[_0x8cfb('0xa6')]][_0x8cfb('0x75')]){if(_0x552374[_0x8cfb('0x127')]==='1'){this['callProgressDetectingCustomer'](_0x552374,_0x552374[_0x8cfb('0xa6')],_0x552374[_0x8cfb('0x127')]);}}};Preview[_0x8cfb('0xe')][_0x8cfb('0x12f')]=function(_0x2b71a2,_0x2aafee,_0xd4ebe9){if(this['actions'][_0x2b71a2]){if(_[_0x8cfb('0x6f')](this['actions'][_0x2b71a2]['variables'])){this[_0x8cfb('0x15')][_0x2b71a2]['variables']={};}this[_0x8cfb('0x15')][_0x2b71a2][_0x8cfb('0x130')][_0x2aafee]=_0xd4ebe9;}};Preview[_0x8cfb('0xe')][_0x8cfb('0x22')]=function(_0x988c1e){try{if(!_[_0x8cfb('0x6f')](_0x988c1e)){if(ut[_0x8cfb('0x131')](_[_0x8cfb('0x132')](_0x988c1e[_0x8cfb('0x133')])[0x0])){this[_0x8cfb('0x12f')](_0x988c1e[_0x8cfb('0xaa')],_[_0x8cfb('0x132')](_0x988c1e[_0x8cfb('0x133')])[0x0],_0x988c1e[_0x8cfb('0x134')]);}}}catch(_0x3a3f50){logger[_0x8cfb('0x135')](_0x8cfb('0x136'),util[_0x8cfb('0x137')](_0x3a3f50,{'showHidden':![],'depth':null}));}};Preview[_0x8cfb('0xe')]['syncAttendedTransfer']=function(_0x2394fa){if(_0x2394fa){if(this[_0x8cfb('0x15')][_0x2394fa[_0x8cfb('0x138')]]){this[_0x8cfb('0x15')][_0x2394fa[_0x8cfb('0x138')]][_0x8cfb('0x12c')]=!![];}}};Preview[_0x8cfb('0xe')][_0x8cfb('0x26')]=function(_0x162fef){if(_0x162fef){if(this[_0x8cfb('0x15')][_0x162fef[_0x8cfb('0x139')]]){this[_0x8cfb('0x15')][_0x162fef[_0x8cfb('0x139')]]['transfer']=!![];}}};module[_0x8cfb('0x13a')]=Preview;
\ No newline at end of file
index 796fc0c..3f9685f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xea7a=['unlockContact','[unlockContact]\x20','disableContact','[activeContact]\x20','crateCustomerReportQueue','type','uniqueid','calleridnum','calleridname','queue','answertime','queuecallerleaveAt','queuecallercompleteAt','connectedlinename','membername','context','from-sip','xcally-motion-preview','assigned','lastAssignedTo','queuecallerexitreason','COMPLETED','[voiceQueueReport]\x20','getContactRecallMe','[GetContactRecallMe]\x20','rescheduleContactInQueue','[rescheduleContactInQueue]\x20','util','bluebird','../../../config/logger','../rpc/cmHopper','../rpc/cmHopperFinal','../rpc/cmHopperHistory','../rpc/cmHopperBlack','../rpc/agentReportPreview','../rpc/voiceQueueReport','inspect','resolve','then','createHistory','catch','[createHistory]\x20','moveContactManagedDialer','checkIsBlackList','[checkIsBlackList]\x20','getContactPreview','[getContactPreview]\x20','createCustomerHistory','createCustomerFinal','UserId','active','rescheduleContact','[rescheduleContact]\x20','countReScheduled'];(function(_0x550db8,_0x1d1295){var _0x3d022d=function(_0x4dc693){while(--_0x4dc693){_0x550db8['push'](_0x550db8['shift']());}};_0x3d022d(++_0x1d1295);}(_0xea7a,0x15f));var _0xaea7=function(_0x554032,_0x3e4764){_0x554032=_0x554032-0x0;var _0x978161=_0xea7a[_0x554032];return _0x978161;};'use strict';var util=require(_0xaea7('0x0'));var BPromise=require(_0xaea7('0x1'));var logger=require(_0xaea7('0x2'))('preview');var _=require('lodash');var cmHopper=require(_0xaea7('0x3'));var cmHopperFinal=require(_0xaea7('0x4'));var cmHopperHistory=require(_0xaea7('0x5'));var cmHopperBlack=require(_0xaea7('0x6'));var voiceQueueRt=require('../rpc/voiceQueueRt');var agentReportPreview=require(_0xaea7('0x7'));var voiceQueueReport=require(_0xaea7('0x8'));function loggerCatch(_0x3cc899){return function(_0x39dd97){logger['error'](_0x3cc899,util[_0xaea7('0x9')](_0x39dd97,{'showHidden':![],'depth':null}));};}function create(_0x4a7af6){return BPromise[_0xaea7('0xa')]()[_0xaea7('0xb')](cmHopperHistory[_0xaea7('0xc')](_0x4a7af6))[_0xaea7('0xd')](loggerCatch(_0xaea7('0xe')));}function createAgent(_0x455cf7){return BPromise[_0xaea7('0xa')]()[_0xaea7('0xb')](agentReportPreview[_0xaea7('0xc')](_0x455cf7))[_0xaea7('0xd')](loggerCatch(_0xaea7('0xe')));}function moveContact(_0x303fc1){return BPromise[_0xaea7('0xa')]()[_0xaea7('0xb')](cmHopper[_0xaea7('0xf')](_0x303fc1,!![]))[_0xaea7('0xd')](loggerCatch('[moveContactManagedDialer]\x20'));}exports[_0xaea7('0x10')]=function(_0x5f88fe){return BPromise[_0xaea7('0xa')]()[_0xaea7('0xb')](cmHopperBlack[_0xaea7('0x10')](_0x5f88fe))[_0xaea7('0xd')](loggerCatch(_0xaea7('0x11')));};exports[_0xaea7('0x12')]=function(_0x23bc5c){return BPromise[_0xaea7('0xa')]()[_0xaea7('0xb')](cmHopper[_0xaea7('0x12')](_0x23bc5c))['catch'](loggerCatch(_0xaea7('0x13')));};exports['createHistory']=function(_0x11bced,_0x5cc23c){create(_0x11bced)[_0xaea7('0xd')](loggerCatch(_0x5cc23c));moveContact(_0x11bced)[_0xaea7('0xd')](loggerCatch(_0x5cc23c));};exports['createAgentHistory']=function(_0x753809,_0x39a044){createAgent(_0x753809)[_0xaea7('0xd')](loggerCatch(_0x39a044));};exports[_0xaea7('0x14')]=function(_0x21f6df,_0x2a972e){create(_0x21f6df)['catch'](loggerCatch(_0x2a972e));};exports[_0xaea7('0x15')]=function(_0xd8f014,_0x173fae){moveContact(_0xd8f014)[_0xaea7('0xd')](loggerCatch(_0x173fae));};exports['rescheduleContact']=function(_0x2866e0,_0x10864e,_0x258520){if(_0x10864e){_0x2866e0[_0xaea7('0x16')]=null;}if(_0x258520){_0x2866e0[_0xaea7('0x17')]=![];}return BPromise[_0xaea7('0xa')]()['then'](cmHopper[_0xaea7('0x18')](_0x2866e0))[_0xaea7('0xd')](loggerCatch(_0xaea7('0x19')));};exports[_0xaea7('0x1a')]=function(_0x39eb48){return BPromise[_0xaea7('0xa')]()[_0xaea7('0xb')](cmHopper['countReScheduled'](_0x39eb48))[_0xaea7('0xd')](loggerCatch('[countReScheduled]\x20'));};exports[_0xaea7('0x1b')]=function(_0x480665){return BPromise[_0xaea7('0xa')]()[_0xaea7('0xb')](cmHopper[_0xaea7('0x1b')]({'UserId':null},_0x480665,0x1))['catch'](loggerCatch(_0xaea7('0x1c')));};exports[_0xaea7('0x1d')]=function(_0x5256a4){return BPromise[_0xaea7('0xa')]()[_0xaea7('0xb')](cmHopper['unlockContact']({'active':![]},_0x5256a4,0x1))[_0xaea7('0xd')](loggerCatch(_0xaea7('0x1e')));};exports[_0xaea7('0x1f')]=function(_0x2706c8){var _0x17b3ee={};_0x17b3ee[_0xaea7('0x20')]=_0x2706c8['type'];_0x17b3ee[_0xaea7('0x21')]=_0x2706c8[_0xaea7('0x21')];_0x17b3ee[_0xaea7('0x22')]=_0x2706c8[_0xaea7('0x22')];_0x17b3ee['calleridname']=_0x2706c8[_0xaea7('0x23')];_0x17b3ee[_0xaea7('0x24')]=_0x2706c8[_0xaea7('0x24')];_0x17b3ee['queuecallerjoinAt']=_0x2706c8[_0xaea7('0x25')];_0x17b3ee[_0xaea7('0x26')]=_0x2706c8[_0xaea7('0x25')];_0x17b3ee['queuecallercomplete']=0x1;_0x17b3ee[_0xaea7('0x27')]=_0x2706c8['endtime'];_0x17b3ee[_0xaea7('0x28')]=_0x2706c8[_0xaea7('0x29')];_0x17b3ee[_0xaea7('0x2a')]=_0xaea7('0x2b');_0x17b3ee['exten']=_0xaea7('0x2c');_0x17b3ee['holdtime']=0x0;_0x17b3ee[_0xaea7('0x2d')]=0x1;_0x17b3ee[_0xaea7('0x2e')]=_0x2706c8[_0xaea7('0x29')];_0x17b3ee[_0xaea7('0x2f')]=_0xaea7('0x30');return BPromise['resolve']()[_0xaea7('0xb')](voiceQueueReport['create'](_0x17b3ee))[_0xaea7('0xd')](loggerCatch(_0xaea7('0x31')));};exports[_0xaea7('0x32')]=function(_0x1ae552,_0x55be20){return BPromise[_0xaea7('0xa')]()[_0xaea7('0xb')](cmHopper[_0xaea7('0x32')](_0x1ae552,_0x55be20))[_0xaea7('0xd')](loggerCatch(_0xaea7('0x33')));};exports[_0xaea7('0x34')]=function(_0x413a27){return BPromise[_0xaea7('0xa')]()[_0xaea7('0xb')](cmHopper[_0xaea7('0x18')](_0x413a27,!![],!![]))[_0xaea7('0xd')](loggerCatch(_0xaea7('0x35')));};
\ No newline at end of file
+var _0x2a73=['getContactPreview','[getContactPreview]\x20','createAgentHistory','createCustomerHistory','rescheduleContact','UserId','active','[rescheduleContact]\x20','countReScheduled','[countReScheduled]\x20','[unlockContact]\x20','unlockContact','[activeContact]\x20','type','uniqueid','calleridnum','calleridname','answertime','queuecallercompleteAt','connectedlinename','membername','context','from-sip','exten','xcally-motion-preview','assigned','queuecallerexitreason','create','getContactRecallMe','[GetContactRecallMe]\x20','rescheduleContactInQueue','../../../config/logger','preview','lodash','../rpc/cmHopper','../rpc/cmHopperFinal','../rpc/cmHopperHistory','../rpc/cmHopperBlack','../rpc/voiceQueueRt','../rpc/agentReportPreview','../rpc/voiceQueueReport','inspect','then','createHistory','catch','[createHistory]\x20','resolve','[moveContactManagedDialer]\x20'];(function(_0x48b5a2,_0x51d413){var _0x1308ae=function(_0x4775be){while(--_0x4775be){_0x48b5a2['push'](_0x48b5a2['shift']());}};_0x1308ae(++_0x51d413);}(_0x2a73,0x16f));var _0x32a7=function(_0x1240c0,_0x6f820){_0x1240c0=_0x1240c0-0x0;var _0x274fc0=_0x2a73[_0x1240c0];return _0x274fc0;};'use strict';var util=require('util');var BPromise=require('bluebird');var logger=require(_0x32a7('0x0'))(_0x32a7('0x1'));var _=require(_0x32a7('0x2'));var cmHopper=require(_0x32a7('0x3'));var cmHopperFinal=require(_0x32a7('0x4'));var cmHopperHistory=require(_0x32a7('0x5'));var cmHopperBlack=require(_0x32a7('0x6'));var voiceQueueRt=require(_0x32a7('0x7'));var agentReportPreview=require(_0x32a7('0x8'));var voiceQueueReport=require(_0x32a7('0x9'));function loggerCatch(_0x377e0f){return function(_0x52cc3c){logger['error'](_0x377e0f,util[_0x32a7('0xa')](_0x52cc3c,{'showHidden':![],'depth':null}));};}function create(_0x4858fe){return BPromise['resolve']()[_0x32a7('0xb')](cmHopperHistory[_0x32a7('0xc')](_0x4858fe))[_0x32a7('0xd')](loggerCatch(_0x32a7('0xe')));}function createAgent(_0xb9ab70){return BPromise[_0x32a7('0xf')]()[_0x32a7('0xb')](agentReportPreview[_0x32a7('0xc')](_0xb9ab70))[_0x32a7('0xd')](loggerCatch('[createHistory]\x20'));}function moveContact(_0xb7fd32){return BPromise[_0x32a7('0xf')]()[_0x32a7('0xb')](cmHopper['moveContactManagedDialer'](_0xb7fd32,!![]))[_0x32a7('0xd')](loggerCatch(_0x32a7('0x10')));}exports['checkIsBlackList']=function(_0x249bfc){return BPromise[_0x32a7('0xf')]()[_0x32a7('0xb')](cmHopperBlack['checkIsBlackList'](_0x249bfc))[_0x32a7('0xd')](loggerCatch('[checkIsBlackList]\x20'));};exports['getContactPreview']=function(_0x244782){return BPromise[_0x32a7('0xf')]()[_0x32a7('0xb')](cmHopper[_0x32a7('0x11')](_0x244782))['catch'](loggerCatch(_0x32a7('0x12')));};exports[_0x32a7('0xc')]=function(_0x2adc63,_0x1f89f0){create(_0x2adc63)[_0x32a7('0xd')](loggerCatch(_0x1f89f0));moveContact(_0x2adc63)['catch'](loggerCatch(_0x1f89f0));};exports[_0x32a7('0x13')]=function(_0x21587c,_0x567c1f){createAgent(_0x21587c)['catch'](loggerCatch(_0x567c1f));};exports[_0x32a7('0x14')]=function(_0x819cab,_0x248e85){create(_0x819cab)[_0x32a7('0xd')](loggerCatch(_0x248e85));};exports['createCustomerFinal']=function(_0x536e4b,_0x34604b){moveContact(_0x536e4b)['catch'](loggerCatch(_0x34604b));};exports[_0x32a7('0x15')]=function(_0x94c479,_0x54f7c0,_0x3e9ff7){if(_0x54f7c0){_0x94c479[_0x32a7('0x16')]=null;}if(_0x3e9ff7){_0x94c479[_0x32a7('0x17')]=![];}return BPromise[_0x32a7('0xf')]()[_0x32a7('0xb')](cmHopper[_0x32a7('0x15')](_0x94c479))['catch'](loggerCatch(_0x32a7('0x18')));};exports[_0x32a7('0x19')]=function(_0x169c45){return BPromise['resolve']()[_0x32a7('0xb')](cmHopper[_0x32a7('0x19')](_0x169c45))[_0x32a7('0xd')](loggerCatch(_0x32a7('0x1a')));};exports['unlockContact']=function(_0x3d633e){return BPromise[_0x32a7('0xf')]()[_0x32a7('0xb')](cmHopper['unlockContact']({'UserId':null},_0x3d633e,0x1))[_0x32a7('0xd')](loggerCatch(_0x32a7('0x1b')));};exports['disableContact']=function(_0xffe472){return BPromise['resolve']()[_0x32a7('0xb')](cmHopper[_0x32a7('0x1c')]({'active':![]},_0xffe472,0x1))[_0x32a7('0xd')](loggerCatch(_0x32a7('0x1d')));};exports['crateCustomerReportQueue']=function(_0x38ff92){var _0x3569b3={};_0x3569b3[_0x32a7('0x1e')]=_0x38ff92[_0x32a7('0x1e')];_0x3569b3[_0x32a7('0x1f')]=_0x38ff92[_0x32a7('0x1f')];_0x3569b3[_0x32a7('0x20')]=_0x38ff92[_0x32a7('0x20')];_0x3569b3[_0x32a7('0x21')]=_0x38ff92[_0x32a7('0x21')];_0x3569b3['queue']=_0x38ff92['queue'];_0x3569b3['queuecallerjoinAt']=_0x38ff92[_0x32a7('0x22')];_0x3569b3['queuecallerleaveAt']=_0x38ff92[_0x32a7('0x22')];_0x3569b3['queuecallercomplete']=0x1;_0x3569b3[_0x32a7('0x23')]=_0x38ff92['endtime'];_0x3569b3[_0x32a7('0x24')]=_0x38ff92[_0x32a7('0x25')];_0x3569b3[_0x32a7('0x26')]=_0x32a7('0x27');_0x3569b3[_0x32a7('0x28')]=_0x32a7('0x29');_0x3569b3['holdtime']=0x0;_0x3569b3[_0x32a7('0x2a')]=0x1;_0x3569b3['lastAssignedTo']=_0x38ff92['membername'];_0x3569b3[_0x32a7('0x2b')]='COMPLETED';return BPromise[_0x32a7('0xf')]()['then'](voiceQueueReport[_0x32a7('0x2c')](_0x3569b3))[_0x32a7('0xd')](loggerCatch('[voiceQueueReport]\x20'));};exports[_0x32a7('0x2d')]=function(_0x335431,_0x1b4925){return BPromise[_0x32a7('0xf')]()['then'](cmHopper[_0x32a7('0x2d')](_0x335431,_0x1b4925))['catch'](loggerCatch(_0x32a7('0x2e')));};exports[_0x32a7('0x2f')]=function(_0x7c7fb4){return BPromise[_0x32a7('0xf')]()[_0x32a7('0xb')](cmHopper[_0x32a7('0x15')](_0x7c7fb4,!![],!![]))[_0x32a7('0xd')](loggerCatch('[rescheduleContactInQueue]\x20'));};
\ No newline at end of file
index 1dc3d5c..7fdcfce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x82d4=['xmd-agiafter','xmd-agi','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosrtt','rtpaudioqosloss','rtpaudioqoslossbridged','bridgepeer','bridgepvtcallid','getCallerIdRandom','pow','replace','random','match','util','moment','../../../../config/logger','env','127.0.0.1','milliseconds','diff','loggerCatch','error','inspect','info','loggerError','logger2','message','getCallerId','string','isEmpty','isUndefined','format','\x22%s\x22\x20<%s>','\x22\x22\x20<>','Queue','name','calleridnum','ContactId','VoiceQueueId','dialOriginateTimeout','\x22rtTxX%s%s\x22','dialQueueProject2','monitor_format','U(xcally-mixmonitor-context)','dialPreviewUrl','\x22agi://%s/square,%s\x22','dialQueueProject','NONE','originatecalleridnum','originatecalleridname','_XCALLY_MIXMONITOR_FORMAT','_XCALLY_MIXMONITOR_UNIQUEID','Contact','isNil','createdAt','updatedAt','XMD-','toLowerVariables','hasOwnProperty','toLower','originated','[updateOriginated]\x20is\x20null\x20or\x20undefined','YYYY-MM-DD\x20HH:mm:ss','state','statedesc','Blacklist','starttime','responsetime','endtime','logAgent','ringtime','logLookAgent','membername','talktime','answertime','isFailure','Failure','variablesAction','calleridname','BOOKED','channelAgent','xcally-motion-preview','from-sip','timeout','uniqueid','totalGlobal','countbusyretry','countcongestionretry','countnoanswerretry','cloneAction','clone','Global','scheduledAt','active','scheduledat','minutes','ListId','decrementTalkink','pTalking','[decrementTalkink]\x20object\x20talking\x20is\x20negative','IsNotLoggedIn','buildObj','lastevent','queue','interface','agentReadyId','not_inuse','status','reachable','getDiff','seconds','createBody','CampaignId','idContact','type','campaigntype','countglobal','UserId','sipcallid','xmd-queue','xmd-phone','xmd-listid','xmd-dialurl','xmd-dialtimeout','xmd-dialoptions','xmd-dialid','xmd-dialchannel','xmd-cdrtype','xmd-callerid'];(function(_0x30ed1a,_0xd81aa3){var _0x2415f4=function(_0x5f3b98){while(--_0x5f3b98){_0x30ed1a['push'](_0x30ed1a['shift']());}};_0x2415f4(++_0xd81aa3);}(_0x82d4,0x115));var _0x482d=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x82d4[_0x3dd15e];return _0x231fd0;};'use strict';var util=require(_0x482d('0x0'));var _=require('lodash');var moment=require(_0x482d('0x1'));var logger=require(_0x482d('0x2'))('preview');var ipAgi=process[_0x482d('0x3')]['XCALLY_IP_AGI']||_0x482d('0x4');function getSeconds(_0x1e119b,_0x2ad95c){var _0x18504f=moment(_0x1e119b)[_0x482d('0x5')](0x0);var _0x406caa=moment(_0x2ad95c)[_0x482d('0x5')](0x0);return _0x18504f[_0x482d('0x6')](_0x406caa,'seconds');}exports[_0x482d('0x7')]=function(_0xcdf3d5){return function(_0x22393f){logger[_0x482d('0x8')](_0xcdf3d5,util[_0x482d('0x9')](_0x22393f,{'showHidden':![],'depth':null}));};};exports['logger']=function(_0x3e7646,_0x22cda2){logger[_0x482d('0xa')](_0x3e7646,util[_0x482d('0x9')](_0x22cda2,{'showHidden':![],'depth':null}));};exports[_0x482d('0xb')]=function(_0x200825,_0x15e54d){logger[_0x482d('0x8')](_0x200825,util[_0x482d('0x9')](_0x15e54d,{'showHidden':![],'depth':null}));};exports[_0x482d('0xc')]=function(_0x190ae9){return function(_0x2743e3){logger['info'](_0x190ae9,util[_0x482d('0x9')](_0x2743e3,{'showHidden':![],'depth':null}));};};exports[_0x482d('0xd')]=function(_0x3a7f19,_0x398564,_0x174c5f){return{'message':_0x3a7f19,'unlock':_0x398564,'active':_0x174c5f};};exports[_0x482d('0xe')]=function(_0xcdf6c2,_0x485ede,_0x2d2dc8){if(!_['isUndefined'](_0x2d2dc8)&&_0x482d('0xf')===typeof _0x2d2dc8&&!_[_0x482d('0x10')](_0x2d2dc8)){if(!_[_0x482d('0x11')](_0x485ede)&&_0x482d('0xf')===typeof _0x485ede&&!_[_0x482d('0x10')](_0x485ede)){return util[_0x482d('0x12')]('\x22%s\x22\x20<%s>',_0x485ede,_0x2d2dc8);}return util[_0x482d('0x12')](_0x482d('0x13'),_0x2d2dc8,_0x2d2dc8);}if(!_[_0x482d('0x11')](_0xcdf6c2)&&_0x482d('0xf')===typeof _0xcdf6c2&&!_[_0x482d('0x10')](_0xcdf6c2)){return _0xcdf6c2;}return _0x482d('0x14');};exports['isActive']=function(_0x363d83){if(_['isNil'](_0x363d83)){return![];}return _0x363d83;};exports['addVariables']=function(_0x223d93,_0x350503,_0x42c196,_0x4c09f3,_0x29c382,_0x2450c0){var _0x35b076={'XMD-QUEUE':_0x350503['Queue']?_0x350503[_0x482d('0x15')][_0x482d('0x16')]:'','XMD-CALLERID':_0x4c09f3,'XMD-CALLERID-PREVIEW':_0x2450c0?util[_0x482d('0x12')](_0x482d('0x13'),_0x2450c0['calleridname'],_0x2450c0[_0x482d('0x17')]):_0x4c09f3,'XMD-DIALID':_0x29c382,'XMD-CONTACTID':_0x350503[_0x482d('0x18')],'XMD-CDRTYPE':'dialer','CALLERID(all)':_0x4c09f3,'XMD-VOICEQUEUEID':_0x350503[_0x482d('0x19')],'XMD-DIALCHANNEL':_0x42c196,'XMD-DIALTIMEOUT':_0x223d93[_0x482d('0x1a')]||0x1e,'XMD-DIALOPTIONS':util[_0x482d('0x12')](_0x482d('0x1b'),_0x223d93[_0x482d('0x1c')]?'g':'',_[_0x482d('0x10')](_0x223d93[_0x482d('0x1d')])?'':_0x482d('0x1e')),'XMD-DIALURL':_0x223d93[_0x482d('0x1f')]||'','XMD-AGI':_0x223d93['dialQueueProject']?util[_0x482d('0x12')](_0x482d('0x20'),ipAgi,_0x223d93[_0x482d('0x21')]):'NONE','XMD-AGIAFTER':_0x223d93[_0x482d('0x1c')]?util[_0x482d('0x12')]('\x22agi://%s/square,%s\x22',ipAgi,_0x223d93[_0x482d('0x1c')]):_0x482d('0x22'),'XMD-ORIGINATECALLERIDNUM':_0x2450c0?_0x2450c0[_0x482d('0x23')]:'','XMD-ORIGINATECALLERIDNAME':_0x2450c0?_0x2450c0[_0x482d('0x24')]:'','XMD-DESTINATION':'xcally-motion-preview'};if(!_[_0x482d('0x10')](_0x223d93[_0x482d('0x1d')])){_0x35b076[util[_0x482d('0x12')]('%s',_0x482d('0x25'))]=_0x223d93[_0x482d('0x1d')];_0x35b076[util[_0x482d('0x12')]('%s',_0x482d('0x26'))]=_0x29c382;}if(_0x350503&&_0x350503[_0x482d('0x27')]){for(var _0x162fa7 in _0x350503[_0x482d('0x27')]){if(_0x350503['Contact']['hasOwnProperty'](_0x162fa7)){if(!_[_0x482d('0x28')](_0x350503[_0x482d('0x27')][_0x162fa7])&&_0x162fa7!=='id'&&_0x162fa7!=='tags'&&_0x162fa7!==_0x482d('0x29')&&_0x162fa7!==_0x482d('0x2a')){_0x35b076[util[_0x482d('0x12')]('%s%s',_0x482d('0x2b'),_['toUpper'](_0x162fa7))]=_0x350503[_0x482d('0x27')][_0x162fa7];}}}}return _0x35b076;};exports[_0x482d('0x2c')]=function(_0x374dae){var _0x3f2da3={};for(var _0x281450 in _0x374dae){if(_0x374dae[_0x482d('0x2d')](_0x281450)){_0x3f2da3[util[_0x482d('0x12')]('%s',_[_0x482d('0x2e')](_0x281450))]=_0x374dae[_0x281450];}}return{'variables':_0x3f2da3};};exports['updateOriginated']=function(_0x79233b,_0x34adbd){if(!_['isNil'](_0x79233b)){if(_0x79233b[_0x482d('0x2d')]('originated')){if(_0x79233b[_0x482d('0x2f')]>0x0){_0x79233b[_0x482d('0x2f')]-=0x1;}else{logger['error']('[updateOriginated]\x20object\x20originated\x20is\x20negative',_0x34adbd);}}}else{logger[_0x482d('0x8')](_0x482d('0x30'),_0x34adbd);}};exports['logBlacklist']=function(_0x4210a2){var _0x584aff=moment()['format'](_0x482d('0x31'));_0x4210a2[_0x482d('0x32')]=0xd;_0x4210a2[_0x482d('0x33')]=_0x482d('0x34');_0x4210a2[_0x482d('0x35')]=_0x584aff;_0x4210a2[_0x482d('0x36')]=_0x584aff;_0x4210a2[_0x482d('0x37')]=_0x584aff;};exports[_0x482d('0x38')]=function(_0x3bae83,_0x4f6289,_0xc0dc04){var _0x92bb67=moment()[_0x482d('0x12')](_0x482d('0x31'));_0x3bae83[_0x482d('0x32')]=_0x4f6289;_0x3bae83[_0x482d('0x33')]=_0xc0dc04;_0x3bae83['responsetime']=_0x92bb67;_0x3bae83[_0x482d('0x39')]=getSeconds(_0x3bae83[_0x482d('0x36')],_0x3bae83[_0x482d('0x35')]);};exports[_0x482d('0x3a')]=function(_0x4b9b55,_0x530830,_0x51d403){_0x4b9b55[_0x482d('0x3b')]=_0x530830;_0x4b9b55['UserId']=_0x51d403;};exports['logCustomer']=function(_0x233f21,_0x475da7,_0x45186a){var _0x3bba24=moment()['format'](_0x482d('0x31'));_0x233f21[_0x482d('0x32')]=_0x475da7;_0x233f21['statedesc']=_0x45186a;_0x233f21['responsetime']=_0x233f21[_0x482d('0x36')]?_0x233f21[_0x482d('0x36')]:_0x3bba24;_0x233f21['endtime']=_0x233f21[_0x482d('0x37')]?_0x233f21[_0x482d('0x37')]:_0x3bba24;_0x233f21['ringtime']=getSeconds(_0x233f21[_0x482d('0x36')]||0x0,_0x233f21[_0x482d('0x35')]||0x0);_0x233f21[_0x482d('0x3c')]=_0x233f21[_0x482d('0x3d')]?getSeconds(_0x233f21[_0x482d('0x37')],_0x233f21['answertime']):0x0;};exports[_0x482d('0x3e')]=function(_0xcd76b0){return _0xcd76b0===_0x482d('0x3f');};exports[_0x482d('0x40')]=function(_0x336946,_0x57b925,_0x173a7d,_0x44b23f,_0x5092a4){var _0x3c2f60=_0x44b23f?'RECALL':_0x336946[_0x482d('0x41')];_0x3c2f60=_0x5092a4?_0x482d('0x42'):_0x3c2f60;return{'actionid':_0x336946['uniqueid'],'action':'originate','channel':_0x336946[_0x482d('0x43')],'callerid':util[_0x482d('0x12')](_0x482d('0x13'),_0x3c2f60,_0x336946[_0x482d('0x17')]),'Exten':_0x482d('0x44'),'Context':_0x482d('0x45'),'Priority':'1','variable':_0x173a7d,'timeout':(_0x57b925[_0x482d('0x46')]||0x1e)*0x3e8,'async':!![],'channelid':_0x336946[_0x482d('0x47')]};};exports[_0x482d('0x48')]=function(_0x11b84d){return _0x11b84d[_0x482d('0x49')]+_0x11b84d[_0x482d('0x4a')]+_0x11b84d[_0x482d('0x4b')];};exports[_0x482d('0x4c')]=function(_0x4ef7ca){var _0x3da2ca=_[_0x482d('0x4d')](_0x4ef7ca);_0x3da2ca[_0x482d('0x32')]=0xf;_0x3da2ca['statedesc']=_0x482d('0x4e');return _0x3da2ca;};exports[_0x482d('0x4f')]=function(_0x36685b,_0x29a0fb,_0x1dd2eb){var _0x353171={};_0x353171[_0x29a0fb]=_0x36685b[_0x29a0fb];_0x353171[_0x482d('0x50')]=![];_0x353171[_0x482d('0x51')]=moment()['add'](_0x1dd2eb,_0x482d('0x52'))[_0x482d('0x12')]('YYYY-MM-DD\x20HH:mm:ss');_0x353171[_0x482d('0x18')]=_0x36685b[_0x482d('0x18')];_0x353171[_0x482d('0x53')]=_0x36685b['ListId'];_0x353171['VoiceQueueId']=_0x36685b[_0x482d('0x19')]||undefined;return _0x353171;};exports[_0x482d('0x54')]=function(_0x118db1,_0x55c38d){if(!_['isNil'](_0x118db1)){if(_0x118db1[_0x482d('0x55')]>0x0){_0x118db1[_0x482d('0x55')]-=0x1;}else{logger['error'](_0x55c38d,_0x482d('0x56'));}}else{logger[_0x482d('0x8')](_0x55c38d,'[decrementTalkink]\x20is\x20null\x20or\x20undefined');}};exports[_0x482d('0x57')]=function(_0x19fb1c){if(_0x19fb1c<=0x0){return!![];}return![];};exports[_0x482d('0x58')]=function(_0x374599,_0x40095a){_0x374599[_0x482d('0x59')]=_0x40095a;_0x374599['name']=_0x374599[_0x482d('0x5a')];_0x374599['interface']=_0x374599['channelAgent'];return _0x374599;};exports['buildAcw']=function(_0x45e2c0){var _0x10600f={};_0x10600f[_0x482d('0x5a')]=_0x45e2c0[_0x482d('0x5a')];_0x10600f[_0x482d('0x5b')]=_0x45e2c0[_0x482d('0x43')];_0x10600f[_0x482d('0x47')]=_0x45e2c0[_0x482d('0x47')];return _0x10600f;};exports[_0x482d('0x5c')]=function(_0x1808ea){var _0x17f7dd=[];for(var _0x14ee59 in _0x1808ea){if(_0x1808ea[_0x482d('0x2d')](_0x14ee59)){if(!_['isNil'](_0x1808ea[_0x14ee59])&&_0x1808ea[_0x14ee59][_0x482d('0x32')]===_0x482d('0x5d')&&_0x1808ea[_0x14ee59][_0x482d('0x5e')]===_0x482d('0x5f')){_0x17f7dd['push'](_0x1808ea[_0x14ee59]['id']);}}}return _0x17f7dd;};exports[_0x482d('0x60')]=function(_0x3ac042){var _0x4ced18=moment()[_0x482d('0x5')](0x0);var _0x251670=moment(_0x3ac042)['milliseconds'](0x0);return _0x4ced18[_0x482d('0x6')](_0x251670,_0x482d('0x61'));};exports[_0x482d('0x62')]=function(_0x2f3ccc){return{'active':![],'recallme':![],'UserId':null,'ContactId':_0x2f3ccc[_0x482d('0x18')],'ListId':_0x2f3ccc[_0x482d('0x53')],'VoiceQueueId':_0x2f3ccc[_0x482d('0x19')]||undefined,'CampaignId':_0x2f3ccc[_0x482d('0x63')]||undefined};};exports['filterKey']=function(_0xbfca6f){if(_0xbfca6f==='uniqueid'||_0xbfca6f===_0x482d('0x64')||_0xbfca6f==='queue'||_0xbfca6f===_0x482d('0x65')||_0xbfca6f===_0x482d('0x66')||_0xbfca6f==='dialAnswer'||_0xbfca6f==='membername'||_0xbfca6f==='channelAgent'||_0xbfca6f===_0x482d('0x41')||_0xbfca6f===_0x482d('0x50')||_0xbfca6f===_0x482d('0x17')||_0xbfca6f===_0x482d('0x51')||_0xbfca6f==='countbusyretry'||_0xbfca6f===_0x482d('0x4a')||_0xbfca6f===_0x482d('0x4b')||_0xbfca6f===_0x482d('0x67')||_0xbfca6f==='callback'||_0xbfca6f==='callbackuniqueid'||_0xbfca6f==='callbackat'||_0xbfca6f==='recallme'||_0xbfca6f==='ContactId'||_0xbfca6f===_0x482d('0x53')||_0xbfca6f===_0x482d('0x68')||_0xbfca6f===_0x482d('0x19')||_0xbfca6f===_0x482d('0x69')||_0xbfca6f==='xmd-voicequeueid'||_0xbfca6f===_0x482d('0x6a')||_0xbfca6f===_0x482d('0x6b')||_0xbfca6f===_0x482d('0x6c')||_0xbfca6f===_0x482d('0x6d')||_0xbfca6f===_0x482d('0x6e')||_0xbfca6f===_0x482d('0x6f')||_0xbfca6f===_0x482d('0x70')||_0xbfca6f===_0x482d('0x71')||_0xbfca6f==='xmd-contactid'||_0xbfca6f===_0x482d('0x72')||_0xbfca6f===_0x482d('0x73')||_0xbfca6f===_0x482d('0x74')||_0xbfca6f===_0x482d('0x75')||_0xbfca6f==='rtpaudioqos'||_0xbfca6f===_0x482d('0x76')||_0xbfca6f===_0x482d('0x77')||_0xbfca6f===_0x482d('0x78')||_0xbfca6f==='rtpaudioqosloss'||_0xbfca6f==='rtpaudioqoslossbridged'||_0xbfca6f===_0x482d('0x79')||_0xbfca6f==='rtpaudioqosrttbridged'||_0xbfca6f==='rtpaudioqos'||_0xbfca6f===_0x482d('0x76')||_0xbfca6f==='rtpaudioqosjitter'||_0xbfca6f===_0x482d('0x78')||_0xbfca6f===_0x482d('0x7a')||_0xbfca6f===_0x482d('0x7b')||_0xbfca6f==='rtpaudioqosrtt'||_0xbfca6f==='rtpaudioqosrttbridged'||_0xbfca6f===_0x482d('0x7c')||_0xbfca6f===_0x482d('0x7d')||_0xbfca6f==='state'||_0xbfca6f==='statedesc'){return![];}return!![];};exports[_0x482d('0x7e')]=function(_0x5b329c,_0x45407a){var _0x23c681,_0x5f5477,_0xafe637;if(_0x45407a<=0x0){_0x45407a=0x1;}_0x23c681=new RegExp('\x5cw{0,'+_0x45407a+'}$');_0x5f5477=Math['pow'](0xa,_0x45407a-0x1);_0xafe637=Math[_0x482d('0x7f')](0xa,_0x45407a)-0x1;return util[_0x482d('0x12')]('%s',_[_0x482d('0x80')](_0x5b329c,_0x23c681,_[_0x482d('0x81')](_0x5f5477,_0xafe637)));};exports['extractCalleridName']=function(_0xba50e3){var _0x3ce7d1=_0xba50e3[_0x482d('0x82')](/"(.*?)"/);return _0x3ce7d1?_0x3ce7d1[0x1]:_0xba50e3;};exports['extractCalleridNumber']=function(_0x32c7d3){var _0x52704d=_0x32c7d3[_0x482d('0x82')](/<(.*?)>/);return _0x52704d?_0x52704d[0x1]:_0x32c7d3;};
\ No newline at end of file
+var _0xf8d7=['decrementTalkink','pTalking','[decrementTalkink]\x20object\x20talking\x20is\x20negative','[decrementTalkink]\x20is\x20null\x20or\x20undefined','IsNotLoggedIn','lastevent','channelAgent','buildAcw','queue','agentReadyId','status','reachable','push','getDiff','createBody','CampaignId','filterKey','idContact','type','campaigntype','dialAnswer','countglobal','callbackat','recallme','sipcallid','xmd-queue','xmd-phone','xmd-dialurl','xmd-dialtimeout','xmd-dialoptions','xmd-dialid','xmd-dialchannel','xmd-contactid','xmd-callerid','xmd-agiafter','xmd-agi','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrtt','rtpaudioqosrttbridged','bridgepvtcallid','getCallerIdRandom','pow','replace','match','extractCalleridNumber','util','lodash','preview','XCALLY_IP_AGI','127.0.0.1','milliseconds','diff','seconds','loggerCatch','error','inspect','logger','info','loggerError','logger2','getCallerId','string','isEmpty','isUndefined','\x22%s\x22\x20<%s>','format','isActive','isNil','addVariables','Queue','name','calleridnum','ContactId','VoiceQueueId','dialOriginateTimeout','\x22rtTxX%s%s\x22','dialQueueProject2','monitor_format','U(xcally-mixmonitor-context)','dialQueueProject','\x22agi://%s/square,%s\x22','NONE','originatecalleridnum','originatecalleridname','xcally-motion-preview','_XCALLY_MIXMONITOR_UNIQUEID','Contact','hasOwnProperty','tags','createdAt','updatedAt','toUpper','updateOriginated','originated','[updateOriginated]\x20object\x20originated\x20is\x20negative','[updateOriginated]\x20is\x20null\x20or\x20undefined','logBlacklist','YYYY-MM-DD\x20HH:mm:ss','state','statedesc','starttime','responsetime','endtime','logAgent','ringtime','logLookAgent','membername','logCustomer','talktime','answertime','variablesAction','BOOKED','uniqueid','originate','from-sip','timeout','totalGlobal','countbusyretry','countcongestionretry','countnoanswerretry','cloneAction','clone','Global','scheduledAt','active','scheduledat','ListId'];(function(_0x35da42,_0x5c2610){var _0x370035=function(_0x546db5){while(--_0x546db5){_0x35da42['push'](_0x35da42['shift']());}};_0x370035(++_0x5c2610);}(_0xf8d7,0xb6));var _0x7f8d=function(_0xfb0281,_0x3ff38b){_0xfb0281=_0xfb0281-0x0;var _0x408dd3=_0xf8d7[_0xfb0281];return _0x408dd3;};'use strict';var util=require(_0x7f8d('0x0'));var _=require(_0x7f8d('0x1'));var moment=require('moment');var logger=require('../../../../config/logger')(_0x7f8d('0x2'));var ipAgi=process['env'][_0x7f8d('0x3')]||_0x7f8d('0x4');function getSeconds(_0x58a5c8,_0x2d9c5d){var _0x5edb09=moment(_0x58a5c8)[_0x7f8d('0x5')](0x0);var _0x37e207=moment(_0x2d9c5d)[_0x7f8d('0x5')](0x0);return _0x5edb09[_0x7f8d('0x6')](_0x37e207,_0x7f8d('0x7'));}exports[_0x7f8d('0x8')]=function(_0x12145b){return function(_0x5c29e9){logger[_0x7f8d('0x9')](_0x12145b,util[_0x7f8d('0xa')](_0x5c29e9,{'showHidden':![],'depth':null}));};};exports[_0x7f8d('0xb')]=function(_0x4d5c7e,_0x478693){logger[_0x7f8d('0xc')](_0x4d5c7e,util['inspect'](_0x478693,{'showHidden':![],'depth':null}));};exports[_0x7f8d('0xd')]=function(_0x147a10,_0x13b663){logger[_0x7f8d('0x9')](_0x147a10,util[_0x7f8d('0xa')](_0x13b663,{'showHidden':![],'depth':null}));};exports[_0x7f8d('0xe')]=function(_0xad8dc7){return function(_0x7bb54b){logger[_0x7f8d('0xc')](_0xad8dc7,util['inspect'](_0x7bb54b,{'showHidden':![],'depth':null}));};};exports['message']=function(_0x3a1849,_0x236cac,_0x813669){return{'message':_0x3a1849,'unlock':_0x236cac,'active':_0x813669};};exports[_0x7f8d('0xf')]=function(_0x4bacfd,_0x5a6f92,_0x3c8aec){if(!_['isUndefined'](_0x3c8aec)&&_0x7f8d('0x10')===typeof _0x3c8aec&&!_[_0x7f8d('0x11')](_0x3c8aec)){if(!_[_0x7f8d('0x12')](_0x5a6f92)&&_0x7f8d('0x10')===typeof _0x5a6f92&&!_[_0x7f8d('0x11')](_0x5a6f92)){return util['format'](_0x7f8d('0x13'),_0x5a6f92,_0x3c8aec);}return util[_0x7f8d('0x14')](_0x7f8d('0x13'),_0x3c8aec,_0x3c8aec);}if(!_[_0x7f8d('0x12')](_0x4bacfd)&&_0x7f8d('0x10')===typeof _0x4bacfd&&!_[_0x7f8d('0x11')](_0x4bacfd)){return _0x4bacfd;}return'\x22\x22\x20<>';};exports[_0x7f8d('0x15')]=function(_0x1f3f15){if(_[_0x7f8d('0x16')](_0x1f3f15)){return![];}return _0x1f3f15;};exports[_0x7f8d('0x17')]=function(_0x55f194,_0x2b817d,_0xcc5d2e,_0x4a6c3f,_0x52210b,_0x417aab){var _0x470c61={'XMD-QUEUE':_0x2b817d['Queue']?_0x2b817d[_0x7f8d('0x18')][_0x7f8d('0x19')]:'','XMD-CALLERID':_0x4a6c3f,'XMD-CALLERID-PREVIEW':_0x417aab?util[_0x7f8d('0x14')](_0x7f8d('0x13'),_0x417aab['calleridname'],_0x417aab[_0x7f8d('0x1a')]):_0x4a6c3f,'XMD-DIALID':_0x52210b,'XMD-CONTACTID':_0x2b817d[_0x7f8d('0x1b')],'XMD-CDRTYPE':'dialer','CALLERID(all)':_0x4a6c3f,'XMD-VOICEQUEUEID':_0x2b817d[_0x7f8d('0x1c')],'XMD-DIALCHANNEL':_0xcc5d2e,'XMD-DIALTIMEOUT':_0x55f194[_0x7f8d('0x1d')]||0x1e,'XMD-DIALOPTIONS':util[_0x7f8d('0x14')](_0x7f8d('0x1e'),_0x55f194[_0x7f8d('0x1f')]?'g':'',_[_0x7f8d('0x11')](_0x55f194[_0x7f8d('0x20')])?'':_0x7f8d('0x21')),'XMD-DIALURL':_0x55f194['dialPreviewUrl']||'','XMD-AGI':_0x55f194[_0x7f8d('0x22')]?util['format'](_0x7f8d('0x23'),ipAgi,_0x55f194[_0x7f8d('0x22')]):_0x7f8d('0x24'),'XMD-AGIAFTER':_0x55f194[_0x7f8d('0x1f')]?util[_0x7f8d('0x14')](_0x7f8d('0x23'),ipAgi,_0x55f194[_0x7f8d('0x1f')]):_0x7f8d('0x24'),'XMD-ORIGINATECALLERIDNUM':_0x417aab?_0x417aab[_0x7f8d('0x25')]:'','XMD-ORIGINATECALLERIDNAME':_0x417aab?_0x417aab[_0x7f8d('0x26')]:'','XMD-DESTINATION':_0x7f8d('0x27')};if(!_[_0x7f8d('0x11')](_0x55f194['monitor_format'])){_0x470c61[util[_0x7f8d('0x14')]('%s','_XCALLY_MIXMONITOR_FORMAT')]=_0x55f194[_0x7f8d('0x20')];_0x470c61[util[_0x7f8d('0x14')]('%s',_0x7f8d('0x28'))]=_0x52210b;}if(_0x2b817d&&_0x2b817d[_0x7f8d('0x29')]){for(var _0x4db20d in _0x2b817d[_0x7f8d('0x29')]){if(_0x2b817d[_0x7f8d('0x29')][_0x7f8d('0x2a')](_0x4db20d)){if(!_[_0x7f8d('0x16')](_0x2b817d['Contact'][_0x4db20d])&&_0x4db20d!=='id'&&_0x4db20d!==_0x7f8d('0x2b')&&_0x4db20d!==_0x7f8d('0x2c')&&_0x4db20d!==_0x7f8d('0x2d')){_0x470c61[util[_0x7f8d('0x14')]('%s%s','XMD-',_[_0x7f8d('0x2e')](_0x4db20d))]=_0x2b817d[_0x7f8d('0x29')][_0x4db20d];}}}}return _0x470c61;};exports['toLowerVariables']=function(_0x13dbf7){var _0x1e42ef={};for(var _0xcc6dc4 in _0x13dbf7){if(_0x13dbf7[_0x7f8d('0x2a')](_0xcc6dc4)){_0x1e42ef[util[_0x7f8d('0x14')]('%s',_['toLower'](_0xcc6dc4))]=_0x13dbf7[_0xcc6dc4];}}return{'variables':_0x1e42ef};};exports[_0x7f8d('0x2f')]=function(_0x362f40,_0x108df6){if(!_['isNil'](_0x362f40)){if(_0x362f40[_0x7f8d('0x2a')]('originated')){if(_0x362f40[_0x7f8d('0x30')]>0x0){_0x362f40[_0x7f8d('0x30')]-=0x1;}else{logger[_0x7f8d('0x9')](_0x7f8d('0x31'),_0x108df6);}}}else{logger['error'](_0x7f8d('0x32'),_0x108df6);}};exports[_0x7f8d('0x33')]=function(_0x2700d3){var _0x5164c0=moment()[_0x7f8d('0x14')](_0x7f8d('0x34'));_0x2700d3[_0x7f8d('0x35')]=0xd;_0x2700d3[_0x7f8d('0x36')]='Blacklist';_0x2700d3[_0x7f8d('0x37')]=_0x5164c0;_0x2700d3[_0x7f8d('0x38')]=_0x5164c0;_0x2700d3[_0x7f8d('0x39')]=_0x5164c0;};exports[_0x7f8d('0x3a')]=function(_0x2d521b,_0x3b7763,_0x977f6f){var _0xaf9bfd=moment()['format'](_0x7f8d('0x34'));_0x2d521b[_0x7f8d('0x35')]=_0x3b7763;_0x2d521b['statedesc']=_0x977f6f;_0x2d521b[_0x7f8d('0x38')]=_0xaf9bfd;_0x2d521b[_0x7f8d('0x3b')]=getSeconds(_0x2d521b[_0x7f8d('0x38')],_0x2d521b[_0x7f8d('0x37')]);};exports[_0x7f8d('0x3c')]=function(_0x52197b,_0x35b2e9,_0x4502c8){_0x52197b[_0x7f8d('0x3d')]=_0x35b2e9;_0x52197b['UserId']=_0x4502c8;};exports[_0x7f8d('0x3e')]=function(_0x1076cd,_0x21a2b8,_0x36a1d7){var _0x32549d=moment()[_0x7f8d('0x14')](_0x7f8d('0x34'));_0x1076cd['state']=_0x21a2b8;_0x1076cd['statedesc']=_0x36a1d7;_0x1076cd[_0x7f8d('0x38')]=_0x1076cd['responsetime']?_0x1076cd[_0x7f8d('0x38')]:_0x32549d;_0x1076cd[_0x7f8d('0x39')]=_0x1076cd[_0x7f8d('0x39')]?_0x1076cd[_0x7f8d('0x39')]:_0x32549d;_0x1076cd[_0x7f8d('0x3b')]=getSeconds(_0x1076cd[_0x7f8d('0x38')]||0x0,_0x1076cd[_0x7f8d('0x37')]||0x0);_0x1076cd[_0x7f8d('0x3f')]=_0x1076cd['answertime']?getSeconds(_0x1076cd['endtime'],_0x1076cd[_0x7f8d('0x40')]):0x0;};exports['isFailure']=function(_0x183df4){return _0x183df4==='Failure';};exports[_0x7f8d('0x41')]=function(_0x515ca2,_0x1abac2,_0x2d2b59,_0x27a6c2,_0x412bac){var _0x2bcb08=_0x27a6c2?'RECALL':_0x515ca2['calleridname'];_0x2bcb08=_0x412bac?_0x7f8d('0x42'):_0x2bcb08;return{'actionid':_0x515ca2[_0x7f8d('0x43')],'action':_0x7f8d('0x44'),'channel':_0x515ca2['channelAgent'],'callerid':util[_0x7f8d('0x14')](_0x7f8d('0x13'),_0x2bcb08,_0x515ca2[_0x7f8d('0x1a')]),'Exten':_0x7f8d('0x27'),'Context':_0x7f8d('0x45'),'Priority':'1','variable':_0x2d2b59,'timeout':(_0x1abac2[_0x7f8d('0x46')]||0x1e)*0x3e8,'async':!![],'channelid':_0x515ca2['uniqueid']};};exports[_0x7f8d('0x47')]=function(_0x20756f){return _0x20756f[_0x7f8d('0x48')]+_0x20756f[_0x7f8d('0x49')]+_0x20756f[_0x7f8d('0x4a')];};exports[_0x7f8d('0x4b')]=function(_0x216844){var _0x57060a=_[_0x7f8d('0x4c')](_0x216844);_0x57060a[_0x7f8d('0x35')]=0xf;_0x57060a[_0x7f8d('0x36')]=_0x7f8d('0x4d');return _0x57060a;};exports[_0x7f8d('0x4e')]=function(_0x35f857,_0x287a16,_0x218ef5){var _0x175bf2={};_0x175bf2[_0x287a16]=_0x35f857[_0x287a16];_0x175bf2[_0x7f8d('0x4f')]=![];_0x175bf2[_0x7f8d('0x50')]=moment()['add'](_0x218ef5,'minutes')['format']('YYYY-MM-DD\x20HH:mm:ss');_0x175bf2['ContactId']=_0x35f857[_0x7f8d('0x1b')];_0x175bf2[_0x7f8d('0x51')]=_0x35f857[_0x7f8d('0x51')];_0x175bf2[_0x7f8d('0x1c')]=_0x35f857['VoiceQueueId']||undefined;return _0x175bf2;};exports[_0x7f8d('0x52')]=function(_0x1bad4f,_0x533951){if(!_[_0x7f8d('0x16')](_0x1bad4f)){if(_0x1bad4f[_0x7f8d('0x53')]>0x0){_0x1bad4f[_0x7f8d('0x53')]-=0x1;}else{logger[_0x7f8d('0x9')](_0x533951,_0x7f8d('0x54'));}}else{logger['error'](_0x533951,_0x7f8d('0x55'));}};exports[_0x7f8d('0x56')]=function(_0x298ba2){if(_0x298ba2<=0x0){return!![];}return![];};exports['buildObj']=function(_0x38fe22,_0x1e0d12){_0x38fe22[_0x7f8d('0x57')]=_0x1e0d12;_0x38fe22['name']=_0x38fe22['queue'];_0x38fe22['interface']=_0x38fe22[_0x7f8d('0x58')];return _0x38fe22;};exports[_0x7f8d('0x59')]=function(_0x5cfe26){var _0x340c73={};_0x340c73[_0x7f8d('0x5a')]=_0x5cfe26['queue'];_0x340c73['interface']=_0x5cfe26[_0x7f8d('0x58')];_0x340c73[_0x7f8d('0x43')]=_0x5cfe26[_0x7f8d('0x43')];return _0x340c73;};exports[_0x7f8d('0x5b')]=function(_0x32b89b){var _0x5ded6f=[];for(var _0x1ff7dc in _0x32b89b){if(_0x32b89b[_0x7f8d('0x2a')](_0x1ff7dc)){if(!_[_0x7f8d('0x16')](_0x32b89b[_0x1ff7dc])&&_0x32b89b[_0x1ff7dc]['state']==='not_inuse'&&_0x32b89b[_0x1ff7dc][_0x7f8d('0x5c')]===_0x7f8d('0x5d')){_0x5ded6f[_0x7f8d('0x5e')](_0x32b89b[_0x1ff7dc]['id']);}}}return _0x5ded6f;};exports[_0x7f8d('0x5f')]=function(_0xeaa24b){var _0xa141e9=moment()['milliseconds'](0x0);var _0x1c9c97=moment(_0xeaa24b)[_0x7f8d('0x5')](0x0);return _0xa141e9[_0x7f8d('0x6')](_0x1c9c97,_0x7f8d('0x7'));};exports[_0x7f8d('0x60')]=function(_0x42c0ed){return{'active':![],'recallme':![],'UserId':null,'ContactId':_0x42c0ed[_0x7f8d('0x1b')],'ListId':_0x42c0ed[_0x7f8d('0x51')],'VoiceQueueId':_0x42c0ed[_0x7f8d('0x1c')]||undefined,'CampaignId':_0x42c0ed[_0x7f8d('0x61')]||undefined};};exports[_0x7f8d('0x62')]=function(_0x3ef96a){if(_0x3ef96a===_0x7f8d('0x43')||_0x3ef96a===_0x7f8d('0x63')||_0x3ef96a===_0x7f8d('0x5a')||_0x3ef96a===_0x7f8d('0x64')||_0x3ef96a===_0x7f8d('0x65')||_0x3ef96a===_0x7f8d('0x66')||_0x3ef96a==='membername'||_0x3ef96a===_0x7f8d('0x58')||_0x3ef96a==='calleridname'||_0x3ef96a==='active'||_0x3ef96a===_0x7f8d('0x1a')||_0x3ef96a===_0x7f8d('0x50')||_0x3ef96a==='countbusyretry'||_0x3ef96a===_0x7f8d('0x49')||_0x3ef96a===_0x7f8d('0x4a')||_0x3ef96a===_0x7f8d('0x67')||_0x3ef96a==='callback'||_0x3ef96a==='callbackuniqueid'||_0x3ef96a===_0x7f8d('0x68')||_0x3ef96a===_0x7f8d('0x69')||_0x3ef96a===_0x7f8d('0x1b')||_0x3ef96a===_0x7f8d('0x51')||_0x3ef96a==='UserId'||_0x3ef96a===_0x7f8d('0x1c')||_0x3ef96a===_0x7f8d('0x6a')||_0x3ef96a==='xmd-voicequeueid'||_0x3ef96a===_0x7f8d('0x6b')||_0x3ef96a===_0x7f8d('0x6c')||_0x3ef96a==='xmd-listid'||_0x3ef96a===_0x7f8d('0x6d')||_0x3ef96a===_0x7f8d('0x6e')||_0x3ef96a===_0x7f8d('0x6f')||_0x3ef96a===_0x7f8d('0x70')||_0x3ef96a===_0x7f8d('0x71')||_0x3ef96a===_0x7f8d('0x72')||_0x3ef96a==='xmd-cdrtype'||_0x3ef96a===_0x7f8d('0x73')||_0x3ef96a===_0x7f8d('0x74')||_0x3ef96a===_0x7f8d('0x75')||_0x3ef96a===_0x7f8d('0x76')||_0x3ef96a===_0x7f8d('0x77')||_0x3ef96a===_0x7f8d('0x78')||_0x3ef96a===_0x7f8d('0x79')||_0x3ef96a===_0x7f8d('0x7a')||_0x3ef96a===_0x7f8d('0x7b')||_0x3ef96a===_0x7f8d('0x7c')||_0x3ef96a===_0x7f8d('0x7d')||_0x3ef96a===_0x7f8d('0x76')||_0x3ef96a===_0x7f8d('0x77')||_0x3ef96a===_0x7f8d('0x78')||_0x3ef96a==='rtpaudioqosjitterbridged'||_0x3ef96a==='rtpaudioqosloss'||_0x3ef96a===_0x7f8d('0x7b')||_0x3ef96a===_0x7f8d('0x7c')||_0x3ef96a===_0x7f8d('0x7d')||_0x3ef96a==='bridgepeer'||_0x3ef96a===_0x7f8d('0x7e')||_0x3ef96a===_0x7f8d('0x35')||_0x3ef96a===_0x7f8d('0x36')){return![];}return!![];};exports[_0x7f8d('0x7f')]=function(_0x33d4c2,_0xe0bbb7){var _0x4c4e3a,_0x17fdae,_0x6335c3;if(_0xe0bbb7<=0x0){_0xe0bbb7=0x1;}_0x4c4e3a=new RegExp('\x5cw{0,'+_0xe0bbb7+'}$');_0x17fdae=Math[_0x7f8d('0x80')](0xa,_0xe0bbb7-0x1);_0x6335c3=Math[_0x7f8d('0x80')](0xa,_0xe0bbb7)-0x1;return util['format']('%s',_[_0x7f8d('0x81')](_0x33d4c2,_0x4c4e3a,_['random'](_0x17fdae,_0x6335c3)));};exports['extractCalleridName']=function(_0x31db8c){var _0x16631b=_0x31db8c[_0x7f8d('0x82')](/"(.*?)"/);return _0x16631b?_0x16631b[0x1]:_0x31db8c;};exports[_0x7f8d('0x83')]=function(_0x276ec8){var _0x5ebe58=_0x276ec8[_0x7f8d('0x82')](/<(.*?)>/);return _0x5ebe58?_0x5ebe58[0x1]:_0x276ec8;};
\ No newline at end of file
index b5b0c15..ab29024 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa786=['boolean','queueremove','reload','voicequeuechannel','voicechannel','voicequeuechannelhangup','voicequeuechannelredirect','string','number'];(function(_0x8a611,_0xc085ab){var _0x53ba19=function(_0x23b298){while(--_0x23b298){_0x8a611['push'](_0x8a611['shift']());}};_0x53ba19(++_0xc085ab);}(_0xa786,0x1d2));var _0x6a78=function(_0x11b09c,_0x4f3f76){_0x11b09c=_0x11b09c-0x0;var _0x16c044=_0xa786[_0x11b09c];return _0x16c044;};'use strict';exports['queueadd']={'queue':{'type':'string','required':!![]},'interface':{'type':_0x6a78('0x0'),'required':!![]},'membername':{'type':_0x6a78('0x0'),'required':!![]},'penalty':{'type':_0x6a78('0x1'),'required':![]},'paused':{'type':_0x6a78('0x2'),'required':![]}};exports[_0x6a78('0x3')]={'queue':{'type':_0x6a78('0x0'),'required':!![]},'interface':{'type':_0x6a78('0x0'),'required':!![]}};exports['queuepause']={'interface':{'type':_0x6a78('0x0'),'required':!![]},'paused':{'type':_0x6a78('0x2')},'reason':{'type':_0x6a78('0x0'),'required':![]}};exports[_0x6a78('0x4')]={'module':{'type':_0x6a78('0x0'),'required':![]}};exports[_0x6a78('0x5')]={'uniqueid':{'type':_0x6a78('0x0'),'required':!![]}};exports[_0x6a78('0x6')]={'uniqueid':{'type':_0x6a78('0x0'),'required':!![]},'filename':{'type':_0x6a78('0x0')},'format':{'type':_0x6a78('0x0')},'mixmonitorid':{'type':_0x6a78('0x0')}};exports[_0x6a78('0x7')]={'uniqueid':{'type':_0x6a78('0x0'),'required':!![]}};exports[_0x6a78('0x8')]={'uniqueid':{'type':_0x6a78('0x0'),'required':!![]},'exten':{'type':_0x6a78('0x0'),'required':!![]},'context':{'type':_0x6a78('0x0')}};
\ No newline at end of file
+var _0xf0ba=['voicechannel','voicequeuechannelhangup','voicequeuechannelredirect','queueadd','string','number','queueremove','queuepause','boolean','voicequeuechannel'];(function(_0x522ae8,_0x3b637e){var _0x3189b9=function(_0x3115d4){while(--_0x3115d4){_0x522ae8['push'](_0x522ae8['shift']());}};_0x3189b9(++_0x3b637e);}(_0xf0ba,0x1ed));var _0xaf0b=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xf0ba[_0x14add3];return _0x4a174f;};'use strict';exports[_0xaf0b('0x0')]={'queue':{'type':_0xaf0b('0x1'),'required':!![]},'interface':{'type':_0xaf0b('0x1'),'required':!![]},'membername':{'type':_0xaf0b('0x1'),'required':!![]},'penalty':{'type':_0xaf0b('0x2'),'required':![]},'paused':{'type':'boolean','required':![]}};exports[_0xaf0b('0x3')]={'queue':{'type':_0xaf0b('0x1'),'required':!![]},'interface':{'type':'string','required':!![]}};exports[_0xaf0b('0x4')]={'interface':{'type':'string','required':!![]},'paused':{'type':_0xaf0b('0x5')},'reason':{'type':'string','required':![]}};exports['reload']={'module':{'type':_0xaf0b('0x1'),'required':![]}};exports[_0xaf0b('0x6')]={'uniqueid':{'type':_0xaf0b('0x1'),'required':!![]}};exports[_0xaf0b('0x7')]={'uniqueid':{'type':_0xaf0b('0x1'),'required':!![]},'filename':{'type':'string'},'format':{'type':_0xaf0b('0x1')},'mixmonitorid':{'type':_0xaf0b('0x1')}};exports[_0xaf0b('0x8')]={'uniqueid':{'type':'string','required':!![]}};exports[_0xaf0b('0x9')]={'uniqueid':{'type':'string','required':!![]},'exten':{'type':_0xaf0b('0x1'),'required':!![]},'context':{'type':_0xaf0b('0x1')}};
\ No newline at end of file
index d3525f2..6e23273 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb28a=['outboundDropCallsDayTimeout','outboundDropCallsDayCallersExit','outboundBlacklistCallsDay','outboundReCallsDay','queueStatusComplete','prototype','mergeFromDatabase','initAgents','isUndefined','initTelephones','initTrunks','length','trunks','initVoiceQueues','initTriggers','triggers','initTemplates','initZendeskAccounts','zendeskAccounts','initZohoAccounts','initDeskAccounts','initSugarcrmAccounts','initVtigerAccounts','initServicenowAccounts','servicenowAccounts','initDynamics365Accounts','dynamics365Accounts','initVoiceQueueHopperHistory','merge','initVoiceQueueReports','groupBy','uniqueid','queuecallerabandon','queuecallerleaveAt','diff','queuecallerjoinAt','seconds','sumDuration','queuecallercompleteAt','queuecallerabandonAt','initVoiceCallReports','duration','disposition','ANSWERED','billableseconds','initVoiceExtensions','initCampaignHopperHistory','initFaxAccounts','exports','util','lodash','../model/agent','../model/trigger','../model/template','../model/campaign','../model/voiceExtension','../model/zendeskAccount','../model/salesforceAccount','../model/freshdeskAccount','../model/sugarcrmAccount','../model/vtigerAccount','../model/servicenowAccount','../model/dynamics365Account','../model/faxAccount','agents','telephones','voiceQueues','campaigns','templates','outbound','voiceExtensions','channels','queueChannels','outboundChannels','timers','salesforceAccounts','sugarcrmAccounts','freshdeskAccounts','zohoAccounts','deskAccounts','vtigerAccounts','faxAccounts','mapKeys','hasOwnProperty','format','name','isNil','interface','SIP/%s','total','sumHoldTime','sumBillable','ivrTotalCallsDays','ivrAnswerCallsDay','answered','unmanaged','abandoned','outboundAnswerAgiCallsDay','outboundNoAnswerCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundNoSuchCallsDay','outboundUnknownCallsDay'];(function(_0x37bab4,_0x4fa85e){var _0x336d20=function(_0xdd4ab8){while(--_0xdd4ab8){_0x37bab4['push'](_0x37bab4['shift']());}};_0x336d20(++_0x4fa85e);}(_0xb28a,0x166));var _0xab28=function(_0x546687,_0x3fb7fb){_0x546687=_0x546687-0x0;var _0x2ba3cd=_0xb28a[_0x546687];return _0x2ba3cd;};'use strict';var BPromise=require('bluebird');var util=require(_0xab28('0x0'));var _=require(_0xab28('0x1'));var moment=require('moment');var Agent=require(_0xab28('0x2'));var Telephone=require('../model/telephone');var Trunk=require('../model/trunk');var VoiceQueue=require('../model/voiceQueue');var Trigger=require(_0xab28('0x3'));var Template=require(_0xab28('0x4'));var Campaign=require(_0xab28('0x5'));var VoiceExtension=require(_0xab28('0x6'));var ZendeskAccount=require(_0xab28('0x7'));var SalesforceAccount=require(_0xab28('0x8'));var FreshdeskAccount=require(_0xab28('0x9'));var SugarcrmAccount=require(_0xab28('0xa'));var ZohoAccount=require('../model/zohoAccount');var DeskAccount=require('../model/deskAccount');var VtigerAccount=require(_0xab28('0xb'));var ServicenowAccount=require(_0xab28('0xc'));var Dynamics365Account=require(_0xab28('0xd'));var FaxAccount=require(_0xab28('0xe'));var Realtime=function(){this[_0xab28('0xf')]={};this[_0xab28('0x10')]={};this['trunks']={};this[_0xab28('0x11')]={};this['triggers']={};this[_0xab28('0x12')]={};this[_0xab28('0x13')]={};this[_0xab28('0x14')]={'total':0x0,'answered':0x0,'sumHoldTime':0x0,'sumDuration':0x0,'sumBillable':0x0};this[_0xab28('0x15')]={};this[_0xab28('0x16')]={};this[_0xab28('0x17')]={};this[_0xab28('0x18')]={};this[_0xab28('0x19')]={};this['zendeskAccounts']={};this[_0xab28('0x1a')]={};this[_0xab28('0x1b')]={};this[_0xab28('0x1c')]={};this[_0xab28('0x1d')]={};this[_0xab28('0x1e')]={};this[_0xab28('0x1f')]={};this['servicenowAccounts']={};this['dynamics365Accounts']={};this[_0xab28('0x20')]={};};function freeIsNotKey(_0x3d133e,_0x14e8b4,_0xaaeb24){var _0x53c5c7=_[_0xab28('0x21')](_0x3d133e,function(_0x4912fa,_0x2be1a4){return _0x4912fa[_0xaaeb24];});for(var _0x54f79b in _0x14e8b4){if(_0x14e8b4[_0xab28('0x22')](_0x54f79b)){if(!_0x53c5c7[_0x54f79b]){delete _0x14e8b4[_0x54f79b];}}}}function freeIsNotKeySip(_0x2b0b5c,_0x3d60e4){var _0x4005fd=_[_0xab28('0x21')](_0x2b0b5c,function(_0x1a7b05,_0x397097){return util[_0xab28('0x23')]('SIP/%s',_0x1a7b05[_0xab28('0x24')]);});for(var _0x18af35 in _0x3d60e4){if(_0x3d60e4[_0xab28('0x22')](_0x18af35)){if(!_0x4005fd[_0x18af35]){delete _0x3d60e4[_0x18af35];}}}}function freeIsNotKeyAgent(_0x170a80,_0x2f6541){var _0x1d1690=_[_0xab28('0x21')](_0x170a80,function(_0x56d797,_0x116c2c){var _0x4ec564=_[_0xab28('0x25')](_0x56d797[_0xab28('0x26')])?util['format'](_0xab28('0x27'),_0x56d797[_0xab28('0x24')]):_0x56d797[_0xab28('0x26')];return _0x4ec564;});for(var _0x46a24b in _0x2f6541){if(_0x2f6541[_0xab28('0x22')](_0x46a24b)){if(!_0x1d1690[_0x46a24b]){delete _0x2f6541[_0x46a24b];}}}}function clearVoiceCallReports(_0x350055){_0x350055[_0xab28('0x28')]=0x0;_0x350055['answered']=0x0;_0x350055[_0xab28('0x29')]=0x0;_0x350055['sumDuration']=0x0;_0x350055[_0xab28('0x2a')]=0x0;}function clearCampaigns(_0x2e6359){if(!_['isEmpty'](_0x2e6359)){for(var _0x3928f0 in _0x2e6359){if(_0x2e6359['hasOwnProperty'](_0x3928f0)){_0x2e6359[_0x3928f0][_0xab28('0x2b')]=0x0;_0x2e6359[_0x3928f0][_0xab28('0x2c')]=0x0;}}}}function clearVoiceQueues(_0x3d8c60){if(!_['isEmpty'](_0x3d8c60)){for(var _0x24a692 in _0x3d8c60){if(_0x3d8c60[_0xab28('0x22')](_0x24a692)){_0x3d8c60[_0x24a692]['total']=0x0;_0x3d8c60[_0x24a692][_0xab28('0x2d')]=0x0;_0x3d8c60[_0x24a692][_0xab28('0x2e')]=0x0;_0x3d8c60[_0x24a692][_0xab28('0x2f')]=0x0;_0x3d8c60[_0x24a692][_0xab28('0x29')]=0x0;_0x3d8c60[_0x24a692]['sumDuration']=0x0;_0x3d8c60[_0x24a692][_0xab28('0x2a')]=0x0;_0x3d8c60[_0x24a692][_0xab28('0x30')]=0x0;_0x3d8c60[_0x24a692][_0xab28('0x31')]=0x0;_0x3d8c60[_0x24a692][_0xab28('0x32')]=0x0;_0x3d8c60[_0x24a692][_0xab28('0x33')]=0x0;_0x3d8c60[_0x24a692][_0xab28('0x34')]=0x0;_0x3d8c60[_0x24a692][_0xab28('0x35')]=0x0;_0x3d8c60[_0x24a692][_0xab28('0x36')]=0x0;_0x3d8c60[_0x24a692][_0xab28('0x37')]=0x0;_0x3d8c60[_0x24a692][_0xab28('0x38')]=0x0;_0x3d8c60[_0x24a692]['outboundOriginateFailureCallsDay']=0x0;_0x3d8c60[_0x24a692]['outboundRejectCallsDay']=0x0;_0x3d8c60[_0x24a692][_0xab28('0x39')]=0x0;_0x3d8c60[_0x24a692]['outboundAnswerAgiCallsDay']=0x0;_0x3d8c60[_0x24a692]['outboundAnswerCallsDay']=0x0;_0x3d8c60[_0x24a692][_0xab28('0x3a')]=!![];}}}}Realtime[_0xab28('0x3b')][_0xab28('0x3c')]=function(_0xd5c809,_0x3639e1){for(var _0x1911fa in _0x3639e1){if(_0xd5c809['hasOwnProperty'](_0x1911fa)){_0xd5c809[_0x1911fa]=_0x3639e1[_0x1911fa];}}};Realtime[_0xab28('0x3b')][_0xab28('0x3d')]=function(){var _0x348cb5=this;return function(_0x5ae750){if(_0x5ae750){freeIsNotKeyAgent(_0x5ae750,_0x348cb5[_0xab28('0xf')]);for(var _0x59430f=0x0,_0x2a62b1={},_0x267aaa={};_0x59430f<_0x5ae750['length'];_0x59430f+=0x1){_0x2a62b1=_0x5ae750[_0x59430f];var _0x3dd7d6=_[_0xab28('0x25')](_0x2a62b1[_0xab28('0x26')])?util[_0xab28('0x23')](_0xab28('0x27'),_0x2a62b1[_0xab28('0x24')]):_0x2a62b1['interface'];if(_[_0xab28('0x3e')](_0x348cb5[_0xab28('0xf')][_0x3dd7d6])){_0x348cb5['agents'][_0x3dd7d6]=new Agent(_0x2a62b1);}else{_0x348cb5[_0xab28('0x3c')](_0x348cb5[_0xab28('0xf')][_0x3dd7d6],_0x2a62b1);}}}return _0x348cb5[_0xab28('0xf')];};};Realtime[_0xab28('0x3b')][_0xab28('0x3f')]=function(){var _0xd4984c=this;return function(_0x2d3ba7){if(_0x2d3ba7){freeIsNotKeySip(_0x2d3ba7,_0xd4984c[_0xab28('0x10')]);for(var _0x51aefa=0x0,_0x207ac3={},_0x23e496={};_0x51aefa<_0x2d3ba7['length'];_0x51aefa+=0x1){_0x207ac3=_0x2d3ba7[_0x51aefa];if(_[_0xab28('0x3e')](_0xd4984c[_0xab28('0x10')][util['format'](_0xab28('0x27'),_0x207ac3[_0xab28('0x24')])])){_0xd4984c[_0xab28('0x10')][util[_0xab28('0x23')](_0xab28('0x27'),_0x207ac3[_0xab28('0x24')])]=new Telephone(_0x207ac3);}else{_0xd4984c[_0xab28('0x3c')](_0xd4984c['telephones'][util[_0xab28('0x23')](_0xab28('0x27'),_0x207ac3['name'])],_0x207ac3);}}}return _0xd4984c[_0xab28('0x10')];};};Realtime[_0xab28('0x3b')][_0xab28('0x40')]=function(){var _0x86b83b=this;return function(_0x22b5af){if(_0x22b5af){freeIsNotKeySip(_0x22b5af,_0x86b83b['trunks']);for(var _0x16c441=0x0,_0x5bf681={},_0x4cbf58={};_0x16c441<_0x22b5af[_0xab28('0x41')];_0x16c441+=0x1){_0x5bf681=_0x22b5af[_0x16c441];if(_[_0xab28('0x3e')](_0x86b83b[_0xab28('0x42')][util[_0xab28('0x23')](_0xab28('0x27'),_0x5bf681['name'])])){_0x86b83b['trunks'][util[_0xab28('0x23')]('SIP/%s',_0x5bf681[_0xab28('0x24')])]=new Trunk(_0x5bf681);}else{_0x86b83b['mergeFromDatabase'](_0x86b83b['trunks'][util[_0xab28('0x23')](_0xab28('0x27'),_0x5bf681[_0xab28('0x24')])],_0x5bf681);}}}return _0x86b83b[_0xab28('0x42')];};};Realtime[_0xab28('0x3b')][_0xab28('0x43')]=function(){var _0x53c232=this;return function(_0x4dd187){if(_0x4dd187){freeIsNotKey(_0x4dd187,_0x53c232[_0xab28('0x11')],'name');for(var _0x406b8a=0x0,_0x5917f6={},_0x93bd97={};_0x406b8a<_0x4dd187['length'];_0x406b8a+=0x1){_0x5917f6=_0x4dd187[_0x406b8a];if(_['isUndefined'](_0x53c232[_0xab28('0x11')][_0x5917f6['name']])){_0x53c232['voiceQueues'][_0x5917f6['name']]=new VoiceQueue(_0x5917f6);}else{_0x53c232[_0xab28('0x3c')](_0x53c232['voiceQueues'][_0x5917f6[_0xab28('0x24')]],_0x5917f6);}}}return _0x53c232[_0xab28('0x11')];};};Realtime[_0xab28('0x3b')][_0xab28('0x44')]=function(){var _0x51243e=this;return function(_0x249a71){if(_0x249a71){freeIsNotKey(_0x249a71,_0x51243e[_0xab28('0x45')],'id');for(var _0x3c7e5b=0x0,_0x1192fc={},_0xa4e9a1={};_0x3c7e5b<_0x249a71['length'];_0x3c7e5b+=0x1){_0x1192fc=_0x249a71[_0x3c7e5b];if(_[_0xab28('0x3e')](_0x51243e[_0xab28('0x45')][_0x1192fc['id']])){_0x51243e['triggers'][_0x1192fc['id']]=new Trigger(_0x1192fc);}else{_0x51243e[_0xab28('0x3c')](_0x51243e['triggers'][_0x1192fc['id']],_0x1192fc);}}}return _0x51243e['triggers'];};};Realtime[_0xab28('0x3b')][_0xab28('0x46')]=function(){var _0x5672eb=this;return function(_0x39a4ef){if(_0x39a4ef){freeIsNotKey(_0x39a4ef,_0x5672eb['templates'],'id');for(var _0x1d1407=0x0,_0x46c0dd={},_0x40911b={};_0x1d1407<_0x39a4ef[_0xab28('0x41')];_0x1d1407+=0x1){_0x46c0dd=_0x39a4ef[_0x1d1407];if(_['isUndefined'](_0x5672eb[_0xab28('0x13')][_0x46c0dd['id']])){_0x5672eb['templates'][_0x46c0dd['id']]=new Template(_0x46c0dd);}else{_0x5672eb['mergeFromDatabase'](_0x5672eb[_0xab28('0x13')][_0x46c0dd['id']],_0x46c0dd);}}}return _0x5672eb['templates'];};};Realtime[_0xab28('0x3b')][_0xab28('0x47')]=function(){var _0x4ada8a=this;return function(_0x3e037d){if(_0x3e037d){freeIsNotKey(_0x3e037d,_0x4ada8a[_0xab28('0x48')],'id');for(var _0x49bc36=0x0,_0x41dd3d={},_0x586167={};_0x49bc36<_0x3e037d[_0xab28('0x41')];_0x49bc36+=0x1){_0x41dd3d=_0x3e037d[_0x49bc36];if(_[_0xab28('0x3e')](_0x4ada8a[_0xab28('0x48')][_0x41dd3d['id']])){_0x4ada8a[_0xab28('0x48')][_0x41dd3d['id']]=new ZendeskAccount(_0x41dd3d);}else{_0x4ada8a[_0xab28('0x3c')](_0x4ada8a[_0xab28('0x48')][_0x41dd3d['id']],_0x41dd3d);}}}return _0x4ada8a[_0xab28('0x48')];};};Realtime[_0xab28('0x3b')]['initSalesforceAccounts']=function(){var _0x39c5b4=this;return function(_0x1b9cad){if(_0x1b9cad){freeIsNotKey(_0x1b9cad,_0x39c5b4[_0xab28('0x1a')],'id');for(var _0x12da9c=0x0,_0xc7b341={},_0x46202b={};_0x12da9c<_0x1b9cad[_0xab28('0x41')];_0x12da9c+=0x1){_0xc7b341=_0x1b9cad[_0x12da9c];if(_[_0xab28('0x3e')](_0x39c5b4[_0xab28('0x1a')][_0xc7b341['id']])){_0x39c5b4[_0xab28('0x1a')][_0xc7b341['id']]=new SalesforceAccount(_0xc7b341);}else{_0x39c5b4[_0xab28('0x3c')](_0x39c5b4['salesforceAccounts'][_0xc7b341['id']],_0xc7b341);}}}return _0x39c5b4[_0xab28('0x1a')];};};Realtime['prototype']['initFreshdeskAccounts']=function(){var _0xfef4b9=this;return function(_0x46352d){if(_0x46352d){freeIsNotKey(_0x46352d,_0xfef4b9[_0xab28('0x1c')],'id');for(var _0x51ba1f=0x0,_0x51da7f={},_0x13265a={};_0x51ba1f<_0x46352d[_0xab28('0x41')];_0x51ba1f+=0x1){_0x51da7f=_0x46352d[_0x51ba1f];if(_[_0xab28('0x3e')](_0xfef4b9[_0xab28('0x1c')][_0x51da7f['id']])){_0xfef4b9[_0xab28('0x1c')][_0x51da7f['id']]=new FreshdeskAccount(_0x51da7f);}else{_0xfef4b9[_0xab28('0x3c')](_0xfef4b9[_0xab28('0x1c')][_0x51da7f['id']],_0x51da7f);}}}return _0xfef4b9[_0xab28('0x1c')];};};Realtime[_0xab28('0x3b')][_0xab28('0x49')]=function(){var _0x275e9c=this;return function(_0x311261){if(_0x311261){freeIsNotKey(_0x311261,_0x275e9c[_0xab28('0x1d')],'id');for(var _0x150ee2=0x0,_0x1937cb={},_0x2d99b1={};_0x150ee2<_0x311261[_0xab28('0x41')];_0x150ee2+=0x1){_0x1937cb=_0x311261[_0x150ee2];if(_[_0xab28('0x3e')](_0x275e9c[_0xab28('0x1d')][_0x1937cb['id']])){_0x275e9c[_0xab28('0x1d')][_0x1937cb['id']]=new ZohoAccount(_0x1937cb);}else{_0x275e9c[_0xab28('0x3c')](_0x275e9c[_0xab28('0x1d')][_0x1937cb['id']],_0x1937cb);}}}return _0x275e9c[_0xab28('0x1d')];};};Realtime[_0xab28('0x3b')][_0xab28('0x4a')]=function(){var _0x7cc703=this;return function(_0x1e2b50){if(_0x1e2b50){freeIsNotKey(_0x1e2b50,_0x7cc703['deskAccounts'],'id');for(var _0x2ad92b=0x0,_0x45518e={},_0x124e62={};_0x2ad92b<_0x1e2b50['length'];_0x2ad92b+=0x1){_0x45518e=_0x1e2b50[_0x2ad92b];if(_[_0xab28('0x3e')](_0x7cc703['deskAccounts'][_0x45518e['id']])){_0x7cc703[_0xab28('0x1e')][_0x45518e['id']]=new DeskAccount(_0x45518e);}else{_0x7cc703[_0xab28('0x3c')](_0x7cc703['deskAccounts'][_0x45518e['id']],_0x45518e);}}}return _0x7cc703['deskAccounts'];};};Realtime[_0xab28('0x3b')][_0xab28('0x4b')]=function(){var _0x59422a=this;return function(_0x63f569){if(_0x63f569){freeIsNotKey(_0x63f569,_0x59422a['sugarcrmAccounts'],'id');for(var _0x5142fc=0x0,_0x12b8d8={},_0x2223af={};_0x5142fc<_0x63f569[_0xab28('0x41')];_0x5142fc+=0x1){_0x12b8d8=_0x63f569[_0x5142fc];if(_['isUndefined'](_0x59422a[_0xab28('0x1b')][_0x12b8d8['id']])){_0x59422a[_0xab28('0x1b')][_0x12b8d8['id']]=new SugarcrmAccount(_0x12b8d8);}else{_0x59422a[_0xab28('0x3c')](_0x59422a[_0xab28('0x1b')][_0x12b8d8['id']],_0x12b8d8);}}}return _0x59422a[_0xab28('0x1b')];};};Realtime[_0xab28('0x3b')][_0xab28('0x4c')]=function(){var _0x4a622f=this;return function(_0x124573){if(_0x124573){freeIsNotKey(_0x124573,_0x4a622f[_0xab28('0x1f')],'id');for(var _0x8b9fa3=0x0,_0x7c046d={},_0x21b1a6={};_0x8b9fa3<_0x124573[_0xab28('0x41')];_0x8b9fa3+=0x1){_0x7c046d=_0x124573[_0x8b9fa3];if(_[_0xab28('0x3e')](_0x4a622f['vtigerAccounts'][_0x7c046d['id']])){_0x4a622f[_0xab28('0x1f')][_0x7c046d['id']]=new VtigerAccount(_0x7c046d);}else{_0x4a622f[_0xab28('0x3c')](_0x4a622f['vtigerAccounts'][_0x7c046d['id']],_0x7c046d);}}}return _0x4a622f[_0xab28('0x1f')];};};Realtime['prototype'][_0xab28('0x4d')]=function(){var _0x47a4dd=this;return function(_0x2452ee){if(_0x2452ee){freeIsNotKey(_0x2452ee,_0x47a4dd[_0xab28('0x4e')],'id');for(var _0x2a2f69=0x0,_0x54ab8c={},_0x3fbbd4={};_0x2a2f69<_0x2452ee[_0xab28('0x41')];_0x2a2f69+=0x1){_0x54ab8c=_0x2452ee[_0x2a2f69];if(_[_0xab28('0x3e')](_0x47a4dd['servicenowAccounts'][_0x54ab8c['id']])){_0x47a4dd['servicenowAccounts'][_0x54ab8c['id']]=new ServicenowAccount(_0x54ab8c);}else{_0x47a4dd['mergeFromDatabase'](_0x47a4dd['servicenowAccounts'][_0x54ab8c['id']],_0x54ab8c);}}}return _0x47a4dd['servicenowAccounts'];};};Realtime[_0xab28('0x3b')][_0xab28('0x4f')]=function(){var _0xd77dd1=this;return function(_0x216d8e){if(_0x216d8e){freeIsNotKey(_0x216d8e,_0xd77dd1[_0xab28('0x50')],'id');for(var _0x51a68c=0x0,_0x27a9fa={},_0x337b3d={};_0x51a68c<_0x216d8e[_0xab28('0x41')];_0x51a68c+=0x1){_0x27a9fa=_0x216d8e[_0x51a68c];if(_[_0xab28('0x3e')](_0xd77dd1[_0xab28('0x50')][_0x27a9fa['id']])){_0xd77dd1['dynamics365Accounts'][_0x27a9fa['id']]=new Dynamics365Account(_0x27a9fa);}else{_0xd77dd1[_0xab28('0x3c')](_0xd77dd1['dynamics365Accounts'][_0x27a9fa['id']],_0x27a9fa);}}}return _0xd77dd1[_0xab28('0x50')];};};Realtime['prototype'][_0xab28('0x51')]=function(){var _0x212b87=this;return function(_0x43aede){for(var _0x79e8a5=0x0;_0x79e8a5<_0x43aede[_0xab28('0x41')];_0x79e8a5+=0x1){_[_0xab28('0x52')](_0x212b87[_0xab28('0x11')][_0x43aede[_0x79e8a5][_0xab28('0x24')]],_0x43aede[_0x79e8a5]);}return _0x212b87['voiceQueues'];};};Realtime[_0xab28('0x3b')][_0xab28('0x53')]=function(){var _0x5ce9d0=this;return function(_0x46d287){clearVoiceQueues(_0x5ce9d0[_0xab28('0x11')]);if(_0x46d287){_0x46d287=_[_0xab28('0x54')](_0x46d287,_0xab28('0x55'));for(var _0x2c27ae in _0x46d287){if(_0x46d287[_0xab28('0x22')](_0x2c27ae)){var _0x1dea1d={};for(var _0x9f84c3=0x0;_0x9f84c3<_0x46d287[_0x2c27ae]['length'];_0x9f84c3+=0x1){var _0x5ba005=_0x46d287[_0x2c27ae][_0x9f84c3]['queue'];if(_0x5ce9d0[_0xab28('0x11')][_0x5ba005]){if(_0x46d287[_0x2c27ae][_0x9f84c3]['queuecallerexit']){_0x5ce9d0['voiceQueues'][_0x5ba005][_0xab28('0x2e')]+=0x1;}if(_0x46d287[_0x2c27ae][_0x9f84c3][_0xab28('0x56')]){_0x5ce9d0[_0xab28('0x11')][_0x5ba005][_0xab28('0x2f')]+=0x1;}_0x5ce9d0[_0xab28('0x11')][_0x5ba005][_0xab28('0x29')]+=moment(_0x46d287[_0x2c27ae][_0x9f84c3][_0xab28('0x57')])[_0xab28('0x58')](moment(_0x46d287[_0x2c27ae][_0x9f84c3][_0xab28('0x59')]),_0xab28('0x5a'))||0x0;if(_0x9f84c3===_0x46d287[_0x2c27ae][_0xab28('0x41')]-0x1){_0x5ce9d0[_0xab28('0x11')][_0x5ba005][_0xab28('0x5b')]+=moment(_0x46d287[_0x2c27ae][_0x9f84c3][_0xab28('0x5c')]||_0x46d287[_0x2c27ae][_0x9f84c3][_0xab28('0x5d')]||_0x46d287[_0x2c27ae][_0x9f84c3]['queuecallerexitAt'])[_0xab28('0x58')](moment(_0x46d287[_0x2c27ae][_0x9f84c3][_0xab28('0x59')]),_0xab28('0x5a'))||0x0;_0x5ce9d0[_0xab28('0x11')][_0x5ba005]['total']+=0x1;if(_0x46d287[_0x2c27ae][_0x9f84c3]['queuecallercomplete']){_0x5ce9d0[_0xab28('0x11')][_0x5ba005][_0xab28('0x2d')]+=0x1;_0x5ce9d0['voiceQueues'][_0x5ba005][_0xab28('0x2a')]+=moment(_0x46d287[_0x2c27ae][_0x9f84c3][_0xab28('0x5c')])[_0xab28('0x58')](moment(_0x46d287[_0x2c27ae][_0x9f84c3]['queuecallerleaveAt']),'seconds')||0x0;}}else{_0x5ce9d0['voiceQueues'][_0x5ba005][_0xab28('0x5b')]+=_0x5ce9d0[_0xab28('0x11')][_0x5ba005]['sumHoldTime']||0x0;}}}}}}return _0x5ce9d0['voiceQueues'];};};Realtime[_0xab28('0x3b')][_0xab28('0x5e')]=function(){var _0x795882=this;return function(_0x217ecd){clearVoiceCallReports(_0x795882[_0xab28('0x14')]);if(_0x217ecd){for(var _0x3cc368=0x0;_0x3cc368<_0x217ecd['length'];_0x3cc368+=0x1){_0x795882[_0xab28('0x14')][_0xab28('0x28')]+=0x1;_0x795882[_0xab28('0x14')][_0xab28('0x5b')]+=_0x217ecd[_0x3cc368][_0xab28('0x5f')];if(_0x217ecd[_0x3cc368][_0xab28('0x60')]===_0xab28('0x61')){_0x795882['outbound'][_0xab28('0x2d')]+=0x1;_0x795882['outbound'][_0xab28('0x29')]+=_0x217ecd[_0x3cc368]['duration']-_0x217ecd[_0x3cc368][_0xab28('0x62')]||0x0;_0x795882[_0xab28('0x14')][_0xab28('0x2a')]+=_0x217ecd[_0x3cc368][_0xab28('0x62')];}}}return _0x795882['outbound'];};};Realtime['prototype']['initCampaigns']=function(){var _0x5dcb54=this;return function(_0x25e0a3){if(_0x25e0a3){freeIsNotKey(_0x25e0a3,_0x5dcb54[_0xab28('0x12')],_0xab28('0x24'));for(var _0x108dc1=0x0,_0x14498a={};_0x108dc1<_0x25e0a3[_0xab28('0x41')];_0x108dc1+=0x1){_0x14498a=_0x25e0a3[_0x108dc1];if(_['isUndefined'](_0x5dcb54[_0xab28('0x12')][_0x14498a[_0xab28('0x24')]])){_0x5dcb54[_0xab28('0x12')][_0x14498a[_0xab28('0x24')]]=new Campaign(_0x14498a);}else{_0x5dcb54[_0xab28('0x3c')](_0x5dcb54[_0xab28('0x12')][_0x14498a[_0xab28('0x24')]],_0x14498a);}}}return _0x5dcb54[_0xab28('0x12')];};};Realtime[_0xab28('0x3b')][_0xab28('0x63')]=function(){var _0x2a71c3=this;return function(_0x100a35){if(_0x100a35){freeIsNotKey(_0x100a35,_0x2a71c3[_0xab28('0x15')],'id');for(var _0xf83acf=0x0,_0x2a59ee={};_0xf83acf<_0x100a35[_0xab28('0x41')];_0xf83acf+=0x1){_0x2a59ee=_0x100a35[_0xf83acf];if(_[_0xab28('0x3e')](_0x2a71c3['voiceExtensions'][_0x2a59ee['id']])){_0x2a71c3[_0xab28('0x15')][_0x2a59ee['id']]=new VoiceExtension(_0x2a59ee);}else{_0x2a71c3['mergeFromDatabase'](_0x2a71c3[_0xab28('0x15')][_0x2a59ee['id']],_0x2a59ee);}}}return _0x2a71c3[_0xab28('0x15')];};};Realtime[_0xab28('0x3b')][_0xab28('0x64')]=function(){var _0x57c9a5=this;return function(_0x38c17d){clearCampaigns(_0x57c9a5[_0xab28('0x12')]);for(var _0x2e43ec=0x0;_0x2e43ec<_0x38c17d[_0xab28('0x41')];_0x2e43ec+=0x1){_[_0xab28('0x52')](_0x57c9a5[_0xab28('0x12')][_0x38c17d[_0x2e43ec][_0xab28('0x24')]],_0x38c17d[_0x2e43ec]);}return _0x57c9a5[_0xab28('0x12')];};};Realtime[_0xab28('0x3b')][_0xab28('0x65')]=function(){var _0x5a2dab=this;return function(_0x4a972d){if(_0x4a972d){freeIsNotKey(_0x4a972d,_0x5a2dab['faxAccounts'],'id');for(var _0x483daf=0x0,_0x36a86d={},_0x58ac31={};_0x483daf<_0x4a972d['length'];_0x483daf+=0x1){_0x36a86d=_0x4a972d[_0x483daf];if(_[_0xab28('0x3e')](_0x5a2dab['faxAccounts'][_0x36a86d['id']])){_0x5a2dab['faxAccounts'][_0x36a86d['id']]=new FaxAccount(_0x36a86d);}else{_0x5a2dab[_0xab28('0x3c')](_0x5a2dab[_0xab28('0x20')][_0x36a86d['id']],_0x36a86d);}}}return _0x5a2dab[_0xab28('0x20')];};};module[_0xab28('0x66')]=Realtime;
\ No newline at end of file
+var _0x7398=['dynamics365Accounts','initVoiceQueueHopperHistory','merge','groupBy','uniqueid','queue','queuecallerexit','queuecallerabandon','queuecallerleaveAt','diff','queuecallerjoinAt','seconds','queuecallercompleteAt','queuecallerabandonAt','queuecallerexitAt','queuecallercomplete','initVoiceCallReports','duration','disposition','ANSWERED','billableseconds','initCampaigns','initVoiceExtensions','initCampaignHopperHistory','exports','util','moment','../model/agent','../model/trunk','../model/trigger','../model/voiceExtension','../model/zendeskAccount','../model/salesforceAccount','../model/sugarcrmAccount','../model/zohoAccount','../model/deskAccount','../model/vtigerAccount','../model/servicenowAccount','../model/dynamics365Account','../model/faxAccount','telephones','voiceQueues','triggers','campaigns','templates','outbound','voiceExtensions','channels','queueChannels','outboundChannels','timers','zendeskAccounts','sugarcrmAccounts','zohoAccounts','vtigerAccounts','faxAccounts','mapKeys','hasOwnProperty','format','SIP/%s','name','isNil','interface','total','answered','sumDuration','isEmpty','ivrTotalCallsDays','ivrAnswerCallsDay','abandoned','sumHoldTime','sumBillable','outboundAnswerAgiCallsDay','outboundNoAnswerCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundNoSuchCallsDay','outboundDropCallsDayTimeout','outboundDropCallsDayCallersExit','outboundOriginateFailureCallsDay','queueStatusComplete','prototype','initAgents','agents','initTelephones','length','mergeFromDatabase','trunks','isUndefined','initVoiceQueues','initTriggers','initTemplates','initZendeskAccounts','initSalesforceAccounts','salesforceAccounts','initFreshdeskAccounts','freshdeskAccounts','initZohoAccounts','initDeskAccounts','deskAccounts','initSugarcrmAccounts','initVtigerAccounts','initServicenowAccounts','servicenowAccounts','initDynamics365Accounts'];(function(_0x373d6c,_0x100736){var _0x444d89=function(_0x853a9b){while(--_0x853a9b){_0x373d6c['push'](_0x373d6c['shift']());}};_0x444d89(++_0x100736);}(_0x7398,0x82));var _0x8739=function(_0x3511d3,_0x4107ae){_0x3511d3=_0x3511d3-0x0;var _0x5d6321=_0x7398[_0x3511d3];return _0x5d6321;};'use strict';var BPromise=require('bluebird');var util=require(_0x8739('0x0'));var _=require('lodash');var moment=require(_0x8739('0x1'));var Agent=require(_0x8739('0x2'));var Telephone=require('../model/telephone');var Trunk=require(_0x8739('0x3'));var VoiceQueue=require('../model/voiceQueue');var Trigger=require(_0x8739('0x4'));var Template=require('../model/template');var Campaign=require('../model/campaign');var VoiceExtension=require(_0x8739('0x5'));var ZendeskAccount=require(_0x8739('0x6'));var SalesforceAccount=require(_0x8739('0x7'));var FreshdeskAccount=require('../model/freshdeskAccount');var SugarcrmAccount=require(_0x8739('0x8'));var ZohoAccount=require(_0x8739('0x9'));var DeskAccount=require(_0x8739('0xa'));var VtigerAccount=require(_0x8739('0xb'));var ServicenowAccount=require(_0x8739('0xc'));var Dynamics365Account=require(_0x8739('0xd'));var FaxAccount=require(_0x8739('0xe'));var Realtime=function(){this['agents']={};this[_0x8739('0xf')]={};this['trunks']={};this[_0x8739('0x10')]={};this[_0x8739('0x11')]={};this[_0x8739('0x12')]={};this[_0x8739('0x13')]={};this[_0x8739('0x14')]={'total':0x0,'answered':0x0,'sumHoldTime':0x0,'sumDuration':0x0,'sumBillable':0x0};this[_0x8739('0x15')]={};this[_0x8739('0x16')]={};this[_0x8739('0x17')]={};this[_0x8739('0x18')]={};this[_0x8739('0x19')]={};this[_0x8739('0x1a')]={};this['salesforceAccounts']={};this[_0x8739('0x1b')]={};this['freshdeskAccounts']={};this[_0x8739('0x1c')]={};this['deskAccounts']={};this[_0x8739('0x1d')]={};this['servicenowAccounts']={};this['dynamics365Accounts']={};this[_0x8739('0x1e')]={};};function freeIsNotKey(_0xc4a7e,_0x34dd58,_0x3e8203){var _0x16eaf8=_[_0x8739('0x1f')](_0xc4a7e,function(_0x5918b4,_0x5b943a){return _0x5918b4[_0x3e8203];});for(var _0x599e86 in _0x34dd58){if(_0x34dd58[_0x8739('0x20')](_0x599e86)){if(!_0x16eaf8[_0x599e86]){delete _0x34dd58[_0x599e86];}}}}function freeIsNotKeySip(_0x27ed6a,_0x60e124){var _0x3a61f5=_['mapKeys'](_0x27ed6a,function(_0xd106ee,_0x24e6be){return util[_0x8739('0x21')](_0x8739('0x22'),_0xd106ee[_0x8739('0x23')]);});for(var _0x3e6e19 in _0x60e124){if(_0x60e124['hasOwnProperty'](_0x3e6e19)){if(!_0x3a61f5[_0x3e6e19]){delete _0x60e124[_0x3e6e19];}}}}function freeIsNotKeyAgent(_0x4b4bec,_0x217a5b){var _0x55647b=_[_0x8739('0x1f')](_0x4b4bec,function(_0x5c627d,_0x4e13c3){var _0x5b7323=_[_0x8739('0x24')](_0x5c627d[_0x8739('0x25')])?util['format'](_0x8739('0x22'),_0x5c627d[_0x8739('0x23')]):_0x5c627d[_0x8739('0x25')];return _0x5b7323;});for(var _0x6975b4 in _0x217a5b){if(_0x217a5b[_0x8739('0x20')](_0x6975b4)){if(!_0x55647b[_0x6975b4]){delete _0x217a5b[_0x6975b4];}}}}function clearVoiceCallReports(_0x27d374){_0x27d374[_0x8739('0x26')]=0x0;_0x27d374[_0x8739('0x27')]=0x0;_0x27d374['sumHoldTime']=0x0;_0x27d374[_0x8739('0x28')]=0x0;_0x27d374['sumBillable']=0x0;}function clearCampaigns(_0xe0efaf){if(!_[_0x8739('0x29')](_0xe0efaf)){for(var _0x34ae6c in _0xe0efaf){if(_0xe0efaf[_0x8739('0x20')](_0x34ae6c)){_0xe0efaf[_0x34ae6c][_0x8739('0x2a')]=0x0;_0xe0efaf[_0x34ae6c][_0x8739('0x2b')]=0x0;}}}}function clearVoiceQueues(_0x966d99){if(!_[_0x8739('0x29')](_0x966d99)){for(var _0x1755a2 in _0x966d99){if(_0x966d99[_0x8739('0x20')](_0x1755a2)){_0x966d99[_0x1755a2][_0x8739('0x26')]=0x0;_0x966d99[_0x1755a2][_0x8739('0x27')]=0x0;_0x966d99[_0x1755a2]['unmanaged']=0x0;_0x966d99[_0x1755a2][_0x8739('0x2c')]=0x0;_0x966d99[_0x1755a2][_0x8739('0x2d')]=0x0;_0x966d99[_0x1755a2][_0x8739('0x28')]=0x0;_0x966d99[_0x1755a2][_0x8739('0x2e')]=0x0;_0x966d99[_0x1755a2][_0x8739('0x2f')]=0x0;_0x966d99[_0x1755a2][_0x8739('0x30')]=0x0;_0x966d99[_0x1755a2][_0x8739('0x31')]=0x0;_0x966d99[_0x1755a2][_0x8739('0x32')]=0x0;_0x966d99[_0x1755a2][_0x8739('0x33')]=0x0;_0x966d99[_0x1755a2]['outboundUnknownCallsDay']=0x0;_0x966d99[_0x1755a2][_0x8739('0x34')]=0x0;_0x966d99[_0x1755a2][_0x8739('0x35')]=0x0;_0x966d99[_0x1755a2]['outboundBlacklistCallsDay']=0x0;_0x966d99[_0x1755a2][_0x8739('0x36')]=0x0;_0x966d99[_0x1755a2]['outboundRejectCallsDay']=0x0;_0x966d99[_0x1755a2]['outboundReCallsDay']=0x0;_0x966d99[_0x1755a2][_0x8739('0x2f')]=0x0;_0x966d99[_0x1755a2]['outboundAnswerCallsDay']=0x0;_0x966d99[_0x1755a2][_0x8739('0x37')]=!![];}}}}Realtime[_0x8739('0x38')]['mergeFromDatabase']=function(_0x1fe38a,_0x20c7f8){for(var _0x4ccc09 in _0x20c7f8){if(_0x1fe38a['hasOwnProperty'](_0x4ccc09)){_0x1fe38a[_0x4ccc09]=_0x20c7f8[_0x4ccc09];}}};Realtime[_0x8739('0x38')][_0x8739('0x39')]=function(){var _0x312c41=this;return function(_0x35b507){if(_0x35b507){freeIsNotKeyAgent(_0x35b507,_0x312c41[_0x8739('0x3a')]);for(var _0x429b15=0x0,_0x1e81f6={},_0x4a7a3f={};_0x429b15<_0x35b507['length'];_0x429b15+=0x1){_0x1e81f6=_0x35b507[_0x429b15];var _0x58ddac=_[_0x8739('0x24')](_0x1e81f6[_0x8739('0x25')])?util[_0x8739('0x21')](_0x8739('0x22'),_0x1e81f6['name']):_0x1e81f6[_0x8739('0x25')];if(_['isUndefined'](_0x312c41[_0x8739('0x3a')][_0x58ddac])){_0x312c41[_0x8739('0x3a')][_0x58ddac]=new Agent(_0x1e81f6);}else{_0x312c41['mergeFromDatabase'](_0x312c41['agents'][_0x58ddac],_0x1e81f6);}}}return _0x312c41[_0x8739('0x3a')];};};Realtime[_0x8739('0x38')][_0x8739('0x3b')]=function(){var _0x1e91a0=this;return function(_0x514f61){if(_0x514f61){freeIsNotKeySip(_0x514f61,_0x1e91a0[_0x8739('0xf')]);for(var _0x3e5981=0x0,_0x2e8139={},_0xe32684={};_0x3e5981<_0x514f61[_0x8739('0x3c')];_0x3e5981+=0x1){_0x2e8139=_0x514f61[_0x3e5981];if(_['isUndefined'](_0x1e91a0['telephones'][util[_0x8739('0x21')]('SIP/%s',_0x2e8139[_0x8739('0x23')])])){_0x1e91a0[_0x8739('0xf')][util[_0x8739('0x21')](_0x8739('0x22'),_0x2e8139[_0x8739('0x23')])]=new Telephone(_0x2e8139);}else{_0x1e91a0[_0x8739('0x3d')](_0x1e91a0[_0x8739('0xf')][util[_0x8739('0x21')]('SIP/%s',_0x2e8139['name'])],_0x2e8139);}}}return _0x1e91a0[_0x8739('0xf')];};};Realtime[_0x8739('0x38')]['initTrunks']=function(){var _0xd3036e=this;return function(_0x5c6ed9){if(_0x5c6ed9){freeIsNotKeySip(_0x5c6ed9,_0xd3036e[_0x8739('0x3e')]);for(var _0x4be209=0x0,_0x9d03ac={},_0x37dc18={};_0x4be209<_0x5c6ed9[_0x8739('0x3c')];_0x4be209+=0x1){_0x9d03ac=_0x5c6ed9[_0x4be209];if(_[_0x8739('0x3f')](_0xd3036e[_0x8739('0x3e')][util[_0x8739('0x21')](_0x8739('0x22'),_0x9d03ac['name'])])){_0xd3036e[_0x8739('0x3e')][util['format'](_0x8739('0x22'),_0x9d03ac[_0x8739('0x23')])]=new Trunk(_0x9d03ac);}else{_0xd3036e[_0x8739('0x3d')](_0xd3036e[_0x8739('0x3e')][util[_0x8739('0x21')]('SIP/%s',_0x9d03ac[_0x8739('0x23')])],_0x9d03ac);}}}return _0xd3036e[_0x8739('0x3e')];};};Realtime[_0x8739('0x38')][_0x8739('0x40')]=function(){var _0x34c5e8=this;return function(_0x51fe94){if(_0x51fe94){freeIsNotKey(_0x51fe94,_0x34c5e8['voiceQueues'],_0x8739('0x23'));for(var _0x1272a0=0x0,_0x386ae6={},_0x504d82={};_0x1272a0<_0x51fe94[_0x8739('0x3c')];_0x1272a0+=0x1){_0x386ae6=_0x51fe94[_0x1272a0];if(_[_0x8739('0x3f')](_0x34c5e8[_0x8739('0x10')][_0x386ae6['name']])){_0x34c5e8['voiceQueues'][_0x386ae6[_0x8739('0x23')]]=new VoiceQueue(_0x386ae6);}else{_0x34c5e8[_0x8739('0x3d')](_0x34c5e8[_0x8739('0x10')][_0x386ae6[_0x8739('0x23')]],_0x386ae6);}}}return _0x34c5e8[_0x8739('0x10')];};};Realtime[_0x8739('0x38')][_0x8739('0x41')]=function(){var _0x177563=this;return function(_0x9f26b6){if(_0x9f26b6){freeIsNotKey(_0x9f26b6,_0x177563[_0x8739('0x11')],'id');for(var _0x310195=0x0,_0xdb8f57={},_0xcd1157={};_0x310195<_0x9f26b6['length'];_0x310195+=0x1){_0xdb8f57=_0x9f26b6[_0x310195];if(_['isUndefined'](_0x177563['triggers'][_0xdb8f57['id']])){_0x177563['triggers'][_0xdb8f57['id']]=new Trigger(_0xdb8f57);}else{_0x177563[_0x8739('0x3d')](_0x177563[_0x8739('0x11')][_0xdb8f57['id']],_0xdb8f57);}}}return _0x177563[_0x8739('0x11')];};};Realtime['prototype'][_0x8739('0x42')]=function(){var _0x2c2b1e=this;return function(_0x559ca7){if(_0x559ca7){freeIsNotKey(_0x559ca7,_0x2c2b1e[_0x8739('0x13')],'id');for(var _0x18509d=0x0,_0x170a4a={},_0x3cc121={};_0x18509d<_0x559ca7[_0x8739('0x3c')];_0x18509d+=0x1){_0x170a4a=_0x559ca7[_0x18509d];if(_['isUndefined'](_0x2c2b1e[_0x8739('0x13')][_0x170a4a['id']])){_0x2c2b1e[_0x8739('0x13')][_0x170a4a['id']]=new Template(_0x170a4a);}else{_0x2c2b1e['mergeFromDatabase'](_0x2c2b1e[_0x8739('0x13')][_0x170a4a['id']],_0x170a4a);}}}return _0x2c2b1e[_0x8739('0x13')];};};Realtime[_0x8739('0x38')][_0x8739('0x43')]=function(){var _0x18321a=this;return function(_0x1267f6){if(_0x1267f6){freeIsNotKey(_0x1267f6,_0x18321a[_0x8739('0x1a')],'id');for(var _0x40e577=0x0,_0x112ffe={},_0x58ab73={};_0x40e577<_0x1267f6['length'];_0x40e577+=0x1){_0x112ffe=_0x1267f6[_0x40e577];if(_[_0x8739('0x3f')](_0x18321a['zendeskAccounts'][_0x112ffe['id']])){_0x18321a[_0x8739('0x1a')][_0x112ffe['id']]=new ZendeskAccount(_0x112ffe);}else{_0x18321a[_0x8739('0x3d')](_0x18321a[_0x8739('0x1a')][_0x112ffe['id']],_0x112ffe);}}}return _0x18321a[_0x8739('0x1a')];};};Realtime[_0x8739('0x38')][_0x8739('0x44')]=function(){var _0x592ca7=this;return function(_0x2aa526){if(_0x2aa526){freeIsNotKey(_0x2aa526,_0x592ca7[_0x8739('0x45')],'id');for(var _0x31e59b=0x0,_0x48584c={},_0x5177fe={};_0x31e59b<_0x2aa526[_0x8739('0x3c')];_0x31e59b+=0x1){_0x48584c=_0x2aa526[_0x31e59b];if(_[_0x8739('0x3f')](_0x592ca7[_0x8739('0x45')][_0x48584c['id']])){_0x592ca7[_0x8739('0x45')][_0x48584c['id']]=new SalesforceAccount(_0x48584c);}else{_0x592ca7[_0x8739('0x3d')](_0x592ca7[_0x8739('0x45')][_0x48584c['id']],_0x48584c);}}}return _0x592ca7[_0x8739('0x45')];};};Realtime[_0x8739('0x38')][_0x8739('0x46')]=function(){var _0x4595f5=this;return function(_0x2e2d78){if(_0x2e2d78){freeIsNotKey(_0x2e2d78,_0x4595f5[_0x8739('0x47')],'id');for(var _0x9d81a=0x0,_0x127f23={},_0x5477b4={};_0x9d81a<_0x2e2d78['length'];_0x9d81a+=0x1){_0x127f23=_0x2e2d78[_0x9d81a];if(_[_0x8739('0x3f')](_0x4595f5[_0x8739('0x47')][_0x127f23['id']])){_0x4595f5[_0x8739('0x47')][_0x127f23['id']]=new FreshdeskAccount(_0x127f23);}else{_0x4595f5[_0x8739('0x3d')](_0x4595f5[_0x8739('0x47')][_0x127f23['id']],_0x127f23);}}}return _0x4595f5[_0x8739('0x47')];};};Realtime['prototype'][_0x8739('0x48')]=function(){var _0x219a69=this;return function(_0x5e3162){if(_0x5e3162){freeIsNotKey(_0x5e3162,_0x219a69[_0x8739('0x1c')],'id');for(var _0xaede54=0x0,_0xb8fb86={},_0x229dca={};_0xaede54<_0x5e3162[_0x8739('0x3c')];_0xaede54+=0x1){_0xb8fb86=_0x5e3162[_0xaede54];if(_[_0x8739('0x3f')](_0x219a69[_0x8739('0x1c')][_0xb8fb86['id']])){_0x219a69[_0x8739('0x1c')][_0xb8fb86['id']]=new ZohoAccount(_0xb8fb86);}else{_0x219a69[_0x8739('0x3d')](_0x219a69[_0x8739('0x1c')][_0xb8fb86['id']],_0xb8fb86);}}}return _0x219a69[_0x8739('0x1c')];};};Realtime[_0x8739('0x38')][_0x8739('0x49')]=function(){var _0xc0c782=this;return function(_0x22450b){if(_0x22450b){freeIsNotKey(_0x22450b,_0xc0c782['deskAccounts'],'id');for(var _0x5e93e2=0x0,_0x21222e={},_0x34d029={};_0x5e93e2<_0x22450b[_0x8739('0x3c')];_0x5e93e2+=0x1){_0x21222e=_0x22450b[_0x5e93e2];if(_[_0x8739('0x3f')](_0xc0c782['deskAccounts'][_0x21222e['id']])){_0xc0c782['deskAccounts'][_0x21222e['id']]=new DeskAccount(_0x21222e);}else{_0xc0c782[_0x8739('0x3d')](_0xc0c782[_0x8739('0x4a')][_0x21222e['id']],_0x21222e);}}}return _0xc0c782[_0x8739('0x4a')];};};Realtime[_0x8739('0x38')][_0x8739('0x4b')]=function(){var _0x2646ec=this;return function(_0x631113){if(_0x631113){freeIsNotKey(_0x631113,_0x2646ec[_0x8739('0x1b')],'id');for(var _0x240595=0x0,_0x4b9a58={},_0x21f0db={};_0x240595<_0x631113['length'];_0x240595+=0x1){_0x4b9a58=_0x631113[_0x240595];if(_[_0x8739('0x3f')](_0x2646ec['sugarcrmAccounts'][_0x4b9a58['id']])){_0x2646ec['sugarcrmAccounts'][_0x4b9a58['id']]=new SugarcrmAccount(_0x4b9a58);}else{_0x2646ec[_0x8739('0x3d')](_0x2646ec[_0x8739('0x1b')][_0x4b9a58['id']],_0x4b9a58);}}}return _0x2646ec[_0x8739('0x1b')];};};Realtime[_0x8739('0x38')][_0x8739('0x4c')]=function(){var _0xe3b0f8=this;return function(_0x164203){if(_0x164203){freeIsNotKey(_0x164203,_0xe3b0f8[_0x8739('0x1d')],'id');for(var _0x113e25=0x0,_0x447aa8={},_0x29b75a={};_0x113e25<_0x164203[_0x8739('0x3c')];_0x113e25+=0x1){_0x447aa8=_0x164203[_0x113e25];if(_[_0x8739('0x3f')](_0xe3b0f8[_0x8739('0x1d')][_0x447aa8['id']])){_0xe3b0f8['vtigerAccounts'][_0x447aa8['id']]=new VtigerAccount(_0x447aa8);}else{_0xe3b0f8[_0x8739('0x3d')](_0xe3b0f8[_0x8739('0x1d')][_0x447aa8['id']],_0x447aa8);}}}return _0xe3b0f8['vtigerAccounts'];};};Realtime['prototype'][_0x8739('0x4d')]=function(){var _0x504fd6=this;return function(_0x381973){if(_0x381973){freeIsNotKey(_0x381973,_0x504fd6[_0x8739('0x4e')],'id');for(var _0xc5e6cc=0x0,_0x3d98d5={},_0x58dffe={};_0xc5e6cc<_0x381973['length'];_0xc5e6cc+=0x1){_0x3d98d5=_0x381973[_0xc5e6cc];if(_[_0x8739('0x3f')](_0x504fd6['servicenowAccounts'][_0x3d98d5['id']])){_0x504fd6[_0x8739('0x4e')][_0x3d98d5['id']]=new ServicenowAccount(_0x3d98d5);}else{_0x504fd6[_0x8739('0x3d')](_0x504fd6[_0x8739('0x4e')][_0x3d98d5['id']],_0x3d98d5);}}}return _0x504fd6['servicenowAccounts'];};};Realtime['prototype'][_0x8739('0x4f')]=function(){var _0x27a2b5=this;return function(_0x2e425c){if(_0x2e425c){freeIsNotKey(_0x2e425c,_0x27a2b5[_0x8739('0x50')],'id');for(var _0x5d6096=0x0,_0x3705f5={},_0x4ca4f9={};_0x5d6096<_0x2e425c['length'];_0x5d6096+=0x1){_0x3705f5=_0x2e425c[_0x5d6096];if(_[_0x8739('0x3f')](_0x27a2b5[_0x8739('0x50')][_0x3705f5['id']])){_0x27a2b5['dynamics365Accounts'][_0x3705f5['id']]=new Dynamics365Account(_0x3705f5);}else{_0x27a2b5[_0x8739('0x3d')](_0x27a2b5[_0x8739('0x50')][_0x3705f5['id']],_0x3705f5);}}}return _0x27a2b5[_0x8739('0x50')];};};Realtime['prototype'][_0x8739('0x51')]=function(){var _0x1635a5=this;return function(_0x3905d0){for(var _0x49b2c8=0x0;_0x49b2c8<_0x3905d0[_0x8739('0x3c')];_0x49b2c8+=0x1){_[_0x8739('0x52')](_0x1635a5[_0x8739('0x10')][_0x3905d0[_0x49b2c8]['name']],_0x3905d0[_0x49b2c8]);}return _0x1635a5['voiceQueues'];};};Realtime[_0x8739('0x38')]['initVoiceQueueReports']=function(){var _0xad7be3=this;return function(_0x42a0d5){clearVoiceQueues(_0xad7be3[_0x8739('0x10')]);if(_0x42a0d5){_0x42a0d5=_[_0x8739('0x53')](_0x42a0d5,_0x8739('0x54'));for(var _0x1dd98c in _0x42a0d5){if(_0x42a0d5[_0x8739('0x20')](_0x1dd98c)){var _0x398118={};for(var _0x570813=0x0;_0x570813<_0x42a0d5[_0x1dd98c][_0x8739('0x3c')];_0x570813+=0x1){var _0x426d55=_0x42a0d5[_0x1dd98c][_0x570813][_0x8739('0x55')];if(_0xad7be3[_0x8739('0x10')][_0x426d55]){if(_0x42a0d5[_0x1dd98c][_0x570813][_0x8739('0x56')]){_0xad7be3[_0x8739('0x10')][_0x426d55]['unmanaged']+=0x1;}if(_0x42a0d5[_0x1dd98c][_0x570813][_0x8739('0x57')]){_0xad7be3[_0x8739('0x10')][_0x426d55][_0x8739('0x2c')]+=0x1;}_0xad7be3[_0x8739('0x10')][_0x426d55][_0x8739('0x2d')]+=moment(_0x42a0d5[_0x1dd98c][_0x570813][_0x8739('0x58')])[_0x8739('0x59')](moment(_0x42a0d5[_0x1dd98c][_0x570813][_0x8739('0x5a')]),_0x8739('0x5b'))||0x0;if(_0x570813===_0x42a0d5[_0x1dd98c]['length']-0x1){_0xad7be3['voiceQueues'][_0x426d55][_0x8739('0x28')]+=moment(_0x42a0d5[_0x1dd98c][_0x570813][_0x8739('0x5c')]||_0x42a0d5[_0x1dd98c][_0x570813][_0x8739('0x5d')]||_0x42a0d5[_0x1dd98c][_0x570813][_0x8739('0x5e')])[_0x8739('0x59')](moment(_0x42a0d5[_0x1dd98c][_0x570813][_0x8739('0x5a')]),_0x8739('0x5b'))||0x0;_0xad7be3[_0x8739('0x10')][_0x426d55][_0x8739('0x26')]+=0x1;if(_0x42a0d5[_0x1dd98c][_0x570813][_0x8739('0x5f')]){_0xad7be3[_0x8739('0x10')][_0x426d55][_0x8739('0x27')]+=0x1;_0xad7be3[_0x8739('0x10')][_0x426d55]['sumBillable']+=moment(_0x42a0d5[_0x1dd98c][_0x570813][_0x8739('0x5c')])[_0x8739('0x59')](moment(_0x42a0d5[_0x1dd98c][_0x570813][_0x8739('0x58')]),'seconds')||0x0;}}else{_0xad7be3[_0x8739('0x10')][_0x426d55][_0x8739('0x28')]+=_0xad7be3[_0x8739('0x10')][_0x426d55][_0x8739('0x2d')]||0x0;}}}}}}return _0xad7be3['voiceQueues'];};};Realtime[_0x8739('0x38')][_0x8739('0x60')]=function(){var _0x4bf4b4=this;return function(_0x5da385){clearVoiceCallReports(_0x4bf4b4['outbound']);if(_0x5da385){for(var _0x3c9d3c=0x0;_0x3c9d3c<_0x5da385[_0x8739('0x3c')];_0x3c9d3c+=0x1){_0x4bf4b4[_0x8739('0x14')][_0x8739('0x26')]+=0x1;_0x4bf4b4[_0x8739('0x14')][_0x8739('0x28')]+=_0x5da385[_0x3c9d3c][_0x8739('0x61')];if(_0x5da385[_0x3c9d3c][_0x8739('0x62')]===_0x8739('0x63')){_0x4bf4b4['outbound'][_0x8739('0x27')]+=0x1;_0x4bf4b4[_0x8739('0x14')][_0x8739('0x2d')]+=_0x5da385[_0x3c9d3c][_0x8739('0x61')]-_0x5da385[_0x3c9d3c][_0x8739('0x64')]||0x0;_0x4bf4b4[_0x8739('0x14')][_0x8739('0x2e')]+=_0x5da385[_0x3c9d3c]['billableseconds'];}}}return _0x4bf4b4[_0x8739('0x14')];};};Realtime['prototype'][_0x8739('0x65')]=function(){var _0x1bea5e=this;return function(_0x4ebc52){if(_0x4ebc52){freeIsNotKey(_0x4ebc52,_0x1bea5e[_0x8739('0x12')],_0x8739('0x23'));for(var _0x5e177f=0x0,_0xce043f={};_0x5e177f<_0x4ebc52[_0x8739('0x3c')];_0x5e177f+=0x1){_0xce043f=_0x4ebc52[_0x5e177f];if(_['isUndefined'](_0x1bea5e['campaigns'][_0xce043f[_0x8739('0x23')]])){_0x1bea5e[_0x8739('0x12')][_0xce043f['name']]=new Campaign(_0xce043f);}else{_0x1bea5e[_0x8739('0x3d')](_0x1bea5e[_0x8739('0x12')][_0xce043f[_0x8739('0x23')]],_0xce043f);}}}return _0x1bea5e['campaigns'];};};Realtime['prototype'][_0x8739('0x66')]=function(){var _0x212ad3=this;return function(_0xc3ac5c){if(_0xc3ac5c){freeIsNotKey(_0xc3ac5c,_0x212ad3[_0x8739('0x15')],'id');for(var _0x4fde95=0x0,_0x486799={};_0x4fde95<_0xc3ac5c['length'];_0x4fde95+=0x1){_0x486799=_0xc3ac5c[_0x4fde95];if(_[_0x8739('0x3f')](_0x212ad3[_0x8739('0x15')][_0x486799['id']])){_0x212ad3[_0x8739('0x15')][_0x486799['id']]=new VoiceExtension(_0x486799);}else{_0x212ad3[_0x8739('0x3d')](_0x212ad3[_0x8739('0x15')][_0x486799['id']],_0x486799);}}}return _0x212ad3[_0x8739('0x15')];};};Realtime[_0x8739('0x38')][_0x8739('0x67')]=function(){var _0x3df54b=this;return function(_0x2a03f6){clearCampaigns(_0x3df54b[_0x8739('0x12')]);for(var _0x9bec64=0x0;_0x9bec64<_0x2a03f6['length'];_0x9bec64+=0x1){_[_0x8739('0x52')](_0x3df54b['campaigns'][_0x2a03f6[_0x9bec64][_0x8739('0x23')]],_0x2a03f6[_0x9bec64]);}return _0x3df54b[_0x8739('0x12')];};};Realtime['prototype']['initFaxAccounts']=function(){var _0x771473=this;return function(_0x39da2c){if(_0x39da2c){freeIsNotKey(_0x39da2c,_0x771473[_0x8739('0x1e')],'id');for(var _0x574406=0x0,_0x26c02d={},_0x5c9fb8={};_0x574406<_0x39da2c[_0x8739('0x3c')];_0x574406+=0x1){_0x26c02d=_0x39da2c[_0x574406];if(_[_0x8739('0x3f')](_0x771473[_0x8739('0x1e')][_0x26c02d['id']])){_0x771473[_0x8739('0x1e')][_0x26c02d['id']]=new FaxAccount(_0x26c02d);}else{_0x771473[_0x8739('0x3d')](_0x771473[_0x8739('0x1e')][_0x26c02d['id']],_0x26c02d);}}}return _0x771473[_0x8739('0x1e')];};};module[_0x8739('0x68')]=Realtime;
\ No newline at end of file
index 2677c93..f475aed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5663=['../../../config/logger','ami','../ami','../rpc/voiceCallReport','../rpc/voiceDialReport','../rpc/memberReport','../rpc/voiceTransferReport','./voiceCallReport','./voiceAgentReport','./userReport','agents','telephones','sync','realtime','xdr','custom:voiceQueueReport','voiceQueueReport','bind','voiceCallReport','voiceAgentReport','voiceDialReport','blindtransfer','blindTransfer','attendedtransfer','attendedTransfer','prototype','findAgent','find','name','isNil','accountcode','interface','format','SIP/%s','assigned','lastAssignedTo','queuecallercompleteAt','YYYY-MM-DD\x20HH:mm:ss','queuecallerexitAt','create','match','destination','exten','lastapplication','queue','lastdata','context','from-voip-provider','callerid','from-sip','xcally-motion-preview','calleridnum','originatecalleridnum','destinationchannel','channel','calleridpreview','connectedlinenum','calleridname','monitor','monitors','filename','createdAt','connectedlinename','membername','xcally-motion-dialer','isArray','forEach','startsWith','Local','indexOf','mobile','substring','lastIndexOf','exports','moment','util'];(function(_0x29386b,_0x546068){var _0x38520c=function(_0x3e1eaa){while(--_0x3e1eaa){_0x29386b['push'](_0x29386b['shift']());}};_0x38520c(++_0x546068);}(_0x5663,0x17a));var _0x3566=function(_0x256ffb,_0x19f08f){_0x256ffb=_0x256ffb-0x0;var _0x3c9a19=_0x5663[_0x256ffb];return _0x3c9a19;};'use strict';var BPromise=require('bluebird');var _=require('lodash');var moment=require(_0x3566('0x0'));var util=require(_0x3566('0x1'));var config=require('../../../config/environment');var logger=require(_0x3566('0x2'))(_0x3566('0x3'));var ami=require(_0x3566('0x4'));var RpcVoiceAgentReport=require('../rpc/voiceAgentReport');var RpcVoiceCallReport=require(_0x3566('0x5'));var RpcVoiceDialReport=require(_0x3566('0x6'));var RpcMemberReport=require(_0x3566('0x7'));var RpcVoiceQueueReport=require('../rpc/voiceQueueReport');var RpcVoiceRecording=require('../rpc/voiceRecording');var RpcVoiceTransferReport=require(_0x3566('0x8'));var VoiceQueueReport=require('./voiceQueueReport');var VoiceCallReport=require(_0x3566('0x9'));var VoiceAgentReport=require(_0x3566('0xa'));var VoiceDialReport=require('./voiceDialReport');var UserReport=require(_0x3566('0xb'));function Report(_0x32b114){this['realtime']=_0x32b114;this[_0x3566('0xc')]=_0x32b114[_0x3566('0xc')];this['telephones']=_0x32b114[_0x3566('0xd')];}Report['prototype'][_0x3566('0xe')]=function(_0x4410b8){var _0x3aad07=new VoiceQueueReport(this[_0x3566('0xf')]);var _0x1cdfa9=new VoiceAgentReport(this[_0x3566('0xf')]);var _0x365633=new VoiceDialReport(this[_0x3566('0xf')]);var _0x1e1923=new VoiceCallReport(this['realtime']);var _0x21c57e=new UserReport(this[_0x3566('0xf')]);if(config[_0x3566('0x10')]&&config['xdr']['disabled']){ami['on'](_0x3566('0x11'),this[_0x3566('0x12')][_0x3566('0x13')](this));ami['on']('custom:voiceCallReport',this[_0x3566('0x14')]['bind'](this));ami['on']('custom:voiceAgentReport',this[_0x3566('0x15')][_0x3566('0x13')](this));ami['on']('custom:voiceDialReport',this[_0x3566('0x16')][_0x3566('0x13')](this));ami['on'](_0x3566('0x17'),this[_0x3566('0x18')]['bind'](this));ami['on'](_0x3566('0x19'),this[_0x3566('0x1a')][_0x3566('0x13')](this));}};Report[_0x3566('0x1b')][_0x3566('0x1c')]=function(_0x185b0f){var _0x597fc6=undefined;_0x597fc6=_[_0x3566('0x1d')](this['agents'],function(_0x4dd893){return _0x4dd893['accountcode']==_0x185b0f||_0x4dd893[_0x3566('0x1e')]==_0x185b0f;});if(_[_0x3566('0x1f')](_0x597fc6)){var _0x599030=_[_0x3566('0x1d')](this['telephones'],function(_0x348e6a){return _0x348e6a[_0x3566('0x20')]==_0x185b0f||_0x348e6a[_0x3566('0x1e')]==_0x185b0f;});if(_0x599030){_0x597fc6=_[_0x3566('0x1d')](this[_0x3566('0xc')],function(_0x599380){return _0x599380[_0x3566('0x21')]==util[_0x3566('0x22')](_0x3566('0x23'),_0x599030['name']);});}}return _0x597fc6;};Report[_0x3566('0x1b')][_0x3566('0x12')]=function(_0x4048b2){for(var _0x1b9999=0x0;_0x1b9999<_0x4048b2['length'];_0x1b9999+=0x1){var _0x5f0f6c=this[_0x3566('0x1c')](_0x4048b2[_0x1b9999]['connectedlinenum']);if(_0x5f0f6c){_0x4048b2[_0x1b9999][_0x3566('0x20')]=_0x5f0f6c[_0x3566('0x20')];_0x4048b2[_0x1b9999][_0x3566('0x24')]=!![];_0x4048b2[_0x1b9999][_0x3566('0x25')]=_0x5f0f6c[_0x3566('0x1e')];_0x4048b2[_0x1b9999][_0x3566('0x21')]=_[_0x3566('0x1f')](_0x5f0f6c['interface'])?util[_0x3566('0x22')]('SIP/%s',_0x5f0f6c[_0x3566('0x1e')]):_0x5f0f6c[_0x3566('0x21')];if(_0x4048b2[_0x1b9999]['queuecallercomplete']){_0x4048b2[_0x1b9999][_0x3566('0x26')]=moment()[_0x3566('0x22')](_0x3566('0x27'));}if(_0x4048b2[_0x1b9999]['queuecallerexit']){_0x4048b2[_0x1b9999][_0x3566('0x28')]=moment()[_0x3566('0x22')](_0x3566('0x27'));}RpcMemberReport[_0x3566('0x12')](_0x4048b2[_0x1b9999]);}RpcVoiceQueueReport[_0x3566('0x29')](_0x4048b2[_0x1b9999]);}};function extractCalleridNumber(_0x5a01b4){var _0xd8acd1=_0x5a01b4[_0x3566('0x2a')](/<(.*?)>/);return _0xd8acd1?_0xd8acd1[0x1]:_0x5a01b4;}Report[_0x3566('0x1b')][_0x3566('0x14')]=function(_0x52ff61){_0x52ff61[_0x3566('0x2b')]=_0x52ff61['destination']||_0x52ff61[_0x3566('0x2c')];if(_0x52ff61['type']=='dialer'){_0x52ff61[_0x3566('0x2d')]=_0x3566('0x2e');_0x52ff61[_0x3566('0x2f')]=_0x52ff61[_0x3566('0x2e')];if(_0x52ff61[_0x3566('0x30')]==_0x3566('0x31')){_0x52ff61['accountcode']='';_0x52ff61[_0x3566('0x2b')]=extractCalleridNumber(_0x52ff61[_0x3566('0x32')]);}else if(_0x52ff61['context']==_0x3566('0x33')){if(_0x52ff61[_0x3566('0x2b')]==_0x3566('0x34')){_0x52ff61['destination']=extractCalleridNumber(_0x52ff61['calleridpreview']);_0x52ff61[_0x3566('0x35')]=_0x52ff61[_0x3566('0x36')];_0x52ff61[_0x3566('0x37')]=[_0x52ff61['channel'],_0x52ff61[_0x3566('0x38')]=_0x52ff61[_0x3566('0x37')]][0x0];_0x52ff61[_0x3566('0x32')]=_0x52ff61[_0x3566('0x39')];}else{_0x52ff61[_0x3566('0x2b')]=_0x52ff61[_0x3566('0x35')];_0x52ff61[_0x3566('0x35')]=_0x52ff61[_0x3566('0x36')];if(_0x52ff61['disposition']=='ANSWERED'){_0x52ff61['accountcode']=_0x52ff61[_0x3566('0x3a')];}else{_0x52ff61[_0x3566('0x20')]='';}}}}else{_0x52ff61[_0x3566('0x32')]=util['format']('\x22%s\x22\x20<%s>',_0x52ff61[_0x3566('0x3b')],_0x52ff61['calleridnum']);}RpcVoiceCallReport[_0x3566('0x29')](_0x52ff61);if(_0x52ff61[_0x3566('0x3c')]){for(var _0x57ff83=0x0;_0x57ff83<_0x52ff61[_0x3566('0x3d')]['length'];_0x57ff83+=0x1){_0x52ff61['monitorFilename']=_0x52ff61[_0x3566('0x3d')][_0x57ff83][_0x3566('0x3e')];_0x52ff61[_0x3566('0x3f')]=_0x52ff61[_0x3566('0x3d')][_0x57ff83][_0x3566('0x3f')];if(_0x52ff61[_0x3566('0x2c')]=='xcally-motion-preview'){_0x52ff61['calleridnum']=_0x52ff61[_0x3566('0x3a')];_0x52ff61['calleridname']=_0x52ff61[_0x3566('0x40')];_0x52ff61['connectedlinenum']=_0x52ff61[_0x3566('0x20')];_0x52ff61[_0x3566('0x40')]=_0x52ff61[_0x3566('0x41')];_0x52ff61[_0x3566('0x2c')]=_0x52ff61[_0x3566('0x36')];}else if(_0x52ff61[_0x3566('0x2c')]==_0x3566('0x42')){_0x52ff61[_0x3566('0x35')]=_0x52ff61['destination'];_0x52ff61[_0x3566('0x2c')]=_0x52ff61[_0x3566('0x36')];}RpcVoiceRecording[_0x3566('0x29')](_0x52ff61);}}};Report[_0x3566('0x1b')][_0x3566('0x15')]=function(_0x2642ef){if(_[_0x3566('0x43')](_0x2642ef)){_0x2642ef[_0x3566('0x44')](function(_0x631156){RpcVoiceAgentReport[_0x3566('0x29')](_0x631156);});}else{RpcVoiceAgentReport[_0x3566('0x29')](_0x2642ef);}};Report[_0x3566('0x1b')]['voiceDialReport']=function(_0x440b69){RpcVoiceDialReport[_0x3566('0x29')](_0x440b69);var _0xc1610d=undefined;var _0x4ae085=_0x440b69[_0x3566('0x38')];if(_[_0x3566('0x45')](_0x4ae085,_0x3566('0x46'))){var _0x1bb9e6=_0x4ae085['substring'](_0x4ae085[_0x3566('0x47')]('/')+0x1,_0x4ae085['indexOf']('@'));_0xc1610d=_[_0x3566('0x1d')](this[_0x3566('0xc')],function(_0x3e749c){return _0x3e749c[_0x3566('0x48')]==_0x1bb9e6||_0x3e749c['phone']==_0x1bb9e6||_0x3e749c[_0x3566('0x20')]==_0x1bb9e6;});}else{var _0x1bb9e6=_0x4ae085[_0x3566('0x49')](_0x4ae085[_0x3566('0x47')]('/')+0x1,_0x4ae085[_0x3566('0x4a')]('-'));_0xc1610d=this[_0x3566('0x1c')](_0x1bb9e6);}if(_0xc1610d){_0x440b69[_0x3566('0x21')]=_[_0x3566('0x1f')](_0xc1610d[_0x3566('0x21')])?util[_0x3566('0x22')](_0x3566('0x23'),_0xc1610d[_0x3566('0x1e')]):_0xc1610d[_0x3566('0x21')];_0x440b69['membername']=_0xc1610d['name'];_0x440b69[_0x3566('0x20')]=_0xc1610d[_0x3566('0x20')];RpcMemberReport[_0x3566('0x16')](_0x440b69);}};Report['prototype'][_0x3566('0x18')]=function(_0x1c73e5){RpcVoiceTransferReport['blindTransfer'](_0x1c73e5);};Report[_0x3566('0x1b')][_0x3566('0x1a')]=function(_0xc26cd3){RpcVoiceTransferReport[_0x3566('0x1a')](_0xc26cd3);};module[_0x3566('0x4b')]=Report;
\ No newline at end of file
+var _0x5e9f=['connectedlinenum','assigned','interface','YYYY-MM-DD\x20HH:mm:ss','queuecallerexitAt','create','match','voiceCallReport','exten','type','dialer','lastapplication','lastdata','queue','from-voip-provider','callerid','context','destination','xcally-motion-preview','calleridpreview','calleridnum','originatecalleridnum','destinationchannel','channel','ANSWERED','\x22%s\x22\x20<%s>','calleridname','monitors','length','createdAt','connectedlinename','membername','forEach','Local','indexOf','mobile','phone','substring','lastIndexOf','exports','bluebird','lodash','util','../../../config/logger','ami','../rpc/voiceAgentReport','../rpc/voiceCallReport','../rpc/voiceQueueReport','../rpc/voiceRecording','../rpc/voiceTransferReport','./voiceQueueReport','./voiceDialReport','./userReport','agents','telephones','prototype','sync','realtime','xdr','disabled','custom:voiceQueueReport','voiceQueueReport','custom:voiceCallReport','bind','voiceAgentReport','voiceDialReport','blindTransfer','attendedTransfer','findAgent','find','accountcode','isNil','format','SIP/%s','name'];(function(_0x2673c1,_0x489c00){var _0x46bde=function(_0x3c7b08){while(--_0x3c7b08){_0x2673c1['push'](_0x2673c1['shift']());}};_0x46bde(++_0x489c00);}(_0x5e9f,0x73));var _0xf5e9=function(_0x4b369d,_0x265eb8){_0x4b369d=_0x4b369d-0x0;var _0x571a98=_0x5e9f[_0x4b369d];return _0x571a98;};'use strict';var BPromise=require(_0xf5e9('0x0'));var _=require(_0xf5e9('0x1'));var moment=require('moment');var util=require(_0xf5e9('0x2'));var config=require('../../../config/environment');var logger=require(_0xf5e9('0x3'))(_0xf5e9('0x4'));var ami=require('../ami');var RpcVoiceAgentReport=require(_0xf5e9('0x5'));var RpcVoiceCallReport=require(_0xf5e9('0x6'));var RpcVoiceDialReport=require('../rpc/voiceDialReport');var RpcMemberReport=require('../rpc/memberReport');var RpcVoiceQueueReport=require(_0xf5e9('0x7'));var RpcVoiceRecording=require(_0xf5e9('0x8'));var RpcVoiceTransferReport=require(_0xf5e9('0x9'));var VoiceQueueReport=require(_0xf5e9('0xa'));var VoiceCallReport=require('./voiceCallReport');var VoiceAgentReport=require('./voiceAgentReport');var VoiceDialReport=require(_0xf5e9('0xb'));var UserReport=require(_0xf5e9('0xc'));function Report(_0xb048e4){this['realtime']=_0xb048e4;this[_0xf5e9('0xd')]=_0xb048e4['agents'];this[_0xf5e9('0xe')]=_0xb048e4[_0xf5e9('0xe')];}Report[_0xf5e9('0xf')][_0xf5e9('0x10')]=function(_0x24c350){var _0x4d4f24=new VoiceQueueReport(this[_0xf5e9('0x11')]);var _0x150bf6=new VoiceAgentReport(this[_0xf5e9('0x11')]);var _0x926b09=new VoiceDialReport(this['realtime']);var _0x427d2a=new VoiceCallReport(this[_0xf5e9('0x11')]);var _0x9a5abe=new UserReport(this[_0xf5e9('0x11')]);if(config['xdr']&&config[_0xf5e9('0x12')][_0xf5e9('0x13')]){ami['on'](_0xf5e9('0x14'),this[_0xf5e9('0x15')]['bind'](this));ami['on'](_0xf5e9('0x16'),this['voiceCallReport'][_0xf5e9('0x17')](this));ami['on']('custom:voiceAgentReport',this[_0xf5e9('0x18')][_0xf5e9('0x17')](this));ami['on']('custom:voiceDialReport',this[_0xf5e9('0x19')][_0xf5e9('0x17')](this));ami['on']('blindtransfer',this[_0xf5e9('0x1a')][_0xf5e9('0x17')](this));ami['on']('attendedtransfer',this[_0xf5e9('0x1b')][_0xf5e9('0x17')](this));}};Report[_0xf5e9('0xf')][_0xf5e9('0x1c')]=function(_0x397253){var _0x58c750=undefined;_0x58c750=_[_0xf5e9('0x1d')](this[_0xf5e9('0xd')],function(_0x33e69c){return _0x33e69c[_0xf5e9('0x1e')]==_0x397253||_0x33e69c['name']==_0x397253;});if(_[_0xf5e9('0x1f')](_0x58c750)){var _0x10bcce=_['find'](this[_0xf5e9('0xe')],function(_0x33e38e){return _0x33e38e[_0xf5e9('0x1e')]==_0x397253||_0x33e38e['name']==_0x397253;});if(_0x10bcce){_0x58c750=_[_0xf5e9('0x1d')](this[_0xf5e9('0xd')],function(_0x253637){return _0x253637['interface']==util[_0xf5e9('0x20')](_0xf5e9('0x21'),_0x10bcce[_0xf5e9('0x22')]);});}}return _0x58c750;};Report[_0xf5e9('0xf')][_0xf5e9('0x15')]=function(_0x3dc80a){for(var _0x381b78=0x0;_0x381b78<_0x3dc80a['length'];_0x381b78+=0x1){var _0x5b7b37=this['findAgent'](_0x3dc80a[_0x381b78][_0xf5e9('0x23')]);if(_0x5b7b37){_0x3dc80a[_0x381b78][_0xf5e9('0x1e')]=_0x5b7b37['accountcode'];_0x3dc80a[_0x381b78][_0xf5e9('0x24')]=!![];_0x3dc80a[_0x381b78]['lastAssignedTo']=_0x5b7b37[_0xf5e9('0x22')];_0x3dc80a[_0x381b78][_0xf5e9('0x25')]=_[_0xf5e9('0x1f')](_0x5b7b37[_0xf5e9('0x25')])?util[_0xf5e9('0x20')](_0xf5e9('0x21'),_0x5b7b37[_0xf5e9('0x22')]):_0x5b7b37[_0xf5e9('0x25')];if(_0x3dc80a[_0x381b78]['queuecallercomplete']){_0x3dc80a[_0x381b78]['queuecallercompleteAt']=moment()['format'](_0xf5e9('0x26'));}if(_0x3dc80a[_0x381b78]['queuecallerexit']){_0x3dc80a[_0x381b78][_0xf5e9('0x27')]=moment()[_0xf5e9('0x20')](_0xf5e9('0x26'));}RpcMemberReport['voiceQueueReport'](_0x3dc80a[_0x381b78]);}RpcVoiceQueueReport[_0xf5e9('0x28')](_0x3dc80a[_0x381b78]);}};function extractCalleridNumber(_0x579986){var _0x2915e1=_0x579986[_0xf5e9('0x29')](/<(.*?)>/);return _0x2915e1?_0x2915e1[0x1]:_0x579986;}Report[_0xf5e9('0xf')][_0xf5e9('0x2a')]=function(_0x21b663){_0x21b663['destination']=_0x21b663['destination']||_0x21b663[_0xf5e9('0x2b')];if(_0x21b663[_0xf5e9('0x2c')]==_0xf5e9('0x2d')){_0x21b663[_0xf5e9('0x2e')]='queue';_0x21b663[_0xf5e9('0x2f')]=_0x21b663[_0xf5e9('0x30')];if(_0x21b663['context']==_0xf5e9('0x31')){_0x21b663[_0xf5e9('0x1e')]='';_0x21b663['destination']=extractCalleridNumber(_0x21b663[_0xf5e9('0x32')]);}else if(_0x21b663[_0xf5e9('0x33')]=='from-sip'){if(_0x21b663[_0xf5e9('0x34')]==_0xf5e9('0x35')){_0x21b663[_0xf5e9('0x34')]=extractCalleridNumber(_0x21b663[_0xf5e9('0x36')]);_0x21b663[_0xf5e9('0x37')]=_0x21b663[_0xf5e9('0x38')];_0x21b663[_0xf5e9('0x39')]=[_0x21b663[_0xf5e9('0x3a')],_0x21b663[_0xf5e9('0x3a')]=_0x21b663[_0xf5e9('0x39')]][0x0];_0x21b663[_0xf5e9('0x32')]=_0x21b663[_0xf5e9('0x36')];}else{_0x21b663[_0xf5e9('0x34')]=_0x21b663[_0xf5e9('0x37')];_0x21b663['calleridnum']=_0x21b663['originatecalleridnum'];if(_0x21b663['disposition']==_0xf5e9('0x3b')){_0x21b663[_0xf5e9('0x1e')]=_0x21b663[_0xf5e9('0x23')];}else{_0x21b663['accountcode']='';}}}}else{_0x21b663[_0xf5e9('0x32')]=util[_0xf5e9('0x20')](_0xf5e9('0x3c'),_0x21b663[_0xf5e9('0x3d')],_0x21b663[_0xf5e9('0x37')]);}RpcVoiceCallReport[_0xf5e9('0x28')](_0x21b663);if(_0x21b663['monitor']){for(var _0x218490=0x0;_0x218490<_0x21b663[_0xf5e9('0x3e')][_0xf5e9('0x3f')];_0x218490+=0x1){_0x21b663['monitorFilename']=_0x21b663[_0xf5e9('0x3e')][_0x218490]['filename'];_0x21b663[_0xf5e9('0x40')]=_0x21b663[_0xf5e9('0x3e')][_0x218490][_0xf5e9('0x40')];if(_0x21b663[_0xf5e9('0x2b')]==_0xf5e9('0x35')){_0x21b663[_0xf5e9('0x37')]=_0x21b663['connectedlinenum'];_0x21b663['calleridname']=_0x21b663['connectedlinename'];_0x21b663[_0xf5e9('0x23')]=_0x21b663[_0xf5e9('0x1e')];_0x21b663[_0xf5e9('0x41')]=_0x21b663[_0xf5e9('0x42')];_0x21b663[_0xf5e9('0x2b')]=_0x21b663[_0xf5e9('0x38')];}else if(_0x21b663[_0xf5e9('0x2b')]=='xcally-motion-dialer'){_0x21b663['calleridnum']=_0x21b663['destination'];_0x21b663[_0xf5e9('0x2b')]=_0x21b663['originatecalleridnum'];}RpcVoiceRecording['create'](_0x21b663);}}};Report['prototype'][_0xf5e9('0x18')]=function(_0x76bf11){if(_['isArray'](_0x76bf11)){_0x76bf11[_0xf5e9('0x43')](function(_0xc9fa46){RpcVoiceAgentReport[_0xf5e9('0x28')](_0xc9fa46);});}else{RpcVoiceAgentReport[_0xf5e9('0x28')](_0x76bf11);}};Report[_0xf5e9('0xf')][_0xf5e9('0x19')]=function(_0x120efd){RpcVoiceDialReport[_0xf5e9('0x28')](_0x120efd);var _0x470485=undefined;var _0x41bf49=_0x120efd[_0xf5e9('0x3a')];if(_['startsWith'](_0x41bf49,_0xf5e9('0x44'))){var _0x436e38=_0x41bf49['substring'](_0x41bf49[_0xf5e9('0x45')]('/')+0x1,_0x41bf49[_0xf5e9('0x45')]('@'));_0x470485=_[_0xf5e9('0x1d')](this[_0xf5e9('0xd')],function(_0x298af0){return _0x298af0[_0xf5e9('0x46')]==_0x436e38||_0x298af0[_0xf5e9('0x47')]==_0x436e38||_0x298af0[_0xf5e9('0x1e')]==_0x436e38;});}else{var _0x436e38=_0x41bf49[_0xf5e9('0x48')](_0x41bf49['indexOf']('/')+0x1,_0x41bf49[_0xf5e9('0x49')]('-'));_0x470485=this[_0xf5e9('0x1c')](_0x436e38);}if(_0x470485){_0x120efd[_0xf5e9('0x25')]=_['isNil'](_0x470485[_0xf5e9('0x25')])?util[_0xf5e9('0x20')]('SIP/%s',_0x470485[_0xf5e9('0x22')]):_0x470485[_0xf5e9('0x25')];_0x120efd[_0xf5e9('0x42')]=_0x470485[_0xf5e9('0x22')];_0x120efd[_0xf5e9('0x1e')]=_0x470485[_0xf5e9('0x1e')];RpcMemberReport[_0xf5e9('0x19')](_0x120efd);}};Report[_0xf5e9('0xf')][_0xf5e9('0x1a')]=function(_0x457b7b){RpcVoiceTransferReport[_0xf5e9('0x1a')](_0x457b7b);};Report[_0xf5e9('0xf')][_0xf5e9('0x1b')]=function(_0x304953){RpcVoiceTransferReport[_0xf5e9('0x1b')](_0x304953);};module[_0xf5e9('0x4a')]=Report;
\ No newline at end of file
index 3bb6dd5..258d7a8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x07e2=['toLowerCase','updateStatusRealtime','name','Queue','startsWith','Local','find','mobile','phone','accountcode','[syncDeviceState][UserReport]','peer','registered','address','status','telephone:save','lodash','bluebird','ioredis','../../../config/environment','ami','../ami','redis','localhost','socket.io-emitter','trunks','agents','telephones','registryentry','syncRegistry','bind','registry','syncDeviceState','peerstatus','syncPeerStatus','loopSyncRealTimeShow','resolve','then','actionDeviceStateList','[loopSyncRealTimeShow]','inspect','prototype','actionSipShowRegistry','actionSipPeerStatus','catch','isNotNull','emit','username','stateRegistry','state','merge','omit','event','format','trunk:%s','trunk:save','error','[syncRegistry][UserReport]','device','local','inuse','stateTime','toNumber'];(function(_0x352c13,_0x1a91cb){var _0x5b48e8=function(_0x1afcc2){while(--_0x1afcc2){_0x352c13['push'](_0x352c13['shift']());}};_0x5b48e8(++_0x1a91cb);}(_0x07e2,0x10c));var _0x207e=function(_0x4734b1,_0x3a40df){_0x4734b1=_0x4734b1-0x0;var _0x5bc908=_0x07e2[_0x4734b1];return _0x5bc908;};'use strict';var _=require(_0x207e('0x0'));var moment=require('moment');var BPromise=require(_0x207e('0x1'));var util=require('util');var Redis=require(_0x207e('0x2'));var config=require(_0x207e('0x3'));var logger=require('../../../config/logger')(_0x207e('0x4'));var ami=require(_0x207e('0x5'));config[_0x207e('0x6')]=_['defaults'](config[_0x207e('0x6')],{'host':_0x207e('0x7'),'port':0x18eb});var io=require(_0x207e('0x8'))(new Redis(config['redis']));function UserReport(_0x369457){this[_0x207e('0x9')]=_0x369457[_0x207e('0x9')];this[_0x207e('0xa')]=_0x369457[_0x207e('0xa')];this[_0x207e('0xb')]=_0x369457[_0x207e('0xb')];ami['on'](_0x207e('0xc'),this[_0x207e('0xd')][_0x207e('0xe')](this));ami['on'](_0x207e('0xf'),this[_0x207e('0xd')]['bind'](this));ami['on']('devicestatechange',this[_0x207e('0x10')]['bind'](this));ami['on'](_0x207e('0x11'),this[_0x207e('0x12')][_0x207e('0xe')](this));this[_0x207e('0x13')]();return BPromise[_0x207e('0x14')]()[_0x207e('0x15')](ami['actionSipShowRegistry']())[_0x207e('0x15')](ami[_0x207e('0x16')]())[_0x207e('0x15')](ami['actionSipPeerStatus']())['catch'](loggerCatch(_0x207e('0x17')));}function loggerCatch(_0x1ae20c){return function(_0x2bd74c){logger['error'](_0x1ae20c,util[_0x207e('0x18')](_0x2bd74c,{'showHidden':![],'depth':null}));};}UserReport[_0x207e('0x19')][_0x207e('0x13')]=function(){setInterval(function(){BPromise[_0x207e('0x14')]()[_0x207e('0x15')](ami[_0x207e('0x1a')]())[_0x207e('0x15')](ami[_0x207e('0x16')]())[_0x207e('0x15')](ami[_0x207e('0x1b')]())[_0x207e('0x1c')](loggerCatch(_0x207e('0x17')));},0x32c8);};UserReport[_0x207e('0x19')][_0x207e('0x1d')]=function(_0x51da49){return _0x51da49!==null&&!_['isUndefined'](_0x51da49);};UserReport['prototype']['emit']=function(_0x5b2db7,_0x8564a9,_0x1b4afb){io['to'](_0x5b2db7)[_0x207e('0x1e')](_0x8564a9,_0x1b4afb);};UserReport['prototype'][_0x207e('0xd')]=function(_0x226185){try{if(this['isNotNull'](_0x226185)){var _0xd2438f=_['find'](this[_0x207e('0x9')],{'registry':_0x226185[_0x207e('0x1f')]});if(_0xd2438f){_0x226185[_0x207e('0x20')]=_0x226185[_0x207e('0x21')];_[_0x207e('0x22')](_0xd2438f,_[_0x207e('0x23')](_0x226185,[_0x207e('0x24'),'actionid',_0x207e('0x1f'),'state']));this[_0x207e('0x1e')](util[_0x207e('0x25')](_0x207e('0x26'),_0xd2438f['name']),_0x207e('0x27'),_0xd2438f);}}}catch(_0x5a7dcc){logger[_0x207e('0x28')](_0x207e('0x29'),util[_0x207e('0x18')](_0x5a7dcc,{'showHidden':![],'depth':null}));}};UserReport[_0x207e('0x19')][_0x207e('0x10')]=function(_0x21550e){try{if(this[_0x207e('0x1d')](_0x21550e)){if(this[_0x207e('0xa')][_0x21550e[_0x207e('0x2a')]]){if(!this[_0x207e('0xa')][_0x21550e[_0x207e('0x2a')]][_0x207e('0x2b')]||_0x21550e['state']['toLowerCase']()==_0x207e('0x2c')){this['agents'][_0x21550e[_0x207e('0x2a')]][_0x207e('0x2b')]=![];if(this[_0x207e('0xa')][_0x21550e['device']][_0x207e('0x21')]!==_0x21550e[_0x207e('0x21')]['toLowerCase']()){this[_0x207e('0xa')][_0x21550e[_0x207e('0x2a')]][_0x207e('0x2d')]=_[_0x207e('0x2e')](moment()[_0x207e('0x25')]('x'));}this[_0x207e('0xa')][_0x21550e['device']][_0x207e('0x21')]=_0x21550e[_0x207e('0x21')][_0x207e('0x2f')]();this[_0x207e('0xa')][_0x21550e[_0x207e('0x2a')]][_0x207e('0x30')](_0x21550e);}}else if(this[_0x207e('0xb')][_0x21550e['device']]){if(this[_0x207e('0xb')][_0x21550e[_0x207e('0x2a')]][_0x207e('0x21')]!==_0x21550e[_0x207e('0x21')][_0x207e('0x2f')]()){this[_0x207e('0xb')][_0x21550e[_0x207e('0x2a')]][_0x207e('0x2d')]=_[_0x207e('0x2e')](moment()['format']('x'));}this['telephones'][_0x21550e['device']][_0x207e('0x21')]=_0x21550e[_0x207e('0x21')][_0x207e('0x2f')]();this[_0x207e('0x1e')](util[_0x207e('0x25')]('telephone:%s',this[_0x207e('0xb')][_0x21550e[_0x207e('0x2a')]][_0x207e('0x31')]),'telephone:save',this[_0x207e('0xb')][_0x21550e[_0x207e('0x2a')]]);}else if(this['trunks'][_0x21550e[_0x207e('0x2a')]]){if(this['trunks'][_0x21550e[_0x207e('0x2a')]][_0x207e('0x21')]!==_0x21550e[_0x207e('0x21')][_0x207e('0x2f')]()){this[_0x207e('0x9')][_0x21550e[_0x207e('0x2a')]][_0x207e('0x2d')]=_['toNumber'](moment()['format']('x'));}this[_0x207e('0x9')][_0x21550e[_0x207e('0x2a')]][_0x207e('0x21')]=_0x21550e[_0x207e('0x21')]['toLowerCase']();this[_0x207e('0x1e')](util['format'](_0x207e('0x26'),this[_0x207e('0x9')][_0x21550e[_0x207e('0x2a')]][_0x207e('0x31')]),_0x207e('0x27'),this[_0x207e('0x9')][_0x21550e[_0x207e('0x2a')]]);}else if(_['startsWith'](_0x21550e[_0x207e('0x2a')],_0x207e('0x32'))){}else if(_[_0x207e('0x33')](_0x21550e[_0x207e('0x2a')],_0x207e('0x34'))){var _0x13ec5=_0x21550e['device'];var _0x326bfa=_0x13ec5['substring'](_0x13ec5['indexOf']('/')+0x1,_0x13ec5['indexOf']('@'));var _0x5d2643=_[_0x207e('0x35')](this[_0x207e('0xa')],function(_0x27b21b){return _0x27b21b[_0x207e('0x36')]==_0x326bfa||_0x27b21b[_0x207e('0x37')]==_0x326bfa||_0x27b21b[_0x207e('0x38')]==_0x326bfa;});if(_0x5d2643){if(_0x5d2643['state']!==_0x21550e[_0x207e('0x21')][_0x207e('0x2f')]()){_0x5d2643['stateTime']=_[_0x207e('0x2e')](moment()[_0x207e('0x25')]('x'));}_0x5d2643[_0x207e('0x21')]=_0x21550e['state']['toLowerCase']();_0x5d2643[_0x207e('0x2b')]=!![];_0x5d2643[_0x207e('0x30')](_0x21550e);}}else{}}}catch(_0x5724a9){logger['error'](_0x207e('0x39'),util[_0x207e('0x18')](_0x5724a9,{'showHidden':![],'depth':null}));}};UserReport[_0x207e('0x19')]['syncPeerStatus']=function(_0x1c02d6){try{if(this['isNotNull'](_0x1c02d6)&&this[_0x207e('0x1d')](_0x1c02d6[_0x207e('0x11')])){if(this['agents'][_0x1c02d6['peer']]){if(!this[_0x207e('0xa')][_0x1c02d6[_0x207e('0x3a')]]['local']||_0x1c02d6['peerstatus']['toLowerCase']()==_0x207e('0x3b')){this['agents'][_0x1c02d6['peer']][_0x207e('0x2b')]=![];this[_0x207e('0xa')][_0x1c02d6[_0x207e('0x3a')]]['status']=_0x1c02d6[_0x207e('0x11')][_0x207e('0x2f')]();this[_0x207e('0xa')][_0x1c02d6[_0x207e('0x3a')]][_0x207e('0x3c')]=_0x1c02d6['address'];this['agents'][_0x1c02d6[_0x207e('0x3a')]][_0x207e('0x30')](_0x1c02d6);}}else if(this['telephones'][_0x1c02d6[_0x207e('0x3a')]]){this[_0x207e('0xb')][_0x1c02d6[_0x207e('0x3a')]][_0x207e('0x3d')]=_0x1c02d6[_0x207e('0x11')][_0x207e('0x2f')]();this[_0x207e('0xb')][_0x1c02d6[_0x207e('0x3a')]]['address']=_0x1c02d6[_0x207e('0x3c')];this[_0x207e('0x1e')](util['format']('telephone:%s',this[_0x207e('0xb')][_0x1c02d6['peer']][_0x207e('0x31')]),_0x207e('0x3e'),this[_0x207e('0xb')][_0x1c02d6[_0x207e('0x3a')]]);}else if(this['trunks'][_0x1c02d6['peer']]){this[_0x207e('0x9')][_0x1c02d6['peer']][_0x207e('0x3d')]=_0x1c02d6[_0x207e('0x11')][_0x207e('0x2f')]();this[_0x207e('0x9')][_0x1c02d6['peer']][_0x207e('0x3c')]=_0x1c02d6[_0x207e('0x3c')];this[_0x207e('0x1e')](util['format'](_0x207e('0x26'),this[_0x207e('0x9')][_0x1c02d6[_0x207e('0x3a')]]['name']),'trunk:save',this['trunks'][_0x1c02d6[_0x207e('0x3a')]]);}else{}}}catch(_0x2b13b1){logger[_0x207e('0x28')]('[syncPeerStatus][UserReport]',util[_0x207e('0x18')](_0x2b13b1,{'showHidden':![],'depth':null}));}};module['exports']=UserReport;
\ No newline at end of file
+var _0x2adf=['address','status','telephone:%s','exports','bluebird','util','../../../config/logger','ami','../ami','redis','defaults','socket.io-emitter','trunks','agents','telephones','registryentry','syncRegistry','bind','registry','devicestatechange','syncDeviceState','peerstatus','syncPeerStatus','loopSyncRealTimeShow','then','actionSipShowRegistry','actionDeviceStateList','catch','[loopSyncRealTimeShow]','error','prototype','resolve','actionSipPeerStatus','isNotNull','isUndefined','emit','find','username','stateRegistry','event','actionid','state','format','trunk:%s','name','trunk:save','[syncRegistry][UserReport]','inspect','device','toLowerCase','inuse','local','stateTime','toNumber','updateStatusRealtime','telephone:save','startsWith','Local','substring','indexOf','mobile','accountcode','[syncDeviceState][UserReport]','peer','registered'];(function(_0x4c3070,_0xc2fb4c){var _0x536a44=function(_0x1412a5){while(--_0x1412a5){_0x4c3070['push'](_0x4c3070['shift']());}};_0x536a44(++_0xc2fb4c);}(_0x2adf,0x86));var _0xf2ad=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x2adf[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var moment=require('moment');var BPromise=require(_0xf2ad('0x0'));var util=require(_0xf2ad('0x1'));var Redis=require('ioredis');var config=require('../../../config/environment');var logger=require(_0xf2ad('0x2'))(_0xf2ad('0x3'));var ami=require(_0xf2ad('0x4'));config[_0xf2ad('0x5')]=_[_0xf2ad('0x6')](config[_0xf2ad('0x5')],{'host':'localhost','port':0x18eb});var io=require(_0xf2ad('0x7'))(new Redis(config['redis']));function UserReport(_0x2964c7){this[_0xf2ad('0x8')]=_0x2964c7[_0xf2ad('0x8')];this['agents']=_0x2964c7[_0xf2ad('0x9')];this['telephones']=_0x2964c7[_0xf2ad('0xa')];ami['on'](_0xf2ad('0xb'),this[_0xf2ad('0xc')][_0xf2ad('0xd')](this));ami['on'](_0xf2ad('0xe'),this['syncRegistry']['bind'](this));ami['on'](_0xf2ad('0xf'),this[_0xf2ad('0x10')][_0xf2ad('0xd')](this));ami['on'](_0xf2ad('0x11'),this[_0xf2ad('0x12')][_0xf2ad('0xd')](this));this[_0xf2ad('0x13')]();return BPromise['resolve']()[_0xf2ad('0x14')](ami[_0xf2ad('0x15')]())[_0xf2ad('0x14')](ami[_0xf2ad('0x16')]())[_0xf2ad('0x14')](ami['actionSipPeerStatus']())[_0xf2ad('0x17')](loggerCatch(_0xf2ad('0x18')));}function loggerCatch(_0x3043f1){return function(_0x4e6593){logger[_0xf2ad('0x19')](_0x3043f1,util['inspect'](_0x4e6593,{'showHidden':![],'depth':null}));};}UserReport[_0xf2ad('0x1a')]['loopSyncRealTimeShow']=function(){setInterval(function(){BPromise[_0xf2ad('0x1b')]()[_0xf2ad('0x14')](ami[_0xf2ad('0x15')]())[_0xf2ad('0x14')](ami[_0xf2ad('0x16')]())['then'](ami[_0xf2ad('0x1c')]())[_0xf2ad('0x17')](loggerCatch(_0xf2ad('0x18')));},0x32c8);};UserReport[_0xf2ad('0x1a')][_0xf2ad('0x1d')]=function(_0x29f29f){return _0x29f29f!==null&&!_[_0xf2ad('0x1e')](_0x29f29f);};UserReport[_0xf2ad('0x1a')][_0xf2ad('0x1f')]=function(_0x2c678e,_0x5cb0d0,_0x5130bf){io['to'](_0x2c678e)['emit'](_0x5cb0d0,_0x5130bf);};UserReport[_0xf2ad('0x1a')]['syncRegistry']=function(_0x8224ee){try{if(this[_0xf2ad('0x1d')](_0x8224ee)){var _0x2634b8=_[_0xf2ad('0x20')](this[_0xf2ad('0x8')],{'registry':_0x8224ee[_0xf2ad('0x21')]});if(_0x2634b8){_0x8224ee[_0xf2ad('0x22')]=_0x8224ee['state'];_['merge'](_0x2634b8,_['omit'](_0x8224ee,[_0xf2ad('0x23'),_0xf2ad('0x24'),_0xf2ad('0x21'),_0xf2ad('0x25')]));this['emit'](util[_0xf2ad('0x26')](_0xf2ad('0x27'),_0x2634b8[_0xf2ad('0x28')]),_0xf2ad('0x29'),_0x2634b8);}}}catch(_0x1699bb){logger[_0xf2ad('0x19')](_0xf2ad('0x2a'),util[_0xf2ad('0x2b')](_0x1699bb,{'showHidden':![],'depth':null}));}};UserReport[_0xf2ad('0x1a')][_0xf2ad('0x10')]=function(_0x261ee4){try{if(this[_0xf2ad('0x1d')](_0x261ee4)){if(this[_0xf2ad('0x9')][_0x261ee4[_0xf2ad('0x2c')]]){if(!this['agents'][_0x261ee4[_0xf2ad('0x2c')]]['local']||_0x261ee4[_0xf2ad('0x25')][_0xf2ad('0x2d')]()==_0xf2ad('0x2e')){this[_0xf2ad('0x9')][_0x261ee4[_0xf2ad('0x2c')]][_0xf2ad('0x2f')]=![];if(this['agents'][_0x261ee4[_0xf2ad('0x2c')]][_0xf2ad('0x25')]!==_0x261ee4[_0xf2ad('0x25')]['toLowerCase']()){this[_0xf2ad('0x9')][_0x261ee4[_0xf2ad('0x2c')]][_0xf2ad('0x30')]=_[_0xf2ad('0x31')](moment()[_0xf2ad('0x26')]('x'));}this[_0xf2ad('0x9')][_0x261ee4[_0xf2ad('0x2c')]][_0xf2ad('0x25')]=_0x261ee4['state'][_0xf2ad('0x2d')]();this['agents'][_0x261ee4['device']][_0xf2ad('0x32')](_0x261ee4);}}else if(this['telephones'][_0x261ee4[_0xf2ad('0x2c')]]){if(this[_0xf2ad('0xa')][_0x261ee4['device']][_0xf2ad('0x25')]!==_0x261ee4[_0xf2ad('0x25')][_0xf2ad('0x2d')]()){this['telephones'][_0x261ee4[_0xf2ad('0x2c')]][_0xf2ad('0x30')]=_['toNumber'](moment()[_0xf2ad('0x26')]('x'));}this[_0xf2ad('0xa')][_0x261ee4[_0xf2ad('0x2c')]]['state']=_0x261ee4[_0xf2ad('0x25')]['toLowerCase']();this[_0xf2ad('0x1f')](util[_0xf2ad('0x26')]('telephone:%s',this['telephones'][_0x261ee4[_0xf2ad('0x2c')]][_0xf2ad('0x28')]),_0xf2ad('0x33'),this[_0xf2ad('0xa')][_0x261ee4[_0xf2ad('0x2c')]]);}else if(this['trunks'][_0x261ee4[_0xf2ad('0x2c')]]){if(this[_0xf2ad('0x8')][_0x261ee4[_0xf2ad('0x2c')]]['state']!==_0x261ee4[_0xf2ad('0x25')][_0xf2ad('0x2d')]()){this[_0xf2ad('0x8')][_0x261ee4[_0xf2ad('0x2c')]]['stateTime']=_['toNumber'](moment()['format']('x'));}this[_0xf2ad('0x8')][_0x261ee4[_0xf2ad('0x2c')]][_0xf2ad('0x25')]=_0x261ee4[_0xf2ad('0x25')][_0xf2ad('0x2d')]();this[_0xf2ad('0x1f')](util[_0xf2ad('0x26')]('trunk:%s',this[_0xf2ad('0x8')][_0x261ee4['device']][_0xf2ad('0x28')]),_0xf2ad('0x29'),this['trunks'][_0x261ee4[_0xf2ad('0x2c')]]);}else if(_[_0xf2ad('0x34')](_0x261ee4[_0xf2ad('0x2c')],'Queue')){}else if(_[_0xf2ad('0x34')](_0x261ee4[_0xf2ad('0x2c')],_0xf2ad('0x35'))){var _0x5025e2=_0x261ee4[_0xf2ad('0x2c')];var _0x1ba197=_0x5025e2[_0xf2ad('0x36')](_0x5025e2[_0xf2ad('0x37')]('/')+0x1,_0x5025e2[_0xf2ad('0x37')]('@'));var _0x18a10a=_[_0xf2ad('0x20')](this[_0xf2ad('0x9')],function(_0x274392){return _0x274392[_0xf2ad('0x38')]==_0x1ba197||_0x274392['phone']==_0x1ba197||_0x274392[_0xf2ad('0x39')]==_0x1ba197;});if(_0x18a10a){if(_0x18a10a[_0xf2ad('0x25')]!==_0x261ee4[_0xf2ad('0x25')][_0xf2ad('0x2d')]()){_0x18a10a[_0xf2ad('0x30')]=_[_0xf2ad('0x31')](moment()[_0xf2ad('0x26')]('x'));}_0x18a10a['state']=_0x261ee4['state'][_0xf2ad('0x2d')]();_0x18a10a['local']=!![];_0x18a10a[_0xf2ad('0x32')](_0x261ee4);}}else{}}}catch(_0x3f60e4){logger[_0xf2ad('0x19')](_0xf2ad('0x3a'),util[_0xf2ad('0x2b')](_0x3f60e4,{'showHidden':![],'depth':null}));}};UserReport[_0xf2ad('0x1a')]['syncPeerStatus']=function(_0x1419af){try{if(this['isNotNull'](_0x1419af)&&this[_0xf2ad('0x1d')](_0x1419af[_0xf2ad('0x11')])){if(this[_0xf2ad('0x9')][_0x1419af[_0xf2ad('0x3b')]]){if(!this[_0xf2ad('0x9')][_0x1419af[_0xf2ad('0x3b')]][_0xf2ad('0x2f')]||_0x1419af[_0xf2ad('0x11')]['toLowerCase']()==_0xf2ad('0x3c')){this['agents'][_0x1419af[_0xf2ad('0x3b')]][_0xf2ad('0x2f')]=![];this['agents'][_0x1419af[_0xf2ad('0x3b')]]['status']=_0x1419af[_0xf2ad('0x11')][_0xf2ad('0x2d')]();this[_0xf2ad('0x9')][_0x1419af[_0xf2ad('0x3b')]][_0xf2ad('0x3d')]=_0x1419af[_0xf2ad('0x3d')];this[_0xf2ad('0x9')][_0x1419af[_0xf2ad('0x3b')]][_0xf2ad('0x32')](_0x1419af);}}else if(this['telephones'][_0x1419af['peer']]){this[_0xf2ad('0xa')][_0x1419af[_0xf2ad('0x3b')]][_0xf2ad('0x3e')]=_0x1419af[_0xf2ad('0x11')][_0xf2ad('0x2d')]();this['telephones'][_0x1419af[_0xf2ad('0x3b')]]['address']=_0x1419af[_0xf2ad('0x3d')];this[_0xf2ad('0x1f')](util[_0xf2ad('0x26')](_0xf2ad('0x3f'),this[_0xf2ad('0xa')][_0x1419af[_0xf2ad('0x3b')]]['name']),_0xf2ad('0x33'),this['telephones'][_0x1419af[_0xf2ad('0x3b')]]);}else if(this[_0xf2ad('0x8')][_0x1419af[_0xf2ad('0x3b')]]){this[_0xf2ad('0x8')][_0x1419af[_0xf2ad('0x3b')]][_0xf2ad('0x3e')]=_0x1419af[_0xf2ad('0x11')][_0xf2ad('0x2d')]();this[_0xf2ad('0x8')][_0x1419af[_0xf2ad('0x3b')]][_0xf2ad('0x3d')]=_0x1419af[_0xf2ad('0x3d')];this[_0xf2ad('0x1f')](util['format'](_0xf2ad('0x27'),this[_0xf2ad('0x8')][_0x1419af[_0xf2ad('0x3b')]][_0xf2ad('0x28')]),_0xf2ad('0x29'),this['trunks'][_0x1419af[_0xf2ad('0x3b')]]);}else{}}}catch(_0x183fd3){logger['error']('[syncPeerStatus][UserReport]',util['inspect'](_0x183fd3,{'showHidden':![],'depth':null}));}};module[_0xf2ad('0x40')]=UserReport;
\ No newline at end of file
index 49f597e..c891914 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x78ea=['keys','[syncVarSet][VoiceAgentReport]','rtpaudioqosbridged','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrttbridged','sipuri','bridgepeer','bridgepvtcallid','membercalls','memberdynamic','memberinterface','memberlastcall','memberpenalty','memberrealtime','isNil','includes','custom:voiceAgentReport','values','[syncHangup][VoiceAgentReport]','transfereeuniqueid','origtransfereruniqueid','complete','diff','secondtransfereruniqueid','[syncAttendedTransfer][VoiceAgentReport]','transfereruniqueid','[syncBlindTransfer][VoiceAgentReport]','channel','substring','lastIndexOf','[syncMusicOnHoldStart][VoiceAgentReport]','onhold','[syncMusicOnHoldStop][VoiceAgentReport]','exports','lodash','moment','util','ioredis','../../../config/environment','../../../config/logger','ami','redis','defaults','localhost','socket.io-emitter','voiceQueues','agents','variables','agentcalled','syncAgentCalled','bind','syncAgentConnect','agentringnoanswer','queuecallerabandon','agentcomplete','syncAgentComplete','syncVarSet','syncHangup','musiconholdstart','syncMusicOnHoldStart','musiconholdstop','syncMusicOnHoldStop','attendedtransfer','syncAttendedTransfer','blindtransfer','syncBlindTransfer','emit','prototype','isNotNull','isUndefined','uniqueid','channels','destuniqueid','YYYY-MM-DD\x20HH:mm:ss','called','queue','type','inbound','omit','event','format','user:%s','user:called','error','[syncAgentCalled][VoiceAgentReport]','inspect','hasOwnProperty','agentconnectAt','lastevent','connect','holdtime','connectedlinenum','connectedlinename','destchannelstatedesc','interface','pick','destconnectedlinenum','membername','custom:agentconnect','agentringnoanswerAt','reason','answered_elsewhere','custom:agentansweredelsewhere','syncAgentRingNoAnswer','rejected','custom:agentringnoanswer','[syncAgentRingNoAnswer][VoiceAgentReport]','syncQueueCallerAbandon','abandoned','[syncQueueCallerAbandon][VoiceAgentReport]','agentcompleteAt','talktime','transfer','agent','acwtime','acwTimeout','user:agentcomplete','custom:agentcomplete'];(function(_0x5739ca,_0x526362){var _0x495859=function(_0x53d50a){while(--_0x53d50a){_0x5739ca['push'](_0x5739ca['shift']());}};_0x495859(++_0x526362);}(_0x78ea,0x188));var _0xa78e=function(_0x314cd1,_0x33679e){_0x314cd1=_0x314cd1-0x0;var _0x2a0846=_0x78ea[_0x314cd1];return _0x2a0846;};'use strict';var _=require(_0xa78e('0x0'));var moment=require(_0xa78e('0x1'));var util=require(_0xa78e('0x2'));var Redis=require(_0xa78e('0x3'));var config=require(_0xa78e('0x4'));var logger=require(_0xa78e('0x5'))(_0xa78e('0x6'));var ami=require('../ami');config[_0xa78e('0x7')]=_[_0xa78e('0x8')](config[_0xa78e('0x7')],{'host':_0xa78e('0x9'),'port':0x18eb});var io=require(_0xa78e('0xa'))(new Redis(config[_0xa78e('0x7')]));function VoiceAgentReport(_0x146465){this['channels']={};this[_0xa78e('0xb')]=_0x146465[_0xa78e('0xb')];this[_0xa78e('0xc')]=_0x146465[_0xa78e('0xc')];this[_0xa78e('0xd')]={};ami['on'](_0xa78e('0xe'),this[_0xa78e('0xf')][_0xa78e('0x10')](this));ami['on']('agentconnect',this[_0xa78e('0x11')][_0xa78e('0x10')](this));ami['on'](_0xa78e('0x12'),this['syncAgentRingNoAnswer'][_0xa78e('0x10')](this));ami['on'](_0xa78e('0x13'),this['syncQueueCallerAbandon'][_0xa78e('0x10')](this));ami['on'](_0xa78e('0x14'),this[_0xa78e('0x15')][_0xa78e('0x10')](this));ami['on']('varset',this[_0xa78e('0x16')][_0xa78e('0x10')](this));ami['on']('hangup',this[_0xa78e('0x17')][_0xa78e('0x10')](this));ami['on'](_0xa78e('0x18'),this[_0xa78e('0x19')][_0xa78e('0x10')](this));ami['on'](_0xa78e('0x1a'),this[_0xa78e('0x1b')][_0xa78e('0x10')](this));ami['on'](_0xa78e('0x1c'),this[_0xa78e('0x1d')][_0xa78e('0x10')](this));ami['on'](_0xa78e('0x1e'),this[_0xa78e('0x1f')][_0xa78e('0x10')](this));}VoiceAgentReport['prototype'][_0xa78e('0x20')]=function(_0x3f2189,_0x841e67,_0x2d2d56){io['to'](_0x3f2189)[_0xa78e('0x20')](_0x841e67,_0x2d2d56);};VoiceAgentReport[_0xa78e('0x21')]['isNotNull']=function(_0xd50cad){return _0xd50cad!==null&&!_['isUndefined'](_0xd50cad);};VoiceAgentReport[_0xa78e('0x21')][_0xa78e('0xf')]=function(_0x4a778b){try{if(this[_0xa78e('0x22')](_0x4a778b)){if(_[_0xa78e('0x23')](this['channels'][_0x4a778b[_0xa78e('0x24')]])){this['channels'][_0x4a778b[_0xa78e('0x24')]]={};}if(_[_0xa78e('0x23')](this[_0xa78e('0x25')][_0x4a778b[_0xa78e('0x24')]][_0x4a778b[_0xa78e('0x26')]])){this[_0xa78e('0x25')][_0x4a778b[_0xa78e('0x24')]][_0x4a778b['destuniqueid']]={'agentcalledAt':moment()['format'](_0xa78e('0x27')),'lastevent':_0xa78e('0x28'),'variables':this[_0xa78e('0xd')][_0x4a778b[_0xa78e('0x24')]],'type':this[_0xa78e('0xb')][_0x4a778b['queue']]?this[_0xa78e('0xb')][_0x4a778b[_0xa78e('0x29')]][_0xa78e('0x2a')]||_0xa78e('0x2b'):_0xa78e('0x2b')};}_['merge'](this[_0xa78e('0x25')][_0x4a778b['uniqueid']][_0x4a778b[_0xa78e('0x26')]],_[_0xa78e('0x2c')](_0x4a778b,[_0xa78e('0x2d'),'privilege']));ami[_0xa78e('0x20')]('custom:agentcalled',this['channels'][_0x4a778b[_0xa78e('0x24')]][_0x4a778b['destuniqueid']]);this[_0xa78e('0x20')](util[_0xa78e('0x2e')](_0xa78e('0x2f'),_0x4a778b['membername']),_0xa78e('0x30'),this['channels'][_0x4a778b[_0xa78e('0x24')]][_0x4a778b[_0xa78e('0x26')]]);}}catch(_0x28b363){logger[_0xa78e('0x31')](_0xa78e('0x32'),util[_0xa78e('0x33')](_0x28b363,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa78e('0x21')][_0xa78e('0x11')]=function(_0x4b9523){try{if(this['isNotNull'](_0x4b9523)){if(this[_0xa78e('0x25')][_0x4b9523[_0xa78e('0x24')]]){for(var _0x191c52 in this['channels'][_0x4b9523[_0xa78e('0x24')]]){if(this[_0xa78e('0x25')][_0x4b9523[_0xa78e('0x24')]][_0xa78e('0x34')](_0x191c52)){if(_0x4b9523['destuniqueid']===_0x191c52){this[_0xa78e('0x25')][_0x4b9523[_0xa78e('0x24')]][_0x191c52][_0xa78e('0x35')]=moment()[_0xa78e('0x2e')](_0xa78e('0x27'));this['channels'][_0x4b9523[_0xa78e('0x24')]][_0x191c52][_0xa78e('0x36')]=_0xa78e('0x37');this[_0xa78e('0x25')][_0x4b9523[_0xa78e('0x24')]][_0x191c52][_0xa78e('0x38')]=_0x4b9523[_0xa78e('0x38')];this['channels'][_0x4b9523['uniqueid']][_0x191c52][_0xa78e('0x39')]=_0x4b9523[_0xa78e('0x39')];this[_0xa78e('0x25')][_0x4b9523[_0xa78e('0x24')]][_0x191c52]['connectedlinename']=_0x4b9523[_0xa78e('0x3a')];this['channels'][_0x4b9523[_0xa78e('0x24')]][_0x191c52]['destchannelstate']=_0x4b9523['destchannelstate'];this['channels'][_0x4b9523[_0xa78e('0x24')]][_0x191c52]['destchannelstatedesc']=_0x4b9523[_0xa78e('0x3b')];_['merge'](this[_0xa78e('0xc')][_0x4b9523[_0xa78e('0x3c')]],_[_0xa78e('0x3d')](_0x4b9523,[_0xa78e('0x29'),_0xa78e('0x3e')]));this[_0xa78e('0x20')](util[_0xa78e('0x2e')]('user:%s',_0x4b9523[_0xa78e('0x3f')]),'user:agentconnect',this['channels'][_0x4b9523[_0xa78e('0x24')]][_0x4b9523['destuniqueid']]);ami[_0xa78e('0x20')](_0xa78e('0x40'),this[_0xa78e('0x25')][_0x4b9523['uniqueid']][_0x191c52]);}else if(!this['channels'][_0x4b9523[_0xa78e('0x24')]][_0x191c52][_0xa78e('0x12')]&&!this[_0xa78e('0x25')][_0x4b9523['uniqueid']][_0x191c52][_0xa78e('0x14')]){this[_0xa78e('0x25')][_0x4b9523['uniqueid']][_0x191c52][_0xa78e('0x12')]=!![];this[_0xa78e('0x25')][_0x4b9523[_0xa78e('0x24')]][_0x191c52][_0xa78e('0x41')]=moment()[_0xa78e('0x2e')](_0xa78e('0x27'));this[_0xa78e('0x25')][_0x4b9523[_0xa78e('0x24')]][_0x191c52][_0xa78e('0x42')]=_0xa78e('0x43');this[_0xa78e('0x25')][_0x4b9523[_0xa78e('0x24')]][_0x191c52][_0xa78e('0x36')]='answered_elsewhere';this[_0xa78e('0x25')][_0x4b9523[_0xa78e('0x24')]][_0x191c52]['answeredelsewheredestinationuniqueid']=_0x4b9523[_0xa78e('0x26')];this[_0xa78e('0x25')][_0x4b9523['uniqueid']][_0x191c52]['answeredelsewheremembername']=_0x4b9523[_0xa78e('0x3f')];ami[_0xa78e('0x20')](_0xa78e('0x44'),this['channels'][_0x4b9523[_0xa78e('0x24')]][_0x191c52]);}}}}}}catch(_0x16f766){logger[_0xa78e('0x31')]('[syncAgentConnect][VoiceAgentReport]',util[_0xa78e('0x33')](_0x16f766,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa78e('0x21')][_0xa78e('0x45')]=function(_0xb5fedc){try{if(this[_0xa78e('0x22')](_0xb5fedc)){if(this[_0xa78e('0x25')][_0xb5fedc[_0xa78e('0x24')]]&&this[_0xa78e('0x25')][_0xb5fedc[_0xa78e('0x24')]][_0xb5fedc['destuniqueid']]){this['channels'][_0xb5fedc[_0xa78e('0x24')]][_0xb5fedc[_0xa78e('0x26')]][_0xa78e('0x12')]=!![];this[_0xa78e('0x25')][_0xb5fedc[_0xa78e('0x24')]][_0xb5fedc[_0xa78e('0x26')]]['agentringnoanswerAt']=moment()[_0xa78e('0x2e')](_0xa78e('0x27'));this[_0xa78e('0x25')][_0xb5fedc[_0xa78e('0x24')]][_0xb5fedc[_0xa78e('0x26')]][_0xa78e('0x42')]=_0xa78e('0x46');this[_0xa78e('0x25')][_0xb5fedc[_0xa78e('0x24')]][_0xb5fedc[_0xa78e('0x26')]][_0xa78e('0x36')]=_0xa78e('0x46');ami['emit'](_0xa78e('0x47'),this[_0xa78e('0x25')][_0xb5fedc[_0xa78e('0x24')]][_0xb5fedc[_0xa78e('0x26')]]);}}}catch(_0x4cf843){logger[_0xa78e('0x31')](_0xa78e('0x48'),util[_0xa78e('0x33')](_0x4cf843,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa78e('0x21')][_0xa78e('0x49')]=function(_0x18be55){try{if(this[_0xa78e('0x22')](_0x18be55)){if(this[_0xa78e('0x25')][_0x18be55['uniqueid']]){for(var _0x192b1f in this[_0xa78e('0x25')][_0x18be55[_0xa78e('0x24')]]){if(this[_0xa78e('0x25')][_0x18be55[_0xa78e('0x24')]][_0xa78e('0x34')](_0x192b1f)&&!this[_0xa78e('0x25')][_0x18be55['uniqueid']][_0x192b1f][_0xa78e('0x12')]&&!this['channels'][_0x18be55['uniqueid']][_0x192b1f][_0xa78e('0x14')]){this[_0xa78e('0x25')][_0x18be55[_0xa78e('0x24')]][_0x192b1f]['agentringnoanswer']=!![];this[_0xa78e('0x25')][_0x18be55[_0xa78e('0x24')]][_0x192b1f][_0xa78e('0x41')]=moment()[_0xa78e('0x2e')](_0xa78e('0x27'));this[_0xa78e('0x25')][_0x18be55[_0xa78e('0x24')]][_0x192b1f]['reason']=_0xa78e('0x4a');this[_0xa78e('0x25')][_0x18be55['uniqueid']][_0x192b1f]['lastevent']='abandoned';ami[_0xa78e('0x20')]('custom:agentqueuecallerabandon',this['channels'][_0x18be55['uniqueid']][_0x192b1f]);}}}}}catch(_0x56c392){logger['error'](_0xa78e('0x4b'),util['inspect'](_0x56c392,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa78e('0x21')][_0xa78e('0x15')]=function(_0x3a8c71){try{if(this[_0xa78e('0x22')](_0x3a8c71)){if(this['channels'][_0x3a8c71[_0xa78e('0x24')]]){for(var _0x316200 in this['channels'][_0x3a8c71[_0xa78e('0x24')]]){if(this[_0xa78e('0x25')][_0x3a8c71['uniqueid']]['hasOwnProperty'](_0x316200)){if(this[_0xa78e('0x25')][_0x3a8c71['uniqueid']][_0x316200][_0xa78e('0x35')]&&!this['channels'][_0x3a8c71[_0xa78e('0x24')]][_0x316200]['agentcomplete']){this[_0xa78e('0x25')][_0x3a8c71[_0xa78e('0x24')]][_0x316200][_0xa78e('0x14')]=!![];this[_0xa78e('0x25')][_0x3a8c71[_0xa78e('0x24')]][_0x316200][_0xa78e('0x4c')]=moment()[_0xa78e('0x2e')]('YYYY-MM-DD\x20HH:mm:ss');this['channels'][_0x3a8c71[_0xa78e('0x24')]][_0x316200][_0xa78e('0x36')]='complete';this[_0xa78e('0x25')][_0x3a8c71['uniqueid']][_0x316200][_0xa78e('0x4d')]=_0x3a8c71[_0xa78e('0x4d')];this[_0xa78e('0x25')][_0x3a8c71[_0xa78e('0x24')]][_0x316200][_0xa78e('0x42')]=_0x3a8c71[_0xa78e('0x42')]==_0xa78e('0x4e')?_0xa78e('0x4f'):_0x3a8c71[_0xa78e('0x42')];if(this[_0xa78e('0xb')][_0x3a8c71[_0xa78e('0x29')]]&&this['voiceQueues'][_0x3a8c71[_0xa78e('0x29')]]['acw']){this[_0xa78e('0x25')][_0x3a8c71[_0xa78e('0x24')]][_0x316200]['agentacw']=!![];this[_0xa78e('0x25')][_0x3a8c71[_0xa78e('0x24')]][_0x316200][_0xa78e('0x50')]=this['voiceQueues'][_0x3a8c71['queue']][_0xa78e('0x51')];}this[_0xa78e('0xc')][_0x3a8c71[_0xa78e('0x3c')]]=_[_0xa78e('0x2c')](this['agents'][_0x3a8c71['interface']],[_0xa78e('0x29'),_0xa78e('0x3e')]);this[_0xa78e('0x20')](util[_0xa78e('0x2e')]('user:%s',_0x3a8c71[_0xa78e('0x3f')]),_0xa78e('0x52'),this[_0xa78e('0x25')][_0x3a8c71[_0xa78e('0x24')]][_0x316200]);ami[_0xa78e('0x20')](_0xa78e('0x53'),this[_0xa78e('0x25')][_0x3a8c71['uniqueid']][_0x316200]);}}}}}}catch(_0x15447b){logger[_0xa78e('0x31')]('[syncAgentComplete][VoiceAgentReport]',util[_0xa78e('0x33')](_0x15447b,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa78e('0x21')][_0xa78e('0x16')]=function(_0x3e47e4){try{if(this[_0xa78e('0x22')](_0x3e47e4)){this['addVariable'](_0x3e47e4[_0xa78e('0x24')],_[_0xa78e('0x54')](_0x3e47e4['variable'])[0x0],_0x3e47e4['value']);if(this[_0xa78e('0x25')][_0x3e47e4[_0xa78e('0x24')]]){for(var _0x1d73b2 in this['channels'][_0x3e47e4[_0xa78e('0x24')]]){if(this[_0xa78e('0x25')][_0x3e47e4[_0xa78e('0x24')]][_0xa78e('0x34')](_0x1d73b2)){if(_[_0xa78e('0x23')](this[_0xa78e('0x25')][_0x3e47e4[_0xa78e('0x24')]][_0x1d73b2][_0xa78e('0xd')])){this[_0xa78e('0x25')][_0x3e47e4[_0xa78e('0x24')]][_0x1d73b2]['variables']={};}this[_0xa78e('0x25')][_0x3e47e4[_0xa78e('0x24')]][_0x1d73b2]['variables']=this['variables'][_0x3e47e4[_0xa78e('0x24')]];}}}}}catch(_0x21a286){logger[_0xa78e('0x31')](_0xa78e('0x55'),util[_0xa78e('0x33')](_0x21a286,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa78e('0x21')]['addVariable']=function(_0x223baf,_0x5bb537,_0x51cd65){var _0x1c9b9d=['rtpaudioqos',_0xa78e('0x56'),'rtpaudioqosjitter','rtpaudioqosjitterbridged',_0xa78e('0x57'),_0xa78e('0x58'),'rtpaudioqosrtt',_0xa78e('0x59'),'sipcallid',_0xa78e('0x5a'),_0xa78e('0x5b'),_0xa78e('0x5c'),_0xa78e('0x5d'),_0xa78e('0x5e'),_0xa78e('0x5f'),_0xa78e('0x60'),'membername',_0xa78e('0x61'),_0xa78e('0x62')];if(!_[_0xa78e('0x63')](_0x5bb537)&&!_[_0xa78e('0x64')](_0x1c9b9d,_0x5bb537)){if(_['isUndefined'](this['variables'][_0x223baf])){this[_0xa78e('0xd')][_0x223baf]={};}this[_0xa78e('0xd')][_0x223baf][_0x5bb537]=_0x51cd65;}};VoiceAgentReport['prototype'][_0xa78e('0x17')]=function(_0x4e9b98){try{if(this['isNotNull'](_0x4e9b98)){if(this[_0xa78e('0x25')][_0x4e9b98[_0xa78e('0x24')]]){for(var _0x1aae95 in this[_0xa78e('0x25')][_0x4e9b98[_0xa78e('0x24')]]){if(this[_0xa78e('0x25')][_0x4e9b98[_0xa78e('0x24')]][_0xa78e('0x34')](_0x1aae95)){if(this['channels'][_0x4e9b98[_0xa78e('0x24')]][_0x1aae95][_0xa78e('0x42')]==_0xa78e('0x4e')&&this[_0xa78e('0x25')][_0x4e9b98[_0xa78e('0x24')]][_0x1aae95][_0xa78e('0x14')]){this[_0xa78e('0x25')][_0x4e9b98[_0xa78e('0x24')]][_0x1aae95]['agentcompleteAt']=moment()[_0xa78e('0x2e')](_0xa78e('0x27'));}}}ami[_0xa78e('0x20')](_0xa78e('0x65'),_[_0xa78e('0x66')](this['channels'][_0x4e9b98[_0xa78e('0x24')]]));delete this['channels'][_0x4e9b98['uniqueid']];}if(this['variables'][_0x4e9b98['uniqueid']]){delete this[_0xa78e('0xd')][_0x4e9b98[_0xa78e('0x24')]];}}}catch(_0x2039ec){logger[_0xa78e('0x31')](_0xa78e('0x67'),util[_0xa78e('0x33')](_0x2039ec,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa78e('0x21')][_0xa78e('0x1d')]=function(_0x5f4341){try{if(this[_0xa78e('0x22')](_0x5f4341)){if(this['channels'][_0x5f4341[_0xa78e('0x68')]]){for(var _0x1a026d in this['channels'][_0x5f4341[_0xa78e('0x68')]]){if(this[_0xa78e('0x25')][_0x5f4341[_0xa78e('0x68')]][_0xa78e('0x34')](_0x1a026d)){if(_0x5f4341[_0xa78e('0x69')]===_0x1a026d){var _0x27c705=moment();this[_0xa78e('0x25')][_0x5f4341[_0xa78e('0x68')]][_0x1a026d][_0xa78e('0x14')]=!![];this[_0xa78e('0x25')][_0x5f4341['transfereeuniqueid']][_0x1a026d][_0xa78e('0x4c')]=moment()['format'](_0xa78e('0x27'));this['channels'][_0x5f4341[_0xa78e('0x68')]][_0x1a026d]['reason']=_0xa78e('0x4e');this[_0xa78e('0x25')][_0x5f4341[_0xa78e('0x68')]][_0x1a026d][_0xa78e('0x36')]=_0xa78e('0x6a');this[_0xa78e('0x25')][_0x5f4341[_0xa78e('0x68')]][_0x1a026d][_0xa78e('0x4d')]=_0x27c705[_0xa78e('0x6b')](this[_0xa78e('0x25')][_0x5f4341['transfereeuniqueid']][_0x1a026d][_0xa78e('0x35')],'seconds');}}}}if(this['channels'][_0x5f4341[_0xa78e('0x6c')]]){var _0x2b5090=this[_0xa78e('0x25')][_0x5f4341['secondtransfereruniqueid']];this[_0xa78e('0x25')][_0x5f4341[_0xa78e('0x6c')]]=this[_0xa78e('0x25')][_0x5f4341[_0xa78e('0x68')]];this[_0xa78e('0x25')][_0x5f4341[_0xa78e('0x68')]]=_0x2b5090;}}}catch(_0xcc7c5b){logger['error'](_0xa78e('0x6d'),util[_0xa78e('0x33')](_0xcc7c5b,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa78e('0x21')][_0xa78e('0x1f')]=function(_0x21a085){try{if(this[_0xa78e('0x22')](_0x21a085)){if(this[_0xa78e('0x25')][_0x21a085[_0xa78e('0x68')]]){for(var _0xde4b15 in this[_0xa78e('0x25')][_0x21a085['transfereeuniqueid']]){if(this[_0xa78e('0x25')][_0x21a085[_0xa78e('0x68')]][_0xa78e('0x34')](_0xde4b15)){if(_0x21a085[_0xa78e('0x6e')]===_0xde4b15){var _0x3f8241=moment();this[_0xa78e('0x25')][_0x21a085['transfereeuniqueid']][_0xde4b15][_0xa78e('0x14')]=!![];this[_0xa78e('0x25')][_0x21a085['transfereeuniqueid']][_0xde4b15][_0xa78e('0x4c')]=_0x3f8241;this[_0xa78e('0x25')][_0x21a085[_0xa78e('0x68')]][_0xde4b15][_0xa78e('0x42')]='transfer';this[_0xa78e('0x25')][_0x21a085[_0xa78e('0x68')]][_0xde4b15][_0xa78e('0x36')]=_0xa78e('0x6a');this[_0xa78e('0x25')][_0x21a085[_0xa78e('0x68')]][_0xde4b15][_0xa78e('0x4d')]=_0x3f8241[_0xa78e('0x6b')](this[_0xa78e('0x25')][_0x21a085[_0xa78e('0x68')]][_0xde4b15][_0xa78e('0x35')],'seconds');}}}}}}catch(_0x23b50a){logger['error'](_0xa78e('0x6f'),util[_0xa78e('0x33')](_0x23b50a,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa78e('0x21')]['syncMusicOnHoldStart']=function(_0x52c668){var _0x2112ee='';try{if(this[_0xa78e('0x22')](_0x52c668)){if(_0x52c668[_0xa78e('0x70')]){_0x2112ee=_0x52c668['channel'][_0xa78e('0x71')](0x0,_0x52c668[_0xa78e('0x70')][_0xa78e('0x72')]('-'));if(this[_0xa78e('0xc')][_0x2112ee]){this[_0xa78e('0xc')][_0x2112ee]['onhold']=!![];}}}}catch(_0x1338cb){logger[_0xa78e('0x31')](_0xa78e('0x73'),util[_0xa78e('0x33')](_0x1338cb,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa78e('0x21')][_0xa78e('0x1b')]=function(_0x29b7dc){var _0x53001c='';try{if(this[_0xa78e('0x22')](_0x29b7dc)){if(_0x29b7dc['channel']){_0x53001c=_0x29b7dc['channel'][_0xa78e('0x71')](0x0,_0x29b7dc[_0xa78e('0x70')][_0xa78e('0x72')]('-'));if(this[_0xa78e('0xc')][_0x53001c]){this['agents'][_0x53001c][_0xa78e('0x74')]=![];}}}}catch(_0x3cfe74){logger[_0xa78e('0x31')](_0xa78e('0x75'),util[_0xa78e('0x33')](_0x3cfe74,{'showHidden':![],'depth':null}));}};module[_0xa78e('0x76')]=VoiceAgentReport;
\ No newline at end of file
+var _0x80aa=['secondtransfereruniqueid','transfereruniqueid','[syncBlindTransfer][VoiceAgentReport]','syncMusicOnHoldStart','channel','substring','lastIndexOf','onhold','[syncMusicOnHoldStart][VoiceAgentReport]','exports','lodash','moment','ioredis','../../../config/environment','ami','redis','defaults','socket.io-emitter','channels','voiceQueues','variables','agentcalled','syncAgentCalled','agentconnect','syncAgentConnect','bind','queuecallerabandon','syncQueueCallerAbandon','agentcomplete','varset','syncVarSet','hangup','musiconholdstart','musiconholdstop','syncMusicOnHoldStop','syncAttendedTransfer','blindtransfer','syncBlindTransfer','prototype','emit','isNotNull','isUndefined','uniqueid','destuniqueid','YYYY-MM-DD\x20HH:mm:ss','called','queue','type','inbound','merge','omit','privilege','format','user:called','error','inspect','hasOwnProperty','agentconnectAt','lastevent','connectedlinenum','connectedlinename','destchannelstate','destchannelstatedesc','agents','interface','destconnectedlinenum','user:%s','membername','user:agentconnect','agentringnoanswer','agentringnoanswerAt','reason','answered_elsewhere','answeredelsewheredestinationuniqueid','answeredelsewheremembername','custom:agentansweredelsewhere','[syncAgentConnect][VoiceAgentReport]','syncAgentRingNoAnswer','rejected','custom:agentringnoanswer','[syncAgentRingNoAnswer][VoiceAgentReport]','abandoned','[syncQueueCallerAbandon][VoiceAgentReport]','syncAgentComplete','agentcompleteAt','complete','talktime','transfer','acw','agentacw','acwTimeout','custom:agentcomplete','addVariable','keys','variable','[syncVarSet][VoiceAgentReport]','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqosrtt','rtpaudioqosrttbridged','bridgepeer','bridgepvtcallid','membercalls','memberdynamic','memberinterface','memberrealtime','isNil','includes','syncHangup','[syncHangup][VoiceAgentReport]','transfereeuniqueid','origtransfereruniqueid','diff','seconds'];(function(_0x5aa423,_0xf1b87d){var _0x281b15=function(_0xc94b42){while(--_0xc94b42){_0x5aa423['push'](_0x5aa423['shift']());}};_0x281b15(++_0xf1b87d);}(_0x80aa,0x7f));var _0xa80a=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x80aa[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0xa80a('0x0'));var moment=require(_0xa80a('0x1'));var util=require('util');var Redis=require(_0xa80a('0x2'));var config=require(_0xa80a('0x3'));var logger=require('../../../config/logger')(_0xa80a('0x4'));var ami=require('../ami');config[_0xa80a('0x5')]=_[_0xa80a('0x6')](config[_0xa80a('0x5')],{'host':'localhost','port':0x18eb});var io=require(_0xa80a('0x7'))(new Redis(config[_0xa80a('0x5')]));function VoiceAgentReport(_0x2562bc){this[_0xa80a('0x8')]={};this[_0xa80a('0x9')]=_0x2562bc['voiceQueues'];this['agents']=_0x2562bc['agents'];this[_0xa80a('0xa')]={};ami['on'](_0xa80a('0xb'),this[_0xa80a('0xc')]['bind'](this));ami['on'](_0xa80a('0xd'),this[_0xa80a('0xe')][_0xa80a('0xf')](this));ami['on']('agentringnoanswer',this['syncAgentRingNoAnswer']['bind'](this));ami['on'](_0xa80a('0x10'),this[_0xa80a('0x11')][_0xa80a('0xf')](this));ami['on'](_0xa80a('0x12'),this['syncAgentComplete'][_0xa80a('0xf')](this));ami['on'](_0xa80a('0x13'),this[_0xa80a('0x14')][_0xa80a('0xf')](this));ami['on'](_0xa80a('0x15'),this['syncHangup'][_0xa80a('0xf')](this));ami['on'](_0xa80a('0x16'),this['syncMusicOnHoldStart'][_0xa80a('0xf')](this));ami['on'](_0xa80a('0x17'),this[_0xa80a('0x18')][_0xa80a('0xf')](this));ami['on']('attendedtransfer',this[_0xa80a('0x19')][_0xa80a('0xf')](this));ami['on'](_0xa80a('0x1a'),this[_0xa80a('0x1b')][_0xa80a('0xf')](this));}VoiceAgentReport[_0xa80a('0x1c')]['emit']=function(_0x2b8928,_0x34c69c,_0x5a8ad3){io['to'](_0x2b8928)[_0xa80a('0x1d')](_0x34c69c,_0x5a8ad3);};VoiceAgentReport['prototype']['isNotNull']=function(_0x1f08f6){return _0x1f08f6!==null&&!_['isUndefined'](_0x1f08f6);};VoiceAgentReport['prototype'][_0xa80a('0xc')]=function(_0x3a1817){try{if(this[_0xa80a('0x1e')](_0x3a1817)){if(_[_0xa80a('0x1f')](this[_0xa80a('0x8')][_0x3a1817[_0xa80a('0x20')]])){this['channels'][_0x3a1817[_0xa80a('0x20')]]={};}if(_[_0xa80a('0x1f')](this[_0xa80a('0x8')][_0x3a1817[_0xa80a('0x20')]][_0x3a1817[_0xa80a('0x21')]])){this[_0xa80a('0x8')][_0x3a1817['uniqueid']][_0x3a1817[_0xa80a('0x21')]]={'agentcalledAt':moment()['format'](_0xa80a('0x22')),'lastevent':_0xa80a('0x23'),'variables':this[_0xa80a('0xa')][_0x3a1817[_0xa80a('0x20')]],'type':this[_0xa80a('0x9')][_0x3a1817[_0xa80a('0x24')]]?this[_0xa80a('0x9')][_0x3a1817['queue']][_0xa80a('0x25')]||_0xa80a('0x26'):'inbound'};}_[_0xa80a('0x27')](this['channels'][_0x3a1817[_0xa80a('0x20')]][_0x3a1817[_0xa80a('0x21')]],_[_0xa80a('0x28')](_0x3a1817,['event',_0xa80a('0x29')]));ami[_0xa80a('0x1d')]('custom:agentcalled',this[_0xa80a('0x8')][_0x3a1817['uniqueid']][_0x3a1817[_0xa80a('0x21')]]);this[_0xa80a('0x1d')](util[_0xa80a('0x2a')]('user:%s',_0x3a1817['membername']),_0xa80a('0x2b'),this['channels'][_0x3a1817['uniqueid']][_0x3a1817['destuniqueid']]);}}catch(_0x3afe0c){logger[_0xa80a('0x2c')]('[syncAgentCalled][VoiceAgentReport]',util[_0xa80a('0x2d')](_0x3afe0c,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa80a('0x1c')][_0xa80a('0xe')]=function(_0x44c264){try{if(this['isNotNull'](_0x44c264)){if(this[_0xa80a('0x8')][_0x44c264['uniqueid']]){for(var _0x27ddea in this['channels'][_0x44c264[_0xa80a('0x20')]]){if(this['channels'][_0x44c264['uniqueid']][_0xa80a('0x2e')](_0x27ddea)){if(_0x44c264[_0xa80a('0x21')]===_0x27ddea){this[_0xa80a('0x8')][_0x44c264['uniqueid']][_0x27ddea][_0xa80a('0x2f')]=moment()[_0xa80a('0x2a')](_0xa80a('0x22'));this[_0xa80a('0x8')][_0x44c264['uniqueid']][_0x27ddea][_0xa80a('0x30')]='connect';this[_0xa80a('0x8')][_0x44c264[_0xa80a('0x20')]][_0x27ddea]['holdtime']=_0x44c264['holdtime'];this['channels'][_0x44c264[_0xa80a('0x20')]][_0x27ddea][_0xa80a('0x31')]=_0x44c264[_0xa80a('0x31')];this['channels'][_0x44c264['uniqueid']][_0x27ddea][_0xa80a('0x32')]=_0x44c264[_0xa80a('0x32')];this[_0xa80a('0x8')][_0x44c264[_0xa80a('0x20')]][_0x27ddea][_0xa80a('0x33')]=_0x44c264['destchannelstate'];this[_0xa80a('0x8')][_0x44c264[_0xa80a('0x20')]][_0x27ddea][_0xa80a('0x34')]=_0x44c264['destchannelstatedesc'];_[_0xa80a('0x27')](this[_0xa80a('0x35')][_0x44c264[_0xa80a('0x36')]],_['pick'](_0x44c264,[_0xa80a('0x24'),_0xa80a('0x37')]));this['emit'](util['format'](_0xa80a('0x38'),_0x44c264[_0xa80a('0x39')]),_0xa80a('0x3a'),this[_0xa80a('0x8')][_0x44c264[_0xa80a('0x20')]][_0x44c264[_0xa80a('0x21')]]);ami[_0xa80a('0x1d')]('custom:agentconnect',this[_0xa80a('0x8')][_0x44c264[_0xa80a('0x20')]][_0x27ddea]);}else if(!this[_0xa80a('0x8')][_0x44c264['uniqueid']][_0x27ddea][_0xa80a('0x3b')]&&!this[_0xa80a('0x8')][_0x44c264[_0xa80a('0x20')]][_0x27ddea]['agentcomplete']){this['channels'][_0x44c264[_0xa80a('0x20')]][_0x27ddea][_0xa80a('0x3b')]=!![];this[_0xa80a('0x8')][_0x44c264['uniqueid']][_0x27ddea][_0xa80a('0x3c')]=moment()[_0xa80a('0x2a')](_0xa80a('0x22'));this[_0xa80a('0x8')][_0x44c264[_0xa80a('0x20')]][_0x27ddea][_0xa80a('0x3d')]=_0xa80a('0x3e');this['channels'][_0x44c264['uniqueid']][_0x27ddea]['lastevent']=_0xa80a('0x3e');this[_0xa80a('0x8')][_0x44c264[_0xa80a('0x20')]][_0x27ddea][_0xa80a('0x3f')]=_0x44c264['destuniqueid'];this[_0xa80a('0x8')][_0x44c264['uniqueid']][_0x27ddea][_0xa80a('0x40')]=_0x44c264[_0xa80a('0x39')];ami[_0xa80a('0x1d')](_0xa80a('0x41'),this[_0xa80a('0x8')][_0x44c264[_0xa80a('0x20')]][_0x27ddea]);}}}}}}catch(_0x2f81ef){logger['error'](_0xa80a('0x42'),util[_0xa80a('0x2d')](_0x2f81ef,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0xa80a('0x43')]=function(_0x3b9930){try{if(this[_0xa80a('0x1e')](_0x3b9930)){if(this[_0xa80a('0x8')][_0x3b9930[_0xa80a('0x20')]]&&this[_0xa80a('0x8')][_0x3b9930[_0xa80a('0x20')]][_0x3b9930['destuniqueid']]){this[_0xa80a('0x8')][_0x3b9930[_0xa80a('0x20')]][_0x3b9930['destuniqueid']][_0xa80a('0x3b')]=!![];this['channels'][_0x3b9930[_0xa80a('0x20')]][_0x3b9930[_0xa80a('0x21')]][_0xa80a('0x3c')]=moment()[_0xa80a('0x2a')]('YYYY-MM-DD\x20HH:mm:ss');this[_0xa80a('0x8')][_0x3b9930['uniqueid']][_0x3b9930[_0xa80a('0x21')]][_0xa80a('0x3d')]=_0xa80a('0x44');this[_0xa80a('0x8')][_0x3b9930['uniqueid']][_0x3b9930[_0xa80a('0x21')]][_0xa80a('0x30')]='rejected';ami[_0xa80a('0x1d')](_0xa80a('0x45'),this[_0xa80a('0x8')][_0x3b9930[_0xa80a('0x20')]][_0x3b9930[_0xa80a('0x21')]]);}}}catch(_0x4c59aa){logger[_0xa80a('0x2c')](_0xa80a('0x46'),util['inspect'](_0x4c59aa,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0xa80a('0x11')]=function(_0x4862e6){try{if(this[_0xa80a('0x1e')](_0x4862e6)){if(this['channels'][_0x4862e6[_0xa80a('0x20')]]){for(var _0x1b0955 in this[_0xa80a('0x8')][_0x4862e6[_0xa80a('0x20')]]){if(this['channels'][_0x4862e6[_0xa80a('0x20')]]['hasOwnProperty'](_0x1b0955)&&!this[_0xa80a('0x8')][_0x4862e6[_0xa80a('0x20')]][_0x1b0955]['agentringnoanswer']&&!this['channels'][_0x4862e6[_0xa80a('0x20')]][_0x1b0955][_0xa80a('0x12')]){this[_0xa80a('0x8')][_0x4862e6[_0xa80a('0x20')]][_0x1b0955][_0xa80a('0x3b')]=!![];this[_0xa80a('0x8')][_0x4862e6[_0xa80a('0x20')]][_0x1b0955][_0xa80a('0x3c')]=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');this[_0xa80a('0x8')][_0x4862e6['uniqueid']][_0x1b0955][_0xa80a('0x3d')]=_0xa80a('0x47');this[_0xa80a('0x8')][_0x4862e6[_0xa80a('0x20')]][_0x1b0955][_0xa80a('0x30')]=_0xa80a('0x47');ami['emit']('custom:agentqueuecallerabandon',this[_0xa80a('0x8')][_0x4862e6[_0xa80a('0x20')]][_0x1b0955]);}}}}}catch(_0x4778ab){logger[_0xa80a('0x2c')](_0xa80a('0x48'),util['inspect'](_0x4778ab,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0xa80a('0x49')]=function(_0x48aedb){try{if(this['isNotNull'](_0x48aedb)){if(this['channels'][_0x48aedb['uniqueid']]){for(var _0xe10863 in this[_0xa80a('0x8')][_0x48aedb[_0xa80a('0x20')]]){if(this[_0xa80a('0x8')][_0x48aedb[_0xa80a('0x20')]][_0xa80a('0x2e')](_0xe10863)){if(this[_0xa80a('0x8')][_0x48aedb[_0xa80a('0x20')]][_0xe10863][_0xa80a('0x2f')]&&!this[_0xa80a('0x8')][_0x48aedb[_0xa80a('0x20')]][_0xe10863]['agentcomplete']){this[_0xa80a('0x8')][_0x48aedb[_0xa80a('0x20')]][_0xe10863][_0xa80a('0x12')]=!![];this[_0xa80a('0x8')][_0x48aedb[_0xa80a('0x20')]][_0xe10863][_0xa80a('0x4a')]=moment()[_0xa80a('0x2a')](_0xa80a('0x22'));this[_0xa80a('0x8')][_0x48aedb['uniqueid']][_0xe10863][_0xa80a('0x30')]=_0xa80a('0x4b');this[_0xa80a('0x8')][_0x48aedb['uniqueid']][_0xe10863]['talktime']=_0x48aedb[_0xa80a('0x4c')];this[_0xa80a('0x8')][_0x48aedb[_0xa80a('0x20')]][_0xe10863][_0xa80a('0x3d')]=_0x48aedb[_0xa80a('0x3d')]==_0xa80a('0x4d')?'agent':_0x48aedb['reason'];if(this[_0xa80a('0x9')][_0x48aedb[_0xa80a('0x24')]]&&this['voiceQueues'][_0x48aedb[_0xa80a('0x24')]][_0xa80a('0x4e')]){this[_0xa80a('0x8')][_0x48aedb[_0xa80a('0x20')]][_0xe10863][_0xa80a('0x4f')]=!![];this[_0xa80a('0x8')][_0x48aedb['uniqueid']][_0xe10863]['acwtime']=this[_0xa80a('0x9')][_0x48aedb[_0xa80a('0x24')]][_0xa80a('0x50')];}this[_0xa80a('0x35')][_0x48aedb[_0xa80a('0x36')]]=_['omit'](this[_0xa80a('0x35')][_0x48aedb[_0xa80a('0x36')]],[_0xa80a('0x24'),_0xa80a('0x37')]);this[_0xa80a('0x1d')](util[_0xa80a('0x2a')](_0xa80a('0x38'),_0x48aedb['membername']),'user:agentcomplete',this[_0xa80a('0x8')][_0x48aedb[_0xa80a('0x20')]][_0xe10863]);ami['emit'](_0xa80a('0x51'),this[_0xa80a('0x8')][_0x48aedb['uniqueid']][_0xe10863]);}}}}}}catch(_0x1c8ce1){logger[_0xa80a('0x2c')]('[syncAgentComplete][VoiceAgentReport]',util['inspect'](_0x1c8ce1,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0xa80a('0x14')]=function(_0x4d262b){try{if(this[_0xa80a('0x1e')](_0x4d262b)){this[_0xa80a('0x52')](_0x4d262b[_0xa80a('0x20')],_[_0xa80a('0x53')](_0x4d262b[_0xa80a('0x54')])[0x0],_0x4d262b['value']);if(this[_0xa80a('0x8')][_0x4d262b[_0xa80a('0x20')]]){for(var _0xfba42 in this[_0xa80a('0x8')][_0x4d262b[_0xa80a('0x20')]]){if(this[_0xa80a('0x8')][_0x4d262b['uniqueid']][_0xa80a('0x2e')](_0xfba42)){if(_[_0xa80a('0x1f')](this[_0xa80a('0x8')][_0x4d262b[_0xa80a('0x20')]][_0xfba42][_0xa80a('0xa')])){this['channels'][_0x4d262b[_0xa80a('0x20')]][_0xfba42]['variables']={};}this[_0xa80a('0x8')][_0x4d262b['uniqueid']][_0xfba42][_0xa80a('0xa')]=this[_0xa80a('0xa')][_0x4d262b[_0xa80a('0x20')]];}}}}}catch(_0x86779b){logger[_0xa80a('0x2c')](_0xa80a('0x55'),util[_0xa80a('0x2d')](_0x86779b,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa80a('0x1c')][_0xa80a('0x52')]=function(_0x2d399a,_0x32f025,_0x413b41){var _0x12714b=[_0xa80a('0x56'),_0xa80a('0x57'),_0xa80a('0x58'),_0xa80a('0x59'),_0xa80a('0x5a'),'rtpaudioqoslossbridged',_0xa80a('0x5b'),_0xa80a('0x5c'),'sipcallid','sipuri',_0xa80a('0x5d'),_0xa80a('0x5e'),_0xa80a('0x5f'),_0xa80a('0x60'),_0xa80a('0x61'),'memberlastcall',_0xa80a('0x39'),'memberpenalty',_0xa80a('0x62')];if(!_[_0xa80a('0x63')](_0x32f025)&&!_[_0xa80a('0x64')](_0x12714b,_0x32f025)){if(_[_0xa80a('0x1f')](this[_0xa80a('0xa')][_0x2d399a])){this['variables'][_0x2d399a]={};}this[_0xa80a('0xa')][_0x2d399a][_0x32f025]=_0x413b41;}};VoiceAgentReport[_0xa80a('0x1c')][_0xa80a('0x65')]=function(_0x2a00f8){try{if(this['isNotNull'](_0x2a00f8)){if(this[_0xa80a('0x8')][_0x2a00f8[_0xa80a('0x20')]]){for(var _0x225066 in this[_0xa80a('0x8')][_0x2a00f8[_0xa80a('0x20')]]){if(this['channels'][_0x2a00f8[_0xa80a('0x20')]][_0xa80a('0x2e')](_0x225066)){if(this['channels'][_0x2a00f8[_0xa80a('0x20')]][_0x225066]['reason']==_0xa80a('0x4d')&&this['channels'][_0x2a00f8['uniqueid']][_0x225066][_0xa80a('0x12')]){this[_0xa80a('0x8')][_0x2a00f8[_0xa80a('0x20')]][_0x225066]['agentcompleteAt']=moment()[_0xa80a('0x2a')](_0xa80a('0x22'));}}}ami['emit']('custom:voiceAgentReport',_['values'](this[_0xa80a('0x8')][_0x2a00f8[_0xa80a('0x20')]]));delete this[_0xa80a('0x8')][_0x2a00f8['uniqueid']];}if(this[_0xa80a('0xa')][_0x2a00f8['uniqueid']]){delete this[_0xa80a('0xa')][_0x2a00f8[_0xa80a('0x20')]];}}}catch(_0x36cdcc){logger[_0xa80a('0x2c')](_0xa80a('0x66'),util[_0xa80a('0x2d')](_0x36cdcc,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0xa80a('0x19')]=function(_0x1caa9d){try{if(this[_0xa80a('0x1e')](_0x1caa9d)){if(this[_0xa80a('0x8')][_0x1caa9d['transfereeuniqueid']]){for(var _0x2de6cd in this[_0xa80a('0x8')][_0x1caa9d[_0xa80a('0x67')]]){if(this[_0xa80a('0x8')][_0x1caa9d[_0xa80a('0x67')]][_0xa80a('0x2e')](_0x2de6cd)){if(_0x1caa9d[_0xa80a('0x68')]===_0x2de6cd){var _0x3f0301=moment();this['channels'][_0x1caa9d[_0xa80a('0x67')]][_0x2de6cd][_0xa80a('0x12')]=!![];this[_0xa80a('0x8')][_0x1caa9d[_0xa80a('0x67')]][_0x2de6cd][_0xa80a('0x4a')]=moment()[_0xa80a('0x2a')](_0xa80a('0x22'));this[_0xa80a('0x8')][_0x1caa9d['transfereeuniqueid']][_0x2de6cd]['reason']=_0xa80a('0x4d');this[_0xa80a('0x8')][_0x1caa9d[_0xa80a('0x67')]][_0x2de6cd][_0xa80a('0x30')]='complete';this['channels'][_0x1caa9d['transfereeuniqueid']][_0x2de6cd][_0xa80a('0x4c')]=_0x3f0301[_0xa80a('0x69')](this[_0xa80a('0x8')][_0x1caa9d[_0xa80a('0x67')]][_0x2de6cd][_0xa80a('0x2f')],_0xa80a('0x6a'));}}}}if(this[_0xa80a('0x8')][_0x1caa9d[_0xa80a('0x6b')]]){var _0x5f39d0=this['channels'][_0x1caa9d[_0xa80a('0x6b')]];this[_0xa80a('0x8')][_0x1caa9d[_0xa80a('0x6b')]]=this[_0xa80a('0x8')][_0x1caa9d['transfereeuniqueid']];this[_0xa80a('0x8')][_0x1caa9d[_0xa80a('0x67')]]=_0x5f39d0;}}}catch(_0x52306c){logger[_0xa80a('0x2c')]('[syncAttendedTransfer][VoiceAgentReport]',util[_0xa80a('0x2d')](_0x52306c,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa80a('0x1c')][_0xa80a('0x1b')]=function(_0x5a3253){try{if(this[_0xa80a('0x1e')](_0x5a3253)){if(this[_0xa80a('0x8')][_0x5a3253['transfereeuniqueid']]){for(var _0xb8e516 in this[_0xa80a('0x8')][_0x5a3253[_0xa80a('0x67')]]){if(this[_0xa80a('0x8')][_0x5a3253[_0xa80a('0x67')]][_0xa80a('0x2e')](_0xb8e516)){if(_0x5a3253[_0xa80a('0x6c')]===_0xb8e516){var _0x904c40=moment();this[_0xa80a('0x8')][_0x5a3253['transfereeuniqueid']][_0xb8e516][_0xa80a('0x12')]=!![];this[_0xa80a('0x8')][_0x5a3253['transfereeuniqueid']][_0xb8e516][_0xa80a('0x4a')]=_0x904c40;this[_0xa80a('0x8')][_0x5a3253['transfereeuniqueid']][_0xb8e516][_0xa80a('0x3d')]=_0xa80a('0x4d');this[_0xa80a('0x8')][_0x5a3253['transfereeuniqueid']][_0xb8e516][_0xa80a('0x30')]=_0xa80a('0x4b');this[_0xa80a('0x8')][_0x5a3253[_0xa80a('0x67')]][_0xb8e516][_0xa80a('0x4c')]=_0x904c40[_0xa80a('0x69')](this[_0xa80a('0x8')][_0x5a3253[_0xa80a('0x67')]][_0xb8e516][_0xa80a('0x2f')],_0xa80a('0x6a'));}}}}}}catch(_0x1f189b){logger[_0xa80a('0x2c')](_0xa80a('0x6d'),util['inspect'](_0x1f189b,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa80a('0x1c')][_0xa80a('0x6e')]=function(_0x21b6ce){var _0x40fa2a='';try{if(this[_0xa80a('0x1e')](_0x21b6ce)){if(_0x21b6ce[_0xa80a('0x6f')]){_0x40fa2a=_0x21b6ce[_0xa80a('0x6f')][_0xa80a('0x70')](0x0,_0x21b6ce[_0xa80a('0x6f')][_0xa80a('0x71')]('-'));if(this[_0xa80a('0x35')][_0x40fa2a]){this[_0xa80a('0x35')][_0x40fa2a][_0xa80a('0x72')]=!![];}}}}catch(_0x5aaeac){logger[_0xa80a('0x2c')](_0xa80a('0x73'),util[_0xa80a('0x2d')](_0x5aaeac,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xa80a('0x1c')][_0xa80a('0x18')]=function(_0x48d9aa){var _0x46d337='';try{if(this[_0xa80a('0x1e')](_0x48d9aa)){if(_0x48d9aa['channel']){_0x46d337=_0x48d9aa[_0xa80a('0x6f')]['substring'](0x0,_0x48d9aa[_0xa80a('0x6f')][_0xa80a('0x71')]('-'));if(this[_0xa80a('0x35')][_0x46d337]){this[_0xa80a('0x35')][_0x46d337][_0xa80a('0x72')]=![];}}}}catch(_0x48a361){logger[_0xa80a('0x2c')]('[syncMusicOnHoldStop][VoiceAgentReport]',util['inspect'](_0x48a361,{'showHidden':![],'depth':null}));}};module[_0xa80a('0x74')]=VoiceAgentReport;
\ No newline at end of file
index 5375092..972858c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x706c=['not_inuse','inuse','busy','invalid','unavailable','ringing','ringinuse','onhold','set','agi','dial','playback','voicemail','NO\x20ANSWER','FAILED','ANSWERED','BUSY','redis','defaults','localhost','socket.io-emitter','channels','agents','coreshowchannel','syncNewExten','bind','newexten','newchannel','newstate','syncNewState','varset','syncVarSet','syncNewCallerId','attendedtransfer','syncAttendedTransfer','blindtransfer','musiconholdstart','syncMusicOnHoldStart','musiconholdstop','resolve','then','actionCoreShowChannels','catch','prototype','isNotNull','isUndefined','uniqueid','merge','keys','error','[syncNewCallerId][VoiceCallReport]','inspect','syncNewChannel','linkedid','channel','OutgoingSpoolFailed','starttime','format','disposition','toNumber','channelstate','context','from-sip','split','destconnectedlinenum','exten','emit','user:%s','name','user:agentconnect','accountcode','[syncNewChannel][VoiceCallReport]','application','toLowerCase','applicationdata','appdata','subtract','duration','seconds','YYYY-MM-DD\x20HH:mm:ss','pick','lastapplication','lastdata','startsWith','cdr(','match','queue','[syncNewExten][VoiceCallReport]','answered','diff','xcally-motion-preview','connectedlinename','calleridname','destinationchannel','UserId','membername','[syncNewState][VoiceCallReport]','syncMixMonitorFilename','monitor','endsWith','.wav49','replace','monitorFilename','find','monitors','push','rec','variable','value','calleridnum','xmd-callerid','callerid','type','xmd-queue','xmd-originatecalleridnum','originatecalleridnum','xmd-destination','destination','xmd-callerid-preview','calleridpreview','xmcs-queue','sipcallid','sipcalluniqueid','mixmonitor_filename','parse','[syncVarSet][VoiceCallReport]','syncHangup','billableseconds','answertime','omit','[syncHangup][VoiceCallReport]','transfercalleridnum','origtransferercalleridnum','transfereeuniqueid','transferconnectedlinenum','transfertargetcalleridnum','secondtransfereruniqueid','transfertargetuniqueid','origtransfereruniqueid','[syncAttendedTransfer][VoiceCallReport]','syncBlindTransfer','BlindTransfer','[syncBlindTransfer][VoiceCallReport]','mohstarttime','[syncMusicOnHoldStart][VoiceCallReport]','syncMusicOnHoldStop','mohtime','milliseconds','[syncMusicOnHoldStop][VoiceCallReport]','exports','bluebird','moment','util','ioredis','../../../config/logger','ami','../model/channel','unknown'];(function(_0x27c335,_0x740a6){var _0x18ed37=function(_0x46e250){while(--_0x46e250){_0x27c335['push'](_0x27c335['shift']());}};_0x18ed37(++_0x740a6);}(_0x706c,0x1d2));var _0xc706=function(_0x525d78,_0x14175d){_0x525d78=_0x525d78-0x0;var _0x4c203d=_0x706c[_0x525d78];return _0x4c203d;};'use strict';var BPromise=require(_0xc706('0x0'));var _=require('lodash');var moment=require(_0xc706('0x1'));var util=require(_0xc706('0x2'));var path=require('path');var Redis=require(_0xc706('0x3'));var config=require('../../../config/environment');var logger=require(_0xc706('0x4'))(_0xc706('0x5'));var ami=require('../ami');var Channel=require(_0xc706('0x6'));var statusDesc=[_0xc706('0x7'),_0xc706('0x8'),_0xc706('0x9'),_0xc706('0xa'),_0xc706('0xb'),_0xc706('0xc'),_0xc706('0xd'),_0xc706('0xe'),_0xc706('0xf')];var applications=[_0xc706('0x10'),'queue',_0xc706('0x11'),_0xc706('0x12'),_0xc706('0x13'),_0xc706('0x14')];var dispositions=[_0xc706('0x15'),_0xc706('0x16'),_0xc706('0x16'),_0xc706('0x15'),_0xc706('0x15'),_0xc706('0x15'),_0xc706('0x17'),_0xc706('0x18'),'FAILED',_0xc706('0x16'),_0xc706('0x16')];var actions={};config[_0xc706('0x19')]=_[_0xc706('0x1a')](config[_0xc706('0x19')],{'host':_0xc706('0x1b'),'port':0x18eb});var io=require(_0xc706('0x1c'))(new Redis(config[_0xc706('0x19')]));function VoiceCallReport(_0x5ef17a){this['channels']=_0x5ef17a[_0xc706('0x1d')];this[_0xc706('0x1e')]=_0x5ef17a[_0xc706('0x1e')];ami['on'](_0xc706('0x1f'),this[_0xc706('0x20')][_0xc706('0x21')](this));ami['on'](_0xc706('0x22'),this['syncNewExten'][_0xc706('0x21')](this));ami['on'](_0xc706('0x23'),this['syncNewChannel'][_0xc706('0x21')](this));ami['on'](_0xc706('0x24'),this[_0xc706('0x25')][_0xc706('0x21')](this));ami['on'](_0xc706('0x26'),this[_0xc706('0x27')][_0xc706('0x21')](this));ami['on']('hangup',this['syncHangup'][_0xc706('0x21')](this));ami['on']('newcallerid',this[_0xc706('0x28')][_0xc706('0x21')](this));ami['on'](_0xc706('0x29'),this[_0xc706('0x2a')]['bind'](this));ami['on'](_0xc706('0x2b'),this['syncBlindTransfer']['bind'](this));ami['on'](_0xc706('0x2c'),this[_0xc706('0x2d')][_0xc706('0x21')](this));ami['on'](_0xc706('0x2e'),this['syncMusicOnHoldStop']['bind'](this));return BPromise[_0xc706('0x2f')]()[_0xc706('0x30')](ami[_0xc706('0x31')]())[_0xc706('0x32')](function(_0x4e8e41){console['log'](_0x4e8e41);});}VoiceCallReport[_0xc706('0x33')][_0xc706('0x34')]=function(_0x5447c3){return _0x5447c3!==null&&!_[_0xc706('0x35')](_0x5447c3);};VoiceCallReport[_0xc706('0x33')]['emit']=function(_0x3badce,_0x2a28e9,_0x2dbea9){io['to'](_0x3badce)['emit'](_0x2a28e9,_0x2dbea9);};VoiceCallReport[_0xc706('0x33')][_0xc706('0x28')]=function(_0x186c46){try{if(this[_0xc706('0x34')](_0x186c46)){if(_0x186c46[_0xc706('0x36')]===_0x186c46['linkedid']){if(!_[_0xc706('0x35')](this[_0xc706('0x1d')][_0x186c46[_0xc706('0x36')]])){_[_0xc706('0x37')](this['channels'][_0x186c46[_0xc706('0x36')]],_['pick'](_0x186c46,_[_0xc706('0x38')](this['channels'][_0x186c46[_0xc706('0x36')]])));}}}}catch(_0x6d20f8){logger[_0xc706('0x39')](_0xc706('0x3a'),util[_0xc706('0x3b')](_0x6d20f8,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xc706('0x33')][_0xc706('0x3c')]=function(_0x437ba0){try{if(this['isNotNull'](_0x437ba0)){if(_0x437ba0[_0xc706('0x36')]===_0x437ba0[_0xc706('0x3d')]&&_0x437ba0[_0xc706('0x3e')]!=_0xc706('0x3f')){if(_[_0xc706('0x35')](this[_0xc706('0x1d')][_0x437ba0[_0xc706('0x36')]])){this['channels'][_0x437ba0[_0xc706('0x36')]]=new Channel();this['channels'][_0x437ba0[_0xc706('0x36')]][_0xc706('0x40')]=moment()[_0xc706('0x41')]('YYYY-MM-DD\x20HH:mm:ss');this['channels'][_0x437ba0[_0xc706('0x36')]][_0xc706('0x42')]=dispositions[_[_0xc706('0x43')](_0x437ba0[_0xc706('0x44')])];_[_0xc706('0x37')](this[_0xc706('0x1d')][_0x437ba0['uniqueid']],_['pick'](_0x437ba0,_[_0xc706('0x38')](this[_0xc706('0x1d')][_0x437ba0[_0xc706('0x36')]])));if(_0x437ba0[_0xc706('0x45')]===_0xc706('0x46')){if(this['agents'][_0x437ba0[_0xc706('0x3e')][_0xc706('0x47')]('-')[0x0]]){this[_0xc706('0x1e')][_0x437ba0['channel'][_0xc706('0x47')]('-')[0x0]][_0xc706('0x48')]=_0x437ba0[_0xc706('0x49')];this[_0xc706('0x4a')](util['format'](_0xc706('0x4b'),this[_0xc706('0x1e')][_0x437ba0[_0xc706('0x3e')][_0xc706('0x47')]('-')[0x0]][_0xc706('0x4c')]),_0xc706('0x4d'),{'destaccountcode':this[_0xc706('0x1e')][_0x437ba0[_0xc706('0x3e')]['split']('-')[0x0]][_0xc706('0x4e')],'destconnectedlinenum':_0x437ba0[_0xc706('0x49')]});}}}}}}catch(_0x569d4b){logger[_0xc706('0x39')](_0xc706('0x4f'),util['inspect'](_0x569d4b,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xc706('0x33')][_0xc706('0x20')]=function(_0x30683c){try{if(this[_0xc706('0x34')](_0x30683c)){if(_0x30683c[_0xc706('0x36')]===_0x30683c[_0xc706('0x3d')]&&_0x30683c[_0xc706('0x49')]!='h'&&_0x30683c[_0xc706('0x3e')]!=_0xc706('0x3f')){_0x30683c['application']=_0x30683c[_0xc706('0x50')][_0xc706('0x51')]();_0x30683c[_0xc706('0x52')]=(_0x30683c[_0xc706('0x53')]||_0x30683c[_0xc706('0x52')])['toLowerCase']();if(_[_0xc706('0x35')](this[_0xc706('0x1d')][_0x30683c[_0xc706('0x36')]])){this[_0xc706('0x1d')][_0x30683c[_0xc706('0x36')]]=new Channel();this[_0xc706('0x1d')][_0x30683c['uniqueid']]['starttime']=_0x30683c['duration']?moment()[_0xc706('0x54')](moment[_0xc706('0x55')](_0x30683c['duration'])[_0xc706('0x56')](),'seconds')['format'](_0xc706('0x57')):moment()[_0xc706('0x41')](_0xc706('0x57'));this[_0xc706('0x1d')][_0x30683c[_0xc706('0x36')]][_0xc706('0x42')]='NO\x20ANSWER';}_[_0xc706('0x37')](this[_0xc706('0x1d')][_0x30683c[_0xc706('0x36')]],_[_0xc706('0x58')](_0x30683c,_[_0xc706('0x38')](this['channels'][_0x30683c[_0xc706('0x36')]])));if(_['includes'](applications,_0x30683c[_0xc706('0x50')])){this[_0xc706('0x1d')][_0x30683c['uniqueid']][_0xc706('0x59')]=_0x30683c['application'];this[_0xc706('0x1d')][_0x30683c[_0xc706('0x36')]][_0xc706('0x5a')]=_0x30683c['applicationdata'];if(_0x30683c['application']===_0xc706('0x10')&&_[_0xc706('0x5b')](_0x30683c[_0xc706('0x52')],_0xc706('0x5c'))){var _0x4ad521=_0x30683c['applicationdata']['split']('=');var _0x1706a2=_0x4ad521[0x0][_0xc706('0x5d')](/cdr\((.*)\)/);if(_0x1706a2){this['channels'][_0x30683c[_0xc706('0x36')]][_0x1706a2[0x1]]=_0x4ad521[0x1];}}else if(_0x30683c[_0xc706('0x50')]===_0xc706('0x5e')){this[_0xc706('0x1d')][_0x30683c[_0xc706('0x36')]]['queue']=_0x30683c[_0xc706('0x52')][_0xc706('0x47')](',')[0x0];}}}}}catch(_0x422c9a){logger[_0xc706('0x39')](_0xc706('0x5f'),util[_0xc706('0x3b')](_0x422c9a,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xc706('0x33')]['syncNewState']=function(_0x1d7bf7){try{if(this[_0xc706('0x34')](_0x1d7bf7)){if(_0x1d7bf7[_0xc706('0x36')]!==_0x1d7bf7['linkedid']){if(this[_0xc706('0x1d')][_0x1d7bf7[_0xc706('0x3d')]]){if(_0x1d7bf7[_0xc706('0x44')]==='6'){if(!this[_0xc706('0x1d')][_0x1d7bf7[_0xc706('0x3d')]][_0xc706('0x60')]){var _0x387e6a=moment();this[_0xc706('0x1d')][_0x1d7bf7['linkedid']][_0xc706('0x60')]=!![];this[_0xc706('0x1d')][_0x1d7bf7[_0xc706('0x3d')]]['answertime']=_0x387e6a[_0xc706('0x41')](_0xc706('0x57'));if(this[_0xc706('0x1d')][_0x1d7bf7['linkedid']][_0xc706('0x40')]){this[_0xc706('0x1d')][_0x1d7bf7[_0xc706('0x3d')]]['holdtime']=_0x387e6a[_0xc706('0x61')](this[_0xc706('0x1d')][_0x1d7bf7[_0xc706('0x3d')]][_0xc706('0x40')],_0xc706('0x56'));}}this[_0xc706('0x1d')][_0x1d7bf7[_0xc706('0x3d')]][_0xc706('0x3d')]=_0x1d7bf7[_0xc706('0x36')];if(_0x1d7bf7['calleridnum']!==_0xc706('0x62')){this['channels'][_0x1d7bf7[_0xc706('0x3d')]]['connectedlinenum']=_0x1d7bf7['calleridnum'];}this[_0xc706('0x1d')][_0x1d7bf7[_0xc706('0x3d')]][_0xc706('0x63')]=_0x1d7bf7[_0xc706('0x64')];this[_0xc706('0x1d')][_0x1d7bf7[_0xc706('0x3d')]][_0xc706('0x65')]=_0x1d7bf7[_0xc706('0x3e')];this[_0xc706('0x1d')][_0x1d7bf7['linkedid']][_0xc706('0x42')]=dispositions[_[_0xc706('0x43')](_0x1d7bf7[_0xc706('0x44')])];if(this[_0xc706('0x1e')][_0x1d7bf7[_0xc706('0x3e')]['split']('-')[0x0]]){this[_0xc706('0x1d')][_0x1d7bf7['linkedid']][_0xc706('0x66')]=this[_0xc706('0x1e')][_0x1d7bf7[_0xc706('0x3e')]['split']('-')[0x0]]['id'];this[_0xc706('0x1d')][_0x1d7bf7[_0xc706('0x3d')]]['membername']=this[_0xc706('0x1e')][_0x1d7bf7[_0xc706('0x3e')][_0xc706('0x47')]('-')[0x0]][_0xc706('0x4c')];}}}}else{if(this[_0xc706('0x1d')][_0x1d7bf7['uniqueid']]){if(_0x1d7bf7['channelstate']==='6'){if(this[_0xc706('0x1e')][_0x1d7bf7[_0xc706('0x3e')]['split']('-')[0x0]]){this[_0xc706('0x1d')][_0x1d7bf7[_0xc706('0x36')]]['UserId']=this['agents'][_0x1d7bf7[_0xc706('0x3e')]['split']('-')[0x0]]['id'];this[_0xc706('0x1d')][_0x1d7bf7[_0xc706('0x36')]][_0xc706('0x67')]=this[_0xc706('0x1e')][_0x1d7bf7[_0xc706('0x3e')][_0xc706('0x47')]('-')[0x0]][_0xc706('0x4c')];}}}}}}catch(_0x58327f){logger[_0xc706('0x39')](_0xc706('0x68'),util['inspect'](_0x58327f,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xc706('0x33')][_0xc706('0x69')]=function(_0x413e02,_0x1ce3f3){if(this[_0xc706('0x1d')][_0x413e02]){this['channels'][_0x413e02][_0xc706('0x6a')]=!![];if(_[_0xc706('0x6b')](_0x1ce3f3,_0xc706('0x6c'))){_0x1ce3f3=_0x1ce3f3[_0xc706('0x6d')]('.wav49','.WAV');}this['channels'][_0x413e02][_0xc706('0x6e')]=_0x1ce3f3;var _0x3cbe88=_[_0xc706('0x6f')](this[_0xc706('0x1d')][_0x413e02][_0xc706('0x70')],{'filename':_0x1ce3f3});if(_['isNil'](_0x3cbe88)){this[_0xc706('0x1d')][_0x413e02][_0xc706('0x70')][_0xc706('0x71')]({'filename':_0x1ce3f3,'createdAt':moment()['format'](_0xc706('0x57')),'mixmonitorid':'','status':_0xc706('0x72')});}}};VoiceCallReport[_0xc706('0x33')][_0xc706('0x27')]=function(_0x41fa78){try{if(this[_0xc706('0x34')](_0x41fa78)){if(this['channels'][_0x41fa78[_0xc706('0x36')]]&&_0x41fa78[_0xc706('0x3e')]!=_0xc706('0x3f')){if(this['isNotNull'](_0x41fa78[_0xc706('0x73')])){if(this[_0xc706('0x34')](_0x41fa78[_0xc706('0x73')]['mixmonitor_filename'])){this[_0xc706('0x69')](_0x41fa78[_0xc706('0x36')],_0x41fa78[_0xc706('0x74')]);}else if(this[_0xc706('0x34')](_0x41fa78[_0xc706('0x73')]['xmd-phone'])){this[_0xc706('0x1d')][_0x41fa78[_0xc706('0x36')]][_0xc706('0x75')]=_0x41fa78[_0xc706('0x74')];}else if(this[_0xc706('0x34')](_0x41fa78[_0xc706('0x73')][_0xc706('0x76')])){this[_0xc706('0x1d')][_0x41fa78[_0xc706('0x36')]][_0xc706('0x77')]=_0x41fa78[_0xc706('0x74')];}else if(this['isNotNull'](_0x41fa78['variable']['xmd-cdrtype'])){this[_0xc706('0x1d')][_0x41fa78[_0xc706('0x36')]][_0xc706('0x78')]=_0x41fa78[_0xc706('0x74')];}else if(this[_0xc706('0x34')](_0x41fa78[_0xc706('0x73')][_0xc706('0x79')])){this[_0xc706('0x1d')][_0x41fa78['uniqueid']]['queue']=_0x41fa78['value'][_0xc706('0x47')](',')[0x0];}else if(this[_0xc706('0x34')](_0x41fa78['variable'][_0xc706('0x7a')])){this['channels'][_0x41fa78[_0xc706('0x36')]][_0xc706('0x7b')]=_0x41fa78[_0xc706('0x74')];}else if(this['isNotNull'](_0x41fa78[_0xc706('0x73')][_0xc706('0x7c')])){this[_0xc706('0x1d')][_0x41fa78[_0xc706('0x36')]][_0xc706('0x7d')]=_0x41fa78[_0xc706('0x74')];}else if(this[_0xc706('0x34')](_0x41fa78['variable'][_0xc706('0x7e')])){this[_0xc706('0x1d')][_0x41fa78[_0xc706('0x36')]][_0xc706('0x7f')]=_0x41fa78[_0xc706('0x74')];}else if(this[_0xc706('0x34')](_0x41fa78[_0xc706('0x73')][_0xc706('0x80')])){this[_0xc706('0x1d')][_0x41fa78['uniqueid']][_0xc706('0x5e')]=_0x41fa78[_0xc706('0x74')];}else if(this['isNotNull'](_0x41fa78[_0xc706('0x73')][_0xc706('0x81')])){this[_0xc706('0x1d')][_0x41fa78['uniqueid']][_0xc706('0x82')]=_0x41fa78[_0xc706('0x74')];}}}else if(this['isNotNull'](_0x41fa78[_0xc706('0x73')][_0xc706('0x83')])){if(_0x41fa78[_0xc706('0x74')]){var _0x184b47=path[_0xc706('0x84')](_0x41fa78[_0xc706('0x74')])[_0xc706('0x4c')];this[_0xc706('0x69')](_0x184b47,_0x41fa78['value']);}}else if(this[_0xc706('0x1d')][_0x41fa78[_0xc706('0x3d')]]){if(this[_0xc706('0x34')](_0x41fa78[_0xc706('0x73')])){if(this['isNotNull'](_0x41fa78[_0xc706('0x73')][_0xc706('0x81')])){this[_0xc706('0x1d')][_0x41fa78[_0xc706('0x3d')]]['sipcalllinkedid']=_0x41fa78['value'];}}}}}catch(_0x39f240){logger[_0xc706('0x39')](_0xc706('0x85'),util[_0xc706('0x3b')](_0x39f240,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xc706('0x33')][_0xc706('0x86')]=function(_0x7eb5f){try{if(this['isNotNull'](_0x7eb5f)){if(this[_0xc706('0x1d')][_0x7eb5f['uniqueid']]){var _0x4d91ae=moment();this['channels'][_0x7eb5f[_0xc706('0x36')]]['endtime']=_0x4d91ae[_0xc706('0x41')](_0xc706('0x57'));this[_0xc706('0x1d')][_0x7eb5f[_0xc706('0x36')]]['duration']=_0x4d91ae[_0xc706('0x61')](this['channels'][_0x7eb5f[_0xc706('0x36')]]['starttime'],_0xc706('0x56'));if(this[_0xc706('0x1d')][_0x7eb5f['uniqueid']][_0xc706('0x60')]){this[_0xc706('0x1d')][_0x7eb5f[_0xc706('0x36')]][_0xc706('0x87')]=_0x4d91ae[_0xc706('0x61')](this[_0xc706('0x1d')][_0x7eb5f[_0xc706('0x36')]][_0xc706('0x88')],_0xc706('0x56'));this[_0xc706('0x1d')][_0x7eb5f[_0xc706('0x36')]]['holdtime']=this[_0xc706('0x1d')][_0x7eb5f[_0xc706('0x36')]][_0xc706('0x55')]-this['channels'][_0x7eb5f[_0xc706('0x36')]][_0xc706('0x87')];}if(_0x7eb5f[_0xc706('0x45')]===_0xc706('0x46')){if(this[_0xc706('0x1e')][_0x7eb5f[_0xc706('0x3e')][_0xc706('0x47')]('-')[0x0]]){this[_0xc706('0x1e')][_0x7eb5f[_0xc706('0x3e')][_0xc706('0x47')]('-')[0x0]]=_[_0xc706('0x89')](this['agents'][_0x7eb5f[_0xc706('0x3e')][_0xc706('0x47')]('-')[0x0]],['destconnectedlinenum']);this[_0xc706('0x4a')](util[_0xc706('0x41')](_0xc706('0x4b'),this[_0xc706('0x1e')][_0x7eb5f[_0xc706('0x3e')][_0xc706('0x47')]('-')[0x0]][_0xc706('0x4c')]),'user:agentcomplete',{'destaccountcode':this[_0xc706('0x1e')][_0x7eb5f['channel'][_0xc706('0x47')]('-')[0x0]][_0xc706('0x4e')]});}}ami[_0xc706('0x4a')]('custom:voiceCallReport',this['channels'][_0x7eb5f[_0xc706('0x36')]]);delete this[_0xc706('0x1d')][_0x7eb5f[_0xc706('0x36')]];}}}catch(_0x5ef3e6){logger[_0xc706('0x39')](_0xc706('0x8a'),util[_0xc706('0x3b')](_0x5ef3e6,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xc706('0x33')][_0xc706('0x2a')]=function(_0x3931e4){try{if(this['isNotNull'](_0x3931e4)){if(this['channels'][_0x3931e4['transfereeuniqueid']]){this[_0xc706('0x1d')][_0x3931e4['transfereeuniqueid']][_0xc706('0x8b')]=_0x3931e4[_0xc706('0x8c')];this[_0xc706('0x1d')][_0x3931e4[_0xc706('0x8d')]][_0xc706('0x8e')]=_0x3931e4[_0xc706('0x8f')];if(this['channels'][_0x3931e4['secondtransfereruniqueid']]){var _0x48b477=this[_0xc706('0x1d')][_0x3931e4[_0xc706('0x90')]];this['channels'][_0x3931e4['secondtransfereruniqueid']]=this[_0xc706('0x1d')][_0x3931e4[_0xc706('0x8d')]];this[_0xc706('0x1d')][_0x3931e4['transfereeuniqueid']]=_0x48b477;}}else if(this['channels'][_0x3931e4['transfertargetuniqueid']]){this[_0xc706('0x1d')][_0x3931e4[_0xc706('0x91')]][_0xc706('0x8b')]=_0x3931e4[_0xc706('0x8c')];this[_0xc706('0x1d')][_0x3931e4[_0xc706('0x91')]][_0xc706('0x8e')]=_0x3931e4[_0xc706('0x8f')];if(this[_0xc706('0x1d')][_0x3931e4[_0xc706('0x92')]]){var _0x48b477=this[_0xc706('0x1d')][_0x3931e4[_0xc706('0x92')]];this[_0xc706('0x1d')][_0x3931e4['origtransfereruniqueid']]=this['channels'][_0x3931e4['transfertargetuniqueid']];this['channels'][_0x3931e4[_0xc706('0x91')]]=_0x48b477;}}}}catch(_0x1f3d23){logger[_0xc706('0x39')](_0xc706('0x93'),util[_0xc706('0x3b')](_0x1f3d23,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xc706('0x33')][_0xc706('0x94')]=function(_0x1e811b){try{if(this[_0xc706('0x34')](_0x1e811b)){if(this[_0xc706('0x1d')][_0x1e811b[_0xc706('0x8d')]]){this['channels'][_0x1e811b['transfereeuniqueid']][_0xc706('0x8b')]=_0x1e811b['transfereecalleridnum'];this[_0xc706('0x1d')][_0x1e811b[_0xc706('0x8d')]][_0xc706('0x8e')]=_0x1e811b['extension'];this[_0xc706('0x86')]({'event':_0xc706('0x95'),'uniqueid':_0x1e811b['transfereeuniqueid'],'context':_0x1e811b['context'],'channel':_0x1e811b['transfererchannel']});}}}catch(_0x8171da){logger[_0xc706('0x39')](_0xc706('0x96'),util[_0xc706('0x3b')](_0x8171da,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xc706('0x33')][_0xc706('0x2d')]=function(_0xbf1973){try{if(this[_0xc706('0x34')](_0xbf1973)){if(this['channels'][_0xbf1973[_0xc706('0x36')]]){if(!_['isNil'](this[_0xc706('0x1d')][_0xbf1973[_0xc706('0x36')]][_0xc706('0x88')])){this[_0xc706('0x1d')][_0xbf1973[_0xc706('0x36')]][_0xc706('0x97')]=moment()[_0xc706('0x41')](_0xc706('0x57'));}}}}catch(_0x401553){logger['error'](_0xc706('0x98'),util[_0xc706('0x3b')](_0x401553,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xc706('0x33')][_0xc706('0x99')]=function(_0xfe2cd2){try{if(this[_0xc706('0x34')](_0xfe2cd2)){if(this[_0xc706('0x1d')][_0xfe2cd2[_0xc706('0x36')]]){if(!_['isNil'](this[_0xc706('0x1d')][_0xfe2cd2['uniqueid']][_0xc706('0x97')])){this[_0xc706('0x1d')][_0xfe2cd2[_0xc706('0x36')]][_0xc706('0x9a')]+=moment()[_0xc706('0x9b')](0x0)[_0xc706('0x61')](this[_0xc706('0x1d')][_0xfe2cd2[_0xc706('0x36')]][_0xc706('0x97')],'seconds');delete this[_0xc706('0x1d')][_0xfe2cd2[_0xc706('0x36')]][_0xc706('0x97')];}}}}catch(_0x25c2ea){logger[_0xc706('0x39')](_0xc706('0x9c'),util[_0xc706('0x3b')](_0x25c2ea,{'showHidden':![],'depth':null}));}};module[_0xc706('0x9d')]=VoiceCallReport;
\ No newline at end of file
+var _0xa519=['hangup','syncHangup','attendedtransfer','syncAttendedTransfer','syncBlindTransfer','musiconholdstart','musiconholdstop','syncMusicOnHoldStop','actionCoreShowChannels','catch','log','prototype','isNotNull','isUndefined','emit','syncNewCallerId','uniqueid','merge','pick','error','[syncNewCallerId][VoiceCallReport]','linkedid','OutgoingSpoolFailed','format','YYYY-MM-DD\x20HH:mm:ss','toNumber','channelstate','keys','context','from-sip','split','exten','user:%s','channel','accountcode','[syncNewChannel][VoiceCallReport]','inspect','application','toLowerCase','applicationdata','duration','subtract','seconds','disposition','includes','lastapplication','lastdata','set','startsWith','match','[syncNewExten][VoiceCallReport]','answered','answertime','starttime','holdtime','diff','xcally-motion-preview','connectedlinenum','calleridnum','connectedlinename','calleridname','destinationchannel','membername','name','[syncNewState][VoiceCallReport]','syncMixMonitorFilename','monitor','endsWith','.wav49','replace','.WAV','monitorFilename','find','monitors','isNil','push','rec','variable','mixmonitor_filename','value','xmd-callerid','xmd-cdrtype','type','xmd-queue','xmd-originatecalleridnum','originatecalleridnum','xmcs-queue','sipcalluniqueid','parse','sipcallid','[syncVarSet][VoiceCallReport]','endtime','billableseconds','omit','destconnectedlinenum','user:agentcomplete','custom:voiceCallReport','[syncHangup][VoiceCallReport]','transfereeuniqueid','transfercalleridnum','origtransferercalleridnum','transferconnectedlinenum','transfertargetcalleridnum','secondtransfereruniqueid','transfertargetuniqueid','origtransfereruniqueid','[syncAttendedTransfer][VoiceCallReport]','extension','BlindTransfer','transfererchannel','[syncBlindTransfer][VoiceCallReport]','syncMusicOnHoldStart','mohtime','milliseconds','mohstarttime','[syncMusicOnHoldStop][VoiceCallReport]','exports','moment','util','path','../../../config/environment','../../../config/logger','ami','../model/channel','unknown','not_inuse','inuse','busy','invalid','unavailable','onhold','queue','dial','playback','voicemail','NO\x20ANSWER','FAILED','ANSWERED','BUSY','redis','defaults','localhost','socket.io-emitter','channels','agents','newexten','syncNewExten','bind','newchannel','syncNewChannel','newstate','syncNewState','varset','syncVarSet'];(function(_0x256132,_0x2e74f5){var _0xa430c2=function(_0x3118df){while(--_0x3118df){_0x256132['push'](_0x256132['shift']());}};_0xa430c2(++_0x2e74f5);}(_0xa519,0x75));var _0x9a51=function(_0x131d35,_0x3dee98){_0x131d35=_0x131d35-0x0;var _0x557e62=_0xa519[_0x131d35];return _0x557e62;};'use strict';var BPromise=require('bluebird');var _=require('lodash');var moment=require(_0x9a51('0x0'));var util=require(_0x9a51('0x1'));var path=require(_0x9a51('0x2'));var Redis=require('ioredis');var config=require(_0x9a51('0x3'));var logger=require(_0x9a51('0x4'))(_0x9a51('0x5'));var ami=require('../ami');var Channel=require(_0x9a51('0x6'));var statusDesc=[_0x9a51('0x7'),_0x9a51('0x8'),_0x9a51('0x9'),_0x9a51('0xa'),_0x9a51('0xb'),_0x9a51('0xc'),'ringing','ringinuse',_0x9a51('0xd')];var applications=['set',_0x9a51('0xe'),'agi',_0x9a51('0xf'),_0x9a51('0x10'),_0x9a51('0x11')];var dispositions=[_0x9a51('0x12'),'FAILED',_0x9a51('0x13'),_0x9a51('0x12'),_0x9a51('0x12'),_0x9a51('0x12'),_0x9a51('0x14'),_0x9a51('0x15'),_0x9a51('0x13'),_0x9a51('0x13'),'FAILED'];var actions={};config[_0x9a51('0x16')]=_[_0x9a51('0x17')](config[_0x9a51('0x16')],{'host':_0x9a51('0x18'),'port':0x18eb});var io=require(_0x9a51('0x19'))(new Redis(config['redis']));function VoiceCallReport(_0x5b4682){this[_0x9a51('0x1a')]=_0x5b4682[_0x9a51('0x1a')];this['agents']=_0x5b4682[_0x9a51('0x1b')];ami['on']('coreshowchannel',this['syncNewExten']['bind'](this));ami['on'](_0x9a51('0x1c'),this[_0x9a51('0x1d')][_0x9a51('0x1e')](this));ami['on'](_0x9a51('0x1f'),this[_0x9a51('0x20')][_0x9a51('0x1e')](this));ami['on'](_0x9a51('0x21'),this[_0x9a51('0x22')][_0x9a51('0x1e')](this));ami['on'](_0x9a51('0x23'),this[_0x9a51('0x24')]['bind'](this));ami['on'](_0x9a51('0x25'),this[_0x9a51('0x26')][_0x9a51('0x1e')](this));ami['on']('newcallerid',this['syncNewCallerId'][_0x9a51('0x1e')](this));ami['on'](_0x9a51('0x27'),this[_0x9a51('0x28')]['bind'](this));ami['on']('blindtransfer',this[_0x9a51('0x29')][_0x9a51('0x1e')](this));ami['on'](_0x9a51('0x2a'),this['syncMusicOnHoldStart'][_0x9a51('0x1e')](this));ami['on'](_0x9a51('0x2b'),this[_0x9a51('0x2c')]['bind'](this));return BPromise['resolve']()['then'](ami[_0x9a51('0x2d')]())[_0x9a51('0x2e')](function(_0x15d85e){console[_0x9a51('0x2f')](_0x15d85e);});}VoiceCallReport[_0x9a51('0x30')][_0x9a51('0x31')]=function(_0x14fa92){return _0x14fa92!==null&&!_[_0x9a51('0x32')](_0x14fa92);};VoiceCallReport[_0x9a51('0x30')][_0x9a51('0x33')]=function(_0x2f9d46,_0x357e04,_0x20ed16){io['to'](_0x2f9d46)['emit'](_0x357e04,_0x20ed16);};VoiceCallReport['prototype'][_0x9a51('0x34')]=function(_0x4ce2b9){try{if(this[_0x9a51('0x31')](_0x4ce2b9)){if(_0x4ce2b9[_0x9a51('0x35')]===_0x4ce2b9['linkedid']){if(!_[_0x9a51('0x32')](this[_0x9a51('0x1a')][_0x4ce2b9[_0x9a51('0x35')]])){_[_0x9a51('0x36')](this[_0x9a51('0x1a')][_0x4ce2b9['uniqueid']],_[_0x9a51('0x37')](_0x4ce2b9,_['keys'](this[_0x9a51('0x1a')][_0x4ce2b9[_0x9a51('0x35')]])));}}}}catch(_0x4d963b){logger[_0x9a51('0x38')](_0x9a51('0x39'),util['inspect'](_0x4d963b,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x9a51('0x30')][_0x9a51('0x20')]=function(_0x223da2){try{if(this[_0x9a51('0x31')](_0x223da2)){if(_0x223da2['uniqueid']===_0x223da2[_0x9a51('0x3a')]&&_0x223da2['channel']!=_0x9a51('0x3b')){if(_[_0x9a51('0x32')](this['channels'][_0x223da2['uniqueid']])){this[_0x9a51('0x1a')][_0x223da2[_0x9a51('0x35')]]=new Channel();this['channels'][_0x223da2[_0x9a51('0x35')]]['starttime']=moment()[_0x9a51('0x3c')](_0x9a51('0x3d'));this[_0x9a51('0x1a')][_0x223da2[_0x9a51('0x35')]]['disposition']=dispositions[_[_0x9a51('0x3e')](_0x223da2[_0x9a51('0x3f')])];_[_0x9a51('0x36')](this[_0x9a51('0x1a')][_0x223da2['uniqueid']],_[_0x9a51('0x37')](_0x223da2,_[_0x9a51('0x40')](this['channels'][_0x223da2[_0x9a51('0x35')]])));if(_0x223da2[_0x9a51('0x41')]===_0x9a51('0x42')){if(this[_0x9a51('0x1b')][_0x223da2['channel'][_0x9a51('0x43')]('-')[0x0]]){this['agents'][_0x223da2['channel'][_0x9a51('0x43')]('-')[0x0]]['destconnectedlinenum']=_0x223da2[_0x9a51('0x44')];this[_0x9a51('0x33')](util[_0x9a51('0x3c')](_0x9a51('0x45'),this[_0x9a51('0x1b')][_0x223da2[_0x9a51('0x46')][_0x9a51('0x43')]('-')[0x0]]['name']),'user:agentconnect',{'destaccountcode':this[_0x9a51('0x1b')][_0x223da2[_0x9a51('0x46')][_0x9a51('0x43')]('-')[0x0]][_0x9a51('0x47')],'destconnectedlinenum':_0x223da2[_0x9a51('0x44')]});}}}}}}catch(_0x1b1a61){logger[_0x9a51('0x38')](_0x9a51('0x48'),util[_0x9a51('0x49')](_0x1b1a61,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x9a51('0x30')][_0x9a51('0x1d')]=function(_0x10bc84){try{if(this['isNotNull'](_0x10bc84)){if(_0x10bc84[_0x9a51('0x35')]===_0x10bc84[_0x9a51('0x3a')]&&_0x10bc84[_0x9a51('0x44')]!='h'&&_0x10bc84[_0x9a51('0x46')]!=_0x9a51('0x3b')){_0x10bc84[_0x9a51('0x4a')]=_0x10bc84[_0x9a51('0x4a')][_0x9a51('0x4b')]();_0x10bc84[_0x9a51('0x4c')]=(_0x10bc84['appdata']||_0x10bc84[_0x9a51('0x4c')])[_0x9a51('0x4b')]();if(_[_0x9a51('0x32')](this[_0x9a51('0x1a')][_0x10bc84[_0x9a51('0x35')]])){this[_0x9a51('0x1a')][_0x10bc84[_0x9a51('0x35')]]=new Channel();this['channels'][_0x10bc84[_0x9a51('0x35')]]['starttime']=_0x10bc84[_0x9a51('0x4d')]?moment()[_0x9a51('0x4e')](moment[_0x9a51('0x4d')](_0x10bc84[_0x9a51('0x4d')])[_0x9a51('0x4f')](),'seconds')[_0x9a51('0x3c')](_0x9a51('0x3d')):moment()['format'](_0x9a51('0x3d'));this[_0x9a51('0x1a')][_0x10bc84[_0x9a51('0x35')]][_0x9a51('0x50')]='NO\x20ANSWER';}_[_0x9a51('0x36')](this[_0x9a51('0x1a')][_0x10bc84[_0x9a51('0x35')]],_[_0x9a51('0x37')](_0x10bc84,_['keys'](this[_0x9a51('0x1a')][_0x10bc84[_0x9a51('0x35')]])));if(_[_0x9a51('0x51')](applications,_0x10bc84[_0x9a51('0x4a')])){this['channels'][_0x10bc84[_0x9a51('0x35')]][_0x9a51('0x52')]=_0x10bc84[_0x9a51('0x4a')];this[_0x9a51('0x1a')][_0x10bc84[_0x9a51('0x35')]][_0x9a51('0x53')]=_0x10bc84[_0x9a51('0x4c')];if(_0x10bc84[_0x9a51('0x4a')]===_0x9a51('0x54')&&_[_0x9a51('0x55')](_0x10bc84[_0x9a51('0x4c')],'cdr(')){var _0x47f2fd=_0x10bc84[_0x9a51('0x4c')][_0x9a51('0x43')]('=');var _0x4c14db=_0x47f2fd[0x0][_0x9a51('0x56')](/cdr\((.*)\)/);if(_0x4c14db){this[_0x9a51('0x1a')][_0x10bc84[_0x9a51('0x35')]][_0x4c14db[0x1]]=_0x47f2fd[0x1];}}else if(_0x10bc84[_0x9a51('0x4a')]==='queue'){this['channels'][_0x10bc84[_0x9a51('0x35')]]['queue']=_0x10bc84[_0x9a51('0x4c')][_0x9a51('0x43')](',')[0x0];}}}}}catch(_0x441f91){logger[_0x9a51('0x38')](_0x9a51('0x57'),util[_0x9a51('0x49')](_0x441f91,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x9a51('0x30')][_0x9a51('0x22')]=function(_0x425961){try{if(this['isNotNull'](_0x425961)){if(_0x425961[_0x9a51('0x35')]!==_0x425961[_0x9a51('0x3a')]){if(this[_0x9a51('0x1a')][_0x425961[_0x9a51('0x3a')]]){if(_0x425961[_0x9a51('0x3f')]==='6'){if(!this['channels'][_0x425961[_0x9a51('0x3a')]][_0x9a51('0x58')]){var _0xe3c945=moment();this[_0x9a51('0x1a')][_0x425961['linkedid']]['answered']=!![];this[_0x9a51('0x1a')][_0x425961[_0x9a51('0x3a')]][_0x9a51('0x59')]=_0xe3c945['format'](_0x9a51('0x3d'));if(this['channels'][_0x425961[_0x9a51('0x3a')]][_0x9a51('0x5a')]){this[_0x9a51('0x1a')][_0x425961[_0x9a51('0x3a')]][_0x9a51('0x5b')]=_0xe3c945[_0x9a51('0x5c')](this['channels'][_0x425961[_0x9a51('0x3a')]][_0x9a51('0x5a')],_0x9a51('0x4f'));}}this['channels'][_0x425961[_0x9a51('0x3a')]][_0x9a51('0x3a')]=_0x425961[_0x9a51('0x35')];if(_0x425961['calleridnum']!==_0x9a51('0x5d')){this[_0x9a51('0x1a')][_0x425961[_0x9a51('0x3a')]][_0x9a51('0x5e')]=_0x425961[_0x9a51('0x5f')];}this[_0x9a51('0x1a')][_0x425961['linkedid']][_0x9a51('0x60')]=_0x425961[_0x9a51('0x61')];this[_0x9a51('0x1a')][_0x425961[_0x9a51('0x3a')]][_0x9a51('0x62')]=_0x425961['channel'];this[_0x9a51('0x1a')][_0x425961[_0x9a51('0x3a')]]['disposition']=dispositions[_[_0x9a51('0x3e')](_0x425961['channelstate'])];if(this[_0x9a51('0x1b')][_0x425961[_0x9a51('0x46')][_0x9a51('0x43')]('-')[0x0]]){this[_0x9a51('0x1a')][_0x425961['linkedid']]['UserId']=this[_0x9a51('0x1b')][_0x425961[_0x9a51('0x46')][_0x9a51('0x43')]('-')[0x0]]['id'];this[_0x9a51('0x1a')][_0x425961[_0x9a51('0x3a')]][_0x9a51('0x63')]=this[_0x9a51('0x1b')][_0x425961[_0x9a51('0x46')][_0x9a51('0x43')]('-')[0x0]]['name'];}}}}else{if(this[_0x9a51('0x1a')][_0x425961[_0x9a51('0x35')]]){if(_0x425961[_0x9a51('0x3f')]==='6'){if(this[_0x9a51('0x1b')][_0x425961[_0x9a51('0x46')][_0x9a51('0x43')]('-')[0x0]]){this[_0x9a51('0x1a')][_0x425961[_0x9a51('0x35')]]['UserId']=this[_0x9a51('0x1b')][_0x425961[_0x9a51('0x46')]['split']('-')[0x0]]['id'];this['channels'][_0x425961[_0x9a51('0x35')]][_0x9a51('0x63')]=this[_0x9a51('0x1b')][_0x425961[_0x9a51('0x46')][_0x9a51('0x43')]('-')[0x0]][_0x9a51('0x64')];}}}}}}catch(_0x27b398){logger[_0x9a51('0x38')](_0x9a51('0x65'),util[_0x9a51('0x49')](_0x27b398,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x9a51('0x30')][_0x9a51('0x66')]=function(_0x219c88,_0xf6916a){if(this[_0x9a51('0x1a')][_0x219c88]){this[_0x9a51('0x1a')][_0x219c88][_0x9a51('0x67')]=!![];if(_[_0x9a51('0x68')](_0xf6916a,_0x9a51('0x69'))){_0xf6916a=_0xf6916a[_0x9a51('0x6a')](_0x9a51('0x69'),_0x9a51('0x6b'));}this['channels'][_0x219c88][_0x9a51('0x6c')]=_0xf6916a;var _0x2bf8a5=_[_0x9a51('0x6d')](this[_0x9a51('0x1a')][_0x219c88][_0x9a51('0x6e')],{'filename':_0xf6916a});if(_[_0x9a51('0x6f')](_0x2bf8a5)){this[_0x9a51('0x1a')][_0x219c88][_0x9a51('0x6e')][_0x9a51('0x70')]({'filename':_0xf6916a,'createdAt':moment()['format'](_0x9a51('0x3d')),'mixmonitorid':'','status':_0x9a51('0x71')});}}};VoiceCallReport[_0x9a51('0x30')]['syncVarSet']=function(_0x2681ea){try{if(this[_0x9a51('0x31')](_0x2681ea)){if(this['channels'][_0x2681ea[_0x9a51('0x35')]]&&_0x2681ea[_0x9a51('0x46')]!=_0x9a51('0x3b')){if(this['isNotNull'](_0x2681ea[_0x9a51('0x72')])){if(this[_0x9a51('0x31')](_0x2681ea[_0x9a51('0x72')][_0x9a51('0x73')])){this[_0x9a51('0x66')](_0x2681ea['uniqueid'],_0x2681ea[_0x9a51('0x74')]);}else if(this['isNotNull'](_0x2681ea[_0x9a51('0x72')]['xmd-phone'])){this[_0x9a51('0x1a')][_0x2681ea['uniqueid']][_0x9a51('0x5f')]=_0x2681ea[_0x9a51('0x74')];}else if(this['isNotNull'](_0x2681ea[_0x9a51('0x72')][_0x9a51('0x75')])){this[_0x9a51('0x1a')][_0x2681ea['uniqueid']]['callerid']=_0x2681ea[_0x9a51('0x74')];}else if(this['isNotNull'](_0x2681ea[_0x9a51('0x72')][_0x9a51('0x76')])){this[_0x9a51('0x1a')][_0x2681ea[_0x9a51('0x35')]][_0x9a51('0x77')]=_0x2681ea[_0x9a51('0x74')];}else if(this[_0x9a51('0x31')](_0x2681ea[_0x9a51('0x72')][_0x9a51('0x78')])){this[_0x9a51('0x1a')][_0x2681ea[_0x9a51('0x35')]][_0x9a51('0xe')]=_0x2681ea['value']['split'](',')[0x0];}else if(this[_0x9a51('0x31')](_0x2681ea[_0x9a51('0x72')][_0x9a51('0x79')])){this[_0x9a51('0x1a')][_0x2681ea[_0x9a51('0x35')]][_0x9a51('0x7a')]=_0x2681ea['value'];}else if(this['isNotNull'](_0x2681ea[_0x9a51('0x72')]['xmd-destination'])){this[_0x9a51('0x1a')][_0x2681ea[_0x9a51('0x35')]]['destination']=_0x2681ea[_0x9a51('0x74')];}else if(this[_0x9a51('0x31')](_0x2681ea[_0x9a51('0x72')]['xmd-callerid-preview'])){this['channels'][_0x2681ea[_0x9a51('0x35')]]['calleridpreview']=_0x2681ea[_0x9a51('0x74')];}else if(this[_0x9a51('0x31')](_0x2681ea['variable'][_0x9a51('0x7b')])){this[_0x9a51('0x1a')][_0x2681ea[_0x9a51('0x35')]]['queue']=_0x2681ea[_0x9a51('0x74')];}else if(this[_0x9a51('0x31')](_0x2681ea[_0x9a51('0x72')]['sipcallid'])){this[_0x9a51('0x1a')][_0x2681ea['uniqueid']][_0x9a51('0x7c')]=_0x2681ea[_0x9a51('0x74')];}}}else if(this[_0x9a51('0x31')](_0x2681ea[_0x9a51('0x72')][_0x9a51('0x73')])){if(_0x2681ea[_0x9a51('0x74')]){var _0x186be0=path[_0x9a51('0x7d')](_0x2681ea['value'])[_0x9a51('0x64')];this[_0x9a51('0x66')](_0x186be0,_0x2681ea['value']);}}else if(this['channels'][_0x2681ea[_0x9a51('0x3a')]]){if(this[_0x9a51('0x31')](_0x2681ea[_0x9a51('0x72')])){if(this[_0x9a51('0x31')](_0x2681ea['variable'][_0x9a51('0x7e')])){this[_0x9a51('0x1a')][_0x2681ea['linkedid']]['sipcalllinkedid']=_0x2681ea['value'];}}}}}catch(_0x455474){logger[_0x9a51('0x38')](_0x9a51('0x7f'),util[_0x9a51('0x49')](_0x455474,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x9a51('0x30')]['syncHangup']=function(_0x194c12){try{if(this[_0x9a51('0x31')](_0x194c12)){if(this[_0x9a51('0x1a')][_0x194c12[_0x9a51('0x35')]]){var _0x1e036b=moment();this[_0x9a51('0x1a')][_0x194c12[_0x9a51('0x35')]][_0x9a51('0x80')]=_0x1e036b['format']('YYYY-MM-DD\x20HH:mm:ss');this[_0x9a51('0x1a')][_0x194c12[_0x9a51('0x35')]][_0x9a51('0x4d')]=_0x1e036b[_0x9a51('0x5c')](this[_0x9a51('0x1a')][_0x194c12[_0x9a51('0x35')]][_0x9a51('0x5a')],_0x9a51('0x4f'));if(this[_0x9a51('0x1a')][_0x194c12[_0x9a51('0x35')]]['answered']){this[_0x9a51('0x1a')][_0x194c12[_0x9a51('0x35')]][_0x9a51('0x81')]=_0x1e036b[_0x9a51('0x5c')](this[_0x9a51('0x1a')][_0x194c12[_0x9a51('0x35')]][_0x9a51('0x59')],_0x9a51('0x4f'));this[_0x9a51('0x1a')][_0x194c12['uniqueid']][_0x9a51('0x5b')]=this[_0x9a51('0x1a')][_0x194c12[_0x9a51('0x35')]][_0x9a51('0x4d')]-this[_0x9a51('0x1a')][_0x194c12[_0x9a51('0x35')]]['billableseconds'];}if(_0x194c12[_0x9a51('0x41')]==='from-sip'){if(this[_0x9a51('0x1b')][_0x194c12[_0x9a51('0x46')][_0x9a51('0x43')]('-')[0x0]]){this[_0x9a51('0x1b')][_0x194c12[_0x9a51('0x46')][_0x9a51('0x43')]('-')[0x0]]=_[_0x9a51('0x82')](this[_0x9a51('0x1b')][_0x194c12[_0x9a51('0x46')][_0x9a51('0x43')]('-')[0x0]],[_0x9a51('0x83')]);this[_0x9a51('0x33')](util[_0x9a51('0x3c')](_0x9a51('0x45'),this['agents'][_0x194c12['channel'][_0x9a51('0x43')]('-')[0x0]][_0x9a51('0x64')]),_0x9a51('0x84'),{'destaccountcode':this['agents'][_0x194c12[_0x9a51('0x46')][_0x9a51('0x43')]('-')[0x0]][_0x9a51('0x47')]});}}ami[_0x9a51('0x33')](_0x9a51('0x85'),this[_0x9a51('0x1a')][_0x194c12[_0x9a51('0x35')]]);delete this[_0x9a51('0x1a')][_0x194c12['uniqueid']];}}}catch(_0x4c831f){logger[_0x9a51('0x38')](_0x9a51('0x86'),util[_0x9a51('0x49')](_0x4c831f,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x9a51('0x30')]['syncAttendedTransfer']=function(_0x4d67b6){try{if(this['isNotNull'](_0x4d67b6)){if(this[_0x9a51('0x1a')][_0x4d67b6['transfereeuniqueid']]){this[_0x9a51('0x1a')][_0x4d67b6[_0x9a51('0x87')]][_0x9a51('0x88')]=_0x4d67b6[_0x9a51('0x89')];this[_0x9a51('0x1a')][_0x4d67b6[_0x9a51('0x87')]][_0x9a51('0x8a')]=_0x4d67b6[_0x9a51('0x8b')];if(this[_0x9a51('0x1a')][_0x4d67b6[_0x9a51('0x8c')]]){var _0x237dc4=this[_0x9a51('0x1a')][_0x4d67b6[_0x9a51('0x8c')]];this[_0x9a51('0x1a')][_0x4d67b6[_0x9a51('0x8c')]]=this[_0x9a51('0x1a')][_0x4d67b6[_0x9a51('0x87')]];this[_0x9a51('0x1a')][_0x4d67b6[_0x9a51('0x87')]]=_0x237dc4;}}else if(this[_0x9a51('0x1a')][_0x4d67b6[_0x9a51('0x8d')]]){this[_0x9a51('0x1a')][_0x4d67b6['transfertargetuniqueid']][_0x9a51('0x88')]=_0x4d67b6[_0x9a51('0x89')];this['channels'][_0x4d67b6[_0x9a51('0x8d')]]['transferconnectedlinenum']=_0x4d67b6['transfertargetcalleridnum'];if(this['channels'][_0x4d67b6[_0x9a51('0x8e')]]){var _0x237dc4=this[_0x9a51('0x1a')][_0x4d67b6['origtransfereruniqueid']];this[_0x9a51('0x1a')][_0x4d67b6[_0x9a51('0x8e')]]=this['channels'][_0x4d67b6[_0x9a51('0x8d')]];this[_0x9a51('0x1a')][_0x4d67b6['transfertargetuniqueid']]=_0x237dc4;}}}}catch(_0x367136){logger[_0x9a51('0x38')](_0x9a51('0x8f'),util[_0x9a51('0x49')](_0x367136,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x9a51('0x30')][_0x9a51('0x29')]=function(_0x3d3613){try{if(this[_0x9a51('0x31')](_0x3d3613)){if(this['channels'][_0x3d3613[_0x9a51('0x87')]]){this['channels'][_0x3d3613[_0x9a51('0x87')]][_0x9a51('0x88')]=_0x3d3613['transfereecalleridnum'];this[_0x9a51('0x1a')][_0x3d3613['transfereeuniqueid']][_0x9a51('0x8a')]=_0x3d3613[_0x9a51('0x90')];this[_0x9a51('0x26')]({'event':_0x9a51('0x91'),'uniqueid':_0x3d3613[_0x9a51('0x87')],'context':_0x3d3613['context'],'channel':_0x3d3613[_0x9a51('0x92')]});}}}catch(_0x524ea1){logger[_0x9a51('0x38')](_0x9a51('0x93'),util[_0x9a51('0x49')](_0x524ea1,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x9a51('0x30')][_0x9a51('0x94')]=function(_0x3061df){try{if(this[_0x9a51('0x31')](_0x3061df)){if(this[_0x9a51('0x1a')][_0x3061df[_0x9a51('0x35')]]){if(!_['isNil'](this[_0x9a51('0x1a')][_0x3061df[_0x9a51('0x35')]][_0x9a51('0x59')])){this[_0x9a51('0x1a')][_0x3061df[_0x9a51('0x35')]]['mohstarttime']=moment()[_0x9a51('0x3c')]('YYYY-MM-DD\x20HH:mm:ss');}}}}catch(_0x5236a8){logger[_0x9a51('0x38')]('[syncMusicOnHoldStart][VoiceCallReport]',util[_0x9a51('0x49')](_0x5236a8,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype']['syncMusicOnHoldStop']=function(_0x4fd416){try{if(this[_0x9a51('0x31')](_0x4fd416)){if(this[_0x9a51('0x1a')][_0x4fd416[_0x9a51('0x35')]]){if(!_['isNil'](this[_0x9a51('0x1a')][_0x4fd416[_0x9a51('0x35')]]['mohstarttime'])){this[_0x9a51('0x1a')][_0x4fd416[_0x9a51('0x35')]][_0x9a51('0x95')]+=moment()[_0x9a51('0x96')](0x0)['diff'](this[_0x9a51('0x1a')][_0x4fd416[_0x9a51('0x35')]][_0x9a51('0x97')],_0x9a51('0x4f'));delete this[_0x9a51('0x1a')][_0x4fd416[_0x9a51('0x35')]]['mohstarttime'];}}}}catch(_0x3d9bb0){logger[_0x9a51('0x38')](_0x9a51('0x98'),util[_0x9a51('0x49')](_0x3d9bb0,{'showHidden':![],'depth':null}));}};module[_0x9a51('0x99')]=VoiceCallReport;
\ No newline at end of file
index bfd3db4..7119a28 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2a38=['rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrtt','rtpaudioqosrttbridged','sipcallid','sipuri','bridgepeer','bridgepvtcallid','membercalls','memberlastcall','membername','memberpenalty','isNil','includes','endtime','seconds','complete','total','answertime','answered','billableseconds','diff','sumHoldTime','sumBillable','sumDuration','duration','custom:voiceDialReport','custom:dialend','voice_outbound:save','voice_outbound_channel:remove','[syncHangup][VoiceDialReport]','exports','lodash','moment','util','ioredis','../../../config/environment','../../../config/logger','../ami','redis','defaults','localhost','channels','outboundChannels','outbound','variables','bind','dialend','syncDialEnd','varset','syncVarSet','syncHangup','isNotNull','isUndefined','prototype','emit','syncDialBegin','uniqueid','merge','format','YYYY-MM-DD\x20HH:mm:ss','called','channel','lastIndexOf','substring','omit','event','privilege','voice:outbound','voice_outbound_channel:save','custom:dialbegin','dialstatus','ANSWER','connectedlinename','lastevent','connect','error','[syncDialEnd][VoiceDialReport]','inspect','addVariable','keys','variable','value','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosjitterbridged'];(function(_0x2f7c45,_0x3060d6){var _0x457bd1=function(_0x130410){while(--_0x130410){_0x2f7c45['push'](_0x2f7c45['shift']());}};_0x457bd1(++_0x3060d6);}(_0x2a38,0xce));var _0x82a3=function(_0x2593f9,_0x1dcece){_0x2593f9=_0x2593f9-0x0;var _0x1117eb=_0x2a38[_0x2593f9];return _0x1117eb;};'use strict';var _=require(_0x82a3('0x0'));var moment=require(_0x82a3('0x1'));var util=require(_0x82a3('0x2'));var Redis=require(_0x82a3('0x3'));var config=require(_0x82a3('0x4'));var logger=require(_0x82a3('0x5'))('ami');var ami=require(_0x82a3('0x6'));config[_0x82a3('0x7')]=_[_0x82a3('0x8')](config[_0x82a3('0x7')],{'host':_0x82a3('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x82a3('0x7')]));function VoiceDialReport(_0x454d13){this[_0x82a3('0xa')]=_0x454d13[_0x82a3('0xb')];this['outbound']=_0x454d13[_0x82a3('0xc')];this[_0x82a3('0xd')]={};ami['on']('dialbegin',this['syncDialBegin'][_0x82a3('0xe')](this));ami['on'](_0x82a3('0xf'),this[_0x82a3('0x10')]['bind'](this));ami['on'](_0x82a3('0x11'),this[_0x82a3('0x12')][_0x82a3('0xe')](this));ami['on']('hangup',this[_0x82a3('0x13')][_0x82a3('0xe')](this));}VoiceDialReport['prototype'][_0x82a3('0x14')]=function(_0x196a01){return _0x196a01!==null&&!_[_0x82a3('0x15')](_0x196a01);};VoiceDialReport[_0x82a3('0x16')]['emit']=function(_0x5aca8b,_0x3ad0f2,_0xb12581){io['to'](_0x5aca8b)[_0x82a3('0x17')](_0x3ad0f2,_0xb12581);};VoiceDialReport['prototype'][_0x82a3('0x18')]=function(_0x2c7778){try{if(this[_0x82a3('0x14')](_0x2c7778)){if(this['channels'][_0x2c7778[_0x82a3('0x19')]]){_[_0x82a3('0x1a')](this['channels'][_0x2c7778[_0x82a3('0x19')]],{'starttime':moment()[_0x82a3('0x1b')](_0x82a3('0x1c')),'lastevent':_0x82a3('0x1d'),'interface':_0x2c7778[_0x82a3('0x1e')]['substring'](0x0,_0x2c7778[_0x82a3('0x1e')][_0x82a3('0x1f')]('-')),'membername':_0x2c7778['channel'][_0x82a3('0x20')](_0x2c7778[_0x82a3('0x1e')][_0x82a3('0x1f')]('/')+0x1,_0x2c7778['channel'][_0x82a3('0x1f')]('-'))},_[_0x82a3('0x21')](_0x2c7778,[_0x82a3('0x22'),_0x82a3('0x23')]));this['emit'](_0x82a3('0x24'),_0x82a3('0x25'),this[_0x82a3('0xa')][_0x2c7778['uniqueid']]);ami[_0x82a3('0x17')](_0x82a3('0x26'),this['channels'][_0x2c7778[_0x82a3('0x19')]]);}}}catch(_0x27c2ad){logger['error']('[syncDialBegin][VoiceDialReport]',util['inspect'](_0x27c2ad,{'showHidden':![],'depth':null}));}};VoiceDialReport['prototype']['syncDialEnd']=function(_0x11ed7d){try{if(this['isNotNull'](_0x11ed7d)){if(this['channels'][_0x11ed7d['uniqueid']]){this[_0x82a3('0xa')][_0x11ed7d[_0x82a3('0x19')]][_0x82a3('0x27')]=_0x11ed7d['dialstatus'];if(_0x11ed7d['dialstatus']===_0x82a3('0x28')){this['channels'][_0x11ed7d[_0x82a3('0x19')]]['connectedlinenum']=_0x11ed7d['connectedlinenum'];this[_0x82a3('0xa')][_0x11ed7d[_0x82a3('0x19')]][_0x82a3('0x29')]=_0x11ed7d[_0x82a3('0x29')];this[_0x82a3('0xa')][_0x11ed7d['uniqueid']]['answertime']=moment()[_0x82a3('0x1b')](_0x82a3('0x1c'));this['channels'][_0x11ed7d['uniqueid']][_0x82a3('0x2a')]=_0x82a3('0x2b');ami[_0x82a3('0x17')]('custom:dialconnect',this['channels'][_0x11ed7d[_0x82a3('0x19')]]);}this[_0x82a3('0x17')](_0x82a3('0x24'),'voice_outbound_channel:save',this[_0x82a3('0xa')][_0x11ed7d['uniqueid']]);}}}catch(_0x339984){logger[_0x82a3('0x2c')](_0x82a3('0x2d'),util[_0x82a3('0x2e')](_0x339984,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x82a3('0x16')]['syncVarSet']=function(_0x858e2){try{if(this['isNotNull'](_0x858e2)){this[_0x82a3('0x2f')](_0x858e2[_0x82a3('0x19')],_[_0x82a3('0x30')](_0x858e2[_0x82a3('0x31')])[0x0],_0x858e2[_0x82a3('0x32')]);if(this[_0x82a3('0x14')](_0x858e2[_0x82a3('0x31')])&&this[_0x82a3('0x14')](_0x858e2[_0x82a3('0x31')]['outboundrouteid'])){if(_['isUndefined'](this[_0x82a3('0xa')][_0x858e2['uniqueid']])){this[_0x82a3('0xa')][_0x858e2[_0x82a3('0x19')]]={'routeId':_0x858e2[_0x82a3('0x32')],'variables':this[_0x82a3('0xd')][_0x858e2[_0x82a3('0x19')]]};this[_0x82a3('0x17')](_0x82a3('0x24'),_0x82a3('0x25'),this[_0x82a3('0xa')][_0x858e2['uniqueid']]);}}}}catch(_0x4bfd85){logger['error']('[syncVarSet][VoiceDialReport]',util['inspect'](_0x4bfd85,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x82a3('0x16')][_0x82a3('0x2f')]=function(_0x518583,_0x364666,_0x21f73b){var _0x3846af=[_0x82a3('0x33'),_0x82a3('0x34'),_0x82a3('0x35'),_0x82a3('0x36'),_0x82a3('0x37'),_0x82a3('0x38'),_0x82a3('0x39'),_0x82a3('0x3a'),_0x82a3('0x3b'),_0x82a3('0x3c'),_0x82a3('0x3d'),_0x82a3('0x3e'),_0x82a3('0x3f'),'memberdynamic','memberinterface',_0x82a3('0x40'),_0x82a3('0x41'),_0x82a3('0x42'),'memberrealtime'];if(!_[_0x82a3('0x43')](_0x364666)&&!_[_0x82a3('0x44')](_0x3846af,_0x364666)){if(_[_0x82a3('0x15')](this[_0x82a3('0xd')][_0x518583])){this[_0x82a3('0xd')][_0x518583]={};}this[_0x82a3('0xd')][_0x518583][_0x364666]=_0x21f73b;}};VoiceDialReport['prototype'][_0x82a3('0x13')]=function(_0x340511){try{if(this[_0x82a3('0x14')](_0x340511)){if(this[_0x82a3('0xa')][_0x340511['uniqueid']]){this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]][_0x82a3('0x45')]=moment()[_0x82a3('0x1b')](_0x82a3('0x1c'));this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]]['duration']=moment(this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]][_0x82a3('0x45')])['diff'](this['channels'][_0x340511['uniqueid']]['starttime'],_0x82a3('0x46'));this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]][_0x82a3('0x2a')]=_0x82a3('0x47');this[_0x82a3('0xc')][_0x82a3('0x48')]+=0x1;if(this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]][_0x82a3('0x49')]){this[_0x82a3('0xc')][_0x82a3('0x4a')]+=0x1;this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]]['holdtime']=moment(this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]][_0x82a3('0x49')])['diff'](this['channels'][_0x340511['uniqueid']]['starttime'],_0x82a3('0x46'));this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]][_0x82a3('0x4b')]=moment(this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]][_0x82a3('0x45')])[_0x82a3('0x4c')](this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]][_0x82a3('0x49')],_0x82a3('0x46'));this[_0x82a3('0xc')][_0x82a3('0x4d')]+=this['channels'][_0x340511[_0x82a3('0x19')]]['holdtime']||0x0;this[_0x82a3('0xc')][_0x82a3('0x4e')]+=this['channels'][_0x340511[_0x82a3('0x19')]][_0x82a3('0x4b')];}this[_0x82a3('0xc')][_0x82a3('0x4f')]+=this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]][_0x82a3('0x50')];ami[_0x82a3('0x17')](_0x82a3('0x51'),this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]]);ami[_0x82a3('0x17')](_0x82a3('0x52'),this[_0x82a3('0xa')][_0x340511['uniqueid']]);this[_0x82a3('0x17')]('voice:outbound',_0x82a3('0x53'),this[_0x82a3('0xc')]);this['emit'](_0x82a3('0x24'),_0x82a3('0x54'),this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]]);delete this[_0x82a3('0xa')][_0x340511[_0x82a3('0x19')]];}if(this[_0x82a3('0xd')][_0x340511['uniqueid']]){delete this['variables'][_0x340511[_0x82a3('0x19')]];}}}catch(_0x46c4af){logger[_0x82a3('0x2c')](_0x82a3('0x55'),util['inspect'](_0x46c4af,{'showHidden':![],'depth':null}));}};module[_0x82a3('0x56')]=VoiceDialReport;
\ No newline at end of file
+var _0x2262=['socket.io-emitter','channels','outboundChannels','outbound','variables','dialbegin','bind','dialend','varset','syncVarSet','hangup','syncHangup','isNotNull','isUndefined','prototype','emit','uniqueid','format','called','channel','lastIndexOf','substring','omit','event','privilege','voice:outbound','custom:dialbegin','error','inspect','dialstatus','connectedlinenum','connectedlinename','answertime','lastevent','custom:dialconnect','variable','value','outboundrouteid','voice_outbound_channel:save','[syncVarSet][VoiceDialReport]','rtpaudioqos','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrtt','rtpaudioqosrttbridged','sipuri','memberdynamic','memberinterface','memberlastcall','membername','memberrealtime','isNil','YYYY-MM-DD\x20HH:mm:ss','duration','endtime','diff','starttime','seconds','complete','total','answered','holdtime','billableseconds','sumHoldTime','sumBillable','sumDuration','custom:voiceDialReport','custom:dialend','voice_outbound:save','voice_outbound_channel:remove','exports','lodash','moment','util','ioredis','../../../config/environment','../../../config/logger','ami','../ami','redis','defaults','localhost'];(function(_0x59c919,_0xa2f64a){var _0x3f93d3=function(_0x5ec07f){while(--_0x5ec07f){_0x59c919['push'](_0x59c919['shift']());}};_0x3f93d3(++_0xa2f64a);}(_0x2262,0x9d));var _0x2226=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x2262[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x2226('0x0'));var moment=require(_0x2226('0x1'));var util=require(_0x2226('0x2'));var Redis=require(_0x2226('0x3'));var config=require(_0x2226('0x4'));var logger=require(_0x2226('0x5'))(_0x2226('0x6'));var ami=require(_0x2226('0x7'));config[_0x2226('0x8')]=_[_0x2226('0x9')](config['redis'],{'host':_0x2226('0xa'),'port':0x18eb});var io=require(_0x2226('0xb'))(new Redis(config[_0x2226('0x8')]));function VoiceDialReport(_0x2cad66){this[_0x2226('0xc')]=_0x2cad66[_0x2226('0xd')];this[_0x2226('0xe')]=_0x2cad66[_0x2226('0xe')];this[_0x2226('0xf')]={};ami['on'](_0x2226('0x10'),this['syncDialBegin'][_0x2226('0x11')](this));ami['on'](_0x2226('0x12'),this['syncDialEnd']['bind'](this));ami['on'](_0x2226('0x13'),this[_0x2226('0x14')][_0x2226('0x11')](this));ami['on'](_0x2226('0x15'),this[_0x2226('0x16')][_0x2226('0x11')](this));}VoiceDialReport['prototype'][_0x2226('0x17')]=function(_0x574cf5){return _0x574cf5!==null&&!_[_0x2226('0x18')](_0x574cf5);};VoiceDialReport[_0x2226('0x19')][_0x2226('0x1a')]=function(_0x447ebe,_0x12dacf,_0x3f2f74){io['to'](_0x447ebe)[_0x2226('0x1a')](_0x12dacf,_0x3f2f74);};VoiceDialReport['prototype']['syncDialBegin']=function(_0x28d6fc){try{if(this[_0x2226('0x17')](_0x28d6fc)){if(this['channels'][_0x28d6fc['uniqueid']]){_['merge'](this[_0x2226('0xc')][_0x28d6fc[_0x2226('0x1b')]],{'starttime':moment()[_0x2226('0x1c')]('YYYY-MM-DD\x20HH:mm:ss'),'lastevent':_0x2226('0x1d'),'interface':_0x28d6fc['channel']['substring'](0x0,_0x28d6fc[_0x2226('0x1e')][_0x2226('0x1f')]('-')),'membername':_0x28d6fc[_0x2226('0x1e')][_0x2226('0x20')](_0x28d6fc[_0x2226('0x1e')][_0x2226('0x1f')]('/')+0x1,_0x28d6fc[_0x2226('0x1e')][_0x2226('0x1f')]('-'))},_[_0x2226('0x21')](_0x28d6fc,[_0x2226('0x22'),_0x2226('0x23')]));this[_0x2226('0x1a')](_0x2226('0x24'),'voice_outbound_channel:save',this[_0x2226('0xc')][_0x28d6fc[_0x2226('0x1b')]]);ami[_0x2226('0x1a')](_0x2226('0x25'),this['channels'][_0x28d6fc['uniqueid']]);}}}catch(_0x53fbb3){logger[_0x2226('0x26')]('[syncDialBegin][VoiceDialReport]',util[_0x2226('0x27')](_0x53fbb3,{'showHidden':![],'depth':null}));}};VoiceDialReport['prototype']['syncDialEnd']=function(_0x62efac){try{if(this[_0x2226('0x17')](_0x62efac)){if(this['channels'][_0x62efac[_0x2226('0x1b')]]){this[_0x2226('0xc')][_0x62efac['uniqueid']][_0x2226('0x28')]=_0x62efac[_0x2226('0x28')];if(_0x62efac['dialstatus']==='ANSWER'){this[_0x2226('0xc')][_0x62efac['uniqueid']][_0x2226('0x29')]=_0x62efac[_0x2226('0x29')];this[_0x2226('0xc')][_0x62efac[_0x2226('0x1b')]][_0x2226('0x2a')]=_0x62efac[_0x2226('0x2a')];this['channels'][_0x62efac[_0x2226('0x1b')]][_0x2226('0x2b')]=moment()[_0x2226('0x1c')]('YYYY-MM-DD\x20HH:mm:ss');this['channels'][_0x62efac[_0x2226('0x1b')]][_0x2226('0x2c')]='connect';ami[_0x2226('0x1a')](_0x2226('0x2d'),this[_0x2226('0xc')][_0x62efac['uniqueid']]);}this[_0x2226('0x1a')](_0x2226('0x24'),'voice_outbound_channel:save',this['channels'][_0x62efac[_0x2226('0x1b')]]);}}}catch(_0xfb27ff){logger['error']('[syncDialEnd][VoiceDialReport]',util[_0x2226('0x27')](_0xfb27ff,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x2226('0x19')][_0x2226('0x14')]=function(_0x4821e5){try{if(this[_0x2226('0x17')](_0x4821e5)){this['addVariable'](_0x4821e5[_0x2226('0x1b')],_['keys'](_0x4821e5[_0x2226('0x2e')])[0x0],_0x4821e5[_0x2226('0x2f')]);if(this[_0x2226('0x17')](_0x4821e5[_0x2226('0x2e')])&&this[_0x2226('0x17')](_0x4821e5[_0x2226('0x2e')][_0x2226('0x30')])){if(_[_0x2226('0x18')](this['channels'][_0x4821e5[_0x2226('0x1b')]])){this['channels'][_0x4821e5['uniqueid']]={'routeId':_0x4821e5['value'],'variables':this[_0x2226('0xf')][_0x4821e5[_0x2226('0x1b')]]};this[_0x2226('0x1a')]('voice:outbound',_0x2226('0x31'),this[_0x2226('0xc')][_0x4821e5[_0x2226('0x1b')]]);}}}}catch(_0xeedeac){logger[_0x2226('0x26')](_0x2226('0x32'),util[_0x2226('0x27')](_0xeedeac,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x2226('0x19')]['addVariable']=function(_0x5f2268,_0x1df3f5,_0x10b99e){var _0x3ce8f5=[_0x2226('0x33'),'rtpaudioqosbridged',_0x2226('0x34'),_0x2226('0x35'),_0x2226('0x36'),_0x2226('0x37'),_0x2226('0x38'),_0x2226('0x39'),'sipcallid',_0x2226('0x3a'),'bridgepeer','bridgepvtcallid','membercalls',_0x2226('0x3b'),_0x2226('0x3c'),_0x2226('0x3d'),_0x2226('0x3e'),'memberpenalty',_0x2226('0x3f')];if(!_[_0x2226('0x40')](_0x1df3f5)&&!_['includes'](_0x3ce8f5,_0x1df3f5)){if(_[_0x2226('0x18')](this[_0x2226('0xf')][_0x5f2268])){this['variables'][_0x5f2268]={};}this[_0x2226('0xf')][_0x5f2268][_0x1df3f5]=_0x10b99e;}};VoiceDialReport[_0x2226('0x19')][_0x2226('0x16')]=function(_0x44accd){try{if(this[_0x2226('0x17')](_0x44accd)){if(this['channels'][_0x44accd[_0x2226('0x1b')]]){this[_0x2226('0xc')][_0x44accd['uniqueid']]['endtime']=moment()[_0x2226('0x1c')](_0x2226('0x41'));this['channels'][_0x44accd[_0x2226('0x1b')]][_0x2226('0x42')]=moment(this['channels'][_0x44accd[_0x2226('0x1b')]][_0x2226('0x43')])[_0x2226('0x44')](this[_0x2226('0xc')][_0x44accd[_0x2226('0x1b')]][_0x2226('0x45')],_0x2226('0x46'));this[_0x2226('0xc')][_0x44accd['uniqueid']][_0x2226('0x2c')]=_0x2226('0x47');this['outbound'][_0x2226('0x48')]+=0x1;if(this[_0x2226('0xc')][_0x44accd[_0x2226('0x1b')]][_0x2226('0x2b')]){this['outbound'][_0x2226('0x49')]+=0x1;this[_0x2226('0xc')][_0x44accd[_0x2226('0x1b')]][_0x2226('0x4a')]=moment(this[_0x2226('0xc')][_0x44accd[_0x2226('0x1b')]][_0x2226('0x2b')])['diff'](this[_0x2226('0xc')][_0x44accd[_0x2226('0x1b')]][_0x2226('0x45')],_0x2226('0x46'));this['channels'][_0x44accd[_0x2226('0x1b')]][_0x2226('0x4b')]=moment(this[_0x2226('0xc')][_0x44accd['uniqueid']][_0x2226('0x43')])[_0x2226('0x44')](this[_0x2226('0xc')][_0x44accd[_0x2226('0x1b')]]['answertime'],_0x2226('0x46'));this[_0x2226('0xe')][_0x2226('0x4c')]+=this[_0x2226('0xc')][_0x44accd['uniqueid']][_0x2226('0x4a')]||0x0;this[_0x2226('0xe')][_0x2226('0x4d')]+=this[_0x2226('0xc')][_0x44accd[_0x2226('0x1b')]][_0x2226('0x4b')];}this['outbound'][_0x2226('0x4e')]+=this[_0x2226('0xc')][_0x44accd[_0x2226('0x1b')]]['duration'];ami['emit'](_0x2226('0x4f'),this[_0x2226('0xc')][_0x44accd[_0x2226('0x1b')]]);ami[_0x2226('0x1a')](_0x2226('0x50'),this[_0x2226('0xc')][_0x44accd[_0x2226('0x1b')]]);this[_0x2226('0x1a')]('voice:outbound',_0x2226('0x51'),this['outbound']);this[_0x2226('0x1a')]('voice:outbound',_0x2226('0x52'),this['channels'][_0x44accd[_0x2226('0x1b')]]);delete this['channels'][_0x44accd[_0x2226('0x1b')]];}if(this[_0x2226('0xf')][_0x44accd[_0x2226('0x1b')]]){delete this[_0x2226('0xf')][_0x44accd[_0x2226('0x1b')]];}}}catch(_0x1571f1){logger['error']('[syncHangup][VoiceDialReport]',util['inspect'](_0x1571f1,{'showHidden':![],'depth':null}));}};module[_0x2226('0x53')]=VoiceDialReport;
\ No newline at end of file
index 057e90e..041f8ef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x91a3=['startsWith','toLowerCase','linkedid','add','transfertype','FORWARD','transferexten','transferuniqueid','COMPLETEDBY','[syncAgentComplete][VoiceQueueReport]','addVariable','value','variable','CONTINUE','queueposition','[syncVarSet][VoiceQueueReport]','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrtt','rtpaudioqosrttbridged','sipcallid','sipuri','bridgepeer','bridgepvtcallid','membercalls','memberdynamic','memberinterface','memberlastcall','memberpenalty','includes','length','abandoned','milliseconds','diff','answered','lastevent','custom:queuecallerunmanaged','custom:queuecallerabandon','[syncHangup][VoiceQueueReport]','transfereeuniqueid','secondtransfererexten','ATTENDEDTRANSFER','ATTENDED','secondtransfereruniqueid','transfertargetuniqueid','origtransfereruniqueid','BLINDTRANSFER','BLIND','extension','BlindTransfer','context','transfererchannel','[syncBlindTransfer][VoiceQueueReport]','mohstarttime','[syncMusicOnHoldStart][VoiceQueueReport]','seconds','[syncMusicOnHoldStop][VoiceQueueReport]','moment','bluebird','util','ioredis','../../../config/environment','../../../config/logger','ami','../ami','../model/queueReport','redis','defaults','localhost','socket.io-emitter','prototype','tail','finally','sequence','queueReports','agents','queueChannels','voiceQueues','campaigns','variables','queuesummary','syncQueueSummary','bind','queuesummarycomplete','queuecallerjoin','syncQueueCallerJoin','queuecallerabandon','syncQueueCallerAbandon','syncQueueCallerLeave','agentcomplete','syncAgentComplete','agentconnect','syncAgentConnect','varset','syncVarSet','hangup','syncHangup','fullybooted','syncFullyBooted','musiconholdstart','syncMusicOnHoldStart','musiconholdstop','syncMusicOnHoldStop','syncAttendedTransfer','blindtransfer','syncBlindTransfer','loopQueueSummary','isUndefined','isEmpty','hasOwnProperty','originated','talking','queueStatusComplete','unlockRR','clearZombieChannels','channels','switch','enqueue','isNil','status','channel','No\x20such\x20channel','[voiceQueueReport][checkChannel]','error','[voiceQueueReport][checkVariables]','[FullyBooted]\x20clear\x20realtime','clearQueueReport','emitVoiceQueueChannelRemove','inspect','emit','emitVoiceQueueChannelSave','name','voice_queue_channel:save','format','type','inbound','available','loggedIn','sumBillable','sumDuration','sumHoldTime','total','unmanaged','waiting','Trunk','active','callerid','Interval','stringify','md5','queues','catch','[queues]','flagQueueSummary','Action','then','[queuesummary]','isNotNull','queue','countBy','callers','toNumber','loggedin','emitVoiceQueueSummary','custom:queuesummary','[syncQueueSummary][VoiceQueueReport]','syncNewExten','uniqueid','queuecallerjoinAt','position','count','merge','pick','keys','push','[syncQueueCallerJoin][VoiceQueueReport]','holdtime','originalposition','YYYY-MM-DD\x20HH:mm:ss','queuecallerexitreason','ABANDONED','lastAssignedTo','[syncQueueCallerAbandon][VoiceQueueReport]','last','queuecallerleaveAt','connectedlinenum','connectedlinename','[syncQueueCallerLeave][VoiceQueueReport]','queuecallercomplete','[syncAgentConnect][VoiceQueueReport]','assigned','membername','queuecallerexit','queuecallerexitAt','transfer','reason','COMPLETED'];(function(_0x159d70,_0x175e77){var _0x5309c5=function(_0x1a2071){while(--_0x1a2071){_0x159d70['push'](_0x159d70['shift']());}};_0x5309c5(++_0x175e77);}(_0x91a3,0x1cf));var _0x391a=function(_0xd9d0bf,_0x1e26b7){_0xd9d0bf=_0xd9d0bf-0x0;var _0x3931e7=_0x91a3[_0xd9d0bf];return _0x3931e7;};'use strict';var _=require('lodash');var moment=require(_0x391a('0x0'));var BPromise=require(_0x391a('0x1'));var util=require(_0x391a('0x2'));var md5=require('md5');var Redis=require(_0x391a('0x3'));var config=require(_0x391a('0x4'));var logger=require(_0x391a('0x5'))(_0x391a('0x6'));var ami=require(_0x391a('0x7'));var QueueReport=require(_0x391a('0x8'));config[_0x391a('0x9')]=_[_0x391a('0xa')](config[_0x391a('0x9')],{'host':_0x391a('0xb'),'port':0x18eb});var io=require(_0x391a('0xc'))(new Redis(config[_0x391a('0x9')]));var Sequence=function(){};Sequence[_0x391a('0xd')]['enqueue']=function(_0x2638a0){this[_0x391a('0xe')]=this[_0x391a('0xe')]?this[_0x391a('0xe')][_0x391a('0xf')](_0x2638a0):_0x2638a0();};function VoiceQueueReport(_0x1f940f){this[_0x391a('0x10')]=new Sequence();this[_0x391a('0x11')]={};this['agents']=_0x1f940f[_0x391a('0x12')];this['channels']=_0x1f940f[_0x391a('0x13')];this[_0x391a('0x14')]=_0x1f940f['voiceQueues'];this['flagQueueSummary']=!![];this[_0x391a('0x15')]=_0x1f940f['campaigns'];this[_0x391a('0x16')]={};ami['on'](_0x391a('0x17'),this[_0x391a('0x18')][_0x391a('0x19')](this));ami['on'](_0x391a('0x1a'),this['syncQueueSummaryComplete'][_0x391a('0x19')](this));ami['on'](_0x391a('0x1b'),this[_0x391a('0x1c')][_0x391a('0x19')](this));ami['on'](_0x391a('0x1d'),this[_0x391a('0x1e')][_0x391a('0x19')](this));ami['on']('queuecallerleave',this[_0x391a('0x1f')][_0x391a('0x19')](this));ami['on'](_0x391a('0x20'),this[_0x391a('0x21')][_0x391a('0x19')](this));ami['on'](_0x391a('0x22'),this[_0x391a('0x23')][_0x391a('0x19')](this));ami['on'](_0x391a('0x24'),this[_0x391a('0x25')][_0x391a('0x19')](this));ami['on'](_0x391a('0x26'),this[_0x391a('0x27')][_0x391a('0x19')](this));ami['on'](_0x391a('0x28'),this[_0x391a('0x29')][_0x391a('0x19')](this));ami['on'](_0x391a('0x2a'),this[_0x391a('0x2b')][_0x391a('0x19')](this));ami['on'](_0x391a('0x2c'),this[_0x391a('0x2d')][_0x391a('0x19')](this));ami['on']('attendedtransfer',this[_0x391a('0x2e')][_0x391a('0x19')](this));ami['on'](_0x391a('0x2f'),this[_0x391a('0x30')][_0x391a('0x19')](this));this[_0x391a('0x31')]();this['loopQueueShow']();}function isNotNull(_0x3dd1d2){return _0x3dd1d2!==null&&!_[_0x391a('0x32')](_0x3dd1d2);}function clearChannels(_0x585660){if(!_[_0x391a('0x33')](_0x585660)){for(var _0x2696d9 in _0x585660){if(_0x585660[_0x391a('0x34')](_0x2696d9)){delete _0x585660[_0x2696d9];}}}}function clearCampaigns(_0x1c1cbf){if(!_['isEmpty'](_0x1c1cbf)){for(var _0x5d98f4 in _0x1c1cbf){if(_0x1c1cbf['hasOwnProperty'](_0x5d98f4)){_0x1c1cbf[_0x5d98f4][_0x391a('0x35')]=0x0;}}}}function clearVoiceQueues(_0x499110){if(!_[_0x391a('0x33')](_0x499110)){for(var _0x274779 in _0x499110){if(_0x499110['hasOwnProperty'](_0x274779)){_0x499110[_0x274779][_0x391a('0x35')]=0x0;_0x499110[_0x274779][_0x391a('0x36')]=0x0;_0x499110[_0x274779]['pTalking']=0x0;_0x499110[_0x274779]['waiting']=0x0;_0x499110[_0x274779][_0x391a('0x37')]=!![];}}}}function clearAgentBooked(_0x14245f){if(!_[_0x391a('0x33')](_0x14245f)){for(var _0x5b534d in _0x14245f){if(_0x14245f[_0x391a('0x34')](_0x5b534d)){_0x14245f[_0x5b534d][_0x391a('0x38')]=!![];}}}}VoiceQueueReport[_0x391a('0xd')][_0x391a('0x39')]=function(){var _0x542227=this;for(var _0x8348f1 in this[_0x391a('0x3a')]){if(this['channels']['hasOwnProperty'](_0x8348f1)&&!this[_0x391a('0x3a')][_0x8348f1][_0x391a('0x3b')]){this[_0x391a('0x10')][_0x391a('0x3c')](function(){if(!_[_0x391a('0x3d')](_0x542227[_0x391a('0x3a')][_0x8348f1])){return ami['Action']({'action':_0x391a('0x3e'),'channel':_0x542227[_0x391a('0x3a')][_0x8348f1][_0x391a('0x3f')]})['catch'](function(_0x33050b){if(_0x33050b['message']===_0x391a('0x40')){setTimeout(function(){if(_0x542227[_0x391a('0x3a')][_0x8348f1]){delete _0x542227[_0x391a('0x3a')][_0x8348f1];logger['error'](_0x391a('0x41'),_0x8348f1);}if(_0x542227[_0x391a('0x11')][_0x8348f1]){delete _0x542227[_0x391a('0x11')][_0x8348f1];logger['error']('[voiceQueueReport][checkQueueReport]',_0x8348f1);}if(_0x542227['variables'][_0x8348f1]){delete _0x542227[_0x391a('0x16')][_0x8348f1];logger[_0x391a('0x42')](_0x391a('0x43'),_0x8348f1);}},0x1f40);}});}});}}};VoiceQueueReport['prototype'][_0x391a('0x29')]=function(){logger['error'](_0x391a('0x44'));clearChannels(this[_0x391a('0x3a')]);this[_0x391a('0x45')](this['queueReports']);clearAgentBooked(this[_0x391a('0x12')]);clearVoiceQueues(this['voiceQueues']);clearCampaigns(this['campaigns']);};VoiceQueueReport['prototype'][_0x391a('0x45')]=function(_0x1db3e8){var _0x34e877=this;if(!_[_0x391a('0x33')](_0x1db3e8)){for(var _0x175945 in _0x1db3e8){if(_0x1db3e8[_0x391a('0x34')](_0x175945)){_0x34e877[_0x391a('0x46')](_0x1db3e8[_0x175945]);delete _0x1db3e8[_0x175945];}}}};function loggerCatch(_0x5bfc91){return function(_0x5c7285){logger['error'](_0x5bfc91,util[_0x391a('0x47')](_0x5c7285,{'showHidden':![],'depth':null}));};}VoiceQueueReport[_0x391a('0xd')][_0x391a('0x48')]=function(_0x105a1f,_0x117485,_0x1351bc){io['to'](_0x105a1f)['emit'](_0x117485,_0x1351bc);};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x49')]=function(_0x3afa74){this['emit'](util['format']('voice:queue:%s',_0x3afa74[_0x391a('0x4a')]),_0x391a('0x4b'),_0x3afa74);};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x46')]=function(_0x347ed4){this[_0x391a('0x48')](util[_0x391a('0x4c')]('voice:queue:%s',_0x347ed4[_0x391a('0x4a')]),'voice_queue_channel:remove',_0x347ed4);};VoiceQueueReport[_0x391a('0xd')]['emitVoiceQueueSummary']=function(_0x5b6fd2){if(_0x5b6fd2[_0x391a('0x4d')]===_0x391a('0x4e')){var _0x55ad1f={'id':_0x5b6fd2['id'],'name':_0x5b6fd2[_0x391a('0x4a')],'strategy':_0x5b6fd2['strategy'],'answered':_0x5b6fd2['answered'],'available':_0x5b6fd2[_0x391a('0x4f')],'loggedIn':_0x5b6fd2[_0x391a('0x50')],'pTalking':_0x5b6fd2['pTalking'],'sumBillable':_0x5b6fd2[_0x391a('0x51')],'sumDuration':_0x5b6fd2[_0x391a('0x52')],'sumHoldTime':_0x5b6fd2[_0x391a('0x53')]||0x0,'talking':_0x5b6fd2[_0x391a('0x36')],'total':_0x5b6fd2[_0x391a('0x54')],'type':_0x5b6fd2[_0x391a('0x4d')],'unmanaged':_0x5b6fd2[_0x391a('0x55')],'abandoned':_0x5b6fd2['abandoned'],'waiting':_0x5b6fd2[_0x391a('0x56')]};if(_0x5b6fd2[_0x391a('0x57')]){_0x55ad1f[_0x391a('0x57')]={'id':_0x5b6fd2['Trunk']['id'],'name':_0x5b6fd2['Trunk'][_0x391a('0x4a')],'active':_0x5b6fd2[_0x391a('0x57')][_0x391a('0x58')],'callerid':_0x5b6fd2[_0x391a('0x57')][_0x391a('0x59')]};}if(_0x5b6fd2[_0x391a('0x5a')]){_0x55ad1f[_0x391a('0x5a')]={'id':_0x5b6fd2[_0x391a('0x5a')]['id'],'name':_0x5b6fd2['Interval'][_0x391a('0x4a')]};}var _0x23c71b=md5(JSON[_0x391a('0x5b')](_0x55ad1f));if(_0x5b6fd2[_0x391a('0x5c')]!==_0x23c71b){_0x5b6fd2[_0x391a('0x5c')]=_0x23c71b;this[_0x391a('0x48')](util[_0x391a('0x4c')]('voice:queue:%s',_0x55ad1f[_0x391a('0x4a')]),'voice_queue:save',_0x55ad1f);}}};VoiceQueueReport[_0x391a('0xd')]['isNotNull']=function(_0x24acdb){return _0x24acdb!==null&&!_[_0x391a('0x32')](_0x24acdb);};VoiceQueueReport['prototype']['loopQueueShow']=function(){var _0x5b89cc=this;setInterval(function(){_0x5b89cc['clearZombieChannels']();ami['Action']({'action':_0x391a('0x5d')})[_0x391a('0x5e')](loggerCatch(_0x391a('0x5f')));},0x2710);};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x31')]=function(){var _0x56eae5=this;setInterval(function(){if(_0x56eae5[_0x391a('0x60')]){return ami[_0x391a('0x61')]({'action':'queuesummary'})[_0x391a('0x62')](function(_0x529df0){_0x56eae5[_0x391a('0x60')]=![];})[_0x391a('0x5e')](loggerCatch(_0x391a('0x63')));}},0x3e8);};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x18')]=function(_0x5a0109){try{if(this[_0x391a('0x64')](_0x5a0109)&&this[_0x391a('0x64')](_0x5a0109[_0x391a('0x65')])){if(this[_0x391a('0x14')][_0x5a0109['queue']]){var _0x21d5d0=_[_0x391a('0x66')](this['channels'],'queue')[_0x5a0109[_0x391a('0x65')]]||0x0;var _0x31134c=_0x21d5d0-_0x5a0109[_0x391a('0x67')];if(this[_0x391a('0x14')][_0x5a0109['queue']][_0x391a('0x56')]!==_[_0x391a('0x68')](_0x5a0109[_0x391a('0x67')])||this['voiceQueues'][_0x5a0109[_0x391a('0x65')]]['loggedIn']!==_[_0x391a('0x68')](_0x5a0109[_0x391a('0x69')])||this[_0x391a('0x14')][_0x5a0109[_0x391a('0x65')]]['available']!==_[_0x391a('0x68')](_0x5a0109[_0x391a('0x4f')])||this['voiceQueues'][_0x5a0109[_0x391a('0x65')]][_0x391a('0x36')]!==_0x31134c){this['voiceQueues'][_0x5a0109[_0x391a('0x65')]][_0x391a('0x56')]=_[_0x391a('0x68')](_0x5a0109['callers']);this['voiceQueues'][_0x5a0109[_0x391a('0x65')]][_0x391a('0x50')]=_[_0x391a('0x68')](_0x5a0109[_0x391a('0x69')]);this[_0x391a('0x14')][_0x5a0109[_0x391a('0x65')]][_0x391a('0x4f')]=_[_0x391a('0x68')](_0x5a0109[_0x391a('0x4f')]);this[_0x391a('0x14')][_0x5a0109[_0x391a('0x65')]][_0x391a('0x36')]=_0x31134c>0x0?_0x31134c:0x0;this[_0x391a('0x14')][_0x5a0109[_0x391a('0x65')]]['talking']=this[_0x391a('0x14')][_0x5a0109['queue']][_0x391a('0x36')]>_[_0x391a('0x68')](_0x5a0109['loggedin'])?_[_0x391a('0x68')](_0x5a0109[_0x391a('0x69')]):this[_0x391a('0x14')][_0x5a0109['queue']][_0x391a('0x36')];this[_0x391a('0x6a')](this[_0x391a('0x14')][_0x5a0109[_0x391a('0x65')]]);}ami[_0x391a('0x48')](_0x391a('0x6b'),this['voiceQueues'][_0x5a0109[_0x391a('0x65')]]);}}}catch(_0x390152){logger[_0x391a('0x42')](_0x391a('0x6c'),util[_0x391a('0x47')](_0x390152,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype']['syncQueueSummaryComplete']=function(_0x25d1a5){this['flagQueueSummary']=!![];};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x6d')]=function(_0x287aa0){};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x1c')]=function(_0x27aed1){try{if(this[_0x391a('0x64')](_0x27aed1)){if(_[_0x391a('0x32')](this[_0x391a('0x11')][_0x27aed1[_0x391a('0x6e')]])){this['queueReports'][_0x27aed1[_0x391a('0x6e')]]=[];this['channels'][_0x27aed1[_0x391a('0x6e')]]={};}var _0x5f3347=new QueueReport();_0x5f3347[_0x391a('0x4a')]=_0x27aed1[_0x391a('0x65')];_0x5f3347[_0x391a('0x4d')]=this['voiceQueues'][_0x5f3347[_0x391a('0x4a')]]&&this[_0x391a('0x14')][_0x5f3347[_0x391a('0x4a')]][_0x391a('0x4d')]?this[_0x391a('0x14')][_0x5f3347[_0x391a('0x4a')]][_0x391a('0x4d')]||_0x391a('0x4e'):_0x391a('0x4e');_0x5f3347['queue']=_0x27aed1['queue'];_0x5f3347[_0x391a('0x6f')]=moment()[_0x391a('0x4c')]('YYYY-MM-DD\x20HH:mm:ss');_0x5f3347[_0x391a('0x70')]=_0x27aed1[_0x391a('0x70')];_0x5f3347[_0x391a('0x71')]=_0x27aed1[_0x391a('0x71')];_[_0x391a('0x72')](_0x5f3347,_[_0x391a('0x73')](_0x27aed1,_[_0x391a('0x74')](_0x5f3347)));this[_0x391a('0x11')][_0x27aed1['uniqueid']][_0x391a('0x75')](_0x5f3347);this[_0x391a('0x3a')][_0x27aed1['uniqueid']]=_0x5f3347;this[_0x391a('0x49')](_0x5f3347);}}catch(_0x3b6f99){logger[_0x391a('0x42')](_0x391a('0x76'),util[_0x391a('0x47')](_0x3b6f99,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype']['syncQueueCallerAbandon']=function(_0x56817d){try{if(this[_0x391a('0x64')](_0x56817d)){if(this['queueReports'][_0x56817d[_0x391a('0x6e')]]){var _0x1733bb=_['last'](this[_0x391a('0x11')][_0x56817d['uniqueid']]);_0x1733bb['queuecallercomplete']=![];_0x1733bb['queuecallercompleteAt']=null;_0x1733bb[_0x391a('0x77')]=_0x56817d[_0x391a('0x77')];_0x1733bb['originalposition']=_0x56817d[_0x391a('0x78')];_0x1733bb['queuecallerabandon']=!![];_0x1733bb['queuecallerabandonAt']=moment()[_0x391a('0x4c')](_0x391a('0x79'));_0x1733bb[_0x391a('0x7a')]=_0x391a('0x7b');_0x1733bb[_0x391a('0x7c')]=null;this[_0x391a('0x3a')][_0x56817d[_0x391a('0x6e')]]=_0x1733bb;this['emitVoiceQueueChannelRemove'](_0x1733bb);}}}catch(_0x553cfb){logger[_0x391a('0x42')](_0x391a('0x7d'),util[_0x391a('0x47')](_0x553cfb,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x1f')]=function(_0x3edc1e){try{if(this['isNotNull'](_0x3edc1e)){if(this[_0x391a('0x11')][_0x3edc1e[_0x391a('0x6e')]]){var _0x2e65ed=_[_0x391a('0x7e')](this[_0x391a('0x11')][_0x3edc1e[_0x391a('0x6e')]]);_0x2e65ed[_0x391a('0x7f')]=moment()[_0x391a('0x4c')](_0x391a('0x79'));_0x2e65ed[_0x391a('0x80')]=_0x3edc1e[_0x391a('0x80')];_0x2e65ed['connectedlinename']=_0x3edc1e[_0x391a('0x81')];this['channels'][_0x3edc1e[_0x391a('0x6e')]]=_0x2e65ed;this[_0x391a('0x49')](_0x2e65ed);}}}catch(_0x4539f2){logger[_0x391a('0x42')](_0x391a('0x82'),util[_0x391a('0x47')](_0x4539f2,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x23')]=function(_0x43238c){try{if(this[_0x391a('0x64')](_0x43238c)){if(this[_0x391a('0x11')][_0x43238c[_0x391a('0x6e')]]){var _0x504377=_['last'](this[_0x391a('0x11')][_0x43238c[_0x391a('0x6e')]]);_0x504377[_0x391a('0x83')]=!![];_0x504377[_0x391a('0x7a')]='COMPLETEDBYAGENT';}}}catch(_0x591f7d){logger['error'](_0x391a('0x84'),util[_0x391a('0x47')](_0x591f7d,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x21')]=function(_0x58e0c2){try{if(this['isNotNull'](_0x58e0c2)){if(this[_0x391a('0x11')][_0x58e0c2[_0x391a('0x6e')]]){var _0x1007c7=_[_0x391a('0x7e')](this[_0x391a('0x11')][_0x58e0c2[_0x391a('0x6e')]]);_0x1007c7[_0x391a('0x1d')]=![];_0x1007c7['queuecallerabandonAt']=null;_0x1007c7[_0x391a('0x85')]=!![];_0x1007c7[_0x391a('0x7c')]=_0x58e0c2[_0x391a('0x86')];_0x1007c7[_0x391a('0x77')]=_0x58e0c2[_0x391a('0x77')];_0x1007c7[_0x391a('0x83')]=!![];_0x1007c7[_0x391a('0x87')]=![];_0x1007c7[_0x391a('0x88')]=null;if(!_0x1007c7[_0x391a('0x89')]){if(_0x58e0c2[_0x391a('0x8a')]=='transfer'){_0x1007c7[_0x391a('0x7a')]=_0x391a('0x8b');}else{if(_[_0x391a('0x8c')](_0x58e0c2['channel'][_0x391a('0x8d')](),'local/')){if(this[_0x391a('0x11')][_0x58e0c2[_0x391a('0x8e')]]){var _0x255190=_['last'](this[_0x391a('0x11')][_0x58e0c2[_0x391a('0x8e')]]);_0x255190[_0x391a('0x83')]=![];_0x255190['queuecallerexit']=!![];_0x255190[_0x391a('0x88')]=moment(_0x1007c7[_0x391a('0x6f')])[_0x391a('0x8f')](_0x58e0c2[_0x391a('0x77')],'seconds')[_0x391a('0x4c')](_0x391a('0x79'));_0x255190[_0x391a('0x7a')]='FORWARDTRANSFER';_0x255190['transfer']=!![];_0x255190[_0x391a('0x90')]=_0x391a('0x91');_0x255190[_0x391a('0x92')]=_0x58e0c2['destexten'];_0x255190[_0x391a('0x93')]=_0x58e0c2[_0x391a('0x6e')];var _0x59f586=this[_0x391a('0x11')][_0x58e0c2[_0x391a('0x8e')]];this[_0x391a('0x11')][_0x58e0c2[_0x391a('0x8e')]]=this[_0x391a('0x11')][_0x58e0c2[_0x391a('0x6e')]];this['queueReports'][_0x58e0c2[_0x391a('0x6e')]]=_0x59f586;}}else{_0x1007c7[_0x391a('0x7a')]=_0x391a('0x94')+_0x58e0c2[_0x391a('0x8a')]['toUpperCase']();}}}this[_0x391a('0x3a')][_0x58e0c2[_0x391a('0x6e')]]=_0x1007c7;this['emitVoiceQueueChannelRemove'](_0x1007c7);}}}catch(_0x4476a7){logger[_0x391a('0x42')](_0x391a('0x95'),util['inspect'](_0x4476a7,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x25')]=function(_0x272c6a){try{if(this[_0x391a('0x64')](_0x272c6a)){this[_0x391a('0x96')](_0x272c6a[_0x391a('0x6e')],_[_0x391a('0x74')](_0x272c6a['variable'])[0x0],_0x272c6a[_0x391a('0x97')]);if(this[_0x391a('0x11')][_0x272c6a[_0x391a('0x6e')]]){var _0x49c347=_['last'](this['queueReports'][_0x272c6a[_0x391a('0x6e')]]);if(_0x49c347){if(this[_0x391a('0x64')](_0x272c6a[_0x391a('0x98')])&&this[_0x391a('0x64')](_0x272c6a['variable']['queuestatus'])){switch(_0x272c6a['value']){case _0x391a('0x99'):_0x49c347[_0x391a('0x87')]=![];_0x49c347[_0x391a('0x88')]=null;break;default:_0x49c347['queuecallerexit']=!![];_0x49c347['queuecallerexitAt']=moment()[_0x391a('0x4c')]('YYYY-MM-DD\x20HH:mm:ss');_0x49c347[_0x391a('0x7f')]=moment()[_0x391a('0x4c')]('YYYY-MM-DD\x20HH:mm:ss');}_0x49c347[_0x391a('0x1d')]=![];_0x49c347['queuecallerabandonAt']=null;_0x49c347['queuecallerexitreason']=_0x272c6a[_0x391a('0x97')];this[_0x391a('0x3a')][_0x272c6a[_0x391a('0x6e')]]=_0x49c347;this[_0x391a('0x46')](_0x49c347);}else if(this['isNotNull'](_0x272c6a[_0x391a('0x98')])&&this[_0x391a('0x64')](_0x272c6a[_0x391a('0x98')][_0x391a('0x9a')])){if(!_0x49c347['queuecallerabandon']){_0x49c347[_0x391a('0x87')]=!![];_0x49c347[_0x391a('0x88')]=moment()[_0x391a('0x4c')](_0x391a('0x79'));_0x49c347['queuecallerexitreason']='EXITWITHKEY';_0x49c347[_0x391a('0x7f')]=moment()[_0x391a('0x4c')](_0x391a('0x79'));this['channels'][_0x272c6a[_0x391a('0x6e')]]=_0x49c347;}}_0x49c347['variables']=this[_0x391a('0x16')][_0x272c6a['uniqueid']];}}}}catch(_0x1b63b0){logger[_0x391a('0x42')](_0x391a('0x9b'),util[_0x391a('0x47')](_0x1b63b0,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0x391a('0x96')]=function(_0x34d1e6,_0x4fdb88,_0x403882){var _0x471077=[_0x391a('0x9c'),_0x391a('0x9d'),_0x391a('0x9e'),_0x391a('0x9f'),_0x391a('0xa0'),_0x391a('0xa1'),_0x391a('0xa2'),_0x391a('0xa3'),_0x391a('0xa4'),_0x391a('0xa5'),_0x391a('0xa6'),_0x391a('0xa7'),_0x391a('0xa8'),_0x391a('0xa9'),_0x391a('0xaa'),_0x391a('0xab'),'membername',_0x391a('0xac'),'memberrealtime'];if(!_[_0x391a('0x3d')](_0x4fdb88)&&!_[_0x391a('0xad')](_0x471077,_0x4fdb88)){if(_['isUndefined'](this[_0x391a('0x16')][_0x34d1e6])){this[_0x391a('0x16')][_0x34d1e6]={};}this[_0x391a('0x16')][_0x34d1e6][_0x4fdb88]=_0x403882;}};VoiceQueueReport[_0x391a('0xd')]['syncHangup']=function(_0xc0b57){try{if(this['isNotNull'](_0xc0b57)){if(this[_0x391a('0x11')][_0xc0b57[_0x391a('0x6e')]]){for(var _0x464a63=0x0,_0x43b977={};_0x464a63<this['queueReports'][_0xc0b57['uniqueid']][_0x391a('0xae')];_0x464a63+=0x1){_0x43b977=this[_0x391a('0x11')][_0xc0b57[_0x391a('0x6e')]][_0x464a63];if(this[_0x391a('0x14')][_0x43b977[_0x391a('0x65')]]){if(_0x43b977[_0x391a('0x87')]){this['voiceQueues'][_0x43b977[_0x391a('0x65')]][_0x391a('0x55')]+=0x1;}if(_0x43b977[_0x391a('0x1d')]){this[_0x391a('0x14')][_0x43b977['queue']][_0x391a('0xaf')]+=0x1;}this[_0x391a('0x14')][_0x43b977['queue']][_0x391a('0x53')]+=moment(_0x43b977[_0x391a('0x7f')])['diff'](_0x43b977[_0x391a('0x6f')],'seconds')||0x0;if(_0x464a63===this[_0x391a('0x11')][_0xc0b57[_0x391a('0x6e')]][_0x391a('0xae')]-0x1){this[_0x391a('0x14')][_0x43b977['queue']]['sumDuration']+=moment()[_0x391a('0xb0')](0x0)[_0x391a('0xb1')](_0x43b977[_0x391a('0x6f')],'seconds');this[_0x391a('0x14')][_0x43b977[_0x391a('0x65')]][_0x391a('0x54')]+=0x1;if(_0x43b977[_0x391a('0x83')]){this[_0x391a('0x14')][_0x43b977['queue']][_0x391a('0xb2')]+=0x1;this[_0x391a('0x14')][_0x43b977[_0x391a('0x65')]][_0x391a('0x51')]+=moment()['milliseconds'](0x0)[_0x391a('0xb1')](_0x43b977[_0x391a('0x7f')],'seconds');_0x43b977['queuecallercompleteAt']=moment()[_0x391a('0x4c')]('YYYY-MM-DD\x20HH:mm:ss');_0x43b977['queuecallerexit']=![];_0x43b977['queuecallerexitAt']=null;}if(_0x43b977[_0x391a('0x87')]){_0x43b977[_0x391a('0xb3')]='unmanaged';ami['emit'](_0x391a('0xb4'),_0x43b977);}if(_0x43b977[_0x391a('0x1d')]){_0x43b977['lastevent']=_0x391a('0xaf');ami['emit'](_0x391a('0xb5'),_0x43b977);}}else{this[_0x391a('0x14')][_0x43b977['queue']][_0x391a('0x52')]+=this['voiceQueues'][_0x43b977[_0x391a('0x65')]][_0x391a('0x53')];}this[_0x391a('0x3a')][_0xc0b57['uniqueid']]=_0x43b977;this[_0x391a('0x46')](_0x43b977);this[_0x391a('0x6a')](this[_0x391a('0x14')][_0x43b977[_0x391a('0x65')]]);}}ami[_0x391a('0x48')]('custom:voiceQueueReport',this[_0x391a('0x11')][_0xc0b57['uniqueid']]);delete this[_0x391a('0x11')][_0xc0b57[_0x391a('0x6e')]];delete this['channels'][_0xc0b57[_0x391a('0x6e')]];}if(this[_0x391a('0x16')][_0xc0b57[_0x391a('0x6e')]]){delete this[_0x391a('0x16')][_0xc0b57[_0x391a('0x6e')]];}}}catch(_0x3bccdc){logger[_0x391a('0x42')](_0x391a('0xb6'),util[_0x391a('0x47')](_0x3bccdc,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x2e')]=function(_0x12baa2){try{if(this[_0x391a('0x64')](_0x12baa2)){var _0x78edf7;if(this[_0x391a('0x11')][_0x12baa2[_0x391a('0xb7')]]){_0x78edf7=_[_0x391a('0x7e')](this[_0x391a('0x11')][_0x12baa2[_0x391a('0xb7')]]);_0x78edf7[_0x391a('0x92')]=_0x12baa2[_0x391a('0xb8')];_0x78edf7[_0x391a('0x93')]=_0x12baa2['secondtransfereruniqueid'];_0x78edf7[_0x391a('0x7a')]=_0x391a('0xb9');_0x78edf7[_0x391a('0x89')]=!![];_0x78edf7['transfertype']=_0x391a('0xba');if(this[_0x391a('0x11')][_0x12baa2[_0x391a('0xbb')]]){var _0x3977d0=this[_0x391a('0x11')][_0x12baa2[_0x391a('0xbb')]];this[_0x391a('0x11')][_0x12baa2[_0x391a('0xbb')]]=this['queueReports'][_0x12baa2['transfereeuniqueid']];this[_0x391a('0x11')][_0x12baa2[_0x391a('0xb7')]]=_0x3977d0;var _0x33d3b6=_[_0x391a('0x7e')](this['queueReports'][_0x12baa2[_0x391a('0xb7')]]);_0x33d3b6['switch']=!![];}}else if(this[_0x391a('0x11')][_0x12baa2['transfertargetuniqueid']]){_0x78edf7=_[_0x391a('0x7e')](this['queueReports'][_0x12baa2[_0x391a('0xbc')]]);_0x78edf7[_0x391a('0x92')]=_0x12baa2['origtransfererexten'];_0x78edf7[_0x391a('0x93')]=_0x12baa2[_0x391a('0xbd')];_0x78edf7[_0x391a('0x7a')]=_0x391a('0xb9');_0x78edf7[_0x391a('0x89')]=!![];_0x78edf7[_0x391a('0x90')]=_0x391a('0xba');if(this[_0x391a('0x11')][_0x12baa2['origtransfereruniqueid']]){var _0x3977d0=this[_0x391a('0x11')][_0x12baa2['origtransfereruniqueid']];this[_0x391a('0x11')][_0x12baa2[_0x391a('0xbd')]]=this[_0x391a('0x11')][_0x12baa2[_0x391a('0xbc')]];this[_0x391a('0x11')][_0x12baa2[_0x391a('0xbc')]]=_0x3977d0;var _0x33d3b6=_[_0x391a('0x7e')](this[_0x391a('0x11')][_0x12baa2['transfertargetuniqueid']]);_0x33d3b6[_0x391a('0x3b')]=!![];}}}}catch(_0x4e7c4f){logger[_0x391a('0x42')]('[syncAttendedTransfer][VoiceQueueReport]',util[_0x391a('0x47')](_0x4e7c4f,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x30')]=function(_0x267f68){try{if(this['isNotNull'](_0x267f68)){if(this[_0x391a('0x11')][_0x267f68[_0x391a('0xb7')]]){var _0x36e380=_['last'](this['queueReports'][_0x267f68[_0x391a('0xb7')]]);_0x36e380[_0x391a('0x7a')]=_0x391a('0xbe');_0x36e380[_0x391a('0x89')]=!![];_0x36e380[_0x391a('0x90')]=_0x391a('0xbf');_0x36e380[_0x391a('0x92')]=_0x267f68[_0x391a('0xc0')];_0x36e380[_0x391a('0x93')]=_0x267f68[_0x391a('0xb7')];this[_0x391a('0x27')]({'event':_0x391a('0xc1'),'uniqueid':_0x267f68[_0x391a('0xb7')],'context':_0x267f68[_0x391a('0xc2')],'channel':_0x267f68[_0x391a('0xc3')]});}}}catch(_0xd182e9){logger[_0x391a('0x42')](_0x391a('0xc4'),util[_0x391a('0x47')](_0xd182e9,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x2b')]=function(_0x3a3caa){try{if(this[_0x391a('0x64')](_0x3a3caa)){if(this[_0x391a('0x11')][_0x3a3caa[_0x391a('0x6e')]]){var _0x3858ef=_[_0x391a('0x7e')](this[_0x391a('0x11')][_0x3a3caa['uniqueid']]);if(!_[_0x391a('0x3d')](_0x3858ef['queuecallerleaveAt'])){_0x3858ef[_0x391a('0xc5')]=moment()['format'](_0x391a('0x79'));}}}}catch(_0x43f310){logger['error'](_0x391a('0xc6'),util['inspect'](_0x43f310,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x391a('0xd')][_0x391a('0x2d')]=function(_0x25906c){try{if(this['isNotNull'](_0x25906c)){if(this[_0x391a('0x11')][_0x25906c[_0x391a('0x6e')]]){var _0x24ef37=_['last'](this[_0x391a('0x11')][_0x25906c[_0x391a('0x6e')]]);if(!_['isNil'](_0x24ef37[_0x391a('0xc5')])){_0x24ef37['mohtime']+=moment()[_0x391a('0xb0')](0x0)[_0x391a('0xb1')](_0x24ef37[_0x391a('0xc5')],_0x391a('0xc7'));delete _0x24ef37[_0x391a('0xc5')];}}}}catch(_0x29c5c1){logger[_0x391a('0x42')](_0x391a('0xc8'),util['inspect'](_0x29c5c1,{'showHidden':![],'depth':null}));}};module['exports']=VoiceQueueReport;
\ No newline at end of file
+var _0x036e=['isEmpty','hasOwnProperty','originated','talking','pTalking','waiting','queueStatusComplete','unlockRR','clearZombieChannels','switch','sequence','enqueue','Action','channel','catch','No\x20such\x20channel','error','[voiceQueueReport][checkChannel]','[voiceQueueReport][checkVariables]','syncFullyBooted','[FullyBooted]\x20clear\x20realtime','clearQueueReport','emitVoiceQueueChannelRemove','inspect','emit','format','voice:queue:%s','name','voice_queue_channel:remove','emitVoiceQueueSummary','type','inbound','strategy','answered','available','sumBillable','sumDuration','sumHoldTime','unmanaged','abandoned','Trunk','active','callerid','Interval','isNotNull','loopQueueShow','queues','[queues]','then','syncQueueSummary','queue','countBy','toNumber','callers','loggedIn','loggedin','custom:queuesummary','[syncQueueSummary][VoiceQueueReport]','syncNewExten','uniqueid','queuecallerjoinAt','YYYY-MM-DD\x20HH:mm:ss','position','count','pick','keys','emitVoiceQueueChannelSave','last','queuecallercomplete','queuecallercompleteAt','holdtime','ABANDONED','[syncQueueCallerAbandon][VoiceQueueReport]','syncQueueCallerLeave','connectedlinenum','connectedlinename','[syncQueueCallerLeave][VoiceQueueReport]','syncAgentConnect','COMPLETEDBYAGENT','syncAgentComplete','assigned','membername','queuecallerexitAt','transfer','reason','COMPLETED','startsWith','toLowerCase','local/','linkedid','queuecallerexit','add','queuecallerexitreason','FORWARDTRANSFER','FORWARD','transferexten','destexten','transferuniqueid','COMPLETEDBY','toUpperCase','syncVarSet','addVariable','variable','value','queuestatus','CONTINUE','queuecallerabandonAt','queueposition','EXITWITHKEY','queuecallerleaveAt','[syncVarSet][VoiceQueueReport]','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrtt','rtpaudioqosrttbridged','sipcallid','sipuri','bridgepeer','bridgepvtcallid','memberinterface','memberlastcall','memberpenalty','memberrealtime','isNil','includes','length','seconds','milliseconds','diff','total','lastevent','custom:queuecallerunmanaged','custom:queuecallerabandon','[syncHangup][VoiceQueueReport]','transfereeuniqueid','secondtransfererexten','ATTENDEDTRANSFER','transfertype','ATTENDED','secondtransfereruniqueid','transfertargetuniqueid','origtransfereruniqueid','[syncAttendedTransfer][VoiceQueueReport]','syncBlindTransfer','BLINDTRANSFER','BLIND','extension','context','transfererchannel','mohstarttime','[syncMusicOnHoldStart][VoiceQueueReport]','mohtime','[syncMusicOnHoldStop][VoiceQueueReport]','lodash','moment','util','md5','../../../config/environment','../../../config/logger','../ami','defaults','redis','localhost','prototype','tail','queueReports','agents','channels','queueChannels','voiceQueues','flagQueueSummary','campaigns','variables','queuesummary','bind','queuesummarycomplete','queuecallerjoin','syncQueueCallerJoin','queuecallerabandon','syncQueueCallerAbandon','agentcomplete','agentconnect','varset','syncHangup','fullybooted','musiconholdstart','syncMusicOnHoldStart','musiconholdstop','syncMusicOnHoldStop','syncAttendedTransfer','blindtransfer','loopQueueSummary','isUndefined'];(function(_0x226dbe,_0x47cb91){var _0xda773e=function(_0x5dabfa){while(--_0x5dabfa){_0x226dbe['push'](_0x226dbe['shift']());}};_0xda773e(++_0x47cb91);}(_0x036e,0x160));var _0xe036=function(_0x27bc3f,_0x311586){_0x27bc3f=_0x27bc3f-0x0;var _0x5a11a2=_0x036e[_0x27bc3f];return _0x5a11a2;};'use strict';var _=require(_0xe036('0x0'));var moment=require(_0xe036('0x1'));var BPromise=require('bluebird');var util=require(_0xe036('0x2'));var md5=require(_0xe036('0x3'));var Redis=require('ioredis');var config=require(_0xe036('0x4'));var logger=require(_0xe036('0x5'))('ami');var ami=require(_0xe036('0x6'));var QueueReport=require('../model/queueReport');config['redis']=_[_0xe036('0x7')](config[_0xe036('0x8')],{'host':_0xe036('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var Sequence=function(){};Sequence[_0xe036('0xa')]['enqueue']=function(_0x23b261){this[_0xe036('0xb')]=this['tail']?this[_0xe036('0xb')]['finally'](_0x23b261):_0x23b261();};function VoiceQueueReport(_0x37ea33){this['sequence']=new Sequence();this[_0xe036('0xc')]={};this['agents']=_0x37ea33[_0xe036('0xd')];this[_0xe036('0xe')]=_0x37ea33[_0xe036('0xf')];this[_0xe036('0x10')]=_0x37ea33[_0xe036('0x10')];this[_0xe036('0x11')]=!![];this[_0xe036('0x12')]=_0x37ea33['campaigns'];this[_0xe036('0x13')]={};ami['on'](_0xe036('0x14'),this['syncQueueSummary'][_0xe036('0x15')](this));ami['on'](_0xe036('0x16'),this['syncQueueSummaryComplete']['bind'](this));ami['on'](_0xe036('0x17'),this[_0xe036('0x18')][_0xe036('0x15')](this));ami['on'](_0xe036('0x19'),this[_0xe036('0x1a')][_0xe036('0x15')](this));ami['on']('queuecallerleave',this['syncQueueCallerLeave'][_0xe036('0x15')](this));ami['on'](_0xe036('0x1b'),this['syncAgentComplete'][_0xe036('0x15')](this));ami['on'](_0xe036('0x1c'),this['syncAgentConnect'][_0xe036('0x15')](this));ami['on'](_0xe036('0x1d'),this['syncVarSet']['bind'](this));ami['on']('hangup',this[_0xe036('0x1e')][_0xe036('0x15')](this));ami['on'](_0xe036('0x1f'),this['syncFullyBooted']['bind'](this));ami['on'](_0xe036('0x20'),this[_0xe036('0x21')][_0xe036('0x15')](this));ami['on'](_0xe036('0x22'),this[_0xe036('0x23')][_0xe036('0x15')](this));ami['on']('attendedtransfer',this[_0xe036('0x24')][_0xe036('0x15')](this));ami['on'](_0xe036('0x25'),this['syncBlindTransfer']['bind'](this));this[_0xe036('0x26')]();this['loopQueueShow']();}function isNotNull(_0x43f7af){return _0x43f7af!==null&&!_[_0xe036('0x27')](_0x43f7af);}function clearChannels(_0x6b91a8){if(!_['isEmpty'](_0x6b91a8)){for(var _0x70a04b in _0x6b91a8){if(_0x6b91a8['hasOwnProperty'](_0x70a04b)){delete _0x6b91a8[_0x70a04b];}}}}function clearCampaigns(_0x378a3a){if(!_[_0xe036('0x28')](_0x378a3a)){for(var _0x460576 in _0x378a3a){if(_0x378a3a[_0xe036('0x29')](_0x460576)){_0x378a3a[_0x460576][_0xe036('0x2a')]=0x0;}}}}function clearVoiceQueues(_0x3be25f){if(!_[_0xe036('0x28')](_0x3be25f)){for(var _0x38903b in _0x3be25f){if(_0x3be25f[_0xe036('0x29')](_0x38903b)){_0x3be25f[_0x38903b][_0xe036('0x2a')]=0x0;_0x3be25f[_0x38903b][_0xe036('0x2b')]=0x0;_0x3be25f[_0x38903b][_0xe036('0x2c')]=0x0;_0x3be25f[_0x38903b][_0xe036('0x2d')]=0x0;_0x3be25f[_0x38903b][_0xe036('0x2e')]=!![];}}}}function clearAgentBooked(_0x2b767e){if(!_[_0xe036('0x28')](_0x2b767e)){for(var _0x17a0d6 in _0x2b767e){if(_0x2b767e[_0xe036('0x29')](_0x17a0d6)){_0x2b767e[_0x17a0d6][_0xe036('0x2f')]=!![];}}}}VoiceQueueReport[_0xe036('0xa')][_0xe036('0x30')]=function(){var _0x4ced38=this;for(var _0x522299 in this[_0xe036('0xe')]){if(this[_0xe036('0xe')][_0xe036('0x29')](_0x522299)&&!this[_0xe036('0xe')][_0x522299][_0xe036('0x31')]){this[_0xe036('0x32')][_0xe036('0x33')](function(){if(!_['isNil'](_0x4ced38['channels'][_0x522299])){return ami[_0xe036('0x34')]({'action':'status','channel':_0x4ced38['channels'][_0x522299][_0xe036('0x35')]})[_0xe036('0x36')](function(_0x79f034){if(_0x79f034['message']===_0xe036('0x37')){setTimeout(function(){if(_0x4ced38['channels'][_0x522299]){delete _0x4ced38['channels'][_0x522299];logger[_0xe036('0x38')](_0xe036('0x39'),_0x522299);}if(_0x4ced38['queueReports'][_0x522299]){delete _0x4ced38['queueReports'][_0x522299];logger[_0xe036('0x38')]('[voiceQueueReport][checkQueueReport]',_0x522299);}if(_0x4ced38[_0xe036('0x13')][_0x522299]){delete _0x4ced38['variables'][_0x522299];logger['error'](_0xe036('0x3a'),_0x522299);}},0x1f40);}});}});}}};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x3b')]=function(){logger[_0xe036('0x38')](_0xe036('0x3c'));clearChannels(this[_0xe036('0xe')]);this['clearQueueReport'](this['queueReports']);clearAgentBooked(this[_0xe036('0xd')]);clearVoiceQueues(this[_0xe036('0x10')]);clearCampaigns(this[_0xe036('0x12')]);};VoiceQueueReport['prototype'][_0xe036('0x3d')]=function(_0x5eccb9){var _0x579af1=this;if(!_[_0xe036('0x28')](_0x5eccb9)){for(var _0x1585a8 in _0x5eccb9){if(_0x5eccb9[_0xe036('0x29')](_0x1585a8)){_0x579af1[_0xe036('0x3e')](_0x5eccb9[_0x1585a8]);delete _0x5eccb9[_0x1585a8];}}}};function loggerCatch(_0xef45cf){return function(_0x57aea6){logger[_0xe036('0x38')](_0xef45cf,util[_0xe036('0x3f')](_0x57aea6,{'showHidden':![],'depth':null}));};}VoiceQueueReport[_0xe036('0xa')]['emit']=function(_0x53410d,_0x41b638,_0x5c24e4){io['to'](_0x53410d)['emit'](_0x41b638,_0x5c24e4);};VoiceQueueReport['prototype']['emitVoiceQueueChannelSave']=function(_0x23791b){this[_0xe036('0x40')](util[_0xe036('0x41')](_0xe036('0x42'),_0x23791b['name']),'voice_queue_channel:save',_0x23791b);};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x3e')]=function(_0x404330){this[_0xe036('0x40')](util[_0xe036('0x41')](_0xe036('0x42'),_0x404330[_0xe036('0x43')]),_0xe036('0x44'),_0x404330);};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x45')]=function(_0x45bedf){if(_0x45bedf[_0xe036('0x46')]===_0xe036('0x47')){var _0x58a934={'id':_0x45bedf['id'],'name':_0x45bedf[_0xe036('0x43')],'strategy':_0x45bedf[_0xe036('0x48')],'answered':_0x45bedf[_0xe036('0x49')],'available':_0x45bedf[_0xe036('0x4a')],'loggedIn':_0x45bedf['loggedIn'],'pTalking':_0x45bedf[_0xe036('0x2c')],'sumBillable':_0x45bedf[_0xe036('0x4b')],'sumDuration':_0x45bedf[_0xe036('0x4c')],'sumHoldTime':_0x45bedf[_0xe036('0x4d')]||0x0,'talking':_0x45bedf[_0xe036('0x2b')],'total':_0x45bedf['total'],'type':_0x45bedf[_0xe036('0x46')],'unmanaged':_0x45bedf[_0xe036('0x4e')],'abandoned':_0x45bedf[_0xe036('0x4f')],'waiting':_0x45bedf['waiting']};if(_0x45bedf[_0xe036('0x50')]){_0x58a934[_0xe036('0x50')]={'id':_0x45bedf[_0xe036('0x50')]['id'],'name':_0x45bedf['Trunk'][_0xe036('0x43')],'active':_0x45bedf['Trunk'][_0xe036('0x51')],'callerid':_0x45bedf[_0xe036('0x50')][_0xe036('0x52')]};}if(_0x45bedf[_0xe036('0x53')]){_0x58a934[_0xe036('0x53')]={'id':_0x45bedf['Interval']['id'],'name':_0x45bedf[_0xe036('0x53')]['name']};}var _0x469abd=md5(JSON['stringify'](_0x58a934));if(_0x45bedf[_0xe036('0x3')]!==_0x469abd){_0x45bedf[_0xe036('0x3')]=_0x469abd;this[_0xe036('0x40')](util[_0xe036('0x41')](_0xe036('0x42'),_0x58a934[_0xe036('0x43')]),'voice_queue:save',_0x58a934);}}};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x54')]=function(_0x240450){return _0x240450!==null&&!_[_0xe036('0x27')](_0x240450);};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x55')]=function(){var _0x5352ef=this;setInterval(function(){_0x5352ef[_0xe036('0x30')]();ami['Action']({'action':_0xe036('0x56')})[_0xe036('0x36')](loggerCatch(_0xe036('0x57')));},0x2710);};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x26')]=function(){var _0x452d75=this;setInterval(function(){if(_0x452d75[_0xe036('0x11')]){return ami['Action']({'action':_0xe036('0x14')})[_0xe036('0x58')](function(_0x8a7b31){_0x452d75[_0xe036('0x11')]=![];})['catch'](loggerCatch('[queuesummary]'));}},0x3e8);};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x59')]=function(_0x2d756b){try{if(this[_0xe036('0x54')](_0x2d756b)&&this[_0xe036('0x54')](_0x2d756b['queue'])){if(this['voiceQueues'][_0x2d756b[_0xe036('0x5a')]]){var _0x3476dd=_[_0xe036('0x5b')](this[_0xe036('0xe')],_0xe036('0x5a'))[_0x2d756b[_0xe036('0x5a')]]||0x0;var _0x1344eb=_0x3476dd-_0x2d756b['callers'];if(this[_0xe036('0x10')][_0x2d756b[_0xe036('0x5a')]][_0xe036('0x2d')]!==_[_0xe036('0x5c')](_0x2d756b[_0xe036('0x5d')])||this['voiceQueues'][_0x2d756b[_0xe036('0x5a')]][_0xe036('0x5e')]!==_[_0xe036('0x5c')](_0x2d756b[_0xe036('0x5f')])||this['voiceQueues'][_0x2d756b[_0xe036('0x5a')]][_0xe036('0x4a')]!==_['toNumber'](_0x2d756b['available'])||this[_0xe036('0x10')][_0x2d756b[_0xe036('0x5a')]]['talking']!==_0x1344eb){this[_0xe036('0x10')][_0x2d756b[_0xe036('0x5a')]][_0xe036('0x2d')]=_[_0xe036('0x5c')](_0x2d756b[_0xe036('0x5d')]);this[_0xe036('0x10')][_0x2d756b[_0xe036('0x5a')]]['loggedIn']=_[_0xe036('0x5c')](_0x2d756b[_0xe036('0x5f')]);this['voiceQueues'][_0x2d756b[_0xe036('0x5a')]][_0xe036('0x4a')]=_[_0xe036('0x5c')](_0x2d756b[_0xe036('0x4a')]);this[_0xe036('0x10')][_0x2d756b[_0xe036('0x5a')]][_0xe036('0x2b')]=_0x1344eb>0x0?_0x1344eb:0x0;this[_0xe036('0x10')][_0x2d756b[_0xe036('0x5a')]][_0xe036('0x2b')]=this[_0xe036('0x10')][_0x2d756b[_0xe036('0x5a')]][_0xe036('0x2b')]>_[_0xe036('0x5c')](_0x2d756b['loggedin'])?_[_0xe036('0x5c')](_0x2d756b[_0xe036('0x5f')]):this[_0xe036('0x10')][_0x2d756b[_0xe036('0x5a')]]['talking'];this[_0xe036('0x45')](this['voiceQueues'][_0x2d756b[_0xe036('0x5a')]]);}ami[_0xe036('0x40')](_0xe036('0x60'),this['voiceQueues'][_0x2d756b[_0xe036('0x5a')]]);}}}catch(_0x5ab05a){logger[_0xe036('0x38')](_0xe036('0x61'),util[_0xe036('0x3f')](_0x5ab05a,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xe036('0xa')]['syncQueueSummaryComplete']=function(_0x513694){this[_0xe036('0x11')]=!![];};VoiceQueueReport['prototype'][_0xe036('0x62')]=function(_0x507e7f){};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x18')]=function(_0x48f634){try{if(this[_0xe036('0x54')](_0x48f634)){if(_[_0xe036('0x27')](this[_0xe036('0xc')][_0x48f634['uniqueid']])){this[_0xe036('0xc')][_0x48f634[_0xe036('0x63')]]=[];this[_0xe036('0xe')][_0x48f634[_0xe036('0x63')]]={};}var _0x3642a1=new QueueReport();_0x3642a1['name']=_0x48f634[_0xe036('0x5a')];_0x3642a1[_0xe036('0x46')]=this[_0xe036('0x10')][_0x3642a1[_0xe036('0x43')]]&&this[_0xe036('0x10')][_0x3642a1['name']][_0xe036('0x46')]?this['voiceQueues'][_0x3642a1[_0xe036('0x43')]]['type']||_0xe036('0x47'):_0xe036('0x47');_0x3642a1[_0xe036('0x5a')]=_0x48f634[_0xe036('0x5a')];_0x3642a1[_0xe036('0x64')]=moment()[_0xe036('0x41')](_0xe036('0x65'));_0x3642a1['position']=_0x48f634[_0xe036('0x66')];_0x3642a1['count']=_0x48f634[_0xe036('0x67')];_['merge'](_0x3642a1,_[_0xe036('0x68')](_0x48f634,_[_0xe036('0x69')](_0x3642a1)));this[_0xe036('0xc')][_0x48f634[_0xe036('0x63')]]['push'](_0x3642a1);this[_0xe036('0xe')][_0x48f634['uniqueid']]=_0x3642a1;this[_0xe036('0x6a')](_0x3642a1);}}catch(_0x4333cc){logger['error']('[syncQueueCallerJoin][VoiceQueueReport]',util['inspect'](_0x4333cc,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x1a')]=function(_0x373331){try{if(this['isNotNull'](_0x373331)){if(this[_0xe036('0xc')][_0x373331['uniqueid']]){var _0x5d5306=_[_0xe036('0x6b')](this[_0xe036('0xc')][_0x373331[_0xe036('0x63')]]);_0x5d5306[_0xe036('0x6c')]=![];_0x5d5306[_0xe036('0x6d')]=null;_0x5d5306[_0xe036('0x6e')]=_0x373331[_0xe036('0x6e')];_0x5d5306['originalposition']=_0x373331['originalposition'];_0x5d5306['queuecallerabandon']=!![];_0x5d5306['queuecallerabandonAt']=moment()[_0xe036('0x41')](_0xe036('0x65'));_0x5d5306['queuecallerexitreason']=_0xe036('0x6f');_0x5d5306['lastAssignedTo']=null;this['channels'][_0x373331['uniqueid']]=_0x5d5306;this[_0xe036('0x3e')](_0x5d5306);}}}catch(_0x1908b2){logger[_0xe036('0x38')](_0xe036('0x70'),util[_0xe036('0x3f')](_0x1908b2,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x71')]=function(_0xf1ca1f){try{if(this[_0xe036('0x54')](_0xf1ca1f)){if(this[_0xe036('0xc')][_0xf1ca1f['uniqueid']]){var _0x256eb4=_[_0xe036('0x6b')](this['queueReports'][_0xf1ca1f[_0xe036('0x63')]]);_0x256eb4['queuecallerleaveAt']=moment()[_0xe036('0x41')]('YYYY-MM-DD\x20HH:mm:ss');_0x256eb4[_0xe036('0x72')]=_0xf1ca1f[_0xe036('0x72')];_0x256eb4[_0xe036('0x73')]=_0xf1ca1f['connectedlinename'];this[_0xe036('0xe')][_0xf1ca1f['uniqueid']]=_0x256eb4;this[_0xe036('0x6a')](_0x256eb4);}}}catch(_0xe8d885){logger[_0xe036('0x38')](_0xe036('0x74'),util[_0xe036('0x3f')](_0xe8d885,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x75')]=function(_0x441df0){try{if(this[_0xe036('0x54')](_0x441df0)){if(this[_0xe036('0xc')][_0x441df0['uniqueid']]){var _0x1cc626=_[_0xe036('0x6b')](this[_0xe036('0xc')][_0x441df0[_0xe036('0x63')]]);_0x1cc626[_0xe036('0x6c')]=!![];_0x1cc626['queuecallerexitreason']=_0xe036('0x76');}}}catch(_0x1befce){logger[_0xe036('0x38')]('[syncAgentConnect][VoiceQueueReport]',util[_0xe036('0x3f')](_0x1befce,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x77')]=function(_0x934c1){try{if(this[_0xe036('0x54')](_0x934c1)){if(this['queueReports'][_0x934c1[_0xe036('0x63')]]){var _0x55ecf8=_[_0xe036('0x6b')](this[_0xe036('0xc')][_0x934c1[_0xe036('0x63')]]);_0x55ecf8[_0xe036('0x19')]=![];_0x55ecf8['queuecallerabandonAt']=null;_0x55ecf8[_0xe036('0x78')]=!![];_0x55ecf8['lastAssignedTo']=_0x934c1[_0xe036('0x79')];_0x55ecf8[_0xe036('0x6e')]=_0x934c1['holdtime'];_0x55ecf8[_0xe036('0x6c')]=!![];_0x55ecf8['queuecallerexit']=![];_0x55ecf8[_0xe036('0x7a')]=null;if(!_0x55ecf8[_0xe036('0x7b')]){if(_0x934c1[_0xe036('0x7c')]==_0xe036('0x7b')){_0x55ecf8['queuecallerexitreason']=_0xe036('0x7d');}else{if(_[_0xe036('0x7e')](_0x934c1[_0xe036('0x35')][_0xe036('0x7f')](),_0xe036('0x80'))){if(this[_0xe036('0xc')][_0x934c1[_0xe036('0x81')]]){var _0x566d83=_[_0xe036('0x6b')](this[_0xe036('0xc')][_0x934c1[_0xe036('0x81')]]);_0x566d83[_0xe036('0x6c')]=![];_0x566d83[_0xe036('0x82')]=!![];_0x566d83['queuecallerexitAt']=moment(_0x55ecf8[_0xe036('0x64')])[_0xe036('0x83')](_0x934c1[_0xe036('0x6e')],'seconds')['format']('YYYY-MM-DD\x20HH:mm:ss');_0x566d83[_0xe036('0x84')]=_0xe036('0x85');_0x566d83[_0xe036('0x7b')]=!![];_0x566d83['transfertype']=_0xe036('0x86');_0x566d83[_0xe036('0x87')]=_0x934c1[_0xe036('0x88')];_0x566d83[_0xe036('0x89')]=_0x934c1[_0xe036('0x63')];var _0x9a3e7a=this[_0xe036('0xc')][_0x934c1[_0xe036('0x81')]];this[_0xe036('0xc')][_0x934c1[_0xe036('0x81')]]=this['queueReports'][_0x934c1[_0xe036('0x63')]];this[_0xe036('0xc')][_0x934c1[_0xe036('0x63')]]=_0x9a3e7a;}}else{_0x55ecf8[_0xe036('0x84')]=_0xe036('0x8a')+_0x934c1['reason'][_0xe036('0x8b')]();}}}this[_0xe036('0xe')][_0x934c1['uniqueid']]=_0x55ecf8;this[_0xe036('0x3e')](_0x55ecf8);}}}catch(_0x3a1dda){logger[_0xe036('0x38')]('[syncAgentComplete][VoiceQueueReport]',util[_0xe036('0x3f')](_0x3a1dda,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x8c')]=function(_0x2319e5){try{if(this['isNotNull'](_0x2319e5)){this[_0xe036('0x8d')](_0x2319e5['uniqueid'],_[_0xe036('0x69')](_0x2319e5[_0xe036('0x8e')])[0x0],_0x2319e5[_0xe036('0x8f')]);if(this[_0xe036('0xc')][_0x2319e5[_0xe036('0x63')]]){var _0xcea029=_[_0xe036('0x6b')](this[_0xe036('0xc')][_0x2319e5['uniqueid']]);if(_0xcea029){if(this[_0xe036('0x54')](_0x2319e5['variable'])&&this[_0xe036('0x54')](_0x2319e5[_0xe036('0x8e')][_0xe036('0x90')])){switch(_0x2319e5[_0xe036('0x8f')]){case _0xe036('0x91'):_0xcea029[_0xe036('0x82')]=![];_0xcea029[_0xe036('0x7a')]=null;break;default:_0xcea029['queuecallerexit']=!![];_0xcea029[_0xe036('0x7a')]=moment()[_0xe036('0x41')](_0xe036('0x65'));_0xcea029['queuecallerleaveAt']=moment()[_0xe036('0x41')](_0xe036('0x65'));}_0xcea029['queuecallerabandon']=![];_0xcea029[_0xe036('0x92')]=null;_0xcea029[_0xe036('0x84')]=_0x2319e5[_0xe036('0x8f')];this[_0xe036('0xe')][_0x2319e5['uniqueid']]=_0xcea029;this[_0xe036('0x3e')](_0xcea029);}else if(this['isNotNull'](_0x2319e5[_0xe036('0x8e')])&&this[_0xe036('0x54')](_0x2319e5[_0xe036('0x8e')][_0xe036('0x93')])){if(!_0xcea029[_0xe036('0x19')]){_0xcea029[_0xe036('0x82')]=!![];_0xcea029[_0xe036('0x7a')]=moment()[_0xe036('0x41')](_0xe036('0x65'));_0xcea029['queuecallerexitreason']=_0xe036('0x94');_0xcea029[_0xe036('0x95')]=moment()[_0xe036('0x41')](_0xe036('0x65'));this[_0xe036('0xe')][_0x2319e5[_0xe036('0x63')]]=_0xcea029;}}_0xcea029[_0xe036('0x13')]=this[_0xe036('0x13')][_0x2319e5['uniqueid']];}}}}catch(_0x2a7386){logger[_0xe036('0x38')](_0xe036('0x96'),util['inspect'](_0x2a7386,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x8d')]=function(_0x33dd82,_0x3b4c31,_0x2c2724){var _0x9a044e=[_0xe036('0x97'),_0xe036('0x98'),'rtpaudioqosjitter',_0xe036('0x99'),_0xe036('0x9a'),_0xe036('0x9b'),_0xe036('0x9c'),_0xe036('0x9d'),_0xe036('0x9e'),_0xe036('0x9f'),_0xe036('0xa0'),_0xe036('0xa1'),'membercalls','memberdynamic',_0xe036('0xa2'),_0xe036('0xa3'),'membername',_0xe036('0xa4'),_0xe036('0xa5')];if(!_[_0xe036('0xa6')](_0x3b4c31)&&!_[_0xe036('0xa7')](_0x9a044e,_0x3b4c31)){if(_[_0xe036('0x27')](this[_0xe036('0x13')][_0x33dd82])){this['variables'][_0x33dd82]={};}this['variables'][_0x33dd82][_0x3b4c31]=_0x2c2724;}};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x1e')]=function(_0xfbee6a){try{if(this[_0xe036('0x54')](_0xfbee6a)){if(this['queueReports'][_0xfbee6a[_0xe036('0x63')]]){for(var _0x25894a=0x0,_0x39e6c9={};_0x25894a<this[_0xe036('0xc')][_0xfbee6a[_0xe036('0x63')]][_0xe036('0xa8')];_0x25894a+=0x1){_0x39e6c9=this['queueReports'][_0xfbee6a['uniqueid']][_0x25894a];if(this[_0xe036('0x10')][_0x39e6c9[_0xe036('0x5a')]]){if(_0x39e6c9['queuecallerexit']){this[_0xe036('0x10')][_0x39e6c9[_0xe036('0x5a')]]['unmanaged']+=0x1;}if(_0x39e6c9[_0xe036('0x19')]){this[_0xe036('0x10')][_0x39e6c9[_0xe036('0x5a')]]['abandoned']+=0x1;}this[_0xe036('0x10')][_0x39e6c9['queue']][_0xe036('0x4d')]+=moment(_0x39e6c9['queuecallerleaveAt'])['diff'](_0x39e6c9['queuecallerjoinAt'],_0xe036('0xa9'))||0x0;if(_0x25894a===this['queueReports'][_0xfbee6a['uniqueid']][_0xe036('0xa8')]-0x1){this[_0xe036('0x10')][_0x39e6c9[_0xe036('0x5a')]][_0xe036('0x4c')]+=moment()[_0xe036('0xaa')](0x0)[_0xe036('0xab')](_0x39e6c9[_0xe036('0x64')],_0xe036('0xa9'));this[_0xe036('0x10')][_0x39e6c9[_0xe036('0x5a')]][_0xe036('0xac')]+=0x1;if(_0x39e6c9[_0xe036('0x6c')]){this[_0xe036('0x10')][_0x39e6c9[_0xe036('0x5a')]][_0xe036('0x49')]+=0x1;this['voiceQueues'][_0x39e6c9[_0xe036('0x5a')]]['sumBillable']+=moment()[_0xe036('0xaa')](0x0)[_0xe036('0xab')](_0x39e6c9[_0xe036('0x95')],_0xe036('0xa9'));_0x39e6c9['queuecallercompleteAt']=moment()['format'](_0xe036('0x65'));_0x39e6c9[_0xe036('0x82')]=![];_0x39e6c9[_0xe036('0x7a')]=null;}if(_0x39e6c9['queuecallerexit']){_0x39e6c9[_0xe036('0xad')]=_0xe036('0x4e');ami['emit'](_0xe036('0xae'),_0x39e6c9);}if(_0x39e6c9['queuecallerabandon']){_0x39e6c9[_0xe036('0xad')]=_0xe036('0x4f');ami[_0xe036('0x40')](_0xe036('0xaf'),_0x39e6c9);}}else{this[_0xe036('0x10')][_0x39e6c9[_0xe036('0x5a')]][_0xe036('0x4c')]+=this['voiceQueues'][_0x39e6c9[_0xe036('0x5a')]][_0xe036('0x4d')];}this[_0xe036('0xe')][_0xfbee6a['uniqueid']]=_0x39e6c9;this[_0xe036('0x3e')](_0x39e6c9);this[_0xe036('0x45')](this[_0xe036('0x10')][_0x39e6c9[_0xe036('0x5a')]]);}}ami[_0xe036('0x40')]('custom:voiceQueueReport',this[_0xe036('0xc')][_0xfbee6a[_0xe036('0x63')]]);delete this[_0xe036('0xc')][_0xfbee6a['uniqueid']];delete this[_0xe036('0xe')][_0xfbee6a['uniqueid']];}if(this[_0xe036('0x13')][_0xfbee6a[_0xe036('0x63')]]){delete this[_0xe036('0x13')][_0xfbee6a[_0xe036('0x63')]];}}}catch(_0x5e1ab8){logger[_0xe036('0x38')](_0xe036('0xb0'),util[_0xe036('0x3f')](_0x5e1ab8,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x24')]=function(_0x1e8953){try{if(this[_0xe036('0x54')](_0x1e8953)){var _0x139f6a;if(this[_0xe036('0xc')][_0x1e8953['transfereeuniqueid']]){_0x139f6a=_['last'](this['queueReports'][_0x1e8953[_0xe036('0xb1')]]);_0x139f6a[_0xe036('0x87')]=_0x1e8953[_0xe036('0xb2')];_0x139f6a[_0xe036('0x89')]=_0x1e8953['secondtransfereruniqueid'];_0x139f6a[_0xe036('0x84')]=_0xe036('0xb3');_0x139f6a[_0xe036('0x7b')]=!![];_0x139f6a[_0xe036('0xb4')]=_0xe036('0xb5');if(this['queueReports'][_0x1e8953['secondtransfereruniqueid']]){var _0x369829=this[_0xe036('0xc')][_0x1e8953['secondtransfereruniqueid']];this['queueReports'][_0x1e8953[_0xe036('0xb6')]]=this[_0xe036('0xc')][_0x1e8953[_0xe036('0xb1')]];this['queueReports'][_0x1e8953['transfereeuniqueid']]=_0x369829;var _0x4a6bf2=_[_0xe036('0x6b')](this[_0xe036('0xc')][_0x1e8953[_0xe036('0xb1')]]);_0x4a6bf2['switch']=!![];}}else if(this[_0xe036('0xc')][_0x1e8953[_0xe036('0xb7')]]){_0x139f6a=_['last'](this[_0xe036('0xc')][_0x1e8953[_0xe036('0xb7')]]);_0x139f6a['transferexten']=_0x1e8953['origtransfererexten'];_0x139f6a[_0xe036('0x89')]=_0x1e8953[_0xe036('0xb8')];_0x139f6a[_0xe036('0x84')]=_0xe036('0xb3');_0x139f6a[_0xe036('0x7b')]=!![];_0x139f6a['transfertype']=_0xe036('0xb5');if(this[_0xe036('0xc')][_0x1e8953['origtransfereruniqueid']]){var _0x369829=this[_0xe036('0xc')][_0x1e8953[_0xe036('0xb8')]];this[_0xe036('0xc')][_0x1e8953['origtransfereruniqueid']]=this[_0xe036('0xc')][_0x1e8953['transfertargetuniqueid']];this[_0xe036('0xc')][_0x1e8953[_0xe036('0xb7')]]=_0x369829;var _0x4a6bf2=_[_0xe036('0x6b')](this[_0xe036('0xc')][_0x1e8953[_0xe036('0xb7')]]);_0x4a6bf2[_0xe036('0x31')]=!![];}}}}catch(_0x101a81){logger[_0xe036('0x38')](_0xe036('0xb9'),util[_0xe036('0x3f')](_0x101a81,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0xe036('0xba')]=function(_0x1d1c5c){try{if(this[_0xe036('0x54')](_0x1d1c5c)){if(this[_0xe036('0xc')][_0x1d1c5c['transfereeuniqueid']]){var _0x509199=_[_0xe036('0x6b')](this[_0xe036('0xc')][_0x1d1c5c[_0xe036('0xb1')]]);_0x509199[_0xe036('0x84')]=_0xe036('0xbb');_0x509199[_0xe036('0x7b')]=!![];_0x509199['transfertype']=_0xe036('0xbc');_0x509199[_0xe036('0x87')]=_0x1d1c5c[_0xe036('0xbd')];_0x509199[_0xe036('0x89')]=_0x1d1c5c['transfereeuniqueid'];this[_0xe036('0x1e')]({'event':'BlindTransfer','uniqueid':_0x1d1c5c['transfereeuniqueid'],'context':_0x1d1c5c[_0xe036('0xbe')],'channel':_0x1d1c5c[_0xe036('0xbf')]});}}}catch(_0x2f82fd){logger['error']('[syncBlindTransfer][VoiceQueueReport]',util[_0xe036('0x3f')](_0x2f82fd,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0xe036('0x21')]=function(_0x1b3787){try{if(this['isNotNull'](_0x1b3787)){if(this[_0xe036('0xc')][_0x1b3787['uniqueid']]){var _0x457dc4=_[_0xe036('0x6b')](this['queueReports'][_0x1b3787[_0xe036('0x63')]]);if(!_[_0xe036('0xa6')](_0x457dc4[_0xe036('0x95')])){_0x457dc4[_0xe036('0xc0')]=moment()[_0xe036('0x41')](_0xe036('0x65'));}}}}catch(_0x2a31d9){logger[_0xe036('0x38')](_0xe036('0xc1'),util[_0xe036('0x3f')](_0x2a31d9,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xe036('0xa')][_0xe036('0x23')]=function(_0x48bba3){try{if(this[_0xe036('0x54')](_0x48bba3)){if(this[_0xe036('0xc')][_0x48bba3[_0xe036('0x63')]]){var _0x56825f=_[_0xe036('0x6b')](this[_0xe036('0xc')][_0x48bba3[_0xe036('0x63')]]);if(!_[_0xe036('0xa6')](_0x56825f[_0xe036('0xc0')])){_0x56825f[_0xe036('0xc2')]+=moment()[_0xe036('0xaa')](0x0)[_0xe036('0xab')](_0x56825f[_0xe036('0xc0')],_0xe036('0xa9'));delete _0x56825f[_0xe036('0xc0')];}}}}catch(_0x836579){logger[_0xe036('0x38')](_0xe036('0xc3'),util['inspect'](_0x836579,{'showHidden':![],'depth':null}));}};module['exports']=VoiceQueueReport;
\ No newline at end of file
index 417ce80..cea8dd6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf3cd=['Request','CreateReportAgentPreview','../client','createHistory','campaign','queue'];(function(_0x3374f9,_0x50dcf9){var _0x4f72cc=function(_0x79e96f){while(--_0x79e96f){_0x3374f9['push'](_0x3374f9['shift']());}};_0x4f72cc(++_0x50dcf9);}(_0xf3cd,0xfe));var _0xdf3c=function(_0x1075b8,_0xd606e2){_0x1075b8=_0x1075b8-0x0;var _0x5d047f=_0xf3cd[_0x1075b8];return _0x5d047f;};'use strict';var client=require(_0xdf3c('0x0'));exports[_0xdf3c('0x1')]=function(_0x31e5a5){return function(){_0x31e5a5[_0xdf3c('0x2')]=_0x31e5a5[_0xdf3c('0x3')];return client[_0xdf3c('0x4')]('CreateReportAgentPreview',{'body':_0x31e5a5,'log':_0xdf3c('0x5')});};};
\ No newline at end of file
+var _0x0a9a=['Request','CreateReportAgentPreview','createHistory','campaign','queue'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0x0a9a,0x183));var _0xa0a9=function(_0x301184,_0x92b2d9){_0x301184=_0x301184-0x0;var _0x249f38=_0x0a9a[_0x301184];return _0x249f38;};'use strict';var client=require('../client');exports[_0xa0a9('0x0')]=function(_0x51baa8){return function(){_0x51baa8[_0xa0a9('0x1')]=_0x51baa8[_0xa0a9('0x2')];return client[_0xa0a9('0x3')](_0xa0a9('0x4'),{'body':_0x51baa8,'log':'CreateReportAgentPreview'});};};
\ No newline at end of file
index 0a7b083..1eb5427 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1ed2=['Request','CreateAttachment','../client'];(function(_0x30d3b0,_0x48578b){var _0x18dc5c=function(_0x20acd6){while(--_0x20acd6){_0x30d3b0['push'](_0x30d3b0['shift']());}};_0x18dc5c(++_0x48578b);}(_0x1ed2,0x68));var _0x21ed=function(_0x26333b,_0x56470d){_0x26333b=_0x26333b-0x0;var _0x404306=_0x1ed2[_0x26333b];return _0x404306;};'use strict';var client=require(_0x21ed('0x0'));exports['create']=function(_0x3e04bd){return client[_0x21ed('0x1')](_0x21ed('0x2'),{'body':_0x3e04bd,'log':_0x21ed('0x2')});};
\ No newline at end of file
+var _0x4c12=['CreateAttachment','../client','Request'];(function(_0x533528,_0x409d05){var _0x3189f1=function(_0x5e63d2){while(--_0x5e63d2){_0x533528['push'](_0x533528['shift']());}};_0x3189f1(++_0x409d05);}(_0x4c12,0xf1));var _0x24c1=function(_0x16bb4b,_0x5fe431){_0x16bb4b=_0x16bb4b-0x0;var _0x8aeb84=_0x4c12[_0x16bb4b];return _0x8aeb84;};'use strict';var client=require(_0x24c1('0x0'));exports['create']=function(_0x102c09){return client[_0x24c1('0x1')](_0x24c1('0x2'),{'body':_0x102c09,'log':_0x24c1('0x2')});};
\ No newline at end of file
index 83cd97e..f52b00b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8af5=['name','active','dialOriginateCallerIdNumber','dialOriginateTimeout','dialCongestionMaxRetry','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialTimezone','dialGlobalInterval','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMaximumWordLength','dialOrderByScheduledAt','dialRandomLastDigitCallerIdNumber','dialCutDigit','Trunk','TrunkBackup','callerid','Interval','Intervals','interval','SquareProject','getCampaign','../client','getCampaigns','Request'];(function(_0x49b73b,_0x49456b){var _0x391e11=function(_0x111b67){while(--_0x111b67){_0x49b73b['push'](_0x49b73b['shift']());}};_0x391e11(++_0x49456b);}(_0x8af5,0xfd));var _0x58af=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x8af5[_0x3dd15e];return _0x231fd0;};'use strict';var client=require(_0x58af('0x0'));exports[_0x58af('0x1')]=function(){return function(){return client[_0x58af('0x2')]('GetCampaign',{'options':{'raw':![],'attributes':['id',_0x58af('0x3'),'type',_0x58af('0x4'),'limitCalls','dialOriginateCallerIdName',_0x58af('0x5'),_0x58af('0x6'),_0x58af('0x7'),'dialCongestionRetryFrequency',_0x58af('0x8'),_0x58af('0x9'),_0x58af('0xa'),_0x58af('0xb'),_0x58af('0xc'),_0x58af('0xd'),_0x58af('0xe'),_0x58af('0xf'),_0x58af('0x10'),_0x58af('0x11'),_0x58af('0x12'),_0x58af('0x13'),'dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold',_0x58af('0x14'),_0x58af('0x15'),'dialPrefix',_0x58af('0x16'),_0x58af('0x17')],'include':[{'model':'Trunk','as':_0x58af('0x18'),'attributes':['id',_0x58af('0x3'),'callerid',_0x58af('0x4')]},{'model':_0x58af('0x18'),'as':_0x58af('0x19'),'attributes':['id',_0x58af('0x3'),_0x58af('0x1a'),_0x58af('0x4')]},{'model':'Interval','as':_0x58af('0x1b'),'attributes':['id',_0x58af('0x3')],'include':[{'model':_0x58af('0x1b'),'as':_0x58af('0x1c'),'attributes':['id',_0x58af('0x3'),_0x58af('0x1d')]}]},{'model':_0x58af('0x1e'),'as':_0x58af('0x1e'),'attributes':['id',_0x58af('0x3')]}]},'log':_0x58af('0x1f')});};};
\ No newline at end of file
+var _0x9d81=['dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialOrderByScheduledAt','dialPrefix','dialRandomLastDigitCallerIdNumber','dialCutDigit','Trunk','callerid','Interval','name','SquareProject','getCampaign','../client','Request','GetCampaign','type','active','limitCalls','dialOriginateCallerIdName','dialOriginateTimeout','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialGlobalMaxRetry','dialTimezone','dialGlobalInterval','dialAMDInitialSilence'];(function(_0x222cc9,_0x286b1e){var _0x194539=function(_0x276d72){while(--_0x276d72){_0x222cc9['push'](_0x222cc9['shift']());}};_0x194539(++_0x286b1e);}(_0x9d81,0x151));var _0x19d8=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x9d81[_0x20a584];return _0x4b41a8;};'use strict';var client=require(_0x19d8('0x0'));exports['getCampaigns']=function(){return function(){return client[_0x19d8('0x1')](_0x19d8('0x2'),{'options':{'raw':![],'attributes':['id','name',_0x19d8('0x3'),_0x19d8('0x4'),_0x19d8('0x5'),_0x19d8('0x6'),'dialOriginateCallerIdNumber',_0x19d8('0x7'),'dialCongestionMaxRetry',_0x19d8('0x8'),_0x19d8('0x9'),_0x19d8('0xa'),'dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency',_0x19d8('0xb'),_0x19d8('0xc'),_0x19d8('0xd'),'dialAMDActive',_0x19d8('0xe'),_0x19d8('0xf'),_0x19d8('0x10'),_0x19d8('0x11'),_0x19d8('0x12'),_0x19d8('0x13'),_0x19d8('0x14'),_0x19d8('0x15'),'dialAMDMaximumWordLength',_0x19d8('0x16'),_0x19d8('0x17'),_0x19d8('0x18'),_0x19d8('0x19')],'include':[{'model':'Trunk','as':_0x19d8('0x1a'),'attributes':['id','name',_0x19d8('0x1b'),_0x19d8('0x4')]},{'model':_0x19d8('0x1a'),'as':'TrunkBackup','attributes':['id','name','callerid',_0x19d8('0x4')]},{'model':_0x19d8('0x1c'),'as':_0x19d8('0x1c'),'attributes':['id',_0x19d8('0x1d')],'include':[{'model':_0x19d8('0x1c'),'as':'Intervals','attributes':['id',_0x19d8('0x1d'),'interval']}]},{'model':_0x19d8('0x1e'),'as':_0x19d8('0x1e'),'attributes':['id','name']}]},'log':_0x19d8('0x1f')});};};
\ No newline at end of file
index 5a97756..67a3470 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x148a=['ShowCmContact','../client','createContact','Request','CreateCmContact','showContact'];(function(_0x1b7162,_0x559a82){var _0x53ff97=function(_0x117bbd){while(--_0x117bbd){_0x1b7162['push'](_0x1b7162['shift']());}};_0x53ff97(++_0x559a82);}(_0x148a,0x16f));var _0xa148=function(_0x50c9af,_0x414a5b){_0x50c9af=_0x50c9af-0x0;var _0x3c82c2=_0x148a[_0x50c9af];return _0x3c82c2;};'use strict';var client=require(_0xa148('0x0'));exports[_0xa148('0x1')]=function(_0x16e431){return function(){return client[_0xa148('0x2')](_0xa148('0x3'),{'body':_0x16e431,'log':_0xa148('0x3')});};};exports[_0xa148('0x4')]=function(_0x3f7ce6){return function(){return client[_0xa148('0x2')](_0xa148('0x5'),{'options':_0x3f7ce6,'log':_0xa148('0x5')});};};
\ No newline at end of file
+var _0x881e=['CreateCmContact','Request','ShowCmContact','createContact'];(function(_0x412c34,_0x3fb4a5){var _0x3b4860=function(_0x4956ce){while(--_0x4956ce){_0x412c34['push'](_0x412c34['shift']());}};_0x3b4860(++_0x3fb4a5);}(_0x881e,0x1e3));var _0xe881=function(_0x58b185,_0x1973cd){_0x58b185=_0x58b185-0x0;var _0x7c6885=_0x881e[_0x58b185];return _0x7c6885;};'use strict';var client=require('../client');exports[_0xe881('0x0')]=function(_0x4d6ca8){return function(){return client['Request']('CreateCmContact',{'body':_0x4d6ca8,'log':_0xe881('0x1')});};};exports['showContact']=function(_0xdaf189){return function(){return client[_0xe881('0x2')](_0xe881('0x3'),{'options':_0xdaf189,'log':'ShowCmContact'});};};
\ No newline at end of file
index 8d4ecea..ef40dd0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0295=['name','VoiceQueue','unlockContact','UpdateCmHopper','getContactRecallMe','GetContactRecallMe','../client','getContacts','Request','GetCmHopper','CmContact','Contact','getCmHopper','updateContacts','YYYY-MM-DD\x20HH:mm:ss','rescheduleContact','ContactId','ListId','VoiceQueueId','destroyContact','GetContactDialer','format','priority','DESC','scheduledat','ASC','getContactDialerIvr','GetContactDialerIvr','moveContactManagedDialer','campaign','MoveContactManagedDialer','CampaignId','countReScheduled','getContactPreview','User'];(function(_0x32e772,_0x14d872){var _0x3fa1da=function(_0x19a120){while(--_0x19a120){_0x32e772['push'](_0x32e772['shift']());}};_0x3fa1da(++_0x14d872);}(_0x0295,0x1f0));var _0x5029=function(_0x28087c,_0x895c0f){_0x28087c=_0x28087c-0x0;var _0x329122=_0x0295[_0x28087c];return _0x329122;};'use strict';var client=require(_0x5029('0x0'));var moment=require('moment');var _=require('lodash');exports[_0x5029('0x1')]=function(_0x4f552a,_0x53c2e1){return function(){return client[_0x5029('0x2')](_0x5029('0x3'),{'options':{'where':{'VoiceQueueId':_0x4f552a},'include':[{'model':_0x5029('0x4'),'as':_0x5029('0x5')}],'limit':_0x53c2e1,'raw':![]},'log':_0x5029('0x6')});};};exports[_0x5029('0x7')]=function(_0x200217,_0x215955,_0x5b3cd){return function(){return client['Request']('UpdateCmHopper',{'body':_0x200217,'options':{'where':{'VoiceQueueId':_0x215955,'scheduledat':{'$lte':moment()['format'](_0x5029('0x8'))}},'limit':_0x5b3cd},'log':'UpdateCmHopper'});};};exports[_0x5029('0x9')]=function(_0x5bccfc){return function(){return client[_0x5029('0x2')]('UpdateCmHopper',{'body':_0x5bccfc,'options':{'where':{'ContactId':_0x5bccfc[_0x5029('0xa')],'ListId':_0x5bccfc[_0x5029('0xb')],'VoiceQueueId':_0x5bccfc[_0x5029('0xc')],'CampaignId':_0x5bccfc['CampaignId']}},'log':_0x5029('0x9')});};};exports[_0x5029('0xd')]=function(_0x3fe6d1,_0x4f295e,_0x3bc005){return function(){return client[_0x5029('0x2')]('DestroyCmHopper',{'options':{'where':{'VoiceQueueId':_0x3fe6d1,'ListId':_0x4f295e,'ContactId':_0x3bc005}},'log':'DestroyCmHopper'});};};exports['getContactDialer']=function(_0x4aebb6,_0x2484ac,_0x2e0369,_0x12c237){return function(){return client[_0x5029('0x2')](_0x5029('0xe'),{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x4aebb6,'active':![],'scheduledat':{'$lte':moment()[_0x5029('0xf')](_0x5029('0x8'))},'$or':[{'UserId':null},{'UserId':{'$in':_0x2484ac}}]},'include':[{'model':_0x5029('0x4'),'as':_0x5029('0x5')}],'order':[[_0x5029('0x10'),_0x5029('0x11')],[_0x5029('0x12'),_0x12c237],['id',_0x5029('0x13')]],'raw':!![],'limit':_0x2e0369},'log':_0x5029('0xe')});};};exports[_0x5029('0x14')]=function(_0x4f7ab4,_0x1ed567,_0x31a155){return function(){return client[_0x5029('0x2')](_0x5029('0xe'),{'body':{'active':!![]},'options':{'where':{'CampaignId':_0x4f7ab4,'active':![],'scheduledat':{'$lte':moment()[_0x5029('0xf')](_0x5029('0x8'))}},'include':[{'model':_0x5029('0x4'),'as':'Contact'}],'order':[[_0x5029('0x10'),'DESC'],[_0x5029('0x12'),_0x31a155],['id',_0x5029('0x13')]],'raw':!![],'limit':_0x1ed567},'log':_0x5029('0x15')});};};exports[_0x5029('0x16')]=function(_0x4b5854,_0x47ecca){return function(){_0x4b5854[_0x5029('0x17')]=_0x4b5854['queue'];return client[_0x5029('0x2')](_0x5029('0x18'),{'body':_0x4b5854,'options':{'where':{'ContactId':_0x4b5854[_0x5029('0xa')],'ListId':_0x4b5854[_0x5029('0xb')],'VoiceQueueId':_0x4b5854[_0x5029('0xc')],'CampaignId':_0x4b5854[_0x5029('0x19')],'active':_0x47ecca?undefined:!![]}},'log':_0x5029('0x18')});};};exports[_0x5029('0x1a')]=function(_0x3e857d){return function(){return client['Request']('CountReScheduled',{'options':{'where':{'VoiceQueueId':_0x3e857d['id']?_0x3e857d['id']||null:null}},'log':'countReScheduled'});};};exports[_0x5029('0x1b')]=function(_0x45666c){return function(){return client['Request']('GetCmHopper',{'options':{'where':{'id':_0x45666c},'include':[{'model':_0x5029('0x4'),'as':_0x5029('0x5')},{'model':_0x5029('0x1c'),'as':'Agent','attributes':['id',_0x5029('0x1d')]},{'model':_0x5029('0x1e'),'as':'Queue','attributes':['id',_0x5029('0x1d')]}],'raw':!![]},'log':_0x5029('0x6')});};};exports[_0x5029('0x1f')]=function(_0x4a24b9,_0x32da06,_0x251f99){return function(){return client[_0x5029('0x2')]('UpdateCmHopper',{'body':_0x4a24b9,'options':{'where':{'id':_0x32da06},'limit':_0x251f99},'log':_0x5029('0x20')});};};exports[_0x5029('0x21')]=function(_0x4cc16a,_0x1d79b9){return function(){return client[_0x5029('0x2')](_0x5029('0x22'),{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x4cc16a,'active':![],'recallme':!![],'scheduledat':{'$lte':moment()[_0x5029('0xf')](_0x5029('0x8'))},'UserId':{'$in':_0x1d79b9}},'order':[[_0x5029('0x10'),_0x5029('0x11')],[_0x5029('0x12'),_0x5029('0x11')],['id',_0x5029('0x13')]],'include':[{'model':_0x5029('0x4'),'as':_0x5029('0x5')}],'group':'db.CmHopper.UserId','raw':!![]},'log':_0x5029('0xe')});};};
\ No newline at end of file
+var _0xe14b=['User','Agent','name','VoiceQueue','getContactRecallMe','GetContactRecallMe','DESC','../client','moment','GetCmHopper','getCmHopper','updateContacts','Request','UpdateCmHopper','rescheduleContact','VoiceQueueId','CampaignId','destroyContact','DestroyCmHopper','getContactDialer','YYYY-MM-DD\x20HH:mm:ss','CmContact','Contact','priority','scheduledat','ASC','GetContactDialer','getContactDialerIvr','format','GetContactDialerIvr','moveContactManagedDialer','campaign','ContactId','countReScheduled','getContactPreview'];(function(_0xc6a45e,_0x417da6){var _0x13442e=function(_0x46344a){while(--_0x46344a){_0xc6a45e['push'](_0xc6a45e['shift']());}};_0x13442e(++_0x417da6);}(_0xe14b,0x93));var _0xbe14=function(_0x4a456e,_0x5318dd){_0x4a456e=_0x4a456e-0x0;var _0x7428f5=_0xe14b[_0x4a456e];return _0x7428f5;};'use strict';var client=require(_0xbe14('0x0'));var moment=require(_0xbe14('0x1'));var _=require('lodash');exports['getContacts']=function(_0x11c3a0,_0x36393a){return function(){return client['Request'](_0xbe14('0x2'),{'options':{'where':{'VoiceQueueId':_0x11c3a0},'include':[{'model':'CmContact','as':'Contact'}],'limit':_0x36393a,'raw':![]},'log':_0xbe14('0x3')});};};exports[_0xbe14('0x4')]=function(_0x1fe204,_0x1ff100,_0x1d9ade){return function(){return client[_0xbe14('0x5')](_0xbe14('0x6'),{'body':_0x1fe204,'options':{'where':{'VoiceQueueId':_0x1ff100,'scheduledat':{'$lte':moment()['format']('YYYY-MM-DD\x20HH:mm:ss')}},'limit':_0x1d9ade},'log':'UpdateCmHopper'});};};exports[_0xbe14('0x7')]=function(_0x6fceff){return function(){return client[_0xbe14('0x5')](_0xbe14('0x6'),{'body':_0x6fceff,'options':{'where':{'ContactId':_0x6fceff['ContactId'],'ListId':_0x6fceff['ListId'],'VoiceQueueId':_0x6fceff[_0xbe14('0x8')],'CampaignId':_0x6fceff[_0xbe14('0x9')]}},'log':'rescheduleContact'});};};exports[_0xbe14('0xa')]=function(_0x35aa19,_0x886a5e,_0x3d38c2){return function(){return client[_0xbe14('0x5')](_0xbe14('0xb'),{'options':{'where':{'VoiceQueueId':_0x35aa19,'ListId':_0x886a5e,'ContactId':_0x3d38c2}},'log':_0xbe14('0xb')});};};exports[_0xbe14('0xc')]=function(_0x16893f,_0xa2cf72,_0x1e4826,_0x33fd54){return function(){return client[_0xbe14('0x5')]('GetContactDialer',{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x16893f,'active':![],'scheduledat':{'$lte':moment()['format'](_0xbe14('0xd'))},'$or':[{'UserId':null},{'UserId':{'$in':_0xa2cf72}}]},'include':[{'model':_0xbe14('0xe'),'as':_0xbe14('0xf')}],'order':[[_0xbe14('0x10'),'DESC'],[_0xbe14('0x11'),_0x33fd54],['id',_0xbe14('0x12')]],'raw':!![],'limit':_0x1e4826},'log':_0xbe14('0x13')});};};exports[_0xbe14('0x14')]=function(_0x38f1ea,_0x29ab73,_0x17ae86){return function(){return client['Request'](_0xbe14('0x13'),{'body':{'active':!![]},'options':{'where':{'CampaignId':_0x38f1ea,'active':![],'scheduledat':{'$lte':moment()[_0xbe14('0x15')](_0xbe14('0xd'))}},'include':[{'model':_0xbe14('0xe'),'as':_0xbe14('0xf')}],'order':[[_0xbe14('0x10'),'DESC'],[_0xbe14('0x11'),_0x17ae86],['id',_0xbe14('0x12')]],'raw':!![],'limit':_0x29ab73},'log':_0xbe14('0x16')});};};exports[_0xbe14('0x17')]=function(_0x188ec4,_0x51dc0b){return function(){_0x188ec4[_0xbe14('0x18')]=_0x188ec4['queue'];return client[_0xbe14('0x5')]('MoveContactManagedDialer',{'body':_0x188ec4,'options':{'where':{'ContactId':_0x188ec4[_0xbe14('0x19')],'ListId':_0x188ec4['ListId'],'VoiceQueueId':_0x188ec4[_0xbe14('0x8')],'CampaignId':_0x188ec4[_0xbe14('0x9')],'active':_0x51dc0b?undefined:!![]}},'log':'MoveContactManagedDialer'});};};exports[_0xbe14('0x1a')]=function(_0x4d4190){return function(){return client[_0xbe14('0x5')]('CountReScheduled',{'options':{'where':{'VoiceQueueId':_0x4d4190['id']?_0x4d4190['id']||null:null}},'log':_0xbe14('0x1a')});};};exports[_0xbe14('0x1b')]=function(_0x1ee9c1){return function(){return client[_0xbe14('0x5')](_0xbe14('0x2'),{'options':{'where':{'id':_0x1ee9c1},'include':[{'model':_0xbe14('0xe'),'as':'Contact'},{'model':_0xbe14('0x1c'),'as':_0xbe14('0x1d'),'attributes':['id',_0xbe14('0x1e')]},{'model':_0xbe14('0x1f'),'as':'Queue','attributes':['id',_0xbe14('0x1e')]}],'raw':!![]},'log':_0xbe14('0x3')});};};exports['unlockContact']=function(_0x3c3613,_0x3b3e84,_0x1c7cc7){return function(){return client[_0xbe14('0x5')](_0xbe14('0x6'),{'body':_0x3c3613,'options':{'where':{'id':_0x3b3e84},'limit':_0x1c7cc7},'log':_0xbe14('0x6')});};};exports[_0xbe14('0x20')]=function(_0x2b05cb,_0x4168c8){return function(){return client[_0xbe14('0x5')](_0xbe14('0x21'),{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x2b05cb,'active':![],'recallme':!![],'scheduledat':{'$lte':moment()[_0xbe14('0x15')](_0xbe14('0xd'))},'UserId':{'$in':_0x4168c8}},'order':[[_0xbe14('0x10'),_0xbe14('0x22')],[_0xbe14('0x11'),_0xbe14('0x22')],['id',_0xbe14('0x12')]],'include':[{'model':_0xbe14('0xe'),'as':_0xbe14('0xf')}],'group':'db.CmHopper.UserId','raw':!![]},'log':_0xbe14('0x13')});};};
\ No newline at end of file
index 4cf78c3..5d44cdb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x005d=['CampaignId','GetCmHopperBlackIvr','../client','checkIsBlackList','Request','GetCmHopperBlack','VoiceQueueId','Contact','phone'];(function(_0x1c2e81,_0x4012c9){var _0x1a9841=function(_0x5efa3b){while(--_0x5efa3b){_0x1c2e81['push'](_0x1c2e81['shift']());}};_0x1a9841(++_0x4012c9);}(_0x005d,0x185));var _0xd005=function(_0xb028d7,_0x3a01ec){_0xb028d7=_0xb028d7-0x0;var _0x32008=_0x005d[_0xb028d7];return _0x32008;};'use strict';var client=require(_0xd005('0x0'));exports[_0xd005('0x1')]=function(_0x3768ee){return function(){return client[_0xd005('0x2')](_0xd005('0x3'),{'options':{'where':{'VoiceQueueId':_0x3768ee[_0xd005('0x4')],'phone':_0x3768ee[_0xd005('0x5')][_0xd005('0x6')]},'raw':![]},'log':'GetCmHopperBlack'});};};exports['checkIsBlackListIvr']=function(_0x561470){return function(){return client['Request'](_0xd005('0x3'),{'options':{'where':{'CampaignId':_0x561470[_0xd005('0x7')],'phone':_0x561470[_0xd005('0x5')]['phone']},'raw':![]},'log':_0xd005('0x8')});};};
\ No newline at end of file
+var _0xe95d=['../client','checkIsBlackList','Request','GetCmHopperBlack','Contact','checkIsBlackListIvr','GetCmHopperBlackIvr'];(function(_0x34093c,_0x310f96){var _0x54ba5e=function(_0x2ff6d6){while(--_0x2ff6d6){_0x34093c['push'](_0x34093c['shift']());}};_0x54ba5e(++_0x310f96);}(_0xe95d,0x19d));var _0xde95=function(_0x3e3221,_0x392851){_0x3e3221=_0x3e3221-0x0;var _0x190da4=_0xe95d[_0x3e3221];return _0x190da4;};'use strict';var client=require(_0xde95('0x0'));exports[_0xde95('0x1')]=function(_0x4a8c66){return function(){return client[_0xde95('0x2')](_0xde95('0x3'),{'options':{'where':{'VoiceQueueId':_0x4a8c66['VoiceQueueId'],'phone':_0x4a8c66[_0xde95('0x4')]['phone']},'raw':![]},'log':_0xde95('0x3')});};};exports[_0xde95('0x5')]=function(_0x354d8b){return function(){return client[_0xde95('0x2')](_0xde95('0x3'),{'options':{'where':{'CampaignId':_0x354d8b['CampaignId'],'phone':_0x354d8b[_0xde95('0x4')]['phone']},'raw':![]},'log':_0xde95('0x6')});};};
\ No newline at end of file
index 7ece4a5..9ff5ec7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7ef5=['queue','Request','CreateCmHopperFinal','createContact'];(function(_0x17bb31,_0x2fc6f8){var _0x505c71=function(_0x5013cf){while(--_0x5013cf){_0x17bb31['push'](_0x17bb31['shift']());}};_0x505c71(++_0x2fc6f8);}(_0x7ef5,0x153));var _0x57ef=function(_0x351589,_0x4587b2){_0x351589=_0x351589-0x0;var _0x3a7cab=_0x7ef5[_0x351589];return _0x3a7cab;};'use strict';var client=require('../client');exports[_0x57ef('0x0')]=function(_0x419e0a){return function(){_0x419e0a['campaign']=_0x419e0a[_0x57ef('0x1')];return client[_0x57ef('0x2')](_0x57ef('0x3'),{'body':_0x419e0a,'log':_0x57ef('0x3')});};};
\ No newline at end of file
+var _0xab5f=['CreateCmHopperFinal','createContact','campaign','Request'];(function(_0x2e39e8,_0xd7987e){var _0x2e1a83=function(_0x5f213b){while(--_0x5f213b){_0x2e39e8['push'](_0x2e39e8['shift']());}};_0x2e1a83(++_0xd7987e);}(_0xab5f,0x1d1));var _0xfab5=function(_0x46e363,_0x45d7e2){_0x46e363=_0x46e363-0x0;var _0x3fb059=_0xab5f[_0x46e363];return _0x3fb059;};'use strict';var client=require('../client');exports[_0xfab5('0x0')]=function(_0x255470){return function(){_0x255470[_0xfab5('0x1')]=_0x255470['queue'];return client[_0xfab5('0x2')](_0xfab5('0x3'),{'body':_0x255470,'log':_0xfab5('0x3')});};};
\ No newline at end of file
index 3a12cff..cd0c0c8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0ef4=['ivr','moment','createHistory','Request','CreateCmHopperHistory','subtract','minutes','format','YYYY-MM-DD\x20HH:mm:ss','GetCmHopperHistory','getVoiceQueueHopperHistory','GetVoiceQueueHopperHistory','day','endOf','queue','getCampaignHopperHistory','GetCampaignHopperHistory','startOf'];(function(_0x3d5f7a,_0x189a90){var _0xce3308=function(_0x22c66b){while(--_0x22c66b){_0x3d5f7a['push'](_0x3d5f7a['shift']());}};_0xce3308(++_0x189a90);}(_0x0ef4,0xc7));var _0x40ef=function(_0x34df4a,_0x209d10){_0x34df4a=_0x34df4a-0x0;var _0x145c69=_0x0ef4[_0x34df4a];return _0x145c69;};'use strict';var client=require('../client');var moment=require(_0x40ef('0x0'));exports[_0x40ef('0x1')]=function(_0x2d9889){return function(){_0x2d9889['campaign']=_0x2d9889['queue'];return client[_0x40ef('0x2')](_0x40ef('0x3'),{'body':_0x2d9889,'log':_0x40ef('0x3')});};};exports['avgHandleTime']=function(_0x16fef9){return function(){return client['Request']('AvgHandleTime',{'options':{'where':{'endtime':{'$between':[moment()[_0x40ef('0x4')](_0x16fef9,_0x40ef('0x5'))[_0x40ef('0x6')](_0x40ef('0x7')),moment()[_0x40ef('0x6')](_0x40ef('0x7'))]}},'raw':![]},'log':_0x40ef('0x8')});};};exports[_0x40ef('0x9')]=function(_0xe6d8ac){return function(){return client['Request'](_0x40ef('0xa'),{'options':{'where':{'createdAt':{'$between':[moment()['startOf'](_0x40ef('0xb'))[_0x40ef('0x6')](_0x40ef('0x7')),moment()[_0x40ef('0xc')]('day')[_0x40ef('0x6')](_0x40ef('0x7'))]},'campaigntype':_0x40ef('0xd')},'raw':![]},'log':_0x40ef('0xa')});};};exports[_0x40ef('0xe')]=function(_0x136ccd){return function(){return client[_0x40ef('0x2')](_0x40ef('0xf'),{'options':{'where':{'createdAt':{'$between':[moment()[_0x40ef('0x10')](_0x40ef('0xb'))[_0x40ef('0x6')](_0x40ef('0x7')),moment()['endOf']('day')[_0x40ef('0x6')]('YYYY-MM-DD\x20HH:mm:ss')]},'campaigntype':_0x40ef('0x11')},'raw':![]},'log':_0x40ef('0xf')});};};
\ No newline at end of file
+var _0x9c1d=['day','endOf','getCampaignHopperHistory','GetCampaignHopperHistory','ivr','../client','moment','createHistory','campaign','queue','CreateCmHopperHistory','Request','AvgHandleTime','subtract','minutes','format','YYYY-MM-DD\x20HH:mm:ss','getVoiceQueueHopperHistory','GetVoiceQueueHopperHistory','startOf'];(function(_0x88281e,_0x502f0b){var _0x4c8edf=function(_0x1d8afc){while(--_0x1d8afc){_0x88281e['push'](_0x88281e['shift']());}};_0x4c8edf(++_0x502f0b);}(_0x9c1d,0x1a9));var _0xd9c1=function(_0x2b3386,_0x5c91bd){_0x2b3386=_0x2b3386-0x0;var _0x445b7a=_0x9c1d[_0x2b3386];return _0x445b7a;};'use strict';var client=require(_0xd9c1('0x0'));var moment=require(_0xd9c1('0x1'));exports[_0xd9c1('0x2')]=function(_0x49e8f3){return function(){_0x49e8f3[_0xd9c1('0x3')]=_0x49e8f3[_0xd9c1('0x4')];return client['Request'](_0xd9c1('0x5'),{'body':_0x49e8f3,'log':_0xd9c1('0x5')});};};exports['avgHandleTime']=function(_0x233f23){return function(){return client[_0xd9c1('0x6')](_0xd9c1('0x7'),{'options':{'where':{'endtime':{'$between':[moment()[_0xd9c1('0x8')](_0x233f23,_0xd9c1('0x9'))[_0xd9c1('0xa')](_0xd9c1('0xb')),moment()[_0xd9c1('0xa')](_0xd9c1('0xb'))]}},'raw':![]},'log':'GetCmHopperHistory'});};};exports[_0xd9c1('0xc')]=function(_0x31c3fb){return function(){return client[_0xd9c1('0x6')](_0xd9c1('0xd'),{'options':{'where':{'createdAt':{'$between':[moment()[_0xd9c1('0xe')](_0xd9c1('0xf'))[_0xd9c1('0xa')]('YYYY-MM-DD\x20HH:mm:ss'),moment()[_0xd9c1('0x10')](_0xd9c1('0xf'))[_0xd9c1('0xa')]('YYYY-MM-DD\x20HH:mm:ss')]},'campaigntype':_0xd9c1('0x4')},'raw':![]},'log':'GetVoiceQueueHopperHistory'});};};exports[_0xd9c1('0x11')]=function(_0x21bb32){return function(){return client[_0xd9c1('0x6')](_0xd9c1('0x12'),{'options':{'where':{'createdAt':{'$between':[moment()[_0xd9c1('0xe')](_0xd9c1('0xf'))[_0xd9c1('0xa')](_0xd9c1('0xb')),moment()[_0xd9c1('0x10')](_0xd9c1('0xf'))[_0xd9c1('0xa')](_0xd9c1('0xb'))]},'campaigntype':_0xd9c1('0x13')},'raw':![]},'log':_0xd9c1('0x12')});};};
\ No newline at end of file
index 4eccd76..424e5cd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf494=['minrate','maxrate','modem','gateway','faxdetect','t38timeout','ListId','key','Trunk','callerid','active','getFaxAccount','NotifyFaxAccount','../client','getFaxAccounts','Request','name','description','ecm','headerinfo','localstationid'];(function(_0x4eb932,_0x4e5f47){var _0x19ec6e=function(_0x41a3ea){while(--_0x41a3ea){_0x4eb932['push'](_0x4eb932['shift']());}};_0x19ec6e(++_0x4e5f47);}(_0xf494,0x1c6));var _0x4f49=function(_0x70d52f,_0x1b99a3){_0x70d52f=_0x70d52f-0x0;var _0x533166=_0xf494[_0x70d52f];return _0x533166;};'use strict';var client=require(_0x4f49('0x0'));exports[_0x4f49('0x1')]=function(){return function(){return client[_0x4f49('0x2')]('GetFaxAccount',{'options':{'raw':![],'attributes':['id',_0x4f49('0x3'),_0x4f49('0x4'),_0x4f49('0x5'),_0x4f49('0x6'),_0x4f49('0x7'),_0x4f49('0x8'),_0x4f49('0x9'),_0x4f49('0xa'),_0x4f49('0xb'),_0x4f49('0xc'),_0x4f49('0xd'),'tech','TrunkId',_0x4f49('0xe'),_0x4f49('0xf')],'include':[{'model':_0x4f49('0x10'),'as':_0x4f49('0x10'),'attributes':['id',_0x4f49('0x3'),_0x4f49('0x11'),_0x4f49('0x12')]}]},'log':_0x4f49('0x13')});};};exports['notify']=function(_0x3e464f,_0x411759){return client['Request'](_0x4f49('0x14'),{'account':{'id':_0x3e464f},'body':_0x411759,'log':'NotifyFaxAccount'});};
\ No newline at end of file
+var _0x1cb9=['localstationid','maxrate','modem','gateway','faxdetect','t38timeout','tech','ListId','Trunk','callerid','active','getFaxAccount','notify','NotifyFaxAccount','../client','Request','GetFaxAccount','name','description','headerinfo'];(function(_0x210966,_0x40aa93){var _0x23489a=function(_0x5425dc){while(--_0x5425dc){_0x210966['push'](_0x210966['shift']());}};_0x23489a(++_0x40aa93);}(_0x1cb9,0x14e));var _0x91cb=function(_0x5a07ef,_0x11e4f6){_0x5a07ef=_0x5a07ef-0x0;var _0x397919=_0x1cb9[_0x5a07ef];return _0x397919;};'use strict';var client=require(_0x91cb('0x0'));exports['getFaxAccounts']=function(){return function(){return client[_0x91cb('0x1')](_0x91cb('0x2'),{'options':{'raw':![],'attributes':['id',_0x91cb('0x3'),_0x91cb('0x4'),'ecm',_0x91cb('0x5'),_0x91cb('0x6'),'minrate',_0x91cb('0x7'),_0x91cb('0x8'),_0x91cb('0x9'),_0x91cb('0xa'),_0x91cb('0xb'),_0x91cb('0xc'),'TrunkId',_0x91cb('0xd'),'key'],'include':[{'model':_0x91cb('0xe'),'as':'Trunk','attributes':['id',_0x91cb('0x3'),_0x91cb('0xf'),_0x91cb('0x10')]}]},'log':_0x91cb('0x11')});};};exports[_0x91cb('0x12')]=function(_0x23ba9a,_0x21a0a5){return client[_0x91cb('0x1')](_0x91cb('0x13'),{'account':{'id':_0x23ba9a},'body':_0x21a0a5,'log':_0x91cb('0x13')});};
\ No newline at end of file
index 1ab09ec..40c4695 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdb8b=['update','UpdateFaxMessage'];(function(_0x23d44d,_0x31d31e){var _0x159e24=function(_0x166446){while(--_0x166446){_0x23d44d['push'](_0x23d44d['shift']());}};_0x159e24(++_0x31d31e);}(_0xdb8b,0x1c4));var _0xbdb8=function(_0x550eb7,_0x25c6d4){_0x550eb7=_0x550eb7-0x0;var _0x10d76b=_0xdb8b[_0x550eb7];return _0x10d76b;};'use strict';var client=require('../client');exports[_0xbdb8('0x0')]=function(_0x55db0,_0x396c23){return client['Request']('UpdateFaxMessage',{'body':_0x396c23,'options':{'where':{'AttachmentId':_0x55db0}},'log':_0xbdb8('0x1')});};
\ No newline at end of file
+var _0x1751=['UpdateFaxMessage','../client','update'];(function(_0x8c43de,_0x90ff31){var _0xa6591b=function(_0x469716){while(--_0x469716){_0x8c43de['push'](_0x8c43de['shift']());}};_0xa6591b(++_0x90ff31);}(_0x1751,0x76));var _0x1175=function(_0x4a942b,_0x2f3533){_0x4a942b=_0x4a942b-0x0;var _0x5ae1b8=_0x1751[_0x4a942b];return _0x5ae1b8;};'use strict';var client=require(_0x1175('0x0'));exports[_0x1175('0x1')]=function(_0x110a8c,_0x1da1a9){return client['Request'](_0x1175('0x2'),{'body':_0x1da1a9,'options':{'where':{'AttachmentId':_0x110a8c}},'log':_0x1175('0x2')});};
\ No newline at end of file
index 6de51e3..0dabc9f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2756=['type','serverUrl','DeskConfiguration','Configurations','DeskField','Subjects','content','variableName','Variable','Descriptions','key','keyType','customField','Tags','GetDeskAccount','../../client','name','description','remoteUri'];(function(_0x2517ae,_0x2f5c62){var _0x152f2b=function(_0x3fc79a){while(--_0x3fc79a){_0x2517ae['push'](_0x2517ae['shift']());}};_0x152f2b(++_0x2f5c62);}(_0x2756,0x1ea));var _0x6275=function(_0x398294,_0x5ceb9d){_0x398294=_0x398294-0x0;var _0x2a872d=_0x2756[_0x398294];return _0x2a872d;};'use strict';var client=require(_0x6275('0x0'));exports['getDeskAccounts']=function(){return function(_0x538750){return client['Request']('GetDeskAccount',{'options':{'raw':![],'attributes':['id',_0x6275('0x1'),_0x6275('0x2'),'username','password',_0x6275('0x3'),'authType',_0x6275('0x4'),_0x6275('0x5')],'include':[{'model':_0x6275('0x6'),'as':_0x6275('0x7'),'attributes':['id',_0x6275('0x1')],'include':[{'model':_0x6275('0x8'),'as':_0x6275('0x9'),'attributes':['id','type',_0x6275('0xa'),_0x6275('0xb')],'include':[{'model':_0x6275('0xc'),'as':_0x6275('0xc'),'attributes':['id',_0x6275('0x1')]}]},{'model':_0x6275('0x8'),'as':_0x6275('0xd'),'attributes':['id',_0x6275('0x4'),_0x6275('0xa'),_0x6275('0xe'),_0x6275('0xf'),'keyContent',_0x6275('0xb')],'include':[{'model':_0x6275('0xc'),'as':_0x6275('0xc'),'attributes':['id',_0x6275('0x1')]}]},{'model':'DeskField','as':'Fields','attributes':['id',_0x6275('0x4'),_0x6275('0xa'),'idField','nameField',_0x6275('0x10'),'variableName'],'include':[{'model':_0x6275('0xc'),'as':_0x6275('0xc'),'attributes':['id','name']}]},{'model':'Tag','as':_0x6275('0x11'),'attributes':['id',_0x6275('0x1')]}]}]},'log':_0x6275('0x12')});};};
\ No newline at end of file
+var _0x3b59=['../../client','Request','GetDeskAccount','name','description','username','password','remoteUri','authType','serverUrl','Configurations','DeskField','Subjects','type','Variable','Descriptions','content','key','keyType','variableName','idField','nameField','customField','Tag'];(function(_0x44f280,_0x4a1dad){var _0x4ee19d=function(_0xc02f51){while(--_0xc02f51){_0x44f280['push'](_0x44f280['shift']());}};_0x4ee19d(++_0x4a1dad);}(_0x3b59,0xc0));var _0x93b5=function(_0x5c9098,_0x5520ce){_0x5c9098=_0x5c9098-0x0;var _0x1792b3=_0x3b59[_0x5c9098];return _0x1792b3;};'use strict';var client=require(_0x93b5('0x0'));exports['getDeskAccounts']=function(){return function(_0x232885){return client[_0x93b5('0x1')](_0x93b5('0x2'),{'options':{'raw':![],'attributes':['id',_0x93b5('0x3'),_0x93b5('0x4'),_0x93b5('0x5'),_0x93b5('0x6'),_0x93b5('0x7'),_0x93b5('0x8'),'type',_0x93b5('0x9')],'include':[{'model':'DeskConfiguration','as':_0x93b5('0xa'),'attributes':['id',_0x93b5('0x3')],'include':[{'model':_0x93b5('0xb'),'as':_0x93b5('0xc'),'attributes':['id',_0x93b5('0xd'),'content','variableName'],'include':[{'model':_0x93b5('0xe'),'as':_0x93b5('0xe'),'attributes':['id',_0x93b5('0x3')]}]},{'model':_0x93b5('0xb'),'as':_0x93b5('0xf'),'attributes':['id',_0x93b5('0xd'),_0x93b5('0x10'),_0x93b5('0x11'),_0x93b5('0x12'),'keyContent',_0x93b5('0x13')],'include':[{'model':_0x93b5('0xe'),'as':'Variable','attributes':['id',_0x93b5('0x3')]}]},{'model':'DeskField','as':'Fields','attributes':['id',_0x93b5('0xd'),_0x93b5('0x10'),_0x93b5('0x14'),_0x93b5('0x15'),_0x93b5('0x16'),_0x93b5('0x13')],'include':[{'model':_0x93b5('0xe'),'as':_0x93b5('0xe'),'attributes':['id',_0x93b5('0x3')]}]},{'model':_0x93b5('0x17'),'as':'Tags','attributes':['id',_0x93b5('0x3')]}]}]},'log':'GetDeskAccount'});};};
\ No newline at end of file
index 232481c..7874277 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xecb9=['tenantId','clientId','clientSecret','serverUrl','Dynamics365Configuration','Configurations','name','ticketType','Dynamics365Field','Subjects','type','content','Variable','Descriptions','key','keyContent','variableName','Fields','idField','customField','GetDynamics365Account','getDynamics365Accounts','password'];(function(_0x293e39,_0x34315f){var _0x118450=function(_0x1efd24){while(--_0x1efd24){_0x293e39['push'](_0x293e39['shift']());}};_0x118450(++_0x34315f);}(_0xecb9,0x16e));var _0x9ecb=function(_0x2586ad,_0x3a2816){_0x2586ad=_0x2586ad-0x0;var _0x4128db=_0xecb9[_0x2586ad];return _0x4128db;};'use strict';var client=require('../../client');exports[_0x9ecb('0x0')]=function(){return function(_0x480147){return client['Request']('GetDynamics365Account',{'options':{'raw':![],'attributes':['id','name','username',_0x9ecb('0x1'),'remoteUri',_0x9ecb('0x2'),_0x9ecb('0x3'),_0x9ecb('0x4'),_0x9ecb('0x5'),'description'],'include':[{'model':_0x9ecb('0x6'),'as':_0x9ecb('0x7'),'attributes':['id',_0x9ecb('0x8'),_0x9ecb('0x9')],'include':[{'model':_0x9ecb('0xa'),'as':_0x9ecb('0xb'),'attributes':['id',_0x9ecb('0xc'),_0x9ecb('0xd'),'variableName'],'include':[{'model':'Variable','as':_0x9ecb('0xe'),'attributes':['id',_0x9ecb('0x8')]}]},{'model':'Dynamics365Field','as':_0x9ecb('0xf'),'attributes':['id',_0x9ecb('0xc'),_0x9ecb('0xd'),_0x9ecb('0x10'),'keyType',_0x9ecb('0x11'),_0x9ecb('0x12')],'include':[{'model':_0x9ecb('0xe'),'as':_0x9ecb('0xe'),'attributes':['id',_0x9ecb('0x8')]}]},{'model':_0x9ecb('0xa'),'as':_0x9ecb('0x13'),'attributes':['id',_0x9ecb('0xc'),_0x9ecb('0xd'),_0x9ecb('0x14'),'nameField',_0x9ecb('0x15'),_0x9ecb('0x12')],'include':[{'model':_0x9ecb('0xe'),'as':_0x9ecb('0xe'),'attributes':['id','name']}]}]}]},'log':_0x9ecb('0x16')});};};
\ No newline at end of file
+var _0x11ee=['serverUrl','description','Dynamics365Configuration','Configurations','ticketType','Dynamics365Field','Subjects','content','variableName','Variable','Descriptions','type','keyType','keyContent','nameField','customField','name','GetDynamics365Account','../../client','getDynamics365Accounts','username','password','tenantId','clientId','clientSecret'];(function(_0x336e18,_0x4f3f64){var _0x311694=function(_0x25e714){while(--_0x25e714){_0x336e18['push'](_0x336e18['shift']());}};_0x311694(++_0x4f3f64);}(_0x11ee,0x8f));var _0xe11e=function(_0x2958f8,_0x1b8fda){_0x2958f8=_0x2958f8-0x0;var _0x1a02c0=_0x11ee[_0x2958f8];return _0x1a02c0;};'use strict';var client=require(_0xe11e('0x0'));exports[_0xe11e('0x1')]=function(){return function(_0x1c4eb9){return client['Request']('GetDynamics365Account',{'options':{'raw':![],'attributes':['id','name',_0xe11e('0x2'),_0xe11e('0x3'),'remoteUri',_0xe11e('0x4'),_0xe11e('0x5'),_0xe11e('0x6'),_0xe11e('0x7'),_0xe11e('0x8')],'include':[{'model':_0xe11e('0x9'),'as':_0xe11e('0xa'),'attributes':['id','name',_0xe11e('0xb')],'include':[{'model':_0xe11e('0xc'),'as':_0xe11e('0xd'),'attributes':['id','type',_0xe11e('0xe'),_0xe11e('0xf')],'include':[{'model':_0xe11e('0x10'),'as':_0xe11e('0x10'),'attributes':['id','name']}]},{'model':'Dynamics365Field','as':_0xe11e('0x11'),'attributes':['id',_0xe11e('0x12'),'content','key',_0xe11e('0x13'),_0xe11e('0x14'),_0xe11e('0xf')],'include':[{'model':_0xe11e('0x10'),'as':_0xe11e('0x10'),'attributes':['id','name']}]},{'model':'Dynamics365Field','as':'Fields','attributes':['id',_0xe11e('0x12'),_0xe11e('0xe'),'idField',_0xe11e('0x15'),_0xe11e('0x16'),_0xe11e('0xf')],'include':[{'model':'Variable','as':_0xe11e('0x10'),'attributes':['id',_0xe11e('0x17')]}]}]}]},'log':_0xe11e('0x18')});};};
\ No newline at end of file
index 2f0fb9c..2025319 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x98a8=['Descriptions','type','keyType','idField','nameField','customField','../../client','getFreshdeskAccounts','Request','GetFreshdeskAccount','name','username','remoteUri','serverUrl','FreshdeskConfiguration','Configurations','Subjects','content','variableName','Variable','FreshdeskField'];(function(_0x2fe0cf,_0x46ef0b){var _0x5d6d8c=function(_0x1af0af){while(--_0x1af0af){_0x2fe0cf['push'](_0x2fe0cf['shift']());}};_0x5d6d8c(++_0x46ef0b);}(_0x98a8,0x12c));var _0x898a=function(_0x3c126,_0x28a0f4){_0x3c126=_0x3c126-0x0;var _0x143ee6=_0x98a8[_0x3c126];return _0x143ee6;};'use strict';var client=require(_0x898a('0x0'));exports[_0x898a('0x1')]=function(){return function(_0x3c1d2d){return client[_0x898a('0x2')](_0x898a('0x3'),{'options':{'raw':![],'attributes':['id',_0x898a('0x4'),_0x898a('0x5'),'apiKey',_0x898a('0x6'),_0x898a('0x7')],'include':[{'model':_0x898a('0x8'),'as':_0x898a('0x9'),'attributes':['id',_0x898a('0x4')],'include':[{'model':'Tag','attributes':['id',_0x898a('0x4')]},{'model':'FreshdeskField','as':_0x898a('0xa'),'attributes':['id','type',_0x898a('0xb'),_0x898a('0xc')],'include':[{'model':_0x898a('0xd'),'as':_0x898a('0xd'),'attributes':['id',_0x898a('0x4')]}]},{'model':_0x898a('0xe'),'as':_0x898a('0xf'),'attributes':['id',_0x898a('0x10'),_0x898a('0xb'),'key',_0x898a('0x11'),'keyContent',_0x898a('0xc')],'include':[{'model':'Variable','as':_0x898a('0xd'),'attributes':['id',_0x898a('0x4')]}]},{'model':_0x898a('0xe'),'as':'Fields','attributes':['id','type','content',_0x898a('0x12'),_0x898a('0x13'),_0x898a('0x14'),_0x898a('0xc')],'include':[{'model':_0x898a('0xd'),'as':_0x898a('0xd'),'attributes':['id','name']}]}]}]},'log':_0x898a('0x3')});};};
\ No newline at end of file
+var _0x2d17=['name','Subjects','type','content','Variable','Descriptions','key','keyType','keyContent','variableName','Fields','idField','nameField','customField','../../client','getFreshdeskAccounts','Request','GetFreshdeskAccount','username','apiKey','serverUrl','Configurations','Tag'];(function(_0x3b5b63,_0x342aa0){var _0x37d16e=function(_0x4cf52c){while(--_0x4cf52c){_0x3b5b63['push'](_0x3b5b63['shift']());}};_0x37d16e(++_0x342aa0);}(_0x2d17,0x17e));var _0x72d1=function(_0x57e34b,_0x1a4af0){_0x57e34b=_0x57e34b-0x0;var _0x5d9fe6=_0x2d17[_0x57e34b];return _0x5d9fe6;};'use strict';var client=require(_0x72d1('0x0'));exports[_0x72d1('0x1')]=function(){return function(_0x52078d){return client[_0x72d1('0x2')](_0x72d1('0x3'),{'options':{'raw':![],'attributes':['id','name',_0x72d1('0x4'),_0x72d1('0x5'),'remoteUri',_0x72d1('0x6')],'include':[{'model':'FreshdeskConfiguration','as':_0x72d1('0x7'),'attributes':['id','name'],'include':[{'model':_0x72d1('0x8'),'attributes':['id',_0x72d1('0x9')]},{'model':'FreshdeskField','as':_0x72d1('0xa'),'attributes':['id',_0x72d1('0xb'),_0x72d1('0xc'),'variableName'],'include':[{'model':_0x72d1('0xd'),'as':_0x72d1('0xd'),'attributes':['id',_0x72d1('0x9')]}]},{'model':'FreshdeskField','as':_0x72d1('0xe'),'attributes':['id',_0x72d1('0xb'),_0x72d1('0xc'),_0x72d1('0xf'),_0x72d1('0x10'),_0x72d1('0x11'),_0x72d1('0x12')],'include':[{'model':_0x72d1('0xd'),'as':_0x72d1('0xd'),'attributes':['id',_0x72d1('0x9')]}]},{'model':'FreshdeskField','as':_0x72d1('0x13'),'attributes':['id',_0x72d1('0xb'),_0x72d1('0xc'),_0x72d1('0x14'),_0x72d1('0x15'),_0x72d1('0x16'),_0x72d1('0x12')],'include':[{'model':_0x72d1('0xd'),'as':_0x72d1('0xd'),'attributes':['id',_0x72d1('0x9')]}]}]}]},'log':_0x72d1('0x3')});};};
\ No newline at end of file
index 6753dbb..6b30f6d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdb4a=['moduleCreate','SalesforceField','Subjects','Variable','Descriptions','../../client','getSalesforceAccounts','Request','GetSalesforceAccount','username','password','remoteUri','clientSecret','securityToken','serverUrl','type','Configurations','name','moduleSearch'];(function(_0x31429d,_0x39f5aa){var _0xa6dc67=function(_0x4d8d6f){while(--_0x4d8d6f){_0x31429d['push'](_0x31429d['shift']());}};_0xa6dc67(++_0x39f5aa);}(_0xdb4a,0x1ba));var _0xadb4=function(_0x173441,_0x26b0d9){_0x173441=_0x173441-0x0;var _0x2423a8=_0xdb4a[_0x173441];return _0x2423a8;};'use strict';var client=require(_0xadb4('0x0'));exports[_0xadb4('0x1')]=function(){return function(_0x3c49c4){return client[_0xadb4('0x2')](_0xadb4('0x3'),{'options':{'raw':![],'attributes':['id','name',_0xadb4('0x4'),_0xadb4('0x5'),_0xadb4('0x6'),'clientId',_0xadb4('0x7'),_0xadb4('0x8'),_0xadb4('0x9'),_0xadb4('0xa')],'include':[{'model':'SalesforceConfiguration','as':_0xadb4('0xb'),'attributes':['id',_0xadb4('0xc'),_0xadb4('0xd'),_0xadb4('0xe'),'ticketType'],'include':[{'model':_0xadb4('0xf'),'as':_0xadb4('0x10'),'include':[{'model':'Variable','as':_0xadb4('0x11'),'attributes':['id',_0xadb4('0xc')]}]},{'model':'SalesforceField','as':_0xadb4('0x12'),'include':[{'model':'Variable','as':_0xadb4('0x11'),'attributes':['id',_0xadb4('0xc')]}]},{'model':_0xadb4('0xf'),'as':'Fields','include':[{'model':_0xadb4('0x11'),'as':_0xadb4('0x11'),'attributes':['id',_0xadb4('0xc')]}]}]}]},'log':_0xadb4('0x3')});};};
\ No newline at end of file
+var _0x86e7=['../../client','getSalesforceAccounts','Request','name','username','password','remoteUri','clientId','clientSecret','serverUrl','type','SalesforceConfiguration','moduleSearch','moduleCreate','ticketType','SalesforceField','Subjects','Variable','Fields'];(function(_0x77ae70,_0x257349){var _0x25219c=function(_0x29a0de){while(--_0x29a0de){_0x77ae70['push'](_0x77ae70['shift']());}};_0x25219c(++_0x257349);}(_0x86e7,0x130));var _0x786e=function(_0x599e60,_0x5b6519){_0x599e60=_0x599e60-0x0;var _0x468e19=_0x86e7[_0x599e60];return _0x468e19;};'use strict';var client=require(_0x786e('0x0'));exports[_0x786e('0x1')]=function(){return function(_0x26bedf){return client[_0x786e('0x2')]('GetSalesforceAccount',{'options':{'raw':![],'attributes':['id',_0x786e('0x3'),_0x786e('0x4'),_0x786e('0x5'),_0x786e('0x6'),_0x786e('0x7'),_0x786e('0x8'),'securityToken',_0x786e('0x9'),_0x786e('0xa')],'include':[{'model':_0x786e('0xb'),'as':'Configurations','attributes':['id','name',_0x786e('0xc'),_0x786e('0xd'),_0x786e('0xe')],'include':[{'model':_0x786e('0xf'),'as':_0x786e('0x10'),'include':[{'model':'Variable','as':_0x786e('0x11'),'attributes':['id','name']}]},{'model':_0x786e('0xf'),'as':'Descriptions','include':[{'model':_0x786e('0x11'),'as':_0x786e('0x11'),'attributes':['id','name']}]},{'model':'SalesforceField','as':_0x786e('0x12'),'include':[{'model':'Variable','as':_0x786e('0x11'),'attributes':['id','name']}]}]}]},'log':'GetSalesforceAccount'});};};
\ No newline at end of file
index 650fdf3..ad73994 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdf81=['remoteUri','serverUrl','ServicenowConfiguration','Configurations','ServicenowField','variableName','Variable','type','key','keyContent','content','nameField','customField','getServicenowAccounts','Request','GetServicenowAccount','name','password','email'];(function(_0xe5de3f,_0xfcafba){var _0x30a535=function(_0x2bad7e){while(--_0x2bad7e){_0xe5de3f['push'](_0xe5de3f['shift']());}};_0x30a535(++_0xfcafba);}(_0xdf81,0x92));var _0x1df8=function(_0x29d94e,_0xf386d6){_0x29d94e=_0x29d94e-0x0;var _0x106237=_0xdf81[_0x29d94e];return _0x106237;};'use strict';var client=require('../../client');exports[_0x1df8('0x0')]=function(){return function(_0xb95cf6){return client[_0x1df8('0x1')](_0x1df8('0x2'),{'options':{'raw':![],'attributes':['id',_0x1df8('0x3'),'description','username',_0x1df8('0x4'),_0x1df8('0x5'),_0x1df8('0x6'),_0x1df8('0x7')],'include':[{'model':_0x1df8('0x8'),'as':_0x1df8('0x9'),'attributes':['id',_0x1df8('0x3')],'include':[{'model':_0x1df8('0xa'),'as':'Subjects','attributes':['id','type','content',_0x1df8('0xb')],'include':[{'model':'Variable','as':_0x1df8('0xc'),'attributes':['id',_0x1df8('0x3')]}]},{'model':_0x1df8('0xa'),'as':'Descriptions','attributes':['id',_0x1df8('0xd'),'content',_0x1df8('0xe'),'keyType',_0x1df8('0xf'),'variableName'],'include':[{'model':'Variable','as':_0x1df8('0xc'),'attributes':['id','name']}]},{'model':_0x1df8('0xa'),'as':'Fields','attributes':['id',_0x1df8('0xd'),_0x1df8('0x10'),'idField',_0x1df8('0x11'),_0x1df8('0x12'),_0x1df8('0xb')],'include':[{'model':_0x1df8('0xc'),'as':_0x1df8('0xc'),'attributes':['id','name']}]}]}]},'log':'GetServicenowkAccount'});};};
\ No newline at end of file
+var _0x4843=['type','variableName','Variable','Descriptions','content','key','keyType','keyContent','ServicenowField','Fields','idField','GetServicenowkAccount','../../client','getServicenowAccounts','GetServicenowAccount','name','password','email','Configurations'];(function(_0x38cd1a,_0xfd5008){var _0x43b6ce=function(_0xd25289){while(--_0xd25289){_0x38cd1a['push'](_0x38cd1a['shift']());}};_0x43b6ce(++_0xfd5008);}(_0x4843,0x7e));var _0x3484=function(_0x557451,_0x507a4f){_0x557451=_0x557451-0x0;var _0x13616f=_0x4843[_0x557451];return _0x13616f;};'use strict';var client=require(_0x3484('0x0'));exports[_0x3484('0x1')]=function(){return function(_0x1b851a){return client['Request'](_0x3484('0x2'),{'options':{'raw':![],'attributes':['id',_0x3484('0x3'),'description','username',_0x3484('0x4'),_0x3484('0x5'),'remoteUri','serverUrl'],'include':[{'model':'ServicenowConfiguration','as':_0x3484('0x6'),'attributes':['id',_0x3484('0x3')],'include':[{'model':'ServicenowField','as':'Subjects','attributes':['id',_0x3484('0x7'),'content',_0x3484('0x8')],'include':[{'model':_0x3484('0x9'),'as':_0x3484('0x9'),'attributes':['id',_0x3484('0x3')]}]},{'model':'ServicenowField','as':_0x3484('0xa'),'attributes':['id',_0x3484('0x7'),_0x3484('0xb'),_0x3484('0xc'),_0x3484('0xd'),_0x3484('0xe'),_0x3484('0x8')],'include':[{'model':_0x3484('0x9'),'as':_0x3484('0x9'),'attributes':['id',_0x3484('0x3')]}]},{'model':_0x3484('0xf'),'as':_0x3484('0x10'),'attributes':['id','type','content',_0x3484('0x11'),'nameField','customField',_0x3484('0x8')],'include':[{'model':_0x3484('0x9'),'as':_0x3484('0x9'),'attributes':['id',_0x3484('0x3')]}]}]}]},'log':_0x3484('0x12')});};};
\ No newline at end of file
index a530f5c..82604b6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x63bb=['Configurations','SugarcrmField','content','variableName','Descriptions','type','keyType','keyContent','Variable','Fields','idField','nameField','customField','GetSugarcrmAccount','../../client','getSugarcrmAccounts','Request','name','username','password','remoteUri','SugarcrmConfiguration'];(function(_0x30f87a,_0x2cce5a){var _0x3a8efc=function(_0x225d6b){while(--_0x225d6b){_0x30f87a['push'](_0x30f87a['shift']());}};_0x3a8efc(++_0x2cce5a);}(_0x63bb,0x7c));var _0xb63b=function(_0x5cd2ab,_0x2d162b){_0x5cd2ab=_0x5cd2ab-0x0;var _0x4663db=_0x63bb[_0x5cd2ab];return _0x4663db;};'use strict';var client=require(_0xb63b('0x0'));exports[_0xb63b('0x1')]=function(){return function(_0x8acbac){return client[_0xb63b('0x2')]('GetSugarcrmAccount',{'options':{'raw':![],'attributes':['id',_0xb63b('0x3'),_0xb63b('0x4'),_0xb63b('0x5'),_0xb63b('0x6'),'serverUrl'],'include':[{'model':_0xb63b('0x7'),'as':_0xb63b('0x8'),'attributes':['id',_0xb63b('0x3')],'include':[{'model':_0xb63b('0x9'),'as':'Subjects','attributes':['id','type',_0xb63b('0xa'),_0xb63b('0xb')],'include':[{'model':'Variable','as':'Variable','attributes':['id',_0xb63b('0x3')]}]},{'model':_0xb63b('0x9'),'as':_0xb63b('0xc'),'attributes':['id',_0xb63b('0xd'),_0xb63b('0xa'),'key',_0xb63b('0xe'),_0xb63b('0xf'),_0xb63b('0xb')],'include':[{'model':'Variable','as':_0xb63b('0x10'),'attributes':['id',_0xb63b('0x3')]}]},{'model':_0xb63b('0x9'),'as':_0xb63b('0x11'),'attributes':['id',_0xb63b('0xd'),_0xb63b('0xa'),_0xb63b('0x12'),_0xb63b('0x13'),_0xb63b('0x14'),_0xb63b('0xb')],'include':[{'model':_0xb63b('0x10'),'as':_0xb63b('0x10'),'attributes':['id',_0xb63b('0x3')]}]}]}]},'log':_0xb63b('0x15')});};};
\ No newline at end of file
+var _0x8685=['Request','GetSugarcrmAccount','name','username','password','serverUrl','SugarcrmConfiguration','Configurations','SugarcrmField','Subjects','type','content','Variable','Descriptions','key','keyType','keyContent','nameField','customField','../../client','getSugarcrmAccounts'];(function(_0x2d7b42,_0x510f0b){var _0x207a89=function(_0x13b236){while(--_0x13b236){_0x2d7b42['push'](_0x2d7b42['shift']());}};_0x207a89(++_0x510f0b);}(_0x8685,0x10f));var _0x5868=function(_0x5cbd0c,_0x1d088c){_0x5cbd0c=_0x5cbd0c-0x0;var _0x31eef5=_0x8685[_0x5cbd0c];return _0x31eef5;};'use strict';var client=require(_0x5868('0x0'));exports[_0x5868('0x1')]=function(){return function(_0x2611f7){return client[_0x5868('0x2')](_0x5868('0x3'),{'options':{'raw':![],'attributes':['id',_0x5868('0x4'),_0x5868('0x5'),_0x5868('0x6'),'remoteUri',_0x5868('0x7')],'include':[{'model':_0x5868('0x8'),'as':_0x5868('0x9'),'attributes':['id',_0x5868('0x4')],'include':[{'model':_0x5868('0xa'),'as':_0x5868('0xb'),'attributes':['id',_0x5868('0xc'),_0x5868('0xd'),'variableName'],'include':[{'model':'Variable','as':_0x5868('0xe'),'attributes':['id',_0x5868('0x4')]}]},{'model':_0x5868('0xa'),'as':_0x5868('0xf'),'attributes':['id',_0x5868('0xc'),_0x5868('0xd'),_0x5868('0x10'),_0x5868('0x11'),_0x5868('0x12'),'variableName'],'include':[{'model':'Variable','as':_0x5868('0xe'),'attributes':['id',_0x5868('0x4')]}]},{'model':_0x5868('0xa'),'as':'Fields','attributes':['id',_0x5868('0xc'),_0x5868('0xd'),'idField',_0x5868('0x13'),_0x5868('0x14'),'variableName'],'include':[{'model':_0x5868('0xe'),'as':_0x5868('0xe'),'attributes':['id',_0x5868('0x4')]}]}]}]},'log':_0x5868('0x3')});};};
\ No newline at end of file
index eb2c136..0f072da 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x73f2=['Descriptions','keyType','keyContent','variableName','Fields','idField','../../client','getVtigerAccounts','GetVtigerAccount','name','description','username','accessKey','VtigerConfiguration','Configurations','VtigerField','type','content','Variable'];(function(_0x4a747d,_0x3b747f){var _0x3a5b5c=function(_0x4b3e81){while(--_0x4b3e81){_0x4a747d['push'](_0x4a747d['shift']());}};_0x3a5b5c(++_0x3b747f);}(_0x73f2,0x1e1));var _0x273f=function(_0x2dbca8,_0x19d979){_0x2dbca8=_0x2dbca8-0x0;var _0x34b361=_0x73f2[_0x2dbca8];return _0x34b361;};'use strict';var client=require(_0x273f('0x0'));exports[_0x273f('0x1')]=function(){return function(_0x4a247a){return client['Request'](_0x273f('0x2'),{'options':{'raw':![],'attributes':['id',_0x273f('0x3'),_0x273f('0x4'),_0x273f('0x5'),_0x273f('0x6'),'remoteUri','serverUrl'],'include':[{'model':_0x273f('0x7'),'as':_0x273f('0x8'),'attributes':['id','name'],'include':[{'model':_0x273f('0x9'),'as':'Subjects','attributes':['id',_0x273f('0xa'),_0x273f('0xb'),'variableName'],'include':[{'model':_0x273f('0xc'),'as':'Variable','attributes':['id',_0x273f('0x3')]}]},{'model':_0x273f('0x9'),'as':_0x273f('0xd'),'attributes':['id','type',_0x273f('0xb'),'key',_0x273f('0xe'),_0x273f('0xf'),_0x273f('0x10')],'include':[{'model':_0x273f('0xc'),'as':_0x273f('0xc'),'attributes':['id',_0x273f('0x3')]}]},{'model':_0x273f('0x9'),'as':_0x273f('0x11'),'attributes':['id',_0x273f('0xa'),_0x273f('0xb'),_0x273f('0x12'),'nameField','customField',_0x273f('0x10')],'include':[{'model':_0x273f('0xc'),'as':_0x273f('0xc'),'attributes':['id',_0x273f('0x3')]}]}]}]},'log':'GetVtigerAccount'});};};
\ No newline at end of file
+var _0x2afd=['variableName','Variable','Descriptions','keyType','keyContent','idField','nameField','customField','../../client','GetVtigerAccount','description','accessKey','remoteUri','serverUrl','Configurations','name','VtigerField','Subjects','type','content'];(function(_0x2f9e55,_0x2f39fe){var _0x8fdae1=function(_0x32170b){while(--_0x32170b){_0x2f9e55['push'](_0x2f9e55['shift']());}};_0x8fdae1(++_0x2f39fe);}(_0x2afd,0x1c0));var _0xd2af=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0x2afd[_0x2641f9];return _0x585741;};'use strict';var client=require(_0xd2af('0x0'));exports['getVtigerAccounts']=function(){return function(_0x5d28bf){return client['Request'](_0xd2af('0x1'),{'options':{'raw':![],'attributes':['id','name',_0xd2af('0x2'),'username',_0xd2af('0x3'),_0xd2af('0x4'),_0xd2af('0x5')],'include':[{'model':'VtigerConfiguration','as':_0xd2af('0x6'),'attributes':['id',_0xd2af('0x7')],'include':[{'model':_0xd2af('0x8'),'as':_0xd2af('0x9'),'attributes':['id',_0xd2af('0xa'),_0xd2af('0xb'),_0xd2af('0xc')],'include':[{'model':_0xd2af('0xd'),'as':_0xd2af('0xd'),'attributes':['id',_0xd2af('0x7')]}]},{'model':_0xd2af('0x8'),'as':_0xd2af('0xe'),'attributes':['id',_0xd2af('0xa'),_0xd2af('0xb'),'key',_0xd2af('0xf'),_0xd2af('0x10'),_0xd2af('0xc')],'include':[{'model':_0xd2af('0xd'),'as':_0xd2af('0xd'),'attributes':['id','name']}]},{'model':_0xd2af('0x8'),'as':'Fields','attributes':['id',_0xd2af('0xa'),'content',_0xd2af('0x11'),_0xd2af('0x12'),_0xd2af('0x13'),_0xd2af('0xc')],'include':[{'model':'Variable','as':_0xd2af('0xd'),'attributes':['id',_0xd2af('0x7')]}]}]}]},'log':'GetVtigerAccount'});};};
\ No newline at end of file
index 4dcce41..1c5599e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x196c=['username','password','authType','serverUrl','Configurations','ZendeskField','type','Variable','Descriptions','content','key','keyType','variableName','Fields','idField','nameField','customField','../../client','getZendeskAccounts','Request','GetZendeskAccount','name'];(function(_0xcfeda9,_0xd418ae){var _0x4826c7=function(_0x45dc9d){while(--_0x45dc9d){_0xcfeda9['push'](_0xcfeda9['shift']());}};_0x4826c7(++_0xd418ae);}(_0x196c,0x145));var _0xc196=function(_0x156c28,_0x1dca5c){_0x156c28=_0x156c28-0x0;var _0x404b0a=_0x196c[_0x156c28];return _0x404b0a;};'use strict';var client=require(_0xc196('0x0'));exports[_0xc196('0x1')]=function(){return function(_0x54b1dd){return client[_0xc196('0x2')](_0xc196('0x3'),{'options':{'raw':![],'attributes':['id',_0xc196('0x4'),_0xc196('0x5'),_0xc196('0x6'),'token','remoteUri',_0xc196('0x7'),_0xc196('0x8'),'type'],'include':[{'model':'ZendeskConfiguration','as':_0xc196('0x9'),'attributes':['id','name'],'include':[{'model':'Tag','attributes':['id',_0xc196('0x4')]},{'model':_0xc196('0xa'),'as':'Subjects','attributes':['id',_0xc196('0xb'),'content','variableName'],'include':[{'model':_0xc196('0xc'),'as':_0xc196('0xc'),'attributes':['id',_0xc196('0x4')]}]},{'model':_0xc196('0xa'),'as':_0xc196('0xd'),'attributes':['id',_0xc196('0xb'),_0xc196('0xe'),_0xc196('0xf'),_0xc196('0x10'),'keyContent',_0xc196('0x11')],'include':[{'model':_0xc196('0xc'),'as':_0xc196('0xc'),'attributes':['id','name']}]},{'model':_0xc196('0xa'),'as':_0xc196('0x12'),'attributes':['id',_0xc196('0xb'),_0xc196('0xe'),_0xc196('0x13'),_0xc196('0x14'),_0xc196('0x15'),_0xc196('0x11')],'include':[{'model':'Variable','as':_0xc196('0xc'),'attributes':['id',_0xc196('0x4')]}]}]}]},'log':'GetZendeskAccount'});};};
\ No newline at end of file
+var _0x2a12=['username','token','remoteUri','authType','serverUrl','type','ZendeskConfiguration','Configurations','name','Tag','content','Variable','ZendeskField','Descriptions','key','keyType','variableName','idField','nameField','customField','GetZendeskAccount','../../client','getZendeskAccounts','Request'];(function(_0x644560,_0x1783aa){var _0x41b76b=function(_0xff8c89){while(--_0xff8c89){_0x644560['push'](_0x644560['shift']());}};_0x41b76b(++_0x1783aa);}(_0x2a12,0x14d));var _0x22a1=function(_0x4cc85f,_0x335b29){_0x4cc85f=_0x4cc85f-0x0;var _0x4560de=_0x2a12[_0x4cc85f];return _0x4560de;};'use strict';var client=require(_0x22a1('0x0'));exports[_0x22a1('0x1')]=function(){return function(_0x7faa27){return client[_0x22a1('0x2')]('GetZendeskAccount',{'options':{'raw':![],'attributes':['id','name',_0x22a1('0x3'),'password',_0x22a1('0x4'),_0x22a1('0x5'),_0x22a1('0x6'),_0x22a1('0x7'),_0x22a1('0x8')],'include':[{'model':_0x22a1('0x9'),'as':_0x22a1('0xa'),'attributes':['id',_0x22a1('0xb')],'include':[{'model':_0x22a1('0xc'),'attributes':['id',_0x22a1('0xb')]},{'model':'ZendeskField','as':'Subjects','attributes':['id','type',_0x22a1('0xd'),'variableName'],'include':[{'model':'Variable','as':_0x22a1('0xe'),'attributes':['id','name']}]},{'model':_0x22a1('0xf'),'as':_0x22a1('0x10'),'attributes':['id',_0x22a1('0x8'),_0x22a1('0xd'),_0x22a1('0x11'),_0x22a1('0x12'),'keyContent',_0x22a1('0x13')],'include':[{'model':_0x22a1('0xe'),'as':'Variable','attributes':['id',_0x22a1('0xb')]}]},{'model':_0x22a1('0xf'),'as':'Fields','attributes':['id',_0x22a1('0x8'),_0x22a1('0xd'),_0x22a1('0x14'),_0x22a1('0x15'),_0x22a1('0x16'),_0x22a1('0x13')],'include':[{'model':_0x22a1('0xe'),'as':_0x22a1('0xe'),'attributes':['id',_0x22a1('0xb')]}]}]}]},'log':_0x22a1('0x17')});};};
\ No newline at end of file
index 5b4c6a2..7057c74 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb6e2=['idField','customField','getZohoAccounts','Request','GetZohoAccount','authToken','serverUrl','ZohoConfiguration','Configurations','name','ZohoField','Subjects','type','content','Variable','key','keyContent','variableName','Fields'];(function(_0x171774,_0xf27da8){var _0x5b7143=function(_0xc9cfe8){while(--_0xc9cfe8){_0x171774['push'](_0x171774['shift']());}};_0x5b7143(++_0xf27da8);}(_0xb6e2,0x16b));var _0x2b6e=function(_0x2cc002,_0x40e47a){_0x2cc002=_0x2cc002-0x0;var _0x2f281f=_0xb6e2[_0x2cc002];return _0x2f281f;};'use strict';var client=require('../../client');exports[_0x2b6e('0x0')]=function(){return function(_0x37e606){return client[_0x2b6e('0x1')](_0x2b6e('0x2'),{'options':{'raw':![],'attributes':['id','name','description',_0x2b6e('0x3'),'host',_0x2b6e('0x4')],'include':[{'model':_0x2b6e('0x5'),'as':_0x2b6e('0x6'),'attributes':['id',_0x2b6e('0x7')],'include':[{'model':_0x2b6e('0x8'),'as':_0x2b6e('0x9'),'attributes':['id',_0x2b6e('0xa'),_0x2b6e('0xb'),'variableName'],'include':[{'model':_0x2b6e('0xc'),'as':_0x2b6e('0xc'),'attributes':['id',_0x2b6e('0x7')]}]},{'model':_0x2b6e('0x8'),'as':'Descriptions','attributes':['id',_0x2b6e('0xa'),_0x2b6e('0xb'),_0x2b6e('0xd'),'keyType',_0x2b6e('0xe'),_0x2b6e('0xf')],'include':[{'model':_0x2b6e('0xc'),'as':_0x2b6e('0xc'),'attributes':['id',_0x2b6e('0x7')]}]},{'model':_0x2b6e('0x8'),'as':_0x2b6e('0x10'),'attributes':['id',_0x2b6e('0xa'),_0x2b6e('0xb'),_0x2b6e('0x11'),'nameField',_0x2b6e('0x12'),_0x2b6e('0xf')],'include':[{'model':_0x2b6e('0xc'),'as':_0x2b6e('0xc'),'attributes':['id',_0x2b6e('0x7')]}]}]}]},'log':_0x2b6e('0x2')});};};
\ No newline at end of file
+var _0x880a=['authToken','host','serverUrl','ZohoConfiguration','Configurations','ZohoField','type','content','Variable','Descriptions','variableName','nameField','../../client','getZohoAccounts','Request','GetZohoAccount','name','description'];(function(_0x366145,_0xed43b){var _0x358077=function(_0x68677e){while(--_0x68677e){_0x366145['push'](_0x366145['shift']());}};_0x358077(++_0xed43b);}(_0x880a,0x13e));var _0xa880=function(_0x31ddbf,_0x2b3a6a){_0x31ddbf=_0x31ddbf-0x0;var _0x35edba=_0x880a[_0x31ddbf];return _0x35edba;};'use strict';var client=require(_0xa880('0x0'));exports[_0xa880('0x1')]=function(){return function(_0x4c2c18){return client[_0xa880('0x2')](_0xa880('0x3'),{'options':{'raw':![],'attributes':['id',_0xa880('0x4'),_0xa880('0x5'),_0xa880('0x6'),_0xa880('0x7'),_0xa880('0x8')],'include':[{'model':_0xa880('0x9'),'as':_0xa880('0xa'),'attributes':['id','name'],'include':[{'model':_0xa880('0xb'),'as':'Subjects','attributes':['id',_0xa880('0xc'),_0xa880('0xd'),'variableName'],'include':[{'model':_0xa880('0xe'),'as':'Variable','attributes':['id','name']}]},{'model':'ZohoField','as':_0xa880('0xf'),'attributes':['id','type',_0xa880('0xd'),'key','keyType','keyContent',_0xa880('0x10')],'include':[{'model':_0xa880('0xe'),'as':_0xa880('0xe'),'attributes':['id',_0xa880('0x4')]}]},{'model':_0xa880('0xb'),'as':'Fields','attributes':['id',_0xa880('0xc'),_0xa880('0xd'),'idField',_0xa880('0x11'),'customField',_0xa880('0x10')],'include':[{'model':'Variable','as':'Variable','attributes':['id',_0xa880('0x4')]}]}]}]},'log':'GetZohoAccount'});};};
\ No newline at end of file
index 02fdf5f..d59e2aa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3fc1=['CreateMemberReport','voice','lastAssignedTo','isNil','format','SIP/%s','interface','TALKING','queuecallerleaveAt','diff','seconds','inbound','calleridnum','exten','queue','agent','accountcode','toNumber','uniqueid','voiceDialReport','Request','membername','starttime','endtime','outbound','dialstring','moment','util','../client','voiceQueueReport','queuecallercompleteAt','queuecallerexitAt'];(function(_0x431cde,_0x4777a8){var _0x80bd5=function(_0x17fb16){while(--_0x17fb16){_0x431cde['push'](_0x431cde['shift']());}};_0x80bd5(++_0x4777a8);}(_0x3fc1,0x13a));var _0x13fc=function(_0x244656,_0x2d71fb){_0x244656=_0x244656-0x0;var _0x303a0f=_0x3fc1[_0x244656];return _0x303a0f;};'use strict';var moment=require(_0x13fc('0x0'));var _=require('lodash');var util=require(_0x13fc('0x1'));var client=require(_0x13fc('0x2'));exports[_0x13fc('0x3')]=function(_0x53535b){var _0x25fee=_0x53535b[_0x13fc('0x4')]||_0x53535b[_0x13fc('0x5')];return client['Request'](_0x13fc('0x6'),{'body':{'channel':_0x13fc('0x7'),'membername':_0x53535b[_0x13fc('0x8')],'interface':_[_0x13fc('0x9')](_0x53535b['interface'])?util[_0x13fc('0xa')](_0x13fc('0xb'),_0x53535b[_0x13fc('0x8')]):_0x53535b[_0x13fc('0xc')],'type':_0x13fc('0xd'),'enterAt':_0x53535b[_0x13fc('0xe')],'exitAt':_0x25fee,'duration':moment(_0x25fee)[_0x13fc('0xf')](_0x53535b['queuecallerleaveAt'],_0x13fc('0x10')),'data1':_0x13fc('0x11'),'data2':_0x53535b[_0x13fc('0x12')],'data3':_0x53535b[_0x13fc('0x13')],'data4':null,'data5':_0x53535b[_0x13fc('0x14')],'role':_0x13fc('0x15'),'internal':_0x53535b[_0x13fc('0x16')]?_[_0x13fc('0x17')](_0x53535b[_0x13fc('0x16')]):undefined,'uniqueid':_0x53535b[_0x13fc('0x18')]},'log':_0x13fc('0x6')});};exports[_0x13fc('0x19')]=function(_0x3392cf){return client[_0x13fc('0x1a')](_0x13fc('0x6'),{'body':{'channel':'voice','membername':_0x3392cf[_0x13fc('0x1b')],'interface':_0x3392cf[_0x13fc('0xc')],'type':'TALKING','enterAt':_0x3392cf[_0x13fc('0x1c')],'exitAt':_0x3392cf[_0x13fc('0x1d')],'duration':moment(_0x3392cf[_0x13fc('0x1d')])[_0x13fc('0xf')](_0x3392cf[_0x13fc('0x1c')],_0x13fc('0x10'))>=0x0?moment(_0x3392cf['endtime'])[_0x13fc('0xf')](_0x3392cf[_0x13fc('0x1c')],_0x13fc('0x10')):null,'data1':_0x13fc('0x1e'),'data2':_0x3392cf[_0x13fc('0x16')],'data3':_0x3392cf[_0x13fc('0x13')],'data4':_0x3392cf[_0x13fc('0x1f')]||null,'role':_0x13fc('0x15'),'internal':_0x3392cf[_0x13fc('0x16')]?_[_0x13fc('0x17')](_0x3392cf[_0x13fc('0x16')]):undefined,'uniqueid':_0x3392cf['uniqueid']},'log':_0x13fc('0x6')});};
\ No newline at end of file
+var _0xba21=['isNil','interface','format','SIP/%s','TALKING','queuecallerleaveAt','diff','seconds','inbound','calleridnum','exten','queue','agent','accountcode','toNumber','uniqueid','voiceDialReport','starttime','endtime','dialstring','lodash','util','voiceQueueReport','queuecallercompleteAt','queuecallerexitAt','Request','CreateMemberReport','voice','lastAssignedTo'];(function(_0x51fcbb,_0x18563f){var _0x30f433=function(_0x37af23){while(--_0x37af23){_0x51fcbb['push'](_0x51fcbb['shift']());}};_0x30f433(++_0x18563f);}(_0xba21,0x88));var _0x1ba2=function(_0x40a045,_0x516f0e){_0x40a045=_0x40a045-0x0;var _0x1a687c=_0xba21[_0x40a045];return _0x1a687c;};'use strict';var moment=require('moment');var _=require(_0x1ba2('0x0'));var util=require(_0x1ba2('0x1'));var client=require('../client');exports[_0x1ba2('0x2')]=function(_0x18baef){var _0x48bec6=_0x18baef[_0x1ba2('0x3')]||_0x18baef[_0x1ba2('0x4')];return client[_0x1ba2('0x5')](_0x1ba2('0x6'),{'body':{'channel':_0x1ba2('0x7'),'membername':_0x18baef[_0x1ba2('0x8')],'interface':_[_0x1ba2('0x9')](_0x18baef[_0x1ba2('0xa')])?util[_0x1ba2('0xb')](_0x1ba2('0xc'),_0x18baef['lastAssignedTo']):_0x18baef[_0x1ba2('0xa')],'type':_0x1ba2('0xd'),'enterAt':_0x18baef[_0x1ba2('0xe')],'exitAt':_0x48bec6,'duration':moment(_0x48bec6)[_0x1ba2('0xf')](_0x18baef['queuecallerleaveAt'],_0x1ba2('0x10')),'data1':_0x1ba2('0x11'),'data2':_0x18baef[_0x1ba2('0x12')],'data3':_0x18baef[_0x1ba2('0x13')],'data4':null,'data5':_0x18baef[_0x1ba2('0x14')],'role':_0x1ba2('0x15'),'internal':_0x18baef[_0x1ba2('0x16')]?_[_0x1ba2('0x17')](_0x18baef[_0x1ba2('0x16')]):undefined,'uniqueid':_0x18baef[_0x1ba2('0x18')]},'log':_0x1ba2('0x6')});};exports[_0x1ba2('0x19')]=function(_0x366398){return client[_0x1ba2('0x5')](_0x1ba2('0x6'),{'body':{'channel':_0x1ba2('0x7'),'membername':_0x366398['membername'],'interface':_0x366398[_0x1ba2('0xa')],'type':_0x1ba2('0xd'),'enterAt':_0x366398[_0x1ba2('0x1a')],'exitAt':_0x366398[_0x1ba2('0x1b')],'duration':moment(_0x366398[_0x1ba2('0x1b')])[_0x1ba2('0xf')](_0x366398[_0x1ba2('0x1a')],_0x1ba2('0x10'))>=0x0?moment(_0x366398[_0x1ba2('0x1b')])[_0x1ba2('0xf')](_0x366398[_0x1ba2('0x1a')],_0x1ba2('0x10')):null,'data1':'outbound','data2':_0x366398['accountcode'],'data3':_0x366398['exten'],'data4':_0x366398[_0x1ba2('0x1c')]||null,'role':_0x1ba2('0x15'),'internal':_0x366398[_0x1ba2('0x16')]?_[_0x1ba2('0x17')](_0x366398[_0x1ba2('0x16')]):undefined,'uniqueid':_0x366398[_0x1ba2('0x18')]},'log':_0x1ba2('0x6')});};
\ No newline at end of file
index 10bc243..2b91bb8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb402=['../client','getTemplates','Request','GetTemplate','name','html'];(function(_0x4d3bae,_0x52bb49){var _0x28d163=function(_0x537e1d){while(--_0x537e1d){_0x4d3bae['push'](_0x4d3bae['shift']());}};_0x28d163(++_0x52bb49);}(_0xb402,0x1a4));var _0x2b40=function(_0x1faaa1,_0x1568dd){_0x1faaa1=_0x1faaa1-0x0;var _0x994ec=_0xb402[_0x1faaa1];return _0x994ec;};'use strict';var client=require(_0x2b40('0x0'));exports[_0x2b40('0x1')]=function(_0x41a4f3){return function(_0x318c24){return client[_0x2b40('0x2')](_0x2b40('0x3'),{'options':{'raw':!![],'attributes':['id',_0x2b40('0x4'),_0x2b40('0x5')]},'log':_0x2b40('0x3')});};};
\ No newline at end of file
+var _0x6e27=['name','html','getTemplates','Request','GetTemplate'];(function(_0x58c86a,_0x602654){var _0x2bb374=function(_0x1302a9){while(--_0x1302a9){_0x58c86a['push'](_0x58c86a['shift']());}};_0x2bb374(++_0x602654);}(_0x6e27,0x115));var _0x76e2=function(_0x5e2b34,_0x58385c){_0x5e2b34=_0x5e2b34-0x0;var _0x4859f9=_0x6e27[_0x5e2b34];return _0x4859f9;};'use strict';var client=require('../client');exports[_0x76e2('0x0')]=function(_0x334a57){return function(_0x2ebfad){return client[_0x76e2('0x1')](_0x76e2('0x2'),{'options':{'raw':!![],'attributes':['id',_0x76e2('0x3'),_0x76e2('0x4')]},'log':'GetTemplate'});};};
\ No newline at end of file
index 047a1b5..2f0e00b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['data3','data4','data5','../client','getTriggers','GetTrigger','channel','status','Condition','AllConditions','field','value','AnyConditions','action','data1','data2'];(function(_0x423a15,_0x3bb136){var _0x256708=function(_0x2097d0){while(--_0x2097d0){_0x423a15['push'](_0x423a15['shift']());}};_0x256708(++_0x3bb136);}(_0xa9e0,0x123));var _0x0a9e=function(_0x13ea00,_0x12f610){_0x13ea00=_0x13ea00-0x0;var _0x1f7347=_0xa9e0[_0x13ea00];return _0x1f7347;};'use strict';var client=require(_0x0a9e('0x0'));exports[_0x0a9e('0x1')]=function(_0x29929c){return function(_0x5dd881){return client['Request'](_0x0a9e('0x2'),{'options':{'raw':![],'attributes':['id','name',_0x0a9e('0x3'),_0x0a9e('0x4')],'include':[{'model':_0x0a9e('0x5'),'as':_0x0a9e('0x6'),'attributes':['id',_0x0a9e('0x7'),'operator',_0x0a9e('0x8')]},{'model':_0x0a9e('0x5'),'as':_0x0a9e('0x9'),'attributes':['id','field','operator',_0x0a9e('0x8')]},{'model':'Action','as':'Actions','attributes':['id',_0x0a9e('0xa'),_0x0a9e('0xb'),_0x0a9e('0xc'),_0x0a9e('0xd'),_0x0a9e('0xe'),_0x0a9e('0xf'),'data6','data7']}]},'log':'GetTrigger'});};};
\ No newline at end of file
+var _0xa9e0=['data3','data4','data5','../client','getTriggers','GetTrigger','channel','status','Condition','AllConditions','field','value','AnyConditions','action','data1','data2'];(function(_0x290c1e,_0x4b67ac){var _0x2ca38a=function(_0x2c5419){while(--_0x2c5419){_0x290c1e['push'](_0x290c1e['shift']());}};_0x2ca38a(++_0x4b67ac);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3c4737,_0x2329ec){_0x3c4737=_0x3c4737-0x0;var _0x2bb926=_0xa9e0[_0x3c4737];return _0x2bb926;};'use strict';var client=require(_0x0a9e('0x0'));exports[_0x0a9e('0x1')]=function(_0x29929c){return function(_0x5dd881){return client['Request'](_0x0a9e('0x2'),{'options':{'raw':![],'attributes':['id','name',_0x0a9e('0x3'),_0x0a9e('0x4')],'include':[{'model':_0x0a9e('0x5'),'as':_0x0a9e('0x6'),'attributes':['id',_0x0a9e('0x7'),'operator',_0x0a9e('0x8')]},{'model':_0x0a9e('0x5'),'as':_0x0a9e('0x9'),'attributes':['id','field','operator',_0x0a9e('0x8')]},{'model':'Action','as':'Actions','attributes':['id',_0x0a9e('0xa'),_0x0a9e('0xb'),_0x0a9e('0xc'),_0x0a9e('0xd'),_0x0a9e('0xe'),_0x0a9e('0xf'),'data6','data7']}]},'log':'GetTrigger'});};};
\ No newline at end of file
index e1ba610..e7f15b7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8cea=['../client','getTrunks','Request','GetTrunk','name','registry'];(function(_0x49e169,_0x18517c){var _0x12a0e2=function(_0x7d2925){while(--_0x7d2925){_0x49e169['push'](_0x49e169['shift']());}};_0x12a0e2(++_0x18517c);}(_0x8cea,0x1c8));var _0xa8ce=function(_0xf9a6cf,_0x11870e){_0xf9a6cf=_0xf9a6cf-0x0;var _0x59e2bc=_0x8cea[_0xf9a6cf];return _0x59e2bc;};'use strict';var client=require(_0xa8ce('0x0'));exports[_0xa8ce('0x1')]=function(_0x2926a3){return function(_0x5a2ef9){return client[_0xa8ce('0x2')](_0xa8ce('0x3'),{'options':{'raw':!![],'where':{'active':0x1},'attributes':['id',_0xa8ce('0x4'),_0xa8ce('0x5')]},'log':_0xa8ce('0x3')});};};
\ No newline at end of file
+var _0x875d=['../client','GetTrunk','name','registry'];(function(_0x371e9f,_0x356145){var _0x18e8ba=function(_0x1b21f6){while(--_0x1b21f6){_0x371e9f['push'](_0x371e9f['shift']());}};_0x18e8ba(++_0x356145);}(_0x875d,0xc0));var _0xd875=function(_0x4b369d,_0x265eb8){_0x4b369d=_0x4b369d-0x0;var _0x571a98=_0x875d[_0x4b369d];return _0x571a98;};'use strict';var client=require(_0xd875('0x0'));exports['getTrunks']=function(_0x4a5e0b){return function(_0x453f01){return client['Request'](_0xd875('0x1'),{'options':{'raw':!![],'where':{'active':0x1},'attributes':['id',_0xd875('0x2'),_0xd875('0x3')]},'log':_0xd875('0x1')});};};
\ No newline at end of file
index 601dd10..5eb28fd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe375=['telephone','name','internal','getTelephones','savePause','PauseUser','saveUnpause','UnpauseUser','getAgent','email','lastPauseAt','../client','getAgents','Request','agent','accountcode','fullname','online','lastLoginAt','voicePause','phone','mobile','interface','GetUser'];(function(_0x170699,_0x5c6f13){var _0x40c736=function(_0x423a89){while(--_0x423a89){_0x170699['push'](_0x170699['shift']());}};_0x40c736(++_0x5c6f13);}(_0xe375,0xe3));var _0x5e37=function(_0xba1f23,_0x4923d4){_0xba1f23=_0xba1f23-0x0;var _0x4edb0c=_0xe375[_0xba1f23];return _0x4edb0c;};'use strict';var client=require(_0x5e37('0x0'));exports[_0x5e37('0x1')]=function(){return function(){return client[_0x5e37('0x2')]('GetUser',{'options':{'raw':![],'where':{'role':_0x5e37('0x3')},'attributes':['id','name','email',_0x5e37('0x4'),_0x5e37('0x5'),_0x5e37('0x6'),_0x5e37('0x7'),'pauseType','lastPauseAt',_0x5e37('0x8'),_0x5e37('0x9'),_0x5e37('0xa'),_0x5e37('0xb')]},'log':_0x5e37('0x1')});};};exports['getTelephones']=function(){return function(){return client[_0x5e37('0x2')](_0x5e37('0xc'),{'options':{'raw':!![],'where':{'role':_0x5e37('0xd')},'attributes':['id',_0x5e37('0xe'),_0x5e37('0x4'),_0x5e37('0xf')]},'log':_0x5e37('0x10')});};};exports[_0x5e37('0x11')]=function(_0x2b6b75,_0x2703c1,_0x272a95){return client[_0x5e37('0x2')](_0x5e37('0x12'),{'body':{'type':_0x2703c1,'uniqueid':_0x272a95},'options':{'where':{'id':_0x2b6b75['id']}},'log':_0x5e37('0x11')});};exports[_0x5e37('0x13')]=function(_0x54cebe){return client[_0x5e37('0x2')](_0x5e37('0x14'),{'body':{},'options':{'where':{'id':_0x54cebe['id']}},'log':_0x5e37('0x11')});};exports[_0x5e37('0x15')]=function(_0x3238ce){return client[_0x5e37('0x2')]('ShowUser',{'options':{'raw':![],'where':{'role':_0x5e37('0x3'),'id':_0x3238ce},'attributes':['id',_0x5e37('0xe'),_0x5e37('0x16'),_0x5e37('0x4'),_0x5e37('0x5'),_0x5e37('0x6'),_0x5e37('0x7'),'pauseType',_0x5e37('0x17'),_0x5e37('0x8'),_0x5e37('0xb')]},'log':'getAgent'});};
\ No newline at end of file
+var _0x1676=['lastLoginAt','lastPauseAt','phone','getTelephones','telephone','name','internal','savePause','PauseUser','saveUnpause','UnpauseUser','getAgent','ShowUser','fullname','pauseType','voicePause','interface','../client','getAgents','Request','GetUser','agent','email','accountcode','online'];(function(_0x3902c1,_0x1c9eb2){var _0x1266cc=function(_0x50c2c5){while(--_0x50c2c5){_0x3902c1['push'](_0x3902c1['shift']());}};_0x1266cc(++_0x1c9eb2);}(_0x1676,0x75));var _0x6167=function(_0x3ed25d,_0x6387bf){_0x3ed25d=_0x3ed25d-0x0;var _0x2d1d26=_0x1676[_0x3ed25d];return _0x2d1d26;};'use strict';var client=require(_0x6167('0x0'));exports[_0x6167('0x1')]=function(){return function(){return client[_0x6167('0x2')](_0x6167('0x3'),{'options':{'raw':![],'where':{'role':_0x6167('0x4')},'attributes':['id','name',_0x6167('0x5'),_0x6167('0x6'),'fullname',_0x6167('0x7'),_0x6167('0x8'),'pauseType',_0x6167('0x9'),'voicePause',_0x6167('0xa'),'mobile','interface']},'log':_0x6167('0x1')});};};exports[_0x6167('0xb')]=function(){return function(){return client['Request'](_0x6167('0x3'),{'options':{'raw':!![],'where':{'role':_0x6167('0xc')},'attributes':['id',_0x6167('0xd'),_0x6167('0x6'),_0x6167('0xe')]},'log':_0x6167('0xb')});};};exports[_0x6167('0xf')]=function(_0x497973,_0x2c3d5c,_0x3c17ec){return client[_0x6167('0x2')](_0x6167('0x10'),{'body':{'type':_0x2c3d5c,'uniqueid':_0x3c17ec},'options':{'where':{'id':_0x497973['id']}},'log':'savePause'});};exports[_0x6167('0x11')]=function(_0x1d44ed){return client['Request'](_0x6167('0x12'),{'body':{},'options':{'where':{'id':_0x1d44ed['id']}},'log':_0x6167('0xf')});};exports[_0x6167('0x13')]=function(_0xd0d40f){return client['Request'](_0x6167('0x14'),{'options':{'raw':![],'where':{'role':'agent','id':_0xd0d40f},'attributes':['id',_0x6167('0xd'),_0x6167('0x5'),_0x6167('0x6'),_0x6167('0x15'),_0x6167('0x7'),'lastLoginAt',_0x6167('0x16'),'lastPauseAt',_0x6167('0x17'),_0x6167('0x18')]},'log':_0x6167('0x13')});};
\ No newline at end of file
index 4d27830..7139830 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xec55=['CreateVoiceAgentReport','UpdateVoiceAgentReport','Request'];(function(_0x31cc0e,_0x24ba4c){var _0x144862=function(_0x4d236e){while(--_0x4d236e){_0x31cc0e['push'](_0x31cc0e['shift']());}};_0x144862(++_0x24ba4c);}(_0xec55,0xaa));var _0x5ec5=function(_0x2263d6,_0x23ef72){_0x2263d6=_0x2263d6-0x0;var _0x392795=_0xec55[_0x2263d6];return _0x392795;};'use strict';var client=require('../client');exports['create']=function(_0x170f50){return client[_0x5ec5('0x0')](_0x5ec5('0x1'),{'body':_0x170f50,'log':_0x5ec5('0x1')});};exports['update']=function(_0x576457,_0x458229,_0x55de16){return client['Request']('UpdateVoiceAgentReport',{'body':_0x576457,'options':{'where':{'uniqueid':_0x458229,'interface':_0x55de16}},'log':_0x5ec5('0x2')});};
\ No newline at end of file
+var _0x66ff=['CreateVoiceAgentReport','update','Request','UpdateVoiceAgentReport','../client'];(function(_0x3d1085,_0x225392){var _0x40e5a1=function(_0x38ec8c){while(--_0x38ec8c){_0x3d1085['push'](_0x3d1085['shift']());}};_0x40e5a1(++_0x225392);}(_0x66ff,0xd6));var _0xf66f=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x66ff[_0x14add3];return _0x4a174f;};'use strict';var client=require(_0xf66f('0x0'));exports['create']=function(_0x515a3d){return client['Request'](_0xf66f('0x1'),{'body':_0x515a3d,'log':_0xf66f('0x1')});};exports[_0xf66f('0x2')]=function(_0x4a2c08,_0x1c69b1,_0x1aea1e){return client[_0xf66f('0x3')](_0xf66f('0x4'),{'body':_0x4a2c08,'options':{'where':{'uniqueid':_0x1c69b1,'interface':_0x1aea1e}},'log':_0xf66f('0x4')});};
\ No newline at end of file
index fcee547..5b26d61 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd4ad=['calleridnum','context','getVoiceCallReports','Request','outbound','format','YYYY-MM-DD\x20HH:mm:ss','day','type','disposition','duration','GetVoiceCallReports','moment','lodash','create'];(function(_0x425716,_0x3e9d1c){var _0x2d39af=function(_0x1febc1){while(--_0x1febc1){_0x425716['push'](_0x425716['shift']());}};_0x2d39af(++_0x3e9d1c);}(_0xd4ad,0x138));var _0xdd4a=function(_0x53f39d,_0x4afc78){_0x53f39d=_0x53f39d-0x0;var _0x5967b6=_0xd4ad[_0x53f39d];return _0x5967b6;};'use strict';var moment=require(_0xdd4a('0x0'));var util=require('util');var _=require(_0xdd4a('0x1'));var client=require('../client');exports[_0xdd4a('0x2')]=function(_0x2fdb8f){return client['Request']('CreateVoiceCallReport',{'body':_['merge'](_0x2fdb8f,{'source':_0x2fdb8f[_0xdd4a('0x3')],'destinationcontext':_0x2fdb8f[_0xdd4a('0x4')],'callerid':_0x2fdb8f['callerid'],'amaflags':'DOCUMENTATION'}),'log':'CreateVoiceCallReport'});};exports[_0xdd4a('0x5')]=function(){return function(){return client[_0xdd4a('0x6')]('GetVoiceCallReport',{'options':{'where':{'type':[_0xdd4a('0x7')],'createdAt':{'$between':[moment()['startOf']('day')[_0xdd4a('0x8')](_0xdd4a('0x9')),moment()['endOf'](_0xdd4a('0xa'))['format'](_0xdd4a('0x9'))]}},'attributes':[_0xdd4a('0xb'),_0xdd4a('0xc'),_0xdd4a('0xd'),'billableseconds']},'log':_0xdd4a('0xe')});};};
\ No newline at end of file
+var _0x6af6=['../client','create','Request','CreateVoiceCallReport','merge','calleridnum','context','callerid','DOCUMENTATION','getVoiceCallReports','GetVoiceCallReport','outbound','startOf','day','format','YYYY-MM-DD\x20HH:mm:ss','disposition','duration','billableseconds','moment','lodash'];(function(_0x348652,_0x1ab849){var _0x18a9ea=function(_0x3fd540){while(--_0x3fd540){_0x348652['push'](_0x348652['shift']());}};_0x18a9ea(++_0x1ab849);}(_0x6af6,0x139));var _0x66af=function(_0x32fc89,_0x4faf5a){_0x32fc89=_0x32fc89-0x0;var _0x55f492=_0x6af6[_0x32fc89];return _0x55f492;};'use strict';var moment=require(_0x66af('0x0'));var util=require('util');var _=require(_0x66af('0x1'));var client=require(_0x66af('0x2'));exports[_0x66af('0x3')]=function(_0xb2f969){return client[_0x66af('0x4')](_0x66af('0x5'),{'body':_[_0x66af('0x6')](_0xb2f969,{'source':_0xb2f969[_0x66af('0x7')],'destinationcontext':_0xb2f969[_0x66af('0x8')],'callerid':_0xb2f969[_0x66af('0x9')],'amaflags':_0x66af('0xa')}),'log':_0x66af('0x5')});};exports[_0x66af('0xb')]=function(){return function(){return client[_0x66af('0x4')](_0x66af('0xc'),{'options':{'where':{'type':[_0x66af('0xd')],'createdAt':{'$between':[moment()[_0x66af('0xe')](_0x66af('0xf'))[_0x66af('0x10')](_0x66af('0x11')),moment()['endOf'](_0x66af('0xf'))['format'](_0x66af('0x11'))]}},'attributes':['type',_0x66af('0x12'),_0x66af('0x13'),_0x66af('0x14')]},'log':'GetVoiceCallReports'});};};
\ No newline at end of file
index aa8909f..b87b39f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc6be=['CreateVoiceDialReport','../client','Request'];(function(_0x33466d,_0x4d7e8c){var _0x401b25=function(_0x13a18d){while(--_0x13a18d){_0x33466d['push'](_0x33466d['shift']());}};_0x401b25(++_0x4d7e8c);}(_0xc6be,0x139));var _0xec6b=function(_0x311dba,_0x3a1eed){_0x311dba=_0x311dba-0x0;var _0xd89ddd=_0xc6be[_0x311dba];return _0xd89ddd;};'use strict';var client=require(_0xec6b('0x0'));exports['create']=function(_0x3102c8){return client[_0xec6b('0x1')]('CreateVoiceDialReport',{'body':_0x3102c8,'log':_0xec6b('0x2')});};
\ No newline at end of file
+var _0x59c1=['CreateVoiceDialReport','../client','create'];(function(_0x2af850,_0x5a9181){var _0x537c1d=function(_0x15bdb6){while(--_0x15bdb6){_0x2af850['push'](_0x2af850['shift']());}};_0x537c1d(++_0x5a9181);}(_0x59c1,0x18d));var _0x159c=function(_0x2c816e,_0x82a6b3){_0x2c816e=_0x2c816e-0x0;var _0x316fd2=_0x59c1[_0x2c816e];return _0x316fd2;};'use strict';var client=require(_0x159c('0x0'));exports[_0x159c('0x1')]=function(_0x7247c4){return client['Request'](_0x159c('0x2'),{'body':_0x7247c4,'log':_0x159c('0x2')});};
\ No newline at end of file
index 6844c47..e120151 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xac56=['recordingFormat','../client','getVoiceExtensions','Request','exten'];(function(_0x4f0a3a,_0x14f8d9){var _0x430cca=function(_0x48ae46){while(--_0x48ae46){_0x4f0a3a['push'](_0x4f0a3a['shift']());}};_0x430cca(++_0x14f8d9);}(_0xac56,0x12d));var _0x6ac5=function(_0x2526a4,_0x2ea133){_0x2526a4=_0x2526a4-0x0;var _0x58f951=_0xac56[_0x2526a4];return _0x58f951;};'use strict';var client=require(_0x6ac5('0x0'));exports[_0x6ac5('0x1')]=function(){return function(){return client[_0x6ac5('0x2')]('GetVoiceExtension',{'options':{'raw':!![],'attributes':['id',_0x6ac5('0x3'),_0x6ac5('0x4')],'where':{'VoiceExtensionId':null}},'log':'getVoiceExtensions'});};};
\ No newline at end of file
+var _0xaf61=['../client','getVoiceExtensions','Request','exten','recordingFormat'];(function(_0x44634e,_0x27d114){var _0x1f0073=function(_0x579fdf){while(--_0x579fdf){_0x44634e['push'](_0x44634e['shift']());}};_0x1f0073(++_0x27d114);}(_0xaf61,0x11d));var _0x1af6=function(_0x5be609,_0x4777c7){_0x5be609=_0x5be609-0x0;var _0x184c34=_0xaf61[_0x5be609];return _0x184c34;};'use strict';var client=require(_0x1af6('0x0'));exports[_0x1af6('0x1')]=function(){return function(){return client[_0x1af6('0x2')]('GetVoiceExtension',{'options':{'raw':!![],'attributes':['id',_0x1af6('0x3'),_0x1af6('0x4')],'where':{'VoiceExtensionId':null}},'log':_0x1af6('0x1')});};};
\ No newline at end of file
index e7434b2..ce0b268 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa768=['dialOriginateCallerIdName','dialOriginateTimeout','dialQueueOptions','dialQueueTimeout','dialQueueProject','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialTimezone','dialCheckDuplicateType','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','timeout','dialRecallInQueue','dialOrderByScheduledAt','dialAgiAfterHangupAgent','dialAgiAfterHangupClient','dialQueueProject2','strategy','dialRandomLastDigitCallerIdNumber','dialCutDigit','mandatoryDisposition','dialPredictiveIntervalMinThreshold','Trunk','Pause','mandatoryDispositionPause','TrunkBackup','callerid','active','Interval','Intervals','interval','getVoiceQueues','name','acw','acwTimeout','autopause','monitor_format','dialMethod','dialLimitChannel','dialPowerLevel','dialPredictiveOptimization','dialPredictiveOptimizationPercentage','dialPredictiveInterval'];(function(_0x5184f1,_0x5832cf){var _0x26cd69=function(_0xd69f4){while(--_0xd69f4){_0x5184f1['push'](_0x5184f1['shift']());}};_0x26cd69(++_0x5832cf);}(_0xa768,0x93));var _0x8a76=function(_0x315c51,_0x46251d){_0x315c51=_0x315c51-0x0;var _0x54cad2=_0xa768[_0x315c51];return _0x54cad2;};'use strict';var client=require('../client');exports[_0x8a76('0x0')]=function(){return function(){return client['Request']('GetVoiceQueue',{'options':{'raw':![],'attributes':['id',_0x8a76('0x1'),_0x8a76('0x2'),_0x8a76('0x3'),_0x8a76('0x4'),_0x8a76('0x5'),'type','dialActive',_0x8a76('0x6'),_0x8a76('0x7'),'dialLimitQueue',_0x8a76('0x8'),_0x8a76('0x9'),_0x8a76('0xa'),_0x8a76('0xb'),_0x8a76('0xc'),'dialOriginateCallerIdNumber',_0x8a76('0xd'),_0x8a76('0xe'),_0x8a76('0xf'),_0x8a76('0x10'),'dialCongestionMaxRetry','dialCongestionRetryFrequency',_0x8a76('0x11'),_0x8a76('0x12'),_0x8a76('0x13'),_0x8a76('0x14'),_0x8a76('0x15'),_0x8a76('0x16'),'dialGlobalInterval','dialPrefix',_0x8a76('0x17'),_0x8a76('0x18'),_0x8a76('0x19'),_0x8a76('0x1a'),'dialAMDAfterGreetingSilence',_0x8a76('0x1b'),_0x8a76('0x1c'),_0x8a76('0x1d'),_0x8a76('0x1e'),_0x8a76('0x1f'),_0x8a76('0x20'),_0x8a76('0x21'),'dialRecallMeTimeout',_0x8a76('0x22'),_0x8a76('0x23'),_0x8a76('0x24'),_0x8a76('0x25'),_0x8a76('0x26'),_0x8a76('0x5'),_0x8a76('0x27'),_0x8a76('0x28'),_0x8a76('0x29'),_0x8a76('0x2a'),'dialPredictiveIntervalMaxThreshold',_0x8a76('0x2b')],'include':[{'model':_0x8a76('0x2c'),'as':'Trunk','attributes':['id',_0x8a76('0x1'),'callerid','active']},{'model':_0x8a76('0x2d'),'as':_0x8a76('0x2e'),'attributes':['id',_0x8a76('0x1')]},{'model':_0x8a76('0x2c'),'as':_0x8a76('0x2f'),'attributes':['id',_0x8a76('0x1'),_0x8a76('0x30'),_0x8a76('0x31')]},{'model':_0x8a76('0x32'),'as':_0x8a76('0x32'),'attributes':['id',_0x8a76('0x1')],'include':[{'model':_0x8a76('0x32'),'as':_0x8a76('0x33'),'attributes':['id','name',_0x8a76('0x34')]}]}]},'log':_0x8a76('0x0')});};};
\ No newline at end of file
+var _0xb7c2=['dialCongestionMaxRetry','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialGlobalInterval','dialPrefix','dialCheckDuplicateType','dialAMDActive','dialAMDInitialSilence','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','timeout','dialRecallMeTimeout','dialOrderByScheduledAt','dialAgiAfterHangupAgent','dialAgiAfterHangupClient','dialQueueProject2','monitor_format','strategy','dialRandomLastDigitCallerIdNumber','dialCutDigit','mandatoryDisposition','dialPredictiveIntervalMaxThreshold','Trunk','callerid','active','Pause','mandatoryDispositionPause','TrunkBackup','Interval','../client','getVoiceQueues','Request','GetVoiceQueue','name','acw','acwTimeout','autopause','type','dialActive','dialMethod','dialPowerLevel','dialPredictiveOptimizationPercentage','dialPredictiveInterval','dialOriginateCallerIdNumber','dialOriginateTimeout','dialQueueOptions','dialQueueTimeout','dialQueueProject'];(function(_0x5d99dd,_0x4bb40b){var _0x148a26=function(_0x25df5f){while(--_0x25df5f){_0x5d99dd['push'](_0x5d99dd['shift']());}};_0x148a26(++_0x4bb40b);}(_0xb7c2,0x13d));var _0x2b7c=function(_0x5cd71d,_0xe2122b){_0x5cd71d=_0x5cd71d-0x0;var _0x4f8c12=_0xb7c2[_0x5cd71d];return _0x4f8c12;};'use strict';var client=require(_0x2b7c('0x0'));exports[_0x2b7c('0x1')]=function(){return function(){return client[_0x2b7c('0x2')](_0x2b7c('0x3'),{'options':{'raw':![],'attributes':['id',_0x2b7c('0x4'),_0x2b7c('0x5'),_0x2b7c('0x6'),_0x2b7c('0x7'),'monitor_format',_0x2b7c('0x8'),_0x2b7c('0x9'),_0x2b7c('0xa'),'dialLimitChannel','dialLimitQueue',_0x2b7c('0xb'),'dialPredictiveOptimization',_0x2b7c('0xc'),_0x2b7c('0xd'),'dialOriginateCallerIdName',_0x2b7c('0xe'),_0x2b7c('0xf'),_0x2b7c('0x10'),_0x2b7c('0x11'),_0x2b7c('0x12'),_0x2b7c('0x13'),'dialCongestionRetryFrequency',_0x2b7c('0x14'),_0x2b7c('0x15'),_0x2b7c('0x16'),_0x2b7c('0x17'),_0x2b7c('0x18'),'dialTimezone',_0x2b7c('0x19'),_0x2b7c('0x1a'),_0x2b7c('0x1b'),_0x2b7c('0x1c'),_0x2b7c('0x1d'),'dialAMDGreeting',_0x2b7c('0x1e'),_0x2b7c('0x1f'),_0x2b7c('0x20'),_0x2b7c('0x21'),_0x2b7c('0x22'),_0x2b7c('0x23'),_0x2b7c('0x24'),_0x2b7c('0x25'),_0x2b7c('0x26'),'dialRecallInQueue',_0x2b7c('0x27'),_0x2b7c('0x28'),_0x2b7c('0x29'),_0x2b7c('0x2a'),_0x2b7c('0x2b'),_0x2b7c('0x2c'),_0x2b7c('0x2d'),_0x2b7c('0x2e'),_0x2b7c('0x2f'),_0x2b7c('0x30'),'dialPredictiveIntervalMinThreshold'],'include':[{'model':_0x2b7c('0x31'),'as':_0x2b7c('0x31'),'attributes':['id','name',_0x2b7c('0x32'),_0x2b7c('0x33')]},{'model':_0x2b7c('0x34'),'as':_0x2b7c('0x35'),'attributes':['id','name']},{'model':_0x2b7c('0x31'),'as':_0x2b7c('0x36'),'attributes':['id',_0x2b7c('0x4'),_0x2b7c('0x32'),_0x2b7c('0x33')]},{'model':_0x2b7c('0x37'),'as':_0x2b7c('0x37'),'attributes':['id','name'],'include':[{'model':_0x2b7c('0x37'),'as':'Intervals','attributes':['id',_0x2b7c('0x4'),'interval']}]}]},'log':_0x2b7c('0x1')});};};
\ No newline at end of file
index f84b261..df072d0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xca25=['GetVoiceQueueReports','moment','lodash','../client','CreateVoiceQueueReport','getVoiceQueueReports','Request','GetVoiceQueueReport','day','YYYY-MM-DD\x20HH:mm:ss','format','uniqueid','queue','queuecallerjoinAt','queuecallerexit','queuecallerexitAt','queuecallerabandon'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xca25,0xcd));var _0x5ca2=function(_0x3ae34a,_0x143082){_0x3ae34a=_0x3ae34a-0x0;var _0x4c9edc=_0xca25[_0x3ae34a];return _0x4c9edc;};'use strict';var moment=require(_0x5ca2('0x0'));var _=require(_0x5ca2('0x1'));var client=require(_0x5ca2('0x2'));exports['create']=function(_0x5b5fc9){return client['Request']('CreateVoiceQueueReport',{'body':_0x5b5fc9,'log':_0x5ca2('0x3')});};exports[_0x5ca2('0x4')]=function(){return function(){return client[_0x5ca2('0x5')](_0x5ca2('0x6'),{'options':{'where':{'createdAt':{'$between':[moment()['startOf'](_0x5ca2('0x7'))['format'](_0x5ca2('0x8')),moment()['endOf']('day')[_0x5ca2('0x9')](_0x5ca2('0x8'))]}},'attributes':[_0x5ca2('0xa'),_0x5ca2('0xb'),_0x5ca2('0xc'),'queuecallerleaveAt','queuecallercomplete','queuecallercompleteAt',_0x5ca2('0xd'),_0x5ca2('0xe'),_0x5ca2('0xf'),'queuecallerabandonAt']},'log':_0x5ca2('0x10')});};};
\ No newline at end of file
+var _0x5294=['moment','../client','create','Request','CreateVoiceQueueReport','getVoiceQueueReports','GetVoiceQueueReport','day','format','YYYY-MM-DD\x20HH:mm:ss','endOf','queuecallerjoinAt','queuecallerleaveAt','queuecallercompleteAt','queuecallerexit','queuecallerexitAt','queuecallerabandonAt','GetVoiceQueueReports'];(function(_0xd379c0,_0x23ad75){var _0x494bec=function(_0x1bb90a){while(--_0x1bb90a){_0xd379c0['push'](_0xd379c0['shift']());}};_0x494bec(++_0x23ad75);}(_0x5294,0x156));var _0x4529=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0x5294[_0x4cf98e];return _0x1623ac;};'use strict';var moment=require(_0x4529('0x0'));var _=require('lodash');var client=require(_0x4529('0x1'));exports[_0x4529('0x2')]=function(_0x14e3de){return client[_0x4529('0x3')](_0x4529('0x4'),{'body':_0x14e3de,'log':_0x4529('0x4')});};exports[_0x4529('0x5')]=function(){return function(){return client[_0x4529('0x3')](_0x4529('0x6'),{'options':{'where':{'createdAt':{'$between':[moment()['startOf'](_0x4529('0x7'))[_0x4529('0x8')](_0x4529('0x9')),moment()[_0x4529('0xa')]('day')[_0x4529('0x8')](_0x4529('0x9'))]}},'attributes':['uniqueid','queue',_0x4529('0xb'),_0x4529('0xc'),'queuecallercomplete',_0x4529('0xd'),_0x4529('0xe'),_0x4529('0xf'),'queuecallerabandon',_0x4529('0x10')]},'log':_0x4529('0x11')});};};
\ No newline at end of file
index 9a822cf..160fb12 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1030=['Request','GetVoiceQueueRtPauses','../client','getVoiceQueueRtPauses'];(function(_0x446439,_0x2a8697){var _0xb30ec6=function(_0x178ccb){while(--_0x178ccb){_0x446439['push'](_0x446439['shift']());}};_0xb30ec6(++_0x2a8697);}(_0x1030,0xc6));var _0x0103=function(_0x4b223b,_0x4b9d41){_0x4b223b=_0x4b223b-0x0;var _0x1eb377=_0x1030[_0x4b223b];return _0x1eb377;};'use strict';var client=require(_0x0103('0x0'));exports[_0x0103('0x1')]=function(_0x21961b){return function(){return client[_0x0103('0x2')](_0x0103('0x3'),{'options':{'where':{'VoiceQueueId':_0x21961b,'paused':!![]},'raw':!![]},'log':_0x0103('0x1')});};};
\ No newline at end of file
+var _0x24fc=['Request','getVoiceQueueRtPauses','../client'];(function(_0x2f8eea,_0x18e3ea){var _0x5f26b6=function(_0x562767){while(--_0x562767){_0x2f8eea['push'](_0x2f8eea['shift']());}};_0x5f26b6(++_0x18e3ea);}(_0x24fc,0x12b));var _0xc24f=function(_0x3bf625,_0x1041b4){_0x3bf625=_0x3bf625-0x0;var _0x128e59=_0x24fc[_0x3bf625];return _0x128e59;};'use strict';var client=require(_0xc24f('0x0'));exports['getVoiceQueueRtPauses']=function(_0x20c4e9){return function(){return client[_0xc24f('0x1')]('GetVoiceQueueRtPauses',{'options':{'where':{'VoiceQueueId':_0x20c4e9,'paused':!![]},'raw':!![]},'log':_0xc24f('0x2')});};};
\ No newline at end of file
index 0574653..7dd2c7d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3312=['monitorFilename','lodash','../client','create','Request','merge'];(function(_0x46d326,_0x358e38){var _0x5d50fa=function(_0x2c22e1){while(--_0x2c22e1){_0x46d326['push'](_0x46d326['shift']());}};_0x5d50fa(++_0x358e38);}(_0x3312,0x7f));var _0x2331=function(_0x1ef1ad,_0x1255ee){_0x1ef1ad=_0x1ef1ad-0x0;var _0x22cb93=_0x3312[_0x1ef1ad];return _0x22cb93;};'use strict';var _=require(_0x2331('0x0'));var client=require(_0x2331('0x1'));exports[_0x2331('0x2')]=function(_0x78ee22){return client[_0x2331('0x3')]('CreateVoiceRecording',{'body':_[_0x2331('0x4')](_0x78ee22,{'value':_0x78ee22[_0x2331('0x5')]}),'log':'CreateVoiceRecording'});};
\ No newline at end of file
+var _0x0c30=['CreateVoiceRecording','merge','lodash','create'];(function(_0x20241e,_0x4b0e9c){var _0x43cd2d=function(_0x4e7d72){while(--_0x4e7d72){_0x20241e['push'](_0x20241e['shift']());}};_0x43cd2d(++_0x4b0e9c);}(_0x0c30,0x7a));var _0x00c3=function(_0x2be8c2,_0x14a4b5){_0x2be8c2=_0x2be8c2-0x0;var _0x97f531=_0x0c30[_0x2be8c2];return _0x97f531;};'use strict';var _=require(_0x00c3('0x0'));var client=require('../client');exports[_0x00c3('0x1')]=function(_0x430f50){return client['Request'](_0x00c3('0x2'),{'body':_[_0x00c3('0x3')](_0x430f50,{'value':_0x430f50['monitorFilename']}),'log':_0x00c3('0x2')});};
\ No newline at end of file
index 6a90314..9cc8fa0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdbfa=['transfereecalleridname','transfereeconnectedlinenum','transfereeconnectedlinename','transfereeaccountcode','transfereecontext','transfereelinkedid','isexternal','extension','attendedTransfer','result','secondtransfererconnectedlinename','origtransfereraccountcode','secondtransferercontext','secondtransfererexten','origtransfererlinkedid','transfertargetchannel','transfertargetcalleridnum','transfertargetcalleridname','transfertargetconnectedlinenum','transfertargetconnectedlinename','transfertargetlinkedid','origtransferercontext','origtransfererexten','../client','blindTransfer','Request','CreateVoiceTransferReport','transfererchannel','transferercalleridname','transfererconnectedlinenum','transfereraccountcode','transfererexten','transfereecalleridnum'];(function(_0x5fff2a,_0x44cc6f){var _0x20e787=function(_0x82fa31){while(--_0x82fa31){_0x5fff2a['push'](_0x5fff2a['shift']());}};_0x20e787(++_0x44cc6f);}(_0xdbfa,0x161));var _0xadbf=function(_0x1f05fb,_0x2c91d6){_0x1f05fb=_0x1f05fb-0x0;var _0x7a45d7=_0xdbfa[_0x1f05fb];return _0x7a45d7;};'use strict';var client=require(_0xadbf('0x0'));exports[_0xadbf('0x1')]=function(_0xac088b){return client[_0xadbf('0x2')](_0xadbf('0x3'),{'body':{'result':_0xac088b['result'],'transfererchannel':_0xac088b[_0xadbf('0x4')],'transferercalleridnum':_0xac088b['transferercalleridnum'],'transferercalleridname':_0xac088b[_0xadbf('0x5')],'transfererconnectedlinenum':_0xac088b[_0xadbf('0x6')],'transfererconnectedlinename':_0xac088b['transfererconnectedlinename'],'transfereraccountcode':_0xac088b[_0xadbf('0x7')],'transferercontext':_0xac088b['transferercontext'],'transfererexten':_0xac088b[_0xadbf('0x8')],'transfererlinkedid':_0xac088b['transfererlinkedid'],'transfereechannel':_0xac088b['transfereechannel'],'transfereecalleridnum':_0xac088b[_0xadbf('0x9')],'transfereecalleridname':_0xac088b[_0xadbf('0xa')],'transfereeconnectedlinenum':_0xac088b[_0xadbf('0xb')],'transfereeconnectedlinename':_0xac088b[_0xadbf('0xc')],'transfereeaccountcode':_0xac088b[_0xadbf('0xd')],'transfereecontext':_0xac088b[_0xadbf('0xe')],'transfereeexten':_0xac088b['transfereeexten'],'transfereelinkedid':_0xac088b[_0xadbf('0xf')],'isexternal':_0xac088b[_0xadbf('0x10')],'context':_0xac088b['context'],'extension':_0xac088b[_0xadbf('0x11')],'type':'blind'},'log':_0xadbf('0x3')});};exports[_0xadbf('0x12')]=function(_0x57ebd7){return client[_0xadbf('0x2')](_0xadbf('0x3'),{'body':{'result':_0x57ebd7[_0xadbf('0x13')],'transfererchannel':_0x57ebd7['origtransfererchannel'],'transferercalleridnum':_0x57ebd7['origtransferercalleridnum'],'transferercalleridname':_0x57ebd7['origtransferercalleridname'],'transfererconnectedlinenum':_0x57ebd7['secondtransfererconnectedlinenum'],'transfererconnectedlinename':_0x57ebd7[_0xadbf('0x14')],'transfereraccountcode':_0x57ebd7[_0xadbf('0x15')],'transferercontext':_0x57ebd7[_0xadbf('0x16')],'transfererexten':_0x57ebd7[_0xadbf('0x17')],'transfererlinkedid':_0x57ebd7[_0xadbf('0x18')],'transfereechannel':_0x57ebd7[_0xadbf('0x19')],'transfereecalleridnum':_0x57ebd7[_0xadbf('0x1a')],'transfereecalleridname':_0x57ebd7[_0xadbf('0x1b')],'transfereeconnectedlinenum':_0x57ebd7[_0xadbf('0x1c')],'transfereeconnectedlinename':_0x57ebd7[_0xadbf('0x1d')],'transfereeaccountcode':_0x57ebd7['transfertargetaccountcode'],'transfereecontext':_0x57ebd7['transfertargetcontext'],'transfereeexten':_0x57ebd7['transfertargetexten'],'transfereelinkedid':_0x57ebd7[_0xadbf('0x1e')],'isexternal':_0x57ebd7['isexternal'],'context':_0x57ebd7[_0xadbf('0x1f')],'extension':_0x57ebd7[_0xadbf('0x20')],'type':'attended'},'log':_0xadbf('0x3')});};
\ No newline at end of file
+var _0x8648=['transfererchannel','transferercalleridnum','transfererconnectedlinenum','transfereraccountcode','transfererexten','transfereecalleridnum','transfereecalleridname','transfereeconnectedlinenum','transfereeconnectedlinename','transfereecontext','transfereelinkedid','isexternal','context','extension','blind','attendedTransfer','origtransfererchannel','origtransferercalleridnum','origtransferercalleridname','secondtransfererconnectedlinenum','secondtransfererconnectedlinename','secondtransferercontext','secondtransfererexten','origtransfererlinkedid','transfertargetchannel','transfertargetcalleridnum','transfertargetcalleridname','transfertargetconnectedlinenum','transfertargetconnectedlinename','transfertargetaccountcode','transfertargetcontext','transfertargetexten','origtransferercontext','attended','../client','blindTransfer','Request','CreateVoiceTransferReport','result'];(function(_0x28bea5,_0x4c0c43){var _0x33194c=function(_0x453df2){while(--_0x453df2){_0x28bea5['push'](_0x28bea5['shift']());}};_0x33194c(++_0x4c0c43);}(_0x8648,0x10c));var _0x8864=function(_0x39cad2,_0x572fb1){_0x39cad2=_0x39cad2-0x0;var _0x44f0a0=_0x8648[_0x39cad2];return _0x44f0a0;};'use strict';var client=require(_0x8864('0x0'));exports[_0x8864('0x1')]=function(_0xe2dbe5){return client[_0x8864('0x2')](_0x8864('0x3'),{'body':{'result':_0xe2dbe5[_0x8864('0x4')],'transfererchannel':_0xe2dbe5[_0x8864('0x5')],'transferercalleridnum':_0xe2dbe5[_0x8864('0x6')],'transferercalleridname':_0xe2dbe5['transferercalleridname'],'transfererconnectedlinenum':_0xe2dbe5[_0x8864('0x7')],'transfererconnectedlinename':_0xe2dbe5['transfererconnectedlinename'],'transfereraccountcode':_0xe2dbe5[_0x8864('0x8')],'transferercontext':_0xe2dbe5['transferercontext'],'transfererexten':_0xe2dbe5[_0x8864('0x9')],'transfererlinkedid':_0xe2dbe5['transfererlinkedid'],'transfereechannel':_0xe2dbe5['transfereechannel'],'transfereecalleridnum':_0xe2dbe5[_0x8864('0xa')],'transfereecalleridname':_0xe2dbe5[_0x8864('0xb')],'transfereeconnectedlinenum':_0xe2dbe5[_0x8864('0xc')],'transfereeconnectedlinename':_0xe2dbe5[_0x8864('0xd')],'transfereeaccountcode':_0xe2dbe5['transfereeaccountcode'],'transfereecontext':_0xe2dbe5[_0x8864('0xe')],'transfereeexten':_0xe2dbe5['transfereeexten'],'transfereelinkedid':_0xe2dbe5[_0x8864('0xf')],'isexternal':_0xe2dbe5[_0x8864('0x10')],'context':_0xe2dbe5[_0x8864('0x11')],'extension':_0xe2dbe5[_0x8864('0x12')],'type':_0x8864('0x13')},'log':_0x8864('0x3')});};exports[_0x8864('0x14')]=function(_0x2530a7){return client[_0x8864('0x2')]('CreateVoiceTransferReport',{'body':{'result':_0x2530a7['result'],'transfererchannel':_0x2530a7[_0x8864('0x15')],'transferercalleridnum':_0x2530a7[_0x8864('0x16')],'transferercalleridname':_0x2530a7[_0x8864('0x17')],'transfererconnectedlinenum':_0x2530a7[_0x8864('0x18')],'transfererconnectedlinename':_0x2530a7[_0x8864('0x19')],'transfereraccountcode':_0x2530a7['origtransfereraccountcode'],'transferercontext':_0x2530a7[_0x8864('0x1a')],'transfererexten':_0x2530a7[_0x8864('0x1b')],'transfererlinkedid':_0x2530a7[_0x8864('0x1c')],'transfereechannel':_0x2530a7[_0x8864('0x1d')],'transfereecalleridnum':_0x2530a7[_0x8864('0x1e')],'transfereecalleridname':_0x2530a7[_0x8864('0x1f')],'transfereeconnectedlinenum':_0x2530a7[_0x8864('0x20')],'transfereeconnectedlinename':_0x2530a7[_0x8864('0x21')],'transfereeaccountcode':_0x2530a7[_0x8864('0x22')],'transfereecontext':_0x2530a7[_0x8864('0x23')],'transfereeexten':_0x2530a7[_0x8864('0x24')],'transfereelinkedid':_0x2530a7['transfertargetlinkedid'],'isexternal':_0x2530a7['isexternal'],'context':_0x2530a7[_0x8864('0x25')],'extension':_0x2530a7['origtransfererexten'],'type':_0x8864('0x26')},'log':'CreateVoiceTransferReport'});};
\ No newline at end of file
index 43e9852..c48330b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd56e=['send','checkAfterSend','listen','127.0.0.1','log','AMI\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','lodash','jayson/promise','moment','../properties','format','%s/%s','SIP','timers','timer','updateAcw','agents','updateStatusRealtime','pause','QueuePause','isConnected','error','asterisk','username','join','keys','module','action','Reload','Action','then','catch','message','ami\x20disconnected','pick','command','Command','voiceQueues','name','strategy','answered','available','loggedIn','sumDuration','talking','type','unmanaged','abandoned','waiting','dialActive','dialMethod','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','predictiveIntervalAvailable','predictiveIntervalTotalCalls','originated','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','erlangBusyFactor','startPredictive','startProgressive','Trunk','active','callerid','Interval','push','length','values','voicechannel','validate','map','channels','uniqueid','channel','wav','MixMonitor','ai(mixmonitorid)','find','monitors','/var/spool/asterisk/monitor/','isNil','toLowerCase','YYYY-MM-DD\x20HH:mm:ss','rec','mixmonitorid','status','Channel\x20doesn\x27t\x20exist','resolve','StopMixMonitor','destinationchannel','stop','%s.%s','filename','StopMixMonitor\x20Success','queueChannels','voicequeuechannel','Hangup','voicequeuechannelredirect','Redirect','context','trunks','outboundChannels','campaigns','run','event','Event\x20name\x20mandatory','custom:'];(function(_0x4cf98e,_0xba4b79){var _0x1623ac=function(_0x459bc0){while(--_0x459bc0){_0x4cf98e['push'](_0x4cf98e['shift']());}};_0x1623ac(++_0xba4b79);}(_0xd56e,0x195));var _0xed56=function(_0x3afb70,_0x305017){_0x3afb70=_0x3afb70-0x0;var _0x5c20b4=_0xd56e[_0x3afb70];return _0x5c20b4;};'use strict';var _=require(_0xed56('0x0'));var util=require('util');var jayson=require(_0xed56('0x1'));var schema=require('validate');var BPromise=require('bluebird');var moment=require(_0xed56('0x2'));var config=require('../../../config/environment');var properties=require(_0xed56('0x3'));var ami=require('../ami');exports['listen']=function(_0x5dfd6c,_0x262c2f,_0x31e2a1){return new BPromise(function(_0x883005,_0x133c57){var _0x183076={'QueuePause':function(_0x51eb10){return new Promise(function(_0x529715,_0xdd5125){var _0x1b9c52=util[_0xed56('0x4')](_0xed56('0x5'),_0xed56('0x6'),_0x51eb10['name']);if(_0x5dfd6c[_0xed56('0x7')]&&_0x5dfd6c[_0xed56('0x7')][_0x1b9c52]&&_0x5dfd6c[_0xed56('0x7')][_0x1b9c52][_0xed56('0x8')]){_0x5dfd6c[_0xed56('0x7')][_0x1b9c52][_0xed56('0x9')]();}if(_0x5dfd6c[_0xed56('0xa')][_0x1b9c52]){_0x5dfd6c[_0xed56('0xa')][_0x1b9c52][_0xed56('0xb')]({'statePause':_0x51eb10[_0xed56('0xc')]?!![]:![]});}_0x529715({'code':0xc8,'message':_0xed56('0xd')});});},'Reload':function(_0x22ae81){var _0x49405b=this;return new Promise(function(_0x199d25,_0x297401){if(ami[_0xed56('0xe')]()==![]){return _0x297401(_0x49405b[_0xed56('0xf')](0x1f4,[config[_0xed56('0x10')]['ip'],config[_0xed56('0x10')][_0xed56('0x11')],'ami\x20disconnected'][_0xed56('0x12')]('\x20')));}_0x22ae81=_['pick'](_0x22ae81,_[_0xed56('0x13')](properties[_0xed56('0x14')]));_0x22ae81[_0xed56('0x15')]=_0xed56('0x16');return ami[_0xed56('0x17')](_0x22ae81)[_0xed56('0x18')](function(_0x49fe5d){_0x199d25({'code':0xc8,'message':_0x49fe5d['message']});})[_0xed56('0x19')](function(_0x4c34bd){_0x297401(_0x49405b[_0xed56('0xf')](0x1f5,_0x4c34bd[_0xed56('0x1a')]));});});},'Command':function(_0x52801c){var _0x39151d=this;return new Promise(function(_0x44884d,_0xb2ffc6){if(ami[_0xed56('0xe')]()==![]){return _0xb2ffc6(_0x39151d['error'](0x1f4,[config[_0xed56('0x10')]['ip'],config[_0xed56('0x10')][_0xed56('0x11')],_0xed56('0x1b')][_0xed56('0x12')]('\x20')));}_0x52801c=_[_0xed56('0x1c')](_0x52801c,_0xed56('0x1d'));_0x52801c[_0xed56('0x15')]=_0xed56('0x1e');return ami['Action'](_0x52801c)[_0xed56('0x18')](function(_0x3d3cfe){_0x44884d({'code':0xc8,'message':_0x3d3cfe['content']});})['catch'](function(_0x46e35d){_0xb2ffc6(_0x39151d[_0xed56('0xf')](0x1f5,_0x46e35d[_0xed56('0x1a')]));});});},'VoiceQueues':function(_0x608c82){return new Promise(function(_0x4def52,_0x61e48c){var _0x5301c8=[];for(var _0x49968c in _0x5dfd6c[_0xed56('0x1f')]){if(_0x5dfd6c[_0xed56('0x1f')]['hasOwnProperty'](_0x49968c)){var _0x2c32ab=_0x5dfd6c[_0xed56('0x1f')][_0x49968c];var _0x5c663a={'id':_0x2c32ab['id'],'name':_0x2c32ab[_0xed56('0x20')],'strategy':_0x2c32ab[_0xed56('0x21')],'answered':_0x2c32ab[_0xed56('0x22')],'available':_0x2c32ab[_0xed56('0x23')],'loggedIn':_0x2c32ab[_0xed56('0x24')],'pTalking':_0x2c32ab['pTalking'],'sumBillable':_0x2c32ab['sumBillable'],'sumDuration':_0x2c32ab[_0xed56('0x25')],'sumHoldTime':_0x2c32ab['sumHoldTime']||0x0,'talking':_0x2c32ab[_0xed56('0x26')],'total':_0x2c32ab['total'],'type':_0x2c32ab[_0xed56('0x27')],'unmanaged':_0x2c32ab[_0xed56('0x28')],'abandoned':_0x2c32ab[_0xed56('0x29')],'waiting':_0x2c32ab[_0xed56('0x2a')],'loggedInDb':_0x2c32ab['loggedInDb']};if(_0x2c32ab[_0xed56('0x27')]==='outbound'){_0x5c663a[_0xed56('0x2b')]=_0x2c32ab[_0xed56('0x2b')];_0x5c663a[_0xed56('0x2c')]=_0x2c32ab[_0xed56('0x2c')];_0x5c663a['dialOriginateCallerIdName']=_0x2c32ab[_0xed56('0x2d')];_0x5c663a[_0xed56('0x2e')]=_0x2c32ab[_0xed56('0x2e')];_0x5c663a[_0xed56('0x2f')]=_0x2c32ab[_0xed56('0x2f')];_0x5c663a['dialPrefix']=_0x2c32ab['dialPrefix'];_0x5c663a[_0xed56('0x30')]=_0x2c32ab[_0xed56('0x30')];_0x5c663a[_0xed56('0x31')]=_0x2c32ab[_0xed56('0x31')];_0x5c663a[_0xed56('0x32')]=_0x2c32ab[_0xed56('0x32')];_0x5c663a[_0xed56('0x33')]=_0x2c32ab['outboundBusyCallsDay'];_0x5c663a[_0xed56('0x34')]=_0x2c32ab[_0xed56('0x34')];_0x5c663a[_0xed56('0x35')]=_0x2c32ab[_0xed56('0x35')];_0x5c663a[_0xed56('0x36')]=_0x2c32ab['outboundDropCallsDayCallersExit'];_0x5c663a[_0xed56('0x37')]=_0x2c32ab[_0xed56('0x37')];_0x5c663a[_0xed56('0x38')]=_0x2c32ab[_0xed56('0x38')];_0x5c663a[_0xed56('0x39')]=_0x2c32ab[_0xed56('0x39')];_0x5c663a['outboundOriginateFailureCallsDay']=_0x2c32ab[_0xed56('0x3a')];_0x5c663a[_0xed56('0x3b')]=_0x2c32ab['outboundReCallsDay'];_0x5c663a['outboundRejectCallsDay']=_0x2c32ab[_0xed56('0x3c')];_0x5c663a[_0xed56('0x3d')]=_0x2c32ab[_0xed56('0x3d')];_0x5c663a[_0xed56('0x3e')]=_0x2c32ab[_0xed56('0x3e')];_0x5c663a[_0xed56('0x3f')]=_0x2c32ab[_0xed56('0x3f')];_0x5c663a[_0xed56('0x40')]=_0x2c32ab[_0xed56('0x40')];_0x5c663a[_0xed56('0x41')]=_0x2c32ab[_0xed56('0x41')];_0x5c663a['predictiveIntervalDroppedCallsTimeout']=_0x2c32ab[_0xed56('0x42')];_0x5c663a[_0xed56('0x43')]=_0x2c32ab['predictiveIntervalErlangCalls'];_0x5c663a[_0xed56('0x44')]=_0x2c32ab[_0xed56('0x44')];_0x5c663a[_0xed56('0x45')]=_0x2c32ab[_0xed56('0x45')];_0x5c663a[_0xed56('0x46')]=_0x2c32ab[_0xed56('0x46')];_0x5c663a['predictiveIntervalPauses']=_0x2c32ab[_0xed56('0x47')];_0x5c663a[_0xed56('0x48')]=_0x2c32ab['predictiveIntervalAvailable'];_0x5c663a[_0xed56('0x49')]=_0x2c32ab['predictiveIntervalTotalCalls'];_0x5c663a[_0xed56('0x1a')]=_0x2c32ab[_0xed56('0x1a')];_0x5c663a[_0xed56('0x4a')]=_0x2c32ab[_0xed56('0x4a')];_0x5c663a[_0xed56('0x4b')]=_0x2c32ab[_0xed56('0x4b')];_0x5c663a[_0xed56('0x4c')]=_0x2c32ab[_0xed56('0x4c')];_0x5c663a[_0xed56('0x4d')]=_0x2c32ab['erlangAbandonmentRate'];_0x5c663a[_0xed56('0x4e')]=_0x2c32ab[_0xed56('0x4e')];_0x5c663a[_0xed56('0x4f')]=_0x2c32ab[_0xed56('0x4f')];_0x5c663a['startProgressive']=_0x2c32ab[_0xed56('0x50')];}if(_0x2c32ab[_0xed56('0x51')]){_0x5c663a[_0xed56('0x51')]={'id':_0x2c32ab[_0xed56('0x51')]['id'],'name':_0x2c32ab[_0xed56('0x51')][_0xed56('0x20')],'active':_0x2c32ab[_0xed56('0x51')][_0xed56('0x52')],'callerid':_0x2c32ab['Trunk'][_0xed56('0x53')]};}if(_0x2c32ab[_0xed56('0x54')]){_0x5c663a['Interval']={'id':_0x2c32ab['Interval']['id'],'name':_0x2c32ab[_0xed56('0x54')]['name']};}_0x5301c8[_0xed56('0x55')](_0x5c663a);}}_0x4def52({'count':_0x5301c8[_0xed56('0x56')],'rows':_0x5301c8});});},'VoiceChannels':function(_0x59e3d2){return new Promise(function(_0x24cea2,_0x333fa7){var _0x596b4b=_[_0xed56('0x57')](_0x5dfd6c['channels']);_0x24cea2({'count':_0x596b4b[_0xed56('0x56')],'rows':_0x596b4b});});},'VoiceChannelMixMonitor':function(_0x3fb8c0){var _0x1ba735=this;return new Promise(function(_0x22233d,_0x50bac6){if(ami[_0xed56('0xe')]()==![]){return _0x50bac6(_0x1ba735['error'](0x1f4,[config['asterisk']['ip'],config[_0xed56('0x10')][_0xed56('0x11')],'ami\x20disconnected'][_0xed56('0x12')]('\x20')));}var _0x3474ed=schema(properties[_0xed56('0x58')])[_0xed56('0x59')](_0x3fb8c0);if(_0x3474ed['length']>0x0){return _0x50bac6(_0x1ba735[_0xed56('0xf')](0x1f4,_[_0xed56('0x5a')](_0x3474ed,_0xed56('0x1a'))[_0xed56('0x12')](',\x20')));}var _0x45a35d=_['find'](_0x5dfd6c[_0xed56('0x5b')],{'uniqueid':_0x3fb8c0[_0xed56('0x5c')]});if(_0x45a35d&&_0x45a35d[_0xed56('0x5d')]){var _0x194397=util[_0xed56('0x4')]('%s.%s',_0x3fb8c0['filename']||_0x3fb8c0[_0xed56('0x5c')],_0x3fb8c0[_0xed56('0x4')]||_0xed56('0x5e'));return ami['Action']({'action':_0xed56('0x5f'),'channel':_0x45a35d[_0xed56('0x5d')],'file':_0x194397,'options':_0xed56('0x60')})[_0xed56('0x18')](function(_0x5b2d16){var _0x4f4500=_[_0xed56('0x61')](_0x45a35d[_0xed56('0x62')],{'filename':_0xed56('0x63')+_0x194397['toLowerCase']()});if(_[_0xed56('0x64')](_0x4f4500)){_0x45a35d['monitors'][_0xed56('0x55')]({'filename':_0xed56('0x63')+_0x194397[_0xed56('0x65')](),'createdAt':moment()['format'](_0xed56('0x66')),'mixmonitorid':_0x5b2d16['mixmonitorid'],'status':_0xed56('0x67')});}else{_0x4f4500['mixmonitorid']=_0x5b2d16[_0xed56('0x68')];_0x4f4500[_0xed56('0x69')]=_0xed56('0x67');}_0x22233d({'code':0xc8,'message':[_0x3fb8c0[_0xed56('0x5c')],'MixMonitor\x20Success',_0x5b2d16['mixmonitorid']][_0xed56('0x12')]('\x20'),'mixmonitorid':_0x5b2d16[_0xed56('0x68')]});})[_0xed56('0x19')](function(_0x1bec2a){_0x50bac6(_0x1ba735[_0xed56('0xf')](0x1f5,[_0x3fb8c0[_0xed56('0x5c')],_0x1bec2a['message']['toLowerCase']()][_0xed56('0x12')]('\x20')));});}else{return _0x50bac6(_0x1ba735[_0xed56('0xf')](0x1f5,_0xed56('0x6a')));}});},'VoiceChannelStopMixMonitor':function(_0x4ebb52){var _0x2c2e45=this;return new Promise(function(_0x32ddd6,_0x3b74fc){if(ami[_0xed56('0xe')]()==![]){return _0x3b74fc(_0x2c2e45[_0xed56('0xf')](0x1f4,[config[_0xed56('0x10')]['ip'],config['asterisk']['username'],'ami\x20disconnected'][_0xed56('0x12')]('\x20')));}var _0x502abd=schema(properties['voicechannel'])[_0xed56('0x59')](_0x4ebb52);if(_0x502abd[_0xed56('0x56')]>0x0){return _0x3b74fc(_0x2c2e45[_0xed56('0xf')](0x1f4,_[_0xed56('0x5a')](_0x502abd,_0xed56('0x1a'))[_0xed56('0x12')](',\x20')));}var _0x1c8000=_[_0xed56('0x61')](_0x5dfd6c['channels'],{'uniqueid':_0x4ebb52['uniqueid']});if(_0x1c8000){return BPromise[_0xed56('0x6b')]()[_0xed56('0x18')](function(){if(_0x1c8000[_0xed56('0x5d')]){return ami[_0xed56('0x17')]({'action':_0xed56('0x6c'),'channel':_0x1c8000['channel'],'mixmonitorid':_0x4ebb52[_0xed56('0x68')]})[_0xed56('0x19')](function(_0x18833c){});}})[_0xed56('0x18')](function(){if(_0x1c8000[_0xed56('0x6d')]){return ami[_0xed56('0x17')]({'action':_0xed56('0x6c'),'channel':_0x1c8000[_0xed56('0x6d')],'mixmonitorid':_0x4ebb52[_0xed56('0x68')]})[_0xed56('0x19')](function(_0x444010){});}})[_0xed56('0x18')](function(_0x6a5cb9){var _0x41a5a2=_[_0xed56('0x61')](_0x1c8000[_0xed56('0x62')],{'mixmonitorid':_0x4ebb52['mixmonitorid']});if(_0x41a5a2){_0x41a5a2[_0xed56('0x69')]=_0xed56('0x6e');}})[_0xed56('0x18')](function(){var _0x4cbf82=util['format'](_0xed56('0x6f'),_0x4ebb52[_0xed56('0x70')]||_0x4ebb52[_0xed56('0x5c')],_0x4ebb52[_0xed56('0x4')]||_0xed56('0x5e'));var _0x2b8cca=_[_0xed56('0x61')](_0x1c8000[_0xed56('0x62')],{'filename':_0xed56('0x63')+_0x4cbf82[_0xed56('0x65')]()});if(_0x2b8cca){_0x2b8cca[_0xed56('0x69')]=_0xed56('0x6e');}})[_0xed56('0x18')](function(){_0x32ddd6({'code':0xc8,'message':[_0x4ebb52[_0xed56('0x5c')],_0xed56('0x71')][_0xed56('0x12')]('\x20')});})[_0xed56('0x19')](function(_0x3f15c4){_0x3b74fc(_0x2c2e45[_0xed56('0xf')](0x1f5,[_0x4ebb52[_0xed56('0x5c')],_0x3f15c4[_0xed56('0x1a')][_0xed56('0x65')]()][_0xed56('0x12')]('\x20')));});}else{return _0x3b74fc(_0x2c2e45[_0xed56('0xf')](0x1f5,_0xed56('0x6a')));}});},'VoiceQueuesChannels':function(_0x5b49cd){return new Promise(function(_0x3c61e3,_0xd6217c){var _0x35732c=_[_0xed56('0x57')](_0x5dfd6c[_0xed56('0x72')]);_0x3c61e3({'count':_0x35732c[_0xed56('0x56')],'rows':_0x35732c});});},'VoiceQueuesChannel':function(_0x39c1ce){var _0x2e61f0=this;return new Promise(function(_0x39dbd2,_0x2dd445){var _0x62f3f7=schema(properties[_0xed56('0x73')])[_0xed56('0x59')](_0x39c1ce);if(_0x62f3f7[_0xed56('0x56')]>0x0){return _0x2dd445(_0x2e61f0[_0xed56('0xf')](0x1f4,_[_0xed56('0x5a')](_0x62f3f7,_0xed56('0x1a'))[_0xed56('0x12')](',\x20')));}var _0x5ae7c6=_['find'](_0x5dfd6c[_0xed56('0x72')],{'uniqueid':_0x39c1ce[_0xed56('0x5c')]});if(_0x5ae7c6){_0x39dbd2(_0x5ae7c6);}else{return _0x2dd445(_0x2e61f0[_0xed56('0xf')](0x1f5,_0xed56('0x6a')));}});},'VoiceQueuesChannelHangup':function(_0x2c2fc8){var _0x277388=this;return new Promise(function(_0x4e035e,_0x5041c5){if(ami[_0xed56('0xe')]()==![]){return _0x5041c5(_0x277388[_0xed56('0xf')](0x1f4,[config[_0xed56('0x10')]['ip'],config[_0xed56('0x10')]['username'],_0xed56('0x1b')][_0xed56('0x12')]('\x20')));}var _0x5eac10=schema(properties['voicequeuechannelhangup'])[_0xed56('0x59')](_0x2c2fc8);if(_0x5eac10[_0xed56('0x56')]>0x0){return _0x5041c5(_0x277388[_0xed56('0xf')](0x1f4,_['map'](_0x5eac10,_0xed56('0x1a'))[_0xed56('0x12')](',\x20')));}var _0x3d0028=_['find'](_0x5dfd6c[_0xed56('0x72')],{'uniqueid':_0x2c2fc8[_0xed56('0x5c')]});if(_0x3d0028&&_0x3d0028[_0xed56('0x5d')]){return ami['Action']({'action':_0xed56('0x74'),'channel':_0x3d0028[_0xed56('0x5d')]})[_0xed56('0x18')](function(_0x154b59){_0x4e035e({'code':0xc8,'message':[_0x2c2fc8['uniqueid'],_0x154b59['message'][_0xed56('0x65')]()][_0xed56('0x12')]('\x20')});})['catch'](function(_0x5d2394){_0x5041c5(_0x277388['error'](0x1f5,[_0x2c2fc8[_0xed56('0x5c')],_0x5d2394['message'][_0xed56('0x65')]()]['join']('\x20')));});}else{return _0x5041c5(_0x277388[_0xed56('0xf')](0x1f5,_0xed56('0x6a')));}});},'VoiceQueuesChannelRedirect':function(_0x5f574d){var _0x1ea092=this;return new Promise(function(_0x2054b1,_0x27066e){if(ami[_0xed56('0xe')]()==![]){return _0x27066e(_0x1ea092['error'](0x1f4,[config['asterisk']['ip'],config[_0xed56('0x10')]['username'],_0xed56('0x1b')][_0xed56('0x12')]('\x20')));}var _0x46a945=schema(properties[_0xed56('0x75')])[_0xed56('0x59')](_0x5f574d);if(_0x46a945[_0xed56('0x56')]>0x0){return _0x27066e(_0x1ea092[_0xed56('0xf')](0x1f4,_[_0xed56('0x5a')](_0x46a945,_0xed56('0x1a'))[_0xed56('0x12')](',\x20')));}var _0x39226f=_[_0xed56('0x61')](_0x5dfd6c[_0xed56('0x72')],{'uniqueid':_0x5f574d[_0xed56('0x5c')]});if(_0x39226f&&_0x39226f[_0xed56('0x5d')]){return ami['Action']({'action':_0xed56('0x76'),'channel':_0x39226f[_0xed56('0x5d')],'exten':_0x5f574d['exten'],'context':_0x5f574d[_0xed56('0x77')]||_0x39226f[_0xed56('0x77')],'priority':0x1})[_0xed56('0x18')](function(_0x309bb1){_0x2054b1({'code':0xc8,'message':[_0x5f574d[_0xed56('0x5c')],_0x309bb1['message'][_0xed56('0x65')]()]['join']('\x20')});})['catch'](function(_0x53c968){_0x27066e(_0x1ea092[_0xed56('0xf')](0x1f5,[_0x5f574d['uniqueid'],_0x53c968['message'][_0xed56('0x65')]()][_0xed56('0x12')]('\x20')));});}else{return _0x27066e(_0x1ea092[_0xed56('0xf')](0x1f5,_0xed56('0x6a')));}});},'Agents':function(_0x3ec9ce){return new Promise(function(_0x105cf1,_0x20a6ce){var _0x1076ac=_[_0xed56('0x57')](_0x5dfd6c['agents']);_0x105cf1({'count':_0x1076ac[_0xed56('0x56')],'rows':_0x1076ac});});},'Telephones':function(_0xfde670){return new Promise(function(_0x2281c3,_0x475563){var _0x31a911=_[_0xed56('0x57')](_0x5dfd6c['telephones']);_0x2281c3({'count':_0x31a911[_0xed56('0x56')],'rows':_0x31a911});});},'Trunks':function(_0x57708b){return new Promise(function(_0x135227,_0x2a9db9){var _0x4ca0a2=_['values'](_0x5dfd6c[_0xed56('0x78')]);_0x135227({'count':_0x4ca0a2['length'],'rows':_0x4ca0a2});});},'OutboundChannels':function(_0x1f7b2a){return new Promise(function(_0x121172,_0x5bfbab){var _0x43e803=_[_0xed56('0x57')](_0x5dfd6c[_0xed56('0x79')]);_0x121172({'count':_0x43e803[_0xed56('0x56')],'rows':_0x43e803});});},'Outbound':function(_0x79242d){return new Promise(function(_0x1b0498,_0x4ac0a5){_0x1b0498(_0x5dfd6c['outbound']);});},'Campaigns':function(_0x5c42d0){return new Promise(function(_0x7ac755,_0x2d366d){var _0x4190ec=_[_0xed56('0x57')](_0x5dfd6c[_0xed56('0x7a')]);_0x7ac755({'count':_0x4190ec[_0xed56('0x56')],'rows':_0x4190ec});});},'VoiceQueuesPreview':function(_0x9e634a){var _0x5f30c8=this;return new Promise(function(_0x3f29b8,_0x4d6ee5){_0x262c2f[_0xed56('0x7b')](_0x9e634a['id'])['then'](function(_0x51ab08){_0x3f29b8({'code':0xc8,'message':_0x51ab08['message']});})[_0xed56('0x19')](function(_0x5bd21e){_0x4d6ee5(_0x5f30c8[_0xed56('0xf')](0x1f4,_0x5bd21e[_0xed56('0x1a')]));});});},'EventManager':function(_0x5200e4){var _0x5dc43d=this;return new Promise(function(_0x1e9495,_0x6b988a){if(!_0x5200e4[_0xed56('0x7c')]){return _0x6b988a(_0x5dc43d[_0xed56('0xf')](0x1f4,_0xed56('0x7d')));}ami['emit'](_0xed56('0x7e')+_0x5200e4[_0xed56('0x7c')],_0x5200e4['message']);_0x1e9495({'code':0xc8,'message':_0x5200e4});});},'FaxAccounts':function(_0x15bfde){return new Promise(function(_0x3b3eb4,_0xb05651){var _0x274b7b=_[_0xed56('0x57')](_0x5dfd6c['faxAccounts']);_0x3b3eb4({'count':_0x274b7b[_0xed56('0x56')],'rows':_0x274b7b});});},'SendFax':function(_0x18a585){var _0x213852=this;return new Promise(function(_0x4ed931,_0x1e65f7){_0x31e2a1[_0xed56('0x7f')](_0x18a585)[_0xed56('0x18')](function(_0x79acf2){_0x4ed931({'code':0xc8,'message':_0x79acf2[_0xed56('0x1a')]});})['catch'](function(_0x1b3b1d){_0x1e65f7(_0x213852['error'](0x1f4,_0x1b3b1d[_0xed56('0x1a')]));});});},'CheckAfterSend':function(_0x30c600){var _0x33f6f7=this;return new Promise(function(_0x114a83,_0x59ca04){_0x31e2a1[_0xed56('0x80')](_0x30c600)[_0xed56('0x18')](function(_0x1a75c4){_0x114a83({'code':0xc8,'message':_0x1a75c4[_0xed56('0x1a')]});})['catch'](function(_0xca332d){_0x59ca04(_0x33f6f7['error'](0x1f4,_0xca332d[_0xed56('0x1a')]));});});}};var _0xc4fa20=jayson['server'](_0x183076)['http']();_0xc4fa20['on'](_0xed56('0xf'),function(_0x1a1eae){return _0x133c57(_0x1a1eae);});_0xc4fa20[_0xed56('0x81')](0x232a,_0xed56('0x82'),function(){console[_0xed56('0x83')](_0xed56('0x84'),0x232a);return _0x883005('RPC\x20listening\x20on\x20port:'+0x232a);});});};
\ No newline at end of file
+var _0x9c75=['type','abandoned','loggedInDb','outbound','dialActive','dialMethod','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','predictiveIntervalAvailable','predictiveIntervalTotalCalls','originated','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','erlangBusyFactor','startPredictive','startProgressive','Trunk','callerid','Interval','push','values','channels','length','username','join','voicechannel','validate','map','find','uniqueid','channel','filename','wav','MixMonitor','ai(mixmonitorid)','/var/spool/asterisk/monitor/','toLowerCase','isNil','monitors','mixmonitorid','rec','status','catch','resolve','StopMixMonitor','destinationchannel','stop','%s.%s','Channel\x20doesn\x27t\x20exist','queueChannels','voicequeuechannel','Hangup','Redirect','context','telephones','trunks','outboundChannels','campaigns','run','Event\x20name\x20mandatory','emit','custom:','event','faxAccounts','server','http','127.0.0.1','log','AMI\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','util','jayson/promise','bluebird','moment','../properties','../ami','listen','format','%s/%s','SIP','name','timers','timer','updateAcw','agents','updateStatusRealtime','pause','QueuePause','isConnected','error','asterisk','ami\x20disconnected','keys','module','action','Reload','Action','message','pick','command','Command','then','content','hasOwnProperty','voiceQueues','strategy','answered','available','loggedIn','pTalking','sumBillable','sumDuration','sumHoldTime','talking','total'];(function(_0x48f6e8,_0x320de0){var _0x509f81=function(_0x37fd60){while(--_0x37fd60){_0x48f6e8['push'](_0x48f6e8['shift']());}};_0x509f81(++_0x320de0);}(_0x9c75,0x17d));var _0x59c7=function(_0x1704d6,_0x2c4c8d){_0x1704d6=_0x1704d6-0x0;var _0x1651a6=_0x9c75[_0x1704d6];return _0x1651a6;};'use strict';var _=require('lodash');var util=require(_0x59c7('0x0'));var jayson=require(_0x59c7('0x1'));var schema=require('validate');var BPromise=require(_0x59c7('0x2'));var moment=require(_0x59c7('0x3'));var config=require('../../../config/environment');var properties=require(_0x59c7('0x4'));var ami=require(_0x59c7('0x5'));exports[_0x59c7('0x6')]=function(_0x414b9a,_0x5ead04,_0x100183){return new BPromise(function(_0xc8a7a1,_0x2bb88d){var _0x409cb6={'QueuePause':function(_0x37d2eb){return new Promise(function(_0x176645,_0x51cba9){var _0xa91a3f=util[_0x59c7('0x7')](_0x59c7('0x8'),_0x59c7('0x9'),_0x37d2eb[_0x59c7('0xa')]);if(_0x414b9a[_0x59c7('0xb')]&&_0x414b9a['timers'][_0xa91a3f]&&_0x414b9a[_0x59c7('0xb')][_0xa91a3f][_0x59c7('0xc')]){_0x414b9a[_0x59c7('0xb')][_0xa91a3f][_0x59c7('0xd')]();}if(_0x414b9a[_0x59c7('0xe')][_0xa91a3f]){_0x414b9a[_0x59c7('0xe')][_0xa91a3f][_0x59c7('0xf')]({'statePause':_0x37d2eb[_0x59c7('0x10')]?!![]:![]});}_0x176645({'code':0xc8,'message':_0x59c7('0x11')});});},'Reload':function(_0x28a72e){var _0x5a3eb4=this;return new Promise(function(_0x75926f,_0x2e7aa6){if(ami[_0x59c7('0x12')]()==![]){return _0x2e7aa6(_0x5a3eb4[_0x59c7('0x13')](0x1f4,[config[_0x59c7('0x14')]['ip'],config['asterisk']['username'],_0x59c7('0x15')]['join']('\x20')));}_0x28a72e=_['pick'](_0x28a72e,_[_0x59c7('0x16')](properties[_0x59c7('0x17')]));_0x28a72e[_0x59c7('0x18')]=_0x59c7('0x19');return ami[_0x59c7('0x1a')](_0x28a72e)['then'](function(_0x35b9bc){_0x75926f({'code':0xc8,'message':_0x35b9bc[_0x59c7('0x1b')]});})['catch'](function(_0x512ac4){_0x2e7aa6(_0x5a3eb4[_0x59c7('0x13')](0x1f5,_0x512ac4['message']));});});},'Command':function(_0x275c45){var _0x2d33d9=this;return new Promise(function(_0xfb490d,_0x256e7b){if(ami[_0x59c7('0x12')]()==![]){return _0x256e7b(_0x2d33d9[_0x59c7('0x13')](0x1f4,[config[_0x59c7('0x14')]['ip'],config[_0x59c7('0x14')]['username'],'ami\x20disconnected']['join']('\x20')));}_0x275c45=_[_0x59c7('0x1c')](_0x275c45,_0x59c7('0x1d'));_0x275c45[_0x59c7('0x18')]=_0x59c7('0x1e');return ami[_0x59c7('0x1a')](_0x275c45)[_0x59c7('0x1f')](function(_0x5aaa3d){_0xfb490d({'code':0xc8,'message':_0x5aaa3d[_0x59c7('0x20')]});})['catch'](function(_0xf16173){_0x256e7b(_0x2d33d9[_0x59c7('0x13')](0x1f5,_0xf16173[_0x59c7('0x1b')]));});});},'VoiceQueues':function(_0x434adb){return new Promise(function(_0x780691,_0x4c70bb){var _0x526097=[];for(var _0x55d3ec in _0x414b9a['voiceQueues']){if(_0x414b9a['voiceQueues'][_0x59c7('0x21')](_0x55d3ec)){var _0x401bb7=_0x414b9a[_0x59c7('0x22')][_0x55d3ec];var _0x2df6bc={'id':_0x401bb7['id'],'name':_0x401bb7['name'],'strategy':_0x401bb7[_0x59c7('0x23')],'answered':_0x401bb7[_0x59c7('0x24')],'available':_0x401bb7[_0x59c7('0x25')],'loggedIn':_0x401bb7[_0x59c7('0x26')],'pTalking':_0x401bb7[_0x59c7('0x27')],'sumBillable':_0x401bb7[_0x59c7('0x28')],'sumDuration':_0x401bb7[_0x59c7('0x29')],'sumHoldTime':_0x401bb7[_0x59c7('0x2a')]||0x0,'talking':_0x401bb7[_0x59c7('0x2b')],'total':_0x401bb7[_0x59c7('0x2c')],'type':_0x401bb7[_0x59c7('0x2d')],'unmanaged':_0x401bb7['unmanaged'],'abandoned':_0x401bb7[_0x59c7('0x2e')],'waiting':_0x401bb7['waiting'],'loggedInDb':_0x401bb7[_0x59c7('0x2f')]};if(_0x401bb7[_0x59c7('0x2d')]===_0x59c7('0x30')){_0x2df6bc['dialActive']=_0x401bb7[_0x59c7('0x31')];_0x2df6bc[_0x59c7('0x32')]=_0x401bb7[_0x59c7('0x32')];_0x2df6bc['dialOriginateCallerIdName']=_0x401bb7[_0x59c7('0x33')];_0x2df6bc[_0x59c7('0x34')]=_0x401bb7[_0x59c7('0x34')];_0x2df6bc[_0x59c7('0x35')]=_0x401bb7[_0x59c7('0x35')];_0x2df6bc[_0x59c7('0x36')]=_0x401bb7[_0x59c7('0x36')];_0x2df6bc[_0x59c7('0x37')]=_0x401bb7[_0x59c7('0x37')];_0x2df6bc[_0x59c7('0x38')]=_0x401bb7[_0x59c7('0x38')];_0x2df6bc['outboundBlacklistCallsDay']=_0x401bb7[_0x59c7('0x39')];_0x2df6bc[_0x59c7('0x3a')]=_0x401bb7[_0x59c7('0x3a')];_0x2df6bc['outboundCongestionCallsDay']=_0x401bb7[_0x59c7('0x3b')];_0x2df6bc[_0x59c7('0x3c')]=_0x401bb7[_0x59c7('0x3c')];_0x2df6bc['outboundDropCallsDayCallersExit']=_0x401bb7[_0x59c7('0x3d')];_0x2df6bc[_0x59c7('0x3e')]=_0x401bb7['outboundDropCallsDayTimeout'];_0x2df6bc[_0x59c7('0x3f')]=_0x401bb7[_0x59c7('0x3f')];_0x2df6bc[_0x59c7('0x40')]=_0x401bb7['outboundNoSuchCallsDay'];_0x2df6bc[_0x59c7('0x41')]=_0x401bb7['outboundOriginateFailureCallsDay'];_0x2df6bc['outboundReCallsDay']=_0x401bb7[_0x59c7('0x42')];_0x2df6bc[_0x59c7('0x43')]=_0x401bb7[_0x59c7('0x43')];_0x2df6bc[_0x59c7('0x44')]=_0x401bb7[_0x59c7('0x44')];_0x2df6bc[_0x59c7('0x45')]=_0x401bb7['predictiveIntervalAnsweredCalls'];_0x2df6bc[_0x59c7('0x46')]=_0x401bb7['predictiveIntervalAvgHoldtime'];_0x2df6bc[_0x59c7('0x47')]=_0x401bb7['predictiveIntervalAvgTalktime'];_0x2df6bc[_0x59c7('0x48')]=_0x401bb7[_0x59c7('0x48')];_0x2df6bc[_0x59c7('0x49')]=_0x401bb7[_0x59c7('0x49')];_0x2df6bc[_0x59c7('0x4a')]=_0x401bb7[_0x59c7('0x4a')];_0x2df6bc[_0x59c7('0x4b')]=_0x401bb7[_0x59c7('0x4b')];_0x2df6bc['predictiveIntervalHitRate']=_0x401bb7[_0x59c7('0x4c')];_0x2df6bc['predictiveIntervalMultiplicativeFactor']=_0x401bb7[_0x59c7('0x4d')];_0x2df6bc[_0x59c7('0x4e')]=_0x401bb7[_0x59c7('0x4e')];_0x2df6bc[_0x59c7('0x4f')]=_0x401bb7[_0x59c7('0x4f')];_0x2df6bc[_0x59c7('0x50')]=_0x401bb7['predictiveIntervalTotalCalls'];_0x2df6bc[_0x59c7('0x1b')]=_0x401bb7['message'];_0x2df6bc[_0x59c7('0x51')]=_0x401bb7[_0x59c7('0x51')];_0x2df6bc[_0x59c7('0x52')]=_0x401bb7['erlangCalls'];_0x2df6bc[_0x59c7('0x53')]=_0x401bb7[_0x59c7('0x53')];_0x2df6bc[_0x59c7('0x54')]=_0x401bb7[_0x59c7('0x54')];_0x2df6bc[_0x59c7('0x55')]=_0x401bb7['erlangBusyFactor'];_0x2df6bc[_0x59c7('0x56')]=_0x401bb7['startPredictive'];_0x2df6bc[_0x59c7('0x57')]=_0x401bb7['startProgressive'];}if(_0x401bb7[_0x59c7('0x58')]){_0x2df6bc['Trunk']={'id':_0x401bb7['Trunk']['id'],'name':_0x401bb7[_0x59c7('0x58')][_0x59c7('0xa')],'active':_0x401bb7[_0x59c7('0x58')]['active'],'callerid':_0x401bb7[_0x59c7('0x58')][_0x59c7('0x59')]};}if(_0x401bb7['Interval']){_0x2df6bc[_0x59c7('0x5a')]={'id':_0x401bb7[_0x59c7('0x5a')]['id'],'name':_0x401bb7[_0x59c7('0x5a')][_0x59c7('0xa')]};}_0x526097[_0x59c7('0x5b')](_0x2df6bc);}}_0x780691({'count':_0x526097['length'],'rows':_0x526097});});},'VoiceChannels':function(_0x121b34){return new Promise(function(_0xa05383,_0x35f0b9){var _0x5f222a=_[_0x59c7('0x5c')](_0x414b9a[_0x59c7('0x5d')]);_0xa05383({'count':_0x5f222a[_0x59c7('0x5e')],'rows':_0x5f222a});});},'VoiceChannelMixMonitor':function(_0x352c60){var _0x381e17=this;return new Promise(function(_0x4abe86,_0x53fbee){if(ami[_0x59c7('0x12')]()==![]){return _0x53fbee(_0x381e17['error'](0x1f4,[config[_0x59c7('0x14')]['ip'],config[_0x59c7('0x14')][_0x59c7('0x5f')],'ami\x20disconnected'][_0x59c7('0x60')]('\x20')));}var _0x30dffd=schema(properties[_0x59c7('0x61')])[_0x59c7('0x62')](_0x352c60);if(_0x30dffd[_0x59c7('0x5e')]>0x0){return _0x53fbee(_0x381e17[_0x59c7('0x13')](0x1f4,_[_0x59c7('0x63')](_0x30dffd,_0x59c7('0x1b'))[_0x59c7('0x60')](',\x20')));}var _0x120aa9=_[_0x59c7('0x64')](_0x414b9a['channels'],{'uniqueid':_0x352c60[_0x59c7('0x65')]});if(_0x120aa9&&_0x120aa9[_0x59c7('0x66')]){var _0x3ed187=util[_0x59c7('0x7')]('%s.%s',_0x352c60[_0x59c7('0x67')]||_0x352c60['uniqueid'],_0x352c60[_0x59c7('0x7')]||_0x59c7('0x68'));return ami[_0x59c7('0x1a')]({'action':_0x59c7('0x69'),'channel':_0x120aa9[_0x59c7('0x66')],'file':_0x3ed187,'options':_0x59c7('0x6a')})[_0x59c7('0x1f')](function(_0x5bbcc6){var _0x2610a0=_[_0x59c7('0x64')](_0x120aa9['monitors'],{'filename':_0x59c7('0x6b')+_0x3ed187[_0x59c7('0x6c')]()});if(_[_0x59c7('0x6d')](_0x2610a0)){_0x120aa9[_0x59c7('0x6e')][_0x59c7('0x5b')]({'filename':_0x59c7('0x6b')+_0x3ed187[_0x59c7('0x6c')](),'createdAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'mixmonitorid':_0x5bbcc6[_0x59c7('0x6f')],'status':_0x59c7('0x70')});}else{_0x2610a0[_0x59c7('0x6f')]=_0x5bbcc6[_0x59c7('0x6f')];_0x2610a0[_0x59c7('0x71')]='rec';}_0x4abe86({'code':0xc8,'message':[_0x352c60[_0x59c7('0x65')],'MixMonitor\x20Success',_0x5bbcc6[_0x59c7('0x6f')]][_0x59c7('0x60')]('\x20'),'mixmonitorid':_0x5bbcc6[_0x59c7('0x6f')]});})[_0x59c7('0x72')](function(_0x2f371c){_0x53fbee(_0x381e17[_0x59c7('0x13')](0x1f5,[_0x352c60['uniqueid'],_0x2f371c[_0x59c7('0x1b')][_0x59c7('0x6c')]()][_0x59c7('0x60')]('\x20')));});}else{return _0x53fbee(_0x381e17['error'](0x1f5,'Channel\x20doesn\x27t\x20exist'));}});},'VoiceChannelStopMixMonitor':function(_0x422695){var _0x257f2e=this;return new Promise(function(_0x415360,_0x31b4fb){if(ami[_0x59c7('0x12')]()==![]){return _0x31b4fb(_0x257f2e['error'](0x1f4,[config[_0x59c7('0x14')]['ip'],config[_0x59c7('0x14')][_0x59c7('0x5f')],_0x59c7('0x15')][_0x59c7('0x60')]('\x20')));}var _0x41cad9=schema(properties[_0x59c7('0x61')])['validate'](_0x422695);if(_0x41cad9['length']>0x0){return _0x31b4fb(_0x257f2e[_0x59c7('0x13')](0x1f4,_['map'](_0x41cad9,_0x59c7('0x1b'))[_0x59c7('0x60')](',\x20')));}var _0x46437f=_[_0x59c7('0x64')](_0x414b9a[_0x59c7('0x5d')],{'uniqueid':_0x422695[_0x59c7('0x65')]});if(_0x46437f){return BPromise[_0x59c7('0x73')]()[_0x59c7('0x1f')](function(){if(_0x46437f['channel']){return ami['Action']({'action':_0x59c7('0x74'),'channel':_0x46437f['channel'],'mixmonitorid':_0x422695[_0x59c7('0x6f')]})[_0x59c7('0x72')](function(_0x584122){});}})[_0x59c7('0x1f')](function(){if(_0x46437f[_0x59c7('0x75')]){return ami[_0x59c7('0x1a')]({'action':_0x59c7('0x74'),'channel':_0x46437f[_0x59c7('0x75')],'mixmonitorid':_0x422695['mixmonitorid']})[_0x59c7('0x72')](function(_0x4e1df0){});}})['then'](function(_0x2ccd3c){var _0x24507f=_[_0x59c7('0x64')](_0x46437f[_0x59c7('0x6e')],{'mixmonitorid':_0x422695[_0x59c7('0x6f')]});if(_0x24507f){_0x24507f['status']=_0x59c7('0x76');}})[_0x59c7('0x1f')](function(){var _0x394cdc=util[_0x59c7('0x7')](_0x59c7('0x77'),_0x422695['filename']||_0x422695[_0x59c7('0x65')],_0x422695[_0x59c7('0x7')]||_0x59c7('0x68'));var _0x518601=_[_0x59c7('0x64')](_0x46437f[_0x59c7('0x6e')],{'filename':_0x59c7('0x6b')+_0x394cdc[_0x59c7('0x6c')]()});if(_0x518601){_0x518601[_0x59c7('0x71')]='stop';}})[_0x59c7('0x1f')](function(){_0x415360({'code':0xc8,'message':[_0x422695[_0x59c7('0x65')],'StopMixMonitor\x20Success'][_0x59c7('0x60')]('\x20')});})[_0x59c7('0x72')](function(_0x2a900e){_0x31b4fb(_0x257f2e['error'](0x1f5,[_0x422695['uniqueid'],_0x2a900e[_0x59c7('0x1b')][_0x59c7('0x6c')]()][_0x59c7('0x60')]('\x20')));});}else{return _0x31b4fb(_0x257f2e[_0x59c7('0x13')](0x1f5,_0x59c7('0x78')));}});},'VoiceQueuesChannels':function(_0x3e4451){return new Promise(function(_0x27941b,_0x2a200a){var _0x4603b0=_[_0x59c7('0x5c')](_0x414b9a[_0x59c7('0x79')]);_0x27941b({'count':_0x4603b0[_0x59c7('0x5e')],'rows':_0x4603b0});});},'VoiceQueuesChannel':function(_0x5beb43){var _0x459127=this;return new Promise(function(_0x7a78e5,_0x96d7ac){var _0x42f092=schema(properties[_0x59c7('0x7a')])['validate'](_0x5beb43);if(_0x42f092[_0x59c7('0x5e')]>0x0){return _0x96d7ac(_0x459127[_0x59c7('0x13')](0x1f4,_[_0x59c7('0x63')](_0x42f092,_0x59c7('0x1b'))[_0x59c7('0x60')](',\x20')));}var _0x5a0d77=_[_0x59c7('0x64')](_0x414b9a[_0x59c7('0x79')],{'uniqueid':_0x5beb43[_0x59c7('0x65')]});if(_0x5a0d77){_0x7a78e5(_0x5a0d77);}else{return _0x96d7ac(_0x459127[_0x59c7('0x13')](0x1f5,_0x59c7('0x78')));}});},'VoiceQueuesChannelHangup':function(_0x5477de){var _0x3eb29f=this;return new Promise(function(_0x358453,_0x340332){if(ami[_0x59c7('0x12')]()==![]){return _0x340332(_0x3eb29f['error'](0x1f4,[config[_0x59c7('0x14')]['ip'],config[_0x59c7('0x14')][_0x59c7('0x5f')],_0x59c7('0x15')][_0x59c7('0x60')]('\x20')));}var _0x214e1c=schema(properties['voicequeuechannelhangup'])[_0x59c7('0x62')](_0x5477de);if(_0x214e1c[_0x59c7('0x5e')]>0x0){return _0x340332(_0x3eb29f[_0x59c7('0x13')](0x1f4,_['map'](_0x214e1c,'message')['join'](',\x20')));}var _0x43f3a3=_[_0x59c7('0x64')](_0x414b9a[_0x59c7('0x79')],{'uniqueid':_0x5477de['uniqueid']});if(_0x43f3a3&&_0x43f3a3[_0x59c7('0x66')]){return ami[_0x59c7('0x1a')]({'action':_0x59c7('0x7b'),'channel':_0x43f3a3['channel']})['then'](function(_0x1f6f0a){_0x358453({'code':0xc8,'message':[_0x5477de['uniqueid'],_0x1f6f0a['message'][_0x59c7('0x6c')]()][_0x59c7('0x60')]('\x20')});})['catch'](function(_0x4c3f01){_0x340332(_0x3eb29f[_0x59c7('0x13')](0x1f5,[_0x5477de[_0x59c7('0x65')],_0x4c3f01[_0x59c7('0x1b')][_0x59c7('0x6c')]()]['join']('\x20')));});}else{return _0x340332(_0x3eb29f[_0x59c7('0x13')](0x1f5,_0x59c7('0x78')));}});},'VoiceQueuesChannelRedirect':function(_0x38792a){var _0x5e7aa1=this;return new Promise(function(_0x33f381,_0x4c71f6){if(ami['isConnected']()==![]){return _0x4c71f6(_0x5e7aa1[_0x59c7('0x13')](0x1f4,[config['asterisk']['ip'],config[_0x59c7('0x14')][_0x59c7('0x5f')],_0x59c7('0x15')][_0x59c7('0x60')]('\x20')));}var _0xd22d8b=schema(properties['voicequeuechannelredirect'])['validate'](_0x38792a);if(_0xd22d8b[_0x59c7('0x5e')]>0x0){return _0x4c71f6(_0x5e7aa1[_0x59c7('0x13')](0x1f4,_[_0x59c7('0x63')](_0xd22d8b,_0x59c7('0x1b'))[_0x59c7('0x60')](',\x20')));}var _0x258b85=_[_0x59c7('0x64')](_0x414b9a[_0x59c7('0x79')],{'uniqueid':_0x38792a[_0x59c7('0x65')]});if(_0x258b85&&_0x258b85[_0x59c7('0x66')]){return ami[_0x59c7('0x1a')]({'action':_0x59c7('0x7c'),'channel':_0x258b85[_0x59c7('0x66')],'exten':_0x38792a['exten'],'context':_0x38792a['context']||_0x258b85[_0x59c7('0x7d')],'priority':0x1})['then'](function(_0x3ab8f9){_0x33f381({'code':0xc8,'message':[_0x38792a['uniqueid'],_0x3ab8f9[_0x59c7('0x1b')]['toLowerCase']()][_0x59c7('0x60')]('\x20')});})[_0x59c7('0x72')](function(_0x1ed44a){_0x4c71f6(_0x5e7aa1[_0x59c7('0x13')](0x1f5,[_0x38792a['uniqueid'],_0x1ed44a[_0x59c7('0x1b')]['toLowerCase']()][_0x59c7('0x60')]('\x20')));});}else{return _0x4c71f6(_0x5e7aa1[_0x59c7('0x13')](0x1f5,_0x59c7('0x78')));}});},'Agents':function(_0x27f62f){return new Promise(function(_0x384537,_0x5346c8){var _0x4be5b3=_['values'](_0x414b9a[_0x59c7('0xe')]);_0x384537({'count':_0x4be5b3[_0x59c7('0x5e')],'rows':_0x4be5b3});});},'Telephones':function(_0x30c505){return new Promise(function(_0xf4c656,_0x3a2205){var _0x10de2d=_[_0x59c7('0x5c')](_0x414b9a[_0x59c7('0x7e')]);_0xf4c656({'count':_0x10de2d[_0x59c7('0x5e')],'rows':_0x10de2d});});},'Trunks':function(_0x1418a4){return new Promise(function(_0x395974,_0x41ddde){var _0x24d31b=_[_0x59c7('0x5c')](_0x414b9a[_0x59c7('0x7f')]);_0x395974({'count':_0x24d31b[_0x59c7('0x5e')],'rows':_0x24d31b});});},'OutboundChannels':function(_0x2c9ced){return new Promise(function(_0x27b238,_0x41156c){var _0x2034d4=_[_0x59c7('0x5c')](_0x414b9a[_0x59c7('0x80')]);_0x27b238({'count':_0x2034d4[_0x59c7('0x5e')],'rows':_0x2034d4});});},'Outbound':function(_0x297f61){return new Promise(function(_0x4a7a16,_0xa052d2){_0x4a7a16(_0x414b9a['outbound']);});},'Campaigns':function(_0x288426){return new Promise(function(_0x1fc91f,_0x3251b7){var _0x3b54fd=_['values'](_0x414b9a[_0x59c7('0x81')]);_0x1fc91f({'count':_0x3b54fd[_0x59c7('0x5e')],'rows':_0x3b54fd});});},'VoiceQueuesPreview':function(_0x1daf97){var _0x1d9d60=this;return new Promise(function(_0x106165,_0x5ec687){_0x5ead04[_0x59c7('0x82')](_0x1daf97['id'])['then'](function(_0x1bd154){_0x106165({'code':0xc8,'message':_0x1bd154[_0x59c7('0x1b')]});})[_0x59c7('0x72')](function(_0x5039f4){_0x5ec687(_0x1d9d60[_0x59c7('0x13')](0x1f4,_0x5039f4['message']));});});},'EventManager':function(_0x5ca096){var _0x41f90e=this;return new Promise(function(_0x397149,_0x2c4d7b){if(!_0x5ca096['event']){return _0x2c4d7b(_0x41f90e[_0x59c7('0x13')](0x1f4,_0x59c7('0x83')));}ami[_0x59c7('0x84')](_0x59c7('0x85')+_0x5ca096[_0x59c7('0x86')],_0x5ca096['message']);_0x397149({'code':0xc8,'message':_0x5ca096});});},'FaxAccounts':function(_0x51cab0){return new Promise(function(_0x3a8a68,_0xc64fcf){var _0x42fe31=_[_0x59c7('0x5c')](_0x414b9a[_0x59c7('0x87')]);_0x3a8a68({'count':_0x42fe31['length'],'rows':_0x42fe31});});},'SendFax':function(_0x35ee51){var _0x180554=this;return new Promise(function(_0x1b08a3,_0x2ed0c2){_0x100183['send'](_0x35ee51)[_0x59c7('0x1f')](function(_0x4c2ce4){_0x1b08a3({'code':0xc8,'message':_0x4c2ce4['message']});})[_0x59c7('0x72')](function(_0x2a4356){_0x2ed0c2(_0x180554[_0x59c7('0x13')](0x1f4,_0x2a4356['message']));});});},'CheckAfterSend':function(_0x27b790){var _0x7c3c07=this;return new Promise(function(_0x13040c,_0x301b92){_0x100183['checkAfterSend'](_0x27b790)[_0x59c7('0x1f')](function(_0x366d33){_0x13040c({'code':0xc8,'message':_0x366d33[_0x59c7('0x1b')]});})[_0x59c7('0x72')](function(_0x39fd5c){_0x301b92(_0x7c3c07['error'](0x1f4,_0x39fd5c[_0x59c7('0x1b')]));});});}};var _0x16dc72=jayson[_0x59c7('0x88')](_0x409cb6)[_0x59c7('0x89')]();_0x16dc72['on'](_0x59c7('0x13'),function(_0x414cef){return _0x2bb88d(_0x414cef);});_0x16dc72[_0x59c7('0x6')](0x232a,_0x59c7('0x8a'),function(){console[_0x59c7('0x8b')](_0x59c7('0x8c'),0x232a);return _0xc8a7a1(_0x59c7('0x8d')+0x232a);});});};
\ No newline at end of file
index 00090ad..57b2628 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x892c=['omit','xmd-contactid2','user:%s','name','format','trigger:%s','action','merge','createContact','toLowerCase','error','Error\x20creating\x20contact','bluebird','util','lodash','../../../../config/environment','../../../../config/logger','redis','defaults','localhost','socket.io-emitter','info','emit','exec','data2','data1','isNil','routeId','firstName','calleridname','calleridnum','uniqueid','destcalleridname','<unknown>','destcalleridnum','phone','resolve','then'];(function(_0x1f9f37,_0x18776e){var _0x21c080=function(_0x4acb93){while(--_0x4acb93){_0x1f9f37['push'](_0x1f9f37['shift']());}};_0x21c080(++_0x18776e);}(_0x892c,0x162));var _0xc892=function(_0x8f6a2c,_0x435996){_0x8f6a2c=_0x8f6a2c-0x0;var _0x42a718=_0x892c[_0x8f6a2c];return _0x42a718;};'use strict';var BPromise=require(_0xc892('0x0'));var util=require(_0xc892('0x1'));var _=require(_0xc892('0x2'));var Redis=require('ioredis');var config=require(_0xc892('0x3'));var logger=require(_0xc892('0x4'))('trigger');var cmContactRpc=require('../../rpc/cmContact');config[_0xc892('0x5')]=_[_0xc892('0x6')](config[_0xc892('0x5')],{'host':_0xc892('0x7'),'port':0x18eb});var io=require(_0xc892('0x8'))(new Redis(config[_0xc892('0x5')]));function emit(_0x58720f,_0x3def1f,_0x41b19c){logger[_0xc892('0x9')](_0x58720f,_0x3def1f,JSON['stringify'](_0x41b19c));io['to'](_0x58720f)[_0xc892('0xa')](_0x3def1f,_0x41b19c);}exports[_0xc892('0xb')]=function(_0x374097,_0x54c59a,_0x4d5edc){_0x4d5edc['autoCreate']=0x0;if(_0x54c59a['data2']&&parseInt(_0x54c59a[_0xc892('0xc')],0xa)){var _0x1ec773={'ListId':parseInt(_0x54c59a[_0xc892('0xd')],0xa),'phone':_0x4d5edc['calleridnum']};if(_[_0xc892('0xe')](_0x4d5edc[_0xc892('0xf')])){_0x1ec773[_0xc892('0x10')]=_0x4d5edc[_0xc892('0x11')]&&_0x4d5edc[_0xc892('0x11')]!=='<unknown>'?_0x4d5edc[_0xc892('0x11')]:_0x4d5edc[_0xc892('0x12')]||_0x4d5edc[_0xc892('0x13')];}else{_0x1ec773[_0xc892('0x10')]=_0x4d5edc[_0xc892('0x14')]&&_0x4d5edc[_0xc892('0x14')]!==_0xc892('0x15')?_0x4d5edc[_0xc892('0x14')]:_0x4d5edc[_0xc892('0x16')]||_0x4d5edc['uniqueid'];_0x1ec773[_0xc892('0x17')]=_0x4d5edc[_0xc892('0x14')]&&_0x4d5edc[_0xc892('0x14')]!==_0xc892('0x15')?_0x4d5edc[_0xc892('0x14')]:_0x4d5edc['destcalleridnum']||_0x4d5edc[_0xc892('0x13')];}BPromise[_0xc892('0x18')]()[_0xc892('0x19')](cmContactRpc['showContact']({'where':_[_0xc892('0x1a')](_0x1ec773,[_0xc892('0x10')])}))[_0xc892('0x19')](function(_0x298784){if(_0x298784){_0x4d5edc[_0xc892('0x1b')]=_0x298784['id'];emit(util['format'](_0xc892('0x1c'),_0x374097[_0xc892('0x1d')]),util[_0xc892('0x1e')](_0xc892('0x1f'),_0x54c59a[_0xc892('0x20')]['toLowerCase']()),_[_0xc892('0x21')](_0x4d5edc,{'ListId':parseInt(_0x54c59a[_0xc892('0xd')],0xa)}));return;}else{return BPromise[_0xc892('0x18')]()['then'](cmContactRpc[_0xc892('0x22')](_0x1ec773));}})[_0xc892('0x19')](function(_0x31e960){if(_0x31e960){_0x4d5edc[_0xc892('0x1b')]=_0x31e960['id'];emit(util[_0xc892('0x1e')](_0xc892('0x1c'),_0x374097['name']),util[_0xc892('0x1e')](_0xc892('0x1f'),_0x54c59a[_0xc892('0x20')][_0xc892('0x23')]()),_['merge'](_0x4d5edc,{'ListId':parseInt(_0x54c59a[_0xc892('0xd')],0xa)}));}})['catch'](function(_0x76921c){logger[_0xc892('0x24')](_0xc892('0x25'),JSON['stringify'](_0x76921c));});}else{if(_0x374097){emit(util[_0xc892('0x1e')](_0xc892('0x1c'),_0x374097[_0xc892('0x1d')]),util[_0xc892('0x1e')](_0xc892('0x1f'),_0x54c59a[_0xc892('0x20')][_0xc892('0x23')]()),_['merge']({'ListId':parseInt(_0x54c59a['data1'],0xa)},_0x4d5edc));}}};
\ No newline at end of file
+var _0x7ab5=['trigger:%s','toLowerCase','catch','error','bluebird','util','lodash','ioredis','../../../../config/environment','../../../../config/logger','trigger','../../rpc/cmContact','defaults','redis','socket.io-emitter','info','stringify','emit','exec','autoCreate','data2','isNil','routeId','firstName','calleridname','<unknown>','calleridnum','uniqueid','destcalleridname','phone','destcalleridnum','then','showContact','omit','xmd-contactid2','format','action','merge','data1','resolve','createContact','user:%s','name'];(function(_0x201ef0,_0x2ef642){var _0x529950=function(_0x5f4e12){while(--_0x5f4e12){_0x201ef0['push'](_0x201ef0['shift']());}};_0x529950(++_0x2ef642);}(_0x7ab5,0x106));var _0x57ab=function(_0x5c0f8d,_0x2574b1){_0x5c0f8d=_0x5c0f8d-0x0;var _0x3dae47=_0x7ab5[_0x5c0f8d];return _0x3dae47;};'use strict';var BPromise=require(_0x57ab('0x0'));var util=require(_0x57ab('0x1'));var _=require(_0x57ab('0x2'));var Redis=require(_0x57ab('0x3'));var config=require(_0x57ab('0x4'));var logger=require(_0x57ab('0x5'))(_0x57ab('0x6'));var cmContactRpc=require(_0x57ab('0x7'));config['redis']=_[_0x57ab('0x8')](config[_0x57ab('0x9')],{'host':'localhost','port':0x18eb});var io=require(_0x57ab('0xa'))(new Redis(config[_0x57ab('0x9')]));function emit(_0x478d6a,_0x23e827,_0x206563){logger[_0x57ab('0xb')](_0x478d6a,_0x23e827,JSON[_0x57ab('0xc')](_0x206563));io['to'](_0x478d6a)[_0x57ab('0xd')](_0x23e827,_0x206563);}exports[_0x57ab('0xe')]=function(_0x964013,_0x3e2989,_0x1b8f09){_0x1b8f09[_0x57ab('0xf')]=0x0;if(_0x3e2989['data2']&&parseInt(_0x3e2989[_0x57ab('0x10')],0xa)){var _0x3d140f={'ListId':parseInt(_0x3e2989['data1'],0xa),'phone':_0x1b8f09['calleridnum']};if(_[_0x57ab('0x11')](_0x1b8f09[_0x57ab('0x12')])){_0x3d140f[_0x57ab('0x13')]=_0x1b8f09['calleridname']&&_0x1b8f09[_0x57ab('0x14')]!==_0x57ab('0x15')?_0x1b8f09[_0x57ab('0x14')]:_0x1b8f09[_0x57ab('0x16')]||_0x1b8f09[_0x57ab('0x17')];}else{_0x3d140f[_0x57ab('0x13')]=_0x1b8f09[_0x57ab('0x18')]&&_0x1b8f09[_0x57ab('0x18')]!==_0x57ab('0x15')?_0x1b8f09[_0x57ab('0x18')]:_0x1b8f09['destcalleridnum']||_0x1b8f09[_0x57ab('0x17')];_0x3d140f[_0x57ab('0x19')]=_0x1b8f09[_0x57ab('0x18')]&&_0x1b8f09[_0x57ab('0x18')]!==_0x57ab('0x15')?_0x1b8f09[_0x57ab('0x18')]:_0x1b8f09[_0x57ab('0x1a')]||_0x1b8f09['uniqueid'];}BPromise['resolve']()[_0x57ab('0x1b')](cmContactRpc[_0x57ab('0x1c')]({'where':_[_0x57ab('0x1d')](_0x3d140f,[_0x57ab('0x13')])}))['then'](function(_0x28ed86){if(_0x28ed86){_0x1b8f09[_0x57ab('0x1e')]=_0x28ed86['id'];emit(util['format']('user:%s',_0x964013['name']),util[_0x57ab('0x1f')]('trigger:%s',_0x3e2989[_0x57ab('0x20')]['toLowerCase']()),_[_0x57ab('0x21')](_0x1b8f09,{'ListId':parseInt(_0x3e2989[_0x57ab('0x22')],0xa)}));return;}else{return BPromise[_0x57ab('0x23')]()[_0x57ab('0x1b')](cmContactRpc[_0x57ab('0x24')](_0x3d140f));}})[_0x57ab('0x1b')](function(_0x3cf345){if(_0x3cf345){_0x1b8f09[_0x57ab('0x1e')]=_0x3cf345['id'];emit(util[_0x57ab('0x1f')](_0x57ab('0x25'),_0x964013[_0x57ab('0x26')]),util['format'](_0x57ab('0x27'),_0x3e2989[_0x57ab('0x20')][_0x57ab('0x28')]()),_['merge'](_0x1b8f09,{'ListId':parseInt(_0x3e2989['data1'],0xa)}));}})[_0x57ab('0x29')](function(_0x865507){logger[_0x57ab('0x2a')]('Error\x20creating\x20contact',JSON[_0x57ab('0xc')](_0x865507));});}else{if(_0x964013){emit(util[_0x57ab('0x1f')](_0x57ab('0x25'),_0x964013[_0x57ab('0x26')]),util[_0x57ab('0x1f')]('trigger:%s',_0x3e2989[_0x57ab('0x20')][_0x57ab('0x28')]()),_[_0x57ab('0x21')]({'ListId':parseInt(_0x3e2989[_0x57ab('0x22')],0xa)},_0x1b8f09));}}};
\ No newline at end of file
index 290ba5f..bdda68d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc12d=['exec','integration','queue','routeId','urlforward','script','buildUri','parse','query','search','AllConditions','length','every','checkConditions','channel','AnyConditions','some','field','chat','ChatWebsiteId','operator','upperFirst','AccountId','value','interaction','message','event','agent','membername','lastevent','util','mustache','./urlforward','./integration','./cmContact','./script','../../../config/environment','../../../config/logger','trigger','../ami','redis','defaults','localhost','winapp','triggers','agents','voiceQueues','templates','voiceExtensions','zendeskAccounts','freshdeskAccounts','salesforceAccounts','sugarcrmAccounts','zohoAccounts','deskAccounts','vtigerAccounts','servicenowAccounts','accounts','custom:agentcalled','syncCustomEvent','bind','custom:agentconnect','custom:agentringnoanswer','custom:agentcomplete','custom:queuecallerabandon','custom:dialbegin','syncAgentDial','custom:dialconnect','custom:dialend','custom:newinteraction','custom:closedinteraction','custom:incomingmessage','custom:outgoingmessage','custom:rejectmessage','prototype','emit','stringify','clone','interface','checkTriggers','status','checkTrigger','Actions','action','toLowerCase','contactmanager','browser','data1','popup','TemplateId','data2','render','html','template\x20not\x20found','url','isNil','data3','data4','location','uriLocation','windowWidth','800','data5','windowHeight','data6','winApplication','format','user:%s','name','trigger:%s:%s','merge','jscripty','trigger:%s'];(function(_0x57832d,_0xaf1c8){var _0x4c2a8c=function(_0x13df83){while(--_0x13df83){_0x57832d['push'](_0x57832d['shift']());}};_0x4c2a8c(++_0xaf1c8);}(_0xc12d,0x1e2));var _0xdc12=function(_0x46833a,_0x40cc5c){_0x46833a=_0x46833a-0x0;var _0x1a3c7a=_0xc12d[_0x46833a];return _0x1a3c7a;};'use strict';var util=require(_0xdc12('0x0'));var _=require('lodash');var url=require('url');var Mustache=require(_0xdc12('0x1'));var Redis=require('ioredis');var urlforward=require(_0xdc12('0x2'));var integration=require(_0xdc12('0x3'));var cmContact=require(_0xdc12('0x4'));var script=require(_0xdc12('0x5'));var cmContactRpc=require('../rpc/cmContact');var config=require(_0xdc12('0x6'));var logger=require(_0xdc12('0x7'))(_0xdc12('0x8'));var ami=require(_0xdc12('0x9'));config[_0xdc12('0xa')]=_[_0xdc12('0xb')](config[_0xdc12('0xa')],{'host':_0xdc12('0xc'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xdc12('0xa')]));var operators={'equals':function(_0x18244e,_0x27630e){return _0x18244e==_0x27630e;},'not_equals':function(_0x341aad,_0x4dec7c){return _0x341aad!=_0x4dec7c;}};var barAndWebActions=['popup','url',_0xdc12('0xd')];function Trigger(_0x1afc7e){this[_0xdc12('0xe')]=_0x1afc7e['triggers'];this[_0xdc12('0xf')]=_0x1afc7e[_0xdc12('0xf')];this[_0xdc12('0x10')]=_0x1afc7e[_0xdc12('0x10')];this['templates']=_0x1afc7e[_0xdc12('0x11')];this[_0xdc12('0x12')]=_0x1afc7e['voiceExtensions'];this[_0xdc12('0x13')]=_0x1afc7e[_0xdc12('0x13')];this[_0xdc12('0x14')]=_0x1afc7e[_0xdc12('0x14')];this[_0xdc12('0x15')]=_0x1afc7e[_0xdc12('0x15')];this[_0xdc12('0x16')]=_0x1afc7e[_0xdc12('0x16')];this[_0xdc12('0x17')]=_0x1afc7e[_0xdc12('0x17')];this[_0xdc12('0x18')]=_0x1afc7e['deskAccounts'];this[_0xdc12('0x19')]=_0x1afc7e[_0xdc12('0x19')];this[_0xdc12('0x1a')]=_0x1afc7e['servicenowAccounts'];this['dynamics365Accounts']=_0x1afc7e['dynamics365Accounts'];this[_0xdc12('0x1b')]={'zendesk':this[_0xdc12('0x13')],'salesforce':this['salesforceAccounts'],'freshdesk':this[_0xdc12('0x14')],'sugarcrm':this[_0xdc12('0x16')],'zoho':this['zohoAccounts'],'desk':this[_0xdc12('0x18')],'vtiger':this[_0xdc12('0x19')],'servicenow':this['servicenowAccounts'],'dynamics365':this['dynamics365Accounts']};ami['on'](_0xdc12('0x1c'),this[_0xdc12('0x1d')][_0xdc12('0x1e')](this));ami['on'](_0xdc12('0x1f'),this['syncCustomEvent']['bind'](this));ami['on'](_0xdc12('0x20'),this['syncCustomEvent']['bind'](this));ami['on'](_0xdc12('0x21'),this[_0xdc12('0x1d')]['bind'](this));ami['on'](_0xdc12('0x22'),this['syncCustomEvent'][_0xdc12('0x1e')](this));ami['on'](_0xdc12('0x23'),this[_0xdc12('0x24')][_0xdc12('0x1e')](this));ami['on'](_0xdc12('0x25'),this[_0xdc12('0x24')][_0xdc12('0x1e')](this));ami['on'](_0xdc12('0x26'),this['syncAgentDial'][_0xdc12('0x1e')](this));ami['on'](_0xdc12('0x27'),this[_0xdc12('0x1d')][_0xdc12('0x1e')](this));ami['on'](_0xdc12('0x28'),this[_0xdc12('0x1d')][_0xdc12('0x1e')](this));ami['on'](_0xdc12('0x29'),this[_0xdc12('0x1d')][_0xdc12('0x1e')](this));ami['on'](_0xdc12('0x2a'),this[_0xdc12('0x1d')][_0xdc12('0x1e')](this));ami['on']('custom:acceptmessage',this[_0xdc12('0x1d')][_0xdc12('0x1e')](this));ami['on'](_0xdc12('0x2b'),this[_0xdc12('0x1d')][_0xdc12('0x1e')](this));}Trigger[_0xdc12('0x2c')][_0xdc12('0x2d')]=function(_0x3d8b4c,_0x41d7a6,_0x5931c6){logger['info'](_0x3d8b4c,_0x41d7a6,JSON[_0xdc12('0x2e')](_0x5931c6));io['to'](_0x3d8b4c)[_0xdc12('0x2d')](_0x41d7a6,_0x5931c6);};Trigger[_0xdc12('0x2c')][_0xdc12('0x1d')]=function(_0x220686){var _0x383bd2=_[_0xdc12('0x2f')](_0x220686);this['checkTriggers'](_0x383bd2);};Trigger[_0xdc12('0x2c')][_0xdc12('0x24')]=function(_0x856f0f){if(this[_0xdc12('0xf')][_0x856f0f[_0xdc12('0x30')]]){this['syncCustomEvent'](_0x856f0f);}};Trigger[_0xdc12('0x2c')][_0xdc12('0x31')]=function(_0x4c7cf3){var _0x423503;for(var _0x567870 in this[_0xdc12('0xe')]){if(this[_0xdc12('0xe')]['hasOwnProperty'](_0x567870)){if(this[_0xdc12('0xe')][_0x567870][_0xdc12('0x32')]){_0x423503=this[_0xdc12('0x33')](this[_0xdc12('0xe')][_0x567870],_0x4c7cf3);if(_0x423503){_['merge'](_0x4c7cf3,_0x4c7cf3['variables']);for(var _0x412816=0x0,_0x121734,_0x54352a,_0xda4813;_0x412816<this[_0xdc12('0xe')][_0x567870]['Actions']['length'];_0x412816+=0x1){_0x121734=this[_0xdc12('0xe')][_0x567870][_0xdc12('0x34')][_0x412816];if(this[_0xdc12('0xf')][_0x4c7cf3[_0xdc12('0x30')]]){switch(_0x121734[_0xdc12('0x35')][_0xdc12('0x36')]()){case _0xdc12('0x37'):break;case'motionbar':case _0xdc12('0x38'):var _0xeebb7a={};switch(barAndWebActions[_0x121734[_0xdc12('0x39')]]){case _0xdc12('0x3a'):_0xeebb7a[_0xdc12('0x3b')]=_0x121734[_0xdc12('0x3c')];_0xeebb7a['html']=this['templates'][_0x121734[_0xdc12('0x3c')]]?Mustache[_0xdc12('0x3d')](this['templates'][_0x121734[_0xdc12('0x3c')]][_0xdc12('0x3e')],_0x4c7cf3):_0xdc12('0x3f');break;case _0xdc12('0x40'):_0xeebb7a['uri']=this['buildUri'](_0x121734['data2'],_0x4c7cf3,_[_0xdc12('0x41')](_0x121734[_0xdc12('0x42')])?!![]:parseInt(_0x121734[_0xdc12('0x42')],0xa));if(_[_0xdc12('0x41')](_0x121734[_0xdc12('0x43')])){_0xeebb7a[_0xdc12('0x44')]='0';}else{_0xeebb7a[_0xdc12('0x45')]=_0x121734[_0xdc12('0x43')];_0xeebb7a[_0xdc12('0x46')]=_['isNil'](_0x121734['data5'])?_0xdc12('0x47'):_0x121734[_0xdc12('0x48')];_0xeebb7a[_0xdc12('0x49')]=_[_0xdc12('0x41')](_0x121734[_0xdc12('0x4a')])?'600':_0x121734[_0xdc12('0x4a')];}break;case _0xdc12('0xd'):_0xeebb7a[_0xdc12('0x4b')]=_0x121734[_0xdc12('0x3c')]?Mustache[_0xdc12('0x3d')](_0x121734['data2'],_0x4c7cf3):'';_0xeebb7a['winArguments']=_0x121734[_0xdc12('0x42')]?Mustache[_0xdc12('0x3d')](_0x121734[_0xdc12('0x42')],_0x4c7cf3):'';break;}this[_0xdc12('0x2d')](util[_0xdc12('0x4c')](_0xdc12('0x4d'),this[_0xdc12('0xf')][_0x4c7cf3[_0xdc12('0x30')]][_0xdc12('0x4e')]),util[_0xdc12('0x4c')](_0xdc12('0x4f'),_0x121734['action'][_0xdc12('0x36')](),barAndWebActions[_0x121734[_0xdc12('0x39')]]),_[_0xdc12('0x50')](_0xeebb7a,_0x4c7cf3));break;case _0xdc12('0x51'):this[_0xdc12('0x2d')](util['format'](_0xdc12('0x4d'),this[_0xdc12('0xf')][_0x4c7cf3[_0xdc12('0x30')]][_0xdc12('0x4e')]),util['format'](_0xdc12('0x52'),_0x121734[_0xdc12('0x35')][_0xdc12('0x36')]()),_[_0xdc12('0x50')]({'ProjectId':parseInt(_0x121734[_0xdc12('0x39')],0xa)},_0x4c7cf3));break;default:this[_0xdc12('0x2d')](util[_0xdc12('0x4c')](_0xdc12('0x4d'),this['agents'][_0x4c7cf3[_0xdc12('0x30')]][_0xdc12('0x4e')]),util[_0xdc12('0x4c')](_0xdc12('0x52'),_0x121734[_0xdc12('0x35')][_0xdc12('0x36')]()),_[_0xdc12('0x50')]({},_0x121734,_0x4c7cf3));}}switch(_0x121734[_0xdc12('0x35')][_0xdc12('0x36')]()){case _0xdc12('0x37'):cmContact[_0xdc12('0x53')](this[_0xdc12('0xf')][_0x4c7cf3[_0xdc12('0x30')]],_0x121734,_0x4c7cf3,cmContactRpc);break;case _0xdc12('0x54'):integration[_0xdc12('0x53')](_0x121734,_0x4c7cf3,this[_0xdc12('0x1b')],this[_0xdc12('0xf')][_0x4c7cf3[_0xdc12('0x30')]],this[_0xdc12('0x10')][_0x4c7cf3[_0xdc12('0x55')]],this[_0xdc12('0x12')][_0x4c7cf3[_0xdc12('0x56')]]);break;case _0xdc12('0x57'):urlforward['exec'](_0x121734,_0x4c7cf3);break;case _0xdc12('0x58'):script[_0xdc12('0x53')](_0x121734,_0x4c7cf3);break;}}}}}}};Trigger[_0xdc12('0x2c')][_0xdc12('0x59')]=function(_0x321b3e,_0x4d05b1,_0x165345){var _0x22cfae=url[_0xdc12('0x5a')](Mustache[_0xdc12('0x3d')](_0x321b3e,_0x4d05b1),!![]);if(_0x165345){_[_0xdc12('0x50')](_0x22cfae[_0xdc12('0x5b')],_0x4d05b1);}delete _0x22cfae[_0xdc12('0x5c')];return url[_0xdc12('0x4c')](_0x22cfae);};Trigger[_0xdc12('0x2c')][_0xdc12('0x33')]=function(_0x37f611,_0x215ec4){var _0x3b6ff9=!![],_0x7304a5=!![];if(_0x37f611[_0xdc12('0x5d')][_0xdc12('0x5e')]){_0x3b6ff9=_[_0xdc12('0x5f')](_0x37f611[_0xdc12('0x5d')],this[_0xdc12('0x60')](_0x215ec4,_0x37f611[_0xdc12('0x61')]));}if(_0x37f611[_0xdc12('0x62')]['length']){_0x7304a5=_[_0xdc12('0x63')](_0x37f611[_0xdc12('0x62')],this[_0xdc12('0x60')](_0x215ec4,_0x37f611[_0xdc12('0x61')]));}return _0x3b6ff9&&_0x7304a5;};Trigger[_0xdc12('0x2c')]['checkConditions']=function(_0x3137cf,_0x33f3a2){return function(_0x41c687){switch(_0x41c687[_0xdc12('0x64')]){case'account':if(_0x3137cf['channel']===_0x33f3a2){if(_0x33f3a2===_0xdc12('0x65')){return _0x3137cf[_0xdc12('0x66')]?operators[_0x41c687[_0xdc12('0x67')]](Number(_0x41c687['value']),_0x3137cf[_0xdc12('0x66')]):![];}else{return _0x3137cf[_[_0xdc12('0x68')](_0x33f3a2)+_0xdc12('0x69')]?operators[_0x41c687[_0xdc12('0x67')]](Number(_0x41c687[_0xdc12('0x6a')]),_0x3137cf[_[_0xdc12('0x68')](_0x33f3a2)+'AccountId']):![];}}break;case _0xdc12('0x6b'):case _0xdc12('0x6c'):if(_0x3137cf[_0xdc12('0x61')]===_0x33f3a2){return _0x3137cf[_0xdc12('0x6d')]?operators[_0x41c687[_0xdc12('0x67')]](_0x41c687[_0xdc12('0x6a')],_0x3137cf[_0xdc12('0x6d')]):![];}break;case _0xdc12('0x55'):return _0x3137cf['queue']?operators[_0x41c687[_0xdc12('0x67')]](_0x41c687[_0xdc12('0x6a')],_0x3137cf['queue']):![];case _0xdc12('0x6e'):return _0x3137cf['membername']?operators[_0x41c687['operator']](_0x41c687['value'],_0x3137cf[_0xdc12('0x6f')]):![];case _0xdc12('0x70'):return _0x3137cf[_0xdc12('0x70')]?operators[_0x41c687[_0xdc12('0x67')]](_0x41c687[_0xdc12('0x6a')],_0x3137cf[_0xdc12('0x70')]):![];case _0xdc12('0x56'):return _0x3137cf[_0xdc12('0x56')]?operators[_0x41c687['operator']](_0x41c687['value'],_0x3137cf[_0xdc12('0x56')]):![];}return![];};};module['exports']=Trigger;
\ No newline at end of file
+var _0xbee9=['integration','queue','routeId','script','parse','search','AllConditions','every','checkConditions','channel','AnyConditions','some','account','chat','ChatWebsiteId','operator','upperFirst','message','value','event','membername','lastevent','exports','util','lodash','url','mustache','ioredis','./integration','./script','../rpc/cmContact','../../../config/environment','../../../config/logger','trigger','../ami','redis','defaults','localhost','socket.io-emitter','popup','winapp','triggers','agents','voiceQueues','templates','voiceExtensions','zendeskAccounts','freshdeskAccounts','salesforceAccounts','zohoAccounts','servicenowAccounts','dynamics365Accounts','accounts','sugarcrmAccounts','deskAccounts','vtigerAccounts','custom:agentcalled','syncCustomEvent','bind','custom:agentconnect','custom:agentringnoanswer','custom:agentcomplete','custom:queuecallerabandon','custom:dialbegin','syncAgentDial','custom:dialconnect','custom:dialend','custom:newinteraction','custom:closedinteraction','custom:incomingmessage','custom:outgoingmessage','custom:rejectmessage','prototype','emit','stringify','clone','checkTriggers','interface','hasOwnProperty','status','checkTrigger','merge','variables','Actions','length','action','toLowerCase','contactmanager','motionbar','browser','data1','TemplateId','data2','html','render','uri','buildUri','isNil','data3','data4','location','uriLocation','windowWidth','data5','data6','winApplication','winArguments','format','user:%s','name','jscripty','trigger:%s','exec'];(function(_0x15ee04,_0x5e03f8){var _0x36d839=function(_0x13fe46){while(--_0x13fe46){_0x15ee04['push'](_0x15ee04['shift']());}};_0x36d839(++_0x5e03f8);}(_0xbee9,0xf9));var _0x9bee=function(_0x11b0b5,_0x869562){_0x11b0b5=_0x11b0b5-0x0;var _0x16092a=_0xbee9[_0x11b0b5];return _0x16092a;};'use strict';var util=require(_0x9bee('0x0'));var _=require(_0x9bee('0x1'));var url=require(_0x9bee('0x2'));var Mustache=require(_0x9bee('0x3'));var Redis=require(_0x9bee('0x4'));var urlforward=require('./urlforward');var integration=require(_0x9bee('0x5'));var cmContact=require('./cmContact');var script=require(_0x9bee('0x6'));var cmContactRpc=require(_0x9bee('0x7'));var config=require(_0x9bee('0x8'));var logger=require(_0x9bee('0x9'))(_0x9bee('0xa'));var ami=require(_0x9bee('0xb'));config[_0x9bee('0xc')]=_[_0x9bee('0xd')](config[_0x9bee('0xc')],{'host':_0x9bee('0xe'),'port':0x18eb});var io=require(_0x9bee('0xf'))(new Redis(config[_0x9bee('0xc')]));var operators={'equals':function(_0x59c1ec,_0x4d1025){return _0x59c1ec==_0x4d1025;},'not_equals':function(_0x1c1b40,_0x3ca7cd){return _0x1c1b40!=_0x3ca7cd;}};var barAndWebActions=[_0x9bee('0x10'),_0x9bee('0x2'),_0x9bee('0x11')];function Trigger(_0x15ade4){this[_0x9bee('0x12')]=_0x15ade4[_0x9bee('0x12')];this[_0x9bee('0x13')]=_0x15ade4[_0x9bee('0x13')];this[_0x9bee('0x14')]=_0x15ade4[_0x9bee('0x14')];this['templates']=_0x15ade4[_0x9bee('0x15')];this['voiceExtensions']=_0x15ade4[_0x9bee('0x16')];this[_0x9bee('0x17')]=_0x15ade4[_0x9bee('0x17')];this['freshdeskAccounts']=_0x15ade4[_0x9bee('0x18')];this[_0x9bee('0x19')]=_0x15ade4[_0x9bee('0x19')];this['sugarcrmAccounts']=_0x15ade4['sugarcrmAccounts'];this['zohoAccounts']=_0x15ade4[_0x9bee('0x1a')];this['deskAccounts']=_0x15ade4['deskAccounts'];this['vtigerAccounts']=_0x15ade4['vtigerAccounts'];this[_0x9bee('0x1b')]=_0x15ade4['servicenowAccounts'];this[_0x9bee('0x1c')]=_0x15ade4[_0x9bee('0x1c')];this[_0x9bee('0x1d')]={'zendesk':this['zendeskAccounts'],'salesforce':this[_0x9bee('0x19')],'freshdesk':this[_0x9bee('0x18')],'sugarcrm':this[_0x9bee('0x1e')],'zoho':this['zohoAccounts'],'desk':this[_0x9bee('0x1f')],'vtiger':this[_0x9bee('0x20')],'servicenow':this[_0x9bee('0x1b')],'dynamics365':this[_0x9bee('0x1c')]};ami['on'](_0x9bee('0x21'),this[_0x9bee('0x22')][_0x9bee('0x23')](this));ami['on'](_0x9bee('0x24'),this[_0x9bee('0x22')][_0x9bee('0x23')](this));ami['on'](_0x9bee('0x25'),this[_0x9bee('0x22')][_0x9bee('0x23')](this));ami['on'](_0x9bee('0x26'),this['syncCustomEvent'][_0x9bee('0x23')](this));ami['on'](_0x9bee('0x27'),this[_0x9bee('0x22')][_0x9bee('0x23')](this));ami['on'](_0x9bee('0x28'),this[_0x9bee('0x29')]['bind'](this));ami['on'](_0x9bee('0x2a'),this[_0x9bee('0x29')]['bind'](this));ami['on'](_0x9bee('0x2b'),this['syncAgentDial'][_0x9bee('0x23')](this));ami['on'](_0x9bee('0x2c'),this[_0x9bee('0x22')][_0x9bee('0x23')](this));ami['on'](_0x9bee('0x2d'),this[_0x9bee('0x22')][_0x9bee('0x23')](this));ami['on'](_0x9bee('0x2e'),this[_0x9bee('0x22')][_0x9bee('0x23')](this));ami['on'](_0x9bee('0x2f'),this[_0x9bee('0x22')][_0x9bee('0x23')](this));ami['on']('custom:acceptmessage',this[_0x9bee('0x22')][_0x9bee('0x23')](this));ami['on'](_0x9bee('0x30'),this[_0x9bee('0x22')][_0x9bee('0x23')](this));}Trigger[_0x9bee('0x31')][_0x9bee('0x32')]=function(_0x2e2a3f,_0x242369,_0x3fe60c){logger['info'](_0x2e2a3f,_0x242369,JSON[_0x9bee('0x33')](_0x3fe60c));io['to'](_0x2e2a3f)[_0x9bee('0x32')](_0x242369,_0x3fe60c);};Trigger[_0x9bee('0x31')][_0x9bee('0x22')]=function(_0x348591){var _0x3cfc8b=_[_0x9bee('0x34')](_0x348591);this[_0x9bee('0x35')](_0x3cfc8b);};Trigger[_0x9bee('0x31')]['syncAgentDial']=function(_0x4a1c28){if(this[_0x9bee('0x13')][_0x4a1c28[_0x9bee('0x36')]]){this[_0x9bee('0x22')](_0x4a1c28);}};Trigger[_0x9bee('0x31')]['checkTriggers']=function(_0x2ef096){var _0x468bf8;for(var _0x2fcb8e in this['triggers']){if(this['triggers'][_0x9bee('0x37')](_0x2fcb8e)){if(this[_0x9bee('0x12')][_0x2fcb8e][_0x9bee('0x38')]){_0x468bf8=this[_0x9bee('0x39')](this[_0x9bee('0x12')][_0x2fcb8e],_0x2ef096);if(_0x468bf8){_[_0x9bee('0x3a')](_0x2ef096,_0x2ef096[_0x9bee('0x3b')]);for(var _0x48742e=0x0,_0x3ef190,_0x5b46ef,_0x6788ae;_0x48742e<this[_0x9bee('0x12')][_0x2fcb8e][_0x9bee('0x3c')][_0x9bee('0x3d')];_0x48742e+=0x1){_0x3ef190=this[_0x9bee('0x12')][_0x2fcb8e][_0x9bee('0x3c')][_0x48742e];if(this[_0x9bee('0x13')][_0x2ef096[_0x9bee('0x36')]]){switch(_0x3ef190[_0x9bee('0x3e')][_0x9bee('0x3f')]()){case _0x9bee('0x40'):break;case _0x9bee('0x41'):case _0x9bee('0x42'):var _0x307d77={};switch(barAndWebActions[_0x3ef190[_0x9bee('0x43')]]){case _0x9bee('0x10'):_0x307d77[_0x9bee('0x44')]=_0x3ef190[_0x9bee('0x45')];_0x307d77[_0x9bee('0x46')]=this[_0x9bee('0x15')][_0x3ef190[_0x9bee('0x45')]]?Mustache[_0x9bee('0x47')](this['templates'][_0x3ef190[_0x9bee('0x45')]][_0x9bee('0x46')],_0x2ef096):'template\x20not\x20found';break;case _0x9bee('0x2'):_0x307d77[_0x9bee('0x48')]=this[_0x9bee('0x49')](_0x3ef190[_0x9bee('0x45')],_0x2ef096,_[_0x9bee('0x4a')](_0x3ef190[_0x9bee('0x4b')])?!![]:parseInt(_0x3ef190[_0x9bee('0x4b')],0xa));if(_[_0x9bee('0x4a')](_0x3ef190[_0x9bee('0x4c')])){_0x307d77[_0x9bee('0x4d')]='0';}else{_0x307d77[_0x9bee('0x4e')]=_0x3ef190[_0x9bee('0x4c')];_0x307d77[_0x9bee('0x4f')]=_[_0x9bee('0x4a')](_0x3ef190[_0x9bee('0x50')])?'800':_0x3ef190['data5'];_0x307d77['windowHeight']=_[_0x9bee('0x4a')](_0x3ef190[_0x9bee('0x51')])?'600':_0x3ef190[_0x9bee('0x51')];}break;case'winapp':_0x307d77[_0x9bee('0x52')]=_0x3ef190[_0x9bee('0x45')]?Mustache['render'](_0x3ef190[_0x9bee('0x45')],_0x2ef096):'';_0x307d77[_0x9bee('0x53')]=_0x3ef190[_0x9bee('0x4b')]?Mustache[_0x9bee('0x47')](_0x3ef190['data3'],_0x2ef096):'';break;}this[_0x9bee('0x32')](util[_0x9bee('0x54')](_0x9bee('0x55'),this[_0x9bee('0x13')][_0x2ef096['interface']][_0x9bee('0x56')]),util[_0x9bee('0x54')]('trigger:%s:%s',_0x3ef190[_0x9bee('0x3e')][_0x9bee('0x3f')](),barAndWebActions[_0x3ef190['data1']]),_['merge'](_0x307d77,_0x2ef096));break;case _0x9bee('0x57'):this[_0x9bee('0x32')](util[_0x9bee('0x54')](_0x9bee('0x55'),this[_0x9bee('0x13')][_0x2ef096[_0x9bee('0x36')]][_0x9bee('0x56')]),util[_0x9bee('0x54')](_0x9bee('0x58'),_0x3ef190['action'][_0x9bee('0x3f')]()),_[_0x9bee('0x3a')]({'ProjectId':parseInt(_0x3ef190[_0x9bee('0x43')],0xa)},_0x2ef096));break;default:this['emit'](util[_0x9bee('0x54')]('user:%s',this['agents'][_0x2ef096[_0x9bee('0x36')]]['name']),util['format'](_0x9bee('0x58'),_0x3ef190[_0x9bee('0x3e')]['toLowerCase']()),_['merge']({},_0x3ef190,_0x2ef096));}}switch(_0x3ef190[_0x9bee('0x3e')][_0x9bee('0x3f')]()){case'contactmanager':cmContact[_0x9bee('0x59')](this['agents'][_0x2ef096[_0x9bee('0x36')]],_0x3ef190,_0x2ef096,cmContactRpc);break;case _0x9bee('0x5a'):integration[_0x9bee('0x59')](_0x3ef190,_0x2ef096,this[_0x9bee('0x1d')],this['agents'][_0x2ef096[_0x9bee('0x36')]],this[_0x9bee('0x14')][_0x2ef096[_0x9bee('0x5b')]],this['voiceExtensions'][_0x2ef096[_0x9bee('0x5c')]]);break;case'urlforward':urlforward['exec'](_0x3ef190,_0x2ef096);break;case _0x9bee('0x5d'):script[_0x9bee('0x59')](_0x3ef190,_0x2ef096);break;}}}}}}};Trigger[_0x9bee('0x31')][_0x9bee('0x49')]=function(_0x4862f8,_0x1bdc60,_0xe1bd47){var _0x302621=url[_0x9bee('0x5e')](Mustache[_0x9bee('0x47')](_0x4862f8,_0x1bdc60),!![]);if(_0xe1bd47){_[_0x9bee('0x3a')](_0x302621['query'],_0x1bdc60);}delete _0x302621[_0x9bee('0x5f')];return url['format'](_0x302621);};Trigger[_0x9bee('0x31')][_0x9bee('0x39')]=function(_0x349345,_0x5be560){var _0x1b29fb=!![],_0x550105=!![];if(_0x349345[_0x9bee('0x60')][_0x9bee('0x3d')]){_0x1b29fb=_[_0x9bee('0x61')](_0x349345[_0x9bee('0x60')],this[_0x9bee('0x62')](_0x5be560,_0x349345[_0x9bee('0x63')]));}if(_0x349345[_0x9bee('0x64')][_0x9bee('0x3d')]){_0x550105=_[_0x9bee('0x65')](_0x349345[_0x9bee('0x64')],this[_0x9bee('0x62')](_0x5be560,_0x349345[_0x9bee('0x63')]));}return _0x1b29fb&&_0x550105;};Trigger[_0x9bee('0x31')][_0x9bee('0x62')]=function(_0x548e48,_0x97c506){return function(_0x2e694a){switch(_0x2e694a['field']){case _0x9bee('0x66'):if(_0x548e48['channel']===_0x97c506){if(_0x97c506===_0x9bee('0x67')){return _0x548e48[_0x9bee('0x68')]?operators[_0x2e694a[_0x9bee('0x69')]](Number(_0x2e694a['value']),_0x548e48['ChatWebsiteId']):![];}else{return _0x548e48[_[_0x9bee('0x6a')](_0x97c506)+'AccountId']?operators[_0x2e694a['operator']](Number(_0x2e694a['value']),_0x548e48[_[_0x9bee('0x6a')](_0x97c506)+'AccountId']):![];}}break;case'interaction':case _0x9bee('0x6b'):if(_0x548e48[_0x9bee('0x63')]===_0x97c506){return _0x548e48['event']?operators[_0x2e694a[_0x9bee('0x69')]](_0x2e694a[_0x9bee('0x6c')],_0x548e48[_0x9bee('0x6d')]):![];}break;case _0x9bee('0x5b'):return _0x548e48[_0x9bee('0x5b')]?operators[_0x2e694a[_0x9bee('0x69')]](_0x2e694a[_0x9bee('0x6c')],_0x548e48[_0x9bee('0x5b')]):![];case'agent':return _0x548e48[_0x9bee('0x6e')]?operators[_0x2e694a['operator']](_0x2e694a[_0x9bee('0x6c')],_0x548e48['membername']):![];case _0x9bee('0x6f'):return _0x548e48['lastevent']?operators[_0x2e694a[_0x9bee('0x69')]](_0x2e694a[_0x9bee('0x6c')],_0x548e48[_0x9bee('0x6f')]):![];case _0x9bee('0x5c'):return _0x548e48[_0x9bee('0x5c')]?operators[_0x2e694a[_0x9bee('0x69')]](_0x2e694a[_0x9bee('0x6c')],_0x548e48['routeId']):![];}return![];};};module[_0x9bee('0x70')]=Trigger;
\ No newline at end of file
index 2d50654..04de2ab 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf999=['find','_embedded','entries','Agent\x20found!','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','format','debug','[HTTP]','stringify','GET','authType','basic','%s:%s','username','password','token','%s/token:%s','Basic\x20%s','toString','base64','Searching\x20enduser\x20with\x20phone','%s/customers/search','total_entries','Enduser\x20found!','%s/customers','POST','length','map','string','nameField','customField','toLowerCase','content','type','custom_fields','variable','variableName','idField','customVariable','Variable','name','priority','Creating\x20new\x20ticket...','merge','getString','Subjects','phone','new','xCALLY','Motion','CTI','concat','Tags','Descriptions','/api/v2/users/%d','user','Fields','%s/customers/%d/cases','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','recordingURL','Authorization','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Ticket\x20ID\x20is:','integrationTab','Displaying\x20ticket\x20to\x20agent...','trigger:desk:display','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','https://xcally.desk.com/web/agent/case/%d','error','Desk\x20account\x20type\x20not\x20recognized','outbound','recordingFormat','[OUTBOUND]','destcalleridname','destcalleridnum','Ticket\x20created!','%s/agent/tickets/%s','catch','abandoned','[ABANDONED]','The\x20Enduser\x20ID\x20is:','lodash','request-promise','md5','util','ioredis','../../../../config/environment','../../../../config/logger','desk','redis','defaults','socket.io-emitter','emit','application/json','validateEmail','info','Getting\x20agent\x20with\x20email','%s/users','remoteUri','then'];(function(_0x385ee2,_0xc1d73d){var _0x39c093=function(_0x59a148){while(--_0x59a148){_0x385ee2['push'](_0x385ee2['shift']());}};_0x39c093(++_0xc1d73d);}(_0xf999,0x143));var _0x9f99=function(_0x542cbc,_0x86b409){_0x542cbc=_0x542cbc-0x0;var _0x1e83c0=_0xf999[_0x542cbc];return _0x1e83c0;};'use strict';var _=require(_0x9f99('0x0'));var rp=require(_0x9f99('0x1'));var md5=require(_0x9f99('0x2'));var util=require(_0x9f99('0x3'));var Redis=require(_0x9f99('0x4'));var intUtil=require('./util');var config=require(_0x9f99('0x5'));var logger=require(_0x9f99('0x6'))(_0x9f99('0x7'));config[_0x9f99('0x8')]=_[_0x9f99('0x9')](config[_0x9f99('0x8')],{'host':'localhost','port':0x18eb});var io=require(_0x9f99('0xa'))(new Redis(config[_0x9f99('0x8')]));function emit(_0x8d86d5,_0x18e115,_0x186054){io['to'](_0x8d86d5)[_0x9f99('0xb')](_0x18e115,_0x186054);}var headers={'Content-Type':_0x9f99('0xc'),'Accept':_0x9f99('0xc')};function getUser(_0x284346,_0x8f7985){if(intUtil[_0x9f99('0xd')](_0x8f7985)===!![]){logger[_0x9f99('0xe')](_0x9f99('0xf'),_0x8f7985);return request({'uri':util['format'](_0x9f99('0x10'),_0x284346[_0x9f99('0x11')])})[_0x9f99('0x12')](function(_0x549d90){if(_0x549d90['total_entries']){return _[_0x9f99('0x13')](_0x549d90[_0x9f99('0x14')][_0x9f99('0x15')],{'email':_0x8f7985});}})[_0x9f99('0x12')](function(_0x26a74d){if(_0x26a74d){logger[_0x9f99('0xe')](_0x9f99('0x16'));return _0x26a74d;}else{logger[_0x9f99('0xe')](_0x9f99('0x17'));return request({'uri':util['format'](_0x9f99('0x18'),_0x284346[_0x9f99('0x11')])});}});}else{logger[_0x9f99('0xe')](_0x9f99('0x19'));return request({'uri':util[_0x9f99('0x1a')](_0x9f99('0x18'),_0x284346[_0x9f99('0x11')])});}}function request(_0x310824){logger[_0x9f99('0x1b')](_0x9f99('0x1c'),JSON[_0x9f99('0x1d')](_0x310824));return rp(_[_0x9f99('0x9')](_0x310824,{'method':_0x9f99('0x1e'),'headers':headers,'json':!![]}));}function getAuth(_0x582292){var _0x11fd48;if(_0x582292[_0x9f99('0x1f')]===_0x9f99('0x20')){_0x11fd48=util[_0x9f99('0x1a')](_0x9f99('0x21'),_0x582292[_0x9f99('0x22')],_0x582292[_0x9f99('0x23')]);}else if(_0x582292[_0x9f99('0x1f')]===_0x9f99('0x24')){_0x11fd48=util['format'](_0x9f99('0x25'),_0x582292[_0x9f99('0x22')],_0x582292[_0x9f99('0x24')]);}return util[_0x9f99('0x1a')](_0x9f99('0x26'),new Buffer(_0x11fd48)[_0x9f99('0x27')](_0x9f99('0x28')));}function getEndUser(_0x26411e,_0x2679c1,_0x3fe6b1){logger[_0x9f99('0xe')](_0x9f99('0x29'),_0x3fe6b1);return request({'uri':util[_0x9f99('0x1a')](_0x9f99('0x2a'),_0x26411e[_0x9f99('0x11')]),'qs':{'phone':_0x3fe6b1}})[_0x9f99('0x12')](function(_0x48aa34){if(_0x48aa34[_0x9f99('0x2b')]){logger['info'](_0x9f99('0x2c'));return _0x48aa34[_0x9f99('0x14')]['entries'][0x0];}else{logger['info']('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util[_0x9f99('0x1a')](_0x9f99('0x2d'),_0x26411e[_0x9f99('0x11')]),'method':_0x9f99('0x2e'),'body':{'first_name':_0x2679c1,'title':_0x2679c1,'phone_numbers':[{'type':'work','value':_0x3fe6b1}]}});}});}function getTags(_0x3620a8,_0x5a83f3){var _0x55ae17=[];if(_0x3620a8&&_0x3620a8[_0x9f99('0x2f')]>0x0){_0x55ae17=_[_0x9f99('0x30')](_0x3620a8,_0x5a83f3);}return _0x55ae17;}function getCustomFields(_0x222cbe,_0xd8d95){var _0x565616=[];var _0x46cf32={'custom_fields':{}};if(_0x222cbe[_0x9f99('0x2f')]>0x0){_['forEach'](_0x222cbe,function(_0xf19e68){if(_0xf19e68['type']===_0x9f99('0x31')&&_0xf19e68[_0x9f99('0x32')]&&!_0xf19e68[_0x9f99('0x33')]){_0x46cf32[_0xf19e68['nameField'][_0x9f99('0x34')]()]=_0xf19e68[_0x9f99('0x35')][_0x9f99('0x27')]();}else if(_0xf19e68[_0x9f99('0x36')]===_0x9f99('0x31')&&_0xf19e68['idField']&&_0xf19e68[_0x9f99('0x33')]){_0x46cf32[_0x9f99('0x37')][_0xf19e68['idField']]=_0xf19e68['content'][_0x9f99('0x27')]();}else if(_0xf19e68['type']===_0x9f99('0x38')&&_0xf19e68[_0x9f99('0x39')]&&_0xf19e68['idField']&&_0xf19e68['customField']){_0xd8d95[_0xf19e68[_0x9f99('0x39')]]&&(_0x46cf32[_0x9f99('0x37')][_0xf19e68[_0x9f99('0x3a')]]=_0xd8d95[_0xf19e68[_0x9f99('0x39')]][_0x9f99('0x27')]());}else if(_0xf19e68['type']===_0x9f99('0x3b')&&_0xf19e68[_0x9f99('0x3c')]&&_0xf19e68[_0x9f99('0x3c')]['name']&&_0xf19e68['idField']&&_0xf19e68[_0x9f99('0x33')]){_0xd8d95[_0xf19e68['Variable'][_0x9f99('0x3d')][_0x9f99('0x34')]()]&&(_0x46cf32[_0x9f99('0x37')][_0xf19e68['idField']]=_0xd8d95[_0xf19e68[_0x9f99('0x3c')]['name'][_0x9f99('0x34')]()][_0x9f99('0x27')]());}});}if(_0x46cf32[_0x9f99('0x3e')]){_0x46cf32[_0x9f99('0x3e')]=Number(_0x46cf32[_0x9f99('0x3e')]);}return _0x46cf32;}function getTicket(_0x5fed0d,_0x4abf7a,_0x4eb3bb,_0x5ee1d0,_0x31351d){logger[_0x9f99('0xe')](_0x9f99('0x3f'));var _0x3250f6=_[_0x9f99('0x40')]({'subject':intUtil[_0x9f99('0x41')](_0x5ee1d0[_0x9f99('0x42')],_0x31351d,'\x20'),'type':_0x9f99('0x43'),'status':_0x9f99('0x44'),'labels':[_0x9f99('0x45'),_0x9f99('0x46'),_0x9f99('0x47')][_0x9f99('0x48')](getTags(_0x5ee1d0[_0x9f99('0x49')],'name')),'description':intUtil['getString'](_0x5ee1d0[_0x9f99('0x4a')],_0x31351d,'\x0a'),'_links':{'assigned_user':{'href':util['format'](_0x9f99('0x4b'),_0x4abf7a['id']),'class':_0x9f99('0x4c')}},'message':{'direction':'in','body':intUtil[_0x9f99('0x41')](_0x5ee1d0[_0x9f99('0x4a')],_0x31351d,'\x0a')}},getCustomFields(_0x5ee1d0[_0x9f99('0x4d')],_0x31351d));return request({'uri':util[_0x9f99('0x1a')](_0x9f99('0x4e'),_0x5fed0d['remoteUri'],_0x4eb3bb['id']),'method':_0x9f99('0x2e'),'body':_0x3250f6});}exports[_0x9f99('0x4f')]=function(_0x53842a,_0x306bcd,_0x42036b,_0x5359d3,_0x483ffe,_0x3e66a0){var _0x3de987,_0x15e11d;_0x3e66a0[_0x9f99('0x11')]=intUtil[_0x9f99('0x50')](_0x3e66a0[_0x9f99('0x11')]);_0x3e66a0[_0x9f99('0x51')]=intUtil[_0x9f99('0x50')](_0x3e66a0[_0x9f99('0x51')]);if(_0x483ffe&&_0x483ffe[_0x9f99('0x52')]){logger[_0x9f99('0xe')](_0x9f99('0x53'),_0x9f99('0x54'));_0x306bcd['recordingURL']=util[_0x9f99('0x1a')](_0x9f99('0x55'),_0x3e66a0['serverUrl'],_0x306bcd[_0x9f99('0x56')],md5(_0x306bcd[_0x9f99('0x56')]));}else{_0x306bcd[_0x9f99('0x57')]='';}headers[_0x9f99('0x58')]=getAuth(_0x3e66a0);return getUser(_0x3e66a0,_0x5359d3['email'])[_0x9f99('0x12')](function(_0xe438c1){_0x3de987=_0xe438c1;logger[_0x9f99('0xe')](_0x9f99('0x59'),_0x3de987['id']);return getEndUser(_0x3e66a0,_0x306bcd[_0x9f99('0x5a')],_0x306bcd[_0x9f99('0x5b')]);})['then'](function(_0x2d9fce){_0x15e11d=_0x2d9fce;logger[_0x9f99('0xe')]('The\x20Enduser\x20ID\x20is:',_0x15e11d['id']);return getTicket(_0x3e66a0,_0x3de987,_0x15e11d,_0x42036b,_0x306bcd);})[_0x9f99('0x12')](function(_0x2be345){if(_0x2be345){logger[_0x9f99('0xe')]('Ticket\x20created!');logger[_0x9f99('0xe')](_0x9f99('0x5c'),_0x2be345['id']);switch(_0x3e66a0[_0x9f99('0x36')]){case _0x9f99('0x5d'):logger[_0x9f99('0xe')](_0x9f99('0x53'),_0x9f99('0x5e'));emit(util[_0x9f99('0x1a')]('user:%s',_0x5359d3[_0x9f99('0x3d')]),_0x9f99('0x5f'),{'recordId':_0x2be345['id']});break;case _0x9f99('0x60'):logger[_0x9f99('0xe')]('[QUEUE]',_0x9f99('0x61'));emit(util[_0x9f99('0x1a')](_0x9f99('0x62'),_0x5359d3[_0x9f99('0x3d')]),_0x9f99('0x63'),{'uri':util[_0x9f99('0x1a')](_0x9f99('0x64'),_0x2be345['id'])});break;default:logger[_0x9f99('0x65')](_0x9f99('0x53'),_0x9f99('0x66'));}}})['catch'](function(_0x10674f){console[_0x9f99('0x65')](_0x10674f);logger[_0x9f99('0x65')](_0x9f99('0x53'),JSON['stringify'](_0x10674f));});};exports[_0x9f99('0x67')]=function(_0x5c3641,_0x8d9995,_0x3fe640,_0x193959,_0x4ae948,_0x5881d2,_0x498c71){var _0x5c3f2f,_0x591b96;_0x5881d2[_0x9f99('0x11')]=intUtil[_0x9f99('0x50')](_0x5881d2[_0x9f99('0x11')]);_0x5881d2[_0x9f99('0x51')]=intUtil['stripTrailingSlash'](_0x5881d2['serverUrl']);if(_0x498c71&&_0x498c71[_0x9f99('0x68')]&&_0x498c71[_0x9f99('0x68')]!=='none'){logger[_0x9f99('0xe')](_0x9f99('0x69'),_0x9f99('0x54'));_0x8d9995[_0x9f99('0x57')]=util[_0x9f99('0x1a')](_0x9f99('0x55'),_0x5881d2['serverUrl'],_0x8d9995['uniqueid'],md5(_0x8d9995[_0x9f99('0x56')]));}headers['Authorization']=getAuth(_0x5881d2);return getUser(_0x5881d2,_0x193959['email'])[_0x9f99('0x12')](function(_0x39de35){_0x5c3f2f=_0x39de35;logger[_0x9f99('0xe')]('The\x20User\x20ID\x20is:',_0x5c3f2f['id']);return getEndUser(_0x5881d2,_0x8d9995[_0x9f99('0x6a')],_0x8d9995[_0x9f99('0x6b')]);})[_0x9f99('0x12')](function(_0x1243bb){_0x591b96=_0x1243bb;logger[_0x9f99('0xe')]('The\x20Enduser\x20ID\x20is:',_0x591b96['id']);return getTicket(_0x5881d2,_0x5c3f2f,_0x591b96,_0x3fe640,_0x8d9995);})[_0x9f99('0x12')](function(_0x189f82){if(_0x189f82){logger[_0x9f99('0xe')](_0x9f99('0x6c'));logger[_0x9f99('0xe')](_0x9f99('0x5c'),_0x189f82['id']);switch(_0x5881d2[_0x9f99('0x36')]){case _0x9f99('0x5d'):logger[_0x9f99('0xe')](_0x9f99('0x53'),_0x9f99('0x5e'));emit(util[_0x9f99('0x1a')](_0x9f99('0x62'),_0x193959[_0x9f99('0x3d')]),'trigger:desk:display',{'recordId':_0x189f82['id']});break;case _0x9f99('0x60'):logger[_0x9f99('0xe')]('[QUEUE]',_0x9f99('0x61'));emit(util[_0x9f99('0x1a')](_0x9f99('0x62'),_0x193959['name']),_0x9f99('0x63'),{'uri':util[_0x9f99('0x1a')](_0x9f99('0x6d'),_0x5881d2[_0x9f99('0x11')],_0x189f82['id'])});break;default:logger['error'](_0x9f99('0x69'),_0x9f99('0x66'));}}})[_0x9f99('0x6e')](function(_0x4749a5){logger[_0x9f99('0x65')](_0x9f99('0x69'),JSON[_0x9f99('0x1d')](_0x4749a5));});};exports[_0x9f99('0x6f')]=function(_0x41932f,_0xa84a60,_0x4c9104,_0x310dd7,_0x1cc367,_0x1bddb5){var _0xd55eea,_0x305911;_0x1bddb5[_0x9f99('0x11')]=intUtil[_0x9f99('0x50')](_0x1bddb5['remoteUri']);_0x1bddb5['serverUrl']=intUtil[_0x9f99('0x50')](_0x1bddb5['serverUrl']);if(_0x1cc367&&_0x1cc367['monitor_format']){logger[_0x9f99('0xe')](_0x9f99('0x70'),_0x9f99('0x54'));_0xa84a60[_0x9f99('0x57')]=util[_0x9f99('0x1a')](_0x9f99('0x55'),_0x1bddb5['serverUrl'],_0xa84a60['uniqueid'],md5(_0xa84a60[_0x9f99('0x56')]));}else{_0xa84a60['recordingURL']='';}headers[_0x9f99('0x58')]=getAuth(_0x1bddb5);return getUser(_0x1bddb5)[_0x9f99('0x12')](function(_0xac5f2b){_0xd55eea=_0xac5f2b;logger[_0x9f99('0xe')](_0x9f99('0x59'),_0xd55eea['id']);return getEndUser(_0x1bddb5,_0xa84a60[_0x9f99('0x5a')],_0xa84a60[_0x9f99('0x5b')]);})[_0x9f99('0x12')](function(_0x535056){_0x305911=_0x535056;logger[_0x9f99('0xe')](_0x9f99('0x71'),_0x305911['id']);return getTicket(_0x1bddb5,_0xd55eea,_0x305911,_0x4c9104,_0xa84a60);})[_0x9f99('0x12')](function(_0x1df72a){if(_0x1df72a){logger[_0x9f99('0xe')](_0x9f99('0x6c'));logger['info'](_0x9f99('0x5c'),_0x1df72a['id']);}})['catch'](function(_0xff0ab1){logger[_0x9f99('0x65')](_0x9f99('0x70'),JSON[_0x9f99('0x1d')](_0xff0ab1));});};
\ No newline at end of file
+var _0x7671=['name','priority','Creating\x20new\x20ticket...','merge','Subjects','new','xCALLY','Motion','CTI','concat','Tags','Descriptions','/api/v2/users/%d','user','getString','Fields','%s/customers/%d/cases','queue','stripTrailingSlash','serverUrl','[QUEUE]','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','Authorization','email','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','integrationTab','trigger:desk:display','newTab','user:%s','trigger:browser:url','https://xcally.desk.com/web/agent/case/%d','Desk\x20account\x20type\x20not\x20recognized','catch','error','outbound','recordingFormat','none','Recording\x20is\x20enabled!','uniqueid','The\x20User\x20ID\x20is:','destcalleridname','destcalleridnum','Displaying\x20ticket\x20to\x20agent...','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','%s/agent/tickets/%s','abandoned','[ABANDONED]','lodash','md5','util','ioredis','./util','../../../../config/environment','desk','redis','defaults','socket.io-emitter','emit','application/json','info','Getting\x20agent\x20with\x20email','format','%s/users','remoteUri','then','_embedded','entries','Agent\x20found!','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','debug','stringify','GET','authType','basic','%s:%s','token','username','Basic\x20%s','toString','Searching\x20enduser\x20with\x20phone','%s/customers/search','total_entries','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/customers','POST','work','length','map','forEach','type','string','customField','nameField','toLowerCase','content','custom_fields','idField','variable','variableName','customVariable','Variable'];(function(_0x458e3e,_0x576c7f){var _0x4bb0ee=function(_0x1ae0b1){while(--_0x1ae0b1){_0x458e3e['push'](_0x458e3e['shift']());}};_0x4bb0ee(++_0x576c7f);}(_0x7671,0xa1));var _0x1767=function(_0x3f2375,_0x592da7){_0x3f2375=_0x3f2375-0x0;var _0x540804=_0x7671[_0x3f2375];return _0x540804;};'use strict';var _=require(_0x1767('0x0'));var rp=require('request-promise');var md5=require(_0x1767('0x1'));var util=require(_0x1767('0x2'));var Redis=require(_0x1767('0x3'));var intUtil=require(_0x1767('0x4'));var config=require(_0x1767('0x5'));var logger=require('../../../../config/logger')(_0x1767('0x6'));config[_0x1767('0x7')]=_[_0x1767('0x8')](config[_0x1767('0x7')],{'host':'localhost','port':0x18eb});var io=require(_0x1767('0x9'))(new Redis(config[_0x1767('0x7')]));function emit(_0x2375d8,_0x354aa6,_0x413ce7){io['to'](_0x2375d8)[_0x1767('0xa')](_0x354aa6,_0x413ce7);}var headers={'Content-Type':_0x1767('0xb'),'Accept':_0x1767('0xb')};function getUser(_0xae01e9,_0x28ee8c){if(intUtil['validateEmail'](_0x28ee8c)===!![]){logger[_0x1767('0xc')](_0x1767('0xd'),_0x28ee8c);return request({'uri':util[_0x1767('0xe')](_0x1767('0xf'),_0xae01e9[_0x1767('0x10')])})[_0x1767('0x11')](function(_0x22cd29){if(_0x22cd29['total_entries']){return _['find'](_0x22cd29[_0x1767('0x12')][_0x1767('0x13')],{'email':_0x28ee8c});}})['then'](function(_0x59c114){if(_0x59c114){logger[_0x1767('0xc')](_0x1767('0x14'));return _0x59c114;}else{logger[_0x1767('0xc')](_0x1767('0x15'));return request({'uri':util[_0x1767('0xe')](_0x1767('0x16'),_0xae01e9[_0x1767('0x10')])});}});}else{logger[_0x1767('0xc')](_0x1767('0x17'));return request({'uri':util[_0x1767('0xe')]('%s/users/me',_0xae01e9['remoteUri'])});}}function request(_0x561f8a){logger[_0x1767('0x18')]('[HTTP]',JSON[_0x1767('0x19')](_0x561f8a));return rp(_['defaults'](_0x561f8a,{'method':_0x1767('0x1a'),'headers':headers,'json':!![]}));}function getAuth(_0x528092){var _0x39e9b7;if(_0x528092[_0x1767('0x1b')]===_0x1767('0x1c')){_0x39e9b7=util[_0x1767('0xe')](_0x1767('0x1d'),_0x528092['username'],_0x528092['password']);}else if(_0x528092[_0x1767('0x1b')]===_0x1767('0x1e')){_0x39e9b7=util[_0x1767('0xe')]('%s/token:%s',_0x528092[_0x1767('0x1f')],_0x528092[_0x1767('0x1e')]);}return util[_0x1767('0xe')](_0x1767('0x20'),new Buffer(_0x39e9b7)[_0x1767('0x21')]('base64'));}function getEndUser(_0xc4660,_0x37b625,_0x1d99e4){logger[_0x1767('0xc')](_0x1767('0x22'),_0x1d99e4);return request({'uri':util[_0x1767('0xe')](_0x1767('0x23'),_0xc4660[_0x1767('0x10')]),'qs':{'phone':_0x1d99e4}})[_0x1767('0x11')](function(_0x172e1c){if(_0x172e1c[_0x1767('0x24')]){logger[_0x1767('0xc')](_0x1767('0x25'));return _0x172e1c[_0x1767('0x12')][_0x1767('0x13')][0x0];}else{logger['info'](_0x1767('0x26'));return request({'uri':util['format'](_0x1767('0x27'),_0xc4660[_0x1767('0x10')]),'method':_0x1767('0x28'),'body':{'first_name':_0x37b625,'title':_0x37b625,'phone_numbers':[{'type':_0x1767('0x29'),'value':_0x1d99e4}]}});}});}function getTags(_0x3b9c7d,_0xc5d622){var _0x59964c=[];if(_0x3b9c7d&&_0x3b9c7d[_0x1767('0x2a')]>0x0){_0x59964c=_[_0x1767('0x2b')](_0x3b9c7d,_0xc5d622);}return _0x59964c;}function getCustomFields(_0x28f5f1,_0x16e058){var _0x3b9038=[];var _0x4a79c3={'custom_fields':{}};if(_0x28f5f1[_0x1767('0x2a')]>0x0){_[_0x1767('0x2c')](_0x28f5f1,function(_0x6ddcea){if(_0x6ddcea[_0x1767('0x2d')]===_0x1767('0x2e')&&_0x6ddcea['nameField']&&!_0x6ddcea[_0x1767('0x2f')]){_0x4a79c3[_0x6ddcea[_0x1767('0x30')][_0x1767('0x31')]()]=_0x6ddcea[_0x1767('0x32')][_0x1767('0x21')]();}else if(_0x6ddcea[_0x1767('0x2d')]===_0x1767('0x2e')&&_0x6ddcea['idField']&&_0x6ddcea['customField']){_0x4a79c3[_0x1767('0x33')][_0x6ddcea[_0x1767('0x34')]]=_0x6ddcea[_0x1767('0x32')][_0x1767('0x21')]();}else if(_0x6ddcea[_0x1767('0x2d')]===_0x1767('0x35')&&_0x6ddcea[_0x1767('0x36')]&&_0x6ddcea[_0x1767('0x34')]&&_0x6ddcea['customField']){_0x16e058[_0x6ddcea[_0x1767('0x36')]]&&(_0x4a79c3['custom_fields'][_0x6ddcea['idField']]=_0x16e058[_0x6ddcea['variableName']][_0x1767('0x21')]());}else if(_0x6ddcea[_0x1767('0x2d')]===_0x1767('0x37')&&_0x6ddcea[_0x1767('0x38')]&&_0x6ddcea[_0x1767('0x38')][_0x1767('0x39')]&&_0x6ddcea['idField']&&_0x6ddcea[_0x1767('0x2f')]){_0x16e058[_0x6ddcea[_0x1767('0x38')][_0x1767('0x39')]['toLowerCase']()]&&(_0x4a79c3[_0x1767('0x33')][_0x6ddcea[_0x1767('0x34')]]=_0x16e058[_0x6ddcea[_0x1767('0x38')][_0x1767('0x39')][_0x1767('0x31')]()][_0x1767('0x21')]());}});}if(_0x4a79c3[_0x1767('0x3a')]){_0x4a79c3[_0x1767('0x3a')]=Number(_0x4a79c3['priority']);}return _0x4a79c3;}function getTicket(_0x40b7c0,_0x4e3e79,_0x1ef220,_0x168631,_0x39dbe9){logger[_0x1767('0xc')](_0x1767('0x3b'));var _0x37f1ca=_[_0x1767('0x3c')]({'subject':intUtil['getString'](_0x168631[_0x1767('0x3d')],_0x39dbe9,'\x20'),'type':'phone','status':_0x1767('0x3e'),'labels':[_0x1767('0x3f'),_0x1767('0x40'),_0x1767('0x41')][_0x1767('0x42')](getTags(_0x168631[_0x1767('0x43')],_0x1767('0x39'))),'description':intUtil['getString'](_0x168631[_0x1767('0x44')],_0x39dbe9,'\x0a'),'_links':{'assigned_user':{'href':util['format'](_0x1767('0x45'),_0x4e3e79['id']),'class':_0x1767('0x46')}},'message':{'direction':'in','body':intUtil[_0x1767('0x47')](_0x168631[_0x1767('0x44')],_0x39dbe9,'\x0a')}},getCustomFields(_0x168631[_0x1767('0x48')],_0x39dbe9));return request({'uri':util[_0x1767('0xe')](_0x1767('0x49'),_0x40b7c0[_0x1767('0x10')],_0x1ef220['id']),'method':_0x1767('0x28'),'body':_0x37f1ca});}exports[_0x1767('0x4a')]=function(_0x453971,_0x2d39cb,_0x1c3ffd,_0x4cfe43,_0x870844,_0x37e0e4){var _0x292dd5,_0x5a2dfd;_0x37e0e4[_0x1767('0x10')]=intUtil[_0x1767('0x4b')](_0x37e0e4[_0x1767('0x10')]);_0x37e0e4['serverUrl']=intUtil[_0x1767('0x4b')](_0x37e0e4[_0x1767('0x4c')]);if(_0x870844&&_0x870844['monitor_format']){logger[_0x1767('0xc')](_0x1767('0x4d'),'Recording\x20is\x20enabled!');_0x2d39cb[_0x1767('0x4e')]=util[_0x1767('0xe')](_0x1767('0x4f'),_0x37e0e4['serverUrl'],_0x2d39cb['uniqueid'],md5(_0x2d39cb['uniqueid']));}else{_0x2d39cb[_0x1767('0x4e')]='';}headers[_0x1767('0x50')]=getAuth(_0x37e0e4);return getUser(_0x37e0e4,_0x4cfe43[_0x1767('0x51')])[_0x1767('0x11')](function(_0x39be13){_0x292dd5=_0x39be13;logger['info']('The\x20User\x20ID\x20is:',_0x292dd5['id']);return getEndUser(_0x37e0e4,_0x2d39cb[_0x1767('0x52')],_0x2d39cb[_0x1767('0x53')]);})[_0x1767('0x11')](function(_0x11333d){_0x5a2dfd=_0x11333d;logger['info'](_0x1767('0x54'),_0x5a2dfd['id']);return getTicket(_0x37e0e4,_0x292dd5,_0x5a2dfd,_0x1c3ffd,_0x2d39cb);})[_0x1767('0x11')](function(_0x44a702){if(_0x44a702){logger['info'](_0x1767('0x55'));logger[_0x1767('0xc')](_0x1767('0x56'),_0x44a702['id']);switch(_0x37e0e4[_0x1767('0x2d')]){case _0x1767('0x57'):logger[_0x1767('0xc')](_0x1767('0x4d'),'Displaying\x20ticket\x20to\x20agent...');emit(util['format']('user:%s',_0x4cfe43[_0x1767('0x39')]),_0x1767('0x58'),{'recordId':_0x44a702['id']});break;case _0x1767('0x59'):logger[_0x1767('0xc')](_0x1767('0x4d'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x1767('0xe')](_0x1767('0x5a'),_0x4cfe43[_0x1767('0x39')]),_0x1767('0x5b'),{'uri':util[_0x1767('0xe')](_0x1767('0x5c'),_0x44a702['id'])});break;default:logger['error']('[QUEUE]',_0x1767('0x5d'));}}})[_0x1767('0x5e')](function(_0x3e6715){console[_0x1767('0x5f')](_0x3e6715);logger['error']('[QUEUE]',JSON[_0x1767('0x19')](_0x3e6715));});};exports[_0x1767('0x60')]=function(_0xe18ab4,_0x2c1674,_0x423855,_0x18a47e,_0x35b9be,_0x5b174f,_0x1d197f){var _0x49541f,_0x294ce9;_0x5b174f[_0x1767('0x10')]=intUtil[_0x1767('0x4b')](_0x5b174f[_0x1767('0x10')]);_0x5b174f[_0x1767('0x4c')]=intUtil[_0x1767('0x4b')](_0x5b174f[_0x1767('0x4c')]);if(_0x1d197f&&_0x1d197f[_0x1767('0x61')]&&_0x1d197f['recordingFormat']!==_0x1767('0x62')){logger['info']('[OUTBOUND]',_0x1767('0x63'));_0x2c1674[_0x1767('0x4e')]=util[_0x1767('0xe')](_0x1767('0x4f'),_0x5b174f[_0x1767('0x4c')],_0x2c1674[_0x1767('0x64')],md5(_0x2c1674[_0x1767('0x64')]));}headers[_0x1767('0x50')]=getAuth(_0x5b174f);return getUser(_0x5b174f,_0x18a47e['email'])[_0x1767('0x11')](function(_0x29e15a){_0x49541f=_0x29e15a;logger[_0x1767('0xc')](_0x1767('0x65'),_0x49541f['id']);return getEndUser(_0x5b174f,_0x2c1674[_0x1767('0x66')],_0x2c1674[_0x1767('0x67')]);})[_0x1767('0x11')](function(_0x59757a){_0x294ce9=_0x59757a;logger[_0x1767('0xc')]('The\x20Enduser\x20ID\x20is:',_0x294ce9['id']);return getTicket(_0x5b174f,_0x49541f,_0x294ce9,_0x423855,_0x2c1674);})[_0x1767('0x11')](function(_0xf6f8b7){if(_0xf6f8b7){logger[_0x1767('0xc')](_0x1767('0x55'));logger[_0x1767('0xc')]('The\x20Ticket\x20ID\x20is:',_0xf6f8b7['id']);switch(_0x5b174f['type']){case'integrationTab':logger[_0x1767('0xc')](_0x1767('0x4d'),_0x1767('0x68'));emit(util[_0x1767('0xe')](_0x1767('0x5a'),_0x18a47e[_0x1767('0x39')]),'trigger:desk:display',{'recordId':_0xf6f8b7['id']});break;case _0x1767('0x59'):logger[_0x1767('0xc')](_0x1767('0x4d'),_0x1767('0x69'));emit(util['format']('user:%s',_0x18a47e['name']),_0x1767('0x5b'),{'uri':util[_0x1767('0xe')](_0x1767('0x6a'),_0x5b174f[_0x1767('0x10')],_0xf6f8b7['id'])});break;default:logger[_0x1767('0x5f')]('[OUTBOUND]',_0x1767('0x5d'));}}})[_0x1767('0x5e')](function(_0x7b76fc){logger[_0x1767('0x5f')]('[OUTBOUND]',JSON['stringify'](_0x7b76fc));});};exports[_0x1767('0x6b')]=function(_0x30fcb1,_0x18a279,_0x107146,_0x2d17ff,_0x4bb074,_0x3dc4f6){var _0x1b664a,_0x119083;_0x3dc4f6[_0x1767('0x10')]=intUtil[_0x1767('0x4b')](_0x3dc4f6['remoteUri']);_0x3dc4f6[_0x1767('0x4c')]=intUtil['stripTrailingSlash'](_0x3dc4f6[_0x1767('0x4c')]);if(_0x4bb074&&_0x4bb074['monitor_format']){logger[_0x1767('0xc')](_0x1767('0x6c'),_0x1767('0x63'));_0x18a279['recordingURL']=util[_0x1767('0xe')](_0x1767('0x4f'),_0x3dc4f6[_0x1767('0x4c')],_0x18a279[_0x1767('0x64')],md5(_0x18a279[_0x1767('0x64')]));}else{_0x18a279['recordingURL']='';}headers['Authorization']=getAuth(_0x3dc4f6);return getUser(_0x3dc4f6)[_0x1767('0x11')](function(_0x1a6b9b){_0x1b664a=_0x1a6b9b;logger[_0x1767('0xc')](_0x1767('0x65'),_0x1b664a['id']);return getEndUser(_0x3dc4f6,_0x18a279['calleridname'],_0x18a279[_0x1767('0x53')]);})[_0x1767('0x11')](function(_0x30de2f){_0x119083=_0x30de2f;logger[_0x1767('0xc')](_0x1767('0x54'),_0x119083['id']);return getTicket(_0x3dc4f6,_0x1b664a,_0x119083,_0x107146,_0x18a279);})[_0x1767('0x11')](function(_0x7c6907){if(_0x7c6907){logger[_0x1767('0xc')]('Ticket\x20created!');logger[_0x1767('0xc')](_0x1767('0x56'),_0x7c6907['id']);}})['catch'](function(_0x4f597d){logger[_0x1767('0x5f')](_0x1767('0x6c'),JSON[_0x1767('0x19')](_0x4f597d));});};
\ No newline at end of file
index 5ede81c..bbedf37 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9956=['error',']\x20Wrong\x20credentials!','message','GET','Bearer\x20','4.0','then','value','isNil','validateEmail','email','userEmail','length','internalemailaddress','isdisabled','info','toUpperCase','userId','systemuserid',']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','outbound','destcalleridnum','/systemusers(','headers','odata-entityid','substring','lastIndexOf','enduserId','toLowerCase','telephone1','contactid',']\x20Enduser\x20created!',']\x20Enduser\x20Created!','type','customField','indexOf','content','ticketType','assign','getString','Subjects','phonecall','phonecalls','calleridnum','Descriptions','/contacts(','callDirection','queue','Fields','ticketId','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','user:%s','trigger:browser:url','stripTrailingSlash','serverUrl','abandoned','format','%s/api/data/v9.0/','https://login.microsoftonline.com/%s/oauth2/token','tenantId','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','recordingFormat','none','[OUTBOUND]',']\x20The\x20User\x20ID\x20is:',']\x20The\x20%s\x20ID\x20is:\x20%s',']\x20Call\x20direction:\x20%s',']\x20Error\x20running\x20Dynamics365\x20integration','inspect','lodash','request-promise','util','./util','ioredis','../../../../config/logger','../../../../config/environment','defaults','socket.io-emitter','POST','clientId','remoteUri','username','password','clientSecret','access_token','catch'];(function(_0x5b285c,_0x9e144a){var _0x1cd193=function(_0x65042e){while(--_0x65042e){_0x5b285c['push'](_0x5b285c['shift']());}};_0x1cd193(++_0x9e144a);}(_0x9956,0x1b6));var _0x6995=function(_0x926fc6,_0x5f3673){_0x926fc6=_0x926fc6-0x0;var _0x23bc9a=_0x9956[_0x926fc6];return _0x23bc9a;};'use strict';var _=require(_0x6995('0x0'));var BPromise=require('bluebird');var rp=require(_0x6995('0x1'));var util=require(_0x6995('0x2'));var intUtil=require(_0x6995('0x3'));var md5=require('md5');var Redis=require(_0x6995('0x4'));var logger=require(_0x6995('0x5'))('dynamics365');var config=require(_0x6995('0x6'));config['redis']=_[_0x6995('0x7')](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0x6995('0x8'))(new Redis(config['redis']));function getAuthToken(_0x488f9e,_0x41824d,_0x55b225){var _0x482ba6={'method':_0x6995('0x9'),'uri':_0x41824d,'form':{'client_id':_0x488f9e[_0x6995('0xa')],'resource':_0x488f9e[_0x6995('0xb')],'username':_0x488f9e[_0x6995('0xc')],'password':_0x488f9e['password'],'grant_type':_0x6995('0xd'),'client_secret':_0x488f9e[_0x6995('0xe')]},'json':!![]};return rp(_0x482ba6)['then'](function(_0x5d247a){return _0x5d247a[_0x6995('0xf')];})[_0x6995('0x10')](function(_0x4fa77d){logger[_0x6995('0x11')]('['+[_0x55b225['toUpperCase']()]+_0x6995('0x12'));return _0x4fa77d[_0x6995('0x13')];});}function getUser(_0x910354,_0x536806,_0x8797b0,_0x595d0d,_0x2ad985,_0x56ddc3){return new BPromise(function(_0x47b240,_0x4e10e8){return getAuthToken(_0x536806,_0x595d0d,_0x56ddc3)['then'](function(_0x235584){var _0x31059e={'method':_0x6995('0x14'),'uri':_0x2ad985+'systemusers?$select=internalemailaddress,isdisabled,systemuserid','headers':{'Authorization':_0x6995('0x15')+_0x235584,'OData-Version':_0x6995('0x16')},'json':!![]};return rp(_0x31059e);})[_0x6995('0x17')](function(_0x446d98){var _0x154a41=_0x446d98[_0x6995('0x18')];var _0x42e28b=![];var _0x4d57aa=null;if(!_[_0x6995('0x19')](_0x8797b0)){if(intUtil[_0x6995('0x1a')](_0x8797b0[_0x6995('0x1b')])){_0x910354[_0x6995('0x1c')]=_0x8797b0['email'];for(_0x4d57aa=0x0;_0x4d57aa<_0x154a41[_0x6995('0x1d')];_0x4d57aa++){if(_0x154a41[_0x4d57aa][_0x6995('0x1e')]===_0x8797b0[_0x6995('0x1b')]&&!_0x154a41[_0x4d57aa][_0x6995('0x1f')]){_0x42e28b=!![];logger[_0x6995('0x20')]('['+[_0x56ddc3[_0x6995('0x21')]()]+']\x20Agent\x20found\x20'+_0x154a41[_0x4d57aa]['systemuserid']+'!');_0x910354[_0x6995('0x22')]=_0x154a41[_0x4d57aa][_0x6995('0x23')];}}}}if(!_0x42e28b){logger[_0x6995('0x20')]('['+[_0x56ddc3[_0x6995('0x21')]()]+_0x6995('0x24'));_0x910354[_0x6995('0x1c')]=_0x536806[_0x6995('0xc')];for(_0x4d57aa=0x0;_0x4d57aa<_0x154a41[_0x6995('0x1d')];_0x4d57aa++){if(_0x154a41[_0x4d57aa][_0x6995('0x1e')]===_0x536806[_0x6995('0xc')]){_0x910354[_0x6995('0x22')]=_0x154a41[_0x4d57aa][_0x6995('0x23')];}}}_0x47b240(_0x910354);})[_0x6995('0x10')](function(_0x55c484){_0x4e10e8(_0x55c484[_0x6995('0x13')]);});});}function createEndUser(_0x1967aa,_0x41b29f,_0x35050d,_0x5b567c,_0x2e4b33,_0x5e9f90){return new BPromise(function(_0x240604,_0x1a1095){return getAuthToken(_0x41b29f,_0x35050d,_0x5e9f90)[_0x6995('0x17')](function(_0x2226bc){var _0x464943=_0x5e9f90['toLowerCase']()===_0x6995('0x25')?_0x2e4b33[_0x6995('0x26')]:_0x2e4b33['calleridnum'];var _0x539ad5={'method':_0x6995('0x9'),'uri':_0x5b567c+'contacts','body':{'telephone1':_0x464943,'fullname':_0x464943,'firstname':_0x464943,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x6995('0x27')+_0x1967aa[_0x6995('0x22')]+')'},'headers':{'Authorization':_0x6995('0x15')+_0x2226bc,'OData-Version':_0x6995('0x16')},'json':!![],'resolveWithFullResponse':!![]};return rp(_0x539ad5);})[_0x6995('0x17')](function(_0x2b37eb){var _0x85aee8=_0x2b37eb[_0x6995('0x28')][_0x6995('0x29')];var _0x25cf5a=_0x85aee8[_0x6995('0x2a')](_0x85aee8[_0x6995('0x2b')]('(')+0x1,_0x85aee8[_0x6995('0x2b')](')'));_0x1967aa[_0x6995('0x2c')]=_0x25cf5a;_0x240604(_0x1967aa);})['catch'](function(_0x307580){_0x1a1095(_0x307580['message']);});});}function getEndUser(_0x159fd9,_0x27e82a,_0x5d62f6,_0x33a8f5,_0x39968f,_0x526101){return new BPromise(function(_0x4997c8,_0x331375){return getAuthToken(_0x27e82a,_0x5d62f6,_0x526101)[_0x6995('0x17')](function(_0x17c851){var _0x5e87b1={'method':_0x6995('0x14'),'uri':_0x33a8f5+'contacts?$select=telephone1','headers':{'Authorization':'Bearer\x20'+_0x17c851,'If-None-Match':null,'OData-Version':_0x6995('0x16')},'json':!![]};return rp(_0x5e87b1);})[_0x6995('0x17')](function(_0x37e159){var _0x5d7d86=null;if(_0x37e159){var _0x5125c4=_0x37e159['value'];var _0x54dc48=![];for(_0x5d7d86=0x0;_0x5d7d86<_0x5125c4[_0x6995('0x1d')];_0x5d7d86++){var _0x249028=_0x526101[_0x6995('0x2d')]()===_0x6995('0x25')?_0x39968f[_0x6995('0x26')]:_0x39968f['calleridnum'];if(_0x5125c4[_0x5d7d86][_0x6995('0x2e')]===_0x249028){_0x54dc48=!![];_0x159fd9[_0x6995('0x2c')]=_0x5125c4[_0x5d7d86][_0x6995('0x2f')];}}if(_0x54dc48){_0x4997c8(_0x159fd9);}else{return createEndUser(_0x159fd9,_0x27e82a,_0x5d62f6,_0x33a8f5,_0x39968f,_0x526101)[_0x6995('0x17')](function(_0x49d67a){logger['info']('['+[_0x526101[_0x6995('0x21')]()]+_0x6995('0x30'),_0x49d67a[_0x6995('0x2c')]);_0x4997c8(_0x49d67a);});}}else{return createEndUser(_0x159fd9,_0x27e82a,_0x5d62f6,_0x33a8f5,_0x39968f,_0x526101)['then'](function(_0x44ac56){logger[_0x6995('0x20')]('['+[_0x526101[_0x6995('0x21')]()]+_0x6995('0x31'),_0x44ac56[_0x6995('0x2c')]);_0x4997c8(_0x44ac56);});}});});}function getCustomFields(_0xf2a8ae,_0x22629d,_0x19374e){var _0xb0ed9f={};if(_0xf2a8ae[_0x6995('0x1d')]>0x0){_['forEach'](_0xf2a8ae,function(_0x3e4837){if(_0x3e4837[_0x6995('0x32')]==='string'&&_0x3e4837['nameField']&&!_0x3e4837[_0x6995('0x33')]){var _0xa14835=_0x3e4837['idField']['toLowerCase']();var _0x1f5225=_0xa14835[_0x6995('0x2a')](0x0,_0xa14835[_0x6995('0x34')]('_'));var _0x405eed=_0xa14835[_0x6995('0x2a')](_0xa14835[_0x6995('0x34')]('_')+0x1);if(_0x1f5225===_0x19374e){_0xb0ed9f[_0x405eed]=_0x3e4837[_0x6995('0x35')];}}});}return _0xb0ed9f;}function getTicket(_0x903fb8,_0x4cf7b9,_0x28776c,_0x1b5532,_0x479899,_0x5203d2,_0x1a40aa){return new BPromise(function(_0x1700b1,_0x4e3989){var _0x3992a5;return getAuthToken(_0x4cf7b9,_0x28776c,_0x1a40aa)[_0x6995('0x17')](function(_0x242a26){if(_0x5203d2[_0x6995('0x36')]==='incident'){_0x3992a5={'method':'POST','uri':_0x1b5532+'incidents','body':Object[_0x6995('0x37')]({},{'title':intUtil[_0x6995('0x38')](_0x5203d2[_0x6995('0x39')],_0x479899,'\x20'),'description':intUtil[_0x6995('0x38')](_0x5203d2['Descriptions'],_0x479899,'\x0a'),'customerid_contact@odata.bind':'/contacts('+_0x903fb8[_0x6995('0x2c')]+')','ownerid@odata.bind':_0x6995('0x27')+_0x903fb8[_0x6995('0x22')]+')','caseorigincode':'1'},getCustomFields(_0x5203d2['Fields'],_0x479899,_0x5203d2[_0x6995('0x36')])),'headers':{'Authorization':_0x6995('0x15')+_0x242a26,'OData-Version':_0x6995('0x16')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x5203d2['ticketType']===_0x6995('0x3a')){_0x3992a5={'method':_0x6995('0x9'),'uri':_0x1b5532+_0x6995('0x3b'),'body':Object[_0x6995('0x37')]({},{'subject':intUtil[_0x6995('0x38')](_0x5203d2[_0x6995('0x39')],_0x479899,'\x20'),'phonenumber':String(_0x479899[_0x6995('0x3c')]),'description':intUtil[_0x6995('0x38')](_0x5203d2[_0x6995('0x3d')],_0x479899,'\x0a'),'regardingobjectid_contact@odata.bind':_0x6995('0x3e')+_0x903fb8[_0x6995('0x2c')]+')','ownerid@odata.bind':_0x6995('0x27')+_0x903fb8[_0x6995('0x22')]+')','directioncode':_0x903fb8[_0x6995('0x3f')]===_0x6995('0x40')?![]:!![],'phonecall_activity_parties':[{'partyid_systemuser@odata.bind':_0x6995('0x27')+_0x903fb8['userId']+')','participationtypemask':_0x903fb8['callDirection']===_0x6995('0x40')?0x2:0x1},{'partyid_contact@odata.bind':_0x6995('0x3e')+_0x903fb8[_0x6995('0x2c')]+')','participationtypemask':_0x903fb8['callDirection']===_0x6995('0x40')?0x1:0x2}]},getCustomFields(_0x5203d2[_0x6995('0x41')],_0x479899,_0x5203d2['ticketType'])),'headers':{'Authorization':_0x6995('0x15')+_0x242a26,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x3992a5);})[_0x6995('0x17')](function(_0x7ec553){var _0x37c4af=_0x7ec553[_0x6995('0x28')][_0x6995('0x29')];var _0x1866a8=_0x37c4af['substring'](_0x37c4af[_0x6995('0x2b')]('(')+0x1,_0x37c4af[_0x6995('0x2b')](')'));_0x903fb8[_0x6995('0x42')]=_0x1866a8;_0x1700b1(_0x903fb8);})[_0x6995('0x10')](function(_0x2ba57b){_0x4e3989(_0x2ba57b[_0x6995('0x13')]);});});}function emit(_0xe23d59,_0x67718e,_0x3c2239,_0x64d4d5){var _0x4180c7={'uri':util['format'](_0x6995('0x43'),_0xe23d59,_0x3c2239,_0x64d4d5)};io['to'](util['format'](_0x6995('0x44'),_0x67718e))['emit'](_0x6995('0x45'),_0x4180c7);}exports['cs']=function(_0x494b85,_0x11ffa1,_0x39812b,_0x5c62a6,_0x4dfc0d,_0x5d1ee6,_0x5a4949,_0x50d791){var _0x551f3b={};_0x5d1ee6[_0x6995('0xb')]=intUtil[_0x6995('0x46')](_0x5d1ee6['remoteUri']);_0x5d1ee6[_0x6995('0x47')]=intUtil['stripTrailingSlash'](_0x5d1ee6['serverUrl']);_0x551f3b['callDirection']=_0x50d791===_0x6995('0x40')||_0x50d791===_0x6995('0x48')?_0x6995('0x40'):_0x6995('0x25');var _0x59a1b8=util[_0x6995('0x49')](_0x6995('0x4a'),_0x5d1ee6['remoteUri']);var _0x596253=util[_0x6995('0x49')](_0x6995('0x4b'),_0x5d1ee6[_0x6995('0x4c')]);var _0xd2662c=util[_0x6995('0x49')](_0x6995('0x4d'),_0x5d1ee6['serverUrl'],_0x11ffa1[_0x6995('0x4e')],md5(_0x11ffa1['uniqueid']));if(_0x4dfc0d&&_0x4dfc0d[_0x6995('0x4f')]){logger[_0x6995('0x20')](_0x6995('0x50'),_0x6995('0x51'));_0x11ffa1[_0x6995('0x52')]=_0xd2662c;}else if(_0x5a4949&&_0x5a4949['recordingFormat']&&_0x5a4949[_0x6995('0x53')]!==_0x6995('0x54')){logger[_0x6995('0x20')](_0x6995('0x55'),_0x6995('0x51'));_0x11ffa1[_0x6995('0x52')]=_0xd2662c;}else{_0x11ffa1[_0x6995('0x52')]='';}return getUser(_0x551f3b,_0x5d1ee6,_0x5c62a6,_0x596253,_0x59a1b8,_0x50d791)[_0x6995('0x17')](function(_0x5b5073){logger[_0x6995('0x20')]('['+_0x50d791['toUpperCase']()+_0x6995('0x56'),_0x5b5073[_0x6995('0x22')]);logger[_0x6995('0x20')]('['+_0x50d791['toUpperCase']()+']\x20The\x20User\x20email\x20is:',_0x5b5073[_0x6995('0x1c')]);return getEndUser(_0x5b5073,_0x5d1ee6,_0x596253,_0x59a1b8,_0x11ffa1,_0x50d791);})[_0x6995('0x17')](function(_0x5d7c33){logger[_0x6995('0x20')]('['+_0x50d791[_0x6995('0x21')]()+']\x20The\x20Enduser\x20ID\x20is:',_0x5d7c33[_0x6995('0x2c')]);logger[_0x6995('0x20')]('['+_0x50d791['toUpperCase']()+']\x20The\x20Enduser\x20phone\x20is:',_0x11ffa1[_0x6995('0x3c')]);return getTicket(_0x5d7c33,_0x5d1ee6,_0x596253,_0x59a1b8,_0x11ffa1,_0x39812b,_0x50d791);})[_0x6995('0x17')](function(_0x260664){logger['info'](util[_0x6995('0x49')]('['+_0x50d791['toUpperCase']()+_0x6995('0x57'),_0x39812b['ticketType'],_0x260664[_0x6995('0x42')]));logger[_0x6995('0x20')](util[_0x6995('0x49')]('['+_0x50d791['toUpperCase']()+_0x6995('0x58'),_0x50d791));if(_0x50d791!==_0x6995('0x48')){logger['info']('['+_0x50d791['toUpperCase']()+']','Displaying\x20call\x20in\x20a\x20new\x20tab...');emit(_0x5d1ee6[_0x6995('0xb')],_0x5c62a6['name'],_0x39812b[_0x6995('0x36')],_0x260664['ticketId']);}})[_0x6995('0x10')](function(_0x5b6394){logger[_0x6995('0x11')]('['+_0x50d791[_0x6995('0x21')]()+_0x6995('0x59'),util[_0x6995('0x5a')](_0x5b6394,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
+var _0xf446=['email','userEmail','internalemailaddress','info',']\x20Agent\x20found\x20','systemuserid',']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','username','length','userId','outbound','destcalleridnum','contacts','4.0','headers','odata-entityid','lastIndexOf','enduserId','toLowerCase','calleridnum','telephone1','contactid',']\x20Enduser\x20created!',']\x20Enduser\x20Created!','forEach','type','string','nameField','customField','idField','indexOf','substring','content','ticketType','incident','assign','Descriptions','/systemusers(','Fields','phonecall','phonecalls','Subjects','getString','callDirection','queue','format','user:%s','emit','stripTrailingSlash','serverUrl','abandoned','%s/api/data/v9.0/','tenantId','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','[QUEUE]','Recording\x20is\x20enabled!','recordingFormat','none','[OUTBOUND]',']\x20The\x20Enduser\x20ID\x20is:','ticketId',']\x20Call\x20direction:\x20%s','Displaying\x20call\x20in\x20a\x20new\x20tab...','name',']\x20Error\x20running\x20Dynamics365\x20integration','inspect','bluebird','request-promise','util','./util','md5','ioredis','../../../../config/environment','defaults','redis','localhost','POST','clientId','remoteUri','password','clientSecret','then','access_token','catch','error','toUpperCase',']\x20Wrong\x20credentials!','message','Bearer\x20','value','isNil','validateEmail'];(function(_0x1fcbcc,_0xadd85e){var _0x2f2228=function(_0x480b5e){while(--_0x480b5e){_0x1fcbcc['push'](_0x1fcbcc['shift']());}};_0x2f2228(++_0xadd85e);}(_0xf446,0xfd));var _0x6f44=function(_0x87e81b,_0x2ddb31){_0x87e81b=_0x87e81b-0x0;var _0x1d4c78=_0xf446[_0x87e81b];return _0x1d4c78;};'use strict';var _=require('lodash');var BPromise=require(_0x6f44('0x0'));var rp=require(_0x6f44('0x1'));var util=require(_0x6f44('0x2'));var intUtil=require(_0x6f44('0x3'));var md5=require(_0x6f44('0x4'));var Redis=require(_0x6f44('0x5'));var logger=require('../../../../config/logger')('dynamics365');var config=require(_0x6f44('0x6'));config['redis']=_[_0x6f44('0x7')](config[_0x6f44('0x8')],{'host':_0x6f44('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x6f44('0x8')]));function getAuthToken(_0x4a7c16,_0xfecfcb,_0x3f192a){var _0x1b72e0={'method':_0x6f44('0xa'),'uri':_0xfecfcb,'form':{'client_id':_0x4a7c16[_0x6f44('0xb')],'resource':_0x4a7c16[_0x6f44('0xc')],'username':_0x4a7c16['username'],'password':_0x4a7c16['password'],'grant_type':_0x6f44('0xd'),'client_secret':_0x4a7c16[_0x6f44('0xe')]},'json':!![]};return rp(_0x1b72e0)[_0x6f44('0xf')](function(_0x200f6f){return _0x200f6f[_0x6f44('0x10')];})[_0x6f44('0x11')](function(_0x33c2dd){logger[_0x6f44('0x12')]('['+[_0x3f192a[_0x6f44('0x13')]()]+_0x6f44('0x14'));return _0x33c2dd[_0x6f44('0x15')];});}function getUser(_0x3b6d32,_0x426be4,_0x47f98e,_0x3ca6ce,_0x8a340e,_0x24cdc1){return new BPromise(function(_0x51a371,_0x4fb057){return getAuthToken(_0x426be4,_0x3ca6ce,_0x24cdc1)['then'](function(_0x19bfd3){var _0x58448b={'method':'GET','uri':_0x8a340e+'systemusers?$select=internalemailaddress,isdisabled,systemuserid','headers':{'Authorization':_0x6f44('0x16')+_0x19bfd3,'OData-Version':'4.0'},'json':!![]};return rp(_0x58448b);})['then'](function(_0x3d4a7c){var _0xaf87d=_0x3d4a7c[_0x6f44('0x17')];var _0x3adea8=![];var _0x1eb800=null;if(!_[_0x6f44('0x18')](_0x47f98e)){if(intUtil[_0x6f44('0x19')](_0x47f98e[_0x6f44('0x1a')])){_0x3b6d32[_0x6f44('0x1b')]=_0x47f98e[_0x6f44('0x1a')];for(_0x1eb800=0x0;_0x1eb800<_0xaf87d['length'];_0x1eb800++){if(_0xaf87d[_0x1eb800][_0x6f44('0x1c')]===_0x47f98e[_0x6f44('0x1a')]&&!_0xaf87d[_0x1eb800]['isdisabled']){_0x3adea8=!![];logger[_0x6f44('0x1d')]('['+[_0x24cdc1[_0x6f44('0x13')]()]+_0x6f44('0x1e')+_0xaf87d[_0x1eb800][_0x6f44('0x1f')]+'!');_0x3b6d32['userId']=_0xaf87d[_0x1eb800][_0x6f44('0x1f')];}}}}if(!_0x3adea8){logger['info']('['+[_0x24cdc1[_0x6f44('0x13')]()]+_0x6f44('0x20'));_0x3b6d32[_0x6f44('0x1b')]=_0x426be4[_0x6f44('0x21')];for(_0x1eb800=0x0;_0x1eb800<_0xaf87d[_0x6f44('0x22')];_0x1eb800++){if(_0xaf87d[_0x1eb800][_0x6f44('0x1c')]===_0x426be4[_0x6f44('0x21')]){_0x3b6d32[_0x6f44('0x23')]=_0xaf87d[_0x1eb800]['systemuserid'];}}}_0x51a371(_0x3b6d32);})['catch'](function(_0x1a4fa8){_0x4fb057(_0x1a4fa8[_0x6f44('0x15')]);});});}function createEndUser(_0x20df01,_0x3464dd,_0x1200d3,_0x3dff5f,_0x4f1b6a,_0x136243){return new BPromise(function(_0x17f66c,_0x51b832){return getAuthToken(_0x3464dd,_0x1200d3,_0x136243)[_0x6f44('0xf')](function(_0x1bf040){var _0x50d435=_0x136243['toLowerCase']()===_0x6f44('0x24')?_0x4f1b6a[_0x6f44('0x25')]:_0x4f1b6a['calleridnum'];var _0x523e85={'method':_0x6f44('0xa'),'uri':_0x3dff5f+_0x6f44('0x26'),'body':{'telephone1':_0x50d435,'fullname':_0x50d435,'firstname':_0x50d435,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':'/systemusers('+_0x20df01['userId']+')'},'headers':{'Authorization':'Bearer\x20'+_0x1bf040,'OData-Version':_0x6f44('0x27')},'json':!![],'resolveWithFullResponse':!![]};return rp(_0x523e85);})[_0x6f44('0xf')](function(_0x1498e3){var _0x342499=_0x1498e3[_0x6f44('0x28')][_0x6f44('0x29')];var _0x31805f=_0x342499['substring'](_0x342499[_0x6f44('0x2a')]('(')+0x1,_0x342499[_0x6f44('0x2a')](')'));_0x20df01[_0x6f44('0x2b')]=_0x31805f;_0x17f66c(_0x20df01);})[_0x6f44('0x11')](function(_0x1e83f1){_0x51b832(_0x1e83f1[_0x6f44('0x15')]);});});}function getEndUser(_0x5973b0,_0x16e3e6,_0x44eec5,_0x437ca4,_0x377af7,_0x405c4e){return new BPromise(function(_0x401320,_0x1963e8){return getAuthToken(_0x16e3e6,_0x44eec5,_0x405c4e)['then'](function(_0xc0a184){var _0x5dcbff={'method':'GET','uri':_0x437ca4+'contacts?$select=telephone1','headers':{'Authorization':_0x6f44('0x16')+_0xc0a184,'If-None-Match':null,'OData-Version':_0x6f44('0x27')},'json':!![]};return rp(_0x5dcbff);})[_0x6f44('0xf')](function(_0xf1250f){var _0x1dfef8=null;if(_0xf1250f){var _0x570a21=_0xf1250f['value'];var _0x26e209=![];for(_0x1dfef8=0x0;_0x1dfef8<_0x570a21[_0x6f44('0x22')];_0x1dfef8++){var _0x5d064a=_0x405c4e[_0x6f44('0x2c')]()==='outbound'?_0x377af7[_0x6f44('0x25')]:_0x377af7[_0x6f44('0x2d')];if(_0x570a21[_0x1dfef8][_0x6f44('0x2e')]===_0x5d064a){_0x26e209=!![];_0x5973b0[_0x6f44('0x2b')]=_0x570a21[_0x1dfef8][_0x6f44('0x2f')];}}if(_0x26e209){_0x401320(_0x5973b0);}else{return createEndUser(_0x5973b0,_0x16e3e6,_0x44eec5,_0x437ca4,_0x377af7,_0x405c4e)[_0x6f44('0xf')](function(_0x33e1ac){logger[_0x6f44('0x1d')]('['+[_0x405c4e[_0x6f44('0x13')]()]+_0x6f44('0x30'),_0x33e1ac[_0x6f44('0x2b')]);_0x401320(_0x33e1ac);});}}else{return createEndUser(_0x5973b0,_0x16e3e6,_0x44eec5,_0x437ca4,_0x377af7,_0x405c4e)[_0x6f44('0xf')](function(_0x31973f){logger[_0x6f44('0x1d')]('['+[_0x405c4e['toUpperCase']()]+_0x6f44('0x31'),_0x31973f['enduserId']);_0x401320(_0x31973f);});}});});}function getCustomFields(_0x28d08f,_0xbf6f79,_0x20c3f1){var _0x8c6c4b={};if(_0x28d08f['length']>0x0){_[_0x6f44('0x32')](_0x28d08f,function(_0x213c8f){if(_0x213c8f[_0x6f44('0x33')]===_0x6f44('0x34')&&_0x213c8f[_0x6f44('0x35')]&&!_0x213c8f[_0x6f44('0x36')]){var _0x54921e=_0x213c8f[_0x6f44('0x37')]['toLowerCase']();var _0x2a9ab3=_0x54921e['substring'](0x0,_0x54921e[_0x6f44('0x38')]('_'));var _0x2f7657=_0x54921e[_0x6f44('0x39')](_0x54921e[_0x6f44('0x38')]('_')+0x1);if(_0x2a9ab3===_0x20c3f1){_0x8c6c4b[_0x2f7657]=_0x213c8f[_0x6f44('0x3a')];}}});}return _0x8c6c4b;}function getTicket(_0x349936,_0x574512,_0x15e4dd,_0x18b8cf,_0x2b5197,_0x31627e,_0x5d5857){return new BPromise(function(_0x343bcc,_0x1c4130){var _0x24ca49;return getAuthToken(_0x574512,_0x15e4dd,_0x5d5857)[_0x6f44('0xf')](function(_0x1be369){if(_0x31627e[_0x6f44('0x3b')]===_0x6f44('0x3c')){_0x24ca49={'method':_0x6f44('0xa'),'uri':_0x18b8cf+'incidents','body':Object[_0x6f44('0x3d')]({},{'title':intUtil['getString'](_0x31627e['Subjects'],_0x2b5197,'\x20'),'description':intUtil['getString'](_0x31627e[_0x6f44('0x3e')],_0x2b5197,'\x0a'),'customerid_contact@odata.bind':'/contacts('+_0x349936[_0x6f44('0x2b')]+')','ownerid@odata.bind':_0x6f44('0x3f')+_0x349936[_0x6f44('0x23')]+')','caseorigincode':'1'},getCustomFields(_0x31627e[_0x6f44('0x40')],_0x2b5197,_0x31627e['ticketType'])),'headers':{'Authorization':'Bearer\x20'+_0x1be369,'OData-Version':_0x6f44('0x27')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x31627e[_0x6f44('0x3b')]===_0x6f44('0x41')){_0x24ca49={'method':'POST','uri':_0x18b8cf+_0x6f44('0x42'),'body':Object['assign']({},{'subject':intUtil['getString'](_0x31627e[_0x6f44('0x43')],_0x2b5197,'\x20'),'phonenumber':String(_0x2b5197[_0x6f44('0x2d')]),'description':intUtil[_0x6f44('0x44')](_0x31627e[_0x6f44('0x3e')],_0x2b5197,'\x0a'),'regardingobjectid_contact@odata.bind':'/contacts('+_0x349936[_0x6f44('0x2b')]+')','ownerid@odata.bind':_0x6f44('0x3f')+_0x349936['userId']+')','directioncode':_0x349936[_0x6f44('0x45')]===_0x6f44('0x46')?![]:!![],'phonecall_activity_parties':[{'partyid_systemuser@odata.bind':_0x6f44('0x3f')+_0x349936[_0x6f44('0x23')]+')','participationtypemask':_0x349936['callDirection']===_0x6f44('0x46')?0x2:0x1},{'partyid_contact@odata.bind':'/contacts('+_0x349936[_0x6f44('0x2b')]+')','participationtypemask':_0x349936[_0x6f44('0x45')]===_0x6f44('0x46')?0x1:0x2}]},getCustomFields(_0x31627e[_0x6f44('0x40')],_0x2b5197,_0x31627e[_0x6f44('0x3b')])),'headers':{'Authorization':_0x6f44('0x16')+_0x1be369,'OData-Version':_0x6f44('0x27')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x24ca49);})['then'](function(_0x251729){var _0x2af250=_0x251729[_0x6f44('0x28')][_0x6f44('0x29')];var _0xd1dff4=_0x2af250[_0x6f44('0x39')](_0x2af250[_0x6f44('0x2a')]('(')+0x1,_0x2af250[_0x6f44('0x2a')](')'));_0x349936['ticketId']=_0xd1dff4;_0x343bcc(_0x349936);})[_0x6f44('0x11')](function(_0x304fe0){_0x1c4130(_0x304fe0[_0x6f44('0x15')]);});});}function emit(_0x181c39,_0x440a37,_0x4b50a7,_0x32280a){var _0x7542ac={'uri':util[_0x6f44('0x47')]('%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s',_0x181c39,_0x4b50a7,_0x32280a)};io['to'](util[_0x6f44('0x47')](_0x6f44('0x48'),_0x440a37))[_0x6f44('0x49')]('trigger:browser:url',_0x7542ac);}exports['cs']=function(_0x66efc4,_0x298a94,_0x471571,_0x24b072,_0x57e10c,_0x4f1c5d,_0x1e7af4,_0x2e634b){var _0x3f356d={};_0x4f1c5d[_0x6f44('0xc')]=intUtil[_0x6f44('0x4a')](_0x4f1c5d[_0x6f44('0xc')]);_0x4f1c5d[_0x6f44('0x4b')]=intUtil[_0x6f44('0x4a')](_0x4f1c5d['serverUrl']);_0x3f356d[_0x6f44('0x45')]=_0x2e634b===_0x6f44('0x46')||_0x2e634b===_0x6f44('0x4c')?_0x6f44('0x46'):_0x6f44('0x24');var _0x2cf2d3=util[_0x6f44('0x47')](_0x6f44('0x4d'),_0x4f1c5d[_0x6f44('0xc')]);var _0x271367=util[_0x6f44('0x47')]('https://login.microsoftonline.com/%s/oauth2/token',_0x4f1c5d[_0x6f44('0x4e')]);var _0x31c172=util[_0x6f44('0x47')](_0x6f44('0x4f'),_0x4f1c5d['serverUrl'],_0x298a94[_0x6f44('0x50')],md5(_0x298a94[_0x6f44('0x50')]));if(_0x57e10c&&_0x57e10c['monitor_format']){logger[_0x6f44('0x1d')](_0x6f44('0x51'),_0x6f44('0x52'));_0x298a94['recordingURL']=_0x31c172;}else if(_0x1e7af4&&_0x1e7af4[_0x6f44('0x53')]&&_0x1e7af4[_0x6f44('0x53')]!==_0x6f44('0x54')){logger[_0x6f44('0x1d')](_0x6f44('0x55'),_0x6f44('0x52'));_0x298a94['recordingURL']=_0x31c172;}else{_0x298a94['recordingURL']='';}return getUser(_0x3f356d,_0x4f1c5d,_0x24b072,_0x271367,_0x2cf2d3,_0x2e634b)[_0x6f44('0xf')](function(_0x3c719a){logger[_0x6f44('0x1d')]('['+_0x2e634b[_0x6f44('0x13')]()+']\x20The\x20User\x20ID\x20is:',_0x3c719a[_0x6f44('0x23')]);logger[_0x6f44('0x1d')]('['+_0x2e634b['toUpperCase']()+']\x20The\x20User\x20email\x20is:',_0x3c719a[_0x6f44('0x1b')]);return getEndUser(_0x3c719a,_0x4f1c5d,_0x271367,_0x2cf2d3,_0x298a94,_0x2e634b);})[_0x6f44('0xf')](function(_0x468ed8){logger[_0x6f44('0x1d')]('['+_0x2e634b[_0x6f44('0x13')]()+_0x6f44('0x56'),_0x468ed8[_0x6f44('0x2b')]);logger[_0x6f44('0x1d')]('['+_0x2e634b[_0x6f44('0x13')]()+']\x20The\x20Enduser\x20phone\x20is:',_0x298a94[_0x6f44('0x2d')]);return getTicket(_0x468ed8,_0x4f1c5d,_0x271367,_0x2cf2d3,_0x298a94,_0x471571,_0x2e634b);})['then'](function(_0xbd5e97){logger['info'](util['format']('['+_0x2e634b[_0x6f44('0x13')]()+']\x20The\x20%s\x20ID\x20is:\x20%s',_0x471571[_0x6f44('0x3b')],_0xbd5e97[_0x6f44('0x57')]));logger[_0x6f44('0x1d')](util[_0x6f44('0x47')]('['+_0x2e634b[_0x6f44('0x13')]()+_0x6f44('0x58'),_0x2e634b));if(_0x2e634b!==_0x6f44('0x4c')){logger[_0x6f44('0x1d')]('['+_0x2e634b[_0x6f44('0x13')]()+']',_0x6f44('0x59'));emit(_0x4f1c5d[_0x6f44('0xc')],_0x24b072[_0x6f44('0x5a')],_0x471571[_0x6f44('0x3b')],_0xbd5e97[_0x6f44('0x57')]);}})[_0x6f44('0x11')](function(_0x4fd38e){logger[_0x6f44('0x12')]('['+_0x2e634b[_0x6f44('0x13')]()+_0x6f44('0x5b'),util[_0x6f44('0x5c')](_0x4fd38e,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
index 5c2e9fb..4487a94 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2115=['recordingFormat','none','[OUTBOUND]','Recording\x20is\x20enabled!','destcalleridnum','error','abandoned','[ABANDONED]','lodash','request-promise','md5','util','ioredis','./util','../../../../config/environment','../../../../config/logger','freshdesk','redis','defaults','socket.io-emitter','application/json','emit','info','merge','format','Caller\x20-\x20%s','calleridnum','Subjects','getString','Descriptions','<br>','Fields','custom_fields','keyBy','value','%s/api/v2/tickets','remoteUri','POST','then','Ticket\x20created!','%s/api/v2/agents','length','Agent\x20found!','find','contact','email','%s/api/v2/agents/me','Admin\x20account\x20selected.','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','Searching\x20enduser\x20with\x20phone','%s/api/v2/contacts','Enduser\x20created.','Basic\x20%s','apiKey','toString','base64','[HTTP]','stringify','map','forEach','type','string','nameField','customField','toLowerCase','content','push','idField','variableName','customVariable','Variable','name','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','The\x20User\x20ID\x20is:','calleridname','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','trigger:browser:url','%s/helpdesk/tickets/%d','catch'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x2115,0x16c));var _0x5211=function(_0x4996d5,_0x123daf){_0x4996d5=_0x4996d5-0x0;var _0x4793f9=_0x2115[_0x4996d5];return _0x4793f9;};'use strict';var _=require(_0x5211('0x0'));var rp=require(_0x5211('0x1'));var md5=require(_0x5211('0x2'));var util=require(_0x5211('0x3'));var Redis=require(_0x5211('0x4'));var intUtil=require(_0x5211('0x5'));var config=require(_0x5211('0x6'));var logger=require(_0x5211('0x7'))(_0x5211('0x8'));config[_0x5211('0x9')]=_[_0x5211('0xa')](config[_0x5211('0x9')],{'host':'localhost','port':0x18eb});var io=require(_0x5211('0xb'))(new Redis(config[_0x5211('0x9')]));var headers={'Content-Type':_0x5211('0xc'),'Accept':_0x5211('0xc')};function emit(_0x2d4372,_0x5bbdbf,_0x5b4f0b){io['to'](_0x2d4372)[_0x5211('0xd')](_0x5bbdbf,_0x5b4f0b);}function getTicket(_0x278240,_0x5becbb,_0x316e33,_0xfa7d36,_0x16fed2){logger[_0x5211('0xe')]('Creating\x20new\x20ticket...');var _0x40b862=_[_0x5211('0xf')]({'responder_id':_0x5becbb['id'],'requester_id':_0x316e33['id'],'name':util[_0x5211('0x10')](_0x5211('0x11'),_0x16fed2['calleridname']),'phone':_0x16fed2[_0x5211('0x12')],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil['getString'](_0xfa7d36[_0x5211('0x13')],_0x16fed2,'\x20'),'description':intUtil[_0x5211('0x14')](_0xfa7d36[_0x5211('0x15')],_0x16fed2,_0x5211('0x16')),'tags':getTags(_0xfa7d36['Tags'],'name')},getCustomFields(_0xfa7d36[_0x5211('0x17')],_0x16fed2));_0x40b862[_0x5211('0x18')]=_['mapValues'](_[_0x5211('0x19')](_0x40b862[_0x5211('0x18')],'id'),_0x5211('0x1a'));return request({'uri':util[_0x5211('0x10')](_0x5211('0x1b'),_0x278240[_0x5211('0x1c')]),'method':_0x5211('0x1d'),'body':_0x40b862})[_0x5211('0x1e')](function(_0x3043d7){logger['info'](_0x5211('0x1f'));return _0x3043d7;});}function getUser(_0x38ad26,_0x4251f6){if(intUtil['validateEmail'](_0x4251f6)){return request({'uri':util[_0x5211('0x10')](_0x5211('0x20'),_0x38ad26['remoteUri']),'qs':{'email':_0x4251f6}})[_0x5211('0x1e')](function(_0x582e29){if(_0x582e29[_0x5211('0x21')]){logger['info'](_0x5211('0x22'));return _[_0x5211('0x23')](_0x582e29,function(_0x291544){return _0x291544[_0x5211('0x24')][_0x5211('0x25')]===_0x4251f6;});}else{logger[_0x5211('0xe')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util['format'](_0x5211('0x26'),_0x38ad26['remoteUri'])})[_0x5211('0x1e')](function(_0x4bd3d7){logger[_0x5211('0xe')](_0x5211('0x27'));return _0x4bd3d7;});}});}else{logger[_0x5211('0xe')](_0x5211('0x28'));return request({'uri':util['format'](_0x5211('0x26'),_0x38ad26['remoteUri'])})[_0x5211('0x1e')](function(_0xb188a){logger['info'](_0x5211('0x27'));return _0xb188a;});}}function getEndUser(_0x161d00,_0x1c74da,_0x245ef7){logger[_0x5211('0xe')](_0x5211('0x29'),_0x245ef7);return request({'uri':util['format']('%s/api/v2/contacts',_0x161d00[_0x5211('0x1c')]),'qs':{'phone':_0x245ef7}})['then'](function(_0x706efe){if(_0x706efe[_0x5211('0x21')]){logger[_0x5211('0xe')]('Enduser\x20found!');return _['find'](_0x706efe,{'phone':_0x245ef7});}else{logger[_0x5211('0xe')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util['format'](_0x5211('0x2a'),_0x161d00[_0x5211('0x1c')]),'method':_0x5211('0x1d'),'body':{'name':_0x1c74da,'phone':_0x245ef7}})['then'](function(_0xf10d00){logger[_0x5211('0xe')](_0x5211('0x2b'));return _0xf10d00;});}});}function getAuth(_0x2ca75c){return util[_0x5211('0x10')](_0x5211('0x2c'),new Buffer(_0x2ca75c[_0x5211('0x2d')]+':X')[_0x5211('0x2e')](_0x5211('0x2f')));}function request(_0x4eef11){logger['debug'](_0x5211('0x30'),JSON[_0x5211('0x31')](_0x4eef11));return rp(_['defaults'](_0x4eef11,{'method':'GET','headers':headers,'json':!![]}));}function getTags(_0xf91461,_0x143f09){var _0x50eb0f=[];if(_0xf91461&&_0xf91461[_0x5211('0x21')]>0x0){_0x50eb0f=_[_0x5211('0x32')](_0xf91461,_0x143f09);}return _0x50eb0f;}function getCustomFields(_0x40e243,_0x58d72b){var _0x1be493=[];var _0xf96ee9={'custom_fields':[]};if(_0x40e243[_0x5211('0x21')]>0x0){_[_0x5211('0x33')](_0x40e243,function(_0x43d226){if(_0x43d226[_0x5211('0x34')]===_0x5211('0x35')&&_0x43d226[_0x5211('0x36')]&&!_0x43d226[_0x5211('0x37')]){_0xf96ee9[_0x43d226['nameField'][_0x5211('0x38')]()]=_0x43d226[_0x5211('0x39')][_0x5211('0x2e')]();}else if(_0x43d226['type']===_0x5211('0x35')&&_0x43d226['idField']&&_0x43d226[_0x5211('0x37')]){_0xf96ee9[_0x5211('0x18')][_0x5211('0x3a')]({'id':_0x43d226[_0x5211('0x3b')],'value':_0x43d226['content'][_0x5211('0x2e')]()});}else if(_0x43d226[_0x5211('0x34')]==='variable'&&_0x43d226[_0x5211('0x3c')]&&_0x43d226['idField']&&_0x43d226[_0x5211('0x37')]){_0x58d72b[_0x43d226[_0x5211('0x3c')]]&&_0xf96ee9[_0x5211('0x18')][_0x5211('0x3a')]({'id':_0x43d226[_0x5211('0x3b')],'value':_0x58d72b[_0x43d226[_0x5211('0x3c')]]['toString']()});}else if(_0x43d226[_0x5211('0x34')]===_0x5211('0x3d')&&_0x43d226[_0x5211('0x3e')]&&_0x43d226['Variable'][_0x5211('0x3f')]&&_0x43d226[_0x5211('0x3b')]&&_0x43d226[_0x5211('0x37')]){_0x58d72b[_0x43d226[_0x5211('0x3e')][_0x5211('0x3f')][_0x5211('0x38')]()]&&_0xf96ee9['custom_fields'][_0x5211('0x3a')]({'id':_0x43d226[_0x5211('0x3b')],'value':_0x58d72b[_0x43d226[_0x5211('0x3e')][_0x5211('0x3f')][_0x5211('0x38')]()][_0x5211('0x2e')]()});}});}return _0xf96ee9;}exports[_0x5211('0x40')]=function(_0x344394,_0x37ab88,_0x579a9d,_0x1a8dda,_0x45a483,_0xeb61e9){var _0xfdc41b,_0x5cd8c0;_0xeb61e9[_0x5211('0x1c')]=intUtil[_0x5211('0x41')](_0xeb61e9['remoteUri']);_0xeb61e9[_0x5211('0x42')]=intUtil[_0x5211('0x41')](_0xeb61e9[_0x5211('0x42')]);if(_0x45a483&&_0x45a483[_0x5211('0x43')]){logger['info'](_0x5211('0x44'),'Recording\x20is\x20enabled!');_0x37ab88[_0x5211('0x45')]=util['format'](_0x5211('0x46'),_0xeb61e9[_0x5211('0x42')],_0x37ab88['uniqueid'],md5(_0x37ab88[_0x5211('0x47')]));}else{_0x37ab88['recordingURL']='';}headers[_0x5211('0x48')]=getAuth(_0xeb61e9);return getUser(_0xeb61e9,_0x1a8dda[_0x5211('0x25')])[_0x5211('0x1e')](function(_0x2b6d03){_0xfdc41b=_0x2b6d03;logger[_0x5211('0xe')](_0x5211('0x49'),_0xfdc41b['id']);return getEndUser(_0xeb61e9,_0x37ab88[_0x5211('0x4a')],_0x37ab88[_0x5211('0x12')]);})[_0x5211('0x1e')](function(_0x13a8da){_0x5cd8c0=_0x13a8da;logger[_0x5211('0xe')](_0x5211('0x4b'),_0x5cd8c0['id']);return getTicket(_0xeb61e9,_0xfdc41b,_0x5cd8c0,_0x579a9d,_0x37ab88);})[_0x5211('0x1e')](function(_0x4f494b){if(_0x4f494b&&_0x4f494b['id']){logger[_0x5211('0xe')]('Ticket\x20created!');logger[_0x5211('0xe')](_0x5211('0x4c'),_0x4f494b['id']);logger[_0x5211('0xe')]('[QUEUE]',_0x5211('0x4d'));emit(util[_0x5211('0x10')]('user:%s',_0x1a8dda[_0x5211('0x3f')]),_0x5211('0x4e'),{'uri':util[_0x5211('0x10')](_0x5211('0x4f'),_0xeb61e9[_0x5211('0x1c')],_0x4f494b['id'])});}})[_0x5211('0x50')](function(_0x2d2b02){logger['error'](_0x5211('0x44'),JSON[_0x5211('0x31')](_0x2d2b02));});};exports['outbound']=function(_0x57ca51,_0x262baf,_0x2c3de9,_0x5b3011,_0x3ec0f3,_0x53cd32,_0x25938f){var _0x48fe39,_0x2c86be;_0x53cd32['remoteUri']=intUtil[_0x5211('0x41')](_0x53cd32['remoteUri']);_0x53cd32[_0x5211('0x42')]=intUtil[_0x5211('0x41')](_0x53cd32[_0x5211('0x42')]);if(_0x25938f&&_0x25938f['recordingFormat']&&_0x25938f[_0x5211('0x51')]!==_0x5211('0x52')){logger['info'](_0x5211('0x53'),_0x5211('0x54'));_0x262baf[_0x5211('0x45')]=util[_0x5211('0x10')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x53cd32['serverUrl'],_0x262baf[_0x5211('0x47')],md5(_0x262baf[_0x5211('0x47')]));}headers[_0x5211('0x48')]=getAuth(_0x53cd32);return getUser(_0x53cd32,_0x5b3011[_0x5211('0x25')])[_0x5211('0x1e')](function(_0x2da6e1){_0x48fe39=_0x2da6e1;logger[_0x5211('0xe')](_0x5211('0x49'),_0x48fe39['id']);return getEndUser(_0x53cd32,_0x262baf['destcalleridname'],_0x262baf[_0x5211('0x55')]);})[_0x5211('0x1e')](function(_0x45919d){_0x2c86be=_0x45919d;logger[_0x5211('0xe')](_0x5211('0x4b'),_0x2c86be['id']);return getTicket(_0x53cd32,_0x48fe39,_0x2c86be,_0x2c3de9,_0x262baf);})[_0x5211('0x1e')](function(_0x913f04){if(_0x913f04&&_0x913f04['id']){logger[_0x5211('0xe')](_0x5211('0x1f'));logger[_0x5211('0xe')](_0x5211('0x4c'),_0x913f04['id']);logger[_0x5211('0xe')]('[OUTBOUND]',_0x5211('0x4d'));emit(util[_0x5211('0x10')]('user:%s',_0x5b3011[_0x5211('0x3f')]),_0x5211('0x4e'),{'uri':util[_0x5211('0x10')]('%s/helpdesk/tickets/%d',_0x53cd32[_0x5211('0x1c')],_0x913f04['id'])});}})['catch'](function(_0x6d8306){logger[_0x5211('0x56')]('[OUTBOUND]',JSON[_0x5211('0x31')](_0x6d8306));});};exports[_0x5211('0x57')]=function(_0x5e6117,_0x27081c,_0x1ff0e4,_0x293914,_0x2f9a93,_0x3f6356){var _0x5859fd,_0x40a66a;_0x3f6356[_0x5211('0x1c')]=intUtil[_0x5211('0x41')](_0x3f6356['remoteUri']);_0x3f6356['serverUrl']=intUtil['stripTrailingSlash'](_0x3f6356[_0x5211('0x42')]);if(_0x2f9a93&&_0x2f9a93[_0x5211('0x43')]){logger[_0x5211('0xe')](_0x5211('0x58'),_0x5211('0x54'));_0x27081c[_0x5211('0x45')]=util['format'](_0x5211('0x46'),_0x3f6356['serverUrl'],_0x27081c[_0x5211('0x47')],md5(_0x27081c[_0x5211('0x47')]));}else{_0x27081c[_0x5211('0x45')]='';}headers[_0x5211('0x48')]=getAuth(_0x3f6356);return getUser(_0x3f6356,'')[_0x5211('0x1e')](function(_0x312282){_0x5859fd=_0x312282;logger[_0x5211('0xe')](_0x5211('0x49'),_0x5859fd['id']);return getEndUser(_0x3f6356,_0x27081c[_0x5211('0x4a')],_0x27081c['calleridnum']);})['then'](function(_0x4f348b){_0x40a66a=_0x4f348b;logger[_0x5211('0xe')](_0x5211('0x4b'),_0x40a66a['id']);return getTicket(_0x3f6356,_0x5859fd,_0x40a66a,_0x1ff0e4,_0x27081c);})[_0x5211('0x1e')](function(_0x17af25){if(_0x17af25){logger[_0x5211('0xe')](_0x5211('0x1f'));logger[_0x5211('0xe')](_0x5211('0x4c'),_0x17af25['id']);}})[_0x5211('0x50')](function(_0x1ac3cf){logger[_0x5211('0x56')]('[ABANDONED]',JSON['stringify'](_0x1ac3cf));});};
\ No newline at end of file
+var _0x8ed8=['mapValues','keyBy','value','format','%s/api/v2/tickets','remoteUri','POST','then','validateEmail','length','Agent\x20found!','find','contact','Admin\x20account\x20selected.','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','%s/api/v2/agents/me','Searching\x20enduser\x20with\x20phone','%s/api/v2/contacts','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','Enduser\x20created.','Basic\x20%s','apiKey','toString','base64','debug','[HTTP]','GET','map','forEach','type','string','nameField','customField','content','push','idField','variable','variableName','customVariable','Variable','toLowerCase','queue','stripTrailingSlash','serverUrl','monitor_format','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','calleridname','The\x20Enduser\x20ID\x20is:','Ticket\x20created!','[QUEUE]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','%s/helpdesk/tickets/%d','catch','error','stringify','outbound','recordingFormat','none','[OUTBOUND]','recordingURL','email','The\x20User\x20ID\x20is:','destcalleridnum','abandoned','[ABANDONED]','The\x20Ticket\x20ID\x20is:','lodash','request-promise','util','ioredis','./util','../../../../config/environment','../../../../config/logger','freshdesk','defaults','socket.io-emitter','info','Creating\x20new\x20ticket...','merge','Caller\x20-\x20%s','calleridnum','getString','Subjects','Descriptions','<br>','Tags','name','custom_fields'];(function(_0x4c2c96,_0x7c0e37){var _0x3b876c=function(_0x9ac0c8){while(--_0x9ac0c8){_0x4c2c96['push'](_0x4c2c96['shift']());}};_0x3b876c(++_0x7c0e37);}(_0x8ed8,0x101));var _0x88ed=function(_0x160e1e,_0x10d001){_0x160e1e=_0x160e1e-0x0;var _0x139c60=_0x8ed8[_0x160e1e];return _0x139c60;};'use strict';var _=require(_0x88ed('0x0'));var rp=require(_0x88ed('0x1'));var md5=require('md5');var util=require(_0x88ed('0x2'));var Redis=require(_0x88ed('0x3'));var intUtil=require(_0x88ed('0x4'));var config=require(_0x88ed('0x5'));var logger=require(_0x88ed('0x6'))(_0x88ed('0x7'));config['redis']=_[_0x88ed('0x8')](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0x88ed('0x9'))(new Redis(config['redis']));var headers={'Content-Type':'application/json','Accept':'application/json'};function emit(_0x4c22e3,_0x3596e3,_0x4e78aa){io['to'](_0x4c22e3)['emit'](_0x3596e3,_0x4e78aa);}function getTicket(_0xb08d79,_0x38fea3,_0x2c9b02,_0x145549,_0x50cf47){logger[_0x88ed('0xa')](_0x88ed('0xb'));var _0x3ff595=_[_0x88ed('0xc')]({'responder_id':_0x38fea3['id'],'requester_id':_0x2c9b02['id'],'name':util['format'](_0x88ed('0xd'),_0x50cf47['calleridname']),'phone':_0x50cf47[_0x88ed('0xe')],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil[_0x88ed('0xf')](_0x145549[_0x88ed('0x10')],_0x50cf47,'\x20'),'description':intUtil[_0x88ed('0xf')](_0x145549[_0x88ed('0x11')],_0x50cf47,_0x88ed('0x12')),'tags':getTags(_0x145549[_0x88ed('0x13')],_0x88ed('0x14'))},getCustomFields(_0x145549['Fields'],_0x50cf47));_0x3ff595[_0x88ed('0x15')]=_[_0x88ed('0x16')](_[_0x88ed('0x17')](_0x3ff595[_0x88ed('0x15')],'id'),_0x88ed('0x18'));return request({'uri':util[_0x88ed('0x19')](_0x88ed('0x1a'),_0xb08d79[_0x88ed('0x1b')]),'method':_0x88ed('0x1c'),'body':_0x3ff595})[_0x88ed('0x1d')](function(_0x1f67a1){logger[_0x88ed('0xa')]('Ticket\x20created!');return _0x1f67a1;});}function getUser(_0x271f7d,_0x4c8a9f){if(intUtil[_0x88ed('0x1e')](_0x4c8a9f)){return request({'uri':util['format']('%s/api/v2/agents',_0x271f7d[_0x88ed('0x1b')]),'qs':{'email':_0x4c8a9f}})[_0x88ed('0x1d')](function(_0x3b740d){if(_0x3b740d[_0x88ed('0x1f')]){logger[_0x88ed('0xa')](_0x88ed('0x20'));return _[_0x88ed('0x21')](_0x3b740d,function(_0x3289b6){return _0x3289b6[_0x88ed('0x22')]['email']===_0x4c8a9f;});}else{logger[_0x88ed('0xa')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x88ed('0x19')]('%s/api/v2/agents/me',_0x271f7d[_0x88ed('0x1b')])})[_0x88ed('0x1d')](function(_0xac67ae){logger[_0x88ed('0xa')](_0x88ed('0x23'));return _0xac67ae;});}});}else{logger[_0x88ed('0xa')](_0x88ed('0x24'));return request({'uri':util[_0x88ed('0x19')](_0x88ed('0x25'),_0x271f7d[_0x88ed('0x1b')])})[_0x88ed('0x1d')](function(_0x1c95f5){logger[_0x88ed('0xa')](_0x88ed('0x23'));return _0x1c95f5;});}}function getEndUser(_0x10c4a6,_0x38d1d5,_0xf4eb62){logger[_0x88ed('0xa')](_0x88ed('0x26'),_0xf4eb62);return request({'uri':util[_0x88ed('0x19')](_0x88ed('0x27'),_0x10c4a6[_0x88ed('0x1b')]),'qs':{'phone':_0xf4eb62}})[_0x88ed('0x1d')](function(_0x403caf){if(_0x403caf[_0x88ed('0x1f')]){logger[_0x88ed('0xa')](_0x88ed('0x28'));return _[_0x88ed('0x21')](_0x403caf,{'phone':_0xf4eb62});}else{logger[_0x88ed('0xa')](_0x88ed('0x29'));return request({'uri':util[_0x88ed('0x19')](_0x88ed('0x27'),_0x10c4a6['remoteUri']),'method':_0x88ed('0x1c'),'body':{'name':_0x38d1d5,'phone':_0xf4eb62}})[_0x88ed('0x1d')](function(_0x445f81){logger['info'](_0x88ed('0x2a'));return _0x445f81;});}});}function getAuth(_0x887cd2){return util[_0x88ed('0x19')](_0x88ed('0x2b'),new Buffer(_0x887cd2[_0x88ed('0x2c')]+':X')[_0x88ed('0x2d')](_0x88ed('0x2e')));}function request(_0x4cbe1e){logger[_0x88ed('0x2f')](_0x88ed('0x30'),JSON['stringify'](_0x4cbe1e));return rp(_[_0x88ed('0x8')](_0x4cbe1e,{'method':_0x88ed('0x31'),'headers':headers,'json':!![]}));}function getTags(_0x10a73a,_0x12d6ed){var _0x51c100=[];if(_0x10a73a&&_0x10a73a[_0x88ed('0x1f')]>0x0){_0x51c100=_[_0x88ed('0x32')](_0x10a73a,_0x12d6ed);}return _0x51c100;}function getCustomFields(_0x2eabf4,_0x1b8ab8){var _0x8c7917=[];var _0x592c55={'custom_fields':[]};if(_0x2eabf4[_0x88ed('0x1f')]>0x0){_[_0x88ed('0x33')](_0x2eabf4,function(_0x41d75a){if(_0x41d75a[_0x88ed('0x34')]===_0x88ed('0x35')&&_0x41d75a[_0x88ed('0x36')]&&!_0x41d75a[_0x88ed('0x37')]){_0x592c55[_0x41d75a[_0x88ed('0x36')]['toLowerCase']()]=_0x41d75a[_0x88ed('0x38')][_0x88ed('0x2d')]();}else if(_0x41d75a['type']===_0x88ed('0x35')&&_0x41d75a['idField']&&_0x41d75a[_0x88ed('0x37')]){_0x592c55[_0x88ed('0x15')][_0x88ed('0x39')]({'id':_0x41d75a[_0x88ed('0x3a')],'value':_0x41d75a[_0x88ed('0x38')]['toString']()});}else if(_0x41d75a[_0x88ed('0x34')]===_0x88ed('0x3b')&&_0x41d75a['variableName']&&_0x41d75a['idField']&&_0x41d75a['customField']){_0x1b8ab8[_0x41d75a[_0x88ed('0x3c')]]&&_0x592c55[_0x88ed('0x15')][_0x88ed('0x39')]({'id':_0x41d75a['idField'],'value':_0x1b8ab8[_0x41d75a[_0x88ed('0x3c')]][_0x88ed('0x2d')]()});}else if(_0x41d75a['type']===_0x88ed('0x3d')&&_0x41d75a['Variable']&&_0x41d75a['Variable'][_0x88ed('0x14')]&&_0x41d75a[_0x88ed('0x3a')]&&_0x41d75a[_0x88ed('0x37')]){_0x1b8ab8[_0x41d75a[_0x88ed('0x3e')]['name'][_0x88ed('0x3f')]()]&&_0x592c55[_0x88ed('0x15')]['push']({'id':_0x41d75a[_0x88ed('0x3a')],'value':_0x1b8ab8[_0x41d75a[_0x88ed('0x3e')][_0x88ed('0x14')]['toLowerCase']()][_0x88ed('0x2d')]()});}});}return _0x592c55;}exports[_0x88ed('0x40')]=function(_0x4330f1,_0x8f929,_0x4268b7,_0xda609e,_0x263075,_0x1adea7){var _0x581cc1,_0x4b00cb;_0x1adea7[_0x88ed('0x1b')]=intUtil[_0x88ed('0x41')](_0x1adea7[_0x88ed('0x1b')]);_0x1adea7[_0x88ed('0x42')]=intUtil[_0x88ed('0x41')](_0x1adea7[_0x88ed('0x42')]);if(_0x263075&&_0x263075[_0x88ed('0x43')]){logger[_0x88ed('0xa')]('[QUEUE]',_0x88ed('0x44'));_0x8f929['recordingURL']=util[_0x88ed('0x19')](_0x88ed('0x45'),_0x1adea7[_0x88ed('0x42')],_0x8f929[_0x88ed('0x46')],md5(_0x8f929[_0x88ed('0x46')]));}else{_0x8f929['recordingURL']='';}headers['Authorization']=getAuth(_0x1adea7);return getUser(_0x1adea7,_0xda609e['email'])[_0x88ed('0x1d')](function(_0x4c8552){_0x581cc1=_0x4c8552;logger[_0x88ed('0xa')]('The\x20User\x20ID\x20is:',_0x581cc1['id']);return getEndUser(_0x1adea7,_0x8f929[_0x88ed('0x47')],_0x8f929[_0x88ed('0xe')]);})['then'](function(_0x1bb21e){_0x4b00cb=_0x1bb21e;logger[_0x88ed('0xa')](_0x88ed('0x48'),_0x4b00cb['id']);return getTicket(_0x1adea7,_0x581cc1,_0x4b00cb,_0x4268b7,_0x8f929);})[_0x88ed('0x1d')](function(_0x52b178){if(_0x52b178&&_0x52b178['id']){logger[_0x88ed('0xa')](_0x88ed('0x49'));logger[_0x88ed('0xa')]('The\x20Ticket\x20ID\x20is:',_0x52b178['id']);logger[_0x88ed('0xa')](_0x88ed('0x4a'),_0x88ed('0x4b'));emit(util['format'](_0x88ed('0x4c'),_0xda609e[_0x88ed('0x14')]),_0x88ed('0x4d'),{'uri':util[_0x88ed('0x19')](_0x88ed('0x4e'),_0x1adea7['remoteUri'],_0x52b178['id'])});}})[_0x88ed('0x4f')](function(_0x50d21a){logger[_0x88ed('0x50')](_0x88ed('0x4a'),JSON[_0x88ed('0x51')](_0x50d21a));});};exports[_0x88ed('0x52')]=function(_0x482f9a,_0x212507,_0x4bd661,_0x2b0453,_0x205934,_0x26aa9f,_0x41576a){var _0x292298,_0x444a4a;_0x26aa9f[_0x88ed('0x1b')]=intUtil[_0x88ed('0x41')](_0x26aa9f['remoteUri']);_0x26aa9f[_0x88ed('0x42')]=intUtil['stripTrailingSlash'](_0x26aa9f[_0x88ed('0x42')]);if(_0x41576a&&_0x41576a[_0x88ed('0x53')]&&_0x41576a[_0x88ed('0x53')]!==_0x88ed('0x54')){logger['info'](_0x88ed('0x55'),_0x88ed('0x44'));_0x212507[_0x88ed('0x56')]=util[_0x88ed('0x19')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x26aa9f[_0x88ed('0x42')],_0x212507[_0x88ed('0x46')],md5(_0x212507[_0x88ed('0x46')]));}headers['Authorization']=getAuth(_0x26aa9f);return getUser(_0x26aa9f,_0x2b0453[_0x88ed('0x57')])[_0x88ed('0x1d')](function(_0x487435){_0x292298=_0x487435;logger[_0x88ed('0xa')](_0x88ed('0x58'),_0x292298['id']);return getEndUser(_0x26aa9f,_0x212507['destcalleridname'],_0x212507[_0x88ed('0x59')]);})[_0x88ed('0x1d')](function(_0x47717e){_0x444a4a=_0x47717e;logger[_0x88ed('0xa')](_0x88ed('0x48'),_0x444a4a['id']);return getTicket(_0x26aa9f,_0x292298,_0x444a4a,_0x4bd661,_0x212507);})[_0x88ed('0x1d')](function(_0x15e2d1){if(_0x15e2d1&&_0x15e2d1['id']){logger[_0x88ed('0xa')](_0x88ed('0x49'));logger[_0x88ed('0xa')]('The\x20Ticket\x20ID\x20is:',_0x15e2d1['id']);logger[_0x88ed('0xa')](_0x88ed('0x55'),_0x88ed('0x4b'));emit(util[_0x88ed('0x19')](_0x88ed('0x4c'),_0x2b0453[_0x88ed('0x14')]),'trigger:browser:url',{'uri':util[_0x88ed('0x19')]('%s/helpdesk/tickets/%d',_0x26aa9f['remoteUri'],_0x15e2d1['id'])});}})[_0x88ed('0x4f')](function(_0x131ac8){logger['error'](_0x88ed('0x55'),JSON[_0x88ed('0x51')](_0x131ac8));});};exports[_0x88ed('0x5a')]=function(_0x1a3e5c,_0x2f07e3,_0x3272ae,_0x2defdc,_0x4f049a,_0x586cf7){var _0x2a4644,_0x5bf13b;_0x586cf7[_0x88ed('0x1b')]=intUtil['stripTrailingSlash'](_0x586cf7[_0x88ed('0x1b')]);_0x586cf7[_0x88ed('0x42')]=intUtil[_0x88ed('0x41')](_0x586cf7[_0x88ed('0x42')]);if(_0x4f049a&&_0x4f049a['monitor_format']){logger['info'](_0x88ed('0x5b'),_0x88ed('0x44'));_0x2f07e3['recordingURL']=util['format'](_0x88ed('0x45'),_0x586cf7['serverUrl'],_0x2f07e3[_0x88ed('0x46')],md5(_0x2f07e3[_0x88ed('0x46')]));}else{_0x2f07e3['recordingURL']='';}headers['Authorization']=getAuth(_0x586cf7);return getUser(_0x586cf7,'')[_0x88ed('0x1d')](function(_0x58de44){_0x2a4644=_0x58de44;logger[_0x88ed('0xa')](_0x88ed('0x58'),_0x2a4644['id']);return getEndUser(_0x586cf7,_0x2f07e3['calleridname'],_0x2f07e3[_0x88ed('0xe')]);})[_0x88ed('0x1d')](function(_0x523194){_0x5bf13b=_0x523194;logger[_0x88ed('0xa')]('The\x20Enduser\x20ID\x20is:',_0x5bf13b['id']);return getTicket(_0x586cf7,_0x2a4644,_0x5bf13b,_0x3272ae,_0x2f07e3);})[_0x88ed('0x1d')](function(_0x5747be){if(_0x5747be){logger[_0x88ed('0xa')]('Ticket\x20created!');logger[_0x88ed('0xa')](_0x88ed('0x5c'),_0x5747be['id']);}})['catch'](function(_0xdf1acf){logger[_0x88ed('0x50')](_0x88ed('0x5b'),JSON['stringify'](_0xdf1acf));});};
\ No newline at end of file
index efb045f..f77a19a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6f37=['toLowerCase','Configurations','data3','queue','outbound','log','abandoned','salesforce','vtiger','dynamics365','unknown\x20integration','../../../../config/logger','error','[EXEC]','format','%s\x20account\x20#%s\x20not\x20found','data2','lodash','util','./zendesk','./salesforce','./sugarcrm','./freshdesk','./zoho','./desk','./vtiger','./dynamics365','zendesk','sugarcrm','freshdesk','zoho','desk','servicenow','data1'];(function(_0x5a3348,_0x108f3d){var _0x190597=function(_0x10428c){while(--_0x10428c){_0x5a3348['push'](_0x5a3348['shift']());}};_0x190597(++_0x108f3d);}(_0x6f37,0x1ed));var _0x76f3=function(_0x3af6d3,_0xd6ff2e){_0x3af6d3=_0x3af6d3-0x0;var _0xf0c5a8=_0x6f37[_0x3af6d3];return _0xf0c5a8;};'use strict';var _=require(_0x76f3('0x0'));var util=require(_0x76f3('0x1'));var zendesk=require(_0x76f3('0x2'));var salesforce=require(_0x76f3('0x3'));var sugarcrm=require(_0x76f3('0x4'));var freshdesk=require(_0x76f3('0x5'));var zoho=require(_0x76f3('0x6'));var desk=require(_0x76f3('0x7'));var vtiger=require(_0x76f3('0x8'));var servicenow=require('./servicenow');var dynamics365=require(_0x76f3('0x9'));var integrations=[_0x76f3('0xa'),'salesforce',_0x76f3('0xb'),_0x76f3('0xc'),_0x76f3('0xd'),_0x76f3('0xe'),'vtiger',_0x76f3('0xf'),'dynamics365'];exports['exec']=function(_0x5e63af,_0x2e0bc1,_0x581ef2,_0x5e35e2,_0x3fa0f8,_0x42ab54){if(_0x581ef2){if(_['includes'](integrations,_0x5e63af[_0x76f3('0x10')][_0x76f3('0x11')]())){try{var _0x1c4f5e=null;var _0x4b9d63='';var _0x1f1001=_0x581ef2[_0x5e63af[_0x76f3('0x10')][_0x76f3('0x11')]()];if(_0x1f1001){var _0x5502f8=_0x1f1001[_0x5e63af['data2']];if(_0x5502f8){var _0xd92236=_['find'](_0x5502f8[_0x76f3('0x12')],{'id':parseInt(_0x5e63af[_0x76f3('0x13')],0xa)});if(_0xd92236){if(_0x5e35e2){if(_0x3fa0f8&&_0x2e0bc1[_0x76f3('0x14')]){_0x4b9d63='queue';}else if(_0x2e0bc1['routeId']){_0x4b9d63=_0x76f3('0x15');}else{console[_0x76f3('0x16')]('EVENT\x20UNKNOWN',_0x2e0bc1);}}else{_0x4b9d63=_0x76f3('0x17');}switch(_0x5e63af[_0x76f3('0x10')][_0x76f3('0x11')]()){case _0x76f3('0xa'):zendesk[_0x4b9d63](_0x5e63af,_0x2e0bc1,_0xd92236,_0x5e35e2,_0x3fa0f8,_0x5502f8,_0x42ab54);break;case _0x76f3('0x18'):salesforce[_0x4b9d63](_0x5e63af,_0x2e0bc1,_0xd92236,_0x5e35e2,_0x3fa0f8,_0x5502f8,_0x42ab54);break;case _0x76f3('0xb'):sugarcrm[_0x4b9d63](_0x5e63af,_0x2e0bc1,_0xd92236,_0x5e35e2,_0x3fa0f8,_0x5502f8,_0x42ab54);break;case _0x76f3('0xc'):freshdesk[_0x4b9d63](_0x5e63af,_0x2e0bc1,_0xd92236,_0x5e35e2,_0x3fa0f8,_0x5502f8,_0x42ab54);break;case _0x76f3('0xd'):zoho[_0x4b9d63](_0x5e63af,_0x2e0bc1,_0xd92236,_0x5e35e2,_0x3fa0f8,_0x5502f8,_0x42ab54);break;case _0x76f3('0xe'):desk[_0x4b9d63](_0x5e63af,_0x2e0bc1,_0xd92236,_0x5e35e2,_0x3fa0f8,_0x5502f8,_0x42ab54);break;case _0x76f3('0x19'):vtiger[_0x4b9d63](_0x5e63af,_0x2e0bc1,_0xd92236,_0x5e35e2,_0x3fa0f8,_0x5502f8,_0x42ab54);break;case _0x76f3('0xf'):servicenow['cs'](_0x5e63af,_0x2e0bc1,_0xd92236,_0x5e35e2,_0x3fa0f8,_0x5502f8,_0x42ab54,_0x4b9d63);break;case _0x76f3('0x1a'):dynamics365['cs'](_0x5e63af,_0x2e0bc1,_0xd92236,_0x5e35e2,_0x3fa0f8,_0x5502f8,_0x42ab54,_0x4b9d63);break;default:console[_0x76f3('0x16')](_0x76f3('0x1b'));}}else{_0x1c4f5e=require(_0x76f3('0x1c'))(_0x5e63af[_0x76f3('0x10')][_0x76f3('0x11')]());_0x1c4f5e[_0x76f3('0x1d')](_0x76f3('0x1e'),util[_0x76f3('0x1f')]('%s\x20configuration\x20#%s\x20not\x20found',_0x5e63af[_0x76f3('0x10')][_0x76f3('0x11')](),_0x5e63af[_0x76f3('0x13')]));}}else{_0x1c4f5e=require('../../../../config/logger')(_0x5e63af['data1'][_0x76f3('0x11')]());_0x1c4f5e[_0x76f3('0x1d')]('[EXEC]',util['format'](_0x76f3('0x20'),_0x5e63af[_0x76f3('0x10')][_0x76f3('0x11')](),_0x5e63af[_0x76f3('0x21')]));}}else{}}catch(_0x7c741a){console[_0x76f3('0x1d')](_0x7c741a);}}}};
\ No newline at end of file
+var _0x31c8=['routeId','EVENT\x20UNKNOWN','abandoned','salesforce','freshdesk','servicenow','dynamics365','log','unknown\x20integration','../../../../config/logger','error','[EXEC]','format','%s\x20configuration\x20#%s\x20not\x20found','data3','%s\x20account\x20#%s\x20not\x20found','lodash','util','./zendesk','./sugarcrm','./freshdesk','./zoho','./desk','./vtiger','./servicenow','./dynamics365','zendesk','sugarcrm','zoho','desk','vtiger','exec','includes','data1','toLowerCase','data2','Configurations','queue'];(function(_0x494e4d,_0x428f48){var _0x127c97=function(_0x15070d){while(--_0x15070d){_0x494e4d['push'](_0x494e4d['shift']());}};_0x127c97(++_0x428f48);}(_0x31c8,0x1d8));var _0x831c=function(_0x4e1397,_0x45aadb){_0x4e1397=_0x4e1397-0x0;var _0x2f7c4f=_0x31c8[_0x4e1397];return _0x2f7c4f;};'use strict';var _=require(_0x831c('0x0'));var util=require(_0x831c('0x1'));var zendesk=require(_0x831c('0x2'));var salesforce=require('./salesforce');var sugarcrm=require(_0x831c('0x3'));var freshdesk=require(_0x831c('0x4'));var zoho=require(_0x831c('0x5'));var desk=require(_0x831c('0x6'));var vtiger=require(_0x831c('0x7'));var servicenow=require(_0x831c('0x8'));var dynamics365=require(_0x831c('0x9'));var integrations=[_0x831c('0xa'),'salesforce',_0x831c('0xb'),'freshdesk',_0x831c('0xc'),_0x831c('0xd'),_0x831c('0xe'),'servicenow','dynamics365'];exports[_0x831c('0xf')]=function(_0x2ecbae,_0x4f2661,_0x897de0,_0x56d6d7,_0x250d8c,_0x292693){if(_0x897de0){if(_[_0x831c('0x10')](integrations,_0x2ecbae[_0x831c('0x11')][_0x831c('0x12')]())){try{var _0x39a55b=null;var _0x9ced0d='';var _0x49a92e=_0x897de0[_0x2ecbae['data1'][_0x831c('0x12')]()];if(_0x49a92e){var _0x208aee=_0x49a92e[_0x2ecbae[_0x831c('0x13')]];if(_0x208aee){var _0x1b7e2c=_['find'](_0x208aee[_0x831c('0x14')],{'id':parseInt(_0x2ecbae['data3'],0xa)});if(_0x1b7e2c){if(_0x56d6d7){if(_0x250d8c&&_0x4f2661[_0x831c('0x15')]){_0x9ced0d=_0x831c('0x15');}else if(_0x4f2661[_0x831c('0x16')]){_0x9ced0d='outbound';}else{console['log'](_0x831c('0x17'),_0x4f2661);}}else{_0x9ced0d=_0x831c('0x18');}switch(_0x2ecbae[_0x831c('0x11')][_0x831c('0x12')]()){case _0x831c('0xa'):zendesk[_0x9ced0d](_0x2ecbae,_0x4f2661,_0x1b7e2c,_0x56d6d7,_0x250d8c,_0x208aee,_0x292693);break;case _0x831c('0x19'):salesforce[_0x9ced0d](_0x2ecbae,_0x4f2661,_0x1b7e2c,_0x56d6d7,_0x250d8c,_0x208aee,_0x292693);break;case'sugarcrm':sugarcrm[_0x9ced0d](_0x2ecbae,_0x4f2661,_0x1b7e2c,_0x56d6d7,_0x250d8c,_0x208aee,_0x292693);break;case _0x831c('0x1a'):freshdesk[_0x9ced0d](_0x2ecbae,_0x4f2661,_0x1b7e2c,_0x56d6d7,_0x250d8c,_0x208aee,_0x292693);break;case _0x831c('0xc'):zoho[_0x9ced0d](_0x2ecbae,_0x4f2661,_0x1b7e2c,_0x56d6d7,_0x250d8c,_0x208aee,_0x292693);break;case _0x831c('0xd'):desk[_0x9ced0d](_0x2ecbae,_0x4f2661,_0x1b7e2c,_0x56d6d7,_0x250d8c,_0x208aee,_0x292693);break;case _0x831c('0xe'):vtiger[_0x9ced0d](_0x2ecbae,_0x4f2661,_0x1b7e2c,_0x56d6d7,_0x250d8c,_0x208aee,_0x292693);break;case _0x831c('0x1b'):servicenow['cs'](_0x2ecbae,_0x4f2661,_0x1b7e2c,_0x56d6d7,_0x250d8c,_0x208aee,_0x292693,_0x9ced0d);break;case _0x831c('0x1c'):dynamics365['cs'](_0x2ecbae,_0x4f2661,_0x1b7e2c,_0x56d6d7,_0x250d8c,_0x208aee,_0x292693,_0x9ced0d);break;default:console[_0x831c('0x1d')](_0x831c('0x1e'));}}else{_0x39a55b=require(_0x831c('0x1f'))(_0x2ecbae[_0x831c('0x11')][_0x831c('0x12')]());_0x39a55b[_0x831c('0x20')](_0x831c('0x21'),util[_0x831c('0x22')](_0x831c('0x23'),_0x2ecbae[_0x831c('0x11')][_0x831c('0x12')](),_0x2ecbae[_0x831c('0x24')]));}}else{_0x39a55b=require(_0x831c('0x1f'))(_0x2ecbae['data1'][_0x831c('0x12')]());_0x39a55b['error']('[EXEC]',util[_0x831c('0x22')](_0x831c('0x25'),_0x2ecbae[_0x831c('0x11')]['toLowerCase'](),_0x2ecbae['data2']));}}else{}}catch(_0x20e11f){console[_0x831c('0x20')](_0x20e11f);}}}};
\ No newline at end of file
index 92c4288..4fae7ac 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8b0=['Agent\x20%s\x20not\x20found.\x20Switch\x20to\x20the\x20admin\x20account.','identity','resolve','user_id','display_name','info','Searching\x20enduser\x20with\x20phone\x20%s.\x20Serching\x20method\x20used\x20%s.','moduleSearch','Lead','contact','lead','Contact','Name','Enduser\x20with\x20phone\x20%s\x20found.','Caller\x20-\x20%s','moduleCreate','Enduser\x20with\x20phone\x20%s.\x20Creating\x20method\x20used\x20%s.','No\x20Company','upperFirst','forEach','type','string','idField','content','toString','variableName','Variable','name','toLowerCase','password','remoteUri','https://login.salesforce.com','clientId','login','username','Connection\x20established.','queue','serverUrl','stripTrailingSlash','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','calleridname','Fields','[QUEUE]\x20Ticket\x20%s\x20created','[QUEUE]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.','user:%s','format','trigger:browser:url','%s/%s/e','[QUEUE]\x20Salesforce\x20account\x20type\x20not\x20recognized.','catch','stringify','outbound','recordingFormat','none','email','destcalleridname','destcalleridnum','[OUTBOUND]\x20Ticket\x20%s\x20created.','[OUTBOUND]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.','integrationTab','newTab','instanceUrl','error','[OUTBOUND]','monitor_format','[ABANDONED]','[ABANDONED]\x20Ticket\x20%s\x20created.','[ABANDONED]\x20Integration\x20account\x20type\x20%s.','lodash','request-promise','jsforce','util','ioredis','./util','../../../../config/environment','redis','defaults','socket.io-emitter','emit','ticketType','Task','assign','utc','getString','Subjects','Descriptions','WhoId','Case','ContactId','sobject','isNil','validateEmail','find','execute','then','length','Agent\x20%s\x20found.'];(function(_0x512c83,_0x42a67a){var _0x1f7f25=function(_0x1e656c){while(--_0x1e656c){_0x512c83['push'](_0x512c83['shift']());}};_0x1f7f25(++_0x42a67a);}(_0xd8b0,0xad));var _0x0d8b=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0xd8b0[_0xa464c9];return _0x3d73c4;};'use strict';var _=require(_0x0d8b('0x0'));var rp=require(_0x0d8b('0x1'));var moment=require('moment');var BPromise=require('bluebird');var md5=require('md5');var jsforce=require(_0x0d8b('0x2'));var util=require(_0x0d8b('0x3'));var Redis=require(_0x0d8b('0x4'));var intUtil=require(_0x0d8b('0x5'));var config=require(_0x0d8b('0x6'));var logger=require('../../../../config/logger')('salesforce');config[_0x0d8b('0x7')]=_[_0x0d8b('0x8')](config[_0x0d8b('0x7')],{'host':'localhost','port':0x18eb});var io=require(_0x0d8b('0x9'))(new Redis(config[_0x0d8b('0x7')]));function emit(_0x58e4e2,_0x129310,_0x348e65){io['to'](_0x58e4e2)[_0x0d8b('0xa')](_0x129310,_0x348e65);}function getTicket(_0x1f4800,_0x28ff7f,_0x1cac62,_0x2c5e9e,_0x28f87c,_0x48fa16,_0x3c4bfa,_0x4e0269){var _0x4225c4={};if(_0x2c5e9e[_0x0d8b('0xb')]===_0x0d8b('0xc')){_0x4225c4=Object[_0x0d8b('0xd')]({},{'OwnerId':_0x28ff7f['id'],'ActivityDate':moment[_0x0d8b('0xe')](),'IsReminderSet':![],'IsRecurrence':![],'Subject':intUtil[_0x0d8b('0xf')](_0x2c5e9e[_0x0d8b('0x10')],_0x28f87c,'\x20'),'Description':intUtil[_0x0d8b('0xf')](_0x2c5e9e[_0x0d8b('0x11')],_0x28f87c,'\x0a')},getCustomFields(_0x48fa16,_0x28f87c));if(_0x1cac62){_0x4225c4[_0x0d8b('0x12')]=_0x1cac62['id'];}}else if(_0x2c5e9e[_0x0d8b('0xb')]===_0x0d8b('0x13')){_0x4225c4=Object[_0x0d8b('0xd')]({},{'OwnerId':_0x28ff7f['id'],'Subject':intUtil[_0x0d8b('0xf')](_0x2c5e9e['Subjects'],_0x28f87c,'\x20'),'Description':intUtil[_0x0d8b('0xf')](_0x2c5e9e[_0x0d8b('0x11')],_0x28f87c,'\x0a')},getCustomFields(_0x48fa16,_0x28f87c));if(_0x1cac62){_0x4225c4[_0x0d8b('0x14')]=_0x1cac62['id'];}}return _0x3c4bfa[_0x0d8b('0x15')](_0x2c5e9e[_0x0d8b('0xb')])['create'](_0x4225c4);}function getUser(_0x106a01,_0x4586c2,_0x2fd0fc){if(!_[_0x0d8b('0x16')](_0x4586c2)&&intUtil[_0x0d8b('0x17')](_0x4586c2)){var _0x18dd2d={'Email':_0x4586c2};var _0x264b39={'Id':!![],'Username':!![],'Name':!![],'Email':!![]};return _0x2fd0fc[_0x0d8b('0x15')]('User')[_0x0d8b('0x18')](_0x18dd2d,_0x264b39)[_0x0d8b('0x19')]()[_0x0d8b('0x1a')](function(_0x143372){if(_0x143372[_0x0d8b('0x1b')]){var _0x5b709c=_[_0x0d8b('0x18')](_0x143372,function(_0x352c17){return _0x352c17['Email']===_0x4586c2;});if(_0x5b709c){logger['info'](_0x0d8b('0x1c'),_0x4586c2);return BPromise['resolve']({'id':_0x5b709c['Id'],'name':_0x5b709c['Name']});}}else{logger['info'](_0x0d8b('0x1d'),_0x4586c2);return _0x2fd0fc[_0x0d8b('0x1e')]()[_0x0d8b('0x1a')](function(_0x38efc8){return BPromise[_0x0d8b('0x1f')]({'id':_0x38efc8[_0x0d8b('0x20')],'name':_0x38efc8[_0x0d8b('0x21')]});});}});}else{logger[_0x0d8b('0x22')](_0x0d8b('0x1d'),_0x4586c2);return _0x2fd0fc['identity']()[_0x0d8b('0x1a')](function(_0x4463ee){return BPromise['resolve']({'id':_0x4463ee[_0x0d8b('0x20')],'name':_0x4463ee['display_name']});});}}function getEndUser(_0x3dd149,_0x234bdd,_0xa2af02,_0x4fe6f9,_0x59a905){var _0x28f639={'Phone':_0x4fe6f9};var _0x3ef745={'Id':!![],'Name':!![],'Phone':!![]};return BPromise['resolve']()[_0x0d8b('0x1a')](function(){if(_0x234bdd['ticketType']===_0x0d8b('0xc')){logger['info'](_0x0d8b('0x23'),_0x4fe6f9,_0x234bdd['moduleSearch']);switch(_0x234bdd[_0x0d8b('0x24')]){case'contact_lead':return _0x59a905[_0x0d8b('0x15')]('Contact')[_0x0d8b('0x18')](_0x28f639,_0x3ef745)[_0x0d8b('0x19')]()[_0x0d8b('0x1a')](function(_0x56120a){if(_0x56120a&&_0x56120a['length']){return _0x56120a;}else{return _0x59a905['sobject'](_0x0d8b('0x25'))['find'](_0x28f639,_0x3ef745);}});case _0x0d8b('0x26'):return _0x59a905['sobject']('Contact')[_0x0d8b('0x18')](_0x28f639,_0x3ef745)[_0x0d8b('0x19')]();case _0x0d8b('0x27'):return _0x59a905[_0x0d8b('0x15')](_0x0d8b('0x25'))[_0x0d8b('0x18')](_0x28f639,_0x3ef745);default:return null;}}else if(_0x234bdd[_0x0d8b('0xb')]===_0x0d8b('0x13')){logger['info'](_0x0d8b('0x23'),_0x4fe6f9,_0x0d8b('0x26'));return _0x59a905['sobject'](_0x0d8b('0x28'))[_0x0d8b('0x18')](_0x28f639,_0x3ef745)[_0x0d8b('0x19')]();}})['then'](function(_0x113318){if(_0x113318&&_0x113318[_0x0d8b('0x1b')]){var _0x206157=_[_0x0d8b('0x18')](_0x113318,function(_0x933e01){return _0x933e01['Phone']===_0x4fe6f9;});if(_0x206157){return BPromise[_0x0d8b('0x1f')]({'id':_0x206157['Id'],'name':_0x206157[_0x0d8b('0x29')],'phone':_0x206157['Phone']});}}})[_0x0d8b('0x1a')](function(_0x3cc3ee){if(_0x3cc3ee){logger[_0x0d8b('0x22')](_0x0d8b('0x2a'),_0x4fe6f9);return BPromise[_0x0d8b('0x1f')](_0x3cc3ee);}else{logger['info']('Enduser\x20with\x20phone\x20%s\x20not\x20found.',_0x4fe6f9);var _0x41b4f9={'LastName':_0xa2af02!=='<unknown>'?_0xa2af02:util['format'](_0x0d8b('0x2b'),_0x4fe6f9),'Phone':_0x4fe6f9};if(_0x234bdd[_0x0d8b('0x2c')]){if(_0x234bdd[_0x0d8b('0x2c')]===_0x0d8b('0x26')){logger[_0x0d8b('0x22')](_0x0d8b('0x2d'),_0x4fe6f9,_0x234bdd['moduleCreate']);}else if(_0x234bdd[_0x0d8b('0x2c')]===_0x0d8b('0x27')&&_0x234bdd[_0x0d8b('0xb')]===_0x0d8b('0xc')){logger[_0x0d8b('0x22')](_0x0d8b('0x2d'),_0x4fe6f9,_0x234bdd[_0x0d8b('0x2c')]);_0x41b4f9['Company']=_0x0d8b('0x2e');}else{return null;}}return _0x59a905[_0x0d8b('0x15')](_[_0x0d8b('0x2f')](_0x234bdd[_0x0d8b('0x2c')]))['create'](_0x41b4f9);}});}function getCustomFields(_0xe0bf42,_0x4b4bde){var _0x37b26c={};if(_0xe0bf42[_0x0d8b('0x1b')]>0x0){_[_0x0d8b('0x30')](_0xe0bf42,function(_0x26ac10){if(_0x26ac10[_0x0d8b('0x31')]===_0x0d8b('0x32')&&_0x26ac10[_0x0d8b('0x33')]){_0x37b26c[_0x26ac10[_0x0d8b('0x33')]]=_0x26ac10[_0x0d8b('0x34')][_0x0d8b('0x35')]();}else if(_0x26ac10['type']==='variable'&&_0x26ac10['variableName']&&_0x26ac10['idField']){_0x4b4bde[_0x26ac10['variableName']]&&(_0x37b26c[_0x26ac10[_0x0d8b('0x33')]]=_0x4b4bde[_0x26ac10[_0x0d8b('0x36')]][_0x0d8b('0x35')]());}else if(_0x26ac10['type']==='customVariable'&&_0x26ac10[_0x0d8b('0x37')]&&_0x26ac10[_0x0d8b('0x37')][_0x0d8b('0x38')]&&_0x26ac10['idField']){_0x4b4bde[_0x26ac10[_0x0d8b('0x37')][_0x0d8b('0x38')]['toLowerCase']()]&&(_0x37b26c[_0x26ac10['idField']]=_0x4b4bde[_0x26ac10[_0x0d8b('0x37')]['name'][_0x0d8b('0x39')]()]['toString']());}});}return _0x37b26c;}function getConnection(_0x53f643){var _0x30ccee=_0x53f643[_0x0d8b('0x3a')]['concat'](_0x53f643['securityToken']);var _0x59b8e9=new jsforce['Connection']({'oauth2':{'loginUrl':_0x53f643[_0x0d8b('0x3b')]||_0x0d8b('0x3c'),'clientId':_0x53f643[_0x0d8b('0x3d')],'clientSecret':_0x53f643['clientSecret']}});return _0x59b8e9[_0x0d8b('0x3e')](_0x53f643[_0x0d8b('0x3f')],_0x30ccee)[_0x0d8b('0x1a')](function(){logger[_0x0d8b('0x22')](_0x0d8b('0x40'));return _0x59b8e9;});}exports[_0x0d8b('0x41')]=function(_0x11d22b,_0x1d5067,_0x384a5e,_0x1f2077,_0x44d54b,_0x820885){var _0x84ef1c,_0x3e569b,_0x570af8,_0xdfcf32;_0x820885[_0x0d8b('0x42')]=intUtil[_0x0d8b('0x43')](_0x820885[_0x0d8b('0x42')]);_0x820885['remoteUri']=intUtil[_0x0d8b('0x43')](_0x820885['remoteUri']);if(_0x44d54b&&_0x44d54b['monitor_format']){logger[_0x0d8b('0x22')](_0x0d8b('0x44'),_0x0d8b('0x45'));_0x1d5067[_0x0d8b('0x46')]=util['format'](_0x0d8b('0x47'),_0x820885[_0x0d8b('0x42')],_0x1d5067[_0x0d8b('0x48')],md5(_0x1d5067[_0x0d8b('0x48')]));}else{_0x1d5067[_0x0d8b('0x46')]='';}return getConnection(_0x820885)['then'](function(_0x5c0824){_0xdfcf32=_0x5c0824;return getUser(_0x820885,_0x1f2077['email'],_0xdfcf32);})['then'](function(_0x368ede){_0x84ef1c=_0x368ede;return getEndUser(_0x820885,_0x384a5e,_0x1d5067[_0x0d8b('0x49')],_0x1d5067['calleridnum'],_0xdfcf32);})['then'](function(_0x44c5c1){_0x3e569b=_0x44c5c1;return getTicket(_0x820885,_0x84ef1c,_0x3e569b,_0x384a5e,_0x1d5067,_0x384a5e[_0x0d8b('0x4a')],_0xdfcf32,'queue');})['then'](function(_0x900906){_0x570af8=_0x900906;logger[_0x0d8b('0x22')](_0x0d8b('0x4b'),_0x570af8['id']);logger[_0x0d8b('0x22')](_0x0d8b('0x4c'),_0x570af8['id'],_0x1f2077['name'],_0x820885[_0x0d8b('0x31')]);switch(_0x820885[_0x0d8b('0x31')]){case'integrationTab':emit(util['format'](_0x0d8b('0x4d'),_0x1f2077[_0x0d8b('0x38')]),'trigger:salesforce:display',{'recordId':_0x570af8['id']});break;case'newTab':emit(util[_0x0d8b('0x4e')](_0x0d8b('0x4d'),_0x1f2077[_0x0d8b('0x38')]),_0x0d8b('0x4f'),{'uri':util['format'](_0x0d8b('0x50'),_0xdfcf32['instanceUrl'],_0x570af8['id'])});break;default:logger['error'](_0x0d8b('0x51'));}})[_0x0d8b('0x52')](function(_0x54aa03){logger['error'](_0x0d8b('0x44'),JSON[_0x0d8b('0x53')](_0x54aa03));});};exports[_0x0d8b('0x54')]=function(_0x2c1eb0,_0x3afc3a,_0xb66e76,_0x3978e5,_0x3bead7,_0x5418d8,_0x24a859){var _0x37dc9f,_0x3a3d33,_0x3c7efb,_0x3fb9ea;_0x5418d8[_0x0d8b('0x42')]=intUtil[_0x0d8b('0x43')](_0x5418d8[_0x0d8b('0x42')]);_0x5418d8[_0x0d8b('0x3b')]=intUtil['stripTrailingSlash'](_0x5418d8[_0x0d8b('0x3b')]);if(_0x24a859&&_0x24a859[_0x0d8b('0x55')]&&_0x24a859[_0x0d8b('0x55')]!==_0x0d8b('0x56')){logger[_0x0d8b('0x22')]('[OUTBOUND]',_0x0d8b('0x45'));_0x3afc3a[_0x0d8b('0x46')]=util[_0x0d8b('0x4e')](_0x0d8b('0x47'),_0x5418d8[_0x0d8b('0x42')],_0x3afc3a['uniqueid'],md5(_0x3afc3a['uniqueid']));}return getConnection(_0x5418d8)[_0x0d8b('0x1a')](function(_0x291b83){_0x3fb9ea=_0x291b83;return getUser(_0x5418d8,_0x3978e5[_0x0d8b('0x57')],_0x3fb9ea);})[_0x0d8b('0x1a')](function(_0x5a70bd){_0x37dc9f=_0x5a70bd;return getEndUser(_0x5418d8,_0xb66e76,_0x3afc3a[_0x0d8b('0x58')],_0x3afc3a[_0x0d8b('0x59')],_0x3fb9ea);})[_0x0d8b('0x1a')](function(_0x5952dd){_0x3a3d33=_0x5952dd;return getTicket(_0x5418d8,_0x37dc9f,_0x3a3d33,_0xb66e76,_0x3afc3a,_0xb66e76[_0x0d8b('0x4a')],_0x3fb9ea,'outbound');})[_0x0d8b('0x1a')](function(_0x3ed63e){_0x3c7efb=_0x3ed63e;logger[_0x0d8b('0x22')](_0x0d8b('0x5a'),_0x3c7efb['id']);logger[_0x0d8b('0x22')](_0x0d8b('0x5b'),_0x3c7efb['id'],_0x3978e5['name'],_0x5418d8[_0x0d8b('0x31')]);switch(_0x5418d8['type']){case _0x0d8b('0x5c'):emit(util[_0x0d8b('0x4e')](_0x0d8b('0x4d'),_0x3978e5[_0x0d8b('0x38')]),'trigger:salesforce:display',{'recordId':_0x3c7efb['id']});break;case _0x0d8b('0x5d'):emit(util[_0x0d8b('0x4e')](_0x0d8b('0x4d'),_0x3978e5[_0x0d8b('0x38')]),_0x0d8b('0x4f'),{'uri':util[_0x0d8b('0x4e')](_0x0d8b('0x50'),_0x3fb9ea[_0x0d8b('0x5e')],_0x3c7efb['id'])});break;default:logger[_0x0d8b('0x5f')](_0x0d8b('0x60'),'Salesforce\x20account\x20type\x20not\x20recognized');}})['catch'](function(_0x6388ae){logger[_0x0d8b('0x5f')]('[OUTBOUND]',JSON[_0x0d8b('0x53')](_0x6388ae));});};exports['abandoned']=function(_0x5cc960,_0x22ee20,_0x1c4e96,_0x4f4b4d,_0x587128,_0x1900e3){var _0x1c007b,_0x70e4b2,_0x435090,_0x2ab72b;_0x1900e3[_0x0d8b('0x42')]=intUtil[_0x0d8b('0x43')](_0x1900e3['serverUrl']);_0x1900e3[_0x0d8b('0x3b')]=intUtil['stripTrailingSlash'](_0x1900e3[_0x0d8b('0x3b')]);if(_0x587128&&_0x587128[_0x0d8b('0x61')]){logger[_0x0d8b('0x22')](_0x0d8b('0x62'),'Recording\x20is\x20enabled!');_0x22ee20[_0x0d8b('0x46')]=util['format'](_0x0d8b('0x47'),_0x1900e3[_0x0d8b('0x42')],_0x22ee20[_0x0d8b('0x48')],md5(_0x22ee20[_0x0d8b('0x48')]));}else{_0x22ee20[_0x0d8b('0x46')]='';}return getConnection(_0x1900e3)[_0x0d8b('0x1a')](function(_0x3e927c){_0x2ab72b=_0x3e927c;if(!_[_0x0d8b('0x16')](_0x4f4b4d)){return getUser(_0x1900e3,_0x4f4b4d[_0x0d8b('0x38')],_0x2ab72b);}else{return getUser(_0x1900e3,null,_0x2ab72b);}})[_0x0d8b('0x1a')](function(_0x4eb07e){_0x1c007b=_0x4eb07e;return getEndUser(_0x1900e3,_0x1c4e96,_0x22ee20[_0x0d8b('0x49')],_0x22ee20['calleridnum'],_0x2ab72b);})[_0x0d8b('0x1a')](function(_0x106e9e){_0x70e4b2=_0x106e9e;return getTicket(_0x1900e3,_0x1c007b,_0x70e4b2,_0x1c4e96,_0x22ee20,_0x1c4e96['Fields'],_0x2ab72b);})[_0x0d8b('0x1a')](function(_0x56e03c){_0x435090=_0x56e03c;logger[_0x0d8b('0x22')](_0x0d8b('0x63'),_0x435090['id']);logger[_0x0d8b('0x22')](_0x0d8b('0x64'),_0x1900e3[_0x0d8b('0x31')]);})[_0x0d8b('0x52')](function(_0x3a073b){logger[_0x0d8b('0x5f')]('[ABANDONED]',JSON[_0x0d8b('0x53')](_0x3a073b));});};
\ No newline at end of file
+var _0xa9e0=['identity','resolve','user_id','display_name','Searching\x20enduser\x20with\x20phone\x20%s.\x20Serching\x20method\x20used\x20%s.','moduleSearch','Contact','Lead','contact','lead','Phone','Name','Enduser\x20with\x20phone\x20%s\x20found.','format','Caller\x20-\x20%s','moduleCreate','Enduser\x20with\x20phone\x20%s.\x20Creating\x20method\x20used\x20%s.','Company','upperFirst','type','string','idField','content','toString','variable','variableName','customVariable','Variable','name','toLowerCase','password','concat','Connection','remoteUri','https://login.salesforce.com','clientId','clientSecret','login','username','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','recordingURL','email','calleridname','calleridnum','[QUEUE]\x20Ticket\x20%s\x20created','integrationTab','user:%s','trigger:salesforce:display','%s/%s/e','error','catch','recordingFormat','none','[OUTBOUND]','uniqueid','destcalleridname','Fields','outbound','[OUTBOUND]\x20Ticket\x20%s\x20created.','[OUTBOUND]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.','newTab','trigger:browser:url','Salesforce\x20account\x20type\x20not\x20recognized','stringify','abandoned','[ABANDONED]','[ABANDONED]\x20Ticket\x20%s\x20created.','lodash','request-promise','moment','jsforce','ioredis','./util','../../../../config/environment','../../../../config/logger','salesforce','defaults','redis','localhost','emit','ticketType','Task','assign','utc','getString','Subjects','Descriptions','WhoId','Case','ContactId','create','isNil','validateEmail','sobject','User','find','execute','then','length','Email','Agent\x20%s\x20found.','info','Agent\x20%s\x20not\x20found.\x20Switch\x20to\x20the\x20admin\x20account.'];(function(_0x51a324,_0x269893){var _0x5dc870=function(_0x41ea98){while(--_0x41ea98){_0x51a324['push'](_0x51a324['shift']());}};_0x5dc870(++_0x269893);}(_0xa9e0,0x123));var _0x0a9e=function(_0x5447fd,_0x52a6b5){_0x5447fd=_0x5447fd-0x0;var _0x15b28a=_0xa9e0[_0x5447fd];return _0x15b28a;};'use strict';var _=require(_0x0a9e('0x0'));var rp=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));var BPromise=require('bluebird');var md5=require('md5');var jsforce=require(_0x0a9e('0x3'));var util=require('util');var Redis=require(_0x0a9e('0x4'));var intUtil=require(_0x0a9e('0x5'));var config=require(_0x0a9e('0x6'));var logger=require(_0x0a9e('0x7'))(_0x0a9e('0x8'));config['redis']=_[_0x0a9e('0x9')](config[_0x0a9e('0xa')],{'host':_0x0a9e('0xb'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));function emit(_0xe42b77,_0x56465b,_0x52cace){io['to'](_0xe42b77)[_0x0a9e('0xc')](_0x56465b,_0x52cace);}function getTicket(_0xf81284,_0x307b3e,_0x3ab53f,_0xfeb75b,_0xbd1168,_0x4a4c56,_0x50dfb2,_0x527cdd){var _0x4cfe67={};if(_0xfeb75b[_0x0a9e('0xd')]===_0x0a9e('0xe')){_0x4cfe67=Object[_0x0a9e('0xf')]({},{'OwnerId':_0x307b3e['id'],'ActivityDate':moment[_0x0a9e('0x10')](),'IsReminderSet':![],'IsRecurrence':![],'Subject':intUtil[_0x0a9e('0x11')](_0xfeb75b[_0x0a9e('0x12')],_0xbd1168,'\x20'),'Description':intUtil['getString'](_0xfeb75b[_0x0a9e('0x13')],_0xbd1168,'\x0a')},getCustomFields(_0x4a4c56,_0xbd1168));if(_0x3ab53f){_0x4cfe67[_0x0a9e('0x14')]=_0x3ab53f['id'];}}else if(_0xfeb75b[_0x0a9e('0xd')]===_0x0a9e('0x15')){_0x4cfe67=Object[_0x0a9e('0xf')]({},{'OwnerId':_0x307b3e['id'],'Subject':intUtil[_0x0a9e('0x11')](_0xfeb75b['Subjects'],_0xbd1168,'\x20'),'Description':intUtil[_0x0a9e('0x11')](_0xfeb75b['Descriptions'],_0xbd1168,'\x0a')},getCustomFields(_0x4a4c56,_0xbd1168));if(_0x3ab53f){_0x4cfe67[_0x0a9e('0x16')]=_0x3ab53f['id'];}}return _0x50dfb2['sobject'](_0xfeb75b[_0x0a9e('0xd')])[_0x0a9e('0x17')](_0x4cfe67);}function getUser(_0x48f32d,_0x225616,_0x5a0a06){if(!_[_0x0a9e('0x18')](_0x225616)&&intUtil[_0x0a9e('0x19')](_0x225616)){var _0x106033={'Email':_0x225616};var _0x205fd6={'Id':!![],'Username':!![],'Name':!![],'Email':!![]};return _0x5a0a06[_0x0a9e('0x1a')](_0x0a9e('0x1b'))[_0x0a9e('0x1c')](_0x106033,_0x205fd6)[_0x0a9e('0x1d')]()[_0x0a9e('0x1e')](function(_0x112016){if(_0x112016[_0x0a9e('0x1f')]){var _0x105080=_['find'](_0x112016,function(_0x2c3407){return _0x2c3407[_0x0a9e('0x20')]===_0x225616;});if(_0x105080){logger['info'](_0x0a9e('0x21'),_0x225616);return BPromise['resolve']({'id':_0x105080['Id'],'name':_0x105080['Name']});}}else{logger[_0x0a9e('0x22')](_0x0a9e('0x23'),_0x225616);return _0x5a0a06[_0x0a9e('0x24')]()[_0x0a9e('0x1e')](function(_0x4abc77){return BPromise[_0x0a9e('0x25')]({'id':_0x4abc77[_0x0a9e('0x26')],'name':_0x4abc77[_0x0a9e('0x27')]});});}});}else{logger[_0x0a9e('0x22')](_0x0a9e('0x23'),_0x225616);return _0x5a0a06[_0x0a9e('0x24')]()[_0x0a9e('0x1e')](function(_0x5ea472){return BPromise['resolve']({'id':_0x5ea472[_0x0a9e('0x26')],'name':_0x5ea472[_0x0a9e('0x27')]});});}}function getEndUser(_0x40c424,_0x33161b,_0x526cf3,_0x384319,_0x479bc4){var _0x45a1e7={'Phone':_0x384319};var _0x5bfb33={'Id':!![],'Name':!![],'Phone':!![]};return BPromise[_0x0a9e('0x25')]()[_0x0a9e('0x1e')](function(){if(_0x33161b[_0x0a9e('0xd')]===_0x0a9e('0xe')){logger[_0x0a9e('0x22')](_0x0a9e('0x28'),_0x384319,_0x33161b[_0x0a9e('0x29')]);switch(_0x33161b[_0x0a9e('0x29')]){case'contact_lead':return _0x479bc4[_0x0a9e('0x1a')](_0x0a9e('0x2a'))[_0x0a9e('0x1c')](_0x45a1e7,_0x5bfb33)[_0x0a9e('0x1d')]()['then'](function(_0x15b200){if(_0x15b200&&_0x15b200[_0x0a9e('0x1f')]){return _0x15b200;}else{return _0x479bc4[_0x0a9e('0x1a')](_0x0a9e('0x2b'))[_0x0a9e('0x1c')](_0x45a1e7,_0x5bfb33);}});case _0x0a9e('0x2c'):return _0x479bc4[_0x0a9e('0x1a')](_0x0a9e('0x2a'))[_0x0a9e('0x1c')](_0x45a1e7,_0x5bfb33)['execute']();case _0x0a9e('0x2d'):return _0x479bc4['sobject'](_0x0a9e('0x2b'))[_0x0a9e('0x1c')](_0x45a1e7,_0x5bfb33);default:return null;}}else if(_0x33161b[_0x0a9e('0xd')]===_0x0a9e('0x15')){logger[_0x0a9e('0x22')]('Searching\x20enduser\x20with\x20phone\x20%s.\x20Serching\x20method\x20used\x20%s.',_0x384319,_0x0a9e('0x2c'));return _0x479bc4[_0x0a9e('0x1a')](_0x0a9e('0x2a'))[_0x0a9e('0x1c')](_0x45a1e7,_0x5bfb33)[_0x0a9e('0x1d')]();}})[_0x0a9e('0x1e')](function(_0x332d35){if(_0x332d35&&_0x332d35[_0x0a9e('0x1f')]){var _0x5583a4=_[_0x0a9e('0x1c')](_0x332d35,function(_0x5e7238){return _0x5e7238[_0x0a9e('0x2e')]===_0x384319;});if(_0x5583a4){return BPromise[_0x0a9e('0x25')]({'id':_0x5583a4['Id'],'name':_0x5583a4[_0x0a9e('0x2f')],'phone':_0x5583a4[_0x0a9e('0x2e')]});}}})['then'](function(_0x191e91){if(_0x191e91){logger[_0x0a9e('0x22')](_0x0a9e('0x30'),_0x384319);return BPromise[_0x0a9e('0x25')](_0x191e91);}else{logger['info']('Enduser\x20with\x20phone\x20%s\x20not\x20found.',_0x384319);var _0x1e8694={'LastName':_0x526cf3!=='<unknown>'?_0x526cf3:util[_0x0a9e('0x31')](_0x0a9e('0x32'),_0x384319),'Phone':_0x384319};if(_0x33161b[_0x0a9e('0x33')]){if(_0x33161b[_0x0a9e('0x33')]==='contact'){logger[_0x0a9e('0x22')](_0x0a9e('0x34'),_0x384319,_0x33161b[_0x0a9e('0x33')]);}else if(_0x33161b['moduleCreate']===_0x0a9e('0x2d')&&_0x33161b[_0x0a9e('0xd')]===_0x0a9e('0xe')){logger['info']('Enduser\x20with\x20phone\x20%s.\x20Creating\x20method\x20used\x20%s.',_0x384319,_0x33161b[_0x0a9e('0x33')]);_0x1e8694[_0x0a9e('0x35')]='No\x20Company';}else{return null;}}return _0x479bc4[_0x0a9e('0x1a')](_[_0x0a9e('0x36')](_0x33161b[_0x0a9e('0x33')]))[_0x0a9e('0x17')](_0x1e8694);}});}function getCustomFields(_0x4b38d9,_0x5a594b){var _0x15e37d={};if(_0x4b38d9[_0x0a9e('0x1f')]>0x0){_['forEach'](_0x4b38d9,function(_0x183991){if(_0x183991[_0x0a9e('0x37')]===_0x0a9e('0x38')&&_0x183991['idField']){_0x15e37d[_0x183991[_0x0a9e('0x39')]]=_0x183991[_0x0a9e('0x3a')][_0x0a9e('0x3b')]();}else if(_0x183991[_0x0a9e('0x37')]===_0x0a9e('0x3c')&&_0x183991[_0x0a9e('0x3d')]&&_0x183991[_0x0a9e('0x39')]){_0x5a594b[_0x183991[_0x0a9e('0x3d')]]&&(_0x15e37d[_0x183991[_0x0a9e('0x39')]]=_0x5a594b[_0x183991[_0x0a9e('0x3d')]][_0x0a9e('0x3b')]());}else if(_0x183991[_0x0a9e('0x37')]===_0x0a9e('0x3e')&&_0x183991[_0x0a9e('0x3f')]&&_0x183991[_0x0a9e('0x3f')]['name']&&_0x183991['idField']){_0x5a594b[_0x183991[_0x0a9e('0x3f')][_0x0a9e('0x40')][_0x0a9e('0x41')]()]&&(_0x15e37d[_0x183991[_0x0a9e('0x39')]]=_0x5a594b[_0x183991[_0x0a9e('0x3f')][_0x0a9e('0x40')][_0x0a9e('0x41')]()][_0x0a9e('0x3b')]());}});}return _0x15e37d;}function getConnection(_0x432fcc){var _0x25c6e6=_0x432fcc[_0x0a9e('0x42')][_0x0a9e('0x43')](_0x432fcc['securityToken']);var _0x117c99=new jsforce[(_0x0a9e('0x44'))]({'oauth2':{'loginUrl':_0x432fcc[_0x0a9e('0x45')]||_0x0a9e('0x46'),'clientId':_0x432fcc[_0x0a9e('0x47')],'clientSecret':_0x432fcc[_0x0a9e('0x48')]}});return _0x117c99[_0x0a9e('0x49')](_0x432fcc[_0x0a9e('0x4a')],_0x25c6e6)['then'](function(){logger[_0x0a9e('0x22')]('Connection\x20established.');return _0x117c99;});}exports[_0x0a9e('0x4b')]=function(_0x476688,_0x8d6dd1,_0x562fb4,_0x14bec2,_0x7f6eb1,_0x4774f4){var _0x34aa5a,_0x45c845,_0x37be73,_0x45bf7f;_0x4774f4['serverUrl']=intUtil[_0x0a9e('0x4c')](_0x4774f4[_0x0a9e('0x4d')]);_0x4774f4[_0x0a9e('0x45')]=intUtil[_0x0a9e('0x4c')](_0x4774f4[_0x0a9e('0x45')]);if(_0x7f6eb1&&_0x7f6eb1[_0x0a9e('0x4e')]){logger[_0x0a9e('0x22')](_0x0a9e('0x4f'),_0x0a9e('0x50'));_0x8d6dd1['recordingURL']=util[_0x0a9e('0x31')](_0x0a9e('0x51'),_0x4774f4['serverUrl'],_0x8d6dd1['uniqueid'],md5(_0x8d6dd1['uniqueid']));}else{_0x8d6dd1[_0x0a9e('0x52')]='';}return getConnection(_0x4774f4)[_0x0a9e('0x1e')](function(_0x37edaa){_0x45bf7f=_0x37edaa;return getUser(_0x4774f4,_0x14bec2[_0x0a9e('0x53')],_0x45bf7f);})[_0x0a9e('0x1e')](function(_0x30decb){_0x34aa5a=_0x30decb;return getEndUser(_0x4774f4,_0x562fb4,_0x8d6dd1[_0x0a9e('0x54')],_0x8d6dd1[_0x0a9e('0x55')],_0x45bf7f);})['then'](function(_0x4b1b9f){_0x45c845=_0x4b1b9f;return getTicket(_0x4774f4,_0x34aa5a,_0x45c845,_0x562fb4,_0x8d6dd1,_0x562fb4['Fields'],_0x45bf7f,_0x0a9e('0x4b'));})[_0x0a9e('0x1e')](function(_0x14d602){_0x37be73=_0x14d602;logger['info'](_0x0a9e('0x56'),_0x37be73['id']);logger[_0x0a9e('0x22')]('[QUEUE]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.',_0x37be73['id'],_0x14bec2['name'],_0x4774f4[_0x0a9e('0x37')]);switch(_0x4774f4['type']){case _0x0a9e('0x57'):emit(util['format'](_0x0a9e('0x58'),_0x14bec2[_0x0a9e('0x40')]),_0x0a9e('0x59'),{'recordId':_0x37be73['id']});break;case'newTab':emit(util[_0x0a9e('0x31')](_0x0a9e('0x58'),_0x14bec2['name']),'trigger:browser:url',{'uri':util[_0x0a9e('0x31')](_0x0a9e('0x5a'),_0x45bf7f['instanceUrl'],_0x37be73['id'])});break;default:logger[_0x0a9e('0x5b')]('[QUEUE]\x20Salesforce\x20account\x20type\x20not\x20recognized.');}})[_0x0a9e('0x5c')](function(_0x523cd2){logger[_0x0a9e('0x5b')]('[QUEUE]',JSON['stringify'](_0x523cd2));});};exports['outbound']=function(_0x2da03c,_0x47de4c,_0x2f7092,_0x65432,_0x3cfd00,_0x19b4df,_0x232830){var _0x272738,_0xd10662,_0x28d814,_0x4e67ab;_0x19b4df[_0x0a9e('0x4d')]=intUtil[_0x0a9e('0x4c')](_0x19b4df[_0x0a9e('0x4d')]);_0x19b4df[_0x0a9e('0x45')]=intUtil[_0x0a9e('0x4c')](_0x19b4df[_0x0a9e('0x45')]);if(_0x232830&&_0x232830['recordingFormat']&&_0x232830[_0x0a9e('0x5d')]!==_0x0a9e('0x5e')){logger['info'](_0x0a9e('0x5f'),'Recording\x20is\x20enabled!');_0x47de4c[_0x0a9e('0x52')]=util['format']('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x19b4df['serverUrl'],_0x47de4c[_0x0a9e('0x60')],md5(_0x47de4c['uniqueid']));}return getConnection(_0x19b4df)[_0x0a9e('0x1e')](function(_0x1fc70e){_0x4e67ab=_0x1fc70e;return getUser(_0x19b4df,_0x65432[_0x0a9e('0x53')],_0x4e67ab);})[_0x0a9e('0x1e')](function(_0x1cca9f){_0x272738=_0x1cca9f;return getEndUser(_0x19b4df,_0x2f7092,_0x47de4c[_0x0a9e('0x61')],_0x47de4c['destcalleridnum'],_0x4e67ab);})[_0x0a9e('0x1e')](function(_0x5854cc){_0xd10662=_0x5854cc;return getTicket(_0x19b4df,_0x272738,_0xd10662,_0x2f7092,_0x47de4c,_0x2f7092[_0x0a9e('0x62')],_0x4e67ab,_0x0a9e('0x63'));})[_0x0a9e('0x1e')](function(_0x5adf8f){_0x28d814=_0x5adf8f;logger[_0x0a9e('0x22')](_0x0a9e('0x64'),_0x28d814['id']);logger[_0x0a9e('0x22')](_0x0a9e('0x65'),_0x28d814['id'],_0x65432['name'],_0x19b4df[_0x0a9e('0x37')]);switch(_0x19b4df[_0x0a9e('0x37')]){case'integrationTab':emit(util[_0x0a9e('0x31')](_0x0a9e('0x58'),_0x65432[_0x0a9e('0x40')]),_0x0a9e('0x59'),{'recordId':_0x28d814['id']});break;case _0x0a9e('0x66'):emit(util['format'](_0x0a9e('0x58'),_0x65432[_0x0a9e('0x40')]),_0x0a9e('0x67'),{'uri':util['format'](_0x0a9e('0x5a'),_0x4e67ab['instanceUrl'],_0x28d814['id'])});break;default:logger['error'](_0x0a9e('0x5f'),_0x0a9e('0x68'));}})[_0x0a9e('0x5c')](function(_0x19c995){logger[_0x0a9e('0x5b')](_0x0a9e('0x5f'),JSON[_0x0a9e('0x69')](_0x19c995));});};exports[_0x0a9e('0x6a')]=function(_0x2d7205,_0x1cc4f3,_0x2e89b7,_0x19012b,_0x2bbb86,_0x2b8192){var _0x320898,_0x412a72,_0x2a28c0,_0x4257c9;_0x2b8192['serverUrl']=intUtil[_0x0a9e('0x4c')](_0x2b8192[_0x0a9e('0x4d')]);_0x2b8192[_0x0a9e('0x45')]=intUtil['stripTrailingSlash'](_0x2b8192[_0x0a9e('0x45')]);if(_0x2bbb86&&_0x2bbb86[_0x0a9e('0x4e')]){logger['info'](_0x0a9e('0x6b'),_0x0a9e('0x50'));_0x1cc4f3[_0x0a9e('0x52')]=util[_0x0a9e('0x31')](_0x0a9e('0x51'),_0x2b8192['serverUrl'],_0x1cc4f3['uniqueid'],md5(_0x1cc4f3['uniqueid']));}else{_0x1cc4f3[_0x0a9e('0x52')]='';}return getConnection(_0x2b8192)[_0x0a9e('0x1e')](function(_0x1104ad){_0x4257c9=_0x1104ad;if(!_[_0x0a9e('0x18')](_0x19012b)){return getUser(_0x2b8192,_0x19012b[_0x0a9e('0x40')],_0x4257c9);}else{return getUser(_0x2b8192,null,_0x4257c9);}})[_0x0a9e('0x1e')](function(_0xeef20){_0x320898=_0xeef20;return getEndUser(_0x2b8192,_0x2e89b7,_0x1cc4f3[_0x0a9e('0x54')],_0x1cc4f3['calleridnum'],_0x4257c9);})[_0x0a9e('0x1e')](function(_0xcbc8b2){_0x412a72=_0xcbc8b2;return getTicket(_0x2b8192,_0x320898,_0x412a72,_0x2e89b7,_0x1cc4f3,_0x2e89b7[_0x0a9e('0x62')],_0x4257c9);})['then'](function(_0x2bdc44){_0x2a28c0=_0x2bdc44;logger['info'](_0x0a9e('0x6c'),_0x2a28c0['id']);logger[_0x0a9e('0x22')]('[ABANDONED]\x20Integration\x20account\x20type\x20%s.',_0x2b8192[_0x0a9e('0x37')]);})[_0x0a9e('0x5c')](function(_0x2cc7a7){logger[_0x0a9e('0x5b')]('[ABANDONED]',JSON[_0x0a9e('0x69')](_0x2cc7a7));});};
\ No newline at end of file
index b0103a0..2067393 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x503a=['servicenow','localhost','socket.io-emitter','GET','sys_user?sysparm_query=user_name%3Dadmin','length','result','sys_id','],\x20getAdminUser\x20crm','catch','error','toUpperCase','message','info','],\x20getUser\x20input\x20crm','validateEmail','userEmail','],\x20getUser\x20rp\x20obj','then','],\x20getUser\x20entity','userId','adminId','adminEmail',']\x20using\x20admin\x20profile','],\x20createEndUser\x20input\x20crm','sys_user?','endUserNumber','user','true','System','],\x20EndUser\x20schema','endUserId','],\x20getEndUser\x20input\x20crm','sys_user?sysparm_query=phone%3D','forEach','nameField','customField','idField','toLowerCase','content','toString','type','string','variable','variableName','customVariable','Variable','name','outbound','POST','incident','getString','Subjects','Descriptions','Fields','ticketNumber','number',']\x20getTicket\x20crm','label','?sysparm_query=name%3D','Incident','ticketId','Incident\x20-\x20','push',']\x20arrayPromises:\x20IDs\x20in\x20table\x20label','all','Tags','map','%26sysparm_record_target%3Dincident','%26sysparm_record_row%3D1%26sysparm_record_rows%3D39','%26sysparm_record_list%3Dactive%253Dtrue','%255EORDERBYDESCnumber','/nav_to.do?uri=incident.do?sys_id%3D','format','emit','username','sysparm_limit=1','stripTrailingSlash','serverUrl','remoteUri','isNil','email','destcalleridnum','calleridnum','callDirection','queue','uniqueid','monitor_format','[QUEUE]','recordingFormat','[OUTBOUND]','Recording\x20is\x20enabled!','recordingURL','The\x20ticket\x20ID\x20is:\x20%s','call\x20direction:\x20%s','abandoned','Displaying\x20call\x20in\x20a\x20new\x20tab...','inspect','lodash','bluebird','util','ioredis','./util','../../../../config/environment','../../../../config/logger'];(function(_0x489b87,_0xd51c93){var _0x1823b6=function(_0x451c70){while(--_0x451c70){_0x489b87['push'](_0x489b87['shift']());}};_0x1823b6(++_0xd51c93);}(_0x503a,0x19d));var _0xa503=function(_0x118653,_0x50ef26){_0x118653=_0x118653-0x0;var _0xc11fa6=_0x503a[_0x118653];return _0xc11fa6;};'use strict';var _=require(_0xa503('0x0'));var Promise=require(_0xa503('0x1'));var rp=require('request-promise');var util=require(_0xa503('0x2'));var md5=require('md5');var Redis=require(_0xa503('0x3'));var intUtil=require(_0xa503('0x4'));var config=require(_0xa503('0x5'));var logger=require(_0xa503('0x6'))(_0xa503('0x7'));config['redis']=_['defaults'](config['redis'],{'host':_0xa503('0x8'),'port':0x18eb});var io=require(_0xa503('0x9'))(new Redis(config['redis']));function getAdminUser(_0x4428de,_0x18a066,_0x35cca2,_0x3c696b,_0x26ce16,_0x38bbff){return new Promise(function(_0xf6d07e,_0x5e7c0d){var _0x467e60={'method':_0xa503('0xa'),'uri':_0x3c696b+_0xa503('0xb')+'&'+_0x26ce16+'&'+_0x38bbff,'auth':_0x18a066,'json':!![]};return rp(_0x467e60)['then'](function(_0x18cf59){if(_0x18cf59['result'][_0xa503('0xc')]>0x0){_0x35cca2['adminId']=_0x18cf59[_0xa503('0xd')][0x0][_0xa503('0xe')];}logger['info']('['+[_0x4428de['toUpperCase']()]+_0xa503('0xf'),_0x35cca2);_0xf6d07e(_0x35cca2);})[_0xa503('0x10')](function(_0x3f4a7a){logger[_0xa503('0x11')]('['+[_0x4428de[_0xa503('0x12')]()]+']',_0x3f4a7a[_0xa503('0x13')]);_0x5e7c0d(_0x3f4a7a[_0xa503('0x13')]);});});}function getUser(_0x654334,_0x3ae1b0,_0x3e81b7,_0x3cbfb6,_0x36f98d){return function(_0x2af966){logger[_0xa503('0x14')]('['+[_0x654334['toUpperCase']()]+_0xa503('0x15'),_0x2af966);return new Promise(function(_0x2a9557,_0x23ecee){if(intUtil[_0xa503('0x16')](_0x2af966[_0xa503('0x17')])){var _0x5aae98={'method':_0xa503('0xa'),'uri':_0x3e81b7+'sys_user?sysparm_query=email%3D'+_0x2af966[_0xa503('0x17')]+'&'+_0x3cbfb6+'&'+_0x36f98d,'auth':_0x3ae1b0,'json':!![]};logger[_0xa503('0x14')]('['+[_0x654334[_0xa503('0x12')]()]+_0xa503('0x18'),_0x5aae98);return rp(_0x5aae98)[_0xa503('0x19')](function(_0x2d1d40){logger[_0xa503('0x14')]('['+[_0x654334[_0xa503('0x12')]()]+_0xa503('0x1a'),_0x2d1d40);if(_0x2d1d40[_0xa503('0xd')][_0xa503('0xc')]>0x0&&String(_0x2d1d40[_0xa503('0xd')][0x0]['active'])==='true'){_0x2af966[_0xa503('0x1b')]=_0x2d1d40[_0xa503('0xd')][0x0][_0xa503('0xe')];}else{_0x2af966[_0xa503('0x1b')]=_0x2af966[_0xa503('0x1c')];_0x2af966['userEmail']=_0x2af966[_0xa503('0x1d')];}logger[_0xa503('0x14')]('['+[_0x654334[_0xa503('0x12')]()]+'],\x20getUser\x20crm',_0x2af966);_0x2a9557(_0x2af966);})[_0xa503('0x10')](function(_0x22c7ec){logger['error']('['+[_0x654334[_0xa503('0x12')]()]+']',_0x22c7ec['message']);_0x23ecee(_0x22c7ec[_0xa503('0x13')]);});}else{logger[_0xa503('0x14')]('['+[_0x654334[_0xa503('0x12')]()]+_0xa503('0x1e'));_0x2af966['userId']=_0x2af966['adminId'];_0x2af966[_0xa503('0x17')]=_0x2af966[_0xa503('0x1d')];_0x2a9557(_0x2af966);}});};}function createEndUser(_0xe8e0bc,_0x1c2790,_0x37dee2,_0x404733,_0x57f92b){logger[_0xa503('0x14')]('['+[_0xe8e0bc[_0xa503('0x12')]()]+_0xa503('0x1f'),_0x37dee2);return new Promise(function(_0x36b7ae,_0x4fc65a){var _0x37aba7={'method':'POST','uri':_0x404733+_0xa503('0x20')+_0x57f92b,'body':{'user_name':_0x37dee2[_0xa503('0x21')],'roles':_0xa503('0x22'),'first_name':_0x37dee2[_0xa503('0x21')],'active':_0xa503('0x23'),'date_format':_0xa503('0x24'),'phone':_0x37dee2[_0xa503('0x21')]},'auth':_0x1c2790,'json':!![]};return rp(_0x37aba7)['then'](function(_0x365d55){logger[_0xa503('0x14')]('['+[_0xe8e0bc[_0xa503('0x12')]()]+_0xa503('0x25'),_0x365d55[_0xa503('0xd')]);_0x37dee2[_0xa503('0x26')]=_0x365d55[_0xa503('0xd')][_0xa503('0xe')];_0x36b7ae(_0x37dee2);})[_0xa503('0x10')](function(_0x4bb9b1){logger[_0xa503('0x11')]('['+[_0xe8e0bc['toUpperCase']()]+']',_0x4bb9b1['message']);_0x4fc65a(_0x4bb9b1[_0xa503('0x13')]);});});}function getEndUser(_0xb52b66,_0x207bcb,_0x42ebe4,_0x1026c2,_0x53bab6){return function(_0x1aba55){logger['info']('['+[_0xb52b66['toUpperCase']()]+_0xa503('0x27'),_0x1aba55);return new Promise(function(_0x36f091,_0x2019b9){var _0x354116={'method':_0xa503('0xa'),'uri':_0x42ebe4+_0xa503('0x28')+_0x1aba55[_0xa503('0x21')]+'&'+_0x1026c2+'&'+_0x53bab6,'auth':_0x207bcb,'json':!![]};return rp(_0x354116)[_0xa503('0x19')](function(_0x4eaf4c){if(_0x4eaf4c[_0xa503('0xd')][_0xa503('0xc')]>0x0){_0x1aba55[_0xa503('0x26')]=_0x4eaf4c[_0xa503('0xd')][0x0]['sys_id'];logger[_0xa503('0x14')]('['+[_0xb52b66[_0xa503('0x12')]()]+'],\x20getEndUser\x20crm',_0x1aba55);_0x36f091(_0x1aba55);}else{return createEndUser(_0xb52b66,_0x207bcb,_0x1aba55,_0x42ebe4,_0x1026c2)[_0xa503('0x19')](function(_0x587375){logger[_0xa503('0x14')]('['+[_0xb52b66[_0xa503('0x12')]()]+'],\x20createEndUser\x20crm',_0x587375);_0x36f091(_0x587375);});}})[_0xa503('0x10')](function(_0x38ae58){logger['error']('['+[_0xb52b66[_0xa503('0x12')]()]+']',_0x38ae58[_0xa503('0x13')]);_0x2019b9(_0x38ae58[_0xa503('0x13')]);});});};}function getCustomFields(_0x354394,_0x3e87ee){var _0x144877={};if(_0x354394[_0xa503('0xc')]>0x0){_[_0xa503('0x29')](_0x354394,function(_0xef12c1){if(_0xef12c1['type']==='string'&&_0xef12c1[_0xa503('0x2a')]&&!_0xef12c1[_0xa503('0x2b')]){_0x144877[_0xef12c1[_0xa503('0x2c')][_0xa503('0x2d')]()]=_0xef12c1[_0xa503('0x2e')][_0xa503('0x2f')]();}else if(_0xef12c1[_0xa503('0x30')]===_0xa503('0x31')&&_0xef12c1['idField']&&_0xef12c1[_0xa503('0x2b')]){_0x144877[_0xef12c1[_0xa503('0x2c')][_0xa503('0x2d')]()]=_0xef12c1['content'][_0xa503('0x2f')]();}else if(_0xef12c1[_0xa503('0x30')]===_0xa503('0x32')&&_0xef12c1['variableName']&&_0xef12c1[_0xa503('0x2c')]&&_0xef12c1[_0xa503('0x2b')]){_0x144877[_0xef12c1[_0xa503('0x2c')]['toLowerCase']()]=_0x3e87ee[_0xef12c1[_0xa503('0x33')]][_0xa503('0x2f')]();}else if(_0xef12c1[_0xa503('0x30')]===_0xa503('0x34')&&_0xef12c1[_0xa503('0x35')]&&_0xef12c1[_0xa503('0x35')]['name']&&_0xef12c1[_0xa503('0x2c')]&&_0xef12c1[_0xa503('0x2b')]){_0x144877[_0xef12c1[_0xa503('0x2c')]['toLowerCase']()]=_0x3e87ee[_0xef12c1[_0xa503('0x35')][_0xa503('0x36')][_0xa503('0x2d')]()][_0xa503('0x2f')]();}});}return _0x144877;}function getTicket(_0x3b7348,_0xe4be70,_0x168bcf,_0x22a37a,_0x57dcbb,_0x485005){return function(_0x4c8018){logger[_0xa503('0x14')]('['+[_0x3b7348['toUpperCase']()]+']\x20getTicket\x20input\x20crm',_0x4c8018);return new Promise(function(_0x441316,_0x4e2fa3){var _0x13772c=_0x3b7348[_0xa503('0x2d')]()===_0xa503('0x37')?_0x4c8018[_0xa503('0x1b')]:_0x4c8018[_0xa503('0x26')];var _0x3cbb45={'method':_0xa503('0x38'),'uri':_0x168bcf+_0xa503('0x39')+'?'+_0x485005,'body':Object['assign']({},{'active':_0xa503('0x23'),'caller_id':_0x13772c,'assigned_to':_0x4c8018[_0xa503('0x1b')],'short_description':intUtil[_0xa503('0x3a')](_0x22a37a[_0xa503('0x3b')],_0x57dcbb,'\x20'),'description':intUtil[_0xa503('0x3a')](_0x22a37a[_0xa503('0x3c')],_0x57dcbb,'\x0a')},getCustomFields(_0x22a37a[_0xa503('0x3d')],_0x57dcbb)),'auth':_0xe4be70,'json':!![]};return rp(_0x3cbb45)[_0xa503('0x19')](function(_0x29651c){logger['info']('['+[_0x3b7348[_0xa503('0x12')]()]+']\x20POST\x20incident\x20entity\x20schema',_0x29651c[_0xa503('0xd')]);_0x4c8018['ticketId']=_0x29651c[_0xa503('0xd')][_0xa503('0xe')];_0x4c8018[_0xa503('0x3e')]=_0x29651c[_0xa503('0xd')][_0xa503('0x3f')];logger[_0xa503('0x14')]('['+[_0x3b7348[_0xa503('0x12')]()]+_0xa503('0x40'),_0x4c8018);_0x441316(_0x4c8018);})[_0xa503('0x10')](function(_0x32fd71){logger['error']('['+[_0x3b7348[_0xa503('0x12')]()]+']',_0x32fd71[_0xa503('0x13')]);_0x4e2fa3(_0x32fd71[_0xa503('0x13')]);});});};}function createRemoteTag(_0x4e31f8,_0x4bbe99,_0x540c32,_0x4a430b){return new Promise(function(_0x300c7a,_0x4c7281){var _0x59460f={'method':_0xa503('0x38'),'uri':_0x540c32+'label'+'?'+_0x4a430b,'body':{'short_description':_0x4e31f8,'global':!![],'active':!![],'name':_0x4e31f8},'auth':_0x4bbe99,'json':!![]};return rp(_0x59460f)['then'](function(_0x5436de){var _0x203f35=_0x5436de[_0xa503('0xd')][_0xa503('0xe')];_0x300c7a(_0x203f35);});});}function getRemoteTag(_0x8a8b44,_0x540b27,_0x583122,_0x2a9ece,_0x514782){return new Promise(function(_0x45be02,_0x457545){var _0x4cf02c={'method':_0xa503('0xa'),'uri':_0x583122+_0xa503('0x41')+_0xa503('0x42')+_0x8a8b44+'&'+_0x2a9ece,'auth':_0x540b27,'json':!![]};return rp(_0x4cf02c)[_0xa503('0x19')](function(_0x4ecfd2){if(_0x4ecfd2[_0xa503('0xd')]['length']>0x0){var _0x163090=_0x4ecfd2[_0xa503('0xd')][0x0][_0xa503('0xe')];_0x45be02(_0x163090);}else{return createRemoteTag(_0x8a8b44,_0x540b27,_0x583122,_0x2a9ece)[_0xa503('0x19')](function(_0x345f78){_0x45be02(_0x345f78);});}});});}function assignTagToIncident(_0x240df6,_0x3cf32d,_0x184b0a,_0x3a5cb0,_0x45b2fe){return new Promise(function(_0x15fcef,_0x27784a){var _0x3a839d={'method':'POST','uri':_0x184b0a+'label_entry'+'?'+_0x45b2fe,'body':{'label':_0x240df6,'table':_0xa503('0x39'),'id_type':_0xa503('0x43'),'table_key':_0x3a5cb0[_0xa503('0x44')],'title':_0xa503('0x45')+_0x3a5cb0[_0xa503('0x3e')],'id_display':_0x3a5cb0[_0xa503('0x3e')]},'auth':_0x3cf32d,'json':!![]};return rp(_0x3a839d)[_0xa503('0x19')](function(_0x39ee8a){_0x15fcef();})[_0xa503('0x10')](function(){_0x15fcef();});});}function manageTags(_0x26b45a,_0x2e6727,_0xb3d7f2,_0x371ea4,_0x300e02,_0x243f6a,_0x5813f8){return new Promise(function(_0x50fc13,_0x14b341){var _0x537531=[];_0x2e6727[_0xa503('0x29')](function(_0x14938f){_0x537531[_0xa503('0x46')](getRemoteTag(_0x14938f,_0xb3d7f2,_0x371ea4,_0x243f6a,_0x5813f8));});return Promise['all'](_0x537531)['then'](function(_0x4ce70c){if(_0x4ce70c['length']){logger['info']('['+[_0x26b45a[_0xa503('0x12')]()]+_0xa503('0x47'),_0x4ce70c);var _0x15beac=[];_0x4ce70c[_0xa503('0x29')](function(_0x375cc4){_0x15beac['push'](assignTagToIncident(_0x375cc4,_0xb3d7f2,_0x371ea4,_0x300e02,_0x243f6a));});return Promise[_0xa503('0x48')](_0x15beac)[_0xa503('0x19')](function(){_0x50fc13();})[_0xa503('0x10')](function(){_0x50fc13();});}else{_0x50fc13();}});});}function getTags(_0xb7e2ef,_0x39441c,_0x2b3f4c,_0x3a8e14,_0x130539,_0x3098c1){return function(_0x291628){return new Promise(function(_0x18c3c0,_0x3d00d8){var _0x37b8c5=[];var _0x2c1b22=_0x3a8e14[_0xa503('0x49')];if(_0x2c1b22&&_0x2c1b22[_0xa503('0xc')]>0x0){_0x37b8c5=_[_0xa503('0x4a')](_0x2c1b22,_0xa503('0x36'));}if(_0x37b8c5['length']>0x0){return manageTags(_0xb7e2ef,_0x37b8c5,_0x39441c,_0x2b3f4c,_0x291628,_0x130539,_0x3098c1)[_0xa503('0x19')](function(){_0x18c3c0(_0x291628);});}else{_0x18c3c0(_0x291628);}});};}function emit(_0x33d0d1,_0x360603,_0x1f8f55){var _0x34ab96=_0xa503('0x4b')+_0xa503('0x4c')+_0xa503('0x4d')+_0xa503('0x4e');var _0x37a913={'uri':_0x33d0d1+_0xa503('0x4f')+_0x1f8f55+_0x34ab96};io['to'](util[_0xa503('0x50')]('user:%s',_0x360603))[_0xa503('0x51')]('trigger:browser:url',_0x37a913);}exports['cs']=function(_0x45b5f9,_0x2a0887,_0x13cc87,_0x2420b4,_0x113052,_0x1c77ed,_0x558592,_0x29cb78){var _0x399c21={};var _0x2d9bb6={'user':_0x1c77ed[_0xa503('0x52')],'pass':_0x1c77ed['password']};var _0x13e012=_0xa503('0x53');var _0x28864a='sysparm_display_value=true';_0x1c77ed['remoteUri']=intUtil[_0xa503('0x54')](_0x1c77ed['remoteUri']);_0x1c77ed[_0xa503('0x55')]=intUtil[_0xa503('0x54')](_0x1c77ed[_0xa503('0x55')]);var _0x54b922=util[_0xa503('0x50')]('%s/api/now/table/',_0x1c77ed[_0xa503('0x56')]);_0x399c21['userEmail']=!_[_0xa503('0x57')](_0x2420b4)?_0x2420b4[_0xa503('0x58')]:null;_0x399c21[_0xa503('0x1d')]=_0x1c77ed[_0xa503('0x58')];_0x399c21['endUserNumber']=_0x29cb78[_0xa503('0x2d')]()===_0xa503('0x37')?_0x2a0887[_0xa503('0x59')]:_0x2a0887[_0xa503('0x5a')];_0x399c21[_0xa503('0x5b')]=_0x29cb78==='queue'||_0x29cb78==='abandoned'?_0xa503('0x5c'):_0xa503('0x37');var _0x1bf855=util[_0xa503('0x50')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x1c77ed[_0xa503('0x55')],_0x2a0887[_0xa503('0x5d')],md5(_0x2a0887[_0xa503('0x5d')]));if(_0x113052&&_0x113052[_0xa503('0x5e')]){logger[_0xa503('0x14')](_0xa503('0x5f'),'Recording\x20is\x20enabled!');_0x2a0887['recordingURL']=_0x1bf855;}else if(_0x558592&&_0x558592[_0xa503('0x60')]&&_0x558592['recordingFormat']!=='none'){logger['info'](_0xa503('0x61'),_0xa503('0x62'));_0x2a0887[_0xa503('0x63')]=_0x1bf855;}else{_0x2a0887[_0xa503('0x63')]='';}return getAdminUser(_0x29cb78,_0x2d9bb6,_0x399c21,_0x54b922,_0x28864a,_0x13e012)[_0xa503('0x19')](getUser(_0x29cb78,_0x2d9bb6,_0x54b922,_0x28864a,_0x13e012))[_0xa503('0x19')](getEndUser(_0x29cb78,_0x2d9bb6,_0x54b922,_0x28864a,_0x13e012))[_0xa503('0x19')](getTicket(_0x29cb78,_0x2d9bb6,_0x54b922,_0x13cc87,_0x2a0887,_0x28864a))['then'](function(_0x286e40){logger[_0xa503('0x14')](util[_0xa503('0x50')](_0xa503('0x64'),_0x286e40[_0xa503('0x44')]));logger['info'](util[_0xa503('0x50')](_0xa503('0x65'),_0x29cb78));if(_0x29cb78!==_0xa503('0x66')){logger['info']('['+[_0x29cb78[_0xa503('0x12')]()]+']',_0xa503('0x67'));emit(_0x1c77ed['remoteUri'],_0x2420b4[_0xa503('0x36')],_0x286e40[_0xa503('0x44')]);}})[_0xa503('0x10')](function(_0x557e8b){logger[_0xa503('0x11')]('['+[_0x29cb78[_0xa503('0x12')]()]+']\x20Error\x20running\x20ServiceNow\x20integration',util[_0xa503('0x68')](_0x557e8b,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
+var _0x9417=['adminEmail','],\x20getUser\x20crm','error',']\x20using\x20admin\x20profile','],\x20createEndUser\x20input\x20crm','POST','endUserNumber','user','System','],\x20EndUser\x20schema','catch','],\x20getEndUser\x20input\x20crm','sys_user?sysparm_query=phone%3D','endUserId','],\x20getEndUser\x20crm','],\x20createEndUser\x20crm','forEach','customField','toLowerCase','content','toString','string','type','variable','variableName','idField','customVariable','Variable',']\x20getTicket\x20input\x20crm','outbound','assign','getString','Subjects','Descriptions','Fields',']\x20POST\x20incident\x20entity\x20schema','ticketId','ticketNumber','number','?sysparm_query=name%3D','label_entry','Incident','Incident\x20-\x20','all',']\x20arrayPromises:\x20IDs\x20in\x20table\x20label','Tags','name','%26sysparm_record_target%3Dincident','%26sysparm_record_row%3D1%26sysparm_record_rows%3D39','%255EORDERBYDESCnumber','/nav_to.do?uri=incident.do?sys_id%3D','format','trigger:browser:url','sysparm_limit=1','sysparm_display_value=true','stripTrailingSlash','remoteUri','serverUrl','email','calleridnum','callDirection','queue','abandoned','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','monitor_format','[QUEUE]','recordingURL','recordingFormat','[OUTBOUND]','Recording\x20is\x20enabled!','call\x20direction:\x20%s','Displaying\x20call\x20in\x20a\x20new\x20tab...',']\x20Error\x20running\x20ServiceNow\x20integration','lodash','bluebird','request-promise','util','ioredis','./util','../../../../config/environment','../../../../config/logger','servicenow','redis','defaults','localhost','socket.io-emitter','GET','sys_user?sysparm_query=user_name%3Dadmin','then','result','length','info','toUpperCase','message','],\x20getUser\x20input\x20crm','validateEmail','userEmail','sys_user?sysparm_query=email%3D','],\x20getUser\x20rp\x20obj','],\x20getUser\x20entity','active','true','userId','sys_id','adminId'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x9417,0xb4));var _0x7941=function(_0x5bce33,_0x4a4b06){_0x5bce33=_0x5bce33-0x0;var _0x15bc20=_0x9417[_0x5bce33];return _0x15bc20;};'use strict';var _=require(_0x7941('0x0'));var Promise=require(_0x7941('0x1'));var rp=require(_0x7941('0x2'));var util=require(_0x7941('0x3'));var md5=require('md5');var Redis=require(_0x7941('0x4'));var intUtil=require(_0x7941('0x5'));var config=require(_0x7941('0x6'));var logger=require(_0x7941('0x7'))(_0x7941('0x8'));config[_0x7941('0x9')]=_[_0x7941('0xa')](config[_0x7941('0x9')],{'host':_0x7941('0xb'),'port':0x18eb});var io=require(_0x7941('0xc'))(new Redis(config['redis']));function getAdminUser(_0x11a155,_0x238e43,_0x717f3,_0x5e1302,_0x1122f4,_0x4ab313){return new Promise(function(_0x5d97de,_0xc31a6e){var _0x3b0f68={'method':_0x7941('0xd'),'uri':_0x5e1302+_0x7941('0xe')+'&'+_0x1122f4+'&'+_0x4ab313,'auth':_0x238e43,'json':!![]};return rp(_0x3b0f68)[_0x7941('0xf')](function(_0x2b3751){if(_0x2b3751[_0x7941('0x10')][_0x7941('0x11')]>0x0){_0x717f3['adminId']=_0x2b3751[_0x7941('0x10')][0x0]['sys_id'];}logger[_0x7941('0x12')]('['+[_0x11a155[_0x7941('0x13')]()]+'],\x20getAdminUser\x20crm',_0x717f3);_0x5d97de(_0x717f3);})['catch'](function(_0x218cef){logger['error']('['+[_0x11a155[_0x7941('0x13')]()]+']',_0x218cef[_0x7941('0x14')]);_0xc31a6e(_0x218cef[_0x7941('0x14')]);});});}function getUser(_0xae8c2a,_0x1da410,_0x41b098,_0x55320b,_0x11623c){return function(_0x459430){logger[_0x7941('0x12')]('['+[_0xae8c2a[_0x7941('0x13')]()]+_0x7941('0x15'),_0x459430);return new Promise(function(_0x256f45,_0x4172a7){if(intUtil[_0x7941('0x16')](_0x459430[_0x7941('0x17')])){var _0x533559={'method':'GET','uri':_0x41b098+_0x7941('0x18')+_0x459430['userEmail']+'&'+_0x55320b+'&'+_0x11623c,'auth':_0x1da410,'json':!![]};logger[_0x7941('0x12')]('['+[_0xae8c2a[_0x7941('0x13')]()]+_0x7941('0x19'),_0x533559);return rp(_0x533559)['then'](function(_0x4c54cd){logger[_0x7941('0x12')]('['+[_0xae8c2a['toUpperCase']()]+_0x7941('0x1a'),_0x4c54cd);if(_0x4c54cd['result'][_0x7941('0x11')]>0x0&&String(_0x4c54cd[_0x7941('0x10')][0x0][_0x7941('0x1b')])===_0x7941('0x1c')){_0x459430[_0x7941('0x1d')]=_0x4c54cd[_0x7941('0x10')][0x0][_0x7941('0x1e')];}else{_0x459430['userId']=_0x459430[_0x7941('0x1f')];_0x459430['userEmail']=_0x459430[_0x7941('0x20')];}logger[_0x7941('0x12')]('['+[_0xae8c2a[_0x7941('0x13')]()]+_0x7941('0x21'),_0x459430);_0x256f45(_0x459430);})['catch'](function(_0x55f679){logger[_0x7941('0x22')]('['+[_0xae8c2a[_0x7941('0x13')]()]+']',_0x55f679['message']);_0x4172a7(_0x55f679['message']);});}else{logger[_0x7941('0x12')]('['+[_0xae8c2a[_0x7941('0x13')]()]+_0x7941('0x23'));_0x459430[_0x7941('0x1d')]=_0x459430[_0x7941('0x1f')];_0x459430['userEmail']=_0x459430[_0x7941('0x20')];_0x256f45(_0x459430);}});};}function createEndUser(_0x1f5de6,_0x133bed,_0x240052,_0x23f617,_0x24cc75){logger[_0x7941('0x12')]('['+[_0x1f5de6['toUpperCase']()]+_0x7941('0x24'),_0x240052);return new Promise(function(_0x3882be,_0x1d118b){var _0x4c6786={'method':_0x7941('0x25'),'uri':_0x23f617+'sys_user?'+_0x24cc75,'body':{'user_name':_0x240052[_0x7941('0x26')],'roles':_0x7941('0x27'),'first_name':_0x240052[_0x7941('0x26')],'active':'true','date_format':_0x7941('0x28'),'phone':_0x240052[_0x7941('0x26')]},'auth':_0x133bed,'json':!![]};return rp(_0x4c6786)['then'](function(_0x372051){logger[_0x7941('0x12')]('['+[_0x1f5de6['toUpperCase']()]+_0x7941('0x29'),_0x372051[_0x7941('0x10')]);_0x240052['endUserId']=_0x372051[_0x7941('0x10')][_0x7941('0x1e')];_0x3882be(_0x240052);})[_0x7941('0x2a')](function(_0x3592d9){logger[_0x7941('0x22')]('['+[_0x1f5de6[_0x7941('0x13')]()]+']',_0x3592d9[_0x7941('0x14')]);_0x1d118b(_0x3592d9['message']);});});}function getEndUser(_0x3f3cf2,_0x28848a,_0x4e4328,_0x1cdc80,_0x1375c5){return function(_0x26014a){logger[_0x7941('0x12')]('['+[_0x3f3cf2[_0x7941('0x13')]()]+_0x7941('0x2b'),_0x26014a);return new Promise(function(_0x54b5d0,_0x253d40){var _0xc235d6={'method':_0x7941('0xd'),'uri':_0x4e4328+_0x7941('0x2c')+_0x26014a[_0x7941('0x26')]+'&'+_0x1cdc80+'&'+_0x1375c5,'auth':_0x28848a,'json':!![]};return rp(_0xc235d6)[_0x7941('0xf')](function(_0x772541){if(_0x772541['result'][_0x7941('0x11')]>0x0){_0x26014a[_0x7941('0x2d')]=_0x772541['result'][0x0]['sys_id'];logger[_0x7941('0x12')]('['+[_0x3f3cf2[_0x7941('0x13')]()]+_0x7941('0x2e'),_0x26014a);_0x54b5d0(_0x26014a);}else{return createEndUser(_0x3f3cf2,_0x28848a,_0x26014a,_0x4e4328,_0x1cdc80)[_0x7941('0xf')](function(_0xe0f4e){logger[_0x7941('0x12')]('['+[_0x3f3cf2[_0x7941('0x13')]()]+_0x7941('0x2f'),_0xe0f4e);_0x54b5d0(_0xe0f4e);});}})['catch'](function(_0x36cb98){logger['error']('['+[_0x3f3cf2[_0x7941('0x13')]()]+']',_0x36cb98[_0x7941('0x14')]);_0x253d40(_0x36cb98[_0x7941('0x14')]);});});};}function getCustomFields(_0x4fc700,_0x2bb30d){var _0x546afd={};if(_0x4fc700['length']>0x0){_[_0x7941('0x30')](_0x4fc700,function(_0x3b1342){if(_0x3b1342['type']==='string'&&_0x3b1342['nameField']&&!_0x3b1342[_0x7941('0x31')]){_0x546afd[_0x3b1342['idField'][_0x7941('0x32')]()]=_0x3b1342[_0x7941('0x33')][_0x7941('0x34')]();}else if(_0x3b1342['type']===_0x7941('0x35')&&_0x3b1342['idField']&&_0x3b1342[_0x7941('0x31')]){_0x546afd[_0x3b1342['idField'][_0x7941('0x32')]()]=_0x3b1342['content']['toString']();}else if(_0x3b1342[_0x7941('0x36')]===_0x7941('0x37')&&_0x3b1342[_0x7941('0x38')]&&_0x3b1342[_0x7941('0x39')]&&_0x3b1342[_0x7941('0x31')]){_0x546afd[_0x3b1342[_0x7941('0x39')][_0x7941('0x32')]()]=_0x2bb30d[_0x3b1342[_0x7941('0x38')]][_0x7941('0x34')]();}else if(_0x3b1342[_0x7941('0x36')]===_0x7941('0x3a')&&_0x3b1342[_0x7941('0x3b')]&&_0x3b1342[_0x7941('0x3b')]['name']&&_0x3b1342[_0x7941('0x39')]&&_0x3b1342[_0x7941('0x31')]){_0x546afd[_0x3b1342[_0x7941('0x39')][_0x7941('0x32')]()]=_0x2bb30d[_0x3b1342[_0x7941('0x3b')]['name']['toLowerCase']()]['toString']();}});}return _0x546afd;}function getTicket(_0x169660,_0x3bf212,_0x583c00,_0x47582f,_0x2dff40,_0x3cafd5){return function(_0x5e9ac4){logger[_0x7941('0x12')]('['+[_0x169660[_0x7941('0x13')]()]+_0x7941('0x3c'),_0x5e9ac4);return new Promise(function(_0x1ded47,_0x938829){var _0x4b32b3=_0x169660[_0x7941('0x32')]()===_0x7941('0x3d')?_0x5e9ac4['userId']:_0x5e9ac4['endUserId'];var _0xa70523={'method':_0x7941('0x25'),'uri':_0x583c00+'incident'+'?'+_0x3cafd5,'body':Object[_0x7941('0x3e')]({},{'active':_0x7941('0x1c'),'caller_id':_0x4b32b3,'assigned_to':_0x5e9ac4[_0x7941('0x1d')],'short_description':intUtil[_0x7941('0x3f')](_0x47582f[_0x7941('0x40')],_0x2dff40,'\x20'),'description':intUtil[_0x7941('0x3f')](_0x47582f[_0x7941('0x41')],_0x2dff40,'\x0a')},getCustomFields(_0x47582f[_0x7941('0x42')],_0x2dff40)),'auth':_0x3bf212,'json':!![]};return rp(_0xa70523)[_0x7941('0xf')](function(_0x5c4835){logger[_0x7941('0x12')]('['+[_0x169660['toUpperCase']()]+_0x7941('0x43'),_0x5c4835[_0x7941('0x10')]);_0x5e9ac4[_0x7941('0x44')]=_0x5c4835[_0x7941('0x10')][_0x7941('0x1e')];_0x5e9ac4[_0x7941('0x45')]=_0x5c4835['result'][_0x7941('0x46')];logger[_0x7941('0x12')]('['+[_0x169660[_0x7941('0x13')]()]+']\x20getTicket\x20crm',_0x5e9ac4);_0x1ded47(_0x5e9ac4);})[_0x7941('0x2a')](function(_0x66d3b4){logger[_0x7941('0x22')]('['+[_0x169660[_0x7941('0x13')]()]+']',_0x66d3b4[_0x7941('0x14')]);_0x938829(_0x66d3b4[_0x7941('0x14')]);});});};}function createRemoteTag(_0x3b5998,_0x224578,_0x29ace3,_0xb4835a){return new Promise(function(_0x44f4d1,_0x5b6bf2){var _0x438080={'method':'POST','uri':_0x29ace3+'label'+'?'+_0xb4835a,'body':{'short_description':_0x3b5998,'global':!![],'active':!![],'name':_0x3b5998},'auth':_0x224578,'json':!![]};return rp(_0x438080)[_0x7941('0xf')](function(_0x7ebf54){var _0x529fbf=_0x7ebf54[_0x7941('0x10')][_0x7941('0x1e')];_0x44f4d1(_0x529fbf);});});}function getRemoteTag(_0x4e77ba,_0x290b2,_0x4e9118,_0x5d3c37,_0x388c08){return new Promise(function(_0x4621a0,_0x9177c4){var _0x452191={'method':_0x7941('0xd'),'uri':_0x4e9118+'label'+_0x7941('0x47')+_0x4e77ba+'&'+_0x5d3c37,'auth':_0x290b2,'json':!![]};return rp(_0x452191)['then'](function(_0x7c3a71){if(_0x7c3a71[_0x7941('0x10')][_0x7941('0x11')]>0x0){var _0x2b01a6=_0x7c3a71[_0x7941('0x10')][0x0][_0x7941('0x1e')];_0x4621a0(_0x2b01a6);}else{return createRemoteTag(_0x4e77ba,_0x290b2,_0x4e9118,_0x5d3c37)[_0x7941('0xf')](function(_0x30157e){_0x4621a0(_0x30157e);});}});});}function assignTagToIncident(_0x27322b,_0x223ca1,_0x84fdc7,_0x57bcd8,_0x696517){return new Promise(function(_0x54012a,_0x24b467){var _0x4b4f02={'method':_0x7941('0x25'),'uri':_0x84fdc7+_0x7941('0x48')+'?'+_0x696517,'body':{'label':_0x27322b,'table':'incident','id_type':_0x7941('0x49'),'table_key':_0x57bcd8[_0x7941('0x44')],'title':_0x7941('0x4a')+_0x57bcd8[_0x7941('0x45')],'id_display':_0x57bcd8[_0x7941('0x45')]},'auth':_0x223ca1,'json':!![]};return rp(_0x4b4f02)[_0x7941('0xf')](function(_0x118f02){_0x54012a();})[_0x7941('0x2a')](function(){_0x54012a();});});}function manageTags(_0x20b42b,_0xd659bf,_0x4126cd,_0x342fab,_0x5c3311,_0xbc11e6,_0x1d9444){return new Promise(function(_0x3aa68c,_0x2661dd){var _0x3aeac1=[];_0xd659bf[_0x7941('0x30')](function(_0x1e8652){_0x3aeac1['push'](getRemoteTag(_0x1e8652,_0x4126cd,_0x342fab,_0xbc11e6,_0x1d9444));});return Promise[_0x7941('0x4b')](_0x3aeac1)[_0x7941('0xf')](function(_0x48e93c){if(_0x48e93c[_0x7941('0x11')]){logger[_0x7941('0x12')]('['+[_0x20b42b[_0x7941('0x13')]()]+_0x7941('0x4c'),_0x48e93c);var _0x2fd43a=[];_0x48e93c[_0x7941('0x30')](function(_0x537ea3){_0x2fd43a['push'](assignTagToIncident(_0x537ea3,_0x4126cd,_0x342fab,_0x5c3311,_0xbc11e6));});return Promise[_0x7941('0x4b')](_0x2fd43a)[_0x7941('0xf')](function(){_0x3aa68c();})[_0x7941('0x2a')](function(){_0x3aa68c();});}else{_0x3aa68c();}});});}function getTags(_0x448933,_0xfb32cb,_0x50c0eb,_0x2862f3,_0x46f630,_0x34e822){return function(_0x152461){return new Promise(function(_0x4108f4,_0x1d6dd3){var _0x3de671=[];var _0x47f60f=_0x2862f3[_0x7941('0x4d')];if(_0x47f60f&&_0x47f60f[_0x7941('0x11')]>0x0){_0x3de671=_['map'](_0x47f60f,_0x7941('0x4e'));}if(_0x3de671[_0x7941('0x11')]>0x0){return manageTags(_0x448933,_0x3de671,_0xfb32cb,_0x50c0eb,_0x152461,_0x46f630,_0x34e822)[_0x7941('0xf')](function(){_0x4108f4(_0x152461);});}else{_0x4108f4(_0x152461);}});};}function emit(_0x3dfd74,_0x2e8120,_0x2902ee){var _0x39952e=_0x7941('0x4f')+_0x7941('0x50')+'%26sysparm_record_list%3Dactive%253Dtrue'+_0x7941('0x51');var _0x2a1352={'uri':_0x3dfd74+_0x7941('0x52')+_0x2902ee+_0x39952e};io['to'](util[_0x7941('0x53')]('user:%s',_0x2e8120))['emit'](_0x7941('0x54'),_0x2a1352);}exports['cs']=function(_0x592fd5,_0x1da211,_0x526d81,_0x58c450,_0x341a16,_0x1a9572,_0x2a41a0,_0x2c9fb5){var _0x5c0f47={};var _0x1b21be={'user':_0x1a9572['username'],'pass':_0x1a9572['password']};var _0x51d811=_0x7941('0x55');var _0x171f0d=_0x7941('0x56');_0x1a9572['remoteUri']=intUtil[_0x7941('0x57')](_0x1a9572[_0x7941('0x58')]);_0x1a9572[_0x7941('0x59')]=intUtil[_0x7941('0x57')](_0x1a9572[_0x7941('0x59')]);var _0x360653=util[_0x7941('0x53')]('%s/api/now/table/',_0x1a9572[_0x7941('0x58')]);_0x5c0f47[_0x7941('0x17')]=!_['isNil'](_0x58c450)?_0x58c450[_0x7941('0x5a')]:null;_0x5c0f47[_0x7941('0x20')]=_0x1a9572['email'];_0x5c0f47[_0x7941('0x26')]=_0x2c9fb5[_0x7941('0x32')]()==='outbound'?_0x1da211['destcalleridnum']:_0x1da211[_0x7941('0x5b')];_0x5c0f47[_0x7941('0x5c')]=_0x2c9fb5===_0x7941('0x5d')||_0x2c9fb5===_0x7941('0x5e')?_0x7941('0x5d'):_0x7941('0x3d');var _0x1590c6=util[_0x7941('0x53')](_0x7941('0x5f'),_0x1a9572['serverUrl'],_0x1da211[_0x7941('0x60')],md5(_0x1da211[_0x7941('0x60')]));if(_0x341a16&&_0x341a16[_0x7941('0x61')]){logger['info'](_0x7941('0x62'),'Recording\x20is\x20enabled!');_0x1da211[_0x7941('0x63')]=_0x1590c6;}else if(_0x2a41a0&&_0x2a41a0[_0x7941('0x64')]&&_0x2a41a0[_0x7941('0x64')]!=='none'){logger['info'](_0x7941('0x65'),_0x7941('0x66'));_0x1da211['recordingURL']=_0x1590c6;}else{_0x1da211[_0x7941('0x63')]='';}return getAdminUser(_0x2c9fb5,_0x1b21be,_0x5c0f47,_0x360653,_0x171f0d,_0x51d811)[_0x7941('0xf')](getUser(_0x2c9fb5,_0x1b21be,_0x360653,_0x171f0d,_0x51d811))[_0x7941('0xf')](getEndUser(_0x2c9fb5,_0x1b21be,_0x360653,_0x171f0d,_0x51d811))['then'](getTicket(_0x2c9fb5,_0x1b21be,_0x360653,_0x526d81,_0x1da211,_0x171f0d))[_0x7941('0xf')](function(_0x5496bd){logger[_0x7941('0x12')](util['format']('The\x20ticket\x20ID\x20is:\x20%s',_0x5496bd['ticketId']));logger[_0x7941('0x12')](util[_0x7941('0x53')](_0x7941('0x67'),_0x2c9fb5));if(_0x2c9fb5!=='abandoned'){logger[_0x7941('0x12')]('['+[_0x2c9fb5[_0x7941('0x13')]()]+']',_0x7941('0x68'));emit(_0x1a9572[_0x7941('0x58')],_0x58c450['name'],_0x5496bd[_0x7941('0x44')]);}})['catch'](function(_0x83f7c3){logger[_0x7941('0x22')]('['+[_0x2c9fb5['toUpperCase']()]+_0x7941('0x69'),util['inspect'](_0x83f7c3,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
index 6298a3e..40c0080 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbf30=['socket.io-emitter','emit','info','Creating\x20new\x20ticket...','name','getString','assigned_user_id','created_by','description','Descriptions','date_start','toISOString','slice','replace','duration_hours','duration_minutes','parent_id','parent_type','direction','length','forEach','variableName','push','idField','JSON','Calls','format','Basic\x20%s','apiKey','toString','base64','get_server_info','stringify','INSTR\x20(\x20users.user_name,\x20\x22%s\x22)\x20>\x200','user_name','then','entry_list','name_value_list','value','Agent\x20found!','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','resolve','user_id','Agent\x20not\x20available,\x20using\x20the\x20admin\x20account!','Searching\x20enduser\x20with\x20phone','Contacts','find','Enduser\x20found!','phone_home','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','set_entry','first_name','Caller\x20-\x20%s','Enduser\x20created.','debug','[HTTP]','merge','map','string','nameField','customField','toLowerCase','content','type','custom_fields','variable','customVariable','Variable','POST','username','PLAIN','xCALLY\x20Motion\x20integration','sessionID','Account\x20%d\x20is\x20not\x20valid','set_relationship','queue','remoteUri','stripTrailingSlash','serverUrl','uri','%s/service/v4_1/rest.php','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','Inbound','The\x20Ticket\x20ID\x20is:','users','contacts','version','charAt','%s/index.php?action=ajaxui#ajaxUILoc=index.php%3Fmodule%3DCalls%26action%3DEditView%26record%3D%s','%s/#bwc/index.php?module=Calls&action=EditView&record=%s','user:%s','trigger:browser:url','catch','error','recordingFormat','none','[OUTBOUND]','recordingURL','uniqueid','The\x20User\x20ID\x20is:','destcalleridname','destcalleridnum','Fields','Outbound','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','abandoned','monitor_format','isNil','lodash','request-promise','md5','util','ioredis','./util','../../../../config/environment','../../../../config/logger','sugarcrm','redis'];(function(_0x38db88,_0xb296c5){var _0x31c018=function(_0x5c1fed){while(--_0x5c1fed){_0x38db88['push'](_0x38db88['shift']());}};_0x31c018(++_0xb296c5);}(_0xbf30,0x1e2));var _0x0bf3=function(_0x476b2a,_0x3b1641){_0x476b2a=_0x476b2a-0x0;var _0x2e0ee3=_0xbf30[_0x476b2a];return _0x2e0ee3;};'use strict';var _=require(_0x0bf3('0x0'));var rp=require(_0x0bf3('0x1'));var BPromise=require('bluebird');var md5=require(_0x0bf3('0x2'));var util=require(_0x0bf3('0x3'));var Redis=require(_0x0bf3('0x4'));var intUtil=require(_0x0bf3('0x5'));var config=require(_0x0bf3('0x6'));var logger=require(_0x0bf3('0x7'))(_0x0bf3('0x8'));config[_0x0bf3('0x9')]=_['defaults'](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0x0bf3('0xa'))(new Redis(config[_0x0bf3('0x9')]));var def={'method':'POST','json':!![]};function emit(_0x29f911,_0x2c8d8b,_0x57887a){io['to'](_0x29f911)[_0x0bf3('0xb')](_0x2c8d8b,_0x57887a);}function getTicket(_0x27c8b0,_0xb219c8,_0x35e5ba,_0x4edd68,_0x4c223b,_0x310e47,_0x3bd659,_0x43e24f){logger[_0x0bf3('0xc')](_0x0bf3('0xd'));var _0x4a112c=new Date();var _0xfce39f=[{'name':_0x0bf3('0xe'),'value':intUtil[_0x0bf3('0xf')](_0x4edd68['Subjects'],_0x4c223b,'\x20')},{'name':_0x0bf3('0x10'),'value':_0xb219c8['id']},{'name':_0x0bf3('0x11'),'value':_0xb219c8['id']},{'name':_0x0bf3('0x12'),'value':intUtil[_0x0bf3('0xf')](_0x4edd68[_0x0bf3('0x13')],_0x4c223b,'\x0a')},{'name':_0x0bf3('0x14'),'value':_0x4a112c[_0x0bf3('0x15')]()[_0x0bf3('0x16')](0x0,0x13)[_0x0bf3('0x17')]('T','\x20')},{'name':_0x0bf3('0x18'),'value':'0'},{'name':_0x0bf3('0x19'),'value':'15'},{'name':_0x0bf3('0x1a'),'value':_0x35e5ba['id']},{'name':_0x0bf3('0x1b'),'value':'Contacts'},{'name':'parent_name','value':_0x35e5ba[_0x0bf3('0xe')]},{'name':_0x0bf3('0x1c'),'value':_0x43e24f}];if(_0x310e47[_0x0bf3('0x1d')]){_[_0x0bf3('0x1e')](_0x310e47,function(_0x2682d8){if(_0x4c223b[_0x2682d8[_0x0bf3('0x1f')]]){_0xfce39f[_0x0bf3('0x20')]({'name':_0x2682d8[_0x0bf3('0x21')],'value':_0x4c223b[_0x2682d8[_0x0bf3('0x1f')]]});}});}return request({'form':{'method':'set_entry','input_type':_0x0bf3('0x22'),'response_type':_0x0bf3('0x22'),'rest_data':JSON['stringify']({'session':_0x3bd659['id'],'module_name':_0x0bf3('0x23'),'name_value_list':_0xfce39f})}});}function getAuth(_0x36c2ab){return util[_0x0bf3('0x24')](_0x0bf3('0x25'),new Buffer(_0x36c2ab[_0x0bf3('0x26')]+':X')[_0x0bf3('0x27')](_0x0bf3('0x28')));}function getServerInfo(_0x553fc3){return request({'form':{'method':_0x0bf3('0x29'),'input_type':_0x0bf3('0x22'),'response_type':'JSON','rest_data':JSON[_0x0bf3('0x2a')]({'session':_0x553fc3['id']})}});}function getUser(_0x48f1b8,_0x41e572,_0x352064){if(!_['isNil'](_0x41e572)){logger[_0x0bf3('0xc')]('Getting\x20agent\x20with\x20name',_0x41e572);return request({'form':{'method':'get_entry_list','input_type':_0x0bf3('0x22'),'response_type':_0x0bf3('0x22'),'rest_data':JSON['stringify']({'session':_0x352064['id'],'module_name':'Employees','query':util[_0x0bf3('0x24')](_0x0bf3('0x2b'),_0x41e572),'order_by':'','offset':'0','select_fields':['id',_0x0bf3('0xe'),_0x0bf3('0x2c')],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})[_0x0bf3('0x2d')](function(_0x278e9f){if(_0x278e9f[_0x0bf3('0x2e')][_0x0bf3('0x1d')]){var _0x49eac0=_['find'](_0x278e9f['entry_list'],function(_0x507d03){return _0x507d03[_0x0bf3('0x2f')]['user_name'][_0x0bf3('0x30')]===_0x41e572;});if(_0x49eac0){logger[_0x0bf3('0xc')](_0x0bf3('0x31'));return BPromise['resolve']({'id':_0x49eac0[_0x0bf3('0x2f')]['id']['value'],'name':_0x49eac0[_0x0bf3('0x2f')][_0x0bf3('0xe')]['value']});}}logger[_0x0bf3('0xc')](_0x0bf3('0x32'));return BPromise[_0x0bf3('0x33')]({'id':_0x352064[_0x0bf3('0x2f')][_0x0bf3('0x34')][_0x0bf3('0x30')],'name':_0x352064[_0x0bf3('0x2f')]['user_name'][_0x0bf3('0x30')]});});}else{logger[_0x0bf3('0xc')](_0x0bf3('0x35'));return BPromise['resolve']({'id':_0x352064[_0x0bf3('0x2f')][_0x0bf3('0x34')][_0x0bf3('0x30')],'name':_0x352064[_0x0bf3('0x2f')][_0x0bf3('0x2c')][_0x0bf3('0x30')]});}}function getEndUser(_0x1ac351,_0x2374cb,_0x4f0d65,_0x1c4225){logger[_0x0bf3('0xc')](_0x0bf3('0x36'),_0x4f0d65);return request({'form':{'method':'get_entry_list','input_type':_0x0bf3('0x22'),'response_type':'JSON','rest_data':JSON[_0x0bf3('0x2a')]({'session':_0x1c4225['id'],'module_name':_0x0bf3('0x37'),'query':util[_0x0bf3('0x24')]('contacts.phone_home\x20=\x20\x22%s\x22',_0x4f0d65),'order_by':'','offset':'0','select_fields':['id',_0x0bf3('0xe'),'phone_home'],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})['then'](function(_0x18ff35){if(_0x18ff35[_0x0bf3('0x2e')]['length']){var _0x15def6=_[_0x0bf3('0x38')](_0x18ff35[_0x0bf3('0x2e')],function(_0x5492fd){return _0x5492fd['name_value_list']['phone_home']['value']===_0x4f0d65;});if(_0x15def6){logger['info'](_0x0bf3('0x39'));return BPromise[_0x0bf3('0x33')]({'id':_0x15def6['name_value_list']['id'][_0x0bf3('0x30')],'name':_0x15def6[_0x0bf3('0x2f')][_0x0bf3('0xe')][_0x0bf3('0x30')],'phone':_0x15def6[_0x0bf3('0x2f')][_0x0bf3('0x3a')]['value']});}}else{logger[_0x0bf3('0xc')](_0x0bf3('0x3b'));return request({'form':{'method':_0x0bf3('0x3c'),'input_type':_0x0bf3('0x22'),'response_type':_0x0bf3('0x22'),'rest_data':JSON[_0x0bf3('0x2a')]({'session':_0x1c4225['id'],'module_name':_0x0bf3('0x37'),'name_value_list':[{'name':_0x0bf3('0x3d'),'value':_0x2374cb!=='<unknown>'?_0x2374cb:util['format'](_0x0bf3('0x3e'),_0x4f0d65)},{'name':_0x0bf3('0x3a'),'value':_0x4f0d65}]})}})[_0x0bf3('0x2d')](function(_0x475d8c){logger['info'](_0x0bf3('0x3f'));return BPromise['resolve']({'id':_0x475d8c['id'],'name':_0x475d8c[_0x0bf3('0x2e')][_0x0bf3('0x3d')][_0x0bf3('0x30')],'phone':_0x475d8c['entry_list'][_0x0bf3('0x3a')]['value']});});}});}function request(_0x4f4553){logger[_0x0bf3('0x40')](_0x0bf3('0x41'),JSON[_0x0bf3('0x2a')](_0x4f4553));return rp(_[_0x0bf3('0x42')](def,_0x4f4553));}function getTags(_0x43fa51,_0xd20c25){var _0x3c3870=[];if(_0x43fa51&&_0x43fa51[_0x0bf3('0x1d')]>0x0){_0x3c3870=_[_0x0bf3('0x43')](_0x43fa51,_0xd20c25);}return _0x3c3870;}function getCustomFields(_0xa3e80a,_0x81bd04){var _0x15edd6=[];var _0x34ad8f={'custom_fields':[]};if(_0xa3e80a['length']>0x0){_['forEach'](_0xa3e80a,function(_0xbd8290){if(_0xbd8290['type']===_0x0bf3('0x44')&&_0xbd8290[_0x0bf3('0x45')]&&!_0xbd8290[_0x0bf3('0x46')]){_0x34ad8f[_0xbd8290[_0x0bf3('0x45')][_0x0bf3('0x47')]()]=_0xbd8290[_0x0bf3('0x48')][_0x0bf3('0x27')]();}else if(_0xbd8290[_0x0bf3('0x49')]==='string'&&_0xbd8290[_0x0bf3('0x21')]&&_0xbd8290[_0x0bf3('0x46')]){_0x34ad8f[_0x0bf3('0x4a')][_0x0bf3('0x20')]({'id':_0xbd8290[_0x0bf3('0x21')],'value':_0xbd8290[_0x0bf3('0x48')][_0x0bf3('0x27')]()});}else if(_0xbd8290['type']===_0x0bf3('0x4b')&&_0xbd8290[_0x0bf3('0x1f')]&&_0xbd8290['idField']&&_0xbd8290['customField']){_0x81bd04[_0xbd8290[_0x0bf3('0x1f')]]&&_0x34ad8f[_0x0bf3('0x4a')]['push']({'id':_0xbd8290['idField'],'value':_0x81bd04[_0xbd8290['variableName']][_0x0bf3('0x27')]()});}else if(_0xbd8290['type']===_0x0bf3('0x4c')&&_0xbd8290['Variable']&&_0xbd8290[_0x0bf3('0x4d')][_0x0bf3('0xe')]&&_0xbd8290[_0x0bf3('0x21')]&&_0xbd8290[_0x0bf3('0x46')]){_0x81bd04[_0xbd8290[_0x0bf3('0x4d')]['name'][_0x0bf3('0x47')]()]&&_0x34ad8f[_0x0bf3('0x4a')][_0x0bf3('0x20')]({'id':_0xbd8290['idField'],'value':_0x81bd04[_0xbd8290[_0x0bf3('0x4d')][_0x0bf3('0xe')][_0x0bf3('0x47')]()][_0x0bf3('0x27')]()});}});}return _0x34ad8f;}function getConnection(_0x41d641){return request({'method':_0x0bf3('0x4e'),'form':{'method':'login','input_type':_0x0bf3('0x22'),'response_type':_0x0bf3('0x22'),'rest_data':JSON['stringify']({'user_auth':{'user_name':_0x41d641[_0x0bf3('0x4f')],'password':_0x41d641['password'],'encryption':_0x0bf3('0x50')},'application':_0x0bf3('0x51')})}})['then'](function(_0x4a47b7){var _0x501487=_0x4a47b7;if(_0x501487['id']){def[_0x0bf3('0x52')]=_0x501487['id'];return BPromise[_0x0bf3('0x33')](_0x501487);}else{throw new Error(util['format'](_0x0bf3('0x53'),_0x41d641['id']));}});}function setRelationship(_0x337dc6,_0x47aba4,_0x4e179e,_0x24aedb){return request({'form':{'method':_0x0bf3('0x54'),'input_type':_0x0bf3('0x22'),'response_type':_0x0bf3('0x22'),'rest_data':JSON[_0x0bf3('0x2a')]({'session':_0x337dc6['id'],'module_name':_0x0bf3('0x23'),'module_id':_0x4e179e['id'],'link_field_name':_0x24aedb,'related_ids':[_0x47aba4['id']]})}});}exports[_0x0bf3('0x55')]=function(_0xd797da,_0x41e6bf,_0x417cc2,_0x5a11ee,_0x5c8e7f,_0x458b27){var _0x37721f,_0x26257e,_0x552f77,_0x168587;_0x458b27[_0x0bf3('0x56')]=intUtil[_0x0bf3('0x57')](_0x458b27['remoteUri']);_0x458b27[_0x0bf3('0x58')]=intUtil[_0x0bf3('0x57')](_0x458b27[_0x0bf3('0x58')]);def[_0x0bf3('0x59')]=util[_0x0bf3('0x24')](_0x0bf3('0x5a'),_0x458b27[_0x0bf3('0x56')]);if(_0x5c8e7f&&_0x5c8e7f['monitor_format']){logger[_0x0bf3('0xc')](_0x0bf3('0x5b'),_0x0bf3('0x5c'));_0x41e6bf['recordingURL']=util[_0x0bf3('0x24')](_0x0bf3('0x5d'),_0x458b27[_0x0bf3('0x58')],_0x41e6bf['uniqueid'],md5(_0x41e6bf['uniqueid']));}else{_0x41e6bf['recordingURL']='';}return getConnection(_0x458b27)[_0x0bf3('0x2d')](function(_0x47e87e){_0x168587=_0x47e87e;return getUser(_0x458b27,_0x5a11ee['name'],_0x168587);})[_0x0bf3('0x2d')](function(_0x4170d1){_0x37721f=_0x4170d1;logger[_0x0bf3('0xc')]('The\x20User\x20ID\x20is:',_0x37721f['id']);return getEndUser(_0x458b27,_0x41e6bf[_0x0bf3('0x5e')],_0x41e6bf[_0x0bf3('0x5f')],_0x168587);})[_0x0bf3('0x2d')](function(_0xe4f49e){_0x26257e=_0xe4f49e;logger[_0x0bf3('0xc')](_0x0bf3('0x60'),_0x26257e['id']);return getTicket(_0x458b27,_0x37721f,_0x26257e,_0x417cc2,_0x41e6bf,_0x417cc2['Fields'],_0x168587,_0x0bf3('0x61'));})[_0x0bf3('0x2d')](function(_0x1f59c9){_0x552f77=_0x1f59c9;logger[_0x0bf3('0xc')]('Ticket\x20created!');logger[_0x0bf3('0xc')](_0x0bf3('0x62'),_0x552f77['id']);return setRelationship(_0x168587,_0x37721f,_0x552f77,_0x0bf3('0x63'));})[_0x0bf3('0x2d')](function(){return setRelationship(_0x168587,_0x26257e,_0x552f77,_0x0bf3('0x64'));})['then'](function(){return getServerInfo(_0x168587);})[_0x0bf3('0x2d')](function(_0x25ba2e){var _0x3ae4b9=parseInt(_0x25ba2e[_0x0bf3('0x65')][_0x0bf3('0x66')](0x0));var _0x3f4730=util[_0x0bf3('0x24')](_0x0bf3('0x67'),_0x458b27[_0x0bf3('0x56')],_0x552f77['id']);if(_0x3ae4b9>0x6){_0x3f4730=util['format'](_0x0bf3('0x68'),_0x458b27[_0x0bf3('0x56')],_0x552f77['id']);}logger[_0x0bf3('0xc')](_0x0bf3('0x5b'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x0bf3('0x24')](_0x0bf3('0x69'),_0x5a11ee[_0x0bf3('0xe')]),_0x0bf3('0x6a'),{'uri':_0x3f4730});})[_0x0bf3('0x6b')](function(_0x121242){logger[_0x0bf3('0x6c')]('[QUEUE]',JSON[_0x0bf3('0x2a')](_0x121242));});};exports['outbound']=function(_0x5cd4d5,_0x4320c0,_0x4717fa,_0x236f82,_0x1bd5e9,_0x6146c8,_0x26fc54){var _0x5132db,_0xedd1bb,_0x3c26e9,_0x5d554f;_0x6146c8[_0x0bf3('0x56')]=intUtil[_0x0bf3('0x57')](_0x6146c8['remoteUri']);_0x6146c8['serverUrl']=intUtil[_0x0bf3('0x57')](_0x6146c8[_0x0bf3('0x58')]);def['uri']=util['format'](_0x0bf3('0x5a'),_0x6146c8[_0x0bf3('0x56')]);if(_0x26fc54&&_0x26fc54[_0x0bf3('0x6d')]&&_0x26fc54[_0x0bf3('0x6d')]!==_0x0bf3('0x6e')){logger[_0x0bf3('0xc')](_0x0bf3('0x6f'),_0x0bf3('0x5c'));_0x4320c0[_0x0bf3('0x70')]=util[_0x0bf3('0x24')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x6146c8[_0x0bf3('0x58')],_0x4320c0[_0x0bf3('0x71')],md5(_0x4320c0[_0x0bf3('0x71')]));}return getConnection(_0x6146c8)[_0x0bf3('0x2d')](function(_0x40cb36){_0x5d554f=_0x40cb36;return getUser(_0x6146c8,_0x236f82[_0x0bf3('0xe')],_0x5d554f);})[_0x0bf3('0x2d')](function(_0x564ad9){_0x5132db=_0x564ad9;logger[_0x0bf3('0xc')](_0x0bf3('0x72'),_0x5132db['id']);return getEndUser(_0x6146c8,_0x4320c0[_0x0bf3('0x73')],_0x4320c0[_0x0bf3('0x74')],_0x5d554f);})[_0x0bf3('0x2d')](function(_0x3976a8){_0xedd1bb=_0x3976a8;logger[_0x0bf3('0xc')](_0x0bf3('0x60'),_0xedd1bb['id']);return getTicket(_0x6146c8,_0x5132db,_0xedd1bb,_0x4717fa,_0x4320c0,_0x4717fa[_0x0bf3('0x75')],_0x5d554f,_0x0bf3('0x76'));})['then'](function(_0x2f8d82){_0x3c26e9=_0x2f8d82;logger[_0x0bf3('0xc')]('Ticket\x20created!');logger[_0x0bf3('0xc')](_0x0bf3('0x62'),_0x3c26e9['id']);return setRelationship(_0x5d554f,_0x5132db,_0x3c26e9,_0x0bf3('0x63'));})[_0x0bf3('0x2d')](function(){return setRelationship(_0x5d554f,_0xedd1bb,_0x3c26e9,_0x0bf3('0x64'));})[_0x0bf3('0x2d')](function(){return getServerInfo(_0x5d554f);})['then'](function(_0x2123f5){var _0x1e4cae=parseInt(_0x2123f5[_0x0bf3('0x65')][_0x0bf3('0x66')](0x0));var _0x46dbac=util[_0x0bf3('0x24')](_0x0bf3('0x67'),_0x6146c8['remoteUri'],_0x3c26e9['id']);if(_0x1e4cae>0x6){_0x46dbac=util[_0x0bf3('0x24')](_0x0bf3('0x68'),_0x6146c8[_0x0bf3('0x56')],_0x3c26e9['id']);}logger[_0x0bf3('0xc')]('[OUTBOUND]',_0x0bf3('0x77'));emit(util[_0x0bf3('0x24')](_0x0bf3('0x69'),_0x236f82[_0x0bf3('0xe')]),_0x0bf3('0x6a'),{'uri':_0x46dbac});})[_0x0bf3('0x6b')](function(_0x322a2e){logger['error'](_0x0bf3('0x6f'),JSON[_0x0bf3('0x2a')](_0x322a2e));});};exports[_0x0bf3('0x78')]=function(_0x4e5531,_0x1b7565,_0x97e255,_0x24bce3,_0x355b32,_0x46315b){var _0x59d79d,_0x37063d,_0xfd423a,_0x13c853;_0x46315b['remoteUri']=intUtil[_0x0bf3('0x57')](_0x46315b['remoteUri']);_0x46315b[_0x0bf3('0x58')]=intUtil[_0x0bf3('0x57')](_0x46315b[_0x0bf3('0x58')]);def[_0x0bf3('0x59')]=util['format'](_0x0bf3('0x5a'),_0x46315b[_0x0bf3('0x56')]);if(_0x355b32&&_0x355b32[_0x0bf3('0x79')]){logger[_0x0bf3('0xc')]('[ABANDONED]',_0x0bf3('0x5c'));_0x1b7565[_0x0bf3('0x70')]=util[_0x0bf3('0x24')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x46315b[_0x0bf3('0x58')],_0x1b7565[_0x0bf3('0x71')],md5(_0x1b7565[_0x0bf3('0x71')]));}else{_0x1b7565[_0x0bf3('0x70')]='';}return getConnection(_0x46315b)[_0x0bf3('0x2d')](function(_0x4b6f36){_0x13c853=_0x4b6f36;if(!_[_0x0bf3('0x7a')](_0x24bce3)){return getUser(_0x46315b,_0x24bce3[_0x0bf3('0xe')],_0x13c853);}else{return getUser(_0x46315b,null,_0x13c853);}})[_0x0bf3('0x2d')](function(_0x24f3ef){_0x59d79d=_0x24f3ef;logger[_0x0bf3('0xc')](_0x0bf3('0x72'),_0x59d79d['id']);return getEndUser(_0x46315b,_0x1b7565[_0x0bf3('0x5e')],_0x1b7565[_0x0bf3('0x5f')],_0x13c853);})[_0x0bf3('0x2d')](function(_0x4f804d){_0x37063d=_0x4f804d;logger[_0x0bf3('0xc')](_0x0bf3('0x60'),_0x37063d['id']);return getTicket(_0x46315b,_0x59d79d,_0x37063d,_0x97e255,_0x1b7565,_0x97e255[_0x0bf3('0x75')],_0x13c853,'Inbound');})[_0x0bf3('0x2d')](function(_0x49ae10){_0xfd423a=_0x49ae10;logger['info']('Ticket\x20created!');logger['info'](_0x0bf3('0x62'),_0xfd423a['id']);return setRelationship(_0x13c853,_0x59d79d,_0xfd423a,_0x0bf3('0x63'));})[_0x0bf3('0x2d')](function(){return setRelationship(_0x13c853,_0x37063d,_0xfd423a,_0x0bf3('0x64'));})[_0x0bf3('0x2d')](function(){return getServerInfo(_0x13c853);})[_0x0bf3('0x6b')](function(_0x31a465){logger['error']('[ABANDONED]',JSON['stringify'](_0x31a465));});};
\ No newline at end of file
+var _0xb8d9=['set_entry','JSON','stringify','Calls','format','Basic\x20%s','apiKey','base64','get_server_info','Getting\x20agent\x20with\x20name','INSTR\x20(\x20users.user_name,\x20\x22%s\x22)\x20>\x200','user_name','entry_list','find','value','Agent\x20found!','resolve','name_value_list','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','Agent\x20not\x20available,\x20using\x20the\x20admin\x20account!','user_id','Searching\x20enduser\x20with\x20phone','contacts.phone_home\x20=\x20\x22%s\x22','phone_home','then','Enduser\x20found!','first_name','<unknown>','Caller\x20-\x20%s','Enduser\x20created.','debug','[HTTP]','merge','map','type','string','nameField','customField','toLowerCase','content','custom_fields','toString','customVariable','Variable','POST','login','username','xCALLY\x20Motion\x20integration','sessionID','Account\x20%d\x20is\x20not\x20valid','set_relationship','queue','remoteUri','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','recordingURL','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','Fields','users','contacts','version','charAt','%s/index.php?action=ajaxui#ajaxUILoc=index.php%3Fmodule%3DCalls%26action%3DEditView%26record%3D%s','%s/#bwc/index.php?module=Calls&action=EditView&record=%s','user:%s','trigger:browser:url','catch','uri','%s/service/v4_1/rest.php','recordingFormat','none','[OUTBOUND]','destcalleridname','destcalleridnum','Outbound','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','isNil','Inbound','error','[ABANDONED]','lodash','request-promise','bluebird','md5','./util','../../../../config/environment','sugarcrm','redis','defaults','localhost','emit','info','getString','Subjects','Descriptions','date_start','toISOString','slice','parent_id','parent_type','Contacts','name','direction','length','forEach','variableName','push','idField'];(function(_0x21a6fe,_0xc4182f){var _0x27d257=function(_0x1417b5){while(--_0x1417b5){_0x21a6fe['push'](_0x21a6fe['shift']());}};_0x27d257(++_0xc4182f);}(_0xb8d9,0x146));var _0x9b8d=function(_0x58f915,_0x1cdc30){_0x58f915=_0x58f915-0x0;var _0x3002fe=_0xb8d9[_0x58f915];return _0x3002fe;};'use strict';var _=require(_0x9b8d('0x0'));var rp=require(_0x9b8d('0x1'));var BPromise=require(_0x9b8d('0x2'));var md5=require(_0x9b8d('0x3'));var util=require('util');var Redis=require('ioredis');var intUtil=require(_0x9b8d('0x4'));var config=require(_0x9b8d('0x5'));var logger=require('../../../../config/logger')(_0x9b8d('0x6'));config[_0x9b8d('0x7')]=_[_0x9b8d('0x8')](config[_0x9b8d('0x7')],{'host':_0x9b8d('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var def={'method':'POST','json':!![]};function emit(_0x2bab1b,_0xa83bff,_0x47263b){io['to'](_0x2bab1b)[_0x9b8d('0xa')](_0xa83bff,_0x47263b);}function getTicket(_0x4d0441,_0x59ad64,_0x207b10,_0x5275df,_0x127a2b,_0x36082c,_0x370f50,_0x46486e){logger[_0x9b8d('0xb')]('Creating\x20new\x20ticket...');var _0x29eb23=new Date();var _0x4c2af2=[{'name':'name','value':intUtil[_0x9b8d('0xc')](_0x5275df[_0x9b8d('0xd')],_0x127a2b,'\x20')},{'name':'assigned_user_id','value':_0x59ad64['id']},{'name':'created_by','value':_0x59ad64['id']},{'name':'description','value':intUtil[_0x9b8d('0xc')](_0x5275df[_0x9b8d('0xe')],_0x127a2b,'\x0a')},{'name':_0x9b8d('0xf'),'value':_0x29eb23[_0x9b8d('0x10')]()[_0x9b8d('0x11')](0x0,0x13)['replace']('T','\x20')},{'name':'duration_hours','value':'0'},{'name':'duration_minutes','value':'15'},{'name':_0x9b8d('0x12'),'value':_0x207b10['id']},{'name':_0x9b8d('0x13'),'value':_0x9b8d('0x14')},{'name':'parent_name','value':_0x207b10[_0x9b8d('0x15')]},{'name':_0x9b8d('0x16'),'value':_0x46486e}];if(_0x36082c[_0x9b8d('0x17')]){_[_0x9b8d('0x18')](_0x36082c,function(_0x4ad2a7){if(_0x127a2b[_0x4ad2a7[_0x9b8d('0x19')]]){_0x4c2af2[_0x9b8d('0x1a')]({'name':_0x4ad2a7[_0x9b8d('0x1b')],'value':_0x127a2b[_0x4ad2a7[_0x9b8d('0x19')]]});}});}return request({'form':{'method':_0x9b8d('0x1c'),'input_type':_0x9b8d('0x1d'),'response_type':_0x9b8d('0x1d'),'rest_data':JSON[_0x9b8d('0x1e')]({'session':_0x370f50['id'],'module_name':_0x9b8d('0x1f'),'name_value_list':_0x4c2af2})}});}function getAuth(_0x1257f0){return util[_0x9b8d('0x20')](_0x9b8d('0x21'),new Buffer(_0x1257f0[_0x9b8d('0x22')]+':X')['toString'](_0x9b8d('0x23')));}function getServerInfo(_0x56a09a){return request({'form':{'method':_0x9b8d('0x24'),'input_type':_0x9b8d('0x1d'),'response_type':_0x9b8d('0x1d'),'rest_data':JSON[_0x9b8d('0x1e')]({'session':_0x56a09a['id']})}});}function getUser(_0x222c48,_0x191745,_0x56a6b7){if(!_['isNil'](_0x191745)){logger['info'](_0x9b8d('0x25'),_0x191745);return request({'form':{'method':'get_entry_list','input_type':_0x9b8d('0x1d'),'response_type':_0x9b8d('0x1d'),'rest_data':JSON[_0x9b8d('0x1e')]({'session':_0x56a6b7['id'],'module_name':'Employees','query':util['format'](_0x9b8d('0x26'),_0x191745),'order_by':'','offset':'0','select_fields':['id',_0x9b8d('0x15'),_0x9b8d('0x27')],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})['then'](function(_0xb234ce){if(_0xb234ce[_0x9b8d('0x28')][_0x9b8d('0x17')]){var _0x2a806a=_[_0x9b8d('0x29')](_0xb234ce[_0x9b8d('0x28')],function(_0x4f1c0b){return _0x4f1c0b['name_value_list'][_0x9b8d('0x27')][_0x9b8d('0x2a')]===_0x191745;});if(_0x2a806a){logger[_0x9b8d('0xb')](_0x9b8d('0x2b'));return BPromise[_0x9b8d('0x2c')]({'id':_0x2a806a[_0x9b8d('0x2d')]['id'][_0x9b8d('0x2a')],'name':_0x2a806a[_0x9b8d('0x2d')]['name'][_0x9b8d('0x2a')]});}}logger['info'](_0x9b8d('0x2e'));return BPromise[_0x9b8d('0x2c')]({'id':_0x56a6b7['name_value_list']['user_id']['value'],'name':_0x56a6b7[_0x9b8d('0x2d')]['user_name']['value']});});}else{logger['info'](_0x9b8d('0x2f'));return BPromise[_0x9b8d('0x2c')]({'id':_0x56a6b7['name_value_list'][_0x9b8d('0x30')][_0x9b8d('0x2a')],'name':_0x56a6b7[_0x9b8d('0x2d')][_0x9b8d('0x27')][_0x9b8d('0x2a')]});}}function getEndUser(_0x4ea435,_0x46e445,_0x2150ff,_0xdd3ee7){logger['info'](_0x9b8d('0x31'),_0x2150ff);return request({'form':{'method':'get_entry_list','input_type':_0x9b8d('0x1d'),'response_type':_0x9b8d('0x1d'),'rest_data':JSON[_0x9b8d('0x1e')]({'session':_0xdd3ee7['id'],'module_name':'Contacts','query':util[_0x9b8d('0x20')](_0x9b8d('0x32'),_0x2150ff),'order_by':'','offset':'0','select_fields':['id',_0x9b8d('0x15'),_0x9b8d('0x33')],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})[_0x9b8d('0x34')](function(_0x5558e3){if(_0x5558e3[_0x9b8d('0x28')]['length']){var _0x597381=_[_0x9b8d('0x29')](_0x5558e3[_0x9b8d('0x28')],function(_0x7f379c){return _0x7f379c[_0x9b8d('0x2d')][_0x9b8d('0x33')][_0x9b8d('0x2a')]===_0x2150ff;});if(_0x597381){logger[_0x9b8d('0xb')](_0x9b8d('0x35'));return BPromise[_0x9b8d('0x2c')]({'id':_0x597381[_0x9b8d('0x2d')]['id'][_0x9b8d('0x2a')],'name':_0x597381[_0x9b8d('0x2d')][_0x9b8d('0x15')][_0x9b8d('0x2a')],'phone':_0x597381[_0x9b8d('0x2d')][_0x9b8d('0x33')][_0x9b8d('0x2a')]});}}else{logger[_0x9b8d('0xb')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'form':{'method':_0x9b8d('0x1c'),'input_type':'JSON','response_type':_0x9b8d('0x1d'),'rest_data':JSON[_0x9b8d('0x1e')]({'session':_0xdd3ee7['id'],'module_name':_0x9b8d('0x14'),'name_value_list':[{'name':_0x9b8d('0x36'),'value':_0x46e445!==_0x9b8d('0x37')?_0x46e445:util['format'](_0x9b8d('0x38'),_0x2150ff)},{'name':_0x9b8d('0x33'),'value':_0x2150ff}]})}})[_0x9b8d('0x34')](function(_0x1b5a1c){logger[_0x9b8d('0xb')](_0x9b8d('0x39'));return BPromise[_0x9b8d('0x2c')]({'id':_0x1b5a1c['id'],'name':_0x1b5a1c[_0x9b8d('0x28')][_0x9b8d('0x36')][_0x9b8d('0x2a')],'phone':_0x1b5a1c[_0x9b8d('0x28')][_0x9b8d('0x33')]['value']});});}});}function request(_0xb9d984){logger[_0x9b8d('0x3a')](_0x9b8d('0x3b'),JSON['stringify'](_0xb9d984));return rp(_[_0x9b8d('0x3c')](def,_0xb9d984));}function getTags(_0x187ba3,_0x407b2d){var _0x5556d2=[];if(_0x187ba3&&_0x187ba3[_0x9b8d('0x17')]>0x0){_0x5556d2=_[_0x9b8d('0x3d')](_0x187ba3,_0x407b2d);}return _0x5556d2;}function getCustomFields(_0x33c8a1,_0x2c1340){var _0xf48a59=[];var _0x43219f={'custom_fields':[]};if(_0x33c8a1[_0x9b8d('0x17')]>0x0){_[_0x9b8d('0x18')](_0x33c8a1,function(_0x3320f0){if(_0x3320f0[_0x9b8d('0x3e')]===_0x9b8d('0x3f')&&_0x3320f0[_0x9b8d('0x40')]&&!_0x3320f0[_0x9b8d('0x41')]){_0x43219f[_0x3320f0[_0x9b8d('0x40')][_0x9b8d('0x42')]()]=_0x3320f0[_0x9b8d('0x43')]['toString']();}else if(_0x3320f0[_0x9b8d('0x3e')]===_0x9b8d('0x3f')&&_0x3320f0[_0x9b8d('0x1b')]&&_0x3320f0[_0x9b8d('0x41')]){_0x43219f[_0x9b8d('0x44')][_0x9b8d('0x1a')]({'id':_0x3320f0[_0x9b8d('0x1b')],'value':_0x3320f0[_0x9b8d('0x43')][_0x9b8d('0x45')]()});}else if(_0x3320f0[_0x9b8d('0x3e')]==='variable'&&_0x3320f0[_0x9b8d('0x19')]&&_0x3320f0[_0x9b8d('0x1b')]&&_0x3320f0[_0x9b8d('0x41')]){_0x2c1340[_0x3320f0[_0x9b8d('0x19')]]&&_0x43219f[_0x9b8d('0x44')]['push']({'id':_0x3320f0[_0x9b8d('0x1b')],'value':_0x2c1340[_0x3320f0[_0x9b8d('0x19')]][_0x9b8d('0x45')]()});}else if(_0x3320f0[_0x9b8d('0x3e')]===_0x9b8d('0x46')&&_0x3320f0[_0x9b8d('0x47')]&&_0x3320f0['Variable']['name']&&_0x3320f0['idField']&&_0x3320f0['customField']){_0x2c1340[_0x3320f0[_0x9b8d('0x47')][_0x9b8d('0x15')]['toLowerCase']()]&&_0x43219f[_0x9b8d('0x44')][_0x9b8d('0x1a')]({'id':_0x3320f0[_0x9b8d('0x1b')],'value':_0x2c1340[_0x3320f0['Variable'][_0x9b8d('0x15')][_0x9b8d('0x42')]()][_0x9b8d('0x45')]()});}});}return _0x43219f;}function getConnection(_0x55c016){return request({'method':_0x9b8d('0x48'),'form':{'method':_0x9b8d('0x49'),'input_type':_0x9b8d('0x1d'),'response_type':_0x9b8d('0x1d'),'rest_data':JSON['stringify']({'user_auth':{'user_name':_0x55c016[_0x9b8d('0x4a')],'password':_0x55c016['password'],'encryption':'PLAIN'},'application':_0x9b8d('0x4b')})}})[_0x9b8d('0x34')](function(_0x247afb){var _0x5ea113=_0x247afb;if(_0x5ea113['id']){def[_0x9b8d('0x4c')]=_0x5ea113['id'];return BPromise[_0x9b8d('0x2c')](_0x5ea113);}else{throw new Error(util[_0x9b8d('0x20')](_0x9b8d('0x4d'),_0x55c016['id']));}});}function setRelationship(_0x5d342d,_0xbf874e,_0x2222dd,_0x4b7a99){return request({'form':{'method':_0x9b8d('0x4e'),'input_type':'JSON','response_type':_0x9b8d('0x1d'),'rest_data':JSON[_0x9b8d('0x1e')]({'session':_0x5d342d['id'],'module_name':'Calls','module_id':_0x2222dd['id'],'link_field_name':_0x4b7a99,'related_ids':[_0xbf874e['id']]})}});}exports[_0x9b8d('0x4f')]=function(_0x460080,_0x2c402e,_0x3526a4,_0x41343f,_0x4babe8,_0x3f18cc){var _0x2943a9,_0x5e4e47,_0x10306e,_0x127092;_0x3f18cc[_0x9b8d('0x50')]=intUtil[_0x9b8d('0x51')](_0x3f18cc[_0x9b8d('0x50')]);_0x3f18cc[_0x9b8d('0x52')]=intUtil[_0x9b8d('0x51')](_0x3f18cc[_0x9b8d('0x52')]);def['uri']=util[_0x9b8d('0x20')]('%s/service/v4_1/rest.php',_0x3f18cc[_0x9b8d('0x50')]);if(_0x4babe8&&_0x4babe8[_0x9b8d('0x53')]){logger[_0x9b8d('0xb')](_0x9b8d('0x54'),_0x9b8d('0x55'));_0x2c402e['recordingURL']=util[_0x9b8d('0x20')](_0x9b8d('0x56'),_0x3f18cc[_0x9b8d('0x52')],_0x2c402e[_0x9b8d('0x57')],md5(_0x2c402e['uniqueid']));}else{_0x2c402e[_0x9b8d('0x58')]='';}return getConnection(_0x3f18cc)['then'](function(_0x8c278c){_0x127092=_0x8c278c;return getUser(_0x3f18cc,_0x41343f[_0x9b8d('0x15')],_0x127092);})[_0x9b8d('0x34')](function(_0x2ce4b1){_0x2943a9=_0x2ce4b1;logger[_0x9b8d('0xb')](_0x9b8d('0x59'),_0x2943a9['id']);return getEndUser(_0x3f18cc,_0x2c402e[_0x9b8d('0x5a')],_0x2c402e[_0x9b8d('0x5b')],_0x127092);})['then'](function(_0x1e5857){_0x5e4e47=_0x1e5857;logger['info'](_0x9b8d('0x5c'),_0x5e4e47['id']);return getTicket(_0x3f18cc,_0x2943a9,_0x5e4e47,_0x3526a4,_0x2c402e,_0x3526a4[_0x9b8d('0x5d')],_0x127092,'Inbound');})[_0x9b8d('0x34')](function(_0x275887){_0x10306e=_0x275887;logger['info']('Ticket\x20created!');logger[_0x9b8d('0xb')]('The\x20Ticket\x20ID\x20is:',_0x10306e['id']);return setRelationship(_0x127092,_0x2943a9,_0x10306e,_0x9b8d('0x5e'));})[_0x9b8d('0x34')](function(){return setRelationship(_0x127092,_0x5e4e47,_0x10306e,_0x9b8d('0x5f'));})[_0x9b8d('0x34')](function(){return getServerInfo(_0x127092);})['then'](function(_0x2b44f7){var _0x198d46=parseInt(_0x2b44f7[_0x9b8d('0x60')][_0x9b8d('0x61')](0x0));var _0x116abe=util[_0x9b8d('0x20')](_0x9b8d('0x62'),_0x3f18cc['remoteUri'],_0x10306e['id']);if(_0x198d46>0x6){_0x116abe=util[_0x9b8d('0x20')](_0x9b8d('0x63'),_0x3f18cc[_0x9b8d('0x50')],_0x10306e['id']);}logger[_0x9b8d('0xb')](_0x9b8d('0x54'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x9b8d('0x20')](_0x9b8d('0x64'),_0x41343f[_0x9b8d('0x15')]),_0x9b8d('0x65'),{'uri':_0x116abe});})[_0x9b8d('0x66')](function(_0x1e08a6){logger['error']('[QUEUE]',JSON['stringify'](_0x1e08a6));});};exports['outbound']=function(_0x5513f9,_0x5bde52,_0x5d006a,_0x11732d,_0x1c6618,_0x17ef4c,_0x5e73bd){var _0x102385,_0x136701,_0x3a60a6,_0x38ff3c;_0x17ef4c[_0x9b8d('0x50')]=intUtil['stripTrailingSlash'](_0x17ef4c[_0x9b8d('0x50')]);_0x17ef4c['serverUrl']=intUtil[_0x9b8d('0x51')](_0x17ef4c[_0x9b8d('0x52')]);def[_0x9b8d('0x67')]=util[_0x9b8d('0x20')](_0x9b8d('0x68'),_0x17ef4c[_0x9b8d('0x50')]);if(_0x5e73bd&&_0x5e73bd['recordingFormat']&&_0x5e73bd[_0x9b8d('0x69')]!==_0x9b8d('0x6a')){logger['info'](_0x9b8d('0x6b'),_0x9b8d('0x55'));_0x5bde52[_0x9b8d('0x58')]=util[_0x9b8d('0x20')](_0x9b8d('0x56'),_0x17ef4c[_0x9b8d('0x52')],_0x5bde52[_0x9b8d('0x57')],md5(_0x5bde52['uniqueid']));}return getConnection(_0x17ef4c)[_0x9b8d('0x34')](function(_0x28446e){_0x38ff3c=_0x28446e;return getUser(_0x17ef4c,_0x11732d[_0x9b8d('0x15')],_0x38ff3c);})[_0x9b8d('0x34')](function(_0x42072f){_0x102385=_0x42072f;logger[_0x9b8d('0xb')](_0x9b8d('0x59'),_0x102385['id']);return getEndUser(_0x17ef4c,_0x5bde52[_0x9b8d('0x6c')],_0x5bde52[_0x9b8d('0x6d')],_0x38ff3c);})[_0x9b8d('0x34')](function(_0x164e3f){_0x136701=_0x164e3f;logger[_0x9b8d('0xb')](_0x9b8d('0x5c'),_0x136701['id']);return getTicket(_0x17ef4c,_0x102385,_0x136701,_0x5d006a,_0x5bde52,_0x5d006a[_0x9b8d('0x5d')],_0x38ff3c,_0x9b8d('0x6e'));})['then'](function(_0x9773d4){_0x3a60a6=_0x9773d4;logger[_0x9b8d('0xb')](_0x9b8d('0x6f'));logger[_0x9b8d('0xb')](_0x9b8d('0x70'),_0x3a60a6['id']);return setRelationship(_0x38ff3c,_0x102385,_0x3a60a6,'users');})[_0x9b8d('0x34')](function(){return setRelationship(_0x38ff3c,_0x136701,_0x3a60a6,_0x9b8d('0x5f'));})[_0x9b8d('0x34')](function(){return getServerInfo(_0x38ff3c);})[_0x9b8d('0x34')](function(_0x1f3920){var _0x1fbd19=parseInt(_0x1f3920['version'][_0x9b8d('0x61')](0x0));var _0xad83d=util[_0x9b8d('0x20')](_0x9b8d('0x62'),_0x17ef4c[_0x9b8d('0x50')],_0x3a60a6['id']);if(_0x1fbd19>0x6){_0xad83d=util['format'](_0x9b8d('0x63'),_0x17ef4c[_0x9b8d('0x50')],_0x3a60a6['id']);}logger[_0x9b8d('0xb')](_0x9b8d('0x6b'),_0x9b8d('0x71'));emit(util['format'](_0x9b8d('0x64'),_0x11732d[_0x9b8d('0x15')]),_0x9b8d('0x65'),{'uri':_0xad83d});})[_0x9b8d('0x66')](function(_0xb0dd10){logger['error']('[OUTBOUND]',JSON[_0x9b8d('0x1e')](_0xb0dd10));});};exports['abandoned']=function(_0x45305e,_0x11d20d,_0x15a51f,_0xc20a9a,_0x300f72,_0x6457c6){var _0x547d92,_0x8fe6de,_0x439808,_0x56497a;_0x6457c6[_0x9b8d('0x50')]=intUtil[_0x9b8d('0x51')](_0x6457c6[_0x9b8d('0x50')]);_0x6457c6[_0x9b8d('0x52')]=intUtil['stripTrailingSlash'](_0x6457c6[_0x9b8d('0x52')]);def[_0x9b8d('0x67')]=util[_0x9b8d('0x20')]('%s/service/v4_1/rest.php',_0x6457c6[_0x9b8d('0x50')]);if(_0x300f72&&_0x300f72[_0x9b8d('0x53')]){logger[_0x9b8d('0xb')]('[ABANDONED]','Recording\x20is\x20enabled!');_0x11d20d[_0x9b8d('0x58')]=util[_0x9b8d('0x20')](_0x9b8d('0x56'),_0x6457c6[_0x9b8d('0x52')],_0x11d20d[_0x9b8d('0x57')],md5(_0x11d20d[_0x9b8d('0x57')]));}else{_0x11d20d[_0x9b8d('0x58')]='';}return getConnection(_0x6457c6)['then'](function(_0xbf0013){_0x56497a=_0xbf0013;if(!_[_0x9b8d('0x72')](_0xc20a9a)){return getUser(_0x6457c6,_0xc20a9a[_0x9b8d('0x15')],_0x56497a);}else{return getUser(_0x6457c6,null,_0x56497a);}})[_0x9b8d('0x34')](function(_0x5eab52){_0x547d92=_0x5eab52;logger['info'](_0x9b8d('0x59'),_0x547d92['id']);return getEndUser(_0x6457c6,_0x11d20d['calleridname'],_0x11d20d[_0x9b8d('0x5b')],_0x56497a);})[_0x9b8d('0x34')](function(_0x396450){_0x8fe6de=_0x396450;logger[_0x9b8d('0xb')](_0x9b8d('0x5c'),_0x8fe6de['id']);return getTicket(_0x6457c6,_0x547d92,_0x8fe6de,_0x15a51f,_0x11d20d,_0x15a51f['Fields'],_0x56497a,_0x9b8d('0x73'));})[_0x9b8d('0x34')](function(_0x3022e0){_0x439808=_0x3022e0;logger['info'](_0x9b8d('0x6f'));logger['info'](_0x9b8d('0x70'),_0x439808['id']);return setRelationship(_0x56497a,_0x547d92,_0x439808,_0x9b8d('0x5e'));})['then'](function(){return setRelationship(_0x56497a,_0x8fe6de,_0x439808,_0x9b8d('0x5f'));})[_0x9b8d('0x34')](function(){return getServerInfo(_0x56497a);})['catch'](function(_0x247cd4){logger[_0x9b8d('0x74')](_0x9b8d('0x75'),JSON[_0x9b8d('0x1e')](_0x247cd4));});};
\ No newline at end of file
index d64cdd5..60e4bb3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd377=['%s:\x20%s','keyContent','join','substring','lastIndexOf','isNil','lodash','util','getString','sortBy','string','type','variable','variableName','push','customVariable','Variable','name','toLowerCase','toString','keyValue','keyType','key','format'];(function(_0x2636db,_0x36701d){var _0x485039=function(_0x473e36){while(--_0x473e36){_0x2636db['push'](_0x2636db['shift']());}};_0x485039(++_0x36701d);}(_0xd377,0x19e));var _0x7d37=function(_0x21a9d9,_0x4d5ac8){_0x21a9d9=_0x21a9d9-0x0;var _0x46adce=_0xd377[_0x21a9d9];return _0x46adce;};'use strict';var _=require(_0x7d37('0x0'));var util=require(_0x7d37('0x1'));exports[_0x7d37('0x2')]=function(_0x29e833,_0x2a6013,_0x56edbc){var _0x5a3edd=[];if(_0x29e833['length']>0x0){var _0xa72edf=_[_0x7d37('0x3')](_0x29e833,['id']);for(var _0x58f028=0x0;_0x58f028<_0xa72edf['length'];_0x58f028++){var _0x5a7cbf=_0xa72edf[_0x58f028];if(_0x5a7cbf['type']===_0x7d37('0x4')){_0x5a3edd['push'](_0x5a7cbf['content']);}else if(_0x5a7cbf[_0x7d37('0x5')]===_0x7d37('0x6')&&_0x5a7cbf[_0x7d37('0x7')]){_0x2a6013[_0x5a7cbf[_0x7d37('0x7')]]&&_0x5a3edd[_0x7d37('0x8')](_0x2a6013[_0x5a7cbf[_0x7d37('0x7')]]['toString']());}else if(_0x5a7cbf[_0x7d37('0x5')]===_0x7d37('0x9')&&_0x5a7cbf[_0x7d37('0xa')]&&_0x5a7cbf[_0x7d37('0xa')][_0x7d37('0xb')]){_0x2a6013[_0x5a7cbf[_0x7d37('0xa')]['name'][_0x7d37('0xc')]()]&&_0x5a3edd[_0x7d37('0x8')](_0x2a6013[_0x5a7cbf[_0x7d37('0xa')]['name'][_0x7d37('0xc')]()][_0x7d37('0xd')]());}else if(_0x5a7cbf['type']===_0x7d37('0xe')){if(_0x5a7cbf[_0x7d37('0xf')]===_0x7d37('0x4')&&_0x5a7cbf[_0x7d37('0x10')]){_0x5a3edd[_0x7d37('0x8')](util[_0x7d37('0x11')](_0x7d37('0x12'),_0x5a7cbf[_0x7d37('0x10')],_0x5a7cbf[_0x7d37('0x13')]));}else if(_0x5a7cbf[_0x7d37('0xf')]==='variable'&&_0x5a7cbf[_0x7d37('0x7')]&&_0x5a7cbf[_0x7d37('0x10')]){_0x2a6013[_0x5a7cbf[_0x7d37('0x7')]]&&_0x5a3edd[_0x7d37('0x8')](util[_0x7d37('0x11')](_0x7d37('0x12'),_0x5a7cbf[_0x7d37('0x10')],_0x2a6013[_0x5a7cbf['variableName']]));}else if(_0x5a7cbf[_0x7d37('0xf')]===_0x7d37('0x9')&&_0x5a7cbf[_0x7d37('0xa')]&&_0x5a7cbf[_0x7d37('0xa')]['name']&&_0x5a7cbf[_0x7d37('0x10')]){_0x2a6013[_0x5a7cbf[_0x7d37('0xa')]['name'][_0x7d37('0xc')]()]&&_0x5a3edd[_0x7d37('0x8')](util[_0x7d37('0x11')](_0x7d37('0x12'),_0x5a7cbf[_0x7d37('0x10')],_0x2a6013[_0x5a7cbf[_0x7d37('0xa')][_0x7d37('0xb')][_0x7d37('0xc')]()]));}}}}return _0x5a3edd[_0x7d37('0x14')](_0x56edbc);};exports['stripTrailingSlash']=function(_0x3c6092){var _0xb18e3a=_0x3c6092['slice'](-0x1);if(_0xb18e3a==='/'){_0x3c6092=_0x3c6092[_0x7d37('0x15')](0x0,_0x3c6092[_0x7d37('0x16')](_0xb18e3a));}return _0x3c6092;};exports['validateEmail']=function(_0xcaf61c){if(!_[_0x7d37('0x17')](_0xcaf61c)&&_0xcaf61c!==''){var _0x5607f8=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return _0x5607f8['test'](String(_0xcaf61c)[_0x7d37('0xc')]());}else{return![];}};
\ No newline at end of file
+var _0xe96a=['variable','variableName','customVariable','Variable','name','toLowerCase','keyType','string','key','format','%s:\x20%s','keyContent','join','stripTrailingSlash','slice','lastIndexOf','validateEmail','isNil','test','lodash','util','getString','length','type','push','content'];(function(_0x292eb9,_0x3a6170){var _0x343644=function(_0x149fe9){while(--_0x149fe9){_0x292eb9['push'](_0x292eb9['shift']());}};_0x343644(++_0x3a6170);}(_0xe96a,0x199));var _0xae96=function(_0x31e11b,_0x22bd4e){_0x31e11b=_0x31e11b-0x0;var _0x1b415a=_0xe96a[_0x31e11b];return _0x1b415a;};'use strict';var _=require(_0xae96('0x0'));var util=require(_0xae96('0x1'));exports[_0xae96('0x2')]=function(_0x123131,_0x118409,_0x15750c){var _0xea7181=[];if(_0x123131[_0xae96('0x3')]>0x0){var _0x4038ae=_['sortBy'](_0x123131,['id']);for(var _0x9d10e3=0x0;_0x9d10e3<_0x4038ae[_0xae96('0x3')];_0x9d10e3++){var _0x12f940=_0x4038ae[_0x9d10e3];if(_0x12f940[_0xae96('0x4')]==='string'){_0xea7181[_0xae96('0x5')](_0x12f940[_0xae96('0x6')]);}else if(_0x12f940[_0xae96('0x4')]===_0xae96('0x7')&&_0x12f940[_0xae96('0x8')]){_0x118409[_0x12f940[_0xae96('0x8')]]&&_0xea7181['push'](_0x118409[_0x12f940[_0xae96('0x8')]]['toString']());}else if(_0x12f940[_0xae96('0x4')]===_0xae96('0x9')&&_0x12f940[_0xae96('0xa')]&&_0x12f940[_0xae96('0xa')][_0xae96('0xb')]){_0x118409[_0x12f940['Variable'][_0xae96('0xb')]['toLowerCase']()]&&_0xea7181[_0xae96('0x5')](_0x118409[_0x12f940[_0xae96('0xa')][_0xae96('0xb')][_0xae96('0xc')]()]['toString']());}else if(_0x12f940['type']==='keyValue'){if(_0x12f940[_0xae96('0xd')]===_0xae96('0xe')&&_0x12f940[_0xae96('0xf')]){_0xea7181[_0xae96('0x5')](util[_0xae96('0x10')](_0xae96('0x11'),_0x12f940['key'],_0x12f940[_0xae96('0x12')]));}else if(_0x12f940[_0xae96('0xd')]===_0xae96('0x7')&&_0x12f940[_0xae96('0x8')]&&_0x12f940[_0xae96('0xf')]){_0x118409[_0x12f940['variableName']]&&_0xea7181[_0xae96('0x5')](util[_0xae96('0x10')](_0xae96('0x11'),_0x12f940[_0xae96('0xf')],_0x118409[_0x12f940[_0xae96('0x8')]]));}else if(_0x12f940[_0xae96('0xd')]===_0xae96('0x9')&&_0x12f940[_0xae96('0xa')]&&_0x12f940[_0xae96('0xa')][_0xae96('0xb')]&&_0x12f940[_0xae96('0xf')]){_0x118409[_0x12f940[_0xae96('0xa')][_0xae96('0xb')]['toLowerCase']()]&&_0xea7181[_0xae96('0x5')](util[_0xae96('0x10')](_0xae96('0x11'),_0x12f940[_0xae96('0xf')],_0x118409[_0x12f940[_0xae96('0xa')][_0xae96('0xb')][_0xae96('0xc')]()]));}}}}return _0xea7181[_0xae96('0x13')](_0x15750c);};exports[_0xae96('0x14')]=function(_0x575864){var _0x35cd51=_0x575864[_0xae96('0x15')](-0x1);if(_0x35cd51==='/'){_0x575864=_0x575864['substring'](0x0,_0x575864[_0xae96('0x16')](_0x35cd51));}return _0x575864;};exports[_0xae96('0x17')]=function(_0x37423b){if(!_[_0xae96('0x18')](_0x37423b)&&_0x37423b!==''){var _0x1b4fb0=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return _0x1b4fb0[_0xae96('0x19')](String(_0x37423b)[_0xae96('0xc')]());}else{return![];}};
\ No newline at end of file
index efddf82..5afbf0f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc368=['serverUrl','uniqueid','recordingURL','email','The\x20User\x20ID\x20is:','The\x20Enduser\x20ID\x20is:','Fields','Ticket\x20created!','%s/index.php?module=HelpDesk&view=Detail&record=%s&app=SUPPORT','split','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','outbound','stripTrailingSlash','recordingFormat','[OUTBOUND]','destcalleridname','destcalleridnum','user:%s','trigger:browser:url','abandoned','monitor_format','[ABANDONED]','calleridname','calleridnum','request-promise','md5','util','ioredis','./util','../../../../config/environment','vTiger','redis','defaults','emit','forEach','string','idField','content','toString','type','variable','variableName','Variable','name','toLowerCase','info','Creating\x20new\x20ticket...','merge','Normal','Open','getString','Subjects','Descriptions','POST','admin','sessionName','HelpDesk','stringify','then','resolve','format','error','catch','[vTiger],\x20%s,\x20%s,\x20%s','validateEmail','Getting\x20agent\x20with\x20email','%s/webservice.php','remoteUri','query','SELECT\x20first_name,\x20last_name,\x20email1\x20FROM\x20Users\x20WHERE\x20email1=\x27%s\x27;','success','result','length','Agent\x20found!','last_name','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','userId','username','getUser','statusCode','GET','SELECT\x20id,\x20firstname,\x20lastname,\x20email,\x20phone,\x20mobile,\x20homephone,\x20otherphone,\x20assistantphone\x20FROM\x20Contacts\x20WHERE\x20phone\x20=\x20\x27%s\x27\x20OR\x20mobile\x20=\x27%s\x27\x20OR\x20homephone\x20=\x27%s\x27\x20OR\x20otherphone\x20=\x27%s\x27\x20OR\x20assistantphone\x20=\x27%s\x27;','Enduser\x20found!','firstname','lastname','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','create','Enduser\x20created.','phone','getEndUser','accessKey','token','Account\x20%d\x20is\x20not\x20valid','getConnection','[HTTP]','queue','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s'];(function(_0x23e7c1,_0x35110c){var _0x1add43=function(_0x238918){while(--_0x238918){_0x23e7c1['push'](_0x23e7c1['shift']());}};_0x1add43(++_0x35110c);}(_0xc368,0x7b));var _0x8c36=function(_0x17e791,_0x5ec760){_0x17e791=_0x17e791-0x0;var _0xf1fd39=_0xc368[_0x17e791];return _0xf1fd39;};'use strict';var _=require('lodash');var rp=require(_0x8c36('0x0'));var BPromise=require('bluebird');var md5=require(_0x8c36('0x1'));var util=require(_0x8c36('0x2'));var Redis=require(_0x8c36('0x3'));var intUtil=require(_0x8c36('0x4'));var config=require(_0x8c36('0x5'));var logger=require('../../../../config/logger')(_0x8c36('0x6'));config[_0x8c36('0x7')]=_[_0x8c36('0x8')](config[_0x8c36('0x7')],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x8c36('0x7')]));function emit(_0x384867,_0x3e76be,_0x26bad1){io['to'](_0x384867)[_0x8c36('0x9')](_0x3e76be,_0x26bad1);}function getCustomFields(_0x207021,_0x569f29){var _0x5bfbdd={};if(_0x207021['length']>0x0){_[_0x8c36('0xa')](_0x207021,function(_0x28854e){if(_0x28854e['type']===_0x8c36('0xb')&&_0x28854e[_0x8c36('0xc')]){_0x5bfbdd[_0x28854e[_0x8c36('0xc')]]=_0x28854e[_0x8c36('0xd')][_0x8c36('0xe')]();}else if(_0x28854e[_0x8c36('0xf')]===_0x8c36('0x10')&&_0x28854e[_0x8c36('0x11')]&&_0x28854e[_0x8c36('0xc')]&&_0x569f29[_0x28854e[_0x8c36('0x11')]]){_0x5bfbdd[_0x28854e[_0x8c36('0xc')]]=_0x569f29[_0x28854e[_0x8c36('0x11')]][_0x8c36('0xe')]();}else if(_0x28854e[_0x8c36('0xf')]==='customVariable'&&_0x28854e[_0x8c36('0x12')]&&_0x28854e['Variable'][_0x8c36('0x13')]&&_0x28854e[_0x8c36('0xc')]&&_0x569f29[_0x28854e[_0x8c36('0x12')][_0x8c36('0x13')][_0x8c36('0x14')]()]){_0x5bfbdd[_0x28854e[_0x8c36('0xc')]]=_0x569f29[_0x28854e[_0x8c36('0x12')][_0x8c36('0x13')][_0x8c36('0x14')]()]['toString']();}});}return _0x5bfbdd;}function createTicket(_0x2be9b0,_0x46ae6e,_0x47832a,_0x2d5e5b,_0x3ef5ba,_0x5e5162,_0x15100f){logger[_0x8c36('0x15')](_0x8c36('0x16'));var _0x137d5c=_[_0x8c36('0x17')]({'parent_id':'','assigned_user_id':_0x46ae6e['id'],'ticketpriorities':_0x8c36('0x18'),'ticketstatus':_0x8c36('0x19'),'ticket_title':intUtil[_0x8c36('0x1a')](_0x2d5e5b[_0x8c36('0x1b')],_0x3ef5ba,'\x20'),'description':intUtil[_0x8c36('0x1a')](_0x2d5e5b[_0x8c36('0x1c')],_0x3ef5ba,'\x0a'),'contact_id':_0x47832a['id']},getCustomFields(_0x5e5162,_0x3ef5ba));var _0x14ee6b={'method':_0x8c36('0x1d'),'uri':util['format']('%s/webservice.php',_0x2be9b0['remoteUri']),'form':{'operation':'create','username':_0x8c36('0x1e'),'sessionName':_0x15100f[_0x8c36('0x1f')],'elementType':_0x8c36('0x20'),'element':JSON[_0x8c36('0x21')](_0x137d5c)},'json':!![]};return request(_0x14ee6b)[_0x8c36('0x22')](function(_0x27c0df){if(_0x27c0df['success']){return BPromise[_0x8c36('0x23')]({'id':_0x27c0df['result']['id']});}else{throw new Error(util[_0x8c36('0x24')]('Ticket\x20could\x20not\x20be\x20created\x20due\x20to:\x20%s',JSON[_0x8c36('0x21')](_0x27c0df[_0x8c36('0x25')])));}})[_0x8c36('0x26')](function(_0x1010c8){var _0x50aa48=_0x1010c8['statusCode']||0x1f4;logger[_0x8c36('0x25')](_0x8c36('0x27'),'createTicket',_0x50aa48,JSON['stringify'](_0x1010c8));});}function getUser(_0x418663,_0x2b5a8c,_0x502fa3){if(intUtil[_0x8c36('0x28')](_0x2b5a8c)){logger[_0x8c36('0x15')](_0x8c36('0x29'),_0x2b5a8c);return request({'method':'GET','uri':util['format'](_0x8c36('0x2a'),_0x418663[_0x8c36('0x2b')]),'qs':{'operation':_0x8c36('0x2c'),'username':_0x8c36('0x1e'),'sessionName':_0x502fa3[_0x8c36('0x1f')],'query':util[_0x8c36('0x24')](_0x8c36('0x2d'),_0x2b5a8c)},'json':!![]})[_0x8c36('0x22')](function(_0xda4e74){if(_0xda4e74[_0x8c36('0x2e')]&&_0xda4e74[_0x8c36('0x2f')][_0x8c36('0x30')]){logger[_0x8c36('0x15')](_0x8c36('0x31'));return BPromise[_0x8c36('0x23')]({'id':_0xda4e74[_0x8c36('0x2f')][0x0]['id'],'email':_0xda4e74[_0x8c36('0x2f')][0x0]['email1'],'name':_0xda4e74['result'][0x0]['first_name']+'\x20'+_0xda4e74[_0x8c36('0x2f')][_0x8c36('0x32')]});}else{logger[_0x8c36('0x15')](_0x8c36('0x33'));return BPromise[_0x8c36('0x23')]({'id':_0x502fa3[_0x8c36('0x34')],'email':_0x418663[_0x8c36('0x35')],'name':'admin'});}})[_0x8c36('0x26')](function(_0x59a4e6){var _0x3def90=_0x59a4e6['statusCode']||0x1f4;logger[_0x8c36('0x25')](_0x8c36('0x27'),_0x8c36('0x36'),_0x3def90,JSON['stringify'](_0x59a4e6));});}else{logger[_0x8c36('0x15')](_0x8c36('0x33'));return BPromise[_0x8c36('0x23')]({'id':_0x502fa3[_0x8c36('0x34')],'email':_0x418663[_0x8c36('0x35')],'name':_0x8c36('0x1e')})[_0x8c36('0x26')](function(_0x334b02){var _0x75b797=_0x334b02[_0x8c36('0x37')]||0x1f4;logger[_0x8c36('0x25')](_0x8c36('0x27'),_0x8c36('0x36'),_0x75b797,JSON[_0x8c36('0x21')](_0x334b02));});}}function getEndUser(_0x250bf7,_0x17d846,_0x292b5f,_0x5109c2){logger[_0x8c36('0x15')]('Searching\x20end\x20user\x20with\x20phone',_0x292b5f);return request({'method':_0x8c36('0x38'),'uri':util[_0x8c36('0x24')](_0x8c36('0x2a'),_0x250bf7[_0x8c36('0x2b')]),'qs':{'operation':'query','username':'admin','sessionName':_0x5109c2[_0x8c36('0x1f')],'query':util[_0x8c36('0x24')](_0x8c36('0x39'),_0x292b5f,_0x292b5f,_0x292b5f,_0x292b5f,_0x292b5f)},'json':!![]})['then'](function(_0x4f6f06){if(_0x4f6f06[_0x8c36('0x2e')]&&_0x4f6f06['result']['length']){logger[_0x8c36('0x15')](_0x8c36('0x3a'));return BPromise[_0x8c36('0x23')]({'id':_0x4f6f06[_0x8c36('0x2f')][0x0]['id'],'name':_0x4f6f06[_0x8c36('0x2f')][0x0][_0x8c36('0x3b')]+'\x20'+_0x4f6f06[_0x8c36('0x2f')][0x0][_0x8c36('0x3c')],'phone':_0x292b5f});}else{logger[_0x8c36('0x15')](_0x8c36('0x3d'));return request({'method':'POST','uri':util[_0x8c36('0x24')](_0x8c36('0x2a'),_0x250bf7[_0x8c36('0x2b')]),'form':{'operation':_0x8c36('0x3e'),'sessionName':_0x5109c2[_0x8c36('0x1f')],'elementType':'Contacts','element':JSON[_0x8c36('0x21')]({'lastname':_0x17d846,'phone':_0x292b5f,'assigned_user_id':'\x20'})},'json':!![]})[_0x8c36('0x22')](function(_0x31699c){logger[_0x8c36('0x15')](_0x8c36('0x3f'));return BPromise[_0x8c36('0x23')]({'id':_0x31699c['result']['id'],'name':_0x31699c[_0x8c36('0x2f')][_0x8c36('0x3c')],'phone':_0x31699c[_0x8c36('0x2f')][_0x8c36('0x40')]});})[_0x8c36('0x26')](function(_0x393fd0){var _0xf230cb=_0x393fd0['statusCode']||0x1f4;logger[_0x8c36('0x25')](_0x8c36('0x27'),_0x8c36('0x41'),_0xf230cb,JSON[_0x8c36('0x21')](_0x393fd0));});}});}function getConnection(_0x2b3e58){var _0x381060=_0x2b3e58[_0x8c36('0x35')];var _0x2d1626=_0x2b3e58[_0x8c36('0x42')];return request({'method':_0x8c36('0x38'),'uri':util[_0x8c36('0x24')](_0x8c36('0x2a'),_0x2b3e58['remoteUri']),'qs':{'operation':'getchallenge','username':_0x381060},'json':!![]})[_0x8c36('0x22')](function(_0x476b51){if(_0x476b51[_0x8c36('0x2e')]){return request({'method':_0x8c36('0x1d'),'uri':util['format'](_0x8c36('0x2a'),_0x2b3e58[_0x8c36('0x2b')]),'form':{'operation':'login','username':'admin','accessKey':md5(_0x476b51['result'][_0x8c36('0x43')]+_0x2d1626)},'json':!![]});}})[_0x8c36('0x22')](function(_0x3297f1){if(_0x3297f1[_0x8c36('0x2e')]){return BPromise[_0x8c36('0x23')](_0x3297f1[_0x8c36('0x2f')]);}else{throw new Error(util['format'](_0x8c36('0x44'),_0x2b3e58['id']));}})[_0x8c36('0x26')](function(_0x337bb2){var _0x355113=_0x337bb2['statusCode']||0x1f4;logger['error']('[vTiger],\x20%s,\x20%s,\x20%s',_0x8c36('0x45'),_0x355113,JSON[_0x8c36('0x21')](_0x337bb2));});}function request(_0x2fc48b){logger[_0x8c36('0x15')](_0x8c36('0x46'),JSON[_0x8c36('0x21')](_0x2fc48b));return rp(_0x2fc48b);}exports[_0x8c36('0x47')]=function(_0xd2b403,_0x2c9d63,_0x4e0635,_0x4cba50,_0x41a120,_0x4aef20){var _0x5b0910,_0x9955bc,_0x5049f5,_0x273dcd;_0x4aef20[_0x8c36('0x2b')]=intUtil['stripTrailingSlash'](_0x4aef20[_0x8c36('0x2b')]);if(_0x41a120&&_0x41a120['monitor_format']){logger[_0x8c36('0x15')](_0x8c36('0x48'),_0x8c36('0x49'));_0x2c9d63['recordingURL']=util[_0x8c36('0x24')](_0x8c36('0x4a'),_0x4aef20[_0x8c36('0x4b')],_0x2c9d63[_0x8c36('0x4c')],md5(_0x2c9d63[_0x8c36('0x4c')]));}else{_0x2c9d63[_0x8c36('0x4d')]='';}return getConnection(_0x4aef20)[_0x8c36('0x22')](function(_0x5905c0){_0x273dcd=_0x5905c0;return getUser(_0x4aef20,_0x4cba50[_0x8c36('0x4e')],_0x273dcd);})['then'](function(_0x4a35a2){_0x5b0910=_0x4a35a2;logger['info'](_0x8c36('0x4f'),_0x5b0910['id']);return getEndUser(_0x4aef20,_0x2c9d63['calleridname'],_0x2c9d63['calleridnum'],_0x273dcd);})[_0x8c36('0x22')](function(_0x176794){_0x9955bc=_0x176794;logger[_0x8c36('0x15')](_0x8c36('0x50'),_0x9955bc['id']);return createTicket(_0x4aef20,_0x5b0910,_0x9955bc,_0x4e0635,_0x2c9d63,_0x4e0635[_0x8c36('0x51')],_0x273dcd);})['then'](function(_0x499bb3){_0x5049f5=_0x499bb3;logger['info'](_0x8c36('0x52'));logger[_0x8c36('0x15')]('The\x20Ticket\x20ID\x20is:',_0x5049f5['id']);var _0x214068=util[_0x8c36('0x24')](_0x8c36('0x53'),_0x4aef20[_0x8c36('0x2b')],_[_0x8c36('0x54')](_0x5049f5['id'],'x')[0x1]);logger[_0x8c36('0x15')](_0x8c36('0x48'),_0x8c36('0x55'));emit(util[_0x8c36('0x24')]('user:%s',_0x4cba50['name']),'trigger:browser:url',{'uri':_0x214068});})[_0x8c36('0x26')](function(_0x377d99){logger[_0x8c36('0x25')](_0x8c36('0x48'),JSON[_0x8c36('0x21')](_0x377d99));});};exports[_0x8c36('0x56')]=function(_0x4d1891,_0x55d2c7,_0x5b2406,_0x102a93,_0x2bd9ce,_0x62e70,_0x5cbb2b){var _0xe59f9b,_0x51c797,_0x11acb3,_0xdab5e6;_0x62e70[_0x8c36('0x2b')]=intUtil[_0x8c36('0x57')](_0x62e70[_0x8c36('0x2b')]);_0x62e70['serverUrl']=intUtil[_0x8c36('0x57')](_0x62e70['serverUrl']);if(_0x5cbb2b&&_0x5cbb2b[_0x8c36('0x58')]&&_0x5cbb2b[_0x8c36('0x58')]!=='none'){logger[_0x8c36('0x15')](_0x8c36('0x59'),_0x8c36('0x49'));_0x55d2c7['recordingURL']=util[_0x8c36('0x24')](_0x8c36('0x4a'),_0x62e70[_0x8c36('0x4b')],_0x55d2c7[_0x8c36('0x4c')],md5(_0x55d2c7['uniqueid']));}return getConnection(_0x62e70)[_0x8c36('0x22')](function(_0x3ae9b7){_0xdab5e6=_0x3ae9b7;return getUser(_0x62e70,_0x102a93['email'],_0xdab5e6);})[_0x8c36('0x22')](function(_0x1bfe8c){_0xe59f9b=_0x1bfe8c;logger[_0x8c36('0x15')]('The\x20User\x20ID\x20is:',_0xe59f9b['id']);return getEndUser(_0x62e70,_0x55d2c7[_0x8c36('0x5a')],_0x55d2c7[_0x8c36('0x5b')],_0xdab5e6);})['then'](function(_0x2f851f){_0x51c797=_0x2f851f;logger[_0x8c36('0x15')](_0x8c36('0x50'),_0x51c797['id']);return createTicket(_0x62e70,_0xe59f9b,_0x51c797,_0x5b2406,_0x55d2c7,_0x5b2406[_0x8c36('0x51')],_0xdab5e6);})['then'](function(_0x427a22){_0x11acb3=_0x427a22;logger['info'](_0x8c36('0x52'));logger[_0x8c36('0x15')]('The\x20Ticket\x20ID\x20is:',_0x11acb3['id']);var _0x27b88d=util[_0x8c36('0x24')](_0x8c36('0x53'),_0x62e70[_0x8c36('0x2b')],_[_0x8c36('0x54')](_0x11acb3['id'],'x')[0x1]);logger[_0x8c36('0x15')](_0x8c36('0x59'),_0x8c36('0x55'));emit(util['format'](_0x8c36('0x5c'),_0x102a93[_0x8c36('0x13')]),_0x8c36('0x5d'),{'uri':_0x27b88d});})['catch'](function(_0x481920){logger[_0x8c36('0x25')](_0x8c36('0x59'),JSON[_0x8c36('0x21')](_0x481920));});};exports[_0x8c36('0x5e')]=function(_0x5da31f,_0x291a1f,_0x25c124,_0x7f1a0f,_0x5af061,_0x29581d){var _0x5d732,_0x4023ba,_0x25a1ff,_0xa3e8b4;_0x29581d['remoteUri']=intUtil[_0x8c36('0x57')](_0x29581d[_0x8c36('0x2b')]);_0x29581d[_0x8c36('0x4b')]=intUtil['stripTrailingSlash'](_0x29581d[_0x8c36('0x4b')]);if(_0x5af061&&_0x5af061[_0x8c36('0x5f')]){logger[_0x8c36('0x15')](_0x8c36('0x60'),_0x8c36('0x49'));_0x291a1f[_0x8c36('0x4d')]=util[_0x8c36('0x24')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x29581d['serverUrl'],_0x291a1f['uniqueid'],md5(_0x291a1f[_0x8c36('0x4c')]));}else{_0x291a1f[_0x8c36('0x4d')]='';}return getConnection(_0x29581d)[_0x8c36('0x22')](function(_0x243743){_0xa3e8b4=_0x243743;return getUser(_0x29581d,'',_0xa3e8b4);})[_0x8c36('0x22')](function(_0x3a08ed){_0x5d732=_0x3a08ed;logger[_0x8c36('0x15')](_0x8c36('0x4f'),_0x5d732['id']);return getEndUser(_0x29581d,_0x291a1f[_0x8c36('0x61')],_0x291a1f[_0x8c36('0x62')],_0xa3e8b4);})[_0x8c36('0x22')](function(_0x31eb60){_0x4023ba=_0x31eb60;logger[_0x8c36('0x15')](_0x8c36('0x50'),_0x4023ba['id']);return createTicket(_0x29581d,_0x5d732,_0x4023ba,_0x25c124,_0x291a1f,_0x25c124[_0x8c36('0x51')],_0xa3e8b4);})[_0x8c36('0x22')](function(_0xc75ca1){_0x25a1ff=_0xc75ca1;logger[_0x8c36('0x15')]('Ticket\x20created!');logger[_0x8c36('0x15')]('The\x20Ticket\x20ID\x20is:',_0x25a1ff['id']);})['catch'](function(_0x319bfe){logger['error'](_0x8c36('0x60'),JSON[_0x8c36('0x21')](_0x319bfe));});};
\ No newline at end of file
+var _0x9c02=['Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','[QUEUE]','serverUrl','recordingFormat','none','[OUTBOUND]','destcalleridnum','Fields','trigger:browser:url','abandoned','[ABANDONED]','The\x20User\x20ID\x20is:','calleridname','lodash','request-promise','bluebird','../../../../config/environment','vTiger','defaults','localhost','socket.io-emitter','redis','emit','string','idField','content','toString','type','variableName','customVariable','Variable','name','toLowerCase','Creating\x20new\x20ticket...','merge','Normal','Open','getString','Descriptions','POST','format','remoteUri','create','sessionName','HelpDesk','stringify','resolve','result','Ticket\x20could\x20not\x20be\x20created\x20due\x20to:\x20%s','error','catch','createTicket','validateEmail','%s/webservice.php','admin','SELECT\x20first_name,\x20last_name,\x20email1\x20FROM\x20Users\x20WHERE\x20email1=\x27%s\x27;','then','success','length','info','email1','first_name','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','userId','username','statusCode','[vTiger],\x20%s,\x20%s,\x20%s','getUser','Searching\x20end\x20user\x20with\x20phone','GET','query','SELECT\x20id,\x20firstname,\x20lastname,\x20email,\x20phone,\x20mobile,\x20homephone,\x20otherphone,\x20assistantphone\x20FROM\x20Contacts\x20WHERE\x20phone\x20=\x20\x27%s\x27\x20OR\x20mobile\x20=\x27%s\x27\x20OR\x20homephone\x20=\x27%s\x27\x20OR\x20otherphone\x20=\x27%s\x27\x20OR\x20assistantphone\x20=\x27%s\x27;','Enduser\x20found!','firstname','lastname','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','Contacts','phone','getEndUser','accessKey','getchallenge','login','Account\x20%d\x20is\x20not\x20valid','getConnection','[HTTP]','queue','stripTrailingSlash','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','calleridnum','The\x20Enduser\x20ID\x20is:','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','%s/index.php?module=HelpDesk&view=Detail&record=%s&app=SUPPORT','split'];(function(_0x1a8ff0,_0x20788d){var _0x3588bf=function(_0x3b5499){while(--_0x3b5499){_0x1a8ff0['push'](_0x1a8ff0['shift']());}};_0x3588bf(++_0x20788d);}(_0x9c02,0x196));var _0x29c0=function(_0xfc7aee,_0x4aa4ee){_0xfc7aee=_0xfc7aee-0x0;var _0x5378e9=_0x9c02[_0xfc7aee];return _0x5378e9;};'use strict';var _=require(_0x29c0('0x0'));var rp=require(_0x29c0('0x1'));var BPromise=require(_0x29c0('0x2'));var md5=require('md5');var util=require('util');var Redis=require('ioredis');var intUtil=require('./util');var config=require(_0x29c0('0x3'));var logger=require('../../../../config/logger')(_0x29c0('0x4'));config['redis']=_[_0x29c0('0x5')](config['redis'],{'host':_0x29c0('0x6'),'port':0x18eb});var io=require(_0x29c0('0x7'))(new Redis(config[_0x29c0('0x8')]));function emit(_0x5beeb6,_0x58fa3e,_0x18c44c){io['to'](_0x5beeb6)[_0x29c0('0x9')](_0x58fa3e,_0x18c44c);}function getCustomFields(_0xac5319,_0x2e83cb){var _0x27d0da={};if(_0xac5319['length']>0x0){_['forEach'](_0xac5319,function(_0x16ba59){if(_0x16ba59['type']===_0x29c0('0xa')&&_0x16ba59[_0x29c0('0xb')]){_0x27d0da[_0x16ba59[_0x29c0('0xb')]]=_0x16ba59[_0x29c0('0xc')][_0x29c0('0xd')]();}else if(_0x16ba59[_0x29c0('0xe')]==='variable'&&_0x16ba59[_0x29c0('0xf')]&&_0x16ba59[_0x29c0('0xb')]&&_0x2e83cb[_0x16ba59[_0x29c0('0xf')]]){_0x27d0da[_0x16ba59[_0x29c0('0xb')]]=_0x2e83cb[_0x16ba59[_0x29c0('0xf')]][_0x29c0('0xd')]();}else if(_0x16ba59[_0x29c0('0xe')]===_0x29c0('0x10')&&_0x16ba59[_0x29c0('0x11')]&&_0x16ba59[_0x29c0('0x11')][_0x29c0('0x12')]&&_0x16ba59[_0x29c0('0xb')]&&_0x2e83cb[_0x16ba59[_0x29c0('0x11')][_0x29c0('0x12')][_0x29c0('0x13')]()]){_0x27d0da[_0x16ba59[_0x29c0('0xb')]]=_0x2e83cb[_0x16ba59[_0x29c0('0x11')][_0x29c0('0x12')][_0x29c0('0x13')]()][_0x29c0('0xd')]();}});}return _0x27d0da;}function createTicket(_0x627c4c,_0x281597,_0x2bfa71,_0x429b88,_0x1bbfc5,_0x10e52c,_0x311c9b){logger['info'](_0x29c0('0x14'));var _0x6e3271=_[_0x29c0('0x15')]({'parent_id':'','assigned_user_id':_0x281597['id'],'ticketpriorities':_0x29c0('0x16'),'ticketstatus':_0x29c0('0x17'),'ticket_title':intUtil[_0x29c0('0x18')](_0x429b88['Subjects'],_0x1bbfc5,'\x20'),'description':intUtil[_0x29c0('0x18')](_0x429b88[_0x29c0('0x19')],_0x1bbfc5,'\x0a'),'contact_id':_0x2bfa71['id']},getCustomFields(_0x10e52c,_0x1bbfc5));var _0x45a6cb={'method':_0x29c0('0x1a'),'uri':util[_0x29c0('0x1b')]('%s/webservice.php',_0x627c4c[_0x29c0('0x1c')]),'form':{'operation':_0x29c0('0x1d'),'username':'admin','sessionName':_0x311c9b[_0x29c0('0x1e')],'elementType':_0x29c0('0x1f'),'element':JSON[_0x29c0('0x20')](_0x6e3271)},'json':!![]};return request(_0x45a6cb)['then'](function(_0x1993a5){if(_0x1993a5['success']){return BPromise[_0x29c0('0x21')]({'id':_0x1993a5[_0x29c0('0x22')]['id']});}else{throw new Error(util['format'](_0x29c0('0x23'),JSON[_0x29c0('0x20')](_0x1993a5[_0x29c0('0x24')])));}})[_0x29c0('0x25')](function(_0x2cb718){var _0x46be76=_0x2cb718['statusCode']||0x1f4;logger['error']('[vTiger],\x20%s,\x20%s,\x20%s',_0x29c0('0x26'),_0x46be76,JSON[_0x29c0('0x20')](_0x2cb718));});}function getUser(_0x4cdf7c,_0x4aa6bd,_0x208a5d){if(intUtil[_0x29c0('0x27')](_0x4aa6bd)){logger['info']('Getting\x20agent\x20with\x20email',_0x4aa6bd);return request({'method':'GET','uri':util[_0x29c0('0x1b')](_0x29c0('0x28'),_0x4cdf7c[_0x29c0('0x1c')]),'qs':{'operation':'query','username':_0x29c0('0x29'),'sessionName':_0x208a5d[_0x29c0('0x1e')],'query':util['format'](_0x29c0('0x2a'),_0x4aa6bd)},'json':!![]})[_0x29c0('0x2b')](function(_0x2da41d){if(_0x2da41d[_0x29c0('0x2c')]&&_0x2da41d[_0x29c0('0x22')][_0x29c0('0x2d')]){logger[_0x29c0('0x2e')]('Agent\x20found!');return BPromise['resolve']({'id':_0x2da41d[_0x29c0('0x22')][0x0]['id'],'email':_0x2da41d[_0x29c0('0x22')][0x0][_0x29c0('0x2f')],'name':_0x2da41d['result'][0x0][_0x29c0('0x30')]+'\x20'+_0x2da41d[_0x29c0('0x22')]['last_name']});}else{logger['info'](_0x29c0('0x31'));return BPromise[_0x29c0('0x21')]({'id':_0x208a5d[_0x29c0('0x32')],'email':_0x4cdf7c[_0x29c0('0x33')],'name':_0x29c0('0x29')});}})[_0x29c0('0x25')](function(_0x31be54){var _0x566e0a=_0x31be54[_0x29c0('0x34')]||0x1f4;logger['error'](_0x29c0('0x35'),_0x29c0('0x36'),_0x566e0a,JSON[_0x29c0('0x20')](_0x31be54));});}else{logger['info'](_0x29c0('0x31'));return BPromise[_0x29c0('0x21')]({'id':_0x208a5d['userId'],'email':_0x4cdf7c[_0x29c0('0x33')],'name':_0x29c0('0x29')})[_0x29c0('0x25')](function(_0x28c919){var _0x3a9b92=_0x28c919[_0x29c0('0x34')]||0x1f4;logger[_0x29c0('0x24')](_0x29c0('0x35'),_0x29c0('0x36'),_0x3a9b92,JSON[_0x29c0('0x20')](_0x28c919));});}}function getEndUser(_0x31fa82,_0x35dd53,_0x1a1b2c,_0x36a188){logger[_0x29c0('0x2e')](_0x29c0('0x37'),_0x1a1b2c);return request({'method':_0x29c0('0x38'),'uri':util[_0x29c0('0x1b')](_0x29c0('0x28'),_0x31fa82[_0x29c0('0x1c')]),'qs':{'operation':_0x29c0('0x39'),'username':_0x29c0('0x29'),'sessionName':_0x36a188[_0x29c0('0x1e')],'query':util['format'](_0x29c0('0x3a'),_0x1a1b2c,_0x1a1b2c,_0x1a1b2c,_0x1a1b2c,_0x1a1b2c)},'json':!![]})[_0x29c0('0x2b')](function(_0x2c0c1f){if(_0x2c0c1f[_0x29c0('0x2c')]&&_0x2c0c1f[_0x29c0('0x22')]['length']){logger[_0x29c0('0x2e')](_0x29c0('0x3b'));return BPromise[_0x29c0('0x21')]({'id':_0x2c0c1f['result'][0x0]['id'],'name':_0x2c0c1f[_0x29c0('0x22')][0x0][_0x29c0('0x3c')]+'\x20'+_0x2c0c1f['result'][0x0][_0x29c0('0x3d')],'phone':_0x1a1b2c});}else{logger['info'](_0x29c0('0x3e'));return request({'method':'POST','uri':util[_0x29c0('0x1b')](_0x29c0('0x28'),_0x31fa82[_0x29c0('0x1c')]),'form':{'operation':_0x29c0('0x1d'),'sessionName':_0x36a188[_0x29c0('0x1e')],'elementType':_0x29c0('0x3f'),'element':JSON['stringify']({'lastname':_0x35dd53,'phone':_0x1a1b2c,'assigned_user_id':'\x20'})},'json':!![]})['then'](function(_0x2dfcb7){logger[_0x29c0('0x2e')]('Enduser\x20created.');return BPromise[_0x29c0('0x21')]({'id':_0x2dfcb7[_0x29c0('0x22')]['id'],'name':_0x2dfcb7[_0x29c0('0x22')][_0x29c0('0x3d')],'phone':_0x2dfcb7[_0x29c0('0x22')][_0x29c0('0x40')]});})[_0x29c0('0x25')](function(_0x158d66){var _0xd857ff=_0x158d66[_0x29c0('0x34')]||0x1f4;logger[_0x29c0('0x24')](_0x29c0('0x35'),_0x29c0('0x41'),_0xd857ff,JSON[_0x29c0('0x20')](_0x158d66));});}});}function getConnection(_0x879065){var _0x1ade7a=_0x879065['username'];var _0x702fcd=_0x879065[_0x29c0('0x42')];return request({'method':'GET','uri':util[_0x29c0('0x1b')](_0x29c0('0x28'),_0x879065['remoteUri']),'qs':{'operation':_0x29c0('0x43'),'username':_0x1ade7a},'json':!![]})['then'](function(_0x2b54c8){if(_0x2b54c8['success']){return request({'method':_0x29c0('0x1a'),'uri':util[_0x29c0('0x1b')](_0x29c0('0x28'),_0x879065['remoteUri']),'form':{'operation':_0x29c0('0x44'),'username':'admin','accessKey':md5(_0x2b54c8[_0x29c0('0x22')]['token']+_0x702fcd)},'json':!![]});}})[_0x29c0('0x2b')](function(_0x1accc9){if(_0x1accc9[_0x29c0('0x2c')]){return BPromise[_0x29c0('0x21')](_0x1accc9[_0x29c0('0x22')]);}else{throw new Error(util['format'](_0x29c0('0x45'),_0x879065['id']));}})[_0x29c0('0x25')](function(_0x560e7b){var _0x47ee00=_0x560e7b[_0x29c0('0x34')]||0x1f4;logger[_0x29c0('0x24')](_0x29c0('0x35'),_0x29c0('0x46'),_0x47ee00,JSON[_0x29c0('0x20')](_0x560e7b));});}function request(_0x5a8714){logger[_0x29c0('0x2e')](_0x29c0('0x47'),JSON['stringify'](_0x5a8714));return rp(_0x5a8714);}exports[_0x29c0('0x48')]=function(_0xf367ec,_0x4e3333,_0x388e5d,_0x5b2987,_0x482e48,_0x8c71b2){var _0x54cc2a,_0x271709,_0x3800f3,_0x331cb9;_0x8c71b2[_0x29c0('0x1c')]=intUtil[_0x29c0('0x49')](_0x8c71b2['remoteUri']);if(_0x482e48&&_0x482e48['monitor_format']){logger[_0x29c0('0x2e')]('[QUEUE]',_0x29c0('0x4a'));_0x4e3333[_0x29c0('0x4b')]=util['format'](_0x29c0('0x4c'),_0x8c71b2['serverUrl'],_0x4e3333[_0x29c0('0x4d')],md5(_0x4e3333['uniqueid']));}else{_0x4e3333[_0x29c0('0x4b')]='';}return getConnection(_0x8c71b2)[_0x29c0('0x2b')](function(_0x574f7a){_0x331cb9=_0x574f7a;return getUser(_0x8c71b2,_0x5b2987['email'],_0x331cb9);})['then'](function(_0x35d0a5){_0x54cc2a=_0x35d0a5;logger[_0x29c0('0x2e')]('The\x20User\x20ID\x20is:',_0x54cc2a['id']);return getEndUser(_0x8c71b2,_0x4e3333['calleridname'],_0x4e3333[_0x29c0('0x4e')],_0x331cb9);})[_0x29c0('0x2b')](function(_0xa579fd){_0x271709=_0xa579fd;logger[_0x29c0('0x2e')](_0x29c0('0x4f'),_0x271709['id']);return createTicket(_0x8c71b2,_0x54cc2a,_0x271709,_0x388e5d,_0x4e3333,_0x388e5d['Fields'],_0x331cb9);})[_0x29c0('0x2b')](function(_0x52f7a2){_0x3800f3=_0x52f7a2;logger[_0x29c0('0x2e')](_0x29c0('0x50'));logger[_0x29c0('0x2e')](_0x29c0('0x51'),_0x3800f3['id']);var _0x20c44b=util[_0x29c0('0x1b')](_0x29c0('0x52'),_0x8c71b2[_0x29c0('0x1c')],_[_0x29c0('0x53')](_0x3800f3['id'],'x')[0x1]);logger['info']('[QUEUE]',_0x29c0('0x54'));emit(util[_0x29c0('0x1b')](_0x29c0('0x55'),_0x5b2987[_0x29c0('0x12')]),'trigger:browser:url',{'uri':_0x20c44b});})['catch'](function(_0x2c88b6){logger[_0x29c0('0x24')](_0x29c0('0x56'),JSON['stringify'](_0x2c88b6));});};exports['outbound']=function(_0x352515,_0x48ce40,_0x3de6d1,_0x266bc7,_0x46d691,_0x2afda9,_0x195df0){var _0x1fecd8,_0x446f12,_0x429cef,_0x4e903b;_0x2afda9[_0x29c0('0x1c')]=intUtil['stripTrailingSlash'](_0x2afda9[_0x29c0('0x1c')]);_0x2afda9[_0x29c0('0x57')]=intUtil[_0x29c0('0x49')](_0x2afda9[_0x29c0('0x57')]);if(_0x195df0&&_0x195df0[_0x29c0('0x58')]&&_0x195df0[_0x29c0('0x58')]!==_0x29c0('0x59')){logger[_0x29c0('0x2e')](_0x29c0('0x5a'),'Recording\x20is\x20enabled!');_0x48ce40['recordingURL']=util[_0x29c0('0x1b')](_0x29c0('0x4c'),_0x2afda9[_0x29c0('0x57')],_0x48ce40[_0x29c0('0x4d')],md5(_0x48ce40[_0x29c0('0x4d')]));}return getConnection(_0x2afda9)[_0x29c0('0x2b')](function(_0x48de56){_0x4e903b=_0x48de56;return getUser(_0x2afda9,_0x266bc7['email'],_0x4e903b);})[_0x29c0('0x2b')](function(_0x52b95a){_0x1fecd8=_0x52b95a;logger[_0x29c0('0x2e')]('The\x20User\x20ID\x20is:',_0x1fecd8['id']);return getEndUser(_0x2afda9,_0x48ce40['destcalleridname'],_0x48ce40[_0x29c0('0x5b')],_0x4e903b);})['then'](function(_0x254347){_0x446f12=_0x254347;logger[_0x29c0('0x2e')](_0x29c0('0x4f'),_0x446f12['id']);return createTicket(_0x2afda9,_0x1fecd8,_0x446f12,_0x3de6d1,_0x48ce40,_0x3de6d1[_0x29c0('0x5c')],_0x4e903b);})[_0x29c0('0x2b')](function(_0x4c57b9){_0x429cef=_0x4c57b9;logger[_0x29c0('0x2e')](_0x29c0('0x50'));logger[_0x29c0('0x2e')](_0x29c0('0x51'),_0x429cef['id']);var _0x28fb45=util[_0x29c0('0x1b')](_0x29c0('0x52'),_0x2afda9[_0x29c0('0x1c')],_[_0x29c0('0x53')](_0x429cef['id'],'x')[0x1]);logger[_0x29c0('0x2e')]('[OUTBOUND]',_0x29c0('0x54'));emit(util[_0x29c0('0x1b')]('user:%s',_0x266bc7[_0x29c0('0x12')]),_0x29c0('0x5d'),{'uri':_0x28fb45});})['catch'](function(_0x1e126e){logger['error']('[OUTBOUND]',JSON['stringify'](_0x1e126e));});};exports[_0x29c0('0x5e')]=function(_0xa2ead3,_0x5d0af6,_0x3d631b,_0x4e0aec,_0x35a00e,_0x3799ce){var _0x358afe,_0x388e8d,_0xc6a198,_0x344248;_0x3799ce[_0x29c0('0x1c')]=intUtil[_0x29c0('0x49')](_0x3799ce[_0x29c0('0x1c')]);_0x3799ce[_0x29c0('0x57')]=intUtil[_0x29c0('0x49')](_0x3799ce[_0x29c0('0x57')]);if(_0x35a00e&&_0x35a00e['monitor_format']){logger[_0x29c0('0x2e')](_0x29c0('0x5f'),_0x29c0('0x4a'));_0x5d0af6[_0x29c0('0x4b')]=util[_0x29c0('0x1b')](_0x29c0('0x4c'),_0x3799ce[_0x29c0('0x57')],_0x5d0af6['uniqueid'],md5(_0x5d0af6[_0x29c0('0x4d')]));}else{_0x5d0af6[_0x29c0('0x4b')]='';}return getConnection(_0x3799ce)[_0x29c0('0x2b')](function(_0x16bdb4){_0x344248=_0x16bdb4;return getUser(_0x3799ce,'',_0x344248);})[_0x29c0('0x2b')](function(_0x7c3cc2){_0x358afe=_0x7c3cc2;logger['info'](_0x29c0('0x60'),_0x358afe['id']);return getEndUser(_0x3799ce,_0x5d0af6[_0x29c0('0x61')],_0x5d0af6['calleridnum'],_0x344248);})[_0x29c0('0x2b')](function(_0x466bb3){_0x388e8d=_0x466bb3;logger[_0x29c0('0x2e')](_0x29c0('0x4f'),_0x388e8d['id']);return createTicket(_0x3799ce,_0x358afe,_0x388e8d,_0x3d631b,_0x5d0af6,_0x3d631b[_0x29c0('0x5c')],_0x344248);})[_0x29c0('0x2b')](function(_0x1785ee){_0xc6a198=_0x1785ee;logger[_0x29c0('0x2e')]('Ticket\x20created!');logger['info']('The\x20Ticket\x20ID\x20is:',_0xc6a198['id']);})[_0x29c0('0x25')](function(_0x54f777){logger['error']('[ABANDONED]',JSON['stringify'](_0x54f777));});};
\ No newline at end of file
index e6a1b2c..5fcc869 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe0b1=['Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/users.json','Caller\x20-\x20%s','Enduser\x20created.','authType','password','%s:%s','username','token','%s/token:%s','Basic\x20%s','toString','base64','debug','map','forEach','type','string','customField','nameField','toLowerCase','idField','custom_fields','push','content','variableName','customVariable','Variable','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','integrationTab','Displaying\x20ticket\x20to\x20agent...','POST','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','%s/agent/tickets/%s','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','inspect','recordingFormat','none','[OUTBOUND]','destcalleridnum','%s/channels/voice/agents/%d/tickets/%d/display.json','abandoned','[ABANDONED]\x20Error\x20running\x20Zendesk\x20integration','lodash','request-promise','./util','../../../../config/environment','../../../../config/logger','redis','defaults','socket.io-emitter','emit','application/json','info','format','%s/tickets.json','remoteUri','merge','name','Subjects','getString','Descriptions','Fields','Ticket\x20created!','ticket','validateEmail','Getting\x20agent\x20with\x20email','%s/search.json','then','count','Agent\x20found!','find','results','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','Admin\x20account\x20selected.','user','Searching\x20enduser\x20with\x20phone','length','filter','end-user'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xe0b1,0x10c));var _0x1e0b=function(_0x479509,_0x1daf8a){_0x479509=_0x479509-0x0;var _0x382da8=_0xe0b1[_0x479509];return _0x382da8;};'use strict';var _=require(_0x1e0b('0x0'));var rp=require(_0x1e0b('0x1'));var md5=require('md5');var util=require('util');var Redis=require('ioredis');var intUtil=require(_0x1e0b('0x2'));var config=require(_0x1e0b('0x3'));var logger=require(_0x1e0b('0x4'))('zendesk');config[_0x1e0b('0x5')]=_[_0x1e0b('0x6')](config[_0x1e0b('0x5')],{'host':'localhost','port':0x18eb});var io=require(_0x1e0b('0x7'))(new Redis(config['redis']));function emit(_0x41dbcd,_0x18eb33,_0x28f7fc){io['to'](_0x41dbcd)[_0x1e0b('0x8')](_0x18eb33,_0x28f7fc);}var headers={'Content-Type':_0x1e0b('0x9'),'Accept':_0x1e0b('0x9')};function getTicket(_0xf816a8,_0x2f713f,_0x24803d,_0x19074e,_0x5001e0){logger[_0x1e0b('0xa')]('Creating\x20new\x20ticket...');return request({'uri':util[_0x1e0b('0xb')](_0x1e0b('0xc'),_0xf816a8[_0x1e0b('0xd')]),'method':'POST','body':{'ticket':_[_0x1e0b('0xe')]({'requester_id':_0x24803d['id'],'submitter_id':_0x2f713f?_0x2f713f['id']:undefined,'assignee_id':_0x2f713f?_0x2f713f['id']:undefined,'tags':getTags(_0x19074e['Tags'],_0x1e0b('0xf')),'subject':intUtil['getString'](_0x19074e[_0x1e0b('0x10')],_0x5001e0,'\x20'),'description':intUtil[_0x1e0b('0x11')](_0x19074e[_0x1e0b('0x12')],_0x5001e0,'\x0a'),'comment':{'public':![],'body':intUtil['getString'](_0x19074e[_0x1e0b('0x12')],_0x5001e0,'\x0a')}},getCustomFields(_0x19074e[_0x1e0b('0x13')],_0x5001e0))}})['then'](function(_0x439736){logger[_0x1e0b('0xa')](_0x1e0b('0x14'));return _0x439736[_0x1e0b('0x15')];});}function getUser(_0x1b8e3e,_0x248b80){if(intUtil[_0x1e0b('0x16')](_0x248b80)){logger[_0x1e0b('0xa')](_0x1e0b('0x17'),_0x248b80);return request({'uri':util['format'](_0x1e0b('0x18'),_0x1b8e3e['remoteUri']),'qs':{'query':util[_0x1e0b('0xb')]('type:user\x20role:agent\x20email:%s',_0x248b80)}})[_0x1e0b('0x19')](function(_0x42b7b9){if(_0x42b7b9[_0x1e0b('0x1a')]){logger[_0x1e0b('0xa')](_0x1e0b('0x1b'));return _[_0x1e0b('0x1c')](_0x42b7b9[_0x1e0b('0x1d')],{'email':_0x248b80,'role':'agent'});}else{logger['info'](_0x1e0b('0x1e'));return request({'uri':util[_0x1e0b('0xb')](_0x1e0b('0x1f'),_0x1b8e3e[_0x1e0b('0xd')])})['then'](function(_0x483272){logger['info'](_0x1e0b('0x20'));return _0x483272[_0x1e0b('0x21')];});}});}else{logger[_0x1e0b('0xa')](_0x1e0b('0x1e'));return request({'uri':util[_0x1e0b('0xb')](_0x1e0b('0x1f'),_0x1b8e3e[_0x1e0b('0xd')])})[_0x1e0b('0x19')](function(_0x5ac997){logger['info']('Admin\x20account\x20selected.');return _0x5ac997[_0x1e0b('0x21')];});}}function getEndUser(_0x29c19a,_0x3dc8de,_0x6dfa12){logger[_0x1e0b('0xa')](_0x1e0b('0x22'),_0x6dfa12);return request({'uri':util['format'](_0x1e0b('0x18'),_0x29c19a[_0x1e0b('0xd')]),'qs':{'query':util[_0x1e0b('0xb')]('type:user\x20role:end-user\x20phone:%s',_0x6dfa12)}})['then'](function(_0x33b1b5){var _0x298ecb;if(_0x33b1b5[_0x1e0b('0x1d')][_0x1e0b('0x23')]){_0x33b1b5[_0x1e0b('0x1d')]=_[_0x1e0b('0x24')](_0x33b1b5[_0x1e0b('0x1d')],{'suspended':![],'role':_0x1e0b('0x25')});if(_0x33b1b5[_0x1e0b('0x1d')][_0x1e0b('0x23')]){_0x298ecb=_['first'](_0x33b1b5[_0x1e0b('0x1d')]);}}if(_0x298ecb){logger[_0x1e0b('0xa')](_0x1e0b('0x26'));return _0x298ecb;}else{logger[_0x1e0b('0xa')](_0x1e0b('0x27'));return request({'uri':util[_0x1e0b('0xb')](_0x1e0b('0x28'),_0x29c19a[_0x1e0b('0xd')]),'method':'POST','body':{'user':{'role':_0x1e0b('0x25'),'name':util[_0x1e0b('0xb')](_0x1e0b('0x29'),_0x3dc8de||_0x6dfa12),'phone':_0x6dfa12}}})[_0x1e0b('0x19')](function(_0x2f2f82){logger[_0x1e0b('0xa')](_0x1e0b('0x2a'));return _0x2f2f82[_0x1e0b('0x21')];});}});}function getAuth(_0x3bcaae){var _0x1fdeb1;if(_0x3bcaae[_0x1e0b('0x2b')]===_0x1e0b('0x2c')){_0x1fdeb1=util['format'](_0x1e0b('0x2d'),_0x3bcaae[_0x1e0b('0x2e')],_0x3bcaae[_0x1e0b('0x2c')]);}else if(_0x3bcaae[_0x1e0b('0x2b')]===_0x1e0b('0x2f')){_0x1fdeb1=util[_0x1e0b('0xb')](_0x1e0b('0x30'),_0x3bcaae[_0x1e0b('0x2e')],_0x3bcaae[_0x1e0b('0x2f')]);}return util[_0x1e0b('0xb')](_0x1e0b('0x31'),new Buffer(_0x1fdeb1)[_0x1e0b('0x32')](_0x1e0b('0x33')));}function request(_0x18702c){logger[_0x1e0b('0x34')]('[HTTP]',JSON['stringify'](_0x18702c));return rp(_[_0x1e0b('0x6')](_0x18702c,{'method':'GET','headers':headers,'json':!![]}));}function getTags(_0x54564c,_0x545b7d){var _0xdd92f3=[];if(_0x54564c&&_0x54564c[_0x1e0b('0x23')]>0x0){_0xdd92f3=_[_0x1e0b('0x35')](_0x54564c,_0x545b7d);}return _0xdd92f3;}function getCustomFields(_0x245b38,_0x1c1b89){var _0x25de58=[];var _0x35d348={'custom_fields':[]};if(_0x245b38[_0x1e0b('0x23')]>0x0){_[_0x1e0b('0x36')](_0x245b38,function(_0x72a142){if(_0x72a142[_0x1e0b('0x37')]===_0x1e0b('0x38')&&_0x72a142['nameField']&&!_0x72a142[_0x1e0b('0x39')]){_0x35d348[_0x72a142[_0x1e0b('0x3a')][_0x1e0b('0x3b')]()]=_0x72a142['content'][_0x1e0b('0x32')]();}else if(_0x72a142[_0x1e0b('0x37')]===_0x1e0b('0x38')&&_0x72a142[_0x1e0b('0x3c')]&&_0x72a142[_0x1e0b('0x39')]){_0x35d348[_0x1e0b('0x3d')][_0x1e0b('0x3e')]({'id':_0x72a142[_0x1e0b('0x3c')],'value':_0x72a142[_0x1e0b('0x3f')]['toString']()});}else if(_0x72a142[_0x1e0b('0x37')]==='variable'&&_0x72a142[_0x1e0b('0x40')]&&_0x72a142[_0x1e0b('0x3c')]&&_0x72a142[_0x1e0b('0x39')]){_0x1c1b89[_0x72a142[_0x1e0b('0x40')]]&&_0x35d348['custom_fields'][_0x1e0b('0x3e')]({'id':_0x72a142['idField'],'value':_0x1c1b89[_0x72a142[_0x1e0b('0x40')]][_0x1e0b('0x32')]()});}else if(_0x72a142[_0x1e0b('0x37')]===_0x1e0b('0x41')&&_0x72a142['Variable']&&_0x72a142[_0x1e0b('0x42')][_0x1e0b('0xf')]&&_0x72a142['idField']&&_0x72a142[_0x1e0b('0x39')]){_0x1c1b89[_0x72a142[_0x1e0b('0x42')][_0x1e0b('0xf')][_0x1e0b('0x3b')]()]&&_0x35d348['custom_fields'][_0x1e0b('0x3e')]({'id':_0x72a142[_0x1e0b('0x3c')],'value':_0x1c1b89[_0x72a142[_0x1e0b('0x42')][_0x1e0b('0xf')][_0x1e0b('0x3b')]()][_0x1e0b('0x32')]()});}});}return _0x35d348;}exports['queue']=function(_0x3a7532,_0x46a7aa,_0x1a0736,_0x5076e6,_0x3470ba,_0x570611){var _0x200cb4,_0x6d5800;_0x570611[_0x1e0b('0xd')]=intUtil[_0x1e0b('0x43')](_0x570611['remoteUri']);_0x570611[_0x1e0b('0x44')]=intUtil[_0x1e0b('0x43')](_0x570611[_0x1e0b('0x44')]);if(_0x3470ba&&_0x3470ba[_0x1e0b('0x45')]){logger['info'](_0x1e0b('0x46'),_0x1e0b('0x47'));_0x46a7aa[_0x1e0b('0x48')]=util[_0x1e0b('0xb')](_0x1e0b('0x49'),_0x570611['serverUrl'],_0x46a7aa[_0x1e0b('0x4a')],md5(_0x46a7aa[_0x1e0b('0x4a')]));}else{_0x46a7aa[_0x1e0b('0x48')]='';}headers[_0x1e0b('0x4b')]=getAuth(_0x570611);return getUser(_0x570611,_0x5076e6[_0x1e0b('0x4c')])[_0x1e0b('0x19')](function(_0x26f725){_0x200cb4=_0x26f725;logger[_0x1e0b('0xa')](_0x1e0b('0x4d'),_0x200cb4['id']);return getEndUser(_0x570611,_0x46a7aa[_0x1e0b('0x4e')],_0x46a7aa[_0x1e0b('0x4f')]);})[_0x1e0b('0x19')](function(_0xc38c9c){_0x6d5800=_0xc38c9c;logger[_0x1e0b('0xa')](_0x1e0b('0x50'),_0x6d5800['id']);return getTicket(_0x570611,_0x200cb4,_0x6d5800,_0x1a0736,_0x46a7aa);})[_0x1e0b('0x19')](function(_0x1cddcd){if(_0x1cddcd){logger[_0x1e0b('0xa')](_0x1e0b('0x51'),_0x1cddcd['id']);switch(_0x570611['type']){case _0x1e0b('0x52'):logger[_0x1e0b('0xa')](_0x1e0b('0x46'),_0x1e0b('0x53'));return request({'uri':util[_0x1e0b('0xb')]('%s/channels/voice/agents/%d/tickets/%d/display.json',_0x570611[_0x1e0b('0xd')],_0x200cb4['id'],_0x1cddcd['id']),'method':_0x1e0b('0x54')});case _0x1e0b('0x55'):logger['info'](_0x1e0b('0x46'),_0x1e0b('0x56'));emit(util[_0x1e0b('0xb')](_0x1e0b('0x57'),_0x5076e6[_0x1e0b('0xf')]),_0x1e0b('0x58'),{'uri':util[_0x1e0b('0xb')](_0x1e0b('0x59'),_0x570611[_0x1e0b('0xd')],_0x1cddcd['id'])});break;default:logger[_0x1e0b('0x5a')](_0x1e0b('0x46'),_0x1e0b('0x5b'));}}})[_0x1e0b('0x5c')](function(_0x50f10){logger[_0x1e0b('0x5a')](_0x1e0b('0x5d'),util[_0x1e0b('0x5e')](_0x50f10,{'showHidden':!![],'depth':null}));});};exports['outbound']=function(_0x408633,_0xa43633,_0xc1e7df,_0x56fb38,_0x37b1b2,_0x4d2b3e,_0x2561c3){var _0x74e318,_0x3b748c;_0x4d2b3e[_0x1e0b('0xd')]=intUtil[_0x1e0b('0x43')](_0x4d2b3e[_0x1e0b('0xd')]);_0x4d2b3e[_0x1e0b('0x44')]=intUtil[_0x1e0b('0x43')](_0x4d2b3e[_0x1e0b('0x44')]);if(_0x2561c3&&_0x2561c3[_0x1e0b('0x5f')]&&_0x2561c3['recordingFormat']!==_0x1e0b('0x60')){logger['info'](_0x1e0b('0x61'),_0x1e0b('0x47'));_0xa43633[_0x1e0b('0x48')]=util['format'](_0x1e0b('0x49'),_0x4d2b3e[_0x1e0b('0x44')],_0xa43633['uniqueid'],md5(_0xa43633[_0x1e0b('0x4a')]));}headers['Authorization']=getAuth(_0x4d2b3e);return getUser(_0x4d2b3e,_0x56fb38[_0x1e0b('0x4c')])['then'](function(_0x3fca6c){_0x74e318=_0x3fca6c;logger[_0x1e0b('0xa')](_0x1e0b('0x4d'),_0x74e318['id']);return getEndUser(_0x4d2b3e,_0xa43633['destcalleridname'],_0xa43633[_0x1e0b('0x62')]);})[_0x1e0b('0x19')](function(_0x444174){_0x3b748c=_0x444174;logger[_0x1e0b('0xa')](_0x1e0b('0x50'),_0x3b748c['id']);return getTicket(_0x4d2b3e,_0x74e318,_0x3b748c,_0xc1e7df,_0xa43633);})['then'](function(_0x69aecd){if(_0x69aecd){logger[_0x1e0b('0xa')](_0x1e0b('0x51'),_0x69aecd['id']);switch(_0x4d2b3e['type']){case _0x1e0b('0x52'):logger[_0x1e0b('0xa')]('[OUTBOUND]','Displaying\x20ticket\x20to\x20agent...');return request({'uri':util['format'](_0x1e0b('0x63'),_0x4d2b3e['remoteUri'],_0x74e318['id'],_0x69aecd['id']),'method':_0x1e0b('0x54')});case'newTab':logger[_0x1e0b('0xa')](_0x1e0b('0x61'),_0x1e0b('0x56'));emit(util[_0x1e0b('0xb')](_0x1e0b('0x57'),_0x56fb38[_0x1e0b('0xf')]),_0x1e0b('0x58'),{'uri':util['format'](_0x1e0b('0x59'),_0x4d2b3e[_0x1e0b('0xd')],_0x69aecd['id'])});break;default:logger[_0x1e0b('0x5a')](_0x1e0b('0x61'),_0x1e0b('0x5b'));}}})['catch'](function(_0x3faa41){logger[_0x1e0b('0x5a')]('[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration',util['inspect'](_0x3faa41,{'showHidden':!![],'depth':null}));});};exports[_0x1e0b('0x64')]=function(_0x2a9972,_0x27d773,_0x908699,_0x4a4223,_0x1d060e,_0x3a878e){var _0x378a79,_0x1b5747;_0x3a878e[_0x1e0b('0xd')]=intUtil[_0x1e0b('0x43')](_0x3a878e[_0x1e0b('0xd')]);_0x3a878e[_0x1e0b('0x44')]=intUtil[_0x1e0b('0x43')](_0x3a878e[_0x1e0b('0x44')]);if(_0x1d060e&&_0x1d060e[_0x1e0b('0x45')]){logger['info']('[ABANDONED]',_0x1e0b('0x47'));_0x27d773['recordingURL']=util[_0x1e0b('0xb')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x3a878e[_0x1e0b('0x44')],_0x27d773['uniqueid'],md5(_0x27d773[_0x1e0b('0x4a')]));}else{_0x27d773[_0x1e0b('0x48')]='';}headers[_0x1e0b('0x4b')]=getAuth(_0x3a878e);return getUser(_0x3a878e)[_0x1e0b('0x19')](function(_0x197728){_0x378a79=_0x197728;logger['info'](_0x1e0b('0x4d'),_0x378a79['id']);return getEndUser(_0x3a878e,_0x27d773[_0x1e0b('0x4e')],_0x27d773[_0x1e0b('0x4f')]);})[_0x1e0b('0x19')](function(_0x71442e){_0x1b5747=_0x71442e;logger['info'](_0x1e0b('0x50'),_0x1b5747['id']);return getTicket(_0x3a878e,_0x378a79,_0x1b5747,_0x908699,_0x27d773);})[_0x1e0b('0x19')](function(_0x7edb72){if(_0x7edb72){logger[_0x1e0b('0xa')]('The\x20Ticket\x20ID\x20is:',_0x7edb72['id']);}})[_0x1e0b('0x5c')](function(_0xcaf74d){logger['error'](_0x1e0b('0x65'),util[_0x1e0b('0x5e')](_0xcaf74d,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
+var _0x24c9=['stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','uniqueid','recordingURL','Authorization','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','integrationTab','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','%s/agent/tickets/%s','Zendesk\x20account\x20type\x20not\x20recognized','catch','error','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','inspect','recordingFormat','none','[OUTBOUND]','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','destcalleridname','destcalleridnum','Displaying\x20ticket\x20to\x20agent...','%s/channels/voice/agents/%d/tickets/%d/display.json','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','abandoned','[ABANDONED]','[ABANDONED]\x20Error\x20running\x20Zendesk\x20integration','lodash','request-promise','md5','util','./util','../../../../config/environment','../../../../config/logger','zendesk','redis','localhost','socket.io-emitter','application/json','info','format','%s/tickets.json','POST','Tags','name','Subjects','getString','Descriptions','Fields','then','Ticket\x20created!','ticket','validateEmail','Getting\x20agent\x20with\x20email','%s/search.json','remoteUri','type:user\x20role:agent\x20email:%s','count','Agent\x20found!','results','agent','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','Admin\x20account\x20selected.','user','type:user\x20role:end-user\x20phone:%s','filter','end-user','length','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/users.json','Caller\x20-\x20%s','Enduser\x20created.','authType','password','token','%s/token:%s','username','Basic\x20%s','toString','debug','[HTTP]','stringify','GET','map','forEach','type','string','customField','toLowerCase','content','idField','custom_fields','push','variable','variableName','Variable'];(function(_0x34c52a,_0xd9af3c){var _0x122d1f=function(_0x33370c){while(--_0x33370c){_0x34c52a['push'](_0x34c52a['shift']());}};_0x122d1f(++_0xd9af3c);}(_0x24c9,0x169));var _0x924c=function(_0x1e36ed,_0x1862e5){_0x1e36ed=_0x1e36ed-0x0;var _0x5ac9c9=_0x24c9[_0x1e36ed];return _0x5ac9c9;};'use strict';var _=require(_0x924c('0x0'));var rp=require(_0x924c('0x1'));var md5=require(_0x924c('0x2'));var util=require(_0x924c('0x3'));var Redis=require('ioredis');var intUtil=require(_0x924c('0x4'));var config=require(_0x924c('0x5'));var logger=require(_0x924c('0x6'))(_0x924c('0x7'));config[_0x924c('0x8')]=_['defaults'](config[_0x924c('0x8')],{'host':_0x924c('0x9'),'port':0x18eb});var io=require(_0x924c('0xa'))(new Redis(config[_0x924c('0x8')]));function emit(_0x2110cf,_0x25c5d7,_0x30520c){io['to'](_0x2110cf)['emit'](_0x25c5d7,_0x30520c);}var headers={'Content-Type':'application/json','Accept':_0x924c('0xb')};function getTicket(_0x180158,_0x1450f4,_0x408470,_0x25e889,_0x139288){logger[_0x924c('0xc')]('Creating\x20new\x20ticket...');return request({'uri':util[_0x924c('0xd')](_0x924c('0xe'),_0x180158['remoteUri']),'method':_0x924c('0xf'),'body':{'ticket':_['merge']({'requester_id':_0x408470['id'],'submitter_id':_0x1450f4?_0x1450f4['id']:undefined,'assignee_id':_0x1450f4?_0x1450f4['id']:undefined,'tags':getTags(_0x25e889[_0x924c('0x10')],_0x924c('0x11')),'subject':intUtil['getString'](_0x25e889[_0x924c('0x12')],_0x139288,'\x20'),'description':intUtil[_0x924c('0x13')](_0x25e889[_0x924c('0x14')],_0x139288,'\x0a'),'comment':{'public':![],'body':intUtil[_0x924c('0x13')](_0x25e889[_0x924c('0x14')],_0x139288,'\x0a')}},getCustomFields(_0x25e889[_0x924c('0x15')],_0x139288))}})[_0x924c('0x16')](function(_0x15f6e5){logger[_0x924c('0xc')](_0x924c('0x17'));return _0x15f6e5[_0x924c('0x18')];});}function getUser(_0x3d94ad,_0x38dee1){if(intUtil[_0x924c('0x19')](_0x38dee1)){logger['info'](_0x924c('0x1a'),_0x38dee1);return request({'uri':util['format'](_0x924c('0x1b'),_0x3d94ad[_0x924c('0x1c')]),'qs':{'query':util[_0x924c('0xd')](_0x924c('0x1d'),_0x38dee1)}})[_0x924c('0x16')](function(_0x4a7a43){if(_0x4a7a43[_0x924c('0x1e')]){logger['info'](_0x924c('0x1f'));return _['find'](_0x4a7a43[_0x924c('0x20')],{'email':_0x38dee1,'role':_0x924c('0x21')});}else{logger['info'](_0x924c('0x22'));return request({'uri':util[_0x924c('0xd')](_0x924c('0x23'),_0x3d94ad[_0x924c('0x1c')])})[_0x924c('0x16')](function(_0x40336e){logger['info'](_0x924c('0x24'));return _0x40336e['user'];});}});}else{logger['info']('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util['format']('%s/users/me.json',_0x3d94ad[_0x924c('0x1c')])})[_0x924c('0x16')](function(_0x1e941e){logger[_0x924c('0xc')](_0x924c('0x24'));return _0x1e941e[_0x924c('0x25')];});}}function getEndUser(_0x445225,_0x257ede,_0x638153){logger[_0x924c('0xc')]('Searching\x20enduser\x20with\x20phone',_0x638153);return request({'uri':util[_0x924c('0xd')](_0x924c('0x1b'),_0x445225['remoteUri']),'qs':{'query':util[_0x924c('0xd')](_0x924c('0x26'),_0x638153)}})[_0x924c('0x16')](function(_0x35408f){var _0x5375b3;if(_0x35408f['results']['length']){_0x35408f[_0x924c('0x20')]=_[_0x924c('0x27')](_0x35408f['results'],{'suspended':![],'role':_0x924c('0x28')});if(_0x35408f[_0x924c('0x20')][_0x924c('0x29')]){_0x5375b3=_['first'](_0x35408f[_0x924c('0x20')]);}}if(_0x5375b3){logger[_0x924c('0xc')](_0x924c('0x2a'));return _0x5375b3;}else{logger[_0x924c('0xc')](_0x924c('0x2b'));return request({'uri':util[_0x924c('0xd')](_0x924c('0x2c'),_0x445225[_0x924c('0x1c')]),'method':_0x924c('0xf'),'body':{'user':{'role':_0x924c('0x28'),'name':util['format'](_0x924c('0x2d'),_0x257ede||_0x638153),'phone':_0x638153}}})['then'](function(_0x417003){logger[_0x924c('0xc')](_0x924c('0x2e'));return _0x417003[_0x924c('0x25')];});}});}function getAuth(_0x31e885){var _0xfb4f75;if(_0x31e885[_0x924c('0x2f')]===_0x924c('0x30')){_0xfb4f75=util[_0x924c('0xd')]('%s:%s',_0x31e885['username'],_0x31e885[_0x924c('0x30')]);}else if(_0x31e885['authType']===_0x924c('0x31')){_0xfb4f75=util[_0x924c('0xd')](_0x924c('0x32'),_0x31e885[_0x924c('0x33')],_0x31e885[_0x924c('0x31')]);}return util[_0x924c('0xd')](_0x924c('0x34'),new Buffer(_0xfb4f75)[_0x924c('0x35')]('base64'));}function request(_0x3726a7){logger[_0x924c('0x36')](_0x924c('0x37'),JSON[_0x924c('0x38')](_0x3726a7));return rp(_['defaults'](_0x3726a7,{'method':_0x924c('0x39'),'headers':headers,'json':!![]}));}function getTags(_0x47355c,_0x2356f0){var _0x221e43=[];if(_0x47355c&&_0x47355c[_0x924c('0x29')]>0x0){_0x221e43=_[_0x924c('0x3a')](_0x47355c,_0x2356f0);}return _0x221e43;}function getCustomFields(_0x59485a,_0x1c6dc5){var _0x25f1e8=[];var _0x451ff6={'custom_fields':[]};if(_0x59485a[_0x924c('0x29')]>0x0){_[_0x924c('0x3b')](_0x59485a,function(_0x1e7af8){if(_0x1e7af8[_0x924c('0x3c')]===_0x924c('0x3d')&&_0x1e7af8['nameField']&&!_0x1e7af8[_0x924c('0x3e')]){_0x451ff6[_0x1e7af8['nameField'][_0x924c('0x3f')]()]=_0x1e7af8[_0x924c('0x40')][_0x924c('0x35')]();}else if(_0x1e7af8[_0x924c('0x3c')]==='string'&&_0x1e7af8[_0x924c('0x41')]&&_0x1e7af8['customField']){_0x451ff6[_0x924c('0x42')][_0x924c('0x43')]({'id':_0x1e7af8[_0x924c('0x41')],'value':_0x1e7af8[_0x924c('0x40')][_0x924c('0x35')]()});}else if(_0x1e7af8['type']===_0x924c('0x44')&&_0x1e7af8[_0x924c('0x45')]&&_0x1e7af8['idField']&&_0x1e7af8['customField']){_0x1c6dc5[_0x1e7af8['variableName']]&&_0x451ff6[_0x924c('0x42')][_0x924c('0x43')]({'id':_0x1e7af8[_0x924c('0x41')],'value':_0x1c6dc5[_0x1e7af8[_0x924c('0x45')]]['toString']()});}else if(_0x1e7af8[_0x924c('0x3c')]==='customVariable'&&_0x1e7af8[_0x924c('0x46')]&&_0x1e7af8['Variable'][_0x924c('0x11')]&&_0x1e7af8['idField']&&_0x1e7af8[_0x924c('0x3e')]){_0x1c6dc5[_0x1e7af8['Variable']['name'][_0x924c('0x3f')]()]&&_0x451ff6['custom_fields'][_0x924c('0x43')]({'id':_0x1e7af8['idField'],'value':_0x1c6dc5[_0x1e7af8[_0x924c('0x46')][_0x924c('0x11')][_0x924c('0x3f')]()][_0x924c('0x35')]()});}});}return _0x451ff6;}exports['queue']=function(_0x2dd8b4,_0x3a9d6b,_0x5b183e,_0x3e72da,_0x44bb2a,_0xe2383e){var _0x388093,_0x1967b4;_0xe2383e[_0x924c('0x1c')]=intUtil[_0x924c('0x47')](_0xe2383e['remoteUri']);_0xe2383e[_0x924c('0x48')]=intUtil[_0x924c('0x47')](_0xe2383e[_0x924c('0x48')]);if(_0x44bb2a&&_0x44bb2a[_0x924c('0x49')]){logger['info'](_0x924c('0x4a'),_0x924c('0x4b'));_0x3a9d6b['recordingURL']=util[_0x924c('0xd')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0xe2383e[_0x924c('0x48')],_0x3a9d6b[_0x924c('0x4c')],md5(_0x3a9d6b[_0x924c('0x4c')]));}else{_0x3a9d6b[_0x924c('0x4d')]='';}headers[_0x924c('0x4e')]=getAuth(_0xe2383e);return getUser(_0xe2383e,_0x3e72da[_0x924c('0x4f')])[_0x924c('0x16')](function(_0x10999e){_0x388093=_0x10999e;logger[_0x924c('0xc')](_0x924c('0x50'),_0x388093['id']);return getEndUser(_0xe2383e,_0x3a9d6b[_0x924c('0x51')],_0x3a9d6b[_0x924c('0x52')]);})['then'](function(_0x24855b){_0x1967b4=_0x24855b;logger[_0x924c('0xc')](_0x924c('0x53'),_0x1967b4['id']);return getTicket(_0xe2383e,_0x388093,_0x1967b4,_0x5b183e,_0x3a9d6b);})['then'](function(_0x4454bd){if(_0x4454bd){logger[_0x924c('0xc')](_0x924c('0x54'),_0x4454bd['id']);switch(_0xe2383e[_0x924c('0x3c')]){case _0x924c('0x55'):logger[_0x924c('0xc')]('[QUEUE]','Displaying\x20ticket\x20to\x20agent...');return request({'uri':util[_0x924c('0xd')]('%s/channels/voice/agents/%d/tickets/%d/display.json',_0xe2383e[_0x924c('0x1c')],_0x388093['id'],_0x4454bd['id']),'method':_0x924c('0xf')});case _0x924c('0x56'):logger['info'](_0x924c('0x4a'),_0x924c('0x57'));emit(util[_0x924c('0xd')](_0x924c('0x58'),_0x3e72da[_0x924c('0x11')]),_0x924c('0x59'),{'uri':util['format'](_0x924c('0x5a'),_0xe2383e[_0x924c('0x1c')],_0x4454bd['id'])});break;default:logger['error'](_0x924c('0x4a'),_0x924c('0x5b'));}}})[_0x924c('0x5c')](function(_0x11a3c8){logger[_0x924c('0x5d')](_0x924c('0x5e'),util[_0x924c('0x5f')](_0x11a3c8,{'showHidden':!![],'depth':null}));});};exports['outbound']=function(_0x3a4730,_0x3dc2d5,_0x48e3b9,_0x1c9868,_0x4038ca,_0x54c5cc,_0x143083){var _0x54f26,_0xd98bf7;_0x54c5cc[_0x924c('0x1c')]=intUtil[_0x924c('0x47')](_0x54c5cc[_0x924c('0x1c')]);_0x54c5cc[_0x924c('0x48')]=intUtil['stripTrailingSlash'](_0x54c5cc[_0x924c('0x48')]);if(_0x143083&&_0x143083[_0x924c('0x60')]&&_0x143083[_0x924c('0x60')]!==_0x924c('0x61')){logger[_0x924c('0xc')](_0x924c('0x62'),_0x924c('0x4b'));_0x3dc2d5[_0x924c('0x4d')]=util[_0x924c('0xd')](_0x924c('0x63'),_0x54c5cc['serverUrl'],_0x3dc2d5[_0x924c('0x4c')],md5(_0x3dc2d5[_0x924c('0x4c')]));}headers[_0x924c('0x4e')]=getAuth(_0x54c5cc);return getUser(_0x54c5cc,_0x1c9868[_0x924c('0x4f')])[_0x924c('0x16')](function(_0x3a5c12){_0x54f26=_0x3a5c12;logger['info'](_0x924c('0x50'),_0x54f26['id']);return getEndUser(_0x54c5cc,_0x3dc2d5[_0x924c('0x64')],_0x3dc2d5[_0x924c('0x65')]);})['then'](function(_0x4d7b16){_0xd98bf7=_0x4d7b16;logger[_0x924c('0xc')]('The\x20Enduser\x20ID\x20is:',_0xd98bf7['id']);return getTicket(_0x54c5cc,_0x54f26,_0xd98bf7,_0x48e3b9,_0x3dc2d5);})[_0x924c('0x16')](function(_0x27b483){if(_0x27b483){logger[_0x924c('0xc')]('The\x20Ticket\x20ID\x20is:',_0x27b483['id']);switch(_0x54c5cc[_0x924c('0x3c')]){case'integrationTab':logger[_0x924c('0xc')](_0x924c('0x62'),_0x924c('0x66'));return request({'uri':util[_0x924c('0xd')](_0x924c('0x67'),_0x54c5cc[_0x924c('0x1c')],_0x54f26['id'],_0x27b483['id']),'method':'POST'});case _0x924c('0x56'):logger[_0x924c('0xc')](_0x924c('0x62'),_0x924c('0x57'));emit(util['format'](_0x924c('0x58'),_0x1c9868[_0x924c('0x11')]),_0x924c('0x59'),{'uri':util[_0x924c('0xd')](_0x924c('0x5a'),_0x54c5cc[_0x924c('0x1c')],_0x27b483['id'])});break;default:logger[_0x924c('0x5d')](_0x924c('0x62'),_0x924c('0x5b'));}}})[_0x924c('0x5c')](function(_0x405605){logger[_0x924c('0x5d')](_0x924c('0x68'),util[_0x924c('0x5f')](_0x405605,{'showHidden':!![],'depth':null}));});};exports[_0x924c('0x69')]=function(_0x2b8480,_0x1949eb,_0x1e058b,_0x11cd9c,_0x589a28,_0x4df513){var _0xfc6a73,_0x272170;_0x4df513[_0x924c('0x1c')]=intUtil[_0x924c('0x47')](_0x4df513[_0x924c('0x1c')]);_0x4df513[_0x924c('0x48')]=intUtil['stripTrailingSlash'](_0x4df513[_0x924c('0x48')]);if(_0x589a28&&_0x589a28['monitor_format']){logger['info'](_0x924c('0x6a'),_0x924c('0x4b'));_0x1949eb['recordingURL']=util[_0x924c('0xd')](_0x924c('0x63'),_0x4df513['serverUrl'],_0x1949eb['uniqueid'],md5(_0x1949eb[_0x924c('0x4c')]));}else{_0x1949eb['recordingURL']='';}headers[_0x924c('0x4e')]=getAuth(_0x4df513);return getUser(_0x4df513)['then'](function(_0x2fad4f){_0xfc6a73=_0x2fad4f;logger[_0x924c('0xc')](_0x924c('0x50'),_0xfc6a73['id']);return getEndUser(_0x4df513,_0x1949eb[_0x924c('0x51')],_0x1949eb[_0x924c('0x52')]);})[_0x924c('0x16')](function(_0x2793ac){_0x272170=_0x2793ac;logger[_0x924c('0xc')](_0x924c('0x53'),_0x272170['id']);return getTicket(_0x4df513,_0xfc6a73,_0x272170,_0x1e058b,_0x1949eb);})[_0x924c('0x16')](function(_0x469cd4){if(_0x469cd4){logger[_0x924c('0xc')](_0x924c('0x54'),_0x469cd4['id']);}})['catch'](function(_0x3f7844){logger[_0x924c('0x5d')](_0x924c('0x6b'),util['inspect'](_0x3f7844,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
index f8f45a6..3845312 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf05f=['idField','toString','variable','variableName','customVariable','Variable','name','toLowerCase','split','stripTrailingSlash','serverUrl','monitor_format','Recording\x20is\x20enabled!','recordingURL','uniqueid','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Call\x20ID\x20is:','[QUEUE]','user:%s','trigger:browser:url','catch','recordingFormat','none','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','[OUTBOUND]','https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s','abandoned','[ABANDONED]','Inbound','lodash','md5','util','entities','moment','ioredis','zoho','redis','defaults','localhost','socket.io-emitter','emit','application/json','info','Creating\x20new\x20call...','inbound','outbound','starttime','agentcalledAt','format','YYYY-MM-DD\x20HH:mm:ss','Subjects','getString','Descriptions','Fields','called','Call\x20Result','Called','complete','connect','Answered','Rejected','Abandoned','talktime','Call\x20Duration','mm:ss','answertime','endtime','utc','diff','CONTACTID','LEADID','Leads','SEID','<Calls><row\x20no=\x221\x22>','hasOwnProperty','encodeXML','</row></Calls>','POST','authToken','crmapi','then','parse','toJson','response','result','recorddetail','Call\x20created!','stringify','https://crm.%s/crm/private/json/Users/getUsers','host','AllUsers','users','user','zoho\x20data\x20users','isArrayLikeObject','log','isNil','find','active','Agent\x20found!','Using\x20the\x20admin\x20account!','Administrator','zoho\x20user','profile','error','The\x20failing\x20result\x20is','Unable\x20to\x20retrieve\x20zoho\x20account\x20users:\x20','Searching\x20enduser\x20with\x20phone','GET','https://crm.%s/crm/private/json/Contacts/searchRecords','Enduser\x20found\x20in\x20Contacts!','Contacts','row','length','val','https://crm.%s/crm/private/json/Leads/searchRecords','((Phone:%s))','content','https://crm.%s/crm/private/xml/Leads/insertRecords','<Leads><row\x20no=\x221\x22><FL\x20val=\x22First\x20Name\x22>%s</FL><FL\x20val=\x22Last\x20Name\x22>%s</FL><FL\x20val=\x22Phone\x22>%s</FL></row></Leads>','Enduser\x20created.','Error\x20on\x20Lead\x20creation:\x20','Error\x20on\x20Lead\x20retrieve:\x20','debug','[HTTP]','forEach','type','string'];(function(_0x27158d,_0x19ed77){var _0xb8f43f=function(_0x1b66b2){while(--_0x1b66b2){_0x27158d['push'](_0x27158d['shift']());}};_0xb8f43f(++_0x19ed77);}(_0xf05f,0xa5));var _0xff05=function(_0x1fd8af,_0x19c908){_0x1fd8af=_0x1fd8af-0x0;var _0x44ac2a=_0xf05f[_0x1fd8af];return _0x44ac2a;};'use strict';var _=require(_0xff05('0x0'));var rp=require('request-promise');var md5=require(_0xff05('0x1'));var util=require(_0xff05('0x2'));var intUtil=require('./util');var parser=require('xml2json');var entities=require(_0xff05('0x3'));var moment=require(_0xff05('0x4'));var Redis=require(_0xff05('0x5'));var config=require('../../../../config/environment');var logger=require('../../../../config/logger')(_0xff05('0x6'));config[_0xff05('0x7')]=_[_0xff05('0x8')](config[_0xff05('0x7')],{'host':_0xff05('0x9'),'port':0x18eb});var io=require(_0xff05('0xa'))(new Redis(config[_0xff05('0x7')]));function emit(_0x17ea36,_0x2d9d48,_0x30f84b){io['to'](_0x17ea36)[_0xff05('0xb')](_0x2d9d48,_0x30f84b);}var headers={'Content-Type':_0xff05('0xc'),'Accept':_0xff05('0xc')};function getCall(_0x5e1f63,_0x592f8b,_0x3ae391,_0x5a5358,_0x1a1fc6,_0x5e8177){logger[_0xff05('0xd')](_0xff05('0xe'));var _0xc51e8c=_['merge']({'SMOWNERID':_0x592f8b['id'],'Call Type':_0x5e8177||_0xff05('0xf'),'Call Start Time':(_0x5e8177===_0xff05('0x10')?_0x1a1fc6[_0xff05('0x11')]:_0x1a1fc6[_0xff05('0x12')])||moment()[_0xff05('0x13')](_0xff05('0x14')),'Subject':intUtil['getString'](_0x5a5358[_0xff05('0x15')],_0x1a1fc6,'\x20'),'Description':intUtil[_0xff05('0x16')](_0x5a5358[_0xff05('0x17')],_0x1a1fc6,'\x0a')},getCustomFields(_0x5a5358[_0xff05('0x18')],_0x1a1fc6));switch(_0x1a1fc6['lastevent']){case _0xff05('0x19'):_0xc51e8c[_0xff05('0x1a')]=_0xff05('0x1b');break;case _0xff05('0x1c'):case _0xff05('0x1d'):_0xc51e8c[_0xff05('0x1a')]=_0xff05('0x1e');break;case'rejected':_0xc51e8c[_0xff05('0x1a')]=_0xff05('0x1f');break;case'abandoned':_0xc51e8c[_0xff05('0x1a')]=_0xff05('0x20');break;default:}if(_0x1a1fc6[_0xff05('0x21')]){_0xc51e8c[_0xff05('0x22')]=moment['utc'](parseInt(_0x1a1fc6['talktime'])*0x3e8)['format'](_0xff05('0x23'));}else if(_0x1a1fc6[_0xff05('0x24')]&&_0x1a1fc6[_0xff05('0x25')]){_0xc51e8c[_0xff05('0x22')]=moment[_0xff05('0x26')](moment(_0x1a1fc6[_0xff05('0x25')],_0xff05('0x14'))[_0xff05('0x27')](moment(_0x1a1fc6['starttime'],_0xff05('0x14'))))[_0xff05('0x13')](_0xff05('0x23'));}if(_0x3ae391['CONTACTID']){_0xc51e8c[_0xff05('0x28')]=_0x3ae391['CONTACTID'];}else if(_0x3ae391[_0xff05('0x29')]){_0xc51e8c['SEMODULE']=_0xff05('0x2a');_0xc51e8c[_0xff05('0x2b')]=_0x3ae391[_0xff05('0x29')];}var _0xd79eb1=_0xff05('0x2c');for(var _0x4fc388 in _0xc51e8c){if(_0xc51e8c[_0xff05('0x2d')](_0x4fc388)){_0xd79eb1+=util[_0xff05('0x13')]('<FL\x20val=\x22%s\x22>%s</FL>',entities[_0xff05('0x2e')](_0x4fc388),entities['encodeXML'](_0xc51e8c[_0x4fc388]));}}_0xd79eb1+=_0xff05('0x2f');return request({'method':_0xff05('0x30'),'uri':util['format']('https://crm.%s/crm/private/xml/Calls/insertRecords',_0x5e1f63['host']),'qs':{'authtoken':_0x5e1f63[_0xff05('0x31')],'scope':_0xff05('0x32'),'xmlData':_0xd79eb1},'json':!![]})[_0xff05('0x33')](function(_0x491e20){_0x491e20=JSON[_0xff05('0x34')](parser[_0xff05('0x35')](_0x491e20));if(_0x491e20[_0xff05('0x36')]){if(_0x491e20['response'][_0xff05('0x37')]&&_0x491e20['response'][_0xff05('0x37')][_0xff05('0x38')]){logger[_0xff05('0xd')](_0xff05('0x39'));return{'id':_0x491e20[_0xff05('0x36')][_0xff05('0x37')][_0xff05('0x38')]['FL'][0x0]['$t']};}}throw new Error('Error\x20on\x20call\x20creation:\x20'+JSON[_0xff05('0x3a')](_0x491e20));});}function getUser(_0x5bdb3a,_0x48ed9b){return request({'method':'GET','uri':util['format'](_0xff05('0x3b'),_0x5bdb3a[_0xff05('0x3c')]),'qs':{'type':_0xff05('0x3d'),'authtoken':_0x5bdb3a[_0xff05('0x31')],'scope':'crmapi'},'json':!![]})[_0xff05('0x33')](function(_0x156fe6){if(_0x156fe6['users']&&_0x156fe6[_0xff05('0x3e')][_0xff05('0x3f')]){var _0x1d110d;console['log'](_0xff05('0x40'),_0x156fe6[_0xff05('0x3e')][_0xff05('0x3f')]);if(_[_0xff05('0x41')](_0x156fe6[_0xff05('0x3e')][_0xff05('0x3f')])){console[_0xff05('0x42')](_0xff05('0x40'),_0x156fe6[_0xff05('0x3e')][_0xff05('0x3f')]);if(!_[_0xff05('0x43')](_0x48ed9b)){_0x1d110d=_[_0xff05('0x44')](_0x156fe6['users'][_0xff05('0x3f')],{'email':_0x48ed9b,'profile':'Standard','status':_0xff05('0x45')});}if(!_[_0xff05('0x43')](_0x1d110d)){logger[_0xff05('0xd')](_0xff05('0x46'));}else{logger[_0xff05('0xd')](_0xff05('0x47'));_0x1d110d=_['find'](_0x156fe6['users']['user'],{'profile':_0xff05('0x48')});}console[_0xff05('0x42')](_0xff05('0x49'),_0x1d110d);return _0x1d110d;}else{if(_0x156fe6[_0xff05('0x3e')]['user'][_0xff05('0x4a')]===_0xff05('0x48')){logger[_0xff05('0xd')](_0xff05('0x47'));_0x1d110d=_0x156fe6['users'][_0xff05('0x3f')];return _0x1d110d;}else{logger[_0xff05('0x4b')](_0xff05('0x4c'),JSON[_0xff05('0x3a')](_0x156fe6));throw new Error(_0xff05('0x4d')+JSON[_0xff05('0x3a')](_0x156fe6));}}}else{logger[_0xff05('0x4b')](_0xff05('0x4c'),JSON['stringify'](_0x156fe6));throw new Error('Unable\x20to\x20retrieve\x20zoho\x20account\x20users:\x20'+JSON[_0xff05('0x3a')](_0x156fe6));}});}function getEndUser(_0x174f29,_0x409457,_0x57e87c){logger['info'](_0xff05('0x4e'),_0x57e87c);return request({'method':_0xff05('0x4f'),'uri':util[_0xff05('0x13')](_0xff05('0x50'),_0x174f29[_0xff05('0x3c')]),'qs':{'authtoken':_0x174f29['authToken'],'scope':'crmapi','criteria':util[_0xff05('0x13')]('((Phone:%s))',_0x57e87c)},'json':!![]})['then'](function(_0x3b2786){if(_0x3b2786[_0xff05('0x36')]&&_0x3b2786['response'][_0xff05('0x37')]){logger['info'](_0xff05('0x51'));var _0x317b2f={};var _0x2d1115=_0x3b2786[_0xff05('0x36')]['result'][_0xff05('0x52')][_0xff05('0x53')]['no']?_0x3b2786[_0xff05('0x36')][_0xff05('0x37')][_0xff05('0x52')][_0xff05('0x53')]['FL']:_0x3b2786[_0xff05('0x36')][_0xff05('0x37')][_0xff05('0x52')][_0xff05('0x53')][0x0]['FL'];for(var _0x127ae8=0x0,_0x135fd9=_0x2d1115[_0xff05('0x54')];_0x127ae8<_0x135fd9;_0x127ae8++){_0x317b2f[_0x2d1115[_0x127ae8][_0xff05('0x55')]]=_0x2d1115[_0x127ae8]['content'];}return _0x317b2f;}else{return request({'method':_0xff05('0x4f'),'uri':util[_0xff05('0x13')](_0xff05('0x56'),_0x174f29[_0xff05('0x3c')]),'qs':{'authtoken':_0x174f29[_0xff05('0x31')],'scope':_0xff05('0x32'),'criteria':util[_0xff05('0x13')](_0xff05('0x57'),_0x57e87c)},'json':!![]})[_0xff05('0x33')](function(_0xd8b6c9){if(_0xd8b6c9['response']&&_0xd8b6c9[_0xff05('0x36')]['result']){logger[_0xff05('0xd')]('Enduser\x20found\x20in\x20Leads!');var _0x38b943={};var _0x2bad63=_0xd8b6c9['response'][_0xff05('0x37')]['Leads']['row']['no']?_0xd8b6c9[_0xff05('0x36')][_0xff05('0x37')][_0xff05('0x2a')]['row']['FL']:_0xd8b6c9[_0xff05('0x36')][_0xff05('0x37')][_0xff05('0x2a')][_0xff05('0x53')][0x0]['FL'];for(var _0x421b53=0x0,_0x8a69ff=_0x2bad63[_0xff05('0x54')];_0x421b53<_0x8a69ff;_0x421b53++){_0x38b943[_0x2bad63[_0x421b53][_0xff05('0x55')]]=_0x2bad63[_0x421b53][_0xff05('0x58')];}return _0x38b943;}else{logger['info']('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');_0x409457=getName(_0x409457);return request({'method':'POST','uri':util[_0xff05('0x13')](_0xff05('0x59'),_0x174f29[_0xff05('0x3c')]),'qs':{'authtoken':_0x174f29[_0xff05('0x31')],'scope':'crmapi','xmlData':util[_0xff05('0x13')](_0xff05('0x5a'),entities['encodeXML'](_0x409457[0x0]),entities[_0xff05('0x2e')](_0x409457[0x1]),_0x57e87c)},'json':!![]})[_0xff05('0x33')](function(_0x272e94){_0x272e94=JSON[_0xff05('0x34')](parser[_0xff05('0x35')](_0x272e94));if(_0x272e94[_0xff05('0x36')]){if(_0x272e94[_0xff05('0x36')][_0xff05('0x37')]&&_0x272e94[_0xff05('0x36')]['result'][_0xff05('0x38')]){logger[_0xff05('0xd')](_0xff05('0x5b'));return request({'method':_0xff05('0x4f'),'uri':util['format']('https://crm.%s/crm/private/json/Leads/getRecordById',_0x174f29['host']),'qs':{'authtoken':_0x174f29[_0xff05('0x31')],'scope':'crmapi','id':_0x272e94[_0xff05('0x36')][_0xff05('0x37')][_0xff05('0x38')]['FL'][0x0]['$t']},'json':!![]});}}throw new Error(_0xff05('0x5c')+JSON[_0xff05('0x3a')](_0x272e94));})[_0xff05('0x33')](function(_0x1671c2){if(_0x1671c2[_0xff05('0x36')]){if(_0x1671c2[_0xff05('0x36')][_0xff05('0x37')]){var _0x554066={};for(var _0x4c3150=0x0,_0x339506=_0x1671c2[_0xff05('0x36')]['result'][_0xff05('0x2a')][_0xff05('0x53')]['FL'][_0xff05('0x54')];_0x4c3150<_0x339506;_0x4c3150++){_0x554066[_0x1671c2[_0xff05('0x36')]['result'][_0xff05('0x2a')]['row']['FL'][_0x4c3150]['val']]=_0x1671c2[_0xff05('0x36')][_0xff05('0x37')][_0xff05('0x2a')]['row']['FL'][_0x4c3150]['content'];}return _0x554066;}}throw new Error(_0xff05('0x5d')+JSON[_0xff05('0x3a')](_0x1671c2));});}});}});}function request(_0xf560a5){logger[_0xff05('0x5e')](_0xff05('0x5f'),JSON[_0xff05('0x3a')](_0xf560a5));return rp(_0xf560a5);}function getCustomFields(_0x20e616,_0x3d1eb7){var _0x107230={};if(_0x20e616[_0xff05('0x54')]>0x0){_[_0xff05('0x60')](_0x20e616,function(_0x19b0aa){if(_0x19b0aa[_0xff05('0x61')]===_0xff05('0x62')&&_0x19b0aa[_0xff05('0x63')]){_0x107230[_0x19b0aa[_0xff05('0x63')]]=_0x19b0aa[_0xff05('0x58')][_0xff05('0x64')]();}else if(_0x19b0aa[_0xff05('0x61')]===_0xff05('0x65')&&_0x19b0aa[_0xff05('0x66')]&&_0x19b0aa[_0xff05('0x63')]&&_0x3d1eb7[_0x19b0aa[_0xff05('0x66')]]){_0x107230[_0x19b0aa[_0xff05('0x63')]]=_0x3d1eb7[_0x19b0aa['variableName']][_0xff05('0x64')]();}else if(_0x19b0aa['type']===_0xff05('0x67')&&_0x19b0aa[_0xff05('0x68')]&&_0x19b0aa[_0xff05('0x68')]['name']&&_0x19b0aa[_0xff05('0x63')]&&_0x3d1eb7[_0x19b0aa['Variable'][_0xff05('0x69')][_0xff05('0x6a')]()]){_0x107230[_0x19b0aa[_0xff05('0x63')]]=_0x3d1eb7[_0x19b0aa['Variable'][_0xff05('0x69')][_0xff05('0x6a')]()]['toString']();}});}return _0x107230;}function getName(_0x431b1a){if(_0x431b1a['indexOf']('\x20')>0x0){var _0x3df414=_0x431b1a[_0xff05('0x6b')](/ (.+)/);if(_0x3df414[0x1]){return _0x3df414;}}return[_0x431b1a,_0x431b1a];}exports['queue']=function(_0x4b4063,_0x504340,_0x4c385f,_0xc24499,_0x428882,_0x3812f4){var _0x1f859e,_0x45f417;_0x3812f4['host']=intUtil[_0xff05('0x6c')](_0x3812f4['host']);_0x3812f4['serverUrl']=intUtil[_0xff05('0x6c')](_0x3812f4[_0xff05('0x6d')]);if(_0x428882&&_0x428882[_0xff05('0x6e')]){logger[_0xff05('0xd')]('[QUEUE]',_0xff05('0x6f'));_0x504340[_0xff05('0x70')]=util['format']('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x3812f4[_0xff05('0x6d')],_0x504340[_0xff05('0x71')],md5(_0x504340[_0xff05('0x71')]));}else{_0x504340[_0xff05('0x70')]='';}return getUser(_0x3812f4,_0xc24499[_0xff05('0x72')])[_0xff05('0x33')](function(_0x382e64){_0x1f859e=_0x382e64;logger[_0xff05('0xd')](_0xff05('0x73'),_0x1f859e['id']);return getEndUser(_0x3812f4,_0x504340[_0xff05('0x74')],_0x504340[_0xff05('0x75')]);})[_0xff05('0x33')](function(_0x4efadd){_0x45f417=_0x4efadd;logger[_0xff05('0xd')](_0xff05('0x76'),_0x45f417['CONTACTID']||_0x45f417['LEADID']);return getCall(_0x3812f4,_0x1f859e,_0x45f417,_0x4c385f,_0x504340,'Inbound');})[_0xff05('0x33')](function(_0x4052e7){if(_0x4052e7){logger[_0xff05('0xd')](_0xff05('0x77'),_0x4052e7['id']);logger[_0xff05('0xd')](_0xff05('0x78'),'Displaying\x20call\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0xff05('0x13')](_0xff05('0x79'),_0xc24499[_0xff05('0x69')]),_0xff05('0x7a'),{'uri':util[_0xff05('0x13')]('https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s',_0x3812f4[_0xff05('0x3c')],_0x4052e7['id'])});}})[_0xff05('0x7b')](function(_0x168e4f){logger['error']('[QUEUE]',JSON[_0xff05('0x3a')](_0x168e4f));});};exports[_0xff05('0x10')]=function(_0x4398d4,_0x80ce1e,_0x5ef646,_0x58acb4,_0x717223,_0xcdda1c,_0x415bcf){var _0x184482,_0x5bdcc4;_0xcdda1c[_0xff05('0x3c')]=intUtil[_0xff05('0x6c')](_0xcdda1c[_0xff05('0x3c')]);_0xcdda1c[_0xff05('0x6d')]=intUtil['stripTrailingSlash'](_0xcdda1c[_0xff05('0x6d')]);if(_0x415bcf&&_0x415bcf[_0xff05('0x7c')]&&_0x415bcf['recordingFormat']!==_0xff05('0x7d')){logger[_0xff05('0xd')]('[OUTBOUND]',_0xff05('0x6f'));_0x80ce1e['recordingURL']=util[_0xff05('0x13')](_0xff05('0x7e'),_0xcdda1c[_0xff05('0x6d')],_0x80ce1e['uniqueid'],md5(_0x80ce1e[_0xff05('0x71')]));}return getUser(_0xcdda1c,_0x58acb4[_0xff05('0x72')])[_0xff05('0x33')](function(_0x11f741){_0x184482=_0x11f741;logger['info']('The\x20User\x20ID\x20is:',_0x184482['id']);return getEndUser(_0xcdda1c,_0x80ce1e['destcalleridname'],_0x80ce1e['destcalleridnum']);})[_0xff05('0x33')](function(_0x1fdd8a){_0x5bdcc4=_0x1fdd8a;logger[_0xff05('0xd')](_0xff05('0x76'),_0x5bdcc4[_0xff05('0x28')]||_0x5bdcc4[_0xff05('0x29')]);return getCall(_0xcdda1c,_0x184482,_0x5bdcc4,_0x5ef646,_0x80ce1e,'Outbound');})[_0xff05('0x33')](function(_0x140168){if(_0x140168){logger[_0xff05('0xd')]('The\x20Call\x20ID\x20is:',_0x140168['id']);logger['info'](_0xff05('0x7f'),'Displaying\x20call\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util['format'](_0xff05('0x79'),_0x58acb4[_0xff05('0x69')]),_0xff05('0x7a'),{'uri':util['format'](_0xff05('0x80'),_0xcdda1c[_0xff05('0x3c')],_0x140168['id'])});}})['catch'](function(_0x3cfceb){logger[_0xff05('0x4b')](_0xff05('0x7f'),JSON['stringify'](_0x3cfceb));});};exports[_0xff05('0x81')]=function(_0x436e8b,_0xb4860f,_0xb20c4f,_0x2e399a,_0x41c13c,_0x3aadc6){var _0x42123c,_0x1c4d5c;_0x3aadc6['host']=intUtil[_0xff05('0x6c')](_0x3aadc6[_0xff05('0x3c')]);_0x3aadc6[_0xff05('0x6d')]=intUtil[_0xff05('0x6c')](_0x3aadc6[_0xff05('0x6d')]);if(_0x41c13c&&_0x41c13c[_0xff05('0x6e')]){logger['info'](_0xff05('0x82'),_0xff05('0x6f'));_0xb4860f[_0xff05('0x70')]=util[_0xff05('0x13')](_0xff05('0x7e'),_0x3aadc6['serverUrl'],_0xb4860f['uniqueid'],md5(_0xb4860f[_0xff05('0x71')]));}else{_0xb4860f[_0xff05('0x70')]='';}return getUser(_0x3aadc6)[_0xff05('0x33')](function(_0x357fae){_0x42123c=_0x357fae;logger[_0xff05('0xd')](_0xff05('0x73'),_0x42123c['id']);return getEndUser(_0x3aadc6,_0xb4860f[_0xff05('0x74')],_0xb4860f[_0xff05('0x75')]);})[_0xff05('0x33')](function(_0x428732){_0x1c4d5c=_0x428732;logger[_0xff05('0xd')](_0xff05('0x76'),_0x1c4d5c[_0xff05('0x28')]||_0x1c4d5c[_0xff05('0x29')]);return getCall(_0x3aadc6,_0x42123c,_0x1c4d5c,_0xb20c4f,_0xb4860f,_0xff05('0x83'));})[_0xff05('0x33')](function(_0x264dad){if(_0x264dad){logger['info']('The\x20Call\x20ID\x20is:',_0x264dad['id']);}})['catch'](function(_0x4e12c9){logger[_0xff05('0x4b')](_0xff05('0x82'),JSON[_0xff05('0x3a')](_0x4e12c9));});};
\ No newline at end of file
+var _0x74d7=['POST','host','authToken','crmapi','then','response','result','Call\x20created!','recorddetail','Error\x20on\x20call\x20creation:\x20','stringify','GET','https://crm.%s/crm/private/json/Users/getUsers','AllUsers','users','user','log','zoho\x20data\x20users','isArrayLikeObject','find','Standard','active','isNil','Using\x20the\x20admin\x20account!','profile','Administrator','error','The\x20failing\x20result\x20is','Unable\x20to\x20retrieve\x20zoho\x20account\x20users:\x20','Searching\x20enduser\x20with\x20phone','https://crm.%s/crm/private/json/Contacts/searchRecords','((Phone:%s))','Enduser\x20found\x20in\x20Contacts!','row','Contacts','length','val','content','https://crm.%s/crm/private/json/Leads/searchRecords','Enduser\x20found\x20in\x20Leads!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','https://crm.%s/crm/private/xml/Leads/insertRecords','<Leads><row\x20no=\x221\x22><FL\x20val=\x22First\x20Name\x22>%s</FL><FL\x20val=\x22Last\x20Name\x22>%s</FL><FL\x20val=\x22Phone\x22>%s</FL></row></Leads>','parse','toJson','https://crm.%s/crm/private/json/Leads/getRecordById','Error\x20on\x20Lead\x20creation:\x20','Error\x20on\x20Lead\x20retrieve:\x20','debug','type','idField','toString','variableName','customVariable','Variable','name','toLowerCase','indexOf','stripTrailingSlash','serverUrl','[QUEUE]','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','Inbound','The\x20Call\x20ID\x20is:','user:%s','https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s','catch','recordingFormat','none','Recording\x20is\x20enabled!','destcalleridname','destcalleridnum','Outbound','[OUTBOUND]','Displaying\x20call\x20to\x20agent\x20in\x20a\x20new\x20tab...','trigger:browser:url','monitor_format','[ABANDONED]','lodash','request-promise','md5','util','./util','xml2json','entities','moment','ioredis','../../../../config/environment','zoho','redis','defaults','emit','application/json','info','Creating\x20new\x20call...','merge','inbound','outbound','starttime','agentcalledAt','format','YYYY-MM-DD\x20HH:mm:ss','getString','Subjects','Descriptions','Fields','lastevent','called','complete','connect','Answered','rejected','Call\x20Result','Rejected','abandoned','talktime','Call\x20Duration','mm:ss','utc','endtime','CONTACTID','LEADID','SEMODULE','Leads','SEID','hasOwnProperty','<FL\x20val=\x22%s\x22>%s</FL>','encodeXML','</row></Calls>'];(function(_0x138836,_0x229129){var _0x322688=function(_0x54b101){while(--_0x54b101){_0x138836['push'](_0x138836['shift']());}};_0x322688(++_0x229129);}(_0x74d7,0xdd));var _0x774d=function(_0x387777,_0x356171){_0x387777=_0x387777-0x0;var _0x3f84c0=_0x74d7[_0x387777];return _0x3f84c0;};'use strict';var _=require(_0x774d('0x0'));var rp=require(_0x774d('0x1'));var md5=require(_0x774d('0x2'));var util=require(_0x774d('0x3'));var intUtil=require(_0x774d('0x4'));var parser=require(_0x774d('0x5'));var entities=require(_0x774d('0x6'));var moment=require(_0x774d('0x7'));var Redis=require(_0x774d('0x8'));var config=require(_0x774d('0x9'));var logger=require('../../../../config/logger')(_0x774d('0xa'));config[_0x774d('0xb')]=_[_0x774d('0xc')](config[_0x774d('0xb')],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));function emit(_0x304f9c,_0x1163ff,_0x2eaa2e){io['to'](_0x304f9c)[_0x774d('0xd')](_0x1163ff,_0x2eaa2e);}var headers={'Content-Type':_0x774d('0xe'),'Accept':_0x774d('0xe')};function getCall(_0x178c66,_0x355dda,_0x33da85,_0x2418d2,_0x4ceec2,_0x442f68){logger[_0x774d('0xf')](_0x774d('0x10'));var _0x15542e=_[_0x774d('0x11')]({'SMOWNERID':_0x355dda['id'],'Call Type':_0x442f68||_0x774d('0x12'),'Call Start Time':(_0x442f68===_0x774d('0x13')?_0x4ceec2[_0x774d('0x14')]:_0x4ceec2[_0x774d('0x15')])||moment()[_0x774d('0x16')](_0x774d('0x17')),'Subject':intUtil[_0x774d('0x18')](_0x2418d2[_0x774d('0x19')],_0x4ceec2,'\x20'),'Description':intUtil[_0x774d('0x18')](_0x2418d2[_0x774d('0x1a')],_0x4ceec2,'\x0a')},getCustomFields(_0x2418d2[_0x774d('0x1b')],_0x4ceec2));switch(_0x4ceec2[_0x774d('0x1c')]){case _0x774d('0x1d'):_0x15542e['Call\x20Result']='Called';break;case _0x774d('0x1e'):case _0x774d('0x1f'):_0x15542e['Call\x20Result']=_0x774d('0x20');break;case _0x774d('0x21'):_0x15542e[_0x774d('0x22')]=_0x774d('0x23');break;case _0x774d('0x24'):_0x15542e['Call\x20Result']='Abandoned';break;default:}if(_0x4ceec2[_0x774d('0x25')]){_0x15542e[_0x774d('0x26')]=moment['utc'](parseInt(_0x4ceec2['talktime'])*0x3e8)[_0x774d('0x16')](_0x774d('0x27'));}else if(_0x4ceec2['answertime']&&_0x4ceec2['endtime']){_0x15542e[_0x774d('0x26')]=moment[_0x774d('0x28')](moment(_0x4ceec2[_0x774d('0x29')],_0x774d('0x17'))['diff'](moment(_0x4ceec2[_0x774d('0x14')],_0x774d('0x17'))))['format'](_0x774d('0x27'));}if(_0x33da85[_0x774d('0x2a')]){_0x15542e[_0x774d('0x2a')]=_0x33da85[_0x774d('0x2a')];}else if(_0x33da85[_0x774d('0x2b')]){_0x15542e[_0x774d('0x2c')]=_0x774d('0x2d');_0x15542e[_0x774d('0x2e')]=_0x33da85[_0x774d('0x2b')];}var _0x267627='<Calls><row\x20no=\x221\x22>';for(var _0x488cdf in _0x15542e){if(_0x15542e[_0x774d('0x2f')](_0x488cdf)){_0x267627+=util[_0x774d('0x16')](_0x774d('0x30'),entities['encodeXML'](_0x488cdf),entities[_0x774d('0x31')](_0x15542e[_0x488cdf]));}}_0x267627+=_0x774d('0x32');return request({'method':_0x774d('0x33'),'uri':util[_0x774d('0x16')]('https://crm.%s/crm/private/xml/Calls/insertRecords',_0x178c66[_0x774d('0x34')]),'qs':{'authtoken':_0x178c66[_0x774d('0x35')],'scope':_0x774d('0x36'),'xmlData':_0x267627},'json':!![]})[_0x774d('0x37')](function(_0x5141bd){_0x5141bd=JSON['parse'](parser['toJson'](_0x5141bd));if(_0x5141bd['response']){if(_0x5141bd[_0x774d('0x38')][_0x774d('0x39')]&&_0x5141bd['response'][_0x774d('0x39')]['recorddetail']){logger[_0x774d('0xf')](_0x774d('0x3a'));return{'id':_0x5141bd[_0x774d('0x38')][_0x774d('0x39')][_0x774d('0x3b')]['FL'][0x0]['$t']};}}throw new Error(_0x774d('0x3c')+JSON[_0x774d('0x3d')](_0x5141bd));});}function getUser(_0x96888d,_0x41eb0f){return request({'method':_0x774d('0x3e'),'uri':util[_0x774d('0x16')](_0x774d('0x3f'),_0x96888d[_0x774d('0x34')]),'qs':{'type':_0x774d('0x40'),'authtoken':_0x96888d[_0x774d('0x35')],'scope':'crmapi'},'json':!![]})[_0x774d('0x37')](function(_0x3642f4){if(_0x3642f4[_0x774d('0x41')]&&_0x3642f4[_0x774d('0x41')][_0x774d('0x42')]){var _0x1112e0;console[_0x774d('0x43')](_0x774d('0x44'),_0x3642f4[_0x774d('0x41')][_0x774d('0x42')]);if(_[_0x774d('0x45')](_0x3642f4['users'][_0x774d('0x42')])){console[_0x774d('0x43')](_0x774d('0x44'),_0x3642f4['users'][_0x774d('0x42')]);if(!_['isNil'](_0x41eb0f)){_0x1112e0=_[_0x774d('0x46')](_0x3642f4[_0x774d('0x41')][_0x774d('0x42')],{'email':_0x41eb0f,'profile':_0x774d('0x47'),'status':_0x774d('0x48')});}if(!_[_0x774d('0x49')](_0x1112e0)){logger[_0x774d('0xf')]('Agent\x20found!');}else{logger['info'](_0x774d('0x4a'));_0x1112e0=_[_0x774d('0x46')](_0x3642f4['users'][_0x774d('0x42')],{'profile':'Administrator'});}console['log']('zoho\x20user',_0x1112e0);return _0x1112e0;}else{if(_0x3642f4[_0x774d('0x41')][_0x774d('0x42')][_0x774d('0x4b')]===_0x774d('0x4c')){logger[_0x774d('0xf')](_0x774d('0x4a'));_0x1112e0=_0x3642f4['users'][_0x774d('0x42')];return _0x1112e0;}else{logger[_0x774d('0x4d')](_0x774d('0x4e'),JSON['stringify'](_0x3642f4));throw new Error(_0x774d('0x4f')+JSON[_0x774d('0x3d')](_0x3642f4));}}}else{logger[_0x774d('0x4d')](_0x774d('0x4e'),JSON['stringify'](_0x3642f4));throw new Error(_0x774d('0x4f')+JSON[_0x774d('0x3d')](_0x3642f4));}});}function getEndUser(_0x3d34f3,_0x59fc0a,_0x48af89){logger[_0x774d('0xf')](_0x774d('0x50'),_0x48af89);return request({'method':_0x774d('0x3e'),'uri':util[_0x774d('0x16')](_0x774d('0x51'),_0x3d34f3[_0x774d('0x34')]),'qs':{'authtoken':_0x3d34f3[_0x774d('0x35')],'scope':_0x774d('0x36'),'criteria':util[_0x774d('0x16')](_0x774d('0x52'),_0x48af89)},'json':!![]})[_0x774d('0x37')](function(_0x17b3ee){if(_0x17b3ee['response']&&_0x17b3ee[_0x774d('0x38')]['result']){logger[_0x774d('0xf')](_0x774d('0x53'));var _0x48c852={};var _0x454aa8=_0x17b3ee['response'][_0x774d('0x39')]['Contacts'][_0x774d('0x54')]['no']?_0x17b3ee[_0x774d('0x38')][_0x774d('0x39')][_0x774d('0x55')][_0x774d('0x54')]['FL']:_0x17b3ee[_0x774d('0x38')][_0x774d('0x39')][_0x774d('0x55')][_0x774d('0x54')][0x0]['FL'];for(var _0x48b7ad=0x0,_0x132a0c=_0x454aa8[_0x774d('0x56')];_0x48b7ad<_0x132a0c;_0x48b7ad++){_0x48c852[_0x454aa8[_0x48b7ad][_0x774d('0x57')]]=_0x454aa8[_0x48b7ad][_0x774d('0x58')];}return _0x48c852;}else{return request({'method':_0x774d('0x3e'),'uri':util[_0x774d('0x16')](_0x774d('0x59'),_0x3d34f3['host']),'qs':{'authtoken':_0x3d34f3[_0x774d('0x35')],'scope':_0x774d('0x36'),'criteria':util['format'](_0x774d('0x52'),_0x48af89)},'json':!![]})[_0x774d('0x37')](function(_0x3b3307){if(_0x3b3307[_0x774d('0x38')]&&_0x3b3307[_0x774d('0x38')][_0x774d('0x39')]){logger['info'](_0x774d('0x5a'));var _0x31dc93={};var _0x16cc9d=_0x3b3307['response'][_0x774d('0x39')][_0x774d('0x2d')][_0x774d('0x54')]['no']?_0x3b3307[_0x774d('0x38')][_0x774d('0x39')][_0x774d('0x2d')][_0x774d('0x54')]['FL']:_0x3b3307[_0x774d('0x38')][_0x774d('0x39')][_0x774d('0x2d')][_0x774d('0x54')][0x0]['FL'];for(var _0x2667c7=0x0,_0xdfc3c5=_0x16cc9d['length'];_0x2667c7<_0xdfc3c5;_0x2667c7++){_0x31dc93[_0x16cc9d[_0x2667c7][_0x774d('0x57')]]=_0x16cc9d[_0x2667c7][_0x774d('0x58')];}return _0x31dc93;}else{logger[_0x774d('0xf')](_0x774d('0x5b'));_0x59fc0a=getName(_0x59fc0a);return request({'method':_0x774d('0x33'),'uri':util['format'](_0x774d('0x5c'),_0x3d34f3[_0x774d('0x34')]),'qs':{'authtoken':_0x3d34f3[_0x774d('0x35')],'scope':_0x774d('0x36'),'xmlData':util[_0x774d('0x16')](_0x774d('0x5d'),entities['encodeXML'](_0x59fc0a[0x0]),entities[_0x774d('0x31')](_0x59fc0a[0x1]),_0x48af89)},'json':!![]})['then'](function(_0x5aaad0){_0x5aaad0=JSON[_0x774d('0x5e')](parser[_0x774d('0x5f')](_0x5aaad0));if(_0x5aaad0[_0x774d('0x38')]){if(_0x5aaad0['response'][_0x774d('0x39')]&&_0x5aaad0[_0x774d('0x38')][_0x774d('0x39')][_0x774d('0x3b')]){logger[_0x774d('0xf')]('Enduser\x20created.');return request({'method':'GET','uri':util['format'](_0x774d('0x60'),_0x3d34f3[_0x774d('0x34')]),'qs':{'authtoken':_0x3d34f3['authToken'],'scope':_0x774d('0x36'),'id':_0x5aaad0[_0x774d('0x38')][_0x774d('0x39')][_0x774d('0x3b')]['FL'][0x0]['$t']},'json':!![]});}}throw new Error(_0x774d('0x61')+JSON['stringify'](_0x5aaad0));})[_0x774d('0x37')](function(_0x2e29f7){if(_0x2e29f7['response']){if(_0x2e29f7['response'][_0x774d('0x39')]){var _0x407303={};for(var _0xf026f5=0x0,_0x294f1d=_0x2e29f7[_0x774d('0x38')][_0x774d('0x39')][_0x774d('0x2d')][_0x774d('0x54')]['FL']['length'];_0xf026f5<_0x294f1d;_0xf026f5++){_0x407303[_0x2e29f7[_0x774d('0x38')]['result']['Leads']['row']['FL'][_0xf026f5][_0x774d('0x57')]]=_0x2e29f7[_0x774d('0x38')]['result'][_0x774d('0x2d')]['row']['FL'][_0xf026f5][_0x774d('0x58')];}return _0x407303;}}throw new Error(_0x774d('0x62')+JSON['stringify'](_0x2e29f7));});}});}});}function request(_0x3b0927){logger[_0x774d('0x63')]('[HTTP]',JSON[_0x774d('0x3d')](_0x3b0927));return rp(_0x3b0927);}function getCustomFields(_0x56cdc8,_0x53e53c){var _0x343805={};if(_0x56cdc8[_0x774d('0x56')]>0x0){_['forEach'](_0x56cdc8,function(_0x5de604){if(_0x5de604[_0x774d('0x64')]==='string'&&_0x5de604['idField']){_0x343805[_0x5de604[_0x774d('0x65')]]=_0x5de604[_0x774d('0x58')][_0x774d('0x66')]();}else if(_0x5de604['type']==='variable'&&_0x5de604[_0x774d('0x67')]&&_0x5de604[_0x774d('0x65')]&&_0x53e53c[_0x5de604[_0x774d('0x67')]]){_0x343805[_0x5de604[_0x774d('0x65')]]=_0x53e53c[_0x5de604['variableName']][_0x774d('0x66')]();}else if(_0x5de604[_0x774d('0x64')]===_0x774d('0x68')&&_0x5de604['Variable']&&_0x5de604[_0x774d('0x69')][_0x774d('0x6a')]&&_0x5de604[_0x774d('0x65')]&&_0x53e53c[_0x5de604['Variable']['name'][_0x774d('0x6b')]()]){_0x343805[_0x5de604[_0x774d('0x65')]]=_0x53e53c[_0x5de604[_0x774d('0x69')][_0x774d('0x6a')][_0x774d('0x6b')]()][_0x774d('0x66')]();}});}return _0x343805;}function getName(_0x408ee){if(_0x408ee[_0x774d('0x6c')]('\x20')>0x0){var _0x5ae071=_0x408ee['split'](/ (.+)/);if(_0x5ae071[0x1]){return _0x5ae071;}}return[_0x408ee,_0x408ee];}exports['queue']=function(_0x2396ba,_0x33192c,_0x35d833,_0x62fdd4,_0x5b1b0f,_0x4a3b3b){var _0x12ab4a,_0x26356c;_0x4a3b3b[_0x774d('0x34')]=intUtil[_0x774d('0x6d')](_0x4a3b3b[_0x774d('0x34')]);_0x4a3b3b[_0x774d('0x6e')]=intUtil[_0x774d('0x6d')](_0x4a3b3b['serverUrl']);if(_0x5b1b0f&&_0x5b1b0f['monitor_format']){logger['info'](_0x774d('0x6f'),'Recording\x20is\x20enabled!');_0x33192c[_0x774d('0x70')]=util['format'](_0x774d('0x71'),_0x4a3b3b[_0x774d('0x6e')],_0x33192c[_0x774d('0x72')],md5(_0x33192c[_0x774d('0x72')]));}else{_0x33192c[_0x774d('0x70')]='';}return getUser(_0x4a3b3b,_0x62fdd4[_0x774d('0x73')])[_0x774d('0x37')](function(_0x509096){_0x12ab4a=_0x509096;logger[_0x774d('0xf')](_0x774d('0x74'),_0x12ab4a['id']);return getEndUser(_0x4a3b3b,_0x33192c[_0x774d('0x75')],_0x33192c[_0x774d('0x76')]);})[_0x774d('0x37')](function(_0x37c26c){_0x26356c=_0x37c26c;logger['info'](_0x774d('0x77'),_0x26356c['CONTACTID']||_0x26356c[_0x774d('0x2b')]);return getCall(_0x4a3b3b,_0x12ab4a,_0x26356c,_0x35d833,_0x33192c,_0x774d('0x78'));})['then'](function(_0x3aa628){if(_0x3aa628){logger['info'](_0x774d('0x79'),_0x3aa628['id']);logger['info'](_0x774d('0x6f'),'Displaying\x20call\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x774d('0x16')](_0x774d('0x7a'),_0x62fdd4[_0x774d('0x6a')]),'trigger:browser:url',{'uri':util[_0x774d('0x16')](_0x774d('0x7b'),_0x4a3b3b[_0x774d('0x34')],_0x3aa628['id'])});}})[_0x774d('0x7c')](function(_0x429cd1){logger[_0x774d('0x4d')](_0x774d('0x6f'),JSON['stringify'](_0x429cd1));});};exports[_0x774d('0x13')]=function(_0x22c86a,_0x17073d,_0x501eca,_0x4faee5,_0x440adc,_0x19fd05,_0x19a3b0){var _0x1ae63b,_0x3f9579;_0x19fd05[_0x774d('0x34')]=intUtil[_0x774d('0x6d')](_0x19fd05[_0x774d('0x34')]);_0x19fd05['serverUrl']=intUtil[_0x774d('0x6d')](_0x19fd05['serverUrl']);if(_0x19a3b0&&_0x19a3b0[_0x774d('0x7d')]&&_0x19a3b0[_0x774d('0x7d')]!==_0x774d('0x7e')){logger[_0x774d('0xf')]('[OUTBOUND]',_0x774d('0x7f'));_0x17073d[_0x774d('0x70')]=util['format'](_0x774d('0x71'),_0x19fd05['serverUrl'],_0x17073d['uniqueid'],md5(_0x17073d[_0x774d('0x72')]));}return getUser(_0x19fd05,_0x4faee5[_0x774d('0x73')])['then'](function(_0x1b43d2){_0x1ae63b=_0x1b43d2;logger['info']('The\x20User\x20ID\x20is:',_0x1ae63b['id']);return getEndUser(_0x19fd05,_0x17073d[_0x774d('0x80')],_0x17073d[_0x774d('0x81')]);})[_0x774d('0x37')](function(_0x26bf5e){_0x3f9579=_0x26bf5e;logger[_0x774d('0xf')](_0x774d('0x77'),_0x3f9579[_0x774d('0x2a')]||_0x3f9579[_0x774d('0x2b')]);return getCall(_0x19fd05,_0x1ae63b,_0x3f9579,_0x501eca,_0x17073d,_0x774d('0x82'));})['then'](function(_0x13b0eb){if(_0x13b0eb){logger[_0x774d('0xf')]('The\x20Call\x20ID\x20is:',_0x13b0eb['id']);logger[_0x774d('0xf')](_0x774d('0x83'),_0x774d('0x84'));emit(util['format'](_0x774d('0x7a'),_0x4faee5['name']),_0x774d('0x85'),{'uri':util['format']('https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s',_0x19fd05[_0x774d('0x34')],_0x13b0eb['id'])});}})[_0x774d('0x7c')](function(_0xaafe4a){logger[_0x774d('0x4d')]('[OUTBOUND]',JSON[_0x774d('0x3d')](_0xaafe4a));});};exports[_0x774d('0x24')]=function(_0x4b50d8,_0x2e758d,_0x5a3813,_0x50a7ef,_0x3246d4,_0x5e21fd){var _0x3d3240,_0x33ce5a;_0x5e21fd['host']=intUtil[_0x774d('0x6d')](_0x5e21fd[_0x774d('0x34')]);_0x5e21fd[_0x774d('0x6e')]=intUtil['stripTrailingSlash'](_0x5e21fd[_0x774d('0x6e')]);if(_0x3246d4&&_0x3246d4[_0x774d('0x86')]){logger['info'](_0x774d('0x87'),_0x774d('0x7f'));_0x2e758d[_0x774d('0x70')]=util['format'](_0x774d('0x71'),_0x5e21fd[_0x774d('0x6e')],_0x2e758d[_0x774d('0x72')],md5(_0x2e758d[_0x774d('0x72')]));}else{_0x2e758d[_0x774d('0x70')]='';}return getUser(_0x5e21fd)[_0x774d('0x37')](function(_0x26d5a8){_0x3d3240=_0x26d5a8;logger[_0x774d('0xf')](_0x774d('0x74'),_0x3d3240['id']);return getEndUser(_0x5e21fd,_0x2e758d[_0x774d('0x75')],_0x2e758d[_0x774d('0x76')]);})[_0x774d('0x37')](function(_0x10cba2){_0x33ce5a=_0x10cba2;logger[_0x774d('0xf')](_0x774d('0x77'),_0x33ce5a[_0x774d('0x2a')]||_0x33ce5a[_0x774d('0x2b')]);return getCall(_0x5e21fd,_0x3d3240,_0x33ce5a,_0x5a3813,_0x2e758d,_0x774d('0x78'));})[_0x774d('0x37')](function(_0x13d3b2){if(_0x13d3b2){logger[_0x774d('0xf')](_0x774d('0x79'),_0x13d3b2['id']);}})[_0x774d('0x7c')](function(_0x374767){logger['error'](_0x774d('0x87'),JSON[_0x774d('0x3d')](_0x374767));});};
\ No newline at end of file
index 886a490..9ca84fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['mustache','trigger','exec','data2','Script','data3','%s\x20\x27%s\x27\x20failed\x20with\x20code\x20%d\x20and\x20error:\x20%s','info','%s\x20\x27%s\x27\x20succeeded\x20with\x20output:\x20%s','util','shelljs'];(function(_0x30747b,_0x576675){var _0x251d59=function(_0x1c055a){while(--_0x1c055a){_0x30747b['push'](_0x30747b['shift']());}};_0x251d59(++_0x576675);}(_0x7a54,0x106));var _0x47a5=function(_0x9a3d96,_0x38dfd9){_0x9a3d96=_0x9a3d96-0x0;var _0x295e0d=_0x7a54[_0x9a3d96];return _0x295e0d;};'use strict';var util=require(_0x47a5('0x0'));var sh=require(_0x47a5('0x1'));var Mustache=require(_0x47a5('0x2'));var logger=require('../../../../config/logger')(_0x47a5('0x3'));exports[_0x47a5('0x4')]=function(_0x4880bf,_0x5f7f12){var _0x11bf85=_0x4880bf[_0x47a5('0x5')]?_0x4880bf[_0x47a5('0x5')]:_0x47a5('0x6');var _0x545a97=_0x4880bf[_0x47a5('0x7')]?Mustache['render'](_0x4880bf[_0x47a5('0x7')],_0x5f7f12):_0x5f7f12;sh[_0x47a5('0x4')](_0x545a97,function(_0x506eda,_0x194fb0,_0x5077f3){if(_0x506eda!==0x0){logger['error'](util['format'](_0x47a5('0x8'),_0x11bf85,_0x545a97,_0x506eda,_0x5077f3));}else{logger[_0x47a5('0x9')](util['format'](_0x47a5('0xa'),_0x11bf85,_0x545a97,_0x194fb0));}});};
\ No newline at end of file
+var _0x7a54=['mustache','trigger','exec','data2','Script','data3','%s\x20\x27%s\x27\x20failed\x20with\x20code\x20%d\x20and\x20error:\x20%s','info','%s\x20\x27%s\x27\x20succeeded\x20with\x20output:\x20%s','util','shelljs'];(function(_0x1e3bca,_0x5c8c08){var _0x44cd98=function(_0x3550ee){while(--_0x3550ee){_0x1e3bca['push'](_0x1e3bca['shift']());}};_0x44cd98(++_0x5c8c08);}(_0x7a54,0x106));var _0x47a5=function(_0xfdb9b9,_0x1a27cf){_0xfdb9b9=_0xfdb9b9-0x0;var _0x59933f=_0x7a54[_0xfdb9b9];return _0x59933f;};'use strict';var util=require(_0x47a5('0x0'));var sh=require(_0x47a5('0x1'));var Mustache=require(_0x47a5('0x2'));var logger=require('../../../../config/logger')(_0x47a5('0x3'));exports[_0x47a5('0x4')]=function(_0x4880bf,_0x5f7f12){var _0x11bf85=_0x4880bf[_0x47a5('0x5')]?_0x4880bf[_0x47a5('0x5')]:_0x47a5('0x6');var _0x545a97=_0x4880bf[_0x47a5('0x7')]?Mustache['render'](_0x4880bf[_0x47a5('0x7')],_0x5f7f12):_0x5f7f12;sh[_0x47a5('0x4')](_0x545a97,function(_0x506eda,_0x194fb0,_0x5077f3){if(_0x506eda!==0x0){logger['error'](util['format'](_0x47a5('0x8'),_0x11bf85,_0x545a97,_0x506eda,_0x5077f3));}else{logger[_0x47a5('0x9')](util['format'](_0x47a5('0xa'),_0x11bf85,_0x545a97,_0x194fb0));}});};
\ No newline at end of file
index 686350f..b3186ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2fc9=['parse','render','stack','data1','toUpperCase','POST','PUT','data7','body','format','%s\x20%s\x20sending\x20request\x20with\x20following\x20options:\x20%s','stringify','isNil',',\x20request\x20body:\x20','%s\x20%s\x20succeeded\x20with\x20status:\x20%d\x20and\x20response:\x20%s','statusCode','catch','error','%s\x20%s\x20failed\x20with\x20status:\x20%d\x20and\x20error:\x20%s\x20%s','name','util','lodash','mustache','../../../../config/logger','trigger','exec','data2','headers','data6'];(function(_0x405441,_0x363bcc){var _0x3f386e=function(_0x35bcd3){while(--_0x35bcd3){_0x405441['push'](_0x405441['shift']());}};_0x3f386e(++_0x363bcc);}(_0x2fc9,0xc2));var _0x92fc=function(_0x4a53d,_0x58a95e){_0x4a53d=_0x4a53d-0x0;var _0x27410e=_0x2fc9[_0x4a53d];return _0x27410e;};'use strict';var rp=require('request-promise');var util=require(_0x92fc('0x0'));var _=require(_0x92fc('0x1'));var Mustache=require(_0x92fc('0x2'));var logger=require(_0x92fc('0x3'))(_0x92fc('0x4'));exports[_0x92fc('0x5')]=function(_0x460229,_0x4267ab){var _0x2307a2,_0x2872f5;var _0x2acc55={'method':_0x460229['data1']['toUpperCase'](),'uri':encodeURI(Mustache['render'](_0x460229[_0x92fc('0x6')],_0x4267ab)),'json':!![],'resolveWithFullResponse':!![]};try{_0x2acc55[_0x92fc('0x7')]=_0x460229[_0x92fc('0x8')]?JSON[_0x92fc('0x9')](Mustache[_0x92fc('0xa')](_0x460229[_0x92fc('0x8')],_0x4267ab)):{};}catch(_0x2805f4){logger['error'](_0x2805f4[_0x92fc('0xb')]);}switch(_0x460229[_0x92fc('0xc')][_0x92fc('0xd')]()){case'GET':_0x2acc55['qs']=_0x4267ab;break;case _0x92fc('0xe'):case _0x92fc('0xf'):_0x2307a2={};if(_0x460229[_0x92fc('0x10')]){_0x2307a2=Mustache['render'](_0x460229['data7'],_0x4267ab);}else{_0x2307a2=_0x4267ab;}_0x2acc55[_0x92fc('0x11')]=JSON[_0x92fc('0x9')](_0x2307a2);break;}logger['info'](util[_0x92fc('0x12')](_0x92fc('0x13'),_0x460229[_0x92fc('0xc')],_0x460229[_0x92fc('0x6')],JSON[_0x92fc('0x14')](_0x2acc55)));rp(_0x2acc55)['then'](function(_0x4007c8){_0x2307a2=!_[_0x92fc('0x15')](_0x2307a2)?_0x92fc('0x16')+_0x2307a2:'';_0x2872f5=typeof _0x4007c8[_0x92fc('0x11')]==='object'?JSON['stringify'](_0x4007c8[_0x92fc('0x11')]):_0x4007c8[_0x92fc('0x11')];logger['info'](util[_0x92fc('0x12')](_0x92fc('0x17'),_0x460229[_0x92fc('0xc')],_0x460229['data2'],_0x4007c8[_0x92fc('0x18')],_0x2872f5));})[_0x92fc('0x19')](function(_0x3a1071){logger[_0x92fc('0x1a')](util[_0x92fc('0x12')](_0x92fc('0x1b'),_0x460229[_0x92fc('0xc')],_0x460229[_0x92fc('0x6')],_0x3a1071['statusCode'],_0x3a1071[_0x92fc('0x1c')],_0x3a1071['message']));});};
\ No newline at end of file
+var _0x19c3=['trigger','exec','data1','render','data2','headers','data6','parse','error','stack','toUpperCase','POST','data7','body','info','format','stringify','isNil',',\x20request\x20body:\x20','object','%s\x20%s\x20succeeded\x20with\x20status:\x20%d\x20and\x20response:\x20%s','catch','%s\x20%s\x20failed\x20with\x20status:\x20%d\x20and\x20error:\x20%s\x20%s','name','message','request-promise','lodash','mustache'];(function(_0x1bdd77,_0x4f0f9e){var _0x339718=function(_0x82a4e5){while(--_0x82a4e5){_0x1bdd77['push'](_0x1bdd77['shift']());}};_0x339718(++_0x4f0f9e);}(_0x19c3,0xf9));var _0x319c=function(_0x5dfb65,_0x1ae9dd){_0x5dfb65=_0x5dfb65-0x0;var _0x3c935f=_0x19c3[_0x5dfb65];return _0x3c935f;};'use strict';var rp=require(_0x319c('0x0'));var util=require('util');var _=require(_0x319c('0x1'));var Mustache=require(_0x319c('0x2'));var logger=require('../../../../config/logger')(_0x319c('0x3'));exports[_0x319c('0x4')]=function(_0x13f249,_0x350517){var _0x3a96b1,_0x290261;var _0x4c35fe={'method':_0x13f249[_0x319c('0x5')]['toUpperCase'](),'uri':encodeURI(Mustache[_0x319c('0x6')](_0x13f249[_0x319c('0x7')],_0x350517)),'json':!![],'resolveWithFullResponse':!![]};try{_0x4c35fe[_0x319c('0x8')]=_0x13f249[_0x319c('0x9')]?JSON[_0x319c('0xa')](Mustache['render'](_0x13f249[_0x319c('0x9')],_0x350517)):{};}catch(_0x1b7ffd){logger[_0x319c('0xb')](_0x1b7ffd[_0x319c('0xc')]);}switch(_0x13f249[_0x319c('0x5')][_0x319c('0xd')]()){case'GET':_0x4c35fe['qs']=_0x350517;break;case _0x319c('0xe'):case'PUT':_0x3a96b1={};if(_0x13f249[_0x319c('0xf')]){_0x3a96b1=Mustache[_0x319c('0x6')](_0x13f249[_0x319c('0xf')],_0x350517);}else{_0x3a96b1=_0x350517;}_0x4c35fe[_0x319c('0x10')]=JSON[_0x319c('0xa')](_0x3a96b1);break;}logger[_0x319c('0x11')](util[_0x319c('0x12')]('%s\x20%s\x20sending\x20request\x20with\x20following\x20options:\x20%s',_0x13f249['data1'],_0x13f249[_0x319c('0x7')],JSON[_0x319c('0x13')](_0x4c35fe)));rp(_0x4c35fe)['then'](function(_0x372a50){_0x3a96b1=!_[_0x319c('0x14')](_0x3a96b1)?_0x319c('0x15')+_0x3a96b1:'';_0x290261=typeof _0x372a50[_0x319c('0x10')]===_0x319c('0x16')?JSON[_0x319c('0x13')](_0x372a50[_0x319c('0x10')]):_0x372a50['body'];logger['info'](util[_0x319c('0x12')](_0x319c('0x17'),_0x13f249['data1'],_0x13f249[_0x319c('0x7')],_0x372a50['statusCode'],_0x290261));})[_0x319c('0x18')](function(_0x45a822){logger[_0x319c('0xb')](util[_0x319c('0x12')](_0x319c('0x19'),_0x13f249[_0x319c('0x5')],_0x13f249[_0x319c('0x7')],_0x45a822['statusCode'],_0x45a822[_0x319c('0x1a')],_0x45a822[_0x319c('0x1b')]));});};
\ No newline at end of file
index 4dbad6b..435c315 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaefc=['message','result','catch','routing','exports','jayson/promise','bluebird','../../config/logger','client','http','then','rpc','error'];(function(_0x3d4193,_0x358e7c){var _0x16b6ac=function(_0x30dab7){while(--_0x30dab7){_0x3d4193['push'](_0x3d4193['shift']());}};_0x16b6ac(++_0x358e7c);}(_0xaefc,0xc8));var _0xcaef=function(_0x57ac32,_0xd63c46){_0x57ac32=_0x57ac32-0x0;var _0x5f2c41=_0xaefc[_0x57ac32];return _0x5f2c41;};'use strict';var jayson=require(_0xcaef('0x0'));var BPromise=require(_0xcaef('0x1'));var logger=require(_0xcaef('0x2'))('routing');var client=jayson[_0xcaef('0x3')][_0xcaef('0x4')]({'port':0x2329});client['Request']=function(_0x575523,_0x37a134){return new BPromise(function(_0x46a35e,_0x5f160f){return client['request'](_0x575523,_0x37a134)[_0xcaef('0x5')](function(_0x4471a1){logger['debug'](_0xcaef('0x6'),'routing',_0x575523,_0x37a134,_0x4471a1);if(_0x4471a1['error']){logger[_0xcaef('0x7')](_0xcaef('0x6'),'routing',_0x575523,_0x4471a1[_0xcaef('0x7')][_0xcaef('0x8')],_0x37a134);return _0x5f160f(_0x4471a1['error'][_0xcaef('0x8')]);}else{return _0x46a35e(_0x4471a1[_0xcaef('0x9')]);}})[_0xcaef('0xa')](function(_0x1c490c){logger[_0xcaef('0x7')](_0xcaef('0x6'),_0xcaef('0xb'),_0x575523,_0x1c490c,_0x37a134);return _0x5f160f(_0x1c490c);});});};module[_0xcaef('0xc')]=client;
\ No newline at end of file
+var _0x3d9f=['jayson/promise','bluebird','../../config/logger','routing','client','http','Request','request','debug','error','rpc','message','result','catch','exports'];(function(_0x53d7fc,_0x2b70d3){var _0x295a67=function(_0x2e5348){while(--_0x2e5348){_0x53d7fc['push'](_0x53d7fc['shift']());}};_0x295a67(++_0x2b70d3);}(_0x3d9f,0xd2));var _0xf3d9=function(_0x31e29a,_0x349c9b){_0x31e29a=_0x31e29a-0x0;var _0x32d892=_0x3d9f[_0x31e29a];return _0x32d892;};'use strict';var jayson=require(_0xf3d9('0x0'));var BPromise=require(_0xf3d9('0x1'));var logger=require(_0xf3d9('0x2'))(_0xf3d9('0x3'));var client=jayson[_0xf3d9('0x4')][_0xf3d9('0x5')]({'port':0x2329});client[_0xf3d9('0x6')]=function(_0x30036e,_0x4ac931){return new BPromise(function(_0x4ab31c,_0x4dc969){return client[_0xf3d9('0x7')](_0x30036e,_0x4ac931)['then'](function(_0x6d83d7){logger[_0xf3d9('0x8')]('rpc','routing',_0x30036e,_0x4ac931,_0x6d83d7);if(_0x6d83d7[_0xf3d9('0x9')]){logger[_0xf3d9('0x9')](_0xf3d9('0xa'),_0xf3d9('0x3'),_0x30036e,_0x6d83d7[_0xf3d9('0x9')][_0xf3d9('0xb')],_0x4ac931);return _0x4dc969(_0x6d83d7['error']['message']);}else{return _0x4ab31c(_0x6d83d7[_0xf3d9('0xc')]);}})[_0xf3d9('0xd')](function(_0x252ed2){logger[_0xf3d9('0x9')](_0xf3d9('0xa'),'routing',_0x30036e,_0x252ed2,_0x4ac931);return _0x4dc969(_0x252ed2);});});};module[_0xf3d9('0xe')]=client;
\ No newline at end of file
index 922afb3..e06110a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5e6a=['./realtime','./lib/email','./rpc/mailAccount','then','refresh','catch','log','./server'];(function(_0x510e40,_0x451340){var _0x5745d3=function(_0x457301){while(--_0x457301){_0x510e40['push'](_0x510e40['shift']());}};_0x5745d3(++_0x451340);}(_0x5e6a,0xb7));var _0xa5e6=function(_0x4d82e4,_0x3cf5be){_0x4d82e4=_0x4d82e4-0x0;var _0x3a3c8b=_0x5e6a[_0x4d82e4];return _0x3a3c8b;};'use strict';var BPromise=require('bluebird');var server=require(_0xa5e6('0x0'));var Realtime=require(_0xa5e6('0x1'));var EmailChannel=require(_0xa5e6('0x2'));var mailAccount=require(_0xa5e6('0x3'));var realtime=new Realtime();var email=new EmailChannel(realtime);function initRealtime(){return BPromise['resolve']()[_0xa5e6('0x4')](mailAccount['getMailAccounts']())[_0xa5e6('0x4')](realtime['initMailAccounts']())[_0xa5e6('0x4')](function(){email[_0xa5e6('0x5')](realtime['mailAccounts']);return realtime;});}function main(){return server['listen'](realtime,email)['then'](function(_0x206f58){return initRealtime();})['then'](function(_0x191661){return setInterval(initRealtime,0x2710);})[_0xa5e6('0x6')](function(_0x7115a8){console[_0xa5e6('0x7')](_0x7115a8);});}main();
\ No newline at end of file
+var _0xe6e7=['then','initMailAccounts','refresh','mailAccounts','listen','catch','log','bluebird','./server','./realtime','resolve','getMailAccounts'];(function(_0x2d1905,_0x1e46a0){var _0x3aacd1=function(_0x9e872b){while(--_0x9e872b){_0x2d1905['push'](_0x2d1905['shift']());}};_0x3aacd1(++_0x1e46a0);}(_0xe6e7,0x1cf));var _0x7e6e=function(_0x5fac82,_0x5c6541){_0x5fac82=_0x5fac82-0x0;var _0xcf3bcb=_0xe6e7[_0x5fac82];return _0xcf3bcb;};'use strict';var BPromise=require(_0x7e6e('0x0'));var server=require(_0x7e6e('0x1'));var Realtime=require(_0x7e6e('0x2'));var EmailChannel=require('./lib/email');var mailAccount=require('./rpc/mailAccount');var realtime=new Realtime();var email=new EmailChannel(realtime);function initRealtime(){return BPromise[_0x7e6e('0x3')]()['then'](mailAccount[_0x7e6e('0x4')]())[_0x7e6e('0x5')](realtime[_0x7e6e('0x6')]())[_0x7e6e('0x5')](function(){email[_0x7e6e('0x7')](realtime[_0x7e6e('0x8')]);return realtime;});}function main(){return server[_0x7e6e('0x9')](realtime,email)[_0x7e6e('0x5')](function(_0x1e2ba3){return initRealtime();})['then'](function(_0x5571c7){return setInterval(initRealtime,0x2710);})[_0x7e6e('0xa')](function(_0x4032ba){console[_0x7e6e('0xb')](_0x4032ba);});}main();
\ No newline at end of file
index 06be556..08fb7df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5464=['emit','name','key','active','Imap','md5','prototype','hasOwnProperty','email','box','handleImapBox','bind','handleImapEmail','end','handleImapEnd','error','handleImapError','isNil','status','disabled','connected','total','New\x20email\x20from\x20%s\x20%s\x20%s\x20to\x20%s','firstName','from','then','Mail\x20accepted\x20from\x20routing','catch','Mail\x20not\x20accepted\x20from\x20routing\x20%s','stringify','send','verifySmtp','Smtp','verify','verified','messageStatus','exports','lodash','moment','bluebird','ioredis','../../../config/logger','redis','defaults','localhost','./smtp','../rpc/mailAccount','info','start\x20email\x20channel','mailAccounts','imapAccounts','smtp'];(function(_0x488ca1,_0xf6858e){var _0x4dd0a4=function(_0x40fb65){while(--_0x40fb65){_0x488ca1['push'](_0x488ca1['shift']());}};_0x4dd0a4(++_0xf6858e);}(_0x5464,0x15d));var _0x4546=function(_0x245cf2,_0x11d6f8){_0x245cf2=_0x245cf2-0x0;var _0x3ced68=_0x5464[_0x245cf2];return _0x3ced68;};'use strict';var _=require(_0x4546('0x0'));var moment=require(_0x4546('0x1'));var BPromise=require(_0x4546('0x2'));var md5=require('md5');var Redis=require(_0x4546('0x3'));var config=require('../../../config/environment');var logger=require(_0x4546('0x4'))('email');config[_0x4546('0x5')]=_[_0x4546('0x6')](config[_0x4546('0x5')],{'host':_0x4546('0x7'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var EmailImap=require('./imap');var EmailSmtp=require(_0x4546('0x8'));var mailAccount=require(_0x4546('0x9'));var md5Accounts={};function EmailChannel(_0x1a76c1){logger[_0x4546('0xa')](_0x4546('0xb'));this[_0x4546('0xc')]=_0x1a76c1[_0x4546('0xc')];this[_0x4546('0xd')]={};this[_0x4546('0xe')]=new EmailSmtp();}EmailChannel['prototype'][_0x4546('0xf')]=function(_0x8a15e2){var _0x3d082a=this['mailAccounts'][_0x8a15e2];var _0x1f82c9={'id':_0x3d082a['id'],'name':_0x3d082a[_0x4546('0x10')],'key':_0x3d082a[_0x4546('0x11')],'active':_0x3d082a[_0x4546('0x12')],'Imap':{'status':_0x3d082a['Imap']['status'],'messageStatus':_0x3d082a[_0x4546('0x13')]['messageStatus'],'total':_0x3d082a['Imap']['total']}};if(_['isNil'](md5Accounts[_0x8a15e2])){md5Accounts[_0x8a15e2]={};}var _0x598516=md5(JSON['stringify'](_0x1f82c9));if(md5Accounts[_0x8a15e2][_0x4546('0x14')]!==_0x598516){md5Accounts[_0x8a15e2]['md5']=_0x598516;io[_0x4546('0xf')]('mailAccount:update',_0x1f82c9);}};EmailChannel[_0x4546('0x15')]['refresh']=function(_0x3741f2){for(var _0x18bc09 in _0x3741f2){if(_0x3741f2[_0x4546('0x16')](_0x18bc09)){if(_0x3741f2[_0x18bc09][_0x4546('0x13')]&&_0x3741f2[_0x18bc09][_0x4546('0x12')]){var _0x15e09e=_0x3741f2[_0x18bc09]['Imap'];if(!this['imapAccounts']['hasOwnProperty'](_0x15e09e['id'])){this[_0x4546('0xd')][_0x15e09e['id']]=new EmailImap(_0x15e09e,_0x3741f2[_0x18bc09][_0x4546('0x17')]);this[_0x4546('0xd')][_0x15e09e['id']]['on'](_0x4546('0x18'),this[_0x4546('0x19')][_0x4546('0x1a')](this,_0x18bc09));this[_0x4546('0xd')][_0x15e09e['id']]['on'](_0x4546('0x17'),this[_0x4546('0x1b')][_0x4546('0x1a')](this,_0x18bc09));this['imapAccounts'][_0x15e09e['id']]['on'](_0x4546('0x1c'),this[_0x4546('0x1d')]['bind'](this,_0x18bc09));this[_0x4546('0xd')][_0x15e09e['id']]['on'](_0x4546('0x1e'),this[_0x4546('0x1f')][_0x4546('0x1a')](this,_0x18bc09));}}else{if(_[_0x4546('0x20')](this[_0x4546('0xc')][_0x18bc09]['Imap'])){this[_0x4546('0xc')][_0x18bc09][_0x4546('0x13')]={};}this['mailAccounts'][_0x18bc09][_0x4546('0x13')][_0x4546('0x21')]=_0x4546('0x22');this[_0x4546('0xc')][_0x18bc09][_0x4546('0x13')]['messageStatus']='';this[_0x4546('0xf')](_0x18bc09);}}}};EmailChannel[_0x4546('0x15')][_0x4546('0x19')]=function(_0x48fc36,_0x4c1dad){if(this[_0x4546('0xc')][_0x48fc36]){this[_0x4546('0xc')][_0x48fc36][_0x4546('0x13')][_0x4546('0x21')]=_0x4546('0x23');this[_0x4546('0xc')][_0x48fc36][_0x4546('0x13')]['messageStatus']=_0x4c1dad[_0x4546('0x10')];if(_0x4c1dad['messages']){this[_0x4546('0xc')][_0x48fc36][_0x4546('0x13')]['total']=_0x4c1dad['messages'][_0x4546('0x24')];}return this['emit'](_0x48fc36);}};EmailChannel[_0x4546('0x15')][_0x4546('0x1b')]=function(_0x480d8e,_0x5f0226){logger[_0x4546('0xa')](_0x4546('0x25'),_0x5f0226[_0x4546('0x26')],_0x5f0226['lastName'],_0x5f0226[_0x4546('0x27')],_0x480d8e);if(this[_0x4546('0xc')][_0x480d8e]){return mailAccount['notify'](_0x480d8e,_0x5f0226)[_0x4546('0x28')](function(_0x4f5f36){if(_0x4f5f36){logger[_0x4546('0xa')](_0x4546('0x29'));}})[_0x4546('0x2a')](function(_0x2ce37f){logger['error'](_0x4546('0x2b'),JSON[_0x4546('0x2c')](_0x2ce37f));});}};EmailChannel[_0x4546('0x15')][_0x4546('0x1d')]=function(_0x1487fd){if(this[_0x4546('0xc')][_0x1487fd]&&this['mailAccounts'][_0x1487fd][_0x4546('0x13')]){if(this[_0x4546('0xd')][this['mailAccounts'][_0x1487fd]['Imap']['id']]){delete this[_0x4546('0xd')][this[_0x4546('0xc')][_0x1487fd]['Imap']['id']];}this[_0x4546('0xc')][_0x1487fd][_0x4546('0x13')]['lastSync']=moment();this['emit'](_0x1487fd);}};EmailChannel[_0x4546('0x15')][_0x4546('0x1f')]=function(_0x18458b,_0xf73ed2){if(this[_0x4546('0xc')][_0x18458b]){this[_0x4546('0xc')][_0x18458b]['Imap'][_0x4546('0x21')]=_0x4546('0x1e');this['mailAccounts'][_0x18458b][_0x4546('0x13')]['messageStatus']=_0xf73ed2;return this[_0x4546('0xf')](_0x18458b);}};EmailChannel[_0x4546('0x15')]['sendMail']=function(_0x5d9f18,_0x104d56){return this[_0x4546('0xe')][_0x4546('0x2d')](_0x5d9f18,_0x104d56);};EmailChannel['prototype'][_0x4546('0x2e')]=function(_0x3f7ddb){var _0x24eb6d=this;if(this[_0x4546('0xc')][_0x3f7ddb['id']]){if(_[_0x4546('0x20')](this[_0x4546('0xc')][_0x3f7ddb['id']][_0x4546('0x2f')])){this[_0x4546('0xc')][_0x3f7ddb['id']]['Smtp']={};}this[_0x4546('0xc')][_0x3f7ddb['id']][_0x4546('0x2f')]['lastSync']=moment();return new BPromise(function(_0x4d9816,_0x3bafee){return _0x24eb6d[_0x4546('0xe')][_0x4546('0x30')](_0x3f7ddb)[_0x4546('0x28')](function(_0xa9029e){_0x24eb6d['mailAccounts'][_0x3f7ddb['id']][_0x4546('0x2f')][_0x4546('0x21')]=_0x4546('0x31');_0x24eb6d[_0x4546('0xc')][_0x3f7ddb['id']][_0x4546('0x2f')][_0x4546('0x32')]='';_0x24eb6d[_0x4546('0xf')](_0x3f7ddb['id']);_0x4d9816(_0xa9029e);})[_0x4546('0x2a')](function(_0x247fd3){_0x24eb6d['mailAccounts'][_0x3f7ddb['id']][_0x4546('0x2f')][_0x4546('0x21')]=_0x4546('0x1e');_0x24eb6d[_0x4546('0xc')][_0x3f7ddb['id']][_0x4546('0x2f')][_0x4546('0x32')]=_0x247fd3;_0x24eb6d[_0x4546('0xf')](_0x3f7ddb['id']);_0x3bafee(_0x247fd3);});});}return this[_0x4546('0xe')][_0x4546('0x30')](_0x3f7ddb);};module[_0x4546('0x33')]=EmailChannel;
\ No newline at end of file
+var _0xd9eb=['localhost','socket.io-emitter','./imap','./smtp','../rpc/mailAccount','info','start\x20email\x20channel','mailAccounts','imapAccounts','smtp','prototype','emit','name','active','Imap','status','messageStatus','total','isNil','stringify','mailAccount:update','refresh','hasOwnProperty','box','handleImapBox','bind','handleImapEmail','end','handleImapEnd','handleImapError','connected','messages','New\x20email\x20from\x20%s\x20%s\x20%s\x20to\x20%s','firstName','from','notify','then','catch','error','send','Smtp','verified','exports','lodash','moment','bluebird','md5','ioredis','../../../config/environment','../../../config/logger','email','redis','defaults'];(function(_0x35fb56,_0x5dadff){var _0x2fd52c=function(_0x97bd3f){while(--_0x97bd3f){_0x35fb56['push'](_0x35fb56['shift']());}};_0x2fd52c(++_0x5dadff);}(_0xd9eb,0xca));var _0xbd9e=function(_0x1da04e,_0x31024b){_0x1da04e=_0x1da04e-0x0;var _0xdd8c41=_0xd9eb[_0x1da04e];return _0xdd8c41;};'use strict';var _=require(_0xbd9e('0x0'));var moment=require(_0xbd9e('0x1'));var BPromise=require(_0xbd9e('0x2'));var md5=require(_0xbd9e('0x3'));var Redis=require(_0xbd9e('0x4'));var config=require(_0xbd9e('0x5'));var logger=require(_0xbd9e('0x6'))(_0xbd9e('0x7'));config[_0xbd9e('0x8')]=_[_0xbd9e('0x9')](config[_0xbd9e('0x8')],{'host':_0xbd9e('0xa'),'port':0x18eb});var io=require(_0xbd9e('0xb'))(new Redis(config['redis']));var EmailImap=require(_0xbd9e('0xc'));var EmailSmtp=require(_0xbd9e('0xd'));var mailAccount=require(_0xbd9e('0xe'));var md5Accounts={};function EmailChannel(_0x2dbf84){logger[_0xbd9e('0xf')](_0xbd9e('0x10'));this[_0xbd9e('0x11')]=_0x2dbf84[_0xbd9e('0x11')];this[_0xbd9e('0x12')]={};this[_0xbd9e('0x13')]=new EmailSmtp();}EmailChannel[_0xbd9e('0x14')][_0xbd9e('0x15')]=function(_0x5cb5a8){var _0x3cfedc=this[_0xbd9e('0x11')][_0x5cb5a8];var _0x5e6203={'id':_0x3cfedc['id'],'name':_0x3cfedc[_0xbd9e('0x16')],'key':_0x3cfedc['key'],'active':_0x3cfedc[_0xbd9e('0x17')],'Imap':{'status':_0x3cfedc[_0xbd9e('0x18')][_0xbd9e('0x19')],'messageStatus':_0x3cfedc[_0xbd9e('0x18')][_0xbd9e('0x1a')],'total':_0x3cfedc[_0xbd9e('0x18')][_0xbd9e('0x1b')]}};if(_[_0xbd9e('0x1c')](md5Accounts[_0x5cb5a8])){md5Accounts[_0x5cb5a8]={};}var _0x47e6a0=md5(JSON[_0xbd9e('0x1d')](_0x5e6203));if(md5Accounts[_0x5cb5a8][_0xbd9e('0x3')]!==_0x47e6a0){md5Accounts[_0x5cb5a8][_0xbd9e('0x3')]=_0x47e6a0;io[_0xbd9e('0x15')](_0xbd9e('0x1e'),_0x5e6203);}};EmailChannel[_0xbd9e('0x14')][_0xbd9e('0x1f')]=function(_0x87eb30){for(var _0x4112a8 in _0x87eb30){if(_0x87eb30[_0xbd9e('0x20')](_0x4112a8)){if(_0x87eb30[_0x4112a8][_0xbd9e('0x18')]&&_0x87eb30[_0x4112a8]['active']){var _0x43c588=_0x87eb30[_0x4112a8][_0xbd9e('0x18')];if(!this[_0xbd9e('0x12')][_0xbd9e('0x20')](_0x43c588['id'])){this[_0xbd9e('0x12')][_0x43c588['id']]=new EmailImap(_0x43c588,_0x87eb30[_0x4112a8]['email']);this[_0xbd9e('0x12')][_0x43c588['id']]['on'](_0xbd9e('0x21'),this[_0xbd9e('0x22')][_0xbd9e('0x23')](this,_0x4112a8));this[_0xbd9e('0x12')][_0x43c588['id']]['on']('email',this[_0xbd9e('0x24')]['bind'](this,_0x4112a8));this['imapAccounts'][_0x43c588['id']]['on'](_0xbd9e('0x25'),this[_0xbd9e('0x26')][_0xbd9e('0x23')](this,_0x4112a8));this[_0xbd9e('0x12')][_0x43c588['id']]['on']('error',this[_0xbd9e('0x27')][_0xbd9e('0x23')](this,_0x4112a8));}}else{if(_['isNil'](this['mailAccounts'][_0x4112a8][_0xbd9e('0x18')])){this[_0xbd9e('0x11')][_0x4112a8][_0xbd9e('0x18')]={};}this[_0xbd9e('0x11')][_0x4112a8]['Imap']['status']='disabled';this[_0xbd9e('0x11')][_0x4112a8]['Imap'][_0xbd9e('0x1a')]='';this['emit'](_0x4112a8);}}}};EmailChannel[_0xbd9e('0x14')][_0xbd9e('0x22')]=function(_0x4be355,_0x469153){if(this[_0xbd9e('0x11')][_0x4be355]){this[_0xbd9e('0x11')][_0x4be355][_0xbd9e('0x18')][_0xbd9e('0x19')]=_0xbd9e('0x28');this[_0xbd9e('0x11')][_0x4be355]['Imap'][_0xbd9e('0x1a')]=_0x469153['name'];if(_0x469153[_0xbd9e('0x29')]){this['mailAccounts'][_0x4be355][_0xbd9e('0x18')][_0xbd9e('0x1b')]=_0x469153[_0xbd9e('0x29')][_0xbd9e('0x1b')];}return this[_0xbd9e('0x15')](_0x4be355);}};EmailChannel['prototype'][_0xbd9e('0x24')]=function(_0x662015,_0x5cf6aa){logger[_0xbd9e('0xf')](_0xbd9e('0x2a'),_0x5cf6aa[_0xbd9e('0x2b')],_0x5cf6aa['lastName'],_0x5cf6aa[_0xbd9e('0x2c')],_0x662015);if(this[_0xbd9e('0x11')][_0x662015]){return mailAccount[_0xbd9e('0x2d')](_0x662015,_0x5cf6aa)[_0xbd9e('0x2e')](function(_0x57d28a){if(_0x57d28a){logger['info']('Mail\x20accepted\x20from\x20routing');}})[_0xbd9e('0x2f')](function(_0x489c7f){logger[_0xbd9e('0x30')]('Mail\x20not\x20accepted\x20from\x20routing\x20%s',JSON['stringify'](_0x489c7f));});}};EmailChannel[_0xbd9e('0x14')]['handleImapEnd']=function(_0x360784){if(this[_0xbd9e('0x11')][_0x360784]&&this[_0xbd9e('0x11')][_0x360784][_0xbd9e('0x18')]){if(this[_0xbd9e('0x12')][this[_0xbd9e('0x11')][_0x360784]['Imap']['id']]){delete this[_0xbd9e('0x12')][this['mailAccounts'][_0x360784][_0xbd9e('0x18')]['id']];}this['mailAccounts'][_0x360784]['Imap']['lastSync']=moment();this[_0xbd9e('0x15')](_0x360784);}};EmailChannel['prototype']['handleImapError']=function(_0x1ac0a9,_0x5b9913){if(this[_0xbd9e('0x11')][_0x1ac0a9]){this['mailAccounts'][_0x1ac0a9][_0xbd9e('0x18')][_0xbd9e('0x19')]=_0xbd9e('0x30');this[_0xbd9e('0x11')][_0x1ac0a9][_0xbd9e('0x18')]['messageStatus']=_0x5b9913;return this[_0xbd9e('0x15')](_0x1ac0a9);}};EmailChannel[_0xbd9e('0x14')]['sendMail']=function(_0x24eb19,_0x10735c){return this[_0xbd9e('0x13')][_0xbd9e('0x31')](_0x24eb19,_0x10735c);};EmailChannel[_0xbd9e('0x14')]['verifySmtp']=function(_0x324a75){var _0x1c07f7=this;if(this[_0xbd9e('0x11')][_0x324a75['id']]){if(_[_0xbd9e('0x1c')](this[_0xbd9e('0x11')][_0x324a75['id']][_0xbd9e('0x32')])){this['mailAccounts'][_0x324a75['id']][_0xbd9e('0x32')]={};}this[_0xbd9e('0x11')][_0x324a75['id']][_0xbd9e('0x32')]['lastSync']=moment();return new BPromise(function(_0x1ea576,_0x24cca7){return _0x1c07f7['smtp']['verify'](_0x324a75)['then'](function(_0x884037){_0x1c07f7[_0xbd9e('0x11')][_0x324a75['id']]['Smtp'][_0xbd9e('0x19')]=_0xbd9e('0x33');_0x1c07f7[_0xbd9e('0x11')][_0x324a75['id']][_0xbd9e('0x32')][_0xbd9e('0x1a')]='';_0x1c07f7[_0xbd9e('0x15')](_0x324a75['id']);_0x1ea576(_0x884037);})[_0xbd9e('0x2f')](function(_0x1bd88b){_0x1c07f7['mailAccounts'][_0x324a75['id']][_0xbd9e('0x32')][_0xbd9e('0x19')]=_0xbd9e('0x30');_0x1c07f7[_0xbd9e('0x11')][_0x324a75['id']]['Smtp']['messageStatus']=_0x1bd88b;_0x1c07f7[_0xbd9e('0x15')](_0x324a75['id']);_0x24cca7(_0x1bd88b);});});}return this[_0xbd9e('0x13')]['verify'](_0x324a75);};module[_0xbd9e('0x34')]=EmailChannel;
\ No newline at end of file
index df7b6bf..68b7301 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6345=['INBOX','getAccount','once','ready','handleReady','end','bind','error','handleError','connect','inherits','connTimeout','authTimeout','authentication','password','host','port','tls','autotls','required','user','anonymous@xcally.com','openBox','handleOpenBox','prototype','emit','box','readUnseen','handleCloseBox','UNSEEN','message','handleFetchMessage','handleFetchEnd','closeBox','body','attributes','handleMessageAttributes','handleMessageEnd','handleSimpleParser','account','handleEnd','stringify','textCode','hasOwnProperty','upperFirst','exports','path','imap','randomstring','mailparser','simpleParser','iconv','Iconv','events','EventEmitter','./utils','../../../config/logger','email','mailbox'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0x6345,0xa4));var _0x5634=function(_0x4f983e,_0x3f0344){_0x4f983e=_0x4f983e-0x0;var _0x2569ed=_0x6345[_0x4f983e];return _0x2569ed;};'use strict';var fs=require('fs');var path=require(_0x5634('0x0'));var util=require('util');var Imap=require(_0x5634('0x1'));var _=require('lodash');var rs=require(_0x5634('0x2'));var simpleParser=require(_0x5634('0x3'))[_0x5634('0x4')];var Iconv=require(_0x5634('0x5'))[_0x5634('0x6')];var EventEmitter=require(_0x5634('0x7'))[_0x5634('0x8')];var utils=require(_0x5634('0x9'));var logger=require(_0x5634('0xa'))(_0x5634('0xb'));function EmailImap(_0x478efa,_0xb7b27c){this[_0x5634('0xc')]=_0x5634('0xd');this['account']=this[_0x5634('0xe')](_0x478efa,_0xb7b27c);this[_0x5634('0x1')]=new Imap(this['account']);this[_0x5634('0x1')][_0x5634('0xf')](_0x5634('0x10'),this[_0x5634('0x11')]['bind'](this));this['imap'][_0x5634('0xf')](_0x5634('0x12'),this['handleEnd'][_0x5634('0x13')](this));this['imap']['on'](_0x5634('0x14'),this[_0x5634('0x15')][_0x5634('0x13')](this));this[_0x5634('0x1')][_0x5634('0x16')]();}util[_0x5634('0x17')](EmailImap,EventEmitter);EmailImap['prototype'][_0x5634('0xe')]=function(_0x36ab07,_0x457e0f){var _0x20146f={'connTimeout':_0x36ab07['connTimeout']?_0x36ab07[_0x5634('0x18')]*0x3e8:0x2710,'authTimeout':_0x36ab07[_0x5634('0x19')]?_0x36ab07['authTimeout']*0x3e8:0x1388};if(_['isNil'](_0x36ab07['service'])){if(_0x36ab07[_0x5634('0x1a')]){_0x20146f['user']=_0x36ab07['user'];_0x20146f['password']=_0x36ab07[_0x5634('0x1b')];}_0x20146f[_0x5634('0x1c')]=_0x36ab07['host'];_0x20146f[_0x5634('0x1d')]=_0x36ab07[_0x5634('0x1d')]||0x3e1;if(_0x36ab07[_0x5634('0x1e')]){_0x20146f['tls']=!![];}else{_0x20146f[_0x5634('0x1e')]=![];_0x20146f[_0x5634('0x1f')]=_0x5634('0x20');}}else{_0x20146f[_0x5634('0x21')]=_0x36ab07['user'];_0x20146f[_0x5634('0x1b')]=_0x36ab07[_0x5634('0x1b')];_0x20146f[_0x5634('0x1c')]=utils['getHost'](_0x36ab07['service']);_0x20146f[_0x5634('0x1d')]=0x3e1;_0x20146f[_0x5634('0x1e')]=!![];}_0x20146f[_0x5634('0xb')]=_0x457e0f||_0x36ab07[_0x5634('0x21')]||_0x5634('0x22');return _0x20146f;};EmailImap['prototype'][_0x5634('0x11')]=function(){this[_0x5634('0x1')][_0x5634('0x23')](this['mailbox'],![],this[_0x5634('0x24')][_0x5634('0x13')](this));};EmailImap[_0x5634('0x25')]['handleOpenBox']=function(_0x24a921,_0x4c68fe){if(_0x24a921){this[_0x5634('0x15')](_0x24a921,!![]);}else{this[_0x5634('0x26')](_0x5634('0x27'),_0x4c68fe);this[_0x5634('0x28')]();}};EmailImap[_0x5634('0x25')][_0x5634('0x29')]=function(_0x1bab33){if(_0x1bab33){this[_0x5634('0x15')](_0x1bab33,!![]);}else{this[_0x5634('0x1')]['end']();}};EmailImap['prototype'][_0x5634('0x28')]=function(){this[_0x5634('0x1')]['search']([_0x5634('0x2a')],this['handleReadUnseen'][_0x5634('0x13')](this));};EmailImap[_0x5634('0x25')]['handleReadUnseen']=function(_0x46f164,_0x51f53a){if(_0x46f164){this['handleError'](_0x46f164,!![]);}else{if(_0x51f53a['length']){try{var _0x34010f=this['imap']['fetch'](_0x51f53a,{'bodies':'','markSeen':!![]});_0x34010f['on'](_0x5634('0x2b'),this[_0x5634('0x2c')][_0x5634('0x13')](this));_0x34010f[_0x5634('0xf')](_0x5634('0x14'),this['handleFetchError'][_0x5634('0x13')](this));_0x34010f[_0x5634('0xf')](_0x5634('0x12'),this[_0x5634('0x2d')]['bind'](this));}catch(_0x310342){logger[_0x5634('0x14')](_0x310342);}}else{this[_0x5634('0x1')][_0x5634('0x2e')](!![],this[_0x5634('0x29')]['bind'](this));}}};EmailImap[_0x5634('0x25')][_0x5634('0x2c')]=function(_0xe451f9,_0x1387e9){_0xe451f9['on'](_0x5634('0x2f'),this['handleMessageBody']['bind'](this));_0xe451f9['once'](_0x5634('0x30'),this[_0x5634('0x31')][_0x5634('0x13')](this));_0xe451f9[_0x5634('0xf')](_0x5634('0x12'),this[_0x5634('0x32')][_0x5634('0x13')](this));};EmailImap[_0x5634('0x25')]['handleMessageBody']=function(_0x460b4e,_0x5826c2){simpleParser(_0x460b4e,{'Iconv':Iconv},this[_0x5634('0x33')]['bind'](this));};EmailImap['prototype'][_0x5634('0x31')]=function(_0x2c4426){};EmailImap[_0x5634('0x25')]['handleMessageEnd']=function(){};EmailImap[_0x5634('0x25')][_0x5634('0x33')]=function(_0x152037,_0x109190){if(_0x152037){logger[_0x5634('0x14')](_0x152037);}else{var _0x1ee8d9=this;utils['parser'](this[_0x5634('0x34')],_0x109190,function(_0x4f22b8){_0x1ee8d9[_0x5634('0x26')](_0x5634('0xb'),_0x4f22b8);});}};EmailImap[_0x5634('0x25')][_0x5634('0x2d')]=function(){this[_0x5634('0x1')][_0x5634('0x2e')](!![],this['handleCloseBox']['bind'](this));};EmailImap['prototype']['handleFetchError']=function(_0x5a183f){this[_0x5634('0x15')](_0x5a183f);this[_0x5634('0x1')][_0x5634('0x2e')](!![],this['handleCloseBox'][_0x5634('0x13')](this));};EmailImap[_0x5634('0x25')][_0x5634('0x35')]=function(){this[_0x5634('0x26')](_0x5634('0x12'));};EmailImap[_0x5634('0x25')]['handleError']=function(_0x4fc1bd,_0x10086b){logger[_0x5634('0x14')](_0x5634('0x15'),this[_0x5634('0x34')][_0x5634('0xb')],JSON[_0x5634('0x36')](_0x4fc1bd));var _0x28a9c1='';if(_0x4fc1bd){if(_0x4fc1bd[_0x5634('0x37')]){_0x28a9c1=_0x4fc1bd[_0x5634('0x37')];}else{for(var _0x299383 in _0x4fc1bd){if(_0x4fc1bd[_0x5634('0x38')](_0x299383)){_0x28a9c1+=_[_0x5634('0x39')](_0x299383)+':\x20'+_0x4fc1bd[_0x299383]+'\x0a';}}}}if(_0x10086b){this['imap'][_0x5634('0x12')]();}else{this[_0x5634('0x26')](_0x5634('0x14'),_0x28a9c1);this[_0x5634('0x26')]('end');}};module[_0x5634('0x3a')]=EmailImap;
\ No newline at end of file
+var _0xbbc6=['connTimeout','authTimeout','isNil','service','authentication','password','host','port','tls','user','getHost','prototype','openBox','handleOpenBox','emit','box','readUnseen','handleCloseBox','search','UNSEEN','handleReadUnseen','length','fetch','message','handleFetchMessage','once','error','handleFetchError','handleFetchEnd','body','handleMessageAttributes','handleMessageEnd','handleMessageBody','handleSimpleParser','parser','closeBox','handleEnd','stringify','textCode','hasOwnProperty','upperFirst','exports','path','util','imap','lodash','randomstring','iconv','Iconv','EventEmitter','../../../config/logger','email','mailbox','account','getAccount','ready','handleReady','bind','end','handleError','connect','inherits'];(function(_0x209e21,_0x5055be){var _0x3bd214=function(_0x101782){while(--_0x101782){_0x209e21['push'](_0x209e21['shift']());}};_0x3bd214(++_0x5055be);}(_0xbbc6,0xa6));var _0x6bbc=function(_0x4fb051,_0x2c9d41){_0x4fb051=_0x4fb051-0x0;var _0x1de2f3=_0xbbc6[_0x4fb051];return _0x1de2f3;};'use strict';var fs=require('fs');var path=require(_0x6bbc('0x0'));var util=require(_0x6bbc('0x1'));var Imap=require(_0x6bbc('0x2'));var _=require(_0x6bbc('0x3'));var rs=require(_0x6bbc('0x4'));var simpleParser=require('mailparser')['simpleParser'];var Iconv=require(_0x6bbc('0x5'))[_0x6bbc('0x6')];var EventEmitter=require('events')[_0x6bbc('0x7')];var utils=require('./utils');var logger=require(_0x6bbc('0x8'))(_0x6bbc('0x9'));function EmailImap(_0x2d63ac,_0x447ef2){this[_0x6bbc('0xa')]='INBOX';this[_0x6bbc('0xb')]=this[_0x6bbc('0xc')](_0x2d63ac,_0x447ef2);this[_0x6bbc('0x2')]=new Imap(this['account']);this[_0x6bbc('0x2')]['once'](_0x6bbc('0xd'),this[_0x6bbc('0xe')][_0x6bbc('0xf')](this));this['imap']['once'](_0x6bbc('0x10'),this['handleEnd'][_0x6bbc('0xf')](this));this['imap']['on']('error',this[_0x6bbc('0x11')][_0x6bbc('0xf')](this));this['imap'][_0x6bbc('0x12')]();}util[_0x6bbc('0x13')](EmailImap,EventEmitter);EmailImap['prototype']['getAccount']=function(_0x9a7426,_0x30aed2){var _0x3b7930={'connTimeout':_0x9a7426['connTimeout']?_0x9a7426[_0x6bbc('0x14')]*0x3e8:0x2710,'authTimeout':_0x9a7426[_0x6bbc('0x15')]?_0x9a7426[_0x6bbc('0x15')]*0x3e8:0x1388};if(_[_0x6bbc('0x16')](_0x9a7426[_0x6bbc('0x17')])){if(_0x9a7426[_0x6bbc('0x18')]){_0x3b7930['user']=_0x9a7426['user'];_0x3b7930[_0x6bbc('0x19')]=_0x9a7426['password'];}_0x3b7930[_0x6bbc('0x1a')]=_0x9a7426[_0x6bbc('0x1a')];_0x3b7930[_0x6bbc('0x1b')]=_0x9a7426[_0x6bbc('0x1b')]||0x3e1;if(_0x9a7426[_0x6bbc('0x1c')]){_0x3b7930[_0x6bbc('0x1c')]=!![];}else{_0x3b7930[_0x6bbc('0x1c')]=![];_0x3b7930['autotls']='required';}}else{_0x3b7930[_0x6bbc('0x1d')]=_0x9a7426['user'];_0x3b7930['password']=_0x9a7426[_0x6bbc('0x19')];_0x3b7930[_0x6bbc('0x1a')]=utils[_0x6bbc('0x1e')](_0x9a7426[_0x6bbc('0x17')]);_0x3b7930[_0x6bbc('0x1b')]=0x3e1;_0x3b7930[_0x6bbc('0x1c')]=!![];}_0x3b7930[_0x6bbc('0x9')]=_0x30aed2||_0x9a7426[_0x6bbc('0x1d')]||'anonymous@xcally.com';return _0x3b7930;};EmailImap[_0x6bbc('0x1f')]['handleReady']=function(){this[_0x6bbc('0x2')][_0x6bbc('0x20')](this['mailbox'],![],this['handleOpenBox']['bind'](this));};EmailImap[_0x6bbc('0x1f')][_0x6bbc('0x21')]=function(_0x5b76f5,_0x203cf5){if(_0x5b76f5){this['handleError'](_0x5b76f5,!![]);}else{this[_0x6bbc('0x22')](_0x6bbc('0x23'),_0x203cf5);this[_0x6bbc('0x24')]();}};EmailImap[_0x6bbc('0x1f')][_0x6bbc('0x25')]=function(_0xb7392a){if(_0xb7392a){this['handleError'](_0xb7392a,!![]);}else{this[_0x6bbc('0x2')][_0x6bbc('0x10')]();}};EmailImap[_0x6bbc('0x1f')][_0x6bbc('0x24')]=function(){this[_0x6bbc('0x2')][_0x6bbc('0x26')]([_0x6bbc('0x27')],this[_0x6bbc('0x28')][_0x6bbc('0xf')](this));};EmailImap[_0x6bbc('0x1f')]['handleReadUnseen']=function(_0x581252,_0x3615aa){if(_0x581252){this[_0x6bbc('0x11')](_0x581252,!![]);}else{if(_0x3615aa[_0x6bbc('0x29')]){try{var _0x45a081=this['imap'][_0x6bbc('0x2a')](_0x3615aa,{'bodies':'','markSeen':!![]});_0x45a081['on'](_0x6bbc('0x2b'),this[_0x6bbc('0x2c')][_0x6bbc('0xf')](this));_0x45a081[_0x6bbc('0x2d')](_0x6bbc('0x2e'),this[_0x6bbc('0x2f')][_0x6bbc('0xf')](this));_0x45a081['once'](_0x6bbc('0x10'),this[_0x6bbc('0x30')][_0x6bbc('0xf')](this));}catch(_0x43603b){logger[_0x6bbc('0x2e')](_0x43603b);}}else{this['imap']['closeBox'](!![],this['handleCloseBox'][_0x6bbc('0xf')](this));}}};EmailImap['prototype'][_0x6bbc('0x2c')]=function(_0x641381,_0xf43bb0){_0x641381['on'](_0x6bbc('0x31'),this['handleMessageBody']['bind'](this));_0x641381[_0x6bbc('0x2d')]('attributes',this[_0x6bbc('0x32')]['bind'](this));_0x641381[_0x6bbc('0x2d')](_0x6bbc('0x10'),this[_0x6bbc('0x33')][_0x6bbc('0xf')](this));};EmailImap[_0x6bbc('0x1f')][_0x6bbc('0x34')]=function(_0x471a62,_0x4e67d7){simpleParser(_0x471a62,{'Iconv':Iconv},this[_0x6bbc('0x35')][_0x6bbc('0xf')](this));};EmailImap[_0x6bbc('0x1f')][_0x6bbc('0x32')]=function(_0x37ce7b){};EmailImap[_0x6bbc('0x1f')]['handleMessageEnd']=function(){};EmailImap['prototype'][_0x6bbc('0x35')]=function(_0x1a6e13,_0x48188d){if(_0x1a6e13){logger[_0x6bbc('0x2e')](_0x1a6e13);}else{var _0x5c3dc6=this;utils[_0x6bbc('0x36')](this[_0x6bbc('0xb')],_0x48188d,function(_0xb872f8){_0x5c3dc6[_0x6bbc('0x22')](_0x6bbc('0x9'),_0xb872f8);});}};EmailImap[_0x6bbc('0x1f')][_0x6bbc('0x30')]=function(){this[_0x6bbc('0x2')][_0x6bbc('0x37')](!![],this[_0x6bbc('0x25')][_0x6bbc('0xf')](this));};EmailImap[_0x6bbc('0x1f')][_0x6bbc('0x2f')]=function(_0x3c78d0){this['handleError'](_0x3c78d0);this[_0x6bbc('0x2')][_0x6bbc('0x37')](!![],this[_0x6bbc('0x25')][_0x6bbc('0xf')](this));};EmailImap[_0x6bbc('0x1f')][_0x6bbc('0x38')]=function(){this['emit'](_0x6bbc('0x10'));};EmailImap[_0x6bbc('0x1f')][_0x6bbc('0x11')]=function(_0x9ca82e,_0x1c2d7d){logger[_0x6bbc('0x2e')](_0x6bbc('0x11'),this[_0x6bbc('0xb')][_0x6bbc('0x9')],JSON[_0x6bbc('0x39')](_0x9ca82e));var _0x1cbdf4='';if(_0x9ca82e){if(_0x9ca82e[_0x6bbc('0x3a')]){_0x1cbdf4=_0x9ca82e['textCode'];}else{for(var _0x354af0 in _0x9ca82e){if(_0x9ca82e[_0x6bbc('0x3b')](_0x354af0)){_0x1cbdf4+=_[_0x6bbc('0x3c')](_0x354af0)+':\x20'+_0x9ca82e[_0x354af0]+'\x0a';}}}}if(_0x1c2d7d){this[_0x6bbc('0x2')][_0x6bbc('0x10')]();}else{this[_0x6bbc('0x22')](_0x6bbc('0x2e'),_0x1cbdf4);this[_0x6bbc('0x22')](_0x6bbc('0x10'));}};module[_0x6bbc('0x3d')]=EmailImap;
\ No newline at end of file
index 55c655c..929472f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfecf=['send','use','compile','toString','verify','createTransport','Not\x20verifired','nodemailer','bluebird','prototype'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xfecf,0x1d3));var _0xffec=function(_0x5749ed,_0x21dc67){_0x5749ed=_0x5749ed-0x0;var _0x1e66b1=_0xfecf[_0x5749ed];return _0x1e66b1;};'use strict';var nodemailer=require(_0xffec('0x0'));var BPromise=require(_0xffec('0x1'));var inlineBase64=require('nodemailer-plugin-inline-base64');function EmailSmtp(){}EmailSmtp[_0xffec('0x2')][_0xffec('0x3')]=function(_0x3a590a,_0x45375c){return new BPromise(function(_0x2c6cde,_0x486fc8){var _0x50d7c5=nodemailer['createTransport'](_0x3a590a);_0x50d7c5[_0xffec('0x4')](_0xffec('0x5'),inlineBase64());_0x50d7c5['sendMail'](_0x45375c,function(_0x2cd24a,_0x22cc9a){if(_0x2cd24a){_0x486fc8(_0x2cd24a[_0xffec('0x6')]());}else{_0x2c6cde(_0x22cc9a);}});});};EmailSmtp['prototype'][_0xffec('0x7')]=function(_0x40ac18){return new BPromise(function(_0x40558a,_0x2daac1){var _0x44f10f=nodemailer[_0xffec('0x8')](_0x40ac18);_0x44f10f['verify'](function(_0x1adb35,_0x575a50){if(_0x1adb35){_0x2daac1(_0x1adb35['toString']());}else{if(_0x575a50){_0x40558a(_0x575a50);}else{_0x2daac1(_0xffec('0x9'));}}});});};module['exports']=EmailSmtp;
\ No newline at end of file
+var _0x390e=['send','createTransport','compile','sendMail','toString','prototype','verify','nodemailer','bluebird','nodemailer-plugin-inline-base64'];(function(_0x3977f1,_0x172f5a){var _0x2bbabd=function(_0x6b7b6){while(--_0x6b7b6){_0x3977f1['push'](_0x3977f1['shift']());}};_0x2bbabd(++_0x172f5a);}(_0x390e,0x147));var _0xe390=function(_0x379ea8,_0xaaa8f0){_0x379ea8=_0x379ea8-0x0;var _0x2d5e66=_0x390e[_0x379ea8];return _0x2d5e66;};'use strict';var nodemailer=require(_0xe390('0x0'));var BPromise=require(_0xe390('0x1'));var inlineBase64=require(_0xe390('0x2'));function EmailSmtp(){}EmailSmtp['prototype'][_0xe390('0x3')]=function(_0x531ff8,_0x3d976a){return new BPromise(function(_0x91e06e,_0x3f637){var _0x355b23=nodemailer[_0xe390('0x4')](_0x531ff8);_0x355b23['use'](_0xe390('0x5'),inlineBase64());_0x355b23[_0xe390('0x6')](_0x3d976a,function(_0x2c86dd,_0x2f9b78){if(_0x2c86dd){_0x3f637(_0x2c86dd[_0xe390('0x7')]());}else{_0x91e06e(_0x2f9b78);}});});};EmailSmtp[_0xe390('0x8')][_0xe390('0x9')]=function(_0x4890a1){return new BPromise(function(_0x881874,_0x2abb6f){var _0x55c214=nodemailer[_0xe390('0x4')](_0x4890a1);_0x55c214[_0xe390('0x9')](function(_0x3aa471,_0x3dfb53){if(_0x3aa471){_0x2abb6f(_0x3aa471['toString']());}else{if(_0x3dfb53){_0x881874(_0x3dfb53);}else{_0x2abb6f('Not\x20verifired');}}});});};module['exports']=EmailSmtp;
\ No newline at end of file
index 2e15e0a..b5bff68 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e6e=['gmail','yahoo','imap.mail.yahoo.com','hotmail','imap-mail.outlook.com','outlook365','outlook.office365.com','127.0.0.1','lodash','moment','randomstring','path','util','node-tnef','../../../config/logger','email','address','generate','head','value','split','name','Anonymous','length','isEmpty','@xcally.com','test','html','replace','body','textAsHtml','<a\x20target=\x22_blank\x22\x20','message','originTo','includes','originCc','bcc','attachments','attachment','filename','attachment-','format','join','root','server/files/attachments/','writeFileSync','content','push','contentType','parser','from','subject','inReplyTo','date','filter','info','messageId','parseBuffer','BodyHTML','<p>Empty\x20message</p>','Attachments','Data','getHost'];(function(_0x5a99db,_0x1cece5){var _0x3aad62=function(_0x334cb7){while(--_0x334cb7){_0x5a99db['push'](_0x5a99db['shift']());}};_0x3aad62(++_0x1cece5);}(_0x4e6e,0x143));var _0xe4e6=function(_0x13b8f3,_0x442821){_0x13b8f3=_0x13b8f3-0x0;var _0x1a6d06=_0x4e6e[_0x13b8f3];return _0x1a6d06;};'use strict';var _=require(_0xe4e6('0x0'));var moment=require(_0xe4e6('0x1'));var random=require(_0xe4e6('0x2'));var fs=require('fs');var path=require(_0xe4e6('0x3'));var util=require(_0xe4e6('0x4'));var tnef=require(_0xe4e6('0x5'));var logger=require(_0xe4e6('0x6'))(_0xe4e6('0x7'));var config=require('../../../config/environment');function getAddress(_0x3740b9){var _0x357c5b=_['head'](_0x3740b9['value']);return _0x357c5b&&_0x357c5b['address']?_0x357c5b[_0xe4e6('0x8')]:'anonymous'+random[_0xe4e6('0x9')](0x6)+'@xcally.com';}function getFirstName(_0x4ac51b){var _0x5e8cb9=_[_0xe4e6('0xa')](_0x4ac51b[_0xe4e6('0xb')]);if(_0x5e8cb9&&_0x5e8cb9['name']){var _0x400410=_0x5e8cb9['name'][_0xe4e6('0xc')](/\s+/);return _0x400410['length']?_0x400410['slice'](0x0,-0x1)['join']('\x20'):_0x5e8cb9[_0xe4e6('0xd')];}return _0xe4e6('0xe');}function getLastName(_0x4ed4d9){var _0x1e12fa=_[_0xe4e6('0xa')](_0x4ed4d9[_0xe4e6('0xb')]);if(_0x1e12fa&&_0x1e12fa['name']){var _0x5eaded=_0x1e12fa[_0xe4e6('0xd')][_0xe4e6('0xc')](/\s+/);return _0x5eaded[_0xe4e6('0xf')]>0x1?_0x5eaded['pop']():'';}return'';}function getMails(_0xac1340,_0xa1d5f8){var _0x5abd6e='';for(var _0x13ae1c=0x0;_0x13ae1c<_0xa1d5f8[_0xe4e6('0xb')][_0xe4e6('0xf')];_0x13ae1c+=0x1){if(_0xa1d5f8['value'][_0x13ae1c][_0xe4e6('0x8')]!==_0xac1340){if(!_[_0xe4e6('0x10')](_0x5abd6e)){_0x5abd6e+=',';}_0x5abd6e+=_0xa1d5f8[_0xe4e6('0xb')][_0x13ae1c][_0xe4e6('0xd')]||_0xa1d5f8[_0xe4e6('0xb')][_0x13ae1c][_0xe4e6('0x8')]||'';_0x5abd6e+='\x20<';_0x5abd6e+=_0xa1d5f8[_0xe4e6('0xb')][_0x13ae1c][_0xe4e6('0x8')]?_0xa1d5f8[_0xe4e6('0xb')][_0x13ae1c][_0xe4e6('0x8')]:'anonymous'+random[_0xe4e6('0x9')](0x6)+_0xe4e6('0x11');_0x5abd6e+='>';}}return _0x5abd6e;}function parseEmail(_0x447d02,_0x190127,_0xb91450){if(_0x190127['html']){var _0x4afd38=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;while(_0x4afd38[_0xe4e6('0x12')](_0x190127[_0xe4e6('0x13')])){_0x190127[_0xe4e6('0x13')]=_0x190127['html'][_0xe4e6('0x14')](_0x4afd38,'');}_0xb91450['body']=_0x190127[_0xe4e6('0x13')];}else{_0xb91450[_0xe4e6('0x15')]=_0x190127[_0xe4e6('0x16')];}if(_0xb91450[_0xe4e6('0x15')]){_0xb91450[_0xe4e6('0x15')]=_0xb91450[_0xe4e6('0x15')][_0xe4e6('0x14')](/<a\s+/gi,_0xe4e6('0x17'));}if(_0x190127['to']){_0xb91450[_0xe4e6('0x18')][_0xe4e6('0x19')]=getMails(null,_0x190127['to']);var _0x2ccb8d=getMails(_0x447d02[_0xe4e6('0x7')],_0x190127['to']);if(!_['isEmpty'](_0x2ccb8d)){_0xb91450[_0xe4e6('0x18')]['cc']+=_0x2ccb8d;}}if(_0x190127['cc']){_0xb91450[_0xe4e6('0x18')]['originCc']=getMails(null,_0x190127['cc']);var _0x1c6e42=getMails(_0x447d02[_0xe4e6('0x7')],_0x190127['cc']);if(!_['isEmpty'](_0x1c6e42)){if(!_['isEmpty'](_0xb91450['message']['cc'])){_0xb91450['message']['cc']+=',';}_0xb91450['message']['cc']+=_0x1c6e42;}}if(!_[_0xe4e6('0x1a')](_0xb91450[_0xe4e6('0x18')]['originTo'],_0x447d02[_0xe4e6('0x7')])&&!_['includes'](_0xb91450['message'][_0xe4e6('0x1b')],_0x447d02['email'])){_0xb91450[_0xe4e6('0x18')][_0xe4e6('0x1c')]=_0x447d02[_0xe4e6('0x7')];}if(_0x190127[_0xe4e6('0x1d')]&&_0x190127[_0xe4e6('0x1d')][_0xe4e6('0xf')]){_0xb91450[_0xe4e6('0x18')]['attach']=_0x190127['attachments'][_0xe4e6('0xf')];for(var _0x4eb62a=0x0,_0x2cae18,_0x43a7a0,_0xb0ffc0;_0x4eb62a<_0x190127[_0xe4e6('0x1d')][_0xe4e6('0xf')];_0x4eb62a+=0x1){if(_0x190127[_0xe4e6('0x1d')][_0x4eb62a]['type']===_0xe4e6('0x1e')){_0xb0ffc0=_0x190127[_0xe4e6('0x1d')][_0x4eb62a][_0xe4e6('0x1f')]||_0xe4e6('0x20')+_0x4eb62a;_0x2cae18=util[_0xe4e6('0x21')]('%s-%s',Date['now'](),_0xb0ffc0);_0x43a7a0=path[_0xe4e6('0x22')](config[_0xe4e6('0x23')],_0xe4e6('0x24'),_0x2cae18);fs[_0xe4e6('0x25')](_0x43a7a0,_0x190127[_0xe4e6('0x1d')][_0x4eb62a][_0xe4e6('0x26')]);_0xb91450[_0xe4e6('0x18')][_0xe4e6('0x1d')][_0xe4e6('0x27')]({'name':_0xb0ffc0,'basename':_0x2cae18,'type':_0x190127[_0xe4e6('0x1d')][_0x4eb62a][_0xe4e6('0x28')],'filepath':_0x43a7a0});}}}return _0xb91450;}exports[_0xe4e6('0x29')]=function(_0x2bb21a,_0x292d90,_0x18dfb8){var _0xeab8d1={'from':getAddress(_0x292d90[_0xe4e6('0x2a')]),'firstName':getFirstName(_0x292d90['from']),'lastName':getLastName(_0x292d90[_0xe4e6('0x2a')]),'mapKey':_0xe4e6('0x7'),'message':{'from':getMails(_0x2bb21a[_0xe4e6('0x7')],_0x292d90[_0xe4e6('0x2a')]),'to':_0x2bb21a['email'],'cc':'','subject':_0x292d90[_0xe4e6('0x2b')]||'','messageId':_0x292d90['messageId'],'inReplyTo':_0x292d90[_0xe4e6('0x2c')],'sentAt':moment(_0x292d90[_0xe4e6('0x2d')])['format']('YYYY-MM-DD\x20HH:mm:ss'),'attach':![],'attachments':[]}};if(!_0x292d90[_0xe4e6('0x13')]&&!_0x292d90[_0xe4e6('0x16')]){var _0x3ef006=_[_0xe4e6('0x2e')](_0x292d90[_0xe4e6('0x1d')],{'contentType':'application/ms-tnef'});if(_0x3ef006[_0xe4e6('0xf')]){logger[_0xe4e6('0x2f')](util[_0xe4e6('0x21')]('Email\x20message\x20%s\x20is\x20in\x20TNEF\x20format:\x20message\x20content\x20will\x20be\x20converted\x20by\x20the\x20system',_0x292d90[_0xe4e6('0x30')]));tnef[_0xe4e6('0x31')](_['first'](_0x3ef006)[_0xe4e6('0x26')],function(_0xc1a756,_0x2180cf){if(_0x2180cf){_0x292d90[_0xe4e6('0x13')]=_0x2180cf[_0xe4e6('0x32')]||_0xe4e6('0x33');if(_0x2180cf[_0xe4e6('0x34')]){for(var _0x1fdb61=0x0;_0x1fdb61<_0x2180cf['Attachments'][_0xe4e6('0xf')];_0x1fdb61++){var _0x2d2fa9=_0x2180cf[_0xe4e6('0x34')][_0x1fdb61];_0xeab8d1['message']['attachments'][_0xe4e6('0x27')]({'filename':_0x2d2fa9['Title'],'content':new Buffer(_0x2d2fa9[_0xe4e6('0x35')])});}}}_0x18dfb8(parseEmail(_0x2bb21a,_0x292d90,_0xeab8d1));});}else{_0x292d90['html']=_0xe4e6('0x33');_0x18dfb8(parseEmail(_0x2bb21a,_0x292d90,_0xeab8d1));}}else{_0x18dfb8(parseEmail(_0x2bb21a,_0x292d90,_0xeab8d1));}};exports[_0xe4e6('0x36')]=function(_0x13397b){switch(_0x13397b){case _0xe4e6('0x37'):return'imap.gmail.com';case _0xe4e6('0x38'):return _0xe4e6('0x39');case _0xe4e6('0x3a'):return _0xe4e6('0x3b');case _0xe4e6('0x3c'):return _0xe4e6('0x3d');}return _0xe4e6('0x3e');};
\ No newline at end of file
+var _0xa8f3=['../../../config/environment','head','value','address','anonymous','@xcally.com','name','split','length','join','Anonymous','isEmpty','generate','html','replace','body','textAsHtml','message','originCc','includes','originTo','bcc','attachments','attach','type','attachment','format','%s-%s','now','root','server/files/attachments/','writeFileSync','content','push','contentType','from','subject','messageId','inReplyTo','date','YYYY-MM-DD\x20HH:mm:ss','filter','application/ms-tnef','info','Email\x20message\x20%s\x20is\x20in\x20TNEF\x20format:\x20message\x20content\x20will\x20be\x20converted\x20by\x20the\x20system','parseBuffer','first','BodyHTML','<p>Empty\x20message</p>','Attachments','getHost','gmail','imap.gmail.com','imap.mail.yahoo.com','hotmail','imap-mail.outlook.com','outlook365','outlook.office365.com','127.0.0.1','lodash','moment','randomstring','path','util','node-tnef','../../../config/logger','email'];(function(_0x1a9b94,_0x4d763e){var _0x379102=function(_0x1d9e7c){while(--_0x1d9e7c){_0x1a9b94['push'](_0x1a9b94['shift']());}};_0x379102(++_0x4d763e);}(_0xa8f3,0xc1));var _0x3a8f=function(_0x436bb4,_0x582e5f){_0x436bb4=_0x436bb4-0x0;var _0x43ceaf=_0xa8f3[_0x436bb4];return _0x43ceaf;};'use strict';var _=require(_0x3a8f('0x0'));var moment=require(_0x3a8f('0x1'));var random=require(_0x3a8f('0x2'));var fs=require('fs');var path=require(_0x3a8f('0x3'));var util=require(_0x3a8f('0x4'));var tnef=require(_0x3a8f('0x5'));var logger=require(_0x3a8f('0x6'))(_0x3a8f('0x7'));var config=require(_0x3a8f('0x8'));function getAddress(_0x341a8f){var _0x714540=_[_0x3a8f('0x9')](_0x341a8f[_0x3a8f('0xa')]);return _0x714540&&_0x714540[_0x3a8f('0xb')]?_0x714540[_0x3a8f('0xb')]:_0x3a8f('0xc')+random['generate'](0x6)+_0x3a8f('0xd');}function getFirstName(_0x649b72){var _0xca2281=_[_0x3a8f('0x9')](_0x649b72[_0x3a8f('0xa')]);if(_0xca2281&&_0xca2281[_0x3a8f('0xe')]){var _0x2f6fb9=_0xca2281[_0x3a8f('0xe')][_0x3a8f('0xf')](/\s+/);return _0x2f6fb9[_0x3a8f('0x10')]?_0x2f6fb9['slice'](0x0,-0x1)[_0x3a8f('0x11')]('\x20'):_0xca2281['name'];}return _0x3a8f('0x12');}function getLastName(_0x4b2d34){var _0x1b9d16=_[_0x3a8f('0x9')](_0x4b2d34[_0x3a8f('0xa')]);if(_0x1b9d16&&_0x1b9d16[_0x3a8f('0xe')]){var _0x5dd9b6=_0x1b9d16[_0x3a8f('0xe')][_0x3a8f('0xf')](/\s+/);return _0x5dd9b6[_0x3a8f('0x10')]>0x1?_0x5dd9b6['pop']():'';}return'';}function getMails(_0x4eb7e0,_0x4104b4){var _0x9f0413='';for(var _0x3b5d1c=0x0;_0x3b5d1c<_0x4104b4[_0x3a8f('0xa')][_0x3a8f('0x10')];_0x3b5d1c+=0x1){if(_0x4104b4[_0x3a8f('0xa')][_0x3b5d1c][_0x3a8f('0xb')]!==_0x4eb7e0){if(!_[_0x3a8f('0x13')](_0x9f0413)){_0x9f0413+=',';}_0x9f0413+=_0x4104b4[_0x3a8f('0xa')][_0x3b5d1c][_0x3a8f('0xe')]||_0x4104b4[_0x3a8f('0xa')][_0x3b5d1c][_0x3a8f('0xb')]||'';_0x9f0413+='\x20<';_0x9f0413+=_0x4104b4[_0x3a8f('0xa')][_0x3b5d1c][_0x3a8f('0xb')]?_0x4104b4[_0x3a8f('0xa')][_0x3b5d1c][_0x3a8f('0xb')]:_0x3a8f('0xc')+random[_0x3a8f('0x14')](0x6)+_0x3a8f('0xd');_0x9f0413+='>';}}return _0x9f0413;}function parseEmail(_0x22a7e8,_0x320a3d,_0x123aca){if(_0x320a3d[_0x3a8f('0x15')]){var _0x42e710=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;while(_0x42e710['test'](_0x320a3d[_0x3a8f('0x15')])){_0x320a3d[_0x3a8f('0x15')]=_0x320a3d['html'][_0x3a8f('0x16')](_0x42e710,'');}_0x123aca[_0x3a8f('0x17')]=_0x320a3d[_0x3a8f('0x15')];}else{_0x123aca[_0x3a8f('0x17')]=_0x320a3d[_0x3a8f('0x18')];}if(_0x123aca[_0x3a8f('0x17')]){_0x123aca[_0x3a8f('0x17')]=_0x123aca[_0x3a8f('0x17')]['replace'](/<a\s+/gi,'<a\x20target=\x22_blank\x22\x20');}if(_0x320a3d['to']){_0x123aca['message']['originTo']=getMails(null,_0x320a3d['to']);var _0x396b15=getMails(_0x22a7e8[_0x3a8f('0x7')],_0x320a3d['to']);if(!_['isEmpty'](_0x396b15)){_0x123aca[_0x3a8f('0x19')]['cc']+=_0x396b15;}}if(_0x320a3d['cc']){_0x123aca[_0x3a8f('0x19')][_0x3a8f('0x1a')]=getMails(null,_0x320a3d['cc']);var _0xa90b53=getMails(_0x22a7e8[_0x3a8f('0x7')],_0x320a3d['cc']);if(!_[_0x3a8f('0x13')](_0xa90b53)){if(!_[_0x3a8f('0x13')](_0x123aca[_0x3a8f('0x19')]['cc'])){_0x123aca[_0x3a8f('0x19')]['cc']+=',';}_0x123aca['message']['cc']+=_0xa90b53;}}if(!_[_0x3a8f('0x1b')](_0x123aca[_0x3a8f('0x19')][_0x3a8f('0x1c')],_0x22a7e8[_0x3a8f('0x7')])&&!_[_0x3a8f('0x1b')](_0x123aca[_0x3a8f('0x19')]['originCc'],_0x22a7e8[_0x3a8f('0x7')])){_0x123aca[_0x3a8f('0x19')][_0x3a8f('0x1d')]=_0x22a7e8[_0x3a8f('0x7')];}if(_0x320a3d[_0x3a8f('0x1e')]&&_0x320a3d['attachments']['length']){_0x123aca[_0x3a8f('0x19')][_0x3a8f('0x1f')]=_0x320a3d[_0x3a8f('0x1e')][_0x3a8f('0x10')];for(var _0x5975e7=0x0,_0x13a9d4,_0x3c9b33,_0x2925bc;_0x5975e7<_0x320a3d['attachments']['length'];_0x5975e7+=0x1){if(_0x320a3d[_0x3a8f('0x1e')][_0x5975e7][_0x3a8f('0x20')]===_0x3a8f('0x21')){_0x2925bc=_0x320a3d[_0x3a8f('0x1e')][_0x5975e7]['filename']||'attachment-'+_0x5975e7;_0x13a9d4=util[_0x3a8f('0x22')](_0x3a8f('0x23'),Date[_0x3a8f('0x24')](),_0x2925bc);_0x3c9b33=path[_0x3a8f('0x11')](config[_0x3a8f('0x25')],_0x3a8f('0x26'),_0x13a9d4);fs[_0x3a8f('0x27')](_0x3c9b33,_0x320a3d[_0x3a8f('0x1e')][_0x5975e7][_0x3a8f('0x28')]);_0x123aca[_0x3a8f('0x19')]['attachments'][_0x3a8f('0x29')]({'name':_0x2925bc,'basename':_0x13a9d4,'type':_0x320a3d['attachments'][_0x5975e7][_0x3a8f('0x2a')],'filepath':_0x3c9b33});}}}return _0x123aca;}exports['parser']=function(_0x3606db,_0x3becdd,_0x26d10e){var _0xa61ecb={'from':getAddress(_0x3becdd['from']),'firstName':getFirstName(_0x3becdd[_0x3a8f('0x2b')]),'lastName':getLastName(_0x3becdd[_0x3a8f('0x2b')]),'mapKey':_0x3a8f('0x7'),'message':{'from':getMails(_0x3606db['email'],_0x3becdd[_0x3a8f('0x2b')]),'to':_0x3606db[_0x3a8f('0x7')],'cc':'','subject':_0x3becdd[_0x3a8f('0x2c')]||'','messageId':_0x3becdd[_0x3a8f('0x2d')],'inReplyTo':_0x3becdd[_0x3a8f('0x2e')],'sentAt':moment(_0x3becdd[_0x3a8f('0x2f')])[_0x3a8f('0x22')](_0x3a8f('0x30')),'attach':![],'attachments':[]}};if(!_0x3becdd[_0x3a8f('0x15')]&&!_0x3becdd['textAsHtml']){var _0x3a596a=_[_0x3a8f('0x31')](_0x3becdd[_0x3a8f('0x1e')],{'contentType':_0x3a8f('0x32')});if(_0x3a596a[_0x3a8f('0x10')]){logger[_0x3a8f('0x33')](util[_0x3a8f('0x22')](_0x3a8f('0x34'),_0x3becdd[_0x3a8f('0x2d')]));tnef[_0x3a8f('0x35')](_[_0x3a8f('0x36')](_0x3a596a)['content'],function(_0x362fc9,_0x1611bf){if(_0x1611bf){_0x3becdd[_0x3a8f('0x15')]=_0x1611bf[_0x3a8f('0x37')]||_0x3a8f('0x38');if(_0x1611bf[_0x3a8f('0x39')]){for(var _0x18e727=0x0;_0x18e727<_0x1611bf[_0x3a8f('0x39')][_0x3a8f('0x10')];_0x18e727++){var _0x534f24=_0x1611bf[_0x3a8f('0x39')][_0x18e727];_0xa61ecb[_0x3a8f('0x19')]['attachments']['push']({'filename':_0x534f24['Title'],'content':new Buffer(_0x534f24['Data'])});}}}_0x26d10e(parseEmail(_0x3606db,_0x3becdd,_0xa61ecb));});}else{_0x3becdd[_0x3a8f('0x15')]=_0x3a8f('0x38');_0x26d10e(parseEmail(_0x3606db,_0x3becdd,_0xa61ecb));}}else{_0x26d10e(parseEmail(_0x3606db,_0x3becdd,_0xa61ecb));}};exports[_0x3a8f('0x3a')]=function(_0x473c88){switch(_0x473c88){case _0x3a8f('0x3b'):return _0x3a8f('0x3c');case'yahoo':return _0x3a8f('0x3d');case _0x3a8f('0x3e'):return _0x3a8f('0x3f');case _0x3a8f('0x40'):return _0x3a8f('0x41');}return _0x3a8f('0x42');};
\ No newline at end of file
index 612de55..e0fccaa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc6b1=['Imap','Smtp','lodash','name','Service','key','active'];(function(_0x1ea93f,_0x14ba3b){var _0x55da62=function(_0x5458de){while(--_0x5458de){_0x1ea93f['push'](_0x1ea93f['shift']());}};_0x55da62(++_0x14ba3b);}(_0xc6b1,0xf7));var _0x1c6b=function(_0x2bbe79,_0x1608fe){_0x2bbe79=_0x2bbe79-0x0;var _0x223d02=_0xc6b1[_0x2bbe79];return _0x223d02;};'use strict';var _=require(_0x1c6b('0x0'));function MailAccount(_0x21d10d){this['id']=_0x21d10d['id']||0x0;this[_0x1c6b('0x1')]=_0x21d10d[_0x1c6b('0x1')]||_0x1c6b('0x2');this['key']=_0x21d10d[_0x1c6b('0x3')]||'SERV';this[_0x1c6b('0x4')]=_0x21d10d[_0x1c6b('0x4')]||![];this[_0x1c6b('0x5')]=_0x21d10d[_0x1c6b('0x5')]||[];this[_0x1c6b('0x6')]=_0x21d10d[_0x1c6b('0x6')]||[];}module['exports']=MailAccount;
\ No newline at end of file
+var _0xf5e3=['active','Imap','Smtp','exports','name','Service','key','SERV'];(function(_0x229428,_0x2f23d7){var _0x162ac9=function(_0x5450b1){while(--_0x5450b1){_0x229428['push'](_0x229428['shift']());}};_0x162ac9(++_0x2f23d7);}(_0xf5e3,0xe4));var _0x3f5e=function(_0x21aec3,_0x5c97e9){_0x21aec3=_0x21aec3-0x0;var _0x288bbc=_0xf5e3[_0x21aec3];return _0x288bbc;};'use strict';var _=require('lodash');function MailAccount(_0x4d1dc0){this['id']=_0x4d1dc0['id']||0x0;this[_0x3f5e('0x0')]=_0x4d1dc0['name']||_0x3f5e('0x1');this[_0x3f5e('0x2')]=_0x4d1dc0[_0x3f5e('0x2')]||_0x3f5e('0x3');this[_0x3f5e('0x4')]=_0x4d1dc0[_0x3f5e('0x4')]||![];this[_0x3f5e('0x5')]=_0x4d1dc0[_0x3f5e('0x5')]||[];this[_0x3f5e('0x6')]=_0x4d1dc0[_0x3f5e('0x6')]||[];}module[_0x3f5e('0x7')]=MailAccount;
\ No newline at end of file
index a4e55ab..a5decfe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x955f=['prototype','mergeFromDatabase','initMailAccounts','length','merge','lodash','../model/mailAccount','mailAccounts','hasOwnProperty'];(function(_0x351d43,_0x26194b){var _0x3f4628=function(_0x3ede4c){while(--_0x3ede4c){_0x351d43['push'](_0x351d43['shift']());}};_0x3f4628(++_0x26194b);}(_0x955f,0x1eb));var _0xf955=function(_0x3668ff,_0x4107f5){_0x3668ff=_0x3668ff-0x0;var _0x2958f1=_0x955f[_0x3668ff];return _0x2958f1;};'use strict';var _=require(_0xf955('0x0'));var MailAccount=require(_0xf955('0x1'));var Realtime=function(){this[_0xf955('0x2')]={};};function freeIsNotKey(_0x382225,_0x2834f7,_0x585f6e){var _0xd75c8f=_['mapKeys'](_0x382225,function(_0x5d0c95,_0x1db0dd){return _0x5d0c95[_0x585f6e];});for(var _0x5a20bc in _0x2834f7){if(_0x2834f7[_0xf955('0x3')](_0x5a20bc)){if(!_0xd75c8f[_0x5a20bc]){delete _0x2834f7[_0x5a20bc];}}}}Realtime[_0xf955('0x4')][_0xf955('0x5')]=function(_0x59d5b3,_0x18432f){for(var _0x20c096 in _0x18432f){if(_0x59d5b3['hasOwnProperty'](_0x20c096)){_0x59d5b3[_0x20c096]=_0x18432f[_0x20c096];}}};Realtime[_0xf955('0x4')][_0xf955('0x6')]=function(){var _0x168ffb=this;return function(_0x38b190){if(_0x38b190){freeIsNotKey(_0x38b190,_0x168ffb[_0xf955('0x2')],'id');for(var _0x421e4a=0x0,_0x186719={},_0x4d213a={};_0x421e4a<_0x38b190[_0xf955('0x7')];_0x421e4a+=0x1){_0x186719=_0x38b190[_0x421e4a];if(_['isUndefined'](_0x168ffb[_0xf955('0x2')][_0x186719['id']])){_0x168ffb[_0xf955('0x2')][_0x186719['id']]=new MailAccount(_0x186719);}else{_[_0xf955('0x8')](_0x168ffb['mailAccounts'][_0x186719['id']],_0x186719);}}}return _0x168ffb[_0xf955('0x2')];};};module['exports']=Realtime;
\ No newline at end of file
+var _0x32b6=['mailAccounts','merge','exports','lodash','../model/mailAccount','mapKeys','hasOwnProperty','prototype','mergeFromDatabase','initMailAccounts','isUndefined'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x32b6,0x1d1));var _0x632b=function(_0x251b8f,_0x45c286){_0x251b8f=_0x251b8f-0x0;var _0x26232d=_0x32b6[_0x251b8f];return _0x26232d;};'use strict';var _=require(_0x632b('0x0'));var MailAccount=require(_0x632b('0x1'));var Realtime=function(){this['mailAccounts']={};};function freeIsNotKey(_0x1f0635,_0x1d100a,_0x51c210){var _0x5ad871=_[_0x632b('0x2')](_0x1f0635,function(_0x3435e8,_0x3ba3a7){return _0x3435e8[_0x51c210];});for(var _0x3a0e0e in _0x1d100a){if(_0x1d100a[_0x632b('0x3')](_0x3a0e0e)){if(!_0x5ad871[_0x3a0e0e]){delete _0x1d100a[_0x3a0e0e];}}}}Realtime[_0x632b('0x4')][_0x632b('0x5')]=function(_0x10458a,_0x3bbf43){for(var _0x43d6c7 in _0x3bbf43){if(_0x10458a['hasOwnProperty'](_0x43d6c7)){_0x10458a[_0x43d6c7]=_0x3bbf43[_0x43d6c7];}}};Realtime[_0x632b('0x4')][_0x632b('0x6')]=function(){var _0x3e6062=this;return function(_0x174201){if(_0x174201){freeIsNotKey(_0x174201,_0x3e6062['mailAccounts'],'id');for(var _0x5904e8=0x0,_0x56e7b6={},_0x3ce569={};_0x5904e8<_0x174201['length'];_0x5904e8+=0x1){_0x56e7b6=_0x174201[_0x5904e8];if(_[_0x632b('0x7')](_0x3e6062[_0x632b('0x8')][_0x56e7b6['id']])){_0x3e6062[_0x632b('0x8')][_0x56e7b6['id']]=new MailAccount(_0x56e7b6);}else{_[_0x632b('0x9')](_0x3e6062[_0x632b('0x8')][_0x56e7b6['id']],_0x56e7b6);}}}return _0x3e6062[_0x632b('0x8')];};};module[_0x632b('0xa')]=Realtime;
\ No newline at end of file
index 723b300..5d62be5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x760b=['key','ListId','TemplateId','MailServerIn','Imap','Smtp','getMailAccount','notify','NotifyMailAccount','getMailAccounts','Request','GetMailAccount','name','active'];(function(_0x1ebe90,_0x5d29fc){var _0x447c82=function(_0x1c2646){while(--_0x1c2646){_0x1ebe90['push'](_0x1ebe90['shift']());}};_0x447c82(++_0x5d29fc);}(_0x760b,0x95));var _0xb760=function(_0x3f3d45,_0x22a800){_0x3f3d45=_0x3f3d45-0x0;var _0x3b8f7d=_0x760b[_0x3f3d45];return _0x3b8f7d;};'use strict';var client=require('../client');exports[_0xb760('0x0')]=function(){return function(){return client[_0xb760('0x1')](_0xb760('0x2'),{'options':{'attributes':['id',_0xb760('0x3'),'service','email',_0xb760('0x4'),_0xb760('0x5'),_0xb760('0x6'),_0xb760('0x7')],'raw':![],'include':[{'model':_0xb760('0x8'),'as':_0xb760('0x9')},{'model':'MailServerOut','as':_0xb760('0xa')}]},'log':_0xb760('0xb')});};};exports[_0xb760('0xc')]=function(_0xb100aa,_0x50b215){return client[_0xb760('0x1')](_0xb760('0xd'),{'account':{'id':_0xb100aa},'body':_0x50b215,'log':_0xb760('0xd')});};
\ No newline at end of file
+var _0x3372=['getMailAccounts','GetMailAccount','name','email','key','ListId','Imap','MailServerOut','Smtp','getMailAccount','notify','Request','NotifyMailAccount','../client'];(function(_0x12bcf7,_0xc11103){var _0x2825a=function(_0x4452ba){while(--_0x4452ba){_0x12bcf7['push'](_0x12bcf7['shift']());}};_0x2825a(++_0xc11103);}(_0x3372,0x125));var _0x2337=function(_0x79ee9e,_0x2af75b){_0x79ee9e=_0x79ee9e-0x0;var _0x33f608=_0x3372[_0x79ee9e];return _0x33f608;};'use strict';var client=require(_0x2337('0x0'));exports[_0x2337('0x1')]=function(){return function(){return client['Request'](_0x2337('0x2'),{'options':{'attributes':['id',_0x2337('0x3'),'service',_0x2337('0x4'),'active',_0x2337('0x5'),_0x2337('0x6'),'TemplateId'],'raw':![],'include':[{'model':'MailServerIn','as':_0x2337('0x7')},{'model':_0x2337('0x8'),'as':_0x2337('0x9')}]},'log':_0x2337('0xa')});};};exports[_0x2337('0xb')]=function(_0x535e70,_0x93cb16){return client[_0x2337('0xc')](_0x2337('0xd'),{'account':{'id':_0x535e70},'body':_0x93cb16,'log':'NotifyMailAccount'});};
\ No newline at end of file
index 7abaeae..2e3839c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x80ed=['../../../config/logger','email','sendMail','account','message','then','catch','error','verifySmtp','Verified','values','mailAccounts','length','Imap','password','Smtp','pass','server','http','stringify','listen','log','Email\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','jayson/promise','lodash'];(function(_0x4f6002,_0x25ebf0){var _0x43509c=function(_0x5e94d8){while(--_0x5e94d8){_0x4f6002['push'](_0x4f6002['shift']());}};_0x43509c(++_0x25ebf0);}(_0x80ed,0x11c));var _0xd80e=function(_0x592771,_0x1d565f){_0x592771=_0x592771-0x0;var _0x24ce85=_0x80ed[_0x592771];return _0x24ce85;};'use strict';var jayson=require(_0xd80e('0x0'));var BPromise=require('bluebird');var _=require(_0xd80e('0x1'));var logger=require(_0xd80e('0x2'))(_0xd80e('0x3'));exports['listen']=function(_0x47617b,_0x46876f){return new BPromise(function(_0x2b742b,_0x3413d4){var _0x5ae6c6={'SendMail':function(_0x26e6ff){var _0x2b4742=this;return new Promise(function(_0x252fec,_0x51c361){_0x46876f[_0xd80e('0x4')](_0x26e6ff[_0xd80e('0x5')],_0x26e6ff[_0xd80e('0x6')])[_0xd80e('0x7')](function(_0x46afc4){_0x252fec({'code':0xc8,'message':_0x46afc4});})[_0xd80e('0x8')](function(_0x3063ff){_0x51c361(_0x2b4742[_0xd80e('0x9')](0x1f4,_0x3063ff));});});},'VerifySmtp':function(_0x68625){var _0x7f93b4=this;return new Promise(function(_0x4eee08,_0x450b44){_0x46876f[_0xd80e('0xa')](_0x68625[_0xd80e('0x5')])[_0xd80e('0x7')](function(_0x1d999d){_0x4eee08({'code':0xc8,'message':_0xd80e('0xb')});})[_0xd80e('0x8')](function(_0x118f53){_0x450b44(_0x7f93b4[_0xd80e('0x9')](0x1f4,_0x118f53));});});},'MailAccounts':function(_0x4fb01c){return new Promise(function(_0x5691a1,_0x5eb3b2){var _0x57fefb=_[_0xd80e('0xc')](_0x47617b[_0xd80e('0xd')]);for(var _0x3096ae=0x0;_0x3096ae<_0x57fefb[_0xd80e('0xe')];_0x3096ae+=0x1){if(_0x57fefb[_0x3096ae][_0xd80e('0xf')]&&_0x57fefb[_0x3096ae]['Imap'][_0xd80e('0x10')]){delete _0x57fefb[_0x3096ae][_0xd80e('0xf')][_0xd80e('0x10')];}if(_0x57fefb[_0x3096ae][_0xd80e('0x11')]&&_0x57fefb[_0x3096ae][_0xd80e('0x11')][_0xd80e('0x12')]){delete _0x57fefb[_0x3096ae][_0xd80e('0x11')][_0xd80e('0x12')];}}_0x5691a1({'count':_0x57fefb['length'],'rows':_0x57fefb});});}};var _0x21ceec=jayson[_0xd80e('0x13')](_0x5ae6c6)[_0xd80e('0x14')]();_0x21ceec['on'](_0xd80e('0x9'),function(_0x593af6){logger[_0xd80e('0x9')](JSON[_0xd80e('0x15')](_0x593af6));return _0x3413d4(_0x593af6);});_0x21ceec[_0xd80e('0x16')](0x232b,'127.0.0.1',function(){console[_0xd80e('0x17')](_0xd80e('0x18'),0x232b);return _0x2b742b(_0xd80e('0x19')+0x232b);});});};
\ No newline at end of file
+var _0x23a3=['RPC\x20listening\x20on\x20port:','../../../config/logger','listen','sendMail','account','then','catch','error','verifySmtp','Verified','values','length','Imap','password','Smtp','pass','server','http','log'];(function(_0x2496d4,_0x39c366){var _0x1eab1c=function(_0x2cd45e){while(--_0x2cd45e){_0x2496d4['push'](_0x2496d4['shift']());}};_0x1eab1c(++_0x39c366);}(_0x23a3,0x131));var _0x323a=function(_0x55f2c7,_0x3765cb){_0x55f2c7=_0x55f2c7-0x0;var _0x2723e0=_0x23a3[_0x55f2c7];return _0x2723e0;};'use strict';var jayson=require('jayson/promise');var BPromise=require('bluebird');var _=require('lodash');var logger=require(_0x323a('0x0'))('email');exports[_0x323a('0x1')]=function(_0x1bec8d,_0x122b97){return new BPromise(function(_0x250485,_0x46030e){var _0x180066={'SendMail':function(_0x42593b){var _0x3c1648=this;return new Promise(function(_0x14a418,_0x50ad5a){_0x122b97[_0x323a('0x2')](_0x42593b[_0x323a('0x3')],_0x42593b['message'])[_0x323a('0x4')](function(_0x1071c6){_0x14a418({'code':0xc8,'message':_0x1071c6});})[_0x323a('0x5')](function(_0x4a74bd){_0x50ad5a(_0x3c1648[_0x323a('0x6')](0x1f4,_0x4a74bd));});});},'VerifySmtp':function(_0x11f2e5){var _0xbdb43f=this;return new Promise(function(_0x3e0e0b,_0x1b3d13){_0x122b97[_0x323a('0x7')](_0x11f2e5[_0x323a('0x3')])[_0x323a('0x4')](function(_0x1bc768){_0x3e0e0b({'code':0xc8,'message':_0x323a('0x8')});})[_0x323a('0x5')](function(_0x33d226){_0x1b3d13(_0xbdb43f[_0x323a('0x6')](0x1f4,_0x33d226));});});},'MailAccounts':function(_0x1ae315){return new Promise(function(_0x5c9b94,_0x1f9ae7){var _0x4831bc=_[_0x323a('0x9')](_0x1bec8d['mailAccounts']);for(var _0x5f3922=0x0;_0x5f3922<_0x4831bc[_0x323a('0xa')];_0x5f3922+=0x1){if(_0x4831bc[_0x5f3922]['Imap']&&_0x4831bc[_0x5f3922][_0x323a('0xb')]['password']){delete _0x4831bc[_0x5f3922][_0x323a('0xb')][_0x323a('0xc')];}if(_0x4831bc[_0x5f3922]['Smtp']&&_0x4831bc[_0x5f3922][_0x323a('0xd')][_0x323a('0xe')]){delete _0x4831bc[_0x5f3922]['Smtp']['pass'];}}_0x5c9b94({'count':_0x4831bc[_0x323a('0xa')],'rows':_0x4831bc});});}};var _0x221ae4=jayson[_0x323a('0xf')](_0x180066)[_0x323a('0x10')]();_0x221ae4['on'](_0x323a('0x6'),function(_0x2cad9b){logger['error'](JSON['stringify'](_0x2cad9b));return _0x46030e(_0x2cad9b);});_0x221ae4['listen'](0x232b,'127.0.0.1',function(){console[_0x323a('0x11')]('Email\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!',0x232b);return _0x250485(_0x323a('0x12')+0x232b);});});};
\ No newline at end of file
index 7d37c9e..92817f4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9b67=['listening','log','Express\x20server\x20listening\x20on\x20port\x20%d!','exports','lodash','http','express','sticky-session','ioredis','createServer','timeout','socket.io','websocket','polling','redis','defaults','localhost','socket.io-redis','../../config/triggers','default','../../config/express','../../routes'];(function(_0xb0e3e1,_0x460f49){var _0x1caba3=function(_0x406e8e){while(--_0x406e8e){_0xb0e3e1['push'](_0xb0e3e1['shift']());}};_0x1caba3(++_0x460f49);}(_0x9b67,0xf6));var _0x79b6=function(_0x564a61,_0x5bca31){_0x564a61=_0x564a61-0x0;var _0x99a08e=_0x9b67[_0x564a61];return _0x99a08e;};'use strict';var _=require(_0x79b6('0x0'));var http=require(_0x79b6('0x1'));var express=require(_0x79b6('0x2'));var sticky=require(_0x79b6('0x3'));var Redis=require(_0x79b6('0x4'));var config=require('../../config/environment');var app=express();var server=http[_0x79b6('0x5')](app);server[_0x79b6('0x6')]=0xdbba0;if(sticky['listen'](server,config['port'])){var socketio=require(_0x79b6('0x7'))(server,{'transports':[_0x79b6('0x8'),_0x79b6('0x9')]});config[_0x79b6('0xa')]=_[_0x79b6('0xb')](config[_0x79b6('0xa')],{'host':_0x79b6('0xc'),'port':0x18eb});socketio['adapter'](require(_0x79b6('0xd'))({'pubClient':new Redis(config[_0x79b6('0xa')]),'subClient':new Redis(config[_0x79b6('0xa')])}));require(_0x79b6('0xe'))[_0x79b6('0xf')]();require('../../config/socketio')[_0x79b6('0xf')](socketio);require(_0x79b6('0x10'))[_0x79b6('0xf')](app);require(_0x79b6('0x11'))['default'](app);}else{server['once'](_0x79b6('0x12'),function(){console[_0x79b6('0x13')](_0x79b6('0x14'),config['port']);});}exports=module[_0x79b6('0x15')]=app;
\ No newline at end of file
+var _0x5636=['socket.io','websocket','polling','redis','defaults','localhost','adapter','socket.io-redis','../../config/triggers','default','../../config/express','once','listening','log','Express\x20server\x20listening\x20on\x20port\x20%d!','exports','lodash','http','../../config/environment','createServer','timeout','port'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0x5636,0x102));var _0x6563=function(_0x14daf1,_0x1ae9e9){_0x14daf1=_0x14daf1-0x0;var _0x52d8ed=_0x5636[_0x14daf1];return _0x52d8ed;};'use strict';var _=require(_0x6563('0x0'));var http=require(_0x6563('0x1'));var express=require('express');var sticky=require('sticky-session');var Redis=require('ioredis');var config=require(_0x6563('0x2'));var app=express();var server=http[_0x6563('0x3')](app);server[_0x6563('0x4')]=0xdbba0;if(sticky['listen'](server,config[_0x6563('0x5')])){var socketio=require(_0x6563('0x6'))(server,{'transports':[_0x6563('0x7'),_0x6563('0x8')]});config[_0x6563('0x9')]=_[_0x6563('0xa')](config[_0x6563('0x9')],{'host':_0x6563('0xb'),'port':0x18eb});socketio[_0x6563('0xc')](require(_0x6563('0xd'))({'pubClient':new Redis(config[_0x6563('0x9')]),'subClient':new Redis(config[_0x6563('0x9')])}));require(_0x6563('0xe'))['default']();require('../../config/socketio')[_0x6563('0xf')](socketio);require(_0x6563('0x10'))['default'](app);require('../../routes')['default'](app);}else{server[_0x6563('0x11')](_0x6563('0x12'),function(){console[_0x6563('0x13')](_0x6563('0x14'),config[_0x6563('0x5')]);});}exports=module[_0x6563('0x15')]=app;
\ No newline at end of file
index dc4827c..8673016 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdf70=['rpc','message','result','exports','jayson/promise','bluebird','../../config/logger','client','http','then','debug','routing','error'];(function(_0x487c5f,_0x541657){var _0x11fe2c=function(_0x58b311){while(--_0x58b311){_0x487c5f['push'](_0x487c5f['shift']());}};_0x11fe2c(++_0x541657);}(_0xdf70,0x86));var _0x0df7=function(_0x4fbdd5,_0x4a7e9f){_0x4fbdd5=_0x4fbdd5-0x0;var _0x3eeb76=_0xdf70[_0x4fbdd5];return _0x3eeb76;};'use strict';var jayson=require(_0x0df7('0x0'));var BPromise=require(_0x0df7('0x1'));var logger=require(_0x0df7('0x2'))('routing');var client=jayson[_0x0df7('0x3')][_0x0df7('0x4')]({'port':0x2329});client['Request']=function(_0x2b074b,_0x4ae128){return new BPromise(function(_0x278b96,_0x2f3c43){return client['request'](_0x2b074b,_0x4ae128)[_0x0df7('0x5')](function(_0x2521b6){logger[_0x0df7('0x6')]('rpc',_0x0df7('0x7'),_0x2b074b,_0x4ae128,_0x2521b6);if(_0x2521b6[_0x0df7('0x8')]){logger[_0x0df7('0x8')](_0x0df7('0x9'),_0x0df7('0x7'),_0x2b074b,_0x2521b6[_0x0df7('0x8')]['message'],_0x4ae128);return _0x2f3c43(_0x2521b6[_0x0df7('0x8')][_0x0df7('0xa')]);}else{return _0x278b96(_0x2521b6[_0x0df7('0xb')]);}})['catch'](function(_0x26025e){logger[_0x0df7('0x8')](_0x0df7('0x9'),'routing',_0x2b074b,_0x26025e,_0x4ae128);return _0x2f3c43(_0x26025e);});});};module[_0x0df7('0xc')]=client;
\ No newline at end of file
+var _0x56e7=['rpc','error','routing','message','result','catch','bluebird','../../config/logger','client','http','Request','then','debug'];(function(_0xce82e,_0x1a4b6c){var _0x2d92ff=function(_0xe7ee05){while(--_0xe7ee05){_0xce82e['push'](_0xce82e['shift']());}};_0x2d92ff(++_0x1a4b6c);}(_0x56e7,0x7b));var _0x756e=function(_0x27efa4,_0x397801){_0x27efa4=_0x27efa4-0x0;var _0xb50a8a=_0x56e7[_0x27efa4];return _0xb50a8a;};'use strict';var jayson=require('jayson/promise');var BPromise=require(_0x756e('0x0'));var logger=require(_0x756e('0x1'))('routing');var client=jayson[_0x756e('0x2')][_0x756e('0x3')]({'port':0x2329});client[_0x756e('0x4')]=function(_0xb850c9,_0x11ce5f){return new BPromise(function(_0x38546a,_0x446fff){return client['request'](_0xb850c9,_0x11ce5f)[_0x756e('0x5')](function(_0x404189){logger[_0x756e('0x6')](_0x756e('0x7'),'routing',_0xb850c9,_0x11ce5f,_0x404189);if(_0x404189[_0x756e('0x8')]){logger['error'](_0x756e('0x7'),_0x756e('0x9'),_0xb850c9,_0x404189[_0x756e('0x8')][_0x756e('0xa')],_0x11ce5f);return _0x446fff(_0x404189['error']['message']);}else{return _0x38546a(_0x404189[_0x756e('0xb')]);}})[_0x756e('0xc')](function(_0x13bea7){logger['error'](_0x756e('0x7'),_0x756e('0x9'),_0xb850c9,_0x13bea7,_0x11ce5f);return _0x446fff(_0x13bea7);});});};module['exports']=client;
\ No newline at end of file
index 86de0cb..11be127 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7036=['./rpc/chatQueue','./rpc/smsQueue','./rpc/mailQueue','./rpc/faxQueue','resolve','getAgents','then','initAgents','getOpenchannelQueues','initOpenchannelQueues','getChatQueues','initChatQueues','initSmsQueues','initMailQueues','listen','log','./server','./realtime','./rpc/user','./rpc/openchannelQueue'];(function(_0x650913,_0x4a9223){var _0x2a590d=function(_0x2a25a7){while(--_0x2a25a7){_0x650913['push'](_0x650913['shift']());}};_0x2a590d(++_0x4a9223);}(_0x7036,0xec));var _0x6703=function(_0x5ab951,_0x2513ca){_0x5ab951=_0x5ab951-0x0;var _0x1e4abd=_0x7036[_0x5ab951];return _0x1e4abd;};'use strict';var BPromise=require('bluebird');var server=require(_0x6703('0x0'));var Realtime=require(_0x6703('0x1'));var user=require(_0x6703('0x2'));var interval=require('./rpc/interval');var openchannelQueue=require(_0x6703('0x3'));var chatQueue=require(_0x6703('0x4'));var smsQueue=require(_0x6703('0x5'));var mailQueue=require(_0x6703('0x6'));var faxQueue=require(_0x6703('0x7'));var realtime=new Realtime();function initRealtime(){return BPromise[_0x6703('0x8')]()['then'](user[_0x6703('0x9')]())[_0x6703('0xa')](realtime[_0x6703('0xb')]())[_0x6703('0xa')](interval['getIntervals']())[_0x6703('0xa')](realtime['initIntervals']())[_0x6703('0xa')](openchannelQueue[_0x6703('0xc')]())[_0x6703('0xa')](realtime[_0x6703('0xd')]())['then'](chatQueue[_0x6703('0xe')]())[_0x6703('0xa')](realtime[_0x6703('0xf')]())[_0x6703('0xa')](smsQueue['getSmsQueues']())[_0x6703('0xa')](realtime[_0x6703('0x10')]())[_0x6703('0xa')](mailQueue['getMailQueues']())[_0x6703('0xa')](realtime[_0x6703('0x11')]())[_0x6703('0xa')](faxQueue['getFaxQueues']())[_0x6703('0xa')](realtime['initFaxQueues']())[_0x6703('0xa')](function(){return realtime;});}function main(){return server[_0x6703('0x12')](realtime)['then'](function(_0x7f764f){return initRealtime();})['then'](function(_0x3baeae){return setInterval(initRealtime,0x1388);})['catch'](function(_0x17626b){console[_0x6703('0x13')](_0x17626b);});}main();
\ No newline at end of file
+var _0x328a=['initSmsQueues','getMailQueues','getFaxQueues','initFaxQueues','listen','catch','log','bluebird','./realtime','./rpc/user','./rpc/interval','./rpc/openchannelQueue','./rpc/chatQueue','./rpc/smsQueue','./rpc/faxQueue','resolve','then','getAgents','initAgents','initIntervals','getOpenchannelQueues','initChatQueues'];(function(_0x5b2a3a,_0x55bbca){var _0x16d450=function(_0x4822ce){while(--_0x4822ce){_0x5b2a3a['push'](_0x5b2a3a['shift']());}};_0x16d450(++_0x55bbca);}(_0x328a,0x193));var _0xa328=function(_0x1bc7bc,_0x2130d4){_0x1bc7bc=_0x1bc7bc-0x0;var _0x251dc2=_0x328a[_0x1bc7bc];return _0x251dc2;};'use strict';var BPromise=require(_0xa328('0x0'));var server=require('./server');var Realtime=require(_0xa328('0x1'));var user=require(_0xa328('0x2'));var interval=require(_0xa328('0x3'));var openchannelQueue=require(_0xa328('0x4'));var chatQueue=require(_0xa328('0x5'));var smsQueue=require(_0xa328('0x6'));var mailQueue=require('./rpc/mailQueue');var faxQueue=require(_0xa328('0x7'));var realtime=new Realtime();function initRealtime(){return BPromise[_0xa328('0x8')]()[_0xa328('0x9')](user[_0xa328('0xa')]())[_0xa328('0x9')](realtime[_0xa328('0xb')]())['then'](interval['getIntervals']())['then'](realtime[_0xa328('0xc')]())['then'](openchannelQueue[_0xa328('0xd')]())[_0xa328('0x9')](realtime['initOpenchannelQueues']())[_0xa328('0x9')](chatQueue['getChatQueues']())[_0xa328('0x9')](realtime[_0xa328('0xe')]())['then'](smsQueue['getSmsQueues']())[_0xa328('0x9')](realtime[_0xa328('0xf')]())[_0xa328('0x9')](mailQueue[_0xa328('0x10')]())['then'](realtime['initMailQueues']())['then'](faxQueue[_0xa328('0x11')]())[_0xa328('0x9')](realtime[_0xa328('0x12')]())[_0xa328('0x9')](function(){return realtime;});}function main(){return server[_0xa328('0x13')](realtime)[_0xa328('0x9')](function(_0x1eaf0a){return initRealtime();})['then'](function(_0x3b15db){return setInterval(initRealtime,0x1388);})[_0xa328('0x14')](function(_0x149e3a){console[_0xa328('0x15')](_0x149e3a);});}main();
\ No newline at end of file
index 4f46d44..8f425a7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x76a1=['findRules','matches','prioritize','priority','toJSON','map','toString','consequence','fromJSON','isString','parse','object','exports','lodash','util','events','EventEmitter','init','isNil','register','ignoreFactChanges','inherits','prototype','rules','activeRules','isArray','isObject','push','sync','filter','orderBy','execute','result','clone','name','index_','nextTick','ruleRef','next','isEqual','length','condition','matchPath','noop'];(function(_0x40fdd0,_0x1a6aaa){var _0x46645c=function(_0x575e1d){while(--_0x575e1d){_0x40fdd0['push'](_0x40fdd0['shift']());}};_0x46645c(++_0x1a6aaa);}(_0x76a1,0x91));var _0x176a=function(_0x234c3c,_0x742fd9){_0x234c3c=_0x234c3c-0x0;var _0x166742=_0x76a1[_0x234c3c];return _0x166742;};'use strict';var _=require(_0x176a('0x0'));var util=require(_0x176a('0x1'));var EventEmitter=require(_0x176a('0x2'))[_0x176a('0x3')];function RuleEngine(_0x53c7f0,_0x544343){this[_0x176a('0x4')]();if(!_[_0x176a('0x5')](_0x53c7f0)){this[_0x176a('0x6')](_0x53c7f0);}if(_0x544343){this[_0x176a('0x7')]=_0x544343[_0x176a('0x7')];}return this;}util[_0x176a('0x8')](RuleEngine,EventEmitter);RuleEngine[_0x176a('0x9')][_0x176a('0x4')]=function(_0xbd0ced){this[_0x176a('0xa')]=[];this[_0x176a('0xb')]=[];};RuleEngine['prototype'][_0x176a('0x6')]=function(_0x2cc607){if(Array[_0x176a('0xc')](_0x2cc607)){this['rules']=this['rules']['concat'](_0x2cc607);}else if(_0x2cc607!==null&&_[_0x176a('0xd')](_0x2cc607)){this[_0x176a('0xa')][_0x176a('0xe')](_0x2cc607);}this[_0x176a('0xf')]();};RuleEngine[_0x176a('0x9')][_0x176a('0xf')]=function(){this['activeRules']=this[_0x176a('0xa')][_0x176a('0x10')](function(_0x2443c5){if(_[_0x176a('0x5')](_0x2443c5['on'])){_0x2443c5['on']=!![];}if(_0x2443c5['on']===!![]){return _0x2443c5;}});this[_0x176a('0xb')]=_[_0x176a('0x11')](this[_0x176a('0xb')],['p'],['asc']);};RuleEngine[_0x176a('0x9')][_0x176a('0x12')]=function(_0x29bc4e,_0x2477f4){var _0x735af5=![];_0x29bc4e[_0x176a('0x13')]=!![];var _0x2cb35b=_[_0x176a('0x14')](_0x29bc4e);var _0x5b7d72=_[_0x176a('0x14')](_0x29bc4e);var _0x5ee9ae=this[_0x176a('0xb')];var _0x1e80fa=[];var _0x3c6844=this[_0x176a('0x7')];(function FnRuleLoop(_0x6690ae){var _0x93a694={'rules':function(){return _0x5ee9ae;},'rule':function(){return _0x5ee9ae[_0x6690ae];},'when':function(_0x5bda8b){if(_0x5bda8b){var _0x8ff0e7=_0x5ee9ae[_0x6690ae]['consequence'];_0x8ff0e7['ruleRef']=_0x5ee9ae[_0x6690ae]['id']||_0x5ee9ae[_0x6690ae][_0x176a('0x15')]||_0x176a('0x16')+_0x6690ae;process[_0x176a('0x17')](function(){_0x1e80fa[_0x176a('0xe')](_0x8ff0e7[_0x176a('0x18')]);_0x8ff0e7['call'](_0x2cb35b,_0x93a694);});}else{process[_0x176a('0x17')](function(){_0x93a694[_0x176a('0x19')]();});}},'restart':function(){return FnRuleLoop(0x0);},'stop':function(){_0x735af5=!![];return FnRuleLoop(0x0);},'next':function(_0x17e609){if(!_0x3c6844&&!_[_0x176a('0x1a')](_0x5b7d72,_0x2cb35b)){_0x5b7d72=_[_0x176a('0x14')](_0x2cb35b);process[_0x176a('0x17')](function(){_0x93a694['restart']();});}else{process[_0x176a('0x17')](function(){if(_[_0x176a('0x5')](_0x17e609)){return FnRuleLoop(_0x6690ae+0x1);}else{return FnRuleLoop(_0x17e609);}});}}};if(_0x6690ae<_0x5ee9ae[_0x176a('0x1b')]&&_0x735af5===![]){var _0x1c37cb=_0x5ee9ae[_0x6690ae][_0x176a('0x1c')];_0x1c37cb['call'](_0x2cb35b,_0x93a694);}else{process['nextTick'](function(){_0x2cb35b[_0x176a('0x1d')]=_0x1e80fa;return _0x2477f4?_0x2477f4(_0x2cb35b):_[_0x176a('0x1e')]();});}}(0x0));};RuleEngine[_0x176a('0x9')][_0x176a('0x1f')]=function(_0x29e29e){if(_['isNil'](_0x29e29e)){return this[_0x176a('0xa')];}else{var _0x3f5faa=_[_0x176a('0x20')](_0x29e29e);return _[_0x176a('0x10')](this[_0x176a('0xa')],_0x3f5faa);}};RuleEngine['prototype']['turn']=function(_0x5aec68,_0x1d2aff){var _0x5aec68=_0x5aec68==='on'||_0x5aec68==='ON'?!![]:![];var _0x5908d7=this[_0x176a('0x1f')](_0x1d2aff);for(var _0x4db4a1=0x0,_0x5b887b=_0x5908d7[_0x176a('0x1b')];_0x4db4a1<_0x5b887b;_0x4db4a1+=0x1){_0x5908d7[_0x4db4a1]['on']=_0x5aec68;}this[_0x176a('0xf')]();};RuleEngine['prototype'][_0x176a('0x21')]=function(_0x5e6d2a,_0x36c390){_0x5e6d2a=parseInt(_0x5e6d2a,0xa);var _0x4870da=this['findRules'](_0x36c390);for(var _0x3b0e6b=0x0,_0x4dfcd8=_0x4870da['length'];_0x3b0e6b<_0x4dfcd8;_0x3b0e6b+=0x1){_0x4870da[_0x3b0e6b][_0x176a('0x22')]=_0x5e6d2a;}this[_0x176a('0xf')]();};RuleEngine[_0x176a('0x9')][_0x176a('0x23')]=function(){var _0x5e77ee=this[_0x176a('0xa')];if(_0x5e77ee instanceof Array){_0x5e77ee=_0x5e77ee[_0x176a('0x24')](function(_0x32428f){_0x32428f[_0x176a('0x1c')]=_0x32428f[_0x176a('0x1c')][_0x176a('0x25')]();_0x32428f[_0x176a('0x26')]=_0x32428f[_0x176a('0x26')][_0x176a('0x25')]();return _0x32428f;});}else if(!_[_0x176a('0x5')](_0x5e77ee)){_0x5e77ee[_0x176a('0x1c')]=_0x5e77ee[_0x176a('0x1c')]['toString']();_0x5e77ee[_0x176a('0x26')]=_0x5e77ee[_0x176a('0x26')][_0x176a('0x25')]();}return _0x5e77ee;};RuleEngine['prototype'][_0x176a('0x27')]=function(_0x5207b8){this[_0x176a('0x4')]();if(_[_0x176a('0x28')](_0x5207b8)){_0x5207b8=JSON[_0x176a('0x29')](_0x5207b8);}if(_0x5207b8 instanceof Array){_0x5207b8=_0x5207b8[_0x176a('0x24')](function(_0x2d9a94){_0x2d9a94['condition']=eval('('+_0x2d9a94[_0x176a('0x1c')]+')');_0x2d9a94['consequence']=eval('('+_0x2d9a94[_0x176a('0x26')]+')');return _0x2d9a94;});}else if(_0x5207b8!==null&&typeof _0x5207b8==_0x176a('0x2a')){_0x5207b8[_0x176a('0x1c')]=eval('('+_0x5207b8[_0x176a('0x1c')]+')');_0x5207b8[_0x176a('0x26')]=eval('('+_0x5207b8[_0x176a('0x26')]+')');}this[_0x176a('0x6')](_0x5207b8);};module[_0x176a('0x2b')]=RuleEngine;
\ No newline at end of file
+var _0xb675=['prototype','rules','activeRules','isArray','concat','isObject','sync','filter','result','clone','ruleRef','index_','nextTick','push','next','isEqual','restart','length','condition','call','matchPath','noop','findRules','matches','turn','prioritize','toString','consequence','fromJSON','isString','parse','object','exports','lodash','util','events','EventEmitter','init','isNil','register','ignoreFactChanges'];(function(_0xfd2908,_0x33b6bf){var _0xe2cadf=function(_0x3b8be5){while(--_0x3b8be5){_0xfd2908['push'](_0xfd2908['shift']());}};_0xe2cadf(++_0x33b6bf);}(_0xb675,0xc5));var _0x5b67=function(_0x57ee8c,_0xe42849){_0x57ee8c=_0x57ee8c-0x0;var _0x3a2322=_0xb675[_0x57ee8c];return _0x3a2322;};'use strict';var _=require(_0x5b67('0x0'));var util=require(_0x5b67('0x1'));var EventEmitter=require(_0x5b67('0x2'))[_0x5b67('0x3')];function RuleEngine(_0x2d5acc,_0x58dada){this[_0x5b67('0x4')]();if(!_[_0x5b67('0x5')](_0x2d5acc)){this[_0x5b67('0x6')](_0x2d5acc);}if(_0x58dada){this[_0x5b67('0x7')]=_0x58dada['ignoreFactChanges'];}return this;}util['inherits'](RuleEngine,EventEmitter);RuleEngine[_0x5b67('0x8')][_0x5b67('0x4')]=function(_0x542400){this[_0x5b67('0x9')]=[];this[_0x5b67('0xa')]=[];};RuleEngine['prototype'][_0x5b67('0x6')]=function(_0x3f1f2e){if(Array[_0x5b67('0xb')](_0x3f1f2e)){this[_0x5b67('0x9')]=this[_0x5b67('0x9')][_0x5b67('0xc')](_0x3f1f2e);}else if(_0x3f1f2e!==null&&_[_0x5b67('0xd')](_0x3f1f2e)){this[_0x5b67('0x9')]['push'](_0x3f1f2e);}this[_0x5b67('0xe')]();};RuleEngine['prototype']['sync']=function(){this[_0x5b67('0xa')]=this['rules'][_0x5b67('0xf')](function(_0x21cf06){if(_[_0x5b67('0x5')](_0x21cf06['on'])){_0x21cf06['on']=!![];}if(_0x21cf06['on']===!![]){return _0x21cf06;}});this[_0x5b67('0xa')]=_['orderBy'](this[_0x5b67('0xa')],['p'],['asc']);};RuleEngine[_0x5b67('0x8')]['execute']=function(_0x58a026,_0x676ef){var _0x1d5967=![];_0x58a026[_0x5b67('0x10')]=!![];var _0x172485=_[_0x5b67('0x11')](_0x58a026);var _0x5d2804=_[_0x5b67('0x11')](_0x58a026);var _0x4e6326=this[_0x5b67('0xa')];var _0x1b3ad2=[];var _0x263bf4=this[_0x5b67('0x7')];(function FnRuleLoop(_0x5521b8){var _0x2a9d6d={'rules':function(){return _0x4e6326;},'rule':function(){return _0x4e6326[_0x5521b8];},'when':function(_0x3b3f0c){if(_0x3b3f0c){var _0x36c541=_0x4e6326[_0x5521b8]['consequence'];_0x36c541[_0x5b67('0x12')]=_0x4e6326[_0x5521b8]['id']||_0x4e6326[_0x5521b8]['name']||_0x5b67('0x13')+_0x5521b8;process[_0x5b67('0x14')](function(){_0x1b3ad2[_0x5b67('0x15')](_0x36c541[_0x5b67('0x12')]);_0x36c541['call'](_0x172485,_0x2a9d6d);});}else{process['nextTick'](function(){_0x2a9d6d[_0x5b67('0x16')]();});}},'restart':function(){return FnRuleLoop(0x0);},'stop':function(){_0x1d5967=!![];return FnRuleLoop(0x0);},'next':function(_0xaf0d7e){if(!_0x263bf4&&!_[_0x5b67('0x17')](_0x5d2804,_0x172485)){_0x5d2804=_[_0x5b67('0x11')](_0x172485);process[_0x5b67('0x14')](function(){_0x2a9d6d[_0x5b67('0x18')]();});}else{process[_0x5b67('0x14')](function(){if(_[_0x5b67('0x5')](_0xaf0d7e)){return FnRuleLoop(_0x5521b8+0x1);}else{return FnRuleLoop(_0xaf0d7e);}});}}};if(_0x5521b8<_0x4e6326[_0x5b67('0x19')]&&_0x1d5967===![]){var _0x16e80b=_0x4e6326[_0x5521b8][_0x5b67('0x1a')];_0x16e80b[_0x5b67('0x1b')](_0x172485,_0x2a9d6d);}else{process[_0x5b67('0x14')](function(){_0x172485[_0x5b67('0x1c')]=_0x1b3ad2;return _0x676ef?_0x676ef(_0x172485):_[_0x5b67('0x1d')]();});}}(0x0));};RuleEngine['prototype'][_0x5b67('0x1e')]=function(_0x17f538){if(_[_0x5b67('0x5')](_0x17f538)){return this['rules'];}else{var _0x43404a=_[_0x5b67('0x1f')](_0x17f538);return _[_0x5b67('0xf')](this['rules'],_0x43404a);}};RuleEngine[_0x5b67('0x8')][_0x5b67('0x20')]=function(_0x26a77e,_0x2f7a05){var _0x26a77e=_0x26a77e==='on'||_0x26a77e==='ON'?!![]:![];var _0x2816b7=this[_0x5b67('0x1e')](_0x2f7a05);for(var _0x143b99=0x0,_0x34fb46=_0x2816b7[_0x5b67('0x19')];_0x143b99<_0x34fb46;_0x143b99+=0x1){_0x2816b7[_0x143b99]['on']=_0x26a77e;}this[_0x5b67('0xe')]();};RuleEngine[_0x5b67('0x8')][_0x5b67('0x21')]=function(_0x1acb75,_0x2aca0c){_0x1acb75=parseInt(_0x1acb75,0xa);var _0xd77b97=this[_0x5b67('0x1e')](_0x2aca0c);for(var _0x170bdc=0x0,_0x5d9680=_0xd77b97['length'];_0x170bdc<_0x5d9680;_0x170bdc+=0x1){_0xd77b97[_0x170bdc]['priority']=_0x1acb75;}this[_0x5b67('0xe')]();};RuleEngine[_0x5b67('0x8')]['toJSON']=function(){var _0xcc1727=this[_0x5b67('0x9')];if(_0xcc1727 instanceof Array){_0xcc1727=_0xcc1727['map'](function(_0x1016a6){_0x1016a6['condition']=_0x1016a6[_0x5b67('0x1a')][_0x5b67('0x22')]();_0x1016a6[_0x5b67('0x23')]=_0x1016a6[_0x5b67('0x23')][_0x5b67('0x22')]();return _0x1016a6;});}else if(!_[_0x5b67('0x5')](_0xcc1727)){_0xcc1727[_0x5b67('0x1a')]=_0xcc1727[_0x5b67('0x1a')][_0x5b67('0x22')]();_0xcc1727['consequence']=_0xcc1727[_0x5b67('0x23')][_0x5b67('0x22')]();}return _0xcc1727;};RuleEngine[_0x5b67('0x8')][_0x5b67('0x24')]=function(_0x13c94c){this['init']();if(_[_0x5b67('0x25')](_0x13c94c)){_0x13c94c=JSON[_0x5b67('0x26')](_0x13c94c);}if(_0x13c94c instanceof Array){_0x13c94c=_0x13c94c['map'](function(_0x15cb86){_0x15cb86[_0x5b67('0x1a')]=eval('('+_0x15cb86[_0x5b67('0x1a')]+')');_0x15cb86[_0x5b67('0x23')]=eval('('+_0x15cb86[_0x5b67('0x23')]+')');return _0x15cb86;});}else if(_0x13c94c!==null&&typeof _0x13c94c==_0x5b67('0x27')){_0x13c94c[_0x5b67('0x1a')]=eval('('+_0x13c94c[_0x5b67('0x1a')]+')');_0x13c94c[_0x5b67('0x23')]=eval('('+_0x13c94c['consequence']+')');}this[_0x5b67('0x6')](_0x13c94c);};module[_0x5b67('0x28')]=RuleEngine;
\ No newline at end of file
index 8a3e5ec..63a3014 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x814b=['bluebird','jayson/promise','client','http','request','then','error','result','catch','sendMailMessage','SendMail'];(function(_0x400f59,_0x4f0c3d){var _0xe3d32f=function(_0x535142){while(--_0x535142){_0x400f59['push'](_0x400f59['shift']());}};_0xe3d32f(++_0x4f0c3d);}(_0x814b,0x1a2));var _0xb814=function(_0x2c91e9,_0x2fb965){_0x2c91e9=_0x2c91e9-0x0;var _0x13f0ff=_0x814b[_0x2c91e9];return _0x13f0ff;};'use strict';var BPromise=require(_0xb814('0x0'));var jayson=require(_0xb814('0x1'));var client=jayson[_0xb814('0x2')][_0xb814('0x3')]({'port':0x232b});function request(_0xfbb64b,_0x477725){return new BPromise(function(_0x4a98af,_0x38c21a){return client[_0xb814('0x4')](_0xfbb64b,_0x477725)[_0xb814('0x5')](function(_0x4237bc){if(_0x4237bc[_0xb814('0x6')]){return _0x38c21a(_0x4237bc[_0xb814('0x6')]['message']);}else{return _0x4a98af(_0x4237bc[_0xb814('0x7')]);}})[_0xb814('0x8')](function(_0x5c8539){return _0x38c21a(_0x5c8539);});});}exports[_0xb814('0x9')]=function(_0x2913a6,_0x186d5a){return request(_0xb814('0xa'),{'account':_0x2913a6,'message':_0x186d5a});};
\ No newline at end of file
+var _0x9957=['result','catch','sendMailMessage','SendMail','bluebird','jayson/promise','client','http','request','error','message'];(function(_0x1cd823,_0x4ae8a6){var _0x35ca05=function(_0x260e1b){while(--_0x260e1b){_0x1cd823['push'](_0x1cd823['shift']());}};_0x35ca05(++_0x4ae8a6);}(_0x9957,0x93));var _0x7995=function(_0x2f5ac5,_0x1ee939){_0x2f5ac5=_0x2f5ac5-0x0;var _0x37c9a8=_0x9957[_0x2f5ac5];return _0x37c9a8;};'use strict';var BPromise=require(_0x7995('0x0'));var jayson=require(_0x7995('0x1'));var client=jayson[_0x7995('0x2')][_0x7995('0x3')]({'port':0x232b});function request(_0x5b96eb,_0x86c128){return new BPromise(function(_0x3c58eb,_0x1902b4){return client[_0x7995('0x4')](_0x5b96eb,_0x86c128)['then'](function(_0x744bea){if(_0x744bea[_0x7995('0x5')]){return _0x1902b4(_0x744bea[_0x7995('0x5')][_0x7995('0x6')]);}else{return _0x3c58eb(_0x744bea[_0x7995('0x7')]);}})[_0x7995('0x8')](function(_0x4996ca){return _0x1902b4(_0x4996ca);});});}exports[_0x7995('0x9')]=function(_0x1cad37,_0x4a64f7){return request(_0x7995('0xa'),{'account':_0x1cad37,'message':_0x4a64f7});};
\ No newline at end of file
index 331b886..028a900 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa0f5=['chatCurrentCapacity','mailStatus','mailStatusTime','mailCapacity','mailCurrentCapacity','faxStatus','faxStatusTime','faxCapacity','faxCurrentCapacity','smsStatusTime','smsCapacity','openchannelCapacity','openchannelCurrentCapacity','updateRealtime','prototype','getChannelStatus','CurrentCapacity','Capacity','maxcapacity','working','idle','mail','chat','openchannel','fax','sms','length','Status','StatusTime','toNumber','format','voicePause','faxPause','chatStatusTime','smsCurrentCapacity','openchannelStatus','openchannelStatusTime','busy','busyQueue','user:save','exports','moment','md5','ioredis','../../../config/environment','redis','defaults','localhost','name','online','chatPause','mailPause','smsPause','openchannelPause','chatStatus','unknown','chatCapacity'];(function(_0x6531b0,_0x18dbb8){var _0x15c831=function(_0xa132b){while(--_0xa132b){_0x6531b0['push'](_0x6531b0['shift']());}};_0x15c831(++_0x18dbb8);}(_0xa0f5,0x10d));var _0x5a0f=function(_0x47396d,_0x4d5b16){_0x47396d=_0x47396d-0x0;var _0x35b29b=_0xa0f5[_0x47396d];return _0x35b29b;};'use strict';var _=require('lodash');var moment=require(_0x5a0f('0x0'));var md5=require(_0x5a0f('0x1'));var Redis=require(_0x5a0f('0x2'));var config=require(_0x5a0f('0x3'));config[_0x5a0f('0x4')]=_[_0x5a0f('0x5')](config[_0x5a0f('0x4')],{'host':_0x5a0f('0x6'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x5a0f('0x4')]));function Agent(_0x5e7cfb){this['id']=_0x5e7cfb['id']||0x0;this[_0x5a0f('0x7')]=_0x5e7cfb['name']||'';this[_0x5a0f('0x8')]=_0x5e7cfb[_0x5a0f('0x8')]||!![];this['voicePause']=_0x5e7cfb['voicePause']||![];this[_0x5a0f('0x9')]=_0x5e7cfb['chatPause']||![];this[_0x5a0f('0xa')]=_0x5e7cfb[_0x5a0f('0xa')]||![];this['faxPause']=_0x5e7cfb['faxPause']||![];this[_0x5a0f('0xb')]=_0x5e7cfb[_0x5a0f('0xb')]||![];this[_0x5a0f('0xc')]=_0x5e7cfb[_0x5a0f('0xc')]||![];this[_0x5a0f('0xd')]=_0x5a0f('0xe');this['chatStatusTime']=0x0;this['chatCapacity']=_0x5e7cfb[_0x5a0f('0xf')]||0x0;this[_0x5a0f('0x10')]=0x0;this[_0x5a0f('0x11')]='unknown';this[_0x5a0f('0x12')]=0x0;this[_0x5a0f('0x13')]=_0x5e7cfb[_0x5a0f('0x13')]||0x0;this[_0x5a0f('0x14')]=0x0;this[_0x5a0f('0x15')]=_0x5a0f('0xe');this[_0x5a0f('0x16')]=0x0;this[_0x5a0f('0x17')]=_0x5e7cfb[_0x5a0f('0x17')]||0x0;this[_0x5a0f('0x18')]=0x0;this['smsStatus']=_0x5a0f('0xe');this[_0x5a0f('0x19')]=0x0;this['smsCapacity']=_0x5e7cfb[_0x5a0f('0x1a')]||0x0;this['smsCurrentCapacity']=0x0;this['openchannelStatus']=_0x5a0f('0xe');this['openchannelStatusTime']=0x0;this[_0x5a0f('0x1b')]=_0x5e7cfb[_0x5a0f('0x1b')]||0x0;this[_0x5a0f('0x1c')]=0x0;this['busy']=![];this['busyQueue']=undefined;this[_0x5a0f('0x1')]='';this[_0x5a0f('0x1d')]();}Agent[_0x5a0f('0x1e')][_0x5a0f('0x1f')]=function(_0x5acfd3){if(this[_0x5acfd3+_0x5a0f('0x20')]>0x0){if(this[_0x5acfd3+_0x5a0f('0x21')]>0x0&&this[_0x5acfd3+_0x5a0f('0x20')]>=this[_0x5acfd3+'Capacity']){return _0x5a0f('0x22');}else{return _0x5a0f('0x23');}}else{return _0x5a0f('0x24');}};Agent['prototype'][_0x5a0f('0x1d')]=function(){var _0x47f1da=[_0x5a0f('0x25'),_0x5a0f('0x26'),_0x5a0f('0x27'),_0x5a0f('0x28'),_0x5a0f('0x29')];for(var _0x2df041=0x0;_0x2df041<_0x47f1da[_0x5a0f('0x2a')];_0x2df041+=0x1){var _0x34c083=this[_0x5a0f('0x1f')](_0x47f1da[_0x2df041]);if(this[_0x47f1da[_0x2df041]+_0x5a0f('0x2b')]!==_0x34c083){this[_0x47f1da[_0x2df041]+_0x5a0f('0x2c')]=_[_0x5a0f('0x2d')](moment()[_0x5a0f('0x2e')]('x'));}this[_0x47f1da[_0x2df041]+_0x5a0f('0x2b')]=_0x34c083;}var _0x3b1132={'id':this['id'],'name':this[_0x5a0f('0x7')],'online':this[_0x5a0f('0x8')],'voicePause':this[_0x5a0f('0x2f')],'chatPause':this[_0x5a0f('0x9')],'mailPause':this['mailPause'],'smsPause':this[_0x5a0f('0xb')],'faxPause':this[_0x5a0f('0x30')],'openchannelPause':this[_0x5a0f('0xc')],'chatStatus':this[_0x5a0f('0xd')],'chatStatusTime':this[_0x5a0f('0x31')],'chatCapacity':this[_0x5a0f('0xf')],'chatCurrentCapacity':this[_0x5a0f('0x10')],'mailStatus':this[_0x5a0f('0x11')],'mailStatusTime':this[_0x5a0f('0x12')],'mailCapacity':this[_0x5a0f('0x13')],'mailCurrentCapacity':this[_0x5a0f('0x14')],'faxStatus':this[_0x5a0f('0x15')],'faxStatusTime':this[_0x5a0f('0x16')],'faxCapacity':this[_0x5a0f('0x17')],'faxCurrentCapacity':this['faxCurrentCapacity'],'smsStatus':this['smsStatus'],'smsStatusTime':this[_0x5a0f('0x19')],'smsCapacity':this[_0x5a0f('0x1a')],'smsCurrentCapacity':this[_0x5a0f('0x32')],'openchannelStatus':this[_0x5a0f('0x33')],'openchannelStatusTime':this[_0x5a0f('0x34')],'openchannelCapacity':this[_0x5a0f('0x1b')],'openchannelCurrentCapacity':this['openchannelCurrentCapacity'],'busy':this[_0x5a0f('0x35')],'busyQueue':this[_0x5a0f('0x36')]};var _0x384ebb=md5(JSON['stringify'](_0x3b1132));if(this[_0x5a0f('0x1')]!==_0x384ebb){this[_0x5a0f('0x1')]=_0x384ebb;io['emit'](_0x5a0f('0x37'),_0x3b1132);}};module[_0x5a0f('0x38')]=Agent;
\ No newline at end of file
+var _0xfe4b=['mailCapacity','faxStatus','unknown','faxStatusTime','faxCapacity','faxCurrentCapacity','smsStatus','smsStatusTime','smsCapacity','smsCurrentCapacity','openchannelCurrentCapacity','busy','busyQueue','updateRealtime','prototype','getChannelStatus','CurrentCapacity','Capacity','working','mail','chat','openchannel','length','Status','StatusTime','toNumber','format','mailStatusTime','mailCurrentCapacity','openchannelStatus','openchannelStatusTime','openchannelCapacity','emit','user:save','moment','md5','ioredis','../../../config/environment','defaults','localhost','socket.io-emitter','redis','name','online','voicePause','chatPause','mailPause','faxPause','openchannelPause','chatStatus','chatStatusTime','chatCapacity','chatCurrentCapacity'];(function(_0xbc346f,_0x3db5c0){var _0x9f9260=function(_0x37e6b9){while(--_0x37e6b9){_0xbc346f['push'](_0xbc346f['shift']());}};_0x9f9260(++_0x3db5c0);}(_0xfe4b,0x1ca));var _0xbfe4=function(_0x47e549,_0x2e53d6){_0x47e549=_0x47e549-0x0;var _0x251374=_0xfe4b[_0x47e549];return _0x251374;};'use strict';var _=require('lodash');var moment=require(_0xbfe4('0x0'));var md5=require(_0xbfe4('0x1'));var Redis=require(_0xbfe4('0x2'));var config=require(_0xbfe4('0x3'));config['redis']=_[_0xbfe4('0x4')](config['redis'],{'host':_0xbfe4('0x5'),'port':0x18eb});var io=require(_0xbfe4('0x6'))(new Redis(config[_0xbfe4('0x7')]));function Agent(_0x5c938c){this['id']=_0x5c938c['id']||0x0;this[_0xbfe4('0x8')]=_0x5c938c[_0xbfe4('0x8')]||'';this[_0xbfe4('0x9')]=_0x5c938c[_0xbfe4('0x9')]||!![];this[_0xbfe4('0xa')]=_0x5c938c[_0xbfe4('0xa')]||![];this[_0xbfe4('0xb')]=_0x5c938c[_0xbfe4('0xb')]||![];this[_0xbfe4('0xc')]=_0x5c938c[_0xbfe4('0xc')]||![];this[_0xbfe4('0xd')]=_0x5c938c[_0xbfe4('0xd')]||![];this['smsPause']=_0x5c938c['smsPause']||![];this['openchannelPause']=_0x5c938c[_0xbfe4('0xe')]||![];this[_0xbfe4('0xf')]='unknown';this[_0xbfe4('0x10')]=0x0;this[_0xbfe4('0x11')]=_0x5c938c['chatCapacity']||0x0;this[_0xbfe4('0x12')]=0x0;this['mailStatus']='unknown';this['mailStatusTime']=0x0;this[_0xbfe4('0x13')]=_0x5c938c[_0xbfe4('0x13')]||0x0;this['mailCurrentCapacity']=0x0;this[_0xbfe4('0x14')]=_0xbfe4('0x15');this[_0xbfe4('0x16')]=0x0;this['faxCapacity']=_0x5c938c[_0xbfe4('0x17')]||0x0;this[_0xbfe4('0x18')]=0x0;this[_0xbfe4('0x19')]=_0xbfe4('0x15');this[_0xbfe4('0x1a')]=0x0;this[_0xbfe4('0x1b')]=_0x5c938c[_0xbfe4('0x1b')]||0x0;this[_0xbfe4('0x1c')]=0x0;this['openchannelStatus']='unknown';this['openchannelStatusTime']=0x0;this['openchannelCapacity']=_0x5c938c['openchannelCapacity']||0x0;this[_0xbfe4('0x1d')]=0x0;this[_0xbfe4('0x1e')]=![];this[_0xbfe4('0x1f')]=undefined;this[_0xbfe4('0x1')]='';this[_0xbfe4('0x20')]();}Agent[_0xbfe4('0x21')][_0xbfe4('0x22')]=function(_0x4236ea){if(this[_0x4236ea+_0xbfe4('0x23')]>0x0){if(this[_0x4236ea+'Capacity']>0x0&&this[_0x4236ea+'CurrentCapacity']>=this[_0x4236ea+_0xbfe4('0x24')]){return'maxcapacity';}else{return _0xbfe4('0x25');}}else{return'idle';}};Agent['prototype'][_0xbfe4('0x20')]=function(){var _0x31d9b2=[_0xbfe4('0x26'),_0xbfe4('0x27'),_0xbfe4('0x28'),'fax','sms'];for(var _0x5f3e2d=0x0;_0x5f3e2d<_0x31d9b2[_0xbfe4('0x29')];_0x5f3e2d+=0x1){var _0x2f863f=this[_0xbfe4('0x22')](_0x31d9b2[_0x5f3e2d]);if(this[_0x31d9b2[_0x5f3e2d]+_0xbfe4('0x2a')]!==_0x2f863f){this[_0x31d9b2[_0x5f3e2d]+_0xbfe4('0x2b')]=_[_0xbfe4('0x2c')](moment()[_0xbfe4('0x2d')]('x'));}this[_0x31d9b2[_0x5f3e2d]+_0xbfe4('0x2a')]=_0x2f863f;}var _0x3103ac={'id':this['id'],'name':this[_0xbfe4('0x8')],'online':this[_0xbfe4('0x9')],'voicePause':this[_0xbfe4('0xa')],'chatPause':this[_0xbfe4('0xb')],'mailPause':this[_0xbfe4('0xc')],'smsPause':this['smsPause'],'faxPause':this[_0xbfe4('0xd')],'openchannelPause':this[_0xbfe4('0xe')],'chatStatus':this['chatStatus'],'chatStatusTime':this[_0xbfe4('0x10')],'chatCapacity':this['chatCapacity'],'chatCurrentCapacity':this[_0xbfe4('0x12')],'mailStatus':this['mailStatus'],'mailStatusTime':this[_0xbfe4('0x2e')],'mailCapacity':this[_0xbfe4('0x13')],'mailCurrentCapacity':this[_0xbfe4('0x2f')],'faxStatus':this['faxStatus'],'faxStatusTime':this[_0xbfe4('0x16')],'faxCapacity':this['faxCapacity'],'faxCurrentCapacity':this[_0xbfe4('0x18')],'smsStatus':this[_0xbfe4('0x19')],'smsStatusTime':this[_0xbfe4('0x1a')],'smsCapacity':this[_0xbfe4('0x1b')],'smsCurrentCapacity':this[_0xbfe4('0x1c')],'openchannelStatus':this[_0xbfe4('0x30')],'openchannelStatusTime':this[_0xbfe4('0x31')],'openchannelCapacity':this[_0xbfe4('0x32')],'openchannelCurrentCapacity':this[_0xbfe4('0x1d')],'busy':this[_0xbfe4('0x1e')],'busyQueue':this[_0xbfe4('0x1f')]};var _0x2382e8=md5(JSON['stringify'](_0x3103ac));if(this[_0xbfe4('0x1')]!==_0x2382e8){this[_0xbfe4('0x1')]=_0x2382e8;io[_0xbfe4('0x33')](_0xbfe4('0x34'),_0x3103ac);}};module['exports']=Agent;
\ No newline at end of file
index 54c1e8b..4b9167d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8646=['chatPause','paused','available','emit','chat_queue:save','exports','lodash','md5','defaults','redis','timeout','strategy','Agents','mapAgentsId','waiting','updateRouting','updateRealtime','prototype','_rr','map','loggedIn'];(function(_0x233cb1,_0x8ca9a2){var _0x29ee7e=function(_0x20e277){while(--_0x20e277){_0x233cb1['push'](_0x233cb1['shift']());}};_0x29ee7e(++_0x8ca9a2);}(_0x8646,0x102));var _0x6864=function(_0x15d76d,_0xbd9e14){_0x15d76d=_0x15d76d-0x0;var _0x5ae018=_0x8646[_0x15d76d];return _0x5ae018;};'use strict';var _=require(_0x6864('0x0'));var md5=require(_0x6864('0x1'));var util=require('util');var Redis=require('ioredis');var config=require('../../../config/environment');config['redis']=_[_0x6864('0x2')](config[_0x6864('0x3')],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x6864('0x3')]));function ChatQueue(_0x31d5dc){this['id']=_0x31d5dc['id']||0x0;this['name']=_0x31d5dc['name']||'';this['timeout']=_0x31d5dc[_0x6864('0x4')]||0xa;this[_0x6864('0x5')]=_0x31d5dc[_0x6864('0x5')]||'beepall';this[_0x6864('0x6')]=_0x31d5dc[_0x6864('0x6')];this[_0x6864('0x7')]={};this[_0x6864('0x8')]=0x0;this['md5']='';this[_0x6864('0x9')]();this[_0x6864('0xa')]();}ChatQueue[_0x6864('0xb')][_0x6864('0x9')]=function(){var _0x641cc8=this[_0x6864('0x7')][_0x6864('0xc')];this[_0x6864('0x7')]=_[_0x6864('0xd')](this['Agents'],'id');this[_0x6864('0x7')][_0x6864('0xc')]=_0x641cc8;};ChatQueue[_0x6864('0xb')][_0x6864('0xa')]=function(){this[_0x6864('0xe')]=0x0;this['paused']=0x0;for(var _0x528e6d=0x0;_0x528e6d<this[_0x6864('0x6')]['length'];_0x528e6d+=0x1){if(this[_0x6864('0x6')][_0x528e6d]['online']){this[_0x6864('0xe')]+=0x1;}if(this['Agents'][_0x528e6d][_0x6864('0xf')]){this['paused']+=0x1;}}this['available']=this[_0x6864('0xe')]-this[_0x6864('0x10')];this[_0x6864('0x11')]=this[_0x6864('0x11')]>=0x0?this[_0x6864('0x11')]:0x0;var _0xebf367={'id':this['id'],'available':this[_0x6864('0x11')],'loggedIn':this['loggedIn'],'name':this['name'],'paused':this['paused'],'waiting':this[_0x6864('0x8')]};var _0x4e5544=md5(JSON['stringify'](_0xebf367));if(this['md5']!==_0x4e5544){this[_0x6864('0x1')]=_0x4e5544;io['to'](util['format']('chat:queue:%s',_0xebf367['name']))[_0x6864('0x12')](_0x6864('0x13'),_0xebf367);}};module[_0x6864('0x14')]=ChatQueue;
\ No newline at end of file
+var _0x7185=['loggedIn','online','available','name','stringify','format','chat:queue:%s','emit','chat_queue:save','exports','lodash','util','ioredis','../../../config/environment','redis','defaults','localhost','socket.io-emitter','timeout','strategy','beepall','waiting','md5','updateRouting','prototype','mapAgentsId','_rr','map','Agents','updateRealtime'];(function(_0xa9e3ac,_0x52d22f){var _0x2b0830=function(_0xd3f7d9){while(--_0xd3f7d9){_0xa9e3ac['push'](_0xa9e3ac['shift']());}};_0x2b0830(++_0x52d22f);}(_0x7185,0x1ae));var _0x5718=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x7185[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0x5718('0x0'));var md5=require('md5');var util=require(_0x5718('0x1'));var Redis=require(_0x5718('0x2'));var config=require(_0x5718('0x3'));config[_0x5718('0x4')]=_[_0x5718('0x5')](config['redis'],{'host':_0x5718('0x6'),'port':0x18eb});var io=require(_0x5718('0x7'))(new Redis(config[_0x5718('0x4')]));function ChatQueue(_0x4c4494){this['id']=_0x4c4494['id']||0x0;this['name']=_0x4c4494['name']||'';this[_0x5718('0x8')]=_0x4c4494['timeout']||0xa;this[_0x5718('0x9')]=_0x4c4494['strategy']||_0x5718('0xa');this['Agents']=_0x4c4494['Agents'];this['mapAgentsId']={};this[_0x5718('0xb')]=0x0;this[_0x5718('0xc')]='';this[_0x5718('0xd')]();this['updateRealtime']();}ChatQueue[_0x5718('0xe')][_0x5718('0xd')]=function(){var _0x167245=this[_0x5718('0xf')][_0x5718('0x10')];this[_0x5718('0xf')]=_[_0x5718('0x11')](this[_0x5718('0x12')],'id');this['mapAgentsId'][_0x5718('0x10')]=_0x167245;};ChatQueue[_0x5718('0xe')][_0x5718('0x13')]=function(){this[_0x5718('0x14')]=0x0;this['paused']=0x0;for(var _0x5d401f=0x0;_0x5d401f<this[_0x5718('0x12')]['length'];_0x5d401f+=0x1){if(this[_0x5718('0x12')][_0x5d401f][_0x5718('0x15')]){this[_0x5718('0x14')]+=0x1;}if(this['Agents'][_0x5d401f]['chatPause']){this['paused']+=0x1;}}this[_0x5718('0x16')]=this[_0x5718('0x14')]-this['paused'];this[_0x5718('0x16')]=this[_0x5718('0x16')]>=0x0?this['available']:0x0;var _0xb24eef={'id':this['id'],'available':this[_0x5718('0x16')],'loggedIn':this[_0x5718('0x14')],'name':this[_0x5718('0x17')],'paused':this['paused'],'waiting':this[_0x5718('0xb')]};var _0x118909=md5(JSON[_0x5718('0x18')](_0xb24eef));if(this[_0x5718('0xc')]!==_0x118909){this[_0x5718('0xc')]=_0x118909;io['to'](util[_0x5718('0x19')](_0x5718('0x1a'),_0xb24eef[_0x5718('0x17')]))[_0x5718('0x1b')](_0x5718('0x1c'),_0xb24eef);}};module[_0x5718('0x1d')]=ChatQueue;
\ No newline at end of file
index 6a226af..3fd50b9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x95de=['map','_rr','prototype','loggedIn','length','online','paused','available','stringify','md5','format','fax:queue:%s','name','emit','defaults','redis','localhost','timeout','strategy','beepall','Agents','mapAgentsId','waiting','updateRouting','updateRealtime'];(function(_0x4d30d9,_0x133317){var _0xea44fb=function(_0x4f2b6a){while(--_0x4f2b6a){_0x4d30d9['push'](_0x4d30d9['shift']());}};_0xea44fb(++_0x133317);}(_0x95de,0x108));var _0xe95d=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x95de[_0x20a584];return _0x4b41a8;};'use strict';var _=require('lodash');var md5=require('md5');var util=require('util');var Redis=require('ioredis');var config=require('../../../config/environment');config['redis']=_[_0xe95d('0x0')](config[_0xe95d('0x1')],{'host':_0xe95d('0x2'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xe95d('0x1')]));function FaxQueue(_0x90f64d){this['id']=_0x90f64d['id']||0x0;this['name']=_0x90f64d['name']||'';this[_0xe95d('0x3')]=_0x90f64d[_0xe95d('0x3')]||0xa;this[_0xe95d('0x4')]=_0x90f64d[_0xe95d('0x4')]||_0xe95d('0x5');this[_0xe95d('0x6')]=_0x90f64d[_0xe95d('0x6')];this[_0xe95d('0x7')]={};this[_0xe95d('0x8')]=0x0;this['md5']='';this[_0xe95d('0x9')]();this[_0xe95d('0xa')]();}FaxQueue['prototype'][_0xe95d('0x9')]=function(){var _0x165d6d=this[_0xe95d('0x7')]['_rr'];this[_0xe95d('0x7')]=_[_0xe95d('0xb')](this['Agents'],'id');this[_0xe95d('0x7')][_0xe95d('0xc')]=_0x165d6d;};FaxQueue[_0xe95d('0xd')]['updateRealtime']=function(){this[_0xe95d('0xe')]=0x0;this['paused']=0x0;for(var _0x1cce32=0x0;_0x1cce32<this[_0xe95d('0x6')][_0xe95d('0xf')];_0x1cce32+=0x1){if(this[_0xe95d('0x6')][_0x1cce32][_0xe95d('0x10')]){this[_0xe95d('0xe')]+=0x1;}if(this[_0xe95d('0x6')][_0x1cce32]['faxPause']){this[_0xe95d('0x11')]+=0x1;}}this[_0xe95d('0x12')]=this[_0xe95d('0xe')]-this['paused'];this[_0xe95d('0x12')]=this['available']>=0x0?this[_0xe95d('0x12')]:0x0;var _0x2df265={'id':this['id'],'available':this[_0xe95d('0x12')],'loggedIn':this[_0xe95d('0xe')],'name':this['name'],'paused':this['paused'],'waiting':this[_0xe95d('0x8')]};var _0xfa5879=md5(JSON[_0xe95d('0x13')](_0x2df265));if(this[_0xe95d('0x14')]!==_0xfa5879){this[_0xe95d('0x14')]=_0xfa5879;io['to'](util[_0xe95d('0x15')](_0xe95d('0x16'),_0x2df265[_0xe95d('0x17')]))[_0xe95d('0x18')]('fax_queue:save',_0x2df265);}};module['exports']=FaxQueue;
\ No newline at end of file
+var _0x3a9a=['online','paused','available','fax:queue:%s','exports','lodash','md5','../../../config/environment','redis','defaults','localhost','socket.io-emitter','name','timeout','strategy','beepall','Agents','mapAgentsId','waiting','updateRouting','updateRealtime','_rr','prototype','loggedIn','length'];(function(_0x15ccbc,_0x525e52){var _0x1763c6=function(_0x17fba5){while(--_0x17fba5){_0x15ccbc['push'](_0x15ccbc['shift']());}};_0x1763c6(++_0x525e52);}(_0x3a9a,0x131));var _0xa3a9=function(_0x310504,_0x26ad95){_0x310504=_0x310504-0x0;var _0x5b36d0=_0x3a9a[_0x310504];return _0x5b36d0;};'use strict';var _=require(_0xa3a9('0x0'));var md5=require(_0xa3a9('0x1'));var util=require('util');var Redis=require('ioredis');var config=require(_0xa3a9('0x2'));config[_0xa3a9('0x3')]=_[_0xa3a9('0x4')](config[_0xa3a9('0x3')],{'host':_0xa3a9('0x5'),'port':0x18eb});var io=require(_0xa3a9('0x6'))(new Redis(config['redis']));function FaxQueue(_0x4acd4d){this['id']=_0x4acd4d['id']||0x0;this['name']=_0x4acd4d[_0xa3a9('0x7')]||'';this[_0xa3a9('0x8')]=_0x4acd4d[_0xa3a9('0x8')]||0xa;this[_0xa3a9('0x9')]=_0x4acd4d['strategy']||_0xa3a9('0xa');this[_0xa3a9('0xb')]=_0x4acd4d['Agents'];this[_0xa3a9('0xc')]={};this[_0xa3a9('0xd')]=0x0;this[_0xa3a9('0x1')]='';this[_0xa3a9('0xe')]();this[_0xa3a9('0xf')]();}FaxQueue['prototype'][_0xa3a9('0xe')]=function(){var _0x58969b=this[_0xa3a9('0xc')][_0xa3a9('0x10')];this[_0xa3a9('0xc')]=_['map'](this['Agents'],'id');this[_0xa3a9('0xc')][_0xa3a9('0x10')]=_0x58969b;};FaxQueue[_0xa3a9('0x11')]['updateRealtime']=function(){this[_0xa3a9('0x12')]=0x0;this['paused']=0x0;for(var _0x118ae=0x0;_0x118ae<this[_0xa3a9('0xb')][_0xa3a9('0x13')];_0x118ae+=0x1){if(this['Agents'][_0x118ae][_0xa3a9('0x14')]){this[_0xa3a9('0x12')]+=0x1;}if(this[_0xa3a9('0xb')][_0x118ae]['faxPause']){this[_0xa3a9('0x15')]+=0x1;}}this['available']=this['loggedIn']-this[_0xa3a9('0x15')];this[_0xa3a9('0x16')]=this[_0xa3a9('0x16')]>=0x0?this[_0xa3a9('0x16')]:0x0;var _0x28b45b={'id':this['id'],'available':this[_0xa3a9('0x16')],'loggedIn':this[_0xa3a9('0x12')],'name':this['name'],'paused':this[_0xa3a9('0x15')],'waiting':this[_0xa3a9('0xd')]};var _0x51e952=md5(JSON['stringify'](_0x28b45b));if(this[_0xa3a9('0x1')]!==_0x51e952){this[_0xa3a9('0x1')]=_0x51e952;io['to'](util['format'](_0xa3a9('0x17'),_0x28b45b[_0xa3a9('0x7')]))['emit']('fax_queue:save',_0x28b45b);}};module[_0xa3a9('0x18')]=FaxQueue;
\ No newline at end of file
index c9befa9..86a192b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x277f=['Intervals','exports','name'];(function(_0x58f50b,_0x17bc1e){var _0x252e46=function(_0x379a95){while(--_0x379a95){_0x58f50b['push'](_0x58f50b['shift']());}};_0x252e46(++_0x17bc1e);}(_0x277f,0x11c));var _0xf277=function(_0x3f3529,_0x45a8ca){_0x3f3529=_0x3f3529-0x0;var _0x2271fc=_0x277f[_0x3f3529];return _0x2271fc;};'use strict';function Interval(_0x3e3bcf){this['id']=_0x3e3bcf['id']||0x0;this[_0xf277('0x0')]=_0x3e3bcf[_0xf277('0x0')]||'';this['Intervals']=_0x3e3bcf[_0xf277('0x1')]||{};}module[_0xf277('0x2')]=Interval;
\ No newline at end of file
+var _0x2ac0=['name','Intervals','exports'];(function(_0x54de80,_0x144f2b){var _0x3f3f8a=function(_0x4871b6){while(--_0x4871b6){_0x54de80['push'](_0x54de80['shift']());}};_0x3f3f8a(++_0x144f2b);}(_0x2ac0,0xcc));var _0x02ac=function(_0x5256e1,_0x4915ad){_0x5256e1=_0x5256e1-0x0;var _0x49554b=_0x2ac0[_0x5256e1];return _0x49554b;};'use strict';function Interval(_0x5df919){this['id']=_0x5df919['id']||0x0;this[_0x02ac('0x0')]=_0x5df919[_0x02ac('0x0')]||'';this[_0x02ac('0x1')]=_0x5df919[_0x02ac('0x1')]||{};}module[_0x02ac('0x2')]=Interval;
\ No newline at end of file
index 74c1d1c..5bd4ca0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x99a0=['md5','defaults','redis','socket.io-emitter','name','timeout','strategy','beepall','Agents','mapAgentsId','waiting','updateRouting','updateRealtime','prototype','_rr','map','loggedIn','length','online','mailPause','paused','available','stringify','format','mail:queue:%s','emit','mail_queue:save','exports','lodash'];(function(_0x4a1f1c,_0x121b61){var _0x52fa6a=function(_0x1b6d69){while(--_0x1b6d69){_0x4a1f1c['push'](_0x4a1f1c['shift']());}};_0x52fa6a(++_0x121b61);}(_0x99a0,0x121));var _0x099a=function(_0x28e5f8,_0x8ad759){_0x28e5f8=_0x28e5f8-0x0;var _0x16ea33=_0x99a0[_0x28e5f8];return _0x16ea33;};'use strict';var _=require(_0x099a('0x0'));var md5=require(_0x099a('0x1'));var util=require('util');var Redis=require('ioredis');var config=require('../../../config/environment');config['redis']=_[_0x099a('0x2')](config[_0x099a('0x3')],{'host':'localhost','port':0x18eb});var io=require(_0x099a('0x4'))(new Redis(config[_0x099a('0x3')]));function MailQueue(_0x3cf2f5){this['id']=_0x3cf2f5['id']||0x0;this[_0x099a('0x5')]=_0x3cf2f5[_0x099a('0x5')]||'';this[_0x099a('0x6')]=_0x3cf2f5['timeout']||0xa;this[_0x099a('0x7')]=_0x3cf2f5[_0x099a('0x7')]||_0x099a('0x8');this['Agents']=_0x3cf2f5[_0x099a('0x9')];this[_0x099a('0xa')]={};this[_0x099a('0xb')]=0x0;this[_0x099a('0x1')]='';this[_0x099a('0xc')]();this[_0x099a('0xd')]();}MailQueue[_0x099a('0xe')][_0x099a('0xc')]=function(){var _0x17efb8=this[_0x099a('0xa')][_0x099a('0xf')];this[_0x099a('0xa')]=_[_0x099a('0x10')](this[_0x099a('0x9')],'id');this[_0x099a('0xa')]['_rr']=_0x17efb8;};MailQueue[_0x099a('0xe')]['updateRealtime']=function(){this[_0x099a('0x11')]=0x0;this['paused']=0x0;for(var _0x249392=0x0;_0x249392<this[_0x099a('0x9')][_0x099a('0x12')];_0x249392+=0x1){if(this[_0x099a('0x9')][_0x249392][_0x099a('0x13')]){this[_0x099a('0x11')]+=0x1;}if(this['Agents'][_0x249392][_0x099a('0x14')]){this[_0x099a('0x15')]+=0x1;}}this[_0x099a('0x16')]=this[_0x099a('0x11')]-this['paused'];this[_0x099a('0x16')]=this['available']>=0x0?this[_0x099a('0x16')]:0x0;var _0x26bf41={'id':this['id'],'available':this[_0x099a('0x16')],'loggedIn':this['loggedIn'],'name':this[_0x099a('0x5')],'paused':this[_0x099a('0x15')],'waiting':this[_0x099a('0xb')]};var _0x211661=md5(JSON[_0x099a('0x17')](_0x26bf41));if(this['md5']!==_0x211661){this['md5']=_0x211661;io['to'](util[_0x099a('0x18')](_0x099a('0x19'),_0x26bf41[_0x099a('0x5')]))[_0x099a('0x1a')](_0x099a('0x1b'),_0x26bf41);}};module[_0x099a('0x1c')]=MailQueue;
\ No newline at end of file
+var _0xf417=['_rr','map','loggedIn','length','mailPause','paused','available','stringify','format','mail:queue:%s','emit','mail_queue:save','exports','md5','util','ioredis','redis','localhost','name','timeout','strategy','beepall','Agents','waiting','prototype','mapAgentsId'];(function(_0x24cc7f,_0x2e9ff6){var _0x2cc87f=function(_0x4dfa6d){while(--_0x4dfa6d){_0x24cc7f['push'](_0x24cc7f['shift']());}};_0x2cc87f(++_0x2e9ff6);}(_0xf417,0x8f));var _0x7f41=function(_0x595013,_0x65a215){_0x595013=_0x595013-0x0;var _0x2a29e3=_0xf417[_0x595013];return _0x2a29e3;};'use strict';var _=require('lodash');var md5=require(_0x7f41('0x0'));var util=require(_0x7f41('0x1'));var Redis=require(_0x7f41('0x2'));var config=require('../../../config/environment');config[_0x7f41('0x3')]=_['defaults'](config['redis'],{'host':_0x7f41('0x4'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));function MailQueue(_0x5ad014){this['id']=_0x5ad014['id']||0x0;this['name']=_0x5ad014[_0x7f41('0x5')]||'';this['timeout']=_0x5ad014[_0x7f41('0x6')]||0xa;this[_0x7f41('0x7')]=_0x5ad014['strategy']||_0x7f41('0x8');this['Agents']=_0x5ad014[_0x7f41('0x9')];this['mapAgentsId']={};this[_0x7f41('0xa')]=0x0;this[_0x7f41('0x0')]='';this['updateRouting']();this['updateRealtime']();}MailQueue[_0x7f41('0xb')]['updateRouting']=function(){var _0x4bc8ff=this[_0x7f41('0xc')][_0x7f41('0xd')];this[_0x7f41('0xc')]=_[_0x7f41('0xe')](this[_0x7f41('0x9')],'id');this[_0x7f41('0xc')][_0x7f41('0xd')]=_0x4bc8ff;};MailQueue['prototype']['updateRealtime']=function(){this[_0x7f41('0xf')]=0x0;this['paused']=0x0;for(var _0x568eea=0x0;_0x568eea<this[_0x7f41('0x9')][_0x7f41('0x10')];_0x568eea+=0x1){if(this[_0x7f41('0x9')][_0x568eea]['online']){this[_0x7f41('0xf')]+=0x1;}if(this['Agents'][_0x568eea][_0x7f41('0x11')]){this[_0x7f41('0x12')]+=0x1;}}this[_0x7f41('0x13')]=this['loggedIn']-this[_0x7f41('0x12')];this[_0x7f41('0x13')]=this[_0x7f41('0x13')]>=0x0?this['available']:0x0;var _0xeb2394={'id':this['id'],'available':this[_0x7f41('0x13')],'loggedIn':this['loggedIn'],'name':this[_0x7f41('0x5')],'paused':this[_0x7f41('0x12')],'waiting':this[_0x7f41('0xa')]};var _0x493172=md5(JSON[_0x7f41('0x14')](_0xeb2394));if(this['md5']!==_0x493172){this['md5']=_0x493172;io['to'](util[_0x7f41('0x15')](_0x7f41('0x16'),_0xeb2394[_0x7f41('0x5')]))[_0x7f41('0x17')](_0x7f41('0x18'),_0xeb2394);}};module[_0x7f41('0x19')]=MailQueue;
\ No newline at end of file
index 86bebd9..cffc1fe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0a68=['openchannel_queue:save','exports','util','../../../config/environment','redis','localhost','socket.io-emitter','name','timeout','strategy','beepall','Agents','mapAgentsId','waiting','md5','updateRouting','updateRealtime','prototype','_rr','map','paused','length','openchannelPause','available','loggedIn','format','openchannel:queue:%s','emit'];(function(_0x187c68,_0x372f24){var _0x1f0d8b=function(_0x1ffa43){while(--_0x1ffa43){_0x187c68['push'](_0x187c68['shift']());}};_0x1f0d8b(++_0x372f24);}(_0x0a68,0x11a));var _0x80a6=function(_0x407674,_0x47338f){_0x407674=_0x407674-0x0;var _0x3f7434=_0x0a68[_0x407674];return _0x3f7434;};'use strict';var _=require('lodash');var md5=require('md5');var util=require(_0x80a6('0x0'));var Redis=require('ioredis');var config=require(_0x80a6('0x1'));config[_0x80a6('0x2')]=_['defaults'](config[_0x80a6('0x2')],{'host':_0x80a6('0x3'),'port':0x18eb});var io=require(_0x80a6('0x4'))(new Redis(config[_0x80a6('0x2')]));function OpenchannelQueue(_0xc5f0b6){this['id']=_0xc5f0b6['id']||0x0;this[_0x80a6('0x5')]=_0xc5f0b6['name']||'';this['timeout']=_0xc5f0b6[_0x80a6('0x6')]||0xa;this[_0x80a6('0x7')]=_0xc5f0b6[_0x80a6('0x7')]||_0x80a6('0x8');this[_0x80a6('0x9')]=_0xc5f0b6[_0x80a6('0x9')];this[_0x80a6('0xa')]={};this[_0x80a6('0xb')]=0x0;this[_0x80a6('0xc')]='';this[_0x80a6('0xd')]();this[_0x80a6('0xe')]();}OpenchannelQueue[_0x80a6('0xf')][_0x80a6('0xd')]=function(){var _0xd349a6=this[_0x80a6('0xa')][_0x80a6('0x10')];this[_0x80a6('0xa')]=_[_0x80a6('0x11')](this[_0x80a6('0x9')],'id');this[_0x80a6('0xa')][_0x80a6('0x10')]=_0xd349a6;};OpenchannelQueue[_0x80a6('0xf')][_0x80a6('0xe')]=function(){this['loggedIn']=0x0;this[_0x80a6('0x12')]=0x0;for(var _0x399d89=0x0;_0x399d89<this[_0x80a6('0x9')][_0x80a6('0x13')];_0x399d89+=0x1){if(this['Agents'][_0x399d89]['online']){this['loggedIn']+=0x1;}if(this['Agents'][_0x399d89][_0x80a6('0x14')]){this[_0x80a6('0x12')]+=0x1;}}this[_0x80a6('0x15')]=this[_0x80a6('0x16')]-this['paused'];this[_0x80a6('0x15')]=this[_0x80a6('0x15')]>=0x0?this[_0x80a6('0x15')]:0x0;var _0x155a0e={'id':this['id'],'available':this[_0x80a6('0x15')],'loggedIn':this[_0x80a6('0x16')],'name':this[_0x80a6('0x5')],'paused':this[_0x80a6('0x12')],'waiting':this[_0x80a6('0xb')]};var _0x2bb6a6=md5(JSON['stringify'](_0x155a0e));if(this['md5']!==_0x2bb6a6){this[_0x80a6('0xc')]=_0x2bb6a6;io['to'](util[_0x80a6('0x17')](_0x80a6('0x18'),_0x155a0e['name']))[_0x80a6('0x19')](_0x80a6('0x1a'),_0x155a0e);}};module[_0x80a6('0x1b')]=OpenchannelQueue;
\ No newline at end of file
+var _0xc3a1=['map','length','online','loggedIn','openchannelPause','paused','available','stringify','format','emit','md5','util','ioredis','redis','defaults','socket.io-emitter','name','timeout','strategy','beepall','Agents','waiting','updateRouting','updateRealtime','prototype','mapAgentsId','_rr'];(function(_0x38eb66,_0x3ed3e4){var _0x429ece=function(_0x234e13){while(--_0x234e13){_0x38eb66['push'](_0x38eb66['shift']());}};_0x429ece(++_0x3ed3e4);}(_0xc3a1,0x118));var _0x1c3a=function(_0x4979c4,_0x386c31){_0x4979c4=_0x4979c4-0x0;var _0xeae64a=_0xc3a1[_0x4979c4];return _0xeae64a;};'use strict';var _=require('lodash');var md5=require(_0x1c3a('0x0'));var util=require(_0x1c3a('0x1'));var Redis=require(_0x1c3a('0x2'));var config=require('../../../config/environment');config[_0x1c3a('0x3')]=_[_0x1c3a('0x4')](config[_0x1c3a('0x3')],{'host':'localhost','port':0x18eb});var io=require(_0x1c3a('0x5'))(new Redis(config[_0x1c3a('0x3')]));function OpenchannelQueue(_0x3342fe){this['id']=_0x3342fe['id']||0x0;this[_0x1c3a('0x6')]=_0x3342fe[_0x1c3a('0x6')]||'';this[_0x1c3a('0x7')]=_0x3342fe[_0x1c3a('0x7')]||0xa;this['strategy']=_0x3342fe[_0x1c3a('0x8')]||_0x1c3a('0x9');this[_0x1c3a('0xa')]=_0x3342fe[_0x1c3a('0xa')];this['mapAgentsId']={};this[_0x1c3a('0xb')]=0x0;this['md5']='';this[_0x1c3a('0xc')]();this[_0x1c3a('0xd')]();}OpenchannelQueue[_0x1c3a('0xe')][_0x1c3a('0xc')]=function(){var _0x23f71f=this[_0x1c3a('0xf')][_0x1c3a('0x10')];this[_0x1c3a('0xf')]=_[_0x1c3a('0x11')](this['Agents'],'id');this[_0x1c3a('0xf')][_0x1c3a('0x10')]=_0x23f71f;};OpenchannelQueue[_0x1c3a('0xe')][_0x1c3a('0xd')]=function(){this['loggedIn']=0x0;this['paused']=0x0;for(var _0x1fe8ac=0x0;_0x1fe8ac<this[_0x1c3a('0xa')][_0x1c3a('0x12')];_0x1fe8ac+=0x1){if(this[_0x1c3a('0xa')][_0x1fe8ac][_0x1c3a('0x13')]){this[_0x1c3a('0x14')]+=0x1;}if(this[_0x1c3a('0xa')][_0x1fe8ac][_0x1c3a('0x15')]){this[_0x1c3a('0x16')]+=0x1;}}this[_0x1c3a('0x17')]=this[_0x1c3a('0x14')]-this[_0x1c3a('0x16')];this[_0x1c3a('0x17')]=this[_0x1c3a('0x17')]>=0x0?this[_0x1c3a('0x17')]:0x0;var _0x1e472a={'id':this['id'],'available':this[_0x1c3a('0x17')],'loggedIn':this['loggedIn'],'name':this[_0x1c3a('0x6')],'paused':this['paused'],'waiting':this[_0x1c3a('0xb')]};var _0x28ea8a=md5(JSON[_0x1c3a('0x18')](_0x1e472a));if(this[_0x1c3a('0x0')]!==_0x28ea8a){this[_0x1c3a('0x0')]=_0x28ea8a;io['to'](util[_0x1c3a('0x19')]('openchannel:queue:%s',_0x1e472a[_0x1c3a('0x6')]))[_0x1c3a('0x1a')]('openchannel_queue:save',_0x1e472a);}};module['exports']=OpenchannelQueue;
\ No newline at end of file
index 90b323d..480ff50 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe002=['mapAgentsId','waiting','prototype','updateRouting','_rr','map','updateRealtime','loggedIn','paused','available','sms:queue:%s','emit','exports','lodash','md5','util','../../../config/environment','redis','defaults','localhost','socket.io-emitter','name','timeout','strategy','beepall','Agents'];(function(_0xdfd788,_0x2c4cbb){var _0x1e0c32=function(_0x2b60a8){while(--_0x2b60a8){_0xdfd788['push'](_0xdfd788['shift']());}};_0x1e0c32(++_0x2c4cbb);}(_0xe002,0xf7));var _0x2e00=function(_0x459423,_0x3416a8){_0x459423=_0x459423-0x0;var _0x42ed14=_0xe002[_0x459423];return _0x42ed14;};'use strict';var _=require(_0x2e00('0x0'));var md5=require(_0x2e00('0x1'));var util=require(_0x2e00('0x2'));var Redis=require('ioredis');var config=require(_0x2e00('0x3'));config[_0x2e00('0x4')]=_[_0x2e00('0x5')](config['redis'],{'host':_0x2e00('0x6'),'port':0x18eb});var io=require(_0x2e00('0x7'))(new Redis(config[_0x2e00('0x4')]));function SmsQueue(_0x34b6ba){this['id']=_0x34b6ba['id']||0x0;this[_0x2e00('0x8')]=_0x34b6ba[_0x2e00('0x8')]||'';this[_0x2e00('0x9')]=_0x34b6ba[_0x2e00('0x9')]||0xa;this['strategy']=_0x34b6ba[_0x2e00('0xa')]||_0x2e00('0xb');this['Agents']=_0x34b6ba[_0x2e00('0xc')];this[_0x2e00('0xd')]={};this[_0x2e00('0xe')]=0x0;this[_0x2e00('0x1')]='';this['updateRouting']();this['updateRealtime']();}SmsQueue[_0x2e00('0xf')][_0x2e00('0x10')]=function(){var _0x2c9811=this['mapAgentsId'][_0x2e00('0x11')];this[_0x2e00('0xd')]=_[_0x2e00('0x12')](this[_0x2e00('0xc')],'id');this[_0x2e00('0xd')]['_rr']=_0x2c9811;};SmsQueue['prototype'][_0x2e00('0x13')]=function(){this[_0x2e00('0x14')]=0x0;this[_0x2e00('0x15')]=0x0;for(var _0x24c603=0x0;_0x24c603<this[_0x2e00('0xc')]['length'];_0x24c603+=0x1){if(this[_0x2e00('0xc')][_0x24c603]['online']){this[_0x2e00('0x14')]+=0x1;}if(this[_0x2e00('0xc')][_0x24c603]['smsPause']){this[_0x2e00('0x15')]+=0x1;}}this[_0x2e00('0x16')]=this[_0x2e00('0x14')]-this[_0x2e00('0x15')];this['available']=this[_0x2e00('0x16')]>=0x0?this[_0x2e00('0x16')]:0x0;var _0x505792={'id':this['id'],'available':this[_0x2e00('0x16')],'loggedIn':this[_0x2e00('0x14')],'name':this[_0x2e00('0x8')],'paused':this['paused'],'waiting':this[_0x2e00('0xe')]};var _0x2e1432=md5(JSON['stringify'](_0x505792));if(this['md5']!==_0x2e1432){this['md5']=_0x2e1432;io['to'](util['format'](_0x2e00('0x17'),_0x505792[_0x2e00('0x8')]))[_0x2e00('0x18')]('sms_queue:save',_0x505792);}};module[_0x2e00('0x19')]=SmsQueue;
\ No newline at end of file
+var _0xb085=['mapAgentsId','paused','online','loggedIn','smsPause','available','stringify','sms:queue:%s','emit','exports','lodash','md5','ioredis','../../../config/environment','redis','defaults','localhost','socket.io-emitter','name','timeout','strategy','beepall','Agents','waiting','updateRouting','updateRealtime','prototype','_rr','map'];(function(_0x1a3114,_0x3683d2){var _0x4da04c=function(_0x2ebddf){while(--_0x2ebddf){_0x1a3114['push'](_0x1a3114['shift']());}};_0x4da04c(++_0x3683d2);}(_0xb085,0x9b));var _0x5b08=function(_0x4c91a0,_0x22828c){_0x4c91a0=_0x4c91a0-0x0;var _0x37404a=_0xb085[_0x4c91a0];return _0x37404a;};'use strict';var _=require(_0x5b08('0x0'));var md5=require(_0x5b08('0x1'));var util=require('util');var Redis=require(_0x5b08('0x2'));var config=require(_0x5b08('0x3'));config[_0x5b08('0x4')]=_[_0x5b08('0x5')](config[_0x5b08('0x4')],{'host':_0x5b08('0x6'),'port':0x18eb});var io=require(_0x5b08('0x7'))(new Redis(config[_0x5b08('0x4')]));function SmsQueue(_0xc17894){this['id']=_0xc17894['id']||0x0;this['name']=_0xc17894[_0x5b08('0x8')]||'';this[_0x5b08('0x9')]=_0xc17894[_0x5b08('0x9')]||0xa;this[_0x5b08('0xa')]=_0xc17894[_0x5b08('0xa')]||_0x5b08('0xb');this[_0x5b08('0xc')]=_0xc17894['Agents'];this['mapAgentsId']={};this[_0x5b08('0xd')]=0x0;this[_0x5b08('0x1')]='';this[_0x5b08('0xe')]();this[_0x5b08('0xf')]();}SmsQueue[_0x5b08('0x10')][_0x5b08('0xe')]=function(){var _0xe3f093=this['mapAgentsId'][_0x5b08('0x11')];this['mapAgentsId']=_[_0x5b08('0x12')](this[_0x5b08('0xc')],'id');this[_0x5b08('0x13')][_0x5b08('0x11')]=_0xe3f093;};SmsQueue['prototype']['updateRealtime']=function(){this['loggedIn']=0x0;this[_0x5b08('0x14')]=0x0;for(var _0x3430f5=0x0;_0x3430f5<this[_0x5b08('0xc')]['length'];_0x3430f5+=0x1){if(this[_0x5b08('0xc')][_0x3430f5][_0x5b08('0x15')]){this[_0x5b08('0x16')]+=0x1;}if(this[_0x5b08('0xc')][_0x3430f5][_0x5b08('0x17')]){this[_0x5b08('0x14')]+=0x1;}}this[_0x5b08('0x18')]=this['loggedIn']-this[_0x5b08('0x14')];this['available']=this[_0x5b08('0x18')]>=0x0?this['available']:0x0;var _0x1271c9={'id':this['id'],'available':this[_0x5b08('0x18')],'loggedIn':this['loggedIn'],'name':this[_0x5b08('0x8')],'paused':this[_0x5b08('0x14')],'waiting':this[_0x5b08('0xd')]};var _0xac5a24=md5(JSON[_0x5b08('0x19')](_0x1271c9));if(this[_0x5b08('0x1')]!==_0xac5a24){this[_0x5b08('0x1')]=_0xac5a24;io['to'](util['format'](_0x5b08('0x1a'),_0x1271c9[_0x5b08('0x8')]))[_0x5b08('0x1b')]('sms_queue:save',_0x1271c9);}};module[_0x5b08('0x1c')]=SmsQueue;
\ No newline at end of file
index 80774c9..7f43c36 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x380b=['initSmsQueues','updateRouting','exports','bluebird','util','../model/agent','../model/interval','../model/openchannelQueue','../model/chatQueue','../model/smsQueue','../model/mailQueue','../model/faxQueue','agents','intervals','chatQueues','smsQueues','mailQueues','faxQueues','chatQueuesWaitingInteractions','faxQueuesWaitingInteractions','mapKeys','hasOwnProperty','length','isUndefined','mergeFromDatabase','initIntervals','prototype','openchannelQueues','updateRealtime','initChatQueues'];(function(_0x2d6197,_0x82ebfb){var _0x4d0e75=function(_0x577e7a){while(--_0x577e7a){_0x2d6197['push'](_0x2d6197['shift']());}};_0x4d0e75(++_0x82ebfb);}(_0x380b,0xf3));var _0xb380=function(_0x429fdf,_0x319a7c){_0x429fdf=_0x429fdf-0x0;var _0x21b180=_0x380b[_0x429fdf];return _0x21b180;};'use strict';var BPromise=require(_0xb380('0x0'));var util=require(_0xb380('0x1'));var _=require('lodash');var moment=require('moment');var Agent=require(_0xb380('0x2'));var Interval=require(_0xb380('0x3'));var OpenchannelQueue=require(_0xb380('0x4'));var ChatQueue=require(_0xb380('0x5'));var SmsQueue=require(_0xb380('0x6'));var MailQueue=require(_0xb380('0x7'));var FaxQueue=require(_0xb380('0x8'));var Realtime=function(){this[_0xb380('0x9')]={};this[_0xb380('0xa')]={};this['openchannelQueues']={};this[_0xb380('0xb')]={};this[_0xb380('0xc')]={};this[_0xb380('0xd')]={};this[_0xb380('0xe')]={};this[_0xb380('0xf')]={};this['mailQueuesWaitingInteractions']={};this['openchannelQueuesWaitingInteractions']={};this['smsQueuesWaitingInteractions']={};this[_0xb380('0x10')]={};};function freeIsNotKey(_0x221a0c,_0x10cae6,_0x20c045){var _0x45b22a=_[_0xb380('0x11')](_0x221a0c,function(_0x4b1e60,_0x32873f){return _0x4b1e60[_0x20c045];});for(var _0x468c00 in _0x10cae6){if(_0x10cae6[_0xb380('0x12')](_0x468c00)){if(!_0x45b22a[_0x468c00]){delete _0x10cae6[_0x468c00];}}}}Realtime['prototype']['mergeFromDatabase']=function(_0x16ab38,_0x2bdbc6){for(var _0x1058f5 in _0x2bdbc6){if(_0x16ab38[_0xb380('0x12')](_0x1058f5)){_0x16ab38[_0x1058f5]=_0x2bdbc6[_0x1058f5];}}};Realtime['prototype']['initAgents']=function(){var _0xba7d8d=this;return function(_0x1d8894){if(_0x1d8894){freeIsNotKey(_0x1d8894,_0xba7d8d[_0xb380('0x9')],'id');for(var _0x1090f4=0x0,_0x1b85f8={},_0x1d62b2={};_0x1090f4<_0x1d8894[_0xb380('0x13')];_0x1090f4+=0x1){_0x1b85f8=_0x1d8894[_0x1090f4];if(_[_0xb380('0x14')](_0xba7d8d[_0xb380('0x9')][_0x1b85f8['id']])){_0xba7d8d[_0xb380('0x9')][_0x1b85f8['id']]=new Agent(_0x1b85f8);}else{_0xba7d8d[_0xb380('0x15')](_0xba7d8d[_0xb380('0x9')][_0x1b85f8['id']],_0x1b85f8);}}}return _0xba7d8d[_0xb380('0x9')];};};Realtime['prototype'][_0xb380('0x16')]=function(){var _0x5282f3=this;return function(_0x32885e){if(_0x32885e){freeIsNotKey(_0x32885e,_0x5282f3[_0xb380('0xa')],'id');for(var _0x3df14e=0x0,_0x453502={},_0x49689c={};_0x3df14e<_0x32885e['length'];_0x3df14e+=0x1){_0x453502=_0x32885e[_0x3df14e];if(_['isUndefined'](_0x5282f3[_0xb380('0xa')][_0x453502['id']])){_0x5282f3['intervals'][_0x453502['id']]=new Interval(_0x453502);}else{_0x5282f3[_0xb380('0x15')](_0x5282f3[_0xb380('0xa')][_0x453502['id']],_0x453502);}}}return _0x5282f3[_0xb380('0xa')];};};Realtime[_0xb380('0x17')]['initOpenchannelQueues']=function(){var _0x55be40=this;return function(_0x1f2f89){if(_0x1f2f89){freeIsNotKey(_0x1f2f89,_0x55be40[_0xb380('0x18')],'id');for(var _0x410d6f=0x0,_0x2acf16={},_0x3d8106={};_0x410d6f<_0x1f2f89[_0xb380('0x13')];_0x410d6f+=0x1){_0x2acf16=_0x1f2f89[_0x410d6f];if(_['isUndefined'](_0x55be40[_0xb380('0x18')][_0x2acf16['id']])){_0x55be40[_0xb380('0x18')][_0x2acf16['id']]=new OpenchannelQueue(_0x2acf16);}else{_0x55be40[_0xb380('0x15')](_0x55be40[_0xb380('0x18')][_0x2acf16['id']],_0x2acf16);}_0x55be40[_0xb380('0x18')][_0x2acf16['id']]['updateRouting']();_0x55be40['openchannelQueues'][_0x2acf16['id']][_0xb380('0x19')]();}}return _0x55be40[_0xb380('0x18')];};};Realtime['prototype'][_0xb380('0x1a')]=function(){var _0x16ac9f=this;return function(_0x589b36){if(_0x589b36){freeIsNotKey(_0x589b36,_0x16ac9f[_0xb380('0xb')],'id');for(var _0x278735=0x0,_0x1b1828={},_0x442061={};_0x278735<_0x589b36[_0xb380('0x13')];_0x278735+=0x1){_0x1b1828=_0x589b36[_0x278735];if(_[_0xb380('0x14')](_0x16ac9f[_0xb380('0xb')][_0x1b1828['id']])){_0x16ac9f['chatQueues'][_0x1b1828['id']]=new ChatQueue(_0x1b1828);}else{_0x16ac9f[_0xb380('0x15')](_0x16ac9f['chatQueues'][_0x1b1828['id']],_0x1b1828);}_0x16ac9f[_0xb380('0xb')][_0x1b1828['id']]['updateRouting']();_0x16ac9f[_0xb380('0xb')][_0x1b1828['id']][_0xb380('0x19')]();}}return _0x16ac9f['chatQueues'];};};Realtime['prototype'][_0xb380('0x1b')]=function(){var _0x396342=this;return function(_0x135678){if(_0x135678){freeIsNotKey(_0x135678,_0x396342[_0xb380('0xc')],'id');for(var _0x50cb2b=0x0,_0x3bd616={},_0x35eb94={};_0x50cb2b<_0x135678[_0xb380('0x13')];_0x50cb2b+=0x1){_0x3bd616=_0x135678[_0x50cb2b];if(_['isUndefined'](_0x396342[_0xb380('0xc')][_0x3bd616['id']])){_0x396342[_0xb380('0xc')][_0x3bd616['id']]=new SmsQueue(_0x3bd616);}else{_0x396342[_0xb380('0x15')](_0x396342[_0xb380('0xc')][_0x3bd616['id']],_0x3bd616);}_0x396342[_0xb380('0xc')][_0x3bd616['id']][_0xb380('0x1c')]();_0x396342[_0xb380('0xc')][_0x3bd616['id']][_0xb380('0x19')]();}}return _0x396342[_0xb380('0xc')];};};Realtime['prototype']['initMailQueues']=function(){var _0x26f43e=this;return function(_0x28fe74){if(_0x28fe74){freeIsNotKey(_0x28fe74,_0x26f43e['mailQueues'],'id');for(var _0x2b5d48=0x0,_0x5d70e9={},_0x58fbb7={};_0x2b5d48<_0x28fe74[_0xb380('0x13')];_0x2b5d48+=0x1){_0x5d70e9=_0x28fe74[_0x2b5d48];if(_[_0xb380('0x14')](_0x26f43e[_0xb380('0xd')][_0x5d70e9['id']])){_0x26f43e[_0xb380('0xd')][_0x5d70e9['id']]=new MailQueue(_0x5d70e9);}else{_0x26f43e['mergeFromDatabase'](_0x26f43e[_0xb380('0xd')][_0x5d70e9['id']],_0x5d70e9);}_0x26f43e['mailQueues'][_0x5d70e9['id']][_0xb380('0x1c')]();_0x26f43e[_0xb380('0xd')][_0x5d70e9['id']][_0xb380('0x19')]();}}return _0x26f43e[_0xb380('0xd')];};};Realtime[_0xb380('0x17')]['initFaxQueues']=function(){var _0x2744d1=this;return function(_0xea2386){if(_0xea2386){freeIsNotKey(_0xea2386,_0x2744d1[_0xb380('0xe')],'id');for(var _0x4eaf14=0x0,_0xc3d07d={},_0x25d221={};_0x4eaf14<_0xea2386['length'];_0x4eaf14+=0x1){_0xc3d07d=_0xea2386[_0x4eaf14];if(_[_0xb380('0x14')](_0x2744d1['faxQueues'][_0xc3d07d['id']])){_0x2744d1[_0xb380('0xe')][_0xc3d07d['id']]=new FaxQueue(_0xc3d07d);}else{_0x2744d1[_0xb380('0x15')](_0x2744d1[_0xb380('0xe')][_0xc3d07d['id']],_0xc3d07d);}_0x2744d1[_0xb380('0xe')][_0xc3d07d['id']]['updateRouting']();_0x2744d1['faxQueues'][_0xc3d07d['id']][_0xb380('0x19')]();}}return _0x2744d1[_0xb380('0xe')];};};module[_0xb380('0x1d')]=Realtime;
\ No newline at end of file
+var _0x90a5=['agents','chatQueues','faxQueues','chatQueuesWaitingInteractions','mailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions','faxQueuesWaitingInteractions','hasOwnProperty','prototype','initAgents','isUndefined','mergeFromDatabase','intervals','initOpenchannelQueues','length','openchannelQueues','updateRealtime','initChatQueues','updateRouting','initSmsQueues','smsQueues','mailQueues','initFaxQueues','exports','bluebird','util','lodash','moment','../model/agent','../model/chatQueue','../model/mailQueue','../model/faxQueue'];(function(_0x29d915,_0x54a040){var _0x160f86=function(_0x237dfa){while(--_0x237dfa){_0x29d915['push'](_0x29d915['shift']());}};_0x160f86(++_0x54a040);}(_0x90a5,0x163));var _0x590a=function(_0x5a54fc,_0x21f0e4){_0x5a54fc=_0x5a54fc-0x0;var _0x38b566=_0x90a5[_0x5a54fc];return _0x38b566;};'use strict';var BPromise=require(_0x590a('0x0'));var util=require(_0x590a('0x1'));var _=require(_0x590a('0x2'));var moment=require(_0x590a('0x3'));var Agent=require(_0x590a('0x4'));var Interval=require('../model/interval');var OpenchannelQueue=require('../model/openchannelQueue');var ChatQueue=require(_0x590a('0x5'));var SmsQueue=require('../model/smsQueue');var MailQueue=require(_0x590a('0x6'));var FaxQueue=require(_0x590a('0x7'));var Realtime=function(){this[_0x590a('0x8')]={};this['intervals']={};this['openchannelQueues']={};this[_0x590a('0x9')]={};this['smsQueues']={};this['mailQueues']={};this[_0x590a('0xa')]={};this[_0x590a('0xb')]={};this[_0x590a('0xc')]={};this[_0x590a('0xd')]={};this[_0x590a('0xe')]={};this[_0x590a('0xf')]={};};function freeIsNotKey(_0x43c78b,_0x3e3d47,_0xe57154){var _0x5d13d0=_['mapKeys'](_0x43c78b,function(_0x594372,_0x587e98){return _0x594372[_0xe57154];});for(var _0x43f3d0 in _0x3e3d47){if(_0x3e3d47[_0x590a('0x10')](_0x43f3d0)){if(!_0x5d13d0[_0x43f3d0]){delete _0x3e3d47[_0x43f3d0];}}}}Realtime[_0x590a('0x11')]['mergeFromDatabase']=function(_0x519088,_0x1da157){for(var _0x3311ef in _0x1da157){if(_0x519088[_0x590a('0x10')](_0x3311ef)){_0x519088[_0x3311ef]=_0x1da157[_0x3311ef];}}};Realtime[_0x590a('0x11')][_0x590a('0x12')]=function(){var _0x4e4dd2=this;return function(_0x4486fc){if(_0x4486fc){freeIsNotKey(_0x4486fc,_0x4e4dd2[_0x590a('0x8')],'id');for(var _0x124d57=0x0,_0x21fd60={},_0x1ea5d0={};_0x124d57<_0x4486fc['length'];_0x124d57+=0x1){_0x21fd60=_0x4486fc[_0x124d57];if(_[_0x590a('0x13')](_0x4e4dd2[_0x590a('0x8')][_0x21fd60['id']])){_0x4e4dd2['agents'][_0x21fd60['id']]=new Agent(_0x21fd60);}else{_0x4e4dd2[_0x590a('0x14')](_0x4e4dd2[_0x590a('0x8')][_0x21fd60['id']],_0x21fd60);}}}return _0x4e4dd2[_0x590a('0x8')];};};Realtime[_0x590a('0x11')]['initIntervals']=function(){var _0x4f0dc2=this;return function(_0x360496){if(_0x360496){freeIsNotKey(_0x360496,_0x4f0dc2[_0x590a('0x15')],'id');for(var _0x800c04=0x0,_0x27183d={},_0x2f0868={};_0x800c04<_0x360496['length'];_0x800c04+=0x1){_0x27183d=_0x360496[_0x800c04];if(_['isUndefined'](_0x4f0dc2[_0x590a('0x15')][_0x27183d['id']])){_0x4f0dc2['intervals'][_0x27183d['id']]=new Interval(_0x27183d);}else{_0x4f0dc2[_0x590a('0x14')](_0x4f0dc2[_0x590a('0x15')][_0x27183d['id']],_0x27183d);}}}return _0x4f0dc2[_0x590a('0x15')];};};Realtime[_0x590a('0x11')][_0x590a('0x16')]=function(){var _0x39f90b=this;return function(_0x394ef5){if(_0x394ef5){freeIsNotKey(_0x394ef5,_0x39f90b['openchannelQueues'],'id');for(var _0x236bda=0x0,_0x14d88e={},_0x18e142={};_0x236bda<_0x394ef5[_0x590a('0x17')];_0x236bda+=0x1){_0x14d88e=_0x394ef5[_0x236bda];if(_[_0x590a('0x13')](_0x39f90b[_0x590a('0x18')][_0x14d88e['id']])){_0x39f90b[_0x590a('0x18')][_0x14d88e['id']]=new OpenchannelQueue(_0x14d88e);}else{_0x39f90b[_0x590a('0x14')](_0x39f90b[_0x590a('0x18')][_0x14d88e['id']],_0x14d88e);}_0x39f90b[_0x590a('0x18')][_0x14d88e['id']]['updateRouting']();_0x39f90b[_0x590a('0x18')][_0x14d88e['id']][_0x590a('0x19')]();}}return _0x39f90b[_0x590a('0x18')];};};Realtime[_0x590a('0x11')][_0x590a('0x1a')]=function(){var _0x1de485=this;return function(_0x675810){if(_0x675810){freeIsNotKey(_0x675810,_0x1de485[_0x590a('0x9')],'id');for(var _0x7e35db=0x0,_0x1b59eb={},_0x57dc4f={};_0x7e35db<_0x675810[_0x590a('0x17')];_0x7e35db+=0x1){_0x1b59eb=_0x675810[_0x7e35db];if(_['isUndefined'](_0x1de485[_0x590a('0x9')][_0x1b59eb['id']])){_0x1de485[_0x590a('0x9')][_0x1b59eb['id']]=new ChatQueue(_0x1b59eb);}else{_0x1de485[_0x590a('0x14')](_0x1de485[_0x590a('0x9')][_0x1b59eb['id']],_0x1b59eb);}_0x1de485[_0x590a('0x9')][_0x1b59eb['id']][_0x590a('0x1b')]();_0x1de485[_0x590a('0x9')][_0x1b59eb['id']][_0x590a('0x19')]();}}return _0x1de485[_0x590a('0x9')];};};Realtime[_0x590a('0x11')][_0x590a('0x1c')]=function(){var _0x361a8f=this;return function(_0x5cb99c){if(_0x5cb99c){freeIsNotKey(_0x5cb99c,_0x361a8f['smsQueues'],'id');for(var _0x20a8db=0x0,_0x2bc40f={},_0x5f7ca6={};_0x20a8db<_0x5cb99c[_0x590a('0x17')];_0x20a8db+=0x1){_0x2bc40f=_0x5cb99c[_0x20a8db];if(_[_0x590a('0x13')](_0x361a8f[_0x590a('0x1d')][_0x2bc40f['id']])){_0x361a8f[_0x590a('0x1d')][_0x2bc40f['id']]=new SmsQueue(_0x2bc40f);}else{_0x361a8f[_0x590a('0x14')](_0x361a8f[_0x590a('0x1d')][_0x2bc40f['id']],_0x2bc40f);}_0x361a8f[_0x590a('0x1d')][_0x2bc40f['id']][_0x590a('0x1b')]();_0x361a8f[_0x590a('0x1d')][_0x2bc40f['id']][_0x590a('0x19')]();}}return _0x361a8f['smsQueues'];};};Realtime[_0x590a('0x11')]['initMailQueues']=function(){var _0x4e254b=this;return function(_0x5c9076){if(_0x5c9076){freeIsNotKey(_0x5c9076,_0x4e254b[_0x590a('0x1e')],'id');for(var _0x22353e=0x0,_0x34a08c={},_0x2a48d0={};_0x22353e<_0x5c9076[_0x590a('0x17')];_0x22353e+=0x1){_0x34a08c=_0x5c9076[_0x22353e];if(_[_0x590a('0x13')](_0x4e254b[_0x590a('0x1e')][_0x34a08c['id']])){_0x4e254b[_0x590a('0x1e')][_0x34a08c['id']]=new MailQueue(_0x34a08c);}else{_0x4e254b[_0x590a('0x14')](_0x4e254b['mailQueues'][_0x34a08c['id']],_0x34a08c);}_0x4e254b[_0x590a('0x1e')][_0x34a08c['id']][_0x590a('0x1b')]();_0x4e254b[_0x590a('0x1e')][_0x34a08c['id']][_0x590a('0x19')]();}}return _0x4e254b['mailQueues'];};};Realtime[_0x590a('0x11')][_0x590a('0x1f')]=function(){var _0x3b47bc=this;return function(_0x10417c){if(_0x10417c){freeIsNotKey(_0x10417c,_0x3b47bc[_0x590a('0xa')],'id');for(var _0x5c963c=0x0,_0x5cc49c={},_0x2bca74={};_0x5c963c<_0x10417c[_0x590a('0x17')];_0x5c963c+=0x1){_0x5cc49c=_0x10417c[_0x5c963c];if(_[_0x590a('0x13')](_0x3b47bc[_0x590a('0xa')][_0x5cc49c['id']])){_0x3b47bc[_0x590a('0xa')][_0x5cc49c['id']]=new FaxQueue(_0x5cc49c);}else{_0x3b47bc[_0x590a('0x14')](_0x3b47bc[_0x590a('0xa')][_0x5cc49c['id']],_0x5cc49c);}_0x3b47bc[_0x590a('0xa')][_0x5cc49c['id']][_0x590a('0x1b')]();_0x3b47bc[_0x590a('0xa')][_0x5cc49c['id']][_0x590a('0x19')]();}}return _0x3b47bc['faxQueues'];};};module[_0x590a('0x20')]=Realtime;
\ No newline at end of file
index 1d5e182..4424808 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd779=['../client','update','Request','UpdateChatInteraction','updateChatInteraction','addTags','AddTagsToChatInteraction','addTagsToChatInteraction'];(function(_0x2d5205,_0x3d7a3e){var _0x495ce3=function(_0xff5fe2){while(--_0xff5fe2){_0x2d5205['push'](_0x2d5205['shift']());}};_0x495ce3(++_0x3d7a3e);}(_0xd779,0x198));var _0x9d77=function(_0x340668,_0x13e64d){_0x340668=_0x340668-0x0;var _0x401e77=_0xd779[_0x340668];return _0x401e77;};'use strict';var client=require(_0x9d77('0x0'));exports[_0x9d77('0x1')]=function(_0x1c8689,_0x1b7683){return client[_0x9d77('0x2')](_0x9d77('0x3'),{'body':_0x1b7683,'options':{'where':{'id':_0x1c8689}},'log':_0x9d77('0x4')});};exports[_0x9d77('0x5')]=function(_0x115130,_0x46cd0f){return client[_0x9d77('0x2')](_0x9d77('0x6'),{'body':_0x46cd0f,'options':{'where':{'id':_0x115130}},'log':_0x9d77('0x7')});};
\ No newline at end of file
+var _0x9145=['UpdateChatInteraction','updateChatInteraction','addTags','AddTagsToChatInteraction','../client'];(function(_0x11f226,_0x491e30){var _0x30be77=function(_0x2049bd){while(--_0x2049bd){_0x11f226['push'](_0x11f226['shift']());}};_0x30be77(++_0x491e30);}(_0x9145,0xc7));var _0x5914=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0x9145[_0x501510];return _0x1e6ee5;};'use strict';var client=require(_0x5914('0x0'));exports['update']=function(_0x16403b,_0x104802){return client['Request'](_0x5914('0x1'),{'body':_0x104802,'options':{'where':{'id':_0x16403b}},'log':_0x5914('0x2')});};exports[_0x5914('0x3')]=function(_0xfd4ada,_0x480bd4){return client['Request'](_0x5914('0x4'),{'body':_0x480bd4,'options':{'where':{'id':_0xfd4ada}},'log':'addTagsToChatInteraction'});};
\ No newline at end of file
index 9ccabd3..28f467e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc133=['CreateChatMessage','createChatMessage','../client','create','Request'];(function(_0x158b30,_0x311d83){var _0x52b63a=function(_0xde1d03){while(--_0xde1d03){_0x158b30['push'](_0x158b30['shift']());}};_0x52b63a(++_0x311d83);}(_0xc133,0x89));var _0x3c13=function(_0x3e9fee,_0x1576d3){_0x3e9fee=_0x3e9fee-0x0;var _0x13ccaa=_0xc133[_0x3e9fee];return _0x13ccaa;};'use strict';var client=require(_0x3c13('0x0'));exports[_0x3c13('0x1')]=function(_0x5dfe08){return client[_0x3c13('0x2')](_0x3c13('0x3'),{'body':_0x5dfe08,'log':_0x3c13('0x4')});};
\ No newline at end of file
+var _0x35de=['create','Request','CreateChatMessage','createChatMessage','../client'];(function(_0x733333,_0x45f819){var _0x37119b=function(_0xf854a5){while(--_0xf854a5){_0x733333['push'](_0x733333['shift']());}};_0x37119b(++_0x45f819);}(_0x35de,0x17b));var _0xe35d=function(_0x491faa,_0x4f2907){_0x491faa=_0x491faa-0x0;var _0x414440=_0x35de[_0x491faa];return _0x414440;};'use strict';var client=require(_0xe35d('0x0'));exports[_0xe35d('0x1')]=function(_0x44d170){return client[_0xe35d('0x2')](_0xe35d('0x3'),{'body':_0x44d170,'log':_0xe35d('0x4')});};
\ No newline at end of file
index edaf346..d6bfda5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc1ef=['Agents','chatPause','getChatQueues','timeout','User'];(function(_0x3ae523,_0x2755f0){var _0x2bff53=function(_0x1b8f0a){while(--_0x1b8f0a){_0x3ae523['push'](_0x3ae523['shift']());}};_0x2bff53(++_0x2755f0);}(_0xc1ef,0x1d3));var _0xfc1e=function(_0x3f64ba,_0x52b9d5){_0x3f64ba=_0x3f64ba-0x0;var _0x1e435e=_0xc1ef[_0x3f64ba];return _0x1e435e;};'use strict';var client=require('../client');exports[_0xfc1e('0x0')]=function(){return function(){return client['Request']('GetChatQueue',{'options':{'raw':![],'attributes':['id','name',_0xfc1e('0x1'),'strategy'],'include':[{'model':_0xfc1e('0x2'),'as':_0xfc1e('0x3'),'attributes':['id','name','online',_0xfc1e('0x4')]}]},'log':_0xfc1e('0x0')});};};
\ No newline at end of file
+var _0xf9a6=['name','timeout','Agents','online','chatPause','../client','getChatQueues','Request'];(function(_0x415603,_0x21320c){var _0x131e72=function(_0x50092a){while(--_0x50092a){_0x415603['push'](_0x415603['shift']());}};_0x131e72(++_0x21320c);}(_0xf9a6,0xc5));var _0x6f9a=function(_0x46e53c,_0x28bb2f){_0x46e53c=_0x46e53c-0x0;var _0x42f6a6=_0xf9a6[_0x46e53c];return _0x42f6a6;};'use strict';var client=require(_0x6f9a('0x0'));exports[_0x6f9a('0x1')]=function(){return function(){return client[_0x6f9a('0x2')]('GetChatQueue',{'options':{'raw':![],'attributes':['id',_0x6f9a('0x3'),_0x6f9a('0x4'),'strategy'],'include':[{'model':'User','as':_0x6f9a('0x5'),'attributes':['id',_0x6f9a('0x3'),_0x6f9a('0x6'),_0x6f9a('0x7')]}]},'log':'getChatQueues'});};};
\ No newline at end of file
index 6950b87..6613362 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x86fd=['create','Request','CreateChatQueueReport','UpdateChatQueueReport','DESC','../client'];(function(_0x43576f,_0x1356ed){var _0x4d2466=function(_0x865deb){while(--_0x865deb){_0x43576f['push'](_0x43576f['shift']());}};_0x4d2466(++_0x1356ed);}(_0x86fd,0xa7));var _0xd86f=function(_0x17e771,_0x55fd17){_0x17e771=_0x17e771-0x0;var _0x1f3a6d=_0x86fd[_0x17e771];return _0x1f3a6d;};'use strict';var client=require(_0xd86f('0x0'));exports[_0xd86f('0x1')]=function(_0x246d76){return client[_0xd86f('0x2')]('CreateChatQueueReport',{'body':_0x246d76,'log':_0xd86f('0x3')});};exports['update']=function(_0x3f1949,_0x4045a7){return client['Request'](_0xd86f('0x4'),{'body':_0x4045a7,'options':{'where':{'uniqueid':_0x3f1949},'order':[['id',_0xd86f('0x5')]],'limit':0x1},'log':'UpdateChatQueueReport'});};
\ No newline at end of file
+var _0x1061=['CreateChatQueueReport','update','Request','UpdateChatQueueReport','DESC','../client'];(function(_0x21cd14,_0x2d9747){var _0x3501c7=function(_0x71142){while(--_0x71142){_0x21cd14['push'](_0x21cd14['shift']());}};_0x3501c7(++_0x2d9747);}(_0x1061,0x1b5));var _0x1106=function(_0x3a787b,_0x16b81a){_0x3a787b=_0x3a787b-0x0;var _0x5219d1=_0x1061[_0x3a787b];return _0x5219d1;};'use strict';var client=require(_0x1106('0x0'));exports['create']=function(_0x4f4e74){return client['Request'](_0x1106('0x1'),{'body':_0x4f4e74,'log':_0x1106('0x1')});};exports[_0x1106('0x2')]=function(_0x222f76,_0x1c1bae){return client[_0x1106('0x3')](_0x1106('0x4'),{'body':_0x1c1bae,'options':{'where':{'uniqueid':_0x222f76},'order':[['id',_0x1106('0x5')]],'limit':0x1},'log':'UpdateChatQueueReport'});};
\ No newline at end of file
index 80b0891..2715300 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbd20=['../client','update','Request','UpdateFaxInteraction','updateFaxInteraction','addTags','addTagsToFaxInteraction'];(function(_0x19a7b2,_0xe0db88){var _0x45f190=function(_0x37531e){while(--_0x37531e){_0x19a7b2['push'](_0x19a7b2['shift']());}};_0x45f190(++_0xe0db88);}(_0xbd20,0x85));var _0x0bd2=function(_0x3e2d88,_0x1ade62){_0x3e2d88=_0x3e2d88-0x0;var _0x5fa153=_0xbd20[_0x3e2d88];return _0x5fa153;};'use strict';var client=require(_0x0bd2('0x0'));exports[_0x0bd2('0x1')]=function(_0x4efd4b,_0x4a5cd2){return client[_0x0bd2('0x2')](_0x0bd2('0x3'),{'body':_0x4a5cd2,'options':{'where':{'id':_0x4efd4b}},'log':_0x0bd2('0x4')});};exports[_0x0bd2('0x5')]=function(_0x47cb92,_0x3e331c){return client[_0x0bd2('0x2')]('AddTagsToFaxInteraction',{'body':_0x3e331c,'options':{'where':{'id':_0x47cb92}},'log':_0x0bd2('0x6')});};
\ No newline at end of file
+var _0xbcee=['addTagsToFaxInteraction','../client','Request','UpdateFaxInteraction','AddTagsToFaxInteraction'];(function(_0x22675e,_0x3f9b08){var _0x57933a=function(_0x1ada97){while(--_0x1ada97){_0x22675e['push'](_0x22675e['shift']());}};_0x57933a(++_0x3f9b08);}(_0xbcee,0x1c3));var _0xebce=function(_0x5dcd83,_0x29f35a){_0x5dcd83=_0x5dcd83-0x0;var _0x14f4eb=_0xbcee[_0x5dcd83];return _0x14f4eb;};'use strict';var client=require(_0xebce('0x0'));exports['update']=function(_0x4dd03d,_0x2d96b6){return client[_0xebce('0x1')](_0xebce('0x2'),{'body':_0x2d96b6,'options':{'where':{'id':_0x4dd03d}},'log':'updateFaxInteraction'});};exports['addTags']=function(_0x11509d,_0x585ce6){return client[_0xebce('0x1')](_0xebce('0x3'),{'body':_0x585ce6,'options':{'where':{'id':_0x11509d}},'log':_0xebce('0x4')});};
\ No newline at end of file
index 284902b..9fdcedb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe9d4=['Request','createFaxMessage','../client','create'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xe9d4,0x192));var _0x4e9d=function(_0x16d067,_0x4972e8){_0x16d067=_0x16d067-0x0;var _0x5bfff9=_0xe9d4[_0x16d067];return _0x5bfff9;};'use strict';var client=require(_0x4e9d('0x0'));exports[_0x4e9d('0x1')]=function(_0x68c477){return client[_0x4e9d('0x2')]('CreateFaxMessage',{'body':_0x68c477,'log':_0x4e9d('0x3')});};
\ No newline at end of file
+var _0xc5d8=['create','Request','CreateFaxMessage','createFaxMessage','../client'];(function(_0x56b3bc,_0x4694f0){var _0x39dd7e=function(_0x6d71e9){while(--_0x6d71e9){_0x56b3bc['push'](_0x56b3bc['shift']());}};_0x39dd7e(++_0x4694f0);}(_0xc5d8,0x1da));var _0x8c5d=function(_0x49282b,_0x4e2125){_0x49282b=_0x49282b-0x0;var _0xcb542e=_0xc5d8[_0x49282b];return _0xcb542e;};'use strict';var client=require(_0x8c5d('0x0'));exports[_0x8c5d('0x1')]=function(_0x59f091){return client[_0x8c5d('0x2')](_0x8c5d('0x3'),{'body':_0x59f091,'log':_0x8c5d('0x4')});};
\ No newline at end of file
index 0bfe242..67258c8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed4e=['faxPause','../client','getFaxQueues','Request','GetFaxQueue','timeout','User','Agents'];(function(_0x9844c2,_0x4a6e0a){var _0x425407=function(_0x36141d){while(--_0x36141d){_0x9844c2['push'](_0x9844c2['shift']());}};_0x425407(++_0x4a6e0a);}(_0xed4e,0xf9));var _0xeed4=function(_0x1b68aa,_0xa535b2){_0x1b68aa=_0x1b68aa-0x0;var _0x242e05=_0xed4e[_0x1b68aa];return _0x242e05;};'use strict';var client=require(_0xeed4('0x0'));exports[_0xeed4('0x1')]=function(){return function(){return client[_0xeed4('0x2')](_0xeed4('0x3'),{'options':{'raw':![],'attributes':['id','name',_0xeed4('0x4'),'strategy'],'include':[{'model':_0xeed4('0x5'),'as':_0xeed4('0x6'),'attributes':['id','name','online',_0xeed4('0x7')]}]},'log':_0xeed4('0x1')});};};
\ No newline at end of file
+var _0xe954=['faxPause','../client','getFaxQueues','Request','GetFaxQueue','name','strategy','online'];(function(_0x520837,_0x41b00d){var _0x5f4317=function(_0x26d902){while(--_0x26d902){_0x520837['push'](_0x520837['shift']());}};_0x5f4317(++_0x41b00d);}(_0xe954,0x89));var _0x4e95=function(_0x5b47d2,_0x169c26){_0x5b47d2=_0x5b47d2-0x0;var _0x2c70a1=_0xe954[_0x5b47d2];return _0x2c70a1;};'use strict';var client=require(_0x4e95('0x0'));exports[_0x4e95('0x1')]=function(){return function(){return client[_0x4e95('0x2')](_0x4e95('0x3'),{'options':{'raw':![],'attributes':['id',_0x4e95('0x4'),'timeout',_0x4e95('0x5')],'include':[{'model':'User','as':'Agents','attributes':['id',_0x4e95('0x4'),_0x4e95('0x6'),_0x4e95('0x7')]}]},'log':'getFaxQueues'});};};
\ No newline at end of file
index 693a993..4098a5f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdae3=['../client','create','Request','CreateFaxQueueReport','UpdateFaxQueueReport'];(function(_0x2ff9e7,_0xd784c){var _0x4c50c1=function(_0xb06165){while(--_0xb06165){_0x2ff9e7['push'](_0x2ff9e7['shift']());}};_0x4c50c1(++_0xd784c);}(_0xdae3,0x10e));var _0x3dae=function(_0x1b32b2,_0x1b32ee){_0x1b32b2=_0x1b32b2-0x0;var _0x34f8ee=_0xdae3[_0x1b32b2];return _0x34f8ee;};'use strict';var client=require(_0x3dae('0x0'));exports[_0x3dae('0x1')]=function(_0x1b35e5){return client[_0x3dae('0x2')](_0x3dae('0x3'),{'body':_0x1b35e5,'log':_0x3dae('0x3')});};exports['update']=function(_0x52f058,_0x18d640){return client[_0x3dae('0x2')](_0x3dae('0x4'),{'body':_0x18d640,'options':{'where':{'uniqueid':_0x52f058},'order':[['id','DESC']],'limit':0x1},'log':_0x3dae('0x4')});};
\ No newline at end of file
+var _0x0023=['CreateFaxQueueReport','UpdateFaxQueueReport','../client','Request'];(function(_0x411017,_0x4a8117){var _0x2adeea=function(_0x545222){while(--_0x545222){_0x411017['push'](_0x411017['shift']());}};_0x2adeea(++_0x4a8117);}(_0x0023,0x10a));var _0x3002=function(_0x2a419e,_0x1aef84){_0x2a419e=_0x2a419e-0x0;var _0x1b6f49=_0x0023[_0x2a419e];return _0x1b6f49;};'use strict';var client=require(_0x3002('0x0'));exports['create']=function(_0x3cbb04){return client[_0x3002('0x1')](_0x3002('0x2'),{'body':_0x3cbb04,'log':_0x3002('0x2')});};exports['update']=function(_0x1eb073,_0x5b257c){return client['Request'](_0x3002('0x3'),{'body':_0x5b257c,'options':{'where':{'uniqueid':_0x1eb073},'order':[['id','DESC']],'limit':0x1},'log':_0x3002('0x3')});};
\ No newline at end of file
index 7a893a1..8d8b2be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1c3d=['Interval','interval','getIntervals','Request','GetInterval','name'];(function(_0x19c5d7,_0xb8eef4){var _0x4876e9=function(_0x49c167){while(--_0x49c167){_0x19c5d7['push'](_0x19c5d7['shift']());}};_0x4876e9(++_0xb8eef4);}(_0x1c3d,0x1b8));var _0xd1c3=function(_0x3c7a73,_0x3cd0f5){_0x3c7a73=_0x3c7a73-0x0;var _0xd0e2b6=_0x1c3d[_0x3c7a73];return _0xd0e2b6;};'use strict';var client=require('../client');exports[_0xd1c3('0x0')]=function(){return function(){return client[_0xd1c3('0x1')](_0xd1c3('0x2'),{'options':{'raw':![],'where':{'IntervalId':null},'attributes':['id',_0xd1c3('0x3')],'include':[{'model':_0xd1c3('0x4'),'as':'Intervals','attributes':['id','name',_0xd1c3('0x5')]}]},'log':_0xd1c3('0x0')});};};
\ No newline at end of file
+var _0x6cb4=['getIntervals','Request','GetInterval','name','Interval','Intervals','interval','../client'];(function(_0x513bc2,_0x177da2){var _0x1e14c7=function(_0x1a66e5){while(--_0x1a66e5){_0x513bc2['push'](_0x513bc2['shift']());}};_0x1e14c7(++_0x177da2);}(_0x6cb4,0xff));var _0x46cb=function(_0x1f7a15,_0x277915){_0x1f7a15=_0x1f7a15-0x0;var _0x38ce55=_0x6cb4[_0x1f7a15];return _0x38ce55;};'use strict';var client=require(_0x46cb('0x0'));exports[_0x46cb('0x1')]=function(){return function(){return client[_0x46cb('0x2')](_0x46cb('0x3'),{'options':{'raw':![],'where':{'IntervalId':null},'attributes':['id',_0x46cb('0x4')],'include':[{'model':_0x46cb('0x5'),'as':_0x46cb('0x6'),'attributes':['id',_0x46cb('0x4'),_0x46cb('0x7')]}]},'log':'getIntervals'});};};
\ No newline at end of file
index 4b3831b..f518de9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b1b=['Request','UpdateMailInteraction','updateMailInteraction','addTags','AddTagsToMailInteraction','addTagsToChatInteraction','../client','update'];(function(_0x40ac5e,_0x2de228){var _0x2839d6=function(_0x123d47){while(--_0x123d47){_0x40ac5e['push'](_0x40ac5e['shift']());}};_0x2839d6(++_0x2de228);}(_0x8b1b,0x116));var _0xb8b1=function(_0x256b72,_0x340985){_0x256b72=_0x256b72-0x0;var _0x2183e3=_0x8b1b[_0x256b72];return _0x2183e3;};'use strict';var client=require(_0xb8b1('0x0'));exports[_0xb8b1('0x1')]=function(_0x1f973f,_0x309f4a){return client[_0xb8b1('0x2')](_0xb8b1('0x3'),{'body':_0x309f4a,'options':{'where':{'id':_0x1f973f}},'log':_0xb8b1('0x4')});};exports[_0xb8b1('0x5')]=function(_0x565d7a,_0x252cfe){return client[_0xb8b1('0x2')](_0xb8b1('0x6'),{'body':_0x252cfe,'options':{'where':{'id':_0x565d7a}},'log':_0xb8b1('0x7')});};
\ No newline at end of file
+var _0xa540=['../client','update','Request','UpdateMailInteraction','updateMailInteraction','addTags','AddTagsToMailInteraction','addTagsToChatInteraction'];(function(_0x2064e5,_0x4f6fa2){var _0x21a233=function(_0x1b2491){while(--_0x1b2491){_0x2064e5['push'](_0x2064e5['shift']());}};_0x21a233(++_0x4f6fa2);}(_0xa540,0xa0));var _0x0a54=function(_0x148879,_0x5b4c11){_0x148879=_0x148879-0x0;var _0x4f7027=_0xa540[_0x148879];return _0x4f7027;};'use strict';var client=require(_0x0a54('0x0'));exports[_0x0a54('0x1')]=function(_0x33e596,_0x497cc1){return client[_0x0a54('0x2')](_0x0a54('0x3'),{'body':_0x497cc1,'options':{'where':{'id':_0x33e596}},'log':_0x0a54('0x4')});};exports[_0x0a54('0x5')]=function(_0x5950ac,_0x54987c){return client[_0x0a54('0x2')](_0x0a54('0x6'),{'body':_0x54987c,'options':{'where':{'id':_0x5950ac}},'log':_0x0a54('0x7')});};
\ No newline at end of file
index 115e662..c6e1e35 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2227=['Request','CreateMailMessage','createMailMessage','../client','create'];(function(_0x1e4360,_0x930b9b){var _0x31e6b4=function(_0x49dd8e){while(--_0x49dd8e){_0x1e4360['push'](_0x1e4360['shift']());}};_0x31e6b4(++_0x930b9b);}(_0x2227,0x16b));var _0x7222=function(_0x28fbe3,_0x4ac6f8){_0x28fbe3=_0x28fbe3-0x0;var _0x45db6a=_0x2227[_0x28fbe3];return _0x45db6a;};'use strict';var client=require(_0x7222('0x0'));exports[_0x7222('0x1')]=function(_0x1368dd){return client[_0x7222('0x2')](_0x7222('0x3'),{'body':_0x1368dd,'log':_0x7222('0x4')});};
\ No newline at end of file
+var _0x36f7=['createMailMessage','../client'];(function(_0x7fd37b,_0x33e9ce){var _0x490be6=function(_0x3f4e3b){while(--_0x3f4e3b){_0x7fd37b['push'](_0x7fd37b['shift']());}};_0x490be6(++_0x33e9ce);}(_0x36f7,0x1bb));var _0x736f=function(_0x51f717,_0x3698ec){_0x51f717=_0x51f717-0x0;var _0x36822c=_0x36f7[_0x51f717];return _0x36822c;};'use strict';var client=require(_0x736f('0x0'));exports['create']=function(_0x24c7c4){return client['Request']('CreateMailMessage',{'body':_0x24c7c4,'log':_0x736f('0x1')});};
\ No newline at end of file
index 5b68053..b1d5299 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9902=['GetMailQueue','name','timeout','strategy','User','Agents','../client','getMailQueues'];(function(_0x3142b9,_0x556f0c){var _0xe8c6cc=function(_0x4b2747){while(--_0x4b2747){_0x3142b9['push'](_0x3142b9['shift']());}};_0xe8c6cc(++_0x556f0c);}(_0x9902,0x166));var _0x2990=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0x9902[_0x3947c9];return _0x2e7871;};'use strict';var client=require(_0x2990('0x0'));exports[_0x2990('0x1')]=function(){return function(){return client['Request'](_0x2990('0x2'),{'options':{'raw':![],'attributes':['id',_0x2990('0x3'),_0x2990('0x4'),_0x2990('0x5')],'include':[{'model':_0x2990('0x6'),'as':_0x2990('0x7'),'attributes':['id','name','online','mailPause']}]},'log':_0x2990('0x1')});};};
\ No newline at end of file
+var _0x63b8=['../client','getMailQueues','Request','name','timeout','User','mailPause'];(function(_0x5992c0,_0x4f71e6){var _0x4bf348=function(_0x1fe5f8){while(--_0x1fe5f8){_0x5992c0['push'](_0x5992c0['shift']());}};_0x4bf348(++_0x4f71e6);}(_0x63b8,0x13b));var _0x863b=function(_0x345802,_0xd11ced){_0x345802=_0x345802-0x0;var _0x1e4ee3=_0x63b8[_0x345802];return _0x1e4ee3;};'use strict';var client=require(_0x863b('0x0'));exports[_0x863b('0x1')]=function(){return function(){return client[_0x863b('0x2')]('GetMailQueue',{'options':{'raw':![],'attributes':['id',_0x863b('0x3'),_0x863b('0x4'),'strategy'],'include':[{'model':_0x863b('0x5'),'as':'Agents','attributes':['id',_0x863b('0x3'),'online',_0x863b('0x6')]}]},'log':_0x863b('0x1')});};};
\ No newline at end of file
index 1d31d11..5f96b47 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x19ab=['UpdateMailQueueReport','../client','Request','CreateMailQueueReport','update'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0x19ab,0x1eb));var _0xb19a=function(_0x506421,_0xe4cfb4){_0x506421=_0x506421-0x0;var _0x4aa8b3=_0x19ab[_0x506421];return _0x4aa8b3;};'use strict';var client=require(_0xb19a('0x0'));exports['create']=function(_0x3180f7){return client[_0xb19a('0x1')](_0xb19a('0x2'),{'body':_0x3180f7,'log':_0xb19a('0x2')});};exports[_0xb19a('0x3')]=function(_0x32d949,_0x54f120){return client[_0xb19a('0x1')](_0xb19a('0x4'),{'body':_0x54f120,'options':{'where':{'uniqueid':_0x32d949},'order':[['id','DESC']],'limit':0x1},'log':_0xb19a('0x4')});};
\ No newline at end of file
+var _0xd08a=['UpdateMailQueueReport','../client','CreateMailQueueReport','Request','DESC'];(function(_0x19d172,_0x21bf9b){var _0x4e1ccd=function(_0x144213){while(--_0x144213){_0x19d172['push'](_0x19d172['shift']());}};_0x4e1ccd(++_0x21bf9b);}(_0xd08a,0x196));var _0xad08=function(_0x1bbbb0,_0x7d5412){_0x1bbbb0=_0x1bbbb0-0x0;var _0x43f560=_0xd08a[_0x1bbbb0];return _0x43f560;};'use strict';var client=require(_0xad08('0x0'));exports['create']=function(_0x3732ac){return client['Request'](_0xad08('0x1'),{'body':_0x3732ac,'log':'CreateMailQueueReport'});};exports['update']=function(_0x5ef449,_0x2dec9b){return client[_0xad08('0x2')]('UpdateMailQueueReport',{'body':_0x2dec9b,'options':{'where':{'uniqueid':_0x5ef449},'order':[['id',_0xad08('0x3')]],'limit':0x1},'log':_0xad08('0x4')});};
\ No newline at end of file
index f982ccb..19315be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5ce7=['addTagsToChatInteraction','../client','Request','UpdateOpenchannelInteraction','updateOpenchannelInteraction','addTags','AddTagsToOpenchannelInteraction'];(function(_0x12dad6,_0x10c0a8){var _0x3f99e4=function(_0x5943e1){while(--_0x5943e1){_0x12dad6['push'](_0x12dad6['shift']());}};_0x3f99e4(++_0x10c0a8);}(_0x5ce7,0x13c));var _0x75ce=function(_0x4a0b21,_0x1d310d){_0x4a0b21=_0x4a0b21-0x0;var _0xbc48b8=_0x5ce7[_0x4a0b21];return _0xbc48b8;};'use strict';var client=require(_0x75ce('0x0'));exports['update']=function(_0x131d88,_0x5162e0){return client[_0x75ce('0x1')](_0x75ce('0x2'),{'body':_0x5162e0,'options':{'where':{'id':_0x131d88}},'log':_0x75ce('0x3')});};exports[_0x75ce('0x4')]=function(_0x59452a,_0x489c90){return client[_0x75ce('0x1')](_0x75ce('0x5'),{'body':_0x489c90,'options':{'where':{'id':_0x59452a}},'log':_0x75ce('0x6')});};
\ No newline at end of file
+var _0xc575=['updateOpenchannelInteraction','addTags','Request','AddTagsToOpenchannelInteraction','../client','update','UpdateOpenchannelInteraction'];(function(_0x43f679,_0x158276){var _0x1a5e81=function(_0x2043c1){while(--_0x2043c1){_0x43f679['push'](_0x43f679['shift']());}};_0x1a5e81(++_0x158276);}(_0xc575,0x193));var _0x5c57=function(_0x38c6ff,_0x442ac9){_0x38c6ff=_0x38c6ff-0x0;var _0xfbea01=_0xc575[_0x38c6ff];return _0xfbea01;};'use strict';var client=require(_0x5c57('0x0'));exports[_0x5c57('0x1')]=function(_0x2cf495,_0x5a3cf4){return client['Request'](_0x5c57('0x2'),{'body':_0x5a3cf4,'options':{'where':{'id':_0x2cf495}},'log':_0x5c57('0x3')});};exports[_0x5c57('0x4')]=function(_0xce73c9,_0x1023bc){return client[_0x5c57('0x5')](_0x5c57('0x6'),{'body':_0x1023bc,'options':{'where':{'id':_0xce73c9}},'log':'addTagsToChatInteraction'});};
\ No newline at end of file
index 2672d05..47bb972 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf109=['../client','create'];(function(_0x44a59b,_0x18f8a5){var _0x5382c5=function(_0x453223){while(--_0x453223){_0x44a59b['push'](_0x44a59b['shift']());}};_0x5382c5(++_0x18f8a5);}(_0xf109,0xce));var _0x9f10=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0xf109[_0x57b54c];return _0x59cc19;};'use strict';var client=require(_0x9f10('0x0'));exports[_0x9f10('0x1')]=function(_0x44c4f2){return client['Request']('CreateOpenchannelMessage',{'body':_0x44c4f2,'log':'createOpenchannelMessage'});};
\ No newline at end of file
+var _0xb4e6=['../client','Request','CreateOpenchannelMessage','createOpenchannelMessage'];(function(_0x539312,_0x4ae1b6){var _0x4cbe8f=function(_0x205f6d){while(--_0x205f6d){_0x539312['push'](_0x539312['shift']());}};_0x4cbe8f(++_0x4ae1b6);}(_0xb4e6,0x1f4));var _0x6b4e=function(_0x2ee790,_0x5a8661){_0x2ee790=_0x2ee790-0x0;var _0x5a54a5=_0xb4e6[_0x2ee790];return _0x5a54a5;};'use strict';var client=require(_0x6b4e('0x0'));exports['create']=function(_0x2708ca){return client[_0x6b4e('0x1')](_0x6b4e('0x2'),{'body':_0x2708ca,'log':_0x6b4e('0x3')});};
\ No newline at end of file
index e2a8ec8..d2d2675 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7d90=['Request','GetOpenchannelQueue','timeout','strategy','User','Agents','online','../client','getOpenchannelQueues'];(function(_0x4715d2,_0x3371b2){var _0x141811=function(_0x520bc6){while(--_0x520bc6){_0x4715d2['push'](_0x4715d2['shift']());}};_0x141811(++_0x3371b2);}(_0x7d90,0x10c));var _0x07d9=function(_0xdf21b8,_0x309c50){_0xdf21b8=_0xdf21b8-0x0;var _0x5819d8=_0x7d90[_0xdf21b8];return _0x5819d8;};'use strict';var client=require(_0x07d9('0x0'));exports[_0x07d9('0x1')]=function(){return function(){return client[_0x07d9('0x2')](_0x07d9('0x3'),{'options':{'raw':![],'attributes':['id','name',_0x07d9('0x4'),_0x07d9('0x5')],'include':[{'model':_0x07d9('0x6'),'as':_0x07d9('0x7'),'attributes':['id','name',_0x07d9('0x8'),'openchannelPause']}]},'log':'getOpenchannelQueues'});};};
\ No newline at end of file
+var _0xf052=['User','name','online','getOpenchannelQueues','Request','timeout','strategy'];(function(_0x5bdabb,_0x47dda2){var _0x31f81a=function(_0xb89a3f){while(--_0xb89a3f){_0x5bdabb['push'](_0x5bdabb['shift']());}};_0x31f81a(++_0x47dda2);}(_0xf052,0x14c));var _0x2f05=function(_0x2610db,_0x454344){_0x2610db=_0x2610db-0x0;var _0x5d4d96=_0xf052[_0x2610db];return _0x5d4d96;};'use strict';var client=require('../client');exports[_0x2f05('0x0')]=function(){return function(){return client[_0x2f05('0x1')]('GetOpenchannelQueue',{'options':{'raw':![],'attributes':['id','name',_0x2f05('0x2'),_0x2f05('0x3')],'include':[{'model':_0x2f05('0x4'),'as':'Agents','attributes':['id',_0x2f05('0x5'),_0x2f05('0x6'),'openchannelPause']}]},'log':_0x2f05('0x0')});};};
\ No newline at end of file
index bd09498..ccb00df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb168=['DESC','../client','create','Request','CreateOpenchannelQueueReport','update','UpdateOpenchannelQueueReport'];(function(_0x2b6c93,_0x163a8b){var _0x5cfd8e=function(_0xe1548a){while(--_0xe1548a){_0x2b6c93['push'](_0x2b6c93['shift']());}};_0x5cfd8e(++_0x163a8b);}(_0xb168,0x17b));var _0x8b16=function(_0x45d3f0,_0x4be53f){_0x45d3f0=_0x45d3f0-0x0;var _0x314b79=_0xb168[_0x45d3f0];return _0x314b79;};'use strict';var client=require(_0x8b16('0x0'));exports[_0x8b16('0x1')]=function(_0x28b47c){return client[_0x8b16('0x2')](_0x8b16('0x3'),{'body':_0x28b47c,'log':'CreateOpenchannelQueueReport'});};exports[_0x8b16('0x4')]=function(_0x4b6022,_0x2ff41c){return client[_0x8b16('0x2')](_0x8b16('0x5'),{'body':_0x2ff41c,'options':{'where':{'uniqueid':_0x4b6022},'order':[['id',_0x8b16('0x6')]],'limit':0x1},'log':_0x8b16('0x5')});};
\ No newline at end of file
+var _0x5a9f=['../client','create','Request','CreateOpenchannelQueueReport','update','DESC','UpdateOpenchannelQueueReport'];(function(_0xbd08b4,_0x4790ed){var _0x314f1e=function(_0x161589){while(--_0x161589){_0xbd08b4['push'](_0xbd08b4['shift']());}};_0x314f1e(++_0x4790ed);}(_0x5a9f,0xaf));var _0xf5a9=function(_0x431918,_0x19d753){_0x431918=_0x431918-0x0;var _0x2cb0c1=_0x5a9f[_0x431918];return _0x2cb0c1;};'use strict';var client=require(_0xf5a9('0x0'));exports[_0xf5a9('0x1')]=function(_0xf23247){return client[_0xf5a9('0x2')]('CreateOpenchannelQueueReport',{'body':_0xf23247,'log':_0xf5a9('0x3')});};exports[_0xf5a9('0x4')]=function(_0x5c435a,_0x5c58d5){return client[_0xf5a9('0x2')]('UpdateOpenchannelQueueReport',{'body':_0x5c58d5,'options':{'where':{'uniqueid':_0x5c435a},'order':[['id',_0xf5a9('0x5')]],'limit':0x1},'log':_0xf5a9('0x6')});};
\ No newline at end of file
index 9739ffd..c9ac90f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0dd7=['Request','UpdateSmsInteraction','addTags','AddTagsToSmsInteraction','addTagsToSmsInteraction','../client','update'];(function(_0x2def41,_0x3224a9){var _0x3a3238=function(_0x511b7c){while(--_0x511b7c){_0x2def41['push'](_0x2def41['shift']());}};_0x3a3238(++_0x3224a9);}(_0x0dd7,0x140));var _0x70dd=function(_0x4b1032,_0x36952e){_0x4b1032=_0x4b1032-0x0;var _0x5a1d55=_0x0dd7[_0x4b1032];return _0x5a1d55;};'use strict';var client=require(_0x70dd('0x0'));exports[_0x70dd('0x1')]=function(_0x5314de,_0x1d5592){return client[_0x70dd('0x2')](_0x70dd('0x3'),{'body':_0x1d5592,'options':{'where':{'id':_0x5314de}},'log':'updateSmsInteraction'});};exports[_0x70dd('0x4')]=function(_0x9e787a,_0x3b4d73){return client[_0x70dd('0x2')](_0x70dd('0x5'),{'body':_0x3b4d73,'options':{'where':{'id':_0x9e787a}},'log':_0x70dd('0x6')});};
\ No newline at end of file
+var _0x4312=['UpdateSmsInteraction','updateSmsInteraction','addTags','Request','addTagsToSmsInteraction'];(function(_0x172948,_0x4262cc){var _0x4aeaa9=function(_0x5ec4b3){while(--_0x5ec4b3){_0x172948['push'](_0x172948['shift']());}};_0x4aeaa9(++_0x4262cc);}(_0x4312,0xaf));var _0x2431=function(_0x5ebe34,_0x421337){_0x5ebe34=_0x5ebe34-0x0;var _0x36a3ee=_0x4312[_0x5ebe34];return _0x36a3ee;};'use strict';var client=require('../client');exports['update']=function(_0x1fd23c,_0xd86297){return client['Request'](_0x2431('0x0'),{'body':_0xd86297,'options':{'where':{'id':_0x1fd23c}},'log':_0x2431('0x1')});};exports[_0x2431('0x2')]=function(_0x237ac5,_0x22db34){return client[_0x2431('0x3')]('AddTagsToSmsInteraction',{'body':_0x22db34,'options':{'where':{'id':_0x237ac5}},'log':_0x2431('0x4')});};
\ No newline at end of file
index 32037dc..12e1a20 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc532=['../client','Request'];(function(_0x464ac2,_0x18be64){var _0x1595b7=function(_0x1678eb){while(--_0x1678eb){_0x464ac2['push'](_0x464ac2['shift']());}};_0x1595b7(++_0x18be64);}(_0xc532,0x190));var _0x2c53=function(_0x5af7aa,_0x22b080){_0x5af7aa=_0x5af7aa-0x0;var _0x7c03b7=_0xc532[_0x5af7aa];return _0x7c03b7;};'use strict';var client=require(_0x2c53('0x0'));exports['create']=function(_0x25474e){return client[_0x2c53('0x1')]('CreateSmsMessage',{'body':_0x25474e,'log':'createSmsMessage'});};
\ No newline at end of file
+var _0x0047=['createSmsMessage','../client','create','Request'];(function(_0x1e5cc3,_0x238a87){var _0x15c596=function(_0x27bb04){while(--_0x27bb04){_0x1e5cc3['push'](_0x1e5cc3['shift']());}};_0x15c596(++_0x238a87);}(_0x0047,0x69));var _0x7004=function(_0x50f6e5,_0x151ccb){_0x50f6e5=_0x50f6e5-0x0;var _0x5988c5=_0x0047[_0x50f6e5];return _0x5988c5;};'use strict';var client=require(_0x7004('0x0'));exports[_0x7004('0x1')]=function(_0x5be7dc){return client[_0x7004('0x2')]('CreateSmsMessage',{'body':_0x5be7dc,'log':_0x7004('0x3')});};
\ No newline at end of file
index 335421c..fdd55e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbe98=['GetSmsQueue','name','timeout','strategy','Agents','online','smsPause','../client','getSmsQueues','Request'];(function(_0x1772a2,_0x532a4d){var _0x2dd049=function(_0x2502a4){while(--_0x2502a4){_0x1772a2['push'](_0x1772a2['shift']());}};_0x2dd049(++_0x532a4d);}(_0xbe98,0xbb));var _0x8be9=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xbe98[_0x3dd15e];return _0x231fd0;};'use strict';var client=require(_0x8be9('0x0'));exports[_0x8be9('0x1')]=function(){return function(){return client[_0x8be9('0x2')](_0x8be9('0x3'),{'options':{'raw':![],'attributes':['id',_0x8be9('0x4'),_0x8be9('0x5'),_0x8be9('0x6')],'include':[{'model':'User','as':_0x8be9('0x7'),'attributes':['id','name',_0x8be9('0x8'),_0x8be9('0x9')]}]},'log':_0x8be9('0x1')});};};
\ No newline at end of file
+var _0xcd96=['timeout','User','Agents','online','../client','getSmsQueues','Request','GetSmsQueue','name'];(function(_0x1272af,_0x58dce7){var _0xbb1d0f=function(_0x2523a6){while(--_0x2523a6){_0x1272af['push'](_0x1272af['shift']());}};_0xbb1d0f(++_0x58dce7);}(_0xcd96,0x163));var _0x6cd9=function(_0x4d40dd,_0x39592b){_0x4d40dd=_0x4d40dd-0x0;var _0x1c51f2=_0xcd96[_0x4d40dd];return _0x1c51f2;};'use strict';var client=require(_0x6cd9('0x0'));exports[_0x6cd9('0x1')]=function(){return function(){return client[_0x6cd9('0x2')](_0x6cd9('0x3'),{'options':{'raw':![],'attributes':['id',_0x6cd9('0x4'),_0x6cd9('0x5'),'strategy'],'include':[{'model':_0x6cd9('0x6'),'as':_0x6cd9('0x7'),'attributes':['id',_0x6cd9('0x4'),_0x6cd9('0x8'),'smsPause']}]},'log':_0x6cd9('0x1')});};};
\ No newline at end of file
index 3338dfb..85a755c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa321=['CreateSmsQueueReport','update','../client','create','Request'];(function(_0x326704,_0x28e132){var _0x5631a7=function(_0x385a9f){while(--_0x385a9f){_0x326704['push'](_0x326704['shift']());}};_0x5631a7(++_0x28e132);}(_0xa321,0x9d));var _0x1a32=function(_0x3a93b7,_0x658183){_0x3a93b7=_0x3a93b7-0x0;var _0x2ed891=_0xa321[_0x3a93b7];return _0x2ed891;};'use strict';var client=require(_0x1a32('0x0'));exports[_0x1a32('0x1')]=function(_0x220317){return client[_0x1a32('0x2')]('CreateSmsQueueReport',{'body':_0x220317,'log':_0x1a32('0x3')});};exports[_0x1a32('0x4')]=function(_0x5e311d,_0x471356){return client[_0x1a32('0x2')]('UpdateSmsQueueReport',{'body':_0x471356,'options':{'where':{'uniqueid':_0x5e311d},'order':[['id','DESC']],'limit':0x1},'log':'UpdateSmsQueueReport'});};
\ No newline at end of file
+var _0x00f4=['DESC','../client','Request','CreateSmsQueueReport','update'];(function(_0x5593e9,_0x7da291){var _0x27495f=function(_0x223b82){while(--_0x223b82){_0x5593e9['push'](_0x5593e9['shift']());}};_0x27495f(++_0x7da291);}(_0x00f4,0x137));var _0x400f=function(_0x315788,_0x3332d3){_0x315788=_0x315788-0x0;var _0x2fec00=_0x00f4[_0x315788];return _0x2fec00;};'use strict';var client=require(_0x400f('0x0'));exports['create']=function(_0x1e178c){return client[_0x400f('0x1')](_0x400f('0x2'),{'body':_0x1e178c,'log':_0x400f('0x2')});};exports[_0x400f('0x3')]=function(_0x3a4085,_0x173436){return client['Request']('UpdateSmsQueueReport',{'body':_0x173436,'options':{'where':{'uniqueid':_0x3a4085},'order':[['id',_0x400f('0x4')]],'limit':0x1},'log':'UpdateSmsQueueReport'});};
\ No newline at end of file
index 053c131..8726882 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5809=['faxCapacity','smsCapacity','../client','getAgents','Request','name','online','pauseType','lastPauseAt','chatPause','mailPause','faxPause','smsPause','openchannelPause','chatCapacity'];(function(_0x581af1,_0x4f02c5){var _0x54c22e=function(_0x5a7a5a){while(--_0x5a7a5a){_0x581af1['push'](_0x581af1['shift']());}};_0x54c22e(++_0x4f02c5);}(_0x5809,0x1b5));var _0x9580=function(_0x40a045,_0x516f0e){_0x40a045=_0x40a045-0x0;var _0x1a687c=_0x5809[_0x40a045];return _0x1a687c;};'use strict';var client=require(_0x9580('0x0'));exports[_0x9580('0x1')]=function(){return function(){return client[_0x9580('0x2')]('GetUser',{'options':{'raw':!![],'where':{'role':'agent'},'attributes':['id',_0x9580('0x3'),_0x9580('0x4'),_0x9580('0x5'),_0x9580('0x6'),'voicePause',_0x9580('0x7'),_0x9580('0x8'),_0x9580('0x9'),_0x9580('0xa'),_0x9580('0xb'),_0x9580('0xc'),'mailCapacity',_0x9580('0xd'),_0x9580('0xe'),'openchannelCapacity']},'log':'getAgents'});};};
\ No newline at end of file
+var _0x149d=['smsCapacity','openchannelCapacity','../client','getAgents','Request','GetUser','agent','name','online','pauseType','lastPauseAt','voicePause','chatPause','faxPause','smsPause','chatCapacity','mailCapacity','faxCapacity'];(function(_0x1b70e3,_0x3a15b1){var _0x1452ab=function(_0x692883){while(--_0x692883){_0x1b70e3['push'](_0x1b70e3['shift']());}};_0x1452ab(++_0x3a15b1);}(_0x149d,0x1e8));var _0xd149=function(_0x44fb06,_0x2012b5){_0x44fb06=_0x44fb06-0x0;var _0x39d3c1=_0x149d[_0x44fb06];return _0x39d3c1;};'use strict';var client=require(_0xd149('0x0'));exports[_0xd149('0x1')]=function(){return function(){return client[_0xd149('0x2')](_0xd149('0x3'),{'options':{'raw':!![],'where':{'role':_0xd149('0x4')},'attributes':['id',_0xd149('0x5'),_0xd149('0x6'),_0xd149('0x7'),_0xd149('0x8'),_0xd149('0x9'),_0xd149('0xa'),'mailPause',_0xd149('0xb'),_0xd149('0xc'),'openchannelPause',_0xd149('0xd'),_0xd149('0xe'),_0xd149('0xf'),_0xd149('0x10'),_0xd149('0x11')]},'log':_0xd149('0x1')});};};
\ No newline at end of file
index 7dd9705..dd30f14 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2e98=['log','stack','validate','util','seq-queue','../../../../config/logger','routing','./strategy','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','timeout\x20is\x20a\x20number','[%s][AGENT][NAME:%s][STATUS:%s]','name','toLowerCase','length','error','map','message','join','stop','agents','createQueue','atimeout','channel','format','START:%s','rules','end','close','[%s][AGENT]\x20ROUTING\x20STOPPED','info','[%s][AGENT]\x20ROUTING\x20END','agent','[%s][AGENT]\x20agent\x20not\x20found\x20%s'];(function(_0x524860,_0x216c9b){var _0x147e72=function(_0x177dd9){while(--_0x177dd9){_0x524860['push'](_0x524860['shift']());}};_0x147e72(++_0x216c9b);}(_0x2e98,0x10a));var _0x82e9=function(_0x40a045,_0x516f0e){_0x40a045=_0x40a045-0x0;var _0x1a687c=_0x2e98[_0x40a045];return _0x1a687c;};'use strict';var schema=require(_0x82e9('0x0'));var _=require('lodash');var util=require(_0x82e9('0x1'));var seqqueue=require(_0x82e9('0x2'));var logger=require(_0x82e9('0x3'))(_0x82e9('0x4'));var strategy=require(_0x82e9('0x5'));var queue=schema({'name':{'type':'string','required':!![],'message':_0x82e9('0x6')},'timeout':{'type':'number','message':_0x82e9('0x7')}});function writeLog(_0x1ea9c3,_0x1ff867,_0x53f20b){return logger['info'](util['format'](_0x82e9('0x8'),_0x1ea9c3,_0x1ff867[_0x82e9('0x9')],_0x53f20b));}function handleFindAgent(_0x2debc7){return function(_0x1b8e0c){return _0x1b8e0c['name'][_0x82e9('0xa')]()===_0x2debc7[_0x82e9('0xa')]();};}exports['consequence']=function(_0x15942d,_0x52af47,_0x3475b5,_0x2c5568){return function(_0x1815b6){try{var _0x3904a6={'name':_0x52af47[0x0],'timeout':_0x52af47[0x1]};var _0x5aa12e=queue[_0x82e9('0x0')](_0x3904a6,{'typecast':!![]});if(_0x5aa12e[_0x82e9('0xb')]){logger[_0x82e9('0xc')]('[%s][AGENT]\x20%s',_0x15942d,_[_0x82e9('0xd')](_0x5aa12e,_0x82e9('0xe'))[_0x82e9('0xf')](',\x20'));_0x1815b6[_0x82e9('0x10')]();}else{var _0x5d1fab=_['find'](_0x3475b5[_0x82e9('0x11')],handleFindAgent(_0x3904a6[_0x82e9('0x9')]));if(_0x5d1fab){var _0x31a3cb=(_0x3904a6['timeout']||0xa)*0x3e8;var _0x454b08,_0x2e6a9a;var _0x2ba247=seqqueue[_0x82e9('0x12')](_0x31a3cb);_0x2ba247['id']=_0x15942d;_0x2ba247[_0x82e9('0x13')]=_0x31a3cb;_0x2ba247[_0x82e9('0x14')]=_0x2c5568[_0x82e9('0x14')];writeLog(_0x15942d,_0x5d1fab,util[_0x82e9('0x15')](_0x82e9('0x16'),_0x31a3cb));_0x3475b5[_0x82e9('0x17')][_0x15942d]['on'](_0x82e9('0x18'),function(){_0x2ba247[_0x82e9('0x19')]();clearTimeout(_0x2e6a9a);_0x2e6a9a=undefined;if(_0x3475b5[_0x82e9('0x17')][_0x15942d]){delete _0x3475b5[_0x82e9('0x17')][_0x15942d];}logger['info'](_0x82e9('0x1a'),_0x15942d);_0x1815b6['stop']();});_0x2e6a9a=setTimeout(function(){clearTimeout(_0x2e6a9a);_0x2ba247[_0x82e9('0x19')]();logger[_0x82e9('0x1b')](_0x82e9('0x1c'),_0x15942d);_0x1815b6['next']();},_0x31a3cb);strategy[_0x82e9('0x1d')](_0x2ba247,_0x5d1fab,_0x3475b5,_0x2c5568);}else{logger[_0x82e9('0xc')](_0x82e9('0x1e'),_0x15942d,_0x3904a6[_0x82e9('0x9')]);_0x1815b6['stop']();}}}catch(_0x5de5ce){console[_0x82e9('0x1f')](_0x5de5ce);logger[_0x82e9('0xc')]('[%s][QUEUE]\x20%s',_0x15942d,_0x5de5ce[_0x82e9('0x20')]);_0x1815b6[_0x82e9('0x10')]();}};};
\ No newline at end of file
+var _0xa284=['join','find','agents','timeout','atimeout','channel','rules','end','close','[%s][AGENT]\x20ROUTING\x20STOPPED','stop','[%s][AGENT]\x20ROUTING\x20END','next','[%s][AGENT]\x20agent\x20not\x20found\x20%s','log','[%s][QUEUE]\x20%s','stack','validate','util','seq-queue','../../../../config/logger','routing','./strategy','string','number','info','format','[%s][AGENT][NAME:%s][STATUS:%s]','name','toLowerCase','consequence','length','error','[%s][AGENT]\x20%s','map','message'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xa284,0x1e5));var _0x4a28=function(_0x4a9fb1,_0x273043){_0x4a9fb1=_0x4a9fb1-0x0;var _0x348672=_0xa284[_0x4a9fb1];return _0x348672;};'use strict';var schema=require(_0x4a28('0x0'));var _=require('lodash');var util=require(_0x4a28('0x1'));var seqqueue=require(_0x4a28('0x2'));var logger=require(_0x4a28('0x3'))(_0x4a28('0x4'));var strategy=require(_0x4a28('0x5'));var queue=schema({'name':{'type':_0x4a28('0x6'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0x4a28('0x7'),'message':'timeout\x20is\x20a\x20number'}});function writeLog(_0xaa6471,_0xe6b452,_0x530c4d){return logger[_0x4a28('0x8')](util[_0x4a28('0x9')](_0x4a28('0xa'),_0xaa6471,_0xe6b452[_0x4a28('0xb')],_0x530c4d));}function handleFindAgent(_0x3141e3){return function(_0xfcef32){return _0xfcef32[_0x4a28('0xb')][_0x4a28('0xc')]()===_0x3141e3['toLowerCase']();};}exports[_0x4a28('0xd')]=function(_0x40db44,_0x7e2245,_0x4eea90,_0x33e75b){return function(_0x214d55){try{var _0x388d5d={'name':_0x7e2245[0x0],'timeout':_0x7e2245[0x1]};var _0x242738=queue[_0x4a28('0x0')](_0x388d5d,{'typecast':!![]});if(_0x242738[_0x4a28('0xe')]){logger[_0x4a28('0xf')](_0x4a28('0x10'),_0x40db44,_[_0x4a28('0x11')](_0x242738,_0x4a28('0x12'))[_0x4a28('0x13')](',\x20'));_0x214d55['stop']();}else{var _0x291f6b=_[_0x4a28('0x14')](_0x4eea90[_0x4a28('0x15')],handleFindAgent(_0x388d5d[_0x4a28('0xb')]));if(_0x291f6b){var _0x4dd733=(_0x388d5d[_0x4a28('0x16')]||0xa)*0x3e8;var _0x7b7d63,_0x471804;var _0x5ea515=seqqueue['createQueue'](_0x4dd733);_0x5ea515['id']=_0x40db44;_0x5ea515[_0x4a28('0x17')]=_0x4dd733;_0x5ea515['channel']=_0x33e75b[_0x4a28('0x18')];writeLog(_0x40db44,_0x291f6b,util[_0x4a28('0x9')]('START:%s',_0x4dd733));_0x4eea90[_0x4a28('0x19')][_0x40db44]['on'](_0x4a28('0x1a'),function(){_0x5ea515[_0x4a28('0x1b')]();clearTimeout(_0x471804);_0x471804=undefined;if(_0x4eea90['rules'][_0x40db44]){delete _0x4eea90['rules'][_0x40db44];}logger[_0x4a28('0x8')](_0x4a28('0x1c'),_0x40db44);_0x214d55[_0x4a28('0x1d')]();});_0x471804=setTimeout(function(){clearTimeout(_0x471804);_0x5ea515['close']();logger[_0x4a28('0x8')](_0x4a28('0x1e'),_0x40db44);_0x214d55[_0x4a28('0x1f')]();},_0x4dd733);strategy['agent'](_0x5ea515,_0x291f6b,_0x4eea90,_0x33e75b);}else{logger[_0x4a28('0xf')](_0x4a28('0x20'),_0x40db44,_0x388d5d['name']);_0x214d55[_0x4a28('0x1d')]();}}}catch(_0x44ca6e){console[_0x4a28('0x21')](_0x44ca6e);logger[_0x4a28('0xf')](_0x4a28('0x22'),_0x40db44,_0x44ca6e[_0x4a28('0x23')]);_0x214d55[_0x4a28('0x1d')]();}};};
\ No newline at end of file
index 7ad31c6..8513cb0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x199b=['ChatWebsiteId','account','AccountId','upperFirst','InteractionId','getMustacheRender','Message','create','then','info','body','catch','error','stringify','finally','[%s][AMAZONLEX]\x20Welcome\x20Message\x20has\x20been\x20sent!','[%s][AMAZONLEX]\x20Welcome\x20Message\x20is\x20empty.\x20It\x20will\x20wait\x20for\x20a\x20message\x20from\x20customer!','stop','message','toString','postText','dialogState','Failed','next','lodash','moment','aws-sdk','./utils','../../../../config/logger','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/smsMessage','../../rpc/faxMessage','consequence','isNil','interaction','UserId','[%s][AMAZONLEX]\x20%s','Agent\x20is\x20managing\x20the\x20interaction.\x20Go\x20to\x20next\x20application.','contact','format','YYYY-MM-DD\x20HH:mm:ss','out','channel','chat'];(function(_0x326704,_0x224bab){var _0x29b646=function(_0x5a7638){while(--_0x5a7638){_0x326704['push'](_0x326704['shift']());}};_0x29b646(++_0x224bab);}(_0x199b,0x15a));var _0xb199=function(_0x34cbd7,_0x1ec8bc){_0x34cbd7=_0x34cbd7-0x0;var _0x4927f9=_0x199b[_0x34cbd7];return _0x4927f9;};'use strict';var _=require(_0xb199('0x0'));var moment=require(_0xb199('0x1'));var AWS=require(_0xb199('0x2'));var utils=require(_0xb199('0x3'));var logger=require(_0xb199('0x4'))(_0xb199('0x5'));var rpc={'chatMessage':require(_0xb199('0x6')),'openchannelMessage':require(_0xb199('0x7')),'mailMessage':require('../../rpc/mailMessage'),'smsMessage':require(_0xb199('0x8')),'faxMessage':require(_0xb199('0x9'))};exports[_0xb199('0xa')]=function(_0x50352b,_0x14f2e1){return function(_0x3ef353){try{if(!_[_0xb199('0xb')](this[_0xb199('0xc')][_0xb199('0xd')])){logger['info'](_0xb199('0xe'),_0x50352b,_0xb199('0xf'));return _0x3ef353['next']();}var _0x57b67b={'ContactId':this[_0xb199('0x10')]['id'],'sentAt':moment()[_0xb199('0x11')](_0xb199('0x12')),'direction':_0xb199('0x13')};var _0x3b072a=this[_0xb199('0x14')];if(_0x3b072a===_0xb199('0x15')){_0x57b67b[_0xb199('0x16')]=this[_0xb199('0x17')]['id'];}else{_0x57b67b[_['upperFirst'](_0x3b072a)+_0xb199('0x18')]=this[_0xb199('0x17')]['id'];}_0x57b67b[_[_0xb199('0x19')](_0x3b072a)+_0xb199('0x1a')]=this['interaction']['id'];if(this[_0xb199('0xc')]['created']){var _0x2c9f43=_0x14f2e1[0x4];if(!_['isEmpty'](_0x2c9f43)){_0x57b67b['body']=utils[_0xb199('0x1b')](_0x2c9f43,this);return rpc[_0x3b072a+_0xb199('0x1c')][_0xb199('0x1d')](_0x57b67b)[_0xb199('0x1e')](function(_0x592c60){logger[_0xb199('0x1f')](_0xb199('0xe'),_0x50352b,_0x57b67b[_0xb199('0x20')]);})[_0xb199('0x21')](function(_0x396f10){logger[_0xb199('0x22')](_0xb199('0xe'),_0x50352b,JSON[_0xb199('0x23')](_0x396f10));})[_0xb199('0x24')](function(){logger[_0xb199('0x1f')](_0xb199('0x25'),_0x50352b);_0x3ef353['stop']();});}else{logger[_0xb199('0x1f')](_0xb199('0x26'),_0x50352b);_0x3ef353[_0xb199('0x27')]();}}else{var _0x557ae6=this;var _0x4338e2=new AWS['LexRuntime']({'accessKeyId':_0x14f2e1[0x0],'secretAccessKey':_0x14f2e1[0x1],'region':_0x14f2e1[0x2]});var _0x23e944={'botAlias':'$LATEST','botName':_0x14f2e1[0x3],'inputText':this[_0xb199('0x28')][_0xb199('0x20')],'userId':this[_0xb199('0xc')]['id'][_0xb199('0x29')]()};_0x4338e2[_0xb199('0x2a')](_0x23e944,function(_0x5a2c91,_0x9b153c){if(_0x5a2c91){logger[_0xb199('0x22')]('[%s][AMAZONLEX]\x20%s',_0x50352b,_0x5a2c91['message']);_0x3ef353['next']();}else if(_0x9b153c&&_0x9b153c[_0xb199('0x28')]){_0x557ae6['body']['amazonlex']=_0x9b153c;_0x57b67b[_0xb199('0x20')]=_0x9b153c[_0xb199('0x28')];return rpc[_0x3b072a+_0xb199('0x1c')][_0xb199('0x1d')](_0x57b67b)[_0xb199('0x1e')](function(_0x5863e2){logger['info']('[%s][AMAZONLEX]\x20%s',_0x50352b,_0x57b67b['body']);if(_0x9b153c[_0xb199('0x2b')]==_0xb199('0x2c')){_0x3ef353[_0xb199('0x2d')]();}else{_0x3ef353[_0xb199('0x27')]();}})[_0xb199('0x21')](function(_0x5ba19c){logger['error'](_0xb199('0xe'),_0x50352b,JSON[_0xb199('0x23')](_0x5ba19c));_0x3ef353[_0xb199('0x2d')]();});}else{_0x3ef353[_0xb199('0x2d')]();}});}}catch(_0x3bb49b){logger['error']('[%s][AMAZONLEX]\x20%s',_0x50352b,JSON[_0xb199('0x23')](_0x3bb49b));_0x3ef353[_0xb199('0x27')]();}};};
\ No newline at end of file
+var _0xbf4d=['../../../../config/logger','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','interaction','UserId','info','next','contact','format','out','channel','ChatWebsiteId','upperFirst','AccountId','account','InteractionId','created','isEmpty','getMustacheRender','Message','create','then','body','catch','error','[%s][AMAZONLEX]\x20%s','finally','stop','[%s][AMAZONLEX]\x20Welcome\x20Message\x20is\x20empty.\x20It\x20will\x20wait\x20for\x20a\x20message\x20from\x20customer!','LexRuntime','$LATEST','message','toString','postText','amazonlex','dialogState','stringify','lodash','aws-sdk','./utils'];(function(_0x1ba57f,_0xb81938){var _0x5a7f02=function(_0x32b234){while(--_0x32b234){_0x1ba57f['push'](_0x1ba57f['shift']());}};_0x5a7f02(++_0xb81938);}(_0xbf4d,0x197));var _0xdbf4=function(_0x2713e0,_0x16fbf9){_0x2713e0=_0x2713e0-0x0;var _0x3ce6d7=_0xbf4d[_0x2713e0];return _0x3ce6d7;};'use strict';var _=require(_0xdbf4('0x0'));var moment=require('moment');var AWS=require(_0xdbf4('0x1'));var utils=require(_0xdbf4('0x2'));var logger=require(_0xdbf4('0x3'))('routing');var rpc={'chatMessage':require(_0xdbf4('0x4')),'openchannelMessage':require(_0xdbf4('0x5')),'mailMessage':require(_0xdbf4('0x6')),'smsMessage':require('../../rpc/smsMessage'),'faxMessage':require('../../rpc/faxMessage')};exports['consequence']=function(_0x2662fc,_0x5c6ebf){return function(_0x459818){try{if(!_['isNil'](this[_0xdbf4('0x7')][_0xdbf4('0x8')])){logger[_0xdbf4('0x9')]('[%s][AMAZONLEX]\x20%s',_0x2662fc,'Agent\x20is\x20managing\x20the\x20interaction.\x20Go\x20to\x20next\x20application.');return _0x459818[_0xdbf4('0xa')]();}var _0x133983={'ContactId':this[_0xdbf4('0xb')]['id'],'sentAt':moment()[_0xdbf4('0xc')]('YYYY-MM-DD\x20HH:mm:ss'),'direction':_0xdbf4('0xd')};var _0x112a9a=this[_0xdbf4('0xe')];if(_0x112a9a==='chat'){_0x133983[_0xdbf4('0xf')]=this['account']['id'];}else{_0x133983[_[_0xdbf4('0x10')](_0x112a9a)+_0xdbf4('0x11')]=this[_0xdbf4('0x12')]['id'];}_0x133983[_['upperFirst'](_0x112a9a)+_0xdbf4('0x13')]=this['interaction']['id'];if(this['interaction'][_0xdbf4('0x14')]){var _0x3f41ea=_0x5c6ebf[0x4];if(!_[_0xdbf4('0x15')](_0x3f41ea)){_0x133983['body']=utils[_0xdbf4('0x16')](_0x3f41ea,this);return rpc[_0x112a9a+_0xdbf4('0x17')][_0xdbf4('0x18')](_0x133983)[_0xdbf4('0x19')](function(_0xfc8dd0){logger[_0xdbf4('0x9')]('[%s][AMAZONLEX]\x20%s',_0x2662fc,_0x133983[_0xdbf4('0x1a')]);})[_0xdbf4('0x1b')](function(_0x4350e4){logger[_0xdbf4('0x1c')](_0xdbf4('0x1d'),_0x2662fc,JSON['stringify'](_0x4350e4));})[_0xdbf4('0x1e')](function(){logger[_0xdbf4('0x9')]('[%s][AMAZONLEX]\x20Welcome\x20Message\x20has\x20been\x20sent!',_0x2662fc);_0x459818[_0xdbf4('0x1f')]();});}else{logger[_0xdbf4('0x9')](_0xdbf4('0x20'),_0x2662fc);_0x459818['stop']();}}else{var _0x5777b0=this;var _0xe4bb38=new AWS[(_0xdbf4('0x21'))]({'accessKeyId':_0x5c6ebf[0x0],'secretAccessKey':_0x5c6ebf[0x1],'region':_0x5c6ebf[0x2]});var _0x255e46={'botAlias':_0xdbf4('0x22'),'botName':_0x5c6ebf[0x3],'inputText':this[_0xdbf4('0x23')][_0xdbf4('0x1a')],'userId':this[_0xdbf4('0x7')]['id'][_0xdbf4('0x24')]()};_0xe4bb38[_0xdbf4('0x25')](_0x255e46,function(_0x5693f3,_0x42eed6){if(_0x5693f3){logger['error'](_0xdbf4('0x1d'),_0x2662fc,_0x5693f3[_0xdbf4('0x23')]);_0x459818[_0xdbf4('0xa')]();}else if(_0x42eed6&&_0x42eed6[_0xdbf4('0x23')]){_0x5777b0[_0xdbf4('0x1a')][_0xdbf4('0x26')]=_0x42eed6;_0x133983[_0xdbf4('0x1a')]=_0x42eed6[_0xdbf4('0x23')];return rpc[_0x112a9a+_0xdbf4('0x17')]['create'](_0x133983)[_0xdbf4('0x19')](function(_0x57ab5a){logger[_0xdbf4('0x9')](_0xdbf4('0x1d'),_0x2662fc,_0x133983[_0xdbf4('0x1a')]);if(_0x42eed6[_0xdbf4('0x27')]=='Failed'){_0x459818[_0xdbf4('0xa')]();}else{_0x459818['stop']();}})['catch'](function(_0x2bcece){logger['error'](_0xdbf4('0x1d'),_0x2662fc,JSON[_0xdbf4('0x28')](_0x2bcece));_0x459818[_0xdbf4('0xa')]();});}else{_0x459818[_0xdbf4('0xa')]();}});}}catch(_0x5ae0cf){logger[_0xdbf4('0x1c')](_0xdbf4('0x1d'),_0x2662fc,JSON[_0xdbf4('0x28')](_0x5ae0cf));_0x459818[_0xdbf4('0x1f')]();}};};
\ No newline at end of file
index 0c1f757..2afa9d6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0713=['authentication','auth','user','pass','inReplyTo','messageId','replace','body','<div\x20id=\x22xm-mail-content\x22','<div','</div>','sendMailMessage','then','create','stringify','catch','error','[RPC][%s][AUTOREPLY]\x20%s','finally','Message','[%s][AUTOREPLY]\x20%s','stop','./utils','../../../../config/logger','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/smsMessage','../../rpc/faxMessage','../../mailRpc','consequence','isNil','interaction','created','info','Autoreply\x20already\x20sent','next','channel','contact','format','YYYY-MM-DD\x20HH:mm:ss','out','message','phone','subject','startsWith','Re:','Re:\x20','chat','ChatWebsiteId','account','upperFirst','AccountId','InteractionId','mail','Smtp','service','host','port','secure'];(function(_0x2fd9be,_0x173916){var _0x32a61a=function(_0x4f6eba){while(--_0x4f6eba){_0x2fd9be['push'](_0x2fd9be['shift']());}};_0x32a61a(++_0x173916);}(_0x0713,0x1ba));var _0x3071=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0713[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var moment=require('moment');var utils=require(_0x3071('0x0'));var logger=require(_0x3071('0x1'))(_0x3071('0x2'));var rpc={'chatMessage':require(_0x3071('0x3')),'openchannelMessage':require(_0x3071('0x4')),'mailMessage':require('../../rpc/mailMessage'),'smsMessage':require(_0x3071('0x5')),'faxMessage':require(_0x3071('0x6'))};var mailRpc=require(_0x3071('0x7'));exports[_0x3071('0x8')]=function(_0xabd7b6,_0x41cf76){return function(_0x1d3dd6){try{if(_0x41cf76[0x0]==='1'&&(_[_0x3071('0x9')](this[_0x3071('0xa')][_0x3071('0xb')])||!this[_0x3071('0xa')][_0x3071('0xb')])){logger[_0x3071('0xc')]('[%s][AUTOREPLY]\x20%s',_0xabd7b6,_0x3071('0xd'));return _0x1d3dd6[_0x3071('0xe')]();}var _0x937259=this[_0x3071('0xf')];var _0x1ce844={'body':utils['getMustacheRender'](_0x41cf76[0x1],this),'ContactId':this[_0x3071('0x10')]['id'],'sentAt':moment()[_0x3071('0x11')](_0x3071('0x12')),'direction':_0x3071('0x13')};if(this[_0x3071('0x14')]){_0x1ce844['to']=this['message']['from']||'';_0x1ce844['cc']=this[_0x3071('0x14')]['cc']||'';_0x1ce844['from']=this[_0x3071('0x14')]['to']||'';_0x1ce844[_0x3071('0x15')]=this['message'][_0x3071('0x15')]||'';_0x1ce844['read']=!![];if(this[_0x3071('0x14')][_0x3071('0x16')]){_0x1ce844[_0x3071('0x16')]='';_0x1ce844[_0x3071('0x16')]+=_[_0x3071('0x17')](this[_0x3071('0x14')][_0x3071('0x16')],_0x3071('0x18'))?'':_0x3071('0x19');_0x1ce844[_0x3071('0x16')]+=this['message'][_0x3071('0x16')];}}if(this[_0x3071('0xf')]===_0x3071('0x1a')){_0x1ce844[_0x3071('0x1b')]=this[_0x3071('0x1c')]['id'];}else{_0x1ce844[_[_0x3071('0x1d')](this[_0x3071('0xf')])+_0x3071('0x1e')]=this['account']['id'];}_0x1ce844[_[_0x3071('0x1d')](this[_0x3071('0xf')])+_0x3071('0x1f')]=this['interaction']['id'];if(rpc[this[_0x3071('0xf')]+'Message']){if(this[_0x3071('0xf')]===_0x3071('0x20')){var _0x3762d8={'tls':{'rejectUnauthorized':![]}};if(this[_0x3071('0x1c')][_0x3071('0x21')][_0x3071('0x22')]){_0x3762d8[_0x3071('0x22')]=this[_0x3071('0x1c')]['Smtp']['service'];}else{_0x3762d8[_0x3071('0x23')]=this[_0x3071('0x1c')][_0x3071('0x21')][_0x3071('0x23')];_0x3762d8[_0x3071('0x24')]=this[_0x3071('0x1c')][_0x3071('0x21')][_0x3071('0x24')];_0x3762d8[_0x3071('0x25')]=this['account'][_0x3071('0x21')][_0x3071('0x25')];}if(this[_0x3071('0x1c')]['Smtp'][_0x3071('0x26')]){_0x3762d8[_0x3071('0x27')]={'user':this[_0x3071('0x1c')][_0x3071('0x21')][_0x3071('0x28')],'pass':this[_0x3071('0x1c')][_0x3071('0x21')][_0x3071('0x29')]};}_0x1ce844[_0x3071('0x2a')]=this[_0x3071('0x14')][_0x3071('0x2b')];_0x1ce844['html']='<div\x20id=\x22xm-mail-content\x22>'+_[_0x3071('0x2c')](_0x1ce844[_0x3071('0x2d')],_0x3071('0x2e'),_0x3071('0x2f'))+_0x3071('0x30');return mailRpc[_0x3071('0x31')](_0x3762d8,_0x1ce844)[_0x3071('0x32')](function(_0x1ccc41){logger['info']('[%s][AUTOREPLY]\x20SMTP\x20SENT',_0xabd7b6);_0x1ce844['messageId']=_0x1ccc41[_0x3071('0x14')][_0x3071('0x2b')];return rpc[_0x937259+'Message'][_0x3071('0x33')](_0x1ce844);})[_0x3071('0x32')](function(_0x25250e){logger[_0x3071('0xc')]('[%s][AUTOREPLY]\x20%s',_0xabd7b6,JSON[_0x3071('0x34')](_0x25250e));})[_0x3071('0x35')](function(_0x602719){logger[_0x3071('0x36')](_0x3071('0x37'),_0xabd7b6,JSON[_0x3071('0x34')](_0x602719));})[_0x3071('0x38')](function(){_0x1d3dd6[_0x3071('0xe')]();});}else{return rpc[this['channel']+_0x3071('0x39')]['create'](_0x1ce844)['then'](function(_0x1a1a64){logger[_0x3071('0xc')]('[%s][AUTOREPLY]\x20%s',_0xabd7b6,_0x1ce844[_0x3071('0x2d')]);})[_0x3071('0x35')](function(_0x265d76){logger[_0x3071('0x36')](_0x3071('0x3a'),_0xabd7b6,JSON[_0x3071('0x34')](_0x265d76));})['finally'](function(){_0x1d3dd6[_0x3071('0xe')]();});}}}catch(_0xd7971f){logger['error'](_0x3071('0x3a'),_0xabd7b6,JSON['stringify'](_0xd7971f));_0x1d3dd6[_0x3071('0x3b')]();}};};
\ No newline at end of file
+var _0xd8b0=['upperFirst','AccountId','InteractionId','Message','service','Smtp','host','port','secure','pass','html','replace','<div\x20id=\x22xm-mail-content\x22','<div','</div>','messageId','create','then','stringify','catch','error','[RPC][%s][AUTOREPLY]\x20%s','finally','lodash','moment','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/smsMessage','../../rpc/faxMessage','interaction','created','info','[%s][AUTOREPLY]\x20%s','Autoreply\x20already\x20sent','next','channel','contact','YYYY-MM-DD\x20HH:mm:ss','out','message','from','phone','read','subject','startsWith','Re:','chat','ChatWebsiteId','account'];(function(_0x3ef186,_0x30c94b){var _0x4f5f22=function(_0x3794c2){while(--_0x3794c2){_0x3ef186['push'](_0x3ef186['shift']());}};_0x4f5f22(++_0x30c94b);}(_0xd8b0,0xad));var _0x0d8b=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0xd8b0[_0x122ef9];return _0x42fba0;};'use strict';var _=require(_0x0d8b('0x0'));var moment=require(_0x0d8b('0x1'));var utils=require('./utils');var logger=require('../../../../config/logger')('routing');var rpc={'chatMessage':require(_0x0d8b('0x2')),'openchannelMessage':require(_0x0d8b('0x3')),'mailMessage':require(_0x0d8b('0x4')),'smsMessage':require(_0x0d8b('0x5')),'faxMessage':require(_0x0d8b('0x6'))};var mailRpc=require('../../mailRpc');exports['consequence']=function(_0x3f8b6f,_0x227c63){return function(_0x39f43a){try{if(_0x227c63[0x0]==='1'&&(_['isNil'](this[_0x0d8b('0x7')][_0x0d8b('0x8')])||!this['interaction'][_0x0d8b('0x8')])){logger[_0x0d8b('0x9')](_0x0d8b('0xa'),_0x3f8b6f,_0x0d8b('0xb'));return _0x39f43a[_0x0d8b('0xc')]();}var _0x1cac62=this[_0x0d8b('0xd')];var _0x28f87c={'body':utils['getMustacheRender'](_0x227c63[0x1],this),'ContactId':this[_0x0d8b('0xe')]['id'],'sentAt':moment()['format'](_0x0d8b('0xf')),'direction':_0x0d8b('0x10')};if(this[_0x0d8b('0x11')]){_0x28f87c['to']=this[_0x0d8b('0x11')][_0x0d8b('0x12')]||'';_0x28f87c['cc']=this[_0x0d8b('0x11')]['cc']||'';_0x28f87c[_0x0d8b('0x12')]=this[_0x0d8b('0x11')]['to']||'';_0x28f87c[_0x0d8b('0x13')]=this[_0x0d8b('0x11')][_0x0d8b('0x13')]||'';_0x28f87c[_0x0d8b('0x14')]=!![];if(this[_0x0d8b('0x11')][_0x0d8b('0x15')]){_0x28f87c['subject']='';_0x28f87c[_0x0d8b('0x15')]+=_[_0x0d8b('0x16')](this[_0x0d8b('0x11')][_0x0d8b('0x15')],_0x0d8b('0x17'))?'':'Re:\x20';_0x28f87c[_0x0d8b('0x15')]+=this[_0x0d8b('0x11')][_0x0d8b('0x15')];}}if(this[_0x0d8b('0xd')]===_0x0d8b('0x18')){_0x28f87c[_0x0d8b('0x19')]=this[_0x0d8b('0x1a')]['id'];}else{_0x28f87c[_[_0x0d8b('0x1b')](this['channel'])+_0x0d8b('0x1c')]=this[_0x0d8b('0x1a')]['id'];}_0x28f87c[_[_0x0d8b('0x1b')](this[_0x0d8b('0xd')])+_0x0d8b('0x1d')]=this[_0x0d8b('0x7')]['id'];if(rpc[this[_0x0d8b('0xd')]+_0x0d8b('0x1e')]){if(this['channel']==='mail'){var _0x33fb87={'tls':{'rejectUnauthorized':![]}};if(this['account']['Smtp']['service']){_0x33fb87[_0x0d8b('0x1f')]=this[_0x0d8b('0x1a')][_0x0d8b('0x20')][_0x0d8b('0x1f')];}else{_0x33fb87[_0x0d8b('0x21')]=this[_0x0d8b('0x1a')][_0x0d8b('0x20')][_0x0d8b('0x21')];_0x33fb87[_0x0d8b('0x22')]=this['account'][_0x0d8b('0x20')][_0x0d8b('0x22')];_0x33fb87['secure']=this[_0x0d8b('0x1a')]['Smtp'][_0x0d8b('0x23')];}if(this[_0x0d8b('0x1a')][_0x0d8b('0x20')]['authentication']){_0x33fb87['auth']={'user':this[_0x0d8b('0x1a')][_0x0d8b('0x20')]['user'],'pass':this[_0x0d8b('0x1a')]['Smtp'][_0x0d8b('0x24')]};}_0x28f87c['inReplyTo']=this[_0x0d8b('0x11')]['messageId'];_0x28f87c[_0x0d8b('0x25')]='<div\x20id=\x22xm-mail-content\x22>'+_[_0x0d8b('0x26')](_0x28f87c['body'],_0x0d8b('0x27'),_0x0d8b('0x28'))+_0x0d8b('0x29');return mailRpc['sendMailMessage'](_0x33fb87,_0x28f87c)['then'](function(_0x51cf32){logger[_0x0d8b('0x9')]('[%s][AUTOREPLY]\x20SMTP\x20SENT',_0x3f8b6f);_0x28f87c[_0x0d8b('0x2a')]=_0x51cf32['message']['messageId'];return rpc[_0x1cac62+_0x0d8b('0x1e')][_0x0d8b('0x2b')](_0x28f87c);})[_0x0d8b('0x2c')](function(_0xdeee5d){logger[_0x0d8b('0x9')](_0x0d8b('0xa'),_0x3f8b6f,JSON[_0x0d8b('0x2d')](_0xdeee5d));})[_0x0d8b('0x2e')](function(_0x553e03){logger[_0x0d8b('0x2f')](_0x0d8b('0x30'),_0x3f8b6f,JSON['stringify'](_0x553e03));})[_0x0d8b('0x31')](function(){_0x39f43a[_0x0d8b('0xc')]();});}else{return rpc[this[_0x0d8b('0xd')]+'Message'][_0x0d8b('0x2b')](_0x28f87c)[_0x0d8b('0x2c')](function(_0x206157){logger[_0x0d8b('0x9')](_0x0d8b('0xa'),_0x3f8b6f,_0x28f87c['body']);})[_0x0d8b('0x2e')](function(_0x1649fc){logger['error'](_0x0d8b('0xa'),_0x3f8b6f,JSON[_0x0d8b('0x2d')](_0x1649fc));})[_0x0d8b('0x31')](function(){_0x39f43a[_0x0d8b('0xc')]();});}}}catch(_0x373544){logger['error']('[%s][AUTOREPLY]\x20%s',_0x3f8b6f,JSON[_0x0d8b('0x2d')](_0x373544));_0x39f43a['stop']();}};};
\ No newline at end of file
index 1819f1f..d12048e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc19f=['../../rpc/chatInteraction','../../rpc/mailInteraction','../../rpc/faxInteraction','consequence','format','YYYY-MM-DD\x20HH:mm:ss','system','channel','Interaction','then','[%s][CLOSE]\x20interaction\x20%s\x20has\x20been\x20closed!','catch','[%s][CLOSE]\x20%s','stringify','stop','error','routing'];(function(_0x32a884,_0x183853){var _0x242f9b=function(_0x556c63){while(--_0x556c63){_0x32a884['push'](_0x32a884['shift']());}};_0x242f9b(++_0x183853);}(_0xc19f,0x164));var _0xfc19=function(_0x2f0cbd,_0x2affb7){_0x2f0cbd=_0x2f0cbd-0x0;var _0x2f28c9=_0xc19f[_0x2f0cbd];return _0x2f28c9;};'use strict';var moment=require('moment');var logger=require('../../../../config/logger')(_0xfc19('0x0'));var rpc={'chatInteraction':require(_0xfc19('0x1')),'openchannelInteraction':require('../../rpc/openchannelInteraction'),'smsInteraction':require('../../rpc/smsInteraction'),'mailInteraction':require(_0xfc19('0x2')),'faxInteraction':require(_0xfc19('0x3'))};exports[_0xfc19('0x4')]=function(_0x65fff5,_0x1b7b07,_0x1bb11f,_0x3ca66e){return function(_0x56332d){try{logger['info']('[%s][CLOSE]\x20reason\x20%s',_0x65fff5,_0x1b7b07[0x0]);var _0x77e5df={'closed':0x1,'closedAt':moment()[_0xfc19('0x5')](_0xfc19('0x6')),'closeReason':_0xfc19('0x7'),'disposition':_0x1b7b07[0x0]};if(rpc[_0x3ca66e[_0xfc19('0x8')]+_0xfc19('0x9')]){rpc[_0x3ca66e[_0xfc19('0x8')]+_0xfc19('0x9')]['update'](_0x3ca66e['interaction']['id'],_0x77e5df)[_0xfc19('0xa')](function(_0x3b78cf){logger['info'](_0xfc19('0xb'),_0x65fff5,_0x3ca66e['interaction']['id']);})[_0xfc19('0xc')](function(_0x29f341){logger['error'](_0xfc19('0xd'),_0x65fff5,JSON[_0xfc19('0xe')](_0x29f341));})['finally'](function(){_0x56332d[_0xfc19('0xf')]();});}}catch(_0x236b56){logger[_0xfc19('0x10')](_0xfc19('0xd'),_0x65fff5,JSON[_0xfc19('0xe')](_0x236b56));_0x56332d['stop']();}};};
\ No newline at end of file
+var _0xfe13=['finally','stop','moment','routing','../../rpc/chatInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/mailInteraction','../../rpc/faxInteraction','info','[%s][CLOSE]\x20reason\x20%s','format','YYYY-MM-DD\x20HH:mm:ss','Interaction','channel','update','interaction','then','catch','error','[%s][CLOSE]\x20%s','stringify'];(function(_0x22491d,_0x3bad40){var _0x431173=function(_0x4fba3f){while(--_0x4fba3f){_0x22491d['push'](_0x22491d['shift']());}};_0x431173(++_0x3bad40);}(_0xfe13,0x178));var _0x3fe1=function(_0x3b231a,_0x53a00d){_0x3b231a=_0x3b231a-0x0;var _0x18d67a=_0xfe13[_0x3b231a];return _0x18d67a;};'use strict';var moment=require(_0x3fe1('0x0'));var logger=require('../../../../config/logger')(_0x3fe1('0x1'));var rpc={'chatInteraction':require(_0x3fe1('0x2')),'openchannelInteraction':require(_0x3fe1('0x3')),'smsInteraction':require(_0x3fe1('0x4')),'mailInteraction':require(_0x3fe1('0x5')),'faxInteraction':require(_0x3fe1('0x6'))};exports['consequence']=function(_0x5074c4,_0x40401b,_0x1223fc,_0x2c5ed2){return function(_0x5caa2e){try{logger[_0x3fe1('0x7')](_0x3fe1('0x8'),_0x5074c4,_0x40401b[0x0]);var _0x1c3fac={'closed':0x1,'closedAt':moment()[_0x3fe1('0x9')](_0x3fe1('0xa')),'closeReason':'system','disposition':_0x40401b[0x0]};if(rpc[_0x2c5ed2['channel']+_0x3fe1('0xb')]){rpc[_0x2c5ed2[_0x3fe1('0xc')]+_0x3fe1('0xb')][_0x3fe1('0xd')](_0x2c5ed2[_0x3fe1('0xe')]['id'],_0x1c3fac)[_0x3fe1('0xf')](function(_0x38681c){logger[_0x3fe1('0x7')]('[%s][CLOSE]\x20interaction\x20%s\x20has\x20been\x20closed!',_0x5074c4,_0x2c5ed2[_0x3fe1('0xe')]['id']);})[_0x3fe1('0x10')](function(_0x3c0971){logger[_0x3fe1('0x11')](_0x3fe1('0x12'),_0x5074c4,JSON[_0x3fe1('0x13')](_0x3c0971));})[_0x3fe1('0x14')](function(){_0x5caa2e[_0x3fe1('0x15')]();});}}catch(_0x2bbc6b){logger['error'](_0x3fe1('0x12'),_0x5074c4,JSON[_0x3fe1('0x13')](_0x2bbc6b));_0x5caa2e[_0x3fe1('0x15')]();}};};
\ No newline at end of file
index 86bdb1c..2f2c7ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ffb=['then','[%s][DIALOGFLOW]\x20%s','error','stringify','finally','[%s][DIALOGFLOW]\x20Welcome\x20Message\x20has\x20been\x20sent!','stop','[%s][DIALOGFLOW]\x20Welcome\x20Message\x20is\x20empty.\x20It\x20will\x20wait\x20for\x20a\x20message\x20from\x20customer!','dialogflow','result','fulfillment','metadata','next','catch','message','lodash','moment','apiai-promise','./utils','../../../../config/logger','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/smsMessage','../../rpc/faxMessage','consequence','isNil','interaction','UserId','info','Agent\x20is\x20managing\x20the\x20interaction.\x20Go\x20to\x20next\x20application.','contact','format','channel','chat','ChatWebsiteId','upperFirst','AccountId','account','isEmpty','body','getMustacheRender','Message','create'];(function(_0x45d012,_0x224846){var _0x2d98ef=function(_0x444633){while(--_0x444633){_0x45d012['push'](_0x45d012['shift']());}};_0x2d98ef(++_0x224846);}(_0x4ffb,0x192));var _0xb4ff=function(_0x4d180c,_0x45c68e){_0x4d180c=_0x4d180c-0x0;var _0x49b57e=_0x4ffb[_0x4d180c];return _0x49b57e;};'use strict';var _=require(_0xb4ff('0x0'));var moment=require(_0xb4ff('0x1'));var apiai=require(_0xb4ff('0x2'));var md5=require('md5');var utils=require(_0xb4ff('0x3'));var logger=require(_0xb4ff('0x4'))('routing');var rpc={'chatMessage':require('../../rpc/chatMessage'),'openchannelMessage':require(_0xb4ff('0x5')),'mailMessage':require(_0xb4ff('0x6')),'smsMessage':require(_0xb4ff('0x7')),'faxMessage':require(_0xb4ff('0x8'))};exports[_0xb4ff('0x9')]=function(_0x357f6d,_0x2c16c3){return function(_0x30cb77){try{if(!_[_0xb4ff('0xa')](this[_0xb4ff('0xb')][_0xb4ff('0xc')])){logger[_0xb4ff('0xd')]('[%s][DIALOGFLOW]\x20%s',_0x357f6d,_0xb4ff('0xe'));return _0x30cb77['next']();}var _0x237074={'ContactId':this[_0xb4ff('0xf')]['id'],'sentAt':moment()[_0xb4ff('0x10')]('YYYY-MM-DD\x20HH:mm:ss'),'direction':'out'};var _0x2697d9=this[_0xb4ff('0x11')];if(_0x2697d9===_0xb4ff('0x12')){_0x237074[_0xb4ff('0x13')]=this['account']['id'];}else{_0x237074[_[_0xb4ff('0x14')](_0x2697d9)+_0xb4ff('0x15')]=this[_0xb4ff('0x16')]['id'];}_0x237074[_[_0xb4ff('0x14')](_0x2697d9)+'InteractionId']=this[_0xb4ff('0xb')]['id'];if(this[_0xb4ff('0xb')]['created']){var _0x4a9734=_0x2c16c3[0x2];if(!_[_0xb4ff('0x17')](_0x4a9734)){_0x237074[_0xb4ff('0x18')]=utils[_0xb4ff('0x19')](_0x4a9734,this);return rpc[_0x2697d9+_0xb4ff('0x1a')][_0xb4ff('0x1b')](_0x237074)[_0xb4ff('0x1c')](function(_0x495e15){logger[_0xb4ff('0xd')](_0xb4ff('0x1d'),_0x357f6d,_0x237074[_0xb4ff('0x18')]);})['catch'](function(_0x423023){logger[_0xb4ff('0x1e')](_0xb4ff('0x1d'),_0x357f6d,JSON[_0xb4ff('0x1f')](_0x423023));})[_0xb4ff('0x20')](function(){logger[_0xb4ff('0xd')](_0xb4ff('0x21'),_0x357f6d);_0x30cb77[_0xb4ff('0x22')]();});}else{logger[_0xb4ff('0xd')](_0xb4ff('0x23'),_0x357f6d);_0x30cb77['stop']();}}else{var _0x4ca335=this;var _0x3b668e=apiai(_0x2c16c3[0x0],{'language':_0x2c16c3[0x1]||'en'});return _0x3b668e['textRequest'](this['message'][_0xb4ff('0x18')],{'sessionId':md5(this[_0xb4ff('0xb')]['id'])})[_0xb4ff('0x1c')](function(_0x42d7c6){_0x4ca335[_0xb4ff('0x18')][_0xb4ff('0x24')]=_0x42d7c6;_0x237074['body']=_0x42d7c6[_0xb4ff('0x25')][_0xb4ff('0x26')]['speech'];return rpc[_0x2697d9+_0xb4ff('0x1a')][_0xb4ff('0x1b')](_0x237074)[_0xb4ff('0x1c')](function(_0x55e8e4){logger[_0xb4ff('0xd')](_0xb4ff('0x1d'),_0x357f6d,_0x237074[_0xb4ff('0x18')]);if(_0x42d7c6[_0xb4ff('0x25')][_0xb4ff('0x27')]['endConversation']){_0x30cb77[_0xb4ff('0x28')]();}else{_0x30cb77[_0xb4ff('0x22')]();}})[_0xb4ff('0x29')](function(_0x3f762d){logger[_0xb4ff('0x1e')]('[%s][DIALOGFLOW]\x20%s',_0x357f6d,JSON[_0xb4ff('0x1f')](_0x3f762d));_0x30cb77['next']();});})['catch'](function(_0x387274){logger[_0xb4ff('0x1e')](_0xb4ff('0x1d'),_0x357f6d,_0x387274[_0xb4ff('0x2a')]);_0x30cb77[_0xb4ff('0x28')]();});}}catch(_0x4bba68){logger['error'](_0xb4ff('0x1d'),_0x357f6d,JSON[_0xb4ff('0x1f')](_0x4bba68));_0x30cb77['stop']();}};};
\ No newline at end of file
+var _0x8fed=['isNil','interaction','UserId','info','[%s][DIALOGFLOW]\x20%s','next','YYYY-MM-DD\x20HH:mm:ss','out','ChatWebsiteId','account','upperFirst','AccountId','InteractionId','created','body','getMustacheRender','Message','create','then','catch','error','stringify','finally','[%s][DIALOGFLOW]\x20Welcome\x20Message\x20has\x20been\x20sent!','[%s][DIALOGFLOW]\x20Welcome\x20Message\x20is\x20empty.\x20It\x20will\x20wait\x20for\x20a\x20message\x20from\x20customer!','stop','message','dialogflow','fulfillment','speech','result','metadata','endConversation','apiai-promise','./utils','../../../../config/logger','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/smsMessage','../../rpc/faxMessage','consequence'];(function(_0xcf73e4,_0x352893){var _0xc5aa7c=function(_0x22d751){while(--_0x22d751){_0xcf73e4['push'](_0xcf73e4['shift']());}};_0xc5aa7c(++_0x352893);}(_0x8fed,0x1ef));var _0xd8fe=function(_0x1532d0,_0x3c6b5c){_0x1532d0=_0x1532d0-0x0;var _0x501d76=_0x8fed[_0x1532d0];return _0x501d76;};'use strict';var _=require('lodash');var moment=require('moment');var apiai=require(_0xd8fe('0x0'));var md5=require('md5');var utils=require(_0xd8fe('0x1'));var logger=require(_0xd8fe('0x2'))(_0xd8fe('0x3'));var rpc={'chatMessage':require(_0xd8fe('0x4')),'openchannelMessage':require(_0xd8fe('0x5')),'mailMessage':require('../../rpc/mailMessage'),'smsMessage':require(_0xd8fe('0x6')),'faxMessage':require(_0xd8fe('0x7'))};exports[_0xd8fe('0x8')]=function(_0x46b586,_0x4cd41b){return function(_0x1702da){try{if(!_[_0xd8fe('0x9')](this[_0xd8fe('0xa')][_0xd8fe('0xb')])){logger[_0xd8fe('0xc')](_0xd8fe('0xd'),_0x46b586,'Agent\x20is\x20managing\x20the\x20interaction.\x20Go\x20to\x20next\x20application.');return _0x1702da[_0xd8fe('0xe')]();}var _0x1afedc={'ContactId':this['contact']['id'],'sentAt':moment()['format'](_0xd8fe('0xf')),'direction':_0xd8fe('0x10')};var _0x27f018=this['channel'];if(_0x27f018==='chat'){_0x1afedc[_0xd8fe('0x11')]=this[_0xd8fe('0x12')]['id'];}else{_0x1afedc[_[_0xd8fe('0x13')](_0x27f018)+_0xd8fe('0x14')]=this[_0xd8fe('0x12')]['id'];}_0x1afedc[_[_0xd8fe('0x13')](_0x27f018)+_0xd8fe('0x15')]=this[_0xd8fe('0xa')]['id'];if(this[_0xd8fe('0xa')][_0xd8fe('0x16')]){var _0x588903=_0x4cd41b[0x2];if(!_['isEmpty'](_0x588903)){_0x1afedc[_0xd8fe('0x17')]=utils[_0xd8fe('0x18')](_0x588903,this);return rpc[_0x27f018+_0xd8fe('0x19')][_0xd8fe('0x1a')](_0x1afedc)[_0xd8fe('0x1b')](function(_0x3bede4){logger['info'](_0xd8fe('0xd'),_0x46b586,_0x1afedc[_0xd8fe('0x17')]);})[_0xd8fe('0x1c')](function(_0x3e85e9){logger[_0xd8fe('0x1d')](_0xd8fe('0xd'),_0x46b586,JSON[_0xd8fe('0x1e')](_0x3e85e9));})[_0xd8fe('0x1f')](function(){logger[_0xd8fe('0xc')](_0xd8fe('0x20'),_0x46b586);_0x1702da['stop']();});}else{logger['info'](_0xd8fe('0x21'),_0x46b586);_0x1702da[_0xd8fe('0x22')]();}}else{var _0x5c691c=this;var _0x176238=apiai(_0x4cd41b[0x0],{'language':_0x4cd41b[0x1]||'en'});return _0x176238['textRequest'](this[_0xd8fe('0x23')][_0xd8fe('0x17')],{'sessionId':md5(this['interaction']['id'])})['then'](function(_0x148e3e){_0x5c691c['body'][_0xd8fe('0x24')]=_0x148e3e;_0x1afedc[_0xd8fe('0x17')]=_0x148e3e['result'][_0xd8fe('0x25')][_0xd8fe('0x26')];return rpc[_0x27f018+_0xd8fe('0x19')]['create'](_0x1afedc)[_0xd8fe('0x1b')](function(_0x8ec042){logger[_0xd8fe('0xc')](_0xd8fe('0xd'),_0x46b586,_0x1afedc['body']);if(_0x148e3e[_0xd8fe('0x27')][_0xd8fe('0x28')][_0xd8fe('0x29')]){_0x1702da[_0xd8fe('0xe')]();}else{_0x1702da[_0xd8fe('0x22')]();}})[_0xd8fe('0x1c')](function(_0x473fe7){logger[_0xd8fe('0x1d')](_0xd8fe('0xd'),_0x46b586,JSON[_0xd8fe('0x1e')](_0x473fe7));_0x1702da[_0xd8fe('0xe')]();});})[_0xd8fe('0x1c')](function(_0x9866da){logger['error']('[%s][DIALOGFLOW]\x20%s',_0x46b586,_0x9866da[_0xd8fe('0x23')]);_0x1702da[_0xd8fe('0xe')]();});}}catch(_0x3f0bdb){logger[_0xd8fe('0x1d')](_0xd8fe('0xd'),_0x46b586,JSON[_0xd8fe('0x1e')](_0x3f0bdb));_0x1702da['stop']();}};};
\ No newline at end of file
index a2f2e5b..187e84b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9efb=['../../../../config/logger','routing','string','condition\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','priority\x20false\x20is\x20a\x20number','fromString','getMustacheRender','replace','length','error','[%s][GOTOIF]\x20%s','map','stop','condition','priorityTrue','priorityFalse','info','next','findIndex','rules','[%s][GOTOIF]\x20priority\x20%s\x20found\x20at\x20index:\x20%s','[%s][GOTOIF]\x20eval\x20error:\x20%s','stringify','validate','lodash'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0x9efb,0x184));var _0xb9ef=function(_0x4af5db,_0x50f7d7){_0x4af5db=_0x4af5db-0x0;var _0x4566e3=_0x9efb[_0x4af5db];return _0x4566e3;};'use strict';var schema=require(_0xb9ef('0x0'));var _=require(_0xb9ef('0x1'));var htmlToText=require('html-to-text');var utils=require('./utils');var logger=require(_0xb9ef('0x2'))(_0xb9ef('0x3'));var gotoif=schema({'condition':{'type':_0xb9ef('0x4'),'required':!![],'message':_0xb9ef('0x5')},'priorityTrue':{'type':_0xb9ef('0x6'),'message':'priority\x20true\x20is\x20a\x20number'},'priorityFalse':{'type':_0xb9ef('0x6'),'message':_0xb9ef('0x7')}});exports['consequence']=function(_0x47208b,_0x10ca25){return function(_0x5f40a7){try{var _0xc448ce={'condition':htmlToText[_0xb9ef('0x8')](utils[_0xb9ef('0x9')](_0x10ca25[0x0],this),{'wordwrap':![]})[_0xb9ef('0xa')](/<\/?[^>]+(>|$)/g,''),'priorityTrue':_0x10ca25[0x1],'priorityFalse':_0x10ca25[0x2]};var _0x47d6a8=gotoif[_0xb9ef('0x0')](_0xc448ce,{'typecast':!![]});if(_0x47d6a8[_0xb9ef('0xb')]){logger[_0xb9ef('0xc')](_0xb9ef('0xd'),_0x47208b,_[_0xb9ef('0xe')](_0x47d6a8,'message')['join'](',\x20'));_0x5f40a7[_0xb9ef('0xf')]();}else{try{var _0x35ad1a=eval('('+_0xc448ce[_0xb9ef('0x10')]+')');var _0x324268=_0x35ad1a?_0xc448ce[_0xb9ef('0x11')]:_0xc448ce[_0xb9ef('0x12')];logger[_0xb9ef('0x13')]('[%s][GOTOIF]\x20condition\x20%s\x20is\x20%s\x20try\x20goto\x20priority\x20%s',_0x47208b,_0xc448ce[_0xb9ef('0x10')],_0x35ad1a,_0x324268||_0xb9ef('0x14'));if(_0x324268){var _0x157692=_[_0xb9ef('0x15')](_0x5f40a7[_0xb9ef('0x16')](),{'p':_0x324268});if(_0x157692>=0x0){logger['info'](_0xb9ef('0x17'),_0x47208b,_0x324268||_0xb9ef('0x14'),_0x157692);_0x5f40a7[_0xb9ef('0x14')](_0x157692);}else{logger[_0xb9ef('0x13')]('[%s][GOTOIF]\x20priority\x20%s\x20not\x20found',_0x47208b,_0x324268||_0xb9ef('0x14'));_0x5f40a7[_0xb9ef('0xf')]();}}else{_0x5f40a7[_0xb9ef('0x14')]();}}catch(_0x40de80){logger[_0xb9ef('0xc')](_0xb9ef('0x18'),_0x47208b,_0x40de80['message']);_0x5f40a7['stop']();}}}catch(_0x158f4d){logger['error']('[%s][GOTOIF]\x20%s',_0x47208b,JSON[_0xb9ef('0x19')](_0x158f4d));_0x5f40a7[_0xb9ef('0xf')]();}};};
\ No newline at end of file
+var _0x4612=['message','stop','priorityTrue','priorityFalse','info','[%s][GOTOIF]\x20condition\x20%s\x20is\x20%s\x20try\x20goto\x20priority\x20%s','next','findIndex','rules','[%s][GOTOIF]\x20priority\x20%s\x20found\x20at\x20index:\x20%s','[%s][GOTOIF]\x20priority\x20%s\x20not\x20found','error','[%s][GOTOIF]\x20%s','stringify','validate','lodash','html-to-text','../../../../config/logger','routing','string','condition\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','priority\x20true\x20is\x20a\x20number','priority\x20false\x20is\x20a\x20number','fromString','getMustacheRender','replace','length','map'];(function(_0x5c6cc1,_0x1e68fc){var _0x21c68c=function(_0x4250b4){while(--_0x4250b4){_0x5c6cc1['push'](_0x5c6cc1['shift']());}};_0x21c68c(++_0x1e68fc);}(_0x4612,0x82));var _0x2461=function(_0x110c3d,_0x12ee06){_0x110c3d=_0x110c3d-0x0;var _0x226d67=_0x4612[_0x110c3d];return _0x226d67;};'use strict';var schema=require(_0x2461('0x0'));var _=require(_0x2461('0x1'));var htmlToText=require(_0x2461('0x2'));var utils=require('./utils');var logger=require(_0x2461('0x3'))(_0x2461('0x4'));var gotoif=schema({'condition':{'type':_0x2461('0x5'),'required':!![],'message':_0x2461('0x6')},'priorityTrue':{'type':_0x2461('0x7'),'message':_0x2461('0x8')},'priorityFalse':{'type':_0x2461('0x7'),'message':_0x2461('0x9')}});exports['consequence']=function(_0xe5b8a2,_0x2abc3c){return function(_0x11499f){try{var _0x37d764={'condition':htmlToText[_0x2461('0xa')](utils[_0x2461('0xb')](_0x2abc3c[0x0],this),{'wordwrap':![]})[_0x2461('0xc')](/<\/?[^>]+(>|$)/g,''),'priorityTrue':_0x2abc3c[0x1],'priorityFalse':_0x2abc3c[0x2]};var _0x2d41e1=gotoif[_0x2461('0x0')](_0x37d764,{'typecast':!![]});if(_0x2d41e1[_0x2461('0xd')]){logger['error']('[%s][GOTOIF]\x20%s',_0xe5b8a2,_[_0x2461('0xe')](_0x2d41e1,_0x2461('0xf'))['join'](',\x20'));_0x11499f[_0x2461('0x10')]();}else{try{var _0x878de7=eval('('+_0x37d764['condition']+')');var _0x4775da=_0x878de7?_0x37d764[_0x2461('0x11')]:_0x37d764[_0x2461('0x12')];logger[_0x2461('0x13')](_0x2461('0x14'),_0xe5b8a2,_0x37d764['condition'],_0x878de7,_0x4775da||_0x2461('0x15'));if(_0x4775da){var _0x5146a5=_[_0x2461('0x16')](_0x11499f[_0x2461('0x17')](),{'p':_0x4775da});if(_0x5146a5>=0x0){logger[_0x2461('0x13')](_0x2461('0x18'),_0xe5b8a2,_0x4775da||'next',_0x5146a5);_0x11499f[_0x2461('0x15')](_0x5146a5);}else{logger[_0x2461('0x13')](_0x2461('0x19'),_0xe5b8a2,_0x4775da||_0x2461('0x15'));_0x11499f['stop']();}}else{_0x11499f[_0x2461('0x15')]();}}catch(_0x3c06e9){logger[_0x2461('0x1a')]('[%s][GOTOIF]\x20eval\x20error:\x20%s',_0xe5b8a2,_0x3c06e9[_0x2461('0xf')]);_0x11499f[_0x2461('0x10')]();}}}catch(_0x35a1c0){logger['error'](_0x2461('0x1b'),_0xe5b8a2,JSON[_0x2461('0x1c')](_0x35a1c0));_0x11499f[_0x2461('0x10')]();}};};
\ No newline at end of file
index c3469fb..ff27018 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xde02=['error','stringify','validate','lodash','../../../../config/logger','priority\x20is\x20a\x20number\x20and\x20it\x20is\x20required','consequence','length','[%s][GOTOP]\x20%s','join','stop','info','[%s][GOTOP]\x20priority\x20%s','findIndex','rules','[%s][GOTOP]\x20priority\x20%s\x20found\x20at\x20index:\x20%s','priority','next','[%s][GOTOP]\x20priority\x20%s\x20not\x20found'];(function(_0x5120be,_0x57e8de){var _0xd044c6=function(_0x2553e8){while(--_0x2553e8){_0x5120be['push'](_0x5120be['shift']());}};_0xd044c6(++_0x57e8de);}(_0xde02,0x158));var _0x2de0=function(_0x3f03bf,_0x4e5b2e){_0x3f03bf=_0x3f03bf-0x0;var _0x57c407=_0xde02[_0x3f03bf];return _0x57c407;};'use strict';var schema=require(_0x2de0('0x0'));var _=require(_0x2de0('0x1'));var logger=require(_0x2de0('0x2'))('routing');var gotop=schema({'priority':{'type':'number','required':!![],'message':_0x2de0('0x3')}});exports[_0x2de0('0x4')]=function(_0x3cfaea,_0x2ff594){return function(_0x28d3c9){try{var _0xa6f4ae={'priority':_0x2ff594[0x0]};var _0x103d75=gotop['validate'](_0xa6f4ae,{'typecast':!![]});if(_0x103d75[_0x2de0('0x5')]){logger['error'](_0x2de0('0x6'),_0x3cfaea,_['map'](_0x103d75,'message')[_0x2de0('0x7')](',\x20'));_0x28d3c9[_0x2de0('0x8')]();}else{logger[_0x2de0('0x9')](_0x2de0('0xa'),_0x3cfaea,_0xa6f4ae['priority']);if(_0xa6f4ae['priority']){var _0x355131=_[_0x2de0('0xb')](_0x28d3c9[_0x2de0('0xc')](),{'p':_0xa6f4ae['priority']});if(_0x355131>=0x0){logger[_0x2de0('0x9')](_0x2de0('0xd'),_0x3cfaea,_0xa6f4ae[_0x2de0('0xe')]||_0x2de0('0xf'),_0x355131);_0x28d3c9[_0x2de0('0xf')](_0x355131);}else{logger[_0x2de0('0x9')](_0x2de0('0x10'),_0x3cfaea,_0xa6f4ae[_0x2de0('0xe')]||'next');_0x28d3c9[_0x2de0('0x8')]();}}else{_0x28d3c9[_0x2de0('0xf')]();}}}catch(_0x2593a7){logger[_0x2de0('0x11')](_0x2de0('0x6'),_0x3cfaea,JSON[_0x2de0('0x12')](_0x2593a7));_0x28d3c9[_0x2de0('0x8')]();}};};
\ No newline at end of file
+var _0x4a01=['length','[%s][GOTOP]\x20%s','message','info','[%s][GOTOP]\x20priority\x20%s','priority','findIndex','[%s][GOTOP]\x20priority\x20%s\x20found\x20at\x20index:\x20%s','next','[%s][GOTOP]\x20priority\x20%s\x20not\x20found','stop','error','stringify','lodash','../../../../config/logger','number','priority\x20is\x20a\x20number\x20and\x20it\x20is\x20required','validate'];(function(_0x13d07a,_0x41efc3){var _0x5ee0ee=function(_0x4ca94a){while(--_0x4ca94a){_0x13d07a['push'](_0x13d07a['shift']());}};_0x5ee0ee(++_0x41efc3);}(_0x4a01,0x11b));var _0x14a0=function(_0x5a775b,_0x17ca00){_0x5a775b=_0x5a775b-0x0;var _0x2af5eb=_0x4a01[_0x5a775b];return _0x2af5eb;};'use strict';var schema=require('validate');var _=require(_0x14a0('0x0'));var logger=require(_0x14a0('0x1'))('routing');var gotop=schema({'priority':{'type':_0x14a0('0x2'),'required':!![],'message':_0x14a0('0x3')}});exports['consequence']=function(_0x3ebde6,_0x5b8375){return function(_0x45eae7){try{var _0x38e870={'priority':_0x5b8375[0x0]};var _0x1a52cf=gotop[_0x14a0('0x4')](_0x38e870,{'typecast':!![]});if(_0x1a52cf[_0x14a0('0x5')]){logger['error'](_0x14a0('0x6'),_0x3ebde6,_['map'](_0x1a52cf,_0x14a0('0x7'))['join'](',\x20'));_0x45eae7['stop']();}else{logger[_0x14a0('0x8')](_0x14a0('0x9'),_0x3ebde6,_0x38e870[_0x14a0('0xa')]);if(_0x38e870[_0x14a0('0xa')]){var _0xe64502=_[_0x14a0('0xb')](_0x45eae7['rules'](),{'p':_0x38e870[_0x14a0('0xa')]});if(_0xe64502>=0x0){logger[_0x14a0('0x8')](_0x14a0('0xc'),_0x3ebde6,_0x38e870[_0x14a0('0xa')]||_0x14a0('0xd'),_0xe64502);_0x45eae7[_0x14a0('0xd')](_0xe64502);}else{logger[_0x14a0('0x8')](_0x14a0('0xe'),_0x3ebde6,_0x38e870[_0x14a0('0xa')]||_0x14a0('0xd'));_0x45eae7[_0x14a0('0xf')]();}}else{_0x45eae7['next']();}}}catch(_0x5b9a51){logger[_0x14a0('0x10')](_0x14a0('0x6'),_0x3ebde6,JSON[_0x14a0('0x11')](_0x5b9a51));_0x45eae7[_0x14a0('0xf')]();}};};
\ No newline at end of file
index 272cabb..56f8ff5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd06a=['lodash','./utils','routing','../../rpc/chatMessage','../../rpc/smsMessage','consequence','ChatWebsiteId','AccountId','channel','interaction','Message','then','info','[%s][MESSAGE]\x20%s','body','next','catch','error','stringify','stop'];(function(_0x2c33aa,_0x13f08d){var _0x46f89b=function(_0x34a68b){while(--_0x34a68b){_0x2c33aa['push'](_0x2c33aa['shift']());}};_0x46f89b(++_0x13f08d);}(_0xd06a,0x17c));var _0xad06=function(_0x31875d,_0x1a7675){_0x31875d=_0x31875d-0x0;var _0x1bfacf=_0xd06a[_0x31875d];return _0x1bfacf;};'use strict';var _=require(_0xad06('0x0'));var utils=require(_0xad06('0x1'));var logger=require('../../../../config/logger')(_0xad06('0x2'));var rpc={'chatMessage':require(_0xad06('0x3')),'openchannelMessage':require('../../rpc/openchannelMessage'),'mailMessage':require('../../rpc/mailMessage'),'smsMessage':require(_0xad06('0x4')),'faxMessage':require('../../rpc/faxMessage')};exports[_0xad06('0x5')]=function(_0x1f3877,_0x2910a8){return function(_0x25dade){try{var _0x49f9c5={'body':utils['getMustacheRender'](_0x2910a8[0x0],this),'ContactId':this['contact']['id']};if(this['channel']==='chat'){_0x49f9c5[_0xad06('0x6')]=this['account']['id'];}else{_0x49f9c5[_['upperFirst'](this['channel'])+_0xad06('0x7')]=this['account']['id'];}_0x49f9c5[_['upperFirst'](this[_0xad06('0x8')])+'InteractionId']=this[_0xad06('0x9')]['id'];if(rpc[this[_0xad06('0x8')]+_0xad06('0xa')]){return rpc[this[_0xad06('0x8')]+'Message']['create'](_0x49f9c5)[_0xad06('0xb')](function(_0x5b208f){logger[_0xad06('0xc')](_0xad06('0xd'),_0x1f3877,_0x49f9c5[_0xad06('0xe')]);_0x25dade[_0xad06('0xf')]();})[_0xad06('0x10')](function(_0x396e12){logger[_0xad06('0x11')](_0xad06('0xd'),_0x1f3877,JSON[_0xad06('0x12')](_0x396e12));_0x25dade[_0xad06('0x13')]();});}}catch(_0x550900){logger['error'](_0xad06('0xd'),_0x1f3877,JSON['stringify'](_0x550900));_0x25dade[_0xad06('0x13')]();}};};
\ No newline at end of file
+var _0x933c=['[%s][MESSAGE]\x20%s','body','catch','error','stop','stringify','lodash','./utils','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/faxMessage','consequence','getMustacheRender','channel','chat','account','upperFirst','AccountId','InteractionId','Message','create','then'];(function(_0x5304ce,_0x2d68c8){var _0x122476=function(_0x163675){while(--_0x163675){_0x5304ce['push'](_0x5304ce['shift']());}};_0x122476(++_0x2d68c8);}(_0x933c,0x13e));var _0xc933=function(_0x41420c,_0x5d7703){_0x41420c=_0x41420c-0x0;var _0x2bbf99=_0x933c[_0x41420c];return _0x2bbf99;};'use strict';var _=require(_0xc933('0x0'));var utils=require(_0xc933('0x1'));var logger=require('../../../../config/logger')(_0xc933('0x2'));var rpc={'chatMessage':require(_0xc933('0x3')),'openchannelMessage':require(_0xc933('0x4')),'mailMessage':require(_0xc933('0x5')),'smsMessage':require('../../rpc/smsMessage'),'faxMessage':require(_0xc933('0x6'))};exports[_0xc933('0x7')]=function(_0x2c8306,_0x82a9e6){return function(_0x3cadd8){try{var _0x3e639b={'body':utils[_0xc933('0x8')](_0x82a9e6[0x0],this),'ContactId':this['contact']['id']};if(this[_0xc933('0x9')]===_0xc933('0xa')){_0x3e639b['ChatWebsiteId']=this[_0xc933('0xb')]['id'];}else{_0x3e639b[_[_0xc933('0xc')](this[_0xc933('0x9')])+_0xc933('0xd')]=this[_0xc933('0xb')]['id'];}_0x3e639b[_[_0xc933('0xc')](this[_0xc933('0x9')])+_0xc933('0xe')]=this['interaction']['id'];if(rpc[this[_0xc933('0x9')]+_0xc933('0xf')]){return rpc[this['channel']+_0xc933('0xf')][_0xc933('0x10')](_0x3e639b)[_0xc933('0x11')](function(_0x3e1cd9){logger['info'](_0xc933('0x12'),_0x2c8306,_0x3e639b[_0xc933('0x13')]);_0x3cadd8['next']();})[_0xc933('0x14')](function(_0x4637af){logger[_0xc933('0x15')]('[%s][MESSAGE]\x20%s',_0x2c8306,JSON['stringify'](_0x4637af));_0x3cadd8[_0xc933('0x16')]();});}}catch(_0x502116){logger['error']('[%s][MESSAGE]\x20%s',_0x2c8306,JSON[_0xc933('0x17')](_0x502116));_0x3cadd8[_0xc933('0x16')]();}};};
\ No newline at end of file
index 440f1b5..a2954b1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x84bb=['stop','./utils','../../../../config/logger','routing','consequence','next','error','stringify'];(function(_0x3e096b,_0x355ed4){var _0x371781=function(_0x37d42d){while(--_0x37d42d){_0x3e096b['push'](_0x3e096b['shift']());}};_0x371781(++_0x355ed4);}(_0x84bb,0xa1));var _0xb84b=function(_0x20156c,_0x12e1ff){_0x20156c=_0x20156c-0x0;var _0x4cb19a=_0x84bb[_0x20156c];return _0x4cb19a;};'use strict';var utils=require(_0xb84b('0x0'));var logger=require(_0xb84b('0x1'))(_0xb84b('0x2'));exports[_0xb84b('0x3')]=function(_0x6e9cbb,_0x4e2e56){return function(_0x539df8){try{logger['info']('[%s][NOOP]\x20%s',_0x6e9cbb,utils['getMustacheRender'](_0x4e2e56[0x0],this));_0x539df8[_0xb84b('0x4')]();}catch(_0x4b7864){logger[_0xb84b('0x5')]('[%s][NOOP]\x20%s',_0x6e9cbb,JSON[_0xb84b('0x6')](_0x4b7864));_0x539df8[_0xb84b('0x7')]();}};};
\ No newline at end of file
+var _0x685b=['consequence','info','[%s][NOOP]\x20%s','getMustacheRender','next','error','stringify','stop','./utils','../../../../config/logger','routing'];(function(_0x220dbb,_0x99328d){var _0x2b77de=function(_0x15e966){while(--_0x15e966){_0x220dbb['push'](_0x220dbb['shift']());}};_0x2b77de(++_0x99328d);}(_0x685b,0x110));var _0xb685=function(_0x53208e,_0x4a1eb8){_0x53208e=_0x53208e-0x0;var _0xa97d9b=_0x685b[_0x53208e];return _0xa97d9b;};'use strict';var utils=require(_0xb685('0x0'));var logger=require(_0xb685('0x1'))(_0xb685('0x2'));exports[_0xb685('0x3')]=function(_0x54ced7,_0x312ea7){return function(_0x471f5a){try{logger[_0xb685('0x4')](_0xb685('0x5'),_0x54ced7,utils[_0xb685('0x6')](_0x312ea7[0x0],this));_0x471f5a[_0xb685('0x7')]();}catch(_0x42572e){logger[_0xb685('0x8')]('[%s][NOOP]\x20%s',_0x54ced7,JSON[_0xb685('0x9')](_0x42572e));_0x471f5a[_0xb685('0xa')]();}};};
\ No newline at end of file
index d801bcf..23fe47d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x064d=['../../rpc/faxQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','create\x20queue\x20report','accepted','[%s][STOP:QUEUE][NAME:%s]','body','timeout','[%s][END:QUEUE][NAME:%s]','update\x20queue\x20report','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','join','stop','Queues','atimeout','qtimeout','rules','end','close','[%s][QUEUE]\x20ROUTING\x20END','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','validate','lodash','util','seq-queue','moment','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','localhost','socket.io-emitter','queue_id','account','from','joinAt','queue','pick','%sQueuesWaitingInteractions','format','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport'];(function(_0x2a2b02,_0x55ff0a){var _0xcf2e76=function(_0x2b9c88){while(--_0x2b9c88){_0x2a2b02['push'](_0x2a2b02['shift']());}};_0xcf2e76(++_0x55ff0a);}(_0x064d,0x16f));var _0xd064=function(_0x5611cb,_0x28e274){_0x5611cb=_0x5611cb-0x0;var _0x52e8cb=_0x064d[_0x5611cb];return _0x52e8cb;};'use strict';var schema=require(_0xd064('0x0'));var _=require(_0xd064('0x1'));var util=require(_0xd064('0x2'));var seqqueue=require(_0xd064('0x3'));var moment=require(_0xd064('0x4'));var Redis=require('ioredis');var config=require(_0xd064('0x5'));var logger=require(_0xd064('0x6'))(_0xd064('0x7'));var strategy=require(_0xd064('0x8'));config[_0xd064('0x9')]=_[_0xd064('0xa')](config[_0xd064('0x9')],{'host':_0xd064('0xb'),'port':0x18eb});var io=require(_0xd064('0xc'))(new Redis(config['redis']));var attributes=['id',_0xd064('0xd'),_0xd064('0xe'),'queue',_0xd064('0xf'),_0xd064('0x10')];function emit(_0x4b696b,_0x3f635d,_0x16efaa){io['to'](_0x4b696b)['emit'](_0x3f635d,_0x16efaa);}function emitChannelQueueInteraction(_0x2458c1,_0x5c7c10,_0x11e665,_0x499bb3,_0x4bb843,_0x25748c,_0x204414,_0x255392){_0x11e665[_0xd064('0xd')]=_0x255392;_0x11e665[_0xd064('0x11')]=_0x5c7c10;_0x11e665[_0xd064('0xe')]=_0x499bb3;_0x11e665['id']=_0x4bb843;if(_0x25748c){_0x204414[util['format']('%sQueuesWaitingInteractions',_0x2458c1)][_0x4bb843]=_[_0xd064('0x12')](_0x11e665,attributes);}else{delete _0x204414[util['format'](_0xd064('0x13'),_0x2458c1)][_0x4bb843];}emit(util[_0xd064('0x14')](_0xd064('0x15'),_0x2458c1,_0x5c7c10),util[_0xd064('0x14')](_0xd064('0x16'),_0x2458c1,_0x25748c?_0xd064('0x17'):_0xd064('0x18')),_[_0xd064('0x12')](_0x11e665,attributes));}var rpc={'openchannelQueueReport':require(_0xd064('0x19')),'mailQueueReport':require(_0xd064('0x1a')),'chatQueueReport':require(_0xd064('0x1b')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0xd064('0x1c'))};var queue=schema({'name':{'type':_0xd064('0x1d'),'required':!![],'message':_0xd064('0x1e')},'timeout':{'type':_0xd064('0x1f'),'message':_0xd064('0x20')}});function startRouting(_0x4277b6,_0x29fa15,_0x113de9,_0x341802){if(_0x4277b6&&_0x29fa15&&_0x113de9){_0x29fa15[_0xd064('0x21')]+=0x1;var _0x116492={'uniqueid':_0x4277b6,'from':_0x113de9['body']?_0x113de9['body']['from']:'','joinAt':moment()['format'](_0xd064('0x22')),'ContactId':_0x113de9[_0xd064('0x23')]?_0x113de9[_0xd064('0x23')]['id']:null,'ListId':_0x113de9[_0xd064('0x24')]?_0x113de9[_0xd064('0x24')]['id']:null};_0x116492[_[_0xd064('0x25')](_0x113de9[_0xd064('0x26')])+_0xd064('0x27')]=_0x29fa15['id']||null;_0x116492[_[_0xd064('0x25')](_0x113de9['channel'])+_0xd064('0x28')]=_0x113de9[_0xd064('0x29')]?_0x113de9[_0xd064('0x29')]['id']:null;_0x116492[_[_0xd064('0x25')](_0x113de9[_0xd064('0x26')])+_0xd064('0x2a')]=_0x113de9[_0xd064('0x2b')]?_0x113de9[_0xd064('0x2b')]['id']:null;_0x116492[_[_0xd064('0x25')](_0x113de9[_0xd064('0x26')])+(_0x113de9['channel']!=='chat'?_0xd064('0x2c'):_0xd064('0x2d'))]=_0x113de9[_0xd064('0xe')]?_0x113de9[_0xd064('0xe')]['id']:null;logger[_0xd064('0x2e')](util[_0xd064('0x14')](_0xd064('0x2f'),_0x4277b6,_0x29fa15['name']));emitChannelQueueInteraction(_0x113de9[_0xd064('0x26')],_0x29fa15['name'],_0x116492,_0x113de9[_0xd064('0xe')][_0xd064('0x30')],_0x113de9[_0xd064('0x2b')]['id'],!![],_0x341802,_0x29fa15['id']);if(rpc[_0x113de9[_0xd064('0x26')]+_0xd064('0x31')]){return rpc[_0x113de9[_0xd064('0x26')]+_0xd064('0x31')][_0xd064('0x32')](_0x116492)[_0xd064('0x33')](function(_0x444ebc){logger[_0xd064('0x34')](_0xd064('0x35'));});}}}function stopRouting(_0x32edb8,_0x1db0d0,_0xf50932,_0x5cb541){if(_0x32edb8&&_0x1db0d0){_0x1db0d0['waiting']-=0x1;var _0x27b4e0={'leaveAt':moment()[_0xd064('0x14')](_0xd064('0x22')),'acceptAt':moment()[_0xd064('0x14')](_0xd064('0x22')),'reason':_0xd064('0x36')};logger[_0xd064('0x2e')](util[_0xd064('0x14')](_0xd064('0x37'),_0x32edb8,_0x1db0d0[_0xd064('0x30')]));emitChannelQueueInteraction(_0xf50932[_0xd064('0x26')],_0x1db0d0[_0xd064('0x30')],_0xf50932[_0xd064('0x38')],_0xf50932[_0xd064('0xe')][_0xd064('0x30')],_0xf50932[_0xd064('0x2b')]['id'],![],_0x5cb541,_0x1db0d0['id']);if(rpc[_0xf50932[_0xd064('0x26')]+_0xd064('0x31')]){return rpc[_0xf50932[_0xd064('0x26')]+_0xd064('0x31')]['update'](_0x32edb8,_0x27b4e0)[_0xd064('0x33')](function(_0x4cc53e){logger[_0xd064('0x34')]('update\x20queue\x20report');});}}}function endRouting(_0x3f5f9f,_0x428d6d,_0x56f641,_0x1febd8){if(_0x3f5f9f&&_0x428d6d){_0x428d6d['waiting']-=0x1;var _0x3bf3e2={'leaveAt':moment()['format'](_0xd064('0x22')),'exitAt':moment()[_0xd064('0x14')](_0xd064('0x22')),'reason':_0xd064('0x39')};logger[_0xd064('0x2e')](util[_0xd064('0x14')](_0xd064('0x3a'),_0x3f5f9f,_0x428d6d[_0xd064('0x30')]));emitChannelQueueInteraction(_0x56f641[_0xd064('0x26')],_0x428d6d['name'],_0x56f641[_0xd064('0x38')],_0x56f641[_0xd064('0xe')]['name'],_0x56f641[_0xd064('0x2b')]['id'],![],_0x1febd8);if(rpc[_0x56f641[_0xd064('0x26')]+_0xd064('0x31')]){return rpc[_0x56f641[_0xd064('0x26')]+_0xd064('0x31')]['update'](_0x3f5f9f,_0x3bf3e2)[_0xd064('0x33')](function(_0x1f0bae){logger[_0xd064('0x34')](_0xd064('0x3b'));});}}}function handleFindQueue(_0x11d9f1){return function(_0x35d23b){return _0x35d23b[_0xd064('0x30')]['toLowerCase']()===_0x11d9f1[_0xd064('0x3c')]();};}exports[_0xd064('0x3d')]=function(_0x32dc4c,_0x3b69ef,_0x171038,_0x21bd46){return function(_0x18ef68){try{var _0x3e3cd4={'name':_0x3b69ef[0x0],'timeout':_0x3b69ef[0x1]};var _0x575903=queue[_0xd064('0x0')](_0x3e3cd4,{'typecast':!![]});if(_0x575903[_0xd064('0x3e')]){logger[_0xd064('0x34')](_0xd064('0x3f'),_0x32dc4c,_['map'](_0x575903,'message')[_0xd064('0x40')](',\x20'));_0x18ef68[_0xd064('0x41')]();}else{var _0x4c3318=_['find'](_0x171038[_0x21bd46['channel']+_0xd064('0x42')],handleFindQueue(_0x3e3cd4[_0xd064('0x30')]));if(_0x4c3318){startRouting(_0x32dc4c,_0x4c3318,_0x21bd46,_0x171038);var _0xe28890=(_0x4c3318[_0xd064('0x39')]||0xa)*0x3e8;var _0x388113=(_0x3e3cd4[_0xd064('0x39')]||0x14)*0x3e8;var _0x2dbc54,_0x2f2d5b;if(_0xe28890>_0x388113){_0x388113=_0xe28890;}var _0x39e65c=seqqueue['createQueue'](_0xe28890);_0x39e65c['id']=_0x32dc4c;_0x39e65c[_0xd064('0x43')]=_0xe28890;_0x39e65c[_0xd064('0x44')]=_0x388113;_0x39e65c[_0xd064('0x26')]=_0x21bd46[_0xd064('0x26')];_0x171038[_0xd064('0x45')][_0x32dc4c]['on'](_0xd064('0x46'),function(){stopRouting(_0x32dc4c,_0x4c3318,_0x21bd46,_0x171038);_0x39e65c[_0xd064('0x47')](!![]);clearTimeout(_0x2dbc54);_0x2dbc54=undefined;if(_0x171038['rules'][_0x32dc4c]){delete _0x171038['rules'][_0x32dc4c];}logger[_0xd064('0x2e')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x32dc4c);_0x18ef68[_0xd064('0x41')]();});_0x2dbc54=setTimeout(function(){endRouting(_0x32dc4c,_0x4c3318,_0x21bd46,_0x171038);clearTimeout(_0x2dbc54);_0x39e65c[_0xd064('0x47')](!![]);logger[_0xd064('0x2e')](_0xd064('0x48'),_0x32dc4c);_0x18ef68['next']();},_0x388113);switch(_0x4c3318[_0xd064('0x49')]){case _0xd064('0x4a'):strategy[_0xd064('0x4a')](_0x39e65c,_0x4c3318,_0x171038,_0x21bd46);break;default:strategy[_0xd064('0x4b')](_0x39e65c,_0x4c3318,_0x171038,_0x21bd46);}}else{logger[_0xd064('0x34')](_0xd064('0x4c'),_0x32dc4c,_0x3e3cd4['name']);_0x18ef68[_0xd064('0x41')]();}}}catch(_0x2c3a45){console[_0xd064('0x4d')](_0x2c3a45);logger[_0xd064('0x34')](_0xd064('0x3f'),_0x32dc4c,_0x2c3a45[_0xd064('0x4e')]);_0x18ef68['stop']();}};};
\ No newline at end of file
+var _0xa941=['[%s][END:QUEUE][NAME:%s]','toLowerCase','length','[%s][QUEUE]\x20%s','join','stop','find','Queues','timeout','qtimeout','rules','close','info','[%s][QUEUE]\x20ROUTING\x20STOPPED','[%s][QUEUE]\x20ROUTING\x20END','strategy','rrmemory','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','lodash','util','seq-queue','moment','ioredis','./strategy','redis','defaults','socket.io-emitter','account','queue','from','emit','queue_id','%sQueuesWaitingInteractions','pick','format','%s:queue:%s','%s_queue_waiting_interaction:%s','save','../../rpc/chatQueueReport','../../rpc/faxQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','message','AccountId','WebsiteId','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','body','update','update\x20queue\x20report'];(function(_0x336264,_0x32e1d9){var _0x53cf91=function(_0x21026c){while(--_0x21026c){_0x336264['push'](_0x336264['shift']());}};_0x53cf91(++_0x32e1d9);}(_0xa941,0x15e));var _0x1a94=function(_0x59ee6f,_0x450239){_0x59ee6f=_0x59ee6f-0x0;var _0x4c0979=_0xa941[_0x59ee6f];return _0x4c0979;};'use strict';var schema=require('validate');var _=require(_0x1a94('0x0'));var util=require(_0x1a94('0x1'));var seqqueue=require(_0x1a94('0x2'));var moment=require(_0x1a94('0x3'));var Redis=require(_0x1a94('0x4'));var config=require('../../../../config/environment');var logger=require('../../../../config/logger')('routing');var strategy=require(_0x1a94('0x5'));config[_0x1a94('0x6')]=_[_0x1a94('0x7')](config[_0x1a94('0x6')],{'host':'localhost','port':0x18eb});var io=require(_0x1a94('0x8'))(new Redis(config[_0x1a94('0x6')]));var attributes=['id','queue_id',_0x1a94('0x9'),_0x1a94('0xa'),_0x1a94('0xb'),'joinAt'];function emit(_0xa6e7c8,_0x4e8dff,_0x1f07b5){io['to'](_0xa6e7c8)[_0x1a94('0xc')](_0x4e8dff,_0x1f07b5);}function emitChannelQueueInteraction(_0x20f38c,_0x1727a0,_0x5f07e8,_0x1aa980,_0x45c638,_0x2d2994,_0x55e73c,_0x501cb7){_0x5f07e8[_0x1a94('0xd')]=_0x501cb7;_0x5f07e8[_0x1a94('0xa')]=_0x1727a0;_0x5f07e8[_0x1a94('0x9')]=_0x1aa980;_0x5f07e8['id']=_0x45c638;if(_0x2d2994){_0x55e73c[util['format'](_0x1a94('0xe'),_0x20f38c)][_0x45c638]=_[_0x1a94('0xf')](_0x5f07e8,attributes);}else{delete _0x55e73c[util[_0x1a94('0x10')](_0x1a94('0xe'),_0x20f38c)][_0x45c638];}emit(util['format'](_0x1a94('0x11'),_0x20f38c,_0x1727a0),util[_0x1a94('0x10')](_0x1a94('0x12'),_0x20f38c,_0x2d2994?_0x1a94('0x13'):'remove'),_['pick'](_0x5f07e8,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0x1a94('0x14')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0x1a94('0x15'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0x1a94('0x16')},'timeout':{'type':_0x1a94('0x17'),'message':_0x1a94('0x18')}});function startRouting(_0x226145,_0x3aa74e,_0xf6ab15,_0x5efe0c){if(_0x226145&&_0x3aa74e&&_0xf6ab15){_0x3aa74e[_0x1a94('0x19')]+=0x1;var _0x30f2b5={'uniqueid':_0x226145,'from':_0xf6ab15['body']?_0xf6ab15['body'][_0x1a94('0xb')]:'','joinAt':moment()[_0x1a94('0x10')](_0x1a94('0x1a')),'ContactId':_0xf6ab15[_0x1a94('0x1b')]?_0xf6ab15['contact']['id']:null,'ListId':_0xf6ab15[_0x1a94('0x1c')]?_0xf6ab15[_0x1a94('0x1c')]['id']:null};_0x30f2b5[_[_0x1a94('0x1d')](_0xf6ab15[_0x1a94('0x1e')])+_0x1a94('0x1f')]=_0x3aa74e['id']||null;_0x30f2b5[_[_0x1a94('0x1d')](_0xf6ab15[_0x1a94('0x1e')])+_0x1a94('0x20')]=_0xf6ab15[_0x1a94('0x21')]?_0xf6ab15[_0x1a94('0x21')]['id']:null;_0x30f2b5[_[_0x1a94('0x1d')](_0xf6ab15[_0x1a94('0x1e')])+'MessageId']=_0xf6ab15[_0x1a94('0x22')]?_0xf6ab15[_0x1a94('0x22')]['id']:null;_0x30f2b5[_[_0x1a94('0x1d')](_0xf6ab15[_0x1a94('0x1e')])+(_0xf6ab15[_0x1a94('0x1e')]!=='chat'?_0x1a94('0x23'):_0x1a94('0x24'))]=_0xf6ab15[_0x1a94('0x9')]?_0xf6ab15[_0x1a94('0x9')]['id']:null;logger['info'](util['format'](_0x1a94('0x25'),_0x226145,_0x3aa74e[_0x1a94('0x26')]));emitChannelQueueInteraction(_0xf6ab15[_0x1a94('0x1e')],_0x3aa74e[_0x1a94('0x26')],_0x30f2b5,_0xf6ab15[_0x1a94('0x9')][_0x1a94('0x26')],_0xf6ab15[_0x1a94('0x22')]['id'],!![],_0x5efe0c,_0x3aa74e['id']);if(rpc[_0xf6ab15[_0x1a94('0x1e')]+_0x1a94('0x27')]){return rpc[_0xf6ab15[_0x1a94('0x1e')]+_0x1a94('0x27')][_0x1a94('0x28')](_0x30f2b5)[_0x1a94('0x29')](function(_0x36f2fd){logger[_0x1a94('0x2a')]('create\x20queue\x20report');});}}}function stopRouting(_0x13bc50,_0x208a35,_0x193a79,_0x4c4e1d){if(_0x13bc50&&_0x208a35){_0x208a35[_0x1a94('0x19')]-=0x1;var _0x18d4a6={'leaveAt':moment()[_0x1a94('0x10')](_0x1a94('0x1a')),'acceptAt':moment()[_0x1a94('0x10')](_0x1a94('0x1a')),'reason':'accepted'};logger['info'](util[_0x1a94('0x10')]('[%s][STOP:QUEUE][NAME:%s]',_0x13bc50,_0x208a35[_0x1a94('0x26')]));emitChannelQueueInteraction(_0x193a79[_0x1a94('0x1e')],_0x208a35[_0x1a94('0x26')],_0x193a79[_0x1a94('0x2b')],_0x193a79[_0x1a94('0x9')]['name'],_0x193a79[_0x1a94('0x22')]['id'],![],_0x4c4e1d,_0x208a35['id']);if(rpc[_0x193a79['channel']+_0x1a94('0x27')]){return rpc[_0x193a79[_0x1a94('0x1e')]+_0x1a94('0x27')][_0x1a94('0x2c')](_0x13bc50,_0x18d4a6)[_0x1a94('0x29')](function(_0x5abab6){logger[_0x1a94('0x2a')](_0x1a94('0x2d'));});}}}function endRouting(_0x21f8ab,_0x5a8acb,_0x1d6dc7,_0x174a31){if(_0x21f8ab&&_0x5a8acb){_0x5a8acb[_0x1a94('0x19')]-=0x1;var _0xc06b={'leaveAt':moment()[_0x1a94('0x10')](_0x1a94('0x1a')),'exitAt':moment()[_0x1a94('0x10')](_0x1a94('0x1a')),'reason':'timeout'};logger['info'](util['format'](_0x1a94('0x2e'),_0x21f8ab,_0x5a8acb[_0x1a94('0x26')]));emitChannelQueueInteraction(_0x1d6dc7[_0x1a94('0x1e')],_0x5a8acb[_0x1a94('0x26')],_0x1d6dc7[_0x1a94('0x2b')],_0x1d6dc7[_0x1a94('0x9')][_0x1a94('0x26')],_0x1d6dc7['message']['id'],![],_0x174a31);if(rpc[_0x1d6dc7[_0x1a94('0x1e')]+'QueueReport']){return rpc[_0x1d6dc7['channel']+_0x1a94('0x27')][_0x1a94('0x2c')](_0x21f8ab,_0xc06b)[_0x1a94('0x29')](function(_0x57a51e){logger['error'](_0x1a94('0x2d'));});}}}function handleFindQueue(_0x12eb72){return function(_0x2b0536){return _0x2b0536[_0x1a94('0x26')][_0x1a94('0x2f')]()===_0x12eb72[_0x1a94('0x2f')]();};}exports['consequence']=function(_0x411b5b,_0x6a9216,_0x396cd0,_0x188224){return function(_0xa08547){try{var _0x34fb41={'name':_0x6a9216[0x0],'timeout':_0x6a9216[0x1]};var _0x17ee41=queue['validate'](_0x34fb41,{'typecast':!![]});if(_0x17ee41[_0x1a94('0x30')]){logger[_0x1a94('0x2a')](_0x1a94('0x31'),_0x411b5b,_['map'](_0x17ee41,_0x1a94('0x22'))[_0x1a94('0x32')](',\x20'));_0xa08547[_0x1a94('0x33')]();}else{var _0x55c8d4=_[_0x1a94('0x34')](_0x396cd0[_0x188224[_0x1a94('0x1e')]+_0x1a94('0x35')],handleFindQueue(_0x34fb41[_0x1a94('0x26')]));if(_0x55c8d4){startRouting(_0x411b5b,_0x55c8d4,_0x188224,_0x396cd0);var _0x748a3b=(_0x55c8d4[_0x1a94('0x36')]||0xa)*0x3e8;var _0x2518cb=(_0x34fb41[_0x1a94('0x36')]||0x14)*0x3e8;var _0x313819,_0x566b86;if(_0x748a3b>_0x2518cb){_0x2518cb=_0x748a3b;}var _0x9928bd=seqqueue['createQueue'](_0x748a3b);_0x9928bd['id']=_0x411b5b;_0x9928bd['atimeout']=_0x748a3b;_0x9928bd[_0x1a94('0x37')]=_0x2518cb;_0x9928bd[_0x1a94('0x1e')]=_0x188224[_0x1a94('0x1e')];_0x396cd0[_0x1a94('0x38')][_0x411b5b]['on']('end',function(){stopRouting(_0x411b5b,_0x55c8d4,_0x188224,_0x396cd0);_0x9928bd[_0x1a94('0x39')](!![]);clearTimeout(_0x313819);_0x313819=undefined;if(_0x396cd0[_0x1a94('0x38')][_0x411b5b]){delete _0x396cd0['rules'][_0x411b5b];}logger[_0x1a94('0x3a')](_0x1a94('0x3b'),_0x411b5b);_0xa08547[_0x1a94('0x33')]();});_0x313819=setTimeout(function(){endRouting(_0x411b5b,_0x55c8d4,_0x188224,_0x396cd0);clearTimeout(_0x313819);_0x9928bd['close'](!![]);logger[_0x1a94('0x3a')](_0x1a94('0x3c'),_0x411b5b);_0xa08547['next']();},_0x2518cb);switch(_0x55c8d4[_0x1a94('0x3d')]){case _0x1a94('0x3e'):strategy[_0x1a94('0x3e')](_0x9928bd,_0x55c8d4,_0x396cd0,_0x188224);break;default:strategy['beepall'](_0x9928bd,_0x55c8d4,_0x396cd0,_0x188224);}}else{logger[_0x1a94('0x2a')](_0x1a94('0x3f'),_0x411b5b,_0x34fb41[_0x1a94('0x26')]);_0xa08547[_0x1a94('0x33')]();}}}catch(_0xe4c7e9){console[_0x1a94('0x40')](_0xe4c7e9);logger[_0x1a94('0x2a')](_0x1a94('0x31'),_0x411b5b,_0xe4c7e9[_0x1a94('0x41')]);_0xa08547['stop']();}};};
\ No newline at end of file
index 915e34c..2844d0b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe661=['forcedOwnership','isAgentAvailable','busy','busyQueue','showNotification','writeLog','RINGING',':FORCED','[%s][AGENT]\x20agent\x20%s\x20is\x20not\x20available','handleTimeout','isNil','hideNotification','STOP','lodash','uuid','../../../../../config/logger','notificationId','squeue','agent','realtime','routing','handleRun','bind','timeout','handleDrained','prototype','push','info','agents'];(function(_0x19eab8,_0x50c0c8){var _0x3b3a03=function(_0x47b164){while(--_0x47b164){_0x19eab8['push'](_0x19eab8['shift']());}};_0x3b3a03(++_0x50c0c8);}(_0xe661,0x64));var _0x1e66=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0xe661[_0x501510];return _0x1e6ee5;};'use strict';var _=require(_0x1e66('0x0'));var uuid=require(_0x1e66('0x1'));var util=require('./util');var logger=require(_0x1e66('0x2'))('routing');var Agent=function(_0x11a7f3,_0x433ffe,_0xf067cd,_0x1dcdee){this[_0x1e66('0x3')]=uuid['v4']();this[_0x1e66('0x4')]=_0x11a7f3;this[_0x1e66('0x5')]=_0x433ffe;this[_0x1e66('0x6')]=_0xf067cd;this[_0x1e66('0x7')]=_0x1dcdee;this['squeue']['push'](this[_0x1e66('0x8')][_0x1e66('0x9')](this),this['handleTimeout']['bind'](this));this['squeue']['on'](_0x1e66('0xa'),this['handleTimeout'][_0x1e66('0x9')](this));this[_0x1e66('0x4')]['on']('drained',this[_0x1e66('0xb')][_0x1e66('0x9')](this));};Agent[_0x1e66('0xc')][_0x1e66('0xd')]=function(){this[_0x1e66('0x4')][_0x1e66('0xd')](this[_0x1e66('0x8')][_0x1e66('0x9')](this),this['handleTimeout'][_0x1e66('0x9')](this));};Agent[_0x1e66('0xc')][_0x1e66('0xb')]=function(){this['handleTimeout'](!![]);};Agent[_0x1e66('0xc')][_0x1e66('0x8')]=function(_0xcf1ef3){logger[_0x1e66('0xe')]('[%s][AGENT]\x20try\x20with\x20%s',this[_0x1e66('0x4')]['id'],this[_0x1e66('0x5')]['id']);if(_['isNil'](this[_0x1e66('0x6')][_0x1e66('0xf')][this[_0x1e66('0x5')]['id']])){logger['info']('[%s][AGENT]\x20agent\x20skipped,\x20unknown\x20id\x20%s',this[_0x1e66('0x4')]['id'],this[_0x1e66('0x5')]['id']);setTimeout(this[_0x1e66('0xd')][_0x1e66('0x9')](this),0x3e8);}else{if(this[_0x1e66('0x7')][_0x1e66('0x10')]||util[_0x1e66('0x11')](this[_0x1e66('0x4')]['id'],this['realtime'][_0x1e66('0xf')][this[_0x1e66('0x5')]['id']],this[_0x1e66('0x4')]['channel'],![])){this[_0x1e66('0x6')][_0x1e66('0xf')][this[_0x1e66('0x5')]['id']][_0x1e66('0x12')]=!![];this['realtime']['agents'][this[_0x1e66('0x5')]['id']][_0x1e66('0x13')]=undefined;util[_0x1e66('0x14')](this[_0x1e66('0x3')],this[_0x1e66('0x4')]['id'],this[_0x1e66('0x6')]['agents'][this[_0x1e66('0x5')]['id']],null,this[_0x1e66('0x7')]);util[_0x1e66('0x15')](this['squeue']['id'],this[_0x1e66('0x6')][_0x1e66('0xf')][this[_0x1e66('0x5')]['id']],_0x1e66('0x16')+(this[_0x1e66('0x7')][_0x1e66('0x10')]?_0x1e66('0x17'):''));}else{logger[_0x1e66('0xe')](_0x1e66('0x18'),this[_0x1e66('0x4')]['id'],this['agent']['id']);setTimeout(this[_0x1e66('0xd')]['bind'](this),0x3e8);}}};Agent['prototype'][_0x1e66('0x19')]=function(_0xfae670){if(_[_0x1e66('0x1a')](this['realtime'][_0x1e66('0xf')][this['agent']['id']])){return logger[_0x1e66('0xe')]('[%s][AGENT]\x20agent\x20skipped,\x20unknown\x20id\x20%s',this[_0x1e66('0x4')]['id'],this['agent']['id']);}else{logger[_0x1e66('0xe')]('[%s][AGENT]\x20timeout\x20with\x20%s',this[_0x1e66('0x4')]['id'],this[_0x1e66('0x5')]['id']);util[_0x1e66('0x1b')](this[_0x1e66('0x3')],this['squeue']['id'],this[_0x1e66('0x6')]['agents'][this['agent']['id']],null,this[_0x1e66('0x7')]);this[_0x1e66('0x6')][_0x1e66('0xf')][this[_0x1e66('0x5')]['id']][_0x1e66('0x12')]=![];this[_0x1e66('0x6')]['agents'][this[_0x1e66('0x5')]['id']][_0x1e66('0x13')]=undefined;util['writeLog'](this[_0x1e66('0x4')]['id'],this[_0x1e66('0x6')]['agents'][this[_0x1e66('0x5')]['id']],_0xfae670?_0x1e66('0x1c'):'TIMEOUT');}if(!_0xfae670){setTimeout(this[_0x1e66('0xd')][_0x1e66('0x9')](this),0x3e8);}};function agent(_0x4fc78b,_0x96a856,_0x17792f,_0x441f96){return new Agent(_0x4fc78b,_0x96a856,_0x17792f,_0x441f96);}module['exports']=agent;
\ No newline at end of file
+var _0x5d1c=['busy','notificationId','RINGING','forcedOwnership','[%s][AGENT]\x20timeout\x20with\x20%s','hideNotification','busyQueue','writeLog','TIMEOUT','../../../../../config/logger','routing','squeue','agent','realtime','handleRun','bind','handleTimeout','timeout','drained','handleDrained','push','prototype','info','[%s][AGENT]\x20try\x20with\x20%s','isNil','agents','[%s][AGENT]\x20agent\x20skipped,\x20unknown\x20id\x20%s','isAgentAvailable'];(function(_0x5d48bb,_0x3dd5ff){var _0x3b4af5=function(_0x115f6b){while(--_0x115f6b){_0x5d48bb['push'](_0x5d48bb['shift']());}};_0x3b4af5(++_0x3dd5ff);}(_0x5d1c,0x159));var _0xc5d1=function(_0x71d321,_0x4e4307){_0x71d321=_0x71d321-0x0;var _0x55a298=_0x5d1c[_0x71d321];return _0x55a298;};'use strict';var _=require('lodash');var uuid=require('uuid');var util=require('./util');var logger=require(_0xc5d1('0x0'))(_0xc5d1('0x1'));var Agent=function(_0x1171ab,_0x4bc3ba,_0x426f03,_0x5a46f2){this['notificationId']=uuid['v4']();this[_0xc5d1('0x2')]=_0x1171ab;this[_0xc5d1('0x3')]=_0x4bc3ba;this[_0xc5d1('0x4')]=_0x426f03;this['routing']=_0x5a46f2;this[_0xc5d1('0x2')]['push'](this[_0xc5d1('0x5')][_0xc5d1('0x6')](this),this[_0xc5d1('0x7')][_0xc5d1('0x6')](this));this[_0xc5d1('0x2')]['on'](_0xc5d1('0x8'),this[_0xc5d1('0x7')]['bind'](this));this[_0xc5d1('0x2')]['on'](_0xc5d1('0x9'),this[_0xc5d1('0xa')]['bind'](this));};Agent['prototype'][_0xc5d1('0xb')]=function(){this['squeue'][_0xc5d1('0xb')](this['handleRun'][_0xc5d1('0x6')](this),this[_0xc5d1('0x7')][_0xc5d1('0x6')](this));};Agent[_0xc5d1('0xc')][_0xc5d1('0xa')]=function(){this[_0xc5d1('0x7')](!![]);};Agent[_0xc5d1('0xc')][_0xc5d1('0x5')]=function(_0x4ed4df){logger[_0xc5d1('0xd')](_0xc5d1('0xe'),this[_0xc5d1('0x2')]['id'],this[_0xc5d1('0x3')]['id']);if(_[_0xc5d1('0xf')](this[_0xc5d1('0x4')][_0xc5d1('0x10')][this[_0xc5d1('0x3')]['id']])){logger[_0xc5d1('0xd')](_0xc5d1('0x11'),this[_0xc5d1('0x2')]['id'],this['agent']['id']);setTimeout(this[_0xc5d1('0xb')][_0xc5d1('0x6')](this),0x3e8);}else{if(this[_0xc5d1('0x1')]['forcedOwnership']||util[_0xc5d1('0x12')](this[_0xc5d1('0x2')]['id'],this[_0xc5d1('0x4')][_0xc5d1('0x10')][this[_0xc5d1('0x3')]['id']],this['squeue']['channel'],![])){this[_0xc5d1('0x4')]['agents'][this[_0xc5d1('0x3')]['id']][_0xc5d1('0x13')]=!![];this[_0xc5d1('0x4')][_0xc5d1('0x10')][this[_0xc5d1('0x3')]['id']]['busyQueue']=undefined;util['showNotification'](this[_0xc5d1('0x14')],this['squeue']['id'],this['realtime'][_0xc5d1('0x10')][this[_0xc5d1('0x3')]['id']],null,this[_0xc5d1('0x1')]);util['writeLog'](this[_0xc5d1('0x2')]['id'],this[_0xc5d1('0x4')][_0xc5d1('0x10')][this[_0xc5d1('0x3')]['id']],_0xc5d1('0x15')+(this[_0xc5d1('0x1')][_0xc5d1('0x16')]?':FORCED':''));}else{logger[_0xc5d1('0xd')]('[%s][AGENT]\x20agent\x20%s\x20is\x20not\x20available',this[_0xc5d1('0x2')]['id'],this[_0xc5d1('0x3')]['id']);setTimeout(this[_0xc5d1('0xb')][_0xc5d1('0x6')](this),0x3e8);}}};Agent[_0xc5d1('0xc')][_0xc5d1('0x7')]=function(_0x5f04e7){if(_[_0xc5d1('0xf')](this[_0xc5d1('0x4')][_0xc5d1('0x10')][this[_0xc5d1('0x3')]['id']])){return logger['info'](_0xc5d1('0x11'),this['squeue']['id'],this['agent']['id']);}else{logger[_0xc5d1('0xd')](_0xc5d1('0x17'),this[_0xc5d1('0x2')]['id'],this['agent']['id']);util[_0xc5d1('0x18')](this[_0xc5d1('0x14')],this[_0xc5d1('0x2')]['id'],this['realtime'][_0xc5d1('0x10')][this[_0xc5d1('0x3')]['id']],null,this[_0xc5d1('0x1')]);this[_0xc5d1('0x4')][_0xc5d1('0x10')][this['agent']['id']][_0xc5d1('0x13')]=![];this[_0xc5d1('0x4')][_0xc5d1('0x10')][this['agent']['id']][_0xc5d1('0x19')]=undefined;util[_0xc5d1('0x1a')](this[_0xc5d1('0x2')]['id'],this[_0xc5d1('0x4')][_0xc5d1('0x10')][this[_0xc5d1('0x3')]['id']],_0x5f04e7?'STOP':_0xc5d1('0x1b'));}if(!_0x5f04e7){setTimeout(this['push'][_0xc5d1('0x6')](this),0x3e8);}};function agent(_0x3ae012,_0x3a2160,_0x575f31,_0x4e10b2){return new Agent(_0x3ae012,_0x3a2160,_0x575f31,_0x4e10b2);}module['exports']=agent;
\ No newline at end of file
index f2bf245..1b42270 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xac6d=['prototype','handleDrained','Agents','length','isNil','agents','info','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','isAgentAvailable','channel','writeLog','RINGING','busy','busyQueue','showNotification','[%s][QUEUE]\x20ALL\x20AGENTS\x20ARE\x20BUSY','[%s][QUEUE]\x20EMPTY','hideNotification','exports','lodash','../../../../../config/logger','routing','notificationId','squeue','queue','realtime','push','handleRun','handleTimeout','timeout','bind'];(function(_0x5447fd,_0x52a6b5){var _0x15b28a=function(_0x370d4f){while(--_0x370d4f){_0x5447fd['push'](_0x5447fd['shift']());}};_0x15b28a(++_0x52a6b5);}(_0xac6d,0x168));var _0xdac6=function(_0x236d24,_0x29e80a){_0x236d24=_0x236d24-0x0;var _0x1574cf=_0xac6d[_0x236d24];return _0x1574cf;};'use strict';var _=require(_0xdac6('0x0'));var uuid=require('uuid');var util=require('./util');var logger=require(_0xdac6('0x1'))(_0xdac6('0x2'));var Beepall=function(_0x166d22,_0xf69dca,_0x489b64,_0x33e366){this[_0xdac6('0x3')]=uuid['v4']();this[_0xdac6('0x4')]=_0x166d22;this[_0xdac6('0x5')]=_0xf69dca;this[_0xdac6('0x6')]=_0x489b64;this['routing']=_0x33e366;this[_0xdac6('0x4')][_0xdac6('0x7')](this[_0xdac6('0x8')]['bind'](this),this[_0xdac6('0x9')]['bind'](this));this['squeue']['on'](_0xdac6('0xa'),this[_0xdac6('0x9')][_0xdac6('0xb')](this));this[_0xdac6('0x4')]['on']('drained',this['handleDrained'][_0xdac6('0xb')](this));};Beepall[_0xdac6('0xc')][_0xdac6('0x7')]=function(){this[_0xdac6('0x4')][_0xdac6('0x7')](this[_0xdac6('0x8')][_0xdac6('0xb')](this),this[_0xdac6('0x9')][_0xdac6('0xb')](this));};Beepall[_0xdac6('0xc')][_0xdac6('0xd')]=function(_0x36a09d){this[_0xdac6('0x9')](!![]);};Beepall['prototype']['handleRun']=function(_0x26a5c3){var _0x5499e4=!![];if(!_['isNil'](this[_0xdac6('0x5')])&&!_['isNil'](this['queue']['Agents'])&&this[_0xdac6('0x5')][_0xdac6('0xe')][_0xdac6('0xf')]>0x0){for(var _0x4df335=0x0,_0x1755bc;_0x4df335<this[_0xdac6('0x5')][_0xdac6('0xe')][_0xdac6('0xf')];_0x4df335+=0x1){_0x1755bc=this['queue']['Agents'][_0x4df335]['id'];if(_[_0xdac6('0x10')](this[_0xdac6('0x6')][_0xdac6('0x11')][_0x1755bc])){logger[_0xdac6('0x12')](_0xdac6('0x13'),this[_0xdac6('0x4')]['id'],_0x1755bc);}else{if(util[_0xdac6('0x14')](this['squeue']['id'],this[_0xdac6('0x6')]['agents'][_0x1755bc],this[_0xdac6('0x4')][_0xdac6('0x15')],!![])){_0x5499e4=![];util[_0xdac6('0x16')](this['squeue']['id'],this[_0xdac6('0x6')][_0xdac6('0x11')][_0x1755bc],_0xdac6('0x17'));this[_0xdac6('0x6')][_0xdac6('0x11')][_0x1755bc][_0xdac6('0x18')]=!![];this[_0xdac6('0x6')][_0xdac6('0x11')][_0x1755bc][_0xdac6('0x19')]=this['queue']['name'];util[_0xdac6('0x1a')](this[_0xdac6('0x3')],this[_0xdac6('0x4')]['id'],this[_0xdac6('0x6')][_0xdac6('0x11')][_0x1755bc],this['queue'],this[_0xdac6('0x2')]);}}}if(_0x5499e4){logger[_0xdac6('0x12')](_0xdac6('0x1b'),this[_0xdac6('0x4')]['id']);setTimeout(this[_0xdac6('0x7')]['bind'](this),0x3e8);}}else{logger[_0xdac6('0x12')](_0xdac6('0x1c'),this[_0xdac6('0x4')]['id']);setTimeout(this[_0xdac6('0x7')][_0xdac6('0xb')](this),0x3e8);}};Beepall[_0xdac6('0xc')]['handleTimeout']=function(_0x2dcfee){if(!_['isNil'](this[_0xdac6('0x5')])&&!_[_0xdac6('0x10')](this[_0xdac6('0x5')][_0xdac6('0xe')])){for(var _0x353d8d=0x0,_0x256bd2;_0x353d8d<this[_0xdac6('0x5')][_0xdac6('0xe')][_0xdac6('0xf')];_0x353d8d+=0x1){_0x256bd2=this[_0xdac6('0x5')][_0xdac6('0xe')][_0x353d8d]['id'];if(_[_0xdac6('0x10')](this[_0xdac6('0x6')][_0xdac6('0x11')][_0x256bd2])){logger['info'](_0xdac6('0x13'),this['squeue']['id'],_0x256bd2);}else{util[_0xdac6('0x1d')](this[_0xdac6('0x3')],this[_0xdac6('0x4')]['id'],this[_0xdac6('0x6')]['agents'][_0x256bd2],this[_0xdac6('0x5')],this['routing']);util[_0xdac6('0x16')](this[_0xdac6('0x4')]['id'],this[_0xdac6('0x6')]['agents'][_0x256bd2],_0x2dcfee?'STOP':'TIMEOUT');this[_0xdac6('0x6')][_0xdac6('0x11')][_0x256bd2]['busy']=![];this[_0xdac6('0x6')]['agents'][_0x256bd2][_0xdac6('0x19')]=undefined;}}}if(!_0x2dcfee){setTimeout(this['push'][_0xdac6('0xb')](this),0x3e8);}};function beepall(_0x27b9da,_0x16436a,_0x58177c,_0x4e0da3){return new Beepall(_0x27b9da,_0x16436a,_0x58177c,_0x4e0da3);}module[_0xdac6('0x1e')]=beepall;
\ No newline at end of file
+var _0x87e1=['agents','info','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','isAgentAvailable','channel','writeLog','busy','busyQueue','name','hideNotification','STOP','TIMEOUT','exports','lodash','./util','routing','notificationId','queue','realtime','squeue','push','bind','timeout','handleTimeout','handleDrained','prototype','handleRun','isNil','length','Agents'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0x87e1,0xa3));var _0x187e=function(_0x152b03,_0x2b427f){_0x152b03=_0x152b03-0x0;var _0x5a5d4b=_0x87e1[_0x152b03];return _0x5a5d4b;};'use strict';var _=require(_0x187e('0x0'));var uuid=require('uuid');var util=require(_0x187e('0x1'));var logger=require('../../../../../config/logger')(_0x187e('0x2'));var Beepall=function(_0x4f731a,_0x4faa73,_0x390216,_0x1f7069){this[_0x187e('0x3')]=uuid['v4']();this['squeue']=_0x4f731a;this[_0x187e('0x4')]=_0x4faa73;this[_0x187e('0x5')]=_0x390216;this[_0x187e('0x2')]=_0x1f7069;this[_0x187e('0x6')][_0x187e('0x7')](this['handleRun'][_0x187e('0x8')](this),this['handleTimeout'][_0x187e('0x8')](this));this[_0x187e('0x6')]['on'](_0x187e('0x9'),this[_0x187e('0xa')]['bind'](this));this[_0x187e('0x6')]['on']('drained',this[_0x187e('0xb')]['bind'](this));};Beepall[_0x187e('0xc')][_0x187e('0x7')]=function(){this[_0x187e('0x6')][_0x187e('0x7')](this[_0x187e('0xd')][_0x187e('0x8')](this),this[_0x187e('0xa')][_0x187e('0x8')](this));};Beepall[_0x187e('0xc')][_0x187e('0xb')]=function(_0x370e85){this[_0x187e('0xa')](!![]);};Beepall['prototype'][_0x187e('0xd')]=function(_0x21a47c){var _0x56cb35=!![];if(!_[_0x187e('0xe')](this[_0x187e('0x4')])&&!_[_0x187e('0xe')](this[_0x187e('0x4')]['Agents'])&&this[_0x187e('0x4')]['Agents'][_0x187e('0xf')]>0x0){for(var _0x3fd1bf=0x0,_0x3cb1aa;_0x3fd1bf<this['queue'][_0x187e('0x10')][_0x187e('0xf')];_0x3fd1bf+=0x1){_0x3cb1aa=this[_0x187e('0x4')]['Agents'][_0x3fd1bf]['id'];if(_[_0x187e('0xe')](this[_0x187e('0x5')][_0x187e('0x11')][_0x3cb1aa])){logger[_0x187e('0x12')](_0x187e('0x13'),this['squeue']['id'],_0x3cb1aa);}else{if(util[_0x187e('0x14')](this[_0x187e('0x6')]['id'],this[_0x187e('0x5')][_0x187e('0x11')][_0x3cb1aa],this['squeue'][_0x187e('0x15')],!![])){_0x56cb35=![];util[_0x187e('0x16')](this[_0x187e('0x6')]['id'],this[_0x187e('0x5')]['agents'][_0x3cb1aa],'RINGING');this['realtime'][_0x187e('0x11')][_0x3cb1aa][_0x187e('0x17')]=!![];this['realtime'][_0x187e('0x11')][_0x3cb1aa][_0x187e('0x18')]=this['queue'][_0x187e('0x19')];util['showNotification'](this['notificationId'],this[_0x187e('0x6')]['id'],this[_0x187e('0x5')][_0x187e('0x11')][_0x3cb1aa],this[_0x187e('0x4')],this['routing']);}}}if(_0x56cb35){logger[_0x187e('0x12')]('[%s][QUEUE]\x20ALL\x20AGENTS\x20ARE\x20BUSY',this[_0x187e('0x6')]['id']);setTimeout(this['push'][_0x187e('0x8')](this),0x3e8);}}else{logger['info']('[%s][QUEUE]\x20EMPTY',this[_0x187e('0x6')]['id']);setTimeout(this[_0x187e('0x7')]['bind'](this),0x3e8);}};Beepall[_0x187e('0xc')][_0x187e('0xa')]=function(_0x1b830b){if(!_['isNil'](this[_0x187e('0x4')])&&!_['isNil'](this['queue'][_0x187e('0x10')])){for(var _0x3b8cbd=0x0,_0x228f85;_0x3b8cbd<this['queue'][_0x187e('0x10')][_0x187e('0xf')];_0x3b8cbd+=0x1){_0x228f85=this['queue'][_0x187e('0x10')][_0x3b8cbd]['id'];if(_[_0x187e('0xe')](this[_0x187e('0x5')][_0x187e('0x11')][_0x228f85])){logger[_0x187e('0x12')](_0x187e('0x13'),this[_0x187e('0x6')]['id'],_0x228f85);}else{util[_0x187e('0x1a')](this['notificationId'],this[_0x187e('0x6')]['id'],this[_0x187e('0x5')]['agents'][_0x228f85],this['queue'],this[_0x187e('0x2')]);util[_0x187e('0x16')](this[_0x187e('0x6')]['id'],this[_0x187e('0x5')][_0x187e('0x11')][_0x228f85],_0x1b830b?_0x187e('0x1b'):_0x187e('0x1c'));this['realtime'][_0x187e('0x11')][_0x228f85][_0x187e('0x17')]=![];this['realtime'][_0x187e('0x11')][_0x228f85][_0x187e('0x18')]=undefined;}}}if(!_0x1b830b){setTimeout(this[_0x187e('0x7')]['bind'](this),0x3e8);}};function beepall(_0x4aea58,_0x2a0c24,_0x55f55d,_0x279b36){return new Beepall(_0x4aea58,_0x2a0c24,_0x55f55d,_0x279b36);}module[_0x187e('0x1d')]=beepall;
\ No newline at end of file
index 6e1b9e7..df6e601 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1db9=['./beepall','./agent','exports','./rrmemory'];(function(_0x132737,_0xb95113){var _0x3dc144=function(_0x4e685a){while(--_0x4e685a){_0x132737['push'](_0x132737['shift']());}};_0x3dc144(++_0xb95113);}(_0x1db9,0x176));var _0x91db=function(_0x30ec7c,_0x4d7bf7){_0x30ec7c=_0x30ec7c-0x0;var _0x41dba1=_0x1db9[_0x30ec7c];return _0x41dba1;};'use strict';module[_0x91db('0x0')]={'rrmemory':require(_0x91db('0x1')),'beepall':require(_0x91db('0x2')),'agent':require(_0x91db('0x3'))};
\ No newline at end of file
+var _0x13f5=['./rrmemory','./beepall','./agent','exports'];(function(_0x1d51ac,_0x4db272){var _0x51e928=function(_0x1bcaa0){while(--_0x1bcaa0){_0x1d51ac['push'](_0x1d51ac['shift']());}};_0x51e928(++_0x4db272);}(_0x13f5,0xc3));var _0x513f=function(_0x46e363,_0x45d7e2){_0x46e363=_0x46e363-0x0;var _0x3fb059=_0x13f5[_0x46e363];return _0x3fb059;};'use strict';module[_0x513f('0x0')]={'rrmemory':require(_0x513f('0x1')),'beepall':require(_0x513f('0x2')),'agent':require(_0x513f('0x3'))};
\ No newline at end of file
index d6a5213..5f3ef81 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5dc4=['timeout','drained','handleDrained','prototype','isAgentAvailable','agents','agentId','channel','info','mapAgentsId','[%s][QUEUE]\x20try\x20with\x20%s','isNil','done','busy','writeLog','RINGING','handleCheckReject','[%s][QUEUE]\x20agent\x20skipped,\x20not\x20available\x20id\x20%s','[%s][QUEUE]\x20timeout\x20with\x20%s','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','hideNotification','TIMEOUT','busyQueue','lodash','./util','../../../../../config/logger','routing','notificationId','queue','realtime','intervals','squeue','push','handleRun','bind','handleTimeout','module'];(function(_0x591896,_0x386bac){var _0x5eaa48=function(_0x10ca6a){while(--_0x10ca6a){_0x591896['push'](_0x591896['shift']());}};_0x5eaa48(++_0x386bac);}(_0x5dc4,0x164));var _0x45dc=function(_0x479a87,_0x37fc8e){_0x479a87=_0x479a87-0x0;var _0x479ff8=_0x5dc4[_0x479a87];return _0x479ff8;};'use strict';var rr=require('rr');var _=require(_0x45dc('0x0'));var uuid=require('uuid');var util=require(_0x45dc('0x1'));var logger=require(_0x45dc('0x2'))(_0x45dc('0x3'));var RRMemory=function(_0x58e7b2,_0x5ba7eb,_0x49e4ca,_0x100813){this[_0x45dc('0x4')]=uuid['v4']();this['squeue']=_0x58e7b2;this[_0x45dc('0x5')]=_0x5ba7eb;this[_0x45dc('0x6')]=_0x49e4ca;this[_0x45dc('0x3')]=_0x100813;this[_0x45dc('0x7')]={};this[_0x45dc('0x8')][_0x45dc('0x9')](this[_0x45dc('0xa')][_0x45dc('0xb')](this),this[_0x45dc('0xc')][_0x45dc('0xb')](this),this[_0x45dc('0xd')]);this[_0x45dc('0x8')]['on'](_0x45dc('0xe'),this[_0x45dc('0xc')]['bind'](this));this['squeue']['on'](_0x45dc('0xf'),this[_0x45dc('0x10')][_0x45dc('0xb')](this));};RRMemory['prototype'][_0x45dc('0x9')]=function(){this[_0x45dc('0x8')][_0x45dc('0x9')](this[_0x45dc('0xa')][_0x45dc('0xb')](this),this[_0x45dc('0xc')]['bind'](this));};RRMemory[_0x45dc('0x11')][_0x45dc('0x10')]=function(_0x7ddfb3){this['handleTimeout'](!![]);};RRMemory[_0x45dc('0x11')]['handleCheckReject']=function(_0x3fd282){if(util[_0x45dc('0x12')](this['squeue']['id'],this[_0x45dc('0x6')][_0x45dc('0x13')][this[_0x45dc('0x14')]],this[_0x45dc('0x8')][_0x45dc('0x15')],!![])){logger[_0x45dc('0x16')]('[%s][QUEUE]\x20available\x20again\x20%s',this[_0x45dc('0x8')]['id'],this[_0x45dc('0x14')]);clearInterval(this[_0x45dc('0x7')][this[_0x45dc('0x14')]]);_0x3fd282['done']();setTimeout(this['push'][_0x45dc('0xb')](this),0x3e8);}};RRMemory['prototype'][_0x45dc('0xa')]=function(_0x3f91db){this[_0x45dc('0x14')]=rr(this['queue'][_0x45dc('0x17')]);logger[_0x45dc('0x16')](_0x45dc('0x18'),this[_0x45dc('0x8')]['id'],this[_0x45dc('0x14')]);if(_[_0x45dc('0x19')](this[_0x45dc('0x6')][_0x45dc('0x13')][this[_0x45dc('0x14')]])){logger['info']('[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s',this[_0x45dc('0x8')]['id'],this['agentId']);_0x3f91db[_0x45dc('0x1a')]();setTimeout(this[_0x45dc('0x9')][_0x45dc('0xb')](this),0x3e8);}else{if(util[_0x45dc('0x12')](this[_0x45dc('0x8')]['id'],this[_0x45dc('0x6')][_0x45dc('0x13')][this[_0x45dc('0x14')]],this[_0x45dc('0x8')]['channel'],!![])){this[_0x45dc('0x6')][_0x45dc('0x13')][this[_0x45dc('0x14')]][_0x45dc('0x1b')]=!![];this[_0x45dc('0x6')][_0x45dc('0x13')][this['agentId']]['busyQueue']=this[_0x45dc('0x5')]['name'];util['showNotification'](this['notificationId'],this[_0x45dc('0x8')]['id'],this[_0x45dc('0x6')]['agents'][this[_0x45dc('0x14')]],this[_0x45dc('0x5')],this[_0x45dc('0x3')]);util[_0x45dc('0x1c')](this[_0x45dc('0x8')]['id'],this[_0x45dc('0x6')][_0x45dc('0x13')][this[_0x45dc('0x14')]],_0x45dc('0x1d'));this[_0x45dc('0x7')][this['agentId']]=setInterval(this[_0x45dc('0x1e')][_0x45dc('0xb')](this,_0x3f91db),0x3e8);}else{logger['info'](_0x45dc('0x1f'),this['squeue']['id'],this[_0x45dc('0x14')]);_0x3f91db[_0x45dc('0x1a')]();setTimeout(this[_0x45dc('0x9')][_0x45dc('0xb')](this),0x3e8);}}};RRMemory[_0x45dc('0x11')][_0x45dc('0xc')]=function(_0x5d8634){logger[_0x45dc('0x16')](_0x45dc('0x20'),this['squeue']['id'],this[_0x45dc('0x14')]);if(_[_0x45dc('0x19')](this[_0x45dc('0x6')][_0x45dc('0x13')][this[_0x45dc('0x14')]])){logger[_0x45dc('0x16')](_0x45dc('0x21'),this['squeue']['id'],this[_0x45dc('0x14')]);}else{clearInterval(this[_0x45dc('0x7')][this[_0x45dc('0x14')]]);util[_0x45dc('0x22')](this[_0x45dc('0x4')],this[_0x45dc('0x8')]['id'],this[_0x45dc('0x6')][_0x45dc('0x13')][this[_0x45dc('0x14')]],this[_0x45dc('0x5')],this[_0x45dc('0x3')]);util[_0x45dc('0x1c')](this[_0x45dc('0x8')]['id'],this[_0x45dc('0x6')]['agents'][this['agentId']],_0x45dc('0x23'));this[_0x45dc('0x6')][_0x45dc('0x13')][this['agentId']][_0x45dc('0x1b')]=![];this['realtime'][_0x45dc('0x13')][this[_0x45dc('0x14')]][_0x45dc('0x24')]=undefined;}if(!_0x5d8634){setTimeout(this['push'][_0x45dc('0xb')](this),0x3e8);}};function rrmemory(_0x7b84e5,_0x3625e5,_0x521dd6,_0x353efa){return new RRMemory(_0x7b84e5,_0x3625e5,_0x521dd6,_0x353efa);}module['exports']=rrmemory;
\ No newline at end of file
+var _0x2f3f=['squeue','realtime','intervals','push','bind','handleTimeout','module','timeout','handleDrained','prototype','handleCheckReject','agents','agentId','channel','info','[%s][QUEUE]\x20available\x20again\x20%s','handleRun','queue','mapAgentsId','isNil','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','done','isAgentAvailable','busyQueue','name','writeLog','RINGING','[%s][QUEUE]\x20agent\x20skipped,\x20not\x20available\x20id\x20%s','[%s][QUEUE]\x20timeout\x20with\x20%s','hideNotification','busy','uuid','./util','../../../../../config/logger','routing','notificationId'];(function(_0x1bdaca,_0x36c243){var _0x48f486=function(_0x320ba1){while(--_0x320ba1){_0x1bdaca['push'](_0x1bdaca['shift']());}};_0x48f486(++_0x36c243);}(_0x2f3f,0x1cf));var _0xf2f3=function(_0x1d1779,_0x284147){_0x1d1779=_0x1d1779-0x0;var _0x2377e9=_0x2f3f[_0x1d1779];return _0x2377e9;};'use strict';var rr=require('rr');var _=require('lodash');var uuid=require(_0xf2f3('0x0'));var util=require(_0xf2f3('0x1'));var logger=require(_0xf2f3('0x2'))(_0xf2f3('0x3'));var RRMemory=function(_0x35d86c,_0xabf6fc,_0x4ee6c2,_0x24edd1){this[_0xf2f3('0x4')]=uuid['v4']();this[_0xf2f3('0x5')]=_0x35d86c;this['queue']=_0xabf6fc;this[_0xf2f3('0x6')]=_0x4ee6c2;this[_0xf2f3('0x3')]=_0x24edd1;this[_0xf2f3('0x7')]={};this[_0xf2f3('0x5')][_0xf2f3('0x8')](this['handleRun'][_0xf2f3('0x9')](this),this[_0xf2f3('0xa')][_0xf2f3('0x9')](this),this[_0xf2f3('0xb')]);this[_0xf2f3('0x5')]['on'](_0xf2f3('0xc'),this['handleTimeout'][_0xf2f3('0x9')](this));this[_0xf2f3('0x5')]['on']('drained',this[_0xf2f3('0xd')][_0xf2f3('0x9')](this));};RRMemory[_0xf2f3('0xe')][_0xf2f3('0x8')]=function(){this['squeue'][_0xf2f3('0x8')](this['handleRun'][_0xf2f3('0x9')](this),this['handleTimeout'][_0xf2f3('0x9')](this));};RRMemory[_0xf2f3('0xe')]['handleDrained']=function(_0x4654c1){this[_0xf2f3('0xa')](!![]);};RRMemory[_0xf2f3('0xe')][_0xf2f3('0xf')]=function(_0x555a92){if(util['isAgentAvailable'](this[_0xf2f3('0x5')]['id'],this[_0xf2f3('0x6')][_0xf2f3('0x10')][this[_0xf2f3('0x11')]],this['squeue'][_0xf2f3('0x12')],!![])){logger[_0xf2f3('0x13')](_0xf2f3('0x14'),this[_0xf2f3('0x5')]['id'],this[_0xf2f3('0x11')]);clearInterval(this['intervals'][this[_0xf2f3('0x11')]]);_0x555a92['done']();setTimeout(this['push'][_0xf2f3('0x9')](this),0x3e8);}};RRMemory[_0xf2f3('0xe')][_0xf2f3('0x15')]=function(_0x2b06f0){this[_0xf2f3('0x11')]=rr(this[_0xf2f3('0x16')][_0xf2f3('0x17')]);logger[_0xf2f3('0x13')]('[%s][QUEUE]\x20try\x20with\x20%s',this[_0xf2f3('0x5')]['id'],this['agentId']);if(_[_0xf2f3('0x18')](this[_0xf2f3('0x6')]['agents'][this[_0xf2f3('0x11')]])){logger[_0xf2f3('0x13')](_0xf2f3('0x19'),this['squeue']['id'],this[_0xf2f3('0x11')]);_0x2b06f0[_0xf2f3('0x1a')]();setTimeout(this[_0xf2f3('0x8')][_0xf2f3('0x9')](this),0x3e8);}else{if(util[_0xf2f3('0x1b')](this[_0xf2f3('0x5')]['id'],this[_0xf2f3('0x6')][_0xf2f3('0x10')][this['agentId']],this[_0xf2f3('0x5')]['channel'],!![])){this[_0xf2f3('0x6')][_0xf2f3('0x10')][this['agentId']]['busy']=!![];this[_0xf2f3('0x6')]['agents'][this[_0xf2f3('0x11')]][_0xf2f3('0x1c')]=this['queue'][_0xf2f3('0x1d')];util['showNotification'](this[_0xf2f3('0x4')],this[_0xf2f3('0x5')]['id'],this[_0xf2f3('0x6')][_0xf2f3('0x10')][this['agentId']],this[_0xf2f3('0x16')],this[_0xf2f3('0x3')]);util[_0xf2f3('0x1e')](this[_0xf2f3('0x5')]['id'],this['realtime'][_0xf2f3('0x10')][this[_0xf2f3('0x11')]],_0xf2f3('0x1f'));this[_0xf2f3('0x7')][this['agentId']]=setInterval(this[_0xf2f3('0xf')][_0xf2f3('0x9')](this,_0x2b06f0),0x3e8);}else{logger['info'](_0xf2f3('0x20'),this['squeue']['id'],this[_0xf2f3('0x11')]);_0x2b06f0[_0xf2f3('0x1a')]();setTimeout(this['push'][_0xf2f3('0x9')](this),0x3e8);}}};RRMemory[_0xf2f3('0xe')][_0xf2f3('0xa')]=function(_0x1b7dc7){logger[_0xf2f3('0x13')](_0xf2f3('0x21'),this['squeue']['id'],this[_0xf2f3('0x11')]);if(_['isNil'](this[_0xf2f3('0x6')][_0xf2f3('0x10')][this['agentId']])){logger[_0xf2f3('0x13')](_0xf2f3('0x19'),this[_0xf2f3('0x5')]['id'],this[_0xf2f3('0x11')]);}else{clearInterval(this['intervals'][this[_0xf2f3('0x11')]]);util[_0xf2f3('0x22')](this[_0xf2f3('0x4')],this[_0xf2f3('0x5')]['id'],this[_0xf2f3('0x6')][_0xf2f3('0x10')][this[_0xf2f3('0x11')]],this[_0xf2f3('0x16')],this[_0xf2f3('0x3')]);util[_0xf2f3('0x1e')](this['squeue']['id'],this[_0xf2f3('0x6')][_0xf2f3('0x10')][this[_0xf2f3('0x11')]],'TIMEOUT');this[_0xf2f3('0x6')][_0xf2f3('0x10')][this[_0xf2f3('0x11')]][_0xf2f3('0x23')]=![];this[_0xf2f3('0x6')][_0xf2f3('0x10')][this['agentId']][_0xf2f3('0x1c')]=undefined;}if(!_0x1b7dc7){setTimeout(this[_0xf2f3('0x8')][_0xf2f3('0x9')](this),0x3e8);}};function rrmemory(_0x2d7de3,_0x12e3ad,_0x2c1931,_0x535a1){return new RRMemory(_0x2d7de3,_0x12e3ad,_0x2c1931,_0x535a1);}module['exports']=rrmemory;
\ No newline at end of file
index 071f1f2..8328af4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe30f=['account','notificationShake','body','queue','msg','notificationTemplate','I\x20can\x27t\x20render\x20your\x20template','error','[%s][QUEUE]\x20%s','message','format','notification:%s','save','info','[%s][QUEUE][AGENT:%s][STATUS:%s]','online','Pause','hasOwnProperty','Capacity','CurrentCapacity','\x20MAXCAPACITY','showNotification','hideNotification','writeLog','lodash','util','../utils','mustache','../../../../../config/environment','routing','redis','defaults','localhost','socket.io-emitter','emit','user:%s','name','user:save','\x20interaction'];(function(_0x520893,_0x30fca2){var _0x2993ca=function(_0x222dbe){while(--_0x222dbe){_0x520893['push'](_0x520893['shift']());}};_0x2993ca(++_0x30fca2);}(_0xe30f,0xb4));var _0xfe30=function(_0x432682,_0x253044){_0x432682=_0x432682-0x0;var _0x463d05=_0xe30f[_0x432682];return _0x463d05;};'use strict';var _=require(_0xfe30('0x0'));var util=require(_0xfe30('0x1'));var utils=require(_0xfe30('0x2'));var Mustache=require(_0xfe30('0x3'));var Redis=require('ioredis');var config=require(_0xfe30('0x4'));var logger=require('../../../../../config/logger')(_0xfe30('0x5'));config[_0xfe30('0x6')]=_[_0xfe30('0x7')](config[_0xfe30('0x6')],{'host':_0xfe30('0x8'),'port':0x18eb});var io=require(_0xfe30('0x9'))(new Redis(config[_0xfe30('0x6')]));function emit(_0x130938,_0xaa39cf,_0x17d830){io['to'](_0x130938)[_0xfe30('0xa')](_0xaa39cf,_0x17d830);}function sendNotification(_0x3968a8,_0x56beba,_0x2e75cb,_0x5b0e0e,_0x4cd565,_0x1ac2a7){io['to'](util['format'](_0xfe30('0xb'),_0x5b0e0e[_0xfe30('0xc')]))['emit'](_0xfe30('0xd'),_0x5b0e0e);var _0x3d4bc3=_0x1ac2a7||{};var _0x55c5f9=_0x2e75cb['split']('.');var _0x18bab5={'uniqueid':_0x56beba,'channel':_0x55c5f9[0x0],'id':_0x55c5f9[0x1],'title':_0x55c5f9[0x0]+_0xfe30('0xe'),'interactionId':_0x55c5f9[0x2],'queue':_0x4cd565?_0x4cd565[_0xfe30('0xc')]:null,'sound':_0x3d4bc3[_0xfe30('0xf')]['notificationSound'],'shake':_0x3d4bc3[_0xfe30('0xf')][_0xfe30('0x10')]};try{if(!_0x3d4bc3[_0xfe30('0x11')]){_0x3d4bc3[_0xfe30('0x11')]={};}if(_0x4cd565){_0x3d4bc3[_0xfe30('0x11')][_0xfe30('0x12')]=_0x4cd565;}else if(_0x3d4bc3[_0xfe30('0x11')][_0xfe30('0x12')]){delete _0x3d4bc3[_0xfe30('0x11')][_0xfe30('0x12')];}_0x18bab5[_0xfe30('0x13')]=utils['getMustacheRender'](_0x3d4bc3['account'][_0xfe30('0x14')],_0x3d4bc3);}catch(_0x32bba7){_0x18bab5[_0xfe30('0x13')]=_0xfe30('0x15');logger[_0xfe30('0x16')](util['format'](_0xfe30('0x17'),_0x56beba,_0x32bba7[_0xfe30('0x18')]));}io['to'](util[_0xfe30('0x19')]('user:%s',_0x5b0e0e['name']))[_0xfe30('0xa')](util[_0xfe30('0x19')](_0xfe30('0x1a'),_0x3968a8?_0xfe30('0x1b'):'remove'),_0x18bab5);}function writeLog(_0xdea495,_0x541fbf,_0x180674){return logger[_0xfe30('0x1c')](util['format'](_0xfe30('0x1d'),_0xdea495,_0x541fbf[_0xfe30('0xc')],_0x180674));}exports['isAgentAvailable']=function(_0x25b1cc,_0x5b8934,_0x2f8a8c,_0xe97f60){if(_0x5b8934['busy']){writeLog(_0x25b1cc,_0x5b8934,'BUSY');return![];}if(!_0x5b8934[_0xfe30('0x1e')]){writeLog(_0x25b1cc,_0x5b8934,'OFFLINE');return![];}if(_0x5b8934[_0x2f8a8c+_0xfe30('0x1f')]){writeLog(_0x25b1cc,_0x5b8934,'PAUSE');return![];}if(_0xe97f60&&_0x5b8934[_0xfe30('0x20')](_0x2f8a8c+_0xfe30('0x21'))&&_0x5b8934[_0xfe30('0x20')](_0x2f8a8c+_0xfe30('0x22'))){if(_0x5b8934[_0x2f8a8c+_0xfe30('0x21')]>0x0&&_0x5b8934[_0x2f8a8c+_0xfe30('0x22')]>=_0x5b8934[_0x2f8a8c+_0xfe30('0x21')]){writeLog(_0x25b1cc,_0x5b8934,_0x2f8a8c['toUpperCase']()+_0xfe30('0x23'));return![];}}return!![];};exports[_0xfe30('0x24')]=function(_0xd09272,_0xc77964,_0x29328b,_0x5d7e59,_0x5213b9){return sendNotification(!![],_0xd09272,_0xc77964,_0x29328b,_0x5d7e59,_0x5213b9);};exports[_0xfe30('0x25')]=function(_0x5a78a6,_0x573cbd,_0x4d72fa,_0x213170,_0x367bd0){return sendNotification(![],_0x5a78a6,_0x573cbd,_0x4d72fa,_0x213170,_0x367bd0);};exports[_0xfe30('0x26')]=writeLog;
\ No newline at end of file
+var _0xd223=['name','user:save','split','account','notificationSound','body','queue','getMustacheRender','notificationTemplate','msg','I\x20can\x27t\x20render\x20your\x20template','error','message','notification:%s','remove','info','isAgentAvailable','busy','BUSY','online','OFFLINE','Pause','hasOwnProperty','Capacity','CurrentCapacity','toUpperCase','\x20MAXCAPACITY','showNotification','writeLog','lodash','util','../utils','ioredis','../../../../../config/environment','../../../../../config/logger','routing','redis','localhost','socket.io-emitter','emit','format','user:%s'];(function(_0x2a7138,_0x336f33){var _0x18e984=function(_0x43a785){while(--_0x43a785){_0x2a7138['push'](_0x2a7138['shift']());}};_0x18e984(++_0x336f33);}(_0xd223,0x119));var _0x3d22=function(_0x499ca5,_0x4986cf){_0x499ca5=_0x499ca5-0x0;var _0x7bfd9c=_0xd223[_0x499ca5];return _0x7bfd9c;};'use strict';var _=require(_0x3d22('0x0'));var util=require(_0x3d22('0x1'));var utils=require(_0x3d22('0x2'));var Mustache=require('mustache');var Redis=require(_0x3d22('0x3'));var config=require(_0x3d22('0x4'));var logger=require(_0x3d22('0x5'))(_0x3d22('0x6'));config[_0x3d22('0x7')]=_['defaults'](config[_0x3d22('0x7')],{'host':_0x3d22('0x8'),'port':0x18eb});var io=require(_0x3d22('0x9'))(new Redis(config[_0x3d22('0x7')]));function emit(_0x34830b,_0x1dd385,_0x47c052){io['to'](_0x34830b)[_0x3d22('0xa')](_0x1dd385,_0x47c052);}function sendNotification(_0x96b116,_0x135062,_0x1c4043,_0x356f69,_0x482f07,_0x2e5d8b){io['to'](util[_0x3d22('0xb')](_0x3d22('0xc'),_0x356f69[_0x3d22('0xd')]))[_0x3d22('0xa')](_0x3d22('0xe'),_0x356f69);var _0x56c1c2=_0x2e5d8b||{};var _0x1cfd8b=_0x1c4043[_0x3d22('0xf')]('.');var _0x57dd97={'uniqueid':_0x135062,'channel':_0x1cfd8b[0x0],'id':_0x1cfd8b[0x1],'title':_0x1cfd8b[0x0]+'\x20interaction','interactionId':_0x1cfd8b[0x2],'queue':_0x482f07?_0x482f07[_0x3d22('0xd')]:null,'sound':_0x56c1c2[_0x3d22('0x10')][_0x3d22('0x11')],'shake':_0x56c1c2['account']['notificationShake']};try{if(!_0x56c1c2[_0x3d22('0x12')]){_0x56c1c2['body']={};}if(_0x482f07){_0x56c1c2[_0x3d22('0x12')][_0x3d22('0x13')]=_0x482f07;}else if(_0x56c1c2[_0x3d22('0x12')][_0x3d22('0x13')]){delete _0x56c1c2[_0x3d22('0x12')][_0x3d22('0x13')];}_0x57dd97['msg']=utils[_0x3d22('0x14')](_0x56c1c2[_0x3d22('0x10')][_0x3d22('0x15')],_0x56c1c2);}catch(_0x5ccc5b){_0x57dd97[_0x3d22('0x16')]=_0x3d22('0x17');logger[_0x3d22('0x18')](util[_0x3d22('0xb')]('[%s][QUEUE]\x20%s',_0x135062,_0x5ccc5b[_0x3d22('0x19')]));}io['to'](util['format'](_0x3d22('0xc'),_0x356f69[_0x3d22('0xd')]))[_0x3d22('0xa')](util[_0x3d22('0xb')](_0x3d22('0x1a'),_0x96b116?'save':_0x3d22('0x1b')),_0x57dd97);}function writeLog(_0x3db876,_0x222f22,_0x3afc2f){return logger[_0x3d22('0x1c')](util[_0x3d22('0xb')]('[%s][QUEUE][AGENT:%s][STATUS:%s]',_0x3db876,_0x222f22[_0x3d22('0xd')],_0x3afc2f));}exports[_0x3d22('0x1d')]=function(_0x2191f8,_0x116547,_0x398399,_0x5c60af){if(_0x116547[_0x3d22('0x1e')]){writeLog(_0x2191f8,_0x116547,_0x3d22('0x1f'));return![];}if(!_0x116547[_0x3d22('0x20')]){writeLog(_0x2191f8,_0x116547,_0x3d22('0x21'));return![];}if(_0x116547[_0x398399+_0x3d22('0x22')]){writeLog(_0x2191f8,_0x116547,'PAUSE');return![];}if(_0x5c60af&&_0x116547[_0x3d22('0x23')](_0x398399+_0x3d22('0x24'))&&_0x116547[_0x3d22('0x23')](_0x398399+_0x3d22('0x25'))){if(_0x116547[_0x398399+_0x3d22('0x24')]>0x0&&_0x116547[_0x398399+_0x3d22('0x25')]>=_0x116547[_0x398399+'Capacity']){writeLog(_0x2191f8,_0x116547,_0x398399[_0x3d22('0x26')]()+_0x3d22('0x27'));return![];}}return!![];};exports[_0x3d22('0x28')]=function(_0x2ddb1c,_0x3fea08,_0x2d072d,_0x35b88e,_0x57f06f){return sendNotification(!![],_0x2ddb1c,_0x3fea08,_0x2d072d,_0x35b88e,_0x57f06f);};exports['hideNotification']=function(_0x58f751,_0x366abd,_0x2094e4,_0x5ccdc4,_0x237d67){return sendNotification(![],_0x58f751,_0x366abd,_0x2094e4,_0x5ccdc4,_0x237d67);};exports[_0x3d22('0x29')]=writeLog;
\ No newline at end of file
index b696741..44983dd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9747=['[%s][SYSTEM]\x20result\x20code:\x20%s','isEmpty','[%s][SYSTEM]\x20no\x20variable','body','[%s][SYSTEM]\x20set\x20variable\x20%s:\x20%s','[%s][SYSTEM]\x20%s','isObject','stringify','validate','shelljs','lodash','./utils','../../../../config/logger','routing','string','command\x20is\x20a\x20string\x20and\x20it\x20is\x20required','consequence','length','error','message','join','info','[%s][SYSTEM]\x20no\x20command\x20executed,\x20force\x20next','next','getMustacheRender','[%s][SYSTEM]\x20commnad:\x20%s','exec','trim'];(function(_0x5abe52,_0x10c484){var _0x4be6a1=function(_0x23c30a){while(--_0x23c30a){_0x5abe52['push'](_0x5abe52['shift']());}};_0x4be6a1(++_0x10c484);}(_0x9747,0x1c8));var _0x7974=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x9747[_0x20a584];return _0x4b41a8;};'use strict';var schema=require(_0x7974('0x0'));var sh=require(_0x7974('0x1'));var _=require(_0x7974('0x2'));var utils=require(_0x7974('0x3'));var logger=require(_0x7974('0x4'))(_0x7974('0x5'));var system=schema({'command':{'type':_0x7974('0x6'),'required':!![],'message':_0x7974('0x7')}});exports[_0x7974('0x8')]=function(_0x1e6908,_0x15088e){return function(_0x57e7b3){try{var _0x21566d={'command':_0x15088e[0x0]};var _0x3cf312=system[_0x7974('0x0')](_0x21566d,{'typecast':!![]});if(_0x3cf312[_0x7974('0x9')]){logger[_0x7974('0xa')]('[%s][SYSTEM]\x20%s',_0x1e6908,_['map'](_0x3cf312,_0x7974('0xb'))[_0x7974('0xc')](',\x20'));logger[_0x7974('0xd')](_0x7974('0xe'),_0x1e6908);_0x57e7b3[_0x7974('0xf')]();}else{var _0x34c79f=this;var _0x56cb87=utils[_0x7974('0x10')](_0x15088e[0x0],this);logger[_0x7974('0xd')](_0x7974('0x11'),_0x1e6908,_0x56cb87);sh[_0x7974('0x12')](_[_0x7974('0x13')](_0x56cb87),function(_0x15b060,_0x35c0d7){logger['info'](_0x7974('0x14'),_0x1e6908,_0x15b060);if(_0x15b060==0x0){var _0x1b59af=_0x35c0d7['replace'](/(\r\n|\n|\r)/gm,'');if(_['isNil'](_0x15088e[0x1])||_[_0x7974('0x15')](_0x15088e[0x1])){logger[_0x7974('0xd')](_0x7974('0x16'),_0x1e6908);_0x34c79f[_0x7974('0x17')][_0x15088e[0x1]]=_0x1b59af;}else{logger[_0x7974('0xd')](_0x7974('0x18'),_0x1e6908,_0x15088e[0x1],_0x1b59af);_0x34c79f[_0x7974('0x17')][_0x15088e[0x1]]=_0x1b59af;}}_0x57e7b3[_0x7974('0xf')]();});}}catch(_0x247a9b){logger[_0x7974('0xa')](_0x7974('0x19'),_0x1e6908,_[_0x7974('0x1a')](_0x247a9b)?JSON[_0x7974('0x1b')](_0x247a9b):_0x247a9b);logger['info']('[%s][SYSTEM]\x20no\x20command\x20executed,\x20force\x20next',_0x1e6908);_0x57e7b3[_0x7974('0xf')]();}};};
\ No newline at end of file
+var _0x8a80=['error','validate','shelljs','lodash','./utils','../../../../config/logger','routing','string','command\x20is\x20a\x20string\x20and\x20it\x20is\x20required','consequence','length','[%s][SYSTEM]\x20%s','map','join','info','[%s][SYSTEM]\x20no\x20command\x20executed,\x20force\x20next','next','getMustacheRender','[%s][SYSTEM]\x20commnad:\x20%s','exec','[%s][SYSTEM]\x20result\x20code:\x20%s','isEmpty','[%s][SYSTEM]\x20no\x20variable','body','[%s][SYSTEM]\x20set\x20variable\x20%s:\x20%s'];(function(_0xe8f5ba,_0x5f1f38){var _0x3caf92=function(_0xc22c6a){while(--_0xc22c6a){_0xe8f5ba['push'](_0xe8f5ba['shift']());}};_0x3caf92(++_0x5f1f38);}(_0x8a80,0x15f));var _0x08a8=function(_0x5f1af7,_0x22b226){_0x5f1af7=_0x5f1af7-0x0;var _0x29aaf6=_0x8a80[_0x5f1af7];return _0x29aaf6;};'use strict';var schema=require(_0x08a8('0x0'));var sh=require(_0x08a8('0x1'));var _=require(_0x08a8('0x2'));var utils=require(_0x08a8('0x3'));var logger=require(_0x08a8('0x4'))(_0x08a8('0x5'));var system=schema({'command':{'type':_0x08a8('0x6'),'required':!![],'message':_0x08a8('0x7')}});exports[_0x08a8('0x8')]=function(_0x170087,_0x1084d3){return function(_0x21191f){try{var _0x37d17b={'command':_0x1084d3[0x0]};var _0x2110f0=system[_0x08a8('0x0')](_0x37d17b,{'typecast':!![]});if(_0x2110f0[_0x08a8('0x9')]){logger['error'](_0x08a8('0xa'),_0x170087,_[_0x08a8('0xb')](_0x2110f0,'message')[_0x08a8('0xc')](',\x20'));logger[_0x08a8('0xd')](_0x08a8('0xe'),_0x170087);_0x21191f[_0x08a8('0xf')]();}else{var _0x5aeab3=this;var _0x2c0ec6=utils[_0x08a8('0x10')](_0x1084d3[0x0],this);logger[_0x08a8('0xd')](_0x08a8('0x11'),_0x170087,_0x2c0ec6);sh[_0x08a8('0x12')](_['trim'](_0x2c0ec6),function(_0x4c52c0,_0x116292){logger[_0x08a8('0xd')](_0x08a8('0x13'),_0x170087,_0x4c52c0);if(_0x4c52c0==0x0){var _0x34b4e7=_0x116292['replace'](/(\r\n|\n|\r)/gm,'');if(_['isNil'](_0x1084d3[0x1])||_[_0x08a8('0x14')](_0x1084d3[0x1])){logger[_0x08a8('0xd')](_0x08a8('0x15'),_0x170087);_0x5aeab3[_0x08a8('0x16')][_0x1084d3[0x1]]=_0x34b4e7;}else{logger['info'](_0x08a8('0x17'),_0x170087,_0x1084d3[0x1],_0x34b4e7);_0x5aeab3['body'][_0x1084d3[0x1]]=_0x34b4e7;}}_0x21191f['next']();});}}catch(_0x586869){logger[_0x08a8('0x18')](_0x08a8('0xa'),_0x170087,_['isObject'](_0x586869)?JSON['stringify'](_0x586869):_0x586869);logger[_0x08a8('0xd')](_0x08a8('0xe'),_0x170087);_0x21191f[_0x08a8('0xf')]();}};};
\ No newline at end of file
index b6b4e00..f279b2a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['finally','error','validate','lodash','../../rpc/chatInteraction','../../rpc/smsInteraction','../../rpc/mailInteraction','../../../../config/logger','routing','number','TagId\x20is\x20a\x20string\x20and\x20it\x20is\x20required','consequence','[%s][TAG]\x20%s','map','join','next','channel','Interaction','addTags','then','info','[%s][TAG]\x20tag\x20\x22%s\x22\x20added\x20to\x20%s\x20interaction\x20%s','interaction','catch','stringify','[%s][TAG]\x20no\x20tags\x20saved,\x20force\x20next'];(function(_0x3ce493,_0x84caf2){var _0x556f17=function(_0x4d83eb){while(--_0x4d83eb){_0x3ce493['push'](_0x3ce493['shift']());}};_0x556f17(++_0x84caf2);}(_0x7a54,0x106));var _0x47a5=function(_0x10e04e,_0x24187c){_0x10e04e=_0x10e04e-0x0;var _0xfe537d=_0x7a54[_0x10e04e];return _0xfe537d;};'use strict';var schema=require(_0x47a5('0x0'));var _=require(_0x47a5('0x1'));var rpc={'chatInteraction':require(_0x47a5('0x2')),'openchannelInteraction':require('../../rpc/openchannelInteraction'),'smsInteraction':require(_0x47a5('0x3')),'mailInteraction':require(_0x47a5('0x4')),'faxInteraction':require('../../rpc/faxInteraction')};var logger=require(_0x47a5('0x5'))(_0x47a5('0x6'));var tag=schema({'tag':{'type':_0x47a5('0x7'),'required':!![],'message':_0x47a5('0x8')}});exports[_0x47a5('0x9')]=function(_0x545a97,_0x3d5629,_0x59199c,_0x343372){return function(_0x30e405){try{var _0x506eda={'tag':_0x3d5629[0x0]};var _0x194fb0=tag['validate'](_0x506eda,{'typecast':!![]});if(_0x194fb0['length']){logger['error'](_0x47a5('0xa'),_0x545a97,_[_0x47a5('0xb')](_0x194fb0,'message')[_0x47a5('0xc')](',\x20'));logger['info']('[%s][TAG]\x20no\x20tags\x20saved,\x20force\x20next',_0x545a97);_0x30e405[_0x47a5('0xd')]();}else{var _0x69e4d4={'ids':[_0x3d5629[0x0]]};if(rpc[_0x343372[_0x47a5('0xe')]+_0x47a5('0xf')]){rpc[_0x343372[_0x47a5('0xe')]+_0x47a5('0xf')][_0x47a5('0x10')](_0x343372['interaction']['id'],_0x69e4d4)[_0x47a5('0x11')](function(_0x221b54){logger[_0x47a5('0x12')](_0x47a5('0x13'),_0x545a97,_0x3d5629[0x1],_0x343372[_0x47a5('0xe')],_0x343372[_0x47a5('0x14')]['id']);})[_0x47a5('0x15')](function(_0x190faa){logger['error'](_0x47a5('0xa'),_0x545a97,JSON[_0x47a5('0x16')](_0x190faa));logger[_0x47a5('0x12')](_0x47a5('0x17'),_0x545a97);})[_0x47a5('0x18')](function(){_0x30e405['next']();});}}}catch(_0x549de3){logger[_0x47a5('0x19')]('[%s][TAG]\x20%s',_0x545a97,_['isObject'](_0x549de3)?JSON[_0x47a5('0x16')](_0x549de3):_0x549de3);logger[_0x47a5('0x12')](_0x47a5('0x17'),_0x545a97);_0x30e405[_0x47a5('0xd')]();}};};
\ No newline at end of file
+var _0x7a54=['finally','error','validate','lodash','../../rpc/chatInteraction','../../rpc/smsInteraction','../../rpc/mailInteraction','../../../../config/logger','routing','number','TagId\x20is\x20a\x20string\x20and\x20it\x20is\x20required','consequence','[%s][TAG]\x20%s','map','join','next','channel','Interaction','addTags','then','info','[%s][TAG]\x20tag\x20\x22%s\x22\x20added\x20to\x20%s\x20interaction\x20%s','interaction','catch','stringify','[%s][TAG]\x20no\x20tags\x20saved,\x20force\x20next'];(function(_0x3d366f,_0x27c753){var _0x253002=function(_0x4bd8d1){while(--_0x4bd8d1){_0x3d366f['push'](_0x3d366f['shift']());}};_0x253002(++_0x27c753);}(_0x7a54,0x106));var _0x47a5=function(_0x723354,_0x388b39){_0x723354=_0x723354-0x0;var _0x9278ab=_0x7a54[_0x723354];return _0x9278ab;};'use strict';var schema=require(_0x47a5('0x0'));var _=require(_0x47a5('0x1'));var rpc={'chatInteraction':require(_0x47a5('0x2')),'openchannelInteraction':require('../../rpc/openchannelInteraction'),'smsInteraction':require(_0x47a5('0x3')),'mailInteraction':require(_0x47a5('0x4')),'faxInteraction':require('../../rpc/faxInteraction')};var logger=require(_0x47a5('0x5'))(_0x47a5('0x6'));var tag=schema({'tag':{'type':_0x47a5('0x7'),'required':!![],'message':_0x47a5('0x8')}});exports[_0x47a5('0x9')]=function(_0x545a97,_0x3d5629,_0x59199c,_0x343372){return function(_0x30e405){try{var _0x506eda={'tag':_0x3d5629[0x0]};var _0x194fb0=tag['validate'](_0x506eda,{'typecast':!![]});if(_0x194fb0['length']){logger['error'](_0x47a5('0xa'),_0x545a97,_[_0x47a5('0xb')](_0x194fb0,'message')[_0x47a5('0xc')](',\x20'));logger['info']('[%s][TAG]\x20no\x20tags\x20saved,\x20force\x20next',_0x545a97);_0x30e405[_0x47a5('0xd')]();}else{var _0x69e4d4={'ids':[_0x3d5629[0x0]]};if(rpc[_0x343372[_0x47a5('0xe')]+_0x47a5('0xf')]){rpc[_0x343372[_0x47a5('0xe')]+_0x47a5('0xf')][_0x47a5('0x10')](_0x343372['interaction']['id'],_0x69e4d4)[_0x47a5('0x11')](function(_0x221b54){logger[_0x47a5('0x12')](_0x47a5('0x13'),_0x545a97,_0x3d5629[0x1],_0x343372[_0x47a5('0xe')],_0x343372[_0x47a5('0x14')]['id']);})[_0x47a5('0x15')](function(_0x190faa){logger['error'](_0x47a5('0xa'),_0x545a97,JSON[_0x47a5('0x16')](_0x190faa));logger[_0x47a5('0x12')](_0x47a5('0x17'),_0x545a97);})[_0x47a5('0x18')](function(){_0x30e405['next']();});}}}catch(_0x549de3){logger[_0x47a5('0x19')]('[%s][TAG]\x20%s',_0x545a97,_['isObject'](_0x549de3)?JSON[_0x47a5('0x16')](_0x549de3):_0x549de3);logger[_0x47a5('0x12')](_0x47a5('0x17'),_0x545a97);_0x30e405[_0x47a5('0xd')]();}};};
\ No newline at end of file
index 0278e5f..6d7df80 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf3cd=['interaction','list','mustache','lodash','exports','render','body','contact','message'];(function(_0x2334e5,_0x1f9c6c){var _0x3541c9=function(_0x3ee788){while(--_0x3ee788){_0x2334e5['push'](_0x2334e5['shift']());}};_0x3541c9(++_0x1f9c6c);}(_0xf3cd,0xfe));var _0xdf3c=function(_0xd6c010,_0x5355e6){_0xd6c010=_0xd6c010-0x0;var _0x15893b=_0xf3cd[_0xd6c010];return _0x15893b;};'use strict';var Mustache=require(_0xdf3c('0x0'));var _=require(_0xdf3c('0x1'));module[_0xdf3c('0x2')]={'getMustacheRender':function(_0x1e0814,_0x1839ec){return Mustache[_0xdf3c('0x3')](_0x1e0814,_['merge'](_0x1839ec[_0xdf3c('0x4')],{'contact':_0x1839ec[_0xdf3c('0x5')],'message':_0x1839ec[_0xdf3c('0x6')],'account':_0x1839ec['account'],'interaction':_0x1839ec[_0xdf3c('0x7')],'list':_0x1839ec[_0xdf3c('0x8')]}))||'';}};
\ No newline at end of file
+var _0x3d15=['exports','render','merge','contact','message','account','list','lodash'];(function(_0x9b01d9,_0x4802b0){var _0x401588=function(_0x5d9b07){while(--_0x5d9b07){_0x9b01d9['push'](_0x9b01d9['shift']());}};_0x401588(++_0x4802b0);}(_0x3d15,0x127));var _0x53d1=function(_0x379f38,_0x32be37){_0x379f38=_0x379f38-0x0;var _0x2656c7=_0x3d15[_0x379f38];return _0x2656c7;};'use strict';var Mustache=require('mustache');var _=require(_0x53d1('0x0'));module[_0x53d1('0x1')]={'getMustacheRender':function(_0x5ed61d,_0x2b5a03){return Mustache[_0x53d1('0x2')](_0x5ed61d,_[_0x53d1('0x3')](_0x2b5a03['body'],{'contact':_0x2b5a03[_0x53d1('0x4')],'message':_0x2b5a03[_0x53d1('0x5')],'account':_0x2b5a03[_0x53d1('0x6')],'interaction':_0x2b5a03['interaction'],'list':_0x2b5a03[_0x53d1('0x7')]}))||'';}};
\ No newline at end of file
index c12227d..50f5222 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3481=['hasOwnProperty','capacity','CurrentCapacity','agent\x20not\x20found','values','chatQueues','available','loggedIn','name','waiting','mailQueues','paused','openchannelQueues','smsQueues','faxQueues','chatQueuesWaitingInteractions','mailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions','faxQueuesWaitingInteractions','server','http','log','Routing\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','lodash','util','path','uuid','../../../config/environment','../rpc/openchannelQueueReport','../rpc/mailQueueReport','../rpc/chatQueueReport','../rpc/smsQueueReport','../rpc/faxQueueReport','../lib/rule-engine','format','%s.%s.%s','isNil','IntervalId','map','Intervals','interval','listen','channel','message','interaction','applications','isArray','length','existsSync','join','app','autoreply','appdata','split','push','slice','dialogflow','tag','TagId','%s:%s:%s','./interval','priority','info','on\x20interval','intervals','\x20|\x20','rules','execute','Applications\x20executed','stringify','matchPath','emit','end','No\x20applications\x20to\x20execute','stack','error','routing\x20is\x20empty','QueueReport','UserId','message\x20is\x20empty','agent','agents','busy','busyQueue'];(function(_0x3fea17,_0x3e0f50){var _0xb4f45=function(_0x466f11){while(--_0x466f11){_0x3fea17['push'](_0x3fea17['shift']());}};_0xb4f45(++_0x3e0f50);}(_0x3481,0xc5));var _0x1348=function(_0x304f17,_0x2a61b7){_0x304f17=_0x304f17-0x0;var _0x1ad2b1=_0x3481[_0x304f17];return _0x1ad2b1;};'use strict';var _=require(_0x1348('0x0'));var util=require(_0x1348('0x1'));var path=require(_0x1348('0x2'));var fs=require('fs');var jayson=require('jayson/promise');var BPromise=require('bluebird');var uuid=require(_0x1348('0x3'));var config=require(_0x1348('0x4'));var logger=require('../../../config/logger')('routing');var rpc={'openchannelQueueReport':require(_0x1348('0x5'))};var rpc={'openchannelQueueReport':require('../rpc/openchannelQueueReport'),'mailQueueReport':require(_0x1348('0x6')),'chatQueueReport':require(_0x1348('0x7')),'smsQueueReport':require(_0x1348('0x8')),'faxQueueReport':require(_0x1348('0x9'))};var RuleEngine=require(_0x1348('0xa'));function getId(_0x3a22b4,_0x3086ed,_0x31f0ce){return util[_0x1348('0xb')](_0x1348('0xc'),_0x3a22b4,_0x3086ed||0x0,_0x31f0ce||0x0);}function getIntervals(_0x4cc4cc,_0x1507d7){var _0x11e3a5=[];if(!_[_0x1348('0xd')](_0x1507d7['IntervalId'])&&!_[_0x1348('0xd')](_0x4cc4cc[_0x1507d7[_0x1348('0xe')]])&&!_[_0x1348('0xd')](_0x4cc4cc[_0x1507d7['IntervalId']]['Intervals'])){_0x11e3a5=_[_0x1348('0xf')](_0x4cc4cc[_0x1507d7[_0x1348('0xe')]][_0x1348('0x10')],_0x1348('0x11'));}else if(!_[_0x1348('0xd')](_0x1507d7['interval'])){_0x11e3a5=[_0x1507d7[_0x1348('0x11')]];}return _0x11e3a5;}exports[_0x1348('0x12')]=function(_0x50a650){_0x50a650['rules']={};return new BPromise(function(_0x26ac55,_0x242ce5){var _0xd3a9e1={'Start':function(_0x384125){var _0x15d068=this;return new Promise(function(_0x3128af,_0x27d91a){if(_0x384125){try{var _0x1fcd4a=[];var _0x2eb645=getId(_0x384125[_0x1348('0x13')],_0x384125['message']?_0x384125[_0x1348('0x14')]['id']:0x0,_0x384125['interaction']?_0x384125[_0x1348('0x15')]['id']:0x0);if(_0x384125[_0x1348('0x16')]&&_[_0x1348('0x17')](_0x384125[_0x1348('0x16')])&&_0x384125[_0x1348('0x16')][_0x1348('0x18')]){for(var _0x9687be=0x0;_0x9687be<_0x384125[_0x1348('0x16')][_0x1348('0x18')];_0x9687be+=0x1){var _0x9a6a14=_0x384125[_0x1348('0x16')][_0x9687be];if(fs[_0x1348('0x19')](path[_0x1348('0x1a')](__dirname,_0x1348('0x16'),_0x9a6a14[_0x1348('0x1b')]+'.js'))){var _0x48b9a0=[];switch(_0x9a6a14[_0x1348('0x1b')]['toLowerCase']()){case _0x1348('0x1c'):var _0x55bb32=_0x9a6a14[_0x1348('0x1d')][_0x1348('0x1e')](',');_0x48b9a0[_0x1348('0x1f')](_0x55bb32[0x0]);_0x48b9a0[_0x1348('0x1f')](_0x55bb32[_0x1348('0x20')](0x1,_0x55bb32['length'])[_0x1348('0x1a')](','));break;case _0x1348('0x21'):var _0x55bb32=_0x9a6a14['appdata'][_0x1348('0x1e')](',');_0x48b9a0[_0x1348('0x1f')](_0x55bb32[0x0]);_0x48b9a0[_0x1348('0x1f')](_0x55bb32[0x1]);_0x48b9a0['push'](_0x55bb32['slice'](0x2,_0x55bb32[_0x1348('0x18')])[_0x1348('0x1a')](','));break;case'amazonlex':var _0x55bb32=_0x9a6a14[_0x1348('0x1d')][_0x1348('0x1e')](',');_0x48b9a0['push'](_0x55bb32[0x0]);_0x48b9a0[_0x1348('0x1f')](_0x55bb32[0x1]);_0x48b9a0['push'](_0x55bb32[0x2]);_0x48b9a0['push'](_0x55bb32[0x3]);_0x48b9a0['push'](_0x55bb32[_0x1348('0x20')](0x4,_0x55bb32[_0x1348('0x18')])[_0x1348('0x1a')](','));break;case _0x1348('0x14'):_0x48b9a0[_0x1348('0x1f')](_0x9a6a14['appdata']);break;case _0x1348('0x22'):_0x48b9a0[_0x1348('0x1f')](_0x9a6a14[_0x1348('0x23')]);_0x48b9a0['push'](_0x9a6a14[_0x1348('0x1d')]);break;default:_0x48b9a0=_[_0x1348('0xd')](_0x9a6a14[_0x1348('0x1d')])?[]:_0x9a6a14[_0x1348('0x1d')][_0x1348('0x1e')](',');}var _0x297a93={'id':util[_0x1348('0xb')](_0x1348('0x24'),_0x2eb645,_0x9a6a14['id'],_0x9a6a14[_0x1348('0x1b')]),'condition':require(_0x1348('0x25'))['condition'](_0x2eb645,getIntervals(_0x50a650['intervals'],_0x9a6a14),_0x50a650),'consequence':require('./applications/'+_0x9a6a14[_0x1348('0x1b')])['consequence'](_0x2eb645,_0x48b9a0,_0x50a650,_0x384125),'p':_0x9a6a14[_0x1348('0x26')]||0x0};logger[_0x1348('0x27')]('Push\x20new\x20rule',_0x297a93['id'],_0x1348('0x28'),getIntervals(_0x50a650[_0x1348('0x29')],_0x9a6a14)['join'](_0x1348('0x2a')));_0x1fcd4a[_0x1348('0x1f')](_0x297a93);}else{logger['error']('Please\x20create\x20a\x20new\x20file\x20under',path['join'](__dirname,_0x1348('0x16'),_0x9a6a14[_0x1348('0x1b')]+'.js'));}}_0x50a650[_0x1348('0x2b')][_0x2eb645]=new RuleEngine(_0x1fcd4a);_0x50a650['rules'][_0x2eb645][_0x1348('0x2c')](_0x384125,function(_0x1f72d8){logger['info'](_0x1348('0x2d'),JSON[_0x1348('0x2e')](_0x1f72d8[_0x1348('0x2f')]));if(_0x50a650[_0x1348('0x2b')][_0x2eb645]){_0x50a650[_0x1348('0x2b')][_0x2eb645][_0x1348('0x30')](_0x1348('0x31'));}});return _0x3128af({'code':0xc8,'message':_0x384125});}else{logger[_0x1348('0x27')](_0x1348('0x32'));return _0x3128af({'code':0xc8,'message':_0x384125});}}catch(_0x26a9a0){logger['error'](_0x26a9a0[_0x1348('0x33')]);return _0x27d91a(_0x15d068[_0x1348('0x34')](0x1f4,_0x26a9a0));}}return _0x27d91a(_0x1348('0x35'));});},'AcceptMessage':function(_0x1f3f04){var _0x5cf5d1=this;return new Promise(function(_0x530b01,_0xeb53b0){if(_0x1f3f04[_0x1348('0x14')]&&_0x1f3f04[_0x1348('0x14')]['id']){try{var _0x292c66=getId(_0x1f3f04['channel'],_0x1f3f04['message']?_0x1f3f04['message']['id']:0x0,_0x1f3f04[_0x1348('0x15')]?_0x1f3f04['interaction']['id']:0x0);if(_0x50a650[_0x1348('0x2b')][_0x292c66]){_0x50a650[_0x1348('0x2b')][_0x292c66]['emit'](_0x1348('0x31'));if(rpc[_0x1f3f04[_0x1348('0x13')]+_0x1348('0x36')]){rpc[_0x1f3f04[_0x1348('0x13')]+_0x1348('0x36')]['update'](_0x292c66,{'UserId':_0x1f3f04[_0x1348('0x14')][_0x1348('0x37')]})['catch'](function(_0x19afc1){logger[_0x1348('0x34')]('error\x20update\x20queue\x20report');});}}return _0x530b01({'code':0xc8,'message':_0x1f3f04});}catch(_0x45b29f){logger[_0x1348('0x34')](_0x45b29f['stack']);return _0xeb53b0(_0x5cf5d1[_0x1348('0x34')](0x1f4,_0x45b29f));}}logger[_0x1348('0x34')](_0x1348('0x38'));return _0xeb53b0(_0x5cf5d1['error'](0x1f4,_0x1348('0x38')));});},'RejectMessage':function(_0x588599){var _0x3507df=this;return new Promise(function(_0x897948,_0x6e4ca3){if(_0x588599[_0x1348('0x39')]&&_0x588599[_0x1348('0x39')]['id']){try{if(_0x50a650[_0x1348('0x3a')][_0x588599[_0x1348('0x39')]['id']]){_0x50a650[_0x1348('0x3a')][_0x588599[_0x1348('0x39')]['id']][_0x1348('0x3b')]=![];_0x50a650[_0x1348('0x3a')][_0x588599[_0x1348('0x39')]['id']][_0x1348('0x3c')]=undefined;}return _0x897948({'code':0xc8,'message':_0x588599});}catch(_0x6d9d2d){logger['error'](_0x6d9d2d[_0x1348('0x33')]);return _0x6e4ca3(_0x3507df[_0x1348('0x34')](0x1f4,_0x6d9d2d));}}logger[_0x1348('0x34')]('message\x20is\x20empty');return _0x6e4ca3(_0x3507df['error'](0x1f4,_0x1348('0x38')));});},'AbandonInteraction':function(_0x344689){var _0x22775d=this;return new Promise(function(_0x2852ae,_0x51a4a1){if(_0x344689['channel']&&_0x344689[_0x1348('0x15')]&&_0x344689['interaction']['id']){try{var _0x141d9c=getId(_0x344689[_0x1348('0x13')],_0x344689[_0x1348('0x14')]?_0x344689[_0x1348('0x14')]['id']:0x0,_0x344689['interaction']?_0x344689['interaction']['id']:0x0);if(_0x50a650['rules'][_0x141d9c]){_0x50a650['rules'][_0x141d9c][_0x1348('0x30')](_0x1348('0x31'));}return _0x2852ae({'code':0xc8,'message':_0x344689});}catch(_0x38e853){logger[_0x1348('0x34')](_0x38e853[_0x1348('0x33')]);return _0x51a4a1(_0x22775d[_0x1348('0x34')](0x1f4,_0x38e853));}}logger['error'](_0x1348('0x38'));return _0x51a4a1(_0x22775d['error'](0x1f4,'message\x20is\x20empty'));});},'AgentCapacity':function(_0x4236c3){var _0x51904e=this;return new Promise(function(_0x54aec3,_0x17385a){if(_0x50a650[_0x1348('0x3a')][_0x1348('0x3d')](_0x4236c3['id'])){for(var _0x30e38a in _0x4236c3[_0x1348('0x3e')]){if(_0x4236c3[_0x1348('0x3e')][_0x1348('0x3d')](_0x30e38a)){if(_0x50a650['agents'][_0x4236c3['id']][_0x1348('0x3d')](_0x30e38a+_0x1348('0x3f'))){_0x50a650['agents'][_0x4236c3['id']][_0x30e38a+_0x1348('0x3f')]=parseInt(_0x4236c3[_0x1348('0x3e')][_0x30e38a],0xa);}}}_0x50a650['agents'][_0x4236c3['id']]['updateRealtime']();return _0x54aec3({'code':0xc8,'message':_0x50a650[_0x1348('0x3a')][_0x4236c3['id']]});}else{return _0x17385a(_0x51904e[_0x1348('0x34')](0x1f4,_0x1348('0x40')));}});},'Agents':function(_0x51e96d){return new Promise(function(_0x33035b,_0x5643b3){var _0x47cde2=_[_0x1348('0x41')](_0x50a650[_0x1348('0x3a')]);_0x33035b({'count':_0x47cde2[_0x1348('0x18')],'rows':_0x47cde2});});},'ChatQueues':function(_0x4405cf){return new Promise(function(_0x73a35d,_0x1decb8){var _0x595e85=[];for(var _0x1f84c1 in _0x50a650['chatQueues']){if(_0x50a650[_0x1348('0x42')][_0x1348('0x3d')](_0x1f84c1)){var _0x16c82e=_0x50a650['chatQueues'][_0x1f84c1];var _0xe8ad94={'id':_0x16c82e['id'],'available':_0x16c82e[_0x1348('0x43')],'loggedIn':_0x16c82e[_0x1348('0x44')],'name':_0x16c82e[_0x1348('0x45')],'paused':_0x16c82e['paused'],'waiting':_0x16c82e[_0x1348('0x46')]};_0x595e85[_0x1348('0x1f')](_0xe8ad94);}}_0x73a35d({'count':_0x595e85['length'],'rows':_0x595e85});});},'MailQueues':function(_0x5f1bee){return new Promise(function(_0x1f5e3c,_0xae7104){var _0x4d2b81=[];for(var _0x2958f1 in _0x50a650[_0x1348('0x47')]){if(_0x50a650[_0x1348('0x47')]['hasOwnProperty'](_0x2958f1)){var _0x2ba216=_0x50a650[_0x1348('0x47')][_0x2958f1];var _0x5a5aaa={'id':_0x2ba216['id'],'available':_0x2ba216[_0x1348('0x43')],'loggedIn':_0x2ba216[_0x1348('0x44')],'name':_0x2ba216[_0x1348('0x45')],'paused':_0x2ba216[_0x1348('0x48')],'waiting':_0x2ba216[_0x1348('0x46')]};_0x4d2b81[_0x1348('0x1f')](_0x5a5aaa);}}_0x1f5e3c({'count':_0x4d2b81[_0x1348('0x18')],'rows':_0x4d2b81});});},'OpenchannelQueues':function(_0x2efa68){return new Promise(function(_0x2308dd,_0x111eab){var _0x206e07=[];for(var _0x298015 in _0x50a650[_0x1348('0x49')]){if(_0x50a650['openchannelQueues']['hasOwnProperty'](_0x298015)){var _0xd0708a=_0x50a650[_0x1348('0x49')][_0x298015];var _0x18d677={'id':_0xd0708a['id'],'available':_0xd0708a[_0x1348('0x43')],'loggedIn':_0xd0708a[_0x1348('0x44')],'name':_0xd0708a[_0x1348('0x45')],'paused':_0xd0708a[_0x1348('0x48')],'waiting':_0xd0708a['waiting']};_0x206e07['push'](_0x18d677);}}_0x2308dd({'count':_0x206e07[_0x1348('0x18')],'rows':_0x206e07});});},'SmsQueues':function(_0x1a0869){return new Promise(function(_0x44a214,_0x25a4ab){var _0xb1639c=[];for(var _0x3155a7 in _0x50a650[_0x1348('0x4a')]){if(_0x50a650[_0x1348('0x4a')][_0x1348('0x3d')](_0x3155a7)){var _0x526595=_0x50a650['smsQueues'][_0x3155a7];var _0x10f5c7={'id':_0x526595['id'],'available':_0x526595[_0x1348('0x43')],'loggedIn':_0x526595[_0x1348('0x44')],'name':_0x526595[_0x1348('0x45')],'paused':_0x526595[_0x1348('0x48')],'waiting':_0x526595[_0x1348('0x46')]};_0xb1639c[_0x1348('0x1f')](_0x10f5c7);}}_0x44a214({'count':_0xb1639c[_0x1348('0x18')],'rows':_0xb1639c});});},'FaxQueues':function(_0x56f8fa){return new Promise(function(_0x205701,_0x1aecdd){var _0x33b90f=[];for(var _0x23aed9 in _0x50a650[_0x1348('0x4b')]){if(_0x50a650[_0x1348('0x4b')][_0x1348('0x3d')](_0x23aed9)){var _0x265639=_0x50a650[_0x1348('0x4b')][_0x23aed9];var _0x528a2b={'id':_0x265639['id'],'available':_0x265639[_0x1348('0x43')],'loggedIn':_0x265639[_0x1348('0x44')],'name':_0x265639['name'],'paused':_0x265639[_0x1348('0x48')],'waiting':_0x265639[_0x1348('0x46')]};_0x33b90f['push'](_0x528a2b);}}_0x205701({'count':_0x33b90f[_0x1348('0x18')],'rows':_0x33b90f});});},'ChatQueuesWaitingInteractions':function(_0x15915a){return new Promise(function(_0x141dbf,_0x301fa5){var _0x2156bd=_[_0x1348('0x41')](_0x50a650[_0x1348('0x4c')]);_0x141dbf({'count':_0x2156bd[_0x1348('0x18')],'rows':_0x2156bd});});},'MailQueuesWaitingInteractions':function(_0x9f0947){return new Promise(function(_0x48cb38,_0x3b9ec0){var _0x56ae80=_[_0x1348('0x41')](_0x50a650[_0x1348('0x4d')]);_0x48cb38({'count':_0x56ae80['length'],'rows':_0x56ae80});});},'OpenchannelQueuesWaitingInteractions':function(_0x566c76){return new Promise(function(_0x193479,_0x17a3f0){var _0x398f0a=_[_0x1348('0x41')](_0x50a650[_0x1348('0x4e')]);_0x193479({'count':_0x398f0a[_0x1348('0x18')],'rows':_0x398f0a});});},'SmsQueuesWaitingInteractions':function(_0x446f6d){return new Promise(function(_0x49e99d,_0x40f2b6){var _0x4bcbda=_[_0x1348('0x41')](_0x50a650[_0x1348('0x4f')]);_0x49e99d({'count':_0x4bcbda['length'],'rows':_0x4bcbda});});},'FaxQueuesWaitingInteractions':function(_0x5e3415){return new Promise(function(_0x44c74f,_0x40041c){var _0x32b35b=_[_0x1348('0x41')](_0x50a650[_0x1348('0x50')]);_0x44c74f({'count':_0x32b35b[_0x1348('0x18')],'rows':_0x32b35b});});}};var _0x626b5a=jayson[_0x1348('0x51')](_0xd3a9e1)[_0x1348('0x52')]();_0x626b5a['on'](_0x1348('0x34'),function(_0xf67aef){logger[_0x1348('0x34')](JSON[_0x1348('0x2e')](_0xf67aef));return _0x242ce5(_0xf67aef);});_0x626b5a[_0x1348('0x12')](0x232c,'127.0.0.1',function(){console[_0x1348('0x53')](_0x1348('0x54'),0x232c);return _0x26ac55(_0x1348('0x55')+0x232c);});});};
\ No newline at end of file
+var _0xe059=['uuid','../../../config/logger','routing','../rpc/openchannelQueueReport','../rpc/mailQueueReport','../rpc/chatQueueReport','../lib/rule-engine','format','%s.%s.%s','IntervalId','isNil','Intervals','map','interval','listen','rules','channel','message','interaction','isArray','applications','length','existsSync','join','app','.js','toLowerCase','autoreply','appdata','split','slice','push','amazonlex','%s:%s:%s','./interval','priority','info','Push\x20new\x20rule','intervals','execute','Applications\x20executed','stringify','matchPath','emit','end','No\x20applications\x20to\x20execute','stack','error','QueueReport','update','UserId','catch','error\x20update\x20queue\x20report','message\x20is\x20empty','agent','agents','busy','busyQueue','capacity','hasOwnProperty','CurrentCapacity','updateRealtime','agent\x20not\x20found','values','chatQueues','available','loggedIn','waiting','mailQueues','paused','openchannelQueues','name','smsQueues','chatQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions','faxQueuesWaitingInteractions','http','127.0.0.1','log','Routing\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','path','jayson/promise','bluebird'];(function(_0x3f1596,_0x562221){var _0x4009b2=function(_0x2fffa0){while(--_0x2fffa0){_0x3f1596['push'](_0x3f1596['shift']());}};_0x4009b2(++_0x562221);}(_0xe059,0xfc));var _0x9e05=function(_0x25fcef,_0x45a4c5){_0x25fcef=_0x25fcef-0x0;var _0x291a24=_0xe059[_0x25fcef];return _0x291a24;};'use strict';var _=require('lodash');var util=require('util');var path=require(_0x9e05('0x0'));var fs=require('fs');var jayson=require(_0x9e05('0x1'));var BPromise=require(_0x9e05('0x2'));var uuid=require(_0x9e05('0x3'));var config=require('../../../config/environment');var logger=require(_0x9e05('0x4'))(_0x9e05('0x5'));var rpc={'openchannelQueueReport':require(_0x9e05('0x6'))};var rpc={'openchannelQueueReport':require(_0x9e05('0x6')),'mailQueueReport':require(_0x9e05('0x7')),'chatQueueReport':require(_0x9e05('0x8')),'smsQueueReport':require('../rpc/smsQueueReport'),'faxQueueReport':require('../rpc/faxQueueReport')};var RuleEngine=require(_0x9e05('0x9'));function getId(_0x5ac766,_0x85a82b,_0x2c8230){return util[_0x9e05('0xa')](_0x9e05('0xb'),_0x5ac766,_0x85a82b||0x0,_0x2c8230||0x0);}function getIntervals(_0x498111,_0x53a57d){var _0x544715=[];if(!_['isNil'](_0x53a57d[_0x9e05('0xc')])&&!_['isNil'](_0x498111[_0x53a57d['IntervalId']])&&!_[_0x9e05('0xd')](_0x498111[_0x53a57d[_0x9e05('0xc')]][_0x9e05('0xe')])){_0x544715=_[_0x9e05('0xf')](_0x498111[_0x53a57d[_0x9e05('0xc')]]['Intervals'],'interval');}else if(!_[_0x9e05('0xd')](_0x53a57d[_0x9e05('0x10')])){_0x544715=[_0x53a57d[_0x9e05('0x10')]];}return _0x544715;}exports[_0x9e05('0x11')]=function(_0x46a06e){_0x46a06e[_0x9e05('0x12')]={};return new BPromise(function(_0xa85516,_0x1eec6b){var _0x4b0ae3={'Start':function(_0x171e11){var _0xc3f56a=this;return new Promise(function(_0x55f89f,_0x490856){if(_0x171e11){try{var _0x5103bf=[];var _0x1f4361=getId(_0x171e11[_0x9e05('0x13')],_0x171e11[_0x9e05('0x14')]?_0x171e11[_0x9e05('0x14')]['id']:0x0,_0x171e11[_0x9e05('0x15')]?_0x171e11[_0x9e05('0x15')]['id']:0x0);if(_0x171e11['applications']&&_[_0x9e05('0x16')](_0x171e11[_0x9e05('0x17')])&&_0x171e11[_0x9e05('0x17')][_0x9e05('0x18')]){for(var _0x3d2a6d=0x0;_0x3d2a6d<_0x171e11[_0x9e05('0x17')]['length'];_0x3d2a6d+=0x1){var _0x438a6d=_0x171e11[_0x9e05('0x17')][_0x3d2a6d];if(fs[_0x9e05('0x19')](path[_0x9e05('0x1a')](__dirname,_0x9e05('0x17'),_0x438a6d[_0x9e05('0x1b')]+_0x9e05('0x1c')))){var _0x6f544c=[];switch(_0x438a6d[_0x9e05('0x1b')][_0x9e05('0x1d')]()){case _0x9e05('0x1e'):var _0xefe9fd=_0x438a6d[_0x9e05('0x1f')][_0x9e05('0x20')](',');_0x6f544c['push'](_0xefe9fd[0x0]);_0x6f544c['push'](_0xefe9fd[_0x9e05('0x21')](0x1,_0xefe9fd['length'])[_0x9e05('0x1a')](','));break;case'dialogflow':var _0xefe9fd=_0x438a6d[_0x9e05('0x1f')][_0x9e05('0x20')](',');_0x6f544c[_0x9e05('0x22')](_0xefe9fd[0x0]);_0x6f544c['push'](_0xefe9fd[0x1]);_0x6f544c[_0x9e05('0x22')](_0xefe9fd[_0x9e05('0x21')](0x2,_0xefe9fd['length'])[_0x9e05('0x1a')](','));break;case _0x9e05('0x23'):var _0xefe9fd=_0x438a6d['appdata'][_0x9e05('0x20')](',');_0x6f544c[_0x9e05('0x22')](_0xefe9fd[0x0]);_0x6f544c[_0x9e05('0x22')](_0xefe9fd[0x1]);_0x6f544c[_0x9e05('0x22')](_0xefe9fd[0x2]);_0x6f544c['push'](_0xefe9fd[0x3]);_0x6f544c[_0x9e05('0x22')](_0xefe9fd[_0x9e05('0x21')](0x4,_0xefe9fd[_0x9e05('0x18')])[_0x9e05('0x1a')](','));break;case _0x9e05('0x14'):_0x6f544c['push'](_0x438a6d[_0x9e05('0x1f')]);break;case'tag':_0x6f544c[_0x9e05('0x22')](_0x438a6d['TagId']);_0x6f544c[_0x9e05('0x22')](_0x438a6d[_0x9e05('0x1f')]);break;default:_0x6f544c=_[_0x9e05('0xd')](_0x438a6d[_0x9e05('0x1f')])?[]:_0x438a6d[_0x9e05('0x1f')][_0x9e05('0x20')](',');}var _0x39ec7a={'id':util[_0x9e05('0xa')](_0x9e05('0x24'),_0x1f4361,_0x438a6d['id'],_0x438a6d[_0x9e05('0x1b')]),'condition':require(_0x9e05('0x25'))['condition'](_0x1f4361,getIntervals(_0x46a06e['intervals'],_0x438a6d),_0x46a06e),'consequence':require('./applications/'+_0x438a6d['app'])['consequence'](_0x1f4361,_0x6f544c,_0x46a06e,_0x171e11),'p':_0x438a6d[_0x9e05('0x26')]||0x0};logger[_0x9e05('0x27')](_0x9e05('0x28'),_0x39ec7a['id'],'on\x20interval',getIntervals(_0x46a06e[_0x9e05('0x29')],_0x438a6d)['join']('\x20|\x20'));_0x5103bf[_0x9e05('0x22')](_0x39ec7a);}else{logger['error']('Please\x20create\x20a\x20new\x20file\x20under',path[_0x9e05('0x1a')](__dirname,_0x9e05('0x17'),_0x438a6d[_0x9e05('0x1b')]+_0x9e05('0x1c')));}}_0x46a06e['rules'][_0x1f4361]=new RuleEngine(_0x5103bf);_0x46a06e[_0x9e05('0x12')][_0x1f4361][_0x9e05('0x2a')](_0x171e11,function(_0x54e46a){logger[_0x9e05('0x27')](_0x9e05('0x2b'),JSON[_0x9e05('0x2c')](_0x54e46a[_0x9e05('0x2d')]));if(_0x46a06e['rules'][_0x1f4361]){_0x46a06e[_0x9e05('0x12')][_0x1f4361][_0x9e05('0x2e')](_0x9e05('0x2f'));}});return _0x55f89f({'code':0xc8,'message':_0x171e11});}else{logger[_0x9e05('0x27')](_0x9e05('0x30'));return _0x55f89f({'code':0xc8,'message':_0x171e11});}}catch(_0x1af47f){logger['error'](_0x1af47f[_0x9e05('0x31')]);return _0x490856(_0xc3f56a[_0x9e05('0x32')](0x1f4,_0x1af47f));}}return _0x490856('routing\x20is\x20empty');});},'AcceptMessage':function(_0x5c2d6f){var _0x267346=this;return new Promise(function(_0x292c08,_0x575bb9){if(_0x5c2d6f[_0x9e05('0x14')]&&_0x5c2d6f[_0x9e05('0x14')]['id']){try{var _0xfa3ee0=getId(_0x5c2d6f[_0x9e05('0x13')],_0x5c2d6f[_0x9e05('0x14')]?_0x5c2d6f[_0x9e05('0x14')]['id']:0x0,_0x5c2d6f[_0x9e05('0x15')]?_0x5c2d6f[_0x9e05('0x15')]['id']:0x0);if(_0x46a06e[_0x9e05('0x12')][_0xfa3ee0]){_0x46a06e[_0x9e05('0x12')][_0xfa3ee0][_0x9e05('0x2e')](_0x9e05('0x2f'));if(rpc[_0x5c2d6f[_0x9e05('0x13')]+'QueueReport']){rpc[_0x5c2d6f[_0x9e05('0x13')]+_0x9e05('0x33')][_0x9e05('0x34')](_0xfa3ee0,{'UserId':_0x5c2d6f['message'][_0x9e05('0x35')]})[_0x9e05('0x36')](function(_0x42ed0f){logger[_0x9e05('0x32')](_0x9e05('0x37'));});}}return _0x292c08({'code':0xc8,'message':_0x5c2d6f});}catch(_0x3d57a0){logger[_0x9e05('0x32')](_0x3d57a0[_0x9e05('0x31')]);return _0x575bb9(_0x267346['error'](0x1f4,_0x3d57a0));}}logger[_0x9e05('0x32')]('message\x20is\x20empty');return _0x575bb9(_0x267346[_0x9e05('0x32')](0x1f4,_0x9e05('0x38')));});},'RejectMessage':function(_0x116910){var _0x468e88=this;return new Promise(function(_0x2e0024,_0x38f560){if(_0x116910['agent']&&_0x116910[_0x9e05('0x39')]['id']){try{if(_0x46a06e[_0x9e05('0x3a')][_0x116910[_0x9e05('0x39')]['id']]){_0x46a06e['agents'][_0x116910[_0x9e05('0x39')]['id']][_0x9e05('0x3b')]=![];_0x46a06e['agents'][_0x116910[_0x9e05('0x39')]['id']][_0x9e05('0x3c')]=undefined;}return _0x2e0024({'code':0xc8,'message':_0x116910});}catch(_0x5339c7){logger[_0x9e05('0x32')](_0x5339c7[_0x9e05('0x31')]);return _0x38f560(_0x468e88[_0x9e05('0x32')](0x1f4,_0x5339c7));}}logger[_0x9e05('0x32')](_0x9e05('0x38'));return _0x38f560(_0x468e88[_0x9e05('0x32')](0x1f4,_0x9e05('0x38')));});},'AbandonInteraction':function(_0x301326){var _0x171e2f=this;return new Promise(function(_0x5f1642,_0x407861){if(_0x301326[_0x9e05('0x13')]&&_0x301326['interaction']&&_0x301326[_0x9e05('0x15')]['id']){try{var _0x5a1524=getId(_0x301326[_0x9e05('0x13')],_0x301326[_0x9e05('0x14')]?_0x301326[_0x9e05('0x14')]['id']:0x0,_0x301326[_0x9e05('0x15')]?_0x301326[_0x9e05('0x15')]['id']:0x0);if(_0x46a06e[_0x9e05('0x12')][_0x5a1524]){_0x46a06e[_0x9e05('0x12')][_0x5a1524][_0x9e05('0x2e')]('end');}return _0x5f1642({'code':0xc8,'message':_0x301326});}catch(_0x5a2d3b){logger['error'](_0x5a2d3b[_0x9e05('0x31')]);return _0x407861(_0x171e2f[_0x9e05('0x32')](0x1f4,_0x5a2d3b));}}logger['error'](_0x9e05('0x38'));return _0x407861(_0x171e2f[_0x9e05('0x32')](0x1f4,_0x9e05('0x38')));});},'AgentCapacity':function(_0x25297e){var _0xf87c2a=this;return new Promise(function(_0x137b16,_0x36f0d5){if(_0x46a06e[_0x9e05('0x3a')]['hasOwnProperty'](_0x25297e['id'])){for(var _0x594a35 in _0x25297e[_0x9e05('0x3d')]){if(_0x25297e['capacity'][_0x9e05('0x3e')](_0x594a35)){if(_0x46a06e[_0x9e05('0x3a')][_0x25297e['id']][_0x9e05('0x3e')](_0x594a35+'CurrentCapacity')){_0x46a06e[_0x9e05('0x3a')][_0x25297e['id']][_0x594a35+_0x9e05('0x3f')]=parseInt(_0x25297e[_0x9e05('0x3d')][_0x594a35],0xa);}}}_0x46a06e['agents'][_0x25297e['id']][_0x9e05('0x40')]();return _0x137b16({'code':0xc8,'message':_0x46a06e[_0x9e05('0x3a')][_0x25297e['id']]});}else{return _0x36f0d5(_0xf87c2a[_0x9e05('0x32')](0x1f4,_0x9e05('0x41')));}});},'Agents':function(_0x5a97f2){return new Promise(function(_0x22c46a,_0xa3ffc1){var _0x17eab3=_[_0x9e05('0x42')](_0x46a06e['agents']);_0x22c46a({'count':_0x17eab3[_0x9e05('0x18')],'rows':_0x17eab3});});},'ChatQueues':function(_0x38c524){return new Promise(function(_0x57bae3,_0x5ba3f3){var _0x4ec476=[];for(var _0x388de0 in _0x46a06e[_0x9e05('0x43')]){if(_0x46a06e[_0x9e05('0x43')]['hasOwnProperty'](_0x388de0)){var _0x2c0f1a=_0x46a06e[_0x9e05('0x43')][_0x388de0];var _0x2f0b46={'id':_0x2c0f1a['id'],'available':_0x2c0f1a[_0x9e05('0x44')],'loggedIn':_0x2c0f1a[_0x9e05('0x45')],'name':_0x2c0f1a['name'],'paused':_0x2c0f1a['paused'],'waiting':_0x2c0f1a[_0x9e05('0x46')]};_0x4ec476['push'](_0x2f0b46);}}_0x57bae3({'count':_0x4ec476[_0x9e05('0x18')],'rows':_0x4ec476});});},'MailQueues':function(_0x174b14){return new Promise(function(_0x20eb47,_0x590ea5){var _0x5aeb4f=[];for(var _0x47d542 in _0x46a06e['mailQueues']){if(_0x46a06e[_0x9e05('0x47')][_0x9e05('0x3e')](_0x47d542)){var _0xaf2c99=_0x46a06e[_0x9e05('0x47')][_0x47d542];var _0x46e9c2={'id':_0xaf2c99['id'],'available':_0xaf2c99[_0x9e05('0x44')],'loggedIn':_0xaf2c99[_0x9e05('0x45')],'name':_0xaf2c99['name'],'paused':_0xaf2c99[_0x9e05('0x48')],'waiting':_0xaf2c99[_0x9e05('0x46')]};_0x5aeb4f['push'](_0x46e9c2);}}_0x20eb47({'count':_0x5aeb4f[_0x9e05('0x18')],'rows':_0x5aeb4f});});},'OpenchannelQueues':function(_0x22c68d){return new Promise(function(_0x1aadb3,_0x89f401){var _0x2273cf=[];for(var _0x1c77e9 in _0x46a06e[_0x9e05('0x49')]){if(_0x46a06e[_0x9e05('0x49')][_0x9e05('0x3e')](_0x1c77e9)){var _0x1d7b04=_0x46a06e['openchannelQueues'][_0x1c77e9];var _0x1cef8b={'id':_0x1d7b04['id'],'available':_0x1d7b04['available'],'loggedIn':_0x1d7b04[_0x9e05('0x45')],'name':_0x1d7b04[_0x9e05('0x4a')],'paused':_0x1d7b04[_0x9e05('0x48')],'waiting':_0x1d7b04[_0x9e05('0x46')]};_0x2273cf[_0x9e05('0x22')](_0x1cef8b);}}_0x1aadb3({'count':_0x2273cf[_0x9e05('0x18')],'rows':_0x2273cf});});},'SmsQueues':function(_0x4c30bf){return new Promise(function(_0x5200c7,_0xa7c4c2){var _0x359729=[];for(var _0x4d468e in _0x46a06e[_0x9e05('0x4b')]){if(_0x46a06e[_0x9e05('0x4b')]['hasOwnProperty'](_0x4d468e)){var _0x322750=_0x46a06e[_0x9e05('0x4b')][_0x4d468e];var _0x1acaac={'id':_0x322750['id'],'available':_0x322750[_0x9e05('0x44')],'loggedIn':_0x322750[_0x9e05('0x45')],'name':_0x322750[_0x9e05('0x4a')],'paused':_0x322750['paused'],'waiting':_0x322750[_0x9e05('0x46')]};_0x359729[_0x9e05('0x22')](_0x1acaac);}}_0x5200c7({'count':_0x359729[_0x9e05('0x18')],'rows':_0x359729});});},'FaxQueues':function(_0x7e3811){return new Promise(function(_0x2a8d0c,_0x419d5c){var _0x33cf51=[];for(var _0x3a9492 in _0x46a06e['faxQueues']){if(_0x46a06e['faxQueues'][_0x9e05('0x3e')](_0x3a9492)){var _0xbb5955=_0x46a06e['faxQueues'][_0x3a9492];var _0x2168d3={'id':_0xbb5955['id'],'available':_0xbb5955[_0x9e05('0x44')],'loggedIn':_0xbb5955['loggedIn'],'name':_0xbb5955[_0x9e05('0x4a')],'paused':_0xbb5955['paused'],'waiting':_0xbb5955['waiting']};_0x33cf51[_0x9e05('0x22')](_0x2168d3);}}_0x2a8d0c({'count':_0x33cf51[_0x9e05('0x18')],'rows':_0x33cf51});});},'ChatQueuesWaitingInteractions':function(_0xcaa9b8){return new Promise(function(_0x150334,_0x4b10ef){var _0x2191fd=_[_0x9e05('0x42')](_0x46a06e[_0x9e05('0x4c')]);_0x150334({'count':_0x2191fd[_0x9e05('0x18')],'rows':_0x2191fd});});},'MailQueuesWaitingInteractions':function(_0x3a2d73){return new Promise(function(_0x3ebfa9,_0x4d2539){var _0x4c758a=_[_0x9e05('0x42')](_0x46a06e['mailQueuesWaitingInteractions']);_0x3ebfa9({'count':_0x4c758a[_0x9e05('0x18')],'rows':_0x4c758a});});},'OpenchannelQueuesWaitingInteractions':function(_0x975c7c){return new Promise(function(_0x8079b2,_0x512fd7){var _0x3c4eb9=_[_0x9e05('0x42')](_0x46a06e[_0x9e05('0x4d')]);_0x8079b2({'count':_0x3c4eb9[_0x9e05('0x18')],'rows':_0x3c4eb9});});},'SmsQueuesWaitingInteractions':function(_0x15c5aa){return new Promise(function(_0x202d35,_0x42c261){var _0x4efdac=_[_0x9e05('0x42')](_0x46a06e[_0x9e05('0x4e')]);_0x202d35({'count':_0x4efdac[_0x9e05('0x18')],'rows':_0x4efdac});});},'FaxQueuesWaitingInteractions':function(_0x228252){return new Promise(function(_0x42b78a,_0x3063c8){var _0x5ecf61=_[_0x9e05('0x42')](_0x46a06e[_0x9e05('0x4f')]);_0x42b78a({'count':_0x5ecf61[_0x9e05('0x18')],'rows':_0x5ecf61});});}};var _0x2fb6cf=jayson['server'](_0x4b0ae3)[_0x9e05('0x50')]();_0x2fb6cf['on'](_0x9e05('0x32'),function(_0x2d7f6f){logger[_0x9e05('0x32')](JSON[_0x9e05('0x2c')](_0x2d7f6f));return _0x1eec6b(_0x2d7f6f);});_0x2fb6cf[_0x9e05('0x11')](0x232c,_0x9e05('0x51'),function(){console[_0x9e05('0x52')](_0x9e05('0x53'),0x232c);return _0xa85516(_0x9e05('0x54')+0x232c);});});};
\ No newline at end of file
index 3017535..83fe5a3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e06=['rules','info','[%s][INTERVAL]\x20ROUTING\x20STOPPED','stop','length','push','Command','format','iftime\x20%s','indexOf','true','all','some','[%s][INTERVAL]\x20%s\x20%s','join','when','\x20|\x20','stack','util','bluebird','jayson/promise','lodash','routing','client','http','request','then','error','message','result','catch','condition'];(function(_0x537a4a,_0x273aa1){var _0x32a347=function(_0x33f519){while(--_0x33f519){_0x537a4a['push'](_0x537a4a['shift']());}};_0x32a347(++_0x273aa1);}(_0x4e06,0x1d2));var _0x64e0=function(_0x57fee1,_0x232580){_0x57fee1=_0x57fee1-0x0;var _0x2f0a5f=_0x4e06[_0x57fee1];return _0x2f0a5f;};'use strict';var util=require(_0x64e0('0x0'));var BPromise=require(_0x64e0('0x1'));var jayson=require(_0x64e0('0x2'));var _=require(_0x64e0('0x3'));var logger=require('../../../config/logger')(_0x64e0('0x4'));var client=jayson[_0x64e0('0x5')][_0x64e0('0x6')]({'port':0x232a});function request(_0x4352e2,_0x1009d6){return new BPromise(function(_0x513ce1,_0x3c5257){return client[_0x64e0('0x7')](_0x4352e2,_0x1009d6)[_0x64e0('0x8')](function(_0x63dbec){if(_0x63dbec[_0x64e0('0x9')]){return _0x3c5257(_0x63dbec[_0x64e0('0x9')][_0x64e0('0xa')]);}else{return _0x513ce1(_0x63dbec[_0x64e0('0xb')]);}})[_0x64e0('0xc')](function(_0xbae7d){return _0x3c5257(_0xbae7d);});});}exports[_0x64e0('0xd')]=function(_0x134312,_0x38e1dd,_0x1357eb){return function(_0x34c44a){if(_0x1357eb['rules']&&!_0x1357eb[_0x64e0('0xe')][_0x134312]){logger[_0x64e0('0xf')](_0x64e0('0x10'),_0x134312);return _0x34c44a[_0x64e0('0x11')]();}var _0x5a5581=[];for(var _0x4d8c1f=0x0;_0x4d8c1f<_0x38e1dd[_0x64e0('0x12')];_0x4d8c1f+=0x1){_0x5a5581[_0x64e0('0x13')](request(_0x64e0('0x14'),{'command':util[_0x64e0('0x15')](_0x64e0('0x16'),_0x38e1dd[_0x4d8c1f])})['then'](function(_0x4b04b8){return _0x4b04b8&&_0x4b04b8[_0x64e0('0xa')]&&_0x4b04b8[_0x64e0('0xa')][_0x64e0('0x17')](_0x64e0('0x18'))>=0x0?!![]:![];})[_0x64e0('0xc')](function(_0x32fdd4){logger['error']('[%s][INTERVAL]\x20%s',_0x134312,_0x38e1dd[_0x4d8c1f]);}));}BPromise[_0x64e0('0x19')](_0x5a5581)[_0x64e0('0x8')](function(_0x176693){var _0x1a247f=_[_0x64e0('0x1a')](_0x176693);logger[_0x64e0('0xf')](_0x64e0('0x1b'),_0x134312,_0x38e1dd[_0x64e0('0x1c')]('\x20|\x20'),_0x1a247f);_0x34c44a[_0x64e0('0x1d')](_0x1a247f);})[_0x64e0('0xc')](function(_0x7cf00a){console['log'](_0x7cf00a);logger[_0x64e0('0x9')]('[%s][INTERVAL]\x20%s\x20%s',_0x134312,_0x38e1dd[_0x64e0('0x1c')](_0x64e0('0x1e')),_0x7cf00a[_0x64e0('0x1f')]);_0x34c44a[_0x64e0('0x11')]();});};};
\ No newline at end of file
+var _0x46ba=['routing','client','http','request','then','error','message','result','condition','rules','[%s][INTERVAL]\x20ROUTING\x20STOPPED','stop','length','format','iftime\x20%s','indexOf','true','catch','[%s][INTERVAL]\x20%s','all','some','info','[%s][INTERVAL]\x20%s\x20%s','join','when','\x20|\x20','stack','bluebird','jayson/promise','lodash','../../../config/logger'];(function(_0x3453cc,_0x221153){var _0x587b7b=function(_0x520166){while(--_0x520166){_0x3453cc['push'](_0x3453cc['shift']());}};_0x587b7b(++_0x221153);}(_0x46ba,0x1cd));var _0xa46b=function(_0x22e571,_0x228b6d){_0x22e571=_0x22e571-0x0;var _0x4a09de=_0x46ba[_0x22e571];return _0x4a09de;};'use strict';var util=require('util');var BPromise=require(_0xa46b('0x0'));var jayson=require(_0xa46b('0x1'));var _=require(_0xa46b('0x2'));var logger=require(_0xa46b('0x3'))(_0xa46b('0x4'));var client=jayson[_0xa46b('0x5')][_0xa46b('0x6')]({'port':0x232a});function request(_0x389ec5,_0xe15815){return new BPromise(function(_0x4def37,_0x32c892){return client[_0xa46b('0x7')](_0x389ec5,_0xe15815)[_0xa46b('0x8')](function(_0xc845d3){if(_0xc845d3[_0xa46b('0x9')]){return _0x32c892(_0xc845d3[_0xa46b('0x9')][_0xa46b('0xa')]);}else{return _0x4def37(_0xc845d3[_0xa46b('0xb')]);}})['catch'](function(_0x12f3d9){return _0x32c892(_0x12f3d9);});});}exports[_0xa46b('0xc')]=function(_0x29e76c,_0x2f839a,_0x250373){return function(_0x5eacf4){if(_0x250373[_0xa46b('0xd')]&&!_0x250373['rules'][_0x29e76c]){logger['info'](_0xa46b('0xe'),_0x29e76c);return _0x5eacf4[_0xa46b('0xf')]();}var _0x38c0e0=[];for(var _0x55a3e0=0x0;_0x55a3e0<_0x2f839a[_0xa46b('0x10')];_0x55a3e0+=0x1){_0x38c0e0['push'](request('Command',{'command':util[_0xa46b('0x11')](_0xa46b('0x12'),_0x2f839a[_0x55a3e0])})['then'](function(_0x3978af){return _0x3978af&&_0x3978af[_0xa46b('0xa')]&&_0x3978af['message'][_0xa46b('0x13')](_0xa46b('0x14'))>=0x0?!![]:![];})[_0xa46b('0x15')](function(_0x3742e9){logger[_0xa46b('0x9')](_0xa46b('0x16'),_0x29e76c,_0x2f839a[_0x55a3e0]);}));}BPromise[_0xa46b('0x17')](_0x38c0e0)[_0xa46b('0x8')](function(_0x2cf95c){var _0x13c87c=_[_0xa46b('0x18')](_0x2cf95c);logger[_0xa46b('0x19')](_0xa46b('0x1a'),_0x29e76c,_0x2f839a[_0xa46b('0x1b')]('\x20|\x20'),_0x13c87c);_0x5eacf4[_0xa46b('0x1c')](_0x13c87c);})[_0xa46b('0x15')](function(_0x179a96){console['log'](_0x179a96);logger[_0xa46b('0x9')](_0xa46b('0x1a'),_0x29e76c,_0x2f839a[_0xa46b('0x1b')](_0xa46b('0x1d')),_0x179a96[_0xa46b('0x1e')]);_0x5eacf4['stop']();});};};
\ No newline at end of file
index 28a1a80..7220086 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbaee=['lastevent','then','type','agentacw','agentcomplete','acw','acwtime','acwTimeout','request','destuniqueid','now','called','connectedlinenum','connectedlinename','error','stack','isNil','agentringnoanswer','agentringnoanswerAt','rejected','holdtime','ringtime','queuecallerabandon','forIn','uniqueid','abandoned','reason','talktime','agentconnect','agentconnectAt','connect','answered_elsewhere','answeredelsewheredestinationuniqueid','answeredelsewheremembername','agentcompleteAt','diffTime','complete','blindtransfer','transfereruniqueid','transfer','transfertype','blind','extension','transferuniqueid','origtransfererlinkedid','secondtransfereruniqueid','transferexten','origtransfererexten','origtransfereruniqueid','transfereeuniqueid','agententerreason','clone','calleridname','agentcalledAt','secondtransfererlinkedid','ATTENDED','transfertargetuniqueid','agent','lodash','util','./utils','info','AGENT|%s|%s|%s|%s|%s|%s|%s|%s','queue','membername','interface','calleridnum'];(function(_0x4b13ce,_0x339cb0){var _0x427d4b=function(_0x26aaad){while(--_0x26aaad){_0x4b13ce['push'](_0x4b13ce['shift']());}};_0x427d4b(++_0x339cb0);}(_0xbaee,0x189));var _0xebae=function(_0x642468,_0x3f5aec){_0x642468=_0x642468-0x0;var _0x2b4af6=_0xbaee[_0x642468];return _0x2b4af6;};'use strict';var _=require(_0xebae('0x0'));var util=require(_0xebae('0x1'));var utils=require(_0xebae('0x2'));var agents={};var transfers={};function writeDB(_0x10bae9,_0x1a2d8f){utils[_0xebae('0x3')](util['format'](_0xebae('0x4'),_0x10bae9['uniqueid'],_0x10bae9['channel'],_0x10bae9[_0xebae('0x5')],_0x10bae9[_0xebae('0x6')],_0x10bae9[_0xebae('0x7')],_0x10bae9[_0xebae('0x8')],_0x10bae9['connectedlinenum'],_0x10bae9[_0xebae('0x9')]));if(_0x10bae9[_0xebae('0x5')]){utils['getVoiceQueueByName'](_0x10bae9[_0xebae('0x5')])[_0xebae('0xa')](function(_0x5b60ec){if(_0x5b60ec){_0x10bae9[_0xebae('0xb')]=_0x5b60ec['type'];_0x10bae9[_0xebae('0xc')]=_0x10bae9[_0xebae('0xd')]?_0x5b60ec[_0xebae('0xe')]:![];_0x10bae9[_0xebae('0xf')]=_0x10bae9[_0xebae('0xc')]?_0x5b60ec[_0xebae('0x10')]:0x0;}utils['request']('CreateVoiceAgentReport',_0x10bae9);});}else{utils[_0xebae('0x11')]('CreateVoiceAgentReport',_0x10bae9);}if(_0x1a2d8f){delete transfers[_0x10bae9['uniqueid']];}else{delete agents[_0x10bae9[_0xebae('0x12')]];}}exports['agentcalled']=function(_0x3ae159){try{agents[_0x3ae159[_0xebae('0x12')]]=_0x3ae159;agents[_0x3ae159['destuniqueid']]['agentcalledAt']=utils[_0xebae('0x13')]();agents[_0x3ae159[_0xebae('0x12')]][_0xebae('0x9')]=_0xebae('0x14');agents[_0x3ae159[_0xebae('0x12')]][_0xebae('0x15')]=null;agents[_0x3ae159[_0xebae('0x12')]][_0xebae('0x16')]=null;}catch(_0x423ed6){utils[_0xebae('0x17')](_0x423ed6[_0xebae('0x18')]);}};exports['agentringnoanswer']=function(_0x447a8b){try{if(!_[_0xebae('0x19')](agents[_0x447a8b[_0xebae('0x12')]])){agents[_0x447a8b[_0xebae('0x12')]][_0xebae('0x1a')]=!![];agents[_0x447a8b[_0xebae('0x12')]][_0xebae('0x1b')]=utils[_0xebae('0x13')]();agents[_0x447a8b[_0xebae('0x12')]][_0xebae('0x9')]=_0xebae('0x1c');agents[_0x447a8b[_0xebae('0x12')]]['reason']='rejected';agents[_0x447a8b[_0xebae('0x12')]][_0xebae('0x1d')]=_0x447a8b[_0xebae('0x1e')]?parseInt(_0x447a8b[_0xebae('0x1e')])/0x3e8:0x0;agents[_0x447a8b['destuniqueid']]['talktime']=0x0;writeDB(agents[_0x447a8b['destuniqueid']]);}}catch(_0x42d5a9){utils[_0xebae('0x17')](_0x42d5a9[_0xebae('0x18')]);}};exports[_0xebae('0x1f')]=function(_0x4c258d){try{_[_0xebae('0x20')](agents,function(_0x34c8a3,_0x1ee9b3){if(_0x34c8a3[_0xebae('0x21')]==_0x4c258d[_0xebae('0x21')]){_0x34c8a3[_0xebae('0x1a')]=!![];_0x34c8a3[_0xebae('0x1b')]=utils[_0xebae('0x13')]();_0x34c8a3[_0xebae('0x9')]=_0xebae('0x22');_0x34c8a3[_0xebae('0x23')]=_0xebae('0x22');_0x34c8a3[_0xebae('0x1d')]=_0x4c258d[_0xebae('0x1d')];_0x34c8a3[_0xebae('0x24')]=0x0;writeDB(_0x34c8a3);}});}catch(_0x45b1f8){utils[_0xebae('0x17')](_0x45b1f8[_0xebae('0x18')]);}};exports[_0xebae('0x25')]=function(_0xf61909){try{if(agents[_0xf61909[_0xebae('0x12')]]){agents[_0xf61909[_0xebae('0x12')]][_0xebae('0x26')]=utils[_0xebae('0x13')]();agents[_0xf61909[_0xebae('0x12')]]['connectedlinenum']=_0xf61909[_0xebae('0x15')];agents[_0xf61909[_0xebae('0x12')]][_0xebae('0x16')]=_0xf61909['connectedlinename'];agents[_0xf61909[_0xebae('0x12')]][_0xebae('0x1d')]=_0xf61909[_0xebae('0x1e')];agents[_0xf61909['destuniqueid']]['lastevent']=_0xebae('0x27');_[_0xebae('0x20')](agents,function(_0x431a1b,_0x123670){if(_0x431a1b[_0xebae('0x12')]!=_0xf61909[_0xebae('0x12')]&&_0x431a1b[_0xebae('0x21')]==_0xf61909['uniqueid']){_0x431a1b[_0xebae('0x24')]=0x0;_0x431a1b[_0xebae('0x1d')]=_0xf61909['ringtime'];_0x431a1b[_0xebae('0x1a')]=!![];_0x431a1b['agentringnoanswerAt']=utils[_0xebae('0x13')]();_0x431a1b[_0xebae('0x9')]=_0xebae('0x28');_0x431a1b['reason']='answered_elsewhere';_0x431a1b[_0xebae('0x29')]=_0xf61909['destuniqueid'];_0x431a1b[_0xebae('0x2a')]=_0xf61909[_0xebae('0x6')];writeDB(_0x431a1b);}});}}catch(_0x43b28a){utils[_0xebae('0x17')](_0x43b28a['stack']);}};exports[_0xebae('0xd')]=function(_0x219a58){try{if(!_['isNil'](agents[_0x219a58[_0xebae('0x12')]])){agents[_0x219a58[_0xebae('0x12')]][_0xebae('0xd')]=!![];agents[_0x219a58[_0xebae('0x12')]][_0xebae('0x2b')]=utils[_0xebae('0x13')]();agents[_0x219a58[_0xebae('0x12')]]['talktime']=utils[_0xebae('0x2c')](agents[_0x219a58[_0xebae('0x12')]]['agentcompleteAt'],agents[_0x219a58['destuniqueid']]['agentconnectAt']);agents[_0x219a58[_0xebae('0x12')]][_0xebae('0x23')]=_0x219a58[_0xebae('0x23')];agents[_0x219a58[_0xebae('0x12')]]['lastevent']=_0xebae('0x2d');writeDB(agents[_0x219a58[_0xebae('0x12')]]);}}catch(_0x31ea94){utils[_0xebae('0x17')](_0x31ea94[_0xebae('0x18')]);}};exports[_0xebae('0x2e')]=function(_0x136901){try{if(!_[_0xebae('0x19')](agents[_0x136901[_0xebae('0x2f')]])){agents[_0x136901['transfereruniqueid']][_0xebae('0x30')]=!![];agents[_0x136901[_0xebae('0x2f')]][_0xebae('0x31')]=_0xebae('0x32');agents[_0x136901['transfereruniqueid']]['transferexten']=_0x136901[_0xebae('0x33')];agents[_0x136901[_0xebae('0x2f')]][_0xebae('0x34')]=agents[_0x136901[_0xebae('0x2f')]][_0xebae('0x21')];}}catch(_0x3dae1b){utils['error'](_0x3dae1b[_0xebae('0x18')]);}};exports['attendedtransfer']=function(_0x49e6d5){try{if(_0x49e6d5['origtransfereruniqueid']==_0x49e6d5[_0xebae('0x35')]){if(!_[_0xebae('0x19')](agents[_0x49e6d5['secondtransfereruniqueid']])){agents[_0x49e6d5[_0xebae('0x36')]][_0xebae('0x30')]=!![];agents[_0x49e6d5[_0xebae('0x36')]]['transfertype']='ATTENDED';agents[_0x49e6d5[_0xebae('0x36')]][_0xebae('0x37')]=_0x49e6d5[_0xebae('0x38')];agents[_0x49e6d5[_0xebae('0x36')]][_0xebae('0x34')]=_0x49e6d5[_0xebae('0x39')];}if(_0x49e6d5[_0xebae('0x3a')]&&agents[_0x49e6d5['transfereeuniqueid']]){agents[_0x49e6d5[_0xebae('0x3a')]][_0xebae('0x3b')]=0x1;transfers[_0x49e6d5[_0xebae('0x3a')]]=_[_0xebae('0x3c')](agents[_0x49e6d5[_0xebae('0x3a')]]);transfers[_0x49e6d5[_0xebae('0x3a')]]['calleridnum']=agents[_0x49e6d5[_0xebae('0x36')]][_0xebae('0x8')];transfers[_0x49e6d5[_0xebae('0x3a')]][_0xebae('0x3d')]=agents[_0x49e6d5[_0xebae('0x36')]][_0xebae('0x3d')];transfers[_0x49e6d5[_0xebae('0x3a')]][_0xebae('0x3e')]=utils['now']();transfers[_0x49e6d5[_0xebae('0x3a')]][_0xebae('0x26')]=utils[_0xebae('0x13')]();transfers[_0x49e6d5[_0xebae('0x3a')]][_0xebae('0x1d')]=0x0;transfers[_0x49e6d5[_0xebae('0x3a')]]['agententerreason']=0x2;}}else if(_0x49e6d5[_0xebae('0x36')]==_0x49e6d5[_0xebae('0x3f')]){if(!_[_0xebae('0x19')](agents[_0x49e6d5[_0xebae('0x39')]])){agents[_0x49e6d5[_0xebae('0x39')]][_0xebae('0x30')]=!![];agents[_0x49e6d5[_0xebae('0x39')]][_0xebae('0x31')]=_0xebae('0x40');agents[_0x49e6d5[_0xebae('0x39')]][_0xebae('0x37')]=_0x49e6d5['secondtransfererexten'];agents[_0x49e6d5[_0xebae('0x39')]][_0xebae('0x34')]=_0x49e6d5[_0xebae('0x36')];}if(_0x49e6d5[_0xebae('0x41')]&&agents[_0x49e6d5[_0xebae('0x41')]]){agents[_0x49e6d5[_0xebae('0x41')]]['agententerreason']=0x1;transfers[_0x49e6d5['transfertargetuniqueid']]=_[_0xebae('0x3c')](agents[_0x49e6d5[_0xebae('0x41')]]);transfers[_0x49e6d5[_0xebae('0x41')]][_0xebae('0x8')]=agents[_0x49e6d5[_0xebae('0x39')]]['calleridnum'];transfers[_0x49e6d5[_0xebae('0x41')]][_0xebae('0x3d')]=agents[_0x49e6d5[_0xebae('0x39')]]['calleridname'];transfers[_0x49e6d5[_0xebae('0x41')]][_0xebae('0x3e')]=utils[_0xebae('0x13')]();transfers[_0x49e6d5['transfertargetuniqueid']][_0xebae('0x26')]=utils[_0xebae('0x13')]();transfers[_0x49e6d5['transfertargetuniqueid']][_0xebae('0x1d')]=0x0;transfers[_0x49e6d5[_0xebae('0x41')]]['agententerreason']=0x2;}}}catch(_0x1a745d){utils[_0xebae('0x17')](_0x1a745d[_0xebae('0x18')]);}};exports['hangup']=function(_0x7b748d){try{if(transfers[_0x7b748d[_0xebae('0x21')]]){transfers[_0x7b748d[_0xebae('0x21')]][_0xebae('0xd')]=!![];transfers[_0x7b748d['uniqueid']][_0xebae('0x2b')]=utils['now']();transfers[_0x7b748d[_0xebae('0x21')]][_0xebae('0x24')]=utils[_0xebae('0x2c')](transfers[_0x7b748d[_0xebae('0x21')]][_0xebae('0x2b')],transfers[_0x7b748d['uniqueid']][_0xebae('0x26')]);transfers[_0x7b748d[_0xebae('0x21')]]['reason']='agent';transfers[_0x7b748d['uniqueid']][_0xebae('0x9')]=_0xebae('0x2d');writeDB(transfers[_0x7b748d[_0xebae('0x21')]],!![]);}if(agents[_0x7b748d['uniqueid']]&&agents[_0x7b748d[_0xebae('0x21')]][_0xebae('0x26')]){agents[_0x7b748d[_0xebae('0x21')]][_0xebae('0xd')]=!![];agents[_0x7b748d['uniqueid']][_0xebae('0x2b')]=utils['now']();agents[_0x7b748d[_0xebae('0x21')]][_0xebae('0x24')]=utils['diffTime'](agents[_0x7b748d[_0xebae('0x21')]][_0xebae('0x2b')],agents[_0x7b748d['uniqueid']][_0xebae('0x26')]);agents[_0x7b748d[_0xebae('0x21')]][_0xebae('0x23')]=agents[_0x7b748d[_0xebae('0x21')]][_0xebae('0x30')]?_0xebae('0x30'):_0xebae('0x42');agents[_0x7b748d[_0xebae('0x21')]][_0xebae('0x9')]=_0xebae('0x2d');writeDB(agents[_0x7b748d[_0xebae('0x21')]]);}}catch(_0x2dd44a){utils[_0xebae('0x17')](_0x2dd44a['stack']);}};
\ No newline at end of file
+var _0x8358=['calleridnum','lastevent','getVoiceQueueByName','type','agentacw','acw','acwtime','acwTimeout','request','CreateVoiceAgentReport','destuniqueid','agentcalled','now','called','connectedlinenum','connectedlinename','error','stack','agentringnoanswer','agentringnoanswerAt','rejected','reason','holdtime','ringtime','talktime','queuecallerabandon','forIn','abandoned','agentconnectAt','connect','answered_elsewhere','answeredelsewheredestinationuniqueid','answeredelsewheremembername','agentcomplete','complete','blindtransfer','isNil','transfereruniqueid','blind','transferexten','extension','origtransfereruniqueid','origtransfererlinkedid','secondtransfereruniqueid','ATTENDED','transferuniqueid','transfereeuniqueid','agententerreason','calleridname','agentcalledAt','secondtransfererlinkedid','transfer','transfertype','transfertargetuniqueid','clone','hangup','agentcompleteAt','diffTime','agent','lodash','util','info','AGENT|%s|%s|%s|%s|%s|%s|%s|%s','uniqueid','channel','queue','membername','interface'];(function(_0x1c27d7,_0x5017da){var _0x4795be=function(_0x2873e1){while(--_0x2873e1){_0x1c27d7['push'](_0x1c27d7['shift']());}};_0x4795be(++_0x5017da);}(_0x8358,0x7f));var _0x8835=function(_0xdedb26,_0x3e5dd6){_0xdedb26=_0xdedb26-0x0;var _0x238e48=_0x8358[_0xdedb26];return _0x238e48;};'use strict';var _=require(_0x8835('0x0'));var util=require(_0x8835('0x1'));var utils=require('./utils');var agents={};var transfers={};function writeDB(_0x5da659,_0x5ebc87){utils[_0x8835('0x2')](util['format'](_0x8835('0x3'),_0x5da659[_0x8835('0x4')],_0x5da659[_0x8835('0x5')],_0x5da659[_0x8835('0x6')],_0x5da659[_0x8835('0x7')],_0x5da659[_0x8835('0x8')],_0x5da659[_0x8835('0x9')],_0x5da659['connectedlinenum'],_0x5da659[_0x8835('0xa')]));if(_0x5da659['queue']){utils[_0x8835('0xb')](_0x5da659[_0x8835('0x6')])['then'](function(_0x37a997){if(_0x37a997){_0x5da659[_0x8835('0xc')]=_0x37a997['type'];_0x5da659[_0x8835('0xd')]=_0x5da659['agentcomplete']?_0x37a997[_0x8835('0xe')]:![];_0x5da659[_0x8835('0xf')]=_0x5da659[_0x8835('0xd')]?_0x37a997[_0x8835('0x10')]:0x0;}utils[_0x8835('0x11')](_0x8835('0x12'),_0x5da659);});}else{utils[_0x8835('0x11')](_0x8835('0x12'),_0x5da659);}if(_0x5ebc87){delete transfers[_0x5da659['uniqueid']];}else{delete agents[_0x5da659[_0x8835('0x13')]];}}exports[_0x8835('0x14')]=function(_0xe120a8){try{agents[_0xe120a8[_0x8835('0x13')]]=_0xe120a8;agents[_0xe120a8['destuniqueid']]['agentcalledAt']=utils[_0x8835('0x15')]();agents[_0xe120a8['destuniqueid']][_0x8835('0xa')]=_0x8835('0x16');agents[_0xe120a8[_0x8835('0x13')]][_0x8835('0x17')]=null;agents[_0xe120a8[_0x8835('0x13')]][_0x8835('0x18')]=null;}catch(_0x5c6e10){utils[_0x8835('0x19')](_0x5c6e10[_0x8835('0x1a')]);}};exports[_0x8835('0x1b')]=function(_0x41dcb0){try{if(!_['isNil'](agents[_0x41dcb0[_0x8835('0x13')]])){agents[_0x41dcb0['destuniqueid']][_0x8835('0x1b')]=!![];agents[_0x41dcb0[_0x8835('0x13')]][_0x8835('0x1c')]=utils[_0x8835('0x15')]();agents[_0x41dcb0['destuniqueid']][_0x8835('0xa')]=_0x8835('0x1d');agents[_0x41dcb0[_0x8835('0x13')]][_0x8835('0x1e')]=_0x8835('0x1d');agents[_0x41dcb0[_0x8835('0x13')]][_0x8835('0x1f')]=_0x41dcb0['ringtime']?parseInt(_0x41dcb0[_0x8835('0x20')])/0x3e8:0x0;agents[_0x41dcb0[_0x8835('0x13')]][_0x8835('0x21')]=0x0;writeDB(agents[_0x41dcb0[_0x8835('0x13')]]);}}catch(_0x201bbb){utils['error'](_0x201bbb[_0x8835('0x1a')]);}};exports[_0x8835('0x22')]=function(_0x49bab4){try{_[_0x8835('0x23')](agents,function(_0x117592,_0x1fb9cf){if(_0x117592[_0x8835('0x4')]==_0x49bab4[_0x8835('0x4')]){_0x117592[_0x8835('0x1b')]=!![];_0x117592[_0x8835('0x1c')]=utils[_0x8835('0x15')]();_0x117592[_0x8835('0xa')]='abandoned';_0x117592[_0x8835('0x1e')]=_0x8835('0x24');_0x117592[_0x8835('0x1f')]=_0x49bab4[_0x8835('0x1f')];_0x117592[_0x8835('0x21')]=0x0;writeDB(_0x117592);}});}catch(_0xc9f002){utils[_0x8835('0x19')](_0xc9f002[_0x8835('0x1a')]);}};exports['agentconnect']=function(_0x2fa7f4){try{if(agents[_0x2fa7f4[_0x8835('0x13')]]){agents[_0x2fa7f4[_0x8835('0x13')]][_0x8835('0x25')]=utils['now']();agents[_0x2fa7f4[_0x8835('0x13')]][_0x8835('0x17')]=_0x2fa7f4['connectedlinenum'];agents[_0x2fa7f4[_0x8835('0x13')]][_0x8835('0x18')]=_0x2fa7f4['connectedlinename'];agents[_0x2fa7f4[_0x8835('0x13')]][_0x8835('0x1f')]=_0x2fa7f4[_0x8835('0x20')];agents[_0x2fa7f4[_0x8835('0x13')]][_0x8835('0xa')]=_0x8835('0x26');_['forIn'](agents,function(_0x204aef,_0x219139){if(_0x204aef[_0x8835('0x13')]!=_0x2fa7f4['destuniqueid']&&_0x204aef[_0x8835('0x4')]==_0x2fa7f4[_0x8835('0x4')]){_0x204aef[_0x8835('0x21')]=0x0;_0x204aef[_0x8835('0x1f')]=_0x2fa7f4[_0x8835('0x20')];_0x204aef[_0x8835('0x1b')]=!![];_0x204aef['agentringnoanswerAt']=utils[_0x8835('0x15')]();_0x204aef[_0x8835('0xa')]=_0x8835('0x27');_0x204aef[_0x8835('0x1e')]=_0x8835('0x27');_0x204aef[_0x8835('0x28')]=_0x2fa7f4[_0x8835('0x13')];_0x204aef[_0x8835('0x29')]=_0x2fa7f4[_0x8835('0x7')];writeDB(_0x204aef);}});}}catch(_0x296261){utils[_0x8835('0x19')](_0x296261[_0x8835('0x1a')]);}};exports[_0x8835('0x2a')]=function(_0x16cf3b){try{if(!_['isNil'](agents[_0x16cf3b[_0x8835('0x13')]])){agents[_0x16cf3b['destuniqueid']][_0x8835('0x2a')]=!![];agents[_0x16cf3b[_0x8835('0x13')]]['agentcompleteAt']=utils[_0x8835('0x15')]();agents[_0x16cf3b['destuniqueid']][_0x8835('0x21')]=utils['diffTime'](agents[_0x16cf3b[_0x8835('0x13')]]['agentcompleteAt'],agents[_0x16cf3b[_0x8835('0x13')]]['agentconnectAt']);agents[_0x16cf3b[_0x8835('0x13')]][_0x8835('0x1e')]=_0x16cf3b[_0x8835('0x1e')];agents[_0x16cf3b[_0x8835('0x13')]][_0x8835('0xa')]=_0x8835('0x2b');writeDB(agents[_0x16cf3b['destuniqueid']]);}}catch(_0x3bfb07){utils[_0x8835('0x19')](_0x3bfb07['stack']);}};exports[_0x8835('0x2c')]=function(_0x4d9b84){try{if(!_[_0x8835('0x2d')](agents[_0x4d9b84[_0x8835('0x2e')]])){agents[_0x4d9b84['transfereruniqueid']]['transfer']=!![];agents[_0x4d9b84[_0x8835('0x2e')]]['transfertype']=_0x8835('0x2f');agents[_0x4d9b84['transfereruniqueid']][_0x8835('0x30')]=_0x4d9b84[_0x8835('0x31')];agents[_0x4d9b84[_0x8835('0x2e')]]['transferuniqueid']=agents[_0x4d9b84[_0x8835('0x2e')]][_0x8835('0x4')];}}catch(_0x1753a7){utils['error'](_0x1753a7[_0x8835('0x1a')]);}};exports['attendedtransfer']=function(_0x39d38b){try{if(_0x39d38b[_0x8835('0x32')]==_0x39d38b[_0x8835('0x33')]){if(!_[_0x8835('0x2d')](agents[_0x39d38b[_0x8835('0x34')]])){agents[_0x39d38b[_0x8835('0x34')]]['transfer']=!![];agents[_0x39d38b[_0x8835('0x34')]]['transfertype']=_0x8835('0x35');agents[_0x39d38b[_0x8835('0x34')]]['transferexten']=_0x39d38b['origtransfererexten'];agents[_0x39d38b['secondtransfereruniqueid']][_0x8835('0x36')]=_0x39d38b[_0x8835('0x32')];}if(_0x39d38b[_0x8835('0x37')]&&agents[_0x39d38b['transfereeuniqueid']]){agents[_0x39d38b[_0x8835('0x37')]][_0x8835('0x38')]=0x1;transfers[_0x39d38b[_0x8835('0x37')]]=_['clone'](agents[_0x39d38b[_0x8835('0x37')]]);transfers[_0x39d38b[_0x8835('0x37')]][_0x8835('0x9')]=agents[_0x39d38b['secondtransfereruniqueid']][_0x8835('0x9')];transfers[_0x39d38b[_0x8835('0x37')]][_0x8835('0x39')]=agents[_0x39d38b[_0x8835('0x34')]]['calleridname'];transfers[_0x39d38b['transfereeuniqueid']][_0x8835('0x3a')]=utils[_0x8835('0x15')]();transfers[_0x39d38b['transfereeuniqueid']][_0x8835('0x25')]=utils[_0x8835('0x15')]();transfers[_0x39d38b[_0x8835('0x37')]][_0x8835('0x1f')]=0x0;transfers[_0x39d38b['transfereeuniqueid']][_0x8835('0x38')]=0x2;}}else if(_0x39d38b[_0x8835('0x34')]==_0x39d38b[_0x8835('0x3b')]){if(!_[_0x8835('0x2d')](agents[_0x39d38b[_0x8835('0x32')]])){agents[_0x39d38b[_0x8835('0x32')]][_0x8835('0x3c')]=!![];agents[_0x39d38b[_0x8835('0x32')]][_0x8835('0x3d')]=_0x8835('0x35');agents[_0x39d38b['origtransfereruniqueid']][_0x8835('0x30')]=_0x39d38b['secondtransfererexten'];agents[_0x39d38b[_0x8835('0x32')]][_0x8835('0x36')]=_0x39d38b[_0x8835('0x34')];}if(_0x39d38b[_0x8835('0x3e')]&&agents[_0x39d38b[_0x8835('0x3e')]]){agents[_0x39d38b['transfertargetuniqueid']][_0x8835('0x38')]=0x1;transfers[_0x39d38b['transfertargetuniqueid']]=_[_0x8835('0x3f')](agents[_0x39d38b['transfertargetuniqueid']]);transfers[_0x39d38b[_0x8835('0x3e')]][_0x8835('0x9')]=agents[_0x39d38b[_0x8835('0x32')]]['calleridnum'];transfers[_0x39d38b[_0x8835('0x3e')]]['calleridname']=agents[_0x39d38b[_0x8835('0x32')]][_0x8835('0x39')];transfers[_0x39d38b[_0x8835('0x3e')]][_0x8835('0x3a')]=utils['now']();transfers[_0x39d38b['transfertargetuniqueid']][_0x8835('0x25')]=utils[_0x8835('0x15')]();transfers[_0x39d38b['transfertargetuniqueid']]['holdtime']=0x0;transfers[_0x39d38b[_0x8835('0x3e')]][_0x8835('0x38')]=0x2;}}}catch(_0x2b653e){utils[_0x8835('0x19')](_0x2b653e[_0x8835('0x1a')]);}};exports[_0x8835('0x40')]=function(_0x48b4c6){try{if(transfers[_0x48b4c6[_0x8835('0x4')]]){transfers[_0x48b4c6[_0x8835('0x4')]][_0x8835('0x2a')]=!![];transfers[_0x48b4c6[_0x8835('0x4')]][_0x8835('0x41')]=utils[_0x8835('0x15')]();transfers[_0x48b4c6[_0x8835('0x4')]][_0x8835('0x21')]=utils[_0x8835('0x42')](transfers[_0x48b4c6['uniqueid']]['agentcompleteAt'],transfers[_0x48b4c6['uniqueid']][_0x8835('0x25')]);transfers[_0x48b4c6[_0x8835('0x4')]][_0x8835('0x1e')]='agent';transfers[_0x48b4c6[_0x8835('0x4')]][_0x8835('0xa')]=_0x8835('0x2b');writeDB(transfers[_0x48b4c6[_0x8835('0x4')]],!![]);}if(agents[_0x48b4c6[_0x8835('0x4')]]&&agents[_0x48b4c6[_0x8835('0x4')]][_0x8835('0x25')]){agents[_0x48b4c6[_0x8835('0x4')]][_0x8835('0x2a')]=!![];agents[_0x48b4c6[_0x8835('0x4')]][_0x8835('0x41')]=utils[_0x8835('0x15')]();agents[_0x48b4c6['uniqueid']]['talktime']=utils[_0x8835('0x42')](agents[_0x48b4c6[_0x8835('0x4')]][_0x8835('0x41')],agents[_0x48b4c6[_0x8835('0x4')]][_0x8835('0x25')]);agents[_0x48b4c6[_0x8835('0x4')]]['reason']=agents[_0x48b4c6[_0x8835('0x4')]][_0x8835('0x3c')]?_0x8835('0x3c'):_0x8835('0x43');agents[_0x48b4c6[_0x8835('0x4')]][_0x8835('0xa')]=_0x8835('0x2b');writeDB(agents[_0x48b4c6['uniqueid']]);}}catch(_0x564688){utils[_0x8835('0x19')](_0x564688[_0x8835('0x1a')]);}};
\ No newline at end of file
index b53c541..155af88 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1d81=['then','UserId','request','CreateVoiceCallReport','newchannel','linkedid','context','now','DOCUMENTATION','error','newstate','channelstate','isNil','systemanswertime','transfer','destinationchannel','answertime','toNumber','hangup','calleridname','calleridnum','endtime','starttime','billableseconds','stack','localtwolinkedid','transfereechannel','secondtransfererchannel','_attended','transfertargetchannel','origtransfererchannel','userfield','musiconholdstart','musiconholdstartAt','mohtime','diffTime','varset','xmd-originatecalleridnum','value','variable','xmd-phone','\x22\x20<','xmd-callerid-preview','xmd-callerid','xmd-queue','xmcs-queue','lastapplication','Queue','lastdata','queue','xmd-contactid','ContactId','xmd-cdrtype','type','outboundrouteid','routeid','sipcallid','newexten','application','toLowerCase','set','startsWith','appdata','cdr','split','lastIndexOf','includes','noop','execif','gotoif','lodash','util','./utils','NO\x20ANSWER','FAILED','ANSWERED','BUSY','CALL|%s|%s|%s|%s|%s|%s|%s|%s','uniqueid','channel','accountcode','source','destination','callerid','disposition','getUserByInternal'];(function(_0x367054,_0x1debc3){var _0x472454=function(_0x3f4ea7){while(--_0x3f4ea7){_0x367054['push'](_0x367054['shift']());}};_0x472454(++_0x1debc3);}(_0x1d81,0xf2));var _0x11d8=function(_0x11adbd,_0x5055f5){_0x11adbd=_0x11adbd-0x0;var _0x270029=_0x1d81[_0x11adbd];return _0x270029;};'use strict';var _=require(_0x11d8('0x0'));var util=require(_0x11d8('0x1'));var utils=require(_0x11d8('0x2'));var dispositions=[_0x11d8('0x3'),_0x11d8('0x4'),_0x11d8('0x4'),_0x11d8('0x3'),_0x11d8('0x3'),_0x11d8('0x3'),_0x11d8('0x5'),_0x11d8('0x6'),_0x11d8('0x4'),_0x11d8('0x4'),_0x11d8('0x4')];var channels={};function writeDB(_0x4e4f26){utils['info'](util['format'](_0x11d8('0x7'),_0x4e4f26[_0x11d8('0x8')],_0x4e4f26[_0x11d8('0x9')],_0x4e4f26['type'],_0x4e4f26[_0x11d8('0xa')],_0x4e4f26[_0x11d8('0xb')],_0x4e4f26[_0x11d8('0xc')],_0x4e4f26[_0x11d8('0xd')],_0x4e4f26[_0x11d8('0xe')]));if(_0x4e4f26['accountcode']){utils[_0x11d8('0xf')](_0x4e4f26[_0x11d8('0xa')])[_0x11d8('0x10')](function(_0x1e0157){if(_0x1e0157){_0x4e4f26[_0x11d8('0x11')]=_0x1e0157['id'];}utils[_0x11d8('0x12')](_0x11d8('0x13'),_0x4e4f26);});}else{utils[_0x11d8('0x12')](_0x11d8('0x13'),_0x4e4f26);}if(channels[_0x4e4f26[_0x11d8('0x8')]]){delete channels[_0x4e4f26[_0x11d8('0x8')]];}}exports[_0x11d8('0x14')]=function(_0x1e5bc7){try{if(_0x1e5bc7['uniqueid']==_0x1e5bc7[_0x11d8('0x15')]&&_0x1e5bc7[_0x11d8('0x9')]!='OutgoingSpoolFailed'){channels[_0x1e5bc7[_0x11d8('0x8')]]={'uniqueid':_0x1e5bc7[_0x11d8('0x8')],'accountcode':_0x1e5bc7[_0x11d8('0xa')],'source':_0x1e5bc7['calleridnum'],'destination':_0x1e5bc7['exten'],'destinationcontext':_0x1e5bc7[_0x11d8('0x16')],'channel':_0x1e5bc7['channel'],'starttime':utils[_0x11d8('0x17')](),'answertime':null,'systemanswertime':null,'mohtime':0x0,'disposition':'NO\x20ANSWER','amaflags':_0x11d8('0x18')};}}catch(_0x36c2e1){utils[_0x11d8('0x19')](_0x36c2e1['stack']);}};exports[_0x11d8('0x1a')]=function(_0x5e0096){try{if(!_['isNil'](channels[_0x5e0096[_0x11d8('0x8')]])&&_0x5e0096[_0x11d8('0x1b')]==0x6){if(_[_0x11d8('0x1c')](channels[_0x5e0096['uniqueid']][_0x11d8('0x1d')])){channels[_0x5e0096['uniqueid']][_0x11d8('0x1d')]=utils['now']();}}else if(!_[_0x11d8('0x1c')](channels[_0x5e0096[_0x11d8('0x15')]])&&_0x5e0096[_0x11d8('0x1b')]==0x6&&_0x5e0096[_0x11d8('0x16')]!=_0x11d8('0x1e')){channels[_0x5e0096['linkedid']][_0x11d8('0xa')]=_0x5e0096['accountcode'];channels[_0x5e0096[_0x11d8('0x15')]][_0x11d8('0x1f')]=_0x5e0096[_0x11d8('0x9')];if(_[_0x11d8('0x1c')](channels[_0x5e0096['linkedid']]['answertime'])){channels[_0x5e0096[_0x11d8('0x15')]][_0x11d8('0x20')]=utils['now']();}channels[_0x5e0096[_0x11d8('0x15')]][_0x11d8('0xe')]=dispositions[_[_0x11d8('0x21')](_0x5e0096[_0x11d8('0x1b')])]||_0x11d8('0x5');}}catch(_0x1562af){utils[_0x11d8('0x19')](_0x1562af['stack']);}};exports[_0x11d8('0x22')]=function(_0x359b64){try{if(!_['isNil'](channels[_0x359b64[_0x11d8('0x8')]])){if(_[_0x11d8('0x1c')](channels[_0x359b64['uniqueid']][_0x11d8('0xd')])){channels[_0x359b64[_0x11d8('0x8')]][_0x11d8('0xd')]=_0x359b64[_0x11d8('0x23')]+'\x20<'+_0x359b64[_0x11d8('0x24')]+'>';}channels[_0x359b64[_0x11d8('0x8')]][_0x11d8('0x25')]=utils[_0x11d8('0x17')]();channels[_0x359b64['uniqueid']]['duration']=utils['diffTime'](channels[_0x359b64[_0x11d8('0x8')]][_0x11d8('0x25')],channels[_0x359b64[_0x11d8('0x8')]][_0x11d8('0x26')]);channels[_0x359b64[_0x11d8('0x8')]][_0x11d8('0x27')]=channels[_0x359b64[_0x11d8('0x8')]][_0x11d8('0x20')]?utils['diffTime'](channels[_0x359b64['uniqueid']]['endtime'],channels[_0x359b64[_0x11d8('0x8')]]['answertime']):0x0;writeDB(channels[_0x359b64[_0x11d8('0x8')]]);}}catch(_0x21042f){utils[_0x11d8('0x19')](_0x21042f[_0x11d8('0x28')]);}};exports['attendedtransfer']=function(_0x1ecb51){try{if(!_[_0x11d8('0x1c')](channels[_0x1ecb51[_0x11d8('0x29')]])){if(channels[_0x1ecb51[_0x11d8('0x29')]][_0x11d8('0x9')]==_0x1ecb51[_0x11d8('0x2a')]){channels[_0x1ecb51[_0x11d8('0x29')]][_0x11d8('0x1f')]=_0x1ecb51[_0x11d8('0x2b')];channels[_0x1ecb51[_0x11d8('0x29')]]['userfield']=_0x11d8('0x2c');}else if(channels[_0x1ecb51[_0x11d8('0x29')]][_0x11d8('0x9')]=_0x1ecb51[_0x11d8('0x2d')]){channels[_0x1ecb51[_0x11d8('0x29')]][_0x11d8('0x1f')]=_0x1ecb51[_0x11d8('0x2e')];channels[_0x1ecb51[_0x11d8('0x29')]][_0x11d8('0x2f')]=_0x11d8('0x2c');}}}catch(_0x463b2a){utils[_0x11d8('0x19')](_0x463b2a['stack']);}};exports[_0x11d8('0x30')]=function(_0x2d6b99){try{if(!_[_0x11d8('0x1c')](channels[_0x2d6b99[_0x11d8('0x8')]])){channels[_0x2d6b99[_0x11d8('0x8')]]['musiconholdstartAt']=utils['now']();}}catch(_0x3580bd){utils[_0x11d8('0x19')](_0x3580bd[_0x11d8('0x28')]);}};exports['musiconholdstop']=function(_0x49bd6d){try{if(!_[_0x11d8('0x1c')](channels[_0x49bd6d[_0x11d8('0x8')]])){if(!_[_0x11d8('0x1c')](channels[_0x49bd6d[_0x11d8('0x8')]][_0x11d8('0x31')])){channels[_0x49bd6d[_0x11d8('0x8')]][_0x11d8('0x32')]+=utils[_0x11d8('0x33')](utils['now'](),channels[_0x49bd6d['uniqueid']][_0x11d8('0x31')]);delete channels[_0x49bd6d[_0x11d8('0x8')]][_0x11d8('0x31')];}}}catch(_0x4aaf94){utils['error'](_0x4aaf94[_0x11d8('0x28')]);}};exports[_0x11d8('0x34')]=function(_0x3a6eeb){try{if(!_[_0x11d8('0x1c')](channels[_0x3a6eeb['uniqueid']])){if(!_['isNil'](_0x3a6eeb['variable'][_0x11d8('0x35')])){channels[_0x3a6eeb[_0x11d8('0x8')]][_0x11d8('0xb')]=_0x3a6eeb[_0x11d8('0x36')];}if(!_[_0x11d8('0x1c')](_0x3a6eeb[_0x11d8('0x37')][_0x11d8('0x38')])){channels[_0x3a6eeb[_0x11d8('0x8')]][_0x11d8('0xc')]=_0x3a6eeb[_0x11d8('0x36')];channels[_0x3a6eeb[_0x11d8('0x8')]][_0x11d8('0xd')]='\x22'+_0x3a6eeb[_0x11d8('0x36')]+_0x11d8('0x39')+_0x3a6eeb['value']+'>';}if(!_[_0x11d8('0x1c')](_0x3a6eeb[_0x11d8('0x37')][_0x11d8('0x3a')])||!_['isNil'](_0x3a6eeb[_0x11d8('0x37')][_0x11d8('0x3b')])){channels[_0x3a6eeb[_0x11d8('0x8')]][_0x11d8('0xd')]=_0x3a6eeb[_0x11d8('0x36')];}if(!_[_0x11d8('0x1c')](_0x3a6eeb[_0x11d8('0x37')][_0x11d8('0x3c')])||!_[_0x11d8('0x1c')](_0x3a6eeb[_0x11d8('0x37')][_0x11d8('0x3d')])){channels[_0x3a6eeb[_0x11d8('0x8')]][_0x11d8('0x3e')]=_0x11d8('0x3f');channels[_0x3a6eeb[_0x11d8('0x8')]][_0x11d8('0x40')]=_0x3a6eeb['value'];channels[_0x3a6eeb[_0x11d8('0x8')]][_0x11d8('0x41')]=!![];}if(!_[_0x11d8('0x1c')](_0x3a6eeb[_0x11d8('0x37')][_0x11d8('0x42')])){channels[_0x3a6eeb['uniqueid']][_0x11d8('0x43')]=_0x3a6eeb[_0x11d8('0x36')];}if(!_[_0x11d8('0x1c')](_0x3a6eeb[_0x11d8('0x37')][_0x11d8('0x44')])){channels[_0x3a6eeb[_0x11d8('0x8')]][_0x11d8('0x45')]=_0x3a6eeb['value'];}if(!_['isNil'](_0x3a6eeb[_0x11d8('0x37')][_0x11d8('0x46')])){channels[_0x3a6eeb[_0x11d8('0x8')]][_0x11d8('0x47')]=_0x3a6eeb[_0x11d8('0x36')];}if(!_[_0x11d8('0x1c')](_0x3a6eeb[_0x11d8('0x37')][_0x11d8('0x48')])){channels[_0x3a6eeb[_0x11d8('0x8')]][_0x11d8('0x48')]=_0x3a6eeb[_0x11d8('0x36')];}}}catch(_0x2e6b90){utils[_0x11d8('0x19')](_0x2e6b90[_0x11d8('0x28')]);}};exports[_0x11d8('0x49')]=function(_0x42ae0b){try{if(!_[_0x11d8('0x1c')](channels[_0x42ae0b[_0x11d8('0x8')]])){if(_0x42ae0b[_0x11d8('0x4a')][_0x11d8('0x4b')]()==_0x11d8('0x4c')&&_[_0x11d8('0x4d')](_0x42ae0b[_0x11d8('0x4e')][_0x11d8('0x4b')](),_0x11d8('0x4f'))){var _0x593230=_0x42ae0b[_0x11d8('0x4e')][_0x11d8('0x50')]('=');var _0x385c0f=_0x593230[0x0]['substring'](_0x593230[0x0][_0x11d8('0x51')]('(')+0x1,_0x593230[0x0][_0x11d8('0x51')](')'));var _0x27a3ed=_0x593230[0x1];channels[_0x42ae0b['uniqueid']][_0x385c0f]=_0x27a3ed;}if(!_[_0x11d8('0x52')]([_0x11d8('0x22'),_0x11d8('0x53'),_0x11d8('0x54'),_0x11d8('0x4c'),_0x11d8('0x55')],_0x42ae0b[_0x11d8('0x4a')][_0x11d8('0x4b')]())){channels[_0x42ae0b[_0x11d8('0x8')]][_0x11d8('0x3e')]=_0x42ae0b[_0x11d8('0x4a')];channels[_0x42ae0b[_0x11d8('0x8')]][_0x11d8('0x40')]=_0x42ae0b[_0x11d8('0x4e')];}}}catch(_0x889471){utils[_0x11d8('0x19')](_0x889471[_0x11d8('0x28')]);}};
\ No newline at end of file
+var _0xb633=['endtime','duration','diffTime','billableseconds','error','localtwolinkedid','secondtransfererchannel','userfield','_attended','transfertargetchannel','musiconholdstop','musiconholdstartAt','mohtime','value','xmd-phone','\x22\x20<','variable','xmd-callerid-preview','xmd-callerid','xmd-queue','xmcs-queue','xmd-contactid','xmd-cdrtype','type','outboundrouteid','sipcallid','application','set','startsWith','appdata','toLowerCase','split','substring','lastIndexOf','includes','hangup','noop','gotoif','lastapplication','util','./utils','NO\x20ANSWER','FAILED','ANSWERED','info','format','CALL|%s|%s|%s|%s|%s|%s|%s|%s','uniqueid','accountcode','source','destination','callerid','then','CreateVoiceCallReport','request','newchannel','linkedid','OutgoingSpoolFailed','calleridnum','exten','context','channel','now','DOCUMENTATION','stack','newstate','isNil','channelstate','systemanswertime','transfer','destinationchannel','answertime','disposition','calleridname'];(function(_0x197d72,_0x19b07b){var _0x1e3507=function(_0x34e0b6){while(--_0x34e0b6){_0x197d72['push'](_0x197d72['shift']());}};_0x1e3507(++_0x19b07b);}(_0xb633,0x71));var _0x3b63=function(_0x458a58,_0x2710e4){_0x458a58=_0x458a58-0x0;var _0x2cdf63=_0xb633[_0x458a58];return _0x2cdf63;};'use strict';var _=require('lodash');var util=require(_0x3b63('0x0'));var utils=require(_0x3b63('0x1'));var dispositions=[_0x3b63('0x2'),_0x3b63('0x3'),_0x3b63('0x3'),_0x3b63('0x2'),'NO\x20ANSWER','NO\x20ANSWER',_0x3b63('0x4'),'BUSY',_0x3b63('0x3'),_0x3b63('0x3'),'FAILED'];var channels={};function writeDB(_0x126ae4){utils[_0x3b63('0x5')](util[_0x3b63('0x6')](_0x3b63('0x7'),_0x126ae4[_0x3b63('0x8')],_0x126ae4['channel'],_0x126ae4['type'],_0x126ae4[_0x3b63('0x9')],_0x126ae4[_0x3b63('0xa')],_0x126ae4[_0x3b63('0xb')],_0x126ae4[_0x3b63('0xc')],_0x126ae4['disposition']));if(_0x126ae4[_0x3b63('0x9')]){utils['getUserByInternal'](_0x126ae4['accountcode'])[_0x3b63('0xd')](function(_0x54d357){if(_0x54d357){_0x126ae4['UserId']=_0x54d357['id'];}utils['request'](_0x3b63('0xe'),_0x126ae4);});}else{utils[_0x3b63('0xf')](_0x3b63('0xe'),_0x126ae4);}if(channels[_0x126ae4['uniqueid']]){delete channels[_0x126ae4[_0x3b63('0x8')]];}}exports[_0x3b63('0x10')]=function(_0x5af8ab){try{if(_0x5af8ab['uniqueid']==_0x5af8ab[_0x3b63('0x11')]&&_0x5af8ab['channel']!=_0x3b63('0x12')){channels[_0x5af8ab[_0x3b63('0x8')]]={'uniqueid':_0x5af8ab[_0x3b63('0x8')],'accountcode':_0x5af8ab[_0x3b63('0x9')],'source':_0x5af8ab[_0x3b63('0x13')],'destination':_0x5af8ab[_0x3b63('0x14')],'destinationcontext':_0x5af8ab[_0x3b63('0x15')],'channel':_0x5af8ab[_0x3b63('0x16')],'starttime':utils[_0x3b63('0x17')](),'answertime':null,'systemanswertime':null,'mohtime':0x0,'disposition':'NO\x20ANSWER','amaflags':_0x3b63('0x18')};}}catch(_0x469343){utils['error'](_0x469343[_0x3b63('0x19')]);}};exports[_0x3b63('0x1a')]=function(_0x208abd){try{if(!_[_0x3b63('0x1b')](channels[_0x208abd[_0x3b63('0x8')]])&&_0x208abd[_0x3b63('0x1c')]==0x6){if(_[_0x3b63('0x1b')](channels[_0x208abd[_0x3b63('0x8')]][_0x3b63('0x1d')])){channels[_0x208abd['uniqueid']][_0x3b63('0x1d')]=utils[_0x3b63('0x17')]();}}else if(!_[_0x3b63('0x1b')](channels[_0x208abd[_0x3b63('0x11')]])&&_0x208abd[_0x3b63('0x1c')]==0x6&&_0x208abd[_0x3b63('0x15')]!=_0x3b63('0x1e')){channels[_0x208abd['linkedid']][_0x3b63('0x9')]=_0x208abd[_0x3b63('0x9')];channels[_0x208abd[_0x3b63('0x11')]][_0x3b63('0x1f')]=_0x208abd[_0x3b63('0x16')];if(_[_0x3b63('0x1b')](channels[_0x208abd[_0x3b63('0x11')]][_0x3b63('0x20')])){channels[_0x208abd[_0x3b63('0x11')]][_0x3b63('0x20')]=utils[_0x3b63('0x17')]();}channels[_0x208abd[_0x3b63('0x11')]][_0x3b63('0x21')]=dispositions[_['toNumber'](_0x208abd['channelstate'])]||_0x3b63('0x4');}}catch(_0x3ae2da){utils['error'](_0x3ae2da['stack']);}};exports['hangup']=function(_0x4ec729){try{if(!_[_0x3b63('0x1b')](channels[_0x4ec729['uniqueid']])){if(_[_0x3b63('0x1b')](channels[_0x4ec729[_0x3b63('0x8')]]['callerid'])){channels[_0x4ec729['uniqueid']][_0x3b63('0xc')]=_0x4ec729[_0x3b63('0x22')]+'\x20<'+_0x4ec729[_0x3b63('0x13')]+'>';}channels[_0x4ec729[_0x3b63('0x8')]][_0x3b63('0x23')]=utils[_0x3b63('0x17')]();channels[_0x4ec729[_0x3b63('0x8')]][_0x3b63('0x24')]=utils[_0x3b63('0x25')](channels[_0x4ec729[_0x3b63('0x8')]][_0x3b63('0x23')],channels[_0x4ec729['uniqueid']]['starttime']);channels[_0x4ec729[_0x3b63('0x8')]][_0x3b63('0x26')]=channels[_0x4ec729['uniqueid']][_0x3b63('0x20')]?utils[_0x3b63('0x25')](channels[_0x4ec729[_0x3b63('0x8')]][_0x3b63('0x23')],channels[_0x4ec729[_0x3b63('0x8')]][_0x3b63('0x20')]):0x0;writeDB(channels[_0x4ec729[_0x3b63('0x8')]]);}}catch(_0x119def){utils[_0x3b63('0x27')](_0x119def[_0x3b63('0x19')]);}};exports['attendedtransfer']=function(_0x876532){try{if(!_['isNil'](channels[_0x876532[_0x3b63('0x28')]])){if(channels[_0x876532[_0x3b63('0x28')]][_0x3b63('0x16')]==_0x876532['transfereechannel']){channels[_0x876532['localtwolinkedid']][_0x3b63('0x1f')]=_0x876532[_0x3b63('0x29')];channels[_0x876532[_0x3b63('0x28')]][_0x3b63('0x2a')]=_0x3b63('0x2b');}else if(channels[_0x876532['localtwolinkedid']][_0x3b63('0x16')]=_0x876532[_0x3b63('0x2c')]){channels[_0x876532['localtwolinkedid']][_0x3b63('0x1f')]=_0x876532['origtransfererchannel'];channels[_0x876532[_0x3b63('0x28')]]['userfield']=_0x3b63('0x2b');}}}catch(_0x261038){utils[_0x3b63('0x27')](_0x261038[_0x3b63('0x19')]);}};exports['musiconholdstart']=function(_0x25f9ba){try{if(!_[_0x3b63('0x1b')](channels[_0x25f9ba[_0x3b63('0x8')]])){channels[_0x25f9ba[_0x3b63('0x8')]]['musiconholdstartAt']=utils['now']();}}catch(_0x433578){utils[_0x3b63('0x27')](_0x433578[_0x3b63('0x19')]);}};exports[_0x3b63('0x2d')]=function(_0x472b67){try{if(!_[_0x3b63('0x1b')](channels[_0x472b67['uniqueid']])){if(!_[_0x3b63('0x1b')](channels[_0x472b67['uniqueid']][_0x3b63('0x2e')])){channels[_0x472b67['uniqueid']][_0x3b63('0x2f')]+=utils['diffTime'](utils[_0x3b63('0x17')](),channels[_0x472b67[_0x3b63('0x8')]]['musiconholdstartAt']);delete channels[_0x472b67[_0x3b63('0x8')]][_0x3b63('0x2e')];}}}catch(_0xf583dc){utils[_0x3b63('0x27')](_0xf583dc[_0x3b63('0x19')]);}};exports['varset']=function(_0x23d83e){try{if(!_['isNil'](channels[_0x23d83e[_0x3b63('0x8')]])){if(!_[_0x3b63('0x1b')](_0x23d83e['variable']['xmd-originatecalleridnum'])){channels[_0x23d83e[_0x3b63('0x8')]][_0x3b63('0xa')]=_0x23d83e[_0x3b63('0x30')];}if(!_[_0x3b63('0x1b')](_0x23d83e['variable'][_0x3b63('0x31')])){channels[_0x23d83e[_0x3b63('0x8')]][_0x3b63('0xb')]=_0x23d83e[_0x3b63('0x30')];channels[_0x23d83e[_0x3b63('0x8')]][_0x3b63('0xc')]='\x22'+_0x23d83e['value']+_0x3b63('0x32')+_0x23d83e[_0x3b63('0x30')]+'>';}if(!_[_0x3b63('0x1b')](_0x23d83e[_0x3b63('0x33')][_0x3b63('0x34')])||!_[_0x3b63('0x1b')](_0x23d83e[_0x3b63('0x33')][_0x3b63('0x35')])){channels[_0x23d83e[_0x3b63('0x8')]][_0x3b63('0xc')]=_0x23d83e['value'];}if(!_[_0x3b63('0x1b')](_0x23d83e[_0x3b63('0x33')][_0x3b63('0x36')])||!_['isNil'](_0x23d83e[_0x3b63('0x33')][_0x3b63('0x37')])){channels[_0x23d83e['uniqueid']]['lastapplication']='Queue';channels[_0x23d83e['uniqueid']]['lastdata']=_0x23d83e[_0x3b63('0x30')];channels[_0x23d83e[_0x3b63('0x8')]]['queue']=!![];}if(!_[_0x3b63('0x1b')](_0x23d83e['variable'][_0x3b63('0x38')])){channels[_0x23d83e['uniqueid']]['ContactId']=_0x23d83e[_0x3b63('0x30')];}if(!_[_0x3b63('0x1b')](_0x23d83e['variable'][_0x3b63('0x39')])){channels[_0x23d83e[_0x3b63('0x8')]][_0x3b63('0x3a')]=_0x23d83e[_0x3b63('0x30')];}if(!_[_0x3b63('0x1b')](_0x23d83e[_0x3b63('0x33')][_0x3b63('0x3b')])){channels[_0x23d83e[_0x3b63('0x8')]]['routeid']=_0x23d83e[_0x3b63('0x30')];}if(!_[_0x3b63('0x1b')](_0x23d83e[_0x3b63('0x33')][_0x3b63('0x3c')])){channels[_0x23d83e[_0x3b63('0x8')]][_0x3b63('0x3c')]=_0x23d83e['value'];}}}catch(_0x44b1e9){utils[_0x3b63('0x27')](_0x44b1e9[_0x3b63('0x19')]);}};exports['newexten']=function(_0xc9be8){try{if(!_[_0x3b63('0x1b')](channels[_0xc9be8[_0x3b63('0x8')]])){if(_0xc9be8[_0x3b63('0x3d')]['toLowerCase']()==_0x3b63('0x3e')&&_[_0x3b63('0x3f')](_0xc9be8[_0x3b63('0x40')][_0x3b63('0x41')](),'cdr')){var _0x50357c=_0xc9be8[_0x3b63('0x40')][_0x3b63('0x42')]('=');var _0x1af8fb=_0x50357c[0x0][_0x3b63('0x43')](_0x50357c[0x0][_0x3b63('0x44')]('(')+0x1,_0x50357c[0x0][_0x3b63('0x44')](')'));var _0x424635=_0x50357c[0x1];channels[_0xc9be8[_0x3b63('0x8')]][_0x1af8fb]=_0x424635;}if(!_[_0x3b63('0x45')]([_0x3b63('0x46'),_0x3b63('0x47'),'execif',_0x3b63('0x3e'),_0x3b63('0x48')],_0xc9be8[_0x3b63('0x3d')][_0x3b63('0x41')]())){channels[_0xc9be8[_0x3b63('0x8')]][_0x3b63('0x49')]=_0xc9be8[_0x3b63('0x3d')];channels[_0xc9be8['uniqueid']]['lastdata']=_0xc9be8['appdata'];}}}catch(_0x1efd6b){utils[_0x3b63('0x27')](_0x1efd6b[_0x3b63('0x19')]);}};
\ No newline at end of file
index 070f274..08ad168 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x84e7=['CLOSE','managerevent','lodash','connect','CONNECTED','shutdown','SHUTDOWN','fullybooted','info','FULLYBOOTED','error','close'];(function(_0x20337c,_0x1ba81e){var _0x54b577=function(_0x59e114){while(--_0x59e114){_0x20337c['push'](_0x20337c['shift']());}};_0x54b577(++_0x1ba81e);}(_0x84e7,0x122));var _0x784e=function(_0x483497,_0x33125d){_0x483497=_0x483497-0x0;var _0x18a4db=_0x84e7[_0x483497];return _0x18a4db;};'use strict';var utils=require('./utils');var _=require(_0x784e('0x0'));exports[_0x784e('0x1')]=function(){utils['info'](_0x784e('0x2'));};exports[_0x784e('0x3')]=function(){utils['info'](_0x784e('0x4'));};exports[_0x784e('0x5')]=function(){utils[_0x784e('0x6')](_0x784e('0x7'));};exports[_0x784e('0x8')]=function(_0x133296){utils['error'](_0x133296);};exports[_0x784e('0x9')]=function(){utils['info'](_0x784e('0xa'));};exports[_0x784e('0xb')]=function(_0x59a97d){};
\ No newline at end of file
+var _0x0e85=['info','CONNECTED','fullybooted','FULLYBOOTED','error','CLOSE','managerevent','./utils','lodash'];(function(_0x31f102,_0x20fd7e){var _0x111b20=function(_0xf95504){while(--_0xf95504){_0x31f102['push'](_0x31f102['shift']());}};_0x111b20(++_0x20fd7e);}(_0x0e85,0x7c));var _0x50e8=function(_0x138adb,_0x193fee){_0x138adb=_0x138adb-0x0;var _0x1b27f2=_0x0e85[_0x138adb];return _0x1b27f2;};'use strict';var utils=require(_0x50e8('0x0'));var _=require(_0x50e8('0x1'));exports['connect']=function(){utils[_0x50e8('0x2')](_0x50e8('0x3'));};exports['shutdown']=function(){utils['info']('SHUTDOWN');};exports[_0x50e8('0x4')]=function(){utils['info'](_0x50e8('0x5'));};exports[_0x50e8('0x6')]=function(_0xe3151e){utils[_0x50e8('0x6')](_0xe3151e);};exports['close']=function(){utils[_0x50e8('0x2')](_0x50e8('0x7'));};exports[_0x50e8('0x8')]=function(_0x988da0){};
\ No newline at end of file
index ef067f8..9f43e62 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa74b=['format','DIAL|%s|%s|%s|%s|%s|%s','calleridnum','connectedlinenum','dialstatus','CreateVoiceDialReport','uniqueid','newexten','application','toLowerCase','appdata','cdr(routeid)','split','error','stack','varset','isNil','variable','outboundrouteid','value','dialbegin','assign','starttime','now','lastevent','dialend','connect','hangup','duration','diffTime','endtime','holdtime','answertime','billableseconds','lodash','util','./utils','info'];(function(_0x37c665,_0x433805){var _0x1dab68=function(_0xfda154){while(--_0xfda154){_0x37c665['push'](_0x37c665['shift']());}};_0x1dab68(++_0x433805);}(_0xa74b,0x1ea));var _0xba74=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0xa74b[_0x122ef9];return _0x42fba0;};'use strict';var _=require(_0xba74('0x0'));var util=require(_0xba74('0x1'));var utils=require(_0xba74('0x2'));var dials={};function writeDB(_0x7c9f4e){utils[_0xba74('0x3')](util[_0xba74('0x4')](_0xba74('0x5'),_0x7c9f4e['uniqueid'],_0x7c9f4e['channel'],_0x7c9f4e['dialstring'],_0x7c9f4e[_0xba74('0x6')],_0x7c9f4e[_0xba74('0x7')],_0x7c9f4e[_0xba74('0x8')]));utils['request'](_0xba74('0x9'),_0x7c9f4e);delete dials[_0x7c9f4e[_0xba74('0xa')]];}exports[_0xba74('0xb')]=function(_0x13b057){try{if(_0x13b057[_0xba74('0xc')][_0xba74('0xd')]()=='set'&&_['startsWith'](_0x13b057[_0xba74('0xe')][_0xba74('0xd')](),_0xba74('0xf'))){var _0x1da319=_0x13b057[_0xba74('0xe')][_0xba74('0x10')]('=');dials[_0x13b057[_0xba74('0xa')]]={'routeId':_0x1da319[0x1]};}}catch(_0x4f7405){utils[_0xba74('0x11')](_0x4f7405[_0xba74('0x12')]);}};exports[_0xba74('0x13')]=function(_0x24d8e0){try{if(!_[_0xba74('0x14')](_0x24d8e0[_0xba74('0x15')][_0xba74('0x16')])){dials[_0x24d8e0['uniqueid']]={'routeId':_0x24d8e0[_0xba74('0x17')]};}}catch(_0x37e461){utils['error'](_0x37e461[_0xba74('0x12')]);}};exports[_0xba74('0x18')]=function(_0x3cce50){try{if(!_[_0xba74('0x14')](dials[_0x3cce50[_0xba74('0xa')]])){dials[_0x3cce50['uniqueid']]=_[_0xba74('0x19')](dials[_0x3cce50[_0xba74('0xa')]],_0x3cce50);dials[_0x3cce50[_0xba74('0xa')]][_0xba74('0x1a')]=utils[_0xba74('0x1b')]();dials[_0x3cce50[_0xba74('0xa')]][_0xba74('0x1c')]='called';}}catch(_0x488014){utils['error'](_0x488014['stack']);}};exports[_0xba74('0x1d')]=function(_0x165eae){try{if(!_[_0xba74('0x14')](dials[_0x165eae[_0xba74('0xa')]])){dials[_0x165eae[_0xba74('0xa')]]['dialstatus']=_0x165eae[_0xba74('0x8')];if(_0x165eae[_0xba74('0x8')]=='ANSWER'){dials[_0x165eae[_0xba74('0xa')]]=_['assign'](dials[_0x165eae[_0xba74('0xa')]],_0x165eae);dials[_0x165eae[_0xba74('0xa')]]['answertime']=utils[_0xba74('0x1b')]();dials[_0x165eae[_0xba74('0xa')]][_0xba74('0x1c')]=_0xba74('0x1e');}}}catch(_0x2dde4){utils[_0xba74('0x11')](_0x2dde4[_0xba74('0x12')]);}};exports[_0xba74('0x1f')]=function(_0xaa8e58){try{if(!_[_0xba74('0x14')](dials[_0xaa8e58['uniqueid']])){dials[_0xaa8e58[_0xba74('0xa')]]=_[_0xba74('0x19')](dials[_0xaa8e58[_0xba74('0xa')]],{'endtime':utils['now'](),'lastevent':'complete'});dials[_0xaa8e58[_0xba74('0xa')]][_0xba74('0x20')]=utils[_0xba74('0x21')](dials[_0xaa8e58['uniqueid']][_0xba74('0x22')],dials[_0xaa8e58[_0xba74('0xa')]][_0xba74('0x1a')]);dials[_0xaa8e58[_0xba74('0xa')]][_0xba74('0x23')]=utils['diffTime'](dials[_0xaa8e58[_0xba74('0xa')]][_0xba74('0x24')]||dials[_0xaa8e58[_0xba74('0xa')]][_0xba74('0x22')],dials[_0xaa8e58[_0xba74('0xa')]]['starttime']);dials[_0xaa8e58['uniqueid']][_0xba74('0x25')]=dials[_0xaa8e58['uniqueid']][_0xba74('0x24')]?utils[_0xba74('0x21')](dials[_0xaa8e58[_0xba74('0xa')]][_0xba74('0x22')],dials[_0xaa8e58[_0xba74('0xa')]][_0xba74('0x24')]):0x0;writeDB(dials[_0xaa8e58[_0xba74('0xa')]]);}}catch(_0x571ef3){utils[_0xba74('0x11')](_0x571ef3[_0xba74('0x12')]);}};
\ No newline at end of file
+var _0x3295=['connect','hangup','complete','duration','diffTime','endtime','holdtime','billableseconds','lodash','util','info','DIAL|%s|%s|%s|%s|%s|%s','uniqueid','dialstring','calleridnum','connectedlinenum','request','CreateVoiceDialReport','toLowerCase','set','startsWith','appdata','split','error','stack','varset','variable','outboundrouteid','value','dialbegin','isNil','assign','starttime','lastevent','dialend','dialstatus','ANSWER','answertime','now'];(function(_0x40a045,_0x516f0e){var _0x1a687c=function(_0x48c9fe){while(--_0x48c9fe){_0x40a045['push'](_0x40a045['shift']());}};_0x1a687c(++_0x516f0e);}(_0x3295,0x167));var _0x5329=function(_0x5d80de,_0x2cf15d){_0x5d80de=_0x5d80de-0x0;var _0x1c7556=_0x3295[_0x5d80de];return _0x1c7556;};'use strict';var _=require(_0x5329('0x0'));var util=require(_0x5329('0x1'));var utils=require('./utils');var dials={};function writeDB(_0x1dc502){utils[_0x5329('0x2')](util['format'](_0x5329('0x3'),_0x1dc502[_0x5329('0x4')],_0x1dc502['channel'],_0x1dc502[_0x5329('0x5')],_0x1dc502[_0x5329('0x6')],_0x1dc502[_0x5329('0x7')],_0x1dc502['dialstatus']));utils[_0x5329('0x8')](_0x5329('0x9'),_0x1dc502);delete dials[_0x1dc502[_0x5329('0x4')]];}exports['newexten']=function(_0x40800a){try{if(_0x40800a['application'][_0x5329('0xa')]()==_0x5329('0xb')&&_[_0x5329('0xc')](_0x40800a[_0x5329('0xd')][_0x5329('0xa')](),'cdr(routeid)')){var _0x517152=_0x40800a[_0x5329('0xd')][_0x5329('0xe')]('=');dials[_0x40800a[_0x5329('0x4')]]={'routeId':_0x517152[0x1]};}}catch(_0x4e8b27){utils[_0x5329('0xf')](_0x4e8b27[_0x5329('0x10')]);}};exports[_0x5329('0x11')]=function(_0x21a418){try{if(!_['isNil'](_0x21a418[_0x5329('0x12')][_0x5329('0x13')])){dials[_0x21a418[_0x5329('0x4')]]={'routeId':_0x21a418[_0x5329('0x14')]};}}catch(_0x30f8ed){utils['error'](_0x30f8ed[_0x5329('0x10')]);}};exports[_0x5329('0x15')]=function(_0x384d15){try{if(!_[_0x5329('0x16')](dials[_0x384d15[_0x5329('0x4')]])){dials[_0x384d15['uniqueid']]=_[_0x5329('0x17')](dials[_0x384d15[_0x5329('0x4')]],_0x384d15);dials[_0x384d15['uniqueid']][_0x5329('0x18')]=utils['now']();dials[_0x384d15['uniqueid']][_0x5329('0x19')]='called';}}catch(_0x4c2bd3){utils['error'](_0x4c2bd3['stack']);}};exports[_0x5329('0x1a')]=function(_0x1c5cf){try{if(!_[_0x5329('0x16')](dials[_0x1c5cf['uniqueid']])){dials[_0x1c5cf[_0x5329('0x4')]]['dialstatus']=_0x1c5cf[_0x5329('0x1b')];if(_0x1c5cf[_0x5329('0x1b')]==_0x5329('0x1c')){dials[_0x1c5cf['uniqueid']]=_[_0x5329('0x17')](dials[_0x1c5cf[_0x5329('0x4')]],_0x1c5cf);dials[_0x1c5cf[_0x5329('0x4')]][_0x5329('0x1d')]=utils[_0x5329('0x1e')]();dials[_0x1c5cf[_0x5329('0x4')]]['lastevent']=_0x5329('0x1f');}}}catch(_0xcb972d){utils[_0x5329('0xf')](_0xcb972d[_0x5329('0x10')]);}};exports[_0x5329('0x20')]=function(_0x127698){try{if(!_[_0x5329('0x16')](dials[_0x127698[_0x5329('0x4')]])){dials[_0x127698[_0x5329('0x4')]]=_[_0x5329('0x17')](dials[_0x127698[_0x5329('0x4')]],{'endtime':utils['now'](),'lastevent':_0x5329('0x21')});dials[_0x127698[_0x5329('0x4')]][_0x5329('0x22')]=utils[_0x5329('0x23')](dials[_0x127698[_0x5329('0x4')]][_0x5329('0x24')],dials[_0x127698[_0x5329('0x4')]]['starttime']);dials[_0x127698[_0x5329('0x4')]][_0x5329('0x25')]=utils[_0x5329('0x23')](dials[_0x127698[_0x5329('0x4')]][_0x5329('0x1d')]||dials[_0x127698[_0x5329('0x4')]]['endtime'],dials[_0x127698[_0x5329('0x4')]][_0x5329('0x18')]);dials[_0x127698[_0x5329('0x4')]][_0x5329('0x26')]=dials[_0x127698[_0x5329('0x4')]]['answertime']?utils['diffTime'](dials[_0x127698[_0x5329('0x4')]][_0x5329('0x24')],dials[_0x127698[_0x5329('0x4')]][_0x5329('0x1d')]):0x0;writeDB(dials[_0x127698['uniqueid']]);}}catch(_0x617820){utils[_0x5329('0xf')](_0x617820[_0x5329('0x10')]);}};
\ No newline at end of file
index 686866c..c7b4293 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x628f=['./dials.controller','./transfers.controller','./core.controller','connect','shutdown','fullybooted','error','close','managerevent','devicestatechange','agentcalled','agentringnoanswer','agentconnect','agentcomplete','queuecallerabandon','queuecallerjoin','queuecallerleave','musiconholdstart','musiconholdstop','newstate','hangup','cdr','blindtransfer','attendedtransfer','varset','newexten','newchannel','dialbegin','dialend','./utils','asterisk','username','xdr','info','XDR\x20DISABLED','./calls.controller','./members.controller'];(function(_0x5a58db,_0x2d7f41){var _0x42dd9a=function(_0x52d814){while(--_0x52d814){_0x5a58db['push'](_0x5a58db['shift']());}};_0x42dd9a(++_0x2d7f41);}(_0x628f,0x67));var _0xf628=function(_0x226f94,_0x111cb2){_0x226f94=_0x226f94-0x0;var _0xb4249f=_0x628f[_0x226f94];return _0xb4249f;};var AsteriskManager=require('asterisk-manager');var config=require('../../config/environment');var utils=require(_0xf628('0x0'));var ami=new AsteriskManager(config[_0xf628('0x1')]['port'],config[_0xf628('0x1')]['ip'],config[_0xf628('0x1')][_0xf628('0x2')],config[_0xf628('0x1')]['password'],!![]);ami['keepConnected']();if(config[_0xf628('0x3')]&&config[_0xf628('0x3')]['disabled']){utils[_0xf628('0x4')](_0xf628('0x5'));}else{var agents=require('./agents.controller');var calls=require(_0xf628('0x6'));var queues=require('./queues.controller');var recordings=require('./recordings.controller');var members=require(_0xf628('0x7'));var dials=require(_0xf628('0x8'));var transfers=require(_0xf628('0x9'));var core=require(_0xf628('0xa'));ami['on'](_0xf628('0xb'),core[_0xf628('0xb')]);ami['on'](_0xf628('0xc'),core[_0xf628('0xc')]);ami['on']('fullybooted',core[_0xf628('0xd')]);ami['on'](_0xf628('0xe'),core[_0xf628('0xe')]);ami['on'](_0xf628('0xf'),core[_0xf628('0xf')]);ami['on'](_0xf628('0x10'),core[_0xf628('0x10')]);ami['on'](_0xf628('0x11'),function(_0x1f0430){try{members[_0xf628('0x11')](_0x1f0430);}catch(_0x13f174){utils[_0xf628('0xe')](_0x13f174);}});ami['on'](_0xf628('0x12'),function(_0x2aa4b5){try{agents[_0xf628('0x12')](_0x2aa4b5);}catch(_0x5bc933){utils[_0xf628('0xe')](_0x5bc933);}});ami['on'](_0xf628('0x13'),function(_0x36cfc2){try{agents[_0xf628('0x13')](_0x36cfc2);}catch(_0x2e376e){utils[_0xf628('0xe')](_0x2e376e);}});ami['on'](_0xf628('0x14'),function(_0x59e482){try{agents['agentconnect'](_0x59e482);queues[_0xf628('0x14')](_0x59e482);}catch(_0x272eef){utils[_0xf628('0xe')](_0x272eef);}});ami['on'](_0xf628('0x15'),function(_0x36d6f0){try{agents[_0xf628('0x15')](_0x36d6f0);queues[_0xf628('0x15')](_0x36d6f0);members[_0xf628('0x15')](_0x36d6f0);}catch(_0x1c771a){utils['error'](_0x1c771a);}});ami['on'](_0xf628('0x16'),function(_0x652962){try{agents[_0xf628('0x16')](_0x652962);queues[_0xf628('0x16')](_0x652962);}catch(_0x13208b){utils[_0xf628('0xe')](_0x13208b);}});ami['on']('queuecallerjoin',function(_0x25af17){try{queues[_0xf628('0x17')](_0x25af17);recordings[_0xf628('0x17')](_0x25af17);}catch(_0x353f33){utils[_0xf628('0xe')](_0x353f33);}});ami['on'](_0xf628('0x18'),function(_0x25965e){try{queues[_0xf628('0x18')](_0x25965e);}catch(_0x42eb62){utils[_0xf628('0xe')](_0x42eb62);}});ami['on'](_0xf628('0x19'),function(_0x26f9fa){try{queues[_0xf628('0x19')](_0x26f9fa);calls[_0xf628('0x19')](_0x26f9fa);}catch(_0x27846d){utils['error'](_0x27846d);}});ami['on']('musiconholdstop',function(_0x457e16){try{queues[_0xf628('0x1a')](_0x457e16);calls['musiconholdstop'](_0x457e16);}catch(_0x38c5bc){utils[_0xf628('0xe')](_0x38c5bc);}});ami['on']('newstate',function(_0x894d43){try{calls['newstate'](_0x894d43);recordings[_0xf628('0x1b')](_0x894d43);}catch(_0x5f53b6){utils['error'](_0x5f53b6);}});ami['on'](_0xf628('0x1c'),function(_0x180596){try{calls[_0xf628('0x1c')](_0x180596);recordings[_0xf628('0x1c')](_0x180596);dials['hangup'](_0x180596);agents[_0xf628('0x1c')](_0x180596);queues[_0xf628('0x1c')](_0x180596);}catch(_0x34dbf0){utils[_0xf628('0xe')](_0x34dbf0);}});ami['on'](_0xf628('0x1d'),function(_0x1d063e){try{members[_0xf628('0x1d')](_0x1d063e);}catch(_0x3822e9){utils[_0xf628('0xe')](_0x3822e9);}});ami['on'](_0xf628('0x1e'),function(_0x58b320){try{queues[_0xf628('0x1e')](_0x58b320);agents[_0xf628('0x1e')](_0x58b320);transfers[_0xf628('0x1e')](_0x58b320);}catch(_0x28bfcc){utils[_0xf628('0xe')](_0x28bfcc);}});ami['on'](_0xf628('0x1f'),function(_0x3ff148){try{queues['attendedtransfer'](_0x3ff148);transfers[_0xf628('0x1f')](_0x3ff148);agents[_0xf628('0x1f')](_0x3ff148);calls['attendedtransfer'](_0x3ff148);}catch(_0x37bfe2){utils[_0xf628('0xe')](_0x37bfe2);}});ami['on'](_0xf628('0x20'),function(_0x3df2e0){try{queues[_0xf628('0x20')](_0x3df2e0);recordings[_0xf628('0x20')](_0x3df2e0);calls[_0xf628('0x20')](_0x3df2e0);dials[_0xf628('0x20')](_0x3df2e0);}catch(_0x4e4b52){utils[_0xf628('0xe')](_0x4e4b52);}});ami['on'](_0xf628('0x21'),function(_0x3b5884){try{calls[_0xf628('0x21')](_0x3b5884);recordings['newexten'](_0x3b5884);dials[_0xf628('0x21')](_0x3b5884);}catch(_0x34837a){utils[_0xf628('0xe')](_0x34837a);}});ami['on'](_0xf628('0x22'),function(_0x578d9b){try{calls[_0xf628('0x22')](_0x578d9b);recordings[_0xf628('0x22')](_0x578d9b);}catch(_0x2b94c8){utils[_0xf628('0xe')](_0x2b94c8);}});ami['on']('dialbegin',function(_0x3e99fe){try{dials[_0xf628('0x23')](_0x3e99fe);}catch(_0x3dee25){utils[_0xf628('0xe')](_0x3dee25);}});ami['on'](_0xf628('0x24'),function(_0x2c9c74){try{dials[_0xf628('0x24')](_0x2c9c74);}catch(_0x2d3fda){utils[_0xf628('0xe')](_0x2d3fda);}});}
\ No newline at end of file
+var _0x08f5=['managerevent','devicestatechange','agentcalled','agentringnoanswer','agentconnect','agentcomplete','queuecallerabandon','queuecallerjoin','queuecallerleave','musiconholdstart','musiconholdstop','newstate','hangup','cdr','blindtransfer','attendedtransfer','varset','newexten','newchannel','dialbegin','dialend','asterisk-manager','../../config/environment','./utils','asterisk','port','password','keepConnected','xdr','disabled','XDR\x20DISABLED','./agents.controller','./recordings.controller','./members.controller','./transfers.controller','./core.controller','connect','shutdown','fullybooted','error','close'];(function(_0x2dea24,_0x2fc021){var _0x309d58=function(_0x2eb89f){while(--_0x2eb89f){_0x2dea24['push'](_0x2dea24['shift']());}};_0x309d58(++_0x2fc021);}(_0x08f5,0x10b));var _0x508f=function(_0x494a42,_0x1f2103){_0x494a42=_0x494a42-0x0;var _0x254792=_0x08f5[_0x494a42];return _0x254792;};var AsteriskManager=require(_0x508f('0x0'));var config=require(_0x508f('0x1'));var utils=require(_0x508f('0x2'));var ami=new AsteriskManager(config[_0x508f('0x3')][_0x508f('0x4')],config[_0x508f('0x3')]['ip'],config['asterisk']['username'],config['asterisk'][_0x508f('0x5')],!![]);ami[_0x508f('0x6')]();if(config[_0x508f('0x7')]&&config[_0x508f('0x7')][_0x508f('0x8')]){utils['info'](_0x508f('0x9'));}else{var agents=require(_0x508f('0xa'));var calls=require('./calls.controller');var queues=require('./queues.controller');var recordings=require(_0x508f('0xb'));var members=require(_0x508f('0xc'));var dials=require('./dials.controller');var transfers=require(_0x508f('0xd'));var core=require(_0x508f('0xe'));ami['on'](_0x508f('0xf'),core['connect']);ami['on'](_0x508f('0x10'),core[_0x508f('0x10')]);ami['on'](_0x508f('0x11'),core[_0x508f('0x11')]);ami['on']('error',core[_0x508f('0x12')]);ami['on'](_0x508f('0x13'),core['close']);ami['on']('managerevent',core[_0x508f('0x14')]);ami['on'](_0x508f('0x15'),function(_0x4bf598){try{members[_0x508f('0x15')](_0x4bf598);}catch(_0x4604ee){utils[_0x508f('0x12')](_0x4604ee);}});ami['on'](_0x508f('0x16'),function(_0x480d25){try{agents['agentcalled'](_0x480d25);}catch(_0x109f7e){utils[_0x508f('0x12')](_0x109f7e);}});ami['on'](_0x508f('0x17'),function(_0x2c9117){try{agents[_0x508f('0x17')](_0x2c9117);}catch(_0x429b8e){utils['error'](_0x429b8e);}});ami['on'](_0x508f('0x18'),function(_0x241037){try{agents[_0x508f('0x18')](_0x241037);queues[_0x508f('0x18')](_0x241037);}catch(_0x540efe){utils[_0x508f('0x12')](_0x540efe);}});ami['on'](_0x508f('0x19'),function(_0x4e5458){try{agents[_0x508f('0x19')](_0x4e5458);queues[_0x508f('0x19')](_0x4e5458);members['agentcomplete'](_0x4e5458);}catch(_0x56cdd4){utils[_0x508f('0x12')](_0x56cdd4);}});ami['on'](_0x508f('0x1a'),function(_0x5cc521){try{agents[_0x508f('0x1a')](_0x5cc521);queues[_0x508f('0x1a')](_0x5cc521);}catch(_0x5b261f){utils[_0x508f('0x12')](_0x5b261f);}});ami['on']('queuecallerjoin',function(_0x23a81c){try{queues[_0x508f('0x1b')](_0x23a81c);recordings[_0x508f('0x1b')](_0x23a81c);}catch(_0xee55a4){utils[_0x508f('0x12')](_0xee55a4);}});ami['on']('queuecallerleave',function(_0x36b124){try{queues[_0x508f('0x1c')](_0x36b124);}catch(_0x456ad2){utils[_0x508f('0x12')](_0x456ad2);}});ami['on']('musiconholdstart',function(_0x3eccb4){try{queues[_0x508f('0x1d')](_0x3eccb4);calls[_0x508f('0x1d')](_0x3eccb4);}catch(_0x1aecc1){utils[_0x508f('0x12')](_0x1aecc1);}});ami['on'](_0x508f('0x1e'),function(_0x5bd698){try{queues[_0x508f('0x1e')](_0x5bd698);calls[_0x508f('0x1e')](_0x5bd698);}catch(_0x265aa9){utils[_0x508f('0x12')](_0x265aa9);}});ami['on'](_0x508f('0x1f'),function(_0x95fde8){try{calls[_0x508f('0x1f')](_0x95fde8);recordings[_0x508f('0x1f')](_0x95fde8);}catch(_0x570ff1){utils[_0x508f('0x12')](_0x570ff1);}});ami['on'](_0x508f('0x20'),function(_0x28298f){try{calls['hangup'](_0x28298f);recordings[_0x508f('0x20')](_0x28298f);dials['hangup'](_0x28298f);agents['hangup'](_0x28298f);queues[_0x508f('0x20')](_0x28298f);}catch(_0x5c6bdb){utils[_0x508f('0x12')](_0x5c6bdb);}});ami['on'](_0x508f('0x21'),function(_0x5136ba){try{members[_0x508f('0x21')](_0x5136ba);}catch(_0x1e14f4){utils[_0x508f('0x12')](_0x1e14f4);}});ami['on'](_0x508f('0x22'),function(_0x318d55){try{queues[_0x508f('0x22')](_0x318d55);agents[_0x508f('0x22')](_0x318d55);transfers[_0x508f('0x22')](_0x318d55);}catch(_0x3e59bd){utils[_0x508f('0x12')](_0x3e59bd);}});ami['on'](_0x508f('0x23'),function(_0x1934ce){try{queues['attendedtransfer'](_0x1934ce);transfers[_0x508f('0x23')](_0x1934ce);agents[_0x508f('0x23')](_0x1934ce);calls[_0x508f('0x23')](_0x1934ce);}catch(_0x2c9bf8){utils[_0x508f('0x12')](_0x2c9bf8);}});ami['on'](_0x508f('0x24'),function(_0x1b54e2){try{queues[_0x508f('0x24')](_0x1b54e2);recordings['varset'](_0x1b54e2);calls['varset'](_0x1b54e2);dials[_0x508f('0x24')](_0x1b54e2);}catch(_0x6da5dd){utils['error'](_0x6da5dd);}});ami['on'](_0x508f('0x25'),function(_0x51b889){try{calls[_0x508f('0x25')](_0x51b889);recordings[_0x508f('0x25')](_0x51b889);dials[_0x508f('0x25')](_0x51b889);}catch(_0x53c0f3){utils[_0x508f('0x12')](_0x53c0f3);}});ami['on'](_0x508f('0x26'),function(_0x48e034){try{calls[_0x508f('0x26')](_0x48e034);recordings[_0x508f('0x26')](_0x48e034);}catch(_0x40244d){utils[_0x508f('0x12')](_0x40244d);}});ami['on'](_0x508f('0x27'),function(_0x2e5045){try{dials[_0x508f('0x27')](_0x2e5045);}catch(_0x26ba31){utils[_0x508f('0x12')](_0x26ba31);}});ami['on']('dialend',function(_0x3fc63d){try{dials[_0x508f('0x28')](_0x3fc63d);}catch(_0x462ee9){utils['error'](_0x462ee9);}});}
\ No newline at end of file
index a52589e..6b8c298 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x67c1=['internal','request','CreateMemberReport','split','catch','some','startsWith','devicestatechange','BUSY','device','voice','agent','NOT_INUSE','exitAt','duration','diffTime','enterAt','uniqueid','agentcomplete','isNil','assign','queue','data1','type','source','destination','destinationchannel','util','./utils','Queue:','info','format','interface','channel','data2','membername','then','name'];(function(_0x2b5947,_0x2383a6){var _0x3080a3=function(_0x2beb17){while(--_0x2beb17){_0x2b5947['push'](_0x2b5947['shift']());}};_0x3080a3(++_0x2383a6);}(_0x67c1,0x125));var _0x167c=function(_0x1e65f4,_0x102f5c){_0x1e65f4=_0x1e65f4-0x0;var _0x41064e=_0x67c1[_0x1e65f4];return _0x41064e;};'use strict';var _=require('lodash');var util=require(_0x167c('0x0'));var utils=require(_0x167c('0x1'));var members={};var exclude=['Local/_attended@transfer',_0x167c('0x2')];function writeDB(_0x212549){utils[_0x167c('0x3')](util[_0x167c('0x4')]('MEMBER|%s|%s|%s|%s|%s|%s',_0x212549['uniqueid'],_0x212549[_0x167c('0x5')],_0x212549[_0x167c('0x6')],_0x212549[_0x167c('0x7')],_0x212549[_0x167c('0x8')],_0x212549['type']));if(_0x212549[_0x167c('0x5')]){utils['getUserByInterface'](_0x212549[_0x167c('0x5')])[_0x167c('0x9')](function(_0x17b7ef){if(_0x17b7ef){_0x212549[_0x167c('0x8')]=_0x17b7ef[_0x167c('0xa')];_0x212549[_0x167c('0xb')]=_0x17b7ef[_0x167c('0xb')];utils[_0x167c('0xc')](_0x167c('0xd'),_0x212549);}else{utils['getUserByName'](_0x212549[_0x167c('0x5')][_0x167c('0xe')]('/')[0x1])[_0x167c('0x9')](function(_0x1a9cda){if(_0x1a9cda){_0x212549[_0x167c('0x8')]=_0x1a9cda['name'];_0x212549[_0x167c('0xb')]=_0x1a9cda[_0x167c('0xb')];utils[_0x167c('0xc')](_0x167c('0xd'),_0x212549);}});}})[_0x167c('0xf')](function(_0x2ff297){utils['error'](_0x2ff297);});}delete members[_0x212549[_0x167c('0x5')]];}function startsWith(_0x4f4e03,_0x23456c){return _[_0x167c('0x10')](_0x4f4e03,function(_0x4d46ee){return _[_0x167c('0x11')](_0x23456c,_0x4d46ee);});}exports[_0x167c('0x12')]=function(_0xb84efd){switch(_0xb84efd['state']){case'INUSE':case _0x167c('0x13'):if(!startsWith(exclude,_0xb84efd[_0x167c('0x14')])){members[_0xb84efd[_0x167c('0x14')]]={'channel':_0x167c('0x15'),'interface':_0xb84efd[_0x167c('0x14')],'type':'TALKING','enterAt':utils['now'](),'role':_0x167c('0x16')};}break;case _0x167c('0x17'):if(!_['isNil'](members[_0xb84efd[_0x167c('0x14')]])){members[_0xb84efd['device']][_0x167c('0x18')]=utils['now']();members[_0xb84efd[_0x167c('0x14')]][_0x167c('0x19')]=utils[_0x167c('0x1a')](members[_0xb84efd['device']][_0x167c('0x18')],members[_0xb84efd['device']][_0x167c('0x1b')]);if(members[_0xb84efd['device']][_0x167c('0x1c')]){writeDB(members[_0xb84efd[_0x167c('0x14')]]);}}default:break;}};exports[_0x167c('0x1d')]=function(_0x5d1bcb){if(!_[_0x167c('0x1e')](members[_0x5d1bcb[_0x167c('0x5')]])){members[_0x5d1bcb[_0x167c('0x5')]]=_[_0x167c('0x1f')](members[_0x5d1bcb[_0x167c('0x5')]],{'data4':_0x5d1bcb[_0x167c('0x20')],'uniqueid':_0x5d1bcb[_0x167c('0x1c')]});}};exports['cdr']=function(_0x588134){if(_0x588134[_0x167c('0x6')]){var _0x515186=_0x588134[_0x167c('0x6')][_0x167c('0xe')]('-')[0x0];if(!_[_0x167c('0x1e')](members[_0x515186])){members[_0x515186]=_[_0x167c('0x1f')](members[_0x515186],{'data1':members[_0x515186][_0x167c('0x21')]||_0x588134[_0x167c('0x22')],'data2':members[_0x515186]['data2']||_0x588134[_0x167c('0x23')],'data3':members[_0x515186]['data3']||_0x588134[_0x167c('0x24')],'uniqueid':members[_0x515186][_0x167c('0x1c')]||_0x588134[_0x167c('0x1c')]});if(members[_0x515186][_0x167c('0x18')]){writeDB(members[_0x515186]);}}}if(_0x588134[_0x167c('0x25')]){var _0x54a0d0=_0x588134[_0x167c('0x25')]['split']('-')[0x0];if(!_[_0x167c('0x1e')](members[_0x54a0d0])){members[_0x54a0d0]=_[_0x167c('0x1f')](members[_0x54a0d0],{'data1':members[_0x54a0d0][_0x167c('0x21')]||_0x588134[_0x167c('0x22')],'data2':members[_0x54a0d0][_0x167c('0x7')]||_0x588134[_0x167c('0x23')],'data3':members[_0x54a0d0]['data3']||_0x588134[_0x167c('0x24')],'uniqueid':members[_0x54a0d0][_0x167c('0x1c')]||_0x588134['uniqueid']});if(members[_0x54a0d0]['exitAt']){writeDB(members[_0x54a0d0]);}}}};
\ No newline at end of file
+var _0x2fd7=['queue','cdr','data1','data3','destination','destinationchannel','util','./utils','Local/_attended@transfer','Queue:','info','MEMBER|%s|%s|%s|%s|%s|%s','uniqueid','interface','channel','data2','membername','type','getUserByInterface','name','internal','request','getUserByName','split','then','CreateMemberReport','catch','some','startsWith','devicestatechange','INUSE','BUSY','voice','TALKING','now','agent','NOT_INUSE','isNil','device','duration','diffTime','exitAt','enterAt','assign'];(function(_0x5c7ce5,_0x4ebac5){var _0xc2b53e=function(_0x393978){while(--_0x393978){_0x5c7ce5['push'](_0x5c7ce5['shift']());}};_0xc2b53e(++_0x4ebac5);}(_0x2fd7,0xe2));var _0x72fd=function(_0xd8490a,_0x4e0b15){_0xd8490a=_0xd8490a-0x0;var _0x3b61f5=_0x2fd7[_0xd8490a];return _0x3b61f5;};'use strict';var _=require('lodash');var util=require(_0x72fd('0x0'));var utils=require(_0x72fd('0x1'));var members={};var exclude=[_0x72fd('0x2'),_0x72fd('0x3')];function writeDB(_0x11f22c){utils[_0x72fd('0x4')](util['format'](_0x72fd('0x5'),_0x11f22c[_0x72fd('0x6')],_0x11f22c[_0x72fd('0x7')],_0x11f22c[_0x72fd('0x8')],_0x11f22c[_0x72fd('0x9')],_0x11f22c[_0x72fd('0xa')],_0x11f22c[_0x72fd('0xb')]));if(_0x11f22c[_0x72fd('0x7')]){utils[_0x72fd('0xc')](_0x11f22c[_0x72fd('0x7')])['then'](function(_0x33f66f){if(_0x33f66f){_0x11f22c[_0x72fd('0xa')]=_0x33f66f[_0x72fd('0xd')];_0x11f22c[_0x72fd('0xe')]=_0x33f66f[_0x72fd('0xe')];utils[_0x72fd('0xf')]('CreateMemberReport',_0x11f22c);}else{utils[_0x72fd('0x10')](_0x11f22c[_0x72fd('0x7')][_0x72fd('0x11')]('/')[0x1])[_0x72fd('0x12')](function(_0x1c1f7c){if(_0x1c1f7c){_0x11f22c[_0x72fd('0xa')]=_0x1c1f7c[_0x72fd('0xd')];_0x11f22c[_0x72fd('0xe')]=_0x1c1f7c[_0x72fd('0xe')];utils[_0x72fd('0xf')](_0x72fd('0x13'),_0x11f22c);}});}})[_0x72fd('0x14')](function(_0x3f74fc){utils['error'](_0x3f74fc);});}delete members[_0x11f22c[_0x72fd('0x7')]];}function startsWith(_0x2ec0e6,_0x31cfe8){return _[_0x72fd('0x15')](_0x2ec0e6,function(_0x2cf22d){return _[_0x72fd('0x16')](_0x31cfe8,_0x2cf22d);});}exports[_0x72fd('0x17')]=function(_0xa62f6b){switch(_0xa62f6b['state']){case _0x72fd('0x18'):case _0x72fd('0x19'):if(!startsWith(exclude,_0xa62f6b['device'])){members[_0xa62f6b['device']]={'channel':_0x72fd('0x1a'),'interface':_0xa62f6b['device'],'type':_0x72fd('0x1b'),'enterAt':utils[_0x72fd('0x1c')](),'role':_0x72fd('0x1d')};}break;case _0x72fd('0x1e'):if(!_[_0x72fd('0x1f')](members[_0xa62f6b['device']])){members[_0xa62f6b[_0x72fd('0x20')]]['exitAt']=utils[_0x72fd('0x1c')]();members[_0xa62f6b['device']][_0x72fd('0x21')]=utils[_0x72fd('0x22')](members[_0xa62f6b[_0x72fd('0x20')]][_0x72fd('0x23')],members[_0xa62f6b[_0x72fd('0x20')]][_0x72fd('0x24')]);if(members[_0xa62f6b[_0x72fd('0x20')]]['uniqueid']){writeDB(members[_0xa62f6b[_0x72fd('0x20')]]);}}default:break;}};exports['agentcomplete']=function(_0x14bf11){if(!_[_0x72fd('0x1f')](members[_0x14bf11[_0x72fd('0x7')]])){members[_0x14bf11[_0x72fd('0x7')]]=_[_0x72fd('0x25')](members[_0x14bf11[_0x72fd('0x7')]],{'data4':_0x14bf11[_0x72fd('0x26')],'uniqueid':_0x14bf11[_0x72fd('0x6')]});}};exports[_0x72fd('0x27')]=function(_0x2efe8b){if(_0x2efe8b[_0x72fd('0x8')]){var _0x133269=_0x2efe8b[_0x72fd('0x8')][_0x72fd('0x11')]('-')[0x0];if(!_[_0x72fd('0x1f')](members[_0x133269])){members[_0x133269]=_[_0x72fd('0x25')](members[_0x133269],{'data1':members[_0x133269][_0x72fd('0x28')]||_0x2efe8b['type'],'data2':members[_0x133269][_0x72fd('0x9')]||_0x2efe8b['source'],'data3':members[_0x133269][_0x72fd('0x29')]||_0x2efe8b[_0x72fd('0x2a')],'uniqueid':members[_0x133269][_0x72fd('0x6')]||_0x2efe8b[_0x72fd('0x6')]});if(members[_0x133269][_0x72fd('0x23')]){writeDB(members[_0x133269]);}}}if(_0x2efe8b[_0x72fd('0x2b')]){var _0x203690=_0x2efe8b[_0x72fd('0x2b')][_0x72fd('0x11')]('-')[0x0];if(!_[_0x72fd('0x1f')](members[_0x203690])){members[_0x203690]=_[_0x72fd('0x25')](members[_0x203690],{'data1':members[_0x203690][_0x72fd('0x28')]||_0x2efe8b[_0x72fd('0xb')],'data2':members[_0x203690]['data2']||_0x2efe8b['source'],'data3':members[_0x203690]['data3']||_0x2efe8b['destination'],'uniqueid':members[_0x203690]['uniqueid']||_0x2efe8b[_0x72fd('0x6')]});if(members[_0x203690]['exitAt']){writeDB(members[_0x203690]);}}}};
\ No newline at end of file
index 281f719..a711922 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x42f6=['queuecallerabandonAt','queuecallerexitAt','value','toUpperCase','queueposition','queuecallerleave','holdtime','diffTime','queuecallerjoinAt','count','connectedlinenum','connectedlinename','assigned','destaccountcode','membername','transfer','COMPLETEDBY','reason','transfereeuniqueid','transfertype','BLIND','transferexten','extension','transferuniqueid','BLINDTRANSFER','attendedtransfer','origtransfererlinkedid','secondtransfererlinkedid','ATTENDED','origtransfererexten','ATTENDEDTRANSFER','transfereelinkedid','clone','transfertargetuniqueid','calleridname','mohtime','secondtransfereruniqueid','secondtransfererexten','transfertargetlinkedid','error','stack','musiconholdstart','musiconholdstartAt','musiconholdstop','lodash','util','./utils','info','format','channel','queue','lastAssignedTo','calleridnum','accountcode','queuecallerexitreason','getVoiceQueueByName','then','type','request','CreateVoiceQueueReport','transfereduniqueid','uniqueid','queuecallerjoin','assign','position','now','hangup','isNil','queuecallerleaveAt','queuecallerabandon','queuecallerexit','queuecallercomplete','queuecallercompleteAt','COMPLETEDBYAGENT','queuecallerenterreason','varset','variable','queuestatus'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x42f6,0x116));var _0x642f=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x42f6[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x642f('0x0'));var util=require(_0x642f('0x1'));var utils=require(_0x642f('0x2'));var queues={};function writeDB(_0x1576fe){utils[_0x642f('0x3')](util[_0x642f('0x4')]('QUEUE|%s|%s|%s|%s|%s|%s|%s',_0x1576fe['uniqueid'],_0x1576fe[_0x642f('0x5')],_0x1576fe[_0x642f('0x6')],_0x1576fe[_0x642f('0x7')],_0x1576fe[_0x642f('0x8')],_0x1576fe[_0x642f('0x9')],_0x1576fe[_0x642f('0xa')]));if(_0x1576fe[_0x642f('0x6')]){utils[_0x642f('0xb')](_0x1576fe[_0x642f('0x6')])[_0x642f('0xc')](function(_0x46390d){if(_0x46390d){_0x1576fe[_0x642f('0xd')]=_0x46390d[_0x642f('0xd')];}utils[_0x642f('0xe')](_0x642f('0xf'),_0x1576fe);});}else{utils['request'](_0x642f('0xf'),_0x1576fe);}if(_0x1576fe[_0x642f('0x10')]){delete queues[_0x1576fe[_0x642f('0x10')]];}else{delete queues[_0x1576fe[_0x642f('0x11')]];}}exports[_0x642f('0x12')]=function(_0x3c8e79){queues[_0x3c8e79[_0x642f('0x11')]]=_[_0x642f('0x13')](_0x3c8e79,{'originalposition':_0x3c8e79[_0x642f('0x14')],'queuecallerjoinAt':utils[_0x642f('0x15')](),'mohtime':0x0});};exports[_0x642f('0x16')]=function(_0x458b5c){if(!_[_0x642f('0x17')](queues[_0x458b5c[_0x642f('0x11')]])){if(queues[_0x458b5c[_0x642f('0x11')]][_0x642f('0x18')]){if(!queues[_0x458b5c[_0x642f('0x11')]][_0x642f('0x19')]&&!queues[_0x458b5c[_0x642f('0x11')]][_0x642f('0x1a')]){queues[_0x458b5c[_0x642f('0x11')]][_0x642f('0x1b')]=!![];queues[_0x458b5c['uniqueid']][_0x642f('0x1c')]=utils[_0x642f('0x15')]();queues[_0x458b5c['uniqueid']]['queuecallerexitreason']=_0x642f('0x1d');}writeDB(queues[_0x458b5c[_0x642f('0x11')]]);}else{if(queues[_0x458b5c[_0x642f('0x11')]][_0x642f('0x10')]){queues[queues[_0x458b5c[_0x642f('0x11')]][_0x642f('0x10')]]=queues[_0x458b5c[_0x642f('0x11')]];queues[queues[_0x458b5c[_0x642f('0x11')]]['transfereduniqueid']][_0x642f('0x1e')]=0x2;delete queues[_0x458b5c[_0x642f('0x11')]];}}}};exports[_0x642f('0x1f')]=function(_0x40fe30){if(!_[_0x642f('0x17')](_0x40fe30[_0x642f('0x20')][_0x642f('0x21')])){if(!_[_0x642f('0x17')](queues[_0x40fe30[_0x642f('0x11')]])){queues[_0x40fe30['uniqueid']]['queuecallerabandon']=![];queues[_0x40fe30[_0x642f('0x11')]][_0x642f('0x22')]=null;queues[_0x40fe30['uniqueid']][_0x642f('0x1a')]=!![];queues[_0x40fe30[_0x642f('0x11')]][_0x642f('0x23')]=utils[_0x642f('0x15')]();queues[_0x40fe30['uniqueid']][_0x642f('0xa')]=_0x40fe30[_0x642f('0x24')][_0x642f('0x25')]();writeDB(queues[_0x40fe30['uniqueid']]);}}else if(!_[_0x642f('0x17')](_0x40fe30['variable'][_0x642f('0x26')])){if(!_[_0x642f('0x17')](queues[_0x40fe30[_0x642f('0x11')]])&&!queues[_0x40fe30[_0x642f('0x11')]][_0x642f('0x19')]){queues[_0x40fe30[_0x642f('0x11')]]['queuecallerabandon']=![];queues[_0x40fe30[_0x642f('0x11')]][_0x642f('0x22')]=null;queues[_0x40fe30[_0x642f('0x11')]][_0x642f('0x1a')]=!![];queues[_0x40fe30[_0x642f('0x11')]]['queuecallerexitAt']=utils[_0x642f('0x15')]();queues[_0x40fe30[_0x642f('0x11')]][_0x642f('0xa')]='EXITWITHKEY';}}};exports[_0x642f('0x19')]=function(_0x188c6b){if(!_[_0x642f('0x17')](queues[_0x188c6b[_0x642f('0x11')]])){queues[_0x188c6b['uniqueid']][_0x642f('0x1a')]=![];queues[_0x188c6b[_0x642f('0x11')]][_0x642f('0x23')]=null;queues[_0x188c6b[_0x642f('0x11')]][_0x642f('0x19')]=!![];queues[_0x188c6b[_0x642f('0x11')]][_0x642f('0x22')]=utils[_0x642f('0x15')]();queues[_0x188c6b['uniqueid']]['queuecallerexitreason']='ABANDONED';}};exports[_0x642f('0x27')]=function(_0x1d42a6){if(!_['isNil'](queues[_0x1d42a6[_0x642f('0x11')]])){queues[_0x1d42a6['uniqueid']][_0x642f('0x27')]=!![];queues[_0x1d42a6[_0x642f('0x11')]]['queuecallerleaveAt']=utils[_0x642f('0x15')]();queues[_0x1d42a6['uniqueid']][_0x642f('0x28')]=utils[_0x642f('0x29')](queues[_0x1d42a6['uniqueid']]['queuecallerleaveAt'],queues[_0x1d42a6[_0x642f('0x11')]][_0x642f('0x2a')]);queues[_0x1d42a6[_0x642f('0x11')]][_0x642f('0x14')]=_0x1d42a6[_0x642f('0x14')];queues[_0x1d42a6[_0x642f('0x11')]][_0x642f('0x2b')]=_0x1d42a6['count'];queues[_0x1d42a6[_0x642f('0x11')]][_0x642f('0x2c')]=_0x1d42a6['connectedlinenum'];queues[_0x1d42a6['uniqueid']][_0x642f('0x2d')]=_0x1d42a6['connectedlinename'];}};exports['agentconnect']=function(_0x8d94fa){if(!_[_0x642f('0x17')](queues[_0x8d94fa[_0x642f('0x11')]])){queues[_0x8d94fa[_0x642f('0x11')]][_0x642f('0x19')]=![];queues[_0x8d94fa['uniqueid']][_0x642f('0x19')]=![];queues[_0x8d94fa['uniqueid']][_0x642f('0x22')]=null;queues[_0x8d94fa['uniqueid']]['queuecallerexit']=![];queues[_0x8d94fa[_0x642f('0x11')]][_0x642f('0x23')]=null;queues[_0x8d94fa[_0x642f('0x11')]][_0x642f('0x2e')]=!![];queues[_0x8d94fa[_0x642f('0x11')]][_0x642f('0x9')]=_0x8d94fa[_0x642f('0x2f')];queues[_0x8d94fa[_0x642f('0x11')]][_0x642f('0x7')]=_0x8d94fa[_0x642f('0x30')];}};exports['agentcomplete']=function(_0x47af6d){if(!_['isNil'](queues[_0x47af6d['uniqueid']])){if(queues[_0x47af6d['uniqueid']]['queuecallerleaveAt']){queues[_0x47af6d[_0x642f('0x11')]][_0x642f('0x19')]=![];queues[_0x47af6d[_0x642f('0x11')]]['queuecallerabandon']=![];queues[_0x47af6d[_0x642f('0x11')]]['queuecallerabandonAt']=null;queues[_0x47af6d['uniqueid']]['queuecallerexit']=![];queues[_0x47af6d['uniqueid']]['queuecallerexitAt']=null;queues[_0x47af6d[_0x642f('0x11')]][_0x642f('0x2e')]=!![];queues[_0x47af6d['uniqueid']]['lastAssignedTo']=_0x47af6d[_0x642f('0x30')];queues[_0x47af6d['uniqueid']][_0x642f('0x1b')]=!![];queues[_0x47af6d['uniqueid']]['queuecallercompleteAt']=utils[_0x642f('0x15')]();if(_0x47af6d['reason']==_0x642f('0x31')){if(!queues[_0x47af6d[_0x642f('0x11')]][_0x642f('0x31')]){queues[_0x47af6d[_0x642f('0x11')]][_0x642f('0xa')]='TRANSFER';}}else{queues[_0x47af6d[_0x642f('0x11')]][_0x642f('0xa')]=_0x642f('0x32')+_0x47af6d[_0x642f('0x33')][_0x642f('0x25')]();}writeDB(queues[_0x47af6d['uniqueid']]);}}};exports['blindtransfer']=function(_0x5f2a3c){if(!_[_0x642f('0x17')](queues[_0x5f2a3c[_0x642f('0x34')]])){queues[_0x5f2a3c[_0x642f('0x34')]][_0x642f('0x31')]=!![];queues[_0x5f2a3c[_0x642f('0x34')]][_0x642f('0x35')]=_0x642f('0x36');queues[_0x5f2a3c[_0x642f('0x34')]][_0x642f('0x37')]=_0x5f2a3c[_0x642f('0x38')];queues[_0x5f2a3c[_0x642f('0x34')]][_0x642f('0x39')]=_0x5f2a3c[_0x642f('0x34')];queues[_0x5f2a3c[_0x642f('0x34')]][_0x642f('0xa')]=_0x642f('0x3a');}};exports[_0x642f('0x3b')]=function(_0x42f3a6){try{if(_0x42f3a6['origtransfereruniqueid']==_0x42f3a6[_0x642f('0x3c')]){if(!_[_0x642f('0x17')](queues[_0x42f3a6[_0x642f('0x3d')]])){queues[_0x42f3a6[_0x642f('0x3d')]][_0x642f('0x31')]=!![];queues[_0x42f3a6[_0x642f('0x3d')]][_0x642f('0x35')]=_0x642f('0x3e');queues[_0x42f3a6[_0x642f('0x3d')]]['transferexten']=_0x42f3a6[_0x642f('0x3f')];queues[_0x42f3a6[_0x642f('0x3d')]]['transferuniqueid']=_0x42f3a6['origtransfereruniqueid'];queues[_0x42f3a6[_0x642f('0x3d')]][_0x642f('0xa')]=_0x642f('0x40');}if(!_[_0x642f('0x17')](queues[_0x42f3a6[_0x642f('0x3c')]])){if(_0x42f3a6['transfereelinkedid']&&queues[_0x42f3a6[_0x642f('0x41')]]){queues[_0x42f3a6[_0x642f('0x41')]][_0x642f('0x1e')]=0x1;queues[_0x42f3a6['transfereeuniqueid']]=_[_0x642f('0x42')](queues[_0x42f3a6[_0x642f('0x41')]]);queues[_0x42f3a6[_0x642f('0x34')]][_0x642f('0x10')]=_0x42f3a6[_0x642f('0x43')];queues[_0x42f3a6['transfereeuniqueid']]['queuecallerenterreason']=0x2;queues[_0x42f3a6[_0x642f('0x34')]]['calleridnum']=queues[_0x42f3a6[_0x642f('0x3d')]][_0x642f('0x8')];queues[_0x42f3a6[_0x642f('0x34')]]['calleridname']=queues[_0x42f3a6[_0x642f('0x3d')]][_0x642f('0x44')];queues[_0x42f3a6[_0x642f('0x34')]]['queuecallerjoinAt']=utils['now']();queues[_0x42f3a6['transfereeuniqueid']][_0x642f('0x18')]=utils[_0x642f('0x15')]();queues[_0x42f3a6[_0x642f('0x34')]][_0x642f('0x28')]=0x0;queues[_0x42f3a6[_0x642f('0x34')]][_0x642f('0x45')]=0x0;}else{queues[_0x42f3a6[_0x642f('0x3c')]]['transfereduniqueid']=_0x42f3a6[_0x642f('0x3d')];}}}else if(_0x42f3a6[_0x642f('0x46')]==_0x42f3a6[_0x642f('0x3d')]){if(!_[_0x642f('0x17')](queues[_0x42f3a6[_0x642f('0x3c')]])){queues[_0x42f3a6['origtransfererlinkedid']][_0x642f('0x31')]=!![];queues[_0x42f3a6[_0x642f('0x3c')]]['transfertype']='ATTENDED';queues[_0x42f3a6[_0x642f('0x3c')]][_0x642f('0x37')]=_0x42f3a6[_0x642f('0x47')];queues[_0x42f3a6[_0x642f('0x3c')]][_0x642f('0x39')]=_0x42f3a6[_0x642f('0x46')];queues[_0x42f3a6[_0x642f('0x3c')]]['queuecallerexitreason']=_0x642f('0x40');}if(!_[_0x642f('0x17')](queues[_0x42f3a6[_0x642f('0x3d')]])){if(_0x42f3a6[_0x642f('0x48')]&&queues[_0x42f3a6[_0x642f('0x48')]]){queues[_0x42f3a6[_0x642f('0x48')]][_0x642f('0x1e')]=0x1;queues[_0x42f3a6[_0x642f('0x43')]]=_['clone'](queues[_0x42f3a6['transfertargetlinkedid']]);queues[_0x42f3a6[_0x642f('0x43')]][_0x642f('0x10')]=_0x42f3a6[_0x642f('0x43')];queues[_0x42f3a6[_0x642f('0x43')]][_0x642f('0x1e')]=0x2;queues[_0x42f3a6[_0x642f('0x43')]][_0x642f('0x8')]=queues[_0x42f3a6[_0x642f('0x3c')]][_0x642f('0x8')];queues[_0x42f3a6['transfertargetuniqueid']]['calleridname']=queues[_0x42f3a6[_0x642f('0x3c')]]['calleridname'];queues[_0x42f3a6[_0x642f('0x43')]][_0x642f('0x2a')]=utils[_0x642f('0x15')]();queues[_0x42f3a6['transfertargetuniqueid']][_0x642f('0x18')]=utils[_0x642f('0x15')]();queues[_0x42f3a6[_0x642f('0x43')]][_0x642f('0x28')]=0x0;queues[_0x42f3a6[_0x642f('0x43')]][_0x642f('0x45')]=0x0;}else{queues[_0x42f3a6[_0x642f('0x3d')]][_0x642f('0x10')]=_0x42f3a6['origtransfererlinkedid'];}}}}catch(_0x1b2377){utils[_0x642f('0x49')](_0x1b2377[_0x642f('0x4a')]);}};exports[_0x642f('0x4b')]=function(_0x496636){if(!_['isNil'](queues[_0x496636[_0x642f('0x11')]])){queues[_0x496636[_0x642f('0x11')]][_0x642f('0x4c')]=utils[_0x642f('0x15')]();}};exports[_0x642f('0x4d')]=function(_0x404b8f){if(!_['isNil'](queues[_0x404b8f[_0x642f('0x11')]])){if(!_[_0x642f('0x17')](queues[_0x404b8f[_0x642f('0x11')]]['musiconholdstartAt'])){queues[_0x404b8f[_0x642f('0x11')]][_0x642f('0x45')]+=utils[_0x642f('0x29')](utils[_0x642f('0x15')](),queues[_0x404b8f[_0x642f('0x11')]][_0x642f('0x4c')]);delete queues[_0x404b8f[_0x642f('0x11')]][_0x642f('0x4c')];}}};
\ No newline at end of file
+var _0xe799=['transfer','TRANSFER','COMPLETEDBY','blindtransfer','transfereeuniqueid','transfertype','transferexten','extension','transferuniqueid','BLINDTRANSFER','attendedtransfer','origtransfereruniqueid','origtransfererlinkedid','secondtransfererlinkedid','ATTENDED','origtransfererexten','ATTENDEDTRANSFER','transfereelinkedid','queuecallerenterreason','clone','calleridname','mohtime','secondtransfereruniqueid','secondtransfererexten','transfertargetlinkedid','transfertargetuniqueid','error','stack','musiconholdstart','musiconholdstartAt','musiconholdstop','lodash','util','info','format','QUEUE|%s|%s|%s|%s|%s|%s|%s','uniqueid','lastAssignedTo','calleridnum','accountcode','queue','then','type','request','CreateVoiceQueueReport','transfereduniqueid','assign','position','now','isNil','queuecallerleaveAt','queuecallerexit','queuecallercomplete','queuecallercompleteAt','queuecallerexitreason','COMPLETEDBYAGENT','variable','queuestatus','queuecallerabandonAt','queuecallerexitAt','value','queuecallerabandon','EXITWITHKEY','ABANDONED','queuecallerleave','holdtime','diffTime','queuecallerjoinAt','count','connectedlinename','agentconnect','assigned','destaccountcode','membername','agentcomplete','reason'];(function(_0x38e3cc,_0x8d9fc6){var _0x19651f=function(_0x2c5e3a){while(--_0x2c5e3a){_0x38e3cc['push'](_0x38e3cc['shift']());}};_0x19651f(++_0x8d9fc6);}(_0xe799,0x19b));var _0x9e79=function(_0x56aff9,_0x23d245){_0x56aff9=_0x56aff9-0x0;var _0x328056=_0xe799[_0x56aff9];return _0x328056;};'use strict';var _=require(_0x9e79('0x0'));var util=require(_0x9e79('0x1'));var utils=require('./utils');var queues={};function writeDB(_0xc9a90e){utils[_0x9e79('0x2')](util[_0x9e79('0x3')](_0x9e79('0x4'),_0xc9a90e[_0x9e79('0x5')],_0xc9a90e['channel'],_0xc9a90e['queue'],_0xc9a90e[_0x9e79('0x6')],_0xc9a90e[_0x9e79('0x7')],_0xc9a90e[_0x9e79('0x8')],_0xc9a90e['queuecallerexitreason']));if(_0xc9a90e['queue']){utils['getVoiceQueueByName'](_0xc9a90e[_0x9e79('0x9')])[_0x9e79('0xa')](function(_0x23c7bb){if(_0x23c7bb){_0xc9a90e[_0x9e79('0xb')]=_0x23c7bb[_0x9e79('0xb')];}utils[_0x9e79('0xc')](_0x9e79('0xd'),_0xc9a90e);});}else{utils[_0x9e79('0xc')]('CreateVoiceQueueReport',_0xc9a90e);}if(_0xc9a90e['transfereduniqueid']){delete queues[_0xc9a90e[_0x9e79('0xe')]];}else{delete queues[_0xc9a90e['uniqueid']];}}exports['queuecallerjoin']=function(_0xd561a6){queues[_0xd561a6['uniqueid']]=_[_0x9e79('0xf')](_0xd561a6,{'originalposition':_0xd561a6[_0x9e79('0x10')],'queuecallerjoinAt':utils[_0x9e79('0x11')](),'mohtime':0x0});};exports['hangup']=function(_0x2801d4){if(!_[_0x9e79('0x12')](queues[_0x2801d4[_0x9e79('0x5')]])){if(queues[_0x2801d4[_0x9e79('0x5')]][_0x9e79('0x13')]){if(!queues[_0x2801d4['uniqueid']]['queuecallerabandon']&&!queues[_0x2801d4[_0x9e79('0x5')]][_0x9e79('0x14')]){queues[_0x2801d4['uniqueid']][_0x9e79('0x15')]=!![];queues[_0x2801d4['uniqueid']][_0x9e79('0x16')]=utils[_0x9e79('0x11')]();queues[_0x2801d4['uniqueid']][_0x9e79('0x17')]=_0x9e79('0x18');}writeDB(queues[_0x2801d4[_0x9e79('0x5')]]);}else{if(queues[_0x2801d4[_0x9e79('0x5')]][_0x9e79('0xe')]){queues[queues[_0x2801d4[_0x9e79('0x5')]][_0x9e79('0xe')]]=queues[_0x2801d4[_0x9e79('0x5')]];queues[queues[_0x2801d4['uniqueid']]['transfereduniqueid']]['queuecallerenterreason']=0x2;delete queues[_0x2801d4['uniqueid']];}}}};exports['varset']=function(_0x45153f){if(!_[_0x9e79('0x12')](_0x45153f[_0x9e79('0x19')][_0x9e79('0x1a')])){if(!_[_0x9e79('0x12')](queues[_0x45153f[_0x9e79('0x5')]])){queues[_0x45153f['uniqueid']]['queuecallerabandon']=![];queues[_0x45153f[_0x9e79('0x5')]][_0x9e79('0x1b')]=null;queues[_0x45153f[_0x9e79('0x5')]][_0x9e79('0x14')]=!![];queues[_0x45153f[_0x9e79('0x5')]][_0x9e79('0x1c')]=utils[_0x9e79('0x11')]();queues[_0x45153f[_0x9e79('0x5')]][_0x9e79('0x17')]=_0x45153f[_0x9e79('0x1d')]['toUpperCase']();writeDB(queues[_0x45153f[_0x9e79('0x5')]]);}}else if(!_[_0x9e79('0x12')](_0x45153f[_0x9e79('0x19')]['queueposition'])){if(!_[_0x9e79('0x12')](queues[_0x45153f[_0x9e79('0x5')]])&&!queues[_0x45153f[_0x9e79('0x5')]][_0x9e79('0x1e')]){queues[_0x45153f[_0x9e79('0x5')]][_0x9e79('0x1e')]=![];queues[_0x45153f['uniqueid']][_0x9e79('0x1b')]=null;queues[_0x45153f[_0x9e79('0x5')]][_0x9e79('0x14')]=!![];queues[_0x45153f['uniqueid']][_0x9e79('0x1c')]=utils[_0x9e79('0x11')]();queues[_0x45153f[_0x9e79('0x5')]][_0x9e79('0x17')]=_0x9e79('0x1f');}}};exports['queuecallerabandon']=function(_0x500bb7){if(!_[_0x9e79('0x12')](queues[_0x500bb7['uniqueid']])){queues[_0x500bb7[_0x9e79('0x5')]]['queuecallerexit']=![];queues[_0x500bb7[_0x9e79('0x5')]][_0x9e79('0x1c')]=null;queues[_0x500bb7[_0x9e79('0x5')]][_0x9e79('0x1e')]=!![];queues[_0x500bb7[_0x9e79('0x5')]][_0x9e79('0x1b')]=utils[_0x9e79('0x11')]();queues[_0x500bb7[_0x9e79('0x5')]]['queuecallerexitreason']=_0x9e79('0x20');}};exports[_0x9e79('0x21')]=function(_0x19730c){if(!_[_0x9e79('0x12')](queues[_0x19730c['uniqueid']])){queues[_0x19730c['uniqueid']]['queuecallerleave']=!![];queues[_0x19730c[_0x9e79('0x5')]][_0x9e79('0x13')]=utils[_0x9e79('0x11')]();queues[_0x19730c[_0x9e79('0x5')]][_0x9e79('0x22')]=utils[_0x9e79('0x23')](queues[_0x19730c[_0x9e79('0x5')]][_0x9e79('0x13')],queues[_0x19730c['uniqueid']][_0x9e79('0x24')]);queues[_0x19730c[_0x9e79('0x5')]][_0x9e79('0x10')]=_0x19730c['position'];queues[_0x19730c[_0x9e79('0x5')]][_0x9e79('0x25')]=_0x19730c['count'];queues[_0x19730c[_0x9e79('0x5')]]['connectedlinenum']=_0x19730c['connectedlinenum'];queues[_0x19730c[_0x9e79('0x5')]][_0x9e79('0x26')]=_0x19730c[_0x9e79('0x26')];}};exports[_0x9e79('0x27')]=function(_0x3de19c){if(!_['isNil'](queues[_0x3de19c[_0x9e79('0x5')]])){queues[_0x3de19c[_0x9e79('0x5')]][_0x9e79('0x1e')]=![];queues[_0x3de19c[_0x9e79('0x5')]][_0x9e79('0x1e')]=![];queues[_0x3de19c[_0x9e79('0x5')]][_0x9e79('0x1b')]=null;queues[_0x3de19c[_0x9e79('0x5')]]['queuecallerexit']=![];queues[_0x3de19c[_0x9e79('0x5')]][_0x9e79('0x1c')]=null;queues[_0x3de19c['uniqueid']][_0x9e79('0x28')]=!![];queues[_0x3de19c[_0x9e79('0x5')]][_0x9e79('0x8')]=_0x3de19c[_0x9e79('0x29')];queues[_0x3de19c[_0x9e79('0x5')]][_0x9e79('0x6')]=_0x3de19c[_0x9e79('0x2a')];}};exports[_0x9e79('0x2b')]=function(_0x3fa52e){if(!_[_0x9e79('0x12')](queues[_0x3fa52e[_0x9e79('0x5')]])){if(queues[_0x3fa52e['uniqueid']][_0x9e79('0x13')]){queues[_0x3fa52e['uniqueid']]['queuecallerabandon']=![];queues[_0x3fa52e[_0x9e79('0x5')]][_0x9e79('0x1e')]=![];queues[_0x3fa52e[_0x9e79('0x5')]][_0x9e79('0x1b')]=null;queues[_0x3fa52e['uniqueid']][_0x9e79('0x14')]=![];queues[_0x3fa52e['uniqueid']]['queuecallerexitAt']=null;queues[_0x3fa52e[_0x9e79('0x5')]][_0x9e79('0x28')]=!![];queues[_0x3fa52e[_0x9e79('0x5')]][_0x9e79('0x6')]=_0x3fa52e[_0x9e79('0x2a')];queues[_0x3fa52e[_0x9e79('0x5')]][_0x9e79('0x15')]=!![];queues[_0x3fa52e[_0x9e79('0x5')]][_0x9e79('0x16')]=utils[_0x9e79('0x11')]();if(_0x3fa52e[_0x9e79('0x2c')]==_0x9e79('0x2d')){if(!queues[_0x3fa52e['uniqueid']][_0x9e79('0x2d')]){queues[_0x3fa52e[_0x9e79('0x5')]][_0x9e79('0x17')]=_0x9e79('0x2e');}}else{queues[_0x3fa52e['uniqueid']]['queuecallerexitreason']=_0x9e79('0x2f')+_0x3fa52e[_0x9e79('0x2c')]['toUpperCase']();}writeDB(queues[_0x3fa52e[_0x9e79('0x5')]]);}}};exports[_0x9e79('0x30')]=function(_0x57fd3e){if(!_[_0x9e79('0x12')](queues[_0x57fd3e['transfereeuniqueid']])){queues[_0x57fd3e[_0x9e79('0x31')]]['transfer']=!![];queues[_0x57fd3e[_0x9e79('0x31')]][_0x9e79('0x32')]='BLIND';queues[_0x57fd3e[_0x9e79('0x31')]][_0x9e79('0x33')]=_0x57fd3e[_0x9e79('0x34')];queues[_0x57fd3e[_0x9e79('0x31')]][_0x9e79('0x35')]=_0x57fd3e['transfereeuniqueid'];queues[_0x57fd3e['transfereeuniqueid']][_0x9e79('0x17')]=_0x9e79('0x36');}};exports[_0x9e79('0x37')]=function(_0x38549b){try{if(_0x38549b[_0x9e79('0x38')]==_0x38549b[_0x9e79('0x39')]){if(!_['isNil'](queues[_0x38549b[_0x9e79('0x3a')]])){queues[_0x38549b[_0x9e79('0x3a')]][_0x9e79('0x2d')]=!![];queues[_0x38549b['secondtransfererlinkedid']][_0x9e79('0x32')]=_0x9e79('0x3b');queues[_0x38549b['secondtransfererlinkedid']]['transferexten']=_0x38549b[_0x9e79('0x3c')];queues[_0x38549b[_0x9e79('0x3a')]]['transferuniqueid']=_0x38549b[_0x9e79('0x38')];queues[_0x38549b[_0x9e79('0x3a')]][_0x9e79('0x17')]=_0x9e79('0x3d');}if(!_['isNil'](queues[_0x38549b[_0x9e79('0x39')]])){if(_0x38549b['transfereelinkedid']&&queues[_0x38549b[_0x9e79('0x3e')]]){queues[_0x38549b[_0x9e79('0x3e')]][_0x9e79('0x3f')]=0x1;queues[_0x38549b[_0x9e79('0x31')]]=_[_0x9e79('0x40')](queues[_0x38549b[_0x9e79('0x3e')]]);queues[_0x38549b[_0x9e79('0x31')]]['transfereduniqueid']=_0x38549b['transfertargetuniqueid'];queues[_0x38549b[_0x9e79('0x31')]][_0x9e79('0x3f')]=0x2;queues[_0x38549b[_0x9e79('0x31')]]['calleridnum']=queues[_0x38549b[_0x9e79('0x3a')]][_0x9e79('0x7')];queues[_0x38549b['transfereeuniqueid']][_0x9e79('0x41')]=queues[_0x38549b['secondtransfererlinkedid']][_0x9e79('0x41')];queues[_0x38549b[_0x9e79('0x31')]][_0x9e79('0x24')]=utils[_0x9e79('0x11')]();queues[_0x38549b[_0x9e79('0x31')]][_0x9e79('0x13')]=utils[_0x9e79('0x11')]();queues[_0x38549b[_0x9e79('0x31')]][_0x9e79('0x22')]=0x0;queues[_0x38549b['transfereeuniqueid']][_0x9e79('0x42')]=0x0;}else{queues[_0x38549b[_0x9e79('0x39')]][_0x9e79('0xe')]=_0x38549b[_0x9e79('0x3a')];}}}else if(_0x38549b[_0x9e79('0x43')]==_0x38549b[_0x9e79('0x3a')]){if(!_[_0x9e79('0x12')](queues[_0x38549b['origtransfererlinkedid']])){queues[_0x38549b[_0x9e79('0x39')]]['transfer']=!![];queues[_0x38549b[_0x9e79('0x39')]][_0x9e79('0x32')]=_0x9e79('0x3b');queues[_0x38549b['origtransfererlinkedid']][_0x9e79('0x33')]=_0x38549b[_0x9e79('0x44')];queues[_0x38549b['origtransfererlinkedid']][_0x9e79('0x35')]=_0x38549b['secondtransfereruniqueid'];queues[_0x38549b[_0x9e79('0x39')]][_0x9e79('0x17')]=_0x9e79('0x3d');}if(!_[_0x9e79('0x12')](queues[_0x38549b[_0x9e79('0x3a')]])){if(_0x38549b[_0x9e79('0x45')]&&queues[_0x38549b[_0x9e79('0x45')]]){queues[_0x38549b['transfertargetlinkedid']][_0x9e79('0x3f')]=0x1;queues[_0x38549b[_0x9e79('0x46')]]=_[_0x9e79('0x40')](queues[_0x38549b['transfertargetlinkedid']]);queues[_0x38549b[_0x9e79('0x46')]][_0x9e79('0xe')]=_0x38549b[_0x9e79('0x46')];queues[_0x38549b['transfertargetuniqueid']][_0x9e79('0x3f')]=0x2;queues[_0x38549b[_0x9e79('0x46')]][_0x9e79('0x7')]=queues[_0x38549b[_0x9e79('0x39')]][_0x9e79('0x7')];queues[_0x38549b[_0x9e79('0x46')]]['calleridname']=queues[_0x38549b[_0x9e79('0x39')]][_0x9e79('0x41')];queues[_0x38549b[_0x9e79('0x46')]][_0x9e79('0x24')]=utils[_0x9e79('0x11')]();queues[_0x38549b[_0x9e79('0x46')]][_0x9e79('0x13')]=utils[_0x9e79('0x11')]();queues[_0x38549b[_0x9e79('0x46')]][_0x9e79('0x22')]=0x0;queues[_0x38549b[_0x9e79('0x46')]]['mohtime']=0x0;}else{queues[_0x38549b['secondtransfererlinkedid']][_0x9e79('0xe')]=_0x38549b[_0x9e79('0x39')];}}}}catch(_0x4da692){utils[_0x9e79('0x47')](_0x4da692[_0x9e79('0x48')]);}};exports[_0x9e79('0x49')]=function(_0x27bc45){if(!_[_0x9e79('0x12')](queues[_0x27bc45[_0x9e79('0x5')]])){queues[_0x27bc45[_0x9e79('0x5')]][_0x9e79('0x4a')]=utils[_0x9e79('0x11')]();}};exports[_0x9e79('0x4b')]=function(_0x32a11e){if(!_['isNil'](queues[_0x32a11e[_0x9e79('0x5')]])){if(!_[_0x9e79('0x12')](queues[_0x32a11e[_0x9e79('0x5')]][_0x9e79('0x4a')])){queues[_0x32a11e[_0x9e79('0x5')]][_0x9e79('0x42')]+=utils[_0x9e79('0x23')](utils['now'](),queues[_0x32a11e[_0x9e79('0x5')]][_0x9e79('0x4a')]);delete queues[_0x32a11e[_0x9e79('0x5')]][_0x9e79('0x4a')];}}};
\ No newline at end of file
index 7e9cde0..543efa8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34e8=['membername','name','UserId','CreateVoiceRecording','newchannel','uniqueid','linkedid','exten','context','channel','error','stack','newstate','isNil','channelstate','transfer','variable','mixmonitor_filename','value','.wav49','replace','.WAV','find','monitors','push','hangup','calleridnum','calleridname','connectedlinenum','connectedlinename','type','outbound','clone','newexten','application','toLowerCase','set','startsWith','appdata','cdr','split','substring','lastIndexOf','queuecallerjoin','queue','lodash','./utils','debug','getUserByInternal','accountcode','then'];(function(_0x9df060,_0x253d33){var _0x338dfe=function(_0x17d9a5){while(--_0x17d9a5){_0x9df060['push'](_0x9df060['shift']());}};_0x338dfe(++_0x253d33);}(_0x34e8,0x12c));var _0x834e=function(_0x5c6070,_0x58833d){_0x5c6070=_0x5c6070-0x0;var _0x152bea=_0x34e8[_0x5c6070];return _0x152bea;};'use strict';var _=require(_0x834e('0x0'));var utils=require(_0x834e('0x1'));var recordings={};function writeDB(_0x8b339){utils[_0x834e('0x2')](_0x8b339);if(_0x8b339['accountcode']){utils[_0x834e('0x3')](_0x8b339[_0x834e('0x4')])[_0x834e('0x5')](function(_0x31bf20){if(_0x31bf20){_0x8b339[_0x834e('0x6')]=_0x31bf20[_0x834e('0x7')];_0x8b339[_0x834e('0x8')]=_0x31bf20['id'];}utils['request'](_0x834e('0x9'),_0x8b339);});}else{utils['request'](_0x834e('0x9'),_0x8b339);}}exports[_0x834e('0xa')]=function(_0x3a3ef6){try{if(_0x3a3ef6[_0x834e('0xb')]==_0x3a3ef6[_0x834e('0xc')]){recordings[_0x3a3ef6[_0x834e('0xb')]]={'uniqueid':_0x3a3ef6[_0x834e('0xb')],'accountcode':_0x3a3ef6[_0x834e('0x4')],'exten':_0x3a3ef6[_0x834e('0xd')],'context':_0x3a3ef6[_0x834e('0xe')],'channel':_0x3a3ef6[_0x834e('0xf')],'monitors':[]};}}catch(_0x36e124){utils[_0x834e('0x10')](_0x36e124[_0x834e('0x11')]);}};exports[_0x834e('0x12')]=function(_0x1e00de){try{if(!_[_0x834e('0x13')](recordings[_0x1e00de['uniqueid']])&&_0x1e00de[_0x834e('0x14')]==0x6){}else if(!_[_0x834e('0x13')](recordings[_0x1e00de['linkedid']])&&_0x1e00de[_0x834e('0x14')]==0x6&&_0x1e00de[_0x834e('0xe')]!=_0x834e('0x15')){recordings[_0x1e00de[_0x834e('0xc')]]['accountcode']=_0x1e00de[_0x834e('0x4')];}}catch(_0x302cbd){utils['error'](_0x302cbd[_0x834e('0x11')]);}};exports['varset']=function(_0x38a8cd){try{if(!_[_0x834e('0x13')](_0x38a8cd['variable'])&&!_[_0x834e('0x13')](_0x38a8cd[_0x834e('0x16')][_0x834e('0x17')])){if(_['endsWith'](_0x38a8cd[_0x834e('0x18')],_0x834e('0x19'))){_0x38a8cd[_0x834e('0x18')]=_0x38a8cd[_0x834e('0x18')][_0x834e('0x1a')](_0x834e('0x19'),_0x834e('0x1b'));}if(recordings[_0x38a8cd['linkedid']]){var _0x2545b4=_[_0x834e('0x1c')](recordings[_0x38a8cd[_0x834e('0xc')]][_0x834e('0x1d')],{'value':_0x38a8cd['value']});if(_[_0x834e('0x13')](_0x2545b4)){recordings[_0x38a8cd[_0x834e('0xc')]]['monitors'][_0x834e('0x1e')]({'value':_0x38a8cd[_0x834e('0x18')]});}}}}catch(_0x8d406e){utils['error'](_0x8d406e['stack']);}};exports[_0x834e('0x1f')]=function(_0x34563b){try{if(!_['isNil'](recordings[_0x34563b[_0x834e('0xb')]])){recordings[_0x34563b[_0x834e('0xb')]]['calleridnum']=_0x34563b[_0x834e('0x20')];recordings[_0x34563b[_0x834e('0xb')]][_0x834e('0x21')]=_0x34563b['calleridname'];recordings[_0x34563b[_0x834e('0xb')]][_0x834e('0x22')]=_0x34563b['connectedlinenum'];recordings[_0x34563b['uniqueid']][_0x834e('0x23')]=_0x34563b['connectedlinename'];if(recordings[_0x34563b[_0x834e('0xb')]][_0x834e('0x24')]==_0x834e('0x25')&&recordings[_0x34563b[_0x834e('0xb')]][_0x834e('0x4')]){recordings[_0x34563b[_0x834e('0xb')]]['connectedlinenum']=recordings[_0x34563b['uniqueid']]['accountcode'];recordings[_0x34563b['uniqueid']][_0x834e('0x23')]='';}recordings[_0x34563b[_0x834e('0xb')]][_0x834e('0x1d')]['forEach'](_0xb5bc06=>{var _0x11f1ce=_[_0x834e('0x26')](recordings[_0x34563b[_0x834e('0xb')]]);_0x11f1ce[_0x834e('0x18')]=_0xb5bc06[_0x834e('0x18')];writeDB(_0x11f1ce);});delete recordings[_0x34563b[_0x834e('0xb')]];}}catch(_0xfaf716){utils[_0x834e('0x10')](_0xfaf716['stack']);}};exports[_0x834e('0x27')]=function(_0x5cad11){try{if(!_[_0x834e('0x13')](recordings[_0x5cad11[_0x834e('0xb')]])){if(_0x5cad11[_0x834e('0x28')][_0x834e('0x29')]()==_0x834e('0x2a')&&_[_0x834e('0x2b')](_0x5cad11[_0x834e('0x2c')][_0x834e('0x29')](),_0x834e('0x2d'))){var _0x12b2bc=_0x5cad11['appdata'][_0x834e('0x2e')]('=');var _0x2f408a=_0x12b2bc[0x0][_0x834e('0x2f')](_0x12b2bc[0x0][_0x834e('0x30')]('(')+0x1,_0x12b2bc[0x0]['lastIndexOf'](')'));var _0x3f88ad=_0x12b2bc[0x1];recordings[_0x5cad11[_0x834e('0xb')]][_0x2f408a]=_0x3f88ad;}}}catch(_0x4b12f5){utils['error'](_0x4b12f5['stack']);}};exports[_0x834e('0x31')]=function(_0x41bf4d){try{if(!_[_0x834e('0x13')](recordings[_0x41bf4d[_0x834e('0xb')]])){recordings[_0x41bf4d[_0x834e('0xb')]][_0x834e('0x32')]=_0x41bf4d['queue'];}}catch(_0x2c2d94){utils['error'](_0x2c2d94[_0x834e('0x11')]);}};
\ No newline at end of file
+var _0xcb91=['uniqueid','channelstate','transfer','error','varset','variable','mixmonitor_filename','endsWith','value','.wav49','replace','.WAV','find','monitors','push','hangup','calleridnum','calleridname','connectedlinenum','connectedlinename','type','outbound','clone','newexten','toLowerCase','startsWith','appdata','cdr','split','substring','lastIndexOf','queuecallerjoin','queue','debug','accountcode','getUserByInternal','then','name','UserId','CreateVoiceRecording','request','newchannel','linkedid','exten','context','channel','stack','newstate','isNil'];(function(_0x1e1215,_0x44e80b){var _0x357d29=function(_0x42f500){while(--_0x42f500){_0x1e1215['push'](_0x1e1215['shift']());}};_0x357d29(++_0x44e80b);}(_0xcb91,0x1a9));var _0x1cb9=function(_0x58db4e,_0x439d8d){_0x58db4e=_0x58db4e-0x0;var _0x40139a=_0xcb91[_0x58db4e];return _0x40139a;};'use strict';var _=require('lodash');var utils=require('./utils');var recordings={};function writeDB(_0x26fe42){utils[_0x1cb9('0x0')](_0x26fe42);if(_0x26fe42[_0x1cb9('0x1')]){utils[_0x1cb9('0x2')](_0x26fe42['accountcode'])[_0x1cb9('0x3')](function(_0x2c17b8){if(_0x2c17b8){_0x26fe42['membername']=_0x2c17b8[_0x1cb9('0x4')];_0x26fe42[_0x1cb9('0x5')]=_0x2c17b8['id'];}utils['request'](_0x1cb9('0x6'),_0x26fe42);});}else{utils[_0x1cb9('0x7')]('CreateVoiceRecording',_0x26fe42);}}exports[_0x1cb9('0x8')]=function(_0x12567c){try{if(_0x12567c['uniqueid']==_0x12567c[_0x1cb9('0x9')]){recordings[_0x12567c['uniqueid']]={'uniqueid':_0x12567c['uniqueid'],'accountcode':_0x12567c[_0x1cb9('0x1')],'exten':_0x12567c[_0x1cb9('0xa')],'context':_0x12567c[_0x1cb9('0xb')],'channel':_0x12567c[_0x1cb9('0xc')],'monitors':[]};}}catch(_0x2fc627){utils['error'](_0x2fc627[_0x1cb9('0xd')]);}};exports[_0x1cb9('0xe')]=function(_0x3af35f){try{if(!_[_0x1cb9('0xf')](recordings[_0x3af35f[_0x1cb9('0x10')]])&&_0x3af35f['channelstate']==0x6){}else if(!_['isNil'](recordings[_0x3af35f['linkedid']])&&_0x3af35f[_0x1cb9('0x11')]==0x6&&_0x3af35f[_0x1cb9('0xb')]!=_0x1cb9('0x12')){recordings[_0x3af35f[_0x1cb9('0x9')]]['accountcode']=_0x3af35f[_0x1cb9('0x1')];}}catch(_0x6ef389){utils[_0x1cb9('0x13')](_0x6ef389[_0x1cb9('0xd')]);}};exports[_0x1cb9('0x14')]=function(_0x5806d8){try{if(!_['isNil'](_0x5806d8[_0x1cb9('0x15')])&&!_[_0x1cb9('0xf')](_0x5806d8[_0x1cb9('0x15')][_0x1cb9('0x16')])){if(_[_0x1cb9('0x17')](_0x5806d8[_0x1cb9('0x18')],_0x1cb9('0x19'))){_0x5806d8['value']=_0x5806d8['value'][_0x1cb9('0x1a')](_0x1cb9('0x19'),_0x1cb9('0x1b'));}if(recordings[_0x5806d8[_0x1cb9('0x9')]]){var _0x280a84=_[_0x1cb9('0x1c')](recordings[_0x5806d8[_0x1cb9('0x9')]]['monitors'],{'value':_0x5806d8['value']});if(_[_0x1cb9('0xf')](_0x280a84)){recordings[_0x5806d8['linkedid']][_0x1cb9('0x1d')][_0x1cb9('0x1e')]({'value':_0x5806d8['value']});}}}}catch(_0x599275){utils[_0x1cb9('0x13')](_0x599275[_0x1cb9('0xd')]);}};exports[_0x1cb9('0x1f')]=function(_0x4601b8){try{if(!_[_0x1cb9('0xf')](recordings[_0x4601b8[_0x1cb9('0x10')]])){recordings[_0x4601b8['uniqueid']]['calleridnum']=_0x4601b8[_0x1cb9('0x20')];recordings[_0x4601b8['uniqueid']][_0x1cb9('0x21')]=_0x4601b8[_0x1cb9('0x21')];recordings[_0x4601b8[_0x1cb9('0x10')]][_0x1cb9('0x22')]=_0x4601b8[_0x1cb9('0x22')];recordings[_0x4601b8['uniqueid']][_0x1cb9('0x23')]=_0x4601b8[_0x1cb9('0x23')];if(recordings[_0x4601b8['uniqueid']][_0x1cb9('0x24')]==_0x1cb9('0x25')&&recordings[_0x4601b8[_0x1cb9('0x10')]][_0x1cb9('0x1')]){recordings[_0x4601b8[_0x1cb9('0x10')]][_0x1cb9('0x22')]=recordings[_0x4601b8[_0x1cb9('0x10')]][_0x1cb9('0x1')];recordings[_0x4601b8[_0x1cb9('0x10')]][_0x1cb9('0x23')]='';}recordings[_0x4601b8['uniqueid']][_0x1cb9('0x1d')]['forEach'](_0x110282=>{var _0x4efebc=_[_0x1cb9('0x26')](recordings[_0x4601b8[_0x1cb9('0x10')]]);_0x4efebc[_0x1cb9('0x18')]=_0x110282[_0x1cb9('0x18')];writeDB(_0x4efebc);});delete recordings[_0x4601b8['uniqueid']];}}catch(_0x1c701f){utils['error'](_0x1c701f[_0x1cb9('0xd')]);}};exports[_0x1cb9('0x27')]=function(_0x4220d7){try{if(!_['isNil'](recordings[_0x4220d7[_0x1cb9('0x10')]])){if(_0x4220d7['application'][_0x1cb9('0x28')]()=='set'&&_[_0x1cb9('0x29')](_0x4220d7[_0x1cb9('0x2a')][_0x1cb9('0x28')](),_0x1cb9('0x2b'))){var _0x56c3e0=_0x4220d7[_0x1cb9('0x2a')][_0x1cb9('0x2c')]('=');var _0x3467d5=_0x56c3e0[0x0][_0x1cb9('0x2d')](_0x56c3e0[0x0][_0x1cb9('0x2e')]('(')+0x1,_0x56c3e0[0x0][_0x1cb9('0x2e')](')'));var _0xc6d5fd=_0x56c3e0[0x1];recordings[_0x4220d7[_0x1cb9('0x10')]][_0x3467d5]=_0xc6d5fd;}}}catch(_0x386e8b){utils[_0x1cb9('0x13')](_0x386e8b[_0x1cb9('0xd')]);}};exports[_0x1cb9('0x2f')]=function(_0x29f149){try{if(!_['isNil'](recordings[_0x29f149['uniqueid']])){recordings[_0x29f149[_0x1cb9('0x10')]][_0x1cb9('0x30')]=_0x29f149[_0x1cb9('0x30')];}}catch(_0x29f451){utils[_0x1cb9('0x13')](_0x29f451[_0x1cb9('0xd')]);}};
\ No newline at end of file
index f219b13..879b383 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7d4f=['transfertargetconnectedlinenum','transfertargetconnectedlinename','transfertargetaccountcode','transfertargetcontext','transfertargetexten','transfertargetlinkedid','lodash','util','./utils','info','format','TRANSFER|%s','type','request','CreateVoiceTransferReport','blind','error','stack','attendedtransfer','origtransfererchannel','origtransferercalleridnum','origtransfereraccountcode','secondtransferercontext','origtransferercontext','origtransfererexten','transfereechannel','assign','transfertargetcalleridnum'];(function(_0x2555d0,_0x4150a6){var _0x3bb486=function(_0x1eb89f){while(--_0x1eb89f){_0x2555d0['push'](_0x2555d0['shift']());}};_0x3bb486(++_0x4150a6);}(_0x7d4f,0x18e));var _0xf7d4=function(_0xb0c152,_0x1d37a9){_0xb0c152=_0xb0c152-0x0;var _0x2fc458=_0x7d4f[_0xb0c152];return _0x2fc458;};'use strict';var _=require(_0xf7d4('0x0'));var util=require(_0xf7d4('0x1'));var utils=require(_0xf7d4('0x2'));function writeDB(_0x2b80b7){utils[_0xf7d4('0x3')](util[_0xf7d4('0x4')](_0xf7d4('0x5'),_0x2b80b7[_0xf7d4('0x6')]));utils[_0xf7d4('0x7')](_0xf7d4('0x8'),_0x2b80b7);}exports['blindtransfer']=function(_0x3f7679){try{_0x3f7679[_0xf7d4('0x6')]=_0xf7d4('0x9');writeDB(_0x3f7679);}catch(_0x498697){utils[_0xf7d4('0xa')](_0x498697[_0xf7d4('0xb')]);}};exports[_0xf7d4('0xc')]=function(_0x1a3be8){try{_0x1a3be8=_['assign'](_0x1a3be8,{'transfererchannel':_0x1a3be8[_0xf7d4('0xd')],'transferercalleridnum':_0x1a3be8[_0xf7d4('0xe')],'transferercalleridname':_0x1a3be8['origtransferercalleridname'],'transfererconnectedlinenum':_0x1a3be8['secondtransfererconnectedlinenum'],'transfererconnectedlinename':_0x1a3be8['secondtransfererconnectedlinename'],'transfereraccountcode':_0x1a3be8[_0xf7d4('0xf')],'transferercontext':_0x1a3be8[_0xf7d4('0x10')],'transfererexten':_0x1a3be8['secondtransfererexten'],'transfererlinkedid':_0x1a3be8['origtransfererlinkedid'],'context':_0x1a3be8[_0xf7d4('0x11')],'extension':_0x1a3be8[_0xf7d4('0x12')],'type':'attended'});if(_['isNil'](_0x1a3be8[_0xf7d4('0x13')])){_0x1a3be8=_[_0xf7d4('0x14')](_0x1a3be8,{'transfereechannel':_0x1a3be8['transfertargetchannel'],'transfereecalleridnum':_0x1a3be8[_0xf7d4('0x15')],'transfereecalleridname':_0x1a3be8['transfertargetcalleridname'],'transfereeconnectedlinenum':_0x1a3be8[_0xf7d4('0x16')],'transfereeconnectedlinename':_0x1a3be8[_0xf7d4('0x17')],'transfereeaccountcode':_0x1a3be8[_0xf7d4('0x18')],'transfereecontext':_0x1a3be8[_0xf7d4('0x19')],'transfereeexten':_0x1a3be8[_0xf7d4('0x1a')],'transfereelinkedid':_0x1a3be8[_0xf7d4('0x1b')]});}writeDB(_0x1a3be8);}catch(_0x308230){utils[_0xf7d4('0xa')](_0x308230[_0xf7d4('0xb')]);}};
\ No newline at end of file
+var _0xd469=['transfertargetcalleridnum','transfertargetcalleridname','transfertargetconnectedlinenum','transfertargetaccountcode','transfertargetcontext','transfertargetexten','transfertargetlinkedid','util','TRANSFER|%s','type','CreateVoiceTransferReport','blindtransfer','blind','error','stack','attendedtransfer','assign','origtransfererchannel','secondtransfererconnectedlinenum','secondtransfererconnectedlinename','origtransfereraccountcode','secondtransferercontext','secondtransfererexten','origtransfererlinkedid','origtransferercontext','isNil','transfereechannel','transfertargetchannel'];(function(_0x26462c,_0xd20a35){var _0x509a42=function(_0x1b22c9){while(--_0x1b22c9){_0x26462c['push'](_0x26462c['shift']());}};_0x509a42(++_0xd20a35);}(_0xd469,0x1ab));var _0x9d46=function(_0x3b8272,_0x4698f6){_0x3b8272=_0x3b8272-0x0;var _0x3c6a45=_0xd469[_0x3b8272];return _0x3c6a45;};'use strict';var _=require('lodash');var util=require(_0x9d46('0x0'));var utils=require('./utils');function writeDB(_0xadc5ac){utils['info'](util['format'](_0x9d46('0x1'),_0xadc5ac[_0x9d46('0x2')]));utils['request'](_0x9d46('0x3'),_0xadc5ac);}exports[_0x9d46('0x4')]=function(_0x27175b){try{_0x27175b[_0x9d46('0x2')]=_0x9d46('0x5');writeDB(_0x27175b);}catch(_0x3e15f4){utils[_0x9d46('0x6')](_0x3e15f4[_0x9d46('0x7')]);}};exports[_0x9d46('0x8')]=function(_0x51f32b){try{_0x51f32b=_[_0x9d46('0x9')](_0x51f32b,{'transfererchannel':_0x51f32b[_0x9d46('0xa')],'transferercalleridnum':_0x51f32b['origtransferercalleridnum'],'transferercalleridname':_0x51f32b['origtransferercalleridname'],'transfererconnectedlinenum':_0x51f32b[_0x9d46('0xb')],'transfererconnectedlinename':_0x51f32b[_0x9d46('0xc')],'transfereraccountcode':_0x51f32b[_0x9d46('0xd')],'transferercontext':_0x51f32b[_0x9d46('0xe')],'transfererexten':_0x51f32b[_0x9d46('0xf')],'transfererlinkedid':_0x51f32b[_0x9d46('0x10')],'context':_0x51f32b[_0x9d46('0x11')],'extension':_0x51f32b['origtransfererexten'],'type':'attended'});if(_[_0x9d46('0x12')](_0x51f32b[_0x9d46('0x13')])){_0x51f32b=_[_0x9d46('0x9')](_0x51f32b,{'transfereechannel':_0x51f32b[_0x9d46('0x14')],'transfereecalleridnum':_0x51f32b[_0x9d46('0x15')],'transfereecalleridname':_0x51f32b[_0x9d46('0x16')],'transfereeconnectedlinenum':_0x51f32b[_0x9d46('0x17')],'transfereeconnectedlinename':_0x51f32b['transfertargetconnectedlinename'],'transfereeaccountcode':_0x51f32b[_0x9d46('0x18')],'transfereecontext':_0x51f32b[_0x9d46('0x19')],'transfereeexten':_0x51f32b[_0x9d46('0x1a')],'transfereelinkedid':_0x51f32b[_0x9d46('0x1b')]});}writeDB(_0x51f32b);}catch(_0x503692){utils['error'](_0x503692[_0x9d46('0x7')]);}};
\ No newline at end of file
index 3026a02..583f1c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x76a8=['client','http','xdr','info','debug','stringify','error','request','then','catch','stack','GetUser','internal','name','GETUSER|','length','result','getUserByInterface','getUserByName','getVoiceQueueByName','GetVoiceQueue','type','GETVOICEQUEUEBYNAME|','FOUND','NOTFOUND','addTime','seconds','format','YYYY-MM-DD\x20HH:mm:ss','diffTime','diff','sumTime','now','isAfter','isBefore','jayson/promise','moment','bluebird'];(function(_0x4daaa1,_0x4a1bbd){var _0x37a1fd=function(_0xa5d8c1){while(--_0xa5d8c1){_0x4daaa1['push'](_0x4daaa1['shift']());}};_0x37a1fd(++_0x4a1bbd);}(_0x76a8,0xe1));var _0x876a=function(_0x5e352,_0x2aca05){_0x5e352=_0x5e352-0x0;var _0x597830=_0x76a8[_0x5e352];return _0x597830;};'use strict';var jayson=require(_0x876a('0x0'));var moment=require(_0x876a('0x1'));var BPromise=require(_0x876a('0x2'));var client=jayson[_0x876a('0x3')][_0x876a('0x4')]({'port':0x2329});var logger=require('../../config/logger')(_0x876a('0x5'));exports[_0x876a('0x6')]=function(_0x2f609d){logger['info'](_0x2f609d);};exports['debug']=function(_0x5b9d9d){logger[_0x876a('0x7')](JSON[_0x876a('0x8')](_0x5b9d9d));};exports[_0x876a('0x9')]=function(_0x2a28ec){logger[_0x876a('0x9')](_0x2a28ec['stack']);};exports[_0x876a('0xa')]=function(_0x194a96,_0x42b89b){return client[_0x876a('0xa')](_0x194a96,{'body':_0x42b89b})[_0x876a('0xb')](function(_0x2e00b7){logger[_0x876a('0x7')](JSON['stringify'](_0x2e00b7));})[_0x876a('0xc')](function(_0x1cf1cd){logger[_0x876a('0x9')](_0x1cf1cd[_0x876a('0xd')]);});};function getUser(_0x57f73b){return client[_0x876a('0xa')](_0x876a('0xe'),{'options':{'raw':!![],'attributes':['id',_0x876a('0xf'),_0x876a('0x10'),'interface'],'where':_0x57f73b,'limit':0x1}})['then'](function(_0x9c7740){logger[_0x876a('0x6')](_0x876a('0x11')+JSON[_0x876a('0x8')](_0x57f73b)+'|'+(_0x9c7740['result'][_0x876a('0x12')]?'FOUND':'NOTFOUND'));return _0x9c7740['result'][_0x876a('0x12')]?_0x9c7740[_0x876a('0x13')][0x0]:null;});}exports['getUserByInternal']=function(_0x3e8ee9){return new BPromise(function(_0x5da987,_0x480559){if(_0x3e8ee9){return getUser({'internal':_0x3e8ee9})[_0x876a('0xb')](function(_0x330051){return _0x5da987(_0x330051);})[_0x876a('0xc')](function(_0x366355){logger[_0x876a('0x9')](_0x366355['stack']);return _0x5da987(null);});}else{return _0x5da987(null);}});};exports[_0x876a('0x14')]=function(_0x20ebc1){return new BPromise(function(_0x435b4e,_0x11752d){if(_0x20ebc1){return getUser({'interface':_0x20ebc1})[_0x876a('0xb')](function(_0x5b4d9f){return _0x435b4e(_0x5b4d9f);})[_0x876a('0xc')](function(_0x449338){logger[_0x876a('0x9')](_0x449338[_0x876a('0xd')]);return _0x435b4e(null);});}else{return _0x435b4e(null);}});};exports[_0x876a('0x15')]=function(_0x1f1316){return new BPromise(function(_0x2ee8c0,_0xb094a5){if(_0x1f1316){return getUser({'name':_0x1f1316})[_0x876a('0xb')](function(_0x34e50a){return _0x2ee8c0(_0x34e50a);})[_0x876a('0xc')](function(_0x47524f){logger[_0x876a('0x9')](_0x47524f[_0x876a('0xd')]);return _0x2ee8c0(null);});}else{return _0x2ee8c0(null);}});};exports[_0x876a('0x16')]=function(_0x271653){return new BPromise(function(_0x54e763,_0x896266){if(_0x271653){return client[_0x876a('0xa')](_0x876a('0x17'),{'options':{'raw':!![],'attributes':['id',_0x876a('0x10'),_0x876a('0x18'),'acw','acwTimeout'],'where':{'name':_0x271653},'limit':0x1}})[_0x876a('0xb')](function(_0x429e2b){logger[_0x876a('0x6')](_0x876a('0x19')+_0x271653+'|'+(_0x429e2b[_0x876a('0x13')]['length']?_0x876a('0x1a'):_0x876a('0x1b')));return _0x54e763(_0x429e2b[_0x876a('0x13')][_0x876a('0x12')]?_0x429e2b['result'][0x0]:null);})[_0x876a('0xc')](function(_0x46ba69){logger[_0x876a('0x9')](_0x46ba69[_0x876a('0xd')]);return _0x54e763(null);});}else{return _0x54e763(null);}});};exports[_0x876a('0x1c')]=function(_0x3f697d,_0x4bd1cb){return moment(_0x3f697d)['add'](_0x4bd1cb,_0x876a('0x1d'))[_0x876a('0x1e')](_0x876a('0x1f'));};exports['subtractTime']=function(_0x3cd0c9,_0x4853e2){return moment(_0x3cd0c9)['subtract'](_0x4853e2,_0x876a('0x1d'))[_0x876a('0x1e')](_0x876a('0x1f'));};exports[_0x876a('0x20')]=function(_0x364af5,_0x27bff5){return moment(_0x364af5)[_0x876a('0x21')](moment(_0x27bff5),_0x876a('0x1d'));};exports[_0x876a('0x22')]=function(_0x16eec6,_0x261528){return parseInt(_0x16eec6,0xa)+parseInt(_0x261528,0xa);};exports[_0x876a('0x23')]=function(){return moment()[_0x876a('0x1e')](_0x876a('0x1f'));};exports[_0x876a('0x24')]=function(_0x6a5424,_0x77eba1){if(_0x77eba1){return moment(_0x6a5424)['isAfter'](_0x77eba1);}else{return!![];}};exports[_0x876a('0x25')]=function(_0x1b8a1f,_0x48541b){if(_0x48541b){return moment(_0x1b8a1f)[_0x876a('0x25')](_0x48541b);}else if(_0x1b8a1f){return!![];}else{return![];}};
\ No newline at end of file
+var _0xe9af=['getUserByName','getVoiceQueueByName','GetVoiceQueue','type','acw','GETVOICEQUEUEBYNAME|','format','subtractTime','subtract','seconds','YYYY-MM-DD\x20HH:mm:ss','sumTime','now','isAfter','isBefore','jayson/promise','moment','bluebird','client','http','../../config/logger','xdr','info','debug','stringify','error','stack','request','then','GetUser','internal','name','GETUSER|','result','length','FOUND','NOTFOUND','catch','getUserByInterface'];(function(_0x31fb26,_0x1fa9c0){var _0x50d0bd=function(_0x98d5c7){while(--_0x98d5c7){_0x31fb26['push'](_0x31fb26['shift']());}};_0x50d0bd(++_0x1fa9c0);}(_0xe9af,0x1e3));var _0xfe9a=function(_0x3bc66e,_0xd53e22){_0x3bc66e=_0x3bc66e-0x0;var _0x42e333=_0xe9af[_0x3bc66e];return _0x42e333;};'use strict';var jayson=require(_0xfe9a('0x0'));var moment=require(_0xfe9a('0x1'));var BPromise=require(_0xfe9a('0x2'));var client=jayson[_0xfe9a('0x3')][_0xfe9a('0x4')]({'port':0x2329});var logger=require(_0xfe9a('0x5'))(_0xfe9a('0x6'));exports[_0xfe9a('0x7')]=function(_0x2f50c1){logger['info'](_0x2f50c1);};exports['debug']=function(_0x3bb899){logger[_0xfe9a('0x8')](JSON[_0xfe9a('0x9')](_0x3bb899));};exports[_0xfe9a('0xa')]=function(_0x52330c){logger[_0xfe9a('0xa')](_0x52330c[_0xfe9a('0xb')]);};exports['request']=function(_0x408db3,_0x872d9f){return client[_0xfe9a('0xc')](_0x408db3,{'body':_0x872d9f})[_0xfe9a('0xd')](function(_0x1b61ab){logger[_0xfe9a('0x8')](JSON[_0xfe9a('0x9')](_0x1b61ab));})['catch'](function(_0x811896){logger[_0xfe9a('0xa')](_0x811896[_0xfe9a('0xb')]);});};function getUser(_0x383460){return client[_0xfe9a('0xc')](_0xfe9a('0xe'),{'options':{'raw':!![],'attributes':['id',_0xfe9a('0xf'),_0xfe9a('0x10'),'interface'],'where':_0x383460,'limit':0x1}})[_0xfe9a('0xd')](function(_0x2936c8){logger[_0xfe9a('0x7')](_0xfe9a('0x11')+JSON[_0xfe9a('0x9')](_0x383460)+'|'+(_0x2936c8[_0xfe9a('0x12')][_0xfe9a('0x13')]?_0xfe9a('0x14'):_0xfe9a('0x15')));return _0x2936c8[_0xfe9a('0x12')][_0xfe9a('0x13')]?_0x2936c8['result'][0x0]:null;});}exports['getUserByInternal']=function(_0xe6f597){return new BPromise(function(_0x5d209f,_0x394b54){if(_0xe6f597){return getUser({'internal':_0xe6f597})[_0xfe9a('0xd')](function(_0x1ab90d){return _0x5d209f(_0x1ab90d);})[_0xfe9a('0x16')](function(_0x306867){logger['error'](_0x306867['stack']);return _0x5d209f(null);});}else{return _0x5d209f(null);}});};exports[_0xfe9a('0x17')]=function(_0x5aebdc){return new BPromise(function(_0xd9f1dc,_0x37fd32){if(_0x5aebdc){return getUser({'interface':_0x5aebdc})['then'](function(_0x39bb38){return _0xd9f1dc(_0x39bb38);})[_0xfe9a('0x16')](function(_0x464a81){logger['error'](_0x464a81['stack']);return _0xd9f1dc(null);});}else{return _0xd9f1dc(null);}});};exports[_0xfe9a('0x18')]=function(_0x140256){return new BPromise(function(_0x2e0cd0,_0xfdac70){if(_0x140256){return getUser({'name':_0x140256})[_0xfe9a('0xd')](function(_0xcdf9a9){return _0x2e0cd0(_0xcdf9a9);})['catch'](function(_0x39d122){logger['error'](_0x39d122[_0xfe9a('0xb')]);return _0x2e0cd0(null);});}else{return _0x2e0cd0(null);}});};exports[_0xfe9a('0x19')]=function(_0x3011d1){return new BPromise(function(_0x2a90cf,_0x3bc0cc){if(_0x3011d1){return client['request'](_0xfe9a('0x1a'),{'options':{'raw':!![],'attributes':['id','name',_0xfe9a('0x1b'),_0xfe9a('0x1c'),'acwTimeout'],'where':{'name':_0x3011d1},'limit':0x1}})['then'](function(_0x2ae9be){logger[_0xfe9a('0x7')](_0xfe9a('0x1d')+_0x3011d1+'|'+(_0x2ae9be[_0xfe9a('0x12')]['length']?_0xfe9a('0x14'):'NOTFOUND'));return _0x2a90cf(_0x2ae9be[_0xfe9a('0x12')]['length']?_0x2ae9be['result'][0x0]:null);})[_0xfe9a('0x16')](function(_0xee9fb2){logger[_0xfe9a('0xa')](_0xee9fb2[_0xfe9a('0xb')]);return _0x2a90cf(null);});}else{return _0x2a90cf(null);}});};exports['addTime']=function(_0x6a7598,_0xd82e68){return moment(_0x6a7598)['add'](_0xd82e68,'seconds')[_0xfe9a('0x1e')]('YYYY-MM-DD\x20HH:mm:ss');};exports[_0xfe9a('0x1f')]=function(_0x551a7a,_0x5986c1){return moment(_0x551a7a)[_0xfe9a('0x20')](_0x5986c1,_0xfe9a('0x21'))[_0xfe9a('0x1e')](_0xfe9a('0x22'));};exports['diffTime']=function(_0xf0605,_0x3fc1f8){return moment(_0xf0605)['diff'](moment(_0x3fc1f8),'seconds');};exports[_0xfe9a('0x23')]=function(_0x4aa538,_0x3ae3f7){return parseInt(_0x4aa538,0xa)+parseInt(_0x3ae3f7,0xa);};exports[_0xfe9a('0x24')]=function(){return moment()[_0xfe9a('0x1e')](_0xfe9a('0x22'));};exports[_0xfe9a('0x25')]=function(_0xff82d5,_0x2e2481){if(_0x2e2481){return moment(_0xff82d5)[_0xfe9a('0x25')](_0x2e2481);}else{return!![];}};exports[_0xfe9a('0x26')]=function(_0x5a6f5e,_0x2307a0){if(_0x2307a0){return moment(_0x5a6f5e)['isBefore'](_0x2307a0);}else if(_0x5a6f5e){return!![];}else{return![];}};
\ No newline at end of file